summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog257
-rw-r--r--FTP6
-rw-r--r--Makefile.in181
-rw-r--r--README11
-rw-r--r--admin/ChangeLog42
-rw-r--r--admin/FOR-RELEASE114
-rw-r--r--admin/MAINTAINERS (renamed from MAINTAINERS)17
-rw-r--r--admin/admin.el66
-rwxr-xr-xadmin/make-emacs2
-rw-r--r--admin/make-tarball.txt21
-rw-r--r--admin/notes/changelogs5
-rw-r--r--admin/notes/copyright66
-rw-r--r--admin/notes/lel-TODO107
-rw-r--r--admin/notes/multi-tty1362
-rw-r--r--config.bat19
-rwxr-xr-xconfigure1205
-rw-r--r--configure.in472
-rw-r--r--doc/emacs/.gitignore (renamed from man/.gitignore)0
-rw-r--r--doc/emacs/ChangeLog (renamed from man/ChangeLog)3482
-rw-r--r--doc/emacs/Makefile.in159
-rw-r--r--doc/emacs/abbrevs.texi (renamed from man/abbrevs.texi)0
-rw-r--r--doc/emacs/ack.texi (renamed from man/ack.texi)0
-rw-r--r--doc/emacs/anti.texi (renamed from man/anti.texi)0
-rw-r--r--doc/emacs/arevert-xtra.texi (renamed from man/arevert-xtra.texi)0
-rw-r--r--doc/emacs/basic.texi (renamed from man/basic.texi)4
-rw-r--r--doc/emacs/buffers.texi (renamed from man/buffers.texi)0
-rw-r--r--doc/emacs/building.texi (renamed from man/building.texi)4
-rw-r--r--doc/emacs/cal-xtra.texi (renamed from man/cal-xtra.texi)0
-rw-r--r--doc/emacs/calendar.texi (renamed from man/calendar.texi)8
-rw-r--r--doc/emacs/cmdargs.texi (renamed from man/cmdargs.texi)3
-rw-r--r--doc/emacs/commands.texi (renamed from man/commands.texi)0
-rw-r--r--doc/emacs/custom.texi (renamed from man/custom.texi)7
-rw-r--r--doc/emacs/dired-xtra.texi (renamed from man/dired-xtra.texi)0
-rw-r--r--doc/emacs/dired.texi (renamed from man/dired.texi)2
-rw-r--r--doc/emacs/display.texi (renamed from man/display.texi)0
-rw-r--r--doc/emacs/doclicense.texi (renamed from etc/gfdl.1)298
-rw-r--r--doc/emacs/emacs-xtra.texi (renamed from man/emacs-xtra.texi)2
-rw-r--r--doc/emacs/emacs.texi (renamed from man/emacs.texi)8
-rw-r--r--doc/emacs/emerge-xtra.texi (renamed from man/emerge-xtra.texi)0
-rw-r--r--doc/emacs/entering.texi (renamed from man/entering.texi)0
-rw-r--r--doc/emacs/files.texi (renamed from man/files.texi)784
-rw-r--r--doc/emacs/fixit.texi (renamed from man/fixit.texi)4
-rw-r--r--doc/emacs/fortran-xtra.texi (renamed from man/fortran-xtra.texi)4
-rw-r--r--doc/emacs/frames.texi (renamed from man/frames.texi)13
-rw-r--r--doc/emacs/glossary.texi (renamed from man/glossary.texi)0
-rw-r--r--doc/emacs/gnu.texi (renamed from man/gnu.texi)0
-rw-r--r--doc/emacs/gpl.texi721
-rw-r--r--doc/emacs/help.texi (renamed from man/help.texi)41
-rw-r--r--doc/emacs/indent.texi (renamed from man/indent.texi)0
-rw-r--r--doc/emacs/killing.texi (renamed from man/killing.texi)0
-rw-r--r--doc/emacs/kmacro.texi (renamed from man/kmacro.texi)0
-rw-r--r--doc/emacs/m-x.texi (renamed from man/m-x.texi)0
-rw-r--r--doc/emacs/macos.texi (renamed from man/macos.texi)0
-rw-r--r--doc/emacs/maintaining.texi (renamed from man/maintaining.texi)8
-rw-r--r--doc/emacs/major.texi (renamed from man/major.texi)5
-rw-r--r--doc/emacs/makefile.w32-in144
-rw-r--r--doc/emacs/mark.texi (renamed from man/mark.texi)0
-rw-r--r--doc/emacs/mini.texi (renamed from man/mini.texi)8
-rw-r--r--doc/emacs/misc.texi (renamed from man/misc.texi)5
-rw-r--r--doc/emacs/msdog-xtra.texi (renamed from man/msdog-xtra.texi)0
-rw-r--r--doc/emacs/msdog.texi (renamed from man/msdog.texi)0
-rw-r--r--doc/emacs/mule.texi (renamed from man/mule.texi)26
-rw-r--r--doc/emacs/picture-xtra.texi (renamed from man/picture-xtra.texi)0
-rw-r--r--doc/emacs/programs.texi (renamed from man/programs.texi)0
-rw-r--r--doc/emacs/regs.texi (renamed from man/regs.texi)0
-rw-r--r--doc/emacs/rmail.texi (renamed from man/rmail.texi)0
-rw-r--r--doc/emacs/screen.texi (renamed from man/screen.texi)5
-rw-r--r--doc/emacs/search.texi (renamed from man/search.texi)6
-rw-r--r--doc/emacs/sending.texi (renamed from man/sending.texi)0
-rw-r--r--doc/emacs/text.texi (renamed from man/text.texi)3
-rw-r--r--doc/emacs/trouble.texi (renamed from man/trouble.texi)0
-rw-r--r--doc/emacs/vc-xtra.texi (renamed from man/vc-xtra.texi)2
-rw-r--r--doc/emacs/vc1-xtra.texi (renamed from man/vc1-xtra.texi)30
-rw-r--r--doc/emacs/vc2-xtra.texi (renamed from man/vc2-xtra.texi)49
-rw-r--r--doc/emacs/windows.texi (renamed from man/windows.texi)0
-rw-r--r--doc/emacs/xresources.texi (renamed from man/xresources.texi)0
-rw-r--r--doc/lispintro/.gitignore (renamed from lispintro/.gitignore)0
-rw-r--r--doc/lispintro/ChangeLog (renamed from lispintro/ChangeLog)21
-rw-r--r--doc/lispintro/Makefile.am (renamed from lispintro/Makefile.am)0
-rw-r--r--doc/lispintro/Makefile.in (renamed from lispintro/Makefile.in)5
-rw-r--r--doc/lispintro/Makefile.old (renamed from lispintro/Makefile.old)0
-rw-r--r--doc/lispintro/README (renamed from lispintro/README)0
-rw-r--r--doc/lispintro/aclocal.m4 (renamed from lispintro/aclocal.m4)0
-rwxr-xr-x[-rw-r--r--]doc/lispintro/configure (renamed from lispintro/configure)0
-rw-r--r--doc/lispintro/configure.in (renamed from lispintro/configure.in)0
-rw-r--r--doc/lispintro/cons-1.eps (renamed from lispintro/cons-1.eps)0
-rw-r--r--doc/lispintro/cons-2.eps (renamed from lispintro/cons-2.eps)0
-rw-r--r--doc/lispintro/cons-2a.eps (renamed from lispintro/cons-2a.eps)0
-rw-r--r--doc/lispintro/cons-3.eps (renamed from lispintro/cons-3.eps)0
-rw-r--r--doc/lispintro/cons-4.eps (renamed from lispintro/cons-4.eps)0
-rw-r--r--doc/lispintro/cons-5.eps (renamed from lispintro/cons-5.eps)0
-rw-r--r--doc/lispintro/drawers.eps (renamed from lispintro/drawers.eps)0
-rw-r--r--doc/lispintro/emacs-lisp-intro.texi (renamed from lispintro/emacs-lisp-intro.texi)10
-rwxr-xr-x[-rw-r--r--]doc/lispintro/install-sh (renamed from lispintro/install-sh)0
-rw-r--r--doc/lispintro/lambda-1.eps (renamed from lispintro/lambda-1.eps)0
-rw-r--r--doc/lispintro/lambda-2.eps (renamed from lispintro/lambda-2.eps)0
-rw-r--r--doc/lispintro/lambda-3.eps (renamed from lispintro/lambda-3.eps)0
-rw-r--r--doc/lispintro/makefile.w32-in (renamed from lispintro/makefile.w32-in)4
-rwxr-xr-x[-rw-r--r--]doc/lispintro/missing (renamed from lispintro/missing)0
-rwxr-xr-x[-rw-r--r--]doc/lispintro/mkinstalldirs (renamed from lispintro/mkinstalldirs)0
-rw-r--r--doc/lispref/.arch-inventory (renamed from lispref/.arch-inventory)0
-rw-r--r--doc/lispref/.gitignore (renamed from lispref/.gitignore)0
-rw-r--r--doc/lispref/ChangeLog (renamed from lispref/ChangeLog)224
-rw-r--r--doc/lispref/Makefile.in (renamed from lispref/Makefile.in)7
-rw-r--r--doc/lispref/README (renamed from lispref/README)0
-rw-r--r--doc/lispref/abbrevs.texi (renamed from lispref/abbrevs.texi)214
-rw-r--r--doc/lispref/advice.texi (renamed from lispref/advice.texi)2
-rw-r--r--doc/lispref/anti.texi (renamed from lispref/anti.texi)0
-rw-r--r--doc/lispref/back.texi (renamed from lispref/back.texi)0
-rw-r--r--doc/lispref/backups.texi (renamed from lispref/backups.texi)2
-rw-r--r--doc/lispref/book-spine.texinfo (renamed from lispref/book-spine.texinfo)0
-rw-r--r--doc/lispref/buffers.texi (renamed from lispref/buffers.texi)2
-rw-r--r--doc/lispref/commands.texi (renamed from lispref/commands.texi)57
-rw-r--r--doc/lispref/compile.texi (renamed from lispref/compile.texi)2
-rwxr-xr-xdoc/lispref/configure (renamed from lispref/configure)0
-rw-r--r--doc/lispref/configure.in (renamed from lispref/configure.in)0
-rw-r--r--doc/lispref/control.texi (renamed from lispref/control.texi)51
-rw-r--r--doc/lispref/customize.texi (renamed from lispref/customize.texi)10
-rw-r--r--doc/lispref/debugging.texi (renamed from lispref/debugging.texi)2
-rw-r--r--doc/lispref/display.texi (renamed from lispref/display.texi)63
-rw-r--r--doc/lispref/doclicense.texi (renamed from lispref/doclicense.texi)0
-rw-r--r--doc/lispref/edebug.texi (renamed from lispref/edebug.texi)0
-rw-r--r--doc/lispref/elisp-covers.texi (renamed from lispref/elisp-covers.texi)0
-rw-r--r--doc/lispref/elisp.texi (renamed from lispref/elisp.texi)14
-rw-r--r--doc/lispref/errors.texi (renamed from lispref/errors.texi)2
-rw-r--r--doc/lispref/eval.texi (renamed from lispref/eval.texi)2
-rw-r--r--doc/lispref/files.texi (renamed from lispref/files.texi)188
-rw-r--r--doc/lispref/frames.texi (renamed from lispref/frames.texi)10
-rw-r--r--doc/lispref/front-cover-1.texi (renamed from lispref/front-cover-1.texi)0
-rw-r--r--doc/lispref/functions.texi (renamed from lispref/functions.texi)2
-rw-r--r--doc/lispref/gpl.texi (renamed from lispref/gpl.texi)2
-rw-r--r--doc/lispref/hash.texi (renamed from lispref/hash.texi)2
-rw-r--r--doc/lispref/help.texi (renamed from lispref/help.texi)13
-rw-r--r--doc/lispref/hooks.texi (renamed from lispref/hooks.texi)6
-rw-r--r--doc/lispref/index.texi (renamed from lispref/index.texi)2
-rw-r--r--doc/lispref/internals.texi (renamed from lispref/internals.texi)2
-rw-r--r--doc/lispref/intro.texi (renamed from lispref/intro.texi)2
-rw-r--r--doc/lispref/keymaps.texi (renamed from lispref/keymaps.texi)80
-rw-r--r--doc/lispref/lay-flat.texi (renamed from lispref/lay-flat.texi)0
-rw-r--r--doc/lispref/lists.texi (renamed from lispref/lists.texi)2
-rw-r--r--doc/lispref/loading.texi (renamed from lispref/loading.texi)2
-rw-r--r--doc/lispref/locals.texi (renamed from lispref/locals.texi)2
-rw-r--r--doc/lispref/macros.texi (renamed from lispref/macros.texi)4
-rw-r--r--doc/lispref/makefile.w32-in (renamed from lispref/makefile.w32-in)6
-rw-r--r--doc/lispref/maps.texi (renamed from lispref/maps.texi)9
-rw-r--r--doc/lispref/markers.texi (renamed from lispref/markers.texi)2
-rw-r--r--doc/lispref/minibuf.texi (renamed from lispref/minibuf.texi)73
-rwxr-xr-xdoc/lispref/mkinstalldirs (renamed from lispref/mkinstalldirs)0
-rw-r--r--doc/lispref/modes.texi (renamed from lispref/modes.texi)2
-rw-r--r--doc/lispref/nonascii.texi (renamed from lispref/nonascii.texi)5
-rw-r--r--doc/lispref/numbers.texi (renamed from lispref/numbers.texi)2
-rw-r--r--doc/lispref/objects.texi (renamed from lispref/objects.texi)11
-rw-r--r--doc/lispref/os.texi (renamed from lispref/os.texi)9
-rw-r--r--doc/lispref/positions.texi (renamed from lispref/positions.texi)2
-rw-r--r--doc/lispref/processes.texi (renamed from lispref/processes.texi)39
-rw-r--r--doc/lispref/searching.texi (renamed from lispref/searching.texi)22
-rw-r--r--doc/lispref/sequences.texi (renamed from lispref/sequences.texi)2
-rw-r--r--doc/lispref/spellfile (renamed from lispref/spellfile)0
-rw-r--r--doc/lispref/streams.texi (renamed from lispref/streams.texi)2
-rw-r--r--doc/lispref/strings.texi (renamed from lispref/strings.texi)5
-rw-r--r--doc/lispref/symbols.texi (renamed from lispref/symbols.texi)2
-rw-r--r--doc/lispref/syntax.texi (renamed from lispref/syntax.texi)2
-rw-r--r--doc/lispref/text.texi (renamed from lispref/text.texi)99
-rwxr-xr-xdoc/lispref/tindex.pl (renamed from lispref/tindex.pl)0
-rw-r--r--doc/lispref/tips.texi (renamed from lispref/tips.texi)2
-rw-r--r--doc/lispref/two-volume-cross-refs.txt (renamed from lispref/two-volume-cross-refs.txt)0
-rw-r--r--doc/lispref/two-volume.make (renamed from lispref/two-volume.make)0
-rw-r--r--doc/lispref/two.el (renamed from lispref/two.el)0
-rw-r--r--doc/lispref/variables.texi (renamed from lispref/variables.texi)2
-rw-r--r--doc/lispref/vol1.texi (renamed from lispref/vol1.texi)0
-rw-r--r--doc/lispref/vol2.texi (renamed from lispref/vol2.texi)0
-rw-r--r--doc/lispref/windows.texi (renamed from lispref/windows.texi)2
-rw-r--r--doc/man/ChangeLog35
-rw-r--r--doc/man/ctags.1 (renamed from etc/ctags.1)0
-rw-r--r--doc/man/emacs.1 (renamed from etc/emacs.1)0
-rw-r--r--doc/man/emacsclient.1 (renamed from etc/emacsclient.1)0
-rw-r--r--doc/man/etags.1 (renamed from etc/etags.1)11
-rw-r--r--doc/misc/.gitignore23
-rw-r--r--doc/misc/ChangeLog4502
-rw-r--r--doc/misc/Makefile.in (renamed from man/Makefile.in)511
-rw-r--r--doc/misc/ada-mode.texi (renamed from man/ada-mode.texi)2
-rw-r--r--doc/misc/autotype.texi (renamed from man/autotype.texi)2
-rw-r--r--doc/misc/calc.texi (renamed from man/calc.texi)623
-rw-r--r--doc/misc/cc-mode.texi (renamed from man/cc-mode.texi)8
-rw-r--r--doc/misc/cl.texi (renamed from man/cl.texi)2
-rw-r--r--doc/misc/dired-x.texi (renamed from man/dired-x.texi)6
-rw-r--r--doc/misc/doclicense.texi (renamed from man/doclicense.texi)0
-rw-r--r--doc/misc/ebrowse.texi (renamed from man/ebrowse.texi)2
-rw-r--r--doc/misc/ediff.texi (renamed from man/ediff.texi)2
-rw-r--r--doc/misc/emacs-mime.texi (renamed from man/emacs-mime.texi)57
-rw-r--r--doc/misc/erc.texi (renamed from man/erc.texi)31
-rw-r--r--doc/misc/eshell.texi (renamed from man/eshell.texi)2
-rw-r--r--doc/misc/eudc.texi (renamed from man/eudc.texi)2
-rw-r--r--doc/misc/faq.texi (renamed from man/faq.texi)22
-rw-r--r--doc/misc/flymake.texi (renamed from man/flymake.texi)2
-rw-r--r--doc/misc/forms.texi (renamed from man/forms.texi)2
-rw-r--r--doc/misc/gnus-coding.texi381
-rw-r--r--doc/misc/gnus-faq.texi (renamed from man/gnus-faq.texi)21
-rw-r--r--doc/misc/gnus-news.el121
-rw-r--r--doc/misc/gnus-news.texi264
-rw-r--r--doc/misc/gnus.texi (renamed from man/gnus.texi)1517
-rw-r--r--doc/misc/gpl.texi (renamed from man/gpl.texi)0
-rw-r--r--doc/misc/idlwave.texi (renamed from man/idlwave.texi)2
-rw-r--r--doc/misc/info.texi (renamed from man/info.texi)74
-rw-r--r--doc/misc/makefile.w32-in (renamed from man/makefile.w32-in)102
-rw-r--r--doc/misc/message.texi (renamed from man/message.texi)114
-rw-r--r--doc/misc/mh-e.texi (renamed from man/mh-e.texi)32
-rw-r--r--doc/misc/newsticker.texi (renamed from man/newsticker.texi)2
-rw-r--r--doc/misc/org.texi (renamed from man/org.texi)3121
-rw-r--r--doc/misc/pcl-cvs.texi (renamed from man/pcl-cvs.texi)2
-rw-r--r--doc/misc/pgg.texi (renamed from man/pgg.texi)16
-rw-r--r--doc/misc/rcirc.texi (renamed from man/rcirc.texi)2
-rw-r--r--doc/misc/reftex.texi (renamed from man/reftex.texi)2
-rw-r--r--doc/misc/remember.texi406
-rw-r--r--doc/misc/sasl.texi270
-rw-r--r--doc/misc/sc.texi (renamed from man/sc.texi)2
-rw-r--r--doc/misc/ses.texi (renamed from man/ses.texi)31
-rw-r--r--doc/misc/sieve.texi (renamed from man/sieve.texi)8
-rw-r--r--doc/misc/smtpmail.texi (renamed from man/smtpmail.texi)2
-rw-r--r--doc/misc/speedbar.texi (renamed from man/speedbar.texi)2
-rw-r--r--doc/misc/texinfo.tex (renamed from man/texinfo.tex)2
-rw-r--r--doc/misc/tramp.texi (renamed from man/tramp.texi)1803
-rw-r--r--doc/misc/trampver.texi (renamed from man/trampver.texi)25
-rw-r--r--doc/misc/url.texi (renamed from man/url.texi)2
-rw-r--r--doc/misc/vip.texi (renamed from man/vip.texi)2
-rw-r--r--doc/misc/viper.texi (renamed from man/viper.texi)12
-rw-r--r--doc/misc/widget.texi (renamed from man/widget.texi)2
-rw-r--r--doc/misc/woman.texi (renamed from man/woman.texi)2
-rw-r--r--etc/.gitignore1
-rw-r--r--etc/AUTHORS (renamed from AUTHORS)6
-rw-r--r--etc/CONTRIBUTE (renamed from CONTRIBUTE)24
-rw-r--r--etc/ChangeLog278
-rw-r--r--etc/DEBUG8
-rw-r--r--etc/ERC-NEWS21
-rw-r--r--etc/GNUS-NEWS563
-rw-r--r--etc/MACHINES11
-rw-r--r--etc/MORE.STUFF2
-rw-r--r--etc/NEWS5696
-rw-r--r--etc/NEWS.225510
-rw-r--r--etc/PROBLEMS16
-rw-r--r--etc/README37
-rw-r--r--etc/TODO93
-rw-r--r--etc/calccard.ps3023
-rw-r--r--etc/compilation.txt31
-rw-r--r--etc/cs-dired-ref.ps2096
-rw-r--r--etc/cs-refcard.ps2523
-rw-r--r--etc/de-refcard.ps2837
-rw-r--r--etc/dired-ref.ps1889
-rw-r--r--etc/e/README12
-rw-r--r--etc/emacs.bash2
-rw-r--r--etc/emacs.csh5
-rw-r--r--etc/emacs.py239
-rw-r--r--etc/emacs2.py239
-rw-r--r--etc/emacs3.py244
-rw-r--r--etc/emacstool.1155
-rw-r--r--etc/fr-drdref.ps1997
-rw-r--r--etc/fr-refcard.ps2755
-rw-r--r--etc/gnus-booklet.ps4317
-rw-r--r--etc/gnus-refcard.ps4582
-rw-r--r--etc/gnus/gnus-setup.ast51
-rw-r--r--etc/gnus/news-server.ast64
-rw-r--r--etc/images/README11
-rw-r--r--etc/images/gnus.pbm (renamed from etc/gnus.pbm)bin9293 -> 9293 bytes
-rw-r--r--etc/images/gnus/mail_send.xpm39
-rw-r--r--etc/images/letter.pbm (renamed from etc/letter.pbm)0
-rw-r--r--etc/images/letter.xpm (renamed from etc/letter.xpm)0
-rw-r--r--etc/images/smilies/grayscale/blink.xpm24
-rw-r--r--etc/images/smilies/grayscale/braindamaged.xpm23
-rw-r--r--etc/images/smilies/grayscale/cry.xpm23
-rw-r--r--etc/images/smilies/grayscale/dead.xpm21
-rw-r--r--etc/images/smilies/grayscale/evil.xpm23
-rw-r--r--etc/images/smilies/grayscale/forced.xpm23
-rw-r--r--etc/images/smilies/grayscale/frown.xpm22
-rw-r--r--etc/images/smilies/grayscale/grin.xpm25
-rw-r--r--etc/images/smilies/grayscale/indifferent.xpm23
-rw-r--r--etc/images/smilies/grayscale/reverse-smile.xpm22
-rw-r--r--etc/images/smilies/grayscale/sad.xpm22
-rw-r--r--etc/images/smilies/grayscale/smile.xpm22
-rw-r--r--etc/images/smilies/grayscale/wry.xpm23
-rw-r--r--etc/images/smilies/medium/blink.xpm29
-rw-r--r--etc/images/smilies/medium/braindamaged.xpm28
-rw-r--r--etc/images/smilies/medium/cry.xpm28
-rw-r--r--etc/images/smilies/medium/dead.xpm28
-rw-r--r--etc/images/smilies/medium/evil.xpm29
-rw-r--r--etc/images/smilies/medium/forced.xpm28
-rw-r--r--etc/images/smilies/medium/frown.xpm28
-rw-r--r--etc/images/smilies/medium/grin.xpm30
-rw-r--r--etc/images/smilies/medium/indifferent.xpm28
-rw-r--r--etc/images/smilies/medium/reverse-smile.xpm29
-rw-r--r--etc/images/smilies/medium/sad.xpm28
-rw-r--r--etc/images/smilies/medium/smile.xpm29
-rw-r--r--etc/images/smilies/medium/wry.xpm28
-rw-r--r--etc/images/splash.pbm (renamed from etc/splash.pbm)bin8273 -> 8273 bytes
-rw-r--r--etc/images/splash.xpm (renamed from etc/splash.xpm)0
-rw-r--r--etc/images/splash8.xpm (renamed from etc/splash8.xpm)0
-rw-r--r--etc/images/tree-widget/default/README (renamed from etc/tree-widget/default/README)0
-rw-r--r--etc/images/tree-widget/default/close.png (renamed from etc/tree-widget/default/close.png)bin300 -> 300 bytes
-rw-r--r--etc/images/tree-widget/default/close.xpm (renamed from etc/tree-widget/default/close.xpm)0
-rw-r--r--etc/images/tree-widget/default/empty.png (renamed from etc/tree-widget/default/empty.png)bin298 -> 298 bytes
-rw-r--r--etc/images/tree-widget/default/empty.xpm (renamed from etc/tree-widget/default/empty.xpm)0
-rw-r--r--etc/images/tree-widget/default/end-guide.png (renamed from etc/tree-widget/default/end-guide.png)bin181 -> 181 bytes
-rw-r--r--etc/images/tree-widget/default/end-guide.xpm (renamed from etc/tree-widget/default/end-guide.xpm)0
-rw-r--r--etc/images/tree-widget/default/guide.png (renamed from etc/tree-widget/default/guide.png)bin180 -> 180 bytes
-rw-r--r--etc/images/tree-widget/default/guide.xpm (renamed from etc/tree-widget/default/guide.xpm)0
-rw-r--r--etc/images/tree-widget/default/handle.png (renamed from etc/tree-widget/default/handle.png)bin180 -> 180 bytes
-rw-r--r--etc/images/tree-widget/default/handle.xpm (renamed from etc/tree-widget/default/handle.xpm)0
-rw-r--r--etc/images/tree-widget/default/leaf.png (renamed from etc/tree-widget/default/leaf.png)bin277 -> 277 bytes
-rw-r--r--etc/images/tree-widget/default/leaf.xpm (renamed from etc/tree-widget/default/leaf.xpm)0
-rw-r--r--etc/images/tree-widget/default/no-guide.png (renamed from etc/tree-widget/default/no-guide.png)bin170 -> 170 bytes
-rw-r--r--etc/images/tree-widget/default/no-guide.xpm (renamed from etc/tree-widget/default/no-guide.xpm)0
-rw-r--r--etc/images/tree-widget/default/no-handle.png (renamed from etc/tree-widget/default/no-handle.png)bin173 -> 173 bytes
-rw-r--r--etc/images/tree-widget/default/no-handle.xpm (renamed from etc/tree-widget/default/no-handle.xpm)0
-rw-r--r--etc/images/tree-widget/default/open.png (renamed from etc/tree-widget/default/open.png)bin313 -> 313 bytes
-rw-r--r--etc/images/tree-widget/default/open.xpm (renamed from etc/tree-widget/default/open.xpm)0
-rw-r--r--etc/images/tree-widget/folder/README (renamed from etc/tree-widget/folder/README)0
-rw-r--r--etc/images/tree-widget/folder/close.png (renamed from etc/tree-widget/folder/close.png)bin298 -> 298 bytes
-rw-r--r--etc/images/tree-widget/folder/close.xpm (renamed from etc/tree-widget/folder/close.xpm)0
-rw-r--r--etc/images/tree-widget/folder/empty.png (renamed from etc/tree-widget/folder/empty.png)bin305 -> 305 bytes
-rw-r--r--etc/images/tree-widget/folder/empty.xpm (renamed from etc/tree-widget/folder/empty.xpm)0
-rw-r--r--etc/images/tree-widget/folder/end-guide.png (renamed from etc/tree-widget/folder/end-guide.png)bin177 -> 177 bytes
-rw-r--r--etc/images/tree-widget/folder/end-guide.xpm (renamed from etc/tree-widget/folder/end-guide.xpm)0
-rw-r--r--etc/images/tree-widget/folder/guide.png (renamed from etc/tree-widget/folder/guide.png)bin178 -> 178 bytes
-rw-r--r--etc/images/tree-widget/folder/guide.xpm (renamed from etc/tree-widget/folder/guide.xpm)0
-rw-r--r--etc/images/tree-widget/folder/handle.png (renamed from etc/tree-widget/folder/handle.png)bin180 -> 180 bytes
-rw-r--r--etc/images/tree-widget/folder/handle.xpm (renamed from etc/tree-widget/folder/handle.xpm)0
-rw-r--r--etc/images/tree-widget/folder/leaf.png (renamed from etc/tree-widget/folder/leaf.png)bin336 -> 336 bytes
-rw-r--r--etc/images/tree-widget/folder/leaf.xpm (renamed from etc/tree-widget/folder/leaf.xpm)0
-rw-r--r--etc/images/tree-widget/folder/no-guide.png (renamed from etc/tree-widget/folder/no-guide.png)bin171 -> 171 bytes
-rw-r--r--etc/images/tree-widget/folder/no-guide.xpm (renamed from etc/tree-widget/folder/no-guide.xpm)0
-rw-r--r--etc/images/tree-widget/folder/no-handle.png (renamed from etc/tree-widget/folder/no-handle.png)bin173 -> 173 bytes
-rw-r--r--etc/images/tree-widget/folder/no-handle.xpm (renamed from etc/tree-widget/folder/no-handle.xpm)0
-rw-r--r--etc/images/tree-widget/folder/open.png (renamed from etc/tree-widget/folder/open.png)bin344 -> 344 bytes
-rw-r--r--etc/images/tree-widget/folder/open.xpm (renamed from etc/tree-widget/folder/open.xpm)0
-rw-r--r--etc/orgcard.ps2871
-rw-r--r--etc/pl-refcard.ps4086
-rw-r--r--etc/pt-br-refcard.ps2576
-rw-r--r--etc/refcard.ps2518
-rw-r--r--etc/refcards/Makefile (renamed from etc/Makefile)101
-rw-r--r--etc/refcards/README17
-rw-r--r--etc/refcards/calccard.pdfbin0 -> 91956 bytes
-rw-r--r--etc/refcards/calccard.tex (renamed from etc/calccard.tex)11
-rw-r--r--etc/refcards/cs-dired-ref.pdfbin0 -> 36504 bytes
-rw-r--r--etc/refcards/cs-dired-ref.tex (renamed from etc/cs-dired-ref.tex)9
-rw-r--r--etc/refcards/cs-refcard.pdfbin0 -> 55753 bytes
-rw-r--r--etc/refcards/cs-refcard.tex (renamed from etc/cs-refcard.tex)9
-rw-r--r--etc/refcards/cs-survival.tex (renamed from etc/cs-survival.tex)6
-rw-r--r--etc/refcards/de-refcard.pdfbin0 -> 81970 bytes
-rw-r--r--etc/refcards/de-refcard.tex (renamed from etc/de-refcard.tex)12
-rw-r--r--etc/refcards/dired-ref.pdfbin0 -> 56136 bytes
-rw-r--r--etc/refcards/dired-ref.tex (renamed from etc/dired-ref.tex)9
-rw-r--r--etc/refcards/fr-dired-ref.pdfbin0 -> 59039 bytes
-rw-r--r--etc/refcards/fr-dired-ref.tex (renamed from etc/fr-drdref.tex)9
-rw-r--r--etc/refcards/fr-refcard.pdfbin0 -> 81574 bytes
-rw-r--r--etc/refcards/fr-refcard.tex (renamed from etc/fr-refcard.tex)22
-rw-r--r--etc/refcards/fr-survival.tex (renamed from etc/fr-survival.tex)8
-rw-r--r--etc/refcards/gnus-booklet.pdfbin0 -> 114016 bytes
-rw-r--r--etc/refcards/gnus-logo.eps (renamed from etc/gnus-logo.eps)0
-rw-r--r--etc/refcards/gnus-logo.pdfbin0 -> 3658 bytes
-rw-r--r--etc/refcards/gnus-refcard.pdfbin0 -> 110628 bytes
-rw-r--r--etc/refcards/gnus-refcard.tex (renamed from etc/gnus-refcard.tex)7
-rw-r--r--etc/refcards/orgcard.pdfbin0 -> 85969 bytes
-rw-r--r--etc/refcards/orgcard.tex (renamed from etc/orgcard.tex)295
-rw-r--r--etc/refcards/pdflayout.sty49
-rw-r--r--etc/refcards/pl-refcard.pdfbin0 -> 64906 bytes
-rw-r--r--etc/refcards/pl-refcard.tex (renamed from etc/pl-refcard.tex)11
-rw-r--r--etc/refcards/pt-br-refcard.pdfbin0 -> 76892 bytes
-rw-r--r--etc/refcards/pt-br-refcard.tex (renamed from etc/pt-br-refcard.tex)10
-rw-r--r--etc/refcards/refcard.pdfbin0 -> 75621 bytes
-rw-r--r--etc/refcards/refcard.tex (renamed from etc/refcard.tex)10
-rw-r--r--etc/refcards/ru-refcard.pdfbin0 -> 126941 bytes
-rw-r--r--etc/refcards/ru-refcard.tex (renamed from etc/ru-refcard.tex)2
-rw-r--r--etc/refcards/sk-dired-ref.pdfbin0 -> 36176 bytes
-rw-r--r--etc/refcards/sk-dired-ref.tex (renamed from etc/sk-dired-ref.tex)9
-rw-r--r--etc/refcards/sk-refcard.pdfbin0 -> 56560 bytes
-rw-r--r--etc/refcards/sk-refcard.tex (renamed from etc/sk-refcard.tex)9
-rw-r--r--etc/refcards/sk-survival.tex (renamed from etc/sk-survival.tex)6
-rw-r--r--etc/refcards/survival.tex (renamed from etc/survival.tex)11
-rw-r--r--etc/refcards/vipcard.tex (renamed from etc/vipcard.tex)11
-rw-r--r--etc/refcards/viperCard.tex (renamed from etc/viperCard.tex)11
-rw-r--r--etc/ru-refcard.ps3938
-rw-r--r--etc/ses-example.ses5
-rw-r--r--etc/sk-dired-ref.ps2071
-rw-r--r--etc/sk-refcard.ps2588
-rw-r--r--etc/tutorials/TUTORIAL (renamed from etc/TUTORIAL)0
-rw-r--r--etc/tutorials/TUTORIAL.bg (renamed from etc/TUTORIAL.bg)0
-rw-r--r--etc/tutorials/TUTORIAL.cn (renamed from etc/TUTORIAL.cn)0
-rw-r--r--etc/tutorials/TUTORIAL.cs (renamed from etc/TUTORIAL.cs)0
-rw-r--r--etc/tutorials/TUTORIAL.de (renamed from etc/TUTORIAL.de)0
-rw-r--r--etc/tutorials/TUTORIAL.eo (renamed from etc/TUTORIAL.eo)0
-rw-r--r--etc/tutorials/TUTORIAL.es (renamed from etc/TUTORIAL.es)0
-rw-r--r--etc/tutorials/TUTORIAL.fr (renamed from etc/TUTORIAL.fr)0
-rw-r--r--etc/tutorials/TUTORIAL.it (renamed from etc/TUTORIAL.it)0
-rw-r--r--etc/tutorials/TUTORIAL.ja (renamed from etc/TUTORIAL.ja)0
-rw-r--r--etc/tutorials/TUTORIAL.ko (renamed from etc/TUTORIAL.ko)0
-rw-r--r--etc/tutorials/TUTORIAL.nl (renamed from etc/TUTORIAL.nl)0
-rw-r--r--etc/tutorials/TUTORIAL.pl (renamed from etc/TUTORIAL.pl)0
-rw-r--r--etc/tutorials/TUTORIAL.pt_BR (renamed from etc/TUTORIAL.pt_BR)0
-rw-r--r--etc/tutorials/TUTORIAL.ro (renamed from etc/TUTORIAL.ro)0
-rw-r--r--etc/tutorials/TUTORIAL.ru (renamed from etc/TUTORIAL.ru)0
-rw-r--r--etc/tutorials/TUTORIAL.sk (renamed from etc/TUTORIAL.sk)0
-rw-r--r--etc/tutorials/TUTORIAL.sl (renamed from etc/TUTORIAL.sl)0
-rw-r--r--etc/tutorials/TUTORIAL.sv (renamed from etc/TUTORIAL.sv)0
-rw-r--r--etc/tutorials/TUTORIAL.th (renamed from etc/TUTORIAL.th)0
-rw-r--r--etc/tutorials/TUTORIAL.translators (renamed from etc/TUTORIAL.translators)0
-rw-r--r--etc/tutorials/TUTORIAL.zh (renamed from etc/TUTORIAL.zh)0
-rw-r--r--leim/ChangeLog10
-rw-r--r--leim/Makefile.in12
-rw-r--r--leim/quail/latin-ltx.el1
-rw-r--r--lib-src/ChangeLog382
-rw-r--r--lib-src/Makefile.in30
-rw-r--r--lib-src/emacsclient.c768
-rw-r--r--lib-src/emacstool.c504
-rw-r--r--lib-src/etags.c85
-rw-r--r--lib-src/makefile.w32-in6
-rw-r--r--lib-src/pop.c66
-rw-r--r--lisp/ChangeLog41431
-rw-r--r--lisp/ChangeLog.1233386
-rw-r--r--lisp/ChangeLog.5896
-rw-r--r--lisp/Makefile.in30
-rw-r--r--lisp/abbrev.el585
-rw-r--r--lisp/add-log.el389
-rw-r--r--lisp/allout.el1210
-rw-r--r--lisp/ansi-color.el6
-rw-r--r--lisp/apropos.el5
-rw-r--r--lisp/arc-mode.el151
-rw-r--r--lisp/autoinsert.el115
-rw-r--r--lisp/autorevert.el49
-rw-r--r--lisp/bindings.el39
-rw-r--r--lisp/bookmark.el39
-rw-r--r--lisp/bs.el277
-rw-r--r--lisp/buff-menu.el90
-rw-r--r--lisp/button.el2
-rw-r--r--lisp/calc/README9
-rw-r--r--lisp/calc/calc-aent.el27
-rw-r--r--lisp/calc/calc-bin.el58
-rw-r--r--lisp/calc/calc-comb.el74
-rw-r--r--lisp/calc/calc-embed.el2
-rw-r--r--lisp/calc/calc-ext.el117
-rw-r--r--lisp/calc/calc-forms.el163
-rw-r--r--lisp/calc/calc-funcs.el228
-rw-r--r--lisp/calc/calc-graph.el74
-rw-r--r--lisp/calc/calc-help.el94
-rw-r--r--lisp/calc/calc-lang.el26
-rw-r--r--lisp/calc/calc-math.el133
-rw-r--r--lisp/calc/calc-menu.el1190
-rw-r--r--lisp/calc/calc-misc.el8
-rw-r--r--lisp/calc/calc-nlfit.el817
-rw-r--r--lisp/calc/calc-poly.el6
-rw-r--r--lisp/calc/calc-prog.el2
-rw-r--r--lisp/calc/calc-store.el32
-rw-r--r--lisp/calc/calc-stuff.el2
-rw-r--r--lisp/calc/calc-units.el338
-rw-r--r--lisp/calc/calc-yank.el2
-rw-r--r--lisp/calc/calc.el506
-rw-r--r--lisp/calc/calcalg3.el212
-rw-r--r--lisp/calc/calccomp.el1
-rw-r--r--lisp/calculator.el64
-rw-r--r--lisp/calendar/appt.el8
-rw-r--r--lisp/calendar/cal-bahai.el318
-rw-r--r--lisp/calendar/cal-hebrew.el152
-rw-r--r--lisp/calendar/cal-islam.el140
-rw-r--r--lisp/calendar/cal-menu.el484
-rw-r--r--lisp/calendar/cal-move.el64
-rw-r--r--lisp/calendar/cal-tex.el1147
-rw-r--r--lisp/calendar/cal-x.el2
-rw-r--r--lisp/calendar/calendar.el174
-rw-r--r--lisp/calendar/diary-lib.el185
-rw-r--r--lisp/calendar/holidays.el91
-rw-r--r--lisp/calendar/icalendar.el46
-rw-r--r--lisp/cmuscheme.el2
-rw-r--r--lisp/comint.el26
-rw-r--r--lisp/complete.el198
-rw-r--r--lisp/completion.el32
-rw-r--r--lisp/composite.el12
-rw-r--r--lisp/cus-dep.el2
-rw-r--r--lisp/cus-edit.el627
-rw-r--r--lisp/cus-face.el33
-rw-r--r--lisp/cus-start.el29
-rw-r--r--lisp/custom.el20
-rw-r--r--lisp/cvs-status.el1
-rw-r--r--lisp/dabbrev.el35
-rw-r--r--lisp/delsel.el27
-rw-r--r--lisp/descr-text.el5
-rw-r--r--lisp/desktop.el6
-rw-r--r--lisp/diff-mode.el412
-rw-r--r--lisp/diff.el14
-rw-r--r--lisp/dired-aux.el93
-rw-r--r--lisp/dired-x.el48
-rw-r--r--lisp/dired.el31
-rw-r--r--lisp/dirtrack.el113
-rw-r--r--lisp/disp-table.el9
-rw-r--r--lisp/doc-view.el973
-rw-r--r--lisp/dos-fns.el3
-rw-r--r--lisp/dos-w32.el5
-rw-r--r--lisp/double.el81
-rw-r--r--lisp/ebuff-menu.el2
-rw-r--r--lisp/echistory.el2
-rw-r--r--lisp/ediff-diff.el87
-rw-r--r--lisp/ediff-help.el6
-rw-r--r--lisp/ediff-hook.el4
-rw-r--r--lisp/ediff-init.el75
-rw-r--r--lisp/ediff-mult.el102
-rw-r--r--lisp/ediff-ptch.el147
-rw-r--r--lisp/ediff-util.el172
-rw-r--r--lisp/ediff-vers.el129
-rw-r--r--lisp/ediff-wind.el42
-rw-r--r--lisp/ediff.el20
-rw-r--r--lisp/edmacro.el9
-rw-r--r--lisp/emacs-lisp/advice.el115
-rw-r--r--lisp/emacs-lisp/authors.el44
-rw-r--r--lisp/emacs-lisp/autoload.el473
-rw-r--r--lisp/emacs-lisp/avl-tree.el472
-rw-r--r--lisp/emacs-lisp/backquote.el4
-rw-r--r--lisp/emacs-lisp/byte-opt.el95
-rw-r--r--lisp/emacs-lisp/byte-run.el22
-rw-r--r--lisp/emacs-lisp/bytecomp.el504
-rw-r--r--lisp/emacs-lisp/check-declare.el206
-rw-r--r--lisp/emacs-lisp/checkdoc.el14
-rw-r--r--lisp/emacs-lisp/cl-compat.el4
-rw-r--r--lisp/emacs-lisp/cl-extra.el60
-rw-r--r--lisp/emacs-lisp/cl-loaddefs.el238
-rw-r--r--lisp/emacs-lisp/cl-macs.el88
-rw-r--r--lisp/emacs-lisp/cl-seq.el68
-rw-r--r--lisp/emacs-lisp/cl.el177
-rw-r--r--lisp/emacs-lisp/copyright.el45
-rw-r--r--lisp/emacs-lisp/cust-print.el52
-rw-r--r--lisp/emacs-lisp/derived.el6
-rw-r--r--lisp/emacs-lisp/disass.el2
-rw-r--r--lisp/emacs-lisp/easy-mmode.el64
-rw-r--r--lisp/emacs-lisp/easymenu.el40
-rw-r--r--lisp/emacs-lisp/edebug.el6
-rw-r--r--lisp/emacs-lisp/eldoc.el206
-rw-r--r--lisp/emacs-lisp/elint.el76
-rw-r--r--lisp/emacs-lisp/elp.el10
-rw-r--r--lisp/emacs-lisp/find-func.el2
-rw-r--r--lisp/emacs-lisp/generic.el2
-rw-r--r--lisp/emacs-lisp/gulp.el3
-rw-r--r--lisp/emacs-lisp/lisp-mode.el3
-rw-r--r--lisp/emacs-lisp/pp.el6
-rw-r--r--lisp/emacs-lisp/re-builder.el2
-rw-r--r--lisp/emacs-lisp/regi.el2
-rw-r--r--lisp/emacs-lisp/ring.el110
-rw-r--r--lisp/emacs-lisp/rx.el4
-rw-r--r--lisp/emacs-lisp/sregex.el2
-rw-r--r--lisp/emacs-lisp/tcover-ses.el11
-rw-r--r--lisp/emacs-lisp/tcover-unsafep.el1
-rw-r--r--lisp/emacs-lisp/timer.el3
-rw-r--r--lisp/emerge.el20
-rw-r--r--lisp/emulation/cua-base.el52
-rw-r--r--lisp/emulation/cua-rect.el6
-rw-r--r--lisp/emulation/edt-mapper.el75
-rw-r--r--lisp/emulation/edt-vt100.el2
-rw-r--r--lisp/emulation/edt.el146
-rw-r--r--lisp/emulation/pc-select.el115
-rw-r--r--lisp/emulation/tpu-edt.el584
-rw-r--r--lisp/emulation/tpu-extras.el60
-rw-r--r--lisp/emulation/tpu-mapper.el70
-rw-r--r--lisp/emulation/vi.el8
-rw-r--r--lisp/emulation/vip.el16
-rw-r--r--lisp/emulation/viper-cmd.el70
-rw-r--r--lisp/emulation/viper-ex.el34
-rw-r--r--lisp/emulation/viper-init.el37
-rw-r--r--lisp/emulation/viper-keym.el11
-rw-r--r--lisp/emulation/viper-macs.el12
-rw-r--r--lisp/emulation/viper-mous.el28
-rw-r--r--lisp/emulation/viper-util.el140
-rw-r--r--lisp/emulation/viper.el143
-rw-r--r--lisp/env.el154
-rw-r--r--lisp/erc/ChangeLog380
-rw-r--r--lisp/erc/erc-backend.el111
-rw-r--r--lisp/erc/erc-button.el2
-rw-r--r--lisp/erc/erc-compat.el16
-rw-r--r--lisp/erc/erc-goodies.el17
-rw-r--r--lisp/erc/erc-ibuffer.el4
-rw-r--r--lisp/erc/erc-identd.el3
-rw-r--r--lisp/erc/erc-log.el105
-rw-r--r--lisp/erc/erc-sound.el12
-rw-r--r--lisp/erc/erc-stamp.el80
-rw-r--r--lisp/erc/erc-track.el119
-rw-r--r--lisp/erc/erc.el283
-rw-r--r--lisp/eshell/em-cmpl.el2
-rw-r--r--lisp/eshell/em-glob.el3
-rw-r--r--lisp/eshell/em-unix.el40
-rw-r--r--lisp/eshell/esh-cmd.el2
-rw-r--r--lisp/eshell/esh-ext.el2
-rw-r--r--lisp/eshell/esh-mode.el11
-rw-r--r--lisp/eshell/esh-module.el4
-rw-r--r--lisp/eshell/esh-opt.el3
-rw-r--r--lisp/eshell/esh-util.el4
-rw-r--r--lisp/facemenu.el2
-rw-r--r--lisp/faces.el306
-rw-r--r--lisp/ffap.el8
-rw-r--r--lisp/filecache.el28
-rw-r--r--lisp/files.el254
-rw-r--r--lisp/filesets.el193
-rw-r--r--lisp/find-lisp.el2
-rw-r--r--lisp/finder.el18
-rw-r--r--lisp/follow.el196
-rw-r--r--lisp/font-core.el13
-rw-r--r--lisp/font-lock.el11
-rw-r--r--lisp/format.el37
-rw-r--r--lisp/frame.el406
-rw-r--r--lisp/fringe.el41
-rw-r--r--lisp/generic-x.el2
-rw-r--r--lisp/gnus/ChangeLog8945
-rw-r--r--lisp/gnus/binhex.el17
-rw-r--r--lisp/gnus/deuglify.el142
-rw-r--r--lisp/gnus/dns.el93
-rw-r--r--lisp/gnus/ecomplete.el152
-rw-r--r--lisp/gnus/encrypt.el296
-rw-r--r--lisp/gnus/flow-fill.el22
-rw-r--r--lisp/gnus/format-spec.el2
-rw-r--r--lisp/gnus/gmm-utils.el13
-rw-r--r--lisp/gnus/gnus-agent.el1620
-rw-r--r--lisp/gnus/gnus-art.el2051
-rw-r--r--lisp/gnus/gnus-async.el61
-rw-r--r--lisp/gnus/gnus-bookmark.el826
-rw-r--r--lisp/gnus/gnus-cache.el247
-rw-r--r--lisp/gnus/gnus-cite.el169
-rw-r--r--lisp/gnus/gnus-cus.el28
-rw-r--r--lisp/gnus/gnus-delay.el2
-rw-r--r--lisp/gnus/gnus-demon.el6
-rw-r--r--lisp/gnus/gnus-diary.el54
-rw-r--r--lisp/gnus/gnus-dired.el2
-rw-r--r--lisp/gnus/gnus-draft.el17
-rw-r--r--lisp/gnus/gnus-dup.el22
-rw-r--r--lisp/gnus/gnus-eform.el7
-rw-r--r--lisp/gnus/gnus-ems.el84
-rw-r--r--lisp/gnus/gnus-fun.el56
-rw-r--r--lisp/gnus/gnus-gl.el860
-rw-r--r--lisp/gnus/gnus-group.el594
-rw-r--r--lisp/gnus/gnus-int.el55
-rw-r--r--lisp/gnus/gnus-kill.el14
-rw-r--r--lisp/gnus/gnus-mh.el3
-rw-r--r--lisp/gnus/gnus-ml.el4
-rw-r--r--lisp/gnus/gnus-mlspl.el24
-rw-r--r--lisp/gnus/gnus-move.el9
-rw-r--r--lisp/gnus/gnus-msg.el204
-rw-r--r--lisp/gnus/gnus-nocem.el63
-rw-r--r--lisp/gnus/gnus-picon.el217
-rw-r--r--lisp/gnus/gnus-range.el2
-rw-r--r--lisp/gnus/gnus-registry.el336
-rw-r--r--lisp/gnus/gnus-salt.el12
-rw-r--r--lisp/gnus/gnus-score.el194
-rw-r--r--lisp/gnus/gnus-setup.el3
-rw-r--r--lisp/gnus/gnus-soup.el2
-rw-r--r--lisp/gnus/gnus-spec.el26
-rw-r--r--lisp/gnus/gnus-srvr.el157
-rw-r--r--lisp/gnus/gnus-start.el326
-rw-r--r--lisp/gnus/gnus-sum.el1247
-rw-r--r--lisp/gnus/gnus-topic.el142
-rw-r--r--lisp/gnus/gnus-undo.el6
-rw-r--r--lisp/gnus/gnus-util.el254
-rw-r--r--lisp/gnus/gnus-uu.el100
-rw-r--r--lisp/gnus/gnus-win.el15
-rw-r--r--lisp/gnus/gnus.el294
-rw-r--r--lisp/gnus/hashcash.el370
-rw-r--r--lisp/gnus/hmac-def.el86
-rw-r--r--lisp/gnus/hmac-md5.el85
-rw-r--r--lisp/gnus/html2text.el47
-rw-r--r--lisp/gnus/ietf-drums.el41
-rw-r--r--lisp/gnus/imap.el359
-rw-r--r--lisp/gnus/legacy-gnus-agent.el31
-rw-r--r--lisp/gnus/mail-parse.el1
-rw-r--r--lisp/gnus/mail-source.el146
-rw-r--r--lisp/gnus/mailcap.el7
-rw-r--r--lisp/gnus/md4.el228
-rw-r--r--lisp/gnus/message.el1482
-rw-r--r--lisp/gnus/mm-bodies.el14
-rw-r--r--lisp/gnus/mm-decode.el166
-rw-r--r--lisp/gnus/mm-partial.el3
-rw-r--r--lisp/gnus/mm-url.el8
-rw-r--r--lisp/gnus/mm-util.el302
-rw-r--r--lisp/gnus/mm-uu.el163
-rw-r--r--lisp/gnus/mm-view.el227
-rw-r--r--lisp/gnus/mml-sec.el36
-rw-r--r--lisp/gnus/mml-smime.el345
-rw-r--r--lisp/gnus/mml.el198
-rw-r--r--lisp/gnus/mml1991.el206
-rw-r--r--lisp/gnus/mml2015.el501
-rw-r--r--lisp/gnus/nnagent.el21
-rw-r--r--lisp/gnus/nnbabyl.el7
-rw-r--r--lisp/gnus/nndb.el2
-rw-r--r--lisp/gnus/nndiary.el22
-rw-r--r--lisp/gnus/nndoc.el37
-rw-r--r--lisp/gnus/nndraft.el11
-rw-r--r--lisp/gnus/nneething.el2
-rw-r--r--lisp/gnus/nnfolder.el150
-rw-r--r--lisp/gnus/nnheader.el74
-rw-r--r--lisp/gnus/nnimap.el320
-rw-r--r--lisp/gnus/nnkiboze.el14
-rw-r--r--lisp/gnus/nnmail.el89
-rw-r--r--lisp/gnus/nnmaildir.el364
-rw-r--r--lisp/gnus/nnmbox.el2
-rw-r--r--lisp/gnus/nnmh.el28
-rw-r--r--lisp/gnus/nnml.el652
-rw-r--r--lisp/gnus/nnnil.el6
-rw-r--r--lisp/gnus/nnrss.el129
-rw-r--r--lisp/gnus/nnslashdot.el8
-rw-r--r--lisp/gnus/nnsoup.el28
-rw-r--r--lisp/gnus/nnspool.el27
-rw-r--r--lisp/gnus/nntp.el373
-rw-r--r--lisp/gnus/nnvirtual.el97
-rw-r--r--lisp/gnus/nnweb.el6
-rw-r--r--lisp/gnus/ntlm.el537
-rw-r--r--lisp/gnus/password.el140
-rw-r--r--lisp/gnus/pop3.el106
-rw-r--r--lisp/gnus/qp.el6
-rw-r--r--lisp/gnus/rfc2047.el132
-rw-r--r--lisp/gnus/rfc2231.el76
-rw-r--r--lisp/gnus/sasl-cram.el52
-rw-r--r--lisp/gnus/sasl-digest.el157
-rw-r--r--lisp/gnus/sasl-ntlm.el66
-rw-r--r--lisp/gnus/sasl.el273
-rw-r--r--lisp/gnus/score-mode.el3
-rw-r--r--lisp/gnus/sieve-manage.el250
-rw-r--r--lisp/gnus/sieve-mode.el1
-rw-r--r--lisp/gnus/sieve.el2
-rw-r--r--lisp/gnus/smiley.el55
-rw-r--r--lisp/gnus/smime-ldap.el206
-rw-r--r--lisp/gnus/smime.el105
-rw-r--r--lisp/gnus/spam-report.el158
-rw-r--r--lisp/gnus/spam-stat.el254
-rw-r--r--lisp/gnus/spam-wash.el75
-rw-r--r--lisp/gnus/spam.el2457
-rw-r--r--lisp/gnus/utf7.el28
-rw-r--r--lisp/gnus/uudecode.el2
-rw-r--r--lisp/gnus/webmail.el7
-rw-r--r--lisp/help-at-pt.el2
-rw-r--r--lisp/help-fns.el177
-rw-r--r--lisp/help-mode.el116
-rw-r--r--lisp/help.el285
-rw-r--r--lisp/hi-lock.el6
-rw-r--r--lisp/ibuf-ext.el15
-rw-r--r--lisp/ibuffer.el7
-rw-r--r--lisp/ido.el15
-rw-r--r--lisp/ielm.el2
-rw-r--r--lisp/iimage.el6
-rw-r--r--lisp/image-dired.el23
-rw-r--r--lisp/image-file.el2
-rw-r--r--lisp/image-mode.el95
-rw-r--r--lisp/image.el71
-rw-r--r--lisp/indent.el19
-rw-r--r--lisp/info.el16
-rw-r--r--lisp/informat.el2
-rw-r--r--lisp/international/characters.el8
-rw-r--r--lisp/international/encoded-kb.el139
-rw-r--r--lisp/international/mule-cmds.el105
-rw-r--r--lisp/international/mule-diag.el2
-rw-r--r--lisp/international/mule.el44
-rw-r--r--lisp/international/quail.el29
-rw-r--r--lisp/international/utf-7.el23
-rw-r--r--lisp/international/utf-8.el24
-rw-r--r--lisp/isearch-multi.el191
-rw-r--r--lisp/isearch.el44
-rw-r--r--lisp/jka-cmpr-hook.el9
-rw-r--r--lisp/kmacro.el5
-rw-r--r--lisp/language/ethio-util.el2
-rw-r--r--lisp/ldefs-boot.el8314
-rw-r--r--lisp/loadhist.el49
-rw-r--r--lisp/loadup.el17
-rw-r--r--lisp/locate.el12
-rw-r--r--lisp/log-edit.el36
-rw-r--r--lisp/log-view.el96
-rw-r--r--lisp/longlines.el2
-rw-r--r--lisp/mail/emacsbug.el44
-rw-r--r--lisp/mail/feedmail.el4
-rw-r--r--lisp/mail/mail-extr.el4
-rw-r--r--lisp/mail/mailabbrev.el273
-rw-r--r--lisp/mail/mspools.el4
-rw-r--r--lisp/mail/reporter.el2
-rw-r--r--lisp/mail/rmail.el7
-rw-r--r--lisp/mail/sendmail.el29
-rw-r--r--lisp/mail/supercite.el6
-rw-r--r--lisp/mail/vms-pmail.el2
-rw-r--r--lisp/makefile.w32-in2
-rw-r--r--lisp/mb-depth.el78
-rw-r--r--lisp/menu-bar.el57
-rw-r--r--lisp/mh-e/ChangeLog79
-rw-r--r--lisp/mh-e/mh-alias.el1
-rw-r--r--lisp/mh-e/mh-comp.el33
-rw-r--r--lisp/mh-e/mh-compat.el12
-rw-r--r--lisp/mh-e/mh-e.el209
-rw-r--r--lisp/mh-e/mh-folder.el9
-rw-r--r--lisp/mh-e/mh-gnus.el2
-rw-r--r--lisp/mh-e/mh-mime.el35
-rw-r--r--lisp/mh-e/mh-show.el17
-rw-r--r--lisp/mh-e/mh-utils.el2
-rw-r--r--lisp/mh-e/mh-xface.el2
-rw-r--r--lisp/mouse.el63
-rw-r--r--lisp/msb.el12
-rw-r--r--lisp/net/ange-ftp.el40
-rw-r--r--lisp/net/browse-url.el293
-rw-r--r--lisp/net/eudc-bob.el39
-rw-r--r--lisp/net/eudc-hotlist.el20
-rw-r--r--lisp/net/eudc.el85
-rw-r--r--lisp/net/eudcb-bbdb.el34
-rw-r--r--lisp/net/eudcb-ldap.el2
-rw-r--r--lisp/net/eudcb-ph.el2
-rw-r--r--lisp/net/netrc.el95
-rw-r--r--lisp/net/newsticker.el9
-rw-r--r--lisp/net/rcirc.el990
-rw-r--r--lisp/net/rcompile.el3
-rw-r--r--lisp/net/snmp-mode.el121
-rw-r--r--lisp/net/socks.el6
-rw-r--r--lisp/net/tls.el129
-rw-r--r--lisp/net/tramp-cache.el333
-rw-r--r--lisp/net/tramp-cmds.el406
-rw-r--r--lisp/net/tramp-compat.el237
-rw-r--r--lisp/net/tramp-fish.el1166
-rw-r--r--lisp/net/tramp-ftp.el84
-rw-r--r--lisp/net/tramp-gw.el322
-rw-r--r--lisp/net/tramp-smb.el1063
-rw-r--r--lisp/net/tramp-util.el138
-rw-r--r--lisp/net/tramp-uu.el9
-rw-r--r--lisp/net/tramp-vc.el539
-rw-r--r--lisp/net/tramp.el9646
-rw-r--r--lisp/net/trampver.el18
-rw-r--r--lisp/net/webjump.el15
-rw-r--r--lisp/newcomment.el188
-rw-r--r--lisp/novice.el5
-rw-r--r--lisp/obsolete/fast-lock.el4
-rw-r--r--lisp/obsolete/hilit19.el52
-rw-r--r--lisp/obsolete/lselect.el (renamed from lisp/emacs-lisp/lselect.el)5
-rw-r--r--lisp/obsolete/mlsupport.el4
-rw-r--r--lisp/obsolete/sun-curs.el234
-rw-r--r--lisp/obsolete/sun-fns.el645
-rw-r--r--lisp/outline.el14
-rw-r--r--lisp/pcomplete.el28
-rw-r--r--lisp/pcvs.el28
-rw-r--r--lisp/play/blackbox.el4
-rw-r--r--lisp/play/bubbles.el1459
-rw-r--r--lisp/play/decipher.el2
-rw-r--r--lisp/play/gamegrid.el10
-rw-r--r--lisp/play/handwrite.el2
-rw-r--r--lisp/play/landmark.el4
-rw-r--r--lisp/play/solitaire.el16
-rw-r--r--lisp/play/yow.el2
-rw-r--r--lisp/play/zone.el72
-rw-r--r--lisp/printing.el1042
-rw-r--r--lisp/progmodes/ada-mode.el16
-rw-r--r--lisp/progmodes/ada-prj.el4
-rw-r--r--lisp/progmodes/ada-xref.el6
-rw-r--r--lisp/progmodes/antlr-mode.el8
-rw-r--r--lisp/progmodes/autoconf.el2
-rw-r--r--lisp/progmodes/cc-bytecomp.el4
-rw-r--r--lisp/progmodes/cc-cmds.el5
-rw-r--r--lisp/progmodes/cc-defs.el8
-rw-r--r--lisp/progmodes/cc-engine.el3
-rw-r--r--lisp/progmodes/cc-fonts.el2
-rw-r--r--lisp/progmodes/cc-langs.el3
-rw-r--r--lisp/progmodes/cc-mode.el24
-rw-r--r--lisp/progmodes/cc-styles.el12
-rw-r--r--lisp/progmodes/compile.el309
-rw-r--r--lisp/progmodes/cperl-mode.el145
-rw-r--r--lisp/progmodes/dcl-mode.el2
-rw-r--r--lisp/progmodes/delphi.el106
-rw-r--r--lisp/progmodes/ebnf-abn.el8
-rw-r--r--lisp/progmodes/ebnf-bnf.el8
-rw-r--r--lisp/progmodes/ebnf-dtd.el8
-rw-r--r--lisp/progmodes/ebnf-ebx.el8
-rw-r--r--lisp/progmodes/ebnf-iso.el10
-rw-r--r--lisp/progmodes/ebnf-yac.el12
-rw-r--r--lisp/progmodes/ebnf2ps.el830
-rw-r--r--lisp/progmodes/ebrowse.el79
-rw-r--r--lisp/progmodes/etags.el8
-rw-r--r--lisp/progmodes/f90.el776
-rw-r--r--lisp/progmodes/flymake.el32
-rw-r--r--lisp/progmodes/fortran.el1137
-rw-r--r--lisp/progmodes/grep.el290
-rw-r--r--lisp/progmodes/gud.el23
-rw-r--r--lisp/progmodes/hideshow.el36
-rw-r--r--lisp/progmodes/idlw-help.el9
-rw-r--r--lisp/progmodes/idlw-shell.el30
-rw-r--r--lisp/progmodes/idlw-toolbar.el48
-rw-r--r--lisp/progmodes/idlwave.el76
-rw-r--r--lisp/progmodes/meta-mode.el332
-rw-r--r--lisp/progmodes/mixal-mode.el12
-rw-r--r--lisp/progmodes/octave-mod.el255
-rw-r--r--lisp/progmodes/prolog.el19
-rw-r--r--lisp/progmodes/ps-mode.el10
-rw-r--r--lisp/progmodes/python.el102
-rw-r--r--lisp/progmodes/sh-script.el208
-rw-r--r--lisp/progmodes/simula.el8
-rw-r--r--lisp/progmodes/sql.el2
-rw-r--r--lisp/progmodes/vera-mode.el90
-rw-r--r--lisp/progmodes/vhdl-mode.el39
-rw-r--r--lisp/progmodes/which-func.el5
-rw-r--r--lisp/progmodes/xscheme.el22
-rw-r--r--lisp/ps-mule.el165
-rw-r--r--lisp/ps-print.el544
-rw-r--r--lisp/recentf.el68
-rw-r--r--lisp/register.el20
-rw-r--r--lisp/replace.el136
-rw-r--r--lisp/rfn-eshadow.el14
-rw-r--r--lisp/savehist.el4
-rw-r--r--lisp/scroll-bar.el17
-rw-r--r--lisp/scroll-lock.el4
-rw-r--r--lisp/server.el1071
-rw-r--r--lisp/ses.el21
-rw-r--r--lisp/shadowfile.el36
-rw-r--r--lisp/shell.el48
-rw-r--r--lisp/simple.el764
-rw-r--r--lisp/smerge-mode.el248
-rw-r--r--lisp/startup.el232
-rw-r--r--lisp/strokes.el8
-rw-r--r--lisp/subr.el127
-rw-r--r--lisp/t-mouse.el307
-rw-r--r--lisp/talk.el39
-rw-r--r--lisp/tar-mode.el6
-rw-r--r--lisp/tempo.el18
-rw-r--r--lisp/term.el11
-rw-r--r--lisp/term/AT386.el61
-rw-r--r--lisp/term/README50
-rw-r--r--lisp/term/apollo.el4
-rw-r--r--lisp/term/bobcat.el2
-rw-r--r--lisp/term/cygwin.el2
-rw-r--r--lisp/term/internal.el28
-rw-r--r--lisp/term/iris-ansi.el389
-rw-r--r--lisp/term/linux.el8
-rw-r--r--lisp/term/lk201.el125
-rw-r--r--lisp/term/mac-win.el241
-rw-r--r--lisp/term/news.el8
-rw-r--r--lisp/term/pc-win.el6
-rw-r--r--lisp/term/rxvt.el123
-rw-r--r--lisp/term/sun-mouse.el682
-rw-r--r--lisp/term/sun.el202
-rw-r--r--lisp/term/tty-colors.el2
-rw-r--r--lisp/term/tvi970.el158
-rw-r--r--lisp/term/vt100.el3
-rw-r--r--lisp/term/vt102.el4
-rw-r--r--lisp/term/vt125.el4
-rw-r--r--lisp/term/vt200.el10
-rw-r--r--lisp/term/vt201.el9
-rw-r--r--lisp/term/vt220.el9
-rw-r--r--lisp/term/vt240.el9
-rw-r--r--lisp/term/vt300.el9
-rw-r--r--lisp/term/vt320.el9
-rw-r--r--lisp/term/vt400.el9
-rw-r--r--lisp/term/vt420.el11
-rw-r--r--lisp/term/w32-win.el320
-rw-r--r--lisp/term/w32console.el65
-rw-r--r--lisp/term/wyse50.el176
-rw-r--r--lisp/term/x-win.el645
-rw-r--r--lisp/term/xterm.el908
-rw-r--r--lisp/textmodes/artist.el42
-rw-r--r--lisp/textmodes/bib-mode.el4
-rw-r--r--lisp/textmodes/bibtex-style.el3
-rw-r--r--lisp/textmodes/bibtex.el508
-rw-r--r--lisp/textmodes/css-mode.el18
-rw-r--r--lisp/textmodes/fill.el132
-rw-r--r--lisp/textmodes/flyspell.el22
-rw-r--r--lisp/textmodes/ispell.el43
-rw-r--r--lisp/textmodes/nroff-mode.el25
-rw-r--r--lisp/textmodes/org-export-latex.el1168
-rw-r--r--lisp/textmodes/org-publish.el609
-rw-r--r--lisp/textmodes/org.el12221
-rw-r--r--lisp/textmodes/reftex-cite.el16
-rw-r--r--lisp/textmodes/reftex-dcr.el4
-rw-r--r--lisp/textmodes/reftex-index.el2
-rw-r--r--lisp/textmodes/reftex-ref.el6
-rw-r--r--lisp/textmodes/reftex-sel.el18
-rw-r--r--lisp/textmodes/reftex-toc.el2
-rw-r--r--lisp/textmodes/reftex.el356
-rw-r--r--lisp/textmodes/remember-diary.el94
-rw-r--r--lisp/textmodes/remember.el471
-rw-r--r--lisp/textmodes/sgml-mode.el232
-rw-r--r--lisp/textmodes/table.el82
-rw-r--r--lisp/textmodes/tex-mode.el203
-rw-r--r--lisp/textmodes/texinfmt.el261
-rw-r--r--lisp/textmodes/texinfo.el159
-rw-r--r--lisp/textmodes/two-column.el4
-rw-r--r--lisp/thingatpt.el31
-rw-r--r--lisp/thumbs.el2
-rw-r--r--lisp/time.el157
-rw-r--r--lisp/tmm.el24
-rw-r--r--lisp/tool-bar.el107
-rw-r--r--lisp/tooltip.el2
-rw-r--r--lisp/tutorial.el37
-rw-r--r--lisp/uniquify.el20
-rw-r--r--lisp/url/ChangeLog57
-rw-r--r--lisp/url/url-auth.el2
-rw-r--r--lisp/url/url-cookie.el63
-rw-r--r--lisp/url/url-dav.el30
-rw-r--r--lisp/url/url-expand.el23
-rw-r--r--lisp/url/url-file.el11
-rw-r--r--lisp/url/url-http.el2
-rw-r--r--lisp/url/url-mailto.el4
-rw-r--r--lisp/url/url-methods.el14
-rw-r--r--lisp/url/url-parse.el74
-rw-r--r--lisp/url/url-privacy.el7
-rw-r--r--lisp/url/url-util.el6
-rw-r--r--lisp/url/url-vars.el17
-rw-r--r--lisp/url/url.el3
-rw-r--r--lisp/vc-arch.el208
-rw-r--r--lisp/vc-bzr.el26
-rw-r--r--lisp/vc-cvs.el370
-rw-r--r--lisp/vc-git.el57
-rw-r--r--lisp/vc-hg.el196
-rw-r--r--lisp/vc-hooks.el218
-rw-r--r--lisp/vc-mcvs.el145
-rw-r--r--lisp/vc-mtn.el16
-rw-r--r--lisp/vc-rcs.el271
-rw-r--r--lisp/vc-sccs.el121
-rw-r--r--lisp/vc-svn.el160
-rw-r--r--lisp/vc.el2577
-rw-r--r--lisp/vcursor.el144
-rw-r--r--lisp/version.el2
-rw-r--r--lisp/view.el347
-rw-r--r--lisp/vms-patch.el2
-rw-r--r--lisp/vmsproc.el6
-rw-r--r--lisp/w32-fns.el90
-rw-r--r--lisp/w32-vars.el1
-rw-r--r--lisp/wdired.el32
-rw-r--r--lisp/whitespace.el4
-rw-r--r--lisp/wid-browse.el42
-rw-r--r--lisp/wid-edit.el104
-rw-r--r--lisp/window.el156
-rw-r--r--lisp/woman.el230
-rw-r--r--lisp/x-dnd.el25
-rw-r--r--lisp/xt-mouse.el103
-rw-r--r--lwlib/ChangeLog9
-rw-r--r--lwlib/lwlib-Xaw.c9
-rw-r--r--lwlib/lwlib.c4
-rw-r--r--lwlib/xlwmenu.c9
-rw-r--r--mac/ChangeLog34
-rw-r--r--mac/Emacs.app/Contents/Info.plist422
-rw-r--r--mac/Emacs.app/Contents/Resources/Emacs.icnsbin51554 -> 57897 bytes
-rw-r--r--mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings4
-rw-r--r--mac/Emacs.app/Contents/Resources/document.icnsbin0 -> 51344 bytes
-rw-r--r--mac/inc/config.h5
-rw-r--r--mac/makefile.MPW23
-rw-r--r--mac/src/Emacs.r10
-rwxr-xr-xmake-dist126
-rwxr-xr-xmkinstalldirs158
-rw-r--r--msdos/ChangeLog6
-rw-r--r--msdos/sed1v2.inp2
-rw-r--r--msdos/sed6.inp4
-rw-r--r--nt/ChangeLog49
-rw-r--r--nt/config.nt19
-rwxr-xr-xnt/configure.bat64
-rw-r--r--nt/emacs.rc8
-rw-r--r--nt/inc/sys/socket.h8
-rw-r--r--nt/makefile.w32-in22
-rw-r--r--src/.arch-inventory3
-rw-r--r--src/.gdbinit4
-rw-r--r--src/ChangeLog30011
-rw-r--r--src/ChangeLog.1027939
-rw-r--r--src/ChangeLog.740
-rw-r--r--src/ChangeLog.8792
-rw-r--r--src/Makefile.in135
-rw-r--r--src/abbrev.c736
-rw-r--r--src/alloc.c610
-rw-r--r--src/alloca.c517
-rw-r--r--src/buffer.c157
-rw-r--r--src/buffer.h20
-rw-r--r--src/callint.c67
-rw-r--r--src/callproc.c282
-rw-r--r--src/casetab.c2
-rw-r--r--src/ccl.c23
-rw-r--r--src/cm.c216
-rw-r--r--src/cm.h118
-rw-r--r--src/coding.c82
-rw-r--r--src/coding.h10
-rw-r--r--src/config.in26
-rw-r--r--src/data.c228
-rw-r--r--src/dispextern.h100
-rw-r--r--src/dispnew.c401
-rw-r--r--src/doc.c24
-rw-r--r--src/editfns.c66
-rw-r--r--src/emacs.c70
-rw-r--r--src/eval.c190
-rw-r--r--src/fileio.c202
-rw-r--r--src/floatfns.c9
-rw-r--r--src/fns.c85
-rw-r--r--src/fontset.c15
-rw-r--r--src/frame.c532
-rw-r--r--src/frame.h207
-rw-r--r--src/fringe.c24
-rw-r--r--src/gtkutil.c31
-rw-r--r--src/image.c496
-rw-r--r--src/indent.c126
-rw-r--r--src/indent.h32
-rw-r--r--src/insdel.c13
-rw-r--r--src/intervals.c4
-rw-r--r--src/keyboard.c1577
-rw-r--r--src/keyboard.h46
-rw-r--r--src/keymap.c582
-rw-r--r--src/keymap.h5
-rw-r--r--src/lisp.h408
-rw-r--r--src/lread.c71
-rw-r--r--src/m/alpha.h4
-rw-r--r--src/m/amdx86-64.h9
-rw-r--r--src/m/ibmps2-aix.h1
-rw-r--r--src/m/ibms390x.h17
-rw-r--r--src/m/is386.h1
-rw-r--r--src/m/sh3el.h9
-rw-r--r--src/m/sparc.h12
-rw-r--r--src/m/sun2.h12
-rw-r--r--src/m/sun386.h12
-rw-r--r--src/m/windowsnt.h125
-rw-r--r--src/mac.c126
-rw-r--r--src/macfns.c205
-rw-r--r--src/macgui.h13
-rw-r--r--src/macmenu.c299
-rw-r--r--src/macselect.c421
-rw-r--r--src/macterm.c3041
-rw-r--r--src/macterm.h62
-rw-r--r--src/makefile.w32-in48
-rw-r--r--src/marker.c9
-rw-r--r--src/minibuf.c111
-rw-r--r--src/msdos.c16
-rw-r--r--src/msdos.h1
-rw-r--r--src/prefix-args.c1
-rw-r--r--src/print.c32
-rw-r--r--src/process.c416
-rw-r--r--src/process.h78
-rw-r--r--src/puresize.h2
-rw-r--r--src/regex.c90
-rw-r--r--src/s/cygwin.h6
-rw-r--r--src/s/darwin.h3
-rw-r--r--src/s/ms-w32.h18
-rw-r--r--src/s/msdos.h1
-rw-r--r--src/s/ptx.h1
-rw-r--r--src/s/sco4.h2
-rw-r--r--src/s/sco5.h2
-rw-r--r--src/s/usg5-3.h1
-rw-r--r--src/s/usg5-4.h1
-rw-r--r--src/s/windows95.h8
-rw-r--r--src/scroll.c52
-rw-r--r--src/search.c187
-rw-r--r--src/sound.c1
-rw-r--r--src/sunfns.c519
-rw-r--r--src/sysdep.c775
-rw-r--r--src/syssignal.h1
-rw-r--r--src/term.c3253
-rw-r--r--src/termchar.h203
-rw-r--r--src/termhooks.h533
-rw-r--r--src/terminal.c566
-rw-r--r--src/termopts.h5
-rw-r--r--src/textprop.c44
-rw-r--r--src/w32.c66
-rw-r--r--src/w32console.c159
-rw-r--r--src/w32fns.c109
-rw-r--r--src/w32inevt.c4
-rw-r--r--src/w32inevt.h2
-rw-r--r--src/w32menu.c25
-rw-r--r--src/w32term.c425
-rw-r--r--src/w32term.h29
-rw-r--r--src/widget.c4
-rw-r--r--src/window.c199
-rw-r--r--src/window.h4
-rw-r--r--src/xdisp.c424
-rw-r--r--src/xfaces.c92
-rw-r--r--src/xfns.c430
-rw-r--r--src/xmenu.c85
-rw-r--r--src/xselect.c70
-rw-r--r--src/xsmfns.c9
-rw-r--r--src/xterm.c1018
-rw-r--r--src/xterm.h86
-rwxr-xr-xupdate-subdirs15
1161 files changed, 193164 insertions, 175225 deletions
diff --git a/ChangeLog b/ChangeLog
index f7234ae1ef9..0f7bc09095c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,171 @@
-2007-09-16 Peter O'Gorman <bug-gnu-emacs@mlists.thewrittenword.com> (tiny change)
+2007-11-20 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Always include <resolv.h> when checking for
+ res_init.
+
+2007-11-17 Andreas Schwab <schwab@suse.de>
+
+ * update-subdirs: Atomically update subdirs.el.
+
+2007-11-17 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (check-declare): New target.
+
+2007-11-07 Glenn Morris <rgm@gnu.org>
+
+ * configure.in: Deprecate Mac Carbon port.
+
+2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * configure.in: Remove HAVE_X11R5 check.
+
+2007-10-31 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (install-arch-indep): Fallback to $USER and `id -un'
+ when changing ownership of installed files.
+
+2007-10-30 Glenn Morris <rgm@gnu.org>
+
+ * make-dist: Add new directory etc/gnus.
+
+2007-10-30 Michael Olson <mwolson@gnu.org>
+
+ * Makefile.in (INFO_FILES): Alphabetize. Add remember.
+
+2007-10-29 Glenn Morris <rgm@gnu.org>
+
+ * make-dist: Add new directories etc/images/smilies/grayscale,medium.
+
+2007-10-23 Glenn Morris <rgm@gnu.org>
+
+ * MAINTAINERS: Move to admin/.
+
+2007-10-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * configure.in (HAVE_RES_INIT): Define if res_init() exists.
+ (HAVE_LIBRESOLV): Also define if we are using res_init().
+
+2007-10-17 Glenn Morris <rgm@gnu.org>
+
+ * FTP: Remove file, since it's just a duplicate of one in etc/.
+
+2007-10-05 Eli Zaretskii <eliz@gnu.org>
+
+ * config.bat: Fix configuring `doc' due to changes in the
+ directory structure.
+
+2007-09-16 Peter O'Gorman <bug-gnu-emacs@mlists.thewrittenword.com> (tiny change)
* configure.in: Don't use -lpthread on HP-UX.
+2007-09-16 Glenn Morris <rgm@gnu.org>
+
+ * make-dist: File gfdl.1 has been removed.
+
+2007-09-15 Glenn Morris <rgm@gnu.org>
+
+ * configure.in: Fix makeinfo version regexp.
+
+2007-09-12 Glenn Morris <rgm@gnu.org>
+
+ * configure.in (AC_FUNC_ALLOCA): Throw an error if a system
+ implementation of alloca is not found.
+
+ * Makefile.in (SOURCES, unlock, relock): Delete.
+ (install-arch-indep): Do not exclude the etc/ Makefiles.
+
+2007-09-09 Juri Linkov <juri@jurta.org>
+
+ * make-dist: Remove AUTHORS and CONTRIBUTE (moved to etc).
+
+ * README: Add doc/ to documentation directories.
+
+2007-09-08 Michael Olson <mwolson@gnu.org>
+
+ * MAINTAINERS: Add myself for ERC and tq.el.
+ Update for new doc/ directory layout.
+
+2007-09-06 Romain Francoise <romain@orebokech.com>
+
+ * make-dist: Update for new doc/ directory layout.
+
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (mansrcdir): New variable.
+ (SUBDIR_MAKEFILES): Update for new doc/ directory layout.
+ (man/Makefile, lispref/Makefile, lispintro/Makefile): Rename and
+ update these targets for new doc/ directory layout.
+ (doc/misc/Makefile): New target.
+ (install-arch-indep): Use mansrcdir for new location of manpages.
+ (mostlyclean, clean, distclean, maintainer-clean, unlock)
+ (relock, info, dvi): Update targets for new doc/ directory layout.
+
+ * configure.in (AC_OUTPUT): Update names of generated Makefiles
+ for new doc/ directory layout.
+
+2007-09-02 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Use AS_HELP_STRING throughout.
+ * configure: Regenerate.
+
2007-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* configure.in: Require Gtk/Glib 2.6.
+2007-09-02 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ * configure.in (EMACS_ARG_Y, EMACS_ARG_N): New AC_DEFUNs.
+ Use them throughout in place of AC_ARG_WITH calls.
+ * configure: Regenerate.
+
+2007-09-01 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Put quotes around nested macro calls.
+
+2007-08-31 Ulrich Mueller <ulm@gentoo.org> (tiny change)
+
+ * configure.in: Fix typo.
+ * configure: Regenerate.
+
+2007-08-30 Glenn Morris <rgm@gnu.org>
+
+ * configure.in (AH_BOTTOM): Copy some manual changes made to
+ src/config.in here so they are not lost when it regenerates.
+
+ * README.multi-tty: Move to admin/notes/multi-tty, with some edits.
+
+2007-08-29 K,Aa(Broly L$,1 q(Brentey <karoly@lorentey.hu>
+
+ * README.multi-tty: New file.
+
+2007-08-29 Glenn Morris <rgm@gnu.org>
+
+ * README: Increase version to 23.0.50.
+
+2007-08-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * configure.in: New option: --without-xaw3d.
+
+2007-08-24 Glenn Morris <rgm@gnu.org>
+
+ * configure.in: Check for a suitably recent makeinfo.
+
+2007-08-23 Johannes Weiner <hannes@saeurebad.de> (tiny change)
+
+ * configure.in (Check for required libraries): Typo.
+
+2007-08-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * configure.in: Check librsvg2 also for Mac Carbon.
+
+2007-08-22 Romain Francoise <romain@orebokech.com>
+
+ * make-dist: Follow reorganization of files in etc/.
+
+2007-08-22 Paul Pogonyshev <pogonyshev@gmx.net>
+
+ * configure.in: Add support for SVG images through librsvg2.
+
2007-07-28 Eli Zaretskii <eliz@gnu.org>
* Makefile.in (install-arch-indep): Use "rm -f" for removing DOC,
@@ -17,22 +177,100 @@
* COPYING, info/COPYING: Switch to GPLv3.
+2007-06-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * configure.in: Complain if X seems to be installed but no
+ development files were found.
+
+2007-06-20 Glenn Morris <rgm@gnu.org>
+
+ * configure.in: Prefer libgif over libungif.
+
+2007-06-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * configure.in: Check for all image libraries before exiting.
+
+2007-06-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * configure.in: Exit with error if image libraries aren't found.
+
+2007-06-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * configure.in: Merge xaw3d and libXaw checks. Check xaw3d even
+ when compiling without scrollbars.
+
+2007-06-12 Glenn Morris <rgm@gnu.org>
+
+ * configure.in (HAVE_GIF): If -lungif fails, try -lgif.
+
+2007-06-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * configure.in: Change wording about yes/gtk and lucid/athena
+ being synonyms.
+
+2007-06-08 Glenn Morris <rgm@gnu.org>
+
+ * configure.in: Make gtk the default toolkit.
+
+2007-06-07 Glenn Morris <rgm@gnu.org>
+
+ * configure.in (NON_GNU_CPP): On Solaris, set using a proper check
+ for a Sun C compiler.
+
+ * Makefile.in (install-arch-indep): Install only the DOC- file
+ specific to the build, if possible, rather than DOC-*.
+
2007-06-02 Chong Yidong <cyd@stupidchicken.com>
* Version 22.1 released.
+2007-05-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * mkinstalldirs: Sync to version in automake CVS.
+
+2007-05-22 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Prefer build_alias over host when host_alias is
+ not set.
+ * configure: Regenerate.
+
+2007-05-20 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Remove empty AC_SUBST.
+ * configure: Regenerate.
+
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * configure.in: Use HAVE_GPM instead of HAVE_GPM_H and implement
+ it like others.
+ * configure: Regenerate.
+
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * configure.in (AC_CHECK_HEADERS) Add gpm.h.
+ (AC_CHECK_LIB): Add -lgpm.
+ * configure: Regenerate.
+
2007-05-03 Glenn Morris <rgm@gnu.org>
* configure: Tweak message about the absence of shell functions.
+2007-04-27 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.in (config.status): Depend on
+ ${srcdir}/lisp/version.el.
+
+2007-04-26 Glenn Morris <rgm@gnu.org>
+
+ * README: Increase version to 22.1.50.
+
2007-04-24 Juanma Barranquero <lekktu@gmail.com>
* INSTALL (DETAILED BUILDING AND INSTALLATION): Fix typo.
2007-04-19 Glenn Morris <rgm@gnu.org>
- * configure.in: Signal error if Xaw libs are missing in a Lucid
- build.
+ * configure.in: Signal error if Xaw libs are missing in a Lucid build.
2007-04-18 Glenn Morris <rgm@gnu.org>
@@ -1779,8 +2017,7 @@
2000-10-01 Andreas Schwab <schwab@suse.de>
- * Makefile.in (install-arch-indep): Update list of installed info
- files.
+ * Makefile.in (install-arch-indep): Update list of installed info files.
2000-09-30 Gerd Moellmann <gerd@gnu.org>
@@ -2315,7 +2552,7 @@
1999-02-26 Richard Stallman <rms@gnu.org>
- * configure.in: Use epaths.h and epaths-force instead of paths....
+ * configure.in: Use epaths.h and epaths-force instead of paths...
* Makefile.in (epaths-force): Renamed from paths-force;
operate on epaths.in and produce epaths.h.
@@ -2466,8 +2703,7 @@
1998-04-16 Eli Zaretskii <eliz@delysid.gnu.org>
* config.bat: Make sure the environment is large enough to support
- all the "set foo=bar" commands. Update pointers to DJGPP FTP
- sites.
+ all the "set foo=bar" commands. Update pointers to DJGPP FTP sites.
1998-04-10 Karl Heuer <kwzh@gnu.org>
@@ -2492,8 +2728,7 @@
1998-03-23 Kenichi Handa <handa@etl.go.jp>
- * Makefile.in (top_distclean): Check the existence of `lock'
- subdir.
+ * Makefile.in (top_distclean): Check the existence of `lock' subdir.
1998-03-22 Richard Stallman <rms@gnu.org>
@@ -2669,7 +2904,7 @@
1997-08-22 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
- * configure.in (HAVE_MOTIF_2_1): Test for Motif 2.1,
+ * configure.in (HAVE_MOTIF_2_1): Test for Motif 2.1.
1997-08-22 Jonathan I. Kamens <jik@kamens.brookline.ma.us>
diff --git a/FTP b/FTP
deleted file mode 100644
index 0337d464c30..00000000000
--- a/FTP
+++ /dev/null
@@ -1,6 +0,0 @@
-For information about how to obtain GNU Emacs and other GNU software
-by FTP, please see <http://www.gnu.org/order/ftp.html>.
-
-Information about Emacs is also available at
-<http://www.gnu.org/software/emacs/>.
-
diff --git a/Makefile.in b/Makefile.in
index 502e653ccec..d77de33c9f8 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -138,11 +138,11 @@ man1dir=$(mandir)/man1
# since there are now many packages documented with the texinfo
# system, it is inappropriate to imply that it is part of Emacs.
infodir=@infodir@
-INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
- elisp eintr emacs emacs-mime eshell eudc flymake \
- forms gnus idlwave info message mh-e newsticker org pcl-cvs \
- pgg reftex sc ses sieve speedbar tramp vip viper widget \
- woman smtpmail url rcirc erc
+INFO_FILES=ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq \
+ eintr elisp emacs emacs-mime erc eshell eudc flymake forms \
+ gnus idlwave info message mh-e newsticker org pcl-cvs pgg \
+ rcirc reftex remember sc ses sieve speedbar tramp vip viper \
+ widget woman smtpmail url
# Directory for local state files for all programs.
localstatedir=@localstatedir@
@@ -158,6 +158,9 @@ bitmapdir=@bitmapdir@
# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@
+# Where the manpage source files are kept.
+mansrcdir=$(srcdir)/doc/man
+
# Tell make where to find source files; this is needed for the makefiles.
VPATH=@srcdir@
@@ -250,7 +253,7 @@ EMACSFULL = `echo emacs-${version}${EXEEXT} | sed '$(TRANSFORM)'`
SUBDIR = lib-src src
# The makefiles of the directories in $SUBDIR.
-SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile lispref/Makefile lispintro/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile leim/Makefile
+SUBDIR_MAKEFILES = lib-src/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispref/Makefile doc/lispintro/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile leim/Makefile
# Subdirectories to install, and where they'll go.
# lib-src's makefile knows how to install it, so we don't do that here.
@@ -311,7 +314,7 @@ blessmail: ${SUBDIR_MAKEFILES} src FRC
Makefile: $(srcdir)/Makefile.in config.status
./config.status
-config.status: ${srcdir}/configure
+config.status: ${srcdir}/configure ${srcdir}/lisp/version.el
./config.status --recheck
AUTOCONF_INPUTS = @MAINT@ $(srcdir)/configure.in $(srcdir)/m4/getopt.m4
@@ -336,13 +339,16 @@ src/config.stamp: $(srcdir)/src/config.in config.status
lib-src/Makefile: $(srcdir)/lib-src/Makefile.in config.status
./config.status
-man/Makefile: $(srcdir)/man/Makefile.in config.status
+doc/emacs/Makefile: $(srcdir)/doc/emacs/Makefile.in config.status
+ ./config.status
+
+doc/misc/Makefile: $(srcdir)/doc/misc/Makefile.in config.status
./config.status
-lispref/Makefile: $(srcdir)/lispref/Makefile.in config.status
+doc/lispref/Makefile: $(srcdir)/doc/lispref/Makefile.in config.status
./config.status
-lispintro/Makefile: $(srcdir)/lispintro/Makefile.in config.status
+doc/lispintro/Makefile: $(srcdir)/doc/lispintro/Makefile.in config.status
./config.status
oldXMenu/Makefile: $(srcdir)/oldXMenu/Makefile.in config.status
@@ -409,13 +415,20 @@ install-arch-dep: mkdir
## Note that we copy DOC* and then delete DOC
## as a workaround for a bug in tar on Ultrix 4.2.
-## FIXME
-## Should only install the DOC- file appropriate to this build, not DOC-*.
-## http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00417.html
-## (fix available for consideration post-release).
+## We install only the relevant DOC file if possible
+## (ie DOC-${version}.buildnumber), otherwise DOC-${version}*.
## If people complain about the h flag in tar command, take that out.
## That flag is also used in leim/Makefile.in
+
+## Note that the Makefiles in the etc directory are potentially useful
+## in an installed Emacs, so should not be excluded.
+
+## installuser:
+## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html
+## Nuisance because i) it needs to be the user running install, so
+## configure can't set it; ii) can't (?) use the result of rule
+## commands to set make variables.
install-arch-indep: mkdir info
-set ${COPYDESTS} ; \
unset CDPATH; \
@@ -429,6 +442,10 @@ install-arch-indep: mkdir info
mkdir ${COPYDESTS} ; \
chmod ugo+rx ${COPYDESTS} ; \
unset CDPATH; \
+ for installuser in $${LOGNAME} $${USERNAME} $${USER} \
+ `id -un 2> /dev/null`; do \
+ [ -n "$${installuser}" ] && break ; \
+ done ; \
for dir in ${COPYDIR} ; do \
dest=$$1 ; shift ; \
[ -d $${dir} ] \
@@ -437,7 +454,7 @@ install-arch-indep: mkdir info
(cd $${dir}; tar -chf - . ) \
| (cd $${dest}; umask 022; \
tar -xvf - && cat > /dev/null) || exit 1; \
- find $${dest} -exec chown $${LOGNAME:-$$USERNAME} {} ';' ;\
+ find $${dest} -exec chown $${installuser} {} ';' ;\
for subdir in `find $${dest} -type d ! -name RCS ! -name CVS -print` ; do \
chmod a+rx $${subdir} ; \
rm -rf $${subdir}/RCS ; \
@@ -448,7 +465,8 @@ install-arch-indep: mkdir info
rm -f $${subdir}/.\#* ; \
rm -f $${subdir}/*~ ; \
rm -f $${subdir}/*.orig ; \
- rm -f $${subdir}/[mM]akefile* ; \
+ [ "$${dir}" != "${srcdir}/etc" ] && \
+ rm -f $${subdir}/[mM]akefile* ; \
rm -f $${subdir}/ChangeLog* ; \
rm -f $${subdir}/dired.todo ; \
done) ; \
@@ -474,10 +492,22 @@ install-arch-indep: mkdir info
-unset CDPATH; \
if [ `(cd ./etc; /bin/pwd)` != `(cd $(DESTDIR)${docdir}; /bin/pwd)` ]; \
then \
- echo "Copying etc/DOC-* to $(DESTDIR)${docdir} ..." ; \
- (cd ./etc; tar -chf - DOC*) \
+ fullversion=`./src/emacs --version | sed -n '1 s/GNU Emacs *//p'`; \
+ if [ -f "./etc/DOC-$${fullversion}" ]; \
+ then \
+ docfile="DOC-$${fullversion}"; \
+ else \
+ docfile="DOC-${version}*"; \
+ fi; \
+ echo "Copying etc/$${docfile} to $(DESTDIR)${docdir} ..." ; \
+ (cd ./etc; tar -chf - $${docfile}) \
|(cd $(DESTDIR)${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
- (cd $(DESTDIR)$(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
+ (cd $(DESTDIR)$(docdir); \
+ for installuser in $${LOGNAME} $${USERNAME} $${USER} \
+ `id -un 2> /dev/null`; do \
+ [ -n "$${installuser}" ] && break ; \
+ done ; \
+ chown $${installuser} DOC*; chmod a+r DOC*; \
if test "`echo DOC-*`" != "DOC-*"; then rm -f DOC; fi); \
else true; fi
-unset CDPATH; \
@@ -489,7 +519,12 @@ install-arch-indep: mkdir info
echo "Copying lisp/*.el and lisp/*.elc to $(DESTDIR)${lispdir} ..." ; \
(cd lisp; tar -chf - *.el *.elc) \
|(cd $(DESTDIR)${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
- (cd $(DESTDIR)${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
+ (cd $(DESTDIR)${lispdir}; \
+ for installuser in $${LOGNAME} $${USERNAME} $${USER} \
+ `id -un 2> /dev/null`; do \
+ [ -n "$${installuser}" ] && break ; \
+ done ; \
+ find . -exec chown $${installuser} {} ';') ; \
else true; fi
-unset CDPATH; \
if [ -n "${GZIP_PROG}" ]; \
@@ -529,10 +564,10 @@ install-arch-indep: mkdir info
else true; fi
-chmod -R a+r $(DESTDIR)${datadir}/emacs/${version} $(DESTDIR)${datadir}/emacs/site-lisp ${COPYDESTS} $(DESTDIR)${infodir}
thisdir=`/bin/pwd`; \
- cd ${srcdir}/etc; \
+ cd ${mansrcdir}; \
for page in emacs emacsclient etags ctags ; do \
(cd $${thisdir}; \
- ${INSTALL_DATA} ${srcdir}/etc/$${page}.1 $(DESTDIR)${man1dir}/$${page}${manext}; \
+ ${INSTALL_DATA} ${mansrcdir}/$${page}.1 $(DESTDIR)${man1dir}/$${page}${manext}; \
chmod a+r $(DESTDIR)${man1dir}/$${page}${manext}); \
done
@@ -615,9 +650,10 @@ mostlyclean: FRC
(cd oldXMenu; $(MAKE) $(MFLAGS) mostlyclean)
(cd lwlib; $(MAKE) $(MFLAGS) mostlyclean)
(cd lib-src; $(MAKE) $(MFLAGS) mostlyclean)
- -(cd man && $(MAKE) $(MFLAGS) mostlyclean)
- -(cd lispref && $(MAKE) $(MFLAGS) mostlyclean)
- -(cd lispintro && $(MAKE) $(MFLAGS) mostlyclean)
+ -(cd doc/emacs && $(MAKE) $(MFLAGS) mostlyclean)
+ -(cd doc/misc && $(MAKE) $(MFLAGS) mostlyclean)
+ -(cd doc/lispref && $(MAKE) $(MFLAGS) mostlyclean)
+ -(cd doc/lispintro && $(MAKE) $(MFLAGS) mostlyclean)
(cd leim; $(MAKE) $(MFLAGS) mostlyclean)
### `clean'
@@ -633,9 +669,10 @@ clean: FRC
(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
(cd lwlib; $(MAKE) $(MFLAGS) clean)
(cd lib-src; $(MAKE) $(MFLAGS) clean)
- -(cd man && $(MAKE) $(MFLAGS) clean)
- -(cd lispref && $(MAKE) $(MFLAGS) clean)
- -(cd lispintro && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/emacs && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/misc && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/lispref && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/lispintro && $(MAKE) $(MFLAGS) clean)
(cd leim; $(MAKE) $(MFLAGS) clean)
### `distclean'
@@ -653,9 +690,10 @@ distclean: FRC
(cd oldXMenu; $(MAKE) $(MFLAGS) distclean)
(cd lwlib; $(MAKE) $(MFLAGS) distclean)
(cd lib-src; $(MAKE) $(MFLAGS) distclean)
- (cd man && $(MAKE) $(MFLAGS) distclean)
- (cd lispref && $(MAKE) $(MFLAGS) distclean)
- (cd lispintro && $(MAKE) $(MFLAGS) distclean)
+ (cd doc/emacs && $(MAKE) $(MFLAGS) distclean)
+ (cd doc/misc && $(MAKE) $(MFLAGS) distclean)
+ (cd doc/lispref && $(MAKE) $(MFLAGS) distclean)
+ (cd doc/lispintro && $(MAKE) $(MFLAGS) distclean)
(cd leim; $(MAKE) $(MFLAGS) distclean)
(cd lisp; $(MAKE) $(MFLAGS) distclean)
${top_distclean}
@@ -676,9 +714,10 @@ maintainer-clean: FRC
(cd oldXMenu; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lwlib; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lib-src; $(MAKE) $(MFLAGS) maintainer-clean)
- -(cd man && $(MAKE) $(MFLAGS) maintainer-clean)
- -(cd lispref && $(MAKE) $(MFLAGS) maintainer-clean)
- -(cd lispintro && $(MAKE) $(MFLAGS) maintainer-clean)
+ -(cd doc/emacs && $(MAKE) $(MFLAGS) maintainer-clean)
+ -(cd doc/misc && $(MAKE) $(MFLAGS) maintainer-clean)
+ -(cd doc/lispref && $(MAKE) $(MFLAGS) maintainer-clean)
+ -(cd doc/lispintro && $(MAKE) $(MFLAGS) maintainer-clean)
(cd leim; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lisp; $(MAKE) $(MFLAGS) maintainer-clean)
${top_distclean}
@@ -693,49 +732,6 @@ extraclean:
-rm -f config-tmp-*
-rm -f *~ \#*
-### Unlocking and relocking. The idea of these productions is to reduce
-### hassles when installing an incremental tar of Emacs. Do `make unlock'
-### before unlocking the file to take the write locks off all sources so
-### that tar xvof will overwrite them without fuss. Then do `make relock'
-### afterward so that VC mode will know which files should be checked in
-### if you want to mung them.
-###
-### Note: it's no disaster if these productions miss a file or two; tar
-### and VC will swiftly let you know if this happens, and it is easily
-### corrected.
-SOURCES = ChangeLog FTP INSTALL Makefile.in \
- README configure make-dist move-if-change
-
-.PHONY: unlock relock
-
-unlock:
- chmod u+w $(SOURCES)
- -(cd elisp; chmod u+w Makefile README *.texi)
- (cd etc; $(MAKE) $(MFLAGS) unlock)
- (cd lib-src; $(MAKE) $(MFLAGS) unlock)
- (cd lisp; $(MAKE) $(MFLAGS) unlock)
- (cd lisp/term; chmod u+w README *.el)
- (cd man; chmod u+w *texi* ChangeLog split-man)
- (cd lispref; chmod u+w *texi* ChangeLog)
- (cd lispintro; chmod u+w *texi* ChangeLog)
- (cd oldXMenu; chmod u+w *.[ch] Makefile README)
- (cd lwlib; chmod u+w *.[ch] Makefile README)
- (cd src; $(MAKE) $(MFLAGS) unlock)
-
-relock:
- chmod u-w $(SOURCES)
- -(cd elisp; chmod u-w Makefile README *.texi)
- (cd etc; $(MAKE) $(MFLAGS) relock)
- (cd lib-src; $(MAKE) $(MFLAGS) relock)
- (cd lisp; $(MAKE) $(MFLAGS) relock)
- (cd lisp/term; chmod u+w README *.el)
- (cd man; chmod u+w *texi* ChangeLog split-man)
- (cd lispref; chmod u+w *texi* ChangeLog)
- (cd lispintro; chmod u+w *texi* ChangeLog)
- (cd oldXMenu; chmod u+w *.[ch] Makefile README)
- (cd lwlib; chmod u+w *.[ch] Makefile README)
- (cd src; $(MAKE) $(MFLAGS) relock)
-
# The src subdir knows how to do the right thing
# even when the build directory and source dir are different.
TAGS tags: lib-src src
@@ -753,13 +749,15 @@ force-info:
# put the info files in $(srcdir),
# so we can do ok running make in the build dir.
info: force-info
- -(cd man; $(MAKE) $(MFLAGS) info)
- -(cd lispref; $(MAKE) $(MFLAGS) info)
- -(cd lispintro; $(MAKE) $(MFLAGS) info)
+ -(cd doc/emacs; $(MAKE) $(MFLAGS) info)
+ -(cd doc/misc; $(MAKE) $(MFLAGS) info)
+ -(cd doc/lispref; $(MAKE) $(MFLAGS) info)
+ -(cd doc/lispintro; $(MAKE) $(MFLAGS) info)
dvi:
- (cd man; $(MAKE) $(MFLAGS) dvi)
- (cd lispref; $(MAKE) $(MFLAGS) elisp.dvi)
- (cd lispintro; $(MAKE) $(MFLAGS) emacs-lisp-intro.dvi)
+ (cd doc/emacs; $(MAKE) $(MFLAGS) dvi)
+ (cd doc/misc; $(MAKE) $(MFLAGS) dvi)
+ (cd doc/lispref; $(MAKE) $(MFLAGS) elisp.dvi)
+ (cd doc/lispintro; $(MAKE) $(MFLAGS) emacs-lisp-intro.dvi)
#### Bootstrapping.
@@ -808,7 +806,18 @@ bootstrap-clean-before-fast: FRC
(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
(cd lwlib; $(MAKE) $(MFLAGS) clean)
(cd lib-src; $(MAKE) $(MFLAGS) clean)
- -(cd man && $(MAKE) $(MFLAGS) clean)
- -(cd lispref && $(MAKE) $(MFLAGS) clean)
- -(cd lispintro && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/emacs && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/misc && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/lispref && $(MAKE) $(MFLAGS) clean)
+ -(cd doc/lispintro && $(MAKE) $(MFLAGS) clean)
(cd leim; $(MAKE) $(MFLAGS) clean)
+
+.PHONY: check-declare
+
+check-declare:
+ @if [ ! -e $(srcdir)/src/emacs ]; then \
+ echo "You must build Emacs to use this command"; \
+ exit 1; \
+ fi
+ (cd leim; $(MAKE) $(MFLAGS) $@)
+ (cd lisp; $(MAKE) $(MFLAGS) $@)
diff --git a/README b/README
index 59e509355bf..61970c946b9 100644
--- a/README
+++ b/README
@@ -3,7 +3,7 @@ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
See the end of the file for license conditions.
-This directory tree holds version 22.1.50 of GNU Emacs, the extensible,
+This directory tree holds version 23.0.50 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
The file INSTALL in this directory says how to build and install GNU
@@ -73,14 +73,13 @@ There are several subdirectories:
`man', `lispref', and `lispintro' subdirectories are
architecture-independent too.
`info' holds the Info documentation tree for Emacs.
-`man' holds the source code for the Emacs Manual. If you modify the
+`doc/emacs' holds the source code for the Emacs Manual. If you modify the
manual sources, you will need the `makeinfo' program to produce
an updated manual. `makeinfo' is part of the GNU Texinfo
package; you need version 4.6 or later of Texinfo.
-`lispref' holds the source code for the Emacs Lisp reference manual.
-`lispintro' holds the source code for the Introduction to Programming
- in Emacs Lisp manual.
-
+`doc/lispref' holds the source code for the Emacs Lisp reference manual.
+`doc/lispintro' holds the source code for the Introduction to Programming
+ in Emacs Lisp manual.
`msdos' holds configuration files for compiling Emacs under MSDOG.
`vms' holds instructions and useful files for running Emacs under VMS.
`nt' holds various command files and documentation files that pertain
diff --git a/admin/ChangeLog b/admin/ChangeLog
index c957ac43f32..20d0adc0e89 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,7 +1,35 @@
+2007-11-17 Glenn Morris <rgm@gnu.org>
+
+ * admin.el (process-lines): Move to ../lisp/subr.el.
+
+2007-10-23 Glenn Morris <rgm@gnu.org>
+
+ * MAINTAINERS: Move here from ../.
+
+2007-10-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * make-emacs: Doc fix.
+
+2007-08-28 Glenn Morris <rgm@gnu.org>
+
+ * admin.el: Provide self.
+
+2007-08-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * FOR-RELEASE (http): Add Gtk+ tool bar and GUD focus problem.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
+2007-06-07 Glenn Morris <rgm@gnu.org>
+
+ * admin.el (set-copyright): New function.
+
+2007-04-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * make-tarball.txt: Add note about cutting the branch.
+
2007-06-02 Chong Yidong <cyd@stupidchicken.com>
* Version 22.1 released.
@@ -11,7 +39,7 @@
* nt/makedist.bat: Change EOL format to DOS. Don't use
redirection characters in REM lines.
-2007-01-27 Jan Dj,Ad(Brv <jhd@winter.localdomain>
+2007-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* FOR-RELEASE: Removed Gtk/Xft issue.
@@ -151,7 +179,7 @@
2005-10-17 Bill Wohler <wohler@newt.com>
* FOR-RELEASE (DOCUMENTATION): Removed lisp/toolbar from list
- since it's gone. Also marked mh-e as done.
+ since it's gone. Also marked mh-e as done.
2005-10-11 Juanma Barranquero <lekktu@gmail.com>
@@ -197,11 +225,11 @@
2005-03-30 Marcelo Toledo <marcelo@marcelotoledo.org>
- * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The
- first line of every tutorial must begin with a sentence saying
- "Emacs Tutorial" in the respective language. This should be
- followed by "See end for copying conditions", likewise in the
- respective language.
+ * FOR-RELEASE (Documentation): Added check the Emacs Tutorial.
+ The first line of every tutorial must begin with a sentence saying
+ "Emacs Tutorial" in the respective language. This should be
+ followed by "See end for copying conditions", likewise in the
+ respective language.
2005-03-29 Luc Teirlinck <teirllm@auburn.edu>
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index 77e9b8d42ed..4b40c74c90e 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -5,24 +5,26 @@ Tasks needed before the next release.
** Check for widow and orphan lines in manuals;
make sure all the pages really look ok in the manual as formatted.
-** Regenerate the postscript files of the reference cards in etc.
+** Regenerate the pdf versions of the reference cards in etc/refcards/.
** Ask maintainers of refcard translations to update them.
-Requests to have been sent out on 2006-05-23 (Reiner Steib).
+Emacs 22 translators:
LANG Translator Status
-cs Pavel Janík Can't work on it now.
-de Sven Joachim Done
-fr Eric Jacoboni Done
-pl WÅ‚odek Bzyl Done
-pt-br Rodrigo Real Done
-ru Alex Ott Done
-sk Miroslav Vaško No response
+cs Pavel Janík
+de Sven Joachim
+fr Eric Jacoboni
+pl WÅ‚odek Bzyl
+pt-br Rodrigo Real
+ru Alex Ott
+sk Miroslav Vaško
-Reminders sent out on 2006-06-08.
+** Remove temporary +++/--- lines in NEWS.
-* WINDOWS SUPPORT BUGS.
+** Try to reorder NEWS: most important things first, related items together.
+
+* WINDOWS SUPPORT BUGS
These don't need to be fixed before a release, but we call the
attention of Windows users to fixing them.
@@ -36,6 +38,9 @@ to the hack introduced on 2005-07-01 to fix some other Cleartype problem.
* BUGS WAITING FOR MORE USER INPUT
+** raman@users.sf.net, sep 7: Emacs 23.0.50: Segfaults in alloc.c (batch process)
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00690.html
+
** undefined reference getopt_long
Report by Daniel C. Bastos <dbast0s@yahoo.com.br> on bug-gnu-emacs
from 2007-08-27. Impossible to procede without more input from OP (as
@@ -50,6 +55,57 @@ http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00055.html
* BUGS
+** Document the changes introduced by multi-tty
+http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01639.html
+http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01602.html
+
+** Does deleting frames run Lisp code? If so, can we get rid of that?
+It is a dangerous design.
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01330.html
+
+** Why were the calls to x_fully_uncatch_errors commented out in eval.c?
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01987.html
+
+** grep et al should use font-lock to do highlighting, so that they respect font-lock-mode.
+"can't turn off font-lock"
+http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg00548.html
+
+** mah@everybody.org, Sep 18: erc causes emacs to hang with multi-tty
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01765.html
+
+** jbw@macs.hw.ac.uk, Sep 18: before-string property has no effect if display property is empty
+http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00094.html
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01816.html
+
+** sdl.web@gmail.com, Sep 24: TLS infinite loop.
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01720.html
+
+** herring@lanl.gov: find-func: can no longer find adviced subrs
+This ought to work.
+
+** \\{...} produces duplicate entries
+http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg00209.html
+
+** menu indications of key bindings for remapped commands
+http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg01339.html
+
+** rms: gnus-dired.el is a mistake. Those features should not
+be part of Gnus. They should be moved to some other part of Emacs.
+
+** sdl.web@gmail.com, 28 Oct: window-system in face definition
+
+** add README files for etc/gnus, etc/images/smilies/medium,grayscale
+update etc/images README files with any new images
+
+** Gnus cannot send mail by default
+http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg02082.html
+
+** Gnus archive groups are not shown at all if they are not at the default level.
+http://thread.gmane.org/gmane.emacs.gnus.general/65622
+
+** Extra question asked when doing a reply in Gnus
+http://thread.gmane.org/gmane.emacs.gnus.general/65627
+
** sdl.web@gmail.com, 30 Oct: ps-lpr-switches has no effect
** Stephen.Berman@gmx.net: minibuffer and current-local-map
@@ -62,34 +118,34 @@ http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00055.html
The first line of every tutorial must begin with text ending in a
period (".", ASCII 0x2E) saying "Emacs Tutorial" in the respective
-language. This should be followed by "See end for copying
-conditions", likewise in the respective language.
+language. This should be followed by "See end for copying conditions",
+likewise in the respective language.
After each file name, on the same line or the following line, come the
names of the people who have checked it.
SECTION READERS
----------------------------------
-etc/TUTORIAL rms
-etc/TUTORIAL.bg Ognyan Kulev <ogi@fmi.uni-sofia.bg>
+etc/TUTORIAL
+etc/TUTORIAL.bg
etc/TUTORIAL.cn
-etc/TUTORIAL.cs Pavel Janík <Pavel@Janik.cz>
-etc/TUTORIAL.de Werner LEMBERG <wl@gnu.org>
+etc/TUTORIAL.cs
+etc/TUTORIAL.de
etc/TUTORIAL.eo
-etc/TUTORIAL.es Marcelo Toledo
-etc/TUTORIAL.fr ttn
-etc/TUTORIAL.it ttn
-etc/TUTORIAL.ja Kenichi Handa <handa@m17n.org>
+etc/TUTORIAL.es
+etc/TUTORIAL.fr
+etc/TUTORIAL.it
+etc/TUTORIAL.ja
etc/TUTORIAL.ko
-etc/TUTORIAL.nl Lute Kamstra
-etc/TUTORIAL.pl Slawomir Nowaczyk <slawek@cs.lth.se>
-etc/TUTORIAL.pt_BR Marcelo Toledo
+etc/TUTORIAL.nl
+etc/TUTORIAL.pl
+etc/TUTORIAL.pt_BR
etc/TUTORIAL.ro
-etc/TUTORIAL.ru Alex Ott <alexott@gmail.com>
-etc/TUTORIAL.sk Pavel Janík <Pavel@Janik.cz>
-etc/TUTORIAL.sl Primoz PETERLIN <primoz.peterlin@biofiz.mf.uni-lj.si>
-etc/TUTORIAL.sv Mats Lidell <matsl@contactor.se>
-etc/TUTORIAL.th Virach Sornlertlamvanich <virach@tcllab.org>
+etc/TUTORIAL.ru
+etc/TUTORIAL.sk
+etc/TUTORIAL.sl
+etc/TUTORIAL.sv
+etc/TUTORIAL.th
etc/TUTORIAL.zh
diff --git a/MAINTAINERS b/admin/MAINTAINERS
index 92c2ff70b47..f14bc2068db 100644
--- a/MAINTAINERS
+++ b/admin/MAINTAINERS
@@ -39,7 +39,7 @@ Eli Zaretskii
lisp/term/tty-colors.el
lisp/international/codepage.el
- man/msdog.texi
+ doc/emacs/msdog.texi
Kenichi Handa
Mule
@@ -69,7 +69,14 @@ Jay Belanger
Calc
lisp/calc/*
etc/calccard.tex
- man/calc.texi
+ doc/misc/calc.texi
+
+Michael Olson
+ ERC
+ lisp/erc/*
+ etc/ERC-NEWS
+ doc/misc/erc.texi
+ lisp/emacs-lisp/tq.el
==============================================================================
2.
@@ -79,7 +86,7 @@ Steven Tamm
MacOS
Eli Zaretskii
- man/*
+ doc/*
lispref/*
info/dir
@@ -149,13 +156,16 @@ src/filelock.c
src/filemode.c
src/firstfile.c
src/floatfns.c
+src/fringe.c
src/fns.c
src/fontset.c
src/getloadavg.c
src/gmalloc.c
+src/gtkutil.c
src/hftctl.c
src/indent.c
src/insdel.c
+src/image.c
src/lastfile.c
src/lread.c
src/m/
@@ -178,7 +188,6 @@ src/scroll.c
src/search.c
src/sound.c
src/strftime.c
-src/sunfns.c
src/sysdep.c
src/termcap.c
src/terminfo.c
diff --git a/admin/admin.el b/admin/admin.el
index 67b0c161f5b..a8b436171c5 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -24,26 +24,11 @@
;; add-release-logs Add ``Version X released'' change log entries.
;; set-version Change Emacs version number in source tree.
+;; set-copyright Change emacs short copyright string (eg as
+;; printed by --version) in source tree.
;;; Code:
-(defun process-lines (program &rest args)
- "Execute PROGRAM with ARGS, returning its output as a list of lines.
-Signal an error if the program returns with a non-zero exit status."
- (with-temp-buffer
- (let ((status (apply 'call-process program nil (current-buffer) nil args)))
- (unless (eq status 0)
- (error "%s exited with status %s" program status))
- (goto-char (point-min))
- (let (lines)
- (while (not (eobp))
- (setq lines (cons (buffer-substring-no-properties
- (line-beginning-position)
- (line-end-position))
- lines))
- (forward-line 1))
- (nreverse lines)))))
-
(defun add-release-logs (root version)
"Add \"Version VERSION released.\" change log entries in ROOT.
Root must be the root of an Emacs source tree."
@@ -158,5 +143,52 @@ Root must be the root of an Emacs source tree."
(rx (and (submatch (1+ (in "a-z"))) (0+ space) ?\, (0+ space)
"/* development, alpha, beta, or final (release) */"))))))
+;; Note this makes some assumptions about form of short copyright.
+(defun set-copyright (root copyright)
+ "Set Emacs short copyright to COPYRIGHT in relevant files under ROOT.
+Root must be the root of an Emacs source tree."
+ (interactive (list
+ (read-directory-name "Emacs root directory: " nil nil t)
+ (read-string
+ "Short copyright string: "
+ (format "Copyright (C) %s Free Software Foundation, Inc."
+ (format-time-string "%Y")))))
+ (unless (file-exists-p (expand-file-name "src/emacs.c" root))
+ (error "%s doesn't seem to be the root of an Emacs source tree" root))
+ (set-version-in-file root "lisp/version.el" copyright
+ (rx (and "emacs-copyright" (0+ space)
+ ?\" (submatch (1+ (not (in ?\")))) ?\")))
+ (set-version-in-file root "lib-src/etags.c" copyright
+ (rx (and "emacs_copyright" (0+ (not (in ?\")))
+ ?\" (submatch (1+ (not (in ?\")))) ?\")))
+ (set-version-in-file root "lib-src/rcs2log" copyright
+ (rx (and "Copyright" (0+ space) ?= (0+ space)
+ ?\' (submatch (1+ nonl)))))
+ (set-version-in-file
+ root "mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings"
+ copyright (rx (and "CFBundleGetInfoString" (0+ space) ?= (0+ space) ?\"
+ (1+ anything)
+ (submatch "Copyright" (1+ (not (in ?\")))))))
+ ;; This one is a nuisance, as it needs to be split over two lines.
+ (string-match "\\(.*[0-9]\\{4\\} *\\)\\(.*\\)" copyright)
+ (let ((csign "\\0xa9")
+ (cyear (match-string 1 copyright)) ; "Copyright (C) 2007 "
+ (owner (match-string 2 copyright))) ; "Free Software Foundation, Inc."
+ (set-version-in-file root "mac/src/Emacs.r"
+ (regexp-quote
+ (replace-regexp-in-string "(C)"
+ (regexp-quote csign) cyear))
+ (rx (and
+ (submatch "Copyright" (0+ space) (eval csign)
+ (0+ space) (= 4 num)
+ (0+ (not (in ?\")))) ?\")))
+ (set-version-in-file root "mac/src/Emacs.r" owner
+ (rx (and ?\"
+ (submatch (1+ (not (in ?\"))))
+ ?\" (0+ space)
+ "/* Long version number */")))))
+
+(provide 'admin)
+
;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5
;; admin.el ends here.
diff --git a/admin/make-emacs b/admin/make-emacs
index 23b4e1c6374..94bf2092a8b 100755
--- a/admin/make-emacs
+++ b/admin/make-emacs
@@ -68,7 +68,7 @@ Build Emacs.
--help show this help
--all make clean versionclean first
--boot make boostrap, log to boot.log
- --enable-checking ENABLE_CHECKING=1 (implies Lisp union type)
+ --enable-checking ENABLE_CHECKING=1
--no-warn disable warnings
--check-marked GC_CHECK_MARKED_OBJECTS=1
--optim no debug defines
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index e56c26571d9..9a202d62f85 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -10,7 +10,7 @@ For each step, check for possible errors.
make sure that the later tagged version will bootstrap, should it be
necessary to check it out.
-3. Regenerate Emacs' AUTHORS file (M-x load-file RET
+3. Regenerate Emacs' etc/AUTHORS file (M-x load-file RET
lisp/emacs-lisp/authors.el RET, then M-x authors RET, then save
the *Authors* buffer). This may require fixing syntactically
incorrect ChangeLog entries beforehand.
@@ -21,7 +21,7 @@ For each step, check for possible errors.
5. rm configure; make bootstrap
-6. Commit configure, README, AUTHORS, lisp/finder-inf.el,
+6. Commit configure, README, etc/AUTHORS, lisp/finder-inf.el,
lisp/version.el, man/emacs.texi, lispref/elisp.texi,
mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings,
mac/src/Emacs.r, nt/emacs.rc. Copy lisp/loaddefs.el to
@@ -76,7 +76,22 @@ For each step, check for possible errors.
14. For a pretest, let Richard Stallman <rms@gnu.org> know about the new pretest and
tell him to announce it using the announcement you prepared. Remind
him to set a Reply-to header to <emacs-pretest-bug@gnu.org>.
- For a release, Richard should prepare the announcement himself,
+
+15. Shortly before the release, cut the branch with the following commands:
+
+ cvs rtag EMACS_`NUMBER'_BASE
+ cvs rtag -b EMACS_`NUMBER'_RC -r EMACS_`NUMBER'_BASE
+
+where `NUMBER' is the major version number of the release. This makes it
+easier to see what changes have been applied to the branch with:
+
+ cvs diff -r EMACS_`NUMBER'_BASE -r EMACS_`NUMBER'_RC
+
+or merge changes back to the trunk with "cvs update -j", if necessary.
+
+After doing this, increase the version number on the trunk as per step 4.
+
+16. For a release, Richard should prepare the announcement himself,
possibly starting from a previous announcment.
# arch-tag: c23c771f-ca26-4584-8a04-50ecf0989390
diff --git a/admin/notes/changelogs b/admin/notes/changelogs
new file mode 100644
index 00000000000..03fb353eb02
--- /dev/null
+++ b/admin/notes/changelogs
@@ -0,0 +1,5 @@
+http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg00793.html
+ There is no need to make change log entries for files such as NEWS,
+ MAINTAINERS, and FOR-RELEASE.
+
+The same applies for regenerating files like configure.
diff --git a/admin/notes/copyright b/admin/notes/copyright
index 30abdd09a91..4ab01feeae3 100644
--- a/admin/notes/copyright
+++ b/admin/notes/copyright
@@ -131,7 +131,7 @@ mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings
mac/src/Emacs.r # resource 'vers'
src/emacs.c
- remember to change the latest copyright year in the --version output.
- [Post-release, will automate this like set-version does for version.]
+ `set-copyright' in admin.el will do all the above.
<top-level>/install-sh
lispintro/install-sh
@@ -598,6 +598,70 @@ Done: TUTORIAL.eo
None known.
+** NOTES ON RELICENSING TO GPL3
+
+The EMACS_22_BASE branch was changed to GPLv3 (or later) 2007/07/25.
+
+Some notes:
+(see http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg01431.html)
+
+1. There are some files in Emacs CVS which are not part of Emacs (eg
+those included from Gnulib). These are all copyright FSF and (at time
+of writing) GPL >= 2. rms says may as well leave the licenses of these
+alone (may import them from Gnulib again). These are:
+
+ Gnulib:
+ src/getloadavg.c
+ src/gmalloc.c
+ src/md5.c
+ src/md5.h
+ src/mktime.c
+ src/strftime.c
+ src/termcap.c
+ src/tparam.c
+
+ Others:
+ config.guess
+ config.sub
+ lispintro/missing
+ man/texinfo.tex
+
+Note _not_ included in the above are src/regex.{c,h} (rms: "That
+forked version is only in Emacs, so definitely relicense that."), and
+oldXMenu/insque.c (rms: "We wrote that specifically for Emacs, so
+definitely relicense that.").
+
+2. The files that are copyright FSF and AIST, or AIST alone, should be
+and were updated, ditto the oldXMenu files with FSF copyright, and
+msdos/is_exec.c and sigaction.c.
+
+3. lwlib/
+
+Files originally in Lucid Widget Library were left alone (excludes
+ChangeLog, etc), ie remain under GPL v1 or later, or v2 or later.
+(rms: "We may as well leave this alone, since we are never going to
+change it much.")
+
+4. There are some files where the FSF holds no copyright. These were
+left alone:
+
+ leim/MISC-DIC/CTLau-b5.html >= v2
+ leim/MISC-DIC/CTLau.html >= v2
+ (above included in lisp/international/titdic-cnv.el)
+ leim/MISC-DIC/pinyin.map >= v1
+ leim/MISC-DIC/ziranma.cin >= v1
+ leim/SKK-DIC/SKK-JISYO.L >= v2
+ leim/SKK-DIC/README >= v2
+ leim/ja-dic/ja-dic.el >= v2
+
+5. At time of writing, some non-Emacs icons included from Gnome remain
+under GPLv2 (no "or later"). See:
+
+ etc/images/gnus/README
+ etc/images/mail/README
+ etc/images/README
+ nt/icons/README
+
This file is part of GNU Emacs.
diff --git a/admin/notes/lel-TODO b/admin/notes/lel-TODO
new file mode 100644
index 00000000000..f5254d7a956
--- /dev/null
+++ b/admin/notes/lel-TODO
@@ -0,0 +1,107 @@
+Some lisp/emacs-lisp/ Features and Where They Are Documented
+Copyright (C) 2007 Free Software Foundation, Inc.
+
+
+* Status Key
+ - -- as yet unknown
+ n/a -- not applicable (internal, uninteresting, etc)
+ todo -- not documented but should be
+ NODE -- documented in or under info node NODE
+
+
+* Features
+ advice (elisp) Advising Functions
+ advice-preload n/a
+ assoc -
+ authors -
+ autoload (elisp) Autoload
+ avl-tree -
+ backquote n/a
+ benchmark n/a
+ bindat (elisp) Byte Packing
+ byte-compile (elisp) Byte Compilation
+ byte-opt -
+ bytecomp (elisp) Compilation Functions
+ checkdoc (elisp) Documentation Tips
+ cl (cl)
+ cl-19 n/a
+ cl-compat n/a
+ cl-specs n/a
+ copyright -
+ crm -
+ cust-print (elisp) Printing in Edebug
+ debug (elisp) Debugger
+ derived (elisp) Derived Modes
+ disass (elisp) Disassembly
+ easy-mmode (elisp) Defining Minor Modes
+ easymenu -
+ edebug (elisp) Edebug
+ eldoc -
+ elint -
+ elp n/a
+ ewoc (elisp) Separated Rendering
+ find-func -
+ find-gc -
+ generic (elisp) Generic Modes
+ gulp n/a
+ helper -
+ levents -
+ lisp-float-type -
+ lisp-mnt -
+ lisp-mode n/a
+ lmenu -
+ lselect -
+ lucid -
+ macroexp (elisp) Expansion
+ pp (emacs) Program Indent
+ re-builder -
+ regexp-opt (elisp) Regexp Functions
+ regi -
+ ring (elisp) Rings
+ rx -
+ shadow -
+ sregex -
+ syntax (elisp) Position Parse
+ testcover -
+ timer (elisp) Timers
+ tq (elisp) Transaction Queues
+ trace -
+ unsafep (elisp) Function Safety
+ warnings (elisp) Warnings
+
+
+* Above list created using default directory lisp/emacs-lisp/ with
+ (shell-command
+ "sed '/^(provide '\\''/!d;s// /;s/).*//' *.el | sort | uniq")
+
+
+* How to use this file to improve Emacs
+ (loop
+ (let* ((feature (choose-one Features))
+ (status (feature-status feature)))
+ (if (or (eq '- status) (not (verify status)))
+ (update feature (current-docs feature))
+ (case status
+ (todo (let (doc patch feedback)
+ (while (not (grok feature))
+ (or (play-with feature)
+ (grep feature Internet)
+ (grep feature (wisdom-maybe "emacs-devel"))))
+ (setq doc (write-documentation feature)
+ patch (diff (current-docs) doc))
+ (while (not (and (correct doc)
+ (well-placed doc)
+ (well-formed patch)))
+ (setq doc (revise doc)
+ patch (diff (current-docs) doc))
+ feedback (wisdom-maybe "emacs-devel" patch))
+ (when (install patch)
+ (when (update feature (current-docs feature))
+ (job-well-done user-login-name)))))
+ (n/a (job-well-done user-login-name))))))
+
+
+* Etc
+ Local variables:
+ mode: outline
+ End:
diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty
new file mode 100644
index 00000000000..5895f59bddc
--- /dev/null
+++ b/admin/notes/multi-tty
@@ -0,0 +1,1362 @@
+-*- coding: utf-8; mode: text; -*-
+
+From README.multi-tty in the multi-tty branch.
+Some of this information may be out of date.
+
+
+THANKS
+------
+
+The following is a (sadly incomplete) list of people who have
+contributed to the project by testing, submitting patches, bug
+reports, and suggestions. Thanks!
+
+Bernard Adrian <bernadrian@free.fr>
+ARISAWA Akihiro <ari@mbf.ocn.ne.jp>
+Vincent Bernat <bernat@luffy.cx>
+Han Boetes <han@mijncomputer.nl>
+Francisco Borges <borges@let.rug.nl>
+Damien Cassou <damien.cassou@laposte.net>
+Robert J. Chassell <bob@rattlesnake.com>
+Romain Francoise <romain@orebokech.com>
+Ami Fischman <ami@fischman.org>
+Noah Friedman <friedman@splode.com>
+Friedrich Delgado Friedrichs <friedel@nomaden.org>
+Samium Gromoff <_deepfire@mail.ru>
+Mikhail Gusarov <dottedmag@dottedmag.net>
+Eric Hanchrow <offby1@blarg.net>
+IRIE Tetsuya <irie@t.email.ne.jp>
+Yoshiaki Kasahara <kasahara@nc.kyushu-u.ac.jp>
+Bas Kok <nekkobassu@yahoo.com>
+Jurej Kubelka <Juraj.Kubelka@email.cz>
+David Lichteblau <david@lichteblau.com>
+Richard Lewis <rtf@jabble.com>
+mace <mace@kirjakaapeli.lib.hel.fi>
+Suresh Madhu <madhu@cs.unm.edu>
+Xavier Mallard <zedek@gnu-rox.org>
+Istvan Marko <mi-mtty@kismala.com>
+Ted Morse <morse@ciholas.com>
+Gergely Nagy <algernon@debian.org>
+Dan Nicolaescu <dann@ics.uci.edu>
+Kalle Olavi Niemitalo <kon@iki.fi>
+Mark Plaksin <happy@mcplaksin.org>
+Frank Ruell <stoerte@dreamwarrior.net>
+Tom Schutzer-Weissmann <trmsw@yahoo.co.uk>
+Joakim Verona <joakim@verona.se>
+Dan Waber <dwaber@logolalia.com>
+and many others.
+
+Richard Stallman was kind enough to review an earlier version of my
+patches.
+
+
+STATUS
+------
+
+It still needs to be ported to Windows/Mac/DOS. Both multiple
+tty device support and simultaneous X and tty frame support works
+fine. Emacsclient has been extended to support opening new tty and X
+frames. It has been changed to open new Emacs frames by default.
+
+Tested on GNU/Linux, Solaris 8, FreeBSD and OpenBSD.
+
+Known problems:
+
+ * GTK support. If you compile your Emacs with the GTK
+ toolkit, some functionality of multi-tty may be lost. In
+ particular, you may get crashes while working on multiple X
+ displays at once. Previous releases of GTK had limitations
+ and bugs that prevented full-blown multi-display support in
+ Emacs. (GTK crashed when Emacs tries to disconnect from an
+ X server.) Things are much improved in the current GTK
+ version, but if you do experience crashes in libgtk, try
+ compiling Emacs with the Lucid toolkit instead.
+
+ * The single-kboard mode.
+
+ If your multi-tty Emacs session seems to be frozen, you
+ probably have a recursive editing session or a pending
+ minibuffer prompt (which is a kind of recursive editing) on
+ another display. To unfreeze your session, switch to that
+ display and complete the recursive edit, for example by
+ pressing C-] (`abort-recursive-edit').
+
+ I am sorry to say that currently there is no way to break
+ out of this "single-kboard mode" from a frozen display. If
+ you are unable to switch to the display that locks the
+ others (for example because it is on a remote computer),
+ then you can use emacsclient to break out of all recursive
+ editing sessions:
+
+ emacsclient -e '(top-level)'
+
+ Note that this (perhaps) unintuitive behaviour is by design.
+ Single-kboard mode is required because of an intrinsic Emacs
+ limitation that is very hard to eliminate. (This limitation
+ is related to the single-threaded nature of Emacs.)
+
+ I plan to implement better user notification and support for
+ breaking out of single-kboard mode from locked displays.
+
+ * Mac and DOS support is broken, doesn't even
+ compile. Multiple display support will probably not provide
+ new Emacs features on these systems, but the multi-tty
+ branch changed a few low-level interfaces, and the
+ system-dependent source files need to be adapted
+ accordingly. The changes are mostly trivial, so almost
+ anyone can help, if only by compiling the branch and
+ reporting the compiler errors.
+
+
+TESTING
+-------
+
+To test the multi-tty feature, start up the Emacs server with the
+following commands:
+
+ emacs
+ M-x server-start
+
+and then (from a shell prompt on another terminal) start emacsclient
+with
+ emacsclient -t /optional/file/names... (for a tty frame)
+ emacsclient /optional/file/names... (for an X frame)
+
+(Make sure both emacs and emacsclient are multi-tty versions.)
+You'll hopefully have two fully working, independent frames on
+separate terminals. The new frame is closed automatically when you
+finish editing the specified files (C-x #), but delete-frame (C-x 5 0)
+also works. Of course, you can create frames on more than two tty
+devices.
+
+Creating new frames on the same tty with C-x 5 2 (make-frame-command)
+works, and behaves the same way as in previous Emacs versions. If you
+exit emacs, all terminals should be restored to their previous states.
+
+TIPS & TRICKS
+-------------
+
+I think the best way to use the new Emacs is to have it running inside
+a disconnected GNU screen session, and always use emacsclient for
+normal work. One advantage of this is that not a single keystroke of
+your work will be lost if the display device that you are using
+crashes, or the network connection times out, or whatever. (I had an
+extremely unstable X server for some time while I was developing these
+patches, and running Emacs this way has saved me a number of M-x
+recover-session invocations.)
+
+I use the following two bash scripts to handle my Emacs sessions:
+
+-------------------------------------------------------connect-emacs--
+#!/bin/bash
+# Usage: connect-emacs <name> <args>...
+#
+# Connects to the Emacs instance called NAME. Starts up the instance
+# if it is not already running. The rest of the arguments are passed
+# to emacsclient.
+
+name="$1"
+shift
+
+if [ -z "$name" ]; then
+ echo "Usage: connect_emacs <name> <args>..." >&2
+ exit 1
+fi
+preload-emacs "$name" wait
+/usr/bin/emacsclient.emacs-multi-tty -s "$name" "$@"
+----------------------------------------------------------------------
+
+-------------------------------------------------------preload-emacs--
+#!/bin/bash
+# Usage: preload-emacs <name> [<waitp>]
+#
+# Preloads the Emacs instance called NAME in a detached screen
+# session. Does nothing if the instance is already running. If WAITP
+# is non-empty, the function waits until the server starts up and
+# creates its socket; otherwise it returns immediately.
+
+name="$1"
+waitp="$2"
+screendir="/var/run/screen/S-$USER"
+serverdir="/tmp/emacs$UID"
+emacs=/usr/bin/emacs-multi-tty # Or wherever you installed your multi-tty Emacs
+
+if [ -z "$name" ]; then
+ echo "Usage: preload_emacs <name> [<waitp>]" >&2
+ exit 1
+fi
+
+if [ ! -e "$screendir"/*."$name" ]; then
+ if [ -e "$serverdir/$name" ]; then
+ # Delete leftover socket (for the wait option)
+ rm "$serverdir/$name"
+ fi
+ screen -dmS "$name" "$emacs" -nw --eval "(setq server-name \"$name\")" -f server-start
+fi
+if [ ! -z "$waitp" ]; then
+ while [ ! -e "$serverdir/$name" ]; do sleep 0.1; done
+fi
+----------------------------------------------------------------------
+
+I have the following in my profile to have two instances automatically
+preloaded for editing and email:
+
+ preload-emacs editor
+ preload-emacs gnus
+
+It is useful to set up short aliases for connect-emacs. I use the
+following:
+
+ alias edit="connect-emacs editor"
+ alias e=edit
+ alias et="connect-emacs editor -t"
+ alias gnus="connect-emacs gnus"
+
+
+THINGS TO DO
+------------
+
+** See if `tty-defined-color-alist' needs to be terminal-local.
+ Update: Dan says it should be, so convert it.
+
+** Mikhail Gusarov suggest to add a hook akin to
+ `after-make-frame-functions' that is called whenever Emacs connects
+ to a new terminal. Good idea!
+
+** emacsclient -t on the console does not work after su. You have to
+ use non-root accounts or start as root to see this.
+
+ Login: root
+ Password:
+ # su lorentey
+ $ emacsclient -t
+ *ERROR*: Could not open file: /dev/tty1
+
+ The tty can be opened as /dev/tty by emacsclient, but not by Emacs.
+ This seems to be a serious problem. Currently my only idea is to
+ bring back the ugly pty proxy hack from the initial versions of
+ multi-tty. Suggestions would be appreciated.
+
+ Update: we could change emacsclient to pass its open file
+ descriptor to the Emacs process. Unfortunately, this requires a
+ new Lisp-level Emacs API, and as file descriptors are not otherwise
+ exported to Lisp, this approach seems at least as ugly as the pty
+ proxy idea.
+
+** lisp/vc.el depends on the terminal type during load time.
+ `vc-annotate-color-map' is one example that needs to be fixed.
+
+** Understand how `quit_throw_to_read_char' works, and fix any bugs
+ that come to light.
+
+** See if getcjmp can be eliminated somehow. Why does Emacs allow
+ asynchronous input processing while it's reading input anyway?
+
+** `delete-frame' events are handled by `special-event-map'
+ immediately when read by `read_char'. This is fine but it prevents
+ higher-level keymaps from binding that event to get notified of the
+ deleted frame.
+
+ Sometimes it would be useful for Lisp code to be notified of frame
+ deletions after they have happened, usually because they want to
+ clean up after the deleted frame. Not all frame-local states can
+ be stored as a frame parameter. For example,
+ `display-splash-screen' uses `recursive-edit' with a special keymap
+ override to create its buffer---and it leads to all kinds of
+ nastiness if Emacs stays in this recursive edit mode after the
+ frame containing the splash screen is deleted. Basically, the
+ splash-screen implementation wants to throw out of the recursive
+ edit when the frame is deleted; however, it is not legal to throw
+ from `delete-frame-functions' because `delete-frame' must not fail.
+ (Introducing `delete-frame-after-functions' would not help either
+ because `delete-frame' may not fail at that time either.)
+
+ Currently `fancy-splash-screens' installs a
+ `delete-frame-functions' hook that sets up a timer to exit the
+ recursive edit. This is an adequate solution, but it would perhaps
+ be better to have something like a `frame-deleted' event that could
+ be bound in the normal way.
+
+** Trouble: `setenv' doesn't actually set environment variables in the
+ Emacs process. This defeats the purpose of the elaborate
+ `server-with-environment' magic around the `tgetent' call in
+ `init_tty'. D'oh.
+
+** (Possibly) create hooks in struct device for creating frames on a
+ specific terminal, and eliminate the hackish terminal-related frame
+ parameters (display, tty, tty-type).
+
+ make_terminal_frame
+ create_tty_output
+
+** Decide whether to keep the C implementation of terminal parameters,
+ or revert to the previous, purely Lisp code. It turned out that
+ local environments do not need terminal parameters after all.
+
+** Move Fsend_string_to_terminal to term.c, and declare get_named_tty
+ as static, removing it from dispextern.h.
+ Move fatal to emacs.c and declare it somewhere.
+
+** Search for `suspend-emacs' references and replace them with
+ `suspend-frame', if necessary. Ditto for `save-buffers-kill-emacs'
+ vs. `save-buffers-kill-display'.
+
+** Emacs crashes when a tty frame is resized so that there is no space
+ for all its windows. (Tom Schutzer-Weissmann)
+
+** Report GTK multi-display problems to GTK maintainers. For extra
+ credit, fix them.
+
+ Currently you can not connect to new X displays when you compile
+ Emacs with GTK support. If you want to play around with GTK
+ multidisplay (and don't mind core dumps), you can edit src/config.h
+ and define HAVE_GTK_MULTIDISPLAY there by hand.
+
+ http://bugzilla.gnome.org/show_bug.cgi?id=85715
+
+ Update: Han reports that GTK+ version 2.8.9 almost gets display
+ disconnects right. GTK will probably be fully fixed by the time
+ multi-tty gets into the trunk.
+
+ Update: I am still having problems with GTK+ 2.8.10. I have the
+ impression that the various multidisplay fixes will only get
+ released in GTK+ 2.10.
+
+** Audit `face-valid-attribute-values' usage in customize and
+ elsewhere. Its return value depends on the current window system.
+ Replace static initializers using it with runtime functions. For
+ example, custom's buttons are broken on non-initial device types.
+
+** Possibly turn off the double C-g feature when there is an X frame.
+ C.f. (emacs)Emergency Escape.
+
+** frames-on-display-list should also accept frames.
+
+** Consider the `tty-type' frame parameter and the `display-tty-type'
+ function. They serve the exact same purpose. I think it may be
+ a good idea to eliminate one of them, preferably `tty-type'.
+
+** The handling of lisp/term/*.el, and frame creation in general, is a
+ big, big mess. How come the terminal-specific file is loaded by
+ tty-create-frame-with-faces? I don't think it is necessary to load
+ these files for each frame; once per terminal should be enough.
+ Update: lisp/term/*.el is not loaded repeatedly anymore, but
+ faces.el still needs to be cleaned up.
+
+** Fix frame-set-background-mode in this branch. It was recently
+ changed in CVS, and frame.el in multi-tty has not yet been adapted
+ for the changes. (It needs to look at
+ default-frame-background-mode.) (Update: maybe it is fixed now;
+ needs testing.) (Note that the byte compiler has this to say about
+ term/rxvt.el:)
+
+ term/rxvt.el:309:17:Warning: assignment to free variable
+ `default-frame-background-mode'
+
+** I think `(set-)terminal-local-value' and the terminal parameter
+ mechanism should be integrated into a single framework.
+
+ (Update: `(set-)terminal-local-value' is now eliminated, but the
+ terminal-local variables should still be accessible as terminal
+ parameters. This also applies to `display-name' and similar
+ functions.)
+
+** Add the following hooks: after-delete-frame-hook (for server.el,
+ instead of delete-frame-functions),
+ after-delete-terminal-functions, after-create-terminal-functions.
+
+** BULK RENAME: The `display-' prefix of new Lisp-level functions
+ conflicts with stuff like `display-time-mode'. Use `device-'
+ or `terminal-' instead. I think I prefer `terminal-'.
+
+ It turns out that most of the offending Lisp functions were defined
+ in the trunk. Therefore, compatibility aliases should be defined
+ for the following names:
+
+ display-color-cells terminal-color-cells
+ display-color-p terminal-color-p
+ display-graphic-p terminal-graphic-p
+ display-grayscale-p terminal-grayscale-p
+ display-images-p terminal-images-p
+ display-mm-height terminal-mm-height
+ display-mm-width terminal-mm-width
+ display-mouse-p terminal-mouse-p
+ display-multi-font-p terminal-multi-font-p
+ display-multi-frame-p terminal-multi-frame-p
+ display-pixel-height terminal-pixel-height
+ display-pixel-width terminal-pixel-width
+ display-pixels-per-inch terminal-pixels-per-inch
+ display-planes terminal-planes
+ display-popup-menus-p terminal-popup-menus-p
+ display-save-under terminal-save-under
+ display-screens terminal-screens
+ display-supports-face-attributes-p terminal-supports-face-attributes-p
+ display-visual-class terminal-visual-class
+ framep-on-display framep-on-terminal
+ frames-on-display-list frames-on-terminal-list
+
+ The following functions were introduced in the multi-tty branch, and
+ were renamed without aliases:
+
+ delete-display delete-terminal
+ display-controlling-tty-p controlling-tty-p
+ display-list terminal-list
+ display-live-p terminal-live-p
+ display-name terminal-name
+ display-tty-type tty-type
+ frame-display frame-terminal
+ selected-display selected-terminal
+
+** The single-keyboard mode of MULTI_KBOARD is extremely confusing
+ sometimes; Emacs does not respond to stimuli from other keyboards.
+ At least a beep or a message would be important, if the single-mode
+ is still required to prevent interference. (Reported by Dan
+ Nicolaescu.)
+
+ Update: selecting a region with the mouse enables single_kboard
+ under X. This is very confusing.
+
+ Update: After discussions with Richard Stallman, this will be
+ resolved by having locked displays warn the user to wait, and
+ introducing a complex protocol to remotely bail out of
+ single-kboard mode by pressing C-g.
+
+ Update: Warning the user is not trivial to implement, as Emacs has
+ only one echo area, shared by all frames. Ideally the warning
+ should not be displayed on the display that is locking the others.
+ Perhaps the high probability of user confusion caused by
+ single_kboard mode deserves a special case in the display code.
+ Alternatively, it might be good enough to signal single_kboard mode
+ by changing the modelines or some other frame-local display element
+ on the locked out displays.
+
+ Update: In fact struct kboard does have an echo_string slot.
+
+** The session management module is prone to crashes when the X
+ connection is closed and then later I try to connect to a new X
+ session:
+
+ #0 0xb7ebc806 in SmcGetIceConnection () from /usr/X11R6/lib/libSM.so.6
+ #1 0x080e6641 in x_session_check_input (bufp=0xbf86c9c0) at xsmfns.c:144
+ #2 0x080d3bbc in XTread_socket (device=0xa722ff8, expected=1, hold_quit=0xbf86ca90) at xterm.c:7037
+ #3 0x080fa404 in read_avail_input (expected=1) at keyboard.c:6696
+ #4 0x080fa4ca in handle_async_input () at keyboard.c:6900
+ #5 0x080d51fa in x_term_init (display_name=162628899, xrm_option=0x0, resource_name=0x857068c "emacs") at xterm.c:10622
+ #6 0x080d920e in x_display_info_for_name (name=162628899) at xfns.c:3975
+ #7 0x080d92f9 in check_x_display_info (object=1) at xfns.c:274
+ #8 0x080d97b8 in Fx_create_frame (parms=151221485) at xfns.c:3016
+ #9 0x0815bf72 in Ffuncall (nargs=2, args=0xbf86ceec) at eval.c:2851
+
+ I installed a workaround to prevent this. The X session manager is
+ only contacted when the very first display in the Emacs session is
+ an X display. Also, x_delete_display() on this display aborts
+ session management, and XTread_socket only calls
+ x_session_check_input when it is called for the display that the
+ session was opened on. While this does not really fix the bug, it
+ makes it much less frequent, because session manager support will
+ not normally be enabled when Emacs can survive the shutdown of the
+ X server.
+
+ See if xsmfns.c should be updated.
+
+** Hunt down display-related functions in frame.el and extend them all
+ to accept display ids.
+
+** rif->flush_display_optional (NULL) calls should be replaced by a
+ new global function.
+
+** The set-locale-environment hack (adding the DISPLAY option) should
+ be replaced with a clean design.
+
+** standard-display-table should be display-local.
+ standard-display-european should be display-local.
+
+** With iswitchb-default-method set to 'always-frame, only frames on
+ the current display should be considered. This might involve
+ extending `get-buffer-window'.
+
+** Have a look at Vlocale_coding_system. Seems like it would be a
+ tedious job to localize it, although most references use it for
+ interfacing with libc and are therefore OK with the global
+ definition.
+
+ Exceptions found so far: x-select-text and
+ x-cut-buffer-or-selection-value.
+
+** Have a look at fatal_error_hook.
+
+** Have a look at set_frame_matrix_frame.
+
+** Check if we got term-setup-hook right.
+
+** I think tip_frame should be display-local.
+
+** Check display reference count handling in x_create_tip_frame.
+
+** make-frame does not correctly handle extra parameters in its
+ argument:
+
+ (frame-parameter (make-frame (list (cons 'foobar 42))) 'foobar)
+ => nil
+
+ (This is likely an error in the CVS trunk.)
+
+** Dan Nicolaescu suggests that -nw should be added as an alias for -t
+ in emacsclient. Good idea. (Alas, implementing this is not
+ trivial, getopt_long does not seem to support two-letter ``short''
+ options. Patches are welcome.)
+
+** Mark Plaksin suggests that emacsclient should accept the same
+ X-related command-line arguments as Emacs. Most of the X-related
+ argument-handling is done in Lisp, so this should be quite easy to
+ implement. (For example, Samium Gromoff wants emacsclient to
+ support --geometry; implementing this would add that support.)
+
+** Gergely Nagy suggests that C-x # should only kill the current
+ frame, not any other emacsclient frame that may have the same file
+ opened for editing. I think I agree with him.
+
+** Very strange bug: visible-bell does not work on secondary
+ terminals in xterm and konsole. The screen does flicker a bit,
+ but it's so quick it isn't noticable.
+
+ (Update: This is probably some problem with padding or whatnot on
+ the secondary terminals.)
+
+** Move baud_rate to struct display.
+
+** Implement support for starting an interactive Emacs session without
+ an initial frame. (The user would connect to it and open frames
+ later, with emacsclient.)
+
+** Fix Mac support (I can't do this entirely myself). Note that the
+ current state of Mac-specific source files in the multi-tty tree
+ are not useful; before starting work on Mac support, revert to
+ pristine, pre-multi-tty versions.
+
+** Fix DOS support (I can't do this entirely myself). Note that the
+ current state of DOS-specific source files in the multi-tty tree
+ are not useful; before starting work on DOS support, revert to
+ pristine, pre-multi-tty versions.
+
+** Fix Windows support. Currently bootstraping works on w32, but Emacs
+ crashes on startup and none of the multi-tty features are
+ implemented. Many XXX comments mark things that probably need
+ updating, ChangeLogs will help in spotting changes to X specific
+ files that may need porting.
+
+** Do a grep on XXX and ?? for more issues.
+
+** flow-ctrl.el must be updated.
+
+** Fix stuff_char for multi-tty. Doesn't seem to be of high priority.
+
+DIARY OF CHANGES
+----------------
+
+(ex-TODO items with explanations.)
+
+-- Introduce a new struct for terminal devices.
+
+ (Done, see struct tty_output. The list of members is not yet
+ complete.)
+
+-- Change the bootstrap procedure to initialize tty_list.
+
+ (Done, but needs review.)
+
+-- Change make-terminal-frame to support specifying another tty.
+
+ (Done, new frame parameters: `tty' and `tty-type'.)
+
+-- Implement support for reading from multiple terminals.
+
+ (Done, read_avail_input tries to read from each terminal, until one
+ succeeds. MULTI_KBOARD is not used. Secondary terminals don't send
+ SIGIO!)
+
+ (Update: They do, now.)
+
+ (Update2: After enabling X, they don't.)
+
+-- other-frame should cycle through the frames on the `current'
+ terminal only.
+
+ (Done, by trivially modifiying next_frame and prev_frame.)
+
+-- Support different terminal sizes.
+
+ (Done, no problem.)
+
+-- Make sure terminal resizes are handled gracefully. (Could be
+ problematic.)
+
+ (Done. We don't get automatic SIGWINCH for additional ttys,
+ though.)
+
+-- Extend emacsclient to automatically open a new tty when it connects
+ to Emacs.
+
+ (Done. It's an ugly hack, needs more work.)
+
+-- Redisplay must refresh the topmost frame on *all* terminals, not
+ just the initial terminal.
+
+ (Done, but introduced an ugly redisplay problems. Ugh.)
+
+-- Fix redisplay problems.
+
+ (Done; it turned out that the entire Wcm structure must be moved
+ inside tty_output. Why didn't I catch this earlier?)
+
+-- Provide a way for emacsclient to tell Emacs that the tty has been
+ resized.
+
+ (Done, simply forward the SIGWINCH signal.)
+
+-- Each keypress should automatically select the frame corresponding
+ to the terminal that it was coming from. This means that Emacs
+ must know from which terminal the last keyboard event came from.
+
+ (Done, it was quite simple, the input event system already
+ supported multiple frames.)
+
+-- Fix SIGIO issue with secondary terminals.
+
+ (Done, emacsclient signals Emacs after writing to the proxy pseudo
+ terminal. Note that this means that multi-tty does not work with
+ raw ttys!)
+
+ (Update: This is bullshit. There is a read_input_waiting function,
+ extend that somehow.)
+
+ (Update of update: The first update was not right either, extending
+ read_input_waiting was not necessary. Secondary ttys do seem to
+ send signals on input.)
+
+ (Update^3: Not any more.)
+
+-- Make make-terminal-frame look up the `tty' and `tty-type' frame
+ parameters from the currently selected terminal before the global
+ default.
+
+ (Done.)
+
+-- Put all cached terminal escape sequences into struct tty_output.
+ Currently, they are still stored in global variables, so we don't
+ really support multiple terminal types.
+
+ (Done. It was not fun.)
+
+-- Implement sane error handling after initialization. (Currently
+ emacs exits if you specify a bad terminal type.) The helpful error
+ messages must still be provided when Emacs starts.
+
+ (Done.)
+
+-- Implement terminal deletion, i.e., deleting local frames, closing
+ the tty device and restoring its previous state without exiting
+ Emacs.
+
+ (Done, but at the moment only called when an error happens during
+ initialization. There is a memory corruption error around this
+ somewhere.) (Update: now it is fully enabled.)
+
+-- Implement automatic deletion of terminals when the last frame on
+ that terminal is closed.
+
+ (Done.)
+
+-- Restore tty screen after closing the terminal.
+
+ (Done, we do the same as Emacs 21.2 for all terminals.)
+
+-- 'TERM=dumb src/emacs' does not restore the terminal state.
+
+ (Done.)
+
+-- C-g should work on secondary terminals.
+
+ (Done, but the binding is not configurable.)
+
+-- Deal with SIGHUP in Emacs and in emacsclient. (After this, the
+ server-frames may be removed from server.el.)
+
+ (Done, nothing to do. It seems that Emacs does not receive SIGHUP
+ from secondary ttys, which is actually a good thing.) (Update: I
+ think it would be a bad idea to remove server-frames.)
+
+-- Change emacsclient/server.el to support the -t argument better,
+ i.e. automatically close the socket when the frame is closed.
+
+ (Seems to be working OK.)
+
+-- Fix mysterious memory corruption error with tty deletion. To
+ trigger it, try the following shell command:
+
+ while true; do TERM=no-such-terminal-definition emacsclient -h; done
+
+ Emacs usually dumps core after a few dozen iterations. (The bug
+ seems to be related to the xfreeing or bzeroing of
+ tty_output.Wcm. Maybe there are outside references to struct Wcm?
+ Why were these vars collected into a struct before multi-tty
+ support?)
+
+ (Done. Whew. It turned out that the problem had nothing to do
+ with hypothetical external references to Wcm, or any other
+ tty_output component; it was simply that delete_tty closed the
+ filehandles of secondary ttys twice, resulting in fclose doubly
+ freeing memory. Utterly trivial matter. I love the C's memory
+ management, it puts hair on your chest.)
+
+-- Support raw secondary terminals. (Note that SIGIO works only on
+ the controlling terminal.) Hint: extend read_input_waiting for
+ multiple ttys and hopefully this will be fixed.
+
+ (Done, it seems to have been working already for some time. It
+ seems F_SETOWN does work, after all. Not sure what made it fail
+ earlier, but it seems to be fixed (there were several changes
+ around request_sigio, maybe one of them did it).
+ read_input_waiting is only used in sys_select, don't change
+ it.) (Update: After adding X support, it's broken again.)
+ (Update^2: No it isn't.) :-)
+
+-- Find out why does Emacs abort when it wants to close its
+ controlling tty. Hint: chan_process[] array. Hey, maybe
+ noninterrupt-IO would work, too? Update: no, there is no process
+ for stdin/out.
+
+ (Done. Added add/delete_keyboard_wait_descriptor to
+ term_init/delete_tty. The hint was right, in a way.)
+
+-- Issue with SIGIO: it needs to be disabled during redisplay. See if
+ fcntl kernel behaviour could be emulated by emacsclient.
+
+ (Done. Simply disabled the SIGIO emulation hack in emacsclient.)
+ (Update: it was added back.) (Update^2: and removed again.)
+
+-- server.el: There are issues with saving files in buffers of closed
+ clients. Try editing a file with emacsclient -f, and (without
+ saving it) do a delete-frame. The frame is closed without
+ question, and a surprising confirmation prompt appears in another
+ frame.
+
+ (Done. delete-frame now asks for confirmation if it still has
+ pending buffers, and modified buffers don't seem to be deleted.)
+
+-- emacsclient.el, server.el: Handle eval or file open errors when
+ doing -t.
+
+ (Done.)
+
+-- Make parts of struct tty_output accessible from Lisp. The device
+ name and the type is sufficient.
+
+ (Done, see frame-tty-name and frame-tty-type.)
+
+-- Export delete_tty to the Lisp environment, for emacsclient.
+
+ (Done, see delete-tty.)
+
+-- Get rid of the accessor macros in termchar.h, or define macros for
+ all members.
+
+ (Done.)
+
+-- Move device-specific parameters (like costs) commonly used by
+ device backends to a common, device-dependent structure.
+
+ (Done. See struct display_method in termhooks.h.)
+
+-- Fix X support.
+
+ (Done. Well, it seems to be working.)
+
+-- Allow simultaneous X and tty frames. (Handling input could be
+ tricky. Or maybe not.)
+
+ (Done. Allowed, that is. It is currently extremely unstable, to
+ the point of being unusable. The rif variable causes constant
+ core dumps. Handling input is indeed tricky.)
+
+-- Rewrite multi-tty input in terms of MULTI_KBOARD.
+
+ (Done. In fact, there was no need to rewrite anything, I just
+ added a kboard member to tty_display_info, and initialized the
+ frame's kboard from there.)
+
+-- Fix rif issue with X-tty combo sessions. IMHO the best thing to do
+ is to get rid of that global variable (and use the value value in
+ display_method, which is guaranteed to be correct).
+
+ (Done, did exactly that. Core dumps during combo sessions became
+ much rarer. In fact, I have not yet met a single one.)
+
+-- Add multi-tty support to talk.el.
+
+ (Done.)
+
+-- Clean up the source of emacsclient. It is a mess.
+
+ (Done, eliminated stupid proxy-pty kludge.)
+
+-- Fix faces on tty frames during X-tty combo sessions. There is an
+ init_frame_faces call in init_sys_modes, see if there is a problem
+ with it.
+
+ (Done, there was a stupid mistake in
+ Ftty_supports_face_attributes_p. Colors are broken, though.)
+
+-- C-x 5 2, C-x 5 o, C-x 5 0 on an emacsclient frame unexpectedly
+ exits emacsclient. This is a result of trying to be clever with
+ delete-frame-functions.
+
+ (Fixed, added delete-tty-after-functions, and changed server.el to
+ use it.)
+
+-- Something with (maybe) multi-keyboard support broke function keys
+ and arrows on ttys during X+tty combo sessions. Debug this.
+
+ (I can't reproduce it, maybe the terminal type was wrong.)
+
+-- Fix input from raw ttys (again).
+
+ (Now it seems to work all right.)
+
+-- During an X-tty combo session, a (message "Hello") from a tty frame
+ goes to the X frame. Fix this.
+
+ (Done. There was a safeguard against writing to the initial
+ terminal frame during bootstrap which prevented echo_area_display
+ from working correctly on a tty frame during a combo session.)
+
+-- If there are no frames on its controlling terminal, Emacs should
+ exit if the user presses C-c there.
+
+ (Done, as far as possible. See the SIGTERM comment in
+ interrupt_signal on why this seems to be impossible to solve this
+ in general.)
+
+-- During an X session, Emacs seems to read from stdin. Also, Emacs
+ fails to start without a controlling tty.
+
+ (Fixed by replacing the troublesome termcap display with a dummy
+ bootstrap display during bootstrap.
+
+-- Do tty output through struct display, like graphical display
+ backends.
+
+ (Done.)
+
+-- Define an output_initial value for output_method for the initial
+ frame that is dumped with Emacs. Checking for this frame (e.g. in
+ cmd_error_internal) is ugly.
+
+ (Done, breaking interactive temacs.)
+
+-- The command `emacsclient -t -e '(delete-frame)'' fails to exit.
+
+ (Fixed.)
+
+-- frame-creation-function should always create a frame that is on the
+ same display as the selected frame. Maybe frame-creation-function
+ should simply be removed and make-frame changed to do the right
+ thing.
+
+ (Done, with a nice hack. frame-creation-function is now frame-local.)
+
+-- Fix C-g on raw ttys.
+
+ (Done. I disabled the interrupt/quit keys on all secondary
+ terminals, so Emacs sees C-g as normal input. This looks like an
+ overkill, because emacsclient has extra code to pass SIGINT to
+ Emacs, so C-g should remain the interrupt/quit key on emacsclient
+ frames. See the next entry why implementing this distinction would
+ be a bad idea.)
+
+-- Make sure C-g goes to the right frame with ttys. This is hard, as
+ SIGINT doesn't have a tty parameter. :-(
+
+ (Done, the previous change fixes this as a pleasant side effect.)
+
+-- I have seen a case when Emacs with multiple ttys fell into a loop
+ eating 100% of CPU time. Strace showed this loop:
+
+ getpid() = 30284
+ kill(30284, SIGIO) = 0
+ --- SIGIO (I/O possible) @ 0 (0) ---
+ ioctl(6, FIONREAD, [0]) = -1 EIO (Input/output error)
+ ioctl(5, FIONREAD, [0]) = -1 EIO (Input/output error)
+ ioctl(0, FIONREAD, [0]) = 0
+ sigreturn() = ? (mask now [])
+ gettimeofday({1072842297, 747760}, NULL) = 0
+ gettimeofday({1072842297, 747806}, NULL) = 0
+ select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0})
+ select(9, [0 3 5 6], NULL, NULL, {0, 0}) = 2 (in [5 6], left {0, 0})
+ gettimeofday({1072842297, 748245}, NULL) = 0
+
+ I have seen something similar with a single X frame, but have not
+ been able to reproduce it for debugging.
+
+ Update: This may have been caused by checking for nread != 0
+ instead of nread > 0 after calling read_socket_hook in
+ read_avail_input.
+
+ (Fixed. This was caused by unconditionally including stdin in
+ input_wait_mask in init_process. The select call in
+ wait_reading_process_input always returned immediately, indicating
+ that there is pending input from stdin, which nobody read.
+
+ Note that the above strace output seems to be an unrelated but
+ similar bug. I think that is now fixed.)
+
+-- Exiting Emacs while there are emacsclient frames doesn't restore the
+ ttys to their default states.
+
+ (This seems to be fixed by some previous change.)
+
+-- Allow opening an X session after -nw.
+
+ (Done.)
+
+-- Fix color handling during tty+X combo sessions. (It seems that tty
+ sessions automatically convert the face colors to terminal colors
+ when the face is loaded. This conversion must happen instead on
+ the fly in write_glyphs, which might be problematic, as color
+ approximation is currently done in lisp (term/tty-colors.el).)
+ (Update: hm, colors seem to work fine if I start emacs with -nw and
+ then create an X frame. Maybe it's just a small buglet somewhere.)
+
+ (Seems to be fixed. The problem was in startup.el, it did not
+ initialize tty colors when the initial window system was
+ graphical.)
+
+-- emacs -nw --eval '(y-or-n-p "Foobar")' segfaults. (Reported by
+ Romain Francoise)
+
+ (Fixed, there was a keyboard initialization problem.)
+
+-- Fix interactive use of temacs. There are face-related SEGVs, most
+ likely because of changes in realize_default_face, realize_face.
+
+ (Fixed.)
+
+-- Don't exit Emacs when the last X connection fails during a
+ multi-display session.
+
+ (Fixed.)
+
+-- Dan Nicolaescu noticed that starting emacsclient on the same
+ terminal device that is the controlling tty of the Emacs process
+ gives unexpected results.
+
+ (Fixed.)
+
+-- Istvan Marko reported that Emacs hang on ttys if it was started
+ from a shell script.
+
+ (Fixed. There was a bug in the multi-tty version of
+ narrow_foreground_group. tcsetpgrp blocks if it is called from a
+ process that is not in the same process group as the tty.)
+
+-- emacsclient -t from an Emacs term buffer does not work, complains
+ about face problems. This can even lock up Emacs (if the recursive
+ frame sets single_kboard). Update: the face problems are caused by
+ bugs in term.el, not in multi-tty. The lockup is caused by
+ single_kboard mode, and is not easily resolvable. The best thing to
+ do is to simply refuse to create a tty frame of type `eterm'.
+
+ (Fixed, changed emacsclient to check for TERM=eterm. The face
+ complaints seem to be caused by bugs in term.el; they are not
+ related to multi-tty.)
+
+-- Find out the best way to support suspending Emacs with multiple
+ ttys. My guess: disable it on the controlling tty, but from other
+ ttys pass it on to emacsclient somehow. (It is (I hope) trivial to
+ extend emacsclient to handle suspend/resume. A `kill -STOP' almost
+ works right now.)
+
+ (Done. I needed to play with signal handling and the server
+ protocol a bit to make emacsclient behave as a normal UNIX program
+ wrt foreground/background process groups.)
+
+-- There is a flicker during the startup of `emacs -nw'; it's as if
+ the terminal is initialized, reset and then initialialized again.
+ Debug this. (Hint: narrow_foreground_group is called twice during
+ startup.)
+
+ (This is gone.)
+
+-- Robert Chassell has found serious copy-paste bugs with the
+ multi-tty branch. There seem to be redisplay bugs while copying
+ from X to a terminal frame. Copying accented characters do not
+ work for me.
+
+ (Patch-124 should fix this, by changing the interprogram-*-function
+ variables to be frame-local, as suggested by Mark Plaksin
+ (thanks!). I think that the redisplay bugs are in fact not bugs,
+ but delays caused by single_kboard --> perhaps MULTI_KBOARD should
+ be removed.)
+
+-- frame-creation-function was removed, which might be a bad idea.
+ Think up a compatible solution.
+
+ (It was an internal interface that may be changed when necessary.)
+
+-- Change Lisp code not to (getenv "TERM"); use the `tty-type' frame
+ parameter or the frame-tty-type function instead. (M-x tags-search
+ "TERM" helps with this.) Update: Actually, all getenv invocations
+ should be checked for multi-tty compatibility, and an interface
+ must be implemented to get the remote client's environment.
+
+ (Done. Only getenv calls in lisp/term/*.el were changed; other
+ calls should be mostly left as they are.)
+
+-- Add an elaborate mechanism for display-local variables. (There are
+ already a few of these; search for `terminal-local' in the Elisp
+ manual.)
+
+ (Not needed. Display-local variables could be emulated by
+ frame-local variables.)
+
+-- Emacs assumes that all terminal frames have the same locale
+ settings as Emacs itself. This may lead to bogus results in a
+ multi-locale setup. (E.g., while logging in from a remote client
+ with a different locale.)
+ (Update after new bugreport by Friedrich Delgado Friedrichs:
+ (at least) the structs terminal_coding and keyboard_coding in
+ coding.c must be moved to struct display, and the Lisp interface
+ [set-]keyboard-coding-system must be adapted for the change.)
+
+ (Fixed. Emacs now uses the locale settings as seen by the
+ emacsclient process for server tty frames.)
+ (Update: Not really; Vlocale_coding_system is still global.)
+
+-- Make `struct display' accessible to Lisp programs. Accessor functions:
+
+ (displayp OBJECT): Returns t if OBJECT is a display.
+ => Implemented as display-live-p.
+
+ (display-list): Returns list of currently active displays.
+ => Implemented.
+
+ (selected-display): Returns the display object of the selected frame.
+ => Not strictly necessary, but implemented anyway.
+
+ (frame-display FRAME): Returns the display object of FRAME.
+ => Implemented.
+
+ (display-frames DISPLAY): Returns a list of frames on DISPLAY.
+ => Already implemented, see frames-on-display-list.
+
+ (display-type DISPLAY): Returns the type of DISPLAY, as a
+ symbol. (See `framep'.)
+ => Implemented as display-live-p.
+
+ (display-device DISPLAY): Returns the name of the device that
+ DISPLAY uses, as a string. (E.g: "/dev/pts/16", or
+ ":0.0")
+ => Implemented as display-name.
+
+ etc.
+
+ See next issue why this is necessary.
+
+ (Update: The consensus on emacs-devel seems to be to do this via
+ integer identifiers. That's fine by me.)
+
+ (Done.)
+
+-- The following needs to be supported:
+
+ $ emacsclient -t
+ C-z
+ $ emacsclient -t
+ (This fails now.)
+
+ The cleanest way to solve this is to allow multiple displays on the
+ same terminal device; each new emacsclient process should create
+ its own display. As displays are currently identified by their
+ device names, this is not possible until struct display becomes
+ accessible as a Lisp-level object.
+
+ (Done.)
+
+-- Miles Bader suggests that C-x C-c on an emacsclient frame should
+ only close the frame, not exit the entire Emacs session. Update:
+ see above for a function that does this. Maybe this should be the
+ new default?
+
+ (Done. This is the new default. No complaints so far.)
+
+-- Clean up the frame-local variable system. I think it's ugly and
+ error-prone. But maybe I just haven't yet fully understood it.
+
+ (Nothing to do. It doesn't seem ugly any more. It's rather clever.)
+
+-- Support multiple character locales. A version of
+ `set-locale-environment' needs to be written for setting up
+ display-local settings on ttys. I think calling
+ set-display-table-and-terminal-coding-system and
+ set-keyboard-coding-system would be enough. The language
+ environment itself should remain a global setting.
+
+ (Done, by an ugly hack.)
+
+-- The terminal customization files in term/*.el tend to change global
+ parameters, which may confuse Emacs with multiple displays. Change
+ them to tweak only frame-local settings, if possible. (They tend
+ to call define-key to set function key sequences a lot.)
+
+ (Done, by making `function-key-map' terminal-local (i.e., part of
+ struct kboard). This has probably covered all the remaining problems.)
+
+-- Make `function-key-map' and `key-translation-map' terminal-local.
+
+ (Done.)
+
+-- Implement `terminal-local-value' and `set-terminal-local-value' to
+ allow deterministic access to terminal local bindings. The
+ encode-kb package can not set up `key-translation-map' without
+ these. The terminal-local bindings seem to be independent of what
+ frame is selected.
+
+ (Done.)
+
+-- xt-mouse.el needs to be adapted for multi-tty. It currently
+ signals an error on kill-emacs under X, which prevents the user
+ from exiting Emacs. (Reported by Mnemonikk on freenode.)
+
+ (Done, I hope.)
+
+
+-- Having {reset,init}_all_sys_modes in set-input-mode breaks arrow
+ keys on non-selected terminals under screen, and sometimes on other
+ terminal types as well. The other function keys continue to work
+ fine. Sometimes faces on these screens become garbled.
+
+ This only seems to affect displays that are of the same terminfo
+ type as the selected one. Interestingly, in screen Emacs normally
+ reports the up arrow key as `M-o A', but after the above SNAFU, it
+ complains about `M-[ a'. UNIX ttys are a complete mystery to me,
+ but it seems the reset-reinitialize cycle somehow leaves the
+ non-selected terminals in a different state than usual. I have no
+ idea how this could happen.
+
+ Currently set-input-mode resets only the currently selected
+ terminal, which seems to somehow work around the problem.
+
+ Update:
+
+ Dan Nicolaescu <dann@ics.uci.edu> writes:
+ > Some terminals have 2 modes for cursor keys: Application Mode where
+ > the cursor keys transmit the codes defined in the terminfo entry, and
+ > Cursor mode. Applications have to send the smkx and rmkx terminfo
+ > strings to switch between the 2 modes. So Emacs (and emacsclient) have
+ > to send smkx when initializing and rmkx when quitting (or on
+ > suspend).
+
+ (I think patch-370 fixed this.)
+
+-- This long-standing bug (first reported by Han Boetes) seems to come
+ and go all the time. It is time to track it down and fix it.
+
+ emacs
+ M-x server-start
+
+ # From another xterm:
+ emacsclient -e '(y-or-n-p "Do you want me to crash? ")'
+ # Notice how the answer ends up in the *scratch* buffer
+ M-x garbage-collect
+ SIGSEGV
+
+ (Fixed in patch-414 after detailed analysis by Kalle Olavi Niemitalo.)
+
+-- normal-erase-is-backspace-mode in simple.el needs to be updated for
+ multi-tty (rep. by Dan Waber). (The Delete key is broken on X
+ because of this.)
+
+ (Fixed in patch-427.)
+
+-- I think keyboard-translate-table should be made terminal-local.
+
+ (Done in patch-431.)
+
+-- The semantics of terminal-local variables are confusing; it is not
+ clear what binding is in effect in any given time. See if
+ current_kboard (or at least the terminal-local bindings exported to
+ Lisp) might be changed to be tied to the selected frame instead.
+ Currently, `function-key-map' and `key-translation-map' may be
+ accessed reliably only using the hackish
+ `(set-)terminal-local-value' functions.
+
+ Perhaps there should be a difference between `last-command' &co.
+ and these more conventional configuration variables.
+ (E.g. `symbol-value' would use current_kboard to access
+ `last-command', but SELECTED_FRAME()->display->kboard to get the
+ value of `function-key-map'.
+
+ (Fixed in patch-434.)
+
+-- If the first key pressed on a new tty terminal is a function key,
+ it is not recognized correctly. May be related to the bug below.
+
+ (Seems to have been fixed as a side effect of patch-434. "The bug
+ below" was the set-input-mode madness.)
+
+ (Update: this bug was fixed for good in patch-449. It was tracked
+ down to a bug in `read_key_sequence': it failed to reinitialize its
+ local function-key-map/key-translation-map references when it
+ switched keyboards. I don't understand why did this bug only
+ appear on brand new frames, though!)
+
+-- Disable connecting to a new X display when we use the GTK toolkit.
+
+ (Disabled in patch-450.)
+
+-- Implement automatic forwarding of client environment variables to
+ forked processes, as discussed on the multi-tty list. Terminal
+ parameters are now accessible in C code, so the biggest obstacle is
+ gone. The `getenv_internal' and `child_setup' functions in
+ callproc.c must be changed to support the following variable:
+
+ terminal-local-environment-variables is a variable defined in ...
+
+ Enable or disable terminal-local environment variables.
+
+ If set to t, `getenv', `setenv' and subprocess creation
+ functions use the environment variables of the emacsclient
+ process that created the selected frame, ignoring
+ `process-environment'.
+
+ If set to nil, Emacs uses `process-environment' and ignores
+ the client environment.
+
+ Otherwise, `terminal-local-environment-variables' should be a
+ list of variable names (represented by Lisp strings) to look
+ up in the client environment. The rest will come from
+ `process-environment'.
+
+ (Implemented in patch-461; `terminal-getenv', `terminal-setenv' and
+ `with-terminal-environment' are now replaced by extensions to
+ `getenv' and `setenv', and the new `local-environment-variables'
+ facility. Yay!)
+
+ (Updated in patch-465 to fix the semantics of let-binding
+ `process-environment'. `process-environment' was changed to
+ override all local/global environment variables, and a new variable
+ `global-environment' was introduced to have `process-environment's
+ old meaning.)
+
+ (Updated in patch-466 to fix the case when two emacsclient sessions
+ share the same terminal, but have different environment. The local
+ environment lists are now stored as frame parameters, so the
+ C-level terminal parameters are not strictly necessary any more.)
+
+-- `Fdelete_frame' is called from various critical places where it is
+ not acceptable for the frame deletion to fail, e.g. from
+ x_connection_closed after an X error. `Fdelete_frame' now protects
+ against `delete-frame-functions' throwing an error and preventing a
+ frame delete. (patch-475)
+
+-- Fix set-input-mode for multi-tty. It's a truly horrible interface;
+ what if we'd blow it up into several separate functions (with a
+ compatibility definition)?
+
+ (Done. See `set-input-interrupt-mode', `set-output-flow-control',
+ `set-input-meta-mode' and `set-quit-char'.) (patch-457)
+
+-- Let-binding `overriding-terminal-local-map' on a brand new frame
+ does not seem to work correctly. (See `fancy-splash-screens'.)
+ The keymap seems to be set up right, but events go to another
+ terminal. Or is it `unread-command-events' that gets Emacs
+ confused? Investigate.
+
+ (Emacs was confused because a process filter entered
+ `recursive-edit' while Emacs was reading input. I added support
+ for this in the input system.) (patch-489)
+
+-- I smell something funny around pop_kboard's "deleted kboard" case.
+ Determine what are the circumstances of this case, and fix any
+ bug that comes to light.
+
+ (It happens simply because single_kboard's terminal is sometimes
+ deleted while executing a command on it, for example the one that
+ kills the terminal. There was no bug here, but I rewrote the whole
+ single_kboard mess anyway.) (patch-489)
+
+-- Understand Emacs's low-level input system (it's black magic) :-)
+ What exactly does interrupt_input do? I tried to disable it for
+ raw secondary tty support, but it does not seem to do anything
+ useful. (Update: Look again. X unconditionally enables this, maybe
+ that's why raw terminal support is broken again. I really do need
+ to understand input.)
+ (Update: I am starting to understand the read_key_sequence->read-char
+ ->kbd_buffer_get_event->read_avail_input->read_socket_hook path. Yay!)
+
+ (Update: OK, it all seems so easy now (NOT). Input could be done
+ synchronously (with wait_reading_process_input), or asynchronously
+ by SIGIO or polling (SIGALRM). C-g either sets the Vquit_flag,
+ signals a 'quit condition (when immediate_quit), or throws to
+ `getcjmp' when Emacs was waiting for input when the C-g event
+ arrived.)
+
+-- Replace wrong_kboard_jmpbuf with a special return value of
+ read_char. It is absurd that we use setjmp/longjmp just to return
+ to the immediate caller.
+
+ (Done in patch-500.)
+
+-- `tool-bar-mode', `scroll-bar-mode', `menu-bar-mode' and
+ 'fringe-mode' are modes global to the entire Emacs session, not
+ just a single frame or a single terminal. This means that their
+ status sometimes differs from what's actually displayed on the
+ screen. As a consequence, the Options | Show/Hide menu sometimes
+ shows incorrect status, and you have to select an option twice for
+ it to have any visible effect on the current frame.
+
+ Change Emacs so that the status of the items in the Options |
+ Show/Hide menu correspond to the current frame.
+
+ (Done in patch-537.)
+
+-- The `default-directory' variable should somehow be set to the
+ cwd of the emacsclient process when the user runs emacsclient
+ without file arguments. Perhaps it is OK to just override the
+ directory of the *scratch* buffer.
+
+ (Done in patch-539.)
+
+-- The borders on tooltip frames on X are messed up. More
+ specifically, the frame's internal border (internal-border-width
+ frame parameter) is not filled with the correct background color.
+
+ It seems the border contents are drawn onto by the
+ update_single_window call in `x-show-tip'. After some debugging, I
+ think the window's background color is not set up
+ correctly---calling `x_clear_area' fills the specified area with
+ black, not light yellow.
+
+ (Done in patch-544. A background_pixel field was defined both in
+ struct frame and struct x_output, and Emacs got confused between
+ them.)
+
+
+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 3, 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.
+
+;;; arch-tag: 8da1619e-2e79-41a8-9ac9-a0485daad17d
diff --git a/config.bat b/config.bat
index 1f544d3e274..117aff2681a 100644
--- a/config.bat
+++ b/config.bat
@@ -235,22 +235,11 @@ mv -f makefile.tmp Makefile
cd ..
:oldx1
rem ----------------------------------------------------------------------
-Echo Configuring the manual directory...
-cd man
-sed -f ../msdos/sed6.inp < Makefile.in > Makefile
-cd ..
-rem ----------------------------------------------------------------------
-Echo Configuring the ELisp manual directory...
-cd lispref
-sed -f ../msdos/sed6.inp < Makefile.in > Makefile
-cd ..
-rem ----------------------------------------------------------------------
-Echo Configuring the ELisp Introduction manual directory...
-Rem The two variants for the line below is for when the shell
+Echo Configuring the doc directory...
+cd doc
+Rem The two variants for lispintro below is for when the shell
Rem supports long file names but DJGPP does not
-if exist lispintro\Makefile.in cd lispintro
-if exist lispintr\Makefile.in cd lispintr
-sed -f ../msdos/sed6.inp < Makefile.in > Makefile
+for %%d in (emacs lispref lispintro lispintr misc) do sed -f ../msdos/sed6.inp < %%d\Makefile.in > %%d\Makefile
cd ..
rem ----------------------------------------------------------------------
Echo Configuring the lisp directory...
diff --git a/configure b/configure
index 5df7d18faaa..b2ea135388b 100755
--- a/configure
+++ b/configure
@@ -679,6 +679,7 @@ INSTALL_DATA
RANLIB
INSTALL_INFO
GZIP_PROG
+MAKEINFO
LIBSOUND
PKG_CONFIG
ALSA_CFLAGS
@@ -686,6 +687,9 @@ ALSA_LIBS
CFLAGS_SOUND
SET_MAKE
XMKMF
+HAVE_XSERVER
+RSVG_CFLAGS
+RSVG_LIBS
GTK_CFLAGS
GTK_LIBS
XFT_CFLAGS
@@ -1313,11 +1317,13 @@ if test -n "$ac_init_help"; then
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-carbon-app[=DIR] [DIR=/Application]
+ --enable-carbon-app[=DIR]
specify install directory for Emacs.app on Mac OS X
+ [DIR=/Application]
--enable-asserts compile code with asserts enabled
- --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
--enable-locallisppath=PATH
directories Emacs should search for lisp files
specific to this site
@@ -1332,17 +1338,20 @@ Optional Packages:
--with-kerberos5 support Kerberos version 5 authenticated POP
--with-hesiod support Hesiod to get the POP server host
--without-sound don't compile with sound support
- --with-x-toolkit=KIT use an X toolkit
- (KIT = yes/lucid/athena/motif/gtk/no)
+ --with-x-toolkit=KIT use an X toolkit (KIT one of: yes, lucid, athena,
+ motif, gtk, no)
--with-xpm use -lXpm for displaying XPM images
--with-jpeg use -ljpeg for displaying JPEG images
--with-tiff use -ltiff for displaying TIFF images
- --with-gif use -lungif for displaying GIF images
+ --with-gif use -lgif (or -lungif) for displaying GIF images
--with-png use -lpng for displaying PNG images
+ --with-gpm use -lgpm for mouse support on a GNU/Linux console
+ --with-rsvg use -lrsvg-2 for displaying SVG images
--with-gtk use GTK (same as --with-x-toolkit=gtk)
- --with-pkg-config-prog Path to pkg-config to use for finding GTK
+ --with-pkg-config-prog Path to pkg-config for finding GTK and librsvg
--without-toolkit-scroll-bars
don't use Motif or Xaw3d scroll bars
+ --without-xaw3d don't use Xaw3d
--without-xim don't use X11 XIM
--without-carbon don't use Carbon GUI on Mac OS X
--with-x use the X Window System
@@ -1812,12 +1821,14 @@ gamedir='${localstatedir}/games/emacs'
gameuser=games
+
# Check whether --with-gcc was given.
if test "${with_gcc+set}" = set; then
withval=$with_gcc;
fi
+
# Check whether --with-pop was given.
if test "${with_pop+set}" = set; then
withval=$with_pop; if test "$withval" = yes; then
@@ -1836,6 +1847,7 @@ fi
+
# Check whether --with-kerberos was given.
if test "${with_kerberos+set}" = set; then
withval=$with_kerberos; if test "$withval" = yes; then
@@ -1848,6 +1860,7 @@ fi
+
# Check whether --with-kerberos5 was given.
if test "${with_kerberos5+set}" = set; then
withval=$with_kerberos5; if test "${with_kerberos5+set}" = set; then
@@ -1867,6 +1880,7 @@ fi
fi
+
# Check whether --with-hesiod was given.
if test "${with_hesiod+set}" = set; then
withval=$with_hesiod; if test "$withval" = yes; then
@@ -1890,19 +1904,19 @@ fi
# Check whether --with-x-toolkit was given.
if test "${with_x_toolkit+set}" = set; then
withval=$with_x_toolkit; case "${withval}" in
- y | ye | yes ) val=athena ;;
+ y | ye | yes ) val=gtk ;;
n | no ) val=no ;;
l | lu | luc | luci | lucid ) val=lucid ;;
a | at | ath | athe | athen | athena ) val=athena ;;
m | mo | mot | moti | motif ) val=motif ;;
g | gt | gtk ) val=gtk ;;
* )
-{ { echo "$as_me:$LINENO: error: \`--with-x-toolkit=$withval' is invalid\;
+{ { echo "$as_me:$LINENO: error: \`--with-x-toolkit=$withval' is invalid;
this option's value should be \`yes', \`no', \`lucid', \`athena', \`motif' or \`gtk'.
-Currently, \`yes', \`athena' and \`lucid' are synonyms." >&5
-echo "$as_me: error: \`--with-x-toolkit=$withval' is invalid\;
+\`yes' and \`gtk' are synonyms. \`athena' and \`lucid' are synonyms." >&5
+echo "$as_me: error: \`--with-x-toolkit=$withval' is invalid;
this option's value should be \`yes', \`no', \`lucid', \`athena', \`motif' or \`gtk'.
-Currently, \`yes', \`athena' and \`lucid' are synonyms." >&2;}
+\`yes' and \`gtk' are synonyms. \`athena' and \`lucid' are synonyms." >&2;}
{ (exit 1); exit 1; }; }
;;
esac
@@ -1911,6 +1925,7 @@ Currently, \`yes', \`athena' and \`lucid' are synonyms." >&2;}
fi
+
# Check whether --with-xpm was given.
if test "${with_xpm+set}" = set; then
withval=$with_xpm;
@@ -1941,6 +1956,18 @@ if test "${with_png+set}" = set; then
fi
+# Check whether --with-gpm was given.
+if test "${with_gpm+set}" = set; then
+ withval=$with_gpm;
+fi
+
+
+# Check whether --with-rsvg was given.
+if test "${with_rsvg+set}" = set; then
+ withval=$with_rsvg;
+fi
+
+
# Check whether --with-gtk was given.
if test "${with_gtk+set}" = set; then
withval=$with_gtk;
@@ -1959,6 +1986,12 @@ if test "${with_toolkit_scroll_bars+set}" = set; then
fi
+# Check whether --with-xaw3d was given.
+if test "${with_xaw3d+set}" = set; then
+ withval=$with_xaw3d;
+fi
+
+
# Check whether --with-xim was given.
if test "${with_xim+set}" = set; then
withval=$with_xim;
@@ -1970,6 +2003,7 @@ if test "${with_carbon+set}" = set; then
withval=$with_carbon;
fi
+
# Check whether --enable-carbon-app was given.
if test "${enable_carbon_app+set}" = set; then
enableval=$enable_carbon_app; carbon_appdir_x=${enableval}
@@ -2169,7 +2203,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
canonical=$host
-configuration=${host_alias-$host}
+configuration=${host_alias-${build_alias-$host}}
@@ -2995,14 +3029,8 @@ _ACEOF
;;
*-sunos5* | *-solaris* )
opsys=sol2-6
-## FIXME: make this into a proper fix that checks the compiler type,
-## rather than relying on path. Or is /usr/ccs/lib/cpp a bad default now?
- if [ "x$CC" = x/opt/SUNWspro/bin/cc ]; then
- ## -Xs prevents spurious whitespace.
- NON_GNU_CPP="/opt/SUNWspro/bin/cc -E -Xs"
- else
- NON_GNU_CPP=/usr/ccs/lib/cpp
- fi
+ emacs_check_sunpro_c=yes
+ NON_GNU_CPP=/usr/ccs/lib/cpp
;;
* ) opsys=bsd4-2 ;;
esac
@@ -4158,6 +4186,72 @@ if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
+## If not using gcc, and on Solaris, and no CPP specified, see if
+## using a Sun compiler, which needs -Xs to prevent whitespace.
+if test x"$GCC" != xyes && test x"$emacs_check_sunpro_c" = xyes && \
+ test x"$CPP" = x; then
+ { echo "$as_me:$LINENO: checking whether we are using a Sun C compiler" >&5
+echo $ECHO_N "checking whether we are using a Sun C compiler... $ECHO_C" >&6; }
+
+if test "${emacs_cv_sunpro_c+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __SUNPRO_C
+fail;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ emacs_cv_sunpro_c=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ emacs_cv_sunpro_c=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+ { echo "$as_me:$LINENO: result: $emacs_cv_sunpro_c" >&5
+echo "${ECHO_T}$emacs_cv_sunpro_c" >&6; }
+
+ if test x"$emacs_cv_sunpro_c" = xyes; then
+ NON_GNU_CPP="$CC -E -Xs"
+ fi
+fi
+
#### Some systems specify a CPP to use unless we are using GCC.
#### Now that we know whether we are using GCC, we can decide whether
#### to use that one.
@@ -4185,7 +4279,6 @@ then
CC="$CC $NON_GCC_TEST_OPTIONS"
fi
-
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -5254,6 +5347,61 @@ fi
+## Need makeinfo >= 4.6 (?) to build the manuals.
+# Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MAKEINFO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $MAKEINFO in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MAKEINFO="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_MAKEINFO" && ac_cv_path_MAKEINFO="no"
+ ;;
+esac
+fi
+MAKEINFO=$ac_cv_path_MAKEINFO
+if test -n "$MAKEINFO"; then
+ { echo "$as_me:$LINENO: result: $MAKEINFO" >&5
+echo "${ECHO_T}$MAKEINFO" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test "$MAKEINFO" != "no" && \
+ test x"`$MAKEINFO --version 2> /dev/null | $EGREP 'texinfo[^0-9]*([1-4][0-9]+|[5-9]|4\.[6-9]|4\.[1-5][0-9]+)'`" = x; then
+ MAKEINFO=no
+fi
+
+if test "$MAKEINFO" = "no"; then
+ { { echo "$as_me:$LINENO: error: makeinfo >= 4.6 is required " >&5
+echo "$as_me: error: makeinfo >= 4.6 is required " >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+
if test x$GCC = xyes && test "x$GCC_LINK_TEST_OPTIONS" != x
then
ac_link="$ac_link $GCC_LINK_TEST_OPTIONS"
@@ -9502,7 +9650,13 @@ case "${window_system}" in
gtk ) with_gtk=yes
USE_X_TOOLKIT=none ;;
no ) USE_X_TOOLKIT=none ;;
- * ) USE_X_TOOLKIT=maybe ;;
+ * )
+ if test x"$with_gtk" = xyes; then
+ USE_X_TOOLKIT=none
+ else
+ USE_X_TOOLKIT=maybe
+ fi
+ ;;
esac
;;
mac | none )
@@ -9512,6 +9666,68 @@ case "${window_system}" in
;;
esac
+if test "$window_system" = none && test "X$with_x" != "Xno"; then
+ # Extract the first word of "X", so it can be a program name with args.
+set dummy X; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_HAVE_XSERVER+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$HAVE_XSERVER"; then
+ ac_cv_prog_HAVE_XSERVER="$HAVE_XSERVER" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_HAVE_XSERVER="true"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_HAVE_XSERVER" && ac_cv_prog_HAVE_XSERVER="false"
+fi
+fi
+HAVE_XSERVER=$ac_cv_prog_HAVE_XSERVER
+if test -n "$HAVE_XSERVER"; then
+ { echo "$as_me:$LINENO: result: $HAVE_XSERVER" >&5
+echo "${ECHO_T}$HAVE_XSERVER" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ if test "$HAVE_XSERVER" = true ||
+ test -n "$DISPLAY" ||
+ test "`echo /usr/lib/libX11.*`" != "/usr/lib/libX11.*"; then
+ { { echo "$as_me:$LINENO: error: You seem to be running X, but no X development libraries
+were found. You should install the relevant development files for X
+and for the toolkit you want, such as Gtk+, Lesstif or Motif. Also make
+sure you have development files for image handling, i.e.
+tiff, gif, jpeg, png and xpm.
+If you are sure you want Emacs compiled without X window support, pass
+ --without-x
+to configure." >&5
+echo "$as_me: error: You seem to be running X, but no X development libraries
+were found. You should install the relevant development files for X
+and for the toolkit you want, such as Gtk+, Lesstif or Motif. Also make
+sure you have development files for image handling, i.e.
+tiff, gif, jpeg, png and xpm.
+If you are sure you want Emacs compiled without X window support, pass
+ --without-x
+to configure." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
### If we're using X11, we should use the X menu package.
HAVE_MENUS=no
case ${HAVE_X11} in
@@ -10863,81 +11079,137 @@ echo "${ECHO_T}before 6" >&6; }
fi
fi
-if test "${window_system}" = "x11"; then
- { echo "$as_me:$LINENO: checking X11 version 5" >&5
-echo $ECHO_N "checking X11 version 5... $ECHO_C" >&6; }
- if test "${emacs_cv_x11_version_5+set}" = set; then
+
+### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
+HAVE_RSVG=no
+if test "${HAVE_X11}" = "yes" || test "${HAVE_CARBON}" = "yes"; then
+ if test "${with_rsvg}" != "no"; then
+ if test "X${with_pkg_config_prog}" != X; then
+ PKG_CONFIG="${with_pkg_config_prog}"
+ fi
+
+ RSVG_REQUIRED=2.0.0
+ RSVG_MODULE="librsvg-2.0 >= $RSVG_REQUIRED"
+
+
+ succeeded=no
+
+ if test -z "$PKG_CONFIG"; then
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <X11/Xlib.h>
-int
-main ()
-{
-#if XlibSpecificationRelease < 5
-fail;
-#endif
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+ ;;
esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- emacs_cv_x11_version_5=yes
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- emacs_cv_x11_version_5=no
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
fi
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
- if test $emacs_cv_x11_version_5 = yes; then
- { echo "$as_me:$LINENO: result: 5 or newer" >&5
-echo "${ECHO_T}5 or newer" >&6; }
- HAVE_X11R5=yes
+ fi
+
+ if test "$PKG_CONFIG" = "no" ; then
+ :
+ else
+ PKG_CONFIG_MIN_VERSION=0.9.0
+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
+ { echo "$as_me:$LINENO: checking for $RSVG_MODULE" >&5
+echo $ECHO_N "checking for $RSVG_MODULE... $ECHO_C" >&6; }
+
+ if $PKG_CONFIG --exists "$RSVG_MODULE" 2>&5; then
+ { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+ succeeded=yes
+
+ { echo "$as_me:$LINENO: checking RSVG_CFLAGS" >&5
+echo $ECHO_N "checking RSVG_CFLAGS... $ECHO_C" >&6; }
+ RSVG_CFLAGS=`$PKG_CONFIG --cflags "$RSVG_MODULE"|sed -e 's,///*,/,g'`
+ { echo "$as_me:$LINENO: result: $RSVG_CFLAGS" >&5
+echo "${ECHO_T}$RSVG_CFLAGS" >&6; }
+
+ { echo "$as_me:$LINENO: checking RSVG_LIBS" >&5
+echo $ECHO_N "checking RSVG_LIBS... $ECHO_C" >&6; }
+ RSVG_LIBS=`$PKG_CONFIG --libs "$RSVG_MODULE"|sed -e 's,///*,/,g'`
+ { echo "$as_me:$LINENO: result: $RSVG_LIBS" >&5
+echo "${ECHO_T}$RSVG_LIBS" >&6; }
+ else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ RSVG_CFLAGS=""
+ RSVG_LIBS=""
+ ## If we have a custom action on failure, don't print errors, but
+ ## do set a variable so people can do so.
+ RSVG_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$RSVG_MODULE"`
+
+ fi
+
+
+
+ else
+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
+ fi
+ fi
+
+ if test $succeeded = yes; then
+ :
+ else
+ :
+ fi
+
+
+
+
+ if test ".${RSVG_CFLAGS}" != "."; then
+ HAVE_RSVG=yes
cat >>confdefs.h <<\_ACEOF
-#define HAVE_X11R5 1
+#define HAVE_RSVG 1
_ACEOF
- else
- HAVE_X11R5=no
- { echo "$as_me:$LINENO: result: before 5" >&5
-echo "${ECHO_T}before 5" >&6; }
+ CFLAGS="$CFLAGS $RSVG_CFLAGS"
+ LIBS="$RSVG_LIBS $LIBS"
+ fi
fi
fi
+
HAVE_GTK=no
if test "${with_gtk}" = "yes" && test "$USE_X_TOOLKIT" = "gtk"; then
USE_X_TOOLKIT=none
fi
-if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk"; then
+if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk" || \
+ test "$USE_X_TOOLKIT" = "maybe"; then
if test "$USE_X_TOOLKIT" != "none" && test "$USE_X_TOOLKIT" != "maybe"; then
{ { echo "$as_me:$LINENO: error: Conflicting options, --with-gtk is incompatible with --with-x-toolkit=${with_x_toolkit}" >&5
echo "$as_me: error: Conflicting options, --with-gtk is incompatible with --with-x-toolkit=${with_x_toolkit}" >&2;}
@@ -10998,11 +11270,7 @@ fi
fi
if test "$PKG_CONFIG" = "no" ; then
- { { echo "$as_me:$LINENO: error:
- *** The pkg-config script could not be found. Make sure it is in your path, or give the full path to pkg-config with the PKG_CONFIG environment variable or --with-pkg-config-prog. Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." >&5
-echo "$as_me: error:
- *** The pkg-config script could not be found. Make sure it is in your path, or give the full path to pkg-config with the PKG_CONFIG environment variable or --with-pkg-config-prog. Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." >&2;}
- { (exit 1); exit 1; }; }
+ pkg_check_gtk=no
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
@@ -11033,7 +11301,7 @@ echo "${ECHO_T}no" >&6; }
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$GTK_MODULES"`
- echo $GTK_PKG_ERRORS
+
fi
@@ -11045,12 +11313,20 @@ echo "${ECHO_T}no" >&6; }
fi
if test $succeeded = yes; then
- :
+ pkg_check_gtk=yes
else
- { { echo "$as_me:$LINENO: error: Library requirements ($GTK_MODULES) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
-echo "$as_me: error: Library requirements ($GTK_MODULES) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
+ pkg_check_gtk=no
+ fi
+
+ if test "$pkg_check_gtk" = "no" && test "$USE_X_TOOLKIT" != "maybe"; then
+ { { echo "$as_me:$LINENO: error: $GTK_PKG_ERRORS" >&5
+echo "$as_me: error: $GTK_PKG_ERRORS" >&2;}
{ (exit 1); exit 1; }; }
fi
+fi
+
+
+if test x"$pkg_check_gtk" = xyes; then
@@ -11153,18 +11429,25 @@ fi
done
if test "${GTK_COMPILES}" != "yes"; then
- { { echo "$as_me:$LINENO: error: Gtk+ wanted, but it does not compile, see config.log. Maybe some x11-devel files missing?" >&5
+ if test "$USE_X_TOOLKIT" != "maybe"; then
+ { { echo "$as_me:$LINENO: error: Gtk+ wanted, but it does not compile, see config.log. Maybe some x11-devel files missing?" >&5
echo "$as_me: error: Gtk+ wanted, but it does not compile, see config.log. Maybe some x11-devel files missing?" >&2;}
{ (exit 1); exit 1; }; };
- fi
-
- HAVE_GTK=yes
+ fi
+ else
+ HAVE_GTK=yes
cat >>confdefs.h <<\_ACEOF
#define HAVE_GTK 1
_ACEOF
- USE_X_TOOLKIT=none
+ USE_X_TOOLKIT=none
+ fi
+
+fi
+
+
+if test "${HAVE_GTK}" = "yes"; then
if test "$with_toolkit_scroll_bars" != no; then
with_toolkit_scroll_bars=yes
@@ -11272,6 +11555,7 @@ cat >>confdefs.h <<\_ACEOF
_ACEOF
fi
+
HAVE_GTK_FILE_SELECTION=no
for ac_func in gtk_file_selection_new
@@ -12017,11 +12301,80 @@ _ACEOF
fi
fi
+HAVE_XAW3D=no
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
- if test x"${HAVE_X11R5}" = xyes; then
- { echo "$as_me:$LINENO: checking X11 version 5 with Xaw" >&5
-echo $ECHO_N "checking X11 version 5 with Xaw... $ECHO_C" >&6; }
- if test "${emacs_cv_x11_version_5_with_xaw+set}" = set; then
+ if test "$with_xaw3d" != no; then
+ { echo "$as_me:$LINENO: checking for xaw3d" >&5
+echo $ECHO_N "checking for xaw3d... $ECHO_C" >&6; }
+ if test "${emacs_cv_xaw3d+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <X11/Intrinsic.h>
+#include <X11/Xaw3d/Simple.h>
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ emacs_cv_xaw3d=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ emacs_cv_xaw3d=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+ else
+ emacs_cv_xaw3d=no
+ fi
+ if test $emacs_cv_xaw3d = yes; then
+ { echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
+echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
+ USE_X_TOOLKIT=LUCID
+ HAVE_XAW3D=yes
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_XAW3D 1
+_ACEOF
+
+ else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+ { echo "$as_me:$LINENO: checking for libXaw" >&5
+echo $ECHO_N "checking for libXaw... $ECHO_C" >&6; }
+ if test "${emacs_cv_xaw+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -12059,35 +12412,31 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
test ! -s conftest.err
} && test -s conftest$ac_exeext &&
$as_test_x conftest$ac_exeext; then
- emacs_cv_x11_version_5_with_xaw=yes
+ emacs_cv_xaw=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- emacs_cv_x11_version_5_with_xaw=no
+ emacs_cv_xaw=no
fi
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
fi
- if test $emacs_cv_x11_version_5_with_xaw = yes; then
- { echo "$as_me:$LINENO: result: 5 or newer, with Xaw; use toolkit by default" >&5
-echo "${ECHO_T}5 or newer, with Xaw; use toolkit by default" >&6; }
+ if test $emacs_cv_xaw = yes; then
+ { echo "$as_me:$LINENO: result: yes; using Lucid toolkit" >&5
+echo "${ECHO_T}yes; using Lucid toolkit" >&6; }
USE_X_TOOLKIT=LUCID
- else
- if test x"${USE_X_TOOLKIT}" = xLUCID; then
- { { echo "$as_me:$LINENO: error: Lucid toolkit requires X11/Xaw include files" >&5
+ elif test x"${USE_X_TOOLKIT}" = xLUCID; then
+ { { echo "$as_me:$LINENO: error: Lucid toolkit requires X11/Xaw include files" >&5
echo "$as_me: error: Lucid toolkit requires X11/Xaw include files" >&2;}
{ (exit 1); exit 1; }; }
- else
- { echo "$as_me:$LINENO: result: before 5 or no Xaw; do not use toolkit by default" >&5
-echo "${ECHO_T}before 5 or no Xaw; do not use toolkit by default" >&6; }
- USE_X_TOOLKIT=none
- fi
+ else
+ { echo "$as_me:$LINENO: result: no; do not use toolkit by default" >&5
+echo "${ECHO_T}no; do not use toolkit by default" >&6; }
+ USE_X_TOOLKIT=none
fi
- else
- USE_X_TOOLKIT=none
fi
fi
@@ -12524,130 +12873,6 @@ echo "${ECHO_T}$emacs_cv_lesstif" >&6; }
fi
fi
-### Is -lXaw3d available?
-HAVE_XAW3D=no
-if test "${HAVE_X11}" = "yes"; then
- if test "${USE_X_TOOLKIT}" != "none" && test "${with_toolkit_scroll_bars}" != "no"; then
- { echo "$as_me:$LINENO: checking for X11/Xaw3d/Scrollbar.h" >&5
-echo $ECHO_N "checking for X11/Xaw3d/Scrollbar.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_X11_Xaw3d_Scrollbar_h+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <X11/Xaw3d/Scrollbar.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_cv_header_X11_Xaw3d_Scrollbar_h=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_X11_Xaw3d_Scrollbar_h=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_X11_Xaw3d_Scrollbar_h" >&5
-echo "${ECHO_T}$ac_cv_header_X11_Xaw3d_Scrollbar_h" >&6; }
-if test $ac_cv_header_X11_Xaw3d_Scrollbar_h = yes; then
- { echo "$as_me:$LINENO: checking for XawScrollbarSetThumb in -lXaw3d" >&5
-echo $ECHO_N "checking for XawScrollbarSetThumb in -lXaw3d... $ECHO_C" >&6; }
-if test "${ac_cv_lib_Xaw3d_XawScrollbarSetThumb+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXaw3d $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XawScrollbarSetThumb ();
-int
-main ()
-{
-return XawScrollbarSetThumb ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_Xaw3d_XawScrollbarSetThumb=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_Xaw3d_XawScrollbarSetThumb=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_Xaw3d_XawScrollbarSetThumb" >&5
-echo "${ECHO_T}$ac_cv_lib_Xaw3d_XawScrollbarSetThumb" >&6; }
-if test $ac_cv_lib_Xaw3d_XawScrollbarSetThumb = yes; then
- HAVE_XAW3D=yes
-fi
-
-fi
-
-
- if test "${HAVE_XAW3D}" = "yes"; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_XAW3D 1
-_ACEOF
-
- fi
- fi
-fi
-
USE_TOOLKIT_SCROLL_BARS=no
@@ -13727,11 +13952,10 @@ _ACEOF
fi
fi
-### Use -lgif if available, unless `--with-gif=no'.
+### Use -lgif or -lungif if available, unless `--with-gif=no'.
HAVE_GIF=no
-if test "${HAVE_X11}" = "yes"; then
- if test "${with_gif}" != "no"; then
- if test "${ac_cv_header_gif_lib_h+set}" = set; then
+if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no"; then
+ if test "${ac_cv_header_gif_lib_h+set}" = set; then
{ echo "$as_me:$LINENO: checking for gif_lib.h" >&5
echo $ECHO_N "checking for gif_lib.h... $ECHO_C" >&6; }
if test "${ac_cv_header_gif_lib_h+set}" = set; then
@@ -13859,7 +14083,84 @@ fi
if test $ac_cv_header_gif_lib_h = yes; then
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
# Earlier versions can crash Emacs.
- { echo "$as_me:$LINENO: checking for EGifPutExtensionLast in -lungif" >&5
+ { echo "$as_me:$LINENO: checking for EGifPutExtensionLast in -lgif" >&5
+echo $ECHO_N "checking for EGifPutExtensionLast in -lgif... $ECHO_C" >&6; }
+if test "${ac_cv_lib_gif_EGifPutExtensionLast+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgif $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char EGifPutExtensionLast ();
+int
+main ()
+{
+return EGifPutExtensionLast ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_lib_gif_EGifPutExtensionLast=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_gif_EGifPutExtensionLast=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_gif_EGifPutExtensionLast" >&5
+echo "${ECHO_T}$ac_cv_lib_gif_EGifPutExtensionLast" >&6; }
+if test $ac_cv_lib_gif_EGifPutExtensionLast = yes; then
+ HAVE_GIF=yes
+else
+ try_libungif=yes
+fi
+
+fi
+
+
+
+ if test "$HAVE_GIF" = yes; then
+ ac_gif_lib_name="-lgif"
+ fi
+
+# If gif_lib.h but no libgif, try libungif.
+ if test x"$try_libungif" = xyes; then
+ { echo "$as_me:$LINENO: checking for EGifPutExtensionLast in -lungif" >&5
echo $ECHO_N "checking for EGifPutExtensionLast in -lungif... $ECHO_C" >&6; }
if test "${ac_cv_lib_ungif_EGifPutExtensionLast+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -13924,9 +14225,15 @@ if test $ac_cv_lib_ungif_EGifPutExtensionLast = yes; then
HAVE_GIF=yes
fi
-fi
+ if test "$HAVE_GIF" = yes; then
+cat >>confdefs.h <<\_ACEOF
+#define LIBGIF -lungif
+_ACEOF
+
+ ac_gif_lib_name="-lungif"
+ fi
fi
if test "${HAVE_GIF}" = "yes"; then
@@ -13938,6 +14245,244 @@ _ACEOF
fi
fi
+if test "${HAVE_X11}" = "yes"; then
+ MISSING=""
+ WITH_NO=""
+ test "${with_xpm}" != "no" && test "${HAVE_XPM}" != "yes" &&
+ MISSING="libXpm" && WITH_NO="--with-xpm=no"
+ test "${with_jpeg}" != "no" && test "${HAVE_JPEG}" != "yes" &&
+ MISSING="$MISSING libjpeg" && WITH_NO="$WITH_NO --with-jpeg=no"
+ test "${with_png}" != "no" && test "${HAVE_PNG}" != "yes" &&
+ MISSING="$MISSING libpng" && WITH_NO="$WITH_NO --with-png=no"
+ test "${with_gif}" != "no" && test "${HAVE_GIF}" != "yes" &&
+ MISSING="$MISSING libgif/libungif" && WITH_NO="$WITH_NO --with-gif=no"
+ test "${with_tiff}" != "no" && test "${HAVE_TIFF}" != "yes" &&
+ MISSING="$MISSING libtiff" && WITH_NO="$WITH_NO --with-tiff=no"
+
+ if test "X${MISSING}" != X; then
+ { { echo "$as_me:$LINENO: error: The following required libraries were not found:
+ $MISSING
+Maybe some development libraries/packages are missing?
+If you don't want to link with them give
+ $WITH_NO
+as options to configure" >&5
+echo "$as_me: error: The following required libraries were not found:
+ $MISSING
+Maybe some development libraries/packages are missing?
+If you don't want to link with them give
+ $WITH_NO
+as options to configure" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+fi
+
+### Use -lgpm if available, unless `--with-gpm=no'.
+HAVE_GPM=no
+if test "${with_gpm}" != "no"; then
+ if test "${ac_cv_header_gpm_h+set}" = set; then
+ { echo "$as_me:$LINENO: checking for gpm.h" >&5
+echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_gpm_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_gpm_h" >&5
+echo "${ECHO_T}$ac_cv_header_gpm_h" >&6; }
+else
+ # Is the header compilable?
+{ echo "$as_me:$LINENO: checking gpm.h usability" >&5
+echo $ECHO_N "checking gpm.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <gpm.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking gpm.h presence" >&5
+echo $ECHO_N "checking gpm.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <gpm.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: gpm.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: gpm.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gpm.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: gpm.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: gpm.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: gpm.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gpm.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: gpm.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gpm.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: gpm.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gpm.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: gpm.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gpm.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: gpm.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: gpm.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: gpm.h: in the future, the compiler will take precedence" >&2;}
+
+ ;;
+esac
+{ echo "$as_me:$LINENO: checking for gpm.h" >&5
+echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_gpm_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_gpm_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_gpm_h" >&5
+echo "${ECHO_T}$ac_cv_header_gpm_h" >&6; }
+
+fi
+if test $ac_cv_header_gpm_h = yes; then
+ { echo "$as_me:$LINENO: checking for Gpm_Open in -lgpm" >&5
+echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6; }
+if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgpm $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char Gpm_Open ();
+int
+main ()
+{
+return Gpm_Open ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_lib_gpm_Gpm_Open=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_gpm_Gpm_Open=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_gpm_Gpm_Open" >&5
+echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6; }
+if test $ac_cv_lib_gpm_Gpm_Open = yes; then
+ HAVE_GPM=yes
+fi
+
+fi
+
+
+fi
+
+if test "${HAVE_GPM}" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GPM 1
+_ACEOF
+
+fi
+
if test "${ac_cv_header_malloc_malloc_h+set}" = set; then
{ echo "$as_me:$LINENO: checking for malloc/malloc.h" >&5
echo $ECHO_N "checking for malloc/malloc.h... $ECHO_C" >&6; }
@@ -14723,6 +15268,12 @@ _ACEOF
fi
+if test x"$ac_cv_func_alloca_works" != xyes; then
+ { { echo "$as_me:$LINENO: error: a system implementation of alloca is required " >&5
+echo "$as_me: error: a system implementation of alloca is required " >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
# fmod, logb, and frexp are found in -lm on most systems.
# On HPUX 9.01, -lm does not contain logb, so check for sqrt.
@@ -15298,10 +15849,9 @@ done
-
for ac_func in gethostname getdomainname dup2 \
rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \
-random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime res_init setsid \
+random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime setsid \
strerror fpathconf select mktime euidaccess getpagesize tzset setlocale \
utimes setrlimit setpgid getcwd getwd shutdown getaddrinfo \
__fpending mblen mbrlen mbsinit strsignal setitimer ualarm index rindex \
@@ -18985,10 +19535,123 @@ _ACEOF
fi
+# Do we have res_init, for detecting changes in /etc/resolv.conf?
+
+resolv=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+int
+main ()
+{
+return res_init();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ have_res_init=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ have_res_init=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+if test "$have_res_init" = no; then
+ OLIBS="$LIBS"
+ LIBS="$LIBS -lresolv"
+ { echo "$as_me:$LINENO: checking for res_init with -lresolv" >&5
+echo $ECHO_N "checking for res_init with -lresolv... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+int
+main ()
+{
+return res_init();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ have_res_init=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ have_res_init=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ { echo "$as_me:$LINENO: result: $have_res_init" >&5
+echo "${ECHO_T}$have_res_init" >&6; }
+ if test "$have_res_init" = yes ; then
+ resolv=yes
+ fi
+ LIBS="$OLIBS"
+fi
+
+if test "$have_res_init" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_RES_INIT 1
+_ACEOF
+
+fi
+
# Do we need the Hesiod library to provide the support routines?
if test "$with_hesiod" = yes ; then
# Don't set $LIBS here -- see comments above.
- resolv=no
{ echo "$as_me:$LINENO: checking for res_send" >&5
echo $ECHO_N "checking for res_send... $ECHO_C" >&6; }
if test "${ac_cv_func_res_send+set}" = set; then
@@ -19294,11 +19957,6 @@ fi
if test "$resolv" = yes ; then
RESOLVLIB=-lresolv
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LIBRESOLV 1
-_ACEOF
-
else
RESOLVLIB=
fi
@@ -19461,6 +20119,15 @@ fi
fi
+# Do we need libresolv (due to res_init or Hesiod)?
+if test "$resolv" = yes ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBRESOLV 1
+_ACEOF
+
+fi
+
# These tell us which Kerberos-related libraries to use.
if test "${with_kerberos+set}" = set; then
@@ -23070,6 +23737,7 @@ fi
+
#### Report on what we decided to do.
#### Report GTK as a toolkit, even if it doesn't use Xt.
#### It makes printing result more understandable as using GTK sets
@@ -23106,8 +23774,10 @@ echo " Does Emacs use -lXaw3d? ${HAVE_XAW3D}"
echo " Does Emacs use -lXpm? ${HAVE_XPM}"
echo " Does Emacs use -ljpeg? ${HAVE_JPEG}"
echo " Does Emacs use -ltiff? ${HAVE_TIFF}"
-echo " Does Emacs use -lungif? ${HAVE_GIF}"
+echo " Does Emacs use a gif library? ${HAVE_GIF} $ac_gif_lib_name"
echo " Does Emacs use -lpng? ${HAVE_PNG}"
+echo " Does Emacs use -lrsvg-2? ${HAVE_RSVG}"
+echo " Does Emacs use -lgpm? ${HAVE_GPM}"
echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"
echo
@@ -23128,6 +23798,14 @@ if test "$USE_X_TOOLKIT" = GTK; then
fi
+if test "$HAVE_CARBON" = "yes"; then
+ echo
+ echo "Warning: The Mac Carbon port is currently unsupported and has
+known problems. It is not recommended for use by non-developers.
+Read the emacs-devel archives for more information."
+ echo
+fi
+
# Remove any trailing slashes in these variables.
test "${prefix}" != NONE &&
@@ -23157,7 +23835,7 @@ fi
rm -f conftest*
-ac_config_files="$ac_config_files Makefile lib-src/Makefile.c:lib-src/Makefile.in oldXMenu/Makefile man/Makefile lwlib/Makefile src/Makefile.c:src/Makefile.in lisp/Makefile lispref/Makefile lispintro/Makefile leim/Makefile"
+ac_config_files="$ac_config_files Makefile lib-src/Makefile.c:lib-src/Makefile.in oldXMenu/Makefile doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile doc/lispref/Makefile src/Makefile.c:src/Makefile.in lwlib/Makefile lisp/Makefile leim/Makefile"
ac_config_commands="$ac_config_commands default"
@@ -23727,12 +24405,13 @@ do
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"lib-src/Makefile.c") CONFIG_FILES="$CONFIG_FILES lib-src/Makefile.c:lib-src/Makefile.in" ;;
"oldXMenu/Makefile") CONFIG_FILES="$CONFIG_FILES oldXMenu/Makefile" ;;
- "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
- "lwlib/Makefile") CONFIG_FILES="$CONFIG_FILES lwlib/Makefile" ;;
+ "doc/emacs/Makefile") CONFIG_FILES="$CONFIG_FILES doc/emacs/Makefile" ;;
+ "doc/misc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/misc/Makefile" ;;
+ "doc/lispintro/Makefile") CONFIG_FILES="$CONFIG_FILES doc/lispintro/Makefile" ;;
+ "doc/lispref/Makefile") CONFIG_FILES="$CONFIG_FILES doc/lispref/Makefile" ;;
"src/Makefile.c") CONFIG_FILES="$CONFIG_FILES src/Makefile.c:src/Makefile.in" ;;
+ "lwlib/Makefile") CONFIG_FILES="$CONFIG_FILES lwlib/Makefile" ;;
"lisp/Makefile") CONFIG_FILES="$CONFIG_FILES lisp/Makefile" ;;
- "lispref/Makefile") CONFIG_FILES="$CONFIG_FILES lispref/Makefile" ;;
- "lispintro/Makefile") CONFIG_FILES="$CONFIG_FILES lispintro/Makefile" ;;
"leim/Makefile") CONFIG_FILES="$CONFIG_FILES leim/Makefile" ;;
"default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
@@ -23860,6 +24539,7 @@ INSTALL_DATA!$INSTALL_DATA$ac_delim
RANLIB!$RANLIB$ac_delim
INSTALL_INFO!$INSTALL_INFO$ac_delim
GZIP_PROG!$GZIP_PROG$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
LIBSOUND!$LIBSOUND$ac_delim
PKG_CONFIG!$PKG_CONFIG$ac_delim
ALSA_CFLAGS!$ALSA_CFLAGS$ac_delim
@@ -23867,6 +24547,9 @@ ALSA_LIBS!$ALSA_LIBS$ac_delim
CFLAGS_SOUND!$CFLAGS_SOUND$ac_delim
SET_MAKE!$SET_MAKE$ac_delim
XMKMF!$XMKMF$ac_delim
+HAVE_XSERVER!$HAVE_XSERVER$ac_delim
+RSVG_CFLAGS!$RSVG_CFLAGS$ac_delim
+RSVG_LIBS!$RSVG_LIBS$ac_delim
GTK_CFLAGS!$GTK_CFLAGS$ac_delim
GTK_LIBS!$GTK_LIBS$ac_delim
XFT_CFLAGS!$XFT_CFLAGS$ac_delim
@@ -23890,10 +24573,6 @@ x_default_search_path!$x_default_search_path$ac_delim
etcdir!$etcdir$ac_delim
archlibdir!$archlibdir$ac_delim
bitmapdir!$bitmapdir$ac_delim
-gamedir!$gamedir$ac_delim
-gameuser!$gameuser$ac_delim
-c_switch_system!$c_switch_system$ac_delim
-c_switch_machine!$c_switch_machine$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -23935,6 +24614,10 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
+gamedir!$gamedir$ac_delim
+gameuser!$gameuser$ac_delim
+c_switch_system!$c_switch_system$ac_delim
+c_switch_machine!$c_switch_machine$ac_delim
LD_SWITCH_X_SITE!$LD_SWITCH_X_SITE$ac_delim
LD_SWITCH_X_SITE_AUX!$LD_SWITCH_X_SITE_AUX$ac_delim
C_SWITCH_X_SITE!$C_SWITCH_X_SITE$ac_delim
@@ -23945,7 +24628,7 @@ carbon_appdir!$carbon_appdir$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 8; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 12; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/configure.in b/configure.in
index 315c033aeaa..930129bfdaf 100644
--- a/configure.in
+++ b/configure.in
@@ -3,8 +3,8 @@ dnl To rebuild the `configure' script from this, execute the command
dnl autoconf
dnl in the directory containing this script.
dnl
-dnl Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-dnl Free Software Foundation, Inc.
+dnl Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003,
+dnl 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
dnl
dnl This file is part of GNU Emacs.
dnl
@@ -42,25 +42,33 @@ gamedir='${localstatedir}/games/emacs'
gameuser=games
-AC_ARG_WITH(gcc,
-[ --without-gcc don't use GCC to compile Emacs if GCC is found])
-AC_ARG_WITH(pop,
-[ --without-pop don't support POP mail retrieval with movemail],
+dnl Autoconf is so much less fun under VMS, maybe
+dnl because everything is less fun under VMS. --ttn
+AC_DEFUN([EMACS_ARG_Y],[dnl
+AC_ARG_WITH([$1],[AS_HELP_STRING([--with-$1],[$2])],[$3],[$4])dnl
+])dnl
+AC_DEFUN([EMACS_ARG_N],[dnl
+AC_ARG_WITH([$1],[AS_HELP_STRING([--without-$1],[$2])],[$3],[$4])dnl
+])dnl
+
+EMACS_ARG_N([gcc],[don't use GCC to compile Emacs if GCC is found])
+
+EMACS_ARG_N([pop],[don't support POP mail retrieval with movemail],
[if test "$withval" = yes; then
AC_DEFINE(MAIL_USE_POP)
else :
fi],
AC_DEFINE(MAIL_USE_POP))
AH_TEMPLATE(MAIL_USE_POP, [Define to support POP mail retrieval.])dnl
-AC_ARG_WITH(kerberos,
-[ --with-kerberos support Kerberos-authenticated POP],
+
+EMACS_ARG_Y([kerberos],[support Kerberos-authenticated POP],
[if test "$withval" = yes; then
AC_DEFINE(KERBEROS)
fi])
AH_TEMPLATE(KERBEROS,
[Define to support Kerberos-authenticated POP mail retrieval.])dnl
-AC_ARG_WITH(kerberos5,
-[ --with-kerberos5 support Kerberos version 5 authenticated POP],
+
+EMACS_ARG_Y([kerberos5],[support Kerberos version 5 authenticated POP],
[if test "${with_kerberos5+set}" = set; then
if test "${with_kerberos+set}" != set; then
with_kerberos=yes
@@ -68,75 +76,64 @@ AC_ARG_WITH(kerberos5,
fi
AC_DEFINE(KERBEROS5, 1, [Define to use Kerberos 5 instead of Kerberos 4.])
fi])
-AC_ARG_WITH(hesiod,
-[ --with-hesiod support Hesiod to get the POP server host],
+
+EMACS_ARG_Y([hesiod],[support Hesiod to get the POP server host],
[if test "$withval" = yes; then
AC_DEFINE(HESIOD, 1, [Define to support using a Hesiod database to find the POP server.])
fi])
-AC_ARG_WITH(sound,
-[ --without-sound don't compile with sound support])
+EMACS_ARG_N([sound],[don't compile with sound support])
dnl This should be the last --with option, because --with-x is
dnl added later on when we find the path of X, and it's best to
dnl keep them together visually.
-AC_ARG_WITH(x-toolkit,
-[ --with-x-toolkit=KIT use an X toolkit
- (KIT = yes/lucid/athena/motif/gtk/no)],
+AC_ARG_WITH([x-toolkit],[AS_HELP_STRING([--with-x-toolkit=KIT],
+ [use an X toolkit (KIT one of: yes, lucid, athena, motif, gtk, no)])],
[ case "${withval}" in
- y | ye | yes ) val=athena ;;
+ y | ye | yes ) val=gtk ;;
n | no ) val=no ;;
l | lu | luc | luci | lucid ) val=lucid ;;
a | at | ath | athe | athen | athena ) val=athena ;;
m | mo | mot | moti | motif ) val=motif ;;
g | gt | gtk ) val=gtk ;;
-dnl These don't currently work.
-dnl o | op | ope | open | open- | open-l | open-lo \
-dnl | open-loo | open-look ) val=open-look ;;
* )
-dnl AC_MSG_ERROR([the `--with-x-toolkit' option is supposed to have a value
-dnl which is `yes', `no', `lucid', `athena', `motif' or `open-look'.])
-AC_MSG_ERROR([`--with-x-toolkit=$withval' is invalid\;
+AC_MSG_ERROR([`--with-x-toolkit=$withval' is invalid;
this option's value should be `yes', `no', `lucid', `athena', `motif' or `gtk'.
-Currently, `yes', `athena' and `lucid' are synonyms.])
+`yes' and `gtk' are synonyms. `athena' and `lucid' are synonyms.])
;;
esac
with_x_toolkit=$val
])
-AC_ARG_WITH(xpm,
-[ --with-xpm use -lXpm for displaying XPM images])
-AC_ARG_WITH(jpeg,
-[ --with-jpeg use -ljpeg for displaying JPEG images])
-AC_ARG_WITH(tiff,
-[ --with-tiff use -ltiff for displaying TIFF images])
-AC_ARG_WITH(gif,
-[ --with-gif use -lungif for displaying GIF images])
-AC_ARG_WITH(png,
-[ --with-png use -lpng for displaying PNG images])
-AC_ARG_WITH(gtk,
-[ --with-gtk use GTK (same as --with-x-toolkit=gtk)])
-AC_ARG_WITH(pkg-config-prog,
-[ --with-pkg-config-prog Path to pkg-config to use for finding GTK])
-AC_ARG_WITH(toolkit-scroll-bars,
-[ --without-toolkit-scroll-bars
- don't use Motif or Xaw3d scroll bars])
-AC_ARG_WITH(xim,
-[ --without-xim don't use X11 XIM])
-AC_ARG_WITH(carbon,
-[ --without-carbon don't use Carbon GUI on Mac OS X])
+
+EMACS_ARG_Y([xpm],[use -lXpm for displaying XPM images])
+EMACS_ARG_Y([jpeg],[use -ljpeg for displaying JPEG images])
+EMACS_ARG_Y([tiff],[use -ltiff for displaying TIFF images])
+EMACS_ARG_Y([gif],[use -lgif (or -lungif) for displaying GIF images])
+EMACS_ARG_Y([png],[use -lpng for displaying PNG images])
+EMACS_ARG_Y([gpm],[use -lgpm for mouse support on a GNU/Linux console])
+EMACS_ARG_Y([rsvg],[use -lrsvg-2 for displaying SVG images])
+EMACS_ARG_Y([gtk],[use GTK (same as --with-x-toolkit=gtk)])
+EMACS_ARG_Y([pkg-config-prog],[Path to pkg-config for finding GTK and librsvg])
+EMACS_ARG_N([toolkit-scroll-bars],[don't use Motif or Xaw3d scroll bars])
+EMACS_ARG_N([xaw3d],[don't use Xaw3d])
+EMACS_ARG_N([xim],[don't use X11 XIM])
+EMACS_ARG_N([carbon],[don't use Carbon GUI on Mac OS X])
+
AC_ARG_ENABLE(carbon-app,
-[[ --enable-carbon-app[=DIR] [DIR=/Application]
- specify install directory for Emacs.app on Mac OS X]],
+[AS_HELP_STRING([--enable-carbon-app@<:@=DIR@:>@],
+ [specify install directory for Emacs.app on Mac OS X
+ [DIR=/Application]])],
[ carbon_appdir_x=${enableval}])
AC_ARG_ENABLE(asserts,
-[ --enable-asserts compile code with asserts enabled],
+[AS_HELP_STRING([--enable-asserts], [compile code with asserts enabled])],
USE_XASSERTS=$enableval,
USE_XASSERTS=no)
AC_ARG_ENABLE(maintainer-mode,
-[ --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer],
+[AS_HELP_STRING([--enable-maintainer-mode],
+ [enable make rules and dependencies not useful (and sometimes
+ confusing) to the casual installer])],
USE_MAINTAINER_MODE=$enableval,
USE_MAINTAINER_MODE=no)
if test $USE_MAINTAINER_MODE = yes; then
@@ -147,9 +144,9 @@ fi
AC_SUBST(MAINT)
AC_ARG_ENABLE(locallisppath,
-[ --enable-locallisppath=PATH
- directories Emacs should search for lisp files
- specific to this site],
+[AS_HELP_STRING([--enable-locallisppath=PATH],
+ [directories Emacs should search for lisp files specific
+ to this site])],
if test "${enableval}" = "no"; then
locallisppath=
elif test "${enableval}" != "yes"; then
@@ -198,7 +195,7 @@ fi
AC_CANONICAL_HOST
canonical=$host
-configuration=${host_alias-$host}
+configuration=${host_alias-${build_alias-$host}}
dnl This used to use changequote, but, apart from `changequote is evil'
dnl per the autoconf manual, we can speed up autoconf somewhat by quoting
@@ -1030,14 +1027,8 @@ dnl see the `changequote' comment above.
;;
*-sunos5* | *-solaris* )
opsys=sol2-6
-## FIXME: make this into a proper fix that checks the compiler type,
-## rather than relying on path. Or is /usr/ccs/lib/cpp a bad default now?
- if [ "x$CC" = x/opt/SUNWspro/bin/cc ]; then
- ## -Xs prevents spurious whitespace.
- NON_GNU_CPP="/opt/SUNWspro/bin/cc -E -Xs"
- else
- NON_GNU_CPP=/usr/ccs/lib/cpp
- fi
+ emacs_check_sunpro_c=yes
+ NON_GNU_CPP=/usr/ccs/lib/cpp
;;
* ) opsys=bsd4-2 ;;
esac
@@ -1273,6 +1264,24 @@ if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
+## If not using gcc, and on Solaris, and no CPP specified, see if
+## using a Sun compiler, which needs -Xs to prevent whitespace.
+if test x"$GCC" != xyes && test x"$emacs_check_sunpro_c" = xyes && \
+ test x"$CPP" = x; then
+ AC_MSG_CHECKING([whether we are using a Sun C compiler])
+ AC_CACHE_VAL(emacs_cv_sunpro_c,
+ [AC_TRY_LINK([],
+[#ifndef __SUNPRO_C
+fail;
+#endif
+], emacs_cv_sunpro_c=yes, emacs_cv_sunpro_c=no)])
+ AC_MSG_RESULT($emacs_cv_sunpro_c)
+
+ if test x"$emacs_cv_sunpro_c" = xyes; then
+ NON_GNU_CPP="$CC -E -Xs"
+ fi
+fi
+
#### Some systems specify a CPP to use unless we are using GCC.
#### Now that we know whether we are using GCC, we can decide whether
#### to use that one.
@@ -1332,6 +1341,21 @@ AC_PATH_PROG(INSTALL_INFO, install-info,:, /sbin)
dnl Don't use GZIP, which is used by gzip for additional parameters.
AC_PATH_PROG(GZIP_PROG, gzip)
+
+## Need makeinfo >= 4.6 (?) to build the manuals.
+AC_PATH_PROG(MAKEINFO, makeinfo, no)
+dnl By this stage, configure has already checked for egrep and set EGREP,
+dnl or exited with an error if no egrep was found.
+if test "$MAKEINFO" != "no" && \
+ test x"`$MAKEINFO --version 2> /dev/null | $EGREP 'texinfo[[^0-9]]*([[1-4]][[0-9]]+|[[5-9]]|4\.[[6-9]]|4\.[[1-5]][[0-9]]+)'`" = x; then
+ MAKEINFO=no
+fi
+
+if test "$MAKEINFO" = "no"; then
+ AC_MSG_ERROR( [makeinfo >= 4.6 is required] )
+fi
+
+
dnl Add our options to ac_link now, after it is set up.
if test x$GCC = xyes && test "x$GCC_LINK_TEST_OPTIONS" != x
@@ -1860,15 +1884,20 @@ case "${window_system}" in
case "${with_x_toolkit}" in
athena | lucid ) USE_X_TOOLKIT=LUCID ;;
motif ) USE_X_TOOLKIT=MOTIF ;;
-dnl open-look ) USE_X_TOOLKIT=OPEN_LOOK ;;
gtk ) with_gtk=yes
dnl Dont set this for GTK. A lot of tests below assumes Xt when
dnl USE_X_TOOLKIT is set.
USE_X_TOOLKIT=none ;;
no ) USE_X_TOOLKIT=none ;;
-dnl If user did not say whether to use a toolkit,
-dnl make this decision later: use the toolkit if we have X11R5 or newer.
- * ) USE_X_TOOLKIT=maybe ;;
+dnl If user did not say whether to use a toolkit, make this decision later:
+dnl use the toolkit if we have gtk, or X11R5 or newer.
+ * )
+ if test x"$with_gtk" = xyes; then
+ USE_X_TOOLKIT=none
+ else
+ USE_X_TOOLKIT=maybe
+ fi
+ ;;
esac
;;
mac | none )
@@ -1878,6 +1907,22 @@ dnl make this decision later: use the toolkit if we have X11R5 or newer.
;;
esac
+if test "$window_system" = none && test "X$with_x" != "Xno"; then
+ AC_CHECK_PROG(HAVE_XSERVER, X, true, false)
+ if test "$HAVE_XSERVER" = true ||
+ test -n "$DISPLAY" ||
+ test "`echo /usr/lib/libX11.*`" != "/usr/lib/libX11.*"; then
+ AC_MSG_ERROR([You seem to be running X, but no X development libraries
+were found. You should install the relevant development files for X
+and for the toolkit you want, such as Gtk+, Lesstif or Motif. Also make
+sure you have development files for image handling, i.e.
+tiff, gif, jpeg, png and xpm.
+If you are sure you want Emacs compiled without X window support, pass
+ --without-x
+to configure.])
+ fi
+fi
+
### If we're using X11, we should use the X menu package.
HAVE_MENUS=no
case ${HAVE_X11} in
@@ -2073,30 +2118,39 @@ fail;
fi
fi
-if test "${window_system}" = "x11"; then
- AC_MSG_CHECKING(X11 version 5)
- AC_CACHE_VAL(emacs_cv_x11_version_5,
- [AC_TRY_LINK([#include <X11/Xlib.h>],
-[#if XlibSpecificationRelease < 5
-fail;
-#endif
-], emacs_cv_x11_version_5=yes, emacs_cv_x11_version_5=no)])
- if test $emacs_cv_x11_version_5 = yes; then
- AC_MSG_RESULT(5 or newer)
- HAVE_X11R5=yes
- AC_DEFINE(HAVE_X11R5, 1,
- [Define to 1 if you have the X11R5 or newer version of Xlib.])
- else
- HAVE_X11R5=no
- AC_MSG_RESULT(before 5)
+
+### Use -lrsvg-2 if available, unless `--with-rsvg=no' is specified.
+HAVE_RSVG=no
+if test "${HAVE_X11}" = "yes" || test "${HAVE_CARBON}" = "yes"; then
+ if test "${with_rsvg}" != "no"; then
+ dnl Check if `--with-pkg-config-prog' has been given.
+ if test "X${with_pkg_config_prog}" != X; then
+ PKG_CONFIG="${with_pkg_config_prog}"
+ fi
+
+ RSVG_REQUIRED=2.0.0
+ RSVG_MODULE="librsvg-2.0 >= $RSVG_REQUIRED"
+
+ PKG_CHECK_MODULES(RSVG, $RSVG_MODULE, :, :)
+ AC_SUBST(RSVG_CFLAGS)
+ AC_SUBST(RSVG_LIBS)
+
+ if test ".${RSVG_CFLAGS}" != "."; then
+ HAVE_RSVG=yes
+ AC_DEFINE(HAVE_RSVG, 1, [Define to 1 if using librsvg.])
+ CFLAGS="$CFLAGS $RSVG_CFLAGS"
+ LIBS="$RSVG_LIBS $LIBS"
+ fi
fi
fi
+
HAVE_GTK=no
if test "${with_gtk}" = "yes" && test "$USE_X_TOOLKIT" = "gtk"; then
USE_X_TOOLKIT=none
fi
-if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk"; then
+if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk" || \
+ test "$USE_X_TOOLKIT" = "maybe"; then
if test "$USE_X_TOOLKIT" != "none" && test "$USE_X_TOOLKIT" != "maybe"; then
AC_MSG_ERROR([Conflicting options, --with-gtk is incompatible with --with-x-toolkit=${with_x_toolkit}]);
fi
@@ -2109,7 +2163,15 @@ if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk"; then
PKG_CONFIG="${with_pkg_config_prog}"
fi
dnl Checks for libraries.
- PKG_CHECK_MODULES(GTK, $GTK_MODULES)
+ PKG_CHECK_MODULES(GTK, $GTK_MODULES, pkg_check_gtk=yes, pkg_check_gtk=no)
+ if test "$pkg_check_gtk" = "no" && test "$USE_X_TOOLKIT" != "maybe"; then
+ AC_MSG_ERROR($GTK_PKG_ERRORS)
+ fi
+fi
+
+
+if test x"$pkg_check_gtk" = xyes; then
+
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)
C_SWITCH_X_SITE="$C_SWITCH_X_SITE $GTK_CFLAGS"
@@ -2119,12 +2181,19 @@ if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk"; then
GTK_COMPILES=no
AC_CHECK_FUNCS(gtk_main, GTK_COMPILES=yes)
if test "${GTK_COMPILES}" != "yes"; then
- AC_MSG_ERROR([Gtk+ wanted, but it does not compile, see config.log. Maybe some x11-devel files missing?]);
+ if test "$USE_X_TOOLKIT" != "maybe"; then
+ AC_MSG_ERROR([Gtk+ wanted, but it does not compile, see config.log. Maybe some x11-devel files missing?]);
+ fi
+ else
+ HAVE_GTK=yes
+ AC_DEFINE(HAVE_GTK, 1, [Define to 1 if using GTK.])
+ USE_X_TOOLKIT=none
fi
-
- HAVE_GTK=yes
- AC_DEFINE(HAVE_GTK, 1, [Define to 1 if using GTK.])
- USE_X_TOOLKIT=none
+
+fi
+
+
+if test "${HAVE_GTK}" = "yes"; then
dnl GTK scrollbars resemble toolkit scrollbars a lot, so to avoid
dnl a lot if #ifdef:s, say we have toolkit scrollbars.
@@ -2140,6 +2209,7 @@ if test "${with_gtk}" = "yes" || test "$USE_X_TOOLKIT" = "gtk"; then
AC_DEFINE(HAVE_GTK_MULTIDISPLAY, 1,
[Define to 1 if GTK can handle more than one display.])
fi
+
dnl Check if we have the old file selection dialog.
dnl If gdk_display_open exists, assume all others are there also.
HAVE_GTK_FILE_SELECTION=no
@@ -2192,7 +2262,7 @@ if test "${HAVE_GTK}" = "yes"; then
CFLAGS="$CFLAGS $XFT_CFLAGS"
LIBS="$XFT_LIBS $LIBS"
AC_CHECK_HEADER(X11/Xft/Xft.h,
- AC_CHECK_LIB(Xft, XftFontOpen, HAVE_XFT=yes, , $XFT_LIBS))
+ [AC_CHECK_LIB(Xft, XftFontOpen, HAVE_XFT=yes, , $XFT_LIBS)])
if test "${HAVE_XFT}" = "yes"; then
AC_DEFINE(HAVE_XFT, 1, [Define to 1 if you have the Xft library.])
@@ -2208,29 +2278,45 @@ fi
dnl Do not put whitespace before the #include statements below.
dnl Older compilers (eg sunos4 cc) choke on it.
+HAVE_XAW3D=no
if test x"${USE_X_TOOLKIT}" = xmaybe || test x"${USE_X_TOOLKIT}" = xLUCID; then
- if test x"${HAVE_X11R5}" = xyes; then
- AC_MSG_CHECKING(X11 version 5 with Xaw)
- AC_CACHE_VAL(emacs_cv_x11_version_5_with_xaw,
+ if test "$with_xaw3d" != no; then
+ AC_MSG_CHECKING(for xaw3d)
+ AC_CACHE_VAL(emacs_cv_xaw3d,
+ [AC_TRY_LINK([
+#include <X11/Intrinsic.h>
+#include <X11/Xaw3d/Simple.h>],
+ [],
+ emacs_cv_xaw3d=yes,
+ emacs_cv_xaw3d=no)])
+ else
+ emacs_cv_xaw3d=no
+ fi
+ if test $emacs_cv_xaw3d = yes; then
+ AC_MSG_RESULT([yes; using Lucid toolkit])
+ USE_X_TOOLKIT=LUCID
+ HAVE_XAW3D=yes
+ AC_DEFINE(HAVE_XAW3D, 1,
+ [Define to 1 if you have the Xaw3d library (-lXaw3d).])
+ else
+ AC_MSG_RESULT(no)
+ AC_MSG_CHECKING(for libXaw)
+ AC_CACHE_VAL(emacs_cv_xaw,
[AC_TRY_LINK([
#include <X11/Intrinsic.h>
#include <X11/Xaw/Simple.h>],
[],
- emacs_cv_x11_version_5_with_xaw=yes,
- emacs_cv_x11_version_5_with_xaw=no)])
- if test $emacs_cv_x11_version_5_with_xaw = yes; then
- AC_MSG_RESULT([5 or newer, with Xaw; use toolkit by default])
+ emacs_cv_xaw=yes,
+ emacs_cv_xaw=no)])
+ if test $emacs_cv_xaw = yes; then
+ AC_MSG_RESULT([yes; using Lucid toolkit])
USE_X_TOOLKIT=LUCID
+ elif test x"${USE_X_TOOLKIT}" = xLUCID; then
+ AC_MSG_ERROR([Lucid toolkit requires X11/Xaw include files])
else
- if test x"${USE_X_TOOLKIT}" = xLUCID; then
- AC_MSG_ERROR([Lucid toolkit requires X11/Xaw include files])
- else
- AC_MSG_RESULT(before 5 or no Xaw; do not use toolkit by default)
- USE_X_TOOLKIT=none
- fi
+ AC_MSG_RESULT([no; do not use toolkit by default])
+ USE_X_TOOLKIT=none
fi
- else
- USE_X_TOOLKIT=none
fi
fi
@@ -2318,21 +2404,6 @@ Motif version prior to 2.1.
fi
fi
-### Is -lXaw3d available?
-HAVE_XAW3D=no
-if test "${HAVE_X11}" = "yes"; then
- if test "${USE_X_TOOLKIT}" != "none" && test "${with_toolkit_scroll_bars}" != "no"; then
- dnl Fixme: determine what Scrollbar.h needs to avoid compilation
- dnl errors from the test without the `-'.
- AC_CHECK_HEADER(X11/Xaw3d/Scrollbar.h,
- [AC_CHECK_LIB(Xaw3d, XawScrollbarSetThumb, HAVE_XAW3D=yes)], , -)
- if test "${HAVE_XAW3D}" = "yes"; then
- AC_DEFINE(HAVE_XAW3D, 1,
- [Define to 1 if you have the Xaw3d library (-lXaw3d).])
- fi
- fi
-fi
-
dnl Use toolkit scroll bars if configured for GTK or X toolkit and either
dnl using Motif or Xaw3d is available, and unless
dnl --with-toolkit-scroll-bars=no was specified.
@@ -2364,8 +2435,8 @@ AC_TRY_COMPILE([
#include <X11/Xlib.h>
#include <X11/Xresource.h>],
[XIMProc callback;],
- HAVE_XIM=yes
- AC_DEFINE(HAVE_XIM, 1, [Define to 1 if XIM is available]),
+ [HAVE_XIM=yes
+ AC_DEFINE(HAVE_XIM, 1, [Define to 1 if XIM is available])],
HAVE_XIM=no)
dnl `--with-xim' now controls only the initial value of use_xim at run time.
@@ -2415,7 +2486,7 @@ HAVE_XPM=no
if test "${HAVE_X11}" = "yes"; then
if test "${with_xpm}" != "no"; then
AC_CHECK_HEADER(X11/xpm.h,
- AC_CHECK_LIB(Xpm, XpmReadFileToPixmap, HAVE_XPM=yes, , -lX11))
+ [AC_CHECK_LIB(Xpm, XpmReadFileToPixmap, HAVE_XPM=yes, , -lX11)])
if test "${HAVE_XPM}" = "yes"; then
AC_MSG_CHECKING(for XpmReturnAllocPixels preprocessor define)
AC_EGREP_CPP(no_return_alloc_pixels,
@@ -2445,7 +2516,7 @@ if test "${HAVE_X11}" = "yes"; then
dnl Checking for jpeglib.h can lose because of a redefinition of
dnl HAVE_STDLIB_H.
AC_CHECK_HEADER(jerror.h,
- AC_CHECK_LIB(jpeg, jpeg_destroy_compress, HAVE_JPEG=yes))
+ [AC_CHECK_LIB(jpeg, jpeg_destroy_compress, HAVE_JPEG=yes)])
fi
AH_TEMPLATE(HAVE_JPEG, [Define to 1 if you have the jpeg library (-ljpeg).])dnl
@@ -2455,7 +2526,7 @@ if test "${HAVE_X11}" = "yes"; then
[#include <jpeglib.h>
version=JPEG_LIB_VERSION
],
- AC_DEFINE(HAVE_JPEG),
+ [AC_DEFINE(HAVE_JPEG)],
[AC_MSG_WARN([libjpeg found, but not version 6b or later])
HAVE_JPEG=no])
fi
@@ -2483,10 +2554,10 @@ HAVE_TIFF=no
if test "${HAVE_X11}" = "yes"; then
if test "${with_tiff}" != "no"; then
AC_CHECK_HEADER(tiffio.h,
- tifflibs="-lz -lm"
+ [tifflibs="-lz -lm"
# At least one tiff package requires the jpeg library.
if test "${HAVE_JPEG}" = yes; then tifflibs="-ljpeg $tifflibs"; fi
- AC_CHECK_LIB(tiff, TIFFGetVersion, HAVE_TIFF=yes, , $tifflibs))
+ AC_CHECK_LIB(tiff, TIFFGetVersion, HAVE_TIFF=yes, , $tifflibs)])
fi
if test "${HAVE_TIFF}" = "yes"; then
@@ -2494,23 +2565,71 @@ if test "${HAVE_X11}" = "yes"; then
fi
fi
-### Use -lgif if available, unless `--with-gif=no'.
+### Use -lgif or -lungif if available, unless `--with-gif=no'.
HAVE_GIF=no
-if test "${HAVE_X11}" = "yes"; then
- if test "${with_gif}" != "no"; then
- AC_CHECK_HEADER(gif_lib.h,
+if test "${HAVE_X11}" = "yes" && test "${with_gif}" != "no"; then
+ AC_CHECK_HEADER(gif_lib.h,
# EGifPutExtensionLast only exists from version libungif-4.1.0b1.
# Earlier versions can crash Emacs.
- AC_CHECK_LIB(ungif, EGifPutExtensionLast, HAVE_GIF=yes))
+ [AC_CHECK_LIB(gif, EGifPutExtensionLast, HAVE_GIF=yes, try_libungif=yes)])
+
+ if test "$HAVE_GIF" = yes; then
+ ac_gif_lib_name="-lgif"
+ fi
+
+# If gif_lib.h but no libgif, try libungif.
+ if test x"$try_libungif" = xyes; then
+ AC_CHECK_LIB(ungif, EGifPutExtensionLast, HAVE_GIF=yes)
+
+ if test "$HAVE_GIF" = yes; then
+ AC_DEFINE(LIBGIF, -lungif, [Compiler option to link with the gif library (if not -lgif).])
+ ac_gif_lib_name="-lungif"
+ fi
fi
if test "${HAVE_GIF}" = "yes"; then
- AC_DEFINE(HAVE_GIF, 1, [Define to 1 if you have the ungif library (-lungif).])
+ AC_DEFINE(HAVE_GIF, 1, [Define to 1 if you have a gif library (default -lgif; otherwise specify with LIBGIF).])
fi
fi
+dnl Check for required libraries.
+if test "${HAVE_X11}" = "yes"; then
+ MISSING=""
+ WITH_NO=""
+ test "${with_xpm}" != "no" && test "${HAVE_XPM}" != "yes" &&
+ MISSING="libXpm" && WITH_NO="--with-xpm=no"
+ test "${with_jpeg}" != "no" && test "${HAVE_JPEG}" != "yes" &&
+ MISSING="$MISSING libjpeg" && WITH_NO="$WITH_NO --with-jpeg=no"
+ test "${with_png}" != "no" && test "${HAVE_PNG}" != "yes" &&
+ MISSING="$MISSING libpng" && WITH_NO="$WITH_NO --with-png=no"
+ test "${with_gif}" != "no" && test "${HAVE_GIF}" != "yes" &&
+ MISSING="$MISSING libgif/libungif" && WITH_NO="$WITH_NO --with-gif=no"
+ test "${with_tiff}" != "no" && test "${HAVE_TIFF}" != "yes" &&
+ MISSING="$MISSING libtiff" && WITH_NO="$WITH_NO --with-tiff=no"
+
+ if test "X${MISSING}" != X; then
+ AC_MSG_ERROR([The following required libraries were not found:
+ $MISSING
+Maybe some development libraries/packages are missing?
+If you don't want to link with them give
+ $WITH_NO
+as options to configure])
+ fi
+fi
+
+### Use -lgpm if available, unless `--with-gpm=no'.
+HAVE_GPM=no
+if test "${with_gpm}" != "no"; then
+ AC_CHECK_HEADER(gpm.h,
+ [AC_CHECK_LIB(gpm, Gpm_Open, HAVE_GPM=yes)])
+fi
+
+if test "${HAVE_GPM}" = "yes"; then
+ AC_DEFINE(HAVE_GPM, 1, [Define to 1 if you have the gpm library (-lgpm).])
+fi
+
dnl Check for malloc/malloc.h on darwin
-AC_CHECK_HEADER(malloc/malloc.h, AC_DEFINE(HAVE_MALLOC_MALLOC_H, 1, [Define to 1 if you have the <malloc/malloc.h> header file.]))
+AC_CHECK_HEADER(malloc/malloc.h, [AC_DEFINE(HAVE_MALLOC_MALLOC_H, 1, [Define to 1 if you have the <malloc/malloc.h> header file.])])
### Use Mac OS X Carbon API to implement GUI.
if test "${HAVE_CARBON}" = "yes"; then
@@ -2531,7 +2650,7 @@ fi
HAVE_X_SM=no
if test "${HAVE_X11}" = "yes"; then
AC_CHECK_HEADER(X11/SM/SMlib.h,
- AC_CHECK_LIB(SM, SmcOpenConnection, HAVE_X_SM=yes, , -lICE))
+ [AC_CHECK_LIB(SM, SmcOpenConnection, HAVE_X_SM=yes, , -lICE)])
if test "${HAVE_X_SM}" = "yes"; then
AC_DEFINE(HAVE_X_SM, 1, [Define to 1 if you have the SM library (-lSM).])
@@ -2554,6 +2673,13 @@ fi
AC_FUNC_ALLOCA
+dnl src/alloca.c has been removed. Could also check if $ALLOCA is set?
+dnl FIXME is there an autoconf test that does the right thing, without
+dnl needing to call A_M_E afterwards?
+if test x"$ac_cv_func_alloca_works" != xyes; then
+ AC_MSG_ERROR( [a system implementation of alloca is required] )
+fi
+
# fmod, logb, and frexp are found in -lm on most systems.
# On HPUX 9.01, -lm does not contain logb, so check for sqrt.
AC_CHECK_LIB(m, sqrt)
@@ -2583,7 +2709,7 @@ AC_CHECK_HEADERS(maillock.h)
AC_CHECK_FUNCS(gethostname getdomainname dup2 \
rename closedir mkdir rmdir sysinfo getrusage get_current_dir_name \
-random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime res_init setsid \
+random lrand48 bcopy bcmp logb frexp fmod rint cbrt ftime setsid \
strerror fpathconf select mktime euidaccess getpagesize tzset setlocale \
utimes setrlimit setpgid getcwd getwd shutdown getaddrinfo \
__fpending mblen mbrlen mbsinit strsignal setitimer ualarm index rindex \
@@ -2627,26 +2753,57 @@ AC_CHECK_FUNCS(getpt)
# than to expect to find it in ncurses.
AC_CHECK_LIB(ncurses, tparm)
+# Do we have res_init, for detecting changes in /etc/resolv.conf?
+
+resolv=no
+AC_TRY_LINK([#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>],
+ [return res_init();],
+ have_res_init=yes, have_res_init=no)
+if test "$have_res_init" = no; then
+ OLIBS="$LIBS"
+ LIBS="$LIBS -lresolv"
+ AC_MSG_CHECKING(for res_init with -lresolv)
+ AC_TRY_LINK([#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>],
+ [return res_init();],
+ have_res_init=yes, have_res_init=no)
+ AC_MSG_RESULT($have_res_init)
+ if test "$have_res_init" = yes ; then
+ resolv=yes
+ fi
+ LIBS="$OLIBS"
+fi
+
+if test "$have_res_init" = yes; then
+ AC_DEFINE(HAVE_RES_INIT, 1, [Define to 1 if res_init is available.])
+fi
+
# Do we need the Hesiod library to provide the support routines?
if test "$with_hesiod" = yes ; then
# Don't set $LIBS here -- see comments above.
- resolv=no
AC_CHECK_FUNC(res_send, , [AC_CHECK_FUNC(__res_send, ,
[AC_CHECK_LIB(resolv, res_send, resolv=yes,
[AC_CHECK_LIB(resolv, __res_send, resolv=yes)])])])
if test "$resolv" = yes ; then
RESOLVLIB=-lresolv
- AC_DEFINE(HAVE_LIBRESOLV, 1,
- [Define to 1 if you have the resolv library (-lresolv).])
else
RESOLVLIB=
fi
AC_CHECK_FUNC(hes_getmailhost, , [AC_CHECK_LIB(hesiod, hes_getmailhost,
- AC_DEFINE(HAVE_LIBHESIOD, 1,
- [Define to 1 if you have the hesiod library (-lhesiod).]),
+ [AC_DEFINE(HAVE_LIBHESIOD, 1,
+ [Define to 1 if you have the hesiod library (-lhesiod).])],
:, $RESOLVLIB)])
fi
+# Do we need libresolv (due to res_init or Hesiod)?
+if test "$resolv" = yes ; then
+ AC_DEFINE(HAVE_LIBRESOLV, 1,
+ [Define to 1 if you have the resolv library (-lresolv).])
+fi
+
# These tell us which Kerberos-related libraries to use.
if test "${with_kerberos+set}" = set; then
AC_CHECK_LIB(com_err, com_err)
@@ -2655,9 +2812,9 @@ if test "${with_kerberos+set}" = set; then
AC_CHECK_LIB(krb5, krb5_init_context)
if test "${with_kerberos5+set}" != set; then
AC_CHECK_LIB(des425, des_cbc_encrypt,,
- AC_CHECK_LIB(des, des_cbc_encrypt))
+ [AC_CHECK_LIB(des, des_cbc_encrypt)])
AC_CHECK_LIB(krb4, krb_get_cred,,
- AC_CHECK_LIB(krb, krb_get_cred))
+ [AC_CHECK_LIB(krb, krb_get_cred)])
fi
if test "${with_kerberos5+set}" = set; then
@@ -2940,6 +3097,7 @@ if test "${REL_ALLOC}" = "yes" ; then
buffer space.])
fi
+
AH_TOP([/* GNU Emacs site configuration template file.
Copyright (C) 1988, 1993, 1994, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
@@ -2977,6 +3135,13 @@ AH_BOTTOM([
#define HAVE_MOUSE
#endif
+/* Multi-tty support relies on MULTI_KBOARD. It seems safe to turn it
+ on unconditionally. Note that src/s/darwin.h disables this at
+ present. */
+#ifndef MULTI_KBOARD
+#define MULTI_KBOARD
+#endif
+
/* If we're using the Carbon API on Mac OS X, define a few more
variables as well. */
#ifdef HAVE_CARBON
@@ -3176,7 +3341,7 @@ typedef unsigned size_t;
#ifdef HAVE_X11R6
#define HAVE_X_I18N
-#elif defined HAVE_X11R5 && !defined X11R5_INHIBIT_I18N
+#elif !defined X11R5_INHIBIT_I18N
#define HAVE_X_I18N
#endif
@@ -3267,8 +3432,10 @@ echo " Does Emacs use -lXaw3d? ${HAVE_XAW3D}"
echo " Does Emacs use -lXpm? ${HAVE_XPM}"
echo " Does Emacs use -ljpeg? ${HAVE_JPEG}"
echo " Does Emacs use -ltiff? ${HAVE_TIFF}"
-echo " Does Emacs use -lungif? ${HAVE_GIF}"
+echo " Does Emacs use a gif library? ${HAVE_GIF} $ac_gif_lib_name"
echo " Does Emacs use -lpng? ${HAVE_PNG}"
+echo " Does Emacs use -lrsvg-2? ${HAVE_RSVG}"
+echo " Does Emacs use -lgpm? ${HAVE_GPM}"
echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"
echo
@@ -3289,6 +3456,14 @@ if test "$USE_X_TOOLKIT" = GTK; then
fi
+if test "$HAVE_CARBON" = "yes"; then
+ echo
+ echo "Warning: The Mac Carbon port is currently unsupported and has
+known problems. It is not recommended for use by non-developers.
+Read the emacs-devel archives for more information."
+ echo
+fi
+
# Remove any trailing slashes in these variables.
[test "${prefix}" != NONE &&
@@ -3307,8 +3482,9 @@ AC_EGREP_CPP(yes..yes,
CPP_NEED_TRADITIONAL=yes)
AC_OUTPUT(Makefile lib-src/Makefile.c:lib-src/Makefile.in oldXMenu/Makefile \
- man/Makefile lwlib/Makefile src/Makefile.c:src/Makefile.in \
- lisp/Makefile lispref/Makefile lispintro/Makefile leim/Makefile, [
+ doc/emacs/Makefile doc/misc/Makefile doc/lispintro/Makefile \
+ doc/lispref/Makefile src/Makefile.c:src/Makefile.in \
+ lwlib/Makefile lisp/Makefile leim/Makefile, [
### Make the necessary directories, if they don't exist.
for dir in etc lisp ; do
diff --git a/man/.gitignore b/doc/emacs/.gitignore
index 3ff56b474dd..3ff56b474dd 100644
--- a/man/.gitignore
+++ b/doc/emacs/.gitignore
diff --git a/man/ChangeLog b/doc/emacs/ChangeLog
index 88b4087d6ca..02d9e85ac50 100644
--- a/man/ChangeLog
+++ b/doc/emacs/ChangeLog
@@ -3,9 +3,14 @@
* flymake.texi (Example -- Configuring a tool called directly):
Update example.
-2007-11-15 Juanma Barranquero <lekktu@gmail.com>
+2007-11-17 Eli Zaretskii <eliz@gnu.org>
- * cc-mode.texi (Electric Keys, Custom Macros): Fix typos.
+ * mule.texi (Communication Coding): Fix wording of last change.
+
+2007-11-16 Werner Lemberg <wl@gnu.org>
+
+ * custom.texi (Specifying File Variables), major.texi (Choosing
+ Modes): Mention '\" in man pages.
2007-11-15 Richard Stallman <rms@gnu.org>
@@ -16,22 +21,49 @@
Minor clarification about character constants.
(Sequence Basics): Minor clarification.
-2007-11-15 Kenichi Handa <handa@ni.aist.go.jp>
+2007-11-16 Kenichi Handa <handa@ni.aist.go.jp>
* mule.texi (Communication Coding): Document x-select-request-type.
+ * frames.texi (Cut/Paste Other App): Mention x-select-request-type.
+
+2007-11-15 Francesco Potort,Al(B <pot@gnu.org>
+
+ * maintaining.texi (TEXTAGS): note that you can use "-" for stdout with
+ --output=file.
+
+2007-11-13 Martin Rudalics <rudalics@gmx.at>
+
+ * help.texi (Help Summary, Apropos, Misc Help): Fix typos.
+ (Help Echo): Avoid mentioning the term "region" here and
+ consistently use the term "active text".
+
2007-11-11 Glenn Morris <rgm@gnu.org>
* calendar.texi (Special Diary Entries): Fix Thanksgiving example.
-2007-11-04 Reiner Steib <Reiner.Steib@gmx.de>
+2007-11-10 Paul Pogonyshev <pogonyshev@gmx.net>
+
+ * search.texi (Query Replace): Mention
+ `query-replace-show-replacement'.
+
+2007-11-09 Reiner Steib <Reiner.Steib@gmx.de>
* gnus.texi, gnus-faq.texi, message.texi: Bump version to 5.10.9.
-2007-11-02 Nick Roberts <nickrob@snap.net.nz>
+2007-11-09 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Watch Expressions): Remove obscure sentence.
+2007-11-06 Kenichi Handa <handa@ni.aist.go.jp>
+
+ * mule.texi (Select Input Method): Describe how to activate an input
+ method in the text mode.
+
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * cmdargs.texi (Misc Variables): Remove Sun windows info.
+
2007-10-27 Emanuele Giaquinta <e.giaquinta@glauco.it> (tiny change)
* gnus-faq.texi ([5.12]): Remove reference to discontinued service.
@@ -44,19 +76,55 @@
* building.texi (Watch Expressions): Describe gdb-delete-out-of-scope.
+2007-10-30 Glenn Morris <rgm@gnu.org>
+
+ * misc.texi (Directory Tracking): Explain a bit more about
+ dirtrack-mode.
+
2007-10-29 Richard Stallman <rms@gnu.org>
* widget.texi (Introduction): Delete discussion of implementation
internals.
+2007-10-25 Glenn Morris <rgm@gnu.org>
+
+ * fortran-xtra.texi (Fortran): F90 mode handles F2003.
+
2007-10-24 Richard Stallman <rms@gnu.org>
* misc.texi (Interactive Shell): Cleanup last change.
+2007-10-22 Juri Linkov <juri@jurta.org>
+
+ * mini.texi (Minibuffer History): Add text about a list of minibuffer
+ default values.
+
+2007-10-20 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * files.texi: Disambiguate two slightly different uses of the term
+ 'filesets'.
+
2007-10-18 Martin Rudalics <rudalics@gmx.at>
* trouble.texi (Quitting): Fix typo.
+2007-10-18 Glenn Morris <rgm@gnu.org>
+
+ * frames.texi (Mode Line Mouse): Mention minor mode names.
+
+2007-10-17 Juri Linkov <juri@jurta.org>
+
+ * text.texi (Fill Commands): Undocument fill-paragraph-or-region.
+ fill-paragraph operates on the active region in Transient Mark mode.
+ (Fill Prefix, Format Indentation): Replace fill-paragraph-or-region
+ with fill-paragraph.
+
+ * basic.texi (Arguments): Replace fill-paragraph-or-region with
+ fill-paragraph.
+
+ * fixit.texi (Spelling): ispell-word operates on the active region
+ in Transient Mark mode.
+
2007-10-17 Aaron S. Hawley <aaronh@garden.org>
* building.texi (Source Buffers):
@@ -71,10 +139,35 @@
* calendar.texi (Diary): Clarify text about diary file example.
+2007-10-13 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * files.texi: Capitalize node names according to convention.
+
2007-10-13 Glenn Morris <rgm@gnu.org>
* misc.texi (Interactive Shell): Correct INSIDE_EMACS reference.
+2007-10-11 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * emacs.texi:
+ * files.texi (Version Systems): Minor fixes to version-control material
+ suggested by RMS and Robert J. Chassell.
+
+2007-10-10 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * files.texi (Version Systems):
+ * vc-xtra.texi:
+ * vc1-xtra.texi:
+ * vc2-xtra.texi: Merge in changes for new VC with fileset-oriented
+ operations. Change of terminology from `version' to `revision'.
+ Revise text for adequate description of VCSes with monotonic IDs.
+ * emacs.texi: Change of terminology from `version' to `revision'.
+
+2007-10-09 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * files.texi (Version Systems): Describe newer VCses.
+ Reorder the descriptions to be chronological.
+
2007-10-09 Richard Stallman <rms@gnu.org>
* display.texi (Cursor Display): Correct how cursor appears
@@ -85,28 +178,67 @@
* building.texi (GDB Graphical Interface): Remove references to gdba
and mention gud-gdb.
-2007-09-29 Juri Linkov <juri@jurta.org>
+2007-08-31 Eli Zaretskii <eliz@gnu.org>
- * info.texi (Help-Int): Document `L' (`Info-history').
+ * rmail.texi (Rmail Sorting): Improve indexing.
-2007-09-20 Eduard Wiebe <usenet@pusto.de> (tiny change)
+2007-10-06 Juri Linkov <juri@jurta.org>
- * flymake.texi (Customizable variables): Face names don't end in -face.
- Fix flymake-err-line-patterns template.
- (Example -- Configuring a tool called directly): Fix init-function.
- (Highlighting erroneous lines): Face names don't end in -face.
+ * text.texi (Fill Commands): Document fill-paragraph-or-region.
+ (Fill Prefix, Format Indentation): Replace fill-paragraph with
+ fill-paragraph-or-region.
-2007-09-05 Glenn Morris <rgm@gnu.org>
+ * basic.texi (Arguments): Replace fill-paragraph with
+ fill-paragraph-or-region.
- * custom.texi (Safe File Variables): Clarify `!' and risky variables.
+2007-10-06 Eric S. Raymond <esr@snark.thyrsus.com>
-2007-08-31 Eli Zaretskii <eliz@gnu.org>
+ * files.texi: Update the section on version control for 2007
+ conditions. None of these changes are new-VC-specific; that
+ will come later.
- * rmail.texi (Rmail Sorting): Improve indexing.
+2007-09-15 Glenn Morris <rgm@gnu.org>
-2007-08-24 IRIE Tetsuya <irie@t.email.ne.jp> (tiny change)
+ * calendar.texi (Holidays): Change all instances of `holiday-list' back
+ to `list-holidays'.
- * message.texi (MIME): Replace mml-attach with mml-attach-file.
+2007-09-14 Glenn Morris <rgm@gnu.org>
+
+ * calendar.texi: Update all instances of mark-calendar-holidays,
+ list-calendar-holidays, list-holidays with the new names.
+
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * Move manual sources from man/ to subdirectories of doc/.
+ Split into the Emacs manual in emacs/, and other manuals in misc/.
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Reduce to just the Emacs
+ manual.
+ (infodir): New variable.
+ (info): Use $infodir.
+ (emacsman): Delete target, not needed any more.
+ Move all targets that are not the Emacs manual to misc/Makefile.in.
+ (mostlyclean): Remove `gnustmp'.
+ * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Reduce to just the Emacs
+ manual.
+ (MULTI_INSTALL_INFO, ENVADD, infodir): Go up one more level.
+ (emacsman): Delete target, not needed any more.
+ (clean): Remove all info files but Emacs manual.
+ Move all targets that are not the Emacs manual to misc/Makefile.in.
+ * emacs-xtra.texi, emacs.texi (setfilename): Go up one more level.
+
+ * Makefile.in (INFOSOURCES): Delete.
+ (.SUFFIXES): Use $(TEXI2DVI) rather than texi2dvi.
+ (mostlyclean): Add *.op, *.ops. Move *.aux *.cps *.fns *.kys *.pgs
+ *.vrs *.toc here...
+ (maintainer-clean): ...from here.
+
+2007-09-05 Glenn Morris <rgm@gnu.org>
+
+ * custom.texi (Safe File Variables): Clarify `!' and risky variables.
+
+2007-08-29 Glenn Morris <rgm@gnu.org>
+
+ * emacs.texi (EMACSVER): Increase to 23.0.50.
2007-08-27 Richard Stallman <rms@gnu.org>
@@ -115,54 +247,40 @@
* display.texi (Faces): Change secn title.
Clarify not all fonts come from Font Lock.
-2007-08-14 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Selecting a Group): Mention gnus-maximum-newsgroup.
-
2007-08-17 Eli Zaretskii <eliz@gnu.org>
* basic.texi (Position Info): Add index entry for face at point.
Mention that character faces are also displayed by "C-u C-x =".
-2007-08-10 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (NNTP): Mention nntp-xref-number-is-evil.
-
2007-08-08 Glenn Morris <rgm@gnu.org>
* glossary.texi (Glossary): Deprecate `iff'.
- * gnus.texi, sieve.texi: Replace `iff'.
2007-08-07 Chong Yidong <cyd@stupidchicken.com>
* files.texi (File Conveniences): Document point motion keys in Image
mode.
-2007-08-01 Alan Mackenzie <acm@muc.de>
+2007-07-27 Glenn Morris <rgm@gnu.org>
- * cc-mode.texi (Mailing Lists and Bug Reports): Correct "-no-site-file"
- to "--no-site-file".
+ * emacs.texi (Copying): Include license text from gpl.texi, rather than
+ in-line.
-2007-07-30 Dan Nicolaescu <dann@ics.uci.edu>
+ * gpl.texi: New file with text of GPL.
+ * Makefile.in (EMACSSOURCES): Add gpl.texi.
+
+2007-07-26 Dan Nicolaescu <dann@ics.uci.edu>
* vc2-xtra.texi (Customizing VC): Add GIT and HG.
+ * dired.texi (Wdired): Mention C-x C-q key binding.
+
2007-07-28 Nick Roberts <nickrob@snap.net.nz>
* building.texi (GDB Graphical Interface): Qualify use of "M-x gdba".
-2007-07-27 Glenn Morris <rgm@gnu.org>
-
- * calc.texi (Copying)
- * emacs.texi (Copying): Include license text from gpl.texi, rather than
- in-line.
-
- * gpl.texi: New file with text of GPL.
- * Makefile.in (EMACSSOURCES): Add gpl.texi.
-
2007-07-25 Glenn Morris <rgm@gnu.org>
- * calc.texi (Copying)
* emacs.texi (Copying): Replace license with GPLv3.
* Relicense all FSF files to GPLv3 or later.
@@ -172,40 +290,31 @@
* calendar.texi (Writing Calendar Files): cal-tex-diary etc only work
for some calendars.
-2007-07-13 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (../info/emacs-mime): Use --enable-encoding.
-
- * makefile.w32-in ($(infodir)/emacs-mime): Ditto.
+2007-07-23 Nick Roberts <nickrob@snap.net.nz>
- * emacs-mime.texi: Add @documentencoding directive.
+ * screen.texi (Mode Line): Describe new mode-line flag that shows if
+ default-directory for the current buffer is on a remote machine.
-2007-07-02 Reiner Steib <Reiner.Steib@gmx.de>
+2007-07-21 Eli Zaretskii <eliz@gnu.org>
- * gnus-faq.texi ([3.2]): Fix locating of environment variables in the
- Control Panel.
+ * vc2-xtra.texi (Customizing VC) <vc-handled-backends>: Update the
+ default value.
- * gnus.texi (Misc Article): Add index entry for
- gnus-single-article-buffer.
+2007-07-21 Richard Stallman <rms@gnu.org>
-2007-06-27 Andreas Seltenreich <andreas@gate450.dyndns.org>
+ * files.texi (Why Version Control?): Improve previous change.
- * gnus.texi (Starting Up): Fix typo.
+2007-07-18 Eric S. Raymond <esr@snark.thyrsus.com>
-2007-06-25 Katsumi Yamaoka <yamaoka@jpl.org>
+ * files.texi (Why Version Control?): New node.
- * gnus.texi (Asynchronous Fetching): Fix typo.
+2007-07-12 Nick Roberts <nickrob@snap.net.nz>
-2007-06-24 Karl Berry <karl@tug.org>
+ * building.texi (Starting GUD): Add xref to this anchor.
- * emacs.texi: new Back-Cover Text.
+2007-06-24 Karl Berry <karl@gnu.org>
-2007-06-07 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.56.
-
- * tramp.texi (Frequently Asked Questions): Improve ~/.zshrc
- settings. Reported by Ted Zlatanov <tzz@lifelogs.com>.
+ * emacs.texi: New Back-Cover Text.
2007-06-07 Alan Mackenzie <acm@muc.de>
@@ -214,47 +323,35 @@
2007-06-06 Juanma Barranquero <lekktu@gmail.com>
- * cc-mode.texi (Comment Commands, Getting Started, Style Variables):
- * gnus.texi (Article Buttons, Mail Source Customization)
- (Sending or Not Sending, Customizing NNDiary):
- * maintaining.texi (Create Tags Table):
- * message.texi (Message Headers):
- * mh-e.texi (HTML): Fix typos.
+ * maintaining.texi (Create Tags Table): Fix typos.
2007-06-02 Chong Yidong <cyd@stupidchicken.com>
* Version 22.1 released.
-2007-05-26 Michael Olson <mwolson@gnu.org>
-
- * erc.texi (Modules): Fix references to completion modules.
-
-2007-05-10 Reiner Steib <Reiner.Steib@gmx.de>
+2007-05-07 Karl Berry <karl@gnu.org>
- * gnus.texi (Running NNDiary): Use ~/.gnus.el instead of gnusrc.
+ * emacs.texi (EMACSVER): Back to 22.
-2007-05-10 Didier Verna <didier@xemacs.org>
+2007-05-06 Richard Stallman <rms@gnu.org>
- * gnus.texi (Email Based Diary): New. Proper documentation for the
- nndiary back end and the gnus-diary library.
+ * maintaining.texi (Create Tags Table): Clean up previous change.
2007-05-05 Francesco Potort,Al(B <pot@gnu.org>
* maintaining.texi (Create Tags Table): Add text about the dangers of
- making symbolic links to tags files. (Clarified by RMS.)
+ making symbolic links to tags files.
-2007-05-04 Karl Berry <karl@tug.org>
+2007-05-04 Karl Berry <karl@gnu.org>
* emacs.texi (EMACSVER) [smallbook]: 22.1 for printed version, not 22.
-2007-05-03 Karl Berry <karl@tug.org>
+2007-05-03 Karl Berry <karl@gnu.org>
* emacs.texi (EMACSVER) [smallbook]: 22 for printed version.
* .cvsignore (*.pdf): New entry.
- * texinfo.tex: Update from current version for better pdf generation.
-
* emacs.texi (\urlcolor, \linkcolor) [smallbook]: \let to \Black
for printing.
@@ -266,7 +363,6 @@
* ack.texi (Acknowledgments):
* anti.texi (Antinews):
- * faq.texi (New in Emacs 22):
* programs.texi (Program Modes): Restore mention of python.el pending
consideration of legal status.
@@ -274,28 +370,23 @@
* files.texi (File Names): Fixes to ~ description on MS systems.
-2007-04-28 Karl Berry <karl@gnu.org>
+2007-04-26 Glenn Morris <rgm@gnu.org>
+
+ * emacs.texi (EMACSVER): Increase to 22.1.50.
+
+2007-04-25 Karl Berry <karl@gnu.org>
* emacs.texi: Improve line breaks on copyright page,
similar layout to lispref, 8.5x11 by default.
* dired.texi (Image-Dired): Improve line break, fix typo.
-2007-04-27 J.D. Smith <jdsmith@as.arizona.edu>
-
- * idlwave.texi: Minor updates for IDLWAVE 6.1.
-
2007-04-24 Chong Yidong <cyd@stupidchicken.com>
* programs.texi (Program Modes):
- * faq.texi (New in Emacs 22):
* anti.texi (Antinews):
* ack.texi (Acknowledgments): python.el removed.
-2007-04-23 Jay Belanger <jay.p.belanger@gmail.com>
-
- * calc.texi (Reporting bugs): Update maintainer's address.
-
2007-04-23 Chong Yidong <cyd@stupidchicken.com>
* display.texi (Highlight Interactively): Correct description of
@@ -315,8 +406,7 @@
* emacs.texi (Top): Update node listing.
* files.texi (File Conveniences):
- * ack.texi (Acknowledgments):
- * faq.texi (New in Emacs 22): Rename "tumme" to "image-dired".
+ * ack.texi (Acknowledgments): Rename "tumme" to "image-dired".
2007-04-21 Richard Stallman <rms@gnu.org>
@@ -332,43 +422,13 @@
* display.texi (Scrolling): Fix typo.
-2007-04-15 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Title page): Remove the date.
- (Basic Arithmetic): Emphasize that / binds less strongly than *.
- (The Standard Calc Interface): Change trail title.
- (Floats): Mention that when non-decimal floats are entered, only
- approximations are stored.
- (Copying): Move to the appendices.
- (GNU Free Documentation License): Add as an appendix.
-
2007-04-15 Chong Yidong <cyd@stupidchicken.com>
- * ada-mode.texi, autotype.texi, cc-mode.texi, cl.texi:
- * dired-x.texi, ebrowse.texi, ediff.texi:
- * emacs-mime.texi, erc.texi, eshell.texi:
- * eudc.texi, flymake.texi, forms.texi, gnus.texi:
- * idlwave.texi, message.texi, newsticker.texi, org.texi:
- * pcl-cvs.texi, pgg.texi, rcirc.texi, reftex.texi, sc.texi:
- * ses.texi, sieve.texi, smtpmail.texi, speedbar.texi:
- * tramp.texi, url.texi, vip.texi, viper.texi, widget.texi:
- * woman.texi: Include GFDL.
-
* doclicense.texi: Remove node heading, so that it can be included by
other files.
* emacs.texi: Insert node heading for GFDL.
- * dired-x.texi: Relicence under GFDL. Remove date from title page.
-
- * calc.texi (Algebraic Tutorial): Emphasize that / binds less strongly
- than *.
-
-2007-04-14 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Formula syntax for Calc): Emphasize the operator precedence
- in Calc.
-
2007-04-14 Eli Zaretskii <eliz@gnu.org>
* cmdargs.texi (Colors): Qualify "color of window" index entry by
@@ -411,22 +471,11 @@
* files.texi (File Conveniences): Add xref to Tumme.
Delete text about Thumbnail mode.
-2007-04-09 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (New in Emacs 22): Mention improvements to the Windows and
- Mac OS ports. Make it clear that mouse-1 complements and doesn't
- replace mouse-2.
-
2007-04-09 Alan Mackenzie <acm@muc.de>
* cmdargs.texi (Initial Options): Call "inhibit-splash-screen" by its
new name. Insert concept index entries.
-2007-04-08 Richard Stallman <rms@gnu.org>
-
- * url.texi: Fix some indexing.
- (Disk Caching): Drop discussion of old/other Emacs versions.
-
2007-04-08 Chong Yidong <cyd@stupidchicken.com>
* display.texi (Standard Faces): Document prefix arg for
@@ -434,36 +483,17 @@
* rmail.texi (Rmail Scrolling): Document rmail-end-of-message.
- * woman.texi (Word at point, Interface Options): woman-topic-at-point
- renamed to woman-use-topic-at-point. Document new behavior.
-
2007-04-07 Chong Yidong <cyd@stupidchicken.com>
- * url.texi (Disk Caching): Say Emacs 21 "and later".
-
- * cc-mode.texi (Font Locking Preliminaries): Link to Emacs manual node
- on Font locking which now mentions JIT lock.
-
* killing.texi (Deletion): Rewrite description of M-\ prefix argument.
* files.texi (Misc File Ops): Rewrite description of
insert-file-literally.
-2007-04-01 Michael Olson <mwolson@gnu.org>
-
- * erc.texi: Update for the ERC 5.2 release.
-
-2007-03-31 David Kastrup <dak@gnu.org>
-
- * woman.texi (Topic, Interface Options): Explain changes semantics of
- woman-manpath in order to consider MANPATH_MAP entries.
-
2007-03-31 Eli Zaretskii <eliz@gnu.org>
* misc.texi (Printing): Postscript -> PostScript.
- * emacs-mime.texi (Non-MIME): Postscript -> PostScript.
-
* ack.texi (Acknowledgments): Postscript -> PostScript.
* custom.texi (Init File, Init Non-ASCII): Fix last change.
@@ -482,140 +512,33 @@
* macos.texi (Mac Font Specs): Mention AppleAntiAliasingThreshold.
-2007-03-26 Richard Stallman <rms@gnu.org>
-
- * pgg.texi (Caching passphrase): Clean up previous change.
-
-2007-03-25 Thien-Thi Nguyen <ttn@gnu.org>
-
- * gnus.texi (Setting Process Marks): Fix typo.
-
-2007-03-25 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (New in Emacs 22): Reorganize using an itemized list for
- readability, and include various fixes by Daniel Brockman, Nick Roberts
- and Dieter Wilhelm.
-
-2007-03-24 Thien-Thi Nguyen <ttn@gnu.org>
-
- * gnus.texi (Splitting Mail): Reword "splitting"-as-adj to be -as-noun.
-
- * gnus.texi (Mail Source Specifiers): Fix typo.
-
-2007-03-22 Ralf Angeli <angeli@caeruleus.net>
-
- * reftex.texi (Imprint): Update maintainer information.
-
-2007-03-15 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (Message Buffers): Update documentation for
- message-generate-new-buffers.
-
-2007-03-15 Daiki Ueno <ueno@unixuser.org>
-
- * pgg.texi (Caching passphrase): Describe pgg-passphrase-coding-system.
-
-2007-03-21 Glenn Morris <rgm@gnu.org>
-
- * eshell.texi (Known problems): Emacs 22 comes with eshell 2.4.2.
-
-2007-03-19 Chong Yidong <cyd@stupidchicken.com>
-
- * eshell.texi (Known problems): Emacs 21 -> 22.
-
- * cc-mode.texi (Performance Issues): Update note about 21.3 to 22.1.
-
-2007-03-18 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Time Zones): Mention that the DST rules changed in 2007.
-
2007-03-12 Glenn Morris <rgm@gnu.org>
- * calc.texi (Time Zones): Switch to new North America DST rule.
-
* calendar.texi, emacs.texi (Daylight Saving): Rename node from
"Daylight Savings".
- * calc.texi, calendar.texi: Replace "daylight savings" with "daylight
+ * calendar.texi: Replace "daylight savings" with "daylight
saving" in text throughout.
-2007-03-11 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * gnus.texi (Mail and Post): Update documentation for gnus-user-agent.
- The variable now uses a list of symbols instead of just a symbol.
- Reported by Christoph Conrad <christoph.conrad@gmx.de>.
-
-2007-03-06 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (New in Emacs 22): Don't say "now" too much. Add MH-E to
- new packages, and mention Gnus update.
-
2007-03-04 Richard Stallman <rms@gnu.org>
* custom.texi (Safe File Variables): Minor correction.
-2007-02-27 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (NNTP): Mention nntp-never-echoes-commands and
- nntp-open-connection-functions-never-echo-commands.
-
2007-02-28 Thien-Thi Nguyen <ttn@gnu.org>
* rmail.texi (Movemail): Add internal ref.
Don't indent the intro for the PROTO table.
Format PROTO table items with @code.
-2007-02-27 Chong Yidong <cyd@stupidchicken.com>
-
- * pgg.texi (Caching passphrase): Document gpg-agent usage, gpg-agent
- problems on the console, and security risk in not using gpg-agent.
-
2007-02-26 Nick Roberts <nickrob@snap.net.nz>
* building.texi: Remove references to bashdb.
-2007-02-25 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (The spreadsheet): Renamed from "Table calculations".
- Completely reorganized and rewritten.
- (CamelCase links): Section removed.
- (Repeating items): New section.
- (Tracking TODO state changes): New section.
- (Agenda views): Chapter reorganized and rewritten.
- (HTML export): Section rewritten.
- (Tables in arbitrary syntax): New section.
- (Summary): Better feature summary.
- (Activation): Document problem with cut-and-paste of Lisp code
- from PDF files.
- (Visibility cycling): Document indirect buffer use.
- (Structure editing): Document sorting.
- (Remember): Section rewritten.
- (Time stamps): Better description of time stamp types.
- (Tag searches): Document regular expression search for tags.
- (Stuck projects): New section.
- (In-buffer settings): New keywords.
- (History and Acknowledgments): Updated description.
-
-2007-02-24 Alan Mackenzie <acm@muc.de>
-
- * cc-mode.texi (Movement Commands): Insert two missing command names.
- (Getting Started): Slight wording correction (use conditional).
-
-2007-02-22 Kim F. Storm <storm@cua.dk>
-
- * widget.texi (User Interface, Basic Types): Document need to put some
- text before the %v escape in :format string in editable-field widget.
-
2007-02-19 Juanma Barranquero <lekktu@gmail.com>
* mule.texi (Language Environments): Update list of supported language
environments.
-2007-02-18 Romain Francoise <romain@orebokech.com>
-
- * pcl-cvs.texi (Miscellaneous commands): q runs `cvs-bury-buffer', not
- `cvs-mode-quit'.
-
2007-02-14 Kim F. Storm <storm@cua.dk>
* building.texi (Grep Searching): Fix lgrep doc.
@@ -624,24 +547,11 @@
* back.texi: Remove unused file.
-2007-02-10 Markus Triska <markus.triska@gmx.at>
-
- * widget.texi (Programming Example): Put constant strings in :format.
-
-2007-02-07 Juanma Barranquero <lekktu@gmail.com>
-
- * faq.texi (Fullscreen mode on MS-Windows): New node.
-
2007-02-05 Francesco Potort,Al(B <pot@gnu.org>
* maintaining.texi (Tag Syntax): Now --members is the default for
etags, not for ctags yet.
-2007-02-04 David Kastrup <dak@gnu.org>
-
- * faq.texi (AUCTeX): Update version number. Should probably be done
- for other packages as well.
-
2007-02-03 Eli Zaretskii <eliz@gnu.org>
* emacs.texi (Top): Update the top-level menus. Make the detailed menu
@@ -654,24 +564,6 @@
* frames.texi (Secondary Selection): Window clicked does not matter
when mouse-yank-at-point is non-nil.
-2007-01-28 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * gnus.texi (Batching Agents): Fix example. Reported by Tassilo Horn
- <tassilo@member.fsf.org>.
-
-2007-01-27 Eli Zaretskii <eliz@gnu.org>
-
- * msdog.texi (ls in Lisp): Document ls-lisp-format-time-list and
- ls-lisp-use-localized-time-format.
-
-2007-01-20 Markus Triska <markus.triska@gmx.at>
-
- * flymake.texi (Flymake mode): find-file-hook instead of ...-hooks.
-
-2007-01-13 Michael Olson <mwolson@gnu.org>
-
- * erc.texi (Modules): Mention capab-identify module.
-
2007-01-16 Glenn Morris <rgm@gnu.org>
* abbrevs.texi (Editing Abbrevs): Describe how to disable a
@@ -694,22 +586,10 @@
* building.texi (Watch Expressions): Describe gdb-max-children.
-2007-01-05 Michael Olson <mwolson@gnu.org>
-
- * erc.texi (Getting Started): Update for /RECONNECT command.
-
2007-01-04 Richard Stallman <rms@gnu.org>
- * ebrowse.texi: Change C-c b to C-c C-m.
-
* msdog.texi (Windows Keyboard): Clarify previous change.
-2007-01-03 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Customizing Articles): Use index entries for gnus-treat-*
- variables only in info to avoid redundant entries in the printed
- manual.
-
2007-01-02 Richard Stallman <rms@gnu.org>
* custom.texi (Changing a Variable): Minor clarification.
@@ -728,42 +608,6 @@
* xresources.texi (Resources): Minor fix.
-2007-01-02 Daiki Ueno <ueno@unixuser.org>
-
- * message.texi (Using PGP/MIME): Document gpg-agent usage.
-
-2007-01-02 Reiner Steib <Reiner.Steib@gmx.de>
-
- * message.texi (Security): Split into sub-nodes.
-
-2007-01-01 Alan Mackenzie <acm@muc.de>
-
- * cc-mode.texi ("Limitations and Known Bugs"): Document problems with
- eval-after-load in Emacs <=21 and a workaround. Document that
- trigraphs are not supported.
-
-2007-01-01 Alan Mackenzie <acm@muc.de>
-
- * cc-mode.texi ("Filling and Breaking"): Amend the doc for
- c-context-line-break. When invoked within a string, preserve
- whitespace. Add a backslash only when also in a macro.
-
-2007-01-01 Alan Mackenzie <acm@muc.de>
-
- * cc-mode.texi ("Choosing a Style"): Mention c-file-style.
-
-2007-01-01 Alan Mackenzie <acm@muc.de>
-
- * cc-mode.texi ("Movement Commands", "Sample .emacs File"): C-M-[ae]
- are now bound by default to c-\(beginning\|end\)-of-defun by default.
-
-2007-01-01 Alan Mackenzie <acm@muc.de>
-
- * cc-mode.texi ("Other Commands"): Move c-set-style (C-c .) here from
- "Choosing a Style".
-
- * cc-mode.texi ("Styles"): Add @dfn{style}.
-
2007-01-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* xresources.texi (Table of Resources): Add scrollBarWidth resource.
@@ -788,41 +632,6 @@
* xresources.texi (Table of Resources): Mention grow-only value for
auto-resize-tool-bars.
-2006-12-30 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.55.
-
- * trampver.texi: Update release number.
-
-2006-12-29 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Customizing Articles): Add index entries for all
- gnus-treat-* variables.
-
-2006-12-29 Jouni K. Sepp,Ad(Bnen <jks@iki.fi>
-
- * gnus.texi (IMAP): Fix incorrect explanation of
- nnimap-search-uids-not-since-is-evil in documentation for
- nnimap-expunge-search-string.
-
-2006-12-27 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (ifile spam filtering): Rename spam-ifile-database-path to
- spam-ifile-database.
-
-2006-12-26 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Spam Package Configuration Examples): Don't encourage to
- rebind C-s.
-
-2006-12-26 Jouni K. Sepp,Ad(Bnen <jks@iki.fi>
-
- * gnus.texi (Group Parameters, Group Maintenance, Topic Commands)
- (Mail Group Commands, Expiring Mail, IMAP): Add index entries for
- "expiring mail".
- (IMAP): Document nnimap-search-uids-not-since-is-evil and
- nnimap-nov-is-evil.
-
2006-12-27 Eli Zaretskii <eliz@gnu.org>
* msdog.texi (Windows Keyboard): Mention widespread Windows bindings,
@@ -849,17 +658,6 @@
(Word and Line Mouse): Likewise.
(Secondary Selection, Clipboard): Nodes demoted.
-2006-12-25 Kevin Ryde <user42@zip.com.au>
-
- * cl.texi (Sorting Sequences): In sort*, add a little cautionary note
- about the key procedure being used heavily.
-
-2006-12-24 Chong Yidong <cyd@stupidchicken.com>
-
- * pgg.texi (Caching passphrase): Default for pgg-gpg-use-agent changed
- to t.
- (Prerequisites): Add explanation about gpg-agent.
-
2006-12-24 Kevin Ryde <user42@zip.com.au>
* calendar.texi (Holidays): US daylight saving begins second Sunday
@@ -880,25 +678,11 @@
* search.texi (Regexp Search): Explain why forward and reverse regexp
search are not mirror images.
-2006-12-22 Kevin Ryde <user42@zip.com.au>
-
- * cl.texi (Sorting Sequences): Typo in sort*, example showed plain
- "sort" instead of "sort*".
-
-2006-12-19 Richard Stallman <rms@gnu.org>
-
- * calc.texi (History and Acknowledgements): Recognize that Emacs
- now does have floating point.
-
2006-12-19 Kim F. Storm <storm@cua.dk>
* major.texi (Choosing Modes): Describe match-function elements for
magic-mode-alist.
-2006-12-19 Michael Albinus <michael.albinus@gmx.de>
-
- * tramp.texi (External transfer methods): Describe new method `scpc'.
-
2006-12-18 Eli Zaretskii <eliz@gnu.org>
* msdog.texi (Windows Keyboard): Add a footnote about "Windows" keys
@@ -908,10 +692,6 @@
* abbrevs.texi (Editing Abbrevs): Fix previous change.
-2006-12-17 Sascha Wilde <wilde@sha-bang.de>
-
- * pgg.texi: Added short note on gpg-agent to the introduction.
-
2006-12-17 Alan Mackenzie <acm@muc.de>
* programs.texi (Left Margin Paren): Remove the bit which says
@@ -934,16 +714,6 @@
* text.texi (HTML Mode): Fix "C-c TAB".
-2006-12-13 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Hiding Headers): Document that `long-to' and `many-to'
- also applies to Cc.
-
-2006-12-12 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (X-Face): Clarify. Say which programs are required
- on Windows.
-
2006-12-09 Richard Stallman <rms@gnu.org>
* misc.texi (Invoking emacsclient): Simplify TCP file text.
@@ -962,10 +732,6 @@
(Invoking emacsclient): Add index entries. Document both short and
long versions of command-line options. Document the -f option.
-2006-12-08 Michael Olson <mwolson@gnu.org>
-
- * erc.texi (Modules): Remove documentation for list module.
-
2006-12-06 Richard Stallman <rms@gnu.org>
* text.texi (Outline Format): Say to set outline-regexp
@@ -976,8 +742,6 @@
* anti.texi (Antinews): Mention the alternative to
`~/.emacs_SHELLNAME', which is `~/.emacs.d/init_SHELLNAME.sh'.
- * faq.texi (^M in the shell buffer): Ditto.
-
* misc.texi (Interactive Shell): Ditto.
2006-12-04 Eli Zaretskii <eliz@gnu.org>
@@ -1017,10 +781,6 @@
* anti.texi (Antinews): Mention --server-file and TCP sockets.
-2006-11-20 Michael Olson <mwolson@gnu.org>
-
- * erc.texi: Call this the 5.2 stable pre-release of ERC.
-
2006-11-18 Chong Yidong <cyd@stupidchicken.com>
* misc.texi (Interactive Shell): INSIDE_EMACS is set to t,
@@ -1038,72 +798,10 @@
* xresources.texi: Merge text from xresmini.texi.
-2006-11-17 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Fix typos.
- (Agenda commands): Document `C-k'.
-
-2006-11-16 Eli Zaretskii <eliz@gnu.org>
-
- * url.texi (http/https): Fix a typo in the HTTP URL.
-
-2006-11-14 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * ada-mode.texi: Total rewrite.
-
-2006-11-13 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Minor typo fixes.
-
-2006-11-13 Bill Wohler <wohler@newt.com>
-
- Release MH-E manual version 8.0.3.
-
- * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
- release 8.0.3.
-
- * mh-e.texi (Incorporating Mail): Use output of "mhparam Path"
- to set MAILDIR.
- (Reading Mail): Document the customization of read-mail-command
- for MH-E.
- (Viewing Attachments): Document mm-discouraged-alternatives.
- (Tool Bar): Fix Texinfo for mh-xemacs-use-tool-bar-flag.
- (Junk): Add more information about the settings of mh-junk-background
- in a program. Add /usr/bin/mh to PATH in examples.
-
-2006-11-12 Richard Stallman <rms@gnu.org>
-
- * woman.texi: Update author address but say he no longer maintains it.
-
2006-11-12 Roberto Rodr,Am(Bguez <lanubeblanca@googlemail.com> (tiny change)
* glossary.texi: Fix typos.
-2006-11-10 Carsten Dominik <carsten.dominik@gmail.com>
-
- * org.texi (ARCHIVE tag): Document C-TAB for forcing cycling of
- archived trees.
- (Checkboxes): Section moved to chapter 5, and extended.
- (The date/time prompt): New section.
- (Link abbreviations): New section.
- (Presentation and sorting): New section.
- (Custom agenda views): Section completely rewritten.
- (Summary): Compare with Planner.
- (Feedback): More info about creating backtraces.
- (Plain lists): Modified example.
- (Breaking down tasks): New section.
- (Custom time format): New section.
- (Time stamps): Document inactive timestamps.
- (Setting tags): More details about fast tag selection.
- (Block agenda): New section.
- (Custom agenda views): Section rewritten.
- (Block agenda): New section.
-
-2006-11-07 Michael Albinus <michael.albinus@gmx.de>
-
- * tramp.texi (Configuration): scp is the default method.
- (Default Method): Use ssh as example for another method.
-
2006-11-06 Richard Stallman <rms@gnu.org>
* emacs.texi (Acknowledgments): Fix name spelling, add Anna Bigatti.
@@ -1123,55 +821,15 @@
* emacs.texi (Top): Rename old node "LaTeX Calendar" to "Writing
Calendar Files."
-2006-10-27 Richard Stallman <rms@gnu.org>
-
- * woman.texi: Downcase nroff/troff/roff.
- (Installation): Chapter deleted. Some xrefs deleted.
- (Background): woman doesn't advise man ;-).
-
-2006-10-26 Roberto Rodr,Am(Bguez <lanubeblanca@googlemail.com> (tiny change)
-
- * ada-mode.texi (Project files, Identifier completion)
- (Automatic Casing, Debugging, Using non-standard file names)
- (Working Remotely): Fix typos.
-
2006-10-23 Richard Stallman <rms@gnu.org>
* abbrevs.texi (Expanding Abbrevs): Expansion happens only when
Abbrev mode is enabled.
-2006-10-20 Masatake YAMATO <jet@gyve.org>
-
- * cc-mode.texi (Sample .emacs File): Added missing `)' in
- sample code `my-c-initialization-hook'.
-
-2006-10-19 Stuart D. Herring <herring@lanl.gov>
-
- * widget.texi: Fix typos.
-
-2006-10-19 Michael Albinus <michael.albinus@gmx.de>
-
- * tramp.texi (Frequently Asked Questions): Remove questions marked with
- "???". There have been no complaints for years, so the information
- must be appropriate.
-
2006-10-16 Richard Stallman <rms@gnu.org>
- * widget.texi: Use @var instead of capitalization.
- Clarify many widget type descriptions.
-
* emacs.texi: Update ISBN.
-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> (tiny change)
-
- * widget.texi: Fix typos.
-
2006-10-11 Kim F. Storm <storm@cua.dk>
* emacs.texi (Acknowledgments): Use @dotless{i}.
@@ -1186,25 +844,6 @@
* 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.
@@ -1213,11 +852,6 @@
* 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
- stored. Add reference to `gnus-parameters'.
-
2006-10-01 Karl Berry <karl@gnu.org>
* custom.texi (Customization Groups): Page break to keep example buffer
@@ -1253,72 +887,24 @@
2006-09-15 Jay Belanger <belanger@truman.edu>
- * calc.texi, emacs.texi, mh-e.texi (GNU GENERAL PUBLIC LICENSE):
+ * emacs.texi (GNU GENERAL PUBLIC LICENSE):
Change "Library Public License" to "Lesser Public License"
throughout. Use "yyyy" to represent year.
-2006-09-15 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Setting tags): Typo fix.
-
-2006-09-14 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Oort Gnus): Add @xref for `mm-fill-flowed'.
-
2006-09-12 Reiner Steib <Reiner.Steib@gmx.de>
* files.texi (Visiting): Add index entry "open file".
- * reftex.texi (Citations Outside LaTeX): Simplify lisp example.
-
-2006-09-12 Paul Eggert <eggert@cs.ucla.edu>
-
- * faq.texi (Escape sequences in shell output): EMACS is now set
- to Emacs's absolute file name, not to "t".
- (^M in the shell buffer): Likewise.
- * misc.texi (Interactive Shell): Likewise.
-
2006-09-11 Richard Stallman <rms@gnu.org>
* building.texi (Compilation Mode): Clarification.
(Grep Searching): Add xref to Compilation Mode.
-2006-09-11 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Mail Source Specifiers): Mention problem of duplicate
- mails with pop3-leave-mail-on-server. Fix wording.
- (Limiting): Improve gnus-summary-limit-to-articles.
- (X-Face): Fix typo.
-
-2006-09-11 Simon Josefsson <jas@extundo.com>
-
- * smtpmail.texi (Authentication): Explain TLS and SSL better, based on
- suggested by Phillip Lord <phillip.lord@newcastle.ac.uk>.
-
2006-09-08 Richard Stallman <rms@gnu.org>
* search.texi (Search): Ref multi-file search commands here.
(Other Repeating Search): Not here.
-2006-09-06 Simon Josefsson <jas@extundo.com>
-
- * smtpmail.texi (Authentication): Mention SSL.
-
-2006-09-01 Eli Zaretskii <eliz@gnu.org>
-
- * 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.
-
-2006-08-29 Michael Albinus <michael.albinus@gmx.de>
-
- 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>.
-
2006-08-28 Richard Stallman <rms@gnu.org>
* windows.texi (Split Window): Update xref.
@@ -1368,25 +954,12 @@
* help.texi (Help Mode): Move node up in file.
-2006-08-15 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Installation, Activation): Split from Installation and
- Activation.
- (Clocking work time): Documented new features.
-
2006-08-15 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Stack Buffer): Explain fringe arrow.
-2006-08-13 Alex Schroeder <alex@gnu.org>
-
- * rcirc.texi (Configuration): Use correct variable in rcirc-authinfo
- example.
-
2006-08-12 Eli Zaretskii <eliz@gnu.org>
- * faq.texi (How to add fonts): New node.
-
* misc.texi (Saving Emacs Sessions): Clarify when desktop is restored
on startup.
@@ -1409,19 +982,11 @@
* dired.texi (Marks vs Flags): Fix typo reported by Ari Roponen
<arjuropo@cc.jyu.fi>.
-2006-08-05 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (New in Emacs 22): Expand.
-
2006-08-04 Eli Zaretskii <eliz@gnu.org>
* cmdargs.texi (Window Size X) <--geometry>: Only width and height
apply to all frames.
-2006-08-03 Michael Olson <mwolson@gnu.org>
-
- * erc.texi: Update for ERC 5.1.4.
-
2006-08-01 Richard Stallman <rms@gnu.org>
* help.texi (Name Help): Add index entries for describe-variable.
@@ -1436,16 +1001,6 @@
* search.texi (Query Replace): Add xref for Dired's Q command.
-2006-07-28 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Oort Gnus): Mention that the Lisp files are now installed
- in .../site-lisp/gnus/ by default.
- [ From gnus-news.texi in the trunk. ]
-
-2006-07-27 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (MIME Commands): Additions for yEnc.
-
2006-07-31 Nick Roberts <nickrob@snap.net.nz>
* building.texi (GDB commands in Fringe): Rename to...
@@ -1475,9 +1030,6 @@
* xresources.texi (GTK styles): Fix texinfo usage.
- * pgg.texi, org.texi, info.texi, forms.texi, flymake.texi:
- * faq.texi: Move periods and commas inside quotes.
-
* commands.texi (User Input): Explain why we teach keyboard cmds.
* xresources.texi, xresmini.texi, search.texi, programs.texi:
@@ -1495,40 +1047,13 @@
* frames.texi (Frame Commands): Mention that focus-follows-mouse
doesn't have effect on MS-Windows.
-2006-07-20 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Error forms): Mention M-+ keybinding for `calc-plus-minus'.
-
-2006-07-18 Chong Yidong <cyd@stupidchicken.com>
-
- * faq.texi (Security risks with Emacs): Document Emacs 22
- file-local-variable mechanism.
-
2006-07-17 Richard Stallman <rms@gnu.org>
* building.texi (Grep Searching): Explain about chaining grep commands.
-2006-07-12 Michael Olson <mwolson@gnu.org>
-
- * erc.texi: Update for ERC 5.1.3.
-
-2006-07-12 Alex Schroeder <alex@gnu.org>
-
- * rcirc.texi: Fix typos.
- (Getting started with rcirc): New calling convention for M-x irc.
- Mention #rcirc. Removed channel tracking.
- (Configuration): Changed the names of all variables that got changed
- recently, eg. rcirc-server to rcirc-default-server. Added
- documentation for rcirc-authinfo, some background for Bitlbee, and
- rcirc-track-minor-mode.
- (Scrolling conservatively): Fixed the xref from Auto Scrolling to just
- Scrolling.
- (Reconnecting after you have lost the connection): Fixed example code
- to match code changes.
-
2006-07-10 Nick Roberts <nickrob@snap.net.nz>
- * killing.texi, gnus.texi, message.texi, mini.texi: Fix typos.
+ * killing.texi, mini.texi: Fix typos.
2006-07-09 Chong Yidong <cyd@stupidchicken.com>
@@ -1547,23 +1072,10 @@
(Windows Misc) [@iftex]: Add an @inforef to the on-line manual for the
rest of this node.
-2006-07-07 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Exporting): Document `C-c C-e' as the prefix for exporting
- commands.
- (Global TODO list): Document the use of the variables
- `org-agenda-todo-ignore-scheduled' and
- `org-agenda-todo-list-sublevels'.
-
-2006-07-05 Richard Stallman <rms@gnu.org>
-
- * faq.texi (Scrolling only one line): Fix xref.
-
2006-07-05 Thien-Thi Nguyen <ttn@gnu.org>
- * building.texi (Lisp Eval):
- * faq.texi (Evaluating Emacs Lisp code):
- Throughout, replace eval-current-buffer with eval-buffer.
+ * building.texi (Lisp Eval): Throughout, replace eval-current-buffer
+ with eval-buffer.
2006-07-05 Nick Roberts <nickrob@snap.net.nz>
@@ -1589,10 +1101,6 @@
2006-07-03 Richard Stallman <rms@gnu.org>
- * rcirc.texi (Scrolling conservatively): Fix xref.
-
- * pcl-cvs.texi (Viewing differences): Usage fix.
-
* search.texi (Other Repeating Search): filename -> file name.
* misc.texi (Narrowing): Minor cleanups.
@@ -1618,46 +1126,12 @@
* help.texi, m-x.texi: Lots of cleanups.
-2006-07-03 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Agenda commands): Document `s' key to save all org-mode
- buffers.
-
2006-06-30 Eli Zaretskii <eliz@gnu.org>
* msdog.texi (ls in Lisp, Windows Keyboard, Windows Mouse)
(Windows Processes, Windows Misc): Shorten the printed version by
selectively conditioning less important portions by @ifnottex.
-2006-06-30 Ralf Angeli <angeli@caeruleus.net>
-
- * pcl-cvs.texi (Customizing Faces): Remove -face suffix from face
- names. Mention `cvs-msg' face.
-
-2006-06-29 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Checkboxes): New section.
-
-2006-06-28 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Embedded LaTeX): Fix typos and implement small improvements
- throughout this chapter.
-
-2006-06-27 Chong Yidong <cyd@stupidchicken.com>
-
- * info.texi (Help-Small-Screen): Clarify placement of "All" and "Top"
- text for standalone vs Emacs info.
- (Help): Clarify header line description. Use mouse-1 for clicks.
- (Help-P): Use mouse-1 for clicks.
- (Help-^L): "Top" and "All" not displayed with dashes in Emacs.
- (Help-^L, Help-M, Help-Int, Search Index, Go to node)
- (Choose menu subtopic): Remove gratuitous Emacs command names.
- (Help-FOO): Put usual behavior first.
- (Help-Xref): Clicking on xrefs works in Emacs.
- (Search Text): Clarify what the default behavior is.
- (Create Info buffer): Fix Emacs window/X window confusion.
- (Emacs Info Variables): Fix for new Emacs init file behavior.
-
2006-06-27 Richard Stallman <rms@gnu.org>
* mini.texi (Minibuffer File): Minor cleanup.
@@ -1687,48 +1161,11 @@
* files.texi (Visiting): Document case-insensitive wildcard matching
under find-file-wildcards.
-2006-06-24 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * gnus.texi (Summary Buffer Lines): Fix typo.
-
-2006-06-23 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Embedded LaTeX): New chapter.
- (Archiving): Section rewritten.
- (Enhancing text): Some parts moved to the new chapter about LaTeX.
-
-2006-06-20 Bill Wohler <wohler@newt.com>
-
- Release MH-E manual version 8.0.1.
-
- * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
- release 8.0.1.
- (Preface): Depend on GNU mailutils 1.0 and higher.
-
-2006-06-19 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (News Headers): Update message-syntax-checks section.
-
-2006-06-19 Karl Berry <karl@gnu.org>
-
- * info.texi (Advanced): Mention C-q, especially with ?.
-
-2006-06-19 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Publishing links): Document the `:link-validation-function'
- property.
- (Extensions and Hacking): New chapter, includes some sections of the
- "Miscellaneous" chapter.
-
2006-06-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macos.texi (Mac Input): Add description of mac-function-modifier.
Now Unicode keyboard layouts work.
-2006-06-10 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Progress logging): New section.
-
2006-06-10 Richard Stallman <rms@gnu.org>
* mule.texi (Recognize Coding): Clarify previous change.
@@ -1747,18 +1184,9 @@
2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca>
- * viper.texi (Viper Specials):
* programs.texi (Comment Commands):
- * gnus.texi (Example Setup):
- * faq.texi (Backspace invokes help):
- * dired-x.texi (Optional Installation Dired Jump):
* custom.texi (Specifying File Variables):
- * calc.texi (Defining Simple Commands): Use ;; instead of ;;; to better
- follow coding conventions.
-
-2006-05-18 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail.
+ Use ;; instead of ;;; to better follow coding conventions.
2006-06-07 Nick Roberts <nickrob@snap.net.nz>
@@ -1766,45 +1194,9 @@
(GDB Graphical Interface): Move description of clicks in fringe...
(GDB commands in the Fringe): ...to here. New node.
-2006-06-06 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (ASCII export): Document indentation adaptation.
- (Setting tags): Document mutually-exclusive tags.
-
2006-06-05 Romain Francoise <romain@orebokech.com>
- * url.texi (irc): Mention new funs `url-irc-rcirc' and `url-irc-erc'.
- Fix typo.
-
- * gnus-faq.texi (Question 8.6): Update reference to the Gnus
- channel (#gnus@irc.freenode.net).
- Fix typos. Update copyright notice.
-
- * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
- (Custom Filling and Breaking, Custom Braces, Syntactic Symbols)
- (Line-Up Functions, Custom Macros):
- * ediff.texi (Window and Frame Configuration)
- (Highlighting Difference Regions, Highlighting Difference Regions):
- * emacs-mime.texi (Display Customization):
- * erc.texi (History):
- * eshell.texi (Known problems):
- * eudc.texi (Overview, BBDB):
- * gnus.texi (NNTP, IMAP, Advanced Scoring Examples)
- (The problem of spam, SpamOracle, Extending the Spam package)
- (Conformity, Terminology):
- * idlwave.texi (Routine Info, Routine Info)
- (Class and Keyword Inheritance, Padding Operators)
- (Breakpoints and Stepping, Electric Debug Mode)
- (Examining Variables, Troubleshooting):
- * org.texi (Creating timestamps):
- * reftex.texi (Commands, Options, Changes):
- * tramp.texi (Inline methods, Password caching)
- (Auto-save and Backup, Issues):
- * vip.texi (Files, Commands in Insert Mode):
- * viper.texi (Emacs Preliminaries, States in Viper)
- (Packages that Change Keymaps, Viper Specials, Groundwork):
- * xresmini.texi (GTK resources):
- Fix various typos.
+ * xresmini.texi (GTK resources): Fix various typos.
2006-06-05 Nick Roberts <nickrob@snap.net.nz>
@@ -1825,22 +1217,10 @@
* screen.texi (Menu Bar): Change menu-bar-start to menu-bar-open.
-2006-05-31 Michael Ernst <mernst@alum.mit.edu>
-
- * ediff.texi: Fix typos.
-
2006-05-31 Richard Stallman <rms@gnu.org>
* basic.texi (Moving Point): Fix previous change.
-2006-05-30 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Small typo fixes.
-
-2006-05-29 Michael Albinus <michael.albinus@gmx.de>
-
- * tramp.texi (Frequently Asked Questions): Disable zsh zle.
-
2006-05-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* screen.texi (Menu Bar): F10 for Gtk+/Lesstif/Lucid menus.
@@ -1849,34 +1229,10 @@
* basic.texi: Many simplifications and improvements in wording.
-2006-05-27 Thien-Thi Nguyen <ttn@gnu.org>
-
- * pcl-cvs.texi: Fix typos.
- (Customization): Say "us".
-
-2006-05-26 Eli Zaretskii <eliz@gnu.org>
-
- * org.texi: Remove bogus @setfilename.
-
-2006-05-26 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (ASCII export): Omit command name.
- (HTML export): Add prefix to all lines in Local Variable example.
- (Acknowledgments): Typeset names in italics.
-
2006-05-26 Nick Roberts <nickrob@snap.net.nz>
* anti.texi (Antinews): Create a node for gdb-ui.
-2006-05-24 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Plain lists): Add new item navigation commands.
- (External links): Document elisp and info links.
- (Custom searches): New section.
- (Publishing): New chapter.
- (HTML export): Include a list of supported CSS classes.
- (Setting tags): Describe the fast-tag-setting interface.
-
2006-05-22 Reiner Steib <Reiner.Steib@gmx.de>
* frames.texi (Menu Bars, Tool Bars): Add index entries.
@@ -1885,10 +1241,6 @@
* dired.texi (Dired Navigation): dired-goto-file is now j.
-2006-05-20 Luc Teirlinck <teirllm@auburn.edu>
-
- * dired-x.texi: ifinfo -> ifnottex.
-
2006-05-20 Eli Zaretskii <eliz@gnu.org>
* mule.texi (Coding Systems): Mention the undecided-* coding systems
@@ -1916,10 +1268,6 @@
* emacs.texi (Copying):
* custom.texi (Init File): ifinfo -> ifnottex.
-2006-05-18 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail.
-
2006-05-17 Richard Stallman <rms@gnu.org>
* files.texi (Diff Mode): Mention C-x `.
@@ -1928,21 +1276,6 @@
* custom.texi (Disabling): Textual cleanups.
-2006-05-12 Reiner Steib <Reiner.Steib@gmx.de>
-
- * message.texi (Interface): Add tool bar customization.
- (MIME): Index and text additions for mml-attach.
- (MIME): Describe mml-dnd-protocol-alist and
- mml-dnd-attach-options.
-
- * gnus.texi (Oort Gnus): Reorder entries in sections.
- Fix some entries.
- (Starting Up): Add references to "Emacs for Heathens" and to
- "Finding the News". Add user-full-name and user-mail-address.
- (Group Buffer Format): Add tool bar customization and update.
- (Summary Buffer): Add tool bar customization.
- (Posting Styles): Add message-alternative-emails.
-
2006-05-12 Glenn Morris <rgm@gnu.org>
* calendar.texi (Displaying the Diary, Format of Diary File):
@@ -1962,48 +1295,18 @@
* mule.texi (Coding Systems, Text Coding): More indexing.
Mention that C-x RET f can set eol conversion.
-2006-05-09 Michael Albinus <michael.albinus@gmx.de>
-
- * tramp.texi (Filename completion): Improve wording.
-
2006-05-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* xresmini.texi (GTK resources): Insert GTK description.
* xresources.texi (GTK resources): metafont should be menufont.
-2006-05-07 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (Using regular expressions): Fix typo.
- (Packages that do not come with Emacs): Fix capitalization.
- (Replacing text across multiple files): Expand node to explain how
- to use `dired-do-query-replace-regexp' in more detail, based on
- suggestion by Eric Hanchrow <offby1@blarg.net>.
-
2006-05-06 Michael Albinus <michael.albinus@gmx.de>
- * mini.texi (Completion Options):
- * tramp.texi (Filename completion): Completion of remote files'
+ * mini.texi (Completion Options): Completion of remote files'
method, user name and host name is active only in partial
completion mode.
-2006-05-06 Bill Wohler <wohler@newt.com>
-
- Release MH-E manual version 8.0.
-
- * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
- release 8.0.
-
-2006-05-06 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (MH-BOOK-HOME): Change from
- http://www.ics.uci.edu/~mh/book/mh to
- http://rand-mh.sourceforge.net/book/mh.
- Replace .htm suffix with .html for MH book files.
- (Using This Manual): Update key binding for getting relevant
- chapter in Info from command key.
- (Ranges): Fix itemx.
-
2006-05-06 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (emacs.dvi):
@@ -2148,8 +1451,6 @@
2006-05-05 Karl Berry <karl@gnu.org>
- * texinfo.tex (\definetextfonsizexi, \definetextfonsizex): New cmds.
- (\fonttextsize): New user-level command to change text font size.
* emacs.texi: Call @fonttextsize 10, inside @tex to avoid
errors from the current release of makeinfo (4.8).
* help.texi (Library Keywords): Change widest word in multitable
@@ -2223,19 +1524,6 @@
* building.texi (Grep Searching): Add lgrep and rgrep.
-2006-04-26 Reiner Steib <Reiner.Steib@gmx.de>
-
- * pgg.texi (Caching passphrase): Fix markup and typos. Simplify.
-
-2006-04-26 Sascha Wilde <wilde@sha-bang.de> (tiny change)
-
- * pgg.texi (Caching passphrase): Add pgg-gpg-use-agent.
-
-2006-04-24 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (Getting Started): Make it more explicit that you need
- to install MH. Add pointers to current MH implementations.
-
2006-04-23 Richard Stallman <rms@gnu.org>
* emacs.texi [TeX]: Use xresmini.texi instead of xresources.texi.
@@ -2245,18 +1533,6 @@
* xresources.texi (Face Resources): Split table into font resources
and the rest. Combine similar attributes for brevity.
-2006-04-21 Bill Wohler <wohler@newt.com>
-
- Release MH-E manual version 7.94.
-
- * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
- release 7.94.
-
-2006-04-21 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Many small fixes.
- (Handling links): Rename from "Managing links".
-
2006-04-21 Eli Zaretskii <eliz@gnu.org>
* emacs-xtra.texi (MS-DOS File Names): Remove section about
@@ -2269,23 +1545,6 @@
(Windows Processes, Windows System Menu): Add index entries and
fix wording.
-2006-04-20 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Spam Statistics Package): Fix typo in @pxref.
- (Splitting mail using spam-stat): Fix @xref.
-
-2006-04-20 Chong Yidong <cyd@stupidchicken.com>
-
- * gnus.texi (Spam Package): Major revision of the text.
- Previouly this node was "Filtering Spam Using The Spam ELisp Package".
-
-2006-04-20 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Time stamps): Better explanation of the purpose of
- different time stamps.
- (Structure editing, Plain lists): More details on how new items
- and headings are inserted.
-
2006-04-18 J.D. Smith <jdsmith@as.arizona.edu>
* misc.texi (Shell Ring): Add notes on saved input when
@@ -2296,37 +1555,10 @@
* misc.texi (Shell Options): Correct default value of
comint-scroll-show-maximum-output.
-2006-04-18 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Formula syntax): Fix link to Calc Manual.
-
-2006-04-17 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Emacsen): Don't support Emacs 20.7 and XEmacs 21.1.
-
-2006-04-17 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (Folders): Update mh-before-quit-hook and
- mh-quit-hook example with code that removes the buffers rather
- than just bury them.
-
2006-04-18 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Watch Expressions): Update.
-2006-04-17 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.53.
-
-2006-04-13 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Updating settings): New section.
- (Visibility cycling): Better names for the startup folding
- options.
- (Exporting): Completely restructured.
- (The very busy C-c C-c key): New section.
- (Summary of in-buffer settings): New section.
-
2006-04-12 Richard Stallman <rms@gnu.org>
* search.texi: Clean up previous change.
@@ -2354,30 +1586,13 @@
these nodes to emacs-xtra.texi, for brevity.
* cmdargs.texi, files.texi: Change cross-references.
-2006-04-11 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi, gnus-faq.texi, message.texi: Gnus v5.10.8 is released.
-
-2006-04-10 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Misc Group Stuff, Summary Buffer, Article Keymap)
- (Server Commands): Key `v' is reserved for users.
-
2006-04-11 J.D. Smith <jdsmith@as.arizona.edu>
* files.texi (Old Versions): Update description of vc-annotate's
use of color to indicate date ranges.
-2006-04-11 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Link format): New section, emphasis on bracket links.
- (External links): Document bracket links.
- (FAQ): Expand to cover shell links and the new link format.
-
2006-04-09 Kevin Ryde <user42@zip.com.au>
- * org.texi (Formula syntax): Typo in node name of calc-eval xref.
-
* sending.texi (Mail Sending): In send-mail-function @pxref smtpmail,
put info and printed manual names the right way around.
@@ -2392,24 +1607,6 @@
* emacs.texi: Move @summarycontents and @contents to the beginning
of the file.
-2006-04-07 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Summary Buffer Lines): Add `*'.
-
-2006-04-07 Jochen K,A|(Bpper <jochen@fhi-berlin.mpg.de>
-
- * gnus.texi (Group Parameters):
- Mention gnus-permanently-visible-groups.
-
-2006-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Face): Fix typo.
-
-2006-04-05 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (X-Face): Clarify.
- (Face): Need Emacs with PNG support.
-
2006-04-08 Kevin Ryde <user42@zip.com.au>
* text.texi (Fill Commands): fill-nobreak-predicate is now a hook.
@@ -2422,21 +1619,12 @@
2006-04-06 Richard Stallman <rms@gnu.org>
- * idlwave.texi: Delete the blocks "not suitable for inclusion with
- Emacs".
-
* programs.texi (Basic Indent): Clarify relationship of C-j to TAB.
2006-04-06 Eli Zaretskii <eliz@gnu.org>
* killing.texi (Rectangles): Add index entry for marking a rectangle.
-2006-04-06 J.D. Smith <jdsmith@as.arizona.edu>
-
- * idlwave.texi: Updated for IDLWAVE version 6.0, factoring out
- blocks not suitable for inclusion with Emacs using variable
- PARTOFEMACS.
-
2006-04-05 Richard Stallman <rms@gnu.org>
* emacs.texi (Top): Update subnode menu.
@@ -2456,10 +1644,6 @@
* misc.texi (Thumbnails): Minor correction.
-2006-04-04 Simon Josefsson <jas@extundo.com>
-
- * gnus.texi (Security): Improve.
-
2006-04-03 Richard Stallman <rms@gnu.org>
* misc.texi (Thumbnails): Minor cleanup.
@@ -2470,16 +1654,6 @@
* texinfo.tex: Update to current version (2006-03-21.13).
-2006-04-02 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (Getting Started, Junk, Bug Reports)
- (MH FAQ and Support): Fix URLs.
-
-2006-03-31 Romain Francoise <romain@orebokech.com>
-
- * gnus.texi (Virtual Groups): `nnvirtual-always-rescan' defaults
- to t, not nil (and has for the past eight years).
-
2006-03-31 Richard Stallman <rms@gnu.org>
* emacs.texi (Top): Update subnode menu.
@@ -2504,66 +1678,17 @@
(Shell): Put eshell xref at the end. Remove eshell from table.
(Thumbnails): New node.
-2006-03-31 Reiner Steib <Reiner.Steib@gmx.de>
-
- * message.texi, gnus.texi: Bump version to 5.11.
-
-2006-03-29 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Top): Add comment about version line.
-
- * message.texi (Top): Ditto. Change to take named versions into
- account.
-
-2006-03-28 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Posting Styles): Add x-face-file to example.
- (X-Face): Refer to posting styles.
-
- * gnus-faq.texi ([5.8]): Add x-face-file.
- ([8.4]): Add links to gmane.emacs.gnus.user and
- gmane.emacs.gnus.general.
-
2006-03-28 Eli Zaretskii <eliz@gnu.org>
* files.texi (File Name Cache): Make it clear that the cache is
not persistent.
-2006-03-27 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-faq.texi: Use .invalid.
- ([5.4]): Fix gnus-posting-styles example.
-
-2006-03-27 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (Emacs/W3): Rename from `w3-mode'. Mention that
- Emacs/W3 needs a new maintainer.
- (Ispell): Update author and version info.
- (Mailcrypt): Mention PGG.
- (New in Emacs 22): Add PGG to the list of new packages.
- Include minor changes from "Ramprasad B" <ramprasad_i82@yahoo.com>
- updating dead URLs.
-
2006-03-25 Karl Berry <karl@gnu.org>
- * ada-mode.texi, autotype.texi, calc.texi, cc-mode.texi, cl.texi,
- * dired-x.texi, ebrowse.texi, ediff.texi, emacs-mime.texi,
- * emacs-xtra.texi, emacs.texi, erc.texi, eshell.texi, eudc.texi,
- * faq.texi, forms.texi, gnu.texi, gnus.texi, idlwave.texi,
- * info.texi, message.texi, mh-e.texi, pcl-cvs.texi, pgg.texi,
- * rcirc.texi, reftex.texi, sc.texi, ses.texi, sieve.texi,
- * speedbar.texi, url.texi, vip.texi, viper.texi, widget.texi,
- * woman.texi: (1) use @copyright{} instead of (C) in typeset text;
+ * emacs-xtra.texi, emacs.texi, gnu.texi:
+ (1) use @copyright{} instead of (C) in typeset text;
(2) do not indent copyright year list (or anything else).
-2006-03-21 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (Folders): Various edits.
-
-2006-03-20 Romain Francoise <romain@orebokech.com>
-
- * gnus.texi (Mail Folders): Grammar fix.
-
2006-03-21 Juanma Barranquero <lekktu@gmail.com>
* files.texi (VC Dired Mode): Remove misplaced brackets.
@@ -2576,21 +1701,6 @@
* help.texi (Help Mode): Document "C-c C-c".
-2006-03-19 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (Replying): Document Mail-Followup-To.
- Change manually-formatted table to multitable. Add debugging info.
- Move description of mh-reply-default-reply-to into paragraph
- that describes its values.
-
-2006-03-17 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi: Use smallexample and smalllisp consistenly.
- (Sending Mail Tour): Update method of entering
- addresses and subject.
- (Sending Mail Tour, Reading Mail Tour, Processing Mail Tour)
- (Adding Attachments, Searching): Update screenshots for Emacs 22.
-
2006-03-16 Luc Teirlinck <teirllm@auburn.edu>
* emacs-xtra.texi (Top): Avoid ugly continuation line in
@@ -2617,173 +1727,25 @@
* emacs.texi (Top): Update node listings.
-2006-03-15 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version number change only.
-
-2006-03-14 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi: Add index entries around each paragraph rather than
- depend on entries from beginning of node. Doing so ensures that
- index entries are less likely to be forgotten if text is cut and
- pasted, and are necessary anyway if the references are on a
- separate page. It seems that makeinfo is now (v. 4.8) only
- producing one index entry per node, so there is no longer any
- excuse not to. Use subheading instead of heading. The incorrect
- use of heading produced very large fonts in Info--as large as the
- main heading.
- (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E
- versions 6 and 7 appeared *around* the time of these Emacs releases.
-
-2006-03-13 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Clean view): Document new startup options.
-
2006-03-12 Richard Stallman <rms@gnu.org>
* calendar.texi: Various cleanups.
-2006-03-11 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi (Preface, More About MH-E, Options, HTML, Folders)
- (Composing, Scan Line Formats): Fix @refs.
- (Getting Started): Define MH profile and MH profile components.
- (Incorporating Mail, Reading Mail, Viewing, Printing)
- (Sending Mail, Forwarding, Editing Drafts, Inserting Letter)
- (Signature, Aliases, Scan Line Formats): Use @code instead of @samp
- for string constants.
- (Tool Bar): Remove spurious quote.
- (Junk): Use ``...'' instead of "...".
- (Scan Line Formats): Replace @samp with @kbd.
-
2006-03-11 Luc Teirlinck <teirllm@auburn.edu>
* search.texi (Regexps): Use @samp for regexp that is not in Lisp
syntax.
-2006-03-10 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (NoCeM): Mention gnus-use-nocem can also be a number.
-
-2006-03-10 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Fancy Mail Splitting): Improve sentences so as to be
- easy to understand.
-
-2006-03-09 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi: Markup fix.
- (Fancy Mail Splitting): Specify new feature.
-
-2006-03-08 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Fancy Mail Splitting): Improve descriptions about
- partial-words matching.
-
-2006-03-07 Reiner Steib <Reiner.Steib@gmx.de>
-
- * emacs-mime.texi (Display Customization): Reword image/.* stuff.
-
- * gnus.texi (Oort Gnus): Add note about `gnus-load'.
- (MIME Commands): Fix mm-discouraged-alternatives.
-
2006-03-08 Luc Teirlinck <teirllm@auburn.edu>
* search.texi (Regexps): More accurately describe which characters
are special in which situations. Recommend _not_ to quote `]' or
`-' when they are not special.
-2006-03-07 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version number change only.
-
-2006-03-06 Bill Wohler <wohler@newt.com>
-
- * mh-e.texi: Move from SourceForge repository to Savannah.
- This is version 7.93, which is a total rewrite from the previous
- edition 1.3 for MH-E version 5.0.2, and corresponds to MH-E
- version 7.93.
-
-2006-03-03 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Oort Gnus): Add `mm-fill-flowed'.
-
-2006-03-01 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Interaction): Add item about `org-mouse.el' by
- Piotr Zielinski.
- (Managing links): Document that also mouse-1 can be used to
- activate a link.
- (Headlines, FAQ): Add entry about hiding leading stars.
- (Miscellaneous): Resort the sections in this chapter to a more
- logical sequence.
-
2006-02-28 Andre Spiegel <spiegel@gnu.org>
* files.texi (Old Versions): Clarify operation of C-x v =.
-2006-02-27 Simon Josefsson <jas@extundo.com>
-
- * emacs-mime.texi (Flowed text): Add mm-fill-flowed. (Sync
- 2004-01-27 from the trunk).
-
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * cc-mode.texi: Rename c-hungry-backspace to
- c-hungry-delete-backwards, at the request of RMS. Leave the old
- name as an alias.
-
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * cc-mode.texi: Correct the definition of c-beginning-of-defun, to
- include the function header within the defun.
-
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * cc-mode.texi: Correct two typos.
-
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * cc-mode.texi (Comment Commands): State that C-u M-; kills any
- existing comment.
- (Electric Keys): Add a justification for electric indentation.
- (Hungry WS Deletion): Clear up the names and complications of the
- BACKSPACE and DELETE keys.
-
-2006-02-23 Juri Linkov <juri@jurta.org>
-
- * faq.texi (Common requests): Move `Turning on auto-fill by
- default' after `Wrapping words automatically'. Move `Working with
- unprintable characters' before `Searching for/replacing newlines'.
- Move `Replacing highlighted text' after `Highlighting a region'.
- Merge `Repeating commands' and `Repeating a command as many times
- as possible' into the former.
- (Packages that do not come with Emacs): Add refs to Gmane and
- etc/MORE.STUFF.
-
-2006-02-23 Juri Linkov <juri@jurta.org>
-
- * faq.texi (Newsgroup archives): Update URLs of GNU mail archives.
- (Reporting bugs): Suggest using `M-x report-emacs-bug'.
- Add xref to `(emacs)Reporting Bugs'.
- (Getting a printed manual): Add URL to other formats of the manual.
- (Common requests): Fix menu.
- (Highlighting a region): Remove ref to `Turning on syntax highlighting'.
- (Horizontal scrolling): Mention `truncate-partial-width-windows'.
- (Inserting text at the beginning of each line): Add pxref to
- `Changing the included text prefix'.
- (Forcing the cursor to remain in the same column): Mention `track-eol'
- and `set-goal-column'. Add pxref to `(emacs)Moving Point'.
- (Replacing text across multiple files): Add keybinding `Q' for
- `dired-do-query-replace'.
-
-2006-02-22 Carsten Dominik <dominik@science.uva.nl>
-
- * reftex.texi: Version number and date change only.
-
- * org.texi (Internal Links): Rewrite to cover the modified
- linking system.
-
2006-02-21 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Watch Expressions): Update and describe
@@ -2801,10 +1763,6 @@
* building.texi (Watch Expressions): Update and be more precise.
-2006-02-17 Eli Zaretskii <eliz@gnu.org>
-
- * faq.texi: Remove the coding cookie, it's not needed anymore.
-
2006-02-15 Francesco Potort,Al(B <pot@gnu.org>
* maintaining.texi (Create Tags Table): Explain why the
@@ -2839,17 +1797,11 @@
2006-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* display.texi (Standard Faces):
- * faq.texi (Colors on a TTY):
* files.texi (Visiting):
* frames.texi (Clipboard):
* glossary.texi (Glossary) <Clipboard>:
* xresources.texi (X Resources): Mention Mac OS port.
-2006-02-12 Karl Berry <karl@gnu.org>
-
- * faq.texi (Emacs for Atari ST): Use Sch@"auble instead of the
- 8-bit accented a.
-
2006-02-12 Richard M. Stallman <rms@gnu.org>
* building.texi (Building): Clarify topic in intro.
@@ -2883,31 +1835,15 @@
* macos.texi (Mac International): Rename "fontset-mac" to
"fontset-standard".
-2006-02-09 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Gnus Versions): Add history beyond start of Oort.
-
2006-02-09 Mathias Dahl <mathias.dah@gmail.com>
* dired.texi (Tumme): Basic documentation for Tumme added.
-2006-02-08 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (Top): Remove paragraph about the FAQ being a
- transitional document, etc.
- (Searching for/replacing newlines): New node.
- (Yanking text in isearch): New node.
- (Inserting text at the beginning of each line): Rename and make
- more general, mention `M-;' in Message mode.
-
2006-02-07 Luc Teirlinck <teirllm@auburn.edu>
* mule.texi (International):
* programs.texi (Basic Indent): Fix typos.
- * faq.texi (Meta key does not work in xterm)
- (Emacs does not display 8-bit characters)
- (Inputting eight-bit characters):
* custom.texi (Minor Modes):
* display.texi (Text Display):
* commands.texi (Text Characters): Update xrefs.
@@ -3011,15 +1947,6 @@
* anti.texi: Minor cleanup.
-2006-02-06 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (VM): VM now at version 7.19.
- Set myself as maintainer of this file.
-
-2006-02-04 Michael Olson <mwolson@gnu.org>
-
- * erc.texi (History): Note that ERC is now included with Emacs.
-
2006-02-03 Eli Zaretskii <eliz@gnu.org>
* custom.texi (Init File, Find Init): Add cross-references to
@@ -3084,12 +2011,6 @@
* buffers.texi: Minor clarifications.
-2006-01-31 Romain Francoise <romain@orebokech.com>
-
- * message.texi (Message Headers): Explain what
- `message-alternative-emails' does in more detail.
- Update copyright year.
-
2006-01-31 Richard M. Stallman <rms@gnu.org>
* display.texi (Scrolling, Horizontal Scrolling, Follow Mode):
@@ -3138,10 +2059,6 @@
* basic.texi (Basic Undo): Rename from Undo. Most of text
moved to new Undo node.
-2006-01-30 Juanma Barranquero <lekktu@gmail.com>
-
- * makefile.w32-in (clean): Add newsticker, sieve, pgg, erc and rcirc.
-
2006-01-29 Chong Yidong <cyd@stupidchicken.com>
* basic.texi (Continuation Lines, Inserting Text):
@@ -3176,41 +2093,9 @@
* commands.texi: Minor cleanups. Refer to "graphical" terminals,
rather than X.
- * cc-mode.texi (Indentation Commands): Inserts newline, not "linefeed".
-
* basic.texi: Minor cleanups.
(Undo): selective-undo moved.
-2006-01-29 Michael Olson <mwolson@gnu.org>
-
- * makefile.w32-in ($(infodir)/erc, erc.dvi): New targets.
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add ERC.
-
- * faq.texi (New in Emacs 22): Mention ERC.
-
-2006-01-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * rcirc.texi: Capitalize dir entry for consistency with the entry
- in info/dir and other entries in the Emacs category.
- Fix typos. Delete trailing whitespace.
-
-2006-01-28 Bj,Av(Brn Lindstr,Av(Bm <bkhl@elektrubadur.se>
-
- * rcirc.texi: Some @cindex changes, some changes from @kbd to @key.
-
-2006-01-27 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in ($(infodir)/rcirc, rcirc.dvi): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add rcirc.
-
- * Makefile.in (../info/rcirc, rcirc.dvi): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add rcirc.
-
-2006-01-27 Alex Schroeder <alex@gnu.org>
-
- * rcirc.texi: New file.
-
2006-01-25 Luc Teirlinck <teirllm@auburn.edu>
* anti.texi (Antinews): Various corrections and additions.
@@ -3220,32 +2105,12 @@
* custom.texi (Easy Customization, Customization Groups)
(Browsing Custom): Mention links along with buttons.
- * widget.texi (User Interface): Add S-TAB for widget-backward.
-
-2006-01-22 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.52.
-
- * tramp.texi (Frequently Asked Questions): Remove Ange-FTP item.
- Add Tramp disabling item. New item for common connection problems.
- (various): Apply "ftp" as method for the download URL.
- (Bug Reports): Refer to FAQ for common problems.
-
2006-01-21 Eli Zaretskii <eliz@gnu.org>
- * widget.texi (User Interface): Use @key for TAB.
-
* text.texi (TeX Print): Use @key for TAB.
- * ses.texi (Formulas, Printer functions): Use @key for TAB.
-
* kmacro.texi (Keyboard Macro Step-Edit): Use @key for TAB.
- * ebrowse.texi (Switching to Tree, Symbol Completion): Use @key
- for TAB.
-
- * cc-mode.texi (Indentation Calculation): Use @key for TAB.
-
2006-01-15 Sven Joachim <svenjoac@gmx.de> (tiny change)
* files.texi (File Aliases): Don't claim that usually separate
@@ -3261,80 +2126,24 @@
* programs.texi (Hungry Delete): Upcase @key argument.
-2006-01-16 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi: Update copyright.
-
2006-01-16 Juri Linkov <juri@jurta.org>
* display.texi (Standard Faces): Add `mode-line-buffer-id'.
Move `mode-line-highlight' before `mode-line-buffer-id'.
-2006-01-13 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Article Washing): Additions.
-
-2006-01-08 Alex Schroeder <alex@gnu.org>
-
- * pgg.texi (Caching passphrase): Rewording.
-
2006-01-14 Richard M. Stallman <rms@gnu.org>
* basic.texi (Inserting Text): Minor cleanup.
-2006-01-13 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Agenda commands): Document tags command.
-
2006-01-11 Luc Teirlinck <teirllm@auburn.edu>
* custom.texi (Changing a Variable, Face Customization):
Update for changes in Custom menus.
-2006-01-10 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (RSS): Document nnrss-wash-html-in-text-plain-parts.
-
-2006-01-06 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (RSS): Addition.
-
-2005-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Summary Post Commands): Fix function bound to `S O p'.
-
-2005-12-19 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-mime.texi (Display Customization): Add setting example to
- mm-discouraged-alternatives.
-
-2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * flymake.texi (Obtaining Flymake): Remove chapter since Emacs's
- version is the canonical version.
-
-2006-01-08 Alex Schroeder <alex@gnu.org>
-
- * pgg.texi (Caching passphrase): Rewording.
-
-2006-01-06 Eli Zaretskii <eliz@gnu.org>
-
- * flymake.texi (Obtaining Flymake): Update Flymake's CVS
- repository URL.
-
-2006-01-06 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Removed the accidentally re-added empty line in the
- direntry.
-
2006-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macos.texi (Mac International): Undo last change.
-2006-01-05 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Agenda Views): Chapter reorganized.
-
2006-01-02 Chong Yidong <cyd@stupidchicken.com>
* custom.texi (Custom Themes): Describe the new
@@ -3344,16 +2153,6 @@
* basic.texi (Position Info): Update example.
-2005-12-29 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (Using Customize): New node.
-
-2005-12-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * org.texi: Remove blank line in @direntry. It is non-standard
- and recursively produces blank lines all over the dir file (when
- using Texinfo 4.8).
-
2005-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* frames.texi (Dialog Boxes): Add x-gtk-show-hidden-files.
@@ -3380,23 +2179,10 @@
"Similar" refer to the correct item.
(Indirect Buffers): Minor rewording.
-2005-12-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * widget.texi (atoms): Delete obsolete remark about `file' widget.
-
2005-12-20 Juri Linkov <juri@jurta.org>
* files.texi (VC Status): Put P and N near p and n.
-2005-12-20 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Tags): Boolean logic documented.
- (Agenda Views): Document custom commands.
-
-2005-12-20 David Kastrup <dak@gnu.org>
-
- * faq.texi (AUCTeX): Update version and mailing list info.
-
2005-12-19 Richard M. Stallman <rms@gnu.org>
* programs.texi (Electric C): Delete the info about newline control.
@@ -3424,53 +2210,17 @@
* frames.texi (Tool Bars): Mention that you can turn off tool bars
permanently via the customize interface.
-2005-12-17 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (MIME Commands): Mention addition of
- multipart/alternative to gnus-buttonized-mime-types and add xref
- to mm-discouraged-alternatives.
-
- * emacs-mime.texi (Display Customization): Mention addition of
- "image/.*" and add xref to gnus-buttonized-mime-types in the
- mm-discouraged-alternatives section.
-
-2005-12-16 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Tags): New section.
- (Agenda Views): Chapter reorganized.
-
2005-12-16 Ralf Angeli <angeli@iwi.uni-sb.de>
* killing.texi (Killing by Lines): Document `kill-whole-line'
function.
-2005-12-16 Eli Zaretskii <eliz@gnu.org>
-
- * org.texi (Internal Links): Add a missing comma after an @xref.
-
2005-12-16 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
* buffers.texi (Select Buffer): Change `prev-buffer' to
`previous-buffer'. Indicate that these functions use a frame
local buffer list.
-2005-12-14 Chong Yidong <cyd@stupidchicken.com>
-
- * faq.texi (Filling paragraphs with a single space): No need to
- change sentence-end now.
-
-2005-12-13 Romain Francoise <romain@orebokech.com>
-
- * faq.texi (Scrolling only one line): Use `scroll-conservatively'.
-
-2005-12-12 Jay Belanger <belanger@truman.edu>
-
- * faq.texi (Calc): Update version number.
-
-2005-12-12 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Progress Logging): New section.
-
2005-12-12 Richard M. Stallman <rms@gnu.org>
* custom.texi (Easy Customization): Change menu comment.
@@ -3487,58 +2237,6 @@
* files.texi (Old Versions): Use @table.
-2005-12-10 Romain Francoise <romain@orebokech.com>
-
- Update the Emacs FAQ for the 22.1 release.
-
- * faq.texi: Set VER to `22.1'.
- (Basic editing): Explain how to use localized versions of the
- Tutorial. Mention that `C-h r' displays the manual. Delete
- obsolete WWW link to an Emacs 18 tutorial.
- (Getting a printed manual): Point to the new locations of the
- manuals on the GNU Web site.
- (Emacs Lisp documentation): Explain that the Emacs Lisp manual is
- available via Info (it was previously distributed separately).
- (Installing Texinfo documentation): The latest version of Texinfo
- is 4.8, not 4.0.
- (Informational files for Emacs): COPYING is the GNU General Public
- License, not the Emacs General Public License.
- (Informational files for Emacs): Delete obsolete link to the
- GNUinfo pages as they have been removed from the GNU Web site.
- (New in Emacs 22): New node.
- (Setting up a customization file): Say that most packages support
- Customize nowadays.
- (Colors on a TTY): Delete reference to instructions on how to
- enable syntax highlighting, it is now enabled by default.
- (Turning on abbrevs by default): Emacs now reads the abbrevs file
- at startup automatically.
- (Controlling case sensitivity): Mention `M-c' in isearch.
- (Using an already running Emacs process): Emacs now creates the
- socket in `/tmp/emacsUID'. Fix typos. Change default location of
- gnuserv. As emacsclient can now run Lisp code as well, delete a
- sentence praising gnuserv for that. Simplify description of how
- the client/server operation works.
- (Compiler error messages): Delete obsolete text (compile.el has
- been rewritten).
- (Indenting switch statements): Fix typo.
- (Matching parentheses): Simplify setup instructions, mention the
- menu bar item in the Options menu.
- (Repeating a command as many times as possible): Mention `C-x e'.
- (Going to a line by number): Mention new keymap and bindings
- `M-g M-g', `M-g M-p' and `M-g M-n'.
- (Turning on syntax highlighting): Now on by default. Simplify.
- (Replacing highlighted text): Use `1', not `t'.
- (Problems with very large files): The maximum size is now 256MB on
- 32-bit machines.
- (^M in the shell buffer): Mention `comint-process-echoes'.
- (Emacs for Apple computers): Emacs 22 has native support for Mac
- OS X.
- (Translating names to IP addresses): Delete node.
- (Binding keys to commands): Fix typo.
- (SPC no longer completes file names): New node.
- (MIME with Emacs mail packages): Delete section about the Emacs
- MIME FAQ (it's not reachable anymore).
-
2005-12-10 David Koppelman <koppel@ece.lsu.edu>
* display.texi (Highlight Interactively): Include
@@ -3559,56 +2257,6 @@
prefix keys even when mark is active. Decribe that RET moves
cursor to next corner in rectangle; clarify insert around rectangle.
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * cc-mode.texi: The manual has been extensively revised: the
- information about using CC Mode has been separated from the larger
- and more difficult chapters about configuration. It has been
- updated for CC Mode 5.31.
-
-2005-12-05 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * pgg.texi (User Commands): Fix description of pgg-verify-region.
- (Selecting an implementation): Fix descriptions.
-
-2005-11-30 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (Various Message Variables): Addition.
-
-2005-11-29 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi: Fix default values.
-
-2005-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (Header Commands): Clarify descriptions of
- message-cross-post-followup-to, message-reduce-to-to-cc, and
- message-insert-wide-reply.
- (Various Commands): Fix kindex for message-kill-to-signature;
- clarify description of message-tab.
-
-2005-11-22 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (Mailing Lists): Fix description about MFT.
-
- * gnus.texi (Emacs Lisp): Use ~/.gnus.el instead of ~/.emacs.
-
-2005-11-17 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Slow Terminal Connection): Replace old description
- with new one.
-
-2005-11-16 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Oort Gnus): Use ~/.gnus.el instead of ~/.emacs;
- replace X-Draft-Headers with X-Draft-From.
-
-2005-11-14 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Various Various): Fix the default value of
- nnheader-max-head-length.
- (Gnus Versions): Fix typo.
-
2005-12-08 Luc Teirlinck <teirllm@auburn.edu>
* custom.texi (Customization): Use xref to elisp manual for
@@ -3631,11 +2279,6 @@
* mini.texi (Completion Commands, Completion):
In file name input, SPC does not do completion.
-2005-12-08 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Structure editing): Document new functionality of
- M-RET.
-
2005-12-08 Nick Roberts <nickrob@snap.net.nz>
* building.texi (GDB Graphical Interface): Explain screen size
@@ -3643,16 +2286,6 @@
(Other GDB User Interface Buffers): Describe features specific to
GDB 6.4.
-2005-12-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * org.texi (Internal Links): Fix Texinfo usage.
-
-2005-12-06 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (TODO basics): Document the global todo list.
- (TODO items): Documents sparse tree for specific TODO
- keywords.
-
2005-12-01 Nick Roberts <nickrob@snap.net.nz>
* building.texi (GDB User Interface Layout): Describe how to
@@ -3662,19 +2295,6 @@
(Other GDB User Interface Buffers): Describe how to change a
register value.
-2005-11-30 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Plain Lists): Typos fixed.
-
-2005-11-28 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Change references of `M-#' to `C-x *' prefix.
-
-2005-11-24 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Structure editing): New item moving commands added.
- (Plain Lists): New section.
-
2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macos.texi (Mac Input): Remove description of
@@ -3718,14 +2338,6 @@
* files.texi (Renaming and VC): Some back-ends don't
handle renaming.
-2005-11-18 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (FAQ): Document `org-table-tab-jumps-over-hlines'.
- (Agenda): Document commands `org-cycle-agenda-files' and
- `org-agenda-file-to-front'
- (Built-in table editor): Document `org-table-sort-lines'.
- (HTML formatting): Export of hand-formatted lists.
-
2005-11-17 Juri Linkov <juri@jurta.org>
* emacs.texi (Top):
@@ -3745,27 +2357,6 @@
list of words or a regexp. Add C-h d for apropos-documentation.
Describe apropos-documentation-sort-by-scores user option.
-2005-11-10 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (XVarious): Fix description of gnus-use-toolbar; add
- new variable gnus-toolbar-thickness.
-
-2005-11-08 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (XVarious): Revert description of gnus-use-toolbar.
-
-2005-11-07 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (X-Face): Fix description.
- (XVarious): Remove gnus-xmas-logo-color-alist and
- gnus-xmas-logo-color-style; fix description of gnus-use-toolbar.
-
-2005-11-01 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Group Parameters): Mention new variable
- gnus-parameters-case-fold-search.
- (Home Score File): Addition.
-
2005-11-09 Luc Teirlinck <teirllm@auburn.edu>
* killing.texi (CUA Bindings): Add @section.
@@ -3792,23 +2383,6 @@
* misc.texi (Shell Mode): Describe how to activate password echoing.
-2005-11-04 Ulf Jasper <ulf.jasper@web.de>
-
- * newsticker.texi: VERSION changed to 1.9. Updated UPDATED.
- (Overview): List supported feed types.
- (Installation): No installation necessary when using autoload.
- (Configuration): Rename "RSS" to "news".
-
-2005-11-04 Ken Manheimer <ken.manheimer@gmail.com>
-
- * pgg.texi (User Commands): Document additional passphrase
- argument for pgg-encrypt-*, pgg-decrypt-*, and pgg-sign-* functions.
- (Backend methods): Likewise for corresponding pgg-scheme-* functions.
-
-2005-11-04 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version number changed to 3.19.
-
2005-11-04 Romain Francoise <romain@orebokech.com>
* mark.texi (Mark Ring): Fix typo.
@@ -3850,13 +2424,6 @@
* anti.texi (Antinews): Likewise.
-2005-10-29 Sascha Wilde <wilde@sha-bang.de>
-
- * pgg.texi (How to use): Update the example to add autoload of
- pgg-encrypt-symmetric-region.
- (User Commands): Document pgg-encrypt-symmetric-region.
- (Backend methods): Document pgg-scheme-encrypt-symmetric-region.
-
2005-10-28 Bill Wohler <wohler@newt.com>
* help.texi (Help): Help mode now creates hyperlinks for URLs.
@@ -3867,11 +2434,6 @@
* trouble.texi (Memory Full): Mention !MEM FULL! in mode line.
-2005-10-27 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Predefined Units): Fix the symbol for a TeX points,
- mention other TeX-related units.
-
2005-10-25 Nick Roberts <nickrob@snap.net.nz>
* building.texi (GDB Graphical Interface): Describe
@@ -3881,62 +2443,20 @@
* custom.texi (Init File): Recommend when to use site-start.el.
-2005-10-23 Lars Hansen <larsh@soem.dk>
-
- * dired-x.texi (Miscellaneous Commands): Replace
- dired-do-relative-symlink by dired-do-relsymlink and
- dired-do-relative-symlink-regexp by dired-do-relsymlink-regexp.
-
-2005-10-23 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Predefined Units): Use `alpha' for the fine structure
- constant.
-
-2005-10-23 Michael Albinus <michael.albinus@gmx.de>
-
- * faq.texi (Bugs and problems): Replace
- `dired-move-to-filename-regexp' by
- `directory-listing-before-filename-regexp'.
-
-2005-10-22 Eli Zaretskii <eliz@gnu.org>
-
- * newsticker.texi (UPDATED): Set value.
-
-2005-10-17 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Document Groups): Remove duplicate item.
-
2005-10-21 Juri Linkov <juri@jurta.org>
* custom.texi (Examining): Mention accessing the old variable
value via M-n in set-variable.
-2005-10-21 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Summary): Mention iCalendar support.
- (Exporting): Document iCalendar support.
-
2005-10-18 Romain Francoise <romain@orebokech.com>
* files.texi (Version Systems): Capitalize GNU.
- * viper.texi (Viper Specials): Likewise.
-
2005-10-18 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Compilation Mode): Remove redundant paragraph.
(Watch Expressions): Remove paragraph to reflect code change.
-2005-10-17 Juri Linkov <juri@jurta.org>
-
- * info.texi (Getting Started, Search Index, Expert Info):
- Fix wording.
- (Search Text): Replace `echo area' with `mode line'.
- (Search Index): Both `i' and `,' find all index entries.
- Replace example `C-f' with `C-l' (which exists in index of Info
- manual) and delete spaces in its keyboard input sequence.
- Delete unnecessary explanations about literal characters.
-
2005-10-16 Richard M. Stallman <rms@gnu.org>
* building.texi (Compilation Mode, Compilation): Clarified.
@@ -3945,29 +2465,6 @@
* misc.texi (Saving Emacs Sessions): Mention savehist library.
-2005-10-14 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Document Server Internals): Addition.
-
-2005-10-13 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (A note on namespaces): Fix RFC reference.
-
-2005-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (RSS): Fix key description.
-
-2005-10-11 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi: Emacs/w3 -> Emacs/W3.
- (Browsing the Web): Fix description.
- (Web Searches): Ditto.
- (Customizing W3): Ditto.
-
-2005-10-07 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Maildir): Clarify expire-age and expire-group.
-
2005-10-13 Kenichi Handa <handa@m17n.org>
* basic.texi (Position Info): Fix previous change.
@@ -3981,29 +2478,6 @@
* basic.texi (Position Info): Describe the case that Emacs shows
"part of display ...".
-2005-10-11 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Integration): Mention using `a i' to compute definite
- integrals.
-
-2005-10-11 Juri Linkov <juri@jurta.org>
-
- * info.texi: Rearrange nodes.
- (Top): Update menu. Change ref `Info for Experts' to
- `Advanced Info Commands'.
- (Getting Started): Fix description of manual's parts.
- (Help-Int): Change xref `Info Search' to `Search Index', and
- `Expert Info' to `Advanced'.
- (Advanced): Move node one level up.
- (Search Text, Search Index): New nodes split out from `Info Search'.
- (Go to node, Choose menu subtopic, Create Info buffer): New nodes
- split out from `Advanced'.
- (Advanced, Emacs Info Variables): De-document editing an Info file
- in Info.
- (Emacs Info Variables): Move node from `Expert Info' to `Advanced'.
- (Creating an Info File): Delete node and move its text to
- `Expert Info'.
-
2005-10-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* cmdargs.texi (Icons X): -nb => -nbi.
@@ -4018,11 +2492,6 @@
(Watch Expressions): Explain how to make speedbar global.
(Other GDB User Interface Buffers): Make references more precise.
-2005-10-10 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi (Workflow states): Documented that change in keywords
- becomes active only after restart of Emacs.
-
2005-10-09 Richard M. Stallman <rms@gnu.org>
* frames.texi (Speedbar): Clarify the text.
@@ -4038,26 +2507,11 @@
* cmdargs.texi (Icons X): Removed options -i, -itype, --icon-type,
added -nb, --no-bitmap-icon.
-2005-10-08 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.51.
-
-2005-10-08 Nick Roberts <nickrob@snap.net.nz>
-
- * speedbar.texi (Introduction): Describe new location of speedbar
- on menubar.
- (Basic Key Bindings): Remove descriptions of bindings that have
- been removed.
-
2005-10-07 Nick Roberts <nickrob@snap.net.nz>
* building.texi (GDB Graphical Interface): Add variables and
functions to indices. Be more precise.
-2005-10-05 Nick Roberts <nickrob@snap.net.nz>
-
- * speedbar.texi (GDB): Describe use of watch expressions.
-
2005-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* frames.texi (Drag and Drop): Remove the x- from
@@ -4068,37 +2522,14 @@
* mini.texi (Minibuffer): The default value now appears before the
colon in minibuffer prompts.
-2005-09-28 Simon Josefsson <jas@extundo.com>
-
- * message.texi (IDNA): Fix.
-
-2005-09-28 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (NNTP): Remove nntp-buggy-select, nntp-read-timeout,
- nntp-server-hook, and nntp-warn-about-losing-connection; fix
- description of nntp-open-connection-function.
- (Common Variables): Fix descriptions.
-
-2005-09-26 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Server Buffer Format): Document the %a format spec.
-
2005-09-25 Richard M. Stallman <rms@gnu.org>
* search.texi (Regexp Search): Doc search-whitespace-regexp.
-2005-09-22 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Mail): Fix gnus-confirm-mail-reply-to-news entry.
-
2005-09-20 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
* text.texi (Paragraphs): Correction about Paragraph-Indent Text mode.
-2005-09-23 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi Version 3.16.
-
2005-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* emacs.texi (Top): Update submenus from macos.texi.
@@ -4124,37 +2555,6 @@
`mac-get-file-creator', `mac-set-file-type', `mac-get-file-type',
and `mac-get-preference'.
-2005-09-19 Miles Bader <miles@gnu.org>
-
- * newsticker.texi: Get rid of CVS keywords.
-
-2005-09-15 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Finding the Parent): Fix description of how Gnus
- finds article.
-
-2005-09-14 Jari Aalto <jari.aalto@cante.net>
-
- * gnus.texi (Advanced Scoring Examples): New examples to teach how
- to drop off non-answered articles.
-
-2005-09-19 Juanma Barranquero <lekktu@gmail.com>
-
- * makefile.w32-in (newsticker.dvi): Use parentheses instead of curly
- braces (which are unsupported by NMAKE) for macro `srcdir'.
-
-2005-09-17 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets.
- (../info/newsticker, newsticker.dvi): New targets.
-
-2005-09-17 Ulf Jasper <ulf.jasper@web.de>
-
- * newsticker.texi: Replace @command with @code. Replace @example
- with @lisp.
- (Top): Added explanations to menu items.
- (GNU Free Documentation License): Removed.
-
2005-09-16 Romain Francoise <romain@orebokech.com>
Update all files to specify GFDL version 1.2.
@@ -4175,11 +2575,6 @@
Clarify effect of write-region-inhibit-fsync.
(Misc File Ops): Say write-region-inhibit-fsync affects write-region.
- * newsticker.texi: Fix @setfilename.
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets.
- (../info/newsticker, newsticker.dvi): New targets.
-
2005-09-14 Romain Francoise <romain@orebokech.com>
* files.texi (Saving): Mention write-region-inhibit-fsync.
@@ -4193,31 +2588,6 @@
* search.texi (Search Case): Mention vars that control
case-fold-search for various operations.
-2005-08-30 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.15.
-
-2005-08-29 Luc Teirlinck <teirllm@auburn.edu>
-
- * ses.texi: Combine all three indices into one.
- Correct a few typos.
-
-2005-08-19 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-mime.texi (time-date): Fix description of safe-date-to-time.
-
-2005-08-18 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-mime.texi (Handles): Remove duplicate item.
- (Encoding Customization): Fix the default value for
- mm-coding-system-priorities.
- (Charset Translation): Emacs doesn't use mm-mime-mule-charset-alist.
- (Basic Functions): Fix reference.
-
-2005-08-09 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (Charsets): Fj hierarchy uses iso-2022-jp.
-
2005-08-22 Juri Linkov <juri@jurta.org>
* display.texi (Standard Faces): Merge the text from
@@ -4230,17 +2600,11 @@
2005-08-18 Richard M. Stallman <rms@gnu.org>
- * faq.texi (Obtaining the FAQ): Delete refs to Lerner's email
- and web site.
-
* trouble.texi (Unasked-for Search):
Delete xref to Keyboard Translations.
* glossary.texi (Glossary): Delete xref.
- * faq.texi (Swapping keys): Xref for normal-erase-is-backspace-mode,
- not keyboard-translate.
-
* custom.texi (Minor Modes): Say that the list here is not complete.
(Keyboard Translations): Node deleted.
(Disabling): Delete xref to it.
@@ -4284,8 +2648,6 @@
* search.texi (Regexp Backslash, Regexp Example): New nodes split
out of Regexps.
- * faq.texi (Using regular expressions): Fix xref.
-
2005-08-09 Juri Linkov <juri@jurta.org>
* building.texi (Compilation): Use `itemx' instead of `item'.
@@ -4303,33 +2665,6 @@
* calendar.texi (Scroll Calendar): Document < and > in calendar.
-2005-08-09 Juri Linkov <juri@jurta.org>
-
- * info.texi (Help-P): Replace `Prev' with `Previous'.
- (Help-M, Help-Xref): Add S-TAB.
- (Help-FOO): Update `u' command.
- (Help-Xref): Move info about Mouse-2 from `Help-Int'.
- Update info about visibility of xref parts.
- (Help-Int): Fix `m' command. Rename `Info-last' to
- `Info-history-back'. Add `Info-history-forward'.
- (Advanced): Fix `g*' and `M-n' commands.
- (Info Search): Add `index-apropos' in stand-alone browser.
- Add isearch commands.
- (Emacs Info Variables): Remove `Info-fontify'.
- Add `Info-mode-hook'. Update face names.
- Add `Info-fontify-maximum-menu-size',
- `Info-fontify-visited-nodes', `Info-isearch-search'.
-
-2005-08-07 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.50.
-
- * tramp.texi: Use @option{} consequently for method names.
- (Inline methods, External transfer methods): Remove references to
- Cygwin.
- (Issues with Cygwin ssh): Explain trouble with Cygwin's ssh
- implementation.
-
2005-08-06 Eli Zaretskii <eliz@gnu.org>
* mule.texi (Coding Systems): Rephrase the paragraph about
@@ -4345,42 +2680,22 @@
($(infodir)/dir): New target, produced by running
multi-install-info.bat.
-2005-07-27 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Startup Files): Fix name of gnus-site-init-file.
- Mention that gnus-init-file is not read when Emacs is invoked with
- --no-init-file or -q.
-
2005-07-22 Eli Zaretskii <eliz@gnu.org>
* files.texi (Quoted File Names): Add index entry.
-2005-07-19 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.14.
-
-2005-07-04 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.13.
-
2005-07-19 Juri Linkov <juri@jurta.org>
* files.texi (Comparing Files): Mention resync for `compare-windows'.
2005-07-18 Juri Linkov <juri@jurta.org>
- * calc.texi (Time Zones, Logical Operations):
- * cl.texi (Overview):
* custom.texi (Easy Customization):
* files.texi (Old Versions):
* frames.texi (Wheeled Mice):
* mule.texi (Specify Coding):
- * org.texi (TODO types):
- * sc.texi (Emacs 18 MUAs):
- * speedbar.texi (Top):
* text.texi (Cell Justification):
* trouble.texi (After a Crash):
- * url.texi (History):
* xresources.texi (GTK styles):
Delete duplicate duplicate words.
@@ -4394,10 +2709,6 @@
* mini.texi (Completion Commands): Fix command name for ?.
-2005-07-16 Johan Bockgard <bojohan@users.sourceforge.net> (tiny change)
-
- * cl.texi (Type Predicates): Document `atom' type.
-
2005-07-16 Eli Zaretskii <eliz@gnu.org>
* display.texi (Standard Faces): Explain that customization of
@@ -4448,25 +2759,9 @@
Update FSF's address in GPL notices.
- * calc.texi (Copying):
* doclicense.texi (GNU Free Documentation License):
- * faq.texi (Contacting the FSF):
- * mh-e.texi (Copying):
* trouble.texi (Checklist): Update FSF's address.
-2005-07-03 Richard M. Stallman <rms@gnu.org>
-
- * flymake.texi (Example -- Configuring a tool called directly):
- Update name of flymake-build-relative-filename.
-
-2005-06-29 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (NoCeM): gnus-nocem-verifyer defaults to pgg-verify.
-
-2005-06-29 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.12.
-
2005-06-24 Richard M. Stallman <rms@gnu.org>
* display.texi (Text Display): Change index entries.
@@ -4476,8 +2771,6 @@
* makefile.w32-in (MAKEINFO): Use --force.
(INFO_TARGETS, DVI_TARGETS): Make identical to the lists in
Makefile.in.
- (gnus.dvi): Use "..." to quote Sed args, so that it works with
- more shells.
2005-06-23 Richard M. Stallman <rms@gnu.org>
@@ -4492,11 +2785,6 @@
and put it in a separate node. Add nobreak-space and
escape-glyph.
- * speedbar.texi (Creating a display): Texinfo usage fixes.
-
- * tramp.texi (Customizing Completion, Auto-save and Backup):
- Texinfo usage fixes.
-
2005-06-23 Lute Kamstra <lute@gnu.org>
* mule.texi (Select Input Method): Fix typo.
@@ -4514,22 +2802,7 @@
2005-06-23 Juanma Barranquero <lekktu@gmail.com>
- * building.texi (Grep Searching):
- * dired-x.texi (Miscellaneous Commands):
- * ediff.texi (Miscellaneous):
- * gnus.texi (MIME Commands, Fancy Mail Splitting, Agent Visuals)
- (Agent Variables):
- * info.texi (Help-Xref):
- * message.texi (Message Headers):
- * org.texi (Remember):
- * reftex.texi (Options (Defining Label Environments)):
- (Options (Index Support)):
- (Options (Viewing Cross-References)):
- (Options (Misc)):
- (Changes):
- * speedbar.texi (Creating a display):
- * tramp.texi (Customizing Completion, Auto-save and Backup):
- Texinfo usage fix.
+ * building.texi (Grep Searching): Texinfo usage fix.
2005-06-22 Miles Bader <miles@gnu.org>
@@ -4543,14 +2816,6 @@
* text.texi (Adaptive Fill): Minor clarification.
-2005-06-13 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.11.
-
-2005-06-12 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Getting Started): Remove extra menu item.
-
2005-06-10 Lute Kamstra <lute@gnu.org>
* emacs.texi (Top): Correct version number.
@@ -4604,45 +2869,16 @@
* trouble.texi (After a Crash): Polish previous change.
-2005-05-31 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Notations Used in This Manual): Use @kbd for key
- sequence.
- (Demonstration of Calc): Mention another way of starting Calc.
- (Starting Calc): Mention long name of M-#.
- (Embedded Mode Overview): Remove unnecessary instruction.
- (Other M-# commands): Rephrase `M-# 0' explanation.
- (Basic Embedded Mode): Rewrite discussion of prefix arguments to
- reflect current behavior.
-
-2005-05-30 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Hooks): Change description of calc-window-hook and
- calc-trail-window-hook to match usage.
- (Computational Functions): Add more constant-generating functions.
- (Customizable Variables): Use defvar.
-
2005-05-30 Noah Friedman <friedman@splode.com>
* trouble.texi (After a Crash): Mention emacs-buffer.gdb as a
recovery mechanism.
-2005-05-28 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Assignments in Embedded Mode): Fix variable name.
- (Basic Embedded Mode): Explain behavior of arguments to
- calc-embedded-mode.
-
2005-05-28 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Other Buffers): SPC toggles display of
floating point registers.
-2005-05-27 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Queries in Keyboard Macros): Rewrite to reflect
- current behavior.
-
2005-05-27 Nick Roberts <nickrob@snap.net.nz>
* files.texi (Log Buffer): Merge in description of Log Edit
@@ -4652,12 +2888,6 @@
* building.texi (Lisp Eval): C-M-x with arg runs Edebug.
-2005-05-25 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Change Calc version number throughout.
- (Keypad Mode): Change location in info output.
- (Keypad mode overview): Move picture of keypad.
-
2005-05-24 Luc Teirlinck <teirllm@auburn.edu>
* fixit.texi (Spelling): Delete confusing sentence; flyspell is
@@ -4678,25 +2908,6 @@
printed manuals.
(Intro): Use @xref for the Emacs Lisp Intro.
-2005-05-21 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Storing variables): Mention that only most variables
- are void to begin with.
-
-2005-05-21 Kevin Ryde <user42@zip.com.au>
-
- * widget.texi (Basic Types): Update cross ref from "Enabling
- Mouse-1 to Follow Links" to "Links and Mouse-1" per recent
- lispref/text.texi change.
-
-2005-05-20 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.09.
-
-2005-05-18 Carsten Dominik <dominik@science.uva.nl>
-
- * reftex.texi: Version 4.28.
-
2005-05-18 Luc Teirlinck <teirllm@auburn.edu>
* buffers.texi (Select Buffer): Document `C-u M-g M-g'.
@@ -4728,10 +2939,6 @@
* building.texi (Debugger Operation): Mention GUD tooltips are
disabled with GDB in text command mode.
-2005-05-16 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Storing Variables): Mention `calc-copy-special-constant'.
-
2005-05-16 Nick Roberts <nickrob@snap.net.nz>
* building.texi: Replace toolbar with "tool bar" for consistency.
@@ -4747,15 +2954,6 @@
* major.texi (Choosing Modes): normal-mode processes the -*- line.
Add xref.
-2005-05-14 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Default Simplifications): Insert missing ! (logical
- not operator).
-
-2005-05-14 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.49.
-
2005-05-14 Luc Teirlinck <teirllm@auburn.edu>
* basic.texi (Moving Point): Mention `M-g g' binding for `goto-line'.
@@ -4767,11 +2965,6 @@
* killing.texi (Deletion): Complete description of `C-x C-o'.
-2005-05-10 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Default Simplifications): Mention that 0^0 simplifies
- to 1.
-
2005-05-10 Richard M. Stallman <rms@gnu.org>
* building.texi (Compilation): Clarify recompile's directory choice.
@@ -4813,10 +3006,6 @@
* building.texi (Debugger Operation): Clarify previous change.
-2005-04-29 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Version 3.08, structure reorganized.
-
2005-04-28 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Debugger Operation): Add description for
@@ -4863,8 +3052,6 @@
* ack.texi: Delete info about lazy-lock.el and fast-lock.el.
- * faq.texi: Delete info about lazy-lock.el and fast-lock.el.
-
2005-04-19 Kim F. Storm <storm@cua.dk>
* building.texi (Compilation Mode): Add M-g M-n and M-g M-p bindings.
@@ -4881,14 +3068,6 @@
xterm-mouse-mode is a minor mode and put in pxref to Minor Modes
node.
-2005-04-15 Carsten Dominik <dominik@science.uva.nl>
-
- * org.texi: Update to version 3.06.
-
-2005-04-13 Lute Kamstra <lute@gnu.org>
-
- * cc-mode.texi: Prevent creating an unnecessary empty cc-mode.ss file.
-
2005-04-12 Luc Teirlinck <teirllm@auburn.edu>
* frames.texi (XTerm Mouse): Xterm Mouse mode is now enabled by default.
@@ -4912,10 +3091,6 @@
* major.texi (Choosing Modes): Document magic-mode-alist.
-2005-04-10 Thien-Thi Nguyen <ttn@gnu.org>
-
- * cl.texi (Porting Common Lisp): Fix typo.
-
2005-04-10 Luc Teirlinck <teirllm@auburn.edu>
* rmail.texi (Rmail Basics): Clarify description of `q' and `b'.
@@ -4931,10 +3106,6 @@
* xresources.texi (Lucid Resources): Add fontSet resource.
-2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (RSS): Addition.
-
2005-04-09 Luc Teirlinck <teirllm@auburn.edu>
* display.texi (Useless Whitespace): `indicate-unused-lines' is
@@ -4956,12 +3127,6 @@
The GNU/Linux console currently does not appear to support
`xterm-mouse-mode'.
-2005-04-04 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Change Calc version number.
- (Customizable variables): Fix description of calc-language-alist.
- (Copying): Put in version 2 of GPL.
-
2005-04-03 Glenn Morris <gmorris@ast.cam.ac.uk>
* calendar.texi (Diary): Mention shell utility `calendar'.
@@ -4970,15 +3135,6 @@
* cmdargs.texi (Misc X): Explain horizontal scroll bars don't exist.
-2005-04-01 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Troubleshooting Commands): Remove comment about
- installation.
- (Installation): Remove section.
- (Customizable Variables): New section.
- (Basic Embedded Mode, Customizing Embedded Mode, Graphics)
- (Graphical Devices): Add references to Customizable Variables.
-
2005-04-01 Lute Kamstra <lute@gnu.org>
* maintaining.texi (Change Log): add-change-log-entry uses
@@ -5000,15 +3156,6 @@
* programs.texi (Fortran Motion): Fix previous change.
-2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-mime.texi (Display Customization): Markup fixes.
- (rfc2047): Update.
-
-2005-03-23 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-faq.texi: Replaced with auto-generated version.
-
2005-03-29 Richard M. Stallman <rms@gnu.org>
* mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info.
@@ -5135,11 +3282,6 @@
* display.texi (Text Display): Add index entries for how no-break
characters are displayed.
-2005-03-26 Stephan Stahl <stahl@eos.franken.de> (tiny change)
-
- * dired-x.texi (Multiple Dired Directories): default-directory was
- renamed to dired-default-directory.
-
2005-03-26 Eli Zaretskii <eliz@gnu.org>
* files.texi (Visiting): Fix cross-references introduced with the
@@ -5147,24 +3289,6 @@
* xresources.texi (GTK resources): Fix last change.
-2005-03-26 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Simplifying Formulas, Rewrite Rules):
- Change description of top and bottom of fraction.
- (Modulo Forms): Move description of how to create modulo forms to
- earlier in the section.
- (Fraction Mode): Suggest using : to get a fraction by dividing.
- (Basic Arithmetic): Adjust placement of command name.
- (Truncating the Stack): Emphasize that "hidden" entries are still
- visible.
- (Installation): Move discussion of printing manual to "About This
- Manual".
- (About This Manual): Mention how to print the manual.
- (Reporting Bugs): Remove first person.
- (Building Vectors): Add algebraic version of append.
- (Manipulating Vectors): Fix algebraic version of calc-reverse-vector.
- (Grouping Digits): Fix typo.
-
2005-03-25 Chong Yidong <cyd@stupidchicken.com>
* xresources.texi (X Resources): GTK options documented too.
@@ -5194,39 +3318,17 @@
hide-body won't hide lines before first header line.
(TeX Mode): Add DocTeX mode.
-2005-03-25 Werner Lemberg <wl@gnu.org>
-
- * calc.texi, cl.texi, gnus.texi, idlwave.texi, reftex.texi:
- Replace `legal' with `valid'.
-
-2005-03-25 Werner Lemberg <wl@gnu.org>
-
- * calc.texi, reftex.texi: Replace `illegal' with `invalid'.
-
-2005-03-24 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (General Mode Commands)
- (Mode Settings in Embedded Mode): Add some explanation of
- recording mode settings.
-
2005-03-24 Richard M. Stallman <rms@gnu.org>
* mule.texi (Single-Byte Character Support): Delete mention
of iso-acc.el and iso-transl.el.
- * calc.texi: Remove praise of non-free software.
-
- * idlwave.texi: Don't say where to get IDL or its non-free manual.
- (Installation): Node deleted.
-
2005-03-23 Lute Kamstra <lute@gnu.org>
* search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch.
2005-03-23 Richard M. Stallman <rms@gnu.org>
- * url.texi (HTTP language/coding): Improve last change.
-
* search.texi: Delete explicit node pointers.
(Incremental Search): New menu.
(Basic Isearch, Repeat Isearch, Error in Isearch)
@@ -5250,11 +3352,6 @@
* building.texi (Stack Buffer): Mention reverse contrast for
*selected* frame (might not be current frame).
-2005-03-22 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Embedded Mode): Add new information on changing
- modes.
-
2005-03-21 Richard M. Stallman <rms@gnu.org>
* building.texi (Starting GUD): Add bashdb.
@@ -5320,17 +3417,6 @@
* anti.texi: Total rewrite.
-2005-03-20 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.48.
-
- * trampver.texi.in: Replace "Emacs" by "GNU Emacs".
-
- * tramp.texi: Replace "Emacs" by "GNU Emacs". Replace "Linux" by
- "GNU/Linux". Change all addresses to .gnu.org.
- (Default Method): Offer shortened syntax for "su" and "sudo"
- methods.
-
2005-03-19 Chong Yidong <cyd@stupidchicken.com>
* ack.texi (Acknowledgments): Update.
@@ -5347,9 +3433,6 @@
2005-03-07 Richard M. Stallman <rms@gnu.org>
- * url.texi: Fix usage of "e.g.".
- (HTTP language/coding): Explain the rules for these strings.
-
* misc.texi (Single Shell, Shell Options): Fix previous change.
* building.texi (Debugger Operation): Update GUD tooltip enable info.
@@ -5363,10 +3446,6 @@
(GUD Tooltips): Node deleted.
(GDB Graphical Interface): Explain the two GDB modes here.
- * woman.texi (Introduction): Minor cleanups.
-
- * url.texi (HTTP language/coding): Get rid of "Emacs 21".
-
* sending.texi (Sending Mail): Minor cleanup.
(Mail Aliases): Explain quoting conventions.
Update key rebinding example.
@@ -5380,9 +3459,6 @@
(Movemail): Clarify two movemail versions.
Clarify rmail-movemail-program.
- * pcl-cvs.texi (About PCL-CVS): Get rid of "Emacs 21".
- (Installation): Node deleted.
-
* misc.texi (Single Shell): Replace uudecode example with gpg example.
Document async shell commands.
(Shell History): Clarify.
@@ -5396,8 +3472,6 @@
(Hyperlinking): Explain Mouse-1 convention here.
(Find Func): Node deleted.
- * mh-e.texi (Preface): Get rid of "Emacs 21".
-
* help.texi (Name Help): Xref to Hyperlinking.
* glossary.texi (Glossary):
@@ -5413,8 +3487,6 @@
* files.texi (Types of Log File): Explain how projects'
methods can vary.
- * eshell.texi (Installation): Delete node (for Emacs 20).
-
* display.texi (Faces): Delete "Emacs 21".
* custom.texi (Changing a Variable): C-M-i like M-TAB.
@@ -5428,10 +3500,6 @@
* calendar.texi (Specified Dates): Mention `g w'.
(Appointments): appt-activate toggles with no arg.
-2005-03-05 Thien-Thi Nguyen <ttn@gnu.org>
-
- * flymake.texi: Refill and tweak style in @lisp blocks.
-
2005-03-05 Juri Linkov <juri@jurta.org>
* cmdargs.texi (Emacs Invocation): Add cindex
@@ -5442,10 +3510,6 @@
* calendar.texi (iCalendar): No need to require it now.
-2005-03-03 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Slow/Expensive Connection): Don't abbreviate "very".
-
2005-03-03 Nick Roberts <nickrob@snap.net.nz>
* trouble.texi (Contributing): Mention Savannah. Direct users to
@@ -5456,12 +3520,6 @@
* calendar.texi (Adding to Diary): Mention redrawing of calendar
window.
-2005-03-01 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Trigonometric and Hyperbolic Functions):
- Mention additional functions.
- (Algebraic Simplifications): Mention additional simplifications.
-
2005-02-27 Richard M. Stallman <rms@gnu.org>
* building.texi (Compilation): Update mode line status info.
@@ -5512,12 +3570,6 @@
* cmdargs.texi (Initial Options): Add cross reference.
-2005-02-18 Jonathan Yavner <jyavner@member.fsf.org>
-
- * ses.texi: Add concept/function/variable indices (this work was
- donated by Brad Collins <brad@chenla.org>, copyright-assignment
- papers on file at FSF).
-
2005-02-16 Luc Teirlinck <teirllm@auburn.edu>
* emacs.texi (Top): Update menu for splitting of node in
@@ -5591,27 +3643,6 @@
* basic.texi (Continuation Lines): Simplify description of truncation,
and refer to Display Custom for the rest of it.
-2005-02-10 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Change @LaTeX to La@TeX throughout.
- Redefine @expr as @math for TeX output.
- Redefine @texline as a no-op for TeX output.
- Define @tfn, replace @t by @tfn throughout.
-
-2005-02-09 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Add macro for LaTeX for info output.
-
-2005-02-08 Kim F. Storm <storm@cua.dk>
-
- * texinfo.tex (LaTex): Add def.
-
-2005-02-06 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (TeX Language Mode): Add mention of LaTeX mode, and
- change name to "TeX and LaTeX Language Modes." Mention LaTeX mode
- throughout manual.
-
2005-02-06 Lute Kamstra <lute@gnu.org>
* basic.texi (Undo): Fix typo.
@@ -5746,27 +3777,11 @@
* display.texi, mule.texi: Don't say just "option" when talking
about variables. Other minor cleanups.
-2005-01-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
-
- * gnus.texi: Some edits based on comments from David Abrahams.
-
-2005-01-24 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus.texi (RSS): Fix the keystroke.
-
2005-01-26 Lute Kamstra <lute@gnu.org>
* cmdargs.texi (Initial Options): Add a cross reference to `Init
File'. Mention the `-Q' option at the `--no-site-file' option.
-2005-01-24 David Kastrup <dak@gnu.org>
-
- * faq.texi: Update AUCTeX version info.
-
-2005-01-16 Xavier Maillard <zedek@gnu-rox.org> (tiny change)
-
- * gnus-faq.texi ([4.1]): Typo.
-
2005-01-22 David Kastrup <dak@gnu.org>
* building.texi (Grep Searching): Mention alias `find-grep' for
@@ -5776,22 +3791,6 @@
* calendar.texi (Time Intervals): Delete special stuff for MS-DOS.
-2005-01-19 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Keep Arguments): Mention that keeping arguments
- doesn't work with keyboard macros.
-
-2005-01-16 Richard M. Stallman <rms@gnu.org>
-
- * autotype.texi (Autoinserting): Fix small error.
-
-2005-01-16 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.47.
-
- * tramp.texi (Compilation): New section, describing compilation of
- remote files.
-
2005-01-15 Sergey Poznyakoff <gray@Mirddin.farlep.net>
* rmail.texi (Movemail): Explain differences
@@ -5817,14 +3816,6 @@
* programs.texi (Multi-line Indent): Fix previous change.
(Fortran Autofill): Simplify description of fortran-auto-fill-mode.
-2005-01-11 Kim F. Storm <storm@cua.dk>
-
- * widget.texi (Basic Types): Add :follow-link keyword.
-
-2005-01-09 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Basic Commands): Describe new behavior of calc-reset.
-
2005-01-08 Richard M. Stallman <rms@gnu.org>
* display.texi (Faces): isearch-lazy-highlight-face renamed to
@@ -5834,52 +3825,16 @@
and lazy-highlight.
(Incremental Search): Update isearch highlighting info.
-2005-01-08 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Change throughout to reflect new default value of
- calc-settings-file.
-
-2005-01-06 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (Reply): `message-reply-to-function' should return
- a list. Suggested by ARISAWA Akihiro <ari@mbf.ocn.co.jp>.
-
-2005-01-06 Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp> (tiny change)
-
- * faq.texi (Changing load-path): Fix typo.
-
-2005-01-05 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Programming Tutorial): Replace kbd command by
- appropriate characters for a keyboard macro.
-
-2005-01-04 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Basic Tutorial, Programming Tutorial): Remove caveats
- for Lucid Emacs.
- (Programming Tutorial): Mention that the user needs to be in the
- right mode to compute some functions.
-
2005-01-04 Richard M. Stallman <rms@gnu.org>
* custom.texi (Saving Customizations): Minor improvement.
-2005-01-04 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Rewrite rules): Remove an exercise (on 0^0) which is
- no longer applicable.
-
2005-01-03 Luc Teirlinck <teirllm@auburn.edu>
* custom.texi (Saving Customizations): Emacs no longer loads
`custom-file' after .emacs. No longer mention customizing through
Custom.
-2005-01-01 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Programming Tutorial): Changed description of how to
- edit keyboard macros to match current behavior.
-
2005-01-01 Andreas Schwab <schwab@suse.de>
* killing.texi (Graphical Kill): Move up under node Killing,
@@ -5907,10 +3862,6 @@
* files.texi (Saving): Describe new require-final-newline features
and mode-require-final-newline.
-2004-12-31 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Mention C-cC-c as the way to finish editing throughout.
-
2004-12-29 Richard M. Stallman <rms@gnu.org>
* custom.texi (File Variables): Clarify previous change.
@@ -5927,47 +3878,12 @@
* basic.texi (Moving Point): C-e now runs move-end-of-line.
(Undo): Doc undo-outer-limit.
-2004-12-20 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Types Tutorial): Emphasize that you can't divide by
- zero.
-
-2004-12-17 Luc Teirlinck <teirllm@auburn.edu>
-
- * cc-mode.texi (Text Filling and Line Breaking): Put period after
- @xref.
- (Font Locking): Avoid @strong{Note:}.
-
-2004-12-17 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.46.
-
- * tramp.texi (bottom): Add arch-tag. It was lost, somehow.
-
-2004-12-16 Luc Teirlinck <teirllm@auburn.edu>
-
- * url.texi: Correct typos.
- (Retrieving URLs): @var{nil}->@code{nil}.
- (HTTP language/coding, mailto): Replace "GNU Emacs Manual" with
- the standard "The GNU Emacs Manual" in fifth argument of @xref's.
- (Dealing with HTTP documents): @inforef->@xref.
-
2004-12-15 Juri Linkov <juri@jurta.org>
* mark.texi (Transient Mark, Mark Ring): M-< and other
movement commands don't set mark in Transient Mark mode
if mark is active.
-2004-12-15 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Consistently capitalized all mode names.
- (Answers to Exercises): Mention that an answer can be a fraction
- when in Fraction mode.
-
-2004-12-13 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Fix some TeX definitions.
-
2004-12-12 Juri Linkov <juri@jurta.org>
* misc.texi (FFAP): Add C-x C-r, C-x C-v, C-x C-d,
@@ -5981,66 +3897,22 @@
* mark.texi (Marking Objects): Marking commands also extend the
region when mark is active in Transient Mark mode.
-2004-12-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * reftex.texi (Imprint): Remove erroneous @value's.
-
2004-12-08 Luc Teirlinck <teirllm@auburn.edu>
* custom.texi (Saving Customizations): Emacs only loads the custom
file automatically after the init file in version 22.1 or later.
Adapt text and examples to this fact.
- * makefile.w32-in (INFO_TARGETS, DVI_TARGETS, $(infodir)/org)
- (org.dvi, $(infodir)/url, url.dvi, clean): Add org and url manuals.
-
-2004-12-08 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Starting Calc): Remove comment about installation.
- (Keypad Mode Overview): Remove comment about Emacs 19 support.
-
-2004-12-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * url.texi: Update @setfilename.
- (Getting Started): No need to worry about Gnus versions.
- (Dealing with HTTP documents): Use @inforef.
-
- * org.texi: Fix @direntry file name.
-
2004-12-07 Luc Teirlinck <teirllm@auburn.edu>
* frames.texi (Scroll Bars): The option `scroll-bar-mode' has to
be set through Custom. Otherwise, it has no effect.
-2004-12-07 Stefan <monnier@iro.umontreal.ca>
-
- * url.texi: New file.
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS, ../info/url, url.dvi): Add it.
-
-2004-12-06 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Using Calc): Remove paragraph about installation.
-
-2004-12-06 Jay Belanger <belanger@truman.edu>
-
- * calc.texi: Use more Texinfo macros and less TeX defs.
- Remove @refill's.
-
-2004-12-06 Richard M. Stallman <rms@gnu.org>
-
- * org.texi: New file.
-
2004-12-05 Richard M. Stallman <rms@gnu.org>
* cmdargs.texi, doclicense.texi, xresources.texi, emacs.texi:
* entering.texi: Rename Command Line to Emacs Invocation.
- * Makefile.in (org.dvi, ../info/org): New targets.
- (INFO_TARGETS): Add ../info/org.
- (DVI_TARGETS): Add org.dvi.
- (maintainer-clean): Remove the info files in the info dir.
-
* misc.texi (Term Mode): Correcty describe C-c.
* custom.texi (Easy Customization): Move up to section level,
@@ -6088,14 +3960,6 @@
* frames.texi (Dialog Boxes): Rename use-old-gtk-file-dialog to
x-use-old-gtk-file-dialog.
-2004-11-26 Eli Zaretskii <eliz@gnu.org>
-
- * idlwave.texi: Fix the setfilename directive to put the produced
- file in ../info.
- (Continued Statement Indentation): Resurrect Jan D.'s change from
- 2004-11-03 that was lost when a newer version of idlwave.texi was
- imported.
-
2004-11-20 Richard M. Stallman <rms@gnu.org>
* text.texi (Fill Prefix): M-q doesn't apply fill prefix to first line.
@@ -6116,33 +3980,9 @@
to Alex Ott, Karl Fogel, Stefan Monnier, and David Kastrup for
suggestions.
-2004-12-08 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-faq.texi ([5.1]): Added missing bracket.
-
- * gnus.texi (Filtering Spam Using The Spam ELisp Package): Index
- `spam-initialize'.
-
-2004-11-22 Reiner Steib <Reiner.Steib@gmx.de>
-
- * message.texi (Various Message Variables): Mention that all mail
- file variables are derived from `message-directory'.
-
- * gnus.texi (Splitting Mail): Clarify bogus group.
-
-2004-11-02 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-mime.texi (Encoding Customization): Fix
- mm-coding-system-priorities entry.
-
2004-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * frames.texi (Dialog Boxes):
- * idlwave.texi (Continued Statement Indentation):
- * reftex.texi (Options (Index Support)):
- (Displaying and Editing the Index, Table of Contents):
- * speedbar.texi (Creating a display, Major Display Modes): Replace
- non-nil with non-@code{nil}.
+ * frames.texi (Dialog Boxes): Replace non-nil with non-@code{nil}.
2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
@@ -6156,10 +3996,6 @@
(Fixed Width Mode, Table Conversion, Measuring Tables)
(Table Misc): New nodes, documenting the Table Mode.
-2004-10-21 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Algebraic-Style Calculations): Removed a comment.
-
2004-10-19 Jason Rumney <jasonr@gnu.org>
* makefile.w32-in (info): Change order of arguments to makeinfo.
@@ -6168,61 +4004,10 @@
* calendar.texi (iCalendar): Update for package changes.
-2004-10-18 Luc Teirlinck <teirllm@auburn.edu>
-
- * calc.texi (Reporting Bugs): Double up `@'.
-
-2004-10-18 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Reporting Bugs): Changed the address that bugs
- should be sent to.
-
-2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (New Features): Add 5.11.
-
- * message.texi (Resending): Remove wrong default value.
-
- * gnus.texi (Mail Source Specifiers): Describe possible problems
- of `pop3-leave-mail-on-server'. Add `pop3-movemail' and
- `pop3-leave-mail-on-server' to the index.
-
-2004-10-15 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * message.texi (Canceling News): Add how to set a password.
-
-2004-10-12 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Help Commands): Changed the descriptions of
- calc-describe-function and calc-describe-variable to match their
- current behavior.
-
-2004-10-12 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-faq.texi ([5.9]): Improve code for reply-in-news.
-
-2004-10-12 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.45.
-
- * tramp.texi (Frequently Asked Questions): Comment paragraph about
- plink link. The URL is outdated. Originator contacted for
- clarification.
-
-2004-10-10 Juri Linkov <juri@jurta.org>
-
- * gnus.texi (Top, Marking Articles): Join two menus in one node
- because a node can have only one menu.
-
2004-10-09 Luc Teirlinck <teirllm@auburn.edu>
* files.texi (Misc File Ops): View mode is a minor mode.
-2004-10-09 Juri Linkov <juri@jurta.org>
-
- * gnus.texi (Fancy Mail Splitting): Remove backslash in the
- example of nnmail-split-fancy.
-
2004-10-08 Glenn Morris <gmorris@ast.cam.ac.uk>
* calendar.texi (iCalendar): Style changes.
@@ -6232,11 +4017,6 @@
* search.texi (Regexps): The regexp described in the example is no
longer stored in the variable `sentence-end'.
-2004-10-06 Karl Berry <karl@gnu.org>
-
- * info.texi (@kbd{1}--@kbd{9}): No space around --, for
- consistency with other uses of dashes.
-
2004-10-06 Nick Roberts <nickrob@snap.net.nz>
* building.texi (Starting GUD): Note that multiple debugging
@@ -6246,11 +4026,6 @@
* calendar.texi (iCalendar): New section for a new package.
-2004-10-05 Karl Berry <karl@gnu.org>
-
- * info.texi: Consistently use --- throughout, periods at end of
- menu descriptions, and a couple typos.
-
2004-10-05 Luc Teirlinck <teirllm@auburn.edu>
* text.texi: Various small changes in addition to the following.
@@ -6288,61 +4063,6 @@
* display.texi (Display Custom) <indicate-buffer-boundaries>:
Align with new functionality.
-2004-09-26 Jesper Harder <harder@ifa.au.dk>
-
- * sieve.texi (Manage Sieve API): nil -> @code{nil}.
- * pgg.texi (User Commands, Backend methods): Do.
- * gnus.texi: Markup fixes.
- (Setting Process Marks): Fix `M P a' entry.
- * emacs-mime.texi: Fixes.
-
-2004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-faq.texi ([5.12]): Fix code example for FQDN in Message-Ids
- again.
- Use 5.10 instead of 5.10.0.
-
-2004-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
-
- * gnus.texi (Summary Mail Commands): S D e.
-
-2004-09-20 Raymond Scholz <ray-2004@zonix.de> (tiny change)
-
- * gnus.texi (Misc Article): Refer to `Summary Buffer Mode Line' in
- the gnus-article-mode-line-format section.
-
-2004-09-20 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change)
-
- * gnus.texi (Various Summary Stuff): Fix the documentation for
- gnus-newsgroup-variables.
-
-2004-09-20 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (MIME Commands): Added
- gnus-mime-display-multipart-as-mixed,
- gnus-mime-display-multipart-alternative-as-mixed,
- gnus-mime-display-multipart-related-as-mixed.
- (Mail Source Customization): Clarify `mail-source-directory'.
- (Splitting Mail): Mention gnus-group-find-new-groups.
- (SpamOracle): Fixed typo.
-
- * gnus-faq.texi: Untabify.
- ([6.3]): nnir.el is in contrib directory.
-
- * message.texi (News Headers): Clarify how a unique ID is created.
-
- * gnus.texi (Batching Agents): Fixed typo in example. Reported
- by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
-
-2004-09-20 Andre Srinivasan <andre@e2open.com>
-
- * gnus.texi (Group Parameters): Added more on hooks. (Small
- change.)
-
-2004-09-20 Florian Weimer <fw@deneb.enyo.de>
-
- * gnus.texi (Charsets): Point to relevant section in emacs-mime.
-
2004-09-22 Luc Teirlinck <teirllm@auburn.edu>
* display.texi (Display Custom): Remove stray `@end defvar'.
@@ -6352,16 +4072,6 @@
* display.texi (Display Custom): Add `overflow-newline-into-fringe',
`indicate-buffer-boundaries' and `default-indicate-buffer-boundaries'.
-2004-09-22 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Vectors as Lists): Added a warning that the tutorial
- might be hidden during part of the session.
-
-2004-09-20 Jay Belanger <belanger@truman.edu>
-
- * calc.texi (Notations Used in This Manual): Put in an earlier
- mention that DEL could be called Backspace.
-
2004-09-20 Richard M. Stallman <rms@gnu.org>
* custom.texi (Hooks): Explain using setq to clear out a hook.
@@ -6377,51 +4087,15 @@
* mini.texi (Repetition): Rename isearch-resume-enabled to
isearch-resume-in-command-history and change default to disabled.
-2004-09-10 Simon Josefsson <jas@extundo.com>
-
- * gnus.texi (IMAP): Add example. Suggested and partially written
- by Steinar Bang <sb@dod.no>.
-
-2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
-
- * gnus.texi (IMAP): Add comments about imaps synonym to imap in
- netrc syntax.
-
-2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
-
- * gnus.texi (Spam ELisp Package Sequence of Events): Some clarifications.
- (Spam ELisp Package Global Variables): More clarifications.
-
-2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
-
- * gnus.texi (Spam ELisp Package Filtering of Incoming Mail):
- Mention spam-split does not modify incoming mail.
-
-2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
-
- * gnus.texi (Spam ELisp Package Sequence of Events): Fix typo.
-
-2004-09-10 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (../info/gnus, gnus.dvi): Depend on gnus-faq.texi.
-
2004-09-09 Kim F. Storm <storm@cua.dk>
* kmacro.texi (Save Keyboard Macro): Replace `name-last-kbd-macro'
with new `kmacro-name-last-macro'.
-2004-09-09 Reiner Steib <Reiner.Steib@gmx.de>
-
- * makefile.w32-in (sieve, pgg): Use $(infodir).
-
2004-09-08 Juri Linkov <juri@jurta.org>
* mini.texi (Minibuffer History): Add `history-delete-duplicates'.
-2004-09-08 Dhruva Krishnamurthy <dhruva.krishnamurthy@gmail.com> (tiny change)
-
- * makefile.w32-in: Fix PGG and Sieve entries.
-
2004-09-03 Juri Linkov <juri@jurta.org>
* search.texi (Incremental Search): Update wording for M-%.
@@ -6463,11 +4137,6 @@
(Just Spaces): `tabify' converts sequences of at least two spaces
to tabs.
-2004-08-28 Eli Zaretskii <eliz@gnu.org>
-
- * faq.texi (Emacs for MS-DOS): Update URLs for the MS-DOS port of
- Emacs and related programs.
-
2004-08-27 Luc Teirlinck <teirllm@auburn.edu>
* frames.texi (Secondary Selection): Setting the secondary
@@ -6504,18 +4173,6 @@
Adapt node pointers to change in emacs.texi.
* cmdargs.texi, doclicense.texi: Adapt node pointers.
-2004-08-27 Richard M. Stallman <rms@gnu.org>
-
- * faq.texi: Fix texinfo usage, esp. doublequotes.
- (Difference between Emacs and XEmacs): Some clarification.
-
- * faq.texi (Difference between Emacs and XEmacs):
- Explain not to contrast XEmacs with GNU Emacs.
-
-2004-08-26 Richard M. Stallman <rms@gnu.org>
-
- * faq.texi (Difference between Emacs and XEmacs): Rewrite.
-
2004-08-25 Kenichi Handa <handa@m17n.org>
* custom.texi (Non-ASCII Rebinding): Fix and simplify the
@@ -6535,13 +4192,6 @@
* kmacro.texi (Keyboard Macro Counter, Keyboard Macro Step-Edit):
Change section names.
-2004-08-22 David Kastrup <dak@gnu.org>
-
- * reftex.texi (AUCTeX): Update links, section name.
-
- * faq.texi (Calc): Update availability (included in 22.1).
- (AUCTeX): Update availability, information, versions, description.
-
2004-08-21 Luc Teirlinck <teirllm@auburn.edu>
* kmacro.texi (Keyboard Macro Ring): Rename section.
@@ -6586,10 +4236,6 @@
* custom.texi (Non-ASCII Rebinding):
C-q always inserts the right code to pass to global-set-key.
-2004-08-14 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (../info/tramp, tramp.dvi): Depend on trampver.texi.
-
2004-08-13 Luc Teirlinck <teirllm@auburn.edu>
* regs.texi (RegNumbers): Mention `C-x r i' binding for
@@ -6603,20 +4249,6 @@
* help.texi (Help): Fix Texinfo usage.
-2004-08-11 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * cc-mode.texi: Various updates for CC Mode 5.30.9.
-
-2004-08-10 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.44.
-
-2004-08-05 Lars Hansen <larsh@math.ku.dk>
-
- * widget.texi (User Interface): Update how to separate the
- editable field of an editable-field widget from other widgets.
- (Programming Example): Add text after field.
-
2004-07-24 Richard M. Stallman <rms@gnu.org>
* text.texi (Paragraphs): Update how paragraphs are separated
@@ -6625,39 +4257,6 @@
* search.texi (Regexp Replace): Further update text for new
replacement operators.
-2004-08-31 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-mime.texi (Encoding Customization): Add a note to the
- mm-content-transfer-encoding-defaults entry.
- (rfc2047): Update.
-
- * gnus.texi (Article Highlighting): Add
- gnus-cite-ignore-quoted-from.
- (POP before SMTP): New node.
- (Posting Styles): Addition.
- (Splitting Mail): Add nnmail-split-lowercase-expanded.
- (Fancy Mail Splitting): Ditto.
- (X-Face): Add gnus-x-face.
-
-2004-08-30 Reiner Steib <Reiner.Steib@gmx.de>
-
- * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi,
- * pgg.texi, sieve.texi: Use @copying and @insertcopying.
-
-2004-08-22 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus.texi (Mail Source Specifiers): Describe
- `pop3-leave-mail-on-server'.
-
-2004-08-02 Reiner Steib <Reiner.Steib@gmx.de>
-
- * Makefile.in, makefile.w32-in: Added PGG and Sieve files.
-
- * pgg.texi, sieve.texi: Import from the v5_10 branch of the Gnus
- repository. Change setfilename.
-
- * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi: Ditto.
-
2004-07-18 Luc Teirlinck <teirllm@auburn.edu>
* emacs-xtra.texi (Subdir switches): Dired does not remember the
@@ -6669,10 +4268,6 @@
* search.texi (Regexps): Delete redundant definition of `symbol' in
description of `\_>'. It already occurs in the description of `\_<'.
-2004-07-02 Juri Linkov <juri@jurta.org>
-
- * pcl-cvs.texi (Viewing differences): Add `d r'.
-
2004-07-01 Juri Linkov <juri@jurta.org>
* search.texi (Incremental Search): Add C-M-w, C-M-y, M-%, C-M-%, M-e.
@@ -6684,8 +4279,7 @@
2004-06-29 Jesper Harder <harder@ifa.au.dk>
- * ses.texi, viper.texi, search.texi, flymake.texi, faq.texi:
- * eshell.texi, ediff.texi, calendar.texi: Markup fixes.
+ * search.texi, calendar.texi: Markup fixes.
2004-06-25 Richard M. Stallman <rms@gnu.org>
@@ -6710,11 +4304,6 @@
* misc.texi (Shell History Copying): Document comint-insert-input.
(Shell Ring): Describe comint-dynamic-list-input-ring here.
-2004-06-21 Karl Berry <karl@gnu.org>
-
- * info.texi (Top): Mention that only Emacs has mouse support.
- (Getting Started): Mention this in a few other places.
-
2004-06-20 Jesper Harder <harder@ifa.au.dk>
* msdog.texi (Text and Binary, MS-DOS Printing): Use m-dash.
@@ -6743,29 +4332,16 @@
* dired.texi (Dired Enter): Mention conditions on `ls' switches.
(Dired and Find): Mention differences with ordinary Dired buffers.
-2004-06-13 Luc Teirlinck <teirllm@auburn.edu>
-
- * autotype.texi (Copyrights, Timestamps): Recommend
- `before-save-hook' instead of `write-file-functions'.
-
2004-06-13 Richard M. Stallman <rms@gnu.org>
* custom.texi (Init Syntax): Explain about vars that do special
things when set with setq or with Custom.
(Init Examples): Add line-number-mode example.
-2004-06-13 Lars Hansen <larsh@math.ku.dk>
-
- * dired-x.texi (dired-mark-omitted): Update keybinding.
-
2004-06-12 Juri Linkov <juri@jurta.org>
* dired.texi (Operating on Files): Add dired-do-touch.
-2004-06-10 Kim F. Storm <storm@cua.dk>
-
- * pcl-cvs.texi (Viewing differences): Add 'd y'.
-
2004-06-10 Juri Linkov <juri@jurta.org>
* building.texi (Lisp Eval): Add C-M-x on defface.
@@ -6775,32 +4351,10 @@
* files.texi (Reverting): Auto-Revert mode and
Global Auto-Revert mode no longer revert remote files.
-2004-06-05 Lars Hansen <larsh@math.ku.dk>
-
- * dired-x.texi (variable dired-omit-mode): Rename from
- dired-omit-files-p.
- (function dired-omit-mode): Rename from dired-omit-toggle.
- Call dired-omit-mode rather than set dired-omit-files-p.
- (dired-mark-omitted): Describe command.
-
-2004-05-29 Michael Albinus <michael.albinus@gmx.de>
-
- Version 2.0.41 of Tramp released.
-
-2004-05-29 Juanma Barranquero <lektu@terra.es>
-
- * makefile.w32-in (../info/flymake, flymake.dvi): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add Flymake.
-
2004-05-29 Richard M. Stallman <rms@gnu.org>
* custom.texi (Init File): Two dashes start --no-site-file.
- * cl.texi (Top): Call this chapter `Introduction'.
- (Overview): In TeX, no section heading here.
-
- * cc-mode.texi: Put commas after i.e. and e.g. Minor cleanups.
-
2004-05-29 Alan Mackenzie <acm@muc.de>
* programs.texi: Update for CC Mode 5.30 and incidental amendments.
@@ -6828,19 +4382,6 @@
* emacs.texi: Remove the menu entry "Comments in C".
-2004-05-29 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (../info/flymake, flymake.dvi): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add Flymake.
-
-2004-05-29 Pavel Kobiakov <pk_at_work@yahoo.com>
-
- * flymake.texi: New file.
-
-2004-05-28 Simon Josefsson <jas@extundo.com>
-
- * smtpmail.texi (Authentication): Improve STARTTLS discussion.
-
2004-05-27 Luc Teirlinck <teirllm@auburn.edu>
* dired.texi (Dired and Find): `find-ls-option' does not apply to
@@ -6857,33 +4398,6 @@
* building.texi (GDB Graphical Interface): Update and describe
layout first.
-2004-05-07 Kai Grossjohann <kai@emptydomain.de>
-
- Version 2.0.40 of Tramp released.
-
-2004-04-25 Michael Albinus <Michael.Albinus@alcatel.de>
-
- Complete rework, based on review by Karl Berry <karl@gnu.org>.
-
- * tramp.texi (Auto-save and Backup): Explain exploitation of new
- variables `tramp-backup-directory-alist' and
- `tramp-bkup-backup-directory-info'.
- (Overview, Connection types)
- (External transfer methods, Default Method)
- (Windows setup hints): Remove restriction of password entering
- with external methods.
- (Auto-save and Backup): Make file name example
- (X)Emacs neutral. In case of XEmacs, `bkup-backup-directory-info'
- and `auto-save-directory' must be used.
- (Frequently Asked Questions): Use "MS Windows NT/2000/XP" (not
- only "NT"). Remove doubled entry "What kinds of systems does
- @tramp{} work on".
- (tramp): Macro removed.
- (Obtaining Tramp): Flag removed from title.
- (all): "tramp-" and "-" removed from flag names. Flags `tramp'
- and `trampver' used properly. Flag `tramp-inst' replaced by
- `installchapter'. Installation related text adapted.
-
2004-05-04 Jason Rumney <jasonr@gnu.org>
* makefile.w32-in: Revert last change.
@@ -6892,14 +4406,6 @@
* makefile.w32-in (MULTI_INSTALL_INFO, ENVADD): Use forward slashes.
-2004-04-28 Masatake YAMATO <jet@gyve.org>
-
- * widget.texi (Programming Example): Remove overlays.
-
-2004-04-27 Jesper Harder <harder@ifa.au.dk>
-
- * faq.texi, viper.texi, dired-x.texi, autotype.texi: lisp -> Lisp.
-
2004-04-23 Juanma Barranquero <lektu@terra.es>
* makefile.w32-in: Add "-*- makefile -*-" mode tag.
@@ -6916,10 +4422,6 @@
* custom.texi (File Variables): Add safe-local-eval-forms.
-2004-04-05 Jesper Harder <harder@ifa.au.dk>
-
- * info.texi (Info Search): Add info-apropos.
-
2004-04-02 Luc Teirlinck <teirllm@auburn.edu>
* files.texi (Reverting): Correct description of revert-buffer's
@@ -6929,7 +4431,7 @@
* emacs.texi (Top): Add `Misc X'.
- * faq.texi, trouble.texi: Fix help key bindings.
+ * trouble.texi: Fix help key bindings.
* glossary.texi: Improve references.
@@ -6941,23 +4443,10 @@
* sending.texi (Mail Methods): Fix xref to Message manual.
-2004-03-17 Luc Teirlinck <teirllm@auburn.edu>
-
- * info.texi (Advanced): Replace @unnumberedsubsec by @subheading
- (as suggested by Karl Berry). Update information about colored
- stars in menus. Add new subheading describing M-n.
-
2004-03-12 Richard M. Stallman <rms@gnu.org>
- * cl.texi (Top): Rename top node's title.
-
* buffers.texi (Misc Buffer): Add index entry for rename-uniquely.
-2004-03-08 Karl Berry <karl@gnu.org>
-
- * info.texi: \input texinfo.tex instead of just texinfo, to avoid
- problems making the texinfo distribution.
-
2004-03-04 Richard M. Stallman <rms@gnu.org>
* search.texi (Regexps): Explain that ^ and $ have their
@@ -6972,36 +4461,11 @@
(Indirect Buffers): Don't recommand clone-indirect-buffer
for multiple compile and grep buffers.
-2004-02-29 Simon Josefsson <jas@extundo.com>
-
- * smtpmail.texi (Authentication): Changed the list of supported
- authentication mechanisms from CRAM-MD5, PLAIN and LOGIN-MD5 to
- CRAM-MD5 and LOGIN, tiny patch from Andreas Voegele
- <voegelas@gmx.net>.
-
2004-02-29 Juanma Barranquero <lektu@terra.es>
* makefile.w32-in (mostlyclean, clean, maintainer-clean):
Use $(DEL) instead of rm, and ignore exit code.
-2004-02-29 Kai Grossjohann <kgrossjo@eu.uu.net>
-
- Tramp version 2.0.39 released.
-
-2004-02-29 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi (Customizing Completion): Explain new functions
- `tramp-parse-shostkeys' and `tramp-parse-sknownhosts'.
- (all): Savannah URLs unified to "http://savannah.nongnu.org".
- (Top): Refer to Savannah mailing list as the major one. Mention
- older mailing lists in HTML mode only.
- (Auto-save and Backup): Add auto-save. Based on wording of Kai.
- (Frequently Asked Questions): Remote hosts must not be Unix-like
- for "smb" method.
- (Password caching): New node.
- (External transfer methods): Refer to password caching for "smb"
- method.
-
2004-02-23 Nick Roberts <nick@nick.uklinux.net>
* building.texi (Watch Expressions): Update.
@@ -7018,21 +4482,11 @@
(Title X): Remove alias -title.
(Misc X): New node.
-2004-02-17 Karl Berry <karl@gnu.org>
-
- * info.texi (Help-Int): Mention the new line number feature.
-
2004-02-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* frames.texi (Drag and drop): Add Motif to list of supported
protocols.
-2004-02-14 Jonathan Yavner <jyavner@member.fsf.org>
-
- * ses.texi (Advanced Features): New functionality for
- ses-set-header-row (defaults to current row unless C-u used).
- (Acknowledgements): Add Stefan Monnier.
-
2004-02-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* frames.texi (Drag and drop): New section.
@@ -7049,8 +4503,6 @@
2003-12-29 Kevin Ryde <user42@zip.com.au>
- * viper.texi (Vi Macros): Fix reference to the Emacs manual.
-
* programs.texi (C Modes): Fix the xref.
2003-12-23 Nick Roberts <nick@nick.uklinux.net>
@@ -7064,81 +4516,31 @@
* files.texi: Say how to disable VC. Suggested by Alan Mackenzie
<acm@muc.de>.
-2003-11-30 Kai Grossjohann <kai.grossjohann@gmx.net>
-
- Tramp version 2.0.38 released.
-
- * tramp.texi (Remote shell setup): Warn of environment variables
- FRUMPLE if user frumple exists. Suggested by Sven Gabriel
- <sven.gabriel@imk.fzk.de>.
- (Configuration): Tramp now chooses base64/uuencode
- automatically. Update wording accordingly.
- (Top): More description for the `Default Method' menu entry.
- (Default Method): Use @code, not @var, for Lisp variables.
- (Default Method): New subsection `Which method is the right one
- for me?' Suggested by Christian Kirsch.
- (Configuration): Pointer to new subsection added.
- (Default Method): Too many "use" in one sentence.
- Rephrase. Reported by Christian Kirsch.
- (Filename Syntax): Old `su' example is probably a left-over from
- the sm/su method naming. Replace with `ssh', instead.
- (External transfer methods, Auto-save and Backup):
- Typo fixes.
-
-2003-11-02 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi (all): Harmonize all occurences of @tramp{}.
- (Top): Mention japanese manual only if flag `jamanual' is set.
- Insert section `Japanese manual' in menu.
-
2003-11-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* frames.texi (Dialog Boxes): Add use-file-dialog.
-2003-11-26 Thien-Thi Nguyen <ttn@gnu.org>
-
- * eshell.texi (Known Problems): Add doc item.
-
2003-11-22 Martin Stjernholm <bug-cc-mode@gnu.org>
* ack.texi: Note that Alan Mackenzie contributed the AWK support
in CC Mode.
-2003-11-22 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * cc-mode.texi: Update for CC Mode 5.30.
-
- Note: Please refrain from doing purely cosmetic changes like
- removing trailing whitespace in this manual; it clobbers cvs
- merging for no good reason.
-
2003-11-02 Jesper Harder <harder@ifa.au.dk> (tiny change)
* man/ack.texi, man/basic.texi, man/cmdargs.texi:
* man/commands.texi, man/custom.texi, man/display.texi:
- * man/ediff.texi, man/emacs.texi, man/faq.texi, man/files.texi:
+ * man/emacs.texi, man/files.texi:
* man/frames.texi, man/glossary.texi, man/killing.texi:
* man/macos.texi, man/mark.texi, man/misc.texi, man/msdog.texi:
* man/mule.texi, man/rmail.texi, man/search.texi:
- * man/sending.texi, man/text.texi, man/tramp.texi:
- * man/trouble.texi, man/vip.texi, man/viper.texi, man/widget.texi:
- * man/woman.texi: Replace @sc{ascii} and ASCII with @acronym{ASCII}.
+ * man/sending.texi, man/text.texi, man/trouble.texi:
+ Replace @sc{ascii} and ASCII with @acronym{ASCII}.
2003-11-01 Alan Mackenzie <acm@muc.de>
* search.texi (Scrolling During Incremental Search): Document a
new scrolling facility in isearch mode.
-2003-10-26 Karl Berry <karl@gnu.org>
-
- * info.texi (Info Search): Echo area, not echo are. From Debian
- diff.
-
-2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
-
- * widget.texi (Defining New Widgets): Document new beavior of
- :buttons and :children keywords.
-
2003-10-22 Miles Bader <miles@gnu.org>
* Makefile.in (info): Move before $(top_srcdir)/info.
@@ -7148,11 +4550,6 @@
* building.texi (Watch Expressions): Update section on data display
to reflect code changes (GDB Graphical Interface).
-2003-10-17 Thien-Thi Nguyen <ttn@gnu.org>
-
- * tramp.texi (Inline methods): Small grammar fix.
- (External transfer methods): Likewise.
-
2003-10-13 Richard M. Stallman <rms@gnu.org>
* xresources.texi (GTK resources): Clean up previous change.
@@ -7162,22 +4559,8 @@
* xresources.texi (GTK resources): Add a note that some themes
disallow customizations. Add scroll theme example.
-2003-10-08 Nick Roberts <nick@nick.uklinux.net>
-
- * speedbar.texi: Remove paragraph for GUD that is no longer true.
-
-2003-10-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * texinfo.tex: Replace `%' in arch tagline by @ignore.
-
2003-09-30 Richard M. Stallman <rms@gnu.org>
- * dired-x.texi (Miscellaneous Commands): Delete M-g, w, T.
-
- * widget.texi (User Interface): Fix typos.
-
- * pcl-cvs.texi, cl.texi, woman.texi, ediff.texi: Fix @strong{Note:}.
-
* cmdargs.texi (General Variables): Remove MAILRC envvar.
* misc.texi (Saving Emacs Sessions): Shorten the section,
@@ -7191,10 +4574,6 @@
* xresources.texi (GTK names in Emacs): Correct typo.
-2003-09-29 Thien-Thi Nguyen <ttn@gnu.org>
-
- * pcl-cvs.texi (Selected Files): Fix typo.
-
2003-09-24 Luc Teirlinck <teirllm@mail.auburn.edu>
* cmdargs.texi (Font X): Mention new default font. More
@@ -7216,10 +4595,6 @@
* cmdargs.texi (Action Arguments): -f reads interactive args.
-2003-09-21 Karl Berry <karl@gnu.org>
-
- * info.texi (] and [ commands): No period at end of section title.
-
2003-09-08 Lute Kamstra <lute@gnu.org>
* screen.texi (Mode Line): Say that POS comes before LINE.
@@ -7248,16 +4623,8 @@
* misc.texi (Saving Emacs Sessions): Correct previous change.
-2003-08-26 Per Abrahamsen <abraham@dina.kvl.dk>
-
- * widget.texi (User Interface): Explain the need of static text
- around an editable field.
-
2003-08-19 Luc Teirlinck <teirllm@mail.auburn.edu>
- * widget.texi (Basic Types): The argument to `:help-echo' can now
- be a form that evaluates to a string.
-
* emacs.texi (Top): Update menu to reflect new Keyboard Macros chapter.
(Intro): Include kmacro.texi after fixit.texi instead of after
custom.texi. (As suggested by Kim Storm.)
@@ -7281,8 +4648,6 @@
* emacs.texi (Keyboard Macros): Reference new keyboard macro topics.
- * calc.texi (Queries in Macros): Update xref to keyboard macro query.
-
2003-08-17 Edward M. Reingold <reingold@emr.cs.iit.edu>
* calendar.texi (Specified Dates): Add `calendar-goto-day-of-year'.
@@ -7292,24 +4657,11 @@
* misc.texi (Saving Emacs Sessions): Manual M-x desktop-save not
required.
-2003-08-16 Richard M. Stallman <rms@gnu.org>
-
- * dired-x.texi (Shell Command Guessing): Explain *.
-
-2003-08-16 Chunyu Wang <spr@db.cs.hit.edu.cn> (tiny change)
-
- * pcl-cvs.texi (Log Edit Mode): Fix key binding for
- log-edit-insert-changelog.
-
2003-08-05 Richard M. Stallman <rms@gnu.org>
* programs.texi (Lisp Indent): Don't describe
lisp-indent-function property here. Use xref to Lisp Manual.
-2003-08-03 Karl Berry <karl@gnu.org>
-
- * info.texi: Need @contents.
-
2003-08-03 Glenn Morris <gmorris@ast.cam.ac.uk>
* calendar.texi (Date Formats): Document changed behaviour of
@@ -7319,13 +4671,6 @@
* buffers.texi (List Buffers): Fix previous change.
-2003-07-20 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
-
- Tramp version 2.0.36 released.
-
- * tramp.texi (Remote shell setup): Explain about problems with
- non-Bourne commands in ~/.profile and ~/.shrc.
-
2003-07-13 Markus Rost <rost@math.ohio-state.edu>
* buffers.texi (List Buffers): Adjust to new format of *Buffer
@@ -7333,9 +4678,6 @@
2003-07-07 Luc Teirlinck <teirllm@mail.auburn.edu>
- * info.texi (Help-Inv, Help-M, Help-Xref): Update following
- renaming of `vis-mode' to `visible-mode'.
-
* display.texi (Font Lock): Fix typo.
2003-07-07 Richard M. Stallman <rms@gnu.org>
@@ -7348,40 +4690,6 @@
* help.texi (Library Keywords): Use @multitable.
-2003-07-04 Luc Teirlinck <teirllm@mail.auburn.edu>
-
- * info.texi (Top, Help-Small-Screen): Remove accidentally added
- next, prev and up pointers.
-
-2003-07-02 Luc Teirlinck <teirllm@mail.auburn.edu>
-
- * info.texi (Help): Mention existence of Emacs and stand-alone
- Info at the very beginning of the tutorial.
- (Help-Inv): New node.
- (Help-]): New node.
- (Help-M): Systematically point out the differences between default
- Emacs and stand-alone versions. Delete second menu.
- (Help-Xref): Systematically point out the differences between
- default Emacs and stand-alone versions.
- (Help-Int): Change `l' example.
- (Expert Info): Fix typos.
- (Emacs Info Variables): Mention `Info-hide-note-references' and
- new default for `Info-scroll-prefer-subnodes'.
-
-2003-06-17 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
-
- Version 2.0.35 of Tramp released.
-
- * tramp.texi: From Michael Albinus <Michael.Albinus@alcatel.de>:
- (Inline methods): Add methods `remsh' and `plink1'.
- (External transfer methods): Add method `remcp'.
- (Multi-hop Methods): Add method `remsh'.
- Small patch from Adrian Aichner <adrian@xemacs.org>:
- Fix minor typos.
- (Concept Index): Added to make manual searchable via
- `Info-index'.
- (Version Control): Add cindex entry.
-
2003-06-04 Richard M. Stallman <rms@gnu.org>
* programs.texi (Expressions): Delete C-M-DEL.
@@ -7408,97 +4716,24 @@
non-English letters. Explain how to set coding systems correctly
and how to include the right coding cookie in the file.
-2003-05-24 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
-
- * trampver.texi: Version 2.0.34 released.
-
2003-05-22 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
* indent.texi (Indentation): Explain the concepts.
(Just Spaces): Explain why preventing tabs for indentation might
be useful.
-2003-05-03 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * faq.texi: Improve previous changes.
-
-2003-05-02 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * faq.texi: Update copyright and maintenance details.
- Update some package URLs, versions, and maintainers.
- Remove many references to the Emacs Lisp Archive.
-
-2003-04-23 Simon Josefsson <jas@extundo.com>
-
- * smtpmail.texi: Fix license (the invariant sections mentioned has
- never been part of the smtp manual). Align info dir entry with
- other emacs packages.
-
2003-04-16 Richard M. Stallman <rms@gnu.org>
* search.texi (Regexps): Ref to Lisp manual for more regexp features.
-2003-04-08 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi: Version 2.0.33 released.
- Remove installation chapter. Remove XEmacs specifics.
-
-2003-03-29 Richard M. Stallman <rms@gnu.org>
-
- * tramp.texi (Top): Undo the previous renaming.
- (emacs-other-name, emacs-other-dir, emacs-other-file-name): Delete.
-
-2003-03-29 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
-
- * Makefile.in (../info/tramp): Compile Emacs, instead of XEmacs,
- version of manual.
-
- * tramp.texi (Auto-save and Backup): New node.
-
-2003-03-29 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi (Top): Include trampver.texi. Rename "Emacs" to "GNU
- Emacs" in order to have better differentiation to "XEmacs".
- `emacs-other-name', `emacs-other-dir' and `emacs-other-file-name'
- are new macros in order to point to the other Emacs flavor where
- appropriate. In info case, point to node `Installation' in order
- to explain how to generate the other way. In html case, make a
- link to the other html file.
- (Obtaining TRAMP): Added a paragraph saying to perform `autoconf'
- after CVS checkout/update.
- (Installation): Completely rewritten.
- (Installation parameters, Load paths): New sections under
- `Installation'.
-
-2003-02-28 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
-
- * tramp.texi: Version 2.0.30 released.
- Replace word "path" with "localname" where used as a component of
- a Tramp file name.
-
-2003-02-28 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi (Frequently Asked Questions): `tramp-chunksize'
- introduced.
- (Installation): Explain what to do if files from the tramp/contrib
- directory are needed.
-
-2003-02-23 Alex Schroeder <alex@emacswiki.org>
-
- * smtpmail.texi (How Mail Works): New.
-
2003-02-22 Alex Schroeder <alex@emacswiki.org>
* cmdargs.texi (General Variables): Document SMTPSERVER.
- * smtpmail.texi: New file.
-
* sending.texi: Remove SMTP node.
(Mail Sending): Describe `send-mail-function'. Link to SMTP
library.
- * Makefile.in: Build SMTP manual.
-
2003-02-22 Alex Schroeder <alex@emacswiki.org>
* sending.texi (Sending via SMTP): Explain MTA/MUA.
@@ -7511,24 +4746,6 @@
* xresources.texi (GTK names in Emacs): Add emacs-toolbar - GtkToolbar.
-2003-02-05 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
-
- * tramp.texi: Version 2.0.29 released.
- (Installation): In Emacs, use M-x texinfo-format-buffer RET, not
- M-x makeinfo-buffer RET. Reported by gebser@ameritech.net.
-
-2003-02-01 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi (Frequently Asked Questions): Explain a workaround if
- another package loads accidently Ange-FTP.
-
-2003-01-24 Michael Albinus <Michael.Albinus@alcatel.de>
-
- * tramp.texi (Customizing Completion): Add function
- `tramp-parse-sconfig'. Change example of
- `tramp-set-completion-function', because parsing of ssh config
- files looks more natural.
-
2003-02-01 Kevin Ryde <user42@zip.com.au>
* glossary.texi (Glossary): Correction to cl cross reference.
@@ -7544,67 +4761,16 @@
(GTK names in Emacs): New node.
(GTK styles): New node.
-2003-01-15 ShengHuo ZHU <zsh@cs.rochester.edu>
-
- * gnus.texi: Do not use `path' in several locations.
-
2003-01-09 Francesco Potort,Al(B <pot@gnu.org>
* maintaining.texi (Create Tags Table): Add reference to the new
`etags --help --lang=LANG' option.
-2002-12-26 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
-
- * tramp.texi (External transfer methods): New method `smb'. From
- Michael Albinus.
-
-2002-11-05 Karl Berry <karl@gnu.org>
-
- * info.texi (Info-fontify): Reorder face list to avoid bad line
- breaks.
-
-2002-10-06 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
- * tramp.texi: Move @copying to standard place. Use
- @insertcopying.
-
2002-10-02 Karl Berry <karl@gnu.org>
- * (ada-mode.texi autotype.texi calc.texi cc-mode.texi cl.texi
- dired-x.texi ebrowse.texi ediff.texi emacs-mime.texi emacs.texi
- eshell.texi eudc.texi faq.texi forms.texi idlwave.texi info.texi
- message.texi mh-e.texi pcl-cvs.texi reftex.texi sc.texi ses.texi
- speedbar.texi vip.texi viper.texi widget.texi woman.texi):
- Per rms, update all manuals to use @copying instead of @ifinfo.
- Also use @ifnottex instead of @ifinfo around the top node, where
- needed for the sake of the HTML output.
- (The Gnus manual is not fixed since it's not clear to me how it
- works; and the Tramp manual already uses @copying, although in an
- unusual way. All others were changed.)
-
-2002-09-10 Jonathan Yavner <jyavner@engineer.com>
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add SES.
- (../info/ses, ses.dvi): New targets.
- * ses.texi: New file.
-
-2002-09-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * texinfo.tex: Update to texinfo 4.2.
-
-2002-08-27 Carsten Dominik <dominik@sand.science.uva.nl>
-
- * reftex.texi: Update to RefTeX 4.19.
-
-2002-06-17 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add Tramp.
- (../info/tramp, tramp.dvi): New targets.
-
-2002-01-04 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (DVI_TARGETS): Add calc.dvi.
- (calc.dvi): Uncomment.
+ * emacs.texi: Per rms, update all manuals to use @copying instead of
+ @ifinfo. Also use @ifnottex instead of @ifinfo around the top node,
+ where needed for the sake of the HTML output.
2001-12-20 Eli Zaretskii <eliz@is.elta.co.il>
@@ -7615,11 +4781,6 @@
* Makefile.in (emacsman): New target.
-2001-11-07 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (INFO_TARGETS): Add ../info/calc.
- (../info/calc): New target.
-
2001-10-20 Gerd Moellmann <gerd@gnu.org>
* (Version 21.1 released.)
@@ -7628,94 +4789,14 @@
* Branch for 21.1.
-2001-04-14 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (../info/info): Use an explicit -o switch to
- makeinfo.
-
2001-03-05 Gerd Moellmann <gerd@gnu.org>
* Makefile.in (mostlyclean, maintainer-clean): Delete more files.
-2000-12-20 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (../info/idlwave): Use --no-split.
-
-2000-12-14 Dave Love <fx@gnu.org>
-
- * Makefile.in (mostlyclean): Remove gnustmp.*
- (gnus.dvi): Change rule to remove @latex stuff.
-
-2000-10-19 Eric M. Ludlam <zappo@ultranet.com>
-
- * Makefile.in (Speedbar): Add build targets for speedbar.texi.
-
-2000-10-13 John Wiegley <johnw@gnu.org>
-
- * Makefile.in: Add build targets for eshell.texi.
-
-2000-09-25 Gerd Moellmann <gerd@gnu.org>
-
- * Makefile.in: Remove/comment speedbar stuff.
-
-2000-09-22 Dave Love <fx@gnu.org>
-
- * Makefile.in: Add emacs-mime.
-
-2000-08-08 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (INFO_TARGETS): Add ../info/woman.
- (DVI_TARGETS): Add woman.dvi.
- (../info/woman, woman.dvi): New targets.
-
2000-05-31 Stefan Monnier <monnier@cs.yale.edu>
* .cvsignore (*.tmp): New entry. Seems to be used for @macro.
- * pcl-cvs.texi: New file.
- * Makefile.in (INFO_TARGETS, DVI_TARGETS: Add pcl-cvs.
- (../info/pcl-cvs, pcl-cvs.dvi): New targets.
-
-2000-05-11 Gerd Moellmann <gerd@gnu.org>
-
- * Makefile.in (INFO_TARGETS): Add info/ebrowse.
- (../info/ebrowse, ebrowse.dvi): New targets.
-
-2000-01-13 Gerd Moellmann <gerd@gnu.org>
-
- * Makefile.in (INFO_TARGETS): Add eudc.
- (DVI_TARGETS): Add eudc.dvi.
- (../info/eudc, eudc.dvi): New targets.
-
-2000-01-05 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (INFO_TARGETS): Rename emacs-faq to efaq (for
- compatibility with 8+3 filesystems).
- (../info/efaq): Rename from emacs-faq.
-
-2000-01-03 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add idlwave.
- (../info/idlwave, idlwave.dvi): New targets.
-
-1999-10-23 Dave Love <fx@gnu.org>
-
- * Makefile.in: Use autotype.texi.
-
-1999-10-12 Stefan Monnier <monnier@cs.yale.edu>
-
- * Makefile.in (faq): Use ../info/emacs-faq.info (as specified in the
- faq.texi file) rather than ../info/faq.
-
-1999-10-07 Gerd Moellmann <gerd@gnu.org>
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add ada-mode.
- (../info/ada-mode, ada-mode.dvi): New targets.
-
-1999-09-01 Dave Love <fx@gnu.org>
-
- * Makefile.in: Add faq.
-
1999-07-12 Richard Stallman <rms@gnu.org>
* Version 20.4 released.
@@ -7739,23 +4820,12 @@
* Makefile.in (ENVADD): Enviroment vars to pass to texi2dvi. Use
it in dvi targets.
- (../etc/GNU): Change to $(srcdir) first.
-
-1998-03-11 Carsten Dominik <cd@delysid.gnu.org>
-
- * reftex.texi: Update for RefTeX version 3.22.
-
-1998-02-08 Richard Stallman <rms@psilocin.gnu.org>
-
- * Makefile.in (reftex.dvi, ../info/reftex): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add the new targets.
1997-09-23 Paul Eggert <eggert@twinsun.com>
* Makefile.in: Merge changes mistakenly made to `Makefile'.
(INFO_TARGETS): Change ../info/custom to ../info/customize.
(../info/customize): Rename from ../info/custom.
- (../info/viper, viper.dvi): Remove dependency on viper-cmd.texi.
1997-09-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
@@ -7771,10 +4841,6 @@
(INFO_TARGETS): Add ../info/customize.
(DVI_TARGETS): Add customize.dvi.
-1997-07-10 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
-
- * Makefile (../info/viper, viper.dvi): Delete viper-cmd.texi dep.
-
1996-08-11 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 19.33 released.
@@ -7783,16 +4849,6 @@
* Version 19.32 released.
-1996-06-27 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * Makefile.in: Add rules for the Message manual.
-
-1996-06-26 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.texi: New version.
-
- * message.texi: New manual.
-
1996-06-20 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Makefile.in (All info targets): cd $(srcdir) to do the work.
@@ -7807,55 +4863,10 @@
* Version 19.31 released.
-1996-01-07 Richard Stallman <rms@whiz-bang.gnu.ai.mit.edu>
-
- * Makefile.in (../info/ccmode): Rename from ../info/cc-mode.
- (INFO_TARGETS): Use new name. This avoids name conflict on MSDOS.
-
-1995-11-29 Richard Stallman <rms@mole.gnu.ai.mit.edu>
-
- * Makefile.in (../info/cc-mode, cc-mode.dvi): New targets.
- (INFO_TARGETS): Add ../info/cc-mode.
- (DVI_TARGETS): Add cc-mode.dvi.
-
1995-11-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.30 released.
-1995-11-04 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-
- * gnus.texi: New file.
-
-1995-11-04 Erik Naggum <erik@naggum.no>
-
- * gnus.texi: File deleted.
-
-1995-11-02 Stephen Gildea <gildea@stop.mail-abuse.org>
-
- * mh-e.texi: "Function Index" -> "Command Index" to work with
- Emacs 19.30 C-h C-k support of separately-documented commands.
-
-1995-06-26 Richard Stallman <rms@mole.gnu.ai.mit.edu>
-
- * Makefile.in (../info/ediff, ediff.dvi): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add those new targets.
-
-1995-04-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add viper targets.
- (../info/viper, viper.dvi): New targets.
-
-1995-04-20 Kevin Rodgers <kevinr@ihs.com>
-
- * dired-x.texi (Installation): Change the example to set
- buffer-local variables like dired-omit-files-p in
- dired-mode-hook.
-
-1995-04-17 Richard Stallman <rms@mole.gnu.ai.mit.edu>
-
- * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add mh-e targets.
- (../info/mh-e, mh-e.dvi): New targets.
-
1995-02-07 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
* Makefile.in (maintainer-clean): Rename from realclean.
@@ -7902,32 +4913,18 @@
* Makefile (.SUFFIXES): New rule.
-1994-01-15 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * Makefile (dired-x.dvi, ../info/dired-x): New targets.
- (INFO_TARGETS, DVI_TARGETS): Add the new targets.
-
-1994-01-08 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * Makefile (../info/sc): Rename frin sc.info.
- (../info/cl): Likewise.
- (INFO_TARGETS): Use new names.
-
1993-12-04 Richard Stallman (rms@srarc2)
* getopt.c: New file.
* Makefile (TEXINDEX_OBJS): Use getopt.o in this dir, not ../lib-src.
(getopt.o): New rule.
(dvi): Don't depend on texindex.
- (emacs.dvi, cl.dvi, forms.dvi, vip.dvi, gnus.dvi, sc.dvi):
- Depend on texindex.
+ (emacs.dvi): Depend on texindex.
1993-12-03 Richard Stallman (rms@srarc2)
- * Makefile (../info/sc.info): Rename from ../info/sc.
- (TEXI2DVI): New variable.
- (emacs.dvi, cl.dvi forms.dvi, sc.dvi, vip.dvi, gnus.dvi, info.dvi):
- Add explicit commands.
+ * Makefile (TEXI2DVI): New variable.
+ (emacs.dvi): Add explicit command.
(TEXINDEX_OBJS): Delete duplicate getopt.o.
1993-11-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -7942,59 +4939,29 @@
* Version 19.21 released.
-1993-11-15 Paul Eggert (eggert@twinsun.com)
-
- * man/Makefile (../info/cl.info): Rename from ../info/cl.
-
-1993-11-15 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * Makefile (../etc/GNU): New target.
- (EMACSSOURCES): Add gnu1.texi.
-
1993-11-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (realclean): Don't delete the Info files.
1993-10-25 Brian Fox (bfox@albert.gnu.ai.mit.edu)
- * forms.texi: Fix forms.texi so that it will format correctly.
- Add missing `@end iftex', fix bad reference.
-
- * info.texi, info-stn.texi: New files implement texinfo version of
- `info' file.
-
* frames.texi (Creating Frames): Mention `C-x 5' instead of `C-x
4' where appropriate.
1993-10-20 Brian Fox (bfox@ai.mit.edu)
- * Makefile: Fix targets for texindex, new info.texi files.
- * info-stnd.texi: New file implements info for standalone info
- reader.
- * info.texi: Update to include recent changes to "../info/info".
- New source file for ../info/info; includes info-stnd.texi.
+ * Makefile: Fix targets for texindex.
* texindex.c: Include "../src/config.h" if building in emacs.
* Makefile: Change all files to FILENAME.texi, force all targets
- to be FILENAME, not FILENAME.info. This changes sc.texinfo,
- vip.texinfo, forms.texinfo, cl.texinfo.
+ to be FILENAME, not FILENAME.info.
Add target to build texindex.c, defining `emacs'.
- * forms.texi: Install new file to match version 2.3 of forms.el.
-
1993-08-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.19 released.
-1993-08-10 Simon Leinen (simon@lia.di.epfl.ch)
-
- * sc.texinfo: Fix info file name.
-
- * Makefile (info): Add gnus and sc.
- (dvi): Add gnus.dvi and sc.dvi.
- (../info/sc, sc.dvi): New targets.
-
1993-08-08 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.18 released.
@@ -8002,7 +4969,6 @@
1993-07-20 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile: Fix source file names of the separate manuals.
- (gnus.dvi, ../info/gnus): New targets.
1993-07-18 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8093,10 +5059,6 @@
* emacs.tex: Update TeX ordering information.
-1990-08-30 David Lawrence (tale@pogo.ai.mit.edu)
-
- * gnus.texinfo: New file. Removed installation instructions.
-
1990-06-26 David Lawrence (tale@geech)
* emacs.tex: Note that completion-ignored-extensions is not used
@@ -8111,31 +5073,11 @@
* emacs.tex: Add @findex grep.
-1989-01-17 Robert J. Chassell (bob@rice-chex.ai.mit.edu)
-
- * texinfo.tex: Change spelling of `\sc' font to `\smallcaps' and
- then define `\sc' as the command for smallcaps in Texinfo. This
- means that the @sc command will produce small caps. bfox has
- made the corresponding change to makeinfo and texinfm.el.
-
1988-08-16 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu)
* emacs.tex: Correct two typos. No other changes before
Version 19 will be made.
- * vip.texinfo: Remove menu entry Adding Lisp Code in node
- Customization since the menu entry did not point to anything.
- Also add an @finalout command to remove overfull hboxes from the
- printed output.
-
- * cl.texinfo: Add @bye, \input line and @settitle to file.
- This file is clearly intended to be a chapter of some other work,
- but the other work does not yet exist.
-
-1988-07-25 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu)
-
- * texinfo.texinfo: Three typos corrected.
-
1988-05-23 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu)
* emacs.tex: Update information for obtaining TeX distribution from the
diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in
new file mode 100644
index 00000000000..f84c0866469
--- /dev/null
+++ b/doc/emacs/Makefile.in
@@ -0,0 +1,159 @@
+#### Makefile for the Emacs Manual
+
+# Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+# 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+
+# 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 3, 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.
+
+# Where to find the source code. $(srcdir) will be the man
+# subdirectory of the source tree. This is
+# set by the configure script's `--srcdir' option.
+srcdir=@srcdir@
+top_srcdir=@top_srcdir@
+
+# Tell make where to find source files; this is needed for the makefiles.
+VPATH=@srcdir@
+
+## Where the output files go.
+## Note that the setfilename command in the .texi files assumes this.
+infodir=../../info
+
+# The makeinfo program is part of the Texinfo distribution.
+# Use --force so that it generates output even if there are errors.
+MAKEINFO = makeinfo --force
+
+INFO_TARGETS = $(infodir)/emacs
+DVI_TARGETS = emacs.dvi
+
+
+TEXI2DVI = texi2dvi
+
+# The following rule does not work with all versions of `make'.
+.SUFFIXES: .texi .dvi
+.texi.dvi:
+ $(TEXI2DVI) $<
+
+ENVADD = TEXINPUTS="$(srcdir):$(TEXINPUTS)" MAKEINFO="$(MAKEINFO) -I$(srcdir)"
+
+
+EMACS_XTRA=\
+ $(srcdir)/arevert-xtra.texi \
+ $(srcdir)/cal-xtra.texi \
+ $(srcdir)/dired-xtra.texi \
+ $(srcdir)/picture-xtra.texi \
+ $(srcdir)/emerge-xtra.texi \
+ $(srcdir)/vc-xtra.texi \
+ $(srcdir)/vc1-xtra.texi \
+ $(srcdir)/vc2-xtra.texi \
+ $(srcdir)/fortran-xtra.texi \
+ $(srcdir)/msdog-xtra.texi
+
+EMACSSOURCES= \
+ ${srcdir}/emacs.texi \
+ ${srcdir}/doclicense.texi \
+ ${srcdir}/gpl.texi \
+ ${srcdir}/screen.texi \
+ ${srcdir}/commands.texi \
+ ${srcdir}/entering.texi \
+ ${srcdir}/basic.texi \
+ ${srcdir}/mini.texi \
+ ${srcdir}/m-x.texi \
+ ${srcdir}/help.texi \
+ ${srcdir}/mark.texi \
+ ${srcdir}/killing.texi \
+ ${srcdir}/regs.texi \
+ ${srcdir}/display.texi \
+ ${srcdir}/search.texi \
+ ${srcdir}/fixit.texi \
+ ${srcdir}/files.texi \
+ ${srcdir}/buffers.texi \
+ ${srcdir}/windows.texi \
+ ${srcdir}/frames.texi \
+ ${srcdir}/mule.texi \
+ ${srcdir}/major.texi \
+ ${srcdir}/indent.texi \
+ ${srcdir}/text.texi \
+ ${srcdir}/programs.texi \
+ ${srcdir}/building.texi \
+ ${srcdir}/maintaining.texi \
+ ${srcdir}/abbrevs.texi \
+ ${srcdir}/sending.texi \
+ ${srcdir}/rmail.texi \
+ ${srcdir}/dired.texi \
+ ${srcdir}/calendar.texi \
+ ${srcdir}/misc.texi \
+ ${srcdir}/custom.texi \
+ ${srcdir}/trouble.texi \
+ ${srcdir}/cmdargs.texi \
+ ${srcdir}/xresources.texi \
+ ${srcdir}/anti.texi \
+ ${srcdir}/macos.texi \
+ ${srcdir}/msdog.texi \
+ ${srcdir}/gnu.texi \
+ ${srcdir}/glossary.texi \
+ ${srcdir}/ack.texi \
+ ${srcdir}/kmacro.texi \
+ $(EMACS_XTRA)
+
+info: $(infodir) $(INFO_TARGETS)
+
+$(infodir):
+ mkdir $@
+
+dvi: $(DVI_TARGETS)
+
+# Note that all the Info targets build the Info files
+# in srcdir. There is no provision for Info files
+# to exist in the build directory.
+# In a distribution of Emacs, the Info files should be up to date.
+
+emacs : $(infodir)/emacs
+
+$(infodir)/emacs: ${EMACSSOURCES}
+ cd $(srcdir); $(MAKEINFO) emacs.texi
+
+emacs.dvi: ${EMACSSOURCES}
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi
+
+
+emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA)
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-xtra.texi
+
+
+mostlyclean:
+ rm -f *.log *.cp *.fn *.ky *.op *.ops *.pg *.vr core *.tp *.core
+ rm -f *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc
+
+clean: mostlyclean
+ rm -f *.dvi
+
+distclean: clean
+# rm -f Makefile
+
+maintainer-clean: distclean
+ for file in $(INFO_TARGETS); do rm -f $${file}*; done
+
+
+# Formerly this directory had texindex.c and getopt.c in it
+# and this makefile built them to make texindex.
+# That caused trouble because this is run entirely in the source directory.
+# Since we expect to get texi2dvi from elsewhere,
+# it is ok to expect texindex from elsewhere also.
+
+
+### Makefile ends here
diff --git a/man/abbrevs.texi b/doc/emacs/abbrevs.texi
index 585e28318e7..585e28318e7 100644
--- a/man/abbrevs.texi
+++ b/doc/emacs/abbrevs.texi
diff --git a/man/ack.texi b/doc/emacs/ack.texi
index d5dbf1ae8ca..d5dbf1ae8ca 100644
--- a/man/ack.texi
+++ b/doc/emacs/ack.texi
diff --git a/man/anti.texi b/doc/emacs/anti.texi
index ebff1c7677f..ebff1c7677f 100644
--- a/man/anti.texi
+++ b/doc/emacs/anti.texi
diff --git a/man/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi
index c2b1ddc2ffe..c2b1ddc2ffe 100644
--- a/man/arevert-xtra.texi
+++ b/doc/emacs/arevert-xtra.texi
diff --git a/man/basic.texi b/doc/emacs/basic.texi
index 7c65eba2f01..333985e4a4a 100644
--- a/man/basic.texi
+++ b/doc/emacs/basic.texi
@@ -624,8 +624,8 @@ terminal, the code(s) sent to the terminal.
@item
The character's text properties (@pxref{Text Properties,,,
-elisp, the Emacs Lisp Reference Manual}), including any faces usewd to
-display the character, and any overlays containing it
+elisp, the Emacs Lisp Reference Manual}), including any non-default
+faces used to display the character, and any overlays containing it
(@pxref{Overlays,,, elisp, the same manual}).
@end itemize
diff --git a/man/buffers.texi b/doc/emacs/buffers.texi
index b43d72b1067..b43d72b1067 100644
--- a/man/buffers.texi
+++ b/doc/emacs/buffers.texi
diff --git a/man/building.texi b/doc/emacs/building.texi
index 3a52182724d..a8bea90a635 100644
--- a/man/building.texi
+++ b/doc/emacs/building.texi
@@ -527,6 +527,10 @@ debugger supports. However, shell wildcards and variables are not
allowed. GUD assumes that the first argument not starting with a
@samp{-} is the executable file name.
+Tramp provides a facility to debug programs on remote hosts.
+@xref{Running a debugger on a remote host, Running a debugger on a remote host,, tramp, The Tramp Manual}.
+@c Running a debugger on a remote host
+
@node Debugger Operation
@subsection Debugger Operation
diff --git a/man/cal-xtra.texi b/doc/emacs/cal-xtra.texi
index 61d519cbd12..61d519cbd12 100644
--- a/man/cal-xtra.texi
+++ b/doc/emacs/cal-xtra.texi
diff --git a/man/calendar.texi b/doc/emacs/calendar.texi
index e330d6f2f48..bb359a962a3 100644
--- a/man/calendar.texi
+++ b/doc/emacs/calendar.texi
@@ -457,12 +457,12 @@ Display holidays for the selected date
@item Mouse-2 Holidays
Display any holidays for the date you click on.
@item x
-Mark holidays in the calendar window (@code{mark-calendar-holidays}).
+Mark holidays in the calendar window (@code{calendar-mark-holidays}).
@item u
Unmark calendar window (@code{calendar-unmark}).
@item a
List all holidays for the displayed three months in another window
-(@code{list-calendar-holidays}).
+(@code{calendar-list-holidays}).
@item M-x holidays
List all holidays for three months around today's date in another
window.
@@ -481,7 +481,7 @@ that date, in the echo area if they fit there, otherwise in a separate
window.
@kindex x @r{(Calendar mode)}
-@findex mark-calendar-holidays
+@findex calendar-mark-holidays
@kindex u @r{(Calendar mode)}
@findex calendar-unmark
@vindex mark-holidays-in-calendar
@@ -503,7 +503,7 @@ erases any diary marks (@pxref{Diary}). If the variable
updating the calendar marks holidays automatically.
@kindex a @r{(Calendar mode)}
-@findex list-calendar-holidays
+@findex calendar-list-holidays
To get even more detailed information, use the @kbd{a} command, which
displays a separate buffer containing a list of all holidays in the
current three-month range. You can use @key{SPC} and @key{DEL} in the
diff --git a/man/cmdargs.texi b/doc/emacs/cmdargs.texi
index 28bad72f0bf..f2f3a85af77 100644
--- a/man/cmdargs.texi
+++ b/doc/emacs/cmdargs.texi
@@ -635,9 +635,6 @@ Emacs switches the DOS display to a mode where all 16 colors can be used
for the background, so all four bits of the background color are
actually used.
-@item WINDOW_GFX
-Used when initializing the Sun windows system.
-
@item PRELOAD_WINSOCK
On MS-Windows, if you set this variable, Emacs will load and initialize
the network library at startup, instead of waiting until the first
diff --git a/man/commands.texi b/doc/emacs/commands.texi
index d2daffe00bb..d2daffe00bb 100644
--- a/man/commands.texi
+++ b/doc/emacs/commands.texi
diff --git a/man/custom.texi b/doc/emacs/custom.texi
index 8ce0ef9f487..4bd1ba66df7 100644
--- a/man/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1099,10 +1099,14 @@ particular Lisp file. @xref{Enabling Multibyte}.
the first line as well.
@cindex shell scripts, and local file variables
+@cindex man pages, and local file variables
In shell scripts, the first line is used to identify the script
interpreter, so you cannot put any local variables there. To
accommodate this, Emacs looks for local variable specifications in the
@emph{second} line when the first line specifies an interpreter.
+The same is true for man pages which start with the magic string
+@samp{'\"} to specify a list of troff preprocessors (not all do,
+however).
A @dfn{local variables list} goes near the end of the file, in the
last page. (It is often best to put it on a page by itself.) The local
@@ -2419,7 +2423,8 @@ kept.@refill
The usual purpose of the terminal-specific library is to map the
escape sequences used by the terminal's function keys onto more
-meaningful names, using @code{function-key-map}. See the file
+meaningful names, using @code{input-decode-map} (or
+@code{function-key-map} before it). See the file
@file{term/lk201.el} for an example of how this is done. Many function
keys are mapped automatically according to the information in the
Termcap data base; the terminal-specific library needs to map only the
diff --git a/man/dired-xtra.texi b/doc/emacs/dired-xtra.texi
index e8fdf8ab468..e8fdf8ab468 100644
--- a/man/dired-xtra.texi
+++ b/doc/emacs/dired-xtra.texi
diff --git a/man/dired.texi b/doc/emacs/dired.texi
index 5088be21827..3dda3f588eb 100644
--- a/man/dired.texi
+++ b/doc/emacs/dired.texi
@@ -1152,7 +1152,7 @@ and erases all flags and marks.
@findex wdired-change-to-wdired-mode
Wdired is a special mode that allows you to perform file operations
by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands
-for ``writable.'') To enter Wdired mode, type @kbd{M-x
+for ``writable.'') To enter Wdired mode, type @kbd{C-x C-q} or @kbd{M-x
wdired-change-to-wdired-mode} while in a Dired buffer. Alternatively,
use @samp{Edit File Names} in the @samp{Immediate} menu bar menu.
diff --git a/man/display.texi b/doc/emacs/display.texi
index 5e1e0056592..5e1e0056592 100644
--- a/man/display.texi
+++ b/doc/emacs/display.texi
diff --git a/etc/gfdl.1 b/doc/emacs/doclicense.texi
index af660f67787..1e5d5796b28 100644
--- a/etc/gfdl.1
+++ b/doc/emacs/doclicense.texi
@@ -1,35 +1,27 @@
-.TH GFDL 1 "2005 September 17"
-.SH NAME
-GFDL \- The GNU Free Documentation License
-
-.ce
-Version 1.2, November 2002
-
-.hy 0
-.na
-Copyright
-.if t \(co
-.if n (c)
-2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+@c -*-texinfo-*-
+@center Version 1.2, November 2002
+
+@display
+Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
-.hy 1
-.ad
-
-.br
-.SH 0. PREAMBLE
+@end display
+@sp 1
+@enumerate 0
+@item
+PREAMBLE
The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
+functional and useful document ``free'' in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
-This License is a kind of "copyleft", which means that derivative
+This License is a kind of ``copyleft,'' which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
@@ -42,23 +34,25 @@ it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
-.SH 1. APPLICABILITY AND DEFINITIONS
+@sp 1
+@item
+APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The "Document", below,
+work under the conditions stated herein. The ``Document,'' below,
refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as "you". You accept the license if you
+licensee, and is addressed as ``you.'' You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
-A "Modified Version" of the Document means any work containing the
+A ``Modified Version'' of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
-A "Secondary Section" is a named appendix or a front-matter section of
+A ``Secondary Section'' is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
@@ -69,7 +63,7 @@ connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
-The "Invariant Sections" are certain Secondary Sections whose titles
+The ``Invariant Sections'' are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
@@ -77,12 +71,12 @@ allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
-The "Cover Texts" are certain short passages of text that are listed,
+The ``Cover Texts'' are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
-A "Transparent" copy of the Document means a machine-readable copy,
+A ``Transparent'' copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
@@ -93,7 +87,8 @@ to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called "Opaque".
+of text. A copy that is not ``Transparent'' is called ``Opaque.''
+
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
@@ -106,20 +101,20 @@ processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
-The "Title Page" means, for a printed book, the title page itself,
+The ``Title Page'' means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
+formats which do not have any title page as such, ``Title Page'' means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
-A section "Entitled XYZ" means a named subunit of the Document whose
+A section ``Entitled XYZ'' means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+specific section name mentioned below, such as ``Acknowledgements,''
+``Dedications,'' ``Endorsements,'' or ``History.'') To ``Preserve the Title''
of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
+section ``Entitled XYZ'' according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
@@ -127,8 +122,9 @@ Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
-
-.SH 2. VERBATIM COPYING
+@sp 1
+@item
+VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
@@ -142,8 +138,9 @@ number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
-
-.SH 3. COPYING IN QUANTITY
+@sp 1
+@item
+COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
@@ -179,8 +176,9 @@ edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
-
-.SH 4. MODIFICATIONS
+@sp 1
+@item
+MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
@@ -188,84 +186,55 @@ the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
-.TP
-A.
-Use in the Title Page (and on the covers, if any) a title distinct from
-that of the Document, and from those of previous versions (which should,
-if there were any, be listed in the History section of the Document).
-You may use the same title as a previous version if the original
-publisher of that version gives permission.
-.TP
-B.
-List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified Version,
-together with at least five of the principal authors of the Document
-(all of its principal authors, if it has fewer than five), unless they
-release you from this requirement.
-.TP
-C.
-State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-.TP
-D.
-Preserve all the copyright notices of the Document.
-.TP
-E.
-Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-.TP
-F.
-Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the terms
-of this License, in the form shown in the Addendum below.
-.TP
-G.
-Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-.TP
-H.
-Include an unaltered copy of this License.
-.TP
-I.
-Preserve the section Entitled "History", Preserve its Title, and add to
-it an item stating at least the title, year, new authors, and publisher
-of the Modified Version as given on the Title Page. If there is no
-section Entitled "History" in the Document, create one stating the
-title, year, authors, and publisher of the Document as given on its
-Title Page, then add an item describing the Modified Version as stated
-in the previous sentence.
-.TP
-J.
-Preserve the network location, if any, given in the Document for public
-access to a Transparent copy of the Document, and likewise the network
-locations given in the Document for previous versions it was based on.
-These may be placed in the "History" section. You may omit a network
-location for a work that was published at least four years before the
-Document itself, or if the original publisher of the version it refers
-to gives permission.
-.TP
-K.
-For any section Entitled "Acknowledgements" or "Dedications", Preserve
-the Title of the section, and preserve in the section all the substance
-and tone of each of the contributor acknowledgements and/or dedications
-given therein.
-.TP
-L.
-Preserve all the Invariant Sections of the Document, unaltered in their
-text and in their titles. Section numbers or the equivalent are not
-considered part of the section titles.
-.TP
-M.
-Delete any section Entitled "Endorsements". Such a section may not be
-included in the Modified Version.
-.TP
-N.
-Do not retitle any existing section to be Entitled "Endorsements" or to
-conflict in title with any Invariant Section.
-.TP
-O.
-Preserve any Warranty Disclaimers.
-.PP
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.@*
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.@*
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.@*
+D. Preserve all the copyright notices of the Document.@*
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.@*
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.@*
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.@*
+H. Include an unaltered copy of this License.@*
+I. Preserve the section Entitled ``History,'' Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled ``History'' in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.@*
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the ``History'' section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.@*
+K. For any section Entitled ``Acknowledgements'' or ``Dedications,''
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.@*
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.@*
+M. Delete any section Entitled ``Endorsements.'' Such a section
+ may not be included in the Modified Version.@*
+N. Do not retitle any existing section to be Entitled ``Endorsements''
+ or to conflict in title with any Invariant Section.@*
+O. Preserve any Warranty Disclaimers.@*
+@sp 1
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
@@ -273,7 +242,7 @@ of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
-You may add a section Entitled "Endorsements", provided it contains
+You may add a section Entitled ``Endorsements,'' provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
@@ -292,8 +261,9 @@ permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
-
-.SH 5. COMBINING DOCUMENTS
+@sp 1
+@item
+COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
@@ -311,13 +281,14 @@ author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
-In the combination, you must combine any sections Entitled "History"
+In the combination, you must combine any sections Entitled ``History''
in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all sections
-Entitled "Endorsements".
-
-.SH 6. COLLECTIONS OF DOCUMENTS
+``History''; likewise combine any sections Entitled ``Acknowledgements,''
+and any sections Entitled ``Dedications.'' You must delete all sections
+Entitled ``Endorsements.''
+@sp 1
+@item
+COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
@@ -329,12 +300,13 @@ You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
-
-.SH 7. AGGREGATION WITH INDEPENDENT WORKS
+@sp 1
+@item
+AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
+distribution medium, is called an ``aggregate'' if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
@@ -348,8 +320,9 @@ covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
-
-.SH 8. TRANSLATION
+@sp 1
+@item
+TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
@@ -364,12 +337,13 @@ of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
+If a section in the Document is Entitled ``Acknowledgements,''
+``Dedications,'' or ``History,'' the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
-
-.SH 9. TERMINATION
+@sp 1
+@item
+TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
@@ -378,55 +352,55 @@ automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
-
-.SH 10. FUTURE REVISIONS OF THIS LICENSE
+@sp 1
+@item
+FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
-\fBhttp://www.gnu.org/copyleft/\fP.
+http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
+License ``or any later version'' applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
-.SH ADDENDUM: How to use this License for your documents
+@end enumerate
+
+@unnumberedsec ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
-.hy 0
-.na
-Copyright
-.if t \(co
-.if n (c)
-[\fIyear\fP] [\fIyour name\fP].
+@smallexample
+@group
+Copyright (C) @var{year} @var{your name}.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the section entitled "GNU
-Free Documentation License."
-.ad
-.hy 1
+A copy of the license is included in the section entitled ``GNU
+Free Documentation License.''
+@end group
+@end smallexample
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
+replace the ``with...Texts.'' line with this:
-.hy 0
-.na
- with the Invariant Sections being [\fILIST THEIR TITLES\fP], with the
- Front-Cover Texts being [\fILIST\fP], and with the Back-Cover Texts being
- [\fILIST\fP].
-.ad
-.hy 1
+@smallexample
+@group
+with the Invariant Sections being @var{list their titles}, with the
+Front-Cover Texts being @var{list}, and with the Back-Cover Texts being
+@var{list}.
+@end group
+@end smallexample
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
@@ -437,4 +411,6 @@ recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.
-.\" arch-tag: 3a15de89-40c2-46b8-a9a2-0710357a9baa
+@ignore
+ arch-tag: d68e7b7a-0c7c-4c15-905b-a9482214e25a
+@end ignore
diff --git a/man/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi
index 841c62a527f..c4423314520 100644
--- a/man/emacs-xtra.texi
+++ b/doc/emacs/emacs-xtra.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@comment %**start of header
-@setfilename ../info/emacs-xtra
+@setfilename ../../info/emacs-xtra
@settitle Specialized Emacs Features
@syncodeindex fn cp
@syncodeindex vr cp
diff --git a/man/emacs.texi b/doc/emacs/emacs.texi
index b2fdb973039..119e2ea80d1 100644
--- a/man/emacs.texi
+++ b/doc/emacs/emacs.texi
@@ -1,11 +1,11 @@
\input texinfo
-@setfilename ../info/emacs
+@setfilename ../../info/emacs
@settitle GNU Emacs Manual
@c The edition number appears in several places in this file
@set EDITION Sixteenth
-@set EMACSVER 22.1.50
+@set EMACSVER 23.0.50
@copying
This is the @value{EDITION} edition of the @cite{GNU Emacs Manual},@*
@@ -51,7 +51,7 @@ developing GNU and promoting software freedom.''
@tex
@ifset smallbook
@fonttextsize 10
-@set EMACSVER 22.1
+@set EMACSVER 22
\global\let\urlcolor=\Black % don't print links in grayscale
\global\let\linkcolor=\Black
@end ifset
@@ -460,7 +460,7 @@ Version Control
* Introduction to VC:: How version control works in general.
* VC Mode Line:: How the mode line shows version control status.
* Basic VC Editing:: How to edit a file under version control.
-* Old Versions:: Examining and comparing old versions.
+* Old Revisions:: Examining and comparing old revisions of files.
* Secondary VC Commands:: The commands used a little less frequently.
* Branches:: Multiple lines of development.
* Remote Repositories:: Efficient access to remote CVS servers.
diff --git a/man/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi
index e78f17e59d6..e78f17e59d6 100644
--- a/man/emerge-xtra.texi
+++ b/doc/emacs/emerge-xtra.texi
diff --git a/man/entering.texi b/doc/emacs/entering.texi
index e338a6a8619..e338a6a8619 100644
--- a/man/entering.texi
+++ b/doc/emacs/entering.texi
diff --git a/man/files.texi b/doc/emacs/files.texi
index dd2b445b054..dc819bef178 100644
--- a/man/files.texi
+++ b/doc/emacs/files.texi
@@ -1213,11 +1213,10 @@ description of what was changed in that version.
The Emacs version control interface is called VC. Its commands work
with different version control systems---currently, it supports CVS,
GNU Arch, RCS, Meta-CVS, Subversion, and SCCS. Of these, the GNU
-project distributes CVS, GNU Arch, and RCS; we recommend that you use
-either CVS or GNU Arch for your projects, and RCS for individual
-files. We also have free software to replace SCCS, known as CSSC; if
-you are using SCCS and don't want to make the incompatible change to
-RCS or CVS, you can switch to CSSC.
+project distributes CVS, GNU Arch, and RCS. We also have free
+software to replace SCCS, known as CSSC; if you are using SCCS and
+don't want to make the incompatible change to RCS or CVS, you can
+switch to CSSC.
VC is enabled by default in Emacs. To disable it, set the
customizable variable @code{vc-handled-backends} to @code{nil}
@@ -1233,7 +1232,7 @@ customizable variable @code{vc-handled-backends} to @code{nil}
* Introduction to VC:: How version control works in general.
* VC Mode Line:: How the mode line shows version control status.
* Basic VC Editing:: How to edit a file under version control.
-* Old Versions:: Examining and comparing old versions.
+* Old Revisions:: Examining and comparing old versions.
* Secondary VC Commands:: The commands used a little less frequently.
* Branches:: Multiple lines of development.
@ifnottex
@@ -1248,9 +1247,12 @@ customizable variable @code{vc-handled-backends} to @code{nil}
@subsection Introduction to Version Control
VC allows you to use a version control system from within Emacs,
-integrating the version control operations smoothly with editing. VC
-provides a uniform interface to version control, so that regardless of
-which version control system is in use, you can use it the same way.
+integrating the version control operations smoothly with editing.
+Though VC cannot completely bridge the gaps between version-control
+systems with widely differing capabilities, it does provide
+a uniform interface to many version control operations. Regardless of
+which version control system is in use, you will be able to do basic
+operations in much the same way.
This section provides a general overview of version control, and
describes the version control systems that VC supports. You can skip
@@ -1258,127 +1260,253 @@ this section if you are already familiar with the version control system
you want to use.
@menu
-* Version Systems:: Supported version control back-end systems.
-* VC Concepts:: Words and concepts related to version control.
-* Types of Log File:: The per-file VC log in contrast to the ChangeLog.
+* Why Version Control?:: Understanding the problems it addresses
+* Version Control Systems:: Supported version control back-end systems.
+* VCS Concepts:: Words and concepts related to version control.
+* Types of Log File:: The VCS log in contrast to the ChangeLog.
@end menu
-@node Version Systems
+@node Why Version Control?
+@subsubsection Understanding the problems it addresses
+
+ Version control systems provide you with three important capabilities:
+@dfn{reversibility}. @dfn{concurrency}, and @dfn{history}.
+
+ The most basic capability you get from a version-control system is
+reversibility, the ability to back up to a saved, known-good state when
+you discover that some modification you did was a mistake or a bad idea.
+
+ Version-control systems also support concurrency, the ability to
+have many people modifying the same collection of code or documents
+knowing that conflicting modifications can be detected and resolved.
+
+ Version-control systems give you the capability to attach a history
+to your data, explanatory comments about the intention behind each
+change to it. Even for a programmer working solo change histories
+are an important aid to memory; for a multi-person project they
+become a vitally important form of communication among developers.
+
+@node Version Control Systems
@subsubsection Supported Version Control Systems
@cindex back end (version control)
VC currently works with six different version control systems or
-``back ends'': CVS, GNU Arch, RCS, Meta-CVS, Subversion, and SCCS.
-
-@cindex CVS
- CVS is a free version control system that is used for the majority
-of free software projects today. It allows concurrent multi-user
-development either locally or over the network. Some of its
-shortcomings, corrected by newer systems such as GNU Arch, are that it
-lacks atomic commits or support for renaming files. VC supports all
-basic editing operations under CVS, but for some less common tasks you
-still need to call CVS from the command line. Note also that before
-using CVS you must set up a repository, which is a subject too complex
-to treat here.
+``back ends'': SCCS, RCS, CVS, Meta-CVS, Subversion, GNU Arch,
+git, and Mercurial.
+@comment Omitting bzr because support is very scratchy and incomplete.
-@cindex GNU Arch
-@cindex Arch
- GNU Arch is a new version control system that is designed for
-distributed work. It differs in many ways from old well-known
-systems, such as CVS and RCS. It supports different transports for
-interoperating between users, offline operations, and it has good
-branching and merging features. It also supports atomic commits, and
-history of file renaming and moving. VC does not support all
-operations provided by GNU Arch, so you must sometimes invoke it from
-the command line, or use a specialized module.
+@cindex SCCS
+ SCCS was the first version-control system ever built, and was long ago
+superseded by later and more advanced ones; Emacs supports it only for
+backward compatibility and historical reasons. VC compensates for
+certain features missing in SCCS (snapshots, for example) by
+implementing them itself, but some other VC features, such as multiple
+branches, are not available with SCCS. Since SCCS is non-free you
+should not use it; use its free replacement CSSC instead. But you
+should use CSSC only if for some reason you cannot use a more
+recent and better-designed version-control system.
@cindex RCS
RCS is the free version control system around which VC was initially
-built. The VC commands are therefore conceptually closest to RCS.
-Almost everything you can do with RCS can be done through VC. You
-cannot use RCS over the network though, and it only works at the level
+built. Almost everything you can do with RCS can be done through VC. You
+cannot use RCS over the network, though, and it only works at the level
of individual files, rather than projects. You should use it if you
want a simple, yet reliable tool for handling individual files.
+@cindex CVS
+ CVS is the free version control system that was until recently (as of
+2007) used for the majority of free software projects, though it is now
+being superseded by other systems. It allows concurrent
+multi-user development either locally or over the network. Some of its
+shortcomings, corrected by newer systems such as Subversion or GNU Arch,
+are that it lacks atomic commits or support for renaming files. VC
+supports all basic editing operations under CVS, but for some less
+common tasks you still need to call CVS from the command line. Note
+also that before using CVS you must set up a repository, which is a
+subject too complex to treat here.
+
+@cindex Meta-CVS
+ Meta-CVS uses CVS repositories, but has an enhanced client that
+uses client-side information to solve various of the known problems
+with CVS. It is not widely used, having been overtaken by Subversion.
+The Emacs support for it is rudimentary, and may be removed in a
+future version.
+
@cindex SVN
@cindex Subversion
Subversion is a free version control system designed to be similar
-to CVS but without CVS's problems. Subversion supports atomic commits,
-and versions directories, symbolic links, meta-data, renames, copies,
-and deletes. It can be used via http or via its own protocol.
+to CVS but without CVS's problems, and is now (2007) rapidly
+superseding CVS. Subversion supports atomic commits of filesets, and
+versions directories, symbolic links, meta-data, renames, copies, and
+deletes. It can be used via http or via its own protocol.
-@cindex MCVS
-@cindex Meta-CVS
- Meta-CVS is another attempt to solve problems arising in CVS. It
-supports directory structure versioning, improved branching and
-merging, and use of symbolic links and meta-data in repositories.
-
-@cindex SCCS
- SCCS is a proprietary but widely used version control system. In
-terms of capabilities, it is the weakest of the six that VC supports.
-VC compensates for certain features missing in SCCS (snapshots, for
-example) by implementing them itself, but some other VC features, such
-as multiple branches, are not available with SCCS. Since SCCS is
-non-free, not respecting its users freedom, you should not use it;
-use its free replacement CSSC instead. But you should use CSSC only
-if for some reason you cannot use RCS, or one of the higher-level
-systems such as CVS or GNU Arch.
-
-In the following, we discuss mainly RCS, SCCS and CVS. Nearly
-everything said about CVS applies to GNU Arch, Subversion and Meta-CVS
-as well.
-
-@node VC Concepts
+@cindex GNU Arch
+@cindex Arch
+ GNU Arch is a new version control system that is designed for
+distributed work. It differs in many ways from old well-known
+systems, such as CVS and RCS. It supports different transports for
+interoperating between users, offline operations, and it has good
+branching and merging features. It also supports atomic commits of
+filesets, and keeps a history of file renaming and moving. VC
+does not support all operations provided by GNU Arch, so you must
+sometimes invoke it from the command line, or use a specialized
+module.
+
+@cindex git
+ git is a version-control system invented by Linus Torvalds to
+support Linux kernel development. Like GNU Arch, it supports atomic
+commits of filesets, and keeps a history of file renaming and
+moving. One significant feature of git is that it largely abolishes
+the notion of a single centralized repository; instead, each working
+copy of a git project is its own repository and coordination is done
+through repository-sync operations. VC fully supports git, except
+that it doesn't do news merges and repository sync operations must
+be done from the command line.
+
+@cindex hg
+@cindex Mercurial
+ Mercurial is a distributed version-control systems broadly
+resembling GNU Arch and git, with atomic fileset commits and
+rename/move histories. Like git it is fully decentralized.
+VC fully supports Mercurial, except for repository sync operations
+which still need to be done from the command line.
+
+@node VCS Concepts
@subsubsection Concepts of Version Control
-@cindex master file
+@cindex repository
@cindex registered file
When a file is under version control, we also say that it is
-@dfn{registered} in the version control system. Each registered file
-has a corresponding @dfn{master file} which represents the file's
-present state plus its change history---enough to reconstruct the
-current version or any earlier version. Usually the master file also
-records a @dfn{log entry} for each version, describing in words what was
-changed in that version.
+@dfn{registered} in the version control system. The system has a
+@dfn{repository} which stores both the file's present state plus its
+change history---enough to reconstruct the current version or any
+earlier version. The repository will also contain a @dfn{log entry} for
+each change to the file, describing in words what was modified in that
+revision.
@cindex work file
@cindex checking out files
- The file that is maintained under version control is sometimes called
-the @dfn{work file} corresponding to its master file. You edit the work
-file and make changes in it, as you would with an ordinary file. (With
-SCCS and RCS, you must @dfn{lock} the file before you start to edit it.)
-After you are done with a set of changes, you @dfn{check the file in},
-which records the changes in the master file, along with a log entry for
+ A file checked out of a version-control repository is sometimes
+called the @dfn{work file}. You edit the work file and make changes
+in it, as you would with an ordinary file. After you are done with a
+set of changes, you @dfn{check in} or @dfn{commit} the file, which
+records the changes in the repository, along with a log entry for
them.
- With CVS, there are usually multiple work files corresponding to a
-single master file---often each user has his own copy. It is also
-possible to use RCS in this way, but this is not the usual way to use
-RCS.
-
-@cindex locking and version control
+@cindex revision
+@cindex revision ID
+ A copy of a file stored in a repository is called a @dfn{revision}.
+The history of a file is a sequence of revisions. Each revisions is
+named by a @dfn{revision ID}. In older VCSes (such as SCCS and RCS),
+the simplest kind of revision ID consisted of a @dfn{dot-pair};
+integers (the @dfn{major} and @dfn{minor} revisions) separated by a
+dot. Newer VCSes tend to use @dfn{monotonic} revision IDs that are
+simple integers counting from 1.
+
+ To go beyond these basic concepts, you will need to understand three
+ways in which version-control systems can differ from each other. They
+can be locking or merging; they can be file-based or changeset-based;
+and they can be centralized or decentralized. VC handles all these
+choices, but they lead to differing behaviors which you will need
+to understand as you use it.
+
+@cindex locking versus merging
A version control system typically has some mechanism to coordinate
between users who want to change the same file. One method is
@dfn{locking} (analogous to the locking that Emacs uses to detect
-simultaneous editing of a file, but distinct from it). The other method
-is to merge your changes with other people's changes when you check them
-in.
+simultaneous editing of a file, but distinct from it). In a locking
+system, such as SCCS, you must @dfn{lock} a file before you start to
+edit it. The other method is @dfn{merging}; the system tries to
+merge your changes with other people's changes when you check them in.
With version control locking, work files are normally read-only so
that you cannot change them. You ask the version control system to make
a work file writable for you by locking it; only one user can do
this at any given time. When you check in your changes, that unlocks
the file, making the work file read-only again. This allows other users
-to lock the file to make further changes. SCCS always uses locking, and
-RCS normally does.
+to lock the file to make further changes.
+
+ By contrast, a merging system lets each user check out and modify a
+work file at any time. When you check in a file, the system will
+attempt to merge your changes with any others checked into the
+repository since you checked out the file.
+
+ Both locking and merging systems can have problems when multiple users
+try to modify the same file at the same time. Locking systems have
+@dfn{lock conflicts}; a user may try to check a file out and be unable
+to because it is locked. In merging systems, @dfn{merge conflicts}
+happen when you check in a change to a file that conflicts with a change
+checked in by someone else after your checkout. Both kinds of conflict
+have to be resolved by human judgment and communication.
+
+ SCCS always uses locking. RCS is lock-based by default but can be
+told to operate in a merging style. CVS and Subversion are
+merge-based by default but can be told to operate in a locking mode.
+Most later version-control systems, such as GNU Arch, git, and
+Mercurial, have been based exclusively on merging rather than locking.
+This is because experience has shown that the merging-based approach
+is generally superior to the locking one, both in convenience to
+developers and in minimizing the number and severity of conflicts that
+actually occur.
+
+ While it is rather unlikely that anyone will ever again build a
+fundamentally locking-based rather than merging-based version-control
+system in the future, merging-based version-systems sometimes have locks
+retrofitted onto them for reasons having nothing to do with technology.
+@footnote{Usually the control-freak instincts of managers.} For this
+reason, and to support older systems still in use, VC mode supports
+both locking and merging version control and tries to hide the differences
+between them as much as possible.
+
+@cindex files versus changesets.
+ On SCCS, RCS, CVS, and other early version-control systems, checkins
+and other operations are @dfn{file-based}; each file has its own
+@dfn{master file} with its own comment and revision history separate
+from that of all other files in the system. Later systems, beginning
+with Subversion, became @dfn{changeset-based}; a checkin under these
+may include changes to several files and that change set is treated as
+a unit by the system. Any comment associated with the change belongs
+to no single file, but is attached to the changeset itself.
+
+ Changeset-based version control is in general both more flexible and
+more powerful than file-based version control; usually, when a change to
+multiple files has to be backed out, it's good to be able to easily
+identify and remove all of it. But it took some years for designers to
+figure that out, and while file-based systems are passing out of use
+there are lots of legacy repositories still to be dealt with at time of
+writing in 2007.
+
+ In fact, older versions of VC mode supported only file-based systems,
+leading to some unhappy results when it was used to drive
+changeset-based ones---the Subversion support, for example, used to break
+up changesets into multiple per-file commits. This has been fixed, but
+it has left a legacy in VC-mode's terminology. The terms ``checkin''
+and ``checkout'' are associated with file-based and locking-based
+systems and a bit archaic; nowadays those operations are usually called
+``commit'' and ``update''.
+
+@cindex centralized vs. decentralized
+ Early version-control systems were designed around a @dfn{centralized}
+model in which each project has only one repository used by all
+developers. SCCS, RCS, CVS, and Subversion share this kind of model.
+It has two important problems. One is that a single repository is a
+single point of failure---if the repository server is down all work
+stops. The other is that you need to be connected live to the server to
+do checkins and checkouts; if you're offline, you can't work.
+
+ Newer version-control systems like GNU Arch, git, Mercurial, and Bzr
+are @dfn{decentralized}. A project may have several different
+repositories, and these systems support a sort of super-merge between
+repositories that tries to reconcile their change histories. At the
+limit, each developer has his/her own repository, and repository
+merges replace checkin/commit operations.
+
+ VC's job is to help you manage the traffic between your personal
+workfiles and a repository. Whether that repository is a single master
+or one of a network of peer repositories is not something VC has to care
+about. Thus, the difference between a centralized and a decentralized
+version-control system is invisible to VC mode.
- The other alternative for RCS is to let each user modify the work file
-at any time. In this mode, locking is not required, but it is
-permitted; check-in is still the way to record a new version.
-
- CVS normally allows each user to modify his own copy of the work file
-at any time, but requires merging with changes from other users at
-check-in time. However, CVS can also be set up to require locking.
@iftex
(@pxref{CVS Options,,,emacs-xtra, Specialized Emacs Features}).
@end iftex
@@ -1394,7 +1522,7 @@ check-in time. However, CVS can also be set up to require locking.
@cindex version control log
Projects that use a revision control system can have @emph{two}
-types of log for changes. One is the per-file log maintained by the
+types of log for changes. One is the log maintained by the
revision control system: each time you check in a change, you must
fill out a @dfn{log entry} for the change (@pxref{Log Buffer}). This
kind of log is called the @dfn{version control log}, also the
@@ -1407,10 +1535,22 @@ A small program would use one @file{ChangeLog} file; a large program
may well merit a @file{ChangeLog} file in each major directory.
@xref{Change Log}.
- A project maintained with version control can use just the per-file
-log, or it can use both kinds of logs. It can handle some files one
-way and some files the other way. Each project has its policy, which
-you should follow.
+ Actually, the fact that both kinds of log exist is partly a legacy from
+file-based version control. Changelogs are a GNU convention, later
+more widely adopted, that help developers to get a changeset-based
+view of a project even when its version-control system has that
+information split up in multiple file-based logs.
+
+ Changeset-based version systems, on the other hand, often maintain
+a changeset-based modification log for the entire system that makes
+ChangeLogs mostly redundant. The only advantage ChangeLogs retain is that
+it may be useful to be able to view the transaction history of a
+single directory separately from those of other directories.
+
+ A project maintained with version control can use just the
+version-control log, or it can use both kinds of logs. It can
+handle some files one way and some files the other way. Each project
+has its policy, which you should follow.
When the policy is to use both, you typically want to write an entry
for each change just once, then put it into both logs. You can write
@@ -1425,7 +1565,6 @@ to copy it to @file{ChangeLog}
(@pxref{Change Logs and VC}).
@end ifnottex
-
@node VC Mode Line
@subsection Version Control and the Mode Line
@@ -1433,7 +1572,7 @@ to copy it to @file{ChangeLog}
this on the mode line. For example, @samp{RCS-1.3} says that RCS is
used for that file, and the current version is 1.3.
- The character between the back-end name and the version number
+ The character between the back-end name and the revision ID
indicates the version control status of the file. @samp{-} means that
the work file is not locked (if locking is in use), or not modified (if
locking is not in use). @samp{:} indicates that the file is locked, or
@@ -1455,8 +1594,61 @@ system, but is usually not excessive.
@node Basic VC Editing
@subsection Basic Editing under Version Control
+@menu
+* Selecting A Fileset:: Choosing a set of files to operate on
+* Doing The Right Thing:: Stepping forward in the development cycle
+* VC With A Locking VCS:: RCS in its default mode, SCCS, and optionally CVS.
+* VC With A Merging VCS:: Without locking: default mode for CVS.
+* Advanced C-x v v:: Advanced features available with a prefix argument.
+* Log Buffer:: Features available in log entry buffers.
+@end menu
+
+@node Selecting A Fileset
+@subsubsection Choosing the scope of your command
+
+@cindex filesets
+ Most VC commands operate on @dfn{filesets}. A fileset is a
+group of files that you have chosen to treat as a unit at the
+time you perform the command. Filesets are the way that VC
+mode bridges the gap between file-based and changeset-based
+version-control systems.
+
+ If you are visiting a version-controlled file in the current buffer,
+the default fileset for any command is simply that one file. If you
+are visiting a VC Dired buffer, and some files in it are marked,
+your fileset is the marked files only.
+
+ All files in a fileset must be under the same version-control system.
+If they are not, VC mode will fail when you attempt to execute
+a command on the fileset.
+
+ In VC, filesets, are, essentially, a way to pass multiple file
+arguments as a group to underlying version-control commands. For
+example, on Subversion a checkin with more than one file in its
+fileset will become a joint commit, as though you had typed
+@command{svn commit} with those file arguments at the shell command
+line in the directory of the selected buffer.
+
+ If you are accustomed to earlier versions of VC, the change in behavior
+you will notice is in VC-Dired mode. Other than @kbd{C-x v v}, most
+VC-mode commands once operated on only one file selected by the line
+the cursor is on. The change in the behavior of @kbd{C-x v v} outside
+VC-Dired mode is more subtle. Formerly it operated in parallel on all
+marked files, but did not pass them to the version-control backends as
+a group. Now it does, which enables VC to drive changeset-based
+version-control systems.
+
+ Emacs uses the concept of named filesets elsewhere
+(@pxref{Filesets}) to allow you to view and visit files in functional
+groups. Unlike those, VC filesets are not named and don't persist
+across sessions.
+
+@node Doing The Right Thing
+@subsubsection Performing the next operation in the development cycle
+
The principal VC command is an all-purpose command that performs
-either locking or check-in, depending on the situation.
+either locking or check-in on your current fileset, depending on
+the situation.
@table @kbd
@itemx C-x v v
@@ -1466,8 +1658,10 @@ Perform the next logical version control operation on this file.
@findex vc-next-action
@kindex C-x v v
The precise action of this command depends on the state of the file,
-and whether the version control system uses locking or not. SCCS and
-RCS normally use locking; CVS normally does not use locking.
+and whether the version control system uses locking or merging. SCCS and
+RCS normally use locking; CVS and Subversion normally use
+merging but can be configured to do locking. Later systems such as
+GNU Arch and Mercurial always use merging.
@findex vc-toggle-read-only
@kindex C-x C-q @r{(Version Control)}
@@ -1478,14 +1672,7 @@ accidentally edit a file without properly checking it out first. To
achieve this, bind the key @kbd{C-x C-q} to @kbd{vc-toggle-read-only}
in your @file{~/.emacs} file. (@xref{Init Rebinding}.)
-@menu
-* VC with Locking:: RCS in its default mode, SCCS, and optionally CVS.
-* Without Locking:: Without locking: default mode for CVS.
-* Advanced C-x v v:: Advanced features available with a prefix argument.
-* Log Buffer:: Features available in log entry buffers.
-@end menu
-
-@node VC with Locking
+@node VC With A Locking VCS
@subsubsection Basic Version Control with Locking
If locking is used for the file (as with SCCS, and RCS in its default
@@ -1499,7 +1686,7 @@ makes it writable so that you can change it.
@item
If the file is locked by you, and contains changes, @kbd{C-x v v} checks
in the changes. In order to do this, it first reads the log entry
-for the new version. @xref{Log Buffer}.
+for the new revision. @xref{Log Buffer}.
@item
If the file is locked by you, but you have not changed it since you
@@ -1516,30 +1703,33 @@ formerly locked the file, to inform him of what has happened.
These rules also apply when you use CVS in locking mode, except
that there is no such thing as stealing a lock.
-@node Without Locking
-@subsubsection Basic Version Control without Locking
+@node VC With A Merging VCS
+@subsubsection Basic Version Control with Merging
- When there is no locking---the default for CVS---work files are always
+ When your version-control system is merging-based rather than
+locking-based---the default for CVS and Subversion, and the way GNU
+Arch and more modern systems always work---work files are always
writable; you do not need to do anything before you begin to edit a
-file. The status indicator on the mode line is @samp{-} if the file is
-unmodified; it flips to @samp{:} as soon as you save any changes in the
-work file.
+file. The status indicator on the mode line is @samp{-} if the file
+is unmodified; it flips to @samp{:} as soon as you save any changes in
+the work file.
- Here is what @kbd{C-x v v} does when using CVS:
+ Here is what @kbd{C-x v v} does when using a merging-based system
+(such as CVS or Subversion in their default merging mode):
@itemize @bullet
@item
-If some other user has checked in changes into the master file, Emacs
+If some other user has checked in changes into the repository, Emacs
asks you whether you want to merge those changes into your own work
file. You must do this before you can check in your own changes. (To
-pick up any recent changes from the master file @emph{without} trying
+pick up any recent changes from the repository @emph{without} trying
to commit your own changes, type @kbd{C-x v m @key{RET}}.)
@xref{Merging}.
@item
-If there are no new changes in the master file, but you have made
+If there are no new changes in the repository, but you have made
modifications in your work file, @kbd{C-x v v} checks in your changes.
-In order to do this, it first reads the log entry for the new version.
+In order to do this, it first reads the log entry for the new revision.
@xref{Log Buffer}.
@item
@@ -1548,23 +1738,25 @@ If the file is not modified, the @kbd{C-x v v} does nothing.
These rules also apply when you use RCS in the mode that does not
require locking, except that automatic merging of changes from the
-master file is not implemented. Unfortunately, this means that nothing
+repository is not implemented. Unfortunately, this means that nothing
informs you if another user has checked in changes in the same file
since you began editing it, and when this happens, his changes will be
-effectively removed when you check in your version (though they will
-remain in the master file, so they will not be entirely lost). You must
-therefore verify that the current version is unchanged, before you
-check in your changes. We hope to eliminate this risk and provide
-automatic merging with RCS in a future Emacs version.
+effectively removed when you check in your revision (though they will
+remain in the repository, so they will not be entirely lost). You must
+therefore verify that the current revision is unchanged, before you
+check in your changes.
In addition, locking is possible with RCS even in this mode, although
it is not required; @kbd{C-x v v} with an unmodified file locks the
file, just as it does with RCS in its normal (locking) mode.
+ Later systems like CVS, Subversion and Arch will notice conflicting
+changes in the repository automatically and notify you when they occur.
+
@node Advanced C-x v v
@subsubsection Advanced Control in @kbd{C-x v v}
-@cindex version number to check in/out
+@cindex revision ID to check in/out
When you give a prefix argument to @code{vc-next-action} (@kbd{C-u
C-x v v}), it still performs the next logical version control
operation, but accepts additional arguments to specify precisely how
@@ -1572,21 +1764,21 @@ to do the operation.
@itemize @bullet
@item
-If the file is modified (or locked), you can specify the version
-number to use for the new version that you check in. This is one way
+If the file is modified (or locked), you can specify the revision ID
+to use for the new version that you check in. This is one way
to create a new branch (@pxref{Branches}).
@item
If the file is not modified (and unlocked), you can specify the
-version to select; this lets you start working from an older version,
-or on another branch. If you do not enter any version, that takes you
-to the highest version on the current branch; therefore @kbd{C-u C-x
-v v @key{RET}} is a convenient way to get the latest version of a file from
-the repository.
+revision to select; this lets you start working from an older
+revision, or on another branch. If you do not enter any revision,
+that takes you to the highest (``head'') revision on the current
+branch; therefore @kbd{C-u C-x v v @key{RET}} is a convenient way to
+get the latest version of a file from the repository.
@item
@cindex specific version control system
-Instead of the version number, you can also specify the name of a
+Instead of the revision ID, you can also specify the name of a
version control system. This is useful when one file is being managed
with two version control systems at the same time
@iftex
@@ -1630,7 +1822,7 @@ the revision control log.
In the @samp{*VC-Log*} buffer, @kbd{C-c C-f} (@kbd{M-x
log-edit-show-files}) shows the list of files to be committed in case
you need to check that. (This can be a list of more than one file if
-you use VC Dired mode or PCL-CVS.
+you use VC Dired mode or PCL-CVS.)
@iftex
@xref{VC Dired Mode,,,emacs-xtra, Specialized Emacs Features},
@end iftex
@@ -1650,73 +1842,93 @@ in the @samp{*VC-Log*} buffer, and you can go back to that buffer at any
time to complete the check-in.
If you change several source files for the same reason, it is often
-convenient to specify the same log entry for many of the files. To do
-this, use the history of previous log entries. The commands @kbd{M-n},
-@kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just like the
-minibuffer history commands (except that these versions are used outside
-the minibuffer).
+convenient to specify the same log entry for many of the files. (This
+is the normal way to do things on a changeset-oriented system, where
+comments are attached to changesets rather than the history of
+individual files.) The most convenient way to do this is to mark all the
+files in VC-Dired mode and check in from there; the log buffer will
+carry the fileset information with it and do a group commit when you
+confirm it with @kbd{C-c C-c}.
+
+ However, you can also browse the history of previous log entries to
+duplicate a checkin comment. This can be useful when you want several
+files to have checkin comments that vary only slightly from each
+other. The commands @kbd{M-n}, @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for
+doing this work just like the minibuffer history commands (except that
+these versions are used outside the minibuffer).
@vindex vc-log-mode-hook
- Each time you check in a file, the log entry buffer is put into VC Log
+ Each time you check in a change, the log entry buffer is put into VC Log
mode, which involves running two hooks: @code{text-mode-hook} and
@code{vc-log-mode-hook}. @xref{Hooks}.
-@node Old Versions
-@subsection Examining And Comparing Old Versions
+@node Old Revisions
+@subsection Examining And Comparing Old Revisions
One of the convenient features of version control is the ability
-to examine any version of a file, or compare two versions.
+to examine any revision of a file, or compare two revisions.
@table @kbd
-@item C-x v ~ @var{version} @key{RET}
-Examine version @var{version} of the visited file, in a buffer of its
+@item C-x v ~ @var{revision} @key{RET}
+Examine revision @var{revision} of the visited file, in a buffer of its
own.
@item C-x v =
-Compare the current buffer contents with the master version from which
-you started editing.
+Compare the buffer contents associated with the current
+fileset with the working revision(s) from which you started editing.
-@item C-u C-x v = @var{file} @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET}
-Compare the specified two versions of @var{file}.
+@item C-u C-x v = @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET}
+Compare the specified two repository revisions of the current fileset.
@item C-x v g
-Display the file with per-line version information and using colors.
+Display the file with per-line revision information and using colors.
@end table
-@findex vc-version-other-window
+@findex vc-revision-other-window
@kindex C-x v ~
- To examine an old version in its entirety, visit the file and then type
-@kbd{C-x v ~ @var{version} @key{RET}} (@code{vc-version-other-window}).
-This puts the text of version @var{version} in a file named
-@file{@var{filename}.~@var{version}~}, and visits it in its own buffer
-in a separate window. (In RCS, you can also select an old version
+ To examine an old revision in its entirety, visit the file and then type
+@kbd{C-x v ~ @var{revision} @key{RET}} (@code{vc-revision-other-window}).
+This puts the text of revision @var{revision} in a file named
+@file{@var{filename}.~@var{revision}~}, and visits it in its own buffer
+in a separate window. (In RCS, you can also select an old revision
and create a branch from it. @xref{Branches}.)
@findex vc-diff
@kindex C-x v =
- It is usually more convenient to compare two versions of the file,
-with the command @kbd{C-x v =} (@code{vc-diff}). Plain @kbd{C-x v =}
-compares the current buffer contents (saving them in the file if
-necessary) with the master version from which you started editing the
-file (this is not necessarily the latest version of the file).
-@kbd{C-u C-x v =}, with a numeric argument, reads a file name and two
-version numbers, then compares those versions of the specified file.
-Both forms display the output in a special buffer in another window.
-
- You can specify a checked-in version by its number; an empty input
+@kbd{C-x v =} compares the current buffer contents of each file in the
+current fileset (saving them in the file if necessary) with the
+repository revision from which you started editing each file (this is not
+necessarily the latest revision of the file). The diff will be displayed
+in a special buffer in another window.
+
+@findex vc-diff
+@kindex C-u C-x v =
+ You can compare two repository revisions of the current fileset with
+the command @kbd{C-u C-x v =} (@code{vc-diff}). @kbd{C-u C-x v =} reads
+two revision ID or tags. The diff will be displayed in a special
+buffer in another window.
+
+ You can specify a checked-in revision by its ID; an empty input
specifies the current contents of the work file (which may be different
-from all the checked-in versions). You can also specify a snapshot name
+from all the checked-in revisions). You can also specify a snapshot name
@iftex
(@pxref{Snapshots,,,emacs-xtra, Specialized Emacs Features})
@end iftex
@ifnottex
(@pxref{Snapshots})
@end ifnottex
-instead of one or both version numbers.
+instead of one or both revision ID.
+
+ Note that if your version-control system is file-oriented (SCCS,
+RCS, CVS) rather than fileset-oriented (Subversion, GNU Arch, git,
+Mercurial) specifying a revision of a multiple-file fileset by
+revision ID (as opposed to a snapshot name or RSCCS/RCS tag) is
+unlikely to return diffs that are connected in any meaningful way.
- If you supply a directory name instead of the name of a registered
-file, this command compares the two specified versions of all registered
-files in that directory and its subdirectories.
+ If you invoke @kbd{C-u C-x v =} or @kbd{C-u C-x v =} from a buffer
+that is neither visiting a version-controlled file nor a VC Dired
+buffer, these commands will generate a diff of all registered files in
+the current directory and its subdirectories.
@vindex vc-diff-switches
@vindex vc-rcs-diff-switches
@@ -1734,12 +1946,12 @@ the options in @code{vc-rcs-diff-switches}. The
Compilation mode (@pxref{Compilation Mode}), such as @kbd{C-x `} and
@kbd{C-c C-c}, in both the ``old'' and ``new'' text, and they always
find the corresponding locations in the current work file. (Older
-versions are not, in general, present as files on your disk.)
+revisions are not, in general, present as files on your disk.)
@findex vc-annotate
@kindex C-x v g
For some back ends, you can display the file @dfn{annotated} with
-per-line version information and using colors to enhance the visual
+per-line revision information and using colors to enhance the visual
appearance, with the command @kbd{M-x vc-annotate}. It creates a new
buffer (the ``annotate buffer'') displaying the file's text, with each
part colored to show how old it is. Text colored red is new, blue means
@@ -1748,7 +1960,7 @@ the color is scaled over the full range of ages, such that the oldest
changes are blue, and the newest changes are red.
When you give a prefix argument to this command, it uses the
-minibuffer to read two arguments: which version number to display and
+minibuffer to read two arguments: the ID of which revision to display and
annotate (instead of the current file contents), and the time span in
days the color range should cover.
@@ -1786,9 +1998,9 @@ the author's description of the changes in the revision on the current
line.
@item W
-Annotate the workfile version--the one you are editing. If you used
+Annotate the working revision--the one you are editing. If you used
@kbd{P} and @kbd{N} to browse to other revisions, use this key to
-return to your current version.
+return to your working revision.
@end table
@node Secondary VC Commands
@@ -1841,16 +2053,18 @@ situation.
If locking is in use, @kbd{C-x v i} leaves the file unlocked and
read-only. Type @kbd{C-x v v} if you wish to start editing it. After
registering a file with CVS, you must subsequently commit the initial
-version by typing @kbd{C-x v v}. Until you do that, the version
+revision by typing @kbd{C-x v v}. Until you do that, the revision ID
appears as @samp{@@@@} in the mode line.
-@vindex vc-default-init-version
-@cindex initial version number to register
- The initial version number for a newly registered file is 1.1, by
-default. You can specify a different default by setting the variable
-@code{vc-default-init-version}, or you can give @kbd{C-x v i} a numeric
-argument; then it reads the initial version number for this particular
-file using the minibuffer.
+@vindex vc-default-init-revision
+@cindex initial revision ID to register
+ The default initial revision ID for a newly registered file
+varies by what VCS you are using; normally it will be 1.1 on VCSes
+that use dot-pair revision IDs and 1 on VCSes that use monotonic IDs.
+You can specify a different default by setting the variable
+@code{vc-default-init-revision}, or you can give @kbd{C-x v i} a
+numeric argument; then it reads the initial revision ID for this
+particular file using the minibuffer.
@vindex vc-initial-comment
If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads an
@@ -1862,12 +2076,12 @@ the initial comment works like reading a log entry (@pxref{Log Buffer}).
@table @kbd
@item C-x v l
-Display version control state and change history.
+Display revision control state and change history.
@end table
@kindex C-x v l
@findex vc-print-log
- To view the detailed version control status and history of a file,
+ To view the detailed revision control status and history of a file,
type @kbd{C-x v l} (@code{vc-print-log}). It displays the history of
changes to the current file, including the text of the log entries. The
output appears in a separate window. The point is centered at the
@@ -1915,7 +2129,7 @@ It also takes a numeric prefix argument as a repeat count.
@item f
Visit the revision indicated at the current line, like typing @kbd{C-x
-v ~} and specifying this revision's number (@pxref{Old Versions}).
+v ~} and specifying this revision's ID (@pxref{Old Revisions}).
@item d
Display the diff (@pxref{Comparing Files}) between the revision
@@ -1929,7 +2143,7 @@ current line was committed.
@table @kbd
@item C-x v u
-Revert the buffer and the file to the version from which you started
+Revert the buffer and the file to the working revision from which you started
editing the file.
@item C-x v c
@@ -1940,51 +2154,25 @@ This undoes your last check-in.
@kindex C-x v u
@findex vc-revert-buffer
If you want to discard your current set of changes and revert to the
-version from which you started editing the file, use @kbd{C-x v u}
+working revision from which you started editing the file, use @kbd{C-x v u}
(@code{vc-revert-buffer}). This leaves the file unlocked; if locking
is in use, you must first lock the file again before you change it
again. @kbd{C-x v u} requires confirmation, unless it sees that you
-haven't made any changes with respect to the master version.
+haven't made any changes with respect to the master copy of the
+working revision.
@kbd{C-x v u} is also the command to unlock a file if you lock it and
then decide not to change it.
@kindex C-x v c
-@findex vc-cancel-version
+@findex vc-rollback
To cancel a change that you already checked in, use @kbd{C-x v c}
-(@code{vc-cancel-version}). This command discards all record of the
-most recent checked-in version, but only if your work file corresponds
-to that version---you cannot use @kbd{C-x v c} to cancel a version
-that is not the latest on its branch. @kbd{C-x v c} also offers to
-revert your work file and buffer to the previous version (the one that
-precedes the version that is deleted).
-
- If you answer @kbd{no}, VC keeps your changes in the buffer, and locks
-the file. The no-revert option is useful when you have checked in a
-change and then discover a trivial error in it; you can cancel the
-erroneous check-in, fix the error, and check the file in again.
-
- When @kbd{C-x v c} does not revert the buffer, it unexpands all
-version control headers in the buffer instead
-@iftex
-(@pxref{Version Headers,,,emacs-xtra, Specialized Emacs Features}).
-@end iftex
-@ifnottex
-(@pxref{Version Headers}).
-@end ifnottex
-This is because the buffer no longer corresponds to any existing
-version. If you check it in again, the check-in process will expand
-the headers properly for the new version number.
-
- However, it is impossible to unexpand the RCS @samp{@w{$}Log$} header
-automatically. If you use that header feature, you have to unexpand it
-by hand---by deleting the entry for the version that you just canceled.
-
- Be careful when invoking @kbd{C-x v c}, as it is easy to lose a lot of
-work with it. To help you be careful, this command always requires
-confirmation with @kbd{yes}. Note also that this command is disabled
-under CVS, because canceling versions is very dangerous and discouraged
-with CVS.
+(@code{vc-rollback}). This command discards all record of the most
+recent checked-in revision, but only if your work file corresponds to
+that revision---you cannot use @kbd{C-x v c} to cancel a revision that is
+not the latest on its branch. Note that many version-control systems do
+not support rollback at all; this command is something of a historical
+relic.
@ifnottex
@c vc1-xtra.texi needs extra level of lowering.
@@ -1999,7 +2187,7 @@ with CVS.
@cindex trunk (version control)
One use of version control is to maintain multiple ``current''
-versions of a file. For example, you might have different versions of a
+revisions of a file. For example, you might have different revisions of a
program in which you are gradually adding various unfinished new
features. Each such independent line of development is called a
@dfn{branch}. VC allows you to create branches, switch between
@@ -2007,18 +2195,30 @@ different branches, and merge changes from one branch to another.
Please note, however, that branches are not supported for SCCS.
A file's main line of development is usually called the @dfn{trunk}.
-The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At
-any such version, you can start an independent branch. A branch
-starting at version 1.2 would have version number 1.2.1.1, and consecutive
-versions on this branch would have numbers 1.2.1.2, 1.2.1.3, 1.2.1.4,
-and so on. If there is a second branch also starting at version 1.2, it
-would consist of versions 1.2.2.1, 1.2.2.2, 1.2.2.3, etc.
-
-@cindex head version
- If you omit the final component of a version number, that is called a
-@dfn{branch number}. It refers to the highest existing version on that
-branch---the @dfn{head version} of that branch. The branches in the
-example above have branch numbers 1.2.1 and 1.2.2.
+You can create multiple branches from the trunk. How the difference
+between trunk and branch is made visible is dependent on whether the
+VCS uses dot-pair or monotonic version IDs.
+
+ In VCSes with dot-pair revision IDs, the revisions on the trunk are
+normally IDed 1.1, 1.2, 1.3, etc. At any such revision, you can
+start an independent branch. A branch starting at revision 1.2 would
+have revision ID 1.2.1.1, and consecutive revisions on this branch
+would have IDs 1.2.1.2, 1.2.1.3, 1.2.1.4, and so on. If there is
+a second branch also starting at revision 1.2, it would consist of
+revisions 1.2.2.1, 1.2.2.2, 1.2.2.3, etc.
+
+ In VCSes with monotonic revision IDs, trunk revisions are IDed as
+1, 2, 3, etc. A branch from (say) revision 2 might start with 2.1 and
+continue through 2.2, 2.3, etc. But naming conventions for branches
+and subbranches vary widely on these systems, and some (like
+Mercurial) never depart from the monotonic integer sequence at all.
+Consult the documentation of the VCS you are using.
+
+@cindex head revision
+ If you omit the final component of a dot-pair revision ID, that is called a
+@dfn{branch ID}. It refers to the highest existing revision on that
+branch---the @dfn{head revision} of that branch. The branches in the
+dot-pair example above have branch IDs 1.2.1 and 1.2.2.
@menu
* Switching Branches:: How to get to another existing branch.
@@ -2032,14 +2232,15 @@ example above have branch numbers 1.2.1 and 1.2.2.
@subsubsection Switching between Branches
To switch between branches, type @kbd{C-u C-x v v} and specify the
-version number you want to select. This version is then visited
-@emph{unlocked} (write-protected), so you can examine it before locking
-it. Switching branches in this way is allowed only when the file is not
-locked.
+revision ID you want to select. On a locking-based system, this
+version is then visited @emph{unlocked} (write-protected), so you can
+examine it before locking it. Switching branches in this way is allowed
+only when the file is not locked.
- You can omit the minor version number, thus giving only the branch
-number; this takes you to the head version on the chosen branch. If you
-only type @key{RET}, Emacs goes to the highest version on the trunk.
+ On a VCS with dot-pair IDs, you can omit the minor part, thus giving
+only the branch ID; this takes you to the head version on the
+chosen branch. If you only type @key{RET}, Emacs goes to the highest
+version on the trunk.
After you have switched to any branch (including the main branch), you
stay on it for subsequent VC commands, until you explicitly select some
@@ -2048,32 +2249,36 @@ other branch.
@node Creating Branches
@subsubsection Creating New Branches
- To create a new branch from a head version (one that is the latest in
-the branch that contains it), first select that version if necessary,
+ To create a new branch from a head revision (one that is the latest in
+the branch that contains it), first select that revision if necessary,
lock it with @kbd{C-x v v}, and make whatever changes you want. Then,
when you check in the changes, use @kbd{C-u C-x v v}. This lets you
-specify the version number for the new version. You should specify a
-suitable branch number for a branch starting at the current version.
-For example, if the current version is 2.5, the branch number should be
+specify the revision ID for the new revision. You should specify a
+suitable branch ID for a branch starting at the current revision.
+For example, if the current revision is 2.5, the branch ID should be
2.5.1, 2.5.2, and so on, depending on the number of existing branches at
that point.
- To create a new branch at an older version (one that is no longer the
-head of a branch), first select that version (@pxref{Switching
-Branches}), then lock it with @kbd{C-x v v}. You'll be asked to
-confirm, when you lock the old version, that you really mean to create a
-new branch---if you say no, you'll be offered a chance to lock the
-latest version instead.
+ To create a new branch at an older revision (one that is no longer the
+head of a branch), first select that revision (@pxref{Switching
+Branches}). Your procedure will then differ depending on whether you
+are using a locking or merging-based VCS.
+
+ On a locking VCS, you will need to lock the old revision branch with
+@kbd{C-x v v}. You'll be asked to confirm, when you lock the old
+revision, that you really mean to create a new branch---if you say no,
+you'll be offered a chance to lock the latest revision instead. On
+a merging-based VCS you will skip this step.
Then make your changes and type @kbd{C-x v v} again to check in a new
-version. This automatically creates a new branch starting from the
-selected version. You need not specially request a new branch, because
-that's the only way to add a new version at a point that is not the head
+revision. This automatically creates a new branch starting from the
+selected revision. You need not specially request a new branch, because
+that's the only way to add a new revision at a point that is not the head
of a branch.
After the branch is created, you ``stay'' on it. That means that
-subsequent check-ins create new versions on that branch. To leave the
-branch, you must explicitly select a different version with @kbd{C-u C-x
+subsequent check-ins create new revisions on that branch. To leave the
+branch, you must explicitly select a different revision with @kbd{C-u C-x
v v}. To transfer changes from one branch to another, use the merge
command, described in the next section.
@@ -2103,26 +2308,26 @@ since you checked the file out (we call this @dfn{merging the news}).
This is the common way to pick up recent changes from the repository,
regardless of whether you have already changed the file yourself.
- You can also enter a branch number or a pair of version numbers in
+ You can also enter a branch ID or a pair of revision IDs in
the minibuffer. Then @kbd{C-x v m} finds the changes from that
-branch, or the differences between the two versions you specified, and
-merges them into the current version of the current file.
+branch, or the differences between the two revisions you specified, and
+merges them into the current revision of the current file.
As an example, suppose that you have finished a certain feature on
branch 1.3.1. In the meantime, development on the trunk has proceeded
-to version 1.5. To merge the changes from the branch to the trunk,
-first go to the head version of the trunk, by typing @kbd{C-u C-x v v
-@key{RET}}. Version 1.5 is now current. If locking is used for the file,
-type @kbd{C-x v v} to lock version 1.5 so that you can change it. Next,
+to revision 1.5. To merge the changes from the branch to the trunk,
+first go to the head revision of the trunk, by typing @kbd{C-u C-x v v
+@key{RET}}. Revision 1.5 is now current. If locking is used for the file,
+type @kbd{C-x v v} to lock revision 1.5 so that you can change it. Next,
type @kbd{C-x v m 1.3.1 @key{RET}}. This takes the entire set of changes on
-branch 1.3.1 (relative to version 1.3, where the branch started, up to
-the last version on the branch) and merges it into the current version
+branch 1.3.1 (relative to revision 1.3, where the branch started, up to
+the last revision on the branch) and merges it into the current revision
of the work file. You can now check in the changed file, thus creating
-version 1.6 containing the changes from the branch.
+revision 1.6 containing the changes from the branch.
It is possible to do further editing after merging the branch, before
the next check-in. But it is usually wiser to check in the merged
-version, then lock it and make the further changes. This will keep
+revision, then lock it and make the further changes. This will keep
a better record of the history of changes.
@cindex conflicts
@@ -2140,7 +2345,7 @@ Ediff, Ediff, ediff, The Ediff Manual}).
If you say no, the conflicting changes are both inserted into the
file, surrounded by @dfn{conflict markers}. The example below shows how
a conflict region looks; the file is called @samp{name} and the current
-master file version with user B's changes in it is 1.11.
+master file revision with user B's changes in it is 1.11.
@c @w here is so CVS won't think this is a conflict.
@smallexample
@@ -2163,12 +2368,12 @@ check in the merged version afterwards.
@subsubsection Multi-User Branching
It is often useful for multiple developers to work simultaneously on
-different branches of a file. CVS allows this by default; for RCS, it
-is possible if you create multiple source directories. Each source
-directory should have a link named @file{RCS} which points to a common
-directory of RCS master files. Then each source directory can have its
-own choice of selected versions, but all share the same common RCS
-records.
+different branches of a file. CVS and later systems allow this by
+default; for RCS, it is possible if you create multiple source
+directories. Each source directory should have a link named
+@file{RCS} which points to a common directory of RCS master files.
+Then each source directory can have its own choice of selected
+revisions, but all share the same common RCS records.
This technique works reliably and automatically, provided that the
source files contain RCS version headers
@@ -2178,13 +2383,13 @@ source files contain RCS version headers
@ifnottex
(@pxref{Version Headers}).
@end ifnottex
-The headers enable Emacs to be sure, at all times, which version
-number is present in the work file.
+The headers enable Emacs to be sure, at all times, which revision
+ID is present in the work file.
If the files do not have version headers, you must instead tell Emacs
explicitly in each session which branch you are working on. To do this,
first find the file, then type @kbd{C-u C-x v v} and specify the correct
-branch number. This ensures that Emacs knows which branch it is using
+branch ID. This ensures that Emacs knows which branch it is using
during this particular editing session.
@ifnottex
@@ -2861,6 +3066,11 @@ files in a fileset, and @kbd{M-x filesets-close} to close them. Use
a fileset. These commands are also available from the @samp{Filesets}
menu, where each existing fileset is represented by a submenu.
+ Emacs uses the concept of a fileset elsewhere @pxref{Version
+Control} to describe sets of files to be treated as a group for
+purposes of version-control operations. Those filesets are
+unnamed and do not persist across Emacs essions.
+
@ignore
arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250
@end ignore
diff --git a/man/fixit.texi b/doc/emacs/fixit.texi
index d1577e2f528..2d827f5a1a2 100644
--- a/man/fixit.texi
+++ b/doc/emacs/fixit.texi
@@ -325,7 +325,9 @@ you give an explicit command to do so.
To check the spelling of the word around or before point, and
optionally correct it as well, use the command @kbd{M-$}
(@code{ispell-word}). If the word is not correct, the command offers
-you various alternatives for what to do about it.
+you various alternatives for what to do about it. When the mark is
+active in Transient Mark mode, this command operates on the active
+region like @code{ispell-region}.
@findex ispell-buffer
@findex ispell-region
diff --git a/man/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi
index 9249f5f006c..ccea6bc46b0 100644
--- a/man/fortran-xtra.texi
+++ b/doc/emacs/fortran-xtra.texi
@@ -32,8 +32,8 @@ command runs the hook @code{fortran-mode-hook}.
@findex f90-mode
@findex fortran-mode
Fortran mode is meant for editing Fortran77 ``fixed format'' (and also
-``tab format'') source code. For editing the modern Fortran90 or
-Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}).
+``tab format'') source code. For editing the modern Fortran90/95/2003
+``free format'' source code, use F90 mode (@code{f90-mode}).
Emacs normally uses Fortran mode for files with extension @samp{.f},
@samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and
@samp{.f95}. GNU Fortran supports both kinds of format.
diff --git a/man/frames.texi b/doc/emacs/frames.texi
index a45b582b455..23c48b72b41 100644
--- a/man/frames.texi
+++ b/doc/emacs/frames.texi
@@ -224,9 +224,12 @@ for text in the cut buffer. If neither of those sources provides text
to yank, the kill ring contents are used.
The standard coding system for X Window System selections is
-@code{compound-text-with-extensions}. To specify another coding
-system for selections, use @kbd{C-x @key{RET} x} or @kbd{C-x @key{RET}
-X}. @xref{Communication Coding}.
+@code{compound-text-with-extensions}. You may find that the pasted
+text is not what you expected. In such a case, you can specify
+another coding system for selections by @kbd{C-x @key{RET} x} or
+@kbd{C-x @key{RET} X}, or can request the different data type by
+modifying the variable @code{x-select-request-type}.
+@xref{Communication Coding}.
@node Word and Line Mouse
@subsection Mouse Commands for Words and Lines
@@ -430,8 +433,8 @@ This menu is for specifying the frame's default font.
You can use mouse clicks on window mode lines to select and manipulate
windows.
- Some areas of the mode line, such as the buffer name and the major
-mode name, have their own special mouse bindings. These areas are
+ Some areas of the mode line, such as the buffer name, and major and minor
+mode names, have their own special mouse bindings. These areas are
highlighted when you hold the mouse over them, and information about
the special bindings will be displayed (@pxref{Tooltips}). This
section's commands do not apply in those areas.
diff --git a/man/glossary.texi b/doc/emacs/glossary.texi
index a9109de667b..a9109de667b 100644
--- a/man/glossary.texi
+++ b/doc/emacs/glossary.texi
diff --git a/man/gnu.texi b/doc/emacs/gnu.texi
index 1cf85f41c3c..1cf85f41c3c 100644
--- a/man/gnu.texi
+++ b/doc/emacs/gnu.texi
diff --git a/doc/emacs/gpl.texi b/doc/emacs/gpl.texi
new file mode 100644
index 00000000000..7fe5c3ebe40
--- /dev/null
+++ b/doc/emacs/gpl.texi
@@ -0,0 +1,721 @@
+@c The GNU General Public License.
+@center Version 3, 29 June 2007
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+@end display
+
+@heading Preamble
+
+The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom
+to share and change all versions of a program---to make sure it remains
+free software for all its users. We, the Free Software Foundation,
+use the GNU General Public License for most of our software; it
+applies also to any other work released this way by its authors. You
+can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you
+have certain responsibilities if you distribute copies of the
+software, or if you modify it: responsibilities to respect the freedom
+of others.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too,
+receive or can get the source code. And you must show them these
+terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so. This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software. The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products. If such problems arise substantially in
+other domains, we stand ready to extend this provision to those
+domains in future versions of the GPL, as needed to protect the
+freedom of users.
+
+Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish
+to avoid the special danger that patents applied to a free program
+could make it effectively proprietary. To prevent this, the GPL
+assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+@heading TERMS AND CONDITIONS
+
+@enumerate 0
+@item Definitions.
+
+``This License'' refers to version 3 of the GNU General Public License.
+
+``Copyright'' also means copyright-like laws that apply to other kinds
+of works, such as semiconductor masks.
+
+``The Program'' refers to any copyrightable work licensed under this
+License. Each licensee is addressed as ``you''. ``Licensees'' and
+``recipients'' may be individuals or organizations.
+
+To ``modify'' a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of
+an exact copy. The resulting work is called a ``modified version'' of
+the earlier work or a work ``based on'' the earlier work.
+
+A ``covered work'' means either the unmodified Program or a work based
+on the Program.
+
+To ``propagate'' a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+To ``convey'' a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.
+
+An interactive user interface displays ``Appropriate Legal Notices'' to
+the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+@item Source Code.
+
+The ``source code'' for a work means the preferred form of the work for
+making modifications to it. ``Object code'' means any non-source form
+of a work.
+
+A ``Standard Interface'' means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+The ``System Libraries'' of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+``Major Component'', in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+The ``Corresponding Source'' for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same
+work.
+
+@item Basic Permissions.
+
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright. Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+@item Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such
+circumvention is effected by exercising rights under this License with
+respect to the covered work, and you disclaim any intention to limit
+operation or modification of the work as a means of enforcing, against
+the work's users, your or third parties' legal rights to forbid
+circumvention of technological measures.
+
+@item Conveying Verbatim Copies.
+
+You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+@item Conveying Modified Source Versions.
+
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these
+conditions:
+
+@enumerate a
+@item
+The work must carry prominent notices stating that you modified it,
+and giving a relevant date.
+
+@item
+The work must carry prominent notices stating that it is released
+under this License and any conditions added under section 7. This
+requirement modifies the requirement in section 4 to ``keep intact all
+notices''.
+
+@item
+You must license the entire work, as a whole, under this License to
+anyone who comes into possession of a copy. This License will
+therefore apply, along with any applicable section 7 additional terms,
+to the whole of the work, and all its parts, regardless of how they
+are packaged. This License gives no permission to license the work in
+any other way, but it does not invalidate such permission if you have
+separately received it.
+
+@item
+If the work has interactive user interfaces, each must display
+Appropriate Legal Notices; however, if the Program has interactive
+interfaces that do not display Appropriate Legal Notices, your work
+need not make them do so.
+@end enumerate
+
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+``aggregate'' if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+@item Conveying Non-Source Forms.
+
+You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:
+
+@enumerate a
+@item
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by the
+Corresponding Source fixed on a durable physical medium customarily
+used for software interchange.
+
+@item
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by a written
+offer, valid for at least three years and valid for as long as you
+offer spare parts or customer support for that product model, to give
+anyone who possesses the object code either (1) a copy of the
+Corresponding Source for all the software in the product that is
+covered by this License, on a durable physical medium customarily used
+for software interchange, for a price no more than your reasonable
+cost of physically performing this conveying of source, or (2) access
+to copy the Corresponding Source from a network server at no charge.
+
+@item
+Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source. This alternative is
+allowed only occasionally and noncommercially, and only if you
+received the object code with such an offer, in accord with subsection
+6b.
+
+@item
+Convey the object code by offering access from a designated place
+(gratis or for a charge), and offer equivalent access to the
+Corresponding Source in the same way through the same place at no
+further charge. You need not require recipients to copy the
+Corresponding Source along with the object code. If the place to copy
+the object code is a network server, the Corresponding Source may be
+on a different server (operated by you or a third party) that supports
+equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source.
+Regardless of what server hosts the Corresponding Source, you remain
+obligated to ensure that it is available for as long as needed to
+satisfy these requirements.
+
+@item
+Convey the object code using peer-to-peer transmission, provided you
+inform other peers where the object code and Corresponding Source of
+the work are being offered to the general public at no charge under
+subsection 6d.
+
+@end enumerate
+
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+A ``User Product'' is either (1) a ``consumer product'', which means any
+tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling. In determining whether a product is a
+consumer product, doubtful cases shall be resolved in favor of
+coverage. For a particular product received by a particular user,
+``normally used'' refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected
+to use, the product. A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or
+non-consumer uses, unless such uses represent the only significant
+mode of use of the product.
+
+``Installation Information'' for a User Product means any methods,
+procedures, authorization keys, or other information required to
+install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source. The
+information must suffice to ensure that the continued functioning of
+the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the
+recipient, or for the User Product in which it has been modified or
+installed. Access to a network may be denied when the modification
+itself materially and adversely affects the operation of the network
+or violates the rules and protocols for communication across the
+network.
+
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+@item Additional Terms.
+
+``Additional permissions'' are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:
+
+@enumerate a
+@item
+Disclaiming warranty or limiting liability differently from the terms
+of sections 15 and 16 of this License; or
+
+@item
+Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices
+displayed by works containing it; or
+
+@item
+Prohibiting misrepresentation of the origin of that material, or
+requiring that modified versions of such material be marked in
+reasonable ways as different from the original version; or
+
+@item
+Limiting the use for publicity purposes of names of licensors or
+authors of the material; or
+
+@item
+Declining to grant rights under trademark law for use of some trade
+names, trademarks, or service marks; or
+
+@item
+Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with
+contractual assumptions of liability to the recipient, for any
+liability that these contractual assumptions directly impose on those
+licensors and authors.
+@end enumerate
+
+All other non-permissive additional terms are considered ``further
+restrictions'' within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the
+above requirements apply either way.
+
+@item Termination.
+
+You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+@item Acceptance Not Required for Having Copies.
+
+You are not required to accept this License in order to receive or run
+a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+@item Automatic Licensing of Downstream Recipients.
+
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+An ``entity transaction'' is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+@item Patents.
+
+A ``contributor'' is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's ``contributor version''.
+
+A contributor's ``essential patent claims'' are all patent claims owned
+or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, ``control'' includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+In the following three paragraphs, a ``patent license'' is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To ``grant'' such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. ``Knowingly relying'' means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+A patent license is ``discriminatory'' if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on
+the non-exercise of one or more of the rights that are specifically
+granted under this License. You may not convey a covered work if you
+are a party to an arrangement with a third party that is in the
+business of distributing software, under which you make payment to the
+third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties
+who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by
+you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent
+license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+@item No Surrender of Others' Freedom.
+
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey
+a covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a
+consequence you may not convey it at all. For example, if you agree
+to terms that obligate you to collect a royalty for further conveying
+from those to whom you convey the Program, the only way you could
+satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+@item Use with the GNU Affero General Public License.
+
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+@item Revised Versions of this License.
+
+The Free Software Foundation may publish revised and/or new versions
+of the GNU General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU General Public
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that numbered version or
+of any later version published by the Free Software Foundation. If
+the Program does not specify a version number of the GNU General
+Public License, you may choose any version ever published by the Free
+Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions
+of the GNU General Public License can be used, that proxy's public
+statement of acceptance of a version permanently authorizes you to
+choose that version for the Program.
+
+Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+@item Disclaimer of Warranty.
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+@item Limitation of Liability.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
+TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+@item Interpretation of Sections 15 and 16.
+
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+@end enumerate
+
+@heading END OF TERMS AND CONDITIONS
+
+@heading How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea of what it does.}
+Copyright (C) @var{year} @var{name of author}
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see @url{http://www.gnu.org/licenses/}.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+@smallexample
+@var{program} Copyright (C) @var{year} @var{name of author}
+This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type @samp{show c} for details.
+@end smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License. Of course, your
+program's commands might be different; for a GUI interface, you would
+use an ``about box''.
+
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a ``copyright disclaimer'' for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+@url{http://www.gnu.org/licenses/}.
+
+The GNU General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use
+the GNU Lesser General Public License instead of this License. But
+first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}.
+
+@ignore
+ arch-tag: 8b9947e1-c830-4d70-8907-a97e556731ba
+@end ignore
diff --git a/man/help.texi b/doc/emacs/help.texi
index fe7c2a85ffa..e612d6a475b 100644
--- a/man/help.texi
+++ b/doc/emacs/help.texi
@@ -155,10 +155,10 @@ Display information on the character sets, coding systems, and input
methods used in language environment @var{language-env}
(@code{describe-language-environment}).
@item C-h F @var{function} @key{RET}
-Enter Info and goes to the node that documents the Emacs function
+Enter Info and go to the node that documents the Emacs function
@var{function} (@code{Info-goto-emacs-command-node}).
@item C-h K @var{key}
-Enter Info and goes to the node that documents the key sequence
+Enter Info and go to the node that documents the key sequence
@var{key} (@code{Info-goto-emacs-key-command-node}).
@item C-h S @var{symbol} @key{RET}
Display the Info documentation on symbol @var{symbol} according to the
@@ -296,8 +296,8 @@ be found by this command.
Search for user-option variables whose names match @var{pattern}.
@item M-x apropos-value @key{RET} @var{pattern} @key{RET}
-Search for functions whose definitions @var{pattern}, and variables
-whose values match @var{pattern}.
+Search for functions whose definitions match @var{pattern}, and
+variables whose values match @var{pattern}.
@item C-h d @var{pattern} @key{RET}
Search for functions and variables whose @strong{documentation
@@ -545,9 +545,9 @@ documentation of @var{function} or @var{key}.
@findex info-lookup-symbol
When editing a program, if you have an Info version of the manual
for the programming language, you can use @kbd{C-h S}
-(@code{info-lookup-symbol}) to find symbol (keyword, function or
-variable) in the proper manual. The details of how this command works
-depend on the major mode.
+(@code{info-lookup-symbol}) to find an entry for a symbol (keyword,
+function or variable) in the proper manual. The details of how this
+command works depend on the major mode.
@kindex C-h l
@findex view-lossage
@@ -642,24 +642,23 @@ Emacs (@code{describe-no-warranty}).
@cindex tooltips
@cindex balloon help
- When a region of text is ``active,'' so that you can select it with
-the mouse or a key like @kbd{RET}, it often has associated help text.
-For instance, most parts of the mode line have help text. On
-graphical displays, the help text is displayed as a ``tooltip''
-(sometimes known as ``balloon help''), when you move the mouse over
-the active text. @xref{Tooltips}. On some systems, it is shown in
-the echo area. On text-only terminals, if Emacs cannot follow the
-mouse, it cannot show the help text on mouse-over.
+ When text is ``active'', so that you can select it with the mouse or a
+key like @kbd{RET}, it often has associated help text. For instance,
+most parts of the mode line have help text. On graphical displays, the
+help text is displayed as a ``tooltip'' (sometimes known as ``balloon
+help'') when you move the mouse over the active text. @xref{Tooltips}.
+On some systems, it is shown in the echo area. On text-only terminals,
+if Emacs cannot follow the mouse, it cannot show the help text when the
+mouse is over active text.
@kindex C-h .
@findex display-local-help
@vindex help-at-pt-display-when-idle
- You can also access text region help info using the keyboard. The
-command @kbd{C-h .} (@code{display-local-help}) displays any help text
-associated with the text at point, using the echo area. If you want
-help text to be displayed automatically whenever it is available at
-point, set the variable @code{help-at-pt-display-when-idle} to
-@code{t}.
+ You can also access help text for active text using the keyboard.
+The command @kbd{C-h .} (@code{display-local-help}) displays any help
+text associated with the text at point, using the echo area. If you
+want help text to be displayed automatically whenever it is available at
+point, set the variable @code{help-at-pt-display-when-idle} to @code{t}.
@ignore
arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1
diff --git a/man/indent.texi b/doc/emacs/indent.texi
index 568b54897fa..568b54897fa 100644
--- a/man/indent.texi
+++ b/doc/emacs/indent.texi
diff --git a/man/killing.texi b/doc/emacs/killing.texi
index b626bfab385..b626bfab385 100644
--- a/man/killing.texi
+++ b/doc/emacs/killing.texi
diff --git a/man/kmacro.texi b/doc/emacs/kmacro.texi
index 16526e1a2b8..16526e1a2b8 100644
--- a/man/kmacro.texi
+++ b/doc/emacs/kmacro.texi
diff --git a/man/m-x.texi b/doc/emacs/m-x.texi
index 7a5b80fd348..7a5b80fd348 100644
--- a/man/m-x.texi
+++ b/doc/emacs/m-x.texi
diff --git a/man/macos.texi b/doc/emacs/macos.texi
index 28d7f43df8e..28d7f43df8e 100644
--- a/man/macos.texi
+++ b/doc/emacs/macos.texi
diff --git a/man/maintaining.texi b/doc/emacs/maintaining.texi
index 988d5890b8c..24337cb6f9e 100644
--- a/man/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -367,7 +367,10 @@ etags @var{inputfiles}@dots{}
@noindent
The @code{etags} program reads the specified files, and writes a tags
-table named @file{TAGS} in the current working directory.
+table named @file{TAGS} in the current working directory. You can
+optionally specify a different file name for the tags table by using the
+@samp{--output=@var{file}} option; specifying @file{-} as a file name
+prints the tags table to standard output.
If the specified files don't exist, @code{etags} looks for
compressed versions of them and uncompresses them to read them. Under
@@ -406,7 +409,8 @@ well as the files it directly contains.
directory where the tags file was initially written. This way, you can
move an entire directory tree containing both the tags file and the
source files, and the tags file will still refer correctly to the source
-files. If the tags file is in @file{/dev}, however, the file names are
+files. If the tags file is @file{-} or is in the @file{/dev} directory,
+however, the file names are
made relative to the current working directory. This is useful, for
example, when writing the tags to @file{/dev/stdout}.
diff --git a/man/major.texi b/doc/emacs/major.texi
index 1cb76ee5fdf..3980c5de003 100644
--- a/man/major.texi
+++ b/doc/emacs/major.texi
@@ -174,7 +174,10 @@ interpreter program names and major modes.
systems) use the @samp{-*-} feature on the first line, because the
system would get confused when running the interpreter. So Emacs looks
for @samp{-*-} on the second line in such files as well as on the
-first line.
+first line. The same is true for man pages which start with the magic
+string @samp{'\"} to specify a list of troff preprocessors (not all do,
+however).
+
@vindex default-major-mode
When you visit a file that does not specify a major mode to use, or
diff --git a/doc/emacs/makefile.w32-in b/doc/emacs/makefile.w32-in
new file mode 100644
index 00000000000..d34ab66de4b
--- /dev/null
+++ b/doc/emacs/makefile.w32-in
@@ -0,0 +1,144 @@
+#### -*- Makefile -*- for the Emacs Manual
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+
+# 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 3, 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.
+
+# Where to find the source code. The source code for Emacs's C kernel is
+# expected to be in $(srcdir)/src, and the source code for Emacs's
+# utility programs is expected to be in $(srcdir)/lib-src. This is
+# set by the configure script's `--srcdir' option.
+srcdir=.
+
+infodir = $(srcdir)/../../info
+
+# The makeinfo program is part of the Texinfo distribution.
+MAKEINFO = makeinfo --force
+MULTI_INSTALL_INFO = $(srcdir)\..\..\nt\multi-install-info.bat
+INFO_TARGETS = $(infodir)/emacs
+DVI_TARGETS = emacs.dvi
+INFOSOURCES = info.texi
+
+# The following rule does not work with all versions of `make'.
+.SUFFIXES: .texi .dvi
+.texi.dvi:
+ texi2dvi $<
+
+TEXI2DVI = texi2dvi
+ENVADD = $(srcdir)\..\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" \
+ "MAKEINFO=$(MAKEINFO) -I$(srcdir)" /C
+
+EMACS_XTRA=\
+ $(srcdir)/arevert-xtra.texi \
+ $(srcdir)/cal-xtra.texi \
+ $(srcdir)/dired-xtra.texi \
+ $(srcdir)/picture-xtra.texi \
+ $(srcdir)/emerge-xtra.texi \
+ $(srcdir)/vc-xtra.texi \
+ $(srcdir)/vc1-xtra.texi \
+ $(srcdir)/vc2-xtra.texi \
+ $(srcdir)/fortran-xtra.texi \
+ $(srcdir)/msdog-xtra.texi
+
+EMACSSOURCES= \
+ $(srcdir)/emacs.texi \
+ $(srcdir)/doclicense.texi \
+ $(srcdir)/screen.texi \
+ $(srcdir)/commands.texi \
+ $(srcdir)/entering.texi \
+ $(srcdir)/basic.texi \
+ $(srcdir)/mini.texi \
+ $(srcdir)/m-x.texi \
+ $(srcdir)/help.texi \
+ $(srcdir)/mark.texi \
+ $(srcdir)/killing.texi \
+ $(srcdir)/regs.texi \
+ $(srcdir)/display.texi \
+ $(srcdir)/search.texi \
+ $(srcdir)/fixit.texi \
+ $(srcdir)/files.texi \
+ $(srcdir)/buffers.texi \
+ $(srcdir)/windows.texi \
+ $(srcdir)/frames.texi \
+ $(srcdir)/mule.texi \
+ $(srcdir)/major.texi \
+ $(srcdir)/indent.texi \
+ $(srcdir)/text.texi \
+ $(srcdir)/programs.texi \
+ $(srcdir)/building.texi \
+ $(srcdir)/maintaining.texi \
+ $(srcdir)/abbrevs.texi \
+ $(srcdir)/sending.texi \
+ $(srcdir)/rmail.texi \
+ $(srcdir)/dired.texi \
+ $(srcdir)/calendar.texi \
+ $(srcdir)/misc.texi \
+ $(srcdir)/custom.texi \
+ $(srcdir)/trouble.texi \
+ $(srcdir)/cmdargs.texi \
+ $(srcdir)/xresources.texi \
+ $(srcdir)/anti.texi \
+ $(srcdir)/macos.texi \
+ $(srcdir)/msdog.texi \
+ $(srcdir)/gnu.texi \
+ $(srcdir)/glossary.texi \
+ $(srcdir)/ack.texi \
+ $(srcdir)/kmacro.texi \
+ $(EMACS_XTRA)
+
+info: $(INFO_TARGETS)
+
+dvi: $(DVI_TARGETS)
+
+# Note that all the Info targets build the Info files
+# in srcdir. There is no provision for Info files
+# to exist in the build directory.
+# In a distribution of Emacs, the Info files should be up to date.
+
+$(infodir)/dir:
+ $(MULTI_INSTALL_INFO) --info-dir=$(infodir) $(INFO_TARGETS)
+
+$(infodir)/emacs: $(EMACSSOURCES)
+ $(MAKEINFO) emacs.texi
+
+emacs.dvi: $(EMACSSOURCES)
+ $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs.texi
+
+emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA)
+ $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs-xtra.texi
+
+mostlyclean:
+ - $(DEL) *.log *.cp *.fn *.ky *.pg *.vr core *.tp *.core gnustmp.*
+
+clean: mostlyclean
+ - $(DEL) *.dvi
+ - $(DEL) $(infodir)/emacs*
+
+distclean: clean
+
+maintainer-clean: distclean
+ - $(DEL) *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc
+# Don't delete these, because they are outside the current directory.
+# for file in $(INFO_TARGETS); do rm -f $${file}*; done
+
+
+# Formerly this directory had texindex.c and getopt.c in it
+# and this makefile built them to make texindex.
+# That caused trouble because this is run entirely in the source directory.
+# Since we expect to get texi2dvi from elsewhere,
+# it is ok to expect texindex from elsewhere also.
diff --git a/man/mark.texi b/doc/emacs/mark.texi
index be446ab6bfc..be446ab6bfc 100644
--- a/man/mark.texi
+++ b/doc/emacs/mark.texi
diff --git a/man/mini.texi b/doc/emacs/mini.texi
index b57e79420b6..eb2a8e65468 100644
--- a/man/mini.texi
+++ b/doc/emacs/mini.texi
@@ -462,10 +462,10 @@ contents of the minibuffer. To use it again unchanged, just type
not change the history element that you ``moved'' to, but your new
argument does go at the end of the history list in its own right.
- For many minibuffer arguments there is a ``default'' value. You can
-insert the default value into the minibuffer as text by using
-@kbd{M-n}. You can think of this as moving ``into the future'' in the
-history.
+ For many minibuffer arguments there is a ``default'' value, or
+a list of default values. You can insert the default value into the
+minibuffer as text by using @kbd{M-n} one or more times. You can
+think of this as moving ``into the future'' in the history.
@findex previous-matching-history-element
@findex next-matching-history-element
diff --git a/man/misc.texi b/doc/emacs/misc.texi
index 82e48bfe13b..6b9007fecf5 100644
--- a/man/misc.texi
+++ b/doc/emacs/misc.texi
@@ -971,8 +971,9 @@ most common command syntax; it may not work for unusual shells.
@findex dirtrack-mode
You can also use @kbd{M-x dirtrack-mode} to enable (or disable) an
-alternative and more aggressive method of tracking changes in the
-current directory.
+alternative method of tracking changes in the current directory. This
+method relies on your shell prompt containing the full current working
+directory at all times.
@node Shell Options
@subsection Shell Mode Options
diff --git a/man/msdog-xtra.texi b/doc/emacs/msdog-xtra.texi
index 432f28888f6..432f28888f6 100644
--- a/man/msdog-xtra.texi
+++ b/doc/emacs/msdog-xtra.texi
diff --git a/man/msdog.texi b/doc/emacs/msdog.texi
index 0ed15229b7c..0ed15229b7c 100644
--- a/man/msdog.texi
+++ b/doc/emacs/msdog.texi
diff --git a/man/mule.texi b/doc/emacs/mule.texi
index 018521dff42..d7dd364b6d0 100644
--- a/man/mule.texi
+++ b/doc/emacs/mule.texi
@@ -534,6 +534,18 @@ set-language-environment-hook}). For example:
This sets the default input method to be @code{chinese-tonepy}
whenever you choose a Chinese-GB language environment.
+You can instruct Emacs to activate a certain input method
+automatically. For example:
+
+@lisp
+(add-hook 'text-mode-hook
+ (lambda () (set-input-method "german-prefix")))
+@end lisp
+
+@noindent
+This activates the input emthod ``german-prefix'' automatically in the
+Text mode.
+
@findex quail-set-keyboard-layout
Some input methods for alphabetic scripts work by (in effect)
remapping the keyboard to emulate various keyboard layouts commonly used
@@ -1074,6 +1086,20 @@ you override it by using the command again. The command @kbd{C-x
@key{RET} X} (@code{set-next-selection-coding-system}) specifies the
coding system for the next selection made in Emacs or read by Emacs.
+@vindex x-select-request-type
+ The variable @code{x-select-request-type} specifies the data type to
+request from the X Window System for receiving text selections from
+other applications. If the value is @code{nil} (the default), Emacs
+tries @code{COMPOUND_TEXT} and @code{UTF8_STRING}, in this order, and
+uses various heuristics to choose the more appropriate of the two
+results; if none of these succeed, Emacs falls back on @code{STRING}.
+If the value of @code{x-select-request-type} is one of the symbols
+@code{COMPOUND_TEXT}, @code{UTF8_STRING}, @code{STRING}, or
+@code{TEXT}, Emacs uses only that request type. If the value is a
+list of some of these symbols, Emacs tries only the request types in
+the list, in order, until one of them succeeds, or until the list is
+exhausted.
+
@kindex C-x RET p
@findex set-buffer-process-coding-system
The command @kbd{C-x @key{RET} p} (@code{set-buffer-process-coding-system})
diff --git a/man/picture-xtra.texi b/doc/emacs/picture-xtra.texi
index ad3b9f27cc5..ad3b9f27cc5 100644
--- a/man/picture-xtra.texi
+++ b/doc/emacs/picture-xtra.texi
diff --git a/man/programs.texi b/doc/emacs/programs.texi
index 2472d7daabe..2472d7daabe 100644
--- a/man/programs.texi
+++ b/doc/emacs/programs.texi
diff --git a/man/regs.texi b/doc/emacs/regs.texi
index 475a3b7b1b5..475a3b7b1b5 100644
--- a/man/regs.texi
+++ b/doc/emacs/regs.texi
diff --git a/man/rmail.texi b/doc/emacs/rmail.texi
index 9ccdffedca1..9ccdffedca1 100644
--- a/man/rmail.texi
+++ b/doc/emacs/rmail.texi
diff --git a/man/screen.texi b/doc/emacs/screen.texi
index 87b037849ce..90ec645a26f 100644
--- a/man/screen.texi
+++ b/doc/emacs/screen.texi
@@ -197,7 +197,7 @@ more information.
Normally, the mode line looks like this:
@example
--@var{cs}:@var{ch}-@var{fr} @var{buf} @var{pos} @var{line} (@var{major} @var{minor})------
+-@var{cs}:@var{ch}@var{R}-@var{fr} @var{buf} @var{pos} @var{line} (@var{major} @var{minor})------
@end example
@noindent
@@ -211,6 +211,9 @@ been edited (the buffer is ``modified''), or @samp{--} if the buffer has
not been edited. For a read-only buffer, it is @samp{%*} if the buffer
is modified, and @samp{%%} otherwise.
+ @var{R} is @samp{@@} if the default-directory for the current buffer
+is on a remote machine, or a hyphen otherwise.
+
@var{fr} gives the selected frame name (@pxref{Frames}). It appears
only on text-only terminals. The initial frame's name is @samp{F1}.
diff --git a/man/search.texi b/doc/emacs/search.texi
index 1a8a6372ba2..af1b877e6a4 100644
--- a/man/search.texi
+++ b/doc/emacs/search.texi
@@ -1172,7 +1172,11 @@ like @code{query-replace}.
These commands highlight the current match using the face
@code{query-replace}. They highlight other matches using
@code{lazy-highlight} just like incremental search (@pxref{Incremental
-Search}).
+Search}). By default, @code{query-replace-regexp} will show
+substituted replacement string for the current match in the
+minibuffer. If you want to keep special sequences @samp{\&} and
+@samp{\@var{n}} unexpanded, customize
+@code{query-replace-show-replacement} variable.
The characters you can type when you are shown a match for the string
or regexp are:
diff --git a/man/sending.texi b/doc/emacs/sending.texi
index 5d6a7c83f3e..5d6a7c83f3e 100644
--- a/man/sending.texi
+++ b/doc/emacs/sending.texi
diff --git a/man/text.texi b/doc/emacs/text.texi
index 3a0e091ea40..c151c75e8bb 100644
--- a/man/text.texi
+++ b/doc/emacs/text.texi
@@ -503,7 +503,8 @@ Center a line.
(@code{fill-paragraph}). This operates on the paragraph that point is
inside, or the one after point if point is between paragraphs.
Refilling works by removing all the line-breaks, then inserting new ones
-where necessary.
+where necessary. When the mark is active in Transient Mark mode, this
+command operates on the active region like @code{fill-region}.
@findex fill-region
To refill many paragraphs, use @kbd{M-x fill-region}, which
diff --git a/man/trouble.texi b/doc/emacs/trouble.texi
index 494637c8eeb..494637c8eeb 100644
--- a/man/trouble.texi
+++ b/doc/emacs/trouble.texi
diff --git a/man/vc-xtra.texi b/doc/emacs/vc-xtra.texi
index 6ec69d60896..5b4e374a6ea 100644
--- a/man/vc-xtra.texi
+++ b/doc/emacs/vc-xtra.texi
@@ -15,7 +15,7 @@ the Emacs Manual}). This chapter describes more advanced VC usage.
@menu
* VC Dired Mode:: Listing files managed by version control.
* VC Dired Commands:: Commands to use in a VC Dired buffer.
-* Remote Repositories:: Efficient access to remote CVS servers.
+* Remote Repositories:: Efficient access to remote VCS servers.
* Snapshots:: Sets of file versions treated as a unit.
* Miscellaneous VC:: Various other commands and features of VC.
* Customizing VC:: Variables that change VC's behavior.
diff --git a/man/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi
index 6d5df78848c..ebdd1d5951f 100644
--- a/man/vc1-xtra.texi
+++ b/doc/emacs/vc1-xtra.texi
@@ -120,21 +120,27 @@ ordinary Dired, that allows you to specify additional switches for the
All the usual Dired commands work normally in VC Dired mode, except
for @kbd{v}, which is redefined as the version control prefix. You can
invoke VC commands such as @code{vc-diff} and @code{vc-print-log} by
-typing @kbd{v =}, or @kbd{v l}, and so on. Most of these commands apply
-to the file name on the current line.
+typing @kbd{v =}, or @kbd{v l}, and so on. These commands will apply
+to the set of files you have marked for operation in the VC-Dired
+buffer.
The command @kbd{v v} (@code{vc-next-action}) operates on all the
marked files, so that you can lock or check in several files at once.
-If it operates on more than one file, it handles each file according to
-its current state; thus, it might lock one file, but check in another
-file. This could be confusing; it is up to you to avoid confusing
-behavior by marking a set of files that are in a similar state. If no
-files are marked, @kbd{v v} operates on the file in the current line.
-
- If any files call for check-in, @kbd{v v} reads a single log entry,
-then uses it for all the files being checked in. This is convenient for
-registering or checking in several files at once, as part of the same
-change.
+If the underlying VC supports atomic commits of multiple-file
+changesets @kbd{v v} with a selected set of modified but not committed
+files wuill commit all of them at once as a single changeset.
+
+ When @kbd{v v} (@code{vc-next-action}) operates on a set of files,
+it requires that all of those files must be in the same state;
+otherwise it will throw an error. Note that this differs from the
+behavior of older versions of VC, which did not have fileset
+operations and simply did @code{vc-next-action} on each file
+individually.
+
+ If any files are in a state that calls for commit, @kbd{v v} reads a
+single log entry and uses it for the changeset as a whole. If the
+underling VCS is file- rather than changeset-oriented, the log entry
+will be replicated into the history of each file.
@findex vc-dired-toggle-terse-mode
@findex vc-dired-mark-locked
diff --git a/man/vc2-xtra.texi b/doc/emacs/vc2-xtra.texi
index 5a8d131705a..da7ef76025a 100644
--- a/man/vc2-xtra.texi
+++ b/doc/emacs/vc2-xtra.texi
@@ -6,17 +6,24 @@
@c printed version) or in the main Emacs manual (for the on-line version).
@node Remote Repositories
@subsection Remote Repositories
-@cindex remote repositories (CVS)
+@cindex remote repositories
+
+ A common way of using CVS and other more advanced VCSes is to set up
+a central repository on some Internet host, then have each
+developer check out a personal working copy of the files on his local
+machine. Committing changes to the repository, and picking up changes
+from other users into one's own working area, then works by direct
+interactions with the repository server.
- A common way of using CVS is to set up a central CVS repository on
-some Internet host, then have each developer check out a personal
-working copy of the files on his local machine. Committing changes to
-the repository, and picking up changes from other users into one's own
-working area, then works by direct interactions with the CVS server.
+ One difficulty is that access to a repository server is often slow,
+and that developers might need to work off-line as well. While only
+third-generation decentralized VCses such as GNU Arch or Mercurial
+really solve this problem, VC is designed to reduce the amount of
+network interaction necessary.
- One difficulty is that access to the CVS server is often slow, and
-that developers might need to work off-line as well. VC is designed
-to reduce the amount of network interaction necessary.
+ If you are using a truly decentralized VCS you can skip the rest of
+this section. It describes backup and local-repository techniques
+that are only useful for Subversion and earlier VCSes.
@menu
* Version Backups:: Keeping local copies of repository versions.
@@ -28,7 +35,7 @@ to reduce the amount of network interaction necessary.
@cindex version backups
@cindex automatic version backups
- When VC sees that the CVS repository for a file is on a remote
+ When VC sees that the repository for a file is on a remote
machine, it automatically makes local backups of unmodified versions
of the file---@dfn{automatic version backups}. This means that you
can compare the file to the repository version (@kbd{C-x v =}), or
@@ -47,7 +54,7 @@ as ordinary Emacs backup files
@end ifnottex
But they follow a similar naming convention.
- For a file that comes from a remote CVS repository, VC makes a
+ For a file that comes from a remote repository, VC makes a
version backup whenever you save the first changes to the file, and
removes it after you have committed your modified version to the
repository. You can disable the making of automatic version backups by
@@ -58,10 +65,10 @@ setting @code{vc-cvs-stay-local} to @code{nil} (@pxref{CVS Options}).
of file @var{file} is @code{@var{file}.~@var{version}.~}. This is
almost the same as the name used by @kbd{C-x v ~}
@iftex
-(@pxref{Old Versions,,,emacs, the Emacs Manual}),
+(@pxref{Old Revisions,,,emacs, the Emacs Manual}),
@end iftex
@ifnottex
-(@pxref{Old Versions}),
+(@pxref{Old Revisions}),
@end ifnottex
the only difference being the additional dot (@samp{.}) after the
version number. This similarity is intentional, because both kinds of
@@ -244,10 +251,10 @@ you need not hesitate to create snapshots whenever they are useful.
You can give a snapshot name as an argument to @kbd{C-x v =} or
@kbd{C-x v ~}
@iftex
-(@pxref{Old Versions,,,emacs, the Emacs Manual}).
+(@pxref{Old Revisions,,,emacs, the Emacs Manual}).
@end iftex
@ifnottex
-(@pxref{Old Versions}).
+(@pxref{Old Revisions}).
@end ifnottex
Thus, you can use it to compare a snapshot against the current files,
or two snapshots against each other, or a snapshot against a named
@@ -588,12 +595,12 @@ headers.
@subsection Customizing VC
@vindex vc-handled-backends
-The variable @code{vc-handled-backends} determines which version control
-systems VC should handle. The default value is @code{(RCS CVS SVN SCCS
-GIT HG Arch MCVS)}, so it contains all six version systems that are
-currently supported. If you want VC to ignore one or more of these
-systems, exclude its name from the list. To disable VC entirely, set
-this variable to @code{nil}.
+The variable @code{vc-handled-backends} determines which version
+control systems VC should handle. The default value is @code{(RCS CVS
+SVN SCCS BZR GIT HG Arch MCVS)}, so it contains all the version systems
+that are currently supported. If you want VC to ignore one or more of
+these systems, exclude its name from the list. To disable VC entirely,
+set this variable to @code{nil}.
The order of systems in the list is significant: when you visit a file
registered in more than one system (@pxref{Local Version Control}), VC
diff --git a/man/windows.texi b/doc/emacs/windows.texi
index fa9cadc1351..fa9cadc1351 100644
--- a/man/windows.texi
+++ b/doc/emacs/windows.texi
diff --git a/man/xresources.texi b/doc/emacs/xresources.texi
index c402ec89f88..c402ec89f88 100644
--- a/man/xresources.texi
+++ b/doc/emacs/xresources.texi
diff --git a/lispintro/.gitignore b/doc/lispintro/.gitignore
index e1af5a918b0..e1af5a918b0 100644
--- a/lispintro/.gitignore
+++ b/doc/lispintro/.gitignore
diff --git a/lispintro/ChangeLog b/doc/lispintro/ChangeLog
index 2452be826fc..b198f14add2 100644
--- a/lispintro/ChangeLog
+++ b/doc/lispintro/ChangeLog
@@ -1,3 +1,24 @@
+2007-09-12 Robert J. Chassell <bob@rattlesnake.com>
+
+ * emacs-lisp-intro.texi: Add email address to Thank You correctly
+
+2007-09-06 Romain Francoise <romain@orebokech.com>
+
+ * Makefile.in (maintainer-clean): Delete info files.
+
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * Move from lispintro/ to doc/lispintro/.
+ * Makefile.in (infodir): Go up one more level.
+ (usermanualdir): Change from ../man to ../emacs.
+ * makefile.w32-in (infodir, ENVADD): Go up one more level.
+ * emacs-lisp-intro.texi (setfilename): Go up one more level.
+
+2007-07-30 Robert J. Chassell <bob@rattlesnake.com>
+
+ * emacs-lisp-intro.texi: Fix typo on line 5173, change `thee' to
+ `these'.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
diff --git a/lispintro/Makefile.am b/doc/lispintro/Makefile.am
index 1b89c55528b..1b89c55528b 100644
--- a/lispintro/Makefile.am
+++ b/doc/lispintro/Makefile.am
diff --git a/lispintro/Makefile.in b/doc/lispintro/Makefile.in
index fc263c2095c..5ace5337971 100644
--- a/lispintro/Makefile.in
+++ b/doc/lispintro/Makefile.in
@@ -25,8 +25,8 @@ SHELL = @SHELL@
srcdir = @srcdir@
VPATH = @srcdir@
-infodir = ../info
-usermanualdir = $(srcdir)/../man
+infodir = ../../info
+usermanualdir = $(srcdir)/../emacs
INFO_SOURCES = ${srcdir}/emacs-lisp-intro.texi
# The file name eintr must fit within 5 characters, to allow for
@@ -66,6 +66,7 @@ distclean: clean
maintainer-clean: distclean
rm -f *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc
+ cd $(infodir); rm -f eintr eintr-[1-9]
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/lispintro/Makefile.old b/doc/lispintro/Makefile.old
index 0b4e1a82df7..0b4e1a82df7 100644
--- a/lispintro/Makefile.old
+++ b/doc/lispintro/Makefile.old
diff --git a/lispintro/README b/doc/lispintro/README
index 5edd38af3ee..5edd38af3ee 100644
--- a/lispintro/README
+++ b/doc/lispintro/README
diff --git a/lispintro/aclocal.m4 b/doc/lispintro/aclocal.m4
index fdc191af0d1..fdc191af0d1 100644
--- a/lispintro/aclocal.m4
+++ b/doc/lispintro/aclocal.m4
diff --git a/lispintro/configure b/doc/lispintro/configure
index 626083be946..626083be946 100644..100755
--- a/lispintro/configure
+++ b/doc/lispintro/configure
diff --git a/lispintro/configure.in b/doc/lispintro/configure.in
index 7d60c898d01..7d60c898d01 100644
--- a/lispintro/configure.in
+++ b/doc/lispintro/configure.in
diff --git a/lispintro/cons-1.eps b/doc/lispintro/cons-1.eps
index 95a74dcf298..95a74dcf298 100644
--- a/lispintro/cons-1.eps
+++ b/doc/lispintro/cons-1.eps
diff --git a/lispintro/cons-2.eps b/doc/lispintro/cons-2.eps
index b8537d28ea8..b8537d28ea8 100644
--- a/lispintro/cons-2.eps
+++ b/doc/lispintro/cons-2.eps
diff --git a/lispintro/cons-2a.eps b/doc/lispintro/cons-2a.eps
index 1ec78c46f0b..1ec78c46f0b 100644
--- a/lispintro/cons-2a.eps
+++ b/doc/lispintro/cons-2a.eps
diff --git a/lispintro/cons-3.eps b/doc/lispintro/cons-3.eps
index 795fa2b18f4..795fa2b18f4 100644
--- a/lispintro/cons-3.eps
+++ b/doc/lispintro/cons-3.eps
diff --git a/lispintro/cons-4.eps b/doc/lispintro/cons-4.eps
index 68b0a296c36..68b0a296c36 100644
--- a/lispintro/cons-4.eps
+++ b/doc/lispintro/cons-4.eps
diff --git a/lispintro/cons-5.eps b/doc/lispintro/cons-5.eps
index e03815a4403..e03815a4403 100644
--- a/lispintro/cons-5.eps
+++ b/doc/lispintro/cons-5.eps
diff --git a/lispintro/drawers.eps b/doc/lispintro/drawers.eps
index 0e5a222ae45..0e5a222ae45 100644
--- a/lispintro/drawers.eps
+++ b/doc/lispintro/drawers.eps
diff --git a/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 0318ac5d361..e632b3d6788 100644
--- a/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@comment %**start of header
-@setfilename ../info/eintr
+@setfilename ../../info/eintr
@c setfilename emacs-lisp-intro.info
@c sethtmlfilename emacs-lisp-intro.html
@settitle Programming in Emacs Lisp
@@ -22,9 +22,8 @@
@comment %**end of header
-@set edition-number 3.07
-@set update-date 9 November 2006
-
+@set edition-number 3.08
+@set update-date 12 September 2007
@ignore
## Summary of shell commands to create various output formats:
@@ -1049,6 +1048,7 @@ encouragement. My mistakes are my own.
@flushright
Robert J. Chassell
+@email{bob@@gnu.org}
@end flushright
@c ================ Beginning of main text ================
@@ -5170,7 +5170,7 @@ Function Interactive}.) The expression reads as follows:
@noindent
This expression is not one with letters standing for parts, as
-described earlier. Instead, it starts a list with thee parts.
+described earlier. Instead, it starts a list with these parts:
The first part of the list is an expression to read the name of a
buffer and return it as a string. That is @code{read-buffer}. The
diff --git a/lispintro/install-sh b/doc/lispintro/install-sh
index 2df3e3b423d..2df3e3b423d 100644..100755
--- a/lispintro/install-sh
+++ b/doc/lispintro/install-sh
diff --git a/lispintro/lambda-1.eps b/doc/lispintro/lambda-1.eps
index 5b1b5d04299..5b1b5d04299 100644
--- a/lispintro/lambda-1.eps
+++ b/doc/lispintro/lambda-1.eps
diff --git a/lispintro/lambda-2.eps b/doc/lispintro/lambda-2.eps
index 6288283abce..6288283abce 100644
--- a/lispintro/lambda-2.eps
+++ b/doc/lispintro/lambda-2.eps
diff --git a/lispintro/lambda-3.eps b/doc/lispintro/lambda-3.eps
index 26f7d5d9644..26f7d5d9644 100644
--- a/lispintro/lambda-3.eps
+++ b/doc/lispintro/lambda-3.eps
diff --git a/lispintro/makefile.w32-in b/doc/lispintro/makefile.w32-in
index 07d51d24620..ea0f790f212 100644
--- a/lispintro/makefile.w32-in
+++ b/doc/lispintro/makefile.w32-in
@@ -21,7 +21,7 @@
srcdir = .
-infodir = $(srcdir)/../info
+infodir = $(srcdir)/../../info
INFO_SOURCES = $(srcdir)/emacs-lisp-intro.texi
# The file name eintr must fit within 5 characters, to allow for
@@ -33,7 +33,7 @@ MAKEINFO = makeinfo
INSTALL_INFO = install-info
TEXI2DVI = texi2dvi
DVIPS = dvips
-ENVADD = $(srcdir)\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" \
+ENVADD = $(srcdir)\..\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" \
"MAKEINFO=$(MAKEINFO) -I$(srcdir)" /C
.SUFFIXES: .dvi .ps .texi
diff --git a/lispintro/missing b/doc/lispintro/missing
index 5b73d25789b..5b73d25789b 100644..100755
--- a/lispintro/missing
+++ b/doc/lispintro/missing
diff --git a/lispintro/mkinstalldirs b/doc/lispintro/mkinstalldirs
index f945dbf2bce..f945dbf2bce 100644..100755
--- a/lispintro/mkinstalldirs
+++ b/doc/lispintro/mkinstalldirs
diff --git a/lispref/.arch-inventory b/doc/lispref/.arch-inventory
index 2f5e6b9eea0..2f5e6b9eea0 100644
--- a/lispref/.arch-inventory
+++ b/doc/lispref/.arch-inventory
diff --git a/lispref/.gitignore b/doc/lispref/.gitignore
index a149258f6dd..a149258f6dd 100644
--- a/lispref/.gitignore
+++ b/doc/lispref/.gitignore
diff --git a/lispref/ChangeLog b/doc/lispref/ChangeLog
index 36f2652dd8f..c739a43a1a4 100644
--- a/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -3,6 +3,29 @@
* vol1.texi (Top): Remove Frame-Local Variables from Node Listing.
* vol2.texi (Top): Remove Frame-Local Variables from Node Listing.
+2007-11-13 Martin Rudalics <rudalics@gmx.at>
+
+ * help.texi (Help Functions): Document new macro `with-help-window'.
+
+2007-11-10 Paul Pogonyshev <pogonyshev@gmx.net>
+
+ * searching.texi (Replacing Match): Describe new
+ `match-substitute-replacement'.
+
+2007-10-31 Richard Stallman <rms@gnu.org>
+
+ * strings.texi (Creating Strings): Null strings from concat not unique.
+
+2007-10-26 Richard Stallman <rms@gnu.org>
+
+ * objects.texi (Equality Predicates): Null strings are uniquified.
+
+ * minibuf.texi: Minor clarifications in previous change.
+
+2007-10-25 Glenn Morris <rgm@gnu.org>
+
+ * customize.texi (Variable Definitions): Add :risky and :safe keywords.
+
2007-10-24 Richard Stallman <rms@gnu.org>
* elisp.texi (Top): Delete Frame-Local Variables from subnode menu.
@@ -17,11 +40,27 @@
* loading.texi (Unloading): Document FEATURE-unload-function
instead of FEATURE-unload-hook.
- * functions.texi (Related Topics): Add called-interactively-p.
- Fix xref.
-
* frames.texi (Multiple Displays): Don't mention frame-local vars.
+2007-10-22 Juri Linkov <juri@jurta.org>
+
+ * minibuf.texi (Text from Minibuffer, Minibuffer Completion)
+ (High-Level Completion): Document a list of default value strings
+ in the DEFAULT argument, for which minibuffer functions return the
+ first element.
+
+2007-10-17 Juri Linkov <juri@jurta.org>
+
+ * text.texi (Filling): Update arguments of fill-paragraph.
+ fill-paragraph operates on the active region in Transient Mark mode.
+ Remove fill-paragraph-or-region.
+
+2007-10-13 Karl Berry <karl@gnu.org>
+
+ * elisp.texi (@dircategory): Move to after @copying,
+ since we want @copying as close as possible to the beginning of
+ the output.
+
2007-10-12 Richard Stallman <rms@gnu.org>
* elisp.texi (Top): Add Distinguish Interactive to subnode menu.
@@ -38,6 +77,10 @@
of margin display specifications.
(Replacing Specs): New subnode broken out of Display Property.
+2007-10-06 Juri Linkov <juri@jurta.org>
+
+ * text.texi (Filling): Document fill-paragraph-or-region.
+
2007-10-05 Juanma Barranquero <lekktu@gmail.com>
* display.texi (Auto Faces): Fix typo.
@@ -58,18 +101,58 @@
* processes.texi (Misc Network): Note that these functions are
supported only on some systems.
+2007-10-01 Richard Stallman <rms@gnu.org>
+
+ * display.texi (Overlay Properties): Explain nil as priority.
+ Explain that conflicts are unpredictable if not resolved by
+ priorities.
+
+2007-09-23 Richard Stallman <rms@gnu.org>
+
+ * macros.texi (Backquote): Minor clarification.
+
2007-09-19 Richard Stallman <rms@gnu.org>
* display.texi (Display Property): Explain multiple display specs.
Clarify when they work in parallel and when one overrides.
Fix error in example.
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * Move from lispref/ to doc/lispref/. Change all setfilename
+ commands to use ../../info.
+ * Makefile.in (infodir): Go up one more level.
+ (usermanualdir): Change from ../man to ../emacs.
+ (miscmanualdir): New.
+ (dist): Use new variable miscmanualdir.
+ * makefile.w32-in (infodir, texinputdir): Go up one more level.
+ (usermanualdir): Change from ../man to ../emacs.
+
2007-08-30 Martin Rudalics <rudalics@gmx.at>
* commands.texi (Command Loop Info): Advise against changing
most variables described here. Explain new variable
last-repeatable-command.
+2007-08-29 Glenn Morris <rgm@gnu.org>
+
+ * elisp.texi (EMACSVER): Increase to 23.0.50.
+
+2007-08-29 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * frames.texi (Basic Parameters): Add display-environment-variable
+ and term-environment-variable.
+
+2007-08-28 Juri Linkov <juri@jurta.org>
+
+ * display.texi (Image Formats, Other Image Types): Add SVG.
+
+2007-08-28 Juri Linkov <juri@jurta.org>
+
+ * display.texi (Images): Move formats-related text to new node
+ "Image Formats".
+ (Image Formats): New node.
+
2007-08-27 Richard Stallman <rms@gnu.org>
* windows.texi (Window Configurations): Clarify what
@@ -79,6 +162,11 @@
* display.texi (Images): Delete redundant @findex.
+2007-08-16 Richard Stallman <rms@gnu.org>
+
+ * processes.texi (Asynchronous Processes): Clarify
+ doc of start-file-process.
+
2007-08-08 Martin Rudalics <rudalics@gmx.at>
* modes.texi (Example Major Modes): Fix typo.
@@ -103,28 +191,107 @@
* Relicense all FSF files to GPLv3 or later.
+2007-07-24 Michael Albinus <michael.albinus@gmx.de>
+
+ * processes.texi (Synchronous Processes):
+ Add `process-file-shell-command'.
+ (Asynchronous Processes): Mention restricted use of
+ `process-filter' and `process-sentinel' in
+ `start-file-process'. Add `start-file-process-shell-command'.
+
+2007-07-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.texi (Magic File Names): Introduce optional parameter
+ IDENTIFICATION for `file-remote-p'.
+
2007-07-16 Richard Stallman <rms@gnu.org>
* display.texi (Defining Faces): Fix previous change.
+2007-07-14 Richard Stallman <rms@gnu.org>
+
+ * control.texi (Handling Errors): Document `debug' in handler list.
+
2007-07-10 Richard Stallman <rms@gnu.org>
* display.texi (Defining Faces): Explain C-M-x feature for defface.
-2007-06-24 Karl Berry <karl@tug.org>
+2007-07-09 Richard Stallman <rms@gnu.org>
+
+ * files.texi (Magic File Names): Rewrite previous change.
+
+2007-07-08 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.texi (Magic File Names): Introduce optional parameter
+ CONNECTED for `file-remote-p'.
+
+2007-07-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * processes.texi (Asynchronous Processes):
+ * files.texi (Magic File Names): Add `start-file-process'.
+
+2007-06-27 Richard Stallman <rms@gnu.org>
+
+ * files.texi (Format Conversion Piecemeal): Clarify
+ `after-insert-file-functions' calling convention.
+
+2007-06-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.texi (Magic File Names): Remove `dired-call-process'.
+ Add `process-file'.
+
+2007-06-27 Kenichi Handa <handa@m17n.org>
+
+ * text.texi (Special Properties): Fix description about
+ `composition' property.
+
+2007-06-26 Kenichi Handa <handa@m17n.org>
+
+ * nonascii.texi (Default Coding Systems): Document about the
+ return value `undecided'.
+
+2007-06-25 David Kastrup <dak@gnu.org>
+
+ * keymaps.texi (Active Keymaps): Document new POSITION argument of
+ `current-active-maps'.
+
+2007-06-24 Karl Berry <karl@gnu.org>
* elisp.texi, vol1.texi, vol2.texi: New Back-Cover Text.
+2007-06-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * display.texi (Overlay Arrow): Doc fix.
+
2007-06-14 Karl Berry <karl@tug.org>
* anti.texi (Antinews): Typo.
+2007-06-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * display.texi (Image Cache): Document image-refresh.
+
2007-06-12 Karl Berry <karl@gnu.org>
* vol1.texi, vol2.texi, two-volume-cross-refs.txt: Update.
* two-volume.make: New file.
* .cvsignore: Ignore two-volume files.
+2007-06-12 Tom Tromey <tromey@redhat.com>
+
+ * os.texi (Init File): Document user-emacs-directory.
+
+2007-06-03 Nick Roberts <nickrob@snap.net.nz>
+
+ * commands.texi (Click Events): Describe width and height when
+ object is nil.
+
+2007-05-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * commands.texi (Click Events): Layout more logically. Describe
+ width and height.
+ (Drag Events, Motion Events): Update to new format for position.
+
2007-06-02 Richard Stallman <rms@gnu.org>
* frames.texi (Color Parameters): Add xref to (emacs)Standard Faces.
@@ -161,6 +328,20 @@
* modes.texi (Auto Major Mode): Document file-start-mode-alist.
+2007-05-10 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ * elisp.texi (Top): Remove "Saving Properties" from detailed menu.
+ * files.texi (Format Conversion): Expand intro; add menu.
+ (Format Conversion Overview, Format Conversion Round-Trip)
+ (Format Conversion Piecemeal): New nodes/subsections.
+ * hooks.texi: Xref "Format Conversion" , not "Saving Properties".
+ * text.texi (Text Properties): Remove "Saving Properties" from menu.
+ (Saving Properties): Delete node/subsection.
+
+2007-05-07 Karl Berry <karl@gnu.org>
+
+ * elisp.texi (EMACSVER): Back to 22.
+
2007-05-06 Richard Stallman <rms@gnu.org>
* processes.texi (Accepting Output): Revert most of previous change.
@@ -179,14 +360,18 @@
* tips.texi (Documentation Tips): Rearrange items to place the
more important ones first. Add an index entry for hyperlinks.
-2007-05-03 Karl Berry <karl@tug.org>
+2007-05-03 Karl Berry <karl@gnu.org>
* elisp.texi (\urlcolor, \linkcolor) [smallbook]: \Black for printing.
- (EMACSVER) [smallbook]: 22 for printed version.
+ (EMACSVER) [smallbook]: 22 for printed version.
* control.texi (Signaling Errors) <signal>: texinfo.tex is fixed,
so restore anchor to normal position after defun. Found by Kevin Ryde.
+2007-04-26 Glenn Morris <rgm@gnu.org>
+
+ * elisp.texi (EMACSVER): Increase to 22.1.50.
+
2007-04-28 Karl Berry <karl@gnu.org>
* elisp.texi: Improve line breaks on copyright page,
@@ -240,13 +425,13 @@
2007-04-11 Karl Berry <karl@gnu.org>
- * anti.texi (Antinews),
- * display.texi (Overlay Properties, Defining Images),
- * processes.texi (Synchronous Processes, Sentinels),
- * syntax.texi (Syntax Table Internals),
- * searching.texi (Regexp Special),
- * nonascii.texi (Default Coding Systems),
- * text.texi (Special Properties),
+ * anti.texi (Antinews):
+ * display.texi (Overlay Properties, Defining Images):
+ * processes.texi (Synchronous Processes, Sentinels):
+ * syntax.texi (Syntax Table Internals):
+ * searching.texi (Regexp Special):
+ * nonascii.texi (Default Coding Systems):
+ * text.texi (Special Properties):
* minibuf.texi (Basic Completion): Wording to improve breaks in
8.5x11 format.
* elisp.texi (smallbook): New @set to more easily switch between
@@ -396,10 +581,10 @@
2007-04-01 Karl Berry <karl@gnu.org>
- * processes.texi (Low-Level Network): typo.
- * loading.texi (Hooks for Loading): avoid double "the".
- * keymaps.texi (Key Sequences): no double "and".
- (Changing Key Bindings): shorten to improve line break.
+ * processes.texi (Low-Level Network): Typo.
+ * loading.texi (Hooks for Loading): Avoid double "the".
+ * keymaps.texi (Key Sequences): No double "and".
+ (Changing Key Bindings): Shorten to improve line break.
2007-03-31 Glenn Morris <rgm@gnu.org>
@@ -1567,7 +1752,7 @@
Explain string and vector representations of key sequences
* keymaps.texi (Changing Key Bindings):
- * commands.texi (Interactive Codes, Interactive Codes):
+ * commands.texi (Interactive Codes):
* help.texi (Describing Characters): Refer to it.
2006-05-23 Luc Teirlinck <teirllm@auburn.edu>
@@ -3324,8 +3509,7 @@
* text.texi (Undo): Document extensible undo entries.
- * searching.texi (String Search, Regexp Search, Regexp Search):
- Cleanups.
+ * searching.texi (String Search, Regexp Search): Cleanups.
* nonascii.texi (Character Codes): Minor fix.
diff --git a/lispref/Makefile.in b/doc/lispref/Makefile.in
index 1a34d60a0d8..12dd1c86632 100644
--- a/lispref/Makefile.in
+++ b/doc/lispref/Makefile.in
@@ -26,8 +26,9 @@ srcdir = @srcdir@
# Tell make where to find source files; this is needed for the makefiles.
VPATH=@srcdir@
-infodir = ../info
-usermanualdir = $(srcdir)/../man
+infodir = ../../info
+usermanualdir = $(srcdir)/../emacs
+miscmanualdir = $(srcdir)/../misc
TEXI2DVI = texi2dvi
SHELL = /bin/sh
@@ -133,7 +134,7 @@ dist: $(infodir)/elisp elisp.dvi
-mkdir temp/$(manual)
-ln $(srcdir)/README $(srcdir)/configure.in $(srcdir)/configure \
$(srcdir)/Makefile.in $(srcs) \
- $(srcdir)/../man/texinfo.tex \
+ $(miscmanualdir)/texinfo.tex \
elisp.dvi elisp.aux elisp.??s \
$(infodir)/elisp $(infodir)/elisp-[1-9] $(infodir)/elisp-[1-9][0-9] \
temp/$(manual)
diff --git a/lispref/README b/doc/lispref/README
index c5d4c8acc77..c5d4c8acc77 100644
--- a/lispref/README
+++ b/doc/lispref/README
diff --git a/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi
index 46e7c3739c4..8415bdca2be 100644
--- a/lispref/abbrevs.texi
+++ b/doc/lispref/abbrevs.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1999, 2001, 2002, 2003,
@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/abbrevs
+@setfilename ../../info/abbrevs
@node Abbrevs, Processes, Syntax Tables, Top
@chapter Abbrevs and Abbrev Expansion
@cindex abbrev
@@ -23,13 +23,10 @@ abbrev table. Normally both are used.
each abbreviation. The symbol's name is the abbreviation; its value
is the expansion; its function definition is the hook function to do
the expansion (@pxref{Defining Abbrevs}); its property list cell
-typically contains the use count, the number of times the abbreviation
-has been expanded. Alternatively, the use count is on the
-@code{count} property and the system-abbrev flag is on the
-@code{system-type} property. Abbrevs with a non-@code{nil}
-@code{system-type} property are called ``system'' abbrevs. They are
-usually defined by modes or packages, instead of by the user, and are
-treated specially in certain respects.
+typically contains various additional properties such as the use
+count, the number of times the abbreviation has been expanded, or
+whether the abbrev is a so-called ``system'' abbrev defined by a major
+mode rather than by the user (@pxref{Abbrev Properties}).
Because the symbols used for abbrevs are not interned in the usual
obarray, they will never appear as the result of reading a Lisp
@@ -47,6 +44,10 @@ Mode, emacs, The GNU Emacs Manual}.
* Files: Abbrev Files. Saving abbrevs in files.
* Expansion: Abbrev Expansion. Controlling expansion; expansion subroutines.
* Standard Abbrev Tables:: Abbrev tables used by various major modes.
+* Abbrev Properties:: How to read and set abbrev properties.
+ Which properties have which effect.
+* Abbrev Table Properties:: How to read and set abbrev table properties.
+ Which properties have which effect.
@end menu
@node Abbrev Mode, Abbrev Tables, Abbrevs, Abbrevs
@@ -75,9 +76,15 @@ This is the same as @code{(default-value 'abbrev-mode)}.
This section describes how to create and manipulate abbrev tables.
-@defun make-abbrev-table
+@defun make-abbrev-table &rest props
This function creates and returns a new, empty abbrev table---an obarray
-containing no symbols. It is a vector filled with zeros.
+containing no symbols. It is a vector filled with zeros. @var{props}
+is a property list that is applied to the new table
+(@pxref{Abbrev Table Properties}).
+@end defun
+
+@defun abbrev-table-p table
+Return non-@code{nil} is @var{table} is an abbrev table.
@end defun
@defun clear-abbrev-table table
@@ -92,15 +99,18 @@ difference between @var{table} and the returned copy is that this
function sets the property lists of all copied abbrevs to 0.
@end defun
-@defun define-abbrev-table tabname definitions
+@defun define-abbrev-table tabname definitions &optional docstring &rest props
This function defines @var{tabname} (a symbol) as an abbrev table
name, i.e., as a variable whose value is an abbrev table. It defines
abbrevs in the table according to @var{definitions}, a list of
elements of the form @code{(@var{abbrevname} @var{expansion}
-@var{hook} @var{usecount} @var{system-flag})}. If an element of
-@var{definitions} has length less than five, omitted elements default
-to @code{nil}. A value of @code{nil} for @var{usecount} is equivalent
-to zero. The return value is always @code{nil}.
+[@var{hook}] [@var{props}...])}. These elements are passed as
+arguments to @code{define-abbrev}. The return value is always
+@code{nil}.
+
+The optional string @var{docstring} is the documentation string of the
+variable @var{tabname}. The property list @var{props} is applied to
+the abbrev table (@pxref{Abbrev Table Properties}).
If this function is called more than once for the same @var{tabname},
subsequent calls add the definitions in @var{definitions} to
@@ -132,20 +142,20 @@ to add these to @var{name} separately.)
@section Defining Abbrevs
@code{define-abbrev} is the low-level basic function for defining an
abbrev in a specified abbrev table. When major modes predefine standard
-abbrevs, they should call @code{define-abbrev} and specify @code{t} for
-@var{system-flag}. Be aware that any saved non-``system'' abbrevs are
+abbrevs, they should call @code{define-abbrev} and specify a @code{t} for
+the @code{:system} property.
+Be aware that any saved non-``system'' abbrevs are
restored at startup, i.e. before some major modes are loaded. Major modes
should therefore not assume that when they are first loaded their abbrev
tables are empty.
-@defun define-abbrev table name expansion &optional hook count system-flag
+@defun define-abbrev table name expansion &optional hook &rest props
This function defines an abbrev named @var{name}, in @var{table}, to
-expand to @var{expansion} and call @var{hook}. The return value is
-@var{name}.
-
-The value of @var{count}, if specified, initializes the abbrev's
-usage-count. If @var{count} is not specified or @code{nil}, the use
-count is initialized to zero.
+expand to @var{expansion} and call @var{hook}, with properties
+@var{props} (@pxref{Abbrev Properties}). The return value is @var{name}.
+The @code{:system} property in @var{props} is treated specially here:
+if it has the value @code{force}, then it will overwrite an existing
+definition even for a non-``system'' abbrev of the same name.
The argument @var{name} should be a string. The argument
@var{expansion} is normally the desired expansion (a string), or
@@ -167,12 +177,6 @@ inhibits insertion of the character. By contrast, if @var{hook}
returns @code{nil}, @code{expand-abbrev} also returns @code{nil}, as
if expansion had not really occurred.
-If @var{system-flag} is non-@code{nil}, that marks the abbrev as a
-``system'' abbrev with the @code{system-type} property. Unless
-@var{system-flag} has the value @code{force}, a ``system'' abbrev will
-not overwrite an existing definition for a non-``system'' abbrev of the
-same name.
-
Normally the function @code{define-abbrev} sets the variable
@code{abbrevs-changed} to @code{t}, if it actually changes the abbrev.
(This is so that some commands will offer to save the abbrevs.) It
@@ -329,20 +333,19 @@ has already been unexpanded. This contains information left by
@code{expand-abbrev} for the sake of the @code{unexpand-abbrev} command.
@end defvar
-@c Emacs 19 feature
-@defvar pre-abbrev-expand-hook
-This is a normal hook whose functions are executed, in sequence, just
-before any expansion of an abbrev. @xref{Hooks}. Since it is a normal
-hook, the hook functions receive no arguments. However, they can find
-the abbrev to be expanded by looking in the buffer before point.
-Running the hook is the first thing that @code{expand-abbrev} does, and
-so a hook function can be used to change the current abbrev table before
-abbrev lookup happens. (Although you have to do this carefully. See
-the example below.)
+@defvar abbrev-expand-functions
+This is a special hook run @emph{around} the @code{expand-abbrev}
+function. Functions on this hook are called with a single argument
+which is a function that performs the normal abbrev expansion.
+The hook function can hence do anything it wants before and after
+performing the expansion. It can also choose not to call its argument
+and thus override the default behavior, or it may even call it
+several times. The function should return the abbrev symbol if
+expansion took place.
@end defvar
The following sample code shows a simple use of
-@code{pre-abbrev-expand-hook}. It assumes that @code{foo-mode} is a
+@code{abbrev-expand-functions}. It assumes that @code{foo-mode} is a
mode for editing certain files in which lines that start with @samp{#}
are comments. You want to use Text mode abbrevs for those lines. The
regular local abbrev table, @code{foo-mode-abbrev-table} is
@@ -351,30 +354,22 @@ in your @file{.emacs} file. @xref{Standard Abbrev Tables}, for the
definitions of @code{local-abbrev-table} and @code{text-mode-abbrev-table}.
@smallexample
-(defun foo-mode-pre-abbrev-expand ()
- (when (save-excursion (forward-line 0) (eq (char-after) ?#))
- (let ((local-abbrev-table text-mode-abbrev-table)
- ;; Avoid infinite loop.
- (pre-abbrev-expand-hook nil))
- (expand-abbrev))
- ;; We have already called `expand-abbrev' in this hook.
- ;; Hence we want the "actual" call following this hook to be a no-op.
- (setq abbrev-start-location (point-max)
- abbrev-start-location-buffer (current-buffer))))
+(defun foo-mode-abbrev-expand-function (expand)
+ (if (not (save-excursion (forward-line 0) (eq (char-after) ?#)))
+ ;; Performs normal expansion.
+ (funcall expand)
+ ;; We're inside a comment: use the text-mode abbrevs.
+ (let ((local-abbrev-table text-mode-abbrev-table))
+ (funcall expand))))
(add-hook 'foo-mode-hook
#'(lambda ()
- (add-hook 'pre-abbrev-expand-hook
- 'foo-mode-pre-abbrev-expand
+ (add-hook 'abbrev-expand-functions
+ 'foo-mode-abbrev-expand-function
nil t)))
@end smallexample
-Note that @code{foo-mode-pre-abbrev-expand} just returns @code{nil}
-without doing anything for lines not starting with @samp{#}. Hence
-abbrevs expand normally using @code{foo-mode-abbrev-table} as local
-abbrev table for such lines.
-
-@node Standard Abbrev Tables, , Abbrev Expansion, Abbrevs
+@node Standard Abbrev Tables, Abbrev Properties, Abbrev Expansion, Abbrevs
@comment node-name, next, previous, up
@section Standard Abbrev Tables
@@ -390,7 +385,16 @@ global table.
@defvar local-abbrev-table
The value of this buffer-local variable is the (mode-specific)
-abbreviation table of the current buffer.
+abbreviation table of the current buffer. It can also be a list of
+such tables.
+@end defvar
+
+@defvar abbrev-minor-mode-table-alist
+The value of this variable is a list of elements of the form
+@code{(@var{mode} . @var{abbrev-table})} where @var{mode} is the name
+of a variable: if the variable is bound to a non-@code{nil} value,
+then the @var{abbrev-table} is active, otherwise it is ignored.
+@var{abbrev-table} can also be a list of abbrev tables.
@end defvar
@defvar fundamental-mode-abbrev-table
@@ -406,6 +410,96 @@ This is the local abbrev table used in Text mode.
This is the local abbrev table used in Lisp mode and Emacs Lisp mode.
@end defvar
+@node Abbrev Properties, Abbrev Table Properties, Standard Abbrev Tables, Abbrevs
+@section Abbrev Properties
+
+Abbrevs have properties, some of which influence the way they work.
+You can provide them as arguments to @code{define-abbrev} and you can
+manipulate them with the functions:
+
+@defun abbrev-put abbrev prop val
+Set the property @var{prop} of abbrev @var{abbrev} to value @var{val}.
+@end defun
+
+@defun abbrev-get abbrev prop
+Return the property @var{prop} of abbrev @var{abbrev}, or @code{nil}
+if the abbrev has no such property.
+@end defun
+
+The following properties have special meaning:
+
+@table @code
+@item :count
+This property counts the number of times the abbrev has
+been expanded. If not explicitly set, it is initialized to 0 by
+@code{define-abbrev}.
+
+@item :system
+If non-@code{nil}, this property marks the abbrev as a ``system''
+abbrev. Such abbrevs will not be saved to @var{abbrev-file-name}.
+
+@item :enable-function
+If non-@code{nil}, this property should be a function of no
+arguments which returns @code{nil} if the abbrev should not be used
+and @code{t} otherwise.
+
+@item :case-fixed
+If non-@code{nil}, this property indicates that the case of the
+abbrev's name is significant and should only match a text with the
+same pattern of capitalization. It also disables the code that
+modifies the capitalization of the expansion.
+@end table
+
+@node Abbrev Table Properties, , Abbrev Properties, Abbrevs
+@section Abbrev Table Properties
+
+Like abbrevs, abble tables have properties, some of which influence
+the way they work. You can provide them as arguments to
+@code{define-abbrev-table} and you can manipulate them with the
+functions:
+
+@defun abbrev-table-put table prop val
+Set the property @var{prop} of abbrev table @var{table} to value @var{val}.
+@end defun
+
+@defun abbrev-table-get table prop
+Return the property @var{prop} of abbrev table @var{table}, or @code{nil}
+if the abbrev has no such property.
+@end defun
+
+The following properties have special meaning:
+
+@table @code
+@item :enable-function
+This is like the @code{:enable-function} abbrev property except that
+it applies to all abbrevs in the table and is used even before trying
+to find the abbrev before point so it can dynamically modify the
+abbrev table.
+
+@item :case-fixed
+This is like the @code{:case-fixed} abbrev property except that it
+applies to all abbrevs in the table.
+
+@item :regexp
+If non-@code{nil}, this property is a regular expression that
+indicates how to extract the name of the abbrev before point before
+looking it up in the table. When the regular expression matches
+before point, the abbrev name is expected to be in submatch 1.
+If this property is @code{nil}, @code{expand-function} defaults to
+@code{"\\<\\(\\w+\\)\\W"}. This property allows the use of abbrevs
+whose name contains characters of non-word syntax.
+
+@item :parents
+This property holds the list of tables from which to inherit
+other abbrevs.
+
+@item :abbrev-table-modiff
+This property holds a counter incremented each time a new abbrev is
+added to the table.
+
+@end table
+
+
@ignore
arch-tag: 5ffdbe08-2cd4-48ec-a5a8-080f95756eec
@end ignore
diff --git a/lispref/advice.texi b/doc/lispref/advice.texi
index 4d580f9846d..7eb89d7bd41 100644
--- a/lispref/advice.texi
+++ b/doc/lispref/advice.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/advising
+@setfilename ../../info/advising
@node Advising Functions, Debugging, Byte Compilation, Top
@chapter Advising Emacs Lisp Functions
@cindex advising functions
diff --git a/lispref/anti.texi b/doc/lispref/anti.texi
index 1ec0c5ef327..1ec0c5ef327 100644
--- a/lispref/anti.texi
+++ b/doc/lispref/anti.texi
diff --git a/lispref/back.texi b/doc/lispref/back.texi
index 19559eab9c1..19559eab9c1 100644
--- a/lispref/back.texi
+++ b/doc/lispref/back.texi
diff --git a/lispref/backups.texi b/doc/lispref/backups.texi
index 44795557f15..7268d01e9ee 100644
--- a/lispref/backups.texi
+++ b/doc/lispref/backups.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2001, 2002, 2003,
@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/backups
+@setfilename ../../info/backups
@node Backups and Auto-Saving, Buffers, Files, Top
@chapter Backups and Auto-Saving
@cindex backups and auto-saving
diff --git a/lispref/book-spine.texinfo b/doc/lispref/book-spine.texinfo
index 7355c4530ae..7355c4530ae 100644
--- a/lispref/book-spine.texinfo
+++ b/doc/lispref/book-spine.texinfo
diff --git a/lispref/buffers.texi b/doc/lispref/buffers.texi
index e9cafb69fb5..2d7faccf241 100644
--- a/lispref/buffers.texi
+++ b/doc/lispref/buffers.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/buffers
+@setfilename ../../info/buffers
@node Buffers, Windows, Backups and Auto-Saving, Top
@chapter Buffers
@cindex buffer
diff --git a/lispref/commands.texi b/doc/lispref/commands.texi
index f54edba9175..cdd627f6b52 100644
--- a/lispref/commands.texi
+++ b/doc/lispref/commands.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/commands
+@setfilename ../../info/commands
@node Command Loop, Keymaps, Minibuffers, Top
@chapter Command Loop
@cindex editor command loop
@@ -1222,12 +1222,7 @@ describe events by their types; thus, if there is a key binding for
@item @var{position}
This is the position where the mouse click occurred. The actual
format of @var{position} depends on what part of a window was clicked
-on. The various formats are described below.
-
-@item @var{click-count}
-This is the number of rapid repeated presses so far of the same mouse
-button. @xref{Repeat Events}.
-@end table
+on.
For mouse click events in the text area, mode line, header line, or in
the marginal areas, @var{position} has this form:
@@ -1249,8 +1244,14 @@ which the click occurred. It is one of the symbols @code{mode-line},
@code{header-line}, @code{vertical-line}, @code{left-margin},
@code{right-margin}, @code{left-fringe}, or @code{right-fringe}.
+In one special case, @var{pos-or-area} is a list containing a symbol (one
+of the symbols listed above) instead of just the symbol. This happens
+after the imaginary prefix keys for the event are inserted into the
+input stream. @xref{Key Sequence Input}.
+
+
@item @var{x}, @var{y}
-These are the pixel-denominated coordinates of the click, relative to
+These are the pixel coordinates of the click, relative to
the top left corner of @var{window}, which is @code{(0 . 0)}.
For the mode or header line, @var{y} does not have meaningful data.
For the vertical line, @var{x} does not have meaningful data.
@@ -1264,6 +1265,7 @@ This is the object on which the click occurred. It is either
(@var{string} . @var{string-pos}) when there is a string-type text
property at the click position.
+@table @asis
@item @var{string}
This is the string on which the click occurred, including any
properties.
@@ -1271,6 +1273,7 @@ properties.
@item @var{string-pos}
This is the position in the string on which the click occurred,
relevant if properties at the click need to be looked up.
+@end table
@item @var{text-pos}
For clicks on a marginal area or on a fringe, this is the buffer
@@ -1289,12 +1292,17 @@ This is the image object on which the click occurred. It is either
an image object as returned by @code{find-image} if click was in an image.
@item @var{dx}, @var{dy}
-These are the pixel-denominated coordinates of the click, relative to
+These are the pixel coordinates of the click, relative to
the top left corner of @var{object}, which is @code{(0 . 0)}. If
@var{object} is @code{nil}, the coordinates are relative to the top
left corner of the character glyph clicked on.
-@end table
+@item @var{width}, @var{height}
+These are the pixel width and height of @var{object} or, if this is
+@code{nil}, those of the character glyph clicked on.
+@end table
+
+@sp 1
For mouse clicks on a scroll-bar, @var{position} has this form:
@example
@@ -1325,10 +1333,10 @@ of the symbols @code{above-handle}, @code{handle}, @code{below-handle},
@code{up}, @code{down}, @code{top}, @code{bottom}, and @code{end-scroll}.
@end table
-In one special case, @var{buffer-pos} is a list containing a symbol (one
-of the symbols listed above) instead of just the symbol. This happens
-after the imaginary prefix keys for the event are inserted into the
-input stream. @xref{Key Sequence Input}.
+@item @var{click-count}
+This is the number of rapid repeated presses so far of the same mouse
+button. @xref{Repeat Events}.
+@end table
@node Drag Events
@subsection Drag Events
@@ -1344,19 +1352,18 @@ position and the final position, like this:
@example
(@var{event-type}
- (@var{window1} @var{buffer-pos1} (@var{x1} . @var{y1}) @var{timestamp1})
- (@var{window2} @var{buffer-pos2} (@var{x2} . @var{y2}) @var{timestamp2})
- @var{click-count})
+ (@var{window1} START-POSITION)
+ (@var{window2} END-POSITION))
@end example
For a drag event, the name of the symbol @var{event-type} contains the
-prefix @samp{drag-}. For example, dragging the mouse with button 2 held
-down generates a @code{drag-mouse-2} event. The second and third
-elements of the event give the starting and ending position of the drag.
-Aside from that, the data have the same meanings as in a click event
-(@pxref{Click Events}). You can access the second element of any mouse
-event in the same way, with no need to distinguish drag events from
-others.
+prefix @samp{drag-}. For example, dragging the mouse with button 2
+held down generates a @code{drag-mouse-2} event. The second and third
+elements of the event give the starting and ending position of the
+drag. They have the same form as @var{position} in a click event
+(@pxref{Click Events}) that is not on the scroll bar part of the
+window. You can access the second element of any mouse event in the
+same way, with no need to distinguish drag events from others.
The @samp{drag-} prefix follows the modifier key prefixes such as
@samp{C-} and @samp{M-}.
@@ -1496,7 +1503,7 @@ of the mouse without any button activity. Mouse motion events are
represented by lists that look like this:
@example
-(mouse-movement (@var{window} @var{buffer-pos} (@var{x} . @var{y}) @var{timestamp}))
+(mouse-movement (POSITION))
@end example
The second element of the list describes the current position of the
diff --git a/lispref/compile.texi b/doc/lispref/compile.texi
index 8f5c047fd6b..aeaa9f79eb8 100644
--- a/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/compile
+@setfilename ../../info/compile
@node Byte Compilation, Advising Functions, Loading, Top
@chapter Byte Compilation
@cindex byte compilation
diff --git a/lispref/configure b/doc/lispref/configure
index 7f67f08dfa3..7f67f08dfa3 100755
--- a/lispref/configure
+++ b/doc/lispref/configure
diff --git a/lispref/configure.in b/doc/lispref/configure.in
index 7db2f8cab5e..7db2f8cab5e 100644
--- a/lispref/configure.in
+++ b/doc/lispref/configure.in
diff --git a/lispref/control.texi b/doc/lispref/control.texi
index 4c469a10368..db88a74487d 100644
--- a/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/control
+@setfilename ../../info/control
@node Control Structures, Variables, Evaluation, Top
@chapter Control Structures
@cindex special forms for control structures
@@ -893,6 +893,12 @@ establishing an error handler, with the special form
This deletes the file named @var{filename}, catching any error and
returning @code{nil} if an error occurs.
+ The @code{condition-case} construct is often used to trap errors that
+are predictable, such as failure to open a file in a call to
+@code{insert-file-contents}. It is also used to trap errors that are
+totally unpredictable, such as when the program evaluates an expression
+read from the user.
+
The second argument of @code{condition-case} is called the
@dfn{protected form}. (In the example above, the protected form is a
call to @code{delete-file}.) The error handlers go into effect when
@@ -920,15 +926,33 @@ the two gets to handle it.
If an error is handled by some @code{condition-case} form, this
ordinarily prevents the debugger from being run, even if
@code{debug-on-error} says this error should invoke the debugger.
-@xref{Error Debugging}. If you want to be able to debug errors that are
-caught by a @code{condition-case}, set the variable
-@code{debug-on-signal} to a non-@code{nil} value.
- When an error is handled, control returns to the handler. Before this
-happens, Emacs unbinds all variable bindings made by binding constructs
-that are being exited and executes the cleanups of all
-@code{unwind-protect} forms that are exited. Once control arrives at
-the handler, the body of the handler is executed.
+ If you want to be able to debug errors that are caught by a
+@code{condition-case}, set the variable @code{debug-on-signal} to a
+non-@code{nil} value. You can also specify that a particular handler
+should let the debugger run first, by writing @code{debug} among the
+conditions, like this:
+
+@example
+@group
+(condition-case nil
+ (delete-file filename)
+ ((debug error) nil))
+@end group
+@end example
+
+@noindent
+The effect of @code{debug} here is only to prevent
+@code{condition-case} from suppressing the call to the debugger. Any
+given error will invoke the debugger only if @code{debug-on-error} and
+the other usual filtering mechanisms say it should. @xref{Error Debugging}.
+
+ Once Emacs decides that a certain handler handles the error, it
+returns control to that handler. To do so, Emacs unbinds all variable
+bindings made by binding constructs that are being exited, and
+executes the cleanups of all @code{unwind-protect} forms that are
+being exited. Once control arrives at the handler, the body of the
+handler executes normally.
After execution of the handler body, execution returns from the
@code{condition-case} form. Because the protected form is exited
@@ -937,12 +961,6 @@ execution at the point of the error, nor can it examine variable
bindings that were made within the protected form. All it can do is
clean up and proceed.
- The @code{condition-case} construct is often used to trap errors that
-are predictable, such as failure to open a file in a call to
-@code{insert-file-contents}. It is also used to trap errors that are
-totally unpredictable, such as when the program evaluates an expression
-read from the user.
-
Error signaling and handling have some resemblance to @code{throw} and
@code{catch} (@pxref{Catch and Throw}), but they are entirely separate
facilities. An error cannot be caught by a @code{catch}, and a
@@ -960,7 +978,8 @@ error occurs during @var{protected-form}.
Each of the @var{handlers} is a list of the form @code{(@var{conditions}
@var{body}@dots{})}. Here @var{conditions} is an error condition name
-to be handled, or a list of condition names; @var{body} is one or more
+to be handled, or a list of condition names (which can include @code{debug}
+to allow the debugger to run before the handler); @var{body} is one or more
Lisp expressions to be executed when this handler handles an error.
Here are examples of handlers:
diff --git a/lispref/customize.texi b/doc/lispref/customize.texi
index 8b1b1a9b91f..7c723a29f28 100644
--- a/lispref/customize.texi
+++ b/doc/lispref/customize.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/customize
+@setfilename ../../info/customize
@node Customization, Loading, Macros, Top
@chapter Writing Customization Definitions
@@ -393,6 +393,14 @@ value and then reevaluates the defcustom. By that time, the necessary
variables and functions will be defined, so there will not be an error.
@end table
+@item :risky @var{value}
+@kindex risky@r{, @code{defcustom} keyword}
+Set this variable's @code{risky-local-variable} property to @var{value}.
+
+@item :safe @var{function}
+@kindex safe@r{, @code{defcustom} keyword}
+Set this variable's @code{safe-local-variable} property to @var{function}.
+
@item :set-after @var{variables}
@kindex set-after@r{, @code{defcustom} keyword}
When setting variables according to saved customizations, make sure to
diff --git a/lispref/debugging.texi b/doc/lispref/debugging.texi
index a427e746b27..4c4cb92914d 100644
--- a/lispref/debugging.texi
+++ b/doc/lispref/debugging.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998, 1999, 2001, 2002, 2003,
@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/debugging
+@setfilename ../../info/debugging
@node Debugging, Read and Print, Advising Functions, Top
@chapter Debugging Lisp Programs
diff --git a/lispref/display.texi b/doc/lispref/display.texi
index 58b2ef11e72..4c9df9c5ede 100644
--- a/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/display
+@setfilename ../../info/display
@node Display, System Interface, Processes, Top
@chapter Emacs Display
@@ -1291,6 +1291,11 @@ while moving an overlay or changing its properties does not. Unlike
text property changes, overlay property changes are not recorded in
the buffer's undo list.
+ Since more than one overlay can specify a property value for the
+same character, Emacs lets you specify a priority value of each
+overlay. You should not make assumptions about which overlay will
+prevail when there is a conflict and they have the same priority.
+
These functions read and set the properties of an overlay:
@defun overlay-get overlay prop
@@ -1321,13 +1326,16 @@ of them:
@item priority
@kindex priority @r{(overlay property)}
This property's value (which should be a nonnegative integer number)
-determines the priority of the overlay. The priority matters when two
-or more overlays cover the same character and both specify the same
-property; the one whose @code{priority} value is larger takes priority
-over the other. For the @code{face} property, the higher priority
-value does not completely replace the other; instead, its face
-attributes override the face attributes of the lower priority
-@code{face} property.
+determines the priority of the overlay. No priority, or @code{nil},
+means zero.
+
+The priority matters when two or more overlays cover the same
+character and both specify the same property; the one whose
+@code{priority} value is larger overrides the other. For the
+@code{face} property, the higher priority overlay's value does not
+completely override the other value; instead, its face attributes
+override the face attributes of the lower priority @code{face}
+property.
Currently, all overlays take priority over text properties. Please
avoid using negative priority values, as we have not yet decided just
@@ -3108,7 +3116,7 @@ overwritten.
The overlay-arrow string is displayed in any given buffer if the value
of @code{overlay-arrow-position} in that buffer points into that
-buffer. Thus, it works to can display multiple overlay arrow strings
+buffer. Thus, it is possible to display multiple overlay arrow strings
by creating buffer-local bindings of @code{overlay-arrow-position}.
However, it is usually cleaner to use
@code{overlay-arrow-variable-list} to achieve this result.
@@ -3626,6 +3634,24 @@ Emacs is compiled without image support. You can use the function
@code{display-images-p} to determine if images can in principle be
displayed (@pxref{Display Feature Testing}).
+@menu
+* Image Formats:: Supported image formats.
+* Image Descriptors:: How to specify an image for use in @code{:display}.
+* XBM Images:: Special features for XBM format.
+* XPM Images:: Special features for XPM format.
+* GIF Images:: Special features for GIF format.
+* PostScript Images:: Special features for PostScript format.
+* Other Image Types:: Various other formats are supported.
+* Defining Images:: Convenient ways to define an image for later use.
+* Showing Images:: Convenient ways to display an image once it is defined.
+* Image Cache:: Internal mechanisms of image display.
+@end menu
+
+@node Image Formats
+@subsection Image Formats
+@cindex image formats
+@cindex image types
+
Emacs can display a number of different image formats; some of them
are supported only if particular support libraries are installed on
your machine. In some environments, Emacs can load image
@@ -3637,11 +3663,12 @@ libraries (though it is not possible to add new image formats).
libraries @code{libXpm} version 3.4k and @code{libz}), GIF (requiring
@code{libungif} 4.1.0), PostScript, PBM, JPEG (requiring the
@code{libjpeg} library version v6a), TIFF (requiring @code{libtiff}
-v3.4), and PNG (requiring @code{libpng} 1.0.2).
+v3.4), PNG (requiring @code{libpng} 1.0.2), and SVG (requiring
+@code{librsvg} 2.0.0).
You specify one of these formats with an image type symbol. The image
type symbols are @code{xbm}, @code{xpm}, @code{gif}, @code{postscript},
-@code{pbm}, @code{jpeg}, @code{tiff}, and @code{png}.
+@code{pbm}, @code{jpeg}, @code{tiff}, @code{png}, and @code{svg}.
@defvar image-types
This variable contains a list of those image type symbols that are
@@ -3683,18 +3710,6 @@ function always returns @code{t}; for other image types, it returns
@code{t} if the dynamic library could be loaded, @code{nil} otherwise.
@end defun
-@menu
-* Image Descriptors:: How to specify an image for use in @code{:display}.
-* XBM Images:: Special features for XBM format.
-* XPM Images:: Special features for XPM format.
-* GIF Images:: Special features for GIF format.
-* PostScript Images:: Special features for PostScript format.
-* Other Image Types:: Various other formats are supported.
-* Defining Images:: Convenient ways to define an image for later use.
-* Showing Images:: Convenient ways to display an image once it is defined.
-* Image Cache:: Internal mechanisms of image display.
-@end menu
-
@node Image Descriptors
@subsection Image Descriptors
@cindex image descriptor
@@ -4069,6 +4084,8 @@ background color.
For PNG images, specify image type @code{png}.
+ For SVG images, specify image type @code{svg}.
+
@node Defining Images
@subsection Defining Images
diff --git a/lispref/doclicense.texi b/doc/lispref/doclicense.texi
index f2f32aaa968..f2f32aaa968 100644
--- a/lispref/doclicense.texi
+++ b/doc/lispref/doclicense.texi
diff --git a/lispref/edebug.texi b/doc/lispref/edebug.texi
index 4be030896c5..4be030896c5 100644
--- a/lispref/edebug.texi
+++ b/doc/lispref/edebug.texi
diff --git a/lispref/elisp-covers.texi b/doc/lispref/elisp-covers.texi
index 4b9693dece7..4b9693dece7 100644
--- a/lispref/elisp-covers.texi
+++ b/doc/lispref/elisp-covers.texi
diff --git a/lispref/elisp.texi b/doc/lispref/elisp.texi
index e28ea1ce5a0..695144738fc 100644
--- a/lispref/elisp.texi
+++ b/doc/lispref/elisp.texi
@@ -7,12 +7,7 @@
@c Version of the manual and of Emacs.
@c Please remember to update the edition number in README as well.
@set VERSION 2.9
-@set EMACSVER 22.1.50
-
-@dircategory Emacs
-@direntry
-* Elisp: (elisp). The Emacs Lisp Reference Manual.
-@end direntry
+@set EMACSVER 23.0.50
@c in general, keep the following line commented out, unless doing a
@c copy of this manual that will be published. The manual should go
@@ -67,6 +62,11 @@ developing GNU and promoting software freedom.''
@end quotation
@end copying
+@dircategory Emacs
+@direntry
+* Elisp: (elisp). The Emacs Lisp Reference Manual.
+@end direntry
+
@titlepage
@title GNU Emacs Lisp Reference Manual
@subtitle For Emacs Version @value{EMACSVER}
@@ -1064,8 +1064,6 @@ Text Properties
* Format Properties:: Properties for representing formatting of text.
* Sticky Properties:: How inserted text gets properties from
neighboring text.
-* Saving Properties:: Saving text properties in files, and reading
- them back.
* Lazy Properties:: Computing text properties in a lazy fashion
only when text is examined.
* Clickable Text:: Using text properties to make regions of text
diff --git a/lispref/errors.texi b/doc/lispref/errors.texi
index af2df791c39..0be31ce3846 100644
--- a/lispref/errors.texi
+++ b/doc/lispref/errors.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1999, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/errors
+@setfilename ../../info/errors
@node Standard Errors, Standard Buffer-Local Variables, GNU Emacs Internals, Top
@appendix Standard Errors
@cindex standard errors
diff --git a/lispref/eval.texi b/doc/lispref/eval.texi
index 772f502553c..f4d164ec3a2 100644
--- a/lispref/eval.texi
+++ b/doc/lispref/eval.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998, 2001, 2002, 2003,
@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/eval
+@setfilename ../../info/eval
@node Evaluation, Control Structures, Symbols, Top
@chapter Evaluation
@cindex evaluation
diff --git a/lispref/files.texi b/doc/lispref/files.texi
index 0353d4464b5..419f109e0a8 100644
--- a/lispref/files.texi
+++ b/doc/lispref/files.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/files
+@setfilename ../../info/files
@node Files, Backups and Auto-Saving, Documentation, Top
@comment node-name, next, previous, up
@chapter Files
@@ -374,8 +374,7 @@ buffer name instead.
@end deffn
Saving a buffer runs several hooks. It also performs format
-conversion (@pxref{Format Conversion}), and may save text properties in
-``annotations'' (@pxref{Saving Properties}).
+conversion (@pxref{Format Conversion}).
@defvar write-file-functions
The value of this variable is a list of functions to be called before
@@ -496,9 +495,9 @@ and the length of the data inserted. An error is signaled if
The function @code{insert-file-contents} checks the file contents
against the defined file formats, and converts the file contents if
-appropriate. @xref{Format Conversion}. It also calls the functions in
-the list @code{after-insert-file-functions}; see @ref{Saving
-Properties}. Normally, one of the functions in the
+appropriate and also calls the functions in
+the list @code{after-insert-file-functions}. @xref{Format Conversion}.
+Normally, one of the functions in the
@code{after-insert-file-functions} list determines the coding system
(@pxref{Coding Systems}) used for decoding the file's contents,
including end-of-line conversion.
@@ -620,9 +619,10 @@ file name to use for purposes of locking and unlocking, overriding
@var{filename} and @var{visit} for that purpose.
The function @code{write-region} converts the data which it writes to
-the appropriate file formats specified by @code{buffer-file-format}.
-@xref{Format Conversion}. It also calls the functions in the list
-@code{write-region-annotate-functions}; see @ref{Saving Properties}.
+the appropriate file formats specified by @code{buffer-file-format}
+and also calls the functions in the list
+@code{write-region-annotate-functions}.
+@xref{Format Conversion}.
Normally, @code{write-region} displays the message @samp{Wrote
@var{filename}} in the echo area. If @var{visit} is neither @code{t}
@@ -2587,7 +2587,6 @@ first, before handlers for jobs such as remote file access.
@code{directory-file-name},
@code{directory-files},
@code{directory-files-and-attributes},
-@code{dired-call-process},
@code{dired-compress-file}, @code{dired-uncache},@*
@code{expand-file-name},
@code{file-accessible-directory-p},
@@ -2614,8 +2613,10 @@ first, before handlers for jobs such as remote file access.
@code{make-directory},
@code{make-directory-internal},
@code{make-symbolic-link},@*
+@code{process-file},
@code{rename-file}, @code{set-file-modes}, @code{set-file-times},
@code{set-visited-file-modtime}, @code{shell-command},
+@code{start-file-process},
@code{substitute-in-file-name},@*
@code{unhandled-file-name-directory},
@code{vc-registered},
@@ -2633,7 +2634,6 @@ first, before handlers for jobs such as remote file access.
@code{directory-file-name},
@code{directory-files},
@code{directory-files-and-at@discretionary{}{}{}tributes},
-@code{dired-call-process},
@code{dired-compress-file}, @code{dired-uncache},
@code{expand-file-name},
@code{file-accessible-direc@discretionary{}{}{}tory-p},
@@ -2658,8 +2658,10 @@ first, before handlers for jobs such as remote file access.
@code{load}, @code{make-direc@discretionary{}{}{}tory},
@code{make-direc@discretionary{}{}{}tory-internal},
@code{make-symbolic-link},
+@code{process-file},
@code{rename-file}, @code{set-file-modes},
@code{set-visited-file-modtime}, @code{shell-command},
+@code{start-file-process},
@code{substitute-in-file-name},
@code{unhandled-file-name-directory},
@code{vc-regis@discretionary{}{}{}tered},
@@ -2766,7 +2768,7 @@ nothing and returns @code{nil}. Otherwise it returns the file name
of the local copy file.
@end defun
-@defun file-remote-p filename
+@defun file-remote-p filename &optional identification connected
This function tests whether @var{filename} is a remote file. If
@var{filename} is local (not remote), the return value is @code{nil}.
If @var{filename} is indeed remote, the return value is a string that
@@ -2775,7 +2777,7 @@ identifies the remote system.
This identifier string can include a host name and a user name, as
well as characters designating the method used to access the remote
system. For example, the remote identifier string for the filename
-@code{/ssh:user@@host:/some/file} is @code{/ssh:user@@host:}.
+@code{/sudo::/some/file} is @code{/sudo:root@@localhost:}.
If @code{file-remote-p} returns the same identifier for two different
filenames, that means they are stored on the same file system and can
@@ -2783,6 +2785,18 @@ be accessed locally with respect to each other. This means, for
example, that it is possible to start a remote process accessing both
files at the same time. Implementors of file handlers need to ensure
this principle is valid.
+
+@var{identification} specifies which part of the identifier shall be
+returned as string. @var{identification} can be the symbol
+@code{method}, @code{user} or @code{host}; any other value is handled
+like @code{nil} and means to return the complete identifier string.
+In the example above, the remote @code{user} identifier string would
+be @code{root}.
+
+If @var{connected} is non-@code{nil}, this function returns @code{nil}
+even if @var{filename} is remote, if Emacs has no network connection
+to its host. This is useful when you want to avoid the delay of
+making connections when they don't exist.
@end defun
@defun unhandled-file-name-directory filename
@@ -2802,23 +2816,70 @@ is a good way to come up with one.
@cindex file format conversion
@cindex encoding file formats
@cindex decoding file formats
- The variable @code{format-alist} defines a list of @dfn{file formats},
-which describe textual representations used in files for the data (text,
-text-properties, and possibly other information) in an Emacs buffer.
-Emacs performs format conversion if appropriate when reading and writing
-files.
+@cindex text properties in files
+@cindex saving text properties
+ Emacs performs several steps to convert the data in a buffer (text,
+text properties, and possibly other information) to and from a
+representation suitable for storing into a file. This section describes
+the fundamental functions that perform this @dfn{format conversion},
+namely @code{insert-file-contents} for reading a file into a buffer,
+and @code{write-region} for writing a buffer into a file.
+
+@menu
+* Overview: Format Conversion Overview. @code{insert-file-contents} and @code{write-region}
+* Round-Trip: Format Conversion Round-Trip. Using @code{format-alist}.
+* Piecemeal: Format Conversion Piecemeal. Specifying non-paired conversion.
+@end menu
+
+@node Format Conversion Overview
+@subsection Overview
+@noindent
+The function @code{insert-file-contents}:
+
+@itemize
+@item initially, inserts bytes from the file into the buffer;
+@item decodes bytes to characters as appropriate;
+@item processes formats as defined by entries in @code{format-alist}; and
+@item calls functions in @code{after-insert-file-functions}.
+@end itemize
+
+@noindent
+The function @code{write-region}:
+
+@itemize
+@item initially, calls functions in @code{write-region-annotate-functions};
+@item processes formats as defined by entries in @code{format-alist};
+@item encodes characters to bytes as appropriate; and
+@item modifies the file with the bytes.
+@end itemize
+
+ This shows the symmetry of the lowest-level operations; reading and
+writing handle things in opposite order. The rest of this section
+describes the two facilities surrounding the three variables named
+above, as well as some related functions. @ref{Coding Systems}, for
+details on character encoding and decoding.
+
+@node Format Conversion Round-Trip
+@subsection Round-Trip Specification
+
+ The most general of the two facilities is controlled by the variable
+@code{format-alist}, a list of @dfn{file format} specifications, which
+describe textual representations used in files for the data in an Emacs
+buffer. The descriptions for reading and writing are paired, which is
+why we call this ``round-trip'' specification
+(@pxref{Format Conversion Piecemeal}, for non-paired specification).
@defvar format-alist
This list contains one format definition for each defined file format.
-@end defvar
-
-@cindex format definition
Each format definition is a list of this form:
@example
(@var{name} @var{doc-string} @var{regexp} @var{from-fn} @var{to-fn} @var{modify} @var{mode-fn})
@end example
+@end defvar
+@cindex format definition
+@noindent
Here is what the elements in a format definition mean:
@table @var
@@ -2957,6 +3018,91 @@ regular save in the same buffer. This variable is always buffer-local
in all buffers.
@end defvar
+@node Format Conversion Piecemeal
+@subsection Piecemeal Specification
+
+ In contrast to the round-trip specification described in the previous
+subsection (@pxref{Format Conversion Round-Trip}), you can use the variables
+@code{after-insert-file-functions} and @code{write-region-annotate-functions}
+to separately control the respective reading and writing conversions.
+
+ Conversion starts with one representation and produces another
+representation. When there is only one conversion to do, there is no
+conflict about what to start with. However, when there are multiple
+conversions involved, conflict may arise when two conversions need to
+start with the same data.
+
+ This situation is best understood in the context of converting text
+properties during @code{write-region}. For example, the character at
+position 42 in a buffer is @samp{X} with a text property @code{foo}. If
+the conversion for @code{foo} is done by inserting into the buffer, say,
+@samp{FOO:}, then that changes the character at position 42 from
+@samp{X} to @samp{F}. The next conversion will start with the wrong
+data straight away.
+
+ To avoid conflict, cooperative conversions do not modify the buffer,
+but instead specify @dfn{annotations}, a list of elements of the form
+@code{(@var{position} . @var{string})}, sorted in order of increasing
+@var{position}.
+
+ If there is more than one conversion, @code{write-region} merges their
+annotations destructively into one sorted list. Later, when the text
+from the buffer is actually written to the file, it intermixes the
+specified annotations at the corresponding positions. All this takes
+place without modifying the buffer.
+
+@c ??? What about ``overriding'' conversions like those allowed
+@c ??? for `write-region-annotate-functions', below? --ttn
+
+ In contrast, when reading, the annotations intermixed with the text
+are handled immediately. @code{insert-file-contents} sets point to the
+beginning of some text to be converted, then calls the conversion
+functions with the length of that text. These functions should always
+return with point at the beginning of the inserted text. This approach
+makes sense for reading because annotations removed by the first
+converter can't be mistakenly processed by a later converter.
+
+ Each conversion function should scan for the annotations it
+recognizes, remove the annotation, modify the buffer text (to set a text
+property, for example), and return the updated length of the text, as it
+stands after those changes. The value returned by one function becomes
+the argument to the next function.
+
+@defvar write-region-annotate-functions
+A list of functions for @code{write-region} to call. Each function in
+the list is called with two arguments: the start and end of the region
+to be written. These functions should not alter the contents of the
+buffer. Instead, they should return annotations.
+
+@c ??? Following adapted from comment in `build_annotations' (fileio.c).
+@c ??? Perhaps this is intended for internal use only?
+@c ??? Someone who understands this, please reword it. --ttn
+As a special case, if a function returns with a different buffer
+current, Emacs takes it to mean the current buffer contains altered text
+to be output, and discards all previous annotations because they should
+have been dealt with by this function.
+@end defvar
+
+@defvar after-insert-file-functions
+Each function in this list is called by @code{insert-file-contents}
+with one argument, the number of characters inserted, and with point
+at the beginning of the inserted text. Each function should leave
+point unchanged, and return the new character count describing the
+inserted text as modified by the function.
+@c ??? The docstring mentions a handler from `file-name-handler-alist'
+@c "intercepting" `insert-file-contents'. Hmmm. --ttn
+@end defvar
+
+ We invite users to write Lisp programs to store and retrieve text
+properties in files, using these hooks, and thus to experiment with
+various data formats and find good ones. Eventually we hope users
+will produce good, general extensions we can install in Emacs.
+
+ We suggest not trying to handle arbitrary Lisp objects as text property
+names or values---because a program that general is probably difficult
+to write, and slow. Instead, choose a set of possible data types that
+are reasonably flexible, and not too hard to encode.
+
@ignore
arch-tag: 141f74ce-6ae3-40dc-a6c4-ef83fc4ec35c
@end ignore
diff --git a/lispref/frames.texi b/doc/lispref/frames.texi
index 8970a34641a..cd29d44ab76 100644
--- a/lispref/frames.texi
+++ b/doc/lispref/frames.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/frames
+@setfilename ../../info/frames
@node Frames, Positions, Windows, Top
@chapter Frames
@cindex frame
@@ -378,6 +378,14 @@ you don't specify a name, Emacs sets the frame name automatically
If you specify the frame name explicitly when you create the frame, the
name is also used (instead of the name of the Emacs executable) when
looking up X resources for the frame.
+
+@item display-environment-variable
+The value of the @code{DISPLAY} environment variable for the frame. It
+is passed to child processes.
+
+@item term-environment-variable
+The value of the @code{TERM} environment variable for the frame. It
+is passed to child processes.
@end table
@node Position Parameters
diff --git a/lispref/front-cover-1.texi b/doc/lispref/front-cover-1.texi
index 5c9f4351f42..5c9f4351f42 100644
--- a/lispref/front-cover-1.texi
+++ b/doc/lispref/front-cover-1.texi
diff --git a/lispref/functions.texi b/doc/lispref/functions.texi
index 58ef8756de0..601644629e5 100644
--- a/lispref/functions.texi
+++ b/doc/lispref/functions.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/functions
+@setfilename ../../info/functions
@node Functions, Macros, Variables, Top
@chapter Functions
diff --git a/lispref/gpl.texi b/doc/lispref/gpl.texi
index e9f7218ede9..163af4627bb 100644
--- a/lispref/gpl.texi
+++ b/doc/lispref/gpl.texi
@@ -1,5 +1,5 @@
@c -*-texinfo-*-
-@setfilename ../info/gpl
+@setfilename ../../info/gpl
@node GPL, Tips, GNU Free Documentation License, Top
@comment node-name, next, previous, up
diff --git a/lispref/hash.texi b/doc/lispref/hash.texi
index c5b68e26d91..3f0297e28ca 100644
--- a/lispref/hash.texi
+++ b/doc/lispref/hash.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005,
@c 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/hash
+@setfilename ../../info/hash
@node Hash Tables, Symbols, Sequences Arrays Vectors, Top
@chapter Hash Tables
@cindex hash tables
diff --git a/lispref/help.texi b/doc/lispref/help.texi
index dd56aa872b7..c23d6808488 100644
--- a/lispref/help.texi
+++ b/doc/lispref/help.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/help
+@setfilename ../../info/help
@node Documentation, Files, Modes, Top
@chapter Documentation
@cindex documentation strings
@@ -687,6 +687,17 @@ This macro is used in the command @code{help-for-help} which is the
binding of @kbd{C-h C-h}.
@end defmac
+@defmac with-help-window buffer-name body@dots{}
+This macro evaluates the @var{body} forms inserting any output they
+produce into a buffer named @var{buffer-name}. @code{with-help-window}
+behaves like @code{with-output-to-temp-buffer} (@pxref{Temporary
+Displays}) but does more accurately restore the previous window
+configuration when quitting Help. It also generates the message
+informing the user how to quit and scroll the help window by itself.
+Hence you will regret it if you use @code{print-help-return-message} in
+the body of this macro.
+@end defmac
+
@defopt three-step-help
If this variable is non-@code{nil}, commands defined with
@code{make-help-screen} display their @var{help-line} strings in the
diff --git a/lispref/hooks.texi b/doc/lispref/hooks.texi
index 019777f5eed..d0bb2de8675 100644
--- a/lispref/hooks.texi
+++ b/doc/lispref/hooks.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/hooks
+@setfilename ../../info/hooks
@node Standard Hooks, Index, Standard Keymaps, Top
@appendix Standard Hooks
@cindex standard hooks
@@ -48,7 +48,7 @@ or their values are used). The variables whose names end in
@xref{Init File}.
@item after-insert-file-functions
-@xref{Saving Properties}.
+@xref{Format Conversion}.
@item after-make-frame-functions
@xref{Creating Frames}.
@@ -330,7 +330,7 @@ Manual}.
@xref{Saving Buffers}.
@item write-region-annotate-functions
-@xref{Saving Properties}.
+@xref{Format Conversion}.
@end table
@ignore
diff --git a/lispref/index.texi b/doc/lispref/index.texi
index cfa8f25e126..6cdadf94491 100644
--- a/lispref/index.texi
+++ b/doc/lispref/index.texi
@@ -1,5 +1,5 @@
@c -*-texinfo-*-
-@setfilename ../info/index
+@setfilename ../../info/index
@c Indexing guidelines
diff --git a/lispref/internals.texi b/doc/lispref/internals.texi
index 3cd42ed69ff..d0b03fb5305 100644
--- a/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 1999, 2001, 2002, 2003,
@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/internals
+@setfilename ../../info/internals
@node GNU Emacs Internals, Standard Errors, Tips, Top
@comment node-name, next, previous, up
@appendix GNU Emacs Internals
diff --git a/lispref/intro.texi b/doc/lispref/intro.texi
index ed0fd1c0699..c759fba03f9 100644
--- a/lispref/intro.texi
+++ b/doc/lispref/intro.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/intro
+@setfilename ../../info/intro
@node Introduction, Lisp Data Types, Top, Top
@comment node-name, next, previous, up
diff --git a/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index 400a2c38240..bdcc0a5a6d6 100644
--- a/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998, 1999, 2000, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/keymaps
+@setfilename ../../info/keymaps
@node Keymaps, Modes, Command Loop, Top
@chapter Keymaps
@cindex keymap
@@ -655,12 +655,15 @@ events within @code{read-key-sequence}. @xref{Translation Keymaps}.
@xref{Standard Keymaps}, for a list of standard keymaps.
-@defun current-active-maps &optional olp
+@defun current-active-maps &optional olp position
This returns the list of active keymaps that would be used by the
command loop in the current circumstances to look up a key sequence.
Normally it ignores @code{overriding-local-map} and
-@code{overriding-terminal-local-map}, but if @var{olp} is
-non-@code{nil} then it pays attention to them.
+@code{overriding-terminal-local-map}, but if @var{olp} is non-@code{nil}
+then it pays attention to them. @var{position} can optionally be either
+an event position as returned by @code{event-start} or a buffer
+position, and may change the keymaps as described for
+@code{key-binding}.
@end defun
@defun key-binding key &optional accept-defaults no-remap position
@@ -1509,17 +1512,17 @@ specifies a list of keymaps to search in. This argument is ignored if
This section describes keymaps that are used during reading a key
sequence, to translate certain event sequences into others.
@code{read-key-sequence} checks every subsequence of the key sequence
-being read, as it is read, against @code{function-key-map} and then
-against @code{key-translation-map}.
+being read, as it is read, against @code{input-decode-map}, then
+@code{function-key-map}, and then against @code{key-translation-map}.
-@defvar function-key-map
+@defvar input-decode-map
This variable holds a keymap that describes the character sequences sent
by function keys on an ordinary character terminal. This keymap has the
same structure as other keymaps, but is used differently: it specifies
translations to make while reading key sequences, rather than bindings
for key sequences.
-If @code{function-key-map} ``binds'' a key sequence @var{k} to a vector
+If @code{input-decode-map} ``binds'' a key sequence @var{k} to a vector
@var{v}, then when @var{k} appears as a subsequence @emph{anywhere} in a
key sequence, it is replaced with the events in @var{v}.
@@ -1527,50 +1530,48 @@ For example, VT100 terminals send @kbd{@key{ESC} O P} when the
keypad @key{PF1} key is pressed. Therefore, we want Emacs to translate
that sequence of events into the single event @code{pf1}. We accomplish
this by ``binding'' @kbd{@key{ESC} O P} to @code{[pf1]} in
-@code{function-key-map}, when using a VT100.
+@code{input-decode-map}, when using a VT100.
Thus, typing @kbd{C-c @key{PF1}} sends the character sequence @kbd{C-c
@key{ESC} O P}; later the function @code{read-key-sequence} translates
this back into @kbd{C-c @key{PF1}}, which it returns as the vector
@code{[?\C-c pf1]}.
-Entries in @code{function-key-map} are ignored if they conflict with
-bindings made in the minor mode, local, or global keymaps. The intent
-is that the character sequences that function keys send should not have
-command bindings in their own right---but if they do, the ordinary
-bindings take priority.
-
-The value of @code{function-key-map} is usually set up automatically
+The value of @code{input-decode-map} is usually set up automatically
according to the terminal's Terminfo or Termcap entry, but sometimes
those need help from terminal-specific Lisp files. Emacs comes with
terminal-specific files for many common terminals; their main purpose is
-to make entries in @code{function-key-map} beyond those that can be
+to make entries in @code{input-decode-map} beyond those that can be
deduced from Termcap and Terminfo. @xref{Terminal-Specific}.
@end defvar
-@defvar key-translation-map
-This variable is another keymap used just like @code{function-key-map}
-to translate input events into other events. It differs from
-@code{function-key-map} in two ways:
-
-@itemize @bullet
-@item
-@code{key-translation-map} goes to work after @code{function-key-map} is
-finished; it receives the results of translation by
-@code{function-key-map}.
+@defvar function-key-map
+This variable holds a keymap similar to @code{input-decode-map} except
+that it describes key sequences which should be translated to
+alternative interpretations that are usually preferred. It applies
+after @code{input-decode-map} and before @code{key-translation-map}.
-@item
-Non-prefix bindings in @code{key-translation-map} override actual key
-bindings. For example, if @kbd{C-x f} has a non-prefix binding in
-@code{key-translation-map}, that translation takes effect even though
-@kbd{C-x f} also has a key binding in the global map.
-@end itemize
+Entries in @code{function-key-map} are ignored if they conflict with
+bindings made in the minor mode, local, or global keymaps. I.e.
+the remapping only applies if the original key sequence would
+otherwise not have any binding.
+@end defvar
-Note however that actual key bindings can have an effect on
-@code{key-translation-map}, even though they are overridden by it.
-Indeed, actual key bindings override @code{function-key-map} and thus
-may alter the key sequence that @code{key-translation-map} receives.
-Clearly, it is better to avoid this type of situation.
+@defvar key-translation-map
+This variable is another keymap used just like @code{input-decode-map}
+to translate input events into other events. It differs from
+@code{input-decode-map} in that it goes to work after
+@code{function-key-map} is finished rather than before; it receives
+the results of translation by @code{function-key-map}.
+
+Just like @code{input-decode-map}, but unlike @code{function-key-map},
+this keymap is applied regardless of whether the input key-sequence
+has a normal binding. Note however that actual key bindings can have
+an effect on @code{key-translation-map}, even though they are
+overridden by it. Indeed, actual key bindings override
+@code{function-key-map} and thus may alter the key sequence that
+@code{key-translation-map} receives. Clearly, it is better to avoid
+this type of situation.
The intent of @code{key-translation-map} is for users to map one
character set to another, including ordinary characters normally bound
@@ -1578,7 +1579,8 @@ to @code{self-insert-command}.
@end defvar
@cindex key translation function
-You can use @code{function-key-map} or @code{key-translation-map} for
+You can use @code{input-decode-map}, @code{function-key-map}, or
+@code{key-translation-map} for
more than simple aliases, by using a function, instead of a key
sequence, as the ``translation'' of a key. Then this function is called
to compute the translation of that key.
diff --git a/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi
index 1677058d7ca..1677058d7ca 100644
--- a/lispref/lay-flat.texi
+++ b/doc/lispref/lay-flat.texi
diff --git a/lispref/lists.texi b/doc/lispref/lists.texi
index ffe4df2413d..5c8b552991b 100644
--- a/lispref/lists.texi
+++ b/doc/lispref/lists.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/lists
+@setfilename ../../info/lists
@node Lists, Sequences Arrays Vectors, Strings and Characters, Top
@chapter Lists
@cindex lists
diff --git a/lispref/loading.texi b/doc/lispref/loading.texi
index 34f1cff8900..cbea262cc45 100644
--- a/lispref/loading.texi
+++ b/doc/lispref/loading.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/loading
+@setfilename ../../info/loading
@node Loading, Byte Compilation, Customization, Top
@chapter Loading
@cindex loading
diff --git a/lispref/locals.texi b/doc/lispref/locals.texi
index 4edbc2a815f..5248e7b1497 100644
--- a/lispref/locals.texi
+++ b/doc/lispref/locals.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1999, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/locals
+@setfilename ../../info/locals
@node Standard Buffer-Local Variables, Standard Keymaps, Standard Errors, Top
@appendix Buffer-Local Variables
@c The title "Standard Buffer-Local Variables" is too long for
diff --git a/lispref/macros.texi b/doc/lispref/macros.texi
index b62c8b99d74..152b7b652b6 100644
--- a/lispref/macros.texi
+++ b/doc/lispref/macros.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/macros
+@setfilename ../../info/macros
@node Macros, Customization, Functions, Top
@chapter Macros
@cindex macros
@@ -365,7 +365,7 @@ whitespace between the @samp{`}, @samp{,} or @samp{,@@} and the
following expression.
This syntax is still accepted, for compatibility with old Emacs
-versions, but support for it will soon disappear.
+versions, but support for it will be removed in the future.
@node Problems with Macros
@section Common Problems Using Macros
diff --git a/lispref/makefile.w32-in b/doc/lispref/makefile.w32-in
index 7e35339d17f..720f91c10a3 100644
--- a/lispref/makefile.w32-in
+++ b/doc/lispref/makefile.w32-in
@@ -22,8 +22,8 @@
# Standard configure variables.
srcdir = .
-infodir = $(srcdir)/../info
-usermanualdir = $(srcdir)/../man
+infodir = $(srcdir)/../../info
+usermanualdir = $(srcdir)/../emacs
# Redefine `TEX' if `tex' does not invoke plain TeX. For example:
# TEX=platex
@@ -33,7 +33,7 @@ MAKEINFO = makeinfo --force
# The environment variable and its value to add $(srcdir) to the path
# searched for TeX input files.
-texinputdir = $(srcdir)\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" /C
+texinputdir = $(srcdir)\..\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" /C
# The name of the manual:
VERSION=2.9
diff --git a/lispref/maps.texi b/doc/lispref/maps.texi
index 724091970c3..2e370f91238 100644
--- a/lispref/maps.texi
+++ b/doc/lispref/maps.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1999, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/maps
+@setfilename ../../info/maps
@node Standard Keymaps, Standard Hooks, Standard Buffer-Local Variables, Top
@appendix Standard Keymaps
@cindex standard keymaps
@@ -113,7 +113,7 @@ The sparse keymap that displays the Special Props submenu of the Text
Properties menu.
@item function-key-map
-The keymap for translating keypad and function keys.@*
+The keymap for translating key sequences to preferred alternatives.@*
If there are none, then it contains an empty sparse keymap.
@xref{Translation Keymaps}.
@@ -151,6 +151,11 @@ A sparse keymap used by the @kbd{e} command of Info.
@vindex Info-mode-map
A sparse keymap containing Info commands.
+@item input-decode-map
+The keymap for translating keypad and function keys.@*
+If there are none, then it contains an empty sparse keymap.
+@xref{Translation Keymaps}.
+
@item isearch-mode-map
@vindex isearch-mode-map
A keymap that defines the characters you can type within incremental
diff --git a/lispref/markers.texi b/doc/lispref/markers.texi
index 519b8a1316a..6efc0b893d1 100644
--- a/lispref/markers.texi
+++ b/doc/lispref/markers.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/markers
+@setfilename ../../info/markers
@node Markers, Text, Positions, Top
@chapter Markers
@cindex markers
diff --git a/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 98901df87f8..f85ca96db9f 100644
--- a/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/minibuf
+@setfilename ../../info/minibuf
@node Minibuffers, Command Loop, Read and Print, Top
@chapter Minibuffers
@cindex arguments, reading
@@ -128,18 +128,19 @@ However, if @var{read} is non-@code{nil}, @code{read-from-minibuffer}
reads the text and returns the resulting Lisp object, unevaluated.
(@xref{Input Functions}, for information about reading.)
-The argument @var{default} specifies a default value to make available
-through the history commands. It should be a string, or @code{nil}.
-If non-@code{nil}, the user can access it using
-@code{next-history-element}, usually bound in the minibuffer to
-@kbd{M-n}. If @var{read} is non-@code{nil}, then @var{default} is
-also used as the input to @code{read}, if the user enters empty input.
-(If @var{read} is non-@code{nil} and @var{default} is @code{nil}, empty
+The argument @var{default} specifies default values to make available
+through the history commands. It should be a string, a list of
+strings, or @code{nil}. The string or strings become the minibuffer's
+``future history,'' available to the user with @kbd{M-n}.
+
+If @var{read} is non-@code{nil}, then @var{default} is also used as
+the input to @code{read}, if the user enters empty input. (If
+@var{read} is non-@code{nil} and @var{default} is @code{nil}, empty
input results in an @code{end-of-file} error.) However, in the usual
case (where @var{read} is @code{nil}), @code{read-from-minibuffer}
ignores @var{default} when the user enters empty input and returns an
-empty string, @code{""}. In this respect, it is different from all
-the other minibuffer input functions in this chapter.
+empty string, @code{""}. In this respect, it differs from all the
+other minibuffer input functions in this chapter.
If @var{keymap} is non-@code{nil}, that keymap is the local keymap to
use in the minibuffer. If @var{keymap} is omitted or @code{nil}, the
@@ -176,10 +177,14 @@ The keymap used is @code{minibuffer-local-map}.
The optional argument @var{default} is used as in
@code{read-from-minibuffer}, except that, if non-@code{nil}, it also
specifies a default value to return if the user enters null input. As
-in @code{read-from-minibuffer} it should be a string, or @code{nil},
-which is equivalent to an empty string.
-
-This function is a simplified interface to the
+in @code{read-from-minibuffer} it should be a string, a list of
+strings, or @code{nil} which is equivalent to an empty string. When
+@var{default} is a string, that string is the default value. When it
+is a list of strings, the first string is the default value. (All
+these strings are available to the user in the ``future minibuffer
+history.'')
+
+This function works by calling the
@code{read-from-minibuffer} function:
@smallexample
@@ -190,7 +195,7 @@ This function is a simplified interface to the
(read-from-minibuffer @var{prompt} @var{initial} nil nil
@var{history} @var{default} @var{inherit})))
(if (and (equal value "") @var{default})
- @var{default}
+ (if (consp @var{default}) (car @var{default}) @var{default})
value))
@end group
@end smallexample
@@ -839,10 +844,11 @@ an element of @var{collection}. If @var{require-match} is neither
input already in the buffer matches an element of @var{collection}.
However, empty input is always permitted, regardless of the value of
-@var{require-match}; in that case, @code{completing-read} returns
-@var{default}, or @code{""}, if @var{default} is @code{nil}. The
-value of @var{default} (if non-@code{nil}) is also available to the
-user through the history commands.
+@var{require-match}; in that case, @code{completing-read} returns the
+first element of @var{default}, if it is a list; @code{""}, if
+@var{default} is @code{nil}; or @var{default}. The string or strings
+in @var{default} are also available to the user through the history
+commands.
The function @code{completing-read} uses
@code{minibuffer-local-completion-map} as the keymap if
@@ -1073,8 +1079,10 @@ specification. @xref{Defining Commands}.
This function reads the name of a buffer and returns it as a string.
The argument @var{default} is the default name to use, the value to
return if the user exits with an empty minibuffer. If non-@code{nil},
-it should be a string or a buffer. It is mentioned in the prompt, but
-is not inserted in the minibuffer as initial input.
+it should be a string, a list of strings, or a buffer. If it is
+a list, the default value is the first element of this list. It is
+mentioned in the prompt, but is not inserted in the minibuffer as
+initial input.
The argument @var{prompt} should be a string ending with a colon and a
space. If @var{default} is non-@code{nil}, the function inserts it in
@@ -1130,11 +1138,12 @@ which @code{commandp} returns @code{t}, and a command name is a symbol
for which @code{commandp} returns @code{t}. @xref{Interactive Call}.
The argument @var{default} specifies what to return if the user enters
-null input. It can be a symbol or a string; if it is a string,
-@code{read-command} interns it before returning it. If @var{default} is
-@code{nil}, that means no default has been specified; then if the user
-enters null input, the return value is @code{(intern "")}, that is, a
-symbol whose name is an empty string.
+null input. It can be a symbol, a string or a list of strings. If it
+is a string, @code{read-command} interns it before returning it.
+If it is a list, @code{read-command} returns the first element of this list.
+If @var{default} is @code{nil}, that means no default has been
+specified; then if the user enters null input, the return value is
+@code{(intern "")}, that is, a symbol whose name is an empty string.
@example
(read-command "Command name? ")
@@ -1176,11 +1185,13 @@ complete in the set of extant Lisp symbols, and it uses the
This function reads the name of a user variable and returns it as a
symbol.
-The argument @var{default} specifies what to return if the user enters
-null input. It can be a symbol or a string; if it is a string,
-@code{read-variable} interns it before returning it. If @var{default}
-is @code{nil}, that means no default has been specified; then if the
-user enters null input, the return value is @code{(intern "")}.
+The argument @var{default} specifies the default value to return if
+the user enters null input. It can be a symbol, a string, or a list
+of strings. If it is a string, @code{read-variable} interns it to
+make the default value. If it is a list, @code{read-variable} interns
+the first element. If @var{default} is @code{nil}, that means no
+default has been specified; then if the user enters null input, the
+return value is @code{(intern "")}.
@example
@group
diff --git a/lispref/mkinstalldirs b/doc/lispref/mkinstalldirs
index f945dbf2bce..f945dbf2bce 100755
--- a/lispref/mkinstalldirs
+++ b/doc/lispref/mkinstalldirs
diff --git a/lispref/modes.texi b/doc/lispref/modes.texi
index 3d60756a901..efaccc2556d 100644
--- a/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/modes
+@setfilename ../../info/modes
@node Modes, Documentation, Keymaps, Top
@chapter Major and Minor Modes
@cindex mode
diff --git a/lispref/nonascii.texi b/doc/lispref/nonascii.texi
index dd0f15c817e..7c504aef2cd 100644
--- a/lispref/nonascii.texi
+++ b/doc/lispref/nonascii.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/characters
+@setfilename ../../info/characters
@node Non-ASCII Characters, Searching and Matching, Text, Top
@chapter Non-@acronym{ASCII} Characters
@cindex multibyte characters
@@ -1031,6 +1031,9 @@ argument, a list of all arguments passed to
@code{find-operation-coding-system}. It must return a coding system
or a cons cell containing two coding systems. This value has the same
meaning as described above.
+
+If @var{coding} (or what returned by the above function) is
+@code{undecided}, the normal code-detection is performed.
@end defvar
@defvar process-coding-system-alist
diff --git a/lispref/numbers.texi b/doc/lispref/numbers.texi
index 4d7f3e7578a..91945967f22 100644
--- a/lispref/numbers.texi
+++ b/doc/lispref/numbers.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/numbers
+@setfilename ../../info/numbers
@node Numbers, Strings and Characters, Lisp Data Types, Top
@chapter Numbers
@cindex integers
diff --git a/lispref/objects.texi b/doc/lispref/objects.texi
index e75cde70202..0da05488858 100644
--- a/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/objects
+@setfilename ../../info/objects
@node Lisp Data Types, Numbers, Introduction, Top
@chapter Lisp Data Types
@cindex object
@@ -1871,7 +1871,7 @@ This function returns a symbol naming the primitive type of
@cindex equality
Here we describe two functions that test for equality between any two
-objects. Other functions test equality between objects of specific
+objects. Other functions test equality of contents between objects of specific
types, e.g., strings. For these predicates, see the appropriate chapter
describing the data type.
@@ -1905,6 +1905,13 @@ by the same change in the contents of the other.
@end group
@group
+(eq "" "")
+ @result{} t
+;; @r{This exception occurs because Emacs Lisp}
+;; @r{makes just one multibyte empty string, to save space.}
+@end group
+
+@group
(eq '(1 (2 (3))) '(1 (2 (3))))
@result{} nil
@end group
diff --git a/lispref/os.texi b/doc/lispref/os.texi
index 06ae49e5236..bff759215da 100644
--- a/lispref/os.texi
+++ b/doc/lispref/os.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/os
+@setfilename ../../info/os
@node System Interface, Antinews, Display, Top
@chapter Operating System Interface
@@ -258,6 +258,11 @@ actual init file loaded is a compiled file, such as @file{.emacs.elc},
the value refers to the corresponding source file.
@end defvar
+@defvar user-emacs-directory
+This variable holds the name of the @file{.emacs.d} directory. It is
+ordinarily @file{~/.emacs.d}, but differs on some platforms.
+@end defvar
+
@node Terminal-Specific
@subsection Terminal-Specific Initialization
@cindex terminal-specific initialization
@@ -274,7 +279,7 @@ trying the @samp{.elc} and @samp{.el} suffixes.
@cindex Termcap
The usual function of a terminal-specific library is to enable
special keys to send sequences that Emacs can recognize. It may also
-need to set or add to @code{function-key-map} if the Termcap or
+need to set or add to @code{input-decode-map} if the Termcap or
Terminfo entry does not specify all the terminal's function keys.
@xref{Terminal Input}.
diff --git a/lispref/positions.texi b/doc/lispref/positions.texi
index 939b3f75fc1..3e1d79acad8 100644
--- a/lispref/positions.texi
+++ b/doc/lispref/positions.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/positions
+@setfilename ../../info/positions
@node Positions, Markers, Frames, Top
@chapter Positions
@cindex position (in buffer)
diff --git a/lispref/processes.texi b/doc/lispref/processes.texi
index 40bec387e0c..28e41a09973 100644
--- a/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/processes
+@setfilename ../../info/processes
@node Processes, Display, Abbrevs, Top
@chapter Processes
@cindex child process
@@ -432,6 +432,12 @@ arguments to add at the end of @var{command}. The other arguments
are handled as in @code{call-process}.
@end defun
+@defun process-file-shell-command command &optional infile destination display &rest args
+This function is like @code{call-process-shell-command}, but uses
+@code{process-file} internally. Depending on @code{default-directory},
+@var{command} can be executed also on remote hosts.
+@end defun
+
@defun shell-command-to-string command
This function executes @var{command} (a string) as a shell command,
then returns the command's output as a string.
@@ -495,6 +501,29 @@ Process my-process finished
@end smallexample
@end defun
+@defun start-file-process name buffer-or-name program &rest args
+Like @code{start-process}, this function starts a new asynchronous
+subprocess running @var{program} in it, and returns its process
+object---when @code{default-directory} is not a magic file name.
+
+If @code{default-directory} is magic, the function invokes its file
+handler instead. This handler ought to run @var{program}, perhaps on
+the local host, perhaps on a remote host that corresponds to
+@code{default-directory}. In the latter case, the local part of
+@code{default-directory} becomes the working directory of the process.
+
+This function does not try to invoke file name handlers for
+@var{program} or for the @var{program-args}.
+
+Depending on the implementation of the file handler, it might not be
+possible to apply @code{process-filter} or @code{process-sentinel} to
+the resulting process object (@pxref{Filter Functions}, @pxref{Sentinels}).
+
+Some file handlers may not support @code{start-file-process} (for
+example @code{ange-ftp-hook-function}). In such cases, the function
+does nothing and returns @code{nil}.
+@end defun
+
@defun start-process-shell-command name buffer-or-name command &rest command-args
This function is like @code{start-process} except that it uses a shell
to execute the specified command. The argument @var{command} is a shell
@@ -511,6 +540,12 @@ characters do @emph{not} have their special shell meanings. @xref{Shell
Arguments}.
@end defun
+@defun start-file-process-shell-command name buffer-or-name command &rest command-args
+This function is like @code{start-process-shell-command}, but uses
+@code{start-file-process} internally. By this, @var{command} can be
+executed also on remote hosts, depending on @code{default-directory}.
+@end defun
+
@defvar process-connection-type
@cindex pipes
@cindex @acronym{PTY}s
@@ -1309,7 +1344,7 @@ latter specifies one measured in milliseconds. The two time periods
thus specified are added together, and @code{accept-process-output}
returns after that much time, whether or not there has been any
subprocess output.
-
+
The argument @var{millisec} is semi-obsolete nowadays because
@var{seconds} can be a floating point number to specify waiting a
fractional number of seconds. If @var{seconds} is 0, the function
diff --git a/lispref/searching.texi b/doc/lispref/searching.texi
index 10e8c672962..559f93ef8e3 100644
--- a/lispref/searching.texi
+++ b/doc/lispref/searching.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/searching
+@setfilename ../../info/searching
@node Searching and Matching, Syntax Tables, Non-ASCII Characters, Top
@chapter Searching and Matching
@cindex searching
@@ -650,6 +650,16 @@ Shy groups are particularly useful for mechanically-constructed regular
expressions because they can be added automatically without altering the
numbering of any ordinary, non-shy groups.
+@item \(?@var{num}: @dots{} \)
+is the @dfn{explicitly numbered group} construct. Normal groups get
+their number implicitly, based on their position, which can be
+inconvenient. This construct allows you to force a particular group
+number. There is no particular restriction on the numbering,
+e.g.@: you can have several groups with the same number in which case
+the last one to match (i.e.@: the rightmost match) will win.
+Implicitly numbered groups always get the smallest integer larger than
+the one of any previous group.
+
@item \@var{digit}
matches the same text that matched the @var{digit}th occurrence of a
grouping (@samp{\( @dots{} \)}) construct.
@@ -1250,6 +1260,16 @@ calling @code{replace-match} with 1 as @var{subexp} means to replace
just the text that matched @samp{\(ba*r\)}.
@end defun
+@defun match-substitute-replacement replacement &optional fixedcase literal string subexp
+This function returns the text that would be inserted into the buffer
+by @code{replace-match}, but without modifying the buffer. It is
+useful if you want to present the user with actual replacement result,
+with constructs like @samp{\@var{n}} or @samp{\&} substituted with
+matched groups. Arguments @var{replacement} and optional
+@var{fixedcase}, @var{literal}, @var{string} and @var{subexp} have the
+same meaning as for @code{replace-match}.
+@end defun
+
@node Simple Match Data
@subsection Simple Match Data Access
diff --git a/lispref/sequences.texi b/doc/lispref/sequences.texi
index 7e66549412b..8b25350d869 100644
--- a/lispref/sequences.texi
+++ b/doc/lispref/sequences.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/sequences
+@setfilename ../../info/sequences
@node Sequences Arrays Vectors, Hash Tables, Lists, Top
@chapter Sequences, Arrays, and Vectors
@cindex sequence
diff --git a/lispref/spellfile b/doc/lispref/spellfile
index b373d00bebf..b373d00bebf 100644
--- a/lispref/spellfile
+++ b/doc/lispref/spellfile
diff --git a/lispref/streams.texi b/doc/lispref/streams.texi
index 7356c119a1e..ada6376305f 100644
--- a/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998, 1999, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/streams
+@setfilename ../../info/streams
@node Read and Print, Minibuffers, Debugging, Top
@comment node-name, next, previous, up
@chapter Reading and Printing Lisp Objects
diff --git a/lispref/strings.texi b/doc/lispref/strings.texi
index af5a2fa14d3..f119b3ab84b 100644
--- a/lispref/strings.texi
+++ b/doc/lispref/strings.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/strings
+@setfilename ../../info/strings
@node Strings and Characters, Lists, Numbers, Top
@comment node-name, next, previous, up
@chapter Strings and Characters
@@ -259,7 +259,8 @@ returns an empty string.
@noindent
The @code{concat} function always constructs a new string that is
-not @code{eq} to any existing string.
+not @code{eq} to any existing string, except when the result is empty
+(since empty strings are canonicalized to save space).
In Emacs versions before 21, when an argument was an integer (not a
sequence of integers), it was converted to a string of digits making up
diff --git a/lispref/symbols.texi b/doc/lispref/symbols.texi
index 7234a75bd59..08f7d7f1ca1 100644
--- a/lispref/symbols.texi
+++ b/doc/lispref/symbols.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/symbols
+@setfilename ../../info/symbols
@node Symbols, Evaluation, Hash Tables, Top
@chapter Symbols
@cindex symbol
diff --git a/lispref/syntax.texi b/doc/lispref/syntax.texi
index 340f74632bd..83f6856c65b 100644
--- a/lispref/syntax.texi
+++ b/doc/lispref/syntax.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/syntax
+@setfilename ../../info/syntax
@node Syntax Tables, Abbrevs, Searching and Matching, Top
@chapter Syntax Tables
@cindex parsing buffer text
diff --git a/lispref/text.texi b/doc/lispref/text.texi
index 906e51c513b..5b935bc6e23 100644
--- a/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/text
+@setfilename ../../info/text
@node Text, Non-ASCII Characters, Markers, Top
@chapter Text
@cindex text
@@ -1432,11 +1432,14 @@ as @code{full}.
When you call the filling functions interactively, using a prefix
argument implies the value @code{full} for @var{justify}.
-@deffn Command fill-paragraph justify
+@deffn Command fill-paragraph &optional justify region
This command fills the paragraph at or after point. If
@var{justify} is non-@code{nil}, each line is justified as well.
It uses the ordinary paragraph motion commands to find paragraph
boundaries. @xref{Paragraphs,,, emacs, The GNU Emacs Manual}.
+Interactively, when @var{region} is non-@code{nil} in Transient Mark
+mode and the mark is active, this command calls @code{fill-region}
+on the active region.
@end deffn
@deffn Command fill-region start end &optional justify nosqueeze to-eop
@@ -2574,8 +2577,6 @@ along with the characters; this includes such diverse functions as
* Format Properties:: Properties for representing formatting of text.
* Sticky Properties:: How inserted text gets properties from
neighboring text.
-* Saving Properties:: Saving text properties in files, and reading
- them back.
* Lazy Properties:: Computing text properties in a lazy fashion
only when text is examined.
* Clickable Text:: Using text properties to make regions of text
@@ -3258,25 +3259,10 @@ Manual}) provides an example.
@item composition
@kindex composition @r{(text property)}
This text property is used to display a sequence of characters as a
-single glyph composed from components. For instance, in Thai a base
-consonant is composed with the following combining vowel as a single
-glyph. The value should be a character or a sequence (vector, list,
-or string) of integers.
+single glyph composed from components. But the value of the property
+itself is completely internal to Emacs and should not be manipulated
+directly by, for instance, @code{put-text-property}.
-@itemize @bullet
-@item
-If it is a character, it means to display that character instead of
-the text in the region.
-
-@item
-If it is a string, it means to display that string's contents instead
-of the text in the region.
-
-@item
-If it is a vector or list, the elements are characters interleaved
-with internal codes specifying how to compose the following character
-with the previous one.
-@end itemize
@end table
@node Format Properties
@@ -3392,75 +3378,6 @@ adjoining text.
@xref{Insertion}, for the ordinary insertion functions which do not
inherit.
-@node Saving Properties
-@subsection Saving Text Properties in Files
-@cindex text properties in files
-@cindex saving text properties
-
- You can save text properties in files (along with the text itself),
-and restore the same text properties when visiting or inserting the
-files, using these two hooks:
-
-@defvar write-region-annotate-functions
-This variable's value is a list of functions for @code{write-region} to
-run to encode text properties in some fashion as annotations to the text
-being written in the file. @xref{Writing to Files}.
-
-Each function in the list is called with two arguments: the start and
-end of the region to be written. These functions should not alter the
-contents of the buffer. Instead, they should return lists indicating
-annotations to write in the file in addition to the text in the
-buffer.
-
-Each function should return a list of elements of the form
-@code{(@var{position} . @var{string})}, where @var{position} is an
-integer specifying the relative position within the text to be written,
-and @var{string} is the annotation to add there.
-
-Each list returned by one of these functions must be already sorted in
-increasing order by @var{position}. If there is more than one function,
-@code{write-region} merges the lists destructively into one sorted list.
-
-When @code{write-region} actually writes the text from the buffer to the
-file, it intermixes the specified annotations at the corresponding
-positions. All this takes place without modifying the buffer.
-@end defvar
-
-@defvar after-insert-file-functions
-This variable holds a list of functions for @code{insert-file-contents}
-to call after inserting a file's contents. These functions should scan
-the inserted text for annotations, and convert them to the text
-properties they stand for.
-
-Each function receives one argument, the length of the inserted text;
-point indicates the start of that text. The function should scan that
-text for annotations, delete them, and create the text properties that
-the annotations specify. The function should return the updated length
-of the inserted text, as it stands after those changes. The value
-returned by one function becomes the argument to the next function.
-
-These functions should always return with point at the beginning of
-the inserted text.
-
-The intended use of @code{after-insert-file-functions} is for converting
-some sort of textual annotations into actual text properties. But other
-uses may be possible.
-@end defvar
-
-We invite users to write Lisp programs to store and retrieve text
-properties in files, using these hooks, and thus to experiment with
-various data formats and find good ones. Eventually we hope users
-will produce good, general extensions we can install in Emacs.
-
-We suggest not trying to handle arbitrary Lisp objects as text property
-names or values---because a program that general is probably difficult
-to write, and slow. Instead, choose a set of possible data types that
-are reasonably flexible, and not too hard to encode.
-
-@xref{Format Conversion}, for a related feature.
-
-@c ??? In next edition, merge this info Format Conversion.
-
@node Lazy Properties
@subsection Lazy Computation of Text Properties
diff --git a/lispref/tindex.pl b/doc/lispref/tindex.pl
index 89bbe5f5f6f..89bbe5f5f6f 100755
--- a/lispref/tindex.pl
+++ b/doc/lispref/tindex.pl
diff --git a/lispref/tips.texi b/doc/lispref/tips.texi
index f3070f4659b..f16749a214d 100644
--- a/lispref/tips.texi
+++ b/doc/lispref/tips.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998, 1999, 2001, 2002,
@c 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/tips
+@setfilename ../../info/tips
@node Tips, GNU Emacs Internals, GPL, Top
@appendix Tips and Conventions
@cindex tips for writing Lisp
diff --git a/lispref/two-volume-cross-refs.txt b/doc/lispref/two-volume-cross-refs.txt
index 6e40920cf66..6e40920cf66 100644
--- a/lispref/two-volume-cross-refs.txt
+++ b/doc/lispref/two-volume-cross-refs.txt
diff --git a/lispref/two-volume.make b/doc/lispref/two-volume.make
index b2550576825..b2550576825 100644
--- a/lispref/two-volume.make
+++ b/doc/lispref/two-volume.make
diff --git a/lispref/two.el b/doc/lispref/two.el
index baade844463..baade844463 100644
--- a/lispref/two.el
+++ b/doc/lispref/two.el
diff --git a/lispref/variables.texi b/doc/lispref/variables.texi
index b90492bf6be..0ca217dbe47 100644
--- a/lispref/variables.texi
+++ b/doc/lispref/variables.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000,
@c 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/variables
+@setfilename ../../info/variables
@node Variables, Functions, Control Structures, Top
@chapter Variables
@cindex variable
diff --git a/lispref/vol1.texi b/doc/lispref/vol1.texi
index 5784ed0b19b..5784ed0b19b 100644
--- a/lispref/vol1.texi
+++ b/doc/lispref/vol1.texi
diff --git a/lispref/vol2.texi b/doc/lispref/vol2.texi
index c27f004e16f..c27f004e16f 100644
--- a/lispref/vol2.texi
+++ b/doc/lispref/vol2.texi
diff --git a/lispref/windows.texi b/doc/lispref/windows.texi
index c677919598d..9a49401485e 100644
--- a/lispref/windows.texi
+++ b/doc/lispref/windows.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
@c 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
-@setfilename ../info/windows
+@setfilename ../../info/windows
@node Windows, Frames, Buffers, Top
@chapter Windows
diff --git a/doc/man/ChangeLog b/doc/man/ChangeLog
new file mode 100644
index 00000000000..4b21c0834e2
--- /dev/null
+++ b/doc/man/ChangeLog
@@ -0,0 +1,35 @@
+2007-11-15 Francesco Potort,Al(B <pot@gnu.org>
+
+ * etags.1: Note that you can use "-" for stdout with -o.
+
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * ctags.1, emacs.1, emacsclient.1, etags.1: Move from etc/ to
+ doc/man/.
+
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; fill-column: 79
+;; add-log-time-zone-rule: t
+;; End:
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+
+ 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 3, 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.
+
+;; arch-tag: 2bd1112e-157f-4884-b0ca-0fb1057972d7
diff --git a/etc/ctags.1 b/doc/man/ctags.1
index 9a6505b020e..9a6505b020e 100644
--- a/etc/ctags.1
+++ b/doc/man/ctags.1
diff --git a/etc/emacs.1 b/doc/man/emacs.1
index 87a382272c5..87a382272c5 100644
--- a/etc/emacs.1
+++ b/doc/man/emacs.1
diff --git a/etc/emacsclient.1 b/doc/man/emacsclient.1
index 8852372dd75..8852372dd75 100644
--- a/etc/emacsclient.1
+++ b/doc/man/emacsclient.1
diff --git a/etc/etags.1 b/doc/man/etags.1
index 04b67f389f4..30b114eaa22 100644
--- a/etc/etags.1
+++ b/doc/man/etags.1
@@ -59,9 +59,9 @@ table (defaults: \fBTAGS\fP for \fBetags\fP, \fBtags\fP for
\fBctags\fP) in the current working directory.
Files specified with relative file names will be recorded in the tag
table with file names relative to the directory where the tag table
-resides. If the tag table is in /dev, however, the file names are made
-relative to the working directory. Files specified with absolute file
-names will be recorded
+resides. If the tag table is in /dev or is the standard output,
+however, the file names are made relative to the working directory.
+Files specified with absolute file names will be recorded
with absolute file names. Files generated from a source file\-\-like
a C file generated from a source Cweb file\-\-will be recorded with
the name of the source file.
@@ -149,8 +149,9 @@ May be used (only once) in place of a file name on the command line.
as belonging to the file \fBFILE\fP.
.TP
\fB\-o\fP \fItagfile\fP, \fB\-\-output=\fItagfile\fP
-Explicit name of file for tag table; overrides default \fBTAGS\fP or
-\fBtags\fP. (But ignored with \fB\-v\fP or \fB\-x\fP.)
+Explicit name of file for tag table; for \fBetags\fP only, a file name
+of \- means standard output; overrides default \fBTAGS\fP or \fBtags\fP.
+(But ignored with \fB\-v\fP or \fB\-x\fP.)
.TP
\fB\-r\fP \fIregexp\fP, \fB\-\-regex=\fIregexp\fP
diff --git a/doc/misc/.gitignore b/doc/misc/.gitignore
new file mode 100644
index 00000000000..3ff56b474dd
--- /dev/null
+++ b/doc/misc/.gitignore
@@ -0,0 +1,23 @@
+*.aux
+*.cp
+*.cps
+*.dvi
+*.fn
+*.fns
+*.ky
+*.kys
+*.log
+*.op
+*.ops
+*.pdf
+*.pg
+*.pgs
+*.ps
+*.tmp
+*.toc
+*.tp
+*.tps
+*.vr
+*.vrs
+Makefile
+makefile
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
new file mode 100644
index 00000000000..d1f74ca756c
--- /dev/null
+++ b/doc/misc/ChangeLog
@@ -0,0 +1,4502 @@
+2007-11-18 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Filename completion): Simplify explanation of
+ double-slash behaviour. Explain directory contents flushing.
+
+2007-11-16 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (TeX and LaTeX Language Modes): Put in
+ missing braces.
+
+2007-11-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * cc-mode.texi (Electric Keys, Custom Macros):
+ * tramp.texi (Filename completion): Fix typos.
+
+2007-11-15 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Basic commands): Mention the menu.
+
+2007-11-12 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Connection caching): Tramp flushes connection
+ properties when remote operating system has been changed.
+
+2007-11-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-news.texi: Fix spelling.
+ `message-insert-formatted-citation-line', not
+ `message-insert-formated-citation-line'.
+
+2007-11-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Overview): Mention also the PuTTY integration under
+ Win32. Remove paragraphs about Tramp's experimental status.
+ (Frequently Asked Questions): Add code example for highlighting the
+ mode line.
+
+2007-11-03 Michael Olson <mwolson@gnu.org>
+
+ * remember.texi: Change mentions of remember-buffer to
+ remember-finalize throughout.
+
+2007-10-30 Michael Olson <mwolson@gnu.org>
+
+ * remember.texi (Copying): Remove.
+ (Mailbox): Update with non-BBDB instructions.
+ (Diary, Org): Add.
+ (Bibliography, Planner Page): Remove.
+
+2007-10-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (INFO_TARGETS): Add remember.
+ (DVI_TARGETS): Add remember.dvi.
+ ($(infodir)/remember): New rule.
+ (clean): Add remember*.
+
+2007-10-30 Michael Olson <mwolson@gnu.org>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add remember.
+ ($(infodir)/remember): New rule that builds the Remember Manual.
+
+ * remember.texi: New file containing the Remember Mode Manual.
+ Shuffle chapters around after initial import.
+ (Function Reference): Split Keystrokes into separate chapter.
+ (Keystrokes): Document C-c C-k.
+ (Introduction): Fix typographical issue with "---".
+
+2007-10-29 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Connection caching): Host names must be different
+ when tunneling.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi, gnus-faq.texi, message.texi: Bump version to
+ Gnus v5.13.
+
+2007-10-28 Miles Bader <miles@gnu.org>
+
+ * gnus-news.texi, gnus-coding.texi, sasl.texi: New files.
+
+2007-10-28 Emanuele Giaquinta <e.giaquinta@glauco.it> (tiny change)
+
+ * gnus-faq.texi ([5.12]): Remove reference to discontinued service.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Sorting the Summary Buffer): Remove
+ gnus-article-sort-by-date-reverse.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Non-ASCII Group Names): New node.
+ (Misc Group Stuff): Move gnus-group-name-charset-method-alist and
+ gnus-group-name-charset-group-alist to Non-ASCII Group Names node.
+
+2007-10-28 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * gnus.texi (Mail Source Specifiers, IMAP): Add a notice on the need to
+ clean the output of the program `imap-shell-program'.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (IMAP): Mention nnimap-logout-timeout.
+
+2007-10-28 Tassilo Horn <tassilo@member.fsf.org>
+
+ * gnus.texi (Sticky Articles): Documentation for sticky article
+ buffers.
+
+2007-10-28 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * gnus.texi (RSS): Document nnrss-ignore-article-fields.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Various Various): Mention gnus-add-timestamp-to-message.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Archived Messages): Document
+ gnus-update-message-archive-method.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Limiting): Document gnus-summary-limit-to-address.
+
+2007-10-28 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * gnus.texi (Group Maneuvering): Document
+ `gnus-summary-next-group-on-exit'.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Really Various Summary Commands): Mention
+ gnus-auto-select-on-ephemeral-exit.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi, message.texi: Bump version number.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Group Line Specification, Misc Group Stuff)
+ (Server Commands): Parenthesize @pxref{Mail Spool}.
+
+2007-10-28 Didier Verna <didier@xemacs.org>
+
+ New user option: message-signature-directory.
+ * message.texi (Insertion Variables): Document it.
+ * gnus.texi (Posting Styles): Ditto.
+
+2007-10-28 Didier Verna <didier@xemacs.org>
+
+ * gnus.texi (Group Line Specification):
+ * gnus.texi (Misc Group Stuff):
+ * gnus.texi (Server Commands): Document the group compaction feature.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi ([5.2]): Adjust for message-fill-column.
+
+ * message.texi (Various Message Variables): Add message-fill-column.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi: Untabify.
+
+2007-10-28 Didier Verna <didier@xemacs.org>
+
+ * gnus.texi (Group Parameters): Document the posting-style merging
+ process in topic-mode.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Scoring On Other Headers): Add gnus-inhibit-slow-scoring.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (Mail Spool): Fix typo.
+ Update copyright.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Limiting): Add gnus-summary-limit-to-singletons.
+
+2007-10-28 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.texi (Summary Generation Commands):
+ Add gnus-summary-insert-ticked-articles.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi
+ (SpamAssassin back end): Rename spam-spamassassin-path to
+ spam-spamassassin-program.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Mail and Post): Add gnus-message-highlight-citation.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Limiting): Add gnus-summary-limit-to-headers.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.texi (Mail Headers): Document `opportunistic'.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-mime.texi (Encoding Customization): Explain how to set
+ mm-coding-system-priorities per hierarchy.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Washing Mail): Add nnmail-ignore-broken-references and
+ nnmail-broken-references-mailers instead of nnmail-fix-eudora-headers.
+
+2007-10-28 Didier Verna <didier@xemacs.org>
+
+ * message.texi (Wide Reply): Update documentation of
+ message-dont-reply-to-names (now allowing a list of regexps).
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Spam Package Introduction): Fix spam menu and links.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (SpamAssassin back end): Fix typo.
+
+ * sieve.texi (Examples): Fix grammar.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Searching for Articles): Document M-S and M-R.
+ (Limiting): Document / b.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Thread Commands): T M-^.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.texi (Mail Aliases): Document ecomplete.
+ (Mail Aliases): Fix typo.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Face): Restore xref to gnus-face-properties-alist;
+ fix typo.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (Mail Spool): Grammar fix.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Mail Spool): nnml-use-compressed-files can be a
+ string.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Group Parameters): Fix description.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Gmane Spam Reporting): Fix
+ spam-report-gmane-use-article-number. Add
+ spam-report-user-mail-address.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Non-MIME): x-gnus-verbatim -> x-verbatim.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Group Parameters): Add simplified sorting example based on
+ example for `Sorting the Summary Buffer' from Jari Aalto
+ <jari.aalto@cante.net>.
+ (Example Methods): Add example for an indirect connection.
+
+2007-10-28 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus.texi (nntp-open-via-telnet-and-telnet): Fixed grammar.
+ (Agent Parameters): Updated parameter names to match code.
+ (Group Agent Commands): Corrected 'gnus-agent-fetch-series' as
+ 'gnus-agent-summary-fetch-series'.
+ (Agent and flags): New section providing a generalized discussion
+ of flag handling.
+ (Agent and IMAP): Removed flag discussion.
+ (Agent Variables): Added 'gnus-agent-synchronize-flags'
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (Exiting the Summary Buffer): Add new function
+ `gnus-summary-catchup-and-goto-prev-group', bound to `Z p'.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Conformity): Fix typo.
+ (Customizing Articles): Document `first'.
+
+2007-10-28 Jari Aalto <jari.aalto@cante.net>
+
+ * gnus.texi (Sorting the Summary Buffer):
+ Add `gnus-thread-sort-by-date-reverse'. Add example
+ host to different sorting in NNTP and RSS groups.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.texi (Insertion): Describe prefix for
+ message-mark-inserted-region and message-mark-insert-file.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-mime.texi (Non-MIME): Add Slrn-style verbatim marks and
+ LaTeX documents. Describe "text/x-gnus-verbatim".
+
+2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Blacklists and Whitelists)
+ (Blacklists and Whitelists, BBDB Whitelists)
+ (Gmane Spam Reporting, Bogofilter, spam-stat spam filtering)
+ (spam-stat spam filtering, SpamOracle)
+ (Extending the Spam ELisp package): Removed extra quote symbol for
+ clarity.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (MIME Commands): Add gnus-article-save-part-and-strip,
+ gnus-article-delete-part and gnus-article-replace-part.
+ (Using MIME): Add gnus-mime-replace-part.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (Mail Spool): Mention that `nnml-use-compressed-files'
+ requires `auto-compression-mode' to be enabled. Add new nnml
+ variable `nnml-compressed-files-size-threshold'.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Sorting the Summary Buffer): Added
+ gnus-thread-sort-by-recipient.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * message.texi (Insertion Variables): Mention new variable
+ `message-yank-empty-prefix'. Change `message-yank-cited-prefix'
+ documentation accordingly.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (To From Newsgroups): Mention new variables
+ `gnus-summary-to-prefix' and `gnus-summary-newsgroup-prefix'.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Using MIME): gnus-mime-copy-part supports the charset
+ stuff; gnus-mime-inline-part does the automatic decompression.
+
+2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Spam ELisp Package Configuration Examples):
+ "training.ham" should be "training.spam"
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Mail Variables): Fix the default value for
+ message-send-mail-function.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Optional Back End Functions): nntp-request-update-info
+ always returns nil exceptionally.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Article Washing): Add libidn URL. Suggested by
+ Michael Cook <michael@waxrat.com>.
+
+2007-10-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Topic Commands): Fix next/previous.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Article Washing): Mention `W i'.
+
+2007-10-28 Jochen K,A|(Bpper <jochen@fhi-berlin.mpg.de>
+
+ * gnus.texi (Group Parameters): Slight extension of sieve
+ parameter description.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Score Decays): `gnus-decay-scores' can be a regexp
+ matching score files as well.
+ (Picons): Describe `gnus-picon-style'.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * message.texi (Message Headers): Mention that headers are hidden
+ using narrowing, and how to expose them.
+ Update copyright.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnusref.tex: Mention `gnus-summary-limit-to-recipient' and
+ `gnus-summary-sort-by-recipient'.
+
+2007-10-28 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (NNTP marks): New node.
+ (NNTP): Move NNTP marks variables to the new node.
+
+2007-10-28 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.texi, gnus-news.texi, pgg.texi, sasl.texi: backend -> back
+ end.
+
+ * gnus.texi (MIME Commands, Hashcash): Markup fix.
+
+2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi: replaced @file{spam.el} with @code{spam.el}
+ everywhere for consistency.
+ (Filtering Spam Using The Spam ELisp Package): admonish again.
+ (Spam ELisp Package Sequence of Events): this is Gnus, say so.
+ Say "regular expression" instead of "regex." Admonish. Pick
+ other words to sound better (s/so/thus/).
+ (Spam ELisp Package Filtering of Incoming Mail): mention
+ statistical filters. Remove old TODO.
+ (Spam ELisp Package Sorting and Score Display in Summary Buffer):
+ new section on sorting and displaying the spam score
+ (BBDB Whitelists): mention spam-use-BBDB-exclusive is not a
+ backend but an alias to spam-use-BBDB
+ (Extending the Spam ELisp package): rewrite the example using the
+ new backend functionality.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (NNTP): Mention nntp-marks-is-evil and
+ nntp-marks-directory, from Romain Francoise
+ <romain@orebokech.com>.
+
+2007-10-28 Magnus Henoch <mange@freemail.hu>
+
+ * gnus.texi (Hashcash): New default value of
+ hashcash-default-payment.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Hashcash): Fix URL. Add pref to spam section.
+ (Anti-spam Hashcash Payments): No need to load hashcash.el now.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Adaptive Scoring): Added gnus-adaptive-pretty-print.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (documentencoding): Add, to avoid warnings.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * message.texi (Mail Headers): Add.
+
+ * gnus.texi (Hashcash): Fix.
+
+2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Hashcash): changed location of library, also mention
+ that payments can be verified and fix the name of the
+ hashcash-path variable
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi
+ (Article Display): Add `gnus-picon-style'.
+
+2007-10-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (SpamAssassin backend): Add it to the detailmenu.
+
+2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Blacklists and Whitelists, BBDB Whitelists)
+ (Bogofilter, spam-stat spam filtering, SpamOracle): old incorrect
+ warning about ham processors in spam groups removed
+
+2007-10-28 Teodor Zlatanov <tzz@lifelogs.com>
+ From Hubert Chan <hubert@uhoreg.ca>
+
+ * gnus.texi (SpamAssassin backend): added new node about SpamAssassin
+
+2007-10-28 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.texi (Spam ELisp Package Sequence of Events): Index.
+ (Mailing List): Typo.
+ (Customizing Articles): Add gnus-treat-ansi-sequences.
+ (Article Washing): Index.
+
+ * message.texi: Use m-dash consistently.
+
+2007-10-28 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.texi (GroupLens): Remove.
+
+2007-10-28 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus.texi (Outgoing Messages, Agent Variables): Add
+ gnus-agent-queue-mail and gnus-agent-prompt-send-queue.
+ Suggested by Gaute Strokkenes <gs234@srcf.ucam.org>
+
+2007-10-28 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.texi (Limiting): Add gnus-summary-limit-to-replied.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Article Washing): Add `gnus-article-treat-ansi-sequences'.
+
+ * gnus.texi (No Gnus): New node. Includes `gnus-news.texi'.
+
+2007-10-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Top): Add SASL.
+
+2007-10-27 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Formulas, Composition Basics): Lower the
+ precedence of negation.
+
+2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses.texi (The Basics): Mention how to create a new spreadsheet.
+ Mention the new three-letter column identifiers.
+ (More on cell printing): Calculate-cell and truncate-cell are now `c'
+ and `t' rather than `C-c C-c' and `C-c C-t'. Mention the stupid error
+ message when using `c' on an empty default with default printer.
+ (Buffer-local variables in spreadsheets): `symbolic-formulas' was
+ renamed to `ses--symbolic-formulas' some time ago.
+
+2007-10-25 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Default Simplifications, Making Selections)
+ (Customizing Calc): Clarify associativity of multiplication.
+
+2007-10-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Traces and Profiles): Simplify loop over
+ `trace-function-background'.
+
+2007-10-22 Juri Linkov <juri@jurta.org>
+
+ * dired-x.texi (Shell Command Guessing): Default values are now
+ available by typing M-n instead of M-p.
+
+2007-10-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Cleanup remote connections): New section.
+ (Password caching): Remove `tramp-clear-passwd'.
+ It's not a command anymore.
+ (Bug Reports): Add `tramp-bug' to function index.
+ (Function Index, Variable Index): New nodes.
+ (Remote shell setup): Describe `tramp-password-prompt-regexp'.
+
+ * trampver.texi: Update release number.
+
+2007-10-20 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (History and Acknowledgements): Turn comment
+ about integer size into past tense.
+ (Time Zones): Remove pointer to Calc author's address.
+ (Trigonometric and Hyperbolic Functions): Mention cotangent
+ and hyperbolic cotangent. Fix typo.
+
+2007-10-10 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.1.11.
+
+ * trampver.texi: Update release number.
+
+2007-10-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (External packages): New section.
+
+2007-09-29 Juri Linkov <juri@jurta.org>
+
+ * info.texi (Help-Int): Document `L' (`Info-history').
+
+2007-09-26 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Change links to webpage and maintained email.
+ (Remember): Promote to Chapter, significant changes.
+ (Fast access to TODO states): New section.
+ (Faces for TODO keywords): New section.
+ (Export options): Example for #+DATE.
+ (Progress logging): Section moved.
+
+2007-09-26 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (HTML): Mention binding of S-mouse-2 to
+ browse-url-at-mouse.
+
+2007-09-20 Eduard Wiebe <usenet@pusto.de> (tiny change)
+
+ * flymake.texi (Customizable variables): Face names don't end in -face.
+ Fix flymake-err-line-patterns template.
+ (Example -- Configuring a tool called directly): Fix init-function.
+ (Highlighting erroneous lines): Face names don't end in -face.
+
+2007-09-18 Exal de Jesus Garcia Carrillo <exal@gmx.de> (tiny change)
+
+ * erc.texi (Special-Features): Fix small typo.
+
+2007-09-14 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Filename Syntax): Provide links to "Inline methods"
+ and "External transfer methods".
+
+2007-09-13 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Predefined Units): Add some history.
+
+2007-09-08 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Copying): New section included from gpl.texi.
+ This matches the look of the upstream ERC manual.
+
+2007-09-07 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (History and Acknowledgements): Adjust the "thanks".
+ (Random Numbers): Clarify the distribution of `random'.
+
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * Move manual sources from man/ to subdirectories of doc/.
+ Split into the Emacs manual in emacs/, and other manuals in misc/.
+ Change all setfilename commands to use ../../info.
+ * Makefile.in: Move the parts of the old man/Makefile.in that do not
+ refer to the Emacs manual here.
+ (infodir): New variable.
+ (INFO_TARGETS, info): Use infodir. Also used by all info targets.
+ (cc-mode.texi, faq.texi): Update references to source file locations.
+ * makefile.w32-in: Move the parts of the old man/makefile.w32-in that
+ do not refer to the Emacs manual here.
+ (infodir, MULTI_INSTALL_INFO, ENVADD): Go up one more level.
+
+ * Makefile.in: Add `basename' versions of all info targets, for
+ convenience when rebuilding just one manual.
+ (../etc/GNU): Delete obsolete target.
+ (.SUFFIXES): Use $(TEXI2DVI) rather than texi2dvi.
+ (mostlyclean): Add *.op, *.ops. Move *.aux *.cps *.fns *.kys *.pgs
+ *.vrs *.toc here...
+ (maintainer-clean): ...from here.
+
+ * makefile.w32-in (../etc/GNU): Delete obsolete target.
+
+2007-09-01 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Date Conversions): Clarify definition of
+ Julian day numbering.
+ (Date Forms): Clarify definition of Julian day numbering;
+ add some history.
+
+2007-08-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 5.07.
+
+2007-08-24 IRIE Tetsuya <irie@t.email.ne.jp> (tiny change)
+
+ * message.texi (MIME): Replace mml-attach with mml-attach-file.
+
+2007-08-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Adding hyperlink types): New section.
+ (Embedded LaTeX): Chapter updated because of LaTeX export.
+ (LaTeX export): New section.
+ (Using links out): New section.
+
+2007-08-22 Glenn Morris <rgm@gnu.org>
+
+ * faq.texi (Learning how to do something): Refcards now in
+ etc/refcards/ directory.
+
+2007-08-22 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Remote Programs): Persistency file must be cleared when
+ changing `tramp-remote-path'.
+ (Filename Syntax): Don't use @var{} constructs inside the @trampfn
+ macro.
+
+2007-08-17 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi: Move contents to beginning of file.
+ (Algebraic Entry): Fix the formatting of an example.
+
+2007-08-15 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Basic Operations on Units): Mention exact versus
+ inexact conversions.
+
+2007-08-14 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Basic Operations on Units): Mention default
+ values for new units.
+ (Quick Calculator Mode): Mention that binary format will
+ be displayed.
+
+2007-08-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Selecting a Group): Mention gnus-maximum-newsgroup.
+
+2007-08-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (NNTP): Mention nntp-xref-number-is-evil.
+
+2007-08-08 Glenn Morris <rgm@gnu.org>
+
+ * gnus.texi, sieve.texi: Replace `iff'.
+
+2007-08-03 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Basic Graphics): Mention the graphing of error
+ forms.
+ (Graphics Options): Mention how `g s' handles error forms.
+ (Curve Fitting): Mention plotting the curves.
+ (Standard Nonlinear Models): Add additional models.
+ (Curve Fitting Details): Mention the Levenberg-Marquardt method.
+ (Linear Fits): Correct result.
+
+2007-08-01 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi (Mailing Lists and Bug Reports): Correct "-no-site-file"
+ to "--no-site-file".
+
+2007-07-29 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Frequently Asked Questions): Point to mode line
+ extension in Emacs 23.1.
+
+ * trampver.texi: Update release number.
+
+2007-07-27 Glenn Morris <rgm@gnu.org>
+
+ * calc.texi (Copying): Include license text from gpl.texi, rather than
+ in-line.
+
+2007-07-25 Glenn Morris <rgm@gnu.org>
+
+ * calc.texi (Copying): Replace license with GPLv3.
+
+ * Relicense all FSF files to GPLv3 or later.
+
+2007-07-22 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.1.10.
+
+ * tramp.texi (trampfn): Expand macro implementation in order to handle
+ empty arguments.
+ (trampfnmhl, trampfnuhl, trampfnhl): Remove macros. Replace all
+ occurencies by trampfn.
+ (Frequently Asked Questions): Extend example code for host
+ identification in the modeline. Add bbdb to approaches shortening Tramp
+ file names to be typed.
+
+ * trampver.texi: Update release number.
+
+2007-07-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi: Move @setfilename ../info/tramp up, outside the header
+ section. Reported by <poti@potis.org>.
+ (Remote processes): Arguments of the program to be debugged are taken
+ literally.
+ (Frequently Asked Questions): Simplify recentf example.
+
+2007-07-14 Karl Berry <karl@gnu.org>
+
+ * info.texi (@copying): New Back-Cover Text.
+
+ * info.texi (Quitting Info): Move to proper place in source.
+ (Reported by Benno Schulenberg.)
+
+2007-07-13 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (../info/emacs-mime): Use --enable-encoding.
+
+ * makefile.w32-in ($(infodir)/emacs-mime): Ditto.
+
+ * emacs-mime.texi: Add @documentencoding directive.
+
+2007-07-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * tramp.texi (Remote processes): Add an anchor to the subsection
+ "Running a debugger on a remote host".
+
+2007-07-12 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Remote processes): Don't call it "experimental" any
+ longer. Add subsection about running a debugger on a remote host.
+
+2007-07-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Properties and columns): Chapter rewritten.
+
+2007-07-08 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi:
+ * trampver.texi: Migrate to Tramp 2.1.
+
+2007-07-02 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Properties): New chapter.
+
+2007-07-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi ([3.2]): Fix locating of environment variables in the
+ Control Panel.
+
+ * gnus.texi (Misc Article): Add index entry for
+ gnus-single-article-buffer.
+
+2007-06-27 Andreas Seltenreich <andreas@gate450.dyndns.org>
+
+ * gnus.texi (Starting Up): Fix typo.
+
+2007-06-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Asynchronous Fetching): Fix typo.
+
+2007-06-20 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi:Change ifinfo to ifnottex (as appropriate) throughout.
+ (About This Manual): Remove redundant information.
+ (Getting Started): Mention author.
+ (Basic Arithmetic, Customizing Calc): Make description of the
+ variable `calc-multiplication-has-precedence' match its new effect.
+
+2007-06-19 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Basic Arithmetic, Customizing Calc): Mention
+ the variable `calc-multiplication-has-precedence'.
+
+2007-06-19 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Tag): Section swapped with node Timestamps.
+ (Formula syntax for Lisp): Document new `L' flag.
+
+2007-06-06 Andreas Seltenreich <andreas@gate450.dyndns.org>
+
+ * gnus.texi (Misc Group Stuff, Summary Buffer)
+ (Server Commands, Article Keymap): Fix typo. s/function/command/.
+
+2007-06-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * cc-mode.texi (Comment Commands, Getting Started, Style Variables):
+ * gnus.texi (Article Buttons, Mail Source Customization)
+ (Sending or Not Sending, Customizing NNDiary):
+ * message.texi (Message Headers):
+ * mh-e.texi (HTML): Fix typos.
+
+2007-06-07 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.56.
+
+ * tramp.texi (Frequently Asked Questions): Improve ~/.zshrc
+ settings. Reported by Ted Zlatanov <tzz@lifelogs.com>.
+
+2007-06-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * Version 22.1 released.
+
+2007-05-26 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Modules): Fix references to completion modules.
+
+2007-05-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Running NNDiary): Use ~/.gnus.el instead of gnusrc.
+
+2007-05-09 Didier Verna <didier@xemacs.org>
+
+ * gnus.texi (Email Based Diary): New. Proper documentation for the
+ nndiary back end and the gnus-diary library.
+
+2007-05-03 Karl Berry <karl@gnu.org>
+
+ * .cvsignore (*.pdf): New entry.
+
+ * texinfo.tex: Update from current version for better pdf generation.
+
+2007-04-30 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Article Highlighting): Clarify gnus-cite-parse-max-size.
+
+2007-04-28 Glenn Morris <rgm@gnu.org>
+
+ * faq.texi (New in Emacs 22): Restore mention of python.el pending
+ consideration of legal status.
+
+2007-04-27 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * idlwave.texi: Minor updates for IDLWAVE 6.1.
+
+2007-04-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * faq.texi (New in Emacs 22): python.el removed.
+
+2007-04-23 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc.texi (Reporting bugs): Update maintainer's address.
+
+2007-04-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * faq.texi (New in Emacs 22): Rename "tumme" to "image-dired".
+
+2007-04-15 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Title page): Remove the date.
+ (Basic Arithmetic): Emphasize that / binds less strongly than *.
+ (The Standard Calc Interface): Change trail title.
+ (Floats): Mention that when non-decimal floats are entered, only
+ approximations are stored.
+ (Copying): Move to the appendices.
+ (GNU Free Documentation License): Add as an appendix.
+
+2007-04-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * ada-mode.texi, autotype.texi, cc-mode.texi, cl.texi:
+ * dired-x.texi, ebrowse.texi, ediff.texi:
+ * emacs-mime.texi, erc.texi, eshell.texi:
+ * eudc.texi, flymake.texi, forms.texi, gnus.texi:
+ * idlwave.texi, message.texi, newsticker.texi, org.texi:
+ * pcl-cvs.texi, pgg.texi, rcirc.texi, reftex.texi, sc.texi:
+ * ses.texi, sieve.texi, smtpmail.texi, speedbar.texi:
+ * tramp.texi, url.texi, vip.texi, viper.texi, widget.texi:
+ * woman.texi: Include GFDL.
+
+ * doclicense.texi: Remove node heading, so that it can be included by
+ other files.
+
+ * dired-x.texi: Relicence under GFDL. Remove date from title page.
+
+ * calc.texi (Algebraic Tutorial): Emphasize that / binds less strongly
+ than *.
+
+2007-04-14 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Formula syntax for Calc): Emphasize the operator precedence
+ in Calc.
+
+2007-04-09 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (New in Emacs 22): Mention improvements to the Windows and
+ Mac OS ports. Make it clear that mouse-1 complements and doesn't
+ replace mouse-2.
+
+2007-04-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * woman.texi (Word at point, Interface Options): woman-topic-at-point
+ renamed to woman-use-topic-at-point. Document new behavior.
+
+2007-04-08 Richard Stallman <rms@gnu.org>
+
+ * url.texi: Fix some indexing.
+ (Disk Caching): Drop discussion of old/other Emacs versions.
+
+2007-04-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * url.texi (Disk Caching): Say Emacs 21 "and later".
+
+ * cc-mode.texi (Font Locking Preliminaries): Link to Emacs manual node
+ on Font locking which now mentions JIT lock.
+
+2007-04-01 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi: Update for the ERC 5.2 release.
+
+2007-03-31 David Kastrup <dak@gnu.org>
+
+ * woman.texi (Topic, Interface Options): Explain changes semantics of
+ woman-manpath in order to consider MANPATH_MAP entries.
+
+2007-03-31 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-mime.texi (Non-MIME): Postscript -> PostScript.
+
+2007-03-26 Richard Stallman <rms@gnu.org>
+
+ * pgg.texi (Caching passphrase): Clean up previous change.
+
+2007-03-25 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * gnus.texi (Setting Process Marks): Fix typo.
+
+2007-03-25 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (New in Emacs 22): Reorganize using an itemized list for
+ readability, and include various fixes by Daniel Brockman, Nick Roberts
+ and Dieter Wilhelm.
+
+2007-03-24 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * gnus.texi (Splitting Mail): Reword "splitting"-as-adj to be -as-noun.
+
+ * gnus.texi (Mail Source Specifiers): Fix typo.
+
+2007-03-22 Ralf Angeli <angeli@caeruleus.net>
+
+ * reftex.texi (Imprint): Update maintainer information.
+
+2007-03-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Message Buffers): Update documentation for
+ message-generate-new-buffers.
+
+2007-03-15 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg.texi (Caching passphrase): Describe pgg-passphrase-coding-system.
+
+2007-03-21 Glenn Morris <rgm@gnu.org>
+
+ * eshell.texi (Known problems): Emacs 22 comes with eshell 2.4.2.
+
+2007-03-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * eshell.texi (Known problems): Emacs 21 -> 22.
+
+ * cc-mode.texi (Performance Issues): Update note about 21.3 to 22.1.
+
+2007-03-18 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Time Zones): Mention that the DST rules changed in 2007.
+
+2007-03-12 Glenn Morris <rgm@gnu.org>
+
+ * calc.texi (Time Zones): Switch to new North America DST rule.
+
+ * calc.texi: Replace "daylight savings" with "daylight
+ saving" in text throughout.
+
+2007-03-11 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.texi (Mail and Post): Update documentation for gnus-user-agent.
+ The variable now uses a list of symbols instead of just a symbol.
+ Reported by Christoph Conrad <christoph.conrad@gmx.de>.
+
+2007-03-06 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (New in Emacs 22): Don't say "now" too much. Add MH-E to
+ new packages, and mention Gnus update.
+
+2007-02-27 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (NNTP): Mention nntp-never-echoes-commands and
+ nntp-open-connection-functions-never-echo-commands.
+
+2007-02-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * pgg.texi (Caching passphrase): Document gpg-agent usage, gpg-agent
+ problems on the console, and security risk in not using gpg-agent.
+
+2007-02-25 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (The spreadsheet): Renamed from "Table calculations".
+ Completely reorganized and rewritten.
+ (CamelCase links): Section removed.
+ (Repeating items): New section.
+ (Tracking TODO state changes): New section.
+ (Agenda views): Chapter reorganized and rewritten.
+ (HTML export): Section rewritten.
+ (Tables in arbitrary syntax): New section.
+ (Summary): Better feature summary.
+ (Activation): Document problem with cut-and-paste of Lisp code
+ from PDF files.
+ (Visibility cycling): Document indirect buffer use.
+ (Structure editing): Document sorting.
+ (Remember): Section rewritten.
+ (Time stamps): Better description of time stamp types.
+ (Tag searches): Document regular expression search for tags.
+ (Stuck projects): New section.
+ (In-buffer settings): New keywords.
+ (History and Acknowledgments): Updated description.
+
+2007-02-24 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi (Movement Commands): Insert two missing command names.
+ (Getting Started): Slight wording correction (use conditional).
+
+2007-02-22 Kim F. Storm <storm@cua.dk>
+
+ * widget.texi (User Interface, Basic Types): Document need to put some
+ text before the %v escape in :format string in editable-field widget.
+
+2007-02-18 Romain Francoise <romain@orebokech.com>
+
+ * pcl-cvs.texi (Miscellaneous commands): q runs `cvs-bury-buffer', not
+ `cvs-mode-quit'.
+
+2007-02-10 Markus Triska <markus.triska@gmx.at>
+
+ * widget.texi (Programming Example): Put constant strings in :format.
+
+2007-02-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * faq.texi (Fullscreen mode on MS-Windows): New node.
+
+2007-02-04 David Kastrup <dak@gnu.org>
+
+ * faq.texi (AUCTeX): Update version number. Should probably be done
+ for other packages as well.
+
+2007-01-28 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.texi (Batching Agents): Fix example. Reported by Tassilo Horn
+ <tassilo@member.fsf.org>.
+
+2007-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * msdog.texi (ls in Lisp): Document ls-lisp-format-time-list and
+ ls-lisp-use-localized-time-format.
+
+2007-01-20 Markus Triska <markus.triska@gmx.at>
+
+ * flymake.texi (Flymake mode): find-file-hook instead of ...-hooks.
+
+2007-01-13 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Modules): Mention capab-identify module.
+
+2007-01-05 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Getting Started): Update for /RECONNECT command.
+
+2007-01-04 Richard Stallman <rms@gnu.org>
+
+ * ebrowse.texi: Change C-c b to C-c C-m.
+
+2007-01-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Customizing Articles): Use index entries for gnus-treat-*
+ variables only in info to avoid redundant entries in the printed
+ manual.
+
+2007-01-02 Daiki Ueno <ueno@unixuser.org>
+
+ * message.texi (Using PGP/MIME): Document gpg-agent usage.
+
+2007-01-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.texi (Security): Split into sub-nodes.
+
+2007-01-01 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi ("Limitations and Known Bugs"): Document problems with
+ eval-after-load in Emacs <=21 and a workaround. Document that
+ trigraphs are not supported.
+
+2007-01-01 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi ("Filling and Breaking"): Amend the doc for
+ c-context-line-break. When invoked within a string, preserve
+ whitespace. Add a backslash only when also in a macro.
+
+2007-01-01 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi ("Choosing a Style"): Mention c-file-style.
+
+2007-01-01 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi ("Movement Commands", "Sample .emacs File"): C-M-[ae]
+ are now bound by default to c-\(beginning\|end\)-of-defun by default.
+
+2007-01-01 Alan Mackenzie <acm@muc.de>
+
+ * cc-mode.texi ("Other Commands"): Move c-set-style (C-c .) here from
+ "Choosing a Style".
+
+ * cc-mode.texi ("Styles"): Add @dfn{style}.
+
+2006-12-30 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.55.
+
+ * trampver.texi: Update release number.
+
+2006-12-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Customizing Articles): Add index entries for all
+ gnus-treat-* variables.
+
+2006-12-29 Jouni K. Sepp,Ad(Bnen <jks@iki.fi>
+
+ * gnus.texi (IMAP): Fix incorrect explanation of
+ nnimap-search-uids-not-since-is-evil in documentation for
+ nnimap-expunge-search-string.
+
+2006-12-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (ifile spam filtering): Rename spam-ifile-database-path to
+ spam-ifile-database.
+
+2006-12-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Spam Package Configuration Examples): Don't encourage to
+ rebind C-s.
+
+2006-12-26 Jouni K. Sepp,Ad(Bnen <jks@iki.fi>
+
+ * gnus.texi (Group Parameters, Group Maintenance, Topic Commands)
+ (Mail Group Commands, Expiring Mail, IMAP): Add index entries for
+ "expiring mail".
+ (IMAP): Document nnimap-search-uids-not-since-is-evil and
+ nnimap-nov-is-evil.
+
+2006-12-25 Kevin Ryde <user42@zip.com.au>
+
+ * cl.texi (Sorting Sequences): In sort*, add a little cautionary note
+ about the key procedure being used heavily.
+
+2006-12-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * pgg.texi (Caching passphrase): Default for pgg-gpg-use-agent changed
+ to t.
+ (Prerequisites): Add explanation about gpg-agent.
+
+2006-12-22 Kevin Ryde <user42@zip.com.au>
+
+ * cl.texi (Sorting Sequences): Typo in sort*, example showed plain
+ "sort" instead of "sort*".
+
+2006-12-19 Richard Stallman <rms@gnu.org>
+
+ * calc.texi (History and Acknowledgements): Recognize that Emacs
+ now does have floating point.
+
+2006-12-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (External transfer methods): Describe new method `scpc'.
+
+2006-12-17 Sascha Wilde <wilde@sha-bang.de>
+
+ * pgg.texi: Added short note on gpg-agent to the introduction.
+
+2006-12-13 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Hiding Headers): Document that `long-to' and `many-to'
+ also applies to Cc.
+
+2006-12-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (X-Face): Clarify. Say which programs are required
+ on Windows.
+
+2006-12-08 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Modules): Remove documentation for list module.
+
+2006-12-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * faq.texi (^M in the shell buffer): Ditto.
+
+2006-11-20 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi: Call this the 5.2 stable pre-release of ERC.
+
+2006-11-17 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Fix typos.
+ (Agenda commands): Document `C-k'.
+
+2006-11-16 Eli Zaretskii <eliz@gnu.org>
+
+ * url.texi (http/https): Fix a typo in the HTTP URL.
+
+2006-11-14 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * ada-mode.texi: Total rewrite.
+
+2006-11-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Minor typo fixes.
+
+2006-11-13 Bill Wohler <wohler@newt.com>
+
+ Release MH-E manual version 8.0.3.
+
+ * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
+ release 8.0.3.
+
+ * mh-e.texi (Incorporating Mail): Use output of "mhparam Path"
+ to set MAILDIR.
+ (Reading Mail): Document the customization of read-mail-command
+ for MH-E.
+ (Viewing Attachments): Document mm-discouraged-alternatives.
+ (Tool Bar): Fix Texinfo for mh-xemacs-use-tool-bar-flag.
+ (Junk): Add more information about the settings of mh-junk-background
+ in a program. Add /usr/bin/mh to PATH in examples.
+
+2006-11-12 Richard Stallman <rms@gnu.org>
+
+ * woman.texi: Update author address but say he no longer maintains it.
+
+2006-11-10 Carsten Dominik <carsten.dominik@gmail.com>
+
+ * org.texi (ARCHIVE tag): Document C-TAB for forcing cycling of
+ archived trees.
+ (Checkboxes): Section moved to chapter 5, and extended.
+ (The date/time prompt): New section.
+ (Link abbreviations): New section.
+ (Presentation and sorting): New section.
+ (Custom agenda views): Section completely rewritten.
+ (Summary): Compare with Planner.
+ (Feedback): More info about creating backtraces.
+ (Plain lists): Modified example.
+ (Breaking down tasks): New section.
+ (Custom time format): New section.
+ (Time stamps): Document inactive timestamps.
+ (Setting tags): More details about fast tag selection.
+ (Block agenda): New section.
+ (Custom agenda views): Section rewritten.
+ (Block agenda): New section.
+
+2006-11-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Configuration): scp is the default method.
+ (Default Method): Use ssh as example for another method.
+
+2006-10-27 Richard Stallman <rms@gnu.org>
+
+ * woman.texi: Downcase nroff/troff/roff.
+ (Installation): Chapter deleted. Some xrefs deleted.
+ (Background): woman doesn't advise man ;-).
+
+2006-10-26 Roberto Rodr,Am(Bguez <lanubeblanca@googlemail.com> (tiny change)
+
+ * ada-mode.texi (Project files, Identifier completion)
+ (Automatic Casing, Debugging, Using non-standard file names)
+ (Working Remotely): Fix typos.
+
+2006-10-20 Masatake YAMATO <jet@gyve.org>
+
+ * cc-mode.texi (Sample .emacs File): Added missing `)' in
+ sample code `my-c-initialization-hook'.
+
+2006-10-19 Stuart D. Herring <herring@lanl.gov>
+
+ * widget.texi: Fix typos.
+
+2006-10-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Frequently Asked Questions): Remove questions marked with
+ "???". There have been no complaints for years, so the information
+ must be appropriate.
+
+2006-10-16 Richard Stallman <rms@gnu.org>
+
+ * widget.texi: Use @var instead of capitalization.
+ Clarify many widget type descriptions.
+
+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> (tiny change)
+
+ * widget.texi: Fix typos.
+
+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-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Foreign Groups): Say where change of editing commands are
+ stored. Add reference to `gnus-parameters'.
+
+2006-09-15 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi, mh-e.texi (GNU GENERAL PUBLIC LICENSE):
+ Change "Library Public License" to "Lesser Public License"
+ throughout. Use "yyyy" to represent year.
+
+2006-09-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Setting tags): Typo fix.
+
+2006-09-14 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Oort Gnus): Add @xref for `mm-fill-flowed'.
+
+2006-09-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * reftex.texi (Citations Outside LaTeX): Simplify lisp example.
+
+2006-09-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * faq.texi (Escape sequences in shell output): EMACS is now set
+ to Emacs's absolute file name, not to "t".
+ (^M in the shell buffer): Likewise.
+ * misc.texi (Interactive Shell): Likewise.
+
+2006-09-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Mail Source Specifiers): Mention problem of duplicate
+ mails with pop3-leave-mail-on-server. Fix wording.
+ (Limiting): Improve gnus-summary-limit-to-articles.
+ (X-Face): Fix typo.
+
+2006-09-11 Simon Josefsson <jas@extundo.com>
+
+ * smtpmail.texi (Authentication): Explain TLS and SSL better, based on
+ suggested by Phillip Lord <phillip.lord@newcastle.ac.uk>.
+
+2006-09-06 Simon Josefsson <jas@extundo.com>
+
+ * smtpmail.texi (Authentication): Mention SSL.
+
+2006-09-01 Eli Zaretskii <eliz@gnu.org>
+
+ * 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.
+
+2006-08-29 Michael Albinus <michael.albinus@gmx.de>
+
+ 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>.
+
+2006-08-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Installation, Activation): Split from Installation and
+ Activation.
+ (Clocking work time): Documented new features.
+
+2006-08-13 Alex Schroeder <alex@gnu.org>
+
+ * rcirc.texi (Configuration): Use correct variable in rcirc-authinfo
+ example.
+
+2006-08-12 Eli Zaretskii <eliz@gnu.org>
+
+ * faq.texi (How to add fonts): New node.
+
+2006-08-05 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (New in Emacs 22): Expand.
+
+2006-08-03 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi: Update for ERC 5.1.4.
+
+2006-07-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Oort Gnus): Mention that the Lisp files are now installed
+ in .../site-lisp/gnus/ by default.
+ [ From gnus-news.texi in the trunk. ]
+
+2006-07-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (MIME Commands): Additions for yEnc.
+
+2006-07-24 Richard Stallman <rms@gnu.org>
+
+ * pgg.texi, org.texi, info.texi, forms.texi, flymake.texi:
+ * faq.texi: Move periods and commas inside quotes.
+
+2006-07-20 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Error forms): Mention M-+ keybinding for `calc-plus-minus'.
+
+2006-07-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * faq.texi (Security risks with Emacs): Document Emacs 22
+ file-local-variable mechanism.
+
+2006-07-12 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi: Update for ERC 5.1.3.
+
+2006-07-12 Alex Schroeder <alex@gnu.org>
+
+ * rcirc.texi: Fix typos.
+ (Getting started with rcirc): New calling convention for M-x irc.
+ Mention #rcirc. Removed channel tracking.
+ (Configuration): Changed the names of all variables that got changed
+ recently, eg. rcirc-server to rcirc-default-server. Added
+ documentation for rcirc-authinfo, some background for Bitlbee, and
+ rcirc-track-minor-mode.
+ (Scrolling conservatively): Fixed the xref from Auto Scrolling to just
+ Scrolling.
+ (Reconnecting after you have lost the connection): Fixed example code
+ to match code changes.
+
+2006-07-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * gnus.texi, message.texi: Fix typos.
+
+2006-07-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Exporting): Document `C-c C-e' as the prefix for exporting
+ commands.
+ (Global TODO list): Document the use of the variables
+ `org-agenda-todo-ignore-scheduled' and
+ `org-agenda-todo-list-sublevels'.
+
+2006-07-05 Richard Stallman <rms@gnu.org>
+
+ * faq.texi (Scrolling only one line): Fix xref.
+
+2006-07-05 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * faq.texi (Evaluating Emacs Lisp code):
+ Throughout, replace eval-current-buffer with eval-buffer.
+
+2006-07-03 Richard Stallman <rms@gnu.org>
+
+ * rcirc.texi (Scrolling conservatively): Fix xref.
+
+ * pcl-cvs.texi (Viewing differences): Usage fix.
+
+2006-07-03 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Agenda commands): Document `s' key to save all org-mode
+ buffers.
+
+2006-06-30 Ralf Angeli <angeli@caeruleus.net>
+
+ * pcl-cvs.texi (Customizing Faces): Remove -face suffix from face
+ names. Mention `cvs-msg' face.
+
+2006-06-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Checkboxes): New section.
+
+2006-06-28 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Embedded LaTeX): Fix typos and implement small improvements
+ throughout this chapter.
+
+2006-06-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.texi (Help-Small-Screen): Clarify placement of "All" and "Top"
+ text for standalone vs Emacs info.
+ (Help): Clarify header line description. Use mouse-1 for clicks.
+ (Help-P): Use mouse-1 for clicks.
+ (Help-^L): "Top" and "All" not displayed with dashes in Emacs.
+ (Help-^L, Help-M, Help-Int, Search Index, Go to node)
+ (Choose menu subtopic): Remove gratuitous Emacs command names.
+ (Help-FOO): Put usual behavior first.
+ (Help-Xref): Clicking on xrefs works in Emacs.
+ (Search Text): Clarify what the default behavior is.
+ (Create Info buffer): Fix Emacs window/X window confusion.
+ (Emacs Info Variables): Fix for new Emacs init file behavior.
+
+2006-06-24 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.texi (Summary Buffer Lines): Fix typo.
+
+2006-06-23 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Embedded LaTeX): New chapter.
+ (Archiving): Section rewritten.
+ (Enhancing text): Some parts moved to the new chapter about LaTeX.
+
+2006-06-20 Bill Wohler <wohler@newt.com>
+
+ Release MH-E manual version 8.0.1.
+
+ * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
+ release 8.0.1.
+ (Preface): Depend on GNU mailutils 1.0 and higher.
+
+2006-06-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (News Headers): Update message-syntax-checks section.
+
+2006-06-19 Karl Berry <karl@gnu.org>
+
+ * info.texi (Advanced): Mention C-q, especially with ?.
+
+2006-06-19 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Publishing links): Document the `:link-validation-function'
+ property.
+ (Extensions and Hacking): New chapter, includes some sections of the
+ "Miscellaneous" chapter.
+
+2006-06-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Progress logging): New section.
+
+2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * viper.texi (Viper Specials):
+ * gnus.texi (Example Setup):
+ * faq.texi (Backspace invokes help):
+ * dired-x.texi (Optional Installation Dired Jump):
+ * calc.texi (Defining Simple Commands): Use ;; instead of ;;; to better
+ follow coding conventions.
+
+2006-05-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail.
+
+2006-06-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (ASCII export): Document indentation adaptation.
+ (Setting tags): Document mutually-exclusive tags.
+
+2006-06-05 Romain Francoise <romain@orebokech.com>
+
+ * url.texi (irc): Mention new funs `url-irc-rcirc' and `url-irc-erc'.
+ Fix typo.
+
+ * gnus-faq.texi (Question 8.6): Update reference to the Gnus
+ channel (#gnus@irc.freenode.net).
+ Fix typos. Update copyright notice.
+
+ * cc-mode.texi (Getting Started, Indentation Commands, Config Basics)
+ (Custom Filling and Breaking, Custom Braces, Syntactic Symbols)
+ (Line-Up Functions, Custom Macros):
+ * ediff.texi (Window and Frame Configuration)
+ (Highlighting Difference Regions):
+ * emacs-mime.texi (Display Customization):
+ * erc.texi (History):
+ * eshell.texi (Known problems):
+ * eudc.texi (Overview, BBDB):
+ * gnus.texi (NNTP, IMAP, Advanced Scoring Examples)
+ (The problem of spam, SpamOracle, Extending the Spam package)
+ (Conformity, Terminology):
+ * idlwave.texi (Routine Info)
+ (Class and Keyword Inheritance, Padding Operators)
+ (Breakpoints and Stepping, Electric Debug Mode)
+ (Examining Variables, Troubleshooting):
+ * org.texi (Creating timestamps):
+ * reftex.texi (Commands, Options, Changes):
+ * tramp.texi (Inline methods, Password caching)
+ (Auto-save and Backup, Issues):
+ * vip.texi (Files, Commands in Insert Mode):
+ * viper.texi (Emacs Preliminaries, States in Viper)
+ (Packages that Change Keymaps, Viper Specials, Groundwork):
+ Fix various typos.
+
+2006-05-31 Michael Ernst <mernst@alum.mit.edu>
+
+ * ediff.texi: Fix typos.
+
+2006-05-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Small typo fixes.
+
+2006-05-29 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Frequently Asked Questions): Disable zsh zle.
+
+2006-05-27 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * pcl-cvs.texi: Fix typos.
+ (Customization): Say "us".
+
+2006-05-26 Eli Zaretskii <eliz@gnu.org>
+
+ * org.texi: Remove bogus @setfilename.
+
+2006-05-26 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (ASCII export): Omit command name.
+ (HTML export): Add prefix to all lines in Local Variable example.
+ (Acknowledgments): Typeset names in italics.
+
+2006-05-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Plain lists): Add new item navigation commands.
+ (External links): Document elisp and info links.
+ (Custom searches): New section.
+ (Publishing): New chapter.
+ (HTML export): Include a list of supported CSS classes.
+ (Setting tags): Describe the fast-tag-setting interface.
+
+2006-05-20 Luc Teirlinck <teirllm@auburn.edu>
+
+ * dired-x.texi: ifinfo -> ifnottex.
+
+2006-05-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Saving Articles): Clarify gnus-summary-save-article-mail.
+
+2006-05-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.texi (Interface): Add tool bar customization.
+ (MIME): Index and text additions for mml-attach.
+ (MIME): Describe mml-dnd-protocol-alist and
+ mml-dnd-attach-options.
+
+ * gnus.texi (Oort Gnus): Reorder entries in sections.
+ Fix some entries.
+ (Starting Up): Add references to "Emacs for Heathens" and to
+ "Finding the News". Add user-full-name and user-mail-address.
+ (Group Buffer Format): Add tool bar customization and update.
+ (Summary Buffer): Add tool bar customization.
+ (Posting Styles): Add message-alternative-emails.
+
+2006-05-09 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Filename completion): Improve wording.
+
+2006-05-07 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (Using regular expressions): Fix typo.
+ (Packages that do not come with Emacs): Fix capitalization.
+ (Replacing text across multiple files): Expand node to explain how
+ to use `dired-do-query-replace-regexp' in more detail, based on
+ suggestion by Eric Hanchrow <offby1@blarg.net>.
+
+2006-05-06 Michael Albinus <michael.albinus@gmx.de>
+
+ * tramp.texi (Filename completion): Completion of remote files'
+ method, user name and host name is active only in partial
+ completion mode.
+
+2006-05-06 Bill Wohler <wohler@newt.com>
+
+ Release MH-E manual version 8.0.
+
+ * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
+ release 8.0.
+
+2006-05-06 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (MH-BOOK-HOME): Change from
+ http://www.ics.uci.edu/~mh/book/mh to
+ http://rand-mh.sourceforge.net/book/mh.
+ Replace .htm suffix with .html for MH book files.
+ (Using This Manual): Update key binding for getting relevant
+ chapter in Info from command key.
+ (Ranges): Fix itemx.
+
+2006-05-05 Karl Berry <karl@gnu.org>
+
+ * texinfo.tex (\definetextfonsizexi, \definetextfonsizex): New cmds.
+ (\fonttextsize): New user-level command to change text font size.
+
+2006-04-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * pgg.texi (Caching passphrase): Fix markup and typos. Simplify.
+
+2006-04-26 Sascha Wilde <wilde@sha-bang.de> (tiny change)
+
+ * pgg.texi (Caching passphrase): Add pgg-gpg-use-agent.
+
+2006-04-24 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (Getting Started): Make it more explicit that you need
+ to install MH. Add pointers to current MH implementations.
+
+2006-04-21 Bill Wohler <wohler@newt.com>
+
+ Release MH-E manual version 7.94.
+
+ * mh-e.texi (VERSION, EDITION, UPDATED, UPDATE-MONTH): Update for
+ release 7.94.
+
+2006-04-21 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Many small fixes.
+ (Handling links): Rename from "Managing links".
+
+2006-04-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Spam Statistics Package): Fix typo in @pxref.
+ (Splitting mail using spam-stat): Fix @xref.
+
+2006-04-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * gnus.texi (Spam Package): Major revision of the text.
+ Previouly this node was "Filtering Spam Using The Spam ELisp Package".
+
+2006-04-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Time stamps): Better explanation of the purpose of
+ different time stamps.
+ (Structure editing, Plain lists): More details on how new items
+ and headings are inserted.
+
+2006-04-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Formula syntax): Fix link to Calc Manual.
+
+2006-04-17 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Emacsen): Don't support Emacs 20.7 and XEmacs 21.1.
+
+2006-04-17 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (Folders): Update mh-before-quit-hook and
+ mh-quit-hook example with code that removes the buffers rather
+ than just bury them.
+
+2006-04-17 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.53.
+
+2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Updating settings): New section.
+ (Visibility cycling): Better names for the startup folding
+ options.
+ (Exporting): Completely restructured.
+ (The very busy C-c C-c key): New section.
+ (Summary of in-buffer settings): New section.
+
+2006-04-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi, gnus-faq.texi, message.texi: Gnus v5.10.8 is released.
+
+2006-04-10 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Misc Group Stuff, Summary Buffer, Article Keymap)
+ (Server Commands): Key `v' is reserved for users.
+
+2006-04-11 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Link format): New section, emphasis on bracket links.
+ (External links): Document bracket links.
+ (FAQ): Expand to cover shell links and the new link format.
+
+2006-04-09 Kevin Ryde <user42@zip.com.au>
+
+ * org.texi (Formula syntax): Typo in node name of calc-eval xref.
+
+2006-04-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Summary Buffer Lines): Add `*'.
+
+2006-04-07 Jochen K,A|(Bpper <jochen@fhi-berlin.mpg.de>
+
+ * gnus.texi (Group Parameters):
+ Mention gnus-permanently-visible-groups.
+
+2006-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Face): Fix typo.
+
+2006-04-05 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (X-Face): Clarify.
+ (Face): Need Emacs with PNG support.
+
+2006-04-06 Richard Stallman <rms@gnu.org>
+
+ * idlwave.texi: Delete the blocks "not suitable for inclusion with
+ Emacs".
+
+2006-04-06 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * idlwave.texi: Updated for IDLWAVE version 6.0, factoring out
+ blocks not suitable for inclusion with Emacs using variable
+ PARTOFEMACS.
+
+2006-04-04 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (Security): Improve.
+
+2006-04-02 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (Getting Started, Junk, Bug Reports)
+ (MH FAQ and Support): Fix URLs.
+
+2006-03-31 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (Virtual Groups): `nnvirtual-always-rescan' defaults
+ to t, not nil (and has for the past eight years).
+
+2006-03-31 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.texi, gnus.texi: Bump version to 5.11.
+
+2006-03-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Top): Add comment about version line.
+
+ * message.texi (Top): Ditto. Change to take named versions into
+ account.
+
+2006-03-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Posting Styles): Add x-face-file to example.
+ (X-Face): Refer to posting styles.
+
+ * gnus-faq.texi ([5.8]): Add x-face-file.
+ ([8.4]): Add links to gmane.emacs.gnus.user and
+ gmane.emacs.gnus.general.
+
+2006-03-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi: Use .invalid.
+ ([5.4]): Fix gnus-posting-styles example.
+
+2006-03-27 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (Emacs/W3): Rename from `w3-mode'. Mention that
+ Emacs/W3 needs a new maintainer.
+ (Ispell): Update author and version info.
+ (Mailcrypt): Mention PGG.
+ (New in Emacs 22): Add PGG to the list of new packages.
+ Include minor changes from "Ramprasad B" <ramprasad_i82@yahoo.com>
+ updating dead URLs.
+
+2006-03-25 Karl Berry <karl@gnu.org>
+
+ * ada-mode.texi, autotype.texi, calc.texi, cc-mode.texi, cl.texi,
+ * dired-x.texi, ebrowse.texi, ediff.texi, emacs-mime.texi, erc.texi,
+ * eshell.texi, eudc.texi, faq.texi, forms.texi, gnus.texi, idlwave.texi,
+ * info.texi, message.texi, mh-e.texi, pcl-cvs.texi, pgg.texi,
+ * rcirc.texi, reftex.texi, sc.texi, ses.texi, sieve.texi,
+ * speedbar.texi, url.texi, vip.texi, viper.texi, widget.texi,
+ * woman.texi: (1) use @copyright{} instead of (C) in typeset text;
+ (2) do not indent copyright year list (or anything else).
+
+2006-03-21 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (Folders): Various edits.
+
+2006-03-20 Romain Francoise <romain@orebokech.com>
+
+ * gnus.texi (Mail Folders): Grammar fix.
+
+2006-03-19 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (Replying): Document Mail-Followup-To.
+ Change manually-formatted table to multitable. Add debugging info.
+ Move description of mh-reply-default-reply-to into paragraph
+ that describes its values.
+
+2006-03-17 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi: Use smallexample and smalllisp consistenly.
+ (Sending Mail Tour): Update method of entering
+ addresses and subject.
+ (Sending Mail Tour, Reading Mail Tour, Processing Mail Tour)
+ (Adding Attachments, Searching): Update screenshots for Emacs 22.
+
+2006-03-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version number change only.
+
+2006-03-14 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi: Add index entries around each paragraph rather than
+ depend on entries from beginning of node. Doing so ensures that
+ index entries are less likely to be forgotten if text is cut and
+ pasted, and are necessary anyway if the references are on a
+ separate page. It seems that makeinfo is now (v. 4.8) only
+ producing one index entry per node, so there is no longer any
+ excuse not to. Use subheading instead of heading. The incorrect
+ use of heading produced very large fonts in Info--as large as the
+ main heading.
+ (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E
+ versions 6 and 7 appeared *around* the time of these Emacs releases.
+
+2006-03-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Clean view): Document new startup options.
+
+2006-03-11 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi (Preface, More About MH-E, Options, HTML, Folders)
+ (Composing, Scan Line Formats): Fix @refs.
+ (Getting Started): Define MH profile and MH profile components.
+ (Incorporating Mail, Reading Mail, Viewing, Printing)
+ (Sending Mail, Forwarding, Editing Drafts, Inserting Letter)
+ (Signature, Aliases, Scan Line Formats): Use @code instead of @samp
+ for string constants.
+ (Tool Bar): Remove spurious quote.
+ (Junk): Use ``...'' instead of "...".
+ (Scan Line Formats): Replace @samp with @kbd.
+
+2006-03-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (NoCeM): Mention gnus-use-nocem can also be a number.
+
+2006-03-10 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Fancy Mail Splitting): Improve sentences so as to be
+ easy to understand.
+
+2006-03-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi: Markup fix.
+ (Fancy Mail Splitting): Specify new feature.
+
+2006-03-08 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Fancy Mail Splitting): Improve descriptions about
+ partial-words matching.
+
+2006-03-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-mime.texi (Display Customization): Reword image/.* stuff.
+
+ * gnus.texi (Oort Gnus): Add note about `gnus-load'.
+ (MIME Commands): Fix mm-discouraged-alternatives.
+
+2006-03-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version number change only.
+
+2006-03-06 Bill Wohler <wohler@newt.com>
+
+ * mh-e.texi: Move from SourceForge repository to Savannah.
+ This is version 7.93, which is a total rewrite from the previous
+ edition 1.3 for MH-E version 5.0.2, and corresponds to MH-E
+ version 7.93.
+
+2006-03-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Oort Gnus): Add `mm-fill-flowed'.
+
+2006-03-01 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Interaction): Add item about `org-mouse.el' by
+ Piotr Zielinski.
+ (Managing links): Document that also mouse-1 can be used to
+ activate a link.
+ (Headlines, FAQ): Add entry about hiding leading stars.
+ (Miscellaneous): Resort the sections in this chapter to a more
+ logical sequence.
+
+2006-02-27 Simon Josefsson <jas@extundo.com>
+
+ * emacs-mime.texi (Flowed text): Add mm-fill-flowed. (Sync
+ 2004-01-27 from the trunk).
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi: Rename c-hungry-backspace to
+ c-hungry-delete-backwards, at the request of RMS. Leave the old
+ name as an alias.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi: Correct the definition of c-beginning-of-defun, to
+ include the function header within the defun.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi: Correct two typos.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi (Comment Commands): State that C-u M-; kills any
+ existing comment.
+ (Electric Keys): Add a justification for electric indentation.
+ (Hungry WS Deletion): Clear up the names and complications of the
+ BACKSPACE and DELETE keys.
+
+2006-02-23 Juri Linkov <juri@jurta.org>
+
+ * faq.texi (Common requests): Move `Turning on auto-fill by
+ default' after `Wrapping words automatically'. Move `Working with
+ unprintable characters' before `Searching for/replacing newlines'.
+ Move `Replacing highlighted text' after `Highlighting a region'.
+ Merge `Repeating commands' and `Repeating a command as many times
+ as possible' into the former.
+ (Packages that do not come with Emacs): Add refs to Gmane and
+ etc/MORE.STUFF.
+
+2006-02-23 Juri Linkov <juri@jurta.org>
+
+ * faq.texi (Newsgroup archives): Update URLs of GNU mail archives.
+ (Reporting bugs): Suggest using `M-x report-emacs-bug'.
+ Add xref to `(emacs)Reporting Bugs'.
+ (Getting a printed manual): Add URL to other formats of the manual.
+ (Common requests): Fix menu.
+ (Highlighting a region): Remove ref to `Turning on syntax highlighting'.
+ (Horizontal scrolling): Mention `truncate-partial-width-windows'.
+ (Inserting text at the beginning of each line): Add pxref to
+ `Changing the included text prefix'.
+ (Forcing the cursor to remain in the same column): Mention `track-eol'
+ and `set-goal-column'. Add pxref to `(emacs)Moving Point'.
+ (Replacing text across multiple files): Add keybinding `Q' for
+ `dired-do-query-replace'.
+
+2006-02-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * reftex.texi: Version number and date change only.
+
+ * org.texi (Internal Links): Rewrite to cover the modified
+ linking system.
+
+2006-02-17 Eli Zaretskii <eliz@gnu.org>
+
+ * faq.texi: Remove the coding cookie, it's not needed anymore.
+
+2006-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * faq.texi (Colors on a TTY): Mention Mac OS port.
+
+2006-02-12 Karl Berry <karl@gnu.org>
+
+ * faq.texi (Emacs for Atari ST): Use Sch@"auble instead of the
+ 8-bit accented a.
+
+2006-02-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Gnus Versions): Add history beyond start of Oort.
+
+2006-02-08 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (Top): Remove paragraph about the FAQ being a
+ transitional document, etc.
+ (Searching for/replacing newlines): New node.
+ (Yanking text in isearch): New node.
+ (Inserting text at the beginning of each line): Rename and make
+ more general, mention `M-;' in Message mode.
+
+2006-02-07 Luc Teirlinck <teirllm@auburn.edu>
+
+ * faq.texi (Meta key does not work in xterm)
+ (Emacs does not display 8-bit characters)
+ (Inputting eight-bit characters): Update xrefs.
+
+2006-02-06 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (VM): VM now at version 7.19.
+ Set myself as maintainer of this file.
+
+2006-02-04 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (History): Note that ERC is now included with Emacs.
+
+2006-01-31 Romain Francoise <romain@orebokech.com>
+
+ * message.texi (Message Headers): Explain what
+ `message-alternative-emails' does in more detail.
+ Update copyright year.
+
+2006-01-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (clean): Add newsticker, sieve, pgg, erc and rcirc.
+
+2006-01-29 Richard M. Stallman <rms@gnu.org>
+
+ * cc-mode.texi (Indentation Commands): Inserts newline, not "linefeed".
+
+2006-01-29 Michael Olson <mwolson@gnu.org>
+
+ * makefile.w32-in ($(infodir)/erc, erc.dvi): New targets.
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add ERC.
+
+ * faq.texi (New in Emacs 22): Mention ERC.
+
+2006-01-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * rcirc.texi: Capitalize dir entry for consistency with the entry
+ in info/dir and other entries in the Emacs category.
+ Fix typos. Delete trailing whitespace.
+
+2006-01-28 Bj,Av(Brn Lindstr,Av(Bm <bkhl@elektrubadur.se>
+
+ * rcirc.texi: Some @cindex changes, some changes from @kbd to @key.
+
+2006-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in ($(infodir)/rcirc, rcirc.dvi): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add rcirc.
+
+ * Makefile.in (../info/rcirc, rcirc.dvi): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add rcirc.
+
+2006-01-27 Alex Schroeder <alex@gnu.org>
+
+ * rcirc.texi: New file.
+
+2006-01-23 Juri Linkov <juri@jurta.org>
+
+ * widget.texi (User Interface): Add S-TAB for widget-backward.
+
+2006-01-22 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.52.
+
+ * tramp.texi (Frequently Asked Questions): Remove Ange-FTP item.
+ Add Tramp disabling item. New item for common connection problems.
+ (various): Apply "ftp" as method for the download URL.
+ (Bug Reports): Refer to FAQ for common problems.
+
+2006-01-21 Eli Zaretskii <eliz@gnu.org>
+
+ * widget.texi (User Interface): Use @key for TAB.
+
+ * ses.texi (Formulas, Printer functions): Use @key for TAB.
+
+ * ebrowse.texi (Switching to Tree, Symbol Completion): Use @key
+ for TAB.
+
+ * cc-mode.texi (Indentation Calculation): Use @key for TAB.
+
+2006-01-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi: Update copyright.
+
+2006-01-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Article Washing): Additions.
+
+2006-01-08 Alex Schroeder <alex@gnu.org>
+
+ * pgg.texi (Caching passphrase): Rewording.
+
+2006-01-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Agenda commands): Document tags command.
+
+2006-01-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (RSS): Document nnrss-wash-html-in-text-plain-parts.
+
+2006-01-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (RSS): Addition.
+
+2005-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Summary Post Commands): Fix function bound to `S O p'.
+
+2005-12-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Display Customization): Add setting example to
+ mm-discouraged-alternatives.
+
+2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * flymake.texi (Obtaining Flymake): Remove chapter since Emacs's
+ version is the canonical version.
+
+2006-01-08 Alex Schroeder <alex@gnu.org>
+
+ * pgg.texi (Caching passphrase): Rewording.
+
+2006-01-06 Eli Zaretskii <eliz@gnu.org>
+
+ * flymake.texi (Obtaining Flymake): Update Flymake's CVS
+ repository URL.
+
+2006-01-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Removed the accidentally re-added empty line in the
+ direntry.
+
+2006-01-05 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Agenda Views): Chapter reorganized.
+
+2005-12-29 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (Using Customize): New node.
+
+2005-12-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * org.texi: Remove blank line in @direntry. It is non-standard
+ and recursively produces blank lines all over the dir file (when
+ using Texinfo 4.8).
+
+2005-12-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * widget.texi (atoms): Delete obsolete remark about `file' widget.
+
+2005-12-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Tags): Boolean logic documented.
+ (Agenda Views): Document custom commands.
+
+2005-12-20 David Kastrup <dak@gnu.org>
+
+ * faq.texi (AUCTeX): Update version and mailing list info.
+
+2005-12-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (MIME Commands): Mention addition of
+ multipart/alternative to gnus-buttonized-mime-types and add xref
+ to mm-discouraged-alternatives.
+
+ * emacs-mime.texi (Display Customization): Mention addition of
+ "image/.*" and add xref to gnus-buttonized-mime-types in the
+ mm-discouraged-alternatives section.
+
+2005-12-16 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Tags): New section.
+ (Agenda Views): Chapter reorganized.
+
+2005-12-16 Eli Zaretskii <eliz@gnu.org>
+
+ * org.texi (Internal Links): Add a missing comma after an @xref.
+
+2005-12-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * faq.texi (Filling paragraphs with a single space): No need to
+ change sentence-end now.
+
+2005-12-13 Romain Francoise <romain@orebokech.com>
+
+ * faq.texi (Scrolling only one line): Use `scroll-conservatively'.
+
+2005-12-12 Jay Belanger <belanger@truman.edu>
+
+ * faq.texi (Calc): Update version number.
+
+2005-12-12 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Progress Logging): New section.
+
+2005-12-10 Romain Francoise <romain@orebokech.com>
+
+ Update the Emacs FAQ for the 22.1 release.
+
+ * faq.texi: Set VER to `22.1'.
+ (Basic editing): Explain how to use localized versions of the
+ Tutorial. Mention that `C-h r' displays the manual. Delete
+ obsolete WWW link to an Emacs 18 tutorial.
+ (Getting a printed manual): Point to the new locations of the
+ manuals on the GNU Web site.
+ (Emacs Lisp documentation): Explain that the Emacs Lisp manual is
+ available via Info (it was previously distributed separately).
+ (Installing Texinfo documentation): The latest version of Texinfo
+ is 4.8, not 4.0.
+ (Informational files for Emacs): COPYING is the GNU General Public
+ License, not the Emacs General Public License.
+ (Informational files for Emacs): Delete obsolete link to the
+ GNUinfo pages as they have been removed from the GNU Web site.
+ (New in Emacs 22): New node.
+ (Setting up a customization file): Say that most packages support
+ Customize nowadays.
+ (Colors on a TTY): Delete reference to instructions on how to
+ enable syntax highlighting, it is now enabled by default.
+ (Turning on abbrevs by default): Emacs now reads the abbrevs file
+ at startup automatically.
+ (Controlling case sensitivity): Mention `M-c' in isearch.
+ (Using an already running Emacs process): Emacs now creates the
+ socket in `/tmp/emacsUID'. Fix typos. Change default location of
+ gnuserv. As emacsclient can now run Lisp code as well, delete a
+ sentence praising gnuserv for that. Simplify description of how
+ the client/server operation works.
+ (Compiler error messages): Delete obsolete text (compile.el has
+ been rewritten).
+ (Indenting switch statements): Fix typo.
+ (Matching parentheses): Simplify setup instructions, mention the
+ menu bar item in the Options menu.
+ (Repeating a command as many times as possible): Mention `C-x e'.
+ (Going to a line by number): Mention new keymap and bindings
+ `M-g M-g', `M-g M-p' and `M-g M-n'.
+ (Turning on syntax highlighting): Now on by default. Simplify.
+ (Replacing highlighted text): Use `1', not `t'.
+ (Problems with very large files): The maximum size is now 256MB on
+ 32-bit machines.
+ (^M in the shell buffer): Mention `comint-process-echoes'.
+ (Emacs for Apple computers): Emacs 22 has native support for Mac
+ OS X.
+ (Translating names to IP addresses): Delete node.
+ (Binding keys to commands): Fix typo.
+ (SPC no longer completes file names): New node.
+ (MIME with Emacs mail packages): Delete section about the Emacs
+ MIME FAQ (it's not reachable anymore).
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi: The manual has been extensively revised: the
+ information about using CC Mode has been separated from the larger
+ and more difficult chapters about configuration. It has been
+ updated for CC Mode 5.31.
+
+2005-12-05 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * pgg.texi (User Commands): Fix description of pgg-verify-region.
+ (Selecting an implementation): Fix descriptions.
+
+2005-11-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Various Message Variables): Addition.
+
+2005-11-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi: Fix default values.
+
+2005-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Header Commands): Clarify descriptions of
+ message-cross-post-followup-to, message-reduce-to-to-cc, and
+ message-insert-wide-reply.
+ (Various Commands): Fix kindex for message-kill-to-signature;
+ clarify description of message-tab.
+
+2005-11-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Mailing Lists): Fix description about MFT.
+
+ * gnus.texi (Emacs Lisp): Use ~/.gnus.el instead of ~/.emacs.
+
+2005-11-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Slow Terminal Connection): Replace old description
+ with new one.
+
+2005-11-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Oort Gnus): Use ~/.gnus.el instead of ~/.emacs;
+ replace X-Draft-Headers with X-Draft-From.
+
+2005-11-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Various Various): Fix the default value of
+ nnheader-max-head-length.
+ (Gnus Versions): Fix typo.
+
+2005-12-08 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Structure editing): Document new functionality of
+ M-RET.
+
+2005-12-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * org.texi (Internal Links): Fix Texinfo usage.
+
+2005-12-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (TODO basics): Document the global todo list.
+ (TODO items): Documents sparse tree for specific TODO
+ keywords.
+
+2005-11-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Plain Lists): Typos fixed.
+
+2005-11-28 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Change references of `M-#' to `C-x *' prefix.
+
+2005-11-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Structure editing): New item moving commands added.
+ (Plain Lists): New section.
+
+2005-11-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (FAQ): Document `org-table-tab-jumps-over-hlines'.
+ (Agenda): Document commands `org-cycle-agenda-files' and
+ `org-agenda-file-to-front'
+ (Built-in table editor): Document `org-table-sort-lines'.
+ (HTML formatting): Export of hand-formatted lists.
+
+2005-11-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (XVarious): Fix description of gnus-use-toolbar; add
+ new variable gnus-toolbar-thickness.
+
+2005-11-08 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (XVarious): Revert description of gnus-use-toolbar.
+
+2005-11-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (X-Face): Fix description.
+ (XVarious): Remove gnus-xmas-logo-color-alist and
+ gnus-xmas-logo-color-style; fix description of gnus-use-toolbar.
+
+2005-11-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Group Parameters): Mention new variable
+ gnus-parameters-case-fold-search.
+ (Home Score File): Addition.
+
+2005-11-04 Ulf Jasper <ulf.jasper@web.de>
+
+ * newsticker.texi: VERSION changed to 1.9. Updated UPDATED.
+ (Overview): List supported feed types.
+ (Installation): No installation necessary when using autoload.
+ (Configuration): Rename "RSS" to "news".
+
+2005-11-04 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * pgg.texi (User Commands): Document additional passphrase
+ argument for pgg-encrypt-*, pgg-decrypt-*, and pgg-sign-* functions.
+ (Backend methods): Likewise for corresponding pgg-scheme-* functions.
+
+2005-11-04 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version number changed to 3.19.
+
+2005-10-29 Sascha Wilde <wilde@sha-bang.de>
+
+ * pgg.texi (How to use): Update the example to add autoload of
+ pgg-encrypt-symmetric-region.
+ (User Commands): Document pgg-encrypt-symmetric-region.
+ (Backend methods): Document pgg-scheme-encrypt-symmetric-region.
+
+2005-10-27 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Predefined Units): Fix the symbol for a TeX points,
+ mention other TeX-related units.
+
+2005-10-23 Lars Hansen <larsh@soem.dk>
+
+ * dired-x.texi (Miscellaneous Commands): Replace
+ dired-do-relative-symlink by dired-do-relsymlink and
+ dired-do-relative-symlink-regexp by dired-do-relsymlink-regexp.
+
+2005-10-23 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Predefined Units): Use `alpha' for the fine structure
+ constant.
+
+2005-10-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * faq.texi (Bugs and problems): Replace
+ `dired-move-to-filename-regexp' by
+ `directory-listing-before-filename-regexp'.
+
+2005-10-22 Eli Zaretskii <eliz@gnu.org>
+
+ * newsticker.texi (UPDATED): Set value.
+
+2005-10-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Document Groups): Remove duplicate item.
+
+2005-10-21 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Summary): Mention iCalendar support.
+ (Exporting): Document iCalendar support.
+
+2005-10-18 Romain Francoise <romain@orebokech.com>
+
+ * viper.texi (Viper Specials): Capitalize GNU.
+
+2005-10-17 Juri Linkov <juri@jurta.org>
+
+ * info.texi (Getting Started, Search Index, Expert Info):
+ Fix wording.
+ (Search Text): Replace `echo area' with `mode line'.
+ (Search Index): Both `i' and `,' find all index entries.
+ Replace example `C-f' with `C-l' (which exists in index of Info
+ manual) and delete spaces in its keyboard input sequence.
+ Delete unnecessary explanations about literal characters.
+
+2005-10-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Document Server Internals): Addition.
+
+2005-10-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (A note on namespaces): Fix RFC reference.
+
+2005-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (RSS): Fix key description.
+
+2005-10-11 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi: Emacs/w3 -> Emacs/W3.
+ (Browsing the Web): Fix description.
+ (Web Searches): Ditto.
+ (Customizing W3): Ditto.
+
+2005-10-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Maildir): Clarify expire-age and expire-group.
+
+2005-10-11 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Integration): Mention using `a i' to compute definite
+ integrals.
+
+2005-10-11 Juri Linkov <juri@jurta.org>
+
+ * info.texi: Rearrange nodes.
+ (Top): Update menu. Change ref `Info for Experts' to
+ `Advanced Info Commands'.
+ (Getting Started): Fix description of manual's parts.
+ (Help-Int): Change xref `Info Search' to `Search Index', and
+ `Expert Info' to `Advanced'.
+ (Advanced): Move node one level up.
+ (Search Text, Search Index): New nodes split out from `Info Search'.
+ (Go to node, Choose menu subtopic, Create Info buffer): New nodes
+ split out from `Advanced'.
+ (Advanced, Emacs Info Variables): De-document editing an Info file
+ in Info.
+ (Emacs Info Variables): Move node from `Expert Info' to `Advanced'.
+ (Creating an Info File): Delete node and move its text to
+ `Expert Info'.
+
+2005-10-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi (Workflow states): Documented that change in keywords
+ becomes active only after restart of Emacs.
+
+2005-10-08 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.51.
+
+2005-10-08 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.texi (Introduction): Describe new location of speedbar
+ on menubar.
+ (Basic Key Bindings): Remove descriptions of bindings that have
+ been removed.
+
+2005-10-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.texi (GDB): Describe use of watch expressions.
+
+2005-09-28 Simon Josefsson <jas@extundo.com>
+
+ * message.texi (IDNA): Fix.
+
+2005-09-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (NNTP): Remove nntp-buggy-select, nntp-read-timeout,
+ nntp-server-hook, and nntp-warn-about-losing-connection; fix
+ description of nntp-open-connection-function.
+ (Common Variables): Fix descriptions.
+
+2005-09-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Server Buffer Format): Document the %a format spec.
+
+2005-09-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Mail): Fix gnus-confirm-mail-reply-to-news entry.
+
+2005-09-23 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi Version 3.16.
+
+2005-09-19 Miles Bader <miles@gnu.org>
+
+ * newsticker.texi: Get rid of CVS keywords.
+
+2005-09-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Finding the Parent): Fix description of how Gnus
+ finds article.
+
+2005-09-14 Jari Aalto <jari.aalto@cante.net>
+
+ * gnus.texi (Advanced Scoring Examples): New examples to teach how
+ to drop off non-answered articles.
+
+2005-09-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (newsticker.dvi): Use parentheses instead of curly
+ braces (which are unsupported by NMAKE) for macro `srcdir'.
+
+2005-09-17 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets.
+ (../info/newsticker, newsticker.dvi): New targets.
+
+2005-09-17 Ulf Jasper <ulf.jasper@web.de>
+
+ * newsticker.texi: Replace @command with @code. Replace @example
+ with @lisp.
+ (Top): Added explanations to menu items.
+ (GNU Free Documentation License): Removed.
+
+2005-09-16 Romain Francoise <romain@orebokech.com>
+
+ Update all files to specify GFDL version 1.2.
+
+ * doclicense.texi (GNU Free Documentation License): Update to
+ version 1.2.
+
+2005-09-15 Richard M. Stallman <rms@gnu.org>
+
+ * newsticker.texi: Fix @setfilename.
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add newsticker targets.
+ (../info/newsticker, newsticker.dvi): New targets.
+
+2005-08-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.15.
+
+2005-08-29 Luc Teirlinck <teirllm@auburn.edu>
+
+ * ses.texi: Combine all three indices into one.
+ Correct a few typos.
+
+2005-08-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (time-date): Fix description of safe-date-to-time.
+
+2005-08-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Handles): Remove duplicate item.
+ (Encoding Customization): Fix the default value for
+ mm-coding-system-priorities.
+ (Charset Translation): Emacs doesn't use mm-mime-mule-charset-alist.
+ (Basic Functions): Fix reference.
+
+2005-08-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (Charsets): Fj hierarchy uses iso-2022-jp.
+
+2005-08-18 Richard M. Stallman <rms@gnu.org>
+
+ * faq.texi (Obtaining the FAQ): Delete refs to Lerner's email
+ and web site.
+
+ * faq.texi (Swapping keys): Xref for normal-erase-is-backspace-mode,
+ not keyboard-translate.
+
+2005-08-11 Richard M. Stallman <rms@gnu.org>
+
+ * faq.texi (Using regular expressions): Fix xref.
+
+2005-08-09 Juri Linkov <juri@jurta.org>
+
+ * info.texi (Help-P): Replace `Prev' with `Previous'.
+ (Help-M, Help-Xref): Add S-TAB.
+ (Help-FOO): Update `u' command.
+ (Help-Xref): Move info about Mouse-2 from `Help-Int'.
+ Update info about visibility of xref parts.
+ (Help-Int): Fix `m' command. Rename `Info-last' to
+ `Info-history-back'. Add `Info-history-forward'.
+ (Advanced): Fix `g*' and `M-n' commands.
+ (Info Search): Add `index-apropos' in stand-alone browser.
+ Add isearch commands.
+ (Emacs Info Variables): Remove `Info-fontify'.
+ Add `Info-mode-hook'. Update face names.
+ Add `Info-fontify-maximum-menu-size',
+ `Info-fontify-visited-nodes', `Info-isearch-search'.
+
+2005-08-07 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.50.
+
+ * tramp.texi: Use @option{} consequently for method names.
+ (Inline methods, External transfer methods): Remove references to
+ Cygwin.
+ (Issues with Cygwin ssh): Explain trouble with Cygwin's ssh
+ implementation.
+
+2005-07-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Startup Files): Fix name of gnus-site-init-file.
+ Mention that gnus-init-file is not read when Emacs is invoked with
+ --no-init-file or -q.
+
+2005-07-19 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.14.
+
+2005-07-04 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.13.
+
+2005-07-18 Juri Linkov <juri@jurta.org>
+
+ * calc.texi (Time Zones, Logical Operations):
+ * cl.texi (Overview):
+ * org.texi (TODO types):
+ * sc.texi (Emacs 18 MUAs):
+ * speedbar.texi (Top):
+ * url.texi (History):
+ Delete duplicate duplicate words.
+
+2005-07-16 Johan Bockgard <bojohan@users.sourceforge.net> (tiny change)
+
+ * cl.texi (Type Predicates): Document `atom' type.
+
+2005-07-04 Lute Kamstra <lute@gnu.org>
+
+ Update FSF's address in GPL notices.
+
+ * calc.texi (Copying):
+ * doclicense.texi (GNU Free Documentation License):
+ * faq.texi (Contacting the FSF):
+ * mh-e.texi (Copying): Update FSF's address.
+
+2005-07-03 Richard M. Stallman <rms@gnu.org>
+
+ * flymake.texi (Example -- Configuring a tool called directly):
+ Update name of flymake-build-relative-filename.
+
+2005-06-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (NoCeM): gnus-nocem-verifyer defaults to pgg-verify.
+
+2005-06-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.12.
+
+2005-06-24 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (MAKEINFO): Use --force.
+ (INFO_TARGETS, DVI_TARGETS): Make identical to the lists in
+ Makefile.in.
+ (gnus.dvi): Use "..." to quote Sed args, so that it works with
+ more shells.
+
+2005-06-23 Richard M. Stallman <rms@gnu.org>
+
+ * speedbar.texi (Creating a display): Texinfo usage fixes.
+
+ * tramp.texi (Customizing Completion, Auto-save and Backup):
+ Texinfo usage fixes.
+
+2005-06-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * dired-x.texi (Miscellaneous Commands):
+ * ediff.texi (Miscellaneous):
+ * gnus.texi (MIME Commands, Fancy Mail Splitting, Agent Visuals)
+ (Agent Variables):
+ * info.texi (Help-Xref):
+ * message.texi (Message Headers):
+ * org.texi (Remember):
+ * reftex.texi (Options (Defining Label Environments)):
+ (Options (Index Support)):
+ (Options (Viewing Cross-References)):
+ (Options (Misc)):
+ (Changes):
+ * speedbar.texi (Creating a display):
+ * tramp.texi (Customizing Completion, Auto-save and Backup):
+ Texinfo usage fix.
+
+2005-06-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.11.
+
+2005-06-12 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Getting Started): Remove extra menu item.
+
+2005-05-31 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Notations Used in This Manual): Use @kbd for key
+ sequence.
+ (Demonstration of Calc): Mention another way of starting Calc.
+ (Starting Calc): Mention long name of M-#.
+ (Embedded Mode Overview): Remove unnecessary instruction.
+ (Other M-# commands): Rephrase `M-# 0' explanation.
+ (Basic Embedded Mode): Rewrite discussion of prefix arguments to
+ reflect current behavior.
+
+2005-05-30 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Hooks): Change description of calc-window-hook and
+ calc-trail-window-hook to match usage.
+ (Computational Functions): Add more constant-generating functions.
+ (Customizable Variables): Use defvar.
+
+2005-05-28 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Assignments in Embedded Mode): Fix variable name.
+ (Basic Embedded Mode): Explain behavior of arguments to
+ calc-embedded-mode.
+
+2005-05-27 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Queries in Keyboard Macros): Rewrite to reflect
+ current behavior.
+
+2005-05-25 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Change Calc version number throughout.
+ (Keypad Mode): Change location in info output.
+ (Keypad mode overview): Move picture of keypad.
+
+2005-05-21 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Storing variables): Mention that only most variables
+ are void to begin with.
+
+2005-05-21 Kevin Ryde <user42@zip.com.au>
+
+ * widget.texi (Basic Types): Update cross ref from "Enabling
+ Mouse-1 to Follow Links" to "Links and Mouse-1" per recent
+ lispref/text.texi change.
+
+2005-05-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.09.
+
+2005-05-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * reftex.texi: Version 4.28.
+
+2005-05-16 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Storing Variables): Mention `calc-copy-special-constant'.
+
+2005-05-14 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Default Simplifications): Insert missing ! (logical
+ not operator).
+
+2005-05-14 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.49.
+
+2005-05-10 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Default Simplifications): Mention that 0^0 simplifies
+ to 1.
+
+2005-04-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Version 3.08, structure reorganized.
+
+2005-04-24 Richard M. Stallman <rms@gnu.org>
+
+ * faq.texi: Delete info about lazy-lock.el and fast-lock.el.
+
+2005-04-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * org.texi: Update to version 3.06.
+
+2005-04-13 Lute Kamstra <lute@gnu.org>
+
+ * cc-mode.texi: Prevent creating an unnecessary empty cc-mode.ss file.
+
+2005-04-10 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * cl.texi (Porting Common Lisp): Fix typo.
+
+2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (RSS): Addition.
+
+2005-04-04 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Change Calc version number.
+ (Customizable variables): Fix description of calc-language-alist.
+ (Copying): Put in version 2 of GPL.
+
+2005-04-01 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Troubleshooting Commands): Remove comment about
+ installation.
+ (Installation): Remove section.
+ (Customizable Variables): New section.
+ (Basic Embedded Mode, Customizing Embedded Mode, Graphics)
+ (Graphical Devices): Add references to Customizable Variables.
+
+2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Display Customization): Markup fixes.
+ (rfc2047): Update.
+
+2005-03-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi: Replaced with auto-generated version.
+
+2005-03-26 Stephan Stahl <stahl@eos.franken.de> (tiny change)
+
+ * dired-x.texi (Multiple Dired Directories): default-directory was
+ renamed to dired-default-directory.
+
+2005-03-26 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Simplifying Formulas, Rewrite Rules):
+ Change description of top and bottom of fraction.
+ (Modulo Forms): Move description of how to create modulo forms to
+ earlier in the section.
+ (Fraction Mode): Suggest using : to get a fraction by dividing.
+ (Basic Arithmetic): Adjust placement of command name.
+ (Truncating the Stack): Emphasize that "hidden" entries are still
+ visible.
+ (Installation): Move discussion of printing manual to "About This
+ Manual".
+ (About This Manual): Mention how to print the manual.
+ (Reporting Bugs): Remove first person.
+ (Building Vectors): Add algebraic version of append.
+ (Manipulating Vectors): Fix algebraic version of calc-reverse-vector.
+ (Grouping Digits): Fix typo.
+
+2005-03-25 Werner Lemberg <wl@gnu.org>
+
+ * calc.texi, cl.texi, gnus.texi, idlwave.texi, reftex.texi:
+ Replace `legal' with `valid'.
+
+2005-03-25 Werner Lemberg <wl@gnu.org>
+
+ * calc.texi, reftex.texi: Replace `illegal' with `invalid'.
+
+2005-03-24 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (General Mode Commands)
+ (Mode Settings in Embedded Mode): Add some explanation of
+ recording mode settings.
+
+2005-03-24 Richard M. Stallman <rms@gnu.org>
+
+ * calc.texi: Remove praise of non-free software.
+
+ * idlwave.texi: Don't say where to get IDL or its non-free manual.
+ (Installation): Node deleted.
+
+2005-03-23 Richard M. Stallman <rms@gnu.org>
+
+ * url.texi (HTTP language/coding): Improve last change.
+
+2005-03-22 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Embedded Mode): Add new information on changing
+ modes.
+
+2005-03-20 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.48.
+
+ * trampver.texi.in: Replace "Emacs" by "GNU Emacs".
+
+ * tramp.texi: Replace "Emacs" by "GNU Emacs". Replace "Linux" by
+ "GNU/Linux". Change all addresses to .gnu.org.
+ (Default Method): Offer shortened syntax for "su" and "sudo"
+ methods.
+
+2005-03-07 Richard M. Stallman <rms@gnu.org>
+
+ * url.texi: Fix usage of "e.g.".
+ (HTTP language/coding): Explain the rules for these strings.
+
+2005-03-06 Richard M. Stallman <rms@gnu.org>
+
+ * woman.texi (Introduction): Minor cleanups.
+
+ * url.texi (HTTP language/coding): Get rid of "Emacs 21".
+
+ * pcl-cvs.texi (About PCL-CVS): Get rid of "Emacs 21".
+ (Installation): Node deleted.
+
+ * mh-e.texi (Preface): Get rid of "Emacs 21".
+
+ * eshell.texi (Installation): Delete node (for Emacs 20).
+
+2005-03-05 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * flymake.texi: Refill and tweak style in @lisp blocks.
+
+2005-03-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Slow/Expensive Connection): Don't abbreviate "very".
+
+2005-03-01 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Trigonometric and Hyperbolic Functions):
+ Mention additional functions.
+ (Algebraic Simplifications): Mention additional simplifications.
+
+2005-02-18 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses.texi: Add concept/function/variable indices (this work was
+ donated by Brad Collins <brad@chenla.org>, copyright-assignment
+ papers on file at FSF).
+
+2005-02-10 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Change @LaTeX to La@TeX throughout.
+ Redefine @expr as @math for TeX output.
+ Redefine @texline as a no-op for TeX output.
+ Define @tfn, replace @t by @tfn throughout.
+
+2005-02-09 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Add macro for LaTeX for info output.
+
+2005-02-08 Kim F. Storm <storm@cua.dk>
+
+ * texinfo.tex (LaTex): Add def.
+
+2005-02-06 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (TeX Language Mode): Add mention of LaTeX mode, and
+ change name to "TeX and LaTeX Language Modes." Mention LaTeX mode
+ throughout manual.
+
+2005-01-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi: Some edits based on comments from David Abrahams.
+
+2005-01-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.texi (RSS): Fix the keystroke.
+
+2005-01-24 David Kastrup <dak@gnu.org>
+
+ * faq.texi: Update AUCTeX version info.
+
+2005-01-16 Xavier Maillard <zedek@gnu-rox.org> (tiny change)
+
+ * gnus-faq.texi ([4.1]): Typo.
+
+2005-01-19 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Keep Arguments): Mention that keeping arguments
+ doesn't work with keyboard macros.
+
+2005-01-16 Richard M. Stallman <rms@gnu.org>
+
+ * autotype.texi (Autoinserting): Fix small error.
+
+2005-01-16 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.47.
+
+ * tramp.texi (Compilation): New section, describing compilation of
+ remote files.
+
+2005-01-11 Kim F. Storm <storm@cua.dk>
+
+ * widget.texi (Basic Types): Add :follow-link keyword.
+
+2005-01-09 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Basic Commands): Describe new behavior of calc-reset.
+
+2005-01-08 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Change throughout to reflect new default value of
+ calc-settings-file.
+
+2005-01-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Reply): `message-reply-to-function' should return
+ a list. Suggested by ARISAWA Akihiro <ari@mbf.ocn.co.jp>.
+
+2005-01-06 Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp> (tiny change)
+
+ * faq.texi (Changing load-path): Fix typo.
+
+2005-01-05 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Programming Tutorial): Replace kbd command by
+ appropriate characters for a keyboard macro.
+
+2005-01-04 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Basic Tutorial, Programming Tutorial): Remove caveats
+ for Lucid Emacs.
+ (Programming Tutorial): Mention that the user needs to be in the
+ right mode to compute some functions.
+
+2005-01-04 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Rewrite rules): Remove an exercise (on 0^0) which is
+ no longer applicable.
+
+2005-01-01 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Programming Tutorial): Changed description of how to
+ edit keyboard macros to match current behavior.
+
+2004-12-31 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Mention C-cC-c as the way to finish editing throughout.
+
+2004-12-20 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Types Tutorial): Emphasize that you can't divide by
+ zero.
+
+2004-12-17 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cc-mode.texi (Text Filling and Line Breaking): Put period after
+ @xref.
+ (Font Locking): Avoid @strong{Note:}.
+
+2004-12-17 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.46.
+
+ * tramp.texi (bottom): Add arch-tag. It was lost, somehow.
+
+2004-12-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * url.texi: Correct typos.
+ (Retrieving URLs): @var{nil}->@code{nil}.
+ (HTTP language/coding, mailto): Replace "GNU Emacs Manual" with
+ the standard "The GNU Emacs Manual" in fifth argument of @xref's.
+ (Dealing with HTTP documents): @inforef->@xref.
+
+2004-12-15 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Consistently capitalized all mode names.
+ (Answers to Exercises): Mention that an answer can be a fraction
+ when in Fraction mode.
+
+2004-12-13 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Fix some TeX definitions.
+
+2004-12-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * reftex.texi (Imprint): Remove erroneous @value's.
+
+2004-12-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * makefile.w32-in (INFO_TARGETS, DVI_TARGETS, $(infodir)/org)
+ (org.dvi, $(infodir)/url, url.dvi, clean): Add org and url manuals.
+
+2004-12-08 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Starting Calc): Remove comment about installation.
+ (Keypad Mode Overview): Remove comment about Emacs 19 support.
+
+2004-12-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * url.texi: Update @setfilename.
+ (Getting Started): No need to worry about Gnus versions.
+ (Dealing with HTTP documents): Use @inforef.
+
+ * org.texi: Fix @direntry file name.
+
+2004-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * url.texi: New file.
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS, ../info/url, url.dvi): Add it.
+
+2004-12-06 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Using Calc): Remove paragraph about installation.
+
+2004-12-06 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi: Use more Texinfo macros and less TeX defs.
+ Remove @refill's.
+
+2004-12-06 Richard M. Stallman <rms@gnu.org>
+
+ * org.texi: New file.
+
+2004-12-05 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in (org.dvi, ../info/org): New targets.
+ (INFO_TARGETS): Add ../info/org.
+ (DVI_TARGETS): Add org.dvi.
+ (maintainer-clean): Remove the info files in the info dir.
+
+2004-11-26 Eli Zaretskii <eliz@gnu.org>
+
+ * idlwave.texi: Fix the setfilename directive to put the produced
+ file in ../info.
+ (Continued Statement Indentation): Resurrect Jan D.'s change from
+ 2004-11-03 that was lost when a newer version of idlwave.texi was
+ imported.
+
+2004-12-08 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi ([5.1]): Added missing bracket.
+
+ * gnus.texi (Filtering Spam Using The Spam ELisp Package): Index
+ `spam-initialize'.
+
+2004-11-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.texi (Various Message Variables): Mention that all mail
+ file variables are derived from `message-directory'.
+
+ * gnus.texi (Splitting Mail): Clarify bogus group.
+
+2004-11-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Encoding Customization): Fix
+ mm-coding-system-priorities entry.
+
+2004-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * idlwave.texi (Continued Statement Indentation):
+ * reftex.texi (Options (Index Support)):
+ (Displaying and Editing the Index, Table of Contents):
+ * speedbar.texi (Creating a display, Major Display Modes): Replace
+ non-nil with non-@code{nil}.
+
+2004-10-21 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Algebraic-Style Calculations): Removed a comment.
+
+2004-10-18 Luc Teirlinck <teirllm@auburn.edu>
+
+ * calc.texi (Reporting Bugs): Double up `@'.
+
+2004-10-18 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Reporting Bugs): Changed the address that bugs
+ should be sent to.
+
+2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (New Features): Add 5.11.
+
+ * message.texi (Resending): Remove wrong default value.
+
+ * gnus.texi (Mail Source Specifiers): Describe possible problems
+ of `pop3-leave-mail-on-server'. Add `pop3-movemail' and
+ `pop3-leave-mail-on-server' to the index.
+
+2004-10-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.texi (Canceling News): Add how to set a password.
+
+2004-10-12 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Help Commands): Changed the descriptions of
+ calc-describe-function and calc-describe-variable to match their
+ current behavior.
+
+2004-10-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi ([5.9]): Improve code for reply-in-news.
+
+2004-10-12 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.45.
+
+ * tramp.texi (Frequently Asked Questions): Comment paragraph about
+ plink link. The URL is outdated. Originator contacted for
+ clarification.
+
+2004-10-10 Juri Linkov <juri@jurta.org>
+
+ * gnus.texi (Top, Marking Articles): Join two menus in one node
+ because a node can have only one menu.
+
+2004-10-09 Juri Linkov <juri@jurta.org>
+
+ * gnus.texi (Fancy Mail Splitting): Remove backslash in the
+ example of nnmail-split-fancy.
+
+2004-10-06 Karl Berry <karl@gnu.org>
+
+ * info.texi (@kbd{1}--@kbd{9}): No space around --, for
+ consistency with other uses of dashes.
+
+2004-10-05 Karl Berry <karl@gnu.org>
+
+ * info.texi: Consistently use --- throughout, periods at end of
+ menu descriptions, and a couple typos.
+
+2004-09-26 Jesper Harder <harder@ifa.au.dk>
+
+ * sieve.texi (Manage Sieve API): nil -> @code{nil}.
+ * pgg.texi (User Commands, Backend methods): Do.
+ * gnus.texi: Markup fixes.
+ (Setting Process Marks): Fix `M P a' entry.
+ * emacs-mime.texi: Fixes.
+
+2004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-faq.texi ([5.12]): Fix code example for FQDN in Message-Ids
+ again.
+ Use 5.10 instead of 5.10.0.
+
+2004-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.texi (Summary Mail Commands): S D e.
+
+2004-09-20 Raymond Scholz <ray-2004@zonix.de> (tiny change)
+
+ * gnus.texi (Misc Article): Refer to `Summary Buffer Mode Line' in
+ the gnus-article-mode-line-format section.
+
+2004-09-20 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change)
+
+ * gnus.texi (Various Summary Stuff): Fix the documentation for
+ gnus-newsgroup-variables.
+
+2004-09-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (MIME Commands): Added
+ gnus-mime-display-multipart-as-mixed,
+ gnus-mime-display-multipart-alternative-as-mixed,
+ gnus-mime-display-multipart-related-as-mixed.
+ (Mail Source Customization): Clarify `mail-source-directory'.
+ (Splitting Mail): Mention gnus-group-find-new-groups.
+ (SpamOracle): Fixed typo.
+
+ * gnus-faq.texi: Untabify.
+ ([6.3]): nnir.el is in contrib directory.
+
+ * message.texi (News Headers): Clarify how a unique ID is created.
+
+ * gnus.texi (Batching Agents): Fixed typo in example. Reported
+ by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
+
+2004-09-20 Andre Srinivasan <andre@e2open.com>
+
+ * gnus.texi (Group Parameters): Added more on hooks. (Small
+ change.)
+
+2004-09-20 Florian Weimer <fw@deneb.enyo.de>
+
+ * gnus.texi (Charsets): Point to relevant section in emacs-mime.
+
+2004-09-22 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Vectors as Lists): Added a warning that the tutorial
+ might be hidden during part of the session.
+
+2004-09-20 Jay Belanger <belanger@truman.edu>
+
+ * calc.texi (Notations Used in This Manual): Put in an earlier
+ mention that DEL could be called Backspace.
+
+2004-09-10 Simon Josefsson <jas@extundo.com>
+
+ * gnus.texi (IMAP): Add example. Suggested and partially written
+ by Steinar Bang <sb@dod.no>.
+
+2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (IMAP): Add comments about imaps synonym to imap in
+ netrc syntax.
+
+2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Spam ELisp Package Sequence of Events): Some clarifications.
+ (Spam ELisp Package Global Variables): More clarifications.
+
+2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Spam ELisp Package Filtering of Incoming Mail):
+ Mention spam-split does not modify incoming mail.
+
+2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.texi (Spam ELisp Package Sequence of Events): Fix typo.
+
+2004-09-10 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (../info/gnus, gnus.dvi): Depend on gnus-faq.texi.
+
+2004-09-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * makefile.w32-in (sieve, pgg): Use $(infodir).
+
+2004-09-08 Dhruva Krishnamurthy <dhruva.krishnamurthy@gmail.com> (tiny change)
+
+ * makefile.w32-in: Fix PGG and Sieve entries.
+
+2004-08-28 Eli Zaretskii <eliz@gnu.org>
+
+ * faq.texi (Emacs for MS-DOS): Update URLs for the MS-DOS port of
+ Emacs and related programs.
+
+2004-08-27 Richard M. Stallman <rms@gnu.org>
+
+ * faq.texi: Fix texinfo usage, esp. doublequotes.
+ (Difference between Emacs and XEmacs): Some clarification.
+
+ * faq.texi (Difference between Emacs and XEmacs):
+ Explain not to contrast XEmacs with GNU Emacs.
+
+2004-08-26 Richard M. Stallman <rms@gnu.org>
+
+ * faq.texi (Difference between Emacs and XEmacs): Rewrite.
+
+2004-08-22 David Kastrup <dak@gnu.org>
+
+ * reftex.texi (AUCTeX): Update links, section name.
+
+ * faq.texi (Calc): Update availability (included in 22.1).
+ (AUCTeX): Update availability, information, versions, description.
+
+2004-08-14 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (../info/tramp, tramp.dvi): Depend on trampver.texi.
+
+2004-08-11 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi: Various updates for CC Mode 5.30.9.
+
+2004-08-10 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.44.
+
+2004-08-05 Lars Hansen <larsh@math.ku.dk>
+
+ * widget.texi (User Interface): Update how to separate the
+ editable field of an editable-field widget from other widgets.
+ (Programming Example): Add text after field.
+
+2004-08-31 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-mime.texi (Encoding Customization): Add a note to the
+ mm-content-transfer-encoding-defaults entry.
+ (rfc2047): Update.
+
+ * gnus.texi (Article Highlighting): Add
+ gnus-cite-ignore-quoted-from.
+ (POP before SMTP): New node.
+ (Posting Styles): Addition.
+ (Splitting Mail): Add nnmail-split-lowercase-expanded.
+ (Fancy Mail Splitting): Ditto.
+ (X-Face): Add gnus-x-face.
+
+2004-08-30 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi,
+ * pgg.texi, sieve.texi: Use @copying and @insertcopying.
+
+2004-08-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Mail Source Specifiers): Describe
+ `pop3-leave-mail-on-server'.
+
+2004-08-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * Makefile.in, makefile.w32-in: Added PGG and Sieve files.
+
+ * pgg.texi, sieve.texi: Import from the v5_10 branch of the Gnus
+ repository. Change setfilename.
+
+ * emacs-mime.texi, gnus-faq.texi, gnus.texi, message.texi: Ditto.
+
+2004-07-02 Juri Linkov <juri@jurta.org>
+
+ * pcl-cvs.texi (Viewing differences): Add `d r'.
+
+2004-06-29 Jesper Harder <harder@ifa.au.dk>
+
+ * ses.texi, viper.texi, flymake.texi, faq.texi:
+ * eshell.texi, ediff.texi: Markup fixes.
+
+2004-06-21 Karl Berry <karl@gnu.org>
+
+ * info.texi (Top): Mention that only Emacs has mouse support.
+ (Getting Started): Mention this in a few other places.
+
+2004-06-13 Luc Teirlinck <teirllm@auburn.edu>
+
+ * autotype.texi (Copyrights, Timestamps): Recommend
+ `before-save-hook' instead of `write-file-functions'.
+
+2004-06-13 Lars Hansen <larsh@math.ku.dk>
+
+ * dired-x.texi (dired-mark-omitted): Update keybinding.
+
+2004-06-10 Kim F. Storm <storm@cua.dk>
+
+ * pcl-cvs.texi (Viewing differences): Add 'd y'.
+
+2004-06-05 Lars Hansen <larsh@math.ku.dk>
+
+ * dired-x.texi (variable dired-omit-mode): Rename from
+ dired-omit-files-p.
+ (function dired-omit-mode): Rename from dired-omit-toggle.
+ Call dired-omit-mode rather than set dired-omit-files-p.
+ (dired-mark-omitted): Describe command.
+
+2004-05-29 Michael Albinus <michael.albinus@gmx.de>
+
+ Version 2.0.41 of Tramp released.
+
+2004-05-29 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in (../info/flymake, flymake.dvi): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add Flymake.
+
+2004-05-29 Richard M. Stallman <rms@gnu.org>
+
+ * cl.texi (Top): Call this chapter `Introduction'.
+ (Overview): In TeX, no section heading here.
+
+ * cc-mode.texi: Put commas after i.e. and e.g. Minor cleanups.
+
+2004-05-29 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (../info/flymake, flymake.dvi): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add Flymake.
+
+2004-05-29 Pavel Kobiakov <pk_at_work@yahoo.com>
+
+ * flymake.texi: New file.
+
+2004-05-28 Simon Josefsson <jas@extundo.com>
+
+ * smtpmail.texi (Authentication): Improve STARTTLS discussion.
+
+2004-05-07 Kai Grossjohann <kai@emptydomain.de>
+
+ Version 2.0.40 of Tramp released.
+
+2004-04-25 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ Complete rework, based on review by Karl Berry <karl@gnu.org>.
+
+ * tramp.texi (Auto-save and Backup): Explain exploitation of new
+ variables `tramp-backup-directory-alist' and
+ `tramp-bkup-backup-directory-info'.
+ (Overview, Connection types)
+ (External transfer methods, Default Method)
+ (Windows setup hints): Remove restriction of password entering
+ with external methods.
+ (Auto-save and Backup): Make file name example
+ (X)Emacs neutral. In case of XEmacs, `bkup-backup-directory-info'
+ and `auto-save-directory' must be used.
+ (Frequently Asked Questions): Use "MS Windows NT/2000/XP" (not
+ only "NT"). Remove doubled entry "What kinds of systems does
+ @tramp{} work on".
+ (tramp): Macro removed.
+ (Obtaining Tramp): Flag removed from title.
+ (all): "tramp-" and "-" removed from flag names. Flags `tramp'
+ and `trampver' used properly. Flag `tramp-inst' replaced by
+ `installchapter'. Installation related text adapted.
+
+2004-04-28 Masatake YAMATO <jet@gyve.org>
+
+ * widget.texi (Programming Example): Remove overlays.
+
+2004-04-27 Jesper Harder <harder@ifa.au.dk>
+
+ * faq.texi, viper.texi, dired-x.texi, autotype.texi: lisp -> Lisp.
+
+2004-04-23 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in: Add "-*- makefile -*-" mode tag.
+
+2004-04-05 Jesper Harder <harder@ifa.au.dk>
+
+ * info.texi (Info Search): Add info-apropos.
+
+2004-03-22 Juri Linkov <juri@jurta.org>
+
+ * faq.texi: Fix help key bindings.
+
+2004-03-17 Luc Teirlinck <teirllm@auburn.edu>
+
+ * info.texi (Advanced): Replace @unnumberedsubsec by @subheading
+ (as suggested by Karl Berry). Update information about colored
+ stars in menus. Add new subheading describing M-n.
+
+2004-03-12 Richard M. Stallman <rms@gnu.org>
+
+ * cl.texi (Top): Rename top node's title.
+
+2004-03-08 Karl Berry <karl@gnu.org>
+
+ * info.texi: \input texinfo.tex instead of just texinfo, to avoid
+ problems making the texinfo distribution.
+
+2004-02-29 Simon Josefsson <jas@extundo.com>
+
+ * smtpmail.texi (Authentication): Changed the list of supported
+ authentication mechanisms from CRAM-MD5, PLAIN and LOGIN-MD5 to
+ CRAM-MD5 and LOGIN, tiny patch from Andreas Voegele
+ <voegelas@gmx.net>.
+
+2004-02-29 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in (mostlyclean, clean, maintainer-clean):
+ Use $(DEL) instead of rm, and ignore exit code.
+
+2004-02-29 Kai Grossjohann <kgrossjo@eu.uu.net>
+
+ Tramp version 2.0.39 released.
+
+2004-02-29 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi (Customizing Completion): Explain new functions
+ `tramp-parse-shostkeys' and `tramp-parse-sknownhosts'.
+ (all): Savannah URLs unified to "http://savannah.nongnu.org".
+ (Top): Refer to Savannah mailing list as the major one. Mention
+ older mailing lists in HTML mode only.
+ (Auto-save and Backup): Add auto-save. Based on wording of Kai.
+ (Frequently Asked Questions): Remote hosts must not be Unix-like
+ for "smb" method.
+ (Password caching): New node.
+ (External transfer methods): Refer to password caching for "smb"
+ method.
+
+2004-02-17 Karl Berry <karl@gnu.org>
+
+ * info.texi (Help-Int): Mention the new line number feature.
+
+2004-02-14 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses.texi (Advanced Features): New functionality for
+ ses-set-header-row (defaults to current row unless C-u used).
+ (Acknowledgements): Add Stefan Monnier.
+
+2003-12-29 Kevin Ryde <user42@zip.com.au>
+
+ * viper.texi (Vi Macros): Fix reference to the Emacs manual.
+
+2003-11-30 Kai Grossjohann <kai.grossjohann@gmx.net>
+
+ Tramp version 2.0.38 released.
+
+ * tramp.texi (Remote shell setup): Warn of environment variables
+ FRUMPLE if user frumple exists. Suggested by Sven Gabriel
+ <sven.gabriel@imk.fzk.de>.
+ (Configuration): Tramp now chooses base64/uuencode
+ automatically. Update wording accordingly.
+ (Top): More description for the `Default Method' menu entry.
+ (Default Method): Use @code, not @var, for Lisp variables.
+ (Default Method): New subsection `Which method is the right one
+ for me?' Suggested by Christian Kirsch.
+ (Configuration): Pointer to new subsection added.
+ (Default Method): Too many "use" in one sentence.
+ Rephrase. Reported by Christian Kirsch.
+ (Filename Syntax): Old `su' example is probably a left-over from
+ the sm/su method naming. Replace with `ssh', instead.
+ (External transfer methods, Auto-save and Backup):
+ Typo fixes.
+
+2003-11-02 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi (all): Harmonize all occurences of @tramp{}.
+ (Top): Mention japanese manual only if flag `jamanual' is set.
+ Insert section `Japanese manual' in menu.
+
+2003-11-26 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * eshell.texi (Known Problems): Add doc item.
+
+2003-11-22 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * cc-mode.texi: Update for CC Mode 5.30.
+
+ Note: Please refrain from doing purely cosmetic changes like
+ removing trailing whitespace in this manual; it clobbers cvs
+ merging for no good reason.
+
+2003-11-02 Jesper Harder <harder@ifa.au.dk> (tiny change)
+
+ * man/ediff.texi, man/tramp.texi, man/vip.texi, man/viper.texi:
+ * man/widget.texi, man/woman.texi: Replace @sc{ascii} and ASCII with
+ @acronym{ASCII}.
+
+2003-10-26 Karl Berry <karl@gnu.org>
+
+ * info.texi (Info Search): Echo area, not echo are. From Debian
+ diff.
+
+2003-10-26 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * widget.texi (Defining New Widgets): Document new beavior of
+ :buttons and :children keywords.
+
+2003-10-22 Miles Bader <miles@gnu.org>
+
+ * Makefile.in (info): Move before $(top_srcdir)/info.
+
+2003-10-17 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * tramp.texi (Inline methods): Small grammar fix.
+ (External transfer methods): Likewise.
+
+2003-10-08 Nick Roberts <nick@nick.uklinux.net>
+
+ * speedbar.texi: Remove paragraph for GUD that is no longer true.
+
+2003-10-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * texinfo.tex: Replace `%' in arch tagline by @ignore.
+
+2003-09-30 Richard M. Stallman <rms@gnu.org>
+
+ * dired-x.texi (Miscellaneous Commands): Delete M-g, w, T.
+
+ * widget.texi (User Interface): Fix typos.
+
+ * pcl-cvs.texi, cl.texi, woman.texi, ediff.texi: Fix @strong{Note:}.
+
+2003-09-29 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * pcl-cvs.texi (Selected Files): Fix typo.
+
+2003-09-21 Karl Berry <karl@gnu.org>
+
+ * info.texi (] and [ commands): No period at end of section title.
+
+2003-09-04 Miles Bader <miles@gnu.org>
+
+ * Makefile.in (top_srcdir): New variable.
+ ($(top_srcdir)/info): New rule.
+ (info): Depend on it.
+
+2003-09-03 Peter Runestig <peter@runestig.com>
+
+ * makefile.w32-in: New file.
+
+2003-08-26 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * widget.texi (User Interface): Explain the need of static text
+ around an editable field.
+
+2003-08-19 Luc Teirlinck <teirllm@mail.auburn.edu>
+
+ * widget.texi (Basic Types): The argument to `:help-echo' can now
+ be a form that evaluates to a string.
+
+2003-08-18 Kim F. Storm <storm@cua.dk>
+
+ * calc.texi (Queries in Macros): Update xref to keyboard macro query.
+
+2003-08-16 Richard M. Stallman <rms@gnu.org>
+
+ * dired-x.texi (Shell Command Guessing): Explain *.
+
+2003-08-16 Chunyu Wang <spr@db.cs.hit.edu.cn> (tiny change)
+
+ * pcl-cvs.texi (Log Edit Mode): Fix key binding for
+ log-edit-insert-changelog.
+
+2003-08-03 Karl Berry <karl@gnu.org>
+
+ * info.texi: Need @contents.
+
+2003-07-20 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+
+ Tramp version 2.0.36 released.
+
+ * tramp.texi (Remote shell setup): Explain about problems with
+ non-Bourne commands in ~/.profile and ~/.shrc.
+
+2003-07-07 Luc Teirlinck <teirllm@mail.auburn.edu>
+
+ * info.texi (Help-Inv, Help-M, Help-Xref): Update following
+ renaming of `vis-mode' to `visible-mode'.
+
+2003-07-04 Luc Teirlinck <teirllm@mail.auburn.edu>
+
+ * info.texi (Top, Help-Small-Screen): Remove accidentally added
+ next, prev and up pointers.
+
+2003-07-02 Luc Teirlinck <teirllm@mail.auburn.edu>
+
+ * info.texi (Help): Mention existence of Emacs and stand-alone
+ Info at the very beginning of the tutorial.
+ (Help-Inv): New node.
+ (Help-]): New node.
+ (Help-M): Systematically point out the differences between default
+ Emacs and stand-alone versions. Delete second menu.
+ (Help-Xref): Systematically point out the differences between
+ default Emacs and stand-alone versions.
+ (Help-Int): Change `l' example.
+ (Expert Info): Fix typos.
+ (Emacs Info Variables): Mention `Info-hide-note-references' and
+ new default for `Info-scroll-prefer-subnodes'.
+
+2003-06-17 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+
+ Version 2.0.35 of Tramp released.
+
+ * tramp.texi: From Michael Albinus <Michael.Albinus@alcatel.de>:
+ (Inline methods): Add methods `remsh' and `plink1'.
+ (External transfer methods): Add method `remcp'.
+ (Multi-hop Methods): Add method `remsh'.
+ Small patch from Adrian Aichner <adrian@xemacs.org>:
+ Fix minor typos.
+ (Concept Index): Added to make manual searchable via
+ `Info-index'.
+ (Version Control): Add cindex entry.
+
+2003-05-24 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+
+ * trampver.texi: Version 2.0.34 released.
+
+2003-05-03 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * faq.texi: Improve previous changes.
+
+2003-05-02 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * faq.texi: Update copyright and maintenance details.
+ Update some package URLs, versions, and maintainers.
+ Remove many references to the Emacs Lisp Archive.
+
+2003-04-23 Simon Josefsson <jas@extundo.com>
+
+ * smtpmail.texi: Fix license (the invariant sections mentioned has
+ never been part of the smtp manual). Align info dir entry with
+ other emacs packages.
+
+2003-04-08 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi: Version 2.0.33 released.
+ Remove installation chapter. Remove XEmacs specifics.
+
+2003-03-29 Richard M. Stallman <rms@gnu.org>
+
+ * tramp.texi (Top): Undo the previous renaming.
+ (emacs-other-name, emacs-other-dir, emacs-other-file-name): Delete.
+
+2003-03-29 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+
+ * Makefile.in (../info/tramp): Compile Emacs, instead of XEmacs,
+ version of manual.
+
+ * tramp.texi (Auto-save and Backup): New node.
+
+2003-03-29 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi (Top): Include trampver.texi. Rename "Emacs" to "GNU
+ Emacs" in order to have better differentiation to "XEmacs".
+ `emacs-other-name', `emacs-other-dir' and `emacs-other-file-name'
+ are new macros in order to point to the other Emacs flavor where
+ appropriate. In info case, point to node `Installation' in order
+ to explain how to generate the other way. In html case, make a
+ link to the other html file.
+ (Obtaining TRAMP): Added a paragraph saying to perform `autoconf'
+ after CVS checkout/update.
+ (Installation): Completely rewritten.
+ (Installation parameters, Load paths): New sections under
+ `Installation'.
+
+2003-02-28 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+
+ * tramp.texi: Version 2.0.30 released.
+ Replace word "path" with "localname" where used as a component of
+ a Tramp file name.
+
+2003-02-28 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi (Frequently Asked Questions): `tramp-chunksize'
+ introduced.
+ (Installation): Explain what to do if files from the tramp/contrib
+ directory are needed.
+
+2003-02-23 Alex Schroeder <alex@emacswiki.org>
+
+ * smtpmail.texi (How Mail Works): New.
+
+2003-02-22 Alex Schroeder <alex@emacswiki.org>
+
+ * smtpmail.texi: New file.
+
+ * Makefile.in: Build SMTP manual.
+
+2003-02-05 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+
+ * tramp.texi: Version 2.0.29 released.
+ (Installation): In Emacs, use M-x texinfo-format-buffer RET, not
+ M-x makeinfo-buffer RET. Reported by gebser@ameritech.net.
+
+2003-02-01 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi (Frequently Asked Questions): Explain a workaround if
+ another package loads accidently Ange-FTP.
+
+2003-01-24 Michael Albinus <Michael.Albinus@alcatel.de>
+
+ * tramp.texi (Customizing Completion): Add function
+ `tramp-parse-sconfig'. Change example of
+ `tramp-set-completion-function', because parsing of ssh config
+ files looks more natural.
+
+2003-01-15 ShengHuo ZHU <zsh@cs.rochester.edu>
+
+ * gnus.texi: Do not use `path' in several locations.
+
+2002-12-26 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+
+ * tramp.texi (External transfer methods): New method `smb'. From
+ Michael Albinus.
+
+2002-11-05 Karl Berry <karl@gnu.org>
+
+ * info.texi (Info-fontify): Reorder face list to avoid bad line
+ breaks.
+
+2002-10-06 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+ * tramp.texi: Move @copying to standard place. Use
+ @insertcopying.
+
+2002-10-02 Karl Berry <karl@gnu.org>
+
+ * (ada-mode.texi autotype.texi calc.texi cc-mode.texi cl.texi
+ dired-x.texi ebrowse.texi ediff.texi emacs-mime.texi
+ eshell.texi eudc.texi faq.texi forms.texi idlwave.texi info.texi
+ message.texi mh-e.texi pcl-cvs.texi reftex.texi sc.texi ses.texi
+ speedbar.texi vip.texi viper.texi widget.texi woman.texi):
+ Per rms, update all manuals to use @copying instead of @ifinfo.
+ Also use @ifnottex instead of @ifinfo around the top node, where
+ needed for the sake of the HTML output.
+ (The Gnus manual is not fixed since it's not clear to me how it
+ works; and the Tramp manual already uses @copying, although in an
+ unusual way. All others were changed.)
+
+2002-09-10 Jonathan Yavner <jyavner@engineer.com>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add SES.
+ (../info/ses, ses.dvi): New targets.
+ * ses.texi: New file.
+
+2002-09-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * texinfo.tex: Update to texinfo 4.2.
+
+2002-08-27 Carsten Dominik <dominik@sand.science.uva.nl>
+
+ * reftex.texi: Update to RefTeX 4.19.
+
+2002-06-17 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add Tramp.
+ (../info/tramp, tramp.dvi): New targets.
+
+2002-01-04 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (DVI_TARGETS): Add calc.dvi.
+ (calc.dvi): Uncomment.
+
+2001-11-07 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (INFO_TARGETS): Add ../info/calc.
+ (../info/calc): New target.
+
+2001-10-20 Gerd Moellmann <gerd@gnu.org>
+
+ * (Version 21.1 released.)
+
+2001-10-05 Gerd Moellmann <gerd@gnu.org>
+
+ * Branch for 21.1.
+
+2001-04-14 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (../info/info): Use an explicit -o switch to
+ makeinfo.
+
+2001-03-05 Gerd Moellmann <gerd@gnu.org>
+
+ * Makefile.in (mostlyclean, maintainer-clean): Delete more files.
+
+2000-12-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (../info/idlwave): Use --no-split.
+
+2000-12-14 Dave Love <fx@gnu.org>
+
+ * Makefile.in (mostlyclean): Remove gnustmp.*
+ (gnus.dvi): Change rule to remove @latex stuff.
+
+2000-10-19 Eric M. Ludlam <zappo@ultranet.com>
+
+ * Makefile.in (Speedbar): Add build targets for speedbar.texi.
+
+2000-10-13 John Wiegley <johnw@gnu.org>
+
+ * Makefile.in: Add build targets for eshell.texi.
+
+2000-09-25 Gerd Moellmann <gerd@gnu.org>
+
+ * Makefile.in: Remove/comment speedbar stuff.
+
+2000-09-22 Dave Love <fx@gnu.org>
+
+ * Makefile.in: Add emacs-mime.
+
+2000-08-08 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (INFO_TARGETS): Add ../info/woman.
+ (DVI_TARGETS): Add woman.dvi.
+ (../info/woman, woman.dvi): New targets.
+
+2000-05-31 Stefan Monnier <monnier@cs.yale.edu>
+
+ * .cvsignore (*.tmp): New entry. Seems to be used for @macro.
+
+ * pcl-cvs.texi: New file.
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS: Add pcl-cvs.
+ (../info/pcl-cvs, pcl-cvs.dvi): New targets.
+
+2000-05-11 Gerd Moellmann <gerd@gnu.org>
+
+ * Makefile.in (INFO_TARGETS): Add info/ebrowse.
+ (../info/ebrowse, ebrowse.dvi): New targets.
+
+2000-01-13 Gerd Moellmann <gerd@gnu.org>
+
+ * Makefile.in (INFO_TARGETS): Add eudc.
+ (DVI_TARGETS): Add eudc.dvi.
+ (../info/eudc, eudc.dvi): New targets.
+
+2000-01-05 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (INFO_TARGETS): Rename emacs-faq to efaq (for
+ compatibility with 8+3 filesystems).
+ (../info/efaq): Rename from emacs-faq.
+
+2000-01-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add idlwave.
+ (../info/idlwave, idlwave.dvi): New targets.
+
+1999-10-23 Dave Love <fx@gnu.org>
+
+ * Makefile.in: Use autotype.texi.
+
+1999-10-12 Stefan Monnier <monnier@cs.yale.edu>
+
+ * Makefile.in (faq): Use ../info/emacs-faq.info (as specified in the
+ faq.texi file) rather than ../info/faq.
+
+1999-10-07 Gerd Moellmann <gerd@gnu.org>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add ada-mode.
+ (../info/ada-mode, ada-mode.dvi): New targets.
+
+1999-09-01 Dave Love <fx@gnu.org>
+
+ * Makefile.in: Add faq.
+
+1999-07-12 Richard Stallman <rms@gnu.org>
+
+ * Version 20.4 released.
+
+1998-08-19 Richard Stallman <rms@psilocin.ai.mit.edu>
+
+ * Version 20.3 released.
+
+1998-04-06 Andreas Schwab <schwab@gnu.org>
+
+ * Makefile.in (ENVADD): Enviroment vars to pass to texi2dvi. Use
+ it in dvi targets.
+ (../etc/GNU): Change to $(srcdir) first.
+
+1998-03-11 Carsten Dominik <cd@delysid.gnu.org>
+
+ * reftex.texi: Update for RefTeX version 3.22.
+
+1998-02-08 Richard Stallman <rms@psilocin.gnu.org>
+
+ * Makefile.in (reftex.dvi, ../info/reftex): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add the new targets.
+
+1997-09-23 Paul Eggert <eggert@twinsun.com>
+
+ * Makefile.in: Merge changes mistakenly made to `Makefile'.
+ (../info/viper, viper.dvi): Remove dependency on viper-cmd.texi.
+
+1997-09-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Version 20.2 released.
+
+1997-09-15 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Version 20.1 released.
+
+1997-07-10 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Makefile (../info/viper, viper.dvi): Delete viper-cmd.texi dep.
+
+1996-08-11 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Version 19.33 released.
+
+1996-07-31 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Version 19.32 released.
+
+1996-06-27 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * Makefile.in: Add rules for the Message manual.
+
+1996-06-26 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi: New version.
+
+ * message.texi: New manual.
+
+1996-06-20 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Makefile.in (All info targets): cd $(srcdir) to do the work.
+
+1996-06-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
+
+ * Makefile.in (All info targets): Specify $(srcdir) in input files.
+ Specify -I option.
+ (All dvi targets): Set the TEXINPUTS variable.
+
+1996-05-25 Karl Heuer <kwzh@gnu.ai.mit.edu>
+
+ * Version 19.31 released.
+
+1996-01-07 Richard Stallman <rms@whiz-bang.gnu.ai.mit.edu>
+
+ * Makefile.in (../info/ccmode): Rename from ../info/cc-mode.
+ (INFO_TARGETS): Use new name. This avoids name conflict on MSDOS.
+
+1995-11-29 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Makefile.in (../info/cc-mode, cc-mode.dvi): New targets.
+ (INFO_TARGETS): Add ../info/cc-mode.
+ (DVI_TARGETS): Add cc-mode.dvi.
+
+1996-05-25 Karl Heuer <kwzh@gnu.ai.mit.edu>
+
+ * Version 19.31 released.
+
+1995-11-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Version 19.30 released.
+
+1995-11-04 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi: New file.
+
+1995-11-04 Erik Naggum <erik@naggum.no>
+
+ * gnus.texi: File deleted.
+
+1995-11-02 Stephen Gildea <gildea@stop.mail-abuse.org>
+
+ * mh-e.texi: "Function Index" -> "Command Index" to work with
+ Emacs 19.30 C-h C-k support of separately-documented commands.
+
+1995-06-26 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Makefile.in (../info/ediff, ediff.dvi): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add those new targets.
+
+1995-04-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add viper targets.
+ (../info/viper, viper.dvi): New targets.
+
+1995-04-20 Kevin Rodgers <kevinr@ihs.com>
+
+ * dired-x.texi (Installation): Change the example to set
+ buffer-local variables like dired-omit-files-p in
+ dired-mode-hook.
+
+1995-04-17 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Makefile.in (INFO_TARGETS, DVI_TARGETS): Add mh-e targets.
+ (../info/mh-e, mh-e.dvi): New targets.
+
+1995-02-07 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
+
+ * Makefile.in (maintainer-clean): Rename from realclean.
+
+1994-11-23 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Makefile.in: New file.
+ * Makefile: File deleted.
+
+1994-11-19 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Makefile (TEXINDEX_OBJS): Variable deleted.
+ (texindex, texindex.o, getopt.o): Rules deleted.
+ All deps on texindex deleted.
+ (distclean): Don't delete texindex.
+ (mostlyclean): Don't delete *.o.
+ * texindex.c, getopt.c: Files deleted.
+
+1994-09-07 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * Version 19.26 released.
+
+1994-05-30 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.25 released.
+
+1994-05-23 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.24 released.
+
+1994-05-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.23 released.
+
+1994-04-17 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile: Delete spurious tab.
+
+1994-02-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile (.SUFFIXES): New rule.
+
+1994-01-15 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile (dired-x.dvi, ../info/dired-x): New targets.
+ (INFO_TARGETS, DVI_TARGETS): Add the new targets.
+
+1994-01-08 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile (../info/sc): Rename from sc.info.
+ (../info/cl): Likewise.
+ (INFO_TARGETS): Use new names.
+
+1993-12-04 Richard Stallman (rms@srarc2)
+
+ * getopt.c: New file.
+ * Makefile (TEXINDEX_OBJS): Use getopt.o in this dir, not ../lib-src.
+ (getopt.o): New rule.
+ (dvi): Don't depend on texindex.
+ (cl.dvi, forms.dvi, vip.dvi, gnus.dvi, sc.dvi):
+ Depend on texindex.
+
+1993-12-03 Richard Stallman (rms@srarc2)
+
+ * Makefile (../info/sc.info): Rename from ../info/sc.
+ (TEXI2DVI): New variable.
+ (cl.dvi forms.dvi, sc.dvi, vip.dvi, gnus.dvi, info.dvi):
+ Add explicit commands.
+ (TEXINDEX_OBJS): Delete duplicate getopt.o.
+
+1993-11-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.22 released.
+
+1993-11-18 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile (TEXINDEX_OBJS): Delete spurious period.
+
+1993-11-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.21 released.
+
+1993-11-15 Paul Eggert (eggert@twinsun.com)
+
+ * man/Makefile (../info/cl.info): Rename from ../info/cl.
+
+1993-11-15 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile (../etc/GNU): New target.
+ (EMACSSOURCES): Add gnu1.texi.
+
+1993-11-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile (realclean): Don't delete the Info files.
+
+1993-10-25 Brian Fox (bfox@albert.gnu.ai.mit.edu)
+
+ * forms.texi: Fix forms.texi so that it will format correctly.
+ Add missing `@end iftex', fix bad reference.
+
+ * info.texi, info-stn.texi: New files implement texinfo version of
+ `info' file.
+
+1993-10-20 Brian Fox (bfox@ai.mit.edu)
+
+ * Makefile: Fix targets for texindex, new info.texi files.
+ * info-stnd.texi: New file implements info for standalone info
+ reader.
+ * info.texi: Update to include recent changes to "../info/info".
+ New source file for ../info/info; includes info-stnd.texi.
+
+ * texindex.c: Include "../src/config.h" if building in emacs.
+
+ * Makefile: Change all files to FILENAME.texi, force all targets
+ to be FILENAME, not FILENAME.info. This changes sc.texinfo,
+ vip.texinfo, forms.texinfo, cl.texinfo.
+ Add target to build texindex.c, defining `emacs'.
+
+ * forms.texi: Install new file to match version 2.3 of forms.el.
+
+1993-08-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.19 released.
+
+1993-08-10 Simon Leinen (simon@lia.di.epfl.ch)
+
+ * sc.texinfo: Fix info file name.
+
+ * Makefile (info): Add gnus and sc.
+ (dvi): Add gnus.dvi and sc.dvi.
+ (../info/sc, sc.dvi): New targets.
+
+1993-08-08 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.18 released.
+
+1993-07-20 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Makefile: Fix source file names of the separate manuals.
+ (gnus.dvi, ../info/gnus): New targets.
+
+1993-07-18 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * Version 19.17 released.
+
+1993-07-10 Richard Stallman (rms@mole.gnu.ai.mit.edu)
+
+ * split-man: Fix typos in last change.
+
+1993-07-06 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
+
+ * Version 19.16 released.
+
+1993-06-19 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * version 19.15 released.
+
+1993-06-18 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
+
+ * Makefile (distclean): It's rm, not rf.
+
+1993-06-17 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * Version 19.14 released.
+
+1993-06-16 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * Makefile: New file.
+
+1993-06-08 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * Version 19.13 released.
+
+1993-05-27 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
+
+ * Version 19.9 released.
+
+1993-05-25 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * Version 19.8 released.
+
+1993-05-22 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
+
+ * Version 19.7 released.
+
+1990-08-30 David Lawrence (tale@pogo.ai.mit.edu)
+
+ * gnus.texinfo: New file. Removed installation instructions.
+
+1990-05-25 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
+
+ * texindex.tex: If USG, include sys/types.h and sys/fcntl.h.
+
+1989-01-17 Robert J. Chassell (bob@rice-chex.ai.mit.edu)
+
+ * texinfo.tex: Change spelling of `\sc' font to `\smallcaps' and
+ then define `\sc' as the command for smallcaps in Texinfo. This
+ means that the @sc command will produce small caps. bfox has
+ made the corresponding change to makeinfo and texinfm.el.
+
+1988-08-16 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu)
+
+ * vip.texinfo: Remove menu entry Adding Lisp Code in node
+ Customization since the menu entry did not point to anything.
+ Also add an @finalout command to remove overfull hboxes from the
+ printed output.
+
+ * cl.texinfo: Add @bye, \input line and @settitle to file.
+ This file is clearly intended to be a chapter of some other work,
+ but the other work does not yet exist.
+
+1988-07-25 Robert J. Chassell (bob@frosted-flakes.ai.mit.edu)
+
+ * texinfo.texinfo: Three typos corrected.
+
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; fill-column: 79
+;; add-log-time-zone-rule: t
+;; End:
+
+ Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
+ 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+
+ 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 3, 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.
+
+;; arch-tag: 08b2903e-900c-4c72-a4a9-e76416a80803
diff --git a/man/Makefile.in b/doc/misc/Makefile.in
index 00088b74b51..93982f419dc 100644
--- a/man/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -1,4 +1,4 @@
-#### Makefile for the Emacs Manual and other documentation.
+#### Makefile for documentation other than the Emacs manual.
# Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
# 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@@ -20,7 +20,8 @@
# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
-# Where to find the source code. $(srcdir) will be the man
+
+# Where to find the source code. $(srcdir) will be the man-aux
# subdirectory of the source tree. This is
# set by the configure script's `--srcdir' option.
srcdir=@srcdir@
@@ -29,177 +30,212 @@ top_srcdir=@top_srcdir@
# Tell make where to find source files; this is needed for the makefiles.
VPATH=@srcdir@
+## Where the output files go.
+## Note that the setfilename command in the .texi files assumes this.
+infodir=../../info
# The makeinfo program is part of the Texinfo distribution.
# Use --force so that it generates output even if there are errors.
MAKEINFO = makeinfo --force
-INFO_TARGETS = ../info/emacs ../info/ccmode ../info/cl \
- ../info/dired-x ../info/ediff ../info/forms ../info/gnus \
- ../info/message ../info/sieve ../info/pgg ../info/emacs-mime \
- ../info/info ../info/mh-e ../info/reftex \
- ../info/sc ../info/vip ../info/viper ../info/widget \
- ../info/efaq ../info/ada-mode ../info/autotype ../info/calc \
- ../info/idlwave ../info/eudc ../info/ebrowse ../info/pcl-cvs \
- ../info/woman ../info/eshell ../info/org ../info/url \
- ../info/speedbar ../info/tramp ../info/ses ../info/smtpmail \
- ../info/flymake ../info/newsticker ../info/rcirc ../info/erc
-DVI_TARGETS = emacs.dvi calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \
- ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \
- gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \
- reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \
- ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \
- pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \
- speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \
- newsticker.dvi emacs-xtra.dvi rcirc.dvi erc.dvi
-INFOSOURCES = info.texi
+
+INFO_TARGETS = \
+ $(infodir)/ada-mode \
+ $(infodir)/autotype \
+ $(infodir)/calc \
+ $(infodir)/ccmode \
+ $(infodir)/cl \
+ $(infodir)/dired-x \
+ $(infodir)/ebrowse \
+ $(infodir)/ediff \
+ $(infodir)/emacs-mime \
+ $(infodir)/erc \
+ $(infodir)/eshell \
+ $(infodir)/eudc \
+ $(infodir)/efaq \
+ $(infodir)/flymake \
+ $(infodir)/forms \
+ $(infodir)/gnus \
+ $(infodir)/idlwave \
+ $(infodir)/info \
+ $(infodir)/message \
+ $(infodir)/mh-e \
+ $(infodir)/newsticker \
+ $(infodir)/org \
+ $(infodir)/pcl-cvs \
+ $(infodir)/pgg \
+ $(infodir)/rcirc \
+ $(infodir)/remember \
+ $(infodir)/reftex \
+ $(infodir)/sc \
+ $(infodir)/ses \
+ $(infodir)/sieve \
+ $(infodir)/smtpmail \
+ $(infodir)/speedbar \
+ $(infodir)/tramp \
+ $(infodir)/url \
+ $(infodir)/vip \
+ $(infodir)/viper \
+ $(infodir)/widget \
+ $(infodir)/woman
+
+DVI_TARGETS = \
+ ada-mode.dvi \
+ autotype.dvi \
+ calc.dvi \
+ cc-mode.dvi \
+ cl.dvi \
+ dired-x.dvi \
+ ebrowse.dvi \
+ ediff.dvi \
+ emacs-mime.dvi \
+ erc.dvi \
+ eshell.dvi \
+ eudc.dvi \
+ faq.dvi \
+ flymake.dvi \
+ forms.dvi \
+ gnus.dvi \
+ idlwave.dvi \
+ info.dvi \
+ message.dvi \
+ mh-e.dvi \
+ newsticker.dvi \
+ org.dvi \
+ pcl-cvs.dvi \
+ pgg.dvi \
+ rcirc.dvi \
+ reftex.dvi \
+ remember.dvi \
+ sc.dvi \
+ ses.dvi \
+ sieve.dvi \
+ smtpmail.dvi \
+ speedbar.dvi \
+ tramp.dvi \
+ url.dvi \
+ vip.dvi \
+ viper.dvi \
+ widget.dvi \
+ woman.dvi
+
+
+TEXI2DVI = texi2dvi
# The following rule does not work with all versions of `make'.
.SUFFIXES: .texi .dvi
.texi.dvi:
- texi2dvi $<
+ $(TEXI2DVI) $<
-TEXI2DVI = texi2dvi
ENVADD = TEXINPUTS="$(srcdir):$(TEXINPUTS)" MAKEINFO="$(MAKEINFO) -I$(srcdir)"
-EMACS_XTRA=\
- $(srcdir)/arevert-xtra.texi \
- $(srcdir)/cal-xtra.texi \
- $(srcdir)/dired-xtra.texi \
- $(srcdir)/picture-xtra.texi \
- $(srcdir)/emerge-xtra.texi \
- $(srcdir)/vc-xtra.texi \
- $(srcdir)/vc1-xtra.texi \
- $(srcdir)/vc2-xtra.texi \
- $(srcdir)/fortran-xtra.texi \
- $(srcdir)/msdog-xtra.texi
-
-EMACSSOURCES= \
- ${srcdir}/emacs.texi \
- ${srcdir}/doclicense.texi \
- ${srcdir}/gpl.texi \
- ${srcdir}/screen.texi \
- ${srcdir}/commands.texi \
- ${srcdir}/entering.texi \
- ${srcdir}/basic.texi \
- ${srcdir}/mini.texi \
- ${srcdir}/m-x.texi \
- ${srcdir}/help.texi \
- ${srcdir}/mark.texi \
- ${srcdir}/killing.texi \
- ${srcdir}/regs.texi \
- ${srcdir}/display.texi \
- ${srcdir}/search.texi \
- ${srcdir}/fixit.texi \
- ${srcdir}/files.texi \
- ${srcdir}/buffers.texi \
- ${srcdir}/windows.texi \
- ${srcdir}/frames.texi \
- ${srcdir}/mule.texi \
- ${srcdir}/major.texi \
- ${srcdir}/indent.texi \
- ${srcdir}/text.texi \
- ${srcdir}/programs.texi \
- ${srcdir}/building.texi \
- ${srcdir}/maintaining.texi \
- ${srcdir}/abbrevs.texi \
- ${srcdir}/sending.texi \
- ${srcdir}/rmail.texi \
- ${srcdir}/dired.texi \
- ${srcdir}/calendar.texi \
- ${srcdir}/misc.texi \
- ${srcdir}/custom.texi \
- ${srcdir}/trouble.texi \
- ${srcdir}/cmdargs.texi \
- ${srcdir}/xresources.texi \
- ${srcdir}/anti.texi \
- ${srcdir}/macos.texi \
- ${srcdir}/msdog.texi \
- ${srcdir}/gnu.texi \
- ${srcdir}/glossary.texi \
- ${srcdir}/ack.texi \
- ${srcdir}/kmacro.texi \
- $(EMACS_XTRA)
-
-info: $(top_srcdir)/info $(INFO_TARGETS)
-
-$(top_srcdir)/info:
+
+info: $(infodir) $(INFO_TARGETS)
+
+$(infodir):
mkdir $@
dvi: $(DVI_TARGETS)
+
# Note that all the Info targets build the Info files
# in srcdir. There is no provision for Info files
# to exist in the build directory.
# In a distribution of Emacs, the Info files should be up to date.
-# The following target uses an explicit -o switch to work around
-# the @setfilename directive in info.texi, which is required for
-# the Texinfo distribution.
-
-../info/info: ${INFOSOURCES}
- cd $(srcdir); $(MAKEINFO) --no-split info.texi -o $@
-
-info.dvi: ${INFOSOURCES}
- $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi
-
-../info/emacs: ${EMACSSOURCES}
- cd $(srcdir); $(MAKEINFO) emacs.texi
+## "short" target names for convenience, to just rebuild one manual.
+ada-mode : $(infodir)/ada-mode
+$(infodir)/ada-mode: ada-mode.texi
+ cd $(srcdir); $(MAKEINFO) ada-mode.texi
+ada-mode.dvi: ada-mode.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi
-emacs.dvi: ${EMACSSOURCES}
- $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs.texi
+autotype : $(infodir)/autotype
+$(infodir)/autotype: autotype.texi
+ cd $(srcdir); $(MAKEINFO) autotype.texi
+autotype.dvi: autotype.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi
-# This target is here so you could easily get the list of the *.texi
-# files which belong to the Emacs manual (as opposed to the separate
-# manuals for CL, CC Mode, Ebrowse, etc.). With this target, you can
-# say things like "grep foo `make emacsman`".
-emacsman:
- @echo $(EMACSSOURCES)
+calc : $(infodir)/calc
+$(infodir)/calc: calc.texi
+ cd $(srcdir); $(MAKEINFO) calc.texi
+calc.dvi: calc.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi
-../info/ccmode: cc-mode.texi
+ccmode : $(infodir)/ccmode
+$(infodir)/ccmode: cc-mode.texi
cd $(srcdir); $(MAKEINFO) cc-mode.texi
cc-mode.dvi: cc-mode.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/cc-mode.texi
-../info/ada-mode: ada-mode.texi
- cd $(srcdir); $(MAKEINFO) ada-mode.texi
-ada-mode.dvi: ada-mode.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/ada-mode.texi
-
-../info/pcl-cvs: pcl-cvs.texi
- cd $(srcdir); $(MAKEINFO) pcl-cvs.texi
-pcl-cvs.dvi: pcl-cvs.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi
-
-../info/eshell: eshell.texi
- cd $(srcdir); $(MAKEINFO) eshell.texi
-eshell.dvi: eshell.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi
-
-../info/cl: cl.texi
+cl : $(infodir)/cl
+$(infodir)/cl: cl.texi
cd $(srcdir); $(MAKEINFO) cl.texi
cl.dvi: cl.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi
-../info/dired-x: dired-x.texi
+dired-x : $(infodir)/dired-x
+$(infodir)/dired-x: dired-x.texi
cd $(srcdir); $(MAKEINFO) dired-x.texi
dired-x.dvi: dired-x.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/dired-x.texi
-../info/ediff: ediff.texi
+ebrowse : $(infodir)/ebrowse
+$(infodir)/ebrowse: ebrowse.texi
+ cd $(srcdir); $(MAKEINFO) ebrowse.texi
+ebrowse.dvi: ebrowse.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi
+
+ediff : $(infodir)/ediff
+$(infodir)/ediff: ediff.texi
cd $(srcdir); $(MAKEINFO) ediff.texi
ediff.dvi: ediff.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/ediff.texi
-emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA)
- $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-xtra.texi
+emacs-mime : $(infodir)/emacs-mime
+$(infodir)/emacs-mime: emacs-mime.texi
+ cd $(srcdir); $(MAKEINFO) --enable-encoding emacs-mime.texi
+emacs-mime.dvi: emacs-mime.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi
+
+erc : $(infodir)/erc
+$(infodir)/erc: erc.texi
+ cd $(srcdir); $(MAKEINFO) erc.texi
+erc.dvi: erc.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi
-../info/forms: forms.texi
+eshell : $(infodir)/eshell
+$(infodir)/eshell: eshell.texi
+ cd $(srcdir); $(MAKEINFO) eshell.texi
+eshell.dvi: eshell.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/eshell.texi
+
+eudc : $(infodir)/eudc
+$(infodir)/eudc: eudc.texi
+ cd $(srcdir); $(MAKEINFO) eudc.texi
+eudc.dvi: eudc.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi
+
+efaq : $(infodir)/efaq
+$(infodir)/efaq: faq.texi
+ cd $(srcdir); $(MAKEINFO) faq.texi
+faq.dvi: faq.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi
+
+flymake : $(infodir)/flymake
+$(infodir)/flymake: flymake.texi
+ cd $(srcdir); $(MAKEINFO) flymake.texi
+flymake.dvi: flymake.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi
+
+forms : $(infodir)/forms
+$(infodir)/forms: forms.texi
cd $(srcdir); $(MAKEINFO) forms.texi
forms.dvi: forms.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/forms.texi
# gnus/message/emacs-mime/sieve/pgg are part of Gnus:
-../info/gnus: gnus.texi gnus-faq.texi
+gnus : $(infodir)/gnus
+$(infodir)/gnus: gnus.texi gnus-faq.texi
cd $(srcdir); $(MAKEINFO) gnus.texi
gnus.dvi: gnus.texi gnus-faq.texi
sed -e '/@iflatex/,/@end iflatex/d' ${srcdir}/gnus.texi > gnustmp.texi
@@ -207,162 +243,157 @@ gnus.dvi: gnus.texi gnus-faq.texi
cp gnustmp.dvi $*.dvi
rm gnustmp.*
-../info/message: message.texi
+# This is produced with --no-split to avoid making files whose
+# names clash on DOS 8+3 filesystems
+idlwave : $(infodir)/idlwave
+$(infodir)/idlwave: idlwave.texi
+ cd $(srcdir); $(MAKEINFO) --no-split idlwave.texi
+idlwave.dvi: idlwave.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi
+
+# The following target uses an explicit -o switch to work around
+# the @setfilename directive in info.texi, which is required for
+# the Texinfo distribution.
+###info : $(infodir)/info # circular!
+$(infodir)/info: info.texi
+ cd $(srcdir); $(MAKEINFO) --no-split info.texi -o $@
+info.dvi: info.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/info.texi
+
+message : $(infodir)/message
+$(infodir)/message: message.texi
cd $(srcdir); $(MAKEINFO) message.texi
message.dvi: message.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/message.texi
-../info/sieve: sieve.texi
- cd $(srcdir); $(MAKEINFO) sieve.texi
-sieve.dvi: sieve.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi
+mh-e : $(infodir)/mh-e
+$(infodir)/mh-e: mh-e.texi
+ cd $(srcdir); $(MAKEINFO) mh-e.texi
+mh-e.dvi: mh-e.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi
-../info/emacs-mime: emacs-mime.texi
- cd $(srcdir); $(MAKEINFO) --enable-encoding emacs-mime.texi
-emacs-mime.dvi: emacs-mime.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/emacs-mime.texi
+newsticker : $(infodir)/newsticker
+$(infodir)/newsticker: newsticker.texi
+ cd $(srcdir); $(MAKEINFO) newsticker.texi
+newsticker.dvi: newsticker.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi
+
+org : $(infodir)/org
+$(infodir)/org: org.texi
+ cd $(srcdir); $(MAKEINFO) org.texi
+org.dvi: org.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi
-../info/pgg: pgg.texi
+pcl-cvs : $(infodir)/pcl-cvs
+$(infodir)/pcl-cvs: pcl-cvs.texi
+ cd $(srcdir); $(MAKEINFO) pcl-cvs.texi
+pcl-cvs.dvi: pcl-cvs.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/pcl-cvs.texi
+
+pgg : $(infodir)/pgg
+$(infodir)/pgg: pgg.texi
cd $(srcdir); $(MAKEINFO) pgg.texi
pgg.dvi: pgg.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/pgg.texi
-../info/mh-e: mh-e.texi
- cd $(srcdir); $(MAKEINFO) mh-e.texi
-mh-e.dvi: mh-e.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/mh-e.texi
+rcirc : $(infodir)/rcirc
+$(infodir)/rcirc: rcirc.texi
+ cd $(srcdir); $(MAKEINFO) rcirc.texi
+rcirc.dvi: rcirc.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi
-../info/reftex: reftex.texi
+reftex : $(infodir)/reftex
+$(infodir)/reftex: reftex.texi
cd $(srcdir); $(MAKEINFO) reftex.texi
reftex.dvi: reftex.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/reftex.texi
-../info/sc: sc.texi
+remember : $(infodir)/remember
+$(infodir)/remember: remember.texi
+ cd $(srcdir); $(MAKEINFO) remember.texi
+remember.dvi: remember.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/remember.texi
+
+sc : $(infodir)/sc
+$(infodir)/sc: sc.texi
cd $(srcdir); $(MAKEINFO) sc.texi
sc.dvi: sc.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/sc.texi
-../info/vip: vip.texi
- cd $(srcdir); $(MAKEINFO) vip.texi
-vip.dvi: vip.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi
-
-../info/viper: viper.texi
- cd $(srcdir); $(MAKEINFO) viper.texi
-viper.dvi: viper.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi
-
-../info/widget: widget.texi
- cd $(srcdir); $(MAKEINFO) widget.texi
-widget.dvi: widget.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi
-
-../info/efaq: faq.texi
- cd $(srcdir); $(MAKEINFO) faq.texi
-faq.dvi: faq.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/faq.texi
-
-../etc/GNU: gnu1.texi gnu.texi
- cd $(srcdir) && makeinfo --no-headers -o ../etc/GNU gnu1.texi
-
-../info/autotype: autotype.texi
- cd $(srcdir); $(MAKEINFO) autotype.texi
-autotype.dvi: autotype.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/autotype.texi
-
-../info/calc: calc.texi
- cd $(srcdir); $(MAKEINFO) calc.texi
-
-calc.dvi: calc.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/calc.texi
-
-# This is produced with --no-split to avoid making files whose
-# names clash on DOS 8+3 filesystems
-../info/idlwave: idlwave.texi
- cd $(srcdir); $(MAKEINFO) --no-split idlwave.texi
-idlwave.dvi: idlwave.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/idlwave.texi
-
-../info/eudc: eudc.texi
- cd $(srcdir); $(MAKEINFO) eudc.texi
-eudc.dvi: eudc.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/eudc.texi
-
-../info/ebrowse: ebrowse.texi
- cd $(srcdir); $(MAKEINFO) ebrowse.texi
-ebrowse.dvi: ebrowse.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/ebrowse.texi
-
-../info/woman: woman.texi
- cd $(srcdir); $(MAKEINFO) woman.texi
-woman.dvi: woman.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi
+ses : $(infodir)/ses
+$(infodir)/ses: ses.texi
+ cd $(srcdir); $(MAKEINFO) ses.texi
+ses.dvi: ses.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi
-../info/org: org.texi
- cd $(srcdir); $(MAKEINFO) org.texi
-org.dvi: org.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/org.texi
+sieve : $(infodir)/sieve
+$(infodir)/sieve: sieve.texi
+ cd $(srcdir); $(MAKEINFO) sieve.texi
+sieve.dvi: sieve.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/sieve.texi
-../info/url: url.texi
- cd $(srcdir); $(MAKEINFO) url.texi
-url.dvi: url.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi
+smtpmail : $(infodir)/smtpmail
+$(infodir)/smtpmail: smtpmail.texi
+ cd $(srcdir); $(MAKEINFO) smtpmail.texi
+smtpmail.dvi: smtpmail.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi
-../info/speedbar: speedbar.texi
+speedbar : $(infodir)/speedbar
+$(infodir)/speedbar: speedbar.texi
cd $(srcdir); $(MAKEINFO) speedbar.texi
speedbar.dvi: speedbar.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/speedbar.texi
-../info/tramp: tramp.texi trampver.texi
+tramp : $(infodir)/tramp
+$(infodir)/tramp: tramp.texi trampver.texi
cd $(srcdir); $(MAKEINFO) -D emacs tramp.texi
tramp.dvi: tramp.texi trampver.texi
$(ENVADD) $(TEXI2DVI) ${srcdir}/tramp.texi
-../info/ses: ses.texi
- cd $(srcdir); $(MAKEINFO) ses.texi
-ses.dvi: ses.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/ses.texi
+url : $(infodir)/url
+$(infodir)/url: url.texi
+ cd $(srcdir); $(MAKEINFO) url.texi
+url.dvi: url.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/url.texi
-../info/smtpmail: smtpmail.texi
- cd $(srcdir); $(MAKEINFO) smtpmail.texi
-smtpmail.dvi: smtpmail.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/smtpmail.texi
+vip : $(infodir)/vip
+$(infodir)/vip: vip.texi
+ cd $(srcdir); $(MAKEINFO) vip.texi
+vip.dvi: vip.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/vip.texi
-../info/flymake: flymake.texi
- cd $(srcdir); $(MAKEINFO) flymake.texi
-flymake.dvi: flymake.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/flymake.texi
+viper : $(infodir)/viper
+$(infodir)/viper: viper.texi
+ cd $(srcdir); $(MAKEINFO) viper.texi
+viper.dvi: viper.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/viper.texi
-../info/newsticker: newsticker.texi
- cd $(srcdir); $(MAKEINFO) newsticker.texi
-newsticker.dvi: newsticker.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/newsticker.texi
+widget : $(infodir)/widget
+$(infodir)/widget: widget.texi
+ cd $(srcdir); $(MAKEINFO) widget.texi
+widget.dvi: widget.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/widget.texi
-../info/rcirc: rcirc.texi
- cd $(srcdir); $(MAKEINFO) rcirc.texi
-rcirc.dvi: rcirc.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/rcirc.texi
+woman : $(infodir)/woman
+$(infodir)/woman: woman.texi
+ cd $(srcdir); $(MAKEINFO) woman.texi
+woman.dvi: woman.texi
+ $(ENVADD) $(TEXI2DVI) ${srcdir}/woman.texi
-../info/erc: erc.texi
- cd $(srcdir); $(MAKEINFO) erc.texi
-erc.dvi: erc.texi
- $(ENVADD) $(TEXI2DVI) ${srcdir}/erc.texi
mostlyclean:
- rm -f *.log *.cp *.fn *.ky *.pg *.vr core *.tp *.core gnustmp.*
+ rm -f *.log *.cp *.fn *.ky *.op *.ops *.pg *.vr core *.tp \
+ *.tps *.core gnustmp.*
+ rm -f *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc
clean: mostlyclean
rm -f *.dvi
distclean: clean
+# rm -f Makefile
maintainer-clean: distclean
- rm -f *.aux *.cps *.fns *.kys *.pgs *.vrs *.toc
for file in $(INFO_TARGETS); do rm -f $${file}*; done
-# Formerly this directory had texindex.c and getopt.c in it
-# and this makefile built them to make texindex.
-# That caused trouble because this is run entirely in the source directory.
-# Since we expect to get texi2dvi from elsewhere,
-# it is ok to expect texindex from elsewhere also.
+### Makefile ends here
diff --git a/man/ada-mode.texi b/doc/misc/ada-mode.texi
index 241149803e8..8f78d869343 100644
--- a/man/ada-mode.texi
+++ b/doc/misc/ada-mode.texi
@@ -1,5 +1,5 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/ada-mode
+@setfilename ../../info/ada-mode
@settitle Ada Mode
@copying
diff --git a/man/autotype.texi b/doc/misc/autotype.texi
index 7b51f3115ac..e173ed7d1f8 100644
--- a/man/autotype.texi
+++ b/doc/misc/autotype.texi
@@ -3,7 +3,7 @@
@c Copyright (C) 1994, 1995, 2001, 2002, 2003, 2004,
@c 2005, 2006, 2007 Free Software Foundation, Inc.
@c Author: Daniel.Pfeiffer@Informatik.START.dbp.de, fax (+49 69) 7588-2389
-@setfilename ../info/autotype
+@setfilename ../../info/autotype
@c @node Autotypist, Picture, Abbrevs, Top
@c @chapter Features for Automatic Typing
@settitle Features for Automatic Typing
diff --git a/man/calc.texi b/doc/misc/calc.texi
index e7aa34f8fec..b8a42f3c746 100644
--- a/man/calc.texi
+++ b/doc/misc/calc.texi
@@ -1,7 +1,7 @@
\input texinfo @c -*-texinfo-*-
@comment %**start of header (This is for running Texinfo on a region.)
@c smallbook
-@setfilename ../info/calc
+@setfilename ../../info/calc
@c [title]
@settitle GNU Emacs Calc 2.1 Manual
@setchapternewpage odd
@@ -123,29 +123,40 @@ Copyright @copyright{} 1990, 1991, 2001, 2002, 2003, 2004,
@insertcopying
@end titlepage
+
+@summarycontents
+
+@c [end]
+
+@contents
+
@c [begin]
-@ifinfo
+@ifnottex
@node Top, Getting Started, (dir), (dir)
@chapter The GNU Emacs Calculator
@noindent
@dfn{Calc} is an advanced desk calculator and mathematical tool
-that runs as part of the GNU Emacs environment.
+written by Dave Gillespie that runs as part of the GNU Emacs environment.
-This manual is divided into three major parts: ``Getting Started,''
-the ``Calc Tutorial,'' and the ``Calc Reference.'' The Tutorial
-introduces all the major aspects of Calculator use in an easy,
-hands-on way. The remainder of the manual is a complete reference to
-the features of the Calculator.
+This manual, also written (mostly) by Dave Gillespie, is divided into
+three major parts: ``Getting Started,'' the ``Calc Tutorial,'' and the
+``Calc Reference.'' The Tutorial introduces all the major aspects of
+Calculator use in an easy, hands-on way. The remainder of the manual is
+a complete reference to the features of the Calculator.
+@end ifnottex
+@ifinfo
For help in the Emacs Info system (which you are using to read this
file), type @kbd{?}. (You can also type @kbd{h} to run through a
longer Info tutorial.)
-
@end ifinfo
+
@menu
* Getting Started:: General description and overview.
+@ifinfo
* Interactive Tutorial::
+@end ifinfo
* Tutorial:: A step-by-step introduction for beginners.
* Introduction:: Introduction to the Calc reference manual.
@@ -179,7 +190,12 @@ longer Info tutorial.)
* Lisp Function Index:: Internal Lisp math functions.
@end menu
+@ifinfo
@node Getting Started, Interactive Tutorial, Top, Top
+@end ifinfo
+@ifnotinfo
+@node Getting Started, Tutorial, Top, Top
+@end ifnotinfo
@chapter Getting Started
@noindent
This chapter provides a general overview of Calc, the GNU Emacs
@@ -267,12 +283,6 @@ experience with GNU Emacs in order to get the most out of Calc,
this manual ought to be readable even if you don't know or use Emacs
regularly.
-@ifinfo
-The manual is divided into three major parts:@: the ``Getting
-Started'' chapter you are reading now, the Calc tutorial (chapter 2),
-and the Calc reference manual (the remaining chapters and appendices).
-@end ifinfo
-@iftex
The manual is divided into three major parts:@: the ``Getting
Started'' chapter you are reading now, the Calc tutorial (chapter 2),
and the Calc reference manual (the remaining chapters and appendices).
@@ -280,7 +290,6 @@ and the Calc reference manual (the remaining chapters and appendices).
@c This manual has been printed in two volumes, the @dfn{Tutorial} and the
@c @dfn{Reference}. Both volumes include a copy of the ``Getting Started''
@c chapter.
-@end iftex
If you are in a hurry to use Calc, there is a brief ``demonstration''
below which illustrates the major features of Calc in just a couple of
@@ -321,6 +330,7 @@ you can also go to the part of the manual describing any Calc key,
function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v},
respectively. @xref{Help Commands}.
+@ifnottex
The Calc manual can be printed, but because the manual is so large, you
should only make a printed copy if you really need it. To print the
manual, you will need the @TeX{} typesetting program (this is a free
@@ -347,7 +357,7 @@ or
@example
dvips calc.dvi
@end example
-
+@end ifnottex
@c Printed copies of this manual are also available from the Free Software
@c Foundation.
@@ -543,13 +553,13 @@ system. Type @kbd{d N} to return to normal notation.
Type @kbd{7.5}, then @kbd{s l a @key{RET}} to let @expr{a = 7.5} in these formulas.
(That's a letter @kbd{l}, not a numeral @kbd{1}.)
-@iftex
+@ifnotinfo
@strong{Help functions.} You can read about any command in the on-line
manual. Type @kbd{C-x * c} to return to Calc after each of these
commands: @kbd{h k t N} to read about the @kbd{t N} command,
@kbd{h f sqrt @key{RET}} to read about the @code{sqrt} function, and
@kbd{h s} to read the Calc summary.
-@end iftex
+@end ifnotinfo
@ifinfo
@strong{Help functions.} You can read about any command in the on-line
manual. Remember to type the letter @kbd{l}, then @kbd{C-x * c}, to
@@ -1146,16 +1156,16 @@ solid implementation of Lisp, and the humble task of calculating
turned out to be more open-ended than one might have expected.
Emacs Lisp didn't have built-in floating point math (now it does), so
-this had to be
-simulated in software. In fact, Emacs integers will only comfortably
-fit six decimal digits or so---not enough for a decent calculator. So
-I had to write my own high-precision integer code as well, and once I had
-this I figured that arbitrary-size integers were just as easy as large
-integers. Arbitrary floating-point precision was the logical next step.
-Also, since the large integer arithmetic was there anyway it seemed only
-fair to give the user direct access to it, which in turn made it practical
-to support fractions as well as floats. All these features inspired me
-to look around for other data types that might be worth having.
+this had to be simulated in software. In fact, Emacs integers would
+only comfortably fit six decimal digits or so---not enough for a decent
+calculator. So I had to write my own high-precision integer code as
+well, and once I had this I figured that arbitrary-size integers were
+just as easy as large integers. Arbitrary floating-point precision was
+the logical next step. Also, since the large integer arithmetic was
+there anyway it seemed only fair to give the user direct access to it,
+which in turn made it practical to support fractions as well as floats.
+All these features inspired me to look around for other data types that
+might be worth having.
Around this time, my friend Rick Koshi showed me his nifty new HP-28
calculator. It allowed the user to manipulate formulas as well as
@@ -1194,10 +1204,11 @@ Carl Witty, whose eagle eyes discovered many typographical and factual
errors in the Calc manual; Tim Kay, who drove the development of
Embedded mode; Ove Ewerlid, who made many suggestions relating to the
algebra commands and contributed some code for polynomial operations;
-Randal Schwartz, who suggested the @code{calc-eval} function; Robert
-J. Chassell, who suggested the Calc Tutorial and exercises; and Juha
+Randal Schwartz, who suggested the @code{calc-eval} function; Juha
Sarlin, who first worked out how to split Calc into quickly-loading
-parts. Bob Weiner helped immensely with the Lucid Emacs port.
+parts; Bob Weiner, who helped immensely with the Lucid Emacs port; and
+Robert J. Chassell, who suggested the Calc Tutorial and exercises as
+well as many other things.
@cindex Bibliography
@cindex Knuth, Art of Computer Programming
@@ -1251,9 +1262,12 @@ Press @kbd{1} now to enter the first section of the Tutorial.
@menu
* Tutorial::
@end menu
-@end ifinfo
@node Tutorial, Introduction, Interactive Tutorial, Top
+@end ifinfo
+@ifnotinfo
+@node Tutorial, Introduction, Getting Started, Top
+@end ifnotinfo
@chapter Tutorial
@noindent
@@ -1272,32 +1286,22 @@ The Quick mode and Keypad mode interfaces are fairly
self-explanatory. @xref{Embedded Mode}, for a description of
the Embedded mode interface.
-@ifinfo
-The easiest way to read this tutorial on-line is to have two windows on
-your Emacs screen, one with Calc and one with the Info system. (If you
-have a printed copy of the manual you can use that instead.) Press
-@kbd{C-x * c} to turn Calc on or to switch into the Calc window, and
-press @kbd{C-x * i} to start the Info system or to switch into its window.
-Or, you may prefer to use the tutorial in printed form.
-@end ifinfo
-@iftex
The easiest way to read this tutorial on-line is to have two windows on
your Emacs screen, one with Calc and one with the Info system. (If you
have a printed copy of the manual you can use that instead.) Press
@kbd{C-x * c} to turn Calc on or to switch into the Calc window, and
press @kbd{C-x * i} to start the Info system or to switch into its window.
-@end iftex
This tutorial is designed to be done in sequence. But the rest of this
manual does not assume you have gone through the tutorial. The tutorial
does not cover everything in the Calculator, but it touches on most
general areas.
-@ifinfo
+@ifnottex
You may wish to print out a copy of the Calc Summary and keep notes on
it as you learn Calc. @xref{About This Manual}, to see how to make a
printed summary. @xref{Summary}.
-@end ifinfo
+@end ifnottex
@iftex
The Calc Summary at the end of the reference manual includes some blank
space for your own use. You may wish to keep notes there as you learn
@@ -1334,13 +1338,13 @@ to control various modes of the Calculator.
@subsection RPN Calculations and the Stack
@cindex RPN notation
-@ifinfo
+@ifnottex
@noindent
Calc normally uses RPN notation. You may be familiar with the RPN
system from Hewlett-Packard calculators, FORTH, or PostScript.
(Reverse Polish Notation, RPN, is named after the Polish mathematician
Jan Lukasiewicz.)
-@end ifinfo
+@end ifnottex
@tex
\noindent
Calc normally uses RPN notation. You may be familiar with the RPN
@@ -1769,7 +1773,7 @@ is equivalent to
@noindent
or, in large mathematical notation,
-@ifinfo
+@ifnottex
@example
@group
3 * 4 * 5
@@ -1778,7 +1782,7 @@ or, in large mathematical notation,
6 * 7
@end group
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -3325,7 +3329,7 @@ We can multiply these two matrices in either order to get an identity.
Matrix inverses are related to systems of linear equations in algebra.
Suppose we had the following set of equations:
-@ifinfo
+@ifnottex
@group
@example
a + 2b + 3c = 6
@@ -3333,7 +3337,7 @@ Suppose we had the following set of equations:
7a + 6b = 3
@end example
@end group
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplayh
@@ -3352,7 +3356,7 @@ $$
@noindent
This can be cast into the matrix equation,
-@ifinfo
+@ifnottex
@group
@example
[ [ 1, 2, 3 ] [ [ a ] [ [ 6 ]
@@ -3360,7 +3364,7 @@ This can be cast into the matrix equation,
[ 7, 6, 0 ] ] [ c ] ] [ 3 ] ]
@end example
@end group
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -3425,14 +3429,14 @@ vectors and matrices that include variables. Solve the following
system of equations to get expressions for @expr{x} and @expr{y}
in terms of @expr{a} and @expr{b}.
-@ifinfo
+@ifnottex
@group
@example
x + a y = 6
x + b y = 10
@end example
@end group
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -3456,9 +3460,9 @@ you can't solve @expr{A X = B} directly because the matrix @expr{A}
is not square for an over-determined system. Matrix inversion works
only for square matrices. One common trick is to multiply both sides
on the left by the transpose of @expr{A}:
-@ifinfo
+@ifnottex
@samp{trn(A)*A*X = trn(A)*B}.
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
$A^T A \, X = A^T B$, where $A^T$ is the transpose \samp{trn(A)}.
@@ -3472,7 +3476,7 @@ solution, which can be regarded as the ``closest'' solution to the set
of equations. Use Calc to solve the following over-determined
system:
-@ifinfo
+@ifnottex
@group
@example
a + 2b + 3c = 6
@@ -3481,7 +3485,7 @@ system:
2a + 4b + 6c = 11
@end example
@end group
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplayh
@@ -3749,11 +3753,11 @@ stored value from the stack.)
In a least squares fit, the slope @expr{m} is given by the formula
-@ifinfo
+@ifnottex
@example
m = (N sum(x y) - sum(x) sum(y)) / (N sum(x^2) - sum(x)^2)
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -3790,12 +3794,12 @@ this formula uses.
@end group
@end smallexample
-@ifinfo
+@ifnottex
@noindent
These are @samp{sum(x)}, @samp{sum(x^2)}, @samp{sum(y)}, and @samp{sum(x y)},
respectively. (We could have used @kbd{*} to compute @samp{sum(x^2)} and
@samp{sum(x y)}.)
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
These are $\sum x$, $\sum x^2$, $\sum y$, and $\sum x y$,
@@ -3845,11 +3849,11 @@ Now we grind through the formula:
That gives us the slope @expr{m}. The y-intercept @expr{b} can now
be found with the simple formula,
-@ifinfo
+@ifnottex
@example
b = (sum(y) - m sum(x)) / N
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -3987,14 +3991,14 @@ The @kbd{C-x * g} command accepts numbers separated by spaces or commas,
with or without surrounding vector brackets.
@xref{List Answer 3, 3}. (@bullet{})
-@ifinfo
+@ifnottex
As another example, a theorem about binomial coefficients tells
us that the alternating sum of binomial coefficients
@var{n}-choose-0 minus @var{n}-choose-1 plus @var{n}-choose-2, and so
on up to @var{n}-choose-@var{n},
always comes out to zero. Let's verify this
for @expr{n=6}.
-@end ifinfo
+@end ifnottex
@tex
As another example, a theorem about binomial coefficients tells
us that the alternating sum of binomial coefficients
@@ -5193,12 +5197,12 @@ to be a better approximation than stairsteps. A third method is
that the steps are not required to be flat. Simpson's rule boils
down to the formula,
-@ifinfo
+@ifnottex
@example
(h/3) * (f(a) + 4 f(a+h) + 2 f(a+2h) + 4 f(a+3h) + ...
+ 2 f(a+(n-2)*h) + 4 f(a+(n-1)*h) + f(a+n*h))
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -5215,12 +5219,12 @@ is the width of each slice. These are 10 and 0.1 in our example.
For reference, here is the corresponding formula for the stairstep
method:
-@ifinfo
+@ifnottex
@example
h * (f(a) + f(a+h) + f(a+2h) + f(a+3h) + ...
+ f(a+(n-2)*h) + f(a+(n-1)*h))
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -5657,11 +5661,11 @@ so that @expr{2 - 3 (x + y) + x y} is a sum of three terms.)
infinite series that exactly equals the value of that function at
values of @expr{x} near zero.
-@ifinfo
+@ifnottex
@example
cos(x) = 1 - x^2 / 2! + x^4 / 4! - x^6 / 6! + ...
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -5675,11 +5679,11 @@ Calc represents the truncated Taylor series as a polynomial in @expr{x}.
Mathematicians often write a truncated series using a ``big-O'' notation
that records what was the lowest term that was truncated.
-@ifinfo
+@ifnottex
@example
cos(x) = 1 - x^2 / 2! + O(x^3)
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -6204,11 +6208,11 @@ equations numerically is @dfn{Newton's Method}. Given the equation
@expr{x_0} which is reasonably close to the desired solution, apply
this formula over and over:
-@ifinfo
+@ifnottex
@example
new_x = x - f(x)/f'(x)
@end example
-@end ifinfo
+@end ifnottex
@tex
\beforedisplay
$$ x_{\rm new} = x - {f(x) \over f'(x)} $$
@@ -6242,11 +6246,11 @@ is defined as the derivative of
@infoline @expr{ln(gamma(z))}.
For large values of @expr{z}, it can be approximated by the infinite sum
-@ifinfo
+@ifnottex
@example
psi(z) ~= ln(z) - 1/2z - sum(bern(2 n) / 2 n z^(2 n), n, 1, inf)
@end example
-@end ifinfo
+@end ifnottex
@tex
\beforedisplay
$$ \psi(z) \approx \ln z - {1\over2z} -
@@ -6305,13 +6309,13 @@ a way to convert from this form back to the standard algebraic form.
(@bullet{}) @strong{Exercise 11.} The @dfn{Stirling numbers of the
first kind} are defined by the recurrences,
-@ifinfo
+@ifnottex
@example
s(n,n) = 1 for n >= 0,
s(n,0) = 0 for n > 0,
s(n+1,m) = s(n,m-1) - n s(n,m) for n >= m >= 1.
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -6843,14 +6847,14 @@ get the row sum. Similarly, use @kbd{[1 1] r 4 *} to get the column sum.
@node Matrix Answer 2, Matrix Answer 3, Matrix Answer 1, Answers to Exercises
@subsection Matrix Tutorial Exercise 2
-@ifinfo
+@ifnottex
@example
@group
x + a y = 6
x + b y = 10
@end group
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -6905,7 +6909,7 @@ now, we have a system
@infoline @expr{A2 * X = B2}
which we can solve using Calc's @samp{/} command.
-@ifinfo
+@ifnottex
@example
@group
a + 2b + 3c = 6
@@ -6914,7 +6918,7 @@ which we can solve using Calc's @samp{/} command.
2a + 4b + 6c = 11
@end group
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplayh
@@ -7045,11 +7049,11 @@ vector.
Given @expr{x} and @expr{y} vectors in quick variables 1 and 2 as before,
the first job is to form the matrix that describes the problem.
-@ifinfo
+@ifnottex
@example
m*x + b*1 = y
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -7836,11 +7840,11 @@ Why does this work? Think about a two-step computation:
subtracting off enough 511's to put the result in the desired range.
So the result when we take the modulo after every step is,
-@ifinfo
+@ifnottex
@example
3 (3 a + b - 511 m) + c - 511 n
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -7852,11 +7856,11 @@ $$ 3 (3 a + b - 511 m) + c - 511 n $$
for some suitable integers @expr{m} and @expr{n}. Expanding out by
the distributive law yields
-@ifinfo
+@ifnottex
@example
9 a + 3 b + c - 511*3 m - 511 n
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -7870,11 +7874,11 @@ contribution it makes could just as easily be made by the @expr{n}
term. So we can take it out to get an equivalent formula with
@expr{n' = 3m + n},
-@ifinfo
+@ifnottex
@example
9 a + 3 b + c - 511 n'
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -9663,6 +9667,11 @@ is like @kbd{M-x} except that it enters the initial string @samp{calc-}
for you. For example, the following key sequences are equivalent:
@kbd{S}, @kbd{M-x calc-sin @key{RET}}, @kbd{x sin @key{RET}}.
+Although Calc is designed to be used from the keyboard, some of
+Calc's more common commands are available from a menu. In the menu, the
+arguments to the functions are given by referring to their stack level
+numbers.
+
@cindex Extensions module
@cindex @file{calc-ext} module
The Calculator exists in many parts. When you type @kbd{C-x * c}, the
@@ -10017,11 +10026,18 @@ During numeric entry, the only editing key available is @key{DEL}.
@cindex Algebraic notation
@cindex Formulas, entering
Calculations can also be entered in algebraic form. This is accomplished
-by typing the apostrophe key, @kbd{'}, followed by the expression in
-standard format: @kbd{@key{'} 2+3*4 @key{RET}} computes
+by typing the apostrophe key, ', followed by the expression in
+standard format:
+
+@example
+' 2+3*4 @key{RET}.
+@end example
+
+@noindent
+This will compute
@texline @math{2+(3\times4) = 14}
@infoline @expr{2+(3*4) = 14}
-and pushes that on the stack. If you wish you can
+and push it on the stack. If you wish you can
ignore the RPN aspect of Calc altogether and simply enter algebraic
expressions in this way. You may want to use @key{DEL} every so often to
clear previous results off the stack.
@@ -10170,8 +10186,8 @@ then the result of the evaluation is stored in that Calc variable.
@xref{Store and Recall}.
If the result is an integer and the current display radix is decimal,
-the number will also be displayed in hex and octal formats. If the
-integer is in the range from 1 to 126, it will also be displayed as
+the number will also be displayed in hex, octal and binary formats. If
+the integer is in the range from 1 to 126, it will also be displayed as
an ASCII character.
For example, the quoted character @samp{"x"} produces the vector
@@ -11043,17 +11059,44 @@ Please note that there is no ``year 0''; the day before
days 0 and @mathit{-1} respectively in Calc's internal numbering scheme.
@cindex Julian day counting
-Another day counting system in common use is, confusingly, also
-called ``Julian.'' It was invented in 1583 by Joseph Justus
-Scaliger, who named it in honor of his father Julius Caesar
-Scaliger. For obscure reasons he chose to start his day
-numbering on Jan 1, 4713 BC at noon, which in Calc's scheme
+Another day counting system in common use is, confusingly, also called
+``Julian.'' The Julian day number is the numbers of days since
+12:00 noon (GMT) on Jan 1, 4713 BC, which in Calc's scheme (in GMT)
is @mathit{-1721423.5} (recall that Calc starts at midnight instead
-of noon). Thus to convert a Calc date code obtained by
-unpacking a date form into a Julian day number, simply add
-1721423.5. The Julian code for @samp{6:00am Jan 9, 1991}
-is 2448265.75. The built-in @kbd{t J} command performs
-this conversion for you.
+of noon). Thus to convert a Calc date code obtained by unpacking a
+date form into a Julian day number, simply add 1721423.5 after
+compensating for the time zone difference. The built-in @kbd{t J}
+command performs this conversion for you.
+
+The Julian day number is based on the Julian cycle, which was invented
+in 1583 by Joseph Justus Scaliger. Scaliger named it the Julian cycle
+since it is involves the Julian calendar, but some have suggested that
+Scaliger named it in honor of his father, Julius Caesar Scaliger. The
+Julian cycle is based it on three other cycles: the indiction cycle,
+the Metonic cycle, and the solar cycle. The indiction cycle is a 15
+year cycle originally used by the Romans for tax purposes but later
+used to date medieval documents. The Metonic cycle is a 19 year
+cycle; 19 years is close to being a common multiple of a solar year
+and a lunar month, and so every 19 years the phases of the moon will
+occur on the same days of the year. The solar cycle is a 28 year
+cycle; the Julian calendar repeats itself every 28 years. The
+smallest time period which contains multiples of all three cycles is
+the least common multiple of 15 years, 19 years and 28 years, which
+(since they're pairwise relatively prime) is
+@texline @math{15\times 19\times 28 = 7980} years.
+@infoline 15*19*28 = 7980 years.
+This is the length of a Julian cycle. Working backwards, the previous
+year in which all three cycles began was 4713 BC, and so Scalinger
+chose that year as the beginning of a Julian cycle. Since at the time
+there were no historical records from before 4713 BC, using this year
+as a starting point had the advantage of avoiding negative year
+numbers. In 1849, the astronomer John Herschel (son of William
+Herschel) suggested using the number of days since the beginning of
+the Julian cycle as an astronomical dating system; this idea was taken
+up by other astronomers. (At the time, noon was the start of the
+astronomical day. Herschel originally suggested counting the days
+since Jan 1, 4713 BC at noon Alexandria time; this was later amended to
+noon GMT.) Julian day numbering is largely used in astronomy.
@cindex Unix time format
The Unix operating system measures time as an integer number of
@@ -11285,7 +11328,7 @@ from 1 to 8. Interval arithmetic is used to get a worst-case estimate
of the possible range of values a computation will produce, given the
set of possible values of the input.
-@ifinfo
+@ifnottex
Calc supports several varieties of intervals, including @dfn{closed}
intervals of the type shown above, @dfn{open} intervals such as
@samp{(2 ..@: 4)}, which represents the range of numbers from 2 to 4
@@ -11296,7 +11339,7 @@ terms,
@samp{[2 ..@: 4)} represents @expr{2 <= x < 4},
@samp{(2 ..@: 4]} represents @expr{2 < x <= 4}, and
@samp{(2 ..@: 4)} represents @expr{2 < x < 4}.
-@end ifinfo
+@end ifnottex
@tex
Calc supports several varieties of intervals, including \dfn{closed}
intervals of the type shown above, \dfn{open} intervals such as
@@ -11541,8 +11584,7 @@ with their equivalent function names, are:
postfix @samp{%} [@code{percent}] (as in @samp{25% = 0.25});
-prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x})
-and prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
+prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
@samp{+/-} [@code{sdev}] (the standard deviation symbol) and
@samp{mod} [@code{makemod}] (the symbol for modulo forms);
@@ -11552,6 +11594,8 @@ and postfix @samp{!!} [@code{dfact}] (double factorial);
@samp{^} [@code{pow}] (raised-to-the-power-of);
+prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x});
+
@samp{*} [@code{mul}];
@samp{/} [@code{div}], @samp{%} [@code{mod}] (modulo), and
@@ -11929,14 +11973,14 @@ commands, @kbd{t h} works only when Calc Trail is the selected window.
@pindex calc-trail-isearch-forward
@kindex t r
@pindex calc-trail-isearch-backward
-@ifinfo
+@ifnottex
The @kbd{t s} (@code{calc-trail-isearch-forward}) and @kbd{t r}
(@code{calc-trail-isearch-backward}) commands perform an incremental
search forward or backward through the trail. You can press @key{RET}
to terminate the search; the trail pointer moves to the current line.
If you cancel the search with @kbd{C-g}, the trail pointer stays where
it was when the search began.
-@end ifinfo
+@end ifnottex
@tex
The @kbd{t s} (@code{calc-trail-isearch-forward}) and @kbd{t r}
(@code{calc-trail-isearch-backward}) com\-mands perform an incremental
@@ -13962,7 +14006,7 @@ mode may display it differently.
Formulas are entered and displayed in the appropriate notation;
@texline @math{\sin(a/b)}
@infoline @expr{sin(a/b)}
-will appear as @samp{\sin\left( a \over b \right)} in @TeX{} mode and
+will appear as @samp{\sin\left( @{a \over b@} \right)} in @TeX{} mode and
@samp{\sin\left(\frac@{a@}@{b@}\right)} in La@TeX{} mode.
Math formulas are often enclosed by @samp{$ $} signs in @TeX{} and
La@TeX{}; these should be omitted when interfacing with Calc. To Calc,
@@ -14237,10 +14281,10 @@ font information.
Also, the ``discretionary multiplication sign'' @samp{\*} is read
the same as @samp{*}.
-@ifinfo
+@ifnottex
The @TeX{} version of this manual includes some printed examples at the
end of this section.
-@end ifinfo
+@end ifnottex
@iftex
Here are some examples of how various Calc formulas are formatted in @TeX{}:
@@ -14572,15 +14616,15 @@ The operator table used by normal and Big language modes has the
following precedences:
@example
-_ 1200 @r{(subscripts)}
-% 1100 @r{(as in n}%@r{)}
-- 1000 @r{(as in }-@r{n)}
-! 1000 @r{(as in }!@r{n)}
+_ 1200 @r{(subscripts)}
+% 1100 @r{(as in n}%@r{)}
+! 1000 @r{(as in }!@r{n)}
mod 400
+/- 300
!! 210 @r{(as in n}!!@r{)}
! 210 @r{(as in n}!@r{)}
^ 200
+- 197 @r{(as in }-@r{n)}
* 195 @r{(or implicit multiplication)}
/ % \ 190
+ - 180 @r{(as in a}+@r{b)}
@@ -15975,9 +16019,28 @@ whereas @w{@samp{[-2 ..@: 3] ^ 2}} is @samp{[0 ..@: 9]}.
@mindex @null
@end ignore
@tindex /
-The @kbd{/} (@code{calc-divide}) command divides two numbers. Note that
-when using algebraic entry, @samp{/} has lower precedence than @samp{*},
-so that @samp{a/b*c} is interpreted as @samp{a/(b*c)}.
+The @kbd{/} (@code{calc-divide}) command divides two numbers.
+
+When combining multiplication and division in an algebraic formula, it
+is good style to use parentheses to distinguish between possible
+interpretations; the expression @samp{a/b*c} should be written
+@samp{(a/b)*c} or @samp{a/(b*c)}, as appropriate. Without the
+parentheses, Calc will interpret @samp{a/b*c} as @samp{a/(b*c)}, since
+in algebraic entry Calc gives division a lower precedence than
+multiplication. (This is not standard across all computer languages, and
+Calc may change the precedence depending on the language mode being used.
+@xref{Language Modes}.) This default ordering can be changed by setting
+the customizable variable @code{calc-multiplication-has-precedence} to
+@code{nil} (@pxref{Customizing Calc}); this will give multiplication and
+division equal precedences. Note that Calc's default choice of
+precedence allows @samp{a b / c d} to be used as a shortcut for
+@smallexample
+@group
+a b
+---.
+c d
+@end group
+@end smallexample
When dividing a scalar @expr{B} by a square matrix @expr{A}, the
computation performed is @expr{B} times the inverse of @expr{A}. This
@@ -16627,9 +16690,9 @@ The last two arguments default to zero if omitted.
@cindex Julian day counts, conversions
The @kbd{t J} (@code{calc-julian}) [@code{julian}] command converts
a date form into a Julian day count, which is the number of days
-since noon on Jan 1, 4713 BC. A pure date is converted to an integer
-Julian count representing noon of that day. A date/time form is
-converted to an exact floating-point Julian count, adjusted to
+since noon (GMT) on Jan 1, 4713 BC. A pure date is converted to an
+integer Julian count representing noon of that day. A date/time form
+is converted to an exact floating-point Julian count, adjusted to
interpret the date form in the current time zone but the Julian
day count in Greenwich Mean Time. A numeric prefix argument allows
you to specify the time zone; @pxref{Time Zones}. Use a prefix of
@@ -17066,69 +17129,45 @@ Pacific Time look like this:
@cindex @code{TimeZone} variable
@vindex TimeZone
-With no arguments, @code{calc-time-zone} or @samp{tzone()} obtains an
-argument from the Calc variable @code{TimeZone} if a value has been
-stored for that variable. If not, Calc runs the Unix @samp{date}
-command and looks for one of the above time zone names in the output;
-if this does not succeed, @samp{tzone()} leaves itself unevaluated.
-The time zone name in the @samp{date} output may be followed by a signed
-adjustment, e.g., @samp{GMT+5} or @samp{GMT+0500} which specifies a
-number of hours and minutes to be added to the base time zone.
-Calc stores the time zone it finds into @code{TimeZone} to speed
-later calls to @samp{tzone()}.
-
-The special time zone name @code{local} is equivalent to no argument,
-i.e., it uses the local time zone as obtained from the @code{date}
-command.
-
-If the time zone name found is one of the standard or daylight
-saving zone names from the above table, and Calc's internal
-daylight saving algorithm says that time and zone are consistent
-(e.g., @code{PDT} accompanies a date that Calc's algorithm would also
-consider to be daylight saving, or @code{PST} accompanies a date
-that Calc would consider to be standard time), then Calc substitutes
-the corresponding generalized time zone (like @code{PGT}).
-
-If your system does not have a suitable @samp{date} command, you
-may wish to put a @samp{(setq var-TimeZone ...)} in your Emacs
-initialization file to set the time zone. (Since you are interacting
-with the variable @code{TimeZone} directly from Emacs Lisp, the
-@code{var-} prefix needs to be present.) The easiest way to do
-this is to edit the @code{TimeZone} variable using Calc's @kbd{s T}
-command, then use the @kbd{s p} (@code{calc-permanent-variable})
-command to save the value of @code{TimeZone} permanently.
+With no arguments, @code{calc-time-zone} or @samp{tzone()} will by
+default get the time zone and daylight saving information from the
+calendar (@pxref{Daylight Saving,Calendar/Diary,The Calendar and the Diary,
+emacs,The GNU Emacs Manual}). To use a different time zone, or if the
+calendar does not give the desired result, you can set the Calc variable
+@code{TimeZone} (which is by default @code{nil}) to an appropriate
+time zone name. (The easiest way to do this is to edit the
+@code{TimeZone} variable using Calc's @kbd{s T} command, then use the
+@kbd{s p} (@code{calc-permanent-variable}) command to save the value of
+@code{TimeZone} permanently.)
+If the time zone given by @code{TimeZone} is a generalized time zone,
+e.g., @code{EGT}, Calc examines the date being converted to tell whether
+to use standard or daylight saving time. But if the current time zone
+is explicit, e.g., @code{EST} or @code{EDT}, then that adjustment is
+used exactly and Calc's daylight saving algorithm is not consulted.
+The special time zone name @code{local}
+is equivalent to no argument; i.e., it uses the information obtained
+from the calendar.
The @kbd{t J} and @code{t U} commands with no numeric prefix
-arguments do the same thing as @samp{tzone()}. If the current
-time zone is a generalized time zone, e.g., @code{EGT}, Calc
-examines the date being converted to tell whether to use standard
-or daylight saving time. But if the current time zone is explicit,
-e.g., @code{EST} or @code{EDT}, then that adjustment is used exactly
-and Calc's daylight saving algorithm is not consulted.
-
-Some places don't follow the usual rules for daylight saving time.
-The state of Arizona, for example, does not observe daylight saving
-time. If you run Calc during the winter season in Arizona, the
-Unix @code{date} command will report @code{MST} time zone, which
-Calc will change to @code{MGT}. If you then convert a time that
-lies in the summer months, Calc will apply an incorrect daylight
-saving time adjustment. To avoid this, set your @code{TimeZone}
-variable explicitly to @code{MST} to force the use of standard,
-non-daylight-saving time.
+arguments do the same thing as @samp{tzone()}; namely, use the
+information from the calendar if @code{TimeZone} is @code{nil},
+otherwise use the time zone given by @code{TimeZone}.
@vindex math-daylight-savings-hook
@findex math-std-daylight-savings
-By default Calc always considers daylight saving time to begin at
-2 a.m.@: on the second Sunday of March (for years from 2007 on) or on
-the last Sunday in April (for years before 2007), and to end at 2 a.m.@:
-on the first Sunday of November. (for years from 2007 on) or the last
-Sunday in October (for years before 2007). These are the rules that have
-been in effect in much of North America since 1966 and takes into
-account the rule change that began in 2007. If you are in a
-country that uses different rules for computing daylight saving time,
-you have two choices: Write your own daylight saving hook, or control
-time zones explicitly by setting the @code{TimeZone} variable and/or
-always giving a time-zone argument for the conversion functions.
+When Calc computes the daylight saving information itself (i.e., when
+the @code{TimeZone} variable is set), it will by default consider
+daylight saving time to begin at 2 a.m.@: on the second Sunday of March
+(for years from 2007 on) or on the last Sunday in April (for years
+before 2007), and to end at 2 a.m.@: on the first Sunday of
+November. (for years from 2007 on) or the last Sunday in October (for
+years before 2007). These are the rules that have been in effect in
+much of North America since 1966 and take into account the rule change
+that began in 2007. If you are in a country that uses different rules
+for computing daylight saving time, you have two choices: Write your own
+daylight saving hook, or control time zones explicitly by setting the
+@code{TimeZone} variable and/or always giving a time-zone argument for
+the conversion functions.
The Lisp variable @code{math-daylight-savings-hook} holds the
name of a function that is used to compute the daylight saving
@@ -17192,7 +17231,8 @@ falls in this hour results in a time value for the following hour,
from 3 a.m.@: to 4 a.m. At the end of daylight saving time, the
hour from 1 a.m.@: to 2 a.m.@: repeats itself; converting a date/time
form that falls in this hour results in a time value for the first
-manifestation of that time (@emph{not} the one that occurs one hour later).
+manifestation of that time (@emph{not} the one that occurs one hour
+later).
If @code{math-daylight-savings-hook} is @code{nil}, then the
daylight saving adjustment is always taken to be zero.
@@ -17221,11 +17261,6 @@ daylight saving time (e.g., @code{PDT} or @code{PST}) the
the algorithms described above are used. If @var{zone} is omitted,
the computation is done for the current time zone.
-@xref{Reporting Bugs}, for the address of Calc's author, if you
-should wish to contribute your improved versions of
-@code{math-tzone-names} and @code{math-daylight-savings-hook}
-to the Calc distribution.
-
@node Financial Functions, Binary Functions, Date Arithmetic, Arithmetic
@section Financial Functions
@@ -17637,7 +17672,7 @@ formulas below for symbolic arguments only when you use the @kbd{a "}
(@code{calc-expand-formula}) command, or when taking derivatives or
integrals or solving equations involving the functions.
-@ifinfo
+@ifnottex
These formulas are shown using the conventions of Big display
mode (@kbd{d B}); for example, the formula for @code{fv} written
linearly is @samp{pmt * ((1 + rate)^n) - 1) / rate}.
@@ -17717,7 +17752,7 @@ syd(cost, salv, life, per) = --------------------------------
ddb(cost, salv, life, per) = --------, book = cost - depreciation so far
life
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
$$ \code{fv}(r, n, p) = p { (1 + r)^n - 1 \over r } $$
@@ -18291,11 +18326,11 @@ vector as an argument and computes @code{arctan2} of the elements.
@pindex calc-coth
@tindex coth
The remaining trigonometric functions, @code{calc-sec} [@code{sec}],
-@code{calc-csc} [@code{csc}] and @code{calc-sec} [@code{sec}], are also
+@code{calc-csc} [@code{csc}] and @code{calc-cot} [@code{cot}], are also
available. With the Hyperbolic flag, these compute their hyperbolic
counterparts, which are also available separately as @code{calc-sech}
-[@code{sech}], @code{calc-csch} [@code{csch}] and @code{calc-sech}
-[@code{sech}]. (These commmands do not accept the Inverse flag.)
+[@code{sech}], @code{calc-csch} [@code{csch}] and @code{calc-coth}
+[@code{coth}]. (These commands do not accept the Inverse flag.)
@node Advanced Math Functions, Branch Cuts, Trigonometric and Hyperbolic Functions, Scientific Functions
@section Advanced Mathematical Functions
@@ -18366,14 +18401,14 @@ some authors, is computed by the @kbd{I f G} [@code{gammaQ}] command.
You can think of this as taking the other half of the integral, from
@expr{x} to infinity.
-@ifinfo
+@ifnottex
The functions corresponding to the integrals that define @expr{P(a,x)}
and @expr{Q(a,x)} but without the normalizing @expr{1/gamma(a)}
factor are called @expr{g(a,x)} and @expr{G(a,x)}, respectively
(where @expr{g} and @expr{G} represent the lower- and upper-case Greek
letter gamma). You can obtain these using the @kbd{H f G} [@code{gammag}]
and @kbd{H I f G} [@code{gammaG}] commands.
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
The functions corresponding to the integrals that define $P(a,x)$
@@ -18593,7 +18628,7 @@ Given a positive numeric prefix argument @expr{M}, it produces a random
integer @expr{N} in the range
@texline @math{0 \le N < M}.
@infoline @expr{0 <= N < M}.
-Each of the @expr{M} values appears with equal probability.
+Each possible value @expr{N} appears with equal probability.
With no numeric prefix argument, the @kbd{k r} command takes its argument
from the stack instead. Once again, if this is a positive integer @expr{M}
@@ -18889,10 +18924,10 @@ real numbers by
@kindex H k c
@pindex calc-perm
@tindex perm
-@ifinfo
+@ifnottex
The @kbd{H k c} (@code{calc-perm}) [@code{perm}] command computes the
number-of-permutations function @expr{N! / (N-M)!}.
-@end ifinfo
+@end ifnottex
@tex
The \kbd{H k c} (\code{calc-perm}) [\code{perm}] command computes the
number-of-perm\-utations function $N! \over (N-M)!\,$.
@@ -21328,16 +21363,17 @@ entire four-term sum.
@pindex calc-break-selections
The @kbd{j b} (@code{calc-break-selections}) command controls a mode
in which the ``deep structure'' of these associative formulas shows
-through. Calc actually stores the above formulas as @samp{((a + b) - c) + d}
-and @samp{x * (y * z)}. (Note that for certain obscure reasons, Calc
-treats multiplication as right-associative.) Once you have enabled
-@kbd{j b} mode, selecting with the cursor on the @samp{-} sign would
-only select the @samp{a + b - c} portion, which makes sense when the
-deep structure of the sum is considered. There is no way to select
-the @samp{b - c + d} portion; although this might initially look
-like just as legitimate a sub-formula as @samp{a + b - c}, the deep
-structure shows that it isn't. The @kbd{d U} command can be used
-to view the deep structure of any formula (@pxref{Normal Language Modes}).
+through. Calc actually stores the above formulas as
+@samp{((a + b) - c) + d} and @samp{x * (y * z)}. (Note that for certain
+obscure reasons, by default Calc treats multiplication as
+right-associative.) Once you have enabled @kbd{j b} mode, selecting
+with the cursor on the @samp{-} sign would only select the @samp{a + b -
+c} portion, which makes sense when the deep structure of the sum is
+considered. There is no way to select the @samp{b - c + d} portion;
+although this might initially look like just as legitimate a sub-formula
+as @samp{a + b - c}, the deep structure shows that it isn't. The @kbd{d
+U} command can be used to view the deep structure of any formula
+(@pxref{Normal Language Modes}).
When @kbd{j b} mode has not been enabled, the deep structure is
generally hidden by the selection commands---what you see is what
@@ -22129,13 +22165,13 @@ Arithmetic operators like @kbd{+} and @kbd{*} always take two
arguments in Calc's internal form. Sums and products of three or
more terms are arranged by the associative law of algebra into
a left-associative form for sums, @expr{((a + b) + c) + d}, and
-a right-associative form for products, @expr{a * (b * (c * d))}.
-Formulas like @expr{(a + b) + (c + d)} are rearranged to
-left-associative form, though this rarely matters since Calc's
-algebra commands are designed to hide the inner structure of
-sums and products as much as possible. Sums and products in
-their proper associative form will be written without parentheses
-in the examples below.
+(by default) a right-associative form for products,
+@expr{a * (b * (c * d))}. Formulas like @expr{(a + b) + (c + d)} are
+rearranged to left-associative form, though this rarely matters since
+Calc's algebra commands are designed to hide the inner structure of sums
+and products as much as possible. Sums and products in their proper
+associative form will be written without parentheses in the examples
+below.
Sums and products are @emph{not} rearranged according to the
commutative law (@expr{a + b} to @expr{b + a}) except in a few
@@ -23132,13 +23168,13 @@ integral of the expression on top of the stack. In this case, the
command will again prompt for an integration variable, then prompt for a
lower limit and an upper limit.
-@ifinfo
+@ifnottex
If you use the @code{integ} function directly in an algebraic formula,
you can also write @samp{integ(f,x,v)} which expresses the resulting
indefinite integral in terms of variable @code{v} instead of @code{x}.
With four arguments, @samp{integ(f(x),x,a,b)} represents a definite
integral from @code{a} to @code{b}.
-@end ifinfo
+@end ifnottex
@tex
If you use the @code{integ} function directly in an algebraic formula,
you can also write @samp{integ(f,x,v)} which expresses the resulting
@@ -23947,7 +23983,13 @@ such as @expr{y = m x + b} where @expr{m} and @expr{b} are parameters
to be determined. For a typical set of measured data there will be
no single @expr{m} and @expr{b} that exactly fit the data; in this
case, Calc chooses values of the parameters that provide the closest
-possible fit.
+possible fit. The model formula can be entered in various ways after
+the key sequence @kbd{a F} is pressed.
+
+If the letter @kbd{P} is pressed after @kbd{a F} but before the model
+description is entered, the data as well as the model formula will be
+plotted after the formula is determined. This will be indicated by a
+``P'' in the minibuffer after the help message.
@menu
* Linear Fits::
@@ -24019,14 +24061,14 @@ name only those and let the parameters use default names.
For example, suppose the data matrix
-@ifinfo
+@ifnottex
@example
@group
[ [ 1, 2, 3, 4, 5 ]
[ 5, 7, 9, 11, 13 ] ]
@end group
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\turnoffactive
@@ -24040,7 +24082,7 @@ $$
@noindent
is on the stack and we wish to do a simple linear fit. Type
@kbd{a F}, then @kbd{1} for the model, then @key{RET} to use
-the default names. The result will be the formula @expr{3 + 2 x}
+the default names. The result will be the formula @expr{3. + 2. x}
on the stack. Calc has created the model expression @kbd{a + b x},
then found the optimal values of @expr{a} and @expr{b} to fit the
data. (In this case, it was able to find an exact fit.) Calc then
@@ -24083,11 +24125,11 @@ Calc has chosen a line that best approximates the data points using
the method of least squares. The idea is to define the @dfn{chi-square}
error measure
-@ifinfo
+@ifnottex
@example
chi^2 = sum((y_i - (a + b x_i))^2, i, 1, N)
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -24230,6 +24272,8 @@ case, the model might be @expr{a x + b y + c z}; and in the polynomial
case, the model could be @expr{a x + b x^2 + c x^3}. You can get
a homogeneous linear or multilinear model by pressing the letter
@kbd{h} followed by a regular model key, like @kbd{1} or @kbd{2}.
+This will be indicated by an ``h'' in the minibuffer after the help
+message.
It is certainly possible to have other constrained linear models,
like @expr{2.3 + a x} or @expr{a - 4 x}. While there is no single
@@ -24272,11 +24316,11 @@ then the
@infoline @expr{chi^2}
statistic is now,
-@ifinfo
+@ifnottex
@example
chi^2 = sum(((y_i - (a + b x_i)) / sigma_i)^2, i, 1, N)
@end example
-@end ifinfo
+@end ifnottex
@tex
\turnoffactive
\beforedisplay
@@ -24439,6 +24483,18 @@ Quadratic. @mathit{a + b (x-c)^2 + d (x-e)^2}.
Gaussian.
@texline @math{{a \over b \sqrt{2 \pi}} \exp\left( -{1 \over 2} \left( x - c \over b \right)^2 \right)}.
@infoline @mathit{(a / b sqrt(2 pi)) exp(-0.5*((x-c)/b)^2)}.
+@item s
+Logistic @emph{s} curve.
+@texline @math{a/(1+e^{b(x-c)})}.
+@infoline @mathit{a/(1 + exp(b (x - c)))}.
+@item b
+Logistic bell curve.
+@texline @math{ae^{b(x-c)}/(1+e^{b(x-c)})^2}.
+@infoline @mathit{a exp(b (x - c))/(1 + exp(b (x - c)))^2}.
+@item o
+Hubbert linearization.
+@texline @math{{y \over x} = a(1-x/b)}.
+@infoline @mathit{(y/x) = a (1 - x/b)}.
@end table
All of these models are used in the usual way; just press the appropriate
@@ -24447,8 +24503,9 @@ result will be a formula as shown in the above table, with the best-fit
values of the parameters substituted. (You may find it easier to read
the parameter values from the vector that is placed in the trail.)
-All models except Gaussian and polynomials can generalize as shown to any
-number of independent variables. Also, all the built-in models have an
+All models except Gaussian, logistics, Hubbert and polynomials can
+generalize as shown to any number of independent variables. Also, all
+the built-in models except for the logistic and Hubbert curves have an
additive or multiplicative parameter shown as @expr{a} in the above table
which can be replaced by zero or one, as appropriate, by typing @kbd{h}
before the model key.
@@ -24588,7 +24645,7 @@ to convert the model into this form. For example, if the model
is @expr{a + b x + c x^2}, then @expr{f(x) = 1}, @expr{g(x) = x},
and @expr{h(x) = x^2} are suitable functions.
-For other models, Calc uses a variety of algebraic manipulations
+For most other models, Calc uses a variety of algebraic manipulations
to try to put the problem into the form
@smallexample
@@ -24647,7 +24704,12 @@ The Gaussian model looks quite complicated, but a closer examination
shows that it's actually similar to the quadratic model but with an
exponential that can be brought to the top and moved into @expr{Y}.
-An example of a model that cannot be put into general linear
+The logistic models cannot be put into general linear form. For these
+models, and the Hubbert linearization, Calc computes a rough
+approximation for the parameters, then uses the Levenberg-Marquardt
+iterative method to refine the approximations.
+
+Another model that cannot be put into general linear
form is a Gaussian with a constant background added on, i.e.,
@expr{d} + the regular Gaussian formula. If you have a model like
this, your best bet is to replace enough of your parameters with
@@ -27395,14 +27457,29 @@ of angle are evaluated, regardless of the current angular mode.
The @kbd{u c} (@code{calc-convert-units}) command converts a units
expression to new, compatible units. For example, given the units
expression @samp{55 mph}, typing @kbd{u c m/s @key{RET}} produces
-@samp{24.5872 m/s}. If the units you request are inconsistent with
-the original units, the number will be converted into your units
-times whatever ``remainder'' units are left over. For example,
-converting @samp{55 mph} into acres produces @samp{6.08e-3 acre / m s}.
-(Recall that multiplication binds more strongly than division in Calc
-formulas, so the units here are acres per meter-second.) Remainder
-units are expressed in terms of ``fundamental'' units like @samp{m} and
-@samp{s}, regardless of the input units.
+@samp{24.5872 m/s}. If you have previously converted a units expression
+with the same type of units (in this case, distance over time), you will
+be offered the previous choice of new units as a default. Continuing
+the above example, entering the units expression @samp{100 km/hr} and
+typing @kbd{u c @key{RET}} (without specifying new units) produces
+@samp{27.7777777778 m/s}.
+
+While many of Calc's conversion factors are exact, some are necessarily
+approximate. If Calc is in fraction mode (@pxref{Fraction Mode}), then
+unit conversions will try to give exact, rational conversions, but it
+isn't always possible. Given @samp{55 mph} in fraction mode, typing
+@kbd{u c m/s @key{RET}} produces @samp{15367:625 m/s}, for example,
+while typing @kbd{u c au/yr @key{RET}} produces
+@samp{5.18665819999e-3 au/yr}.
+
+If the units you request are inconsistent with the original units, the
+number will be converted into your units times whatever ``remainder''
+units are left over. For example, converting @samp{55 mph} into acres
+produces @samp{6.08e-3 acre / m s}. (Recall that multiplication binds
+more strongly than division in Calc formulas, so the units here are
+acres per meter-second.) Remainder units are expressed in terms of
+``fundamental'' units like @samp{m} and @samp{s}, regardless of the
+input units.
One special exception is that if you specify a single unit name, and
a compatible unit appears somewhere in the units expression, then
@@ -27447,8 +27524,8 @@ If the value on the stack does not contain any units, @kbd{u c} will
prompt first for the old units which this value should be considered
to have, then for the new units. Assuming the old and new units you
give are consistent with each other, the result also will not contain
-any units. For example, @kbd{@w{u c} cm @key{RET} in @key{RET}} converts the number
-2 on the stack to 5.08.
+any units. For example, @kbd{@w{u c} cm @key{RET} in @key{RET}}
+converts the number 2 on the stack to 5.08.
@kindex u b
@pindex calc-base-units
@@ -27572,6 +27649,29 @@ column of the Units Table.
@section Predefined Units
@noindent
+The definitions of many units have changed over the years. For example,
+the meter was originally defined in 1791 as one ten-millionth of the
+distance from the equator to the north pole. In order to be more
+precise, the definition was adjusted several times, and now a meter is
+defined as the distance that light will travel in a vacuum in
+1/299792458 of a second; consequently, the speed of light in a
+vacuum is exactly 299792458 m/s. Many other units have been
+redefined in terms of fundamental physical processes; a second, for
+example, is currently defined as 9192631770 periods of a certain
+radiation related to the cesium-133 atom. The only SI unit that is not
+based on a fundamental physical process (although there are efforts to
+change this) is the kilogram, which was originally defined as the mass
+of one liter of water, but is now defined as the mass of the
+International Prototype Kilogram (IPK), a cylinder of platinum-iridium
+kept at the Bureau International des Poids et Mesures in S@`evres,
+France. (There are several copies of the IPK throughout the world.)
+The British imperial units, once defined in terms of physical objects,
+were redefined in 1963 in terms of SI units. The US customary units,
+which were the same as British units until the British imperial system
+was created in 1824, were also defined in terms of the SI units in 1893.
+Because of these redefinitions, conversions between metric, British
+Imperial, and US customary units can often be done precisely.
+
Since the exact definitions of many kinds of units have evolved over the
years, and since certain countries sometimes have local differences in
their definitions, it is a good idea to examine Calc's definition of a
@@ -27594,9 +27694,9 @@ The unit @code{A} stands for Amperes; the name @code{Ang} is used
@tex
for \AA ngstroms.
@end tex
-@ifinfo
+@ifnottex
for Angstroms.
-@end ifinfo
+@end ifnottex
The unit @code{pt} stands for pints; the name @code{point} stands for
a typographical point, defined by @samp{72 point = 1 in}. This is
@@ -28402,7 +28502,10 @@ variables.
The ``x'' and ``y'' values for the data points (as pulled from the vectors,
calculated from the formulas, or interpolated from the intervals) should
-be real numbers (integers, fractions, or floats). If either the ``x''
+be real numbers (integers, fractions, or floats). One exception to this
+is that the ``y'' entry can consist of a vector of numbers combined with
+error forms, in which case the points will be plotted with the
+appropriate error bars. Other than this, if either the ``x''
value or the ``y'' value of a given data point is not a real number, that
data point will be omitted from the graph. The points on either side
of the invalid point will @emph{not} be connected by a line.
@@ -28800,7 +28903,9 @@ available for any device.
The @kbd{g S} (@code{calc-graph-point-style}) command similarly turns
the symbols at the data points on or off, or sets the point style.
If you turn both lines and points off, the data points will show as
-tiny dots.
+tiny dots. If the ``y'' values being plotted contain error forms and
+the connecting lines are turned off, then this command will also turn
+the error bars on or off.
@cindex @code{LineStyles} variable
@cindex @code{PointStyles} variable
@@ -34510,10 +34615,9 @@ See @ref{Graphics}.@*
The variable @code{calc-gnuplot-name} should be the name of the
GNUPLOT program (a string). If you have GNUPLOT installed on your
system but Calc is unable to find it, you may need to set this
-variable. (@pxref{Customizing Calc})
-You may also need to set some Lisp variables to show Calc how to run
-GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} . The default value
-of @code{calc-gnuplot-name} is @code{"gnuplot"}.
+variable. You may also need to set some Lisp variables to show Calc how
+to run GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} .
+The default value of @code{calc-gnuplot-name} is @code{"gnuplot"}.
@end defvar
@defvar calc-gnuplot-plot-command
@@ -34769,6 +34873,20 @@ should also be added to @code{calc-embedded-announce-formula-alist}
and @code{calc-embedded-open-close-plain-alist}.
@end defvar
+@defvar calc-multiplication-has-precedence
+The variable @code{calc-multiplication-has-precedence} determines
+whether multiplication has precedence over division in algebraic
+formulas in normal language modes. If
+@code{calc-multiplication-has-precedence} is non-@code{nil}, then
+multiplication has precedence (and, for certain obscure reasons, is
+right associative), and so for example @samp{a/b*c} will be interpreted
+as @samp{a/(b*c)}. If @code{calc-multiplication-has-precedence} is
+@code{nil}, then multiplication has the same precedence as division
+(and, like division, is left associative), and so for example
+@samp{a/b*c} will be interpreted as @samp{(a/b)*c}. The default value
+of @code{calc-multiplication-has-precedence} is @code{t}.
+@end defvar
+
@node Reporting Bugs, Summary, Customizing Calc, Top
@appendix Reporting Bugs
@@ -36092,11 +36210,6 @@ the corresponding full Lisp name is derived by adding a prefix of
@printindex fn
-@summarycontents
-
-@c [end]
-
-@contents
@bye
diff --git a/man/cc-mode.texi b/doc/misc/cc-mode.texi
index af16e6553f2..7c9a2ac1f1b 100644
--- a/man/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -81,7 +81,7 @@ the second with them pointing to the XEmacs manuals.
@comment No overfull hbox marks in the dvi file.
@finalout
-@setfilename ../info/ccmode
+@setfilename ../../info/ccmode
@settitle CC Mode Manual
@footnotestyle end
@@ -208,9 +208,9 @@ license to the document, as described in section 6 of the license.
@vskip 0pt plus 1filll
@insertcopying
-This manual was generated from $Revision$ of $RCSfile$, which can be
-downloaded from
-@url{http://cvs.savannah.gnu.org/viewcvs/emacs/emacs/man/cc-mode.texi}.
+This manual was generated from cc-mode.texi, which can be downloaded
+from
+@url{http://cvs.savannah.gnu.org/viewcvs/emacs/emacs/doc/misc/cc-mode.texi}.
@end titlepage
@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/man/cl.texi b/doc/misc/cl.texi
index 0a09caee98e..ea485ef84f8 100644
--- a/man/cl.texi
+++ b/doc/misc/cl.texi
@@ -1,5 +1,5 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/cl
+@setfilename ../../info/cl
@settitle Common Lisp Extensions
@copying
diff --git a/man/dired-x.texi b/doc/misc/dired-x.texi
index bf2d5288abc..dfc9ee93922 100644
--- a/man/dired-x.texi
+++ b/doc/misc/dired-x.texi
@@ -15,7 +15,7 @@
@comment %**start of header (This is for running Texinfo on a region.)
@c FOR GNU EMACS USE ../info/dired-x BELOW
-@setfilename ../info/dired-x
+@setfilename ../../info/dired-x
@c dired-x.el REVISION NUMBER
@settitle Dired Extra Version 2 User's Manual
@iftex
@@ -656,11 +656,11 @@ on a file named @file{foo.tar} and you press @kbd{!}, Dired will guess
you want to @samp{tar xvf} it and suggest that as the default shell
command.
-The default is mentioned in brackets and you can type @kbd{M-p} to get
+The default is mentioned in brackets and you can type @kbd{M-n} to get
the default into the minibuffer and then edit it, e.g., to change
@samp{tar xvf} to @samp{tar tvf}. If there are several commands for a given
file, e.g., @samp{xtex} and @samp{dvips} for a @file{.dvi} file, you can type
-@kbd{M-p} several times to see each of the matching commands.
+@kbd{M-n} several times to see each of the matching commands.
Dired only tries to guess a command for a single file, never for a list
of marked files.
diff --git a/man/doclicense.texi b/doc/misc/doclicense.texi
index 83e9d6b5579..83e9d6b5579 100644
--- a/man/doclicense.texi
+++ b/doc/misc/doclicense.texi
diff --git a/man/ebrowse.texi b/doc/misc/ebrowse.texi
index c04f99f954c..4fde4dc1414 100644
--- a/man/ebrowse.texi
+++ b/doc/misc/ebrowse.texi
@@ -1,7 +1,7 @@
\input texinfo @c -*-texinfo-*-
@comment %**start of header
-@setfilename ../info/ebrowse
+@setfilename ../../info/ebrowse
@settitle A Class Browser for C++
@setchapternewpage odd
@syncodeindex fn cp
diff --git a/man/ediff.texi b/doc/misc/ediff.texi
index 6bb2605e0c6..0822289ba77 100644
--- a/man/ediff.texi
+++ b/doc/misc/ediff.texi
@@ -7,7 +7,7 @@
@comment Using ediff.info instead of ediff in setfilename breaks DOS.
@comment @setfilename ediff
@comment @setfilename ediff.info
-@setfilename ../info/ediff
+@setfilename ../../info/ediff
@settitle Ediff User's Manual
@synindex vr cp
diff --git a/man/emacs-mime.texi b/doc/misc/emacs-mime.texi
index 0f3c141c792..d4cbf8380b6 100644
--- a/man/emacs-mime.texi
+++ b/doc/misc/emacs-mime.texi
@@ -1,6 +1,6 @@
\input texinfo
-@setfilename ../info/emacs-mime
+@setfilename ../../info/emacs-mime
@settitle Emacs MIME Manual
@synindex fn cp
@synindex vr cp
@@ -180,8 +180,27 @@ Patches. This is intended for groups where diffs of committed files
are automatically sent to. It only works in groups matching
@code{mm-uu-diff-groups-regexp}.
+@item verbatim-marks
+@cindex verbatim-marks
+Slrn-style verbatim marks.
+
+@item LaTeX
+@cindex LaTeX
+LaTeX documents. It only works in groups matching
+@code{mm-uu-tex-groups-regexp}.
+
@end table
+@cindex text/x-verbatim
+@c Is @vindex suitable for a face?
+@vindex mm-uu-extract
+Some inlined non-@acronym{MIME} attachments are displayed using the face
+@code{mm-uu-extract}. By default, no @acronym{MIME} button for these
+parts is displayed. You can force displaying a button using @kbd{K b}
+(@code{gnus-summary-display-buttonized}) or add @code{text/x-verbatim}
+to @code{gnus-buttonized-mime-types}, @xref{MIME Commands, ,MIME
+Commands, gnus, Gnus Manual}.
+
@node Handles
@section Handles
@@ -849,6 +868,36 @@ ISO-8859-1 if possible, you can set this variable to
@code{(iso-8859-1)}. You can override this setting on a per-message
basis by using the @code{charset} @acronym{MML} tag (@pxref{MML Definition}).
+As different hierarchies prefer different charsets, you may want to set
+@code{mm-coding-system-priorities} according to the hierarchy in Gnus.
+Here's an example:
+
+@c Corrections about preferred charsets are welcome. de, fr and fj
+@c should be correct, I don't know about the rest (so these are only
+@c examples):
+@lisp
+(add-to-list 'gnus-newsgroup-variables 'mm-coding-system-priorities)
+(setq gnus-parameters
+ (nconc
+ ;; Some charsets are just examples!
+ '(("^cn\\." ;; Chinese
+ (mm-coding-system-priorities
+ '(iso-8859-1 cn-big5 chinese-iso-7bit utf-8)))
+ ("^cz\\.\\|^pl\\." ;; Central and Eastern European
+ (mm-coding-system-priorities '(iso-8859-2 utf-8)))
+ ("^de\\." ;; German language
+ (mm-coding-system-priorities '(iso-8859-1 iso-8859-15 utf-8)))
+ ("^fr\\." ;; French
+ (mm-coding-system-priorities '(iso-8859-15 iso-8859-1 utf-8)))
+ ("^fj\\." ;; Japanese
+ (mm-coding-system-priorities
+ '(iso-8859-1 iso-2022-jp iso-2022-jp-2 shift_jis utf-8)))
+ ("^ru\\." ;; Cyrillic
+ (mm-coding-system-priorities
+ '(koi8-r iso-8859-5 iso-8859-1 utf-8))))
+ gnus-parameters))
+@end lisp
+
@item mm-content-transfer-encoding-defaults
@vindex mm-content-transfer-encoding-defaults
Mapping from @acronym{MIME} types to encoding to use. This variable is usually
@@ -1155,7 +1204,7 @@ Return the value of the field under point.
@item mail-encode-encoded-word-region
@findex mail-encode-encoded-word-region
Encode the non-@acronym{ASCII} words in the region. For instance,
-@samp{Naïve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
+@samp{Na@"{@dotless{i}}ve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
@item mail-encode-encoded-word-buffer
@findex mail-encode-encoded-word-buffer
@@ -1168,7 +1217,7 @@ Encode the words that need encoding in a string, and return the result.
@example
(mail-encode-encoded-word-string
- "This is naïve, baby")
+ "This is na@"{@dotless{i}}ve, baby")
@result{} "This is =?iso-8859-1?q?na=EFve,?= baby"
@end example
@@ -1183,7 +1232,7 @@ Decode the encoded words in the string and return the result.
@example
(mail-decode-encoded-word-string
"This is =?iso-8859-1?q?na=EFve,?= baby")
-@result{} "This is naïve, baby"
+@result{} "This is na@"{@dotless{i}}ve, baby"
@end example
@end table
diff --git a/man/erc.texi b/doc/misc/erc.texi
index 3e52bb42c92..fa5790f1527 100644
--- a/man/erc.texi
+++ b/doc/misc/erc.texi
@@ -1,6 +1,6 @@
\input texinfo
@c %**start of header
-@setfilename ../info/erc
+@setfilename ../../info/erc
@settitle ERC Manual
@c %**end of header
@@ -68,6 +68,10 @@ and modified without restriction.
* Advanced Usage:: Cool ways of using ERC.
* Getting Help and Reporting Bugs::
* History:: The history of ERC.
+* Copying:: The GNU General Public License gives you
+ permission to redistribute ERC on
+ certain terms; it also explains that
+ there is no warranty.
* GNU Free Documentation License:: The license for this documentation.
* Concept Index:: Search for terms.
@@ -389,7 +393,7 @@ buffers in Emacs. We call these ``query buffers''.
@item highlighting
-Some occurences of words can be highlighted, which makes it easier to
+Some occurrences of words can be highlighted, which makes it easier to
track different kinds of conversations.
@item notification
@@ -900,7 +904,7 @@ stuff, to the current ERC buffer."
@c previous chapter)
This section has not yet been written. For now, the easiest way to
-check out the available option for ERC is to do
+check out the available options for ERC is to do
@kbd{M-x customize-group erc RET}.
@@ -916,7 +920,7 @@ or if you have bugs to report, there are several places you can go.
@itemize @bullet
@item
-@uref{http://www.emacswiki.org/cgi-bin/wiki/EmacsIRCClient} is the
+@uref{http://www.emacswiki.org/cgi-bin/wiki/ERC} is the
emacswiki.org page for ERC. Anyone may add tips, hints, or bug
descriptions to it.
@@ -929,14 +933,11 @@ The mailing lists are also available on Gmane.
accessing the mailing lists, adding content to them, and searching them.
@enumerate
-@item gmane.emacs.erc.announce
-Announcements
+@item gmane.emacs.erc.announce: Announcements
-@item gmane.emacs.erc.discuss
-General discussion
+@item gmane.emacs.erc.discuss: General discussion
-@item gmane.emacs.erc.cvs
-Log messages for changes to the ERC source code
+@item gmane.emacs.erc.cvs: Log messages for changes to the ERC source code
@end enumerate
@@ -948,7 +949,7 @@ questions.
@end itemize
-@node History, GNU Free Documentation License, Getting Help and Reporting Bugs, Top
+@node History, Copying, Getting Help and Reporting Bugs, Top
@comment node-name, next, previous, up
@chapter History
@cindex history, of ERC
@@ -1010,8 +1011,12 @@ our revision control system. Our mailing list address changed as well.
@end itemize
-@node GNU Free Documentation License, Concept Index, History, Top
-@appendix GNU Free Documentation License
+@node Copying, GNU Free Documentation License, History, Top
+@comment node-name, next, previous, up
+@include gpl.texi
+
+@node GNU Free Documentation License, Concept Index, Copying, Top
+@comment node-name, next, previous, up
@include doclicense.texi
@node Concept Index, , GNU Free Documentation License, Top
diff --git a/man/eshell.texi b/doc/misc/eshell.texi
index 3a4b705d2c9..a6991bbb3e3 100644
--- a/man/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
-@setfilename ../info/eshell
+@setfilename ../../info/eshell
@settitle Eshell: The Emacs Shell
@synindex vr fn
@c %**end of header
diff --git a/man/eudc.texi b/doc/misc/eudc.texi
index 7a8dbbee524..1c51eac7d97 100644
--- a/man/eudc.texi
+++ b/doc/misc/eudc.texi
@@ -1,6 +1,6 @@
\input texinfo.tex
@c %**start of header
-@setfilename ../info/eudc
+@setfilename ../../info/eudc
@settitle Emacs Unified Directory Client (EUDC) Manual
@afourpaper
@c %**end of header
diff --git a/man/faq.texi b/doc/misc/faq.texi
index 787a85443fc..fb64a22f13f 100644
--- a/man/faq.texi
+++ b/doc/misc/faq.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*- mode: texinfo; -*-
@c %**start of header
-@setfilename ../info/efaq
+@setfilename ../../info/efaq
@settitle GNU Emacs FAQ
@c %**end of header
@@ -641,13 +641,14 @@ printed manual}.
@item
You can get a printed reference card listing commands and keys to
invoke them. You can order one from the FSF for $1 (or 10 for $5),
-or you can print your own from the @file{etc/refcard.tex} or
-@file{etc/refcard.ps} files in the Emacs distribution. Beginning with
-version 21.1, the Emacs distribution comes with translations of the
-reference card into several languages; look for files named
-@file{etc/@var{lang}-refcard.*}, where @var{lang} is a two-letter code
-of the language. For example, the German version of the reference card
-is in the files @file{etc/de-refcard.tex} and @file{etc/de-refcard.ps}.
+or you can print your own from the @file{etc/refcards/refcard.tex} or
+@file{etc/refcards/refcard.ps} files in the Emacs distribution.
+Beginning with version 21.1, the Emacs distribution comes with
+translations of the reference card into several languages; look for
+files named @file{etc/refcards/@var{lang}-refcard.*}, where @var{lang}
+is a two-letter code of the language. For example, the German version
+of the reference card is in the files @file{etc/refcards/de-refcard.tex}
+and @file{etc/recards/de-refcard.ps}.
@item
There are many other commands in Emacs for getting help and
@@ -835,7 +836,7 @@ Make sure the first line of the Texinfo file looks like this:
You may need to change @samp{texinfo} to the full pathname of the
@file{texinfo.tex} file, which comes with Emacs as
-@file{man/texinfo.tex} (or copy or link it into the current directory).
+@file{doc/misc/texinfo.tex} (or copy or link it into the current directory).
@item
Type @kbd{texi2dvi @var{texinfo-source}}, where @var{texinfo-source} is
@@ -1012,7 +1013,8 @@ while.
@item
In the Emacs distribution. Since Emacs 18.56, the FAQ at the time
of release has been part of the Emacs distribution as either
-@file{etc/FAQ} or @file{man/faq.texi} (@pxref{File-name conventions}).
+@file{etc/FAQ}, @file{man/faq.texi}, or (from version 23 onwards)
+@file{doc/misc/faq.texi} (@pxref{File-name conventions}).
@item
Via anonymous ftp and e-mail from @file{rtfm.mit.edu} (and its mirror in
diff --git a/man/flymake.texi b/doc/misc/flymake.texi
index b5ad634c803..6ab4c199de6 100644
--- a/man/flymake.texi
+++ b/doc/misc/flymake.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@comment %**start of header
-@setfilename ../info/flymake
+@setfilename ../../info/flymake
@set VERSION 0.3
@set UPDATED April 2004
@settitle GNU Flymake @value{VERSION}
diff --git a/man/forms.texi b/doc/misc/forms.texi
index 4114453df6c..c2afc9a4a63 100644
--- a/man/forms.texi
+++ b/doc/misc/forms.texi
@@ -3,7 +3,7 @@
@c Written by Johan Vromans, and edited by Richard Stallman
@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename ../info/forms
+@setfilename ../../info/forms
@settitle Forms Mode User's Manual
@syncodeindex vr cp
@syncodeindex fn cp
diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi
new file mode 100644
index 00000000000..1fead8c9b80
--- /dev/null
+++ b/doc/misc/gnus-coding.texi
@@ -0,0 +1,381 @@
+\input texinfo
+
+@setfilename gnus-coding
+@settitle Gnus Coding Style and Maintainance Guide
+@syncodeindex fn cp
+@syncodeindex vr cp
+@syncodeindex pg cp
+
+@copying
+Copyright (c) 2004, 2005, 2007 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end quotation
+@end copying
+
+
+@titlepage
+@title Gnus Coding Style and Maintainance Guide
+
+@author by Reiner Steib <Reiner.Steib@@gmx.de>
+
+@insertcopying
+@end titlepage
+
+@c Obviously this is only a very rudimentary draft. We put it in CVS
+@c anyway hoping that it might annoy someone enough to fix it. ;-)
+@c Fixing only a paragraph also is appreciated.
+
+@node Top
+@top Gnus Coding Style and Maintainance Guide
+This manual describes @dots{}
+@menu
+* Gnus Coding Style:: Gnus Coding Style
+* Gnus Maintainance Guide:: Gnus Maintainance Guide
+@end menu
+
+@c @ref{Gnus Reference Guide, ,Gnus Reference Guide, gnus, The Gnus Newsreader}
+
+@node Gnus Coding Style
+@chapter Gnus Coding Style
+@section Dependencies
+
+The Gnus distribution contains a lot of libraries that have been written
+for Gnus and used intensively for Gnus. But many of those libraries are
+useful on their own. E.g. other Emacs Lisp packages might use the
+@acronym{MIME} library @xref{Top, ,Top, emacs-mime, The Emacs MIME
+Manual}.
+
+@subsection General purpose libraries
+
+@table @file
+
+@item netrc.el
+@file{.netrc} parsing functionality.
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item format-spec.el
+Functions for formatting arbitrary formatting strings.
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item hex-util.el
+Functions to encode/decode hexadecimal string.
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+@end table
+
+@subsection Encryption and security
+
+@table @file
+@item encrypt.el
+File encryption routines
+@c As of 2005-10-25...
+There are no Gnus dependencies in this file.
+
+@item password.el
+Read passwords from user, possibly using a password cache.
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item tls.el
+TLS/SSL support via wrapper around GnuTLS
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item pgg*.el
+Glue for the various PGP implementations.
+@c As of 2005-10-21...
+There are no Gnus dependencies in these files.
+
+@item sha1.el
+SHA1 Secure Hash Algorithm.
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+@end table
+
+@subsection Networking
+
+@table @file
+@item dig.el
+Domain Name System dig interface.
+@c As of 2005-10-21...
+There are no serious Gnus dependencies in this file. Uses
+@code{gnus-run-mode-hooks} (a wrapper function).
+
+@item dns.el, dns-mode.el
+Domain Name Service lookups.
+@c As of 2005-10-21...
+There are no Gnus dependencies in these files.
+@end table
+
+@subsection Mail and News related RFCs
+
+@table @file
+@item pop3.el
+Post Office Protocol (RFC 1460) interface.
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item imap.el
+@acronym{IMAP} library.
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item ietf-drums.el
+Functions for parsing RFC822bis headers.
+@c As of 2005-10-21...
+There are no Gnus dependencies in this file.
+
+@item rfc1843.el
+HZ (rfc1843) decoding. HZ is a data format for exchanging files of
+arbitrarily mixed Chinese and @acronym{ASCII} characters.
+@c As of 2005-10-21...
+@code{rfc1843-gnus-setup} seem to be useful only for Gnus. Maybe this
+function should be relocated to remove dependencies on Gnus. Other
+minor dependencies: @code{gnus-newsgroup-name} could be eliminated by
+using an optional argument to @code{rfc1843-decode-article-body}.
+
+@item rfc2045.el
+Functions for decoding rfc2045 headers
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+
+@item rfc2047.el
+Functions for encoding and decoding rfc2047 messages
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+@c
+Only a couple of tests for gnusy symbols.
+
+@item rfc2104.el
+RFC2104 Hashed Message Authentication Codes
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+
+@item rfc2231.el
+Functions for decoding rfc2231 headers
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+
+@item flow-fill.el
+Interpret RFC2646 "flowed" text.
+@c As of 2005-10-27...
+There are no Gnus dependencies in this file.
+
+@item uudecode.el
+Elisp native uudecode.
+@c As of 2005-12-06...
+There are no Gnus dependencies in this file.
+@c ... but the custom group is gnus-extract.
+
+@item canlock.el
+Functions for Cancel-Lock feature
+@c Cf. draft-ietf-usefor-cancel-lock-01.txt
+@c Although this draft has expired, Canlock-Lock revived in 2007 when
+@c major news providers (e.g. news.individual.org) started to use it.
+@c As of 2007-08-25...
+There are no Gnus dependencies in these files.
+
+@end table
+
+@subsection message
+
+All message composition from Gnus (both mail and news) takes place in
+Message mode buffers. Message mode is intended to be a replacement for
+Emacs mail mode. There should be no Gnus dependencies in
+@file{message.el}. Alas it is not anymore. Patches and suggestions to
+remove the dependencies are welcome.
+
+@c message.el requires nnheader which requires gnus-util.
+
+@subsection Emacs @acronym{MIME}
+
+The files @file{mml*.el} and @file{mm-*.el} provide @acronym{MIME}
+functionality for Emacs.
+
+@acronym{MML} (@acronym{MIME} Meta Language) is supposed to be
+independent from Gnus. Alas it is not anymore. Patches and suggestions
+to remove the dependencies are welcome.
+
+@subsection Gnus backends
+
+The files @file{nn*.el} provide functionality for accessing NNTP
+(@file{nntp.el}), IMAP (@file{nnimap.el}) and several other Mail back
+ends (probably @file{nnml.el}, @file{nnfolder.el} and
+@file{nnmaildir.el} are the most widely used mail back ends).
+
+@c mm-uu requires nnheader which requires gnus-util. message.el also
+@c requires nnheader.
+
+
+@section Compatibility
+
+No Gnus and Gnus 5.10.10 and up should work on:
+@itemize @bullet
+@item
+Emacs 21.1 and up.
+@item
+XEmacs 21.4 and up.
+@end itemize
+
+Gnus 5.10.8 and below should work on:
+@itemize @bullet
+@item
+Emacs 20.7 and up.
+@item
+XEmacs 21.1 and up.
+@end itemize
+
+@node Gnus Maintainance Guide
+@chapter Gnus Maintainance Guide
+
+@section Stable and development versions
+
+The development of Gnus normally is done on the CVS trunk, i.e. there
+are no separate branches to develop and test new features. Most of the
+time, the trunk is developed quite actively with more or less daily
+changes. Only after a new major release, e.g. 5.10.1, there's usually a
+feature period of several months. After the release of Gnus 5.10.6 the
+development of new features started again on the trunk while the 5.10
+series is continued on the stable branch (v5-10) from which more stable
+releases will be done when needed (5.10.7, @dots{}).
+@ref{Gnus Development, ,Gnus Development, gnus, The Gnus Newsreader}
+
+Stable releases of Gnus finally become part of Emacs. E.g. Gnus 5.8
+became a part of Emacs 21 (relabeled to Gnus 5.9). The 5.10 series
+became part of Emacs 22 as Gnus 5.11.
+
+@section Syncing
+
+@c Some MIDs related to this follow. Use http://thread.gmane.org/MID
+@c (and click on the subject) to get the thread on Gmane.
+
+@c Some quotes from Miles Bader follow...
+
+@c <v9eklyke6b.fsf@marauder.physik.uni-ulm.de>
+@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
+
+In the past, the inclusion of Gnus into Emacs was quite cumbersome. For
+each change made to Gnus in Emacs repository, it had to be checked that
+it was applied to the new Gnus version, too. Else, bug fixes done in
+Emacs repository might have been lost.
+
+With the inclusion of Gnus 5.10, Miles Bader has set up an Emacs-Gnus
+gateway to ensure the bug fixes from Emacs CVS are propagated to Gnus
+CVS semi-automatically. These bug fixes are installed on the stable
+branch and on the trunk. Basically the idea is that the gateway will
+cause all common files in Emacs and Gnus v5-10 to be identical except
+when there's a very good reason (e.g., the Gnus version string in Emacs
+says @samp{5.11}, but the v5-10 version string remains @samp{5.10.x}).
+Furthermore, all changes in these files in either Emacs or the v5-10
+branch will be installed into the Gnus CVS trunk, again except where
+there's a good reason.
+@c (typically so far the only exception has been that the changes
+@c already exist in the trunk in modified form).
+Because of this, when the next major version of Gnus will be included in
+Emacs, it should be very easy -- just plonk in the files from the Gnus
+trunk without worrying about lost changes from the Emacs tree.
+
+The effect of this is that as hacker, you should generally only have to
+make changes in one place:
+
+@itemize
+@item
+If it's a file which is thought of as being outside of Gnus (e.g., the
+new @file{encrypt.el}), you should probably make the change in the Emacs
+tree, and it will show up in the Gnus tree a few days later.
+
+If you don't have Emacs CVS access (or it's inconvenient), you can
+change such a file in the v5-10 branch, and it should propagate to Emacs
+CVS -- however, it will get some extra scrutiny (by Miles) to see if the
+changes are possibly controversial and need discussion on the mailing
+list. Many changes are obvious bug-fixes however, so often there won't
+be any problem.
+
+@item
+If it's to a Gnus file, and it's important enough that it should be part
+of Emacs and the v5-10 branch, then you can make the change on the v5-10
+branch, and it will go into Emacs CVS and the Gnus CVS trunk (a few days
+later). The most prominent examples for such changes are bug-fixed
+including improvements on the documentation.
+
+If you know that there will be conflicts (perhaps because the affected
+source code is different in v5-10 and the Gnus CVS trunk), then you can
+install your change in both places, and when I try to sync them, there
+will be a conflict -- however, since in most such cases there would be a
+conflict @emph{anyway}, it's often easier for me to resolve it simply if
+I see two @samp{identical} changes, and can just choose the proper one,
+rather than having to actually fix the code.
+
+@item
+For general Gnus development changes, of course you just make the
+change on the Gnus CVS trunk and it goes into Emacs a few years
+later... :-)
+@end itemize
+
+Of course in any case, if you just can't wait for me to sync your
+change, you can commit it in more than one place and probably there will
+be no problem; usually the changes are textually identical anyway, so
+can be easily resolved automatically (sometimes I notice silly things in
+such multiple commits, like whitespace differences, and unify those ;-).
+
+
+@c I do Emacs->Gnus less often (than Gnus->Emacs) because it tends to
+@c require more manual work.
+
+@c By default I sync about once a week. I also try to follow any Gnus
+@c threads on the mailing lists and make sure any changes being discussed
+@c are kept more up-to-date (so say 1-2 days delay for "topical" changes).
+
+@c <buovfd71nkk.fsf@mctpc71.ucom.lsi.nec.co.jp>
+
+@c BTW, just to add even more verbose explanation about the syncing thing:
+
+@section Miscellanea
+
+@heading @file{GNUS-NEWS}
+
+Starting from No Gnus, the @file{GNUS-NEWS} is created from
+@file{texi/gnus-news.texi}. Don't edit @file{GNUS-NEWS}. Edit
+@file{texi/gnus-news.texi}, type @command{make GNUS-NEWS} in the
+@file{texi} directory and commit @file{GNUS-NEWS} and
+@file{texi/gnus-news.texi}.
+
+@heading Conventions for version information in defcustoms
+
+For new customizable variables introduced in Oort Gnus (including the
+v5-10 branch) use @code{:version "22.1" ;; Oort Gnus} (including the
+comment) or e.g. @code{:version "22.2" ;; Gnus 5.10.10} if the feature
+was added for Emacs 22.2 and Gnus 5.10.10.
+@c
+If the variable is new in No Gnus use @code{:version "23.0" ;; No Gnus}.
+
+The same applies for customizable variables when its default value was
+changed.
+
+@c Local Variables:
+@c mode: texinfo
+@c coding: iso-8859-1
+@c End:
+
+@ignore
+ arch-tag: ab15234c-2c8a-4cbd-8111-1811bcc6f931
+@end ignore
diff --git a/man/gnus-faq.texi b/doc/misc/gnus-faq.texi
index 2415a7fa01e..8f0280ce9f0 100644
--- a/man/gnus-faq.texi
+++ b/doc/misc/gnus-faq.texi
@@ -128,7 +128,7 @@ What is the latest version of Gnus?
Jingle please: Gnus 5.10 is released, get it while it's
hot! As well as the step in version number is rather
small, Gnus 5.10 has tons of new features which you
-shouldn't miss. The current release (5.10.9) should be at
+shouldn't miss. The current release (5.13) should be at
least as stable as the latest release of the 5.8 series.
@node [1.2]
@@ -1286,18 +1286,23 @@ How to enable automatic word-wrap when composing messages?
@subsubheading Answer
-Say
+Starting from No Gnus, automatic word-wrap is already enabled by
+default, see the variable message-fill-column.
+
+For other versions of Gnus, say
@example
-(add-hook 'message-mode-hook
- (lambda ()
- (setq fill-column 72)
- (turn-on-auto-fill)))
+(unless (boundp 'message-fill-column)
+ (add-hook 'message-mode-hook
+ (lambda ()
+ (setq fill-column 72)
+ (turn-on-auto-fill))))
@end example
@noindent
-in ~/.gnus.el. You can reformat a paragraph by hitting
-@samp{M-q} (as usual)
+in ~/.gnus.el.
+
+You can reformat a paragraph by hitting @samp{M-q} (as usual).
@node [5.3]
@subsubheading Question 5.3
diff --git a/doc/misc/gnus-news.el b/doc/misc/gnus-news.el
new file mode 100644
index 00000000000..9f31513e435
--- /dev/null
+++ b/doc/misc/gnus-news.el
@@ -0,0 +1,121 @@
+;;; gnus-news.el --- a hack to create GNUS-NEWS from texinfo source
+;; Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+
+;; Author: Reiner Steib <Reiner.Steib@gmx.de>
+;; Keywords: tools
+
+;; 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 3, 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:
+
+(defvar gnus-news-header-disclaimer
+"GNUS NEWS -- history of user-visible changes.
+
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
+See the end of the file for license conditions.
+
+Please send Gnus bug reports to bugs@gnus.org.
+For older news, see Gnus info node \"New Features\".\n\n")
+
+(defvar gnus-news-trailer
+"
+* For older news, see Gnus info node \"New Features\".
+
+----------------------------------------------------------------------
+
+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 3, 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.
+
+ \nLocal variables:\nmode: outline
+paragraph-separate: \"[ ]*$\"\nend:\n")
+
+(defvar gnus-news-makeinfo-command "makeinfo")
+
+(defvar gnus-news-fill-column 80)
+
+(defvar gnus-news-makeinfo-switches
+ (concat " --no-headers --paragraph-indent=0"
+ " --no-validate" ;; Allow unresolved references.
+ " --fill-column=" (number-to-string
+ (+ 3 ;; will strip leading spaces later
+ (or gnus-news-fill-column 80)))))
+
+(defun batch-gnus-news ()
+ "Make GNUS-NEWS in batch mode."
+ (let (infile outfile)
+ (setq infile (car command-line-args-left)
+ command-line-args-left (cdr command-line-args-left)
+ outfile (car command-line-args-left)
+ command-line-args-left nil)
+ (if (and infile outfile)
+ (message "Creating `%s' from `%s'..." outfile infile)
+ (error "Not enough files given."))
+ (gnus-news-translate-file infile outfile)))
+
+(defun gnus-news-translate-file (infile outfile)
+ "Translate INFILE (texinfo) to OUTFILE (GNUS-NEWS)."
+ (let* ((dir (concat (or (getenv "srcdir") ".") "/"))
+ (infile (concat dir infile))
+ (buffer (find-file-noselect (concat dir outfile))))
+ (with-temp-buffer
+ ;; Could be done using `texinfmt' stuff as in `infohack.el'.
+ (insert
+ (shell-command-to-string
+ (concat gnus-news-makeinfo-command " "
+ gnus-news-makeinfo-switches " " infile)))
+ (goto-char (point-max))
+ (delete-char -1)
+ (goto-char (point-min))
+ (save-excursion
+ (while (re-search-forward "^ \\* " nil t)
+ (replace-match "\f\n* ")))
+ (save-excursion
+ (while (re-search-forward "^ \\* " nil t)
+ (replace-match "** ")))
+ (save-excursion
+ (while (re-search-forward "^ " nil t)
+ (replace-match "")))
+ ;; Avoid `*' from @ref at beginning of line:
+ (save-excursion
+ (while (re-search-forward "^\\*Note" nil t)
+ (replace-match " \\&")))
+ (goto-char (point-min))
+ (insert gnus-news-header-disclaimer)
+ (goto-char (point-max))
+ (insert gnus-news-trailer)
+ (write-region (point-min) (point-max) outfile))))
+
+;;; arch-tag: e23cdd27-eafd-4ba0-816f-98f5edb0dc29
+;;; gnus-news.el ends here
diff --git a/doc/misc/gnus-news.texi b/doc/misc/gnus-news.texi
new file mode 100644
index 00000000000..0c08a93883b
--- /dev/null
+++ b/doc/misc/gnus-news.texi
@@ -0,0 +1,264 @@
+@c -*-texinfo-*-
+
+@c Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+
+@c Permission is granted to anyone to make or distribute verbatim copies
+@c of this document as received, in any medium, provided that the
+@c copyright notice and this permission notice are preserved,
+@c thus giving the recipient permission to redistribute in turn.
+
+@c Permission is granted to distribute modified versions
+@c of this document, or of portions of it,
+@c under the above conditions, provided also that they
+@c carry prominent notices stating who last changed them.
+
+@c This file contains a list of news features Gnus. It is supposed to be
+@c included in `gnus.texi'. `GNUS-NEWS' is automatically generated from
+@c this file (see `gnus-news.el').
+
+@itemize @bullet
+
+@item Installation changes
+
+@itemize @bullet
+@item Upgrading from previous (stable) version if you have used No Gnus.
+
+If you have tried No Gnus (the unstable Gnus branch leading to this
+release) but went back to a stable version, be careful when upgrading
+to this version. In particular, you will probably want to remove the
+@file{~/News/marks} directory (perhaps selectively), so that flags are
+read from your @file{~/.newsrc.eld} instead of from the stale marks
+file, where this release will store flags for nntp. See a later entry
+for more information about nntp marks. Note that downgrading isn't
+safe in general.
+
+@item Lisp files are now installed in @file{.../site-lisp/gnus/} by default.
+It defaulted to @file{.../site-lisp/} formerly. In addition to this,
+the new installer issues a warning if other Gnus installations which
+will shadow the latest one are detected. You can then remove those
+shadows manually or remove them using @code{make
+remove-installed-shadows}.
+@end itemize
+
+@item New packages and libraries within Gnus
+
+@itemize @bullet
+
+@item Gnus includes the Emacs Lisp @acronym{SASL} library.
+
+This provides a clean @acronym{API} to @acronym{SASL} mechanisms from
+within Emacs. The user visible aspects of this, compared to the earlier
+situation, include support for @acronym{DIGEST}-@acronym{MD5} and
+@acronym{NTLM}. @xref{Top, ,Emacs SASL, sasl, Emacs SASL}.
+
+@item ManageSieve connections uses the @acronym{SASL} library by default.
+
+The primary change this brings is support for @acronym{DIGEST-MD5} and
+@acronym{NTLM}, when the server supports it.
+
+@item Gnus includes a password cache mechanism in password.el.
+
+It is enabled by default (see @code{password-cache}), with a short
+timeout of 16 seconds (see @code{password-cache-expiry}). If
+@acronym{PGG} is used as the @acronym{PGP} back end, the @acronym{PGP}
+passphrase is managed by this mechanism. Passwords for ManageSieve
+connections are managed by this mechanism, after querying the user
+about whether to do so.
+@end itemize
+
+@item Changes in summary and article mode
+
+@itemize @bullet
+
+@item Gnus now supports sticky article buffers. Those are article buffers
+that are not reused when you select another article. @xref{Sticky
+Articles}.
+
+@item International host names (@acronym{IDNA}) can now be decoded
+inside article bodies using @kbd{W i}
+(@code{gnus-summary-idna-message}). This requires that GNU Libidn
+(@url{http://www.gnu.org/software/libidn/}) has been installed.
+@c FIXME: Also mention @code{message-use-idna}?
+
+@item The non-@acronym{ASCII} group names handling has been much
+improved. The back ends that fully support non-@acronym{ASCII} group
+names are now @code{nntp}, @code{nnml}, and @code{nnrss}. Also the
+agent, the cache, and the marks features work with those back ends.
+@xref{Non-ASCII Group Names}.
+
+@item Gnus now displays @acronym{DNS} master files sent as text/dns
+using dns-mode.
+
+@item Gnus supports new limiting commands in the Summary buffer:
+@kbd{/ r} (@code{gnus-summary-limit-to-replied}) and @kbd{/ R}
+(@code{gnus-summary-limit-to-recipient}). @xref{Limiting}.
+
+@item You can now fetch all ticked articles from the server using
+@kbd{Y t} (@code{gnus-summary-insert-ticked-articles}). @xref{Summary
+Generation Commands}.
+
+@item Gnus supports a new sort command in the Summary buffer:
+@kbd{C-c C-s C-t} (@code{gnus-summary-sort-by-recipient}). @xref{Summary
+Sorting}.
+
+@item @acronym{S/MIME} now features @acronym{LDAP} user certificate searches.
+You need to configure the server in @code{smime-ldap-host-list}.
+
+@item URLs inside Open@acronym{PGP} headers are retrieved and imported
+to your PGP key ring when you click on them.
+
+@item
+Picons can be displayed right from the textual address, see
+@code{gnus-picon-style}. @xref{Picons}.
+
+@item @acronym{ANSI} @acronym{SGR} control sequences can be transformed
+using @kbd{W A}.
+
+@acronym{ANSI} sequences are used in some Chinese hierarchies for
+highlighting articles (@code{gnus-article-treat-ansi-sequences}).
+
+@item Gnus now MIME decodes articles even when they lack "MIME-Version" header.
+This changes the default of @code{gnus-article-loose-mime}.
+
+@item @code{gnus-decay-scores} can be a regexp matching score files.
+For example, set it to @samp{\\.ADAPT\\'} and only adaptive score files
+will be decayed. @xref{Score Decays}.
+
+@item Strings prefixing to the @code{To} and @code{Newsgroup} headers in
+summary lines when using @code{gnus-ignored-from-addresses} can be
+customized with @code{gnus-summary-to-prefix} and
+@code{gnus-summary-newsgroup-prefix}. @xref{To From Newsgroups}.
+
+@item You can replace @acronym{MIME} parts with external bodies.
+See @code{gnus-mime-replace-part} and @code{gnus-article-replace-part}.
+@xref{MIME Commands}, @ref{Using MIME}.
+
+@item
+The option @code{mm-fill-flowed} can be used to disable treatment of
+format=flowed messages. Also, flowed text is disabled when sending
+inline @acronym{PGP} signed messages. @xref{Flowed text, ,Flowed text,
+emacs-mime, The Emacs MIME Manual}. (New in Gnus 5.10.7)
+@c This entry is also present in the node "Oort Gnus".
+
+@end itemize
+
+@item Changes in Message mode
+
+@itemize @bullet
+@item Gnus now supports the ``hashcash'' client puzzle anti-spam mechanism.
+Use @code{(setq message-generate-hashcash t)} to enable.
+@xref{Hashcash}.
+
+@item You can now drag and drop attachments to the Message buffer.
+See @code{mml-dnd-protocol-alist} and @code{mml-dnd-attach-options}.
+@xref{MIME, ,MIME, message, Message Manual}.
+
+@item The option @code{message-yank-empty-prefix} now controls how
+empty lines are prefixed in cited text. @xref{Insertion Variables,
+,Insertion Variables, message, Message Manual}.
+
+@item Gnus uses narrowing to hide headers in Message buffers.
+The @code{References} header is hidden by default. To make all
+headers visible, use @code{(setq message-hidden-headers nil)}.
+@xref{Message Headers, ,Message Headers, message, Message Manual}.
+
+@item You can highlight different levels of citations like in the
+article buffer. See @code{gnus-message-highlight-citation}.
+
+@item @code{auto-fill-mode} is enabled by default in Message mode.
+See @code{message-fill-column}. @xref{Various Message Variables, ,
+Message Headers, message, Message Manual}.
+
+@item You can now store signature files in a special directory
+named @code{message-signature-directory}.
+
+@item The option @code{message-citation-line-format} controls the format
+of the "Whomever writes:" line. You need to set
+@code{message-citation-line-function} to
+@code{message-insert-formatted-citation-line} as well.
+@end itemize
+
+@item Changes in back ends
+
+@itemize @bullet
+@item The nntp back end stores article marks in @file{~/News/marks}.
+
+The directory can be changed using the (customizable) variable
+@code{nntp-marks-directory}, and marks can be disabled using the
+(back end) variable @code{nntp-marks-is-evil}. The advantage of this
+is that you can copy @file{~/News/marks} (using rsync, scp or
+whatever) to another Gnus installation, and it will realize what
+articles you have read and marked. The data in @file{~/News/marks}
+has priority over the same data in @file{~/.newsrc.eld}.
+
+@item
+You can import and export your @acronym{RSS} subscriptions from
+@acronym{OPML} files. @xref{RSS}.
+
+@item @acronym{IMAP} identity (@acronym{RFC} 2971) is supported.
+
+By default, Gnus does not send any information about itself, but you can
+customize it using the variable @code{nnimap-id}.
+
+@item The @code{nnrss} back end now supports multilingual text.
+Non-@acronym{ASCII} group names for the @code{nnrss} groups are also
+supported. @xref{RSS}.
+
+@item Retrieving mail with @acronym{POP3} is supported over @acronym{SSL}/@acronym{TLS} and with StartTLS.
+
+@item The nnml back end allows other compression programs beside @file{gzip}
+for compressed message files. @xref{Mail Spool}.
+
+@item The nnml back end supports group compaction.
+
+This feature, accessible via the functions
+@code{gnus-group-compact-group} (@kbd{G z} in the group buffer) and
+@code{gnus-server-compact-server} (@kbd{z} in the server buffer)
+renumbers all articles in a group, starting from 1 and removing gaps.
+As a consequence, you get a correct total article count (until
+messages are deleted again).
+@end itemize
+
+@item Appearance
+@c Maybe it's not worth to separate this from "Miscellaneous"?
+
+@itemize @bullet
+
+@item The tool bar has been updated to use GNOME icons.
+You can also customize the tool bar. There's no documentation in the
+manual yet, but @kbd{M-x customize-apropos RET -tool-bar$} should get
+you started. (Only for Emacs, not in XEmacs.)
+@c FIXME: Document this in the manual
+
+@item The tool bar icons are now (de)activated correctly
+in the group buffer, see the variable @code{gnus-group-update-tool-bar}.
+Its default value depends on your Emacs version.
+@c FIXME: Document this in the manual
+
+@item You can change the location of XEmacs' toolbars in Gnus buffers.
+See @code{gnus-use-toolbar} and @code{message-use-toolbar}.
+
+@end itemize
+
+@item Miscellaneous changes
+
+@itemize @bullet
+@item Having edited the select-method for the foreign server in the
+server buffer is immediately reflected to the subscription of the groups
+which use the server in question. For instance, if you change
+@code{nntp-via-address} into @samp{bar.example.com} from
+@samp{foo.example.com}, Gnus will connect to the news host by way of the
+intermediate host @samp{bar.example.com} from next time.
+
+@item The @file{all.SCORE} file can be edited from the group buffer
+using @kbd{W e}.
+
+@end itemize
+
+@end itemize
+
+@c gnus-news.texi ends here.
+
+@ignore
+ arch-tag: 872c7569-4340-4d73-9d1d-7826d9f94a51
+@end ignore
diff --git a/man/gnus.texi b/doc/misc/gnus.texi
index 3bce1de77b3..97e70c1cec2 100644
--- a/man/gnus.texi
+++ b/doc/misc/gnus.texi
@@ -1,11 +1,13 @@
\input texinfo
-@setfilename ../info/gnus
+@setfilename ../../info/gnus
@settitle Gnus Manual
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex pg cp
+@documentencoding ISO-8859-1
+
@copying
Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@@ -50,7 +52,7 @@ license to the document, as described in section 6 of the license.
\begin{document}
% Adjust ../Makefile.in if you change the following line:
-\newcommand{\gnusversionname}{Gnus v5.11}
+\newcommand{\gnusversionname}{Gnus v5.13}
\newcommand{\gnuschaptername}{}
\newcommand{\gnussectionname}{}
@@ -360,7 +362,7 @@ spool or your mbox file. All at the same time, if you want to push your
luck.
@c Adjust ../Makefile.in if you change the following line:
-This manual corresponds to Gnus v5.11.
+This manual corresponds to Gnus v5.13
@end ifinfo
@@ -412,6 +414,7 @@ Other related manuals
* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts.
* Sieve:(sieve). Managing Sieve scripts in Emacs.
* PGG:(pgg). @acronym{PGP/MIME} with Gnus.
+* SASL:(sasl). @acronym{SASL} authentication in Emacs.
@detailmenu
--- The Detailed Node Listing ---
@@ -454,6 +457,7 @@ Group Buffer
* Browse Foreign Server:: You can browse a server. See what it has to offer.
* Exiting Gnus:: Stop reading news and get some work done.
* Group Topics:: A folding group mode divided into topics.
+* Non-ASCII Group Names:: Accessing groups of non-English names.
* Misc Group Stuff:: Other stuff that you can to do.
Group Buffer Format
@@ -493,6 +497,7 @@ Summary Buffer
* Asynchronous Fetching:: Gnus might be able to pre-fetch articles.
* Article Caching:: You may store articles in a cache.
* Persistent Articles:: Making articles expiry-resistant.
+* Sticky Articles:: Article buffers that are not reused.
* Article Backlog:: Having already read articles hang around.
* Saving Articles:: Ways of customizing article saving.
* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
@@ -646,6 +651,7 @@ Getting News
* Direct Functions:: Connecting directly to the server.
* Indirect Functions:: Connecting indirectly to the server.
* Common Variables:: Understood by several connection functions.
+* NNTP marks:: Storing marks for @acronym{NNTP} servers.
Getting Mail
@@ -749,6 +755,7 @@ Gnus Unplugged
* Agent as Cache:: The Agent is a big cache too.
* Agent Expiry:: How to make old articles go away.
* Agent Regeneration:: How to recover from lost connections and other accidents.
+* Agent and flags:: How the Agent maintains flags.
* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
* Outgoing Messages:: What happens when you post/mail something?
* Agent Variables:: Customizing is fun.
@@ -784,17 +791,9 @@ Scoring
* Global Score Files:: Earth-spanning, ear-splitting score files.
* Kill Files:: They are still here, but they can be ignored.
* Converting Kill Files:: Translating kill files to score files.
-* GroupLens:: Getting predictions on what you like to read.
* Advanced Scoring:: Using logical expressions to build score rules.
* Score Decays:: It can be useful to let scores wither away.
-GroupLens
-
-* Using GroupLens:: How to make Gnus use GroupLens.
-* Rating Articles:: Letting GroupLens know how you rate articles.
-* Displaying Predictions:: Displaying predictions given by GroupLens.
-* GroupLens Variables:: Customizing GroupLens.
-
Advanced Scoring
* Advanced Scoring Syntax:: A definition.
@@ -901,6 +900,7 @@ New Features
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
* Oort Gnus:: It's big. It's far out. Gnus 5.10/5.11.
+* No Gnus:: Very punny.
Customization
@@ -1067,6 +1067,11 @@ you would typically set this variable to
(setq gnus-secondary-select-methods '((nnmbox "")))
@end lisp
+Note: the @acronym{NNTP} back end stores marks in marks files
+(@pxref{NNTP marks}). This feature makes it easy to share marks between
+several Gnus installations, but may slow down things a bit when fetching
+new articles. @xref{NNTP marks}, for more information.
+
@node The First Time
@section The First Time
@@ -1718,6 +1723,7 @@ long as Gnus is active.
* Browse Foreign Server:: You can browse a server. See what it has to offer.
* Exiting Gnus:: Stop reading news and get some work done.
* Group Topics:: A folding group mode divided into topics.
+* Non-ASCII Group Names:: Accessing groups of non-English names.
* Misc Group Stuff:: Other stuff that you can to do.
@end menu
@@ -1819,8 +1825,15 @@ the true unread message count is not possible efficiently. For
hysterical raisins, even the mail back ends, where the true number of
unread messages might be available efficiently, use the same limited
interface. To remove this restriction from Gnus means that the back
-end interface has to be changed, which is not an easy job. If you
-want to work on this, please contact the Gnus mailing list.
+end interface has to be changed, which is not an easy job.
+
+The nnml backend (@pxref{Mail Spool}) has a feature called ``group
+compaction'' which circumvents this deficiency: the idea is to
+renumber all articles from 1, removing all gaps between numbers, hence
+getting a correct total count. Other backends may support this in the
+future. In order to keep your total article count relatively up to
+date, you might want to compact your groups (or even directly your
+server) from time to time. @xref{Misc Group Stuff}, @xref{Server Commands}.
@item y
Number of unread, unticked, non-dormant articles.
@@ -1886,6 +1899,12 @@ the group lately.
A string that says when you last read the group (@pxref{Group
Timestamp}).
+@item F
+The disk space used by the articles fetched by both the cache and
+agent. The value is automatically scaled to bytes(B), kilobytes(K),
+megabytes(M), or gigabytes(G) to minimize the column width. A format
+of %7F is sufficient for a fixed-width column.
+
@item u
User defined specifier. The next character in the format string should
be a letter. Gnus will call the function
@@ -2071,6 +2090,11 @@ commands will move to the next group, not the next unread group. Even
the commands that say they move to the next unread group. The default
is @code{t}.
+@vindex gnus-summary-next-group-on-exit
+If @code{gnus-summary-next-group-on-exit} is @code{t}, when a summary is
+exited, the point in the group buffer is moved to the next unread group.
+Otherwise, the point is set to the group just exited. The default is
+@code{t}.
@node Selecting a Group
@section Selecting a Group
@@ -2988,6 +3012,15 @@ like this in the group parameters:
(signature "Funky Signature"))
@end example
+If you're using topics to organize your group buffer
+(@pxref{Group Topics}), note that posting styles can also be set in
+the topics parameters. Posting styles in topic parameters apply to all
+groups in this topic. More precisely, the posting-style settings for a
+group result from the hierarchical merging of all posting-style
+entries in the parameters of this group and all the topics it belongs
+to.
+
+
@item post-method
@cindex post-method
If it is set, the value is used as the method for posting message
@@ -3014,11 +3047,25 @@ translating the group parameter into a Sieve script (@pxref{Sieve
Commands}) the following Sieve code is generated:
@example
-if address \"sender\" \"sieve-admin@@extundo.com\" @{
- fileinto \"INBOX.list.sieve\";
+if address "sender" "sieve-admin@@extundo.com" @{
+ fileinto "INBOX.list.sieve";
+@}
+@end example
+
+To generate tests for multiple email-addresses use a group parameter
+like @code{(sieve address "sender" ("name@@one.org" else@@two.org"))}.
+When generating a sieve script (@pxref{Sieve Commands}) Sieve code
+like the following is generated:
+
+@example
+if address "sender" ["name@@one.org", "else@@two.org"] @{
+ fileinto "INBOX.list.sieve";
@}
@end example
+See @pxref{Sieve Commands} for commands and variables that might be of
+interest in relation to the sieve parameter.
+
The Sieve language is described in RFC 3028. @xref{Top, Emacs Sieve,
Top, sieve, Emacs Sieve}.
@@ -3132,6 +3179,33 @@ value of the @code{gnus-parameters-case-fold-search} variable to
@code{nil}. Otherwise, set it to @code{t} if you want to compare them
always in a case-insensitive manner.
+You can define different sorting to different groups via
+@code{gnus-parameters}. Here is an example to sort an @acronym{NNTP}
+group by reverse date to see the latest news at the top and an
+@acronym{RSS} group by subject. In this example, the first group is the
+Debian daily news group @code{gmane.linux.debian.user.news} from
+news.gmane.org. The @acronym{RSS} group corresponds to the Debian
+weekly news RSS feed
+@url{http://packages.debian.org/unstable/newpkg_main.en.rdf},
+@xref{RSS}.
+
+@lisp
+(setq
+ gnus-parameters
+ '(("nntp.*gmane\\.debian\\.user\\.news"
+ (gnus-show-threads nil)
+ (gnus-article-sort-functions '((not gnus-article-sort-by-date)))
+ (gnus-use-adaptive-scoring nil)
+ (gnus-use-scoring nil))
+ ("nnrss.*debian"
+ (gnus-show-threads nil)
+ (gnus-article-sort-functions 'gnus-article-sort-by-subject)
+ (gnus-use-adaptive-scoring nil)
+ (gnus-use-scoring t)
+ (gnus-score-find-score-files-function 'gnus-score-find-single)
+ (gnus-summary-line-format "%U%R%z%d %I%(%[ %s %]%)\n"))))
+@end lisp
+
@node Listing Groups
@section Listing Groups
@@ -3847,7 +3921,7 @@ Go to the next topic (@code{gnus-topic-goto-next-topic}).
@item T M-p
@kindex T M-p (Topic)
@findex gnus-topic-goto-previous-topic
-Go to the next topic (@code{gnus-topic-goto-previous-topic}).
+Go to the previous topic (@code{gnus-topic-goto-previous-topic}).
@item G p
@kindex G p (Topic)
@@ -4086,6 +4160,132 @@ happen. In fact, I hereby declare that it is @dfn{undefined} what
happens. You just have to be careful if you do stuff like that.
+@node Non-ASCII Group Names
+@section Accessing groups of non-English names
+@cindex non-ascii group names
+
+There are some news servers that provide groups of which the names are
+expressed with their native languages in the world. For instance, in a
+certain news server there are some newsgroups of which the names are
+spelled in Chinese, where people are talking in Chinese. You can, of
+course, subscribe to such news groups using Gnus. Currently Gnus
+supports non-@acronym{ASCII} group names not only with the @code{nntp}
+back end but also with the @code{nnml} back end and the @code{nnrss}
+back end.
+
+Every such group name is encoded by a certain charset in the server
+side (in an @acronym{NNTP} server its administrator determines the
+charset, but for groups in the other back ends it is determined by you).
+Gnus has to display the decoded ones for you in the group buffer and the
+article buffer, and needs to use the encoded ones when communicating
+with servers. However, Gnus doesn't know what charset is used for each
+non-@acronym{ASCII} group name. The following two variables are just
+the ones for telling Gnus what charset should be used for each group:
+
+@table @code
+@item gnus-group-name-charset-method-alist
+@vindex gnus-group-name-charset-method-alist
+An alist of select methods and charsets. The default value is
+@code{nil}. The names of groups in the server specified by that select
+method are all supposed to use the corresponding charset. For example:
+
+@lisp
+(setq gnus-group-name-charset-method-alist
+ '(((nntp "news.com.cn") . cn-gb-2312)))
+@end lisp
+
+Charsets specified for groups with this variable are preferred to the
+ones specified for the same groups with the
+@code{gnus-group-name-charset-group-alist} variable (see below).
+
+A select method can be very long, like:
+
+@lisp
+(nntp "gmane"
+ (nntp-address "news.gmane.org")
+ (nntp-end-of-line "\n")
+ (nntp-open-connection-function
+ nntp-open-via-rlogin-and-telnet)
+ (nntp-via-rlogin-command "ssh")
+ (nntp-via-rlogin-command-switches
+ ("-C" "-t" "-e" "none"))
+ (nntp-via-address @dots{}))
+@end lisp
+
+In that case, you can truncate it into @code{(nntp "gmane")} in this
+variable. That is, it is enough to contain only the back end name and
+the server name.
+
+@item gnus-group-name-charset-group-alist
+@cindex UTF-8 group names
+@vindex gnus-group-name-charset-group-alist
+An alist of regexp of group name and the charset for group names.
+@code{((".*" . utf-8))} is the default value if UTF-8 is supported,
+otherwise the default is @code{nil}. For example:
+
+@lisp
+(setq gnus-group-name-charset-group-alist
+ '(("\\.com\\.cn:" . cn-gb-2312)
+ (".*" . utf-8)))
+@end lisp
+
+Note that this variable is ignored if the match is made with
+@code{gnus-group-name-charset-method-alist}.
+@end table
+
+Those two variables are used also to determine the charset for encoding
+and decoding non-@acronym{ASCII} group names that are in the back ends
+other than @code{nntp}. It means that it is you who determine it. If
+you do nothing, the charset used for group names in those back ends will
+all be @code{utf-8} because of the last element of
+@code{gnus-group-name-charset-group-alist}.
+
+There is one more important variable for non-@acronym{ASCII} group
+names. @emph{XEmacs users must set this}. Emacs users necessarily need
+not do:
+
+@table @code
+@item nnmail-pathname-coding-system
+The value of this variable should be a coding system or @code{nil}
+(which is the default). The @code{nnml} back end, the @code{nnrss} back
+end, the @acronym{NNTP} marks feature (@pxref{NNTP marks}), the agent,
+and the cache use non-@acronym{ASCII} group names in those files and
+directories. This variable overrides the value of
+@code{file-name-coding-system} which specifies the coding system used
+when encoding and decoding those file names and directory names.
+
+In XEmacs (with the @code{mule} feature), @code{file-name-coding-system}
+is the only means to specify the coding system used to encode and decode
+file names. Therefore, @emph{you, XEmacs users, have to set it} to the
+coding system that is suitable to encode and decode non-@acronym{ASCII}
+group names. On the other hand, Emacs uses the value of
+@code{default-file-name-coding-system} if @code{file-name-coding-system}
+is @code{nil}. Normally the value of
+@code{default-file-name-coding-system} is initialized according to the
+locale, so you will need to do nothing if the value is suitable to
+encode and decode non-@acronym{ASCII} group names.
+
+The value of this variable (or @code{default-file-name-coding-system})
+does not necessarily need to be the same value that is determined by
+@code{gnus-group-name-charset-method-alist} and
+@code{gnus-group-name-charset-group-alist}.
+
+If you want to subscribe to the groups spelled in Chinese but
+@code{default-file-name-coding-system} is initialized by default to
+@code{iso-latin-1} for example, that is the most typical case where you
+have to set @code{nnmail-pathname-coding-system} even if you are an
+Emacs user. The @code{utf-8} coding system is a good candidate for it.
+Otherwise, you may change the locale in your system so that
+@code{default-file-name-coding-system} may be initialized to an
+appropriate value, instead of specifying this variable.
+@end table
+
+Note that when you copy or move articles from a non-@acronym{ASCII}
+group to another group, the charset used to encode and decode group
+names should be the same in both groups. Otherwise the Newsgroups
+header will be displayed incorrectly in the article buffer.
+
+
@node Misc Group Stuff
@section Misc Group Stuff
@@ -4152,6 +4352,15 @@ sending them over the network: they're just saved directly to the group
in question. The corresponding back end must have a request-post method
for this to work though.
+@item G z
+@kindex G z (Group)
+@findex gnus-group-compact-group
+
+Compact the group under point (@code{gnus-group-compact-group}).
+Currently implemented only in nnml (@pxref{Mail Spool}). This removes
+gaps between article numbers, hence getting a correct total article
+count.
+
@end table
Variables for the group buffer:
@@ -4179,31 +4388,6 @@ generated. It may be used to move point around, for instance.
Groups matching this regexp will always be listed in the group buffer,
whether they are empty or not.
-@item gnus-group-name-charset-method-alist
-@vindex gnus-group-name-charset-method-alist
-An alist of method and the charset for group names. It is used to show
-non-@acronym{ASCII} group names.
-
-For example:
-@lisp
-(setq gnus-group-name-charset-method-alist
- '(((nntp "news.com.cn") . cn-gb-2312)))
-@end lisp
-
-@item gnus-group-name-charset-group-alist
-@cindex UTF-8 group names
-@vindex gnus-group-name-charset-group-alist
-An alist of regexp of group name and the charset for group names. It
-is used to show non-@acronym{ASCII} group names. @code{((".*"
-utf-8))} is the default value if UTF-8 is supported, otherwise the
-default is @code{nil}.
-
-For example:
-@lisp
-(setq gnus-group-name-charset-group-alist
- '(("\\.com\\.cn:" . cn-gb-2312)))
-@end lisp
-
@end table
@node Scanning New Messages
@@ -4536,6 +4720,7 @@ command or better use it as a prefix key. For example:
* Asynchronous Fetching:: Gnus might be able to pre-fetch articles.
* Article Caching:: You may store articles in a cache.
* Persistent Articles:: Making articles expiry-resistant.
+* Sticky Articles:: Article buffers that are not reused.
* Article Backlog:: Having already read articles hang around.
* Saving Articles:: Ways of customizing article saving.
* Decoding Articles:: Gnus can treat series of (uu)encoded articles.
@@ -4838,6 +5023,13 @@ summary line spec returns the @code{To}, @code{Newsreader} or
@code{From} header, the value of the @code{To} or @code{Newsreader}
headers are used instead.
+To distinguish regular articles from those where the @code{From} field
+has been swapped, a string is prefixed to the @code{To} or
+@code{Newsgroups} header in the summary line. By default the string is
+@samp{-> } for @code{To} and @samp{=> } for @code{Newsgroups}, you can
+customize these strings with @code{gnus-summary-to-prefix} and
+@code{gnus-summary-newsgroup-prefix}.
+
@end enumerate
@vindex nnmail-extra-headers
@@ -6362,6 +6554,27 @@ Limit the summary buffer to articles that match some author
(@code{gnus-summary-limit-to-author}). If given a prefix, exclude
matching articles.
+@item / R
+@kindex / R (Summary)
+@findex gnus-summary-limit-to-recipient
+Limit the summary buffer to articles that match some recipient
+(@code{gnus-summary-limit-to-recipient}). If given a prefix, exclude
+matching articles.
+
+@item / A
+@kindex / A (Summary)
+@findex gnus-summary-limit-to-address
+Limit the summary buffer to articles in which contents of From, To or Cc
+header match a given address (@code{gnus-summary-limit-to-address}). If
+given a prefix, exclude matching articles.
+
+@item / S
+@kindex / S (Summary)
+@findex gnus-summary-limit-to-singletons
+Limit the summary buffer to articles that aren't part of any displayed
+threads (@code{gnus-summary-limit-to-singletons}). If given a prefix,
+limit to articles that are part of displayed threads.
+
@item / x
@kindex / x (Summary)
@findex gnus-summary-limit-to-extra
@@ -6427,6 +6640,13 @@ group parameter predicate
(@code{gnus-summary-limit-to-display-predicate}). @xref{Group
Parameters}, for more on this predicate.
+@item / r
+@kindex / r (Summary)
+@findex gnus-summary-limit-to-replied
+Limit the summary buffer to replied articles
+(@code{gnus-summary-limit-to-replied}). If given a prefix, exclude
+replied articles.
+
@item / E
@itemx M S
@kindex M S (Summary)
@@ -6488,6 +6708,20 @@ if @var{back-end}@code{-get-new-mail} is non-@code{nil}.
Insert all old articles in the summary buffer. If given a numbered
prefix, fetch this number of articles.
+@item / b
+@kindex / b (Summary)
+@findex gnus-summary-limit-to-bodies
+Limit the summary buffer to articles that have bodies that match a
+certain regexp (@code{gnus-summary-limit-to-bodies}). If given a
+prefix, reverse the limit. This command is quite slow since it
+requires selecting each article to find the matches.
+
+@item / h
+@kindex / h (Summary)
+@findex gnus-summary-limit-to-headers
+Like the previous command, only limit to headers instead
+(@code{gnus-summary-limit-to-headers}).
+
@end table
@@ -6988,6 +7222,12 @@ summary buffer is otherwise unthreaded.
Make the current article the child of the marked (or previous) article
(@code{gnus-summary-reparent-thread}).
+@item T M-^
+@kindex T M-^ (Summary)
+@findex gnus-summary-reparent-children
+Make the current article the parent of the marked articles
+(@code{gnus-summary-reparent-children}).
+
@end table
The following commands are thread movement commands. They all
@@ -7052,6 +7292,7 @@ Matching}).
@findex gnus-thread-sort-by-score
@findex gnus-thread-sort-by-subject
@findex gnus-thread-sort-by-author
+@findex gnus-thread-sort-by-recipient
@findex gnus-thread-sort-by-number
@findex gnus-thread-sort-by-random
@vindex gnus-thread-sort-functions
@@ -7064,8 +7305,10 @@ function, a list of functions, or a list containing functions and
By default, sorting is done on article numbers. Ready-made sorting
predicate functions include @code{gnus-thread-sort-by-number},
-@code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
-@code{gnus-thread-sort-by-date}, @code{gnus-thread-sort-by-score},
+@code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-recipient},
+@code{gnus-thread-sort-by-subject},
+@code{gnus-thread-sort-by-date},
+@code{gnus-thread-sort-by-score},
@code{gnus-thread-sort-by-most-recent-number},
@code{gnus-thread-sort-by-most-recent-date},
@code{gnus-thread-sort-by-random} and
@@ -7103,8 +7346,7 @@ say something like:
@lisp
(setq gnus-thread-sort-functions
- '((lambda (t1 t2)
- (not (gnus-thread-sort-by-number t1 t2)))
+ '((not gnus-thread-sort-by-number)
gnus-thread-sort-by-score))
@end lisp
@@ -7141,6 +7383,8 @@ say something like:
gnus-article-sort-by-subject))
@end lisp
+You can define group specific sorting via @code{gnus-parameters},
+@xref{Group Parameters}.
@node Asynchronous Fetching
@@ -7362,6 +7606,53 @@ interested in persistent articles:
(setq gnus-use-cache 'passive)
@end lisp
+@node Sticky Articles
+@section Sticky Articles
+@cindex sticky articles
+
+When you select an article the current article buffer will be reused
+according to the value of the variable
+@code{gnus-single-article-buffer}. If its value is non-@code{nil} (the
+default) all articles reuse the same article buffer. Else each group
+has its own article buffer.
+
+This implies that it's not possible to have more than one article buffer
+in a group at a time. But sometimes you might want to display all the
+latest emails from your mother, your father, your aunt, your uncle and
+your 17 cousins to coordinate the next christmas party.
+
+That's where sticky articles come in handy. A sticky article buffer
+basically is a normal article buffer, but it won't be reused when you
+select another article. You can make an article sticky with:
+
+@table @kbd
+@item A S
+@kindex A S (Summary)
+@findex gnus-sticky-article
+Make the current article sticky. If a prefix arg is given, ask for a
+name for this sticky article buffer.
+@end table
+
+To close a sticky article buffer you can use these commands:
+
+@table @kbd
+@item q
+@kindex q (Article)
+@findex bury-buffer
+Puts this sticky article buffer at the end of the list of all buffers.
+
+@item k
+@kindex k (Article)
+@findex gnus-kill-sticky-article-buffer
+Kills this sticky article buffer.
+@end table
+
+To kill all sticky article buffers you can use:
+
+@defun gnus-kill-sticky-article-buffers ARG
+Kill all sticky article buffers.
+If a prefix ARG is given, ask for confirmation.
+@end defun
@node Article Backlog
@section Article Backlog
@@ -8555,6 +8846,16 @@ is rumored to have employed this form of, uh, somewhat weak encryption.
@findex gnus-summary-morse-message
Morse decode the article buffer (@code{gnus-summary-morse-message}).
+@item W i
+@kindex W i (Summary)
+@findex gnus-summary-idna-message
+Decode IDNA encoded domain names in the current articles. IDNA
+encoded domain names looks like @samp{xn--bar}. If a string remain
+unencoded after running invoking this, it is likely an invalid IDNA
+string (@samp{xn--bar} is invalid). You must have GNU Libidn
+(@url{http://www.gnu.org/software/libidn/}) installed for this command
+to work.
+
@item W t
@item t
@kindex W t (Summary)
@@ -8657,9 +8958,9 @@ CRs into LF (this takes care of Mac line endings)
Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
Quoted-Printable is one common @acronym{MIME} encoding employed when
sending non-@acronym{ASCII} (i.e., 8-bit) articles. It typically
-makes strings like @samp{déjà vu} look like @samp{d=E9j=E0 vu}, which
-doesn't look very readable to me. Note that this is usually done
-automatically by Gnus if the message in question has a
+makes strings like @samp{d@'ej@`a vu} look like @samp{d=E9j=E0 vu},
+which doesn't look very readable to me. Note that this is usually
+done automatically by Gnus if the message in question has a
@code{Content-Transfer-Encoding} header that says that this encoding
has been done. If a prefix is given, a charset will be asked for.
@@ -8680,6 +8981,14 @@ Treat HZ or HZP (@code{gnus-article-decode-HZ}). HZ (or HZP) is one
common encoding employed when sending Chinese articles. It typically
makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.
+@item W A
+@kindex W A (Summary)
+@findex gnus-article-treat-ansi-sequences
+@cindex @acronym{ANSI} control sequences
+Translate @acronym{ANSI} SGR control sequences into overlays or
+extents (@code{gnus-article-treat-ansi-sequences}). @acronym{ANSI}
+sequences are used in some Chinese hierarchies for highlighting.
+
@item W u
@kindex W u (Summary)
@findex gnus-article-unsplit-urls
@@ -9307,7 +9616,7 @@ Translate the article from one language to another
@cindex viewing attachments
The following commands all understand the numerical prefix. For
-instance, @kbd{3 b} means ``view the third @acronym{MIME} part''.
+instance, @kbd{3 K v} means ``view the third @acronym{MIME} part''.
@table @kbd
@item b
@@ -9320,6 +9629,21 @@ View the @acronym{MIME} part.
@kindex K o (Summary)
Save the @acronym{MIME} part.
+@item K O
+@kindex K O (Summary)
+Prompt for a file name, then save the @acronym{MIME} part and strip it
+from the article. The stripped @acronym{MIME} object will be referred
+via the message/external-body @acronym{MIME} type.
+
+@item K r
+@kindex K r (Summary)
+Replace the @acronym{MIME} part with an external body.
+
+@item K d
+@kindex K d (Summary)
+Delete the @acronym{MIME} part and add some information about the
+removed part.
+
@item K c
@kindex K c (Summary)
Copy the @acronym{MIME} part.
@@ -9677,6 +10001,11 @@ Sort by article number (@code{gnus-summary-sort-by-number}).
@findex gnus-summary-sort-by-author
Sort by author (@code{gnus-summary-sort-by-author}).
+@item C-c C-s C-t
+@kindex C-c C-s C-t (Summary)
+@findex gnus-summary-sort-by-recipient
+Sort by recipient (@code{gnus-summary-sort-by-recipient}).
+
@item C-c C-s C-s
@kindex C-c C-s C-s (Summary)
@findex gnus-summary-sort-by-subject
@@ -10401,6 +10730,18 @@ Search through all subsequent (raw) articles for a regexp
Search through all previous (raw) articles for a regexp
(@code{gnus-summary-search-article-backward}).
+@item M-S
+@kindex M-S (Summary)
+@findex gnus-summary-repeat-search-article-forward
+Repeat the previous search forwards
+(@code{gnus-summary-repeat-search-article-forward}).
+
+@item M-R
+@kindex M-R (Summary)
+@findex gnus-summary-repeat-search-article-backward
+Repeat the previous search backwards
+(@code{gnus-summary-repeat-search-article-backward}).
+
@item &
@kindex & (Summary)
@findex gnus-summary-execute-command
@@ -10442,6 +10783,12 @@ Pull all cached articles (for the current group) into the summary buffer
Pull all dormant articles (for the current group) into the summary buffer
(@code{gnus-summary-insert-dormant-articles}).
+@item Y t
+@kindex Y t (Summary)
+@findex gnus-summary-insert-ticked-articles
+Pull all ticked articles (for the current group) into the summary buffer
+(@code{gnus-summary-insert-ticked-articles}).
+
@end table
@@ -10464,6 +10811,28 @@ whenever you see a message that is a collection of other messages of
some format, you @kbd{C-d} and read these messages in a more convenient
fashion.
+@vindex gnus-auto-select-on-ephemeral-exit
+The variable @code{gnus-auto-select-on-ephemeral-exit} controls what
+article should be selected after exiting a digest group. Valid values
+include:
+
+@table @code
+@item next
+Select the next article.
+
+@item next-unread
+Select the next unread article.
+
+@item next-noselect
+Move the cursor to the next article. This is the default.
+
+@item next-unread-noselect
+Move the cursor to the next unread article.
+@end table
+
+If it has any other value or there is no next (unread) article, the
+article selected before entering to the digest group will appear.
+
@item C-M-d
@kindex C-M-d (Summary)
@findex gnus-summary-read-document
@@ -10562,6 +10931,12 @@ Mark all articles, even the ticked ones, as read and then exit
Mark all articles as read and go to the next group
(@code{gnus-summary-catchup-and-goto-next-group}).
+@item Z p
+@kindex Z p (Summary)
+@findex gnus-summary-catchup-and-goto-prev-group
+Mark all articles as read and go to the previous group
+(@code{gnus-summary-catchup-and-goto-prev-group}).
+
@item Z R
@itemx C-x C-s
@kindex Z R (Summary)
@@ -10891,7 +11266,7 @@ Send a message to the mailing list owner, if List-Owner field exists.
@item C-c C-n a
@kindex C-c C-n a (Summary)
-@findex gnus-mailing-list-owner
+@findex gnus-mailing-list-archive
Browse the mailing list archive, if List-Archive field exists.
@end table
@@ -11111,6 +11486,13 @@ like. The stripped @acronym{MIME} object will be referred via the
message/external-body @acronym{MIME} type.
(@code{gnus-mime-save-part-and-strip}).
+@findex gnus-mime-replace-part
+@item r (Article)
+@kindex r (Article)
+Prompt for a file name, replace the @acronym{MIME} object with an
+external body refering to the file via the message/external-body
+@acronym{MIME} type. (@code{gnus-mime-replace-part}).
+
@findex gnus-mime-delete-part
@item d (Article)
@kindex d (Article)
@@ -11118,11 +11500,16 @@ Delete the @acronym{MIME} object from the article and replace it with some
information about the removed @acronym{MIME} object
(@code{gnus-mime-delete-part}).
+@c FIXME: gnus-auto-select-part should be documented here
+
@findex gnus-mime-copy-part
@item c (Article)
@kindex c (Article)
Copy the @acronym{MIME} object to a fresh buffer and display this buffer
-(@code{gnus-mime-copy-part}). Compressed files like @file{.gz} and
+(@code{gnus-mime-copy-part}). If given a prefix, copy the raw contents
+without decoding. If given a numerical prefix, you can do semi-manual
+charset stuff (see @code{gnus-summary-show-article-charset-alist} in
+@ref{Paging the Article}). Compressed files like @file{.gz} and
@file{.bz2} are automatically decompressed if
@code{auto-compression-mode} is enabled (@pxref{Compressed Files,,
Accessing Compressed Files, emacs, The Emacs Editor}).
@@ -11142,7 +11529,10 @@ Insert the contents of the @acronym{MIME} object into the buffer
the raw contents without decoding. If given a numerical prefix, you can
do semi-manual charset stuff (see
@code{gnus-summary-show-article-charset-alist} in @ref{Paging the
-Article}).
+Article}). Compressed files like @file{.gz} and @file{.bz2} are
+automatically decompressed depending on @code{jka-compr} regardless of
+@code{auto-compression-mode} (@pxref{Compressed Files,, Accessing
+Compressed Files, emacs, The Emacs Editor}).
@findex gnus-mime-view-part-internally
@item E (Article)
@@ -11217,7 +11607,10 @@ for sensible values.
@code{head}: Do the treatment on the headers.
@item
-@code{last}: Do this treatment on the last part.
+@code{first}: Do this treatment on the first body part.
+
+@item
+@code{last}: Do this treatment on the last body part.
@item
An integer: Do this treatment on all body parts that have a length less
@@ -11322,7 +11715,7 @@ possible but those listed are probably sufficient for most people.
@item gnus-treat-overstrike (t, integer)
@item gnus-treat-strip-cr (t, integer)
@item gnus-treat-strip-headers-in-body (t, integer)
-@item gnus-treat-strip-leading-blank-lines (t, integer)
+@item gnus-treat-strip-leading-blank-lines (t, first, integer)
@item gnus-treat-strip-multiple-blank-lines (t, integer)
@item gnus-treat-strip-pem (t, last, integer)
@item gnus-treat-strip-trailing-blank-lines (t, last, integer)
@@ -11403,6 +11796,7 @@ is controlled by @code{gnus-body-boundary-delimiter}.
@item gnus-treat-play-sounds
@vindex gnus-treat-translate
@item gnus-treat-translate
+@item gnus-treat-ansi-sequences (t)
@vindex gnus-treat-x-pgp-sig
@item gnus-treat-x-pgp-sig (head)
@@ -11615,7 +12009,8 @@ This is the delimiter mentioned above. By default, it is @samp{^L}
@item gnus-use-idna
This variable controls whether Gnus performs IDNA decoding of
internationalized domain names inside @samp{From}, @samp{To} and
-@samp{Cc} headers. This requires
+@samp{Cc} headers. @xref{IDNA, ,IDNA,message, The Message Manual},
+for how to compose such messages. This requires
@uref{http://www.gnu.org/software/libidn/, GNU Libidn}, and this
variable is only enabled if you have installed it.
@@ -11873,6 +12268,10 @@ you're in, you could say something like the following:
Modify to suit your needs.
+@vindex gnus-message-highlight-citation
+If @code{gnus-message-highlight-citation} is t, different levels of
+citations are highlighted like in Gnus article buffers also in message
+mode buffers.
@node Archived Messages
@section Archived Messages
@@ -11891,7 +12290,8 @@ Group Commands}).
@vindex gnus-message-archive-method
@code{gnus-message-archive-method} says what virtual server Gnus is to
-use to store sent messages. The default is:
+use to store sent messages. The default is @code{"archive"}, and when
+actually being used it is expanded into:
@lisp
(nnfolder "archive"
@@ -11901,6 +12301,22 @@ use to store sent messages. The default is:
(nnfolder-inhibit-expiry t))
@end lisp
+@quotation
+@vindex gnus-update-message-archive-method
+Note: a server like this is saved in the @file{~/.newsrc.eld} file first
+so that it may be used as a real method of the server which is named
+@code{"archive"} (that is, for the case where
+@code{gnus-message-archive-method} is set to @code{"archive"}) ever
+since. If it once has been saved, it will never be updated by default
+even if you change the value of @code{gnus-message-archive-method}
+afterward. Therefore, the server @code{"archive"} doesn't necessarily
+mean the @code{nnfolder} server like this at all times. If you want the
+saved method to reflect always the value of
+@code{gnus-message-archive-method}, set the
+@code{gnus-update-message-archive-method} variable to a non-@code{nil}
+value. The default value of this variable is @code{nil}.
+@end quotation
+
You can, however, use any mail select method (@code{nnml},
@code{nnmbox}, etc.). @code{nnfolder} is a quite likable select method
for doing this sort of thing, though. If you don't like the default
@@ -12104,6 +12520,9 @@ name can be one of:
@item @code{body}
@end itemize
+Note that the @code{signature-file} attribute honors the variable
+@code{message-signature-directory}.
+
The attribute name can also be a string or a symbol. In that case,
this will be used as a header name, and the value will be inserted in
the headers of the article; if the value is @code{nil}, the header
@@ -12535,6 +12954,15 @@ Request that the server regenerate all its data structures
(@code{gnus-server-regenerate-server}). This can be useful if you have
a mail back end that has gotten out of sync.
+@item z
+@kindex z (Server)
+@findex gnus-server-compact-server
+
+Compact all groups in the server under point
+(@code{gnus-server-compact-server}). Currently implemented only in
+nnml (@pxref{Mail Spool}). This removes gaps between article numbers,
+hence getting a correct total article count.
+
@end table
@@ -12616,7 +13044,19 @@ configuration to the example above:
(nntp-via-rlogin-command "ssh")
@end lisp
-See also @code{nntp-via-rlogin-command-switches}.
+See also @code{nntp-via-rlogin-command-switches}. Here's an example for
+an indirect connection:
+@lisp
+(setq gnus-select-method
+ '(nntp "indirect"
+ (nntp-address "news.server.example")
+ (nntp-via-user-name "intermediate_user_name")
+ (nntp-via-address "intermediate.host.example")
+ (nntp-via-rlogin-command "ssh")
+ (nntp-end-of-line "\n")
+ (nntp-via-rlogin-command-switches ("-C" "-t" "-e" "none"))
+ (nntp-open-connection-function nntp-open-via-rlogin-and-telnet)))
+@end lisp
If you're behind a firewall, but have direct access to the outside world
through a wrapper command like "runsocks", you could open a socksified
@@ -13006,9 +13446,9 @@ that doesn't seem to work.
It is possible to customize how the connection to the nntp server will
be opened. If you specify an @code{nntp-open-connection-function}
parameter, Gnus will use that function to establish the connection.
-Six pre-made functions are supplied. These functions can be grouped in
-two categories: direct connection functions (four pre-made), and
-indirect ones (two pre-made).
+Seven pre-made functions are supplied. These functions can be grouped
+in two categories: direct connection functions (four pre-made), and
+indirect ones (three pre-made).
@item nntp-never-echoes-commands
@vindex nntp-never-echoes-commands
@@ -13049,6 +13489,7 @@ INN versions 2.3.0 and later, for instance.
* Direct Functions:: Connecting directly to the server.
* Indirect Functions:: Connecting indirectly to the server.
* Common Variables:: Understood by several connection functions.
+* NNTP marks:: Storing marks for @acronym{NNTP} servers.
@end menu
@@ -13158,6 +13599,41 @@ the telnet command requires a pseudo-tty allocation on an intermediate
host.
@end table
+Note that you may want to change the value for @code{nntp-end-of-line}
+to @samp{\n} (@pxref{Common Variables}).
+
+@item nntp-open-via-rlogin-and-netcat
+@findex nntp-open-via-rlogin-and-netcat
+Does essentially the same, but uses
+@uref{http://netcat.sourceforge.net/, netcat} instead of @samp{telnet}
+to connect to the real @acronym{NNTP} server from the intermediate host.
+
+@code{nntp-open-via-rlogin-and-netcat}-specific variables:
+
+@table @code
+@item nntp-via-netcat-command
+@vindex nntp-via-netcat-command
+Command used to connect to the real @acronym{NNTP} server from the
+intermediate host. The default is @samp{nc}. You can also use other
+programs like @uref{http://www.imasy.or.jp/~gotoh/ssh/connect.html,
+connect} instead.
+
+@item nntp-via-netcat-switches
+@vindex nntp-via-netcat-switches
+List of strings to be used as the switches to the
+@code{nntp-via-telnet-command} command. The default is @code{nil}.
+
+@item nntp-via-rlogin-command
+@vindex nntp-via-rlogin-command
+Command used to log in on the intermediate host. The default is
+@samp{rsh}, but @samp{ssh} is a popular alternative.
+
+@item nntp-via-rlogin-command-switches
+@vindex nntp-via-rlogin-command-switches
+List of strings to be used as the switches to
+@code{nntp-via-rlogin-command}. The default is @code{nil}.
+@end table
+
@item nntp-open-via-telnet-and-telnet
@findex nntp-open-via-telnet-and-telnet
Does essentially the same, but uses @samp{telnet} instead of
@@ -13193,6 +13669,8 @@ is @samp{bash\\|\$ *\r?$\\|> *\r?}.
@end table
+Note that you may want to change the value for @code{nntp-end-of-line}
+to @samp{\n} (@pxref{Common Variables}).
@end table
@@ -13247,7 +13725,7 @@ not work with named ports.
@vindex nntp-end-of-line
String to use as end-of-line marker when talking to the @acronym{NNTP}
server. This is @samp{\r\n} by default, but should be @samp{\n} when
-using a non native connection function.
+using a non native telnet connection function.
@item nntp-telnet-command
@vindex nntp-telnet-command
@@ -13263,6 +13741,52 @@ is @samp{("-8")}.
@end table
+@node NNTP marks
+@subsubsection NNTP marks
+@cindex storing NNTP marks
+
+Gnus stores marks (@pxref{Marking Articles}) for @acronym{NNTP}
+servers in marks files. A marks file records what marks you have set
+in a group and each file is specific to the corresponding server.
+Marks files are stored in @file{~/News/marks}
+(@code{nntp-marks-directory}) under a classic hierarchy resembling
+that of a news server, for example marks for the group
+@samp{gmane.discuss} on the news.gmane.org server will be stored in
+the file @file{~/News/marks/news.gmane.org/gmane/discuss/.marks}.
+
+Marks files are useful because you can copy the @file{~/News/marks}
+directory (using rsync, scp or whatever) to another Gnus installation,
+and it will realize what articles you have read and marked. The data
+in @file{~/News/marks} has priority over the same data in
+@file{~/.newsrc.eld}.
+
+Note that marks files are very much server-specific: Gnus remembers
+the article numbers so if you don't use the same servers on both
+installations things are most likely to break (most @acronym{NNTP}
+servers do not use the same article numbers as any other server).
+However, if you use servers A, B, C on one installation and servers A,
+D, E on the other, you can sync the marks files for A and then you'll
+get synchronization for that server between the two installations.
+
+Using @acronym{NNTP} marks can possibly incur a performance penalty so
+if Gnus feels sluggish, try setting the @code{nntp-marks-is-evil}
+variable to @code{t}. Marks will then be stored in @file{~/.newsrc.eld}.
+
+Related variables:
+
+@table @code
+
+@item nntp-marks-is-evil
+@vindex nntp-marks-is-evil
+If non-@code{nil}, this back end will ignore any marks files. The
+default is @code{nil}.
+
+@item nntp-marks-directory
+@vindex nntp-marks-directory
+The directory where marks for nntp groups will be stored.
+
+@end table
+
@node News Spool
@subsection News Spool
@@ -13926,7 +14450,9 @@ mapped into the @code{imap-shell-program} variable. This should be a
ssh %s imapd
@end example
-The valid format specifier characters are:
+Make sure nothing is interfering with the output of the program, e.g.,
+don't forget to redirect the error output to the void. The valid format
+specifier characters are:
@table @samp
@item s
@@ -14342,7 +14868,7 @@ body of the messages:
The buffer is narrowed to the message in question when @var{function}
is run. That's why @code{(widen)} needs to be called after
@code{save-excursion} and @code{save-restriction} in the example
-above. Also note that with the nnimap backend, message bodies will
+above. Also note that with the nnimap back end, message bodies will
not be downloaded by default. You need to set
@code{nnimap-split-download-body} to @code{t} to do that
(@pxref{Splitting in IMAP}).
@@ -14956,12 +15482,16 @@ This can also be done non-destructively with
@findex nnmail-remove-tabs
Translate all @samp{TAB} characters into @samp{SPACE} characters.
-@item nnmail-fix-eudora-headers
-@findex nnmail-fix-eudora-headers
+@item nnmail-ignore-broken-references
+@findex nnmail-ignore-broken-references
+@c @findex nnmail-fix-eudora-headers
@cindex Eudora
-Eudora produces broken @code{References} headers, but OK
-@code{In-Reply-To} headers. This function will get rid of the
-@code{References} headers.
+@cindex Pegasus
+Some mail user agents (e.g. Eudora and Pegasus) produce broken
+@code{References} headers, but correct @code{In-Reply-To} headers. This
+function will get rid of the @code{References} header if the headers
+contain a line matching the regular expression
+@code{nnmail-broken-references-mailers}.
@end table
@@ -15186,7 +15716,7 @@ When the marks file is used (which it is by default), @code{nnml}
servers have the property that you may backup them using @code{tar} or
similar, and later be able to restore them into Gnus (by adding the
proper @code{nnml} server) and have all your marks be preserved. Marks
-for a group is usually stored in the @code{.marks} file (but see
+for a group are usually stored in the @code{.marks} file (but see
@code{nnml-marks-file-name}) within each @code{nnml} group's directory.
Individual @code{nnml} groups are also possible to backup, use @kbd{G m}
to restore the group (after restoring the backup into the nnml
@@ -15245,7 +15775,18 @@ The name of the @dfn{marks} files. The default is @file{.marks}.
@item nnml-use-compressed-files
@vindex nnml-use-compressed-files
If non-@code{nil}, @code{nnml} will allow using compressed message
-files.
+files. This requires @code{auto-compression-mode} to be enabled
+(@pxref{Compressed Files, ,Compressed Files, emacs, The Emacs Manual}).
+If the value of @code{nnml-use-compressed-files} is a string, it is used
+as the file extension specifying the compression program. You can set it
+to @samp{.bz2} if your Emacs supports it. A value of @code{t} is
+equivalent to @samp{.gz}.
+
+@item nnml-compressed-files-size-threshold
+@vindex nnml-compressed-files-size-threshold
+Default size threshold for compressed message files. Message files with
+bodies larger than that many characters will be automatically compressed
+if @code{nnml-use-compressed-files} is non-@code{nil}.
@end table
@@ -15958,7 +16499,7 @@ group as read.
If the search engine changes its output substantially, @code{nnweb}
won't be able to parse it and will fail. One could hardly fault the Web
-providers if they were to do this---their @emph{raison d'être} is to
+providers if they were to do this---their @emph{raison d'@^etre} is to
make money off of advertisements, not to provide services to the
community. Since @code{nnweb} washes the ads off all the articles, one
might think that the providers might be somewhat miffed. We'll see.
@@ -16238,6 +16779,15 @@ data files. The default is the value of
@code{mm-universal-coding-system} (which defaults to @code{emacs-mule}
in Emacs or @code{escape-quoted} in XEmacs).
+@item nnrss-ignore-article-fields
+@vindex nnrss-ignore-article-fields
+Some feeds update constantly article fields during their publications,
+e.g. to indicate the number of comments. However, if there is
+a difference between the local article and the distant one, the latter
+is considered to be new. To avoid this and discard some fields, set this
+variable to the list of fields to be ignored. The default is
+@code{'(slash:comments)}.
+
@item nnrss-use-local
@vindex nnrss-use-local
@findex nnrss-generate-download-script
@@ -16275,7 +16825,7 @@ summary buffer.
@lisp
(require 'browse-url)
-(defun browse-nnrss-url( arg )
+(defun browse-nnrss-url (arg)
(interactive "p")
(let ((url (assq nnrss-url-field
(mail-header-extra
@@ -16529,8 +17079,10 @@ to OpenSSL/SSLeay.
@vindex imap-shell-program
@vindex imap-shell-host
-For @acronym{IMAP} connections using the @code{shell} stream, the variable
-@code{imap-shell-program} specify what program to call.
+For @acronym{IMAP} connections using the @code{shell} stream, the
+variable @code{imap-shell-program} specify what program to call. Make
+sure nothing is interfering with the output of the program, e.g., don't
+forget to redirect the error output to the void.
@item nnimap-authenticator
@vindex nnimap-authenticator
@@ -16709,6 +17261,30 @@ messages, you start cursing Gnus for being so slow. On the other hand,
if you get a lot of email within a week, setting this variable will
cause a lot of network traffic between Gnus and the IMAP server.
+@item nnimap-logout-timeout
+@vindex nnimap-logout-timeout
+
+There is a case where a connection to a @acronym{IMAP} server is unable
+to close, when connecting to the server via a certain kind of network,
+e.g. @acronym{VPN}. In that case, it will be observed that a connection
+between Emacs and the local network looks alive even if the server has
+closed a connection for some reason (typically, a timeout).
+Consequently, Emacs continues waiting for a response from the server for
+the @code{LOGOUT} command that Emacs sent, or hangs in other words. If
+you are in such a network, setting this variable to a number of seconds
+will be helpful. If it is set, a hung connection will be closed
+forcibly, after this number of seconds from the time Emacs sends the
+@code{LOGOUT} command. It should not be too small value but too large
+value will be inconvenient too. Perhaps the value 1.0 will be a good
+candidate but it might be worth trying some other values.
+
+Example server specification:
+
+@lisp
+(nnimap "mail.server.com"
+ (nnimap-logout-timeout 1.0))
+@end lisp
+
@end table
@menu
@@ -18350,7 +18926,8 @@ functionality up to the newsreader makes sense if you're the only person
reading news on a machine.
Setting up Gnus as an ``offline'' newsreader is quite simple. In
-fact, you don't even have to configure anything.
+fact, you don't have to configure anything as the agent is now enabled
+by default (@pxref{Agent Variables, gnus-agent}).
Of course, to use it as such, you have to learn a few new commands.
@@ -18362,6 +18939,7 @@ Of course, to use it as such, you have to learn a few new commands.
* Agent as Cache:: The Agent is a big cache too.
* Agent Expiry:: How to make old articles go away.
* Agent Regeneration:: How to recover from lost connections and other accidents.
+* Agent and flags:: How the Agent maintains flags.
* Agent and IMAP:: How to use the Agent with @acronym{IMAP}.
* Outgoing Messages:: What happens when you post/mail something?
* Agent Variables:: Customizing is fun.
@@ -18526,55 +19104,46 @@ listed below.
@cindex Agent Parameters
@table @code
-@item gnus-agent-cat-name
-The name of the category.
-
-@item gnus-agent-cat-groups
+@item agent-groups
The list of groups that are in this category.
-@item gnus-agent-cat-predicate
+@item agent-predicate
A predicate which (generally) gives a rough outline of which articles
are eligible for downloading; and
-@item gnus-agent-cat-score-file
+@item agent-score
a score rule which (generally) gives you a finer granularity when
deciding what articles to download. (Note that this @dfn{download
score} is not necessarily related to normal scores.)
-@item gnus-agent-cat-enable-expiration
+@item agent-enable-expiration
a boolean indicating whether the agent should expire old articles in
this group. Most groups should be expired to conserve disk space. In
fact, its probably safe to say that the gnus.* hierarchy contains the
only groups that should not be expired.
-@item gnus-agent-cat-days-until-old
+@item agent-days-until-old
an integer indicating the number of days that the agent should wait
before deciding that a read article is safe to expire.
-@item gnus-agent-cat-low-score
+@item agent-low-score
an integer that overrides the value of @code{gnus-agent-low-score}.
-@item gnus-agent-cat-high-score
+@item agent-high-score
an integer that overrides the value of @code{gnus-agent-high-score}.
-@item gnus-agent-cat-length-when-short
+@item agent-short-article
an integer that overrides the value of
@code{gnus-agent-short-article}.
-@item gnus-agent-cat-length-when-long
+@item agent-long-article
an integer that overrides the value of @code{gnus-agent-long-article}.
-@c @item gnus-agent-cat-disable-undownloaded-faces
-@c a symbol indicating whether the summary buffer should @emph{not} display
-@c undownloaded articles using the gnus-summary-*-undownloaded-face
-@c faces. The symbol nil will enable the use of undownloaded faces while
-@c all other symbols disable them.
-
-@item gnus-agent-cat-enable-undownloaded-faces
+@item agent-enable-undownloaded-faces
a symbol indicating whether the summary buffer should display
-undownloaded articles using the gnus-summary-*-undownloaded-face
-faces. The symbol nil will disable the use of undownloaded faces while
-all other symbols enable them.
+undownloaded articles using the @code{gnus-summary-*-undownloaded-face}
+faces. Any symbol other than @code{nil} will enable the use of
+undownloaded faces.
@end table
The name of a category can not be changed once the category has been
@@ -19079,9 +19648,9 @@ Download all eligible (@pxref{Agent Categories}) articles in this group.
@item J s
@kindex J s (Agent Summary)
-@findex gnus-agent-fetch-series
+@findex gnus-agent-summary-fetch-series
Download all processable articles in this group.
-(@code{gnus-agent-fetch-series}).
+(@code{gnus-agent-summary-fetch-series}).
@item J u
@kindex J u (Agent Summary)
@@ -19157,21 +19726,28 @@ If you use the Agent as a cache (to avoid downloading the same article
each time you visit it or to minimize your connection time), the
undownloaded face will probably seem like a good idea. The reason
being that you do all of our work (marking, reading, deleting) with
-downloaded articles so the normal faces always appear.
-
-For occasional Agent users, the undownloaded faces may appear to be an
-absolutely horrible idea. The issue being that, since most of their
-articles have not been fetched into the Agent, most of the normal
-faces will be obscured by the undownloaded faces. If this is your
-situation, you have two choices available. First, you can completely
-disable the undownload faces by customizing
-@code{gnus-summary-highlight} to delete the three cons-cells that
-refer to the @code{gnus-summary-*-undownloaded-face} faces. Second,
-if you prefer to take a more fine-grained approach, you may set the
-@code{agent-disable-undownloaded-faces} group parameter to @code{t}.
-This parameter, like all other agent parameters, may be set on an
-Agent Category (@pxref{Agent Categories}), a Group Topic (@pxref{Topic
-Parameters}), or an individual group (@pxref{Group Parameters}).
+downloaded articles so the normal faces always appear. For those
+users using the agent to improve online performance by caching the NOV
+database (most users since 5.10.2), the undownloaded faces may appear
+to be an absolutely horrible idea. The issue being that, since none
+of their articles have been fetched into the Agent, all of the
+normal faces will be obscured by the undownloaded faces.
+
+If you would like to use the undownloaded faces, you must enable the
+undownloaded faces by setting the @code{agent-enable-undownloaded-faces}
+group parameter to @code{t}. This parameter, like all other agent
+parameters, may be set on an Agent Category (@pxref{Agent Categories}),
+a Group Topic (@pxref{Topic Parameters}), or an individual group
+(@pxref{Group Parameters}).
+
+The one problem common to all users using the agent is how quickly it
+can consume disk space. If you using the agent on many groups, it is
+even more difficult to effectively recover disk space. One solution
+is the @samp{%F} format available in @code{gnus-group-line-format}.
+This format will display the actual disk space used by articles
+fetched into both the agent and cache. By knowing which groups use
+the most space, users know where to focus their efforts when ``agent
+expiring'' articles.
@node Agent as Cache
@subsection Agent as Cache
@@ -19267,23 +19843,19 @@ then updates the internal data structures that document which articles
are stored locally. An optional argument will mark articles in the
agent as unread.
-@node Agent and IMAP
-@subsection Agent and IMAP
-
-The Agent works with any Gnus back end, including nnimap. However,
-since there are some conceptual differences between @acronym{NNTP} and
-@acronym{IMAP}, this section (should) provide you with some information to
-make Gnus Agent work smoother as a @acronym{IMAP} Disconnected Mode client.
+@node Agent and flags
+@subsection Agent and flags
-The first thing to keep in mind is that all flags (read, ticked, etc)
-are kept on the @acronym{IMAP} server, rather than in @file{.newsrc} as is the
-case for nntp. Thus Gnus need to remember flag changes when
-disconnected, and synchronize these flags when you plug back in.
+The Agent works with any Gnus back end including those, such as
+nnimap, that store flags (read, ticked, etc) on the server. Sadly,
+the Agent does not actually know which backends keep their flags in
+the backend server rather than in @file{.newsrc}. This means that the
+Agent, while unplugged or disconnected, will always record all changes
+to the flags in its own files.
-Gnus keeps track of flag changes when reading nnimap groups under the
-Agent. When you plug back in, Gnus will check if you have any changed
-any flags and ask if you wish to synchronize these with the server.
-The behavior is customizable by @code{gnus-agent-synchronize-flags}.
+When you plug back in, Gnus will then check to see if you have any
+changed any flags and ask if you wish to synchronize these with the
+server. This behavior is customizable by @code{gnus-agent-synchronize-flags}.
@vindex gnus-agent-synchronize-flags
If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
@@ -19297,6 +19869,23 @@ re-connect, you can do it manually with the
@code{gnus-agent-synchronize-flags} command that is bound to @kbd{J Y}
in the group buffer.
+Technical note: the synchronization algorithm does not work by ``pushing''
+all local flags to the server, but rather by incrementally updated the
+server view of flags by changing only those flags that were changed by
+the user. Thus, if you set one flag on an article, quit the group then
+re-select the group and remove the flag; the flag will be set and
+removed from the server when you ``synchronize''. The queued flag
+operations can be found in the per-server @code{flags} file in the Agent
+directory. It's emptied when you synchronize flags.
+
+@node Agent and IMAP
+@subsection Agent and IMAP
+
+The Agent works with any Gnus back end, including nnimap. However,
+since there are some conceptual differences between @acronym{NNTP} and
+@acronym{IMAP}, this section (should) provide you with some information to
+make Gnus Agent work smoother as a @acronym{IMAP} Disconnected Mode client.
+
Some things are currently not implemented in the Agent that you'd might
expect from a disconnected @acronym{IMAP} client, including:
@@ -19310,34 +19899,43 @@ Creating/deleting nnimap groups when unplugged.
@end itemize
-Technical note: the synchronization algorithm does not work by ``pushing''
-all local flags to the server, but rather incrementally update the
-server view of flags by changing only those flags that were changed by
-the user. Thus, if you set one flag on an article, quit the group and
-re-select the group and remove the flag; the flag will be set and
-removed from the server when you ``synchronize''. The queued flag
-operations can be found in the per-server @code{flags} file in the Agent
-directory. It's emptied when you synchronize flags.
-
-
@node Outgoing Messages
@subsection Outgoing Messages
-When Gnus is unplugged, all outgoing messages (both mail and news) are
-stored in the draft group ``queue'' (@pxref{Drafts}). You can view
-them there after posting, and edit them at will.
+By default, when Gnus is unplugged, all outgoing messages (both mail
+and news) are stored in the draft group ``queue'' (@pxref{Drafts}).
+You can view them there after posting, and edit them at will.
-When Gnus is plugged again, you can send the messages either from the
-draft group with the special commands available there, or you can use
-the @kbd{J S} command in the group buffer to send all the sendable
-messages in the draft group.
+You can control the circumstances under which outgoing mail is queued
+(see @code{gnus-agent-queue-mail}, @pxref{Agent Variables}). Outgoing
+news is always queued when Gnus is unplugged, and never otherwise.
+You can send the messages either from the draft group with the special
+commands available there, or you can use the @kbd{J S} command in the
+group buffer to send all the sendable messages in the draft group.
+Posting news will only work when Gnus is plugged, but you can send
+mail at any time.
+If sending mail while unplugged does not work for you and you worry
+about hitting @kbd{J S} by accident when unplugged, you can have Gnus
+ask you to confirm your action (see
+@code{gnus-agent-prompt-send-queue}, @pxref{Agent Variables}).
@node Agent Variables
@subsection Agent Variables
@table @code
+@item gnus-agent
+@vindex gnus-agent
+Is the agent enabled? The default is @code{t}. When first enabled,
+the agent will use @code{gnus-agent-auto-agentize-methods} to
+automatically mark some back ends as agentized. You may change which
+back ends are agentized using the agent commands in the server buffer.
+
+To enter the server buffer, use the @kbd{^}
+(@code{gnus-group-enter-server-mode}) command in the group buffer.
+
+
@item gnus-agent-directory
@vindex gnus-agent-directory
Where the Gnus Agent will store its files. The default is
@@ -19384,6 +19982,14 @@ mark articles as unread after downloading. This is usually a safe
thing to do as the newly downloaded article has obviously not been
read. The default is @code{t}.
+@item gnus-agent-synchronize-flags
+@vindex gnus-agent-synchronize-flags
+If @code{gnus-agent-synchronize-flags} is @code{nil}, the Agent will
+never automatically synchronize flags. If it is @code{ask}, which is
+the default, the Agent will check if you made any changes and if so
+ask if you wish to synchronize these when you re-connect. If it has
+any other value, all flags will be synchronized automatically.
+
@item gnus-agent-consider-all-articles
@vindex gnus-agent-consider-all-articles
If @code{gnus-agent-consider-all-articles} is non-@code{nil}, the
@@ -19432,13 +20038,26 @@ have not been fetched), @code{always-undownloaded} (maneuvering always
ignores articles that have not been fetched), @code{unfetched}
(maneuvering ignores articles whose headers have not been fetched).
+@item gnus-agent-queue-mail
+@vindex gnus-agent-queue-mail
+When @code{gnus-agent-queue-mail} is @code{always}, Gnus will always
+queue mail rather than sending it straight away. When @code{t}, Gnus
+will queue mail when unplugged only. When @code{nil}, never queue
+mail. The default is @code{t}.
+
+@item gnus-agent-prompt-send-queue
+@vindex gnus-agent-prompt-send-queue
+When @code{gnus-agent-prompt-send-queue} is non-@code{nil} Gnus will
+prompt you to confirm that you really wish to proceed if you hit
+@kbd{J S} while unplugged. The default is @code{nil}.
+
@item gnus-agent-auto-agentize-methods
@vindex gnus-agent-auto-agentize-methods
If you have never used the Agent before (or more technically, if
@file{~/News/agent/lib/servers} does not exist), Gnus will
automatically agentize a few servers for you. This variable control
-which backends should be auto-agentized. It is typically only useful
-to agentize remote backends. The auto-agentizing has the same effect
+which back ends should be auto-agentized. It is typically only useful
+to agentize remote back ends. The auto-agentizing has the same effect
as running @kbd{J a} on the servers (@pxref{Server Agent Commands}).
If the file exist, you must manage the servers manually by adding or
removing them, this variable is only applicable the first time you
@@ -19578,7 +20197,6 @@ silently to help keep the sizes of the score files down.
* Global Score Files:: Earth-spanning, ear-splitting score files.
* Kill Files:: They are still here, but they can be ignored.
* Converting Kill Files:: Translating kill files to score files.
-* GroupLens:: Getting predictions on what you like to read.
* Advanced Scoring:: Using logical expressions to build score rules.
* Score Decays:: It can be useful to let scores wither away.
@end menu
@@ -19849,6 +20467,12 @@ There aren't many of these as yet, I'm afraid.
@table @kbd
+@item W e
+@kindex W e (Group)
+@findex gnus-score-edit-all-score
+Edit the apply-to-all-groups all.SCORE file. You will be popped into
+a @code{gnus-score-mode} buffer (@pxref{Score File Editing}).
+
@item W f
@kindex W f (Group)
@findex gnus-score-flush-cache
@@ -20453,6 +21077,11 @@ The adaptive score entries will be put into a file where the name is the
group name with @code{gnus-adaptive-file-suffix} appended. The default
is @file{ADAPT}.
+@vindex gnus-adaptive-pretty-print
+Adaptive score files can get huge and are not meant to be edited by
+human hands. If @code{gnus-adaptive-pretty-print} is @code{nil} (the
+deafult) those files will not be written in a human readable way.
+
@vindex gnus-score-exact-adapt-limit
When doing adaptive scoring, substring or fuzzy matching would probably
give you the best results in most cases. However, if the header one
@@ -20705,6 +21334,13 @@ so: @kbd{I e s p To RET <your name> RET}.
See? Simple.
+@vindex gnus-inhibit-slow-scoring
+You can inhibit scoring the slow scoring on headers or body by setting
+the variable @code{gnus-inhibit-slow-scoring}. If
+@code{gnus-inhibit-slow-scoring} is regexp, slow scoring is inhibited if
+the group matches the regexp. If it is t, slow scoring on it is
+inhibited for all groups.
+
@node Scoring Tips
@section Scoring Tips
@@ -20967,205 +21603,6 @@ hand. Or just let them be as they are. Gnus will still use them as
before.
-@node GroupLens
-@section GroupLens
-@cindex GroupLens
-
-@sc{Note:} Unfortunately the GroupLens system seems to have shut down,
-so this section is mostly of historical interest.
-
-@uref{http://www.cs.umn.edu/Research/GroupLens/, GroupLens} is a
-collaborative filtering system that helps you work together with other
-people to find the quality news articles out of the huge volume of
-news articles generated every day.
-
-To accomplish this the GroupLens system combines your opinions about
-articles you have already read with the opinions of others who have done
-likewise and gives you a personalized prediction for each unread news
-article. Think of GroupLens as a matchmaker. GroupLens watches how you
-rate articles, and finds other people that rate articles the same way.
-Once it has found some people you agree with it tells you, in the form
-of a prediction, what they thought of the article. You can use this
-prediction to help you decide whether or not you want to read the
-article.
-
-@menu
-* Using GroupLens:: How to make Gnus use GroupLens.
-* Rating Articles:: Letting GroupLens know how you rate articles.
-* Displaying Predictions:: Displaying predictions given by GroupLens.
-* GroupLens Variables:: Customizing GroupLens.
-@end menu
-
-
-@node Using GroupLens
-@subsection Using GroupLens
-
-To use GroupLens you must register a pseudonym with your local
-@uref{http://www.cs.umn.edu/Research/GroupLens/bbb.html, Better Bit
-Bureau (BBB)} is the only better bit in town at the moment.
-
-Once you have registered you'll need to set a couple of variables.
-
-@table @code
-
-@item gnus-use-grouplens
-@vindex gnus-use-grouplens
-Setting this variable to a non-@code{nil} value will make Gnus hook into
-all the relevant GroupLens functions.
-
-@item grouplens-pseudonym
-@vindex grouplens-pseudonym
-This variable should be set to the pseudonym you got when registering
-with the Better Bit Bureau.
-
-@item grouplens-newsgroups
-@vindex grouplens-newsgroups
-A list of groups that you want to get GroupLens predictions for.
-
-@end table
-
-That's the minimum of what you need to get up and running with GroupLens.
-Once you've registered, GroupLens will start giving you scores for
-articles based on the average of what other people think. But, to get
-the real benefit of GroupLens you need to start rating articles
-yourself. Then the scores GroupLens gives you will be personalized for
-you, based on how the people you usually agree with have already rated.
-
-
-@node Rating Articles
-@subsection Rating Articles
-
-In GroupLens, an article is rated on a scale from 1 to 5, inclusive.
-Where 1 means something like this article is a waste of bandwidth and 5
-means that the article was really good. The basic question to ask
-yourself is, ``on a scale from 1 to 5 would I like to see more articles
-like this one?''
-
-There are four ways to enter a rating for an article in GroupLens.
-
-@table @kbd
-
-@item r
-@kindex r (GroupLens)
-@findex bbb-summary-rate-article
-This function will prompt you for a rating on a scale of one to five.
-
-@item k
-@kindex k (GroupLens)
-@findex grouplens-score-thread
-This function will prompt you for a rating, and rate all the articles in
-the thread. This is really useful for some of those long running giant
-threads in rec.humor.
-
-@end table
-
-The next two commands, @kbd{n} and @kbd{,} take a numerical prefix to be
-the score of the article you're reading.
-
-@table @kbd
-
-@item 1-5 n
-@kindex n (GroupLens)
-@findex grouplens-next-unread-article
-Rate the article and go to the next unread article.
-
-@item 1-5 ,
-@kindex , (GroupLens)
-@findex grouplens-best-unread-article
-Rate the article and go to the next unread article with the highest score.
-
-@end table
-
-If you want to give the current article a score of 4 and then go to the
-next article, just type @kbd{4 n}.
-
-
-@node Displaying Predictions
-@subsection Displaying Predictions
-
-GroupLens makes a prediction for you about how much you will like a
-news article. The predictions from GroupLens are on a scale from 1 to
-5, where 1 is the worst and 5 is the best. You can use the predictions
-from GroupLens in one of three ways controlled by the variable
-@code{gnus-grouplens-override-scoring}.
-
-@vindex gnus-grouplens-override-scoring
-There are three ways to display predictions in grouplens. You may
-choose to have the GroupLens scores contribute to, or override the
-regular Gnus scoring mechanism. override is the default; however, some
-people prefer to see the Gnus scores plus the grouplens scores. To get
-the separate scoring behavior you need to set
-@code{gnus-grouplens-override-scoring} to @code{'separate}. To have the
-GroupLens predictions combined with the grouplens scores set it to
-@code{'override} and to combine the scores set
-@code{gnus-grouplens-override-scoring} to @code{'combine}. When you use
-the combine option you will also want to set the values for
-@code{grouplens-prediction-offset} and
-@code{grouplens-score-scale-factor}.
-
-@vindex grouplens-prediction-display
-In either case, GroupLens gives you a few choices for how you would like
-to see your predictions displayed. The display of predictions is
-controlled by the @code{grouplens-prediction-display} variable.
-
-The following are valid values for that variable.
-
-@table @code
-@item prediction-spot
-The higher the prediction, the further to the right an @samp{*} is
-displayed.
-
-@item confidence-interval
-A numeric confidence interval.
-
-@item prediction-bar
-The higher the prediction, the longer the bar.
-
-@item confidence-bar
-Numerical confidence.
-
-@item confidence-spot
-The spot gets bigger with more confidence.
-
-@item prediction-num
-Plain-old numeric value.
-
-@item confidence-plus-minus
-Prediction +/- confidence.
-
-@end table
-
-
-@node GroupLens Variables
-@subsection GroupLens Variables
-
-@table @code
-
-@item gnus-summary-grouplens-line-format
-The summary line format used in GroupLens-enhanced summary buffers. It
-accepts the same specs as the normal summary line format (@pxref{Summary
-Buffer Lines}). The default is @samp{%U%R%z%l%I%(%[%4L: %-23,23n%]%)
-%s\n}.
-
-@item grouplens-bbb-host
-Host running the bbbd server. @samp{grouplens.cs.umn.edu} is the
-default.
-
-@item grouplens-bbb-port
-Port of the host running the bbbd server. The default is 9000.
-
-@item grouplens-score-offset
-Offset the prediction by this value. In other words, subtract the
-prediction value by this number to arrive at the effective score. The
-default is 0.
-
-@item grouplens-score-scale-factor
-This variable allows the user to magnify the effect of GroupLens scores.
-The scale factor is applied after the offset. The default is 1.
-
-@end table
-
-
@node Advanced Scoring
@section Advanced Scoring
@@ -21366,9 +21803,12 @@ Gnus provides a mechanism for decaying scores to help with this problem.
When score files are loaded and @code{gnus-decay-scores} is
non-@code{nil}, Gnus will run the score files through the decaying
mechanism thereby lowering the scores of all non-permanent score rules.
-The decay itself if performed by the @code{gnus-decay-score-function}
-function, which is @code{gnus-decay-score} by default. Here's the
-definition of that function:
+If @code{gnus-decay-scores} is a regexp, only score files matching this
+regexp are treated. E.g. you may set it to @samp{\\.ADAPT\\'} if only
+@emph{adaptive} score files should be decayed. The decay itself if
+performed by the @code{gnus-decay-score-function} function, which is
+@code{gnus-decay-score} by default. Here's the definition of that
+function:
@lisp
(defun gnus-decay-score (score)
@@ -21423,6 +21863,8 @@ four days, Gnus will decay the scores four times, for instance.
@include sieve.texi
@chapter PGG
@include pgg.texi
+@chapter SASL
+@include sasl.texi
@end iflatex
@end iftex
@@ -22805,6 +23247,32 @@ Face and variable:
Face to show X-Face. The colors from this face are used as the
foreground and background colors of the displayed X-Faces. The
default colors are black and white.
+
+@item gnus-face-properties-alist
+@vindex gnus-face-properties-alist
+Alist of image types and properties applied to Face (@pxref{Face}) and
+X-Face images. The default value is @code{((pbm . (:face gnus-x-face))
+(png . nil))} for Emacs or @code{((xface . (:face gnus-x-face)))} for
+XEmacs. Here are examples:
+
+@lisp
+;; Specify the altitude of Face and X-Face images in the From header.
+(setq gnus-face-properties-alist
+ '((pbm . (:face gnus-x-face :ascent 80))
+ (png . (:ascent 80))))
+
+;; Show Face and X-Face images as pressed buttons.
+(setq gnus-face-properties-alist
+ '((pbm . (:face gnus-x-face :relief -2))
+ (png . (:relief -2))))
+@end lisp
+
+@pxref{Image Descriptors, ,Image Descriptors, elisp, The Emacs Lisp
+Reference Manual} for the valid properties for various image types.
+Currently, @code{pbm} is used for X-Face images and @code{png} is used
+for Face images in Emacs. Only the @code{:face} property is effective
+on the @code{xface} image type in XEmacs if it is built with the
+@samp{libcompface} library.
@end table
If you use posting styles, you can use an @code{x-face-file} entry in
@@ -22871,6 +23339,9 @@ The contents of a @code{Face} header must be a base64 encoded PNG image.
See @uref{http://quimby.gnus.org/circus/face/} for the precise
specifications.
+The @code{gnus-face-properties-alist} variable affects the appearance of
+displayed Face images. @xref{X-Face}.
+
Viewing an @code{Face} header requires an Emacs that is able to display
PNG images.
@c Maybe add this:
@@ -22994,6 +23465,11 @@ To enable displaying picons, simply make sure that
@code{gnus-picon-databases} points to the directory containing the
Picons databases.
+@vindex gnus-picon-style
+The variable @code{gnus-picon-style} controls how picons are displayed.
+If @code{inline}, the textual representation is replaced. If
+@code{right}, picons are added right to the textual representation.
+
The following variables offer control over where things are located.
@table @code
@@ -23360,7 +23836,7 @@ call the external tools during splitting. Example fancy split method:
"spam"))))
@end lisp
-Note that with the nnimap backend, message bodies will not be
+Note that with the nnimap back end, message bodies will not be
downloaded by default. You need to set
@code{nnimap-split-download-body} to @code{t} to do that
(@pxref{Splitting in IMAP}).
@@ -23383,10 +23859,10 @@ spam. And here is the nifty function:
@cindex hashcash
A novel technique to fight spam is to require senders to do something
-costly for each message they send. This has the obvious drawback that
-you cannot rely on everyone in the world using this technique,
-since it is not part of the Internet standards, but it may be useful
-in smaller communities.
+costly and demonstrably unique for each message they send. This has
+the obvious drawback that you cannot rely on everyone in the world
+using this technique, since it is not part of the Internet standards,
+but it may be useful in smaller communities.
While the tools in the previous section work well in practice, they
work only because the tools are constantly maintained and updated as
@@ -23402,24 +23878,20 @@ one of them separately.
@cindex X-Hashcash
The ``something costly'' is to burn CPU time, more specifically to
compute a hash collision up to a certain number of bits. The
-resulting hashcash cookie is inserted in a @samp{X-Hashcash:}
-header. For more details, and for the external application
-@code{hashcash} you need to install to use this feature, see
-@uref{http://www.cypherspace.org/~adam/hashcash/}. Even more
-information can be found at @uref{http://www.camram.org/}.
+resulting hashcash cookie is inserted in a @samp{X-Hashcash:} header.
+For more details, and for the external application @code{hashcash} you
+need to install to use this feature, see
+@uref{http://www.hashcash.org/}. Even more information can be found
+at @uref{http://www.camram.org/}.
-If you wish to call hashcash for each message you send, say something
-like:
+If you wish to generate hashcash for each message you send, you can
+customize @code{message-generate-hashcash} (@pxref{Mail Headers, ,Mail
+Headers,message, The Message Manual}), as in:
@lisp
-(require 'hashcash)
-(add-hook 'message-send-hook 'mail-add-payment)
+(setq message-generate-hashcash t)
@end lisp
-The @file{hashcash.el} library can be found in the Gnus development
-contrib directory or at
-@uref{http://users.actrix.gen.nz/mycroft/hashcash.el}.
-
You will need to set up some additional variables as well:
@table @code
@@ -23427,8 +23899,8 @@ You will need to set up some additional variables as well:
@item hashcash-default-payment
@vindex hashcash-default-payment
This variable indicates the default number of bits the hash collision
-should consist of. By default this is 0, meaning nothing will be
-done. Suggested useful values include 17 to 29.
+should consist of. By default this is 20. Suggested useful values
+include 17 to 29.
@item hashcash-payment-alist
@vindex hashcash-payment-alist
@@ -23440,16 +23912,23 @@ that is needed. It can also contain @samp{(@var{addr} @var{string}
@var{amount})} cells, where the @var{string} is the string to use
(normally the email address or newsgroup name is used).
-@item hashcash
-@vindex hashcash
-Where the @code{hashcash} binary is installed.
+@item hashcash-path
+@vindex hashcash-path
+Where the @code{hashcash} binary is installed. This variable should
+be automatically set by @code{executable-find}, but if it's @code{nil}
+(usually because the @code{hashcash} binary is not in your path)
+you'll get a warning when you check hashcash payments and an error
+when you generate hashcash payments.
@end table
-Currently there is no built in functionality in Gnus to verify
-hashcash cookies, it is expected that this is performed by your hand
-customized mail filtering scripts. Improvements in this area would be
-a useful contribution, however.
+Gnus can verify hashcash cookies, although this can also be done by
+hand customized mail filtering scripts. To verify a hashcash cookie
+in a message, use the @code{mail-check-payment} function in the
+@code{hashcash.el} library. You can also use the @code{spam.el}
+package with the @code{spam-use-hashcash} back end to validate hashcash
+cookies in incoming mail and filter mail accordingly (@pxref{Anti-spam
+Hashcash Payments}).
@node Spam Package
@section Spam Package
@@ -23481,6 +23960,9 @@ name used throughout this manual to indicate non-spam messages.)
You must read this section to understand how the Spam package works.
Do not skip, speed-read, or glance through this section.
+Make sure you read the section on the @code{spam.el} sequence of
+events. See @xref{Extending the Spam package}.
+
@cindex spam-initialize
@vindex spam-use-stat
To use the Spam package, you @strong{must} first run the function
@@ -23836,7 +24318,7 @@ parameter is not set, ham articles are left in place. If the
@code{spam-mark-ham-unread-before-move-from-spam-group} parameter is
set, the ham articles are marked as unread before being moved.
-If ham can not be moved---because of a read-only backend such as
+If ham can not be moved---because of a read-only back end such as
@acronym{NNTP}, for example, it will be copied.
Note that you can use multiples destinations per group or regular
@@ -23873,7 +24355,7 @@ articles are only expired. The group name is fully qualified, meaning
that if you see @samp{nntp:servername} before the group name in the
group buffer then you need it here as well.
-If spam can not be moved---because of a read-only backend such as
+If spam can not be moved---because of a read-only back end such as
@acronym{NNTP}, for example, it will be copied.
Note that you can use multiples destinations per group or regular
@@ -23992,7 +24474,7 @@ From Ted Zlatanov <tzz@@lifelogs.com>.
@end example
-@subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server
+@subsubheading Using @code{spam.el} on an IMAP server with a statistical filter on the server
From Reiner Steib <reiner.steib@@gmx.de>.
My provider has set up bogofilter (in combination with @acronym{DCC}) on
@@ -24046,7 +24528,7 @@ an excellent tool for filtering those unwanted mails for me.)
In my ham folders, I just hit @kbd{S x}
(@code{gnus-summary-mark-as-spam}) whenever I see an unrecognized spam
mail (false negative). On group exit, those messages are moved to
-@samp{training.ham}.
+@samp{training.spam}.
@end itemize
@subsubheading Reporting spam articles in Gmane groups with @code{spam-report.el}
@@ -24086,6 +24568,7 @@ Processors}).
* Blackholes::
* Regular Expressions Header Matching::
* Bogofilter::
+* SpamAssassin back end::
* ifile spam filtering::
* Spam Statistics Filtering::
* SpamOracle::
@@ -24138,7 +24621,7 @@ spam-marked articles will be added to the blacklist.
Instead of the obsolete
@code{gnus-group-spam-exit-processor-blacklist}, it is recommended
-that you use @code{'(spam spam-use-blacklist)}. Everything will work
+that you use @code{(spam spam-use-blacklist)}. Everything will work
the same way, we promise.
@end defvar
@@ -24150,14 +24633,13 @@ customizing the group parameters or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is
added to a group's @code{spam-process} parameter, the senders of
ham-marked articles in @emph{ham} groups will be added to the
-whitelist. Note that this ham processor has no effect in @emph{spam}
-or @emph{unclassified} groups.
+whitelist.
@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-whitelist}, it is recommended
-that you use @code{'(ham spam-use-whitelist)}. Everything will work
+that you use @code{(ham spam-use-whitelist)}. Everything will work
the same way, we promise.
@end defvar
@@ -24207,6 +24689,12 @@ unless the sender is in the BBDB. Use with care. Only sender
addresses in the BBDB will be allowed through; all others will be
classified as spammers.
+While @code{spam-use-BBDB-exclusive} @emph{can} be used as an alias
+for @code{spam-use-BBDB} as far as @code{spam.el} is concerned, it is
+@emph{not} a separate back end. If you set
+@code{spam-use-BBDB-exclusive} to t, @emph{all} your BBDB splitting
+will be exclusive.
+
@end defvar
@defvar gnus-group-ham-exit-processor-BBDB
@@ -24216,14 +24704,13 @@ customizing the group parameters or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is
added to a group's @code{spam-process} parameter, the senders of
ham-marked articles in @emph{ham} groups will be added to the
-BBDB. Note that this ham processor has no effect in @emph{spam}
-or @emph{unclassified} groups.
+BBDB.
@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-BBDB}, it is recommended
-that you use @code{'(ham spam-use-BBDB)}. Everything will work
+that you use @code{(ham spam-use-BBDB)}. Everything will work
the same way, we promise.
@end defvar
@@ -24250,7 +24737,7 @@ Gmane can be found at @uref{http://gmane.org}.
Instead of the obsolete
@code{gnus-group-spam-exit-processor-report-gmane}, it is recommended
-that you use @code{'(spam spam-use-gmane)}. Everything will work the
+that you use @code{(spam spam-use-gmane)}. Everything will work the
same way, we promise.
@end defvar
@@ -24261,8 +24748,15 @@ This variable is @code{t} by default. Set it to @code{nil} if you are
running your own news server, for instance, and the local article
numbers don't correspond to the Gmane article numbers. When
@code{spam-report-gmane-use-article-number} is @code{nil},
-@code{spam-report.el} will use the @code{X-Report-Spam} header that
-Gmane provides.
+@code{spam-report.el} will fetch the number from the article headers.
+
+@end defvar
+
+@defvar spam-report-user-mail-address
+
+Mail address exposed in the User-Agent spam reports to Gmane. It allows
+the Gmane administrators to contact you in case of misreports. The
+default is @code{user-mail-address}.
@end defvar
@@ -24276,12 +24770,10 @@ Gmane provides.
Similar to @code{spam-use-whitelist} (@pxref{Blacklists and
Whitelists}), but uses hashcash tokens for whitelisting messages
-instead of the sender address. You must have the @code{hashcash.el}
-package loaded for @code{spam-use-hashcash} to work properly.
-Messages without a hashcash payment token will be sent to the next
-spam-split rule. This is an explicit filter, meaning that unless a
-hashcash token is found, the messages are not assumed to be spam or
-ham.
+instead of the sender address. Messages without a hashcash payment
+token will be sent to the next spam-split rule. This is an explicit
+filter, meaning that unless a hashcash token is found, the messages
+are not assumed to be spam or ham.
@end defvar
@@ -24301,7 +24793,7 @@ list is fairly comprehensive, but make sure to let us know if it
contains outdated servers.
The blackhole check uses the @code{dig.el} package, but you can tell
-@file{spam.el} to use @code{dns.el} instead for better performance if
+@code{spam.el} to use @code{dns.el} instead for better performance if
you set @code{spam-use-dig} to @code{nil}. It is not recommended at
this time to set @code{spam-use-dig} to @code{nil} despite the
possible performance improvements, because some users may be unable to
@@ -24428,7 +24920,7 @@ will be added to the Bogofilter spam database.
Instead of the obsolete
@code{gnus-group-spam-exit-processor-bogofilter}, it is recommended
-that you use @code{'(spam spam-use-bogofilter)}. Everything will work
+that you use @code{(spam spam-use-bogofilter)}. Everything will work
the same way, we promise.
@end defvar
@@ -24438,14 +24930,13 @@ customizing the group parameters or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is
added to a group's @code{spam-process} parameter, the ham-marked
articles in @emph{ham} groups will be added to the Bogofilter database
-of non-spam messages. Note that this ham processor has no effect in
-@emph{spam} or @emph{unclassified} groups.
+of non-spam messages.
@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-bogofilter}, it is recommended
-that you use @code{'(ham spam-use-bogofilter)}. Everything will work
+that you use @code{(ham spam-use-bogofilter)}. Everything will work
the same way, we promise.
@end defvar
@@ -24464,6 +24955,59 @@ variables to indicate to spam-split that Bogofilter should either be
used, or has already been used on the article. The 0.9.2.1 version of
Bogofilter was used to test this functionality.
+@node SpamAssassin back end
+@subsubsection SpamAssassin back end
+@cindex spam filtering
+@cindex spamassassin, spam filtering
+@cindex spam
+
+@defvar spam-use-spamassassin
+
+Set this variable if you want @code{spam-split} to use SpamAssassin.
+
+SpamAssassin assigns a score to each article based on a set of rules
+and tests, including a Bayesian filter. The Bayesian filter can be
+trained by associating the @samp{$} mark for spam articles. The
+spam score can be viewed by using the command @kbd{S t} in summary
+mode.
+
+If you set this variable, each article will be processed by
+SpamAssassin when @code{spam-split} is called. If your mail is
+preprocessed by SpamAssassin, and you want to just use the
+SpamAssassin headers, set @code{spam-use-spamassassin-headers}
+instead.
+
+You should not enable this if you use
+@code{spam-use-spamassassin-headers}.
+
+@end defvar
+
+@defvar spam-use-spamassassin-headers
+
+Set this variable if your mail is preprocessed by SpamAssassin and
+want @code{spam-split} to split based on the SpamAssassin headers.
+
+You should not enable this if you use @code{spam-use-spamassassin}.
+
+@end defvar
+
+@defvar spam-spamassassin-program
+
+This variable points to the SpamAssassin executable. If you have
+@code{spamd} running, you can set this variable to the @code{spamc}
+executable for faster processing. See the SpamAssassin documentation
+for more information on @code{spamd}/@code{spamc}.
+
+@end defvar
+
+SpamAssassin is a powerful and flexible spam filter that uses a wide
+variety of tests to identify spam. A ham and a spam processors are
+provided, plus the @code{spam-use-spamassassin} and
+@code{spam-use-spamassassin-headers} variables to indicate to
+spam-split that SpamAssassin should be either used, or has already
+been used on the article. The 2.63 version of SpamAssassin was used
+to test this functionality.
+
@node ifile spam filtering
@subsubsection ifile spam filtering
@cindex spam filtering
@@ -24533,7 +25077,7 @@ articles will be added to the spam-stat database of spam messages.
Instead of the obsolete
@code{gnus-group-spam-exit-processor-stat}, it is recommended
-that you use @code{'(spam spam-use-stat)}. Everything will work
+that you use @code{(spam spam-use-stat)}. Everything will work
the same way, we promise.
@end defvar
@@ -24543,18 +25087,17 @@ customizing the group parameters or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is
added to a group's @code{spam-process} parameter, the ham-marked
articles in @emph{ham} groups will be added to the spam-stat database
-of non-spam messages. Note that this ham processor has no effect in
-@emph{spam} or @emph{unclassified} groups.
+of non-spam messages.
@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-stat}, it is recommended
-that you use @code{'(ham spam-use-stat)}. Everything will work
+that you use @code{(ham spam-use-stat)}. Everything will work
the same way, we promise.
@end defvar
-This enables @file{spam.el} to cooperate with @file{spam-stat.el}.
+This enables @code{spam.el} to cooperate with @file{spam-stat.el}.
@file{spam-stat.el} provides an internal (Lisp-only) spam database,
which unlike ifile or Bogofilter does not require external programs.
A spam and a ham processor, and the @code{spam-use-stat} variable for
@@ -24583,7 +25126,7 @@ The easiest method is to make @file{spam.el} (@pxref{Spam Package})
call SpamOracle.
@vindex spam-use-spamoracle
-To enable SpamOracle usage by @file{spam.el}, set the variable
+To enable SpamOracle usage by @code{spam.el}, set the variable
@code{spam-use-spamoracle} to @code{t} and configure the
@code{nnmail-split-fancy} or @code{nnimap-split-fancy}. @xref{Spam
Package}. In this example the @samp{INBOX} of an nnimap server is
@@ -24641,7 +25184,7 @@ sent to SpamOracle as spam samples.
Instead of the obsolete
@code{gnus-group-spam-exit-processor-spamoracle}, it is recommended
-that you use @code{'(spam spam-use-spamoracle)}. Everything will work
+that you use @code{(spam spam-use-spamoracle)}. Everything will work
the same way, we promise.
@end defvar
@@ -24651,14 +25194,13 @@ customizing the group parameter or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is added
to a group's @code{spam-process} parameter, the ham-marked articles in
@emph{ham} groups will be sent to the SpamOracle as samples of ham
-messages. Note that this ham processor has no effect in @emph{spam} or
-@emph{unclassified} groups.
+messages.
@emph{WARNING}
Instead of the obsolete
@code{gnus-group-ham-exit-processor-spamoracle}, it is recommended
-that you use @code{'(ham spam-use-spamoracle)}. Everything will work
+that you use @code{(ham spam-use-spamoracle)}. Everything will work
the same way, we promise.
@end defvar
@@ -24696,45 +25238,22 @@ Code
"True if blackbox should be used.")
@end lisp
-Add
-@lisp
-(spam-use-blackbox . spam-check-blackbox)
-@end lisp
-to @code{spam-list-of-checks}.
-
-Add
-@lisp
-(gnus-group-ham-exit-processor-blackbox ham spam-use-blackbox)
-(gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
-@end lisp
+Write @code{spam-check-blackbox} if Blackbox can check incoming mail.
-to @code{spam-list-of-processors}.
-
-Add
-@lisp
-(spam-use-blackbox spam-blackbox-register-routine
- nil
- spam-blackbox-unregister-routine
- nil)
-@end lisp
-
-to @code{spam-registration-functions}. Write the register/unregister
-routines using the bogofilter register/unregister routines as a
-start, or other register/unregister routines more appropriate to
-Blackbox.
+Write @code{spam-blackbox-register-routine} and
+@code{spam-blackbox-unregister-routine} using the bogofilter
+register/unregister routines as a start, or other restister/unregister
+routines more appropriate to Blackbox, if Blackbox can
+register/unregister spam and ham.
@item
Functionality
-Write the @code{spam-check-blackbox} function. It should return
-@samp{nil} or @code{spam-split-group}, observing the other
-conventions. See the existing @code{spam-check-*} functions for
-examples of what you can do, and stick to the template unless you
-fully understand the reasons why you aren't.
-
-Make sure to add @code{spam-use-blackbox} to
-@code{spam-list-of-statistical-checks} if Blackbox is a statistical
-mail analyzer that needs the full message body to operate.
+The @code{spam-check-blackbox} function should return @samp{nil} or
+@code{spam-split-group}, observing the other conventions. See the
+existing @code{spam-check-*} functions for examples of what you can
+do, and stick to the template unless you fully understand the reasons
+why you aren't.
@end enumerate
@@ -24749,8 +25268,8 @@ Note you don't have to provide a spam or a ham processor. Only
provide them if Blackbox supports spam or ham processing.
Also, ham and spam processors are being phased out as single
-variables. Instead the form @code{'(spam spam-use-blackbox)} or
-@code{'(ham spam-use-blackbox)} is favored. For now, spam/ham
+variables. Instead the form @code{(spam spam-use-blackbox)} or
+@code{(ham spam-use-blackbox)} is favored. For now, spam/ham
processor variables are still around but they won't be for long.
@lisp
@@ -24781,7 +25300,64 @@ Add
(variable-item spam-use-blackbox)
@end lisp
to the @code{spam-autodetect-methods} group parameter in
-@code{gnus.el}.
+@code{gnus.el} if Blackbox can check incoming mail for spam contents.
+
+Finally, use the appropriate @code{spam-install-*-backend} function in
+@code{spam.el}. Here are the available functions.
+
+
+@enumerate
+
+@item
+@code{spam-install-backend-alias}
+
+This function will simply install an alias for a back end that does
+everything like the original back end. It is currently only used to
+make @code{spam-use-BBDB-exclusive} act like @code{spam-use-BBDB}.
+
+@item
+@code{spam-install-nocheck-backend}
+
+This function installs a back end that has no check function, but can
+register/unregister ham or spam. The @code{spam-use-gmane} back end is
+such a back end.
+
+@item
+@code{spam-install-checkonly-backend}
+
+This function will install a back end that can only check incoming mail
+for spam contents. It can't register or unregister messages.
+@code{spam-use-blackholes} and @code{spam-use-hashcash} are such
+back ends.
+
+@item
+@code{spam-install-statistical-checkonly-backend}
+
+This function installs a statistical back end (one which requires the
+full body of a message to check it) that can only check incoming mail
+for contents. @code{spam-use-regex-body} is such a filter.
+
+@item
+@code{spam-install-statistical-backend}
+
+This function install a statistical back end with incoming checks and
+registration/unregistration routines. @code{spam-use-bogofilter} is
+set up this way.
+
+@item
+@code{spam-install-backend}
+
+This is the most normal back end installation, where a back end that can
+check and register/unregister messages is set up without statistical
+abilities. The @code{spam-use-BBDB} is such a back end.
+
+@item
+@code{spam-install-mover-backend}
+
+Mover back ends are internal to @code{spam.el} and specifically move
+articles around when the summary is exited. You will very probably
+never install such a back end.
+@end enumerate
@end enumerate
@@ -25140,6 +25716,17 @@ shut up, but will flash so many messages it will make your head swim.
This variable works the same way as @code{gnus-verbose}, but it applies
to the Gnus back ends instead of Gnus proper.
+@item gnus-add-timestamp-to-message
+@vindex gnus-add-timestamp-to-message
+This variable controls whether to add timestamps to messages that are
+controlled by @code{gnus-verbose} and @code{gnus-verbose-backends} and
+are issued. The default value is @code{nil} which means never to add
+timestamp. If it is @code{log}, add timestamps to only the messages
+that go into the @samp{*Messages*} buffer (in XEmacs, it is the
+@w{@samp{ *Message-Log*}} buffer). If it is neither @code{nil} nor
+@code{log}, add timestamps not only to log messages but also to the ones
+displayed in the echo area.
+
@item nnheader-max-head-length
@vindex nnheader-max-head-length
When the back ends read straight heads of articles, they all try to read
@@ -25661,8 +26248,7 @@ Wes Hardaker---@file{gnus-picon.el} and the manual section on
Kim-Minh Kaplan---further work on the picon code.
@item
-Brad Miller---@file{gnus-gl.el} and the GroupLens manual section
-(@pxref{GroupLens}).
+Brad Miller---@file{gnus-gl.el} and the GroupLens manual section.
@item
Sudish Joseph---innumerable bug fixes.
@@ -25703,7 +26289,7 @@ David Moore---rewrite of @file{nnvirtual.el} and many other things.
Kevin Davidson---came up with the name @dfn{ding}, so blame him.
@item
-François Pinard---many, many interesting and thorough bug reports, as
+Fran@,{c}ois Pinard---many, many interesting and thorough bug reports, as
well as autoconf support.
@end itemize
@@ -25720,7 +26306,7 @@ Kevin Greiner,
Jesper Harder,
Paul Jarc,
Simon Josefsson,
-David Kågedal,
+David K@aa{}gedal,
Richard Pieri,
Fabrice Popineau,
Daniel Quinlan,
@@ -25805,12 +26391,13 @@ Yoshiki Hayashi, @c Hayashi
P. E. Jareth Hein,
Hisashige Kenji, @c Hisashige
Scott Hofmann,
+Tassilo Horn,
Marc Horowitz,
Gunnar Horrigmo,
Richard Hoskins,
Brad Howes,
Miguel de Icaza,
-François Felix Ingrand,
+Fran@,{c}ois Felix Ingrand,
Tatsuya Ichikawa, @c Ichikawa
Ishikawa Ichiro, @c Ishikawa
Lee Iverson,
@@ -25950,6 +26537,7 @@ actually are people who are using Gnus. Who'd'a thunk it!
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
* Oort Gnus:: It's big. It's far out. Gnus 5.10/5.11.
+* No Gnus:: Very punny.
@end menu
These lists are, of course, just @emph{short} overviews of the
@@ -26109,7 +26697,7 @@ Partial thread regeneration now happens when articles are
referred.
@item
-Gnus can make use of GroupLens predictions (@pxref{GroupLens}).
+Gnus can make use of GroupLens predictions.
@item
Picons (personal icons) can be displayed under XEmacs (@pxref{Picons}).
@@ -26758,7 +27346,7 @@ Gnus is now able to take out spam from your mail and news streams
using a wide variety of programs and filter rules. Among the supported
methods are RBL blocklists, bogofilter and white/blacklists. Hooks
for easy use of external packages such as SpamAssassin and Hashcash
-are also new. @xref{Thwarting Email Spam}.
+are also new. @ref{Thwarting Email Spam} and @ref{Spam Package}.
@c FIXME: @xref{Spam Package}?. Should this be under Misc?
@item
@@ -27325,6 +27913,15 @@ A new command which starts Gnus offline in slave mode.
@end itemize
+@node No Gnus
+@subsubsection No Gnus
+@cindex No Gnus
+
+New features in No Gnus:
+@c FIXME: Gnus 5.12?
+
+@include gnus-news.texi
+
@iftex
@page
@@ -27827,7 +28424,7 @@ Gnus will work.
@item
Try doing an @kbd{M-x gnus-version}. If you get something that looks
like @c
-@samp{Gnus v5.10.8} @c Adjust ../Makefile.in if you change this line!
+@samp{Gnus v5.13} @c Adjust ../Makefile.in if you change this line!
@c
you have the right files loaded. Otherwise you have some old @file{.el}
files lying around. Delete these.
@@ -28419,7 +29016,9 @@ A Gnus group info (@pxref{Group Info}) is handed to the back end for
alterations. This comes in handy if the back end really carries all
the information (as is the case with virtual and imap groups). This
function should destructively alter the info to suit its needs, and
-should return a non-@code{nil} value.
+should return a non-@code{nil} value (exceptionally,
+@code{nntp-request-update-info} always returns @code{nil} not to waste
+the network resources).
There should be no result data from this function.
diff --git a/man/gpl.texi b/doc/misc/gpl.texi
index 5b416d3cb41..5b416d3cb41 100644
--- a/man/gpl.texi
+++ b/doc/misc/gpl.texi
diff --git a/man/idlwave.texi b/doc/misc/idlwave.texi
index 4f216ac87b8..36cc3e9087d 100644
--- a/man/idlwave.texi
+++ b/doc/misc/idlwave.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
-@setfilename ../info/idlwave
+@setfilename ../../info/idlwave
@settitle IDLWAVE User Manual
@dircategory Emacs
@direntry
diff --git a/man/info.texi b/doc/misc/info.texi
index de586a65507..333e331b354 100644
--- a/man/info.texi
+++ b/doc/misc/info.texi
@@ -26,9 +26,10 @@ Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the
license is included in the section entitled ``GNU Free Documentation
License'' in the Emacs manual.
-(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
-this GNU Manual, like GNU software. Copies published by the Free
-Software Foundation raise funds for GNU development.''
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and
+modify this GNU Manual, like GNU software. Buying copies from GNU
+Press supports the FSF in developing GNU and promoting software
+freedom.''
This document is part of a collection distributed under the GNU Free
Documentation License. If you want to distribute this document
@@ -907,6 +908,39 @@ is @code{Info-top-node}.
@c If a menu appears at the end of this node, remove it.
@c It is an accident of the menu updating command.
+@node Help-Q, , Help-Int, Getting Started
+@comment node-name, next, previous, up
+@section Quitting Info
+
+@kindex q @r{(Info mode)}
+@findex Info-exit
+@cindex quitting Info mode
+ To get out of Info, back to what you were doing before, type @kbd{q}
+for @dfn{Quit}. This runs @code{Info-exit} in Emacs.
+
+ This is the end of the basic course on using Info. You have learned
+how to move in an Info document, and how to follow menus and cross
+references. This makes you ready for reading manuals top to bottom,
+as new users should do when they learn a new package.
+
+ Another set of Info commands is useful when you need to find
+something quickly in a manual---that is, when you need to use a manual
+as a reference rather than as a tutorial. We urge you to learn
+these search commands as well. If you want to do that now, follow this
+cross reference to @ref{Advanced}.
+
+Yet another set of commands are meant for experienced users; you can
+find them by looking in the Directory node for documentation on Info.
+Finding them will be a good exercise in using Info in the usual
+manner.
+
+@format
+>> Type @kbd{d} to go to the Info directory node; then type
+ @kbd{mInfo} and Return, to get to the node about Info and
+ see what other help is available.
+@end format
+
+
@node Advanced
@chapter Advanced Info Commands
@@ -933,6 +967,7 @@ an actual @samp{?} character, the simplest way is to insert it using
* Emacs Info Variables:: Variables modifying the behavior of Emacs Info.
@end menu
+
@node Search Text, Search Index, , Advanced
@comment node-name, next, previous, up
@section How to search Info documents
@@ -1397,39 +1432,6 @@ cannot expect this node to have a @samp{Next}, @samp{Previous} or
>> Type @kbd{l} to return to the node where the cross reference was.
@end format
-@node Help-Q, , Help-Int, Getting Started
-@comment node-name, next, previous, up
-@section Quitting Info
-
-@kindex q @r{(Info mode)}
-@findex Info-exit
-@cindex quitting Info mode
- To get out of Info, back to what you were doing before, type @kbd{q}
-for @dfn{Quit}. This runs @code{Info-exit} in Emacs.
-
- This is the end of the basic course on using Info. You have learned
-how to move in an Info document, and how to follow menus and cross
-references. This makes you ready for reading manuals top to bottom,
-as new users should do when they learn a new package.
-
- Another set of Info commands is useful when you need to find
-something quickly in a manual---that is, when you need to use a manual
-as a reference rather than as a tutorial. We urge you to learn
-these search commands as well. If you want to do that now, follow this
-cross reference to @ref{Advanced}.
-
-Yet another set of commands are meant for experienced users; you can
-find them by looking in the Directory node for documentation on Info.
-Finding them will be a good exercise in using Info in the usual
-manner.
-
-@format
->> Type @kbd{d} to go to the Info directory node; then type
- @kbd{mInfo} and Return, to get to the node about Info and
- see what other help is available.
-@end format
-
-
@node Tags, Checking, Cross-refs, Expert Info
@comment node-name, next, previous, up
@section Tags Tables for Info Files
diff --git a/man/makefile.w32-in b/doc/misc/makefile.w32-in
index 7e3723c1949..4d8d44765d4 100644
--- a/man/makefile.w32-in
+++ b/doc/misc/makefile.w32-in
@@ -1,4 +1,4 @@
-#### -*- Makefile -*- for the Emacs Manual and other documentation.
+#### -*- Makefile -*- for documentation other than the Emacs manual.
# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
@@ -25,12 +25,12 @@
# set by the configure script's `--srcdir' option.
srcdir=.
-infodir = $(srcdir)/../info
+infodir = $(srcdir)/../../info
# The makeinfo program is part of the Texinfo distribution.
MAKEINFO = makeinfo --force
-MULTI_INSTALL_INFO = $(srcdir)\..\nt\multi-install-info.bat
-INFO_TARGETS = $(infodir)/emacs $(infodir)/ccmode \
+MULTI_INSTALL_INFO = $(srcdir)\..\..\nt\multi-install-info.bat
+INFO_TARGETS = $(infodir)/ccmode \
$(infodir)/cl $(infodir)/dired-x $(infodir)/ediff \
$(infodir)/forms $(infodir)/gnus $(infodir)/message \
$(infodir)/sieve $(infodir)/pgg $(infodir)/emacs-mime \
@@ -42,15 +42,16 @@ INFO_TARGETS = $(infodir)/emacs $(infodir)/ccmode \
$(infodir)/woman $(infodir)/eshell $(infodir)/org \
$(infodir)/url $(infodir)/speedbar $(infodir)/tramp \
$(infodir)/ses $(infodir)/smtpmail $(infodir)/flymake \
- $(infodir)/newsticker $(infodir)/rcirc $(infodir)/erc
-DVI_TARGETS = emacs.dvi calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \
+ $(infodir)/newsticker $(infodir)/rcirc $(infodir)/erc \
+ $(infodir)/remember
+DVI_TARGETS = calc.dvi cc-mode.dvi cl.dvi dired-x.dvi \
ediff.dvi forms.dvi gnus.dvi message.dvi emacs-mime.dvi \
gnus.dvi message.dvi sieve.dvi pgg.dvi mh-e.dvi \
reftex.dvi sc.dvi vip.dvi viper.dvi widget.dvi faq.dvi \
ada-mode.dvi autotype.dvi idlwave.dvi eudc.dvi ebrowse.dvi \
pcl-cvs.dvi woman.dvi eshell.dvi org.dvi url.dvi \
speedbar.dvi tramp.dvi ses.dvi smtpmail.dvi flymake.dvi \
- newsticker.dvi emacs-xtra.dvi rcirc.dvi erc.dvi
+ newsticker.dvi rcirc.dvi erc.dvi remember.dvi
INFOSOURCES = info.texi
# The following rule does not work with all versions of `make'.
@@ -59,66 +60,9 @@ INFOSOURCES = info.texi
texi2dvi $<
TEXI2DVI = texi2dvi
-ENVADD = $(srcdir)\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" \
+ENVADD = $(srcdir)\..\..\nt\envadd.bat "TEXINPUTS=$(srcdir);$(TEXINPUTS)" \
"MAKEINFO=$(MAKEINFO) -I$(srcdir)" /C
-EMACS_XTRA=\
- $(srcdir)/arevert-xtra.texi \
- $(srcdir)/cal-xtra.texi \
- $(srcdir)/dired-xtra.texi \
- $(srcdir)/picture-xtra.texi \
- $(srcdir)/emerge-xtra.texi \
- $(srcdir)/vc-xtra.texi \
- $(srcdir)/vc1-xtra.texi \
- $(srcdir)/vc2-xtra.texi \
- $(srcdir)/fortran-xtra.texi \
- $(srcdir)/msdog-xtra.texi
-
-EMACSSOURCES= \
- $(srcdir)/emacs.texi \
- $(srcdir)/doclicense.texi \
- $(srcdir)/screen.texi \
- $(srcdir)/commands.texi \
- $(srcdir)/entering.texi \
- $(srcdir)/basic.texi \
- $(srcdir)/mini.texi \
- $(srcdir)/m-x.texi \
- $(srcdir)/help.texi \
- $(srcdir)/mark.texi \
- $(srcdir)/killing.texi \
- $(srcdir)/regs.texi \
- $(srcdir)/display.texi \
- $(srcdir)/search.texi \
- $(srcdir)/fixit.texi \
- $(srcdir)/files.texi \
- $(srcdir)/buffers.texi \
- $(srcdir)/windows.texi \
- $(srcdir)/frames.texi \
- $(srcdir)/mule.texi \
- $(srcdir)/major.texi \
- $(srcdir)/indent.texi \
- $(srcdir)/text.texi \
- $(srcdir)/programs.texi \
- $(srcdir)/building.texi \
- $(srcdir)/maintaining.texi \
- $(srcdir)/abbrevs.texi \
- $(srcdir)/sending.texi \
- $(srcdir)/rmail.texi \
- $(srcdir)/dired.texi \
- $(srcdir)/calendar.texi \
- $(srcdir)/misc.texi \
- $(srcdir)/custom.texi \
- $(srcdir)/trouble.texi \
- $(srcdir)/cmdargs.texi \
- $(srcdir)/xresources.texi \
- $(srcdir)/anti.texi \
- $(srcdir)/macos.texi \
- $(srcdir)/msdog.texi \
- $(srcdir)/gnu.texi \
- $(srcdir)/glossary.texi \
- $(srcdir)/ack.texi \
- $(srcdir)/kmacro.texi \
- $(EMACS_XTRA)
info: $(INFO_TARGETS)
@@ -144,18 +88,6 @@ $(infodir)/info: $(INFOSOURCES)
info.dvi: $(INFOSOURCES)
$(ENVADD) $(TEXI2DVI) $(srcdir)/info.texi
-$(infodir)/emacs: $(EMACSSOURCES)
- $(MAKEINFO) emacs.texi
-
-emacs.dvi: $(EMACSSOURCES)
- $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs.texi
-
-# This target is here so you could easily get the list of the *.texi
-# files which belong to the Emacs manual (as opposed to the separate
-# manuals for CL, CC Mode, Ebrowse, etc.). With this target, you can
-# say things like "grep foo `make emacsman`".
-emacsman:
- @echo $(EMACSSOURCES)
$(infodir)/ccmode: cc-mode.texi
$(MAKEINFO) cc-mode.texi
@@ -241,6 +173,11 @@ $(infodir)/reftex: reftex.texi
reftex.dvi: reftex.texi
$(ENVADD) $(TEXI2DVI) $(srcdir)/reftex.texi
+$(infodir)/remember: remember.texi
+ $(MAKEINFO) remember.texi
+remember.dvi: remember.texi
+ $(ENVADD) $(TEXI2DVI) $(srcdir)/remember.texi
+
$(infodir)/sc: sc.texi
$(MAKEINFO) sc.texi
sc.dvi: sc.texi
@@ -266,9 +203,6 @@ $(infodir)/efaq: faq.texi
faq.dvi: faq.texi
$(ENVADD) $(TEXI2DVI) $(srcdir)/faq.texi
-../etc/GNU: gnu1.texi gnu.texi
- $(MAKEINFO) --no-headers -o ../etc/GNU gnu1.texi
-
$(infodir)/autotype: autotype.texi
$(MAKEINFO) autotype.texi
autotype.dvi: autotype.texi
@@ -322,9 +256,6 @@ $(infodir)/smtpmail: smtpmail.texi
smtpmail.dvi: smtpmail.texi
$(ENVADD) $(TEXI2DVI) $(srcdir)/smtpmail.texi
-emacs-xtra.dvi: emacs-xtra.texi $(EMACS_XTRA)
- $(ENVADD) $(TEXI2DVI) $(srcdir)/emacs-xtra.texi
-
$(infodir)/org: org.texi
$(MAKEINFO) org.texi
org.dvi: org.texi
@@ -355,7 +286,7 @@ mostlyclean:
clean: mostlyclean
- $(DEL) *.dvi
- - $(DEL) $(infodir)/emacs* $(infodir)/ccmode* \
+ - $(DEL) $(infodir)/ccmode* \
$(infodir)/cl* $(infodir)/dired-x* \
$(infodir)/ediff* $(infodir)/forms* \
$(infodir)/gnus* $(infodir)/info* \
@@ -372,7 +303,8 @@ clean: mostlyclean
$(infodir)/url* $(infodir)/org* \
$(infodir)/flymake* $(infodir)/newsticker* \
$(infodir)/sieve* $(infodir)/pgg* \
- $(infodir)/erc* $(infodir)/rcirc*
+ $(infodir)/erc* $(infodir)/rcirc* \
+ $(infodir)/remember*
distclean: clean
diff --git a/man/message.texi b/doc/misc/message.texi
index 2bca4b046e5..fab5aaf173a 100644
--- a/man/message.texi
+++ b/doc/misc/message.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/message
+@setfilename ../../info/message
@settitle Message Manual
@synindex fn cp
@synindex vr cp
@@ -71,14 +71,14 @@ Message mode buffers.
@c Adjust ../Makefile.in if you change the following lines:
Message is distributed with Gnus. The Gnus distribution
@c
-corresponding to this manual is Gnus v5.11.
+corresponding to this manual is Gnus v5.13
@node Interface
@chapter Interface
-When a program (or a person) wants to respond to a message -- reply,
-follow up, forward, cancel -- the program (or person) should just put
+When a program (or a person) wants to respond to a message---reply,
+follow up, forward, cancel---the program (or person) should just put
point in the buffer where the message is and call the required command.
@code{Message} will then pop up a new @code{message} mode buffer with
appropriate headers filled out, and the user can edit the message before
@@ -179,7 +179,8 @@ but you can change the behavior to suit your needs by fiddling with the
@vindex message-dont-reply-to-names
Addresses that match the @code{message-dont-reply-to-names} regular
-expression will be removed from the @code{Cc} header.
+expression (or list of regular expressions) will be removed from the
+@code{Cc} header. A value of @code{nil} means exclude your name only.
@vindex message-wide-reply-confirm-recipients
If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
@@ -257,7 +258,7 @@ removed before popping up the new message buffer. The default is@*
^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
-^X-Payment:}.
+^X-Payment:\\|^Approved:}.
@@ -797,14 +798,18 @@ Insert the message headers (@code{message-insert-headers}).
@item C-c M-m
@kindex C-c M-m
@findex message-mark-inserted-region
-Mark some region in the current article with enclosing tags.
-See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
+Mark some region in the current article with enclosing tags. See
+@code{message-mark-insert-begin} and @code{message-mark-insert-end}.
+When called with a prefix argument, use slrn style verbatim marks
+(@samp{#v+} and @samp{#v-}).
@item C-c M-f
@kindex C-c M-f
@findex message-mark-insert-file
Insert a file in the current article with enclosing tags.
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
+When called with a prefix argument, use slrn style verbatim marks
+(@samp{#v+} and @samp{#v-}).
@end table
@@ -1159,6 +1164,11 @@ The text is killed and replaced with the contents of the variable
@code{message-elide-ellipsis}. The default value is to use an ellipsis
(@samp{[...]}).
+@item C-c M-k
+@kindex C-c M-k
+@findex message-kill-address
+Kill the address under point.
+
@item C-c C-z
@kindex C-c C-z
@findex message-kill-to-signature
@@ -1244,11 +1254,13 @@ Kill the message buffer and exit (@code{message-kill-buffer}).
@section Mail Aliases
@cindex mail aliases
@cindex aliases
+@cindex completion
+@cindex ecomplete
@vindex message-mail-alias-type
The @code{message-mail-alias-type} variable controls what type of mail
-alias expansion to use. Currently only one form is supported---Message
-uses @code{mailabbrev} to handle mail aliases. If this variable is
+alias expansion to use. Currently two forms are supported:
+@code{mailabbrev} and @code{ecomplete}. If this variable is
@code{nil}, no mail alias expansion will be performed.
@code{mailabbrev} works by parsing the @file{/etc/mailrc} and
@@ -1266,6 +1278,14 @@ on) headers and press @kbd{SPC} to expand the alias.
No expansion will be performed upon sending of the message---all
expansions have to be done explicitly.
+If you're using @code{ecomplete}, all addresses from @code{To} and
+@code{Cc} headers will automatically be put into the
+@file{~/.ecompleterc} file. When you enter text in the @code{To} and
+@code{Cc} headers, @code{ecomplete} will check out the values stored
+there and ``electrically'' say what completions are possible. To
+choose one of these completions, use the @kbd{M-n} command to move
+down to the list. Use @kbd{M-n} and @kbd{M-p} to move down and up the
+list, and @kbd{RET} to choose a completion.
@node Spelling
@section Spelling
@@ -1334,7 +1354,7 @@ installed.
@section Message Headers
Message is quite aggressive on the message generation front. It has to
-be -- it's a combined news and mail agent. To be able to send combined
+be---it's a combined news and mail agent. To be able to send combined
messages, it has to generate all headers itself (instead of letting the
mail/news system do it) to ensure that mail and news copies of messages
look sufficiently similar.
@@ -1373,7 +1393,7 @@ values:
@table @code
@item nil
-Just the address -- @samp{king@@grassland.com}.
+Just the address---@samp{king@@grassland.com}.
@item parens
@samp{king@@grassland.com (Elvis Parsley)}.
@@ -1494,6 +1514,9 @@ hidden when composing a message.
'(not "From" "Subject" "To" "Cc" "Newsgroups"))
@end lisp
+Headers are hidden using narrowing, you can use @kbd{M-x widen} to
+expose them in the buffer.
+
@item message-header-synonyms
@vindex message-header-synonyms
A list of lists of header synonyms. E.g., if this list contains a
@@ -1525,6 +1548,13 @@ Regexp of headers to be removed before mailing. The default is@*
This string is inserted at the end of the headers in all message
buffers that are initialized as mail.
+@item message-generate-hashcash
+@vindex message-generate-hashcash
+Variable that indicates whether @samp{X-Hashcash} headers
+should be computed for the message. @xref{Hashcash, ,Hashcash,gnus,
+The Gnus Manual}. If @code{opportunistic}, only generate the headers
+when it doesn't lead to the user having to wait.
+
@end table
@@ -1541,10 +1571,10 @@ buffers that are initialized as mail.
@findex smtpmail-send-it
@findex feedmail-send-it
Function used to send the current buffer as mail. The default is
-@code{message-send-mail-with-sendmail}. Other valid values include
+@code{message-send-mail-with-sendmail}, or @code{smtpmail-send-it}
+according to the system. Other valid values include
@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
-@code{message-smtpmail-send-it}, @code{smtpmail-send-it} and
-@code{feedmail-send-it}.
+@code{message-smtpmail-send-it} and @code{feedmail-send-it}.
@item message-mh-deletable-headers
@vindex message-mh-deletable-headers
@@ -1859,6 +1889,9 @@ that look like:
Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
@end example
+@c FIXME: Add `message-insert-formated-citation-line' and
+@c `message-citation-line-format'
+
Point will be at the beginning of the body of the message when this
function is called.
@@ -1873,21 +1906,29 @@ Article Highlighting, gnus, The Gnus Manual}, for details.
@cindex yanking
@cindex quoting
When you are replying to or following up an article, you normally want
-to quote the person you are answering. Inserting quoted text is done
-by @dfn{yanking}, and each line you yank will have
-@code{message-yank-prefix} prepended to it (except for quoted and
-empty lines which uses @code{message-yank-cited-prefix}). The default
-is @samp{> }.
+to quote the person you are answering. Inserting quoted text is done by
+@dfn{yanking}, and each line you yank will have
+@code{message-yank-prefix} prepended to it (except for quoted lines
+which use @code{message-yank-cited-prefix} and empty lines which use
+@code{message-yank-empty-prefix}). The default is @samp{> }.
@item message-yank-cited-prefix
@vindex message-yank-cited-prefix
@cindex yanking
@cindex cited
@cindex quoting
-When yanking text from an article which contains no text or already
-cited text, each line will be prefixed with the contents of this
-variable. The default is @samp{>}. See also
-@code{message-yank-prefix}.
+When yanking text from an article which contains already cited text,
+each line will be prefixed with the contents of this variable. The
+default is @samp{>}. See also @code{message-yank-prefix}.
+
+@item message-yank-empty-prefix
+@vindex message-yank-empty-prefix
+@cindex yanking
+@cindex quoting
+When yanking text from an article, each empty line will be prefixed with
+the contents of this variable. The default is @samp{>}. You can set
+this variable to an empty string to split the cited text into paragraphs
+automatically. See also @code{message-yank-prefix}.
@item message-indentation-spaces
@vindex message-indentation-spaces
@@ -1932,8 +1973,18 @@ If this variable is @code{nil}, no signature will be inserted at all.
@item message-signature-file
@vindex message-signature-file
File containing the signature to be inserted at the end of the buffer.
+If a path is specified, the value of
+@code{message-signature-directory} is ignored, even if set.
The default is @file{~/.signature}.
+@item message-signature-directory
+@vindex message-signature-directory
+Name of directory containing signature files. Comes in handy if you
+have many such files, handled via Gnus posting styles for instance.
+If @code{nil} (the default), @code{message-signature-file} is expected
+to specify the directory if needed.
+
+
@item message-signature-insert-empty-line
@vindex message-signature-insert-empty-line
If @code{t} (the default value) an empty line is inserted before the
@@ -1968,6 +2019,13 @@ Emacsen.) @xref{Charset Translation, , Charset Translation, emacs-mime,
Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
translation process.
+@item message-fill-column
+@vindex message-fill-column
+@cindex auto-fill
+Local value for the column beyond which automatic line-wrapping should
+happen for message buffers. If non-nil (the default), also turn on
+auto-fill in message buffers.
+
@item message-signature-separator
@vindex message-signature-separator
Regexp matching the signature separator. It is @samp{^-- *$} by
@@ -2057,6 +2115,12 @@ Hook run when canceling news articles.
@vindex message-mode-syntax-table
Syntax table used in message mode buffers.
+@item message-cite-articles-with-x-no-archive
+@vindex message-cite-articles-with-x-no-archive
+If non-@code{nil}, don't strip quoted text from articles that have
+@samp{X-No-Archive} set. Even if this variable isn't set, you can
+undo the stripping by hitting the @code{undo} keystroke.
+
@item message-strip-special-text-properties
@vindex message-strip-special-text-properties
Emacs has a number of special text properties which can break message
@@ -2089,7 +2153,7 @@ the buffer where the message is.
@item function
A function to be called if @var{predicate} returns non-@code{nil}.
-@var{function} is called with one parameter -- the prefix.
+@var{function} is called with one parameter---the prefix.
@end table
The default is:
diff --git a/man/mh-e.texi b/doc/misc/mh-e.texi
index a6341e80465..dd1808a5a83 100644
--- a/man/mh-e.texi
+++ b/doc/misc/mh-e.texi
@@ -3,17 +3,17 @@
@c Note: This document requires makeinfo version 4.6 or greater to build.
@c
@c %**start of header
-@setfilename ../info/mh-e
+@setfilename ../../info/mh-e
@settitle The MH-E Manual
@c %**end of header
@c Version of the software and manual.
-@set VERSION 8.0.3
+@set VERSION 8.0.3+CVS
@c Edition of the manual. It is either empty for the first edition or
@c has the form ", nth Edition" (without the quotes).
@set EDITION
-@set UPDATED 2006-11-12
-@set UPDATE-MONTH November, 2006
+@set UPDATED 2007-09-25
+@set UPDATE-MONTH September, 2007
@c Other variables.
@set MH-BOOK-HOME http://rand-mh.sourceforge.net/book/mh
@@ -2556,16 +2556,14 @@ includes the results of a quick poll of MH-E users from 2005-12-23.
@cindex browser, @samp{w3m}
@cindex @samp{w3m}
@kindex Mouse-2
-@kindex S-Mouse-2
@item @samp{w3m} 7
The @samp{w3m} browser requires an external program. It's quick,
produces pretty nice output, and best of all, it's the only browser
that highlights links. These can be clicked with @kbd{Mouse-2} to view
-the content of the link in @samp{w3m} or with @kbd{S-Mouse-2} to view
-the content of the link in an external browser. The @samp{w3m} browser
-handles tables well and actually respects the table's width parameter
-(which can cause text to wrap if the author didn't anticipate that the
-page would be viewed in Emacs).
+the content of the link in @samp{w3m}. The @samp{w3m} browser handles
+tables well and actually respects the table's width parameter (which
+can cause text to wrap if the author didn't anticipate that the page
+would be viewed in Emacs).
@c -------------------------
@cindex browser, @samp{w3m-standalone}
@cindex @samp{w3m-standalone}
@@ -2643,6 +2641,20 @@ documentation for the Gnus command @kbd{W h} (see section
@cite{The Gnus Manual}).
@end ifnotinfo
+@cindex @file{.emacs}
+@cindex files, @file{.emacs}
+@findex browse-url-at-mouse
+@kindex S-Mouse-2
+
+A useful key binding that you can add to to @file{~/.emacs} is the
+following which displays an HTML link or textual URL in an external
+browser when clicked with @kbd{S-mouse-2}. This binding works in any
+buffer, including HTML buffers.
+
+@smalllisp
+(global-set-key [S-mouse-2] 'browse-url-at-mouse)
+@end smalllisp
+
@node Digests, Reading PGP, HTML, Reading Mail
@section Digests
diff --git a/man/newsticker.texi b/doc/misc/newsticker.texi
index 48d7f992667..31bba4aa36a 100644
--- a/man/newsticker.texi
+++ b/doc/misc/newsticker.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@comment %**start of header
-@setfilename ../info/newsticker
+@setfilename ../../info/newsticker
@set VERSION 1.9
@set UPDATED November 2005
@settitle Newsticker @value{VERSION}
diff --git a/man/org.texi b/doc/misc/org.texi
index aacc2929d13..cee6bf24cf0 100644
--- a/man/org.texi
+++ b/doc/misc/org.texi
@@ -1,10 +1,10 @@
\input texinfo
@c %**start of header
-@setfilename ../info/org
+@setfilename ../../info/org
@settitle Org Mode Manual
-@set VERSION 4.67
-@set DATE February 2007
+@set VERSION 5.07
+@set DATE August 2007
@dircategory Emacs
@direntry
@@ -80,8 +80,9 @@ Software Foundation raise funds for GNU development.''
* Tables:: Pure magic for quick formatting
* Hyperlinks:: Notes in context
* TODO items:: Every tree branch can be a TODO item
-* Timestamps:: Assign date and time to items
* Tags:: Tagging headlines and matching sets of tags
+* Properties and columns::
+* Timestamps:: Assign date and time to items
* Agenda views:: Collecting information into views
* Embedded LaTeX:: LaTeX fragments and formulas
* Exporting:: Sharing and publishing of notes
@@ -89,7 +90,6 @@ Software Foundation raise funds for GNU development.''
* Miscellaneous:: All the rest which did not fit elsewhere
* Extensions and Hacking:: It is possible to write add-on code
* History and Acknowledgments:: How Org-mode came into being
-* GNU Free Documentation License:: The license for this documentation.
* Index:: The fast road to specific information
* Key Index:: Key bindings and where they are described
@@ -113,6 +113,8 @@ Document Structure
* Archiving:: Move done task trees to a different place
* Sparse trees:: Matches embedded in context
* Plain lists:: Additional structure within an entry
+* Drawers:: Tucking stuff away
+* orgstruct-mode:: Structure editing outside Org-mode
Archiving
@@ -123,6 +125,7 @@ Tables
* Built-in table editor:: Simple tables
* Narrow columns:: Stop wasting space in tables
+* Column groups:: Grouping to trigger vertical lines
* orgtbl-mode:: The table editor as minor mode
* The spreadsheet:: The table editor has spreadsheet capabilities.
@@ -143,6 +146,7 @@ Hyperlinks
* Internal links:: Links to other places in the current file
* External links:: URL-like links to the world
* Handling links:: Creating, inserting and following
+* Using links outside Org-mode:: Linking from my C source code?
* Link abbreviations:: Shortcuts for writing complex links
* Search options:: Linking to a specific location
* Custom searches:: When the default search is not enough
@@ -163,26 +167,56 @@ TODO items
* TODO basics:: Marking and displaying TODO entries
* TODO extensions:: Workflow and assignments
* Priorities:: Some things are more important than others
-* Breaking down tasks:: Splitting a task into managable pieces
+* Breaking down tasks:: Splitting a task into manageable pieces
* Checkboxes:: Tick-off lists
Extended use of TODO keywords
* Workflow states:: From TODO to DONE in steps
* TODO types:: I do this, Fred the rest
+* Multiple sets in one file:: Mixing it all, and still finding your way
* Per file keywords:: Different files, different requirements
+Tags
+
+* Tag inheritance:: Tags use the tree structure of the outline
+* Setting tags:: How to assign tags to a headline
+* Tag searches:: Searching for combinations of tags
+
+Properties and Columns
+
+* Property syntax:: How properties are spelled out
+* Special properties:: Access to other Org-mode features
+* Property searches:: Matching property values
+* Column view:: Tabular viewing and editing
+* Property API:: Properties for Lisp programmers
+
+Column View
+
+* Defining columns:: The COLUMNS format property
+* Using column view:: How to create and use column view
+
+Defining Columns
+
+* Scope of column definitions:: Where defined, where valid?
+* Column attributes:: Appearance and content of a column
+
Timestamps
* Time stamps:: Assigning a time to a tree entry
* Creating timestamps:: Commands which insert timestamps
-* Custom time format:: If you cannot work with the ISO format
-* Repeating items:: Deadlines that come back again and again
+* Deadlines and scheduling:: Planning your work
* Progress logging:: Documenting when what work was done.
Creating timestamps
* The date/time prompt:: How org-mode helps you entering date and time
+* Custom time format:: Making dates look differently
+
+Deadlines and Scheduling
+
+* Inserting deadline/schedule:: Planning items
+* Repeated tasks:: Items that show up again and again
Progress Logging
@@ -190,12 +224,6 @@ Progress Logging
* Tracking TODO state changes:: When did the status change?
* Clocking work time:: When exactly did you work on this item?
-Tags
-
-* Tag inheritance:: Tags use the tree structure of the outline
-* Setting tags:: How to assign tags to a headline
-* Tag searches:: Searching for combinations of tags
-
Agenda Views
* Agenda files:: Files being searched for agenda information
@@ -209,7 +237,7 @@ The built-in agenda views
* Weekly/Daily agenda:: The calendar page with current tasks
* Global TODO list:: All unfinished action items
-* Matching headline tags:: Structured information with fine-tuned search
+* Matching tags and properties:: Structured information with fine-tuned search
* Timeline:: Time-sorted view for single file
* Stuck projects:: Find projects you need to review
@@ -224,7 +252,8 @@ Custom agenda views
* Storing searches:: Type once, use often
* Block agenda:: All the stuff you need in a single buffer
* Setting Options:: Changing the rules
-* Batch processing:: Agenda views from the command line
+* Exporting Agenda Views:: Writing agendas to files.
+* Extracting Agenda Information for other programs::
Embedded LaTeX
@@ -238,21 +267,29 @@ Exporting
* ASCII export:: Exporting to plain ASCII
* HTML export:: Exporting to HTML
+* LaTeX export:: Exporting to LaTeX
* XOXO export:: Exporting to XOXO
* iCalendar export:: Exporting in iCalendar format
* Text interpretation:: How the exporter looks at the file
HTML export
-* Export commands:: How to invode HTML export
+* HTML Export commands:: How to invoke LaTeX export
* Quoting HTML tags:: Using direct HTML in Org-mode
-* Links:: How hyperlinks get transferred to HTML
-* Images:: To inline or not to inline?
-* CSS support:: Style specifications
+* Links:: Transformation of links for HTML
+* Images:: How to include images
+* CSS support:: Changing the appearence of the output
+
+LaTeX export
+
+* LaTeX export commands:: How to invoke LaTeX export
+* Quoting LaTeX code:: Incorporating literal LaTeX code
Text interpretation by the exporter
* Comment lines:: Some lines will not be exported
+* Initial text:: Text before the first headline
+* Footnotes:: Numbers like [1]
* Enhancing text:: Subscripts, symbols and more
* Export options:: How to influence the export settings
@@ -296,9 +333,11 @@ Interaction with other packages
Extensions, Hooks and Hacking
* Extensions:: Existing 3rd-part extensions
+* Adding hyperlink types:: New custom link types
* Tables in arbitrary syntax:: Orgtbl for LaTeX and other programs
* Dynamic blocks:: Automatically filled blocks
* Special agenda views:: Customized views
+* Using the property API:: Writing programs that use entry properties
Tables in arbitrary syntax
@@ -324,7 +363,7 @@ Tables in arbitrary syntax
@section Summary
@cindex summary
-Org-mode is a mode for keeping notes, maintaining ToDo lists, and doing
+Org-mode is a mode for keeping notes, maintaining TODO lists, and doing
project planning with a fast and effective plain-text system.
Org-mode develops organizational tasks around NOTES files that contain
@@ -332,7 +371,7 @@ lists or information about projects as plain text. Org-mode is
implemented on top of outline-mode, which makes it possible to keep the
content of large files well structured. Visibility cycling and
structure editing help to work with the tree. Tables are easily created
-with a built-in table editor. Org-mode supports ToDo items, deadlines,
+with a built-in table editor. Org-mode supports TODO items, deadlines,
time stamps, and scheduling. It dynamically compiles entries into an
agenda that utilizes and smoothly integrates much of the Emacs calendar
and diary. Plain text URL-like links connect to websites, emails,
@@ -354,7 +393,7 @@ tags etc are created dynamically when you need them.
Org-mode keeps simple things simple. When first fired up, it should
feel like a straightforward, easy to use outliner. Complexity is not
imposed, but a large amount of functionality is available when you need
-it. Org-mode can be used on different levels and in different ways, for
+it. Org-mode is a toolbox and can be used in different ways, for
example as:
@example
@@ -364,6 +403,7 @@ example as:
@r{@bullet{} TODO list editor}
@r{@bullet{} full agenda and planner with deadlines and work scheduling}
@r{@bullet{} environment to implement David Allen's GTD system}
+@r{@bullet{} a basic database application}
@r{@bullet{} simple hypertext system, with HTML export}
@r{@bullet{} publishing tool to create a set of interlinked webpages}
@end example
@@ -371,7 +411,9 @@ example as:
Org-mode's automatic, context sensitive table editor with spreadsheet
capabilities can be integrated into any major mode by activating the
minor Orgtbl-mode. Using a translation step, it can be used to maintain
-tables in arbitray file types, for example in LaTeX.
+tables in arbitrary file types, for example in La@TeX{}. The structure
+editing and list creation capabilities can be used outside Org-mode with
+the minor Orgstruct-mode.
@cindex FAQ
There is a website for Org-mode which provides links to the newest
@@ -443,9 +485,10 @@ make install-info
@iftex
@b{Important:} @i{If you use copy-and-paste to copy lisp code from the
-PDF documentation to your .emacs file, the single quote character comes
-out incorrectly and the code will not work. You need to fix the single
-quotes by hand, or copy from Info documentation.}
+PDF documentation as viewed by Acrobat reader to your .emacs file, the
+single quote character comes out incorrectly and the code will not work.
+You need to fix the single quotes by hand, or copy from Info
+documentation.}
@end iftex
Add the following lines to your @file{.emacs} file. The last two lines
@@ -454,9 +497,9 @@ define @emph{global} keys for the commands @command{org-store-link} and
@lisp
;; The following lines are always needed. Choose your own keys.
-(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
-(define-key global-map "\C-cl" 'org-store-link)
-(define-key global-map "\C-ca" 'org-agenda)
+(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
+(global-set-key "\C-cl" 'org-store-link)
+(global-set-key "\C-ca" 'org-agenda)
@end lisp
Furthermore, you must activate @code{font-lock-mode} in org-mode
@@ -555,6 +598,8 @@ edit the structure of the document.
* Archiving:: Move done task trees to a different place
* Sparse trees:: Matches embedded in context
* Plain lists:: Additional structure within an entry
+* Drawers:: Tucking stuff away
+* orgstruct-mode:: Structure editing outside Org-mode
@end menu
@node Outlines, Headlines, Document structure, Document structure
@@ -562,15 +607,14 @@ edit the structure of the document.
@cindex outlines
@cindex outline-mode
-Org-mode is implemented on top of outline-mode. Outlines allow to
-organize a document in a hierarchical structure, which (at least for
-me) is the best representation of notes and thoughts. Overview over
-this structure is achieved by folding (hiding) large parts of the
+Org-mode is implemented on top of outline-mode. Outlines allow a
+document to be organized in a hierarchical structure, which (at least
+for me) is the best representation of notes and thoughts. An overview
+of this structure is achieved by folding (hiding) large parts of the
document to show only the general document structure and the parts
currently being worked on. Org-mode greatly simplifies the use of
-outlines by compressing the entire show/hide functionality into a
-single command @command{org-cycle}, which is bound to the @key{TAB}
-key.
+outlines by compressing the entire show/hide functionality into a single
+command @command{org-cycle}, which is bound to the @key{TAB} key.
@node Headlines, Visibility cycling, Outlines, Document structure
@section Headlines
@@ -578,8 +622,9 @@ key.
@cindex outline tree
Headlines define the structure of an outline tree. The headlines in
-Org-mode start with one or more stars, on the left margin. For
-example:
+Org-mode start with one or more stars, on the left margin@footnote{See
+the variable @code{org-special-ctrl-a/e} to configure special behavior
+of @kbd{C-a} and @kbd{C-e} in headlines.}. For example:
@example
* Top level headline
@@ -588,6 +633,7 @@ example:
some text
*** 3rd level
more text
+
* Another top level headline
@end example
@@ -595,6 +641,12 @@ example:
outline that has whitespace followed by a single star as headline
starters. @ref{Clean view} describes a setup to realize this.
+An empty line after the end of a subtree is considered part of it and
+will be hidden when the subtree is folded. However, if you leave at
+least two empty lines, one empty line will remain visible after folding
+the subtree, in order to structure the collapsed view. See the
+variable @code{org-cycle-separator-lines} to modify this behavior.
+
@node Visibility cycling, Motion, Headlines, Document structure
@section Visibility cycling
@cindex cycling, visibility
@@ -615,7 +667,7 @@ Org-mode uses just two commands, bound to @key{TAB} and
@table @kbd
@kindex @key{TAB}
@item @key{TAB}
-@emph{Subtree cycling}: Rotate current subtree between the states
+@emph{Subtree cycling}: Rotate current subtree among the states
@example
,-> FOLDED -> CHILDREN -> SUBTREE --.
@@ -637,7 +689,7 @@ argument (@kbd{C-u @key{TAB}}), global cycling is invoked.
@kindex S-@key{TAB}
@item S-@key{TAB}
@itemx C-u @key{TAB}
-@emph{Global cycling}: Rotate the entire buffer between the states
+@emph{Global cycling}: Rotate the entire buffer among the states
@example
,-> OVERVIEW -> CONTENTS -> SHOW ALL --.
@@ -662,13 +714,19 @@ level, all sibling headings.
@kindex C-c C-x b
@item C-c C-x b
Show the current subtree in an indirect buffer@footnote{The indirect
-buffer (@pxref{Indirect Buffers,Indirect Buffers,Indirect
-Buffers,emacs,GNU Emacs Manual}) will contain the entire buffer, but
-will be narrowed to the current tree. Editing the indirect buffer will
-also change the original buffer, but without affecting visibility in
-that buffer.}. With numerical prefix ARG, go up to this level and then
-take that tree. If ARG is negative, go up that many levels. With
-@kbd{C-u} prefix, do not remove the previously used indirect buffer.
+buffer
+@ifinfo
+(@pxref{Indirect Buffers,,,emacs,GNU Emacs Manual})
+@end ifinfo
+@ifnotinfo
+(see the Emacs manual for more information about indirect buffers)
+@end ifnotinfo
+will contain the entire buffer, but will be narrowed to the current
+tree. Editing the indirect buffer will also change the original buffer,
+but without affecting visibility in that buffer.}. With numerical
+prefix ARG, go up to this level and then take that tree. If ARG is
+negative, go up that many levels. With @kbd{C-u} prefix, do not remove
+the previously used indirect buffer.
@end table
When Emacs first visits an Org-mode file, the global state is set to
@@ -710,10 +768,16 @@ Backward to higher level heading.
@item C-c C-j
Jump to a different place without changing the current outline
visibility. Shows the document structure in a temporary buffer, where
-you can use visibility cycling (@key{TAB}) to find your destination.
-After pressing @key{RET}, the cursor moves to the selected location in
-the original buffer, and the headings hierarchy above it is made
-visible.
+you can use the following keys to find your destination:
+@example
+@key{TAB} @r{Cycle visibility.}
+@key{down} / @key{up} @r{Next/previous visible headline.}
+n / p @r{Next/previous visible headline.}
+f / b @r{Next/previous headline same level.}
+u @r{One level up.}
+0-9 @r{Digit argument.}
+@key{RET} @r{Select this location.}
+@end example
@end table
@node Structure editing, Archiving, Motion, Document structure
@@ -784,9 +848,9 @@ Sort same-level entries. When there is an active region, all entries in
the region will be sorted. Otherwise the children of the current
headline are sorted. The command prompts for the sorting method, which
can be alphabetically, numerically, by time (using the first time stamp
-in each entry), and each of these in reverse order. With a @kbd{C-u}
-prefix, sorting will be case-sensitive. With two @kbd{C-u C-u}
-prefixes, duplicate entries will also be removed.
+in each entry), by priority, and each of these in reverse order. With a
+@kbd{C-u} prefix, sorting will be case-sensitive. With two @kbd{C-u
+C-u} prefixes, duplicate entries will also be removed.
@end table
@cindex region, active
@@ -874,7 +938,9 @@ file, the archive file.
@kindex C-c C-x C-s
@item C-c C-x C-s
Archive the subtree starting at the cursor position to the location
-given by @code{org-archive-location}.
+given by @code{org-archive-location}. Context information that could be
+lost like the file name, the category, inherited tags, and the todo
+state will be store as properties in the entry.
@kindex C-u C-c C-x C-s
@item C-u C-c C-x C-s
Check if any direct children of the current headline could be moved to
@@ -930,9 +996,9 @@ match is in the body of an entry, headline and body are made visible.
In order to provide minimal context, also the full hierarchy of
headlines above the match is shown, as well as the headline following
the match. Each match is also highlighted; the highlights disappear
-when the buffer is changes an editing command, or by pressing @kbd{C-c
-C-c}. When called with a @kbd{C-u} prefix argument, previous highlights
-are kept, so several calls to this command can be stacked.
+when the buffer is changed by an editing command, or by pressing
+@kbd{C-c C-c}. When called with a @kbd{C-u} prefix argument, previous
+highlights are kept, so several calls to this command can be stacked.
@end table
@noindent
For frequently used sparse trees of specific search strings, you can
@@ -962,7 +1028,7 @@ XEmacs uses selective display for outlining, not text properties.}.
Or you can use the command @kbd{C-c C-e v} to export only the visible
part of the document and print the resulting file.
-@node Plain lists, , Sparse trees, Document structure
+@node Plain lists, Drawers, Sparse trees, Document structure
@section Plain lists
@cindex plain lists
@cindex lists, plain
@@ -980,14 +1046,17 @@ bullet, lines must be indented or they will be seen as top-level
headlines. Also, when you are hiding leading stars to get a clean
outline view, plain list items starting with a star are visually
indistinguishable from true headlines. In short: even though @samp{*}
-is supported, it may be better not to use it for plain list items} as
+is supported, it may be better not to use it for plain list items.} as
bullets. Ordered list items start with @samp{1.} or @samp{1)}. Items
belonging to the same list must have the same indentation on the first
line. In particular, if an ordered list reaches number @samp{10.}, then
the 2--digit numbers must be written left-aligned with the other numbers
in the list. Indentation also determines the end of a list item. It
ends before the next line that is indented like the bullet/number, or
-less. For example:
+less. Empty lines are part of the previous item, so you can have
+several paragraphs in one item. If you would like an empty line to
+terminate all currently open plain lists, configure the variable
+@code{org-empty-line-terminates-plain-lists}. Here is an example:
@example
@group
@@ -1008,10 +1077,7 @@ Org-mode supports these lists by tuning filling and wrapping commands to
deal with them correctly@footnote{Org-mode only changes the filling
settings for Emacs. For XEmacs, you should use Kyle E. Jones'
@file{filladapt.el}. To turn this on, put into @file{.emacs}:
-@example
-(require 'filladapt)
-@end example
-}.
+@code{(require 'filladapt)}}.
The following commands act on items when the cursor is in the first line
of an item (the line with the bullet or number).
@@ -1024,6 +1090,9 @@ Items can be folded just like headline levels if you set the variable
given by the indentation of the bullet/number. Items are always
subordinate to real headlines, however; the hierarchies remain
completely separated.
+
+If @code{org-cycle-include-plain-lists} has not been set, @key{TAB}
+fixes the indentation of the curent line in a heuristic way.
@kindex M-@key{RET}
@item M-@key{RET}
Insert new item at current level. With prefix arg, force a new heading
@@ -1062,10 +1131,64 @@ the command chain with a cursor motion or so.
@kindex C-c C-c
@item C-c C-c
If there is a checkbox (@pxref{Checkboxes}) in the item line, toggle the
-state of the checkbox. Otherwise, if this is an ordered list, renumber
-the ordered list at the cursor.
+state of the checkbox. If not, make this command makes sure that all
+the items on this list level use the same bullet. Furthermore, if this
+is an ordered list, make sure the numbering is ok.
+@kindex C-c -
+@item C-c -
+Cycle the entire list level through the different itemize/enumerate
+bullets (@samp{-}, @samp{+}, @samp{*}, @samp{1.}, @samp{1)}).
+With prefix arg, select the nth bullet from this list.
@end table
+@node Drawers, orgstruct-mode, Plain lists, Document structure
+@section Drawers
+@cindex drawers
+@cindex visibility cycling, drawers
+
+Sometimes you want to keep information associated with an entry, but you
+normally don't want to see it. For this, Org-mode has @emph{drawers}.
+Drawers need to be configured with the variable @code{org-drawers}, and
+look like this:
+
+@example
+** This is a headline
+ Still outside the drawer
+ :DRAWERNAME:
+ This is inside the drawer.
+ :END:
+ After the drawer.
+@end example
+
+Visibility cycling (@pxref{Visibility cycling}) on the headline will
+hide and show the entry, but keep the drawer collapsed to a single line.
+In order to look inside the drawer, you need to move the cursor to the
+drawer line and press @key{TAB} there. Org-mode uses a drawer for
+storing properties (@pxref{Properties and columns}).
+
+@node orgstruct-mode, , Drawers, Document structure
+@section The Orgstruct minor mode
+@cindex orgstruct-mode
+@cindex minor mode for structure editing
+
+If you like the intuitive way the Org-mode structure editing and list
+formatting works, you might want to use these commands in other modes
+like text-mode or mail-mode as well. The minor mode Orgstruct-mode
+makes this possible. You can always toggle the mode with @kbd{M-x
+orgstruct-mode}. To turn it on by default, for example in mail mode,
+use
+
+@lisp
+(add-hook 'mail-mode-hook 'turn-on-orgstruct)
+@end lisp
+
+When this mode is active and the cursor is on a line that looks to
+Org-mode like a headline of the first line of a list item, most
+structure editing commands will work, even if the same keys normally
+have different functionality in the major mode you are using. If the
+cursor is not in one of those special lines, Orgstruct-mode lurks
+silently in the shadow.
+
@node Tables, Hyperlinks, Document structure, Top
@chapter Tables
@cindex tables
@@ -1078,6 +1201,7 @@ Emacs @file{calc} package.
@menu
* Built-in table editor:: Simple tables
* Narrow columns:: Stop wasting space in tables
+* Column groups:: Grouping to trigger vertical lines
* orgtbl-mode:: The table editor as minor mode
* The spreadsheet:: The table editor has spreadsheet capabilities.
@end menu
@@ -1087,9 +1211,9 @@ Emacs @file{calc} package.
@cindex table editor, built-in
Org-mode makes it easy to format tables in plain ASCII. Any line with
-@samp{|} as the first non-white character is considered part of a
-table. @samp{|} is also the column separator. A table might look
-like this:
+@samp{|} as the first non-whitespace character is considered part of a
+table. @samp{|} is also the column separator. A table might look like
+this:
@example
| Name | Phone | Age |
@@ -1141,16 +1265,16 @@ table. But it's easier just to start typing, like
@kindex C-c C-c
@item C-c C-c
Re-align the table without moving the cursor.
-
+@c
@kindex @key{TAB}
@item @key{TAB}
Re-align the table, move to the next field. Creates a new row if
necessary.
-
+@c
@kindex S-@key{TAB}
@item S-@key{TAB}
Re-align, move to previous field.
-
+@c
@kindex @key{RET}
@item @key{RET}
Re-align the table and move down to next row. Creates a new row if
@@ -1163,34 +1287,34 @@ NEWLINE, so it can be used to split a table.
@item M-@key{left}
@itemx M-@key{right}
Move the current column left/right.
-
+@c
@kindex M-S-@key{left}
@item M-S-@key{left}
Kill the current column.
-
+@c
@kindex M-S-@key{right}
@item M-S-@key{right}
Insert a new column to the left of the cursor position.
-
+@c
@kindex M-@key{up}
@kindex M-@key{down}
@item M-@key{up}
@itemx M-@key{down}
Move the current row up/down.
-
+@c
@kindex M-S-@key{up}
@item M-S-@key{up}
Kill the current row or horizontal line.
-
+@c
@kindex M-S-@key{down}
@item M-S-@key{down}
Insert a new row above (with arg: below) the current row.
-
+@c
@kindex C-c -
@item C-c -
Insert a horizontal line below current row. With prefix arg, the line
is created above the current line.
-
+@c
@kindex C-c ^
@item C-c ^
Sort the table lines in the region. The position of point indicates the
@@ -1209,10 +1333,12 @@ argument, alphabetic sorting will be case-sensitive.
Copy a rectangular region from a table to a special clipboard. Point
and mark determine edge fields of the rectangle. The process ignores
horizontal separator lines.
+@c
@kindex C-c C-x C-w
@item C-c C-x C-w
Copy a rectangular region from a table to a special clipboard, and
blank all fields in the rectangle. So this is the ``cut'' operation.
+@c
@kindex C-c C-x C-y
@item C-c C-x C-y
Paste a rectangular region into a table.
@@ -1220,6 +1346,7 @@ The upper right corner ends up in the current field. All involved fields
will be overwritten. If the rectangle does not fit into the present table,
the table is enlarged as needed. The process ignores horizontal separator
lines.
+@c
@kindex C-c C-q
@item C-c C-q
Wrap several fields in a column like a paragraph. If there is an active
@@ -1235,7 +1362,6 @@ above.
@tsubheading{Calculations}
@cindex formula, in tables
@cindex calculations, in tables
-
@cindex region, active
@cindex active region
@cindex transient-mark-mode
@@ -1244,7 +1370,7 @@ above.
Sum the numbers in the current column, or in the rectangle defined by
the active region. The result is shown in the echo area and can
be inserted with @kbd{C-y}.
-
+@c
@kindex S-@key{RET}
@item S-@key{RET}
When current field is empty, copy from first non-empty field above.
@@ -1261,12 +1387,12 @@ Edit the current field in a separate window. This is useful for fields
that are not fully visible (@pxref{Narrow columns}). When called with a
@kbd{C-u} prefix, just make the full field visible, so that it can be
edited in place.
-
+@c
@kindex C-c @key{TAB}
@item C-c @key{TAB}
This is an alias for @kbd{C-u C-c `} to make the current field fully
visible.
-
+@c
@item M-x org-table-import
Import a file as a table. The table should be TAB- or whitespace
separated. Useful, for example, to import an Excel table or data from a
@@ -1274,11 +1400,14 @@ database, because these programs generally can write TAB-separated text
files. This command works by inserting the file into the buffer and
then converting the region to a table. Any prefix argument is passed on
to the converter, which uses it to determine the separator.
-
+@item C-c |
+Tables can also be imported by pasting tabular text into the org-mode
+buffer, selecting the pasted text with @kbd{C-x C-x} and then using the
+@kbd{C-c |} command (see above under @i{Creation and conversion}.
+@c
@item M-x org-table-export
Export the table as a TAB-separated file. Useful for data exchange with,
for example, Excel or database programs.
-
@end table
If you don't like the automatic table editor because it gets in your
@@ -1292,7 +1421,7 @@ it off with
@noindent Then the only table command that still works is
@kbd{C-c C-c} to do a manual re-align.
-@node Narrow columns, orgtbl-mode, Built-in table editor, Tables
+@node Narrow columns, Column groups, Built-in table editor, Tables
@section Narrow columns
@cindex narrow columns in tables
@@ -1320,7 +1449,7 @@ value.
@noindent
Fields that are wider become clipped and end in the string @samp{=>}.
Note that the full text is still in the buffer, it is only invisible.
-To see the full text, hold the mouse over the field - a tooltip window
+To see the full text, hold the mouse over the field - a tool-tip window
will show the full content. To edit such a field, use the command
@kbd{C-c `} (that is @kbd{C-c} followed by the backquote). This will
open a new window with the full field. Edit it and finish with @kbd{C-c
@@ -1338,7 +1467,42 @@ on a per-file basis with:
#+STARTUP: noalign
@end example
-@node orgtbl-mode, The spreadsheet, Narrow columns, Tables
+@node Column groups, orgtbl-mode, Narrow columns, Tables
+@section Column groups
+@cindex grouping columns in tables
+
+When Org-mode exports tables, it does so by default without vertical
+lines because that is visually more satisfying in general. Occasionally
+however, vertical lines can be useful to structure a table into groups
+of columns, much like horizontal lines can do for groups of rows. In
+order to specify column groups, you can use a special row where the
+first field contains only @samp{/}. The further fields can either
+contain @samp{<} to indicate that this column should start a group,
+@samp{>} to indicate the end of a column, or @samp{<>} to make a column
+a group of its own. Boundaries between colum groups will upon export be
+marked with vertical lines. Here is an example:
+
+@example
+| | N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) |
+|---+----+-----+-----+-----+---------+------------|
+| / | <> | < | | > | < | > |
+| # | 1 | 1 | 1 | 1 | 1 | 1 |
+| # | 2 | 4 | 8 | 16 | 1.4142 | 1.1892 |
+| # | 3 | 9 | 27 | 81 | 1.7321 | 1.3161 |
+|---+----+-----+-----+-----+---------+------------|
+#+TBLFM: $3=$2^2::$4=$2^3::$5=$2^4::$6=sqrt($2)::$7=sqrt(sqrt(($2))
+@end example
+
+It is also sufficient to just insert the colum group starters after
+every vertical line you'd like to have:
+
+@example
+| N | N^2 | N^3 | N^4 | sqrt(n) | sqrt[4](N) |
+|----+-----+-----+-----+---------+------------|
+| / | < | | | < | |
+@end example
+
+@node orgtbl-mode, The spreadsheet, Column groups, Tables
@section The Orgtbl minor mode
@cindex orgtbl-mode
@cindex minor mode for tables
@@ -1355,8 +1519,8 @@ example in mail mode, use
Furthermore, with some special setup, it is possible to maintain tables
in arbitrary syntax with Orgtbl-mode. For example, it is possible to
-construct LaTeX tables with the underlying ease and power of
-Orgtbl-mode, including spreadsheet capabulities. For details, see
+construct La@TeX{} tables with the underlying ease and power of
+Orgtbl-mode, including spreadsheet capabilities. For details, see
@ref{Tables in arbitrary syntax}.
@node The spreadsheet, , orgtbl-mode, Tables
@@ -1367,7 +1531,12 @@ Orgtbl-mode, including spreadsheet capabulities. For details, see
The table editor makes use of the Emacs @file{calc} package to implement
spreadsheet-like capabilities. It can also evaluate Emacs Lisp forms to
-derive fields from other fields.
+derive fields from other fields. While fully featured, Org-mode's
+implementation is not identical to other spreadsheets. For example,
+Org-mode knows the concept of a @emph{column formula} that will be
+applied to all non-header fields in a column without having to copy the
+formula to each relevant field.
+
@menu
* References:: How to refer to another field or range
* Formula syntax for Calc:: Using Calc to compute stuff
@@ -1387,17 +1556,26 @@ To compute fields in the table from other fields, formulas must
reference other fields or ranges. In Org-mode, fields can be referenced
by name, by absolute coordinates, and by relative coordinates. To find
out what the coordinates of a field are, press @kbd{C-c ?} in that
-field.
+field, or press @kbd{C-c @}} to toggle the display of a grid.
@subsubheading Field references
@cindex field references
@cindex references, to fields
-Formulas can reference the value of another field with the operator
+Formulas can reference the value of another field in two ways. Like in
+any other spreadsheet, you may reference fields with a letter/number
+combination like @code{B3}, meaning the 2nd field in the 3rd row.
+@c Such references are always fixed to that field, they don't change
+@c when you copy and paste a formula to a different field. So
+@c Org-mode's @code{B3} behaves like @code{$B$3} in other spreadsheets.
+
+@noindent
+Org-mode also uses another, more general operator that looks like this:
@example
@@row$column
@end example
+@noindent
Column references can be absolute like @samp{1}, @samp{2},...@samp{N},
or relative to the current column like @samp{+1} or @samp{-2}.
@@ -1417,18 +1595,20 @@ directly at the hline is used.
either the column or the row part of the reference, the current
row/column is implied.
-Org-mode's references with @emph{positive} numbers correspond to fixed
-references in other spreadsheet programs. For example, @code{@@3$28}
-corresponds to @code{$AB$3}. Org-mode's references with @emph{negative}
-numbers behave similar to non-fixed references in other spreadsheet
-programs, because when the same formula is used in several fields,
-different fields are referenced each time.
+Org-mode's references with @emph{unsigned} numbers are fixed references
+in the sense that if you use the same reference in the formula for two
+different fields, the same field will be referenced each time.
+Org-mode's references with @emph{signed} numbers are floating
+references because the same reference operator can reference different
+fields depending on the field being calculated by the formula.
Here are a few examples:
@example
@@2$3 @r{2nd row, 3rd column}
+C2 @r{same as previous}
$5 @r{column 5 in the current row}
+E& @r{same as previous}
@@2 @r{current column, row 2}
@@-1$-3 @r{the field one row up, three columns to the left}
@@-I$2 @r{field just under hline above current row, column 2}
@@ -1449,6 +1629,7 @@ format at least for the first field (i.e the reference must start with
$1..$3 @r{First three fields in the current row.}
$P..$Q @r{Range, using column names (see under Advanced)}
@@2$1..@@4$3 @r{6 fields between these two fields.}
+A2..C4 @r{Same as above.}
@@-1$-2..@@-1 @r{3 numbers from the column to the left, 2 up to current row}
@end example
@@ -1466,12 +1647,29 @@ see the @samp{E} mode switch below). If there are no non-empty fields,
@samp{$name} is interpreted as the name of a column, parameter or
constant. Constants are defined globally through the variable
-@code{org-table-formula-constants}. If you have the
-@file{constants.el} package, it will also be used to resolve
-constants, including natural constants like @samp{$h} for Planck's
-constant, and units like @samp{$km} for kilometers. Column names and
-parameters can be specified in special table lines. These are
-described below, see @ref{Advanced features}.
+@code{org-table-formula-constants}, and locally (for the file) through a
+line like
+
+@example
+#+CONSTANTS: c=299792458. pi=3.14 eps=2.4e-6
+@end example
+
+@noindent
+Also properties (@pxref{Properties and columns}) can be used as
+constants in table formulas: For a property @samp{:XYZ:} use the name
+@samp{$PROP_XYZ}, and the property will be searched in the current
+outline entry and in the hierarchy above it. If you have the
+@file{constants.el} package, it will also be used to resolve constants,
+including natural constants like @samp{$h} for Planck's constant, and
+units like @samp{$km} for kilometers@footnote{@file{Constant.el} can
+supply the values of constants in two different unit systems, @code{SI}
+and @code{cgs}. Which one is used depends on the value of the variable
+@code{constants-unit-system}. You can use the @code{#+STARTUP} options
+@code{constSI} and @code{constcgs} to set this value for the current
+buffer.}. Column names and parameters can be specified in special table
+lines. These are described below, see @ref{Advanced features}. All
+names must start with a letter, and further consist of letters and
+numbers.
@node Formula syntax for Calc, Formula syntax for Lisp, References, The spreadsheet
@subsection Formula syntax for Calc
@@ -1485,6 +1683,7 @@ non-standard convention that @samp{/} has lower precedence than
evaluation by @code{calc-eval} (@pxref{Calling Calc from
Your Programs,calc-eval,Calling calc from Your Lisp Programs,calc,GNU
Emacs Calc Manual}),
+@c FIXME: The link to the calc manual in HTML does not work.
variable substitution takes place according to the rules described above.
@cindex vectors, in table calculations
The range vectors can be directly fed into the calc vector functions
@@ -1518,7 +1717,7 @@ reformat the final result. A few examples:
$1+$2 @r{Sum of first and second field}
$1+$2;%.2f @r{Same, format result to two decimals}
exp($2)+exp($1) @r{Math functions can be used}
-$;%.1f @r{Reformat current cell to 1 decimal}
+$0;%.1f @r{Reformat current cell to 1 decimal}
($3-32)*5/9 @r{Degrees F -> C conversion}
$c/$1/$cm @r{Hz -> cm conversion, using @file{constants.el}}
tan($1);Dp3s1 @r{Compute in degrees, precision 3, display SCI 1}
@@ -1528,21 +1727,34 @@ vmean($2..$7);EN @r{Same, but treat empty fields as 0}
taylor($3,x=7,2) @r{taylor series of $3, at x=7, second degree}
@end example
+Calc also contains a complete set of logical operations. For example
+
+@example
+if($1<20,teen,string("")) @r{``teen'' if age $1 less than 20, else empty}
+@end example
+
@node Formula syntax for Lisp, Field formulas, Formula syntax for Calc, The spreadsheet
@subsection Emacs Lisp forms as formulas
@cindex Lisp forms, as table formulas
It is also possible to write a formula in Emacs Lisp; this can be useful
-for string manipulation and control structures. If a formula starts
-with a single quote followed by an opening parenthesis, then it is
-evaluated as a lisp form. The evaluation should return either a string
-or a number. Just as with @file{calc} formulas, you can specify modes
-and a printf format after a semicolon. A reference will be replaced
-with a string (in double quotes) containing the field. If you provide
-the @samp{N} mode switch, all referenced elements will be numbers.
-Ranges are inserted as space-separated fields, so you can embed them in
-list or vector syntax. A few examples, note how the @samp{N} mode is
-used when we do computations in lisp.
+for string manipulation and control structures, if the Calc's
+functionality is not enough. If a formula starts with a single quote
+followed by an opening parenthesis, then it is evaluated as a lisp form.
+The evaluation should return either a string or a number. Just as with
+@file{calc} formulas, you can specify modes and a printf format after a
+semicolon. With Emacs Lisp forms, you need to be concious about the way
+field references are interpolated into the form. By default, a
+reference will be interpolated as a Lisp string (in double quotes)
+containing the field. If you provide the @samp{N} mode switch, all
+referenced elements will be numbers (non-number fields will be zero) and
+interpolated as Lisp numbers, without quotes. If you provide the
+@samp{L} flag, all fields will be interpolated literally, without quotes.
+I.e., if you want a reference to be interpreted as a string by the Lisp
+form, enclode the reference operator itself in double quotes, like
+@code{"$3"}. Ranges are inserted as space-separated fields, so you can
+embed them in list or vector syntax. A few examples, note how the
+@samp{N} mode is used when we do computations in lisp.
@example
@r{Swap the first two characters of the content of column 1}
@@ -1567,12 +1779,11 @@ evaluated, and the current field replaced with the result.
Formulas are stored in a special line starting with @samp{#+TBLFM:}
directly below the table. If you typed the equation in the 4th field of
the 3rd data line in the table, the formula will look like
-@samp{@@3$2=$1+$2}. When inserting/deleting/swapping column and rows
+@samp{@@3$4=$1+$2}. When inserting/deleting/swapping column and rows
with the appropriate commands, @i{absolute references} (but not relative
-ones) in stored formulas are modified in order to
-still reference the same field. Of cause this is not true if you edit
-the table structure with normal editing commands - then you must go and
-fix equations yourself.
+ones) in stored formulas are modified in order to still reference the
+same field. Of cause this is not true if you edit the table structure
+with normal editing commands - then you must fix the equations yourself.
Instead of typing an equation into the field, you may also use the
following command
@@ -1593,7 +1804,9 @@ it to the current field and stores it.
Often in a table, the same formula should be used for all fields in a
particular column. Instead of having to copy the formula to all fields
in that column, org-mode allows to assign a single formula to an entire
-column.
+column. If the table contains horizontal separator hlines, everything
+before the first such line is considered part of the table @emph{header}
+and will not be modified by column formulas.
To assign a formula to a column, type it directly into any field in the
column, preceded by an equal sign, like @samp{=$1+$2}. When you press
@@ -1626,7 +1839,11 @@ will apply it to that many consecutive fields in the current column.
You can edit individual formulas in the minibuffer or directly in the
field. Org-mode can also prepare a special buffer with all active
-formulas of a table.
+formulas of a table. When offering a formula for editing, Org-mode
+converts references to the standard format (like @code{B3} or @code{D&})
+if possible. If you prefer to only work with the internal format (like
+@code{@@3$2} or @code{$4}), configure the variable
+@code{org-table-use-standard-references}.
@table @kbd
@kindex C-c =
@@ -1645,21 +1862,36 @@ minibuffer is that you can use the command @kbd{C-c ?}.
@item C-c ?
While editing a formula in a table field, highlight the field(s)
referenced by the reference at the cursor position in the formula.
+@kindex C-c @}
+@item C-c @}
+Toggle the display of row and column numbers for a table, using
+overlays. These are updated each time the table is aligned, you can
+force it with @kbd{C-c C-c}.
+@kindex C-c @{
+@item C-c @{
+Toggle the formula debugger on and off. See below.
@kindex C-c '
@item C-c '
Edit all formulas for the current table in a special buffer, where the
-formulas will be displayed one per line.
+formulas will be displayed one per line. If the current field has an
+active formula, the cursor in the formula editor will mark it.
While inside the special buffer, Org-mode will automatically highlight
any field or range reference at the cursor position. You may edit,
remove and add formulas, and use the following commands:
@table @kbd
@kindex C-c C-c
+@kindex C-x C-s
@item C-c C-c
-Exit the buffer and store the modified formulas. With @kbd{C-u} prefix,
-also apply the new formulas to the entire table.
+@itemx C-x C-s
+Exit the formula editor and store the modified formulas. With @kbd{C-u}
+prefix, also apply the new formulas to the entire table.
@kindex C-c C-q
@item C-c C-q
-Exit the buffer without installing changes.
+Exit the formula editor without installing changes.
+@kindex C-c C-r
+@item C-c C-r
+Toggle all references in the formula editor between standard (like
+@code{B3}) and internal (like @code{@@3$2}).
@kindex @key{TAB}
@item @key{TAB}
Pretty-print or indent lisp formula at point. When in a line containing
@@ -1671,23 +1903,25 @@ formula, @key{TAB} re-indents just like in Emacs-lisp-mode.
Complete Lisp symbols, just like in Emacs-lisp-mode.
@kindex S-@key{up}
@kindex S-@key{down}
-@item S-@key{up}/@key{down}
-Move the reference line in the Org-mode buffer up and down. This is
-important for highlighting the references of column formulas for
-different rows.
+@kindex S-@key{left}
+@kindex S-@key{right}
+@item S-@key{up}/@key{down}/@key{left}/@key{right}
+Shift the reference at point. For example, if the reference is
+@code{B3} and you press @kbd{S-@key{right}}, it will become @code{C3}.
+This also works for relative references, and for hline references.
+@kindex M-S-@key{up}
+@kindex M-S-@key{down}
+@item M-S-@key{up}/@key{down}
+Move the test line for column formulas in the Org-mode buffer up and
+down.
@kindex M-@key{up}
@kindex M-@key{down}
@item M-@key{up}/@key{down}
Scroll the window displaying the table.
-@end table
@kindex C-c @}
@item C-c @}
-Toggle the display of row and column numbers for a table, using
-overlays. These are uptated each time the table is aligned, you can
-force it with @kbd{C-c C-c}.
-@kindex C-c @{
-@item C-c @{
-Toggle the formula debugger on and off. See below.
+Turn the coordinate grid in the table on and off.
+@end table
@end table
Making a table field blank does not remove the formula associated with
@@ -1708,8 +1942,8 @@ When the evaluation of a formula leads to an error, the field content
becomes the string @samp{#ERROR}. If you would like see what is going
on during variable substitution and calculation in order to find a bug,
turn on formula debugging in the @code{Tbl} menu and repeat the
-calculation, for example by pressing @kbd{C-c = @key{RET}} in a field.
-Detailed information will be displayed.
+calculation, for example by pressing @kbd{C-u C-u C-c = @key{RET}} in a
+field. Detailed information will be displayed.
@node Updating the table, Advanced features, Editing and debugging formulas, The spreadsheet
@subsection Updating the Table
@@ -1728,22 +1962,23 @@ following commands:
@item C-c *
Recalculate the current row by first applying the stored column formulas
from left to right, and all field formulas in the current row.
-
+@c
@kindex C-u C-c *
@item C-u C-c *
@kindex C-u C-c C-c
@itemx C-u C-c C-c
Recompute the entire table, line by line. Any lines before the first
hline are left alone, assuming that these are part of the table header.
-
+@c
@kindex C-u C-u C-c *
+@kindex C-u C-u C-c C-c
@item C-u C-u C-c *
+@itemx C-u C-u C-c C-c
Iterate the table by recomputing it until no further changes occur.
This may be necessary if some computed fields use the value of other
fields that are computed @i{later} in the calculation sequence.
@end table
-
@node Advanced features, , Updating the table, The spreadsheet
@subsection Advanced features
@@ -1860,6 +2095,7 @@ links to other files, Usenet articles, emails, and much more.
* Internal links:: Links to other places in the current file
* External links:: URL-like links to the world
* Handling links:: Creating, inserting and following
+* Using links outside Org-mode:: Linking from my C source code?
* Link abbreviations:: Shortcuts for writing complex links
* Search options:: Linking to a specific location
* Custom searches:: When the default search is not enough
@@ -1917,8 +2153,8 @@ convenient to put them into a comment line. For example
@noindent In HTML export (@pxref{HTML export}), such targets will become
named anchors for direct access through @samp{http} links@footnote{Note
-that text before the first headline will never be exported, so the first
-such target must be after the first headline.}.
+that text before the first headline is usually not exported, so the
+first such target should be after the first headline.}.
If no dedicated target exists, Org-mode will search for the words in the
link. In the above example the search would be for @samp{my target}.
@@ -1954,15 +2190,15 @@ earlier.
@cindex targets, radio
@cindex links, radio targets
-You can configure Org-mode to link any occurrences of certain target
-names in normal text. So without explicitly creating a link, the text
-connects to the target radioing its position. Radio targets are
-enclosed by triple angular brackets. For example, a target
-@samp{<<<My Target>>>} causes each occurrence of @samp{my target} in
-normal text to become activated as a link. The Org-mode file is
-scanned automatically for radio targets only when the file is first
-loaded into Emacs. To update the target list during editing, press
-@kbd{C-c C-c} with the cursor on or at a target.
+Org-mode can automatically turn any occurrences of certain target names
+in normal text into a link. So without explicitly creating a link, the
+text connects to the target radioing its position. Radio targets are
+enclosed by triple angular brackets. For example, a target @samp{<<<My
+Target>>>} causes each occurrence of @samp{my target} in normal text to
+become activated as a link. The Org-mode file is scanned automatically
+for radio targets only when the file is first loaded into Emacs. To
+update the target list during editing, press @kbd{C-c C-c} with the
+cursor on or at a target.
@node External links, Handling links, Internal links, Hyperlinks
@section External links
@@ -2032,7 +2268,7 @@ as links. If spaces must be part of the link (for example in
@samp{bbdb:Richard Stallman}), or if you need to remove ambiguities
about the end of the link, enclose them in angular brackets.
-@node Handling links, Link abbreviations, External links, Hyperlinks
+@node Handling links, Using links outside Org-mode, External links, Hyperlinks
@section Handling links
@cindex links, handling
@@ -2058,7 +2294,7 @@ automatically created link is not working correctly or accurately
enough, you can write custom functions to select the search string and
to do the search for particular file types - see @ref{Custom searches}.
The key binding @kbd{C-c l} is only a suggestion - see @ref{Installation}.
-
+@c
@kindex C-c C-l
@cindex link completion
@cindex completion, of links
@@ -2068,24 +2304,26 @@ Insert a link. This prompts for a link to be inserted into the buffer.
You can just type a link, using text for an internal link, or one of the
link type prefixes mentioned in the examples above. All links stored
during the current session are part of the history for this prompt, so
-you can access them with @key{up} and @key{down}, or with
-completion@footnote{After insertion of a stored link, the link will be
-removed from the list of stored links. To keep it in the list later
+you can access them with @key{up} and @key{down}. Completion, on the
+other hand, will help you to insert valid link prefixes like
+@samp{http:} or @samp{ftp:}, including the prefixes defined through link
+abbreviations (@pxref{Link abbreviations}). The link will be inserted
+into the buffer@footnote{After insertion of a stored link, the link will
+be removed from the list of stored links. To keep it in the list later
use, use a triple @kbd{C-u} prefix to @kbd{C-c C-l}, or configure the
-option @code{org-keep-stored-link-after-insertion}.}. The link will be
-inserted into the buffer, along with a descriptive text. If some text
-was selected when this command is called, the selected text becomes the
-default description.@* Note that you don't have to use this command to
-insert a link. Links in Org-mode are plain text, and you can type or
-paste them straight into the buffer. By using this command, the links
-are automatically enclosed in double brackets, and you will be asked for
-the optional descriptive text.
-
+option @code{org-keep-stored-link-after-insertion}.}, along with a
+descriptive text. If some text was selected when this command is
+called, the selected text becomes the default description.@* Note that
+you don't have to use this command to insert a link. Links in Org-mode
+are plain text, and you can type or paste them straight into the buffer.
+By using this command, the links are automatically enclosed in double
+brackets, and you will be asked for the optional descriptive text.
+@c
@c If the link is a @samp{file:} link and
@c the linked file is located in the same directory as the current file or
@c a subdirectory of it, the path of the file will be inserted relative to
@c the current directory.
-
+@c
@kindex C-u C-c C-l
@cindex file name completion
@cindex completion, of file names
@@ -2098,11 +2336,11 @@ directory or in a subdirectory of it, or if the path is written relative
to the current directory using @samp{../}. Otherwise an absolute path
is used, if possible with @samp{~/} for your home directory. You can
force an absolute path with two @kbd{C-u} prefixes.
-
-@item C-c C-l @r{with cursor on existing link}
+@c
+@item C-c C-l @r{(with cursor on existing link)}
When the cursor is on an existing link, @kbd{C-c C-l} allows you to edit the
link and description parts of the link.
-
+@c
@cindex following links
@kindex C-c C-o
@item C-c C-o
@@ -2118,26 +2356,26 @@ suitable application for local non-text files. Classification of files
is based on file extension only. See option @code{org-file-apps}. If
you want to override the default application and visit the file with
Emacs, use a @kbd{C-u} prefix.
-
+@c
@kindex mouse-2
@kindex mouse-1
@item mouse-2
@itemx mouse-1
On links, @kbd{mouse-2} will open the link just as @kbd{C-c C-o}
would. Under Emacs 22, also @kbd{mouse-1} will follow a link.
-
+@c
@kindex mouse-3
@item mouse-3
Like @kbd{mouse-2}, but force file links to be opened with Emacs, and
internal links to be displayed in another window@footnote{See the
variable @code{org-display-internal-link-with-indirect-buffer}}.
-
+@c
@cindex mark ring
@kindex C-c %
@item C-c %
Push the current position onto the mark ring, to be able to return
easily. Commands following an internal link do this automatically.
-
+@c
@cindex links, returning to
@kindex C-c &
@item C-c &
@@ -2145,7 +2383,7 @@ Jump back to a recorded position. A position is recorded by the
commands following internal links, and by @kbd{C-c %}. Using this
command several times in direct succession moves through a ring of
previously recorded positions.
-
+@c
@kindex C-c C-x C-n
@kindex C-c C-x C-p
@cindex links, finding next/previous
@@ -2163,7 +2401,20 @@ to @kbd{C-n} and @kbd{C-p}
@end lisp
@end table
-@node Link abbreviations, Search options, Handling links, Hyperlinks
+@node Using links outside Org-mode, Link abbreviations, Handling links, Hyperlinks
+@section Using links outside Org-mode
+
+You can insert and follow links that have Org-mode syntax not only in
+Org-mode, but in any Emacs buffer. For this, you should create two
+global commands, like this (please select suitable global keys
+yourself):
+
+@lisp
+(global-set-key "\C-c L" 'org-insert-link-global)
+(global-set-key "\C-c o" 'org-open-at-point-global)
+@end lisp
+
+@node Link abbreviations, Search options, Using links outside Org-mode, Hyperlinks
@section Link abbreviations
@cindex link abbreviations
@cindex abbreviation, links
@@ -2341,8 +2592,8 @@ use:
@noindent In these entries, the character specifies how to select the
template. The first string specifies the template. Two more (optional)
strings give the file in which, and the headline under which the new
-note should be stored. The file defaults to
-@code{org-default-notes-file}, the heading to
+note should be stored. The file defaults (if not present or @code{nil})
+to @code{org-default-notes-file}, the heading to
@code{org-remember-default-headline}. Both defaults help to get to the
storing location quickly, but you can change the location interactively
while storing the note.
@@ -2377,6 +2628,8 @@ insertion of content:
%a @r{annotation, normally the link created with @code{org-store-link}}
%i @r{initial content, the region when remember is called with C-u.}
@r{The entire text will be indented like @code{%i} itself.}
+%^g @r{prompt for tags, with completion on tags in target file.}
+%^G @r{prompt for tags, with completion all tags in all agenda files.}
%:keyword @r{specific information for certain link types, see below}
@end example
@@ -2398,8 +2651,7 @@ calendar | %:date"
@end example
@noindent
-If you would like to have the cursor in a specific position after the
-template has been expanded:
+To place the cursor after template expansion use:
@example
%? @r{After completing the template, position cursor here.}
@@ -2408,7 +2660,7 @@ template has been expanded:
@noindent
If you change you mind about which template to use, call
@code{org-remember} in the remember buffer. You may then select a new
-template that will be filled with the previoous context information.
+template that will be filled with the previous context information.
@node Storing notes, , Remember templates, Remember
@subsection Storing notes
@@ -2419,20 +2671,27 @@ target file - if you press @key{RET}, the value specified for the
template is used. Then the command offers the headings tree of the
selected file, with the cursor position at the default headline (if you
had specified one in the template). You can either immediately press
-@key{RET} to get the note placed there. Or you can use vertical cursor
-motion (@key{up} and @key{down}) and visibility cycling (@key{TAB}) to
-find a better place. Pressing @key{RET} or @key{left} or @key{right}
+@key{RET} to get the note placed there. Or you can use the following
+keys to find a better location:
+@example
+@key{TAB} @r{Cycle visibility.}
+@key{down} / @key{up} @r{Next/previous visible headline.}
+n / p @r{Next/previous visible headline.}
+f / b @r{Next/previous headline same level.}
+u @r{One level up.}
+@c 0-9 @r{Digit argument.}
+@end example
+@noindent
+Pressing @key{RET} or @key{left} or @key{right}
then leads to the following result.
-@multitable @columnfractions 0.2 0.1 0.7
+@multitable @columnfractions 0.2 0.15 0.65
@item @b{Cursor position} @tab @b{Key} @tab @b{Note gets inserted}
@item buffer-start @tab @key{RET} @tab as level 2 heading at end of file
@item on headline @tab @key{RET} @tab as sublevel of the heading at cursor
-@item @tab @key{left} @tab as same level, before current heading
-@item @tab @key{right} @tab as same level, after current heading
+@item @tab @key{left}/@key{right} @tab as same level, before/after current heading
@item not on headline @tab @key{RET}
@tab at cursor position, level taken from context.
- Or use prefix arg to specify level manually.
@end multitable
So a fast way to store the note to its default location is to press
@@ -2448,7 +2707,7 @@ non-nil, the entire text is also indented so that it starts in the
same column as the headline (after the asterisks).
-@node TODO items, Timestamps, Hyperlinks, Top
+@node TODO items, Tags, Hyperlinks, Top
@chapter TODO items
@cindex TODO items
@@ -2467,7 +2726,7 @@ things you have to do.
* TODO basics:: Marking and displaying TODO entries
* TODO extensions:: Workflow and assignments
* Priorities:: Some things are more important than others
-* Breaking down tasks:: Splitting a task into managable pieces
+* Breaking down tasks:: Splitting a task into manageable pieces
* Checkboxes:: Tick-off lists
@end menu
@@ -2488,7 +2747,7 @@ The most important commands to work with TODO entries are:
@kindex C-c C-t
@cindex cycling, of TODO states
@item C-c C-t
-Rotate the TODO state of the current item between
+Rotate the TODO state of the current item among
@example
,-> (unmarked) -> TODO -> DONE --.
@@ -2502,15 +2761,27 @@ agenda buffers with the @kbd{t} command key (@pxref{Agenda commands}).
@item S-@key{right}
@itemx S-@key{left}
Select the following/preceding TODO state, similar to cycling. Mostly
-useful if more than two TODO states are possible (@pxref{TODO extensions}).
+useful if more than two TODO states are possible (@pxref{TODO
+extensions}).
+@kindex C-c C-c
+@item C-c C-c
+Use the fast tag interface to quickly and directly select a specific
+TODO state. For this you need to assign keys to TODO state, like this:
+@example
+#+SEQ_TODO: TODO(t) STARTED(s) WAITING(w) | DONE(d)
+@end example
+@noindent See @ref{Per file keywords} and @ref{Setting tags} for more
+information.
@kindex C-c C-v
@cindex sparse tree, for TODO
@item C-c C-v
View TODO items in a @emph{sparse tree} (@pxref{Sparse trees}). Folds
the entire buffer, but shows all TODO items and the headings hierarchy
-above them. With prefix arg, show also the DONE entries. With
-numerical prefix N, show the tree for the Nth keyword in the variable
-@code{org-todo-keywords}.
+above them. With prefix arg, search for a specific TODO. You will be
+prompted for the keyword, and you can also give a list of keywords like
+@code{kwd1|kwd2|...}. With numerical prefix N, show the tree for the
+Nth keyword in the variable @code{org-todo-keywords}. With two prefix
+args, find all TODO and DONE entries.
@kindex C-c a t
@item C-c a t
Show the global TODO list. This collects the TODO items from all
@@ -2518,21 +2789,19 @@ agenda files (@pxref{Agenda views}) into a single buffer. The buffer is in
@code{agenda-mode}, so there are commands to examine and manipulate
the TODO entries directly from that buffer (@pxref{Agenda commands}).
@xref{Global TODO list}, for more information.
-@c @item @code{org-agenda-include-all-todo}
-@c If you would like to have all your TODO items listed as part of your
-@c agenda, customize the variable @code{org-agenda-include-all-todo}.
+@kindex S-M-@key{RET}
+@item S-M-@key{RET}
+Insert a new TODO entry below the current one.
@end table
-
@node TODO extensions, Priorities, TODO basics, TODO items
@section Extended use of TODO keywords
@cindex extended TODO keywords
The default implementation of TODO entries is just two states: TODO and
-DONE. You can, however, use the TODO feature for more complicated
-things by configuring the variables @code{org-todo-keywords} and
-@code{org-todo-interpretation}. Using special setup, you can even use
-TODO keywords in different ways in different org files.
+DONE. You can use the TODO feature for more complicated things by
+configuring the variable @code{org-todo-keywords}. With special setup,
+the TODO keyword system can work differently in different files.
Note that @i{tags} are another way to classify headlines in general and
TODO items in particular (@pxref{Tags}).
@@ -2540,6 +2809,7 @@ TODO items in particular (@pxref{Tags}).
@menu
* Workflow states:: From TODO to DONE in steps
* TODO types:: I do this, Fred the rest
+* Multiple sets in one file:: Mixing it all, and still finding your way
* Per file keywords:: Different files, different requirements
@end menu
@@ -2548,77 +2818,132 @@ TODO items in particular (@pxref{Tags}).
@cindex TODO workflow
@cindex workflow states as TODO keywords
-You can use TODO keywords to indicate different states in the process
-of working on an item, for example:
+You can use TODO keywords to indicate different @emph{sequential} states
+in the process of working on an item, for example@footnote{Changing
+this variable only becomes effective after restarting Org-mode in a
+buffer.}:
@lisp
-(setq org-todo-keywords '("TODO" "FEEDBACK" "VERIFY" "DONE")
- org-todo-interpretation 'sequence)
+(setq org-todo-keywords
+ '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED")))
@end lisp
+The vertical bar separates the TODO keywords (states that @emph{need
+action}) from the DONE states (which need @emph{no further action}. If
+you don't provide the separator bar, the last state is used as the DONE
+state.
@cindex completion, of TODO keywords
-Changing these variables only becomes effective in a new Emacs session.
-With this setup, the command @kbd{C-c C-t} will cycle an entry from
-TODO to FEEDBACK, then to VERIFY, and finally to DONE. You may also
-use a prefix argument to quickly select a specific state. For example
-@kbd{C-3 C-c C-t} will change the state immediately to VERIFY.
+With this setup, the command @kbd{C-c C-t} will cycle an entry from TODO
+to FEEDBACK, then to VERIFY, and finally to DONE and DELEGATED. You may
+also use a prefix argument to quickly select a specific state. For
+example @kbd{C-3 C-c C-t} will change the state immediately to VERIFY.
If you define many keywords, you can use in-buffer completion (see
-@ref{Completion}) to insert these words into the buffer. Changing a todo
-state can be logged with a timestamp, see @ref{Tracking TODO state
+@ref{Completion}) to insert these words into the buffer. Changing a
+todo state can be logged with a timestamp, see @ref{Tracking TODO state
changes} for more information.
-@node TODO types, Per file keywords, Workflow states, TODO extensions
+@node TODO types, Multiple sets in one file, Workflow states, TODO extensions
@subsection TODO keywords as types
@cindex TODO types
@cindex names as TODO keywords
@cindex types as TODO keywords
The second possibility is to use TODO keywords to indicate different
-types of action items. For example, you might want to indicate that
-items are for ``work'' or ``home''. If you are into David Allen's
-@emph{Getting Things DONE}, you might want to use todo types
-@samp{NEXTACTION}, @samp{WAITING}, @samp{MAYBE}. Or, when you work
-with several people on a single project, you might want to assign
-action items directly to persons, by using their names as TODO
-keywords. This would be set up like this:
+@emph{types} of action items. For example, you might want to indicate
+that items are for ``work'' or ``home''. Or, when you work with several
+people on a single project, you might want to assign action items
+directly to persons, by using their names as TODO keywords. This would
+be set up like this:
+
+@lisp
+(setq org-todo-keywords '((type "Fred" "Sara" "Lucy" "|" "DONE")))
+@end lisp
+
+In this case, different keywords do not indicate a sequence, but rather
+different types. So the normal work flow would be to assign a task to a
+person, and later to mark it DONE. Org-mode supports this style by
+adapting the workings of the command @kbd{C-c C-t}@footnote{This is also
+true for the @kbd{t} command in the timeline and agenda buffers.}. When
+used several times in succession, it will still cycle through all names,
+in order to first select the right type for a task. But when you return
+to the item after some time and execute @kbd{C-c C-t} again, it will
+switch from any name directly to DONE. Use prefix arguments or
+completion to quickly select a specific name. You can also review the
+items of a specific TODO type in a sparse tree by using a numeric prefix
+to @kbd{C-c C-v}. For example, to see all things Lucy has to do, you
+would use @kbd{C-3 C-c C-v}. To collect Lucy's items from all agenda
+files into a single buffer, you would use the prefix arg as well when
+creating the global todo list: @kbd{C-3 C-c t}.
+
+@node Multiple sets in one file, Per file keywords, TODO types, TODO extensions
+@subsection Multiple keyword sets in one file
+@cindex todo keyword sets
+
+Sometimes you may want to use different sets of TODO keywords in
+parallel. For example, you may want to have the basic
+@code{TODO}/@code{DONE}, but also a workflow for bug fixing, and a
+separate state indicating that an item has been canceled (so it is not
+DONE, but also does not require action). Your setup would then look
+like this:
@lisp
-(setq org-todo-keywords '("Fred" "Sara" "Lucy" "Mike" "DONE")
- org-todo-interpretation 'type)
+(setq org-todo-keywords
+ '((sequence "TODO" "|" "DONE")
+ (sequence "REPORT" "BUG" "KNOWNCAUSE" "|" "FIXED")
+ (sequence "|" "CANCELED")))
@end lisp
-In this case, different keywords do not indicate a sequence, but
-rather different types. So it is normally not useful to change from
-one type to another. Therefore, in this case the behavior of the
-command @kbd{C-c C-t} is changed slightly@footnote{This is also true
-for the @kbd{t} command in the timeline and agenda buffers.}. When
-used several times in succession, it will still cycle through all
-names. But when you return to the item after some time and execute
-@kbd{C-c C-t} again, it will switch from each name directly to DONE.
-Use prefix arguments or completion to quickly select a specific name.
-You can also review the items of a specific TODO type in a sparse tree
-by using a numeric prefix to @kbd{C-c C-v}. For example, to see all
-things Lucy has to do, you would use @kbd{C-3 C-c C-v}. To collect
-Lucy's items from all agenda files into a single buffer, you
-would use the prefix arg as well when creating the global todo list:
-@kbd{C-3 C-c t}.
-
-@node Per file keywords, , TODO types, TODO extensions
-@subsection Setting up TODO keywords for individual files
+The keywords should all be different, this helps Org-mode to keep track
+of which subsequence should be used for a given entry. In this setup,
+@kbd{C-c C-t} only operates within a subsequence, so it switches from
+@code{DONE} to (nothing) to @code{TODO}, and from @code{FIXED} to
+(nothing) to @code{REPORT}. Therefore you need a mechanism to initially
+select the correct sequence. Besides the obvious ways like typing a
+keyword or using completion, you may also apply the following commands:
+
+@table @kbd
+@kindex C-S-@key{right}
+@kindex C-S-@key{left}
+@item C-S-@key{right}
+@itemx C-S-@key{left}
+These keys jump from one TODO subset to the next. In the above example,
+@kbd{C-S-@key{right}} would jump from @code{TODO} or @code{DONE} to
+@code{REPORT}, and any of the words in the second row to @code{CANCELED}.
+@kindex S-@key{right}
+@kindex S-@key{left}
+@item S-@key{right}
+@itemx S-@key{left}
+@kbd{S-@key{<left>}} and @kbd{S-@key{<right>}} and walk through
+@emph{all} keywords from all sets, so for example @kbd{S-@key{<right>}}
+would switch from @code{DONE} to @code{REPORT} in the example above.
+@end table
+
+@node Per file keywords, , Multiple sets in one file, TODO extensions
+@subsection Setting up keywords for individual files
@cindex keyword options
@cindex per file keywords
-It can be very useful to use different aspects of the TODO mechanism
-in different files, which is not possible with the global settings
-described above. For file-local settings, you need to add special
-lines to the file which set the keywords and interpretation for that
-file only. For example, to set one of the two examples discussed
-above, you need one of the following lines, starting in column zero
-anywhere in the file:
+It can be very useful to use different aspects of the TODO mechanism in
+different files. For file-local settings, you need to add special lines
+to the file which set the keywords and interpretation for that file
+only. For example, to set one of the two examples discussed above, you
+need one of the following lines, starting in column zero anywhere in the
+file:
@example
-#+SEQ_TODO: TODO FEEDBACK VERIFY DONE
-#+TYP_TODO: Fred Sara Lucy Mike DONE
+#+SEQ_TODO: TODO FEEDBACK VERIFY | DONE CANCELED
+@end example
+or
+@example
+#+TYP_TODO: Fred Sara Lucy Mike | DONE
+@end example
+
+A setup for using several sets in parallel would be:
+
+@example
+#+SEQ_TODO: TODO | DONE
+#+SEQ_TODO: REPORT BUG KNOWNCAUSE | FIXED
+#+SEQ_TODO: | CANCELED
@end example
@cindex completion, of option keywords
@@ -2627,24 +2952,14 @@ anywhere in the file:
@samp{#+} into the buffer and then use @kbd{M-@key{TAB}} completion.
@cindex DONE, final TODO keyword
-Remember that the last keyword must always mean that the item is DONE
-(although you may use a different word). Also note that in each file,
-only one of the two aspects of TODO keywords can be used. After
-changing one of these lines, use @kbd{C-c C-c} with the cursor still
-in the line to make the changes known to Org-mode@footnote{Org-mode
-parses these lines only when Org-mode is activated after visiting a
-file. @kbd{C-c C-c} with the cursor in a line starting with @samp{#+}
-is simply restarting Org-mode for the current buffer.}.
-
-If you want to use very many keywords, for example when working with a
-large group of people, you may split the names over several lines:
-
-@example
-#+TYP_TODO: Fred Sara Lucy Mike
-#+TYP_TODO: Luis George Jules Jessica
-#+TYP_TODO: Kim Arnold Peter
-#+TYP_TODO: DONE
-@end example
+Remember that the keywords after the vertical bar (or the last keyword
+if no bar is there) must always mean that the item is DONE (although you
+may use a different word). After changing one of these lines, use
+@kbd{C-c C-c} with the cursor still in the line to make the changes
+known to Org-mode@footnote{Org-mode parses these lines only when
+Org-mode is activated after visiting a file. @kbd{C-c C-c} with the
+cursor in a line starting with @samp{#+} is simply restarting Org-mode
+for the current buffer.}.
@node Priorities, Breaking down tasks, TODO extensions, TODO items
@section Priorities
@@ -2673,7 +2988,7 @@ priority character @samp{A}, @samp{B} or @samp{C}. When you press
@key{SPC} instead, the priority cookie is removed from the headline.
The priorities can also be changed ``remotely'' from the timeline and
agenda buffer with the @kbd{,} command (@pxref{Agenda commands}).
-
+@c
@kindex S-@key{up}
@kindex S-@key{down}
@item S-@key{up}
@@ -2683,11 +2998,22 @@ are also used to modify time stamps (@pxref{Creating timestamps}).
Furthermore, these keys are also used by CUA-mode (@pxref{Conflicts}).
@end table
+You can change the range of allowed priorities by setting the variables
+@code{org-highest-priority}, @code{org-lowest-priority}, and
+@code{org-default-priority}. For an individual buffer, you may set
+these values (highest, lowest, default) like this (please make sure that
+the highest priority is earlier in the alphabet than the lowest
+priority):
+
+@example
+#+PRIORITIES: A C B
+@end example
+
@node Breaking down tasks, Checkboxes, Priorities, TODO items
@section Breaking tasks down into subtasks
@cindex tasks, breaking down
-It is often advisable to break down large tasks into smaller, managable
+It is often advisable to break down large tasks into smaller, manageable
subtasks. You can do this by creating an outline tree below a TODO
item, with detailed subtasks on the tree@footnote{To keep subtasks out
of the global TODO list, see the
@@ -2738,7 +3064,8 @@ percentage of checkboxes checked (in the above example, this would be
@table @kbd
@kindex C-c C-c
@item C-c C-c
-Toggle checkbox at point.
+Toggle checkbox at point. With prefix argument, set it to @samp{[-]},
+which is considered to be an intermediate state.
@kindex C-c C-x C-b
@item C-c C-x C-b
Toggle checkbox at point.
@@ -2769,7 +3096,582 @@ delete boxes or add/change them by hand, use this command to get things
back into synch. Or simply toggle any checkbox twice with @kbd{C-c C-c}.
@end table
-@node Timestamps, Tags, TODO items, Top
+
+@node Tags, Properties and columns, TODO items, Top
+@chapter Tags
+@cindex tags
+@cindex headline tagging
+@cindex matching, tags
+@cindex sparse tree, tag based
+
+If you wish to implement a system of labels and contexts for
+cross-correlating information, an excellent way is to assign @i{tags} to
+headlines. Org-mode has extensive support for using tags.
+
+Every headline can contain a list of tags, at the end of the headline.
+Tags are normal words containing letters, numbers, @samp{_}, and
+@samp{@@}. Tags must be preceded and followed by a single colon; like
+@samp{:WORK:}. Several tags can be specified like @samp{:WORK:URGENT:}.
+
+@menu
+* Tag inheritance:: Tags use the tree structure of the outline
+* Setting tags:: How to assign tags to a headline
+* Tag searches:: Searching for combinations of tags
+@end menu
+
+@node Tag inheritance, Setting tags, Tags, Tags
+@section Tag inheritance
+@cindex inheritance, of tags
+@cindex sublevels, inclusion into tags match
+
+@i{Tags} make use of the hierarchical structure of outline trees. If a
+heading has a certain tag, all subheadings will inherit the tag as
+well. For example, in the list
+
+@example
+* Meeting with the French group :WORK:
+** Summary by Frank :BOSS:NOTES:
+*** TODO Prepare slides for him :ACTION:
+@end example
+
+@noindent
+the final heading will have the tags @samp{:WORK:}, @samp{:BOSS:},
+@samp{:NOTES:}, and @samp{:ACTION:}. When executing tag searches and
+Org-mode finds that a certain headline matches the search criterion, it
+will not check any sublevel headline, assuming that these likely also
+match, and that the list of matches can become very long. This may
+not be what you want, however, and you can influence inheritance and
+searching using the variables @code{org-use-tag-inheritance} and
+@code{org-tags-match-list-sublevels}.
+
+@node Setting tags, Tag searches, Tag inheritance, Tags
+@section Setting tags
+@cindex setting tags
+@cindex tags, setting
+
+@kindex M-@key{TAB}
+Tags can simply be typed into the buffer at the end of a headline.
+After a colon, @kbd{M-@key{TAB}} offers completion on tags. There is
+also a special command for inserting tags:
+
+@table @kbd
+@kindex C-c C-c
+@item C-c C-c
+@cindex completion, of tags
+Enter new tags for the current headline. Org-mode will either offer
+completion or a special single-key interface for setting tags, see
+below. After pressing @key{RET}, the tags will be inserted and aligned
+to @code{org-tags-column}. When called with a @kbd{C-u} prefix, all
+tags in the current buffer will be aligned to that column, just to make
+things look nice. TAGS are automatically realigned after promotion,
+demotion, and TODO state changes (@pxref{TODO basics}).
+@end table
+
+Org will support tag insertion based on a @emph{list of tags}. By
+default this list is constructed dynamically, containing all tags
+currently used in the buffer. You may also globally specify a hard list
+of tags with the variable @code{org-tag-alist}. Finally you can set
+the default tags for a given file with lines like
+
+@example
+#+TAGS: @@WORK @@HOME @@TENNISCLUB
+#+TAGS: Laptop Car PC Sailboat
+@end example
+
+If you have globally defined your preferred set of tags using the
+variable @code{org-tag-alist}, but would like to use a dynamic tag list
+in a specific file: Just add an empty TAGS option line to that file:
+
+@example
+#+TAGS:
+@end example
+
+The default support method for entering tags is minibuffer completion.
+However, Org-mode also implements a much better method: @emph{fast tag
+selection}. This method allows to select and deselect tags with a
+single key per tag. To function efficiently, you should assign unique
+keys to most tags. This can be done globally with
+
+@lisp
+(setq org-tag-alist '(("@@WORK" . ?w) ("@@HOME" . ?h) ("Laptop" . ?l)))
+@end lisp
+
+@noindent or on a per-file basis with
+
+@example
+#+TAGS: @@WORK(w) @@HOME(h) @@TENNISCLUB(t) Laptop(l) PC(p)
+@end example
+
+@noindent
+You can also group together tags that are mutually exclusive. With
+curly braces@footnote{In @code{org-mode-alist} use
+@code{'(:startgroup)} and @code{'(:endgroup)}, respectively. Several
+groups are allowed.}
+
+@example
+#+TAGS: @{ @@WORK(w) @@HOME(h) @@TENNISCLUB(t) @} Laptop(l) PC(p)
+@end example
+
+@noindent you indicate that at most one of @samp{@@WORK}, @samp{@@HOME},
+and @samp{@@TENNISCLUB} should be selected.
+
+@noindent Don't forget to press @kbd{C-c C-c} with the cursor in one of
+these lines to activate any changes.
+
+If at least one tag has a selection key, pressing @kbd{C-c C-c} will
+automatically present you with a special interface, listing inherited
+tags, the tags of the current headline, and a list of all legal tags
+with corresponding keys@footnote{Keys will automatically be assigned to
+tags which have no configured keys.}. In this interface, you can use
+the following keys:
+
+@table @kbd
+@item a-z...
+Pressing keys assigned to tags will add or remove them from the list of
+tags in the current line. Selecting a tag in a group of mutually
+exclusive tags will turn off any other tags from that group.
+@kindex @key{TAB}
+@item @key{TAB}
+Enter a tag in the minibuffer, even if the tag is not in the predefined
+list. You will be able to complete on all tags present in the buffer.
+@kindex @key{SPC}
+@item @key{SPC}
+Clear all tags for this line.
+@kindex @key{RET}
+@item @key{RET}
+Accept the modified set.
+@item C-g
+Abort without installing changes.
+@item q
+If @kbd{q} is not assigned to a tag, it aborts like @kbd{C-g}.
+@item !
+Turn off groups of mutually exclusive tags. Use this to (as an
+exception) assign several tags from such a group.
+@item C-c
+Toggle auto-exit after the next change (see below).
+If you are using expert mode, the first @kbd{C-c} will display the
+selection window.
+@end table
+
+@noindent
+This method lets you assign tags to a headline with very few keys. With
+the above setup, you could clear the current tags and set @samp{@@HOME},
+@samp{Laptop} and @samp{PC} tags with just the following keys: @kbd{C-c
+C-c @key{SPC} h l p @key{RET}}. Switching from @samp{@@HOME} to
+@samp{@@WORK} would be done with @kbd{C-c C-c w @key{RET}} or
+alternatively with @kbd{C-c C-c C-c w}. Adding the non-predefined tag
+@samp{Sarah} could be done with @kbd{C-c C-c @key{TAB} S a r a h
+@key{RET} @key{RET}}.
+
+If you find that most of the time, you need only a single keypress to
+modify your list of tags, set the variable
+@code{org-fast-tag-selection-single-key}. Then you no longer have to
+press @key{RET} to exit fast tag selection - it will immediately exit
+after the first change. If you then occasionally need more keys, press
+@kbd{C-c} to turn off auto-exit for the current tag selection process
+(in effect: start selection with @kbd{C-c C-c C-c} instead of @kbd{C-c
+C-c}). If you set the variable to the value @code{expert}, the special
+window is not even shown for single-key tag selection, it comes up only
+when you press an extra @kbd{C-c}.
+
+@node Tag searches, , Setting tags, Tags
+@section Tag searches
+@cindex tag searches
+@cindex searching for tags
+
+Once a tags system has been set up, it can be used to collect related
+information into special lists.
+
+@table @kbd
+@kindex C-c \
+@item C-c \
+Create a sparse tree with all headlines matching a tags search. With a
+@kbd{C-u} prefix argument, ignore headlines that are not a TODO line.
+@kindex C-c a m
+@item C-c a m
+Create a global list of tag matches from all agenda files.
+@xref{Matching tags and properties}.
+@kindex C-c a M
+@item C-c a M
+Create a global list of tag matches from all agenda files, but check
+only TODO items and force checking subitems (see variable
+@code{org-tags-match-list-sublevels}).
+@end table
+
+@cindex Boolean logic, for tag searches
+A @i{tags} search string can use Boolean operators @samp{&} for AND and
+@samp{|} for OR. @samp{&} binds more strongly than @samp{|}.
+Parenthesis are currently not implemented. A tag may also be preceded
+by @samp{-}, to select against it, and @samp{+} is syntactic sugar for
+positive selection. The AND operator @samp{&} is optional when @samp{+}
+or @samp{-} is present. Examples:
+
+@table @samp
+@item +WORK-BOSS
+Select headlines tagged @samp{:WORK:}, but discard those also tagged
+@samp{:BOSS:}.
+@item WORK|LAPTOP
+Selects lines tagged @samp{:WORK:} or @samp{:LAPTOP:}.
+@item WORK|LAPTOP&NIGHT
+Like before, but require the @samp{:LAPTOP:} lines to be tagged also
+@samp{NIGHT}.
+@end table
+
+@cindex TODO keyword matching, with tags search
+If you are using multi-state TODO keywords (@pxref{TODO extensions}), it
+can be useful to also match on the TODO keyword. This can be done by
+adding a condition after a slash to a tags match. The syntax is similar
+to the tag matches, but should be applied with consideration: For
+example, a positive selection on several TODO keywords can not
+meaningfully be combined with boolean AND. However, @emph{negative
+selection} combined with AND can be meaningful. To make sure that only
+lines are checked that actually have any TODO keyword, use @kbd{C-c a
+M}, or equivalently start the todo part after the slash with @samp{!}.
+Examples:
+
+@table @samp
+@item WORK/WAITING
+Select @samp{:WORK:}-tagged TODO lines with the specific TODO
+keyword @samp{WAITING}.
+@item WORK/!-WAITING-NEXT
+Select @samp{:WORK:}-tagged TODO lines that are neither @samp{WAITING}
+nor @samp{NEXT}
+@item WORK/+WAITING|+NEXT
+Select @samp{:WORK:}-tagged TODO lines that are either @samp{WAITING} or
+@samp{NEXT}.
+@end table
+
+@cindex regular expressions, with tags search
+Any element of the tag/todo match can be a regular expression - in this
+case it must be enclosed in curly braces. For example,
+@samp{WORK+@{^BOSS.*@}} matches headlines that contain the tag
+@samp{WORK} and any tag @i{starting} with @samp{BOSS}.
+
+@cindex level, require for tags match
+You can also require a headline to be of a certain level, by writing
+instead of any TAG an expression like @samp{LEVEL=3}. For example, a
+search @samp{+LEVEL=3+BOSS/-DONE} lists all level three headlines that
+have the tag BOSS and are @emph{not} marked with the todo keyword DONE.
+
+@node Properties and columns, Timestamps, Tags, Top
+@chapter Properties and Columns
+@cindex properties
+
+Properties are a set of key-value pairs associated with an entry. There
+are two main applications for properties in Org-mode. First, properties
+are like tags, but with a value. For example, in a file where you
+document bugs and plan releases of a piece of software, instead of using
+tags like @code{:release_1:}, @code{:release_2:}, it can be more
+efficient to use a property @code{RELEASE} with a value @code{1.0} or
+@code{2.0}. Second, you can use properties to implement (very basic)
+database capabilities in an Org-mode buffer, for example to create a
+list of Music CD's you own. You can edit and view properties
+conveniently in column view (@pxref{Column view}).
+
+@menu
+* Property syntax:: How properties are spelled out
+* Special properties:: Access to other Org-mode features
+* Property searches:: Matching property values
+* Column view:: Tabular viewing and editing
+* Property API:: Properties for Lisp programmers
+@end menu
+
+@node Property syntax, Special properties, Properties and columns, Properties and columns
+@section Property Syntax
+@cindex property syntax
+@cindex drawer, for properties
+
+Properties are key-value pairs. They need to be inserted into a special
+drawer (@pxref{Drawers}) with the name @code{PROPERTIES}. Each property
+is specified on a single line, with the key (surrounded by colons)
+first, and the value after it. Here is an example:
+
+@example
+* CD collection
+** Classic
+*** Goldberg Variations
+ :PROPERTIES:
+ :Title: Goldberg Variations
+ :Composer: J.S. Bach
+ :Artist: Glen Gould
+ :Publisher: Deutsche Grammphon
+ :NDisks: 1
+ :END:
+@end example
+
+You may define the allowed values for a particular property @samp{XYZ}
+by setting a property @samp{XYZ_ALL}. This special property is
+@emph{inherited}, so if you set it in a level 1 entry, it will apply to
+the entire tree. When allowed values are defined, setting the
+corresponding property becomes easier and is less prone to typing
+errors. For the example with the CD collection, we can predefine
+publishers and the number of disks in a box like this:
+
+@example
+* CD collection
+ :PROPERTIES:
+ :NDisks_ALL: 1 2 3 4
+ :Publisher_ALL: "Deutsche Grammophon" Phillips EMI
+ :END:
+@end example
+
+If you want to set properties that can be inherited by any entry in a
+file, use a line like
+
+@example
+#+PROPERTY: NDisks_ALL 1 2 3 4
+@end example
+
+Property values set with the global variable
+@code{org-global-properties} can be inherited by all entries in all
+Org-mode files.
+
+@noindent
+The following commands help to work with properties:
+
+@table @kbd
+@kindex M-@key{TAB}
+@item M-@key{TAB}
+After an initial colon in a line, complete property keys. All keys used
+in the current file will be offered as possible completions.
+@item M-x org-insert-property-drawer
+Insert a property drawer into the current entry. The drawer will be
+inserted early in the entry, but after the lines with planning
+information like deadlines.
+@kindex C-c C-c
+@item C-c C-c
+With the cursor in a property drawer, this executes property commands.
+@item C-c C-c s
+Set a property in the current entry. Both the property and the value
+can be inserted using completion.
+@kindex S-@key{right}
+@kindex S-@key{left}
+@item S-@key{left}/@key{right}
+Switch property at point to the next/previous allowed value.
+@item C-c C-c d
+Remove a property from the current entry.
+@item C-c C-c D
+Globally remove a property, from all entries in the current file.
+@end table
+
+@node Special properties, Property searches, Property syntax, Properties and columns
+@section Special Properties
+@cindex properties, special
+
+Special properties provide alternative access method to Org-mode
+features discussed in the previous chapters, like the TODO state or the
+priority of an entry. This interface exists so that you can include
+these states into columns view (@pxref{Column view}). The following
+property names are special and should not be used as keys in the
+properties drawer:
+
+@example
+TODO @r{The TODO keyword of the entry.}
+TAGS @r{The tags defined directly in the headline.}
+ALLTAGS @r{All tags, including inherited ones.}
+PRIORITY @r{The priority of the entry, a string with a single letter.}
+DEADLINE @r{The deadline time string, without the angular brackets.}
+SCHEDULED @r{The scheduling time stamp, without the angular brackets.}
+@end example
+
+@node Property searches, Column view, Special properties, Properties and columns
+@section Property searches
+@cindex properties, searching
+
+To create sparse trees and special lists with selection based on
+properties, the same commands are used as for tag searches (@pxref{Tag
+searches}), and the same logic applies. For example, a search string
+
+@example
++WORK-BOSS+PRIORITY="A"+coffee="unlimited"+with=@{Sarah\|Denny@}
+@end example
+
+@noindent
+finds entries tagged @samp{:WORK:} but not @samp{:BOSS:}, which
+also have a priority value @samp{A}, a @samp{:coffee:} property with the
+value @samp{unlimited}, and a @samp{:with:} property that is matched by
+the regular expression @samp{Sarah\|Denny}.
+
+@node Column view, Property API, Property searches, Properties and columns
+@section Column View
+
+A great way to view and edit properties in an outline tree is
+@emph{column view}. In column view, each outline item is turned into a
+table row. Columns in this table provide access to properties of the
+entries. Org-mode implements columns by overlaying a tabular structure
+over the headline of each item. While the headlines have been turned
+into a table row, you can still change the visibility of the outline
+tree. For example, you get a compact table by switching to CONTENTS
+view (@kbd{S-@key{TAB} S-@key{TAB}}, or simply @kbd{c} while column view
+is active), but you can still open, read, and edit the entry below each
+headline. Or, you can switch to column view after executing a sparse
+tree command and in this way get a table only for the selected items.
+Column view also works in agenda buffers (@pxref{Agenda views}) where
+queries have collected selected items, possibly from a number of files.
+
+@menu
+* Defining columns:: The COLUMNS format property
+* Using column view:: How to create and use column view
+@end menu
+
+@node Defining columns, Using column view, Column view, Column view
+@subsection Defining Columns
+@cindex column view, for properties
+@cindex properties, column view
+
+Setting up a column view first requires defining the columns. This is
+done by defining a column format line.
+
+@menu
+* Scope of column definitions:: Where defined, where valid?
+* Column attributes:: Appearance and content of a column
+@end menu
+
+@node Scope of column definitions, Column attributes, Defining columns, Defining columns
+@subsubsection Scope of column definitions
+
+To define a column format for an entire file, use a line like
+
+@example
+#+COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
+@end example
+
+To specify a format that only applies to a specific tree, add a COLUMNS
+property to the top node of that tree, for example
+@example
+** Top node for columns view
+ :PROPERTIES:
+ :COLUMNS: %25ITEM %TAGS %PRIORITY %TODO
+ :END:
+@end example
+
+If a @code{COLUMNS} property is present in an entry, it defines columns
+for the entry itself, and for the entire subtree below it. Since the
+column definition is part of the hierarchical structure of the document,
+you can define columns on level 1 that are general enough for all
+sublevels, and more specific columns further down, when you edit a
+deeper part of the tree.
+
+@node Column attributes, , Scope of column definitions, Defining columns
+@subsubsection Column attributes
+A column definition sets the attributes of a column. The general
+definition looks like this:
+
+@example
+ %[width]property[(title)][@{summary-type@}]
+@end example
+
+@noindent
+Except for the percent sign and the property name, all items are
+optional. The individual parts have the following meaning:
+
+@example
+width @r{An integer specifying the width of the column in characters.}
+ @r{If omitted, the width will be determined automatically.}
+property @r{The property that should be edited in this column.}
+(title) @r{The header text for the column. If omitted, the}
+ @r{property name is used.}
+@{summary-type@} @r{The summary type. If specified, the column values for}
+ @r{parent nodes are computed from the children.}
+ @r{Supported summary types are:}
+ @{+@} @r{Sum numbers in this column.}
+ @{:@} @r{Sum times, HH:MM:SS, plain numbers are hours.}
+ @{X@} @r{Checkbox status, [X] if all children are [X].}
+@end example
+
+@noindent
+Here is an example for a complete columns definition, along with allowed
+values.
+
+@example
+:COLUMNS: %20ITEM %9Approved(Approved?)@{X@} %Owner %11Status %10Time_Spent@{:@}
+:Owner_ALL: Tammy Mark Karl Lisa Don
+:Status_ALL: "In progress" "Not started yet" "Finished" ""
+:Approved_ALL: "[ ]" "[X]"
+@end example
+
+The first column, @samp{%25ITEM}, means the first 25 characters of the
+item itself, i.e. of the headline. You probably always should start the
+column definition with the ITEM specifier. The other specifiers create
+columns @samp{Owner} with a list of names as allowed values, for
+@samp{Status} with four different possible values, and for a checkbox
+field @samp{Approved}. When no width is given after the @samp{%}
+character, the column will be exactly as wide as it needs to be in order
+to fully display all values. The @samp{Approved} column does have a
+modified title (@samp{Approved?}, with a question mark). Summaries will
+be created for the @samp{Time_Spent} column by adding time duration
+expressions like HH:MM, and for the @samp{Approved} column, by providing
+an @samp{[X]} status if all children have been checked.
+
+@node Using column view, , Defining columns, Column view
+@subsection Using Column View
+
+@table @kbd
+@tsubheading{Turning column view on and off}
+@kindex C-c C-x C-c
+@item C-c C-x C-c
+Create the column view for the local environment. This command searches
+the hierarchy, up from point, for a @code{COLUMNS} property that defines
+a format. When one is found, the column view table is established for
+the entire tree, starting from the entry that contains the @code{COLUMNS}
+property. If none is found, the format is taken from the @code{#+COLUMNS}
+line or from the variable @code{org-columns-default-format}, and column
+view is established for the current entry and its subtree.
+@kindex q
+@item q
+Exit column view.
+@tsubheading{Editing values}
+@item @key{left} @key{right} @key{up} @key{down}
+Move through the column view from field to field.
+@kindex S-@key{left}
+@kindex S-@key{right}
+@item S-@key{left}/@key{right}
+Switch to the next/previous allowed value of the field. For this, you
+have to have specified allowed values for a property.
+@kindex n
+@kindex p
+@itemx n / p
+Same as @kbd{S-@key{left}/@key{right}}
+@kindex e
+@item e
+Edit the property at point. For the special properties, this will
+invoke the same interface that you normally use to change that
+property. For example, when editing a TAGS property, the tag completion
+or fast selection interface will pop up.
+@kindex v
+@item v
+View the full value of this property. This is useful if the width of
+the column is smaller than that of the value.
+@kindex a
+@item a
+Edit the list of allowed values for this property. If the list is found
+in the hierarchy, the modified values is stored there. If no list is
+found, the new value is stored in the first entry that is part of the
+current column view.
+@tsubheading{Modifying the table structure}
+@kindex <
+@kindex >
+@item < / >
+Make the column narrower/wider by one character.
+@kindex S-M-@key{right}
+@item S-M-@key{right}
+Insert a new column, to the right of the current column.
+@kindex S-M-@key{left}
+@item S-M-@key{left}
+Delete the current column.
+@end table
+
+@node Property API, , Column view, Properties and columns
+@section The Property API
+@cindex properties, API
+@cindex API, for properties
+
+There is a full API for accessing and changing properties. This API can
+be used by Emacs Lisp programs to work with properties and to implement
+features based on them. For more information see @ref{Using the
+property API}.
+
+@node Timestamps, Agenda views, Properties and columns, Top
@chapter Timestamps
@cindex time stamps
@cindex date stamps
@@ -2780,8 +3682,7 @@ planning.
@menu
* Time stamps:: Assigning a time to a tree entry
* Creating timestamps:: Commands which insert timestamps
-* Custom time format:: If you cannot work with the ISO format
-* Repeating items:: Deadlines that come back again and again
+* Deadlines and scheduling:: Planning your work
* Progress logging:: Documenting when what work was done.
@end menu
@@ -2794,12 +3695,13 @@ planning.
@cindex deadlines
@cindex scheduling
-A time stamp is a specification of a date (possibly with time) in a
-special format, either @samp{<2003-09-16 Tue>} or @samp{<2003-09-16 Tue
-09:39>}@footnote{This is the standard ISO date/time format. If you
-cannot get used to these, see @ref{Custom time format}}. A time stamp
-can appear anywhere in the headline or body of an org-tree entry. Its
-presence allows entries to be shown on specific dates in the agenda
+A time stamp is a specification of a date (possibly with time or a range
+of times) in a special format, either @samp{<2003-09-16 Tue>} or
+@samp{<2003-09-16 Tue 09:39>} or @samp{<2003-09-16 Tue
+12:00-12:30>}@footnote{This is the standard ISO date/time format. If
+you cannot get used to these, see @ref{Custom time format}}. A time
+stamp can appear anywhere in the headline or body of an org-tree entry.
+Its presence causes entries to be shown on specific dates in the agenda
(@pxref{Weekly/Daily agenda}). We distinguish:
@table @var
@@ -2813,78 +3715,56 @@ associated with a plain time stamp will be shown exactly on that date.
@example
* Meet Peter at the movies <2006-11-01 Wed 19:15>
+* Discussion on climate change <2006-11-02 Thu 20:00-22:00>
@end example
-@item Inactive time stamp
-@cindex timestamp, inactive
-@cindex inactive timestamp
-Just like a plain time stamp, but with square brackets instead of
-angular ones. These time stamps are inactive in the sense that they do
-@emph{not} trigger an entry to show up in the agenda.
+@item Time stamp with repeater interval
+@cindex timestamp, with repeater interval
+A time stamp may contain a @emph{repeater interval}, indicating that it
+applies not only on the given date, but again and again after a certain
+interval of N days (d), weeks (w), months(m), or years(y). The
+following will show up in the agenda every Wednesday:
@example
-* Gillian comes late for the fifth time [2006-11-01 Wed]
+* Pick up Sam at school <2007-05-16 Wed 12:30 +1w>
@end example
-@item Time stamp range
-@cindex timerange
-Two time stamps connected by @samp{--} denote a time range. The
-headline will be shown on the first and last day of the range, and on
-any dates that are displayed and fall in the range. Here is an
-example:
+@item Diary-style sexp entries
+For more complex date specifications, Org-mode supports using the
+special sexp diary entries implemented in the Emacs calendar/diary
+package. For example
@example
-** Meeting in Amsterdam
- <2004-08-23 Mon>--<2004-08-26 Thu>
+* The nerd meeting on every 2nd Thursday of the month
+ <%%(diary-float t 4 2)>
@end example
-@item Time stamp with SCHEDULED keyword
-@cindex SCHEDULED keyword
-If a time stamp is preceded by the word @samp{SCHEDULED:}, it means you
-are planning to start working on that task on the given date. So this is
-not about recording an event, but about planning your work. The
-headline will be listed under the given date@footnote{It will still be
-listed on that date after it has been marked DONE. If you don't like
-this, set the variable @code{org-agenda-skip-scheduled-if-done}.}. In
-addition, a reminder that the scheduled date has passed will be present
-in the compilation for @emph{today}, until the entry is marked DONE.
-I.e., the task will automatically be forwarded until completed.
+@item Time/Date range
+@cindex timerange
+@cindex date range
+Two time stamps connected by @samp{--} denote a range. The headline
+will be shown on the first and last day of the range, and on any dates
+that are displayed and fall in the range. Here is an example:
@example
-*** TODO Call Trillian for a date on New Years Eve.
- SCHEDULED: <2004-12-25 Sat>
+** Meeting in Amsterdam
+ <2004-08-23 Mon>--<2004-08-26 Thu>
@end example
-@item Time stamp with DEADLINE keyword
-@cindex DEADLINE keyword
-If a time stamp is preceded by the word @samp{DEADLINE:}, the task
-(most likely a TODO item) is supposed to be finished on that date, and
-it will be listed then. In addition, the compilation for @emph{today}
-will carry a warning about the approaching or missed deadline,
-starting @code{org-deadline-warning-days} before the due date, and
-continuing until the entry is marked DONE. An example:
+@item Inactive time stamp
+@cindex timestamp, inactive
+@cindex inactive timestamp
+Just like a plain time stamp, but with square brackets instead of
+angular ones. These time stamps are inactive in the sense that they do
+@emph{not} trigger an entry to show up in the agenda.
@example
-*** TODO write article about the Earth for the Guide
- The editor in charge is [[bbdb:Ford Prefect]]
- DEADLINE: <2004-02-29 Sun>
+* Gillian comes late for the fifth time [2006-11-01 Wed]
@end example
-@item Time stamp with CLOSED keyword
-@cindex CLOSED keyword
-When @code{org-log-done} is non-nil, Org-mode will automatically insert
-a special time stamp each time a TODO entry is marked done
-(@pxref{Progress logging}). This time stamp is enclosed in square
-brackets instead of angular brackets.
-
-@item Time range with CLOCK keyword
-@cindex CLOCK keyword
-When using the clock to time the work that is being done on specific
-items, time ranges preceded by the CLOCK keyword are inserted
-automatically into the file. The time stamps are enclosed in square
-brackets instead of angular brackets. @xref{Clocking work time}.
+
@end table
-@node Creating timestamps, Custom time format, Time stamps, Timestamps
+@node Creating timestamps, Deadlines and scheduling, Time stamps, Timestamps
@section Creating timestamps
@cindex creating timestamps
@cindex timestamps, creating
@@ -2899,61 +3779,40 @@ format.
Prompt for a date and insert a corresponding time stamp. When the
cursor is at a previously used time stamp, it is updated to NOW. When
this command is used twice in succession, a time range is inserted.
-
+@c
@kindex C-u C-c .
@item C-u C-c .
Like @kbd{C-c .}, but use the alternative format which contains date
and time. The default time can be rounded to multiples of 5 minutes,
see the option @code{org-time-stamp-rounding-minutes}.
-
+@c
@kindex C-c !
@item C-c !
-Like @kbd{C-c .}, but insert an inactive time stamp not triggering the
-agenda.
-
+Like @kbd{C-c .}, but insert an inactive time stamp that will not cause
+an agenda entry.
+@c
@kindex C-c <
@item C-c <
Insert a time stamp corresponding to the cursor date in the Calendar.
-
+@c
@kindex C-c >
@item C-c >
Access the Emacs calendar for the current date. If there is a
timestamp in the current line, goto the corresponding date
instead.
-
+@c
@kindex C-c C-o
@item C-c C-o
Access the agenda for the date given by the time stamp or -range at
point (@pxref{Weekly/Daily agenda}).
-
-@kindex C-c C-d
-@item C-c C-d
-Insert @samp{DEADLINE} keyword along with a stamp. The insertion will
-happen in the line directly following the headline.
-@c FIXME Any CLOSED timestamp will be removed.????????
-
-@kindex C-c C-w
-@cindex sparse tree, for deadlines
-@item C-c C-w
-Create a sparse tree with all deadlines that are either past-due, or
-which will become due within @code{org-deadline-warning-days}.
-With @kbd{C-u} prefix, show all deadlines in the file. With a numeric
-prefix, check that many days. For example, @kbd{C-1 C-c C-w} shows
-all deadlines due tomorrow.
-
-@kindex C-c C-s
-@item C-c C-s
-Insert @samp{SCHEDULED} keyword along with a stamp. The insertion will
-happen in the line directly following the headline. Any CLOSED
-timestamp will be removed.
-
+@c
@kindex S-@key{left}
@kindex S-@key{right}
@item S-@key{left}
@itemx S-@key{right}
Change date at cursor by one day. These key bindings conflict with
CUA-mode (@pxref{Conflicts}).
-
+@c
@kindex S-@key{up}
@kindex S-@key{down}
@item S-@key{up}
@@ -2963,8 +3822,7 @@ year, month, day, hour or minute. Note that if the cursor is in a
headline and not at a time stamp, these same keys modify the priority of
an item. (@pxref{Priorities}). The key bindings also conflict with
CUA-mode (@pxref{Conflicts}).
-
-
+@c
@kindex C-c C-y
@cindex evaluate time range
@item C-c C-y
@@ -2976,9 +3834,10 @@ into the following column).
@menu
* The date/time prompt:: How org-mode helps you entering date and time
+* Custom time format:: Making dates look differently
@end menu
-@node The date/time prompt, , Creating timestamps, Creating timestamps
+@node The date/time prompt, Custom time format, Creating timestamps, Creating timestamps
@subsection The date/time prompt
@cindex date, reading in minibuffer
@cindex time, reading in minibuffer
@@ -3047,8 +3906,8 @@ One month back.
Choose date in calendar (only if nothing was typed into minibuffer).
@end table
-@node Custom time format, Repeating items, Creating timestamps, Timestamps
-@section Custom time format
+@node Custom time format, , The date/time prompt, Creating timestamps
+@subsection Custom time format
@cindex custom date/time format
@cindex time format, custom
@cindex date format, custom
@@ -3081,6 +3940,9 @@ the stamp, @kbd{S-@key{up}/@key{down}} will change the stamp by one day,
just like @kbd{S-@key{left}/@key{right}}. At the end of the stamp, the
time will be changed by one minute.
@item
+If the time stamp contains a range of clock times or a repeater, these
+will not be overlayed, but remain in the buffer as they were.
+@item
When you delete a time stamp character-by-character, it will only
disappear from the buffer after @emph{all} (invisible) characters
belonging to the ISO timestamp have been removed.
@@ -3090,48 +3952,123 @@ using dates in tables, table alignment will be messed up. If the custom
format is shorter, things do work as expected.
@end itemize
-@node Repeating items, Progress logging, Custom time format, Timestamps
-@section Repeating items
-@cindex TODO items, repeating
-@cindex deadlines, repeating
-@cindex scheduling, repeating
-Org-mode integrates with the Emacs calendar and diary to display cyclic
-appointments, anniversaries and other special entries in the agenda
-(@pxref{Weekly/Daily agenda}). However, it can be useful to have
-certain deadlines and scheduling items to auto-repeat. The advantage of
-a deadline or scheduled item is that the they produce warnings ahead of
-time and automatically forward themselves in the agenda until they are
-done. The abstract difference is therefore between cyclic
-@i{appointments} and cyclic @i{action items}. For appointments you
-should use the diary, for actions you can uses an org-mode deadline or
-scheduling time stamp together with a REPEAT cookie. For example:
+@node Deadlines and scheduling, Progress logging, Creating timestamps, Timestamps
+@section Deadlines and Scheduling
+
+A time stamp may be preceded by special keywords to facilitate planning
+of work:
+
+@table @var
+@item DEADLINE
+@cindex DEADLINE keyword
+The task (most likely a TODO item) is supposed to be finished on that
+date, and it will be listed then. In addition, the compilation for
+@emph{today} will carry a warning about the approaching or missed
+deadline, starting @code{org-deadline-warning-days} before the due date,
+and continuing until the entry is marked DONE. An example:
+
+@example
+*** TODO write article about the Earth for the Guide
+ The editor in charge is [[bbdb:Ford Prefect]]
+ DEADLINE: <2004-02-29 Sun>
+@end example
+
+You can specify a different lead time for warnings for a specific
+deadlines using the following syntax. Here is an example with a warning
+period of 5 days @code{DEADLINE: <2004-02-29 Sun -5d>}.
+
+@item SCHEDULED
+@cindex SCHEDULED keyword
+You are planning to start working on that task on the given date. The
+headline will be listed under the given date@footnote{It will still be
+listed on that date after it has been marked DONE. If you don't like
+this, set the variable @code{org-agenda-skip-scheduled-if-done}.}. In
+addition, a reminder that the scheduled date has passed will be present
+in the compilation for @emph{today}, until the entry is marked DONE.
+I.e., the task will automatically be forwarded until completed.
+
+@example
+*** TODO Call Trillian for a date on New Years Eve.
+ SCHEDULED: <2004-12-25 Sat>
+@end example
+@end table
+
+@menu
+* Inserting deadline/schedule:: Planning items
+* Repeated tasks:: Items that show up again and again
+@end menu
+
+@node Inserting deadline/schedule, Repeated tasks, Deadlines and scheduling, Deadlines and scheduling
+@subsection Inserting deadline/schedule
+
+The following commands allow to quickly insert a deadline or to schedule
+an item:
+
+@table @kbd
+@c
+@kindex C-c C-d
+@item C-c C-d
+Insert @samp{DEADLINE} keyword along with a stamp. The insertion will
+happen in the line directly following the headline.
+@c FIXME Any CLOSED timestamp will be removed.????????
+@c
+@kindex C-c C-w
+@cindex sparse tree, for deadlines
+@item C-c C-w
+Create a sparse tree with all deadlines that are either past-due, or
+which will become due within @code{org-deadline-warning-days}.
+With @kbd{C-u} prefix, show all deadlines in the file. With a numeric
+prefix, check that many days. For example, @kbd{C-1 C-c C-w} shows
+all deadlines due tomorrow.
+@c
+@kindex C-c C-s
+@item C-c C-s
+Insert @samp{SCHEDULED} keyword along with a stamp. The insertion will
+happen in the line directly following the headline. Any CLOSED
+timestamp will be removed.
+@end table
+
+@node Repeated tasks, , Inserting deadline/schedule, Deadlines and scheduling
+@subsection Repeated Tasks
+Some tasks need to be repeated again and again, and Org-mode therefore
+allows to use a repeater in a DEADLINE or SCHEDULED time stamp, for
+example:
@example
-* TODO Replace batteries in smoke detector REPEAT(+18m)
- SCHEDULED: <2007-01-01 Mon>
+** TODO Pay the rent
+ DEADLINE: <2005-10-01 Sat +1m>
+@end example
-* TODO Get dentist appointment REPEAT(+6m)
- SCHEDULED: <2006-12-19 Tue>
+Deadlines and scheduled items produce entries in the agenda when they
+are over-due, so it is important to be able to mark such an entry as
+completed once you have done so. When you mark a DEADLINE or a SCHEDULE
+with the todo keyword DONE, it will no longer produce entries in the
+agenda. The problem with this is, however, that then also the
+@emph{next} instance of the repeated entry will not be active. Org-mode
+deals with this in the following way: When you try to mark such an entry
+DONE (using @kbd{C-c C-t}), it will shift the base date of the repeating
+time stamp by the repeater interval, and immediately set the entry state
+back to TODO. In the example above, setting the state to DONE would
+actually switch the date like this:
-* TODO Tax report to IRS REPEAT(+1y)
- DEADLINE: <2007-04-01 Sun>
+@example
+** TODO Pay the rent
+ DEADLINE: <2005-11-01 Tue +1m>
@end example
-Each time you try to mark one of these entries DONE using @kbd{C-c C-t},
-they will automatically switch back to the state TODO, and the
-deadline/scheduling will be shifted accordingly. The time units
-recognized by org-mode are year (y), month (m), week (w), and day (d).
-Org-mode will also prompt you for a note and record the fact that you
-have closed this item in a note under the headline.
+You will also be prompted for a note that will be put under the DEADLINE
+line to keep a record that you actually acted on the previous instance
+of this deadline.
+
+As a consequence of shifting the base date, this entry will no longer be
+visible in the agenda when checking past dates, but all future instances
+will be visible.
-One unusual property of these repeating items is that only one instance
-of each exist at any given time. So if you look back or ahead in the
-agenda, you will not find past and future instances, only the current
-one will show up. Use a cyclic diary entry if you need all past and
-future instances to be visible in the agenda.
+You may have both scheduling and deadline information for a specific
+task - just make sure that the repeater intervals on both are the same.
-@node Progress logging, , Repeating items, Timestamps
+@node Progress logging, , Deadlines and scheduling, Timestamps
@section Progress Logging
@cindex progress logging
@cindex logging, of progress
@@ -3199,6 +4136,7 @@ these into a separate file that starts with:
#+STARTUP: lognotestate
@end example
+
@node Clocking work time, , Tracking TODO state changes, Progress logging
@subsection Clocking work time
@@ -3290,263 +4228,7 @@ The @kbd{l} key may be used in the timeline (@pxref{Timeline}) and in
the agenda (@pxref{Weekly/Daily agenda}) to show which tasks have been
worked on or closed during a day.
-@node Tags, Agenda views, Timestamps, Top
-@chapter Tags
-@cindex tags
-@cindex headline tagging
-@cindex matching, tags
-@cindex sparse tree, tag based
-
-If you wish to implement a system of labels and contexts for
-cross-correlating information, an excellent way is to assign @i{tags} to
-headlines. Org-mode has extensive support for using tags.
-
-Every headline can contain a list of tags, at the end of the headline.
-Tags are normal words containing letters, numbers, @samp{_}, and
-@samp{@@}. Tags must be preceded and followed by a single colon; like
-@samp{:WORK:}. Several tags can be specified like @samp{:WORK:URGENT:}.
-
-@menu
-* Tag inheritance:: Tags use the tree structure of the outline
-* Setting tags:: How to assign tags to a headline
-* Tag searches:: Searching for combinations of tags
-@end menu
-
-@node Tag inheritance, Setting tags, Tags, Tags
-@section Tag inheritance
-@cindex inheritance, of tags
-@cindex sublevels, inclusion into tags match
-
-@i{Tags} make use of the hierarchical structure of outline trees. If a
-heading has a certain tag, all subheadings will inherit the tag as
-well. For example, in the list
-
-@example
-* Meeting with the French group :WORK:
-** Summary by Frank :BOSS:NOTES:
-*** TODO Prepare slides for him :ACTION:
-@end example
-
-@noindent
-the final heading will have the tags @samp{:WORK:}, @samp{:BOSS:},
-@samp{:NOTES:}, and @samp{:ACTION:}. When executing tag searches and
-Org-mode finds that a certain headline matches the search criterion, it
-will not check any sublevel headline, assuming that these likely also
-match, and that the list of matches can become very long. This may
-not be what you want, however, and you can influence inheritance and
-searching using the variables @code{org-use-tag-inheritance} and
-@code{org-tags-match-list-sublevels}.
-
-@node Setting tags, Tag searches, Tag inheritance, Tags
-@section Setting tags
-@cindex setting tags
-@cindex tags, setting
-
-@kindex M-@key{TAB}
-Tags can simply be typed into the buffer at the end of a headline.
-After a colon, @kbd{M-@key{TAB}} offers completion on tags. There is
-also a special command for inserting tags:
-
-@table @kbd
-@kindex C-c C-c
-@item C-c C-c
-@cindex completion, of tags
-Enter new tags for the current headline. Org-mode will either offer
-completion or a special single-key interface for setting tags, see
-below. After pressing @key{RET}, the tags will be inserted and aligned
-to @code{org-tags-column}. When called with a @kbd{C-u} prefix, all
-tags in the current buffer will be aligned to that column, just to make
-things look nice. TAGS are automatically realigned after promotion,
-demotion, and TODO state changes (@pxref{TODO basics}).
-@end table
-
-Org will support tag insertion based on a @emph{list of tags}. By
-default this list is constructed dynamically, containing all tags
-currently used in the buffer. You may also globally specify a hard list
-of tags with the variable @code{org-tag-alist}. Finally you can set
-the default tags for a given file with lines like
-
-@example
-#+TAGS: @@WORK @@HOME @@TENNISCLUB
-#+TAGS: Laptop Car PC Sailboat
-@end example
-
-If you have globally defined your preferred set of tags using the
-variable @code{org-tag-alist}, but would like to use a dynamic tag list
-in a specific file: Just add an empty TAGS option line to that file:
-
-@example
-#+TAGS:
-@end example
-
-The default support method for entering tags is minibuffer completion.
-However, Org-mode also implements a much better method: @emph{fast tag
-selection}. This method allows to select and deselect tags with a
-single key per tag. To function efficiently, you should assign unique
-keys to most tags. This can be done globally with
-
-@lisp
-(setq org-tag-alist '(("@@WORK" . ?w) ("@@HOME" . ?h) ("Laptop" . ?l)))
-@end lisp
-
-@noindent or on a per-file basis with
-
-@example
-#+TAGS: @@WORK(w) @@HOME(h) @@TENNISCLUB(t) Laptop(l) PC(p)
-@end example
-
-@noindent
-You can also group together tags that are mutually exclusive. With
-curly braces@footnote{In @code{org-mode-alist} use
-@code{'(:startgroup)} and @code{'(:endgroup)}, respectively. Several
-groups are allowed.}
-
-@example
-#+TAGS: @{ @@WORK(w) @@HOME(h) @@TENNISCLUB(t) @} Laptop(l) PC(p)
-@end example
-
-@noindent you indicate that at most one of @samp{@@WORK}, @samp{@@HOME},
-and @samp{@@TENNISCLUB} should be selected.
-
-@noindent Don't forget to press @kbd{C-c C-c} with the cursor in one of
-these lines to activate any changes.
-
-If at least one tag has a selection key, pressing @kbd{C-c C-c} will
-automatically present you with a special interface, listing inherited
-tags, the tags of the current headline, and a list of all legal tags
-with corresponding keys@footnote{Keys will automatically be assigned to
-tags which have no configured keys.}. In this interface, you can use
-the following keys:
-
-@table @kbd
-@item a-z...
-Pressing keys assigned to tags will add or remove them from the list of
-tags in the current line. Selecting a tag in a group of mutually
-exclusive tags will turn off any other tags from that group.
-@kindex @key{TAB}
-@item @key{TAB}
-Enter a tag in the minibuffer, even if the tag is not in the predefined
-list. You will be able to complete on all tags present in the buffer.
-@kindex @key{SPC}
-@item @key{SPC}
-Clear all tags for this line.
-@kindex @key{RET}
-@item @key{RET}
-Accept the modified set.
-@item C-g
-Abort without installing changes.
-@item q
-If @kbd{q} is not assigned to a tag, it aborts like @kbd{C-g}.
-@item !
-Turn off groups of mutually exclusive tags. Use this to (as an
-exception) assign several tags from such a group.
-@item C-c
-Toggle auto-exit after the next change (see below).
-If you are using expert mode, the first @kbd{C-c} will display the
-selection window.
-@end table
-
-@noindent
-This method lets you assign tags to a headline with very few keys. With
-the above setup, you could clear the current tags and set @samp{@@HOME},
-@samp{Laptop} and @samp{PC} tags with just the following keys: @kbd{C-c
-C-c @key{SPC} h l p @key{RET}}. Switching from @samp{@@HOME} to
-@samp{@@WORK} would be done with @kbd{C-c C-c w @key{RET}} or
-alternatively with @kbd{C-c C-c C-c w}. Adding the non-predefined tag
-@samp{Sarah} could be done with @kbd{C-c C-c @key{TAB} S a r a h
-@key{RET} @key{RET}}.
-
-If you find that most of the time, you need only a single keypress to
-modify your list of tags, set the variable
-@code{org-fast-tag-selection-single-key}. Then you no longer have to
-press @key{RET} to exit fast tag selection - it will immediately exit
-after the first change. If you then occasionally need more keys, press
-@kbd{C-c} to turn off auto-exit for the current tag selection process
-(in effect: start selection with @kbd{C-c C-c C-c} instead of @kbd{C-c
-C-c}). If you set the variable to the value @code{expert}, the special
-window is not even shown for single-key tag selection, it comes up only
-when you press an extra @kbd{C-c}.
-
-@node Tag searches, , Setting tags, Tags
-@section Tag searches
-@cindex tag searches
-@cindex searching for tags
-
-Once a tags system has been set up, it can be used to collect related
-information into special lists.
-
-@table @kbd
-@kindex C-c \
-@item C-c \
-Create a sparse tree with all headlines matching a tags search. With a
-@kbd{C-u} prefix argument, ignore headlines that are not a TODO line.
-@kindex C-c a m
-@item C-c a m
-Create a global list of tag matches from all agenda files.
-@xref{Matching headline tags}.
-@kindex C-c a M
-@item C-c a M
-Create a global list of tag matches from all agenda files, but check
-only TODO items and force checking subitems (see variable
-@code{org-tags-match-list-sublevels}).
-@end table
-
-@cindex Boolean logic, for tag searches
-A @i{tags} search string can use Boolean operators @samp{&} for AND and
-@samp{|} for OR. @samp{&} binds more strongly than @samp{|}.
-Parenthesis are currently not implemented. A tag may also be preceded
-by @samp{-}, to select against it, and @samp{+} is syntactic sugar for
-positive selection. The AND operator @samp{&} is optional when @samp{+}
-or @samp{-} is present. Examples:
-
-@table @samp
-@item +WORK-BOSS
-Select headlines tagged @samp{:WORK:}, but discard those also tagged
-@samp{:BOSS:}.
-@item WORK|LAPTOP
-Selects lines tagged @samp{:WORK:} or @samp{:LAPTOP:}.
-@item WORK|LAPTOP&NIGHT
-Like before, but require the @samp{:LAPTOP:} lines to be tagged also
-@samp{NIGHT}.
-@end table
-
-@cindex TODO keyword matching, with tags search
-If you are using multi-state TODO keywords (@pxref{TODO extensions}), it
-can be useful to also match on the TODO keyword. This can be done by
-adding a condition after a slash to a tags match. The syntax is similar
-to the tag matches, but should be applied with consideration: For
-example, a positive selection on several TODO keywords can not
-meaningfully be combined with boolean AND. However, @emph{negative
-selection} combined with AND can be meaningful. To make sure that only
-lines are checked that actually have any TODO keyword, use @kbd{C-c a
-M}, or equivalently start the todo part after the slash with @samp{!}.
-Examples:
-
-@table @samp
-@item WORK/WAITING
-Select @samp{:WORK:}-tagged TODO lines with the specific TODO
-keyword @samp{WAITING}.
-@item WORK/!-WAITING-NEXT
-Select @samp{:WORK:}-tagged TODO lines that are neither @samp{WAITING}
-nor @samp{NEXT}
-@item WORK/+WAITING|+NEXT
-Select @samp{:WORK:}-tagged TODO lines that are either @samp{WAITING} or
-@samp{NEXT}.
-@end table
-
-@cindex regular expressions, with tags search
-Any element of the tag/todo match can be a regular expression - in this
-case it must be enclosed in curly braces. For example,
-@samp{WORK+@{^BOSS.*@}} matches headlines that contain the tag
-@samp{WORK} and any tag @i{starting} with @samp{BOSS}.
-
-@cindex level, require for tags match
-You can also require a headline to be of a certain level, by writing
-instead of any TAG an expression like @samp{LEVEL=3}. For example, a
-search @samp{+LEVEL=3+BOSS/-DONE} lists all level three headlines that
-have the tag BOSS and are @emph{not} marked with the todo keyword DONE.
-
-@node Agenda views, Embedded LaTeX, Tags, Top
+@node Agenda views, Embedded LaTeX, Timestamps, Top
@chapter Agenda Views
@cindex agenda views
@@ -3654,7 +4336,7 @@ Create the calendar-like agenda (@pxref{Weekly/Daily agenda}).
Create a list of all TODO items (@pxref{Global TODO list}).
@item m @r{/} M
Create a list of headlines matching a TAGS expression (@pxref{Matching
-headline tags}).
+tags and properties}).
@item L
Create the timeline view for the current buffer (@pxref{Timeline}).
@item # @r{/} !
@@ -3683,7 +4365,7 @@ In this section we describe the built-in views.
@menu
* Weekly/Daily agenda:: The calendar page with current tasks
* Global TODO list:: All unfinished action items
-* Matching headline tags:: Structured information with fine-tuned search
+* Matching tags and properties:: Structured information with fine-tuned search
* Timeline:: Time-sorted view for single file
* Stuck projects:: Find projects you need to review
@end menu
@@ -3743,8 +4425,25 @@ Sunrise/Sunset times, show lunar phases and to convert to other
calendars, respectively. @kbd{c} can be used to switch back and forth
between calendar and agenda.
+If you are using the diary only for sexp entries and holidays, it is
+faster to not use the above setting, but instead to copy or even move
+the entries into an Org-mode file. Org-mode evaluates diary-style sexp
+entries, and does it faster because there is no overhead for first
+creating the diary display. Note that the sexp entries must start at
+the left margin, no white space is allowed before them. For example,
+the following segment of an Org-mode file will be processed and entries
+will be made in the agenda:
+
+@example
+* Birthdays and similar stuff
+#+CATEGORY: Holiday
+%%(org-calendar-holiday) ; special function for holiday names
+#+CATEGORY: Ann
+%%(diary-anniversary 14 5 1956) Arthur Dent is %d years old
+%%(diary-anniversary 2 10 1869) Mahatma Gandhi would be %d years old
+@end example
-@node Global TODO list, Matching headline tags, Weekly/Daily agenda, Built-in agenda views
+@node Global TODO list, Matching tags and properties, Weekly/Daily agenda, Built-in agenda views
@subsection The global TODO list
@cindex global TODO list
@cindex TODO list, global
@@ -3762,10 +4461,12 @@ the TODO entries directly from that buffer (@pxref{Agenda commands}).
@kindex C-c a T
@item C-c a T
@cindex TODO keyword matching
-Like the above, but allows selection of a specific TODO keyword. You can
-also do this by specifying a prefix argument to @kbd{C-c a t}. With a
-@kbd{C-u} prefix you are prompted for a keyword. With a numeric
-prefix, the Nth keyword in @code{org-todo-keywords} is selected.
+Like the above, but allows selection of a specific TODO keyword. You
+can also do this by specifying a prefix argument to @kbd{C-c a t}. With
+a @kbd{C-u} prefix you are prompted for a keyword, and you may also
+specify several keywords by separating them with @samp{|} as boolean OR
+operator. With a numeric prefix, the Nth keyword in
+@code{org-todo-keywords} is selected.
@kindex r
The @kbd{r} key in the agenda buffer regenerates it, and you can give
a prefix argument to this command to change the selected TODO keyword,
@@ -3796,9 +4497,10 @@ and omit the sublevels from the global list. Configure the variable
@code{org-agenda-todo-list-sublevels} to get this behavior.
@end itemize
-@node Matching headline tags, Timeline, Global TODO list, Built-in agenda views
-@subsection Matching headline tags
+@node Matching tags and properties, Timeline, Global TODO list, Built-in agenda views
+@subsection Matching Tags and Properties
@cindex matching, of tags
+@cindex matching, of properties
@cindex tags view
If headlines in the agenda files are marked with @emph{tags}
@@ -3824,7 +4526,7 @@ together with a tags match is also possible, see @ref{Tag searches}.
The commands available in the tags list are described in @ref{Agenda
commands}.
-@node Timeline, Stuck projects, Matching headline tags, Built-in agenda views
+@node Timeline, Stuck projects, Matching tags and properties, Built-in agenda views
@subsection Timeline for a single file
@cindex timeline, single file
@cindex time-sorted view
@@ -3834,7 +4536,7 @@ file in a @emph{time-sorted view}. The main purpose of this command is
to give an overview over events in a project.
@table @kbd
-@kindex C-a a L
+@kindex C-c a L
@item C-c a L
Show a time-sorted view of the org file, with all time-stamped items.
When called with a @kbd{C-u} prefix, all unfinished TODO entries
@@ -3875,16 +4577,18 @@ Lets assume that you, in your own way of using Org-mode, identify
projects with a tag PROJECT, and that you use a todo keyword MAYBE to
indicate a project that should not be considered yet. Lets further
assume that the todo keyword DONE marks finished projects, and that NEXT
-and TODO indicate next actions. Finally, the tag @@SHOP indicates
-shopping and is a next action even without the NEXT tag. In this case
-you would start by identifying eligible projects with a tags/todo match
-@samp{+PROJECT/-MAYBE-DONE}, and then check for TODO, NEXT and @@SHOP in
-the subtree to identify projects that are not stuck. The correct
-customization for this is
+and TODO indicate next actions. The tag @@SHOP indicates shopping and
+is a next action even without the NEXT tag. Finally, if the project
+contains the special word IGNORE anywhere, it should not be listed
+either. In this case you would start by identifying eligible projects
+with a tags/todo match @samp{+PROJECT/-MAYBE-DONE}, and then check for
+TODO, NEXT, @@SHOP, and IGNORE in the subtree to identify projects that
+are not stuck. The correct customization for this is
@lisp
(setq org-stuck-projects
- ("+PROJECT/-MAYBE-DONE" ("NEXT" "TODO") ("@@SHOP")))
+ '("+PROJECT/-MAYBE-DONE" ("NEXT" "TODO") ("@@SHOP")
+ "\\<IGNORE\\>"))
@end lisp
@@ -4031,11 +4735,11 @@ Previous line (same as @key{down}).
@item mouse-3
@itemx @key{SPC}
Display the original location of the item in another window.
-
+@c
@kindex L
@item L
Display original location and recenter that window.
-
+@c
@kindex mouse-2
@kindex mouse-1
@kindex @key{TAB}
@@ -4044,11 +4748,11 @@ Display original location and recenter that window.
@itemx @key{TAB}
Go to the original location of the item in another window. Under Emacs
22, @kbd{mouse-1} will also works for this.
-
+@c
@kindex @key{RET}
@itemx @key{RET}
Go to the original location of the item and delete other windows.
-
+@c
@kindex f
@item f
Toggle Follow mode. In Follow mode, as you move the cursor through
@@ -4056,14 +4760,14 @@ the agenda buffer, the other window always shows the corresponding
location in the org file. The initial setting for this mode in new
agenda buffers can be set with the variable
@code{org-agenda-start-with-follow-mode}.
-
+@c
@kindex b
@item b
Display the entire subtree of the current item in an indirect buffer.
With numerical prefix ARG, go up to this level and then take that tree.
If ARG is negative, go up that many levels. With @kbd{C-u} prefix, do
not remove the previously used indirect buffer.
-
+@c
@kindex l
@item l
Toggle Logbook mode. In Logbook mode, entries that where marked DONE while
@@ -4075,24 +4779,25 @@ as are entries that have been clocked on that day.
@kindex o
@item o
Delete other windows.
-
-@kindex w
-@item w
-Switch to weekly view (7 days displayed together).
-
+@c
@kindex d
-@item d
-Switch to daily view (just one day displayed).
-
+@kindex w
+@kindex m
+@kindex y
+@item d w m y
+Switch to day/week/month/year view. When switching to day or week view,
+this setting becomes the default for subseqent agenda commands. Since
+month and year views are slow to create, the do not become the default.
+@c
@kindex D
@item D
Toggle the inclusion of diary entries. See @ref{Weekly/Daily agenda}.
-
+@c
@kindex g
@item g
Toggle the time grid on and off. See also the variables
@code{org-agenda-use-time-grid} and @code{org-agenda-time-grid}.
-
+@c
@kindex r
@item r
Recreate the agenda buffer, for example to reflect the changes
@@ -4100,21 +4805,21 @@ after modification of the time stamps of items with S-@key{left} and
S-@key{right}. When the buffer is the global todo list, a prefix
argument is interpreted to create a selective list for a specific TODO
keyword.
-
+@c
@kindex s
@item s
Save all Org-mode buffers in the current Emacs session.
-
+@c
@kindex @key{right}
@item @key{right}
Display the following @code{org-agenda-ndays} days. For example, if
the display covers a week, switch to the following week. With prefix
arg, go forward that many times @code{org-agenda-ndays} days.
-
+@c
@kindex @key{left}
@item @key{left}
Display the previous dates.
-
+@c
@kindex .
@item .
Goto today.
@@ -4124,53 +4829,53 @@ Goto today.
@item 0-9
Digit argument.
-
+@c
@cindex undoing remote-editing events
@cindex remote editing, undo
@kindex C-_
@item C-_
Undo a change due to a remote editing command. The change is undone
both in the agenda buffer and in the remote buffer.
-
+@c
@kindex t
@item t
Change the TODO state of the item, both in the agenda and in the
original org file.
-
+@c
@kindex C-k
@item C-k
Delete the current agenda item along with the entire subtree belonging
to it in the original Org-mode file. If the text to be deleted remotely
is longer than one line, the kill needs to be confirmed by the user. See
variable @code{org-agenda-confirm-kill}.
-
+@c
@kindex $
@item $
Archive the subtree corresponding to the current headline.
-
+@c
@kindex T
@item T
Show all tags associated with the current item. Because of
inheritance, this may be more than the tags listed in the line itself.
-
+@c
@kindex :
@item :
Set tags for the current headline.
-
+@c
@kindex a
@item a
Toggle the ARCHIVE tag for the current headline.
-
+@c
@kindex ,
@item ,
Set the priority for the current item. Org-mode prompts for the
priority character. If you reply with @key{SPC}, the priority cookie
is removed from the entry.
-
+@c
@kindex P
@item P
Display weighted priority of current item.
-
+@c
@kindex +
@kindex S-@key{up}
@item +
@@ -4178,21 +4883,21 @@ Display weighted priority of current item.
Increase the priority of the current item. The priority is changed in
the original buffer, but the agenda is not resorted. Use the @kbd{r}
key for this.
-
+@c
@kindex -
@kindex S-@key{down}
@item -
@itemx S-@key{down}
Decrease the priority of the current item.
-
+@c
@kindex C-c C-s
@item C-c C-s
Schedule this item
-
+@c
@kindex C-c C-d
@item C-c C-d
Set a deadline for this item.
-
+@c
@kindex S-@key{right}
@item S-@key{right}
Change the time stamp associated with the current line by one day into
@@ -4201,25 +4906,27 @@ example, @kbd{3 6 5 S-@key{right}} will change it by a year. The
stamp is changed in the original org file, but the change is not
directly reflected in the agenda buffer. Use the
@kbd{r} key to update the buffer.
-
+@c
@kindex S-@key{left}
@item S-@key{left}
Change the time stamp associated with the current line by one day
into the past.
-
+@c
@kindex >
@item >
Change the time stamp associated with the current line to today.
The key @kbd{>} has been chosen, because it is the same as @kbd{S-.}
on my keyboard.
-
+@c
@kindex I
@item I
Start the clock on the current item. If a clock is running already, it
is stopped first.
+@c
@kindex O
@item O
Stop the previously started clock.
+@c
@kindex X
@item X
Cancel the currently running clock.
@@ -4229,11 +4936,11 @@ Cancel the currently running clock.
@kindex c
@item c
Open the Emacs calendar and move to the date at the agenda cursor.
-
+@c
@item c
When in the calendar, compute and show the Org-mode agenda for the
date at the cursor.
-
+@c
@cindex diary entries, creating from agenda
@kindex i
@item i
@@ -4241,42 +4948,53 @@ Insert a new entry into the diary. Prompts for the type of entry
(day, weekly, monthly, yearly, anniversary, cyclic) and creates a new
entry in the diary, just as @kbd{i d} etc. would do in the calendar.
The date is taken from the cursor position.
-
+@c
@kindex M
@item M
Show the phases of the moon for the three months around current date.
-
+@c
@kindex S
@item S
Show sunrise and sunset times. The geographical location must be set
with calendar variables, see documentation of the Emacs calendar.
-
+@c
@kindex C
@item C
Convert the date at cursor into many other cultural and historic
calendars.
-
+@c
@kindex H
@item H
Show holidays for three month around the cursor date.
-
+@c
@c FIXME: This should be a different key.
@kindex C-c C-x C-c
@item C-c C-x C-c
Export a single iCalendar file containing entries from all agenda files.
+@tsubheading{Exporting to a file}
+@kindex C-x C-w
+@item C-x C-w
+@cindex exporting agenda views
+@cindex agenda views, exporting
+Write the agenda view to a file. Depending on the extension of the
+selected file name, the view will be exported as HTML (extension
+@file{.html} or @file{.htm}), Postscript (extension @file{.ps}), or
+plain text (any other extension). Use the variable
+@code{org-agenda-exporter-settings} to set options for @file{ps-print}
+and for @file{htmlize} to be used during export.
+
@tsubheading{Quit and Exit}
@kindex q
@item q
Quit agenda, remove the agenda buffer.
-
+@c
@kindex x
@cindex agenda files, removing buffers
@item x
Exit agenda, remove the agenda buffer and all buffers loaded by Emacs
for the compilation of the agenda. Buffers created by the user to
visit org files will not be removed.
-
@end table
@@ -4294,7 +5012,8 @@ dispatcher (@pxref{Agenda dispatcher}), just like the default commands.
* Storing searches:: Type once, use often
* Block agenda:: All the stuff you need in a single buffer
* Setting Options:: Changing the rules
-* Batch processing:: Agenda views from the command line
+* Exporting Agenda Views:: Writing agendas to files.
+* Extracting Agenda Information for other programs::
@end menu
@node Storing searches, Block agenda, Custom agenda views, Custom agenda views
@@ -4386,7 +5105,7 @@ your agenda for the current week, all TODO items that carry the tag
command @kbd{C-c a o} provides a similar view for office tasks.
-@node Setting Options, Batch processing, Block agenda, Custom agenda views
+@node Setting Options, Exporting Agenda Views, Block agenda, Custom agenda views
@subsection Setting Options for custom commands
@cindex options, for custom agenda views
@@ -4434,7 +5153,8 @@ the results for GARDEN tags query in the opposite order,
'(("h" "Agenda and Home-related tasks"
((agenda)
(tags-todo "HOME")
- (tags "GARDEN" ((org-agenda-sorting-strategy '(priority-up)))))
+ (tags "GARDEN"
+ ((org-agenda-sorting-strategy '(priority-up)))))
((org-agenda-sorting-strategy '(priority-down))))
("o" "Agenda and Office-related tasks"
((agenda)
@@ -4450,36 +5170,234 @@ this interface, the @emph{values} are just lisp expressions. So if the
value is a string, you need to add the double quotes around the value
yourself.
-@node Batch processing, , Setting Options, Custom agenda views
-@subsection Creating agenda views in batch processing
-@cindex agenda, batch production
-If you want to print or otherwise reprocess agenda views, it can be
-useful to create an agenda from the command line. This is the purpose
-of the function @code{org-batch-agenda}. It takes as a parameter one of
-the strings that are the keys in @code{org-agenda-custom-commands}. For
-example, to directly print the current TODO list, you could use
+@node Exporting Agenda Views, Extracting Agenda Information for other programs, Setting Options, Custom agenda views
+@subsection Exporting Agenda Views
+@cindex agenda views, exporting
+
+If you are away from your computer, it can be very useful to have a
+printed version of some agenda views to carry around. Org-mode can
+export custom agenda views as plain text, HTML@footnote{You need to
+install Hrvoje Niksic' @file{htmlize.el}.} and postscript. If you want
+to do this only occasionally, use the command
+
+@table @kbd
+@kindex C-x C-w
+@item C-x C-w
+@cindex exporting agenda views
+@cindex agenda views, exporting
+Write the agenda view to a file. Depending on the extension of the
+selected file name, the view will be exported as HTML (extension
+@file{.html} or @file{.htm}), Postscript (extension @file{.ps}), or
+plain text (any other extension). Use the variable
+@code{org-agenda-exporter-settings} to set options for @file{ps-print}
+and for @file{htmlize} to be used during export, for example
+@lisp
+(setq org-agenda-exporter-settings
+ '((ps-number-of-columns 2)
+ (ps-landscape-mode t)
+ (htmlize-output-type 'css)))
+@end lisp
+@end table
+
+If you need to export certain agenda views frequently, you can associate
+any custom agenda command with a list of output file names
+@footnote{If you want to store standard views like the weekly agenda
+or the global TODO list as well, you need to define custom commands for
+them in order to be able to specify filenames.}. Here is an example
+that first does define custom commands for the agenda and the global
+todo list, together with a number of files to which to export them.
+Then we define two block agenda commands and specify filenames for them
+as well. File names can be relative to the current working directory,
+or absolute.
+
+@lisp
+@group
+(setq org-agenda-custom-commands
+ '(("X" agenda "" nil ("agenda.html" "agenda.ps"))
+ ("Y" alltodo "" nil ("todo.html" "todo.txt" "todo.ps"))
+ ("h" "Agenda and Home-related tasks"
+ ((agenda)
+ (tags-todo "HOME")
+ (tags "GARDEN"))
+ nil
+ ("~/views/home.html"))
+ ("o" "Agenda and Office-related tasks"
+ ((agenda)
+ (tags-todo "WORK")
+ (tags "OFFICE"))
+ nil
+ ("~/views/office.ps"))))
+@end group
+@end lisp
+
+The extension of the file name determines the type of export. If it is
+@file{.html}, Org-mode will use the @file{htmlize.el} package to convert
+the buffer to HTML and save it to this file name. If the extension is
+@file{.ps}, @code{ps-print-buffer-with-faces} is used to produce
+postscript output. Any other extension produces a plain ASCII file.
+
+The export files are @emph{not} created when you use one of those
+commands interactively. Instead, there is a special command to produce
+@emph{all} specified files in one step:
+
+@table @kbd
+@kindex C-c a e
+@item C-c a e
+Export all agenda views that have export filenames associated with
+them.
+@end table
+
+You can use the options section of the custom agenda commands to also
+set options for the export commands. For example:
+
+@lisp
+(setq org-agenda-custom-commands
+ '(("X" agenda ""
+ ((ps-number-of-columns 2)
+ (ps-landscape-mode t)
+ (org-agenda-prefix-format " [ ] ")
+ (org-agenda-with-colors nil)
+ (org-agenda-remove-tags t))
+ ("theagenda.ps"))))
+@end lisp
+
+@noindent
+This command sets two options for the postscript exporter, to make it
+print in two columns in landscape format - the resulting page can be cut
+in two and then used in a paper agenda. The remaining settings modify
+the agenda prefix to omit category and scheduling information, and
+instead include a checkbox to check off items. We also remove the tags
+to make the lines compact, and we don't want to use colors for the
+black-and-white printer. Settings specified in
+@code{org-agenda-exporter-settings} will also apply, but the settings
+in @code{org-agenda-custom-commands} take precedence.
+
+@noindent
+From the command line you may also use
+@example
+emacs -f org-batch-store-agenda-views -kill
+@end example
+@noindent
+or, if you need to modify some parameters
+@example
+emacs -eval '(org-batch-store-agenda-views \
+ org-agenda-ndays 30 \
+ org-agenda-include-diary nil \
+ org-agenda-files (quote ("~/org/project.org")))' \
+ -kill
+@end example
+@noindent
+which will create the agenda views restricted to the file
+@file{~/org/project.org}, without diary entries and with 30 days
+extent.
+
+@node Extracting Agenda Information for other programs, , Exporting Agenda Views, Custom agenda views
+@subsection Extracting Agenda Information for other programs
+@cindex agenda, pipe
+@cindex Scripts, for agenda processing
+
+Org-mode provides commands to access agenda information for the command
+line in emacs batch mode. This extracted information can be sent
+directly to a printer, or it can be read by a program that does further
+processing of the data. The first of these commands is the function
+@code{org-batch-agenda}, that produces an agenda view and sends it as
+ASCII text to STDOUT. The command takes a single string as parameter.
+If the string has length 1, it is used as a key to one of the commands
+you have configured in @code{org-agenda-custom-commands}, basically any
+key you can use after @kbd{C-c a}. For example, to directly print the
+current TODO list, you could use
@example
emacs -batch -l ~/.emacs -eval '(org-batch-agenda "t")' | lpr
@end example
+If the parameter is a string with 2 or more characters, it is used as a
+tags/todo match string. For example, to print your local shopping list
+(all items with the tag @samp{shop}, but excluding the tag
+@samp{NewYork}), you could use
+
+@example
+emacs -batch -l ~/.emacs \
+ -eval '(org-batch-agenda "+shop-NewYork")' | lpr
+@end example
+
@noindent
You may also modify parameters on the fly like this:
@example
emacs -batch -l ~/.emacs \
-eval '(org-batch-agenda "a" \
- org-agenda-ndays 300 \
+ org-agenda-ndays 30 \
org-agenda-include-diary nil \
org-agenda-files (quote ("~/org/project.org")))' \
| lpr
@end example
@noindent
-which will produce a 300 day agenda, fully restricted to the Org file
+which will produce a 30 day agenda, fully restricted to the Org file
@file{~/org/projects.org}, not even including the diary.
+If you want to process the agenda data in more sophisticated ways, you
+can use the command @code{org-batch-agenda-csv} to get a comma-separated
+list of values for each agenda item. Each line in the output will
+contain a number of fields separated by commas. The fields in a line
+are:
+
+@example
+category @r{The category of the item}
+head @r{The headline, without TODO kwd, TAGS and PRIORITY}
+type @r{The type of the agenda entry, can be}
+ todo @r{selected in TODO match}
+ tagsmatch @r{selected in tags match}
+ diary @r{imported from diary}
+ deadline @r{a deadline}
+ scheduled @r{scheduled}
+ timestamp @r{appointment, selected by timestamp}
+ closed @r{entry was closed on date}
+ upcoming-deadline @r{warning about nearing deadline}
+ past-scheduled @r{forwarded scheduled item}
+ block @r{entry has date block including date}
+todo @r{The todo keyword, if any}
+tags @r{All tags including inherited ones, separated by colons}
+date @r{The relevant date, like 2007-2-14}
+time @r{The time, like 15:00-16:50}
+extra @r{String with extra planning info}
+priority-l @r{The priority letter if any was given}
+priority-n @r{The computed numerical priority}
+@end example
+
+@noindent
+Time and date will only be given if a timestamp (or deadline/scheduled)
+lead to the selection of the item.
+
+A CSV list like this is very easy to use in a post processing script.
+For example, here is a Perl program that gets the TODO list from
+Emacs/org-mode and prints all the items, preceded by a checkbox:
+
+@example
+@group
+#!/usr/bin/perl
+
+# define the Emacs command to run
+$cmd = "emacs -batch -l ~/.emacs -eval '(org-batch-agenda-csv \"t\")'";
+
+# run it and capture the output
+$agenda = qx@{$cmd 2>/dev/null@};
+
+# loop over all lines
+foreach $line (split(/\n/,$agenda)) @{
+
+ # get the individual values
+ ($category,$head,$type,$todo,$tags,$date,$time,$extra,
+ $priority_l,$priority_n) = split(/,/,$line);
+
+ # proccess and print
+ print "[ ] $head\n";
+@}
+@end group
+@end example
+
@node Embedded LaTeX, Exporting, Agenda views, Top
@chapter Embedded LaTeX
@cindex @TeX{} interpretation
@@ -4557,19 +5475,23 @@ are surrounded with @code{<sub>} and @code{<sup>} tags, respectively.
With symbols, sub- and superscripts, HTML is pretty much at its end when
it comes to representing mathematical formulas@footnote{Yes, there is
MathML, but that is not yet fully supported by many browsers, and there
-is no decent converter for turning LaTeX of ASCII representations of
-formulas into MathML. So for the time being, converting formulas into
-images seems the way to go.}. More complex
-expressions need a dedicated formula processor. To this end, Org-mode
-can contain arbitrary La@TeX{} fragments. It provides commands to
-preview the typeset result of these fragments, and upon export to HTML,
-all fragments will be converted to images and inlined into the HTML
-document. For this to work you need to be on a system with a working
-La@TeX{} installation. You also need the @file{dvipng} program,
-available at @url{http://sourceforge.net/projects/dvipng/}.
+is no decent converter for turning La@TeX{} or ASCII representations of
+formulas into MathML. So for the time being, converting formulas into
+images seems the way to go.}. More complex expressions need a dedicated
+formula processor. To this end, Org-mode can contain arbitrary La@TeX{}
+fragments. It provides commands to preview the typeset result of these
+fragments, and upon export to HTML, all fragments will be converted to
+images and inlined into the HTML document@footnote{The La@TeX{} export
+will not use images for displaying La@TeX{} fragments but include these
+fragments directly into the La@TeX{} code.}. For this to work you
+need to be on a system with a working La@TeX{} installation. You also
+need the @file{dvipng} program, available at
+@url{http://sourceforge.net/projects/dvipng/}. The La@TeX{} header that
+will be used when processing a fragment can be configured with the
+variable @code{org-format-latex-header}.
La@TeX{} fragments don't need any special marking at all. The following
-snippets will be identified as LaTeX source code:
+snippets will be identified as La@TeX{} source code:
@itemize @bullet
@item
Environments of any kind. The only requirement is that the
@@ -4635,7 +5557,7 @@ setting is active:
@cindex CDLaTeX
CDLaTeX-mode is a minor mode that is normally used in combination with a
-major LaTeX mode like AUCTeX in order to speed-up insertion of
+major La@TeX{} mode like AUCTeX in order to speed-up insertion of
environments and math templates. Inside Org-mode, you can make use of
some of the features of cdlatex-mode. You need to install
@file{cdlatex.el} and @file{texmathp.el} (the latter comes also with
@@ -4658,7 +5580,7 @@ Environment templates can be inserted with @kbd{C-c @{}.
@item
@kindex @key{TAB}
The @key{TAB} key will do template expansion if the cursor is inside a
-LaTeX fragment@footnote{Org-mode has a method to test if the cursor is
+La@TeX{} fragment@footnote{Org-mode has a method to test if the cursor is
inside such a fragment, see the documentation of the function
@code{org-inside-LaTeX-fragment-p}.}. For example, @key{TAB} will
expand @code{fr} to @code{\frac@{@}@{@}} and position the cursor
@@ -4671,7 +5593,7 @@ To get a list of all abbreviations, type @kbd{M-x cdlatex-command-help}.
@item
@kindex _
@kindex ^
-Pressing @kbd{_} and @kbd{^} inside a LaTeX fragment will insert these
+Pressing @kbd{_} and @kbd{^} inside a La@TeX{} fragment will insert these
characters together with a pair of braces. If you use @key{TAB} to move
out of the braces, and if the braces surround only a single character or
macro, they are removed again (depending on the variable
@@ -4679,7 +5601,7 @@ macro, they are removed again (depending on the variable
@item
@kindex `
Pressing the backquote @kbd{`} followed by a character inserts math
-macros, also outside LaTeX fragments. If you wait more than 1.5 seconds
+macros, also outside La@TeX{} fragments. If you wait more than 1.5 seconds
after the backquote, a help window will pop up.
@item
@kindex '
@@ -4698,11 +5620,12 @@ Org-mode documents can be exported into a variety of other formats. For
printing and sharing of notes, ASCII export produces a readable and
simple version of an Org-mode file. HTML export allows you to publish a
notes file on the web, while the XOXO format provides a solid base for
-exchange with a broad range of other applications. To incorporate
-entries with associated times like deadlines or appointments into a
-desktop calendar program like iCal, Org-mode can also produce extracts
-in the iCalendar format. Currently Org-mode only supports export, not
-import of these different formats.
+exchange with a broad range of other applications. La@TeX{} export lets
+you use Org-mode and its structured editing functions to easily create
+La@TeX{} files. To incorporate entries with associated times like
+deadlines or appointments into a desktop calendar program like iCal,
+Org-mode can also produce extracts in the iCalendar format. Currently
+Org-mode only supports export, not import of these different formats.
When exporting, Org-mode uses special conventions to enrich the output
produced. @xref{Text interpretation}, for more details.
@@ -4718,6 +5641,7 @@ command.
@menu
* ASCII export:: Exporting to plain ASCII
* HTML export:: Exporting to HTML
+* LaTeX export:: Exporting to LaTeX
* XOXO export:: Exporting to XOXO
* iCalendar export:: Exporting in iCalendar format
* Text interpretation:: How the exporter looks at the file
@@ -4736,10 +5660,12 @@ file.
@table @kbd
@kindex C-c C-e a
@item C-c C-e a
-Export as ASCII file. If there is an active region, only the region
-will be exported. For an org file @file{myfile.org}, the ASCII file
+Export as ASCII file. For an org file @file{myfile.org}, the ASCII file
will be @file{myfile.txt}. The file will be overwritten without
-warning.
+warning. If there is an active region, only the region will be
+exported. If the selected region is a single tree, the tree head will
+become the document title. If the tree head entry has or inherits an
+EXPORT_FILE_NAME property, that name will be used for the export.
@kindex C-c C-e v a
@item C-c C-e v a
Export only the visible part of the document.
@@ -4764,7 +5690,7 @@ the body text. Any indentation larger than this is adjusted to preserve
the layout relative to the first line. Should there be lines with less
indentation than the first, these are left alone.
-@node HTML export, XOXO export, ASCII export, Exporting
+@node HTML export, LaTeX export, ASCII export, Exporting
@section HTML export
@cindex HTML export
@@ -4773,14 +5699,14 @@ HTML formatting, in ways similar to John Grubers @emph{markdown}
language, but with additional support for tables.
@menu
-* Export commands:: How to invode HTML export
+* HTML Export commands:: How to invoke LaTeX export
* Quoting HTML tags:: Using direct HTML in Org-mode
-* Links:: How hyperlinks get transferred to HTML
-* Images:: To inline or not to inline?
-* CSS support:: Style specifications
+* Links:: Transformation of links for HTML
+* Images:: How to include images
+* CSS support:: Changing the appearence of the output
@end menu
-@node Export commands, Quoting HTML tags, HTML export, HTML export
+@node HTML Export commands, Quoting HTML tags, HTML export, HTML export
@subsection HTML export commands
@cindex region, active
@@ -4789,15 +5715,40 @@ language, but with additional support for tables.
@table @kbd
@kindex C-c C-e h
@item C-c C-e h
-Export as HTML file @file{myfile.html}.
+Export as HTML file @file{myfile.html}. For an org file
+@file{myfile.org}, the ASCII file will be @file{myfile.html}. The file
+will be overwritten without warning. If there is an active region, only
+the region will be exported. If the selected region is a single tree,
+the tree head will become the document title. If the tree head entry
+has or inherits an EXPORT_FILE_NAME property, that name will be used for
+the export.
@kindex C-c C-e b
@item C-c C-e b
-Export as HTML file and open it with a browser.
+Export as HTML file and immediately open it with a browser.
+@kindex C-c C-e H
+@item C-c C-e H
+Export to a temporary buffer, do not create a file.
+@kindex C-c C-e R
+@item C-c C-e H
+Export the active region to a temporary buffer. With prefix arg, do not
+produce file header and foot, but just the plain HTML section for the
+region. This is good for cut-and-paste operations.
@kindex C-c C-e v h
@kindex C-c C-e v b
+@kindex C-c C-e v H
+@kindex C-c C-e v R
@item C-c C-e v h
@item C-c C-e v b
+@item C-c C-e v H
+@item C-c C-e v R
Export only the visible part of the document.
+@item M-x org-export-region-as-html
+Convert the region to HTML under the assumption that it was org-mode
+syntax before. This is a global command that can be invoked in any
+buffer.
+@item M-x org-replace-region-by-HTML
+Replace the active region (assumed to be in Org-mode syntax) by HTML
+code.
@end table
@cindex headline levels, for exporting
@@ -4813,7 +5764,7 @@ at a different level, specify it with a prefix argument. For example,
@noindent
creates two levels of headings and does the rest as items.
-@node Quoting HTML tags, Links, Export commands, HTML export
+@node Quoting HTML tags, Links, HTML Export commands, HTML export
@subsection Quoting HTML tags
Plain @samp{<} and @samp{>} are always transformed to @samp{&lt;} and
@@ -4917,7 +5868,78 @@ section in the buffer.
@c FIXME: More about header and footer styles
@c FIXME: Talk about links and targets.
-@node XOXO export, iCalendar export, HTML export, Exporting
+@node LaTeX export, XOXO export, HTML export, Exporting
+@section LaTeX export
+@cindex LaTeX export
+
+Org-mode contains a La@TeX{} exporter written by Bastien Guerry.
+
+@menu
+* LaTeX export commands:: How to invoke LaTeX export
+* Quoting LaTeX code:: Incorporating literal LaTeX code
+@end menu
+
+@node LaTeX export commands, Quoting LaTeX code, LaTeX export, LaTeX export
+@subsection LaTeX export commands
+
+@table @kbd
+@kindex C-c C-e l
+@item C-c C-e l
+Export as La@TeX{} file @file{myfile.tex}.
+@kindex C-c C-e L
+@item C-c C-e L
+Export to a temporary buffer, do not create a file.
+@kindex C-c C-e v l
+@kindex C-c C-e v L
+@item C-c C-e v l
+@item C-c C-e v L
+Export only the visible part of the document.
+@item M-x org-export-region-as-latex
+Convert the region to La@TeX{} under the assumption that it was org-mode
+syntax before. This is a global command that can be invoked in any
+buffer.
+@item M-x org-replace-region-by-latex
+Replace the active region (assumed to be in Org-mode syntax) by La@TeX{}
+code.
+@end table
+
+@cindex headline levels, for exporting
+In the exported version, the first 3 outline levels will become
+headlines, defining a general document structure. Additional levels
+will be exported as description lists. The exporter can ignore them or
+convert them to a custom string depending on
+@code{org-latex-low-levels}.
+
+If you want that transition to occur at a different level, specify it
+with a prefix argument. For example,
+
+@example
+@kbd{C-2 C-c C-e l}
+@end example
+
+@noindent
+creates two levels of headings and does the rest as items.
+
+@node Quoting LaTeX code, , LaTeX export commands, LaTeX export
+@subsection Quoting LaTeX code
+
+Embedded La@TeX{} as described in @ref{Embedded LaTeX} will be correctly
+inserted into the La@TeX{} file. Forthermore, you can add special code
+that should only be present in La@TeX{} export with the following
+constructs:
+
+@example
+#+LaTeX: Literal LaTeX code for export
+@end example
+
+@noindent or
+
+@example
+#+BEGIN_LaTeX
+All lines between these markers are exported literally
+#+END_LaTeX
+@end example
+@node XOXO export, iCalendar export, LaTeX export, Exporting
@section XOXO export
@cindex XOXO export
@@ -4975,19 +5997,20 @@ in order to produce better output.
@menu
* Comment lines:: Some lines will not be exported
+* Initial text:: Text before the first headline
+* Footnotes:: Numbers like [1]
* Enhancing text:: Subscripts, symbols and more
* Export options:: How to influence the export settings
@end menu
-@node Comment lines, Enhancing text, Text interpretation, Text interpretation
+@node Comment lines, Initial text, Text interpretation, Text interpretation
@subsection Comment lines
@cindex comment lines
@cindex exporting, not
Lines starting with @samp{#} in column zero are treated as comments
and will never be exported. Also entire subtrees starting with the
-word @samp{COMMENT} will never be exported. Finally, any text before
-the first headline will not be exported either.
+word @samp{COMMENT} will never be exported.
@table @kbd
@kindex C-c ;
@@ -4995,15 +6018,78 @@ the first headline will not be exported either.
Toggle the COMMENT keyword at the beginning of an entry.
@end table
-@node Enhancing text, Export options, Comment lines, Text interpretation
+@node Initial text, Footnotes, Comment lines, Text interpretation
+@subsection Text before the first headline
+
+Org-mode normally ignores any text before the first headline when
+exporting, leaving this region for internal links to speed up navigation
+etc. However, in publishing-oriented files, you might want to have some
+text before the first headline, like a small introduction, special HTML
+code with a navigation bar, etc. You can ask to have this part of the
+file exported as well by setting the variable
+@code{org-export-skip-text-before-1st-heading} to @code{nil}. On a
+per-file basis, you can get the same effect with
+
+@example
+#+OPTIONS: skip:nil
+@end example
+
+The text before the first headline will be fully processed
+(@pxref{Enhancing text}), and the first non-comment line becomes the
+title of the exported document. If you need to include literal HTML,
+use the special constructs described in @ref{Quoting HTML tags}. The
+table of contents is normally inserted directly before the first
+headline of the file. If you would like to get it to a different
+location, insert the string @code{[TABLE-OF-CONTENTS]} on a line by
+itself at the desired location.
+
+Finally, if you want to use the space before the first headline for
+internal purposes, but @emph{still} want to place something before the
+first headline when exporting the file, you can use the @code{#+TEXT}
+construct:
+
+@example
+#+OPTIONS: skip:t
+#+TEXT: This text will go before the *first* headline.
+#+TEXT: We place the table of contents here:
+#+TEXT: [TABLE-OF-CONTENTS]
+#+TEXT: This goes between the table of contents and the first headline
+@end example
+
+@node Footnotes, Enhancing text, Initial text, Text interpretation
+@subsection Footnotes
+@cindex footnotes
+@cindex @file{footnote.el}
+
+Numbers in square brackets are treated as footnotes, so that you can use
+the Emacs package @file{footnote.el} to create footnotes. For example:
+
+@example
+The org-mode homepage[1] clearly needs help from
+a good web designer.
+
+[1] The link is: http://www.astro.uva.nl/~dominik/Tools/org
+@end example
+
+@noindent
+@kindex C-c !
+Note that the @file{footnote} package uses @kbd{C-c !} to invoke its
+commands. This binding conflicts with the org-mode command for
+inserting inactive time stamps. You could use the variable
+@code{footnote-prefix} to switch footnotes commands to another key. Or,
+if you are too used to this binding, you could use
+@code{org-replace-disputed-keys} and @code{org-disputed-keys} to change
+the settings in Org-mode.
+
+@node Enhancing text, Export options, Footnotes, Text interpretation
@subsection Enhancing text for export
@cindex enhancing text
@cindex richer text
Some of the export backends of Org-mode allow for sophisticated text
-formatting, this is true in particular for the HTML backend. Org-mode
-has a number of typing conventions that allow to produce a richly
-formatted output.
+formatting, this is true in particular for the HTML and La@TeX{}
+backends. Org-mode has a number of typing conventions that allow to
+produce a richly formatted output.
@itemize @bullet
@@ -5019,7 +6105,9 @@ backend supports lists. See @xref{Plain lists}.
@cindex italic text
@item
You can make words @b{*bold*}, @i{/italic/}, _underlined_,
-@code{=code=}, and @samp{+strikethrough+}.
+@code{=code=}, and even @samp{+strikethrough+}@footnote{but remember
+that strikethrough is typographically evil and should @i{never} be
+used.}.
@cindex horizontal rules, in exported files
@item
@@ -5042,8 +6130,8 @@ separator line will be formatted as table header fields.
@item
If a headline starts with the word @samp{QUOTE}, the text below the
headline will be typeset as fixed-width, to allow quoting of computer
-codes etc. Lines starting with @samp{:} are also typeset in
-fixed-width font.
+codes etc. Lines starting with @samp{:} are also typeset in fixed-width
+font.
@table @kbd
@kindex C-c :
@item C-c :
@@ -5057,7 +6145,7 @@ this position.
@end itemize
If these conversions conflict with your habits of typing ASCII text,
-they can all be turned off with corresponding variables (see the
+they can all be turned off with corresponding variables. See the
customization group @code{org-export-general}, and the following section
which explains how to set export options with special lines in a
buffer.
@@ -5088,7 +6176,7 @@ Insert template with export options, see example below.
#+LANGUAGE: language for HTML, e.g. @samp{en} (@code{org-export-default-language})
#+TEXT: Some descriptive text to be inserted at the beginning.
#+TEXT: Several lines may be given.
-#+OPTIONS: H:2 num:t toc:t \n:nil @@:t ::t |:t ^:t *:nil TeX:t LaTeX:t
+#+OPTIONS: H:2 num:t toc:t \n:nil @@:t ::t |:t ^:t f:t TeX:t ...
@end example
@noindent
@@ -5102,37 +6190,54 @@ you can:
@cindex fixed-width sections
@cindex tables
@cindex @TeX{}-like syntax for sub- and superscripts
+@cindex footnotes
@cindex emphasized text
@cindex @TeX{} macros
@cindex La@TeX{} fragments
+@cindex author info, in export
+@cindex time info, in export
@example
-H: @r{set the number of headline levels for export}
-num: @r{turn on/off section-numbers}
-toc: @r{turn on/off table of contents, or set level limit (integer)}
-\n: @r{turn on/off linebreak-preservation}
-@@: @r{turn on/off quoted HTML tags}
-:: @r{turn on/off fixed-width sections}
-|: @r{turn on/off tables}
-^: @r{turn on/off @TeX{}-like syntax for sub- and superscripts.}
-*: @r{turn on/off emphasized text (bold, italic, underlined)}
-TeX: @r{turn on/off simple @TeX{} macros in plain text}
-LaTeX: @r{turn on/off La@TeX{} fragments}
+H: @r{set the number of headline levels for export}
+num: @r{turn on/off section-numbers}
+toc: @r{turn on/off table of contents, or set level limit (integer)}
+\n: @r{turn on/off linebreak-preservation}
+@@: @r{turn on/off quoted HTML tags}
+:: @r{turn on/off fixed-width sections}
+|: @r{turn on/off tables}
+^: @r{turn on/off @TeX{}-like syntax for sub- and superscripts. If}
+ @r{you write "^:@{@}", @code{a_@{b@}} will be interpreted, but}
+ @r{the simple @code{a_b} will be left as it is.}
+f: @r{turn on/off foototes like this[1].}
+*: @r{turn on/off emphasized text (bold, italic, underlined)}
+TeX: @r{turn on/off simple @TeX{} macros in plain text}
+LaTeX: @r{turn on/off La@TeX{} fragments}
+skip: @r{turn on/off skipping the text before the first heading}
+author: @r{turn on/off inclusion of author name/email into exported file}
+timestamp: @r{turn on/off inclusion creation time into exported file}
@end example
+These options take effect in both the HTML and La@TeX{} export, except
+for @code{TeX} and @code{LaTeX}, which are respectively @code{t} and
+@code{nil} for the La@TeX{} export.
+
@node Publishing, Miscellaneous, Exporting, Top
@chapter Publishing
@cindex publishing
-Org-mode includes@footnote{@file{org-publish.el} is not yet part of
-Emacs, so if you are using @file{org.el} as it comes with Emacs, you
-need to download this file separately. Also make sure org.el is at
-least version 4.27.} a publishing management system
-that allows you to configure automatic HTML conversion of
-@emph{projects} composed of interlinked org files. This system is
-called @emph{org-publish}. You can also configure org-publish to
-automatically upload your exported HTML pages and related attachments,
-such as images and source code files, to a web server. Org-publish turns
-org-mode into a web-site authoring tool.
+Org-mode includes@footnote{@file{org-publish.el} is not distributed with
+Emacs 21, if you are still using Emacs 21, you need you need to download
+this file separately.} a publishing management system that allows you to
+configure automatic HTML conversion of @emph{projects} composed of
+interlinked org files. This system is called @emph{org-publish}. You can
+also configure org-publish to automatically upload your exported HTML
+pages and related attachments, such as images and source code files, to
+a web server. Org-publish turns org-mode into a web-site authoring tool.
+
+You can also use Org-publish to convert files into La@TeX{}, or even
+combine HTML and La@TeX{} conversion so that files are available in both
+formats on the server@footnote{Since La@TeX{} files on a server are not
+that helpful, you surely want to perform further conversion on them --
+e.g. convert them to @code{PDF} format.}.
Org-publish has been contributed to Org-mode by David O'Toole.
@@ -5235,9 +6340,11 @@ Publishing means that a file is copied to the destination directory and
possibly transformed in the process. The default transformation is to
export Org-mode files as HTML files, and this is done by the function
@code{org-publish-org-to-html} which calls the HTML exporter
-(@pxref{HTML export}). Other files like images only need to be copied
-to the publishing destination. For non-Org-mode files, you need to
-specify the publishing function.
+(@pxref{HTML export}). But you also can publish your files in La@TeX{} by
+using the function @code{org-publish-org-to-latex} instead. Other files
+like images only need to be copied to the publishing destination. For
+non-Org-mode files, you need to specify the publishing function.
+
@multitable @columnfractions 0.3 0.7
@item @code{:publishing-function}
@@ -5254,13 +6361,13 @@ provides one for attachments (files that only need to be copied):
@code{org-publish-attachment}.
@node Publishing options, Publishing links, Publishing action, Configuration
-@subsection Options for the HTML exporter
+@subsection Options for the HTML/LaTeX exporters
@cindex options, for publishing
The property list can be used to set many export options for the HTML
-exporter. In most cases, these properties correspond to user variables
-in Org-mode. The table below lists these properties along with the
-variable they belong to. See the documentation string for the
+and La@TeX{} exporters. In most cases, these properties correspond to user
+variables in Org-mode. The table below lists these properties along
+with the variable they belong to. See the documentation string for the
respective variable for details.
@multitable @columnfractions 0.3 0.7
@@ -5292,9 +6399,14 @@ respective variable for details.
@item @code{:email} @tab @code{user-mail-address}
@end multitable
+Most of the @code{org-export-with-*} variables have the same effect in
+both HTML and La@TeX{} exporters, except for @code{:TeX-macros} and
+@code{:LaTeX-fragments}, respectively @code{nil} and @code{t} in the
+La@TeX{} export.
+
When a property is given a value in org-publish-project-alist, its
setting overrides the value of the corresponding user variable (if any)
-during publishing. options set within a file (@pxref{Export
+during publishing. Options set within a file (@pxref{Export
options}), however, override everything.
@node Publishing links, Project page index, Publishing options, Configuration
@@ -5444,13 +6556,13 @@ Once org-publish is properly configured, you can publish with the
following functions:
@table @kbd
-@item C-c C-e c
+@item C-c C-e C
Prompt for a specific project and publish all files that belong to it.
-@item C-c C-e p
+@item C-c C-e P
Publish the project containing the current file.
-@item C-c C-e f
+@item C-c C-e F
Publish only the current file.
-@item C-c C-e a
+@item C-c C-e A
Publish all projects.
@end table
@@ -5479,6 +6591,7 @@ force publishing of all files by giving a prefix argument.
@cindex completion, of dictionary words
@cindex completion, of option keywords
@cindex completion, of tags
+@cindex completion, of property keys
@cindex completion, of link abbreviations
@cindex @TeX{} symbol completion
@cindex TODO keywords completion
@@ -5504,10 +6617,14 @@ After @samp{\}, complete @TeX{} symbols supported by the exporter.
After @samp{*}, complete headlines in the current buffer so that they
can be used in search links like @samp{[[*find this headline]]}.
@item
-After @samp{:}, complete tags. The list of tags is taken from the
-variable @code{org-tag-alist} (possibly set through the @samp{#+TAGS}
-in-buffer option, @pxref{Setting tags}), or it is created dynamically
-from all tags used in the current buffer.
+After @samp{:} in a headline, complete tags. The list of tags is taken
+from the variable @code{org-tag-alist} (possibly set through the
+@samp{#+TAGS} in-buffer option, @pxref{Setting tags}), or it is created
+dynamically from all tags used in the current buffer.
+@item
+After @samp{:} and not in a headline, complete property keys. The list
+of keys is constructed dynamically from all keys used in the current
+buffer.
@item
After @samp{[}, complete link abbreviations (@pxref{Link abbreviations}).
@item
@@ -5553,8 +6670,37 @@ activate the changes immediately. Otherwise they become effective only
when the file is visited again in a new Emacs session.
@table @kbd
+@item #+ARCHIVE: %s_done::
+This line sets the archive location for the agenda file. It applies for
+all subsequent lines until the next @samp{#+ARCHIVE} line, or the end
+of the file. The first such line also applies to any entries before it.
+The corresponding variable is @code{org-archive-location}.
+@item #+CATEGORY:
+This line sets the category for the agenda file. The category applies
+for all subsequent lines until the next @samp{#+CATEGORY} line, or the
+end of the file. The first such line also applies to any entries before it.
+@item #+COLUMNS: %25ITEM .....
+Set the default format for columns view. This format applies when
+columns view is invoked in location where no COLUMNS property applies.
+@item #+CONSTANTS: name1=value1 ...
+Set file-local values for constants to be used in table formulas. This
+line set the local variable @code{org-table-formula-constants-local}.
+The global version of theis variable is
+@code{org-table-formula-constants}.
+corresponding
+@item #+LINK: linkword replace
+These lines (several are allowed) specify link abbreviations.
+@xref{Link abbreviations}. The corresponding variable is
+@code{org-link-abbrev-alist}.
+@item #+PRIORITIES: highest lowest default
+This line sets the limits and the default for the priorities. All three
+must be either letters A-Z or numbers 0-9. The highest priority must
+have a lower ASCII number that the lowest priority.
+@item #+PROPERTY: Property_Name Value
+This line sets a default inheritance value for entries in the current
+buffer, most useful for specifying the allowed values of a property.
@item #+STARTUP:
-This line sets options to be used at startup of org-mode, when an
+This line sets options to be used at startup of Org-mode, when an
Org-mode file is being visited. The first set of options deals with the
initial visibility of the outline tree. The corresponding variable for
global default settings is @code{org-startup-folded}, with a default
@@ -5584,11 +6730,15 @@ Logging TODO state changes and clock intervals (variable
@cindex @code{lognotedone}, STARTUP keyword
@cindex @code{lognoteclock-out}, STARTUP keyword
@cindex @code{lognotestate}, STARTUP keyword
+@cindex @code{logrepeat}, STARTUP keyword
+@cindex @code{nologrepeat}, STARTUP keyword
@example
logging @r{record a timestamp when an item is marked DONE}
nologging @r{don't record when items are marked DONE}
lognotedone @r{record timestamp and a note when DONE}
-lognotestate @r{record timestamp, note when TODO state changes}
+lognotestate @r{record timestamp and a note when TODO state changes}
+logrepeat @r{record a note when re-instating a repeating item}
+nologrepeat @r{do not record when re-instating repeating item}
lognoteclock-out @r{record timestamp and a note when clocking out}
@end example
Here are the options for hiding leading stars in outline headings. The
@@ -5612,32 +6762,27 @@ To turn on custom format overlays over time stamps (variables
@example
customtime @r{overlay custom time format}
@end example
-@item #+SEQ_TODO: #+TYP_TODO:
-These lines set the TODO keywords and their interpretation in the
-current file. The corresponding variables are @code{org-todo-keywords}
-and @code{org-todo-interpretation}.
+The following options influence the table spreadsheet (variable
+@code{constants-unit-system}).
+@cindex @code{constcgs}, STARTUP keyword
+@cindex @code{constSI}, STARTUP keyword
+@example
+constcgs @r{@file{constants.el} should use the c-g-s unit system}
+constSI @r{@file{constants.el} should use the SI unit system}
+@end example
@item #+TAGS: TAG1(c1) TAG2(c2)
These lines (several such lines are allowed) specify the legal tags in
this file, and (potentially) the corresponding @emph{fast tag selection}
keys. The corresponding variable is @code{org-tag-alist}.
-@item #+LINK: linkword replace
-These lines (several are allowed) specify link abbreviations.
-@xref{Link abbreviations}. The corresponding variable is
-@code{org-link-abbrev-alist}.
-@item #+CATEGORY:
-This line sets the category for the agenda file. The category applies
-for all subsequent lines until the next @samp{#+CATEGORY} line, or the
-end of the file. The first such line also applies to any entries before it.
-@item #+ARCHIVE: %s_done::
-This line sets the archive location for the agenda file. It applies for
-all subsequent lines until the next @samp{#+CATEGORY} line, or the end
-of the file. The first such line also applies to any entries before it.
-The corresponding variable is @code{org-archive-location}.
@item #+TBLFM:
This line contains the formulas for the table directly above the line.
@item #+TITLE:, #+AUTHOR:, #+EMAIL:, #+LANGUAGE:, #+TEXT:, #+OPTIONS:
These lines provide settings for exporting files. For more details see
@ref{Export options}.
+@item #+SEQ_TODO: #+TYP_TODO:
+These lines set the TODO keywords and their interpretation in the
+current file. The corresponding variables are @code{org-todo-keywords}
+and @code{org-todo-interpretation}.
@end table
@node The very busy C-c C-c key, Clean view, In-buffer settings, Miscellaneous
@@ -5677,6 +6822,9 @@ default location.
If the cursor is on a @code{<<<target>>>}, update radio targets and
corresponding links in this buffer.
@item
+If the cursor is in a property line or at the start or end of a property
+drawer, offer property commands.
+@item
If the cursor is in a plain list item with a checkbox, toggle the status
of the checkbox.
@item
@@ -5816,10 +6964,12 @@ rather use @kbd{C-c .} to re-insert the timestamp.
@item @kbd{S-@key{RET}} @tab @kbd{C-c C-x c} @tab
@item @kbd{M-@key{RET}} @tab @kbd{C-c C-x m} @tab @kbd{@key{Esc} @key{RET}}
@item @kbd{M-S-@key{RET}} @tab @kbd{C-c C-x M} @tab
-@item @kbd{S-@key{left}} @tab @kbd{C-c C-x @key{left}} @tab
-@item @kbd{S-@key{right}} @tab @kbd{C-c C-x @key{right}} @tab
-@item @kbd{S-@key{up}} @tab @kbd{C-c C-x @key{up}} @tab
-@item @kbd{S-@key{down}} @tab @kbd{C-c C-x @key{down}} @tab
+@item @kbd{S-@key{left}} @tab @kbd{C-c @key{left}} @tab
+@item @kbd{S-@key{right}} @tab @kbd{C-c @key{right}} @tab
+@item @kbd{S-@key{up}} @tab @kbd{C-c @key{up}} @tab
+@item @kbd{S-@key{down}} @tab @kbd{C-c @key{down}} @tab
+@item @kbd{C-S-@key{left}} @tab @kbd{C-c C-x @key{left}} @tab
+@item @kbd{C-S-@key{right}} @tab @kbd{C-c C-x @key{right}} @tab
@end multitable
@node Interaction, Bugs, TTY keys, Miscellaneous
@@ -5887,7 +7037,7 @@ to execute Org-mode-related commands, leave the table.
@item C-c C-c
Recognize @file{table.el} table. Works when the cursor is in a
table.el table.
-
+@c
@kindex C-c ~
@item C-c ~
Insert a table.el table. If there is already a table at point, this
@@ -5897,6 +7047,10 @@ format. See the documentation string of the command
possible.
@end table
@file{table.el} is part of Emacs 22.
+@cindex @file{footnote.el}
+@item @file{footnote.el} by Steven L. Baur
+Org-mode recognizes numerical footnotes as provided by this package
+(@pxref{Footnotes}).
@end table
@node Conflicts, , Cooperation, Interaction
@@ -5921,13 +7075,12 @@ used by CUA-mode (as well as pc-select-mode and s-region-mode) to
select and extend the region. If you want to use one of these
packages along with Org-mode, configure the variable
@code{org-CUA-compatible}. When set, Org-mode will move the following
-keybindings in org-mode files, and in the agenda buffer (but not
+keybindings in Org-mode files, and in the agenda buffer (but not
during date selection).
@example
S-UP -> M-p S-DOWN -> M-n
S-LEFT -> M-- S-RIGHT -> M-+
-S-RET -> C-S-RET
@end example
Yes, these are unfortunately more difficult to remember. If you want
@@ -5937,6 +7090,16 @@ to have other replacement keys, look at the variable
@cindex @file{windmove.el}
Also this package uses the @kbd{S-<cursor>} keys, so everything written
in the paragraph above about CUA mode also applies here.
+
+@cindex @file{footnote.el}
+@item @file{footnote.el} by Steven L. Baur
+Org-mode supports the syntax of the footnote package, but only the
+numerical footnote markers. Also, the default key for footnote
+commands, @kbd{C-c !} is already used by Org-mode. You could use the
+variable @code{footnote-prefix} to switch footnotes commands to another
+key. Or, you could use @code{org-replace-disputed-keys} and
+@code{org-disputed-keys} to change the settings in Org-mode.
+
@end table
@@ -5987,12 +7150,14 @@ Org-mode.
@menu
* Extensions:: Existing 3rd-part extensions
+* Adding hyperlink types:: New custom link types
* Tables in arbitrary syntax:: Orgtbl for LaTeX and other programs
* Dynamic blocks:: Automatically filled blocks
* Special agenda views:: Customized views
+* Using the property API:: Writing programs that use entry properties
@end menu
-@node Extensions, Tables in arbitrary syntax, Extensions and Hacking, Extensions and Hacking
+@node Extensions, Adding hyperlink types, Extensions and Hacking, Extensions and Hacking
@section Third-party extensions for Org-mode
@cindex extension, third-party
@@ -6036,14 +7201,111 @@ Remind. @url{http://www.cognition.ens.fr/~guerry/u/org2rem.el}.
@page
-@node Tables in arbitrary syntax, Dynamic blocks, Extensions, Extensions and Hacking
+@node Adding hyperlink types, Tables in arbitrary syntax, Extensions, Extensions and Hacking
+@section Adding hyperlink types
+@cindex hyperlinks, adding new types
+
+Org-mode has a large number of hyperlink types built-in
+(@pxref{Hyperlinks}). If you would like to add new link types, it
+provides an interface for doing so. Lets look at an example file
+@file{org-man.el} that will add support for creating links like
+@samp{[[man:printf][The printf manpage]]} to show unix manual pages inside
+emacs:
+
+@lisp
+;;; org-man.el - Support for links to manpages in Org-mode
+
+(require 'org)
+
+(org-add-link-type "man" 'org-man-open)
+(add-hook 'org-store-link-functions 'org-man-store-link)
+
+(defcustom org-man-command 'man
+ "The Emacs command to be used to display a man page."
+ :group 'org-link
+ :type '(choice (const man) (const woman)))
+
+(defun org-man-open (path)
+ "Visit the manpage on PATH.
+PATH should be a topic that can be thrown at the man command."
+ (funcall org-man-command path))
+
+(defun org-man-store-link ()
+ "Store a link to a manpage."
+ (when (memq major-mode '(Man-mode woman-mode))
+ ;; This is a man page, we do make this link
+ (let* ((page (org-man-get-page-name))
+ (link (concat "man:" page))
+ (description (format "Manpage for %s" page)))
+ (org-store-link-props
+ :type "man"
+ :link link
+ :description description))))
+
+(defun org-man-get-page-name ()
+ "Extract the page name from the buffer name."
+ ;; This works for both `Man-mode' and `woman-mode'.
+ (if (string-match " \\(\\S-+\\)\\*" (buffer-name))
+ (match-string 1 (buffer-name))
+ (error "Cannot create link to this man page")))
+
+(provide 'org-man)
+
+;;; org-man.el ends here
+@end lisp
+
+@noindent
+You would activate this new link type in @file{.emacs} with
+
+@lisp
+(require 'org-man)
+@end lisp
+
+@noindent
+Lets go through the file and see what it does.
+@enumerate
+@item
+It does @code{(require 'org)} to make sure that @file{org.el} has been
+loaded.
+@item
+The next line calls @code{org-add-link-type} to define a new link type
+with prefix @samp{man}. The call also contains the name of a function
+that will be called to follow such a link.
+@item
+The next line adds a function to @code{org-store-link-functions}, in
+order to allow the command @kbd{C-c l} to record a useful link in a
+buffer displaying a man page.
+@end enumerate
+
+The rest of the file defines the necessary variables and functions.
+First there is a customization variable that determines which emacs
+command should be used to display manpages. There are two options,
+@code{man} and @code{woman}. Then the function to follow a link is
+defined. It gets the link path as an argument - in this case the link
+path is just a topic for the manual command. The function calls the
+value of @code{org-man-command} to display the man page.
+
+Finally the function @code{org-man-store-link} is defined. When you try
+to store a link with @kbd{C-c l}, also this function will be called to
+try to make a link. The function must first decide if it is supposed to
+create the link for this buffer type, we do this by checking the value
+of the variable @code{major-mode}. If not, the function must exit and
+retunr the value @code{nil}. If yes, the link is created by getting the
+manual tpoic from the buffer name and prefixing it with the string
+@samp{man:}. Then it must call the command @code{org-store-link-props}
+and set the @code{:type} and @code{:link} properties. Optionally you
+can also set the @code{:description} property to provide a default for
+the link description when the link is later inserted into tan Org-mode
+buffer with @kbd{C-c C-l}.
+
+@node Tables in arbitrary syntax, Dynamic blocks, Adding hyperlink types, Extensions and Hacking
@section Tables in arbitrary syntax
@cindex tables, in other modes
@cindex orgtbl-mode
Since Orgtbl-mode can be used as a minor mode in arbitrary buffers, a
frequent feature request has been to make it work with native tables in
-specific languages, for example LaTeX. However, this is extremely hard
+specific languages, for example La@TeX{}. However, this is extremely hard
to do in a general way, would lead to a customization nightmare, and
would take away much of the simplicity of the Orgtbl-mode table editor.
@@ -6105,7 +7367,7 @@ additional columns.
@noindent
The one problem remaining is how to keep the source table in the buffer
without disturbing the normal workings of the file, for example during
-compilation of a C file or processing of a LaTeX file. There are a
+compilation of a C file or processing of a La@TeX{} file. There are a
number of different solutions:
@itemize @bullet
@@ -6116,7 +7378,7 @@ language. For example, in C-mode you could wrap the table between
@item
Sometimes it is possible to put the table after some kind of @i{END}
statement, for example @samp{\bye} in TeX and @samp{\end@{document@}}
-in LaTeX.
+in La@TeX{}.
@item
You can just comment the table line by line whenever you want to process
the file, and uncomment it whenever you need to edit the table. This
@@ -6129,11 +7391,11 @@ key.
@subsection A LaTeX example
@cindex LaTeX, and orgtbl-mode
-The best way to wrap the source table in LaTeX is to use the
+The best way to wrap the source table in La@TeX{} is to use the
@code{comment} environment provided by @file{comment.sty}. It has to be
activated by placing @code{\usepackage@{comment@}} into the document
header. Orgtbl-mode can insert a radio table skeleton@footnote{By
-default this works only for LaTeX, HTML, and TeXInfo. Configure the
+default this works only for La@TeX{}, HTML, and TeXInfo. Configure the
variable @code{orgtbl-radio-tables} to install templates for other
modes.} with the command @kbd{M-x orgtbl-insert-radio-table}. You will
be prompted for a table name, lets say we use @samp{salesfigures}. You
@@ -6150,7 +7412,7 @@ will then get the following template:
@noindent
The @code{#+ORGTBL: SEND} line tells orgtbl-mode to use the function
-@code{orgtbl-to-latex} to convert the table into LaTeX and to put it
+@code{orgtbl-to-latex} to convert the table into La@TeX{} and to put it
into the receiver location with name @code{salesfigures}. You may now
fill in the table, feel free to use the spreadsheet features@footnote{If
the @samp{#+TBLFM} line contains an odd number of dollar characters,
@@ -6204,7 +7466,7 @@ Month & \multicolumn@{1@}@{c@}@{Days@} & Nr.\ sold & per day\\
\end@{comment@}
@end example
-The LaTeX translator function @code{orgtbl-to-latex} is already part of
+The La@TeX{} translator function @code{orgtbl-to-latex} is already part of
Orgtbl-mode. It uses a @code{tabular} environment to typeset the table
and marks horizontal lines with @code{\hline}. Furthermore, it
interprets the following parameters:
@@ -6265,7 +7527,7 @@ As you can see, the properties passed into the function (variable
@var{PARAMS}) are combined with the ones newly defined in the function
(variable @var{PARAMS2}). The ones passed into the function (i.e. the
ones set by the @samp{ORGTBL SEND} line) take precedence. So if you
-would like to use the LaTeX translator, but wanted the line endings to
+would like to use the La@TeX{} translator, but wanted the line endings to
be @samp{\\[2mm]} instead of the default @samp{\\}, you could just
overrule the default with
@@ -6274,7 +7536,7 @@ overrule the default with
@end example
For a new language, you can either write your own converter function in
-analogy with the LaTeX translator, or you can use the generic function
+analogy with the La@TeX{} translator, or you can use the generic function
directly. For example, if you have a language where a table is started
with @samp{!BTBL!}, ended with @samp{!ETBL!}, and where table lines are
started with @samp{!BL!}, ended with @samp{!EL!} and where the field
@@ -6363,7 +7625,7 @@ you could add the function @code{org-update-all-dblocks} to a hook, for
example @code{before-save-hook}. @code{org-update-all-dblocks} is
written in a way that is does nothing in buffers that are not in Org-mode.
-@node Special agenda views, , Dynamic blocks, Extensions and Hacking
+@node Special agenda views, Using the property API, Dynamic blocks, Extensions and Hacking
@section Special Agenda Views
@cindex agenda views, user-defined
@@ -6394,30 +7656,92 @@ search should continue from there.
subtree-end))) ; tag not found, continue after end of subtree
@end lisp
-Furthermore you must write a command that uses @code{let} to temporarily
-put this function into the variable @code{org-agenda-skip-function},
-sets the header string for the agenda buffer, and calls the todo-list
-generator while asking for the specific TODO keyword PROJECT. The
-function must also accept one argument MATCH, but it can choose to
-ignore it@footnote{MATCH must be present in case you want to define a
-custom command for producing this special list. Custom commands always
-supply the MATCH argument, but it can be empty if you do not specify it
-while defining the command(@pxref{Custom agenda
-views}).} (as we do in the example below). Here is the example:
+Now you may use this function in an agenda custom command, for example
+like this:
+
+@lisp
+(org-add-agenda-custom-command
+ '("b" todo "PROJECT"
+ ((org-agenda-skip-function 'my-org-waiting-projects)
+ (org-agenda-overriding-header "Projects waiting for something: "))))
+@end lisp
+
+Note that this also binds @code{org-agenda-overriding-header} to get a
+meaningful header in the agenda view.
+
+You may also put a Lisp form into @code{org-agenda-skip-function}. In
+particular, you may use the functions @code{org-agenda-skip-entry-if}
+and @code{org-agenda-skip-subtree-if} in this form, for example:
+
+@table @code
+@item '(org-agenda-skip-entry-if 'scheduled)
+Skip current entry if it has been scheduled.
+@item '(org-agenda-skip-entry-if 'notscheduled)
+Skip current entry if it has not been scheduled.
+@item '(org-agenda-skip-entry-if 'deadline)
+Skip current entry if it has a deadline.
+@item '(org-agenda-skip-entry-if 'scheduled 'deadline)
+Skip current entry if it has a deadline, or if it is scheduled.
+@item '(org-agenda-skip-entry 'regexp "regular expression")
+Skip current entry if the regular expression contained in the variable
+@code{org-agenda-skip-regexp} matches in the entry.
+@item '(org-agenda-skip-subtree-if 'regexp "regular expression")
+Same as above, but check and skip the entire subtree.
+@end table
+
+Therefore we could also have written the search for WAITING projects
+like this, even without defining a special function:
@lisp
-(defun my-org-waiting-projects (&optional match)
- "Produce a list of projects that contain a WAITING tag.
-MATCH is being ignored."
- (interactive)
- (let ((org-agenda-skip-function 'my-skip-unless-waiting)
- (org-agenda-overriding-header "Projects waiting for something: "))
- ;; make the list
- (org-todo-list "PROJECT")))
+(org-add-agenda-custom-command
+ '("b" todo "PROJECT"
+ ((org-agenda-skip-function '(org-agenda-skip-subtree-if
+ 'regexp ":WAITING:"))
+ (org-agenda-overriding-header "Projects waiting for something: "))))
@end lisp
-@node History and Acknowledgments, GNU Free Documentation License, Extensions and Hacking, Top
+@node Using the property API, , Special agenda views, Extensions and Hacking
+@section Using the property API
+@cindex API, for properties
+@cindex properties, API
+
+Here is a description of the functions that can be used to work with
+properties.
+
+@defun org-entry-properties &optional pom which
+Get all properties of the entry at point-or-marker POM.
+This includes the TODO keyword, the tags, time strings for deadline,
+scheduled, and clocking, and any additional properties defined in the
+entry. The return value is an alist, keys may occur multiple times
+if the property key was used several times.
+POM may also be nil, in which case the current entry is used.
+If WHICH is nil or `all', get all properties. If WHICH is
+`special' or `standard', only get that subclass.
+@end defun
+@defun org-entry-get pom property &optional inherit
+Get value of PROPERTY for entry at point-or-marker POM.
+If INHERIT is non-nil and the entry does not have the property,
+then also check higher levels of the hierarchy.
+@end defun
+
+@defun org-entry-delete pom property
+Delete the property PROPERTY from entry at point-or-marker POM.
+@end defun
+
+@defun org-entry-put pom property value
+Set PROPERTY to VALUE for entry at point-or-marker POM.
+@end defun
+
+@defun org-buffer-property-keys &optional include-specials
+Get all property keys in the current buffer.
+@end defun
+
+@defun org-insert-property-drawer
+Insert a property drawer at point.
+@end defun
+
+@node History and Acknowledgments, Index, Extensions and Hacking, Top
@appendix History and Acknowledgments
@cindex acknowledgments
@cindex history
@@ -6440,7 +7764,7 @@ goals that Org-mode still has today: To create a new, outline-based,
plain text mode with innovative and intuitive editing features, and to
incorporate project planning functionality directly into a notes file.
-Since the first release, hundreds of emails to me or on
+Since the first release, literally thousands of emails to me or on
@code{emacs-orgmode@@gnu.org} have provided a constant stream of bug
reports, feedback, new ideas, and sometimes patches and add-on code.
Many thanks to everyone who has helped to improve this package. I am
@@ -6452,6 +7776,8 @@ let me know.
@itemize @bullet
@item
+@i{Russel Adams} came up with the idea for drawers.
+@item
@i{Thomas Baumann} contributed the code for links to the MH-E email
system.
@item
@@ -6469,7 +7795,9 @@ calculations and improved XEmacs compatibility, in particular by porting
@item
@i{Sacha Chua} suggested to copy some linking code from Planner.
@item
-@i{Eddward DeVilla} proposed and tested checkbox statistics.
+@i{Eddward DeVilla} proposed and tested checkbox statistics. He also
+came up with the idea of properties, and that there should be an API for
+them.
@item
@i{Kees Dullemond} used to edit projects lists directly in HTML and so
inspired some of the early development, including HTML export. He also
@@ -6478,6 +7806,9 @@ asked for a way to narrow wide table columns.
@i{Christian Egli} converted the documentation into TeXInfo format,
patched CSS formatting into the HTML exporter, and inspired the agenda.
@item
+@i{David Emery} provided a patch for custom CSS support in exported
+HTML agendas.
+@item
@i{Nic Ferrier} contributed mailcap and XOXO support.
@item
@i{John Foerch} figured out how to make incremental search show context
@@ -6485,18 +7816,28 @@ around a match in a hidden outline tree.
@item
@i{Niels Giessen} had the idea to automatically archive DONE trees.
@item
-@i{Bastien Guerry} provided extensive feedback and some patches, and
-translated David O'Toole's tutorial into French.
+@i{Bastien Guerry} wrote the La@TeX{} exporter and has been prolific
+with patches, ideas, and bug reports.
+to Org-mode.
@item
@i{Kai Grossjohann} pointed out key-binding conflicts with other packages.
@item
-@i{Shidai Liu} (``Leo'') provided extensive feedback and some patches.
+@i{Scott Jaderholm} proposed footnotes, control over whitespace between
+folded entries, and column view for properties.
+@item
+@i{Shidai Liu} ("Leo") asked for embedded La@TeX{} and tested it. He also
+provided frequent feedback and some patches.
@item
-@i{Leon Liu} asked for embedded LaTeX and tested it.
+@i{Jason F. McBrayer} suggested agenda export to CSV format.
+@item
+@i{Dmitri Minaev} sent a patch to set priority limits on a per-file
+basis.
@item
@i{Stefan Monnier} provided a patch to keep the Emacs-Lisp compiler
happy.
@item
+@i{Rick Moynihan} proposed to allow multiple TODO sequences in a file.
+@item
@i{Todd Neal} provided patches for links to Info files and elisp forms.
@item
@i{Tim O'Callaghan} suggested in-file links, search options for general
@@ -6539,6 +7880,9 @@ subtrees.
@item
@i{Dale Smith} proposed link abbreviations.
@item
+@i{Adam Spiers} asked for global linking commands and inspired the link
+extension system. support mairix.
+@item
@i{David O'Toole} wrote @file{org-publish.el} and drafted the manual
chapter about publishing.
@item
@@ -6557,6 +7901,7 @@ really different beasts in their basic ideas and implementation details.
I later looked at John's code, however, and learned from his
implementation of (i) links where the link itself is hidden and only a
description is shown, and (ii) popping up a calendar to select a date.
+John has also contributed a number of great ideas directly to Org-mode.
@item
@i{Carsten Wimmer} suggested some changes and helped fix a bug in
linking to GNUS.
@@ -6568,12 +7913,8 @@ work on a tty.
and contributed various ideas and code snippets.
@end itemize
-@node GNU Free Documentation License, Index, History and Acknowledgments, Top
-@appendix GNU Free Documentation License
-@include doclicense.texi
-
-@node Index, Key Index, GNU Free Documentation License, Top
+@node Index, Key Index, History and Acknowledgments, Top
@unnumbered Index
@printindex cp
diff --git a/man/pcl-cvs.texi b/doc/misc/pcl-cvs.texi
index 93bd54eb456..5878b65cd25 100644
--- a/man/pcl-cvs.texi
+++ b/doc/misc/pcl-cvs.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
-@setfilename ../info/pcl-cvs
+@setfilename ../../info/pcl-cvs
@settitle PCL-CVS --- Emacs Front-End to CVS
@syncodeindex vr fn
@c %**end of header
diff --git a/man/pgg.texi b/doc/misc/pgg.texi
index 6a175db4cb9..3a171297740 100644
--- a/man/pgg.texi
+++ b/doc/misc/pgg.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/pgg
+@setfilename ../../info/pgg
@set VERSION 0.1
@@ -345,11 +345,11 @@ singleton object wrapped with the luna object system.
Since PGG was designed for accessing and developing PGP functionality,
the architecture had to be designed not just for interoperability but
also for extensiblity. In this chapter we explore the architecture
-while finding out how to write the PGG backend.
+while finding out how to write the PGG back end.
@menu
* Initializing::
-* Backend methods::
+* Back end methods::
* Getting output::
@end menu
@@ -373,12 +373,12 @@ variable @code{pgg-scheme-gpg-instance} and will be reused from now on.
@end lisp
The name of the function must follow the
-regulation---@code{pgg-make-scheme-} follows the backend name.
+regulation---@code{pgg-make-scheme-} follows the back end name.
-@node Backend methods
-@section Backend methods
+@node Back end methods
+@section Back end methods
-In each backend, these methods must be present. The output of these
+In each back end, these methods must be present. The output of these
methods is stored in special buffers (@ref{Getting output}), so that
these methods must tell the status of the execution.
@@ -435,7 +435,7 @@ On success, it returns @code{t}, otherwise @code{nil}.
@node Getting output
@section Getting output
-The output of the backend methods (@ref{Backend methods}) is stored in
+The output of the back end methods (@ref{Back end methods}) is stored in
special buffers, so that these methods must tell the status of the
execution.
diff --git a/man/rcirc.texi b/doc/misc/rcirc.texi
index 6d5319cef4e..f6d807f971f 100644
--- a/man/rcirc.texi
+++ b/doc/misc/rcirc.texi
@@ -1,6 +1,6 @@
\input texinfo
@c %**start of header
-@setfilename ../info/rcirc
+@setfilename ../../info/rcirc
@settitle rcirc Manual
@c %**end of header
diff --git a/man/reftex.texi b/doc/misc/reftex.texi
index a2c0a9689b2..a599081a716 100644
--- a/man/reftex.texi
+++ b/doc/misc/reftex.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
-@setfilename ../info/reftex
+@setfilename ../../info/reftex
@settitle RefTeX User Manual
@synindex ky cp
@syncodeindex vr cp
diff --git a/doc/misc/remember.texi b/doc/misc/remember.texi
new file mode 100644
index 00000000000..41d1777bf5a
--- /dev/null
+++ b/doc/misc/remember.texi
@@ -0,0 +1,406 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename ../../info/remember
+@settitle Remember Manual
+@c %**end of header
+
+@dircategory Emacs
+@direntry
+* Remember: (remember). Simple information manager for Emacs
+@end direntry
+
+@syncodeindex fn cp
+
+@copying
+This manual is for Remember Mode, version 1.9
+
+Copyright @copyright{} 2001, 2004, 2005, 2007 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+Texts. A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+@end quotation
+@end copying
+
+@titlepage
+@title Guide to Remember Mode
+@subtitle a simple information manager
+@subtitle for Emacs and XEmacs
+
+@c The following two commands
+@c start the copyright page.
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@c So the toc is printed at the start
+@contents
+
+@ifnottex
+@node Top, Preface, (dir), (dir)
+@comment node-name, next, previous, up
+@top Remember
+
+@insertcopying
+@end ifnottex
+
+@menu
+* Preface:: About the documentation.
+* Introduction:: What is Remember Mode?
+* Installation:: How to install Remember.
+* Implementation:: How Remember came into existence.
+* Quick Start:: Get started using Remember.
+* Function Reference:: Interactive functions in remember.el.
+* Keystrokes:: Keystrokes bound in Remember Mode.
+* Backends:: Backends for saving notes.
+* GNU Free Documentation License:: The license for this documentation.
+* Concept Index:: Search for terms.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Backends
+
+* Text File:: Saving to a text file.
+* Diary:: Saving to a Diary file.
+* Mailbox:: Saving to a mailbox.
+* Org:: Saving to an Org Mode file.
+
+@end detailmenu
+@end menu
+
+@node Preface, Introduction, Top, Top
+@comment node-name, next, previous, up
+@chapter Preface
+
+This document describes remember-el, which was written by John Wiegley,
+was once maintained by Sacha Chua, and is now maintained by the Emacs
+developers.
+
+This document is a work in progress, and your contribution will be
+greatly appreciated.
+
+@node Introduction, Installation, Preface, Top
+@comment node-name, next, previous, up
+@chapter Introduction
+
+Todo lists, schedules, phone databases... everything we use databases
+for is really just a way to extend the power of our memory, to be able
+to remember what our conscious mind may not currently have access to.
+
+There are many different databases out there---and good ones---which
+this mode is not trying to replace. Rather, it's how that data gets
+there that's the question. Most of the time, we just want to say
+"Remember so-and-so's phone number, or that I have to buy dinner for the
+cats tonight." That's the FACT. How it's stored is really the
+computer's problem. But at this point in time, it's most definitely
+also the user's problem, and sometimes so laboriously so that people
+just let data slip, rather than expend the effort to record it.
+
+``Remember'' is a mode for remembering data. It uses whatever
+back-end is appropriate to record and correlate the data, but its main
+intention is to allow you to express as @emph{little} structure as
+possible up front. If you later want to express more powerful
+relationships between your data, or state assumptions that were at
+first too implicit to be recognized, you can ``study'' the data later
+and rearrange it. But the initial ``just remember this'' impulse
+should be as close to simply throwing the data at Emacs as possible.
+
+Have you ever noticed that having a laptop to write on doesn't
+@emph{actually} increase the amount of quality material that you turn
+out, in the long run? Perhaps it's because the time we save
+electronically in one way, we're losing electronically in another; the
+tool should never dominate one's focus. As the mystic Faridu'd-Din
+`Attar wrote: ``Be occupied as little as possible with things of the
+outer world but much with things of the inner world; then right action
+will overcome inaction.''
+
+If Emacs could become a more intelligent data store, where brainstorming
+would focus on the @emph{ideas} involved---rather than the structuring
+and format of those ideas, or having to stop your current flow of work
+in order to record them---it would map much more closely to how the mind
+(well, at least mine) works, and hence would eliminate that very
+manual-ness which computers from the very beginning have been championed
+as being able to reduce.
+
+@node Installation, Implementation, Introduction, Top
+@comment node-name, next, previous, up
+@chapter Installation
+
+Installing Remember Mode is as simple as adding the following lines to
+your Emacs configuration file (usually @file{~/.emacs.d/init.el} or
+@file{~/.emacs}).
+
+@lisp
+(add-to-list 'load-path "/path/to/remember")
+(require 'remember)
+@end lisp
+
+@node Implementation, Quick Start, Installation, Top
+@comment node-name, next, previous, up
+@chapter Implementation
+
+Hyperbole, as a data presentation tool, always struck me as being very
+powerful, but it seemed to require a lot of ``front-end'' work before
+that data was really available. The problem with BBDB, or keeping up
+a Bibl-mode file, is that you have to use different functions to
+record the data, and it always takes time to stop what you're doing,
+format the data in the manner expected by that particular data
+interface, and then resume your work.
+
+With ``remember'', you just hit @kbd{M-x remember} (you'd probably
+want to bind this to an easily accessible keystroke, like @kbd{C-x
+M-r}), slam in your text however you like, and then hit @kbd{C-c C-c}.
+It will file the data away for later retrieval, and possibly indexing.
+
+Indexing is to data what ``studying'' is in the real world. What you do
+when you study (or lucubrate, for some of us) is to realize certain
+relationships implicit in the data, so that you can make use of those
+relationships. Expressing that a certain quote you remembered was a
+literary quote, and that you want the ability to pull up all quotes of a
+literary nature, is what studying does. This is a more labor intensive
+task than the original remembering of the data, and it's typical in real
+life to set aside a special period of time for doing this work.
+
+``Remember'' works in the same way. When you enter data, either by
+typing it into a buffer, or using the contents of the selected region,
+it will store that data---unindexed, uninterpreted---in a data pool.
+It will also try to remember as much context information as possible
+(any text properties that were set, where you copied it from, when,
+how, etc). Later, you can walk through your accumulated set of data
+(both organized, and unorganized) and easily begin moving things
+around, and making annotations that will express the full meaning of
+that data, as far as you know it.
+
+Obviously this latter stage is more user-interface intensive, and it
+would be nice if ``remember'' could do it as elegantly as possible,
+rather than requiring a billion keystrokes to reorganize your
+hierarchy. Well, as the future arrives, hopefully experience and user
+feedback will help to make this as intuitive a tool as possible.
+
+@node Quick Start, Function Reference, Implementation, Top
+@comment node-name, next, previous, up
+@chapter Quick Start
+
+@itemize
+
+@item
+Load @file{remember.el}.
+
+@item
+Type @kbd{M-x remember}. The @samp{*Remember*} buffer should be
+displayed.
+
+@item
+Type in what you want to remember. The first line will be treated as
+the headline, and the rest of the buffer will contain the body of the
+note.
+
+@item
+Type @kbd{C-c C-c} (@code{remember-finalize}) to save the note and close
+the @samp{*Remember*} buffer.
+@end itemize
+
+By default, @code{remember-finalize} saves the note in @file{~/.notes}.
+You can edit it now to see the remembered and timestamped note. You
+can edit this file however you want. New entries will always be added
+to the end.
+
+To remember a region of text, use the universal prefix. @kbd{C-u M-x
+remember} displays a @samp{*Remember*} buffer with the region as the
+initial contents.
+
+As a simple beginning, you can start by using the Text File backend,
+keeping your @file{~/.notes} file in outline-mode format, with a final
+entry called @samp{* Raw data}. Remembered data will be added to the
+end of the file. Every so often, you can move the data that gets
+appended there into other files, or reorganize your document.
+
+You can also store remembered data in other backends.
+(@pxref{Backends})
+
+Here is one way to map the remember functions in your @file{.emacs} to
+very accessible keystrokes facilities using the mode:
+
+@lisp
+(autoload 'remember ``remember'' nil t)
+(autoload 'remember-region ``remember'' nil t)
+
+(define-key global-map (kbd "<f9> r") 'remember)
+(define-key global-map (kbd "<f9> R") 'remember-region)
+@end lisp
+
+By default, remember uses the first annotation returned by
+@code{remember-annotation-functions}. To include all of the annotations,
+set @code{remember-run-all-annotation-functions-flag} to non-nil.
+
+@defopt remember-run-all-annotation-functions-flag
+Non-nil means use all annotations returned by
+@code{remember-annotation-functions}.
+@end defopt
+
+You can write custom functions that use a different set of
+remember-annotation-functions. For example:
+
+@lisp
+(defun my/remember-with-filename ()
+ "Always use the filename."
+ (interactive)
+ (let ((remember-annotation-functions '(buffer-file-name)))
+ (call-interactively 'remember)))
+@end lisp
+
+@node Function Reference, Keystrokes, Quick Start, Top
+@comment node-name, next, previous, up
+@chapter Function Reference
+
+@file{remember.el} defines the following interactive functions:
+
+@defun remember initial
+Remember an arbitrary piece of data. With a prefix, it will use the
+region as @var{initial}.
+@end defun
+
+@defun remember-region beg end
+If called from within the remember buffer, @var{beg} and @var{end} are
+ignored, and the entire buffer will be remembered. If called from any
+other buffer, that region, plus any context information specific to
+that region, will be remembered.
+@end defun
+
+@defun remember-clipboard
+Remember the contents of the current clipboard. This is most useful
+for remembering things from Netscape or other X Windows applications.
+@end defun
+
+@defun remember-finalize
+Remember the contents of the current buffer.
+@end defun
+
+@defun remember-mode
+This enters the major mode for output from @command{remember}. This
+buffer is used to collect data that you want remember. Just hit
+@kbd{C-c C-c} when you're done entering, and it will go ahead and file
+the data for latter retrieval, and possible indexing.
+@end defun
+
+@node Keystrokes, Backends, Function Reference, Top
+@comment node-name, next, previous, up
+@chapter Keystroke Reference
+
+@file{remember.el} defines the following keybindings by default:
+
+@table @kbd
+
+@item C-c C-c (`remember-finalize')
+Remember the contents of the current buffer.
+
+@item C-c C-k (`remember-destroy')
+Destroy the current *Remember* buffer.
+
+@item C-x C-s (`remember-finalize')
+Remember the contents of the current buffer.
+
+@end table
+
+@node Backends, GNU Free Documentation License, Keystrokes, Top
+@comment node-name, next, previous, up
+@chapter Backends
+
+You can save remembered notes to a variety of backends.
+
+@menu
+* Text File:: Saving to a text file.
+* Diary:: Saving to a Diary file.
+* Mailbox:: Saving to a mailbox.
+* Org:: Saving to an Org Mode file.
+@end menu
+
+@node Text File, Diary, Backends, Backends
+@comment node-name, next, previous, up
+@section Saving to a Text File
+@cindex text file, saving to
+
+@subheading Insinuation
+
+@lisp
+(setq remember-handler-functions '(remember-append-to-file))
+@end lisp
+
+@subheading Options
+
+@defopt remember-data-file
+The file in which to store unprocessed data.
+@end defopt
+
+@defopt remember-leader-text
+The text used to begin each remember item.
+@end defopt
+
+@node Diary, Mailbox, Text File, Backends
+@comment node-name, next, previous, up
+@section Saving to a Diary file
+@cindex diary, integration
+
+@subheading Insinuation
+
+@lisp
+(require 'remember-diary)
+(add-to-list 'remember-handler-functions 'remember-diary-extract-entries)
+@end lisp
+
+@subheading Options
+
+@defopt remember-diary-file
+File for extracted diary entries.
+@end defopt
+
+@node Mailbox, Org, Diary, Backends
+@comment node-name, next, previous, up
+@section Saving to a Mailbox
+@cindex mailbox, saving to
+
+@subheading Insinuation
+
+@lisp
+(add-to-list 'remember-handler-functions 'remember-store-in-mailbox)
+@end lisp
+
+@subheading Options
+
+@defopt remember-mailbox
+The file in which to store remember data as mail.
+@end defopt
+
+@defopt remember-default-priority
+The default priority for remembered mail messages.
+@end defopt
+
+@node Org, , Mailbox, Backends
+@comment node-name, next, previous, up
+@section Saving to an Org Mode file
+@cindex org mode, integration
+
+For instructions on how to integrate Remember with Org Mode,
+consult @ref{Remember, , , org}.
+
+@node GNU Free Documentation License, Concept Index, Backends, Top
+@appendix GNU Free Documentation License
+@include doclicense.texi
+
+@node Concept Index, , GNU Free Documentation License, Top
+@comment node-name, next, previous, up
+@unnumbered Index
+
+@printindex cp
+
+@bye
+
+@ignore
+ arch-tag: 5b980db0-20cc-4167-b845-52dc11d53b9f
+@end ignore
diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi
new file mode 100644
index 00000000000..9cd465abb26
--- /dev/null
+++ b/doc/misc/sasl.texi
@@ -0,0 +1,270 @@
+\input texinfo @c -*-texinfo-*-
+
+@setfilename sasl.info
+
+@set VERSION 0.2
+
+@dircategory Emacs
+@direntry
+* SASL: (sasl). The Emacs SASL library.
+@end direntry
+
+@settitle Emacs SASL Library @value{VERSION}
+
+@ifinfo
+This file describes the Emacs SASL library.
+
+Copyright @copyright{} 2004, 2005, 2006 Free Software Foundation, Inc.
+Copyright @copyright{} 2000 Daiki Ueno.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+@end ifinfo
+
+@tex
+
+@titlepage
+@title Emacs SASL Library
+
+@author by Daiki Ueno
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 2000 Daiki Ueno.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+@end titlepage
+@page
+
+@end tex
+
+@node Top
+@top Emacs SASL
+This manual describes the Emacs SASL library.
+
+A common interface to share several authentication mechanisms between
+applications using different protocols.
+
+@menu
+* Overview:: What Emacs SASL library is.
+* How to use:: Adding authentication support to your applications.
+* Data types::
+* Back end drivers:: Writing your own drivers.
+* Index::
+* Function Index::
+* Variable Index::
+@end menu
+
+@node Overview
+@chapter Overview
+
+@sc{sasl} is short for @dfn{Simple Authentication and Security Layer}.
+This standard is documented in RFC2222. It provides a simple method for
+adding authentication support to various application protocols.
+
+The toplevel interface of this library is inspired by Java @sc{sasl}
+Application Program Interface. It defines an abstraction over a series
+of authentication mechanism drivers (@ref{Back end drivers}).
+
+Back end drivers are designed to be close as possible to the
+authentication mechanism. You can access the additional configuration
+information anywhere from the implementation.
+
+@node How to use
+@chapter How to use
+
+(Not yet written).
+
+To use Emacs SASL library, please evaluate following expression at the
+beginning of your application program.
+
+@lisp
+(require 'sasl)
+@end lisp
+
+If you want to check existence of sasl.el at runtime, instead you
+can list autoload settings for functions you want.
+
+@node Data types
+@chapter Data types
+
+There are three data types to be used for carrying a negotiated
+security layer---a mechanism, a client parameter and an authentication
+step.
+
+@menu
+* Mechanisms::
+* Clients::
+* Steps::
+@end menu
+
+@node Mechanisms
+@section Mechanisms
+
+A mechanism (@code{sasl-mechanism} object) is a schema of the @sc{sasl}
+authentication mechanism driver.
+
+@defvar sasl-mechanisms
+A list of mechanism names.
+@end defvar
+
+@defun sasl-find-mechanism mechanisms
+
+Retrieve an apropriate mechanism.
+This function compares @var{mechanisms} and @code{sasl-mechanisms} then
+returns apropriate @code{sasl-mechanism} object.
+
+@example
+(let ((sasl-mechanisms '("CRAM-MD5" "DIGEST-MD5")))
+ (setq mechanism (sasl-find-mechanism server-supported-mechanisms)))
+@end example
+
+@end defun
+
+@defun sasl-mechanism-name mechanism
+Return name of mechanism, a string.
+@end defun
+
+If you want to write an authentication mechanism driver (@ref{Back end
+drivers}), use @code{sasl-make-mechanism} and modify
+@code{sasl-mechanisms} and @code{sasl-mechanism-alist} correctly.
+
+@defun sasl-make-mechanism name steps
+Allocate a @code{sasl-mechanism} object.
+This function takes two parameters---name of the mechanism, and a list
+of authentication functions.
+
+@example
+(defconst sasl-anonymous-steps
+ '(identity ;no initial response
+ sasl-anonymous-response))
+
+(put 'sasl-anonymous 'sasl-mechanism
+ (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
+@end example
+
+@end defun
+
+@node Clients
+@section Clients
+
+A client (@code{sasl-client} object) initialized with four
+parameters---a mechanism, a user name, name of the service and name of
+the server.
+
+@defun sasl-make-client mechanism name service server
+Prepare a @code{sasl-client} object.
+@end defun
+
+@defun sasl-client-mechanism client
+Return the mechanism (@code{sasl-mechanism} object) of client.
+@end defun
+
+@defun sasl-client-name client
+Return the authorization name of client, a string.
+@end defun
+
+@defun sasl-client-service client
+Return the service name of client, a string.
+@end defun
+
+@defun sasl-client-server client
+Return the server name of client, a string.
+@end defun
+
+If you want to specify additional configuration properties, please use
+@code{sasl-client-set-property}.
+
+@defun sasl-client-set-property client property value
+Add the given property/value to client.
+@end defun
+
+@defun sasl-client-property client property
+Return the value of the property of client.
+@end defun
+
+@defun sasl-client-set-properties client plist
+Destructively set the properties of client.
+The second argument is the new property list.
+@end defun
+
+@defun sasl-client-properties client
+Return the whole property list of client configuration.
+@end defun
+
+@node Steps
+@section Steps
+
+A step (@code{sasl-step} object) is an abstraction of authentication
+``step'' which holds the response value and the next entry point for the
+authentication process (the latter is not accessible).
+
+@defun sasl-step-data step
+Return the data which @var{step} holds, a string.
+@end defun
+
+@defun sasl-step-set-data step data
+Store @var{data} string to @var{step}.
+@end defun
+
+To get the initial response, you should call the function
+@code{sasl-next-step} with the second argument @code{nil}.
+
+@example
+(setq name (sasl-mechanism-name mechanism))
+@end example
+
+At this point we could send the command which starts a SASL
+authentication protocol exchange. For example,
+
+@example
+(process-send-string
+ process
+ (if (sasl-step-data step) ;initial response
+ (format "AUTH %s %s\r\n" name (base64-encode-string (sasl-step-data step) t))
+ (format "AUTH %s\r\n" name)))
+@end example
+
+To go on with the authentication process, all you have to do is call
+@code{sasl-next-step} consecutively.
+
+@defun sasl-next-step client step
+Perform the authentication step.
+At the first time @var{step} should be set to @code{nil}.
+@end defun
+
+@node Back end drivers
+@chapter Back end drivers
+
+(Not yet written).
+
+@node Index
+@chapter Index
+@printindex cp
+
+@node Function Index
+@chapter Function Index
+@printindex fn
+
+@node Variable Index
+@chapter Variable Index
+@printindex vr
+
+@summarycontents
+@contents
+@bye
+
+@c End:
+
+@ignore
+ arch-tag: dc9650be-a953-40bf-bc55-24fe5f19d875
+@end ignore
diff --git a/man/sc.texi b/doc/misc/sc.texi
index 5ac3b882ccd..55beaa5b9e7 100644
--- a/man/sc.texi
+++ b/doc/misc/sc.texi
@@ -1,7 +1,7 @@
\input texinfo @comment -*-texinfo-*-
@comment 3.48
@comment %**start of header (This is for running Texinfo on a region.)
-@setfilename ../info/sc
+@setfilename ../../info/sc
@settitle Supercite Version 3.1 User's Manual
@iftex
@finalout
diff --git a/man/ses.texi b/doc/misc/ses.texi
index 089e13a9cc0..dc7e669b8b0 100644
--- a/man/ses.texi
+++ b/doc/misc/ses.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
-@setfilename ../info/ses
+@setfilename ../../info/ses
@settitle SES: Simple Emacs Spreadsheet
@setchapternewpage off
@syncodeindex fn cp
@@ -115,10 +115,14 @@ To report bugs, send email to @email{jyavner@@member.fsf.org}.
@findex set-mark-command
@findex keyboard-quit
+To create a new spreadsheet, visit a nonexistent file whose name ends
+ with ".ses". For example, @kbd{C-x C-f test.ses RET}.
+
+
A @dfn{cell identifier} is a symbol with a column letter and a row
number. Cell B7 is the 2nd column of the 7th row. For very wide
spreadsheets, there are two column letters: cell AB7 is the 28th
-column of the 7th row.
+column of the 7th row. Super wide spreadsheets get AAA1, etc.
@table @kbd
@item j
@@ -658,21 +662,26 @@ SES could get confused by printer results that contain newlines or
tabs, so these are replaced with question marks.
@table @kbd
-@item C-c C-t
+@item t
Confine a cell to its own column (@code{ses-truncate-cell}). This
allows you to move point to a rightward cell that would otherwise be
covered by a spill-over. If you don't change the rightward cell, the
confined cell will spill over again the next time it is reprinted.
-@item C-c C-c
-When applied to a single cell, this command displays in the echo area any
-formula error or printer error that occurred during
-recalculation/reprinting (@code{ses-recalculate-cell}).
+@item c
+When applied to a single cell, this command displays in the echo area
+any formula error or printer error that occurred during
+recalculation/reprinting (@code{ses-recalculate-cell}). You can use
+this to undo the effect of @kbd{t}.
@end table
-When a printer function signals an error, the default printer
+When a printer function signals an error, the fallback printer
@samp{"%s"} is substituted. This is useful when your column printer
-is numeric-only and you use a string as a cell value.
+is numeric-only and you use a string as a cell value. Note that the
+standard default printer is ``%.7g'' which is numeric-only, so cells
+that are empty of contain strings will use the fallback printer.
+@kbd{c} on such cells will display ``Format specifier doesn't match
+argument type''.
@node Import and export, Virus protection, More on cell printing, Advanced Features
@@ -871,12 +880,12 @@ You can add additional local variables to the list at the bottom of
the data area, such as hidden constants you want to refer to in your
formulas.
-You can override the variable @code{symbolic-formulas} to be a list of
+You can override the variable @code{ses--symbolic-formulas} to be a list of
symbols (as parenthesized strings) to show as completions for the '
command. This initial completions list is used instead of the actual
set of symbols-as-formulas in the spreadsheet.
-For examples of these, see file @file{etc/ses-example.ses}.
+For an example of this, see file @file{etc/ses-example.ses}.
If (for some reason) you want your formulas or printers to save data
into variables, you must declare these variables as buffer-locals in
diff --git a/man/sieve.texi b/doc/misc/sieve.texi
index 4b7a95be952..9c31f77f4d8 100644
--- a/man/sieve.texi
+++ b/doc/misc/sieve.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/sieve
+@setfilename ../../info/sieve
@settitle Emacs Sieve Manual
@synindex fn cp
@synindex vr cp
@@ -236,9 +236,9 @@ if address "sender" "owner-w3-beta@@xemacs.org" @{
@}
@end example
-A few mailing lists do not use the @samp{Sender:} header, but does
-contain some unique identifier in some other header. The following is
-not a complete script, it assumes that @code{fileinto} has already been
+A few mailing lists do not use the @samp{Sender:} header, but has a
+unique identifier in some other header. The following is not a
+complete script, it assumes that @code{fileinto} has already been
required.
@example
diff --git a/man/smtpmail.texi b/doc/misc/smtpmail.texi
index 644cd061b74..5f5eb61a6ba 100644
--- a/man/smtpmail.texi
+++ b/doc/misc/smtpmail.texi
@@ -1,5 +1,5 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/smtpmail
+@setfilename ../../info/smtpmail
@settitle Emacs SMTP Library
@syncodeindex vr fn
@copying
diff --git a/man/speedbar.texi b/doc/misc/speedbar.texi
index 2a05993f569..5cefcc97df6 100644
--- a/man/speedbar.texi
+++ b/doc/misc/speedbar.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
-@setfilename ../info/speedbar
+@setfilename ../../info/speedbar
@settitle Speedbar: File/Tag summarizing utility
@syncodeindex fn cp
diff --git a/man/texinfo.tex b/doc/misc/texinfo.tex
index d3107f9fc33..fe6285b3bc5 100644
--- a/man/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2007-06-24.23}
+\def\texinfoversion{2007-07-09.21}
%
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
diff --git a/man/tramp.texi b/doc/misc/tramp.texi
index 67b0647787c..d1acafefa03 100644
--- a/man/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
+@setfilename ../../info/tramp
@c %**start of header
-@setfilename ../info/tramp
@settitle TRAMP User Manual
@setchapternewpage odd
@c %**end of header
@@ -17,16 +17,29 @@
@include trampver.texi
-@c Macros for formatting a filename.
-@c trampfn is for a full filename, trampfnmhp means method, host, localname
-@c were given, and so on.
-@macro trampfn(method, user, host, localname)
-@value{prefix}@value{method}@value{user}@@@value{host}@value{postfix}@value{localname}
+@c Macro for formatting a filename according to the repective syntax.
+@c xxx and yyy are auxiliary macros in order to omit leading and
+@c trailing whitespace. Not very elegant, but I don't know it better.
+
+@macro xxx {one}@c
+@set \one\@c
+@end macro
+
+@macro yyy {one, two}@c
+@xxx{x\one\}@c
+@ifclear x@c
+\one\@w{}\two\@c
+@end ifclear
+@clear x\one\@c
+@end macro
+
+@macro trampfn {method, user, host, localname}@c
+@value{prefix}@yyy{\method\,@value{postfixhop}}@yyy{\user\,@@}\host\@value{postfix}\localname\@c
@end macro
@copying
-Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-Free Software Foundation, Inc.
+Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+2007 Free Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
@@ -151,12 +164,15 @@ For the end user:
* Usage:: An overview of the operation of @value{tramp}.
* Bug Reports:: Reporting Bugs and Problems.
* Frequently Asked Questions:: Questions and answers from the mailing list.
+* Function Index:: @value{tramp} functions.
+* Variable Index:: User options and variables.
* Concept Index:: An item for each concept.
For the developer:
* Version Control:: The inner workings of remote version control.
* Files directories and localnames:: How file names, directories and localnames are mangled and managed.
+* Traces and Profiles:: How to Customize Traces.
* Issues:: Debatable Issues and What Was Decided.
* GNU Free Documentation License:: The license for this documentation.
@@ -178,11 +194,17 @@ Configuring @value{tramp} for use
* Connection types:: Types of connections made to remote machines.
* Inline methods:: Inline methods.
* External transfer methods:: External transfer methods.
-* Multi-hop Methods:: Connecting to a remote host using multiple hops.
+@ifset emacsgw
+* Gateway methods:: Gateway methods.
+@end ifset
* Default Method:: Selecting a default method.
+* Default User:: Selecting a default user.
+* Default Host:: Selecting a default host.
+* Multi-hops:: Connecting to a remote host using multiple hops.
* Customizing Methods:: Using Non-Standard Methods.
* Customizing Completion:: Selecting config files for user/host name completion.
* Password caching:: Reusing passwords for several connections.
+* Connection caching:: Reusing connection related information.
* Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
* Remote shell setup:: Remote shell setup hints.
* Windows setup hints:: Issues with Cygwin ssh.
@@ -191,10 +213,10 @@ Configuring @value{tramp} for use
Using @value{tramp}
* Filename Syntax:: @value{tramp} filename conventions.
-* Multi-hop filename syntax:: Multi-hop filename conventions.
+* Alternative Syntax:: URL-like filename syntax.
* Filename completion:: Filename completion.
-* Dired:: Dired.
-* Compilation:: Compile remote files.
+* Remote processes:: Integration with other @value{emacsname} packages.
+* Cleanup remote connections:: Cleanup remote connections.
The inner workings of remote version control
@@ -212,6 +234,9 @@ Things related to Version Control that don't fit elsewhere
How file names, directories and localnames are mangled and managed
* Localname deconstruction:: Breaking a localname into its components.
+@ifset emacs
+* External packages:: Integration with external Lisp packages.
+@end ifset
@end detailmenu
@end menu
@@ -220,10 +245,10 @@ How file names, directories and localnames are mangled and managed
@chapter An overview of @value{tramp}
@cindex overview
-After the installation of @value{tramp} into your @value{emacsname},
-you will be able to access files on remote machines as though they
-were local. Access to the remote file system for editing files,
-version control, and @code{dired} are transparently enabled.
+After the installation of @value{tramp} into your @value{emacsname}, you
+will be able to access files on remote machines as though they were
+local. Access to the remote file system for editing files, version
+control, and @code{dired} are transparently enabled.
Your access to the remote machine can be with the @command{rsh},
@command{rlogin}, @command{telnet} programs or with any similar
@@ -235,6 +260,9 @@ box, one of the more common uses of the package. This allows
relatively secure access to machines, especially if @command{ftp}
access is disabled.
+Under Windows, @value{tramp} is integrated with the PuTTY package,
+using the @command{plink} program.
+
The majority of activity carried out by @value{tramp} requires only that
the remote login is possible and is carried out at the terminal. In
order to access remote files @value{tramp} needs to transfer their content
@@ -244,9 +272,9 @@ to the local machine temporarily.
The details are easy to select, depending on your needs and the
machines in question.
-The fastest transfer methods (for large files) rely on a remote file
-transfer package such as @command{rcp}, @command{scp} or
-@command{rsync}.
+The fastest transfer methods for large files rely on a remote file
+transfer package such as @command{rcp}, @command{scp}, @command{rsync}
+or (under Windows) @command{pscp}.
If the remote copy methods are not suitable for you, @value{tramp} also
supports the use of encoded transfers directly through the shell.
@@ -254,15 +282,6 @@ This requires that the @command{mimencode} or @command{uuencode} tools
are available on the remote machine. These methods are generally
faster for small files.
-Within these limitations, @value{tramp} is quite powerful. It is worth
-noting that, as of the time of writing, it is far from a polished
-end-user product. For a while yet you should expect to run into rough
-edges and problems with the code now and then.
-
-It is finished enough that the developers use it for day to day work but
-the installation and setup can be a little difficult to master, as can
-the terminology.
-
@value{tramp} is still under active development and any problems you encounter,
trivial or major, should be reported to the @value{tramp} developers.
@xref{Bug Reports}.
@@ -308,9 +327,10 @@ host, followed by a newline.
@value{tramp} now waits for the shell prompt or for a message that the login
failed.
-If @value{tramp} sees neither of them after a certain period of time (a minute,
-say), then it issues an error message saying that it couldn't find the
-remote shell prompt and shows you what the remote host has sent.
+If @value{tramp} sees neither of them after a certain period of time
+(a minute, say), then it issues an error message saying that it
+couldn't find the remote shell prompt and shows you what the remote
+host has sent.
If @value{tramp} sees a @samp{login failed} message, it tells you so,
aborts the login attempt and allows you to try again.
@@ -380,7 +400,7 @@ behind the scenes when you open a file with @value{tramp}.
@value{tramp} is freely available on the Internet and the latest
release may be downloaded from
-@uref{ftp://ftp.gnu.org/gnu/tramp/}. This release includes the full
+@uref{ftp://ftp.gnu.org/gnu/tramp/}. This release includes the full
documentation and code for @value{tramp}, suitable for installation.
But GNU Emacs (22 or later) includes @value{tramp} already, and there
is a @value{tramp} package for XEmacs, as well. So maybe it is easier
@@ -389,7 +409,7 @@ on@dots{...}
For the especially brave, @value{tramp} is available from CVS. The CVS
version is the latest version of the code and may contain incomplete
-features or new issues. Use these versions at your own risk.
+features or new issues. Use these versions at your own risk.
Instructions for obtaining the latest development version of @value{tramp}
from CVS can be found by going to the Savannah project page at the
@@ -410,7 +430,7 @@ Or follow the example session below:
@noindent
You should now have a directory @file{~/@value{emacsdir}/tramp}
-containing the latest version of @value{tramp}. You can fetch the latest
+containing the latest version of @value{tramp}. You can fetch the latest
updates from the repository by issuing the command:
@example
@@ -429,6 +449,11 @@ script:
] @strong{autoconf}
@end example
+People who have no direct CVS access (maybe because sitting behind a
+blocking firewall), can try the
+@uref{http://savannah.gnu.org/cvs-backup/tramp-sources.tar.gz, Nightly
+CVS Tree Tarball} instead of.
+
@node History
@chapter History of @value{tramp}
@@ -445,7 +470,19 @@ file contents were added. Support for VC was added.
The most recent addition of major features were the multi-hop methods
added in April 2000 and the unification of @value{tramp} and Ange-FTP
-filenames in July 2002.
+filenames in July 2002. In July 2004, multi-hop methods have been
+replaced by proxy hosts. Running commands on remote hosts was
+introduced in December 2005.
+@ifset emacsgw
+Support of gateways exists since April 2007.
+@end ifset
+
+In December 2001, @value{tramp} has been added to the XEmacs package
+repository. Being part of the GNU Emacs repository happened in June
+2002, the first release including @value{tramp} was GNU Emacs 22.1.
+
+@value{tramp} is also a GNU/Linux Debian package since February 2001.
+
@c Installation chapter is necessary only in case of standalone
@c installation. Text taken from trampinst.texi.
@@ -462,7 +499,7 @@ filenames in July 2002.
installed. It is initially configured to use the @command{scp}
program to connect to the remote host. So in the easiest case, you
just type @kbd{C-x C-f} and then enter the filename
-@file{@value{prefix}@var{user}@@@var{machine}@value{postfix}@var{/path/to.file}}.
+@file{@trampfn{, user, machine, /path/to.file}}.
On some hosts, there are problems with opening a connection. These are
related to the behavior of the remote shell. See @xref{Remote shell
@@ -482,14 +519,20 @@ Method}.
* Connection types:: Types of connections made to remote machines.
* Inline methods:: Inline methods.
* External transfer methods:: External transfer methods.
-* Multi-hop Methods:: Connecting to a remote host using multiple hops.
+@ifset emacsgw
+* Gateway methods:: Gateway methods.
+@end ifset
* Default Method:: Selecting a default method.
Here we also try to help those who
don't have the foggiest which method
is right for them.
+* Default User:: Selecting a default user.
+* Default Host:: Selecting a default host.
+* Multi-hops:: Connecting to a remote host using multiple hops.
* Customizing Methods:: Using Non-Standard Methods.
* Customizing Completion:: Selecting config files for user/host name completion.
* Password caching:: Reusing passwords for several connections.
+* Connection caching:: Reusing connection related information.
* Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
* Remote shell setup:: Remote shell setup hints.
* Windows setup hints:: Issues with Cygwin ssh.
@@ -508,7 +551,7 @@ remote shell access program such as @command{rsh}, @command{ssh} or
This connection is used to perform many of the operations that @value{tramp}
requires to make the remote file system transparently accessible from
-the local machine. It is only when visiting files that the methods
+the local machine. It is only when visiting files that the methods
differ.
@cindex inline methods
@@ -519,7 +562,7 @@ differ.
@cindex methods, external transfer
@cindex methods, out-of-band
Loading or saving a remote file requires that the content of the file
-be transfered between the two machines. The content of the file can be
+be transfered between the two machines. The content of the file can be
transfered over the same connection used to log in to the remote
machine or the file can be transfered through another connection using
a remote copy program such as @command{rcp}, @command{scp} or
@@ -539,16 +582,10 @@ startup may drown out the improvement in file transfer times.
External transfer methods should be configured such a way that they
don't require a password (with @command{ssh-agent}, or such alike).
-If it isn't possible, you should consider @ref{Password caching},
-otherwise you will be prompted for a password every copy action.
-
-@cindex multi-hop methods
-@cindex methods, multi-hop
-A variant of the inline methods are the @dfn{multi-hop methods}.
-These methods allow you to connect a remote host using a number `hops',
-each of which connects to a different host. This is useful if you are
-in a secured network where you need to go through a bastion host to
-connect to the outside world.
+Modern @command{scp} implementations offer options to reuse existing
+@command{ssh} connections, see method @command{scpc}. If it isn't
+possible, you should consider @ref{Password caching}, otherwise you
+will be prompted for a password every copy action.
@node Inline methods
@@ -635,6 +672,8 @@ as the @option{rsh} method.
This method does not connect to a remote host at all, rather it uses
the @command{su} program to allow you to edit files as another user.
+With other words, a specified host name in the file name is silently
+ignored.
@item @option{sudo}
@@ -682,7 +721,7 @@ This supports the @samp{-p} kludge.
@item @option{krlogin}
@cindex method krlogin
-@cindex km krlogin
+@cindex krlogin method
@cindex Kerberos (with krlogin method)
This method is also similar to @option{ssh}. It only uses the
@@ -697,18 +736,43 @@ This method is mostly interesting for Windows users using the PuTTY
implementation of SSH. It uses @samp{plink -ssh} to log in to the
remote host.
-Additionally, the method @option{plink1} is provided, which calls
-@samp{plink -1 -ssh} in order to use SSH protocol version 1
-explicitly.
+This supports the @samp{-P} kludge.
+
+Additionally, the methods @option{plink1} and @option{plink2} are
+provided, which call @samp{plink -1 -ssh} or @samp{plink -2 -ssh} in
+order to use SSH protocol version 1 or 2 explicitly.
CCC: Do we have to connect to the remote host once from the command
line to accept the SSH key? Maybe this can be made automatic?
-CCC: Does @command{plink} support the @samp{-p} option? @value{tramp} will
-support that, anyway.
+CCC: Say something about the first shell command failing. This might
+be due to a wrong setting of @code{tramp-rsh-end-of-line}.
-@end table
+@item @option{plinkx}
+@cindex method plinkx
+@cindex plinkx method
+
+Another method using PuTTY on Windows. Instead of host names, it
+expects PuTTY session names, calling @samp{plink -load @var{session}
+-t"}. User names are relevant only in case the corresponding session
+hasn't defined a user name. Different port numbers must be defined in
+the session.
+
+
+@item @option{fish}
+@cindex method fish
+@cindex fish method
+
+This is an experimental implementation of the fish protocol, known from
+the GNU Midnight Commander or the KDE Konqueror. @value{tramp} expects
+the fish server implementation from the KDE kioslave. That means, the
+file @file{~/.fishsrv.pl} is expected to reside on the remote host.
+
+The implementation lacks good performance. The code is offered anyway,
+maybe somebody can improve the performance.
+
+@end table
@node External transfer methods
@@ -725,21 +789,10 @@ transfers to an external transfer utility.
This saves the overhead of encoding and decoding that multiplexing the
transfer through the one connection has with the inline methods.
-If you want to use an external transfer method you should be able to
-execute the transfer utility to copy files to and from the remote
-machine without any interaction.
-
-@cindex ssh-agent
-This means that you will need to use @command{ssh-agent} if you use the
-@command{scp} program for transfers, or maybe your version of
-@command{scp} accepts a password on the command line.@footnote{PuTTY's
-@command{pscp} allows you to specify the password on the command line.}
-If you use @command{rsync} via @command{ssh} then the same rule must
-apply to that connection.
-
-If you cannot get an external method to run without asking for a
-password you should consider @ref{Password caching}.
-
+Since external transfer methods need their own overhead opening a new
+channel, all files which are smaller than @var{tramp-copy-size-limit}
+are still transferred with the corresponding inline method. It should
+provide a fair trade-off between both approaches.
@table @asis
@item @option{rcp} --- @command{rsh} and @command{rcp}
@@ -767,7 +820,7 @@ Using @command{ssh} to connect to the remote host and @command{scp} to
transfer files between the machines is the best method for securely
connecting to a remote machine and accessing files.
-The performance of this option is also quite good. It may be slower than
+The performance of this option is also quite good. It may be slower than
the inline methods when you often open and close small files however.
The cost of the cryptographic handshake at the start of an @command{scp}
session can begin to absorb the advantage that the lack of encoding and
@@ -787,7 +840,24 @@ know what these are, you do not need these options.
All the @command{ssh} based methods support the kludgy @samp{-p}
feature where you can specify a port number to connect to in the host
name. For example, the host name @file{host#42} tells @value{tramp} to
-specify @samp{-p 42} in the argument list for @command{ssh}.
+specify @samp{-p 42} in the argument list for @command{ssh}, and to
+specify @samp{-P 42} in the argument list for @command{scp}.
+
+
+@item @option{sftp} --- @command{ssh} and @command{sftp}
+@cindex method sftp
+@cindex sftp method
+@cindex sftp (with sftp method)
+@cindex ssh (with sftp method)
+
+That is mostly the same method as @option{scp}, but using
+@command{sftp} as transfer command. So the same remarks are valid.
+
+This command does not work like @value{ftppackagename}, where
+@command{ftp} is called interactively, and all commands are send from
+within this session. Instead of, @command{ssh} is used for login.
+
+This method supports the @samp{-p} hack.
@item @option{rsync} --- @command{ssh} and @command{rsync}
@@ -805,7 +875,7 @@ transferring files that exist on both hosts, this advantage is lost if
the file exists only on one side of the connection.
The @command{rsync} based method may be considerably faster than the
-@command{rcp} based methods when writing to the remote system. Reading
+@command{rcp} based methods when writing to the remote system. Reading
files to the local machine is no faster than with a direct copy.
This method supports the @samp{-p} hack.
@@ -866,7 +936,22 @@ This method is similar to @option{scp}, but it uses the
@command{pscp} for transferring the files. These programs are part
of PuTTY, an SSH implementation for Windows.
-CCC: Does @command{plink} support the @samp{-p} hack?
+This method supports the @samp{-P} hack.
+
+
+@item @option{psftp} --- @command{plink} and @command{psftp}
+@cindex method psftp
+@cindex psftp method
+@cindex psftp (with psftp method)
+@cindex plink (with psftp method)
+@cindex PuTTY (with psftp method)
+
+As you would expect, this method is similar to @option{sftp}, but it
+uses the @command{plink} command to connect to the remote host, and it
+uses @command{psftp} for transferring the files. These programs are
+part of PuTTY, an SSH implementation for Windows.
+
+This method supports the @samp{-P} hack.
@item @option{fcp} --- @command{fsh} and @command{fcp}
@@ -901,7 +986,7 @@ anyway.
@cindex method ftp
@cindex ftp method
-This is not a native @value{tramp} method. Instead of, it forwards all
+This is not a native @value{tramp} method. Instead of, it forwards all
requests to @value{ftppackagename}.
@ifset xemacs
This works only for unified filenames, see @ref{Issues}.
@@ -935,8 +1020,15 @@ specify a user name which looks like @code{user%domain} (the real user
name, then a percent sign, then the domain name). So, to connect to
the machine @code{melancholia} as user @code{daniel} of the domain
@code{BIZARRE}, and edit @file{.emacs} in the home directory (share
-@code{daniel$}) I would specify the filename
-@file{@value{prefix}smb@value{postfixsinglehop}daniel%BIZARRE@@melancholia@value{postfix}/daniel$$/.emacs}.
+@code{daniel$}) I would specify the filename @file{@trampfn{smb,
+daniel%BIZARRE, melancholia, /daniel$$/.emacs}}.
+
+Depending on the Windows domain configuration, a Windows user might be
+considered as domain user per default. In order to connect as local
+user, the WINS name of that machine must be given as domain name.
+Usually, it is the machine name in capital letters. In the example
+above, the local user @code{daniel} would be specified as
+@file{@trampfn{smb, daniel%MELANCHOLIA, melancholia, /daniel$$/.emacs}}.
The domain name as well as the user name are optional. If no user
name is specified at all, the anonymous user (without password
@@ -953,97 +1045,56 @@ name.
@end table
-@node Multi-hop Methods
-@section Connecting to a remote host using multiple hops
-@cindex multi-hop methods
-@cindex methods, multi-hop
-Sometimes, the methods described before are not sufficient. Sometimes,
-it is not possible to connect to a remote host using a simple command.
-For example, if you are in a secured network, you might have to log in
-to a `bastion host' first before you can connect to the outside world.
-Of course, the target host may also require a bastion host. The format
-of multi-hop filenames is slightly different than the format of normal
-@value{tramp} methods.
-
-@cindex method multi
-@cindex multi method
-A multi-hop file name specifies a method, a number of hops, and a
-localname (path name on the remote system). The method name is always
-@option{multi}.
-
-Each hop consists of a @dfn{hop method} specification, a user name and
-a host name. The hop method can be an inline method only. The
-following hop methods are (currently) available:
-
-@table @option
-@item telnet
-@cindex hop method telnet
-@cindex telnet hop method
-
-Uses the well-known @command{telnet} program to connect to the host.
-Whereas user name and host name are supplied in the file name, the
-user is queried for the password.
-
-@item rsh
-@cindex hop method rsh
-@cindex rsh hop method
-
-This uses @command{rsh} to connect to the host. You do not need to
-enter a password unless @command{rsh} explicitly asks for it.
-
-The variant @option{remsh} uses the @command{remsh} command. It
-should be applied on machines where @command{remsh} is used instead of
-@command{rsh}.
-
-@item ssh
-@cindex hop method ssh
-@cindex ssh hop method
-
-This uses @command{ssh} to connect to the host. You might have to enter
-a password or a pass phrase.
-
-@item su
-@cindex hop method su
-@cindex su hop method
-
-This method does not actually contact a different host, but it allows
-you to become a different user on the host you're currently on. This
-might be useful if you want to edit files as root, but the remote host
-does not allow remote root logins. In this case you can use
-@option{telnet}, @option{rsh} or @option{ssh} to connect to the
-remote host as a non-root user, then use an @option{su} hop to become
-root. But @option{su} need not be the last hop in a sequence, you could
-also use it somewhere in the middle, if the need arises.
-
-Even though you @emph{must} specify both user and host with an
-@option{su} hop, the host name is ignored and only the user name is
-used.
-
-@item sudo
-@cindex hop method sudo
-@cindex sudo hop method
-
-This is similar to the @option{su} hop, except that it uses
-@command{sudo} rather than @command{su} to become a different user.
+@ifset emacsgw
+@node Gateway methods
+@section Gateway methods
+@cindex methods, gateway
+@cindex gateway methods
-@end table
+Gateway methods are not methods to access a remote host directly.
+These methods are intended to pass firewalls or proxy servers.
+Therefore, they can be used for proxy host declarations
+(@pxref{Multi-hops}) only.
-Some people might wish to use port forwarding with @command{ssh} or
-maybe they have to use a nonstandard port. This can be accomplished
-by putting a stanza in @file{~/.ssh/config} for the account which
-specifies a different port number for a certain host name. But it can
-also be accomplished within @value{tramp}, by adding a multi-hop method.
-For example:
+A gateway method must come always along with a method who supports
+port setting (referred to as @samp{-p} kludge). This is because
+@value{tramp} targets the accompanied method to
+@file{localhost#random_port}, from where the firewall or proxy server
+is accessed to.
-@lisp
-(add-to-list
- 'tramp-multi-connection-function-alist
- '("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
-@end lisp
+Gateway methods support user name and password declarations. These
+are used to authenticate towards the corresponding firewall or proxy
+server. They can be passed only if your friendly administrator has
+granted your access.
+
+@table @asis
+@item @option{tunnel}
+@cindex method tunnel
+@cindex tunnel method
+
+This method implements an HTTP tunnel via the @command{CONNECT}
+command (see RFC 2616, 2817). Any HTTP 1.1 compliant (proxy) server
+shall support this command.
-Now you can use an @option{sshf} hop which connects to port 4400 instead of
-the standard port.
+As authentication method, only @option{Basic Authentication} (see RFC
+2617) is implemented so far. If no port number is given in the
+declaration, port @option{8080} is used for the proxy server.
+
+
+@item @option{socks}
+@cindex method socks
+@cindex socks method
+
+The @command{socks} method provides access to SOCKSv5 servers (see
+RFC 1928). @option{Username/Password Authentication} according to RFC
+1929 is supported.
+
+The default port number of the socks server is @option{1080}, if not
+specified otherwise.
+
+@end table
+@end ifset
@node Default Method
@@ -1085,7 +1136,6 @@ methods, giving better performance.
@xref{Inline methods}.
@xref{External transfer methods}.
-@xref{Multi-hop Methods}.
Another consideration with the selection of transfer methods is the
environment you will use them in and, especially when used over the
@@ -1098,7 +1148,7 @@ read from other machines.
If you need to connect to remote systems that are accessible from the
Internet, you should give serious thought to using @option{ssh} based
-methods to connect. These provide a much higher level of security,
+methods to connect. These provide a much higher level of security,
making it a non-trivial exercise for someone to obtain your password
or read the content of the files you are editing.
@@ -1119,9 +1169,9 @@ to edit mostly small files.
I guess that these days, most people can access a remote machine by
using @command{ssh}. So I suggest that you use the @option{ssh}
-method. So, type @kbd{C-x C-f
-@value{prefix}ssh@value{postfixsinglehop}root@@otherhost@value{postfix}/etc/motd
-@key{RET}} to edit the @file{/etc/motd} file on the other host.
+method. So, type @kbd{C-x C-f @trampfn{ssh, root, otherhost,
+/etc/motd} @key{RET}} to edit the @file{/etc/motd} file on the other
+host.
If you can't use @option{ssh} to log in to the remote host, then
select a method that uses a program that works. For instance, Windows
@@ -1132,9 +1182,9 @@ implementation of @command{ssh}. Or you use Kerberos and thus like
For the special case of editing files on the local host as another
user, see the @option{su} or @option{sudo} methods. They offer
shortened syntax for the @samp{root} account, like
-@file{@value{prefix}su@value{postfixsinglehop}@value{postfix}/etc/motd}.
+@file{@trampfn{su, , , /etc/motd}}.
-People who edit large files may want to consider @option{scp} instead
+People who edit large files may want to consider @option{scpc} instead
of @option{ssh}, or @option{pscp} instead of @option{plink}. These
out-of-band methods are faster than inline methods for large files.
Note, however, that out-of-band methods suffer from some limitations.
@@ -1143,6 +1193,205 @@ from using an out-of-band method! Maybe even for large files, inline
methods are fast enough.
+@node Default User
+@section Selecting a default user
+@cindex default user
+
+The user part of a @value{tramp} file name can be omitted. Usually,
+it is replaced by the user name you are logged in. Often, this is not
+what you want. A typical use of @value{tramp} might be to edit some
+files with root permissions on the local host. This case, you should
+set the variable @code{tramp-default-user} to reflect that choice.
+For example:
+
+@lisp
+(setq tramp-default-user "root")
+@end lisp
+
+@code{tramp-default-user} is regarded as obsolete, and will be removed
+soon.
+
+@vindex tramp-default-user-alist
+You can also specify different users for certain method/host
+combinations, via the variable @code{tramp-default-user-alist}. For
+example, if you always have to use the user @samp{john} in the domain
+@samp{somewhere.else}, you can specify the following:
+
+@lisp
+(add-to-list 'tramp-default-user-alist
+ '("ssh" ".*\\.somewhere\\.else\\'" "john"))
+@end lisp
+
+@noindent
+See the documentation for the variable
+@code{tramp-default-user-alist} for more details.
+
+One trap to fall in must be known. If @value{tramp} finds a default
+user, this user will be passed always to the connection command as
+parameter (for example @samp{ssh here.somewhere.else -l john}. If you
+have specified another user for your command in its configuration
+files, @value{tramp} cannot know it, and the remote access will fail.
+If you have specified in the given example in @file{~/.ssh/config} the
+lines
+
+@example
+Host here.somewhere.else
+ User lily
+@end example
+
+@noindent
+than you must discard selecting a default user by @value{tramp}. This
+will be done by setting it to @code{nil} (or @samp{lily}, likewise):
+
+@lisp
+(add-to-list 'tramp-default-user-alist
+ '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
+@end lisp
+
+The last entry in @code{tramp-default-user-alist} could be your
+default user you'll apply predominantly. You shall @emph{append} it
+to that list at the end:
+
+@lisp
+(add-to-list 'tramp-default-user-alist '(nil nil "jonas") t)
+@end lisp
+
+
+@node Default Host
+@section Selecting a default host
+@cindex default host
+
+@vindex tramp-default-host
+Finally, it is even possible to omit the host name part of a
+@value{tramp} file name. This case, the value of the variable
+@code{tramp-default-host} is used. Per default, it is initialized
+with the host name your local @value{emacsname} is running.
+
+If you, for example, use @value{tramp} mainly to contact the host
+@samp{target} as user @samp{john}, you can specify:
+
+@lisp
+(setq tramp-default-user "john"
+ tramp-default-host "target")
+@end lisp
+
+Then the simple file name @samp{@trampfn{ssh, , ,}} will connect you
+to John's home directory on target.
+@ifset emacs
+Note, however, that the most simplification @samp{/::} won't work,
+because @samp{/:} is the prefix for quoted file names.
+@end ifset
+
+
+@node Multi-hops
+@section Connecting to a remote host using multiple hops
+@cindex multi-hop
+@cindex proxy hosts
+
+Sometimes, the methods described before are not sufficient. Sometimes,
+it is not possible to connect to a remote host using a simple command.
+For example, if you are in a secured network, you might have to log in
+to a `bastion host' first before you can connect to the outside world.
+Of course, the target host may also require a bastion host.
+
+@vindex tramp-default-proxies-alist
+In order to specify such multiple hops, it is possible to define a proxy
+host to pass through, via the variable
+@code{tramp-default-proxies-alist}. This variable keeps a list of
+triples (@var{host} @var{user} @var{proxy}).
+
+ The first matching item specifies the proxy host to be passed for a
+file name located on a remote target matching @var{user}@@@var{host}.
+@var{host} and @var{user} are regular expressions or @code{nil}, which
+is interpreted as a regular expression which always matches.
+
+@var{proxy} must be a Tramp filename which localname part is ignored.
+Method and user name on @var{proxy} are optional, which is interpreted
+with the default values.
+@ifset emacsgw
+The method must be an inline or gateway method (@pxref{Inline
+methods}, @pxref{Gateway methods}).
+@end ifset
+@ifclear emacsgw
+The method must be an inline method (@pxref{Inline methods}).
+@end ifclear
+If @var{proxy} is @code{nil}, no additional hop is required reaching
+@var{user}@@@var{host}.
+
+If you, for example, must pass the host @samp{bastion.your.domain} as
+user @samp{bird} for any remote host which is not located in your local
+domain, you can set
+
+@lisp
+(add-to-list 'tramp-default-proxies-alist
+ '("\\." nil "@trampfn{ssh, bird, bastion.your.domain,}"))
+(add-to-list 'tramp-default-proxies-alist
+ '("\\.your\\.domain\\'" nil nil))
+@end lisp
+
+Please note the order of the code. @code{add-to-list} adds elements at the
+beginning of a list. Therefore, most relevant rules must be added last.
+
+Proxy hosts can be cascaded. If there is another host called
+@samp{jump.your.domain}, which is the only one in your local domain who
+is allowed connecting @samp{bastion.your.domain}, you can add another
+rule:
+
+@lisp
+(add-to-list 'tramp-default-proxies-alist
+ '("\\`bastion\\.your\\.domain\\'"
+ "\\`bird\\'"
+ "@trampfn{ssh, , jump.your.domain,}"))
+@end lisp
+
+@var{proxy} can contain the patterns @code{%h} or @code{%u}. These
+patterns are replaced by the strings matching @var{host} or
+@var{user}, respectively.
+
+If you, for example, wants to work as @samp{root} on hosts in the
+domain @samp{your.domain}, but login as @samp{root} is disabled for
+non-local access, you might add the following rule:
+
+@lisp
+(add-to-list 'tramp-default-proxies-alist
+ '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh, , %h,}"))
+@end lisp
+
+Opening @file{@trampfn{sudo, , randomhost.your.domain,}} would connect
+first @samp{randomhost.your.domain} via @code{ssh} under your account
+name, and perform @code{sudo -u root} on that host afterwards. It is
+important to know that the given method is applied on the host which
+has been reached so far. @code{sudo -u root}, applied on your local
+host, wouldn't be useful here.
+
+This is the recommended configuration to work as @samp{root} on remote
+Ubuntu hosts.
+
+@ifset emacsgw
+Finally, @code{tramp-default-proxies-alist} can be used to pass
+firewalls or proxy servers. Imagine your local network has a host
+@samp{proxy.your.domain} which is used on port 3128 as HTTP proxy to
+the outer world. Your friendly administrator has granted you access
+under your user name to @samp{host.other.domain} on that proxy
+server.@footnote{HTTP tunnels are intended for secure SSL/TLS
+communication. Therefore, many proxy server restrict the tunnels to
+related target ports. You might need to run your ssh server on your
+target host @samp{host.other.domain} on such a port, like 443 (https).
+See @uref{http://savannah.gnu.org/maintenance/CvsFromBehindFirewall}
+for discussion of ethical issues.} You would need to add the
+following rule:
+
+@lisp
+(add-to-list 'tramp-default-proxies-alist
+ '("\\`host\\.other\\.domain\\'" nil
+ "@trampfn{tunnel, , proxy.your.domain#3128,}"))
+@end lisp
+
+Gateway methods can be declared as first hop only in a multiple hop
+chain.
+@end ifset
+
+
@node Customizing Methods
@section Using Non-Standard Methods
@cindex customizing methods
@@ -1263,8 +1512,8 @@ you might provide such a function as well. This function must meet
the following conventions:
@defun my-tramp-parse file
-@var{file} must be either a file name on your host, or @code{nil}. The
-function must return a list of (@var{user} @var{host}), which are
+@var{file} must be either a file name on your host, or @code{nil}.
+The function must return a list of (@var{user} @var{host}), which are
taken as candidates for user and host name completion.
Example:
@@ -1297,28 +1546,77 @@ variable @code{password-cache-expiry}. The value is the number of
seconds how long passwords are cached. Setting it to @code{nil}
disables the expiration.
-@findex tramp-clear-passwd
-A password is removed from the cache if a connection isn't established
-successfully. You can remove a password from the cache also by
-executing @kbd{M-x tramp-clear-passwd} in a buffer containing a
-related remote file or directory.
-
@vindex password-cache
If you don't like this feature for security reasons, password caching
can be disabled totally by customizing the variable
@code{password-cache} (setting it to @code{nil}).
Implementation Note: password caching is based on the package
-password.el in No Gnus. For the time being, it is activated only when
-this package is seen in the @code{load-path} while loading @value{tramp}.
+@file{password.el} in No Gnus. For the time being, it is activated
+only when this package is seen in the @code{load-path} while loading
+@value{tramp}.
@ifset installchapter
-If you don't use No Gnus, you can take password.el from the @value{tramp}
-@file{contrib} directory, see @ref{Installation parameters}.
+If you don't use No Gnus, you can take @file{password.el} from the
+@value{tramp} @file{contrib} directory, see @ref{Installation
+parameters}.
@end ifset
It will be activated mandatory once No Gnus has found its way into
@value{emacsname}.
+@node Connection caching
+@section Reusing connection related information.
+@cindex caching
+
+@vindex tramp-persistency-file-name
+In order to reduce initial connection time, @value{tramp} stores
+connection related information persistently. The variable
+@code{tramp-persistency-file-name} keeps the file name where these
+information are written. Its default value is
+@ifset emacs
+@file{~/.emacs.d/tramp}.
+@end ifset
+@ifset xemacs
+@file{~/.xemacs/tramp}.
+@end ifset
+It is recommended to choose a local file name.
+
+@value{tramp} reads this file during startup, and writes it when
+exiting @value{emacsname}. You can simply remove this file if
+@value{tramp} shall be urged to recompute these information next
+@value{emacsname} startup time.
+
+Using such persistent information can be disabled by setting
+@code{tramp-persistency-file-name} to @code{nil}.
+
+Once consequence of reusing connection related information is that
+@var{tramp} needs to distinguish hosts. If you, for example, run a
+local @code{sshd} on port 3001, which tunnels @command{ssh} to another
+host, you could access both @file{@trampfn{ssh, , localhost,}} and
+@file{@trampfn{ssh, , localhost#3001,}}. @var{tramp} would use the
+same host related information (like paths, Perl variants, etc) for
+both connections, although the information is valid only for one of
+them.
+
+In order to avoid trouble, you must use another host name for one of
+the connections, like introducing a @option{Host} section in
+@file{~/.ssh/config} (@pxref{Frequently Asked Questions}) or applying
+multiple hops (@pxref{Multi-hops}).
+
+When @value{tramp} detects a changed operating system version on a
+remote host (via the command @command{uname -sr}), it flushes all
+connection related information for this host, quits the execution, and
+displays a message like this:
+
+@example
+Quit: "Connection reset, because remote host changed from `Linux
+2.6.22-13-generic' to `Linux 2.6.22-14-generic'"
+@end example
+
+@noindent
+You can simply open the remote file again in such a case.
+
+
@node Remote Programs
@section How @value{tramp} finds and uses programs on the remote machine.
@@ -1327,28 +1625,35 @@ function, including @command{ls}, @command{test}, @command{find} and
@command{cat}.
In addition to these required tools, there are various tools that may be
-required based on the connection method. See @ref{Inline methods} and
+required based on the connection method. See @ref{Inline methods} and
@ref{External transfer methods} for details on these.
Certain other tools, such as @command{perl} (or @command{perl5}) and
-@command{grep} will be used if they can be found. When they are
+@command{grep} will be used if they can be found. When they are
available, they are used to improve the performance and accuracy of
remote file access.
@vindex tramp-remote-path
When @value{tramp} connects to the remote machine, it searches for the
-programs that it can use. The variable @var{tramp-remote-path} controls
-the directories searched on the remote machine.
+programs that it can use. The variable @code{tramp-remote-path}
+controls the directories searched on the remote machine.
By default, this is set to a reasonable set of defaults for most
-machines. It is possible, however, that your local (or remote ;) system
+machines. The symbol @code{tramp-default-remote-path} is a place
+holder, it is replaced by the list of directories received via the
+command @command{getconf PATH} on your remote machine. For example,
+on GNU Debian this is @file{/bin:/usr/bin}, whereas on Solaris this is
+@file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin}. It is
+recommended to apply this symbol on top of @code{tramp-remote-path}.
+
+It is possible, however, that your local (or remote ;) system
administrator has put the tools you want in some obscure local
directory.
-In this case, you can still use them with @value{tramp}. You simply need to
-add code to your @file{.emacs} to add the directory to the remote path.
-This will then be searched by @value{tramp} when you connect and the software
-found.
+In this case, you can still use them with @value{tramp}. You simply
+need to add code to your @file{.emacs} to add the directory to the
+remote path. This will then be searched by @value{tramp} when you
+connect and the software found.
To add a directory to the remote search path, you could use code such
as:
@@ -1360,9 +1665,14 @@ as:
(add-to-list 'tramp-remote-path "/usr/local/perl/bin")
@end lisp
+@value{tramp} caches several information, like the Perl binary
+location. The changed remote search path wouldn't affect these
+settings. In order to force @value{tramp} to recompute these values,
+you must exit @value{emacsname}, remove your persistency file
+(@pxref{Connection caching}), and restart @value{emacsname}.
+
@node Remote shell setup
-@comment node-name, next, previous, up
@section Remote shell setup hints
@cindex remote shell setup
@cindex @file{.profile} file
@@ -1427,26 +1737,76 @@ different user. The default value of
@code{shell-prompt-pattern}, which is reported to work well in many
circumstances.
+@item @var{tramp-password-prompt-regexp}
+@vindex tramp-password-prompt-regexp
+@vindex tramp-wrong-passwd-regexp
+
+During login, @value{tramp} might be forced to enter a password or a
+passphrase. The difference between both is that a password is
+requested from the shell on the remote host, while a passphrase is
+needed for accessing local authentication information, like your ssh
+key.
+
+@var{tramp-password-prompt-regexp} handles the detection of such
+requests for English environments. When you use another localization
+of your (local or remote) host, you might need to adapt this. Example:
+
+@lisp
+(setq
+ tramp-password-prompt-regexp
+ (concat
+ "^.*"
+ (regexp-opt
+ '("passphrase" "Passphrase"
+ ;; English
+ "password" "Password"
+ ;; Deutsch
+ "passwort" "Passwort"
+ ;; Fran@,{c}ais
+ "mot de passe" "Mot de passe") t)
+ ".*:
+@end lisp
+
+In parallel, it might also be necessary to adapt
+@var{tramp-wrong-passwd-regexp}.
+
@item @command{tset} and other questions
@cindex Unix command tset
@cindex tset Unix command
Some people invoke the @command{tset} program from their shell startup
scripts which asks the user about the terminal type of the shell.
-Maybe some shells ask other questions when they are started. @value{tramp}
-does not know how to answer these questions. There are two approaches
-for dealing with this problem. One approach is to take care that the
-shell does not ask any questions when invoked from @value{tramp}. You can
-do this by checking the @code{TERM} environment variable, it will be
-set to @code{dumb} when connecting.
+Maybe some shells ask other questions when they are started.
+@value{tramp} does not know how to answer these questions. There are
+two approaches for dealing with this problem. One approach is to take
+care that the shell does not ask any questions when invoked from
+@value{tramp}. You can do this by checking the @code{TERM}
+environment variable, it will be set to @code{dumb} when connecting.
@vindex tramp-terminal-type
The variable @code{tramp-terminal-type} can be used to change this value
to @code{dumb}.
+@vindex tramp-actions-before-shell
The other approach is to teach @value{tramp} about these questions. See
-the variables @code{tramp-actions-before-shell} and
-@code{tramp-multi-actions} (for multi-hop connections).
+the variable @code{tramp-actions-before-shell}. Example:
+
+@lisp
+(defconst my-tramp-prompt-regexp
+ (concat (regexp-opt '("Enter the birth date of your mother:") t)
+ "\\s-*")
+ "Regular expression matching my login prompt question.")
+
+(defun my-tramp-action (proc vec)
+ "Enter \"19000101\" in order to give a correct answer."
+ (save-window-excursion
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (tramp-message vec 6 "\n%s" (buffer-string))
+ (tramp-send-string vec "19000101"))))
+
+(add-to-list 'tramp-actions-before-shell
+ '(my-tramp-prompt-regexp my-tramp-action))
+@end lisp
@item Environment variables named like users in @file{.profile}
@@ -1484,10 +1844,10 @@ of the single character tilde, strange things will happen.
What can you do about this?
-Well, one possibility is to make sure that everything in @file{~/.shrc}
-and @file{~/.profile} on all remote hosts is Bourne-compatible. In the
-above example, instead of @command{export FOO=bar}, you might use
-@command{FOO=bar; export FOO} instead.
+Well, one possibility is to make sure that everything in
+@file{~/.shrc} and @file{~/.profile} on all remote hosts is
+Bourne-compatible. In the above example, instead of @command{export
+FOO=bar}, you might use @command{FOO=bar; export FOO} instead.
The other possibility is to put your non-Bourne shell setup into some
other files. For example, bash reads the file @file{~/.bash_profile}
@@ -1528,13 +1888,13 @@ variable
@ifset xemacs
@code{bkup-backup-directory-info}.
@end ifset
-In connection with @value{tramp}, this can have unexpected side effects.
-Suppose that you specify that all backups should go to the directory
-@file{~/.emacs.d/backups/}, and then you edit the file
-@file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}/etc/secretfile}.
-The effect is that the backup file will be owned by you and not by
-root, thus possibly enabling others to see it even if they were not
-intended to see it.
+In connection with @value{tramp}, this can have unexpected side
+effects. Suppose that you specify that all backups should go to the
+directory @file{~/.emacs.d/backups/}, and then you edit the file
+@file{@trampfn{su, root, localhost, /etc/secretfile}}. The effect is
+that the backup file will be owned by you and not by root, thus
+possibly enabling others to see it even if they were not intended to
+see it.
When
@ifset emacs
@@ -1608,14 +1968,15 @@ Example:
@end ifset
@noindent
-The backup file name of
-@file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}/etc/secretfile}
-would be
+The backup file name of @file{@trampfn{su, root, localhost,
+/etc/secretfile}} would be
@ifset emacs
-@file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}
+@file{@trampfn{su, root, localhost,
+~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
@end ifset
@ifset xemacs
-@file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}
+@file{@trampfn{su, root, localhost,
+~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
@end ifset
The same problem can happen with auto-saving files.
@@ -1669,8 +2030,8 @@ can find information about setting up Cygwin in their FAQ at
If you wish to use the @option{scpx} connection method, then you might
have the problem that @value{emacsname} calls @command{scp} with a
Windows filename such as @code{c:/foo}. The Cygwin version of
-@command{scp} does not know about Windows filenames and interprets this
-as a remote filename on the host @code{c}.
+@command{scp} does not know about Windows filenames and interprets
+this as a remote filename on the host @code{c}.
One possible workaround is to write a wrapper script for @option{scp}
which converts the Windows filename to a Cygwinized filename.
@@ -1696,9 +2057,9 @@ know anything at all about Windows@dots{}
@chapter Using @value{tramp}
@cindex using @value{tramp}
-Once you have installed @value{tramp} it will operate fairly transparently. You
-will be able to access files on any remote machine that you can log in
-to as though they were local.
+Once you have installed @value{tramp} it will operate fairly
+transparently. You will be able to access files on any remote machine
+that you can log in to as though they were local.
Files are specified to @value{tramp} using a formalized syntax specifying the
details of the system to connect to. This is similar to the syntax used
@@ -1717,10 +2078,10 @@ minute you have already forgotten that you hit that key!
@menu
* Filename Syntax:: @value{tramp} filename conventions.
-* Multi-hop filename syntax:: Multi-hop filename conventions.
+* Alternative Syntax:: URL-like filename syntax.
* Filename completion:: Filename completion.
-* Dired:: Dired.
-* Compilation:: Compile remote files.
+* Remote processes:: Integration with other @value{emacsname} packages.
+* Cleanup remote connections:: Cleanup remote connections.
@end menu
@@ -1729,123 +2090,108 @@ minute you have already forgotten that you hit that key!
@cindex filename syntax
@cindex filename examples
-To access the file @var{localname} on the remote machine @var{machine} you
-would specify the filename
-@file{@value{prefix}@var{machine}@value{postfix}@var{localname}}.
-This will connect to @var{machine} and transfer the file using the
-default method. @xref{Default Method}.
+To access the file @var{localname} on the remote machine @var{machine}
+you would specify the filename @file{@trampfn{, , machine,
+localname}}. This will connect to @var{machine} and transfer the file
+using the default method. @xref{Default Method}.
Some examples of @value{tramp} filenames are shown below.
@table @file
-@item @value{prefix}melancholia@value{postfix}.emacs
+@item @trampfn{, , melancholia, .emacs}
Edit the file @file{.emacs} in your home directory on the machine
@code{melancholia}.
-@item @value{prefix}melancholia.danann.net@value{postfix}.emacs
+@item @trampfn{, , melancholia.danann.net, .emacs}
This edits the same file, using the fully qualified domain name of
the machine.
-@item @value{prefix}melancholia@value{postfix}~/.emacs
+@item @trampfn{, , melancholia, ~/.emacs}
This also edits the same file --- the @file{~} is expanded to your
home directory on the remote machine, just like it is locally.
-@item @value{prefix}melancholia@value{postfix}~daniel/.emacs
+@item @trampfn{, , melancholia, ~daniel/.emacs}
This edits the file @file{.emacs} in the home directory of the user
-@code{daniel} on the machine @code{melancholia}. The @file{~<user>}
+@code{daniel} on the machine @code{melancholia}. The @file{~<user>}
construct is expanded to the home directory of that user on the remote
machine.
-@item @value{prefix}melancholia@value{postfix}/etc/squid.conf
+@item @trampfn{, , melancholia, /etc/squid.conf}
This edits the file @file{/etc/squid.conf} on the machine
@code{melancholia}.
@end table
Unless you specify a different name to use, @value{tramp} will use the
-current local user name as the remote user name to log in with. If you
+current local user name as the remote user name to log in with. If you
need to log in as a different user, you can specify the user name as
part of the filename.
To log in to the remote machine as a specific user, you use the syntax
-@file{@value{prefix}@var{user}@@@var{machine}@value{postfix}/@var{path/to.file}}.
-That means that connecting to @code{melancholia} as @code{daniel} and
-editing @file{.emacs} in your home directory you would specify
-@file{@value{prefix}daniel@@melancholia@value{postfix}.emacs}.
+@file{@trampfn{, user, machine, path/to.file}}. That means that
+connecting to @code{melancholia} as @code{daniel} and editing
+@file{.emacs} in your home directory you would specify
+@file{@trampfn{, daniel, melancholia, .emacs}}.
It is also possible to specify other file transfer methods
-(@pxref{Default Method}) as part of the filename.
+(@pxref{Inline methods}, @pxref{External transfer methods}) as part of
+the filename.
@ifset emacs
This is done by putting the method before the user and host name, as
-in
-@file{@value{prefix}@var{method}@value{postfixsinglehop}}
-(Note the trailing colon).
+in @file{@value{prefix}@var{method}@value{postfixhop}} (Note the
+trailing colon).
@end ifset
@ifset xemacs
-This is done by replacing the initial
-@file{@value{prefix}} with
-@file{@value{prefix}<method>@value{postfixsinglehop}}.
-(Note the trailing slash!).
+This is done by replacing the initial @file{@value{prefix}} with
+@file{@value{prefix}<method>@value{postfixhop}}. (Note the trailing
+slash!).
@end ifset
The user, machine and file specification remain the same.
So, to connect to the machine @code{melancholia} as @code{daniel},
-using the @option{ssh} method to transfer files, and edit @file{.emacs}
-in my home directory I would specify the filename
-@file{@value{prefix}ssh@value{postfixsinglehop}daniel@@melancholia@value{postfix}.emacs}.
+using the @option{ssh} method to transfer files, and edit
+@file{.emacs} in my home directory I would specify the filename
+@file{@trampfn{ssh, daniel, melancholia, .emacs}}.
-@node Multi-hop filename syntax
-@section Multi-hop filename conventions
-@cindex filename syntax for multi-hop files
-@cindex multi-hop filename syntax
+@node Alternative Syntax
+@section URL-like filename syntax
+@cindex filename syntax
+@cindex filename examples
-The syntax of multi-hop file names is necessarily slightly different
-than the syntax of other @value{tramp} file names. Here's an example
-multi-hop file name:
+Additionally to the syntax described in the previous chapter, it is
+possible to use a URL-like syntax for @value{tramp}. This can be
+switched on by customizing the variable @code{tramp-syntax}. Please
+note that this feature is experimental for the time being.
-@example
-@value{prefix}multi@value{postfixsinglehop}rsh@value{postfixmultihop}out@@gate@value{postfixsinglehop}telnet@value{postfixmultihop}kai@@real.host@value{postfix}/path/to.file
-@end example
+The variable @code{tramp-syntax} must be set before requiring @value{tramp}:
-This is quite a mouthful. So let's go through it step by step. The
-file name consists of three parts.
-@ifset emacs
-The parts are separated by colons
-@end ifset
-@ifset xemacs
-The parts are separated by slashes and square brackets.
-@end ifset
-The first part is @file{@value{prefix}multi}, the method
-specification. The second part is
-@file{rsh@value{postfixmultihop}out@@gate@value{postfixsinglehop}telnet@value{postfixmultihop}kai@@real.host}
-and specifies the hops. The final part is @file{/path/to.file} and
-specifies the file name on the remote host.
-
-The first part and the final part should be clear. See @ref{Multi-hop
-Methods}, for a list of alternatives for the method specification.
+@lisp
+(setq tramp-syntax 'url)
+(require 'tramp)
+@end lisp
-The second part can be subdivided again into components, so-called
-hops. In the above file name, there are two hops,
-@file{rsh@value{postfixmultihop}out@@gate} and
-@file{telnet@value{postfixmultihop}kai@@real.host}.
+Then, a @value{tramp} filename would look like this:
+@file{/@var{method}://@var{user}@@@var{machine}:@var{port}/@var{path/to.file}}.
+@file{/@var{method}://} is mandatory, all other parts are optional.
+@file{:@var{port}} is useful for methods only who support this.
-Each hop can @emph{again} be subdivided into (three) components, the
-@dfn{hop method}, the @dfn{user name} and the @dfn{host name}. The
-meaning of the second and third component should be clear, and the hop
-method says what program to use to perform that hop.
+The last example from the previous section would look like this:
+@file{/ssh://daniel@@melancholia/.emacs}.
-The first hop, @file{rsh@value{postfixmultihop}out@@gate},
-says to use @command{rsh} to log in as user @code{out} to the host
-@code{gate}. Starting at that host, the second hop,
-@file{telnet@value{postfixmultihop}kai@@real.host}, says to
-use @command{telnet} to log in as user @code{kai} to host
-@code{real.host}.
+For the time being, @code{tramp-syntax} can have the following values:
-@xref{Multi-hop Methods}, for a list of possible hop method values.
-The variable @code{tramp-multi-connection-function-alist} contains the
-list of possible hop methods and information on how to execute them,
-should you want to add your own.
+@itemize @w{}
+@ifset emacs
+@item @code{ftp} -- That is the default syntax
+@item @code{url} -- URL-like syntax
+@end ifset
+@ifset xemacs
+@item @code{sep} -- That is the default syntax
+@item @code{url} -- URL-like syntax
+@item @code{ftp} -- EFS-like syntax
+@end ifset
+@end itemize
@node Filename completion
@@ -1853,10 +2199,20 @@ should you want to add your own.
@cindex filename completion
Filename completion works with @value{tramp} for completion of method
-names, of user names and of machine names (except multi-hop methods)
-as well as for completion of file names on remote machines.
+names, of user names and of machine names as well as for completion of
+file names on remote machines.
@ifset emacs
-In order to enable this, Partial Completion mode must be set on.
+In order to enable this, Partial Completion mode must be set
+on@footnote{If you don't use Partial Completion mode, but want to
+keep full completion, load @value{tramp} like this in your
+@file{.emacs}:
+
+@lisp
+;; Preserve Tramp's completion features.
+(let ((partial-completion-mode t))
+ (require 'tramp))
+@end lisp
+}.
@ifinfo
@xref{Completion Options, , , @value{emacsdir}}.
@end ifinfo
@@ -1867,85 +2223,240 @@ If you, for example, type @kbd{C-x C-f @value{prefix}t
@example
@ifset emacs
-@value{prefixsinglehop}telnet@value{postfixsinglehop} tmp/
-@value{prefixsinglehop}toto@value{postfix}
+@value{prefixhop}telnet@value{postfixhop} tmp/
+@value{prefixhop}toto@value{postfix}
@end ifset
@ifset xemacs
-@value{prefixsinglehop}telnet@value{postfixsinglehop} @value{prefixsinglehop}toto@value{postfix}
+@value{prefixhop}telnet@value{postfixhop} @value{prefixhop}toto@value{postfix}
@end ifset
@end example
-@samp{@value{prefixsinglehop}telnet@value{postfixsinglehop}}
+@samp{@value{prefixhop}telnet@value{postfixhop}}
is a possible completion for the respective method,
@ifset emacs
@samp{tmp/} stands for the directory @file{/tmp} on your local
machine,
@end ifset
-and @samp{@value{prefixsinglehop}toto@value{postfix}}
+and @samp{@value{prefixhop}toto@value{postfix}}
might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
file (given you're using default method @option{ssh}).
If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to
-@samp{@value{prefix}telnet@value{postfixsinglehop}}.
+@samp{@value{prefix}telnet@value{postfixhop}}.
Next @kbd{@key{TAB}} brings you all machine names @value{tramp} detects in
your @file{/etc/hosts} file, let's say
@example
-@value{prefixsinglehop}telnet@value{postfixsinglehop}127.0.0.1@value{postfix} @value{prefixsinglehop}telnet@value{postfixsinglehop}192.168.0.1@value{postfix}
-@value{prefixsinglehop}telnet@value{postfixsinglehop}localhost@value{postfix} @value{prefixsinglehop}telnet@value{postfixsinglehop}melancholia.danann.net@value{postfix}
-@value{prefixsinglehop}telnet@value{postfixsinglehop}melancholia@value{postfix}
+@trampfn{telnet, , 127.0.0.1,} @trampfn{telnet, , 192.168.0.1,}
+@trampfn{telnet, , localhost,} @trampfn{telnet, , melancholia.danann.net,}
+@trampfn{telnet, , melancholia,}
@end example
Now you can choose the desired machine, and you can continue to
complete file names on that machine.
-As filename completion needs to fetch the listing of files from the
-remote machine, this feature is sometimes fairly slow. As @value{tramp}
-does not yet cache the results of directory listing, there is no gain
-in performance the second time you complete filenames.
-
If the configuration files (@pxref{Customizing Completion}), which
@value{tramp} uses for analysis of completion, offer user names, those user
names will be taken into account as well.
+Remote machines, which have been visited in the past and kept
+persistently (@pxref{Connection caching}), will be offered too.
+
+Once the remote machine identification is completed, it comes to
+filename completion on the remote host. This works pretty much like
+for files on the local host, with the exception that minibuffer
+killing via a double-slash works only on the filename part, except
+that filename part starts with @file{//}.
+@ifset emacs
+A triple-slash stands for the default behaviour.
+@end ifset
+@ifinfo
+@xref{Minibuffer File, , , @value{emacsdir}}.
+@end ifinfo
+
+@noindent
+Example:
+
+@example
+@ifset emacs
+@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//etc} @key{TAB}}
+ @print{} @trampfn{telnet, , melancholia, /etc}
+
+@kbd{C-x C-f @trampfn{telnet, , melancholia, //etc} @key{TAB}}
+ @print{} /etc
+
+@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin///etc} @key{TAB}}
+ @print{} /etc
+@end ifset
+
+@ifset xemacs
+@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//}}
+ @print{} @trampfn{telnet, , melancholia, /}
-@node Dired
-@section Dired
-@cindex dired
+@kbd{C-x C-f @trampfn{telnet, , melancholia, //}}
+ @print{} /
+@end ifset
+@end example
-@value{tramp} works transparently with dired, enabling you to use this powerful
-file management tool to manage files on any machine you have access to
-over the Internet.
+A remote directory might have changed its contents out of
+@value{emacsname} control, for example by creation or deletion of
+files by other processes. Therefore, during filename completion the
+remote directory contents is reread regularly in order to detect such
+changes, which would be invisible otherwise (@pxref{Connection caching}).
-If you need to browse a directory tree, Dired is a better choice, at
-present, than filename completion. Dired has its own cache mechanism
-and will only fetch the directory listing once.
+@defopt tramp-completion-reread-directory-timeout
+This variable defines the number of seconds since last remote command
+before rereading a directory contents. A value of 0 would require an
+immediate reread during filename completion, @code{nil} means to use
+always cached values for the directory contents.
+@end defopt
-@node Compilation
-@section Compile remote files
+@node Remote processes
+@section Integration with other @value{emacsname} packages.
@cindex compile
@cindex recompile
-@value{tramp} provides commands for compilation of files on remote
-machines. In order to get them loaded, you need to require
-@file{tramp-util.el}:
+@value{tramp} supports running processes on a remote host. This
+allows to exploit @value{emacsname} packages without modification for
+remote file names. It does not work for the @option{ftp} and
+@option{smb} methods.
+
+Remote processes are started when a corresponding command is executed
+from a buffer belonging to a remote file or directory. Up to now, the
+packages @file{compile.el} (commands like @code{compile} and
+@code{grep}) and @file{gud.el} (@code{gdb} or @code{perldb}) have been
+integrated. Integration of further packages is planned, any help for
+this is welcome!
+
+When your program is not found in the default search path
+@value{tramp} sets on the remote machine, you should either use an
+absolute path, or extend @code{tramp-remote-path} (see @ref{Remote
+Programs}):
+
+@lisp
+(add-to-list 'tramp-remote-path "~/bin")
+(add-to-list 'tramp-remote-path "/appli/pub/bin")
+@end lisp
+
+The environment for your program can be adapted by customizing
+@code{tramp-remote-process-environment}. This variable is a list of
+strings. It is structured like @code{process-environment}. Each
+element is a string of the form ENVVARNAME=VALUE. An entry
+ENVVARNAME= disables the corresponding environment variable, which
+might have been set in your init file like @file{~/.profile}.
+
+@noindent
+Adding an entry can be performed via @code{add-to-list}:
+
+@lisp
+(add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
+@end lisp
+
+Changing or removing an existing entry is not encouraged. The default
+values are chosen for proper @value{tramp} work. Nevertheless, if for
+example a paranoid system administrator disallows changing the
+@var{$HISTORY} environment variable, you can customize
+@code{tramp-remote-process-environment}, or you can apply the
+following code in your @file{.emacs}:
@lisp
-(require 'tramp-util)
+(let ((process-environment tramp-remote-process-environment))
+ (setenv "HISTORY" nil)
+ (setq tramp-remote-process-environment process-environment))
@end lisp
-Afterwards, you can use the commands @code{tramp-compile} and
-@code{tramp-recompile} instead of @code{compile} and @code{recompile},
-respectively; @inforef{Compilation, ,@value{emacsdir}}. This does not
-work for the @option{ftp} and @option{smb} methods.
+If you use other @value{emacsname} packages which do not run
+out-of-the-box on a remote host, please let us know. We will try to
+integrate them as well. @xref{Bug Reports}.
+
+
+@subsection Running eshell on a remote host
+@cindex eshell
+
+@value{tramp} is integrated into @file{eshell.el}. That is, you can
+open an interactive shell on your remote host, and run commands there.
+After you have started @code{eshell}, you could perform commands like
+this:
+
+@example
+@b{~ $} cd @trampfn{sudo, , , /etc} @key{RET}
+@b{@trampfn{sudo, root, host, /etc} $} hostname @key{RET}
+host
+@b{@trampfn{sudo, root, host, /etc} $} id @key{RET}
+uid=0(root) gid=0(root) groups=0(root)
+@b{@trampfn{sudo, root, host, /etc} $} find-file shadow @key{RET}
+#<buffer shadow>
+@b{@trampfn{sudo, root, host, /etc} $}
+@end example
+
+
+@anchor{Running a debugger on a remote host}
+@subsection Running a debugger on a remote host
+@cindex gud
+@cindex gdb
+@cindex perldb
+
+@file{gud.el} offers an unified interface to several symbolic
+debuggers
+@ifset emacs
+@ifinfo
+(@ref{Debuggers, , , @value{emacsdir}}).
+@end ifinfo
+@end ifset
+With @value{tramp}, it is possible to debug programs on
+remote hosts. You can call @code{gdb} with a remote file name:
+
+@example
+@kbd{M-x gdb @key{RET}}
+@b{Run gdb (like this):} gdb --annotate=3 @trampfn{ssh, , host, ~/myprog} @key{RET}
+@end example
+
+The file name can also be relative to a remote default directory.
+Given you are in a buffer that belongs to the remote directory
+@trampfn{ssh, , host, /home/user}, you could call
+
+@example
+@kbd{M-x perldb @key{RET}}
+@b{Run perldb (like this):} perl -d myprog.pl @key{RET}
+@end example
+
+It is not possible to use just the absolute local part of a remote
+file name as program to debug, like @kbd{perl -d
+/home/user/myprog.pl}, though.
+
+Arguments of the program to be debugged are taken literally. That
+means file names as arguments must be given as ordinary relative or
+absolute file names, without any remote specification.
+
+
+@node Cleanup remote connections
+@section Cleanup remote connections.
+@cindex cleanup
-The corresponding key bindings and menu entries calling these commands
-are redefined automatically for buffers associated with remote files.
+Sometimes it is useful to cleanup remote connections. The following
+commands support this.
-After finishing the compilation, you can use the usual commands like
-@code{previous-error}, @code{next-error} and @code{first-error} for
-navigation in the @file{*Compilation*} buffer.
+@deffn Command tramp-cleanup-connection vec
+This command flushes all connection related objects. @option{vec} is
+the internal representation of a remote connection. Called
+interactively, the command offers all active remote connections in the
+minibuffer as remote file name prefix like @file{@trampfn{method,
+user, host, }}. The cleanup includes password cache (@pxref{Password
+caching}), file cache, connection cache (@pxref{Connection caching}),
+connection buffers.
+@end deffn
+
+@deffn Command tramp-cleanup-all-connections
+This command flushes objects for all active remote connections. The
+same objects are removed as in @code{tramp-cleanup-connection}.
+@end deffn
+
+@deffn Command tramp-cleanup-all-buffers
+Like in @code{tramp-cleanup-all-connections}, all remote connections
+are cleaned up. Additionally all buffers, which are related to a
+remote connection, are killed.
+@end deffn
@node Bug Reports
@@ -1953,7 +2464,7 @@ navigation in the @file{*Compilation*} buffer.
@cindex bug reports
Bugs and problems with @value{tramp} are actively worked on by the
-development team. Feature requests and suggestions are also more than
+development team. Feature requests and suggestions are also more than
welcome.
The @value{tramp} mailing list is a great place to get information on
@@ -1964,16 +2475,17 @@ non-subscribers can post but messages will be delayed, possibly up to
your message.
The mailing list is at @email{tramp-devel@@gnu.org}. Messages sent to
-this address go to all the subscribers. This is @emph{not} the address
+this address go to all the subscribers. This is @emph{not} the address
to send subscription requests to.
Subscribing to the list is performed via
@uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/,
the @value{tramp} Mail Subscription Page}.
-To report a bug in @value{tramp}, you should execute @kbd{M-x tramp-bug}. This
-will automatically generate a buffer with the details of your system and
-@value{tramp} version.
+@findex tramp-bug
+To report a bug in @value{tramp}, you should execute @kbd{M-x
+tramp-bug}. This will automatically generate a buffer with the details
+of your system and @value{tramp} version.
When submitting a bug report, please try to describe in excruciating
detail the steps required to reproduce the problem, the setup of the
@@ -1982,8 +2494,20 @@ check that your problem is not described already in @xref{Frequently
Asked Questions}.
If you can identify a minimal test case that reproduces the problem,
-include that with your bug report. This will make it much easier for the
-development team to analyze and correct the problem.
+include that with your bug report. This will make it much easier for
+the development team to analyze and correct the problem.
+
+Before reporting the bug, you should set the verbosity level to 6
+(@pxref{Traces and Profiles, Traces}) in the @file{~/.emacs} file and
+repeat the bug. Then, include the contents of the @file{*tramp/foo*}
+and @file{*debug tramp/foo*} buffers in your bug report. A verbosity
+level greater than 6 will produce a very huge debug buffer, which is
+mostly not necessary for the analysis.
+
+Please be aware that, with a verbosity level of 6 or greater, the
+contents of files and directories will be included in the debug
+buffer. Passwords you've typed will never be included there.
+
@node Frequently Asked Questions
@chapter Frequently Asked Questions
@@ -2009,10 +2533,9 @@ There is also a Savannah project page.
@item
Which systems does it work on?
-The package has been used successfully on GNU Emacs 20, GNU Emacs 21
-and GNU Emacs 22, as well as XEmacs 21. XEmacs 20 is more
-problematic, see the notes in @file{tramp.el}. I don't think anybody
-has really tried it on GNU Emacs 19.
+The package has been used successfully on GNU Emacs 21, GNU Emacs 22
+and XEmacs 21 (starting with 21.4). Gateway methods are supported for
+GNU Emacs 22 only.
The package was intended to work on Unix, and it really expects a
Unix-like system on the remote end (except the @option{smb} method),
@@ -2023,13 +2546,41 @@ There is some informations on @value{tramp} on NT at the following URL;
many thanks to Joe Stoy for providing the information:
@uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
-@c The link is broken. I've contacted Tom for clarification. Michael.
+@c The link is broken. I've contacted Tom for clarification. Michael.
@ignore
The above mostly contains patches to old ssh versions; Tom Roche has a
Web page with instructions:
@uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
@end ignore
+@item
+How could I speed up @value{tramp}?
+
+In the backstage, @value{tramp} needs a lot of operations on the
+remote host. The time for transferring data from and to the remote
+host as well as the time needed to perform the operations there count.
+In order to speed up @value{tramp}, one could either try to avoid some
+of the operations, or one could try to improve their performance.
+
+Use an external transfer method, like @option{scpc}.
+
+Use caching. This is already enabled by default. Information about
+the remote host as well as the remote files are cached for reuse. The
+information about remote hosts is kept in the file specified in
+@code{tramp-persistency-file-name}. Keep this file.
+
+Disable version control. If you access remote files which are not
+under version control, a lot of check operations can be avoided by
+disabling VC. This can be achieved by
+
+@lisp
+(setq vc-handled-backends nil)
+@end lisp
+
+Disable excessive traces. The default trace level of @value{tramp},
+defined in the variable @code{tramp-verbose}, is 3. You should
+increase this level only temporarily, hunting bugs.
+
@item
@value{tramp} does not connect to the remote host
@@ -2048,6 +2599,17 @@ contains unknown characters like escape sequences for coloring. This
should be avoided on the remote side. @xref{Remote shell setup}. for
setting the regular expression detecting the prompt.
+You can check your settings after an unsuccessful connection by
+switching to the @value{tramp} connection buffer @file{*tramp/foo*},
+setting the cursor at the top of the buffer, and applying the expression
+
+@example
+@kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
+@end example
+
+If it fails, or the cursor is not moved at the end of the buffer, your
+prompt is not recognised correctly.
+
A special problem is the zsh, which uses left-hand side and right-hand
side prompts in parallel. Therefore, it is necessary to disable the
zsh line editor on the remote host. You shall add to @file{~/.zshrc}
@@ -2057,15 +2619,34 @@ the following command:
[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
@end example
+
@item
@value{tramp} doesn't transfer strings with more than 500 characters
correctly
On some few systems, the implementation of @code{process-send-string}
-seems to be broken for longer strings. This case, you should
-customize the variable @code{tramp-chunksize} to 500. For a
-description how to determine whether this is necessary see the
-documentation of @code{tramp-chunksize}.
+seems to be broken for longer strings. It is reported for HP-UX,
+FreeBSD and Tru64 Unix, for example. This case, you should customize
+the variable @code{tramp-chunksize} to 500. For a description how to
+determine whether this is necessary see the documentation of
+@code{tramp-chunksize}.
+
+Additionally, it will be useful to set @code{file-precious-flag} to
+@code{t} for @value{tramp} files. Then the file contents will be
+written into a temporary file first, which is checked for correct
+checksum.
+@ifinfo
+@pxref{Saving Buffers, , , elisp}
+@end ifinfo
+
+@lisp
+(add-hook
+ 'find-file-hooks
+ '(lambda ()
+ (when (file-remote-p default-directory)
+ (set (make-local-variable 'file-precious-flag) t))))
+@end lisp
+
@end itemize
@@ -2114,20 +2695,113 @@ remote host.
@lisp
(defadvice tramp-handle-write-region
(after tramp-write-beep-advice activate)
- " make tramp beep after writing a file."
- (interactive)
- (beep))
+ "Make tramp beep after writing a file."
+ (interactive)
+ (beep))
+
(defadvice tramp-handle-do-copy-or-rename-file
(after tramp-copy-beep-advice activate)
- " make tramp beep after copying a file."
- (interactive)
- (beep))
+ "Make tramp beep after copying a file."
+ (interactive)
+ (beep))
+
(defadvice tramp-handle-insert-file-contents
- (after tramp-copy-beep-advice activate)
- " make tramp beep after copying a file."
- (interactive)
- (beep))
+ (after tramp-insert-beep-advice activate)
+ "Make tramp beep after inserting a file."
+ (interactive)
+ (beep))
+@end lisp
+
+
+@ifset emacs
+@item
+I'ld like to get a Visual Warning when working in a sudo:ed context
+
+When you are working with @samp{root} privileges, it might be useful
+to get an indication in the buffer's modeline. The following code,
+tested with @value{emacsname} 22.1, does the job. You should put it
+into your @file{~/.emacs}:
+
+@lisp
+(defun my-mode-line-function ()
+ (when (string-match "^/su\\(do\\)?:" default-directory)
+ (setq mode-line-format
+ (format-mode-line mode-line-format 'font-lock-warning-face))))
+
+(add-hook 'find-file-hooks 'my-mode-line-function)
+(add-hook 'dired-mode-hook 'my-mode-line-function)
+@end lisp
+@end ifset
+
+
+@ifset emacs
+@item
+I'ld like to see a host indication in the mode line when I'm remote
+
+The following code has been tested with @value{emacsname} 22.1. You
+should put it into your @file{~/.emacs}:
+
+@lisp
+(defconst my-mode-line-buffer-identification
+ (list
+ '(:eval
+ (let ((host-name
+ (if (file-remote-p default-directory)
+ (tramp-file-name-host
+ (tramp-dissect-file-name default-directory))
+ (system-name))))
+ (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
+ (substring host-name 0 (match-beginning 1))
+ host-name)))
+ ": %12b"))
+
+(setq-default
+ mode-line-buffer-identification
+ my-mode-line-buffer-identification)
+
+(add-hook
+ 'dired-mode-hook
+ '(lambda ()
+ (setq
+ mode-line-buffer-identification
+ my-mode-line-buffer-identification)))
+@end lisp
+
+Since @value{emacsname} 23.1, the mode line contains an indication if
+@code{default-directory} for the current buffer is on a remote host.
+The corresponding tooltip includes the name of that host. If you
+still want the host name as part of the mode line, you can use the
+example above, but the @code{:eval} clause can be simplified:
+
+@lisp
+ '(:eval
+ (let ((host-name
+ (or (file-remote-p default-directory 'host)
+ (system-name))))
+ (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
+ (substring host-name 0 (match-beginning 1))
+ host-name)))
@end lisp
+@end ifset
+
+
+@ifset emacs
+@item
+My remote host does not understand default directory listing options
+
+@value{emacsname} computes the @command{dired} options depending on
+the local host you are working. If your @command{ls} command on the
+remote host does not understand those options, you can change them
+like this:
+
+@lisp
+(add-hook
+ 'dired-before-readin-hook
+ '(lambda ()
+ (when (file-remote-p default-directory)
+ (setq dired-actual-switches "-al"))))
+@end lisp
+@end ifset
@item
@@ -2152,6 +2826,252 @@ fi
@end example
+@item There are longish file names to type. How to shorten this?
+
+Let's say you need regularly access to @file{@trampfn{ssh, news,
+news.my.domain, /opt/news/etc}}, which is boring to type again and
+again. The following approaches can be mixed:
+
+@enumerate
+
+@item Use default values for method and user name:
+
+You can define default methods and user names for hosts,
+(@pxref{Default Method}, @pxref{Default User}):
+
+@lisp
+(setq tramp-default-method "ssh"
+ tramp-default-user "news")
+@end lisp
+
+The file name left to type would be
+@kbd{C-x C-f @trampfn{, , news.my.domain, /opt/news/etc}}.
+
+Note, that there are some useful settings already. Accessing your
+local host as @samp{root} user, is possible just by @kbd{C-x C-f
+@trampfn{su, , ,}}.
+
+@item Use configuration possibilities of your method:
+
+Several connection methods (i.e. the programs used) offer powerful
+configuration possibilities (@pxref{Customizing Completion}). In the
+given case, this could be @file{~/.ssh/config}:
+
+@example
+Host xy
+ HostName news.my.domain
+ User news
+@end example
+
+The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
+/opt/news/etc}}. Depending on files in your directories, it is even
+possible to complete the host name with @kbd{C-x C-f
+@value{prefix}ssh@value{postfixhop}x @key{TAB}}.
+
+@item Use environment variables:
+
+File names typed in the minibuffer can be expanded by environment
+variables. You can set them outside @value{emacsname}, or even with
+Lisp:
+
+@lisp
+(setenv "xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")
+@end lisp
+
+Then you need simply to type @kbd{C-x C-f $xy @key{RET}}, and here you
+are. The disadvantage is, that you cannot edit the file name, because
+environment variables are not expanded during editing in the
+minibuffer.
+
+@item Define own keys:
+
+You can define your own key sequences in @value{emacsname}, which can
+be used instead of @kbd{C-x C-f}:
+
+@lisp
+(global-set-key
+ [(control x) (control y)]
+ (lambda ()
+ (interactive)
+ (find-file
+ (read-file-name
+ "Find Tramp file: "
+ "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))))
+@end lisp
+
+Simply typing @kbd{C-x C-y} would initialize the minibuffer for
+editing with your beloved file name.
+
+See also @uref{http://www.emacswiki.org/cgi-bin/wiki/TrampMode, the
+Emacs Wiki} for a more comprehensive example.
+
+@item Define own abbreviation (1):
+
+It is possible to define an own abbreviation list for expanding file
+names:
+
+@lisp
+(add-to-list
+ 'directory-abbrev-alist
+ '("^/xy" . "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
+@end lisp
+
+This shortens the file openening command to @kbd{C-x C-f /xy
+@key{RET}}. The disadvantage is, again, that you cannot edit the file
+name, because the expansion happens after entering the file name only.
+
+@item Define own abbreviation (2):
+
+The @code{abbrev-mode} gives more flexibility for editing the
+minibuffer:
+
+@lisp
+(define-abbrev-table 'my-tramp-abbrev-table
+ '(("xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")))
+
+(add-hook
+ 'minibuffer-setup-hook
+ '(lambda ()
+ (abbrev-mode 1)
+ (setq local-abbrev-table my-tramp-abbrev-table)))
+
+(defadvice minibuffer-complete
+ (before my-minibuffer-complete activate)
+ (expand-abbrev))
+
+;; If you use partial-completion-mode
+(defadvice PC-do-completion
+ (before my-PC-do-completion activate)
+ (expand-abbrev))
+@end lisp
+
+After entering @kbd{C-x C-f xy @key{TAB}}, the minibuffer is
+expanded, and you can continue editing.
+
+@item Use bookmarks:
+
+Bookmarks can be used to visit Tramp files or directories.
+@ifinfo
+@pxref{Bookmarks, , , @value{emacsdir}}
+@end ifinfo
+
+When you have opened @file{@trampfn{ssh, news, news.my.domain,
+/opt/news/etc/}}, you should save the bookmark via
+@ifset emacs
+@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
+@end ifset
+@ifset xemacs
+@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{set}}.
+@end ifset
+
+Later on, you can always navigate to that bookmark via
+@ifset emacs
+@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
+@end ifset
+@ifset xemacs
+@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{jump}}.
+@end ifset
+
+@item Use recent files:
+
+@ifset emacs
+@file{recentf}
+@end ifset
+@ifset xemacs
+@file{recent-files}
+@end ifset
+remembers visited places.
+@ifinfo
+@ifset emacs
+@pxref{File Conveniences, , , @value{emacsdir}}
+@end ifset
+@ifset xemacs
+@pxref{recent-files, , , edit-utils}
+@end ifset
+@end ifinfo
+
+You could keep remote file names in the recent list without checking
+their readability through a remote access:
+
+@lisp
+@ifset emacs
+(recentf-mode 1)
+@end ifset
+@ifset xemacs
+(recent-files-initialize)
+(add-hook
+ 'find-file-hooks
+ (lambda ()
+ (when (file-remote-p (buffer-file-name))
+ (recent-files-make-permanent)))
+ 'append)
+@end ifset
+@end lisp
+
+The list of files opened recently is reachable via
+@ifset emacs
+@kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
+@end ifset
+@ifset xemacs
+@kbd{@key{menu-bar} @key{Recent Files}}.
+@end ifset
+
+@ifset emacs
+@item Use filecache:
+
+@file{filecache} remembers visited places. Add the directory into
+the cache:
+
+@lisp
+(eval-after-load "filecache"
+ '(file-cache-add-directory
+ "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
+@end lisp
+
+Whenever you want to load a file, you can enter @kbd{C-x C-f
+C-@key{TAB}} in the minibuffer. The completion is done for the given
+directory.
+@end ifset
+
+@ifset emacs
+@item Use bbdb:
+
+@file{bbdb} has a built-in feature for @value{ftppackagename} files,
+which works also for @value{tramp}.
+@ifinfo
+@pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}
+@end ifinfo
+
+You need to load @file{bbdb}:
+
+@lisp
+(require 'bbdb)
+(bbdb-initialize)
+@end lisp
+
+Then you can create a BBDB entry via @kbd{M-x bbdb-create-ftp-site}.
+Because BBDB is not prepared for @value{tramp} syntax, you must
+specify a method together with the user name, when needed. Example:
+
+@example
+@kbd{M-x bbdb-create-ftp-site @key{RET}}
+@b{Ftp Site:} news.my.domain @key{RET}
+@b{Ftp Directory:} /opt/news/etc/ @key{RET}
+@b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
+@b{Company:} @key{RET}
+@b{Additional Comments:} @key{RET}
+@end example
+
+When you have opened your BBDB buffer, you can access such an entry by
+pressing the key @key{F}.
+@end ifset
+
+@end enumerate
+
+I would like to thank all @value{tramp} users, who have contributed to
+the different recipes!
+
+
@item
How can I disable @value{tramp}?
@@ -2180,12 +3100,12 @@ This resets also the @value{ftppackagename} plugins.
@cindex Version Control
Unlike @value{ftppackagename}, @value{tramp} has full shell access to the
-remote machine. This makes it possible to provide version control for
+remote machine. This makes it possible to provide version control for
files accessed under @value{tramp}.
The actual version control binaries must be installed on the remote
machine, accessible in the directories specified in
-@var{tramp-remote-path}.
+@code{tramp-remote-path}.
This transparent integration with the version control systems is one of
the most valuable features provided by @value{tramp}, but it is far from perfect.
@@ -2204,7 +3124,7 @@ Work is ongoing to improve the transparency of the system.
@section Determining if a file is under version control
The VC package uses the existence of on-disk revision control master
-files to determine if a given file is under revision control. These file
+files to determine if a given file is under revision control. These file
tests happen on the remote machine through the standard @value{tramp} mechanisms.
@@ -2212,7 +3132,7 @@ tests happen on the remote machine through the standard @value{tramp} mechanisms
@section Executing the version control commands on the remote machine
There are no hooks provided by VC to allow intercepting of the version
-control command execution. The calls occur through the
+control command execution. The calls occur through the
@code{call-process} mechanism, a function that is somewhat more
efficient than the @code{shell-command} function but that does not
provide hooks for remote execution of commands.
@@ -2239,7 +3159,7 @@ workfile and the version control master.
This requires that a shell command be executed remotely, a process that
is notably heavier-weight than the mtime comparison used for local
-files. Unfortunately, unless a portable solution to the issue is found,
+files. Unfortunately, unless a portable solution to the issue is found,
this will remain the cost of remote version control.
@@ -2247,7 +3167,7 @@ this will remain the cost of remote version control.
@section Bringing the workfile out of the repository
VC will, by default, check for remote files and refuse to act on them
-when checking out files from the repository. To work around this
+when checking out files from the repository. To work around this
problem, the function @code{vc-checkout} knows about @value{tramp} files and
allows version control to occur.
@@ -2266,14 +3186,14 @@ Minor implementation details, &c.
@node Remote File Ownership
@subsection How VC determines who owns a workfile
-@value{emacsname} provides the @code{user-full-name} function to
+@value{emacsname} provides the @code{user-login-name} function to
return the login name of the current user as well as mapping from
-arbitrary user id values back to login names. The VC code uses this
+arbitrary user id values back to login names. The VC code uses this
functionality to map from the uid of the owner of a workfile to the
login name in some circumstances.
This will not, for obvious reasons, work if the remote system has a
-different set of logins. As such, it is necessary to delegate to the
+different set of logins. As such, it is necessary to delegate to the
remote machine the job of determining the login name associated with a
uid.
@@ -2282,7 +3202,7 @@ as @code{NIS}, @code{NIS+} and @code{NetInfo}, there is no simple,
reliable and portable method for performing this mapping.
Thankfully, the only place in the VC code that depends on the mapping of
-a uid to a login name is the @code{vc-file-owner} function. This returns
+a uid to a login name is the @code{vc-file-owner} function. This returns
the login of the owner of the file as a string.
This function has been advised to use the output of @command{ls} on the
@@ -2304,7 +3224,7 @@ executing a process and parsing its output each time the information is
needed.
Unfortunately, life is not quite so easy when remote version control
-comes into the picture. Each remote machine may have a different version
+comes into the picture. Each remote machine may have a different version
of the version control tools and, while this is painful, we need to
ensure that unavailable features are not used remotely.
@@ -2313,9 +3233,9 @@ approach of making the release values of the revision control tools
local to each @value{tramp} buffer, forcing VC to determine these values
again each time a new file is visited.
-This has, quite obviously, some performance implications. Thankfully,
+This has, quite obviously, some performance implications. Thankfully,
most of the common operations performed by VC do not actually require
-that the remote version be known. This makes the problem far less
+that the remote version be known. This makes the problem far less
apparent.
Eventually these values will be captured by @value{tramp} on a system by
@@ -2327,6 +3247,9 @@ system basis and the results cached to improve performance.
@menu
* Localname deconstruction:: Breaking a localname into its components.
+@ifset emacs
+* External packages:: Integration with external Lisp packages.
+@end ifset
@end menu
@@ -2334,11 +3257,11 @@ system basis and the results cached to improve performance.
@section Breaking a localname into its components.
@value{tramp} file names are somewhat different, obviously, to ordinary file
-names. As such, the lisp functions @code{file-name-directory} and
+names. As such, the lisp functions @code{file-name-directory} and
@code{file-name-nondirectory} are overridden within the @value{tramp}
package.
-Their replacements are reasonably simplistic in their approach. They
+Their replacements are reasonably simplistic in their approach. They
dissect the filename, call the original handler on the localname and
then rebuild the @value{tramp} file name with the result.
@@ -2346,6 +3269,103 @@ This allows the platform specific hacks in the original handlers to take
effect while preserving the @value{tramp} file name information.
+@ifset emacs
+@node External packages
+@section Integration with external Lisp packages.
+
+While reading filenames in the minibuffer, @value{tramp} must decide
+whether it completes possible incomplete filenames, or not. Imagine
+there is the following situation: You have typed @kbd{C-x C-f
+@value{prefix}ssh@value{postfixhop} @key{TAB}}. @value{tramp} cannot
+know, whether @option{ssh} is a method or a host name. It checks
+therefore the last input character you have typed. If this is
+@key{TAB}, @key{SPACE} or @kbd{?}, @value{tramp} assumes that you are
+still in filename completion, and it does not connect to the possible
+remote host @option{ssh}.
+
+@vindex tramp-completion-mode
+External packages, which use other characters for completing filenames
+in the minibuffer, must signal this to @value{tramp}. For this case,
+the variable @code{tramp-completion-mode} can be bound temporarily to
+a non-nil value.
+
+@lisp
+(let ((tramp-completion-mode t))
+ ...)
+@end lisp
+@end ifset
+
+
+@node Traces and Profiles
+@chapter How to Customize Traces
+
+All @value{tramp} messages are raised with a verbosity level. The
+verbosity level can be any number between 0 and 10. Only messages with
+a verbosity level less than or equal to @code{tramp-verbose} are
+displayed.
+
+The verbosity levels are
+
+ @w{ 0} silent (no @value{tramp} messages at all)
+@*@indent @w{ 1} errors
+@*@indent @w{ 2} warnings
+@*@indent @w{ 3} connection to remote hosts (default verbosity)
+@*@indent @w{ 4} activities
+@*@indent @w{ 5} internal
+@*@indent @w{ 6} sent and received strings
+@*@indent @w{ 7} file caching
+@*@indent @w{ 8} connection properties
+@*@indent @w{10} traces (huge)
+
+When @code{tramp-verbose} is greater than or equal to 4, the messages
+are also written into a @value{tramp} debug buffer. This debug buffer
+is useful for analysing problems; sending a @value{tramp} bug report
+should be done with @code{tramp-verbose} set to a verbosity level of at
+least 6 (@pxref{Bug Reports}).
+
+The debug buffer is in
+@ifinfo
+@ref{Outline Mode, , , @value{emacsdir}}.
+@end ifinfo
+@ifnotinfo
+Outline Mode.
+@end ifnotinfo
+That means, you can change the level of messages to be viewed. If you
+want, for example, see only messages up to verbosity level 5, you must
+enter @kbd{C-u 6 C-c C-q}.
+@ifinfo
+Other keys for navigating are described in
+@ref{Outline Visibility, , , @value{emacsdir}}.
+@end ifinfo
+
+@value{tramp} errors are handled internally in order to raise the
+verbosity level 1 messages. When you want to get a Lisp backtrace in
+case of an error, you need to set both
+
+@lisp
+(setq debug-on-error t
+ debug-on-signal t)
+@end lisp
+
+Sometimes, it might be even necessary to step through @value{tramp}
+function call traces. Such traces are enabled by the following code:
+
+@lisp
+(require 'tramp)
+(require 'trace)
+(dolist (elt (all-completions "tramp-" obarray 'functionp))
+ (trace-function-background (intern elt)))
+(untrace-function 'tramp-read-passwd)
+(untrace-function 'tramp-gw-basic-authentication)
+@end lisp
+
+The function call traces are inserted in the buffer
+@file{*trace-output*}. @code{tramp-read-passwd} and
+@code{tramp-gw-basic-authentication} shall be disabled when the
+function call traces are added to @value{tramp}, because both
+functions return password strings, which should not be distributed.
+
+
@node Issues
@chapter Debatable Issues and What Was Decided
@@ -2368,14 +3388,6 @@ printed and deleted.
But I have decided that this is too fragile to reliably work, so on some
systems you'll have to do without the uuencode methods.
-@item @value{tramp} does not work on XEmacs 20.
-
-This is because it requires the macro @code{with-timeout} which does not
-appear to exist in XEmacs 20. I'm somewhat reluctant to add an
-emulation macro to @value{tramp}, but if somebody who uses XEmacs 20 steps
-forward and wishes to implement and test it, please contact me or the
-mailing list.
-
@item The @value{tramp} filename syntax differs between GNU Emacs and XEmacs.
The GNU Emacs maintainers wish to use a unified filename syntax for
@@ -2402,10 +3414,10 @@ The autoload of the @value{emacsname} @value{tramp} package must be
disabled. This can be achieved by setting file permissions @code{000}
to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}.
-In case of unified filenames, all @value{emacsname} download sites
-are added to @code{tramp-default-method-alist} with default method
-@option{ftp} @xref{Default Method}. These settings shouldn't be touched
-for proper working of the @value{emacsname} package system.
+In case of unified filenames, all @value{emacsname} download sites are
+added to @code{tramp-default-method-alist} with default method
+@option{ftp} @xref{Default Method}. These settings shouldn't be
+touched for proper working of the @value{emacsname} package system.
The syntax for unified filenames is described in the @value{tramp} manual
for @value{emacsothername}.
@@ -2416,10 +3428,18 @@ for @value{emacsothername}.
@appendix GNU Free Documentation License
@include doclicense.texi
+@node Function Index
+@unnumbered Function Index
+@printindex fn
+
+@node Variable Index
+@unnumbered Variable Index
+@printindex vr
+
@node Concept Index
-@comment node-name, next, previous, up
@unnumbered Concept Index
@printindex cp
+
@contents
@c End of tramp.texi - the TRAMP User Manual
@bye
@@ -2430,7 +3450,6 @@ for @value{emacsothername}.
@c shells.
@c * Explain how tramp.el works in principle: open a shell on a remote
@c host and then send commands to it.
-@c * Mention that bookmarks are a cool feature to go along with Tramp.
@c * Make terminology "inline" vs "out-of-band" consistent.
@c It seems that "external" is also used instead of "out-of-band".
diff --git a/man/trampver.texi b/doc/misc/trampver.texi
index 6c770dc8ad1..44babab9f5e 100644
--- a/man/trampver.texi
+++ b/doc/misc/trampver.texi
@@ -1,27 +1,26 @@
@c -*-texinfo-*-
@c texi/trampver.texi. Generated from trampver.texi.in by configure.
-@c This is part of the Emacs manual.
-@c Copyright (C) 2003, 2004, 2005, 2006, 2007
-@c Free Software Foundation, Inc.
-@c See file emacs.texi for copying conditions.
-
@c In the Tramp CVS, the version number is auto-frobbed from
@c configure.ac, so you should edit that file and run
@c "autoconf && ./configure" to change the version number.
-@set trampver 2.0.56
+@set trampver 2.1.12-pre
@c Other flags from configuration
-@set prefix /usr/local
+@set instprefix /usr/local
@set lispdir /usr/local/share/emacs/site-lisp
@set infodir /usr/local/share/info
@c Formatting of the tramp program name consistent.
@set tramp @sc{tramp}
+@c Whether or not describe gateway methods.
+@ifclear noemacsgw
+@set emacsgw
+@end ifclear
+
@c Some flags which make the text independent on the (X)Emacs flavor.
@c "emacs" resp "xemacs" are set in the Makefile. Default is "emacs".
-
@ifclear emacs
@ifclear xemacs
@set emacs
@@ -34,10 +33,9 @@
@set emacsdir emacs
@set ftppackagename Ange-FTP
@set prefix /
-@set prefixsinglehop
+@set prefixhop
@set postfix :
-@set postfixsinglehop :
-@set postfixmultihop :
+@set postfixhop :
@set emacsothername XEmacs
@set emacsotherdir xemacs
@set emacsotherfilename tramp-xemacs.html
@@ -50,10 +48,9 @@
@set emacsdir xemacs
@set ftppackagename EFS
@set prefix /[
-@set prefixsinglehop [
+@set prefixhop [
@set postfix ]
-@set postfixsinglehop /
-@set postfixmultihop :
+@set postfixhop /
@set emacsothername GNU Emacs
@set emacsotherdir emacs
@set emacsotherfilename tramp-emacs.html
diff --git a/man/url.texi b/doc/misc/url.texi
index 0fc6b08acdc..2948793eed8 100644
--- a/man/url.texi
+++ b/doc/misc/url.texi
@@ -1,5 +1,5 @@
\input texinfo
-@setfilename ../info/url
+@setfilename ../../info/url
@settitle URL Programmer's Manual
@iftex
diff --git a/man/vip.texi b/doc/misc/vip.texi
index a3f4a447f82..4b27df5b045 100644
--- a/man/vip.texi
+++ b/doc/misc/vip.texi
@@ -1,6 +1,6 @@
\input texinfo
-@setfilename ../info/vip
+@setfilename ../../info/vip
@settitle VIP
@copying
diff --git a/man/viper.texi b/doc/misc/viper.texi
index 55c97f18c9c..c86b2383168 100644
--- a/man/viper.texi
+++ b/doc/misc/viper.texi
@@ -4,7 +4,7 @@
@comment Using viper.info instead of viper in setfilename breaks DOS.
@comment @setfilename viper
@comment @setfilename viper.info
-@setfilename ../info/viper
+@setfilename ../../info/viper
@copying
Copyright @copyright{} 1995, 1996, 1997, 2001, 2002, 2003, 2004,
@@ -1745,7 +1745,8 @@ Setting this variable too high may slow down your typing. Setting it too
low may make it hard to type macros quickly enough.
@item viper-translate-all-ESC-keysequences @code{t} on tty, @code{nil} on windowing display
Normally, Viper lets Emacs translate only those ESC key sequences that are
-defined in the low-level key-translation-map or function-key-map, such as those
+defined in the low-level @code{input-decode-map}, @code{key-translation-map}
+or @code{function-key-map}, such as those
emitted by the arrow and function keys. Other sequences, e.g., @kbd{\\e/}, are
treated as @kbd{ESC} command followed by a @kbd{/}. This is good for people
who type fast and tend to hit other characters right after they hit
@@ -2009,12 +2010,12 @@ not emit the right signals for Emacs to understand. To let Emacs know about
those keys, you will have to find out which key sequences they emit
by typing @kbd{C-q} and then the key (you should switch to Emacs state
first). Then you can bind those sequences to their preferred forms using
-@code{function-key-map} as follows:
+@code{input-decode-map} as follows:
@lisp
(cond ((string= (getenv "TERM") "xterm")
-(define-key function-key-map "\e[192z" [f11]) ; L1
-(define-key function-key-map "\e[195z" [f14]) ; L4, Undo
+(define-key input-decode-map "\e[192z" [f11]) ; L1
+(define-key input-decode-map "\e[195z" [f14]) ; L4, Undo
@end lisp
The above illustrates how to do this for Xterm. On VT100, you would have to
@@ -2206,6 +2207,7 @@ So much about Viper-specific bindings.
Manual}, and the Emacs quick reference card for the general info on key
bindings in Emacs.
+@vindex @code{input-decode-map}
@vindex @code{function-key-map}
@vindex @code{viper-vi-global-user-map}
@vindex @code{viper-insert-global-user-map}
diff --git a/man/widget.texi b/doc/misc/widget.texi
index 47d86f43349..49b2976472e 100644
--- a/man/widget.texi
+++ b/doc/misc/widget.texi
@@ -1,7 +1,7 @@
\input texinfo.tex
@c %**start of header
-@setfilename ../info/widget
+@setfilename ../../info/widget
@settitle The Emacs Widget Library
@syncodeindex fn cp
@syncodeindex vr cp
diff --git a/man/woman.texi b/doc/misc/woman.texi
index 868bb510f50..3f0f0d43827 100644
--- a/man/woman.texi
+++ b/doc/misc/woman.texi
@@ -1,6 +1,6 @@
\input texinfo @c -*-texinfo-*-
@c %**start of header
-@setfilename ../info/woman
+@setfilename ../../info/woman
@settitle WoMan: Browse Unix Manual Pages ``W.O. (without) Man''
@c Manual last updated:
@set UPDATED Time-stamp: <2006-03-25 14:59:03 karl>
diff --git a/etc/.gitignore b/etc/.gitignore
index 15e45da4361..b2971cfd83f 100644
--- a/etc/.gitignore
+++ b/etc/.gitignore
@@ -4,3 +4,4 @@ icons
*.log
*.dvi
DOC DOC-*
+*.pyc \ No newline at end of file
diff --git a/AUTHORS b/etc/AUTHORS
index b88c0b69bda..152fde029a4 100644
--- a/AUTHORS
+++ b/etc/AUTHORS
@@ -1225,7 +1225,7 @@ John Wiegley: wrote align.el cal-bahai.el em-alias.el em-banner.el
em-term.el em-unix.el em-xtra.el erc-identd.el esh-arg.el esh-cmd.el
esh-ext.el esh-io.el esh-maint.el esh-mode.el esh-module.el esh-opt.el
esh-proc.el esh-test.el esh-util.el esh-var.el eshell.el eudcb-mab.el
- isearchb.el pcmpl-cvs.el pcomplete.el timeclock.el
+ isearchb.el pcmpl-cvs.el pcomplete.el remember.el timeclock.el
and changed erc-chess.el erc.el iswitchb.el Makefile.in allout.el
cal-menu.el calendar.el compile.el desktop.el diary-lib.el erc-bbdb.el
erc-button.el erc-complete.el erc-fill.el erc-ibuffer.el erc-list.el
@@ -2295,8 +2295,8 @@ and changed ffap.el ispell.el rmailsum.el simple.el testcover.el
Ryszard Kubiak: changed ogonek.el
-Sacha Chua: wrote erc-pcomplete.el
-and changed erc.el erc-button.el
+Sacha Chua: wrote erc-pcomplete.el remember-diary.el
+and changed erc.el erc-button.el remember.el
Saito Takuya: changed compile.el mule.el
diff --git a/CONTRIBUTE b/etc/CONTRIBUTE
index 8d48ea8f985..8daf73ffa1a 100644
--- a/CONTRIBUTE
+++ b/etc/CONTRIBUTE
@@ -57,7 +57,7 @@ Contact us at emacs-devel@gnu.org to obtain the relevant forms.
The latest version of Emacs can be downloaded using CVS or Arch from
the Savannah web site. It is important to write your patch based on
this version; if you start from an older version, your patch may be
-outdated when you write it, and maintainers will have hard time
+outdated when you write it, and maintainers will have a hard time
applying it.
After you have downloaded the CVS source, you should read the file
@@ -82,8 +82,7 @@ All subsequent discussion should also be sent to the mailing list.
For bug fixes, a description of the bug and how your patch fixes this
bug.
-For new features, a description of the feature and your
-implementation.
+For new features, a description of the feature and your implementation.
** ChangeLog
@@ -183,25 +182,6 @@ of the Emacs Lisp Reference Manual may also help.
The file etc/DEBUG describes how to debug Emacs bugs.
-
-* How to Maintain Copyright Years for GNU Emacs
-
-See admin/notes/copyright.
-
-** Our lawyer says it is ok if we add, to each file that has been in Emacs
-since Emacs 21 came out in 2001, all the subsequent years. We don't
-need to check whether *that file* was changed in those years.
-It's sufficient that *Emacs* was changed in those years (and it was!).
-
-** For those files that have been added since then, we should add
-the year it was added to Emacs, and all subsequent years.
-
-** For the refcards under etc/, it's ok to simply use the latest year
-(typically in a `\def\year{YEAR}' expression) for the rendered copyright
-notice, while maintaining the full list of years in the copyright notice
-in the comments.
-
-
This file is part of GNU Emacs.
diff --git a/etc/ChangeLog b/etc/ChangeLog
index c783ac3426b..0f3b9484b2e 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,25 +1,174 @@
+2007-11-12 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * compilation.txt: Add new entries: compilation-perl--Pod::Checker,
+ compilation-perl--Test, compilation-perl--Test::Harness and
+ compilation-weblint.
+
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * MACHINES: Remove Sun windows info.
+
+2007-10-30 Michael Olson <mwolson@gnu.org>
+
+ * NEWS: Add entry for Remember Mode.
+
+2007-10-29 Glenn Morris <rgm@gnu.org>
+
+ * refcards/gnus-refcard.tex: Restore Feb 2007 copyright
+ clarifications lost in update to Gnus trunk.
+
+2007-10-29 Michael Olson <mwolson@gnu.org>
+
+ * ERC-NEWS: Update for recent change.
+
+2007-10-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * .cvsignore: Add *.pyc.
+
+2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses-example.ses: Get rid of silly life-universe-everything local
+ variable. `symbolic-formulas' is now `ses--symbolic-formulas'.
+
2007-10-24 Juanma Barranquero <lekktu@gmail.com>
* NEWS: Mention desktop locking.
+2007-10-10 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * NEWS: Explain the VC fileset changes a bit better.
+
2007-09-28 Glenn Morris <rgm@gnu.org>
* PROBLEMS: Mention Tex superscript font issue.
-2007-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-25 Johannes Weiner <hannes@saeurebad.de>
+
+ * NEWS: Fix typo.
- * emacs.py (complete.class_members): Make sure we return the _emacs_out
- message even in the face of exceptions.
+2007-09-24 Glenn Morris <rgm@gnu.org>
-2007-09-05 Jason Rumney <jasonr@gnu.org>
+ * CONTRIBUTE: Remove information on maintaining copyright years;
+ it does not belong here and is in admin/notes anyway.
+
+2007-09-24 Adam Hupp <adam@hupp.org>
+
+ * emacs.py: Split for python 2 and python 3 compatibility.
+ * emacs2.py: New file, split off from emacs.py.
+ * emacs3.py: New file, python 3 version of emacs2.py.
+
+2007-09-21 Glenn Morris <rgm@gnu.org>
+
+ * emacstool.1: Remove file.
+ * emacs.bash: Adapt for removal of emacstool.
+ * emacs.csh: Remove emacstool-related code.
+
+2007-09-16 Glenn Morris <rgm@gnu.org>
+
+ * gfdl.1: Remove unused file.
+
+2007-09-12 Glenn Morris <rgm@gnu.org>
+
+ * Makefile (SOURCES, unlock, relock): Delete.
+
+2007-09-10 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * NEWS: Document the interactive specification for C functions.
+ Say that `set-file-modes' is now interactive.
+
+2007-09-10 Michael Olson <mwolson@gnu.org>
- * NEWS: Mention focus-follows-mouse change.
+ * ERC-NEWS: Improve description of erc-tls and erc-ssl change.
+
+2007-09-09 Juri Linkov <juri@jurta.org>
+
+ * AUTHORS, CONTRIBUTE: New files, moved here from the root dir.
+
+2007-09-08 Michael Olson <mwolson@gnu.org>
+
+ * ERC-NEWS: Update for changes to the development version of ERC 5.3.
+
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * ctags.1, emacs.1, emacsclient.1, etags.1: Move from etc/ to
+ doc/man/.
+
+ * refcards/README: Also mention gnus-logo.pdf license.
+
+2007-08-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * NEWS.22 (Note): Lower-case for orgtbl-mode.
+
+2007-08-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * NEWS: Say that Gtk+ build uses stock icons.
+
+2007-08-28 Werner LEMBERG <wl@gnu.org>
+
+ * refcards/de-refcard.tex, refcards/de-refcard.pdf: Use `C-M-%'
+ instead of `M-x query-replace-regexp'.
2007-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* PROBLEMS (Mac OS X): Add alternative workaround for QuickTime
updater breakage.
+2007-08-26 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * NEWS: Say that PDF files are now the default for refcards.
+
+ * fr-drdref.tex, fr-drdref.pdf: Move these to...
+ * fr-dired-ref.tex, fr-dired-ref.pdf: ... those names.
+
+ * refcards/pdflayout.sty: New. Handle PDF layouts through
+ \pdfpagewidth and \pdfpageheight.
+
+ * calccard.pdf, cs-dired-ref.pdf, cs-refcard.pdf, de-refcard.pdf:
+ * dired-ref.pdf, fr-drdref.pdf, fr-refcard.pdf, gnus-booklet.pdf:
+ * gnus-logo.pdf, gnus-refcard.pdf, orgcard.pdf, pl-refcard.pdf:
+ * pt-br-refcard.pdf, refcard.pdf, ru-refcard.pdf, sk-dired-ref.pdf:
+ * sk-refcard.pdf: Add PDF versions of the refcards.
+
+ * calccard.ps, cs-dired-ref.ps, cs-refcard.ps, de-refcard.ps:
+ * dired-ref.ps, fr-drdref.ps, fr-refcard.ps, gnus-booklet.ps:
+ * gnus-logo.ps, gnus-refcard.ps, orgcard.ps, pl-refcard.ps:
+ * pt-br-refcard.ps, refcard.ps, ru-refcard.ps, sk-dired-ref.ps:
+ * sk-refcard.ps: Remove the PS versions of the refcards.
+
+ * calccard.tex, fr-survival.tex, orgcard.tex, pl-refcard.tex:
+ * pt-br-refcard.tex, refcard.tex, survival.tex, vipcard.tex:
+ * viperCard.tex: Specify PDF layout, use a PDF `compile-command' local
+ variable.
+
+ * cs-dired-ref.tex, cs-refcard.tex, cs-survival.tex, dired-ref.tex:
+ * fr-drdref.tex, sk-dired-ref.tex, sk-refcard.tex, sk-survival.tex:
+ Specify PDF layout.
+
+ * fr-refcard.tex: Update copyright notice. Update the examples. Fix a
+ typo. Remove the `letterpaper' counter, specify PDF layout, use a PDF
+ `compile-command' local variable.
+
+ * de-refcard.tex: Remove the `letterpaper' counter, specify PDF layout,
+ use a PDF `compile-command' local variable.
+
+ * ru-refcard.tex: Use a PDF `compile-command' local variable.
+
+ * Makefile: Add rules for creating the refcards in PDF, make them the
+ default. Change `fr-drdref' to `fr-dired-ref'.
+
+2007-08-23 Glenn Morris <rgm@gnu.org>
+
+ * Makefile (mostlyclean, clean, distclean, maintainer-clean):
+ Delete these targets since nothing uses them.
+ (SOURCES): Update.
+ Move comments to e/README. Remove license from now-trivial file.
+
+ * e/README: New file, with most information formerly in Makefile.
+
+2007-09-05 Jason Rumney <jasonr@gnu.org>
+
+ * NEWS.22: Mention focus-follows-mouse change.
+
2007-08-22 Karl Berry <karl@gnu.org>
* refcard.tex: Updates for printing.
@@ -28,6 +177,32 @@
(Simple Customization): Don't use goto-line, since now it's bound.
Also, use now-preferred (kbd ...) syntax.
+2007-08-22 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: `shell' prompts for the default directory if called with a
+ prefix and `default-directory' is a remote file name.
+
+2007-08-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * orgcard.tex: Version number upgrade.
+
+2007-08-22 Glenn Morris <rgm@gnu.org>
+
+ * tree-widget: Move this directory into images/ subdirectory.
+
+ * refcards/: New directory. Move refcards here.
+ * Makefile: Move refcard rules from here...
+ * refcards/Makefile: ...to here.
+ * README: Move information about tex files from here...
+ * refcards/README: ...to here.
+
+ * tutorials/: New directory. Move TUTORIAL* here.
+
+ * gnus.pbm, letter.pbm, letter.xpm:
+ * splash.pbm, splash.xpm, splash8.xpm: Move from etc/ to etc/images/.
+ * README: Move license information for the above files from here...
+ * images/README: ...to here.
+
2007-08-14 Glenn Morris <rgm@gnu.org>
* NEWS: Mention `bad-packages-alist'.
@@ -37,28 +212,76 @@
* TODO: `iff' item is dealt with.
* GNUS-NEWS, NEWS, NEWS.1-17, NEWS.19, NEWS.21: Replace `iff'.
+2007-08-01 Glenn Morris <rgm@gnu.org>
+
+ * NEWS: Add fortran-line-length, plus some more sections.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
* COPYING: Switch to GPLv3.
-2007-07-15 Werner Lemberg <wl@gnu.org>
+2007-07-24 Michael Albinus <michael.albinus@gmx.de>
- * emacs.1: Completely revised.
- Fix many typographical glitches.
- Updated to handle current state of options and resources.
+ * NEWS: New functions `start-file-process-shell-command' and
+ `process-file-shell-command'.
+
+2007-07-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: `file-remote-p' has a new optional parameter IDENTIFICATION.
+
+2007-07-15 Karl Fogel <kfogel@red-bean.com>
+
+ * NEWS: Revert 2007-07-13T23:20:21Z!kfogel@red-bean.com, which
+ documented bookmark keybinding changes that were later reverted.
2007-07-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* PROBLEMS: Mention gtk-engines-qt problem.
-2007-06-07 Glenn Morris <rgm@gnu.org>
+2007-07-13 Karl Fogel <kfogel@red-bean.com>
- * images/cancel.pbm: Convert from PGM to PBM.
+ * NEWS: Update for recent bookmark keybinding changes.
- * images/copy.pbm, images/next-node.pbm, images/prev-node.pbm:
- * images/save.pbm, images/up-node.pbm: Convert from PPM to PBM.
+2007-07-10 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: Add Tramp and comint-mode changes.
+
+2007-07-08 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: `file-remote-p' has a new optional parameter CONNECTED.
+
+2007-07-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: New function `start-file-process'.
+
+2007-07-02 Carsten Dominik <dominik@science.uva.nl>
+
+ * orgcard.tex: Version 5.01
+
+2007-06-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: `dired-call-process' has been removed.
+
+2007-06-20 Glenn Morris <rgm@gnu.org>
+
+ * NEWS: configure prefers libgif over libungif.
+
+2007-06-14 Nick Roberts <nickrob@snap.net.nz>
+
+ * NEWS: Mention mouse highlighting in a GNU/Linux console.
+
+2007-06-14 Werner Lemberg <wl@gnu.org>
+
+ * emacs.1: Completely revised.
+ Fix many typographical glitches.
+ Updated to handle current state of options and resources.
+
+2007-06-12 Glenn Morris <rgm@gnu.org>
+
+ * NEWS: Change bug address. Add back +++/--- note.
+ Use present tense for X-toolkit entry. Mention libgif.
2007-06-07 Mark H. Weaver <mhw@netris.org> (tiny change)
@@ -68,6 +291,20 @@
* MORE.STUFF: Update eshell URL.
+2007-06-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * orgcard.tex: Version 4.77.
+
+2007-06-05 Michael Albinus <michael.albinus@gmx.de>
+
+ * NEWS: Add socks.el as new package.
+
+2007-06-02 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ * MORE.STUFF (Hideshow): Delete.
+ (EDB, Go in a buffer): Update urls.
+ Suggested by CHENG Gao <chenggao@gmail.com>.
+
2007-06-02 Chong Yidong <cyd@stupidchicken.com>
* Version 22.1 released.
@@ -81,6 +318,19 @@
* NEWS: Fix instances of `allow' without object.
+2007-05-22 Glenn Morris <rgm@gnu.org>
+
+ * NEWS.22: New file with entries for Emacs 22.
+ * NEWS: Move Emacs 22 entries to new file NEWS.22, leave empty
+ template for next Emacs version.
+
+2007-05-19 Glenn Morris <rgm@gnu.org>
+
+ * images/cancel.pbm: Convert from PGM to PBM.
+
+ * images/copy.pbm, images/next-node.pbm, images/prev-node.pbm:
+ * images/save.pbm, images/up-node.pbm: Convert from PPM to PBM.
+
2007-05-17 Glenn Morris <rgm@gnu.org>
* PROBLEMS (Dumping): Mention OpenBSD macppc problem.
@@ -320,7 +570,7 @@
2007-02-19 Kenichi Handa <handa@m17n.org>
- * NEWS (New language environmets): Add "Esperanto".
+ * NEWS (New language environments): Add "Esperanto".
2007-02-16 Dale Gulledge <dsplat@rochester.rr.com>
diff --git a/etc/DEBUG b/etc/DEBUG
index ca9b08874c0..0186e2bc024 100644
--- a/etc/DEBUG
+++ b/etc/DEBUG
@@ -64,10 +64,10 @@ use the set command until the inferior process has been started.
Put a breakpoint early in `main', or suspend the Emacs,
to get an opportunity to do the set command.
-When Emacs is running in a terminal, it is useful to use a separate terminal
-for the debug session. This can be done by starting Emacs as usual, then
-attaching to it from gdb with the `attach' command which is explained in the
-node "Attach" of the GDB manual.
+When Emacs is running in a terminal, it is sometimes useful to use a separate
+terminal for the debug session. This can be done by starting Emacs as usual,
+then attaching to it from gdb with the `attach' command which is explained in
+the node "Attach" of the GDB manual.
** Examining Lisp object values.
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index f5bf1e89dde..2d2e0d8164c 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -3,6 +3,27 @@ ERC NEWS -*- outline -*-
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
See the end of the file for license conditions.
+* Changes in ERC 5.3
+
+** New function `erc-tls' is to be used for connecting to a server via TLS.
+It requires the tls.el library.
+
+** The function `erc-ssl' will now always use ssl.el, even in the version
+of ERC that comes with Emacs.
+
+** Type `C-u' before `C-c C-j' to prompt for a channel key
+`erc-join-channel' now accepts a prefix-argument to prompt for the key
+when channels are protected by keywords.
+
+** Changes and additions to modules
+
+*** Channel tracking (erc-track.el)
+
+If erc-track-position-in-mode-line is set to nil, the tracking
+information won't be shown in the mode line, which is a change
+from the previous behavior of showing it "After all other
+information".
+
* Changes in ERC 5.2
** M-x erc RET now starts ERC.
diff --git a/etc/GNUS-NEWS b/etc/GNUS-NEWS
index f09451af805..f7817bafb6a 100644
--- a/etc/GNUS-NEWS
+++ b/etc/GNUS-NEWS
@@ -10,15 +10,16 @@ For older news, see Gnus info node "New Features".
* Installation changes
-** Upgrading from previous (stable) version if you have used Oort.
+** Upgrading from previous (stable) version if you have used No Gnus.
-If you have tried Oort (the unstable Gnus branch leading to this
+If you have tried No Gnus (the unstable Gnus branch leading to this
release) but went back to a stable version, be careful when upgrading to
-this version. In particular, you will probably want to remove all
-`.marks' (nnml) and `.mrk' (nnfolder) files, so that flags are read from
-your `.newsrc.eld' instead of from the `.marks'/`.mrk' file where this
-release store flags. See a later entry for more information about
-marks. Note that downgrading isn't save in general.
+this version. In particular, you will probably want to remove the
+`~/News/marks' directory (perhaps selectively), so that flags are read
+from your `~/.newsrc.eld' instead of from the stale marks file, where
+this release will store flags for nntp. See a later entry for more
+information about nntp marks. Note that downgrading isn't safe in
+general.
** Lisp files are now installed in `.../site-lisp/gnus/' by default. It
defaulted to `.../site-lisp/' formerly. In addition to this, the new
@@ -26,493 +27,191 @@ installer issues a warning if other Gnus installations which will shadow
the latest one are detected. You can then remove those shadows manually
or remove them using `make remove-installed-shadows'.
-** New `make.bat' for compiling and installing Gnus under MS Windows
-
-Use `make.bat' if you want to install Gnus under MS Windows, the first
-argument to the batch-program should be the directory where `xemacs.exe'
-respectively `emacs.exe' is located, if you want to install Gnus after
-compiling it, give `make.bat' `/copy' as the second parameter.
-
-`make.bat' has been rewritten from scratch, it now features automatic
-recognition of XEmacs and GNU Emacs, generates `gnus-load.el', checks if
-errors occur while compilation and generation of info files and reports
-them at the end of the build process. It now uses `makeinfo' if it is
-available and falls back to `infohack.el' otherwise. `make.bat' should
-now install all files which are necessary to run Gnus and be generally a
-complete replacement for the `configure; make; make install' cycle used
-under Unix systems.
-
-The new `make.bat' makes `make-x.bat' and `xemacs.mak' superfluous, so
-they have been removed.
-
-** `~/News/overview/' not used.
-
-As a result of the following change, the `~/News/overview/' directory is
-not used any more. You can safely delete the entire hierarchy.
-
-** `(require 'gnus-load)'
-
-If you use a stand-alone Gnus distribution, you'd better add `(require
-'gnus-load)' into your `~/.emacs' after adding the Gnus lisp directory
-into load-path.
-
-File `gnus-load.el' contains autoload commands, functions and variables,
-some of which may not be included in distributions of Emacsen.
-
-
* New packages and libraries within Gnus
-** The revised Gnus FAQ is included in the manual, *Note Frequently Asked
-Questions::.
-
-** TLS wrapper shipped with Gnus
+** Gnus includes the Emacs Lisp SASL library.
-TLS/SSL is now supported in IMAP and NNTP via `tls.el' and GNUTLS. The
-old TLS/SSL support via (external third party) `ssl.el' and OpenSSL
-still works.
+This provides a clean API to SASL mechanisms from within Emacs. The
+user visible aspects of this, compared to the earlier situation, include
+support for DIGEST-MD5 and NTLM. *Note Emacs SASL: (sasl)Top.
-** Improved anti-spam features.
+** ManageSieve connections uses the SASL library by default.
-Gnus is now able to take out spam from your mail and news streams using
-a wide variety of programs and filter rules. Among the supported
-methods are RBL blocklists, bogofilter and white/blacklists. Hooks for
-easy use of external packages such as SpamAssassin and Hashcash are also
-new. *Note Thwarting Email Spam::.
+The primary change this brings is support for DIGEST-MD5 and NTLM, when
+the server supports it.
-** Gnus supports server-side mail filtering using Sieve.
-
-Sieve rules can be added as Group Parameters for groups, and the
-complete Sieve script is generated using `D g' from the Group buffer,
-and then uploaded to the server using `C-c C-l' in the generated Sieve
-buffer. *Note Sieve Commands::, and the new Sieve manual *Note Top:
-(sieve)Top.
-
-
-
-* Changes in group mode
-
-** `gnus-group-read-ephemeral-group' can be called interactively, using `G
-M'.
-
-** Retrieval of charters and control messages
-
-There are new commands for fetching newsgroup charters (`H c') and
-control messages (`H C').
-
-** The new variable `gnus-parameters' can be used to set group parameters.
-
-Earlier this was done only via `G p' (or `G c'), which stored the
-parameters in `~/.newsrc.eld', but via this variable you can enjoy the
-powers of customize, and simplified backups since you set the variable
-in `~/.gnus.el' instead of `~/.newsrc.eld'. The variable maps regular
-expressions matching group names to group parameters, a'la:
-(setq gnus-parameters
- '(("mail\\..*"
- (gnus-show-threads nil)
- (gnus-use-scoring nil))
- ("^nnimap:\\(foo.bar\\)$"
- (to-group . "\\1"))))
-
-** Unread count correct in nnimap groups.
-
-The estimated number of unread articles in the group buffer should now
-be correct for nnimap groups. This is achieved by calling
-`nnimap-fixup-unread-after-getting-new-news' from the
-`gnus-setup-news-hook' (called on startup) and
-`gnus-after-getting-new-news-hook'. (called after getting new mail). If
-you have modified those variables from the default, you may want to add
-`nnimap-fixup-unread-after-getting-new-news' again. If you were happy
-with the estimate and want to save some (minimal) time when getting new
-mail, remove the function.
-
-** Group names are treated as UTF-8 by default.
-
-This is supposedly what USEFOR wanted to migrate to. See
-`gnus-group-name-charset-group-alist' and
-`gnus-group-name-charset-method-alist' for customization.
-
-** `gnus-group-charset-alist' and `gnus-group-ignored-charsets-alist'.
-
-The regexps in these variables are compared with full group names
-instead of real group names in 5.8. Users who customize these variables
-should change those regexps accordingly. For example:
-("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
+** Gnus includes a password cache mechanism in password.el.
+It is enabled by default (see `password-cache'), with a short timeout of
+16 seconds (see `password-cache-expiry'). If PGG is used as the PGP
+back end, the PGP passphrase is managed by this mechanism. Passwords
+for ManageSieve connections are managed by this mechanism, after
+querying the user about whether to do so.
* Changes in summary and article mode
-** `F' (`gnus-article-followup-with-original') and `R'
-(`gnus-article-reply-with-original') only yank the text in the region if
-the region is active.
-
-** In draft groups, `e' is now bound to `gnus-draft-edit-message'. Use `B
-w' for `gnus-summary-edit-article' instead.
-
-** Article Buttons
-
-More buttons for URLs, mail addresses, Message-IDs, Info links, man
-pages and Emacs or Gnus related references. *Note Article Buttons::.
-The variables `gnus-button-*-level' can be used to control the
-appearance of all article buttons. *Note Article Button Levels::.
-
-** Single-part yenc encoded attachments can be decoded.
-
-** Picons
-
-The picons code has been reimplemented to work in GNU Emacs--some of the
-previous options have been removed or renamed.
-
-Picons are small "personal icons" representing users, domain and
-newsgroups, which can be displayed in the Article buffer. *Note
-Picons::.
-
-** If the new option `gnus-treat-body-boundary' is non-`nil', a boundary
-line is drawn at the end of the headers.
-
-** Signed article headers (X-PGP-Sig) can be verified with `W p'.
-
-** The Summary Buffer uses an arrow in the fringe to indicate the current
-article. Use `(setq gnus-summary-display-arrow nil)' to disable it.
-
-** Warn about email replies to news
-
-Do you often find yourself replying to news by email by mistake? Then
-the new option `gnus-confirm-mail-reply-to-news' is just the thing for
-you.
-
-** If the new option `gnus-summary-display-while-building' is non-`nil',
-the summary buffer is shown and updated as it's being built.
-
-** The new `recent' mark `.' indicates newly arrived messages (as opposed
-to old but unread messages).
-
-** Gnus supports RFC 2369 mailing list headers, and adds a number of
-related commands in mailing list groups. *Note Mailing List::.
-
-** The Date header can be displayed in a format that can be read aloud in
-English. *Note Article Date::.
-
-** diffs are automatically highlighted in groups matching
-`mm-uu-diff-groups-regexp'
-
-** Better handling of Microsoft citation styles
-
-Gnus now tries to recognize the mangled header block that some Microsoft
-mailers use to indicate that the rest of the message is a citation, even
-though it is not quoted in any way. The variable
-`gnus-cite-unsightly-citation-regexp' matches the start of these
-citations.
-
-The new command `W Y f' (`gnus-article-outlook-deuglify-article') allows
-deuglifying broken Outlook (Express) articles.
-
-** `gnus-article-skip-boring'
-
-If you set `gnus-article-skip-boring' to `t', then Gnus will not scroll
-down to show you a page that contains only boring text, which by default
-means cited text and signature. You can customize what is skippable
-using `gnus-article-boring-faces'.
-
-This feature is especially useful if you read many articles that consist
-of a little new content at the top with a long, untrimmed message cited
-below.
-
-** Smileys (`:-)', `;-)' etc) are now displayed graphically in Emacs too.
-
-Put `(setq gnus-treat-display-smileys nil)' in `~/.gnus.el' to disable
-it.
-
-** Face headers handling. *Note Face::.
-
-** In the summary buffer, the new command `/ N' inserts new messages and `/
-o' inserts old messages.
-
-** Gnus decodes morse encoded messages if you press `W m'.
+** Gnus now supports sticky article buffers. Those are article buffers
+that are not reused when you select another article. *Note Sticky
+Articles::.
-** `gnus-summary-line-format'
+** International host names (IDNA) can now be decoded inside article bodies
+using `W i' (`gnus-summary-idna-message'). This requires that GNU Libidn
+(<http://www.gnu.org/software/libidn/>) has been installed.
-The default value changed to `%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n'.
-Moreover `gnus-extra-headers', `nnmail-extra-headers' and
-`gnus-ignored-from-addresses' changed their default so that the users
-name will be replaced by the recipient's name or the group name posting
-to for NNTP groups.
+** The non-ASCII group names handling has been much improved. The back
+ends that fully support non-ASCII group names are now `nntp', `nnml',
+and `nnrss'. Also the agent, the cache, and the marks features work
+with those back ends. *Note Non-ASCII Group Names::.
-** Deleting of attachments.
+** Gnus now displays DNS master files sent as text/dns using dns-mode.
-The command `gnus-mime-save-part-and-strip' (bound to `C-o' on MIME
-buttons) saves a part and replaces the part with an external one.
-`gnus-mime-delete-part' (bound to `d' on MIME buttons) removes a part.
-It works only on back ends that support editing.
+** Gnus supports new limiting commands in the Summary buffer: `/ r'
+(`gnus-summary-limit-to-replied') and `/ R'
+(`gnus-summary-limit-to-recipient'). *Note Limiting::.
-** `gnus-default-charset'
+** You can now fetch all ticked articles from the server using `Y t'
+(`gnus-summary-insert-ticked-articles'). *Note Summary Generation
+Commands::.
-The default value is determined from the `current-language-environment'
-variable, instead of `iso-8859-1'. Also the `.*' item in
-`gnus-group-charset-alist' is removed.
+** Gnus supports a new sort command in the Summary buffer: `C-c C-s C-t'
+(`gnus-summary-sort-by-recipient'). *Note Summary Sorting::.
-** Printing capabilities are enhanced.
+** S/MIME now features LDAP user certificate searches. You need to
+configure the server in `smime-ldap-host-list'.
-Gnus supports Muttprint natively with `O P' from the Summary and Article
-buffers. Also, each individual MIME part can be printed using `p' on
-the MIME button.
+** URLs inside OpenPGP headers are retrieved and imported to your PGP key
+ring when you click on them.
-** Extended format specs.
+** Picons can be displayed right from the textual address, see
+`gnus-picon-style'. *Note Picons::.
-Format spec `%&user-date;' is added into
-`gnus-summary-line-format-alist'. Also, user defined extended format
-specs are supported. The extended format specs look like `%u&foo;',
-which invokes function `gnus-user-format-function-FOO'. Because `&' is
-used as the escape character, old user defined format `%u&' is no longer
-supported.
+** ANSI SGR control sequences can be transformed using `W A'.
-** `/ *' (`gnus-summary-limit-include-cached') is rewritten.
+ANSI sequences are used in some Chinese hierarchies for highlighting
+articles (`gnus-article-treat-ansi-sequences').
-It was aliased to `Y c' (`gnus-summary-insert-cached-articles'). The
-new function filters out other articles.
+** Gnus now MIME decodes articles even when they lack "MIME-Version" header.
+This changes the default of `gnus-article-loose-mime'.
-** Some limiting commands accept a `C-u' prefix to negate the match.
+** `gnus-decay-scores' can be a regexp matching score files. For example,
+set it to `\\.ADAPT\\'' and only adaptive score files will be decayed.
+ *Note Score Decays::.
-If `C-u' is used on subject, author or extra headers, i.e., `/ s', `/
-a', and `/ x' (`gnus-summary-limit-to-{subject,author,extra}')
-respectively, the result will be to display all articles that do not
-match the expression.
+** Strings prefixing to the `To' and `Newsgroup' headers in summary lines
+when using `gnus-ignored-from-addresses' can be customized with
+`gnus-summary-to-prefix' and `gnus-summary-newsgroup-prefix'. *Note To
+From Newsgroups::.
-** Gnus inlines external parts (message/external).
-
-
-
-* Changes in Message mode and related Gnus features
-
-** Delayed articles
-
-You can delay the sending of a message with `C-c C-j' in the Message
-buffer. The messages are delivered at specified time. This is useful
-for sending yourself reminders. *Note Delayed Articles::.
-
-** If the new option `nnml-use-compressed-files' is non-`nil', the nnml
-back end allows compressed message files.
-
-** The new option `gnus-gcc-mark-as-read' automatically marks Gcc articles
-as read.
-
-** Externalizing of attachments
-
-If `gnus-gcc-externalize-attachments' or
-`message-fcc-externalize-attachments' is non-`nil', attach local files
-as external parts.
-
-** The envelope sender address can be customized when using Sendmail.
- *Note Mail Variables: (message)Mail Variables.
-
-** Gnus no longer generate the Sender: header automatically.
-
-Earlier it was generated when the user configurable email address was
-different from the Gnus guessed default user address. As the guessing
-algorithm is rarely correct these days, and (more controversially) the
-only use of the Sender: header was to check if you are entitled to
-cancel/supersede news (which is now solved by Cancel Locks instead, see
-another entry), generation of the header has been disabled by default.
-See the variables `message-required-headers',
-`message-required-news-headers', and `message-required-mail-headers'.
-
-** Features from third party `message-utils.el' added to `message.el'.
-
-Message now asks if you wish to remove `(was: <old subject>)' from
-subject lines (see `message-subject-trailing-was-query'). `C-c M-m' and
-`C-c M-f' inserts markers indicating included text. `C-c C-f a' adds a
-X-No-Archive: header. `C-c C-f x' inserts appropriate headers and a
-note in the body for cross-postings and followups (see the variables
-`message-cross-post-*').
-
-** References and X-Draft-From headers are no longer generated when you
-start composing messages and `message-generate-headers-first' is `nil'.
-
-** Easy inclusion of X-Faces headers. *Note X-Face::.
-
-** Group Carbon Copy (GCC) quoting
-
-To support groups that contains SPC and other weird characters, groups
-are quoted before they are placed in the Gcc: header. This means
-variables such as `gnus-message-archive-group' should no longer contain
-quote characters to make groups containing SPC work. Also, if you are
-using the string `nnml:foo, nnml:bar' (indicating Gcc into two groups)
-you must change it to return the list `("nnml:foo" "nnml:bar")',
-otherwise the Gcc: line will be quoted incorrectly. Note that returning
-the string `nnml:foo, nnml:bar' was incorrect earlier, it just didn't
-generate any problems since it was inserted directly.
-
-** `message-insinuate-rmail'
-
-Adding `(message-insinuate-rmail)' and `(setq mail-user-agent
-'gnus-user-agent)' in `.emacs' convinces Rmail to compose, reply and
-forward messages in message-mode, where you can enjoy the power of MML.
-
-** `message-minibuffer-local-map'
-
-The line below enables BBDB in resending a message:
-(define-key message-minibuffer-local-map [(tab)]
- 'bbdb-complete-name)
-
-** `gnus-posting-styles'
-
-Add a new format of match like
-((header "to" "larsi.*org")
- (Organization "Somewhere, Inc."))
-The old format like the lines below is obsolete, but still accepted.
-(header "to" "larsi.*org"
- (Organization "Somewhere, Inc."))
-
-** `message-ignored-news-headers' and `message-ignored-mail-headers'
-
-`X-Draft-From' and `X-Gnus-Agent-Meta-Information' have been added into
-these two variables. If you customized those, perhaps you need add
-those two headers too.
-
-** Gnus supports the "format=flowed" (RFC 2646) parameter. On composing
-messages, it is enabled by `use-hard-newlines'. Decoding format=flowed
-was present but not documented in earlier versions.
+** You can replace MIME parts with external bodies. See
+`gnus-mime-replace-part' and `gnus-article-replace-part'. *Note MIME
+Commands::, *Note Using MIME::.
** The option `mm-fill-flowed' can be used to disable treatment of
-"format=flowed" messages. Also, flowed text is disabled when sending
-inline PGP signed messages. (New in Gnus 5.10.7)
+format=flowed messages. Also, flowed text is disabled when sending
+inline PGP signed messages. *Note Flowed text: (emacs-mime)Flowed text.
+(New in Gnus 5.10.7)
-** Gnus supports the generation of RFC 2298 Disposition Notification
-requests.
-This is invoked with the `C-c M-n' key binding from message mode.
-
-** Message supports the Importance: (RFC 2156) header.
-
-In the message buffer, `C-c C-f C-i' or `C-c C-u' cycles through the
-valid values.
-
-** Gnus supports Cancel Locks in News.
-
-This means a header `Cancel-Lock' is inserted in news posting. It is
-used to determine if you wrote an article or not (for canceling and
-superseding). Gnus generates a random password string the first time
-you post a message, and saves it in your `~/.emacs' using the Custom
-system. While the variable is called `canlock-password', it is not
-security sensitive data. Publishing your canlock string on the web will
-not allow anyone to be able to anything she could not already do. The
-behavior can be changed by customizing `message-insert-canlock'.
+
+* Changes in Message mode
-** Gnus supports PGP (RFC 1991/2440), PGP/MIME (RFC 2015/3156) and S/MIME
-(RFC 2630-2633).
+** Gnus now supports the "hashcash" client puzzle anti-spam mechanism. Use
+`(setq message-generate-hashcash t)' to enable. *Note Hashcash::.
-It needs an external S/MIME and OpenPGP implementation, but no
-additional Lisp libraries. This add several menu items to the
-Attachments menu, and `C-c RET' key bindings, when composing messages.
-This also obsoletes `gnus-article-hide-pgp-hook'.
+** You can now drag and drop attachments to the Message buffer. See
+`mml-dnd-protocol-alist' and `mml-dnd-attach-options'. *Note MIME:
+(message)MIME.
-** MML (Mime compose) prefix changed from `M-m' to `C-c C-m'.
+** The option `message-yank-empty-prefix' now controls how empty lines are
+prefixed in cited text. *Note Insertion Variables: (message)Insertion
+Variables.
-This change was made to avoid conflict with the standard binding of
-`back-to-indentation', which is also useful in message mode.
+** Gnus uses narrowing to hide headers in Message buffers. The
+`References' header is hidden by default. To make all headers visible,
+use `(setq message-hidden-headers nil)'. *Note Message Headers:
+(message)Message Headers.
-** The default for `message-forward-show-mml' changed to the symbol `best'.
+** You can highlight different levels of citations like in the article
+buffer. See `gnus-message-highlight-citation'.
-The behavior for the `best' value is to show MML (i.e., convert to MIME)
-when appropriate. MML will not be used when forwarding signed or
-encrypted messages, as the conversion invalidate the digital signature.
+** `auto-fill-mode' is enabled by default in Message mode. See
+`message-fill-column'. *Note Message Headers: (message)Various Message
+Variables.
-** If `auto-compression-mode' is enabled, attachments are automatically
-decompressed when activated.
+** You can now store signature files in a special directory named
+`message-signature-directory'.
-** Support for non-ASCII domain names
+** The option `message-citation-line-format' controls the format of the
+"Whomever writes:" line. You need to set
+`message-citation-line-function' to
+`message-insert-formatted-citation-line' as well.
-Message supports non-ASCII domain names in From:, To: and Cc: and will
-query you whether to perform encoding when you try to send a message.
-The variable `message-use-idna' controls this. Gnus will also decode
-non-ASCII domain names in From:, To: and Cc: when you view a message.
-The variable `gnus-use-idna' controls this.
+
+* Changes in back ends
-** You can now drag and drop attachments to the Message buffer. See
-`mml-dnd-protocol-alist' and `mml-dnd-attach-options'. *Note MIME:
-(message)MIME.
+** The nntp back end stores article marks in `~/News/marks'.
+The directory can be changed using the (customizable) variable
+`nntp-marks-directory', and marks can be disabled using the (back end)
+variable `nntp-marks-is-evil'. The advantage of this is that you can
+copy `~/News/marks' (using rsync, scp or whatever) to another Gnus
+installation, and it will realize what articles you have read and
+marked. The data in `~/News/marks' has priority over the same data in
+`~/.newsrc.eld'.
-
-* Changes in back ends
+** You can import and export your RSS subscriptions from OPML files. *Note
+RSS::.
-** Gnus can display RSS newsfeeds as a newsgroup. *Note RSS::.
+** IMAP identity (RFC 2971) is supported.
-** The nndoc back end now supports mailman digests and exim bounces.
+By default, Gnus does not send any information about itself, but you can
+customize it using the variable `nnimap-id'.
-** Gnus supports Maildir groups.
+** The `nnrss' back end now supports multilingual text. Non-ASCII group
+names for the `nnrss' groups are also supported. *Note RSS::.
-Gnus includes a new back end `nnmaildir.el'. *Note Maildir::.
+** Retrieving mail with POP3 is supported over SSL/TLS and with StartTLS.
-** The nnml and nnfolder back ends store marks for each groups.
+** The nnml back end allows other compression programs beside `gzip' for
+compressed message files. *Note Mail Spool::.
-This makes it possible to take backup of nnml/nnfolder servers/groups
-separately of `~/.newsrc.eld', while preserving marks. It also makes it
-possible to share articles and marks between users (without sharing the
-`~/.newsrc.eld' file) within e.g. a department. It works by storing the
-marks stored in `~/.newsrc.eld' in a per-group file `.marks' (for nnml)
-and `GROUPNAME.mrk' (for nnfolder, named GROUPNAME). If the
-nnml/nnfolder is moved to another machine, Gnus will automatically use
-the `.marks' or `.mrk' file instead of the information in
-`~/.newsrc.eld'. The new server variables `nnml-marks-is-evil' and
-`nnfolder-marks-is-evil' can be used to disable this feature.
+** The nnml back end supports group compaction.
+This feature, accessible via the functions `gnus-group-compact-group'
+(`G z' in the group buffer) and `gnus-server-compact-server' (`z' in the
+server buffer) renumbers all articles in a group, starting from 1 and
+removing gaps. As a consequence, you get a correct total article count
+(until messages are deleted again).
* Appearance
-** The menu bar item (in Group and Summary buffer) named "Misc" has been
-renamed to "Gnus".
-
-** The menu bar item (in Message mode) named "MML" has been renamed to
-"Attachments". Note that this menu also contains security related
-stuff, like signing and encryption (*note Security: (message)Security.).
-
-** The tool bars have been updated to use GNOME icons in Group, Summary and
-Message mode. You can also customize the tool bars. This is a new
-feature in Gnus 5.10.9. (Only for Emacs, not in XEmacs.)
+** The tool bar has been updated to use GNOME icons. You can also
+customize the tool bar. There's no documentation in the manual yet, but
+`M-x customize-apropos RET -tool-bar$' should get you started. (Only
+for Emacs, not in XEmacs.)
** The tool bar icons are now (de)activated correctly in the group buffer,
see the variable `gnus-group-update-tool-bar'. Its default value
-depends on your Emacs version. This is a new feature in Gnus 5.10.9.
-
-
-* Miscellaneous changes
+depends on your Emacs version.
-** `gnus-agent'
+** You can change the location of XEmacs' toolbars in Gnus buffers. See
+`gnus-use-toolbar' and `message-use-toolbar'.
-The Gnus Agent has seen a major updated and is now enabled by default,
-and all nntp and nnimap servers from `gnus-select-method' and
-`gnus-secondary-select-method' are agentized by default. Earlier only
-the server in `gnus-select-method' was agentized by the default, and the
-agent was disabled by default. When the agent is enabled, headers are
-now also retrieved from the Agent cache instead of the back ends when
-possible. Earlier this only happened in the unplugged state. You can
-enroll or remove servers with `J a' and `J r' in the server buffer.
-Gnus will not download articles into the Agent cache, unless you
-instruct it to do so, though, by using `J u' or `J s' from the Group
-buffer. You revert to the old behavior of having the Agent disabled
-with `(setq gnus-agent nil)'. Note that putting `(gnus-agentize)' in
-`~/.gnus.el' is not needed any more.
-** Gnus reads the NOV and articles in the Agent if plugged.
-
-If one reads an article while plugged, and the article already exists in
-the Agent, it won't get downloaded once more. `(setq gnus-agent-cache
-nil)' reverts to the old behavior.
-
-** Dired integration
-
-`gnus-dired-minor-mode' (see *Note Other modes::) installs key bindings
-in dired buffers to send a file as an attachment, open a file using the
-appropriate mailcap entry, and print a file using the mailcap entry.
-
-** The format spec `%C' for positioning point has changed to `%*'.
+
+* Miscellaneous changes
-** `gnus-slave-unplugged'
+** Having edited the select-method for the foreign server in the server
+buffer is immediately reflected to the subscription of the groups which
+use the server in question. For instance, if you change
+`nntp-via-address' into `bar.example.com' from `foo.example.com', Gnus
+will connect to the news host by way of the intermediate host
+`bar.example.com' from next time.
-A new command which starts Gnus offline in slave mode.
+** The `all.SCORE' file can be edited from the group buffer using `W e'.
diff --git a/etc/MACHINES b/etc/MACHINES
index a4db1df76c7..9f84d8ac18a 100644
--- a/etc/MACHINES
+++ b/etc/MACHINES
@@ -1158,17 +1158,6 @@ Sun 3, Sun 4 (sparc), Sun 386 (m68k-sun-sunos, sparc-sun-sunos, i386-sun-sunos,
src/s/sunos4-1.h to src/config.h. This problem is due to obsolete
software in the nonshared standard library.
- If you want to use SunWindows, define HAVE_SUN_WINDOWS
- in config.h to enable a special interface called `emacstool'.
- The definition must *precede* the #include "machine.h".
- System version 3.2 is required for this facility to work.
-
- We recommend that you instead use the X window system, which
- has technical advantages, is an industry standard, and is also
- free software. The FSF does not support the SunWindows code;
- we installed it only on the understanding we would not let it
- divert our efforts from what we think is important.
-
If you are compiling for X windows, and the X window library was
compiled to use the 68881, then you must edit config.h according
the comments at the end of `src/m/sun3.h'.
diff --git a/etc/MORE.STUFF b/etc/MORE.STUFF
index bd2a4573bac..b10fafa5334 100644
--- a/etc/MORE.STUFF
+++ b/etc/MORE.STUFF
@@ -185,7 +185,7 @@ Several are for Debian GNU/Linux in particular.
page: eiffel-mode.el.
* Go in a buffer: Go Text Protocol client:
- <URL:http://www.glug.org/people/ttn/software/personal-elisp/standalone/>
+ <URL:http://www.gnuvola.org/software/personal-elisp/standalone/>
A modified version is also bundled with GNU Go:
<URL:http://www.gnu.org/software/gnugo/gnugo.html>
diff --git a/etc/NEWS b/etc/NEWS
index ebc04fb173e..e9af7041151 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1,5486 +1,530 @@
GNU Emacs NEWS -- history of user-visible changes.
-Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
- Free Software Foundation, Inc.
+Copyright (C) 2007 Free Software Foundation, Inc.
See the end of the file for license conditions.
-Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
+Please send Emacs bug reports to emacs-pretest-bug@gnu.org.
If possible, use M-x report-emacs-bug.
-This file is about changes in Emacs version 22.
+This file is about changes in Emacs version 23.
-See files NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for changes
-in older Emacs versions.
+See files NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17
+for changes in older Emacs versions.
You can narrow news to a specific version by calling `view-emacs-news'
with a prefix argument or by typing C-u C-h C-n.
-
-* About external Lisp packages
-
-When you upgrade to Emacs 22 from a previous version, some older
-versions of external Lisp packages are known to behave badly.
-So in general, it is recommended that you upgrade to the latest
-versions of any external Lisp packages that you are using.
-
-You should also be aware that many Lisp packages have been included
-with Emacs 22 (see the extensive list below), and you should remove
-any older versions of these packages to ensure that the Emacs 22
-version is used. You can use M-x list-load-path-shadows to find such
-older packages.
-Some specific packages that are known to cause problems are given
-below. Emacs tries to warn you about these through `bad-packages-alist'.
-
-** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version.
-
-** cua.el, cua-mode.el: remove old versions.
+Temporary note:
+ +++ indicates that the appropriate manual has already been updated.
+ --- means no change in the manuals is called for.
+When you add a new item, please add it without either +++ or ---
+so we will look at it and add it to the manual.
-* Installation Changes in Emacs 22.2
-
-** Emacs is now licensed under the GNU GPL version 3 (or later).
-
-* Changes in Emacs 22.2
-
-** In Image mode, whenever the displayed image is wider and/or higher
-than the window, the usual keys for moving the cursor cause the image
-to be scrolled horizontally or vertically instead.
-
-** Scrollbars follow the system theme on Windows XP and later.
-Windows XP introduced themed scrollbars, but applications have to take
-special steps to use them. Emacs now has the appropriate resources linked
-in to make it use the scrollbars from the system theme.
-
-** focus-follows-mouse defaults to nil on MS Windows.
-Previously this variable was incorrectly documented as having no effect
-on MS Windows, and the default was inappropriate for the majority of
-Windows installations. Users of software which modifies the behaviour of
-Windows to cause focus to follow the mouse will now need to explicitly set
-this variable.
-
-** `bad-packages-alist' will warn about external packages that are known
-to cause problems in this version of Emacs.
-
-** The values of `dired-recursive-deletes' and `dired-recursive-copies'
-have been changed to `top'. This means that the user is asked once,
-before deleting/copying the indicated directory recursively.
-
-** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs.
-
-** The command gdba has been removed as gdb works now for those cases where it
-was needed. In text command mode, if you have problems before execution has
-started, use M-x gud-gdb.
-
-** desktop.el now detects conflicting uses of the desktop file.
-When loading the desktop, desktop.el can now detect that the file is already
-in use. The default behavior is to ask the user what to do, but you can
-customize it with the new option `desktop-load-locked-desktop'. When saving,
-desktop.el warns about attempts to overwrite a desktop file if it determines
-that the desktop being saved is not an update of the one on disk.
-
-* New Modes and Packages in Emacs 22.2
-
-** bibtex-style-mode helps you write BibTeX's *.bst files.
-
-** The new package css-mode.el provides a major mode for editing CSS files.
-
-** The new package vera-mode.el provides a major mode for editing Vera files.
-
-** The new package socks.el implements the SOCKS v5 protocol.
-
-** VC
-
-*** VC backends can provide completion of revision names.
-
-*** VC backends can provide extra menu entries to be added to the "Version Control" menu.
-This can be used to add menu entries for backend specific functions.
-
-*** VC has some support for Mercurial (Hg).
-
-*** VC has some support for Monotone (Mtn).
-
-*** VC has some support for Bazaar (Bzr).
-
-*** VC has some support for Git.
-
-* Lisp Changes in Emacs 22.2.
-
-** Frame-local variables are deprecated and are slated for removal.
-Use frame parameters instead.
-
-** The function invisible-p returns non-nil if the character
-after a specified position is invisible.
-
-+++
-** inhibit-modification-hooks is bound to t while running modification hooks.
-As a happy consequence, after-change-functions and before-change-functions
-are not bound to nil any more while running an (after|before)-change-function.
-
-** New function `window-full-width-p' returns t if a window is as wide
-as its frame.
-
-** The new function `image-refresh' refreshes all images associated
-with a given image specification.
-
-** The new function `combine-and-quote-strings' concatenates a list of strings
-using a specified separator. If a string contains double quotes, they
-are escaped in the output.
-
-** The new function `split-string-and-unquote' performs the inverse operation to
-`combine-and-quote-strings', i.e. splits a single string into a list
-of strings, undoing any quoting added by `combine-and-quote-strings'.
-(For some separator/string combinations, the original strings cannot
-be recovered.)
+* About external Lisp packages
-* Installation Changes in Emacs 22.1
-
-** You can build Emacs with Gtk+ widgets by specifying `--with-x-toolkit=gtk'
-when you run configure. This requires Gtk+ 2.4 or newer. This port
-provides a way to display multilingual text in menus (with some caveats).
-
-** The Emacs Lisp Reference Manual is now part of the distribution.
-
-The Emacs Lisp Reference Manual in Info format is built as part of the
-Emacs build procedure and installed together with the Emacs User
-Manual. A menu item was added to the menu bar to make it easily
-accessible (Help->More Manuals->Emacs Lisp Reference).
-
-** The Introduction to Programming in Emacs Lisp manual is now part of
-the distribution.
-
-This manual is now part of the standard distribution and is installed,
-together with the Emacs User Manual, into the Info directory. A menu
-item was added to the menu bar to make it easily accessible
-(Help->More Manuals->Introduction to Emacs Lisp).
-
-** Leim is now part of the Emacs distribution.
-You no longer need to download a separate tarball in order to build
-Emacs with Leim.
-
-** Support for MacOS X was added.
-See the files mac/README and mac/INSTALL for build instructions.
-
-** Mac OS 9 port now uses the Carbon API by default. You can also
-create a non-Carbon build by specifying `NonCarbon' as a target. See
-the files mac/README and mac/INSTALL for build instructions.
-
-** Support for a Cygwin build of Emacs was added.
-
-** Support for GNU/Linux systems on X86-64 machines was added.
-
-** Support for GNU/Linux systems on S390 machines was added.
-
-** Support for GNU/Linux systems on Tensilica Xtensa machines was added.
-
-** Support for FreeBSD/Alpha has been added.
-
-** New translations of the Emacs Tutorial are available in the
-following languages: Brasilian Portuguese, Bulgarian, Chinese (both
-with simplified and traditional characters), French, Russian, and
-Italian. Type `C-u C-h t' to choose one of them in case your language
-setup doesn't automatically select the right one.
-
-** New translations of the Emacs reference card are available in the
-Brasilian Portuguese and Russian. The corresponding PostScript files
-are also included.
-
-** A French translation of the `Emacs Survival Guide' is available.
-
-** Emacs now supports new configure options `--program-prefix',
-`--program-suffix' and `--program-transform-name' that affect the names of
-installed programs.
-
-** By default, Emacs now uses a setgid helper program to update game
-scores. The directory ${localstatedir}/games/emacs is the normal
-place for game scores to be stored. You can control this with the
-configure option `--with-game-dir'. The specific user that Emacs uses
-to own the game scores is controlled by `--with-game-user'. If access
-to a game user is not available, then scores will be stored separately
-in each user's home directory.
-
-** Emacs now includes support for loading image libraries on demand.
-(Currently this feature is only used on MS Windows.) You can configure
-the supported image types and their associated dynamic libraries by
-setting the variable `image-library-alist'.
+* Installation Changes in Emacs 23.1
-** Emacs can now be built without sound support.
+** The default X toolkit is now Gtk+, rather than Lucid.
-** Emacs Lisp source files are compressed by default if `gzip' is available.
+** The Mac Carbon port is no longer supported.
+Instead, use... [what?]
-** All images used in Emacs have been consolidated in etc/images and subdirs.
-See also the changes to `find-image', documented below.
+** configure now checks for libgif before libungif when searching for
+a GIF library.
-** Emacs comes with a new set of icons.
-These icons are displayed on the taskbar and/or titlebar when Emacs
-runs in a graphical environment. Source files for these icons can be
-found in etc/images/icons. (You can't change the icons displayed by
-Emacs by changing these files directly. On X, the icon is compiled
-into the Emacs executable; see gnu.h in the source tree. On MS
-Windows, see nt/icons/emacs.ico.)
+** Support for systems without alloca has been removed.
-** The `emacsserver' program has been removed, replaced with Lisp code.
+** Support for Sun windows has been removed.
-** The `yow' program has been removed.
-Use the corresponding Emacs feature instead.
-
-** The Emacs terminal emulation in term.el uses a different terminfo name.
-The Emacs terminal emulation in term.el now uses "eterm-color" as its
-terminfo name, since term.el now supports color.
-
-** The script etc/emacs-buffer.gdb can be used with gdb to retrieve the
-contents of buffers from a core dump and save them to files easily, should
-Emacs crash.
-
-** Building with -DENABLE_CHECKING does not automatically build with union
-types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
-
-** When pure storage overflows while dumping, Emacs now prints how
-much pure storage it will approximately need.
+** The `emacstool' utility has been removed.
-* Startup Changes in Emacs 22.1
+* Changes in Emacs 23.1
-** Init file changes
-If the init file ~/.emacs does not exist, Emacs will try
-~/.emacs.d/init.el or ~/.emacs.d/init.elc. Likewise, if the shell init file
-~/.emacs_SHELL is not found, Emacs will try ~/.emacs.d/init_SHELL.sh.
+** Emacs now supports using both X displays and ttys in one session.
+You can also use any number of different ttys.
-** Emacs can now be invoked in full-screen mode on a windowed display.
-When Emacs is invoked on a window system, the new command-line options
-`--fullwidth', `--fullheight', and `--fullscreen' produce a frame
-whose width, height, or both width and height take up the entire
-screen size. (For now, this does not work with some window managers.)
+You can test for the presence of this feature in your Lisp code by
+testing for the `multi-tty' feature.
-** Emacs now displays a splash screen by default even if command-line
-arguments were given. The new command-line option --no-splash
-disables the splash screen; see also the variable
-`inhibit-splash-screen' (which is also aliased as
-`inhibit-startup-message').
+** Emacs comes with a new set of icons for Mac OS X.
+OS-X-style icons (an application icon and a relevant document icon)
+were contributed by Kentaro Ohkouchi.
+Source files for these icons can be found in Emacs.app/Contents/Resources.
-** New user option `inhibit-startup-buffer-menu'.
-When loading many files, for instance with `emacs *', Emacs normally
-displays a buffer menu. This option turns the buffer menu off.
+** Built-in functions (subr) can now have an interactive specification
+that is not a prompt string. If the `intspec' parameter of a `DEFUN'
+starts with a `(', the string is evaluated as a Lisp form.
-** New command line option -nbc or --no-blinking-cursor disables
-the blinking cursor on graphical terminals.
+** set-file-modes is now interactive and can take the mode value in
+symbolic notation thanks to auxiliary functions.
-** The option --script FILE runs Emacs in batch mode and loads FILE.
-It is useful for writing Emacs Lisp shell script files, because they
-can start with this line:
+** split-window-preferred-function specifies whether display-buffer should
+split windows vertically or horizontally.
- #!/usr/bin/emacs --script
+** Emacsclient has been extended to support opening a new terminal
+frame. Its behavior has been changed to open a new Emacs frame by
+default. Use the -c option to get the old behavior of opening files in
+the currently selected Emacs frame.
-** The -f option, used from the command line to call a function,
-now reads arguments for the function interactively if it is
-an interactively callable function.
+** The refcards are now shipped as PDF files.
-** The option --directory DIR now modifies `load-path' immediately.
-Directories are added to the front of `load-path' in the order they
-appear on the command line. For example, with this command line:
+** Emacs now supports the SVG image format through librsvg2.
- emacs -batch -L .. -L /tmp --eval "(require 'foo)"
+** If you set find-file-confirm-nonexistent-file to t, then C-x C-f
+requires confirmation before opening a non-existent file.
-Emacs looks for library `foo' in the parent directory, then in /tmp, then
-in the other directories in `load-path'. (-L is short for --directory.)
+** If the gpm mouse server is running and t-mouse-mode enabled, Emacs uses a
+Unix socket in a GNU/Linux console to talk to server, rather than faking events
+using the client program mev. This C level approach provides mouse
+highlighting, and help echoing in the minibuffer.
-** When you specify a frame size with --geometry, the size applies to
-all frames you create. A position specified with --geometry only
-affects the initial frame.
+** The new variable next-error-recenter specifies how next-error should
+recenter the visited source file. Its value can be a number (for example,
+0 for top line, -1 for bottom line), or nil for no recentering.
-** Emacs built for MS-Windows now behaves like Emacs on X does,
-with respect to its frame position: if you don't specify a position
-(in your .emacs init file, in the Registry, or with the --geometry
-command-line option), Emacs leaves the frame position to the Windows'
-window manager.
+** The mode-line displays a `@' if the default-directory for the current buffer
+is on a remote machine, or a hyphen otherwise.
-** The command line option --no-windows has been changed to
---no-window-system. The old one still works, but is deprecated.
+** The mode-line displays a mode menu when mouse-1 is clicked on a minor mode,
+in the same way as it already did for major modes.
-** If the environment variable DISPLAY specifies an unreachable X display,
-Emacs will now startup as if invoked with the --no-window-system option.
+** The new command balance-windows-area balances windows both vertically
+and horizontally.
-** Emacs now reads the standard abbrevs file ~/.abbrev_defs
-automatically at startup, if it exists. When Emacs offers to save
-modified buffers, it saves the abbrevs too if they have changed. It
-can do this either silently or asking for confirmation first,
-according to the value of `save-abbrevs'.
+** The new command close-display-connection can be used to close a connection
+to a remote display, e.g. because the display is about to become unreachable.
-** New command line option -Q or --quick.
-This is like using -q --no-site-file, but in addition it also disables
-the fancy startup screen.
-
-** New command line option -D or --basic-display.
-Disables the menu-bar, the tool-bar, the scroll-bars, tool tips, and
-the blinking cursor.
-
-** The default is now to use a bitmap as the icon.
-The command-line options --icon-type, -i have been replaced with
-options --no-bitmap-icon, -nbi to turn the bitmap icon off.
-
-** If the environment variable EMAIL is defined, Emacs now uses its value
-to compute the default value of `user-mail-address', in preference to
-concatenation of `user-login-name' with the name of your host machine.
+** The command shell prompts for the default directory, when it is
+called with a prefix, and the default directory is a remote file name.
+This is because some file name handlers (like ange-ftp) are not able to
+run processes remotely.
+** The new command `display-time-world' starts an updating time display
+using several time zones, in a buffer.
-* Incompatible Editing Changes in Emacs 22.1
-
-** You can now follow links by clicking Mouse-1 on the link.
-
-See below for more details.
-
-** When the undo information of the current command gets really large
-(beyond the value of `undo-outer-limit'), Emacs discards it and warns
-you about it.
-
-** When Emacs prompts for file names, SPC no longer completes the file name.
-This is so filenames with embedded spaces could be input without the
-need to quote the space with a C-q. The underlying changes in the
-keymaps that are active in the minibuffer are described below under
-"New keymaps for typing file names".
-
-If you want the old behavior back, add these two key bindings to your
-~/.emacs init file:
-
- (define-key minibuffer-local-filename-completion-map
- " " 'minibuffer-complete-word)
- (define-key minibuffer-local-must-match-filename-map
- " " 'minibuffer-complete-word)
-
-** The completion commands TAB, SPC and ? in the minibuffer apply only
-to the text before point. If there is text in the buffer after point,
-it remains unchanged.
-
-** In incremental search, C-w is changed. M-%, C-M-w and C-M-y are special.
-
-See below under "incremental search changes".
+* Startup Changes in Emacs 23.1
-** M-g is now a prefix key.
-M-g g and M-g M-g run goto-line.
-M-g n and M-g M-n run next-error (like C-x `).
-M-g p and M-g M-p run previous-error.
+** New user option `initial-buffer-choice' specifies what to display
+after starting Emacs: startup screen, *scratch* buffer, visiting a
+file or directory.
-** C-u M-g M-g switches to the most recent previous buffer,
-and goes to the specified line in that buffer.
-
-When goto-line starts to execute, if there's a number in the buffer at
-point then it acts as the default argument for the minibuffer.
-
-** M-o now is the prefix key for setting text properties;
-M-o M-o requests refontification.
-
-** C-x C-f RET (find-file), typing nothing in the minibuffer, is no longer
-a special case.
-
-Since the default input is the current directory, this has the effect
-of specifying the current directory. Normally that means to visit the
-directory with Dired.
-
-You can get the old behavior by typing C-x C-f M-n RET, which fetches
-the actual file name into the minibuffer.
-
-** In Dired's ! command (dired-do-shell-command), `*' and `?' now
-control substitution of the file names only when they are surrounded
-by whitespace. This means you can now use them as shell wildcards
-too. If you want to use just plain `*' as a wildcard, type `*""'; the
-doublequotes make no difference in the shell, but they prevent
-special treatment in `dired-do-shell-command'.
-
-** The info-search bindings on C-h C-f, C-h C-k and C-h C-i
-have been moved to C-h F, C-h K and C-h S.
-
-** `apply-macro-to-region-lines' now operates on all lines that begin
-in the region, rather than on all complete lines in the region.
-
-** line-move-ignore-invisible now defaults to t.
-
-** Adaptive filling misfeature removed.
-It no longer treats `NNN.' or `(NNN)' as a prefix.
-
-** The old bindings C-M-delete and C-M-backspace have been deleted,
-since there are situations where one or the other will shut down
-the operating system or your X server.
-
-** The register compatibility key bindings (deprecated since Emacs 19)
-have been removed:
- C-x / point-to-register (Use: C-x r SPC)
- C-x j jump-to-register (Use: C-x r j)
- C-x x copy-to-register (Use: C-x r s)
- C-x g insert-register (Use: C-x r i)
+** New alias `argv' for `command-line-args-left'
+This is a convenience alias, so that one can write `(pop argv)'
+inside of --eval command line arguments in order to access
+following arguments.
+** The abbrev file is no longer read at startup in batch mode.
-* Editing Changes in Emacs 22.1
-
-** The max size of buffers and integers has been doubled.
-On 32bit machines, it is now 256M (i.e. 268435455).
-
-** !MEM FULL! at the start of the mode line indicates that Emacs
-cannot get any more memory for Lisp data. This often means it could
-crash soon if you do things that use more memory. On most systems,
-killing buffers will get out of this state. If killing buffers does
-not make !MEM FULL! disappear, you should save your work and start
-a new Emacs.
-
-** `undo-only' does an undo which does not redo any previous undo.
+* Incompatible Editing Changes in Emacs 23.1
-** Yanking text now discards certain text properties that can
-be inconvenient when you did not expect them. The variable
-`yank-excluded-properties' specifies which ones. Insertion
-of register contents and rectangles also discards these properties.
-
-** New command `kill-whole-line' kills an entire line at once.
-By default, it is bound to C-S-<backspace>.
-
-** M-SPC (just-one-space) when given a numeric argument N
-converts whitespace around point to N spaces.
-
-** You can now switch buffers in a cyclic order with C-x C-left
-(previous-buffer) and C-x C-right (next-buffer). C-x left and
-C-x right can be used as well. The functions keep a different buffer
-cycle for each frame, using the frame-local buffer list.
-
-** C-x 5 C-o displays a specified buffer in another frame
-but does not switch to that frame. It's the multi-frame
-analogue of C-x 4 C-o.
-
-** `special-display-buffer-names' and `special-display-regexps' now
-understand two new boolean pseudo-frame-parameters `same-frame' and
-`same-window'.
-
-** New commands to operate on pairs of open and close characters:
-`insert-pair', `delete-pair', `raise-sexp'.
-
-** M-x setenv now expands environment variable references.
-
-Substrings of the form `$foo' and `${foo}' in the specified new value
-now refer to the value of environment variable foo. To include a `$'
-in the value, use `$$'.
-
-** The default values of paragraph-start and indent-line-function have
-been changed to reflect those used in Text mode rather than those used
-in Paragraph-Indent Text mode.
-
-** The default for the paper size (variable ps-paper-type) is taken
-from the locale.
-
-** Help command changes:
-
-*** Changes in C-h bindings:
-
-C-h e displays the *Messages* buffer.
-
-C-h d runs apropos-documentation.
-
-C-h r visits the Emacs Manual in Info.
-
-C-h followed by a control character is used for displaying files
- that do not change:
-
-C-h C-f displays the FAQ.
-C-h C-e displays the PROBLEMS file.
-
-The info-search bindings on C-h C-f, C-h C-k and C-h C-i
-have been moved to C-h F, C-h K and C-h S.
-
-C-h c, C-h k, C-h w, and C-h f now handle remapped interactive commands.
-- C-h c and C-h k report the actual command (after possible remapping)
- run by the key sequence.
-- C-h w and C-h f on a command which has been remapped now report the
- command it is remapped to, and the keys which can be used to run
- that command.
-
-For example, if C-k is bound to kill-line, and kill-line is remapped
-to new-kill-line, these commands now report:
-- C-h c and C-h k C-k reports:
- C-k runs the command new-kill-line
-- C-h w and C-h f kill-line reports:
- kill-line is remapped to new-kill-line which is on C-k, <deleteline>
-- C-h w and C-h f new-kill-line reports:
- new-kill-line is on C-k
-
-*** The apropos commands now accept a list of words to match.
-When more than one word is specified, at least two of those words must
-be present for an item to match. Regular expression matching is still
-available.
-
-*** The new option `apropos-sort-by-scores' causes the matching items
-to be sorted according to their score. The score for an item is a
-number calculated to indicate how well the item matches the words or
-regular expression that you entered to the apropos command. The best
-match is listed first, and the calculated score is shown for each
-matching item.
-
-*** Help commands `describe-function' and `describe-key' now show function
-arguments in lowercase italics on displays that support it. To change the
-default, customize face `help-argument-name' or redefine the function
-`help-default-arg-highlight'.
-
-*** C-h v and C-h f commands now include a hyperlink to the C source for
-variables and functions defined in C (if the C source is available).
-
-*** Help mode now only makes hyperlinks for faces when the face name is
-preceded or followed by the word `face'. It no longer makes
-hyperlinks for variables without variable documentation, unless
-preceded by one of the words `variable' or `option'. It now makes
-hyperlinks to Info anchors (or nodes) if the anchor (or node) name is
-enclosed in single quotes and preceded by `info anchor' or `Info
-anchor' (in addition to earlier `info node' and `Info node'). In
-addition, it now makes hyperlinks to URLs as well if the URL is
-enclosed in single quotes and preceded by `URL'.
-
-*** The new command `describe-char' (C-u C-x =) pops up a buffer with
-description various information about a character, including its
-encodings and syntax, its text properties, how to input, overlays, and
-widgets at point. You can get more information about some of them, by
-clicking on mouse-sensitive areas or moving there and pressing RET.
-
-*** The command `list-text-properties-at' has been deleted because
-C-u C-x = gives the same information and more.
-
-*** New command `display-local-help' displays any local help at point
-in the echo area. It is bound to `C-h .'. It normally displays the
-same string that would be displayed on mouse-over using the
-`help-echo' property, but, in certain cases, it can display a more
-keyboard oriented alternative.
-
-*** New user option `help-at-pt-display-when-idle' allows you to
-automatically show the help provided by `display-local-help' on
-point-over, after suitable idle time. The amount of idle time is
-determined by the user option `help-at-pt-timer-delay' and defaults
-to one second. This feature is turned off by default.
-
-** Mark command changes:
-
-*** A prefix argument is no longer required to repeat a jump to a
-previous mark if you set `set-mark-command-repeat-pop' to t. I.e. C-u
-C-SPC C-SPC C-SPC ... cycles through the mark ring. Use C-u C-u C-SPC
-to set the mark immediately after a jump.
-
-*** Marking commands extend the region when invoked multiple times.
-
-If you type C-M-SPC (mark-sexp), M-@ (mark-word), M-h
-(mark-paragraph), or C-M-h (mark-defun) repeatedly, the marked region
-extends each time, so you can mark the next two sexps with M-C-SPC
-M-C-SPC, for example. This feature also works for
-mark-end-of-sentence, if you bind that to a key. It also extends the
-region when the mark is active in Transient Mark mode, regardless of
-the last command. To start a new region with one of marking commands
-in Transient Mark mode, you can deactivate the active region with C-g,
-or set the new mark with C-SPC.
-
-*** Some commands do something special in Transient Mark mode when the
-mark is active--for instance, they limit their operation to the
-region. Even if you don't normally use Transient Mark mode, you might
-want to get this behavior from a particular command. There are two
-ways you can enable Transient Mark mode and activate the mark, for one
-command only.
-
-One method is to type C-SPC C-SPC; this enables Transient Mark mode
-and sets the mark at point. The other method is to type C-u C-x C-x.
-This enables Transient Mark mode temporarily but does not alter the
-mark or the region.
-
-After these commands, Transient Mark mode remains enabled until you
-deactivate the mark. That typically happens when you type a command
-that alters the buffer, but you can also deactivate the mark by typing
-C-g.
-
-*** Movement commands `beginning-of-buffer', `end-of-buffer',
-`beginning-of-defun', `end-of-defun' do not set the mark if the mark
-is already active in Transient Mark mode.
-
-*** M-h (mark-paragraph) now accepts a prefix arg.
-
-With positive arg, M-h marks the current and the following paragraphs;
-if the arg is negative, it marks the current and the preceding
-paragraphs.
-
-** Incremental Search changes:
-
-*** M-% typed in isearch mode invokes `query-replace' or
-`query-replace-regexp' (depending on search mode) with the current
-search string used as the string to replace.
-
-*** C-w in incremental search now grabs either a character or a word,
-making the decision in a heuristic way. This new job is done by the
-command `isearch-yank-word-or-char'. To restore the old behavior,
-bind C-w to `isearch-yank-word' in `isearch-mode-map'.
-
-*** C-y in incremental search now grabs the next line if point is already
-at the end of a line.
-
-*** C-M-w deletes and C-M-y grabs a character in isearch mode.
-Another method to grab a character is to enter the minibuffer by `M-e'
-and to type `C-f' at the end of the search string in the minibuffer.
-
-*** Vertical scrolling is now possible within incremental search.
-To enable this feature, customize the new user option
-`isearch-allow-scroll'. User written commands which satisfy stringent
-constraints can be marked as "scrolling commands". See the Emacs manual
-for details.
-
-*** Isearch no longer adds `isearch-resume' commands to the command
-history by default. To enable this feature, customize the new
-user option `isearch-resume-in-command-history'.
-
-** Replace command changes:
-
-*** When used interactively, the commands `query-replace-regexp' and
-`replace-regexp' allow \,expr to be used in a replacement string,
-where expr is an arbitrary Lisp expression evaluated at replacement
-time. `\#' in a replacement string now refers to the count of
-replacements already made by the replacement command. All regular
-expression replacement commands now allow `\?' in the replacement
-string to specify a position where the replacement string can be
-edited for each replacement. `query-replace-regexp-eval' is now
-deprecated since it offers no additional functionality.
-
-*** query-replace uses isearch lazy highlighting when the new user option
-`query-replace-lazy-highlight' is non-nil.
-
-*** The current match in query-replace is highlighted in new face
-`query-replace' which by default inherits from isearch face.
-
-*** New user option `query-replace-skip-read-only': when non-nil,
-`query-replace' and related functions simply ignore
-a match if part of it has a read-only property.
-
-** Local variables lists:
-
-*** If the local variables list contains any variable-value pairs that
-are not known to be safe, Emacs shows a prompt asking whether to apply
-the local variables list as a whole. In earlier versions, a prompt
-was only issued for variables explicitly marked as risky (for the
-definition of risky variables, see `risky-local-variable-p').
-
-At the prompt, you can choose to save the contents of this local
-variables list to `safe-local-variable-values'. This new customizable
-option is a list of variable-value pairs that are known to be safe.
-Variables can also be marked as safe with the existing
-`safe-local-variable' property (see `safe-local-variable-p').
-However, risky variables will not be added to
-`safe-local-variable-values' in this way.
-
-*** The variable `enable-local-variables' controls how local variable
-lists are handled. t, the default, specifies the standard querying
-behavior. :safe means use only safe values, and ignore the rest.
-:all means set all variables, whether or not they are safe.
-nil means ignore them all. Anything else means always query.
-
-*** The variable `safe-local-eval-forms' specifies a list of forms that
-are ok to evaluate when they appear in an `eval' local variables
-specification. Normally Emacs asks for confirmation before evaluating
-such a form, but if the form appears in this list, no confirmation is
-needed.
-
-*** If a function has a non-nil `safe-local-eval-function' property,
-that means it is ok to evaluate some calls to that function when it
-appears in an `eval' local variables specification. If the property
-is t, then any form calling that function with constant arguments is
-ok. If the property is a function or list of functions, they are called
-with the form as argument, and if any returns t, the form is ok to call.
-
-If the form is not "ok to call", that means Emacs asks for
-confirmation as before.
-
-*** In processing a local variables list, Emacs strips the prefix and
-suffix from every line before processing all the lines.
-
-*** Text properties in local variables.
-
-A file local variables list cannot specify a string with text
-properties--any specified text properties are discarded.
++++
+** In Dired-x, all command guesses for ! are now added to the default
+list accessible by M-n instead of pushing all guesses temporarily into
+the history list.
-** File operation changes:
-
-*** Unquoted `$' in file names do not signal an error any more when
-the corresponding environment variable does not exist.
-Instead, the `$ENVVAR' text is left as is, so that `$$' quoting
-is only rarely needed.
-
-*** C-x C-f RET, typing nothing in the minibuffer, is no longer a special case.
-
-Since the default input is the current directory, this has the effect
-of specifying the current directory. Normally that means to visit the
-directory with Dired.
-
-*** C-x s (save-some-buffers) now offers an option `d' to diff a buffer
-against its file, so you can see what changes you would be saving.
-
-*** Auto Compression mode is now enabled by default.
-
-*** If the user visits a file larger than `large-file-warning-threshold',
-Emacs asks for confirmation.
-
-*** The commands copy-file, rename-file, make-symbolic-link and
-add-name-to-file, when given a directory as the "new name" argument,
-convert it to a file name by merging in the within-directory part of
-the existing file's name. (This is the same convention that shell
-commands cp, mv, and ln follow.) Thus, M-x copy-file RET ~/foo RET
-/tmp RET copies ~/foo to /tmp/foo.
+
+* Editing Changes in Emacs 23.1
-*** require-final-newline now has two new possible values:
-
-`visit' means add a newline (as an undoable change) if it's needed
-when visiting the file.
-
-`visit-save' means add a newline (as an undoable change) if it's
-needed when visiting the file, and also add a newline if it's needed
-when saving the file.
-
-*** The new option mode-require-final-newline controls how certain
-major modes enable require-final-newline. Any major mode that's
-designed for a kind of file that should normally end in a newline
-sets require-final-newline based on mode-require-final-newline.
-So you can customize mode-require-final-newline to control what these
-modes do.
++++
+** C-M-% now shows replacement as it would look in the buffer, with
+`\N' and `\&' substituted according to the match. Old behavior can be
+restored by customizing `query-replace-show-replacement'.
-*** When you are root, and you visit a file whose modes specify
-read-only, the Emacs buffer is now read-only too. Type C-x C-q if you
-want to make the buffer writable. (As root, you can in fact alter the
-file.)
++++
+** M-q now fills the region if the region is active and
+`transient-mark-mode' is turned on. Otherwise, it fills the current
+paragraph.
-*** find-file-read-only visits multiple files in read-only mode,
-when the file name contains wildcard characters.
++++
+** M-$ now checks spelling of the region if the region is active and
+`transient-mark-mode' is turned on. Otherwise, it checks spelling of the
+word at point.
-*** find-alternate-file replaces the current file with multiple files,
-when the file name contains wildcard characters. It now asks if you
-wish save your changes and not just offer to kill the buffer.
+** TAB now indents the region if the region is active and
+`transient-mark-mode' is turned on.
-*** When used interactively, `format-write-file' now asks for confirmation
-before overwriting an existing file, unless a prefix argument is
-supplied. This behavior is analogous to `write-file'.
+** C-z now invokes `suspend-frame', C-x C-c now invokes
+`save-buffers-kill-terminal'.
-*** The variable `auto-save-file-name-transforms' now has a third element that
-controls whether or not the function `make-auto-save-file-name' will
-attempt to construct a unique auto-save name (e.g. for remote files).
+** New command kill-matching-buffers kills buffers whose name matches a regexp.
-*** The new option `write-region-inhibit-fsync' disables calls to fsync
-in `write-region'. This can be useful on laptops to avoid spinning up
-the hard drive upon each file save. Enabling this variable may result
-in data loss, use with care.
+** `interprogram-paste-function' can now return one string or a list
+of strings. In the latter case, Emacs puts the second and following
+strings on the kill ring.
** Minibuffer changes:
-*** The completion commands TAB, SPC and ? in the minibuffer apply only
-to the text before point. If there is text in the buffer after point,
-it remains unchanged.
-
-*** The new file-name-shadow-mode is turned ON by default, so that when
-entering a file name, any prefix which Emacs will ignore is dimmed.
-
-*** There's a new face `minibuffer-prompt'.
-Emacs adds this face to the list of text properties stored in the
-variable `minibuffer-prompt-properties', which is used to display the
-prompt string.
-
-*** Enhanced visual feedback in `*Completions*' buffer.
-
-Completions lists use faces to highlight what all completions
-have in common and where they begin to differ.
-
-The common prefix shared by all possible completions uses the face
-`completions-common-part', while the first character that isn't the
-same uses the face `completions-first-difference'. By default,
-`completions-common-part' inherits from `default', and
-`completions-first-difference' inherits from `bold'. The idea of
-`completions-common-part' is that you can use it to make the common
-parts less visible than normal, so that the rest of the differing
-parts is, by contrast, slightly highlighted.
-
-Above fontification is always done when listing completions is
-triggered at minibuffer. If you want to fontify completions whose
-listing is triggered at the other normal buffer, you have to pass
-the common prefix of completions to `display-completion-list' as
-its second argument.
-
-*** File-name completion can now ignore specified directories.
-If an element of the list in `completion-ignored-extensions' ends in a
-slash `/', it indicates a subdirectory that should be ignored when
-completing file names. Elements of `completion-ignored-extensions'
-which do not end in a slash are never considered when a completion
-candidate is a directory.
-
-*** New user option `history-delete-duplicates'.
-If set to t when adding a new history element, all previous identical
-elements are deleted from the history list.
-
-** Redisplay changes:
-
-*** The new face `mode-line-inactive' is used to display the mode line
-of non-selected windows. The `mode-line' face is now used to display
-the mode line of the currently selected window.
-
-The new variable `mode-line-in-non-selected-windows' controls whether
-the `mode-line-inactive' face is used.
-
-*** The mode line position information now comes before the major mode.
-When the file is maintained under version control, that information
-appears between the position information and the major mode.
-
-*** You can now customize the use of window fringes. To control this
-for all frames, use M-x fringe-mode or the Show/Hide submenu of the
-top-level Options menu, or customize the `fringe-mode' variable. To
-control this for a specific frame, use the command M-x
-set-fringe-style.
-
-*** Angle icons in the fringes can indicate the buffer boundaries. In
-addition, up and down arrow bitmaps in the fringe indicate which ways
-the window can be scrolled.
-
-This behavior is activated by setting the buffer-local variable
-`indicate-buffer-boundaries' to a non-nil value. The default value of
-this variable is found in `default-indicate-buffer-boundaries'.
-
-If value is `left' or `right', both angle and arrow bitmaps are
-displayed in the left or right fringe, resp.
-
-The value can also be an alist which specifies the presence and
-position of each bitmap individually.
-
-For example, ((top . left) (t . right)) places the top angle bitmap
-in left fringe, the bottom angle bitmap in right fringe, and both
-arrow bitmaps in right fringe. To show just the angle bitmaps in the
-left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)).
+*** In Dired, a list of commands for ! extracted from mailcap according to
+file extensions are added to the default list accessible by M-n.
-*** On window systems, lines which are exactly as wide as the window
-(not counting the final newline character) are no longer broken into
-two lines on the display (with just the newline on the second line).
-Instead, the newline now "overflows" into the right fringe, and the
-cursor will be displayed in the fringe when positioned on that newline.
+*** A list of regexp default values is available via M-n for `occur',
+`keep-lines', `flush-lines' and `how-many'. This list includes the active
+region in transient-mark-mode, the word under the cursor, the last isearch
+regexp, the last isearch string and the last replacement regexp.
-The new user option 'overflow-newline-into-fringe' can be set to nil to
-revert to the old behavior of continuing such lines.
+*** isearch started in the minibuffer searches in the minibuffer history.
+Reverse isearch commands (C-r, C-M-r) search in previous minibuffer
+history elements, and forward isearch commands (C-s, C-M-s) search in
+next history elements. When the reverse search reaches the first history
+element, it wraps to the last history element, and the forward search
+wraps to the first history element. When the search is terminated, the
+history element containing the search string becomes the current.
-*** A window can now have individual fringe and scroll-bar settings,
-in addition to the individual display margin settings.
-
-Such individual settings are now preserved when windows are split
-horizontally or vertically, a saved window configuration is restored,
-or when the frame is resized.
-
-*** When a window has display margin areas, the fringes are now
-displayed between the margins and the buffer's text area, rather than
-outside those margins.
-
-*** New face `escape-glyph' highlights control characters and escape glyphs.
-
-*** Non-breaking space and hyphens are now displayed with a special
-face, either nobreak-space or escape-glyph. You can turn this off or
-specify a different mode by setting the variable `nobreak-char-display'.
-
-*** The parameters of automatic hscrolling can now be customized.
-The variable `hscroll-margin' determines how many columns away from
-the window edge point is allowed to get before automatic hscrolling
-will horizontally scroll the window. The default value is 5.
-
-The variable `hscroll-step' determines how many columns automatic
-hscrolling scrolls the window when point gets too close to the
-window edge. If its value is zero, the default, Emacs scrolls the
-window so as to center point. If its value is an integer, it says how
-many columns to scroll. If the value is a floating-point number, it
-gives the fraction of the window's width to scroll the window.
-
-The variable `automatic-hscrolling' was renamed to
-`auto-hscroll-mode'. The old name is still available as an alias.
-
-*** Moving or scrolling through images (and other lines) taller than
-the window now works sensibly, by automatically adjusting the window's
-vscroll property.
-
-*** Preemptive redisplay now adapts to current load and bandwidth.
-
-To avoid preempting redisplay on fast computers, networks, and displays,
-the arrival of new input is now performed at regular intervals during
-redisplay. The new variable `redisplay-preemption-period' specifies
-the period; the default is to check for input every 0.1 seconds.
-
-*** 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.
-
-*** If value of `auto-resize-tool-bars' is `grow-only', the tool bar
-will expand as needed, but not contract automatically. To contract
-the tool bar, you must type C-l.
-
-*** New customize option `overline-margin' controls the space between
-overline and text.
-
-*** New variable `x-underline-at-descent-line' controls the relative
-position of the underline. When set, it overrides the
-`x-use-underline-position-properties' variables.
-
-** New faces:
-
-*** `mode-line-highlight' is the standard face indicating mouse sensitive
-elements on mode-line (and header-line) like `highlight' face on text
-areas.
-
-*** `mode-line-buffer-id' is the standard face for buffer identification
-parts of the mode line.
-
-*** `shadow' face defines the appearance of the "shadowed" text, i.e.
-the text which should be less noticeable than the surrounding text.
-This can be achieved by using shades of grey in contrast with either
-black or white default foreground color. This generic shadow face
-allows customization of the appearance of shadowed text in one place,
-so package-specific faces can inherit from it.
-
-*** `vertical-border' face is used for the vertical divider between windows.
-
-** Font-Lock (syntax highlighting) changes:
-
-*** All modes now support using M-x font-lock-mode to toggle
-fontification, even those such as Occur, Info, and comint-derived
-modes that do their own fontification in a special way.
-
-The variable `Info-fontify' is no longer applicable; to disable
-fontification in Info, remove `turn-on-font-lock' from
-`Info-mode-hook'.
-
-*** New standard font-lock face `font-lock-comment-delimiter-face'.
-
-*** New standard font-lock face `font-lock-preprocessor-face'.
-
-*** Easy to overlook single character negation can now be font-locked.
-You can use the new variable `font-lock-negation-char-face' and the face of
-the same name to customize this. Currently the cc-modes, sh-script-mode,
-cperl-mode and make-mode support this.
-
-*** Font-Lock mode: in major modes such as Lisp mode, where some Emacs
-features assume that an open-paren in column 0 is always outside of
-any string or comment, Font-Lock now highlights any such open-paren in
-bold-red if it is inside a string or a comment, to indicate that it
-can cause trouble. You should rewrite the string or comment so that
-the open-paren is not in column 0.
-
-*** M-o now is the prefix key for setting text properties;
-M-o M-o requests refontification.
-
-*** The default settings for JIT stealth lock parameters are changed.
-The default value for the user option jit-lock-stealth-time is now nil
-instead of 3. This setting of jit-lock-stealth-time disables stealth
-fontification: on today's machines, it may be a bug in font lock
-patterns if fontification otherwise noticeably degrades interactivity.
-If you find movement in infrequently visited buffers sluggish (and the
-major mode maintainer has no better idea), customizing
-jit-lock-stealth-time to a non-nil value will let Emacs fontify
-buffers in the background when it considers the system to be idle.
-jit-lock-stealth-nice is now 0.5 instead of 0.125 which is supposed to
-cause less load than the old defaults.
-
-*** jit-lock can now be delayed with `jit-lock-defer-time'.
-
-If this variable is non-nil, its value should be the amount of Emacs
-idle time in seconds to wait before starting fontification. For
-example, if you set `jit-lock-defer-time' to 0.25, fontification will
-only happen after 0.25s of idle time.
-
-*** contextual refontification is now separate from stealth fontification.
-
-jit-lock-defer-contextually is renamed jit-lock-contextually and
-jit-lock-context-time determines the delay after which contextual
-refontification takes place.
-
-*** lazy-lock is considered obsolete.
-
-The `lazy-lock' package is superseded by `jit-lock' and is considered
-obsolete. `jit-lock' is activated by default; if you wish to continue
-using `lazy-lock', activate it in your ~/.emacs like this:
- (setq font-lock-support-mode 'lazy-lock-mode)
-
-If you invoke `lazy-lock-mode' directly rather than through
-`font-lock-support-mode', it now issues a warning:
- "Use font-lock-support-mode rather than calling lazy-lock-mode"
-
-** Menu support:
-
-*** A menu item "Show/Hide" was added to the top-level menu "Options".
-This menu allows you to turn various display features on and off (such
-as the fringes, the tool bar, the speedbar, and the menu bar itself).
-You can also move the vertical scroll bar to either side here or turn
-it off completely. There is also a menu-item to toggle displaying of
-current date and time, current line and column number in the mode-line.
-
-*** Speedbar has moved from the "Tools" top level menu to "Show/Hide".
-
-*** The menu item "Open File..." has been split into two items, "New File..."
-and "Open File...". "Open File..." now opens only existing files. This is
-to support existing GUI file selection dialogs better.
-
-*** The file selection dialog for Gtk+, Mac, W32 and Motif/LessTif can be
-disabled by customizing the variable `use-file-dialog'.
-
-*** The pop up menus for Lucid now stay up if you do a fast click and can
-be navigated with the arrow keys (like Gtk+, Mac and W32).
-
-*** The menu bar for Motif/LessTif/Lucid/Gtk+ can be navigated with keys.
-Pressing F10 shows the first menu in the menu bar. Navigation is done with
-the arrow keys, select with the return key and cancel with the escape keys.
-
-*** The Lucid menus can display multilingual text in your locale. You have
-to explicitly specify a fontSet resource for this to work, for example
-`-xrm "Emacs*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*"'.
-
-*** Dialogs for Lucid/Athena and LessTif/Motif now pop down on pressing
-ESC, like they do for Gtk+, Mac and W32.
-
-*** For the Gtk+ version, you can make Emacs use the old file dialog
-by setting the variable `x-gtk-use-old-file-dialog' to t. Default is to use
-the new dialog.
-
-*** You can exit dialog windows and menus by typing C-g.
-
-** Buffer Menu changes:
-
-*** The new options `buffers-menu-show-directories' and
-`buffers-menu-show-status' let you control how buffers are displayed
-in the menu dropped down when you click "Buffers" from the menu bar.
-
-`buffers-menu-show-directories' controls whether the menu displays
-leading directories as part of the file name visited by the buffer.
-If its value is `unless-uniquify', the default, directories are
-shown unless uniquify-buffer-name-style' is non-nil. The value of nil
-and t turn the display of directories off and on, respectively.
-
-`buffers-menu-show-status' controls whether the Buffers menu includes
-the modified and read-only status of the buffers. By default it is
-t, and the status is shown.
-
-Setting these variables directly does not take effect until next time
-the Buffers menu is regenerated.
-
-*** New command `Buffer-menu-toggle-files-only' toggles display of file
-buffers only in the Buffer Menu. It is bound to T in Buffer Menu
-mode.
-
-*** `buffer-menu' and `list-buffers' now list buffers whose names begin
-with a space, when those buffers are visiting files. Normally buffers
-whose names begin with space are omitted.
-
-** Mouse changes:
-
-*** You can now follow links by clicking Mouse-1 on the link.
-
-Traditionally, Emacs uses a Mouse-1 click to set point and a Mouse-2
-click to follow a link, whereas most other applications use a Mouse-1
-click for both purposes, depending on whether you click outside or
-inside a link. Now the behavior of a Mouse-1 click has been changed
-to match this context-sensitive dual behavior. (If you prefer the old
-behavior, set the user option `mouse-1-click-follows-link' to nil.)
-
-Depending on the current mode, a Mouse-2 click in Emacs can do much
-more than just follow a link, so the new Mouse-1 behavior is only
-activated for modes which explicitly mark a clickable text as a "link"
-(see the new function `mouse-on-link-p' for details). The Lisp
-packages that are included in release 22.1 have been adapted to do
-this, but external packages may not yet support this. However, there
-is no risk in using such packages, as the worst thing that could
-happen is that you get the original Mouse-1 behavior when you click
-on a link, which typically means that you set point where you click.
-
-If you want to get the original Mouse-1 action also inside a link, you
-just need to press the Mouse-1 button a little longer than a normal
-click (i.e. press and hold the Mouse-1 button for half a second before
-you release it).
-
-Dragging the Mouse-1 inside a link still performs the original
-drag-mouse-1 action, typically copy the text.
-
-You can customize the new Mouse-1 behavior via the new user options
-`mouse-1-click-follows-link' and `mouse-1-click-in-non-selected-windows'.
-
-*** If you set the new variable `mouse-autoselect-window' to a non-nil
-value, windows are automatically selected as you move the mouse from
-one Emacs window to another, even within a frame. A minibuffer window
-can be selected only when it is active.
-
-*** On X, when the window manager requires that you click on a frame to
-select it (give it focus), the selected window and cursor position
-normally changes according to the mouse click position. If you set
-the variable x-mouse-click-focus-ignore-position to t, the selected
-window and cursor position do not change when you click on a frame
-to give it focus.
-
-*** Emacs normally highlights mouse sensitive text whenever the mouse
-is over the text. By setting the new variable `mouse-highlight', you
-can optionally enable mouse highlighting only after you move the
-mouse, so that highlighting disappears when you press a key. You can
-also disable mouse highlighting.
-
-*** You can now customize if selecting a region by dragging the mouse
-shall not copy the selected text to the kill-ring by setting the new
-variable mouse-drag-copy-region to nil.
-
-*** Under X, mouse-wheel-mode is turned on by default.
-
-*** Emacs ignores mouse-2 clicks while the mouse wheel is being moved.
-
-People tend to push the mouse wheel (which counts as a mouse-2 click)
-unintentionally while turning the wheel, so these clicks are now
-ignored. You can customize this with the mouse-wheel-click-event and
-mouse-wheel-inhibit-click-time variables.
-
-*** mouse-wheels can now scroll a specific fraction of the window
-(rather than a fixed number of lines) and the scrolling is `progressive'.
-
-** Multilingual Environment (Mule) changes:
-
-*** You can disable character translation for a file using the -*-
-construct. Include `enable-character-translation: nil' inside the
--*-...-*- to disable any character translation that may happen by
-various global and per-coding-system translation tables. You can also
-specify it in a local variable list at the end of the file. For
-shortcut, instead of using this long variable name, you can append the
-character "!" at the end of coding-system name specified in -*-
-construct or in a local variable list. For example, if a file has the
-following header, it is decoded by the coding system `iso-latin-1'
-without any character translation:
-;; -*- coding: iso-latin-1!; -*-
-
-*** Language environment and various default coding systems are setup
-more correctly according to the current locale name. If the locale
-name doesn't specify a charset, the default is what glibc defines.
-This change can result in using the different coding systems as
-default in some locale (e.g. vi_VN).
-
-*** The keyboard-coding-system is now automatically set based on your
-current locale settings if you are not using a window system. This
-can mean that the META key doesn't work but generates non-ASCII
-characters instead, depending on how the terminal (or terminal
-emulator) works. Use `set-keyboard-coding-system' (or customize
-keyboard-coding-system) if you prefer META to work (the old default)
-or if the locale doesn't describe the character set actually generated
-by the keyboard. See Info node `Unibyte Mode'.
-
-*** The new command `set-file-name-coding-system' (C-x RET F) sets
-coding system for encoding and decoding file names. A new menu item
-(Options->Mule->Set Coding Systems->For File Name) invokes this
-command.
-
-*** The new command `revert-buffer-with-coding-system' (C-x RET r)
-revisits the current file using a coding system that you specify.
-
-*** New command `recode-region' decodes the region again by a specified
-coding system.
-
-*** The new command `recode-file-name' changes the encoding of the name
-of a file.
-
-*** New command `ucs-insert' inserts a character specified by its
-unicode.
-
-*** New command quail-show-key shows what key (or key sequence) to type
-in the current input method to input a character at point.
-
-*** Limited support for character `unification' has been added.
-Emacs now knows how to translate between different representations of
-the same characters in various Emacs charsets according to standard
-Unicode mappings. This applies mainly to characters in the ISO 8859
-sets plus some other 8-bit sets, but can be extended. For instance,
-translation works amongst the Emacs ...-iso8859-... charsets and the
-mule-unicode-... ones.
-
-By default this translation happens automatically on encoding.
-Self-inserting characters are translated to make the input conformant
-with the encoding of the buffer in which it's being used, where
-possible.
-
-You can force a more complete unification with the user option
-unify-8859-on-decoding-mode. That maps all the Latin-N character sets
-into Unicode characters (from the latin-iso8859-1 and
-mule-unicode-0100-24ff charsets) on decoding. Note that this mode
-will often effectively clobber data with an iso-2022 encoding.
-
-*** New language environments (set up automatically according to the
-locale): Belarusian, Bulgarian, Chinese-EUC-TW, Croatian, Esperanto,
-French, Georgian, Italian, Latin-7, Latvian, Lithuanian, Malayalam,
-Russian, Russian, Slovenian, Swedish, Tajik, Tamil, UTF-8,Ukrainian,
-Welsh,Latin-6, Windows-1255.
-
-*** New input methods: latin-alt-postfix, latin-postfix, latin-prefix,
-belarusian, bulgarian-bds, bulgarian-phonetic, chinese-sisheng (for
-Chinese Pinyin characters), croatian, dutch, georgian, latvian-keyboard,
-lithuanian-numeric, lithuanian-keyboard, malayalam-inscript, rfc1345,
-russian-computer, sgml, slovenian, tamil-inscript, ukrainian-computer,
-ucs, vietnamese-telex, welsh.
-
-*** There is support for decoding Greek and Cyrillic characters into
-either Unicode (the mule-unicode charsets) or the iso-8859 charsets,
-when possible. The latter are more space-efficient.
- This is controlled by user option utf-fragment-on-decoding.
-
-*** Improved Thai support. A new minor mode `thai-word-mode' (which is
-automatically activated if you select Thai as a language
-environment) changes key bindings of most word-oriented commands to
-versions which recognize Thai words. Affected commands are
- M-f (forward-word)
- M-b (backward-word)
- M-d (kill-word)
- M-DEL (backward-kill-word)
- M-t (transpose-words)
- M-q (fill-paragraph)
-
-*** Indian support has been updated.
-The in-is13194 coding system is now Unicode-based. CDAC fonts are
-assumed. There is a framework for supporting various Indian scripts,
-but currently only Devanagari, Malayalam and Tamil are supported.
-
-*** The utf-8/16 coding systems have been enhanced.
-By default, untranslatable utf-8 sequences are simply composed into
-single quasi-characters. User option `utf-translate-cjk-mode' (it is
-turned on by default) arranges to translate many utf-8 CJK character
-sequences into real Emacs characters in a similar way to the Mule-UCS
-system. As this loads a fairly big data on demand, people who are not
-interested in CJK characters may want to customize it to nil.
-You can augment/amend the CJK translation via hash tables
-`ucs-mule-cjk-to-unicode' and `ucs-unicode-to-mule-cjk'. The utf-8
-coding system now also encodes characters from most of Emacs's
-one-dimensional internal charsets, specifically the ISO-8859 ones.
-The utf-16 coding system is affected similarly.
-
-*** A UTF-7 coding system is available in the library `utf-7'.
-
-*** A new coding system `euc-tw' has been added for traditional Chinese
-in CNS encoding; it accepts both Big 5 and CNS as input; on saving,
-Big 5 is then converted to CNS.
-
-*** Many new coding systems are available in the `code-pages' library.
-These include complete versions of most of those in codepage.el, based
-on Unicode mappings. `codepage-setup' is now obsolete and is used
-only in the MS-DOS port of Emacs. All coding systems defined in
-`code-pages' are auto-loaded.
-
-*** New variable `utf-translate-cjk-unicode-range' controls which
-Unicode characters to translate in `utf-translate-cjk-mode'.
-
-*** iso-10646-1 (`Unicode') fonts can be used to display any range of
-characters encodable by the utf-8 coding system. Just specify the
-fontset appropriately.
-
-** Customize changes:
-
-*** Custom themes are collections of customize options. Create a
-custom theme with M-x customize-create-theme. Use M-x load-theme to
-load and enable a theme, and M-x disable-theme to disable it. Use M-x
-enable-theme to enable a disabled theme.
-
-*** The commands M-x customize-face and M-x customize-face-other-window
-now look at the character after point. If a face or faces are
-specified for that character, the commands by default customize those
-faces.
-
-*** The face-customization widget has been reworked to be less confusing.
-In particular, when you enable a face attribute using the corresponding
-check-box, there's no longer a redundant `*' option in value selection
-for that attribute; the values you can choose are only those which make
-sense for the attribute. When an attribute is de-selected by unchecking
-its check-box, then the (now ignored, but still present temporarily in
-case you re-select the attribute) value is hidden.
-
-*** When you set or reset a variable's value in a Customize buffer,
-the previous value becomes the "backup value" of the variable.
-You can go back to that backup value by selecting "Use Backup Value"
-under the "[State]" button.
-
-** Dired mode:
-
-*** In Dired's ! command (dired-do-shell-command), `*' and `?' now
-control substitution of the file names only when they are surrounded
-by whitespace. This means you can now use them as shell wildcards
-too. If you want to use just plain `*' as a wildcard, type `*""'; the
-double quotes make no difference in the shell, but they prevent
-special treatment in `dired-do-shell-command'.
-
-*** The Dired command `dired-goto-file' is now bound to j, not M-g.
-This is to avoid hiding the global key binding of M-g.
-
-*** New faces dired-header, dired-mark, dired-marked, dired-flagged,
-dired-ignored, dired-directory, dired-symlink, dired-warning
-introduced for Dired mode instead of font-lock faces.
-
-*** New Dired command `dired-compare-directories' marks files
-with different file attributes in two dired buffers.
-
-*** New Dired command `dired-do-touch' (bound to T) changes timestamps
-of marked files with the value entered in the minibuffer.
-
-*** In Dired, the w command now stores the current line's file name
-into the kill ring. With a zero prefix arg, it stores the absolute file name.
-
-*** In Dired-x, Omitting files is now a minor mode, dired-omit-mode.
-
-The mode toggling command is bound to M-o. A new command
-dired-mark-omitted, bound to * O, marks omitted files. The variable
-dired-omit-files-p is obsoleted, use the mode toggling function
-instead.
-
-*** The variables dired-free-space-program and dired-free-space-args
-have been renamed to directory-free-space-program and
-directory-free-space-args, and they now apply whenever Emacs puts a
-directory listing into a buffer.
-
-** Comint changes:
-
-*** The new INSIDE_EMACS environment variable is set to "t" in subshells
-running inside Emacs. This supersedes the EMACS environment variable,
-which will be removed in a future Emacs release. Programs that need
-to know whether they are started inside Emacs should check INSIDE_EMACS
-instead of EMACS.
-
-*** The comint prompt can now be made read-only, using the new user
-option `comint-prompt-read-only'. This is not enabled by default,
-except in IELM buffers. The read-only status of IELM prompts can be
-controlled with the new user option `ielm-prompt-read-only', which
-overrides `comint-prompt-read-only'.
-
-The new commands `comint-kill-whole-line' and `comint-kill-region'
-support editing comint buffers with read-only prompts.
-
-`comint-kill-whole-line' is like `kill-whole-line', but ignores both
-read-only and field properties. Hence, it always kill entire
-lines, including any prompts.
-
-`comint-kill-region' is like `kill-region', except that it ignores
-read-only properties, if it is safe to do so. This means that if any
-part of a prompt is deleted, then the entire prompt must be deleted
-and that all prompts must stay at the beginning of a line. If this is
-not the case, then `comint-kill-region' behaves just like
-`kill-region' if read-only properties are involved: it copies the text
-to the kill-ring, but does not delete it.
-
-*** The new command `comint-insert-previous-argument' in comint-derived
-modes (shell-mode, etc.) inserts arguments from previous command lines,
-like bash's `ESC .' binding. It is bound by default to `C-c .', but
-otherwise behaves quite similarly to the bash version.
-
-*** `comint-use-prompt-regexp-instead-of-fields' has been renamed
-`comint-use-prompt-regexp'. The old name has been kept as an alias,
-but declared obsolete.
-
-** M-x Compile changes:
-
-*** M-x compile has become more robust and reliable
-
-Quite a few more kinds of messages are recognized. Messages that are
-recognized as warnings or informational come in orange or green, instead of
-red. Informational messages are by default skipped with `next-error'
-(controlled by `compilation-skip-threshold').
-
-Location data is collected on the fly as the *compilation* buffer changes.
-This means you could modify messages to make them point to different files.
-This also means you can not go to locations of messages you may have deleted.
-
-The variable `compilation-error-regexp-alist' has now become customizable. If
-you had added your own regexps to this, you'll probably need to include a
-leading `^', otherwise they'll match anywhere on a line. There is now also a
-`compilation-mode-font-lock-keywords' and it nicely handles all the checks
-that configure outputs and -o options so you see at a glance where you are.
-
-The new file etc/compilation.txt gives examples of each type of message.
-
-*** New user option `compilation-environment'.
-This option allows you to specify environment variables for inferior
-compilation processes without affecting the environment that all
-subprocesses inherit.
-
-*** New user option `compilation-disable-input'.
-If this is non-nil, send end-of-file as compilation process input.
-
-*** New options `next-error-highlight' and `next-error-highlight-no-select'
-specify the method of highlighting of the corresponding source line
-in new face `next-error'.
-
-*** A new minor mode `next-error-follow-minor-mode' can be used in
-compilation-mode, grep-mode, occur-mode, and diff-mode (i.e. all the
-modes that can use `next-error'). In this mode, cursor motion in the
-buffer causes automatic display in another window of the corresponding
-matches, compilation errors, etc. This minor mode can be toggled with
-C-c C-f.
-
-*** When the left fringe is displayed, an arrow points to current message in
-the compilation buffer.
-
-*** The new variable `compilation-context-lines' controls lines of leading
-context before the current message. If nil and the left fringe is displayed,
-it doesn't scroll the compilation output window. If there is no left fringe,
-no arrow is displayed and a value of nil means display the message at the top
-of the window.
-
-** Occur mode changes:
-
-*** The new command `multi-occur' is just like `occur', except it can
-search multiple buffers. There is also a new command
-`multi-occur-in-matching-buffers' which allows you to specify the
-buffers to search by their filenames or buffer names. Internally,
-Occur mode has been rewritten, and now uses font-lock, among other
-changes.
-
-*** You can now use next-error (C-x `) and previous-error to advance to
-the next/previous matching line found by M-x occur.
-
-*** In the *Occur* buffer, `o' switches to it in another window, and
-C-o displays the current line's occurrence in another window without
-switching to it.
-
-** Grep changes:
-
-*** Grep has been decoupled from compilation mode setup.
-
-There's a new separate package grep.el, with its own submenu and
-customization group.
-
-*** `grep-find' is now also available under the name `find-grep' where
-people knowing `find-grep-dired' would probably expect it.
-
-*** New commands `lgrep' (local grep) and `rgrep' (recursive grep) are
-more user-friendly versions of `grep' and `grep-find', which prompt
-separately for the regular expression to match, the files to search,
-and the base directory for the search. Case sensitivity of the
-search is controlled by the current value of `case-fold-search'.
-
-These commands build the shell commands based on the new variables
-`grep-template' (lgrep) and `grep-find-template' (rgrep).
-
-The files to search can use aliases defined in `grep-files-aliases'.
-
-Subdirectories listed in `grep-find-ignored-directories' such as those
-typically used by various version control systems, like CVS and arch,
-are automatically skipped by `rgrep'.
-
-*** The grep commands provide highlighting support.
-
-Hits are fontified in green, and hits in binary files in orange. Grep buffers
-can be saved and automatically revisited.
-
-*** New option `grep-highlight-matches' highlights matches in *grep*
-buffer. It uses a special feature of some grep programs which accept
---color option to output markers around matches. When going to the next
-match with `next-error' the exact match is highlighted in the source
-buffer. Otherwise, if `grep-highlight-matches' is nil, the whole
-source line is highlighted.
-
-*** New key bindings in grep output window:
-SPC and DEL scrolls window up and down. C-n and C-p moves to next and
-previous match in the grep window. RET jumps to the source line of
-the current match. `n' and `p' shows next and previous match in
-other window, but does not switch buffer. `{' and `}' jumps to the
-previous or next file in the grep output. TAB also jumps to the next
-file.
-
-*** M-x grep now tries to avoid appending `/dev/null' to the command line
-by using GNU grep `-H' option instead. M-x grep automatically
-detects whether this is possible or not the first time it is invoked.
-When `-H' is used, the grep command line supplied by the user is passed
-unchanged to the system to execute, which allows more complicated
-command lines to be used than was possible before.
-
-*** The new variables `grep-window-height' and `grep-scroll-output' override
-the corresponding compilation mode settings, for grep commands only.
-
-** Cursor display changes:
-
-*** Emacs can produce an underscore-like (horizontal bar) cursor.
-The underscore cursor is set by putting `(cursor-type . hbar)' in
-default-frame-alist. It supports variable heights, like the `bar'
-cursor does.
-
-*** The variable `cursor-in-non-selected-windows' can now be set to any
-of the recognized cursor types.
-
-*** Display of hollow cursors now obeys the buffer-local value (if any)
-of `cursor-in-non-selected-windows' in the buffer that the cursor
-appears in.
-
-*** On text terminals, the variable `visible-cursor' controls whether Emacs
-uses the "very visible" cursor (the default) or the normal cursor.
-
-*** The X resource cursorBlink can be used to turn off cursor blinking.
-
-*** On X, MS Windows, and Mac OS, the blinking cursor's "off" state is
-now controlled by the variable `blink-cursor-alist'.
-
-** X Windows Support:
-
-*** Emacs now supports drag and drop for X. Dropping a file on a window
-opens it, dropping text inserts the text. Dropping a file on a dired
-buffer copies or moves the file to that directory.
-
-*** Under X11, it is possible to swap Alt and Meta (and Super and Hyper).
-The new variables `x-alt-keysym', `x-hyper-keysym', `x-meta-keysym',
-and `x-super-keysym' can be used to choose which keysyms Emacs should
-use for the modifiers. For example, the following two lines swap
-Meta and Alt:
- (setq x-alt-keysym 'meta)
- (setq x-meta-keysym 'alt)
-
-*** The X resource useXIM can be used to turn off use of XIM, which can
-speed up Emacs with slow networking to the X server.
-
-If the configure option `--without-xim' was used to turn off use of
-XIM by default, the X resource useXIM can be used to turn it on.
-
-*** The new variable `x-select-request-type' controls how Emacs
-requests X selection. The default value is nil, which means that
-Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING,
-and use the more appropriately result.
-
-*** The scrollbar under LessTif or Motif has a smoother drag-scrolling.
-On the other hand, the size of the thumb does not represent the actual
-amount of text shown any more (only a crude approximation of it).
-
-** Xterm support:
-
-*** If you enable Xterm Mouse mode, Emacs will respond to mouse clicks
-on the mode line, header line and display margin, when run in an xterm.
-
-*** Improved key bindings support when running in an xterm.
-When Emacs is running in an xterm more key bindings are available.
-The following should work:
-{C,S,C-S,A}-{right,left,up,down,prior,next,delete,insert,F1-12}.
-These key bindings work on xterm from X.org 6.8 (and later versions),
-they might not work on some older versions of xterm, or on some
-proprietary versions.
-The various keys generated by xterm when the "modifyOtherKeys"
-resource is set are also supported.
-
-** Character terminal color support changes:
-
-*** The new command-line option --color=MODE lets you specify a standard
-mode for a tty color support. It is meant to be used on character
-terminals whose capabilities are not set correctly in the terminal
-database, or with terminal emulators which support colors, but don't
-set the TERM environment variable to a name of a color-capable
-terminal. "emacs --color" uses the same color commands as GNU `ls'
-when invoked with "ls --color", so if your terminal can support colors
-in "ls --color", it will support "emacs --color" as well. See the
-user manual for the possible values of the MODE parameter.
-
-*** Emacs now supports several character terminals which provide more
-than 8 colors. For example, for `xterm', 16-color, 88-color, and
-256-color modes are supported. Emacs automatically notes at startup
-the extended number of colors, and defines the appropriate entries for
-all of these colors.
-
-*** Emacs now uses the full range of available colors for the default
-faces when running on a color terminal, including 16-, 88-, and
-256-color xterms. This means that when you run "emacs -nw" on an
-88-color or 256-color xterm, you will see essentially the same face
-colors as on X.
-
-*** There's a new support for colors on `rxvt' terminal emulator.
-
-** ebnf2ps changes:
-
-*** New option `ebnf-arrow-extra-width' which specify extra width for arrow
-shape drawing.
-The extra width is used to avoid that the arrowhead and the terminal border
-overlap. It depends on `ebnf-arrow-shape' and `ebnf-line-width'.
-
-*** New option `ebnf-arrow-scale' which specify the arrow scale.
-Values lower than 1.0, shrink the arrow.
-Values greater than 1.0, expand the arrow.
-* New Modes and Packages in Emacs 22.1
-
-** CUA mode is now part of the Emacs distribution.
-
-The new cua package provides CUA-like keybindings using C-x for
-cut (kill), C-c for copy, C-v for paste (yank), and C-z for undo.
-With cua, the region can be set and extended using shifted movement
-keys (like pc-selection-mode) and typed text replaces the active
-region (like delete-selection-mode). Do not enable these modes with
-cua-mode. Customize the variable `cua-mode' to enable cua.
+* New Modes and Packages in Emacs 23.1
-The cua-selection-mode enables the CUA keybindings for the region but
-does not change the bindings for C-z/C-x/C-c/C-v. It can be used as a
-replacement for pc-selection-mode.
+** The package doc-view.el has been added. It supports viewing of PDF,
+PostScript and DVI documents inside an Emacs buffer by converting the
+document to a set of PNG images first. One can also search for a
+regular expression in the document. The commentary of the file explains
+its usage.
-In addition, cua provides unified rectangle support with visible
-rectangle highlighting: Use C-return to start a rectangle, extend it
-using the movement commands (or mouse-3), and cut or copy it using C-x
-or C-c (using C-w and M-w also works).
+** A new game called `bubbles' has been added.
-Use M-o and M-c to `open' or `close' the rectangle, use M-b or M-f, to
-fill it with blanks or another character, use M-u or M-l to upcase or
-downcase the rectangle, use M-i to increment the numbers in the
-rectangle, use M-n to fill the rectangle with a numeric sequence (such
-as 10 20 30...), use M-r to replace a regexp in the rectangle, and use
-M-' or M-/ to restrict command on the rectangle to a subset of the
-rows. See the commentary in cua-base.el for more rectangle commands.
+** minibuffer-indicate-depth-mode shows the minibuffer depth in the prompt.
-Cua also provides unified support for registers: Use a numeric
-prefix argument between 0 and 9, i.e. M-0 .. M-9, for C-x, C-c, and
-C-v to cut or copy into register 0-9, or paste from register 0-9.
+** Remember Mode (remember.el) is now included with Emacs. It is a
+mode for quickly jotting down things to remember. Included with
+remember.el is a backend that can save notes to a Diary file. Please
+consult the Remember Manual for usage details.
-The last text deleted (not killed) is automatically stored in
-register 0. This includes text deleted by typing text.
-
-Finally, cua provides a global mark which is set using S-C-space.
-When the global mark is active, any text which is cut or copied is
-automatically inserted at the global mark position. See the
-commentary in cua-base.el for more global mark related commands.
-
-The features of cua also works with the standard Emacs bindings for
-kill, copy, yank, and undo. If you want to use cua mode, but don't
-want the C-x, C-c, C-v, and C-z bindings, you can customize the
-`cua-enable-cua-keys' variable.
-
-Note: This version of cua mode is not backwards compatible with older
-versions of cua.el and cua-mode.el. To ensure proper operation, you
-must remove older versions of cua.el or cua-mode.el as well as the
-loading and customization of those packages from the .emacs file.
-
-** Tramp is now part of the distribution.
-
-This package is similar to Ange-FTP: it allows you to edit remote
-files. But whereas Ange-FTP uses FTP to access the remote host,
-Tramp uses a shell connection. The shell connection is always used
-for filename completion and directory listings and suchlike, but for
-the actual file transfer, you can choose between the so-called
-`inline' methods (which transfer the files through the shell
-connection using base64 or uu encoding) and the `out-of-band' methods
-(which invoke an external copying program such as `rcp' or `scp' or
-`rsync' to do the copying).
-
-Shell connections can be acquired via `rsh', `ssh', `telnet' and also
-`su' and `sudo'. Ange-FTP is still supported via the `ftp' method.
-
-If you want to disable Tramp you should set
-
- (setq tramp-default-method "ftp")
-
-Removing Tramp, and re-enabling Ange-FTP, can be achieved by M-x
-tramp-unload-tramp.
-
-** The image-dired.el package allows you to easily view, tag and in
-other ways manipulate image files and their thumbnails, using dired as
-the main interface. Image-Dired provides functionality to generate
-simple image galleries.
-
-** Image files are normally visited in Image mode, which lets you toggle
-between viewing the image and viewing the text using C-c C-c.
-
-** The new python.el package is used to edit Python and Jython programs.
-
-** The URL package (which had been part of W3) is now part of Emacs.
-
-** Calc is now part of the Emacs distribution.
-
-Calc is an advanced desk calculator and mathematical tool written in
-Emacs Lisp. The prefix for Calc has been changed to `C-x *' and Calc
-can be started with `C-x * *'. The Calc manual is separate from the
-Emacs manual; within Emacs, type "C-h i m calc RET" to read the
-manual. A reference card is available in `etc/calccard.tex' and
-`etc/calccard.ps'.
-
-** Org mode is now part of the Emacs distribution
-
-Org mode is a mode for keeping notes, maintaining ToDo lists, and
-doing project planning with a fast and effective plain-text system.
-It also contains a plain-text table editor with spreadsheet-like
-capabilities.
-
-The Org mode table editor can be integrated into any major mode by
-activating the minor mode, Orgtbl mode.
-
-The documentation for org-mode is in a separate manual; within Emacs,
-type "C-h i m org RET" to read that manual. A reference card is
-available in `etc/orgcard.tex' and `etc/orgcard.ps'.
-
-** ERC is now part of the Emacs distribution.
-
-ERC is a powerful, modular, and extensible IRC client for Emacs.
-
-To see what modules are available, type
-M-x customize-option erc-modules RET.
-
-To start an IRC session with ERC, type M-x erc, and follow the prompts
-for server, port, and nick.
-
-** Rcirc is now part of the Emacs distribution.
-
-Rcirc is an Internet relay chat (IRC) client. It supports
-simultaneous connections to multiple IRC servers. Each discussion
-takes place in its own buffer. For each connection you can join
-several channels (many-to-many) and participate in private
-(one-to-one) chats. Both channel and private chats are contained in
-separate buffers.
-
-To start an IRC session using the default parameters, type M-x irc.
-If you type C-u M-x irc, it prompts you for the server, nick, port and
-startup channel parameters before connecting.
-
-** The new package ibuffer provides a powerful, completely
-customizable replacement for buff-menu.el.
-
-** Newsticker is now part of the Emacs distribution.
-
-Newsticker asynchronously retrieves headlines (RSS) from a list of news
-sites, prepares these headlines for reading, and allows for loading the
-corresponding articles in a web browser. Its documentation is in a
-separate manual.
-
-** The wdired.el package allows you to use normal editing commands on Dired
-buffers to change filenames, permissions, etc...
-
-** Ido mode is now part of the Emacs distribution.
-
-The ido (interactively do) package is an extension of the iswitchb
-package to do interactive opening of files and directories in addition
-to interactive buffer switching. Ido is a superset of iswitchb (with
-a few exceptions), so don't enable both packages.
-
-** The new global minor mode `file-name-shadow-mode' modifies the way
-filenames being entered by the user in the minibuffer are displayed, so
-that it's clear when part of the entered filename will be ignored due to
-Emacs' filename parsing rules. The ignored portion can be made dim,
-invisible, or otherwise less visually noticeable. The display method can
-be displayed by customizing the variable `file-name-shadow-properties'.
-
-** Emacs' keyboard macro facilities have been enhanced by the new
-kmacro package.
-
-Keyboard macros are now defined and executed via the F3 and F4 keys:
-F3 starts a macro, F4 ends the macro, and pressing F4 again executes
-the last macro. While defining the macro, F3 inserts a counter value
-which automatically increments every time the macro is executed.
-
-There is now a keyboard macro ring which stores the most recently
-defined macros.
-
-The C-x C-k sequence is now a prefix for the kmacro keymap which
-defines bindings for moving through the keyboard macro ring,
-C-x C-k C-p and C-x C-k C-n, editing the last macro C-x C-k C-e,
-manipulating the macro counter and format via C-x C-k C-c,
-C-x C-k C-a, and C-x C-k C-f. See the commentary in kmacro.el
-for more commands.
-
-The original macro bindings C-x (, C-x ), and C-x e are still
-available, but they now interface to the keyboard macro ring too.
-
-The C-x e command now automatically terminates the current macro
-before calling it, if used while defining a macro.
-
-In addition, when ending or calling a macro with C-x e, the macro can
-be repeated immediately by typing just the `e'. You can customize
-this behavior via the variables kmacro-call-repeat-key and
-kmacro-call-repeat-with-arg.
-
-Keyboard macros can now be debugged and edited interactively.
-C-x C-k SPC steps through the last keyboard macro one key sequence
-at a time, prompting for the actions to take.
-
-** The new keypad setup package provides several common bindings for
-the numeric keypad which is available on most keyboards. The numeric
-keypad typically has the digits 0 to 9, a decimal point, keys marked
-+, -, /, and *, an Enter key, and a NumLock toggle key. The keypad
-package only controls the use of the digit and decimal keys.
-
-By customizing the variables `keypad-setup', `keypad-shifted-setup',
-`keypad-numlock-setup', and `keypad-numlock-shifted-setup', or by
-using the function `keypad-setup', you can rebind all digit keys and
-the decimal key of the keypad in one step for each of the four
-possible combinations of the Shift key state (not pressed/pressed) and
-the NumLock toggle state (off/on).
-
-The choices for the keypad keys in each of the above states are:
-`Plain numeric keypad' where the keys generates plain digits,
-`Numeric keypad with decimal key' where the character produced by the
-decimal key can be customized individually (for internationalization),
-`Numeric Prefix Arg' where the keypad keys produce numeric prefix args
-for Emacs editing commands, `Cursor keys' and `Shifted Cursor keys'
-where the keys work like (shifted) arrow keys, home/end, etc., and
-`Unspecified/User-defined' where the keypad keys (kp-0, kp-1, etc.)
-are left unspecified and can be bound individually through the global
-or local keymaps.
-
-** The printing package is now part of the Emacs distribution.
-
-If you enable the printing package by including (require 'printing) in
-the .emacs file, the normal Print item on the File menu is replaced
-with a Print sub-menu which allows you to preview output through
-ghostview, use ghostscript to print (if you don't have a PostScript
-printer) or send directly to printer a PostScript code generated by
-`ps-print' package. Use M-x pr-help for more information.
-
-** The new package longlines.el provides a minor mode for editing text
-files composed of long lines, based on the `use-hard-newlines'
-mechanism. The long lines are broken up by inserting soft newlines,
-which are automatically removed when saving the file to disk or
-copying into the kill ring, clipboard, etc. By default, Longlines
-mode inserts soft newlines automatically during editing, a behavior
-referred to as "soft word wrap" in other text editors. This is
-similar to Refill mode, but more reliable. To turn the word wrap
-feature off, set `longlines-auto-wrap' to nil.
-
-** SES mode (ses-mode) is a new major mode for creating and editing
-spreadsheet files. Besides the usual Emacs features (intuitive command
-letters, undo, cell formulas in Lisp, plaintext files, etc.) it also offers
-viral immunity and import/export of tab-separated values.
-
-** The new package table.el implements editable, WYSIWYG, embedded
-`text tables' in Emacs buffers. It simulates the effect of putting
-these tables in a special major mode. The package emulates WYSIWYG
-table editing available in modern word processors. The package also
-can generate a table source in typesetting and markup languages such
-as latex and html from the visually laid out text table.
-
-** Filesets are collections of files. You can define a fileset in
-various ways, such as based on a directory tree or based on
-program files that include other program files.
-
-Once you have defined a fileset, you can perform various operations on
-all the files in it, such as visiting them or searching and replacing
-in them.
-
-** The minor mode Reveal mode makes text visible on the fly as you
-move your cursor into hidden regions of the buffer.
-It should work with any package that uses overlays to hide parts
-of a buffer, such as outline-minor-mode, hs-minor-mode, hide-ifdef-mode, ...
-
-There is also Global Reveal mode which affects all buffers.
-
-** New minor mode, Visible mode, toggles invisibility in the current buffer.
-When enabled, it makes all invisible text visible. When disabled, it
-restores the previous value of `buffer-invisibility-spec'.
-
-** The new package flymake.el does on-the-fly syntax checking of program
-source files. See the Flymake's Info manual for more details.
-
-** savehist saves minibuffer histories between sessions.
-To use this feature, turn on savehist-mode in your `.emacs' file.
-
-** The ruler-mode.el library provides a minor mode for displaying an
-"active" ruler in the header line. You can use the mouse to visually
-change the `fill-column', `window-margins' and `tab-stop-list'
-settings.
-
-** The file t-mouse.el is now part of Emacs and provides access to mouse
-events from the console. It still requires gpm to work but has been updated
-for Emacs 22. In particular, the mode-line is now position sensitive.
-
-** The new package scroll-lock.el provides the Scroll Lock minor mode
-for pager-like scrolling. Keys which normally move point by line or
-paragraph will scroll the buffer by the respective amount of lines
-instead and point will be kept vertically fixed relative to window
-boundaries during scrolling.
-
-** The new global minor mode `size-indication-mode' (off by default)
-shows the size of accessible part of the buffer on the mode line.
-
-** The new package conf-mode.el handles thousands of configuration files, with
-varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value,
-var : value, var value or keyword var value) and sections ([section] or
-section { }). Many files under /etc/, or with suffixes like .cf through
-.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are
-recognized.
-
-** GDB-Script-mode is used for files like .gdbinit.
-
-** The new package dns-mode.el adds syntax highlighting of DNS master files.
-It is a modern replacement for zone-mode.el, which is now obsolete.
-
-** `cfengine-mode' is a major mode for editing GNU Cfengine
-configuration files.
-
-** The TCL package tcl-mode.el was replaced by tcl.el.
-This was actually done in Emacs-21.1, and was not documented.
-* Changes in Specialized Modes and Packages in Emacs 22.1:
-
-** Changes in Dired
-
-*** Bindings for Image-Dired added.
-Several new keybindings, all starting with the C-t prefix, have been
-added to Dired. They are all bound to commands in Image-Dired. As a
-starting point, mark some image files in a dired buffer and do C-t d
-to display thumbnails of them in a separate buffer.
-
-** Info mode changes
-
-*** Images in Info pages are supported.
-
-Info pages show embedded images, in Emacs frames with image support.
-Info documentation that includes images, processed with makeinfo
-version 4.7 or newer, compiles to Info pages with embedded images.
-
-*** `Info-index' offers completion.
-
-*** http and ftp links in Info are now operational: they look like cross
-references and following them calls `browse-url'.
-
-*** isearch in Info uses Info-search and searches through multiple nodes.
-
-Before leaving the initial Info node isearch fails once with the error
-message [initial node], and with subsequent C-s/C-r continues through
-other nodes. When isearch fails for the rest of the manual, it wraps
-around the whole manual to the top/final node. The user option
-`Info-isearch-search' controls whether to use Info-search for isearch,
-or the default isearch search function that wraps around the current
-Info node.
-
-*** New search commands: `Info-search-case-sensitively' (bound to S),
-`Info-search-backward', and `Info-search-next' which repeats the last
-search without prompting for a new search string.
-
-*** New command `info-apropos' searches the indices of the known
-Info files on your system for a string, and builds a menu of the
-possible matches.
-
-*** New command `Info-history-forward' (bound to r and new toolbar icon)
-moves forward in history to the node you returned from after using
-`Info-history-back' (renamed from `Info-last').
-
-*** New command `Info-history' (bound to L) displays a menu of visited nodes.
-
-*** New command `Info-toc' (bound to T) creates a node with table of contents
-from the tree structure of menus of the current Info file.
-
-*** New command `Info-copy-current-node-name' (bound to w) copies
-the current Info node name into the kill ring. With a zero prefix
-arg, puts the node name inside the `info' function call.
-
-*** New face `info-xref-visited' distinguishes visited nodes from unvisited
-and a new option `Info-fontify-visited-nodes' to control this.
-
-*** A numeric prefix argument of `info' selects an Info buffer
-with the number appended to the `*info*' buffer name (e.g. "*info*<2>").
-
-*** Info now hides node names in menus and cross references by default.
-
-If you prefer the old behavior, you can set the new user option
-`Info-hide-note-references' to nil.
-
-*** The default value for `Info-scroll-prefer-subnodes' is now nil.
-
-** Emacs server changes
-
-*** You can have several Emacs servers on the same machine.
-
- % emacs --eval '(setq server-name "foo")' -f server-start &
- % emacs --eval '(setq server-name "bar")' -f server-start &
- % emacsclient -s foo file1
- % emacsclient -s bar file2
-
-*** The `emacsclient' command understands the options `--eval' and
-`--display' which tell Emacs respectively to evaluate the given Lisp
-expression and to use the given display when visiting files.
-
-*** User option `server-mode' can be used to start a server process.
-
-** Locate changes
-
-*** By default, reverting the *Locate* buffer now just runs the last
-`locate' command back over again without offering to update the locate
-database (which normally only works if you have root privileges). If
-you prefer the old behavior, set the new customizable option
-`locate-update-when-revert' to t.
-
-** Desktop package
-
-*** Desktop saving is now a minor mode, `desktop-save-mode'.
-
-*** The variable `desktop-enable' is obsolete.
-
-Customize `desktop-save-mode' to enable desktop saving.
-
-*** Buffers are saved in the desktop file in the same order as that in the
-buffer list.
-
-*** The desktop package can be customized to restore only some buffers
-immediately, remaining buffers are restored lazily (when Emacs is
-idle).
-
-*** New command line option --no-desktop
-
-*** New commands:
- - desktop-revert reverts to the last loaded desktop.
- - desktop-change-dir kills current desktop and loads a new.
- - desktop-save-in-desktop-dir saves desktop in the directory from which
- it was loaded.
- - desktop-lazy-complete runs the desktop load to completion.
- - desktop-lazy-abort aborts lazy loading of the desktop.
-
-*** New customizable variables:
- - desktop-save. Determines whether the desktop should be saved when it is
- killed.
- - desktop-file-name-format. Format in which desktop file names should be saved.
- - desktop-path. List of directories in which to lookup the desktop file.
- - desktop-locals-to-save. List of local variables to save.
- - desktop-globals-to-clear. List of global variables that `desktop-clear' will clear.
- - desktop-clear-preserve-buffers-regexp. Regexp identifying buffers that `desktop-clear'
- should not delete.
- - desktop-restore-eager. Number of buffers to restore immediately. Remaining buffers are
- restored lazily (when Emacs is idle).
- - desktop-lazy-verbose. Verbose reporting of lazily created buffers.
- - desktop-lazy-idle-delay. Idle delay before starting to create buffers.
-
-*** New hooks:
- - desktop-after-read-hook run after a desktop is loaded.
- - desktop-no-desktop-file-hook run when no desktop file is found.
-
-** Recentf changes
-
-The recent file list is now automatically cleaned up when recentf mode is
-enabled. The new option `recentf-auto-cleanup' controls when to do
-automatic cleanup.
-
-The ten most recent files can be quickly opened by using the shortcut
-keys 1 to 9, and 0, when the recent list is displayed in a buffer via
-the `recentf-open-files', or `recentf-open-more-files' commands.
-
-The `recentf-keep' option replaces `recentf-keep-non-readable-files-p'
-and provides a more general mechanism to customize which file names to
-keep in the recent list.
-
-With the more advanced option `recentf-filename-handlers', you can
-specify functions that successively transform recent file names. For
-example, if set to `file-truename' plus `abbreviate-file-name', the
-same file will not be in the recent list with different symbolic
-links, and the file name will be abbreviated.
-
-To follow naming convention, `recentf-menu-append-commands-flag'
-replaces the misnamed option `recentf-menu-append-commands-p'. The
-old name remains available as alias, but has been marked obsolete.
-
-** Auto-Revert changes
-
-*** You can now use Auto Revert mode to `tail' a file.
-
-If point is at the end of a file buffer before reverting, Auto Revert
-mode keeps it at the end after reverting. Similarly if point is
-displayed at the end of a file buffer in any window, it stays at the
-end of the buffer in that window. This allows you to "tail" a file:
-just put point at the end of the buffer and it stays there. This rule
-applies to file buffers. For non-file buffers, the behavior can be
-mode dependent.
-
-If you are sure that the file will only change by growing at the end,
-then you can tail the file more efficiently by using the new minor
-mode Auto Revert Tail mode. The function `auto-revert-tail-mode'
-toggles this mode.
-
-*** Auto Revert mode is now more careful to avoid excessive reverts and
-other potential problems when deciding which non-file buffers to
-revert. This matters especially if Global Auto Revert mode is enabled
-and `global-auto-revert-non-file-buffers' is non-nil. Auto Revert
-mode only reverts a non-file buffer if the buffer has a non-nil
-`revert-buffer-function' and a non-nil `buffer-stale-function', which
-decides whether the buffer should be reverted. Currently, this means
-that auto reverting works for Dired buffers (although this may not
-work properly on all operating systems) and for the Buffer Menu.
-
-*** If the new user option `auto-revert-check-vc-info' is non-nil, Auto
-Revert mode reliably updates version control info (such as the version
-control number in the mode line), in all version controlled buffers in
-which it is active. If the option is nil, the default, then this info
-only gets updated whenever the buffer gets reverted.
-
-** Changes in Shell Mode
-
-*** Shell output normally scrolls so that the input line is at the
-bottom of the window -- thus showing the maximum possible text. (This
-is similar to the way sequential output to a terminal works.)
-
-** Changes in Hi Lock
-
-*** hi-lock-mode now only affects a single buffer, and a new function
-`global-hi-lock-mode' enables Hi Lock in all buffers. By default, if
-hi-lock-mode is used in what appears to be the initialization file, a
-warning message suggests to use global-hi-lock-mode instead. However,
-if the new variable `hi-lock-archaic-interface-deduce' is non-nil,
-using hi-lock-mode in an initialization file will turn on Hi Lock in all
-buffers and no warning will be issued (for compatibility with the
-behavior in older versions of Emacs).
-
-** Changes in Allout
-
-*** Topic cryptography added, enabling easy gpg topic encryption and
-decryption. Per-topic basis enables interspersing encrypted-text and
-clear-text within a single file to your heart's content, using symmetric
-and/or public key modes. Time-limited key caching, user-provided
-symmetric key hinting and consistency verification, auto-encryption of
-pending topics on save, and more, make it easy to use encryption in
-powerful ways. Encryption behavior customization is collected in the
-allout-encryption customization group.
-
-*** Default command prefix was changed to "\C-c " (control-c space), to
-avoid intruding on user's keybinding space. Customize the
-`allout-command-prefix' variable to your preference.
-
-*** Some previously rough topic-header format edge cases are reconciled.
-Level 1 topics use the mode's comment format, and lines starting with the
-asterisk - for instance, the comment close of some languages (eg, c's "*/"
-or mathematica's "*)") - at the beginning of line are no longer are
-interpreted as level 1 topics in those modes.
-
-*** Many or most commonly occurring "accidental" topics are disqualified.
-Text in item bodies that looks like a low-depth topic is no longer mistaken
-for one unless its first offspring (or that of its next sibling with
-offspring) is only one level deeper.
-
-For example, pasting some text with a bunch of leading asterisks into a
-topic that's followed by a level 3 or deeper topic will not cause the
-pasted text to be mistaken for outline structure.
-
-The same constraint is applied to any level 2 or 3 topics.
-
-This settles an old issue where typed or pasted text needed to be carefully
-reviewed, and sometimes doctored, to avoid accidentally disrupting the
-outline structure. Now that should be generally unnecessary, as the most
-prone-to-occur accidents are disqualified.
-
-*** Allout now refuses to create "containment discontinuities", where a
-topic is shifted deeper than the offspring-depth of its container. On the
-other hand, allout now operates gracefully with existing containment
-discontinuities, revealing excessively contained topics rather than either
-leaving them hidden or raising an error.
-
-*** Navigation within an item is easier. Repeated beginning-of-line and
-end-of-line key commands (usually, ^A and ^E) cycle through the
-beginning/end-of-line and then beginning/end of topic, etc. See new
-customization vars `allout-beginning-of-line-cycles' and
-`allout-end-of-line-cycles'.
-
-*** New or revised allout-mode activity hooks enable creation of
-cooperative enhancements to allout mode without changes to the mode,
-itself.
-
-See `allout-exposure-change-hook', `allout-structure-added-hook',
-`allout-structure-deleted-hook', and `allout-structure-shifted-hook'.
-
-`allout-exposure-change-hook' replaces the existing
-`allout-view-change-hook', which is being deprecated. Both are still
-invoked, but `allout-view-change-hook' will eventually be ignored.
-`allout-exposure-change-hook' is called with explicit arguments detailing
-the specifics of each change (as are the other new hooks), making it easier
-to use than the old version.
-
-There is a new mode deactivation hook, `allout-mode-deactivate-hook', for
-coordinating with deactivation of allout-mode. Both that and the mode
-activation hook, `allout-mode-hook' are now run after the `allout-mode'
-variable is changed, rather than before.
-
-*** Allout now uses text overlay's `invisible' property for concealed text,
-instead of selective-display. This simplifies the code, in particular
-avoiding the need for kludges for isearch dynamic-display, discretionary
-handling of edits of concealed text, undo concerns, etc.
-
-*** There are many other fixes and refinements, including:
-
- - repaired inhibition of inadvertent edits to concealed text, without
- inhibiting undo; we now reveal undo changes within concealed text.
- - auto-fill-mode is now left inactive when allout-mode starts, if it
- already was inactive. also, `allout-inhibit-auto-fill' custom
- configuration variable makes it easy to disable auto fill in allout
- outlines in general or on a per-buffer basis.
- - allout now tolerates fielded text in outlines without disruption.
- - hot-spot navigation now is modularized with a new function,
- `allout-hotspot-key-handler', enabling easier use and enhancement of
- the functionality in allout addons.
- - repaired retention of topic body hanging indent upon topic depth shifts
- - bulleting variation is simpler and more accommodating, both in the
- default behavior and in ability to vary when creating new topics
- - mode deactivation now does cleans up effectively, more properly
- restoring affected variables and hooks to former state, removing
- overlays, etc. see `allout-add-resumptions' and
- `allout-do-resumptions', which replace the old `allout-resumptions'.
- - included a few unit-tests for interior functionality. developers can
- have them automatically run at the end of module load by customizing
- the option `allout-run-unit-tests-on-load'.
- - many, many other, more minor tweaks, fixes, and refinements.
- - version number incremented to 2.2
-
-** Hideshow mode changes
-
-*** New variable `hs-set-up-overlay' allows customization of the overlay
-used to effect hiding for hideshow minor mode. Integration with isearch
-handles the overlay property `display' specially, preserving it during
-temporary overlay showing in the course of an isearch operation.
-
-*** New variable `hs-allow-nesting' non-nil means that hiding a block does
-not discard the hidden state of any "internal" blocks; when the parent
-block is later shown, the internal blocks remain hidden. Default is nil.
-
-** FFAP changes
-
-*** New ffap commands and keybindings:
-
-C-x C-r (`ffap-read-only'),
-C-x C-v (`ffap-alternate-file'), C-x C-d (`ffap-list-directory'),
-C-x 4 r (`ffap-read-only-other-window'), C-x 4 d (`ffap-dired-other-window'),
-C-x 5 r (`ffap-read-only-other-frame'), C-x 5 d (`ffap-dired-other-frame').
-
-*** FFAP accepts wildcards in a file name by default.
-
-C-x C-f passes the file name to `find-file' with non-nil WILDCARDS
-argument, which visits multiple files, and C-x d passes it to `dired'.
-
-** Changes in Skeleton
-
-*** In skeleton.el, `-' marks the `skeleton-point' without interregion interaction.
-
-`@' has reverted to only setting `skeleton-positions' and no longer
-sets `skeleton-point'. Skeletons which used @ to mark
-`skeleton-point' independent of `_' should now use `-' instead. The
-updated `skeleton-insert' docstring explains these new features along
-with other details of skeleton construction.
+* Changes in Specialized Modes and Packages in Emacs 23.1
-*** The variables `skeleton-transformation', `skeleton-filter', and
-`skeleton-pair-filter' have been renamed to
-`skeleton-transformation-function', `skeleton-filter-function', and
-`skeleton-pair-filter-function'. The old names are still available
-as aliases.
+** abbrev was rewritten in Elisp and extended with more flexibility.
+*** New functions: abbrev-get, abbrev-put, abbrev-table-get, abbrev-table-put,
+ abbrev-table-p.
+*** Special hook `abbrev-expand-functions' obsoletes `pre-abbrev-expand-hook'.
+*** `make-abbrev-table', `define-abbrev', `define-abbrev-table' all take
+ extra arguments for arbitrary properties.
+*** New variable `abbrev-minor-mode-table-alist'.
+*** `local-abbrev-table' can hold a list of abbrev-tables.
+*** Abbrevs have now the following special properties:
+ `:count', `:system', `:enable-function', `:case-fixed'.
+*** Abbrev-tables have now the following special properties:
+ `:parents', `:case-fixed', `:enable-function', `:regexp',
+ `abbrev-table-modiff'.
-** HTML/SGML changes
+** Help mode.
+*** New macro `with-help-window' should set up help windows better
+than `with-output-to-temp-buffer' with `print-help-return-message'.
+*** New option `help-window-select' permits to customize whether help
+window shall be automatically selected when invoking help.
+*** New variable `help-window-point-marker' permits to specify new
+position of point in help window (for example in `view-lossage').
-*** Emacs now tries to set up buffer coding systems for HTML/XML files
-automatically.
+** view-remove-frame-by-deleting is now by default t
+since users found iconification of view-mode frames distracting.
-*** SGML mode has indentation and supports XML syntax.
-The new variable `sgml-xml-mode' tells SGML mode to use XML syntax.
-When this option is enabled, SGML tags are inserted in XML style,
-i.e., there is always a closing tag.
-By default, its setting is inferred on a buffer-by-buffer basis
-from the file name or buffer contents.
+** isearch can now search through multiple ChangeLog files.
+When running isearch in a ChangeLog file, if the search fails,
+then another C-s tries searching the previous ChangeLog,
+if there is one (e.g. go from ChangeLog to ChangeLog.12).
-*** The variable `sgml-transformation' has been renamed to
-`sgml-transformation-function'. The old name is still available as
-alias.
+This is enabled if isearch-buffers-multi is non-nil.
-*** `xml-mode' is now an alias for `sgml-mode', which has XML support.
+** smerge-refine highlights word-level details of changes in conflict.
+It's used automatically as you move through conflicts, see smerge-auto-refine.
-** TeX modes
+** diff-refine-hunk highlights word-level details of changes in a diff hunk.
+It's used automatically as you move through hunks, see diff-auto-refine.
-*** New major mode Doctex mode, for *.dtx files.
+** archive-mode has basic support to browse Rar archives.
-*** C-c C-c prompts for a command to run, and tries to offer a good default.
+** talk.el has been extended for multiple tty support.
-*** The user option `tex-start-options-string' has been replaced
-by two new user options: `tex-start-options', which should hold
-command-line options to feed to TeX, and `tex-start-commands' which should hold
-TeX commands to use at startup.
+** compilation-auto-jump-to-first-error tells `compile' to jump to
+the first error encountered during compilations.
-*** verbatim environments are now highlighted in courier by font-lock
-and super/sub-scripts are made into super/sub-scripts.
+** In the `copyright' package, you can specify your copyright holders' names.
+Only copyright lines with holders matching copyright-names-regexp will be
+considered for update.
-** RefTeX mode changes
+** eldoc highlights the function argument under point
+with the face `eldoc-highlight-function-argument'.
-*** Changes to RefTeX's table of contents
-
-The new command keys "<" and ">" in the TOC buffer promote/demote the
-section at point or all sections in the current region, with full
-support for multifile documents.
-
-The new command `reftex-toc-recenter' (`C-c -') shows the current
-section in the TOC buffer without selecting the TOC window.
-Recentering can happen automatically in idle time when the option
-`reftex-auto-recenter-toc' is turned on. The highlight in the TOC
-buffer stays when the focus moves to a different window. A dedicated
-frame can show the TOC with the current section always automatically
-highlighted. The frame is created and deleted from the toc buffer
-with the `d' key.
-
-The toc window can be split off horizontally instead of vertically.
-See new option `reftex-toc-split-windows-horizontally'.
-
-Labels can be renamed globally from the table of contents using the
-key `M-%'.
-
-The new command `reftex-goto-label' jumps directly to a label
-location.
-
-*** Changes related to citations and BibTeX database files
-
-Commands that insert a citation now prompt for optional arguments when
-called with a prefix argument. Related new options are
-`reftex-cite-prompt-optional-args' and `reftex-cite-cleanup-optional-args'.
-
-The new command `reftex-create-bibtex-file' creates a BibTeX database
-with all entries referenced in the current document. The keys "e" and
-"E" allow to produce a BibTeX database file from entries marked in a
-citation selection buffer.
-
-The command `reftex-citation' uses the word in the buffer before the
-cursor as a default search string.
-
-The support for chapterbib has been improved. Different chapters can
-now use BibTeX or an explicit `thebibliography' environment.
-
-The macros which specify the bibliography file (like \bibliography)
-can be configured with the new option `reftex-bibliography-commands'.
-
-Support for jurabib has been added.
-
-*** Global index matched may be verified with a user function.
-
-During global indexing, a user function can verify an index match.
-See new option `reftex-index-verify-function'.
-
-*** Parsing documents with many labels can be sped up.
-
-Operating in a document with thousands of labels can be sped up
-considerably by allowing RefTeX to derive the type of a label directly
-from the label prefix like `eq:' or `fig:'. The option
-`reftex-trust-label-prefix' needs to be configured in order to enable
-this feature. While the speed-up is significant, this may reduce the
-quality of the context offered by RefTeX to describe a label.
-
-*** Miscellaneous changes
-
-The macros which input a file in LaTeX (like \input, \include) can be
-configured in the new option `reftex-include-file-commands'.
-
-RefTeX supports global incremental search.
-
-** BibTeX mode
-
-*** The new command `bibtex-url' browses a URL for the BibTeX entry at
-point (bound to C-c C-l and mouse-2, RET on clickable fields).
-
-*** The new command `bibtex-entry-update' (bound to C-c C-u) updates
-an existing BibTeX entry by inserting fields that may occur but are not
-present.
-
-*** New `bibtex-entry-format' option `required-fields', enabled by default.
-
-*** `bibtex-maintain-sorted-entries' can take values `plain',
-`crossref', and `entry-class' which control the sorting scheme used
-for BibTeX entries. `bibtex-sort-entry-class' controls the sorting
-scheme `entry-class'. TAB completion for reference keys and
-automatic detection of duplicates does not require anymore that
-`bibtex-maintain-sorted-entries' is non-nil.
-
-*** The new command `bibtex-complete' completes word fragment before
-point according to context (bound to M-tab).
-
-*** In BibTeX mode the command `fill-paragraph' (M-q) fills
-individual fields of a BibTeX entry.
-
-*** The new variable `bibtex-autofill-types' contains a list of entry
-types for which fields are filled automatically (if possible).
-
-*** The new commands `bibtex-find-entry' and `bibtex-find-crossref'
-locate entries and crossref'd entries (bound to C-c C-s and C-c C-x).
-Crossref fields are clickable (bound to mouse-2, RET).
-
-*** The new variables `bibtex-files' and `bibtex-file-path' define a set
-of BibTeX files that are searched for entry keys.
-
-*** The new command `bibtex-validate-globally' checks for duplicate keys
-in multiple BibTeX files.
-
-*** If the new variable `bibtex-autoadd-commas' is non-nil,
-automatically add missing commas at end of BibTeX fields.
-
-*** The new command `bibtex-copy-summary-as-kill' pushes summary
-of BibTeX entry to kill ring (bound to C-c C-t).
-
-*** If the new variable `bibtex-parse-keys-fast' is non-nil,
-use fast but simplified algorithm for parsing BibTeX keys.
-
-*** The new variables bibtex-expand-strings and
-bibtex-autokey-expand-strings control the expansion of strings when
-extracting the content of a BibTeX field.
-
-*** The variables `bibtex-autokey-name-case-convert' and
-`bibtex-autokey-titleword-case-convert' have been renamed to
-`bibtex-autokey-name-case-convert-function' and
-`bibtex-autokey-titleword-case-convert-function'. The old names are
-still available as aliases.
-
-** GUD changes
-
-*** The new package gdb-ui.el provides an enhanced graphical interface to
-GDB. You can interact with GDB through the GUD buffer in the usual way, but
-there are also further buffers which control the execution and describe the
-state of your program. It can separate the input/output of your program from
-that of GDB and watches expressions in the speedbar. It also uses features of
-Emacs 21/22 such as the toolbar, and bitmaps in the fringe to indicate
-breakpoints.
-
-To use this package just type M-x gdb. See the Emacs manual if you want the
-old behaviour.
-
-*** GUD mode has its own tool bar for controlling execution of the inferior
-and other common debugger commands.
-
-*** In GUD mode, when talking to GDB, C-x C-a C-j "jumps" the program
-counter to the specified source line (the one where point is).
-
-*** The variable tooltip-gud-tips-p has been removed. GUD tooltips can now be
-toggled independently of normal tooltips with the minor mode
-`gud-tooltip-mode'.
-
-*** In graphical mode, with a C program, GUD Tooltips have been extended to
-display the #define directive associated with an identifier when program is
-not executing.
-
-*** GUD mode improvements for jdb:
-
-**** Search for source files using jdb classpath and class information.
-Fast startup since there is no need to scan all source files up front.
-There is also no need to create and maintain lists of source
-directories to scan. Look at `gud-jdb-use-classpath' and
-`gud-jdb-classpath' customization variables documentation.
-
-**** The previous method of searching for source files has been
-preserved in case someone still wants/needs to use it.
-Set `gud-jdb-use-classpath' to nil.
-
-**** Supports the standard breakpoint (gud-break, gud-clear)
-set/clear operations from Java source files under the classpath, stack
-traversal (gud-up, gud-down), and run until current stack finish
-(gud-finish).
-
-**** Supports new jdb (Java 1.2 and later) in addition to oldjdb
-(Java 1.1 jdb).
-
-*** Added jdb Customization Variables
-
-**** `gud-jdb-command-name'. What command line to use to invoke jdb.
-
-**** `gud-jdb-use-classpath'. Allows selection of java source file searching
-method: set to t for new method, nil to scan `gud-jdb-directories' for
-java sources (previous method).
-
-**** `gud-jdb-directories'. List of directories to scan and search for Java
-classes using the original gud-jdb method (if `gud-jdb-use-classpath'
-is nil).
-
-*** Minor Improvements
-
-**** The STARTTLS wrapper (starttls.el) can now use GNUTLS
-instead of the OpenSSL based `starttls' tool. For backwards
-compatibility, it prefers `starttls', but you can toggle
-`starttls-use-gnutls' to switch to GNUTLS (or simply remove the
-`starttls' tool).
-
-**** Do not allow debugger output history variable to grow without bounds.
-
-** Lisp mode changes
-
-*** Lisp mode now uses `font-lock-doc-face' for doc strings.
-
-*** C-u C-M-q in Emacs Lisp mode pretty-prints the list after point.
-
-*** New features in evaluation commands
-
-**** The function `eval-defun' (C-M-x) called on defface reinitializes
-the face to the value specified in the defface expression.
-
-**** Typing C-x C-e twice prints the value of the integer result
-in additional formats (octal, hexadecimal, character) specified
-by the new function `eval-expression-print-format'. The same
-function also defines the result format for `eval-expression' (M-:),
-`eval-print-last-sexp' (C-j) and some edebug evaluation functions.
-
-** Changes to cmuscheme
-
-*** Emacs now offers to start Scheme if the user tries to
-evaluate a Scheme expression but no Scheme subprocess is running.
-
-*** If the file ~/.emacs_NAME or ~/.emacs.d/init_NAME.scm (where NAME
-is the name of the Scheme interpreter) exists, its contents are sent
-to the Scheme subprocess upon startup.
-
-*** There are new commands to instruct the Scheme interpreter to trace
-procedure calls (`scheme-trace-procedure') and to expand syntactic forms
-(`scheme-expand-current-form'). The commands actually sent to the Scheme
-subprocess are controlled by the user options `scheme-trace-command',
-`scheme-untrace-command' and `scheme-expand-current-form'.
-
-** Ewoc changes
-
-*** The new function `ewoc-delete' deletes specified nodes.
-
-*** `ewoc-create' now takes optional arg NOSEP, which inhibits insertion of
-a newline after each pretty-printed entry and after the header and footer.
-This allows you to create multiple-entry ewocs on a single line and to
-effect "invisible" nodes by arranging for the pretty-printer to not print
-anything for those nodes.
-
-For example, these two sequences of expressions behave identically:
-
-;; NOSEP nil
-(defun PP (data) (insert (format "%S" data)))
-(ewoc-create 'PP "start\n")
-
-;; NOSEP t
-(defun PP (data) (insert (format "%S\n" data)))
-(ewoc-create 'PP "start\n\n" "\n" t)
-
-** CC mode changes
-
-*** The CC Mode manual has been extensively revised.
-The information about using CC Mode has been separated from the larger
-and more difficult chapters about configuration.
-
-*** New Minor Modes
-**** Electric Minor Mode toggles the electric action of non-alphabetic keys.
-The new command c-toggle-electric-mode is bound to C-c C-l. Turning the
-mode off can be helpful for editing chaotically indented code and for
-users new to CC Mode, who sometimes find electric indentation
-disconcerting. Its current state is displayed in the mode line with an
-'l', e.g. "C/al".
-
-**** Subword Minor Mode makes Emacs recognize word boundaries at upper case
-letters in StudlyCapsIdentifiers. You enable this feature by C-c C-w. It can
-also be used in non-CC Mode buffers. :-) Contributed by Masatake YAMATO.
-
-*** Support for the AWK language.
-Support for the AWK language has been introduced. The implementation is
-based around GNU AWK version 3.1, but it should work pretty well with
-any AWK. As yet, not all features of CC Mode have been adapted for AWK.
-Here is a summary:
-
-**** Indentation Engine
-The CC Mode indentation engine fully supports AWK mode.
-
-AWK mode handles code formatted in the conventional AWK fashion: `{'s
-which start actions, user-defined functions, or compound statements are
-placed on the same line as the associated construct; the matching `}'s
-are normally placed under the start of the respective pattern, function
-definition, or structured statement.
-
-The predefined line-up functions haven't yet been adapted for AWK
-mode, though some of them may work serendipitously. There shouldn't
-be any problems writing custom indentation functions for AWK mode.
-
-**** Font Locking
-There is a single level of font locking in AWK mode, rather than the
-three distinct levels the other modes have. There are several
-idiosyncrasies in AWK mode's font-locking due to the peculiarities of
-the AWK language itself.
-
-**** Comment and Movement Commands
-These commands all work for AWK buffers. The notion of "defun" has
-been augmented to include AWK pattern-action pairs - the standard
-"defun" commands on key sequences C-M-a, C-M-e, and C-M-h use this
-extended definition.
-
-**** "awk" style, Auto-newline Insertion and Clean-ups
-A new style, "awk" has been introduced, and this is now the default
-style for AWK code. With auto-newline enabled, the clean-up
-c-one-liner-defun (see above) is useful.
-
-*** Font lock support.
-CC Mode now provides font lock support for all its languages. This
-supersedes the font lock patterns that have been in the core font lock
-package for C, C++, Java and Objective-C. Like indentation, font
-locking is done in a uniform way across all languages (except the new
-AWK mode - see below). That means that the new font locking will be
-different from the old patterns in various details for most languages.
-
-The main goal of the font locking in CC Mode is accuracy, to provide a
-dependable aid in recognizing the various constructs. Some, like
-strings and comments, are easy to recognize while others like
-declarations and types can be very tricky. CC Mode can go to great
-lengths to recognize declarations and casts correctly, especially when
-the types aren't recognized by standard patterns. This is a fairly
-demanding analysis which can be slow on older hardware, and it can
-therefore be disabled by choosing a lower decoration level with the
-variable font-lock-maximum-decoration.
-
-Note that the most demanding font lock level has been tuned with lazy
-fontification in mind; Just-In-Time-Lock mode should be enabled for
-the highest font lock level (by default, it is). Fontifying a file
-with several thousand lines in one go can take the better part of a
-minute.
-
-**** The (c|c++|objc|java|idl|pike)-font-lock-extra-types variables
-are now used by CC Mode to recognize identifiers that are certain to
-be types. (They are also used in cases that aren't related to font
-locking.) At the maximum decoration level, types are often recognized
-properly anyway, so these variables should be fairly restrictive and
-not contain patterns for uncertain types.
-
-**** Support for documentation comments.
-There is a "plugin" system to fontify documentation comments like
-Javadoc and the markup within them. It's independent of the host
-language, so it's possible to e.g. turn on Javadoc font locking in C
-buffers. See the variable c-doc-comment-style for details.
-
-Currently three kinds of doc comment styles are recognized: Sun's
-Javadoc, Autodoc (which is used in Pike) and GtkDoc (used in C). (The
-last was contributed by Masatake YAMATO). This is by no means a
-complete list of the most common tools; if your doc comment extractor
-of choice is missing then please drop a note to bug-cc-mode@gnu.org.
-
-**** Better handling of C++ templates.
-As a side effect of the more accurate font locking, C++ templates are
-now handled much better. The angle brackets that delimit them are
-given parenthesis syntax so that they can be navigated like other
-parens.
-
-This also improves indentation of templates, although there still is
-work to be done in that area. E.g. it's required that multiline
-template clauses are written in full and then refontified to be
-recognized, and the indentation of nested templates is a bit odd and
-not as configurable as it ought to be.
-
-**** Improved handling of Objective-C and CORBA IDL.
-Especially the support for Objective-C and IDL has gotten an overhaul.
-The special "@" declarations in Objective-C are handled correctly.
-All the keywords used in CORBA IDL, PSDL, and CIDL are recognized and
-handled correctly, also wrt indentation.
-
-*** Changes in Key Sequences
-**** c-toggle-auto-hungry-state is no longer bound to C-c C-t.
-
-**** c-toggle-hungry-state is no longer bound to C-c C-d.
-This binding has been taken over by c-hungry-delete-forwards.
-
-**** c-toggle-auto-state (C-c C-t) has been renamed to c-toggle-auto-newline.
-c-toggle-auto-state remains as an alias.
-
-**** The new commands c-hungry-backspace and c-hungry-delete-forwards
-have key bindings C-c C-DEL (or C-c DEL, for the benefit of TTYs) and
-C-c C-d (or C-c C-<delete> or C-c <delete>) respectively. These
-commands delete entire blocks of whitespace with a single
-key-sequence. [N.B. "DEL" is the <backspace> key.]
-
-**** The new command c-toggle-electric-mode is bound to C-c C-l.
-
-**** The new command c-subword-mode is bound to C-c C-w.
-
-*** C-c C-s (`c-show-syntactic-information') now highlights the anchor
-position(s).
-
-*** New syntactic symbols in IDL mode.
-The top level constructs "module" and "composition" (from CIDL) are
-now handled like "namespace" in C++: They are given syntactic symbols
-module-open, module-close, inmodule, composition-open,
-composition-close, and incomposition.
-
-*** New functions to do hungry delete without enabling hungry delete mode.
-The new functions `c-hungry-backspace' and `c-hungry-delete-forward'
-provide hungry deletion without having to toggle a mode. They are
-bound to C-c C-DEL and C-c C-d (and several variants, for the benefit
-of different keyboard setups. See "Changes in key sequences" above).
-
-*** Better control over `require-final-newline'.
-
-The variable `c-require-final-newline' specifies which of the modes
-implemented by CC mode should insert final newlines. Its value is a
-list of modes, and only those modes should do it. By default the list
-includes C, C++ and Objective-C modes.
-
-Whichever modes are in this list will set `require-final-newline'
-based on `mode-require-final-newline'.
-
-*** Format change for syntactic context elements.
-
-The elements in the syntactic context returned by `c-guess-basic-syntax'
-and stored in `c-syntactic-context' has been changed somewhat to allow
-attaching more information. They are now lists instead of single cons
-cells. E.g. a line that previously had the syntactic analysis
-
-((inclass . 11) (topmost-intro . 13))
-
-is now analyzed as
-
-((inclass 11) (topmost-intro 13))
-
-In some cases there are more than one position given for a syntactic
-symbol.
-
-This change might affect code that calls `c-guess-basic-syntax'
-directly, and custom lineup functions if they use
-`c-syntactic-context'. However, the argument given to lineup
-functions is still a single cons cell with nil or an integer in the
-cdr.
-
-*** API changes for derived modes.
-
-There have been extensive changes "under the hood" which can affect
-derived mode writers. Some of these changes are likely to cause
-incompatibilities with existing derived modes, but on the other hand
-care has now been taken to make it possible to extend and modify CC
-Mode with less risk of such problems in the future.
-
-**** New language variable system.
-These are variables whose values vary between CC Mode's different
-languages. See the comment blurb near the top of cc-langs.el.
-
-**** New initialization functions.
-The initialization procedure has been split up into more functions to
-give better control: `c-basic-common-init', `c-font-lock-init', and
-`c-init-language-vars'.
-
-*** Changes in analysis of nested syntactic constructs.
-The syntactic analysis engine has better handling of cases where
-several syntactic constructs appear nested on the same line. They are
-now handled as if each construct started on a line of its own.
-
-This means that CC Mode now indents some cases differently, and
-although it's more consistent there might be cases where the old way
-gave results that's more to one's liking. So if you find a situation
-where you think that the indentation has become worse, please report
-it to bug-cc-mode@gnu.org.
-
-**** New syntactic symbol substatement-label.
-This symbol is used when a label is inserted between a statement and
-its substatement. E.g:
-
- if (x)
- x_is_true:
- do_stuff();
-
-*** Better handling of multiline macros.
-
-**** Syntactic indentation inside macros.
-The contents of multiline #define's are now analyzed and indented
-syntactically just like other code. This can be disabled by the new
-variable `c-syntactic-indentation-in-macros'. A new syntactic symbol
-`cpp-define-intro' has been added to control the initial indentation
-inside `#define's.
-
-**** New lineup function `c-lineup-cpp-define'.
-
-Now used by default to line up macro continuation lines. The behavior
-of this function closely mimics the indentation one gets if the macro
-is indented while the line continuation backslashes are temporarily
-removed. If syntactic indentation in macros is turned off, it works
-much line `c-lineup-dont-change', which was used earlier, but handles
-empty lines within the macro better.
-
-**** Automatically inserted newlines continues the macro if used within one.
-This applies to the newlines inserted by the auto-newline mode, and to
-`c-context-line-break' and `c-context-open-line'.
-
-**** Better alignment of line continuation backslashes.
-`c-backslash-region' tries to adapt to surrounding backslashes. New
-variable `c-backslash-max-column' puts a limit on how far out
-backslashes can be moved.
-
-**** Automatic alignment of line continuation backslashes.
-This is controlled by the new variable `c-auto-align-backslashes'. It
-affects `c-context-line-break', `c-context-open-line' and newlines
-inserted in Auto-Newline mode.
-
-**** Line indentation works better inside macros.
-Regardless whether syntactic indentation and syntactic indentation
-inside macros are enabled or not, line indentation now ignores the
-line continuation backslashes. This is most noticeable when syntactic
-indentation is turned off and there are empty lines (save for the
-backslash) in the macro.
-
-*** indent-for-comment is more customizable.
-The behavior of M-; (indent-for-comment) is now configurable through
-the variable `c-indent-comment-alist'. The indentation behavior is
-based on the preceding code on the line, e.g. to get two spaces after
-#else and #endif but indentation to `comment-column' in most other
-cases (something which was hardcoded earlier).
-
-*** New function `c-context-open-line'.
-It's the open-line equivalent of `c-context-line-break'.
-
-*** New clean-ups
-
-**** `comment-close-slash'.
-With this clean-up, a block (i.e. c-style) comment can be terminated by
-typing a slash at the start of a line.
-
-**** `c-one-liner-defun'
-This clean-up compresses a short enough defun (for example, an AWK
-pattern/action pair) onto a single line. "Short enough" is configurable.
-
-*** New lineup functions
-
-**** `c-lineup-string-cont'
-This lineup function lines up a continued string under the one it
-continues. E.g:
-
-result = prefix + "A message "
- "string."; <- c-lineup-string-cont
-
-**** `c-lineup-cascaded-calls'
-Lines up series of calls separated by "->" or ".".
-
-**** `c-lineup-knr-region-comment'
-Gives (what most people think is) better indentation of comments in
-the "K&R region" between the function header and its body.
-
-**** `c-lineup-gcc-asm-reg'
-Provides better indentation inside asm blocks.
-
-**** `c-lineup-argcont'
-Lines up continued function arguments after the preceding comma.
-
-*** Added toggle for syntactic indentation.
-The function `c-toggle-syntactic-indentation' can be used to toggle
-syntactic indentation.
-
-*** Better caching of the syntactic context.
-CC Mode caches the positions of the opening parentheses (of any kind)
-of the lists surrounding the point. Those positions are used in many
-places as anchor points for various searches. The cache is now
-improved so that it can be reused to a large extent when the point is
-moved. The less it moves, the less needs to be recalculated.
-
-The effect is that CC Mode should be fast most of the time even when
-opening parens are hung (i.e. aren't in column zero). It's typically
-only the first time after the point is moved far down in a complex
-file that it'll take noticeable time to find out the syntactic
-context.
-
-*** Statements are recognized in a more robust way.
-Statements are recognized most of the time even when they occur in an
-"invalid" context, e.g. in a function argument. In practice that can
-happen when macros are involved.
-
-*** Improved the way `c-indent-exp' chooses the block to indent.
-It now indents the block for the closest sexp following the point
-whose closing paren ends on a different line. This means that the
-point doesn't have to be immediately before the block to indent.
-Also, only the block and the closing line is indented; the current
-line is left untouched.
-
-** Changes in Makefile mode
-
-*** Makefile mode has submodes for automake, gmake, makepp, BSD make and imake.
-
-The former two couldn't be differentiated before, and the latter three
-are new. Font-locking is robust now and offers new customizable
-faces.
-
-*** The variable `makefile-query-one-target-method' has been renamed
-to `makefile-query-one-target-method-function'. The old name is still
-available as alias.
-
-** Sql changes
-
-*** The variable `sql-product' controls the highlighting of different
-SQL dialects. This variable can be set globally via Customize, on a
-buffer-specific basis via local variable settings, or for the current
-session using the new SQL->Product submenu. (This menu replaces the
-SQL->Highlighting submenu.)
-
-The following values are supported:
-
- ansi ANSI Standard (default)
- db2 DB2
- informix Informix
- ingres Ingres
- interbase Interbase
- linter Linter
- ms Microsoft
- mysql MySQL
- oracle Oracle
- postgres Postgres
- solid Solid
- sqlite SQLite
- sybase Sybase
-
-The current product name will be shown on the mode line following the
-SQL mode indicator.
-
-The technique of setting `sql-mode-font-lock-defaults' directly in
-your `.emacs' will no longer establish the default highlighting -- Use
-`sql-product' to accomplish this.
-
-ANSI keywords are always highlighted.
-
-*** The function `sql-add-product-keywords' can be used to add
-font-lock rules to the product specific rules. For example, to have
-all identifiers ending in `_t' under MS SQLServer treated as a type,
-you would use the following line in your .emacs file:
++++
+** defcustom accepts new keyword arguments, `:safe' and `:risky', which
+set a variable's `safe-local-variable' and `risky-local-variable' property.
- (sql-add-product-keywords 'ms
- '(("\\<\\w+_t\\>" . font-lock-type-face)))
+** VC
+*** Clicking on the VC mode-line entry now pops the VC menu.
-*** Oracle support includes keyword highlighting for Oracle 9i.
+*** The VC mode-line entry now has a tooltip that explains the VC file status.
-Most SQL and PL/SQL keywords are implemented. SQL*Plus commands are
-highlighted in `font-lock-doc-face'.
+*** VC now supports applying VC operations to a set of files at a time.
-*** Microsoft SQLServer support has been significantly improved.
+This enables VC to work much more effectively with changeset-oriented
+version-control systems such as Subversion, GNU Arch, Mercurial, and
+Bzr. VC will now pass a multiple-file commit to these systems
+as a single changeset.
-Keyword highlighting for SqlServer 2000 is implemented.
-sql-interactive-mode defaults to use osql, rather than isql, because
-osql flushes its error stream more frequently. Thus error messages
-are displayed when they occur rather than when the session is
-terminated.
+** sgml-electric-tag-pair-mode lets you simultaneously edit matched tag pairs.
-If the username and password are not provided to `sql-ms', osql is
-called with the `-E' command line argument to use the operating system
-credentials to authenticate the user.
+** The appearance of superscript and subscript in TeX is more customizable.
+See the documentation of the variables: tex-fontify-script,
+tex-font-script-display, tex-suscript-height-ratio, and
+tex-suscript-height-minimum.
-*** Postgres support is enhanced.
-Keyword highlighting of Postgres 7.3 is implemented. Prompting for
-the username and the pgsql `-U' option is added.
+** BibTeX mode:
-*** MySQL support is enhanced.
-Keyword highlighting of MySql 4.0 is implemented.
+*** New `bibtex-entry-format' options `whitespace', `braces', and
+`string', disabled by default.
-*** Imenu support has been enhanced to locate tables, views, indexes,
-packages, procedures, functions, triggers, sequences, rules, and
-defaults.
+*** New variable `bibtex-cite-matcher-alist' contains rules to
+identify cited keys in BibTeX entries, used by `bibtex-find-crossref'.
-*** Added SQL->Start SQLi Session menu entry which calls the
-appropriate `sql-interactive-mode' wrapper for the current setting of
-`sql-product'.
+*** Command `bibtex-url' now allows multiple URLs per entry.
-*** sql.el supports the SQLite interpreter--call 'sql-sqlite'.
++++
+** Tramp
-** Fortran mode changes
+*** New connection methods.
+The new methods "plinkx", "plink2", "psftp", "sftp" and "fish" have
+been introduced. There are also new so-called gateway methods
+"tunnel" and "socks".
-*** F90 mode and Fortran mode have support for `hs-minor-mode' (hideshow).
-It cannot deal with every code format, but ought to handle a sizeable
-majority.
+*** Multihop syntax has been removed.
+The pseudo-method "multi" has been removed. Instead of, multi hops
+can be specified by the new variable `tramp-default-proxies-alist'.
-*** F90 mode and Fortran mode have new navigation commands
-`f90-end-of-block', `f90-beginning-of-block', `f90-next-block',
-`f90-previous-block', `fortran-end-of-block',
-`fortran-beginning-of-block'.
+*** More default settings.
+Default values can be set via the variables `tramp-default-user',
+`tramp-default-user-alist' and `tramp-default-host'.
-*** Fortran mode does more font-locking by default. Use level 3
-highlighting for the old default.
+*** Connection information is cached.
+In order to reduce connection setup, information about used
+connections are kept persistent in a file. The name of this file is
+defined in the variable `tramp-persistency-file-name'.
-*** Fortran mode has a new variable `fortran-directive-re'.
-Adapt this to match the format of any compiler directives you use.
-Lines that match are never indented, and are given distinctive font-locking.
+*** Control of remote processes.
+Running processes on a remote host can be controlled by settings in
+`tramp-remote-path' and `tramp-remote-process-environment'.
-*** The new function `f90-backslash-not-special' can be used to change
-the syntax of backslashes in F90 buffers.
+*** Success of remote copy is checked.
+When the variable `file-precious-flag' is set, the success of a remote
+file copy is checked via the file's checksum.
** Miscellaneous programming mode changes
-*** In sh-script, a continuation line is only indented if the backslash was
-preceded by a SPC or a TAB.
-
-*** Perl mode has a new variable `perl-indent-continued-arguments'.
-
-*** The old Octave mode bindings C-c f and C-c i have been changed
-to C-c C-f and C-c C-i. The C-c C-i subcommands now have duplicate
-bindings on control characters--thus, C-c C-i C-b is the same as
-C-c C-i b, and so on.
-
-*** Prolog mode has a new variable `prolog-font-lock-keywords'
-to support use of font-lock.
-
-** VC Changes
-
-*** New backends for Subversion and Meta-CVS.
-
-*** The new variable `vc-cvs-global-switches' specifies switches that
-are passed to any CVS command invoked by VC.
-
-These switches are used as "global options" for CVS, which means they
-are inserted before the command name. For example, this allows you to
-specify a compression level using the `-z#' option for CVS.
-
-*** The key C-x C-q only changes the read-only state of the buffer
-(toggle-read-only). It no longer checks files in or out.
-
-We made this change because we held a poll and found that many users
-were unhappy with the previous behavior. If you do prefer this
-behavior, you can bind `vc-toggle-read-only' to C-x C-q in your
-`.emacs' file:
-
- (global-set-key "\C-x\C-q" 'vc-toggle-read-only)
-
-The function `vc-toggle-read-only' will continue to exist.
-
-*** VC-Annotate mode enhancements
-
-In VC-Annotate mode, you can now use the following key bindings for
-enhanced functionality to browse the annotations of past revisions, or
-to view diffs or log entries directly from vc-annotate-mode:
-
- P: annotates the previous revision
- N: annotates the next revision
- J: annotates the revision at line
- A: annotates the revision previous to line
- D: shows the diff of the revision at line with its previous revision
- L: shows the log of the revision at line
- W: annotates the workfile (most up to date) version
-
-** pcl-cvs changes
-
-*** In pcl-cvs mode, there is a new `d y' command to view the diffs
-between the local version of the file and yesterday's head revision
-in the repository.
-
-*** In pcl-cvs mode, there is a new `d r' command to view the changes
-anyone has committed to the repository since you last executed
-`checkout', `update' or `commit'. That means using cvs diff options
--rBASE -rHEAD.
-
-** Diff changes
-
-*** M-x diff uses Diff mode instead of Compilation mode.
-
-*** Diff mode key bindings changed.
-
-These are the new bindings:
-
-C-c C-e diff-ediff-patch (old M-A)
-C-c C-n diff-restrict-view (old M-r)
-C-c C-r diff-reverse-direction (old M-R)
-C-c C-u diff-context->unified (old M-U)
-C-c C-w diff-refine-hunk (old C-c C-r)
-
-To convert unified to context format, use C-u C-c C-u.
-In addition, C-c C-u now operates on the region
-in Transient Mark mode when the mark is active.
-
-** EDiff changes.
-
-*** When comparing directories.
-Typing D brings up a buffer that lists the differences between the contents of
-directories. Now it is possible to use this buffer to copy the missing files
-from one directory to another.
-
-*** When comparing files or buffers.
-Typing the = key now offers to perform the word-by-word comparison of the
-currently highlighted regions in an inferior Ediff session. If you answer 'n'
-then it reverts to the old behavior and asks the user to select regions for
-comparison.
-
-*** The new command `ediff-backup' compares a file with its most recent
-backup using `ediff'. If you specify the name of a backup file,
-`ediff-backup' compares it with the file of which it is a backup.
-
-** Etags changes.
-
-*** New regular expressions features
-
-**** New syntax for regular expressions, multi-line regular expressions.
-
-The syntax --ignore-case-regexp=/regex/ is now undocumented and retained
-only for backward compatibility. The new equivalent syntax is
---regex=/regex/i. More generally, it is --regex=/TAGREGEX/TAGNAME/MODS,
-where `/TAGNAME' is optional, as usual, and MODS is a string of 0 or
-more characters among `i' (ignore case), `m' (multi-line) and `s'
-(single-line). The `m' and `s' modifiers behave as in Perl regular
-expressions: `m' allows regexps to match more than one line, while `s'
-(which implies `m') means that `.' matches newlines. The ability to
-span newlines allows writing of much more powerful regular expressions
-and rapid prototyping for tagging new languages.
-
-**** Regular expressions can use char escape sequences as in GCC.
-
-The escaped character sequence \a, \b, \d, \e, \f, \n, \r, \t, \v,
-respectively, stand for the ASCII characters BEL, BS, DEL, ESC, FF, NL,
-CR, TAB, VT.
-
-**** Regular expressions can be bound to a given language.
-
-The syntax --regex={LANGUAGE}REGEX means that REGEX is used to make tags
-only for files of language LANGUAGE, and ignored otherwise. This is
-particularly useful when storing regexps in a file.
-
-**** Regular expressions can be read from a file.
-
-The --regex=@regexfile option means read the regexps from a file, one
-per line. Lines beginning with space or tab are ignored.
-
-*** New language parsing features
-
-**** New language HTML.
-
-Tags are generated for `title' as well as `h1', `h2', and `h3'. Also,
-when `name=' is used inside an anchor and whenever `id=' is used.
-
-**** New language PHP.
-
-Functions, classes and defines are tags. If the --members option is
-specified to etags, variables are tags also.
-
-**** New language Lua.
+*** The file etc/emacs.py now supports both Python 2 and 3, meaning
+that either version can be used as inferior Python by python.el.
-All functions are tagged.
+*** The variable `fortran-line-length' can change the fixed-form line-length.
-**** The `::' qualifier triggers C++ parsing in C file.
+*** In Fortran mode, M-; is now bound to the standard comment-dwim,
+rather than fortran-indent-comment.
-Previously, only the `template' and `class' keywords had this effect.
-
-**** The GCC __attribute__ keyword is now recognized and ignored.
-
-**** In C and derived languages, etags creates tags for #undef
-
-**** In Makefiles, constants are tagged.
-
-If you want the old behavior instead, thus avoiding to increase the
-size of the tags file, use the --no-globals option.
-
-**** In Perl, packages are tags.
-
-Subroutine tags are named from their package. You can jump to sub tags
-as you did before, by the sub name, or additionally by looking for
-package::sub.
-
-**** In Prolog, etags creates tags for rules in addition to predicates.
-
-**** New default keywords for TeX.
-
-The new keywords are def, newcommand, renewcommand, newenvironment and
-renewenvironment.
-
-*** Honor #line directives.
-
-When Etags parses an input file that contains C preprocessor's #line
-directives, it creates tags using the file name and line number
-specified in those directives. This is useful when dealing with code
-created from Cweb source files. When Etags tags the generated file, it
-writes tags pointing to the source file.
-
-*** New option --parse-stdin=FILE.
-
-This option is mostly useful when calling etags from programs. It can
-be used (only once) in place of a file name on the command line. Etags
-reads from standard input and marks the produced tags as belonging to
-the file FILE.
-
-*** The --members option is now the default.
-
-Use --no-members if you want the old default behaviour of not tagging
-struct members in C, members variables in C++ and variables in PHP.
-
-** Ctags changes.
-
-*** Ctags now allows duplicate tags
-
-** Rmail changes
-
-*** Support for `movemail' from GNU mailutils was added to Rmail.
-
-This version of `movemail' allows you to read mail from a wide range of
-mailbox formats, including remote POP3 and IMAP4 mailboxes with or
-without TLS encryption. If GNU mailutils is installed on the system
-and its version of `movemail' can be found in exec-path, it will be
-used instead of the native one.
-
-*** The new commands rmail-end-of-message and rmail-summary end-of-message,
-by default bound to `/', go to the end of the current mail message in
-Rmail and Rmail summary buffers.
-
-*** Rmail now displays 5-digit message ids in its summary buffer.
-
-** Gnus package
-
-*** Gnus now includes Sieve and PGG
-
-Sieve is a library for managing Sieve scripts. PGG is a library to handle
-PGP/MIME.
-
-*** There are many news features, bug fixes and improvements.
-
-See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details.
-
-** MH-E changes.
-
-Upgraded to MH-E version 8.0.3. There have been major changes since
-version 5.0.2; see MH-E-NEWS for details.
-
-** Miscellaneous mail changes
-
-*** The new variable `mail-default-directory' specifies
-`default-directory' for mail buffers. This directory is used for
-auto-save files of mail buffers. It defaults to "~/".
-
-*** The mode line can indicate new mail in a directory or file.
-
-See the documentation of the user option `display-time-mail-directory'.
-
-** Calendar changes
-
-*** There is a new calendar package, icalendar.el, that can be used to
-convert Emacs diary entries to/from the iCalendar format.
-
-*** The new package cal-html.el writes HTML files with calendar and
-diary entries.
-
-*** The new functions `diary-from-outlook', `diary-from-outlook-gnus',
-and `diary-from-outlook-rmail' can be used to import diary entries
-from Outlook-format appointments in mail messages. The variable
-`diary-outlook-formats' can be customized to recognize additional
-formats.
-
-*** The procedure for activating appointment reminders has changed:
-use the new function `appt-activate'. The new variable
-`appt-display-format' controls how reminders are displayed, replacing
-`appt-issue-message', `appt-visible', and `appt-msg-window'.
-
-*** The function `simple-diary-display' now by default sets a header line.
-This can be controlled through the variables `diary-header-line-flag'
-and `diary-header-line-format'.
-
-*** Diary sexp entries can have custom marking in the calendar.
-Diary sexp functions which only apply to certain days (such as
-`diary-block' or `diary-cyclic') now take an optional parameter MARK,
-which is the name of a face or a single-character string indicating
-how to highlight the day in the calendar display. Specifying a
-single-character string as @var{mark} places the character next to the
-day in the calendar. Specifying a face highlights the day with that
-face. This lets you have different colors or markings for vacations,
-appointments, paydays or anything else using a sexp.
-
-*** The meanings of C-x < and C-x > have been interchanged.
-< means to scroll backward in time, and > means to scroll forward.
-
-*** You can now use < and >, instead of C-x < and C-x >, to scroll
-the calendar left or right.
-
-*** The new function `calendar-goto-day-of-year' (g D) prompts for a
-year and day number, and moves to that date. Negative day numbers
-count backward from the end of the year.
-
-*** The new Calendar function `calendar-goto-iso-week' (g w)
-prompts for a year and a week number, and moves to the first
-day of that ISO week.
-
-*** The functions `holiday-easter-etc' and `holiday-advent' now take
-optional arguments, in order to only report on the specified holiday
-rather than all. This makes customization of variables such as
-`christian-holidays' simpler.
-
-*** The new variable `calendar-minimum-window-height' affects the
-window generated by the function `generate-calendar-window'.
-
-** Speedbar changes
-
-*** Speedbar items can now be selected by clicking mouse-1, based on
-the `mouse-1-click-follows-link' mechanism.
-
-*** The new command `speedbar-toggle-line-expansion', bound to SPC,
-contracts or expands the line under the cursor.
-
-*** New command `speedbar-create-directory', bound to `M'.
-
-*** The new commands `speedbar-expand-line-descendants' and
-`speedbar-contract-line-descendants', bound to `[' and `]'
-respectively, expand and contract the line under cursor with all of
-its descendents.
-
-*** The new user option `speedbar-use-tool-tips-flag', if non-nil,
-means to display tool-tips for speedbar items.
-
-*** The new user option `speedbar-query-confirmation-method' controls
-how querying is performed for file operations. A value of 'always
-means to always query before file operations; 'none-but-delete means
-to not query before any file operations, except before a file
-deletion.
-
-*** The new user option `speedbar-select-frame-method' specifies how
-to select a frame for displaying a file opened with the speedbar. A
-value of 'attached means to use the attached frame (the frame that
-speedbar was started from.) A number such as 1 or -1 means to pass
-that number to `other-frame'.
-
-*** SPC and DEL are no longer bound to scroll up/down in the speedbar
-keymap.
-
-*** The frame management code in speedbar.el has been split into a new
-`dframe' library. Emacs Lisp code that makes use of the speedbar
-should use `dframe-attached-frame' instead of
-`speedbar-attached-frame', `dframe-timer' instead of `speedbar-timer',
-`dframe-close-frame' instead of `speedbar-close-frame', and
-`dframe-activity-change-focus-flag' instead of
-`speedbar-activity-change-focus-flag'. The variables
-`speedbar-update-speed' and `speedbar-navigating-speed' are also
-obsolete; use `dframe-update-speed' instead.
-
-** battery.el changes
-
-*** display-battery-mode replaces display-battery.
-
-*** battery.el now works on recent versions of OS X.
-
-** Games
-
-*** The game `mpuz' is enhanced.
-
-`mpuz' now allows the 2nd factor not to have two identical digits. By
-default, all trivial operations involving whole lines are performed
-automatically. The game uses faces for better visual feedback.
-
-** Obsolete and deleted packages
-
-*** fast-lock.el and lazy-lock.el are obsolete. Use jit-lock.el instead.
-
-*** iso-acc.el is now obsolete. Use one of the latin input methods instead.
-
-*** zone-mode.el is now obsolete. Use dns-mode.el instead.
-
-*** cplus-md.el has been deleted.
++++
+*** (The increasingly misnamed) F90 mode supports Fortran 2003 syntax.
** Miscellaneous
-*** The variable `woman-topic-at-point' is renamed
-to `woman-use-topic-at-point' and behaves differently: if this
-variable is non-nil, the `woman' command uses the word at point
-automatically, without asking for a confirmation. Otherwise, the word
-at point is suggested as default, but not inserted at the prompt.
-
-*** You can now customize `fill-nobreak-predicate' to control where
-filling can break lines. The value is now normally a list of
-functions, but it can also be a single function, for compatibility.
-
-Emacs provide two predicates, `fill-single-word-nobreak-p' and
-`fill-french-nobreak-p', for use as the value of
-`fill-nobreak-predicate'.
-
-*** M-x view-file and commands that use it now avoid interfering
-with special modes such as Tar mode.
-
-*** `global-whitespace-mode' is a new alias for `whitespace-global-mode'.
-
-*** The saveplace.el package now filters out unreadable files.
-
-When you exit Emacs, the saved positions in visited files no longer
-include files that aren't readable, e.g. files that don't exist.
-Customize the new option `save-place-forget-unreadable-files' to nil
-to get the old behavior. The new options `save-place-save-skipped'
-and `save-place-skip-check-regexp' allow further fine-tuning of this
-feature.
-
-*** Commands `winner-redo' and `winner-undo', from winner.el, are now
-bound to C-c <left> and C-c <right>, respectively. This is an
-incompatible change.
-
-*** The type-break package now allows `type-break-file-name' to be nil
-and if so, doesn't store any data across sessions. This is handy if
-you don't want the `.type-break' file in your home directory or are
-annoyed by the need for interaction when you kill Emacs.
-
-*** `ps-print' can now print characters from the mule-unicode charsets.
-
-Printing text with characters from the mule-unicode-* sets works with
-`ps-print', provided that you have installed the appropriate BDF
-fonts. See the file INSTALL for URLs where you can find these fonts.
-
-*** New command `strokes-global-set-stroke-string'.
-This is like `strokes-global-set-stroke', but it allows you to bind
-the stroke directly to a string to insert. This is convenient for
-using strokes as an input method.
-
-*** In Outline mode, `hide-body' no longer hides lines at the top
-of the file that precede the first header line.
-
-*** `hide-ifdef-mode' now uses overlays rather than selective-display
-to hide its text. This should be mostly transparent but slightly
-changes the behavior of motion commands like C-e and C-p.
-
-*** In Artist mode the variable `artist-text-renderer' has been
-renamed to `artist-text-renderer-function'. The old name is still
-available as alias.
-
-*** In Enriched mode, `set-left-margin' and `set-right-margin' are now
-by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l'
-and `C-c C-r'.
-
-*** `partial-completion-mode' now handles partial completion on directory names.
-
-*** You can now disable pc-selection-mode after enabling it.
-
-M-x pc-selection-mode behaves like a proper minor mode, and with no
-argument it toggles the mode. Turning off PC-Selection mode restores
-the global key bindings that were replaced by turning on the mode.
-
-*** `uniquify-strip-common-suffix' tells uniquify to prefer
-`file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'.
-
-*** New user option `add-log-always-start-new-record'.
-
-When this option is enabled, M-x add-change-log-entry always
-starts a new record regardless of when the last record is.
-
-*** M-x compare-windows now can automatically skip non-matching text to
-resync points in both windows.
-
-*** PO translation files are decoded according to their MIME headers
-when Emacs visits them.
-
-*** Telnet now prompts you for a port number with C-u M-x telnet.
-
-*** calculator.el now has radix grouping mode.
+*** comint-mode uses `start-file-process' now (see Lisp Changes).
+If `default-directory' is a remote file name, subprocesses are started
+on the corresponding remote system.
-To enable this, set `calculator-output-radix' non-nil. In this mode a
-separator character is used every few digits, making it easier to see
-byte boundaries etc. For more info, see the documentation of the
-variable `calculator-radix-grouping-mode'.
+*** C-x C-q in dired-mode now runs the command wdired-change-to-wdired-mode,
+and C-x C-q in wdired-mode exits it with asking a question about
+saving changes.
-*** LDAP support now defaults to ldapsearch from OpenLDAP version 2.
-
-*** The terminal emulation code in term.el has been improved; it can
-run most curses applications now.
-
-*** Support for `magic cookie' standout modes has been removed.
-
-Emacs still works on terminals that require magic cookies in order to
-use standout mode, but they can no longer display mode-lines in
-inverse-video.
+*** The new command `eshell/info' runs info in an eshell buffer.
-* Changes in Emacs 22.1 on non-free operating systems
-
-** The HOME directory defaults to Application Data under the user profile.
-
-If you used a previous version of Emacs without setting the HOME
-environment variable and a `.emacs' was saved, then Emacs will continue
-using C:/ as the default HOME. But if you are installing Emacs afresh,
-the default location will be the "Application Data" (or similar
-localized name) subdirectory of your user profile. A typical location
-of this directory is "C:\Documents and Settings\USERNAME\Application Data",
-where USERNAME is your user name.
-
-This change means that users can now have their own `.emacs' files on
-shared computers, and the default HOME directory is less likely to be
-read-only on computers that are administered by someone else.
-
-** Images are now supported on MS Windows.
-
-PBM and XBM images are supported out of the box. Other image formats
-depend on external libraries. All of these libraries have been ported
-to Windows, and can be found in both source and binary form at
-http://gnuwin32.sourceforge.net/. Note that libpng also depends on
-zlib, and tiff depends on the version of jpeg that it was compiled
-against. For additional information, see nt/INSTALL.
-
-** Sound is now supported on MS Windows.
-
-WAV format is supported on all versions of Windows, other formats such
-as AU, AIFF and MP3 may be supported in the more recent versions of
-Windows, or when other software provides hooks into the system level
-sound support for those formats.
-
-** Tooltips now work on MS Windows.
-
-See the Emacs 21.1 NEWS entry for tooltips for details.
-
-** Pointing devices with more than 3 buttons are now supported on MS Windows.
-
-The new variable `w32-pass-extra-mouse-buttons-to-system' controls
-whether Emacs should handle the extra buttons itself (the default), or
-pass them to Windows to be handled with system-wide functions.
-
-** Passing resources on the command line now works on MS Windows.
-
-You can use --xrm to pass resource settings to Emacs, overriding any
-existing values. For example:
-
- emacs --xrm "Emacs.Background:red" --xrm "Emacs.Geometry:100x20"
-
-will start up Emacs on an initial frame of 100x20 with red background,
-irrespective of geometry or background setting on the Windows registry.
-
-** Emacs takes note of colors defined in Control Panel on MS-Windows.
-
-The Control Panel defines some default colors for applications in much
-the same way as wildcard X Resources do on X. Emacs now adds these
-colors to the colormap prefixed by System (eg SystemMenu for the
-default Menu background, SystemMenuText for the foreground), and uses
-some of them to initialize some of the default faces.
-`list-colors-display' shows the list of System color names, in case
-you wish to use them in other faces.
-
-** Running in a console window in Windows now uses the console size.
-
-Previous versions of Emacs erred on the side of having a usable Emacs
-through telnet, even though that was inconvenient if you use Emacs in
-a local console window with a scrollback buffer. The default value of
-w32-use-full-screen-buffer is now nil, which favors local console
-windows. Recent versions of Windows telnet also work well with this
-setting. If you are using an older telnet server then Emacs detects
-that the console window dimensions that are reported are not sane, and
-defaults to 80x25. If you use such a telnet server regularly at a size
-other than 80x25, you can still manually set
-w32-use-full-screen-buffer to t.
-
-** Different shaped mouse pointers are supported on MS Windows.
-
-The mouse pointer changes shape depending on what is under the pointer.
-
-** On MS Windows, the "system caret" now follows the cursor.
-
-This enables Emacs to work better with programs that need to track the
-cursor, for example screen magnifiers and text to speech programs.
-When such a program is in use, the system caret is made visible
-instead of Emacs drawing its own cursor. This seems to be required by
-some programs. The new variable w32-use-visible-system-caret allows
-the caret visibility to be manually toggled.
-
-** On MS Windows NT/W2K/XP, Emacs uses Unicode for clipboard operations.
-
-Those systems use Unicode internally, so this allows Emacs to share
-multilingual text with other applications. On other versions of
-MS Windows, Emacs now uses the appropriate locale coding-system, so
-the clipboard should work correctly for your local language without
-any customizations.
-
-** On Mac OS, `keyboard-coding-system' changes based on the keyboard script.
-
-** The variable `mac-keyboard-text-encoding' and the constants
-`kTextEncodingMacRoman', `kTextEncodingISOLatin1', and
-`kTextEncodingISOLatin2' are obsolete.
-
-** The variable `mac-command-key-is-meta' is obsolete. Use
-`mac-command-modifier' and `mac-option-modifier' instead.
+* Changes in Emacs 23.1 on non-free operating systems
+
+---
+** IPv6 is supported on MS-Windows.
+Emacs now supports IPv6 on Windows XP and later, and earlier versions
+of Windows with third party IPv6 stacks installed. Previously IPv6 was
+supported on other platforms, but not on Windows due to using the winsock
+1.1 header file, even though Emacs was linking to the winsock 2 library.
+
+** More keys available on MS-Windows.
+Keys normally associated with IMEs, and some exotic keys not normally found
+on standard keyboards have been given names so they can be bound to functions
+inside Emacs. If there are keys on your keyboard that have not been exposed
+to Emacs in the past, try C-h k to see if they are available now.
+
+Emacs can now bind functions to the extra buttons for media player and
+browser control present on some keyboards. These buttons are disabled
+by default, since enabling them prevents their system-wide use when
+Emacs has focus. To enable them, set the variable
+w32-pass-multimedia-buttons to nil. See the doc string of that variable
+for the list of extra keys that are available.
-* Incompatible Lisp Changes in Emacs 22.1
-
-** Mode line display ignores text properties as well as the
-:propertize and :eval forms in the value of a variable whose
-`risky-local-variable' property is nil.
-
-The function `comint-send-input' now accepts 3 optional arguments:
-
- (comint-send-input &optional no-newline artificial)
-
-Callers sending input not from the user should use bind the 3rd
-argument `artificial' to a non-nil value, to prevent Emacs from
-deleting the part of subprocess output that matches the input.
-
-** The `read-file-name' function now returns a null string if the
-user just types RET.
-
-** The variables post-command-idle-hook and post-command-idle-delay have
-been removed. Use run-with-idle-timer instead.
-
-** A hex or octal escape in a string constant forces the string to
-be multibyte or unibyte, respectively.
+* Incompatible Lisp Changes in Emacs 23.1
-** The explicit method of creating a display table element by
-combining a face number and a character code into a numeric
-glyph code is deprecated.
-
-Instead, the new functions `make-glyph-code', `glyph-char', and
-`glyph-face' must be used to create and decode glyph codes in
-display tables.
-
-** `suppress-keymap' now works by remapping `self-insert-command' to
-the command `undefined'. (In earlier Emacs versions, it used
-`substitute-key-definition' to rebind self inserting characters to
-`undefined'.)
-
-** The third argument of `accept-process-output' is now milliseconds.
-It used to be microseconds.
-
-** The function find-operation-coding-system may be called with a cons
-(FILENAME . BUFFER) in the second argument if the first argument
-OPERATION is `insert-file-contents', and thus a function registered in
-`file-coding-system-alist' is also called with such an argument.
-
-** When Emacs receives a USR1 or USR2 signal, this generates
-input events: sigusr1 or sigusr2. Use special-event-map to
-handle these events.
++++
+** The function `dired-call-process' has been removed.
-** The variable `memory-full' now remains t until
-there is no longer a shortage of memory.
+** The variable `byte-compile-warnings' can now be a list starting with `not',
+meaning to disable the specified warnings. The meaning of this list
+may therefore be the reverse of what you expect (of course, this is
+only an issue if you make use of the new `not' syntax). Rather than
+checking/manipulating elements directly, use the new functions
+`byte-compile-warning-enabled-p', `byte-compile-disable-warning', and
+`byte-compile-enable-warning.'
-** Support for Mocklisp has been removed.
+** shell.el no longer defines the aliases `dirtrack-toggle' and
+`dirtrack-mode' for `shell-dirtrack-mode'. These names were removed
+because they clash with commands provided by dirtrack.el. Use
+`shell-dirtrack-mode' instead.
-* Lisp Changes in Emacs 22.1
-
-** General Lisp changes:
-
-*** New syntax: \s now stands for the SPACE character.
-
-`?\s' is a new way to write the space character. You must make sure
-it is not followed by a dash, since `?\s-...' indicates the "super"
-modifier. However, it would be strange to write a character constant
-and a following symbol (beginning with `-') with no space between
-them.
-
-`\s' stands for space in strings, too, but it is not really meant for
-strings; it is easier and nicer just to write a space.
-
-*** New syntax: \uXXXX and \UXXXXXXXX specify Unicode code points in hex.
-
-For instance, you can use "\u0428" to specify a string consisting of
-CYRILLIC CAPITAL LETTER SHA, or `"U0001D6E2" to specify one consisting
-of MATHEMATICAL ITALIC CAPITAL ALPHA (the latter is greater than
-#xFFFF and thus needs the longer syntax).
-
-This syntax works for both character constants and strings.
-
-*** New function `unsafep' determines whether a Lisp form is safe.
-
-It returns nil if the given Lisp form can't possibly do anything
-dangerous; otherwise it returns a reason why the form might be unsafe
-(calls unknown function, alters global variable, etc.).
-
-*** The function `eql' is now available without requiring the CL package.
-
-*** The new function `memql' is like `memq', but uses `eql' for comparison,
-that is, floats are compared by value and other elements with `eq'.
-
-*** New functions `string-or-null-p' and `booleanp'.
-
-`string-or-null-p' returns non-nil if OBJECT is a string or nil.
-`booleanp' returns non-nil if OBJECT is t or nil.
-
-*** `makehash' is now obsolete. Use `make-hash-table' instead.
-
-*** Minor change in the function `format'.
-
-Some flags that were accepted but not implemented (such as "*") are no
-longer accepted.
-
-*** `add-to-list' takes an optional third argument, APPEND.
-
-If APPEND is non-nil, the new element gets added at the end of the
-list instead of at the beginning. This change actually occurred in
-Emacs 21.1, but was not documented then.
-
-*** New function `add-to-ordered-list' is like `add-to-list' but
-associates a numeric ordering of each element added to the list.
-
-*** New function `add-to-history' adds an element to a history list.
-
-Lisp packages should use this function to add elements to their
-history lists.
-
-If `history-delete-duplicates' is non-nil, it removes duplicates of
-the new element from the history list it updates.
-
-*** New function `copy-tree' makes a copy of a tree.
-
-It recursively copies through both CARs and CDRs.
-
-*** New function `delete-dups' deletes `equal' duplicate elements from a list.
-
-It modifies the list destructively, like `delete'. Of several `equal'
-occurrences of an element in the list, the one that's kept is the
-first one.
-
-*** New function `rassq-delete-all'.
-
-(rassq-delete-all VALUE ALIST) deletes, from ALIST, each element whose
-CDR is `eq' to the specified value.
-
-*** Functions `get' and `plist-get' no longer give errors for bad plists.
-
-They return nil for a malformed property list or if the list is
-cyclic.
-
-*** New functions `lax-plist-get' and `lax-plist-put'.
-
-They are like `plist-get' and `plist-put', except that they compare
-the property name using `equal' rather than `eq'.
-
-*** The function `number-sequence' makes a list of equally-separated numbers.
-
-For instance, (number-sequence 4 9) returns (4 5 6 7 8 9). By
-default, the separation is 1, but you can specify a different
-separation as the third argument. (number-sequence 1.5 6 2) returns
-(1.5 3.5 5.5).
-
-*** New variables `most-positive-fixnum' and `most-negative-fixnum'.
-
-They hold the largest and smallest possible integer values.
-
-*** The function `expt' handles negative exponents differently.
-The value for `(expt A B)', if both A and B are integers and B is
-negative, is now a float. For example: (expt 2 -2) => 0.25.
-
-*** The function `atan' now accepts an optional second argument.
-
-When called with 2 arguments, as in `(atan Y X)', `atan' returns the
-angle in radians between the vector [X, Y] and the X axis. (This is
-equivalent to the standard C library function `atan2'.)
-
-*** New macro `with-case-table'
-
-This executes the body with the case table temporarily set to a given
-case table.
-
-*** New macro `with-local-quit' temporarily allows quitting.
-
-A quit inside the body of `with-local-quit' is caught by the
-`with-local-quit' form itself, but another quit will happen later once
-the code that has inhibited quitting exits.
-
-This is for use around potentially blocking or long-running code
-inside timer functions and `post-command-hook' functions.
-
-*** New macro `define-obsolete-function-alias'.
-
-This combines `defalias' and `make-obsolete'.
-
-*** New macro `eval-at-startup' specifies expressions to
-evaluate when Emacs starts up. If this is done after startup,
-it evaluates those expressions immediately.
-
-This is useful in packages that can be preloaded.
-
-*** New function `macroexpand-all' expands all macros in a form.
-
-It is similar to the Common-Lisp function of the same name.
-One difference is that it guarantees to return the original argument
-if no expansion is done, which can be tested using `eq'.
-
-*** A function or macro's doc string can now specify the calling pattern.
-
-You put this info in the doc string's last line. It should be
-formatted so as to match the regexp "\n\n(fn .*)\\'". If you don't
-specify this explicitly, Emacs determines it from the actual argument
-names. Usually that default is right, but not always.
-
-*** New variable `print-continuous-numbering'.
-
-When this is non-nil, successive calls to print functions use a single
-numbering scheme for circular structure references. This is only
-relevant when `print-circle' is non-nil.
-
-When you bind `print-continuous-numbering' to t, you should
-also bind `print-number-table' to nil.
-
-*** `list-faces-display' takes an optional argument, REGEXP.
-
-If it is non-nil, the function lists only faces matching this regexp.
-
-*** New hook `command-error-function'.
-
-By setting this variable to a function, you can control
-how the editor command loop shows the user an error message.
-
-*** `debug-on-entry' accepts primitive functions that are not special forms.
-
-** Lisp code indentation features:
-
-*** The `defmacro' form can contain indentation and edebug declarations.
-
-These declarations specify how to indent the macro calls in Lisp mode
-and how to debug them with Edebug. You write them like this:
-
- (defmacro NAME LAMBDA-LIST [DOC-STRING] [DECLARATION ...] ...)
-
-DECLARATION is a list `(declare DECLARATION-SPECIFIER ...)'. The
-possible declaration specifiers are:
-
-(indent INDENT)
- Set NAME's `lisp-indent-function' property to INDENT.
-
-(edebug DEBUG)
- Set NAME's `edebug-form-spec' property to DEBUG. (This is
- equivalent to writing a `def-edebug-spec' for the macro,
- but this is cleaner.)
-
-*** cl-indent now allows customization of Indentation of backquoted forms.
-
-See the new user option `lisp-backquote-indentation'.
-
-*** cl-indent now handles indentation of simple and extended `loop' forms.
-
-The new user options `lisp-loop-keyword-indentation',
-`lisp-loop-forms-indentation', and `lisp-simple-loop-indentation' can
-be used to customize the indentation of keywords and forms in loop
-forms.
-
-** Variable aliases:
-
-*** New function: defvaralias ALIAS-VAR BASE-VAR [DOCSTRING]
-
-This function defines the symbol ALIAS-VAR as a variable alias for
-symbol BASE-VAR. This means that retrieving the value of ALIAS-VAR
-returns the value of BASE-VAR, and changing the value of ALIAS-VAR
-changes the value of BASE-VAR.
-
-DOCSTRING, if present, is the documentation for ALIAS-VAR; else it has
-the same documentation as BASE-VAR.
-
-*** The macro `define-obsolete-variable-alias' combines `defvaralias' and
-`make-obsolete-variable'.
-
-*** New function: indirect-variable VARIABLE
-
-This function returns the variable at the end of the chain of aliases
-of VARIABLE. If VARIABLE is not a symbol, or if VARIABLE is not
-defined as an alias, the function returns VARIABLE.
-
-It might be noteworthy that variables aliases work for all kinds of
-variables, including buffer-local and frame-local variables.
-
-** defcustom changes:
-
-*** The package-version keyword has been added to provide
-`customize-changed-options' functionality to packages in the future.
-Developers who make use of this keyword must also update the new
-variable `customize-package-emacs-version-alist'.
-
-*** The new customization type `float' requires a floating point number.
-
-** String changes:
-
-*** A hex escape in a string constant forces the string to be multibyte.
-
-*** An octal escape in a string constant forces the string to be unibyte.
-
-*** New function `string-to-multibyte' converts a unibyte string to a
-multibyte string with the same individual character codes.
-
-*** `split-string' now includes null substrings in the returned list if
-the optional argument SEPARATORS is non-nil and there are matches for
-SEPARATORS at the beginning or end of the string. If SEPARATORS is
-nil, or if the new optional third argument OMIT-NULLS is non-nil, all
-empty matches are omitted from the returned list.
-
-*** The new function `assoc-string' replaces `assoc-ignore-case' and
-`assoc-ignore-representation', which are still available, but have
-been declared obsolete.
-
-*** New function `substring-no-properties' returns a substring without
-text properties.
-
-** Displaying warnings to the user.
-
-See the functions `warn' and `display-warning', or the Lisp Manual.
-If you want to be sure the warning will not be overlooked, this
-facility is much better than using `message', since it displays
-warnings in a separate window.
-
-** Progress reporters.
-
-These provide a simple and uniform way for commands to present
-progress messages for the user.
-
-See the new functions `make-progress-reporter',
-`progress-reporter-update', `progress-reporter-force-update',
-`progress-reporter-done', and `dotimes-with-progress-reporter'.
-
-** Buffer positions:
-
-*** Function `compute-motion' now calculates the usable window
-width if the WIDTH argument is nil. If the TOPOS argument is nil,
-the usable window height and width is used.
-
-*** The `line-move', `scroll-up', and `scroll-down' functions will now
-modify the window vscroll to scroll through display rows that are
-taller that the height of the window, for example in the presence of
-large images. To disable this feature, bind the new variable
-`auto-window-vscroll' to nil.
-
-*** The argument to `forward-word', `backward-word' is optional.
-
-It defaults to 1.
-
-*** Argument to `forward-to-indentation' and `backward-to-indentation' is optional.
-
-It defaults to 1.
-
-*** `field-beginning' and `field-end' take new optional argument, LIMIT.
-
-This argument tells them not to search beyond LIMIT. Instead they
-give up and return LIMIT.
-
-*** New function `window-line-height' is an efficient way to get
-information about a specific text line in a window provided that the
-window's display is up-to-date.
-
-*** New function `line-number-at-pos' returns the line number of a position.
-
-It an optional buffer position argument that defaults to point.
-
-*** Function `pos-visible-in-window-p' now returns the pixel coordinates
-and partial visibility state of the corresponding row, if the PARTIALLY
-arg is non-nil.
-
-*** New functions `posn-at-point' and `posn-at-x-y' return
-click-event-style position information for a given visible buffer
-position or for a given window pixel coordinate.
-
-*** New function `mouse-on-link-p' tests if a position is in a clickable link.
-
-This is the function used by the new `mouse-1-click-follows-link'
-functionality.
-
-** Text modification:
-
-*** The new function `buffer-chars-modified-tick' returns a buffer's
-tick counter for changes to characters. Each time text in that buffer
-is inserted or deleted, the character-change counter is updated to the
-tick counter (`buffer-modified-tick'). Text property changes leave it
-unchanged.
-
-*** The new function `insert-for-yank' normally works like `insert', but
-removes the text properties in the `yank-excluded-properties' list
-and handles the `yank-handler' text property.
-
-*** The new function `insert-buffer-substring-as-yank' is like
-`insert-for-yank' except that it gets the text from another buffer as
-in `insert-buffer-substring'.
-
-*** The new function `insert-buffer-substring-no-properties' is like
-`insert-buffer-substring', but removes all text properties from the
-inserted substring.
-
-*** The new function `filter-buffer-substring' extracts a buffer
-substring, passes it through a set of filter functions, and returns
-the filtered substring. Use it instead of `buffer-substring' or
-`delete-and-extract-region' when copying text into a user-accessible
-data structure, such as the kill-ring, X clipboard, or a register.
-
-The list of filter function is specified by the new variable
-`buffer-substring-filters'. For example, Longlines mode adds to
-`buffer-substring-filters' to remove soft newlines from the copied
-text.
-
-*** Function `translate-region' accepts also a char-table as TABLE
-argument.
-
-*** The new translation table `translation-table-for-input'
-is used for customizing self-insertion. The character to
-be inserted is translated through it.
-
-*** Text clones.
-
-The new function `text-clone-create'. Text clones are chunks of text
-that are kept identical by transparently propagating changes from one
-clone to the other.
-
-*** The function `insert-string' is now obsolete.
-
-** Filling changes.
-
-*** In determining an adaptive fill prefix, Emacs now tries the function in
-`adaptive-fill-function' _before_ matching the buffer line against
-`adaptive-fill-regexp' rather than _after_ it.
-
-** Atomic change groups.
-
-To perform some changes in the current buffer "atomically" so that
-they either all succeed or are all undone, use `atomic-change-group'
-around the code that makes changes. For instance:
-
- (atomic-change-group
- (insert foo)
- (delete-region x y))
-
-If an error (or other nonlocal exit) occurs inside the body of
-`atomic-change-group', it unmakes all the changes in that buffer that
-were during the execution of the body. The change group has no effect
-on any other buffers--any such changes remain.
-
-If you need something more sophisticated, you can directly call the
-lower-level functions that `atomic-change-group' uses. Here is how.
-
-To set up a change group for one buffer, call `prepare-change-group'.
-Specify the buffer as argument; it defaults to the current buffer.
-This function returns a "handle" for the change group. You must save
-the handle to activate the change group and then finish it.
-
-Before you change the buffer again, you must activate the change
-group. Pass the handle to `activate-change-group' afterward to
-do this.
-
-After you make the changes, you must finish the change group. You can
-either accept the changes or cancel them all. Call
-`accept-change-group' to accept the changes in the group as final;
-call `cancel-change-group' to undo them all.
-
-You should use `unwind-protect' to make sure the group is always
-finished. The call to `activate-change-group' should be inside the
-`unwind-protect', in case the user types C-g just after it runs.
-(This is one reason why `prepare-change-group' and
-`activate-change-group' are separate functions.) Once you finish the
-group, don't use the handle again--don't try to finish the same group
-twice.
-
-To make a multibuffer change group, call `prepare-change-group' once
-for each buffer you want to cover, then use `nconc' to combine the
-returned values, like this:
-
- (nconc (prepare-change-group buffer-1)
- (prepare-change-group buffer-2))
-
-You can then activate the multibuffer change group with a single call
-to `activate-change-group', and finish it with a single call to
-`accept-change-group' or `cancel-change-group'.
-
-Nested use of several change groups for the same buffer works as you
-would expect. Non-nested use of change groups for the same buffer
-will lead to undesirable results, so don't let it happen; the first
-change group you start for any given buffer should be the last one
-finished.
-
-** Buffer-related changes:
-
-*** The new function `buffer-local-value' returns the buffer-local
-binding of VARIABLE (a symbol) in buffer BUFFER. If VARIABLE does not
-have a buffer-local binding in buffer BUFFER, it returns the default
-value of VARIABLE instead.
-
-*** `list-buffers-noselect' now takes an additional argument, BUFFER-LIST.
-
-If it is non-nil, it specifies which buffers to list.
-
-*** `kill-buffer-hook' is now a permanent local.
-
-*** The function `frame-or-buffer-changed-p' now lets you maintain
-various status records in parallel.
-
-It takes a variable (a symbol) as argument. If the variable is non-nil,
-then its value should be a vector installed previously by
-`frame-or-buffer-changed-p'. If the frame names, buffer names, buffer
-order, or their read-only or modified flags have changed, since the
-time the vector's contents were recorded by a previous call to
-`frame-or-buffer-changed-p', then the function returns t. Otherwise
-it returns nil.
-
-On the first call to `frame-or-buffer-changed-p', the variable's
-value should be nil. `frame-or-buffer-changed-p' stores a suitable
-vector into the variable and returns t.
-
-If the variable is itself nil, then `frame-or-buffer-changed-p' uses,
-for compatibility, an internal variable which exists only for this
-purpose.
-
-*** The function `read-buffer' follows the convention for reading from
-the minibuffer with a default value: if DEF is non-nil, the minibuffer
-prompt provided in PROMPT is edited to show the default value provided
-in DEF before the terminal colon and space.
-
-** Searching and matching changes:
-
-*** New function `looking-back' checks whether a regular expression matches
-the text before point. Specifying the LIMIT argument bounds how far
-back the match can start; this is a way to keep it from taking too long.
-
-*** The new variable `search-spaces-regexp' controls how to search
-for spaces in a regular expression. If it is non-nil, it should be a
-regular expression, and any series of spaces stands for that regular
-expression. If it is nil, spaces stand for themselves.
-
-Spaces inside of constructs such as `[..]' and inside loops such as
-`*', `+', and `?' are never replaced with `search-spaces-regexp'.
-
-*** New regular expression operators, `\_<' and `\_>'.
-
-These match the beginning and end of a symbol. A symbol is a
-non-empty sequence of either word or symbol constituent characters, as
-specified by the syntax table.
-
-*** `skip-chars-forward' and `skip-chars-backward' now handle
-character classes such as `[:alpha:]', along with individual
-characters and ranges.
-
-*** In `replace-match', the replacement text no longer inherits
-properties from surrounding text.
-
-*** The list returned by `(match-data t)' now has the buffer as a final
-element, if the last match was on a buffer. `set-match-data'
-accepts such a list for restoring the match state.
-
-*** Functions `match-data' and `set-match-data' now have an optional
-argument `reseat'. When non-nil, all markers in the match data list
-passed to these functions will be reseated to point to nowhere.
-
-*** rx.el has new corresponding `symbol-start' and `symbol-end' elements.
-
-*** The default value of `sentence-end' is now defined using the new
-variable `sentence-end-without-space', which contains such characters
-that end a sentence without following spaces.
-
-The function `sentence-end' should be used to obtain the value of the
-variable `sentence-end'. If the variable `sentence-end' is nil, then
-this function returns the regexp constructed from the variables
-`sentence-end-without-period', `sentence-end-double-space' and
-`sentence-end-without-space'.
-
-** Undo changes:
-
-*** `buffer-undo-list' allows programmable elements.
-
-These elements have the form (apply FUNNAME . ARGS), where FUNNAME is
-a symbol other than t or nil. That stands for a high-level change
-that should be undone by evaluating (apply FUNNAME ARGS).
-
-These entries can also have the form (apply DELTA BEG END FUNNAME . ARGS)
-which indicates that the change which took place was limited to the
-range BEG...END and increased the buffer size by DELTA.
-
-*** If the buffer's undo list for the current command gets longer than
-`undo-outer-limit', garbage collection empties it. This is to prevent
-it from using up the available memory and choking Emacs.
-
-** Killing and yanking changes:
-
-*** New `yank-handler' text property can be used to control how
-previously killed text on the kill ring is reinserted.
-
-The value of the `yank-handler' property must be a list with one to four
-elements with the following format:
- (FUNCTION PARAM NOEXCLUDE UNDO).
-
-The `insert-for-yank' function looks for a yank-handler property on
-the first character on its string argument (typically the first
-element on the kill-ring). If a `yank-handler' property is found,
-the normal behavior of `insert-for-yank' is modified in various ways:
-
- When FUNCTION is present and non-nil, it is called instead of `insert'
-to insert the string. FUNCTION takes one argument--the object to insert.
- If PARAM is present and non-nil, it replaces STRING as the object
-passed to FUNCTION (or `insert'); for example, if FUNCTION is
-`yank-rectangle', PARAM should be a list of strings to insert as a
-rectangle.
- If NOEXCLUDE is present and non-nil, the normal removal of the
-`yank-excluded-properties' is not performed; instead FUNCTION is
-responsible for removing those properties. This may be necessary
-if FUNCTION adjusts point before or after inserting the object.
- If UNDO is present and non-nil, it is a function that will be called
-by `yank-pop' to undo the insertion of the current object. It is
-called with two arguments, the start and end of the current region.
-FUNCTION can set `yank-undo-function' to override the UNDO value.
-
-*** The functions `kill-new', `kill-append', and `kill-region' now have an
-optional argument to specify the `yank-handler' text property to put on
-the killed text.
-
-*** The function `yank-pop' will now use a non-nil value of the variable
-`yank-undo-function' (instead of `delete-region') to undo the previous
-`yank' or `yank-pop' command (or a call to `insert-for-yank'). The function
-`insert-for-yank' automatically sets that variable according to the UNDO
-element of the string argument's `yank-handler' text property if present.
-
-*** The function `insert-for-yank' now supports strings where the
-`yank-handler' property does not span the first character of the
-string. The old behavior is available if you call
-`insert-for-yank-1' instead.
-
-** Syntax table changes:
-
-*** The new function `syntax-ppss' provides an efficient way to find the
-current syntactic context at point.
-
-*** The new function `syntax-after' returns the syntax code
-of the character after a specified buffer position, taking account
-of text properties as well as the character code.
-
-*** `syntax-class' extracts the class of a syntax code (as returned
-by `syntax-after').
-
-*** The macro `with-syntax-table' no longer copies the syntax table.
-
-** File operation changes:
-
-*** New vars `exec-suffixes' and `load-suffixes' used when
-searching for an executable or an Emacs Lisp file.
-
-*** New function `locate-file' searches for a file in a list of directories.
-`locate-file' accepts a name of a file to search (a string), and two
-lists: a list of directories to search in and a list of suffixes to
-try; typical usage might use `exec-path' and `load-path' for the list
-of directories, and `exec-suffixes' and `load-suffixes' for the list
-of suffixes. The function also accepts a predicate argument to
-further filter candidate files.
-
-One advantage of using this function is that the list of suffixes in
-`exec-suffixes' is OS-dependant, so this function will find
-executables without polluting Lisp code with OS dependencies.
-
-*** The new function `file-remote-p' tests a file name and returns
-non-nil if it specifies a remote file (one that Emacs accesses using
-its own special methods and not directly through the file system).
-The value in that case is an identifier for the remote file system.
-
-*** The new hook `before-save-hook' is invoked by `basic-save-buffer'
-before saving buffers. This allows packages to perform various final
-tasks. For example, it can be used by the copyright package to make
-sure saved files have the current year in any copyright headers.
-
-*** `file-chase-links' now takes an optional second argument LIMIT which
-specifies the maximum number of links to chase through. If after that
-many iterations the file name obtained is still a symbolic link,
-`file-chase-links' returns it anyway.
-
-*** Functions `file-name-sans-extension' and `file-name-extension' now
-ignore the leading dots in file names, so that file names such as
-`.emacs' are treated as extensionless.
-
-*** If `buffer-save-without-query' is non-nil in some buffer,
-`save-some-buffers' will always save that buffer without asking (if
-it's modified).
-
-*** `buffer-auto-save-file-format' is the new name for what was
-formerly called `auto-save-file-format'. It is now a permanent local.
-
-*** `visited-file-modtime' and `calendar-time-from-absolute' now return
-a list of two integers, instead of a cons.
-
-*** The precedence of file name handlers has been changed.
-
-Instead of choosing the first handler that matches,
-`find-file-name-handler' now gives precedence to a file name handler
-that matches nearest the end of the file name. More precisely, the
-handler whose (match-beginning 0) is the largest is chosen. In case
-of ties, the old "first matched" rule applies.
-
-*** A file name handler can declare which operations it handles.
-
-You do this by putting an `operation' property on the handler name
-symbol. The property value should be a list of the operations that
-the handler really handles. It won't be called for any other
-operations.
-
-This is useful for autoloaded handlers, to prevent them from being
-autoloaded when not really necessary.
-
-*** The function `make-auto-save-file-name' is now handled by file
-name handlers. This will be exploited for remote files mainly.
-
-*** The function `file-name-completion' accepts an optional argument
-PREDICATE, and rejects completion candidates that don't satisfy PREDICATE.
-
-*** The new primitive `set-file-times' sets a file's access and
-modification times. Magic file name handlers can handle this
-operation.
-
-** Input changes:
-
-*** Functions `y-or-n-p', `read-char', `read-key-sequence' and the like, that
-display a prompt but don't use the minibuffer, now display the prompt
-using the text properties (esp. the face) of the prompt string.
-
-*** The functions `read-event', `read-char', and `read-char-exclusive'
-have a new optional argument SECONDS. If non-nil, this specifies a
-maximum time to wait for input, in seconds. If no input arrives after
-this time elapses, the functions stop waiting and return nil.
-
-*** An interactive specification can now use the code letter `U' to get
-the up-event that was discarded in case the last key sequence read for a
-previous `k' or `K' argument was a down-event; otherwise nil is used.
-
-*** The new interactive-specification `G' reads a file name
-much like `F', but if the input is a directory name (even defaulted),
-it returns just the directory name.
-
-*** (while-no-input BODY...) runs BODY, but only so long as no input
-arrives. If the user types or clicks anything, BODY stops as if a
-quit had occurred. `while-no-input' returns the value of BODY, if BODY
-finishes. It returns nil if BODY was aborted by a quit, and t if
-BODY was aborted by arrival of input.
-
-*** `recent-keys' now returns the last 300 keys.
-
-** Minibuffer changes:
-
-*** The new function `minibufferp' returns non-nil if its optional
-buffer argument is a minibuffer. If the argument is omitted, it
-defaults to the current buffer.
-
-*** New function `minibuffer-selected-window' returns the window which
-was selected when entering the minibuffer.
-
-*** The `read-file-name' function now takes an additional argument which
-specifies a predicate which the file name read must satisfy. The
-new variable `read-file-name-predicate' contains the predicate argument
-while reading the file name from the minibuffer; the predicate in this
-variable is used by read-file-name-internal to filter the completion list.
-
-*** The new variable `read-file-name-function' can be used by Lisp code
-to override the built-in `read-file-name' function.
-
-*** The new variable `read-file-name-completion-ignore-case' specifies
-whether completion ignores case when reading a file name with the
-`read-file-name' function.
-
-*** The new function `read-directory-name' is for reading a directory name.
-
-It is like `read-file-name' except that the defaulting works better
-for directories, and completion inside it shows only directories.
-
-*** The new variable `history-add-new-input' specifies whether to add new
-elements in history. If set to nil, minibuffer reading functions don't
-add new elements to the history list, so it is possible to do this
-afterwards by calling `add-to-history' explicitly.
-
-** Completion changes:
-
-*** The new function `minibuffer-completion-contents' returns the contents
-of the minibuffer just before point. That is what completion commands
-operate on.
-
-*** The functions `all-completions' and `try-completion' now accept lists
-of strings as well as hash-tables additionally to alists, obarrays
-and functions. Furthermore, the function `test-completion' is now
-exported to Lisp. The keys in alists and hash tables can be either
-strings or symbols, which are automatically converted with to strings.
-
-*** The new macro `dynamic-completion-table' supports using functions
-as a dynamic completion table.
-
- (dynamic-completion-table FUN)
-
-FUN is called with one argument, the string for which completion is required,
-and it should return an alist containing all the intended possible
-completions. This alist can be a full list of possible completions so that FUN
-can ignore the value of its argument. If completion is performed in the
-minibuffer, FUN will be called in the buffer from which the minibuffer was
-entered. `dynamic-completion-table' then computes the completion.
-
-*** The new macro `lazy-completion-table' initializes a variable
-as a lazy completion table.
-
- (lazy-completion-table VAR FUN)
-
-If the completion table VAR is used for the first time (e.g., by passing VAR
-as an argument to `try-completion'), the function FUN is called with no
-arguments. FUN must return the completion table that will be stored in VAR.
-If completion is requested in the minibuffer, FUN will be called in the buffer
-from which the minibuffer was entered. The return value of
-`lazy-completion-table' must be used to initialize the value of VAR.
-
-** Abbrev changes:
-
-*** `define-abbrev' now accepts an optional argument SYSTEM-FLAG.
-
-If non-nil, this marks the abbrev as a "system" abbrev, which means
-that it won't be stored in the user's abbrevs file if he saves the
-abbrevs. Major modes that predefine some abbrevs should always
-specify this flag.
-
-*** The new function `copy-abbrev-table' copies an abbrev table.
-
-It returns a new abbrev table that is a copy of a given abbrev table.
-
-** Enhancements to keymaps.
-
-*** Cleaner way to enter key sequences.
-
-You can enter a constant key sequence in a more natural format, the
-same one used for saving keyboard macros, using the macro `kbd'. For
-example,
-
-(kbd "C-x C-f") => "\^x\^f"
-
-Actually, this format has existed since Emacs 20.1.
-
-*** Interactive commands can be remapped through keymaps.
-
-This is an alternative to using `defadvice' or `substitute-key-definition'
-to modify the behavior of a key binding using the normal keymap
-binding and lookup functionality.
-
-When a key sequence is bound to a command, and that command is
-remapped to another command, that command is run instead of the
-original command.
-
-Example:
-Suppose that minor mode `my-mode' has defined the commands
-`my-kill-line' and `my-kill-word', and it wants C-k (and any other key
-bound to `kill-line') to run the command `my-kill-line' instead of
-`kill-line', and likewise it wants to run `my-kill-word' instead of
-`kill-word'.
-
-Instead of rebinding C-k and the other keys in the minor mode map,
-command remapping allows you to directly map `kill-line' into
-`my-kill-line' and `kill-word' into `my-kill-word' using `define-key':
+* Lisp Changes in Emacs 23.1
- (define-key my-mode-map [remap kill-line] 'my-kill-line)
- (define-key my-mode-map [remap kill-word] 'my-kill-word)
-
-When `my-mode' is enabled, its minor mode keymap is enabled too. So
-when the user types C-k, that runs the command `my-kill-line'.
-
-Only one level of remapping is supported. In the above example, this
-means that if `my-kill-line' is remapped to `other-kill', then C-k still
-runs `my-kill-line'.
-
-The following changes have been made to provide command remapping:
-
-- Command remappings are defined using `define-key' with a prefix-key
- `remap', i.e. `(define-key MAP [remap CMD] DEF)' remaps command CMD
- to definition DEF in keymap MAP. The definition is not limited to
- another command; it can be anything accepted for a normal binding.
-
-- The new function `command-remapping' returns the binding for a
- remapped command in the current keymaps, or nil if not remapped.
-
-- `key-binding' now remaps interactive commands unless the optional
- third argument NO-REMAP is non-nil.
-
-- `where-is-internal' now returns nil for a remapped command (e.g.
- `kill-line', when `my-mode' is enabled), and the actual key binding for
- the command it is remapped to (e.g. C-k for my-kill-line).
- It also has a new optional fifth argument, NO-REMAP, which inhibits
- remapping if non-nil (e.g. it returns "C-k" for `kill-line', and
- "<kill-line>" for `my-kill-line').
-
-- The new variable `this-original-command' contains the original
- command before remapping. It is equal to `this-command' when the
- command was not remapped.
-
-*** The definition of a key-binding passed to define-key can use XEmacs-style
-key-sequences, such as [(control a)].
-
-*** New keymaps for typing file names
-
-Two new keymaps, `minibuffer-local-filename-completion-map' and
-`minibuffer-local-must-match-filename-map', apply whenever
-Emacs reads a file name in the minibuffer. These key maps override
-the usual binding of SPC to `minibuffer-complete-word' (so that file
-names with embedded spaces could be typed without the need to quote
-the spaces).
-
-*** New function `current-active-maps' returns a list of currently
-active keymaps.
-
-*** New function `describe-buffer-bindings' inserts the list of all
-defined keys and their definitions.
-
-*** New function `keymap-prompt' returns the prompt string of a keymap.
-
-*** If text has a `keymap' property, that keymap takes precedence
-over minor mode keymaps.
-
-*** The `keymap' property now also works at the ends of overlays and
-text properties, according to their stickiness. This also means that it
-works with empty overlays. The same hold for the `local-map' property.
-
-*** `key-binding' will now look up mouse-specific bindings. The
-keymaps consulted by `key-binding' will get adapted if the key
-sequence is started with a mouse event. Instead of letting the click
-position be determined from the key sequence itself, it is also
-possible to specify it with an optional argument explicitly.
-
-*** `define-key-after' now accepts keys longer than 1.
-
-*** (map-keymap FUNCTION KEYMAP) applies the function to each binding
-in the keymap.
-
-*** New variable `emulation-mode-map-alists'.
-
-Lisp packages using many minor mode keymaps can now maintain their own
-keymap alist separate from `minor-mode-map-alist' by adding their
-keymap alist to this list.
-
-*** Dense keymaps now handle inheritance correctly.
-
-Previously a dense keymap would hide all of the simple-char key
-bindings of the parent keymap.
-
-** Enhancements to process support
-
-*** Adaptive read buffering of subprocess output.
-
-On some systems, when Emacs reads the output from a subprocess, the
-output data is read in very small blocks, potentially resulting in
-very poor performance. This behavior can be remedied to some extent
-by setting the new variable `process-adaptive-read-buffering' to a
-non-nil value (the default), as it will automatically delay reading
-from such processes, allowing them to produce more output before
-Emacs tries to read it.
-
-*** Processes now have an associated property list where programs can
-maintain process state and other per-process related information.
-
-Use the new functions `process-get' and `process-put' to access, add,
-and modify elements on this property list. Use the new functions
-`process-plist' and `set-process-plist' to access and replace the
-entire property list of a process.
-
-*** Function `list-processes' now has an optional argument; if non-nil,
-it lists only the processes whose query-on-exit flag is set.
-
-*** New fns `set-process-query-on-exit-flag' and `process-query-on-exit-flag'.
-
-These replace the old function `process-kill-without-query'. That
-function is still supported, but new code should use the new
-functions.
-
-*** The new function `call-process-shell-command'.
-
-This executes a shell command synchronously in a separate process.
-
-*** The new function `process-file' is similar to `call-process', but
-obeys file handlers. The file handler is chosen based on
-`default-directory'.
-
-*** Function `signal-process' now accepts a process object or process
-name in addition to a process id to identify the signaled process.
-
-*** Function `accept-process-output' has a new optional fourth arg
-JUST-THIS-ONE. If non-nil, only output from the specified process
-is handled, suspending output from other processes. If value is an
-integer, also inhibit running timers. This feature is generally not
-recommended, but may be necessary for specific applications, such as
-speech synthesis.
-
-*** A process filter function gets the output as multibyte string
-if the process specifies t for its filter's multibyteness.
-
-That multibyteness is decided by the value of
-`default-enable-multibyte-characters' when the process is created, and
-you can change it later with `set-process-filter-multibyte'.
-
-*** The new function `set-process-filter-multibyte' sets the
-multibyteness of the strings passed to the process's filter.
-
-*** The new function `process-filter-multibyte-p' returns the
-multibyteness of the strings passed to the process's filter.
-
-*** If a process's coding system is `raw-text' or `no-conversion' and its
-buffer is multibyte, the output of the process is at first converted
-to multibyte by `string-to-multibyte' then inserted in the buffer.
-Previously, it was converted to multibyte by `string-as-multibyte',
-which was not compatible with the behavior of file reading.
-
-** Enhanced networking support.
-
-*** The new `make-network-process' function makes network connections.
-It allows opening of stream and datagram connections to a server, as well as
-create a stream or datagram server inside Emacs.
-
-- A server is started using :server t arg.
-- Datagram connection is selected using :type 'datagram arg.
-- A server can open on a random port using :service t arg.
-- Local sockets are supported using :family 'local arg.
-- IPv6 is supported (when available). You may explicitly select IPv6
- using :family 'ipv6 arg.
-- Non-blocking connect is supported using :nowait t arg.
-- The process' property list can be initialized using :plist PLIST arg;
- a copy of the server process' property list is automatically inherited
- by new client processes created to handle incoming connections.
-
-To test for the availability of a given feature, use featurep like this:
- (featurep 'make-network-process '(:type datagram))
- (featurep 'make-network-process '(:family ipv6))
-
-*** The old `open-network-stream' now uses `make-network-process'.
-
-*** `process-contact' has an optional KEY argument.
-
-Depending on this argument, you can get the complete list of network
-process properties or a specific property. Using :local or :remote as
-the KEY, you get the address of the local or remote end-point.
-
-An Inet address is represented as a 5 element vector, where the first
-4 elements contain the IP address and the fifth is the port number.
-
-*** New functions `stop-process' and `continue-process'.
-
-These functions stop and restart communication through a network
-connection. For a server process, no connections are accepted in the
-stopped state. For a client process, no input is received in the
-stopped state.
-
-*** New function `format-network-address'.
-
-This function reformats the Lisp representation of a network address
-to a printable string. For example, an IP address A.B.C.D and port
-number P is represented as a five element vector [A B C D P], and the
-printable string returned for this vector is "A.B.C.D:P". See the doc
-string for other formatting options.
-
-*** New function `network-interface-list'.
-
-This function returns a list of network interface names and their
-current network addresses.
-
-*** New function `network-interface-info'.
-
-This function returns the network address, hardware address, current
-status, and other information about a specific network interface.
-
-*** New functions `process-datagram-address', `set-process-datagram-address'.
-
-These functions are used with datagram-based network processes to get
-and set the current address of the remote partner.
-
-*** Deleting a network process with `delete-process' calls the sentinel.
-
-The status message passed to the sentinel for a deleted network
-process is "deleted". The message passed to the sentinel when the
-connection is closed by the remote peer has been changed to
-"connection broken by remote peer".
-
-** Using window objects:
-
-*** You can now make a window as short as one line.
-
-A window that is just one line tall does not display either a mode
-line or a header line, even if the variables `mode-line-format' and
-`header-line-format' call for them. A window that is two lines tall
-cannot display both a mode line and a header line at once; if the
-variables call for both, only the mode line actually appears.
-
-*** The new function `window-inside-edges' returns the edges of the
-actual text portion of the window, not including the scroll bar or
-divider line, the fringes, the display margins, the header line and
-the mode line.
-
-*** The new functions `window-pixel-edges' and `window-inside-pixel-edges'
-return window edges in units of pixels, rather than columns and lines.
-
-*** New function `window-body-height'.
-
-This is like `window-height' but does not count the mode line or the
-header line.
-
-*** The new function `adjust-window-trailing-edge' moves the right
-or bottom edge of a window. It does not move other window edges.
-
-*** The new macro `with-selected-window' temporarily switches the
-selected window without impacting the order of `buffer-list'.
-It saves and restores the current buffer, too.
-
-*** `select-window' takes an optional second argument NORECORD.
-
-This is like `switch-to-buffer'.
-
-*** `save-selected-window' now saves and restores the selected window
-of every frame. This way, it restores everything that can be changed
-by calling `select-window'. It also saves and restores the current
-buffer.
-
-*** `set-window-buffer' has an optional argument KEEP-MARGINS.
-
-If non-nil, that says to preserve the window's current margin, fringe,
-and scroll-bar settings.
-
-*** The new function `window-tree' returns a frame's window tree.
-
-*** The functions `get-lru-window' and `get-largest-window' take an optional
-argument `dedicated'. If non-nil, those functions do not ignore
-dedicated windows.
-
-** Customizable fringe bitmaps
-
-*** There are new display properties, `left-fringe' and `right-fringe',
-that can be used to show a specific bitmap in the left or right fringe
-bitmap of the display line.
-
-Format is `display (left-fringe BITMAP [FACE])', where BITMAP is a
-symbol identifying a fringe bitmap, either built-in or defined with
-`define-fringe-bitmap', and FACE is an optional face name to be used
-for displaying the bitmap instead of the default `fringe' face.
-When specified, FACE is automatically merged with the `fringe' face.
-
-*** New buffer-local variables `fringe-indicator-alist' and
-`fringe-cursor-alist' maps between logical (internal) fringe indicator
-and cursor symbols and the actual fringe bitmaps to be displayed.
-This decouples the logical meaning of the fringe indicators from the
-physical appearance, as well as allowing different fringe bitmaps to
-be used in different windows showing different buffers.
-
-*** New function `define-fringe-bitmap' can now be used to create new
-fringe bitmaps, as well as change the built-in fringe bitmaps.
-
-*** New function `destroy-fringe-bitmap' deletes a fringe bitmap
-or restores a built-in one to its default value.
-
-*** New function `set-fringe-bitmap-face' specifies the face to be
-used for a specific fringe bitmap. The face is automatically merged
-with the `fringe' face, so normally, the face should only specify the
-foreground color of the bitmap.
-
-*** New function `fringe-bitmaps-at-pos' returns the current fringe
-bitmaps in the display line at a given buffer position.
-
-** Other window fringe features:
-
-*** Controlling the default left and right fringe widths.
-
-The default left and right fringe widths for all windows of a frame
-can now be controlled by setting the `left-fringe' and `right-fringe'
-frame parameters to an integer value specifying the width in pixels.
-Setting the width to 0 effectively removes the corresponding fringe.
-
-The actual default fringe widths for the frame may deviate from the
-specified widths, since the combined fringe widths must match an
-integral number of columns. The extra width is distributed evenly
-between the left and right fringe. To force a specific fringe width,
-specify the width as a negative integer (if both widths are negative,
-only the left fringe gets the specified width).
-
-Setting the width to nil (the default), restores the default fringe
-width which is the minimum number of pixels necessary to display any
-of the currently defined fringe bitmaps. The width of the built-in
-fringe bitmaps is 8 pixels.
-
-*** Per-window fringe and scrollbar settings
-
-**** Windows can now have their own individual fringe widths and
-position settings.
-
-To control the fringe widths of a window, either set the buffer-local
-variables `left-fringe-width', `right-fringe-width', or call
-`set-window-fringes'.
-
-To control the fringe position in a window, that is, whether fringes
-are positioned between the display margins and the window's text area,
-or at the edges of the window, either set the buffer-local variable
-`fringes-outside-margins' or call `set-window-fringes'.
-
-The function `window-fringes' can be used to obtain the current
-settings. To make `left-fringe-width', `right-fringe-width', and
-`fringes-outside-margins' take effect, you must set them before
-displaying the buffer in a window, or use `set-window-buffer' to force
-an update of the display margins.
-
-**** Windows can now have their own individual scroll-bar settings
-controlling the width and position of scroll-bars.
-
-To control the scroll-bar of a window, either set the buffer-local
-variables `scroll-bar-mode' and `scroll-bar-width', or call
-`set-window-scroll-bars'. The function `window-scroll-bars' can be
-used to obtain the current settings. To make `scroll-bar-mode' and
-`scroll-bar-width' take effect, you must set them before displaying
-the buffer in a window, or use `set-window-buffer' to force an update
-of the display margins.
-
-** Redisplay features:
-
-*** `sit-for' can now be called with args (SECONDS &optional NODISP).
-
-*** Iconifying or deiconifying a frame no longer makes sit-for return.
-
-*** New function `redisplay' causes an immediate redisplay if no input is
-available, equivalent to (sit-for 0). The call (redisplay t) forces
-an immediate redisplay even if input is pending.
-
-*** New function `force-window-update' can initiate a full redisplay of
-one or all windows. Normally, this is not needed as changes in window
-contents are detected automatically. However, certain implicit
-changes to mode lines, header lines, or display properties may require
-forcing an explicit window update.
-
-*** (char-displayable-p CHAR) returns non-nil if Emacs ought to be able
-to display CHAR. More precisely, if the selected frame's fontset has
-a font to display the character set that CHAR belongs to.
-
-Fontsets can specify a font on a per-character basis; when the fontset
-does that, this value cannot be accurate.
-
-*** You can define multiple overlay arrows via the new
-variable `overlay-arrow-variable-list'.
-
-It contains a list of variables which contain overlay arrow position
-markers, including the original `overlay-arrow-position' variable.
-
-Each variable on this list can have individual `overlay-arrow-string'
-and `overlay-arrow-bitmap' properties that specify an overlay arrow
-string (for non-window terminals) or fringe bitmap (for window
-systems) to display at the corresponding overlay arrow position.
-If either property is not set, the default `overlay-arrow-string' or
-'overlay-arrow-fringe-bitmap' will be used.
-
-*** New `line-height' and `line-spacing' properties for newline characters
-
-A newline can now have `line-height' and `line-spacing' text or overlay
-properties that control the height of the corresponding display row.
-
-If the `line-height' property value is t, the newline does not
-contribute to the height of the display row; instead the height of the
-newline glyph is reduced. Also, a `line-spacing' property on this
-newline is ignored. This can be used to tile small images or image
-slices without adding blank areas between the images.
-
-If the `line-height' property value is a positive integer, the value
-specifies the minimum line height in pixels. If necessary, the line
-height it increased by increasing the line's ascent.
-
-If the `line-height' property value is a float, the minimum line
-height is calculated by multiplying the default frame line height by
-the given value.
-
-If the `line-height' property value is a cons (FACE . RATIO), the
-minimum line height is calculated as RATIO * height of named FACE.
-RATIO is int or float. If FACE is t, it specifies the current face.
-
-If the `line-height' property value is a cons (nil . RATIO), the line
-height is calculated as RATIO * actual height of the line's contents.
-
-If the `line-height' value is a cons (HEIGHT . TOTAL), HEIGHT specifies
-the line height as described above, while TOTAL is any of the forms
-described above and specifies the total height of the line, causing a
-varying number of pixels to be inserted after the line to make it line
-exactly that many pixels high.
-
-If the `line-spacing' property value is an positive integer, the value
-is used as additional pixels to insert after the display line; this
-overrides the default frame `line-spacing' and any buffer local value of
-the `line-spacing' variable.
-
-If the `line-spacing' property is a float or cons, the line spacing
-is calculated as specified above for the `line-height' property.
-
-*** The buffer local `line-spacing' variable can now have a float value,
-which is used as a height relative to the default frame line height.
-
-*** Enhancements to stretch display properties
-
-The display property stretch specification form `(space PROPS)', where
-PROPS is a property list, now allows pixel based width and height
-specifications, as well as enhanced horizontal text alignment.
-
-The value of these properties can now be a (primitive) expression
-which is evaluated during redisplay. The following expressions
-are supported:
-
-EXPR ::= NUM | (NUM) | UNIT | ELEM | POS | IMAGE | FORM
-NUM ::= INTEGER | FLOAT | SYMBOL
-UNIT ::= in | mm | cm | width | height
-ELEM ::= left-fringe | right-fringe | left-margin | right-margin
- | scroll-bar | text
-POS ::= left | center | right
-FORM ::= (NUM . EXPR) | (OP EXPR ...)
-OP ::= + | -
-
-The form `NUM' specifies a fractional width or height of the default
-frame font size. The form `(NUM)' specifies an absolute number of
-pixels. If a symbol is specified, its buffer-local variable binding
-is used. The `in', `mm', and `cm' units specifies the number of
-pixels per inch, milli-meter, and centi-meter, resp. The `width' and
-`height' units correspond to the width and height of the current face
-font. An image specification corresponds to the width or height of
-the image.
-
-The `left-fringe', `right-fringe', `left-margin', `right-margin',
-`scroll-bar', and `text' elements specify to the width of the
-corresponding area of the window.
-
-The `left', `center', and `right' positions can be used with :align-to
-to specify a position relative to the left edge, center, or right edge
-of the text area. One of the above window elements (except `text')
-can also be used with :align-to to specify that the position is
-relative to the left edge of the given area. Once the base offset for
-a relative position has been set (by the first occurrence of one of
-these symbols), further occurrences of these symbols are interpreted as
-the width of the area.
-
-For example, to align to the center of the left-margin, use
- :align-to (+ left-margin (0.5 . left-margin))
-
-If no specific base offset is set for alignment, it is always relative
-to the left edge of the text area. For example, :align-to 0 in a
-header line aligns with the first text column in the text area.
-
-The value of the form `(NUM . EXPR)' is the value of NUM multiplied by
-the value of the expression EXPR. For example, (2 . in) specifies a
-width of 2 inches, while (0.5 . IMAGE) specifies half the width (or
-height) of the specified image.
-
-The form `(+ EXPR ...)' adds up the value of the expressions.
-The form `(- EXPR ...)' negates or subtracts the value of the expressions.
-
-*** Normally, the cursor is displayed at the end of any overlay and
-text property string that may be present at the current window
-position. The cursor can now be placed on any character of such
-strings by giving that character a non-nil `cursor' text property.
-
-*** The display space :width and :align-to text properties are now
-supported on text terminals.
-
-*** Support for displaying image slices
-
-**** New display property (slice X Y WIDTH HEIGHT) can be used with
-an image property to display only a specific slice of the image.
-
-**** Function `insert-image' has new optional fourth arg to
-specify image slice (X Y WIDTH HEIGHT).
-
-**** New function `insert-sliced-image' inserts a given image as a
-specified number of evenly sized slices (rows x columns).
-
-*** Images can now have an associated image map via the :map property.
-
-An image map is an alist where each element has the format (AREA ID PLIST).
-An AREA is specified as either a rectangle, a circle, or a polygon:
-A rectangle is a cons (rect . ((X0 . Y0) . (X1 . Y1))) specifying the
-pixel coordinates of the upper left and bottom right corners.
-A circle is a cons (circle . ((X0 . Y0) . R)) specifying the center
-and the radius of the circle; R can be a float or integer.
-A polygon is a cons (poly . [X0 Y0 X1 Y1 ...]) where each pair in the
-vector describes one corner in the polygon.
-
-When the mouse pointer is above a hot-spot area of an image, the
-PLIST of that hot-spot is consulted; if it contains a `help-echo'
-property it defines a tool-tip for the hot-spot, and if it contains
-a `pointer' property, it defines the shape of the mouse cursor when
-it is over the hot-spot. See the variable `void-area-text-pointer'
-for possible pointer shapes.
-
-When you click the mouse when the mouse pointer is over a hot-spot,
-an event is composed by combining the ID of the hot-spot with the
-mouse event, e.g. [area4 mouse-1] if the hot-spot's ID is `area4'.
-
-*** The function `find-image' now searches in etc/images/ and etc/.
-The new variable `image-load-path' is a list of locations in which to
-search for image files. The default is to search in etc/images, then
-in etc/, and finally in the directories specified by `load-path'.
-Subdirectories of etc/ and etc/images are not recursively searched; if
-you put an image file in a subdirectory, you have to specify it
-explicitly; for example, if an image is put in etc/images/foo/bar.xpm:
-
- (defimage foo-image '((:type xpm :file "foo/bar.xpm")))
-
-Note that all images formerly located in the lisp directory have been
-moved to etc/images.
-
-*** New function `image-load-path-for-library' returns a suitable
-search path for images relative to library. This function is useful in
-external packages to save users from having to update
-`image-load-path'.
-
-*** The new variable `max-image-size' defines the maximum size of
-images that Emacs will load and display.
-
-*** The new variable `display-mm-dimensions-alist' can be used to
-override incorrect graphical display dimensions returned by functions
-`display-mm-height' and `display-mm-width'.
-
-** Mouse pointer features:
-
-*** The mouse pointer shape in void text areas (i.e. after the end of a
-line or below the last line in the buffer) of the text window is now
-controlled by the new variable `void-text-area-pointer'. The default
-is to use the `arrow' (non-text) pointer. Other choices are `text'
-(or nil), `hand', `vdrag', `hdrag', `modeline', and `hourglass'.
-
-*** The mouse pointer shape over an image can now be controlled by the
-:pointer image property.
-
-*** The mouse pointer shape over ordinary text or images can now be
-controlled/overridden via the `pointer' text property.
-
-** Mouse event enhancements:
-
-*** All mouse events now include a buffer position regardless of where
-you clicked. For mouse clicks in window margins and fringes, this is
-a sensible buffer position corresponding to the surrounding text.
-
-*** Mouse events for clicks on window fringes now specify `left-fringe'
-or `right-fringe' as the area.
-
-*** Mouse events include actual glyph column and row for all event types
-and all areas.
-
-*** Mouse events can now indicate an image object clicked on.
-
-*** Mouse events include relative X and Y pixel coordinates relative to
-the top left corner of the object (image or character) clicked on.
-
-*** Mouse events include the pixel width and height of the object
-(image or character) clicked on.
-
-*** Function `mouse-set-point' now works for events outside text area.
-
-*** `posn-point' now returns buffer position for non-text area events.
-
-*** New function `posn-area' returns window area clicked on (nil means
-text area).
-
-*** New function `posn-actual-col-row' returns the actual glyph coordinates
-of the mouse event position.
-
-*** New functions 'posn-object', 'posn-object-x-y', 'posn-object-width-height'.
-
-These return the image or string object of a mouse click, the X and Y
-pixel coordinates relative to the top left corner of that object, and
-the total width and height of that object.
-
-** Text property and overlay changes:
-
-*** Arguments for `remove-overlays' are now optional, so that you can
-remove all overlays in the buffer with just (remove-overlays).
-
-*** New variable `char-property-alias-alist'.
-
-This variable allows you to create alternative names for text
-properties. It works at the same level as `default-text-properties',
-although it applies to overlays as well. This variable was introduced
-to implement the `font-lock-face' property.
-
-*** New function `get-char-property-and-overlay' accepts the same
-arguments as `get-char-property' and returns a cons whose car is the
-return value of `get-char-property' called with those arguments and
-whose cdr is the overlay in which the property was found, or nil if
-it was found as a text property or not found at all.
-
-*** The new function `remove-list-of-text-properties'.
-
-It is like `remove-text-properties' except that it takes a list of
-property names as argument rather than a property list.
-
-** Face changes
-
-*** The variable `facemenu-unlisted-faces' has been removed.
-Emacs has a lot more faces than in the past, and nearly all of them
-needed to be excluded. The new variable `facemenu-listed-faces' lists
-the faces to include in the face menu.
-
-*** The new face attribute condition `min-colors' can be used to tailor
-the face color to the number of colors supported by a display, and
-define the foreground and background colors accordingly so that they
-look best on a terminal that supports at least this many colors. This
-is now the preferred method for defining default faces in a way that
-makes a good use of the capabilities of the display.
-
-*** New function `display-supports-face-attributes-p' can be used to test
-whether a given set of face attributes is actually displayable.
-
-A new predicate `supports' has also been added to the `defface' face
-specification language, which can be used to do this test for faces
-defined with `defface'.
-
-*** The special treatment of faces whose names are of the form `fg:COLOR'
-or `bg:COLOR' has been removed. Lisp programs should use the
-`defface' facility for defining faces with specific colors, or use
-the feature of specifying the face attributes :foreground and :background
-directly in the `face' property instead of using a named face.
-
-*** The first face specification element in a defface can specify
-`default' instead of frame classification. Then its attributes act as
-defaults that apply to all the subsequent cases (and can be overridden
-by them).
-
-*** The function `face-differs-from-default-p' now truly checks
-whether the given face displays differently from the default face or
-not (previously it did only a very cursory check).
-
-*** `face-attribute', `face-foreground', `face-background', `face-stipple'.
-
-These now accept a new optional argument, INHERIT, which controls how
-face inheritance is used when determining the value of a face
-attribute.
-
-*** New functions `face-attribute-relative-p' and `merge-face-attribute'
-help with handling relative face attributes.
-
-*** The priority of faces in an :inherit attribute face list is reversed.
-
-If a face contains an :inherit attribute with a list of faces, earlier
-faces in the list override later faces in the list; in previous
-releases of Emacs, the order was the opposite. This change was made
-so that :inherit face lists operate identically to face lists in text
-`face' properties.
-
-*** The variable `face-font-rescale-alist' specifies how much larger
-(or smaller) font we should use. For instance, if the value is
-'((SOME-FONTNAME-PATTERN . 1.3)) and a face requests a font of 10
-point, we actually use a font of 13 point if the font matches
-SOME-FONTNAME-PATTERN.
-
-*** On terminals, faces with the :inverse-video attribute are displayed
-with swapped foreground and background colors even when one of them is
-not specified. In previous releases of Emacs, if either foreground
-or background color was unspecified, colors were not swapped. This
-was inconsistent with the face behavior under X.
-
-*** `set-fontset-font', `fontset-info', `fontset-font' now operate on
-the default fontset if the argument NAME is nil..
-
-** Font-Lock changes:
-
-*** New special text property `font-lock-face'.
-
-This property acts like the `face' property, but it is controlled by
-M-x font-lock-mode. It is not, strictly speaking, a builtin text
-property. Instead, it is implemented inside font-core.el, using the
-new variable `char-property-alias-alist'.
-
-*** font-lock can manage arbitrary text-properties beside `face'.
-
-**** the FACENAME returned in `font-lock-keywords' can be a list of the
-form (face FACE PROP1 VAL1 PROP2 VAL2 ...) so you can set other
-properties than `face'.
-
-**** `font-lock-extra-managed-props' can be set to make sure those
-extra properties are automatically cleaned up by font-lock.
-
-*** jit-lock obeys a new text-property `jit-lock-defer-multiline'.
-
-If a piece of text with that property gets contextually refontified
-(see `jit-lock-defer-contextually'), then all of that text will
-be refontified. This is useful when the syntax of a textual element
-depends on text several lines further down (and when `font-lock-multiline'
-is not appropriate to solve that problem). For example in Perl:
-
- s{
- foo
- }{
- bar
- }e
-
-Adding/removing the last `e' changes the `bar' from being a piece of
-text to being a piece of code, so you'd put a `jit-lock-defer-multiline'
-property over the second half of the command to force (deferred)
-refontification of `bar' whenever the `e' is added/removed.
-
-*** `font-lock-extend-region-functions' makes it possible to alter the way
-the fontification region is chosen. This can be used to prevent rounding
-up to whole lines, or to extend the region to include all related lines
-of multiline constructs so that such constructs get properly recognized.
-
-** Major mode mechanism changes:
-
-*** New variable `magic-mode-alist' determines major mode for a file by
-looking at the file contents. It takes precedence over `auto-mode-alist'.
-
-*** New variable `magic-fallback-mode-alist' determines major mode for a file by
-looking at the file contents. It is handled after `auto-mode-alist',
-only if `auto-mode-alist' (and `magic-mode-alist') says nothing about the file.
-
-*** XML or SGML major mode is selected when file starts with an `<?xml'
-or `<!DOCTYPE' declaration.
-
-*** An interpreter magic line (if present) takes precedence over the
-file name when setting the major mode.
-
-*** If new variable `auto-mode-case-fold' is set to a non-nil value,
-Emacs will perform a second case-insensitive search through
-`auto-mode-alist' if the first case-sensitive search fails. This
-means that a file FILE.TXT is opened in text-mode, and a file
-PROG.HTML is opened in html-mode. Note however, that independent of
-this setting, *.C files are usually recognized as C++ files. It also
-has no effect on systems with case-insensitive file names.
-
-*** All major mode functions should now run the new normal hook
-`after-change-major-mode-hook', at their very end, after the mode
-hooks. `run-mode-hooks' does this automatically.
-
-*** Major modes can define `eldoc-documentation-function'
-locally to provide Eldoc functionality by some method appropriate to
-the language.
-
-*** Use the new function `run-mode-hooks' to run the major mode's mode hook.
-
-*** The new function `run-mode-hooks' and the new macro `delay-mode-hooks'
-are used by `define-derived-mode' to make sure the mode hook for the
-parent mode is run at the end of the child mode.
-
-*** `define-derived-mode' by default creates a new empty abbrev table.
-It does not copy abbrevs from the parent mode's abbrev table.
-
-*** If a major mode function has a non-nil `no-clone-indirect'
-property, `clone-indirect-buffer' signals an error if you use
-it in that buffer.
-
-** Minor mode changes:
-
-*** `define-minor-mode' now accepts arbitrary additional keyword arguments
-and simply passes them to `defcustom', if applicable.
-
-*** `define-globalized-minor-mode'.
-
-This is a new name for what was formerly called
-`easy-mmode-define-global-mode'. The old name remains as an alias.
-
-*** `minor-mode-list' now holds a list of minor mode commands.
-
-** Command loop changes:
-
-*** The new function `called-interactively-p' does what many people
-have mistakenly believed `interactive-p' to do: it returns t if the
-calling function was called through `call-interactively'.
-
-Only use this when you cannot solve the problem by adding a new
-INTERACTIVE argument to the command.
-
-*** The function `commandp' takes an additional optional argument.
-
-If it is non-nil, then `commandp' checks for a function that could be
-called with `call-interactively', and does not return t for keyboard
-macros.
-
-*** When a command returns, the command loop moves point out from
-within invisible text, in the same way it moves out from within text
-covered by an image or composition property.
-
-This makes it generally unnecessary to mark invisible text as intangible.
-This is particularly good because the intangible property often has
-unexpected side-effects since the property applies to everything
-(including `goto-char', ...) whereas this new code is only run after
-`post-command-hook' and thus does not care about intermediate states.
-
-*** If a command sets `transient-mark-mode' to `only', that
-enables Transient Mark mode for the following command only.
-During that following command, the value of `transient-mark-mode'
-is `identity'. If it is still `identity' at the end of the command,
-the next return to the command loop changes to nil.
-
-*** Both the variable and the function `disabled-command-hook' have
-been renamed to `disabled-command-function'. The variable
-`disabled-command-hook' has been kept as an obsolete alias.
-
-*** `emacsserver' now runs `pre-command-hook' and `post-command-hook'
-when it receives a request from emacsclient.
-
-*** `current-idle-time' reports how long Emacs has been idle.
-
-** Lisp file loading changes:
-
-*** `load-history' can now have elements of the form (t . FUNNAME),
-which means FUNNAME was previously defined as an autoload (before the
-current file redefined it).
-
-*** `load-history' now records (defun . FUNNAME) when a function is
-defined. For a variable, it records just the variable name.
-
-*** The function `symbol-file' can now search specifically for function,
-variable or face definitions.
-
-*** `provide' and `featurep' now accept an optional second argument
-to test/provide subfeatures. Also `provide' now checks `after-load-alist'
-and runs any code associated with the provided feature.
-
-*** The variable `recursive-load-depth-limit' has been deleted.
-Emacs now signals an error if the same file is loaded with more
-than 3 levels of nesting.
-
-** Byte compiler changes:
-
-*** The byte compiler now displays the actual line and character
-position of errors, where possible. Additionally, the form of its
-warning and error messages have been brought into line with GNU standards
-for these. As a result, you can use next-error and friends on the
-compilation output buffer.
-
-*** The new macro `with-no-warnings' suppresses all compiler warnings
-inside its body. In terms of execution, it is equivalent to `progn'.
-
-*** You can avoid warnings for possibly-undefined symbols with a
-simple convention that the compiler understands. (This is mostly
-useful in code meant to be portable to different Emacs versions.)
-Write forms like the following, or code that macroexpands into such
-forms:
-
- (if (fboundp 'foo) <then> <else>)
- (if (boundp 'foo) <then> <else)
-
-In the first case, using `foo' as a function inside the <then> form
-won't produce a warning if it's not defined as a function, and in the
-second case, using `foo' as a variable won't produce a warning if it's
-unbound. The test must be in exactly one of the above forms (after
-macro expansion), but such tests can be nested. Note that `when' and
-`unless' expand to `if', but `cond' doesn't.
-
-*** `(featurep 'xemacs)' is treated by the compiler as nil. This
-helps to avoid noisy compiler warnings in code meant to run under both
-Emacs and XEmacs and can sometimes make the result significantly more
-efficient. Since byte code from recent versions of XEmacs won't
-generally run in Emacs and vice versa, this optimization doesn't lose
-you anything.
-
-*** The local variable `no-byte-compile' in Lisp files is now obeyed.
-
-*** When a Lisp file uses CL functions at run-time, compiling the file
-now issues warnings about these calls, unless the file performs
-(require 'cl) when loaded.
-
-** Frame operations:
-
-*** New functions `frame-current-scroll-bars' and `window-current-scroll-bars'.
-
-These functions return the current locations of the vertical and
-horizontal scroll bars in a frame or window.
-
-*** The new function `modify-all-frames-parameters' modifies parameters
-for all (existing and future) frames.
-
-*** The new frame parameter `tty-color-mode' specifies the mode to use
-for color support on character terminal frames. Its value can be a
-number of colors to support, or a symbol. See the Emacs Lisp
-Reference manual for more detailed documentation.
-
-*** When using non-toolkit scroll bars with the default width,
-the `scroll-bar-width' frame parameter value is nil.
-
-** Mode line changes:
-
-*** New function `format-mode-line'.
-
-This returns the mode line or header line of the selected (or a
-specified) window as a string with or without text properties.
-
-*** The new mode-line construct `(:propertize ELT PROPS...)' can be
-used to add text properties to mode-line elements.
-
-*** The new `%i' and `%I' constructs for `mode-line-format' can be used
-to display the size of the accessible part of the buffer on the mode
-line.
-
-*** Mouse-face on mode-line (and header-line) is now supported.
++++
+** New function `match-substitute-replacement' returns the result of
+`replace-match' without actually using it in the buffer.
-** Menu manipulation changes:
++++
+** A list of default values can be specified for the DEFAULT argument of
+functions `read-from-minibuffer', `read-string', `read-command',
+`read-variable', `read-buffer', `completing-read'. Elements of this list
+are available for inserting into the minibuffer by typing `M-n'.
+For empty input these functions return the first element of this list.
-*** To manipulate the File menu using easy-menu, you must specify the
-proper name "file". In previous Emacs versions, you had to specify
-"files", even though the menu item itself was changed to say "File"
-several versions ago.
+** `custom-note-var-changed' tells Custom to treat the change in a certain
+variable as having been made within Custom.
-*** The dummy function keys made by easy-menu are now always lower case.
-If you specify the menu item name "Ada", for instance, it uses `ada'
-as the "key" bound by that key binding.
+** `frame-inherited-parameters' lets new frames inherit parameters from
+the selected frame.
-This is relevant only if Lisp code looks for the bindings that were
-made with easy-menu.
+** New keymap `input-decode-map' overrides like key-translation-map, but
+applies before function-key-map. Also it is terminal-local contrary to
+key-translation-map. Terminal-specific key-sequences are generally added to
+this map rather than to function-key-map now.
-*** `easy-menu-define' now allows you to use nil for the symbol name
-if you don't need to give the menu a name. If you install the menu
-into other keymaps right away (MAPS is non-nil), it usually doesn't
-need to have a name.
+** The new macro `declare-function' suppresses compiler warnings about
+undefined functions. The new `check-declare' package verifies that such
+statements are accurate (i.e. the functions are actually defined in
+the specified files).
-** Mule changes:
+** The new function `read-color' reads a color name using the minibuffer.
-*** Already true in Emacs 21.1, but not emphasized clearly enough:
+** Changes related to multiple tty support.
-Multibyte buffers can now faithfully record all 256 character codes
-from 0 to 255. As a result, most of the past reasons to use unibyte
-buffers no longer exist. We only know of three reasons to use them
-now:
+*** $TERM is now set to `dumb' for subprocesses. If you want to know the
+$TERM inherited by Emacs you will have to look inside initial-environment.
-1. If you prefer to use unibyte text all of the time.
+*** $DISPLAY is now dynamically inherited from the frame's `display'.
-2. For reading files into temporary buffers, when you want to avoid
-the time it takes to convert the format.
+*** The `window-system' variable has been made frame-local. The new
+`initial-window-system' variable contains the `window-system' value
+for the first frame.
-3. For binary files where format conversion would be pointless and
-wasteful.
+*** You can specify a terminal device (`tty' parameter) and a terminal
+type (`tty-type' parameter) to `make-terminal-frame'.
-*** The new variable `auto-coding-functions' lets you specify functions
-to examine a file being visited and deduce the proper coding system
-for it. (If the coding system is detected incorrectly for a specific
-file, you can put a `coding:' tags to override it.)
+*** The new function `make-frame-on-tty' allows you to create a new
+frame on another tty device interactively.
-*** The new variable `ascii-case-table' stores the case table for the
-ascii character set. Language environments (such as Turkish) may
-alter the case correspondences of ASCII characters. This variable
-saves the original ASCII case table before any such changes.
+*** The function `make-frame-on-display' now works during a tty
+session, and `make-frame-on-tty' works during a graphical session.
-*** The new function `merge-coding-systems' fills in unspecified aspects
-of one coding system from another coding system.
+*** New functions: `delete-tty', `suspend-tty', `resume-tty'.
-*** New coding system property `mime-text-unsuitable' indicates that
-the coding system's `mime-charset' is not suitable for MIME text
-parts, e.g. utf-16.
+*** A new data type for terminals with functions: `get-device-terminal',
+`terminal-parameters', `terminal-parameter', `set-terminal-parameter'.
-*** New function `decode-coding-inserted-region' decodes a region as if
-it is read from a file without decoding.
+*** New hooks: `suspend-tty-functions' and `resume-tty-functions'
+are called after a tty frame has been suspended or resumed,
+respectively. The functions are called with the terminal id of the frame
+being suspended/resumed as a parameter.
-*** New CCL functions `lookup-character' and `lookup-integer' access
-hash tables defined by the Lisp function `define-translation-hash-table'.
+*** New function: `environment'.
-*** New function `quail-find-key' returns a list of keys to type in the
-current input method to input a character.
+*** New variable: `local-function-key-map'.
+This in addition to the global function-key-map variable that
+already existed. The global variable is not used directly any more;
+instead, the local-function-key-map is initialized so as to inherit from
+function-key-map.
-*** `set-buffer-file-coding-system' now takes an additional argument,
-NOMODIFY. If it is non-nil, it means don't mark the buffer modified.
+*** `initial-environment' holds the environment inherited from Emacs's parent.
-** Operating system access:
+*** The `keyboard-translate-table' variable and the terminal and
+keyboard coding systems have been made terminal-local.
-*** The new primitive `get-internal-run-time' returns the processor
-run time used by Emacs since start-up.
+*** In addition to the global function-key-map, Emacs has terminal-local
+local-function-key-map variables, and uses them instead of the
+global keymaps to set up translations and function key sequences
+relevant to a specific terminal device.
-*** Functions `user-uid' and `user-real-uid' now return floats if the
-user UID doesn't fit in a Lisp integer. Function `user-full-name'
-accepts a float as UID parameter.
-*** New function `locale-info' accesses locale information.
+** You can now also pass the value of the `invisible' property to invisible-p
+to check whether it would cause the text to be invisible. Convenient when
+checking invisibility of text which has no buffer position
+(e.g. in before/after-strings).
-*** On MS Windows, locale-coding-system is used to interact with the OS.
-The Windows specific variable w32-system-coding-system, which was
-formerly used for that purpose is now an alias for locale-coding-system.
+** Non-breaking space now acts as whitespace.
-*** New function `redirect-debugging-output' can be used to redirect
-debugging output on the stderr file handle to a file.
++++
+** In `condition-case', a handler can specify "let the debugger run first".
-** GC changes:
+You do this by writing `debug' in the list of conditions to be handled,
+like this:
-*** New variable `gc-cons-percentage' automatically grows the GC cons threshold
-as the heap size increases.
+ (condition-case nil
+ (foo bar)
+ ((debug error) nil))
-*** New variables `gc-elapsed' and `gcs-done' provide extra information
-on garbage collection.
+** The `require-match' argument to `completing-read' accepts a new value
+`confirm-only'.
-*** The normal hook `post-gc-hook' is run at the end of garbage collection.
++++
+** The regexp form \(?<num>:<regexp>\) specifies the group number explicitly.
-The hook is run with GC inhibited, so use it with care.
+** New function `window-full-width-p' returns t if a window is as wide
+as its frame.
-** Miscellaneous:
+** The new function `split-string-and-unquote' does (what?)
-*** A number of hooks have been renamed to better follow the conventions:
+** The new function `combine-and-quote-strings' does (what?)
-`find-file-hooks' to `find-file-hook',
-`find-file-not-found-hooks' to `find-file-not-found-functions',
-`write-file-hooks' to `write-file-functions',
-`write-contents-hooks' to `write-contents-functions',
-`x-lost-selection-hooks' to `x-lost-selection-functions',
-`x-sent-selection-hooks' to `x-sent-selection-functions',
-`delete-frame-hook' to `delete-frame-functions'.
+** The new function `image-refresh' refreshes all images associated
+with a given image specification.
-In each case the old name remains as an alias for the moment.
++++
+** New variable `user-emacs-directory'.
+Use this instead of "~/.emacs.d".
-*** Variable `local-write-file-hooks' is marked obsolete.
++++
+** The new function `start-file-process' is similar to `start-process',
+but obeys file handlers. The file handler is chosen based on
+`default-directory'. The functions `start-file-process-shell-command'
+and `process-file-shell-command' are also new; they call internally
+`start-file-process' and `process-file', respectively.
-Use the LOCAL arg of `add-hook'.
+** The new function `process-lines' executes an external program and
+returns its output as a list of lines.
-*** New function `x-send-client-message' sends a client message when
-running under X.
++++
+** `file-remote-p' has new optional parameters IDENTIFICATION and CONNECTED.
+IDENTIFICATION specifies which part of the remote identifier has to be
+returned. With CONNECTED passed non-nil, it is checked whether a
+remote connection has been established already.
+
+** The two new functions `looking-at-p' and `string-match-p' can do
+the same matching as `looking-at' and `string-match' without changing
+the match data.
+
+** The interactive-form of a function can be added post-facto via the
+`interactive-form' symbol property. Mostly useful to add complex interactive
+forms to subroutines.
-* New Packages for Lisp Programming in Emacs 22.1
-
-** The new library button.el implements simple and fast `clickable
-buttons' in Emacs buffers. Buttons are much lighter-weight than the
-`widgets' implemented by widget.el, and can be used by lisp code that
-doesn't require the full power of widgets. Emacs uses buttons for
-such things as help and apropos buffers.
-
-** The new library tree-widget.el provides a widget to display a set
-of hierarchical data as an outline. For example, the tree-widget is
-well suited to display a hierarchy of directories and files.
-
-** The new library bindat.el provides functions to unpack and pack
-binary data structures, such as network packets, to and from Lisp
-data structures.
-
-** master-mode.el implements a minor mode for scrolling a slave
-buffer without leaving your current buffer, the master buffer.
-
-It can be used by sql.el, for example: the SQL buffer is the master
-and its SQLi buffer is the slave. This allows you to scroll the SQLi
-buffer containing the output from the SQL buffer containing the
-commands.
-
-This is how to use sql.el and master.el together: the variable
-sql-buffer contains the slave buffer. It is a local variable in the
-SQL buffer.
-
-(add-hook 'sql-mode-hook
- (function (lambda ()
- (master-mode t)
- (master-set-slave sql-buffer))))
-(add-hook 'sql-set-sqli-hook
- (function (lambda ()
- (master-set-slave sql-buffer))))
-
-** The new library benchmark.el does timing measurements on Lisp code.
-
-This includes measuring garbage collection time.
-
-** The new library testcover.el does test coverage checking.
-
-This is so you can tell whether you've tested all paths in your Lisp
-code. It works with edebug.
-
-The function `testcover-start' instruments all functions in a given
-file. Then test your code. The function `testcover-mark-all' adds
-overlay "splotches" to the Lisp file's buffer to show where coverage
-is lacking. The command `testcover-next-mark' (bind it to a key!)
-will move point forward to the next spot that has a splotch.
-
-Normally, a red splotch indicates the form was never completely
-evaluated; a brown splotch means it always evaluated to the same
-value. The red splotches are skipped for forms that can't possibly
-complete their evaluation, such as `error'. The brown splotches are
-skipped for forms that are expected to always evaluate to the same
-value, such as (setq x 14).
+* New Packages for Lisp Programming in Emacs 23.1
-For difficult cases, you can add do-nothing macros to your code to
-help out the test coverage tool. The macro `noreturn' suppresses a
-red splotch. It is an error if the argument to `noreturn' does
-return. The macro `1value' suppresses a brown splotch for its argument.
-This macro is a no-op except during test-coverage -- then it signals
-an error if the argument actually returns differing values.
+** The package isearch-multi.el has been added. It implements a new mode
+`isearch-buffers-minor-mode' that allows isearch to search through
+multiple buffers. In this mode a new variable
+`isearch-buffers-next-buffer-function' defines the function to call
+to get the next buffer to search in the series of multiple buffers.
+** The new package avl-tree.el deals with the AVL tree data structure.
----------------------------------------------------------------------
@@ -5507,4 +551,4 @@ mode: outline
paragraph-separate: "[ ]*$"
end:
-arch-tag: 1aca9dfa-2ac4-4d14-bebf-0007cee12793
+arch-tag: e759449d-88b3-4de4-9900-3a6c3dfa23e2
diff --git a/etc/NEWS.22 b/etc/NEWS.22
new file mode 100644
index 00000000000..a8e8b3fbb8c
--- /dev/null
+++ b/etc/NEWS.22
@@ -0,0 +1,5510 @@
+GNU Emacs NEWS -- history of user-visible changes.
+
+Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
+See the end of the file for license conditions.
+
+Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
+If possible, use M-x report-emacs-bug.
+
+This file is about changes in Emacs version 22.
+
+See files NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17 for changes
+in older Emacs versions.
+
+You can narrow news to a specific version by calling `view-emacs-news'
+with a prefix argument or by typing C-u C-h C-n.
+
+* About external Lisp packages
+
+When you upgrade to Emacs 22 from a previous version, some older
+versions of external Lisp packages are known to behave badly.
+So in general, it is recommended that you upgrade to the latest
+versions of any external Lisp packages that you are using.
+
+You should also be aware that many Lisp packages have been included
+with Emacs 22 (see the extensive list below), and you should remove
+any older versions of these packages to ensure that the Emacs 22
+version is used. You can use M-x list-load-path-shadows to find such
+older packages.
+
+Some specific packages that are known to cause problems are given
+below. Emacs tries to warn you about these through `bad-packages-alist'.
+
+** Semantic (used by CEDET, ECB, JDEE): upgrade to latest version.
+
+** cua.el, cua-mode.el: remove old versions.
+
+
+* Installation Changes in Emacs 22.2
+
+** Emacs is now licensed under the GNU GPL version 3 (or later).
+
+* Changes in Emacs 22.2
+
+** In Image mode, whenever the displayed image is wider and/or higher
+than the window, the usual keys for moving the cursor cause the image
+to be scrolled horizontally or vertically instead.
+
+** Scrollbars follow the system theme on Windows XP and later.
+Windows XP introduced themed scrollbars, but applications have to take
+special steps to use them. Emacs now has the appropriate resources linked
+in to make it use the scrollbars from the system theme.
+
+** focus-follows-mouse defaults to nil on MS Windows.
+Previously this variable was incorrectly documented as having no effect
+on MS Windows, and the default was inappropriate for the majority of
+Windows installations. Users of software which modifies the behaviour of
+Windows to cause focus to follow the mouse will now need to explicitly set
+this variable.
+
+** `bad-packages-alist' will warn about external packages that are known
+to cause problems in this version of Emacs.
+
+** The values of `dired-recursive-deletes' and `dired-recursive-copies'
+have been changed to `top'. This means that the user is asked once,
+before deleting/copying the indicated directory recursively.
+
+** `browse-url-emacs' loads a URL into an Emacs buffer. Handy for *.el URLs.
+
+** The command gdba has been removed as gdb works now for those cases where it
+was needed. In text command mode, if you have problems before execution has
+started, use M-x gud-gdb.
+
+** desktop.el now detects conflicting uses of the desktop file.
+When loading the desktop, desktop.el can now detect that the file is already
+in use. The default behavior is to ask the user what to do, but you can
+customize it with the new option `desktop-load-locked-desktop'. When saving,
+desktop.el warns about attempts to overwrite a desktop file if it determines
+that the desktop being saved is not an update of the one on disk.
+
+* New Modes and Packages in Emacs 22.2
+
+** bibtex-style-mode helps you write BibTeX's *.bst files.
+
+** The new package css-mode.el provides a major mode for editing CSS files.
+
+** The new package vera-mode.el provides a major mode for editing Vera files.
+
+** The new package socks.el implements the SOCKS v5 protocol.
+
+** VC
+
+*** VC backends can provide completion of revision names.
+
+*** VC backends can provide extra menu entries to be added to the "Version Control" menu.
+This can be used to add menu entries for backend specific functions.
+
+*** VC has some support for Mercurial (Hg).
+
+*** VC has some support for Monotone (Mtn).
+
+*** VC has some support for Bazaar (Bzr).
+
+*** VC has some support for Git.
+
+* Lisp Changes in Emacs 22.2.
+
+** Frame-local variables are deprecated and are slated for removal.
+Use frame parameters instead.
+
+** The function invisible-p returns non-nil if the character
+after a specified position is invisible.
+
++++
+** inhibit-modification-hooks is bound to t while running modification hooks.
+As a happy consequence, after-change-functions and before-change-functions
+are not bound to nil any more while running an (after|before)-change-function.
+
+** New function `window-full-width-p' returns t if a window is as wide
+as its frame.
+
+** The new function `image-refresh' refreshes all images associated
+with a given image specification.
+
+** The new function `combine-and-quote-strings' concatenates a list of strings
+using a specified separator. If a string contains double quotes, they
+are escaped in the output.
+
+** The new function `split-string-and-unquote' performs the inverse operation to
+`combine-and-quote-strings', i.e. splits a single string into a list
+of strings, undoing any quoting added by `combine-and-quote-strings'.
+(For some separator/string combinations, the original strings cannot
+be recovered.)
+
+
+* Installation Changes in Emacs 22.1
+
+** You can build Emacs with Gtk+ widgets by specifying `--with-x-toolkit=gtk'
+when you run configure. This requires Gtk+ 2.4 or newer. This port
+provides a way to display multilingual text in menus (with some caveats).
+
+** The Emacs Lisp Reference Manual is now part of the distribution.
+
+The Emacs Lisp Reference Manual in Info format is built as part of the
+Emacs build procedure and installed together with the Emacs User
+Manual. A menu item was added to the menu bar to make it easily
+accessible (Help->More Manuals->Emacs Lisp Reference).
+
+** The Introduction to Programming in Emacs Lisp manual is now part of
+the distribution.
+
+This manual is now part of the standard distribution and is installed,
+together with the Emacs User Manual, into the Info directory. A menu
+item was added to the menu bar to make it easily accessible
+(Help->More Manuals->Introduction to Emacs Lisp).
+
+** Leim is now part of the Emacs distribution.
+You no longer need to download a separate tarball in order to build
+Emacs with Leim.
+
+** Support for MacOS X was added.
+See the files mac/README and mac/INSTALL for build instructions.
+
+** Mac OS 9 port now uses the Carbon API by default. You can also
+create a non-Carbon build by specifying `NonCarbon' as a target. See
+the files mac/README and mac/INSTALL for build instructions.
+
+** Support for a Cygwin build of Emacs was added.
+
+** Support for GNU/Linux systems on X86-64 machines was added.
+
+** Support for GNU/Linux systems on S390 machines was added.
+
+** Support for GNU/Linux systems on Tensilica Xtensa machines was added.
+
+** Support for FreeBSD/Alpha has been added.
+
+** New translations of the Emacs Tutorial are available in the
+following languages: Brasilian Portuguese, Bulgarian, Chinese (both
+with simplified and traditional characters), French, Russian, and
+Italian. Type `C-u C-h t' to choose one of them in case your language
+setup doesn't automatically select the right one.
+
+** New translations of the Emacs reference card are available in the
+Brasilian Portuguese and Russian. The corresponding PostScript files
+are also included.
+
+** A French translation of the `Emacs Survival Guide' is available.
+
+** Emacs now supports new configure options `--program-prefix',
+`--program-suffix' and `--program-transform-name' that affect the names of
+installed programs.
+
+** By default, Emacs now uses a setgid helper program to update game
+scores. The directory ${localstatedir}/games/emacs is the normal
+place for game scores to be stored. You can control this with the
+configure option `--with-game-dir'. The specific user that Emacs uses
+to own the game scores is controlled by `--with-game-user'. If access
+to a game user is not available, then scores will be stored separately
+in each user's home directory.
+
+** Emacs now includes support for loading image libraries on demand.
+(Currently this feature is only used on MS Windows.) You can configure
+the supported image types and their associated dynamic libraries by
+setting the variable `image-library-alist'.
+
+** Emacs can now be built without sound support.
+
+** Emacs Lisp source files are compressed by default if `gzip' is available.
+
+** All images used in Emacs have been consolidated in etc/images and subdirs.
+See also the changes to `find-image', documented below.
+
+** Emacs comes with a new set of icons.
+These icons are displayed on the taskbar and/or titlebar when Emacs
+runs in a graphical environment. Source files for these icons can be
+found in etc/images/icons. (You can't change the icons displayed by
+Emacs by changing these files directly. On X, the icon is compiled
+into the Emacs executable; see gnu.h in the source tree. On MS
+Windows, see nt/icons/emacs.ico.)
+
+** The `emacsserver' program has been removed, replaced with Lisp code.
+
+** The `yow' program has been removed.
+Use the corresponding Emacs feature instead.
+
+** The Emacs terminal emulation in term.el uses a different terminfo name.
+The Emacs terminal emulation in term.el now uses "eterm-color" as its
+terminfo name, since term.el now supports color.
+
+** The script etc/emacs-buffer.gdb can be used with gdb to retrieve the
+contents of buffers from a core dump and save them to files easily, should
+Emacs crash.
+
+** Building with -DENABLE_CHECKING does not automatically build with union
+types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
+
+** When pure storage overflows while dumping, Emacs now prints how
+much pure storage it will approximately need.
+
+
+* Startup Changes in Emacs 22.1
+
+** Init file changes
+If the init file ~/.emacs does not exist, Emacs will try
+~/.emacs.d/init.el or ~/.emacs.d/init.elc. Likewise, if the shell init file
+~/.emacs_SHELL is not found, Emacs will try ~/.emacs.d/init_SHELL.sh.
+
+** Emacs can now be invoked in full-screen mode on a windowed display.
+When Emacs is invoked on a window system, the new command-line options
+`--fullwidth', `--fullheight', and `--fullscreen' produce a frame
+whose width, height, or both width and height take up the entire
+screen size. (For now, this does not work with some window managers.)
+
+** Emacs now displays a splash screen by default even if command-line
+arguments were given. The new command-line option --no-splash
+disables the splash screen; see also the variable
+`inhibit-splash-screen' (which is also aliased as
+`inhibit-startup-message').
+
+** New user option `inhibit-startup-buffer-menu'.
+When loading many files, for instance with `emacs *', Emacs normally
+displays a buffer menu. This option turns the buffer menu off.
+
+** New command line option -nbc or --no-blinking-cursor disables
+the blinking cursor on graphical terminals.
+
+** The option --script FILE runs Emacs in batch mode and loads FILE.
+It is useful for writing Emacs Lisp shell script files, because they
+can start with this line:
+
+ #!/usr/bin/emacs --script
+
+** The -f option, used from the command line to call a function,
+now reads arguments for the function interactively if it is
+an interactively callable function.
+
+** The option --directory DIR now modifies `load-path' immediately.
+Directories are added to the front of `load-path' in the order they
+appear on the command line. For example, with this command line:
+
+ emacs -batch -L .. -L /tmp --eval "(require 'foo)"
+
+Emacs looks for library `foo' in the parent directory, then in /tmp, then
+in the other directories in `load-path'. (-L is short for --directory.)
+
+** When you specify a frame size with --geometry, the size applies to
+all frames you create. A position specified with --geometry only
+affects the initial frame.
+
+** Emacs built for MS-Windows now behaves like Emacs on X does,
+with respect to its frame position: if you don't specify a position
+(in your .emacs init file, in the Registry, or with the --geometry
+command-line option), Emacs leaves the frame position to the Windows'
+window manager.
+
+** The command line option --no-windows has been changed to
+--no-window-system. The old one still works, but is deprecated.
+
+** If the environment variable DISPLAY specifies an unreachable X display,
+Emacs will now startup as if invoked with the --no-window-system option.
+
+** Emacs now reads the standard abbrevs file ~/.abbrev_defs
+automatically at startup, if it exists. When Emacs offers to save
+modified buffers, it saves the abbrevs too if they have changed. It
+can do this either silently or asking for confirmation first,
+according to the value of `save-abbrevs'.
+
+** New command line option -Q or --quick.
+This is like using -q --no-site-file, but in addition it also disables
+the fancy startup screen.
+
+** New command line option -D or --basic-display.
+Disables the menu-bar, the tool-bar, the scroll-bars, tool tips, and
+the blinking cursor.
+
+** The default is now to use a bitmap as the icon.
+The command-line options --icon-type, -i have been replaced with
+options --no-bitmap-icon, -nbi to turn the bitmap icon off.
+
+** If the environment variable EMAIL is defined, Emacs now uses its value
+to compute the default value of `user-mail-address', in preference to
+concatenation of `user-login-name' with the name of your host machine.
+
+
+* Incompatible Editing Changes in Emacs 22.1
+
+** You can now follow links by clicking Mouse-1 on the link.
+
+See below for more details.
+
+** When the undo information of the current command gets really large
+(beyond the value of `undo-outer-limit'), Emacs discards it and warns
+you about it.
+
+** When Emacs prompts for file names, SPC no longer completes the file name.
+This is so filenames with embedded spaces could be input without the
+need to quote the space with a C-q. The underlying changes in the
+keymaps that are active in the minibuffer are described below under
+"New keymaps for typing file names".
+
+If you want the old behavior back, add these two key bindings to your
+~/.emacs init file:
+
+ (define-key minibuffer-local-filename-completion-map
+ " " 'minibuffer-complete-word)
+ (define-key minibuffer-local-must-match-filename-map
+ " " 'minibuffer-complete-word)
+
+** The completion commands TAB, SPC and ? in the minibuffer apply only
+to the text before point. If there is text in the buffer after point,
+it remains unchanged.
+
+** In incremental search, C-w is changed. M-%, C-M-w and C-M-y are special.
+
+See below under "incremental search changes".
+
+** M-g is now a prefix key.
+M-g g and M-g M-g run goto-line.
+M-g n and M-g M-n run next-error (like C-x `).
+M-g p and M-g M-p run previous-error.
+
+** C-u M-g M-g switches to the most recent previous buffer,
+and goes to the specified line in that buffer.
+
+When goto-line starts to execute, if there's a number in the buffer at
+point then it acts as the default argument for the minibuffer.
+
+** M-o now is the prefix key for setting text properties;
+M-o M-o requests refontification.
+
+** C-x C-f RET (find-file), typing nothing in the minibuffer, is no longer
+a special case.
+
+Since the default input is the current directory, this has the effect
+of specifying the current directory. Normally that means to visit the
+directory with Dired.
+
+You can get the old behavior by typing C-x C-f M-n RET, which fetches
+the actual file name into the minibuffer.
+
+** In Dired's ! command (dired-do-shell-command), `*' and `?' now
+control substitution of the file names only when they are surrounded
+by whitespace. This means you can now use them as shell wildcards
+too. If you want to use just plain `*' as a wildcard, type `*""'; the
+doublequotes make no difference in the shell, but they prevent
+special treatment in `dired-do-shell-command'.
+
+** The info-search bindings on C-h C-f, C-h C-k and C-h C-i
+have been moved to C-h F, C-h K and C-h S.
+
+** `apply-macro-to-region-lines' now operates on all lines that begin
+in the region, rather than on all complete lines in the region.
+
+** line-move-ignore-invisible now defaults to t.
+
+** Adaptive filling misfeature removed.
+It no longer treats `NNN.' or `(NNN)' as a prefix.
+
+** The old bindings C-M-delete and C-M-backspace have been deleted,
+since there are situations where one or the other will shut down
+the operating system or your X server.
+
+** The register compatibility key bindings (deprecated since Emacs 19)
+have been removed:
+ C-x / point-to-register (Use: C-x r SPC)
+ C-x j jump-to-register (Use: C-x r j)
+ C-x x copy-to-register (Use: C-x r s)
+ C-x g insert-register (Use: C-x r i)
+
+
+* Editing Changes in Emacs 22.1
+
+** The max size of buffers and integers has been doubled.
+On 32bit machines, it is now 256M (i.e. 268435455).
+
+** !MEM FULL! at the start of the mode line indicates that Emacs
+cannot get any more memory for Lisp data. This often means it could
+crash soon if you do things that use more memory. On most systems,
+killing buffers will get out of this state. If killing buffers does
+not make !MEM FULL! disappear, you should save your work and start
+a new Emacs.
+
+** `undo-only' does an undo which does not redo any previous undo.
+
+** Yanking text now discards certain text properties that can
+be inconvenient when you did not expect them. The variable
+`yank-excluded-properties' specifies which ones. Insertion
+of register contents and rectangles also discards these properties.
+
+** New command `kill-whole-line' kills an entire line at once.
+By default, it is bound to C-S-<backspace>.
+
+** M-SPC (just-one-space) when given a numeric argument N
+converts whitespace around point to N spaces.
+
+** You can now switch buffers in a cyclic order with C-x C-left
+(previous-buffer) and C-x C-right (next-buffer). C-x left and
+C-x right can be used as well. The functions keep a different buffer
+cycle for each frame, using the frame-local buffer list.
+
+** C-x 5 C-o displays a specified buffer in another frame
+but does not switch to that frame. It's the multi-frame
+analogue of C-x 4 C-o.
+
+** `special-display-buffer-names' and `special-display-regexps' now
+understand two new boolean pseudo-frame-parameters `same-frame' and
+`same-window'.
+
+** New commands to operate on pairs of open and close characters:
+`insert-pair', `delete-pair', `raise-sexp'.
+
+** M-x setenv now expands environment variable references.
+
+Substrings of the form `$foo' and `${foo}' in the specified new value
+now refer to the value of environment variable foo. To include a `$'
+in the value, use `$$'.
+
+** The default values of paragraph-start and indent-line-function have
+been changed to reflect those used in Text mode rather than those used
+in Paragraph-Indent Text mode.
+
+** The default for the paper size (variable ps-paper-type) is taken
+from the locale.
+
+** Help command changes:
+
+*** Changes in C-h bindings:
+
+C-h e displays the *Messages* buffer.
+
+C-h d runs apropos-documentation.
+
+C-h r visits the Emacs Manual in Info.
+
+C-h followed by a control character is used for displaying files
+ that do not change:
+
+C-h C-f displays the FAQ.
+C-h C-e displays the PROBLEMS file.
+
+The info-search bindings on C-h C-f, C-h C-k and C-h C-i
+have been moved to C-h F, C-h K and C-h S.
+
+C-h c, C-h k, C-h w, and C-h f now handle remapped interactive commands.
+- C-h c and C-h k report the actual command (after possible remapping)
+ run by the key sequence.
+- C-h w and C-h f on a command which has been remapped now report the
+ command it is remapped to, and the keys which can be used to run
+ that command.
+
+For example, if C-k is bound to kill-line, and kill-line is remapped
+to new-kill-line, these commands now report:
+- C-h c and C-h k C-k reports:
+ C-k runs the command new-kill-line
+- C-h w and C-h f kill-line reports:
+ kill-line is remapped to new-kill-line which is on C-k, <deleteline>
+- C-h w and C-h f new-kill-line reports:
+ new-kill-line is on C-k
+
+*** The apropos commands now accept a list of words to match.
+When more than one word is specified, at least two of those words must
+be present for an item to match. Regular expression matching is still
+available.
+
+*** The new option `apropos-sort-by-scores' causes the matching items
+to be sorted according to their score. The score for an item is a
+number calculated to indicate how well the item matches the words or
+regular expression that you entered to the apropos command. The best
+match is listed first, and the calculated score is shown for each
+matching item.
+
+*** Help commands `describe-function' and `describe-key' now show function
+arguments in lowercase italics on displays that support it. To change the
+default, customize face `help-argument-name' or redefine the function
+`help-default-arg-highlight'.
+
+*** C-h v and C-h f commands now include a hyperlink to the C source for
+variables and functions defined in C (if the C source is available).
+
+*** Help mode now only makes hyperlinks for faces when the face name is
+preceded or followed by the word `face'. It no longer makes
+hyperlinks for variables without variable documentation, unless
+preceded by one of the words `variable' or `option'. It now makes
+hyperlinks to Info anchors (or nodes) if the anchor (or node) name is
+enclosed in single quotes and preceded by `info anchor' or `Info
+anchor' (in addition to earlier `info node' and `Info node'). In
+addition, it now makes hyperlinks to URLs as well if the URL is
+enclosed in single quotes and preceded by `URL'.
+
+*** The new command `describe-char' (C-u C-x =) pops up a buffer with
+description various information about a character, including its
+encodings and syntax, its text properties, how to input, overlays, and
+widgets at point. You can get more information about some of them, by
+clicking on mouse-sensitive areas or moving there and pressing RET.
+
+*** The command `list-text-properties-at' has been deleted because
+C-u C-x = gives the same information and more.
+
+*** New command `display-local-help' displays any local help at point
+in the echo area. It is bound to `C-h .'. It normally displays the
+same string that would be displayed on mouse-over using the
+`help-echo' property, but, in certain cases, it can display a more
+keyboard oriented alternative.
+
+*** New user option `help-at-pt-display-when-idle' allows you to
+automatically show the help provided by `display-local-help' on
+point-over, after suitable idle time. The amount of idle time is
+determined by the user option `help-at-pt-timer-delay' and defaults
+to one second. This feature is turned off by default.
+
+** Mark command changes:
+
+*** A prefix argument is no longer required to repeat a jump to a
+previous mark if you set `set-mark-command-repeat-pop' to t. I.e. C-u
+C-SPC C-SPC C-SPC ... cycles through the mark ring. Use C-u C-u C-SPC
+to set the mark immediately after a jump.
+
+*** Marking commands extend the region when invoked multiple times.
+
+If you type C-M-SPC (mark-sexp), M-@ (mark-word), M-h
+(mark-paragraph), or C-M-h (mark-defun) repeatedly, the marked region
+extends each time, so you can mark the next two sexps with M-C-SPC
+M-C-SPC, for example. This feature also works for
+mark-end-of-sentence, if you bind that to a key. It also extends the
+region when the mark is active in Transient Mark mode, regardless of
+the last command. To start a new region with one of marking commands
+in Transient Mark mode, you can deactivate the active region with C-g,
+or set the new mark with C-SPC.
+
+*** Some commands do something special in Transient Mark mode when the
+mark is active--for instance, they limit their operation to the
+region. Even if you don't normally use Transient Mark mode, you might
+want to get this behavior from a particular command. There are two
+ways you can enable Transient Mark mode and activate the mark, for one
+command only.
+
+One method is to type C-SPC C-SPC; this enables Transient Mark mode
+and sets the mark at point. The other method is to type C-u C-x C-x.
+This enables Transient Mark mode temporarily but does not alter the
+mark or the region.
+
+After these commands, Transient Mark mode remains enabled until you
+deactivate the mark. That typically happens when you type a command
+that alters the buffer, but you can also deactivate the mark by typing
+C-g.
+
+*** Movement commands `beginning-of-buffer', `end-of-buffer',
+`beginning-of-defun', `end-of-defun' do not set the mark if the mark
+is already active in Transient Mark mode.
+
+*** M-h (mark-paragraph) now accepts a prefix arg.
+
+With positive arg, M-h marks the current and the following paragraphs;
+if the arg is negative, it marks the current and the preceding
+paragraphs.
+
+** Incremental Search changes:
+
+*** M-% typed in isearch mode invokes `query-replace' or
+`query-replace-regexp' (depending on search mode) with the current
+search string used as the string to replace.
+
+*** C-w in incremental search now grabs either a character or a word,
+making the decision in a heuristic way. This new job is done by the
+command `isearch-yank-word-or-char'. To restore the old behavior,
+bind C-w to `isearch-yank-word' in `isearch-mode-map'.
+
+*** C-y in incremental search now grabs the next line if point is already
+at the end of a line.
+
+*** C-M-w deletes and C-M-y grabs a character in isearch mode.
+Another method to grab a character is to enter the minibuffer by `M-e'
+and to type `C-f' at the end of the search string in the minibuffer.
+
+*** Vertical scrolling is now possible within incremental search.
+To enable this feature, customize the new user option
+`isearch-allow-scroll'. User written commands which satisfy stringent
+constraints can be marked as "scrolling commands". See the Emacs manual
+for details.
+
+*** Isearch no longer adds `isearch-resume' commands to the command
+history by default. To enable this feature, customize the new
+user option `isearch-resume-in-command-history'.
+
+** Replace command changes:
+
+*** When used interactively, the commands `query-replace-regexp' and
+`replace-regexp' allow \,expr to be used in a replacement string,
+where expr is an arbitrary Lisp expression evaluated at replacement
+time. `\#' in a replacement string now refers to the count of
+replacements already made by the replacement command. All regular
+expression replacement commands now allow `\?' in the replacement
+string to specify a position where the replacement string can be
+edited for each replacement. `query-replace-regexp-eval' is now
+deprecated since it offers no additional functionality.
+
+*** query-replace uses isearch lazy highlighting when the new user option
+`query-replace-lazy-highlight' is non-nil.
+
+*** The current match in query-replace is highlighted in new face
+`query-replace' which by default inherits from isearch face.
+
+*** New user option `query-replace-skip-read-only': when non-nil,
+`query-replace' and related functions simply ignore
+a match if part of it has a read-only property.
+
+** Local variables lists:
+
+*** If the local variables list contains any variable-value pairs that
+are not known to be safe, Emacs shows a prompt asking whether to apply
+the local variables list as a whole. In earlier versions, a prompt
+was only issued for variables explicitly marked as risky (for the
+definition of risky variables, see `risky-local-variable-p').
+
+At the prompt, you can choose to save the contents of this local
+variables list to `safe-local-variable-values'. This new customizable
+option is a list of variable-value pairs that are known to be safe.
+Variables can also be marked as safe with the existing
+`safe-local-variable' property (see `safe-local-variable-p').
+However, risky variables will not be added to
+`safe-local-variable-values' in this way.
+
+*** The variable `enable-local-variables' controls how local variable
+lists are handled. t, the default, specifies the standard querying
+behavior. :safe means use only safe values, and ignore the rest.
+:all means set all variables, whether or not they are safe.
+nil means ignore them all. Anything else means always query.
+
+*** The variable `safe-local-eval-forms' specifies a list of forms that
+are ok to evaluate when they appear in an `eval' local variables
+specification. Normally Emacs asks for confirmation before evaluating
+such a form, but if the form appears in this list, no confirmation is
+needed.
+
+*** If a function has a non-nil `safe-local-eval-function' property,
+that means it is ok to evaluate some calls to that function when it
+appears in an `eval' local variables specification. If the property
+is t, then any form calling that function with constant arguments is
+ok. If the property is a function or list of functions, they are called
+with the form as argument, and if any returns t, the form is ok to call.
+
+If the form is not "ok to call", that means Emacs asks for
+confirmation as before.
+
+*** In processing a local variables list, Emacs strips the prefix and
+suffix from every line before processing all the lines.
+
+*** Text properties in local variables.
+
+A file local variables list cannot specify a string with text
+properties--any specified text properties are discarded.
+
+** File operation changes:
+
+*** Unquoted `$' in file names do not signal an error any more when
+the corresponding environment variable does not exist.
+Instead, the `$ENVVAR' text is left as is, so that `$$' quoting
+is only rarely needed.
+
+*** C-x C-f RET, typing nothing in the minibuffer, is no longer a special case.
+
+Since the default input is the current directory, this has the effect
+of specifying the current directory. Normally that means to visit the
+directory with Dired.
+
+*** C-x s (save-some-buffers) now offers an option `d' to diff a buffer
+against its file, so you can see what changes you would be saving.
+
+*** Auto Compression mode is now enabled by default.
+
+*** If the user visits a file larger than `large-file-warning-threshold',
+Emacs asks for confirmation.
+
+*** The commands copy-file, rename-file, make-symbolic-link and
+add-name-to-file, when given a directory as the "new name" argument,
+convert it to a file name by merging in the within-directory part of
+the existing file's name. (This is the same convention that shell
+commands cp, mv, and ln follow.) Thus, M-x copy-file RET ~/foo RET
+/tmp RET copies ~/foo to /tmp/foo.
+
+*** require-final-newline now has two new possible values:
+
+`visit' means add a newline (as an undoable change) if it's needed
+when visiting the file.
+
+`visit-save' means add a newline (as an undoable change) if it's
+needed when visiting the file, and also add a newline if it's needed
+when saving the file.
+
+*** The new option mode-require-final-newline controls how certain
+major modes enable require-final-newline. Any major mode that's
+designed for a kind of file that should normally end in a newline
+sets require-final-newline based on mode-require-final-newline.
+So you can customize mode-require-final-newline to control what these
+modes do.
+
+*** When you are root, and you visit a file whose modes specify
+read-only, the Emacs buffer is now read-only too. Type C-x C-q if you
+want to make the buffer writable. (As root, you can in fact alter the
+file.)
+
+*** find-file-read-only visits multiple files in read-only mode,
+when the file name contains wildcard characters.
+
+*** find-alternate-file replaces the current file with multiple files,
+when the file name contains wildcard characters. It now asks if you
+wish save your changes and not just offer to kill the buffer.
+
+*** When used interactively, `format-write-file' now asks for confirmation
+before overwriting an existing file, unless a prefix argument is
+supplied. This behavior is analogous to `write-file'.
+
+*** The variable `auto-save-file-name-transforms' now has a third element that
+controls whether or not the function `make-auto-save-file-name' will
+attempt to construct a unique auto-save name (e.g. for remote files).
+
+*** The new option `write-region-inhibit-fsync' disables calls to fsync
+in `write-region'. This can be useful on laptops to avoid spinning up
+the hard drive upon each file save. Enabling this variable may result
+in data loss, use with care.
+
+** Minibuffer changes:
+
+*** The completion commands TAB, SPC and ? in the minibuffer apply only
+to the text before point. If there is text in the buffer after point,
+it remains unchanged.
+
+*** The new file-name-shadow-mode is turned ON by default, so that when
+entering a file name, any prefix which Emacs will ignore is dimmed.
+
+*** There's a new face `minibuffer-prompt'.
+Emacs adds this face to the list of text properties stored in the
+variable `minibuffer-prompt-properties', which is used to display the
+prompt string.
+
+*** Enhanced visual feedback in `*Completions*' buffer.
+
+Completions lists use faces to highlight what all completions
+have in common and where they begin to differ.
+
+The common prefix shared by all possible completions uses the face
+`completions-common-part', while the first character that isn't the
+same uses the face `completions-first-difference'. By default,
+`completions-common-part' inherits from `default', and
+`completions-first-difference' inherits from `bold'. The idea of
+`completions-common-part' is that you can use it to make the common
+parts less visible than normal, so that the rest of the differing
+parts is, by contrast, slightly highlighted.
+
+Above fontification is always done when listing completions is
+triggered at minibuffer. If you want to fontify completions whose
+listing is triggered at the other normal buffer, you have to pass
+the common prefix of completions to `display-completion-list' as
+its second argument.
+
+*** File-name completion can now ignore specified directories.
+If an element of the list in `completion-ignored-extensions' ends in a
+slash `/', it indicates a subdirectory that should be ignored when
+completing file names. Elements of `completion-ignored-extensions'
+which do not end in a slash are never considered when a completion
+candidate is a directory.
+
+*** New user option `history-delete-duplicates'.
+If set to t when adding a new history element, all previous identical
+elements are deleted from the history list.
+
+** Redisplay changes:
+
+*** The new face `mode-line-inactive' is used to display the mode line
+of non-selected windows. The `mode-line' face is now used to display
+the mode line of the currently selected window.
+
+The new variable `mode-line-in-non-selected-windows' controls whether
+the `mode-line-inactive' face is used.
+
+*** The mode line position information now comes before the major mode.
+When the file is maintained under version control, that information
+appears between the position information and the major mode.
+
+*** You can now customize the use of window fringes. To control this
+for all frames, use M-x fringe-mode or the Show/Hide submenu of the
+top-level Options menu, or customize the `fringe-mode' variable. To
+control this for a specific frame, use the command M-x
+set-fringe-style.
+
+*** Angle icons in the fringes can indicate the buffer boundaries. In
+addition, up and down arrow bitmaps in the fringe indicate which ways
+the window can be scrolled.
+
+This behavior is activated by setting the buffer-local variable
+`indicate-buffer-boundaries' to a non-nil value. The default value of
+this variable is found in `default-indicate-buffer-boundaries'.
+
+If value is `left' or `right', both angle and arrow bitmaps are
+displayed in the left or right fringe, resp.
+
+The value can also be an alist which specifies the presence and
+position of each bitmap individually.
+
+For example, ((top . left) (t . right)) places the top angle bitmap
+in left fringe, the bottom angle bitmap in right fringe, and both
+arrow bitmaps in right fringe. To show just the angle bitmaps in the
+left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)).
+
+*** On window systems, lines which are exactly as wide as the window
+(not counting the final newline character) are no longer broken into
+two lines on the display (with just the newline on the second line).
+Instead, the newline now "overflows" into the right fringe, and the
+cursor will be displayed in the fringe when positioned on that newline.
+
+The new user option 'overflow-newline-into-fringe' can be set to nil to
+revert to the old behavior of continuing such lines.
+
+*** A window can now have individual fringe and scroll-bar settings,
+in addition to the individual display margin settings.
+
+Such individual settings are now preserved when windows are split
+horizontally or vertically, a saved window configuration is restored,
+or when the frame is resized.
+
+*** When a window has display margin areas, the fringes are now
+displayed between the margins and the buffer's text area, rather than
+outside those margins.
+
+*** New face `escape-glyph' highlights control characters and escape glyphs.
+
+*** Non-breaking space and hyphens are now displayed with a special
+face, either nobreak-space or escape-glyph. You can turn this off or
+specify a different mode by setting the variable `nobreak-char-display'.
+
+*** The parameters of automatic hscrolling can now be customized.
+The variable `hscroll-margin' determines how many columns away from
+the window edge point is allowed to get before automatic hscrolling
+will horizontally scroll the window. The default value is 5.
+
+The variable `hscroll-step' determines how many columns automatic
+hscrolling scrolls the window when point gets too close to the
+window edge. If its value is zero, the default, Emacs scrolls the
+window so as to center point. If its value is an integer, it says how
+many columns to scroll. If the value is a floating-point number, it
+gives the fraction of the window's width to scroll the window.
+
+The variable `automatic-hscrolling' was renamed to
+`auto-hscroll-mode'. The old name is still available as an alias.
+
+*** Moving or scrolling through images (and other lines) taller than
+the window now works sensibly, by automatically adjusting the window's
+vscroll property.
+
+*** Preemptive redisplay now adapts to current load and bandwidth.
+
+To avoid preempting redisplay on fast computers, networks, and displays,
+the arrival of new input is now performed at regular intervals during
+redisplay. The new variable `redisplay-preemption-period' specifies
+the period; the default is to check for input every 0.1 seconds.
+
+*** 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.
+
+*** If value of `auto-resize-tool-bars' is `grow-only', the tool bar
+will expand as needed, but not contract automatically. To contract
+the tool bar, you must type C-l.
+
+*** New customize option `overline-margin' controls the space between
+overline and text.
+
+*** New variable `x-underline-at-descent-line' controls the relative
+position of the underline. When set, it overrides the
+`x-use-underline-position-properties' variables.
+
+** New faces:
+
+*** `mode-line-highlight' is the standard face indicating mouse sensitive
+elements on mode-line (and header-line) like `highlight' face on text
+areas.
+
+*** `mode-line-buffer-id' is the standard face for buffer identification
+parts of the mode line.
+
+*** `shadow' face defines the appearance of the "shadowed" text, i.e.
+the text which should be less noticeable than the surrounding text.
+This can be achieved by using shades of grey in contrast with either
+black or white default foreground color. This generic shadow face
+allows customization of the appearance of shadowed text in one place,
+so package-specific faces can inherit from it.
+
+*** `vertical-border' face is used for the vertical divider between windows.
+
+** Font-Lock (syntax highlighting) changes:
+
+*** All modes now support using M-x font-lock-mode to toggle
+fontification, even those such as Occur, Info, and comint-derived
+modes that do their own fontification in a special way.
+
+The variable `Info-fontify' is no longer applicable; to disable
+fontification in Info, remove `turn-on-font-lock' from
+`Info-mode-hook'.
+
+*** New standard font-lock face `font-lock-comment-delimiter-face'.
+
+*** New standard font-lock face `font-lock-preprocessor-face'.
+
+*** Easy to overlook single character negation can now be font-locked.
+You can use the new variable `font-lock-negation-char-face' and the face of
+the same name to customize this. Currently the cc-modes, sh-script-mode,
+cperl-mode and make-mode support this.
+
+*** Font-Lock mode: in major modes such as Lisp mode, where some Emacs
+features assume that an open-paren in column 0 is always outside of
+any string or comment, Font-Lock now highlights any such open-paren in
+bold-red if it is inside a string or a comment, to indicate that it
+can cause trouble. You should rewrite the string or comment so that
+the open-paren is not in column 0.
+
+*** M-o now is the prefix key for setting text properties;
+M-o M-o requests refontification.
+
+*** The default settings for JIT stealth lock parameters are changed.
+The default value for the user option jit-lock-stealth-time is now nil
+instead of 3. This setting of jit-lock-stealth-time disables stealth
+fontification: on today's machines, it may be a bug in font lock
+patterns if fontification otherwise noticeably degrades interactivity.
+If you find movement in infrequently visited buffers sluggish (and the
+major mode maintainer has no better idea), customizing
+jit-lock-stealth-time to a non-nil value will let Emacs fontify
+buffers in the background when it considers the system to be idle.
+jit-lock-stealth-nice is now 0.5 instead of 0.125 which is supposed to
+cause less load than the old defaults.
+
+*** jit-lock can now be delayed with `jit-lock-defer-time'.
+
+If this variable is non-nil, its value should be the amount of Emacs
+idle time in seconds to wait before starting fontification. For
+example, if you set `jit-lock-defer-time' to 0.25, fontification will
+only happen after 0.25s of idle time.
+
+*** contextual refontification is now separate from stealth fontification.
+
+jit-lock-defer-contextually is renamed jit-lock-contextually and
+jit-lock-context-time determines the delay after which contextual
+refontification takes place.
+
+*** lazy-lock is considered obsolete.
+
+The `lazy-lock' package is superseded by `jit-lock' and is considered
+obsolete. `jit-lock' is activated by default; if you wish to continue
+using `lazy-lock', activate it in your ~/.emacs like this:
+ (setq font-lock-support-mode 'lazy-lock-mode)
+
+If you invoke `lazy-lock-mode' directly rather than through
+`font-lock-support-mode', it now issues a warning:
+ "Use font-lock-support-mode rather than calling lazy-lock-mode"
+
+** Menu support:
+
+*** A menu item "Show/Hide" was added to the top-level menu "Options".
+This menu allows you to turn various display features on and off (such
+as the fringes, the tool bar, the speedbar, and the menu bar itself).
+You can also move the vertical scroll bar to either side here or turn
+it off completely. There is also a menu-item to toggle displaying of
+current date and time, current line and column number in the mode-line.
+
+*** Speedbar has moved from the "Tools" top level menu to "Show/Hide".
+
+*** The menu item "Open File..." has been split into two items, "New File..."
+and "Open File...". "Open File..." now opens only existing files. This is
+to support existing GUI file selection dialogs better.
+
+*** The file selection dialog for Gtk+, Mac, W32 and Motif/LessTif can be
+disabled by customizing the variable `use-file-dialog'.
+
+*** The pop up menus for Lucid now stay up if you do a fast click and can
+be navigated with the arrow keys (like Gtk+, Mac and W32).
+
+*** The menu bar for Motif/LessTif/Lucid/Gtk+ can be navigated with keys.
+Pressing F10 shows the first menu in the menu bar. Navigation is done with
+the arrow keys, select with the return key and cancel with the escape keys.
+
+*** The Lucid menus can display multilingual text in your locale. You have
+to explicitly specify a fontSet resource for this to work, for example
+`-xrm "Emacs*fontSet: -*-helvetica-medium-r-*--*-120-*-*-*-*-*-*,*"'.
+
+*** Dialogs for Lucid/Athena and LessTif/Motif now pop down on pressing
+ESC, like they do for Gtk+, Mac and W32.
+
+*** For the Gtk+ version, you can make Emacs use the old file dialog
+by setting the variable `x-gtk-use-old-file-dialog' to t. Default is to use
+the new dialog.
+
+*** You can exit dialog windows and menus by typing C-g.
+
+** Buffer Menu changes:
+
+*** The new options `buffers-menu-show-directories' and
+`buffers-menu-show-status' let you control how buffers are displayed
+in the menu dropped down when you click "Buffers" from the menu bar.
+
+`buffers-menu-show-directories' controls whether the menu displays
+leading directories as part of the file name visited by the buffer.
+If its value is `unless-uniquify', the default, directories are
+shown unless uniquify-buffer-name-style' is non-nil. The value of nil
+and t turn the display of directories off and on, respectively.
+
+`buffers-menu-show-status' controls whether the Buffers menu includes
+the modified and read-only status of the buffers. By default it is
+t, and the status is shown.
+
+Setting these variables directly does not take effect until next time
+the Buffers menu is regenerated.
+
+*** New command `Buffer-menu-toggle-files-only' toggles display of file
+buffers only in the Buffer Menu. It is bound to T in Buffer Menu
+mode.
+
+*** `buffer-menu' and `list-buffers' now list buffers whose names begin
+with a space, when those buffers are visiting files. Normally buffers
+whose names begin with space are omitted.
+
+** Mouse changes:
+
+*** You can now follow links by clicking Mouse-1 on the link.
+
+Traditionally, Emacs uses a Mouse-1 click to set point and a Mouse-2
+click to follow a link, whereas most other applications use a Mouse-1
+click for both purposes, depending on whether you click outside or
+inside a link. Now the behavior of a Mouse-1 click has been changed
+to match this context-sensitive dual behavior. (If you prefer the old
+behavior, set the user option `mouse-1-click-follows-link' to nil.)
+
+Depending on the current mode, a Mouse-2 click in Emacs can do much
+more than just follow a link, so the new Mouse-1 behavior is only
+activated for modes which explicitly mark a clickable text as a "link"
+(see the new function `mouse-on-link-p' for details). The Lisp
+packages that are included in release 22.1 have been adapted to do
+this, but external packages may not yet support this. However, there
+is no risk in using such packages, as the worst thing that could
+happen is that you get the original Mouse-1 behavior when you click
+on a link, which typically means that you set point where you click.
+
+If you want to get the original Mouse-1 action also inside a link, you
+just need to press the Mouse-1 button a little longer than a normal
+click (i.e. press and hold the Mouse-1 button for half a second before
+you release it).
+
+Dragging the Mouse-1 inside a link still performs the original
+drag-mouse-1 action, typically copy the text.
+
+You can customize the new Mouse-1 behavior via the new user options
+`mouse-1-click-follows-link' and `mouse-1-click-in-non-selected-windows'.
+
+*** If you set the new variable `mouse-autoselect-window' to a non-nil
+value, windows are automatically selected as you move the mouse from
+one Emacs window to another, even within a frame. A minibuffer window
+can be selected only when it is active.
+
+*** On X, when the window manager requires that you click on a frame to
+select it (give it focus), the selected window and cursor position
+normally changes according to the mouse click position. If you set
+the variable x-mouse-click-focus-ignore-position to t, the selected
+window and cursor position do not change when you click on a frame
+to give it focus.
+
+*** Emacs normally highlights mouse sensitive text whenever the mouse
+is over the text. By setting the new variable `mouse-highlight', you
+can optionally enable mouse highlighting only after you move the
+mouse, so that highlighting disappears when you press a key. You can
+also disable mouse highlighting.
+
+*** You can now customize if selecting a region by dragging the mouse
+shall not copy the selected text to the kill-ring by setting the new
+variable mouse-drag-copy-region to nil.
+
+*** Under X, mouse-wheel-mode is turned on by default.
+
+*** Emacs ignores mouse-2 clicks while the mouse wheel is being moved.
+
+People tend to push the mouse wheel (which counts as a mouse-2 click)
+unintentionally while turning the wheel, so these clicks are now
+ignored. You can customize this with the mouse-wheel-click-event and
+mouse-wheel-inhibit-click-time variables.
+
+*** mouse-wheels can now scroll a specific fraction of the window
+(rather than a fixed number of lines) and the scrolling is `progressive'.
+
+** Multilingual Environment (Mule) changes:
+
+*** You can disable character translation for a file using the -*-
+construct. Include `enable-character-translation: nil' inside the
+-*-...-*- to disable any character translation that may happen by
+various global and per-coding-system translation tables. You can also
+specify it in a local variable list at the end of the file. For
+shortcut, instead of using this long variable name, you can append the
+character "!" at the end of coding-system name specified in -*-
+construct or in a local variable list. For example, if a file has the
+following header, it is decoded by the coding system `iso-latin-1'
+without any character translation:
+;; -*- coding: iso-latin-1!; -*-
+
+*** Language environment and various default coding systems are setup
+more correctly according to the current locale name. If the locale
+name doesn't specify a charset, the default is what glibc defines.
+This change can result in using the different coding systems as
+default in some locale (e.g. vi_VN).
+
+*** The keyboard-coding-system is now automatically set based on your
+current locale settings if you are not using a window system. This
+can mean that the META key doesn't work but generates non-ASCII
+characters instead, depending on how the terminal (or terminal
+emulator) works. Use `set-keyboard-coding-system' (or customize
+keyboard-coding-system) if you prefer META to work (the old default)
+or if the locale doesn't describe the character set actually generated
+by the keyboard. See Info node `Unibyte Mode'.
+
+*** The new command `set-file-name-coding-system' (C-x RET F) sets
+coding system for encoding and decoding file names. A new menu item
+(Options->Mule->Set Coding Systems->For File Name) invokes this
+command.
+
+*** The new command `revert-buffer-with-coding-system' (C-x RET r)
+revisits the current file using a coding system that you specify.
+
+*** New command `recode-region' decodes the region again by a specified
+coding system.
+
+*** The new command `recode-file-name' changes the encoding of the name
+of a file.
+
+*** New command `ucs-insert' inserts a character specified by its
+unicode.
+
+*** New command quail-show-key shows what key (or key sequence) to type
+in the current input method to input a character at point.
+
+*** Limited support for character `unification' has been added.
+Emacs now knows how to translate between different representations of
+the same characters in various Emacs charsets according to standard
+Unicode mappings. This applies mainly to characters in the ISO 8859
+sets plus some other 8-bit sets, but can be extended. For instance,
+translation works amongst the Emacs ...-iso8859-... charsets and the
+mule-unicode-... ones.
+
+By default this translation happens automatically on encoding.
+Self-inserting characters are translated to make the input conformant
+with the encoding of the buffer in which it's being used, where
+possible.
+
+You can force a more complete unification with the user option
+unify-8859-on-decoding-mode. That maps all the Latin-N character sets
+into Unicode characters (from the latin-iso8859-1 and
+mule-unicode-0100-24ff charsets) on decoding. Note that this mode
+will often effectively clobber data with an iso-2022 encoding.
+
+*** New language environments (set up automatically according to the
+locale): Belarusian, Bulgarian, Chinese-EUC-TW, Croatian, Esperanto,
+French, Georgian, Italian, Latin-7, Latvian, Lithuanian, Malayalam,
+Russian, Russian, Slovenian, Swedish, Tajik, Tamil, UTF-8,Ukrainian,
+Welsh,Latin-6, Windows-1255.
+
+*** New input methods: latin-alt-postfix, latin-postfix, latin-prefix,
+belarusian, bulgarian-bds, bulgarian-phonetic, chinese-sisheng (for
+Chinese Pinyin characters), croatian, dutch, georgian, latvian-keyboard,
+lithuanian-numeric, lithuanian-keyboard, malayalam-inscript, rfc1345,
+russian-computer, sgml, slovenian, tamil-inscript, ukrainian-computer,
+ucs, vietnamese-telex, welsh.
+
+*** There is support for decoding Greek and Cyrillic characters into
+either Unicode (the mule-unicode charsets) or the iso-8859 charsets,
+when possible. The latter are more space-efficient.
+ This is controlled by user option utf-fragment-on-decoding.
+
+*** Improved Thai support. A new minor mode `thai-word-mode' (which is
+automatically activated if you select Thai as a language
+environment) changes key bindings of most word-oriented commands to
+versions which recognize Thai words. Affected commands are
+ M-f (forward-word)
+ M-b (backward-word)
+ M-d (kill-word)
+ M-DEL (backward-kill-word)
+ M-t (transpose-words)
+ M-q (fill-paragraph)
+
+*** Indian support has been updated.
+The in-is13194 coding system is now Unicode-based. CDAC fonts are
+assumed. There is a framework for supporting various Indian scripts,
+but currently only Devanagari, Malayalam and Tamil are supported.
+
+*** The utf-8/16 coding systems have been enhanced.
+By default, untranslatable utf-8 sequences are simply composed into
+single quasi-characters. User option `utf-translate-cjk-mode' (it is
+turned on by default) arranges to translate many utf-8 CJK character
+sequences into real Emacs characters in a similar way to the Mule-UCS
+system. As this loads a fairly big data on demand, people who are not
+interested in CJK characters may want to customize it to nil.
+You can augment/amend the CJK translation via hash tables
+`ucs-mule-cjk-to-unicode' and `ucs-unicode-to-mule-cjk'. The utf-8
+coding system now also encodes characters from most of Emacs's
+one-dimensional internal charsets, specifically the ISO-8859 ones.
+The utf-16 coding system is affected similarly.
+
+*** A UTF-7 coding system is available in the library `utf-7'.
+
+*** A new coding system `euc-tw' has been added for traditional Chinese
+in CNS encoding; it accepts both Big 5 and CNS as input; on saving,
+Big 5 is then converted to CNS.
+
+*** Many new coding systems are available in the `code-pages' library.
+These include complete versions of most of those in codepage.el, based
+on Unicode mappings. `codepage-setup' is now obsolete and is used
+only in the MS-DOS port of Emacs. All coding systems defined in
+`code-pages' are auto-loaded.
+
+*** New variable `utf-translate-cjk-unicode-range' controls which
+Unicode characters to translate in `utf-translate-cjk-mode'.
+
+*** iso-10646-1 (`Unicode') fonts can be used to display any range of
+characters encodable by the utf-8 coding system. Just specify the
+fontset appropriately.
+
+** Customize changes:
+
+*** Custom themes are collections of customize options. Create a
+custom theme with M-x customize-create-theme. Use M-x load-theme to
+load and enable a theme, and M-x disable-theme to disable it. Use M-x
+enable-theme to enable a disabled theme.
+
+*** The commands M-x customize-face and M-x customize-face-other-window
+now look at the character after point. If a face or faces are
+specified for that character, the commands by default customize those
+faces.
+
+*** The face-customization widget has been reworked to be less confusing.
+In particular, when you enable a face attribute using the corresponding
+check-box, there's no longer a redundant `*' option in value selection
+for that attribute; the values you can choose are only those which make
+sense for the attribute. When an attribute is de-selected by unchecking
+its check-box, then the (now ignored, but still present temporarily in
+case you re-select the attribute) value is hidden.
+
+*** When you set or reset a variable's value in a Customize buffer,
+the previous value becomes the "backup value" of the variable.
+You can go back to that backup value by selecting "Use Backup Value"
+under the "[State]" button.
+
+** Dired mode:
+
+*** In Dired's ! command (dired-do-shell-command), `*' and `?' now
+control substitution of the file names only when they are surrounded
+by whitespace. This means you can now use them as shell wildcards
+too. If you want to use just plain `*' as a wildcard, type `*""'; the
+double quotes make no difference in the shell, but they prevent
+special treatment in `dired-do-shell-command'.
+
+*** The Dired command `dired-goto-file' is now bound to j, not M-g.
+This is to avoid hiding the global key binding of M-g.
+
+*** New faces dired-header, dired-mark, dired-marked, dired-flagged,
+dired-ignored, dired-directory, dired-symlink, dired-warning
+introduced for Dired mode instead of font-lock faces.
+
+*** New Dired command `dired-compare-directories' marks files
+with different file attributes in two dired buffers.
+
+*** New Dired command `dired-do-touch' (bound to T) changes timestamps
+of marked files with the value entered in the minibuffer.
+
+*** In Dired, the w command now stores the current line's file name
+into the kill ring. With a zero prefix arg, it stores the absolute file name.
+
+*** In Dired-x, Omitting files is now a minor mode, dired-omit-mode.
+
+The mode toggling command is bound to M-o. A new command
+dired-mark-omitted, bound to * O, marks omitted files. The variable
+dired-omit-files-p is obsoleted, use the mode toggling function
+instead.
+
+*** The variables dired-free-space-program and dired-free-space-args
+have been renamed to directory-free-space-program and
+directory-free-space-args, and they now apply whenever Emacs puts a
+directory listing into a buffer.
+
+** Comint changes:
+
+*** The new INSIDE_EMACS environment variable is set to "t" in subshells
+running inside Emacs. This supersedes the EMACS environment variable,
+which will be removed in a future Emacs release. Programs that need
+to know whether they are started inside Emacs should check INSIDE_EMACS
+instead of EMACS.
+
+*** The comint prompt can now be made read-only, using the new user
+option `comint-prompt-read-only'. This is not enabled by default,
+except in IELM buffers. The read-only status of IELM prompts can be
+controlled with the new user option `ielm-prompt-read-only', which
+overrides `comint-prompt-read-only'.
+
+The new commands `comint-kill-whole-line' and `comint-kill-region'
+support editing comint buffers with read-only prompts.
+
+`comint-kill-whole-line' is like `kill-whole-line', but ignores both
+read-only and field properties. Hence, it always kill entire
+lines, including any prompts.
+
+`comint-kill-region' is like `kill-region', except that it ignores
+read-only properties, if it is safe to do so. This means that if any
+part of a prompt is deleted, then the entire prompt must be deleted
+and that all prompts must stay at the beginning of a line. If this is
+not the case, then `comint-kill-region' behaves just like
+`kill-region' if read-only properties are involved: it copies the text
+to the kill-ring, but does not delete it.
+
+*** The new command `comint-insert-previous-argument' in comint-derived
+modes (shell-mode, etc.) inserts arguments from previous command lines,
+like bash's `ESC .' binding. It is bound by default to `C-c .', but
+otherwise behaves quite similarly to the bash version.
+
+*** `comint-use-prompt-regexp-instead-of-fields' has been renamed
+`comint-use-prompt-regexp'. The old name has been kept as an alias,
+but declared obsolete.
+
+** M-x Compile changes:
+
+*** M-x compile has become more robust and reliable
+
+Quite a few more kinds of messages are recognized. Messages that are
+recognized as warnings or informational come in orange or green, instead of
+red. Informational messages are by default skipped with `next-error'
+(controlled by `compilation-skip-threshold').
+
+Location data is collected on the fly as the *compilation* buffer changes.
+This means you could modify messages to make them point to different files.
+This also means you can not go to locations of messages you may have deleted.
+
+The variable `compilation-error-regexp-alist' has now become customizable. If
+you had added your own regexps to this, you'll probably need to include a
+leading `^', otherwise they'll match anywhere on a line. There is now also a
+`compilation-mode-font-lock-keywords' and it nicely handles all the checks
+that configure outputs and -o options so you see at a glance where you are.
+
+The new file etc/compilation.txt gives examples of each type of message.
+
+*** New user option `compilation-environment'.
+This option allows you to specify environment variables for inferior
+compilation processes without affecting the environment that all
+subprocesses inherit.
+
+*** New user option `compilation-disable-input'.
+If this is non-nil, send end-of-file as compilation process input.
+
+*** New options `next-error-highlight' and `next-error-highlight-no-select'
+specify the method of highlighting of the corresponding source line
+in new face `next-error'.
+
+*** A new minor mode `next-error-follow-minor-mode' can be used in
+compilation-mode, grep-mode, occur-mode, and diff-mode (i.e. all the
+modes that can use `next-error'). In this mode, cursor motion in the
+buffer causes automatic display in another window of the corresponding
+matches, compilation errors, etc. This minor mode can be toggled with
+C-c C-f.
+
+*** When the left fringe is displayed, an arrow points to current message in
+the compilation buffer.
+
+*** The new variable `compilation-context-lines' controls lines of leading
+context before the current message. If nil and the left fringe is displayed,
+it doesn't scroll the compilation output window. If there is no left fringe,
+no arrow is displayed and a value of nil means display the message at the top
+of the window.
+
+** Occur mode changes:
+
+*** The new command `multi-occur' is just like `occur', except it can
+search multiple buffers. There is also a new command
+`multi-occur-in-matching-buffers' which allows you to specify the
+buffers to search by their filenames or buffer names. Internally,
+Occur mode has been rewritten, and now uses font-lock, among other
+changes.
+
+*** You can now use next-error (C-x `) and previous-error to advance to
+the next/previous matching line found by M-x occur.
+
+*** In the *Occur* buffer, `o' switches to it in another window, and
+C-o displays the current line's occurrence in another window without
+switching to it.
+
+** Grep changes:
+
+*** Grep has been decoupled from compilation mode setup.
+
+There's a new separate package grep.el, with its own submenu and
+customization group.
+
+*** `grep-find' is now also available under the name `find-grep' where
+people knowing `find-grep-dired' would probably expect it.
+
+*** New commands `lgrep' (local grep) and `rgrep' (recursive grep) are
+more user-friendly versions of `grep' and `grep-find', which prompt
+separately for the regular expression to match, the files to search,
+and the base directory for the search. Case sensitivity of the
+search is controlled by the current value of `case-fold-search'.
+
+These commands build the shell commands based on the new variables
+`grep-template' (lgrep) and `grep-find-template' (rgrep).
+
+The files to search can use aliases defined in `grep-files-aliases'.
+
+Subdirectories listed in `grep-find-ignored-directories' such as those
+typically used by various version control systems, like CVS and arch,
+are automatically skipped by `rgrep'.
+
+*** The grep commands provide highlighting support.
+
+Hits are fontified in green, and hits in binary files in orange. Grep buffers
+can be saved and automatically revisited.
+
+*** New option `grep-highlight-matches' highlights matches in *grep*
+buffer. It uses a special feature of some grep programs which accept
+--color option to output markers around matches. When going to the next
+match with `next-error' the exact match is highlighted in the source
+buffer. Otherwise, if `grep-highlight-matches' is nil, the whole
+source line is highlighted.
+
+*** New key bindings in grep output window:
+SPC and DEL scrolls window up and down. C-n and C-p moves to next and
+previous match in the grep window. RET jumps to the source line of
+the current match. `n' and `p' shows next and previous match in
+other window, but does not switch buffer. `{' and `}' jumps to the
+previous or next file in the grep output. TAB also jumps to the next
+file.
+
+*** M-x grep now tries to avoid appending `/dev/null' to the command line
+by using GNU grep `-H' option instead. M-x grep automatically
+detects whether this is possible or not the first time it is invoked.
+When `-H' is used, the grep command line supplied by the user is passed
+unchanged to the system to execute, which allows more complicated
+command lines to be used than was possible before.
+
+*** The new variables `grep-window-height' and `grep-scroll-output' override
+the corresponding compilation mode settings, for grep commands only.
+
+** Cursor display changes:
+
+*** Emacs can produce an underscore-like (horizontal bar) cursor.
+The underscore cursor is set by putting `(cursor-type . hbar)' in
+default-frame-alist. It supports variable heights, like the `bar'
+cursor does.
+
+*** The variable `cursor-in-non-selected-windows' can now be set to any
+of the recognized cursor types.
+
+*** Display of hollow cursors now obeys the buffer-local value (if any)
+of `cursor-in-non-selected-windows' in the buffer that the cursor
+appears in.
+
+*** On text terminals, the variable `visible-cursor' controls whether Emacs
+uses the "very visible" cursor (the default) or the normal cursor.
+
+*** The X resource cursorBlink can be used to turn off cursor blinking.
+
+*** On X, MS Windows, and Mac OS, the blinking cursor's "off" state is
+now controlled by the variable `blink-cursor-alist'.
+
+** X Windows Support:
+
+*** Emacs now supports drag and drop for X. Dropping a file on a window
+opens it, dropping text inserts the text. Dropping a file on a dired
+buffer copies or moves the file to that directory.
+
+*** Under X11, it is possible to swap Alt and Meta (and Super and Hyper).
+The new variables `x-alt-keysym', `x-hyper-keysym', `x-meta-keysym',
+and `x-super-keysym' can be used to choose which keysyms Emacs should
+use for the modifiers. For example, the following two lines swap
+Meta and Alt:
+ (setq x-alt-keysym 'meta)
+ (setq x-meta-keysym 'alt)
+
+*** The X resource useXIM can be used to turn off use of XIM, which can
+speed up Emacs with slow networking to the X server.
+
+If the configure option `--without-xim' was used to turn off use of
+XIM by default, the X resource useXIM can be used to turn it on.
+
+*** The new variable `x-select-request-type' controls how Emacs
+requests X selection. The default value is nil, which means that
+Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING,
+and use the more appropriately result.
+
+*** The scrollbar under LessTif or Motif has a smoother drag-scrolling.
+On the other hand, the size of the thumb does not represent the actual
+amount of text shown any more (only a crude approximation of it).
+
+** Xterm support:
+
+*** If you enable Xterm Mouse mode, Emacs will respond to mouse clicks
+on the mode line, header line and display margin, when run in an xterm.
+
+*** Improved key bindings support when running in an xterm.
+When Emacs is running in an xterm more key bindings are available.
+The following should work:
+{C,S,C-S,A}-{right,left,up,down,prior,next,delete,insert,F1-12}.
+These key bindings work on xterm from X.org 6.8 (and later versions),
+they might not work on some older versions of xterm, or on some
+proprietary versions.
+The various keys generated by xterm when the "modifyOtherKeys"
+resource is set are also supported.
+
+** Character terminal color support changes:
+
+*** The new command-line option --color=MODE lets you specify a standard
+mode for a tty color support. It is meant to be used on character
+terminals whose capabilities are not set correctly in the terminal
+database, or with terminal emulators which support colors, but don't
+set the TERM environment variable to a name of a color-capable
+terminal. "emacs --color" uses the same color commands as GNU `ls'
+when invoked with "ls --color", so if your terminal can support colors
+in "ls --color", it will support "emacs --color" as well. See the
+user manual for the possible values of the MODE parameter.
+
+*** Emacs now supports several character terminals which provide more
+than 8 colors. For example, for `xterm', 16-color, 88-color, and
+256-color modes are supported. Emacs automatically notes at startup
+the extended number of colors, and defines the appropriate entries for
+all of these colors.
+
+*** Emacs now uses the full range of available colors for the default
+faces when running on a color terminal, including 16-, 88-, and
+256-color xterms. This means that when you run "emacs -nw" on an
+88-color or 256-color xterm, you will see essentially the same face
+colors as on X.
+
+*** There's a new support for colors on `rxvt' terminal emulator.
+
+** ebnf2ps changes:
+
+*** New option `ebnf-arrow-extra-width' which specify extra width for arrow
+shape drawing.
+The extra width is used to avoid that the arrowhead and the terminal border
+overlap. It depends on `ebnf-arrow-shape' and `ebnf-line-width'.
+
+*** New option `ebnf-arrow-scale' which specify the arrow scale.
+Values lower than 1.0, shrink the arrow.
+Values greater than 1.0, expand the arrow.
+
+* New Modes and Packages in Emacs 22.1
+
+** CUA mode is now part of the Emacs distribution.
+
+The new cua package provides CUA-like keybindings using C-x for
+cut (kill), C-c for copy, C-v for paste (yank), and C-z for undo.
+With cua, the region can be set and extended using shifted movement
+keys (like pc-selection-mode) and typed text replaces the active
+region (like delete-selection-mode). Do not enable these modes with
+cua-mode. Customize the variable `cua-mode' to enable cua.
+
+The cua-selection-mode enables the CUA keybindings for the region but
+does not change the bindings for C-z/C-x/C-c/C-v. It can be used as a
+replacement for pc-selection-mode.
+
+In addition, cua provides unified rectangle support with visible
+rectangle highlighting: Use C-return to start a rectangle, extend it
+using the movement commands (or mouse-3), and cut or copy it using C-x
+or C-c (using C-w and M-w also works).
+
+Use M-o and M-c to `open' or `close' the rectangle, use M-b or M-f, to
+fill it with blanks or another character, use M-u or M-l to upcase or
+downcase the rectangle, use M-i to increment the numbers in the
+rectangle, use M-n to fill the rectangle with a numeric sequence (such
+as 10 20 30...), use M-r to replace a regexp in the rectangle, and use
+M-' or M-/ to restrict command on the rectangle to a subset of the
+rows. See the commentary in cua-base.el for more rectangle commands.
+
+Cua also provides unified support for registers: Use a numeric
+prefix argument between 0 and 9, i.e. M-0 .. M-9, for C-x, C-c, and
+C-v to cut or copy into register 0-9, or paste from register 0-9.
+
+The last text deleted (not killed) is automatically stored in
+register 0. This includes text deleted by typing text.
+
+Finally, cua provides a global mark which is set using S-C-space.
+When the global mark is active, any text which is cut or copied is
+automatically inserted at the global mark position. See the
+commentary in cua-base.el for more global mark related commands.
+
+The features of cua also works with the standard Emacs bindings for
+kill, copy, yank, and undo. If you want to use cua mode, but don't
+want the C-x, C-c, C-v, and C-z bindings, you can customize the
+`cua-enable-cua-keys' variable.
+
+Note: This version of cua mode is not backwards compatible with older
+versions of cua.el and cua-mode.el. To ensure proper operation, you
+must remove older versions of cua.el or cua-mode.el as well as the
+loading and customization of those packages from the .emacs file.
+
+** Tramp is now part of the distribution.
+
+This package is similar to Ange-FTP: it allows you to edit remote
+files. But whereas Ange-FTP uses FTP to access the remote host,
+Tramp uses a shell connection. The shell connection is always used
+for filename completion and directory listings and suchlike, but for
+the actual file transfer, you can choose between the so-called
+`inline' methods (which transfer the files through the shell
+connection using base64 or uu encoding) and the `out-of-band' methods
+(which invoke an external copying program such as `rcp' or `scp' or
+`rsync' to do the copying).
+
+Shell connections can be acquired via `rsh', `ssh', `telnet' and also
+`su' and `sudo'. Ange-FTP is still supported via the `ftp' method.
+
+If you want to disable Tramp you should set
+
+ (setq tramp-default-method "ftp")
+
+Removing Tramp, and re-enabling Ange-FTP, can be achieved by M-x
+tramp-unload-tramp.
+
+** The image-dired.el package allows you to easily view, tag and in
+other ways manipulate image files and their thumbnails, using dired as
+the main interface. Image-Dired provides functionality to generate
+simple image galleries.
+
+** Image files are normally visited in Image mode, which lets you toggle
+between viewing the image and viewing the text using C-c C-c.
+
+** The new python.el package is used to edit Python and Jython programs.
+
+** The URL package (which had been part of W3) is now part of Emacs.
+
+** Calc is now part of the Emacs distribution.
+
+Calc is an advanced desk calculator and mathematical tool written in
+Emacs Lisp. The prefix for Calc has been changed to `C-x *' and Calc
+can be started with `C-x * *'. The Calc manual is separate from the
+Emacs manual; within Emacs, type "C-h i m calc RET" to read the
+manual. A reference card is available in `etc/calccard.tex' and
+`etc/calccard.ps'.
+
+** Org mode is now part of the Emacs distribution
+
+Org mode is a mode for keeping notes, maintaining ToDo lists, and
+doing project planning with a fast and effective plain-text system.
+It also contains a plain-text table editor with spreadsheet-like
+capabilities.
+
+The Org mode table editor can be integrated into any major mode by
+activating the minor mode, Orgtbl mode.
+
+The documentation for org-mode is in a separate manual; within Emacs,
+type "C-h i m org RET" to read that manual. A reference card is
+available in `etc/orgcard.tex' and `etc/orgcard.ps'.
+
+** ERC is now part of the Emacs distribution.
+
+ERC is a powerful, modular, and extensible IRC client for Emacs.
+
+To see what modules are available, type
+M-x customize-option erc-modules RET.
+
+To start an IRC session with ERC, type M-x erc, and follow the prompts
+for server, port, and nick.
+
+** Rcirc is now part of the Emacs distribution.
+
+Rcirc is an Internet relay chat (IRC) client. It supports
+simultaneous connections to multiple IRC servers. Each discussion
+takes place in its own buffer. For each connection you can join
+several channels (many-to-many) and participate in private
+(one-to-one) chats. Both channel and private chats are contained in
+separate buffers.
+
+To start an IRC session using the default parameters, type M-x irc.
+If you type C-u M-x irc, it prompts you for the server, nick, port and
+startup channel parameters before connecting.
+
+** The new package ibuffer provides a powerful, completely
+customizable replacement for buff-menu.el.
+
+** Newsticker is now part of the Emacs distribution.
+
+Newsticker asynchronously retrieves headlines (RSS) from a list of news
+sites, prepares these headlines for reading, and allows for loading the
+corresponding articles in a web browser. Its documentation is in a
+separate manual.
+
+** The wdired.el package allows you to use normal editing commands on Dired
+buffers to change filenames, permissions, etc...
+
+** Ido mode is now part of the Emacs distribution.
+
+The ido (interactively do) package is an extension of the iswitchb
+package to do interactive opening of files and directories in addition
+to interactive buffer switching. Ido is a superset of iswitchb (with
+a few exceptions), so don't enable both packages.
+
+** The new global minor mode `file-name-shadow-mode' modifies the way
+filenames being entered by the user in the minibuffer are displayed, so
+that it's clear when part of the entered filename will be ignored due to
+Emacs' filename parsing rules. The ignored portion can be made dim,
+invisible, or otherwise less visually noticeable. The display method can
+be displayed by customizing the variable `file-name-shadow-properties'.
+
+** Emacs' keyboard macro facilities have been enhanced by the new
+kmacro package.
+
+Keyboard macros are now defined and executed via the F3 and F4 keys:
+F3 starts a macro, F4 ends the macro, and pressing F4 again executes
+the last macro. While defining the macro, F3 inserts a counter value
+which automatically increments every time the macro is executed.
+
+There is now a keyboard macro ring which stores the most recently
+defined macros.
+
+The C-x C-k sequence is now a prefix for the kmacro keymap which
+defines bindings for moving through the keyboard macro ring,
+C-x C-k C-p and C-x C-k C-n, editing the last macro C-x C-k C-e,
+manipulating the macro counter and format via C-x C-k C-c,
+C-x C-k C-a, and C-x C-k C-f. See the commentary in kmacro.el
+for more commands.
+
+The original macro bindings C-x (, C-x ), and C-x e are still
+available, but they now interface to the keyboard macro ring too.
+
+The C-x e command now automatically terminates the current macro
+before calling it, if used while defining a macro.
+
+In addition, when ending or calling a macro with C-x e, the macro can
+be repeated immediately by typing just the `e'. You can customize
+this behavior via the variables kmacro-call-repeat-key and
+kmacro-call-repeat-with-arg.
+
+Keyboard macros can now be debugged and edited interactively.
+C-x C-k SPC steps through the last keyboard macro one key sequence
+at a time, prompting for the actions to take.
+
+** The new keypad setup package provides several common bindings for
+the numeric keypad which is available on most keyboards. The numeric
+keypad typically has the digits 0 to 9, a decimal point, keys marked
++, -, /, and *, an Enter key, and a NumLock toggle key. The keypad
+package only controls the use of the digit and decimal keys.
+
+By customizing the variables `keypad-setup', `keypad-shifted-setup',
+`keypad-numlock-setup', and `keypad-numlock-shifted-setup', or by
+using the function `keypad-setup', you can rebind all digit keys and
+the decimal key of the keypad in one step for each of the four
+possible combinations of the Shift key state (not pressed/pressed) and
+the NumLock toggle state (off/on).
+
+The choices for the keypad keys in each of the above states are:
+`Plain numeric keypad' where the keys generates plain digits,
+`Numeric keypad with decimal key' where the character produced by the
+decimal key can be customized individually (for internationalization),
+`Numeric Prefix Arg' where the keypad keys produce numeric prefix args
+for Emacs editing commands, `Cursor keys' and `Shifted Cursor keys'
+where the keys work like (shifted) arrow keys, home/end, etc., and
+`Unspecified/User-defined' where the keypad keys (kp-0, kp-1, etc.)
+are left unspecified and can be bound individually through the global
+or local keymaps.
+
+** The printing package is now part of the Emacs distribution.
+
+If you enable the printing package by including (require 'printing) in
+the .emacs file, the normal Print item on the File menu is replaced
+with a Print sub-menu which allows you to preview output through
+ghostview, use ghostscript to print (if you don't have a PostScript
+printer) or send directly to printer a PostScript code generated by
+`ps-print' package. Use M-x pr-help for more information.
+
+** The new package longlines.el provides a minor mode for editing text
+files composed of long lines, based on the `use-hard-newlines'
+mechanism. The long lines are broken up by inserting soft newlines,
+which are automatically removed when saving the file to disk or
+copying into the kill ring, clipboard, etc. By default, Longlines
+mode inserts soft newlines automatically during editing, a behavior
+referred to as "soft word wrap" in other text editors. This is
+similar to Refill mode, but more reliable. To turn the word wrap
+feature off, set `longlines-auto-wrap' to nil.
+
+** SES mode (ses-mode) is a new major mode for creating and editing
+spreadsheet files. Besides the usual Emacs features (intuitive command
+letters, undo, cell formulas in Lisp, plaintext files, etc.) it also offers
+viral immunity and import/export of tab-separated values.
+
+** The new package table.el implements editable, WYSIWYG, embedded
+`text tables' in Emacs buffers. It simulates the effect of putting
+these tables in a special major mode. The package emulates WYSIWYG
+table editing available in modern word processors. The package also
+can generate a table source in typesetting and markup languages such
+as latex and html from the visually laid out text table.
+
+** Filesets are collections of files. You can define a fileset in
+various ways, such as based on a directory tree or based on
+program files that include other program files.
+
+Once you have defined a fileset, you can perform various operations on
+all the files in it, such as visiting them or searching and replacing
+in them.
+
+** The minor mode Reveal mode makes text visible on the fly as you
+move your cursor into hidden regions of the buffer.
+It should work with any package that uses overlays to hide parts
+of a buffer, such as outline-minor-mode, hs-minor-mode, hide-ifdef-mode, ...
+
+There is also Global Reveal mode which affects all buffers.
+
+** New minor mode, Visible mode, toggles invisibility in the current buffer.
+When enabled, it makes all invisible text visible. When disabled, it
+restores the previous value of `buffer-invisibility-spec'.
+
+** The new package flymake.el does on-the-fly syntax checking of program
+source files. See the Flymake's Info manual for more details.
+
+** savehist saves minibuffer histories between sessions.
+To use this feature, turn on savehist-mode in your `.emacs' file.
+
+** The ruler-mode.el library provides a minor mode for displaying an
+"active" ruler in the header line. You can use the mouse to visually
+change the `fill-column', `window-margins' and `tab-stop-list'
+settings.
+
+** The file t-mouse.el is now part of Emacs and provides access to mouse
+events from the console. It still requires gpm to work but has been updated
+for Emacs 22. In particular, the mode-line is now position sensitive.
+
+** The new package scroll-lock.el provides the Scroll Lock minor mode
+for pager-like scrolling. Keys which normally move point by line or
+paragraph will scroll the buffer by the respective amount of lines
+instead and point will be kept vertically fixed relative to window
+boundaries during scrolling.
+
+** The new global minor mode `size-indication-mode' (off by default)
+shows the size of accessible part of the buffer on the mode line.
+
+** The new package conf-mode.el handles thousands of configuration files, with
+varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value,
+var : value, var value or keyword var value) and sections ([section] or
+section { }). Many files under /etc/, or with suffixes like .cf through
+.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are
+recognized.
+
+** GDB-Script-mode is used for files like .gdbinit.
+
+** The new package dns-mode.el adds syntax highlighting of DNS master files.
+It is a modern replacement for zone-mode.el, which is now obsolete.
+
+** `cfengine-mode' is a major mode for editing GNU Cfengine
+configuration files.
+
+** The TCL package tcl-mode.el was replaced by tcl.el.
+This was actually done in Emacs-21.1, and was not documented.
+
+* Changes in Specialized Modes and Packages in Emacs 22.1:
+
+** Changes in Dired
+
+*** Bindings for Image-Dired added.
+Several new keybindings, all starting with the C-t prefix, have been
+added to Dired. They are all bound to commands in Image-Dired. As a
+starting point, mark some image files in a dired buffer and do C-t d
+to display thumbnails of them in a separate buffer.
+
+** Info mode changes
+
+*** Images in Info pages are supported.
+
+Info pages show embedded images, in Emacs frames with image support.
+Info documentation that includes images, processed with makeinfo
+version 4.7 or newer, compiles to Info pages with embedded images.
+
+*** `Info-index' offers completion.
+
+*** http and ftp links in Info are now operational: they look like cross
+references and following them calls `browse-url'.
+
+*** isearch in Info uses Info-search and searches through multiple nodes.
+
+Before leaving the initial Info node isearch fails once with the error
+message [initial node], and with subsequent C-s/C-r continues through
+other nodes. When isearch fails for the rest of the manual, it wraps
+around the whole manual to the top/final node. The user option
+`Info-isearch-search' controls whether to use Info-search for isearch,
+or the default isearch search function that wraps around the current
+Info node.
+
+*** New search commands: `Info-search-case-sensitively' (bound to S),
+`Info-search-backward', and `Info-search-next' which repeats the last
+search without prompting for a new search string.
+
+*** New command `info-apropos' searches the indices of the known
+Info files on your system for a string, and builds a menu of the
+possible matches.
+
+*** New command `Info-history-forward' (bound to r and new toolbar icon)
+moves forward in history to the node you returned from after using
+`Info-history-back' (renamed from `Info-last').
+
+*** New command `Info-history' (bound to L) displays a menu of visited nodes.
+
+*** New command `Info-toc' (bound to T) creates a node with table of contents
+from the tree structure of menus of the current Info file.
+
+*** New command `Info-copy-current-node-name' (bound to w) copies
+the current Info node name into the kill ring. With a zero prefix
+arg, puts the node name inside the `info' function call.
+
+*** New face `info-xref-visited' distinguishes visited nodes from unvisited
+and a new option `Info-fontify-visited-nodes' to control this.
+
+*** A numeric prefix argument of `info' selects an Info buffer
+with the number appended to the `*info*' buffer name (e.g. "*info*<2>").
+
+*** Info now hides node names in menus and cross references by default.
+
+If you prefer the old behavior, you can set the new user option
+`Info-hide-note-references' to nil.
+
+*** The default value for `Info-scroll-prefer-subnodes' is now nil.
+
+** Emacs server changes
+
+*** You can have several Emacs servers on the same machine.
+
+ % emacs --eval '(setq server-name "foo")' -f server-start &
+ % emacs --eval '(setq server-name "bar")' -f server-start &
+ % emacsclient -s foo file1
+ % emacsclient -s bar file2
+
+*** The `emacsclient' command understands the options `--eval' and
+`--display' which tell Emacs respectively to evaluate the given Lisp
+expression and to use the given display when visiting files.
+
+*** User option `server-mode' can be used to start a server process.
+
+** Locate changes
+
+*** By default, reverting the *Locate* buffer now just runs the last
+`locate' command back over again without offering to update the locate
+database (which normally only works if you have root privileges). If
+you prefer the old behavior, set the new customizable option
+`locate-update-when-revert' to t.
+
+** Desktop package
+
+*** Desktop saving is now a minor mode, `desktop-save-mode'.
+
+*** The variable `desktop-enable' is obsolete.
+
+Customize `desktop-save-mode' to enable desktop saving.
+
+*** Buffers are saved in the desktop file in the same order as that in the
+buffer list.
+
+*** The desktop package can be customized to restore only some buffers
+immediately, remaining buffers are restored lazily (when Emacs is
+idle).
+
+*** New command line option --no-desktop
+
+*** New commands:
+ - desktop-revert reverts to the last loaded desktop.
+ - desktop-change-dir kills current desktop and loads a new.
+ - desktop-save-in-desktop-dir saves desktop in the directory from which
+ it was loaded.
+ - desktop-lazy-complete runs the desktop load to completion.
+ - desktop-lazy-abort aborts lazy loading of the desktop.
+
+*** New customizable variables:
+ - desktop-save. Determines whether the desktop should be saved when it is
+ killed.
+ - desktop-file-name-format. Format in which desktop file names should be saved.
+ - desktop-path. List of directories in which to lookup the desktop file.
+ - desktop-locals-to-save. List of local variables to save.
+ - desktop-globals-to-clear. List of global variables that `desktop-clear' will clear.
+ - desktop-clear-preserve-buffers-regexp. Regexp identifying buffers that `desktop-clear'
+ should not delete.
+ - desktop-restore-eager. Number of buffers to restore immediately. Remaining buffers are
+ restored lazily (when Emacs is idle).
+ - desktop-lazy-verbose. Verbose reporting of lazily created buffers.
+ - desktop-lazy-idle-delay. Idle delay before starting to create buffers.
+
+*** New hooks:
+ - desktop-after-read-hook run after a desktop is loaded.
+ - desktop-no-desktop-file-hook run when no desktop file is found.
+
+** Recentf changes
+
+The recent file list is now automatically cleaned up when recentf mode is
+enabled. The new option `recentf-auto-cleanup' controls when to do
+automatic cleanup.
+
+The ten most recent files can be quickly opened by using the shortcut
+keys 1 to 9, and 0, when the recent list is displayed in a buffer via
+the `recentf-open-files', or `recentf-open-more-files' commands.
+
+The `recentf-keep' option replaces `recentf-keep-non-readable-files-p'
+and provides a more general mechanism to customize which file names to
+keep in the recent list.
+
+With the more advanced option `recentf-filename-handlers', you can
+specify functions that successively transform recent file names. For
+example, if set to `file-truename' plus `abbreviate-file-name', the
+same file will not be in the recent list with different symbolic
+links, and the file name will be abbreviated.
+
+To follow naming convention, `recentf-menu-append-commands-flag'
+replaces the misnamed option `recentf-menu-append-commands-p'. The
+old name remains available as alias, but has been marked obsolete.
+
+** Auto-Revert changes
+
+*** You can now use Auto Revert mode to `tail' a file.
+
+If point is at the end of a file buffer before reverting, Auto Revert
+mode keeps it at the end after reverting. Similarly if point is
+displayed at the end of a file buffer in any window, it stays at the end
+of the buffer in that window. This allows you to "tail" a file: just
+put point at the end of the buffer and it stays there. This rule
+applies to file buffers. For non-file buffers, the behavior can be mode
+dependent.
+
+If you are sure that the file will only change by growing at the end,
+then you can tail the file more efficiently by using the new minor
+mode Auto Revert Tail mode. The function `auto-revert-tail-mode'
+toggles this mode.
+
+*** Auto Revert mode is now more careful to avoid excessive reverts and
+other potential problems when deciding which non-file buffers to
+revert. This matters especially if Global Auto Revert mode is enabled
+and `global-auto-revert-non-file-buffers' is non-nil. Auto Revert
+mode only reverts a non-file buffer if the buffer has a non-nil
+`revert-buffer-function' and a non-nil `buffer-stale-function', which
+decides whether the buffer should be reverted. Currently, this means
+that auto reverting works for Dired buffers (although this may not
+work properly on all operating systems) and for the Buffer Menu.
+
+*** If the new user option `auto-revert-check-vc-info' is non-nil, Auto
+Revert mode reliably updates version control info (such as the version
+control number in the mode line), in all version controlled buffers in
+which it is active. If the option is nil, the default, then this info
+only gets updated whenever the buffer gets reverted.
+
+** Changes in Shell Mode
+
+*** Shell output normally scrolls so that the input line is at the
+bottom of the window -- thus showing the maximum possible text. (This
+is similar to the way sequential output to a terminal works.)
+
+** Changes in Hi Lock
+
+*** hi-lock-mode now only affects a single buffer, and a new function
+`global-hi-lock-mode' enables Hi Lock in all buffers. By default, if
+hi-lock-mode is used in what appears to be the initialization file, a
+warning message suggests to use global-hi-lock-mode instead. However,
+if the new variable `hi-lock-archaic-interface-deduce' is non-nil,
+using hi-lock-mode in an initialization file will turn on Hi Lock in all
+buffers and no warning will be issued (for compatibility with the
+behavior in older versions of Emacs).
+
+** Changes in Allout
+
+*** Topic cryptography added, enabling easy gpg topic encryption and
+decryption. Per-topic basis enables interspersing encrypted-text and
+clear-text within a single file to your heart's content, using symmetric
+and/or public key modes. Time-limited key caching, user-provided
+symmetric key hinting and consistency verification, auto-encryption of
+pending topics on save, and more, make it easy to use encryption in
+powerful ways. Encryption behavior customization is collected in the
+allout-encryption customization group.
+
+*** Default command prefix was changed to "\C-c " (control-c space), to
+avoid intruding on user's keybinding space. Customize the
+`allout-command-prefix' variable to your preference.
+
+*** Some previously rough topic-header format edge cases are reconciled.
+Level 1 topics use the mode's comment format, and lines starting with the
+asterisk - for instance, the comment close of some languages (eg, c's "*/"
+or mathematica's "*)") - at the beginning of line are no longer are
+interpreted as level 1 topics in those modes.
+
+*** Many or most commonly occurring "accidental" topics are disqualified.
+Text in item bodies that looks like a low-depth topic is no longer mistaken
+for one unless its first offspring (or that of its next sibling with
+offspring) is only one level deeper.
+
+For example, pasting some text with a bunch of leading asterisks into a
+topic that's followed by a level 3 or deeper topic will not cause the
+pasted text to be mistaken for outline structure.
+
+The same constraint is applied to any level 2 or 3 topics.
+
+This settles an old issue where typed or pasted text needed to be carefully
+reviewed, and sometimes doctored, to avoid accidentally disrupting the
+outline structure. Now that should be generally unnecessary, as the most
+prone-to-occur accidents are disqualified.
+
+*** Allout now refuses to create "containment discontinuities", where a
+topic is shifted deeper than the offspring-depth of its container. On the
+other hand, allout now operates gracefully with existing containment
+discontinuities, revealing excessively contained topics rather than either
+leaving them hidden or raising an error.
+
+*** Navigation within an item is easier. Repeated beginning-of-line and
+end-of-line key commands (usually, ^A and ^E) cycle through the
+beginning/end-of-line and then beginning/end of topic, etc. See new
+customization vars `allout-beginning-of-line-cycles' and
+`allout-end-of-line-cycles'.
+
+*** New or revised allout-mode activity hooks enable creation of
+cooperative enhancements to allout mode without changes to the mode,
+itself.
+
+See `allout-exposure-change-hook', `allout-structure-added-hook',
+`allout-structure-deleted-hook', and `allout-structure-shifted-hook'.
+
+`allout-exposure-change-hook' replaces the existing
+`allout-view-change-hook', which is being deprecated. Both are still
+invoked, but `allout-view-change-hook' will eventually be ignored.
+`allout-exposure-change-hook' is called with explicit arguments detailing
+the specifics of each change (as are the other new hooks), making it easier
+to use than the old version.
+
+There is a new mode deactivation hook, `allout-mode-deactivate-hook', for
+coordinating with deactivation of allout-mode. Both that and the mode
+activation hook, `allout-mode-hook' are now run after the `allout-mode'
+variable is changed, rather than before.
+
+*** Allout now uses text overlay's `invisible' property for concealed text,
+instead of selective-display. This simplifies the code, in particular
+avoiding the need for kludges for isearch dynamic-display, discretionary
+handling of edits of concealed text, undo concerns, etc.
+
+*** There are many other fixes and refinements, including:
+
+ - repaired inhibition of inadvertent edits to concealed text, without
+ inhibiting undo; we now reveal undo changes within concealed text.
+ - auto-fill-mode is now left inactive when allout-mode starts, if it
+ already was inactive. also, `allout-inhibit-auto-fill' custom
+ configuration variable makes it easy to disable auto fill in allout
+ outlines in general or on a per-buffer basis.
+ - allout now tolerates fielded text in outlines without disruption.
+ - hot-spot navigation now is modularized with a new function,
+ `allout-hotspot-key-handler', enabling easier use and enhancement of
+ the functionality in allout addons.
+ - repaired retention of topic body hanging indent upon topic depth shifts
+ - bulleting variation is simpler and more accommodating, both in the
+ default behavior and in ability to vary when creating new topics
+ - mode deactivation now does cleans up effectively, more properly
+ restoring affected variables and hooks to former state, removing
+ overlays, etc. see `allout-add-resumptions' and
+ `allout-do-resumptions', which replace the old `allout-resumptions'.
+ - included a few unit-tests for interior functionality. developers can
+ have them automatically run at the end of module load by customizing
+ the option `allout-run-unit-tests-on-load'.
+ - many, many other, more minor tweaks, fixes, and refinements.
+ - version number incremented to 2.2
+
+** Hideshow mode changes
+
+*** New variable `hs-set-up-overlay' allows customization of the overlay
+used to effect hiding for hideshow minor mode. Integration with isearch
+handles the overlay property `display' specially, preserving it during
+temporary overlay showing in the course of an isearch operation.
+
+*** New variable `hs-allow-nesting' non-nil means that hiding a block does
+not discard the hidden state of any "internal" blocks; when the parent
+block is later shown, the internal blocks remain hidden. Default is nil.
+
+** FFAP changes
+
+*** New ffap commands and keybindings:
+
+C-x C-r (`ffap-read-only'),
+C-x C-v (`ffap-alternate-file'), C-x C-d (`ffap-list-directory'),
+C-x 4 r (`ffap-read-only-other-window'), C-x 4 d (`ffap-dired-other-window'),
+C-x 5 r (`ffap-read-only-other-frame'), C-x 5 d (`ffap-dired-other-frame').
+
+*** FFAP accepts wildcards in a file name by default.
+
+C-x C-f passes the file name to `find-file' with non-nil WILDCARDS
+argument, which visits multiple files, and C-x d passes it to `dired'.
+
+** Changes in Skeleton
+
+*** In skeleton.el, `-' marks the `skeleton-point' without interregion interaction.
+
+`@' has reverted to only setting `skeleton-positions' and no longer
+sets `skeleton-point'. Skeletons which used @ to mark
+`skeleton-point' independent of `_' should now use `-' instead. The
+updated `skeleton-insert' docstring explains these new features along
+with other details of skeleton construction.
+
+*** The variables `skeleton-transformation', `skeleton-filter', and
+`skeleton-pair-filter' have been renamed to
+`skeleton-transformation-function', `skeleton-filter-function', and
+`skeleton-pair-filter-function'. The old names are still available
+as aliases.
+
+** HTML/SGML changes
+
+*** Emacs now tries to set up buffer coding systems for HTML/XML files
+automatically.
+
+*** SGML mode has indentation and supports XML syntax.
+The new variable `sgml-xml-mode' tells SGML mode to use XML syntax.
+When this option is enabled, SGML tags are inserted in XML style,
+i.e., there is always a closing tag.
+By default, its setting is inferred on a buffer-by-buffer basis
+from the file name or buffer contents.
+
+*** The variable `sgml-transformation' has been renamed to
+`sgml-transformation-function'. The old name is still available as
+alias.
+
+*** `xml-mode' is now an alias for `sgml-mode', which has XML support.
+
+** TeX modes
+
+*** New major mode Doctex mode, for *.dtx files.
+
+*** C-c C-c prompts for a command to run, and tries to offer a good default.
+
+*** The user option `tex-start-options-string' has been replaced
+by two new user options: `tex-start-options', which should hold
+command-line options to feed to TeX, and `tex-start-commands' which should hold
+TeX commands to use at startup.
+
+*** verbatim environments are now highlighted in courier by font-lock
+and super/sub-scripts are made into super/sub-scripts.
+
+** RefTeX mode changes
+
+*** Changes to RefTeX's table of contents
+
+The new command keys "<" and ">" in the TOC buffer promote/demote the
+section at point or all sections in the current region, with full
+support for multifile documents.
+
+The new command `reftex-toc-recenter' (`C-c -') shows the current
+section in the TOC buffer without selecting the TOC window.
+Recentering can happen automatically in idle time when the option
+`reftex-auto-recenter-toc' is turned on. The highlight in the TOC
+buffer stays when the focus moves to a different window. A dedicated
+frame can show the TOC with the current section always automatically
+highlighted. The frame is created and deleted from the toc buffer
+with the `d' key.
+
+The toc window can be split off horizontally instead of vertically.
+See new option `reftex-toc-split-windows-horizontally'.
+
+Labels can be renamed globally from the table of contents using the
+key `M-%'.
+
+The new command `reftex-goto-label' jumps directly to a label
+location.
+
+*** Changes related to citations and BibTeX database files
+
+Commands that insert a citation now prompt for optional arguments when
+called with a prefix argument. Related new options are
+`reftex-cite-prompt-optional-args' and `reftex-cite-cleanup-optional-args'.
+
+The new command `reftex-create-bibtex-file' creates a BibTeX database
+with all entries referenced in the current document. The keys "e" and
+"E" allow to produce a BibTeX database file from entries marked in a
+citation selection buffer.
+
+The command `reftex-citation' uses the word in the buffer before the
+cursor as a default search string.
+
+The support for chapterbib has been improved. Different chapters can
+now use BibTeX or an explicit `thebibliography' environment.
+
+The macros which specify the bibliography file (like \bibliography)
+can be configured with the new option `reftex-bibliography-commands'.
+
+Support for jurabib has been added.
+
+*** Global index matched may be verified with a user function.
+
+During global indexing, a user function can verify an index match.
+See new option `reftex-index-verify-function'.
+
+*** Parsing documents with many labels can be sped up.
+
+Operating in a document with thousands of labels can be sped up
+considerably by allowing RefTeX to derive the type of a label directly
+from the label prefix like `eq:' or `fig:'. The option
+`reftex-trust-label-prefix' needs to be configured in order to enable
+this feature. While the speed-up is significant, this may reduce the
+quality of the context offered by RefTeX to describe a label.
+
+*** Miscellaneous changes
+
+The macros which input a file in LaTeX (like \input, \include) can be
+configured in the new option `reftex-include-file-commands'.
+
+RefTeX supports global incremental search.
+
+** BibTeX mode
+
+*** The new command `bibtex-url' browses a URL for the BibTeX entry at
+point (bound to C-c C-l and mouse-2, RET on clickable fields).
+
+*** The new command `bibtex-entry-update' (bound to C-c C-u) updates
+an existing BibTeX entry by inserting fields that may occur but are not
+present.
+
+*** New `bibtex-entry-format' option `required-fields', enabled by default.
+
+*** `bibtex-maintain-sorted-entries' can take values `plain',
+`crossref', and `entry-class' which control the sorting scheme used
+for BibTeX entries. `bibtex-sort-entry-class' controls the sorting
+scheme `entry-class'. TAB completion for reference keys and
+automatic detection of duplicates does not require anymore that
+`bibtex-maintain-sorted-entries' is non-nil.
+
+*** The new command `bibtex-complete' completes word fragment before
+point according to context (bound to M-tab).
+
+*** In BibTeX mode the command `fill-paragraph' (M-q) fills
+individual fields of a BibTeX entry.
+
+*** The new variable `bibtex-autofill-types' contains a list of entry
+types for which fields are filled automatically (if possible).
+
+*** The new commands `bibtex-find-entry' and `bibtex-find-crossref'
+locate entries and crossref'd entries (bound to C-c C-s and C-c C-x).
+Crossref fields are clickable (bound to mouse-2, RET).
+
+*** The new variables `bibtex-files' and `bibtex-file-path' define a set
+of BibTeX files that are searched for entry keys.
+
+*** The new command `bibtex-validate-globally' checks for duplicate keys
+in multiple BibTeX files.
+
+*** If the new variable `bibtex-autoadd-commas' is non-nil,
+automatically add missing commas at end of BibTeX fields.
+
+*** The new command `bibtex-copy-summary-as-kill' pushes summary
+of BibTeX entry to kill ring (bound to C-c C-t).
+
+*** If the new variable `bibtex-parse-keys-fast' is non-nil,
+use fast but simplified algorithm for parsing BibTeX keys.
+
+*** The new variables bibtex-expand-strings and
+bibtex-autokey-expand-strings control the expansion of strings when
+extracting the content of a BibTeX field.
+
+*** The variables `bibtex-autokey-name-case-convert' and
+`bibtex-autokey-titleword-case-convert' have been renamed to
+`bibtex-autokey-name-case-convert-function' and
+`bibtex-autokey-titleword-case-convert-function'. The old names are
+still available as aliases.
+
+** GUD changes
+
+*** The new package gdb-ui.el provides an enhanced graphical interface to
+GDB. You can interact with GDB through the GUD buffer in the usual way, but
+there are also further buffers which control the execution and describe the
+state of your program. It can separate the input/output of your program from
+that of GDB and watches expressions in the speedbar. It also uses features of
+Emacs 21/22 such as the toolbar, and bitmaps in the fringe to indicate
+breakpoints.
+
+To use this package just type M-x gdb. See the Emacs manual if you want the
+old behaviour.
+
+*** GUD mode has its own tool bar for controlling execution of the inferior
+and other common debugger commands.
+
+*** In GUD mode, when talking to GDB, C-x C-a C-j "jumps" the program
+counter to the specified source line (the one where point is).
+
+*** The variable tooltip-gud-tips-p has been removed. GUD tooltips can now be
+toggled independently of normal tooltips with the minor mode
+`gud-tooltip-mode'.
+
+*** In graphical mode, with a C program, GUD Tooltips have been extended to
+display the #define directive associated with an identifier when program is
+not executing.
+
+*** GUD mode improvements for jdb:
+
+**** Search for source files using jdb classpath and class information.
+Fast startup since there is no need to scan all source files up front.
+There is also no need to create and maintain lists of source
+directories to scan. Look at `gud-jdb-use-classpath' and
+`gud-jdb-classpath' customization variables documentation.
+
+**** The previous method of searching for source files has been
+preserved in case someone still wants/needs to use it.
+Set `gud-jdb-use-classpath' to nil.
+
+**** Supports the standard breakpoint (gud-break, gud-clear)
+set/clear operations from Java source files under the classpath, stack
+traversal (gud-up, gud-down), and run until current stack finish
+(gud-finish).
+
+**** Supports new jdb (Java 1.2 and later) in addition to oldjdb
+(Java 1.1 jdb).
+
+*** Added jdb Customization Variables
+
+**** `gud-jdb-command-name'. What command line to use to invoke jdb.
+
+**** `gud-jdb-use-classpath'. Allows selection of java source file searching
+method: set to t for new method, nil to scan `gud-jdb-directories' for
+java sources (previous method).
+
+**** `gud-jdb-directories'. List of directories to scan and search for Java
+classes using the original gud-jdb method (if `gud-jdb-use-classpath'
+is nil).
+
+*** Minor Improvements
+
+**** The STARTTLS wrapper (starttls.el) can now use GNUTLS
+instead of the OpenSSL based `starttls' tool. For backwards
+compatibility, it prefers `starttls', but you can toggle
+`starttls-use-gnutls' to switch to GNUTLS (or simply remove the
+`starttls' tool).
+
+**** Do not allow debugger output history variable to grow without bounds.
+
+** Lisp mode changes
+
+*** Lisp mode now uses `font-lock-doc-face' for doc strings.
+
+*** C-u C-M-q in Emacs Lisp mode pretty-prints the list after point.
+
+*** New features in evaluation commands
+
+**** The function `eval-defun' (C-M-x) called on defface reinitializes
+the face to the value specified in the defface expression.
+
+**** Typing C-x C-e twice prints the value of the integer result
+in additional formats (octal, hexadecimal, character) specified
+by the new function `eval-expression-print-format'. The same
+function also defines the result format for `eval-expression' (M-:),
+`eval-print-last-sexp' (C-j) and some edebug evaluation functions.
+
+** Changes to cmuscheme
+
+*** Emacs now offers to start Scheme if the user tries to
+evaluate a Scheme expression but no Scheme subprocess is running.
+
+*** If the file ~/.emacs_NAME or ~/.emacs.d/init_NAME.scm (where NAME
+is the name of the Scheme interpreter) exists, its contents are sent
+to the Scheme subprocess upon startup.
+
+*** There are new commands to instruct the Scheme interpreter to trace
+procedure calls (`scheme-trace-procedure') and to expand syntactic forms
+(`scheme-expand-current-form'). The commands actually sent to the Scheme
+subprocess are controlled by the user options `scheme-trace-command',
+`scheme-untrace-command' and `scheme-expand-current-form'.
+
+** Ewoc changes
+
+*** The new function `ewoc-delete' deletes specified nodes.
+
+*** `ewoc-create' now takes optional arg NOSEP, which inhibits insertion of
+a newline after each pretty-printed entry and after the header and footer.
+This allows you to create multiple-entry ewocs on a single line and to
+effect "invisible" nodes by arranging for the pretty-printer to not print
+anything for those nodes.
+
+For example, these two sequences of expressions behave identically:
+
+;; NOSEP nil
+(defun PP (data) (insert (format "%S" data)))
+(ewoc-create 'PP "start\n")
+
+;; NOSEP t
+(defun PP (data) (insert (format "%S\n" data)))
+(ewoc-create 'PP "start\n\n" "\n" t)
+
+** CC mode changes
+
+*** The CC Mode manual has been extensively revised.
+The information about using CC Mode has been separated from the larger
+and more difficult chapters about configuration.
+
+*** New Minor Modes
+**** Electric Minor Mode toggles the electric action of non-alphabetic keys.
+The new command c-toggle-electric-mode is bound to C-c C-l. Turning the
+mode off can be helpful for editing chaotically indented code and for
+users new to CC Mode, who sometimes find electric indentation
+disconcerting. Its current state is displayed in the mode line with an
+'l', e.g. "C/al".
+
+**** Subword Minor Mode makes Emacs recognize word boundaries at upper case
+letters in StudlyCapsIdentifiers. You enable this feature by C-c C-w. It can
+also be used in non-CC Mode buffers. :-) Contributed by Masatake YAMATO.
+
+*** Support for the AWK language.
+Support for the AWK language has been introduced. The implementation is
+based around GNU AWK version 3.1, but it should work pretty well with
+any AWK. As yet, not all features of CC Mode have been adapted for AWK.
+Here is a summary:
+
+**** Indentation Engine
+The CC Mode indentation engine fully supports AWK mode.
+
+AWK mode handles code formatted in the conventional AWK fashion: `{'s
+which start actions, user-defined functions, or compound statements are
+placed on the same line as the associated construct; the matching `}'s
+are normally placed under the start of the respective pattern, function
+definition, or structured statement.
+
+The predefined line-up functions haven't yet been adapted for AWK
+mode, though some of them may work serendipitously. There shouldn't
+be any problems writing custom indentation functions for AWK mode.
+
+**** Font Locking
+There is a single level of font locking in AWK mode, rather than the
+three distinct levels the other modes have. There are several
+idiosyncrasies in AWK mode's font-locking due to the peculiarities of
+the AWK language itself.
+
+**** Comment and Movement Commands
+These commands all work for AWK buffers. The notion of "defun" has
+been augmented to include AWK pattern-action pairs - the standard
+"defun" commands on key sequences C-M-a, C-M-e, and C-M-h use this
+extended definition.
+
+**** "awk" style, Auto-newline Insertion and Clean-ups
+A new style, "awk" has been introduced, and this is now the default
+style for AWK code. With auto-newline enabled, the clean-up
+c-one-liner-defun (see above) is useful.
+
+*** Font lock support.
+CC Mode now provides font lock support for all its languages. This
+supersedes the font lock patterns that have been in the core font lock
+package for C, C++, Java and Objective-C. Like indentation, font
+locking is done in a uniform way across all languages (except the new
+AWK mode - see below). That means that the new font locking will be
+different from the old patterns in various details for most languages.
+
+The main goal of the font locking in CC Mode is accuracy, to provide a
+dependable aid in recognizing the various constructs. Some, like
+strings and comments, are easy to recognize while others like
+declarations and types can be very tricky. CC Mode can go to great
+lengths to recognize declarations and casts correctly, especially when
+the types aren't recognized by standard patterns. This is a fairly
+demanding analysis which can be slow on older hardware, and it can
+therefore be disabled by choosing a lower decoration level with the
+variable font-lock-maximum-decoration.
+
+Note that the most demanding font lock level has been tuned with lazy
+fontification in mind; Just-In-Time-Lock mode should be enabled for
+the highest font lock level (by default, it is). Fontifying a file
+with several thousand lines in one go can take the better part of a
+minute.
+
+**** The (c|c++|objc|java|idl|pike)-font-lock-extra-types variables
+are now used by CC Mode to recognize identifiers that are certain to
+be types. (They are also used in cases that aren't related to font
+locking.) At the maximum decoration level, types are often recognized
+properly anyway, so these variables should be fairly restrictive and
+not contain patterns for uncertain types.
+
+**** Support for documentation comments.
+There is a "plugin" system to fontify documentation comments like
+Javadoc and the markup within them. It's independent of the host
+language, so it's possible to e.g. turn on Javadoc font locking in C
+buffers. See the variable c-doc-comment-style for details.
+
+Currently three kinds of doc comment styles are recognized: Sun's
+Javadoc, Autodoc (which is used in Pike) and GtkDoc (used in C). (The
+last was contributed by Masatake YAMATO). This is by no means a
+complete list of the most common tools; if your doc comment extractor
+of choice is missing then please drop a note to bug-cc-mode@gnu.org.
+
+**** Better handling of C++ templates.
+As a side effect of the more accurate font locking, C++ templates are
+now handled much better. The angle brackets that delimit them are
+given parenthesis syntax so that they can be navigated like other
+parens.
+
+This also improves indentation of templates, although there still is
+work to be done in that area. E.g. it's required that multiline
+template clauses are written in full and then refontified to be
+recognized, and the indentation of nested templates is a bit odd and
+not as configurable as it ought to be.
+
+**** Improved handling of Objective-C and CORBA IDL.
+Especially the support for Objective-C and IDL has gotten an overhaul.
+The special "@" declarations in Objective-C are handled correctly.
+All the keywords used in CORBA IDL, PSDL, and CIDL are recognized and
+handled correctly, also wrt indentation.
+
+*** Changes in Key Sequences
+**** c-toggle-auto-hungry-state is no longer bound to C-c C-t.
+
+**** c-toggle-hungry-state is no longer bound to C-c C-d.
+This binding has been taken over by c-hungry-delete-forwards.
+
+**** c-toggle-auto-state (C-c C-t) has been renamed to c-toggle-auto-newline.
+c-toggle-auto-state remains as an alias.
+
+**** The new commands c-hungry-backspace and c-hungry-delete-forwards
+have key bindings C-c C-DEL (or C-c DEL, for the benefit of TTYs) and
+C-c C-d (or C-c C-<delete> or C-c <delete>) respectively. These
+commands delete entire blocks of whitespace with a single
+key-sequence. [N.B. "DEL" is the <backspace> key.]
+
+**** The new command c-toggle-electric-mode is bound to C-c C-l.
+
+**** The new command c-subword-mode is bound to C-c C-w.
+
+*** C-c C-s (`c-show-syntactic-information') now highlights the anchor
+position(s).
+
+*** New syntactic symbols in IDL mode.
+The top level constructs "module" and "composition" (from CIDL) are
+now handled like "namespace" in C++: They are given syntactic symbols
+module-open, module-close, inmodule, composition-open,
+composition-close, and incomposition.
+
+*** New functions to do hungry delete without enabling hungry delete mode.
+The new functions `c-hungry-backspace' and `c-hungry-delete-forward'
+provide hungry deletion without having to toggle a mode. They are
+bound to C-c C-DEL and C-c C-d (and several variants, for the benefit
+of different keyboard setups. See "Changes in key sequences" above).
+
+*** Better control over `require-final-newline'.
+
+The variable `c-require-final-newline' specifies which of the modes
+implemented by CC mode should insert final newlines. Its value is a
+list of modes, and only those modes should do it. By default the list
+includes C, C++ and Objective-C modes.
+
+Whichever modes are in this list will set `require-final-newline'
+based on `mode-require-final-newline'.
+
+*** Format change for syntactic context elements.
+
+The elements in the syntactic context returned by `c-guess-basic-syntax'
+and stored in `c-syntactic-context' has been changed somewhat to allow
+attaching more information. They are now lists instead of single cons
+cells. E.g. a line that previously had the syntactic analysis
+
+((inclass . 11) (topmost-intro . 13))
+
+is now analyzed as
+
+((inclass 11) (topmost-intro 13))
+
+In some cases there are more than one position given for a syntactic
+symbol.
+
+This change might affect code that calls `c-guess-basic-syntax'
+directly, and custom lineup functions if they use
+`c-syntactic-context'. However, the argument given to lineup
+functions is still a single cons cell with nil or an integer in the
+cdr.
+
+*** API changes for derived modes.
+
+There have been extensive changes "under the hood" which can affect
+derived mode writers. Some of these changes are likely to cause
+incompatibilities with existing derived modes, but on the other hand
+care has now been taken to make it possible to extend and modify CC
+Mode with less risk of such problems in the future.
+
+**** New language variable system.
+These are variables whose values vary between CC Mode's different
+languages. See the comment blurb near the top of cc-langs.el.
+
+**** New initialization functions.
+The initialization procedure has been split up into more functions to
+give better control: `c-basic-common-init', `c-font-lock-init', and
+`c-init-language-vars'.
+
+*** Changes in analysis of nested syntactic constructs.
+The syntactic analysis engine has better handling of cases where
+several syntactic constructs appear nested on the same line. They are
+now handled as if each construct started on a line of its own.
+
+This means that CC Mode now indents some cases differently, and
+although it's more consistent there might be cases where the old way
+gave results that's more to one's liking. So if you find a situation
+where you think that the indentation has become worse, please report
+it to bug-cc-mode@gnu.org.
+
+**** New syntactic symbol substatement-label.
+This symbol is used when a label is inserted between a statement and
+its substatement. E.g:
+
+ if (x)
+ x_is_true:
+ do_stuff();
+
+*** Better handling of multiline macros.
+
+**** Syntactic indentation inside macros.
+The contents of multiline #define's are now analyzed and indented
+syntactically just like other code. This can be disabled by the new
+variable `c-syntactic-indentation-in-macros'. A new syntactic symbol
+`cpp-define-intro' has been added to control the initial indentation
+inside `#define's.
+
+**** New lineup function `c-lineup-cpp-define'.
+
+Now used by default to line up macro continuation lines. The behavior
+of this function closely mimics the indentation one gets if the macro
+is indented while the line continuation backslashes are temporarily
+removed. If syntactic indentation in macros is turned off, it works
+much line `c-lineup-dont-change', which was used earlier, but handles
+empty lines within the macro better.
+
+**** Automatically inserted newlines continues the macro if used within one.
+This applies to the newlines inserted by the auto-newline mode, and to
+`c-context-line-break' and `c-context-open-line'.
+
+**** Better alignment of line continuation backslashes.
+`c-backslash-region' tries to adapt to surrounding backslashes. New
+variable `c-backslash-max-column' puts a limit on how far out
+backslashes can be moved.
+
+**** Automatic alignment of line continuation backslashes.
+This is controlled by the new variable `c-auto-align-backslashes'. It
+affects `c-context-line-break', `c-context-open-line' and newlines
+inserted in Auto-Newline mode.
+
+**** Line indentation works better inside macros.
+Regardless whether syntactic indentation and syntactic indentation
+inside macros are enabled or not, line indentation now ignores the
+line continuation backslashes. This is most noticeable when syntactic
+indentation is turned off and there are empty lines (save for the
+backslash) in the macro.
+
+*** indent-for-comment is more customizable.
+The behavior of M-; (indent-for-comment) is now configurable through
+the variable `c-indent-comment-alist'. The indentation behavior is
+based on the preceding code on the line, e.g. to get two spaces after
+#else and #endif but indentation to `comment-column' in most other
+cases (something which was hardcoded earlier).
+
+*** New function `c-context-open-line'.
+It's the open-line equivalent of `c-context-line-break'.
+
+*** New clean-ups
+
+**** `comment-close-slash'.
+With this clean-up, a block (i.e. c-style) comment can be terminated by
+typing a slash at the start of a line.
+
+**** `c-one-liner-defun'
+This clean-up compresses a short enough defun (for example, an AWK
+pattern/action pair) onto a single line. "Short enough" is configurable.
+
+*** New lineup functions
+
+**** `c-lineup-string-cont'
+This lineup function lines up a continued string under the one it
+continues. E.g:
+
+result = prefix + "A message "
+ "string."; <- c-lineup-string-cont
+
+**** `c-lineup-cascaded-calls'
+Lines up series of calls separated by "->" or ".".
+
+**** `c-lineup-knr-region-comment'
+Gives (what most people think is) better indentation of comments in
+the "K&R region" between the function header and its body.
+
+**** `c-lineup-gcc-asm-reg'
+Provides better indentation inside asm blocks.
+
+**** `c-lineup-argcont'
+Lines up continued function arguments after the preceding comma.
+
+*** Added toggle for syntactic indentation.
+The function `c-toggle-syntactic-indentation' can be used to toggle
+syntactic indentation.
+
+*** Better caching of the syntactic context.
+CC Mode caches the positions of the opening parentheses (of any kind)
+of the lists surrounding the point. Those positions are used in many
+places as anchor points for various searches. The cache is now
+improved so that it can be reused to a large extent when the point is
+moved. The less it moves, the less needs to be recalculated.
+
+The effect is that CC Mode should be fast most of the time even when
+opening parens are hung (i.e. aren't in column zero). It's typically
+only the first time after the point is moved far down in a complex
+file that it'll take noticeable time to find out the syntactic
+context.
+
+*** Statements are recognized in a more robust way.
+Statements are recognized most of the time even when they occur in an
+"invalid" context, e.g. in a function argument. In practice that can
+happen when macros are involved.
+
+*** Improved the way `c-indent-exp' chooses the block to indent.
+It now indents the block for the closest sexp following the point
+whose closing paren ends on a different line. This means that the
+point doesn't have to be immediately before the block to indent.
+Also, only the block and the closing line is indented; the current
+line is left untouched.
+
+** Changes in Makefile mode
+
+*** Makefile mode has submodes for automake, gmake, makepp, BSD make and imake.
+
+The former two couldn't be differentiated before, and the latter three
+are new. Font-locking is robust now and offers new customizable
+faces.
+
+*** The variable `makefile-query-one-target-method' has been renamed
+to `makefile-query-one-target-method-function'. The old name is still
+available as alias.
+
+** Sql changes
+
+*** The variable `sql-product' controls the highlighting of different
+SQL dialects. This variable can be set globally via Customize, on a
+buffer-specific basis via local variable settings, or for the current
+session using the new SQL->Product submenu. (This menu replaces the
+SQL->Highlighting submenu.)
+
+The following values are supported:
+
+ ansi ANSI Standard (default)
+ db2 DB2
+ informix Informix
+ ingres Ingres
+ interbase Interbase
+ linter Linter
+ ms Microsoft
+ mysql MySQL
+ oracle Oracle
+ postgres Postgres
+ solid Solid
+ sqlite SQLite
+ sybase Sybase
+
+The current product name will be shown on the mode line following the
+SQL mode indicator.
+
+The technique of setting `sql-mode-font-lock-defaults' directly in
+your `.emacs' will no longer establish the default highlighting -- Use
+`sql-product' to accomplish this.
+
+ANSI keywords are always highlighted.
+
+*** The function `sql-add-product-keywords' can be used to add
+font-lock rules to the product specific rules. For example, to have
+all identifiers ending in `_t' under MS SQLServer treated as a type,
+you would use the following line in your .emacs file:
+
+ (sql-add-product-keywords 'ms
+ '(("\\<\\w+_t\\>" . font-lock-type-face)))
+
+*** Oracle support includes keyword highlighting for Oracle 9i.
+
+Most SQL and PL/SQL keywords are implemented. SQL*Plus commands are
+highlighted in `font-lock-doc-face'.
+
+*** Microsoft SQLServer support has been significantly improved.
+
+Keyword highlighting for SqlServer 2000 is implemented.
+sql-interactive-mode defaults to use osql, rather than isql, because
+osql flushes its error stream more frequently. Thus error messages
+are displayed when they occur rather than when the session is
+terminated.
+
+If the username and password are not provided to `sql-ms', osql is
+called with the `-E' command line argument to use the operating system
+credentials to authenticate the user.
+
+*** Postgres support is enhanced.
+Keyword highlighting of Postgres 7.3 is implemented. Prompting for
+the username and the pgsql `-U' option is added.
+
+*** MySQL support is enhanced.
+Keyword highlighting of MySql 4.0 is implemented.
+
+*** Imenu support has been enhanced to locate tables, views, indexes,
+packages, procedures, functions, triggers, sequences, rules, and
+defaults.
+
+*** Added SQL->Start SQLi Session menu entry which calls the
+appropriate `sql-interactive-mode' wrapper for the current setting of
+`sql-product'.
+
+*** sql.el supports the SQLite interpreter--call 'sql-sqlite'.
+
+** Fortran mode changes
+
+*** F90 mode and Fortran mode have support for `hs-minor-mode' (hideshow).
+It cannot deal with every code format, but ought to handle a sizeable
+majority.
+
+*** F90 mode and Fortran mode have new navigation commands
+`f90-end-of-block', `f90-beginning-of-block', `f90-next-block',
+`f90-previous-block', `fortran-end-of-block',
+`fortran-beginning-of-block'.
+
+*** Fortran mode does more font-locking by default. Use level 3
+highlighting for the old default.
+
+*** Fortran mode has a new variable `fortran-directive-re'.
+Adapt this to match the format of any compiler directives you use.
+Lines that match are never indented, and are given distinctive font-locking.
+
+*** The new function `f90-backslash-not-special' can be used to change
+the syntax of backslashes in F90 buffers.
+
+** Miscellaneous programming mode changes
+
+*** In sh-script, a continuation line is only indented if the backslash was
+preceded by a SPC or a TAB.
+
+*** Perl mode has a new variable `perl-indent-continued-arguments'.
+
+*** The old Octave mode bindings C-c f and C-c i have been changed
+to C-c C-f and C-c C-i. The C-c C-i subcommands now have duplicate
+bindings on control characters--thus, C-c C-i C-b is the same as
+C-c C-i b, and so on.
+
+*** Prolog mode has a new variable `prolog-font-lock-keywords'
+to support use of font-lock.
+
+** VC Changes
+
+*** New backends for Subversion and Meta-CVS.
+
+*** The new variable `vc-cvs-global-switches' specifies switches that
+are passed to any CVS command invoked by VC.
+
+These switches are used as "global options" for CVS, which means they
+are inserted before the command name. For example, this allows you to
+specify a compression level using the `-z#' option for CVS.
+
+*** The key C-x C-q only changes the read-only state of the buffer
+(toggle-read-only). It no longer checks files in or out.
+
+We made this change because we held a poll and found that many users
+were unhappy with the previous behavior. If you do prefer this
+behavior, you can bind `vc-toggle-read-only' to C-x C-q in your
+`.emacs' file:
+
+ (global-set-key "\C-x\C-q" 'vc-toggle-read-only)
+
+The function `vc-toggle-read-only' will continue to exist.
+
+*** VC-Annotate mode enhancements
+
+In VC-Annotate mode, you can now use the following key bindings for
+enhanced functionality to browse the annotations of past revisions, or
+to view diffs or log entries directly from vc-annotate-mode:
+
+ P: annotates the previous revision
+ N: annotates the next revision
+ J: annotates the revision at line
+ A: annotates the revision previous to line
+ D: shows the diff of the revision at line with its previous revision
+ L: shows the log of the revision at line
+ W: annotates the workfile (most up to date) version
+
+** pcl-cvs changes
+
+*** In pcl-cvs mode, there is a new `d y' command to view the diffs
+between the local version of the file and yesterday's head revision
+in the repository.
+
+*** In pcl-cvs mode, there is a new `d r' command to view the changes
+anyone has committed to the repository since you last executed
+`checkout', `update' or `commit'. That means using cvs diff options
+-rBASE -rHEAD.
+
+** Diff changes
+
+*** M-x diff uses Diff mode instead of Compilation mode.
+
+*** Diff mode key bindings changed.
+
+These are the new bindings:
+
+C-c C-e diff-ediff-patch (old M-A)
+C-c C-n diff-restrict-view (old M-r)
+C-c C-r diff-reverse-direction (old M-R)
+C-c C-u diff-context->unified (old M-U)
+C-c C-w diff-refine-hunk (old C-c C-r)
+
+To convert unified to context format, use C-u C-c C-u.
+In addition, C-c C-u now operates on the region
+in Transient Mark mode when the mark is active.
+
+** EDiff changes.
+
+*** When comparing directories.
+Typing D brings up a buffer that lists the differences between the contents of
+directories. Now it is possible to use this buffer to copy the missing files
+from one directory to another.
+
+*** When comparing files or buffers.
+Typing the = key now offers to perform the word-by-word comparison of the
+currently highlighted regions in an inferior Ediff session. If you answer 'n'
+then it reverts to the old behavior and asks the user to select regions for
+comparison.
+
+*** The new command `ediff-backup' compares a file with its most recent
+backup using `ediff'. If you specify the name of a backup file,
+`ediff-backup' compares it with the file of which it is a backup.
+
+** Etags changes.
+
+*** New regular expressions features
+
+**** New syntax for regular expressions, multi-line regular expressions.
+
+The syntax --ignore-case-regexp=/regex/ is now undocumented and retained
+only for backward compatibility. The new equivalent syntax is
+--regex=/regex/i. More generally, it is --regex=/TAGREGEX/TAGNAME/MODS,
+where `/TAGNAME' is optional, as usual, and MODS is a string of 0 or
+more characters among `i' (ignore case), `m' (multi-line) and `s'
+(single-line). The `m' and `s' modifiers behave as in Perl regular
+expressions: `m' allows regexps to match more than one line, while `s'
+(which implies `m') means that `.' matches newlines. The ability to
+span newlines allows writing of much more powerful regular expressions
+and rapid prototyping for tagging new languages.
+
+**** Regular expressions can use char escape sequences as in GCC.
+
+The escaped character sequence \a, \b, \d, \e, \f, \n, \r, \t, \v,
+respectively, stand for the ASCII characters BEL, BS, DEL, ESC, FF, NL,
+CR, TAB, VT.
+
+**** Regular expressions can be bound to a given language.
+
+The syntax --regex={LANGUAGE}REGEX means that REGEX is used to make tags
+only for files of language LANGUAGE, and ignored otherwise. This is
+particularly useful when storing regexps in a file.
+
+**** Regular expressions can be read from a file.
+
+The --regex=@regexfile option means read the regexps from a file, one
+per line. Lines beginning with space or tab are ignored.
+
+*** New language parsing features
+
+**** New language HTML.
+
+Tags are generated for `title' as well as `h1', `h2', and `h3'. Also,
+when `name=' is used inside an anchor and whenever `id=' is used.
+
+**** New language PHP.
+
+Functions, classes and defines are tags. If the --members option is
+specified to etags, variables are tags also.
+
+**** New language Lua.
+
+All functions are tagged.
+
+**** The `::' qualifier triggers C++ parsing in C file.
+
+Previously, only the `template' and `class' keywords had this effect.
+
+**** The GCC __attribute__ keyword is now recognized and ignored.
+
+**** In C and derived languages, etags creates tags for #undef
+
+**** In Makefiles, constants are tagged.
+
+If you want the old behavior instead, thus avoiding to increase the
+size of the tags file, use the --no-globals option.
+
+**** In Perl, packages are tags.
+
+Subroutine tags are named from their package. You can jump to sub tags
+as you did before, by the sub name, or additionally by looking for
+package::sub.
+
+**** In Prolog, etags creates tags for rules in addition to predicates.
+
+**** New default keywords for TeX.
+
+The new keywords are def, newcommand, renewcommand, newenvironment and
+renewenvironment.
+
+*** Honor #line directives.
+
+When Etags parses an input file that contains C preprocessor's #line
+directives, it creates tags using the file name and line number
+specified in those directives. This is useful when dealing with code
+created from Cweb source files. When Etags tags the generated file, it
+writes tags pointing to the source file.
+
+*** New option --parse-stdin=FILE.
+
+This option is mostly useful when calling etags from programs. It can
+be used (only once) in place of a file name on the command line. Etags
+reads from standard input and marks the produced tags as belonging to
+the file FILE.
+
+*** The --members option is now the default.
+
+Use --no-members if you want the old default behaviour of not tagging
+struct members in C, members variables in C++ and variables in PHP.
+
+** Ctags changes.
+
+*** Ctags now allows duplicate tags
+
+** Rmail changes
+
+*** Support for `movemail' from GNU mailutils was added to Rmail.
+
+This version of `movemail' allows you to read mail from a wide range of
+mailbox formats, including remote POP3 and IMAP4 mailboxes with or
+without TLS encryption. If GNU mailutils is installed on the system
+and its version of `movemail' can be found in exec-path, it will be
+used instead of the native one.
+
+*** The new commands rmail-end-of-message and rmail-summary end-of-message,
+by default bound to `/', go to the end of the current mail message in
+Rmail and Rmail summary buffers.
+
+*** Rmail now displays 5-digit message ids in its summary buffer.
+
+** Gnus package
+
+*** Gnus now includes Sieve and PGG
+
+Sieve is a library for managing Sieve scripts. PGG is a library to handle
+PGP/MIME.
+
+*** There are many news features, bug fixes and improvements.
+
+See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details.
+
+** MH-E changes.
+
+Upgraded to MH-E version 8.0.3. There have been major changes since
+version 5.0.2; see MH-E-NEWS for details.
+
+** Miscellaneous mail changes
+
+*** The new variable `mail-default-directory' specifies
+`default-directory' for mail buffers. This directory is used for
+auto-save files of mail buffers. It defaults to "~/".
+
+*** The mode line can indicate new mail in a directory or file.
+
+See the documentation of the user option `display-time-mail-directory'.
+
+** Calendar changes
+
+*** There is a new calendar package, icalendar.el, that can be used to
+convert Emacs diary entries to/from the iCalendar format.
+
+*** The new package cal-html.el writes HTML files with calendar and
+diary entries.
+
+*** The new functions `diary-from-outlook', `diary-from-outlook-gnus',
+and `diary-from-outlook-rmail' can be used to import diary entries
+from Outlook-format appointments in mail messages. The variable
+`diary-outlook-formats' can be customized to recognize additional
+formats.
+
+*** The procedure for activating appointment reminders has changed:
+use the new function `appt-activate'. The new variable
+`appt-display-format' controls how reminders are displayed, replacing
+`appt-issue-message', `appt-visible', and `appt-msg-window'.
+
+*** The function `simple-diary-display' now by default sets a header line.
+This can be controlled through the variables `diary-header-line-flag'
+and `diary-header-line-format'.
+
+*** Diary sexp entries can have custom marking in the calendar.
+Diary sexp functions which only apply to certain days (such as
+`diary-block' or `diary-cyclic') now take an optional parameter MARK,
+which is the name of a face or a single-character string indicating
+how to highlight the day in the calendar display. Specifying a
+single-character string as @var{mark} places the character next to the
+day in the calendar. Specifying a face highlights the day with that
+face. This lets you have different colors or markings for vacations,
+appointments, paydays or anything else using a sexp.
+
+*** The meanings of C-x < and C-x > have been interchanged.
+< means to scroll backward in time, and > means to scroll forward.
+
+*** You can now use < and >, instead of C-x < and C-x >, to scroll
+the calendar left or right.
+
+*** The new function `calendar-goto-day-of-year' (g D) prompts for a
+year and day number, and moves to that date. Negative day numbers
+count backward from the end of the year.
+
+*** The new Calendar function `calendar-goto-iso-week' (g w)
+prompts for a year and a week number, and moves to the first
+day of that ISO week.
+
+*** The functions `holiday-easter-etc' and `holiday-advent' now take
+optional arguments, in order to only report on the specified holiday
+rather than all. This makes customization of variables such as
+`christian-holidays' simpler.
+
+*** The new variable `calendar-minimum-window-height' affects the
+window generated by the function `generate-calendar-window'.
+
+** Speedbar changes
+
+*** Speedbar items can now be selected by clicking mouse-1, based on
+the `mouse-1-click-follows-link' mechanism.
+
+*** The new command `speedbar-toggle-line-expansion', bound to SPC,
+contracts or expands the line under the cursor.
+
+*** New command `speedbar-create-directory', bound to `M'.
+
+*** The new commands `speedbar-expand-line-descendants' and
+`speedbar-contract-line-descendants', bound to `[' and `]'
+respectively, expand and contract the line under cursor with all of
+its descendents.
+
+*** The new user option `speedbar-use-tool-tips-flag', if non-nil,
+means to display tool-tips for speedbar items.
+
+*** The new user option `speedbar-query-confirmation-method' controls
+how querying is performed for file operations. A value of 'always
+means to always query before file operations; 'none-but-delete means
+to not query before any file operations, except before a file
+deletion.
+
+*** The new user option `speedbar-select-frame-method' specifies how
+to select a frame for displaying a file opened with the speedbar. A
+value of 'attached means to use the attached frame (the frame that
+speedbar was started from.) A number such as 1 or -1 means to pass
+that number to `other-frame'.
+
+*** SPC and DEL are no longer bound to scroll up/down in the speedbar
+keymap.
+
+*** The frame management code in speedbar.el has been split into a new
+`dframe' library. Emacs Lisp code that makes use of the speedbar
+should use `dframe-attached-frame' instead of
+`speedbar-attached-frame', `dframe-timer' instead of `speedbar-timer',
+`dframe-close-frame' instead of `speedbar-close-frame', and
+`dframe-activity-change-focus-flag' instead of
+`speedbar-activity-change-focus-flag'. The variables
+`speedbar-update-speed' and `speedbar-navigating-speed' are also
+obsolete; use `dframe-update-speed' instead.
+
+** battery.el changes
+
+*** display-battery-mode replaces display-battery.
+
+*** battery.el now works on recent versions of OS X.
+
+** Games
+
+*** The game `mpuz' is enhanced.
+
+`mpuz' now allows the 2nd factor not to have two identical digits. By
+default, all trivial operations involving whole lines are performed
+automatically. The game uses faces for better visual feedback.
+
+** Obsolete and deleted packages
+
+*** fast-lock.el and lazy-lock.el are obsolete. Use jit-lock.el instead.
+
+*** iso-acc.el is now obsolete. Use one of the latin input methods instead.
+
+*** zone-mode.el is now obsolete. Use dns-mode.el instead.
+
+*** cplus-md.el has been deleted.
+
+** Miscellaneous
+
+*** The variable `woman-topic-at-point' is renamed
+to `woman-use-topic-at-point' and behaves differently: if this
+variable is non-nil, the `woman' command uses the word at point
+automatically, without asking for a confirmation. Otherwise, the word
+at point is suggested as default, but not inserted at the prompt.
+
+*** You can now customize `fill-nobreak-predicate' to control where
+filling can break lines. The value is now normally a list of
+functions, but it can also be a single function, for compatibility.
+
+Emacs provide two predicates, `fill-single-word-nobreak-p' and
+`fill-french-nobreak-p', for use as the value of
+`fill-nobreak-predicate'.
+
+*** M-x view-file and commands that use it now avoid interfering
+with special modes such as Tar mode.
+
+*** `global-whitespace-mode' is a new alias for `whitespace-global-mode'.
+
+*** The saveplace.el package now filters out unreadable files.
+
+When you exit Emacs, the saved positions in visited files no longer
+include files that aren't readable, e.g. files that don't exist.
+Customize the new option `save-place-forget-unreadable-files' to nil
+to get the old behavior. The new options `save-place-save-skipped'
+and `save-place-skip-check-regexp' allow further fine-tuning of this
+feature.
+
+*** Commands `winner-redo' and `winner-undo', from winner.el, are now
+bound to C-c <left> and C-c <right>, respectively. This is an
+incompatible change.
+
+*** The type-break package now allows `type-break-file-name' to be nil
+and if so, doesn't store any data across sessions. This is handy if
+you don't want the `.type-break' file in your home directory or are
+annoyed by the need for interaction when you kill Emacs.
+
+*** `ps-print' can now print characters from the mule-unicode charsets.
+
+Printing text with characters from the mule-unicode-* sets works with
+`ps-print', provided that you have installed the appropriate BDF
+fonts. See the file INSTALL for URLs where you can find these fonts.
+
+*** New command `strokes-global-set-stroke-string'.
+This is like `strokes-global-set-stroke', but it allows you to bind
+the stroke directly to a string to insert. This is convenient for
+using strokes as an input method.
+
+*** In Outline mode, `hide-body' no longer hides lines at the top
+of the file that precede the first header line.
+
+*** `hide-ifdef-mode' now uses overlays rather than selective-display
+to hide its text. This should be mostly transparent but slightly
+changes the behavior of motion commands like C-e and C-p.
+
+*** In Artist mode the variable `artist-text-renderer' has been
+renamed to `artist-text-renderer-function'. The old name is still
+available as alias.
+
+*** In Enriched mode, `set-left-margin' and `set-right-margin' are now
+by default bound to `C-c [' and `C-c ]' instead of the former `C-c C-l'
+and `C-c C-r'.
+
+*** `partial-completion-mode' now handles partial completion on directory names.
+
+*** You can now disable pc-selection-mode after enabling it.
+
+M-x pc-selection-mode behaves like a proper minor mode, and with no
+argument it toggles the mode. Turning off PC-Selection mode restores
+the global key bindings that were replaced by turning on the mode.
+
+*** `uniquify-strip-common-suffix' tells uniquify to prefer
+`file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'.
+
+*** New user option `add-log-always-start-new-record'.
+
+When this option is enabled, M-x add-change-log-entry always
+starts a new record regardless of when the last record is.
+
+*** M-x compare-windows now can automatically skip non-matching text to
+resync points in both windows.
+
+*** PO translation files are decoded according to their MIME headers
+when Emacs visits them.
+
+*** Telnet now prompts you for a port number with C-u M-x telnet.
+
+*** calculator.el now has radix grouping mode.
+
+To enable this, set `calculator-output-radix' non-nil. In this mode a
+separator character is used every few digits, making it easier to see
+byte boundaries etc. For more info, see the documentation of the
+variable `calculator-radix-grouping-mode'.
+
+*** LDAP support now defaults to ldapsearch from OpenLDAP version 2.
+
+*** The terminal emulation code in term.el has been improved; it can
+run most curses applications now.
+
+*** Support for `magic cookie' standout modes has been removed.
+
+Emacs still works on terminals that require magic cookies in order to
+use standout mode, but they can no longer display mode-lines in
+inverse-video.
+
+
+* Changes in Emacs 22.1 on non-free operating systems
+
+** The HOME directory defaults to Application Data under the user profile.
+
+If you used a previous version of Emacs without setting the HOME
+environment variable and a `.emacs' was saved, then Emacs will continue
+using C:/ as the default HOME. But if you are installing Emacs afresh,
+the default location will be the "Application Data" (or similar
+localized name) subdirectory of your user profile. A typical location
+of this directory is "C:\Documents and Settings\USERNAME\Application Data",
+where USERNAME is your user name.
+
+This change means that users can now have their own `.emacs' files on
+shared computers, and the default HOME directory is less likely to be
+read-only on computers that are administered by someone else.
+
+** Images are now supported on MS Windows.
+
+PBM and XBM images are supported out of the box. Other image formats
+depend on external libraries. All of these libraries have been ported
+to Windows, and can be found in both source and binary form at
+http://gnuwin32.sourceforge.net/. Note that libpng also depends on
+zlib, and tiff depends on the version of jpeg that it was compiled
+against. For additional information, see nt/INSTALL.
+
+** Sound is now supported on MS Windows.
+
+WAV format is supported on all versions of Windows, other formats such
+as AU, AIFF and MP3 may be supported in the more recent versions of
+Windows, or when other software provides hooks into the system level
+sound support for those formats.
+
+** Tooltips now work on MS Windows.
+
+See the Emacs 21.1 NEWS entry for tooltips for details.
+
+** Pointing devices with more than 3 buttons are now supported on MS Windows.
+
+The new variable `w32-pass-extra-mouse-buttons-to-system' controls
+whether Emacs should handle the extra buttons itself (the default), or
+pass them to Windows to be handled with system-wide functions.
+
+** Passing resources on the command line now works on MS Windows.
+
+You can use --xrm to pass resource settings to Emacs, overriding any
+existing values. For example:
+
+ emacs --xrm "Emacs.Background:red" --xrm "Emacs.Geometry:100x20"
+
+will start up Emacs on an initial frame of 100x20 with red background,
+irrespective of geometry or background setting on the Windows registry.
+
+** Emacs takes note of colors defined in Control Panel on MS-Windows.
+
+The Control Panel defines some default colors for applications in much
+the same way as wildcard X Resources do on X. Emacs now adds these
+colors to the colormap prefixed by System (eg SystemMenu for the
+default Menu background, SystemMenuText for the foreground), and uses
+some of them to initialize some of the default faces.
+`list-colors-display' shows the list of System color names, in case
+you wish to use them in other faces.
+
+** Running in a console window in Windows now uses the console size.
+
+Previous versions of Emacs erred on the side of having a usable Emacs
+through telnet, even though that was inconvenient if you use Emacs in
+a local console window with a scrollback buffer. The default value of
+w32-use-full-screen-buffer is now nil, which favors local console
+windows. Recent versions of Windows telnet also work well with this
+setting. If you are using an older telnet server then Emacs detects
+that the console window dimensions that are reported are not sane, and
+defaults to 80x25. If you use such a telnet server regularly at a size
+other than 80x25, you can still manually set
+w32-use-full-screen-buffer to t.
+
+** Different shaped mouse pointers are supported on MS Windows.
+
+The mouse pointer changes shape depending on what is under the pointer.
+
+** On MS Windows, the "system caret" now follows the cursor.
+
+This enables Emacs to work better with programs that need to track the
+cursor, for example screen magnifiers and text to speech programs.
+When such a program is in use, the system caret is made visible
+instead of Emacs drawing its own cursor. This seems to be required by
+some programs. The new variable w32-use-visible-system-caret allows
+the caret visibility to be manually toggled.
+
+** On MS Windows NT/W2K/XP, Emacs uses Unicode for clipboard operations.
+
+Those systems use Unicode internally, so this allows Emacs to share
+multilingual text with other applications. On other versions of
+MS Windows, Emacs now uses the appropriate locale coding-system, so
+the clipboard should work correctly for your local language without
+any customizations.
+
+** On Mac OS, `keyboard-coding-system' changes based on the keyboard script.
+
+** The variable `mac-keyboard-text-encoding' and the constants
+`kTextEncodingMacRoman', `kTextEncodingISOLatin1', and
+`kTextEncodingISOLatin2' are obsolete.
+
+** The variable `mac-command-key-is-meta' is obsolete. Use
+`mac-command-modifier' and `mac-option-modifier' instead.
+
+* Incompatible Lisp Changes in Emacs 22.1
+
+** Mode line display ignores text properties as well as the
+:propertize and :eval forms in the value of a variable whose
+`risky-local-variable' property is nil.
+
+The function `comint-send-input' now accepts 3 optional arguments:
+
+ (comint-send-input &optional no-newline artificial)
+
+Callers sending input not from the user should use bind the 3rd
+argument `artificial' to a non-nil value, to prevent Emacs from
+deleting the part of subprocess output that matches the input.
+
+** The `read-file-name' function now returns a null string if the
+user just types RET.
+
+** The variables post-command-idle-hook and post-command-idle-delay have
+been removed. Use run-with-idle-timer instead.
+
+** A hex or octal escape in a string constant forces the string to
+be multibyte or unibyte, respectively.
+
+** The explicit method of creating a display table element by
+combining a face number and a character code into a numeric
+glyph code is deprecated.
+
+Instead, the new functions `make-glyph-code', `glyph-char', and
+`glyph-face' must be used to create and decode glyph codes in
+display tables.
+
+** `suppress-keymap' now works by remapping `self-insert-command' to
+the command `undefined'. (In earlier Emacs versions, it used
+`substitute-key-definition' to rebind self inserting characters to
+`undefined'.)
+
+** The third argument of `accept-process-output' is now milliseconds.
+It used to be microseconds.
+
+** The function find-operation-coding-system may be called with a cons
+(FILENAME . BUFFER) in the second argument if the first argument
+OPERATION is `insert-file-contents', and thus a function registered in
+`file-coding-system-alist' is also called with such an argument.
+
+** When Emacs receives a USR1 or USR2 signal, this generates
+input events: sigusr1 or sigusr2. Use special-event-map to
+handle these events.
+
+** The variable `memory-full' now remains t until
+there is no longer a shortage of memory.
+
+** Support for Mocklisp has been removed.
+
+
+* Lisp Changes in Emacs 22.1
+
+** General Lisp changes:
+
+*** New syntax: \s now stands for the SPACE character.
+
+`?\s' is a new way to write the space character. You must make sure
+it is not followed by a dash, since `?\s-...' indicates the "super"
+modifier. However, it would be strange to write a character constant
+and a following symbol (beginning with `-') with no space between
+them.
+
+`\s' stands for space in strings, too, but it is not really meant for
+strings; it is easier and nicer just to write a space.
+
+*** New syntax: \uXXXX and \UXXXXXXXX specify Unicode code points in hex.
+
+For instance, you can use "\u0428" to specify a string consisting of
+CYRILLIC CAPITAL LETTER SHA, or `"U0001D6E2" to specify one consisting
+of MATHEMATICAL ITALIC CAPITAL ALPHA (the latter is greater than
+#xFFFF and thus needs the longer syntax).
+
+This syntax works for both character constants and strings.
+
+*** New function `unsafep' determines whether a Lisp form is safe.
+
+It returns nil if the given Lisp form can't possibly do anything
+dangerous; otherwise it returns a reason why the form might be unsafe
+(calls unknown function, alters global variable, etc.).
+
+*** The function `eql' is now available without requiring the CL package.
+
+*** The new function `memql' is like `memq', but uses `eql' for comparison,
+that is, floats are compared by value and other elements with `eq'.
+
+*** New functions `string-or-null-p' and `booleanp'.
+
+`string-or-null-p' returns non-nil if OBJECT is a string or nil.
+`booleanp' returns non-nil if OBJECT is t or nil.
+
+*** `makehash' is now obsolete. Use `make-hash-table' instead.
+
+*** Minor change in the function `format'.
+
+Some flags that were accepted but not implemented (such as "*") are no
+longer accepted.
+
+*** `add-to-list' takes an optional third argument, APPEND.
+
+If APPEND is non-nil, the new element gets added at the end of the
+list instead of at the beginning. This change actually occurred in
+Emacs 21.1, but was not documented then.
+
+*** New function `add-to-ordered-list' is like `add-to-list' but
+associates a numeric ordering of each element added to the list.
+
+*** New function `add-to-history' adds an element to a history list.
+
+Lisp packages should use this function to add elements to their
+history lists.
+
+If `history-delete-duplicates' is non-nil, it removes duplicates of
+the new element from the history list it updates.
+
+*** New function `copy-tree' makes a copy of a tree.
+
+It recursively copies through both CARs and CDRs.
+
+*** New function `delete-dups' deletes `equal' duplicate elements from a list.
+
+It modifies the list destructively, like `delete'. Of several `equal'
+occurrences of an element in the list, the one that's kept is the
+first one.
+
+*** New function `rassq-delete-all'.
+
+(rassq-delete-all VALUE ALIST) deletes, from ALIST, each element whose
+CDR is `eq' to the specified value.
+
+*** Functions `get' and `plist-get' no longer give errors for bad plists.
+
+They return nil for a malformed property list or if the list is
+cyclic.
+
+*** New functions `lax-plist-get' and `lax-plist-put'.
+
+They are like `plist-get' and `plist-put', except that they compare
+the property name using `equal' rather than `eq'.
+
+*** The function `number-sequence' makes a list of equally-separated numbers.
+
+For instance, (number-sequence 4 9) returns (4 5 6 7 8 9). By
+default, the separation is 1, but you can specify a different
+separation as the third argument. (number-sequence 1.5 6 2) returns
+(1.5 3.5 5.5).
+
+*** New variables `most-positive-fixnum' and `most-negative-fixnum'.
+
+They hold the largest and smallest possible integer values.
+
+*** The function `expt' handles negative exponents differently.
+The value for `(expt A B)', if both A and B are integers and B is
+negative, is now a float. For example: (expt 2 -2) => 0.25.
+
+*** The function `atan' now accepts an optional second argument.
+
+When called with 2 arguments, as in `(atan Y X)', `atan' returns the
+angle in radians between the vector [X, Y] and the X axis. (This is
+equivalent to the standard C library function `atan2'.)
+
+*** New macro `with-case-table'
+
+This executes the body with the case table temporarily set to a given
+case table.
+
+*** New macro `with-local-quit' temporarily allows quitting.
+
+A quit inside the body of `with-local-quit' is caught by the
+`with-local-quit' form itself, but another quit will happen later once
+the code that has inhibited quitting exits.
+
+This is for use around potentially blocking or long-running code
+inside timer functions and `post-command-hook' functions.
+
+*** New macro `define-obsolete-function-alias'.
+
+This combines `defalias' and `make-obsolete'.
+
+*** New macro `eval-at-startup' specifies expressions to
+evaluate when Emacs starts up. If this is done after startup,
+it evaluates those expressions immediately.
+
+This is useful in packages that can be preloaded.
+
+*** New function `macroexpand-all' expands all macros in a form.
+
+It is similar to the Common-Lisp function of the same name.
+One difference is that it guarantees to return the original argument
+if no expansion is done, which can be tested using `eq'.
+
+*** A function or macro's doc string can now specify the calling pattern.
+
+You put this info in the doc string's last line. It should be
+formatted so as to match the regexp "\n\n(fn .*)\\'". If you don't
+specify this explicitly, Emacs determines it from the actual argument
+names. Usually that default is right, but not always.
+
+*** New variable `print-continuous-numbering'.
+
+When this is non-nil, successive calls to print functions use a single
+numbering scheme for circular structure references. This is only
+relevant when `print-circle' is non-nil.
+
+When you bind `print-continuous-numbering' to t, you should
+also bind `print-number-table' to nil.
+
+*** `list-faces-display' takes an optional argument, REGEXP.
+
+If it is non-nil, the function lists only faces matching this regexp.
+
+*** New hook `command-error-function'.
+
+By setting this variable to a function, you can control
+how the editor command loop shows the user an error message.
+
+*** `debug-on-entry' accepts primitive functions that are not special forms.
+
+** Lisp code indentation features:
+
+*** The `defmacro' form can contain indentation and edebug declarations.
+
+These declarations specify how to indent the macro calls in Lisp mode
+and how to debug them with Edebug. You write them like this:
+
+ (defmacro NAME LAMBDA-LIST [DOC-STRING] [DECLARATION ...] ...)
+
+DECLARATION is a list `(declare DECLARATION-SPECIFIER ...)'. The
+possible declaration specifiers are:
+
+(indent INDENT)
+ Set NAME's `lisp-indent-function' property to INDENT.
+
+(edebug DEBUG)
+ Set NAME's `edebug-form-spec' property to DEBUG. (This is
+ equivalent to writing a `def-edebug-spec' for the macro,
+ but this is cleaner.)
+
+*** cl-indent now allows customization of Indentation of backquoted forms.
+
+See the new user option `lisp-backquote-indentation'.
+
+*** cl-indent now handles indentation of simple and extended `loop' forms.
+
+The new user options `lisp-loop-keyword-indentation',
+`lisp-loop-forms-indentation', and `lisp-simple-loop-indentation' can
+be used to customize the indentation of keywords and forms in loop
+forms.
+
+** Variable aliases:
+
+*** New function: defvaralias ALIAS-VAR BASE-VAR [DOCSTRING]
+
+This function defines the symbol ALIAS-VAR as a variable alias for
+symbol BASE-VAR. This means that retrieving the value of ALIAS-VAR
+returns the value of BASE-VAR, and changing the value of ALIAS-VAR
+changes the value of BASE-VAR.
+
+DOCSTRING, if present, is the documentation for ALIAS-VAR; else it has
+the same documentation as BASE-VAR.
+
+*** The macro `define-obsolete-variable-alias' combines `defvaralias' and
+`make-obsolete-variable'.
+
+*** New function: indirect-variable VARIABLE
+
+This function returns the variable at the end of the chain of aliases
+of VARIABLE. If VARIABLE is not a symbol, or if VARIABLE is not
+defined as an alias, the function returns VARIABLE.
+
+It might be noteworthy that variables aliases work for all kinds of
+variables, including buffer-local and frame-local variables.
+
+** defcustom changes:
+
+*** The package-version keyword has been added to provide
+`customize-changed-options' functionality to packages in the future.
+Developers who make use of this keyword must also update the new
+variable `customize-package-emacs-version-alist'.
+
+*** The new customization type `float' requires a floating point number.
+
+** String changes:
+
+*** A hex escape in a string constant forces the string to be multibyte.
+
+*** An octal escape in a string constant forces the string to be unibyte.
+
+*** New function `string-to-multibyte' converts a unibyte string to a
+multibyte string with the same individual character codes.
+
+*** `split-string' now includes null substrings in the returned list if
+the optional argument SEPARATORS is non-nil and there are matches for
+SEPARATORS at the beginning or end of the string. If SEPARATORS is
+nil, or if the new optional third argument OMIT-NULLS is non-nil, all
+empty matches are omitted from the returned list.
+
+*** The new function `assoc-string' replaces `assoc-ignore-case' and
+`assoc-ignore-representation', which are still available, but have
+been declared obsolete.
+
+*** New function `substring-no-properties' returns a substring without
+text properties.
+
+** Displaying warnings to the user.
+
+See the functions `warn' and `display-warning', or the Lisp Manual.
+If you want to be sure the warning will not be overlooked, this
+facility is much better than using `message', since it displays
+warnings in a separate window.
+
+** Progress reporters.
+
+These provide a simple and uniform way for commands to present
+progress messages for the user.
+
+See the new functions `make-progress-reporter',
+`progress-reporter-update', `progress-reporter-force-update',
+`progress-reporter-done', and `dotimes-with-progress-reporter'.
+
+** Buffer positions:
+
+*** Function `compute-motion' now calculates the usable window
+width if the WIDTH argument is nil. If the TOPOS argument is nil,
+the usable window height and width is used.
+
+*** The `line-move', `scroll-up', and `scroll-down' functions will now
+modify the window vscroll to scroll through display rows that are
+taller that the height of the window, for example in the presence of
+large images. To disable this feature, bind the new variable
+`auto-window-vscroll' to nil.
+
+*** The argument to `forward-word', `backward-word' is optional.
+
+It defaults to 1.
+
+*** Argument to `forward-to-indentation' and `backward-to-indentation' is optional.
+
+It defaults to 1.
+
+*** `field-beginning' and `field-end' take new optional argument, LIMIT.
+
+This argument tells them not to search beyond LIMIT. Instead they
+give up and return LIMIT.
+
+*** New function `window-line-height' is an efficient way to get
+information about a specific text line in a window provided that the
+window's display is up-to-date.
+
+*** New function `line-number-at-pos' returns the line number of a position.
+
+It an optional buffer position argument that defaults to point.
+
+*** Function `pos-visible-in-window-p' now returns the pixel coordinates
+and partial visibility state of the corresponding row, if the PARTIALLY
+arg is non-nil.
+
+*** New functions `posn-at-point' and `posn-at-x-y' return
+click-event-style position information for a given visible buffer
+position or for a given window pixel coordinate.
+
+*** New function `mouse-on-link-p' tests if a position is in a clickable link.
+
+This is the function used by the new `mouse-1-click-follows-link'
+functionality.
+
+** Text modification:
+
+*** The new function `buffer-chars-modified-tick' returns a buffer's
+tick counter for changes to characters. Each time text in that buffer
+is inserted or deleted, the character-change counter is updated to the
+tick counter (`buffer-modified-tick'). Text property changes leave it
+unchanged.
+
+*** The new function `insert-for-yank' normally works like `insert', but
+removes the text properties in the `yank-excluded-properties' list
+and handles the `yank-handler' text property.
+
+*** The new function `insert-buffer-substring-as-yank' is like
+`insert-for-yank' except that it gets the text from another buffer as
+in `insert-buffer-substring'.
+
+*** The new function `insert-buffer-substring-no-properties' is like
+`insert-buffer-substring', but removes all text properties from the
+inserted substring.
+
+*** The new function `filter-buffer-substring' extracts a buffer
+substring, passes it through a set of filter functions, and returns
+the filtered substring. Use it instead of `buffer-substring' or
+`delete-and-extract-region' when copying text into a user-accessible
+data structure, such as the kill-ring, X clipboard, or a register.
+
+The list of filter function is specified by the new variable
+`buffer-substring-filters'. For example, Longlines mode adds to
+`buffer-substring-filters' to remove soft newlines from the copied
+text.
+
+*** Function `translate-region' accepts also a char-table as TABLE
+argument.
+
+*** The new translation table `translation-table-for-input'
+is used for customizing self-insertion. The character to
+be inserted is translated through it.
+
+*** Text clones.
+
+The new function `text-clone-create'. Text clones are chunks of text
+that are kept identical by transparently propagating changes from one
+clone to the other.
+
+*** The function `insert-string' is now obsolete.
+
+** Filling changes.
+
+*** In determining an adaptive fill prefix, Emacs now tries the function in
+`adaptive-fill-function' _before_ matching the buffer line against
+`adaptive-fill-regexp' rather than _after_ it.
+
+** Atomic change groups.
+
+To perform some changes in the current buffer "atomically" so that
+they either all succeed or are all undone, use `atomic-change-group'
+around the code that makes changes. For instance:
+
+ (atomic-change-group
+ (insert foo)
+ (delete-region x y))
+
+If an error (or other nonlocal exit) occurs inside the body of
+`atomic-change-group', it unmakes all the changes in that buffer that
+were during the execution of the body. The change group has no effect
+on any other buffers--any such changes remain.
+
+If you need something more sophisticated, you can directly call the
+lower-level functions that `atomic-change-group' uses. Here is how.
+
+To set up a change group for one buffer, call `prepare-change-group'.
+Specify the buffer as argument; it defaults to the current buffer.
+This function returns a "handle" for the change group. You must save
+the handle to activate the change group and then finish it.
+
+Before you change the buffer again, you must activate the change
+group. Pass the handle to `activate-change-group' afterward to
+do this.
+
+After you make the changes, you must finish the change group. You can
+either accept the changes or cancel them all. Call
+`accept-change-group' to accept the changes in the group as final;
+call `cancel-change-group' to undo them all.
+
+You should use `unwind-protect' to make sure the group is always
+finished. The call to `activate-change-group' should be inside the
+`unwind-protect', in case the user types C-g just after it runs.
+(This is one reason why `prepare-change-group' and
+`activate-change-group' are separate functions.) Once you finish the
+group, don't use the handle again--don't try to finish the same group
+twice.
+
+To make a multibuffer change group, call `prepare-change-group' once
+for each buffer you want to cover, then use `nconc' to combine the
+returned values, like this:
+
+ (nconc (prepare-change-group buffer-1)
+ (prepare-change-group buffer-2))
+
+You can then activate the multibuffer change group with a single call
+to `activate-change-group', and finish it with a single call to
+`accept-change-group' or `cancel-change-group'.
+
+Nested use of several change groups for the same buffer works as you
+would expect. Non-nested use of change groups for the same buffer
+will lead to undesirable results, so don't let it happen; the first
+change group you start for any given buffer should be the last one
+finished.
+
+** Buffer-related changes:
+
+*** The new function `buffer-local-value' returns the buffer-local
+binding of VARIABLE (a symbol) in buffer BUFFER. If VARIABLE does not
+have a buffer-local binding in buffer BUFFER, it returns the default
+value of VARIABLE instead.
+
+*** `list-buffers-noselect' now takes an additional argument, BUFFER-LIST.
+
+If it is non-nil, it specifies which buffers to list.
+
+*** `kill-buffer-hook' is now a permanent local.
+
+*** The function `frame-or-buffer-changed-p' now lets you maintain
+various status records in parallel.
+
+It takes a variable (a symbol) as argument. If the variable is non-nil,
+then its value should be a vector installed previously by
+`frame-or-buffer-changed-p'. If the frame names, buffer names, buffer
+order, or their read-only or modified flags have changed, since the
+time the vector's contents were recorded by a previous call to
+`frame-or-buffer-changed-p', then the function returns t. Otherwise
+it returns nil.
+
+On the first call to `frame-or-buffer-changed-p', the variable's
+value should be nil. `frame-or-buffer-changed-p' stores a suitable
+vector into the variable and returns t.
+
+If the variable is itself nil, then `frame-or-buffer-changed-p' uses,
+for compatibility, an internal variable which exists only for this
+purpose.
+
+*** The function `read-buffer' follows the convention for reading from
+the minibuffer with a default value: if DEF is non-nil, the minibuffer
+prompt provided in PROMPT is edited to show the default value provided
+in DEF before the terminal colon and space.
+
+** Searching and matching changes:
+
+*** New function `looking-back' checks whether a regular expression matches
+the text before point. Specifying the LIMIT argument bounds how far
+back the match can start; this is a way to keep it from taking too long.
+
+*** The new variable `search-spaces-regexp' controls how to search
+for spaces in a regular expression. If it is non-nil, it should be a
+regular expression, and any series of spaces stands for that regular
+expression. If it is nil, spaces stand for themselves.
+
+Spaces inside of constructs such as `[..]' and inside loops such as
+`*', `+', and `?' are never replaced with `search-spaces-regexp'.
+
+*** New regular expression operators, `\_<' and `\_>'.
+
+These match the beginning and end of a symbol. A symbol is a
+non-empty sequence of either word or symbol constituent characters, as
+specified by the syntax table.
+
+*** `skip-chars-forward' and `skip-chars-backward' now handle
+character classes such as `[:alpha:]', along with individual
+characters and ranges.
+
+*** In `replace-match', the replacement text no longer inherits
+properties from surrounding text.
+
+*** The list returned by `(match-data t)' now has the buffer as a final
+element, if the last match was on a buffer. `set-match-data'
+accepts such a list for restoring the match state.
+
+*** Functions `match-data' and `set-match-data' now have an optional
+argument `reseat'. When non-nil, all markers in the match data list
+passed to these functions will be reseated to point to nowhere.
+
+*** rx.el has new corresponding `symbol-start' and `symbol-end' elements.
+
+*** The default value of `sentence-end' is now defined using the new
+variable `sentence-end-without-space', which contains such characters
+that end a sentence without following spaces.
+
+The function `sentence-end' should be used to obtain the value of the
+variable `sentence-end'. If the variable `sentence-end' is nil, then
+this function returns the regexp constructed from the variables
+`sentence-end-without-period', `sentence-end-double-space' and
+`sentence-end-without-space'.
+
+** Undo changes:
+
+*** `buffer-undo-list' allows programmable elements.
+
+These elements have the form (apply FUNNAME . ARGS), where FUNNAME is
+a symbol other than t or nil. That stands for a high-level change
+that should be undone by evaluating (apply FUNNAME ARGS).
+
+These entries can also have the form (apply DELTA BEG END FUNNAME . ARGS)
+which indicates that the change which took place was limited to the
+range BEG...END and increased the buffer size by DELTA.
+
+*** If the buffer's undo list for the current command gets longer than
+`undo-outer-limit', garbage collection empties it. This is to prevent
+it from using up the available memory and choking Emacs.
+
+** Killing and yanking changes:
+
+*** New `yank-handler' text property can be used to control how
+previously killed text on the kill ring is reinserted.
+
+The value of the `yank-handler' property must be a list with one to four
+elements with the following format:
+ (FUNCTION PARAM NOEXCLUDE UNDO).
+
+The `insert-for-yank' function looks for a yank-handler property on
+the first character on its string argument (typically the first
+element on the kill-ring). If a `yank-handler' property is found,
+the normal behavior of `insert-for-yank' is modified in various ways:
+
+ When FUNCTION is present and non-nil, it is called instead of `insert'
+to insert the string. FUNCTION takes one argument--the object to insert.
+ If PARAM is present and non-nil, it replaces STRING as the object
+passed to FUNCTION (or `insert'); for example, if FUNCTION is
+`yank-rectangle', PARAM should be a list of strings to insert as a
+rectangle.
+ If NOEXCLUDE is present and non-nil, the normal removal of the
+`yank-excluded-properties' is not performed; instead FUNCTION is
+responsible for removing those properties. This may be necessary
+if FUNCTION adjusts point before or after inserting the object.
+ If UNDO is present and non-nil, it is a function that will be called
+by `yank-pop' to undo the insertion of the current object. It is
+called with two arguments, the start and end of the current region.
+FUNCTION can set `yank-undo-function' to override the UNDO value.
+
+*** The functions `kill-new', `kill-append', and `kill-region' now have an
+optional argument to specify the `yank-handler' text property to put on
+the killed text.
+
+*** The function `yank-pop' will now use a non-nil value of the variable
+`yank-undo-function' (instead of `delete-region') to undo the previous
+`yank' or `yank-pop' command (or a call to `insert-for-yank'). The function
+`insert-for-yank' automatically sets that variable according to the UNDO
+element of the string argument's `yank-handler' text property if present.
+
+*** The function `insert-for-yank' now supports strings where the
+`yank-handler' property does not span the first character of the
+string. The old behavior is available if you call
+`insert-for-yank-1' instead.
+
+** Syntax table changes:
+
+*** The new function `syntax-ppss' provides an efficient way to find the
+current syntactic context at point.
+
+*** The new function `syntax-after' returns the syntax code
+of the character after a specified buffer position, taking account
+of text properties as well as the character code.
+
+*** `syntax-class' extracts the class of a syntax code (as returned
+by `syntax-after').
+
+*** The macro `with-syntax-table' no longer copies the syntax table.
+
+** File operation changes:
+
+*** New vars `exec-suffixes' and `load-suffixes' used when
+searching for an executable or an Emacs Lisp file.
+
+*** New function `locate-file' searches for a file in a list of directories.
+`locate-file' accepts a name of a file to search (a string), and two
+lists: a list of directories to search in and a list of suffixes to
+try; typical usage might use `exec-path' and `load-path' for the list
+of directories, and `exec-suffixes' and `load-suffixes' for the list
+of suffixes. The function also accepts a predicate argument to
+further filter candidate files.
+
+One advantage of using this function is that the list of suffixes in
+`exec-suffixes' is OS-dependant, so this function will find
+executables without polluting Lisp code with OS dependencies.
+
+*** The new function `file-remote-p' tests a file name and returns
+non-nil if it specifies a remote file (one that Emacs accesses using
+its own special methods and not directly through the file system).
+The value in that case is an identifier for the remote file system.
+
+*** The new hook `before-save-hook' is invoked by `basic-save-buffer'
+before saving buffers. This allows packages to perform various final
+tasks. For example, it can be used by the copyright package to make
+sure saved files have the current year in any copyright headers.
+
+*** `file-chase-links' now takes an optional second argument LIMIT which
+specifies the maximum number of links to chase through. If after that
+many iterations the file name obtained is still a symbolic link,
+`file-chase-links' returns it anyway.
+
+*** Functions `file-name-sans-extension' and `file-name-extension' now
+ignore the leading dots in file names, so that file names such as
+`.emacs' are treated as extensionless.
+
+*** If `buffer-save-without-query' is non-nil in some buffer,
+`save-some-buffers' will always save that buffer without asking (if
+it's modified).
+
+*** `buffer-auto-save-file-format' is the new name for what was
+formerly called `auto-save-file-format'. It is now a permanent local.
+
+*** `visited-file-modtime' and `calendar-time-from-absolute' now return
+a list of two integers, instead of a cons.
+
+*** The precedence of file name handlers has been changed.
+
+Instead of choosing the first handler that matches,
+`find-file-name-handler' now gives precedence to a file name handler
+that matches nearest the end of the file name. More precisely, the
+handler whose (match-beginning 0) is the largest is chosen. In case
+of ties, the old "first matched" rule applies.
+
+*** A file name handler can declare which operations it handles.
+
+You do this by putting an `operation' property on the handler name
+symbol. The property value should be a list of the operations that
+the handler really handles. It won't be called for any other
+operations.
+
+This is useful for autoloaded handlers, to prevent them from being
+autoloaded when not really necessary.
+
+*** The function `make-auto-save-file-name' is now handled by file
+name handlers. This will be exploited for remote files mainly.
+
+*** The function `file-name-completion' accepts an optional argument
+PREDICATE, and rejects completion candidates that don't satisfy PREDICATE.
+
+*** The new primitive `set-file-times' sets a file's access and
+modification times. Magic file name handlers can handle this
+operation.
+
+** Input changes:
+
+*** Functions `y-or-n-p', `read-char', `read-key-sequence' and the like, that
+display a prompt but don't use the minibuffer, now display the prompt
+using the text properties (esp. the face) of the prompt string.
+
+*** The functions `read-event', `read-char', and `read-char-exclusive'
+have a new optional argument SECONDS. If non-nil, this specifies a
+maximum time to wait for input, in seconds. If no input arrives after
+this time elapses, the functions stop waiting and return nil.
+
+*** An interactive specification can now use the code letter `U' to get
+the up-event that was discarded in case the last key sequence read for a
+previous `k' or `K' argument was a down-event; otherwise nil is used.
+
+*** The new interactive-specification `G' reads a file name
+much like `F', but if the input is a directory name (even defaulted),
+it returns just the directory name.
+
+*** (while-no-input BODY...) runs BODY, but only so long as no input
+arrives. If the user types or clicks anything, BODY stops as if a
+quit had occurred. `while-no-input' returns the value of BODY, if BODY
+finishes. It returns nil if BODY was aborted by a quit, and t if
+BODY was aborted by arrival of input.
+
+*** `recent-keys' now returns the last 300 keys.
+
+** Minibuffer changes:
+
+*** The new function `minibufferp' returns non-nil if its optional
+buffer argument is a minibuffer. If the argument is omitted, it
+defaults to the current buffer.
+
+*** New function `minibuffer-selected-window' returns the window which
+was selected when entering the minibuffer.
+
+*** The `read-file-name' function now takes an additional argument which
+specifies a predicate which the file name read must satisfy. The
+new variable `read-file-name-predicate' contains the predicate argument
+while reading the file name from the minibuffer; the predicate in this
+variable is used by read-file-name-internal to filter the completion list.
+
+*** The new variable `read-file-name-function' can be used by Lisp code
+to override the built-in `read-file-name' function.
+
+*** The new variable `read-file-name-completion-ignore-case' specifies
+whether completion ignores case when reading a file name with the
+`read-file-name' function.
+
+*** The new function `read-directory-name' is for reading a directory name.
+
+It is like `read-file-name' except that the defaulting works better
+for directories, and completion inside it shows only directories.
+
+*** The new variable `history-add-new-input' specifies whether to add new
+elements in history. If set to nil, minibuffer reading functions don't
+add new elements to the history list, so it is possible to do this
+afterwards by calling `add-to-history' explicitly.
+
+** Completion changes:
+
+*** The new function `minibuffer-completion-contents' returns the contents
+of the minibuffer just before point. That is what completion commands
+operate on.
+
+*** The functions `all-completions' and `try-completion' now accept lists
+of strings as well as hash-tables additionally to alists, obarrays
+and functions. Furthermore, the function `test-completion' is now
+exported to Lisp. The keys in alists and hash tables can be either
+strings or symbols, which are automatically converted with to strings.
+
+*** The new macro `dynamic-completion-table' supports using functions
+as a dynamic completion table.
+
+ (dynamic-completion-table FUN)
+
+FUN is called with one argument, the string for which completion is required,
+and it should return an alist containing all the intended possible
+completions. This alist can be a full list of possible completions so that FUN
+can ignore the value of its argument. If completion is performed in the
+minibuffer, FUN will be called in the buffer from which the minibuffer was
+entered. `dynamic-completion-table' then computes the completion.
+
+*** The new macro `lazy-completion-table' initializes a variable
+as a lazy completion table.
+
+ (lazy-completion-table VAR FUN)
+
+If the completion table VAR is used for the first time (e.g., by passing VAR
+as an argument to `try-completion'), the function FUN is called with no
+arguments. FUN must return the completion table that will be stored in VAR.
+If completion is requested in the minibuffer, FUN will be called in the buffer
+from which the minibuffer was entered. The return value of
+`lazy-completion-table' must be used to initialize the value of VAR.
+
+** Abbrev changes:
+
+*** `define-abbrev' now accepts an optional argument SYSTEM-FLAG.
+
+If non-nil, this marks the abbrev as a "system" abbrev, which means
+that it won't be stored in the user's abbrevs file if he saves the
+abbrevs. Major modes that predefine some abbrevs should always
+specify this flag.
+
+*** The new function `copy-abbrev-table' copies an abbrev table.
+
+It returns a new abbrev table that is a copy of a given abbrev table.
+
+** Enhancements to keymaps.
+
+*** Cleaner way to enter key sequences.
+
+You can enter a constant key sequence in a more natural format, the
+same one used for saving keyboard macros, using the macro `kbd'. For
+example,
+
+(kbd "C-x C-f") => "\^x\^f"
+
+Actually, this format has existed since Emacs 20.1.
+
+*** Interactive commands can be remapped through keymaps.
+
+This is an alternative to using `defadvice' or `substitute-key-definition'
+to modify the behavior of a key binding using the normal keymap
+binding and lookup functionality.
+
+When a key sequence is bound to a command, and that command is
+remapped to another command, that command is run instead of the
+original command.
+
+Example:
+Suppose that minor mode `my-mode' has defined the commands
+`my-kill-line' and `my-kill-word', and it wants C-k (and any other key
+bound to `kill-line') to run the command `my-kill-line' instead of
+`kill-line', and likewise it wants to run `my-kill-word' instead of
+`kill-word'.
+
+Instead of rebinding C-k and the other keys in the minor mode map,
+command remapping allows you to directly map `kill-line' into
+`my-kill-line' and `kill-word' into `my-kill-word' using `define-key':
+
+ (define-key my-mode-map [remap kill-line] 'my-kill-line)
+ (define-key my-mode-map [remap kill-word] 'my-kill-word)
+
+When `my-mode' is enabled, its minor mode keymap is enabled too. So
+when the user types C-k, that runs the command `my-kill-line'.
+
+Only one level of remapping is supported. In the above example, this
+means that if `my-kill-line' is remapped to `other-kill', then C-k still
+runs `my-kill-line'.
+
+The following changes have been made to provide command remapping:
+
+- Command remappings are defined using `define-key' with a prefix-key
+ `remap', i.e. `(define-key MAP [remap CMD] DEF)' remaps command CMD
+ to definition DEF in keymap MAP. The definition is not limited to
+ another command; it can be anything accepted for a normal binding.
+
+- The new function `command-remapping' returns the binding for a
+ remapped command in the current keymaps, or nil if not remapped.
+
+- `key-binding' now remaps interactive commands unless the optional
+ third argument NO-REMAP is non-nil.
+
+- `where-is-internal' now returns nil for a remapped command (e.g.
+ `kill-line', when `my-mode' is enabled), and the actual key binding for
+ the command it is remapped to (e.g. C-k for my-kill-line).
+ It also has a new optional fifth argument, NO-REMAP, which inhibits
+ remapping if non-nil (e.g. it returns "C-k" for `kill-line', and
+ "<kill-line>" for `my-kill-line').
+
+- The new variable `this-original-command' contains the original
+ command before remapping. It is equal to `this-command' when the
+ command was not remapped.
+
+*** The definition of a key-binding passed to define-key can use XEmacs-style
+key-sequences, such as [(control a)].
+
+*** New keymaps for typing file names
+
+Two new keymaps, `minibuffer-local-filename-completion-map' and
+`minibuffer-local-must-match-filename-map', apply whenever
+Emacs reads a file name in the minibuffer. These key maps override
+the usual binding of SPC to `minibuffer-complete-word' (so that file
+names with embedded spaces could be typed without the need to quote
+the spaces).
+
+*** New function `current-active-maps' returns a list of currently
+active keymaps.
+
+*** New function `describe-buffer-bindings' inserts the list of all
+defined keys and their definitions.
+
+*** New function `keymap-prompt' returns the prompt string of a keymap.
+
+*** If text has a `keymap' property, that keymap takes precedence
+over minor mode keymaps.
+
+*** The `keymap' property now also works at the ends of overlays and
+text properties, according to their stickiness. This also means that it
+works with empty overlays. The same hold for the `local-map' property.
+
+*** `key-binding' will now look up mouse-specific bindings. The
+keymaps consulted by `key-binding' will get adapted if the key
+sequence is started with a mouse event. Instead of letting the click
+position be determined from the key sequence itself, it is also
+possible to specify it with an optional argument explicitly.
+
+*** `define-key-after' now accepts keys longer than 1.
+
+*** (map-keymap FUNCTION KEYMAP) applies the function to each binding
+in the keymap.
+
+*** New variable `emulation-mode-map-alists'.
+
+Lisp packages using many minor mode keymaps can now maintain their own
+keymap alist separate from `minor-mode-map-alist' by adding their
+keymap alist to this list.
+
+*** Dense keymaps now handle inheritance correctly.
+
+Previously a dense keymap would hide all of the simple-char key
+bindings of the parent keymap.
+
+** Enhancements to process support
+
+*** Adaptive read buffering of subprocess output.
+
+On some systems, when Emacs reads the output from a subprocess, the
+output data is read in very small blocks, potentially resulting in
+very poor performance. This behavior can be remedied to some extent
+by setting the new variable `process-adaptive-read-buffering' to a
+non-nil value (the default), as it will automatically delay reading
+from such processes, allowing them to produce more output before
+Emacs tries to read it.
+
+*** Processes now have an associated property list where programs can
+maintain process state and other per-process related information.
+
+Use the new functions `process-get' and `process-put' to access, add,
+and modify elements on this property list. Use the new functions
+`process-plist' and `set-process-plist' to access and replace the
+entire property list of a process.
+
+*** Function `list-processes' now has an optional argument; if non-nil,
+it lists only the processes whose query-on-exit flag is set.
+
+*** New fns `set-process-query-on-exit-flag' and `process-query-on-exit-flag'.
+
+These replace the old function `process-kill-without-query'. That
+function is still supported, but new code should use the new
+functions.
+
+*** The new function `call-process-shell-command'.
+
+This executes a shell command synchronously in a separate process.
+
+*** The new function `process-file' is similar to `call-process', but
+obeys file handlers. The file handler is chosen based on
+`default-directory'.
+
+*** Function `signal-process' now accepts a process object or process
+name in addition to a process id to identify the signaled process.
+
+*** Function `accept-process-output' has a new optional fourth arg
+JUST-THIS-ONE. If non-nil, only output from the specified process
+is handled, suspending output from other processes. If value is an
+integer, also inhibit running timers. This feature is generally not
+recommended, but may be necessary for specific applications, such as
+speech synthesis.
+
+*** A process filter function gets the output as multibyte string
+if the process specifies t for its filter's multibyteness.
+
+That multibyteness is decided by the value of
+`default-enable-multibyte-characters' when the process is created, and
+you can change it later with `set-process-filter-multibyte'.
+
+*** The new function `set-process-filter-multibyte' sets the
+multibyteness of the strings passed to the process's filter.
+
+*** The new function `process-filter-multibyte-p' returns the
+multibyteness of the strings passed to the process's filter.
+
+*** If a process's coding system is `raw-text' or `no-conversion' and its
+buffer is multibyte, the output of the process is at first converted
+to multibyte by `string-to-multibyte' then inserted in the buffer.
+Previously, it was converted to multibyte by `string-as-multibyte',
+which was not compatible with the behavior of file reading.
+
+** Enhanced networking support.
+
+*** The new `make-network-process' function makes network connections.
+It allows opening of stream and datagram connections to a server, as well as
+create a stream or datagram server inside Emacs.
+
+- A server is started using :server t arg.
+- Datagram connection is selected using :type 'datagram arg.
+- A server can open on a random port using :service t arg.
+- Local sockets are supported using :family 'local arg.
+- IPv6 is supported (when available). You may explicitly select IPv6
+ using :family 'ipv6 arg.
+- Non-blocking connect is supported using :nowait t arg.
+- The process' property list can be initialized using :plist PLIST arg;
+ a copy of the server process' property list is automatically inherited
+ by new client processes created to handle incoming connections.
+
+To test for the availability of a given feature, use featurep like this:
+ (featurep 'make-network-process '(:type datagram))
+ (featurep 'make-network-process '(:family ipv6))
+
+*** The old `open-network-stream' now uses `make-network-process'.
+
+*** `process-contact' has an optional KEY argument.
+
+Depending on this argument, you can get the complete list of network
+process properties or a specific property. Using :local or :remote as
+the KEY, you get the address of the local or remote end-point.
+
+An Inet address is represented as a 5 element vector, where the first
+4 elements contain the IP address and the fifth is the port number.
+
+*** New functions `stop-process' and `continue-process'.
+
+These functions stop and restart communication through a network
+connection. For a server process, no connections are accepted in the
+stopped state. For a client process, no input is received in the
+stopped state.
+
+*** New function `format-network-address'.
+
+This function reformats the Lisp representation of a network address
+to a printable string. For example, an IP address A.B.C.D and port
+number P is represented as a five element vector [A B C D P], and the
+printable string returned for this vector is "A.B.C.D:P". See the doc
+string for other formatting options.
+
+*** New function `network-interface-list'.
+
+This function returns a list of network interface names and their
+current network addresses.
+
+*** New function `network-interface-info'.
+
+This function returns the network address, hardware address, current
+status, and other information about a specific network interface.
+
+*** New functions `process-datagram-address', `set-process-datagram-address'.
+
+These functions are used with datagram-based network processes to get
+and set the current address of the remote partner.
+
+*** Deleting a network process with `delete-process' calls the sentinel.
+
+The status message passed to the sentinel for a deleted network
+process is "deleted". The message passed to the sentinel when the
+connection is closed by the remote peer has been changed to
+"connection broken by remote peer".
+
+** Using window objects:
+
+*** You can now make a window as short as one line.
+
+A window that is just one line tall does not display either a mode
+line or a header line, even if the variables `mode-line-format' and
+`header-line-format' call for them. A window that is two lines tall
+cannot display both a mode line and a header line at once; if the
+variables call for both, only the mode line actually appears.
+
+*** The new function `window-inside-edges' returns the edges of the
+actual text portion of the window, not including the scroll bar or
+divider line, the fringes, the display margins, the header line and
+the mode line.
+
+*** The new functions `window-pixel-edges' and `window-inside-pixel-edges'
+return window edges in units of pixels, rather than columns and lines.
+
+*** New function `window-body-height'.
+
+This is like `window-height' but does not count the mode line or the
+header line.
+
+*** The new function `adjust-window-trailing-edge' moves the right
+or bottom edge of a window. It does not move other window edges.
+
+*** The new macro `with-selected-window' temporarily switches the
+selected window without impacting the order of `buffer-list'.
+It saves and restores the current buffer, too.
+
+*** `select-window' takes an optional second argument NORECORD.
+
+This is like `switch-to-buffer'.
+
+*** `save-selected-window' now saves and restores the selected window
+of every frame. This way, it restores everything that can be changed
+by calling `select-window'. It also saves and restores the current
+buffer.
+
+*** `set-window-buffer' has an optional argument KEEP-MARGINS.
+
+If non-nil, that says to preserve the window's current margin, fringe,
+and scroll-bar settings.
+
+*** The new function `window-tree' returns a frame's window tree.
+
+*** The functions `get-lru-window' and `get-largest-window' take an optional
+argument `dedicated'. If non-nil, those functions do not ignore
+dedicated windows.
+
+** Customizable fringe bitmaps
+
+*** There are new display properties, `left-fringe' and `right-fringe',
+that can be used to show a specific bitmap in the left or right fringe
+bitmap of the display line.
+
+Format is `display (left-fringe BITMAP [FACE])', where BITMAP is a
+symbol identifying a fringe bitmap, either built-in or defined with
+`define-fringe-bitmap', and FACE is an optional face name to be used
+for displaying the bitmap instead of the default `fringe' face.
+When specified, FACE is automatically merged with the `fringe' face.
+
+*** New buffer-local variables `fringe-indicator-alist' and
+`fringe-cursor-alist' maps between logical (internal) fringe indicator
+and cursor symbols and the actual fringe bitmaps to be displayed.
+This decouples the logical meaning of the fringe indicators from the
+physical appearance, as well as allowing different fringe bitmaps to
+be used in different windows showing different buffers.
+
+*** New function `define-fringe-bitmap' can now be used to create new
+fringe bitmaps, as well as change the built-in fringe bitmaps.
+
+*** New function `destroy-fringe-bitmap' deletes a fringe bitmap
+or restores a built-in one to its default value.
+
+*** New function `set-fringe-bitmap-face' specifies the face to be
+used for a specific fringe bitmap. The face is automatically merged
+with the `fringe' face, so normally, the face should only specify the
+foreground color of the bitmap.
+
+*** New function `fringe-bitmaps-at-pos' returns the current fringe
+bitmaps in the display line at a given buffer position.
+
+** Other window fringe features:
+
+*** Controlling the default left and right fringe widths.
+
+The default left and right fringe widths for all windows of a frame
+can now be controlled by setting the `left-fringe' and `right-fringe'
+frame parameters to an integer value specifying the width in pixels.
+Setting the width to 0 effectively removes the corresponding fringe.
+
+The actual default fringe widths for the frame may deviate from the
+specified widths, since the combined fringe widths must match an
+integral number of columns. The extra width is distributed evenly
+between the left and right fringe. To force a specific fringe width,
+specify the width as a negative integer (if both widths are negative,
+only the left fringe gets the specified width).
+
+Setting the width to nil (the default), restores the default fringe
+width which is the minimum number of pixels necessary to display any
+of the currently defined fringe bitmaps. The width of the built-in
+fringe bitmaps is 8 pixels.
+
+*** Per-window fringe and scrollbar settings
+
+**** Windows can now have their own individual fringe widths and
+position settings.
+
+To control the fringe widths of a window, either set the buffer-local
+variables `left-fringe-width', `right-fringe-width', or call
+`set-window-fringes'.
+
+To control the fringe position in a window, that is, whether fringes
+are positioned between the display margins and the window's text area,
+or at the edges of the window, either set the buffer-local variable
+`fringes-outside-margins' or call `set-window-fringes'.
+
+The function `window-fringes' can be used to obtain the current
+settings. To make `left-fringe-width', `right-fringe-width', and
+`fringes-outside-margins' take effect, you must set them before
+displaying the buffer in a window, or use `set-window-buffer' to force
+an update of the display margins.
+
+**** Windows can now have their own individual scroll-bar settings
+controlling the width and position of scroll-bars.
+
+To control the scroll-bar of a window, either set the buffer-local
+variables `scroll-bar-mode' and `scroll-bar-width', or call
+`set-window-scroll-bars'. The function `window-scroll-bars' can be
+used to obtain the current settings. To make `scroll-bar-mode' and
+`scroll-bar-width' take effect, you must set them before displaying
+the buffer in a window, or use `set-window-buffer' to force an update
+of the display margins.
+
+** Redisplay features:
+
+*** `sit-for' can now be called with args (SECONDS &optional NODISP).
+
+*** Iconifying or deiconifying a frame no longer makes sit-for return.
+
+*** New function `redisplay' causes an immediate redisplay if no input is
+available, equivalent to (sit-for 0). The call (redisplay t) forces
+an immediate redisplay even if input is pending.
+
+*** New function `force-window-update' can initiate a full redisplay of
+one or all windows. Normally, this is not needed as changes in window
+contents are detected automatically. However, certain implicit
+changes to mode lines, header lines, or display properties may require
+forcing an explicit window update.
+
+*** (char-displayable-p CHAR) returns non-nil if Emacs ought to be able
+to display CHAR. More precisely, if the selected frame's fontset has
+a font to display the character set that CHAR belongs to.
+
+Fontsets can specify a font on a per-character basis; when the fontset
+does that, this value cannot be accurate.
+
+*** You can define multiple overlay arrows via the new
+variable `overlay-arrow-variable-list'.
+
+It contains a list of variables which contain overlay arrow position
+markers, including the original `overlay-arrow-position' variable.
+
+Each variable on this list can have individual `overlay-arrow-string'
+and `overlay-arrow-bitmap' properties that specify an overlay arrow
+string (for non-window terminals) or fringe bitmap (for window
+systems) to display at the corresponding overlay arrow position.
+If either property is not set, the default `overlay-arrow-string' or
+'overlay-arrow-fringe-bitmap' will be used.
+
+*** New `line-height' and `line-spacing' properties for newline characters
+
+A newline can now have `line-height' and `line-spacing' text or overlay
+properties that control the height of the corresponding display row.
+
+If the `line-height' property value is t, the newline does not
+contribute to the height of the display row; instead the height of the
+newline glyph is reduced. Also, a `line-spacing' property on this
+newline is ignored. This can be used to tile small images or image
+slices without adding blank areas between the images.
+
+If the `line-height' property value is a positive integer, the value
+specifies the minimum line height in pixels. If necessary, the line
+height it increased by increasing the line's ascent.
+
+If the `line-height' property value is a float, the minimum line
+height is calculated by multiplying the default frame line height by
+the given value.
+
+If the `line-height' property value is a cons (FACE . RATIO), the
+minimum line height is calculated as RATIO * height of named FACE.
+RATIO is int or float. If FACE is t, it specifies the current face.
+
+If the `line-height' property value is a cons (nil . RATIO), the line
+height is calculated as RATIO * actual height of the line's contents.
+
+If the `line-height' value is a cons (HEIGHT . TOTAL), HEIGHT specifies
+the line height as described above, while TOTAL is any of the forms
+described above and specifies the total height of the line, causing a
+varying number of pixels to be inserted after the line to make it line
+exactly that many pixels high.
+
+If the `line-spacing' property value is an positive integer, the value
+is used as additional pixels to insert after the display line; this
+overrides the default frame `line-spacing' and any buffer local value of
+the `line-spacing' variable.
+
+If the `line-spacing' property is a float or cons, the line spacing
+is calculated as specified above for the `line-height' property.
+
+*** The buffer local `line-spacing' variable can now have a float value,
+which is used as a height relative to the default frame line height.
+
+*** Enhancements to stretch display properties
+
+The display property stretch specification form `(space PROPS)', where
+PROPS is a property list, now allows pixel based width and height
+specifications, as well as enhanced horizontal text alignment.
+
+The value of these properties can now be a (primitive) expression
+which is evaluated during redisplay. The following expressions
+are supported:
+
+EXPR ::= NUM | (NUM) | UNIT | ELEM | POS | IMAGE | FORM
+NUM ::= INTEGER | FLOAT | SYMBOL
+UNIT ::= in | mm | cm | width | height
+ELEM ::= left-fringe | right-fringe | left-margin | right-margin
+ | scroll-bar | text
+POS ::= left | center | right
+FORM ::= (NUM . EXPR) | (OP EXPR ...)
+OP ::= + | -
+
+The form `NUM' specifies a fractional width or height of the default
+frame font size. The form `(NUM)' specifies an absolute number of
+pixels. If a symbol is specified, its buffer-local variable binding
+is used. The `in', `mm', and `cm' units specifies the number of
+pixels per inch, milli-meter, and centi-meter, resp. The `width' and
+`height' units correspond to the width and height of the current face
+font. An image specification corresponds to the width or height of
+the image.
+
+The `left-fringe', `right-fringe', `left-margin', `right-margin',
+`scroll-bar', and `text' elements specify to the width of the
+corresponding area of the window.
+
+The `left', `center', and `right' positions can be used with :align-to
+to specify a position relative to the left edge, center, or right edge
+of the text area. One of the above window elements (except `text')
+can also be used with :align-to to specify that the position is
+relative to the left edge of the given area. Once the base offset for
+a relative position has been set (by the first occurrence of one of
+these symbols), further occurrences of these symbols are interpreted as
+the width of the area.
+
+For example, to align to the center of the left-margin, use
+ :align-to (+ left-margin (0.5 . left-margin))
+
+If no specific base offset is set for alignment, it is always relative
+to the left edge of the text area. For example, :align-to 0 in a
+header line aligns with the first text column in the text area.
+
+The value of the form `(NUM . EXPR)' is the value of NUM multiplied by
+the value of the expression EXPR. For example, (2 . in) specifies a
+width of 2 inches, while (0.5 . IMAGE) specifies half the width (or
+height) of the specified image.
+
+The form `(+ EXPR ...)' adds up the value of the expressions.
+The form `(- EXPR ...)' negates or subtracts the value of the expressions.
+
+*** Normally, the cursor is displayed at the end of any overlay and
+text property string that may be present at the current window
+position. The cursor can now be placed on any character of such
+strings by giving that character a non-nil `cursor' text property.
+
+*** The display space :width and :align-to text properties are now
+supported on text terminals.
+
+*** Support for displaying image slices
+
+**** New display property (slice X Y WIDTH HEIGHT) can be used with
+an image property to display only a specific slice of the image.
+
+**** Function `insert-image' has new optional fourth arg to
+specify image slice (X Y WIDTH HEIGHT).
+
+**** New function `insert-sliced-image' inserts a given image as a
+specified number of evenly sized slices (rows x columns).
+
+*** Images can now have an associated image map via the :map property.
+
+An image map is an alist where each element has the format (AREA ID PLIST).
+An AREA is specified as either a rectangle, a circle, or a polygon:
+A rectangle is a cons (rect . ((X0 . Y0) . (X1 . Y1))) specifying the
+pixel coordinates of the upper left and bottom right corners.
+A circle is a cons (circle . ((X0 . Y0) . R)) specifying the center
+and the radius of the circle; R can be a float or integer.
+A polygon is a cons (poly . [X0 Y0 X1 Y1 ...]) where each pair in the
+vector describes one corner in the polygon.
+
+When the mouse pointer is above a hot-spot area of an image, the
+PLIST of that hot-spot is consulted; if it contains a `help-echo'
+property it defines a tool-tip for the hot-spot, and if it contains
+a `pointer' property, it defines the shape of the mouse cursor when
+it is over the hot-spot. See the variable `void-area-text-pointer'
+for possible pointer shapes.
+
+When you click the mouse when the mouse pointer is over a hot-spot,
+an event is composed by combining the ID of the hot-spot with the
+mouse event, e.g. [area4 mouse-1] if the hot-spot's ID is `area4'.
+
+*** The function `find-image' now searches in etc/images/ and etc/.
+The new variable `image-load-path' is a list of locations in which to
+search for image files. The default is to search in etc/images, then
+in etc/, and finally in the directories specified by `load-path'.
+Subdirectories of etc/ and etc/images are not recursively searched; if
+you put an image file in a subdirectory, you have to specify it
+explicitly; for example, if an image is put in etc/images/foo/bar.xpm:
+
+ (defimage foo-image '((:type xpm :file "foo/bar.xpm")))
+
+Note that all images formerly located in the lisp directory have been
+moved to etc/images.
+
+*** New function `image-load-path-for-library' returns a suitable
+search path for images relative to library. This function is useful in
+external packages to save users from having to update
+`image-load-path'.
+
+*** The new variable `max-image-size' defines the maximum size of
+images that Emacs will load and display.
+
+*** The new variable `display-mm-dimensions-alist' can be used to
+override incorrect graphical display dimensions returned by functions
+`display-mm-height' and `display-mm-width'.
+
+** Mouse pointer features:
+
+*** The mouse pointer shape in void text areas (i.e. after the end of a
+line or below the last line in the buffer) of the text window is now
+controlled by the new variable `void-text-area-pointer'. The default
+is to use the `arrow' (non-text) pointer. Other choices are `text'
+(or nil), `hand', `vdrag', `hdrag', `modeline', and `hourglass'.
+
+*** The mouse pointer shape over an image can now be controlled by the
+:pointer image property.
+
+*** The mouse pointer shape over ordinary text or images can now be
+controlled/overridden via the `pointer' text property.
+
+** Mouse event enhancements:
+
+*** All mouse events now include a buffer position regardless of where
+you clicked. For mouse clicks in window margins and fringes, this is
+a sensible buffer position corresponding to the surrounding text.
+
+*** Mouse events for clicks on window fringes now specify `left-fringe'
+or `right-fringe' as the area.
+
+*** Mouse events include actual glyph column and row for all event types
+and all areas.
+
+*** Mouse events can now indicate an image object clicked on.
+
+*** Mouse events include relative X and Y pixel coordinates relative to
+the top left corner of the object (image or character) clicked on.
+
+*** Mouse events include the pixel width and height of the object
+(image or character) clicked on.
+
+*** Function `mouse-set-point' now works for events outside text area.
+
+*** `posn-point' now returns buffer position for non-text area events.
+
+*** New function `posn-area' returns window area clicked on (nil means
+text area).
+
+*** New function `posn-actual-col-row' returns the actual glyph coordinates
+of the mouse event position.
+
+*** New functions 'posn-object', 'posn-object-x-y', 'posn-object-width-height'.
+
+These return the image or string object of a mouse click, the X and Y
+pixel coordinates relative to the top left corner of that object, and
+the total width and height of that object.
+
+** Text property and overlay changes:
+
+*** Arguments for `remove-overlays' are now optional, so that you can
+remove all overlays in the buffer with just (remove-overlays).
+
+*** New variable `char-property-alias-alist'.
+
+This variable allows you to create alternative names for text
+properties. It works at the same level as `default-text-properties',
+although it applies to overlays as well. This variable was introduced
+to implement the `font-lock-face' property.
+
+*** New function `get-char-property-and-overlay' accepts the same
+arguments as `get-char-property' and returns a cons whose car is the
+return value of `get-char-property' called with those arguments and
+whose cdr is the overlay in which the property was found, or nil if
+it was found as a text property or not found at all.
+
+*** The new function `remove-list-of-text-properties'.
+
+It is like `remove-text-properties' except that it takes a list of
+property names as argument rather than a property list.
+
+** Face changes
+
+*** The variable `facemenu-unlisted-faces' has been removed.
+Emacs has a lot more faces than in the past, and nearly all of them
+needed to be excluded. The new variable `facemenu-listed-faces' lists
+the faces to include in the face menu.
+
+*** The new face attribute condition `min-colors' can be used to tailor
+the face color to the number of colors supported by a display, and
+define the foreground and background colors accordingly so that they
+look best on a terminal that supports at least this many colors. This
+is now the preferred method for defining default faces in a way that
+makes a good use of the capabilities of the display.
+
+*** New function `display-supports-face-attributes-p' can be used to test
+whether a given set of face attributes is actually displayable.
+
+A new predicate `supports' has also been added to the `defface' face
+specification language, which can be used to do this test for faces
+defined with `defface'.
+
+*** The special treatment of faces whose names are of the form `fg:COLOR'
+or `bg:COLOR' has been removed. Lisp programs should use the
+`defface' facility for defining faces with specific colors, or use
+the feature of specifying the face attributes :foreground and :background
+directly in the `face' property instead of using a named face.
+
+*** The first face specification element in a defface can specify
+`default' instead of frame classification. Then its attributes act as
+defaults that apply to all the subsequent cases (and can be overridden
+by them).
+
+*** The function `face-differs-from-default-p' now truly checks
+whether the given face displays differently from the default face or
+not (previously it did only a very cursory check).
+
+*** `face-attribute', `face-foreground', `face-background', `face-stipple'.
+
+These now accept a new optional argument, INHERIT, which controls how
+face inheritance is used when determining the value of a face
+attribute.
+
+*** New functions `face-attribute-relative-p' and `merge-face-attribute'
+help with handling relative face attributes.
+
+*** The priority of faces in an :inherit attribute face list is reversed.
+
+If a face contains an :inherit attribute with a list of faces, earlier
+faces in the list override later faces in the list; in previous
+releases of Emacs, the order was the opposite. This change was made
+so that :inherit face lists operate identically to face lists in text
+`face' properties.
+
+*** The variable `face-font-rescale-alist' specifies how much larger
+(or smaller) font we should use. For instance, if the value is
+'((SOME-FONTNAME-PATTERN . 1.3)) and a face requests a font of 10
+point, we actually use a font of 13 point if the font matches
+SOME-FONTNAME-PATTERN.
+
+*** On terminals, faces with the :inverse-video attribute are displayed
+with swapped foreground and background colors even when one of them is
+not specified. In previous releases of Emacs, if either foreground
+or background color was unspecified, colors were not swapped. This
+was inconsistent with the face behavior under X.
+
+*** `set-fontset-font', `fontset-info', `fontset-font' now operate on
+the default fontset if the argument NAME is nil..
+
+** Font-Lock changes:
+
+*** New special text property `font-lock-face'.
+
+This property acts like the `face' property, but it is controlled by
+M-x font-lock-mode. It is not, strictly speaking, a builtin text
+property. Instead, it is implemented inside font-core.el, using the
+new variable `char-property-alias-alist'.
+
+*** font-lock can manage arbitrary text-properties beside `face'.
+
+**** the FACENAME returned in `font-lock-keywords' can be a list of the
+form (face FACE PROP1 VAL1 PROP2 VAL2 ...) so you can set other
+properties than `face'.
+
+**** `font-lock-extra-managed-props' can be set to make sure those
+extra properties are automatically cleaned up by font-lock.
+
+*** jit-lock obeys a new text-property `jit-lock-defer-multiline'.
+
+If a piece of text with that property gets contextually refontified
+(see `jit-lock-defer-contextually'), then all of that text will
+be refontified. This is useful when the syntax of a textual element
+depends on text several lines further down (and when `font-lock-multiline'
+is not appropriate to solve that problem). For example in Perl:
+
+ s{
+ foo
+ }{
+ bar
+ }e
+
+Adding/removing the last `e' changes the `bar' from being a piece of
+text to being a piece of code, so you'd put a `jit-lock-defer-multiline'
+property over the second half of the command to force (deferred)
+refontification of `bar' whenever the `e' is added/removed.
+
+*** `font-lock-extend-region-functions' makes it possible to alter the way
+the fontification region is chosen. This can be used to prevent rounding
+up to whole lines, or to extend the region to include all related lines
+of multiline constructs so that such constructs get properly recognized.
+
+** Major mode mechanism changes:
+
+*** New variable `magic-mode-alist' determines major mode for a file by
+looking at the file contents. It takes precedence over `auto-mode-alist'.
+
+*** New variable `magic-fallback-mode-alist' determines major mode for a file by
+looking at the file contents. It is handled after `auto-mode-alist',
+only if `auto-mode-alist' (and `magic-mode-alist') says nothing about the file.
+
+*** XML or SGML major mode is selected when file starts with an `<?xml'
+or `<!DOCTYPE' declaration.
+
+*** An interpreter magic line (if present) takes precedence over the
+file name when setting the major mode.
+
+*** If new variable `auto-mode-case-fold' is set to a non-nil value,
+Emacs will perform a second case-insensitive search through
+`auto-mode-alist' if the first case-sensitive search fails. This
+means that a file FILE.TXT is opened in text-mode, and a file
+PROG.HTML is opened in html-mode. Note however, that independent of
+this setting, *.C files are usually recognized as C++ files. It also
+has no effect on systems with case-insensitive file names.
+
+*** All major mode functions should now run the new normal hook
+`after-change-major-mode-hook', at their very end, after the mode
+hooks. `run-mode-hooks' does this automatically.
+
+*** Major modes can define `eldoc-documentation-function'
+locally to provide Eldoc functionality by some method appropriate to
+the language.
+
+*** Use the new function `run-mode-hooks' to run the major mode's mode hook.
+
+*** The new function `run-mode-hooks' and the new macro `delay-mode-hooks'
+are used by `define-derived-mode' to make sure the mode hook for the
+parent mode is run at the end of the child mode.
+
+*** `define-derived-mode' by default creates a new empty abbrev table.
+It does not copy abbrevs from the parent mode's abbrev table.
+
+*** If a major mode function has a non-nil `no-clone-indirect'
+property, `clone-indirect-buffer' signals an error if you use
+it in that buffer.
+
+** Minor mode changes:
+
+*** `define-minor-mode' now accepts arbitrary additional keyword arguments
+and simply passes them to `defcustom', if applicable.
+
+*** `define-globalized-minor-mode'.
+
+This is a new name for what was formerly called
+`easy-mmode-define-global-mode'. The old name remains as an alias.
+
+*** `minor-mode-list' now holds a list of minor mode commands.
+
+** Command loop changes:
+
+*** The new function `called-interactively-p' does what many people
+have mistakenly believed `interactive-p' to do: it returns t if the
+calling function was called through `call-interactively'.
+
+Only use this when you cannot solve the problem by adding a new
+INTERACTIVE argument to the command.
+
+*** The function `commandp' takes an additional optional argument.
+
+If it is non-nil, then `commandp' checks for a function that could be
+called with `call-interactively', and does not return t for keyboard
+macros.
+
+*** When a command returns, the command loop moves point out from
+within invisible text, in the same way it moves out from within text
+covered by an image or composition property.
+
+This makes it generally unnecessary to mark invisible text as intangible.
+This is particularly good because the intangible property often has
+unexpected side-effects since the property applies to everything
+(including `goto-char', ...) whereas this new code is only run after
+`post-command-hook' and thus does not care about intermediate states.
+
+*** If a command sets `transient-mark-mode' to `only', that
+enables Transient Mark mode for the following command only.
+During that following command, the value of `transient-mark-mode'
+is `identity'. If it is still `identity' at the end of the command,
+the next return to the command loop changes to nil.
+
+*** Both the variable and the function `disabled-command-hook' have
+been renamed to `disabled-command-function'. The variable
+`disabled-command-hook' has been kept as an obsolete alias.
+
+*** `emacsserver' now runs `pre-command-hook' and `post-command-hook'
+when it receives a request from emacsclient.
+
+*** `current-idle-time' reports how long Emacs has been idle.
+
+** Lisp file loading changes:
+
+*** `load-history' can now have elements of the form (t . FUNNAME),
+which means FUNNAME was previously defined as an autoload (before the
+current file redefined it).
+
+*** `load-history' now records (defun . FUNNAME) when a function is
+defined. For a variable, it records just the variable name.
+
+*** The function `symbol-file' can now search specifically for function,
+variable or face definitions.
+
+*** `provide' and `featurep' now accept an optional second argument
+to test/provide subfeatures. Also `provide' now checks `after-load-alist'
+and runs any code associated with the provided feature.
+
+*** The variable `recursive-load-depth-limit' has been deleted.
+Emacs now signals an error if the same file is loaded with more
+than 3 levels of nesting.
+
+** Byte compiler changes:
+
+*** The byte compiler now displays the actual line and character
+position of errors, where possible. Additionally, the form of its
+warning and error messages have been brought into line with GNU standards
+for these. As a result, you can use next-error and friends on the
+compilation output buffer.
+
+*** The new macro `with-no-warnings' suppresses all compiler warnings
+inside its body. In terms of execution, it is equivalent to `progn'.
+
+*** You can avoid warnings for possibly-undefined symbols with a
+simple convention that the compiler understands. (This is mostly
+useful in code meant to be portable to different Emacs versions.)
+Write forms like the following, or code that macroexpands into such
+forms:
+
+ (if (fboundp 'foo) <then> <else>)
+ (if (boundp 'foo) <then> <else)
+
+In the first case, using `foo' as a function inside the <then> form
+won't produce a warning if it's not defined as a function, and in the
+second case, using `foo' as a variable won't produce a warning if it's
+unbound. The test must be in exactly one of the above forms (after
+macro expansion), but such tests can be nested. Note that `when' and
+`unless' expand to `if', but `cond' doesn't.
+
+*** `(featurep 'xemacs)' is treated by the compiler as nil. This
+helps to avoid noisy compiler warnings in code meant to run under both
+Emacs and XEmacs and can sometimes make the result significantly more
+efficient. Since byte code from recent versions of XEmacs won't
+generally run in Emacs and vice versa, this optimization doesn't lose
+you anything.
+
+*** The local variable `no-byte-compile' in Lisp files is now obeyed.
+
+*** When a Lisp file uses CL functions at run-time, compiling the file
+now issues warnings about these calls, unless the file performs
+(require 'cl) when loaded.
+
+** Frame operations:
+
+*** New functions `frame-current-scroll-bars' and `window-current-scroll-bars'.
+
+These functions return the current locations of the vertical and
+horizontal scroll bars in a frame or window.
+
+*** The new function `modify-all-frames-parameters' modifies parameters
+for all (existing and future) frames.
+
+*** The new frame parameter `tty-color-mode' specifies the mode to use
+for color support on character terminal frames. Its value can be a
+number of colors to support, or a symbol. See the Emacs Lisp
+Reference manual for more detailed documentation.
+
+*** When using non-toolkit scroll bars with the default width,
+the `scroll-bar-width' frame parameter value is nil.
+
+** Mode line changes:
+
+*** New function `format-mode-line'.
+
+This returns the mode line or header line of the selected (or a
+specified) window as a string with or without text properties.
+
+*** The new mode-line construct `(:propertize ELT PROPS...)' can be
+used to add text properties to mode-line elements.
+
+*** The new `%i' and `%I' constructs for `mode-line-format' can be used
+to display the size of the accessible part of the buffer on the mode
+line.
+
+*** Mouse-face on mode-line (and header-line) is now supported.
+
+** Menu manipulation changes:
+
+*** To manipulate the File menu using easy-menu, you must specify the
+proper name "file". In previous Emacs versions, you had to specify
+"files", even though the menu item itself was changed to say "File"
+several versions ago.
+
+*** The dummy function keys made by easy-menu are now always lower case.
+If you specify the menu item name "Ada", for instance, it uses `ada'
+as the "key" bound by that key binding.
+
+This is relevant only if Lisp code looks for the bindings that were
+made with easy-menu.
+
+*** `easy-menu-define' now allows you to use nil for the symbol name
+if you don't need to give the menu a name. If you install the menu
+into other keymaps right away (MAPS is non-nil), it usually doesn't
+need to have a name.
+
+** Mule changes:
+
+*** Already true in Emacs 21.1, but not emphasized clearly enough:
+
+Multibyte buffers can now faithfully record all 256 character codes
+from 0 to 255. As a result, most of the past reasons to use unibyte
+buffers no longer exist. We only know of three reasons to use them
+now:
+
+1. If you prefer to use unibyte text all of the time.
+
+2. For reading files into temporary buffers, when you want to avoid
+the time it takes to convert the format.
+
+3. For binary files where format conversion would be pointless and
+wasteful.
+
+*** The new variable `auto-coding-functions' lets you specify functions
+to examine a file being visited and deduce the proper coding system
+for it. (If the coding system is detected incorrectly for a specific
+file, you can put a `coding:' tags to override it.)
+
+*** The new variable `ascii-case-table' stores the case table for the
+ascii character set. Language environments (such as Turkish) may
+alter the case correspondences of ASCII characters. This variable
+saves the original ASCII case table before any such changes.
+
+*** The new function `merge-coding-systems' fills in unspecified aspects
+of one coding system from another coding system.
+
+*** New coding system property `mime-text-unsuitable' indicates that
+the coding system's `mime-charset' is not suitable for MIME text
+parts, e.g. utf-16.
+
+*** New function `decode-coding-inserted-region' decodes a region as if
+it is read from a file without decoding.
+
+*** New CCL functions `lookup-character' and `lookup-integer' access
+hash tables defined by the Lisp function `define-translation-hash-table'.
+
+*** New function `quail-find-key' returns a list of keys to type in the
+current input method to input a character.
+
+*** `set-buffer-file-coding-system' now takes an additional argument,
+NOMODIFY. If it is non-nil, it means don't mark the buffer modified.
+
+** Operating system access:
+
+*** The new primitive `get-internal-run-time' returns the processor
+run time used by Emacs since start-up.
+
+*** Functions `user-uid' and `user-real-uid' now return floats if the
+user UID doesn't fit in a Lisp integer. Function `user-full-name'
+accepts a float as UID parameter.
+
+*** New function `locale-info' accesses locale information.
+
+*** On MS Windows, locale-coding-system is used to interact with the OS.
+The Windows specific variable w32-system-coding-system, which was
+formerly used for that purpose is now an alias for locale-coding-system.
+
+*** New function `redirect-debugging-output' can be used to redirect
+debugging output on the stderr file handle to a file.
+
+** GC changes:
+
+*** New variable `gc-cons-percentage' automatically grows the GC cons threshold
+as the heap size increases.
+
+*** New variables `gc-elapsed' and `gcs-done' provide extra information
+on garbage collection.
+
+*** The normal hook `post-gc-hook' is run at the end of garbage collection.
+
+The hook is run with GC inhibited, so use it with care.
+
+** Miscellaneous:
+
+*** A number of hooks have been renamed to better follow the conventions:
+
+`find-file-hooks' to `find-file-hook',
+`find-file-not-found-hooks' to `find-file-not-found-functions',
+`write-file-hooks' to `write-file-functions',
+`write-contents-hooks' to `write-contents-functions',
+`x-lost-selection-hooks' to `x-lost-selection-functions',
+`x-sent-selection-hooks' to `x-sent-selection-functions',
+`delete-frame-hook' to `delete-frame-functions'.
+
+In each case the old name remains as an alias for the moment.
+
+*** Variable `local-write-file-hooks' is marked obsolete.
+
+Use the LOCAL arg of `add-hook'.
+
+*** New function `x-send-client-message' sends a client message when
+running under X.
+
+* New Packages for Lisp Programming in Emacs 22.1
+
+** The new library button.el implements simple and fast `clickable
+buttons' in Emacs buffers. Buttons are much lighter-weight than the
+`widgets' implemented by widget.el, and can be used by lisp code that
+doesn't require the full power of widgets. Emacs uses buttons for
+such things as help and apropos buffers.
+
+** The new library tree-widget.el provides a widget to display a set
+of hierarchical data as an outline. For example, the tree-widget is
+well suited to display a hierarchy of directories and files.
+
+** The new library bindat.el provides functions to unpack and pack
+binary data structures, such as network packets, to and from Lisp
+data structures.
+
+** master-mode.el implements a minor mode for scrolling a slave
+buffer without leaving your current buffer, the master buffer.
+
+It can be used by sql.el, for example: the SQL buffer is the master
+and its SQLi buffer is the slave. This allows you to scroll the SQLi
+buffer containing the output from the SQL buffer containing the
+commands.
+
+This is how to use sql.el and master.el together: the variable
+sql-buffer contains the slave buffer. It is a local variable in the
+SQL buffer.
+
+(add-hook 'sql-mode-hook
+ (function (lambda ()
+ (master-mode t)
+ (master-set-slave sql-buffer))))
+(add-hook 'sql-set-sqli-hook
+ (function (lambda ()
+ (master-set-slave sql-buffer))))
+
+** The new library benchmark.el does timing measurements on Lisp code.
+
+This includes measuring garbage collection time.
+
+** The new library testcover.el does test coverage checking.
+
+This is so you can tell whether you've tested all paths in your Lisp
+code. It works with edebug.
+
+The function `testcover-start' instruments all functions in a given
+file. Then test your code. The function `testcover-mark-all' adds
+overlay "splotches" to the Lisp file's buffer to show where coverage
+is lacking. The command `testcover-next-mark' (bind it to a key!)
+will move point forward to the next spot that has a splotch.
+
+Normally, a red splotch indicates the form was never completely
+evaluated; a brown splotch means it always evaluated to the same
+value. The red splotches are skipped for forms that can't possibly
+complete their evaluation, such as `error'. The brown splotches are
+skipped for forms that are expected to always evaluate to the same
+value, such as (setq x 14).
+
+For difficult cases, you can add do-nothing macros to your code to
+help out the test coverage tool. The macro `noreturn' suppresses a
+red splotch. It is an error if the argument to `noreturn' does
+return. The macro `1value' suppresses a brown splotch for its argument.
+This macro is a no-op except during test-coverage -- then it signals
+an error if the argument actually returns differing values.
+
+
+
+----------------------------------------------------------------------
+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 3, 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.
+
+
+Local variables:
+mode: outline
+paragraph-separate: "[ ]*$"
+end:
+
+arch-tag: 1aca9dfa-2ac4-4d14-bebf-0007cee12793
diff --git a/etc/PROBLEMS b/etc/PROBLEMS
index d8821575864..21d4d695a17 100644
--- a/etc/PROBLEMS
+++ b/etc/PROBLEMS
@@ -866,13 +866,15 @@ feature (in the font part of the configuration window).
** Subscript/superscript text in TeX is hard to read.
-tex-mode displays subscript/superscript text in the faces
-subscript/superscript, which are smaller than the normal font and
-lowered/raised. With some fonts, nested superscripts (say) can be
-hard to read. Switching to a different font, or changing your
-antialiasing setting (on an LCD screen), can both make the problem
-disappear. Alternatively, customize the subscript and superscript
-faces to increase their height.
+If `tex-fontify-script' is non-nil, tex-mode displays
+subscript/superscript text in the faces subscript/superscript, which
+are smaller than the normal font and lowered/raised. With some fonts,
+nested superscripts (say) can be hard to read. Switching to a
+different font, or changing your antialiasing setting (on an LCD
+screen), can both make the problem disappear. Alternatively, customize
+the following variables: tex-font-script-display (how much to
+lower/raise); tex-suscript-height-ratio (how much smaller than
+normal); tex-suscript-height-minimum (minimum height).
* Internationalization problems
diff --git a/etc/README b/etc/README
index 7c303fa8d89..e18da7f381a 100644
--- a/etc/README
+++ b/etc/README
@@ -1,18 +1,8 @@
-Copyright (C) 1992, 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007
- Free Software Foundation, Inc.
-See the end of the file for license conditions.
-
-
This directory contains the architecture-independent files used by or
with Emacs. This includes some text files of documentation for GNU
Emacs or of interest to Emacs users, and the file of dumped docstrings
for Emacs functions and variables.
-Some of the *.tex files need special versions of TeX to typeset them.
-The files cs-*.tex and sk-*.tex need csTeX, a special version of TeX
-tailored to typesetting Czech and Slovak documents. We provide
-PostScript files for these documents, so that you could print them
-without installing the modified TeX versions.
`termcap.src' is included mainly for VMS. It is a copy of the
`/etc/termcap' file used on Unix.
@@ -20,35 +10,8 @@ without installing the modified TeX versions.
COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
-The files splash.xpm, splash8.xpm contain copyright and license
-information, but it is reproduced here for convenience.
-
-Files: splash.pbm, splash.xpm, splash8.xpm, gnus.pbm, gnus-logo.eps
- Author: Luis Fernandes <elf@ee.ryerson.ca>
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
- Free Software Foundation, Inc.
- License: GNU General Public License version 3 or later (see COPYING)
-
File: emacs.icon
Author: Sun Microsystems, Inc
Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
License: GNU General Public License version 3 or later (see COPYING)
-
-
-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 3, 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.
diff --git a/etc/TODO b/etc/TODO
index 90a3d32fa51..981992bc1c6 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -14,11 +14,14 @@ to the FSF.
* Small but important fixes needed in existing features:
-** Fix compilation when Xaw3d libraries are present but libxaw is not.
-In new X11 versions, xaw3dg-dev does not depend on libxaw-dev, so the
-latter need not be installed. As a result, all the source files that
-look for include files in X11/Xaw should look in X11/Xaw3d if we are
-using Xaw3d.
+** Make "emacs --daemon" start emacs without showing any frame.
+Use emacsclient later to open frames.
+
+** Make it possible to reliably turn on minor modes using "mode:" in the local
+variables section.
+
+** "Options -> Save Options" should save the font set via "Set Font/Fontset"
+I.e. mouse-set-font should use customize-face.
** Compute the list of active keymaps *after* reading the first event.
@@ -30,8 +33,6 @@ a window doesn't select it.
but if you type M-n you should get the visited file name of the
current buffer.
-** describe-face should show an example of text in the face.
-
** Distribute a bar cursor of width > 1 evenly between the two glyphs
on each side of the bar (what to do at the edges?).
@@ -98,15 +99,20 @@ current buffer.
** make back_comment use syntax-ppss or equivalent.
-** Improve configure's treatment of NON_GNU_CPP on Solaris.
-(patch available for after Emacs 22)
-
** Consider improving src/sysdep.c's search for a fqdn.
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00782.html
** Find a proper fix for rcirc multiline nick adding.
http://lists.gnu.org/archive/html/emacs-devel/2007-04/msg00684.html
+** Implement `network-interface-list' and `network-interface-info'
+on MS-Windows. Hint: the information is present in the Registry,
+under the keys
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage\
+and
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<device>\
+where <device> is the network device found under the first key.
+
* Important features:
** Provide user-friendly ways to list all available font families,
@@ -175,8 +181,11 @@ specified filters, specified timers, and specified hooks.
* Other features we would like:
+** Allow frames(terminals) created by emacsclient to inherit their environment
+from the emacsclient process.
** Remove the default toggling behavior of minor modes when called from elisp
rather than interactively. This a trivial one-liner in easy-mode.el.
+
** Create a category of errors called `user-error' for errors which are
typically due to pilot errors and should thus be in debug-ignored-errors.
@@ -313,8 +322,12 @@ typically due to pilot errors and should thus be in debug-ignored-errors.
the whole menu bar. In the mean time, it should process other messages.
** Get some major packages installed: W3 (development version needs
- significant work), PSGML. Check the assignments file for other
- packages which might go in and have been missed.
+ significant work), PSGML, nXML [Mark Hershberger is looking at this
+ http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg01699.html],
+ _possibly_ Cedet and ECB.
+ http://lists.gnu.org/archive/html/emacs-devel/2007-05/msg01493.html
+ Check the assignments file for other packages which might go in and
+ have been missed.
** Make keymaps a first-class Lisp object (this means a rewrite of
keymap.c). What should it do apart from being opaque ?
@@ -334,9 +347,6 @@ typically due to pilot errors and should thus be in debug-ignored-errors.
** Highlight rectangles (`mouse-track-rectangle-p' in XEmacs). Already in CUA,
but it's a valuable feature worth making more general.
-** Support simultaneous tty and X frames. [See the multi-tty branch of Emacs
- at http://lorentey.hu/project/emacs.]
-
** Provide MIME support for Rmail using the Gnus MIME library. [Maybe
not now feasible, given Gnus maintenance decisions. fx looked at
this and can say where some of the problems are.]
@@ -359,6 +369,7 @@ typically due to pilot errors and should thus be in debug-ignored-errors.
** Add a --pristine startup flag which does -q --no-site-file plus
ignoring X resources (Doze equivalents?) and most of the
environment. What should not be ignored needs consideration.
+ [Do the existing -Q and -D cover this, or is more needed?]
** Improve the GC (generational, incremental). (We may be able to use
the Boehm collector.) [See the Boehm-GC branch in CVS for work on
@@ -373,20 +384,9 @@ typically due to pilot errors and should thus be in debug-ignored-errors.
** Provide an optional feature which computes a scroll bar slider's
size and its position from lines instead of characters.
-** Add support for SVG (Scalable Vector Graphics) rendering to
- Emacs.
-
** Allow unknown image types to be rendered via an external program
- converting them to, say, PBM (in the same way as PostScript?).
-
-** Display images with alpha channels, such as png, with the current
-background color of whatever frame it is displayed in. Currently, we
-use the default background color if specified in the png file, or, if
-that is unspecified, the background color of the frame in which the
-image was first created. Ideally, the image should display the
-background color of whichever frame it is being displayed in. The
-main complication is that this will require the loading of a new image
-object for each different background color.
+ converting them to, say, PBM (in the same way as PostScript?). [does
+ doc-view.el do this, or could it be extended to do this?]
** Allow displaying an X window from an external program in a buffer,
e.g. to render graphics from Java applets. [gerd and/or wmperry
@@ -546,11 +546,20 @@ but which can also be used as a modifier).
See thread
<http://lists.gnu.org/archive/html/emacs-pretest-bug/2006-11/msg00060.html>
+** Possibly add a "close" button to the modeline.
+ The idea is to add an "X" of some kind, that when clicked deletes
+ the window associated with that modeline.
+ http://lists.gnu.org/archive/html/emacs-devel/2007-09/msg02416.html
+
* Internal changes
** Cleanup all the GC_ mark bit stuff -- there is no longer any distinction
since the mark bit is no longer stored in the Lisp_Object itself.
+** Refine the `predicate' arg to read-file-name.
+ Currently, it mixes up the predicate to apply when doing completion and the
+ one to use when terminating the selection.
+
** Merge ibuffer.el and buff-menu.el.
More specifically do what's needed to make ibuffer.el the default,
or just an extension of buff-menu.el.
@@ -592,6 +601,34 @@ but which can also be used as a modifier).
* Other known bugs:
+** `make-frame' forgets unhandled parameters, at least for X11 frames.
+** The \\{...} keymap dump output does not correctly remove shadowed entries:
+From: "Drew Adams" <drew.adams@oracle.com>
+
+(define-key minibuffer-local-map [(control ?=)] 'foo)
+(define-key minibuffer-local-completion-map [(control ?=)] 'foo)
+
+(defun toto () "\\{minibuffer-local-completion-map}" 4)
+
+C-h f toto shows a duplicate entry for C-=:
+
+toto is a Lisp function.
+(toto)
+
+key binding
+- --- -------
+
+C-g abort-recursive-edit
+TAB minibuffer-complete
+C-j exit-minibuffer
+RET exit-minibuffer
+ESC Prefix Command
+SPC minibuffer-complete-word
+? minibuffer-completion-help
+C-= foo
+C-= foo
+...
+
** a two-char comment-starter whose two chars are symbol constituents will
not be noticed if it appears within a word.
diff --git a/etc/calccard.ps b/etc/calccard.ps
deleted file mode 100644
index 909f6ba8712..00000000000
--- a/etc/calccard.ps
+++ /dev/null
@@ -1,3023 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: calccard.dvi
-%%Pages: 2
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 612 792
-%%DocumentFonts: CMBX10 CMR8 CMTT8 CMBX8 CMR6 CMSY6 CMTI8 CMMI8 CMSY8
-%%+ CMMI5 CMR5 CMMI7
-%%DocumentPaperSizes: Letter
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t letter -t landscape calccard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.03.22:0020
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 23 /nu put
-dup 98 /b put
-dup 120 /x put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
-B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
-DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
-4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
-FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
-76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
-123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
-012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
-A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
-44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
-4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
-01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
-D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
-914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
-261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
-24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
-A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
-9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
-889787CDC7AA8BEF7021B3C18A0A61A68CCEA80153A2ED18FBA2F0981555076F
-438A98A27C94C5FFA61BDC75F01323D5ED5AB372A68CE1054D1C05BDE6E0C5E8
-AEA6C294759EE247A2F6CCD464DAFC4CD5878535858B8D3F80B4F78A302BD80E
-C5293FED6A56508D32B3747EE6CDD617CF77C622E8DE6D64A519675BEB5BC555
-3D50F9CCFE16B80580BAC054E293AE396EBD749C4FC882AD2A1EFE6504769C3B
-DDFAD663FB3C0476E438F0A6D3610F20A7C835F2E7C6824BE6E3DE56A3A5B93C
-3611FFFBCFFA63681B883A53ADA3B41087EE3C6DDBCA98DC76CEF39A4757DCA6
-782B6979F61E33E5A9559F4E97B036BBAD4B7AFEB53F37FB5A3C34CFDAD18FA6
-816B65BA7D8F2A97FEFEA014681F8B55BB0D57429A9E30EA8E3A648C10E8FB58
-FC8179AF6BFA4240C36A778B7EE2E0F556A7BA51342100B3242ED3A2FBCB490D
-B4E83129529B29F8281CA8C3AF2BB368EDE5C0D8267650A13078DE2D6039AE2D
-F9A6A9F5C1AD38795DC2EF91798111497FDAF5539E9A7E4A94A82EE25D4CAA52
-5C2CD05E033030FCB1D65A755EFF702C0E071453F0D00052D737575F724D2520
-3EC12D1307B52256B2B3DB604222CDA9496D77FC457BFB0BFEC9086C254E2DFD
-D2D907405D677818CA833C34F5DE082259632A61D0BC34A35776939FF7DF1D03
-424B70C8DCA50C39781EB6B5F7AD0ABB79428B15A4B350A50CE8001F3C94A443
-50B3C6B00EBA90FB94F38F0DB08238969380E2F189513ED4D517CD21EA5A353A
-629C19EF6A18D47E5F4F2198B4960E814D62D465593CEA3146202B64E59A79C8
-05E114C42B62152A4233405B8B92F343E5FD773E05402784638A53361363F87B
-FCAB428B78E5959C776529F9CFC68488963ED0E452A07A89C3068865E47579C1
-0CDF10E04DE89A497066042F5982F66C97BD46E88F37B77404FFFC8F54C1742B
-3DFC2C939C752F4D4DF8812BC9BDC7989F69C38F30FD3BAA08EFCC363106D02E
-5D53E37C8208856916C560D963085AF3D2337A722A5D3ADA6A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR5
-%!PS-AdobeFont-1.1: CMR5 1.00B
-%%CreationDate: 1992 Feb 19 19:55:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR5) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR5 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-readonly def
-/FontBBox{-341 -250 1304 965}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA1F9B0FF4CFF25B8E64D0747A3
-7CAD14E0DBA3E3CA95F10F24B7D5D75451845F1FB7221D7794A860756CFBB3E7
-704A52A22448C34812C3DBEDD41892577AABA7D555E9298C1A0F7DA638078167
-F56E29672683C51CF1C003764A8E7AD9D8ADE77B4983F56FE2D12723AAD8BF36
-682CFBB71B1D12210144D39DD841A971F71DB82AC6CD815987CDCF29ABC3CC96
-5EEBD5D661F452C6E0C74F9ED8D0C5B3755551A172E0FE31EA02344176E32666
-14B6853A1C303A5E818C2E455A6CF8FC9A66DC6E279101D61C523BD9DB8EB82F
-EAF4D7FDF6372383C0794C4568D079648689A199D4B65BA646CF95B7647E4BEC
-83856C27A8EF177B3A686EDA6354FE9573E123C12EC4BA56A7E8BFB8F9B75147
-9DD79A743968F36F7D0D479FA610F0816E6267E5CE327686A5485AB72201525C
-FB3B7CA10E1BF26E44C24E1696CB089CB0055BD692C89B237CF269F77A31DC81
-0F4B75C8400ABCFDCEC6443CD0E81871CD71AA3064ABDE882C4C52322C27FA8B
-41C689F827FB0F8AAF8022CF3C1F41C0B45601190C1328831857CBF9B1E7D1AA
-246117E56D6B7938488055F4E63E2A1C8D57C17D213729C68349FEC2C3466F41
-171E00413D39DF1F67BC15912F30775AFDF7FB3312587E20A68CF77AD3906040
-842D63C45E19278622DD228C18ABDD024DD9613CDC0B109095DB0ADC3A3C0CB5
-AB597D490189EA81239E39202CBC7A829EB9B313A8F962F7879D374ADF529BD0
-5533EF977142F647AD2F5975BA7E340419116099B19ACCCC37C551233C89EBC5
-0CEFDB2C5FA1AE7F2728AC2CCFFA1F2472A06712CBE05C928995346093DE83ED
-188D198805235ABEC2F45269730B3D746B5B5B9316CA61E980C8B8C8EED4303C
-DD100B858D5D8293BB270CF467DC645518EEBCDC91AB2BC47DFAAA8E519B913C
-ACB750FD58E9941AF0446768FD05F673D206B07A7F7D2D248B36DD44078DFAEF
-0AAA8D4E9541E36C7B8CEEED4231A02AC2575EEB369EDB7AB5302C0E719240FC
-AB8FC835EA79D4B20831ABF6F9C0007573025336909FF1ABA4339A8CE134F6F8
-2E1F6E5CBB5CDC6CB9385EE380CF8AF0989A2D85A78D2D5DA25D49B2F640DAD7
-956F1D4DF564EEB09188FEFFB93CB2F3C13DB32292C2402DE295055971798A1E
-BC7C45BD09151FFE7CAA7F939B47CA00A11F417E55E2916EA310C5C274BC3B80
-4D28F9933D45E69BF4D5F81D80DF4D566D831939F835A0B60D3BED874B0FE6C4
-691639AACB59051D33FEEF11957C7C8F26C48A77CEA1A9116BC53CA7B745D4BB
-16EF2AA24E3C7F0136A560569A49970D0274310BB8491956B32706E8A0EC51C8
-29A3CECECD30B23E774CB0C2818CEDBE85AEE58899984A5A882831A81E8252E2
-493516FD70FB25EB44943E414450332048CAF2642F49FD179F0965352FF3D19D
-68F628DA4C9B5ABF24517D091ECB96691A52741F0F10B74C72A9B2D47E38782B
-DD35C061D1F9EB5365C464E547D6DC36B53506D69C2B1915F92DF8F86C00EC75
-DF65AC6DBC7E4C6F5A64DC3337CA547E37A96CEDE7C797E1734752D5C9C1B0B2
-73471B3C18E574C990AEA0684BF079F466D5BA7F2285692780712882126C366A
-D76D3F9852764956AE8F51A3AC3F7B6BBDA243C25610DB3D1724F888FE91CE90
-5AE5B02A3D84A401106056DEA5331A42DE679894BEF76490B03FA454AB5D7651
-4FCC138B3B45E189473A227E75249897B70DF152D226816A8A4F096F0761023B
-E3E255D77CDAF058287AA478A01420903BB0AE152EED2B460C02BA1652E533B1
-0A8B40A28076E2E8A5F8CF74C13564C222FFD1149DC3B7A8DCC6D5781255B656
-50B17794F6920CE29034326B5D7A4FA9A53BC8
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI5
-%!PS-AdobeFont-1.1: CMMI5 1.100
-%%CreationDate: 1996 Aug 02 08:21:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI5) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI5 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-dup 78 /N put
-dup 110 /n put
-readonly def
-/FontBBox{37 -250 1349 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA06DA87FC7163A5A2A756A598FAB07633
-89DE8BB201D5DB4627484A80A431B6AFDBBBF23D4157D4AFE17E6B1C853DD417
-25F84CD55402AB88AB7EEFDEDBF2C2C731BD25567C53B474CCF739188A930039
-098A197F9C4BE7594D79442B2C8A67447DE44698321145D7689B91EF235EA80E
-B600AA8E238064F154284096C4C2554EFE8DDF13AFF8D3CE30E0999375C0FEE6
-F992DEA5FC3897E2CC8B7A90238E61E41622DE80F438DD994C73275CC52249D9
-F6686F87F394FB7BB668138B210BEC9E46415A1B58C990B81E7D7DD301143517
-4C2A259D2A0A1E200F8101469C10D7D537B0D4D39296A9AB3F132DA9A3B459B0
-F850E2B3A03BDCB35AEF82285D19C38F474FB414F8EC971B994D1C7DD753B271
-2B71549DF497C665DF0F266988209D9EB616E4D9BA229FF984E7A886DB01FD21
-48ED2E4859FD6416C2CE52537464EA884C8C9C2D1083E2B83BE4B766474C23B6
-6E8EC5003200AB10514BB44D14CA700416AB6B2683E80862E7D5B49A05526A32
-554BB23AB8B0824BBA198E3825CE82380CC0FECF46651E3E5D77F09465E73164
-20342822F29572BC7F73F2C3BF95ED3BB6FDEADC20C6AC866C4F2C679594D7E8
-8D944704A3C5D771DC39503BECAB89F34D8CDB8FDB91AFE21F3F0260D05E90C5
-73E2C13DFA022C4522E5918EE25038A0498FBB530DA33B0AE238B1C6ED03FC04
-2BFED8236E07820C5BAB411EAE1B31D93A2FA7C374B1725FEC359ABCB88E2C89
-214529A263D795AACB0B95A3AB2F4E08EF350C282CE521716DBB06E5B8291B3F
-5D4ACA230FA192F64BC902A4C8842C0F916F92FBD002ADD408BF0401D0284FBB
-F05D4C6DB631420747CC902C5E1617E6573612FB26C8378DF41FFB5048D3CF06
-4893DBA48EF4B043D760F60C75712169D16C83EE020C45369E443E853E1809DD
-F395B812067D6FDBD26111B34F42C21036AF952D0D767FD17F6959D9FDD46005
-D64FFF54772B50BB9B173AE79702981F58F9F235C591F476A31852174DF0619C
-A470359153DC32610E782B204E7945515464DACE9099B81EEECC7EBD4B5126AF
-C3FD9DDFB329AF1C95C41FA4A5F6958869509A23BD7210386329771FA46FF926
-0E54AC35106253EE140449425A8670E1F92B178A02A58EB57540F4BD8110E548
-BB584EA6D625C5F5FE0124A98E49915F1A1B95D2125874360EED1C4379FEF3C6
-90E5780C20309F11F2F23FAD635C44BA030B39EFF083A3ECCDD2641DCA8AF5D3
-38B381954F72A516C2992AB4AE55E526A339099A7987D3096D86A20C0C13B9B1
-24F30A9B85978E703692E1F9B073F8AFC96ECA67E468372610E890CE34E9D471
-9D65EE3FF19481FB87AE35BD326C4AC88603AF098F9D58953261B911FE2B16E8
-9999C38D1A78EC6F031309982FEC0DD2A5015B74463617AE3CEC19D1BF77CC6A
-EDB30A710468005EABEDD2D9B05FE4BF4C63515C40B78BC206592CCC455ACED9
-07E50599C932CECC81FB18AA65055072B0B6184D2FFCD31E65471540C120EA7E
-4FB934BD4B0663E5C6CE2FBE18B83D81C2DBF685D2A95397BE0D0425833678C2
-B141E0FAC208A4C6D0B295756CEA58D69C446923E055DFBF3695CB0959AD2890
-F0A5E6B4CCA57E4795263597F433EF4A5E8E207B874615412182E2FA8CA78656
-5DCC5CC118372E249739582EF5DD9CA6CEFA358DE5F15755ED4F3CF44569758E
-CBE0F7F6897804EE5C465322C84A6D0EA33E1BD133481530C210560D5B2524A2
-8BCD4A3BDC0EB134A63E4F7DD2D4DA96FDB44A99029FDDD9B991C835504DD0DA
-E64B5598613B8BBA88FACD7E16D912C3366AEE9726E7B2619DDFA1D5275D109C
-B69E3FC92E49D489A37634FDB365A2B33798F20EC997F963A10C05B73E0FE97F
-95A81BA363FEFB5D3EDF09588079DF48984FC16BFFF3DAA0ED550A1CBE7ADB5F
-51C7F0D7D04A2AEDB9EED342EDBF7EED1C58002E50E89CE742A3DEEB08C24EA6
-BC9A66D498BD9036A5E96F5E9E0950143126346F822F77C32D32917CA751F5BF
-DE4741BB7FDEF9FB7199D860CDC6903E007DF20B1A9D673AA5EB8AADB123DE72
-402B2276FB5E59151FF71D38F38BD9D9C696F2170E82C9A2C310FA942EC46003
-4415330CEE5C5F8A8D87443B93369BB9D4FF5075628642BBDB065F8B6853E457
-088DFD37CC1CFF3A9501109F59C272086DB6D3007246790384269A72F9EEA6DE
-B3157108CAD26FC506E205
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 36 /arrowboth put
-dup 112 /radical put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E933025375FFCDD9E2FD073678A57A333F9
-6BDA68191ED103DB904FC6A75017A9939B1F14A711BC0B140F6C4E6C217EEADC
-2B649171318049FC272C351B1417B517204D5DBE34FA6D6B93E1E6086F880CF6
-401E7F67B5A91AD4822EF4FFFBB780FA7726A979DBF3D8090BA7A152BF6147C3
-305E881CE02C72CCEEDE981A648CB2B6A43EAA4607653DD10347588C35177BAA
-40C11CA85C53FE8A2D9375F34AFED36C4CE87C246DE80DDD7DA3825A922404DC
-1E575B067D1BA35BD5E3B9CC3810A43FCC37AD3497AF461F306035B1E3BAC88C
-F1B835F32A18D26048B85DDDE63DF7AE7FD39538FA2CA3E301F0C4D5BF57E1A3
-798BCAFE4668EB7C828011C278CEF98E8826E2A0D51E001715851E9AB50BC439
-81D293BA457D8DC8D83EF78B6284B7653DA6CE82079E3B7C3E7513AFA07DD5E3
-6BBD896AD598D86F7A4FE82A0EF4BD144A88653589DA216250327E585CB19851
-FDC2D27B6C0AD9CDAE1EFA9287349EADBC7B9155916A51E298B64BCB8A84F11C
-0EA1DABC548987168D7A50B14986B8B70EAD2C6DA8E8ABDE0E9CDFEE75FEF4F2
-370F8EADDFA09E6BCF506B5808789727DDD32EA8CA892D272D94B6D483676604
-9FB540DB8F589F61A1E0986F99C7002792C14B1D2390B35F89DA1AED6CE0E368
-8F603E964DC18BEC7F53B4180196D329B71F6DFFFDCCCD9131F066A4A0FED1DF
-629F4ABFC0AB88D40FEF72969D23ED640E9A67839BB3E38C450E836294EA4EB9
-14FA52FE9505A78001AA511349393DA53A49995DD8190B63588614CAF3E44F18
-1A5151C721
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 18 /theta put
-dup 25 /pi put
-dup 58 /period put
-dup 61 /slash put
-dup 74 /J put
-dup 78 /N put
-dup 83 /S put
-dup 89 /Y put
-dup 110 /n put
-dup 120 /x put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124F46B6C91C4C417758C58CAD924C258EBDB1D810FB6A2E8009A2BD90
-6AE90F8F5623FC796FEFA4842B0BCA73541656693422E9F53968A449C8AA6F4B
-28D9E6F1BB1E92EA0AAC25AFE600B1B47E83B25A46BEFE8D6515195DDAD39FD6
-3ACC9B9ED65A3035081ED4B9C7803DB8DA2A064087FAB51C58C6763F377519C6
-EA2D4E59D8AB1C400AC1D697165E681589824531EA8CF02C917D94FCB2C9B0A9
-413F91ACCAC50B2A5DEEB9EE04CA335F38F0F01176714ED8F6C52DD1321A5FC5
-662EAD4D80DFE843123CC1008AFD571C97D403139C7C89FC84D055BA2AA99EB3
-80830A65D835FCCA9D4BAF899AFDF9C4244F120B825EB86736C6DE5CCE52BAC7
-9C7309418EA626892AA42AA28497201B8BBE5E1348FD5C423ADE8794A78B6110
-654B7BC9D58D74D81E48D4F2AFD6072915B561022658B3474A6945271379237C
-096C1929398558D6E15656E5093CB366CE4B04D1E0405BD8558913F831349489
-ECD2D874766075CEC39BCCC8F8EDE84F47FFB5D45DA3A114A1C69E3AA6159F22
-861AFA83C0563C74D35D0EA1B1631E1A16D196D871FE7586AB2AC449B3FAFA26
-4A2E199F64277A9A926752F102A86394CE7D471F8597D8C731CE3FED1C940C99
-1C11E3FA564A0EFA0298C7D6F207007D587018C6BEAAEEBEC266D83D5429ACD0
-192436844690DDCD114700A77B85BB032D4E3C6A37BE3307CAC6E19D3B1EDFD8
-21E8338AF48E049D625ECEA7DB51980934AFDD5495CFCC4463F48DC3D4EC3941
-3A266C310A2B4C97CDA51716C3AC9602D717E08AD6151B4D6C9E0D22448E792A
-9A52365436F084C0E507E40052592E267262B22DB79F0D069EF4621BD645D0DD
-08656B8239C2BDB3832C3B0E9A8F4E74FBE12428C57653889FDE7BD1F1510FE4
-75DFE70D7090756616034EDAC8879F6204E4756A30724B334380C692D9DA3EC5
-6A7586FBAC13AC379BD8134EA674185DC83E21DC7B0BF8DE714C54DC7DC6F367
-777A2F3C542E8DAE074EBF3948A06453333032EDC1EE98EF0D32CCE00F6BB461
-188204A8FCDC91D86695EFACC627E56AB32A62AF25BD45C0EF4C03DA1F40A74A
-A5160051645EE711AAE433E764EA14CC5A678D4D97643DCE43E86BDC8BD58491
-800EF47FF8AE61000B90F04607EE27765F8A80151CB04E2C6099ABE447545625
-37A10AE79086A08279B5051BADDEF142F8DF36A28BCB26F8C9FEED905D759178
-8BB5B7D5B393733416E81A5634A15CB75BB900FBAEADE2E71BB3DFF17CE678C5
-F08094E27D95CCFF0554206F19E96B5BAC3386FD434DB4B566551CC67B7C35EB
-1A68B3A4682F1F0ABD38CBB419FF446496533B36C4C9E0B47F205D8963A62A14
-CAAB539A2D8AFCCAB3DE0DF3974BF17C4D7BDAE760FF423806E20B43FFC6ACBC
-921A9FB6D7514CD24F8ACB789624EA1CE5EBECE287E4733CFDEAF126D0C43338
-64B00024C360A8A80EE1BE9AE26E251F305BCADA3E644494FB3D93428CDF4ED1
-92DA368E55B83A3BB6314AE2430B1151B3CC93DBA2E56926DE43060252C5322E
-98BB26D0298E7E3A762EC1B2C848E0A1B6D1F23A552607E58DD6F0B35F448EDC
-D814DBE2C6BFE3D76AB1E8E7F2486040EDDD3CDB223293B69D651C0850166405
-08DD030940B6D3573BD58DA53BBE62AA9DCF0CC02769B50DB360C42FD22AB3C1
-9EBC60CFC6511262974528935588E0C9BBDC1887DF19321E245678C69775B84E
-04BFD554EB01A1E0D943E788D71694613407805EBBF461C23519F52F2E0E12EA
-6BCC0C3FD1B596C44E4F314D036CA4DFE2679EA7D403409067521F57C30FE432
-D85AF3435492564AE6404C96CC43288E5882C3993F1440072ECD02827CAB5F4F
-5B2B6CDF6F59F76A1DDE381EF7643A201C8A70AC866CCB0ABEFC712B4F27D2ED
-F91CF0041A43FF66B96058EBDCD2B132969F6E6ED06683AC2DC793998843628D
-4223F072D482AD046CBCCC1809785A8FA42A607C1B2EA7922D5DFF5CD99D4075
-0D6A5D5F48E98B52D14E913DA5728233EEC3214E5EF5C8FEFBC54108D60D36D1
-BDC0BF4A9CC693CD88357651F0ECEC3BB872DE0DF4A4BC8DCE360903CA179374
-E2ED3ADABA005FAB69E77118954182C6C8F1BEB74DB879A340018EB81D42319B
-1FD96A93D72CB6EFE7161921721DB5486E9ED3434C714411BD328D28CEFE97A6
-AB6D2843F3FD4C74567B91117C7FA143265F6167846AF7DB3E3A321695AABB7D
-65F5453C851AA8E6BF253AE40128C21CDE7955C3F486807035802D742E7F3AFC
-40E9C6A6B243188189802556A1564551F353D23CB0FB5E4C405BB36178212DC7
-6DBA01BC259DA1B48F7EBB08399BEC05A8AC4938808A2BA6954B7F5C5B366532
-678B2273DCCE53166AC0CA031C312ABC9099C3173242283755119231D25A185F
-056278917528CB8B6303D5CF041D0E7E904166712736E9E254AABD4F3271F32C
-E7F93703FD6B111E42968AC798FFE7B6B389FBCEAF9E051419AD277E35A327FD
-8EB9C53887300F45F6D23A30032BEFFAFF9DB8D06951E3E133C7F6B00D0D31DB
-4C1D286FFEC2CBBD6243D601EB69DD4234EE17592BB904869922E7D8F520F3E9
-C8099EF049695B59CEF2D6075406562CCB62C62A59B194C43CDBE85B06DD5E60
-05AC2F1D6D88A4AF20008FD5CF1B945832F1AB69F1E3E13859FAE25DF2A145E5
-13F8787A1C9020CD1AE992B50157C9D53D088EFE6D80C73B76B46698700980BA
-0A7D9BEEA209F19B8456B9C8018B4C89CDE830876B427AD72CD03E46EEE8CE90
-0D391A210DF379E9E9C308DE7247F178C4C4E0DE1F5008ED084B88C0615A972C
-045D560F7151CC4E0E5ABA7EF66935716EDF47CC53B8351ACC5B849FCD2A266B
-3F2CE9A44D8D81937E3D3D1395E7B91792DE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 44 /comma put
-dup 97 /a put
-dup 98 /b put
-dup 101 /e put
-dup 107 /k put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
-BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
-09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
-3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
-E8929A4BBA0EC700D5662AAD9EB38047C6C7C63EB3FA153A65FFC947D1DAFA83
-BFA135660F82D631A4E919E5A959BE09BAADC19CA3FBCC7A84ED9BCD27172C4B
-29A7D3BE46C7221AA0131972D052343CCA651DB77EF13044FEEA9FC934DBE128
-7EB00CB51AE0E4441228A53E50A5C7A8C98C01628CBDEABC4A973E0A21408D03
-5F0E66B97FD2BA0E2107372D2102CD08F341916EED50DF42135BEAF2DD2226DE
-0CC7936C708E215AF8A1354E994063247A4D5040F40C7AC301F1F89D07A5E9D2
-DDF56B83593F22CE3FF6EB65A22F0F3A11F47BC093A27A637F3F83986236599C
-A161E3BB0636EEAEB4A002E16363E156951690BF3E6A00116C43DD0493B5AD6F
-A569D3B63341BC24614267B3454B5CC5297D9EC9F969CF54456F661B0ECC50DD
-43D0BB30986ADAC6629DCA948F389CA9114C8333C13F28B7AA785A9E1DF41749
-B69E2FF05855CDC40B1AC4498E7DE23147B26A1BED166BA7F1101E3B5AD2ACFD
-83877B963D0DB80EFFDC278C02E52E4BC214A7A549BC20865ED95AA8BF888B15
-764AAD0FC8C8F1002072B433EF46E51831FFAE0152802ABA6E86CBDEAE55BA50
-F48728D5D95D315F5A88246B19C1A2846A55CF2C5A247766DA80DF7939B21864
-70F221553896F057CE390E77AB3854EFFBBAB778D74C82E3C61C63A4BA1A17EC
-33908FDFB3F91A6F620A68089C0CE4217EDE3BD3CF4C4E1720AC839AB92FAFAE
-43C49886A2B1D90A77138CB6E394EEB943F00A92349718AE1987FA6E3EB3AA89
-0EA2E0A51096FC482DA0C68D6EB78022E301CBE1B5C7A4E78EC3C153CC77FA9C
-155BF03AF69C99132211A89CBF78448161E7D567D57721D5FCC8C002206A218B
-35F1EC15663C21716A078C33881A7EB30030768E6E4DD9B2CDD1B119A73C0255
-D7D2D749C3DE95CDE540641584C891EB9630DF28BB782B8F964D03F65F657309
-E0DC9434B96F1D188ED82434CFB10172F660F5EF1EA0CB3D49649B0C6800313A
-EF193D735F50FC19D21D295C2CCEFABD95F137FB36BD67EBBFC1AF534856A6C3
-44E719CB5250F9EF35C6523DF0C1DCAFB39BADF9B3142C0D09191FCC346863F8
-6725440E6AEBBDD52B363FEABCB8BC15B7E581E80EDC64DB594B63903EFCBA88
-5DD997BB54B3FEF1235E9C7C8D53B0AC9A9C417B42F0932843484BE6074AAE51
-714378B5FFF41C8D4714AA25F1933695E417B078E4EC77F17E6530BC54C62FE3
-649380BA2EEE764C061FFD4AF82946FFAAD342851F29F2207E94CB59D2B1EF1F
-F0E3FF4D8E64A0A408277D33DF9FED4B6DC62FA631259A4B0F13E856E0AB64E1
-C58CB91345F358EFF0D0217D2B71BC3173FFD00E092236401C0A10534382BCF5
-528ACD904D866A22DE5E3C5FD7A3139F9C8606FFA98CB6E89F0CCFE2A127E4F7
-8F1FFB03B1FEB89B0EE50F632888F0FB192A4100D8B2F395058DAA9CC99ABA29
-7F7600C0E7FADA0ADEE9ED8A74EDE2F4D4B0606589D664DE3FC8F3EAAB6EE833
-D2834AE87F49A5BA18312131188A52FF8AA2F985948B2C3F36DD2F7ABFC950C0
-501B8E73F4301A893410466569A5588C0E0FE801092E05B8D173421C4ADA7312
-E11BEA346D7C9A5E00C1C259D531C1AD3C7260B64F6543B5514E7F058DC3F160
-F64C4FB4B7AE8FC9CCA3BD8DE1E3150E76FBCC08729731C69FAF9BCF7777BB10
-903F51FA8B5FD0545D4A5BA7A6A93578290B1CE0C030BEF2A1985BE2393CB9B8
-655F29C05FC89DBEA20E29D6AE6DBA0170F64980B1CDA16E3E10E3491D9032CF
-3B8AFA5E7C01264FF3F32FF00AE1EC1F92A66C5473C4767F3CA06BB75EE9161F
-7834ECD40E65E94E8DC6D37F01CD3BF3D57652B74BB5ADC42B1EDF6BE77485EF
-091A8D21929EE1B54B009DBB07444C149C25DE1CDEB6293033174618E3C4CD80
-3A70BBCC12972C94B9E127D7C89C9BB8A972C653609C5C1446BB3593CFDA4B2B
-F0AA89FE5DFB0E11247433EFAAAB5B7303CD567AADBDD4C9157409E25E36EB0E
-0F2088E6C15FD2AB71BB3E809F30800B57B4F713E107B552DDBF215DA99B7997
-58E4ADEF7CF01B30CE0A9EE2A0BA5764DF5DB7597755C3B7F4C5AC6B965A6E2F
-7923B5F2A032051784275158C82D7902866ECDA880FC2E3F6E481E3AFD194118
-633356A19C888C5F6357AA20B270354E5BA31BCF5EA568E099153DB868652D0E
-47811C6DEEC8AF046C0111BFFFC4994A078A939E5053D3AC843ADC3023FA2A55
-1350FFF63FE52A254F1683FBD74930CA27E9BA39D77C54149375A49914DC93C1
-FBE695C5E7B804F2D4EDEB13505830E2F5202AA480A4E06A87882E592B7F2A79
-0BBE99E261AD0DEA9655429956F119DCD49C4F704BC72FAB08D701919E40F5A6
-AC1559A0A2C6D0FB2B286CE765EB1985F935FAB9CF149E226460E2D60FBB8FE8
-1666FEC118634AD4FDC84A24C6985E3F3E95C6C46B14FBE346420289B45889F7
-54903FDB3960FB61C192096D69FC1DA995F7536F2C0FE71A9236D5A33018EBBB
-7035AC65BA94DA1E6A3B0E5676613BBB6D0D8297A2755E4B247D4165E9134776
-92480F4D6168219FA1EF23770CA695348BD7B398943ECBA0142FA8111F5E827B
-0A91493B4E86FBAD483B2569C3163CEAE6ECCECB0EFE95E0CA539E46CC3BA1BE
-28632916408D8C0A7CCAB17A693239DC6C3DAA72F40F15A4A68B9CE01CB6B12F
-CBA62B4CCD3BE7A72BBD07748261E2B9243B20FF4811BFC2345DF34AFE6C05BF
-3BF0FDFA22A5069D2C962F01D5ACD9B5B6F7CE9F8EB1E6B7E84D184388A4F416
-4261304509B4264DCBD75A169FE2750637304294525FFDE2F5D714841318FE52
-C6B1FD93BCE7D330945DBB6CE6C4F5929C5A363105F02F32F8F80D2DDEE4A91C
-C6F97AD7F6AB16AB3D8B881AEDA72DDD5C411D4BB943BA4CBFE5B5F48E4A24F8
-DB57CDB38313F9E320B71A64E2D72CAA85CC9ADB26C6F17ECF48B0C42A24D142
-4C09BE91F0280C92C3025C5406A9B6E222563CB0663409600259A6DE9403FADB
-C7D1EE3D62237ABC6B58F9DAC758B16D45B47C5FEB2E59A2E1B4720F02559206
-C18D4CB2E1A4B24BAFC05D9B0884B00C43F6EA44D4B159C0BA1512CE4756A11F
-0FD43FE149EB71C876242AADDC62D95F4789FCE5EA35D7388FF5D90E262DA32A
-A15C6A3C793359E0DD5ADDC38498C65AC9E4B48B79064F9AB492CA3A3D1F87CA
-1A41832D893283C732C26F2115953532EFEF71CE7BDB2E2DBA05FC85F74367F3
-2F404EC693A7CE333A052023676171ABD94203BE23F119473BE75CBDF841F955
-8837C65363AC9EBBAC7B773C7F46C0C8CFBD63BD1C5E08E2CD0615B0A02C159E
-14676DD713B6F931C5DA955790AC480D415292B1F424C0D35D9366954AC8EC38
-CC37A1919323B349A0C9D2A52DD4768CE83D1177347B86CA50E8FD7220332BDE
-31E40563A5BBDD26420824D821F433A552AD130E5908A57877D32FC3A0705133
-F40D5249F3916F43C7788EF01063C9A836938682FD7BDC4EF8FD6F5D455F6367
-637B30DC5CEA969A469B9FC3843177B59BBB08DDC19408DCC986CFC6AFA0713C
-5444114E7C74A9B621ACD6370E90B175FE267D60ACD19E437E7377128DD97765
-18036E7D5613AB173C6E8D102E034296B7F9F82DC4BEF5B2EF01C17D0A9DA369
-8B328A70A57838D8E02486DC19E857466E76DEAED1E6962D20E8B3F6B9E047E8
-F4C9207B0FEE5E03655877451C889B17A12F661FD7E0BA918A64333643E3F21D
-48177082BC3E7ED7274D7C05E42D98BC6E2B562E6045006513DB5E5918A24943
-1C2D6E9FAF5F872B5A4C88EFC84434B9BB836B738AE5A6451CCC50EA17904830
-10684C844600D2E2FC0FBF9D92DA67BE4F82CF1D77C31F420154489A4BBDB3DF
-002A23D9B2F1DE637D33A2D833AF7921EF12FBD2B7401698040A5D9F122AD022
-FB8112617F7A815CDD30AA76275A02FE6B3B1AC6A433F926D8A13D14319DAC0A
-7DA91357BB3C8FEBB2497D443C2CEAB8EC6D9EABDA685868B4C76611137D
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB600BF00E09
-8A98D1D031C430FAFDED5CFE3944C4818C6A0C98FF909FC1FA6F3E7E282BFA41
-4681DB8E2D5D12A2B653E32B01A8A9C9955AE525F963EAF4B07A6D1D08E880AC
-3D77B15077B8882DAB21B262E2EC978310BC07DB953F8C65C9D5D01F35FB5A9C
-B8C57B07209A07E1C0C1B5F1324B128B60D43C223F73DC12DE901CA5AAA63BF1
-2D47B7B0B9D35F25A459484BC917AD0D87779E379F2E5E5677F463D9D4E33B38
-99DF4ED7F1C5B33E0C23064233288FF324E07452C5DD4C46365512B412E6CF46
-DCCCB4EF51A65A8E2AC9A5BC5384F739AB8D4995143C9BD3599696884AF450A9
-0B3A707395DAD474797780AD0A87C8317DDC98871259B09B0038E5CA31E6EB6E
-8FAFD3D294971700EE6CF2D4CABAA8AE2C0965FD3E864037DBE485129CA30BCA
-3DEA01CCF4AC088FC977A4668029EDAC0CFBC69C930546E7B7EA31296D7F8B31
-0DB809DE11C0150DC81247B6259C110EF06F9B3ABC4641940EDF4CE46494AC13
-72C2933FD2B3288BD37E4055F58B0E83FF9BC369A112E9FEA4CDA525E3B92B3E
-932E64E549388DEA2C0B1F29B356A0E216B37B8742916B0AA46AFE2147532AAC
-A54DB16333B9B4B66665314F8028D1DAAA6BF0AA511DDA067041E465100A7824
-D778792F109404C1A5EFE3481C9E20007664E5664A3FFF70BE402C3BC84628F1
-2703294F2514048F2B8CA0BD9EFF679B8EBBC8E49A6909FDB6D9439E5852F7AE
-296746725B1840172ECB51B72B1F2F982740F7EE67F40D96BE2B8C310F98A980
-1116EA8A4D57850E5F87DA60D054A24BBA2831838C211B008BBF8E3683B8D407
-9A3AADB4AD7D0312D560FF2DEDDA60D0A353D797BC831E4A76A234F9AAA123D8
-1BDD68A4EFDAE4338358A616D29309A416B4962EB01F6DECB59E84A5852ACDDE
-BEFF98EAC8D864A4B457A6864A7C7ADD3EFD7B2EDB984A3D14BA84390B06B83C
-550FDEC4A8A1F60B8F47BF810BD636BA945DDA0C1ABEB31C80CC71DEA1DF420B
-D41E4D04512EA018C53422F1722EFBC78123B383C9BBACA7F62C5477BB8579B4
-471922BB21A881AB30840F1A076A3B14E7EFB5A0D04610F1D248B8D6977C7C24
-5C1307D468792CC180A2DDC3AEAAEBD1682951167D9B010A3F31F74A54114C90
-6B7E87AD0D74F6E64C225E4F6C93277084CA01C09DD7B7FA91F5D7FDF9C78C34
-9F40F5CA84E8341093AFF161914663BAD849119F4D56B5C880FBC709A99F89CC
-460183DFA77E9A8817F0488874D68F1E64F690865A6ED2FA92D4B0E08C51F5E7
-95767B6B3C433DF63FC5F8E77057C2B8194BF161C3F8104FD0FA8C4033914C21
-895DAB5D43BE63E461672613B9333FA125D04205FB9EF2708D83DF0D49483E24
-143531AE2C99F7F96F95AAE8E292E1879EBCC408CC102A32CEC3FCE958691227
-5446870CEDF38ECA235F19B62F7D83116DAE464E77EA2EF5F321EEA6E9C9B685
-27845D4BC456DC77767EE49F915496C84A7BDACF424378B835FE20918A443C77
-ECCC030A0FAE50C237C959B721A9D0C7D24370C44FF7A9D94A34B71A85DD2337
-992285241D3B8629FA7242D16BAD511D2B9272C5A7443602F27550B1B2A70AA6
-F4CEBD85DF064737C1E2AA5C36EB632634180A25A1956F3BC63821AD713C82DB
-0697058312975EA659597F32EBA5F46051ED3F988E0365A9DAA35B19501AEE38
-49272F73424FB5F047CD5162CB3732881B19F199893A316EEAF78FB4BE5744AA
-F4C5252E6CD84E9044CDD794B19EE1949B9885E6E9AC8E6674706D7379AADBA0
-FA9CD1AC2B65EB46C7CF6172EB2DD1D69C0FC65C713E294C498D61745264DD06
-F7318C48BE634F2BA385D7B56787D19F16DF126F063FCF3DC69A9FEF888BF976
-7B589EC6F9B39DE8C56BACCDCCD1A1D52ED3341E36E8F2668DB8FECD31F10D9A
-4B4F8335C6FA327925B03E6E6A71CA9FB81033F4912C558BDEB459EC89BE9C2C
-A6B2DB96D88312A694B98E88C9D3629B4ECFD634FF132A87681966B8F06B7BEF
-947B6F2541ABFF793E1B91A0B64FA58CACA849FB88D7C85D77BB822196DC53A3
-8199F860BAA1480557B90C8CBD5DD67D6A30DD39C23F452AAEB7E934D807F385
-0DE44B15EBE4ABEB6745016367A91FC3E0E050A6FF5683651E8631E6660E2E35
-EB7C767FB34623A42C8758DF9375D50C58FD4805036C660714EFF21C38C255CC
-27BB2014C8CAB6E2746416B8A78A0368E142E85E2A49428CC0D8A2B95500A80F
-BA092BFCA8BDBC2AD2A8B64E83029B4D536FE9F6770D1C543D86E12CABB49C6D
-58AFABB1B1E02C92C22090A517B09461BF7E064D1BB07CA52D828A07D73CE346
-7FAB77AE464CDF4A0341CBB8D46EF7B1E65878127ACF3C4050E7621CE10AA85D
-12AB962420A310D9FEC97C02FCF0530E07608053F53894FCF37B15EBCA00F588
-1DB1B19CDACDF2C051230002D43FE9E86A601AF49E472804D2C8EAA63444D989
-0D737720BE0B1412FD1BEDDFF0A1EA21712744D3A91D5D12284243CDEE4D7A7C
-9040DF70FB0BA852292B0FEC83C7DB399F03055A40A0DB35F3525DC5DD2038AD
-8F7D1E3AB50276F41ABF8658968E341C986C00217665F2F6638EBDD4D3224A98
-B8AD49B18F50E8BAB7CFB39C19929169D0071E6DD6BC4F9532CE147E0A9B1D15
-CF2A5D027E3F15976D078DFB4576ADC497B9FD7D4D0861E2D2167BEABDE29944
-8E4864EDBEFFA12C960B05CB8423A21DBE591021518AD674961A5C3B659EDE64
-5132F94690588555722FA36DC1C87F1A7CE36C2C0C92D9F94380E52155819B12
-9A82F6850B3D1DF5857DDF04FBAA8E7F3C78A03EBC190227342602B767AB570E
-7425C3789CE346AD0D05C532BD2DC3B58CA11FBD68D4759FC6D34200808183F8
-1250A3A035D828CBFF49E1B83D96096C450494828DB68B582F8B0D2D0B866F9D
-B0C7C827FA684691D2105F75FE06AC30C5F3B514FD56449B3CDD053F8B354A7B
-95EEEAF2588A8A9474C571F0D0BD12EA502AEC46EE43B03B327139C14127C2AC
-0AC3CB19CE690CC5E935AE785CE4EE134E297F7F04E3FDAABC41B4B35490A9B3
-8CE4CC83F3F72CA97AC623DFEC3D45C3031A37ACD003C8CD57ACD625ACF70EE3
-EDCEFD2B9730D8123F977115348D9D3E46349BADCF7E75D8DDC0BAF86DF73FE0
-07B04EFC1987C9D8D241EA07B44EFB383B2AFC91F1A20138E07FFD12692456B9
-EEEC05A43D237B38F4716CD7137996FCCC48E63986AD96BD427368D86862CACE
-B6F137813C06A354BB62EBBEF37CE46BD396CA1AEF09993743397644B38622F8
-6D5DB5BDD76BED3B419AE6C9B677EF944A20D5522F2041A9EEB75E99858B58CE
-B427A31D429A0B0CFE5F73866E26104D0B2BEE9DFFFEF7C26587D6A0D5B5CC08
-30C8774F3466598DEF96066C0FA9B0A230A0532C4232DC8A9B7B7247B9662D0E
-C5A6DC971D2AD47C2773B5FFE49EEE396CFB1DA57A3320C546B4960D5CD9F7ED
-75F4D17C9473B367642804405DD1FAD0659615C507924B78FAE60BA5A7B99EEC
-0F9D087654A714004ACD50B6E44E10E37C9E385991EBAF31948C37227A0FEB58
-E20C0BF7FD84602BDB266E2B803BE95634060D1F848549A0F6F2FD15159866B6
-A63DEEA883C1BC6D24B86AC3E9BEC1EB493E572D1BA699745C04E59602531EFF
-65D93D9038952D9B074854AAA95A2ECDEA26F553D4C5F130678E0DBD5464116D
-65D0EDF33F7EB44BEC552779AEF1AD05C63DD637D67B80F2EBD640FA9A426A1A
-8686E46DA2ACBFA631C61FD0C2733E48A54E1D9A21A0ED613E984F7C5A30A251
-499E7E8C32B32B87FC49293339F3C8C17C13D8E2D4B801745478E40FB6072CD5
-1C9A87971AD35EECFD005676557EBF98636E9FF76B20142E0C313569ECE880AD
-39F3DE30EA682C0F9154BB625C44CDF49BB1E1E5BB034A99C66D69C6E796BA79
-199EAFCE410381F8C399D25A4D58803B471BEBAB81E5824D93065D08E8C27767
-A58DE48DA943E75C569E251AA5248955C1397F056E87D29EAEA9654CBFA76043
-354D09ECF440C1DE70FF4CE5DF3B512D663FFCD3D134BE0D40A280BBD85F12AD
-135540F81A0903138502DA6F3D53B180DCB122CD380DE8ECB8A035AAD2411478
-4DCF4C526A239612515CABFC6A9477A40ED55D281DA0B173EC427282F0D9877F
-645A669B516F5D11C8583F6182F8FEBDFAD65A9285436E28068A5A93E2679959
-256A43308C0BBA7C74F4251D944D3398F4DDB4A55CBDD9E176B45DF737AEB87A
-D1F04A1D5195395C5E94F0A99040C7199905DCA268F94C4A004F124F091F1D33
-5AA93BA7817282FF102D62D0666BE3C1A40089E63F95229F00A6541141C28756
-2CD1BB8FFD552440E711CC3363873DA613E8EEA046A18B0E01D947532C9E6C1D
-00A57FEE07A076A68BD8E09D709DC91E7FF7E3413164F835E85F867C1CE82374
-2D8BAE743F5B8FAF6F8DDFEA3878DAB6D50DC90D7F473A060F1B80064BF63C9E
-2904B327B6EB57ADE9DDD5C86934C25AC524FD4AF1B0134990EF4E096A1C812B
-50BC766C929C8C7ABAC92278E3CD14BDF3EC5D34F2E0386396B2BF684F73C645
-C8F6F497E291E757B62958011E78D0569722956F963B2F289E1C2B17B193295A
-6218FE1FA85E4D190E6668DF519E3712EA8792A267B112EBD50D89E1EB4DBB8B
-45665552094FEE858C8E227C58CA48615D15A01CD4D84642039D0C0D2BAF0A25
-3E118EB94DA5AB597D1CA6A3B333324F115CBD46BDCD206FDD9DB994F14BA400
-7581089BDA4C3B399E56C693CA35766F45294B228E63ECB4882543E7537416A2
-CF63738DED2D903B0EF0694E025200690266C4D31CC8D869E3B14A58AB816315
-BECBAFEF66ECDB6AD935801AC5B31295E406C9FD4A369E484648C4F6D89422CE
-5BEC41D5398E451FEAB440A62E9D7B5AA459246404D0F84D97E194955D790B2D
-11CF9B6E4146022DE325CFECAD8F025470F0B50D1F2F02B8A61D478E5E34F9F3
-997B60EFD42E92C09FFEB1D4BDFBD782034A76CFD40D1E4F7226E1C0B21C487F
-1347E1D5F6F2981CA2285E64A583C0CFC0012F53B1A88CA5E93F24CBF22098AB
-CA4FCD59B69375795B9303256985C26F8BC52A3BC9B1D34865B43E42E18449DF
-F7B8E9E42FFF3ACFC9CD4E98AD9334B13678624398BE7FDE89F637864B1BEDB5
-A25C2FB2E550E1DB0DD2060643C6D2311BB54C5E237D7F5238095EB214EF4D10
-2A975E98AC47ECC0032AFDA6FBD4772C8C3AEE43BDCA443712A419C1B60EAB0D
-202A73AEB376EF6A03BC0B2C62FA0A27DD54126496175D7DFF4DBE1C97041A41
-1AA935A7FC5B654CFB8CE46E445B007481DA915BBC5114461D2B61E872DB31E3
-7B82DFC72AC041392999B141C212B7B6C3AF7EA0C63F63D1D73CCFB4788C2535
-76D0355E5D9DB5A362EA73650CEC02AF15B26D9B55DA72AAA3BC14C567F6A092
-AE9105929040413FD56C51106312F20511E43AA188CE42D2083243EE686D380B
-5B8BB6639B08724D4C5C089265AED5D09F1B19620D8D692352FCBC288B9D90E7
-70CAC14D57F3A86B5EAA415A8011AAE2281B32AB064D6511466AAA88C661270B
-CCF902CC0591EF6D625EB7736643CF327BD40A3F94343C0D90E73A887A72C026
-3BE758C3DFE9060D82E315F57C0CBA36CE8777E29A9005E6F9D6568FF09B359B
-334878313F551811411A134C58748D712333871B820BBE28F65F95FB6FE2F522
-D6EE608CFA3299EC83444FE205CFAB4CF3826407DE7B6443D3DE3C677FFD3CCB
-1F852CCF3AB98B7D857DA9726889EC08E8A698B48E670CB52F6273E8016DB81A
-E5F08E06F91CFC683DC221020D7F91FE06E6549888B404C475B46AC607A02A2A
-A21965E1C10017C052E8E9B4EB1BF693938768153A4476038D772260842006D3
-8BBF4D90C92D2E3D34E0C097C5FC7EFD8BF1BF7200BA1E61EFB32996F6C7BD31
-3B26C00DFB2D7E084C4CFC5BB2E2E5B9A173D181F34B48ABB5666D021AA0F346
-3D17D3BF3C5FC4C3F273919B9FD9902921C1F10D4A0AEAB410691C37AC780B73
-9031E7B747E6827B839CC42F1CBBA7710BDE1CE7C58736100E5F81F902ACFB99
-2C80649E9BCAFB2D4F93BFC7D6BD340EB4976F3767B1AB2B1384051BBB4DBEFF
-9426A85432A98D1FF9314164C3C5EA91A66AE507B7C6706CF31D4851ADBC5A97
-3ED216318129E53DD1FB34D5FEC8E03208B2A8A74DC7D3738D95AAD5116ABB95
-A0DE4878F723B71F21A42AD1310AB7E73BA529505D31BF65BF52299C8F9CECCF
-EAB79456CD60E72BACC61EF576FFBD349D523B08CCE39502E55D09F4448D360E
-9EFFBFCFC308AE4F50C633948D337D0EE8B2EC723477F5F333A5F1B2B47E268B
-83078337A6FCB8C8AFEB86E175672E1752F20099FD268E69E8507E9CD4D8B50D
-19D7C09B68B763C33009E276E22268BF4F612A3E961079DCB23EC75111C8F34C
-6C9B1EA74E85EEF0C921203217D746627CC972C681FD5BD9B0B7DD6B71A0B6B1
-307E2A291978A3768EF24565E68EABAA4E063D553D81CE21ADBDE02E7BC52970
-78C4863AED3326DFD89C5908D2E01D3193434089B76FA7057B10581E21235F3D
-AC1874A3A67AF9C80D9F111A4E212FBC7990D0DEE0EFB6C7C1D649AC9DBB23C4
-44EE2919EEA536868694FCD9FA5958A016237FBBB01FD534133336C7ADC462A2
-213CCC6899541E514DA6BD93436DFE34019AFD5242BA725F04999E2986318531
-D94538CEEFBC53F1A9A075C0810B4E23851BC8D791F55705CF25B4E57398AF88
-6C2F3E50B683B90FE66AA01D68BE763ABB81142E0B13FD5DA264ED7A3BA6E3DC
-4A887433047C3E0F2E649737DB99FF83A79FDA44CE599AB4EB9F71481B5455D8
-DD5E935A552DFDFBA7CEAFEC58534E99248716FDB4CFD686587204B46069784B
-833B08F7C2E68B5DF247401FABBB7A18E58C9569AF9B272B7D0D8BC87FFCEF00
-24FD2004D3161C53F6C36EDAA189B9805EB618534754F715181F22F3D6945868
-D897258530705327B86084A3E506A6B0666FF430E0F932BEE416D201FBE3DD03
-C64FF0F15E7103AF47129A420BD6507B55AECAA1729BE6D8E2A8D460B2475569
-EE0B58D9CE67B4BE5CB5791B47EFD0F7FCA61A1253C61148DE763C94770E663C
-A2F15149D36A8B1EF03AD5F498DBFD4E4CFB0947F39CE550CEAD465984A6ADA7
-1FD56BC7D70D7FCC32F5C6D13BCB24EF5B11B15D7C9D132238067482E3F9F7A2
-39B33E0AA2271C8169C4F1A8F80021AB55566411D2F55525EA55A1FF7945D373
-D0C1ABFF4685432568740398A433634D767F9481B7F830A79B02D84445946A10
-D1B44EDE4ED9D1A134496C757D8F095194E7327889F122977FACC2AC5F568B4F
-9FE8424D907E868C772A6A1D5F735811526FA2036ADBB6452EEFEFA9A94DF7D2
-60825B9CF120D363D36D9BC926A931A8EFE83BEFA4EE242C88A41B408C9B95A5
-33907FE18B2D4ED4F03BB801BD76EF7052ACB70E6A56A83984698849C50563D0
-81DFF77C2198EBAFB347761E90ADFA11D8FD36379DEEDEAE2D983E74D097C737
-1B7339AA50A4A70E50148251579353F9EFA5E51CFCBE817020CE0CBD9CDD41E7
-B5906854B440E6137BA1AA839F4C83AEC86A8BF35BF4D9E1AAD53C3AE9E6A967
-06B5BA6195AC03F462948326F96D79A669210EF2EE09F818AD6313EEE2A994CD
-734ADAFE8FED4236DF30D3B08EDE30B5B9CDA4EABC6CE4A1EC76C5924CD638DC
-04034D6228E7C49EBA6A31AA167BD39BAAA41806BCC11935B57B429FB8B2AB96
-1665C164D42DF953665C2520383CFBAAA2D56FA92B37A7D149048204EDF6457E
-35C8DA34FCF03A539B4C188634224229A774EA95F2C107B647A573B2F76CDE86
-27B24B6BF792B336FC9ECE92AA2C350157195D028D4BD5A6AD83530228632651
-8763948B33EE5DF61E5F7D8AB4DEC1E553E5C812070C966C327B20C364A13F6F
-75044DE24F628CB6165E4A2B2C75F8EC49287AE37F211D849CFED0DEBF711C48
-34268BDA14660DE9DC215BD1F81F9ABEEE100A1FE7CEBE31FD2B98B0704ECFDE
-5D1566AFD2820BA0368C4BFC0F8B4C4B89D7F5CAFA0802271A63E6AA12297144
-6FA40541E073473A4510A0232A9C69E80F0ABFEA6C706C3E590126242A9522AB
-DA20D3ABF26773911CA4271F54C8261BE1FDD9E58FAD5955BF73478EF4D107A8
-BE7892BE9CBD6404F802B409F0A27FEEF3B1AD2AABE69C5ECBFA078EAB675DB1
-D8B0F13B65DD1E75C8D591C5F495082679EDAE033B4453AAA4E806F165491040
-A8B5A83F874A405BE5FD2B286B7B636C5B7573998194583EBB511D1496AEC918
-4D70DFE7D579256D6BB74927EC50687025CEE794C27AE61F56400A341380D377
-963220CE31B171E11F0B44F4181254BD1C2BF26EF58DAA3840BA2BC5F923F51D
-8525B13D7FF0B6578271E6022F73DE284CBAEBE41E05815BAC23D6A0ADEAA00D
-39D7F755E0CFEB3AAE8C284B0A5792A820E6275C1D71AD3D449D3D828B70B3FA
-7517A9E2364EDFC2DE553371ED7959EF95D157EADE560EF2E39C3472A67756CB
-0BDD87D1C6D13ADA99028AB165137E27F9491238700193547595FF3A1DDB5087
-4507CEE626803C9DAE7CB322BF694919864F7760E46AAC60F1A1C890D0DE43D3
-EA15BCF87E2B1FFFE3B7A6E76E5E6DC017261E078E58AC606F4A7E5B56FF237A
-680445392A2675D814605EF7CCA4DAB7F4B448531AB794C5A6E1AC6C0A350CA7
-83EB1AE89BAF52D0FD72767475BA95624EC39BB0F84B93EF9517AE4FBBB33605
-FEFCAB87220DAD1F599F2DAB3E33D7DA472F959DC55A5E102E27027436D02CAD
-2FC00AC8ABF366B98C811A65A1BF2DBAA0BDFDCFAD1F8F0AFA28BC040C21A39E
-C4544283CFEA13854B698C434B2FEA19C12192A09C83775AC2743E19E8328949
-D2016CC40BA044CD836978EB38AB3622B28835AF1A876185C5E86ABAD71043CC
-E9D431A0C80B072D0BF53B734349BBC00C9A5FE253FF72438DE04DB1AF883DCD
-8684560B67497146AE499BDF58E252A35AB9283CFB85F08B7EC4E1BE91A72E88
-265DE98DBA09D6A06F087D9E04AC648837139FEE0130B8083816EE063637583B
-3DD5DB68D5CE15DAFCF03DDC31858042CECC71C799F4379248FE3D225C0EF059
-A8CFF379A51F0427674D377C505527E476B04428A6CC23652FF7613378CBA019
-FD6BE1F80B9D39384E2F2B44BB37D7EFA45EF622D85096DA92509EDE83754D66
-B18FF5855BF530D674736F6A9F74EF77CBAF639592B00656491E4D1FBED8B832
-6F69C4F1A15986728806E4FE6305FF3C3CA56A60FD809F35C028BC404032FEF3
-F0128AF013D2F165E1EACF5FF63C390895B32D8E942EECD1FA1450EF0C5F871D
-03D419A6C8441623CCCA526AA3FF59AAC3AE3718D630DAE0870CD29F68E6C94C
-95E36739B1F51FCCCF1B3FB5D58815234CC3EF95357E9A1446CE31BE154E00BA
-E0172EBC8801B779EEC932B4A4D557DF530DA3422DB1602C459732CA0E53B173
-B87B789D6F0D4D457F8977FF92FC3D063E8E6C141CD5807951C53700E952792D
-712C9714A82AD258165C18D225655882CE3B389B999FFB900BC56FD6E2525245
-97F1EFF91A62540026D590C45DF1A728AA369F9EDC8D2753CFA8A50DB1898CBD
-096ECDF314ED68F361EA7FA6AB7AF0F45EF48322BED07475CD458F713BF819C0
-E7C62632FFF0B1E90D354D26C281FAA1FD7B959535E1959DFAB3EE01B2B53934
-F0BE89C82A79A467234D91754E8F8C94F697639EA81158B71CF6944FDAA9B66B
-2A554610671D36E04EAC1B01AE52E2DA13D2D416102E1DB17BE04A95CC202454
-A11FBA277D2F276FF3E62A5353105FCBB867B527A54E88A4D2D84C8DF260346E
-48260C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /colon put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 108 /l put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 121 /y put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E427782B91F1098562
-3E22288F48ADE6EFA58CAEBE7C070A920C3A85F4327940DBD99179C26E3ABF17
-64E9CC6A45F17F19F3EC1C53B17485B813CB01915D55CA2034552666D5E44A96
-A0FAE064F599AEF095CA1816F7066EF0AFB220FE1DF11FAFD503505C5E6793A2
-6475E95FB467E2F3B5E7C6663A70B15698A1D158E23D3ABE3B6942B24832AC3C
-13F258038DDF209525C4124806A369ADB0423C2FD0F823AE3056F380B7128089
-689AE8C46C3D4D74FD99C37EB4C4D2D7C0D63F6F34FCED5BA90C1CDDB62B8429
-832993C74185E38FF98A802AC0C97186C1EDEB8075BAD4F3D62836B3A8827AEA
-C1FA46B58CC90BF7D7752FEEE2346818C7C654E00BDEC7486CA7C25B6334CD94
-AD99F0A4546036ECAAAF90085898D4E7D13FA31F806A29FC14CD280E4399AFE1
-9A3C1A7E495695B13C1A0C96E571F0C8DA95316705362736FE2A83DE28D72852
-2CA05A4E708DFE92F893EAC70EC1FB38640AAC990262F12165826E01FD44EAEE
-EC437880B1EFE4321F48E7DA2F1391492F09895413C7356FF5EE922F650B3D53
-312118F6D58D16C2C9CE3840037A55A50E672E58E282E523E9FB1E78DE044951
-2850A89DB86E024DEE41827153D2493AB7071B75B4BB7083921817C4B9F7EE9D
-D77C520B9AD4215D58B00D08D3D40083EAF4F167B098B234003E74DA9B46867E
-EBFBE5377603CB4788DB242A1F2A5618431B6BA6FF14370C1C1A5AC474DC1927
-6B6F1253BB65C9E620072C12D47C51A3F407FCAA60F6F80CA5734FE6CB6C3A50
-AAF54FB9536C81B8D2E59129B36DEC708C1647E89FC0B45964E3F8F34FEE564A
-83FB62C9F49E43EB0D32149ECD508A0B3FCE54AB6C7D9AA15DC1F645C5E214D2
-10A3036D397029B245B9259868265744C8C982EFBCB488EA721765789BBC9568
-D83DCA8A404B61C5AED2B17A72F2C5FCB0FEF8E0486DED5AC7F8DA27B671327C
-01F2AA1A20E226AC82921F8A5AB175C3085CE42650FFB0182A294DDF4F1EE096
-643B270128FE530B889D4170157EAEA7D3F7D157BB7884F37BB465436ED0AB09
-7CD8E1A4C9FCF58BE9405D2E5392FD888D5717376734AED84579AFC25810EC78
-B4637BE237140ECC6D283E2F6BD6FC511D1F839FBEBBAE96B1AE317C8CDCD6AD
-F3959D8C674C131CE80D159094853C80FB9E7F97A05FF45F9F385DEE5E0A61C7
-16C2B851E0ABD0C4914796FBB83691F9BF151FEC13F672780D734B5A02B5FC50
-68ECCA1D84FBFF1E2FE74FC8C5351AEF348074C2C82DF91A63173A4B04AC3D32
-3644A1C2CC6D5849BF25FA9978BE012350E8F2C0FADC0C5C189BA5A2F02D3A3F
-BE9A6092811AE2D594B978D01E1064C02B75FEA01ACE72A3DBA32B0E7A63DFA0
-FA40A7FF01232C7583FDEDEDA917FFD3A7E76D5B096496A87E396F1FA663A6BC
-7A3D2A7E1E656C4B0B024B0142C8AA179FACF3051B68E60F944208821A4CD637
-5EFE8F44395D551DD58F19AB97E8AE27B141A64277F9E5C930F176258E7C80A4
-0D2AFF445B8F25CDBE64C9356BB51F34FBE34536B66DF010D267D8E6ADA16565
-2551833226673F98A83931AB587E313C89E4DEE9DF15EE5365287AD72CE9B4C6
-BAA6A250AF7D623C79E1CAC5160FD54F0E32398B6F353255547F26EF63D16B76
-45826EB0AD22FA51365CBF549B7CA21BA882CDE26ACA391B100620BE2FC33664
-4217E4F4E3E79E21AB48CD29E0455A81867AC597AC31D9C7D742415E7958D010
-B79C1734CC55EEA4A61898CE73B12D1392BC2193CCF5E031B48312B8B501B48D
-90B579DB2EABEF0429BE5F2C8D39FAE102A7E6624287AE4398AB6C87D1312399
-570D02EB2CA47CB6328BF89242D25714896067E9ACB9EA4EA1C0DB3A591B91B8
-C60B9E75E0041E050D329F1ADE8F25A57713AA606AB767681D2C1A43C1D95543
-55084225C6B9283E73C375340F6D3EE4D39CC48CB4282C895385F5A085EE8C55
-22BD5985597030E75971ABCAEC2E98A371DBA3AFC7B346FD65D0DC9735522234
-7ECF0731E2043E3478EC28FD086F24B1B6DB4CEF52D280630531FFD6C0D32F05
-DDF2C3E58E42F503F0AF8D853056AFCFE8C67560C5C49B75EE80886A9F23500B
-BF7F0DBE56D2BA60F7E08822E09F2C31DA869FD9EFD14FC260C38BF9F0DBE72C
-1AAEBF352FA7B630B4AB653BD8917A754DD20D8EBD8D0EB0386E3B90B8FBAE97
-18481C4FB6E3CD92BAE0BEC3C1A142D8885D174D797F9D7008FA3D946DA423C1
-E35413CB24810FB10D9C8DA86A63419D309356B1F9332ABEFA1D391A2762FB02
-4AAEE5F322059EA0E67470729475BB14D9535DA3469DC9984E6A651ED1E96253
-6F12692BBCCBA80C8F1716B5A10716147C8EB8CED92E3781A7477B8E50996E2F
-A2079175D22373EF12ACD0467BC95B54C83FEFC3261DDA9FA28C3F4FD834C908
-525B669380BD25814137A282BE4896DFA382937112E8B186588E1565FB3DE1E9
-520F2A577DB45CBFAA27EB46EA7FBF42A99B259FFFAD2E7BA02E17B8AF008FB3
-AC8A517D249EF740A425965925D0D3D7A2F35D06149557BD2934403A84FC537B
-C5BBB942684CB4688884E995F3554329D21A6CC61BE0A533D4F9ABF3141A24EA
-A42344DC877DF69F52515317A875C7F127090CB774A5059F35357CD2E7BC88D7
-35256FFC43574FB0F68D768432A4CB5CB32766735EC1F87BCE383A0B949ED921
-01E85B1DAC588F389F9C400A4DD2B1F41F06BE40E8049D1E5C03AA8B1C86E77F
-4259DEE0F28AC1E7F858C56D356A97E0A6693ED472C9443DDFBD614DF5B026F3
-1F5BE9D44CC124BA3F275D1BC273CBBAC34A88C86C677E34F3AD71D0F9248F72
-5B9D45C193F04304026414E05346AF997489986D6209CA260EAA5E91ACAD29AF
-B7F151E80C2B9C9A6E4F6AAA8133AC9A68E98EA5BC54C5D6BDBEA7667E697273
-D6BD8D62F22416CBCD82F281DC0C203FE40C743BAC58C609EF853C359DD44336
-D82EB05E692342CEC1720ECF544602818F60D9B48DC0FDB67DAF9D28FFEE803D
-C3F6DF1B9ACB301F78A60AA69A39F953EFCD51DA5127C266AE487FB903DCB2F7
-9297F7A8F11B5DF042EB564FF4347D3A8744A2315711EC9BA920DAD25E42B3AF
-8EA0004ADC7B6803649FABA21AABAFDDD565A992BD029EC1FEA7C6C67AD1FBB8
-AAAA28AFB7ACB46F5B32FCF1FE513B3645BF934DEE423DB19EEB1EF9025BBEC8
-1DF53CA63E20EF56458051E420AD40F380C381D52708CAFD35333A696A2BADDD
-B0866AAF1D8C561683CD3141F477C6718786E469A90E1FE82E4C1C771BDAF117
-9E5D77905639B48795B4B332F3645DC5CFFB0501A4C402FF415E0DA9B10C925C
-B2E49C84DD9378A507985461B7D14D0F698E1B278BCB15B1C6121C2AB9ACA19F
-19F8E6460823EEE30DEDCE5B89C143FF5CE8BB29B74C77C089B6F2095A62F883
-3187C66F7FC8860F2EB7E3624389DAFF8F433204AD40E8B47D983269924C792F
-DA9B3D1CA9C95E35E2A1174AB05F6159BF7B6EAFC749C2CD537D32B47022C82C
-BED77D6996DBC5AC36E5DC2BD1295D6C382AFBF33CC8D3B518B8377E4FBF4D06
-D1A21975F2806E3F8CD33B18D59BCC5E59B377210FF6F820104C0A7A4DDACBC2
-06445401BC01527D6B3B1228E3A3046AF7ECBF37CD60D33C89B239A03EC8D88E
-446313950BD4E3145683CAED755E4723B6ADE06E13970AC9521FCB4D939E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA411F7112F1BFA5475673EEF13CDE
-C27F9A38BCF1E1AD2DA2272860A051ABDB4CE6DA8C70925015917D8E2A8FDFFF
-C85F7EE3330A30C7FE01E31DD51CB0D0057D061E2E70101C54EBFB263ADDD4A3
-05E558A33B1D81EAD9248C849B234FC57982B8781BC2C3120E544ADB15C885D5
-8D6A637AEFC0966B6156BF63859B765336131DAF12B247C5E706468D9340E055
-562148F732ACCFA17F54CB25C25F65169414C567A5BB173A5E256F897E9E60F4
-519D0A2DACCF16116925BA344CF1A2F44A69D3FC661E8E8337D9A9FF13903CFF
-44C2AEE3B696CF8498998226EDFE7EE64E5F560DE92C913B93601E3517158221
-D933D8ECB979DF2CE2A7F9A0BAC723C31DFEF425FF469D4F7C808A5EE7E5190F
-2B3C4DD7CAC5F53F9A65B6A10C0FA1FCD61D3222D99079441866C7CB29127EBD
-C004C39CF91D00ED2D02203A0B8C2B2328748B446F6EFDD032151A13963A9FB4
-7B13CB2430CCDB7150E849E1A91A432FA62E72579FA7A8BFE0287A7AA3530440
-FCDAD17C736CAE845BF5F46263E87E68CE9C9BA908119F84EAF3B31B98161A65
-0401580ACF63B5039F8B75188BE8F1B17D4F4E0C7A0C373B4EBA00D09144D561
-68FF2AFFCBEDBABD99018255669FC57A892E8884709D77B92AE13DB3A35A0698
-83566E712CA94874BF760DCE962D25DD27D82E53DD7B28F9C598CDC8F2F8DC45
-1C50B3E91C2EA48EC32F0DFD84DEF8C62E994B273E55A64CA81919DF1A10029F
-E8D76F502841F0E34AEA0CCB65F11E7B5021CB6AFF56D566DCBEA180553DFED3
-F680DBE34C3C674EF43C7978DC6540CEB956364FB990DF90C79A2451C070A8A3
-93C63C45176EFD2A1B2B532C9814607478132230033CE722915E5A6482716EA8
-8FEF4F2327E72ED575FA144830B2C888B20FE66F0C401C0629B5E85F74A499D7
-839D0CEDC2A06B4EB9058540E3ADB81D30FADE7BDE38BCD07FA59F6E99AAC5D0
-85242407AFAEFEDFDA2403E7561A717FECB2B9EFFBE25E1DD7341E8701BD490B
-ED0F5A519E96FD453C87ECE13D11DF05E5FC71DFCA21E7114285748CEDCD00D3
-EEFD8166804AF07B6E0570ACEEB52F30DD278C08C0B8393A6C5253381D9D95BB
-02E53153AC0D87D7A988DFF25AB31BD83B47B68F0504FE826B48A0E39ADE406A
-02EFE8F92CF3425E33248FD684ED489FA93EFD7AE11103796ABCCE109BFB4EF5
-5CAB7519E73103BAFE1FE4199DC4F66E0AECF658F6B8F7901B0AA259430E0FBD
-7E8AAB44E2371AE97D7966312986DD7CEC25DF5D5BF58178CEB0605B12423DB2
-1C99013A1BD6C9E49887761AFBF7E4523CFD53EB4190DA63471DC1E2CF273DAE
-F469257DE127519817E8E9CFCAD4166C63C0B9EC1B70423A0A90182FEB3E0900
-FBD5722333137E7BB6CB44E366F6CEDC65ED605A35072AA97417295C7690D0A6
-E792EE5324C6504BB2A918E0F759F7F7B3809326C5DE8C2C5B979DAB0771FC2D
-0AE12BE8DF21A9363BD3DDF2AF7B34C00E6DE25B6075DC0C31B6A11289BC5CB7
-0FD569B10C5AD2792B833BECA59E52241E5CA3746BE6C831AA669204508DB5B5
-292F4F3214835E8C7D93D5197D5FB01F28593E0CAFAA5C753BB7EFAC15C446A4
-7FD341B6A06E964BB70C6A392AA48F4CF731E70BC7E3DAC4B346DE17CEDD33B5
-76E329A5FA44CA972B7DF118516104216C52EBD14515070D8D7F69823BC9586B
-597AE48FBD802E3BEAE59A5FB6759E8EA7CE1A6C41A2462A51D79AB94618750B
-E4351A242191B36B6253FAA6A5D68396377D7098020313A416F49FBDE5FF4FBF
-1D9E12FB7E9748EFCD8BCE69D9C61135DC3C44D6B65FA4627EBEC5CDB265CD6A
-62999A0C28809B87C3BA0DCF32BF177A7CEA161C529D96F32D11F59D3091E90B
-B36FCBA4D8B4B818A41DE3A71D3FCDF3B1D1B5E7B4EC0196E45F6B71763DA8FF
-1DB0D8F2D7762EE75585F65D31DA92B62647FA385D98EA2788C3394834447431
-0FD8D8795EA3785E8185AB6E1163AB41A9CB62C1B358E0F5B00193FD2212C9FE
-A3DFDD7F74E2898609E70960EB4A0C906C1AC08D3F07E0832DB8B2F54C981D16
-8F6A4C8DAE5D223513FA77CF3FDFAD2697F7814A82B05D9DB889FF0CB02F8A3C
-AC99963E7D20CF438CDB635AD7CA9EF6B250B95D78F511F25BA7BF811A1D3EFB
-AD863367306526D98C3AE238323CF6D7D8E9B494F252C87B0DCEC701804EFDF9
-F0E4D69ADE10F59D6E18F1F9FD5E512409927A66EB0E805F9D2CEA2AEC4BA735
-BE82684413CAA89F47079BA826A0D3A421AA248409329BEF400020F8A624764E
-5112B667C8B555D7FE8AA50CDF8D37B460682CAE7C6F3E78D41EAB3A6860B633
-CE851799DA97AC4CA444F7C8A75685902E888495DA52642A2994DF33DEC519FE
-7F1A0C18A373B566DAD28A97DC52BA304EB6F31EF7D9658CD2E1B88A74B6690F
-74BA0862715FEE87ABF326949D13D50DED48DDC2580F6D814D50FDC0918A5187
-CD7D889B658F8AB8B8ACDFF400F561A5164F440E77ECF17BED5AA692706D8F23
-3F18A239D37A026797DBEC5B0699CD56208E03F668412CA0911E35C74A77B22B
-161336CEEAB98D54FF7B84530FC4C5D7FFC92CA8F123219B54DA21F1EE249690
-E1D22F6F2B8DDACA974082E2B7BC80B8B7CF72F62998EA11423C825254CFEE6E
-2C5DE532516438FE055568EFB22F3D2C2B4845C5DE2D698629DE386D85244FF6
-14D6E1514F32780A39BC9BBC33B6CBC970858CAA876C24D0A6C090CB73A59B2B
-B1F0C59F0EA241F9C0E1913B3DD58F19F75BDFDC00B42ACE8467B709D6812498
-D3DBCF5AF59765190166EBD0E58F7BFE4D2637F883F46FF3EE1B4CE43C5A7379
-D834E608A6D82A674894EEF9B6714382E189A7F73B719B53561441A409426624
-1AEE8C0A3B8F5962826A2B647FB5ACBEFFF4B14CE8951252C969787BC6550FCE
-8C244305BE131FE4E88C443A883CB2582BDC236E2901EDF5148A2F142941AC8C
-3F4A2E18B7C8FE7DB9FCF453271E5599FEE6EB0DAF49CECAD1811688CA41F02B
-48444191CC9A95F7A36113605104340F6F8C4712D743DB9862C9341CEB2A89A8
-3778A174C6AF3294DA65306F7894DFF28FD25A0794108081F224295FC4AB297E
-A111DE29B44E5572FA73EB0384A50510A06B36217305E00A577CE2B82227775E
-ECCDACD86C4D05BF14E3D0B86D5AD079246C6B4D4EFAD5613712246D1DFEFDEA
-9F7089711917FB693F7A7B396095967B2E02651A6BC7D0A18AFC192CCF0611AC
-E8E000F487D3DAEBE98EF6CDD8D917574DE489317F0A1F86CC51F69EDA8BEA5D
-519ECFE2D002D0E5961FE88314E0BE9156C1F454A5A5AB97208A9F29960A9385
-08F3929951E7AFB74CC28169342AA9D769D6C9AAFC5CC527C3A9DF948A288FE6
-C82A2501397B36C52A8BF68F4A2C4C544F36E694034A6BC1E3C6E6FBC238B6B3
-E32689D6154B35E1EEAC1FAF2137A8E5B8B3DB98601ABDA3C5C98D7F0288C049
-FCE4D99CED91FAD0A51C1CE7BF5B47120CA7909096B90A4AB258F78D4449B203
-E365D9B0AEBDC06C3755144B3F9228C19F2BD435F1505BE8F1C782F02297B070
-B8CAA6C91201BF62BB092208AA04624382B9DC835BACE2F48A00C9482DB79A2F
-DE64CCFF8032624C8BC1A08514FFD04052AA609DE0BF569067885988D9294CDD
-B9C93C42655D898F0AE79532E0AB8B444E0E9EE6DBA74E5257D5567249DD7A9C
-131091C503C059BE2B5ACECD78CE1C30D55E0CB49DC7C107F5E1995D1E1678C0
-9FCAED19B80FCF59A65A149D283F62751D76587253C84F9BECA3FF76CB6DE037
-59AA719FEE66F3E32653B8FBCD3267963EADDC23D36A23D8BC59047BFED5DCF3
-92DF4E0F974669A83A7B4F417D21639C75BA782C793E802487B0FFC7E8765603
-52A41DB5D2DE85A0D5AF2D7B8E5DAC5EB0F2A65572154D5B40C5371C3AA5D4BA
-A65E608E55AC1EE8B1747CC2EF897C10851B98C48460F32C5E3933791CF06C64
-09D700E53B10848859072F8F134900847D447F828DFBF711C11FF7F3717713C5
-2441111F10D915502ED8C568C51D9BD2900A8D837B6BADEF8E179A66FA187FB6
-0A44BFA719EF76344D5269D157D56C90709AA212A0A208E242A035838785C3E1
-62C2E9F163939D1E9ACB536F38DF0F24FE6F259212AD4E2DF305121F27188D36
-89AE849397630931859B6158F7C17735DED51E6F41A96B05D5DE32C4BDA36031
-1CB4DFC8FC98FFC5B8C47F16A5A8205F81966AE7190B88F35B4DC9BCFC8AD5F7
-9754ECC106D1A34A3729D03241FB29291C00B895D3C286CE923530DC89A3A17E
-7941E86E3194230F0438CEC515FBA8C1BC6968C776E69090525ACF065E48379C
-F78FF9EB55D28CCB097F7922940B6C4D9E307D6600C96ED9140E6D0C2C16B5C5
-177312FE45CC1E5F46EC4576B6B743312DB8DDC7595D5087CBFF84B504A6FEC8
-043D259BF6CC188D07D553C996E1C8FBB85DC18C160110C7F94504C4793718B8
-D96DBDB71A9D994BDC00D9060B02772D589A4BC9BE8DC5C78133950DB6EBA6B5
-A7CE9500DCAE041553D7D64642D97CD7A8187A24AACD8675DEDA48E2C76C3B12
-DA3C5E8904C6AD0B9835066B777F59AD94BADE328BD667770AEDFA93226B96E9
-05C8685439FCA651584CDF0B8056B6A0866DD0C9E2C38F57A604B03787DF6AB3
-8725F73A02182583EBF48004F65B63E389A66605C8D27A7C1D59021F8D7A203F
-A3B967A8F0E549C2119FCC6DE2BB56A2B2767355858EC83B5128BC57526C8D40
-5AE9E0860598429DCDA74ED897EECF055D90808C33DCD27A2863C8CB0AEE2D4D
-C9BA9381F0A93FB6065D48831662C015EADC771009886947C24E43F3EE8169DE
-F77A61E7554512477B68A5FF652821619A9497C81D9E1DD9352A5F309E181F96
-A688ACABD75CA1C1BAB77CCEB79029AAD530CACC8C814472B160BC1759E56EE8
-5DB7F4EAC6BCFC33C46A023E5F5F8579A4C5BD7444823CA560F2D0CF8248C0D5
-EC51A5DB2F8BF9C551B018CFD57D80AB717526CBD3EDCC30A7404DC43FEC54E3
-DEA4D8161DFFDD254E3A1B9E6E36353D3C0FD981FE9C45774119C4BAB8ADD527
-BFBB4C26A7FFB9DF23497E59062D273BEB7B16F89923DAF2AFE50AD9A155C6A4
-9234A4A16FD435ED6B74C91D8061A3A21C03AD3F5C7253B8ABF2C46D038937D6
-D0097072956E19F2395BE20FF81E8A1434EBF7551AF7ADB7C77889563AF21D0F
-A749817680F00B5CE164131A8FF0DC94B248E7594A1237132F4A123772358B48
-8714F3EA622F02336C05DF8267641299C69DC5446072EE3819A84EF8C84093F0
-A111AD3A7C3494BAB2EBE626751880A55AFDD2281E46768FA25FA943A3E34892
-778B8B2A07BEA8CFFB26CDE9F19DCD9E79B9D068867872A48D32F691430A5BBF
-FBA95C7B6991B22254D40E52CC55500448B76A40C0BF7AB41D1025F17CF9913A
-8522B0745B85619DABB5C88F5E254791C8E1AE56D4DDDE34BB15431E3B18E3B8
-8D5E98D624A6CCDC98C85F5C305143F74737A2EC29CE1AD0E84D9316782BF3D7
-48836BAE472F8DB9C7CE3533417B85F10FBD01AFD00C50CF24E841ED0CDE0746
-9DAD053A7BEFFAA191E660E5E28941AB3C147AA111BE108DCE007BDDA33F59B6
-74AD1371DF8D9E741B3B754341D56C0D6A8D34C3F24CDAFFDD1BE08E971857BB
-4DFB7C7961EA09C6A104292983EAECF3E4A1C3B6ACB239A1BE3AF3E2413CC71E
-7C5A78D48ABBC7C3F27598E09086EE730DA09402333331ED0843BBD023773DF4
-83873C0922A3FA1C2C1C356F661CE4D6D6C6862797FD5069BC300E7707BC546E
-D149F0C65824326709DF3C0FBDEB92A0233752E53DD9D1844E15169FFDAC206F
-A72B1E331D66C9D79CBD49B512ADDD55DC04E079E6C2E347A3B45947A763EFC6
-076F07A6FB2A257DB3F5F3473CE1E05DEE48DB512AA3A7A895BFE1B2E8708D99
-7C48A33113E818567FC30F389EF8A27681E667FE08C8FFAC1EBF7460A40F7BFE
-468A99C98582813F8B4AF96D93417D0EFB74C469BF08AD40CECFB95639CD244C
-0ECB88228BB49F386B7BEB55315E317B1380237EAD99371E63A34DD6F358B2F5
-8B3EAC735EE241F268C97B350290CDB0666CF6AB53D750F938E78C1B5562DCAA
-7BB4B4BE542817D1BA0065255AC0387FE989806B478662CD4FAFAE001A672090
-65A22C62E53C3A63078C61365CAC642C25F0B89D7099F69A2A5DEB58E945257C
-73C6D2C38A09D068E410DBDDF558C0CF6087F7DE0307388F5D7E8AD9CBE28988
-CCB1BE46B22A178A1E2F5F349FA58C53804EE6C18ECFDC995C51A67AD09BDFC1
-E87049505A944015623EBBBE7AC505E7EF98CB738F05AA0BA5D1D5A695E71255
-E75A2159B0D5571B3F375F77DBACB08F14A1EFAB4283BE7A2865E7FE4762CA5C
-D29D27E0992C4F1D31A2D5187C8D4AA5CC3DBE0026F1631C0689520890133420
-6278CE5098C8AB384B54DADDFDB8929F009BC88D304A6DFDFEDF25BA54F97D22
-B8DDA33812B081AF99CF1F64F2ECCCB55A2AF4D1C5D8DEE6A7B724534660A910
-D6C3FB2378AB8934272EA6D231A0A9054F78F18D0FA1F3B455D1B642FE585531
-199499DE9A1F596AF830F7B7302C7D0A6CB12FE42CD5EF73E6402DF0998188D8
-550D05998BEDEAB0DE97EEE00CFBCFEF155F60A11915EB05477B094E18D9C8EA
-13300F58E772276444B75D0FEB9325199E36B19F9D5F851DA5282817A8CAE93D
-C7E6F2148FAFCF11740225EA470E2743CD0492BB98AE7EB8559B089561D68D65
-C11DE21588EC8DC52EE0380A03E762921EF1E5328A1A30F12C1558FACB26ABAC
-8AE9110E277ABF1583733AAA80B1A0E60D1EF35E551C3545532FA15E4BC5BA07
-71BF8B4D075CC44FEEE936CAF39B88B96F54E3FF45CB78944FC19AF0D118F929
-20A0FA390A5AEF827B9F25CCB6A008D76FD4EBFBE9CD518A966AA2ABFC5CA51C
-C775B0FBD115D2421FF42DB60B9D0AD046F3F06EC22D22DFF938824B5E70CF02
-36DFEB9D4DFD68879134287B4B16A0E098730838B84CE8ACF5F4188286D31D0D
-998E822F80B3A6FDC32BA1E846B4E19D6BE78C28917F7DAAC04BA9B46A6A0372
-10B17517C6C601EEBC365C0FB4BC98B695655B6DE934205150EE47292E55A1EB
-2A3B690718ACF80491F8F7559FFB50990FF8B07CE7C95C3F80C5BDD2B87D2477
-F40EE7133795DA5AC455338B857BAD863C36B60617D4F1CC557B3075E957D2F4
-D8D583E60A47CA98E0555AE9D2B06DC67C37AF3DE44AD87B3CB964CB08F90857
-B38ABF7E93282FE8C6D4C7683E8D4C285F8691A77E93E574EBFC8E17F3C9930B
-431BDB3D4F5A1857D35DE502753EC152BF633B9EBC0EC1E5B2B336EB063657C1
-C7293A051189CDB88381D9066CF063E12839737A5F218072A88380B3EC586938
-7D0BE331FAEA70E4941CC12FBF12ACBACA74E5350F6949A0EAD19847DD218FE7
-D37DBBEA9F6C06A455C75C477C53254D7927F7CFB878CEFB72FD0DC83312ADD6
-21EAFB7EFB4AABFA0A012D410B40E883D4AF9CA93AC990F88C96E681296B91A4
-C7781A74C3E1FBD08CECF5DD2F44A6A27EEEBDA6814DF647E77BCF4438231A69
-50A4348D06CFF33F77E67D69A23001BBA717B54359F81A22B0F9D52D556A4E22
-CAFACB67082DC3FD9BEC915C4A366BE978A1258F2F921343A9E632DF21CE4335
-4801298C7D06B4BE5985667D0A3AA1320736A1A05908BC4C789813274D8C4595
-3B9B69BB1F97CFBF4CF111D6BD2677A6122279C6134BCE860E54BCFC71112839
-BC2F9638D648DC3225982D3D55A9D87A22EF5456100FC549BEADA09621FC9178
-839715DFD4988690927F138C789294121CA45D7C797E366AEE8703F643DE8A86
-8C8DA1EFE1C863FEA4231A3E1CBA588067A02BB911F62EE1EC034A30BB714966
-25BE321462FEDA7C9BC80C389C07BEFDD1CA65615897CA316B1014FEDC3C2877
-5CA4F0539AF835C250325044D12303FAA533DEDD30F1931E51ECC96B6E185553
-EB3DFD4EDB6AD236A9BA6A5C082A0A12B574DCA24CC019D97B0DB53216D4DF90
-93062FED14363A8DEE292D59B27CD74F2050C9D51B6FE943CCE043FF7CEC9294
-E923A7D2BD41E71A1223FA2236BB593A078F2C3010A7B698E1B5C3D3D51782F8
-4BC1517A29753A0E4E254484EE70E9AB055362AE5E8450C43E1B63B3AF76E925
-9D9A255BD9ACA0DEAEF793B316D8EB1BBE32A5EA11E8B640CFE2E7AFEFF42783
-2314F0CDF54F82610FF1E156DAF9241460F961F5142D7D9CE199C91F8FF027F2
-8B94316E56AF8C4BC36C58FFF6C292BFA683F80D9695A14B9F496E90B81F5903
-2566A99EA0C6E0ED1D107D54C9E4D4DBC4918B9418FB7CD9668C2C36DDD7FE09
-759CDAADACBA490EBF930EDB910E343F1D754990F0AF22E8BC431A378ECE9F32
-6DC619838B50E7C8E5AC48898AD21BAE2D68BD1D860A206A820C9C4EC6A56E01
-A128E972E8707CCED6E02AC36B31CB2ACED28EF9B15F377D1C44D71D29BB1461
-AB26CEA023031F750CAE8E4A70FD2159D4D57FB790794059CE28E4B96A69E19B
-8397AC3DF07C2C5D119DEE3FE3C21786FF896B313F94E48315D3AEE56BA4D212
-197DC5BC45290BB7E0091FCEBAEA233AB5C9EE3A2D080F4994FFFC42A22820A5
-A5EB736930C6174F6F8C2DA81B0186353E9A7260DC94BBC1EF74EEC7B446A88B
-2AB7CD74B32CC7493F5EBEED1635B41CBEE88A8E833ED64F5A49967474DED758
-2D95CB825DE6AABBA73717D4E46C5956CD53CF86C0492B377E4CA192D2D5D7B3
-77D0DD0F2D35D21B700EDF53DC142E0F4C2DB2C90D2EE18038BB7D80C4109F60
-C2378659A8EA08C89C6B44A2AB637D6794EDD18CE4449EAA07C9D83E255B1C69
-08272678B083A44E33C3FFF3F3EB60BD3DD9FA1CDDBA91099A654C706865C7C2
-C7A5B5226FA66358D9A18B4FFEA0F116E2B419813F4E0F33E17ECA44E2D2FC9A
-7D1B519A6594CF1011070ABEC61BCF85FAA99DC26E66C6D8388DA4E01C44B9B3
-CB4358B5C6301B20CEB154E3AFFCA85B3EFC78D6217B0C0BCD8472CC51EF4205
-60D96789F1B9283F560B5728263D0328C87DAC52BA5F3E10DE1E18F0F2888E74
-AD2785836795350A6A4D678FE61E09935BC7BFFDF6AA842F0DDFE23F4162297F
-4A4DC5EB175A760F0836458F15E0928ACF7298195F9754FA78191D4E67C674FF
-58C0A8D9501493C980DAD3FD707BFFA26B77768722D48FE166A1BEE1BC2821E5
-3B3D698CDB526A0611A59E174D4C44A4D12D6C068BE8C83199537C5795EF1B3B
-95C357084C6E61D1FA47B6940A98CBD8C4DF5C85545A4107705176BC1D5E557D
-B98A31B0E8A6D96CD403F5DE54E6C1162EC9CBFDAF167D919377422B5608A0EE
-D897F7A8C2D8802EAA41961B924B5A3E07314CB54895FE97A2FCE6DC7DD4CF53
-BB1E94CEBA34F892EE8B4638C51496E5634955B1742B6400AEF28ABFECAC4C54
-A0D70F9754B1CAD5AA87DEE48984F459895530F266B80ABB2A460507AEE078D7
-47ABA63888C4678BE2CC6881C61C3DA44F5A3680F3FE63BC70DB470D17C5DD71
-0E0233F29836F402704FC593FED8134FF5AC464777F77D94CAFEF7E2BCA324D9
-BEB4AE9AF30E8D15145317E7A9E5E74CD526433FD52EF138924A7647740C1079
-17D75B6DC371579534EF35257ACB5F0C1B290AB82F174F050C0BC3E106FD1DB9
-3382497EABD328BF619EDD4ACD9A8B257E30C596A4689B846ECD5FDC9EF0155E
-92AD1E98E670940A0E788184A4328C9E30E8CE4DF0DBCDF46B1F118256FE874C
-C1097058BD438DDB2840270AD159B1D4FD3984153993AD9189095D3FA0466CA5
-099B5BCFA23F632D86291C1F15EFF7CA9E8EE20456950AD3D2365CFF76CC9945
-D618079401C297278207969E783D97CCAFA4DD905877386C10652C4DBF7F5BAE
-EC2D5BCD4E9B1FEEBC73AEEA1E34B8D24A2480867BFE19D5728F1EDC3ABEC796
-FB81E08F26C64CACDC91BF015EA2AF47F1692B2EEBD1F53796253E82E9B5BF9C
-59EDB735C2CF8225D2C48D6B11EEB05BF01B9580D439949FCE2574C488049FBF
-078735D525C1ED5ECB10C661A1F8526380C4294681DA67C10070268002A10F9D
-DE8B50BB6DEFC79AE7695DE4C2F4923EE5739E44E07F45F7040D9A003BBD53C9
-88C3E167399925ADC42B7D27F859414635877A11F0AA631AD8357E02DC12D957
-CC857A55DA38EF3C3AFB8922F339F25AB0083F273E1B3DDBF4D05D0EB3D042C1
-EAFBF57D198793F8F89DCFFCD23AB28DF675816BAE3179F70A209347EA65E4BD
-B5694B5D4BC26A83AA4E21A9D8F5E7DE8F5BE96B56A6B1F15F10F0F476AF925A
-98A609D64826F90F09069D98E98F319D0C0743718C58820C93E0AC938221BDE7
-15474B69CDF31B8D4B6B8FF7DDF8B473C2F96117AE34B97AEAB756230FF96792
-C79054F01F4D66BECFF9A04986A49CE0901AEFE7DA02B95ECB3ABFFAC1BBEB04
-CBC5F252E2FD638F81F9178FDA8C1EFEA1FFFC4992634F6F890930FBA35D614D
-BCA12F5DB46295F2642B6A82BAE554A0E19282C22A15D6F4755077066F3D6FCF
-2C0FD15240CEBE5368470695B738A27943C57EABD9A29794380695A09646DC93
-27BF5A36D8D47EC858DB55D886A9B0C9995E036D497C0E6D98FEEC5C16CCBAF3
-8CC49AC47B9DC40F14AEF71209CFDA0AA7337E916DE6705A0746ABD9C6DF67EB
-67042BE87F3C6512EB762F7C3FC0FDE6FC5F60AF924C5B60CE19C75B4198880E
-0D7288D403C321CD0205105F38827FDAAB8119E96C3AE59B462DF1024156E3E2
-27644BE7B9210DC97118ABED17CEE020CDB796C153142ABF930531B84A987C52
-D65AD2A64B891F1F6D129F47E5457F158BA09A16A51FA44366C070216FCD830B
-D2C8223159F278A85977F21B2626711C8A5E7066970460AE366B5690491A88BE
-4827AF09FB2AC007FCB2DAE3539F4B0F3989CEB29DF8114F689D2AD9B3FB18FA
-4C19BF34EE82D0A1980B727568C04BDA3CBBA10A2AAFAF1F0FD4170CE82AB3BC
-2BA338E000304781FC6755543C940F1F3034B4115DD48F468272AC661DBBA6EE
-8A05E489646FFAA71693082335D1DF462074F23DA77AC22866A3D8FBD2B72BEE
-96F20480BC34B4302731DBDDE0270B482DC9018FC51F10BD560FA352FAA3D852
-1C10607810F557057A0E5F445AB000B261A9F6A33A48242E26D9CCC7076CE362
-03DD3008328386C1D2BB6566D0267A7E8E9C4C3B2E4545A19F9583012F0AEF55
-D8EA5649812DA8C242A335B6AE21D981ABACA3681C457FBE88FD6AA3A8B9EF8D
-A5441C933149EEFEF05EFB8A39F4DFAA30077A037BB7CBDEA8E8E304C7330542
-6EFBA7064E0A0B6CE7C59C30131ECAAB7DAC7DEB846284FBEAFF87DA163547EE
-B967086ABFF7B3AA93350E10398A0D7D974F55A9DB2A38991E785AFF12C2DB21
-46F733B863734240E4B068B4FB4457F30D0E849A87E269A3520705FF39F26A9E
-F42472A49CAF65FA98055988C5E9EB9FE25F4A3A72CCDD1E8214F145065011B0
-66E2534D851EC9AE13A1F9ED628637DFFEE3789064AC381AE9AED6D2F6EAEE61
-A9469BD8DE611DF5112B86BEBD99B9BBBE05D3A5F208B217BFEF667F9F33AF2D
-5E459877BB2AF204D3625FC91900CA4D13D19CFE15F8D56BFDFA8F35CD6E83DF
-373466F43D176FD6883E3486657A345E7BEF91B03F4DF9776B70D85D677944FF
-BB64DC097BC6342D97FD1EA468CA483D9A6166F37EA535ECC6170731DB2EB3B7
-C9536480274B266E93D2BAF9CFF2E295F0D4CA8A45B4A0D8827DB32E059B33DC
-B71E66E18BCB7E5E68C0F4E972E46528D754ACED0F77CB4DF0C970C4BA5BC3D4
-2A1D6A659367A49A78A973CE39D19C56DED8824242DC22AAA61322B8A4D19FD1
-6052942216AB376A3EED9FCC4FE63B85E64E2EB935EB68BAB412B544243AF105
-95B2C0335FAF033C14055FF37327A34CE0FFB6F598C51B11DF5FB8F8E5476494
-D912A389EBE71504FB7A72676A2B297CBBC0C352AFFBC7BAD12479CEA94FB12A
-D85054BE9490F9ADF2F27F00D3423DC47072E89FB3FA6C0653EFC41EA2F58997
-B1380A86A3428FCC07F67CCDF07990610193D9A081CEB0377879AE4D4700C94E
-5FBBA28A0C2ADC71206BBFA61AF2A5677F7522BD1C152875DF2EFA0F04F5FBDC
-4F7F73A5B5294CA53AC60D9A0475B3BF43015663979D83FF164B5562EC931287
-1FC2137362A5044D19ADB36BBEC2C049A126057CF1FF61D92BC33AE7DF447F4A
-AF5AA0F44B540CEE76D2D63DE72C64202302FCE817E38128CC8B0A2646F025AF
-C0C45FA0A19460DE4BBF93A26B7AB75E8C868C738C61E1BC92B6061B1512BC83
-A1C63A9002FFCC723670DF60CAA58894450DFA60125F7697ABE2C7B65EEF9488
-E270F2963F3638EE65110D0E32664CDD2B74AFC289DE00F2B3C03C02FBEA6CC5
-EAF169A59B4AB6B2D7359D00F039BAE852A6C502B2F79C98DE5169C39C5EE0E8
-823A9DBAB2279AC9660F4A0A287D4F839DC0870F33FE676E6406B34F83FB04B7
-802888966525AB8EEBD0DAD149F4863003ACABF7080958A30A256839AA8C10F6
-E8309382CBF540B4CF4FAA44C9748E40D513192F7A11571EA94294C49B8531B2
-84601D17AA8ECE40B8F466735D08AE586E80BD7451D1AF947DDAF2617CFA4AEE
-95974AEA6DC768E773C2DE2A981465CAF4F94B0382670D9B8A353EC1C27B3221
-8FE0A469A1649112C880BCA8BBA4F15ED02D4A1013D43316F0724DBDD0BAEE98
-48F2DC23EE32EB2FC516D010278ED89012350122F4144A2C20BE8AB9ACDF0461
-EFE3BBCDB8F8D80A63652B18C17C0C7A3461893F7866475AC9C114EEFE7E5304
-67FDCF689D5EB0A976C80AEFB98AA2B05F83CFB1A25A6402C7B02E927E459306
-C83217D6C438D06FEB11B1C9823CF3F89463A9EA26A8F118A8700D9CF3D815B0
-378B7ABE59AF54C798DE1371B5A72E603A84E269BAFC48C8F705F4901B1F4C99
-58C08222EDC3895B88A06D35167A59751A1D208D3BAF791CC16DAA6E7258F132
-A4B6F4E2E99A9715B213F2927AA2A48E7CD0BA30AFB6F082212B0EC3CEF2F694
-2B3E2A37D4EC86B7EEF4915B75295BD87EFE05C512E4490D0E4DA01B83751180
-AECA507915921083BAAB983BB2ED344C0DC0ACB8E5415F6BC6542798EE9DA1B5
-90E606FCEB06DFD4EDBF2D62C743C27076F1FA74A4142DF564E962D437289206
-7A8F3128C5AFB55934AF9B288D8994CFB86B613CE5162673AF54BEE230399ED3
-EFC08156FE52292411DCB2F69468B542E773ABE1AE3E9E37D1F1A84A58A593F9
-46B27AE985BB25CA005649B9FF3310D2DC4A451C04D68E3DB3C6BB34C5270B6C
-C3202D4F1D060D99CC7BA20155A8BD3A63A348A4D03EADE278265F0392341D5C
-50016B69BBB67ED0F29178BFACB236E8047D7AC94924078262A5841E28DB3BA4
-4580B1FAF5FCD244BFF0B58F8E08A844B7832A9770717D5ADE8A36646B7125D7
-FE66FB2B8F2ED40321816C2C077310DDE20037D677F31F75955406967BA248B4
-2F73F0E42F94360F515E174DEAAC3689198F98CC3065D9E54A9C4FA4E9B6239D
-837465323EE0EB8DF0D58D016527A5F2FC5AE258F5B68657F47A1A079E76B3F3
-F8670E988B87F6237D3079A1E14098701C0E7B41129D02FFF1709E8830429D6F
-F21798FB78CAA0309802307A26846B4B09B0878E653D9D2347381BFAB0E6ED73
-B23C5E2ACA12D465B5CAFFB40C46CCC3DD06133E9F0EEBFE7AC9B8CDBA21F5D2
-9FDE0458410928E4A727B5B80BE9B9D61BD9586C85023966FF0191A0D471B74B
-D2F87F8F8E9F47D84F018275AF0615CDB5387E4A66017811729E4B05A59900DD
-7C7A05E2900D4827995DD05C90D56E0D4CF14A816F2D95E06A031C26F037026B
-34BD89A87914FA52AEBF03C097B8B657BCD36C1420E6C76B043C5405B6214D9A
-1B331DCB78698BEC697DA1F243FF6E068830FFFAC2D62437CD13F58D4255B52D
-23380E1BEC2C106AF0C39C706B4B4AF408FA4F9DB6D778CF97EBBDFA79C5665D
-E5416C6C30C975AB6AE75668ECEE1C71E2377F6A5BC90C92938F7578ADE9BF72
-97419825EE0CA292F872A6912CB433AC236496CF85FB6973ED8F356A29917CCB
-9E3E3C67014049D31D9DF64327E3F56E947AC79B2116CCA7FB9CD78875434241
-19689AF735DC47AFB26399B6AE5697CE320408D8F2D256C45514BA2EB972A862
-027CC6742C6883BD67EE86BF63244EF1F7CB2C6F46FB4FDD029B656551D552DA
-C1E594EF26D710C1D80AE054FCE7CBBB577D1A594522B03FF064807BB6BD9D5C
-AF4CCDC20C97E7A7CEE4E18FE741123B72573B86EFDB246BE2F3632D1597D287
-FDC00883C45A7799CA20D77EFB0BF2635139C006696811D53107D7FFF3AD84E0
-C5E22A03199C64F0339EC275543C8753A71152FEAC8B284D8C6CE3E6FE24B990
-B4CEB736333F07F890A19401F187F2CFF3E203CEA32AA45BC60396A1713431D6
-E18B00A00F87FC786170086ADB90ADE4A71C87528D53496245D7182A4BBFA913
-68503B1F9500429A4CC427DABCD3438318487F90E7CF4CB0B1CA2EEDAE9792CB
-D3A5AE078FCD1F51A19165B038CD6611C3BE3A290F51AD99C03C7FE0F5020DC0
-C693B26B70CB64C8D337D4FA6AACB34C5207FA7FFAB9E414DE9665161628929C
-238D8515C12DD3A22A580CC8269B1C28324ED4EB913C54E75756902657670899
-89B0B8FAF6832A4659D9DE528A4E13B22E48D3A057976198E3980B483411F5CB
-23C3B6CBC3F6C79230DAB98D3C8A744568F66204B85657BA3A55147C3DEA4988
-2D18301184F63166C0EA18C01C80CAA3260A5593C69C0134A671EFDCED27EEF0
-F02024485F2A54FC278C9A869A129DC3FBEF11F6445789F783C3C93B83B2901D
-9C043A1D93823151973EC720F5D0F1E2076193486F66BEBD52B4CC56B706167A
-4571457628EA122A6162C40DB4C4DE96DC5A0FDCD7BEB6A890DB4F8BA7C40BA6
-EFDDF75E9935BAAFFBEBDBE3A2E7D684228CFB145A0C63E1E56D9ECDD0034A23
-D3C17EE46191878CC12D40B0D8CD2994E30DD99E7F84BC2DA6F6494A4B8414B0
-BD1A4D30FCE83F649DE3E3C1AA600E93433450BA4E9CFEA642FBA14E60125906
-36AD8E6CAB73A296A52725C1C454446AB7A19B031F364FE6BCAFC53C5E67762E
-4A56A337BE493D98B1A622111695BFA62F24A360018CD3561C50A7829F1323C7
-010D7F42F3448E85C8BA28F7C976D359F48A44EDD9473B5B2491AFE53F211352
-946C1733350E2873CC9D6CDE23299880D06942861606EA5B9A15F10977B4B335
-6F94F812E27DBF2B66F456263B173694B8AEB7C4A4B9052B2956F9E35B58327C
-52480AD948F2343DBD34F890A4889B09D2BD8DE5F42B6508ABD8CAEAE948F3CB
-356C747EE57BEA88CAB84EC46470DAEB0F16E1BCD4F56B63457EA53ADA6FD732
-17300BD3B424A22858646670B7DFFDA790430DA60B6379D2B7C7D9568F3F9F39
-4637E2004FA543C51A1F2ABF276F84A229FC7D5C6637D7955168E72A8763C6A5
-23C601F43EA42E8D655F424B0AF019D4DF85A6BCE6A7F99EF1A26B4EBD666B76
-5D59C0DA0FFC2B7FFE465D9D4ADFE7733DE59233A0849D22658A0728C7D79457
-3C921368016F962E80EAB39A8F03BF5F874EF813ABA00A9447BE489348F89DB2
-77CBACD7AF7224C7879C9414F638B07706E65C746AB41A8E44A277C49D16C697
-97447F8A3FEDF43A4BC024C1297F76C230A115E1F8E41BC7DB30CBD8FFA145D2
-8B9AC6A64286D2872A364EB7A859ED6FCE706823B90C230C5DB4842C0C10EE71
-480E98BE76BEF753024DF66B8F784D64DD12BDA7036060CA3B4C35195D8CD31C
-27BAFF1BEACA737F0544DEF3BA67A47507E3E5B2D90722CDB59F73BC8B15F6EB
-E15FB7C06CFC6DF4C7F1CF59F5718D018036FBAAC9AC68207A646C2EC9FDE4FC
-5BBCF95B9BB81A5CDCC40939BD2E32CEC274DDD72C7B5975F8DE84876D48118F
-AD4932AC06879A390E6A0CF725717185DE1E7F6D70B67822CBF1B848B9E80759
-58E4D60BC370B72A727B0703561EE1A90CD7CA8E2FA45FBA019ED457F7DEFEB1
-4DC8D2A91199AD3DC93CE419E904BB2FC04B37B1624FD578BF571F7EFA277B4F
-F8C964513CE9B56F7BDFA7984456329A81AC002FCAFEA98D4F94EE556526F58C
-96D40F1038F1E9618A44539C64E9CF4D7BC0D728871D447BE4ABA68F0205F028
-824EE559CA0AE56C163F9A49FA23000FC9C177A371D6CFA62943AB875A99E2DE
-1261AAC3EA806D10AC0171F72AE75F338471B77DA0BF4E8F9EF25F9FA388AC28
-BC435B66CB14E016B9CC5A275075456D2D5FD3D08C5CDCCB7ECC6353AB666795
-56A9432234E9EC9A134C3EC955F22021C84256B3A3EDD6AC997867BF8B9D88B0
-7EE90A2E9869A38AEF9352E80F51A43004B7A5535DA3460D790E254C5DF41173
-1F90640467FCA9DE7E875D5458073D3BBD90982D7F0E1FDA6BF55460720AEE5A
-C12588D77C54DA0AFE218694B352F33FB3984A9D7C5AA45449565B8951EE297F
-6C51E6D954D3ED2790D6FEBAFFFC1D564A1563D1394EF6BBF254BA1742B7A9CB
-51EB473C2E592B8E630398156AE9DF5C080F2F649841790C551640C1F9F1DB72
-40341A67ABA2DBBE19DFEDED0EB2931987AFB1BDE099703AE6671FA58F43366E
-6D472BB8BE0AEA860512F44BAF1FE040901E01642D846C499C244A83B709C7D3
-4793049D6DE536F7492B46FA10DC5F5CF3EE374D4D49236EE777D039E542221D
-B053F050211BC5F6B6B95288AE851B2E87FFC66E5BB27A255DAF8ABDAFE0354F
-D4718E08821951A410622F1495CF743F30DC543251E94B21C80E2D85001E1A9C
-96AD334910A690B0EE191AFDBEDBF96B6BED5C6683EB0042CE5FCE70C1E0EBD4
-C0550349CF93F9079D652A003A0D41C668BABB14AFA9608204F446217F0CB953
-416FA1E48DC2052853A668987D9DE8597841CE513683230524CB4E6768D4AA4A
-81AC8213007B028FE62E4D6CDB7A2DC26AD18F53B9B665B87E2914FA2057DD42
-45EAFDD5ABA1C98CC81B0FF070C9744C7540BBADBF905C09B323B79E0F71480E
-6DA068E373C1C63BB140C6F486BACEE780E870FD8202AA866F2321075343DE64
-EB0949221898FA44AA8A668C40EA5635B6933E423B1CC550F9C46F271AFFAF02
-4880DB5ADB37CE6A7CBE46F92E3A6030F1C63020B4571751980CADA44203427E
-0BA498211ABED86F9D1AA8EE4CE55DABFDFE7169189710B20E0D0774C4995A13
-25E2616CA1CA25AAE332E74C6E25E48FADDEAA0EE4098E7BB89636723733A580
-E1D464A2D15C794368AEC92126D438658517778969B520048F728BA6AC093FF8
-E769F804926D41CE6E829462C1525B166F8ABD823A5503AF6C9300BF815610D9
-48CF6233A1D0070D855E2DD6350257CA6F4DD89F2BB30617F2C86227ABC51338
-8F7667BBAB17C07F88023B973A92E463CCCD1CA89B419758FDA78A17E5F25D91
-FEDEC91955F2E4C76B75D993263AF64D8663E41B88506190C88578BD9EF01F7F
-7243497C426DF07DF398639DFEFD92C2D6FFED2BAE0B525FEC90F988E0949DD8
-A41A614692293D00E90B09FAB3BA96458ACF36C8D796D413DF4548F9EFFAF582
-F3ECCD06B5B07CB48EF7E2816108D7E268F92ABE7D9B20E415D5CEED227F6FD8
-FDF38512C5CD1A8B602BE337E0D840E4A49DD9AD0220AE58EE0911BC1E17FC1B
-563DD44A8901EFBE260AB88595C2A4D180B28458BFAC6276D1D0603509C94FFD
-ABA584AB41BCCBE97E78AE6E8E79889A6199156602E83EEADEE4813118DBA49A
-68D8C91F7E1431E37BDD12706798644C8713B854EE93E510FC0457144A42C1D9
-150F30F39BE36095F1482A461D8BCA159E58488382F72C71017CF92C304810F4
-6A38CCA4D66041AFA9F1016ED55BC882E9CD1D30CC82AC2F5BA5635953FF24E4
-390FDE10949A60967315FFF42F59AB2A3D97ED36A65EF4CC10EC9B49B1D22B0B
-DE2B846054C6CC7FFEA598EBC798BAE09A75F8B33AAA6FE1D3302F4DFDE51BF9
-0EBEA3BFC9D1C1FEB0E5670825F46ECD09906BD78B3CB1C39FFB4B01FC4F1DEF
-8E8BBFE19837A411D2CF31EF1A1503A82464B12EDE45AC70D110B83BD9602457
-4E96650BC565A9A663990ECF79EE977BC37F003F4F43209C6C24B3A00B4B80E1
-58D707F12DEC61951AC896C3465A52934AE77DA39F9AC9DE18D1BAE9F8373C9E
-4D61A76A7C929BD6D3C676563FE33C8C22EE06970BBB7148E227C9E5638F7A69
-C769709E5697695533E9BBDB921488B1E3DB88028339EEC1421EB20DF4077409
-5F0FCA6FE05E1D5FC8EEAE009D6E94FEE91E3C53D01F59CA6E4FC893AE2FC768
-91948A3DC14B197A6905E8EC6E3BDEC0BE6C14B064F80AC7FBFEF126D8443A86
-7F0F339FEBDCD762E946D9C5A8F42F885E21C42D9F49A6A84C563251E295C999
-F8B8BFFF8D8BFF8A48FE3073A3510B6CA88A5BD8862160065F36B809E74A3F04
-E75BBF9890D291B775AA8CAC5E3CE354B68C5FCB93D8EB7D0B76FE52A91926B6
-4C7A62298FE63468F759764E6317105D8664F888693059377D483F33861A989A
-B9B9D38EF9AA511F0D10BA8B46880D23EA9F037D4A25D896AC09BEFFFE33B5B4
-F6BC116669D580FA690BB859E15CA38E2547AEFAF36B5B95C435388CD23B5647
-B4F386163D139E003EC90CC6A13D86DD680642614C07C3D95D10ADEC178D2575
-EC8DC49B0BFC9A52EA97A850387D3C30103AE324DA8716FE800250AA50ACF10C
-A428030B8091049E61B086F0974560103FC31A9F71B28594C49CDFA4DA4D8E2F
-7235D6C585E3904F7294F8876AE545941C27E11BDAD37CBCEF264D54DB7422A1
-6E998BC25684999EA11AF586564ACF1ED8518D1156F7B108A98D3CEB03B86F18
-10D2648C9D302609AC08D18D7D74286C75757804514BC71D3AE002DE492CD762
-39975365045F97D441FBB6698DE1EC21A936651C0B975D4D6BA24C6305271979
-89C9ADF920E095E1BBBD19F704AF3100916B989DCE683A295C32ED616CE3EB41
-7C01188A769E25FD218966F6BE23EBEF4CBEDE39E065F7AAAA54016E6272CFFC
-C2229FFB2B0E4852F9546D906374F4E7A8FE049549039D0F39E9028A4DFFA134
-FE9690A26B0E4958BF6F1C5C94E168E36374D6D20A827E81230597283CB17558
-0C80A5427D9CF7F8AAE75FDFEE8E08742F6533DF5DC12EB95624B24EACB5635E
-4954ABAC1787F69663DB94CD355294D0630C402D074139BDCEF69587885FFE28
-B2383C12CB646398988559D6E291E603008216F37B6C6009C1F46491EE8996C7
-A8F840E08EDB45F67A3E48D073ADD10D8ED57AA5D76076707AE1CB8EED219AFA
-45791920EFFEA862F9902231E99E76DA9AD76F2B1ADFC634C8E1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 39 /quoteright put
-dup 65 /A put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB75348A88CC361FF06E984C86AF0EA429
-DAA5808CCE3583664AEFE0C59EDA04A147FB51227A5AB0C13942323E9B3733DD
-3EE7DF7F774DE5D0D0980DA8C0192983F1E3EF18481EAF1EFEDA0068BCBDB28A
-7FC7D9191EFFC574588DEC1E180341DC959F8EF56ED5B19F50AA82A4653649B7
-CDCA11A1FF27AFA7FF189A7E8A7C0E94AEEC901DDEB541604DEC0FE90FA0685A
-FDEADEC90DFCF25D074ECABBEF0F518FF620E5DC46EEFB4EFF37B0A862754A46
-567F057C58A40714D712EA5A6F783D9A1C7AECD26458D64C2C203CBD059208D6
-F0AC8240A745488259475394331C07AE954D0E9CA3C467D35F09441535A222F5
-57A2FF2E6A20548CA3C7598CCD31AFAA761AC507A0C0B4A25D660EFE5357807A
-77F869A500A973C94A94F447DCD06A6BD6CE911E361C39C67BDE63F8C9C8DA37
-EF3B38F974D988A76BDFDFE0AB54DA1A0ED775A0F7E567AEEBE683580D9ED9EA
-DBD427477C504FBDBB53FAAAD9CDEEC4F30529BFFE61593EC32F78BA5CB44620
-14889B2495D30F49AA78518FABA939E0C08F86A4A117A55B66ADF5E35E5C247C
-3FCF5311672DAC9438EB2A92AEF7D7D4DB8860F63748EE51C7A13082B3BD6FE1
-DC8600DA605E7F6E33421392AE906279B0A58DDFB8AFB3AFC8592B8299282AE9
-51A552F05503FC6A1B269DF1B246989B3B30A1B0223A63DFD1D98157466D4AC0
-385E4BA07A9E17F29BC10BA58BA9BA1974FD3EABCA1644E74824B87F4C41CA25
-CB10397710231F7FE686465E27FE510D839343D898D4064F292E8A5F4636102D
-47AB90B92FAFC17C1C1490700228F6E6B1BDEEF3977F38F1957FD88FA2A414AA
-85971BBB1161022A4A5AB2AA0E7AD5C3C5D5B1BAABA354F932E78031D291D5F7
-5E7468FBC1E2D97BB54D3AB98345D417A17DAD8B50DE88A8E4AF52C917F2D783
-A0838DB657760028018A6DF5459B833153309B0BAB7096BDE56E756806AB93FC
-7665B3A10D5136CF2C1DDEB46F75621D3BA5B0ED2BA5C45D0E8B3D2B87DDA606
-C70073653199884FE19365E131459CF0FB211BB75DDCC6505DD175A8598CDB1E
-E4C6C6C3347DADA12AF51C1AD7DB768FB5F17D1B591FBA7342D32F498E39F407
-915DA2F10E46CF71C05A7C911225D77F4026209BA6F9C61C7ED769974A2FE814
-CEAAFBF57DA10DA81012C8A35B8B42D6C0E3D442BD3D390982DE9C6EBC536FD4
-23925265DA44A58B39706B68677909FCE4594D09593A54A7B31AA85083BD283C
-41856413B805E74825947FC19D0524EDB4FCE7174D564590C4E03686D801CF39
-8B1717DC342786E89098DBBFA5EACAC348F64433A006D7187CD223E68DE58D02
-FF0136F74ADC953BC0A8C35545051F924F28778476E54EA5811602FC309960B3
-63669FC171B83EF8D1F29EDB48884721FD26065D531DFE1076DF3356B70B8135
-CD9A062CDB8F2769090D20D2E7984E2DBCE6263447742DD47390E718B24CF012
-6875171044F417B65545DC95095AE29F930962A5C26FFDE6F07651D6318B92F5
-33800F87623469CA5524C8017545B592D4F79CA325DD1242B99591C1968592E6
-0AC264930E026605F126B0501C6C2A860942778AF2D8E297EAE9C37C82A04A0B
-61DC60489DCB2841518702F52CF70764F9B35C5DE972A7E5ABFD044E2B1EBF46
-98BC184F180B00DE7477500215233421A8843625DB9E31C9D02FB4F15A8E8E66
-A9CBABB97C200BA49134022BDCE32E7D009C5B4780FB3159C5FFDD098C82056E
-5EA48C2B4A4F2BCDDBED9ADB42F013A8C55E645DACD78C8996CE56D2078B87A6
-1AAC462068FDDCF05F721D283116F92C36FEDB735E1DC77298FAC12FDE54E18C
-F9C3D02F08C60DB2E848799E196102EEAC0B24B2637B6DE7FD4AD777D1C40EAE
-670D7379F16FA2AE2B170801999722FF8A58BB1CBD48D37FD10C0CDDDD3330BA
-72574248DC590D87771A86FC3380E5EC767D3D890B8275CB3E295E2132F2C786
-BB7D3C97BB72812531B9DAF900AA6C208847D23F352E921AB4CD41105398C97D
-3C950E596E47F5B62965035722346AC6A80D72B2C24A8220EF7478DB250B5A1E
-598E4888B295E09808542739E9189E18139439289B65276F834F61B05CC37EBD
-1092E78E7EFF694B5FF4494035D7AEA0479DDB5EA3B6962C1EFE9D292992CA10
-F7495A5401050F335FDF3878EE8AAC959D6361C4F9E3D50330511068F4D2EBFE
-AE0ECA2ACF102559FBB86E05C153085793D9ABBB0E9699322026EA9464C80069
-1906BD5A2B308DFCA9CB0F9D82161C7537FFC9C58B4C23DA8FAC2ADD3241568A
-26BEE014ABA159ACD3FC6A568A0BE3354E8D7B52033B61CB6E4AC02C16F32097
-2B7D0CAC58B1317A553F02A15DDDAD9FB67587BA782475F9CE5F6B895510A888
-9593FC764D8FC61AC06D77A67C29F9DD20834C42BBD0C385F00D17C742B11D8B
-73F5465D8A79C9935E05E607B956C12A651B3857A3EE00D334C41F428FC138D3
-53802C501A32F74B10C1D8414B843E099F81D65DC64C3322BE42A2F51F447B66
-930EE60A018591DCCF5AE2174E182E0D42918A45C6551A6D1F41792A515B1A44
-79F1B68A7714969B92EC7A705CD250DDD345BE635520B777D27AD42D1273A6AF
-BA7666B6AD2D39F294D0A807942424C98C29F57CBC71675576CBE37B6AE14E02
-75C5C228A36E88BEF81E556035AC163E9F968B19722E4150F763FF8572589D1D
-9E89D231B639D325B6609E2365F53C726EF4A2E162B6A01BCC04C79776277BA5
-8200AB682CAA33799D6D6ABA86FCAD451BED90F1B61B95F80C6814C514DE23A4
-F59BD7A88774ED28266115BD95C642A1793661935D8A35C263113C73E1994E53
-A357A035911E5563DFD2552D6C9D4097C4F78B94EC5958C5F07843B42CD93BB0
-A6661C09AAE9CEC70AE17318E380D2691700535D682A788CCCEF215502A867B6
-DA989902CD0D31C57113CF74F082404E375B4FE287656D513E2540F5724646DE
-3EBA8A39D2C118C9A4916D041FAC8874D262AE167FB9B8661E82A3ECD239583C
-AC5A80D819BC0013255C5BD4C7BFD2952C34F26B394B2CCC50B6C1341D7DB8AC
-0B39F5379402382D884561733CD518C32DFF595CFA87CD17372129C91C7B7FC6
-EBF76C0884EEDCCD5DEFDC2696601E9EDF002FD91808E466BE58A602CAA5845B
-C60B26784B58B92F51511FFBBA594C2424AD4C5344827B9D67491E99C27B1AE3
-03F9FBBF04C63F322599C1F6D772DC7EAE4C26C86E65A81A5CD06407D2A42423
-5999A87DBD3D5AEE7E774F4BE15DC486C54395EFB123321D8FFA2AFC051B0237
-63FC0CBB60F0CE13F5BB5EFA445F0C5D81B75F2B3AF4FD7E26C346314B32B80E
-A073F454E8622801ABFA763F36693EAFE641295F7D51A53424535154963F30B2
-D9E8FD0748A8E278BF3CAFF5D4337DDAA5ACF7A4F82847703688EF5D2DB8DD24
-B388AD865050C2C28B167F0AABB919CE1C0500A1CE10271FCAB7A14C483CCD52
-5404DBF591F9EF61F6E082B80B32B83B105BE24470097F393422E330099A3A2F
-289B92B44D38AE648600DC2DD7BE84866E405BC986F23CE0AEA7437AF588A160
-AFA69A70927DA8437556C98065874B2416BE7683327973E4097B8C94717B2F7B
-79D179BFBCD0E2FC77C8A4623F857CBD857EF1B485C7FA230A806038006C777F
-5BCC1BF710EAAD9523858AEE2973AB9C70AD95327D466BE8518D70D08D46E4E3
-DD6CF72A0C9956C07E7148F9D90BBB817EAB427B734BC83F361726227A137BDC
-45FB153BE61E21757849A644AF134EB86918FE8BCE43C7EC7101A82887931318
-A348CD2264F10DE4725B127A9E7E823447D39845D1D060FAF5E86D756114FA65
-D8007519E459B062EF8EE0775617C602EEF0C17860158F0EDBF79FA3CAD1EAB0
-0DFCDF51E7FC159709C85BEFB743580CEE0C49ADAC4F71053FB7A6E245602D64
-20E5855BB820518B00BA855061C4569D8E66C8FBB005C29DD4E7FD43367BDFF3
-BA85A5BF6ED36E70D751715FA4AD082544AD60541D5F6469E3AAC78D64411A09
-F17DEB69C822BF575C6FF02C33C51FC4810ADFFC874AB6376C94E06282458F67
-A86ACCBB0C9E317862C678602FF2186F7994274B2F19FC4A6DAC8E559D44B09C
-D64820927160FD73CE7C5544A904A2988128426393D9A03180576A0A11B32672
-9F7B443DF1A710B6CC063C669CE12EC3008505CA5BA770BDDCA1D430B06C02F6
-F64A6923F4FA8DB245396FED90AA9BC3365B84B8B9EF4B86B254A272990B4F8D
-9674F434BE00CC9369B531CD0501FABE4C0674C477025BDC265F53C8D14434ED
-24EE12729BAD9F779E1BBC463E0C646F70B9A5AED237A7590325AA47DFE30D8B
-6DEC347CBAE4905FF354C5BE94B28A7898795062F76F0DF3533B18FC51CED574
-5A0DFD920E845DDADFF6FADFE5C9341A4A98AB1A5DA0089E9EEBBF3191ABBDDD
-C04FA52CB368417CFC1702795C52A6961933053593CAB52F062AFD431AA7611D
-70FB93A6228EEFE07A1AF5234E4DEC8D3EE1DE5E078A2B9EAB41273530B78A1D
-CE7737EEEDB815999817F504C167F25D7183E80A43859254EB373C46D51980A9
-3A406E4BD0E78B2A2F0F52595180836BA353FF233BDA4B56D3573318D20263AA
-76CC364EA8E9E75B24698F61105D36B949927845EC52A0B3583497B070B74FFC
-EBE65224667A63E69998F9B156DDB27F3BBFA17E991C0B4B13853DD2F5A8FE2D
-B1BCF632449D3D3CB9ACB3BDFB130060240CEC6534F602A5E43CBA96D779A656
-3E15778D99BBFCA932C60B94643B2339B4803BC3743A5C842F29721F1BF2C138
-5C1548B463E21E6D0CA7ED07B177CF68CF6F709A4B437A38B1FDD4E1E3A3417A
-BDFE26CCC5D6A7F683D3CEAFAD19591AB592E81161A91A11071E47AE107AC70E
-C7CAB5D72269FE1670B3D10AD9A90E2D3BF34A8638814A56868A32ACDE113048
-275995BA49317E1003475996F17B7D41B12FAA82FFB52CF6668ADCD2BDCB7E8C
-F21BCE1B4D97B79349CE033DEC5D4C8DDFA0AD9D286B8CB1646F8A304D2467C4
-A12326E5C4174BC8329F8DB1EDF019E7CC0FE0F8176EC39E0FB0905382A6969E
-5CF103BFFA1E1DE4985EF6453DFA2FA53002851CEAD3EDF5FAB66408EBC17AA3
-9EC0E6BDD5D38726C8AEA70C3240AAC01E3487CAA7944AD52401AE2B95A9ED21
-D05FDC0811984E5D3C5E5934A1CA4534131D8D7965DFACB3C3250DD046CFB55B
-0E03B3331BAA231320B330C0675CD166255236CC5B2D01C0FD39D5CA7DF31D18
-EE04AA5511660825BA4BBBC9ECEFD923241043BF1CEB6F24F58D656C9765054F
-F3FDBDC074BA94D0902D9D8258AA50704EDB6FE7FF58200C2D046EAA3522B2AB
-24CA37EE148431C43352DB5B32C9FFCA36C23187ECD74730EAEC9CE10E0FEC8D
-A6EC21BCE32E9B5B1FB55A13763ACA609C1D4A76155C00514C3C0F286EA3150C
-A783BFE5645B765100EDD82187080B18B25032CC5CFF50E33DF3EC49119B3264
-1C82E80555EC679F256C541BC0462C6CBD8C29BE52F989FDCB56A8FDFBFDDD92
-25CB1E3FF1A8A9B41DD5903D8488CCD93D33F93EE2BC829D3217E8F560585C8C
-3E0C591E6F6F1783407FD915EBFC192272D2DB8B204AFF08B44109E1084EE2D2
-D176A009653C93D6D8A5DD1C2DF3F33C35DA160B0B2A672AA79C0D19F2C2C310
-5324D017B6BD468F6D74C22E794D96CE47825E7496C57A7C4211329DC7430BA6
-CB4E5DE36551D8BEB8CDA909F058A37C4AE43C7E7892D97138F0C978C5976B5C
-23CD75BCCCBA2F35125922C862D2F03CE311892ACA63061062A35DF1A5D9BBE8
-50178B4907CCC91CDAD2BC7650766A5D3A856522D55D58FD45F10482651B498A
-8245EBDDB458462BC1CB0D2BF02A9CA2AA073D1508C807D9F965C6BCA9035CEE
-E6FD4F676DF030CB575D56872213D09215F8637EAF2B43755F421150F8E417D7
-201F169FE552E734125444054AC23CFE1CADFB2C17F1C47FC7F8D4E297044E46
-ACA2E7895C595508CF6C0D8C9AA05C4396C7543F09DCFAFDDDB1680160911F93
-AD283A6DEABC4C24372896714BB58746A6203558EE31FC3647C19FFB7615C88A
-D12E66563E8CE1F7172573E2B1E0751D8724F49EEBECDF6B1C49C6058F98D437
-69892335A14D7152A315646D1EDAFF7502D0BC9ACE0BB73FBBB07FFC46832827
-51EC9E73F4861E961F965F1010C08CFB9939B44064421F551619075669AB3F81
-C65C83179707EEAA42AEC9A86B4DE8C71B96377BEDB5221353147539F55C70CE
-4A1C37D9981EE55D3A43A059E496759B489AA20B4A1303AC91345CBBB02996DF
-99192F8DCBE79E892A025DE659BEAE2C29E142C39DCA6B713C40CF28871BA76C
-EA499830D1BFD8F8C25EABFF5C52AF504512B6888B7B97B3BD7AD376628CCC51
-638DCA8DB0BF2A96DA8453DDA7949A6BECDFF144D47CA2B6C021EC70B326530D
-8DB5D1D38E540C9BD59063764B54E815DA5186E6BB8710E3BFBF9B0B47D67131
-53AFB109C8CC568B80938D79BF8940B49C4E791E745CB42C11CC3BACAE2E441C
-B8FE421C508F0FB4608F267550C22B0680946EC713A652F5CE2244875F083469
-D4A423D03F87B68C44FDB8B1D761FDDD1DF7AA530E944E9D11113ED28335CCE1
-52320822ED83A43EB09D667B9030152BDE281648ADF0097BB9017D2FCD30DF37
-9B400499EF9D2849210072D0EA54D85E3741CA5B02C572E94E1310EF158F0DFA
-952AB8509586C7A2A0094D1F5224AA198BC90D95F2572D0DF010AB33F8AEADE2
-30CBEFBE7FC77717B84FC7E6BB23450E778409E4EE5D3E2D92BFFAB71FF3A5B8
-568F589F585225C32840295C9103254E204BFCEF67BCA6410921CDBF7A3E0668
-CBB54705E6277A11C5DBC25EF01463FE3E0CCF935122E17BD4586C595BE24806
-2B24C64C2E8528D078490552D884B40DF98B651A043D8020B2F76707854EA72C
-DA9F71A0031FA6D5271B3A377E23DB5A3857B7B3E103A9EA52C8181A2368CEE1
-A048B884B2B7601F2571D8BF4F7216F49925E21DF9DE50E928B8EA3B45F1A077
-6F7020B6B691DCE542A3B586CFA415A1FEEF3C509329E6155F00502A0CB8F382
-3665912D4080A34C5FFC03B903D79B174291D80E6D971B91BE007F31D99B5691
-F7DA52C2C48F09ADBAB4E04777AF3B46C56EE9FB04E80A281524B4816F5230BA
-5D8933CFE44B1ADF794D2CBD81A992EBBFA12CF3EFE6084E30F9DADA7A98E391
-8B302F31BF0D1A8DCDDD3246F4DE2567DBB9A788AF1A0C229459EAC9C1B4B4F7
-1681E03FA1D8843C79B41D8FF39905A6D19B68ECB3B8EB9E495F1BFDB277AEFB
-0BA23BDF08354A5393B46B3D2941B2095CDD185F15CCAB135839A3F9E0E7F745
-68093F11F14CA8C721A5E6444273C474D4EC36AF3136600ED9739DF66C9E16B2
-BDE8C991C18BE27705E2020EB6559C999C3638B69E0D3BC891BB96287539C03D
-7F1565BF1EE9DAB1E3BAA772C5E27EDC784561B8629F2772FCF7E8676F08BE57
-C55271AFFA8F1E652AF7294EF930ED19685748D182E03EF7DED1E6ED62BABFAB
-6FA1AE6181F9B244D030F14A79FF78E7A7EA70AB34B21AD30D3E3FB887E1CE6E
-8E70C82F917A8ACB1DB5F345693DD5E2F581AE9E80C88D20E6D0B617F08CCC29
-BC1FD85C1B6F668F914C8032CB100053F4690719638C51D5BBE000ED31180A6D
-40D6B42775BB54421E03CE2D596B47FB4A6BDD1A0CCDD37844E250D4336E93CE
-8A70E71267A1AF03FCFC7CD1A12AEF459EBEBEDFEDA8B31A76415502C3A82C1C
-538F87460B7162F41E2559D647669239EEB99FB41E1CC694746A6EFB8ED381B9
-35F8F201847F08C27FB9E170F6BA59D07B1B7EFCAAA167C62CF2BD75EEF182C4
-A4588E3EEEB1571823036043EDB662D32E7E372534DC8801241AEE2221FF2D1E
-7844F79C3D73FCFFCE1050C5D40EB619D648DF1BEB634EFCDFE9775FDB3EDF08
-4E9AB503CD5F0216F98B4FBDCB606B972A6C332637063B8548F4EF4FC59ED984
-7E28D6A561C6439296796FC9ACE259AFD2DE40FA55507D539B99452A6ACD4C08
-CA9B1387566CADD24240F6CD83F4B4281EDEF6FB554550D1E61BD633BB73B342
-5163AFE50FFAB54AB77ED91CED8F61AB70FE75CD51E4EE6D8DF6D4AD65457D8D
-5B25979A6DF528980ECFDE8E759E16FDF224EBEA63CE9752A4A9A137BFF33651
-E3CDD7107195FFC80432DD14E0D87111D1603DEB03AC0CAA83F5E14C52CE058D
-8720021C890F706171DE4465778DAADF51818BAD93E3BD5D341506E7360FB442
-682462047F8468639EE449F84A2A2DB996D14B67F9121B3087EA533C7A2CD845
-14602B6E9DE314B2DF4597D997E392473E7C6EDAE32AB276C75C3D7538C5898A
-F6386C143628D3D02167A908DA2C4FE79F105DAB061DBC044529A8C0BE5EB56E
-629855FA98A8C6B561EA42F51D2027244E9242B7FB3E0BA4EBCC597D46970759
-B2F93BFDACF4066D7295D5B50708F8440DD6CF219400196BEFDDFF2AF983505A
-F863D9D2739D56579B8CDBDD82031A8A0B7876206C77A0040F49671F2A6C1FC1
-07F89DD6610231B21E1366564EA5B0B0E5C5A967BB72B25403517AA82E2B0B35
-33CB67D62E4588EEC5E70306AC75FA37200D6391985471C2882CFAEF192505FA
-F1CC07468FD20CCCCA3E9EEC75114600B1690224D420CE148154C20CD57D8C5E
-28B1BA126F7279D74090DCAA7EC1627573542E0164E1CADFB6331138D1A648D1
-78C1B8FBB5F59BFA7C692F5050E39DF3DDA64B9FF7B95ADC9B38ABA48AA1D518
-C0017431E642AF3BC527A020CFD5258B5DDFA3E61C75788EAC9071743277D111
-247B7A12DA40E12692C9430A8D01C6515CB666F8BF3DACEFC9434E40C6474EBE
-169D52BDD56B95B03A833B4A5267608301306E147C16424F7ED37B0ACBEA9B50
-E93663E01C4342DCE4532865C93AC29A998A5D8954C02EC3387A305D73744167
-5A4EC1C714C3C5235850E2C92F458F608A60E659D4CCF7EED9867F2958ABE76B
-9AE4D51F139D515A2DB73E1C6C62FF20EEB49C487F5B84F7969BB6EF65778359
-27F8EE4D7484FE2F1BF4A34DC4D30058B307D8D0093E7F261886F96824821402
-A3BBEF11C22022F4424CBFB3D340B77B2F1FC842180166BD64DFE4EA4C79479B
-981D4D308CA3BCBFC8B1F9ED026D3F71B9550E031A9959E6B32FE7E8C6C31EAC
-FE5AA56B0C41CFC69B0DB97E742AC0C93CEB2029E7E4B18E795CE65D78098DA1
-D254B7B552C40A832B345A32F3B1ED661F999E434C712F1A3656681AA24496ED
-75B60D5108EA95E5FAD9C0FE7D58D82CE2CEADB6E053078ADA4894DA2AF57097
-D3156A571106A1408CFE466FAB6317FB8191105A3F81C02DAD4B6757FBD80A43
-D1331F9014DF3E1FEFF80CC4CC0096F28374F8EC623AAB3F34D2CAA2E8050048
-0A688D806A369AB0410EFC3452D9E0266A2A3B46FEB83FC2045965C3D0E4148A
-2B156CF2509A89500177AC550864D8C7949F8587316161CA8A161DC2FF03C805
-33677D70645842BDD3A430057F4CBEE4B59E785B53AB669ADF4FA02C5B9378F6
-D8047EBA76C1D54958491545819B08EF0BD9F21A3A38CEB6B56C6F1A77F9E178
-AB4218772CEAD7B9AA32FC3DC062A86E94B8091E9D63F51B43B7F9DA2BDF1B49
-461FC52BD4EA7CE9866415C961F6995E9A4CF9F2DEB2154CE67738330EDB9D85
-57193E5385ECD76B7C33D375B280266E78D8D9A23AA84178E5BF5F5402B98949
-A6CD7F19CC67895E3FE52115A74E51FA99938915C5AEE4215D0497D95446D2ED
-7424D20A04BB488E4C6ED25F90C910CD72B960EA18949FC1A2342666A4BC4D62
-B30BE383E4C05A99DE9AF1068CEE15F32676973B666D9DB76640EEB09EB94DAA
-4C0AA5104C716252020FD76ED10D4306A2F622399F481297C81664483CC81EE0
-55B4064D60EF02714CCBE6B5EC8CD3A94FF81944AFDB6188AC142AF7E5D17648
-EE477A9FD8384BC7E02A90693D80D18C6BF2E27DA9AC628BB8FF3FD772208AE6
-DDD3EFD2FA8B5842C28471EF6192719075453DB73883FD71B43F93C6327BDBB5
-70C98A5ADDAA9A5A7186C568D5234C3F50BEC323DC5D12A93FBBF630324506DB
-EFF3D66F1C5EAAD2A0492409A1E513F48169C7B4DDC6492EC9350AFC8F055ED1
-0DE6366A9EDE5F11F5B2EA3E506A43B24137C98E8520DF7E80A898FFE497182E
-9F129E2B8AC9A894739763E54A3B90B4325EE0588DC84FA4F516C908F48B555C
-C171C5F4CC0A8C8B62F034E1BF8250
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 15 /ffl put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
-044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
-A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
-23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
-19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
-1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
-8BF2799C1BC14A4900169BBA8D40165ECCD95F308459A6CC9D24D3C9B3F9E25F
-E63219951D01A5EB5C502A0E63A01F7799ED09A9F6136FD925A230C806B59F1C
-A066AA5E41019226C749210F2A1A6945AD623657FE886A97246681F8A18698DD
-76DCDA3AE7BB19D9196570E825455DED18A1596ADB5220B53EA8A9524C2A0C42
-3C1A39568627E161FBC383B505AA4EE039710226748630D911E1FDAA35182B40
-6F5EFF4D985260E0E9A7B926A772D6D2966BE5734E4328ECCCA41BC7FB2AA6B0
-04367305969A40A878F5DD141F01502D4C51C572889531EA0C8EFD79CEE82ACC
-3859F267CA939EEBF220BE2F518657AB4934CB960E8D54CA8DE3A380B6CC7095
-FEB54BBBB02C2EDFCCF04C3B4B3484F3BE4AC64C19A3547153AEF2BB75E1D3F4
-AA9BA6731339A7E169901F396A396DFB81950665B57D49852C1637D6D8A5E407
-A441B08C4D3D511503C42ED14B57EC35E9DC6E992AEC0B7953B97F18E3F9F927
-6E155E500654C02E6D779988B3EE1FC8A33ABDBAA45C9186BC8D36AFC031CAC4
-5FDE21F350ECF045E0D35CCC460F031530EDF88C59CCA45BE0F3DFB533D17FBE
-60BC07EFB8B1D5CFEF8146EA2B909BF548BB8151BFE3E8A8158D3748C9DD4B3A
-7484A9E4958348FDFE5E8943C366C4667575A3AE1B2B1A61078CB6078AAC02EF
-FBE48232FF43F2B510FF11AEA2BBDD55C9A20F33C8D496CEE443ABD571DD257C
-BDEFF605D31FE33F6C6C82BF5E45FB8D2EA2099D6BBF6076453856BBE653B85D
-0E984918CE1DBBB6ADA1F2AFFA8E0EAA741CA9EF5B88D6548263978CBBDA462E
-AD93E96F32B388E69253F9789CA251B4A030AE68C2DA0B861C7D4382622C93E0
-8523545C474433A320169E81E078A293BA6718158EA52E6F8F43AED5AB22CAD0
-7E4B9E827DEA15851019889EE4FD1AFFF3B8F19F67EE437438ED7E2260E6C987
-A253652E8BD774BA97E8210CFD5B553507BAD6A25E2270375D3B2A9C10BDC9E5
-BB6ABC1B18F16150B0C7AEF9C5A75507C95FDB3A12033CB640109DF99F05DB6E
-3B54C1D48D59AD5F6DFDDBF64CF8CA20204BB2B3AA5A8564971B118B57A80404
-BABAFAA9C9B7769F7065C1BDA65C485B7EB3FFEA52CD9F71CF03EA596CB321DE
-7DF5CDB5823DE135ED51FCBA7E7AF7E9CED20BFCFDEF1ADB13C14287428F93E2
-BDA58A39A3E3B6200F06CEAA6FC6B43FC49A6FBE3A1706A58F2662BB9A4CE2A1
-D602FA77561E99C529C2F8AD6C132641994F6009E08B86817F96C0B40FE3017F
-FD2D11D82879EC428204EDE81E781B3C3AFBECA405C1F6EE5530DFE308A0A2D0
-95532A0A5C5E07F84BD83B0BEF634FD2B7998F77CFF3AE6772DEB8A308AEB4A7
-364AF4FD503D8EA06BD2D13DBA33D446020A978D17B27A3468CE165D8E58BA89
-2F0D6C73143EAB5B9E83744D44F4B8E3F614E04E041AE7E4B143B571AF4D3ED7
-7E3FA7A40AF5F989E9FCAAB9AC5DEE1D5770B72E863F440BBD3F1DB57190C0EF
-7D37516C5D817163625B9E9AF9DE395B10905322F827A39774F811011A6F59CA
-7B4E8D099EC895B84A0257253C8BF0CB8C96D988C5AC158C3B38B11C1ABC4ACA
-7E6789D4BEDB6CAC6EEBC9D7E81F36B59E1F02E54D6D7BBF566BAA75A97D2DE1
-00967463059497E928EE1C6783F4E786C3D813E5A6A8887D84B7C20F24793DAF
-01ED90841925E8D7DC1D81B046E0DDF69D889F89200E0C4FDA4C269E45FF35D9
-FA0A4A6119F446916F1CEF55B5486A550A86ECCCA2FDD28D4513007E2B43A8F7
-96959F9EB6699E2D25BBEA7F7D5358518671E3B882FEC0AE6ECFC276F1051B3D
-5360500D35C2C8FBF13A21FD2B50BA4F87A756508739C58A5B5D8DAA000E9B6A
-0B4B998C3AB282F1F0D242552F87A594D7E0E7D159508043A7780A7359ABD208
-0D270D81B1E48B7751CF67133A95B811D7739412D31EC3A75BA68A1D40E2E1D3
-5DA3C6EE09AB16A19D769B237CF5988DD74B375A986A4860B4E564177B69495A
-7645B81B2E1D4F546AC496DAAC26F57C92DB091E42AAF075055CE085F46E3D92
-6747AEA47E14A35890C587A1E788F0ED456045CCFA36EA18A7B5F95F5C8D83E2
-AC46FE40034F9D6193948E5635A3A91A2D1032D98163F18BEF604A0C7C6C62D1
-C5CAE66D1EB7B5274F36A18E312948BE80B41762C11ECE74A523523C68AD0148
-5294DA5E8828283861F415D0FB048E2CA294847D80B0AAA2D444CB5D10DA7C31
-8F9A557865C9AECC6FA4C94DCCC5DA11F0F9566790B0539BDE668D9F48EE6F51
-BC8E558DD165DB7C7BD5948975F8CE560A92733F82B3608BFB711F98B22C6EED
-9A7F929D7195803A9410D85B127B1334B72B5B7F4864B33B30AEB2A128CDB2BD
-1FA9445ED765ECBE266F6C245209BCDAFDEE7B0B8529683D65F70FA5123DBF16
-D65D453D1966D0126766AF533983B2251151D85B9F1528B958F1FEF47DF71132
-89DF167F1D88228BB560F30571E323898DB8ACD307D118ED153360C058244929
-7D81571CD8D3057B0730CADB0F49FEB596708B1A302B1EE8B4CA0CC79B6364A7
-E703EE65922CE903B7687629C7B95580ABE9E962DA24673C31BA735ABD3BF6A4
-E3AD7DCA4114CCC2F28C0828123CFB498DFEE584D7D4CD81D31DA3BE001EECD2
-EF068412CFE549291C930DA45DFCC20CE992AF2D06652085BC27832C3E08FB59
-ADB0D2DCFDA8D9008E0C0E43289BE184FE04A50A51187ADD60735E0C9B29092D
-0B03423661E3431C094A7C52A28C61C59FD3211F25B7436C38B36780395D28F4
-9EA931D69699F717C6F9D239DE6FD5A8562AF672C76EE3E05CF3751FF8433E61
-DE7784953301826E644EE10ABA9756D3EB2523380DFDC4E421283D2C2EE71937
-A6DEF4FE3FCA3EC6682D75AAF43876404D079FCAF33DF507B3ED2B75689EA3AC
-973798765C5F644A3AE1A1ADDA6772188FF628B735564A6B2056990D1831DA26
-49131F1997688E557751628A53D364BA097EF47C95AE15494E2B15087B46E5F1
-086471B0ABB6D5300B278BAA1FF516D6CDCB0FA7B338A79A870389D4A58DD7EF
-C0795729D4AAD590FAA29BF77CDAB611F93A3BCADE7387C5030134CE3F58D80C
-23B359B209772F9216757313F29373253F977554B74E5FED0035DBBECCFB043E
-F3E885FB79C83EFC8DE4CD2EED66F07212F62A861B1A5172330ADF91F2CC5B0E
-D1A4BCBDE8B6EF9BBFE3DF1A093F9B089CFF681190B8FCDD616CC52CF2465F8D
-1D5253DABE659FE576C87237EEFA515E3EFEF8B3BC6B7BC4F650A17EE2CD6012
-42D0DDB144723372C970D3A7A6CEB1CE098BA61C338009582F11248D7B61D5CB
-E3894686185C392EA6780A3BA85A723E063B8FC06A14F187D5E890564939AD97
-059F07A3FF56614733FC38B9372F2C0F77D0BE97B7BA209E9BEE9A4EDA4B7FD1
-DDCCF16B7C4023567440E719B6FC3674489F671BC96C4AE4D570A2B428E61721
-44BD5B6A2E69BDEAB1F9274D0DBF2E8ABCA6BC02CC76052B1EF80E55D104A4E6
-9F4D025E38048236846728AD68E3207FA85AAD40BD045D19DC0DBDEDA5BA78AF
-DF07DE378B6BC30C5CA66B8A9BDDA5024C9AFEDCD914DBCC5B39F3B8B2E2EBA4
-C14F5826138CECA74C5CFF1520288DC97095752AAFFF1AD8A2CAF6A6994FC3D0
-1E6324BF4213549DE852B1C676080AEC47057128DC0D5223F4960EC9BECB5401
-57FA525F8CAB7B6D02EDF5A91FDD604D80231264621F0779727DA2BF58F7E1AE
-C69146E6B26D579D5331752A94A43FCB37AD0FE6AFD4424747C21538285E1A8B
-8C3DE15218D8FE00F2C173602D5797AFFD4F4492D280CF2CB6FB3C5BC5D8D656
-3C71E9BDABF91958DD66CA29B62E043EDBE490BB2248612634AA9D65B243BB73
-DF7E24404714BC74C5DDD2F74472C30A506ABAB649C193A6896D42D19462F7D1
-D1651F4BC817EA40E20835E7F4147458C05A98AFEB8C10148091CF6E80251208
-E3103088EB805F4D4D5074EC4D3D7D0007FD399A7619DBE0E8DE3CB97C07352F
-E694F68F615F32A47C3C713C3109B778DA6F88619DFD6683EFAA54A7D4B10B2F
-F3449DC9BA1CE341F24CE82E49C34621333B0B8236D205C1097AEB331C4C6E1A
-F2A06FCCD003AF9B6D211ABF6E261A316A08584C7F753A31C860F1ED273B60F9
-B9EB37F9B0FD470139AD12352C8103D9D30175639805006F256E7E0F6D8CBAEC
-E52E832DB3AD32F5E164CEBD2713EF6A17DB48C09B320365ABBD1F81078E9A32
-975AC69022387DED6A3E8A246C18AA5909F4DB4F69F8678F28326E4DA473BE7C
-E91D485BC9803B43333385B5B830E432016083C8E0CFDD561F2EA010DEBAAEBB
-081527F2A68D6E53D5196CEB989C8EC3EDD36435E7655F252F82C3633D8B3351
-9AD3902E2A25FE0B259A4834BDC49834D622451017AED2B70C873842752FB1C7
-3C9E3D172096C0D9E827F94C3D782F2BD8C2292E33FE11BA7BAC380EA61899CA
-078A14D6BE7741DA74B4DA75B61F5B7577DEBAF33436D90F67E1D264BCDAAE88
-1D2361B20E3F93F6B7234A3A2057291D65D2D44E25719F881ACAF45CDDEBD768
-D4E736C3DA3F106E27B9523E40092232BAABCDF99F3842C24E51E44823E36EC6
-6516CB10477727FF318A3B2FD70FB013868B3CF26F6DCD8F3E0397E3F788BCC7
-CD360F54842160A6D6A644539C9205C8A0E5ED6DE967C33DC5CD5804101B33A8
-BA361137E9F1B7C4C86E137788B557510741A28F876FC9F0551BC1B22B081041
-96A58A431C6B4F5A3D673A2E37EE07B737CE2EEE61A0A48DD7CBB4B4253DC8B3
-394BBF0BE9D972261B5FADC92EDB286099E2A934B397EDA6B6BE06B1622BA753
-84D942F8D95D3B929D41A23D32C37D7C72E42BA0B6DF6336BBD00C8112E3B7BB
-633028F72BB49F344BB29830A09B69B2F9DD5573631BD5DAC3A89ED3B72408CF
-3382E8D7D320E54F9840DE9F9BAFD62467F6EB255CDBC6F65F78FF261307A6B9
-22880BD81DC9F8E0BB75EB76D6E2C6E79DA670AE73A485BC2A04D5C5D38F967B
-B4B344C3784ECD3FD72949A5F6FA2FEE6EA0FD4A766243CFFA595D5942B47314
-539BD1BEF3DF43974D27DAA7F264BC06B0BB10F7428C705E87444DF795468451
-FE9BD78D6240FE84BC91E90DAF07EE489B41219BD943C0DDF692EC3541D048E4
-A1756E18192B66AB1ABDCA6CCCA16AFB9A83E7B2DD15A9B79541459E8812F007
-C110E1D54EA6C4915A80A5BBD2F4FC7DE36430E9CE8BE5BE94691FD19D6E3FDE
-54A5C8AE8FA388B3C1EAE2526E8F4461FAED719967821CD4813AF968A9870521
-A67D20CAC4D8E3934C489E4B100E4019475ED77A417F2493D214752FE551FD34
-710BCCAABC0711354AA540AE18F68429EC2916635D47D5FA556BA8D538FC5289
-DFB9AB23C0AD3067DAF5476439F3B4C8EC62FAFD6E4E261BBD447F0759A8D729
-13A27DD2D85724CB2916B6394569303A6F533D9944F9B100C8BAFDB564869159
-E9195538F4595A211D5DC2FB57DE85CC88649BF18AB097413B786E09F6BB2771
-DC6BDA78ABAAB1181E594B5094AE9BADCB1FE21E7CDEE1E0E40AA7FE499E5886
-4609B8116CDAC2C8C45B05F16ACFAE78A4EEDE9C68B0374CB58BE18FC80CD462
-9C9C4B23F62076E030D5EBA290B95D821F67A7BE94BC8C6F060E6BFD401D6AE5
-107DACF218D20B053163C88E9ACC5BDD5D05CB9EB3173C43A90AED9BD317A486
-D888149E2CBDD54AA33F77CC3EC5D6EA0236AA047658EA16F6AE12BF091C1B00
-280D31767BF7AF49120D502D83EFE20600E962C634DD8E0B598921474FCB2AF2
-EB5F1CA1D1751A3624E4B18AE8A356E5A3DF1B958EBA821E97C6A5A04E03DB81
-66AB83A53C0951A073EB1922EB0E5A05FEFA035E6FD599CDC06818F72AA696B6
-D0EC5A54FACD824ACED809AB83C1DEF33241EE18222E2484B0320090014402D6
-B295E4F82BBC95A4C79AF6557FFE1431283A8DE009312ACF8274C39A05C1ED40
-2D0AB94D66A81AE677570B7AB2DF56653F97145016CEEC53AC87EC9CD5A2EBF5
-EDB185F5023BFD23D2B9BA9B020B3FB1822D0E8E254ECB5D22118EAFBD5F39D6
-07EE5886B33F2AF31E8A3C75D5DEB0696A28AC311810E1E66E59359F0982C3DF
-C2AFF5A235972164383190022C54ED5F8981711DAEAE88096538E8B6BB4E470F
-1BF8CBB3CEEDD6E3D1BB0ADA4D612145BC9ED3B52FA6A01CEE8B9179F271B15F
-301EC75005C2348CAA75C1642E6543FD339731BECE0A67905A3E81EBC5A5E030
-BD54164BF184A3935F067942D185E5CEB307988054DEC8723440D32CC23D1791
-7DB635CB7702340D017D39BE1701E31407A69F8967391559157EB91742BE025A
-87DE27A379E38D17F406A271204914C49BEDF793A74AA5C74155637A9E007000
-9AD8916844244C455BD5B304FF8480673C9D8601113ADEB0BE86945FB54A508C
-4D64DA4C25EE6EE2B3B78155EABC32B8E71F810FA060C17BC597F32ED4B130F7
-61B1A1BD8C0447B80D6F31F40BF191F6C4C050C61D789D874DD47334F131656F
-E3CD1B394A2660FDCB1A7B10B17D9782BA8C4BECD862890BAD2A66B639F50EC6
-2D4BF8CB3982DEAABF4F878D9387A7F342398D0B461904DE87F431245A0AEC80
-F173A97873120628BDC58104344754F7FA2B16CC5987E359DCC44F77255BAC8A
-A7463AAEFC9A40D602E5AFD8D5D15CB5FE58B1BE291F59FDD5649050ADAD2B0F
-3BDE9863B05E6C1F0A6E05A3F0E9B01D9B322BDEE4726DB323058FB9A89545C0
-F61290817966EB026A0E4AC9DDFADDC1B55D516D6F2805D5A0718C99ACCF8CE6
-24489AEC1ECF7ED37014E019B3D6D5D8BE843FC15298C830A7120EEB29F98560
-AC3BD89D386E89B5763248622409A9E81F53EB28B4C599623108B6E8D592D523
-EFAD785059228196ABA544FCBDAA6DFC6D588B6696DE280107628BAF618387C8
-7C1DFF4DF315A1256749B363C315C08559AB98E60906C2E00571C539895BF915
-5AEEA8F4045318C577256BBFBE714048950E4E63F9B63F8865BC22398182CC81
-F3451724D83E6808910A424486F6CD3E524A039294E6C5E3FF96658FF3C4C23F
-58C6F571EFEEEB86BC1B1EB2BE89406507E1F6ED15BA51CD9A09E3C1F2D40043
-CD44D67CACF8D0C9492DCEE5689AF373C30B3FEFE3422568225801A84352A805
-689518D114AE3A9BA5D63EFB8EFF26DAABBEF710A8833733E89F4E1B3034FA2D
-7B453EDAA5F856214601C13026E7B0F1234B22E027A6B4DE3DFFCCD6D364FD5A
-87A101955FF9A0979E713F90D86712F818CFF2A3DEF51B3CFB726A7BF8C78D41
-EC37523561B2C680A34152F5A0A22C719783D0E40B41EC46900557DFE2F3A57D
-09603EB1DC9DE4466E6E0CA30CA69FC8C4EBA49BF94B7E62DC43679BE296E663
-F8037ECB74443B404DE742E545A170B95125B6160A828FEDEA2E37C80210FB76
-D481EE94D11BCCFFA48C6AA292869ABEC53BA9CFE2EBAEADEC4CD47AF8696820
-30CA20A7F3C0CACC4FFD4F0E2C9E350C5D5376101C431F1C9227DA22D81B4398
-D8C531BE87AA709AC09621AEDE6920FA421B919DF506A94C8E9CBA4A1FC54886
-F4549E3A362E0AEE7CE551CF47835466CE2E166BEAE34912C91D17A5101B3348
-47F281CAE5AE5C64EC4D9EC8B9DEA78C3EB837368EDCDD9652BDA031213C5732
-BE3FE592CD1BDD9B377A2CE6B670C541C063FD3D6EDBFF477E1B01A4EFFCED17
-8F86853C6818347BFCCBF9E37DE6918D0FD561BCA8F498ABCDBCCEC4F84B04A9
-D65322BD3594AE0341919401F5A4B5D84E8E6E2844769947A50EBCABE57C1332
-2D11795496130C812835D63E77D9E45A3ECD74A79B3BD752C0738B3F6FC34479
-47FFEBD3C6F4DB9EC04C39CB3CB4C0519F5981BCBEBA4BE8999BEFDE19797B2A
-5DA18F6A37BE90B456D44AB87CFE8BEC3617ED255BE3D021AF8EF2DF6D6D2565
-7D45EF82415A4AAB7F1C98730D221C4E8CD2C56F9F56787E94B397E1BF8F9991
-3B0040457B48DEDFF2B147782E283106A0C52FA77357C82FCB41EE61A91AEB6D
-ACE6FDC42CF88A2C936475471D3B1893863517DC3DF894EE5B85041802919643
-EEF614A9AB2C45D94F2714DE653A76F0F4311D2AD4E4204A40732F30B15E554F
-54B171D60D397D0E83E42337A6AB85774AC300C9038E49BC897924AA284F84CE
-5B826C9AA9D0D2188FBC8B885DA0BC1F182AF225F8961FD789D764FDB363008E
-E29EBA9DE653EE05616CF99A3F4FB5B5B653ECF18E42BCDF61FCE91FCBEE4F12
-9B410ABA7C4BEEB7FB0F79DE24F9EB0A72938EFC6EBC18246A09E424A413A20F
-36B15A6D4B163813F81002B232FF01FF82D0470AB96546FAAC70CF6AF1B99ED7
-580E1BBA33C0C877FB602B654D44C26C3BDA8FBC67B52F7AD26F038E7115DEF5
-203740031DA96B2FA93D9265047E4A7659792315859B5CE4A614C55A3AE99B11
-9371008047C9781014746C64FC9AAC3DF4A732B7657AB16272DA193B435D5888
-A4BCDF4C39FBC3E6FF6C600EEF6DAD8FC31CDA3AC7C5DF9BC6A0DE49B647BA5E
-61066C9C07CA638A17CD671C9411B1D24FE806899A05548DD7FB3A524907ECB2
-DEF0CE38F0C3E48377589D46B678446C8E6E8EF83BB6414D0425DADC811C49E7
-809A3D5820F13E99CF0C6FF007AA987B9542E1BD7D6EF97B6E5CA4AD7CB55786
-E13AF335122BFCD8986802D16B466DA375C4A3ED5CFDC498AC9AC2CFA4E6C907
-B465707DE1CA5A1B3C936318071A90B88FBF7E190487452EB215AF6B2C9BAF15
-451E680B92F54F627FB43013DA282C1A87C7FCFEAF1DCD5E00E0B4A53AD36746
-BCB6EFB05CA14B81DE02D82B8D63D86821D0DEBDD391FDFBCD11B35065702F22
-AFD4DFAE5C33334E56071A569E3EC107D1D6F23283009E2FC66DBA6F266D7E73
-8DD44071DFED2EDE3018B7420BDB5C6F69812F340D37442F6FB7783C56D585E8
-C91E6C90868605F7D10E33250584B3C087C9BDEC415481434E42B3A5554EA4D6
-C69399CB7C8A50C0B0601DCA76C4BE27D96DD8E55A481FD5ACFF23B19D6C3887
-8DC8049CFC1B48D1DBEC9AAEA5AE4228BF0CA94E164569AD1B73905D223A49DF
-08A2F980B19AF707C08FF96187FFA0248D20269DA56752B2F968B2EB3FC38A7B
-91B879F6553F6792EE50968FF201C936F1E5B945D4D65218D05E6A4AD5765E88
-7DFCE3E3F57B42C9757B5276357203F6A2E5025CB6CFF1F1A893DF2E657B0A25
-B4DAA0BC6D6751EC4BBCECEAB27AA77C0FF099164CA841386D059FF60D6D8146
-351AD5D23D27C3496786F90A516C93EFA4062191870E93A91A72447904BC846B
-89C242D664B955B6C656CB8C8F11B2A06F1498B8B74F93835A5EB2C8EA36F0D9
-8EAE3AB5FB6B5E926CB65353D85D9FAFBA144522A504AED596A9B8C6D4F7B4EE
-A444BC0D3AD9E1D1D91E22FAAB07239BBB783F962B3FE7D7876AE1472E1821AE
-13C8C882068CFE3B9234C635F6A876185457C2798517656CF6C63433DEEF56DF
-42E7C144289BA6088886A7E9A4D06CD351FCF3F092E8B524E1EFD0141F388C44
-D2DD0AD39455CD711B277A4EB48F529056F1A8414F3FC6BADC1847013249BE94
-C87D039799E50B425A667656D0D1B6C5F0BAFE9B52743F65BD21BEE1572B4A4D
-C1851FD63D04C23FB6D89726602927BC5DE41DCBAC8C955D13374B6851087050
-13AEFE81265873BEC944A3720266E39005F6E977CFEB184FB7A0BEE08916FE4E
-E1CD78C562AB8195A9F8AAD6F1437147D4DD21AACA15AF0D2DF879EF0B0952D2
-70AE5111781B44EC4F177681003F2552E5C558FF42A88D8EE81EA8D83932D374
-326694AE6CE515E512F27BE77FAFA7E089AD9AA9E1DDAA93EEDA29CE9D18EFE7
-ED18084EFA2698BBA1E96CAF728D41BBD1837D1372F281EE6E30CAFCE21C545B
-BA7D5664578A5ED820CDB949F35CBE1AC7F4DD4BC499A967032DDDF7B38F07DF
-403E80EE747FE4714E423048C294A37E5F11C3FB84A27A975CD8D726B05BA79B
-F036DC5358521B45DD9B2781AC0E203C9417501ACCD0E7E647D363A6B0AB8653
-F60EA49B599502967EB71CB3221B380C3740AE50C98575BFBBF7D7984C4D50B2
-42BD737B55DD326E58DE120619AB1E04F36EEF042D4628D5FD7AF49AEA6CB109
-A7ABD31E974582B57F3F3468329FC9CB445F2FA029919574AA6A692CC1018FAB
-F26A52E7FD2F763CA5805CE7E99E373443054611B64FB84534D402FC0BD98494
-8206AB6C38F72479D7B50BB316EDA00329C9F609B6029587B4082098DFF3F90B
-65D2648FF6DED8512A09F31B38F8C0DFB0FE748ED1E0E145DF48BFB1C4853667
-2ED28696588B493FC0DD84BA9A11A363754708E6C8527881183759955D6CA812
-8B205ABF3ECFC805B66D465651588CD0A86EB14BC310DD844001011CC962D488
-3ACE72467CAAB98048D8991C969519B9AE06A68B7C048CE5D046E1DB0AABE05A
-59B9A3BECB0FAA93FC7110FF74307479F97E03DE5D1F80F681FA93E7D91877E5
-9D23309F58DCA4EB201E8AF6FD6D6EB9897CE153BB250F86D8F3CE1007B792CF
-6A3EC05B2F34DA379227D825E53827E0ADE5E1A00C5427A0A506DF38413B9D97
-2C3B06CE0DBA5CC18013EDCB264259B5092C604020BE1DE8B103B2455B65036F
-4553B985F4D3ADC4D1DE6A4D94E0834C27107AA542DA4B50647FC6CE8F92DBCA
-CFBFE06D8932943A9488D845CB472F6813BA8AADDB46E777A19696D9660AE959
-C46B8AC088FE7033596880D118559A00EC65E57BBF38BC8BB1D37E5CC17F2FF8
-EE32B64A1A6AFE09A9FE92B689B361AB661E15EA5B4732965AE1F1B2C9E57250
-0E3C8DDD1FF345B463FA9726DB100821B7AAB87312EDE945F7A9E957FE854B8C
-1EB327E2EF7B8789D4A6BCB83E2B2E8DC574682E9EA7013E533B8C274AA80D4E
-6D5D627F0FDA0F448951F86F2B1B949B1E6B63A27934279A8DC20F6E53022103
-13C260ADC4A59CC7025FB9CA46860F56863C43DF1F7153A4DB487015FAC86D8B
-3F5B2D367124C046A4BCF34CA4A5E4E9D4D66FA281FA3C1CE37EE5FAC45536CA
-613415BF9153E4DACD2D0C724784266239609DFB704910E4500E7DA0C013320F
-E8057DD810A80B05BF1424583FC80DCE947D71163591D5626427A56F86709F1A
-A0C79047AADF1F728CB3E0E3D543ECC57D01D15F3F6D6BC2DD1747225E6B96D5
-55C88355ACD023EACA812A4EB45DED441F7E8A331B2C7B42F1263DAA9B4AFFE3
-EBFD8B3765BE2F32B854F093365AF1D8E3A79CA8821E48804BC236AD451CD77A
-A963A3F4DF057BEE08325B7AF10F6F9BEEA0CBE417E11CCF938B406D18B46DC8
-6DBC21FACD39B7710DA727395C392E48A7130EA29763AF33E90CAA9F9090DD1E
-124F03E572E0C5EC38C1A6BD523C23C2AF3A6BAA496A924DE9D97BD6C9E0E623
-517CCB20C6AC4440569C0FFDFC0E0821764380D053F4D9333E7F5BCD6637CDD9
-AFDC976608CCCB9DC49ADE08EBE7B419057ACFD48B0E9CAEE20443BAB4C1C161
-8048ED08F9A0CECDE0D94B85779A880668956FDD681FF018700F1BDEB49F0828
-E70772706565C3CEC6C94B913ED78D8352AD29CD653C0B80EB1E6E76AB1DF6AB
-D5AE84308424CA2BF93C45AF765E12616A566B4609FBBD87DBC6BD5896AE40C6
-2D528C2C9165691907B5ED69FC53F93DEF513A8E64338FFFC26F073E91B92419
-51C3C2C8E9AF834831B41FD625E9812DAF2827718CCFB0949AD120706FAE3122
-F226837C2B73092B818BD79540297C90A07C0346C49AE18EC308659C29433BB4
-984C48F2C7E6FDAFF477105BB8163F18CB481FBAB81DE74EAA35E00A455865F8
-B080700293E48CEB400D55C2047179F81EB61E7A4C1659D3B37A50C1AD209818
-ACDD53606E4C85F6908CAD471377ADA7CD7BC6A376149FB893AC887669B54211
-E517D258D00230D18FAD210ADB70887F4EF0E160ADCBD98175AAADFF46A80E3C
-DDCD1BC01818B07BFD5C60879B1C74680D50B6042DC2C34D80F2246F02FADCA3
-74E3FF1AECFADCB4AC56713DC0213E88884B3B134239ABBD6713CD125E550DC9
-01185F92568116B22AB8A7EA97A960A3A8139722BAE73AA974F328CE7F6A1FC4
-429E8940A8E6DD487132183A247D82163643DF9764FF7C7B24CDC697806D8EA8
-D6EF17A9A6513B6529C5C02D91E12C75D947D5C22CA0CEF9C181546C60721E99
-D311803BA34199AF08B60320B8AC80675850BE627B0D693B454BCE8713239F13
-DA936F65E346E109BF9FD23D79C192CC8BFDABE1A3F775521F9006D4EC367025
-39197B2828A65CA529A3E32EE34D0CEA255FE45D14ACA58AAA182DEFB43D57C3
-E2ED54233B99C14552907A3B7B5657A25AB168A4CA14E7AE4602273F1E635E0B
-07BB52D431967AEF3730DB8D906C3D7ED324AC0BA702C592034EB22E03BFAF55
-D392C151AE40E7DB6843157886719DD0BFCF05F1CC117BB3D792CE8148B3A94A
-1D7A44EDDB0514B70CA4684D3AAA2D19B0869CCC876A29577F4A1936B82C6485
-8CC1E5135A87A231DDF61AC2066C4C886CBDB6119C07E9B92004A6778493C1E9
-722202A4C51F0567B968358CE607FCA6211F0676EDE95B54EF552C893D34CCD6
-D5E691273BD44921D0D4FBF132584C97BC9565929B87CC2B15D5572B82678684
-9B19C2264C1B62291A95CDE2EDC389A462BCD523B0175CF4337FD4FBB35ADA7E
-39EEB5574CDA8D184C0C469943C0954B8E164273AD322AC85A6527B9D60C7365
-49ADA41EEE1FD501DDC9D2941031F452729DD5FAA668744E9383E1D97684ADEC
-2E9E01767C2AE384F2541969853B1D3E6684A4DBC8BAF5B1F6ADEC835E71A174
-4B42C5409564BB14A7250256641F5F1A3D2705275504B446871CED22C5EE9EF8
-8F04764AE0543ECDAA0C03A6E47884917E24373299A21C04A9E4451F4D95CC75
-6B974D4B696CDE7CF77C057C484B630B1F5BCA8B92D92711BC3AF66057289F9F
-160E37C620786A9669A5543F8DC7A793CE036EC5F0B50652457D07D29FD519B4
-1DDC8FB57971D463E17CA1229451B92951A72C0A38A118728ADEA4BCA11D0B06
-FCBBF5DCB2379F3754132CF931F75A4A4F9A05184095139C816DDF42186AB91A
-6066F2A735FE1AFD4C62BCA94815543162ED39BEFD27FE2557E95032D3C60DC1
-A490F8511076D01F09140B1BE0124854B5C735ECE78B4FC65EAB8A0B82EDA7C0
-D761EAAD7639E43DA499B8E49E3D76F58CD32D66E644DD96A48E53A9B6B68708
-92AD96710E541BAD4A50E988A6E93005B564CC6AB41ECAF4374EF72595DA4654
-7D56C78F52A2E8B27CADA9F38BC7F75972C1593C15BA654F1AEC2458FE43FC19
-75956C25D4737F03FBBA4C076BC34ED40B3533399493D01AC036AEC356B49CFC
-DC980360DE2E9EF4ACB75D0D8BF34899AFF80B9476E64A87CC6ECEB715F23198
-AAA031503D55EB84AA5F3D97EDD85CF7F6E644DB7D7596BFC42E407A1705CEA2
-7F24E45978B72E8F018F6B8F275DD9E0AF546C972C6110855E936D14EC2D1700
-969D0ED6EB2C37F6C429357C16D59726D9FCE4CF792B729BFCD874BA2F37C8B9
-39F7734BC26C655CF7944735CBD306A4E41ACE55A8B8ABEDDB7BF88DAF740724
-153B00E9D01D1521D8A31D84084400F7E9DDC8BFF01F0FA3C94FB90B8C4D986E
-7040E699D1ED05552D9FBE7DAC62EB04F1063B77823C59FC7D27AC8173BD67C1
-8AF04A96583E42E9AE80B2611CDE096AC85C8BF3FB68D93B2C4640D6322092D7
-969CAD03AF415832865F099366C32882093636F41496AA211D33B02F8C1F01A7
-A2E8BD10674DE3EC793D8ECDFF1B69B548D9B36423303C4A279AD5F79D3A6DAB
-9351311E63067307D9386C41E2E2BEEAD6FF3BEECB6E7875B3790BC7A0D3C361
-D5218F675E01EAB6A1E8CC077139D95519AC6535E1FD50D3EF01801CA33937A7
-3E6E1E2F0D514CC44A40F2DA6D870187CFD474E6EA463389F54FB807611F9F1B
-23D6741DF2AAC454F7C8C71132C776DFD32307EEC21F62AE4F1AD577925991F6
-43ECF07F727D1C38AD553835A8AB564EAF17BFA25BF397FEB7DAA538CA0C60F6
-E1BD196AE9006D5472C6061129CE765B830A2C1D05577211529F4DE24D66A461
-3F87119D9D5F94BF7928C46037E92BB5A224F903F9A2CEB7ECEF82AB711D6942
-390E707E9D4EC9EDA06A0572DE2148529B28CD61CD9E7370ADC669183542FDF0
-C950B6C36571E430AC41F91BB3D8D008865C580DB05109364B7ABC8E573B688B
-6639BC11AC29EC5AF3DA7067EFC9A02D82F80A2E9619DE1BB6333671E83F124B
-2FB73369DD75B2CEF11A13EEDC6A315F979DD31B69D28C07A10031D697646074
-5057EBA048400819D019A415B92626A8FE0F7E656C1A67FB5CBD0E6A4DA6A4B8
-93731F9238C3DC76E650EBAF3C04B848ACD7C5117F06542CAFBEC1F371680013
-A32B9E2F04B4FDA9C27AAB816AE2C1B073C66691CC615CD1B2B92A134884436F
-684767901BEC57491C9B63FE315E877FC37699B3CE91F2FC0CE561FAB61ABCCB
-928FD9BE8BD3F7188CE9ABA2D39835375639ED43E433E353CE6A044CA11BE1E5
-0545041CFE6647238D4A6965A48FFD085A11E80FBD1143AF5642056ABBE3CEF7
-D1E1582397FB4C4A5DD49927F657F42F9B53A5322DCA588BB81D4B84FD2093BC
-D506A865CD72AE19674EEF23D14129DA5585CF8698F3E674ABF2A4D921035F1D
-C95915D310FF7ADD4437F8AE3788AEE7BAC66E1E9B8257A4EC26984249E981C6
-F1A15E2907118EE1B0AE8FF54D22E5D4CE4D4F9A7750E8AD53D229860A6D82CA
-E552EA045E82300C0C81183A66CA73742E0AF4415FEA09956B769B1DB61A8D6F
-FC2B26AEF28D566B38EDEBAC9D2D49213738A2AF90C1C1BA0E7AE50E9BD424D9
-B66411138280D7BDE5D23A23C8C5598AADF95F62B4AD41DDE7614971C5D281C6
-793D551B623E4F5677A48011DE7D634DBF6D39E501E701A0D79022A7E70C9367
-53212CFD9BA8606E49AED8E7722084A726909DC41406CAEE54B481FF2D95A5C2
-61EE3CD752E53C2EDA71955734256863E98C0B1BFE3E2440D5A8973E324641A2
-147C4F16AC694F327DE5BF01ACD163007F410E7BA5D42948
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 52099146 40258431 1000 600 600 (calccard.dvi)
-@start /Fa 135[38 21[29 74[33 23[{}3 58.1154 /CMMI7 rf
-/Fb 204[28 28 28 28 48[{}4 41.511 /CMR5 rf /Fc 145[37
-31[45 19[19 58[{}3 41.511 /CMMI5 rf /Fd 143[59 75[71
-35[55{}3 66.4176 /CMSY8 rf /Fe 135[40 9[43 20[41 5[43
-4[56 3[39 12[35 2[20 32[41 6[33 18[{}10 66.4176 /CMMI8
-rf /Ff 134[35 33 1[33 3[30 1[36 36 40 1[18 33 5[33 2[33
-36 52[22 31[40 12[{}14 66.4176 /CMTI8 rf /Fg 242[61 13[{}1
-49.8132 /CMSY6 rf /Fh 134[32 1[43 32 34 24 24 24 1[34
-30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 11[45 1[34
-2[41 1[45 54 3[22 1[47 39 41 46 43 42 45 9[30 1[30 1[30
-30 30 30 1[18 21 18 44[{}44 49.8132 /CMR6 rf /Fi 134[43
-4[32 32 34 5[23 2[23 1[41 1[37 1[36 45 40 14[61 1[55
-1[63 19[23 58[{}15 66.4176 /CMBX8 rf /Fj 130[35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 1[35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 33[{}92
-66.4176 /CMTT8 rf /Fk 134[60 60 1[60 64 45 45 47 1[64
-57 64 95 32 60 1[32 64 57 35 53 64 51 64 56 10[87 88
-80 64 86 1[78 86 90 5[90 90 72 75 88 83 1[87 25[32 26[64
-12[{}39 99.6264 /CMBX10 rf /Fl 133[31 37 37 51 37 39
-27 28 28 37 39 35 39 59 20 37 22 20 39 35 22 31 39 31
-39 35 4[35 3[53 72 53 53 51 39 52 1[48 55 53 65 44 2[25
-53 55 46 48 54 51 50 53 5[20 20 6[35 35 35 35 35 20 24
-20 2[27 27 20 4[35 18[59 1[39 39 41 11[{}66 66.4176 /CMR8
-rf /Fm 141[57 3[76 1[38 5[42 63 76 61 1[67 11[106 2[103
-3[108 6[108 3[99 67[{}13 119.552 /CMBX10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-letter
-%%EndPaperSize
- @landscape end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin @landscape 1 0 bop -297 -364 a Fm(GNU)45
-b(Calc)h(Reference)g(Card)264 -256 y Fl(\(for)23 b(v)n(ersion)h(2.1\))
--450 -49 y Fk(Starting)37 b(and)g(Stopping)-450 117 y
-Fl(start/stop)25 b(standard)g(Calc)674 b Fj(C-x)36 b(*)g(c)-450
-196 y Fl(start/stop)25 b(X)e(k)n(eypad)j(Calc)651 b Fj(C-x)36
-b(*)g(k)-379 276 y Fl(start/stop)25 b(either:)31 b Fj(C-x)c(*)f(*)-450
-356 y Fl(stop)e(standard)h(Calc)855 b Fj(q)-450 464 y
-Fl(Calc)24 b(tutorial)1048 b Fj(C-x)36 b(*)g(t)-450 544
-y Fl(run)23 b(Calc)h(in)g(other)g(windo)n(w)650 b Fj(C-x)36
-b(*)g(o)-450 623 y Fl(quic)n(k)24 b(calculation)h(in)e(minibu\013er)499
-b Fj(C-x)36 b(*)g(q)-450 828 y Fk(Getting)h(Help)-450
-951 y Fl(The)24 b Fj(h)g Fl(pre\014x)g(k)n(ey)g(is)f(Calc's)g(analogue)
-j(of)d Fj(C-h)h Fl(in)g(Emacs.)-450 1059 y(quic)n(k)g(summary)f(of)h(k)
-n(eys)734 b Fj(?)-450 1139 y Fl(describ)r(e)24 b(k)n(ey)g(brie\015y)846
-b Fj(h)26 b(c)-450 1219 y Fl(describ)r(e)e(k)n(ey)g(fully)902
-b Fj(h)26 b(k)-450 1298 y Fl(describ)r(e)e(function)g(or)g(command)507
-b Fj(h)26 b(f)-450 1378 y Fl(read)e(on-line)f(man)n(ual)827
-b Fj(h)26 b(i)36 b Fl(or)f Fj(C-x)27 b(*)f(i)-450 1458
-y Fl(read)e(full)e(Calc)i(summary)714 b Fj(h)26 b(s)36
-b Fl(or)f Fj(C-x)27 b(*)f(s)-450 1660 y Fk(Error)39 b(Reco)m(v)m(ery)
--450 1826 y Fl(ab)r(ort)24 b(command)h(in)e(progress)594
-b Fj(C-g)-450 1905 y Fl(displa)n(y)24 b(recen)n(t)g(error)f(messages)
-543 b Fj(w)-450 1985 y Fl(undo)24 b(last)g(op)r(eration)839
-b Fj(U)-450 2065 y Fl(redo)24 b(last)g(op)r(eration)858
-b Fj(D)-450 2144 y Fl(recall)23 b(last)h(argumen)n(ts)799
-b Fj(M-RET)-450 2224 y Fl(edit)24 b(top)h(of)e(stac)n(k)937
-b Fj(`)-450 2304 y Fl(reset)24 b(Calc)g(to)g(initial)f(state)672
-b Fj(C-x)36 b(*)g(0)f Fl(\(zero\))-450 2511 y Fk(T)-10
-b(ransferring)38 b(Data)-450 2676 y Fl(grab)24 b(region)g(from)e(a)i
-(bu\013er)664 b Fj(C-x)36 b(*)g(g)-450 2756 y Fl(grab)24
-b(rectangle)h(from)d(a)i(bu\013er)574 b Fj(C-x)36 b(*)g(r)-450
-2836 y Fl(grab)24 b(rectangle,)g(summing)g(columns)404
-b Fj(C-x)36 b(*)g(:)-450 2915 y Fl(grab)24 b(rectangle,)g(summing)g(ro)
-n(ws)515 b Fj(C-x)36 b(*)g(_)-450 3024 y Fl(y)n(ank)25
-b(data)f(to)h(a)e(bu\013er)786 b Fj(C-x)36 b(*)g(y)-450
-3132 y Fl(Also,)23 b(try)g Fj(C-k)p Fl(/)p Fj(C-y)j Fl(or)d(X)h(cut)g
-(and)g(paste.)-450 3339 y Fk(Examples)-450 3461 y Fl(In)34
-b(RPN,)g(en)n(ter)g(n)n(um)n(b)r(ers)g(\014rst,)i(separated)f(b)n(y)g
-Fj(RET)f Fl(if)f(necessary)-6 b(,)-450 3541 y(then)35
-b(t)n(yp)r(e)g(the)g(op)r(erator.)62 b(T)-6 b(o)34 b(en)n(ter)h(a)f
-(calculation)h(in)f(algebraic)-450 3621 y(form,)22 b(press)i(the)g(ap)r
-(ostrophe)h(\014rst.)23 3729 y Fi(RPN)j(st)n(yle:)346
-b(algebraic)26 b(st)n(yle:)-379 3809 y Fl(Example:)113
-b Fj(2)36 b(RET)g(3)g(+)423 b(')36 b(2+3)g(RET)-379 3888
-y Fl(Example:)113 b Fj(2)36 b(RET)g(3)g(+)f(4)h(*)282
-b(')36 b(\(2+3\)*4)h(RET)-379 3968 y Fl(Example:)113
-b Fj(2)36 b(RET)g(3)g(RET)g(4)f(+)h(*)141 b(')36 b(2*\(3+4\))h(RET)-379
-4048 y Fl(Example:)113 b Fj(3)36 b(RET)g(6)g(+)f(Q)h(3)f(^)212
-b(')36 b(sqrt\(3+6\)^3)i(RET)-379 4127 y Fl(Example:)113
-b Fj(P)36 b(3)f(/)h(n)g(S)423 b(')36 b(sin\(-pi/3\))i(RET)e(=)-358
-4311 y Fh(c)-375 4313 y Fg(\015)21 b Fh(2007)h(F)-5 b(ree)22
-b(Soft)n(w)n(are)g(F)-5 b(oundation,)20 b(Inc.)27 b(P)n(ermissions)21
-b(on)g(bac)n(k.)28 b(v2.1)1746 -364 y Fk(Arithmetic)1746
--198 y Fl(add,)c(subtract,)g(m)n(ultiply)-6 b(,)23 b(divide)503
-b Fj(+)p Fl(,)39 b Fj(-)p Fl(,)f Fj(*)p Fl(,)h Fj(/)1746
--119 y Fl(raise)23 b(to)h(a)g(p)r(o)n(w)n(er,)g Ff(n)5
-b Fl(th)24 b(ro)r(ot)642 b Fj(^)p Fl(,)39 b Fj(I)26 b(^)1746
--39 y Fl(c)n(hange)f(sign)1085 b Fj(n)1746 41 y Fl(recipro)r(cal)24
-b(1)p Fe(=x)1006 b Fj(&)1746 120 y Fl(square)24 b(ro)r(ot)2119
-72 y Fd(p)p 2178 72 40 3 v 48 x Fe(x)968 b Fj(Q)1746
-229 y Fl(set)24 b(precision)1059 b Fj(p)1746 308 y Fl(round)24
-b(o\013)g(last)g(t)n(w)n(o)g(digits)700 b Fj(c)26 b(2)1746
-388 y Fl(con)n(v)n(ert)f(to)f(fraction,)g(\015oat)688
-b Fj(c)26 b(F)p Fl(,)39 b Fj(c)26 b(f)1746 496 y Fl(en)n(ter)e(using)g
-(algebraic)g(notation)522 b Fj(')36 b(2+3*4)1746 576
-y Fl(refer)23 b(to)h(previous)g(result)737 b Fj(')36
-b(3*$^2)1746 656 y Fl(refer)23 b(to)h(higher)g(stac)n(k)g(en)n(tries)
-593 b Fj(')36 b($1*$2^2)1746 735 y Fl(\014nish)24 b(alg)f(en)n(try)i
-(without)f(ev)l(aluating)377 b Fj(LFD)1746 815 y Fl(set)24
-b(mo)r(de)g(where)g(alg)g(en)n(try)g(used)g(b)n(y)g(default)166
-b Fj(m)26 b(a)1746 1018 y Fk(Stac)m(k)37 b(Commands)1746
-1141 y Fl(Here)24 b Fe(S)1956 1149 y Fc(n)2020 1141 y
-Fl(is)f(the)h Fe(n)p Fl(th)g(stac)n(k)h(en)n(try)-6 b(,)24
-b(and)g Fe(N)31 b Fl(is)23 b(the)h(size)g(of)f(the)i(stac)n(k.)1817
-1235 y Ff(key)216 b(no)26 b(pr)l(e\014x)259 b(pr)l(e\014x)27
-b Fe(n)292 b Ff(pr)l(e\014x)26 b Fd(\000)p Fe(n)1817
-1315 y Fj(RET)212 b Fl(cop)n(y)25 b Fe(S)2342 1323 y
-Fb(1)2663 1315 y Fl(cop)n(y)g Fe(S)2871 1323 y Fb(1)p
-Fc(::n)3193 1315 y Fl(cop)n(y)f Fe(S)3400 1323 y Fc(n)1817
-1394 y Fj(LFD)212 b Fl(cop)n(y)25 b Fe(S)2342 1402 y
-Fb(2)2663 1394 y Fl(cop)n(y)g Fe(S)2871 1402 y Fc(n)3193
-1394 y Fl(cop)n(y)f Fe(S)3400 1402 y Fb(1)p Fc(::n)1817
-1474 y Fj(DEL)212 b Fl(delete)25 b Fe(S)2381 1482 y Fb(1)2663
-1474 y Fl(delete)g Fe(S)2910 1482 y Fb(1)p Fc(::n)3193
-1474 y Fl(delete)g Fe(S)3440 1482 y Fc(n)1817 1554 y
-Fj(M-DEL)142 b Fl(delete)25 b Fe(S)2381 1562 y Fb(2)2663
-1554 y Fl(delete)g Fe(S)2910 1562 y Fc(n)3193 1554 y
-Fl(delete)g Fe(S)3440 1562 y Fb(1)p Fc(::n)1817 1633
-y Fj(TAB)212 b Fl(sw)n(ap)24 b Fe(S)2352 1641 y Fb(1)2384
-1633 y Fd($)p Fe(S)2498 1641 y Fb(2)2663 1633 y Fl(roll)f
-Fe(S)2832 1641 y Fb(1)2888 1633 y Fl(to)h Fe(S)3017 1641
-y Fc(n)3193 1633 y Fl(roll)e Fe(S)3361 1641 y Fc(n)3425
-1633 y Fl(to)j Fe(S)3555 1641 y Fc(N)1817 1713 y Fj(M-TAB)142
-b Fl(roll)23 b Fe(S)2303 1721 y Fb(3)2358 1713 y Fl(to)i
-Fe(S)2488 1721 y Fb(1)2663 1713 y Fl(roll)e Fe(S)2832
-1721 y Fc(n)2896 1713 y Fl(to)h Fe(S)3025 1721 y Fb(1)3193
-1713 y Fl(roll)e Fe(S)3361 1721 y Fc(N)3438 1713 y Fl(to)i
-Fe(S)3567 1721 y Fc(n)1746 1821 y Fl(With)g(a)g(0)g(pre\014x,)g(these)g
-(cop)n(y)-6 b(,)25 b(delete,)f(or)f(rev)n(erse)h Fe(S)3211
-1829 y Fb(1)p Fc(::N)3331 1821 y Fl(.)1746 2024 y Fk(Displa)m(y)1746
-2190 y Fl(scroll)f(horizon)n(tally)-6 b(,)24 b(v)n(ertically)569
-b Fj(<)36 b(>)p Fl(,)i Fj({)e(})1746 2270 y Fl(home)24
-b(cursor)1063 b Fj(o)1746 2349 y Fl(line)23 b(n)n(um)n(b)r(ers)h
-(on/o\013)837 b Fj(d)26 b(l)1746 2429 y Fl(trail)d(displa)n(y)h
-(on/o\013)862 b Fj(t)26 b(d)1746 2537 y Fl(scien)n(ti\014c)f(notation)
-894 b Fj(d)26 b(s)1746 2617 y Fl(\014xed-p)r(oin)n(t)f(notation)828
-b Fj(d)26 b(f)1746 2697 y Fl(\015oating-p)r(oin)n(t)f(\(normal\))f
-(notation)450 b Fj(d)26 b(n)1746 2776 y Fl(group)e(digits)g(with)f
-(commas)640 b Fj(d)26 b(g)1746 2885 y Fl(F)-6 b(or)28
-b(displa)n(y)g(mo)r(de)g(commands,)h Fj(H)f Fl(pre\014x)h(prev)n(en)n
-(ts)g(screen)f(redra)n(w)1746 2964 y(and)c Fj(I)g Fl(pre\014x)g(temp)r
-(orarily)f(redra)n(ws)h(top)g(of)f(stac)n(k.)1746 3168
-y Fk(Notations)1746 3333 y Fl(scien)n(ti\014c)i(notation)894
-b Fj(6.02e23)1746 3413 y Fl(min)n(us)23 b(sign)h(in)f(n)n(umeric)h(en)n
-(try)577 b Fj(_23)71 b Fl(or)g Fj(23)36 b(n)1746 3492
-y Fl(fractions)1175 b Fj(3:4)1746 3572 y Fl(complex)24
-b(n)n(um)n(b)r(ers)903 b Fj(\()p Ff(x)p Fj(,)36 b Ff(y)p
-Fj(\))1746 3652 y Fl(p)r(olar)23 b(complex)i(n)n(um)n(b)r(ers)720
-b Fj(\()p Ff(r)p Fj(;)36 b Fe(\022)r Fj(\))1746 3732
-y Fl(v)n(ectors)25 b(\(commas)f(optional\))625 b Fj([1,)36
-b(2,)g(3])1746 3811 y Fl(matrices)24 b(\(or)f(nested)i(v)n(ectors\))582
-b Fj([1,)36 b(2;)g(3,)g(4])1746 3891 y Fl(error)23 b(forms)f(\()p
-Fj(p)i Fl(k)n(ey\))857 b Fj(100)36 b(+/-)g(0.5)1746 3971
-y Fl(in)n(terv)l(al)24 b(forms)1013 b Fj([2)36 b(..)g(5\))1746
-4050 y Fl(mo)r(dulo)24 b(forms)e(\()p Fj(M)j Fl(k)n(ey\))776
-b Fj(6)36 b(mod)g(24)1746 4130 y Fl(HMS)23 b(forms)1088
-b Fj(5@)36 b(30')g(0")1746 4210 y Fl(date)25 b(forms)1111
-b Fj(<Jul)36 b(4,)g(1992>)1746 4290 y Fl(in\014nit)n(y)-6
-b(,)24 b(indeterminate)757 b Fj(inf)p Fl(,)39 b Fj(nan)3942
--364 y Fk(Scien)m(ti\014c)d(F)-10 b(unctions)3942 -198
-y Fl(ln,)23 b(log)4134 -190 y Fb(10)4195 -198 y Fl(,)g(log)4328
--181 y Fa(b)5382 -198 y Fj(L)p Fl(,)39 b Fj(H)26 b(L)p
-Fl(,)39 b Fj(B)3942 -119 y Fl(exp)r(onen)n(tial)25 b
-Ff(e)4353 -142 y Fa(x)4395 -119 y Fl(,)e(10)4508 -142
-y Fa(x)5382 -119 y Fj(E)p Fl(,)39 b Fj(H)26 b(E)3942
--39 y Fl(sin,)d(cos,)g(tan)1072 b Fj(S)p Fl(,)39 b Fj(C)p
-Fl(,)f Fj(T)3942 41 y Fl(arcsin,)23 b(arccos,)h(arctan)789
-b Fj(I)26 b(S)p Fl(,)39 b Fj(I)26 b(C)p Fl(,)39 b Fj(I)27
-b(T)3942 120 y Fl(in)n(v)n(erse,)c(h)n(yp)r(erb)r(olic)h(pre\014x)g(k)n
-(eys)513 b Fj(I)p Fl(,)39 b Fj(H)3942 200 y Fl(t)n(w)n(o-argumen)n(t)25
-b(arctan)796 b Fj(f)26 b(T)3942 280 y Fl(degrees,)e(radians)f(mo)r(des)
-732 b Fj(m)26 b(d)p Fl(,)39 b Fj(m)26 b(r)3942 359 y
-Fl(pi)d(\()p Fe(\031)r Fl(\))1261 b Fj(P)3942 468 y Fl(factorial,)23
-b(double)h(factorial)664 b Fj(!)p Fl(,)39 b Fj(k)26 b(d)3942
-547 y Fl(com)n(binations,)e(p)r(erm)n(utations)584 b
-Fj(k)26 b(c)p Fl(,)39 b Fj(H)26 b(k)h(c)3942 627 y Fl(prime)c
-(factorization)855 b Fj(k)26 b(f)3942 707 y Fl(next)f(prime,)d
-(previous)i(prime)604 b Fj(k)26 b(n)p Fl(,)39 b Fj(I)26
-b(k)h(n)3942 787 y Fl(GCD,)c(LCM)1077 b Fj(k)26 b(g)p
-Fl(,)39 b Fj(k)26 b(l)3942 866 y Fl(random)e(n)n(um)n(b)r(er,)f(sh)n
-(u\017e)711 b Fj(k)26 b(r)p Fl(,)39 b Fj(k)26 b(h)3942
-946 y Fl(minim)n(um,)c(maxim)n(um)799 b Fj(f)26 b(n)p
-Fl(,)39 b Fj(f)26 b(x)3942 1054 y Fl(error)d(functions)h(erf,)e(erfc)
-728 b Fj(f)26 b(e)p Fl(,)39 b Fj(I)26 b(f)h(e)3942 1134
-y Fl(gamma,)d(b)r(eta)g(functions)735 b Fj(f)26 b(g)p
-Fl(,)39 b Fj(f)26 b(b)3942 1214 y Fl(incomplete)f(gamma,)e(b)r(eta)i
-(functions)378 b Fj(f)26 b(G)p Fl(,)39 b Fj(f)26 b(B)3942
-1293 y Fl(Bessel)d Fe(J)4192 1301 y Fa(\027)4233 1293
-y Fl(,)g Fe(Y)4317 1301 y Fa(\027)4382 1293 y Fl(functions)720
-b Fj(f)26 b(j)p Fl(,)39 b Fj(f)26 b(y)3942 1402 y Fl(complex)e
-(magnitude,)h(arg,)e(conjugate)360 b Fj(A)p Fl(,)39 b
-Fj(G)p Fl(,)f Fj(J)3942 1481 y Fl(real,)23 b(imaginary)g(parts)795
-b Fj(f)26 b(r)p Fl(,)39 b Fj(f)26 b(i)3942 1561 y Fl(con)n(v)n(ert)f(p)
-r(olar/rectangular)649 b Fj(c)26 b(p)3942 1768 y Fk(Financial)36
-b(F)-10 b(unctions)3942 1933 y Fl(en)n(ter)24 b(p)r(ercen)n(tage)935
-b Fj(M-\045)3942 2013 y Fl(con)n(v)n(ert)25 b(to)f(p)r(ercen)n(tage)778
-b Fj(c)26 b(\045)3942 2093 y Fl(p)r(ercen)n(tage)g(c)n(hange)879
-b Fj(b)26 b(\045)3942 2201 y Fl(presen)n(t)e(v)l(alue)1037
-b Fj(b)26 b(P)3942 2281 y Fl(future)e(v)l(alue)1072 b
-Fj(b)26 b(F)3942 2360 y Fl(rate)e(of)f(return)1023 b
-Fj(b)26 b(T)3942 2440 y Fl(n)n(um)n(b)r(er)e(of)f(pa)n(ymen)n(ts)812
-b Fj(b)26 b(#)3942 2520 y Fl(size)e(of)f(pa)n(ymen)n(ts)935
-b Fj(b)26 b(M)3942 2600 y Fl(net)f(presen)n(t)f(v)l(alue,)g(in)n(t.)f
-(rate)h(of)g(return)326 b Fj(b)26 b(N)p Fl(,)39 b Fj(b)26
-b(I)3942 2708 y Fl(Ab)r(o)n(v)n(e)d(computations)g(assume)g(pa)n(ymen)n
-(ts)g(at)f(end)h(of)e(p)r(erio)r(d.)31 b(Use)22 b Fj(I)3942
-2788 y Fl(pre\014x)g(for)f(b)r(eginning)h(of)f(p)r(erio)r(d,)g(or)h
-Fj(H)f Fl(for)g(a)g(lump)h(sum)f(in)n(v)n(estmen)n(t.)3942
-2896 y(straigh)n(t-line)i(depreciation)671 b Fj(b)26
-b(S)3942 2976 y Fl(sum-of-y)n(ears'-digits)839 b Fj(b)26
-b(Y)3942 3055 y Fl(double)e(declining)g(balance)685 b
-Fj(b)26 b(D)3942 3258 y Fk(Units)3942 3424 y Fl(en)n(ter)e(with)g
-(units)948 b Fj(')36 b(55)f(mi/hr)3942 3504 y Fl(con)n(v)n(ert)25
-b(to)f(new)g(units,)g(base)g(units)453 b Fj(u)26 b(c)p
-Fl(,)39 b Fj(u)26 b(b)3942 3583 y Fl(con)n(v)n(ert)f(temp)r(erature)g
-(units)636 b Fj(u)26 b(t)3942 3663 y Fl(simplify)c(units)i(expression)
-680 b Fj(u)26 b(s)3942 3743 y Fl(view)e(units)g(table)948
-b Fj(u)26 b(v)3942 3851 y Fl(Common)e(units:)4013 3931
-y(distance:)32 b Fj(m)p Fl(,)23 b Fj(cm)p Fl(,)h Fj(mm)p
-Fl(,)g Fj(km)p Fl(;)f Fj(in)p Fl(,)h Fj(ft)p Fl(,)g Fj(mi)p
-Fl(,)f Fj(mfi)p Fl(;)h Fj(point)p Fl(,)h Fj(lyr)4013
-4010 y Fl(v)n(olume:)31 b Fj(l)24 b Fl(or)f Fj(L)p Fl(,)h
-Fj(ml)p Fl(;)f Fj(gal)p Fl(,)h Fj(qt)p Fl(,)g Fj(pt)p
-Fl(,)g Fj(cup)p Fl(,)g Fj(floz)p Fl(,)g Fj(tbsp)p Fl(,)g
-Fj(tsp)4013 4090 y Fl(mass:)30 b Fj(g)p Fl(,)24 b Fj(mg)p
-Fl(,)f Fj(kg)p Fl(,)h Fj(t)p Fl(;)g Fj(lb)p Fl(,)f Fj(oz)p
-Fl(,)h Fj(ton)4013 4170 y Fl(time:)31 b Fj(s)24 b Fl(or)f
-Fj(sec)p Fl(,)h Fj(ms)p Fl(,)g Fj(us)p Fl(,)f Fj(ns)p
-Fl(,)h Fj(min)p Fl(,)g Fj(hr)p Fl(,)g Fj(day)p Fl(,)g
-Fj(wk)4013 4249 y Fl(temp)r(erature:)32 b Fj(degC)p Fl(,)24
-b Fj(degF)p Fl(,)h Fj(K)p eop end
-%%Page: 2 2
-TeXDict begin @landscape 2 1 bop -297 -364 a Fm(GNU)45
-b(Calc)h(Reference)g(Card)-450 -141 y Fk(Programmer's)40
-b(F)-10 b(unctions)-450 24 y Fl(binary)k(,)23 b(o)r(ctal,)h(hex)h
-(displa)n(y)663 b Fj(d)26 b(2)p Fl(,)39 b Fj(d)26 b(8)p
-Fl(,)39 b Fj(d)27 b(6)-450 104 y Fl(decimal,)c(other)i(radix)e(displa)n
-(y)579 b Fj(d)26 b(0)p Fl(,)39 b Fj(d)26 b(r)-450 184
-y Fl(displa)n(y)e(leading)g(zeros)804 b Fj(d)26 b(z)-450
-263 y Fl(en)n(tering)f(non-decimal)f(n)n(um)n(b)r(ers)510
-b Fj(16#7FFF)-450 372 y Fl(binary)24 b(w)n(ord)f(size)934
-b Fj(b)26 b(w)-450 451 y Fl(binary)e(AND,)e(OR,)h(X)n(OR)708
-b Fj(b)26 b(a)p Fl(,)39 b Fj(b)26 b(o)p Fl(,)39 b Fj(b)27
-b(x)-450 531 y Fl(binary)d(DIFF,)f(NOT)845 b Fj(b)26
-b(d)p Fl(,)39 b Fj(b)26 b(n)-450 611 y Fl(left)d(shift)1181
-b Fj(b)26 b(l)-450 690 y Fl(logical)e(righ)n(t)f(shift)914
-b Fj(b)26 b(r)-450 770 y Fl(arithmetic)e(righ)n(t)g(shift)792
-b Fj(b)26 b(R)-450 878 y Fl(in)n(teger)e(quotien)n(t,)h(remainder)599
-b Fj(\\)p Fl(,)39 b Fj(\045)-450 958 y Fl(in)n(teger)24
-b(square)g(ro)r(ot,)g(logarithm)516 b Fj(f)26 b(Q)p Fl(,)39
-b Fj(f)26 b(I)-450 1038 y Fl(\015o)r(or,)d(ceiling,)h(round)f(to)i(in)n
-(teger)519 b Fj(F)p Fl(,)39 b Fj(I)26 b(F)p Fl(,)39 b
-Fj(R)-450 1241 y Fk(V)-10 b(ariables)-450 1364 y Fl(V)k(ariable)23
-b(names)h(are)g(single)f(digits)h(or)f(whole)h(w)n(ords.)-450
-1472 y(store)g(to)g(v)l(ariable)940 b Fj(s)26 b(t)-450
-1552 y Fl(store)e(and)g(k)n(eep)h(on)f(stac)n(k)715 b
-Fj(s)26 b(s)-450 1631 y Fl(recall)d(from)g(v)l(ariable)844
-b Fj(s)26 b(r)-450 1711 y Fl(shorthands)f(for)d(digit)i(v)l(ariables)
-537 b Fj(t)26 b Ff(n)p Fl(,)39 b Fj(s)26 b Ff(n)p Fl(,)39
-b Fj(r)26 b Ff(n)-450 1791 y Fl(unstore,)e(exc)n(hange)i(v)l(ariable)
-626 b Fj(s)26 b(u)p Fl(,)39 b Fj(s)26 b(x)-450 1870 y
-Fl(edit)e(v)l(ariable)1058 b Fj(s)26 b(e)-450 2064 y
-Fk(V)-10 b(ector)38 b(Op)s(erations)-450 2230 y Fl(v)n(ector)25
-b(of)e(1,)h(2,)f Fe(:)11 b(:)h(:)f Fl(,)23 b Ff(n)814
-b Fj(v)26 b(x)h Ff(n)-450 2310 y Fl(v)n(ector)e(of)e
-Ff(n)h Fl(coun)n(ts)h(from)d Ff(a)i Fl(b)n(y)g Ff(b)505
-b Fj(C-u)27 b(v)f(x)-450 2389 y Fl(v)n(ector)f(of)e(copies)h(of)g(a)f
-(v)l(alue)643 b Fj(v)26 b(b)-450 2469 y Fl(concatenate)h(in)n(to)d(v)n
-(ector)722 b Fj(|)-450 2549 y Fl(pac)n(k)25 b(man)n(y)f(stac)n(k)h
-(items)e(in)n(to)h(v)n(ector)384 b Fj(v)26 b(p)-450 2628
-y Fl(unpac)n(k)f(v)n(ector)g(or)e(ob)t(ject)710 b Fj(v)26
-b(u)-450 2737 y Fl(length)f(of)e(v)n(ector)i(\(list\))783
-b Fj(v)26 b(l)-450 2816 y Fl(rev)n(erse)e(v)n(ector)1017
-b Fj(v)26 b(v)-450 2896 y Fl(sort,)d(grade)h(v)n(ector)900
-b Fj(V)26 b(S)p Fl(,)39 b Fj(V)26 b(G)-450 2976 y Fl(histogram)e(of)f
-(v)n(ector)i(data)682 b Fj(V)26 b(H)-450 3056 y Fl(extract)f(v)n(ector)
-g(elemen)n(t)751 b Fj(v)26 b(r)-450 3164 y Fl(matrix)d(determinan)n(t,)
-i(in)n(v)n(erse)583 b Fj(V)26 b(D)p Fl(,)39 b Fj(&)-450
-3244 y Fl(matrix)23 b(transp)r(ose,)h(trace)723 b Fj(v)26
-b(t)p Fl(,)39 b Fj(V)26 b(T)-450 3323 y Fl(cross,)d(dot)h(pro)r(ducts)
-854 b Fj(V)26 b(C)p Fl(,)39 b Fj(*)-450 3403 y Fl(iden)n(tit)n(y)25
-b(matrix)973 b Fj(v)26 b(i)-450 3483 y Fl(extract)f(matrix)f(ro)n(w,)e
-(column)592 b Fj(v)26 b(r)p Fl(,)39 b Fj(v)26 b(c)-450
-3591 y Fl(in)n(tersection,)e(union,)g(di\013)g(of)f(sets)508
-b Fj(V)26 b(^)p Fl(,)39 b Fj(V)26 b(V)p Fl(,)39 b Fj(V)27
-b(-)-450 3671 y Fl(cardinalit)n(y)d(of)f(set)921 b Fj(V)26
-b(#)-450 3779 y Fl(add)e(v)n(ectors)h(elemen)n(t)n(wise)f(\(i.e.,)f
-(map)h Fj(+)p Fl(\))295 b Fj(V)26 b(M)h(+)-450 3859 y
-Fl(sum)c(elemen)n(ts)i(in)e(v)n(ector)i(\(i.e.,)e(reduce)h
-Fj(+)p Fl(\))262 b Fj(V)26 b(R)h(+)-450 3938 y Fl(sum)c(ro)n(ws)h(in)f
-(matrix)839 b Fj(V)26 b(R)h(_)f(+)-450 4018 y Fl(sum)d(columns)h(in)g
-(matrix)727 b Fj(V)26 b(R)h(:)f(+)-450 4098 y Fl(sum)d(elemen)n(ts,)i
-(accum)n(ulate)g(results)411 b Fj(V)26 b(U)h(+)1746 -364
-y Fk(Algebra)1746 -198 y Fl(en)n(ter)d(an)g(algebraic)g(form)n(ula)630
-b Fj(')36 b(2x+3y^2)1746 -119 y Fl(en)n(ter)24 b(an)g(equation)901
-b Fj(')36 b(2x^2=18)1746 -10 y Fl(sym)n(b)r(olic)23 b(\(vs.)h(n)n
-(umeric\))g(mo)r(de)550 b Fj(m)26 b(s)1746 69 y Fl(fractions)e(\(vs.)f
-(\015oat\))i(mo)r(de)662 b Fj(m)26 b(f)1746 149 y Fl(suppress)e(ev)l
-(aluation)h(of)e(form)n(ulas)473 b Fj(m)26 b(O)1746 229
-y Fl(simplify)c(form)n(ulas)h(automatically)466 b Fj(m)26
-b(S)1746 308 y Fl(return)e(to)g(default)g(ev)l(aluation)h(rules)416
-b Fj(m)26 b(D)1746 417 y Fl(\\Big")e(displa)n(y)f(mo)r(de)836
-b Fj(d)26 b(B)1746 496 y Fl(C,)d(P)n(ascal,)h(F)n(OR)-6
-b(TRAN)23 b(mo)r(des)536 b Fj(d)26 b(C)p Fl(,)39 b Fj(d)26
-b(P)p Fl(,)39 b Fj(d)27 b(F)1746 576 y Fl(T)1785 590
-y(E)1824 576 y(X,)c(LaT)2038 590 y(E)2078 576 y(X,)g(eqn)h(mo)r(des)687
-b Fj(d)26 b(T)p Fl(,)39 b Fj(d)26 b(L)p Fl(,)39 b Fj(d)27
-b(E)1746 656 y Fl(Unformatted)d(mo)r(de)855 b Fj(d)26
-b(U)1746 735 y Fl(Normal)d(language)i(mo)r(de)727 b Fj(d)26
-b(N)1746 844 y Fl(simplify)c(form)n(ula)937 b Fj(a)26
-b(s)1746 923 y Fl(put)e(form)n(ula)f(in)n(to)h(rational)g(form)502
-b Fj(a)26 b(n)1746 1003 y Fl(ev)l(aluate)f(v)l(ariables)f(in)f(form)n
-(ula)553 b Fj(=)1746 1083 y Fl(ev)l(aluate)25 b(n)n(umerically)807
-b Fj(N)1746 1163 y Fl(let)24 b(v)l(ariable)g(equal)g(a)g(v)l(alue)g(in)
-f(form)n(ula)328 b Fj(s)26 b(l)h Ff(x)8 b Fj(=)p Ff(val)1746
-1242 y Fl(declare)24 b(prop)r(erties)g(of)f(v)l(ariable)548
-b Fj(s)26 b(d)1817 1322 y Fl(Common)d(decls:)32 b Fj(pos)p
-Fl(,)24 b Fj(int)p Fl(,)g Fj(real)p Fl(,)g Fj(scalar)p
-Fl(,)h Fj([)p Ff(a)p Fj(..)p Ff(b)7 b Fj(])p Fl(.)1746
-1430 y(expand,)25 b(collect)f(terms)783 b Fj(a)26 b(x)p
-Fl(,)39 b Fj(a)26 b(c)1746 1510 y Fl(factor,)e(partial)f(fractions)726
-b Fj(a)26 b(f)p Fl(,)39 b Fj(a)26 b(a)1746 1590 y Fl(p)r(olynomial)e
-(quotien)n(t,)h(remainder,)e(GCD)264 b Fj(a)26 b(\\)p
-Fl(,)39 b Fj(a)26 b(\045)p Fl(,)39 b Fj(a)27 b(g)1746
-1669 y Fl(deriv)l(ativ)n(e,)d(in)n(tegral)864 b Fj(a)26
-b(d)p Fl(,)39 b Fj(a)26 b(i)1746 1749 y Fl(ta)n(ylor)e(series)1070
-b Fj(a)26 b(t)1746 1857 y Fl(principal)d(solution)h(to)g(equation\(s\))
-448 b Fj(a)26 b(S)1746 1937 y Fl(list)d(of)g(solutions)971
-b Fj(a)26 b(P)1746 2017 y Fl(generic)e(solution)958 b
-Fj(H)26 b(a)h(S)1746 2096 y Fl(apply)d(function)g(to)h(b)r(oth)f(sides)
-g(of)f(eqn)360 b Fj(a)26 b(M)1746 2205 y Fl(rewrite)d(form)n(ula)965
-b Fj(a)26 b(r)1817 2284 y Fl(Example:)31 b Fj(a)36 b(r)f(a*b)h(+)g(a*c)
-g(:=)g(a*\(b+c\))1817 2364 y Fl(Example:)31 b Fj(a)36
-b(r)f(sin\(x\)^2)j(:=)e(1-cos\(x\)^2)1817 2444 y Fl(Example:)31
-b Fj(a)36 b(r)f(cos\(n)i(pi\))f(:=)g(1)f(::)h(integer\(n\))i(::)e
-(n\0452)g(=)g(0)1817 2524 y Fl(Example:)31 b Fj(a)36
-b(r)f([f\(0\))i(:=)f(1,)g(f\(n\))g(:=)g(n)f(f\(n-1\))i(::)f(n)g(>)f(0])
-1817 2603 y Fl(Put)24 b(rules)f(in)g Fj(EvalRules)j Fl(to)e(ha)n(v)n(e)
-h(them)f(apply)h(automatically)-6 b(.)1817 2683 y(Put)24
-b(rules)f(in)g Fj(AlgSimpRules)k Fl(to)d(apply)g(during)g
-Fj(a)i(s)e Fl(command.)1817 2763 y(Common)f(mark)n(ers:)31
-b Fj(opt)p Fl(,)24 b Fj(plain)p Fl(,)h Fj(quote)p Fl(,)f
-Fj(eval)p Fl(,)g Fj(let)p Fl(,)g Fj(remember)p Fl(.)1746
-2968 y Fk(Numerical)37 b(Computations)1746 3133 y Fl(sum)23
-b(form)n(ula)g(o)n(v)n(er)h(a)g(range)654 b Fj(a)26 b(+)1746
-3213 y Fl(pro)r(duct)f(of)e(form)n(ula)g(o)n(v)n(er)h(a)g(range)458
-b Fj(a)26 b(*)1746 3293 y Fl(tabulate)f(form)n(ula)e(o)n(v)n(er)h(a)g
-(range)525 b Fj(a)26 b(T)1746 3372 y Fl(in)n(tegrate)f(n)n(umerically)e
-(o)n(v)n(er)h(a)g(range)386 b Fj(a)26 b(I)1746 3452 y
-Fl(\014nd)e(zero)g(of)g(form)n(ula)e(or)i(equation)461
-b Fj(a)26 b(R)1746 3532 y Fl(\014nd)e(lo)r(cal)g(min,)f(max)g(of)h
-(form)n(ula)500 b Fj(a)26 b(N)p Fl(,)39 b Fj(a)26 b(X)1746
-3611 y Fl(\014t)e(data)h(to)f(line)f(or)h(curv)n(e)719
-b Fj(a)26 b(F)1746 3720 y Fl(mean)e(of)g(data)g(in)g(v)n(ector)g(or)g
-(v)l(ariable)389 b Fj(u)26 b(M)1746 3799 y Fl(median)e(of)f(data)977
-b Fj(H)26 b(u)h(M)1746 3879 y Fl(geometric)e(mean)f(of)f(data)714
-b Fj(u)26 b(G)1746 3959 y Fl(sum,)d(pro)r(duct)i(of)e(data)790
-b Fj(u)26 b(+)p Fl(,)39 b Fj(u)26 b(*)1746 4038 y Fl(minim)n(um,)c
-(maxim)n(um)i(of)f(data)559 b Fj(u)26 b(N)p Fl(,)39 b
-Fj(u)26 b(X)1746 4118 y Fl(sample,)d(p)r(op.)h(standard)h(deviation)448
-b Fj(u)26 b(S)p Fl(,)39 b Fj(I)26 b(u)h(S)3942 -364 y
-Fk(Selections)3942 -198 y Fl(select)e(subform)n(ula)e(under)h(cursor)
-493 b Fj(j)26 b(s)3942 -119 y Fl(select)f Ff(n)5 b Fl(th)24
-b(subform)n(ula)770 b Fj(j)26 b Ff(n)3942 -39 y Fl(select)f(more)1094
-b Fj(j)26 b(m)3942 41 y Fl(unselect)f(this,)e(all)g(form)n(ulas)650
-b Fj(j)26 b(u)p Fl(,)39 b Fj(j)26 b(c)3942 149 y Fl(cop)n(y)f
-(indicated)f(subform)n(ula)628 b Fj(j)26 b(RET)3942 229
-y Fl(delete)f(indicated)g(subform)n(ula)588 b Fj(j)26
-b(DEL)3942 337 y Fl(comm)n(ute)f(selected)g(terms)700
-b Fj(j)26 b(C)3942 417 y Fl(comm)n(ute)f(term)e(left)n(w)n(ard,)h(righ)
-n(t)n(w)n(ard)379 b Fj(j)26 b(L)p Fl(,)39 b Fj(j)26 b(R)3942
-496 y Fl(distribute,)e(merge)f(selection)629 b Fj(j)26
-b(D)p Fl(,)39 b Fj(j)26 b(M)3942 576 y Fl(isolate)e(selected)h(term)f
-(in)f(equation)443 b Fj(j)26 b(I)3942 656 y Fl(negate,)f(in)n(v)n(ert)f
-(term)g(in)f(con)n(text)519 b Fj(j)26 b(N)p Fl(,)39 b
-Fj(j)26 b(&)3942 735 y Fl(rewrite)d(selected)i(term)793
-b Fj(j)26 b(r)3942 940 y Fk(Graphics)3942 1106 y Fl(graph)e(function)g
-(or)g(data)741 b Fj(g)26 b(f)3942 1186 y Fl(graph)e(3D)g(function)g(or)
-f(data)629 b Fj(g)26 b(F)3942 1265 y Fl(replot)e(curren)n(t)g(graph)815
-b Fj(g)26 b(p)3942 1345 y Fl(prin)n(t)e(curren)n(t)g(graph)844
-b Fj(g)26 b(P)3942 1425 y Fl(add)e(curv)n(e)g(to)h(graph)852
-b Fj(g)26 b(a)3942 1504 y Fl(set)e(n)n(um)n(b)r(er)g(of)f(data)i(p)r
-(oin)n(ts)644 b Fj(g)26 b(N)3942 1584 y Fl(set)e(line,)f(p)r(oin)n(t)h
-(st)n(yles)824 b Fj(g)26 b(s)p Fl(,)39 b Fj(g)26 b(S)3942
-1664 y Fl(set)e(log)g(vs.)f(linear)g Ff(x,)i(y)f Fl(axis)653
-b Fj(g)26 b(l)p Fl(,)39 b Fj(g)26 b(L)3942 1743 y Fl(set)e(range)g(for)
-f Ff(x,)i(y)f Fl(axis)771 b Fj(g)26 b(r)p Fl(,)39 b Fj(g)26
-b(R)3942 1823 y Fl(close)e(graphics)g(windo)n(w)759 b
-Fj(g)26 b(q)3942 2028 y Fk(Programming)3942 2194 y Fl(b)r(egin,)e(end)g
-(recording)g(a)g(macro)540 b Fj(C-x)27 b(\()p Fl(,)39
-b Fj(C-x)27 b(\))3942 2273 y Fl(repla)n(y)d(k)n(eyb)r(oard)h(macro)734
-b Fj(X)3942 2353 y Fl(read)24 b(region)g(as)f(written-out)i(macro)424
-b Fj(C-x)36 b(*)g(m)3942 2433 y Fl(if,)22 b(else,)i(endif)1051
-b Fj(Z)26 b([)p Fl(,)39 b Fj(Z)26 b(:)p Fl(,)39 b Fj(Z)27
-b(])3942 2512 y Fl(equal)d(to,)g(less)f(than,)i(mem)n(b)r(er)e(of)506
-b Fj(a)26 b(=)p Fl(,)39 b Fj(a)26 b(<)p Fl(,)39 b Fj(a)27
-b({)3942 2592 y Fl(rep)r(eat)e Ff(n)e Fl(times,)g(break)i(from)d(lo)r
-(op)459 b Fj(Z)26 b(<)p Fl(,)39 b Fj(Z)26 b(>)p Fl(,)39
-b Fj(Z)27 b(/)3942 2672 y Fl(\\for")c(lo)r(op:)32 b(start,)23
-b(end;)h(b)r(o)r(dy)-6 b(,)24 b(step)421 b Fj(Z)26 b(\()p
-Fl(,)39 b Fj(Z)26 b(\))3942 2752 y Fl(sa)n(v)n(e,)e(restore)g(mo)r(de)g
-(settings)612 b Fj(Z)26 b(`)p Fl(,)39 b Fj(Z)26 b(')3942
-2831 y Fl(query)e(user)g(during)f(macro)683 b Fj(Z)26
-b(#)3942 2911 y Fl(put)e(\014nished)h(macro)e(on)h(a)g(k)n(ey)580
-b Fj(Z)26 b(K)3942 3019 y Fl(de\014ne)f(function)f(with)g(form)n(ula)
-563 b Fj(Z)26 b(F)3942 3099 y Fl(edit)e(de\014nition)1010
-b Fj(Z)26 b(E)3942 3207 y Fl(record)e(user-de\014ned)g(command)h(p)r
-(ermanen)n(tly)125 b Fj(Z)26 b(P)3942 3287 y Fl(record)e(v)l(ariable)f
-(v)l(alue)i(p)r(ermanen)n(tly)392 b Fj(s)26 b(p)3942
-3367 y Fl(record)e(mo)r(de)g(settings)g(p)r(ermanen)n(tly)390
-b Fj(m)26 b(m)4235 3650 y Fh(Cop)n(yrigh)n(t)4538 3648
-y(c)4521 3650 y Fg(\015)21 b Fh(2007)i(F)-5 b(ree)21
-b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4197 3714
-y(designed)g(b)n(y)h(Da)n(v)n(e)h(Gillespie)d(and)i(Stephen)e(Gildea,)h
-(v2.1)4467 3778 y(for)h(GNU)f(Emacs)h(Calc)h(v)n(ersion)f(2.1)3942
-3870 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e
-(distribute)f(copies)j(of)f(this)f(card)h(pro-)3942 3934
-y(vided)23 b(the)h(cop)n(yrigh)n(t)h(notice)g(and)f(this)f(p)r
-(ermission)h(notice)g(are)h(preserv)n(ed)g(on)3942 3998
-y(all)20 b(copies.)3942 4090 y(F)-5 b(or)24 b(copies)g(of)g(the)f(GNU)f
-(Emacs)i(Calc)g(man)n(ual,)g(write)f(to)h(the)f(F)-5
-b(ree)24 b(Soft)n(w)n(are)3942 4154 y(F)-5 b(oundation,)28
-b(Inc.,)g(51)g(F)-5 b(ranklin)26 b(Street,)i(Fifth)f(Flo)r(or,)h
-(Boston,)i(MA)d(02110-)3942 4218 y(1301,)22 b(USA.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/compilation.txt b/etc/compilation.txt
index c35ab96dcb5..426cb19ade9 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -370,6 +370,36 @@ symbol: gcov-file gcov-bb-file gcov-never-called-line gcov-called-line
-: 18:}
+* Podchecker error messages, per Pod::Checker
+
+symbol: compilation-perl--Pod::Checker
+
+*** ERROR: Spurious text after =cut at line 193 in file foo.pm
+*** ERROR: =over on line 37 without closing =back at line EOF in file bar.pm
+*** ERROR: =over on line 1 without closing =back (at head1) at line 3 in file x.pod
+
+
+* Perl Test module error messages
+
+symbol: compilation-perl--Test
+
+# Failed test 1 in foo.t at line 6
+
+
+* Perl Test::Harness output
+
+symbol: compilation-perl--Test::Harness
+
+NOK 1# Test 1 got: "1234" (t/foo.t at line 46)
+
+
+* Perl HTML::Lint::Error::as_string()
+
+symbol: compilation-weblint
+
+index.html (13:1) Unknown element <fdjsk>
+
+
* Directory tracking
Directories are matched via `compilation-directory-matcher'. Files which are
@@ -404,6 +434,7 @@ Compilation killed at Wed Jul 20 12:20:10
Compilation terminated at Wed Jul 20 12:20:10
Compilation exited abnormally with code 1 at Wed Jul 20 12:21:12
Compilation finished at Thu Jul 21 15:02:15
+Compilation segmentation fault at Thu Jul 13 10:55:49
Copyright (C) 2004, 2005, 2006, 2007
diff --git a/etc/cs-dired-ref.ps b/etc/cs-dired-ref.ps
deleted file mode 100644
index 0ce4ce2103e..00000000000
--- a/etc/cs-dired-ref.ps
+++ /dev/null
@@ -1,2096 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: cs-dired-ref.dvi
-%%Pages: 1
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: csbx10 csr8 csbx8 cstt8 csr6 CMSY6
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips cs-dired-ref.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.03.19:1906
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr6
-%!FontType1-1.0: csr6 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25711 25989
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr6) readonly def
-/FamilyName (csr6) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr6 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-24 -250 1193 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A1390082AA03548CCE363896DC
-8285532C521369225C90F80D727FDE65092A0044327885EC680B2ECCDFCCC5C5
-9B4F8AE2D078A25AEEA345A6E6A1D9F372DB3CF2B4AE635D7DB823D70EC82CC7
-1CF7E7DD0D047DC2513344927562EE8FDA9076DD136C4996A22589ABE803CAFE
-BDA907DB1C62DABD22A05EAF9FA8313F815BEDB67BADCEB77C1B22D845131345
-22CF2296D57DE34C11EDF6DD3E42B726C8D60E4A98663DE8F7CFBB416F0A4B01
-734649B217E4E94992F66E77AAD2A7289B5413E7F1DD41B9334CBC2EDE944C80
-D9758E1AC551D298DDCE91757B374D66B6BCB92998411DD3B7E6350480D52ADA
-A0DA546F63DF2A7AE22BE6BF9A78F5C34CBB597DDC4FF03AB527637DE7F3AEBD
-59ACFB058C4833A4A62A9125B4D90E7073184DAEC9D4662987F5CF6D0484D870
-C0FC4A29C03AF2BD159097D46F491069FF43EB0B92CEB9F09E71E089F2C916AA
-57DF56E8F0595F9ECB2B1F2431411F7311294DFA91459BC05EFD5C1C68099335
-7BF9559397107F8ED80B43B6E113CE5AD25E1F980D08A891F2A2C0F3A99B7281
-55128F8A4CC9B78A96D6FE58AC946267448735F669C6DF170FCEBCA6108F94C6
-CF3D5DBB8B2304D66AE30096A7D7E17A5E8DCA207567091B96CFE64BA77AF942
-E51BCF3793EF5B02DBF510FAC25F4E523C54CAD23CF2F472B4B3D42BC66565A9
-F5794FAB132F78020CDAB120A21E23DBFBE16FB32F7A618A7736C5F269691069
-D8B35B291D6876340C4158958C56A6717C5DEEA0A86C9C89D9BACB999156717C
-BFFE2CC56DF4F47B56EBEE1D2C3A118208D9778776104AFFE60A0C7A2BCC9ADE
-FD471CD27FA8318703D497D7F1E2F51B67B9E50D9A56C85EFBED66535792D720
-974ED9168E082F5211F2F607D91F5D81AF63A2DDD31D23E65D3AF936FF194F6D
-B9EF5D40498DB69F3BC87E7E19AE76FC0C54E0B4706FA34621284606BCDAB55C
-32BE1E917D3B3CC1AFCDF3D35507E63D119B0A3174D32B6AB0A05A8F919A426D
-9CB0E7F90458CA6C439565A9AD5648C12F47BCA98599D31E834654AD20E719AC
-64D073F8DA31D1FF07C1AFAEAD34D9A58C9CFB12FF747775D5CDEC0C1D84FF41
-B8EFC696D77D2105043CD29074D828D1E03C1A2CBB80C5112F4CBCCB4A769BB9
-A4F91F4366DF0B44B0480E6D1522A779C4EA84DBF398B540A2A4546216DE7B02
-CDFEAC0DF8D9A35DFD72457B2FC7F051D85EA1437F13ED17E53D5DE0F38A5AAE
-58B077651C978C555A9873AA29F0A4ADDD1B6BC50EA6C95B1588E7F8D6049EC3
-8D9D2730FF086983030ECAE9600D8A11335A186A6FE48DAFF7F663872B23F22A
-C62F5ADA341F5BC0106B99ACB3A1C8268D3DA2C4F93B17749BE68AACEBA9D456
-B3F0B7B3C1FB011B20FDF4067A48421B1ACAD3F6210BCDA6D664361849170191
-7E57121F1D6787DDC6E8EF9022A91290E1534CFD830134126467D7E328E92267
-B730800397D9A384D62460853F56C6C9A634D04E02932EC17CF0F54705615E03
-58A437569FD55BD44A33C29DADE84E385C97F7B788106B018E3C265726C31E4F
-B1509BB80A94E8258F503048C85DC89C7439141A587E13017010AA6DA23FA2C6
-97E37155FA9538B31C4CE0B72E1417382A1A1223828D9C4B2178EEA561BFE6B9
-43AEBE58EFAE10175760ADC68AE5642AD2D413F2B9D35DD07A69B45FDDF2673D
-28B02C23EFD71C08690ADF55C233BDFB3DBD1769138EB92AB13023B5D9C8FFB6
-B0A93C729DCD5E5CB8ACF9F7E1CBBA9B67CCF2A0296C8D1FB7113405844D654C
-33ED93894598563D1ECDD5CDEE590D8063C42782DCEF3812968B7F6DD27F409C
-91A278CFDE7D4803E089C0769EC1C3C0CE1328EA3C53827D65DF602AB6DE79B2
-F4FD4A5C9E3047B07A084E1B48F8B9DB9C8F4F8ABA76A2E1716C8103CD1A7191
-E0DDB5627F65E3475E3436250D9000B37F82CD5092E1638F1C771BE23B3C7494
-15F16719E4C1549FBB4C5E7AE764BF97FC458319AF304B72CC1B73C5F5A0CABC
-1C8134C14F861E325B030719248E3AF17D742D736AD0F07CA757AA4A1BCE50C6
-83C0DEBC1F64D96332769A65AFB4F8DF6310D8DB846431392B63CEB036A6FF54
-410E717681265F811A992B82B302F406614183A9BDBBAAEA43BBBAF8828B3D74
-7CAB59D02F4C41B5E8BB2369CC4BFDB378CC5831AEF9DF1715F915365968A422
-66FE4CC18FCE0666A1F0CE9A202B5F581D252347BA49B5F351EE40FF21F68B7C
-3DFBC1920114CE2D02D564F1B5C398DD834E20E9DC2639E3B7A2935D77894960
-AFB1584B7E0094C9F22D69BDB0F005CFBFEDF56E08790DAD1D3CE2AEE6C90298
-6507CC72FDC0BDBEA2D45CB8544A7001AB67B8B3E9A359ACBFCFA135DC277A44
-D578F9E962F1CA8D31E34D3128AE12E178AF39B18159EBEA4D1D0829DC536FD5
-8C48E955D7D52D1BD6527EE388C1BB2E6A5DADD1E7C452160A5D4768146E8811
-8722D5F9D69E925D6699E7EC2DE2C645FDCA36AB6A06BAC60DE1C355401A35C7
-E287DE71AD3A6CAA532A0DF377C6E02583D6DDECA77FE50842214051AFA0418C
-62244C0213DEB448711801EEF13CF96D498E45209185AB6CEFC9F304D32ACA2A
-98E8D8EA3737EA2F5C2BD6A1CFD08B7E2B3C0285BBBD2199AA120AE737B8B269
-535C20CC1FCB4612EAF3EEF2B49E98CBDF1F71F997DBC89403E7CAFA2F6E2B4A
-E9C90F2FE5FE13837FFE33AB01414903C905E4DA170F12C3F1A11BFCA51049CD
-6A34457EB03EDCE6DDBEA995DF832AD05A84DCD3A672FE6C35556FEB442202C4
-427D004540520B66AD955F2ADC68DD53FD7E9AB3B38DF22D8C44549F06214082
-15A7F95684F1727A53EC834E9CEBDC4C599B0A9A255BE0FC78EECDC9CFBFDB35
-29EFCC293A02D52F20E3EF5C148C1F6CF5BD4FC7F42D00411FE742BAD03AFEAC
-FA91FF2661AC60D5EBEC548AF4B4E0845E3D02AB7C9FC9E68CE7F1B5E4DE1EFD
-077562EDE46E6790015D18C0E9D9A52D5C7D617C5B7820924D99381FB8BF04DA
-5EF1732435FE328FBF8B1DEC60D5BEA45890A2B6D66A7B4B47B03FD3D19D9229
-9D1C8458085C909C125472CBC53798C16AF2C6F44ACEFA2F6CB6C5DD84B648EB
-1E1468D6A89DCF23A4AFE8C8EEA44048D240D392D0CE05C082CD711BE907BE94
-1E7ECE39CB183A185E602C47680AAE88859618761CB8A5282ACE290EAED9265B
-466DF5124F1C78253AC2DBABCF010D960A26E60830E11475B1BE35ACCD48036D
-97EC4867D6AE95F67A563952600952D30DE1F148B2B6950E33B2FCBD7ABE5BE5
-9CFFF37354288D61FC68B3377C6C24749C3B06F87F25D4E35CD717B6A9EF1867
-D4C13E024231589C9E89A3C87AF9F926B329419728A7F04C93F186D16D322191
-AEA715EF468CAE95EF9DFC6B2B69074D10C1866651961A061B909DA1FCABE3FE
-3855C578C953F5DAAAAAC876A4FEA53498B40DEABFF5DCCFAF8EF467CB26571F
-6E5D54FBACFF3ABB4EA0B1C41F237E26667D9DB110A600F0CF98B6066BB145B3
-96DC26800F08437185590EE3D2C080B2A547B51C7A131E9F7B55F0772DE5C844
-C2E8B1F55EA131D16E307008E408DD8A6665C97A01A63AB6BE1B41A158EF2F27
-348737DFB0B31ED64D5EB558A8E0D99478C8A2206FA0F050ADC736BD32CA0339
-D0305441F007C7DFEE295D6360BD4DD34FB25F2A07F3B00D2A4B3CDB49F021EA
-2DDC4D625F7CA6B50DED913ED0643F556A686E46BCCAEA641692FE2E996CB21F
-33ED78F3010D51EDE32C0A0AE3491FB91E7AA05D015A9AEA3B727C4EE45DF853
-37C5E0BE05D272C3A0C435C9C1CB1A1966AEE7F1687524246D409B0954971282
-53F7661B5CFFC8480E1BA4C039BF214DE3C7A1D7F0DC372CEC274F0945BBB948
-831DABEC5825C95ACD926B23B2EEEE6ED531B27DC3BFF41EE7554A75A0EA4B25
-A3461ABCA0C1558DCC68D8BA7AC6A05D0BC2C32CDA016655D87E2CE0501AE6C7
-D9324D637A9D70CB9EA0F15667B1730C0DA56400298741857E6E6A426E9CD5DF
-4F07CB4E882875B9DFC47786D1DFCC0C4EBA6EB5F7B890B2904E3FC00C4E2FF4
-7282022BE6254C35FCADE5AF9B6BE80864DA76D437D0284C3BEDD35B2209B5CA
-7A2D69EF139C6611D38FDBD46AB7BEFFC13BBBD9FC6564BC859B531B848A7C97
-8DBFA4CD4C98CC8D3E170955222011FA738A2A940B3D71BF0A18E4604FE2331D
-96588E9DCC91F026602044835C12BD112E7267DF7C0B674D48CFBCDA7B64B4ED
-1C16BC6F1A17AFED38C8943994F3E07771471A950D91B3C99F1B11D85A5142E1
-DBBDB2D142CF48130AF3E03F4D06DA816AF0914D0DBA5BB270AEE4E66F9C6BA3
-A57B1A68C3C0088D2248309C0CAEA2D5AF93F1734201F7B4580DDB4A4277DD0F
-FCC56F43D4B1E5DFF341C8952A723A40A02DAFCD95E57D975300484F68EF3507
-1BFB61E4E4CFFD0DE5920B271BBD4E3CB91EF76D42AB30427CCB980FA4736497
-20E8A12FD2E0B4F14E55482C99272941BBD7F75667929869C1840DC4E77B7AFC
-FEFB1DE383AB74441B16736487C2071B29015C52D47E1DFF058A4393BDB2F07E
-1BE759B8FBE39B80669F272BEA0ABD7C36D94C5A53806EC6F8C9FD5B68560815
-2C7933A78F7E4524C14B3CC0BCF25D44B8ED70E46026C7959E1CF055D07D8871
-8C576458B8C9DF424198A618B8E3377631DC6CC7405624160EA52171B167951A
-3234D91595AEAFE425F31872F11693FA0F9B1F09C6D2E19CBBC66EC4543A90E1
-D9173ACC94F7FE489010109CE1EBB2AD8E2E807C62875867D8FACC3805650253
-21F8E64CB5ABED16CEF3FC29936DB8B06E015C041198B700B493D274E2F3CB25
-D53F5D46DDDFCAF86C876B3FCF5CE00875D8A6237DB1247199AEFA377B4BA19F
-AFD56AD2FD2A463800579DAD33112DF863E2C504CFEC293D3F30BD350C77A248
-C3D0CA21D662F665407A19B6D0DF95FD73F01E530440C89924F0C2854EF730B0
-FEAA26912851247A73E99C0941CEC44FBEAA49275B96B42F61C6A446C3227562
-7751D752F3E0E8C634B129BD953C44829EB1876ADBCACE29E10F0948BB931A0E
-3CD1DA2129AA3CD2CFCB25A59D581F0A10F1813FC4501B3C97CA05EA3C7F69BA
-262903FA7EF879CF03FC000B23E09E9AAE09A022C0658C73730AD5822E0B989B
-A845ADFDC9F83879A747309EB8B819A5F1BD54C17DEDD16B24DED8A068516060
-4E28D3559B53947CA1F9FB1DF17370F5A76CC796DE2DCB2497CB476C73063977
-CCDEFFEC5940BAD140AF5B8EF887C034E9EB5A11DB0CACBC36D91B5756E43CC1
-3F873330B15EE187C3DE825D284E81FBC790DB5FDC8D4387D970450EF2DDFA09
-74F0504B90A0A9A643AF661F7670D4054DC3D1A35F5CE3D0C6308E33ED883D28
-B6F99E31AD5C291577CA6018F34CA0A69EF627F95C3ABF760A2F29760A6C8CB5
-2339B9C653FB9E73172354E5F9256FDF9B70168CA01089017C50C17FC5004AF3
-C906F760F7D05D0AE20BD3ECB7C118A9FA2022606848CA9D0E659E0F077A6293
-3F6E8494CA79BA412FC3C535E5DA9BDC2B96A336CFC803AE8B7CDE2ED42F9FE7
-236C33353457A3387978F50558A639345FBB8BB5954A86D855DBDE9004BB24AE
-6E3B6356B1C7F7EDAD3C8BA35BD02BEC40E17FB92E4E76EBA9536D8750BB4C9B
-AC67FA6D253A6384FE9EE3436EF62E620E87B961358B9F09CD64C864FC9B4CD7
-4A774CE71301176885DEFF3437BA9549B4E7FA3B9A46EF380C42154131482854
-EBCEABA59FC594AE632131479D682D88982173C51E64905D4131DE51C3D241B1
-51CE0B3EC3388CDDBA6DFBBAB2C2932B597BA3F10BA2FDF57B2FE8FBDB3A89CA
-B3BE45A42742D3343AAAA01C0F7A5FB1A50BDC460C9736867C41CC9D10F01863
-110AF2BA750E0920646FDD4A30F5274B295C915B2E832D01249146A9EFB7E30A
-897762A22C1ECC17B3E29294DC306A27944699DAD3759D838E75435D7F52A1BD
-8CB5ED924328F734A535193296AF4CC70AD6422E8ED3572B8B104BC40A28C8FC
-DA9E9B8B47FA9A94BABC582D3608BAE0CB94C2B67DC65ED95281387BD40B294C
-2FD516909ACEDE90991C023FDD3C5584EED0CBEA055A0221B575A62FBC5ECC72
-241D6C80260A4355B92E92EF644257C00E13D82D47CF0740CE71D1462705FBB3
-3E8F8DB59C787154BBE9E0FC791606BE3BD11537CBDD858487183595255E3360
-00EAB3E593AEA4AE635D0DCDB7F0AD2D95ACC4D6C37BE01762CB5E5D728B780E
-14A139A7F5E329ADC6C406A266AE90ED6DFC86D68A417ECB7A486EF0551FDFD3
-C83793A4B3F305D380DC56FA962B5474ADB62DEF714FFFA498467934E95BC976
-BE99035AADCB5250A5DD5FCAA64D3601BD788C35C214058AAB025DD3B77864A4
-76BF7F562574DC4466B23C7256246BBEC7E47419D3B7924AFDDDB7B605D499F9
-815D19F8BD8797AAC599DC62F2B3CED680A3860BCF87428A993BDA11643B830D
-ACC0D0493DCD72AAA9ABA51A8514E91EDB75DEC2378D5710332707DB8E9A3C61
-A85D1114E88D89CBDEFD3BE65C215292ABFFAF211CD17605C4DB85B9AE505150
-BDE896444F55C7A15BFEEA608D8055583487B1DFB5E831E35AEBECCA99EE9348
-2A428FF4DCEEFC005FC7D54AC750E1D228329718711AEA3AFCCFDEED13884A00
-DD02186AD492BE03EA4C836D3994CB345511AE8A0981753F77B562BA3A0F0703
-45EE012D273721070B5CC63453E78EC5B40E3F1845F08AF780885D5B55F7552D
-385F2F22BC86C4D37CFB2B8D43AB30B071DCF1FF032575BD87354EB680ACF012
-3881D4428F9AD52478B55858CE48CA964291FF97AB5CB46FABB04EED462AD1CD
-07404089DF52B923E492CFA2120C11DFF6156FD3A9FBE7B7AA4BCC4ED3BD4EF4
-E21200516D96DE372E8139D56C3F76FB29E42FFA6531AFCBEB2F6DA84336FA31
-8E7028E1E0D828AA135620FE30198506A3E094EAC140370D6C35293E816BE135
-96704BE5E4D6D6C83B42F91CF760D7D7E5DE20F569B31A3F49B3444AB5418B71
-9F72E599982F16AB21C83370BC1B3F9CEF750804FFF8C251368FB57850D5C49D
-2D49E43890C19232329E930ED9B8543DFE943F9C325467716C1CA7B43EF7BD27
-E0CE660DF3E6EA1D32E1C51F1C1CC36D273F1A482C9A62A7983D59C75EAF354A
-DBD703801513C471BEE721C2C728DB77658CC64F59FA9606FE85A3955E956EF5
-0537F5DB54B18E15622FC1187746362ADAA7B93BD0B0B3C1295FB350430E00E7
-F8C852467D0035394DDA11ECAB23FBCEF8D8888929C41577561DEC1D96D36CE9
-F45F0F17674E9C6C4133B36FB19936DBE5BABEE039C9BCD0AE86C9F15F218C39
-0CFE18EE9F26D4E0188085820F87D2BB8ED4C81191F36BB157AA2D97FEF3C500
-06DEFE2635F4A45F78FE9AD3585EEEB3F10651733DD1F4808BCAC418F92A7DF3
-B2E1712FBF5FF569E4E930E70E054A22F6862CAA271470C9F4358FB6CD1A3D3F
-15048080030F17D92DB7692257C8528DC80C79B145F29720F9468CE7768BFBAB
-5169811E01D06D43DD8A3B0F3C002E79248A48445DE4844855326A7E58F54876
-F9744E723980B6A61907CA9A13F4C12F823ACFC8F778E7089843E11216782D8E
-89D4875DFD01BB67BF85A0692BE5048AF1D3EB1CF8C087BE6FFFD60822CA5B47
-CAC2413F7A4E8A0DA4CF76C340578918B40FEDE73C48193391BE10D7F36019A2
-732B902C426CF80FC98581251100867B6D9BB728B3D010B882CDB07CB6F9FB22
-54F0B427EAF1EDD1FAEA5FE3AD156DDAC67CB8202A4E0D0AE5B49F35FC31E6CC
-87F00E54011DDE86A32DC844D0372FF2430F552545D648138C0502F46D7F90D6
-65736FB0D53F90EAB2DE0ED5ECF7C179FE1D846DF9256A669BE668F9AF96EBFA
-9EB14ABA4113994A6A56FE7FB3E8CA25DDD95273549052106DB8ADC5818DCF45
-841FC9336207CF67EA835DAC1D2C3918BD570C1E56B63D563EACDB397F28E198
-BE36D9E48CC5B228994866F68F858F7CCD1283668A9A949C99F3DE12F975EEBE
-D273BAB53FFDC9915F3EBBE6353C8D74B2E4517092D9BEAE2420942DF0074A69
-30A696E4B7FE4491AEEBD05385FE95E0003E14907C1BEF058D6ABD417CFAC682
-AD0949E6B0AE41D8F6C2C76BEE7F696E8FC623280F96DC4BDFC33F73FAC10265
-49F98BB4CEEF2676279F4FC5928FF7E51C7AE464377E29873E4E8D3F8A384626
-F030953654FD3A42A1127E7EF9DFF57EDD38F7BF4FC146A755FA5F6C810C706D
-6A834B32E68505B9E0726624BA8B7DCA96DBDD8F2344386260478160B0F3F85B
-E09A8E3AC4ACB796BCA6383A47B70F98FD798D6F2C1C385813EA7B3661D43DDE
-7B3C0C6455785420553956EF58B460CCC897187847802EF8DE9FBD23934FA8D1
-AD37F59724DA239776F0F513402D86060903C24105BF537BB2C0BC4D572E6D4A
-144BC35F7C1E710745FC4B02D6EF02F607489543C30B3E10FB765A73A9571845
-549565B5E4DC13EA259603958545A964C38480EDDF58FB409FC43A2909662F39
-5DE08816008CFD770B8A3B7517CBE72A5B23E5D6F96B3D6715B81F03190B3284
-E72034E0F51272427A6DA9C72CD39D8E8E5BB13D232D4D2CD741EF2550220269
-80C4B614FDB1972052A427C723FD8F774BEF5708160F46F11C702E4A35DD1AF1
-A920D08B6B91392293573169711A8A306CC5FCCD1B53B9D7A3DAF2D9911028F3
-3EED3A7E7BC346A70B919387423C91E2813A7A0892AC99BE0CA97D85975348B9
-CEC6BF3EE2BB656506244A9500A94A6CF9FA44AAEA2EBEA1A0DC7414E8B4708B
-1949EE5092B13881877F5F46EA92F3A1988A2C419C6CBA6307EA93F3CDFF149C
-AA132D48FD0818529452C8722E6277F8AA668E8CCB0D177248A00282A0316550
-2F6E96123B03AA20D8E7BEC2618947F71BD405BA3710043C4B627E211113F14B
-ED4AB1117B0A48E925A884F3730D05480984FB80B30744A528B3653F8CFD50B9
-8753EE836F07373751BFC86BF01390080306C3CF564419EDD4D9102FF4656529
-2D88B3F816CC70FB0CDEB89AFA68F968FADA39B23321BE4DC083D7643A6F4ED4
-02CF176ABE73AAE3FAE9BFFDB8E67CDF56330FBBAD21CD1977F5746B08193528
-A23BE8C98888DD658B8655362781AAB8AC2636F06838419FF581FD66B96FECDE
-C69D818BBFB8261DEF801EC40D20A6B79032F4B007C0D6F6907EA457731BA2F0
-60FA71D8886FBABA4EFD51998C1186C4BDF06CED2C2D7FF23250E48BAE3A8AE2
-ACEB2C0D0B37E2C7DA24CF6C43D76D4EBCCF409B7C7E4BC6323061703A5A3EA6
-B1A53EDACBD107296914D927D853C8840D4CF1D833741327FF21FE9BA51A9E32
-C0E97E86F03E9671E32E143894B1F05DCDADFEA60B24655EAFA58807909E90BD
-A5988A86C9BD38E0B1CD98FC79D1ADB5C3ADB78F285A7A314A72DACECCA0EA35
-BAFBB5EAB396AD4729DCFFA5264DC0DD86157078024A590E6067A6F1B5B2562A
-D1F15B3C8B118C15F07F6AB0BF1D9190D30976D88EA982E57D2E202AE26CD9BD
-00FA6220805E6D6FE5639B12813C5A6038851299DF0BD94A205D668CE5144749
-F71A18F633BF283DA453714EFE14E5FE869E524E80BC04A0AC3DEFD93B3231CD
-C88528CE3133EB6287EC0226A4DF0ECD42A13C0FD832320C0E29318D6C237D55
-AEE8B077AF3A819025EB88B94A6831B16E7BC10957C5E7CDAECB20BA23241E94
-CAC0734555505BBDD55A973A06A3C146A21AEEF899ABD43CBFEBC105FFF56C63
-7CE50DAC6913230A323201A81E101ADA71FAD718F35C74406505C62A605246D4
-EECB52D70D5E07D10D13CF303466A8A5198D02485FD445F56B2D90FA7B039711
-22523CF282CDA36BC0FC3539CBAE0E636094E7A37529A026A5AAD5B292D6E55E
-F16FC9E442DDEADEDC307BBBAB221CA11033982F971EAD2AB3E2A0C47805F059
-2333D6C473E1F5CCB9F8133AF91B63A2F3F6FE9FB11EB74900AA2D20C007DBC2
-681E5CF1A025DD2C25268B441B02911492539028345B03EFEB64D2C1AE9CA7AD
-94472236D7DFFCC081197351701145B365AB622CC2E5E09A17B357BBE0B0C523
-5A8D68AFC00BAD865B291678A7D9F83909B29516086D0DD4434E498F7CCD0645
-F327C654165AF137E197B17E6D37F90224F3568706852AB7BF5C78AC69A4C0F9
-23F18949932C058C8C21DC52956DA498E749437B69582751E1E12EB46231A450
-BDC05A65409630B0C6281534035BEC3FE0F3F173CA94BFF7E93E15F66D0B3C73
-F784C00BF1ED61F36996FDC82D0C9A11E1B3718675ABE286429E725A9F383B9B
-168F31734B8EDCB37E82C4B26C9A8553E6C454499CC89289E6045F8810413E9C
-4406391C6989AAA1BE34224B98C2EC4D3986095037158632C17F8D7A510CEEE0
-1C21F1C92593B2066AF4B86DD30E896D548C88B5946D1408D22839103C7A0EB6
-7F3D488173887A94B4A2B367DC8C67531286D131A1BDF35D6041EEAF1A086860
-22BE71A2A535B6264EE70F4C7CEE0990B33075D55733A5BDE0C63499EB9111A5
-ED5DA484D11063D8F03A2CEBC6612DC43D8C22913EB0B8E467B02A15A7595A36
-4DCB8AD0D74CB5493B59EF02B69ADAAC5F3CD7ECE0CA793A378C97E07C37C7E9
-4E5F11CDE9DFD0E61F9B88968A015CC4FB8D7966200C48C6EDCF59AC60CA9693
-74267C4A067BC76F8C0A4F204FDEB9D91CA4A69FE0E30C7158D44E1BAA50D92B
-1AE92896CFFFE56EE0AC571C2AFADBBFE59F1F23D42DAEE552D4D86F00B48F42
-60D7834201C7CCD9E52A7AC3029896C251F52CF3BA23451E8A18A383411071FE
-B4D214A45F297C0B9DD06578ED375B7E302B3AF410ADF197CDE49A0F58B40CC5
-64A4E14453FFB0FF7B59292AD7A63FCE0239FFFD0EBEA23C091D0760693D2ED8
-9A0B66E0125606F15424D3B3D82764BCF6A2A2BD399BDF0EB5B38E4980306D74
-558833268726829CC7579DC4AAD6E9589EB1473D8C289B9E331EA905830D07F8
-042B642F60B69D66B8D2D2FDB948BC16D16344AE983FC67352292C05EA1F5E16
-18DDA42173B00390985D3F8981FD33B102D37BB98B56A4BF76A17DAC639183D1
-8CA84E33BBC5BBA5D41821DA254A5BD4A8E8011D766319E001D2BAABF097556B
-8660001C2A9938E1A08265A3912BBCBDE5B1A592EA64D1F141CC3CD437194CD4
-5E4330FFD0FC6823469A618BA4B5C0E35DC27DB79E90F6F2B563CBF7E1D86A63
-6973573D2A9A8357C4EDC4D4D5C9BF56AAE4035E93B41B8D0807474E54035A88
-997BCAAE58A4A672E47D0F44C1EDA3C3ABC7AB8F3CB4F11AA89C23B00295F763
-38F77E9C4D509C18D4B2DCAE5A26A2E2E12FE603C19C220225A78BEE4A48B371
-935761EC9E601671940DC7E0F7819110E6FE16736AAB9EA8D395ED021957DA95
-5BEF62E5BB3B440CCC5926CA3C5652E22D9DEF2EE4F39764565A505704B3F80D
-37D58ED65304186111BF95C074E3B7097B953E24317BD119257C16434D5CC75B
-C9EFE5B27C115CFA047BDA6B41BD82D7359FB6EBB2F515B8C6750564C316A2F5
-E515EAFA9E5415D2474A3938F85A0D7B12980D11FA95AFCDCC23D131364CC544
-D10B3BD0A4F18A6EEFB79195F7566BAEB133847422802CF3234784FB095C6BA4
-B243A6C25C7BCDDD647988E640036B2662364B87C77E57DD501A017574DF1A32
-843C71FE7091
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: cstt8
-%!FontType1-1.0: cstt8 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 27102 27374
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (cstt8) readonly def
-/FamilyName (cstt8) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/CapHeight 611 def
-/XHeight 431 def
-/Ascender 611 def
-/Descender -222 def
-end readonly def
-/FontName /cstt8 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 40 /parenleft put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 50 /two put
-dup 51 /three put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 123 /braceleft put
-dup 125 /braceright put
-dup 126 /asciitilde put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-7 -232 547 749] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E61A0E1428E106CCC2583525
-72D46D12AB29122B2F73E8A1840E92A8B89FC7EB2DC186823768722F16340C65
-6DD7DC66340FDBED5DE27349212038949E02A53C843B61C70E1DD9DBD0087F65
-15B0F0D9BAE4BB4E41E67AD2A0627A0A172C22D63B4821EDFBCD61B658A40308
-132441266CF3C9493FFD6F22069801D31293B9BE8D89CB818E8ED600661D5183
-2E556F2B3D05DC1D4373F9890892FB7AB653D27E2633AB532F25D6EDE1857DB4
-C1F451A24EA87B44C7CE899D4978EA02D57085859C57CC3F1179AAAFA42490C7
-DA9BDBB4EDF14A2F18DD23B43727FCEAEF202CA5A65234905E786170816442CF
-D6B62BA8F62C10EE680DE45AB210E79CE579DB97E6727D763F4B9054F443CABA
-76BDE6AC53B3DB2F1297AFDAF08ACC65EAF52597D52CB237ECBA29A18AF0C0BE
-8FE6FA66CCEA594306E6F3AE4B9E21BA245325E122B85E38C3DD1AAF78869029
-377FEB743C8E393B1CEBF5118FE83D9F35B7F94FED7CCB0368F5D961179160B3
-0060975A6E3A783ABCCE964A7FADE8A5C8BD5B2039247E9C018E827AEA49A311
-ABCEF022A409DA1D18C821DF8961891AF8DE1AC3E4C4F41F17B8E5661B7C44AE
-308824113BD2D15FB2FCE33EC549E4770E65CEB695D0FE7B5377474B61759E36
-E4C91AC5818A3328B030125132AC01CE1D523E630391C1D8993B4170AD45352B
-6905F6E2E60AA156C0F5111580622309D79CF79EA745830144CC8823B4B5B330
-54BFC451FD8CD5FF0E388EDEA82764535C50F417A9DC659D8326BFEC6E5CA9D8
-D34BA3C647BFE0FA7C8FAD2E87A658F558B8F627C0356DDB161520F1640386D7
-4166B19F03C8024D14BBA67CDAFA3504FE5BDBF8A19E93F313C9B5C83296F632
-3E814A5F5427196DB2633B363FEA67DF56AF73A6F78A28B81CAC57FD11493B1A
-9233A404A1E8CBF2E5E4519A97070049C6E1C389020DD3219ED5D06C044E0F30
-DF4D4B472A3D0BE8B2B554F7244ABE708803E370C11E70298B1AF1E25F2D262E
-4134F7A239BB81496BCCD89F963783CE73442D4305E9EA8D2D08016BECBCD25C
-2E7FA6266569E55664DC7C43695B14B6FB573136E8E5B2D0A2C5EFC1E56A9C55
-021EB6A716D317768EEBE62439B6714F15EAD6402D6CB18772B202DFBCAF4A72
-01C041ECA0CE48C2D458AC0DFBBF9327D4566CD5AA138B21C0578718629C8EF4
-FE605BBD9FF46DA1FB9EBE950D6CA66A02CB7E640DCC0367D635E5CB62A8A35A
-6FFFE390984900CB1385D1C5B708F743895270823715BCB69EEB8D8F36874F51
-A0972B68861EC54632209346594DD1273BDB95F5CAB8B463780B97017348ED2A
-855AC367B9BA949C4F6CD562E6A4D8D49C133D5386646F9428D8AEB6790A33E7
-CE46937E6490E148362FF3DD636512B9D90063425D1BCC351789EBB732209296
-0B45B053697260E744D820447275668126FA78C3DBCB60B0C25230F87B8012CE
-E09068065FF335343A90FC6BD7E62793D1E77DD557CA6169F80484F7151CDE5C
-47305AA06889BEC69CB34B6678202DFF80A0B3F0D345E5C2D0EB04DCD6A378E7
-BA57A2A5EC3F26111FD8C0805ADAAF0355D0CDE87A01C7D8DFFE2EC6A870E173
-898C2B3816CD777C55A7D786FD2BF098CF4C518C728898977D97AA5BFD152219
-E0EB9D3DBBBDF115AB3E253060716D62B9CD254DAEEBE134625069483B82AC4D
-2730EB6AC36A7BA36DC79D8C49FAE2E47F54593A950B869CCA9C4ECD4E93F465
-B9D4513F8BEFED9EADA808A7270CDDF26F3215F0D11373988598C514F9F63BB3
-D49E5F4D91BBC63194EE89C826F9AA488BEA86903CF6A9975D9E2977407D3FA3
-CFCAC175E2A0FEDF042203C88CADFFC1FD0D03FCB765A3B53516836CDC340A8B
-07456DA4DE5BD8BE4E0CF3262F621FF6013F3814961C142F8B4A2E0AC9FC9442
-BC9A4DA90D056F7196DB877078B5A479F2AE9C206BA0CB36C1EAB352972F21BC
-9EF53807A42EEAE6F55CBBBB99E7F6CAD9228F9C69F0AE42C1290457E74179BB
-E7C44073664CB4714C8E56E02D4BF30458B111E0611800C761981DDBA311070E
-E2B1F37775E0C98009709E5C92595B51B5C0D397DFDDF558AEA81C600EABF0E5
-BF0514311C7AA66C444C3D13EA48DBDC5B8ACB12F31BF6225EF1CA6D52F3DF87
-07FF7B7C5D60629C831578D703B70E365E05BB1C166BC09AA6445D149C132589
-12F4EDAD89D1364AF705F5CAFA2A676B4825DEF98F313F611BFA9FA840AE88EC
-AB4B29E8C61162BD9ABC7AC2540AECA52D55A5277035DE68AD43B0A6D5B420B5
-4552AEEB397774E63006D34992E1755C5D0D51161C46FEEDAAA059CE145FB14D
-53270F269340C9BF94C7C1717892327547568B8B5D339664A59A689B59728260
-CF3FD421110CF5B6852D46BFF6E57C26CBA870D726BF73B04A4F83FADC8973E3
-071F7AEF640E838D64B9DEE76C9B9A45E3A6AE564D65D4A5E8D94019E2860283
-68D9228D386BBA73286977CCCDFA092C5DD868936F9DD875BBE83478F031EB03
-D2F92BCA8EDAD6D72341D7A906DE3DA431B65B4CEB8CE79E3AD78BC939EF5671
-FF65A3C67426AE4E49E45F4C8154420E0647883761376178AC4167D0381EBEBC
-B59A48E2B68AB15A2F99F44D6C6D6490CD60878BB9040DFA6A28DCB35F10515C
-CCC43ACFD4E5B75955D307F71FEE3DF10A386B85CDF5F1033633C6EC369EBBA1
-5A415AA426B3A8B48CDE6F754A7BA8072AA99BD61C501142454872E8FF69CDAC
-E63350EB72C2846AE2991E936B1B1EA4AAEB47CFEE542784F5158301015F8D10
-5020956399AA8FA4953F632EFC02A3738297871E55E1B953F0A4C6CCBFCC2361
-261ABE986A2D9BD1658B4C5BBBA208BEA23F717F0314DBF77F264FE46BE92831
-3455CAE4111E9E291E85F6774106B2F9D9339F28FEAB65B95619B07C150C3E74
-AC9C8BAB4ED7C35DFB3B3CC0BAEB67C0D49AACE9B5128E25E471C25EEAA41B8A
-F4E6043DCFB80A35FB7741F0B76805698574941039A897A703F109C6B5597919
-C3CE868E5871466E683B50088A70A04DB9571EB7A5947A0BB2461F222E0D1307
-CFD27B25B505F54CE38AA58573934EBB706A72F13D6722D5CD68900B196C59A0
-D457469D5C43DBEC8EAFC88F91AF4B363D6BA39D11515D446830E1A51777D6A5
-4719EBB6D0F2B04EFCC53AF6BB70CC5B7FC88D74FAD1065CCE7BE5C545A11E30
-2E66C05AF6354AB13CD3317ABF745FEFD8E38DBA4D1AAF1641340B1E940679E2
-9FA8B6AAD0D37EE6367E0E7D37F4F30629A54D3438BDD89D6C4EFC3C3EBAF606
-0508ADBF71E54BDDB4B58704EF6B0554DD6221FDB431BAF080E6404AA9E2153E
-FD34D3DCEBD3B1B7D0C80AF5EE4BB255BC08C19B1B06C7737099922BD287ED43
-BA5DECAF672051F967E0F3E9C0AADDBDA2A2546B6A56BFFD0557C864653D418A
-4B1B7F87336494CB026A466F8FA6E492D1CDB9465FBAD7107DCC537D7F00C261
-16AB59B2ADE773E9D6E386DC1ABF23C612EC78058484A5E1B4D293C8D88C8E54
-892CA442C9DF3A16AB1EDD3A673FDC573E98215AB675CEF4A3CEA6EF11F1C4D2
-E643C433E6F846C5240E85DD77E8F55786F3D8219D851A4A2EC3285A8921B640
-AEA54076FE2CDE81148814D5B44994BFC8B1BA8AA0CC29D55B9D419671E75093
-86068AFCAB7CD34DE7229D555F36129AB6A006EA7B022D66CF9054994E55D1FE
-0194638D21916C7DC85335EAACEC28D880D56A577C641CF1EA3519E13DCBC518
-42199B2626C95E503A4D616A255D4189EB395C5B9D5E421304C3720C90119121
-DA3B71761B7D3B88EE8F9E13B645DA1736F6127AD06F9668B437B80B9811999B
-425AB8E41CC713749D0069700A8D4082388F6B951777D0D0EF327326A545DFE6
-15734679385D5B51EDEC0E627CD66320A3C8CAF528FF63DC0EEF4EDDA1708F1D
-54DE66CC8689845EE2C8B199E53F2176C8DB8C16871A95F1C2B75623E495DDDC
-DAC40B2F0C2AA5B4BEF34E85F7014C942EB82771ED07399426C281E6E724B4F7
-9EFC644FFD0B36835D9A29052E3CC2793CCDC387FDDCCB0AC11A01332DF05D4E
-41FDDAEE1AFAEE91552789E9FCD645FC38F78E6354F28F1163B6E5F808A032CE
-296B1A5F44419FB8D34D183446B99A294D9F09E7CC3E8CE953C6971BFE5745EE
-6FCB7CBC1FD7DA6CF93FC65651F89FBDA2D3550DD04C1322F1FCB570F4B5D9E7
-C3162603874B40A18C9B75D33D50FE11BF835C06C4ECFAAF22F9087AB241C594
-CB769CB7C0E2396AEF11C56614DB1A25133209A780AE81C2829CD20EFA1435EA
-79F444108EDA18958F4F7AA04FB1422C0862C2DA45F6F938F350D07E5CA0229F
-4544185723144F9C57AB2A181EEA5EBADB6AA8354A8BF652A2EDF2E7A6BB9713
-04622F85744C6D8F818C4E32431CC4378DC69760BB773BA6D6094172EF07F4BD
-5ACEA4E89A41C2E6795E238A7D7FCD4C26C33B5FA65FE89153F7E7B630E4877E
-84A05776358376676CF0E11430649DD800737B8F1C91E9D822059DADE8C2C0E7
-89FF613D5B1CFD79621A7DAF5652B54B8A2761FA1C545AC80EF60C77861023D5
-0E64B65D1ABC28F524E92068ECC137E5A250F8C2FA42E9CCFB122EA19D4D03B2
-EFF72539E6738CAC2EF2AB949DE2228358EBE2A6DA9A6674DAAEE65DB92AA466
-7590B88165E9484AC4E7D9C906966AF728C7B55AE1788CBCBABA26F77BA0F226
-501CA47F81B4452197D80551834983FF7388342F85525211B5572A1E057F9E64
-6F4B281AC073401CEDEF2020E990A4AF3020F33DF136FFBDB087A4F62039A3B2
-BF1A96553CF5B0165FAC89CA21EC6E9A23F8EF5ED3F57EF1DD35C3E340D74A33
-54221A264176C1676B0A1290B13E48A043E51018666077F171D17A9A62630E33
-72D873CAC592E127EB2E2D2948A7E990674F9132B38C49BE15C335C661311FA5
-C52F446427496227B6AB973A9AE3EA5D5FDB9C4A24AE4451F0F7A05B48140B48
-6301522D8F130D5CDC8DBDD297E0F179B238642E2436B5DB98C0DD43D2B50E7B
-6BA30ED317BCA71BB2B109E70C982ECFE62821D38619B31FBD0D3917628C4BDD
-BBFA43DDD2D2AD28C8709ACB321570A99FAE28989412D5E3E8FE93A681207D28
-9BA01C4388EE00A94E09894B7738876110397D2D40643EA96DC8D0C780C22DF9
-5FF6BA8F46FCA42934A66CAB425270DA12383823776214FD2915C26E0228D948
-56065D62BB717E150A30CE77E8ECC4A1585CD0ABA26DC36231820B9057D9D270
-5050D4C18D22BB970709D6821D6F76F9DBC16B2D1EC6E5BE6C88DE213DE46A5C
-220529B9FEBC3A0CA8D176EC0D74E32AA5CF7345B8FF8F4CE7051C6D4DFD66B9
-EA8F8BC928A6421A0025B404E263F49DB7C54CB7C08DC783FF10FD24068BEA2D
-B0AC7AEEA6386EF4C98DA309231BA3EE83FE788EF7381C7ECEE3FAEB3779CBFB
-E51AFE29D5C49230BE72ED828339FA5F1FE9704CF831345453A84072F3312CE3
-C066947E9CBAE98806A87240022378C2D31F9257A54B0FE5D020F5BC0EFF5479
-CE50C2B49844B0B25E0B32023C7039A746F092B1775D7780DD67A2EF4A147439
-E7E1B3D4FDB73762EF27F5F3A495E60D2DC4A54FDF2AB3AFC054CCA17DAB27EB
-0B30EC4D0922EDE2B081908603E20D88BFD20221CAD443564A070ADCCE970A17
-7BDB1BBA43F4A1FDD52B849E516B1FB2EEBF91D2E6B6D1D4C10D2AF4EB2CFD63
-78B3C368414F2BA66D9D3422FD5164913495FB75B6DF1093A7C238F313AF78F4
-E48B4248C0841F0F4D1CC2BA47BF5E06E133BCA2323F7A9F2C694C7806A17977
-B83A7A714B48727D291325482D96220CDD4DB1A96089C693E57E275225472B9C
-217B6EAC289B8EBBD7273431B1BB1DC243D4B2CF94718C0B2759313D6551E1AE
-4C6D3A92FC3381B1F7E61ED04B063211379C4B88C5C6F22335EBDC24CAD8D9E5
-189A22C3D6F54428F5E2FEFCDE5C0EE2131C519A0DDFEC8851C02D82B5B48265
-7B11A40E8793300CE171853FD82874E09D814F5833F04441329C6650B0B7ECD3
-7FEC743EBD43E7F88542C389BED47D31A10FD8E02C23FF191B9F3174113723DF
-934E3665A5034A639C17B3985CD6D2F1CA289146581EF6D1BE3717EBC7E6A824
-C3D2290BB60244E163D213FF98A281FA409513AED35F15B4097FEFE4C3AACB03
-613570E1D66D29BE3D14AA5F3266920FA088D33948D96BDBA0E3980254360DF5
-7A7E1836BCBABB7BF9C42FC87556F8D08DAAD6249B65AE106296BB7F0C36A86C
-1A7DC23EFB77AF78D006DAFB6A703C6C1A16EDE52BD2B01A4218AC671769409F
-90D13744FB1FBF1F2EB3DA35F5B0D13F3862D69EAC091D48C57C647F71A0D718
-233F6A7950A610E1CAA551BD702098466A9ACF3F74FB64BC0DCE6C952DD26739
-857084C96302B0B641D425EFE5A2857DC340BFD3B8ECED763B298137E930E6B9
-A3C2565EA96CD52BC01A2959B21CABEF6DF7837DB737E006A72E5945B076F197
-84EBD29B05B50A78C92D0F2EF60C8842F26B506C1BE919590F4FB4FF34923664
-868037BA9C227C790BFC0DE4DD05D54D975B64F845540CB8CA4A005F9590B511
-653C782C81F0D64F3FDF8FFB627E985E877F41292BD6B752F76AEDC9846A1408
-F3056CD2C28ECB255B5FA6F3BC782A2A194559F33DE3FE01B5FE1BC223A15E2D
-19A2E61C48BDA40451EC6D1227724B9119D0F6BCA1B3E0394EC201D29EE7BD06
-99FA5D7F79A7894B801983D18A2AD3FFB641EEBC30313EF5F0E7524D1FD1FA9E
-3E996BA34FD8654EF1CBF0AF94929B7FE3B59C3BE1D1328CC1041CFDD358C360
-C275535CE03332E745115BF3212802D0AEEA8B9830E8F22D91289B531EDE024E
-5529E078B3F07D44CD0CED639E3F6307F3A5920C80461653CD1165276A9A8406
-C977F00D546307433DA39B3F0C7E77FBC3006B9CE33A9AF600A2E77947808B04
-C8A8432483A92B52649F0DDABE5DEEC492F4057F971D217BDAE50F2E9068F047
-65C9DC2BF810FB485424F1EEE5481F0A418BA3B04B0982F7645B72EC3434463C
-D7AAD47D971B0EA27F08B4768E5534C91BC97A55DB0C507450CD8A23A69C69EC
-88E3920BC8F2546A64F94DFF27825F40EA724E372853B9D6F88B076B2F3048C1
-418296D7C1C334C7978CC9CFF63D389A272D089BE63E2AE49B3111B16D7C799D
-6C748B8215DEA3A0B3917E1BB566409EAD33315BAAA2DAEB3D8CF0249D77CD6A
-B249757258F85CEDA706631A3A744B58199520234BD0CFFB9A2419ABDE6F672F
-1A17FF37D2F90FBD4EB7FA6A61D8AAF46A0088E5A4036BAB380E009980E4E046
-D44809CAF538BEF8A6A9F9FD0F79292B7E957C9ACF483334DBCC6F74BCA0A65D
-37A6F17FCB125391F0D08E5D2D103FB724254DBB0AA13D402AE99184C3769CD8
-B815348CCAF561F9D0D9E822616A8FFE8F8C5551BDBBF975772D5950C89F6205
-76477756526F9E1DC50AE067566B3BB8FDCBA50C3240425FDFC0ECC4C13F61CF
-C531DCCF8409AE8F982BB83DFA61127741962E35F961259B25CFAC3B8D4B7661
-84F2B75F8675AB774DA36A90FAA5203226CE0C1559D9EF9548C42AEE0981EE2A
-ADABA93DCE5749C832D6346536CC1B4EDE38FEB505C691AA2F16249555C51387
-0943062F78BF1D3E2E9BCAD32360E994A7198FB6FB73BFAE552DA090330B2EA5
-83BE32BCE7A118503C991E52A5608FC6FE369A851E21F52EF086D5290D254138
-97CCBA430363A3E9A857949EE4B0038A46139B938827D308DF12160EB4589AD4
-51F43C21C6B37F774170B52BE4B9059F4145B1CE0698FCDCFE0219543AE7EF0A
-581F553986F396A9BF2DABE719F5323E022FD3009D00BAE068481B3BDD54EEC5
-2FE03CCF1026000405284A3B0B4E7CAD80CC4715DCF9876E0953529FE25CEFD6
-E880F78DAC530CE52CF4B386DF921B4FDEF292C1946E8592C991B4ADDD161CEF
-343920F9D643FE7E4A134B301FB80E9F250E3D4103A6A80998565F1985517EA4
-A08B6DF5C3B04A5CE9C2E195C9F616295CEBF166EA762DACFCA087342A95CAD1
-7CF50A554DEC41BA6DC058B8DE3EE6C915C19EB54E7BE62D27A657A5E25451A0
-9AA9CF07C84F0AD930D7289E5A89ACF43B325E7AEBAE129D1F9362307603BED2
-47EB0AA9506711EB69AB7DF32FCEE97D305558147490B729B91A26BB637800F0
-D96E0A0B2F8CA9565779BDD5AE2C8953215B14D01C97AA2E6F222F3A334A4260
-793A569202E944082A535376E6C43877C42E7AF340DA943A3CAA65DE36FD7D0F
-63D5416A652B245183BC054F18B9DAAC1B737E39DAC19691BE14E7C34F2CD914
-9DB9D6EEFE763E88B68C3709BB720CB64AE6B53D63EE734EF705BAA0325E5B3A
-01615DCC3427909935A63DBFAE60ABA2553F4B902CD10FAE937CAEFF4CCAC346
-9BE15D5216E6AFC9EF9DB97CBD0BF84C1C0D236677754E7DEA7E8D7D70EBF3D4
-F76F085D46E3FA5B54BE692559C6A921450A80EE43AA32708580A635B3E111E4
-585ADC605208EFFF7DA65F2AB7CE1BB3797608661F24540B65B0BC2A967BA0A9
-589FCC9E21FECE0DA26FD85BCD09F79F2989B284C5F688264D43E6F2594FBFF7
-8459705BB01BA576EA4F2EB28BBE01D9178313B7B784E11F9E214CC3697E0DD3
-D71068D077867578033D1C6DECFF9E20EAB41E79D0975A99D16C886EF3452F26
-BDAF0D59C63626434165299CC6B943FDBFCFAFAF0713A07E6785CC8E8771C080
-EC6463B0FBD9903E845525CCD2DEE24A11C42C749AF67B67EEFA096DD5860AD1
-75DCA722CF280C1D76A0BE878D84FB69A34A8B5FDC115FEF5E11F14F40C522D8
-09B058982135D811ACD94E29FFF3FF91726E8E981749AA281DD237B12F994802
-530DBE2FC4254243B0D0BB483BA0F0768AB055EA84785E0E6C955E0BB66AF909
-FEFABC824EDCA7F8FE1E1D4B10D618A9B01D29ED46B5284C2BD31617099D73F9
-E33193ED394F895F40C941206876531F8CE68F6682FDC0D7110F3F72F1A896B0
-64C752337D910518EF68FF843EB63E62D466E328C3B21114E9B50C94452A0AC2
-5D145AFC71665D24C1B357B7C33F3062F3A3C62C2F261C116E6E66B23D86CF00
-497189200BD200A9CF608D78E4066A01CCA2B61D6062738B3915FB7F1F94BA84
-EFB6E7E43F62082F1F51073651925B9BAA1767E79317C54377ABBEEEE2FD8485
-FE1399F5F3DD5EDFD3003C1ED74F6A5DE9BFC51DB939E55DAFCA94D0E89323DB
-68A8D52F0DF168F4ADFD436E271AD2DF4376A835B886EE3565CD2FCC642C6B3E
-A01B998060F6A132C78A97D45541E4A2B6699C07AC6336BCAD8C57FC5AB74109
-D6D1AA0CBBEFDF35A43BAA60B6476F92F6BB85B3BF63A4CDF10824FB8274736A
-7FABD17B443D69DF7CE29B45B716F3F5CB4B5A4C71F99D4326815C4072E97508
-A6ADB4C48B541B724A3F3BD80FF1463B910D1091C1BF280A1148DEE7F1A953F6
-61A006B614AD830337B18F5D6B2CC0EC5402E6FDCC81B76478AFEA9EF6A6D5D6
-7B09553BFD0F60AA2B36C1BE3C30E64DCBBA143B8F83644B6A7A1056DB08DBEF
-846043D579B9A1A88662B4FFFB80018F9DF2B0B1292497EB1E0F19C84AB2163F
-DFBBCBDFB9A487F0A825807A1F12CE7BA75CF7436F88566D31472F4BCE1F16AB
-4441202980DF34AC9051E70171DE69B8C8B03D0F15D7BE95D3D0AAA6A82EABC4
-2AD24F67087AC91DF56E121DE01CBA5F202730889A03BFF834392D7859EF5BA4
-F9AA6AA0A082C5AC36CBE22668787809EBF2F471825655DC4FF532D1B4BAB278
-D0A775D3AF92B850DFDA1B7D0AD3CAE7D009CF0A12186160E29744FA239B86A8
-8DDB50CC132381EFC8BD80BEDE488C858C66966D8E84C67427A261AE1D50E127
-0FBDF478F15FA5CBE925F753FF13393BCF96F0E4CAE6C30AB6FC965B9DBB894B
-DEBD651C558430F620B47EF3EBD29F239CEBDF6B89B7B94D2ED0000644CBF1EF
-860DF2EC44A444E5D0328A5343329899A661EDF3878AE2C09935E16697563B20
-073A6FC372E76328803DA9BD7415B44F0B46ACB8321CB49AF1F420EA7B1D5F99
-2300AD9E8D4E8A66FDB767A4227D2252A61670A293A79E0B07BAC6BD0F12D8B2
-3FF4E170D6D2E8A0A9746A76F81B4F2FEC1F7050AE35FD468DC400626295A4D2
-52A1E243C4F52B6294F72141A0AF1A04B753F376AADC56359F7C4ADBFE79AA68
-53E3990330F33255287CB1192AE506E36FB3C3A00F2FE277722D48B526189372
-412F957A3D33F9B642DAACE6739B0096FE4B51E6FFD06027F7339778CB5BA57B
-34EDCF26F51A17C0370202B3DEAA2175CB97DFE6EA831D241DEEF080B233E87A
-C18672E784E66DFEBD46CDDCA5F4D98FFBA34D6BCB0DD73FC52B5168A35A7075
-E06D14A35438A35CE3D3540341C62FC9D3F1ECC4292A4783926AF2E33A8324CD
-87AE643A10E4823CA797A6D874840F93565E0ACC14E8B15A367ED5B34C920F03
-44E5CF0B77F25EB6E156D91DA019D1DFFFC07DC721F1CE87EE0B5798FB05CBD9
-AF1A1B537C82516022D1C455BB3A7400D311135F91293DB610DC5ADB8726D71D
-74E19DFCDA3C9C974CBEFA7DE04D0EBC0E6F36B76C0488275177AD779ACF91C6
-557E6259C55186992A07DA27629C12617EC2AD99DB78747D903606B1BD731209
-368506CB88E926D33875C1F03A076F1E2DEE72B04AE9CBBD637BAE78F85D5359
-F12FEFB099E7F79F9F4E4BC19967EADE1C774D39E17283D640CED5EEBE5F7065
-B9484913948988BB6397FA675C3CAD9184AA103ED711647FC1F2447B89A491FE
-07F08861BFDD33D8BFCC29419195CB424D7CA739B071A6CB48AA07BB8D6EA149
-6D3E5F0A6C0E0810FE6EA95067216F4948F14A1B5BA099FACBE40AF2EE31FBAD
-CE4203CA3A448255C2E01D848E1E16A06BF4911B3B6173DE296F8D599353943A
-340B7AAF53ADD697F7F0DB8C7AE71D41291C14A6BDF48437F53521C5914DE245
-B090282984C7A044FAB93B310717E1CAE827D3709FA4B3133F4B1D48793C8B67
-7520CF5A1667ECED10F65156FF80AEF4223A3A1DD4A2B5CFDCEC54068A5110C9
-B6BE775E937F87F78BD610C30F41FEFC96CC425E1D399F87FA4E224FD6DE6156
-A6FC881D166C2EF51E74020A7DA82C23C1B44D742DD8AE7796562A3FA1403CB7
-72726FAF5243AD865F16E1C7E9CFA9FB07C8D50EC46E6BA6204D7633595D5449
-379F93B7B5DF609834A03FD494DCA24C38988143C9BE067CC851E592209CE9E3
-EB91A4EBBDE654B21162D7E5569CC136C318EE081E7843EDBF9EFFBAD2372FD6
-A8C7BC331E304175AEF4542E601C15FDAB36310C7ED2531B06E0D8ECA422765B
-8FC546BA663B30831A2C948AD871BA3492A559C9E167E722EE6302981C66FEE5
-C8797E4531EEC2EE800363BEBF135FBD49958F17B3C714E30CE8150FE6B10C14
-1EE290B785A68646714C865A5525935AB83625D1C4B36030714561BAE2AFF947
-9062EB00A5553C70541C072627F4B2002B273098EA313ECF8D4304D89E4D58E4
-8894B1747BDFB183AFC1AAE2D4EBED27037840747C2B181EBB4A28F7DBB69AB4
-B1539E8256BB8FE1D496FD20C27E4F32D760A1589F1EA8B1892909A3FD5655D4
-E922F8178C513969267F3DBB4E9906EB689AE2CEE01B7E6242B2ED98F7D10FA9
-48AFDA10679C4375A6EEF12FC20DD02D21CC44995559839C1093E6EA7D867D2C
-A7EF5DCD6238FDD38A0C368F199AE515C8546F8BD511C9671510D335B769FE8D
-DA7554FC032DA527C628650AF7CDDEB5F0A17ABB3D30DAB0D264E523510351E3
-95B89A8B4BBC739708A9F6E2A9B2E1C246D653CD83E94847FD563F76C0F97E15
-87FBA4C60C3093D184F41BFCB3C36DD5B64D0B54D5BD45C36F4F0CA49B4B3871
-D5D7AE4848B3545FEE5508A5437B6336B0CB1BE95C52C4A956830CF0C5C77EFB
-89AF33CACD05C7BC3DEA59023F12B4DFD425762683605B4D6D0578D26C89F116
-46D81D0077CA9E1B418DD33BE7BB7FA0390C3015A455BF34F9F5521C52050B8D
-C467305A567984EF85ECE9BA26A60A81C57480E1342E861BB24C5DD2014E32AD
-51C74DF5EE6621532F926839C389C6943D1CC25957578BAA1FC0E3946C1198E2
-CA33BDC0CD4A7146C06E9CB7A094BECDAF9DD2D8DD90398707728B7CDCC0F512
-5587FACF96DE3C0CDC40D11059DA30FC8266120F94E6760E57AB1CC6F97A3373
-DFE6E49474A9BE9BA57B204070A2181612F62C2FAE9F76FF53E1EEFEBBB418EF
-AFA5D01FF7E2AAA3FC8EF390F1C90F81F7B725F577DA9E3724E4DB5D8B7EE2F3
-66989DDEB59FF71BB3FE57CB6A199A0B8904A00E7690269B916E00598CAB1321
-092F490EB7901D5E5B0CB4308CA693D9E89740F7FC86A294EA94EC5AA9E5556A
-A18D56E6DC6B2D27742AC888A0233E23F5DA77B88257AE4A4B50EDEA38F3FA61
-1E23B6269E9A41ABDC22C0A8365103F27E508737038F8E1A60FD47452CAEA728
-E00BFE2CCB5CF528295D5E689136C5637CE2FC9838AA32D84C8FB5E26962EF50
-0B545B5B4DAC2A05A637074F2514D6CEA7A69CF2F88A05C0FEA61B6042E92A46
-408DF757305F686C0E3083A06833EC9C8B2B23B6649815307978F32CFC60F17F
-DD370E1C0A7E5E764D212A1F385CC73725E08ACBB8CBF759F66AEF5AFF6C644C
-FA9807EDD1706D83C8A5C88AE979700ECF1FB3BC3ACC1AEA58CD17177289CB96
-68A67167CF719FBF54BCA2FC0338CA22CF1BE9E6DA4193E0754B5F3F0B5645FD
-19B9DB6503C2F6200CE27E6CC79D0F10EC7114E5CD60CBEFED555C8FE0F95209
-B5107D1181A4B9D6286F3DD8E664580BEFDB436E3CF716BAD8CEB658086346E7
-083EB572FDB69BDA6FED25237CFDC5DB6F1BB321B27F61C5E5899674AE1B0808
-CB878023FC1CA40AAF6E4AB02BF337FCEA41A20EFF533A03FBBECEE5CA70E196
-820A06C57FA25651940679389DD522864DC5FA35107087293FB21F8DD2C3BFF7
-4F4B5373D363BC73EB8CEB672204C8638C9EB97103590EACA1F0F3151A57E436
-AFEC0DF129291509AAD40E6BFAF8E324CD9C17AD056FD9C7AEDDD3C4791C1125
-56D15190F34753ED08855C8D1448F39AF103706BB3BD67716C0A96DCD01331C1
-F0B0C56D369AF5DA96328EA85DA2C427BD9BC6968772330442684C39CDED9D16
-F6F25A9CBD94F9AB4942017F4551168B0DA8A940668EE04404E5A62EB7CFA744
-9208A56833949C989E2464E4D4CCA2A956CE7DFEE8B6FBD69983362017FB07C3
-DB2DD65AA40E019BB3B4579D014FAB4892D5CE63C9EC14DC71D69D86B3840B7B
-166908760E4E2C2A598C71048E222E0A694EA77CE21330DF75433BA06F6B93D6
-C7A68E1D370ED66AE05C03C74BF2CFEC3C1231856F0113A11B84F5E975118955
-08FC432A4EA0DE469CAEBDA7800D2224CDB7E386F81E4D27B37EA521E38B1ABF
-61FF132292B87C362661225E64FDC8E9E45370CADAB9B57C9A0CD09C699D9CF0
-FB14A3ABCCB87085B33A08BE932074A7E10F5E733FB981EFA68F95DA8DAB2886
-8272D76CF125E81FA01EC92474431F9BD17EAFF42437CA4027E5A68526691A76
-A3767AC34172C5F509D8F6D3A9056F02D3ACB43BB5D70D8B24F5CF8A602F263E
-1BF1184E4A12BAACD82529BE2814E73038AD71730F2AD6EF0DEEF2673B0E8600
-50D316A9988E3B35CEF343B0E5F24D0214BFB1DABA00387677AE8D16FE961B47
-6E56551AAEB6AA9ECA626ABD01CA41EB6BBC15FF2892D7675F23F8959386F24C
-170610025CC0F6724E975DBF843AC45C0279895274FB57091432F504051A52C9
-819993050681762E87154B8000D436B04768061595694649ABA87131B0B8B850
-9B9AC65D1CF1CCFE6ED073AD680E9DAF2FFF847B216EA50FF97C2E0738E083D2
-54C9BD239B4D23C32A6B94BAD95102F70DE6C64BA20E480D6BB8EEBFD755586A
-EECF15900961CBA26BD6FEC03C3BB51A5D17024CCF8F054980E01C45BFDC1F18
-CB160EC8722349AC2CBD62B12F0D3C3555FBD815332F15D4BD3C833B4699C5D9
-57F84D305C363D7387E4011C025AE775E218E8BFC12C8E3727BC4D0D28BE308D
-6AD7E438094CDE7E2660234BE947811965606263564C7CE66853498677DD8F28
-943CBA9FD54E57B1720DBF90F6E399CED323AC651BFC4770911F515CDF8AAA69
-D2E26A8CA01859367931A33E96940EBFE29E653039622FC202A2ABDE7B451B00
-2E93E8AF6ED01D1E1A076AA60AE5CC51406DF644586AB7A9E1E20AD183AB50A9
-CF331A59D7691685C8D50EF7B473739799236302FFE5D2BD3FEC9A825DA4E686
-07E2108E32AC88F180C63C16BC300119A912D1A3D2ADB435EAF8B4B1437620C4
-9BF07318952AF158B6FBB24E3BC8C79949119CB8213864FB444FD39344C696C4
-014975DFD60E5793947D9985C668186CFF156B5A51A101FD652BC65B945EEBC0
-629D88593334CCFAB38D5E13A05037D5D91DDFBA4656494699C6DD524EA39B50
-3851D7F0FDB6AD2848426787C8B8F7C5A65CE9ACC644636D236409AD05C7AF57
-90350464847E98E9806CB4051992296FDE0D24EA95814A8F7B1FCA2B3DD7E1A4
-BFE0114B02876615F15E3BDD86C4D31619007E8FDA49EBEA8927EB28FBE0118B
-5615CF1A2479B97EA9209B2336D796934C2ACCBD815A603643EBC010D77F2DFA
-BE1934ED3617FB150B2D69AFC9227CCF457C31B6E98148D14F22889D3EEBE747
-1F58CBB932CECCE24B2E91EC2CBB4852957B152502BCF73BEE6172AFC954B44F
-1649ADB935FB67389319E24F359A87C790B8E04D997F48FD97879D969C7F299D
-99B011B9DBA379F5A90C5889DED01E871C39B9B3BF2A5F54C04E5F4AD327227F
-197BEEB00E54FD85911CB14675B3FB5DA8B4FF9D80EEF5F92DD6D22F01A40B18
-8CE8F740348E6458B2749D084CCF21AD59CFAA438B5B2B52BA165C3776FA5FB0
-59F95EDEA3F05B82817790C2247B4D4BB6D04312A176986C4DC3EC5BC5BEEA12
-BA0892ADCD2E5817F971BE60529228E88173D053D8D37CEFC40A53E3A7D56655
-E78CE8D89E0C2157F462B91BF66562608E84A7CCBF0FC97DCE7C32F4937CD1BA
-5A9EF98122077CCD77F0D4B413D88134428EDDD4B408A1CA44227FCC064AF791
-74B378997106AB867A0DAEB81C05A0E52046B893EB3264B13DE157487A870B21
-6B626804C90CA35C7487D8572D374F89BC214C104623F4FEB3FC9921A37BFBCD
-5691FC8D34C1504ECAAC62E5639E3D603DEAF642AFB29D65510C4649D1E10029
-478F57006EB3FC50650C79EC23799E3096B920D519D2777C0558ED6148CA36A7
-6B7960FDA29951C6806E43D886F4E09885AC300738BB85CCF1B9DB2702B26D28
-E71E20C15361E0AE4E62321EF84275E6C38A5394071989EDD48A50717C47F6F5
-FBB8CE06F4B98303F87B580F791BC936B474EE9AEF5D0B520394D29864F54747
-312FD93DEEFBC9A4E8948D0F04981A4B0FFC277F5331EADB2C9B260492104D1B
-9FF4A550E46526E18628FBC914FDFE4AF06FEFAAFDB7612BEB08A8F9701CF8E6
-16FEFE9F3FDD4C69CD8B94E774C6D7A5D0DA3B5542C8CCB50D99D2AA72E775B2
-F492FA87D09BDFADEBCD184F03EF0E2D32E9CB8CE536793FE7DC4FC36D4CCE41
-C7E4832CFCB89AC3C2D9424032B5200C0EBD030450E1F187C05132DA4CE553CF
-34322CAE917D85EC50CE6B5FA5683402B23DC346ABDCF3E6DE9932BC41CAFD66
-D5458DBBB689B60CEFB2C684764732C290F613777624D349DC3CD27515F730D4
-F7E7452C23FD57E50888B33A9359F3834A45DD8372E4CE789A50D6B4FAA9E5EF
-C300CDFF97216429E2F04F607EC88917D4F37D54A92D2B7E071A556686CC334D
-ED4E2509248075FCDC6E9EE6B36E1D1A87F7E7A5AF045184C7618E9730A88CF4
-788A783A9F0FDA1A62AA5D739618DF70976B29E2070A5DA79E7BE8BCCA15B10D
-C3034F128A120EE0204CBB875525B21ED31171E2671A86080DB1708AA5095096
-87B4A93754CC6728BA0FE317ADAB3D080132107CEDE64DE0E8A2169FA6CA58F0
-C0F859DED55CCC42840845EE5126C67FB7C12D06255EC8C1EA8D0818AFC432A7
-BF138150106B06296C19F723677937F0EF4916D9867A61881813165ECDAEF3B9
-DAC80ACCDA42728B299D3162F604F8EEDB5329516C21A722B6F90B44E3C178E8
-05AF55DCA05DEF68AC75F1AA91613E34B528C9E104A8A620DD863B7931441F1C
-980A606A0B2004484C1A2E88D0AFE8CAA98E5A9064C923F14B2B5906F9DB8F10
-8DFD79F217C965308DAA3A6F387B0BBA044588845A80B3850D96CE61954D7E26
-EC7D7E92001BDD39F0CA86751F6FC4E987A6C3267E60C8A02FAF445916B9BB44
-2EE70009084AD0EB3ABAC072200D33EEC864D50135653DA2774B9283D8978DFA
-EA91B0B759BDE7867758493A9EC7251A7C620DCCC132CD154F2F66678BA89750
-FA7E3D23D3050FC9D54F990A6F96F035CFC231302DFE51D0139FABA75A23B168
-685DDA1C9E68236A7D19541193F753A633B103FC09BBFB3E6F384DB7639429E1
-76EF95062BBA
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csbx10
-%!FontType1-1.0: csbx10 1.1/12-Nov-94
-% CSfonts -- pfb ver. Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25027 25304
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csbx10) readonly def
-/FamilyName (csbx10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 444 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 686 def
-end readonly def
-/FontName /csbx10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 68 /D put
-dup 70 /F put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-dup 122 /z put
-dup 185 /scaron put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 236 /ecaron put
-dup 237 /iacute put
-dup 248 /rcaron put
-dup 249 /uring put
-dup 253 /yacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-60 -250 1164 908] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E729C1F3C653E51B9F09F139
-E332F81467DCD46C6B80A4E88E1FB2B35C9134E8C9E669DEEFA533F7F13511CF
-F16ED856C594BE960395D34E6F1FB840870E1390BD51DF0CB99AE59E98B369A9
-308EBD4D62411D723A06592B3F044EE52173E7B573E2FBC21F32D00ADCFD4905
-7907BAC782355B39ADF860CF2381EC0CC3136060C15C7F794F54FDF9445AE615
-FA03D051B337AB511F64C838302CBEB69E431B2B66B4CF0E61EB5ACCC8F55213
-E44FC7CB51E3ACC12F45BBEDC00C9A63A43839BDAD1C0186974C7539367FB600
-B9D9DE3DFCE060C626C826CCC9C6AF9B765C6D6487D5945B01FB21FD234A6D46
-FB48C4A049CA13C82BF001906C71B5E4C7D8317DEC3B2F4A0B8F28A9CA07F8CD
-FAEB3ED1ACDD5162F7D3491964E990EF808D40307E9FBDC0AB3B5BCAD56C895C
-C6666B4096AFADBC5B931D07B418009ED6BF9886982EF5689E1C67D980F16913
-28DCD11AF89476D84997CBC50E8E7942C3B7AB5C03A7DF37E3120834DAAF7EB6
-E1A625F38D0EFF2CE86A1AC4ACA3A3556D98D515AD265D35FCD8750E1F4E73E3
-A74900BDC6A9FA84C7A4A36214935A985CADB31B33706C0DDE055D4BBF888C0B
-38320A34A47CC395F479E84CBFB77BA6F9EB33F344B34D19ECD3466836255387
-772A0F959C9872EEBC9D69943B4CB8051FDB325D6277BBE0490A911DAE97C388
-6F9ABE08037B55845EAB04B303B6B76B4C3CABCA519101147E180A8D3CF88F01
-341CF48CAC41552A13A28513B88BB7322E9AEBAB1A3E14CC90D74A9E3AA0DF8B
-F3A5E867BD5324ACA963C4ABDEC64E0D04E7A4ABAD8BA0D11BE71BC655498838
-A442E796E115A5191B3204A7363FFDBF3675992925EBDD62DB735081E2882646
-E5BA327D733475DBE42C23E2C54CED537D6A86CE4F06810D4928B0D1C42A1AE2
-DE408273DDEB2CEB0C3E5CB9E9F04DFE24FDA4EDF37857AF78EC3FDA2FED6A9E
-DA127541626E0699B04C8D766749AFB2D3E936B57AE4428BA4CA687497ECE3F5
-499B20534D33C810E49CD8DE276F3B0D99C53FD5E9CCD27DE829BFF0FD5E4F48
-BC67A545E9AEF50C54F7246CEFA95B562529D99246B2B4F1C559EDF00E2F017F
-01506167129C32180B57AB61C7134AAA94335873F8D910851E250DC3AC668D8B
-42742D51BA8E9D80023BAC481D5DC2DE545CCA1C76119243942BC019A1711978
-9C7A58CD0337B9E03E8C7216070D6C30D4059BC9CB7CF58D522F7BDAED343F1B
-D91519C333540AC41D8A6728E403B9B6C2557C58B50D553E7E840AF3D8F2FBB2
-4CEE050FCA8E999F6F0A57FA60C5AF51402FCAC90EBBFFDCD49BD7B4234BD101
-4883917199634D4B9E42E7AED1C66DF3E0D26C27359E520FFA2CB398AF4BE739
-8025B179512A9E663932EA1653E8356D6E231F48AE1A891FD9385AD22654017F
-E1EA3A919C1340C53F274CC26A77505DF91CFEAA4851D98B50CA254A979DC5B2
-2B9A0D033B1C554C74679B25593D6546A9D962C222D2B31D6FF116DE24482DCA
-F77A75ED699324E200ABA06441CDE480D3B4F48441FCFB2201E73AD09DACB123
-7C54566FE1C6A389C946CA44A65ED628EC7D8A3BBAF38611611C8F70F45BE9DE
-26AB30F0AE1327A84398446751BE19E2BB5E212169E99334BA8E806433CA436C
-A6C520F5394582907559B1693E6E0BC2C6BA13FE5401931E8B2A0BF1F2B1A2D0
-4EDA053E24BD0261C39CBDE1A027961AC7656D1865A006D5B92A690CB90505FA
-2088A685E46121559A86E26528A457E181ACE06F515261A7422D11C58F9AA5F5
-86E65941910777868EB1272E4AF0F3A2E9A8EAB12FDC40D26058B4A42D97AD56
-452AB26415D69FB0180DE954B9ED498404CC1ACF96E609C2D5E056D16E78A580
-D0028C2CC6D745A872D038A67CB4EAA0C5A3A0A2C172FD42335166C2410102B4
-18F6A999AAD5FE7AF8CFC3EA743D5EAB9E76AB46B5A919054C70BAA2C6EF3C13
-7034E17A5BF56963145728CE08A2B18F09F5AA1B95071B32680F683AA8952DA7
-EA8BBD9FF5638653F13566EF821636ED5B86A283C50B73FB4A089F48CD86ABD6
-E35D47CD8864016BAF836233572CC7344F8F67FDECC31BF3DB16C57AF4198B5F
-A62FFAFC990EFB33DE8E6AC7F618B7350CCF2232A0702EC0937BEFB10281BE78
-F788BE6A89D51EB0CD6DF5012D0F4CD4019DAA9933702E8191783F481E60CEB7
-6752D9CC1759F6DBEC287CD0C5DDCD0EE94AE3C7911C92EB6F6A5AEFB2DE23F8
-42DA713A4445327479E29EC15DB887E6C67BA178C86F9A3763BA8D61892DD382
-926B8CD1C9F48EB5B074B38AA0C0AE520C782C68005E17179D80DDA6C553C24F
-939AACDB85AE39447EB0304C036D8FCDA6EAB3AA4025132552E48191A0C4FE08
-D3915C2B4D83C5DBC8F8FCEB4DB5E29602BAEF8EC315051303584E55427E1B49
-ED386C0719622F06AC4331DA4BF6A259823BD5F7219033BA82BF9E749FA73767
-009E84D45A60DF79A56068B345894F53C40114306289DF6B492DDC3E7599E413
-11C62A4B3AED2F5A10A974A517D32E9E43EC77F452A4974A0E5AD1A0BE300DE6
-BC0DF1662F3B2675F475E8345DECDAC564326380895C20FCE5C760D3E8BA51F5
-B1C6CD1F3B684AE3DECE3F2A030BC4A1EFAEDF5DC738D4E4D080C095BF6C4EF4
-846CF6BD53FCDA68A73E4DA19DD8CD5976E84ED25AD28F6F7A86E0B7D8B77757
-86848BE51621D6C84B63DB243BBCA42B445CD17F91BAE56DDA9082CEB3584867
-60FBE49CCF84716727B849259D75D2015CA5D9F773E62E6B4637119C5F822330
-1435877C2E04D12125E260C806C086B718AE04267A3FB688072349DB5985AF7A
-3EF437E2F168779B255B7AC238A894C34FFC25A6D92F74F82E47D956F4EC4DB3
-59E60FB5E9F3F3660E35EADE4AF7B456F27B35DD50E9FBF51CE92900C2EC5A78
-41102C946879558F6F38948DF2A5CD928F5E98B9603ED288C394B23B6905FB05
-97541D2FDB342D3AAD49BD9918D6D26300F55DD3320F4D69AABD1F61D988D766
-1BAFB931275BAE69FF410DDA843B37D7BE8E1FF6F01A713806F1732CB23567DD
-E34C2D0FBD53506EE3E134C6C5C6195F9F301A29D1AD0CBE1A60658BA1DC4266
-263A86A832E3AA4B6DD8F1CCF0C34FB65B044FA2E45FF2CD57CD3D434867C02B
-C5CB5262E2FB0BDE3DBA3A5CAEBD7242A5AEE0798645469C42F2049584773E30
-59D3E1293D69E97B52A9462C44335EF27400304F98DC7C5AE24F45E95F4FE9B3
-E9F4DE6658E90C8DCE01020100FBA898EA9691DA0BFFCB07B4AFFBAF27BBF5DB
-C1F6F4F6AB930D0A9BE3809BB680D110242EFDDA4F8FEA33BA8F45BD3BCCAB46
-C794307E700BF0441E829F8ABBC0A4303C1FA7FA6D5E7B4BE959616F0CECF008
-63597941F557757D89A622A3541E8A82B7200C84BB25C493FD1A0641BDC4224C
-844BA8929EB9FE29EFAB06EDDCA954512CF32B9CA01602CCC92470502FA72F4F
-A27D58A6EC3E221651BDC7E690F9C6B710982F9F5B97D29FBB2343C9DCFEEC70
-C3EF56D9DD5736EA30CBC7DD8FB02BC204C5590F2EAF9D91050C870456D4D34F
-67EC04CF339202F6771154CC2FDC0A048D3FD98C4E4987FE1E4E20C30D897100
-C62EE9974659048185B985E5621FD30C30F40D6C24E3867849FA070A07C1EB07
-C1DD825557EB4CB77503F422739BCB917B200DC83B4117CEEF0677F6E34AA276
-CC8FA8D83DDEC3575E014313DDFB9E99B3818D8BF799C3E0266FC61A3C3821B4
-49B028914C6AA1B87FA5A1B5C8AAB00146F01BC5BD1BE10CFAD2631234C16C18
-FF295135D2809ED96C28D55CC9995542E143A97B3CF445E0F76DB769AB960CE1
-3AE55308293407DDBB170341F9A97F383D6DC2A397818A070A504A179DEF4D35
-D1EAA7B784406CD0FF8AE1E8BC2D22234CB961F04BE70E8737F1DE77F768CADB
-A717D74D31B3BB3190417F7D240A1B5235C54A2AE2CBC44134577DC53596CCB8
-D70408D5256EE568ACE712556E7EDCF06D3610A7441731B1BA50C5F0BD700703
-DA62E88B09A09D9E1EB4BEC3505305A9CEC93DA675221FD64C03FFCB50629BC1
-A1E04AB3D1F638ACA59C7736F2DE8794B2BA32D291211671FC068FDDCB1DE76D
-1756A5BC3DF771911D6AF29EF81004828EBB77B67BF155526F868133330F52FB
-7CB8DE661F191040AF9A75E692053BDAA8A5F5C8FC940E5576ADCCCD09D8A143
-8038929F0F9439B5E87A5447A3158A994B6AC6C9A98C66340E528C0751DF0279
-A063A0415D0C700153CEF762F5854FFE7367590EF4534E4904CB41D6EECDECA0
-422ABCF93FA5B0340ED00D217C0D88935013B3F226D3C165BF568C3F2A4C17CF
-7D42843B650B1A08137F76AC371532D9AE7AA21520276393EAE292A9F344C670
-7E94D7AD6EEDBB6D1D2D902C1486DF350E44859E2B5BBCCC4D435967F476E89E
-59CE3E1B7E0D864881B2B02338DFB53DFE807D355B2FFE30E84C379067B7CBCC
-53567A621A575D0BAECE6ED12600EABA8D8C1D0CC32F25B3B563D35B66CFC4B5
-6769ECF4C359B674D237AA2703E335278A7D79F745DA48008EF1283F9B18CEEB
-4EBD7888F557E0338A77979751A2AB204A713AA6F5A89D3E5562890ED4D887C0
-2334D752C0038563DB6C2CE31E06AED59B3FBCDC57862401FBC525FED5847519
-2A3FC71AC25FA36816E5B0D1AE6F7A1C0604DED13A3E07353F6AF3CC4CD527B8
-BE21A197215610600E19E28C4F78C2ACBB7AE312E79CF4E0848E1F417590D90B
-276D02B34DBC350BEE9D0A5466F5603E282BBF0EDD7FEE162BCBD4D22C6AE4E0
-4FA73ABD25B2328250D36C7A4253720562BEA312F998CFBD823195B70E42BF0B
-843675E168A7B0E991CF2FF22256BA07ADF2E1D7D638B1E142CEAEC88CF24113
-85FB473FF7FE8E0ABCE3D954F872F2C7CBE1FB3D0B8DA5FEEE00E9BA66866D96
-952DA3DE095B10D5CA1EB1FD4A7E4DB07210DD6DC9C07D666122F9ADD34338CC
-4BF3643055BD5485FF6E5B3E3A31CEF1FD1926556A5DA3DA0804954F40561629
-FF8936CBBDC2FADBB87CF7005E24300138F7CEBF962170C2B0C156ED05C19EAE
-55BAE46FC4B93F0DDF3E16AFA502BAAC85AD1DFAF7B974E9BBEF45DD1B5C7DE6
-939C53ED6D183048BF2DFB5E211214B054E9802A55C8F16DA51FD7B42F2A9382
-384BC9A37B1E20E980DBC5746415B171F1EAF87D36605C168E979616E4D9AA96
-484A99E31DBF012F3B26FB88423183A5326FE13B630959029A1F4800FAD73E6E
-F92F8E16EB9F4D6E12EAA0D5E9888C04FDDBE194F18FB3D410D66419554D03A8
-89F5578212669399653FED55080E1C39CCCFD5970B130C0ABE36FF91C18F103D
-6F806D80A5A49EF9A1C52DC83C2516DC757F264B0DAE60FBA249D1172DC17471
-E14CFCA5DB5120E50B9CD7A0739D97FEDCC68B004A464E80819CA452059D52BF
-B7C4BD4ABB1629850B5ABD8D25F9FC9AACEA2A85AF1F09D359086CD1FD58E0B6
-5C48686B54526E13EC4A7FB6EEF09DEDBEAF6F272948360D5CB1E55C89A8E311
-2E850892E9FC9667D27F3624DF302D3B2FA9827ECB528495A77CCC7C9875BED0
-660BD3E0A9FF306C982D90E2B7CCC4690DCD1C88BEE4A9499FCDBFE755199AED
-7CC52DB5FE98A78F56B85F584E2F153AADF96C920BDA88829E1F515DEBFC0C72
-588BA96A43F95CFD7E080C08380757BB8A4063A0AEF257C788C5DAB8E98243CB
-8034C7E8790C2679B77EA08A32EF83FDEBE49BB0F7CFE608E66BEBC8379FA52E
-6166AB29276392B51AB42DE6BAC48968D4F03BEBBFFD86D92ADA04BA86AD1F97
-5B85608ED82C90F23EC1DA275082A6F3E8BB711D775FE2717485A7B39B43EEE0
-7A625E88583C186FF34E55986C626C6EEAA42863A180666DF562D80036E58C06
-34CFE10A28B12748469F8CCD2FF6540A2F580D7D2D3EAB30786263DFA95E264D
-420F996C592D8F629ED1C1202DC686CB8D4FB665423535B275C1D35C8316F75C
-DC7BF3780DE304298D39F7A364B70A38063D5DBD57D484CF681510FB0572AD06
-D6563CE02C2C86546DFA9397F36DAF8880359437240BE0E630A5FDB397197A6D
-667B88677E0B38D441468FAE2D78A5FEA6972486A58ED81BD65F35C4A256ED23
-585EEC9979524385925FCE3FF3A27A800CC129F7940E135253ECC68A30B425B0
-A659F358BD5C5A288DEE08B3C3C028162F4822A70171A84A90683C76BC4BC526
-C8E323531ADD5275307839E018BE6CE0B0A5F07E4364CAF03B83946B489178C9
-FE1F874043C3785E18BAAE0D1835C3AC28D2EEE26DA3F48E2B97CD6F2B9E80E0
-40619FBBF20686E34348143FC5BED018AC8DF3D5C9DEB95AD514B7A996AC5329
-1B1F55C1EC2AEF52E20039258E127CFAD483160F56AE5DB7095C0DD6304CC17B
-C9EFE848A5AD42BC81CBE3CBFFD2659C54626796BAB6100132CCC2B12342164E
-C87D64F560DDD66350AC0F046F3DC8A1B5DD24CEE71086E1C8A3F1BBBE72BA95
-F551A6A3F45013A89F34E3D945FBDB4AF70E6C4CDB976494DF1817E72C7D8EA1
-3AAC893DED2D1B99C35E66091CFA78F3A927AD178131377C8E1DAE3F92646EA7
-BCE541D01BA4C53627967BB9D8FB5F68A971C038071D0744994270C988906CA6
-E5E8C94BBA6D23A270719D7DF35AD3ACE460FD145E769DEF10882F45F82664B3
-344E05205AAF2D7906082595FBCD9CF050B3E701E64183BEC46D36A25129C384
-8A843629A83EE691343DDFF5313EC5A25713199E4A0F1B1DE3266F5DEBEB6052
-BE408C7D62E53F90918A9FFF88A062E98A7BE2547CA99E16975960960F5ED776
-90C6D85585A9AC81292825852D0E9506652D909DD51495EA5DD581BF62A03778
-AB36D804AD9D3352ECC3D680E95B1BAC1B12718597FC2BB2DD72B23A270C544F
-FCA829258659D734BFCE00654F19015674026CADCD030A4B80925AB37DF754D2
-D41CBACFE638BBA25251C850CB7D894FFDF194D4868207C29F9F1CE31D1F8AF7
-389EF8D00518348A6A07367EBFAFD7819E31E38CF8F2B9914380C37610248884
-D41AFC6470257407A794CEE55B78ADCE44E6DB072D0DF27BC810C1A2808243DD
-B837ADFA97826A9D91414E47FFED56243B733B2AB1D1A030BEEAD3E8C69F3735
-E427E05CF874BDC387060E9F1D9BF0DB99540F06FD319D42B031EE9FBA014C9F
-E60AD6322222607E1F3A9DA8502DF58894DE003BEF4CCF9524F605ED73053336
-B727C7F40B1736B1BFD034220F64B8D02D71D60DD7E9AC43FEC880D308BB7BFC
-0B9D94A06A3F4A45984CAC742C6A71D3D0E1309CE119675357A86D0DDD6FE2B9
-0FE8D6D7E7E7C20A7BF54618DAE829FAD36EDFF77FB6D98A0A89A6CBFE592C41
-019155D9011CA0E42AF08D963B5A71D8311E06D24766F048EA52D57C4F857E5A
-BDF9F31A163E0CFBFA8AE196C10EEDFE5057EE9DC504B460A4CD4094AC637143
-15DDA1DF56DC13835F41E0DB303AD299625323DFB51CAF4AF947460557D3C5B0
-5B8A17A2BCD37F2AF5DC66AD036D04E4707DD279C7DDFB8C18C465A2A11B6CEB
-5C07061F85C64BDE2445AC0F3A36E7C823BDF00BF60726BE17A6829EB4C62C01
-E8923F4D067F3AB64BACF8A11AEE8F1C9ABE601C30D2F138CD56DADE5B589025
-D286722910F49A00F18D7589B3B253A8069ECC93FC90B48B37D66351FD2FCAB4
-8CF859C85536631BC5E3A73865CB7AB8891EAB705FFC67E1EA68AD5C62A94610
-9998A8BEB65CD64E252171791D04EAE837F70EA1D9807594C74F9396869398E0
-608369AA438884CC9869F5BE4209142C9416D16E2BD2FF01CB12FED8A565D5D2
-D6C0AF3B565914A67AB6A83FB5B2C95EAD0FF7C59FF304B9516ADB0B5E75FEC9
-66035FA84CA8F9CD5CE9E92517DC466245AEFA58F234CAEFDF047B7CD3EEBA3C
-08CC1A6903177EB13CE12C4CF3C400613EF0FCFD1490909B3998A2B81EFA7F52
-C4B55126337A4551D79CA3A341E54779F4FA68D62D91FD78E80D8D10F8824312
-61F627CE102B981BF3CF732AAE9875DED0DCEF65E26CC75A10C959DEDC9FCC3A
-F530A4B00D9529A2745725861656A2A8309F3336297334A4907998ECDB8C653B
-9D8D90046885D0C1A40660219178FB669C8375FF02137420FCA7BC7B1B21E8DF
-885F338BF667A3E5E80073C65B0AE1E6C306F0BDE710C8136DBC31E93DDD52CC
-75AEF32CE12BC8354CAC0CA6903799410402EBE4A2FB1F883D15A140A9420FC0
-CB291BC0A72885699575D49D7F8B8EB2E3C030A2AC819A869AC5B72853E38DF3
-435B9919C6FD0AFB37BAA323F98C38D3D51FEC5C356A371E14DCCDE1ACAAA7A4
-DB341592F7177394CB3645623BAC67A3B8BC98240DB200D615AD1E128A8B2878
-620CB791186F09C1DB9588EC9E48B09C7672AD2DC45E3C32C328BB42BE5B914A
-D89F1C515B6C343E41D1FB1C31618853A1BA6E9921C7D86140779DC4B66F3C1D
-D3312BE6066D25A840C6793F0303752DC74DCA72F3D830E60FA3C4E6E1290ED2
-32F1FD1803DE953253B4F4C3161E6F3E7A20D5E49764F63EA05FCDAEA416AFF4
-AE3EEC56C574D41B770B4E5473F31126F3B113C7AD7EA5906B55F46B26D6F7AC
-40B4546FEE7FADC1FCF087F68EA5E4D70B581595F46283A390CCCB0F655AA525
-E83FA009968CE737D2E35306186E50ED69956E099CD36F0F7E3691C3B8C99CFD
-D3C6A3E6EAE218A8B243EF368522487C67B2FCACB9D68AA78047C4110A2D42AD
-8BA37A568BA106CDEE5D421D8C748E5A045BBCA4CFC8FE85C571894F52B056EF
-BE3E103812477C5245B4C6EDD8AB78F69A9B5C2F36D58A41F75EF7ED112633F9
-6CEE311053D6BCB9766D00202B1F263931F3E955F1FD57A4A7B618B6C016BCAE
-F9C19D6DC70C737DF3B4FBAD03567885AC1BC492AB1DCA6530BC06A39219C17D
-F0CA316B8B2AFB6600A07C2BFCFB1739E9E96451EF6597430E72B14A7D948E6E
-8E2371945935B69B8F1BC282A97AF72765201971A52A4267FC45628ACCC06BFE
-C98A35DC4D1FCFE5797621F794EE347DFD18D39716CFEF735015BA3E882BA524
-D35109BA17189D43B417E476EA2852DB86CE3CE77A780A2399DF6D8923D6F97B
-38D68E6806904563E06CB5617D5EFDF4502251483C401AD9A539B3016A7EF059
-C747AFEFB7BEB41C1A1E51D86621487C64DCA3ACAEA5C2BB94B826748A5117AF
-42EEFBAE42F3895A4083BC8D84D8199F5433A1551BED6AECB7A04DD56E9C366E
-DAE43A5F6CBD5AB82DE09118D663088B76A2BD0B04D12D98415473B4B5EEA303
-3C19CB0DB1E3DD7B1602DBD16B7B8269BD6C1C9C3F50CB79C7EF0DD41DEDBDCD
-B2BC38BF34F4A10E0D8A94C8A35C98F42EE75A6795A80A7E157B93D38CEDEF0F
-AC2B355C9CE9D9C89090D130D340E051D02C0EE2339EFE9613B91347584986B5
-5EFC5C14C9887313CB79B6CEE6C7D648A253166F5BC0E3934ECC092D5491790A
-F68AAD6CC7EBE7EE66BC95F1F87C55ED4F4E829AB5B336EE8077AB1403640FF9
-5FDBC4C5D57259088C117EE22538EC014340D480286B0C14473EC421477440BA
-EC5E684E0C6F3FF077361B178D4EEC84F2E63820403A38347B2E3B9A61AB9973
-C80AF6D2DCCDC2D9E6A7BF5C9AA463996640567872C837BEA6530886D6043BF2
-97E92CCCCB3189709BF6ACA78EEDA7E8A3F93E113BCE9CD54ECCD2FE06E84605
-41D81F3D47197283108307DA4698709B9B6861B4CF384834184ED237C4F8F546
-480A449FBC624AA3225A86B3EA13C0D0CBD9485CA2422BF38A160342E23DC09F
-793EF8DF8F4ED75A5250372C5821D4696333AFAFBA2632B1E473E7338CD3FD03
-86C8F2D029D99FF80B11E66DE94B3513A8DDA972634705AD0EB5EF16D812E628
-57BBC6BBF91DCC60A1BF37A9BB26A286EEE9D9888C17CA36535E4D2938E140F3
-A8FD340BAF43FC87A381759461D30F26EC624D0940869772D0C8DE40CDF77A61
-5F88F96D4D817F77B979438372CBD0C745262B32FE1860222B47705913BCFCDA
-2BDC74DD4CEB380444E13F44521EF50215544752033875004002DD0623E016B5
-9E04DBD9E664B7A894D03FB0C8DB1C43185B2C44B4BD5E4D5626990581950FCE
-C33BEF0445DF951147072D418399D9F2335F63C6D1A04FF4782D8FC92A34C077
-7B47D642CC1CD3A3368FC1A7288D40D86BBAA9B1DAAA4E100196342213F598D4
-1C79F493B6781B4CF5874599C059D3DEF8EA8EDA1CF9061C62D9A608899CA854
-79D264E5FC8FAEC71BE4B24352A7AAB81C045B5DCCE1939A9C07270608CA3D0F
-A05CA9D2A23472C0B5FA6CEFE1F50B145EDC52C393C99FB0E327AE9D1F4D364F
-5841B702ABBC59086F557EDBC20C59DBA04B66F3A55F3E1B87C32019252CCEFD
-A440E4D711546B9BDA5A549AD1470F720B6407E1E022394BB954395483057485
-7EA59E8CDB2F7FBB2EE3E26A80425C7812D459AA47CD693A277027FBE74D9E83
-3F73F042774D9BD3810597D906B0CFEC0F9BF9A1BBFA2DA2F88CF28200D69BD6
-F405BF348FF7B1A0737F6E88DF167467DCFFA86A2A446D671E62268C3C391C33
-B565D65D606D0F1C97D1FFF7E8330527D6799E856C1EF73CDE0EF1057ED0BD6E
-E8D558D4E99F0FB8DAE977DB0F2202C77993F4A7A539706C7770246C733B6E35
-0349FD83508699755790480017EF6A421AA00D0DBD6C37C89CD257D51E5184A9
-76A158CCD174166241879DF9B025FFA3082A297311DA91048F6F172C0C45C5AE
-C6F03D287C84E8748C2C0517A678543C9D5875EDE21FF4A18B17D5CD03871489
-C181F781D168D2F0E4A58166F1BC27A303C7E8AFEF44F3A372954FD66E189603
-4FB24134358627CBE356490C2194FED3C84F4D28F2906E1BC0A071006ADF9CFD
-F99C68672DFB2C2A59962F1608F7DDF12E507B8209A30AC52F64FC978042BF8A
-0E3E6ED9460C9163B7A7D912D949C72203E1F97CB771BDEFE3B9CF1FCE6AA631
-BCFD9D66D5B1B81ED445A9EA7A6AF8DE4BA3B63EA77AB435AFDA05B966F7CE3D
-D2C46AD8FA834FC5926D90E90E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csbx8
-%!FontType1-1.0: csbx8 1.1/12-Nov-94
-% CSfonts -- pfb ver. Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25242 25747
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csbx8) readonly def
-/FamilyName (csbx8) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 444 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 686 def
-end readonly def
-/FontName /csbx8 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 68 /D put
-dup 79 /O put
-dup 88 /X put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 106 /j put
-dup 107 /k put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 117 /u put
-dup 121 /y put
-dup 122 /z put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 232 /ccaron put
-dup 237 /iacute put
-dup 248 /rcaron put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-63 -250 1235 908] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E2214AFC380F5ADA59470F60
-D8D2FC158BF2F0A53EF87A1802A897E4E860F34BF60C83C787AD1CA226FD5272
-574AA5061E43F5ED5C153D504B9658DAD50711C40D80A64620231075FA7ABE3E
-BD352D568BFB58C633E5BF9C561DF52E008B6270A05DE0C24269DDFA6B90EC90
-A0BE858A557DD6AEC6BFE6391078465E967382FE98FF878DD1E6DF2B713AC8BD
-D0E7CC7A6CA9EB806A96DE26EAA48F6BC49A016BA0950BD9EC232543199A1D6C
-5DE780E51C464DEAFE906C67C49C455BF0CA836160C409FC80C6F82370C72BA8
-D5C3C0EF2535E3FA3DC2F4F540258726F28ABCA9CAA3CA878CCBDD6273639EA3
-3FFA29C328F8F9E13479B8B91887F4C073B873960EF6FEB4AD5A2D48197B28BB
-F5F5889EAE914D38E97DAF6F87C2C6FC300AA4152CD5DCFCA4D25C6EC8FD9574
-F9A763F3B362A7945B7F392CB9CD126E93E93998BEB1B48FA7148FFC8A4E3D3B
-FE2E959A1D12839E2549C628C4D60BB88BB045DD9113BAC0CA2AE95D514ACD8E
-F7295207634056AF510379159EBC72F24E52327FEC852295DC6EA59178BD6A8D
-3651E23EBD4BB12104654D566EDEE0B9D2D7134EFD01281C34C1EEC0A5713A96
-4CED3F0A760F5C37C8CA3163884FDBCBC075A0210A6E76BB413DF97AD6A0C787
-835D361A6ED43349EDDF3732CFAF4E0214B3650D7DDF7650F27D78D21769D353
-CC0F680A66ABAC83137C95C8320C361E0698AED9C0D736FBBE80D4359D8CBB45
-AB5F76401EE22C6CA9D78DC4590CEF1CD7D9F9EE334E93E0147DBCE5233686D1
-607998FFE1340140D01E6381252DB48967EE6DFF5422E8B301289648A5000AC8
-A3AD9D1825FE41E9E3A55597FE88BCDAD2A05C02204EA9D8962958BF100A9189
-488F9422B96396E29C438C2829B9254719BE08BB792A23CF23AE241992E2A731
-7D274FCA140E52839EADF299B6F7FCBD91C1EED9F09ECC2B0E6AD3AB468086AB
-B06ECB9CF4F23E1064585EB784AD2F5C33858B103D979480FAE1376502863F8D
-EDB1B1FBEB37FD1594608A69C7E9F78B7405B7AEF8D733992A739E44AE5BB770
-3C322675D8EC3F149CF3062EECCABCA42B6F41EAF4859C250FCF197EEF370E00
-45337EA05779AC0871796EBE40AA547D1B437DF0D8C3C050FE006464A2BFF97B
-39226EFA909BC04CCC5D3C5B8E6211C3F4C77C6DFDEDAF2CF0DE416D8632737C
-313B4F64682B9C446A878C782BA6D48AEE80E17953AAC7FDD23465363D9DCB98
-83AE261391BB54AEF57E8A5CA874C985BA59C4D1B57B6C8C3E056166319AE0C7
-A3901006FCDF8C522D1AEE2980FC7069A31D428F46C6623C7F7CF67CC77605F9
-3ABFD90E284BCE7CD72B54BBD37D4A2258EDEDE22F0A4EBC50EBF121854647AA
-569AECAAF54302F3064A3EF0B4017A8D53AAEF3115E208BC6040842D63C44911
-DCD90055D3B8AA5B91C00BF0035005D95468408633A976C2ADBA3AF8EBDCE658
-702B43ADD3832CE4BFCD1B61B37EFFD5AAF1922A3D829C633B0A4C0994611381
-2B83D3740FF3D7ED55DE1CA370209533AA5476C2EC803A7EF39EDFFB0B19E4DC
-BB86CDC274A6270208D611AD95F2FB1D0B9140305A8CC535EC1DA560FC62BB88
-02155BFCDA9B115A397F6A24B542D2BF5CE69F58D7A028614167F635EC06F6B9
-0729B92BCF1E9989E34CD9F9543B0FCD8078EEC2635C2900857AADA353677EB6
-64DCFF40A7E283EC0CE969B6BDF3252E3A110479542B3B32E7C723FE2493A80D
-C0018E8A59F81ABF502A114B41B33DF88895C57B85343A95B184F2BA28E14EE5
-689BAC97F36D713C3A4F330CCDF5A023998EA7C01B4BDD1063B2D3C587A4589D
-BAF8CB29D5EFF9AE27B559B02FC58A52A1539D8B4BD0A20D084D67936C131409
-188B16CEA61E57F5E1052B964813364C43C45E2EEA759FBF07BF2F5D04C9BA24
-2C1ED5535945E037025782CFF3FC1B856F69D70E0D30AD1593FEAE236FB9F541
-F5A9221D1528B15AE9819CCC34402D131D86F9DB64928A522ED2C78784074430
-44D2C0EC8CCF87FBE00EF8C264BA1C880A6A70859B13B060D64EA436D48AD164
-2712073F1704BB86B04241FA7B0D8C935DB152B19BC7830CD59340949DF1F430
-C6FCE75803A7A5BCEE88B565597C7876C040CDBD7EF129A17F7286BC11D32118
-8CBD1FA12542928328F1A71F34F35AAAB2FA384296E6DC6F6437CBF1145DEAF3
-1169A7ECC3B96A24FB2E20E7058DF05CF9791681FCF22F4187358547164C516A
-2FC6C88A5C84BF245D300FB71A7681E6EEF61DED2905798CB3B3D846452D280E
-94CCA6C2993EDD09FAE99952192B11C8792011BC8133F2CD8D094FC3337CFF7F
-C5B8E22C470E2C2FF68EB2FC57516C72999B0937C4B922CDA8C920AFDAE5350A
-5743330895711F3DECD4637888E9F944C84682E115F056227FDE92CD67B1B2B5
-6BA9D6529BFEC90D2D5DB309877BFD555AF2B8FE4D0BFCF80CC9871CE1ABD06E
-761F9B5C2A5714CD436C05599F3789975AB068507F0A2B51ABF01D23494BF925
-5C7C3E542B9F98330750EB8B812EC4DBA1E15ADADFB033F4B0E9A96C077340FE
-CF003A372E571CF3301AB4C68A20266CFCC35C6E22398DE81E228C98E062E17F
-89D7BB6B53740E100CDE0D380A964462BA8CC68ECBF1E64D103EAF4888A77687
-100631799118CE0C99CE051401AF3695762FB84DEA2D7AA7B285CDC38CA605E4
-C4B0FD712056750E69B83FD6A83DC9C6D209E2A18B58DE2A494C3454962DA271
-39B33B91D644513DBF8B75374B31780E8805D2A0531BE0E4B28DC2D5CEB1C265
-8BD3BD922E62EABE84E17AB4C25CD1648CBB43DBA692C449A431178B81889C6D
-4E1032FBEF9EFF89C220773F312F53FFCD131B462E4006952A76790BBBDCE4AE
-7AB227673A19AA79FB7A7CD9224F370A67C09D860ACE7EAE7487F5E28165B104
-C088DC0CBFD6A5571437F4DE8DE6C6E9A016506EC1778E6F1171C68BC45A9872
-8FAE4A72175EFF30559F4CD947B52E9E477F9650D03CD99944C792AE45774CD1
-A55F4C4E241122CB47803C2719D747035C57773B8C0E0CD43B9A24F516FA7DC2
-8ADDF81EF5A02B52FDEA27F892F34E34DBF5D0949A364DA744DF9DA530BFBAC8
-23FE332CD10437D5EE105FEFAEC1AD5211813D7553DBEF97621845E0CC9A3401
-C6C1FB129AB9E2DF41C29F15BDC50E96700C14E092B38BA3ECE03D73CFB27C8D
-02967519511F398EA342F20468A761C7433EC88F214C9F6EC2034A768AB42C8E
-D32ACD6FDE24EB0696A8B43F67B17670ED5EEE622A3504DE4BF090A1BBB3A3C7
-7864F1ABCF96954C91F254DCD0C1D04584F00EC74B75FCDA87AE8BFCE7291965
-5B401DD15ED38907E9674A6A7AA2477E07F6A4A7B195ABB28BAEB1D76ADAF5E8
-AF239EC345BD4DF9E0B9DACED50C097BFF1254859A1CBA9C996D81FC4D181C12
-D620CD85201924E2887A7A657E8B04CDC9CFB2F3752F1BD8643B36A03D90695A
-01E30A9E5EF5C33B834E482FC042E5716F5DD110DBDF6802015C48CB57AF649B
-5F7E990E1147D4088E2C0F6787F4D725CD515180E97F63FDDD6C3BB08D0AA422
-43BC9508690A5EAB2FFCF5105771B169BAECB61D05974761997720620FAE338A
-79F74AE28E52BFC163D6A050998C8EC3126AEB41B4EAD69D5AD0AA051E91BFBC
-C677449411DBE56D16A8E157D7DDAB9529CEFE8450EDF05842E4625CA7B26089
-DE24898E8CDE5A99A68910836B2AC5191E92CCA847357334A5337BCCAAA6AC51
-7BF16380B7022323CD8A92681DC52597F28D6351596CF146B604042DBE859DBC
-327A8E0A68E74B039CD0F9845D649F9544B1A2F7FE7FCDF63514D536CAADC67B
-ACEB6145D4A7B98AA86E07D3A2098EAA5AB1B207AAA35C5151317CA0A9901D31
-47446B6E8A918318C37ECED846752E444D81B670B0C0A968EEA28DF120D72851
-E39C5755218C74303FB26FF64D8D531903CC1480A48469FCAEFF55E0B90D9B06
-0209165181BCE0D75F15A2E41C340B1532D85AE40ABF01013CD4F2A62F4A37DE
-0A7719A3B3BE4766F811BABBC0218EE818DA23B0BA47484A55FFA51E24D021EB
-1A2465E26FCA510D0474296E4E56CEB14696F29810FAC3BA847F78DE64832F54
-0AB0F2CAD660806AF9BC3E201A18DA7CACA998D8BF1BBF6CC466F5A3D01B39C9
-8BD54A43871E3DF463AB9852932A54FBC2A3E76C4111E4FE1426319E8BA66168
-0CC305DF42A54BAC3253E6F286C4D4F72034D074984802EF88C098D684920AB3
-081030683D51F382932A64C1ECC8501BB494D0A997EEED0F508BD84262D5A5A2
-C849EF729F788D95704AFE334B395AA15EB5ACD64607E2C42BF16827E789043D
-F3B8B919D4C78D703E4121D625ED91A590DA03696F9B039A79D60CCC3AB4FEC0
-95F7739E1AD3ED034D02D4AC798A8C99A7383E1B9776082A7BB8A966F837882C
-27D52AC39CE0C483D23B9E2247055C3B7B9C78E08DAA7AE2AC1FBCE8780EB6CD
-B73D2BA040B11AC645852EEC8527F417B96D7FEF701AA6870E85FE65F213414B
-842E55CE1BB49139FA76A7F941AEB1CBF7081025A3A3CD7C766CE05AF35347FC
-9882A3474F3D6D32519E14363AED5EA6C803CB292AD64C92F775E3F3A8D04012
-11C0A7B95C9D40C3BC39DA528134ED7094AD5DE36ADEC039054E9BD02C0D1064
-056999BE7EBBA183B205F3899979B19A2795749454CDC4B3A99C854E167B8EA6
-4B2ECC01A0C72E158AD47DC8BA5E083687D6CFAE20B802B5D9F49DEF54513F9E
-866837F92DE4A4C0406612CFCA59A7242D36BA546F1127C39C839DB6B475525D
-1F7210FE1A81ACE114BE74DE90424FF72F77312AFC4DDE0499C52FACF7215945
-49B09557444BF57FFB138E32AD5A265CA7F2E6D5167B875EE9ED1A915F48C72D
-9F9CC418F45F2D2EF08453EA23A465BDE404EC14F4B4A392437AD173611048BB
-715E6342C16AC1F22850D88336F28A852D7838B79493F2037C1641F38F46C8B9
-358F5496E0C75295F4A839B445234A662D8FFE3435ADDB1786CD8BE228927769
-5CA5670C664435C2168A8707496BF9EB9E078FEAC598D3C1B77270CD105DAA58
-C29FDD6498D7A999B704305EFD37FAB659892AA51F4BB1B0DD067A348F38574E
-2F608B13B4B9AE2D8C5CB45F7FD1EAE93C778BF966E64600A32A3403DCAD4EB3
-AEF2158150E88F7DBC5F25BD99B034BD3905E268A68989372D1D48B8FDFBF748
-7230E3FC932D720A78112193CF1EA1BFD4F1610A9002CDF120E3BBED005C1A14
-27EF51840BC2D149944F83AF3FB4093662488D0E01C975D2931D49E5F52F4271
-DF5964A169B47C3C08D02E9D617CA4B6520F2A2F1CF6AA9E0029FF95404EA0BF
-58B0D72F9F8074F6540BFCA74A09D21B2DEBA0772B3B1DB919E4616ADC7E9FAF
-2C785E602707AA8D3F4E27401B4DB058F8747EF0065C77EF62E9F6504E88B78F
-1F0B63C7927369866064FFF6F04163C62F7A6E3C109CD40E867628BE725E7ECE
-82DB51581E381D6DEEA468F60755335C02C85F0396930008C31CC57D8000DD08
-1D1D0F84B3B1B8DA507888F79EF6695F448BA76D5BE83677FA595933A6099B5C
-AAF6E142C91068364DC69E11E470354C7BF6517A095A62A58EB8B3CC83359DC5
-AF3ED5EA70E617397CCED742D984ABC9AA48136D2A34345991A7E432AE3E9BA6
-4FFC99EE3D05EF868F400467FABDB37819A51D857F621656B8137DC1252D205C
-4211A14CC0E2641B4D361B14496B2A450E2A71E37E6ADF9E1F673F1AB9BB2C27
-4B06ACB1AA3813C44C3C195C7EB586CA518ABBD22A54A334A2DAFC4C3977C6EC
-F037BC2B7707F68EC33F232337969EB6B88742EE7F9877B90E3E878C1A1A17B8
-02BE3A55EDBD67EF205D1ABC6B5966FF8C84BF7B7FA4CAB577047BD4C109A396
-8907F8C04C23DA034182422DFBF1A3AAF80F3574B15E80C35C22615243C909D1
-8D6BF141E5D039073E79979C5C3C388EA6E5A989B8440A8AEBC109063244BAFC
-5305D4B6AFF35BB8BAB08C475DD05222EE119B9FEA2AE8BBB0306BBBEC9A3A34
-01D474103CC038AD7ED830470FD5EF88BED76BE8254B7AA1E0F08CCDA660521D
-5DB3643DBFD66E4479C24BD84EF340B6F3D945B233D5A53DB185383F1071198A
-B3E9E89974D0B6AF446700AC703B4D462AFB42EC2CE11CC411EE210AE3FE08A5
-A30330BF83A5CCB07F36A71803656FB2B73BDDA0645906C17F0AE728103866C5
-2340838FAE2A5FD214B7C3E17B0415289D6EF0F1C2CFCC1E66AF76ABFA03DC20
-555CCB187D1D9D04ED9CE99D1DF9DC73602EC35FF09BA7F58498E918C3FE7995
-0E619B423AC51B825858BC811831FBF21B3BA3ABA6B9FE2CDCE3BFCF642BEDDB
-9C6996400BAD2288AE3E3ED94A2A2508AFF4CD6C0964E6E523628B3587F7F026
-A62E24EC2C3029C02DB2639C4D22B5EB181E3F9FE074037257D8C702B8B50180
-6F4140CE66AC3029B2AC6AB16BCF8394909E4512DE4925E9298DDEEFE19FD6EB
-EA2BBD39B992103F76825419E9E65AE3ED446280F5A7246B6511836EABF120ED
-2838CEACB4086847ABB7C241B771EE42ED92198C21085CCE83555B6B1718C353
-4F1C50D37F6B27E82C8532CFF516A12506EA57824B7C33A36F29990D92C7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr8
-%!FontType1-1.0: csr8 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25661 25938
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr8) readonly def
-/FamilyName (csr8) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr8 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 78 /N put
-dup 80 /P put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 126 /tilde put
-dup 185 /scaron put
-dup 187 /tcaron put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 236 /ecaron put
-dup 237 /iacute put
-dup 239 /dcaron put
-dup 242 /ncaron put
-dup 248 /rcaron put
-dup 249 /uring put
-dup 253 /yacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-40 -250 1111 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A1390082AA03548CCE363896DC
-8285532C521369225C90F80D727FDE65092A0044327885EC680B2ECCDFCCC5C5
-9B4F8AE2D078A25AEEA345A6E6A1D9F372DB3CF2B4AE635D7DB823D70EC82CC7
-1CF7E7DD0D047DC2513344927562E9838BB0A17DEC4E513ACF1FF782F3D8027B
-7E9250875DDD4EE3CCA440DE9C628C3EC0D771840D359B9EC8C94991ED9E551F
-1B6836631196198581D2485BC6D82918C11874F095154B0872CE54E96900BB2F
-F1C79982170757E4A6D158B2AD92AB11E0684F74C0AD96A690D55E3663F37009
-CC9CEA85C49FB69932378B3822EF0B43C4F6854FEA53FE3DA8C66F54621F5904
-A7167F09938B97C9827B8062CD47DB637EC42FCBE54AF3A2609355A07B317576
-DE207567493BEAC1C89FF58B9C93FFA827307FB2E6F3F01DBD6FC8E66F97A4D6
-21EE41A240574E711450DAAFDF021C9F67A3DF3B780BE6B6232F6F229F1968F3
-81E3D30852A756A7A7D78EEF9EC6B4D8D66E9D944152711B910140E070124051
-2366C14DFA3C6C1E735E950E6936B762980AFCBFE3AAE4146ED2CFCD68807BEC
-214893E1E127C8EEC0CCA2876DA14304B733B1794AA02E72848E8E518B25EEBE
-F97452C663FA963ACABED12285D143DA237226E2BD7A4F0716639EED78EBE378
-E9D7BC4B83C5A0A2669245F917062108AD42F9764EBFC9F03284F98EDA0ABAE4
-6318460DB152A69DFAA55B56C2F5E69CDFBECC134661F436EDFA8D8F39540F3B
-93A7B07E22F72D85B1CE6F9267E138A1210A0111B763692E93E51FE8C13B4DCC
-5AA11DE152CE72C8FCCE805938270B70EBFC01D84D117BE1577B3523C4D956A9
-545FF9254DE2996E83FDD2A815D4290877519219B4EB85B64619BEDA0C08CA5D
-E1C9D0D0980DA8C7F15BD929AB522591E005AE22C0652878D2D7EC206E5C6D61
-327114E13F223C87CFEDC7E9C25F258C694385E5A0316AD8A8831A3A4AF84E65
-F68EB428754F318E61A39E76A0172B8011C6FD772845573C8854C48937655581
-53B0A18D3EE2C0BAE2F8B0349D1223131DF142C72064DB9E4A84745B6CFA01CF
-7E5DA2B112B7F8F54C0B3BA14EDD5764B84EAD3EF89C807DDF5E2E4C2D23A46F
-F3F0FC57A5E25EE152F5DF5DAC8F6410EC704A68FF2404C78744582EEC95BD5B
-2C121C81022D2E47009530B47510223463311C28D4A1941C2A7515CFB99134E0
-84F95F922F3AE1AFA0486D8A0E21B71C8007216363A3B14E0B3AB8607868D4FF
-7F5D71A1206B2E905C14979D53F052FF4663FFD53B43F067B52E270DE2198EDC
-7A5BE9035D16F2B693749090871FD23151885BC7418CE97D127157F717C97433
-22506B1B8CD0401AD31569091149260609263F844B18EA918BE5FD3881744E9D
-9CC7C0750938B34EC8563230DEA9026BF358523116A12AC096F2E1BB1A6E0C27
-695A84621BF227970D3CB3BEDD0ECFAA9279DE18B08A47C84FB448773E8A0549
-0E44F27B9FCC33D73DBE9DF89DE681CD9A7D0EEDE14F3045C6DB36195F612410
-304E8349165564465B38680E53550BAFA4D95745BE0F59F3865591DB12BE018E
-C33B9AB317661CED7B2F57EB8D5467C03CEBB79663DF0CD5AD69A8E0A861D0E1
-51DCDC6D1132AD86129C41731869F207E6465A4E3A26B8F26C73A25D67D742B5
-EC79AB8E3A77DD98DF74229FD863C4D5030665B937D09587C91BFBCD7F752CDD
-D4DDCCC1DB1A1D67DAB6779EFBE465F8B9201536F9622F77AE5CDA1DD0F3C9CB
-D63B366562B6E664470456655783EBC337525386D59707100527E8357CC75898
-8FEA5E3AD0B4497EEF21A954D19587A602AF5ED1D5BAFB1ACF97A72D77216540
-DA4D03F83EDC6F14CEB825817324D1FE6A201FDA73ED52156C0724B7ECBCC9EB
-81EE41E929A43E7AE95FB053CBDAB817746FFC0D9455858A4C47D77AE1C757C9
-8A897BC8AA3D5831D8B5A1467D96BDDFB855EF926457DD0530EE95ABAE6717E2
-61836D4BF92327592F8B5A10E6BE20C059B261096FD914A49DB9916C5A699C40
-B957FB18132E540195EEF36665F33AF703AB4F04DE32C980CF8B5C4E9120740C
-25B1ECE7CE52B5E74D25FE2F0D43C64BE9EF2BEC4720C1C0B7CCD7B6E6233953
-0FDB9C061E330C15358DEDE806E2B4899B454D3B08200E422907CEB5579D7E7F
-9CB1E996F0C38E617B6903D5EF0CA24784210E9791A0F067C98AF4986DAECF12
-F987CE4FD77D7C414775833BA6B07FA4C66661D754537B98018B66D5E61CEB1C
-5F4AE115E3C1719356E394CBAAE763D3274250877604C5D15DBB1D72A5FF732F
-65BF55BAB42CB5A242078EA6DB85A7C4ADD5052CDD000B7640B7F7C546794042
-1C2722C46AAAEDD23A4CB090A4EBFB383C13105568836CE1B3C9D1FA024FF955
-4F97D0FBCDD6F740D69EAC92C122A7269666C42EB15FA5C99238A90825B749FE
-E857CCA3B62E24367EEEB325911472666A151EE6656966933D1B8A594FF39EB6
-A721BB37E198C56061AD920F185783E6383B7CA7D0556C4E29B012858B45A478
-BA75C864E4D7927435DFDD8511C32E4520655000F1F441FDBE9E9D44B304435A
-A5E524CD4CA6CDF71485DCC009E99B1E229841807DFC6C36E38FE7B0BD980747
-B45CF7870CF416931F67AA15909A9A1D06CC2E6A4ECC8CA1D35BE61F55396D32
-5D782BD44B2D52CC5A4677B037909AC49E5FAA23F022C55BE96816C688704D96
-67F6C3C70028C6891B918DC0A04CD5225D329407ADCECC141D3515C057B371A5
-F6A602075C28F8B8A51BB447FDF7206AC51CF734626DFEAC942C95E85CEB2004
-A3366A2F98A4FDA1FE6A8C80A62945DE946A035B8E70841CE2B325EAB194F7EC
-7E852B5CD896E7504DF6B5F3B8D5BDB70C52D987867C259CC02426CA81687261
-5E58CB15DBA06D7C7C2F7E2D53A126A794A2B518482EE0EFACFBAECD739C9CFA
-2B37F331EE754ACB0F3423971E2E4BCD34026D1D93B925D54D996B4DA15A3A63
-40289243C6E07D2BED8682CDF520799F335BD2FACD24965CB21393D319D79F63
-B19F83F39F7C630D8070A426F0F1346B3E0B0E9435CE3F1A25A80A9853FEEDC0
-BDA1B7973592B4E141BAC82466E8EB94573E1FD200F882309FD4096AC2B8F6F6
-E07A9DF875E8D350F43F60FB2DE11055CAC479CC9C2A5CFE3E04818E06425C6D
-80890E6944FA45A2884889F4E275158BED0F547D3D24F33042D9E7569CAE04D0
-71BC07BDAB269924FBD87514C208E2077FDF6FA87CFFB8525AC03743E01DBA9C
-F52FC0A4727BDA1D8822CE79021A057D574A9C75EF5AD063AFAC144BA20C1F4A
-C7B5181FCFC1FE759FDD5A3402BF41C91B497A1797C509925127F7E4C53EF6DE
-4D0040450E5C3A5E483095824484B8CCEFA920D70EB2E3E41F795C301F6E9D0D
-21D7C102FCBD6A1BF916ACD8F3B14615FEA13D376A1B4C8D2A3359A5C6DBD1EB
-C4A6E1E8E2F9BFC53ADF676C726B2D7C5EB6A7C0CA5DA25094D486216DF00535
-416A6F482C19AD3B16C15036BB609699CCBFFE7853DDA176029EBF29E8F205B1
-0C89177F823FB4B748804D5DBE80297607B508EF4E6728C6B6247D65642114C7
-2708AD3E62C9742E638689E052EE5ADE59878F54DE580DE367AA9BB626D6D307
-337D6F870D1AF5810DF16D0AAC6B96E374B2573182239F4761E15505FB4F2685
-EAB471389EB215491FD399746539F37710DCD0E1728760B9D9BE5BDA050B736C
-41862645D26D372524EFB00FC81CDBFD797E5F54B4147F1ED6015086578AB15E
-57E72287840C034A16C909CD5A7FF04BA27FD671D4E4159872B4B4E96B27B50B
-3DA377B326670A88BF6E74E4C967C2507491C60631ECB160B4199CC59A1AD24A
-168CCDAE647B3126868C1B051BF916DE3A1578BA0361B05C59AD21B4E973C00C
-8C5D05839EC9D130963275522142F9A2CD38C98D6FB9092EC753133BAE61044E
-AF0EF3B40F24C102D6A7C08FB60D91550C5F0EFE58A37AA7844A142CCADD1FF7
-815634978DE281733D65F02C36F79699BA8A86F7B5B922E636671FACEA3C9792
-1D1F2C9967594FEB7B43CD07CD193D39EEF852C1214E4DA39F9CBD7CA6CDD388
-02418BC0F171B5747A573F9ACFDF3CE7EE8BFEDFCA818D880E09E57136BE1797
-026D2799BAC31C0548DAD073579A95A783295AA8AB73919A1FF72DDE6068B488
-353CCF321E50152B211C19287948779AAF605017C250ED57CB924BA6D5AC61DC
-84F6061A4F38E73051BB50CF7A6B21E4A4948946E90B99497C9BA33D706A04B3
-2A4E508EB44782B51196314E5590A0EB881B54F7891DCA4B92153BFF90C3D546
-6787B0C720237D39C19C0E28709AC9709F555A502A8A159904DEF33C431F3083
-CFA502E747625491C4D31BD383A736E4389DB16875364BD7AF2FFFDFB9E46057
-D1DFEF3A1E4BE3F68FAEFFFAC98664327A77B896B8999EF15491DDB47B8AA6A5
-805612DC4A9FB7E7A8742FE400FA2C41A0ED0FE8D2EE76107D170580A75D826B
-09A37EEC3DC230DE9E6A3CC691129A9CCA8126971AB888F1050CB8FD1AB2FFAD
-44E76851423EDD76412B1613B8CD84938AE26517C39789AE9BB7E1FEBE211DD2
-4FA5A87AD3865224F55C4D619F904C0D39763E2C8F8EC2CD2E63CFC4AB6B5D56
-8D3D4E5729010167D589B94D4584692CC75164ABCCBBE728E3503D74CE352D43
-33CFC7BD3ACF42D7BD6EA9C1EA1A9B2944853F3FE5E54CCE93A0456AFA7C0565
-84508A01F2D2E6F649F46E494D7CF7CFADFDB6026F9677864947388FF93C75B2
-4E633C63D59F1F73D88E9E38D808FA109ED1383D46FAF3BFD1B165DEEC16701B
-75F211E1F53E51B3708B29C9FDFC0706985EB593AA10B892DDCC82D1933D1663
-5A8C54E369D4E8D052DB861E7289A27057CC00A10A206C98138EDD4EBCA87EAC
-867577ADF78D0B454634F96E28630D4855155260F3C9BE74834F996000A5299E
-F9E7727C4CFC6A4145C004E3E6544A8F25C9BCEE4546783D110C6994C96AAA46
-261A84956F85D79942DAB51C714D906342F16FD89FD251F1B7770BCB420B5B2A
-8C362D1B65C83871EBE836C4A12E0F72454F5F96951F0437DBB10C65321A85C3
-187F3CEB8167339A5783331A2BAC546D67804DD791D52576D5A5D640830D3933
-1926319D7D7FBC66443AA27781001F1D50E130AC0DE9E011AFC99551B298FFF2
-CB53B510B2615FBFC1D79A838C7FD7DA436FCB6D3CB1119C125639A5759BB7AD
-122295D26639C0E0A320984833B86D9A70949C9CDCFDDF1B7A0FD55077C48A47
-6B6FCB5B0A7D5C76FBF9AEDBFF3F3E4637131A2EBE3C7F7DC29C5A65AF5D38BA
-B240D103880E70CF416BC6C81A9645191CE5BF07731B25A8C45A449C470E076B
-153AD6118A9D324F13BA615E2DA9C10E46D411E539E47EE72A44894CFD19892B
-11FFA4BD17C1807A57899DCA90FA38A26D451707F2D754DB7E91AFAA4BD8267D
-E7A58F831B45036606EF449DB930CA539033DC385EF79C093E03FEEFAEC3C7E2
-B86EEE8B1CFDC5897598F3BF1584385211065844E2829068E2EF1A31EDEC509B
-2CE5D776C15B6E61B77A8A734786983D2DE5180141E26BB06CD70D234E59F6A4
-4E4DE8E9B53282FC312FEF1626CC27B8DD40E7492E8CDBB9A07FD4094ADCBF17
-A136907ED2A1E655665568ED24F36293C7521988B04AA2EFCB046D4D6C988558
-58EAE90A19296C62EC38C41B2865CF16505AF47E8E50A05CB60F7F033F4F92C2
-3F5B9E370788C66C6AD689B5F27593A254C7D85091158CF4596BA6601FFC3166
-A4560A4CAD1723F75A24E45FBDCC4EF1608793178A2480F7130161255288B315
-941DA56F7488828B95733FC8FBDD5CC6DB7175886044EA6A6E72C50573B0E6DD
-BB130990FAB953103CE3152304766EAA06D3B16E4BB74D9C976546C8ABBE5267
-D2F75531A706106254AC1E3AC424345BF6B1299F22F900E81E5BFF0F7527157F
-915E46FA54888B5468A0D1E602096940AFFEFD5C8AFA4BF54EBA05DFDF337C5D
-D4748D66338F19DD3B4B7E1255F2C6DE78602E1671891DA0FF0DEC283B8D4108
-155D905F953ED6661431DBD024FE6E8BA93757D6FBC1DF1CA632945F6A629686
-B754D5E3F7A9C2D54589EC380F5EB2E7EB07CB4B1E0E178FF29021CD02F5A101
-CE8FF0D1298948B8D2FFDD6D9609711F478B46640B7499B7BD2B9D210919A1AD
-6294411BC687835C896133EC74E0824DF346594438C42E9C3DD76C3CCCC83965
-499AF6C8125D6914544F0D8776AE20432E43BB7E4A3E87DDC4D42E816958806C
-6E02236BE6EECDD67013E1196445F6D7F609D6E7F02AFCD5AF97CB825C618A7A
-D1F310CA16C183D4F456FE26FD9EAF7C2E4D54FBCBAF6690D185FFD13FB48723
-2C27D385C3C7F10AD8548D437964E243BA66D9C9F85473C9A8CE493B8CF9488B
-51283DF20F324D1FC76C908FB48BFDBDEBD7EE92C38F8FC552D1083615B9D5E8
-38178CA472ED4177CEDBB1E9E9F978E184C410C5C7AE4792E16E4076E5EE56E6
-8DE78A2FB0B11E6597628548C15E1FDC5047A94976F8D1518FDA3CA78EEF3B79
-D9667A5A33373E6D51AF1A5DF556D6CC3DA9B1B05D9C4A04B368273F029C339C
-CB39578675EDEDA8184FB6A3677169AFAF202C47D2E2CBF996A02097ACA0661E
-933B1B7F53E982B4FE33B7314998E91AC283E2264B9382D636438DC7123E75DD
-947F85D9EFF43C1D1EB4A26C92023B30404334DA0A39495EAB791702CC7467C4
-A8A6E521879E4F5EA7B20B9F9051B4FEB948C4D1E8A749798012B37BAFE8FB77
-8D7E8447A752EAB82F6FD5C01D828E3F15CBB5397ADADCA87C58A0B43A850D83
-89FA2CFAF410A1B831AD97A0FF897A1B84A6D2467498170811B0C35A293D5B7E
-BAA627609CCD899FF1CA966AAE7691B7B25D7FFA5E4F40DAB1B33385862EBDF3
-D41686D3CCE52D08604917825BEBA3BB9F35DDF87953F98F78BAA196D49E0E85
-CFE23DF363257A0A73C2327D20370CAEE9C8950BA933357DA37698EEB0A38A6B
-982D6D74CF4E081F5918C613FA0F597B3FC0C96103339F2B6161C9629A882217
-65DBF6DD2AB7B250B4E39037A20006ED15987B94CE221347C7971953A3A4512F
-1B00743EBC25D598D26A43519F0E229C977F855788EEFBA46D5DBCE45E81B9E7
-A0D4DF26910BFBF6273FAE159A578100D9D4F21C28382A4299BF59EA31ACA64F
-1DB7F5E6136F1264CA76BED0314DB547BC141B66D7ED40156EB577C8A320D721
-6653C6E36945CA377DF8A3666595433371A0FD6A0A2D7FE2AB67D61014BCF291
-873E42D23BD3FA248498F6BCC68DD1B459B8F24914C9A91D8A2BCA9363A735AB
-FC14684B51A96458E9079DBB187DFA7BA8A630CCE91BB7D994237A2E074D651C
-8AB146922871396818ED132FD255A8D2B6D86E321A5B0E7E477B02F3EF751904
-65C3BF518E18C640CA6EE4C382C5F0FFE211EF38255869FB767AE3AA41DAE5F1
-CCA9901B64D206DC2278DC1DFD7D7EE59586147847344FEBD8C335D70CD3D328
-CE952DD2B2013A5B1023C40FE8270D6EF664B05D277FD1ACF7A6372EA5F963A4
-C361387207892C3829F80DCE51DFBE2774413BA22B36118ACE2B4497DC05C19F
-5406CC425A0229C62BA814B69274BBC388C65FD776639254376D3E8A22B4DD01
-BACF07EDCB4C3BD740D90C3E9FE5442C85CD341146083275E7E6F06A325D258B
-1F0DEE8DB0D535E0304623A534F21837D073F114A73EE2745389DA3DBB43DB1E
-2E88D19EADB102A074ACB0FB0253685A37AC1DFAA5F2013B17304938B10370B5
-8EABD20E44F66FB1ABBE47C7ABA0283444298460020B69126BE51DAAC9F3B1E7
-D9E58127FC044BE414636AD17CF8BCA641CE70A4ECF9CFBA6FF1249CE8622663
-93F73351665140799E559D6679C95911EE6F3C56C2CC83E2EE496CCF1A14362F
-2041083D4082DAB10AE54AB3EFE0ECDDD97581663A2358145D17F95ADDE05204
-893033CCFCDA729A277E7CDFA5F38CF4D3C858F48DC320D25ACBB5C5506AC7DB
-B3683DD214B86B24296AD996C89C838D3A834972EABAA158ECDE3EE960F115BD
-27D6297D6AC4F808A3E4EA827ADDA8AA2D36BB78A17DE2B5465A5043095B001C
-AB5C79A0358A7A527107699A0DF7574F3CD9281BDA1FB1E73D980013490615DB
-9119BBD64030259E6986642C49C9EF4E7C0E8FA1E47CF7F0906E67197464B928
-C530B9D7CDEE33AF8B8A6694CB986E1DAE593682FC2125A60BA60A8AD64714AB
-A2D81FFCD61D69EFEB61595008DA574F713EAB23B72FCFA99C2D53461381E790
-F2CA1A2A4DF73A38EBD37F2E1C4D588AAD1BEDD4A4597E2DB11397AE8197562D
-79D01EB222DAA775FD664D7DA111C25695EA6DD77658386026AFBAAAF6942DF9
-0694467DF3D00447DAD2BA92B56AEE434C4DA9D01527AF31D5833FAB8DDEE3A0
-DDCCBBE55E3D80BED233755BECC28A4B5EDA3EF7C8DB4452B59E4DF3B093C2A3
-0735AF5AB4EA5E80998BA9D5136A717AE59A6EE75DF436404D5DF18E0DBFABD1
-1EDEFBD87A79E10174374B74E7A5E382B8242EDED6A677C940EF13215BF1B023
-D83FADA38430F7EB9E6ADFA5262FDF3E7D562EADE2448F7E8396710CB518432B
-B24B8ABF32B752F4F0BDB1A7972CEE139F03478FAA9325D067ECF0ECAB96E9A8
-A4C2EEB195DF23C4EEE75B5B4959FEBD59D1B65AC1656EF91ADDB9D9DB831715
-12AF56B0C5D945E393C80DA5343B0FA26C4EE8CB1EF3024574F886275C1D49A6
-2EA7220CB4FA7E00BD61BC733F588613AF065A0E3A35D6A137A1E0293A4BC043
-2E8F50E4E106B3058FFE80CE76EBD85E5FECF95A327A99AF1BE0E2A202AEA0B3
-8E2AEEDDCFFBDD7F0699352A574B640377AB11DA5031F68CF58EADE04D281A26
-B778719E7FBCE64AF62801A497FF2113F92C03B4FAF2A4DE61B2681CEF369735
-A2BA063A69C5CFCCF48C6E756CAB752C32CD92F1983CBFD83BA5233A60BE281F
-3B5B204421332A0AB7638B6B2EB343AF35FFD09617F0F9642540026C2726AA1D
-5714AACEFEE5E8854A21661AC9069A644770C6EDBE1FE042A8B182C09B5A3BB9
-9C16DB410F86D83F2AFF56845D61A53E463FF03A238D73FA198AC855F0FE36E9
-829A500523F12352E80619577D361D5C10ED5B565DF05517196807A15BA46165
-9EA11DE9AE0682A72F46BADDA8E516D67DAA3BDA20A87697B5DB2974D30D6208
-C9317DBF964D5296DA4798ECF0FA5D9F8ACDE71D3599003571AEEE500D368A88
-09ADAEC37C95C64531E11A545E11E11DE4953FEE9FC074A6130A19FF149F9D2D
-2E4139D423D3233A1843D8937A533C97794B79CDE5DE6C520D42F9D1F44ED8EC
-D3B44F1FB2999AA7EA28B3B2A0D4D4C41CE3A1D705DF2DBF3789E47EA1C0571D
-6645E994D58AC8E7A738AB30AA8BA9FB392C1460EEC86FA647B352AB9B03084E
-4FD965BC288830633DE604B1BBBD302EE8D981C7E798EE66714B082938DD7A18
-A74590720A9CFDAFE92166EDBE42C64891E12D1480A2C449FB8F0213874046FB
-963EAB779262BFDB6C48204F5773A8AC6344889B553A481EF92836B01BF0EA68
-35B5EED77A92796E5FF32D8A58DE64871F2A155FD0227BFE1A15DBB3CB589D1C
-D0AD435D360BDD8DFC58D925FFC99D8ED3C81E2552B303BB372F913060A660FA
-282E3E33B244EB7F0AB212349BBB0AFBF131C13751112C055D664EE1E4567676
-F7C6645856609DB35F2E46462F98D001D67B0E6ED145834DC0A713D2C687538E
-61567648555CD6C8D71346C952CADB9E69F3C1D462146BBC69DCE801951FD24F
-4574BBF74CB1F08F5D1B19EE52662C30E21B602E48488CADC03B5AE8C44E2BF8
-63F8A848579BDAFFC90FCE8A002AA93A6E7F4AFD40E47F1D9EE1E3867AF6EE9C
-0BF5196069D9F692B7CB82D808BE082F53DE4EF8C2B2498FE1D73E865F310D40
-CA281D744365E17876754CA2F7ACF0AF1BEB2A2CE7286AF7535720617CE06A14
-554854506513AE68B10917E92AAAAE75DCB4D96B0B9D677BEA32E92E48BB8E24
-146D9C8A9433F6675356B00797BE0C9975267EFB5A16E6820B71E684C2E3FD49
-493FF7FD60B33F9177B24DD0DC34B9A81FBCA4DFF44F0E1A2B1B1BEE87B716A6
-388223F980D90F381F8382D16B6F6C545FC9192BFE327979710883F8DA842F04
-600B8A0D6C9D9EC4A1FC352498AD38036AC92DB7CB1F0F596785C4CEDFA66C8D
-D2E5407A2E11DAB7F5FAB71B962D3421C7D2C18828C1698B832A00D104515EA6
-9A04D9D00002B0B38E578728B81AB076390F1C845479AD190135B15853AE5CF8
-954DE8DB39CEE4667BB267363EDD1E6A38FAD7DF117FD2FEFDB9330267117113
-CC705D31D6FB82AF5F17648D05E8A0E2FBE679BA20B3E09E49B413F02AA9D070
-1DCF5344CC5454EAA2D1C3F37301C5436EDC34EDE79FBB1BD30F0C0A9DFA0BFD
-A84646C41B70633BF8465DB553290040897D5987C13E006A67C814BBCAB2D183
-553CFC2D79DD472098B7C7CC7285AD7E580DB885DD185F179AFC2FA413775965
-92702DED2D7D9FF6BA7331A2AA4F26457AC527A550649642602B39A47809FF85
-D2360A325F92B8CF424279152430E52000E92F3804363CB9FEC734E2AC57B31F
-FFA1999F351E9EA27E280118C25CA199BF9D98903D80615D15A1B4165F378942
-B57F7640E7BFBE9C5BBC948E50FFAFF4DE7F665E824E31EF84E450FCA8274C53
-00D183C99F1FE9650C493D42125EC4D18801CFE8A449C10FFF7B6D7692C6875F
-4D54092FE6838B3A9E92C195D3F358A540DCCBD0EA5A51D4456FECA1A3B71A77
-A391522F630CA83CB6513FF7E98DABB1F4604AFF50A2FCEBAC23C0FDF28B2C8D
-7BCEB7B70A0DC1B7F707CE3ADAAB5FA043D1BF1806FB12E6DFFCCCDA9ABA4E86
-1A2F3EEBE5B29E8B6334E37AC1B9F11502B71FCAC73AFE84A86A3D035477CB3C
-89E8FFBA16DE8D505C1EAA1D38C20710EB67AF1396E59D1113C07127BD03782B
-760BF4B9251A8EE2AC0061E5572951B4AC0C35620B96B215A2444458D57BF803
-7646ECC4374A7D4F397DF98A6878CAE5421BE3D6E41D69F87B4DC32B083089E1
-9F08A255D86E73B40FFEE47D9C0C1622F12DA0310A8BB4C86BE30909E154B050
-10B869B9981FB2F897F1C23A4C888F20DDE45A32B160049A4D04134044CE0D30
-3CA98E09F04B38A7745C1DF918E4775F9EEC1F91F7AA0B3D65B1797133B76F2B
-46665B431610695D200B82FB8244F0AB9DFC5952C7B10D27E309EA007DA4529B
-73F4791FC9B1F184D0A74BF3791A0282512C62DAEFDABE5E9B7EFD2F7F01FB30
-6A8308C81AB9434349248BAA0F7D106CED1B1FF3BD91141B717C5A2B516A5895
-874D18BDAC7F194037E7AABE63D455E32C081F5606F94C5EF44B3E4BCD529AD0
-402DC291316B20B14769CB159DE39C5A53E8E765DD0328EBEDC76A589AAB744C
-C2BE5DBF1B7DB827597978D26FFA98DF2EC770CC8B81F1BEF40BF4AB5CDBFAE7
-2D59A7CA3B6FF4774E0B5D38F7E73A3DADD38AE066C0CC245EB6BE4D23ACC183
-EE16820F18FA87AF6CB9DAE987193DE161E03BC2DA310E795510DC6F6CEB8216
-2F72BDAF8C4BAC344CE3DDDF27B27AB65A2EF6E1DF7E437252FA2696FE4DFE7D
-51BEAC31B86EACBF26C065B77ECCC097C9F48F09CD8BB51D97041ED93936D51D
-3508339A0B9766429B4A16ED3548A6C44156B6E1E01603338F87E607A9436E5F
-21C33FA7AEB571584410BAF603DB1EE387C8AA7D32F3313A6917FD31D2AB4A84
-F42DA72B35842AF21FD1F3C91E39C12B354D3BEAA16DCA445F7C92C12A52FF95
-DCD854B4CA124B18DD8A6D75BD0EE7B2439968BE5B5FBE136C892AE04AF055A0
-A8E31EA8CBF13B46587C78E339E11AA822C90F1A3AF2212A32AAA3E0F29C27D6
-124232504D64E4A2A5EF3E3AA3056119D91218D5A4427E93B1A339AA3D86013C
-984C5C97CDDDA726B230DAA72E960935B311E3663C013697E9FF36154EA180EF
-E02CC3FA28DA9390206346AAE5718EDD20B4F544EDABD7FBD5920AB70C2402E3
-00F45629C6C2A7145D8F0B205CAD75B14AF3BF67BE4B9CC11C35C49BDFF237E2
-460A00CAC8D265FF37A7C8F4CCCC0D68D89F3EEA3FAC2284F322067295BBD40D
-8D477923080A6C4F5880D98E95AFDE661DFCE0F5D8DCBA286C0B127DAEDC3581
-8B870F14B5E9485AC07CC4AE72F3992F671117C427090882D890BBB31C434D4E
-52C1608F2E11E98B26F158D685E7AB6702A9F67A93F390573F04CF2E5889A015
-F67C99EB20A5429918DF79CE4BA09D10ECDF97F7D7BBE495AD9F7049E294F68A
-AB442ED09DA5F30D2BFD47FDAECE7E409B14E7AD9ADB3946F41BF7F2065E322D
-0856242F9AE11AA7DD1F90447FAA9A3961852026BCEB5F472D2D6E9571B5BDBA
-C61F7B2D390927C16BCB224E8051D4ABF96435A0CB8D5160A400E7A81F0F36B1
-6CB8DABC24D57E7427DD4FB42C564A95DF799F335BD2FACD1AA9953F0E1E6D51
-50C19DE2EA2C6769EF15473BD2A2B0C4050D232DA4058E016EF81005CF8318D2
-4F3A71EB57772BF734ACBA9F8CB419B3260615DE199552390345C891D0ABA7FD
-4CDF12AD43DAF41E493CA7E2BA4F426B857F081E70A834DE83E9AA277BEA45C6
-F2202E3C076F8CCF23B02F8323E93DF97C7090AB931270C28F4BF8CB0FA60191
-4EFFF7B3FE507B5A423A15FC8D9795FF84F56D618045AF82E5A8E601A9E58030
-892887BBA3466B5C569C811B98A91F61C31A82237851016D67AC64B2D3374F44
-43E9C998EBB88A3CD3CE22DAB5478693CDFD256E5512A80FB951A1BDA713754F
-1C85604894554B713EF28F4191E77F639215AE4418268F2406BC1B17B3765F12
-1A5067F835AF4E7E3A9F45D8B158024344DB9C0764F74D65E74703C1429A8FE5
-B98D39D6ED875C7A14087D979C01084B9BED79361ECE38D0ADA853EDFCDC120F
-58BF1C99AE84BAE490025B01E13155F911C55B4CE3B94C648497102A07D36F2F
-CAE2BECFB3492BF4CFAF9DF08D2EA19DF5A25D0F4CA8224E0A5D68ACB8C9F06E
-8CB640C947212CCD8D2C373CB6B2C5479E27CB9550459C55BC615BF149B81346
-01C33F7338F16FBD408DC47F94206247218A3868A151D0C7C077DCE556FA0F19
-FAD984D48A617046BAD77696279988F6ED7A0BC46D224FB6AAB6146B72F4BA66
-CF5578B868DDCCBD460F2423367CBDDD9C4FF3FB18DBEBE211BA4CE357DD4747
-B2008CDAFEC9FB9E99CC724090DF4604883E31B10075B3069381EB5BD55329B3
-744DC177C4DB41A8681B1D3D0480F6039F2207DDAA3720A679E479E0C334964E
-6FB1EA368F2EBB1DF6BADF5C31909190517D8427F43AD3CDF129E1B75CF70B0B
-46AAA20C764E90658AF6CB7F4AC5E57DE2D9E7085365A811C34E63BF4BEFCACC
-5F7F328CB0503BAE69232B26B1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (cs-dired-ref.dvi)
-@start /Fa 242[61 13[{}1 49.8132 /CMSY6 rf /Fb 134[32
-32 43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19
-27 34 27 34 30 11[45 1[34 44 1[41 1[45 54 3[22 1[47 39
-41 46 43 42 45 9[30 30 30 1[30 30 30 30 1[18 21 18 44[{}47
-49.8132 /csr6 rf /Fc 129[35 35 1[35 2[35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 1[35
-1[35 35 3[35 35 35 2[35 1[35 35 35 35 35 1[35 35 2[35
-35 35 3[35 35 35 35 35 35 35 35 8[35 35 2[35 35 35 1[35
-35 1[35 1[35 35 35 35 1[35 33[{}63 66.4176 /cstt8 rf
-/Fd 2[60 3[64 47 10[32 53 2[53 51 6[56 34[51 4[45 62[51
-60 2[60 64 45 45 47 1[64 57 64 95 32 60 1[32 1[57 1[53
-64 51 64 56 6[70 6[64 2[78 86 90 109 6[72 1[88 55[64
-67 11[{}40 99.6264 /csbx10 rf /Fe 7[34 10[23 4[36 6[40
-34[36 67[36 43 3[45 1[32 34 1[45 41 45 68 1[43 25 5[45
-36 1[40 8[61 8[61 10[62 26[32 32 40[{}24 66.4176 /csbx8
-rf /Ff 2[37 3[39 28 5[39 2[39 1[20 31 2[31 31 6[35 34[31
-2[27 1[28 58[35 3[31 37 37 1[37 39 27 28 28 1[39 35 39
-59 20 37 22 20 39 35 22 31 39 31 39 35 11[53 4[48 1[53
-6[55 1[48 54 17[35 35 1[35 20 24 20 2[27 27 27[39 41
-11[{}54 66.4176 /csr8 rf /Fg 18[38 4[61 115[53 1[57 1[76
-69 76 2[73 1[38 2[42 63 76 2[67 14[103 13[105 68[{}15
-119.552 /csbx10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop -247 -364 a Fg(Referen\350n\355)47
-b(k)l(arta)e(pro)g(Dired)-50 -256 y Ff(\(ur\350eno)25
-b(pro)f(Dired)f(v)g(GNU)h(Emacsu)g(22.x\))-63 -176 y(P\370\355k)n(azy)g
-(ozna\350en\351)i Fe(\(D)n(X\))d Ff(vy\276aduj\355)h(dired-x)-450
-31 y Fd(Spu\271t\354n\355)36 b(a)i(uk)m(on\350en\355)f(Dired)-450
-196 y Ff(spu\271t\354n\355)24 b(dired)1098 b Fc(C-x)36
-b(d)-450 276 y Ff(spu\271t\354n\355)23 b(dired)f(v)h(adres\341\370i)f
-(s)g(aktu\341ln\355m)h(soub)r(orem)71 b Fc(C-x)36 b(C-j)g
-Fe(\(D)n(X\))-450 356 y Ff(uk)n(on\350en\355)25 b(dired)1079
-b Fc(q)-450 561 y Fd(P\370\355k)m(azy)39 b(pro)f(p\370esun)m(y)-450
-726 y Ff(zp)r(\354t)25 b(na)f(p\370edc)n(hoz\355)h(\370\341dku)783
-b Fc(p)-450 806 y Ff(vp\370ed)24 b(na)g(n\341sleduj\355c\355)f
-(\370\341dku)709 b Fc(n)-450 886 y Ff(nahoru)24 b(na)g(p\370edc)n
-(hoz\355)h(adres\341\370)653 b Fc(<)-450 965 y Ff(dol\371)24
-b(na)g(n\341sleduj\355c\355)f(adres\341\370)704 b Fc(>)-450
-1045 y Ff(na)24 b(dal\271\355)f(ozna\350en)n(\375)j(soub)r(or)759
-b Fc(M-})-450 1125 y Ff(na)24 b(p\370edc)n(hoz\355)h(ozna\350en)n(\375)
-h(soub)r(or)608 b Fc(M-{)-450 1204 y Ff(zp)r(\354t)25
-b(na)f(p\370edc)n(hoz\355)h(p)r(o)r(dadres\341\370)620
-b Fc(M-C-p)-450 1284 y Ff(vp\370ed)24 b(na)g(dal\271\355)f(p)r(o)r
-(dadres\341\370)728 b Fc(M-C-n)-450 1364 y Ff(na)24 b(nad\370azen)n
-(\375)h(adres\341\370)871 b Fc(^)-450 1444 y Ff(jdi)23
-b(na)h(prvn\355)f(p)r(o)r(dadres\341\370)801 b Fc(M-C-d)-450
-1647 y Fd(P\370\355k)m(azy)39 b(p)s(omo)s(c\355)g(m)m(y\271i)-450
-1812 y Ff(otev\370i)24 b(soub)r(or)981 b Fc(Mouse_Button_2)-450
-1892 y Ff(zobraz)25 b(men)n(u)874 b Fc(Control-Mouse_Button_3)-450
-2086 y Fd(Ok)m(am\276it\351)38 b(ak)m(ce)f(nad)g(soub)s(ory)-450
-2251 y Ff(otev\370i)24 b(aktu\341ln\355)g(soub)r(or)846
-b Fc(f)-450 2331 y Ff(otev\370i)24 b(aktu\341ln\355)g(soub)r(or)g(p)r
-(ouze)h(pro)f(\350ten\355)346 b Fc(v)-450 2411 y Ff(otev\370i)24
-b(aktu\341ln\355)g(soub)r(or)g(v)g(jin\351m)f(okn\354)425
-b Fc(o)-450 2491 y Ff(otev\370i)24 b(aktu\341ln\355)g(soub)r(or)g(v)g
-(jin\351m)f(r\341mci)394 b Fc(w)-450 2570 y Ff(zobraz)25
-b(aktu\341ln\355)f(soub)r(or)824 b Fc(C-u)36 b(o)-450
-2650 y Ff(vytv)n(o\370)25 b(no)n(v\375)f(p)r(o)r(dadres\341\370)795
-b Fc(+)-450 2730 y Ff(p)r(oro)n(vnej)24 b(soub)r(or)g(p)r(o)r(d)g
-(kurzorem)g(s)f(ozna\350en)n(\375m)171 b Fc(=)-450 2933
-y Fd(Zna\350en\355)36 b(a)i(o)s(dzna\350en\355)f(soub)s(or\371)-450
-3098 y Ff(ozna\350)22 b(soub)r(or)f(neb)r(o)g(p)r(o)r(dadres\341\370)g
-(pro)g(dal\271\355)f(p\370\355k)n(azy)71 b Fc(m)-450
-3178 y Ff(o)r(dzna\350)25 b(soub)r(or)f(neb)r(o)h(soub)r(ory)f(p)r(o)r
-(dadres\341\370e)253 b Fc(u)-450 3258 y Ff(zru\271)23
-b(ozna\350en\355)j(v\271ec)n(h)e(soub)r(or\371)g(v)g(bu\013eru)359
-b Fc(M-delete)-450 3337 y Ff(ozna\350)25 b(soub)r(ory)f(se)g(zadanou)h
-(p\370\355p)r(onou)430 b Fc(*)36 b(.)-450 3417 y Ff(ozna\350)25
-b(v\271ec)n(hn)n(y)g(adres\341\370e)816 b Fc(*)36 b(/)-450
-3497 y Ff(ozna\350)25 b(v\271ec)n(hn)n(y)g(sym)n(b)r(olic)n(k)n(\351)f
-(o)r(dk)n(azy)500 b Fc(*)36 b(@)-450 3576 y Ff(ozna\350)25
-b(v\271ec)n(hn)n(y)g(spustiteln\351)g(soub)r(ory)474
-b Fc(*)36 b(*)-450 3656 y Ff(in)n(v)n(ertuj)24 b(ozna\350en\355)1006
-b Fc(*)36 b(t)-450 3736 y Ff(ozna\350)20 b(v\271ec)n(hn)n(y)h(soub)r
-(ory)e(v)g(aktu\341ln\355m)g(p)r(o)r(dadres\341\370i)71
-b Fc(*)36 b(s)-450 3816 y Ff(ozna\350)25 b(soub)r(ory)f(vyho)n
-(vuj\355c\355)g(regul\341rn\355m)n(u)f(v\375razu)127
-b Fc(*)36 b(\045)-450 3895 y Ff(zm\354\362)24 b(zna\350)n(ku)h(na)g
-(jin\351)e(p\355smeno)626 b Fc(*)36 b(c)-450 3975 y Ff(ozna\350)25
-b(soub)r(ory)-6 b(,)24 b(pro)f(kter\351)i(elisp)r(o)n(v\375)f(v\375raz)
-g(vrac\355)f(t)85 b Fc(*)36 b(\()f Fe(\(D)n(X\))-450
-4182 y Fd(Mo)s(di\014k)m(ace)i(Dired)g(bu\013eru)-450
-4347 y Ff(vlo\276)24 b(do)g(tohoto)i(bu\013eru)e(p)r(o)r
-(dadres\341\370)479 b Fc(i)-450 4427 y Ff(o)r(dstra\362)24
-b(ozna\350en\351)i(soub)r(ory)e(z)g(bu\013eru)436 b Fc(k)-450
-4507 y Ff(o)r(dstra\362)24 b(z)g(bu\013eru)g(v\375pis)g(p)r(o)r
-(dadres\341\370e)420 b Fc(C-u)36 b(k)-450 4586 y Ff(zno)n(vu)25
-b(na\350ti)f(adres\341\370e)g(\(zna\350)n(ky)i(se)e(zac)n(ho)n(v)n(a)t
-(j\355\))217 b Fc(g)-450 4666 y Ff(p\370epni)24 b(t\370\355d\354n\355)f
-(adres\341\370e)h(p)r(o)r(dle)g(jm\351na/data)255 b Fc(s)-450
-4746 y Ff(upra)n(v)24 b(v)n(olb)n(y)g(p\370\355k)n(azu)g(ls)843
-b Fc(C-u)36 b(s)-450 4825 y Ff(obno)n(v)25 b(zna\350)n(ky)-6
-b(,)25 b(skryt\351)f(\370\341dky)g(ap)r(o)r(d.)491 b
-Fc(C-_)-450 4905 y Ff(skryj)23 b(v\271ec)n(hn)n(y)i(p)r(o)r
-(dadres\341\370e)720 b Fc(M-$)-450 4985 y Ff(skryj)23
-b(neb)r(o)h(o)r(dkryj)g(v\271ec)n(hn)n(y)h(p)r(o)r(dadres\341\370e)326
-b Fc($)1866 -364 y Fd(P\370\355k)m(azy)39 b(nad)e(ozna\350en)m(\375mi)g
-(soub)s(ory)1866 -198 y Ff(k)n(op\355ruj)23 b(soub)r(or\(y\))992
-b Fc(C)1866 -119 y Ff(p\370ejmen)n(uj)23 b(soub)r(or)h(neb)r(o)h
-(p\370esu\362)f(soub)r(ory)327 b Fc(R)1866 -39 y Ff(zm\354\362)24
-b(vlastn\355k)n(a)h(soub)r(oru\(\371\))707 b Fc(O)1866
-41 y Ff(zm\354\362)24 b(skupin)n(u)g(soub)r(oru\(\371\))745
-b Fc(G)1866 120 y Ff(zm\354\362)24 b(p\370\355stup)r(o)n(v)n(\341)h
-(pr\341)n(v)n(a)f(soub)r(oru\(\371\))464 b Fc(M)1866
-200 y Ff(vytiskni)24 b(soub)r(or\(y\))964 b Fc(P)1866
-280 y Ff(zm\354\362)24 b(n\341zev)h(soub)r(oru\(\371\))g(na)f(mal\341)g
-(p\355smena)263 b Fc(\045)36 b(l)1866 359 y Ff(zm\354\362)24
-b(n\341zev)h(soub)r(oru\(\371\))g(na)f(v)n(elk)n(\341)h(p\355smena)255
-b Fc(\045)36 b(u)1866 439 y Ff(sma\276)24 b(ozna\350en\351)i(soub)r
-(ory)812 b Fc(X)1866 519 y Ff(pro)n(v)n(e\357)24 b(uuenco)r(de)i(neb)r
-(o)f(uudeco)r(de)g(soub)r(oru\(\371\))169 b Fc(U)1866
-599 y Ff(zk)n(omprim)n(uj)23 b(neb)r(o)i(dek)n(omprim)n(uj)e(soub)r
-(or\(y\))247 b Fc(Z)1866 678 y Ff(spus\273)24 b(info)f(na)h(soub)r(or)
-902 b Fc(I)36 b Fe(\(D)n(X\))1866 758 y Ff(vytv)n(o\370)25
-b(sym)n(b)r(olic)n(k\375\(\351\))g(o)r(dk)n(az\(y\))587
-b Fc(S)1866 838 y Ff(vytv)n(o\370)25 b(relativn\355)e(sym)n(b)r(olic)n
-(k)n(\351)h(o)r(dk)n(azy)455 b Fc(Y)1866 917 y Ff(vytv)n(o\370)25
-b(p)r(evn)n(\375)f(o)r(dk)n(az)922 b Fc(H)1866 997 y
-Ff(prohledej)24 b(soub)r(ory)g(na)g(regul\341rn\355)f(v\375raz)391
-b Fc(A)1866 1077 y Ff(nahra\357)24 b(regul\341rn\355)f(v\375razy)788
-b Fc(Q)1866 1156 y Ff(p\370elo\276)24 b(soub)r(ory)g(\(b)n
-(yte-compile\))610 b Fc(B)1866 1236 y Ff(na\350ti)24
-b(soub)r(ory)g(\(load-\014le\))790 b Fc(L)1866 1316 y
-Ff(spus\273)24 b(p\370\355k)n(az)g(na)g(soub)r(or\(y\))738
-b Fc(!)1866 1523 y Fd(Ozna\350en\355)36 b(soub)s(or\371)j(pro)f
-(smaz\341n\355)1866 1660 y Fe(Odzna\350uj\355c\355)27
-b(p\370\355k)n(azy)f(ma\276ou)g(zna\350)n(ku)h(pro)g(smaz\341n\355)1866
-1768 y Ff(ozna\350)e(soub)r(or)f(pro)f(smaz\341n\355)732
-b Fc(d)1866 1848 y Ff(o)r(dstra\362)24 b(zna\350)n(ku)h(pro)f
-(smaz\341n\355)665 b Fc(delete)1866 1927 y Ff(ozna\350)25
-b(v\271ec)n(hn)n(y)g(z\341loh)n(y)g(\(soub)r(ory)f(k)n(on\350\355c\355)
-g(na)g(~\))162 b Fc(~)1866 2007 y Ff(ozna\350)25 b(v\271ec)n(hn)n(y)g
-(z\341loh)n(y)g(\(auto-sa)n(v)n(e\))510 b Fc(#)1866 2087
-y Ff(ozna\350)25 b(r\371zn\351)f(do)r(\350asn\351)h(soub)r(ory)634
-b Fc(&)1866 2166 y Ff(ozna\350)25 b(\350\355slo)n(v)n(an\351)f
-(z\341loh)n(y)h(\(k)n(on\350\355c\355)g(na)f(.~1~)g(ap)r(o)r(d.\))109
-b Fc(.)1866 2246 y Ff(pro)n(v)n(e\357)24 b(v\375maz)h(soub)r(or\371)f
-(ozna\350en)n(\375c)n(h)i(k)n(e)f(smaz\341n\355)100 b
-Fc(x)1866 2326 y Ff(ozna\350)25 b(soub)r(ory)f(vyho)n(vuj\355c\355)g
-(regul\341rn\355m)n(u)f(v\375razu)127 b Fc(\045)36 b(d)1866
-2529 y Fd(P\370\355k)m(azy)j(s)f(regul\341rn\355mi)g(v\375razy)1866
-2694 y Ff(ozna\350)25 b(soub)r(ory)f(vyho)n(vuj\355c\355)g
-(regul\341rn\355m)n(u)f(v\375razu)127 b Fc(\045)36 b(m)1866
-2774 y Ff(k)n(op\355ruj)23 b(ozna\350en\351)j(soub)r(ory)e(obsah)n
-(uj\355c\355)g(regexp)193 b Fc(\045)36 b(C)1866 2854
-y Ff(p\370ejmen)n(uj)23 b(ozna\350en\351)j(soub)r(ory)e(vyho)n
-(vuj\355c\355)g(regexp)94 b Fc(\045)36 b(R)1866 2933
-y Ff(p)r(evn)n(\375)25 b(o)r(dk)n(az)1145 b Fc(\045)36
-b(H)1866 3013 y Ff(sym)n(b)r(olic)n(k\375)24 b(o)r(dk)n(az)988
-b Fc(\045)36 b(S)1866 3093 y Ff(sym)n(b)r(olic)n(k\375)24
-b(o)r(dk)n(az)h(s)e(relativn\355)h(cestou)440 b Fc(\045)36
-b(Y)1866 3173 y Ff(ozna\350)25 b(pro)f(smaz\341n\355)961
-b Fc(\045)36 b(d)1866 3376 y Fd(Dired)h(a)h(Find)1866
-3541 y Ff(otev\370i)24 b(v)g(dired)f(soub)r(ory)h(vyho)n(vuj\355c\355)g
-(vzorku)114 b Fc(M-x)36 b(find-name-dired)1866 3621 y
-Ff(otev\370i)24 b(v)g(dired)f(soub)r(ory)h(obsah)n(uj\355c\355)g
-(vzorek)131 b Fc(M-x)36 b(find-grep-dired)1866 3701 y
-Ff(otev\370i)24 b(v)g(dired)f(soub)r(ory)h(p)r(o)r(dle)g(v\375stupu)h
-Fc(find)76 b(M-x)36 b(find-dired)1866 3904 y Fd(N\341p)s(o)m(v)m
-(\354da)1866 4069 y Ff(zobraz)25 b(n\341p)r(o)n(v)n(\354du)1014
-b Fc(h)1866 4149 y Ff(p\370ehled)24 b(p\370\355k)n(az\371)g(dired)871
-b Fc(?)2219 4454 y Fb(Cop)n(yrigh)n(t)2522 4452 y(c)2505
-4454 y Fa(\015)21 b Fb(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5
-b(oundation,)20 b(Inc.)2302 4517 y(designed)h(b)n(y)f(Stephen)g
-(Gildea,)g(Ma)n(y)i(2006)g(v0.1)2299 4581 y(for)f(GNU)f(Emacs)i(v)n
-(ersion)f(22)h(on)e(Unix)g(systems)2128 4645 y(Up)r(dated)f(for)j
-(Dired)e(in)f(Ma)n(y)j(2000)h(b)n(y)e(Evgen)n(y)g(Roubinc)n(h)n(tein)
-1866 4737 y(P)n(ermission)d(is)g(gran)n(ted)h(to)g(mak)n(e)g(and)f
-(distribute)f(copies)h(of)h(this)f(card)g(pro)n(vided)g(the)1866
-4801 y(cop)n(yrigh)n(t)k(notice)e(and)h(this)f(p)r(ermission)g(notice)h
-(are)g(preserv)n(ed)h(on)e(all)h(copies.)1866 4893 y(F)-5
-b(or)17 b(copies)g(of)h(the)e(GNU)g(Emacs)h(man)n(ual,)f(write)h(to)g
-(the)g(F)-5 b(ree)17 b(Soft)n(w)n(are)i(F)-5 b(oundation,)1866
-4957 y(Inc.,)20 b(51)h(F)-5 b(ranklin)20 b(Street,)h(Fifth)f(Flo)r(or,)
-g(Boston,)i(MA)f(02110-1301,)j(USA.)1590 6353 y Ff(1)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/cs-refcard.ps b/etc/cs-refcard.ps
deleted file mode 100644
index a0637f40f70..00000000000
--- a/etc/cs-refcard.ps
+++ /dev/null
@@ -1,2523 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: cs-refcard.dvi
-%%Pages: 6
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: csbx10 csr10 cstt10 csti10 csr7 CMSY7 CMMI10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips cs-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.02.13:1228
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD
-0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE
-E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C
-7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37
-88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6
-DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1
-AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY7
-%!PS-AdobeFont-1.1: CMSY7 1.0
-%%CreationDate: 1991 Aug 15 07:21:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-15 -951 1252 782}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
-8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
-F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
-E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
-424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
-E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
-C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
-868AEA25DA3D5413467B76D2F02F8097D2841EDA6677731A6ACFEC0BABF1016A
-089B2D24FA80E89E381E17A5E49663B60435D79C04AFCB27AF313045D656F461
-93419897889D12DC113AC6F3E770F84030ABB6E0E84822062F22823E15C18EE6
-E524114FBC6B5FE333E2C649670C7EEAB2EE8F98CECBC72B2061A886113BCD86
-34BC89B316AED93C32336F15F2038797FA6AA3B63EF403BEC4F40DCE0B2A1C89
-92BC8F62BF85B2D4418236D4795B16BAB0DC89098B5226FB96544457550AE495
-36ADB1399938FF601079DBCBD45914B5E3EB0D6AC6DD675A093B837B3A42BC37
-528CF6FF82FDD1BFEA6FDC9AC1D7C2B234D3E2CB59258C530CE314F409C10B0C
-6F6AB5C5328407AA1A3A0835D81524219D501B2CA34F839703364431A499320B
-F219D27AE28BC90912E7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr7
-%!FontType1-1.0: csr7 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25529 25807
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr7) readonly def
-/FamilyName (csr7) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr7 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-31 -251 1122 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A13872340A840BE8B95A5F1C25
-CD575CD32721748B2E67F9EFB55236DAEBD0A0A66E00D40EA8F97CC2D2C60B23
-D6D605B155A7303A9304DF379860F72EEAAA9A6A3D763A766A4F7F7C298B77F3
-8BEFAAFC7E7C91B8285AAC489F9B84598AD6FD112A7E3F85F66B0E063013FA13
-EAAE7D3008EF4CC3C5E3A73EE8DDF17EF3426989F331E68C4E36976CA972DEAB
-90B647C14B200DE939EA777B45D3220E4619DFE510764CF8D22D8219515BD27D
-EDFE3C56106DEA15E8C5B3E8A66B1B8EFEEB3AF622C560D4D8A5C8CFD081C385
-9CE1F49CB88A38F2EB89589DEC399626D687B1AF9C593DAD2839D4A2593A1F13
-3FFC135447C687382EEEC507833E465286304C3200E5D3E7328064B84F05E696
-F7C269217DAA9466269DF343D09B283931A74BED0B18DB3F17F9E9F23F598D56
-D5EC687F7A1E6E70E6D6AB335CCAD0426C5396072F15A124743CA6149C5ABB72
-B8D388E2829E1FF5614D22C358B72F7A86EC62F17514C5A0C9EC297A31D0AD53
-1C9FDB368EC14813B24C84D3FDE47DC7990E350ADA10FC2E710099EBCAE53C63
-FEC9C91AA27DE81273BCC7EC20DDB18EED75D7D04DC39DD27EB86BA5EC4EC9E4
-349CE0EE181973616918A974B51A34B147BD3204EB4EFAB3A48CAEA28950D309
-6D39676C15E531296E88B57CCAC3DC957037D5E97FE28E784A2F98B3767F41CD
-6C5D59E708F123892A76C60EAB7EA01FEE0CBD94A78ABFBA9A34D0FEA1117400
-85FDDF49D3313E227746DE830E6D090D17073AC9D62BD413D8E8083658152108
-652C317C168DEAAB3CA7F0E20A50BF81B4BB1D32B7A26FD1D6ABF8907AFD01B4
-63272EB0915973C52515C87B55390252A98957C41751D016F2BBCB1E8577E6A9
-65600DBB29116D97A4DC9ECE699DCC7CAF542B507DDD77014C2926BAA2BC1631
-BA1E8FA5B5B98022786D9638A76360FFD99E9044C1F5B0655747B0DDAAD865BD
-A0E537302FA691935B8767EDB785573B859622143BED2717AB03262A0CBA7E5A
-F695D44640348F5C7CA372A9C7C4FCF369309FC3F27D7601646F7BE779596563
-D34BDE93140A1EC6F2BCC20D8EA1210CCF194D253C3234BF4CBB58256AAA4DD8
-3C8174AB99A31D54AAB23F63A8B80B973C5FB15770EC42B469B0BE7BC493C294
-16527A0F5D5C3BA85983E84F59D9F86F1642548A4ED5790BA17FDAAA2C8658D4
-771BAFEA3869A86E4777825D745663392642D27A1661C65202889D65D15D0A50
-B6C4F06A98D4302F694C03749274C25D91C9FE728405B46CB5289B854A7E8682
-A7A6E426D4DE26D5775808E650DA607A1171808788DED17A1715D7440D6A22CF
-01173F11A4954AA49209DE91D48049F3194DF0C25DEA3DB243B777885FF45FDB
-6ECDD1074B0052010F734F7DBC2F79AD8A3E267FAE9D97C3E43F0CED01AB9E5D
-93DAFCCCB326DD03C7291AD83CDFF069C79A939196AFFBC6930B0B5641402DAE
-4CDE4ABF5421FDFF8AC14C4421D3F253567FDBF9BEC201546C32C08CF24A0B5D
-7150DEE9208FD0E20F30DC460F3A3056018CBC2B3BDEBF3C971654E807E337E4
-7FDDF0F773DE0FCEAE36B0E0B859E1F2C5998994E9552D8E914675F5A00A855E
-8B17167F7073133BE20413033D04420649CD805B13785265A5EB42B76AEF246A
-3FC66787060EA27C1DA79B16DCCE11A67B92758ADB7496B1C9426D4837BAC8C8
-1110018C1FE3E882C6DDC059CAA29A2A451E202C0877C47FA7BB582977E8E7B7
-3944561FB68717A32BDA2C12B6E0E0613F5DF1B99908AFB05963CA5F48F44B37
-528903BAAD3BB7B44DC1DF804B48B814FAB4ED9C8B67B90753FA0544CB7151EA
-F414F439E45447B7E00EA0DDD9716CB18E6F4B1B876B46F4AE3FEF38D22125B1
-8030F8000A0869EC20DCEFF8FFDB0E7C39155E681D1CA1AE18770D60D3847B7B
-0C0232FE0EEDF8422A71AADC8429207AEFD8F9D68D8A8A81CA4058524A85EBEC
-627DCE848671DB10952F97CDA499AE32DA838CC4B2042ABFD9C82E1C44FD9B4D
-D778E3DE1EF0ACCFF0E98667F99BBE81A3A8EA8FE12A209F6BEE36AF7FE0430A
-7A05F781AA6015A9388AF7A7BC050402BF4B911DB192F6F50A20C488E297B9FF
-D62C7BA568DF06DC56379E97AD83A2162E4C088363E3FA1903E5BD6938BD3D0C
-74D6561B236D1F78786C20F4A5C0330B2FD2F175D75D4FAAB8DB701B92702C89
-44524FAE730767800C1B71DD4C7B217F3C12E54728B6CDC35DEAA6DC6827BCB1
-22AEB3B04198CC5DB863BC3552287EEBB8FDA1EB19E2B14EBE23790CFF34ABD2
-7479919A4816B83FC399B36E5C65930593CC4D07FADA850A6F9BAC3743DB32A3
-3FD7932EEE76FCBFA0F05BF141902025B9D92D7E6E829A7DF8AAFF4AC4E67C6C
-5E1E987438314F8C9900516B4AC073E5EA5E6DA4A6AB40A30517CCEEC1BAE4B4
-D2E574D2487C992980B9BEC05FAB0A7E5533CF9AC951E2BBF21810241A49C709
-D66D7066416185CC2404224DBBCDC121D2A77B833167A4FF40C2E296CEEAE79B
-C3D7842578CCB70330152C215F116FADAF32C037B418D269D591035D246C3A28
-1D94DFBAE0FCC2E4F3DD684847727DD8507C56D7DD1180455C231D0F22A83558
-C0035B7EA552FEFD1AA9FD1DC0BA8716E64CD5BC86F84276FA9D302BB8329CAC
-D7B36D5D28BC84B104E2E7C620566144104B113E6EABC02F4B499A919A0EB2C9
-254750F791E9D288981848A17BB406397750E1E063533909EED5F9A145E573AD
-8824A137907F7C4C931CD7F974BC226B848416CAC06C172D6F4921778AB362D9
-CEA68F1C66AC5795F4AE11FF52FFE1354B152C682B9DCEDBEE5937802430CA4B
-9D8DB908560440506E8273319195E0FB9BBC7676A10C8A2FE8E00E02F5533658
-40987BD7D583BBC165118939024D457D461A019D4DB4F98BF3A6FF801BD96D91
-3C83BF834E119C012686B9953AD97AE25BE1C7A7E741EB26D3D93E55B5CD7B78
-ACDEAC1FA02F5BC4CF7DA4C3675E695F77E64008F94AC2FA6A928555C33AE481
-D94575652F509FD01FFFC15041AE754BDE5A33F7C5FABDF5669944EAEB8A884D
-BE562D38199C73C4289E185D1793D70E2B5BD210147722F9A76C92C252728192
-E0932953D98F88E25ED673B03C498396179B45B0B7B34E77C7802540C2D32848
-F30961C6A297D69941E50190C896F459052478D24126D19EAC1F8A1531E66970
-C87560D13B94294FEB10FABE7A60CF96B3E866F56E0A30D6BDDDEC913178217F
-EDA129B098F4864EEE7745B85F39484775E852111D06F09221C42B65D1344148
-B75E80F2C73C52382E09C1869645C61F94FBF0F75279FB1874C7B6725612EDF9
-860E2D43416FE779337F3B057177FC1927AC7C08E664BB078D7A88754E8AEEC7
-B7050A42A1FB41E9109B0D0D853AEE0C8CC858C2322F5B84D48A6D706EA58DA3
-B559F5FA891834E7FCB636EC92C8D4AD667935B766637D4DF180A036E124C3E4
-37BE953E6A69AB663A24E8040D4E7955F81653993115ADD6EAE5EF3E99FBC1F6
-026B3861B9D14210BEE715B4B740E5228AB9AECBC553F7EFAA12A6B05E2F8076
-237CA834A9517EF999A1BACB14AB7B0D76DA0424FA37239F3DE56AC699F5DECB
-584E177ED1B778AC58D1FAE0ADF84F6ED1DAF4BCCC47FED08E972120C04146BB
-525AB915F7DE3BFC728D31D00C83C1703F0487C9B2943C512D1C366FDFCA03FC
-47FE882178C1DF18158090A62C5E7617FC34120326EAB952754559F0D8B69703
-460509F10D9FDAF4E29F4427CBA489D7A98AA60428B22449777E399E3E78FEB6
-1464FFF0247279C31B48524C28A84549B120DA1B8798DACC2367B0932A0BFF75
-F2D3F44EFF1FFB5066E0037BDDDD2229BB2530ED4D01C2A466F7F1FE89928092
-EA674F63B4B4C4AD64331A99681E63EDB66CA5D62B5598DC226936EA8614C5E3
-603267E6FF17FC08F7920FA3D92C9DCC571C4B31C12B8A4497C54261C7F916F1
-F70CC389EB038CF41EACDFF47E02959EDB3D8F50980FBBAE2E20CF28B6B96ECE
-D1582505FB0C00E662B1D0A31D48BF609210D038C9F8F52064AAFC42D3F4BDC9
-AB1916B45687100E58E97D910431F50E0BB03C9E5577591CD09684FC818E62C5
-3490925DBA1883BBD8CF5749FB25072754DEADCBF8EF6AB4AD998A5A82A90EF1
-D89C8F1CFDD15E703C4EF8A75F716541156508DA2067462C3B3D1332831A6258
-EA1B487B2039FBAC9B1898FFCEF004EBD7B748BE8812FF092B4592F317852A5F
-D450ED65F9AB7084B26632C69640CF28D54CF20363A49CC061445A11FA981B24
-868FA71DEA8753D395494C570FE29CDAFC2522EA3712CF8B4E072518EEFC3D4C
-591A86F3D33AA5112C33E7B4C4396D8E1C205A9DA6C1D8982E2093874A553B1E
-20D8C824B0F9934C8FE700A3C433D66D936AFB1464F369171A015A594344A973
-39205C1A75DE8830AC151D6076B1325FEB2A54BA363191FF74E67764A997E14D
-29270E9F7009E86548DFC8CBD96B1D3455D84B2FDBF10174EB054B62FAF3B72C
-5FEA8049A05B27168B4EFF01DD370C17DE4376C2793ACC698EA19C15C2E9E976
-C2F6D151D9E96F9892FEBE99F8AA201AA4031AE6A5502FA06AF57044566C590A
-2FA7EFB9F9A208C78B3970EC9AC9383A07F78A6B8E322F3F482B136148B37CF3
-B8D76BDE754050D7D491B47A559BC6741224D97652956E889B02261D9F164C3C
-903DBB12FF2A0D1A5BF986DFDED798728D29B9B988894E59BEFFF4B33C46E2ED
-22578236EC46C85947CBFE32894FDFA44319A135D989DE1015A66B5E2C0F3267
-227B0D1976E93AE88F6B5DEF77F049225C7190CFB9B733905B4548403288061B
-0B3793F72BD759941BBA7DD59BFCBE05BA7C9B8B21BD813654D0A3F8345E629B
-05B9100CCE2A26C826186AF363D4257733EA1175FF820B35B6D3290FEED1ABE0
-AF29C45610EB4109A999F098930DA22B1651995D1011DA3BC3C06A23182D72CA
-2CDF3079A8AB8A957E6932B4443C4286BB7787D949A7E6630C609304968C5A4A
-E6B75AC96C23959EEB0CA2F1D7AB77392EB1F0DAA029DB24B061068A453B6B4E
-8710DA5E406CFBC130ED9C494352F35D92491BBFD7563E43DBCCA40A4E8EE90D
-695DA2D1CA76684A7AD5465B2AC8F98DB84F7470DD3BF5D690384D58AF278448
-64C28AC301C9A5376040654BFEB63D68EB030A0816DB38F253B92AD36D3408FE
-CACC49666D06416CCBF60F7625103A1C8B06F0444BA457264F17834E3C631AE9
-3CD16C38A2764E21E5C06469DC9941DE01B2B69C249A21058DA41C0F712D6EB4
-771D564D395DB75E59B6B6FCAD823AA9292D16577986497570D3BF0027804326
-9BD710BA73326DEA241D8FEA02C77CFAFFB2E1B22C89BD7BBF762206BB7B63B0
-FFD8BB27727A4A563E5EF3C76DD57181408AD5D8D4CE428090A0BB7AB574F201
-591C049E4092C83725CB53433BC98592D5C401D05F01FBE781553AD2DA858885
-D905DE7C0A65E813175A4EB760BB3E01D73EAEA2F1AA91C203E695CFF8049550
-D8DE626DD2C256D519DC5324B99B354037A9978E3FF637F76F5E15595E09B6C5
-1D9C7D0EE94425F89BBC6C57A65DCE445DC2F49FA8C7636CCAD804F0B26126D1
-FD549870235BF4E5C7CA986F104C7C0E33BB7536E5A9FB8C986E89C6B25DA205
-A91D76249898F66AA72B8DBD39F60AD50FFC49AC88D7EA03FB0CB9E2BD13A3D8
-CE65E7FD6C6A88571FCFBBC727D54B69BE166B5739068D087E9BF832FB2D221D
-9716ACA9FE6AFC513ADF36F652265E0D202B32E1012851650EE6B39A5835EF65
-524CA2AE86DEAB22D43AB33B93512161F8C0C968382712788690EAB1356CE14A
-B10B24123BEE065424955021DBFC0243572607A62DC41ECB1E0E2108D4B2B805
-027E50BBB534B19193151BF0E4D5B3CDE4EF593F2FF4B2BE846B9BB8B2548ED5
-A647651FA1A93EBA678CF5A3069FC36C073423ABC716062D460DEA2ED5C5EDF2
-93BAF334EB970F9A5A2C069C273F332B5348BF8C52BFF8E5E6B395258A3FDF46
-90243DC26F19827D027445E99993D46D1D80B83991F9E49A36BE735B53AC696E
-E29A951AC9FB290D97382B593F2634FDF45429CF9557A23F957056D601E8DCCB
-828567132B96D5FD8CF721475AB86494CD3AAD998C2E17320F279577773E9501
-5FB03D38EE5D937B7BC9D3E8E089E47A1900717CADE0985E0D919C550AADE846
-125270BC3B1E72AE6B09333DDFB1644F3735FEE4748ADBBD6F33560FE348253D
-A1A2EA0406867C967E96D419E8A5E29B4AD6EE5415FFA396853E991AF6004448
-0A8AF0FAC0A09B5CE25CDB7C7D90450321527AF04343534302461E4E498FA76E
-66B801141737177FDA17A926DD22312AF9608A77D941FFC26CAF7E9C6736B62C
-B4F99589A95967E68680AEEAA8C41D44DE0C3ECCAB62188B325969B8E0A11820
-A6811E8050E222E7AF8B9134C3AA641A8C10667E0363675CA0702B346DFF151D
-1AB8DFD54C75530E9F215A40B481BA803A7BC22513C6F62B395C33A72F529C1F
-2C43692FF5E245856762501C8CA3F4597D1F620A8B4A48190C68A6FD3BD0B79E
-45B39DAA0A83404C59D7F2CEA76D8C39B3F9DA544C603AF27D2E0698B0D59B22
-52723B51A4C7240957A5F9BA3E07E79F8E93867EF1537C9E4CF857CC8A6E0896
-EA633D20C16EC0905AA74FB443F301D6C2FF909C363F99DD6A3BEC57B12859D9
-904D3D37F9B84215698108F4B3D6CB2B1E6DF5DEE5B166879342CA642D5F919C
-6BE08B6637817155564C3D7ABD29EEE1EBDED5571C31A8C75FBFFB52A616A773
-525A92B7E34DF5CF7328F6EABE0B9AA4282C8001FC1F5787BCE8D99544EA4790
-06C13E5D3C05802AD29662968CA835D043837DB65BBFAD21D4703D45274AAF55
-B04FDB4231E9D4D7F5EB4D14ED75850BFBFF2290750F3FD72284830780414A75
-E8553105F9C804B4BB2C5035CD7A1AAC5D2924D1B6C3FA7E717F4BCC00E784AC
-9FA498D9C814B6318AE10D15B6147495C1AB8FDDB12A38C93B3E20AC16C0756C
-2C0955D4C6B82C9DA7121AEB2D9DEC413E97E106CA1742146B72501AEFCF3D8D
-567B5B49359049096DD81065722BEAB7050BFE32F5DD8F141FF7D01630C673E4
-325EC6FF2D541F20FCCBC41FF5D311589C25F39F521C722F0B0A8F785FBE4818
-C984EB22D5293B799344DDDAF4A0414ABD71E4C66E5436999B14E925E7EEF81B
-3FC0903E36F7D902A4135A45A199CCF6B24E769A3CDE0544A914296C3D15BA76
-FA0EFFB40F7FA7E8A789462BE9603E85B01FCDC8A46C735D6937D407B5CEE5BC
-9BED3E4C4798FABA68BBA6663848C5432B5DC3CCAD6252040E245F9E02F30D4E
-0C7707093A1B654F9C80DC870773DCDFF7B7603614A0D00493EA8BFDBF5C6FDC
-9C9F4611E55F7E614312AD00F41837D4BAE3A6B966919437A60DA5D6A541D1E3
-2C528CE4297D3379181ADBCA7B6CA86155156D633DAB4EB5FE2653D95262E2DC
-AEF216304F72D1DAA0DBF303075ED87AA036E2D54F5574197793215322055D87
-73EB1543AC86CFFF249C495A0ACEAED06D9A61BD432D9FC8E45B27BAF9E9780D
-B37F1C0CF3D44EE1E5587DF39C18DE2A1C870278809F31C6DE14711B060818C7
-43A5949D8352932E9FCB4232372E55AF7CB5F283D8AAFF8F5D352577FA8FD9E8
-E337E4C6C2888DCE39CB6E6BC497EA04378CEE24D0E2ED2177602DC8D8E18260
-71C2FD1DDDDCBD1737E2E9FC117AF78BBC6C2C3A1BBD7B7F41AB71874D5B3FBB
-17EC95E055E0ECBF74EA6D9EFC259C7727996C90672AF33F8B4A343647401EDF
-70E7A4D43C136CD3E8AD2618810BCB00D0DDC484F9B7A5DD0473FD64F0E0DBE7
-3798E953E737EC83A330FBFD500A5A930B9117F1C720D2CD18FD4B2F6776724E
-EB7E137E6C8BBEBB70B8789BE8CCD9413F4098F08D0F2C7131C24962F717E97A
-96C507E726AC79EECBBB53BC3DE1DDE64425BE968233BEADF8124C09673371C0
-36C2B469F8D8E266531B13B82A18E7CBCEE346B40BEBAD371CBA5D36F8EDEF2C
-DB943BF490A6D8082922499B3CBC398853854FDAEE8DA4FAF204ECB931136234
-BB3CA445228F005C81B7040605337AAE3DFB3D0E36BE183E31FF848AA588DFA0
-7375E839956CAEDD61ACC25644682D9A36B780733490DC944614AAC380F8F03C
-5E595C5641E32FDE24FCD018E182837323A57AF0DD8E1C7A035CD704A5DF14C4
-0D8C9D7CF25029A6B55DCA871B88F4A59F28418C96F8F07500D331ADE797F880
-2E4D44FDB4B11195C9DCDFA24CF169FA95356B98D6263A8D15D82C2F88120744
-DFDB06F521D6113DCB863F779E7AFB31C9EE8CC55C3CC6A5B9862990EE30A78C
-C0FF46553998EFFF66F1E27BF8312CE63B8B0487EDF508C99D5F54586A6A88FB
-57AF348E3221C910DECCDBFC2005DC0B0CDAB3AF3DC7DF9391D50F219EE4C27B
-0A312F4AB26AFB6A3C6A67F5697EE2880DCBCD6E27CC92BD481452D205CC7155
-4DA8EDD05C91B096C3F8A3C7EF174A2A7D8CC2495D5FD5B7DF19256EB4A55548
-ACF2AF826B8FFF00CB38FE3B6FFB59C3E5C868A6A996E6D8B8A5B9B511B99810
-83615F55A7C5577FD55367D536BE414B5B3334221D0AD4250590547BCF01FC09
-1B491FF84C3B2C4A8781AE24D9B5EA4D10F6F4B6F6BA25FC48F480601B8D783E
-D1A820D978498ABE73FF98BC5D4A45A78672A997D9F63D97C6B87CD0E8E97F32
-A9478F43FA9D80AB17D5A0B5DA855076219B874084FD76037FC5EF73056C09EE
-FACD5CD1C28A95581F4F52C7837DE54009EBE541514F5BE2D9F334C26F25BCAA
-8C121C649034E00C962A4431640E897DE29C136CE85C0B409ABF38754BF77F48
-9100CDAFDF1BC6F391DF18AD5CD759056A68E9DF569EFA2F3C6EFEF4C83D6506
-5302153C57EC7B6CA17AD0831F0703F8D043A4B26BFEB59242020E29F88EB1BE
-7D90042D3BEF94BFCD6B3BD1A9F9A5A71FB24C3B8CE48182B40443811FAD8B11
-AF7D7F23CA94CA69B9FDDD267B57370095062384E51C606634BE9200A733F631
-740C64B1BD6004B169EE5EC4B2F4F61CF0C6D755B489E96342DE840218CD610D
-C539415D23B834EC5522068F34635B8504C08877916B90CC8F012959E9048500
-71060825C23416DD9A5F9362FBBA9D17419872092296424CB694A60D3586E1C4
-A695D880F51D5963F1B5B1F372E2CFE0B1013BD90FDD31EC1EC79010E9371E55
-69917283DD3AFC128E5BC1F973589975290B51C054C2B8B9BCBCAF73842CADB7
-9BA75E171B7E523E0DC4F3168415057EF3005B5E6635D70F935D2A923FBBF2C8
-F498B05478CDE2FE1FEC4956822F8F46488D1B0D87E211F345066501F975A264
-5720B66A158E262DABA754F8A4911F68485917AACE531B63EC3366128A81A8D7
-96F8A38F9381B537AEE62A7CCE3E774705C706A8387582B34E71EC690B0B1ABD
-082B8A776FD27DE161A37999539A7874C9DAD54BAF0DA2C4415F07FA6EFBD987
-578FA2F1611D60C9E51B4C3589C85EFAD5AF06DD2A5A65E32B340D41B201308C
-5E0BD23C854008135398365381747497D15DC7CE5FFAD2C3B38203F7A4743984
-96314336CC4CC4BCA070295B3CC0883B0217E01FEF746F33C77EBE589162A6B5
-8826CF158E7681124DAD20B92D4166DA46100FB53A8FD9FA7EA65BA56D282D23
-9B3781BE3C05EFC3CFB4ED2A28CC802F4AC8A4D0284FDACF75105D0A55A6857F
-767BEA5AD1F833B59D146774AADCC101C7C8855C6817D2AE7883B41418C3A8DC
-ED39537E4AA6A2A1AD574C4E13A9428075CA17FCDC9F1BAA753EA6EC4FDFF0A0
-7C742E4C3D07A24EED2B0FF46CDB875E79FED9F13EB898E63B9A49FBC6191DB6
-B242E36D1BD611404513FC058DA9B5BB644F48AFABD788EC0924D66FEA2A38BF
-A0010B4027C6FAD9FA0C643368557E82B9D850479CE651911C3F9607E355800F
-2FD921F5E4E4904A76145485848A17154B0A609035705D6876D2B7B7729714AE
-007A79545B39502B82DF0B391F9E89A566D99E8B2A331C9F6B5A60D401AD240D
-1AF72344DCF5A52E7640A36AA16736738A98E3C04D6B9B788DAA4B363D6BA39D
-11517B9F0362C60D7F44FB29EAF8C8C658ED66C60852AD6EE6ACBC262E2381F2
-6EBFD1E1258881E79E6014F5D526D9C676522D590CD3CBB50D457C6BDB72808F
-CF70B900B734042520F82336EEBB184457FC33E400748A617187D527A68FED76
-140E83B4650F0C6B044E201E535ABC637432CD36D108ED6E68E4CD3085B201BD
-D3D13E39228F39481654E5373543E24E689E81C2451D6FD78437C12C036AE1E8
-203FCD393B650A0EFA025074A921FFA6CE1668C761E74B1A42D1E8849404706C
-4D6B815193E47A7D6CB4B4AE469CA869B1D705AA23C9C368805DFEC8EA88FFF8
-1E6EA916369FEE9EDEBE97F7134D0A9730CCA89BEE27E262709D0EB56EA86867
-3560CCB75B1DE42DB59CB612298EBCA1B2F0F77C697AE08B9D2019BF835B3CAA
-714D5DD72179F90D53E9DF099F53BE9A326002D73FEF4358E065F43C51185F79
-AA0966D318DF5218E869689A166ECAD06746D3ADE72EDA65135E705CECF2C4DB
-04577C749A721518F65FD05573737FFBC3C1504CDD1C69B38B35866032EA1774
-011EF686959D33C37A60D173D907F28C08EF367137E146F0AC8EEB8315444263
-DD40774A0EB98FBBBE77A8270EB71514D6C2B7F5020938E02C06CC742D3F797E
-7D1BF310AB9F6124FF3FC1E2E5B15AAA48168C406D6B8F6E67CD3EB98766DEB0
-44B17FCDAFD247AF8243081010D3AE3C4C003E3A114A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csti10
-%!FontType1-1.0: csti10 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 31328 31604
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csti10) readonly def
-/FamilyName (csti10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csti10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 46 /period put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-35 -250 1125 857] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A13ACF068469E92BC111E5E809
-0E489E43C83DC29BDB053C4AF9440B668638D0EB64D2976E6F7D6472CE149020
-5249A42D7DBCA06030F48694F7CA0B38978998765D7E7BE1D365613011E79D8E
-DEB631764D47D1F9663A46A0702AE1CE700ABAC55A77DC4472405C469FCE7E7C
-36DAB4AE21FA18B149BB410DBFAC2B75994B10460A6C7E751278CCB5FA8E5B24
-5E892520BA083342A1002931BB5ABE2EFF28D930E0D7930AA5851A1AFFFFBDF6
-FF6D48342144760BA1E175D10A97EE1B90A38AF420466B14ABC5E5C82C949C95
-05665E2C47A9664D867B8B21F8972097D0CE8331D68CFA625C8889AEBF7EFD5F
-1443A9611CC142ECDB943B3C846032619AAB3A2EA3A4F8D4E016867BA36A4B3F
-5794DAC8B0B20FCAC48D701F8A66A0CC4B9B69C515F80A4DE93C7E14407AE197
-482425982208919BABDF9409FAA23D562486686557713769FDDB610C53EF1FEB
-98ED5C66B433459F187C46FFFCF9EAF4279CEE6771299B3F50B2A391427AE643
-5F4AF3D542ABB4F4894C8C4CA5FAC4246D797D939BE93652D0E7D7FD7B60DC4D
-C6E09254712DD95FD5CEB56885B95E0CF9478BD8ED8BB02566707CC3706ED88A
-A0536627AFD4D15DCA1BBAD2B2B5E16E0AC3117C0C60CC4243AE399D6573AD12
-881EFF746786E30261BC2DBE96DD8584F95AAB1A4DA0F48EF1420AD9E916172C
-6715E356C23C695DD51BE9967C8A49AC4A212733D71A0D5E2D0C6D85C5725607
-F441E959B8871102FB3927DFB2D1CBAD1DED737B6553A15CDF7D34FB7E32F6BB
-063962E928F1E7EA425CB2E597FE22DE83521F5FB6252BA3AEEEC6375BF1F8E8
-CF83439E3E8EB67B381CBBE03E7713075CE9B88F6F08974CCA3615F3A79225FB
-98D7D341AD62184152F44962DFA18FD3F7D7D2FB9DD5B2187AA4D7651F0105FF
-FB614F7BF7BFD58253C416C80431717FD3964BE33A3523CCA82EBDAD66348097
-47B760CAB3A6184E959536A730FE6CB0657A937909E1EBB8E8441B0CB40DEAAD
-95EDF48E202EF1A884004754EE06E217859097EF64CEDAD29FF8DD24B3DBAAFC
-5773018FA560022291F48ABFACF8F756D4BECA7245F95B37A2370668EB7DA739
-343123380AADC1DCEA7B5A49AD18503DFA577358BFD7AD66A2DE7DAE898315CE
-E464A80EE93D10723484FF9A156EF31A4368603D6B8BFA735F0F77093797A2C6
-206F7FA5C079C87B511F788DE52D1EA101FD5B8FB84A2E94782BCA6356A395ED
-769E5426308DEA7E69B397DEA706F9E9EBCBCB1D05D8C364C94281A9EEA64E71
-5D1C06273B79FBD6EE43BDA3E85B31208B8544D84AC03D3658A040A56105FCEF
-CA2AA8B746118344A1D93A926D421DF5B9376FB7F5422C7025D4DB0E26037249
-81C4D09F4E9931B5A2936051F9F7213D28E9D5DDC5A638B0D923FB3981E76B30
-0998B072127B47E189F5050B6533462AA4AD6DCAD8FF255828D847179012ED4A
-B503E502D371740C2E908AD4ECC6A831A3043B0217E29DBF0F87E5797C47A8ED
-66B13B91FE14A74674556FFBBC7599B02E5AA76A9295A705DEEBB649CF86FD21
-C7AE15B8784A1C9CE62BF09B19A595070994F5C7D1ED6989F64774476894E728
-CD45258A39664EE77A7BFBAEB5DCCDD6FF58AF63786AF5871BAD9B84527FEC7E
-CCB379D876402126484B741F0C568233AD9CA9246FD01BC9D0AEFA19FDF0EB89
-0BA642C6DAF52F4A12B5E5C97D1E8D7D150D16E91DB26DD2D6F9B7795546F05A
-9C55BCED0D69489184DA5EBF1B25627D5AD13AA85E29DF9C4F18C81BB562BF7A
-62C652EDDDD46698F1A5A4675F535F673E91BEDB7E9099E40E6E9E2DD24C1435
-6FC591417524C9D539490DAC5A00BD7BAFD86C664DBB7A34D32021CF5BF87894
-4A2E17A64C4F7F749B5DA2E891222E3E2526905301E47D0F6F2A7FDA2BA7D5DD
-754666413EA904DEC7522E873663AAB3BF305A3B3527FCA18031C2CC4B4DBE77
-A00C4D404E65C08BFB059244D0950A8DB4C508386F0F142897A191D1B03C6724
-95A25CBBE6B222307D95BE7A2F3EBEDBABE11833249FDAB48BE0EAB0A437CF49
-C7DC7356751770FAD9DB984BD5381781D4AE8311822A1AB3ED55CCEF3BFF4B57
-752D72E9F5B1676B22646E7FA913FD10E8AAAAB5D744464FFD06FB2A2C95BE01
-F9C59DB30A34BC9F7AEF84714F45B1A3781CD02B3795CB776739CD6BE49FE936
-6E8106A7AF90C684373F7DD88A7D552102D10E01B14813AE3E3F1F48023710B7
-F2D124ACF55014C8DACC03D56AB77687D391A69A7A67406E783FCF55AC828B71
-63E4F1CD119ABAC5FC938B0B8DD9D4E1C60867C483C077D29CB34B4E02888B85
-3BBDA01C7B6F2E05320731D8CADA91DAE369A89C7CAA128277B1BEB9A00EBC1F
-093125747363290CFD3D8D1E86ED6861B82DF2B71C37A29EACC9EFFA3439E4BC
-CFDCCD4BA4600F8BB4B90A5830AE598684840CFC5A5E3FA6F0CF8CE2D1905EFE
-163F81F441B521C6CC449F7E6DBF9E569590885DD01184FA776FC038CEAC6ECE
-18CE1E6554E9FDB967BA1A71B66A9E542684F73979A56D2718A9570A72AA3569
-8F42652F2794A6851BD33B0142612BE728C5C01D011F3D3D8D831282A2E02DDB
-2D724217BAEC4151ED2B99D5A0C7B8E9C6F4DB69ACDDB3192A6DC94767C16EA8
-2A224B08F00A2961409025F383D6CCF1F97B8152AD2D7C259D873A2DEEE4E024
-C21DDF2EF5DED14EFE94DC4BFE481995EB67F2E4ABBD74BB95EADC33A8672DC9
-67CDE20477F22D2CE160615114D7C549F037BED8438C621F745D34F73C52C626
-DD57A11951D0FDFEA9C389DD3ED6E4F1E0D57574D85D81A4D949BD4B8AB64089
-7B8596B43F41E911779E32BF55E7B0857497C1A094515CECCDFED5663820A5B0
-360E8A07CB60CA63DA0FC67DAEA24769E18547D8BDE50A205E936D635D1E8489
-153CB2C1B836322B9BE3C611D76B5C95C42DE6972F165C8E6F1D3288334BA696
-E674F3B19FA72CA0275E092D39D7034DC509D5AA40AB3645C556F2736B212C0A
-62F1E73454A3B3373A6968CE0D316A494F1F73B16CF75327EC45996F7EFD6465
-49E42F012E95A4AD1EE7A110BD398A78A2C5E395E2DDF37CD54CA94A77EB61C1
-9917A40CCD6EE62A916F4DC79A0F8DA20899EE0B1035C9B4C2B966A0C4A0F409
-77B0369E4A3B4CF38A8674AF1496FE2126CFC7E8C6DA1A36397F0554AB0276CD
-068C2DA3C42A7EE3077DC9264EABB616397BDCA53D3758885B35F5585F5C07A5
-DE6CBB7DADAB7B87DD92770226F568BB2953DFB53011C921CB16B162A80C3DC5
-BA865E5AF2B1BD218847C5F8BEE994CED23414009ED155DB3B594142836134CC
-F43A682107C6B1528706CBD124E0A8F446F278C2441374DCC36F37C16D4E3DB0
-1956807EB1FBF57677195B5777B5DBF61323C2BE3D7178C59EEB1B4615D15EC0
-758FCF44FF0A8B82A4C021AE6A71C2502D7B27AE3846C694A048D1CF0F0BE789
-BEA0BDEDB9A7A991FD239F61754068732610CF1358C9596D3FBE1A3A1DCFA1C2
-6CD2E4D3447CCDCB577228998E034FDE94A696A2C0AFE9EFAEB6D8F9EA8A2979
-D0FF87F8A2743E451197B9CF0D27505F6E963D201B346215BA945CDD86E8C66F
-16FEC3DD0D705A9EF958CE119D30DEF9D8FB4D91E229009B5F1C51AF6F19CD61
-B5611559A1B809E3289FF3A531DC8933D1D1BBE9AB6497472224D20B2E75CA41
-3927BB4C967B164D06F451B08B77E7D25DFC852D496D660CB969ECA1A52CD624
-F2C33BDB300632866303E9A561D8720B6CAF9435ED29A3DA1CA2D4D17811ED65
-296A8CCC27496DC9D58B11E5916F985E4089AD593C364BB9FF07251CCEA90A10
-68A3CAEBF82173952C53BA4AE1C60CCD6C569600A3B08AE4CF9275A6A907E2BA
-E4D090F833E41E47A28C1A5AF2D9D93EF9065D6B34D587334B7293EA22B25028
-B84227000100B8FD881E1BCB574918E4FD9C61FB7D5810A2191E62667207603E
-A7AC030301FC3452298307D00624090FDFB5ED8C04D88D9746D6DE2A2A5EC5F8
-569228BD686E8CD8660D40A17D0F49CC8803A28DBEFC63859AE2A1B477087CA8
-2BFF0B288ED86597C27A4EB540C380BC6E437DBEF233450FB80E1D486B30E32B
-5BD899A54D378E503B1F0B1B51BFC208D362A2061714F9991AF5C11C934C539D
-6441A8CCAE24FEB0DC84D4E84A9640546255FF78A9E4719CC53EA9B7468E11C6
-E6EDC21E7958B23FF38DE56A8416ED5217B1481F9629EFB47B9AF0F1B4D48950
-5834D62A7715CB7B848FA22F6B23002E1FFFCBA6B0A9B1CD091926C4D8C8CD76
-1CE506B380E48EFDAFC6E976DFA4F26C864A93C8BDC381F42BBAEF3DC235FD1A
-347E130611593E338CB5F645A15531F931174D36421792B8B075712065B7BA88
-AA548CD3BDC099A2CA24C178F2CDA2F706A187CFE9D9C98B75C4F83EA4D5AB78
-6421ED5B7C3CE6F13F67E8081A38C4AE82941A26A44FA3B7CC43BCC2EF7C44FE
-09148B3CA8EDBF50AA9F13404051E3DF923FA74953A2889C6FA94397F00829AA
-6DBFEFDE4AC6B41E77699555D80F62A2FBC5E9667A255F1A80951C78D0463EC8
-C8ED3372EADAF407559F031F9FA54D00EE86833F20D6B92AB054F3BD1711A8E5
-F2865E30DB320FF34F343FF079B9DC1BF2087B168548D9D74E5462CFF5CC865C
-4ABDCE765AE32EF11C12EE815BCA8AAB0ADA7F8321A4D512BC8FACE53FA5DC61
-B02EF24FFAFEA7F0EAFA57CE839371DA016FCA90B708ED641B5560BC88BB5F09
-59D7E25B155AEC3D78A26C332D36B70B4676F3695AD0BC6A505C908AA703CDFD
-C576C9B3E403F89AE4A2923FABC21F337CA91011E4C15064C92937E4FE0855E9
-47D14F88FDEF2DB4E176DDC22402C63EAE882CCD929132529DBB43810E0C5C13
-B64828A9BE2E4B7970066C592ECCE5D5AD7F26B18E05D926A0754471B49315AF
-641DCC33181395A1F7C3AFC1B0A2423A3458904B239F9DF3B219D919E3264567
-E98C3A05443BBEBEFA4CEC5BD3051A8C824A59EC51D908F34D07DEBAADF03F96
-5002DA513DC29DC2C0E299C8FD1E31FFC4F4951884DD1E387F65A28415B94507
-6F5074D9F7C11EA02B203CF3AB9FE13C99B80E9014F9F16511773B2B0CDDE337
-69B1A1F4F3BA6188FD560D8A58D7B91F0C8071839E4B8ED466874F7E5155E2EF
-2C6BBCF793DCFC02F9438A577DE76881DC450A4A1E85304E4B47AE6BADF1CC0C
-1D670E19A74F251BEEC734100F8E54E90CDEB140DAB7CE12A983EAF01AC382FB
-B9E566A19C818C19563CDE05BE6FBDDCD0EEFBCDE6FE33F457524827B4D49106
-21E96604F74281044684E6912E693218DAB3D3EE0A30F0709C4DAD3973823CD2
-3FD3428B5C09FD450812A579F87F8611D1D0DC308769D7B5001C96F2342D007A
-2AD9E469439055F7C2CE8B3C0212E5004D95B2038010C896BDC082AD919980A7
-1D8046CAB6A946130E200DA6A0FC4C36D0CA97F81F50C15E2C32E64BFB0CD738
-547DA26ED088CD26260B3A94BE9603033BAD08058E4BC56690DF90D5832FAEB5
-9C097460A33E3937E5B9CF5EB3C73AA52D56A505613816C2F704F0C7EAB91D42
-D4F8BA4A50161A9882AAF71CFD49091E255960BF77B444B6A074727F0A4D3678
-C35FEC92F53EDB4159603BBBFCA4212F307FC5D9D2553450E5876C36A1E39F4D
-DF0F94A4E829F4FCE02168AD02CF7C20FFFB570460B0EE2E9667C41641D040FA
-554D567019BD0BD93E9758B8B851DA4BD6B8C7901FBE14C1ED8763C0983285A6
-A2EA93E6583726AFBDBB137250B5C454F3C4033DDE41BCEE59E6B094343B45B3
-BAFE1C6C60C75FCC12F5F684DFC140B423A65D4811E7992CCC18165780775637
-735D2A680E7155F651962E3F8B91FFD24D8EAA7A3785490231B85A2DE3CB42F8
-0FF20191C487781D4BBEC33B392B5EB621C29453E5A6871D59430B8E108F028E
-3527ECD8EEAB5A09B1EE5DAE318A85D774623642904EDFD28DBAA84532397FE8
-8276F93262C79191A0021A3E558965F97518A2CE3BB5F382A5812EB8DB836612
-BE692DF48F19BBF8C750B981C98CBE21C91C791B44BD74EAB09C688D39253317
-BFC40A5F19DE0EFEE938FAB0208742DF9C0D9B6D43A158ED73AB2404E5D3984B
-4B3F4B4669920FC62403304F28B07456184080125A5F2AB416200FCFBAFA9D58
-9E98E71B813CFBE32466F9F88E79086D1A3A7FBEB4925C8D8559D8D3CFABC307
-39C03F2D5E6D317641CBC82424BD332D9CF9D7A5F157771BEBBD9EC164010FFC
-06C96E5628EF58B049D3EAC2709F4E0303BF57DF65E084FD277D74EBD4CED34F
-AD216E57297DC8D3753787B4A8C956C3FDFE40C60CB5994424DA48E498851F65
-2AFF7CB32F4D0067680F6890892A0829E2AAAD3BD0C4342AC52D5C5A4A4D4F0E
-7EFCF1A109CC043B206943A5C5744773536533161CE0D3A1658499C8C95076C6
-9EE31B24EED4173803A901D9FF7C3B415C44205451F9F5720E094C5253CFA24B
-6B7049963F8C18F4A8DC4956F6F34D9DB1318FCBB6D322079ECC7DBCA80723E9
-CCCC1328024E256121F20E6418DA4E815EF774B1F3CE398082960188277F1E00
-F18FE464E416718CB8957E575BC370AC23941D7D6FD308F0F40146FE7FCF0F1D
-627E5413B9CAC9D828656CC135B30BC2CF9773FC1A5C5DB9B2EBC5F6FDA37371
-959B381CA883DF7C1329620D7B7168809F3FB2B451DDB559C5B47A5EE70E5128
-88CC2FDB37CB23DD70C7CFA3985E5FEE49D10C24F0C3E54A666E8F16
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csbx10
-%!FontType1-1.0: csbx10 1.1/12-Nov-94
-% CSfonts -- pfb ver. Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25027 25304
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csbx10) readonly def
-/FamilyName (csbx10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 444 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 686 def
-end readonly def
-/FontName /csbx10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 66 /B put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 185 /scaron put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 236 /ecaron put
-dup 237 /iacute put
-dup 248 /rcaron put
-dup 249 /uring put
-dup 253 /yacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-60 -250 1164 908] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E729C1F3C653E51B9F09F139
-E332F81467DCD46C6B80A4E88E1FB2B35C9134E8C9E669DEEFA533F7F13511CF
-F16ED856C594BE960395D34E6F1FB840870E1390BD51DF0CB99AE59E98B369A9
-308EBD4D62411D723A06592B3F044EE52173E7B573E2FBC21F32D00ADCFD4905
-7907BAC782355B39ADF860CF2381EC0CC3136060C15C7F794F54FDF9445AE615
-FA03D051B337AB511F64C838302CBEB69E431B2B66B4CF0E61EB5ACCC8F55213
-E44FC7CB51E3ACC12F45BBEDC00C9A63A43839BDAD1C0186974C7539367FB600
-B9D9DE3DFCE060C626C826CCC9C6AF9B765C6D6487D5945B01FB21FD234A6D46
-FB48C4A049CA13C82BF001906C71B5E4C7D8317DEC3B2F4A0B8F28A9CA07F8CD
-FAEB3ED1ACDD5162F7D3491964E990EF808D40307E9FBDC0AB3B5BCAD56C895C
-C6666B4096AFADBC5B931D07B418009ED6BF9886982EF5689E1C67D980F16913
-28DCD11AF89476D84997CBC50E8E7942C3B7AB5C03A7DF37E3120834DAAF7EB6
-E1A625F38D0EFF2CE86A1AC4ACA3A3556D98D515AD265D35FCD8750E1F4E73E3
-A74900BDC6A9FA84C7A4A36214935A985CADB31B33706C0DDE055D4BBF888C0B
-38320A34A47CC395F479E84CBFB77BA6F9EB33F344B34D19ECD3466836255387
-772A0F959C9872EEBC9D69943B4CB8051FDB325D6277BBE0490A911DAE97C388
-6F9ABE08037B55845EAB04B303B6B76B4C3CABCA519101147E180A8D3CF88F01
-341CF48CAC41552A13A28513B88BB7322E9AEBAB1A3E14CC90D74A9E3AA0DF8B
-F3A5E867BD5324ACA963C4ABDEC64E0D04E7A4ABAD8BA0D11BE71BC655498838
-A442E796E115A5191B3204A7363FFDBF3675992925EBDD62DB735081E2882646
-E5BA327D733475DBE42C23E2C54CED537D6A86CE4F06810D4928B0D1C42A1AE2
-DE408273DDEB2CEB0C3E5CB9E9F04DFE24FDA4EDF37857AF78EC3FDA2FED6A9E
-DA127541626E0699B04F2B04E5FCE1121B95E2B604C3F2C490A464673A75469E
-D97178EE2F8C75AD01F9D96607C8D9F5A6EADBA98AC324E334AA64C9F820AD9B
-FE9B3D0ABF98888B24E4DFF463E9D085E56461FA3DADA8047CB1E108BA2572D8
-0E5884BB975578C52E49332CDF7EEBC69353B0D790874BCFF03C3A8908AEA636
-7B5053CB569DDA3F7253DEC9202FCE36093F1B2CA5530AC79C2AE5F3A6CEA285
-BB97A7F157392D8BD8D06AC01CE8C7FF0357BE63257273B24485A8C97999C7DD
-C683B50F16A39810ACA8C41E74E8B0EF20715A064CBC02FE63B7B6BA373DB1AE
-AA11486531B923883F76C6FBC44FC8A135610C3E756C7301F5B8127F621C92AA
-4FF0E94BDBA3E5969746AFC5671DF5AB2CFB5B30B3565C6A63D4E868B853ED1C
-C128A1DD4344F80D58683270038F1B785B9D7FBE4B706BED4FF46A2F338F2450
-19A8CC9B80214D4256E134CC37479D450969D91B8DF90A65034F1AA5CD4EB61A
-11D8A4E6025A33EEE51FD15D4F5366070A9E70E943F2E13B7AF103626D44FB9F
-A88E0E3D5AF2D2D7918929DA6C060782EDF32A3DFA5F439C61722F296D448E4F
-159D77AC6BF766B0F02A6373CD7DC284C3AE2B05CE9BFE01DD306776B6CDF2D2
-1EB967A0E6BD073A7ED2CD9C94B3D5F6EA847FB2E043D0C336F59892DD5D21D7
-6EA6063DF025BE7A035BDA670239FE756B5512B1C38E8895F44BD3CED19FA356
-502D30E5C6573453576EAA7A5990529FA4759D0AB0A5E11A29DBCC318D43D2DA
-A42E23530C5217CEF689A9F5F9BEF94BB571A211373625792DF8C8375A052DBF
-0A9A57849E519A274A4372E6F3FE520B4EA2CBF621866E2972D855E8DCD25203
-B77AF58B69FD812514445AA4108C877023C8ACF33FA82780699B0514C30C0E6A
-DFA4708BE39326F1013F1A641BB0C9DCDB9A4D08B6B5E49C4AE197248165E724
-2361E07FFFE848F85B88A3271FDE21A2463A60577FF3246937D7E0DD497FADA3
-14CBFCFFC983AFA0E14994B64105616178A943929DF377A6CA5BCCF476CECC5D
-EDCF184920651C8E9E3CDEBF074AA3608E393E5F07182A364ECF2F24FDAECB18
-79A4F935F3641519A4747BC74C4BC83C279A999A1166FB861B20380DB5248F45
-C5729DA630B692ACDC4701C583A2B7830A0532060167C491B438B6DA41E65670
-695BC8AE93496D50BB5AC7613F157B6DF5505C1366417922E9FFDE8CC0E84890
-A96D2A7AF5D831D100FBB8CFEC4B5DFEAEDA576C7DE0EB70C83FFFAB2EB09103
-E16C4E359B35E517BFA0A7E4EFC1FFE3248871F1318607C07F9264FCB62C2639
-681C070A92603E4363791289662C5D2EA7EA42A7D2B47751D3E580AC123700C1
-CFAD096C777B76D00CBFFCFA1B5561DBC1112DEEAC62625E5406923D556AEB3C
-2DBE1210815443586CB189AF53455B6C45561987B11E753957EE09E6510EAE36
-330165FA88D0A06554DA29BF5954D34B4AFEC80A0A57A363C2BDFD9C3E1DCE51
-27416F662F75756709561B8B22E68508639D53D6660BB722F391063BF632ED64
-5C9D392B7766AAF33DBE53354E52C8EA011F5AB5D679977C036EE89EE6F5346A
-1E635915EC8F22DE60EE9631BB008FE896F52386E5BCD6E726D9C5350620D332
-B75019714D198D77E4C35293803C4F44BC7ECD4A7E9452A74E2208802166DCE5
-4EB8C9516DFB830474735D9C404FC06C58D16EFC6D7DD147F92609EEA71F7F36
-21AC12730A38F61C14247E5437A38A97A438160AEA11B443D7CC13FAC5F10A7C
-708B5BC4CC0E42E545234CCB4C14EEB5FC6C3F98A14D2101E5F41B602CF741F2
-157951D8D28957B3201D434EC5FC261FCAF9B88D022A8E399F5BC6F8E5B78840
-D31AEF2D6599EFEFFC25EEAAB5AE600D087933755D79CD808E3CB1A79D73BE2D
-2D7DB651E88E8B58E70292EB0373617BF9AA83F94770F30699D99E43F2E8A51C
-E33F5BF34DAC690D2CBE68EFC2E524AA0FFEF6F903850E9B74B93B7519EA26B9
-98959975EEC5AF6F5F6326E5AE978AE05F12AC9E1056D32229864A132BA60E15
-D8C0018214CA7DDE7B0660DE4F479AB86880C8248B86AE750E08EAC7819C16F2
-43F1B54C501B5E5B4DEA537B68A14EB16B25F4BE90C3C03ED86AA19965464965
-AAEA20F7BBA14D2434B66A5891D5FA4B730E74BF4F5EAA042A9D629FA2EA3F16
-361EFC551CEAEB78E87E22BECF1F3A270119282BB261328D6C5588E7131D557B
-E1453EE2CB17FC207EF9373E5634FAED9E776697EAF61458C985BAAF17B0E7DA
-11F2F777B02783EA36484866F6DACC31463FE15EF2690EB3D13FB6B8E47B35D5
-99F3D181DB2DE0E42620488979EB371A09E658BDEB10FB4D0BD70FF805EC656D
-12D2F95CDBF4F5351D3EA13D1BE5B8C60D9278E6DC524FD5A822963069182B38
-669CA2D1266017C0B0CD435E9FD659A3EAACDF742A1BBB7001D718AB0221AB99
-A520128AABA48CEB6C44A98284EDC5B8BE726C2B3DA2CA90FADBE00EB622B205
-314DC24D59BB46BAB5913FBAD2A2A134851EA28BF97E765F3E2B710EB3288B47
-5366CE181DBB70EC23CD272F32DF1621F27A9AF024EF5E63B4BA7427353D214F
-9705C8A71941EE434B42C1D3574114BD11C17AD10729652FE796B739876D0A4F
-661008B05519037BE360C8663AF185B915BF2B32E634BC2E5EFC405D3DF5D1EE
-40B678C4C18E3E2AABC71FB0EBA0B8B45106CD181940B8C794C44FE37EC39DD2
-6A3F03B68D041B2458F2922A1EACDD40948EC71EFED3BD2B36FDEB58C0868E03
-96B3BD098A43DEA97A7171B6EE08BFE337381897D4C590324B63CA8D7E2B33FF
-EE483FBA6F691B65C1EF8B27A395637B25F3DA7D6E04F90BA7022A059B1C43A3
-ADA01703A52C36D7E8AFEB214FDA8645C1CFF95388DC6F829983241E66561765
-49A6252382663A0B36EB7D13A64C1A59AB09EBFD21D9455F58E13DF393F9F0A0
-0412AD04AAC760C019B440DC5DEDCB1C0D1BBB3CE5348A49F13171987BF913AA
-BD1BFA366E1AF56424CAFAC01953C7CD72F72508F5696FFF96EE52FCAFB86C9B
-2ED27C15C875CE12A2BA942C0A77F9ACB0EDE84BE0CD3777BB446DF11740E79F
-F2F09AC719832E8E36A72138FC2789CC8719DB6E25F4F49267B31D943A476BCF
-D861D6281F2FDA76A2BE327594586A3253F58FED2EBDC72C5DC5747BB513D3B5
-2F719CF1331C226D72EDC1EA537A8C6834EAE287706B4EFF26F5D2F5DEA9B47C
-F232ABC4E0A5EEB4A02F1D4D9AEF898FE48862F6FA20AF0ACF3D566F12524672
-C0F8CD2EB7D71C6D26692E43C510D4BC3197CC2421618E26870459577B081A8E
-D6BE426E16851382B4251749347709528EC9644A1411F0555EDAF863E0A3CC2E
-E9D725F42217B3E34483CB3614687D728D14171C2CEF551AE57D3083936D674B
-989BB7A4B346A2F75B8C2C144F01DFC370E5C9C54172FBD3E29B4F197D76114E
-4766089CAF39D9953D2FE44F5EAACB76321BBC0E82BA16DD5A7EB5EF630276A0
-588567B8630AED13E7F51E33BE02817597DFC1DA2D67DF90AF7BAC47B7485817
-63703971EB2A58CD36473409541FCB28DC36104334E5CB5615559680AB04AD71
-E71165879A28FBA0FB9AF26A28182B86F640F929E4AD98DB6E3053A9316DACC9
-4A09EB1E5008CC5407D8A6CF56E6D8652BBB6FE57BC9AF474DB3630313B4D27F
-E644C99EA068A36A5C6D618446B54C1D70C6C2ED54EA2E0F09726DFC19A7D55C
-EB10E188ADD427721C67262FCF6E8F89149669F16859B732743F66DFCA5F64E0
-6FDAFDDFD4286664AEB94753F8317F2CCEAB40108BE0EF2B3C3199AA91E5D165
-7C48E2A3B4226053ED2B91965E8937E2D5D0CED3BB4933F48E87A7CE8FC82147
-EFBE3B738BA79E9AB7A539FB9335A8174D491CA950E5319E94A3DFB0BF3B3006
-8681C73674A65A17A45A4B81ECB8B7AFA81891488632567FED16101F53E05A68
-B05AF6D08E308B543D1C92B13606CE97F20B53AEB73F7F1577059436560DAEF4
-E463E20C9864E4311E81CE8DB125459F24F4C0D347FBF15052228E35F07C51B6
-2B0440F1904BE2EA9AEDE6562D660C06445B14B180CD81B689C3B71DD90C01A5
-D3DA8C41C8DBB3869B747B137B58CF08B0D45C04D033C5909F45B96F5587DC9A
-45C9A29B76FB407BF550A418600A106D27011343D61B733C0C160FB5A1390EB4
-D7D4139958EC2979253F49F3C14E1702B511281B447CEA9D51847E072CEDC3E1
-6D48771A0942CB17ACF5A3D681759853E084229695FECC29D669829950C987C3
-E6B73E50C0399641E512C51A033B3003EF5952408FCA0D0D69FA8A52C9A5808C
-DEC7290036DCDBA5746DDF546A13339D69BA7656B62A65237C874799587FC6B6
-11BD51A4852FDCA1F232573EFB834AB91971CC231402ACEF2FC16008D67EC518
-ECF4136E9471572A0451066D852B3A4A648BC5E42B948B92AB3DF4772813D6F2
-FC94B22C12B6571340203C7878EC4F67D64F9A22AEE080D5AC3858920ED2FB8E
-17B27C3DB20445253C08B9023227B6F4117C56E2B757D65027416271A7505863
-4F1821F7024E368755C8FB662EBA78AB8977035291D1B9018FF5727D008A9D98
-747D5F4912DC185C56BF2E418E39CBDBD64849228D311C1F165D5E04E29B29BD
-333E7D20D3E58B82E1DB60799E497FA0CD0B3CC034667A4B6B33EF65225E0DA3
-E604B360221C924459DE7F0E0B8F0DDF90E542F59F2D9AED59F2A206D19B069F
-6CE15924E7A9C034C919BB175010278A0B556ECCA6BC90AED8B5C623C698F18F
-8FC88B4E0D9BF57DD580D6A032DB06175221E89F6E52180E288B2927F3FAD64F
-96EFD0C02C2259CA773ADF306DC09EFD9C81C75E40CAA6F371B3D433BB996635
-0EB63B5DF89067AE5920F7071435A0254F904AAC4E4641317C6791B442DB49D2
-BED80512FDA8B6E1B2395A76956E514E1A6E4AAF1FFE747B7C9674A588F11941
-A021E246E9D9182D89569CC6E3A7F04DFAEE0E405C8A574AB25E7AF9575A7EB3
-1B9E5AF20E832A63BEE05057E762D273A70BEC68D59672AE8531F34F17CF89DF
-F9CE3E7EB609B4E7567114E6A208D6C227C3A143DCD0802946C7FCBC22C528EA
-671A6B9BEDF1379784FDD47E54702248ED596F4D68D2CCAF8BAEC328C42280B3
-44B9A7F59113C7FC6D0BF5E9BC5DB9D7CD520A003369C1ADE301E47C39545D84
-AB82B1E552A84B4B946BAC0DE1A61D8BE9E3D43B31048231A06A71B6D4FA4CEF
-DBCA579964ABF39CC773B79D1F2BDBFC228C300BF4DC276F2382BC70EC6156EA
-297AAFFF0A675996A5B3BF113479458D09B3E7FB2723F0651457CB0DDEF0E0EC
-91EEF36A9C67DA62D99C1825ECE01D9A79DE0CF0576965E8CAF5F5323C9E5752
-E372A96FE0167BBFFC5BA420DAC8EBE321F9BCB792CC4D489A847FED1DA6E352
-E9C8DC1B0DBF7EC9F2E4E20EE9F0B31A278D13D7B54363A338AF0CCEBC403CB0
-CDA5E97780EDA37AC7189450D6EE17D420260CFFBD1E278D42294249A4813BAE
-E53C34C1B0476580C654A576952DE192236DDC7C2644C2C7C25D0B48D036FDBF
-A1D8A2BBBF5EA90BE31915BD82438799CE61173BDD849CA48B6406056B16EACC
-14156CB02ED87EC7E73D20D08AAAE0A54386E01ED585494B93BD37F32D980647
-9244DE8BC88C3DC3A6CBF59241058D829E5A23E29DD65AC3F89BA52BB5368DD1
-A1960284ADE6F6E941FD4FFFC5C7223575C2CE4629A19E7692E2EAA221158D07
-CA0A09B8F07E0643AEBCD24FB393813D6468D083365B66FDD49D5C734DF25079
-1F4115C8E027ECB5A2258753F413EB75678FEA2AC4EB7BC29EB810DE20190428
-D573DC7982B71B581E547DF6DC1358B0AEAAB71C907711B6A3C3267E2627E2DD
-E54363CD26E5FE6967AA7D60F0DB365F528746467ACB05E722609327C70E1D82
-2436887791E791BD375789D0F36B6836A688B67A1903D21D7B76C86582EEC06F
-9E2D445C1001FF8DF3F5A311C60DF6CD68328D06F4D5EA38AE3703FF5D200517
-A8973ED5A6A9CDD2EDD450B0E8695CB6D9376F23EEF3887B2C5CD9D0A63C380E
-323CC11CEA634555BF2CB4B353703DE068F108F89BCB01C000C6133575DB069E
-D8AEB587826D18C6F6D1D0EE935473EB65382FE0DD7458DEDD469FF54DFD2949
-905A681DFB3A2B5623E56114FC81138661BF29BCF4F2231417B0C64D3FBD95F7
-6D462F62C3BED55C7E416E35570CFCB675BA16DA3858AA2FA2AADF8B5D91DE69
-293B7C458C37B6DAAB999815F2CF7175D11A2814C8AA8942EB02A6F60F708C47
-A0F57F52395DD9F0AAB35D88B56497653B292D8BB7FD87EA886A3E35F76D243E
-B276AD03880B0E7D8CEC4522F1F05DB291CBE146B6B2F2FEAA51FE0BAE952711
-296F9B83CE0CBC2993C89BC6D6C763EDEF14F880AD52764A3C6B9BEFB5F453E7
-945A65E5A97395E7228E8AFBBD1D12D9BA66E32812924FF3C81A9C7DAB13CA9E
-A96B7146C862E70F507D422723B47317C04DD71FFCE45BBFEDA477F4A26583BB
-949CDD7E39523752C2326AAD718F3832C6ED2EA0AC3C786D9047C2B50AFC3C6B
-FD5031B9DE4C140C56558BE42C5C086D6E997FE5CE809E221E247AA6CF2BCEDB
-211A68D7F0CDA478E16930D6D7705544C93A419DD72D039850D38E57B0AEFC0E
-91EC04F289695D85731FADF9E0D9A5796759EDC259257496F0875CE4C4CCDEBD
-C392421370FFDE506DC3013C52273B190FF2EDC4562FB9523F63863A0700E5AD
-CA6E830213395D3835FBEE846B84F8147062044470C868D88BBA6289EEE0CBB5
-F46FBD8E430C753A39A7740231E41E4CFAB7C03D5C15110A225A66BCFB52C5AB
-EB0A9243720A133D8C9C49C7370DE49A5D8A0E383B6897F56AE9DF56F632C030
-AC4DCDBDBE53BA1AD4BDF2E34088F936A3C09F82DA8D76F1977B21FE41ABCBB5
-8D98F52AD79E2642991D479A61C38259D871FC51329F37D5FD2C1AEF473F82A3
-BCC2CF9644C46DF5FCFABFE252667F16303964B000ED12DDFFA57C6D9F595436
-D5B252D52F6717681245D83EC7793E49C2EA1EA67F7DE72A49FAE427A1A44DD4
-99741E4D886A31055FE531A988CD11DDBB2497BD9BD6D5D6EAC80F95D8C2B0F0
-485E21E9A5C0660124D8A334FAD0FBAFCA076853CF9A1F81F72EAB063AE4D893
-36C117C79799B5D44DA24EFDE62D526160B5A08CA95148E0A882EBD5CA9DCE45
-612BDDA614AC1287DBA611BFB1020E639982DD860B906A474ECBE08E90E67FA2
-0A2528750E137A35E4CF2D696E6B7A876A67BC9C0B7AA2946FDB6B4CE5472FC9
-F59141921D019C7F2C884C124C6B1FBE37E76E67B40500AF5F0FDE42F4115EA8
-345E2222FB2924975EFFF88A33DB8119AC678BDB753E87C4E04593036A528408
-B9EBB1A586B2C07AD327A25CE28D19F4B533E4720DF9B9EC458C69CBBD744D44
-027A731C0996F0C5D3136ECA5AA0C2EBF72AB03C6020336812B454A4BB91EC79
-81281AE30D621E2CE3EC380F2CC30ACF4E609FE863C69E21A4274F6DF6730871
-A715CEC5E269BEA6E8CCDD8EA81A875FF973ECD453E56092EEC96A2C127A14E1
-039F737BB20AE5EE268EFA4D8111378CA129ACCF138A318BE3DD01BDE3315092
-22087B96A3D326EB508C4EDA753F9674664A0275F717A5527E723771102D7F60
-F93C67F4F8977588900EDF92E71611D03B2683429ADE1E2BD877395F07E4F407
-80BC261CA93BDF80DBE5B60EC65826E11FEBBFBA9027C34F9783D6077CB56B5B
-FF8C92F9B0D1E049F6D089C6A33082775DAEA7B686AB292A50F13A521B2AC371
-75BAF14AF35FCB8030196A0D180BA8E7F3A7F13F8F5C92DEF7A53D9A0001C950
-5CDBB58EC54EB3C0FF8D979435F502A5E671CBD2E53F1D3946555CCC21044304
-789531F150B3602C831B21A00DFEF402FE31DF6E7747AE0E0F4175E687C8D12B
-815D58FA040E0526A58218C3AB1B7F272C169DDD2593D5E29EEF610DD0FC4A96
-BB326914793B1FCFAD7B223FFFD507CA18349265A0B99AF14DC8EDE2CA78DE3B
-915FBCD285F7167C04BC847D50F7B62EFECBC6A82C24E3B12EF91226C569B91F
-B15CC4A67B07B20567B1B7BBABEC1171821D635C3B77BF55340FD57FE492BD7A
-3882084798738CE809F0EB1F4F478972EC709FE01776A21BFF32F53CD0FAE8D8
-35440799D59DA1AAC64543938C57DB9F30AED220B567BF6846080EC0CE30C98E
-3B23BE491F04FD8F2D6CE97ED68DD6845642532163D370C624789C82A66D4E5B
-7D7D21AE3A4E71B06C4B6D2E9DBCE73853737515E1FE0B145F031D0D0D28C206
-6762B50F2295E9DEDD6FF5731AF087F619BA5272E621E570340264F61E95E714
-D799E5A30F199765BEAC8A6274786B2CF1720619CE8AF840CC588E8A6C34A3A2
-D8CE04BA80060FC784DF4DE601E6C0BCBA6FFD8339A561A411DEF52F46F8B13F
-23287E9273B3E6E1FC09F5AF87DFD0EB6E16698FD789ACD67AC7C743ADE2B954
-D45F15767A3734B608AEAE89890ED8D3EDB1804BDC6B4265486772F21DAE46A6
-26235F32BEB24EE6E7EE21555C7F4B1927679C143FCBC97A79C1C135E1EEDFF8
-DEB69AC6B8D44AA54FC34E54715A83E85210BA449FE72D6B4B541ED2E1DDA173
-881D1EBEA5F8F4E81A810EDDA8613D72DC14FF0502431F8E985D1F751B5AFEA2
-AE60B3F54BCB02AC8D6E931242A8F567151070A637A815DD19A60F80F5EA4F57
-37BB3493832245D8830115F7CA5A977B0502B3FF41776FF6482E816675EF3085
-6FFDD68F320F259A8462E89AF42719182E54522F0B16C3A92B3110A9A34FF5B3
-19F62A0A22C5ADC65B22F33B81E201E732E8436EF210ED49F896A3BD3ED5DECD
-D85BA667D66DA584835601CD60443A719E699E43DA1A1CDF776C96D6623E3637
-75405B921910E66C42E7A3C34AD6ADD48CBB1435EFE7AA69E4833AF35ABA8227
-AD653446F214F03E617FBAD8C7EC94962F03FE2EC1FD25FCA961A014671BF36F
-86804F088E635DC7ECDF3DD75FB9CBCF6C478197464E62EC4AD82CD2AC74950C
-9E5B14952EA26FD6DC4011B3E280E59DCFC30FFEC404AD45B9D5693B8A96FE14
-969F4D4571F554204F3D7C8622069A1FD32E189DD7D10775A661709A2DF34504
-7088E6950B952CE65BDEA414C7677A882360AC34B5626E447D9EE382710D0804
-1B23E24B06E948DEDE278A682D3871DE67E7E47EFCD622FB87951C33D944F4C7
-43AB11EFDE9100B85871453A1F0292FE6CCA9C3526D6EF4E9F21E1D9B56752CE
-228420E6FE8B69D9B3AD4B4BC7B2C1E0ED0FDEBCFCBAFC066F6EFC1A1876A5C0
-70C6BD14FBCB71902A33F422679FA8248A9B6BC14A82938D7297BE24EAA0FE40
-9D1DBFA4F1D13E6222E425C71428FCB5AE090E93689836458DC9E44A72013A01
-07FCFEBF3373376E6B9F621BDE3A59227E95C25BB8AF7EE53D4FB60CB0C63A8D
-727060BC41E8C01FE2F900C92E64057709D79E24EE17E3ABB8DF1477C8DAD061
-95D9943FE28FACE7DC345CC8B58F9B7A65F1792DF78EAD8059FD10FD791419C3
-6677B4AA18DE281CEC9D54EDB2243650725889FAFE320F4F43D7CE8A031639B2
-528E8951D8D3E80618B716752E4A0C3995191CEC9ACE4773550409BBD0859B0F
-0D9845EA39E9BB37CB4E6642F2F4F9CABE1E63907C84C86D0EBC02923ED145F1
-B6829A6978A4E708CA08F5BF1EAF3B6FA997431ED41265A639D5D7BF27AF4744
-725F4B6CBE208061C0932B217D1CFECBEA4D1607F6C7ED16931C8EFBF7D9C511
-EF2AAF2604BC699BC050A5C71FC804E186A780925E9D53B5C989E5E471802CBC
-8CDA4DF3A85146CBF2E039727F7A9D34674434AFD3E0B4E0A1A062BA0FE2D139
-0EE91BCF7552A7653959E6B687AA05D2556D45B48CD505BFF0EBA8A8852FF0FC
-6B1A7F934D64DAC3806EE30C833B0D22C3D0891810245AF91A0FDB32D5420CDF
-FE5A8931D538C2B670D2A2AF28C0E8F1DBDB5524C716AA6FDAC081206208F1C4
-02973A527AF85D79A4DF04C458600323C070E4495069F70AA3585F6C1AE4F132
-44D02EC9C36E2446446DD8C937C73A9E50679DBA58AA9F91D00E04B1C6006481
-2C551AF05D15EAD402DB663827A5F99FD382AD2EB3910F30D35441B91444A978
-14BAA1C3F73F12EAD9BD29AAD745415DC5213F5BC3DDAB5988AB591D2470C4E0
-D060AF6ED52A5E9EA9BB221711F55B12DAE843F6C7E635D02092B9F784591F6C
-698DCEDA4748020AAB6F7B6E51C155E55FF097F656A28829E6CDBFA86ECD1571
-0103E3773D427D59513F4CC9427EBE984F3F222009B760FF5FAB8C10CB8BC347
-8A85936E5992A7432D7D3BF2192E641A469742F3B8EB4951DAE90F8A43316743
-88FE2F78278ABCBE019C8172EE1335E9B75C77547AEDDCCCD531B13A6AA0ACCF
-65B0D83C057C6C0E4852B3136C15F1E3761CEB75EF9CF4FA0A3C1C26CC77DCE1
-7447F056E738637FF95D540646AC0105B277981FBAD69DDE6816C75D748067FE
-E89626DB8F9AA8787A4A72EDC6D8A23145A6ECA82E51F054C7F786693BBFB40B
-8B8DE40FAD2BD0441C9D5E553198A1109DF8019293D8CFB907A7B12DDBB975A0
-081AED60CD5CA84CD8819609ADD32FC8A06A0EB573265A81D87F2952BAF03057
-B448AC2934E68C7F51AC1A8D96C785FBACBC130A8F8C9C3F9776EEC5315CADD5
-5E99D3B59B6FD67FF2D61C83C68E7888D94CAE71802C58E6090E97E1B08CB153
-F23D0B33BABC7D755999169E591F1B0558F3CD720581EE3163C8464BF1B46FBF
-2F72CA9B067F8C22BF456053DA1093AFF66EDE27E513E59A92928B044B2C9970
-5E8E549612ACC99E7505196373C8033849D0E044A8C51A3FCAD321AB0D2B8996
-9DB438876AECF86D46F08FC6A18F47AC993C7CC6AF6A5655C5545DECE2E92976
-FDE4B603CE9DC1FC6D88471BE1E3463C19AA4870917B4B96B9AAC2F1E03EA5F9
-42D0819D2703AFF2DC41194472B76DB9643C321266A9B98268EB8FF4157475A3
-D7B487E088329C37F5AEA980AF67AE5589194A7F27CA9994D92C918E8241EFF6
-181605D1E56195FCFB239546E1091B0F43C13E2A219667B36808FFAFC73F60A9
-4113C4AA2D2AE1406783CB116E890A32C19AEE75AB6F04738E4B72A4C7694ABB
-7C3EBFA86C9C62FBCF62FC69884321240B79FB23F03995CCA44A02E3B75A9F09
-EE8D7EFAEDDF8F974ED8F346FAE665EA3DBE3994829BA21E97F4C88AC1FABF64
-2D9155ABCEB5CCBC4F7DDCCA6F595C3D8BF2D92365C00DD4A74538E576B28310
-BE3E0FD245BC6CC5F6FEC613A0D31D052DCA74613541CEBDDBA7660D92256F3B
-87F125C591CB8468B6C9024060A6C2D00C08DCF41E24EAC135048DF48F15776D
-035A94A2519DCFD4ED3DFCF1B9458044A6015FA88F998562FDCCA222AF11254A
-AD2916EEE422DF55A270EC80B065B00EA8C2B947F0B7D9D38F17F1542A5DEE88
-20DD3503DD92FBED52D934122082A85B06538AEAE1C90F2D878FD7DD4B5B41B6
-C86F2EF1D26E8CABB0991D2BAD1162CC9B3FB89C8E819F1ADCEEF88E2F2EE7AA
-7E1E6222FAFE67E89749551F5939C523BEFF6EC95E84F753F3B691BA6153989C
-2F2731B155FB3E059310DB971AAC320F5F74C5FFEA54DFB7F6D0477F2F8CFEE0
-CD5BC6DFBBBDF5826ADA601A80E0F3EE7AD7D9A4334247F84C06BBCECDC5F46A
-79974181149F8F4ADCF2096894459BAF00981116B9539547538CB1EE69E17155
-008C3D72860E7C5262FEA1C19FC1CCAC5E29E4DD0A73A3438576D785EC55AE30
-3F17147B177AAAB6711617CD4D6DEC903B54A8AC3A25F6A415BE464B0FA32EBA
-07627A645A82031CED0A65C502EB8F2140CA3E77839639488FA51B7C9199F4B6
-69B2EE97201B28B4C81B5EC47E512A3F5C6465D63AC7D1599BDE80A9DD8499F0
-4A3AEEC8F1FBFB9E1791FB042F5812B0F3948F7A3623B717AB6F9E9B4DE7B4AA
-3FA92DEB94C25E9E90720FCF6EF9F641D0CF6FEC4B4CCD87F7D769617E1C74D4
-195F50AA8BFD1899AB39A87049A7D4BAAF4C354FAF5101BB0411E13BC3AA4DE7
-A130C134E2394F002E34A51574DDF8E51C92D1D1E2C4946D
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: cstt10
-%!FontType1-1.0: cstt10 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 26147 26416
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (cstt10) readonly def
-/FamilyName (cstt10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 611 def
-/Descender -222 def
-/CapHeight 611 def
-end readonly def
-/FontName /cstt10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 58 /colon put
-dup 60 /less put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 76 /L put
-dup 77 /M put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-6 -233 539 749] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E729C1F3C654AE5C10A2F637
-7885DEF6A2275DC695462949A67E0D187D38D4A662CF4FA12D30CCA27CE7A810
-692937F6C2BC165CE2B8622BD15D5E5E6CF11188ED2932DDC14A54EC300FCE1A
-2C0327DE4D1CE9EA805CEF466DDB70A9920DDDC1F8E2F221D9D2090BFCE081C4
-57317529B50A66612DE3F73CE16603D25D14319AC60398985FD75232461654DB
-2A541747ACA527AA312FC27F84AAFBBB7F32996C15D8E819BD14DC1EB8E32517
-A1085EDF51DA03E28D2D370F6148FA4CA5551A1577803A2F28D69BB52DAE3A21
-E7694EC5E8AAAE0A2E5BE5D6B4B7F9F9E0214DCA121536C0F03ABF09B3DCD1D5
-7842908B4480553EEC1250FDC4E4378A115DF03DDD18844135CF9C098E067275
-6044DD8E906F9A5FE4045B801FFB78CCD0B89F91DDA22768ADB0873958A698F9
-9F264E31FC8C2202AD497CB8F4D5FCC7B4B25F49ADE1472B8F4A60D9F54D4356
-9359F02EFD4058C58FA5E55F60BA752F27725618302916E03B39CA30EAB2C1D5
-10B84955DDD48C7F6C6A1627635192132959536AEB5D58F9A01E249978BF10D0
-D3FCBDE0143238F62CFC2D227521B9A378BC4962D8FF5B5423261096F4AE3427
-49367D8FD1A016AA686396062CDAB592721EF1DEB820EB141C2BB733F3FE3DB4
-2643F8E0BD0A99A49188A4018D6787D4C0CB301152A70157310047A3FE7C6E5D
-99DB6A9E6D909C86DEF977363DFC5E1523001D95C0DAD9F1E6AAC0184E6D9FEA
-B2BEE38745AE21871F43249D4A6D0E867AC7E43E80EF84597F9E17083DDAD189
-2E952ACE33A48351CAFF2BF2B977937E70B713CCB186BBE6C5825A46C99A54D9
-577EB6EDFBAD85503029B9A0776BDA3C877A0E650CAA6E799EADEB641E165016
-31603C8459F31242729A18EDB411FC40B0CD9A196661A5AF768C67C2C02654B2
-331B923D1BB8A85655E6D40B798A3ECF1CAF79DDA7EECB0F1782FD5D8F1BA5B4
-87A6694809B1BD85530F5E2CFE0DF37A6732DB59F595D16DCC5493BE2C847312
-8449B7212B211FD9179E5D7D6363D39D9AF2694D1543FE8814CCE09F57BC3676
-0BD45A687480DC365D0A0FA9459CB54891F74EB54079D63E53C8B0DB627F3A1E
-D2CA70C7A3705053579F811D5728B57DEC286F9DECA4B1C4EDE8ABBD76EE2C4A
-30C93B45C3B1D1C895809AFC85E0E6BF5BD16078D68714E51C0DB582018AA4C2
-0EF7225A3451CA2AB96C64863425A8DB30730A88D81FA788E35BF8F7FC19034E
-37A565087AB2E18A8286B88CBCC2D46E57FC508D1ED03CA06491D973B10252DC
-8E088D8AEC852F51B857A389BBB334C21251ACC9BAF6F648D4EB41EFBF209A9F
-81DCF104FC6A46174D9F0D84C09F998363D3F3F392F2B1FCB711AD32F5F69EAD
-D2D9ADB6D9ABAEFEFF7A9150417A4BBDF8518E241C96655C354247A63DA7C883
-B8E7606E9B3B31DF582B40F9D2987CF94619ABC955B8194B5AC6F6A0A35C4F04
-DFDF783B12276B6EA24CEFD160B537690EE0D9237297AE18CC9D557E36FF842D
-56EB0E9309672DA03FFF3610762392B2CAAA898F7465BFF165AFEA30AB740FC8
-DDE2AF312399850379515BA605D8123F8113ED125B11AC8F5C149E5E8AEA106D
-747F8C20E2BC75ED880969372C7FAEC67828B182C7F5619621FE2F7815F374C7
-1390C27508EC5E88F3DDB1CC12F3424EB859119E4C33FB4959B7157EC86A0250
-AF21592A3F136524848DBAFC51D1D72C3ADFC6AA3C1CC762333E910AAE808406
-5CFA83C16EBE0EAC9F4422E8C23383C76B1CA2453AD17408FEDEF3FFB6C81AE8
-3D4E69661AA96AD96DD667129AF4A1089B390E95C5E53B01C9A06C90A2CACC8E
-BC06A44D45AD42480FA293ECC658F897E2E0B1271AC2F4B846BCFD434D80AA8E
-1B620F2EE9B280C3647197EB6F0D966B4747B048F7B56306A4E563957386FA64
-096FB619E3FD2320EBBE7207B2D1ABBE6498535B0BD35D89076975A3CFFC401A
-E2AA685584B5BD587160609CBA3F9C532D5C416DBEF870FBF9D2BE835022CDE8
-E12A2B663679B010018ADE93A7346B6D03358366E2FB8DF511C08BD383199FA1
-07A9CA35D3763BCC7A9EC5FDA448214C914C774590CFF75EBF86F71C1EF0A3D0
-24B9AB7EFE5FEA107659FBBB586462A3CDA8397825D269D700C5441A5E764F8A
-D703FAB8F4BBB1554CC9BAB6D51230281DD54394AA449E01F38A4F7441102975
-E81593EBA6701209D404451C677583C0E298FDC778E8B2464D04D19D82F104DB
-4A2B43054D39B5F470C1CE551775A1E9AAEDD484442097914FCE106218FC1D9A
-1D2F4D5D6D5370EEE6A6291F110FB4DE8CB21FF14AE894F7F5E4911D4A46065A
-88595349D0BDB4147B0E27428921E67AF6FEBFD85547491F8746330B2634427B
-A10C654942DFEBC62F94E006B9CF723C7A097ED8C23FF4324E26CCC46489298E
-0275A1FA08168A1D3F9C7FDDBD18BB8FB8478B1B374C1DE41D8FC6281C5BFBEA
-8508B69F32A3BF2D1A6EE98C51277476DD6AB75382CB2F304996F3A15859CE1D
-96D38F20FAD46616EF29D34F1A09B7EF5D2A6330CC3AB097878E4248B9935072
-DC99F172B2036ED2A824D99453311599FC58702709DFC7422B518942146EE05B
-06A483BF60420E5187F7819E670B70CE29B1826454939F5E807EA94C0EDB525B
-09130337D1FD7567851A2CFB4BA6CADCD42E32BBE10CB2E2D474ABD44677ECB9
-FEB5B1BB1EE0B62F0C6CEA9E425486012B1110D1885BCDD5B5152E5F9F0F92BE
-4EA94EADE14A6BE6A74830E8309084E2C43612E1F6A8DC0D3619294134C6ECBC
-939E1EAB363857CA9DE3F213CF8B505787B52663F34AC647F6B1E3EAFA7D48F2
-445275F5A3E06ED3310C68FAF4EC12BD44476D50F64E866F7195860F56DF531F
-67B127FF9E7FB0FF7FFCA52B3AFEAE76D6DA2380A712C4E8BE72A3311E3DF0C0
-193B9BC27433C97B5090BE8BEE458AFBFB57BE9230F0743C3F854A3379E03107
-EABEA4CA0871F1126015B03589E7EFAC6581E387BF5B39BF2E9F0CC0F0DE16A7
-4D0933DBF682F64CF4471975FEEA002D42F81B54C3E286CE2FE2CE48548C9808
-B0AD35B955DFAA3D10C244F84F377E8DDAD0B18B4D444DC5A1A6DD4914A22FF1
-EDBF796A2B1E71690CAF5C3A15B36C0A65EB0E98678351E776E07E3D536898E5
-1A991B7CBAC30A87A9155C587A477F0C890CFD19FA90DFD8E6A2F20D2067A91E
-67270A1D469270F8CE354717D5B4044974015E825BFE5DFC6405278B74F61294
-1CF9A4517482740E9FCA86D7FF8106CD1FA71499E26B0D603A5585C58EF7C017
-6F209F202263AD128A8C781C58A01167008997DF2CE1EAED186DD9AD8DD93BB7
-4CBE69E6809FE0A0EBE876275DC9226742428C1679F10D705B8599F3B66226F4
-55D0312DD2F36F850D28CF509CD45DAB4720FAEBEB852A1FB29A51F8276EFC52
-9ACE54399ABABEE67A6D7E0EC4CA1FEDA0F9F2BD08BBC2F558C9CA61D1F43452
-7E0C84A00B62E0B07C313A04A86A5CE74741752BB26681E24750160B8BBF56EC
-7BB69100410B7053D06C31FD6B01A9B63D81169711477DA8C820A53BB28234C1
-4B5A7C155EDB51868BDBC0DB4510753A08F58A05AB07A61D841D8853BF16E00F
-41E626A0E83A9DCA8C3012EA7726A571FA5E7E5454C7A578B66859B454C6CE87
-D34F5F961E9617248141442C2E48ED308AF38EEB8D10FC08FEA32593DACCBBD9
-A1491432D70630F748167D8EF61C27ACB18BF42EA98601BE8FFF91A07A64A34D
-17A05772BA2FD518D8F7934172DAC8767B9EF7D46CAEAA6EF7E55A8DD06FC2EC
-5AFD04D17A7B91C4A9C42EE20856C0CB82EC4D09D8A32216957A78884F8CB77A
-09391BA5F59CA3F8094134A565F98E68D5174F5735475D9520E32B3ED70EECEC
-F6B5D3D72C6014375DC23FD7BA51DA5E07B68988FB133FAFDE6593B8BCE3A218
-77285F0C7AC963636791701341F6C2B5D062EB5BF98CB359667FB5352CD2F770
-FCCF1B637527CFC0F08C99EBAFADF4C97AD9D63D3B3891CA52C10389F2E46ACE
-F5D2DF909916274EC8AEDE68732B6C7B0047B00A5E7A23E5A69A1288BB190CC0
-75C0D21235F67DD0FF54A429975122DEA2EA9557CF9532AF46458036B6ACF27C
-CA64F9280818AEFF8EE0D3F14FA881D0AFFA9A0C9F23B96672464C9DEA0C68D9
-959BE56E197FCE8230B69A78E9AD2B7B895CBFEDBF22B1EC7AAC71396793C018
-2BD793BC1F1D8828C651E2FF234D621098FC234A1278F8807DE1CA26BCAAA253
-26F73B6800E16F589488E72879D8BAFAB26F6A2AE172BA72F1B63993AD0B9330
-45DA68C901AA49999E149D3FF0C691721E2376052118FDA9D3F485DC2B9628A5
-A679A7AB050197EA233DF301426D3F0693CEB5A5BFE6F7C476E2398B493CE1CE
-0A0F4205ED4A2FDC90CDEA808DFEF41E57FEAD7CDB3071D22275B1063A45695E
-19C8BB3CC0119CD0C6575E2E2160C746480C2C211AC57DEECD64C6E80733B048
-6F72154637966158D13F1EAE6ADACC063A9D94D9C077F634970D8469E1E3E294
-5C66347082C7DDC5EE97CB1FF28AD25E3F2415529CB930EE0D689E4E45E810BA
-2FCB5FB3B7E7BD4B92A3E6BCA5DE7670E0993EB5B81FB04A49A52D7EF616493E
-5229DD78C71D8670A1CB73E0D302F5302436BC7F8B816BE336C5BAE54E9A6719
-BA3692C614415CFE5F85D6D8815EA8420806116E147E99F9542599CD130E60DC
-C311B3CA551AFC7F32FDAD3B8DE4FBA46AA4FCB179F9E50EA979425D06B86025
-0DE10BD8B889B974A4B04528D26E3A5B754906EF59FC58B2580B20E1C32A6A65
-204BB1183DFA58C9D3DBACAD4643755508E5B43FADAA25767CB5B384E7D6F00C
-E8F890F7AFF34BB4C684F8A94C7E31C89E28887B498D9FA4C65C2E060BE61EB3
-802133497E4B41393C9C82BCAA46FEEF28159A326666579801F823BC5A5CB39D
-5DDAB7F50125B53B8EBDEF012BFB897C3F6A67409E0E3D52A1CD556CE3EE2622
-B57F1801A0E8888E16C069F26ABE6E09EF5937EFF485A6DCEA669ED47182754B
-CEC4AC865505E47478AF090559F269205565B9166D728280BBC5927D0DD6FD0E
-203493017CBA4BADD7D43BD10F077BA43C5A9479DFF6DD57835D64355DFD3769
-0DE5513BCBA645B0DB189DF33D7924148CFB343441F5529FA891C7083C752164
-87AF0F94125CFFEED444FB4D80D4FAAE0CB9510E647028E2964D374F12F84B6B
-215DB51D1BCDF120B62BCBC7576F3CAC5C848E53B4AFB7872A32BB4D3BA5E65D
-1F07FF87992DF1C96A3C896EF50CBD250735DE6915FE98F791B1DC62B85C77DA
-7864E9A037E6137252794497D17D1DEDF9ECFF7F80D1C2F9E89BC9FDE6618151
-260192BB0819DB1F1C4357DE51919B456B7D3CCE9E4F7102F3F268D61C448A15
-9A034BCDE6BC4DC676A3B3EE4B40811E81D6BB8CFB1DE4F4665522B194121C5A
-BD85444E262CD6BC7054219554EBD5B9F3789A328F88924B063F5F31DE07FF3C
-99D377AFB16AF86D8F7D3C18EBB95CED6936555CE2407A9001A8A4461B446741
-31E4D250517B2BA4C443CDED995C40B79D1BE00BA0334E94401AA1EC59E9618E
-BB8833A14E3A09BACC22C8627E4CD941EA254F38E0D48B17611741FDC5448510
-B85D6E6B787EDBF5E6587854DEFD03A225B53943808C8187AC75D10114F6D958
-CDBF9096CDB82A16C2190940124832C2F9A82323CB4CCB8DF8FB38F76014AEDD
-A860CEF99FC92B0C5AF52E8D2317CEF2FD8832AA54567AE028B8E299689179F5
-2D042911CB8EDE42AE253F25AAC58C808C5DC22FCE83501EF0596428FE7DAABE
-58E0DAF3BFFE57B1E81EFC15E54C1862EAC7F9E757B083348EAD536C3269D514
-FB30121FFFC9FB49FA34BABE4D63C64A05F66B6577D09717C6D465F9F7387F37
-DC0E5EA1600F8BAA0BAA4A0D17606FC9FDD85C4C94064FB85FAD7C99A8D64BE0
-8E1B60CC15FE61173F98BBF0549D6CC750D30F95CD461F9BFC6B199C96EEBCC7
-0D3BA58389D8405D3A2497AF2021B395B51D1C160CB4E60DA6E185052933BD21
-698FD0F76BA5BBD2C2B9DD330066469A92BB0076D6CA4F738D235614091D1121
-1B0B20DF408B01C8484935DD0BE5221F0A1F5A49FD2439C9A57AC3F0AA2844BD
-58ED88F0DAD9DE259596E551031BC28E38E7DB901FD79FF4683E82F7547B4610
-E457F1AA7510A234393FBB462F887DA421594183E2D1B8B68E2477B8D6BBA5A1
-DA11A740208DCFE8C3D7E9E92393BA0962F5AC5FF5A1010E8CA209E286375686
-05860B84D0D3211E16799ECEB1FDABBF21EE401088F7AFEDAFEC8E1D5DE8D532
-686D66818D42140461F37C1D83C5097FF1CD43A6F732E7660FB139890584D388
-9A4F830069D89D067D74E6BDA0A91BD3A461273B23782EA570EE1A644678F528
-A9C44345A0AB98788A64A89D2326FF2A2F646527531A5E2DC2118100B70F9BB5
-E48C3F550E64394F8F261778F5495F6F505EE7AF9A839FBBC551EB43F5B3982A
-9D863F516DC3F005AE00C012ECE801617567616C8F69D736CA6F4DE67F76942C
-6B3C5A16E4B4759F09FF8D6291E5B0ABB207BDD0478F6095E29568E9B4BC9CA7
-74EADFD4AC3819689ACBC25FEEB46439BF8ACB1FE3D7835B7A4C3197BB470A75
-821E9F1E4EE6A03676DF8D6FA88D8D1F29CE425BFA88EF3ED887CB56EA46A1BF
-3ECB7FB943A579EF060B64C9E900FDAE29F98608B1C4D01954AE9D4CE2449FC8
-FEDD0252AC95CB21DE18B767A8900045BF0AD9F1259012FFD58046D408D5FF8B
-56E5B8FC93C08B78547E1907BFD409BD10584AFA90410CB5077E0DC08C40DB44
-645F2062AA5AC95A0DBC58A5D18AE142C045547756B4500F770B3EBC70C72119
-AA5E3A50643409850F648AA38F20EBB5385658EB1B79482177F6EC6E807C1350
-6F2E201077988C8AC6B35A36D983C3E8783983D90FB4EC866CC34B1668A65FA2
-18E6E16413F14FD5523B2C93BB7AC4825257615AF1591A2A8E5EB95C672B9F6A
-2FC7DD3B3CEFDE8BA17A09BCF8194162D2249E4FFF69597B54BA86610A92A469
-81A39529A3CC720D953CCE466AA16B5D739915A8D68EB05495C3E83BD39AE625
-068A4A274E88054D1C1EE28ADABE453D6A62D2AE38E5D11E5006886C1FF86A8F
-7BE217F3DBA5004B23F345DE0A4687DF8A6ED77CB4FDCEA22F4B78A833489806
-E2C0009246757077E71AD7BD5821DB5F901C94F3E2B581178B5DB72E7DAB1E2D
-05CE8828B7C1E366768B9FF7D7266FCA4C0C407D3535E435AC9E09C20FD50A5F
-F86FDDEF95426B531EF220515101E1B5C28F2D8375A80B38FB1371D9CFC203C9
-7E035113435298E7F13B021936D5EDEC08801D746E8086DE824B19D759899F00
-EC3ACB6C2D94D9854F5C63851F0F6CB175019488B42A8B32C7F355A783B1A311
-9809305171C13600817075ED66DFE6E0AFE5CAA9C4B2FD6752A802EE5720C75D
-10D9ED4FB0A6A3B7E3B30FD619FCC6E4D585990196D20460B2212DA901D6D2E0
-37D95B8A164E6F48F92F06210228CA18714D95F07A31093382E5DBCC63FD1CF9
-A0FB922B1F53ED589DAAD82FE31EB4CA7337920ACDFC7ECB292FC943D64B4C91
-547B9FD13F218FA9765AF17613B4E6E0D92FF52C81182BF37F0ADA03A127383D
-CA6B29669CD277E6C2AF63D090C3C98EE22C53F1AACC392DE4603A82B6357E8F
-07A652418C13E400A3C50DBE5F5ADB3209A4181090E2314223BE637F40874FC3
-486B977631D05CB9C3440EED99AEFF52AF4D51E17E1EACB0DEE5FF59427D12D6
-BA4A9C05A0F851ED8ACDA56A86A322054084EF5A9CD69A4BB25CC715F63508C6
-489331DB805B7829132BAC356A1536FD6ECC5C4CBB256209C34E0D23CAE5053E
-23F6D3AB4095069C3CAC1B5CED50AB5FF625A022B6A57D0FFF5CF452F58265E4
-640EFE34D0E1E5A8BE5306311191742AE274BD6C4D0CBE99161BD3B277A1F7D1
-5768D1C80F162599CD946EC06323D7324AF3F4719180A441BD7C1EAEAEB64D88
-863D573A49F5B109959CB41BDAB81354665581E1F4BE4BDCD2820D44855014F9
-337D2CB99CB5121FF5B6D0531EC53DB41456D1AD77216BEBFD95A36EAE2DFA29
-C0AA7DF47A5824150445D5022E1AAA276D9D00167A333175B16701AA8C5A71C2
-E2FE6B094456F89C01AA64BD0B342EBA9D4A9F6458FEF0DC5A98FCE815986402
-5470C09B983C3FF119EA4565D7AA557055B62EBC14D20BAFF6F8328E9C05E3BE
-DE307950616A278174F682524A269BCDCF2259C3F3DF3E66F81BFDA17A20458F
-BE412BAEE9784BFCF5A91ACB4945F063FBE27260F879957D35DA59FBF5992EFE
-DD0ED3740DE5CF59E4A18ED0B202C26BB109EAFF9842741DD054036376C2BA24
-CAE66146E9728C291DA90614FCFC5331A460A902F8B50F8B400DFB49A0F20BBB
-FBB9F6E68BDBF31F58E656289FC611548F9C4BC02F1EE438B87CBC583ED872C0
-EBA4341155BFF53B224A7C197C69C52F0F18C838573937B505E9685AEEAD06AB
-A42A8DD91B96F67488CC9B609B8DCA8F99A2B139795F66F2916852D300B5338E
-FEE33BBADA4D02C1A57C2261C0F81CCD9188D7B37F9EE0F0B722B6F0BBB2F695
-683C5990056651864337503752884629E965018D948ED19870122A3AEA754B8C
-33EE5DACF17BF3232EEED081881CE8F50CD02497DA2A5C82257C8656D2B7EAD0
-E82A63A9353A5BD56100F434D5A92637C84BAD6527EF07FAAA4C2C6E7E2BE5E2
-7624B211C5E910EA3255E329644A1A3623227DE543B6154708C7E28AC903AB16
-2A121E2510892B051D62669BC8188C0D438538278520C75A38F1EEE82CB1AA56
-65B56DF3A51C9EC543A5E375D55372CEEBF951823AD1880195E077ED5C4C5050
-1A81AFA18069CACA5977604C0E84F234668C2E6D165037EBDBE36A3DEAC68887
-EF5F657C6515117B6CB4E0096A766AE856FA0B109339A75061BFC99F6F1230FC
-3074872E5EA7D93CCC3EA0A2AE6F114EEB578FC4E9DF74CF0FA5E90C4F5CBB0E
-1E775F2DADFE29553D14770386CCDFF6EC39E4B51A58F533DB5134E37DBF7DA6
-DCCF5E5DCF14B92146C72D3A8770A4B0509B0221A1CD806F22FB30B892976891
-CC5E5C11AF7CFFC237D1AE50095608EE584D6202F9ACCA370DB7A4B6D9AD5FCA
-9A650D4EAA9B3B7050374C3CB6274CCA80EDDB36B7A7CB776211758ABE97A8A7
-328E366E494026D142332957BD6B5F4E8E02F4E94F3EAC8D6D6EEA0002430C35
-6F17AFEF01531C7CEA582AE5F9638B401842B7E43CA0D6EBB2AB5AD28F7E4288
-4807D68DFF33948C06427019B514069EA8876657C34EA188C7BCE9F90B789947
-D2AC7BDB67AE6BE6BF2F2E493AC7F3D808B34E5D367FFF37C7F5DF24FA25E334
-C676AE154AFBBA026D405BA76914991B5C751BBFE7E7FB7AE6DC91DF41EF97AE
-9C4B5EC8664ACCE6CD2B602D440B75979F585611973B31CA9A8D022C2DA4AFBF
-BC0A9F40515BDFBF09D44086EE226841EE90733D9231E7979173D464B0FD2C05
-52CB437CFA0C265D9273EFA946F65CA38AD0BA6AC8FA73900CFB71FE6824E98E
-26D8E888662B33F0CF1FD2909499BAAE56CA998922501FB142457B1480221D96
-382899310DA463CAEDC8A6B44C5137DC6A9912652BBE9AAD5C535E5C13BC1EAE
-45654146ADEA066BA9DC12DD52E820EAE83DF4C66667E5B1FC05CA5B692FA13B
-126C657A398A869218488A9AE08B5A9306EE7CEF918E7D67A6CE22EA48534B6A
-7F23625C7E287D71EC3980D9F89AF0B29F2E6461A7C0874400AD0F2817BFE217
-8A2800131E4255E8743D55282B5B439E59E1A19B77E45FC030EE0CF2FC62DFFC
-8801C38C2EF38E819172D860F9D5898933FCCA29C0ADDBA72DC85E45D8190FAD
-04B7CF05CC534849E25270409C271AEAA4A93B00907D88C3F74C34EF20AEB90A
-10D6EF0C0D29229A0341595B6E17DA0D0A227D0A8CA14F7638DD23D016C4E9A2
-00A8E07B9849F21E4646ED07701F562AEEE85576FCB7C87D3819B318CD3A7F4F
-4A7F73834569F9FA80BD6BFB0F38615BB1DEDD9D2BDB7755D24805C9D1EACCA1
-6B723990353B7863909D6C1D6418BA0F144A9C089366331CAD6DD9B0FD411A4A
-0D28ADA58F69D2C3B0BBFB2A1F4D6B6C9B1646205CDF402CF4A72357DAD99FA5
-24702D3FBC0BF59EC79897AF7F6BE85666CA86637520B87DE875CE821C2C6D6B
-5C0DB8EF15230F7848E386A3348C2051083D99486533F0FA0C66C38A628BF6D4
-7249B16808764C3869C8A9290579D936B7BB34BDB73A0CA0E8BC6D46AA91BFF7
-F07839483BD052166EEAA29E539D520EFFB064C3774E9B48386328F464410B0F
-6F551CC3C3ECB8CC7AE371F405CE62F7921DFFC38B50C38DFAFE3591DE0E84D8
-7A0B895B2CEF4046B4EA651708AD81BD657431BB09848C778B8BB110B90CBF45
-1FD4CCA77CDF38DE2A919C915F38136196C7EBD5757185D2E0ED73333BA1119F
-C7E3145AA217D1673B451188798B63618DE43B37B946CFE053DBEB5E608EE038
-5151C099D6F55D26B7A74D3355C2C4E62BFD7EBBF8D904A4BBABDF4E34F4F2DB
-2E174746FF2A531BD24E266C9ACB64081940C0ADC3C9FFC5F3E79267D0596ECA
-29D2F9A701992F485D113D5AF9F52AF3E0329E2A2846CE5AD4F78CC28DECA22D
-26116819FECA8422E557A5F6A4F5431C5B7C982FCF1CB46B102227D1FDAE6685
-E1767E5535AD4252AB80A78DBF10BF52736D88BE397E006C63FB14F3B1A9B178
-E65F04114291F451ED91C8BEDCDC35F941DD8B6FADE1FDC0DC0E52E30B087412
-894B8EA885C12EAE88AE2DE400CCB5DB7A5BBFE569C3F6A2765C7D8C924A3303
-42148B1908A3BBED1E684A3C04DDF1004FE446BE7C685584F345EAEAE62296C8
-7C3A2311A008CDCB5D9090B3470380231FB3996E5F5AB87E69D580FB26780D60
-D134150C1F6B925ED74B72820D34D118BB77904617DBF21093D6094BCDB3A3FA
-75F260676C05C38C784C8A5D54376A8468AE1E43A6DD446A924CA89B45D1E77F
-562D1027CD81C6FA57F10FC83ABDEF4425263E91952D1B4EC9A5F81E159A9266
-0C3A5D1485525295A1A1E179F1534ABF5F6755D02886BBCF8831E8C7BD5ACE20
-29797018DA2D5F1DEDDCBA00D52D276FDCB0EBADBE0C04F33DB765E937CDE39D
-B59966BD0645EB7518687ABB07AF5945EF6A91B3ABEC6DB4CA22337427C9C75F
-FF90667487F5BD2E4E012C7C540F1048D3387930B2E0D27CBD670C0FBEB8EFFC
-B258E9E6AC5FE4DC16A22EF66177D796A6BCD303AC83DE3AF907703BBD87BFBB
-594FF2895801139276FB384651EC7649E9D66D2BEBF745C717A09617DB876470
-8E090D11B27A648C24605B228C35A4EE4DEA2D27578E7FCEEF4A6A343911C878
-02064D77770DB72CA6B55D5E24CFBA3C7208F2D72E7ADEAB56899AA90F23332F
-6B1646DA7DC1162644AAFB439CEE67E92EA2DEF4C8C560AF9EFC80A677E5FD02
-D674D764C07B384E9650E92B59A76DCAB1142257142E73AFD1DC6419FC7265E2
-83A52ED941B1DA36A6AC59991C40E27A48F738371A0665E6F54F12FA0EF0A240
-1BE92C980E11AE111375ABB0839F208805E945D69B1B7A5759DD9D10A7490A47
-11647FBDB7F09E1B091B37D2301A896BC90BE1E7C28A583018A752840FDCD3E2
-21214A8B920BA27CA37A76767CAA8D10F46BAC7D6CE00DE86194E72A4E0186EC
-35B996E135A24A312AD285D682A0E1F655583FBED8731E05DD2E7BB56C15D2C3
-0BE1811E0E26971EF11120A386B888949D16C8D371DECE752E085693CA5D121E
-7392FD8F7BD1A9E884EE2264266787DA730C7AA72A6F6A007AD627718C7DD4C9
-3A56A1FCBFF4C6DDD38D5D22BF69DDD21E00C94586D0C8E28951927DEDE1F224
-5710D6A4CDC27FC57EF3D0C66DFDBDD51BCFB3DE60B9B07E88D60C6E39BF04AC
-33F68AC2B518FE4FF8B09939E4831BF900CB7F38D1B3C4D2AEFA1FFB449AC0CE
-5AA1B24E09F5F2030959E4A13A636BB45AFAF057FA1D42FD3DC5CADFD750F045
-0EBD5D70C79911430C5CAE55065C1511942DAA2C42548E0A8E418BBE1FDDC636
-42C18FEDC12A79F1B73ED60E2A5A4E753A6436F95C52664E39EEB9F1290B843E
-8886BB6772A31EE986C38088687311462BC8A53A6442BB70BD5366728BEB7184
-260C6713B90CBDE76BCA55CB84A168BE45DB300C71CA5C28E0F94C5498F7DDB1
-D812800552332434F5D5605EE16CBC4D3D8CB16DA3E01AA3AFE87A5FF240D452
-7E9FED37A96848AD8E0EB856172FE3211420A6E3194C1B338D97B718F99478B8
-B1664C3AD7898757E86946E68730A5063B2F6A961D1C64E4A6D6A593ADB39389
-95DF4ECB11A7DE9FD70C5BE4B485BB655D1F8AA407AFAC574C437C1D506698DD
-92C17CC44B7D02BDD86200540C9E2EA910F3E295E028CA11240C2579B6370801
-B57FD623D4C027CCBA79C107E6E910C5DF4C21B59EB80C9B76E6D6C03015FD5E
-E434644F29C739E5A8D18B917ABB3D5C0B41881FB68AA7815CA64C55B25EF388
-D399145961A5920799E8470819CCF742977392AFA019626FF415A45815023125
-48590E3DC705D132A18A92EB2DB31CBAFF84DAF0F7A36E72D275449C3CF68E82
-234A75E358A2909B78FCDA7601139A75A79CB315090064379B736B05A5FE08E2
-77782845ACCC65152EA2A7F177F00DC1178D63210D53C3CD401C9C99479BBCC7
-A56D4225195343E36EC60C3D2FC9802E0F748C3A5D0978FE38EBC301CEAE0951
-C546DBD908AC474B940262B061F8F4D7B174470039EB7BE30AD02C1C3D600CF7
-EEEE7E385A133D3244ECA79A9B56CC35E3F58E5125D4139CED98CC00CC859A6D
-4ED845818B11C3CE8D0C7FA31A8C912B51D37DB31A5C916B31534A5707CDB3D8
-8F2A5027D312B5490B60BA8939F2BF89599A13496D0CA59A41889DF1836C1F47
-B791FAAD254509F51D0E50BF3B666A565C09154A80EE9BBB4C5963BD8CF7C4FF
-BBE3790BCB1C36047E9CFDD022C5D49B34A46290AF34AD77B278208A0C305ABC
-41EC281F20374C3E497BCC18C00BAA2D479A0442304C117FC5B3D2FC77BDDA24
-68B1DF2C1E7083B0A30C462ADE9B9C4134773EF6ED5693DC4E7A92AE4CC46E4D
-9D446C534FE0AF3F99991FFAE782123428CE3DE03C8EEE7466A196CBBA75A597
-690F9CA29D32045D440373AF992BB7997A831ED125E297837B144022A6F70530
-4612FA11EB1C5562CD666813ABDFB6FC662ECAEEED44CD43C40EDDE26F9F27B6
-700523DE3349A86E13262E4C55DBF7232B5DA6DFF69861E07BE6A5AF0C5F5A7E
-B35F54295BFF72AF442551753A0BE05FE26A04C67855F1F79BBD23C3DC20F09E
-448875E328AEB4B761946E240539EB8949197020B337E38CFDDE272D12FED5B8
-B84610DCB3675ADF54830AB7F4D5CB88DC9E1A0094B8C629A7592A04AD10BC8E
-553EC4AF5B88783D15BF3B52B7B40090A7860874543DC7538686292A6308C8D8
-B2B5FCC89500B3DE8FCF31623615BC4C3C0E5AA08EB8B88D91975C3064ABF700
-796A24B0689F09D49529BEA293AC6E115E75A8C49B82A0E185BBD0EA87C5AB12
-988D149D9D7AB5C4A20AFCCB0880FE80D080EC45A1B8817784E3854941D4FBF2
-73380745471EE9837B2EF0CDBE081A9FF98A42AEB54D57082D599A15F53A262C
-D8E11CD48D10DBDD99EFAD8FE38AFDDA0E1558A9E4123ABD7FCA44537D235BE1
-CCD6374584F17B047EF8356105E4F17EBAC0CE73428C5F18170558C31A6B8D8A
-EE51C3BD9CB5262B83D66CCEEDA7FDC8EDFF9984C05570CA0186154109121DF7
-BDC20E2906080D9B890700A06B6A609625F30A410821911C81CFE16068012033
-1BEE1B023045ADC0C7672C9FEEF79CBA5ABE95306616BD1922A4E68CBF15571E
-935F9466EE7AFD691D176CB768C0E2AF2B3E7765F59B0F2540BF7F7170B145B6
-793876429BA1C17509A65FE2C85DD6EA826F4E3DE909F8AD63FC8E9CA28986E8
-905D5325646FAE5D9AF72448785A951AA015916C5FA343D2414D2772335CEC07
-9FCF76CAF18AEDEDF264BDA8899DCB06C20C28EE8542EA46872732D863D65E9C
-6DFC6221C90A9FD9BFE833A1B9AFD1B333AE519F5A95EF395C99F788DB151F37
-F149C7C2E476330BB5557E09B9678B4675911281A19767878582CD3E36602608
-FF5177BBCE5AE601F3EB152987EDF604CD4928E2247C15A1F47E189B9C248DC0
-3FB6F0D1E16855AAC279AA3590EE80E5946E6BED4CB1F02856F14BB542E86BB1
-EE2408B9EEDC7EE2B8B0FCD1308273C87F72504CBFE816EC89466E78F9A6EA37
-26C1C3002887704AE92CC360F4108D3146D5AC3801DFC5ED05DE405587AF286E
-9157F9D40AAD08DA87D9EEB1A5B0141285C210DAB3AE7EF760B003B77C006284
-5AE8F84933609BCADA81DC47B943C31C8B22361A45F8EE632EDDB57641F58AC1
-ACD085AF64EE12975E498B3B922AEF89C59036FAFF7772C479DE6075FAFB2210
-D7795616225A4B75613BF589865FB0AEC66D287C5D82AA8B48C7F83574E4D4B5
-352A470ACC64AD03C62F013C0BCA45CE0B78FCC38B73B8A28BC991EFF5449EC7
-3966A35E53148443F512E3E4F7B56790AE29481D8AA4D8E321706D4110C9F0C7
-23CE214F1E145E1A55CDA8BC67E988F2D3432CF1B9A8287F890F2D4C1080D7ED
-1B930ABF96DCA16D2AE3FF5123AEB2CD51B48CB854F2282C52DC1A6AC78D5D82
-5BA7E5F5CFA810A0025DFDB334E74E02A90AA41775A26B12E0852724A7C779A8
-A55E17F006FEACCA8B7A6B2FAA7719455B92DC7728EFB608A32A3206387708BC
-802A09DE0DE78F6B12A36A4BBA709B16FD5D2699B96351CED92C9AE95112E5DF
-D25512251D965FB3DD925B3429430DBE475ED6D871AA61F1EC780DE6D0D0E0C0
-0205838E5FA5663D1CC13FFFA723EC4789DB2141A9E45422F6D9DFFBD5B34390
-C18817772A3C86D8028F656B09217E2807AB09309561F40C2730871C7441E40C
-309C44367F54538136B129AD100CB27C70E0D391B80181F9980128E4C25FEFDF
-229B48458F7826ABA333D06CE72874EEF09AAB3DF2C6525CD10257F50CC6F2C1
-FCD3865B5162234EE0EF5E52BA43D102B806773F6B6A89A052A871C9954F6F62
-A6D7D62959D94D102DEA0C0A85B048AEC157DEE3009F3B80497F0945201388CB
-21F55478472A8F037DBE28963C9EB787181EBEDD13A8276BCD829BF3C62B6E0F
-4C8DFC4534ABF21962BFD926D508FA85A5F6B186A294474A46697F74EDD76C76
-8184551680C1A50E0F5793628767D436D8B0204997387FF3423586E5FC113609
-1D437CBF17B8F5B8FEC2A52CBDA89495EAFDED96F26C5D9F6C7890F64A8C1AD9
-0A1F2162295C814BAED96085A8AD3B9532E323B2DB2C52165A4867C8A8AA2FA9
-1F5FBE6C6821BC99539C3CAF9BC10226EAF1951773DB1A1EC7EC83ADFE1AF835
-F560CABF62E7BF1A0E68A6EF495F9FEFC1466332C7CC85339693DD3EB5364E98
-DDEBBB00A2EBF926A50526D893AE38B62B875B1EF1FEE2B3E87E01F5E97C734F
-4A4E9097F441E4C819E8DFFD89278F51EF03A00A840846CED8D9E59EFD93D61C
-2375E5BF3F22C4C0B00724B10ACC9D9B94EF49D774C10D355E149536CDA29305
-CFC938DC976354F3BF7A3305F8EE3485AC7E779B83A92BC892354ECD15C6041B
-633886BF05E4C9868F1E0CE20655DD3AC63B80C0C0114EC949FD6A55F15969A0
-80504508FE299038B736F8205FF4C6AA24770881AFA8C5FFB385F76476F9406A
-6ADAE263C94158DAB91B64A0DBBC0AD305845D1CF9777BA4622BA59F5DAC31CF
-64D71AC7FAD218DE9548EB7C00996F162E308E8D0496BAC73921F6D19088DF5E
-3684D4CD02F12DFD87F6ABAA13DE4BCE2C64A4FDA8F9D8695AA2B4FE7AED2510
-D251F7413854B3355CB452F4029845F5E292C0B4E50C5E112E5A933438705844
-4A81E1043DE175562054FEF9D92B5DCEBF9F7EB5B7019BDC65E9617A7BCE3D3A
-8DC18CCC56657485ED065717B327174C59008DF94C123BD9AF8A7FE6ABC0D147
-105D0128379F7A3272D2856C88B28602D09400FA4EE0EB7F1AA0D4AB2C26C510
-2C4FDCA28F150D1F1D5660649533E1E6B0D6EA98791C98531B2C4B5BFDA832C5
-F592375FBCAB1D9B6808689D8615C152E66863EDEC4962722E45570038FA3AF5
-0ACAFC13618735E81F375EADBA653A86AD5044BD0F14ECD23BCF06008E522C39
-63B627A6D60F2F2823F0A72AA0AA269FF9202660E4F79D2E4688289C7670E553
-6E8985B539A753463CFDA12219B502714323741F3A0AE9D7FB51ACD312FF3538
-E0E0CEF015CC6C188F498884DFBDAB2DFFA1BC8BD732A65145E99FED1045DBA0
-C91CF9A53E4A5C1DB1C4C8235D80321C73F76DE2F82C80BED05798D7BDD9453D
-C1A61B0AED9984DFAFC130AF735026B7A455B0F549EB48F60B4829B3ED39BE55
-0C6BC67693FD84A588572A485305485E754E71F30A360881392C435A5599032F
-9BDB950F03CC4974290C58889E8413D32EBF54CEC76E07261AB64ACB8D1F9B66
-A72CFD757B453AFD53C43CB87A9676B0A95F60CFB22F365382F439E32F604BA5
-014FED486B57B927F5BCF3B97259C284C7D68A87A4269B24F6440C95B46BF8AC
-3580814D8511BD4CC3F965403D98969EE2C64B068127DA6F56F4AABEC1F231C0
-8221EDD2AFE29876A3CB64FDC80BE31555A313CAF76767C84605F1C5177E669C
-91F7C10360652851CE5999B30B234B355C7671FBC2ACEBE035891700A4B14A76
-F8AB9E9B5D7B93874739AE9E894BFA1AB0CF689A55B3980000D90199C8A04336
-D579C02EB1EBC37B48C7AA69231F125A5C70533A227880F1491209E8527DCC9A
-AECA2DB80A334D9D56721622205DF3F3B5C5B8380B8A2B6DA52F2B8BCAC1377E
-E54D4D12BED531B1A77E3DF48F07073DD5E2B0D0AB86062BE345CD570093D679
-2E7372C6313AC353C1C44C0B3EEE3F56CD519EFE407ACBC9B6418512662FEFE4
-4ED6948D34A282541333FF86D8FA8A22245A53CFD197B559E959FDDE027DC91F
-3DE344F4258D10CFD36AF35898CE83A1CE8EE387A2925F286A1AEDF311CC9AC5
-E3FD676DE98924D3D02843478879AEE2B52E59CFDF3F2818E9594D2D3B16243C
-97B62D70108B91FC76319DAA69B58817442627A73C7C6866F3DECF147EBA4022
-B19B94122C081EC1953C91A0DB2C8447268BA769ADA62EF540E2AE8A177DD572
-77D26175C55CE90347A1C238E648CA338867895149404451E4EA631429DEB62A
-C2ADA338686FB7D64C908400CA165B689AFBBC25AB8178D5653C091F8BE9E9BE
-46481D4436D2890802468539377FB38EE709377B0E71CF3F0D0600988F42695A
-481D3C73C8AB83A6BA9EB32D5C3D359E12EA325E56BCCD860B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr10
-%!FontType1-1.0: csr10 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25429 25707
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr10) readonly def
-/FamilyName (csr10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 57 /nine put
-dup 58 /colon put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 73 /I put
-dup 74 /J put
-dup 76 /L put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 86 /V put
-dup 88 /X put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 185 /scaron put
-dup 190 /zcaron put
-dup 218 /Uacute put
-dup 225 /aacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 236 /ecaron put
-dup 237 /iacute put
-dup 243 /oacute put
-dup 248 /rcaron put
-dup 249 /uring put
-dup 250 /uacute put
-dup 253 /yacute put
-dup 254 /quotedblbase put
-dup 255 /csquotedblright put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-44 -250 1111 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A13ACF068469E92BC111E5E809
-0E489E43C83DC29BDB053C4AF9440B668638D0EB64D2976E6F7D6472CE149020
-5249A42D7DBCA06030F48694F7CA0B38978998765D7E7BE1D365613011E79D8E
-DEB631764D47D1F9663A46A0702AE1CE700ABAC55A77DC4472405C469FCE7CD9
-FF240937B0C74279ABCB8583B4D1CEDC2856847F4CC2BB267318451B79C1AFE6
-6DBBE53C3CBE648C7E1554964DCF29B12753A8431E0E0793099E24E698395683
-346C2A1535DD6D0263200E9F1B76843F139EDDD475BEC3EB84BE3E1E664EC01B
-63B5EC60E6BC15EC7134E83F445BDF0C06D3AFA7EF773B48CD9E51AC628172E6
-D4D4D306767B31219D3E545A0819F4429C34E598F8A758719E02602982D87758
-5FD419D175B959787D3707D1467AB66BF8BEAF14AC38E07F6B90BAA760BB3807
-F83BA97C7C696849BFBE8EF51DBCE39508F288CFCC9A00D3534B62F8AB995AE0
-A2608EECBB5C156F4DED7195DEE9F66550737765DBAEC14039CDA155A14D9591
-B7AC0282147BC3DE8ED0DDB1280C7A23A51428C250F859584BF2DFDA68E82E09
-3E18B41374F224F3EAC407807CE5159AC61DBD6D308BA0FAF841AA47D482D8B0
-7B8524840E786C67FA7583E00445EC83AD41C7B1E472A1D50B243B4CE011C530
-3906853E6C1BE90D5EA39263010537E6C648EBA7A2466B932679AB6947C7423C
-AF3A9935205B938F01E27D05E80135421D7D1EC4D19A7395D3188A51C8E9877D
-F0469202E944082A535376DC326EDA7AF6DDC3EE17F2E7C122A20E636094E7A3
-7529E37DDD8AA52BB626457C8866F1E51D8D6BCEA4537FC25299BE67D93B1A10
-1D51460D7E65D13F600D76FE5FB754ACB8ED7DE1B0C7D2C77B6DD17766E680F2
-D4777C33A6DE4D9BDAEFEF00BAB905BD7D67725CB1DC8CC08D858D627E34E97D
-F1AAC072FF6DE0C43F440660C0532072DAF181131FDC34E56F150701F5DDE8D1
-022298298F2AC93110EC8789D08F13B0E9060D0588CAD443CD60CE8C633704D8
-2BE338409F1184AEA1D124295A6F92E7C6266757138DD1B9BC9237E9668D963A
-8D65E677EE4BEEEF32AE6422724BF6B8629280B29AF420D01E99BABE2226CEF7
-C0120B44F078E3F2A8D4EA57ABA69A20AAA68E2CEEE231A58AA558BE6DFA35F5
-4665FE35E152ADFFF69D39E27807B9B59516B2A02E5E133D99CC474D96287A2D
-BAE8099252953EA5AC35510AAE4F5FBAA1495AD9DAB8DB3C7013BF43B3A0B76A
-B622F02E0E38E9882EFE89392FC3758E3E000FBF9202351C7E724AC7911EE748
-CED61F51AB18F71FCD554E1506613598BD79DAF036D4C569CB28FE6B77975D13
-DB39DE260B1BBF23001D95C0DAD9F1F58BDF2666E644A9E1C59F5B167B0E1625
-6310F21484C7B5884E2B6B3D739DF979898CC86D69E5D786236FB6C11E9F8D01
-D4F5B5587FF0F8BD6849BD36D075483F08FFB9324B16553994EFF998643E8DF4
-B7CC29B0F7B8603CF9141DCEEDDEA52F1C34FD9654382A96EF26CAAA6E6CE24D
-22F17182EE505F2C073BE8130684E4AFD188FBFFE1FFCB8C07238A90D5D4A457
-3EEFFB214693519CD9F0CABEEAEF907FDABC9B780F8D5121B7D86A135F93EA55
-53BC80DE989B3FD5A0706E311073093CFD7A9EB6B8464650803188F15AEB63FF
-2FF780CFE5DBFEB6351B27987F42C23873DCDEB50259EB3519172AE7E169FA41
-E7573D24164BFD15E2D4DC4B3592085CC2A830F6927982CCF7DA352C896403B2
-B2B94270CCB1DE57B9433A978776F4398582C1F4A2E9E556F2AEFE949B20D2D0
-F8635703C7E82FBC4DACD035F619B5B1C26C511D0E4B9C2EDEB211E7E1E495A8
-8C1E11205589FAB0AFB2BA56B93BA080AEB25BF8271913D429ED49774092C9B1
-0F2F5D721EAC66CC98D6C3AD5828684399E5205A5898F40088D3359D8A88854F
-D60CECE3FA9D5229E4136A52190E6997672904D82FE026AA645CB68589E96A76
-958FD9F43444CD52E38E492C06378662BDF74FD527FB5094EEBFBC041990DF63
-64DD70497CF3C2B2853EE6FCF4F9AC6AB01048A697E7976142F38B32DBD102AA
-25E4E52456F59BCEEA217BA4189749A7BE75E2CD9A54A827E429D40AB28284E6
-970FA89DBBDABA0BCFD464271AC02CEC4E763350F76D505E63CC586AEB1E386C
-D4569562120C19238F0A34150A7059B8A53CE000486D5C43F293FF982EF7CA33
-7643168F6D4CE0A58C83C9A4F08AC900CE3EE4A6F29E3DA1F9E4E17FAEA3D931
-87C36544F9D51DCB4E2D02CF6BA094B3070508EE0C4E7AB6C3C83204DBC0C0A3
-E0E9D15E7C00039E5DFF9490A97F15D56E7FF08FBE21EC0E16954A9CF19A8116
-9E76BC205FDB48A226C05D2AFCFE215ED9F308D8E08153B349988FC654E86ED6
-86AEE3B3A3D371BEA567FB49F6C5E2BAE55D81A295CD54A63FE2415A8751C17C
-731C029B71811947301CF12D757AA35B14799158B6E503D18549DBE61814B507
-8DB8F4E8761B7129873765E50B0BF4161FDD4891B087B9FFDA26C03A715484CE
-7F431172289B7D56DA52E4C403FB8FAEB83EE3DD7C0B425BFFD20CFB6942239E
-75834271DE8BF6DB0750E373145D581F4DCD16A89EBE8F2274EE017610C9178E
-89CA5C44806EB65A435E7316BBC948D2808662C06FF53312CC596559947850FC
-2DAA795F2EFE5D23991F4EE83FE246BC7008306DF18789A6C351087B06129D2A
-E2F69E58AAFE03C5E58634E934A1D1441AE14A8B8E076371FE605167A88558C4
-FBF440F4FF6B84BAFCF17BA81A1825BAF5F45E94BD426E20B0E7667FCE6242BA
-334D47C94998ABEFACC9E05DA3882A4F2B2D1C9B1459AFF8357E7EF555A67A79
-A4DBD1334783A921EE44D7692E28D350F4B2E3D36A7510F6AB314D72345D0A4A
-2E6DB5F979806468320CA1B0F435C024B9515C62CEC4B916150EBF76396B2930
-1F661AAA1F29B38ADC4DC5D438B3C125F46295549A00429732DEA6BD1075D1AF
-B680F39C70D5CF2A318059A253350FD2B7DAD1D2A2C3730C1FB07218B4C0A2DF
-16325B13A97016294E43B292BAB077BE7BA087999E39FCE9D3ED4B3DE314AD94
-8437391495593C6A610562D8EC86E29BBF2699C88060BA6C5877EA5B6E9CC5AE
-D38DA6F7AA97EFC7BC8AB81C2CE26CA0A1C76238CF69B612E765CAB2F0D12EAF
-4FDEB0CB4C0C9A7FF9995A177F0147F8D7A23B0EC553DB8258EF4409467EFAF2
-CED9E844D8354FA578EBF6C3A0463BFE56B7A97A14D77501EF49D585DB8A37AB
-8B7EDE4BDFF79FB0098F1E9ED903A797E749F6C532D4BC065B50A8032AD2B5D0
-49B27AA43E64E9576D10EEBAF68C312A48B57E1D3E5E001720D0BD6174BB79A0
-949121BC9B8BFED823FEC663FAA379A84D33D5A0942D9C2CCAFC90F2C2E66F65
-992F5C939F2606CA3B557F90E14257195F7EF10AE1A07BD2D78E94B3E04A6627
-09919657B83F85E13E6AA89F45028FC7C5450028733ECBB01FD84EB48F0535C9
-2D36ED6D30D46E74EAFDB058A3C0A922112381C5736F7B4A96C5662D1E99E2EE
-CA473D9172B8FCC259E7ABED9E70A4B18C81534D8A1CB0A4D2E43EEB0E910A1E
-58E639D26C6BBB9FDC4D95C8B93D814ABC1AE488D7821670D2A9841213B65156
-3725FDEDE1D05B5CFF8406FA5B8E161F2FF29E289FBBC065CB26ACC3ABAD2728
-2A25BFBD35C767E3EC04B090AFFB390ADADBD8969CBE928A26F47D257FBFE047
-3263C06D2F3CBE7B2FDF1A5A2C07F5FDD48FF0D6B90555C1143440997E1884BB
-09B9AC13114EF4AF064EDA84E60683FB3909D0723E8B4A01E37869F2599BF22D
-004C5F4D6CDAF5102D81E304CF86378D31FB717CA07948736E94B9DD207AB3B8
-DC17C9D9391444841EA0267DB7FB6D9D71618DEEA71A16B6B19AA1E73C5D4AA9
-1A9E8E81D90A22FEBCD371E13BABAFCDDFF49795936A8A73DA6D6CF7B2951226
-76165AC0B0597FECF80360A3D38AC35729BF0C4DA273B9BD832840ED67986FDA
-79ACE8E1EA9ADA59F1AC9E79E37D0967592C3DDB11F43AD29C4D572710529A51
-477EE08210FF77D629E28198ADB05F3572607D6067D02A43B589CF14FE604453
-1AD57AA7FB479E9F315FE352F52F55FA1818AE52ABEACEAA65826B8B427CB850
-C7752650F0FDF3204BAEBEC0FB10200333100B1360808134A5B9233AB2976DAA
-144BF91183B9B0BE884270AED570E38AA9A03271F76748C623535887BA4F028E
-DD53BF16328BF2EC017E0A96A3518DCC042E9D18B116E3194B46D0146973EC38
-5B596D8FC11ABD47FC843593B1FDC91E8C94785210F692B94C47EA2E5289106D
-FA7FCD9D49F564846B6BC2A0B84FBF11AB5F264BC418EF311B19955D8139565E
-51E8CB7C814CF38E2B3660E36DE42F4AB5039D7EC482830212C4C0E90F349320
-10E69EC477C3C3050DEFB631527C7949AADD3CF1E759D5ABCAA5728CF9D3A671
-17F3F1A128C19BA9577E5D6180B8DF88B5AF73C871CCEA69765F720CEDD80895
-4FA128CBA32D9035DE35A55C8CC6F2652A7CDEAFFFD1AD8B7BC9CA337D4048D4
-AE055FA47D6700B13F0F77FDBF521E90FAB9137035CA14F22214CD666E5A054F
-BF90ED967EBBD42667B6A70C300C6C088FD3A1EB7AB071DC11471CDA712E5F28
-3BBAF815EEAD019570E2CCFA3B79E27FD2D1711D49EA6CD16BF2838A9570414E
-6597343ECD8D81E726CB1BAE0E0260464AAA6CDC753C28CDD40770FB832B0588
-ED3CD94191A17F6C2A28D397E37BCEA641BF19005074B96A6D5865993B95A4AC
-87144D359BD29615A09B10FF8E64C36F18EC3D7BFDB9EF8595F25AC04D3BEBDE
-9DD8E38FFCE77504CA2550B436247E625E05F98176DD0351FED294AE41B95248
-F73F48D873FC9E14B0D621E26BBC6D9643E6830C50B5F605A35D0DC158CA4E64
-D0FDD96F5B440315AC31DFCFCE0E5325538B7C5D2DBA26A0DBC7F814545E6C2B
-044C59EBFC750E05ECE80F681970BCF78B43363F363CDAD56846D39FF7B8AF06
-DFC9FD6E4E3DC881AA117BA4DB844785BE6820954DA832F780C603CEBF1C053D
-825B42E1684846E5D4CE2AE36CFB6850729212398A7C2B0DF0C992CFBFF1EA1D
-419EBBD3097FA8DDCD4C276BC05E747770DC6E662EB317A447C6332576283CBF
-9FBE6CE58F7232EDCB3FEB1DF98DEFBB8A321C412234E827509812B975B54169
-4267C6F33D086995CA10F0D8AADABCC6E88E9C14C2F557B463384C6BCD0FFA04
-8B529AD3CED7C9F25562AA9D30E4B4FDA2830444CDEADCD1712628C3E32BC2CE
-3A617134D5DAF2BB326F0657E1A9EB83B748A9762B7D201A63636190EFB3860F
-DFADF2F52BE3A14D279E4ED61065F04F2010CA97AD2225B4CF67D29B095D2AF1
-91EA03C33221A41F68849DC99D1BED457DFF0EC63225B86AD4BE98E1B1F9EE81
-13727EDD5CAA1B752AE74D8FF91D8E076A4791A6BB8D2D2F7B06AF53C3E018D4
-97130C3893E7566FFBBC7599B02E5ABED7A91D4CB09A606EDCFF95CF858D0A23
-BD841C186E58FF4490F141F5CDAE6E9A0C391E0E832702D8AEE13FB2F96F3AD0
-A8AC7F6A8D731CE02C54EA27E8010E971B3F3A4E8A445AC77554F72F7D3EFA70
-37CA9A477DBEFD3E036D631CF8EEB49AF8B8954DFE4DE2A847FD46DC2EA4391A
-D15AB70C5EA12ADB82ECFA1AA7DC5E0BA23A7884D171D70E04C6BD782115FB10
-034D35B8E09C3CBE95AF635DFAE35A781FD4649DBADC44E3A5BE7B513104976F
-05DCBC6B67C72B6478F6ED396B332BE4ABFA83B231FDDF2304AEEA8CB64E315F
-786D899A946ACF9F178993220B23A2CC0064824851C19087541B5695FBFF3F10
-F339504FE7B3510E8EA074D81B4755ADF13CEA56CC6F52B5707887230F9F2CC5
-FF0B14671F0D8F320A0B1B888473D6690C73C7CD3A8DE9EE6622F4D65639895D
-BE9599252130E599380C506B64E7592552E97797B3A660F7300E917A523F4C44
-5C97D6CDCE2F0C37D1A801971B520CF868927BEF99DFA4C275453B007797C3F0
-80633D1AFA4BA21BF353775EF33AA29B55EA7E49A72A04362B14F7F4A64ECA70
-37A6E2FA2B9E4D4B1F0212B13A7F53BFE029FBE28DFC90496FB495B632CF7F7A
-3AF18E92B6EE59BBCACFCE9507BB7D7D0672EFAFDE3C2542060CA62C00321A2D
-5E587D6BF20B269948816D7295248A8B449E5CE9E759C46732675443CEFEF147
-D3DA1B635C50826FD8D7E7560B7884970135CAFD9032B12A7362A48E0C48524F
-36431A1FD3A186C21F07C5765DA398A7F21C9AA9DE29E306E7441BA66A397240
-BB0B66028BF8B41F355D85CE6C35A280C5EDBE909959C2FC12E1F9A0FAEA2EAC
-F356DBBBA1D22954CD6E4B1A336FA62EC0F8396ADDE5B54F900C12757B40BC3E
-D97C418A354A113DA8ED9940E8B5260DEFE9971BB88C44D186E50BFD561D399F
-87FA4E224FB7DF1003935BAB129CBB9102F3206A178AABABE5015438BF77D01D
-D8C8C6A2A49E63AD0FBD24C0ADAB62CAFC7A3D28497912E8052296CCD7C50ADF
-2B571444D521786DD9DC3F310F673D8AAA98ABC645B8495DDE81B0CE81D1B28A
-C933D756DA68DA9EB06D60D278335554255CDA9366C9B1276C50DD1AB4F57BAC
-AF9F7E73822AF4883CA47D0B5AC633C3C39A0F06E8C9F9AB8433C2BE702C9CFC
-4D7180EBD1C57D328965957F1E4901865412A88C03CAF5510573E2C8C5EE241B
-941EEBA6BBFBC5FC63CE5296456BE6179783417A7B464A5463D23C392751077C
-CA04267DE0F9009E44F5C44A9527CB61BE90E788C00788985EB1BF555E168F6D
-E01200A477E40437FE5B6CE47D9D963E3B802D475D3295EC585C330B1631C710
-2F6F2772FB02E9760B4838BA1A80D938337D3D039A4F5844467840061B5E7AE0
-C8FF98A9059F958A428572291A39DFD9BFE05456AAB934BA4CAFFB8609D6AF97
-27379C9F52AA02415ED61B5C2E8BF0F0D8A398A138E5509565BACBF64F627209
-272CA73226B316B8F3EBC88E9ACCBC2FE89284A72BB481AC5007A0A3764CE45F
-AECD6D7CDE40DE55C240803F47BEFFF1410138B76C7EC260341231A3A2415836
-3937D3C78D860CE42152BA56A8D3B9E7A7D928ACC8E1C4073B3DFCF4CE376E89
-9AEAF522A4C105BDD282DF24E77DBA2456CE4708A98ADEA4BDB01AB33B319936
-24C6DEC00EFC84ECA780CF5F80AE89476D4B11DAD78002C072C0F619DD44864A
-0076E42891A9C582AEF57A8EA9AAE55FD7733E94718ED0AA85BDBED5FB8DA90C
-CE392AE635D6085E8B14A48BBAFF262919D680D4D7E57B0F5F50D18C95C5221E
-4E5A23FFB0B8B3EECD0ED4C6FBF62BCE8BF99BD909D2E0477E3356FFA72C79B3
-B6FF3403AEA2293A5BBDD97AD7E25A2C1E025688CDFAD9B310C4A1A18522D2F3
-DB8E41CFE12C70A44393FE47DB16127D1BA746270AFBBED0BE14C36AA59C7B06
-E6C8565399DD50D212C5CC0A9A89C3906821B4146C9351EA5A8900438F52E460
-3ECC7E5003A5310EA59E8DEB61E500183DA13DDEDDD070EAAA729410B49205BF
-2EF8B022CAEA6989557DEC9A2956CE4672164E50E5A528401ED2B2A7243E3E57
-25A5BBDEE0242F9BC6BE2AB19E9DCC05133C3F9B8C223BB4A33C783D2DAA6272
-506E39C48A0573D14F5BDBF0AE89044B71F7B069A13BCCE8983CA474C6B27014
-5F152C4AEF70816D98E35ED962E12B992EA865087FA10A0F90FA5738F55A9D56
-032FBAE5BA8A6F13FC7FAA998C48F871FA4F38CC0754824A6DFB7CDDDD201925
-727EBB337D7D89DC70BCBF9D38DD6507217B13C1FE3E7E0D6E75251BAAE80933
-BB875CBC8D94BD6ECB76B9F9A4EA0F8098FE2D8CA9C8F61CF1863ACA4DB832CD
-3340B70DDE8B43E7C49BC6AD929145285196A543DC5E671F103B2BD423ACFFF8
-4D097775B8DA11F54078B2E18A9200B7378E3E6D4EAA56DEEC5DEA7098B7ACD0
-0628F4636AAFD827251BCE95C6B6471D7554A04A0C4D14E2CAE6A7F7144315E0
-B1D69E77B1786D613730BC66D7CBC12E33B29CD60172450C5D6AFF22B9281194
-651D22D0F29260DA3FCE15832564D6B854D8AB3180519A2DD2261075AD36D5C5
-04BE31D1456E55ABC4DAACDB8E8EBC88CD7C3C36F7B7A9FF2FF6D5314F00C582
-E7E29CD28630E9EA6D2DB60E035B62763B3A15F51978E89417404465D1292727
-F0F435AD60FB9BE47D5AA83396DB84940ACFC96EE30B8C3E259F0C4D34C511D1
-DE3504B5AAF2A3AECF79009A70B5C5B35407261E2F64153293D308381AD88CC9
-0D9A3AB4AF7BC6DF74FF48522999F8FE4CDCA13DF731C04B34D700883CF98969
-7B9A64E4EB1C2B14880366ECA8568274D13D37CB8215C2A22D7142076507BC7D
-A965B765520EFB0090D6D031B4C1E8E35CC0E97F03F5E501A3595F45D983BD42
-848E92FCE8D8670DDBD9B121FD33825F517AB8063B982B2A380A1E4D4B580836
-2EC50AB1C9AED5962E9404DBDD252BBAC820C0146282F538D47035F83F1D5F47
-48179848DEBC948CEB15927EBF124BEF54141FCA877E8044EBA5C713A2FB0D97
-C8DE7F1419A5973FB8299A963BE9C0E439934E18E02FF30A681E34CDFA4728C2
-5690C8BFEACF81FAE1696C205243E85244030CC02CAB594D9AB198DB46200013
-73AEB2D30429653CAAF846DBFCCCE73FDA8B70B35ACBFA1C5971DDE511AC1DF2
-AB4D4A31087E6FC88DCBC9DD5EEE1C21CBB7D7C5FE5ABF68EF83C63A8232ADD8
-180363A9FA5E74F331C133B9576669559B7F6B39C1734E0931599438A791FFF9
-430F4C5B045B3215BE79689853CA974DDE34545F593C561DF4A34B69FAA6993C
-FC99D7AB11F984BA40EB82A581A86510D771AD3CE23B67AD943BD275DFA09AEB
-0C24CEAAC75364CDF09D91FA419F310A1FAB424470A9FDCFB95472BE2C9E590B
-395CC2F302D82397040FB86F6EA20E3227F979DB88A8E1713774364F2FEE94D4
-7025C70BDD1497EE5B7528888358AA4B0A777015F52973EF0D681188E4146FD0
-A06E8149B81DBB59CB4AEFC34FA7CEE45A457B1943CC9D1D69F6B4A707BE5EAA
-1629B3D404B3575AD4CE665C9B55D05F07F61EE68747A5E53AC6952E94337FBB
-DC622131801F4D4B292B4D93B03E8C6F235FB20C9CFF0FFA67D1CB58CB8D353F
-B529B582681BC6C21027AB99C9B522AAC0BA376E9341E64351FA8F32FBF9B38A
-C387F667F8241A4381D5CD5714363571AE05C783E7610F5793665AA0121E25F0
-13A5B2047CF7F72FD33794DD6834BCEE0CFF83C20A75A805A6AA9C2691B0DB91
-7F0E86A0FD4F4952B20A8863F596830205E6D4F4DAE31C1D7465135E7C5993E6
-28139A862AB456C1CC3B64529EDFC5BA7144BA9F1436D1E39BE55966BFA4A2E0
-8A3162C6499F69686ABB6671CCEB0093DE4CDAAEB57E46CF10F56601B2B8BF39
-B086D7A38F0AF806ADE2382D6EECF73213D2F065BDBA4E1217CAC791F004D8B7
-C4FB60A123D28A1C105350C02733EFCB9851B8AEB2EE81B83BAFB6FEF159C015
-6501CFC0B5424FBFD8378C0409857F3B68C635DA955039D6584B9E0DB24D4A34
-D63CC58884E5C0D69BF24A4127BB5A9A0E7EE97AABF485E98E41D76954A0F3FD
-DF3E46548711C138876CDA456B52621D08499FA2DD6B4EF6B22737A8ABFAADFC
-5A2A8B432B58F935F3559F2D66EB7CBC9C9C6D809878648BFB4074ACA8DFD108
-38E893C17A78D6667E1FE8F53EB6AC52415066E547456DB2C507C9BEE07B78FD
-6EB3AD568B57FBB4ECB312971344B65E52BF1185364F7780C933ADADEAF3CA25
-8F4116225BA14EDDDDCB83615C574286869C756F46AB827A050763CECC9AA179
-598A2C78515A6F57C75F2A753EA80D24CC4063334F5FEC47100932EB937E09EA
-65B7DD659A92BDC3B2A1BBE7C62DE56605D30F726380D054D339D09E47E7D2FE
-3C89FB0AFB847E8EBE3C9C1FA2810A75E883FF3FC2F30893F8EE00A7B85627FC
-2C3B82E15DCD7A692BBDB3FBF875620753EB8F304F893312AC7AC15A0CC3A554
-A30AEB5A9C3F43FBA645FA107A24B779F2D76DB46718E8FA113B090E7AC59D64
-F4E665C2807224001DE73FF9AAC2F020F446D481F6BB9DDFDD73EF16CF84703F
-340A0C3121BD149AF43A5F96225D5762152C9EF4B2A72F45489369FC17E9DABE
-C41F435F2A8A53406CA440E68F4ED87E59373BBF72B0700454BEFD291E44C69A
-A0F6EB04B28C825F05EFB126B974333AAFA0FEA664026B39A3DCFCBF792BC687
-D42A2EAEBAEE23247196B10A900F04CE766F889228920087B926C229D850582E
-1F5F1E0FB2131D71F446076D392745689C490D1DD85FCCE060066BB610227387
-ADFF65354C885E0FDFBDA9B5D591EDC9F21855515680DD82770FECD89D96D708
-AE59B5254221102BE9BC15E87249304E2CED7965663D346B9F21A0E949C59275
-8EC45AA17262314359793E7DB1867AB37E4E2477D2D9AC4EB5E518102AE6453A
-38BFE32657EB0584259A2A6E06E3A926CC731ED087AF76CB47C5B825536D4DA0
-9424A09333DB6CC3401A341A43E54421B7BB368A6306621CBBD09459AA2665DE
-C19E7649A73FF296D1953722F77095F99165730E6874EB72383B9FB19A053813
-E194E3FF6CEFDA95C4848DAFB27CF40895B6BB6D308027F5385EB7C3D6606B6B
-F177459318E5BA6568E57E90AF3CC94566F46BAC47E709B707AF6E17628F53C8
-99B98466394DE81F07F3891118747F21AA985BF68C729AD938D5262E8B08C88F
-4712099E776DDD1DE625836D4F4022A5FF7C73BB6F3C2DDC03374E9364E8E0B8
-A43686D57D51A1143180C8F1AE383E8AA4C6441F1A286BF0D0B6F1BEE35CA73C
-C79DBA2F06D1FB9AFC34A08C0FAEB61C333FE041EBF64B371629302DF5B608B8
-FC68DA214BA37517CC3B038F730E94EC633FD882AC6189B514051BF35C0201C0
-043235B44BFE40D0158F531BC18A87826AEE4909A7F8D8167F280B35DB84D266
-D3369BD1BFD1805E104438BE655631035147FB15E14A75597D7D0CCB0442BA82
-A789EAD3B7E1D071ADD3EBF5B68135E99E016C64D29E907FD75ECA65C371B560
-32E8B63A16813B4BFC81B988291F9412E8795A91842C3074E053532EC177EADF
-FB2AEDCC91169764534045E81EA7B7C5717A48FC7297A67933C17D95CBC0DF6E
-1CA45DB8C6BAFFD25D95E6E73F8083F8C4FAD2FB0AAD37C10971BBEFC7C11887
-0F7807B6CD13F8F7F20B415712161F0DA401878A15E65155E2910544838A6E36
-4EC2F9715A8107D22CB41514D04EDEA6B4BC382F9DE9780AE08AAC35ABF77EF1
-AD7E113C532954F4B5CB0185C31ED30E37F857D3E114F946C2E7BE646A3A8E4A
-6E5C939A56D928F3F7660B158201366A0E495648A41E9EAEA5F3A9CD26B2BF46
-7A1185D3E0AA9D2175ABB2E37BDB8FFA082398DA6BA7172FF76DAEF3C31852D4
-E0A6DAE06F0F7D5780D64926D52D080316016B2AE7A66A3D39C8867CB36C20B3
-8BEC0FF590AA4BE2BEF3AE99BB0E9FB94BFF01867E9BF085195D75F68A359D74
-F4E0417BB21D6C69AC9929387C72B8800D143AEA0B8B67729E21FEFDCA7FEBE3
-1F1C418294E29D4B75203B3F0F39CF6A26E9D197EE881E7B85DD321B0EC23A91
-26338D88232AA69F8F710B5DF44DC50199A303B8C36131EF9D088888C0DB4A39
-740FF0596E3024961754BD50B0532B9FEDD302CC882DFA28C92AF330E6D6E2B1
-388132661C84D385413489D7BD7631DC14AF5432E8A59DC1E2BC43B37E35D319
-DA511EE03232D0AB672FEE33330492AE3B03E836035190BDC4A618627FF71B44
-E6387F0FC451FA841548B0C4BF6042ED348E9A611D035CD16215A86D6ED23C4B
-2EBAE80B3622783447C001EFE40B8AB189C456269018F0BEFB2660C4DBC586B1
-1977C50A287416A3160B7E8D243F1DB3402318FF6619FAC24AAE28B8F9AE3162
-491F9D69A3E22C25B3B6030B3656E3F4B844D30361481D9C5219C42BBD96F761
-E51C92162D75111A34637D15710B8DEAA80740F3A6DA0B3C612BF836875D08C9
-C4B1BF67D10A597AD6549B48D521CF99313613E6CA5B9D0602943F08B598EFC7
-83A96385EF4C04884BDB737DEFC78154AA6EBE5848811628D37E37DD5407C636
-58980E8F07F486E524EEFD4A6B79C63B7E60D262D5170AFD75F6AC87B1B4CED9
-E4060DAC7AAEB55454E1804C990ECC55108CE446A95A6256AB35C5922A1E9AC9
-D16ACB8C8552BF36D5821197004A306693CD9906AC1B361BD176A1394BF2C1FA
-F9B755333DDFE3A8107CFE63FE505A775CA41CC9C8DE721BCD0B86D6E0AD6B93
-59110A1A40B88AE628312430477E42A22D1E822AA8AADC7E104934F7A708A4E2
-99FD4EFDC0A31759B05D8804E131CF80506D2D6224F7ACBD9803E0C1989CED19
-8ED2419ADFEB05A4ED2851431FC350D089DA843595A23E6E4F974DC04773455C
-6993ABD558E6E751437C1C4A5C3BCDD318E6F218253A90B9E0623B4A2902CCB8
-24ADF4AB8E9FBCDD826C6A8C0F0E995494DF9438CD2EB554BC43F4DAE80D45E6
-6F3A471FCD37B340862AD3B65B4A2DFE543C28769516BDC0792B0F73984EB858
-BEC8DC6059D12979245A5983C3119841F85A058C2A1A3E66C66316F7DF4600DB
-345196611661C0B7AD1A8317BDFCD327D42FA4317A0FDFEDB861C8B36C56E418
-62F3A95251D309A9EF43824B1E3A8BF2A5830BFD6205B16BA2C833D7FAC1653B
-1A8F23F6FCD780D50C19EE002E6DB7B2E94267D83C4963FCDB1AEAFD8DE8D57B
-0E11CB7724AEC60242D3607FCF18F8524396590854B6C96E27CB8FA9E50A754F
-7BAD95EED4BBFFB1D5A412CE4B76138FEFB99C2C5F6DA6EF3EE908BA3ADF0F18
-3C22E90774D466C85D2F36221803332468D45D31BAEFDB6D0B6A64E5A5CBFFA2
-13D8E884EDE31A20E8BE35C833CFC67DD7A3AE1DE7FF0F5169097914D4A55BB0
-8B732FCF80B44464BAE048281EB960C47B395DE70131CFF8A58D54E855C078A1
-C31B12048EA012B369D6F478797DA24705F6CF9F7028563E74C3F80B14E2DEE5
-F4EF40DE6161D2F506CA4402539E180B971C400C5EC7A3F5F5713A0DE8E6AAB6
-E707212472ABC55684E5F8176D929C58729E2EB4D85D22723D53FB13FA6F6334
-999E488CED018D7925B48FB3EAA330A828E78ED52DB395FB1A31CD16E26B0FE5
-2EF2B161DF9C7B95649C4441BDB28A12A8AA385DE290AF939B4168C19D94F1F8
-FF40819170D0180BE7AECA8998018F3654C86323BC592C33103B749A559AD67A
-02D6E73400B78D0BD275B69A2185EFB4FF6B15A1329DEE6334C12EEDD3E36DD8
-E84092750C4595B36A2386608838372B005ADF161DAD978F29DF270F3D81D1A2
-50D7F39B1887BE926AF1802FFAC2F3C4382A4D8F55887AB95617809C734EBEDB
-17D921C3C69D14FF8A24B09C0F2B2BCFBEED4EEAE6BC662D96BE4FEDC927EAFA
-AA123213440F7A4B6C45F57691A3FE9DF976B15617606098861F6A6F9B8CCFBC
-567618F1A49E2DF5032D96512F049B91950136E258560362EDB40DF4BA5F4B40
-6350F5F70F441EFDF5CD6AB5AADCE9B1FD4BB2B109FFE63A68245BED5C205010
-5BB7F8460C2862854EB6DB95685FDF53661AE742058B1C81C14FE1770EB2BF4E
-16CA3F28F5208719958F5021F4324902C28AFBDDA156E28D9676825A5AF759C7
-AA20357C1E594184D7734A521EA8229637999A0CD387F6B2D4DE0F838DFB7B63
-F7640C77AE71EF2AC68A9D435812DAC5E31E81D866A03A578108BBA017951E29
-147B14D6A15F97C2C1EC0C51C359D4D62B80E8BC4B831CDD2E971BE5464C6298
-A8E28A3AE6BBA6B44A971DCF1F2CDB26DB1B6875F0A65B8CC914EC5CB6772E00
-920C95FB2AF9EF5DC95518B68339005F7DA707B9C1B44F9DB941F4D22E7055E0
-66579322F36A9A5E506FE0E178F928A6AF515652484E7070231D098843263456
-92B40CE5BD3CE28896313F1EA73AE99A6380603F35B08481E0FF0A2FC8F1AF0A
-0C0D3FDFBDA13A7F364D29A6B500D729A994CB7622EFA4BF93FFF6A3A49B6EC6
-2B1986723F123BAEDC7269F093189DCA4CAD75F1584D080BA385B3B84980FD6D
-D139AEE505AFF39E47F1DC16EBA2C20CD1EEDB72BB1A5FD81ECA56B113573B8C
-CF1C233A7EA26D3074CB4BF2BAC56DF249A39D6F7EF62A07489350BCF946F993
-31723CD3FF4EA41A3D474CEDE8227D2AB1A2C70D15A16596ED637D3C6D5D328B
-83AFDD4C2319CD3341247452C659DFD147C58756CFA974359410D2AF4D84EB72
-40B46C72CE1F2EE4D48C5D4162D8A0954CA02EF01DEC11D5F7C11E0D2C4E2AEE
-6C9C8998ADBCE40C4F86AACAD030D0591CCC819646C5DEF7165F8FA8BB9C4D6E
-50670E876294FBB05C6054843AE00D83D0AE8E85F916F81DA3B1489098D022F6
-3595BD55EF088DAF561D8E81D4912BC7ABD4192C3AF7C14F12BD4C90337DC6CC
-6CDF56649DC35B5DF1DA03195194B2BFE29A63A3CF1BE257D70323AFF31E1CD7
-EF31B6E0594C704C3E36D4D4A2A1587A093E9D6CD45632874EDCDFE0E5343698
-48AAF368C4C0821381768C26F41354C9E05C28EC8B5627F672CC79E876194066
-6B5A1B86504D027885CD70CA61EB07C837FE4A41B8C4112D51A8FE4E2D3835F3
-F19E11571B182DEB1931FB96C14C6CB9449DC4A7BBD17E2C1AA79A94A1CFE0A4
-020516897B83202C2295491A180E9744252470579227AD3279D51454EB711153
-347615DD371E5CB16152896E9EF69603B6D3355D265D97FA4CDCD9E19833B5AC
-1477E254CD7BDCE5F6006FC0FB94D3F809B7839D2FF1691535785A5241E32351
-E5DE28B0235DB62196BF757E5AFAFDE0432095956CBD088834ACC57123850ED6
-5350CCD9C76843807150DD100482193E9BCCF6BC1906A79120F9E19D563A5C17
-E6C5C80259E5CEC4BAFAE34096DE767B859B57F10326CA03D4D6A0B121284F41
-CB4F7E15C670CF08F683580122BA4D4396A285AF89D4B49EDB790BD897BA573B
-8381F7FC12A1600BD212C6BF918B5ACDEF8E045EA33FE9A83E70B5BB2F7DB994
-8E00F074613501CB3830C47C0624C78BF950518640B7E075D14A8EC09586550E
-9840D9801D99BC71B7AFCD801BF2CA58EB2FE99F06F26E3B7879BDF63251CCC7
-4319D6B7587CA8EB562E7EDEB4DA2F607ED4A6117CD9ED9413008516535C3A76
-BB2AA38D2189FD82192E1A664D1E419DFA4D0BCDE910EB33D5F942315F2EB293
-6F5664FA669FE2500C18D5B7407B16D3131EDF0D72B9DCEB0DF9C13DE15A0451
-FB409377A46FA52819FF3A5337D724B6CED8DF75B0CA01F031B97CA8B64BEDA8
-5D75E868BCDC5427F071E70BF896606145F28197FF96C1D854050856BC523200
-0B4E54A0A8CA0A579A1B3302FB90800418A5F6A9CC79647433C25F2C408EC28F
-F817584629D418E16FCF3AF74385A6C487E5AB1CABA27CCE54CAE816A35E9F3C
-9DCE3E797094A4C7BE1B37AB410A7B1A58F986213B0A8354597AB0AC5EAD407E
-78F9D6AAD4A84977A359B801CD29A86DCA59F4E6EE94DAC8C31E01C576A47FF1
-7A3F57BE65AE87E343BEE0CDA179A11A2B59817AC637EF3906816168DC3650AD
-6F79260A6C883F089897DE6AF52D180730438570BC9041ABBBEED7D19658521F
-D0DB9934981B9D7D015178E4E10FE0C1AA8F1DA41A9741E08D7267A1BEDE60C6
-959503F156F1CB72A4EA0EDAC64F641563A440B1E9C09F070BB9EC46F59B36C1
-B6AE65325E8594DAC17FE8F9C7A9E9E59CDC6B270673F345E7DF8EDC27094B99
-44D756DD2981FDC96D543A5C9B30E2134F8A74B0FEF696B244F2C2132174BDC0
-3843336CC8BA16DCC2487A7852D5E920BF0B7577E8ED89958339AFEABF855ED7
-196A3801C4C506049188A5656C07B22A673745A53BC66C0937DAF226E62E7F21
-7B11EDF439D5CADF69C97BB9A08832F633DE01CCC71FA541B368DF808808D119
-A2DB3DD6A836BA2A0E1AA7623ED12C8A768431B258AB1D81DC972C5980B198C1
-A41BD3BABA2D019BFDEF42346E728B743C47617599A9EFCCB93CE78C7F0B5F9E
-8B04A31C0EBF5D67E5501E452A7DA687D1D48A62D3F8DB2C59A50F8DCAEC6EF3
-B590A769F86B50E723AF5BC0864E25246AE385D44166027A5FC980A69CF1AE99
-242B18E3F09AD57DFE1F058AA470B9055F13586A968C1F1C88230321620DB180
-09791F2242650F1F9D73A3BDA2EF554013CB2E62DAFED4635595CB5C161FEB16
-BEE47754230FCB58E0F3781E35D54AADEFAFDFD4AD4E0891B6E50502F1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (cs-refcard.dvi)
-@start /Fa 197[23 58[{}1 83.022 /CMMI10 rf /Fb 242[66
-13[{}1 58.1154 /CMSY7 rf /Fc 134[35 1[47 35 37 26 26
-26 1[37 33 37 55 19 35 1[19 37 33 21 30 37 30 37 33 11[49
-1[37 2[45 1[49 60 3[24 1[51 43 45 1[47 46 49 9[33 33
-33 1[33 33 33 33 1[19 22 19 44[{}44 58.1154 /csr7 rf
-/Fd 133[34 40 3[45 28 34 35 1[42 42 47 68 21 38 1[25
-1[38 1[38 42 38 38 42 50[25 30 45[{}21 83.022 /csti10
-rf /Fe 2[50 3[53 39 10[27 44 2[44 42 6[46 34[42 4[38
-62[42 50 2[50 53 37 38 39 1[53 48 53 80 27 50 29 27 53
-1[29 44 53 42 53 46 85[56 11[{}33 83.022 /csbx10 rf /Ff
-130[44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-3[44 2[44 44 44 1[44 2[44 44 4[44 44 44 44 44 44 44 44
-44 44 1[44 1[44 4[44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 1[44 44 44 44 44 33[{}74 83.022 /cstt10 rf /Fg
-2[73 3[76 57 10[38 63 2[63 61 6[67 34[61 4[54 62[61 73
-2[73 76 53 54 57 1[76 69 76 115 38 73 42 38 76 69 42
-63 76 61 76 67 6[84 3[104 1[96 76 103 1[94 103 1[131
-83 108 71 52 2[87 90 2[98 54[80 11[{}49 119.552 /csbx10
-rf /Fh 42 42 44 2[46 46 33 4[42 5[23 37 2[37 37 6[42
-6[62 27[37 4[33 61[42 37 44 44 1[44 46 32 33 33 44 46
-42 46 69 23 44 25 23 46 42 25 37 46 37 46 42 8[62 1[62
-62 1[46 2[57 1[62 1[52 1[43 30 1[65 1[57 63 9[23 42 2[42
-42 42 42 42 42 2[23 28 23 2[32 32 27[46 48 11[{}68 83.022
-/csr10 rf /Fi 18[46 4[73 108[82 6[64 65 68 3[92 137 1[87
-4[50 76 1[73 1[80 11[127 2[124 3[129 6[130 1[108 69[{}18
-143.462 /csbx10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 50 -320 a Fi(GNU)55 b(Emacs)i({)e
-(Referen\350n\355)f(k)-5 b(arta)953 -185 y Fh(\(pro)27
-b(v)n(erzi)g(22\))0 56 y Fg(Spu\271t\354n\355)48 b(Emacsu)0
-251 y Fh(Pro)26 b(vstup)i(do)f(GNU)i(Emacsu)d(22)h(napi\271te)g(jeho)h
-(jm\351no:)g Ff(emacs)0 384 y Fh(Jak)f(na\350\355tat)g(a)g(edito)n(v)n
-(at)g(soub)r(ory)f(se)h(dozv\355te)h(n\355\276e)f(v)h(o)r(dd\355le)g
-(Soub)r(ory)-7 b(.)0 612 y Fg(Opu\271t\354n\355)48 b(Emacsu)0
-807 y Fh(p)r(ozasta)n(v)n(en\355)26 b(Emacsu)g(\(ik)n(onizace)h(v)g
-(X11\))405 b Ff(C-z)0 907 y Fh(de\014nitivn\355)28 b(o)r(dc)n(ho)r(d)g
-(z)f(Emacsu)769 b Ff(C-x)42 b(C-c)0 1135 y Fg(Soub)t(ory)0
-1331 y Fe(na\350\355st)28 b Fh(soub)r(oru)f(do)g(Emacsu)813
-b Ff(C-x)42 b(C-f)0 1430 y Fe(ulo\276it)27 b Fh(soub)r(or)g(zp)r(\354t)
-h(na)f(disk)825 b Ff(C-x)42 b(C-s)0 1530 y Fh(ulo\276it)28
-b Fe(v\271ec)m(hn)m(y)h Fh(soub)r(ory)928 b Ff(C-x)42
-b(s)0 1630 y Fe(vlo\276it)27 b Fh(obsah)n(u)g(jin\351ho)h(soub)r(oru)e
-(do)i(bu\013eru)327 b Ff(C-x)42 b(i)0 1729 y Fh(zam\354nit)28
-b(ten)n(to)f(soub)r(or)g(jin)n(\375m)h(soub)r(orem)418
-b Ff(C-x)42 b(C-v)0 1829 y Fh(zapsat)27 b(bu\013er)h(do)f(zadan\351ho)f
-(soub)r(oru)534 b Ff(C-x)42 b(C-w)0 1928 y Fh(vlo\276it)27
-b(do)h(syst\351m)n(u)f(spr\341)n(vy)f(v)n(erz\355)699
-b Ff(C-x)42 b(C-q)0 2167 y Fg(P)l(ou\276\355v)l(\341n\355)47
-b(n\341p)t(o)l(v)l(\354dy)0 2362 y Fh(Syst\351m)40 b(n\341p)r(o)n(v)n
-(\354dy)e(je)i(snadn)n(\375)-7 b(.)38 b(Stiskn\354te)i
-Ff(C-h)f Fh(\(neb)r(o)g Ff(F1)p Fh(\))g(a)g(sledujte)0
-2462 y(instruk)n(ce.)27 b(\332v)n(o)r(dn\355)g Fe(tutori\341l)h
-Fh(lze)f(spustit)i(p)r(omo)r(c\355)e Ff(C-h)42 b(t)p
-Fh(.)0 2594 y(o)r(dstranit)27 b(okno)g(s)g(n\341p)r(o)n(v)n(\354dou)792
-b Ff(C-x)42 b(1)0 2694 y Fh(rolo)n(v)n(at)25 b(okno)i(s)g(n\341p)r(o)n
-(v)n(\354dou)871 b Ff(C-M-v)0 2827 y Fh(aprop)r(os:)26
-b(p\370\355k)n(azy)g(o)r(dp)r(o)n(v\355da)5 b(j\355c\355)27
-b(\370et\354zci)463 b Ff(C-h)42 b(a)0 2926 y Fh(zobrazit)26
-b(funk)n(ci)i(dan\351)g(kl\341)n(v)n(esy)773 b Ff(C-h)42
-b(c)0 3026 y Fh(zobrazit)26 b(p)r(opis)i(funk)n(ce)1029
-b Ff(C-h)42 b(f)0 3125 y Fh(zobrazit)26 b(informace)h(o)g
-(aktu\341ln\355c)n(h)g(m\363)r(dec)n(h)349 b Ff(C-h)42
-b(m)0 3354 y Fg(Opra)l(vy)j(c)l(h)l(yb)0 3549 y Fe(p\370eru\271it)27
-b Fh(zad\341)n(v)n(an)n(\375)f(neb)r(o)h(vyk)n(on\341)n(v)n(an)n(\375)d
-(p\370\355k)n(az)203 b Ff(C-g)0 3649 y Fe(obno)m(vit)28
-b Fh(soub)r(or)e(ztracen)n(\375)g(p\341dem)i(syst\351m)n(u)123
-b Ff(M-x)42 b(recover-file)0 3748 y Fe(zru\271it)28 b
-Fh(nec)n(h)n(t\354nou)f(zm\354n)n(u)911 b Ff(C-x)42 b(u)i
-Fd(n.)f Ff(C-_)0 3848 y Fh(vr\341tit)27 b(p)r(\371v)n(o)r(dn\355)h
-(obsah)f(bu\013eru)578 b Ff(M-x)42 b(revert-buffer)0
-3948 y Fh(p\370ekreslit)27 b(\376rozpadlou\377)e(obrazo)n(vku)592
-b Ff(C-l)0 4176 y Fg(P\370\355r\371stk)l(o)l(v)l(\351)46
-b(vyhled\341)l(v)l(\341n\355)0 4371 y Fh(vyhledat)27
-b(dop\370edu)1163 b Ff(C-s)0 4471 y Fh(vyhledat)27 b(dozadu)1200
-b Ff(C-r)0 4571 y Fh(vyhledat)27 b(regul\341rn\355)f(v\375raz)908
-b Ff(C-M-s)0 4670 y Fh(vyhledat)27 b(regul\341rn\355)f(v\375raz)h
-(dozadu)622 b Ff(C-M-r)0 4803 y Fh(p\370edc)n(hoz\355)27
-b(vyhled\341)n(v)n(an)n(\375)e(\370et\354zec)701 b Ff(M-p)0
-4902 y Fh(n\341sleduj\355c\355)28 b(no)n(v)n(\354j\271\355)e
-(vyhled\341)n(v)n(an)n(\375)g(\370et\354zec)391 b Ff(M-n)0
-5002 y Fh(uk)n(on\350it)27 b(inkremen)n(t\341ln\355)g(vyhled\341)n(v)n
-(\341n\355)546 b Ff(RET)0 5102 y Fh(zru\271it)27 b(efekt)h(p)r
-(osledn\355ho)g(zadan\351ho)e(znaku)373 b Ff(DEL)0 5201
-y Fh(p\370eru\271it)27 b(prob\355ha)5 b(j\355c\355)27
-b(vyhled\341)n(v)n(\341n\355)639 b Ff(C-g)0 5334 y Fh(Dal\271\355)39
-b Ff(C-s)g Fh(neb)r(o)h Ff(C-r)e Fh(zopakuje)h(vyhled\341n\355)g(v)h
-(dan\351m)f(sm\354ru.)g(P)n(okud)0 5433 y(Emacs)27 b(vyhled\341)n(v)n
-(\341,)e Ff(C-g)i Fh(zru\271\355)g(p)r(ouze)g(nenalezenou)g(\350\341st)
-g(\370et\354zce.)265 5567 y Fc(c)247 5569 y Fb(\015)22
-b Fc(2007)h(F)-5 b(ree)21 b(Soft)n(w)n(are)h(F)-5 b(oundation,)20
-b(Inc.)h(P)n(ermissions)h(on)g(bac)n(k.)g(v2.2)3858 5663
-y Fh(1)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 -337 a Fg(P)l(oh)l(yb)0 -130
-y Fe(p)s(osun)31 b(o)1268 b(dozadu)84 b(dop\370edu)0
--30 y Fh(znak)1426 b Ff(C-b)247 b(C-f)0 69 y Fh(slo)n(v)n(o)1415
-b Ff(M-b)247 b(M-f)0 169 y Fh(\370\341dek)1393 b Ff(C-p)247
-b(C-n)0 268 y Fh(na)27 b(za\350\341tek)g(neb)r(o)g(k)n(onec)g
-(\370\341dku)540 b Ff(C-a)247 b(C-e)0 368 y Fh(v)n(\354tu)1438
-b Ff(M-a)247 b(M-e)0 468 y Fh(o)r(dsta)n(v)n(ec)1284
-b Ff(M-{)247 b(M-})0 567 y Fh(str\341nku)1319 b Ff(C-x)43
-b([)160 b(C-x)42 b(])0 667 y Fh(sym)n(b)r(olic)n(k\375)26
-b(v\375raz)966 b Ff(C-M-b)159 b(C-M-f)0 767 y Fh(funk)n(ci)1376
-b Ff(C-M-a)159 b(C-M-e)0 866 y Fh(na)27 b(za\350\341tek)g(neb)r(o)g(k)n
-(onec)g(bu\013eru)495 b Ff(M-<)247 b(M->)0 1002 y Fh(rolo)n(v)n(at)25
-b(na)j(dal\271\355)f(obrazo)n(vku)837 b Ff(C-v)0 1101
-y Fh(rolo)n(v)n(at)25 b(na)j(p\370edc)n(hoz\355)e(obrazo)n(vku)660
-b Ff(M-v)0 1201 y Fh(rolo)n(v)n(at)25 b(vlev)n(o)1333
-b Ff(C-x)42 b(<)0 1300 y Fh(rolo)n(v)n(at)25 b(vpra)n(v)n(o)1274
-b Ff(C-x)42 b(>)0 1400 y Fh(aktu\341ln\355)27 b(\370\341dek)g(do)g
-(st\370edu)g(obrazo)n(vky)505 b Ff(C-u)42 b(C-l)0 1643
-y Fg(Ru\271en\355)47 b(a)f(maz\341n\355)0 1849 y Fe(ru\271en)m(\375)32
-b(ob)5 b(jekt)927 b(dozadu)180 b(dop\370edu)0 1949 y
-Fh(znak)27 b(\(maz\341n\355,)g(ne)h(ru\271en\355\))601
-b Ff(DEL)343 b(C-d)0 2049 y Fh(slo)n(v)n(o)1319 b Ff(M-DEL)255
-b(M-d)0 2148 y Fh(\370\341dek)27 b(\(do)g(k)n(once\))887
-b Ff(M-0)42 b(C-k)169 b(C-k)0 2248 y Fh(v)n(\354ta)1346
-b Ff(C-x)42 b(DEL)169 b(M-k)0 2348 y Fh(sym)n(b)r(olic)n(k\375)26
-b(v\375raz)870 b Ff(M--)42 b(C-M-k)81 b(C-M-k)0 2483
-y Fh(zru\271it)27 b Fe(oblast)1320 b Ff(C-w)0 2583 y
-Fh(zk)n(op\355ro)n(v)n(at)25 b(oblast)i(do)g(sc)n(hr\341nky)713
-b Ff(M-w)0 2682 y Fh(zru\271it)27 b(a\276)g(p)r(o)h(nejbli\276\271\355)
-g(v\375skyt)f(znaku)g Fd(znak)353 b Ff(M-z)42 b Fd(znak)0
-2818 y Fh(vho)r(dit)28 b(nap)r(osledy)f(zru\271en)n(\375)f(ob)5
-b(jekt)618 b Ff(C-y)0 2917 y Fh(nahradit)27 b(vhozen)n(\375)f(ob)5
-b(jekt)28 b(p\370edc)n(hoz\355m)e(zru\271en)n(\375m)101
-b Ff(M-y)0 3170 y Fg(Ozna\350o)l(v)l(\341n\355)0 3377
-y Fh(vlo\276it)27 b(zna\350)n(ku)1322 b Ff(C-@)42 b Fd(n.)i
-Ff(C-SPC)0 3476 y Fh(proho)r(dit)27 b(kurzor)f(a)h(zna\350)n(ku)881
-b Ff(C-x)42 b(C-x)0 3612 y Fh(ozna\350it)27 b(zadan)n(\375)f(p)r(o)r
-(\350et)i Fe(slo)m(v)847 b Ff(M-@)0 3711 y Fh(ozna\350it)27
-b Fe(o)s(dsta)m(v)m(ec)1159 b Ff(M-h)0 3811 y Fh(ozna\350it)27
-b Fe(str\341nku)1198 b Ff(C-x)42 b(C-p)0 3911 y Fh(ozna\350it)27
-b Fe(sym)m(b)s(olic)m(k\375)32 b(v\375raz)793 b Ff(C-M-@)0
-4010 y Fh(ozna\350it)27 b Fe(funk)m(ci)1263 b Ff(C-M-h)0
-4110 y Fh(ozna\350it)27 b(cel\375)g Fe(bu\013er)1101
-b Ff(C-x)42 b(h)0 4353 y Fg(In)l(teraktivn\355)47 b(nahrazo)l(v)l
-(\341n\355)0 4559 y Fh(in)n(teraktivn\354)27 b(nahradit)g(texto)n
-(v\375)g(\370et\354zec)449 b Ff(M-\045)0 4659 y Fh(s)27
-b(u\276it\355m)i(regul\341rn\355ho)c(v\375razu)351 b
-Ff(M-x)42 b(query-replace-reg)o(ex)o(p)0 4794 y Fh(Platn\351)27
-b(o)r(dp)r(o)n(v)n(\354di)g(v)g(m\363)r(du)h(query-replace)e(jsou)0
-4930 y Fe(z\341m\354n)m(u)32 b(pro)m(v)m(\351st)d Fh(a)e(j\355t)h(na)g
-(dal\271\355)661 b Ff(SPC)0 5029 y Fh(z\341m\354n)n(u)27
-b(pro)n(v)n(\351st)f(a)h(z\371stat)h(na)f(m\355st\354)581
-b Ff(,)0 5129 y Fe(sk)m(o)s(\350it)28 b Fh(na)f(dal\271\355)g(b)r(ez)h
-(pro)n(v)n(eden\355)e(z\341m\354n)n(y)422 b Ff(DEL)0
-5229 y Fh(zam\354nit)28 b(v\271ec)n(hn)n(y)e(zb)n(\375v)n(a)5
-b(j\355c\355)26 b(v\375skyt)n(y)546 b Ff(!)0 5328 y Fe(zp)s(\354t)28
-b Fh(na)f(p\370edc)n(hoz\355)g(v\375skyt)f(\370et\354zce)589
-b Ff(^)0 5428 y Fe(k)m(onec)28 b Fh(nahrazo)n(v)n(\341n\355)1099
-b Ff(RET)0 5528 y Fh(rekurzivn\355)27 b(editace)g(\(uk)n(on\350\355)g
-(se)g Ff(C-M-c)p Fh(\))482 b Ff(C-r)3858 5663 y Fh(2)p
-eop end
-%%Page: 3 3
-TeXDict begin 3 2 bop 0 -337 a Fg(Okna)0 -163 y Fh(Jestli\276e)19
-b(jsou)g(zobrazen)n(y)f(dv)n(a)h(p\370\355k)n(azy)-7
-b(,)18 b(pak)h(ten)h(druh)n(\375)f(plat\355)g(pro)g(X)h(okno.)0
--35 y(zru\271it)27 b(v\271ec)n(hna)g(ostatn\355)g(okna)808
-b Ff(C-x)42 b(1)0 92 y Fh(rozd\354lit)27 b(okno)g(na)g(horn\355)g(a)g
-(doln\355)455 b Ff(C-x)42 b(2)257 b(C-x)42 b(5)h(2)0
-191 y Fh(zru\271it)27 b(toto)h(okno)956 b Ff(C-x)42 b(0)257
-b(C-x)42 b(5)h(0)0 319 y Fh(rozd\354lit)27 b(okno)g(na)g(lev)n(\351)g
-(a)g(pra)n(v)n(\351)751 b Ff(C-x)42 b(3)0 446 y Fh(rolo)n(v)n(at)25
-b(jin\351)j(okno)1188 b Ff(C-M-v)0 573 y Fh(p\370epnout)27
-b(kurzor)f(do)i(jin\351ho)g(okna)426 b Ff(C-x)42 b(o)257
-b(C-x)42 b(5)h(o)0 673 y Fh(vybrat)27 b(bu\013er)h(v)f(jin\351m)h
-(okn\354)605 b Ff(C-x)42 b(4)h(b)170 b(C-x)42 b(5)h(b)0
-772 y Fh(zobrazit)26 b(bu\013er)i(v)g(jin\351m)g(okn\354)554
-b Ff(C-x)42 b(4)h(C-o)82 b(C-x)42 b(5)h(C-o)0 872 y Fh(otev\370\355t)27
-b(soub)r(or)g(v)g(jin\351m)h(okn\354)570 b Ff(C-x)42
-b(4)h(f)170 b(C-x)42 b(5)h(f)0 972 y Fh(otev\370\355t)27
-b(soub)r(or)g(jen)h(pro)e(\350ten\355)i(v)g(jin\351m)g(okn\354)83
-b Ff(C-x)42 b(4)h(r)170 b(C-x)42 b(5)h(r)0 1071 y Fh(spustit)28
-b(Dired)g(v)f(jin\351m)i(okn\354)607 b Ff(C-x)42 b(4)h(d)170
-b(C-x)42 b(5)h(d)0 1171 y Fh(na)5 b(j\355t)28 b(tag)f(v)g(jin\351m)h
-(okn\354)767 b Ff(C-x)42 b(4)h(.)170 b(C-x)42 b(5)h(.)0
-1298 y Fh(zv)n(\354t\271it)27 b(okno)1363 b Ff(C-x)42
-b(^)0 1398 y Fh(z\372\276it)28 b(okno)1423 b Ff(C-x)42
-b({)0 1497 y Fh(roz\271\355\370it)26 b(okno)1344 b Ff(C-x)42
-b(})0 1699 y Fg(F)-11 b(orm\341to)l(v)l(\341n\355)0 1874
-y Fh(o)r(dsadit)27 b(aktu\341ln\355)h Fe(\370\341dek)g
-Fh(\(dle)g(m\363)r(du\))518 b Ff(TAB)0 1973 y Fh(o)r(dsadit)27
-b Fe(oblast)h Fh(\(dle)g(m\363)r(du\))827 b Ff(C-M-\\)0
-2073 y Fh(o)r(dsadit)27 b Fe(sym)m(b)s(olic)m(k\375)32
-b(v\375raz)e Fh(\(dle)e(m\363)r(du\))353 b Ff(C-M-q)0
-2173 y Fh(o)r(dsadit)27 b(oblast)g(nap)r(evno)g(o)h Fd(ar)l(gument)34
-b Fh(sloup)r(c\371)214 b Ff(C-x)42 b(TAB)0 2300 y Fh(vlo\276it)27
-b(znak)g(no)n(v)n(\351ho)f(\370\341dku)h(za)g(kurzor)518
-b Ff(C-o)0 2399 y Fh(p)r(osunout)28 b(zb)n(ytek)f(\370\341dku)g(svisle)
-g(dol\371)557 b Ff(C-M-o)0 2499 y Fh(smazat)27 b(pr\341zdn\351)g
-(\370\341dky)f(ok)n(olo)g(kurzoru)471 b Ff(C-x)42 b(C-o)0
-2599 y Fh(sp)r(o)5 b(jit)28 b(\370\341dek)e(s)i(p\370edc)n(hoz\355m)e
-(\(s)i(arg.)e(s)i(n\341sl.\))316 b Ff(M-^)0 2698 y Fh(smazat)27
-b(pr\341zdn\351)g(m\355sto)g(k)n(olem)g(kurzoru)457 b
-Ff(M-\\)0 2798 y Fh(nec)n(hat)27 b(p\370esn\354)g(jedn)n(u)h(mezeru)f
-(k)n(olem)g(kurzoru)243 b Ff(M-SPC)0 2925 y Fh(zalomit)27
-b(o)r(dsta)n(v)n(ec)1194 b Ff(M-q)0 3025 y Fh(nasta)n(vit)27
-b(sloup)r(ec)g(pro)g(zalamo)n(v)n(\341n\355)634 b Ff(C-x)42
-b(f)0 3124 y Fh(nasta)n(vit)27 b(pre\014x,)g(kter\375m)g(za\350\355na)5
-b(j\355)27 b(\370\341dky)423 b Ff(C-x)42 b(.)0 3224 y
-Fh(nasta)n(vit)27 b(fon)n(t)1338 b Ff(M-g)0 3436 y Fg(Zm\354na)46
-b(v)l(elik)l(osti)g(p\355smen)0 3610 y Fh(zm\354nit)28
-b(p\355smena)f(slo)n(v)n(a)f(na)h(v)n(elk)n(\341)698
-b Ff(M-u)0 3710 y Fh(zm\354nit)28 b(p\355smena)f(slo)n(v)n(a)f(na)h
-(mal\341)708 b Ff(M-l)0 3810 y Fh(zm\354nit)28 b(p)r(o)r
-(\350\341te\350n\355)g(p\355smeno)f(slo)n(v)n(a)f(na)h(v)n(elk)n(\351)
-329 b Ff(M-c)0 3937 y Fh(zm\354nit)28 b(p\355smena)f(oblasti)g(na)h(v)n
-(elk)n(\341)635 b Ff(C-x)42 b(C-u)0 4037 y Fh(zm\354nit)28
-b(p\355smena)f(oblasti)g(na)h(mal\341)645 b Ff(C-x)42
-b(C-l)0 4238 y Fg(Minibu\013er)0 4413 y Fh(N\341sleduj\355c\355)28
-b(kl\341)n(v)n(esy)e(jsou)h(platn\351)h(pro)e(minibu\013er.)0
-4540 y(doplnit)i(z)g(nab\355dky)1158 b Ff(TAB)0 4640
-y Fh(doplnit)28 b(do)f(nejbli\276\271\355ho)h(slo)n(v)n(a)810
-b Ff(SPC)0 4739 y Fh(doplnit)28 b(a)f(vyk)n(onat)1153
-b Ff(RET)0 4839 y Fh(zobrazit)26 b(mo\276n\341)h(dopln\354n\355)910
-b Ff(?)0 4938 y Fh(p\370edc)n(hoz\355)27 b(p\370\355k)n(az)f(z)h
-(minibu\013eru)698 b Ff(M-p)0 5038 y Fh(no)n(v)n(\354j\271\355)27
-b(neb)r(o)g(implicitn\355)i(p\370\355k)n(az)d(z)i(minibu\013eru)222
-b Ff(M-n)0 5138 y Fh(vyhledat)27 b(regul\341rn\355)f(v\375raz)h(v)g
-(historii)g(vzad)359 b Ff(M-r)0 5237 y Fh(vyhledat)27
-b(regul\341rn\355)f(v\375raz)h(v)g(historii)g(vp\370ed)322
-b Ff(M-s)0 5337 y Fh(zru\271it)27 b(p\370\355k)n(az)1346
-b Ff(C-g)0 5464 y Fh(Stiskn\354te)20 b Ff(C-x)42 b(ESC)g(ESC)19
-b Fh(pro)f(editaci)i(a)f(zopak)n(o)n(v)n(\341n\355)d(p)r(osledn\355ho)j
-(p\370\355k)n(azu)0 5564 y(z)28 b(minibu\013eru.)g(Stiskn\354te)g
-Ff(F10)e Fh(pro)h(aktiv)n(aci)f(men)n(u)i(v)g(minibu\013eru.)3858
-5663 y(3)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 50 -320 a Fi(GNU)55 b(Emacs)i({)e
-(Referen\350n\355)f(k)-5 b(arta)0 -42 y Fg(Bu\013ery)0
-165 y Fh(vybrat)27 b(jin)n(\375)g(bu\013er)1159 b Ff(C-x)42
-b(b)0 264 y Fh(seznam)27 b(v\271ec)n(h)g(bu\013er\371)1031
-b Ff(C-x)42 b(C-b)0 364 y Fh(zru\271it)27 b(bu\013er)1359
-b Ff(C-x)42 b(k)0 607 y Fg(V\375m\354n)l(y)0 814 y Fh(p\370eho)r(dit)28
-b Fe(znaky)1224 b Ff(C-t)0 913 y Fh(p\370eho)r(dit)28
-b Fe(slo)m(v)m(a)1262 b Ff(M-t)0 1013 y Fh(p\370eho)r(dit)28
-b Fe(\370\341dky)1227 b Ff(C-x)42 b(C-t)0 1112 y Fh(p\370eho)r(dit)28
-b Fe(sym)m(b)s(olic)m(k)m(\351)j(v\375razy)704 b Ff(C-M-t)0
-1355 y Fg(Kon)l(trola)46 b(pra)l(v)l(opisu)0 1562 y Fh(k)n(on)n(trola)
-25 b(pra)n(v)n(opisu)h(aktu\341ln\355ho)h(slo)n(v)n(a)505
-b Ff(M-$)0 1662 y Fh(k)n(on)n(trola)25 b(pra)n(v)n(opisu)h(v\271ec)n(h)
-h(slo)n(v)f(v)i(oblasti)223 b Ff(M-x)42 b(ispell-region)0
-1761 y Fh(k)n(on)n(trola)25 b(pra)n(v)n(opisu)h(cel\351ho)h(bu\013eru)
-419 b Ff(M-x)42 b(ispell-buffer)0 2013 y Fg(T)-11 b(agy)0
-2220 y Fh(na)5 b(j\355t)28 b(tag)f(\(de\014nici\))1134
-b Ff(M-.)0 2319 y Fh(na)5 b(j\355t)28 b(dal\271\355)f(v\375skyt)g(tagu)
-975 b Ff(C-u)42 b(M-.)0 2419 y Fh(zadat)27 b(soub)r(or)g(s)g(no)n
-(v\375mi)g(tagy)518 b Ff(M-x)43 b(visit-tags-tabl)o(e)0
-2554 y Fh(vyhledat)27 b(reg.)g(v\375raz)f(v)i(soub)r(orec)n(h)e(s)h
-(tagy)217 b Ff(M-x)42 b(tags-search)0 2654 y Fh(spustit)28
-b(nahrazo)n(v)n(\341n\355)d(pro)i(on)n(y)f(soub)r(ory)112
-b Ff(M-x)42 b(tags-query-replac)o(e)0 2754 y Fh(p)r(okra\350o)n(v)n(at)
-25 b(v)i(prohled\341)n(v)n(\341n\355)f(neb)r(o)h(nahrazo)n(v)n
-(\341n\355)171 b Ff(M-,)0 2996 y Fg(P\370\355k)l(azo)l(v\375)44
-b(in)l(terpret)0 3203 y Fh(vyk)n(onat)26 b(shello)n(v\375)h(p\370\355k)
-n(az)942 b Ff(M-!)0 3303 y Fh(vyk)n(onat)26 b(shello)n(v\375)h
-(p\370\355k)n(az)f(na)h(oblast)583 b Ff(M-|)0 3402 y
-Fh(z\014ltro)n(v)n(at)26 b(oblast)h(shello)n(v\375m)g(p\370\355k)n
-(azem)487 b Ff(C-u)42 b(M-|)0 3502 y Fh(spustit)28 b(shell)g(v)f
-(okn\354)g Ff(*shell*)762 b(M-x)42 b(shell)0 3745 y Fg(Ob)t
-(d\351ln\355ky)0 3951 y Fh(zk)n(op\355ro)n(v)n(at)25
-b(ob)r(d\351ln\355k)j(do)f(registru)665 b Ff(C-x)42 b(r)i(r)0
-4051 y Fh(zru\271it)27 b(ob)r(d\351ln\355k)1260 b Ff(C-x)42
-b(r)i(k)0 4151 y Fh(vho)r(dit)28 b(ob)r(d\351ln\355k)1228
-b Ff(C-x)42 b(r)i(y)0 4250 y Fh(vlo\276it)27 b(ob)r(d\351ln\355k)h
-(mezer)1022 b Ff(C-x)42 b(r)i(o)0 4350 y Fh(nahradit)27
-b(ob)r(d\351ln\355k)h(ob)r(d\351ln\355k)n(em)f(mezer)473
-b Ff(C-x)42 b(r)i(c)0 4450 y Fh(nahradit)27 b(\370\341dky)f(ob)r
-(d\351ln\355ku)i(zadan)n(\375m)f(\370et\354zcem)175 b
-Ff(C-x)42 b(r)i(t)0 4692 y Fg(Zkratky)0 4899 y Fh(p\370idat)27
-b(glob\341ln\355)g(zkratku)959 b Ff(C-x)42 b(a)i(g)0
-4999 y Fh(p\370idat)27 b(lok)n(\341ln\355)g(zkratku)1005
-b Ff(C-x)42 b(a)i(l)0 5098 y Fh(p\370idat)27 b(glob\341ln\355)g
-(expanzi)g(pro)g(zkratku)509 b Ff(C-x)42 b(a)i(i)f(g)0
-5198 y Fh(p\370idat)27 b(lok)n(\341ln\355)g(expanzi)g(pro)g(zkratku)555
-b Ff(C-x)42 b(a)i(i)f(l)0 5298 y Fh(expando)n(v)n(at)26
-b(zkratku)1079 b Ff(C-x)42 b(a)i(e)0 5433 y Fh(dynamic)n(k)n(\341)26
-b(expanze)h(p\370edc)n(h\341zej\355c\355ho)f(slo)n(v)n(a)308
-b Ff(M-/)3858 5663 y Fh(4)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop 0 -337 a Fg(Regul\341rn\355)46
-b(v\375razy)0 -130 y Fh(lib)r(o)n(v)n(oln)n(\375)26 b(znak)h(krom\354)g
-(no)n(v)n(\351ho)f(\370\341dku)507 b Ff(.)43 b Fh(\(te\350)n(k)n(a\))0
--30 y(\276\341dn\351)27 b(neb)r(o)h(n\354k)n(olik)f(opak)n(o)n(v)n
-(\341n\355)715 b Ff(*)0 69 y Fh(jedno)28 b(neb)r(o)f(v\355ce)h(opak)n
-(o)n(v)n(\341n\355)842 b Ff(+)0 169 y Fh(\276\341dn\351)27
-b(neb)r(o)h(jedno)g(opak)n(o)n(v)n(\341n\355)775 b Ff(?)0
-268 y Fh(zru\271it)27 b(zvl\341\271tn\355)g(v\375znam)h(znaku)f
-Fd(c)32 b Fh(v)n(e)27 b(v\375razu)288 b Ff(\\)p Fd(c)0
-368 y Fh(alternativ)n(a)26 b(\(\376neb)r(o\377\))1059
-b Ff(\\|)0 468 y Fh(skupina)1520 b Ff(\\\()43 b Fa(:)14
-b(:)g(:)43 b Ff(\\\))0 567 y Fh(stejn)n(\375)28 b(text)g(jak)n(o)e
-Fd(n)6 b Fh(-t\341)27 b(skupina)745 b Ff(\\)p Fd(n)0
-667 y Fh(hranice)27 b(slo)n(v)n(a)1329 b Ff(\\b)0 767
-y Fh(nik)n(oliv)27 b(hranice)g(slo)n(v)n(a)1059 b Ff(\\B)0
-902 y Fe(elemen)m(t)1050 b(za\350\341tek)157 b(k)m(onec)0
-1002 y Fh(\370\341dek)1174 b Ff(^)420 b($)0 1101 y Fh(slo)n(v)n(o)1196
-b Ff(\\<)376 b(\\>)0 1201 y Fh(bu\013er)1166 b Ff(\\`)376
-b(\\')0 1300 y Fe(t\370\355da)32 b(znak\371)898 b(o)s(dp)s(o)m
-(v\355d\341)83 b(neo)s(dp)s(o)m(v\355d\341)0 1400 y Fh(explicitn\355)28
-b(mno\276ina)709 b Ff([)43 b Fa(:)14 b(:)g(:)44 b Ff(])192
-b([^)42 b Fa(:)14 b(:)g(:)44 b Ff(])0 1500 y Fh(slo)n(v)n(otv)n(orn)n
-(\375)24 b(znak)766 b Ff(\\w)376 b(\\W)0 1599 y Fh(znak)27
-b(se)g(syn)n(tax\355)g Fd(c)756 b Ff(\\s)p Fd(c)338 b
-Ff(\\S)p Fd(c)0 1842 y Fg(Mezin\341ro)t(dn\355)46 b(znak)l(o)l(v)l
-(\351)g(sady)0 2049 y Fh(zadat)27 b(hla)n(vn\355)g(jazyk)513
-b Ff(M-x)42 b(set-language-env)o(ir)o(onm)o(en)o(t)0
-2148 y Fh(zobrazit)26 b(v\271ec)n(hn)n(y)h(vstupn\355)h(meto)r(dy)243
-b Ff(M-x)42 b(list-input-method)o(s)0 2248 y Fh(zapnout)27
-b(neb)r(o)h(vypnout)f(vstupn\355)h(meto)r(du)382 b Ff(C-\\)0
-2348 y Fh(zadat)27 b(k)n(\363)r(do)n(v)n(\341n\355)f(pro)g
-(n\341sleduj\355c\355)i(p\370\355k)n(az)444 b Ff(C-x)42
-b(RET)h(c)0 2447 y Fh(zobrazit)26 b(v\271ec)n(hna)h(k)n(\363)r(do)n(v)n
-(\341n\355)445 b Ff(M-x)42 b(list-coding-syst)o(em)o(s)0
-2547 y Fh(zm\354nit)28 b(prefero)n(v)n(an\351)d(k)n(\363)r(do)n(v)n
-(\341n\355)314 b Ff(M-x)42 b(prefer-coding-sys)o(te)o(m)0
-2800 y Fg(Info)0 3007 y Fh(spustit)28 b(Info)1384 b Ff(C-h)42
-b(i)0 3106 y Fh(na)5 b(j\355t)28 b(zadanou)e(funk)n(ci)i(neb)r(o)g
-(prom\354nnou)e(v)i(Info)176 b Ff(C-h)42 b(C-i)0 3242
-y Fh(P)n(oh)n(yb)26 b(uvnit\370)i(uzl\371:)83 3377 y(rolo)n(v)n
-(\341n\355)d(vp\370ed)1195 b Ff(SPC)83 3476 y Fh(rolo)n(v)n(\341n\355)
-25 b(zp)r(\354t)1247 b Ff(DEL)83 3576 y Fh(na)27 b(za\350\341tek)g
-(uzlu)1152 b Ff(.)43 b Fh(\(te\350)n(k)n(a\))0 3711 y(P)n(oh)n(yb)26
-b(mezi)i(uzly:)83 3847 y Fe(dal\271\355)f Fh(uzel)1356
-b Ff(n)83 3946 y Fe(p\370edc)m(hoz\355)28 b Fh(uzel)1148
-b Ff(p)83 4046 y Fe(nad\370azen)m(\375)30 b Fh(uzel)1121
-b Ff(u)83 4146 y Fh(vybrat)27 b(z)g(men)n(u)h(p)r(o)r(dle)g(n\341zvu)
-720 b Ff(m)83 4245 y Fh(vybrat)27 b Fd(n)6 b Fh(-tou)27
-b(p)r(olo\276ku)g(men)n(u)h(\(1{9\))498 b Fd(n)83 4345
-y Fh(nejbli\276\271\355)28 b(p\370\355\271t\355)g(k\370\355\276o)n
-(v\375)d(o)r(dk)n(az)i(\(n\341)n(vrat)f Ff(l)p Fh(\))279
-b Ff(f)83 4445 y Fh(vr\341tit)27 b(se)g(do)h(nap)r(osledy)f
-(prohl\355\276en\351ho)f(uzlu)247 b Ff(l)83 4544 y Fh(vr\341tit)27
-b(se)g(do)h(adres\341\370e)d(uzl\371)791 b Ff(d)83 4644
-y Fh(p\370ej\355t)28 b(do)f(kter\351hok)n(oliv)f(uzlu)i(p)r(o)r(dle)g
-(jm\351na)282 b Ff(g)0 4779 y Fh(Dal\271\355:)83 4915
-y(spustit)28 b Fe(tutori\341l)g Fh(k)f(Info)888 b Ff(h)83
-5014 y Fh(prohledat)27 b(uzly)g(na)h(\370et\354zec)800
-b Ff(M-s)83 5114 y Fe(uk)m(on\350it)28 b Fh(Info)1239
-b Ff(q)3858 5663 y Fh(5)p eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop 0 -337 a Fg(Registry)0 -130 y Fh(ulo\276it)28
-b(oblast)f(do)g(registru)930 b Ff(C-x)42 b(r)i(s)0 -30
-y Fh(vlo\276it)27 b(obsah)g(registru)f(do)i(bu\013eru)659
-b Ff(C-x)42 b(r)i(i)0 105 y Fh(ulo\276it)28 b(p)r(ozici)f(kurzoru)f(do)
-i(registru)630 b Ff(C-x)42 b(r)i(SPC)0 205 y Fh(sk)n(o)r(\350it)27
-b(na)g(p)r(ozici)h(ulo\276enou)f(v)g(registru)513 b Ff(C-x)42
-b(r)i(j)0 457 y Fg(Kl\341)l(v)l(eso)l(v)l(\341)h(makra)0
-664 y Fe(zah\341)5 b(jit)29 b Fh(de\014no)n(v)n(\341n\355)d(kl\341)n(v)
-n(eso)n(v)n(\351ho)f(makra)411 b Ff(C-x)42 b(\()0 764
-y Fe(zak)m(on\350it)29 b Fh(de\014no)n(v)n(\341n\355)d(kl\341)n(v)n
-(eso)n(v)n(\351ho)f(makra)354 b Ff(C-x)42 b(\))0 863
-y Fe(vyk)m(onat)30 b Fh(p)r(osledn\355)d(de\014no)n(v)n(an\351)f(makro)
-476 b Ff(C-x)42 b(e)0 963 y Fh(p\370ip)r(o)5 b(jit)28
-b(k)f(p)r(osledn\355m)n(u)h(kl\341)n(v)n(eso)n(v)n(\351m)n(u)c(makru)
-276 b Ff(C-u)42 b(C-x)h(\()0 1063 y Fh(p)r(o)5 b(jmeno)n(v)n(at)26
-b(p)r(osledn\355)i(makro)388 b Ff(M-x)42 b(name-last-kbd-ma)o(cr)o(o)0
-1162 y Fh(vlo\276it)27 b(do)h(bu\013eru)g(lisp)r(o)n(v)n(ou)e
-(de\014nici)319 b Ff(M-x)43 b(insert-kbd-macr)o(o)0 1405
-y Fg(P\370\355k)l(azy)i(souvisej\355c\355)i(s)f(Emacs)f(Lisp)t(em)0
-1612 y Fh(vyho)r(dnotit)28 b Fe(v\375raz)h Fh(p\370ed)f(kurzorem)586
-b Ff(C-x)42 b(C-e)0 1711 y Fh(vyho)r(dnotit)28 b Fe(funk)m(ci)g
-Fh(p)r(o)r(d)g(kurzorem)587 b Ff(C-M-x)0 1811 y Fh(vyho)r(dnotit)28
-b Fe(oblast)950 b Ff(M-x)42 b(eval-region)0 1911 y Fh(na\350\355st)27
-b(a)g(vyho)r(dnotit)h(v\375raz)e(v)i(minibu\013eru)349
-b Ff(M-:)0 2010 y Fh(na\350\355st)27 b(soub)r(or)g(ze)g(syst\351mo)n(v)
-n(\351ho)f(adres\341\370e)230 b Ff(M-x)42 b(load-library)0
-2263 y Fg(Jedno)t(duc)l(h\341)47 b(p\370izp)t(\371sob)t(en\355)0
-2470 y Fh(nasta)n(vit)27 b(prom\354nn\351)g(a)g(faces)681
-b Ff(M-x)42 b(customize)0 2605 y Fh(De\014nice)28 b(ob)r(ecn\351)g
-(kl\341)n(v)n(eso)n(v)n(\351)c(zkratky)i(v)i(Emacs)e(Lispu)i
-(\(p\370\355klad\):)0 2741 y Ff(\(global-set-key)37 b("\\C-cg")k
-('goto-line\))0 2840 y(\(global-set-key)c("\\M-#")k('query-replace-re)o
-(gex)o(p\))0 3093 y Fg(Z\341pis)46 b(p\370\355k)l(az\371)0
-3300 y Ff(\(defun)41 b Fd(command-name)51 b Ff(\()p Fd(ar)l(gs)7
-b Ff(\))87 3399 y(")p Fd(documentation)f Ff(")44 b(\(interactive)38
-b(")p Fd(template)6 b Ff("\))87 3499 y Fd(body)h Ff(\))0
-3634 y Fh(P\370\355klad:)0 3770 y Ff(\(defun)41 b(this-line-to-top)o
-(-of)o(-w)o(ind)o(ow)c(\(line\))87 3869 y("Reposition)i(line)j(point)g
-(is)g(on)h(to)g(top)f(of)h(window.)0 3969 y(With)f(ARG,)g(put)g(point)g
-(on)g(line)g(ARG.")87 4069 y(\(interactive)d("P"\))87
-4168 y(\(recenter)h(\(if)i(\(null)g(line\))697 4268 y(0)610
-4368 y(\(prefix-numeric-v)o(al)o(ue)37 b(line\)\)\)\))0
-4503 y Fh(Sp)r(eci\014k)n(ace)c Ff(interactive)c Fh(\370\355k)n(\341,)j
-(jak)h(in)n(teraktivn\354)g(na\350\355st)g(argument)n(y)-7
-b(.)0 4603 y(V\355ce)28 b(se)f(dozv\355te)g(p)r(o)h(pro)n(v)n(eden\355)
-e Ff(C-h)42 b(f)i(interactive)p Fh(.)476 4919 y Fc(Cop)n(yrigh)n(t)805
-4917 y(c)787 4919 y Fb(\015)22 b Fc(2007)h(F)-5 b(ree)21
-b(Soft)n(w)n(are)h(F)-5 b(oundation,)20 b(Inc.)654 4998
-y(v2.2)i(for)g(GNU)h(Emacs)e(v)n(ersion)h(22,)h(2006)798
-5078 y(designed)e(b)n(y)h(Stephen)e(Gildea)0 5194 y(P)n(ermission)f(is)
-i(gran)n(ted)f(to)h(mak)n(e)e(and)i(distribute)d(copies)i(of)g(this)h
-(card)e(pro)n(vided)g(the)h(cop)n(y-)0 5273 y(righ)n(t)i(notice)f(and)h
-(this)g(p)r(ermission)f(notice)g(are)g(preserv)n(ed)g(on)h(all)g
-(copies.)0 5389 y(F)-5 b(or)20 b(copies)g(of)h(the)f(GNU)h(Emacs)f(man)
-n(ual,)g(write)g(to)h(the)f(F)-5 b(ree)20 b(Soft)n(w)n(are)g(F)-5
-b(oundation,)19 b(Inc.,)0 5468 y(51)k(F)-5 b(ranklin)20
-b(Street,)h(Fifth)g(Flo)r(or,)h(Boston,)h(MA)f(02110-1301)h(USA)3858
-5663 y Fh(6)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/de-refcard.ps b/etc/de-refcard.ps
deleted file mode 100644
index 7d88949168f..00000000000
--- a/etc/de-refcard.ps
+++ /dev/null
@@ -1,2837 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: de-refcard.dvi
-%%Pages: 2
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMBX10 CMR8 CMTT8 CMBX8 CMR6 CMSY6 CMTI8 CMMI8
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t landscape de-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.01.20:1516
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124C2B6534F3CD1866AF92009D93B97F763AA3D16684AA65F029E776DA
-3BFB75EDD46D562E6A284DB4F2FDBF7CDE7C1F3772CD7B6FD372842A0E07E3EF
-68A98AB9278ADC2D35891543F57ED6DCFE8923368D556F1A8B3E35863112F409
-FBE67FC270328312BAA43A9A372C510717B50AAB01A1E02A9982113E2D7C601C
-B0BDA1C0E081E546A97647B74EE5194C57ACD62502B329FED4D966BDEB4028F0
-F082EDD5DFC8387653D620E9E73FDCE3C155347D5929C3A24D6121AEA46BBF3A
-B1C8A4793FB7F21C84400912C27D9AB0845537103553BF8F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 65 /A put
-dup 66 /B put
-dup 68 /D put
-dup 82 /R put
-dup 86 /V put
-dup 90 /Z put
-dup 97 /a put
-dup 99 /c put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9B3AF95BEA0DC284A53FB40DA68D22E0D0DDA4D06897AA6D0C822190D6AC890C
-BE4D5A361119B81C6191E2BC6A5BCB6EDB448EFF624A39B084282AA774EBD006
-978CBDECE14A9709A6474CFDFA08AD4C76ABC85B16EA7CEB75BD87EC9BA26352
-397C0CBA4112C39DFE9A7B2952D41647E886D869E8740C7822CC5C5753BBA2B1
-22D756EC9562EACD19CA523D47DBC02C6830F26E441BEC7CA9E4469EE899070B
-59620BC5F575C81AC207D73599DD13ABB8FE5B03DF90CD118541D7C9F4CB27D9
-C375C5880E245D916BF6143BFA59412B86E9D5D1782C5B7933C0A04AD065B405
-81D39FA7797270F977E5AEB0E3757D0BA32568D78AF378D481D92D1F438355FE
-C174BF16CECCBFAE1066461350E71ADFD10A31145806B602DEB32434F8D008C6
-0F3FA689DCB374B5C9791A447C546C4B2428744F56415278DFE19A678674386A
-B5322D8A0E0DC860ECCEE3FC2FCEEEA0B64766A02C2D9B9BBE79D49C8C4BD605
-D3F61AD9AB76046171AA07B870479D3403AD8FD04F64EB6D1128DFC52AA7E80A
-696DD1F9A788BAFEEB1DABEFBD866AE7E8AE43766D4BCAA9BFA79FF5886829AD
-D456BD2017A0C851A5EC563EEDCE116860810E98984CACC944BCEE590BA1DB4F
-806152CF29730DA725948A87FCF4B353CF66E5C167E3079A797445672BFB8E02
-831FDB8DB616AFFB8E89007F7A7EA6F6826E8D134E78203727988F60E6C35F61
-2A61D65F15633F5A6DFD1A107FBCE7384EB059EA42BECE7868A17901B91FF9B7
-FFE91967305005CFB5F0AB2AA83BF5836091C17D958DCC296CC9BD25945F1669
-D0D8AB41CD25B86E6B209B452DBFD3A3C636BF87B5C318F9D388D5B44ADD1BBA
-005FD24FCCA81B8287CA1E6246904C03D5A2026E89850B18F4668C4D4B574ED3
-7DD77D271F8558F778FF22F2790D7C73C8E706966B5A606507909BED5A509733
-34868FC442551561FF0D6F342A5DA5754ED1501E08DE2D7A001CC85C96353093
-CE2E624C3336437E14A770075E7393CF5A3927FE8C0CBD05DB9D288E54C4CB6C
-76B11F61AFD0FEC9FBA7299612A5D64EA1A25FB7A4B98B3EFBFECB9C0BB89B87
-0BF48B458BB1E80915758743442EA507DC3E7A9A285B7CC45A2247DD01C040A1
-BF42105FE7481094BD2972247D582D86317D8C85C8FF3180EFEABFACC4F60FD7
-85356A1F366C154B18E1EBDC3DAAAEAE03F3304CC1F61DB910BB0F7E6458350C
-4C928BBFB19583C58C20042B16AF043119776CC131767E2DEE52EADE91E4AE71
-A8103E703498E025E934C9498E72FE8569A4A03DD54C09F2387618B259A2EA0F
-B5E65D05723DEA0912053A0D07B38D2991E4D07D4A451D50555866BD4B301547
-A3A4AEDA243564B3BAAF2A71A6857D0E19764905DF3304668F39B050C6A79984
-F76147833861BBC6960F70CB0BAD625E34B807C225D055D66B0BBB52CC8BFF4E
-DE77C9851144BBFB45CAF37EE260BC79704DEB6696EFD74C667948D38E87CE4F
-3BD635D76EA337CA4EFD48190B0509A1029E296033F15BAF4408D2BE1B506086
-3D78AD5037AF7BFDA55346D20F40099ACCACF8FFA833D7EC95645A580DBBB643
-D415EFB5B60F8F8B34C50CB7C33C144866EE56EE63AD3D5B7728F25D484B1D28
-8BB2F384A060B5DF43ACE43DAE802A27A79D66DF9E357A5452F8FB484A9539BA
-CE317527560685BFACFBC1AD353AEF3ECA887ADDFA79727E085C7F6E99121397
-0C5E0269713D614F07AA924DD1EBFCE15750553483663B2F1CFC81E04E34C237
-D2C14E38E45F65415F98CD9281E6B3D7DD7FACF6661E20EEDBC4679DCB769017
-65A5C125DD23AC8AF788A94D16D44164F674A92BF4519581EC2766EA19EB353E
-FDC81CE9796A0DE0FAA39418851624462FC36A671708D9E986020A6A3A4B4578
-3E9D069FA141D8C3F2811E06728C600E9F75BD78B47A3FEEBCA5AAE518B60984
-912D7CB68ADEDAFADAF9AF2D84FA2C88F58E91769ACC4084788488B6949591FF
-B24793EF5430C155895EE14AF5430E518754AF8A0DB30D89284F6DDEC636A40E
-8ED8355F7CC976E5A9FF704E3C737AF2AE91C475505FC89FED92B5EA018CAFB1
-7125F7BE6B8F3DC61047AC737B66F9E995831B997754935D3FAB75FDECE3E2C5
-E8D36B7CCDFC7336E9D8938B8127A42CC400E8F275882D789940797117379F0B
-2B0B07D0A5644DAE016897D4F3B4EA999CDC1F6A32AD0BA8CD0D7E9AF8DBDE3A
-5F742C3C64F36AB4D5FE50D2DF3D9B6B96F359AB93C781BB5ADF0594D9F47A14
-06CF432CC8B01215F93457EF15494CB7FC22D9FCC729D6294A6FE370DE6B18AE
-F729FBE1DED8F00536A99FB1FBDE28F286BCC1FAAA2A984F9E3596F446EFF5DA
-9071628115E8A583FB0B4B4F8939AAF17A45BD08FBD94A34832D9A3FDAC17E18
-4DBC2C0290F4A46C01ECAA21C0BB328DA4683032E8C8C8B8520979F095378573
-41CED8F853B2CEDE4635AAAF92FC90A41DF08FC4BFC05CFD0CB104B993945B29
-8BA304A6A994DD9EC54234C3258E23D87405633E9D43AA78229EEE5F2DA86D89
-D107F922AFFA4562514391562599D80416B39A61F914DFF15D60DCEE17E7831D
-0329CE4A59FAD2CFB667B31039E3677FC41D56FE1A8A3B93B3C6144D9A4C5237
-1352925ED7A896D6F39066DA3C691FD133F6A74A2574E2642673B3FC3FB03F14
-79EB96EF152B5CC141E7F388E0259A843B50ED231A1D76C8443C3D1885669145
-6CBB130CB8DDC7DB7F50236B672EC8142DE10DDB5717F635B17F2CB583A56503
-2D0F4E0C6DABE691DDCEC03F75FD6D33B65C1793E8B40754EC5EA7EB07821865
-8BDB7A5393A2AC2661270D73BB9D12C1144D6E4029D573994FE31876ED83E55D
-BACB5F40BCB931F98DE7F16D8BE900CD599B28BBE767FCB4C8815108F04732F4
-0FA4B566057C442513EBDA6309EF62E69956DD882F6BCB3EF6829ECBC1B139E2
-704EDC03432170C3D97F8D3F9D8A542EA89198133A9B60A03D2C9A99C5BC1594
-4348A6A5E5D56FB1A1C8756873EC376B5F1FD1D05A03AC9F599499974AD47442
-CA459C429B7217DE10372EBA65D96B4FD2D574418AC1793211AE210DCDE572F6
-858C9C21DCAC1724630E5B566539E499DEB2613653F26516C0624C9AD8C607BE
-E969DA2630DF255B64D75C9CC5BD886321A6D8B9A25B2199CEAD205AAAF29268
-0B62086F89BFE70464EF98519DADF73A0BA49A0AF0B8B7B837BDBE0E35247EDA
-DBBA716AD20E7FF44C9A6EDE97091E40A910AE82806022FC906708385EBDA8A3
-D03577ACBA81169D3D01E444A778DABFAC356CEB76D08C44FE51130EAB3BB5EE
-6814D7A0AEE5590AFD51E10787A49D38170164BBCEC4723279CA281E32990B1C
-500BCBE982194EAE4D0C66C370808AE0223893B62043272FFED029C52283F575
-5F0C491FC82D4D7A959A5C4D16DEA4D374D2EF4861AD86FCE8E1080D559601B5
-89A94ACAF25EEF5CE4FC2870A16C17EBE939051B10484709C093CD092ED5387C
-01D8C614E8A876061DAC06AEC30D027CE00AE5F53880D969D7DEDDD14FD57757
-E5218F699E0F1C7BEE98247B45FE827ACC26350CB3DAA2DE76232A95CDC4CDBE
-A323E951530E92048527CDA2DC00A8C3DDFF25954C13E9ABD7F7A54F37093828
-69A5257EB9073B1AC0763EB135A3E4EB3D83B46C70B1E1D71F2C12354B523581
-2F56D273FA42577674B5FC545A946F49039B2438904873451BE2172DDE36A1D3
-432858CCB56358E6B55BD7D3E6B1552E42CF902AB33E5D3BBF800A6858D871D6
-79DBEDA21C51F3DEF777B8995FF6E5E771C2C9BEBD252766B1D2A902CD1946CD
-9DFC1F89174B27268B18425E021CA915B96E5E404E1DE0BE0BB8636978711C4D
-7CFBE8F5E4D40CD21E517629B41104465F6C2F5E4D4D600A1FD512F8F3F2AF66
-88CFDDD128E1C632FA86C4E27AC9FD6DB3B8B08F1F67058E8D2A845306FA3BBA
-241C8AA353A170249892D5D68E17B1EFCBDFFDA565464B3A3C894067916242A1
-6106C25B96E894DA9CE5C7B3954B53A9CA95B5BA4FA29CF193A43CF904869F7C
-7753D12540787B1E05A24180E3098E994E6BAA9C32DF39F74FE20FF7A683B90D
-1117B9A29B02BF40D123089B737D9729C150BA2703BE6FA4E992C932435DCED8
-764A0F10703B9DDFE6BEC61D6792FD9A8FC87B7F03840959CAF6908716F42068
-7A63FC068DD970B44BEE36FC5A2D8D68F5AED0C2370BC9E714572163DF944036
-B9850C5CAFFCF2DA7AF7884299D1C7F8496C7502942750B6A0107C3AA186BF45
-9B574535C4365E0DF3282912E9E23544C4B7F18744B64B1E9B42CF20F66168B7
-4E47A37F4999BA15536FF1CCB900343FA731CCAC9B6749E8CCD587E08609830D
-23E2D46190BBB442554EC552431EF1E43802157340E2D2FC407B210A7750483D
-9632F3BE1C04278BDDAF58E2E5D076A65AB0A02750D94228053EEBDCCA9E44D5
-782005E1716179A4A637902A08241A3B4DA8AC54E78C28AF4FD10A216AEA67DE
-DD93DB8E8DBFD830E3CF7CF0C9C2009C6315D0FDBEE6A951370AFFA7D4903F85
-13B87AD451E281B0B580F3B91BE5154D20F8BAF462B177D53624ABD72F5721D2
-2BE3F903990E1D92B27894BECD29B1642BB40E50E7F3C7A715F8E7C2B6C41CD3
-8F77AA5C7D5E7999284F7789BB1F1295CA14BDEDD45D9107C2A776078F2DCEF1
-8B647F3B1DC72AF8152CE53A8AC357045250CBAE48451E592B7CE9819AB80EF7
-A09614A890CAC1EA521030743ED627282C070AAE07D20613E4128EF04837DF1A
-7D5A19082BBB87E15218A411A0F71D3D6444BEB69926DB7AF7C894642C4584F6
-3F72A334583E1694A63D2F038692B832FD158ECFDC4C5E90D90136BBB581EE8D
-AA7394D02EFC086470D93B6A30B0B6A9824BEFF5E101BDDCC6A9BEBA0A322F05
-2C6C6444B71EBE15A6310105537B372A1B285538580791248500FA6208518347
-703F5671DD46CCF4D44DED0889B8C2E5388F8ECFA0533AFB3FB5AF6EF7B0ADFA
-5252BF40F0CD5D604599AE7A1A9744108455368B31A8AE0ECCBA79D63E50C79C
-1CF8683FBC12E82F26D3656BA80975F73FBE8AE801FE497E07231F7476240773
-8D2EC688C5B48E52B5F0A67AC0B4CF5C61BE626C53B222EF187AEB0BAA9101F8
-B3142985C878CB8E534B824DF76360B57F2B1252DF23BB638D1139D89832AA6E
-69967CB329D6162F5895801FA7D8970BF6E67FF2190F5851AC6F41AA043C0691
-948B793352979FDA84A344B682E92F47798A12ECA775402A90AB203C99FDD1B2
-77CDD85C0424B5C6D73307FD35A0BC2EA50118DD11211A467AFBAF0814639439
-3C5315A0D49D3A0317EAEBB43229FE6D4EB4106FFE9F23A620EFFC5C181D7C8E
-2258649912C83DD9095B68C8745AE67319D2809026AFAA7F8C7B2B716CE1E865
-9D3EB759FB3698394375A84E1C0D129FAAF2F3585D9771BDFC355B1057BD463F
-1EEE3D77740FDB8445536CC1E45DC756960E1FCFF8653B1CBAADA8BAE4ACD705
-1DFE04A78BA65569B25E33BE35B5703DB177807480F4C62071BEBC38822123B4
-0467DBA52C9F3F827E402E82CF5DD3CBB234553717ECFF4CA17B47BA440F7BC1
-176E1F260D30E1B716D0C73B130110E2ADCA8269FF5543D035D477A94863D512
-DA4CE32352EB2CF10C40C05882C59673E3F7363FDE7A5AC1640662009EAB6D8B
-BE7F4EA3C3F92791583C3FA650E32889691612D01C978085B721F39994C03972
-E459051D3B5D8CFF49A790F2334FCC34782C4BB35484D2E0D5ED830EF2978C05
-3F096E20ED202F2C215D1047D806F7C6804892A106234647E774303ED3304E95
-CD85AF49C06230241A41A82269D8D65E8D3F2308AAE46B1F9C983D3CD27CBAA9
-F966080A1C97FB3C4580400D67EE7EB644A35552F78B62BED88EFC3C7C670F4F
-D62B7813A664431BF6AEBA8F84FB2A8C30B0A9D515A3DE946CBCECF5D0755004
-887CFADF54BE8ACAE761861E4FA0C40B443ED00C46D3C3799075BE4B8CD5AB59
-0F791990C0FE57BADCCCAC3BD8173A610396C3B219A7F5D4D00D2E32FDA66B2D
-DDFFB3E6D3DEFF9691A9F19E394006315C802641D03CBAF42C12324BDEBD5C4F
-5EF2E8D1C71F14471754AA0F9BC5818DB3357B0495BD42BDA3B7F281E49D8DE8
-20E0899DC2AADE991502F16476689B7274C2B02661CF6A80EFC9E980997B369F
-22E49BF33B2883CD74DD42F6F36B25A00FEC3F8EEED86F7E3F0FCE313375E10A
-40497CB617D339BC79E18E7191EE0E112E6B84580F8E42E61FAF34DBE1F8A9BD
-C4A0AF9D5561C2D1A9C0EC5F50F333A3518304F71C7A161A7371199617118416
-B5FB245EFD347BE38E12818B408735F969BA69A8B7D934534E0FFCD43B386C81
-A7F0900E673F841A42E0AB9FD398562D16A627A83DDBACF06FE227B40C0914A3
-CDDD893D7BCCB2F94D61DE3FFC5C5E9F447441AA4C58909CBBD1AB2E200A664D
-C3ED7B81DECE3975D1C228D4C6EF635AA324DBF4E20FC2B5D40CF9C546F1BD02
-9B66E60229688EBA62D47C79B75ED68BA4DE52FD42617E8F2C5F21BB027CBC71
-FC8D73C822B2AD47F375F73FFF0B17764AB74692CC766886DD11E417B498B9A4
-FE9708E34AB88D33932D04455252A061B43CC44640FF203B2C9BDB4F42612E2C
-D1BAEA03416F1197C1AE99D457DA4B9670A618F7078217728B24BFA9977ECC29
-D2EFF23FEAE0035688D3CCA89F884CCD04BFB3239F3D60551033552DD416E652
-90092CAB411064537346B2772F26FC8AEDB291D102096503CC9F9585A62C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 77 /M put
-dup 78 /N put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-dup 122 /z put
-dup 127 /dieresis put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E07BB563C96C0A3E
-6D4DF600BB73729BC4A5B134928F1370B9F07C587F79388B1D9AC62BFB1566DD
-CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43
-0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F
-08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E
-588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF213
-11A0DE01524197270E30BAE6F3C9CD656B69AA3249F41C2EDFDFC2578C6843F0
-4082A0F74969AF11796C8E84B3609BBF9D33AF93598CA7C66A838B58357AF67F
-347CADBF40934F52960E498188D3AD4444102B5F3B9E13F800C9834B31497AFF
-FE049ECC9879A3C97D78A136EC0FB343492C7DE3CDC79E2F698A01BB245D0730
-EAACA3AD6FD8E87E5884D0F3C0BE35260EF291E5D87940BEA66A05454E31F581
-6A2D9BB439829A804934F86D8715E9D9293C22D7EC8CC4B9D26BD7228A6B3E02
-4A3CD1FD138AD31954A654740B42B94060C3FAE9F2E95DEC9E0D6D7512BB9444
-7A18A557840F57627ABE113EB08E2EF55F615461C79EAA63954EB129130567B2
-D99AD830E56A5337489DC6C52CF3116FB0714AA272EAFCE0615D4E29A0A3F5A2
-E7140978DD44A5C69D102D5F2108FAA5BE77A1CA20009954562FC12698A99EE4
-C0008D177A0E0780E8B6C4A36A564872DC538F59760F1CAACF615469C9087BC4
-A73FCCC86B80EE69E6490A99DC0FB667023B270B3273D60E661DC76AF2AB48FA
-6CF21B39E96F734CEE1F81FCD0EEC47E47816F157EA8D75AFE065EB866CEF278
-A88178B047F069218677369DF101FF6EDE143708E6D8B9B187ED841637FB825A
-5CFD7D0BA1A6FECDA0936080BBA33008D5C7E6D57D5DE8865CF64CDE12803375
-63DD792FFA079119C76E4811D064E3B893B358B7F1A67D3B15FE747CC220C512
-7227309A5B0E0988ACB22B9D18FFB368129CEFB1FF53E9729DF751BDBE47F443
-C6C99C6277288DDA1B7DE5645E31D2F54D5F930382B487445C930EB7071C9573
-26BCAC527FE2D2D597D22C6FFAF8CFC9A61EDB3DA8AE4397C0C0168F3C8BE8E1
-9164EAF08A91AA2437F5EE3CB02C7CBCB083D620172ECB93BAAF9E009C27E1D1
-0B02F3ABB85F2F105D73820465F653721063E3EDB736F6C2A46F81048E02A857
-462C9608320526539EEA194F1856B9FB8CC80531D9BD7D494DD90793CEE53BF9
-BD431ED5C15A3F5A186000F9AA6D83004B53E6692959B4F721AE5BB2069E3946
-D5577DDF1FE4C883FBF478970378D3292DDAA426305A2B366CF673A636C7A332
-92A3DF8254BF6D9FCD58E5DDDBBB12E5A1D2A1AB1F34DD295830F2A3F531CB78
-4C3511A7D79B5DD17626EFE0E476E146441455DCE7B9E5C6E24B099164AF8526
-48F9ECC20D963EE6BB7B30FFD3D2F93659CBD1C3F41BC1A10E7556D6E9C9D9E4
-9AC62A1417953173163DA8A1714D8D6D030927DAF814E31CA14425EF789B57EA
-C1E655A3BD6C46C4E4C74BA0D4E2890EB44B57539A76E2817C7A3A05BC099D4F
-FDF639606F5389B48FB7B2B27ACD26D6C0AB476B576FA3AD7E8A2B90EE2DABEE
-FA6C71A3BB7DBDAFA0590C0867A7B3519AEC7A88FCBD14BCF6FF71C21B8B824F
-C97617D80CAC134FD7F16B3ACCBECE31B1F2A4E7EF8641CE8539D370F6318035
-F10304B6FA3FF47B4AFA1F77C2DF7E863C23FC8877A0A626AE42BB4CBE708825
-AF5524DE49869CB408253EB64C1F793EA70207E7F18C44BAEE3FBA4097E69C89
-C571C34AD0896E3A08A3C4834ACCDD6D0191481A472247E2B4FA76527893A1E7
-32982BFD8FF3ACB2DFAD7E359513667AAF8D64A0A8538AA9AC58E5E2742878D4
-C47C9E9F74FC134D0C307904DD7100207DADC681B6EDE399EED305E32F427599
-AE414B770FB1BB49ADAD8D9FC4B5BAA4C4F01157C763198BD945BCE6C18755C5
-552A787790674AA407AEDBBFE51FE43F504BABC4C2EA2E08910A2E1B98C9FA11
-970134EA436C92BE95625A98F125CC767EA00C3B914F5335A1094EC8A7BE9F53
-F058D3C5A2ACD23A106F38247A1066AFD13942726D4C67B851F3FE91B93CE5B6
-15B556DAD06D10740DA08394D827331F504EB3401E17D3D4E0019ECA9FE7AC3B
-4C259407F93F1DA6521E1DC9FD4F996FD646A68F636CC5A6453E41DF5DC6ABC0
-2F946BCE0C4C5036B68680EED074E5770EF95BBB46EDB6E3DDE5800F6E0B88FD
-78E21751166464ACA5B7ED356F4B2BE74698872E2C791996FF364035BAFDCC15
-0290B469E3B8C929DE61CD12E4A1517E5ACBA9700BB0516E19AB997942147C76
-3CCA2DAD3882A9F937918D8F501EFABB8A578495EC78F015735EB4B17B24586A
-707B6220120B2EC9F51F8D8C6E17E895EABBD8D2C10FBFA6893F632306EF5D0B
-FCB8BCE48FC54D9C8EAE7B44675E4E7C1A5175DD2C3E6DDB13A54F4EBA618104
-12A18B6EE1DA922F9A7657F01C4FCF77C9A39FF671EADF16C961D525F3BED021
-506CD6872712B154A897BBDCA877A3EC36006AE0727C8AE9CADC0986DAFA6197
-51C6CDDD926B769B4D4E78A60498912E0076CCFB185DDD157C23C99EFC81DAAD
-DB4594666031E8B2AECB4B8C45B635B6BC5136E12838D8ABA323F0CE5F77137D
-6D996DB754DF8B1F5F863E88017EE81AF20DC0E577C4703D33D8D30335D12A3A
-43E0A60ED40490E1C17C56C8E0D8F85DEB830EE3376B50D79A7308702FC73FE0
-F687CE591A6BD165ADD468A91FA956F0896CD71280DD6ED9DCDEDC2A874B2FF8
-54A04850C55D6EF0510A57F4A92D3FB1CFB342B5EE8818A4C57B76A86B78BBEE
-94878BDBA7EA4695638C6CDA81B2DADB67F127518C61661CB25CFB241F483921
-FEE3C8B2780D3BFD3DEF7C1DD1E2E495FC2779E79AA42E691BCFBE6A179220D8
-2568A1D5CFE865D816C7DFE09525023178252D091D2176A7765A225B7A58F5E6
-31643A1F7F290793B04EDF45555F87C244802ED2F052A6B7AED10CE97B25C4D9
-689928AAC1D6359A9771D2BF145F3D8F7A5F96FCC2528F1F61ACB5EEA83C8CB5
-C8D77EA6E47460F507EAB77C41133F4CC8A7DEA55F4AA4B1D7CB79FB658DA6C8
-127E35F12C842DA381AFDA65DECF59D64CDE61D8E847CAEF1EC5D68642972D83
-35C44EAF0E96216490E3C2270FA07E38458F9A7C645C7A24AAB545459AAD739B
-6AF97F05A4BD6427E3CCC63CEC883D418604400A2D49BDEE8A05790CC79EED98
-7E1DDE7AC60E58F5905C469481C3DF3C2BBCFDBE9EE38CEBE242A4C89E73C8D0
-37618DF331E3D4ABED1F8478938BAE12DA99E1898782FD189A316FF97E71FB7B
-1D0C838B0379D8B288E3FEEFB3B5CF9E0EA17F4C46035E71208708F145A868DA
-6461FABC50816A6346A99025D0D5BE62C422309D0E38B1B57010D00BE0D37C04
-4B7811EB21242DCFF99531A7238A92DD539C57B37D57AF4F4DCC381BA2C116AA
-06E4C75AD3AFCFC79A51EDAD3680FE6AD3B84281109784BECCEE46BFFDDD2B0B
-175DC3A53E601519DA6E563E1D0938076626A851B60228E7AE1CAAA8309112B0
-1AE15047B51274ABE098001C02F97A9F7732B60280310BC1C77E3E437CC8B387
-257F33990F628292CCE5C0CBF9C0ED69391F1EB7ACBC5CE67897B60262F43104
-83A1AD89E1DE110119E0579462C478D3C96B134475D756905213654D63A25EFC
-8DD8E296C7C9822DF33EC0C37B6855A725957AE4BA59683B696471AE8006E20F
-99CB006D2871686D3F8061125B7479A0B7616ECA5AD312EA374CD3E626A3D84F
-4E321E2DB5754E31AF7C7007376F1AD295714B63ACB429D223AA7992B19798A6
-FBFAAC81F88E8FD4387026702070ABABB5C2619C99914FDE91423582F7A44173
-FD078B76F465E95060F3940BA6BE3F0D70D409B1335B671B4D0DD215C4F3E448
-C63FB9B6E3BBD2AE57CFAFC32F0C77D0D1EEB60FF42BA792B4B31D7738EE9EA5
-CFFB7CB2E9159C19EE968902ED797394D2CCA5819B69B9C929A1B3EE02AA64E0
-6B5CD5C75DD43FF3BA066DB8AC30580E839340568B8817F3390E1EAE183AA414
-17C39793EA81A0D3A41FAE03CBD0CBCF30B5AC1BC274D39046E1C9CBBA2DF6A2
-A9B2D05C754E5C7A561FE48BE039582E59D2662BAB5C70A2E604B3B12DABFF72
-F3544E789BDA8AA51758CF5C443DC40ECCAA7B90C79C76EFAEC0D914D82B46F0
-6192E669A054F9E7622BEDDF44623EC6B345D266F7B82003791B0116CF20BB26
-ECB0A3270DEC2E091AA64839AC2E2F3CF07C98F4259F38343D1B40D59221B570
-7CDAD49925EA04CF3313BC397F07C4FA88073EF9108B41379FE253E422F864DB
-4BA47CFF023329ECD166387B28B621D325901D52ADE7F7A88332120E1A70283D
-E904915349C01871C8A747B85A2953A82F93B137C75D4AD7E79BAF7886AA47AC
-2812C8464184AA44460BCAA5873ADF4306F7760CE9BA9246F450EF85279E1E61
-5CD9A6DB43EBCE8CFD8600349FB10E21331EFD113010D5F72C5496456F1DBAC2
-67FE71CF6A894F3FBD00C06EA7987D139575F362E3F2AEE1CA23B9C48D3467B3
-0BEA687B560A80006B985ABF70F876371D97492F89AD4A75350EA8B274CA65CB
-0962DE31D0A25F0EE8DC26FCA7AC4E3ED964FB64577E14E8BA83128C841C1AF3
-D9124FDD0EF2F532853CB4016188E93786428B0EFB77A1693CA03CE55CC50B00
-11DF451676C7B1A5B0E6D32EE76AC04CD3C23E53E146B192BB5992C1C28F9839
-95A0FF1E9F65FAFAE936023DDAEEDD59AC2F8E23F43838C28AD64C92A1E22AA9
-7206F686EA2214A9C6B8C72AF17632CA609A400E1612B5F09C077553CF9A06BA
-519E7BD8081B94D30EE5DD470CC9641A2BA412EC80FDC2A3D643812420D1A9B3
-5E3AA02A59297D99819B60473ABC13910A4248B870D48454DAC2FC609C5CA2C5
-6295B4B300BFDF1DBE1EB32B023C72A3620A837ED953020F01505BDD72439167
-DB676D7B928CB0D72C4400D6BD45189C822CBBC9EAF3577BFD08963D8F56CBAA
-58C48C426F61B5FB68F9B345ECA6B823009868E5770701E59D9008A9D2518ED4
-20DD45DC6A75F1C731D2EBE5CFFA71522885266B7F8868AEE1F950B2371678C9
-6D68D9AB0F46C9F9C53D76052AF52E6796B6406C21C348AA80D621D59882F326
-B8278FF5793CCAEA19C9FAAACF0EAA1674852BBD743D4228182FD2C57A848A48
-AE90677E8F78A6D7C05852C7FA2CBADB0335B5629A063AA4EE2015F75D4B3901
-54BAC73F18A56E594953392580EF185E4858F6988068B4F20612EF86A876D7AB
-138640CB81DDD4CE7C3122794F790BC4C28ED57DA2436F0EAE237FCA17FB74EA
-D32CCB0D6049642A9F1F4DE4A7FD3FC69DA115651729B8AC9579273B2D52E92C
-84AC2753C8AD938980FC6154157A9B6F16FCE4F164A7DB9B16F802AFDAF03905
-A27357A8437CA3C58AE04B7E6BBC5B7E977DE332E8BDEEC28816D620AE68DF6C
-8FEF700786881F71458CD14274C650AE40B6651E4B8CBAB438710CF1BF95CA36
-FC790D25AF295BD82FE7BE46D3F24F085EF14078BA735EB74E12F5C7ED32BD0B
-C352FD53A1C005AC06228A7BA720B6F4C4F646F78D31CF68D7EBF795C0239CCE
-BADF807DC5D67FBACA127792AC75A62F6F1F73D64AD54698343FDBA46E119F65
-6EAFEDB71B82C87DE2F8E52A2CA8F3866194E33DDBDE6CD7CE5A2048CB0069DC
-1D9B113C6F07BB27D4ACBFA9CA4C48BB3E1016BC0D0C1A244C9AA3F5775788BB
-1377B33F943759911292027D59926FFA8D2E0B42F13174C86CCC5E85DF8F690B
-C0213190B267233C97E8A00A1FEC4036D127B851B280229910447A003A6E177C
-09297A546D094EF676D79A143EF41AF32EA18FCED33E0333A269C1F415492EC3
-1030F2E5FEEA8DD4D3E4BFB2B2C3C52BD6A9A793024B8A4C922CD5EA88844521
-BF1655F0C60F26AFCC5BF249D3D526D58E9AFFF6644BF3CC63C1E34DC78F5DB5
-7EA60D5E9336082488EBE32ADA4C72398F41AB65B3D2A66873B5B21E15A373A1
-19C9DAB008F9019D4F75950F6FDCF08295A0288840F8D2C9D0D2564CF3281B46
-0D207F31673D32E7AF947C98BDFA5A0F103B9F9294522F75C1F77DF139C557C6
-8F2FBFB745FAD1F7A7D4DC44AE0059E087118A649E20D8C8C195C3D53702712E
-DEC4FB500BABBDC6F7CFA9404D7304B8B6075653C135C67535231BDC50497F82
-87A83FCD548EDE01BAC21533CD0B9580963B0D917634416CF73C8E63E8BAED61
-AC2E035C77E4F7F57BC5F6DDFBD78BEC5C63F1081CE70B28D93622A728264632
-5619E5CAEA299F82A893FA869A6109DF69CA925007F6581B4FAA7B1ABC13EA75
-A3880836F02B2CF4BB74B6EB89958205CDB5046CD44C64D37CE6C3D6D22C5DA8
-52474E899FE968F1EB87F9F6E9EB2BC293052001FFA845E135E1607CC9544197
-8F85CFD6203C8F85CD747D78328773442B66D34DE4BF167037C8AD551EEC6330
-C2FE9A866EE43C13A866FD060BA2FE71AF820ACD116E7403098336D2D6186562
-8E8A4D2389A2BAEC96021F8E53B2F819DA1834DB4926B4A28A65C4FA045AE35A
-1C1660F7C3887B418155DB104A5B4C9C357A910235C4796495E70EE20F27F1EB
-B820BC1812BDBA2BC603459D531D3F80001F33A97D4784AFA78490EA731A914C
-35E7E4B13263098E67A5A229A10DA5DA4B9C7967D65F084FC415D4562E7881CF
-F96A2A19E763DB025EC53E9772BEE1FE029AABEBB6A0C63A767941E507194460
-8BD86D66F029ABAA469B29211365FC06D76C9DE48C76656C9EFCE9DEC40A8CD0
-0325DACC7595CC4537647A8D2BE41E9B65761407481A8B95E7497C4AEE88ABAB
-62F14DA187156A45ABB26AE4B390E6B5BE999105EF6247B1CC1CFA1F67F53023
-4CC99831C018D021BFEED1A6E2DA1E22334EDB644B0452C24806D4A6C55D3244
-C9EC8D98BF765CE83DC44C5B507F7A2021DD90535D6C8189CCDE80F34A803E32
-9235759A6AF46652DC3D0929139CCAA9A4AD33B01FF0D0E384EB4B4FB8C5627E
-90A4A9BFE5BFC56D07C663C510C6E68F3D573BBDA27A0A5F87FB039CE742CE97
-E6F839579FA56E97DBC48802836942118E631C2A6722F26B1796EE244394191D
-B4794E467EF290D47D1EDE37F05C99CF4B6B107C23751402CC93D65AD7713C86
-7855D3D5903D85D3CAD3D399B9B1D6F82E9236FDD7D0C1E8768541F5D71E4FF7
-3B2627BCCA0ED0987B683DC08AEDECEC99D5ABF9002E0DB6B96F986D087097C6
-A37C7B438474736F4C302D9F96316787E623FD7C5870B0722CA503302E0D1CAB
-E0112744ABA7A4BB6EA13871EE4378DD71E6928AC777E4F8D3A79DAEB764F547
-F63030E8485A3AEF2E16205305AD3D41856413B84BF9444C58B94AD2DFEC4E0C
-C5DC6E3BC86524E6E8FA3A8F736FD528F3B4C2CBFC68D08FA4BE45E87D942E18
-1D7AB745D7BF40C8DD957887A6F196558053F1E9A66A3004D844F468AE2020B7
-C732682CD4CBEAF96D1DFA0CD7A5340B243512E01A785C318AB7FD86084A3466
-D5CFA597BB028840A94E03C0CB34656030E7A6EEAD68C5C33E9C7F4AAA07620D
-970BF9377CF44B224E59B117CFE78AE5C73681B87415CC03C63295B857DA0168
-8E815302A1175839A1BCBEDFBE1EB8BC0B86CEC817361892F6E0A26F7290E44F
-7CB4191B53D844EF577632A6C4B71C23C965754C021059E1066C106252B0A333
-E70DE9E1536E25F45F92E88139D38D8B37E839A2F38A5641797AAA9A33EDFB9F
-6703CA0490BBD846AFD3FFA514F00474C42E5637AAFD232199A754288F86F223
-8D9584DFACF5CCD498F4D525836F026C2C4EAAE67985A1D0E1F9932E47265A66
-74B02FC39F8C576B45BE94363269DCAF4E999106BF1E91CA01B735C859CB3B5B
-D4CA139D05ABFA22E943F437FE85F093921C1A7351A885F78FAAA347C777B640
-1E8B17D3405244F338B86EEC118D8BA59CA6EC06DF32B379B95B989DC6AA7035
-C51D0A6D55202155F91DC63C76168C323AC4F396BD0E254686E20F9C5BB4A184
-0092CB9A16C8928DDB70E3D4568B18BA613A32D8AF9934C64AE3ADF6A4683FB8
-EB6B330D1C9D65998CC12DE9BD75C5AEFE96AD6218FCE6831B29FBBDCFB006A2
-087A6A7A55799B74FAA02C1EF6EF22FD2F208521F6045A2A502B26F63A0DF8E8
-4749A7E80072CC9B0482AA2C5D05FEF9D396B443F4223C2E31448E0CD3A81A2C
-75260B7C95A71A4F82230A7E5EB2B7BD479EE5C4FC99FBE5B838B40284F1ACC6
-E0A2EEF1CCC917D7A954F1C62FADBAE79802BB00D9F09495F66C1C71FFDE6C35
-7B5F92AC39F5B5CD3BD36AA6625C49CDE8FDE42BF886977994D9521430372694
-F022E3573B47F1FD82D02AE54915177DCCF0A28C8F46FAD69F6F42A30714966E
-A31210E7C7DA5EFB12BBD346B6E2CC54B1AA68D6A36CD1ACFC22422E2C69C284
-FD474CADF22996095252D28D2B7C4DC2E3DC8302E56A1B2C45865E5FC0F30678
-DCD5F5F5BBD4A7CA6C5CE3E6012CEFE13A0BF35EC3687FD33606C80D7086D6E9
-09F85374D9FD4FB4075C41B3B8B2DA592DFB8A45BB0840C52F8C1B557BCC5F6D
-D7C48622E8E05A7C1AFFBFE18F847D8D719D7F6F0676F36D788B9ACC730D1E22
-D9935BE4D12BF0AA8A28BCFAF2605F5B92CF33C2C29642466BBAAD49897814BF
-01B48B4F585FA34C035075FE81FFAF0A11CCEF4FC0A8312DBC3FFBDE5D0BE3D9
-A0F14A4346E5B6AF1B248BB9D2922B01A0310F26664F4C4D7CFFF42C23743F5C
-EDF8398F6B56683E8637522FC01FA23E1D90BA6AC0AFFD2154DBAB660C3D8D50
-165C52ED71893C1E5DCFC0E8A16F0587CFBB560F7A36D2E8FADD4B51601F8EE7
-D302202266555F4C2B9DECDBB9139C8477A5F920A9EAC268FCC4B6F0F5221CD9
-66E7A162F2EDE869EADF43F3426BB5187A3C56C98F4C8E318A91CAC3EB5E8A81
-F70911F3108DD1829E1477D8140908A63DDC188A153AD6FFF9EDF25803956AA8
-2EAE342EE5B6D742DCB6ACD0B395F1191BAEFE6B4ABCFC545D63CA5C4A93B084
-CBCE8F11B0FDAB1F5E905C0FD81977C38A605261283D51170E16074300E0ED6C
-71CCDC3947C6EAD9EB08A0C8B0E376313FF292B2798DF74E24FB1CB97DA468C3
-D5471B8986210C6C918D2EBBD2AF1481B45AA80052BEED303A3C4F62BF61C51C
-16C7B5DA640355CF9E965C98B4589DCE64DBFA471A9D1E2CC595C1C4FB1E9C24
-A79C182D29BE20EFE708336ED99C099B73C2C6CD76E33CBC5CBCF9F8FC9D582B
-A5146793C6023A6D348341F3FE4DEEA24F383250DE926415813A4D5CFF0AC0F7
-0859E06EEFFCA4512763389D30F61B78D55E2029A6C434D4C6AE34FF9B842D08
-F6D9D80202A1943F7426176477151D79AFE2B04B18B862B4479ACD9A574E6F03
-300CAF6FD06088D434A4A8C4E82EF62F8C9FF511814CB612B7703045257C0E81
-B6E3BE158716443CD8A1B0CC9C3DEBB7A7209D419C8B4D0D9505E4EB803105CE
-F13164AD59435D3492E97A453E2C4C20926AD28C68F077214F792B8A53AD65DF
-9C64C0A6C5D738090FB9A9DFD5E815E463C4A910320E562611482C2499691F70
-0729920028EEC50510D86996E1992D206D9DB4154A2789E2FECB006698DCA0D4
-D9D2249F637BB1EAF1392AFC4B15F5204507517F33BFEB755A6FD123C7286C84
-147BDE88B7F2D1C30F5407072EAB1FC57298944B1DB8E484C7A00E507E02CA60
-B2FBD8B4D2C90D335482095104259790C1D0B30761CB51076F70B1FFB11C8ABE
-7D2CF73B39F62D7A89CBC61042AE125557492E71D42CCB9938EA30E4FB54D79B
-B231AB1EB11A165337E3D60F7432F99F7751F8154C88F987CA373FA3D8F53396
-EBC264FF06328ED4363A7B8DEA823AEE38764E9C4374431F695B48443D769B39
-1C70BAB440701C09EF3DC1982A6B9ED93A743055D3368535DE62389DF77A91FD
-843137AF92277CADB3656E89888D04E83051053BBE60501D44BCA52F588F7094
-B2BE919A6E1A5E871BFC66E9AC5426385381C92F061E495422A9EDAFC3550E04
-FBD39AD669FBA58E27861F5F8EEB68FA6CF43836FC89CEDF8A7F0C40C4D9AB46
-32CAC6E577206C6C96BEB49E034C9CFF6D93AE38D943E8733532B2611482D303
-F26CF863FEB1B2EA26907B140EFB1F006943F7F8BB0407C9277EF8054B7E4B21
-42DF8D189D4666CD18D7B2CD055E3F308F542B8DFE44191497589916E047D772
-3A49FAE265259300BA758E9E4AA929897FB1A3064341F50BFCB1BA941C63D2A5
-4F1D1B6F3A9469C40095143D239FBD8800390C9692D85743FDBD0236D53FE564
-3025657538DFE905B4266C6DA9861D62CCBA71773717D432A968A67624305DF1
-CA737DC9141E2B53001EA5FB230131FD58B6AED2122FA73386FEE56F6A00BE39
-88DCD9AC72D1EE3BA65845B211F50B6564FDFDAB5D700A503A4A1C56CF4D6FE4
-6A59D07DE72398CD024D77A167B96690F747078CB33BEFD96046E62F1EA3F232
-7249AFD6890C0618BAF6AC5CF5A331E7A17BF5112F015C7E32118633F54FB9B8
-9B630DCDE24CD3D8DB648FF875B6F5AB697725DD0AB985EB96CA5E4C38953385
-DBEB1F869A464B95672983AA464FA8EFE6AE5D66CFB3FB9BBBC8E76DF097A290
-70318DC19C92E6E52DD66A90C1490FCFC269313380666A5E1BE866F29A52DFCF
-1E4CD96E228D709D2A247268693100A6BEA47D46A991BEBC17B4923CE260DDCB
-CA8CF0E2A7702CFCE34B6B4C84ACB3619505E83CB15A00ADBEFB85AF76459D99
-4F13F5387C45E4A7B3545F940AF5B530CFB4B87EC62182D928B2346952A9181C
-874E562B861CBD21650CE8D45B69D57FACBB65633E5922B2421DE294C678CD1A
-A96FCBD57755BFE286B2CB859E7306FCA8D5A5647DD75CA4C88F650066682EF3
-1AAD5E5075950ACB0E6213E049747D50292FF681FA9BC10046A50A24A4343830
-F6383D5C01CCBC45B639E3E77408DAF3FFA2AC38FEEAE066E589ED2558B7233F
-46CDF10B9AB854585BE0EC1EE999AD024616AEBF8BFBC7B62FB4E61CE39FA982
-B49F014291DFB82CC597FC4458E147C7D1F35A85F43710A7C8ECA4E75297F670
-BC84DA0007590C97F264761F2442D0BFF36CDD7CBEE8309ED328F9382E888CBB
-BC797D5009C40EA7244274C38C9ED0A68D2BB5DDA1868EDBDCD77AE2AA177B41
-C0B4189AB13F26541CA0A85C45AC4264AE799D15383CA4570A72F52882EB0529
-0566FCDE2781C4F803C7530D9DDB092E9427AC9F81704A7CDA0FD244ED869732
-FAFBB1F33A02A72735AD8A0E7E9E2715825B06E5AAB07B534838C55C706E4FA6
-122335A37B18C23EF0413E80DAF87D5FC227F2284DCC2F4F210F0CF399F91263
-E493F59995500395B8636EC3800016729E7AD8F128A1915DFC887592D5D50171
-CF398265E5F0EF52603EB59188255546B58D8BA2702E76D99587172472DF09C5
-3CAA541B2B700FB971AC9EB89276D6040A110985883E8C846BB8A987BDD23CBD
-5D3DE231A8E3FC7F34A645E14C9769608AD78DA48989FD071CBB4C16ECCA8A85
-4E7414C4BE33376A747F00EC9DA3FCE5FBCBF3D11C9286F338C39009E45DA5EB
-00A574619492AB9251FE1D4927AB873CDA6FE918E84E71868D7D7144E04C49AA
-245831781F7F649174415B02D8557C9ED894096235F73E65DE886969D6BFA347
-A2883CB8FA9076051FF73D2355F0E6EA80
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 45 /hyphen put
-dup 46 /period put
-dup 65 /A put
-dup 66 /B put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 76 /L put
-dup 80 /P put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 122 /z put
-dup 127 /dieresis put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E42779FA15EFDB451F
-53495CE8EFF239E4EC442E1439594549D45F5276F93D496C9AC712D762D0B702
-E894290BA028837304AFDDD8BAA6564E9DC307A14A7A206550FADDC7784DE3BF
-3390188BBCDDD929C82B1D7B529553BA75ACF5B385D31EE3902D96B2B5DDFFF1
-9F0F90FD791E54128C1717F313486896868A34FAFF22E23CEF046D02C77D9B00
-9908AF6DAFF828B73CE5D40C528E23EF28DBE0801531D20EF59BF3B3C6D26159
-5180FE8F6A479FFE339D9B69D77FBB5FF93E5445AB5F6D857461AECB43532279
-B7DD9680B8D69667EDC7E0F9737ED7945925FF1733242C680F93F79ABF84CCF7
-747DB5B65293739457BE2FDA6740E4DB8AE2914C3935B6654405220FDB594E3A
-2C749FBAE2CE1A5D217028DC6A01E4A3AD34EF5060A64D5E375B841606244ED2
-EFA7F2E89936CF07FCDF8F4E40F35E6B27D8B517049819E2729E65F9E8B2050C
-C004440253C28E0D8A0FB05FC420956A1A2ED8DBCA3F78B50FDD81304F2CA600
-22959C77D6F24A9689EBA559562EB03BA4C376C3E679E9D660059B3E8B4DE6A3
-51238BF58F7BFED27E3D8D4D22743635ABE7F0835108EC5AE0D7C327452D83EF
-C0C484933527162B36A81F9EBC9AE3C76BAC7BC9E69F435839E923784C07D4CF
-C046F47BD87D578EEA1D10D898080741424078C9FE03D68B60E70A30F9B90CDA
-47C73D5E4EAE3B46FF0496D74687A06DEF0E9B1149A2C4D6DFB11836633D0E6E
-0080A8CCB5CB864D1D13F7C878C380C7BD705934E53A4098499B3C0E6AD34B64
-C04E7D891277F436026E98254D15428431210576D29E2F8283E83436F0919FD9
-7B412601F38E4DE4BFF8DABA2616FD85A843207EEBE62AB1FFCB36A8641FF460
-D4E47F8B86FE1F4E653BA9A2FB1EC019C4FE3BFDA9AD9F4CA254E4153B3AF9E1
-5D40717AF150B5C2220415A46DB764995F271845AA546C4B48F35FD2889BB4AD
-9B0CAA006AF67495538104298FB6B9ABBC2A5CB4C2C3246ABA338DC33E4BB2D9
-E6BDF72A72893F28E45714652357AF5E396E6749246378618DDDE2FF61FAB507
-67C0FF995AAF62162FA126663CEFE5B1B87625BEF2BCD8C99593D541D270AA12
-1E246E70D9ACDEB2B8976557B51CDEB981B361006AF6DDC34F762ACD34B95482
-F168584F785B2BC07404BAA67ED47D101BC2D5823ECA435FD29F72890C7E5BCC
-C1E7259EF7AA3D73A8D7C21B33F0B000F3D6DC4BF20398039C8BC61D47E5C712
-C57C996777C54D1AA71402A069931F59E978D10D63403B65876FFB4CE84923F3
-79C14DD041BEF0D9A544BF93B346802FEADF2818C0B809BC4B20AC99DEAC8907
-3C334F019B96FF8FAB1B30415182F8BE213897CD7953B53E987E70A15593CFC9
-4879F7D2E1330A5BC888459649DC812130290B664D66FBBEB2D3328ECDA583C7
-0206382DFAB9124EAB2B00BD2E709EA0B76D1F1F1CB6BCCD65FA1BEF63829E34
-0EE15078ADD2ED365BDB98C568B7D6A580BB553B60AFF73DB0104602AF729C7D
-CFC2B6D671BFAC4E29F6B30FCDCE6C72F720916DFA9AD451CB42AF48B7247AEF
-D39F0AEFE1B143568B0E845D7DA402FF1C10A651E7825EC3EC8F9AC26299A10A
-F67C1CE7E6872A6E2DC1BC11A51CD1C7CA473384F3B1EA1C3E2CB7EA0952CE52
-733B667E8C85EA1D2573A6CD6C2C39F1127AD65D2604CB61146FBE078C7FE638
-4A3E294E38838680540B4CB64783814CC646DEB23B8EDF9D91D34F9BB16CA554
-18C55BD861CE04D6EFC5A9FA32F60AD87E6D6E9C52E0D224D2D4F1603650AF76
-10A02437B0B47CAC4A17FB85F9AF841B828918A1E2174650888ED1DF292EEFB5
-CA805ABFCF172DA8F9E27E5CED9B516D86C90B5B9283D24CCCF011010A1AF1A1
-B5A8BBE02EFE2B6E0C980CD7ACB7F50970A996C480A4766B0022BE590ADAEA58
-BB923E40FFBC88687042A8A23E18930C0C67BF89F37AE1E7D970AC8F53C05651
-65EF4193D70E34F2FF5648BF778AA214205ECD780EDB7AC77623FEF5971650CA
-4EA76F5835798ECAA6D595DE832354B3BEC5E49628C9E83F1432A0B3BC6B313D
-204CEA971A521F0A5ECD60862B29AC6D886EBC9A177279C4D54F94DC26ECB3C2
-3DA9665C1313D97579F80B3AFA9009DFEFEEF6A1D99CBB12C47893853A771F36
-47A778E4EB39CBCA44EA138CB7011713AAC47CC592938BA8C28F116603315037
-BE580BF474D8E0515F1B354A5130A593A0554565BC49D407866CF2EEE0F225DD
-C4E712B2BBAF659E1EB6FB45D828C1F6F2630F26D62830E8B31717354F912A5E
-3555843F5A84448F3EF127D598F6AF5DB3FC5ABB55A0A6FEF4E1E66BFA97E32C
-144D8DF78D41246462C1ECDD584BFF024948C50C8EBCD60F1589100EE5325ED2
-C1D48F964BA0185AF7BDCC448E6C006B01D8BC30374CCF0E7AFB52153E774DA4
-104E55049A2335A0BFF78B31792F9335B3BFF55B5E631307519FC3E32FFB74F7
-231249A90458311976EE419F1A081AA021C12C27D1795FDC6F010B4A46650751
-DF70E3D1D021075B0AE1E15FCC34B64C55CE8DE21268C10F3FC68521C12FE9E3
-E7B0159062E76843024AEE2C45652FEF654E72C76DCA4943AB868AFAC65EB88F
-B83CC3977ECD7C42A306CE31ED7064FE63143944CAAE9B339D306721CDD70DB3
-098398DDC29DE292D1A6ECC04D833237F01B49C549ED9D13B8183B5E3FDCDAC0
-AB53A13C187373E213E1ADA06D32F0D929CA4F1822F23D7EA266756A8766BF29
-E8B774209DEA4B1E27716085B2018E0B631322E07AAA04D4C61E936E033A80DE
-75C2B64C576D1A2B35CD9A5F9375AAEB03311E97E736B80DE89B7C5FB37F4E64
-716249099BEF6FA202D4C0BAC131691B00A1CD26D16C6C61C9166E455CACFB29
-D93FDC8E20B8445DCA100FF5EFD9CF7CB39BFB7ADEE4E9FA272EC7705127EF76
-1B6528446BA6AA51D11D7699F369DA9D880DC29B2365E902ED7639DB905931EC
-9C2F2FC8A74F9F56D359C689E3F05E17DBC6086EFF9B4C4CBCB0E4EE55A44D7C
-C4C7AD89976B240C6489C36CE66357B64CE411B799470CEA7C36AD85E94B47B4
-FC870EB8068432B047E77F8343EE99EBB1B892A9469A5F52409D4798B6ADAC11
-C72B406123F7B2EBE7BEDB707BDC272AC2AC6D1A70EF260E5F09E0886C57124A
-F40578F0D6ABC54E30D95E42FF186643D4478FEFDFE4253A0C6C2FC15BD05358
-F76E389E12286DEB315FB384AD75FDF57A3B3EE779F1F912AB2E8DA913F6D4D5
-23CD14208DD9EA3CA5AFF3B6C8CE1E49A7A63D1C1D7A52CE8DB0743F1329F556
-96CC35449BA62E5188FBB1F81D8F399EA5485BE2BA297DAF67179E1018497BBC
-E46FC57E3E2331818920E9C7BE8809B3E00A3B10CD7996EAF62C9C1FFC32CC15
-9E08D36D3EA27004E19AEE20613612B540BB47C93FE87F7C79148B2536107F84
-64FC096105BEA25A12AEEFD5B811531771725FAD7201E029C8EFEE659583A1A3
-2215FB6769BA958274275C1E3E99478D3BD6A00C968C59142E30A549D7E9E5FB
-D2C61229BC9E11750313259F4D51D09AF4E1A83414AB7194B30FE2357175A1D6
-B60F1A7710773E883D5C13725257145DF6374522800F56F25A81EFB4AF1D012C
-F42B82DE6C48740E71502F535B05EE5E065A20B9958ACE2E18F76FC0C04D5818
-5F603F68604A61FC0E73C9B8EC87A18BDCAF7E70069AC4304258B38580E1B6EA
-E27E6DD11DA93FB4CAD4F37D4455F3181047FACF257BF42EEFD7CFBF0C53D5A5
-B19B33766A9B0519B738949D1ED583338AED8335BD6E4135F3A8D810A49D2700
-F186BDD9EA261D3D018070498FEE5A02A57E73D5FA96E6E3C12A78B567A49EA0
-8857EF4534CD4E53DCA372D68C758840F6E0314DCC3969EE093FC8CF2CBE6229
-327A3C8576C6804D10A8F0E32B1A1C19947ECA1CBB7746B9E53026F1B1222E03
-8B3E2F007DBF9B4539AC633A812B7900DAB48D9955E100D5B0ADAA1F11500A1A
-48AC3496EE0997D0E326F2E8E17F443C3452E49C9C8BC1CC7DBB51DA4E8DEF47
-ABB2DA939176F3AC9C98E6C8F2D7F0D6FCA55D9FAF7F6967ACD67DA7E548FBB0
-01E157EE7F2B235A21A7399BABAD2393AD792758D2DE5AE9F78E5151176949EF
-86AF1F95E1F920E666754C6623B45632DBBFF067091DB30C423780A744A4A30A
-9E9C6999168ACE789C93E161035A57D708FB134B7BF480F1761220C0C212945A
-DA738A15F8E74036C57909CBCAC0D36CB7D2177D3BA99D12A107959D7562CD6A
-8232E9D39F7A0254B185F65BD7343DDCE20F59CE03F1B9037C5342E1C0936286
-475C46B46C5409CAA8A8EC31A67F3C6D9C8BCA67B337A18BA8ED0A60D16C65B5
-704317BA9FEF392D723527A8F503E316FDB229A8B5194D4E21093A0500F6DEAE
-1E95D60B170D2AF780998F7E0CF5A67BD4544BF844C9E72E6B9A063FB72BE992
-AEFF776F0C24698912E2418DC4045BAFAE63DF39934C47D2A4BE285147858383
-347A1AFDB016AAE9EC7BFBDA2D5372010AA05E148C9117F004AA9933AE7FBF7E
-87505C7B66E2758BA7A2F222172513F007616A251EF1018C7F14673ECECA221F
-B1FEBD93EEEB5111B5274568ACAF273632CF213601BB6D30FED8CD308CFC9595
-0AA2AC231C6C22BFEA3D849670E3123A36A9E6010ECC55E30B50943E7BA26119
-34B928F82F3F0ABCFDA1C2F227CAC37B5A8A235E43D1A6CA1DFECB64E9E377C4
-3EBB4B063914E7922ECEBB61C6576B972256FB1F1AC200B89062E65F3F536DF7
-0A5303F32CFA2754337CC35CA605B611A1ABE6BA38C484D57E212B0743C3B9EA
-9A5DE67D9CB3BCDC651B850467126D67F7A6BF14AB9791C6F1CC6EDDC01387AF
-AC187F4AD7F471A5AFE9CE5CBA10A96025A33525C5729612D8154A2AF102F121
-8FA0D6E8C5ADDF542BB6BC0A67CA9950354EEED2DB48F474E1F75844A6AE5896
-6AC858AD8EF345A4C9238E5A8D0EABBAE31898C509C19CF089B2D9D3448729CB
-86355F1EE03DA9EEFE344EA3513BCBC0BCD0F952B37F1BB62A22DD022309C70F
-D8808B91F719A91A7599E82D0CCA905992BE715245AA3C52A128C90A2943A133
-4291851B659F2BA7C6247F4568B411ECAB88C7E05921B0880FFE173B461F6224
-1EFC2E80D55C55BE5F365FFD2080C80CC17531859CBE5CBD44C2CEF91254B4F9
-2C0DF8BCA5572DC6F4DEE2EB9B0057613E3E6A222E4E5A4A73AA8F02AB52C166
-B064DD7D9DDC0DE35991E39F1DB57166C683CDA8620ACA57A41C7751939D371A
-E1DE7F445F1AF4CE042D8DD0E38198838479F871CA033685BBD9EF87446F5F37
-A64A83227779E154B7266B205114B4E2949D5FDF36ACF3D2F96891B76FBFDBAC
-B27731EAC1E7C60BB83ADFC3FDDF0D780F04DD332244204F5F9626BF28C706F6
-A8EDDCAE4F1E257B2FF631A8EFA2098C8BBFB0900E3E7D87FB7239EBF920B93E
-120BED51D6A80FBCB1146B904C46C44EC50316AABA372EC8AEE862AF10E0BA86
-37D90D5F83BFBE98FF9973882163C5883CE5715A3F697E3451DE3553EDA55CC0
-67F807D3D100D9BB29746D18CC17A10DBC0CEEADB7E4D4DAE969CB87480D828D
-78B7FC174C85E6D2E49F2E9847B8E7766A8D32B87B1AF0F5E65AA7416F71E1B6
-3BC0F72A512B206A7FD48C68988520B3FB1BEC77074C49DAE329B4F7299D4146
-CE1E4C7D3D440DEFF5EC3ABE389C622247D99D8745CB536E3564E64E90AD39CF
-CA6F1EEB65FCBC219DE0C3A6C8A8780250E409DBFF96955CE7CF11D04E18E812
-F6FF00B189F86D0813A426EC26F1826784BA328E4300EC75C7B67D6AC7F9D169
-C5C02BDE2A6C99B8D694FA30E46A7F1CB72626EC268F5A3DE7AAD320D8F1C85B
-1AB2222798CBE65A0F12A4D8084B06784F3547B2CD45D8366B2D24AF5C5E9C7C
-8DC302DDA8A5A623D1F5FC7F030848AB193E654F782BF396069B479C2C5C8AB3
-ACED15A81290911DA64C1861FB8FF996BC60DFABF6C71E74BD5E67619F27421A
-A23060944D8EDB2A13B81F98AD82C85BBAA27D2CBAFF5906C0EB5566E9E26D12
-BE6467563A6C69F8F9BB1509D769A52D41E5466E37B9EEDA9E3EFAA2E6B2CB73
-63D23E5B39EA9150B7410E45492A8E290CD49A5905B1A52C268172D54D9A2638
-048B3BB16EBA68B3AF660FCDDA5A709677BE4CFCE92298BC476974B9A3717E97
-EA5BB6D87A28819B94ECE9FA702F82142DEC46E344504D529F771F4D9E030392
-DB7348CA8050C6978A79BF0FA1D6223D0D3D4EB6D0B5924FBB524C85600CB414
-DFCC943675D58E2CB563767D46E9B8D5A20D076A33C0BEE3E4950F29C74DEA87
-150FD9C1AE12DD0518F1BC33CAF0EAD1A7A892397B272945ED43EB9FC3766D96
-C21A75B400B2C3C3CB7471DB8F0338E729FF13D991454A5EF1E772637E5E8C76
-24D6B4B44DF009786351E063E3B40C356EA7B04555A261080CC82D0D51ADE26A
-B115F319D3AFD50007C195983FF2CD575B79DF8D5E9B722E2897B217732DF0D6
-785FBBD57C5C0C64AF7AB357E9A6910FE4EFBA82C29CDE2BD031929FFB4A16CD
-DDA6C0112A3FDE98AB50381C5C9792E4C5A6B85446217F47DB34254B245794FF
-D8ED1EE6518ADFA20CC481B51C5FDC95B1E3600B6A0D17394884FB92D621F31D
-9BF7F94B409261B95071852A308080AD6525B70947EAEAE8E4333E94948A1988
-CF8F385E4117FFA14CB1A305B551DA7D8D9CC95838AC9FCA953257F877ACBA6E
-BB4764919FDF84C227A1008FFE31EAAD64D8D41BD2D646C60D7FF13EA9D907BD
-F47F82BFA6181D2D8E4E2925C59BF62D0A73EACFBF2E9A2B1F20B4347860EC97
-9B706F635BC477228DD1C678F2CDD66FBDAB82D2E2A0912C3C2581857B58BD79
-235C26EECF260FD524D8690E823693D9C435E23124BCD02A7F64BD16C7F0AE7B
-09E3658C087B5EC3FEB86BD0B080C46EDB4AFB810E5254F48F15C78EF2BAF44E
-E1C46DCAEF32CEF80E7E195367F2DC906CCF9E0672E9BBF71F6393B36F46BD4F
-0C17015DE74F41872577F840A21F97EDB949A7670B1E3FF0FE14929DF0F98C6F
-3AB46B0948A8415F985797E0C88FF6BDEB4834BEE0EC1391163A2ED1CACA29E2
-ED824B76C8252A3C56529D7C16E5D523E506E73BDF989F78A352280011FAAB8E
-EC5C03FAD32097D982C408834C2F5C0F0DE894E2793D3D932DFF016E23AD43F0
-163947029B30C255467F27584E04C96C5A48C0C2435C2E2DF677BE8980A5F1CC
-5F6E5BA6BF9C919216145F34E50F5601BDD5ACEC4B6FC00010D8C7E6DD029E54
-D8E4CAFB6ECD6E0662D1887261BDBDC8A91FD1652F93FDA8A6D97D945FE1D9CD
-D6DA60FB53236FFE590982E234874320557FA5AF06D1EAB7245993B511F49CF8
-BCB95BE04F280006DCB997F8F672E1020D2A49D988AA723F896A178F8ED80197
-26CFCBE52DAFC2078D65C353769349ABD475A557166C7610FB527343B9282A07
-C8CA4E1CF5A62F2C03DB0A9F47977F8B5DCDA8DDFE864BB67FE9F7C25F7EBA7A
-0BDD51E7DBD987F1D17B14B317E380791AA420B635341CB76FE0722B542F3B66
-62376013EAC1814DDC2511CE2F1556C47F914DEB9F72DE1711F2551B5635D57C
-76B59B919E5211BB14FCC543D5669E179202B41772FA91B5296EEDB6082F1D00
-4E49A8EBFEA6E432EFF3E6EEB745893AD9CE03018CE53F1E3B901100C34E0CC9
-19AFFE5EE327613489250D8A086D69FD55F0AFB30E13E171FBC5CEBE0F6F9B13
-352413361149659D8B7E731D0D9470381F435AA51D5FAFA2722ECA5C77B5AEF0
-E893A01D7BDE78904A5CBD410DB77706AD2D61227C6ADF3EADD81DF33D10580E
-526A16448C6CDF49D305FE4FA0577C8C73CC6AB8EE6697EAACD9906DBB94B0DA
-9283D4CA57B64776694D4F15DB8EA4B7F3D3070E191469442D65935703BF958F
-3EA3BEB6E55F59C0E3FB6A36EC6E4C1B92B0FA8DB032BD5F4E77CABD4E67A2D3
-2C05816B6F96F4DF8850ACB7B381F9EC35533881DA9A32F435FB2306AD97EA35
-5C5E94B0AC8FCEF3F85AD11A986E01282F974996914B09AF1C75C60EDC6D3212
-DF3070CFCB2C896757C64D0B2188199016746F3D02F044B89BEAEB6E0A1BFFC0
-0001DC8487A7A694ABCA8A277AEEAD517922CE9AEB647A3244675CDD6A01CE2C
-976824E2A1F3DB8946DD9A049099427D0C62D0087A7965A70479ADC70B3DB26E
-B6182C200FDEE485CE7BFAED3334708476DA7BBE88AA20896C4F0DB5708F100C
-B4D604B8DA07F585A8BBFFB0F1130CA9F6959B6C0F8AD55FA58C4FC2C32462E3
-B3D90B144489C03BA7CCD6305956F353749A60D13B8F87C99F3E7A9BC600E1AE
-71B67C0FFB65A38FB3443D7E99FB66D4B741C3CA5764EF4702A3FC636BA945CE
-AAE75F02DB5F0CC02D260827FDB53357807004DF1B6BB19ABC8828F82A3805BC
-D639B776C8276598D3F5779BD01D43D2EE9621A70F4A6C56D690
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 58 /colon put
-dup 60 /less put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA4111C05446E55344D331B150E934
-7C69AEECC96FBCB329DFE5C17A31DA357F0E30BD84817752505033A93AAA5539
-EA842580D4B65E9ADC769A091DCD502F8FEE274EE0F067741B545E2E4A78B60E
-3234C2AD3BC22FF09BC3AAB21BF036838358EA99497487922D1F6BF29988712C
-DFE1A9AC4440249623F24BAE7229DB555FCBEF702F1CE7B16FC0D0B44300BA8F
-3DE69C52B1E14C47680AE731FD5BDE84C1E73AC117A2A35DA7A18256ABCD353C
-844696F05A787DB7A169C21665E836148A42994160285FBEF4E43A54B00592AC
-32645BCF1A1E1746EA9AD40EB612922E37DC2655CD6F11613AD0A11ABCDDCF0C
-EEE1CD12B15ABB8B8FCF4E97B827CEEB7A506AF47016CAAC6CB9B266A4EAEEAA
-E072EB1F0CC148CB889918D95C2558FE811B2A70B508BD16FEEF3881C65194C0
-86FB7F6BC522588EE6F1DAFADE11E32F600D0F6303F47D278E6665C18B9B8CAA
-6B84669F65D29752906936E6BEE523F971494009CBF61D028F7E7E0F2657B91F
-5581B1BF0D0013E25FB5002B65C6CE10BF8DF11B77B1A7049BCFA0BB52629C1D
-18612FE2A65C5BA06EE2B63C21E27EC75A018981E8E69563032C000E4FE9379D
-1C6B2FE659AF43CAD8348D7B19680D5210C9502BFA7BBDD7DC2B626F625631E5
-06DFA85943E0E3CB35A1CCF1789CEB83530EBF7EF96A76D1A6350EE5A839EF13
-11E0E015FE22D0E73C4A23BE9C02A1AE87582354F8CA862B20F8CB38904A3FA7
-F9D1515A56F607DA052D2204D9AF7B61FE20395F9D10502D63CBA744CD7C4F92
-03415B015FE6570ED2668270561567516C504201060F7EC3567AF3551E58861D
-F8F5C733AF89DEB6876B0C89A9AD24F5F597E46E0F86A121A1822575B87D02A5
-A50FE72601DE855716B85F23403846F02A392D49773BFB83AD7778F6DE7133F3
-A284AF8198F4A42A8A48E2F8BA19CE3D042EC1FB144AC36FB149AA6DD2B74C20
-1F6CF609118FB4866669347CFFEE62BA788307F7FA69C18576ACDAFE958F982A
-5D5049CB837DF4EFF9AEBE76A9174C2A8A2A560DE76C7A2314B50755EF8CC8EA
-F898CAE7FE1E2D8290FC52A169BEE4D5737BD9DD8B90C460F83F0BC8E997237F
-1BD8BD38C3F8BBAF8CC9286AF11D50198F8DD78D19691A30C82554D138E05B54
-B7C21AF559B2BFDA74285CD7BA53F5292D52D1CE7E01991D706C2F53051DE1C4
-3AE12FBC761C540C8514E3072F991E8D7391C2B3C974AEE87B846413FC167766
-BBFB063F8B8477D7DFF2B4A45D8D6591291D3BC6810BEE7F9B55169985275E7F
-FC78A601867142796E5F54C9A449FA88A7D20F1D50F048090DA10B9B7560C371
-7A8B35AE35549AA6DF63DAE892E33EBD782065864392DD9603898C9F35C66CAC
-7536695D90B380EB93CECD7263E808F8EF16805EED56F8E39D4162308B958ADC
-FDBBAB7B1535AF3296EF357E063B91958B4829659EDBF450164D9C6E81D0F57C
-1353B128B7FB6D3130CD2131A0CBB23F56BFB235A8241FA2BF186AE4FF75EBA2
-1313000C1FFE8B05BBFE336F551CB5C0751925F6895A267EAFEC9DBDF8C1845F
-398295286310171110DC7592CFBB14C04C91C8CD36A8F5C716B096389E3BC613
-9A7DF55E2068B994334284F2D3A25C2D950A5165833A2A4B3708C7247A173A66
-825B364B63F7E05D4FD9B3600B1A4C5DE320C5899725916FEFC7FD500B27534E
-570312E70C5E750140CD986F8EF071031A7CE0CC8BC8B373537B59FFA9336287
-672D408D5B204115F23930AB774D17DF7587A43D05B5FDAE8612E8D9A5997BDC
-F193C1E79B0D46B45863C34B4A35B053749838C0A68E4CED3E7B9A891E1793D4
-B01064784D79B52C02179B6E1B262BED8D8BB2B95D40DE78059577AF9E4EC656
-6944C636DE66EDF2E80E2DEDEA0B676A58A2452699DACAC4DDB57E3D51A47038
-3D2095032E029BD261AD05151FFA426E1B7D223C71BC90E6F612E7F8299473FB
-D64CA4B2B57DDA9932743A38BFCBE48F156012817ABEF0FC99811D7D6731317D
-BEF9EBEBF101A5717FAEC232D0B65D0A25D3121C116D398625396AA23E349ACE
-05E2C8516D6E6CBC08723B82651A8BEFB411D80E464686B52C67C4E3741EDF9B
-2D513676D9CFBCBDF74479255E4EB4B6E8CE29C2DC71DCCD3B0D3B0E0015E7CD
-C48C5E74C9209263CF8F2320A824AFDE6D59C80A4974D00383C449B5E5DD454D
-057F27B835FFB3DCE1C6B56F37E845C8ABFD07BF25D8A2D85D273217FAF7CF14
-8CEC96CEB4B656BB0071935919528D5F767FB1AE9E75070F172E717946E7BE0F
-97F25798B826436FF9B8BDBEE353B4A17F9F53153061B0E72C50E8692B5344BC
-EF9C8DF0FD3B9CAB8F626956AAAAB2AD30E131F149415A501E0385C9D4C04F69
-6D99A392C27508C46AEEF598FC8860BA2C631B4D83E2AFC24AA836D02EC2555F
-E290B4CAF521C7471EF3B03D11275F209D7F5F4FD1D5DB9B571FFAA9A8CE82A8
-E42427BAD0AD2208A978B2381E42E6361A5BE0CEA2830B091DA2DBE7CF9376FC
-D7C3C720D41A27645D52A522288B9A2FDDF3CC01327F7B1A28AB044C9A7861BC
-D220C0C9BD96E2AF939EA987B583E7576F4E948663952E255FF68843254AEEEF
-3FD74DC66FE93118C346DCCA1103C877019BA529FAAE589B8180FC3D65C57F71
-B4398773E9A39AB4CB53734645A9065B6A7B1A1920D7C35893A4724CF6E64D1A
-76AC24F85C3BC8C9416A4E99F6BCABE6DEA25538294AEC6511A7BCFD9D603C8C
-4E09528D4694E4834D517B73523372FAC3E88A3FDB06EC845097349A1FC0A1AF
-91390334107F136F49399A1C60551465697BB1C7D79B463F0860E31094017C9D
-A0445042EDD00D2FB6F3C3A74E69A13DB0D44FFE347D1445172D12B631BF9ACB
-40CF08BD36495CA33B3F4754F89CE7B73E0ABD8D6A795CCE4E5354F757C47EB9
-D23FFD066E4809C7A8CE6BF69ACFE00FA8D27950CA364ED7A911897BFCE189AE
-178046A997A03886891B74270E7AA859F4B2373AF3F022BC74CF245F110C9C33
-0BB3A61058980BBA585D084BFA2082D1CF834E45CBC29A58AE207642618A4996
-1FCA5A9003C221725DA54C78A86C7E5D69BC67BFEF1392955CE1BEAB77E22E9B
-06830E96B9E64E37C9067E4A0CC6470D7255F6E27E0C0BFC43418471CD5B1A56
-6BA3949C38801364435BA97962C96F7B5CDD55DA93F4508108DA4CB47C114C59
-15ED208BE39680D3FB36A7D65B07034960CB2D41A6EB60D4BF9A1036ABA6C1B8
-26CC6289C13006C79EDE3D3564B1066AA42E82A6BAE388EE434B8B0A73A13B95
-744141BDD447DDC75D579B23F3A7F125276FBC7B62AF4F0EA78434C57879A290
-C242708059E20655A9BBDD14CFBA6D877C4137528481018FE5E6E0FBB88B16FE
-BBAC9B275A820B4BA9E6C80030E81B38191CB2148DD54C0AC58FB8129826C774
-6DA7F4C7933FE6B7D2B76A16FA78CD84D06025EE4F780BE96CFE45D03D50C690
-0D910F44BCFE1024DC6659B4516906B88F9AB122B2DEA051B278FC1C767A2980
-FD1AB1C880BBFC130E72D2C0F6AF2507AA461431189BE02BAADD00DA798A27A4
-666FB6644B5223F79131A32FC3B498AC318534CABC5668B45D3F9C98CD8CED21
-088E3A49CA187367CD4F412107241C8B6B4D35B14C467674EFE503DFC36F5F68
-81A5CB639AC8A94B2D56D8830F76B7CF25C807D49DBB0C6BA1D481A2E7186BFE
-DF09E3EDA4F34A9204CC45540DA42A742677823CD9DF3C1D27815555A16D7656
-AD5F105416BC89259C845F9DED7DA52432CB567625117966990EF6E93BCFD665
-67E2C849168F7F575E3CBD50AF8B285A9F2A93522C2CF722F1059EF342692316
-D9D13F7B97B9DDA3AF905A0B132E61597DDD1060A2CA59AB3ABA173297C9DBFB
-3D5D3CCC4650C17803E43252BEF5367DD1CC7D516963CF9194BC11F49E6FBA29
-77F085663F759C1E72AF64A6E4EE64F9B9FE6110FF4829C5716F9F262ADDB94E
-1A9BDF1FA7F38322F91EC6463520F06447BE511437A3A2219EE93730171ADD39
-2C8DB3C7CCC94F2B51F35DD286D841BA7A209F57A5CFEC24060D29947A4C9D29
-AD0C63084E50E25D1B8F059AF38584921A5FB347344AB2D00B9407C3B1B9709C
-1A25B5E438226B4D936E6E37A9412B685DE59CCC4F01EDBD6611E0F00B93C02D
-2CE454F10C9A79C00915C01B7E5AE107E09A87C109A40216D28090F45D46E2B2
-DFF1F9853A6EC69BF869C1CE7A768275B2E65FE1CF544F29BFA225E13C09AA66
-5C0C8354FA4E412813A0EC4C090A1E893A719892D056AC7CE18B4C5D2A41AC95
-2B3761C1AA386CE82B2C9EEADA7AED7D8652339C609BFCD5B99BDBB4604A654A
-16EE2748E1761BED1EC797680A6B78E66DB125658A5E5B2FDEC77222C00DA8C5
-F0C2713A83C501700CAAFB8EF4F98E938EE362594E01899DAB57E1D18BCCAA81
-1FE1579C7901B572697BA66E69CE66370F792749C83DDA2BD64BCAD9E75E1F56
-0C95D8FBCCAEF65D399F7D506322C7DB0B65970899A3ED328F49854E79F95128
-F23F504C2E78CE57A92A68AF914F05D5EC62CCFF30BB12E1C374BCFC4389A01B
-A422BE005044DE2B6FF240ACD7ADAB77A3498242F38FDE6A2ECBB6A2DA7617FC
-B49845023535D950D5C0CB8736F60670807901B49503A32F1AACA0967B15D79C
-91BB976A02CCE231502D208064C7886E2A509E9D70D846CF58C2FB713CAFD481
-427CEF09B8C9AFB94EDBB6022FE5E44AB80AD4C1EF9A7048F9365772C399550E
-36DA173AEE7C909EE8CF5604C98698C83AB1F11625767BC5B3F7EA5778C0A3F8
-418C626A99D54BEBA11222D00FE55EDFC1C2C773E9C9B1814C5C8CD9AEC8F04B
-5A70688CD44F874AB58DA58B636A11325443A715F2F6FF753899B3918068297A
-A2CF3A0BE05F9DFBB01EEAA74B897FEC5FA84FFFB3F469CB5AC249C6D35ACEBF
-7909324C06B1A64102ED10C97B7848B8DBC8E94D73B8E32F4CB9DE08C2CCA1BE
-3557BD72646FCAB9D7258FD2A7132B7E57A0BEE933269ABC5C57A06F26505970
-1FE4143C401EE77DE40D7699585C50A1598345D3C57DD694E78E315E1C15A02F
-5C420EF7EF99F56A1E65599F4D726743A27CD39E95588FBEC9A045201D883901
-3C7148CCD55D606C0B1B8F3DCFA34EF42FDEAC864B056CFE88FFAA4524F4BAF4
-55EDC34E6CC61E597BED2AC4B3EB1CB5190E5E65576BD1E81BD382800BFD64F6
-40F281625BF30B54D037A88B371778CD9414360DDF2FF1A6A8A6319FBCD3E6D6
-5BAC1D75DB45E55AB5B825C87DE541411E53CC0F0D71AB77ED55F30349CA2995
-8D93D0014D07C6DB2F4E02C8FC43E310F05B161D9ABDA613E533B7191CED8966
-C6C0541CD7CC4267485E4C6F0C7BBCD9E9B6C67CAC2B2822D30FF72EB2F93F5E
-F9D6794D500810890A9A3B733115FB90B5890AA23BCF5143A9701AE69D9E21E0
-0189FA3CB787F0CB6DDF91EF7BAA860D72D43883029DF872FA64081690B36B6D
-FF6B9D89FC6583724A6CB30703A10C78C568A22E4085BDB95DB623B59DD3F054
-FE3795CC5108CC39FD5576909A98EF5BCC4270EDCB1710A7B071A9715BA73AB2
-84FA8E7A42ADCA65F83EBB6712AB054F57BAFD3E674168381A368A90A6002719
-E05F4940608895E579220FFD8C41F012DBCB0202339C91E8D3368BA1D3A0BB59
-CB677830B076D90506CA8E367C5B36DE14008FB7B82611A60BEC8897A07636D4
-1C584230B7DADB8CEBC8054378DA767E09071B3984989859631C581BF34C5981
-A275D646E1ACBFC7B03921FBDCA5C8CEC6D9C58087729C073F6FC35CECB1F22F
-B950E66DF265DFCF51002B55BB24AF90222414B7A9B980D99C5477262C3E62ED
-20200AE6F5057D9B225C7DBAACF1059B41149D23A0684DCF95A1C0ADCC18EE2C
-FB1D21885FAB35BAD7F38A5076983A621DDE6D635D1DE3F2275888F956F91255
-246B5D9F64BC59E13D344A4F5A8E7C68668D8F4342F9B84B508F947919F27B18
-E8E7588D8DFA770CD9470F7D48F159F0DF22E436E8D75D77DC2B3AE3A4B84DCE
-94211453C8960874199C9F659752B5E237A83EA8F1DB23215121F08A748793B5
-32139009561942A2BAE2F6C1FDAEF4A1EE5F97955E764DBA8F876BE9042DB26E
-4F73A5EE08F2A239A1AADFB57EE4001004F9558793157F8FDC48753DA98DF5DA
-C19289A1CEF767A3A4B408D78772196C9EC0A89BC3C18634F17B1542FE09A676
-437AA03F0DBF82157F5B90C061A42FA30C80934133FE910A0F07E69B5B9B41E9
-485A90CB9AB556F3370C3E49E7316C0362C2F899ABF2A6F014821BF44E71933A
-E87CFFDB8DABE4241F2C1612C92A3297FCAFC48736247396F7BDAFD3C1FC0F84
-D19A1D7997C11EB84AF8657C2559DBA1122AEBC11A09A7674D559D95B1BB60E8
-009C2A88BD14AD8C8D7298DDCEA0232C209D8A94EF09814473E2A22244B00B2F
-54FF92A5A10586F07B2D23780788A2002125F1C9AC0447B37A04F577E014DCE5
-571186FE4E85BE1577908DDF1B919A9822DAD6C4B6BB992E5EBAD7622AAAA83E
-139865AABF36B59C8113475AF7244D7C407C4C07B2F68A0EC302F9CACB81A52F
-B58E97CA09354199BFA57E578158AE2D82243DFE892DED36C342451F26CE0D14
-F0BD9E2CD409F2C1AFC17CDBFDBE5F7D7859ADFEBB34F780DBA9BF044C599C2C
-9205BB5394C5FB112A7C11718CC3C01B58CE89C47651B0E81F86F28E0EC6F978
-A1208470FEF4A28B363707643CBE3397D820C1788E4AD2E8D87D9D96256A8A88
-90F216BD38141C30CDAD068D3CBD0760820C4E8659A4181312B9394C167ADDF5
-6CB2329A8E9C82CE31BF0DE2EE0FF3CA962F69D7D9DC9DF8FB7D03E31C31A691
-BE2610E62024CC4D48AF00C26AFC207D544CBDD683A26B80C218CD95F5319B21
-585169565E77F03C53AA72AF82989AAE717C6E1D002F53BC840081010808F153
-3DB5228E3843AD8A679083DFCA57C36C26148BD75650AB6E1E8209FC4B23EE9F
-9E5FD7E3E3F0E2783655505AD104D826EB14B167A5821169D1E7F01189AF7F46
-9C83293F7E3CCABFAF53CC92BD0B208A188723DA1FF1DC93C1951ECBE2C156B8
-B7FDB2C3798F9BC187D31D6B40DCF00F4285A99C49595903B4EC3B2EB93D6C1A
-F48EBA8A2A64F6E2B0FDE7C17179139F34B9CB470DA03858290E263186A6AA16
-2807F752E7EED5F86EE185F79AC853027741BF4D44D9D33E9FC1E4427C1ACBCE
-7B1A4157E9DA2B5FC47CE1BF6BA7F9428E794E7FC40D43DE1C125AEFDD02F3CB
-E44D3E8F313956C6506178B6C14BA9383A85F5787C825846DD357CDCDB9D94F3
-56DB49ECD193E786D7BBDAA2C60AB42AB5DA1896CEA3F52A731D101448740973
-093D25833E47B29E2C799EA9A08FEE41E500F388F21E3C811CC131F26D1CEE00
-A227CF587D3738998A38A124044060AEFA8E3614E4E7F6F24447FFAD7FB8CEA5
-2EDD6077E6111160B6CE25D19ED7526D99905FD9F05F064D42C8371CF8BA68DF
-A9A46A28F4248F9AA6D53D4D3254B0331B25B204BCEA6939140714F579BCEB24
-698EA8180F4E00AFCF94635CBCDB7162FA2709407433C90FF40D0060631335E9
-2701686AA4F4D1F5013292F19BDD8AB0294D06313B4F9E2A6C918FB0E103CE86
-54D7F9DC947585A9B583EA9BE584EE3FA3A73EEC33D6ECA506DB5C99DBD674F1
-D47823B4D74890E2E8F8EC3C165F1F1E073B53615E921B27D8C4BB1110F9B1FD
-7B4DD567145FAD917D30C1D038346797CA30F3EB78AE4497160B97E3037B4D88
-42B04CFF66FB9F7A2281373A8602680BC9AF99123DDBC99F9FA992237F3ED149
-8C4D9A3C65FA7460B75AE377F9A436BFC0920676166C9557EE79A54119903A09
-A4DB876108DF9BB6CC7D4E3887AC3B5612A29C969DA406C0457A12E95C84347E
-97683DFA2AD5067666CB8570FF5C4B88A8F4D28909DF8CEE4B9E79D7960841AF
-6C7DC2DF5451D16DC9F70342DB8F86141B651609B8B940AE3352C2AC86C3D286
-EEE19B769C65468C9637FC97FADE2930C133CB1B3F7199B85D0AC511159EB600
-FA8D6348518E89EA29E3C2895F228227B97C724FEA4B375D1779E43C33476563
-B47331A5EED1452346CDD370BC017C1D99711507FD680A0F1A900F0AF53F890F
-5840C9F0F5A4223E8ECA8010860FD7E2DCD79FB8A93B46A46B159226832518E8
-9960564C29D80E2BC43BFCAD9DC2B4C26D28895C52373A88CFF9E63D86C302A8
-EB2635801D3577379F8A71C02191DFD7CEAD51EB04DB88423F3A4FE578DB4FAA
-9E2F204E048079230C72A32A213D6CED2866D719CCFB5720B8780D0F86A0849F
-149801BEFF7E339C9ED48C8EA5F400D8B68E6A999573B55F8B0CFD9AD90C2595
-95398E70EA35B16A9EFFB47DD5D65336EEAE4F02C44F94E5D181A32CC91FE097
-00F041A6B99C2344195CC534B56A779DB210F6A610534914F786654EB1A0C648
-C2999803BC6AADD2D5F5870DEBF8143FD6D5AA4EB3959F721DAF92A0F7375491
-139971C436BC0C6B199B7FDEE435F4CC0D692DA5117294F3D7819AE37D960DBB
-44FDD45E62F77D26E4E84A5A362C8E2BDC1BE3F727EF656CEDC84A0931F657F1
-C882183865C0848245483F643A6AEBF582DD36B38981D70DEDB30579092A6827
-F93FB7C1E41F1B10E3D2D2EC83A0D3065739EE32A21B2FF21515CA07572BA7D1
-ADB370A5B843BB7910164570BD3872691A24E61A6EE37B60C0610F6152F75B7D
-AEAF222F51598D434CD750EE01CC53AF4971400396C512FA22149F4DDE462694
-C92BDCB9D8B43C492B7498A9998BF79808E160C9AF96388AFB09D2A885E16DD4
-67B126478E919F057068AC12BD62BD078D5363EEF47275764C070815A88FD612
-3AFDEAFDB92DC59986FEAE51BFA02D5199954E2F5A4A4C473AFD3B1CE087F841
-2048E6B3098730DAEF6ECFACB48D5C8BFC527FCCE625FE26D23050435FFCD7AD
-B2D6736AE8D4F0427F233D03995366B0EC35E8CD93EF362A1EAF6595D11924D3
-7553BCEA2C201BDA7C63A6641E678333F2BF5946D2E3C5D7DB67C8C1AD35AD13
-DD82B5665448EBAB62B658C0B9498F112AA9021B5B5C46EC6BA786A35EE28E57
-3A1244B4BEF61A9891220451927F93C59C9722B6329ABA09AADC5F8D3223C195
-0A8A3D32A264B5EDFBC7F8DDE6BA77D7614106EDEC927BB3ECB27F701689BA00
-CA2A496582D4836761ABD3489D5A8C52C3293E44D8E3B054A5CD3DC60A1A4A05
-B0CDD5AE0C96F2CE6A53FC29CD5843B8234BB1E566E9325A3EF027B448CD2208
-158A7BCCD1C15F458939598A095D11CCABBE8965041057BD2575D4B2CAD34713
-AD93B5B13A9D6120215169FAB1B624C96E4DBAB6C303750F013BBDDF19167D0A
-D55FA54D5113D8A33AD715183D57110549B468802E31AF87DE0924F0E7A9FD34
-A0C9A483E6425A395DDC73E4A62D879089F1BCD98C355A7BF41431FC59E63A2F
-6765FB1389C324D94BB2E4C17C4BB5D1B0D8FF6F89418E1D14477ED6FF6713E0
-0B6F4ACFC98BC1E90CF142BCE38DD795BD5C7FEC12AA9C917742F2DE86044C98
-D136A047867121CEB7F9D1C577A7AE3542ACE2BB1CB10F807F43E33A7954C530
-31F7159142A306ECEF92B32977C82E2CB53F992CC97235D13A8AAECC81F2141B
-B31A36A6AA2E8E812F2240AFB677FE7798F4426066235904075932E9590771A8
-80150A1499A3DF5DB221F51251D7065D2FEA86D2E91AC4E25B98DEEA6D0705ED
-899F9B02B1A7F446CABB8A85689884826E2D2F29F1EFA8B77BCD730F3AB9DE77
-7D11AE64829A806F2778F34C6B2B5F4D4AFCB91BD2A567EBEFB76F44EF375760
-41F40D97E1781060E217D5E8CC603F4ABDD1251F94E757E3EFDF4B1974064D84
-0C1E36208F21D8A3630DE38891B5412CF7600D6C259562EA093DCA91742B7C26
-86AC2518ED7EC1DFFE0D8AA23E4811729B429276221C07AEBFEC6FFC0038F5B3
-D9CC91DDFC8EA428051C1060152EF7DCCB447253EA5939C4C714465FCE346B90
-119CA5EE5E1379A29AE4EB841920D6132E79B68D2622FA97968CE1C75F9DD6FC
-5FE4AE683AB726AB7077B73BCC22C48D74FDEB8568D96DDF4D88D074E7022D70
-4956F8BD9C0C08269A83F14CECF3A23E767287B5C6222D8BFB81CE7A0B5D4BC2
-B599E50663EF4D3EAA57D5CE7686EA3762671666D21C5D757FCE7BC7BDEE9730
-6D0F5A2928C209D6C9D773D7BE028C7503F424CBFF5789D35385661610348599
-2A6230DDEB930BEF60354240E90276EEC62B0371259CFFE41F716B0E32E07C99
-A19EA60A2240E6D97811310B3754C244CA9D62A6D73199DBC62B1B8C0BE3CC46
-9BF04B634BC7708DAB1604AB76CD5B1208C0098E8798EEA9408A0AC0B8353708
-979982E3AA0FE684E4715F3EA23E12D6FE6FFB247B5424DB8A8A0CDE537AC02F
-7234656B7CC0782EE73A39CEE18EA182452A1638316700209CC50603469FFD7F
-D9CD14E65B20487A223D92AFF6E654022A1A564AD8BD46F14641F513DF0E59F4
-E2C536643DD07C52F9B5A5DEB70AB534C2F6CED7923BD84FFDE452C2ABFC2CD3
-D6E83759236FAB568657E4CB12A8CF0895890602E0D8E3B121303EFE53237E9F
-BEA4794106D34796AA5FC0BE8F0DAA96DCF0C39FCBF14798E5D55354B70C1DB4
-4202124802783D8BB23520A5CE7BE15F280F2C154FCD804AC6D6B38A9ED970E2
-2CD08CD69B0CC08600F8B6B1D7C817203FD6C2300373E2AC7CF01007233C0439
-56B7B9F4A2BD8A98DFB3F47D163DD45E72272175A2E08E9C178506161412B571
-0C4DCCBF1E21A2689421D463C6B6D3F0D3B4BF1A654401F6C1C72ECC0EE8F1B1
-F5F0C6C40433325F7A90E3B81246A441104C87157B0061632E092691B35EF094
-9C2017BF759D4490B3FC7E3E3BD0CC13C7586371FEF30304DF36A4EA3394AE13
-71389DA6570DE106DDE7935391D9836BA86D505C500D92C9153E0D698183103E
-66CA0F6D0283FFBA2F298712CB76EA731233C43C36E1DAE77188E531EAA86CB3
-E077B699B5302F868E68727BE7BDB365D421A1F3BE6D92B6EFF545B101D078D3
-1196EBA6C7328BC506AE4F940D6D890C9489CD29EDC7011E419C1EEB9E30A6E0
-4D02D937A4AD1B58174812B0B89C708F4B5F5C271D7BFF91C2B4304BD6423C9C
-A83DFA467686F4D47806FA6BE6DDB83D6AAACD5662E9A8D8C2B84C424D6BC31D
-4DDF20FB82D1C73AA545A443A0C9E12FD02AD8F77DFAD588DC7450DB957F1957
-3C48D5366BD3D3155DD54E4700C91FBA5EF151F8A5A894CD4A3D7EA01A262A0B
-65E4BE0A94AC4CD77BB129894F41BA883BDD419D09F50165131F367E2F1617C5
-A8FB597BE32F4D40C29F20FC7CFA079FC2B397E4EBA2A11EECB68E2368C3ED34
-A83B2F2E9B1624C69E13FC95CE2FBBE4F5C8A15A56FE6C4712720859F6FB78D8
-4770EBA0BB60C5F2BB2FAA1D27628520936110310B9183B49DDC348CC2663A35
-36BF2D7B5C4059CB194DC22160853C518464897EE0BC0EEEB0E48607E4B9BE0E
-21069E8ABBD8FAF6D93CAAAEC5394C54C4D036C37DAC2DACEDDF4C3936442DB3
-8F973DA46D081E72D5005917CFA0A7EB8DD4A05E7F8BCC62D25128A567E4F1FA
-A34363E40E59473414B2E2EC04C63B64BD6C377632EA4F0CB86CB08B44CE470B
-DD25A84A53AA3B57B065C68F530986CFDE63D646F2E7891C4428084891ED5A58
-04CEB1EA64046B8CB37294289D29605D281BA9B5387AB9D3F22997B2C05FE51C
-C58AC33D51B67C83556E7E65236536F0D006F44DE91B9558329F9419D5B56DCA
-B691C23C7144AB02BC64FBF3CDF27F6943F5880119E280245FA5EECAB0659007
-BFA20B93FDEE34E0D5BA810936D1E0AD0E56B1F8FF8AE499DF386647BE818625
-76495DE018B332067C229E38A0F34C5E5132E087103864D2A1A6E07D768F095B
-B8692D1E13D9540A604908D88C10FADE923A322502A408742307A502002ABAD6
-422A21C765A83D3DAF8EC7119C75ED6F7A03739736C12E0FEA33E8D5381BED76
-7A80909772D5618B4BA110851346845A3B1E0DC53578AE117B7FA95602940A76
-9DE7EE20F4130907AF0803E77A9918C36944106259A93BB8EC7AE33B05054FB4
-F6F6ABC9F155DCCB31BEBC79F126E96895A219683C79EB9619588E1C28C0E7A0
-36F62CB4B70F3C16CA2919E4D195764DBBD17A09608FE172E34C60C00085C7DE
-80350596B9C73C542B3565FCF4D18C42C288873368D7859DD0109AE293BB6F28
-29C8840D18CC6CE36B6AE6EBB40306A94D328906D01B9745986F5832380279BE
-1E3F3804F27EE223CB04674A986CC6482A389F2054DFC199C2192F6C255379DA
-629637CABE590FE2577E8999528DD023D7C4B19E74A648FFF4009F0FFC6D23C9
-1B7F91E06EE88B9E1F4C1E351EDC1DCA8276988C36DEEBCB6B53B04B4DE4490C
-A415AE029E3FA6C12ABA79213749237A08BF189681A4C3BE598F24D0E305E15E
-17EA760A16F63D9CFFEEAEE6B0C4D6902260C8722879D37C098FAF59375E76C5
-5ED4DB8C734572DAC57818C371420F827E2309DAE5570775D290CCB132AC4732
-35BF791E165955B6A1B521E0357184D19EEBD865B560924FDA057E6827C51BF6
-684C10FF7F8BA7B3B31327831FED39261304A85F1B9692E68145ACA087261A79
-6B3C1E416ED699419F47A2E546A73B446596CF82896A36ED564471B678E9067E
-42260D84F733CF208BD3837CBA0F681DC8D53CD82F0E43EC138487F48ADD087D
-FD8C30C2481B32E528F6FC040CD8CC657EB061FA6EF636B9D45DC10D86B2DC1A
-E6CAF3906111D3BAF042F04BD4532338D20FFAE112E698265746FD1C3FB3C010
-D62B8A87D8EE355A45160BC016F1E83F7315CDC3984D5A177401DA593930CA14
-9AC348DD8F76EFC8FCF064B022F056EA211FD843646F66F5D1A64F0A1EE139CC
-A76C52D85DAAD299F896BAA8C62685FF663DE4275585572674A33855556F1893
-AA69FEF9CC3687A712D6A451A696621F62F0007CF8B1B1A97C62D956B615CE11
-5A448CDE9231C0179173A45F7DF45AEC7D1FA2CCB7E18D6D917685A0D3DE2533
-1141C934321C05468EDD9E97E1288374664562EF1E276398702FB952F78B3501
-A11AB13F9AC2B062656C54B13DE4A3D7295047F755E61758A29C2530AC47B50C
-1C254F861E2B97C0CC9855A0ED37E30067129ECBB0366876E606E5D45EEDEFAE
-CE82B3D278E815EEB073C7911A1765BA68CD94F0B2B8D4E3B55F8DF4A54D6A4A
-60F304D52814787BE46FBAD271008F64800E6367D7AB58A340BB8F26B2F82057
-2FEA21B51A2681E52E360EF114D92C7B01AB09B0D8F9C683C4ADCBD2065B552A
-1C1D83C729C6F755A95DF2B00CB8ADDDC7510711110A58CD6754EB054CC31276
-726FA4BFD09DA5BB2B0178694EA228DD6287CCCDE397E4D7D054B13612D77029
-F2C639063E8994B94EBE05365FD14CE92BC73EB2DE4B98FF76025CE98D95BC4D
-0F8510268D0A18A33F8F25A6BB64BD0546D4ADC4A958B4C8721E600EFCA64AE6
-11E533D6185CD5495B307F7E1E4722FF1B47CEE45296D8AC1DD50EF1AB3B084D
-69E38802F9BC6F02E31F372FD0CE7962E389A8B1757981D5B51BF31AC5B4C8AB
-9E551BB02B237EBF5E2B98C1B4764E9B3F7C29C8ACCA4EF5E07D6E003FB7AE94
-FF30E6A9A9EBC1D4FAD6856CBE2A1DF41C94381E2DB11926D1B3E55D5120D562
-04676E4E66CB49A1BB48D8D7E35A629543B0FEA22728C86E534C9D80CF452F9D
-74866CCD91A3BB3A4ECD52F8BAB4329A831C49BF6599B81FE0CA40D5B74D21EE
-228440257E8EC54139D029B41240B13E2421B182792ACC008A94EDF98087CEEE
-B1BC98EACAD09B2ABBBB8C3384D465FC179163B844781B4E41F12790D7B80193
-BCE3D0D8246BC85007AFD019A53D867FA45F4EE4283F8410AEF256DDDD63B610
-C751AD27262DF3874674D3F9D51BF773A3DA12D4F054FCBC63630FEF6D331041
-FD9B4C5DBA53E04E24E3AF685DF5D0B9D897C3ED15B762827EAE874E1932B272
-BC74FB943CDF8C6E75CB7D176DABE400353765C5C27348A494F5EAE1202A8028
-D1A1CF687EE751A750E79E621EEDAA95EA7F29734EF4BCD38368F35756C52019
-D9607383F7321A4002E036DEA99B831D2636DFD54582226287AF9C57079DDA5E
-7A2531204F2B0B197AD6DFCCDA00031D0D37AFF885AE25389E5A46CFF21C5C39
-427EC8133DA9F62BA6E4589A5244CE1206A97DFE9028064594D18FEACCEFE980
-0ECCFAA35EABBA4FDCDC7B916075751EC191E86DF3C1D60CB3BAE55A4FD1AD2F
-5DF990A675FC6C3B94E383BDC89F15DC4AC08F29F08B6C393782EA3C00FFE26E
-87D714B14A7657AEC201466F3A71309C200C284AD5B55BA408E3E100C0DD4610
-C666BB3A7F66CA971A7D97CA22E41D9A0AA95FB979F6DC1E31483BE4D9E04C51
-F79B7A40C51BFF01A6B7A8177A5F47B1EE8131022A980118364F9804E3AC7770
-5B0ECF2431C0868B9D098616653F53CB5EFD521BB030764FDB8EC732487AD8DD
-BB8E635F523FB8F4F782C7E2C1E75226CA751DA16EA0E100AA3196FF791004DB
-4B34C33A20C42C5B50986F630686B75FE81ED73BC21A74699A36EC9DCBFC9FAA
-99978A114C3B537DB55F561713B08F35C24B9E11E04C6A743436364E300F925F
-62744BD29068B45400A9333BC3CE7516E8E68F211B82859F8CBCEEAAFF47BAD2
-174FDE1B6F83688C079537B17D12328DB78C4544872D989F0D45706187E6A674
-C32780E630CE22AAAEE3193483BF40C32FDE30FE3BC8565D346EEE2F8E7C245F
-E6A38401D342F2F5B50B6882CD2860F872A4E61756E5F5186ECC4E82EEE5ADEE
-3284C79F169F0672D838E6B0D22652ECBC3CC8C0E90F23C541CC308FF41B9887
-CD8B011CF06CCD2B83D3EC157FE4F8A7E8209732553AF32E1ACF3F94A728B0FF
-19BA5F97C8B8F243218696B09B549AFEF1BD0BAE95C71077E7B1E52492425784
-897E8338956892F032288DC84A36A5ECAD064CE46D9EB41CAD952294A13EC321
-2740396DE8A8320DD4320E30376A4C42F0778D0E89E791F0789BA42E1FC1FC0C
-5E0C5648D49748DCD5B6B497288D3C5E2790DBC49AE10F37C28B31A6CD692755
-2FFD39FBE58C593D08A7FDEDA54361458F140A4F1583BC198A363D71B445B6C2
-258D1E268D7FEEBF958FBF45907743C3240DBD9784341F230E6378E1E970D910
-AD26A04AD6C3650D85B5B3B7646D9DE5341379E6A1A896AD06855ABBAB747D3E
-B06CB84D04C7CA14E08E73706BD84336D87690866E01BDC5B0CEE249587D35A6
-32C79ECC0C5A53AFF5E3772FC858046E4F317796D1C86E151D56B772994C06EC
-70E75B1B61CAF7E33CDF0EB03992A396312DAB6E98CF6D7F38407DF551F08CFF
-DF72B153769175A4AE41464F4509A51416C9A2B827BF9A94DD91A53A4E62BD6D
-A7D571287F62BB7367031EB0C52A0E8A055FD80F7691A68632DA74675ACE13DC
-364E7111839FA56C369AA0660BD8D752A4CF61417D696BB49A75AA711868B09B
-0B95FA1483DF0FFBF555317D73CCFC20AED4B500D6A81AB5ED3077ECDA919D0C
-76D162553DFC4BDD581BF9B532A0F125AAD93DCD50556736595506E9CBE4E6FE
-258A88E104E32741729CFFE023DDFA2A5C748A59A61A0BD8638E1DC27A5D9CB7
-ABC1B2EB224D27FC993AF836B16D14A1CE8B1FA21012B4A45CB317BACE32C4EC
-81A02EF8EBC73F9746C01D3C72102643519E260B520CA2BA6B7F5F624FB7C8F8
-6E6E707EC588DDCEFB9E02A9BCFE0A6067F4E8C09B7D624754B77D3E96D01AD0
-EB250F589F9C9914B13F6C760D73EE1C3F1F6142A0DC51BB87EEC379AAA8E4AA
-4A7783687E158711B6585701FFACF7B37F81B9168CDA3886C4EB28133975A37A
-13037248513AE2A2A65CC3A9B63433B14A347F8003550798244D519372C9FC64
-79AFBB7F12840CCD070F2BF8CBC97359232A35C810CAAD591E64A0AE9A10F0A6
-698274D8D88341E2E99BCDA7C6F6C666EB45721BCC521B6551DE2AA8B6ED9AB4
-A9122F741E0CBB5B3D74A0E85C6212FB33F540FADF0A20A1C1CC09BB48C312F1
-CBC4F8F4F5CAB7EBA0E29E8C020752B1A968362EC0F793B4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 25 /germandbls put
-dup 45 /hyphen put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 122 /z put
-dup 127 /dieresis put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B781EB59569E3D0D54D8EFAE0F3EDE26279776ABA15341E42E636
-6E02817082BE6FE0B04249A4840C11FEBE57A56C51B700E78BA2A1B991C56F1F
-E01E4F16DBAA63E6932FFA0649F0AF084522EF1CBC1FDAD30F8363494CDB6694
-AEE7D63B32A6A32C93477AE6756D17E74ED1642B917B64E296D4E219A3597953
-634A1C0BCA5AA04FEDEFDF24B58001909B7B03761FF2070958FD2F387D01E4F5
-6E5EC1E636E9AF44D989BCAEC860035FE4CA3A87DADFAB3665957769CCA3FD91
-1D0CC806CF0731B05959EBD9842DB651BAC539FDB597E50C7BC06D801AA613EF
-09BCB258EAEB5620FCF9193D5D17E7340B4E1A110BF7ED2BBBB9AD9B8AB90943
-0F2EF3620A245C8A5B229AD308A71FA00E007F6BFBFCF7A94227C5D0E0E138FE
-F0F6C457EBDDCEC1B3C150D74BD06474F325A9649451446C630B74C6F3EC56F2
-5D109B37591E10D571E5719ADE30AD10FF770C9A0815E0ED9BDCF6B44A2516E0
-C64FE6EA55D438BFE2C64BEF293FF41E9D360216BCEE5096CE711EFEBE6749F3
-50978C54353D12290F4FD04AFE38B265077033231B98CEDEB7B3F089DFDAE834
-41B30ADCA9387FCAB269D73E2086C833AAA882B3CEDF5BE86221EB4DCD12699E
-C3B278291A8BBFD2093B23A90739A65A37C93E7743E91E27D89B802C1F0512BA
-E14FA607570A5A7C58BBA139FAB5466F40F03FB05AE0C53DB380ABB8632CD812
-B924536838F86C4E4ED08A57FBE706D61C1823B5908ADCA9E3B99670DAA5B00A
-8B99E733AA64B471A9A96FEF5567D54B9683F9EADD51A9A17ACECCCC78A46368
-7874DE4CF78E3D2ACCC1CCD679D99308476651C4EB48B5EF65F0C5E91E3FA5F4
-A9978986F0BE871DCD5A320C290C259836058CBD5F9412659725A2C55CAF5A49
-D7D326FE9F019E6E2FD10DF7175F16AECE03ACE4011A68999F4E1B6940463E2D
-044358A97AFA46172BDDAC3B078D5CF581BC728A2690E69DF3E1715553DB50DD
-5DEA6FE5B916615438CF7EEFCCCAEB5C20BA775ED8657CEC81CE2E558C7C5AA6
-09986F26E40A65FA07798E26AF18AD15B183898DE5BA43091343CF9D17C5DB42
-C069FBD81FAAE592D43E8DE71D70B9940297C6D95E823FFE205F1C6C6DE2A23B
-8069CE7950969557336AC8DB3B61E01D64D56E8C4D608D9B0BE16BAEFBC11E14
-F74B24D3C54EC6F03F8FB0A931F3067F629081199D09DB775B8074F6F1A76FAC
-74A1A8B4E89B7459C16FAE469236003F7B2209AFB487D001EA9F20C212630C2D
-9D32E8FDFCE3285B66EED4D910273B6560434BFE0CB48260E58FCAE26B3939ED
-C7C66E6C13CF17915C98D34D8CE28E30357C49299C456437F6EDE39210DF6FDF
-4A450CEBA70E4185B00D3573F57CE1711A3DFCF2C9E2E43707530FF446F58B37
-C73CF2857A7ABB379908551EE169A3340148E0389B43CBB5E20A1B25BF519C2C
-51FB78A35796B751E99D688D5665E0D5548FD08A531C939214696CF70081D1E9
-6DD3B65181EEC5D0CD79A3B8306D923FD97EBDC7D5629456474668461135F103
-A5FA1229254393BBFF029763C36E98C72CB4F33B02F1D0F3FE15F82943364FD6
-4CD3AA79A4BB405F6E254E600DBED2DCE27F4D442C2269E8004BBE461C72FFD1
-A472BB5CDA4D95BF757251F67A31FDC2805447ED6551D3F1CADA6FDB093C2D47
-5DFB293CA1D5B3204C68B5463614CD25AAE8C93ED170176E5352514A66227CEA
-9AAF8CF4EADD2782AE0AB641A985483151175A4DFC621DA6EB02490F50F4E0EF
-AA8C5380B558B3DC3C807179E5F1FA2B97840C111FE43DDFF9C8DB8E83C8D6A0
-8CA90597B554C70D2210CD115486DB257032A29AA063320E28280E3BC571F6E2
-AD22F91DF0E2AA0B690CB27F5B0CD628B44EEF1930488989D74BBE790D56F21D
-F0FD4954F14D17B578134DC523C7A41EA42998A729E241CF8D7F4AA48E84BA07
-FF3E8FBB7B667953EC38703586C12E5FC946A2660CBBC6A9F0CCE258BB5852FA
-F05ECAD9B670223F978937C9C8251C96080E5B4D52876A700A96F107BCE35620
-22F63E5E4792C310F800E903F1FD43199B7C832425CAD4B6DE9CF0450E962F55
-1E79368359572EB7CF7F8ACC3E3EEAF23678ED8459DD6B4460B98368AF0EDACF
-1ED06368F3CB63DA457DF7BFA7367C5CCE1F8815FFDA45E363DFD05C7DA4B335
-6FA37B2CD5FCC46498C69E30CE805701E5B4A3C5853A0E698869A5DDA7BBAE72
-4260B3CB37898A967D7EDF3BF8F118330018EEC67291A8C07EBE1992465F7FB9
-6CB7E3381A95110C397C879E90BF87AF26BA74EC6596990137EE7940BB4A6A15
-30E320066111D4DD3CAA89B8B35B08044D394641288A23AE77E161B3509F4B09
-B7DEE2493F522E5DDB553965BCF81A2DB6BB153F6B8282B9ECCB8494F6DEFD25
-7FC61FE738B2AD79D967A3DD2C6DB0AD1A3DCBAF2FE89E651B3F2DA9529E3DCD
-E8DDC084AA6DF17B8CBC6AF70B25C81BFF91BE4D60675A3DF7B7D65A912D32FC
-AF41B83C15332A31BB1995C31720C42C06D1D2B7F7845EDE5C08D0E927CA9840
-49351927DDFE0C8E659AD265EDF97FC9B5AB416EB371359A7618D295A0A238FD
-AEC76E0C6D072A2D9946B00BC1B6DC351CC8AB8A4FC9213307D8CF1D8C8DB57A
-56D1B96C3BE755E42D8E956E3A711D84195595AD3221361032A29F526A563F60
-777803988E116823AD6A104A231AB8D0E39624277F56D4CBE28564751CBC2104
-CE34EB91F32892776412FF809BC5F5D37C06E8E8DB89AB2EF4C4312E66138DCC
-E5D7EDB6F8762AEA44D95A137F6AFA8EBD7A12CAD701A2B476AB982CBBF8E17B
-617E101915E85899C8CE793B1EA72678EF8CD7B2A9E86F8698EEEA8E45821CF2
-C924C1996AD4C9255E8188CF27817CD3056879BB7928BF943B8E025A0AC5E308
-54B66FFE137F7EC29EDFD7F7D68702B54BA9E5D1620F7E9ECF7052D79A508503
-DA584A20D8796BB097DF1CB99FDE057BC5DA21734CC5DFBCB322465E338BC3C9
-1AC3549C386079107EFE2D8F9F8CF3654697C778A884751CE6EE47BE440197B9
-304EF7DE6B20E7F12C1A367A9F5FC26EF5AA9807AC3CD4D589484A930035C110
-88D49A3C26BD8FB521E2F4BDCC34D575A23DF145BBD9786ECE5B332EE284859D
-3F3C942F19B7AAFEAC3039F60FE1BF30EFCF1495F15BDAAA6D84C707809B04D4
-EA2B3276AE6EF628B621F2AB7D961A152C770417777016AE9F6BAF64D08DA983
-5E20C6156BBCEEC38A02AE7A1B4C4A9D413508968BC2323A413DFCFE852355DD
-60B45C01582FF64117C574E24986AC6AE685F932D8C81B704E30F6F6A72EC5BF
-F2EDD6E3FF5504D0E7D196F67321DDC1FED8F3777AF397C034D3EC1D72C24059
-622A8F66A6D8B51F983E21AB4EE7BF252527C970CA823EAE03FAF6FC305FCB3A
-86DA71153BD9100574697DA576A38E70DA3E0E32B2500D060A35F03BB70A6C59
-9B21CF58B7B8F6EDEC6E6D51020B53E9F9C632875BB0747342ACF2B4067A2D1D
-192A6BCD85F8E2E67CAD111C3671F58DD58C1292ADEE0CD30FEB0701ABC5B8E5
-0C81E1B2266B17BD37FB37A6857BCE292DAE92156064ED7A98B70D4C2320AD9B
-29CF64DFD4230E1443F5A6FC19329F3525E870054BDF4B2162338B4CF016F3E8
-1F0FB52E74012B67EB1E0C4D64DA8B88AE2F27F45F1B466EF1D2A3A2A6FC98A6
-C2C46FA7DCE7D5A82F7AD0A06875928DCED4AF75A7D9239D4145420FA1973C46
-8354DE90662D1F1374E9C89A4848EFC0F24DCEE742D788364CCE197636EEAEF3
-2FD04F43744FD4C3FBF991D3FBE2A93347E3712596ED63E712665BD3A35CB5C3
-8EB41BC83ECE9A9F3982C207BEA5C1A0E943CCA062E4322FFE675FDC8A93AA64
-575F15678E98022DC2E5B24BA5B419D7A1B4A62CABFA61B0552D00AB76197111
-85B08FA2BAA26E395D52EB27F3A29526BAFD2884D8ECCF4EC8C945183329142E
-326F0330E20684CE77F6F0F647BD63DEE2AF2B47A3C0E1F158B986B1267BFDC3
-98830F27F365A1A8932E8F3406ED058401E8DCC1ADA6473EF974FF4F75856708
-8A79B344AF50DC88F963A10EF2ACE1F324C36B3D481167472E977B0BD66C44FC
-30F6FAD3A8D525D65F8A34C701E638FD63DDC3EF7A9299ADF0BD4BA9308B09C1
-5D476AB68032E964080ECEABEE0A34E2B2E79902D9C1C8BB22CDB4BAF033FB9A
-4490AB747F3B3592ED08CD980FFF0B17E1666B77D91E0F611DE90E1EE20DB173
-094B93B035F1113ADE3EF698CC950DC60484C6ECCD66B97C18D225EF51F058E3
-2F98489C0D2483AE2B6D95DB284F539993FF44568A415803786D3CE348699B99
-F9C404C56FCF4E0CA761C52F9A432FF3EA4B7BD855445A1AA68B81099152F136
-CC515D943CE8DFA6F51350DAC48E92F04CB2DB434CAA5AC41A855A874BC4469C
-256381FC3F7834E4D00F2ED89DA44CC78FCC7BC0EDB6C89082ADE00577B5D629
-4B15945324E8E3663AC99A63569FDF068710ECDFF32FD70D7E3C4BE4A6952E47
-ECD6AE289F36873E0E5C2DE753CE14647888DEB2D6F2445F0CCC062FC77043CC
-607A588BF0633E62093F1B3E883E2F2F33F2E89CD9D40950E47C13CE82958EC5
-7C9A34E4B04B4DE8B3C8E0397AF328570C58617FC1FABE75C1A99E5D07C20868
-29B0BDC6AB64F7201C646A9CE00E20B31DDAB150E48074C044D64C21C6AA7F03
-F0400FA4BBAAA9C80F67B901918D4D516363159C32BAF8494047B2F0A7F75537
-8B20BDA72DAF28443F65C12C206F621AD3ADE004726663A8138DB25A3FFCE48E
-E840650F50EB170C6482749EE0EFF441DD0E800F3CC632A9ADD14EA2CE24E59E
-682ECAF68D8638984DE2AE0A8E5C0066D76359069CC2E39E4648A252D5891334
-46B208423C439FA3DD052919896A31472380C5FFDBBFB3108CAD6177E8A63507
-EF067F124E15FF5E747C2BB5CA9E23CBC56D043021E87F7EEB905EC377E3C5A2
-8ACF7E30309568156C1AF84306783CCE901DC703AB64D5EAC6E6F16C8B711DE0
-7120FC02021A33527FE24DEA8E3CDAE65682FF5E8CAEFCB9406F3F9EEB5869C7
-F87B73FF8B3EF8EF25355152BA83EB8C9D3F81028DE08FA97CC71A14832AC62C
-BE7DA08E586340F1B8DC98811FB4F82EB8895DD43CC90CAACB10D047F1C9DD34
-32D093E212D834A94D76F7E47C07CF9490E5C502AA6E1ED2CC3AFF5B9378AEE5
-AB5C8A01575CE45758FA15F945CAFBA620CC6DF69B6246BD5F0DDDF2C518B987
-FFCF320BD655FB004CC2BF4282ADF8EC15E98C3D41FA8B6DF5AD57A4FBC047AC
-97152BAB1860E35782C2462F28045D5B3752C6E1504B93AE965CE940C5588A29
-CE52F0FAF8F27E9274F923C9FAC150B68A9F46596D42CE2526402D0E7963D187
-92A9D7690077777A18DE02528820C04BD64F0B95FB5365696593CC9EFF42ADE6
-796C799AF9939A25370EA06E842855715D710B0F437DBFF6125F8041F3680642
-9F809E3B4D0425FB041BDEC9D87648D9C37B66CC67983A93F53448B5DF214CB7
-DD2B35E9105C98EA68FEF915ED71A0410AC3F873A1EB3623FEC0A0213D439177
-D7B030578889C4B3689BC0755785D6706BE7CCD99ABD32AE1BC2ED8453E733DD
-402BF2373BF92C0A4E7DCE1582EBA195996DCEB9BF70C7CB17DDAACAFEA4A64A
-BA77C3671631CA6F8C03DD416A67322EBC17506F9D367C8994D8B0A307A242A7
-BB6F9DC759CF64F98462A01C02A2771A653B61D5B858C3E2AAA521584D89EC24
-D1DAACC458F6235909885656200134660265D7B384427B8B918D9436B4E944BA
-30036A5F6024C3D611A56CAD7A707D7B8D5916802B75D701D4622C3E623E9BBF
-E7E8A03BBE632C5EDC166E484A3D76B5FFD4DB7914ED7A2F34E5DEBA579F75D9
-D8A3606AC972153A7539D7E9E17BAD9EF8AEAF70A332C3A63E7665F0C5DEC840
-6D7D9BC053F10D8A329DFB8846B48AD392B66C2DB9E96B1615162E8E808CDCD1
-AC45D4595B76D036D03F98B1A696A12A942A89500243C55AC168E16EBE11BF58
-EB8417445BDF9887710E3906D2F9A99EE2AA09A30A17B67B42BC1BFC85F192D0
-3FDC253A44F84EEBDFBAF8AC489C6D09E02420F2968D669724B363CF0DCE055E
-529ADE022F6CED378F7DCA799703E561E14F6AAFAF49EF2C9900836197F1BC92
-339AF1A66614AEE12EAC60FF57E8498ADAF74224DEA1BB0598C31A6ABEFA2CD0
-11FBCF0AFF554F637FE310BEB086DDD40F91714B0A6C31F08F40F1D079AA37C1
-094F16DA9DAC11CD1559530CE463F01F394B1EEE0C43EA54B9FB7F22555595D8
-C8B1DF1AC480F201A85AEC9C40FB3508338FFAB91ADA4D3DC27466BD920B7A29
-46F8E912365C7437882E8FE03063F857358EADDE60EF74EAC622D60BF35BE478
-6A30AD1C65247ECBFD93CA7F0B63DA626B56610BD6D34F7DF88ADF467957CD2B
-ABA717C19ACA5F2C0D9E72C15BCDF1B669B8FD24945EDEC4CFCC40E0D15ADB5F
-5A1D91B04902A76A93556EBB551699D50E8F3799940E68936245864A25275062
-667DE1D4ABF8A89E75CEAC1C520E82257C6F7C6F5C711CBB91F274A14B774552
-0135107F35A45D18EBFF4A92A373769491ECE76F0936BAFEB83240C024230FCB
-4ECFBE84248E87C09B5B147CE8FDE934B02FBD9B09EC18A8AC4655D00C9650D6
-6074612AE2DF5B661369B7BFBE8D382A486FEC1E1F55D6A8C8E729204EF3ACE2
-B1D1E28C71E70FF4FE7D8A9A5E4E21D891437677E403303D68240E234517FEB0
-BE623E95A1A16FC045E024E93DF9A73129AE8107D841828D7529E0E28CE1E7E6
-2DE6A97F6105DEE1C0CCB20153C9DB2C3D64D0F85AEB20D437F975CFD2E67257
-54EF4A3F7785D00C59E8CFECBFEE64DE85BED8DCFF6657CB49FDC368AB3AA497
-E32744A89779816B97D0EB730E83E51F77E7ECC97DF71C2A59998B0B57B44F61
-C031F25153A552C4001F840C52C71E6865246CD6F9E2E7503DE55F1FA143F5E2
-574A2DB164BA9B4E955AF6136DF4B9E4894AB383289D2321966C90BAE4D7C986
-EED9077494A6CA30C8A27CBAF4088FEB0CE5F2C4695FAC3F6B570DABFEE084AE
-8E4CA5A2C79B9C7129FC06AA8AA8C0BEB711216BF0A7BCC2913178EE74FC8169
-907F0E9F4B10F047002DA8B3EB8D8B9F6EC6D49A632ADA7FE7AC75423315B3DB
-F1D4CE1F8030DDF092F29AE459E129DB74B68BDD0C2222624C3625B48372CC26
-1547D1CFC9583AC9D30403D886743F5DA320BF923FAC7DB98E3E731401986ED0
-998F4EA2F6AC4AEC3F703484145AFFA48C05D218861E2EDDF3CA72F3917D261A
-348C260A11E8AFCE9CCBDA1B8A2145040109C734B354516D46A86E36A2E7CBFC
-C404AB710DA8BB2F9954707BDA166B5BD0A5D21D52CA3AEDB5DB6CDBD02296E3
-737D68C71F06881A61C8D4DDE0E1D1D28F73354E2D5A95C1449B6A13C8F15A67
-ACB104CA02BE342FABBF931CE20E2AF96C81E593BD4CA3778489FF756835FFF2
-FEA7A655A483BF94A00FC5B017140A6649FB672DD29AF4A677AA6C387C9FDA40
-D482A96DB21662687D6D3188B002DD6BDE7E3C6A33FDFD35D26B8A3C79693705
-19B2A8DC5BFB03611F6DFB7A789FD3763F2524E33A773320605ED851733966D3
-6518BD7BAF522CF3D9A148A10461269D262EC7CE902AC1D4F0F1554E5BF776F7
-D3FD3917A0AB972F966EC89B1446F3272DF72F2BEA5DF03951B887B7F0202B4B
-5EAF13BF5C91664941002F8516AB639A1F89ED8D29500ACF497648E859160A4E
-524DC4A61B0EE0529FCA3C0CB2AE62F1971C8BC2485A3CCE6A7B4261EF3DB2B0
-7B4F153CE4A99C2B35F68C6BDE6CCAD0EBBCF9BF3755B23B76B693450AD2B971
-FBC6A07C9167FE99512AF36A9D653203C448A54A016768541F50047E3C801391
-DA808EE970F1140E1525C54A407BE760D72E2A6A97226A3F7ED0221EBB323A29
-BCB81B9622879682ED5F56937FBB1B0B892E84DF5577BD572F15A8EECF3E9FA3
-DE4D10A0BC857E223CC73BD4A5A48DD83BFC76C5FC8CCCB30BDA6F6BA40C5112
-C54811F61CB99A96FC797176F6544AC1199DA9E09B05570462FAE95DBF820D5F
-1FDF9941E8E1DF2E13C1F1FDFDCC1186EEFBC366A34D9734B077201EA134A82A
-858742990E8EDA730D7984C80551AD39AD4B4F1531ED07937710BF208B459372
-23B5613E6B4733DDC4F7ADFBD5654755FA8418BF1150FD28005B06BA92E0C98A
-18B98C932C5999187D4F859C67712D15E65F11362266847B590FF258DAB5A4F2
-04205E9C5367A2F497D74A17AFA18F88E9C07452862E2C37EE0452429490E372
-0CE1373C78CB456A60640936AAFA8DF3F6F4A61FE866ED0A3E8EF038701EA6AA
-916562F0D4EF3999F0F9269F51B7096C7181A9DBF7294760F30C0AC4E81E4419
-3F3FD9BDFBFDFCAF025221DE4D7E8DF23A9E7242833C9565D5D98F26150785AE
-EB442C7403BE3D1888A5E0CC14BE05D14EC9BAC1E6624BA215FF2F5A73F00357
-54EDD86678B570075C5AAFFCBD977F9934FD40F5A1F32D71F36DC868984825AD
-42D09AF01D4BC2887F4A5CA5F028C81E5EE852538C7FA4D0F1C87CAFA5E0F8FD
-873DE98952CF3FA16B11A16DA3A52533C5E16CDD3F3C3C1685155300E73EFC56
-E4F60F3B10D96C077E3F017506E453A53073FCD9636829FEC9AA4E076B022CB5
-6B68C81910878D36095DB69D00E920DC230821F14AEEAC1AB434642DD2BE939D
-0BA2DEA21D20CA2C2AEBC1F0B77C153EA109ABDFF33459FDE7125378527482D4
-35F22A42488674EB131EE2D2BC7657E3ACE195561EF8475CECFFC16A5A5409C8
-4664EE37AA9BC99A6CBDDFF53EDD38CF33E1B8796F34A3F31F47859E33C7896D
-314D32CCBC20CD1DCA8163DAE02479FAE164466A2284CDEEB6C6ABD9292476B4
-3AC1FABDA8649E8B4ABE910D4C995ABC80CF6DD870BDC806EC42E6FD455595BF
-4A5283C956BB3F5EA073F1B6E31B94E4792683E97D07C120FF4CD6CD78442E06
-5FD3BCA2E4DAF6FED68CED70D23C8E60B5AB6CAF718F89ADDDA78D782C10F7D2
-8BF99669527147E9C15891FE6C2CD2BFB992B4BB1EF7F4034FAC20F94DE64532
-6B80513E57ADFC1E4F1E78B59DFD3301265AB9BA0E593C4FB4FA64173C6E157F
-BA956F613507C301F27C04DEBB73189B8433B17DE77BBA1F368E81C1270F1382
-E981D9C757BADF1027012DF8447D5311DE7C2846266B77DA7248A6CBAED2AC29
-2D4A8C2E1A8B57ABA496D0368C59E22F4CD5269BB4E4EB616541EB2D68D40288
-AD67EC7F6959548AD602AD2141C31814907002333DFC654C046A8007008DA1D9
-8898D4C77DAF93C89FD5F213E6C7754808DF13205AA63EB1E3968CCB9F0ED399
-8322268AB3BCEDD35A8CCF3351DA8BA5A2F4C60CF705F8FA2933FD77A3A2C5A0
-E6396DF1A95055B82A6C623C15C9E254ED9807E3B2A9077FB1B003CB95ED55D8
-C0803F94D3DE586B6D30A9D7EBCD32E23B0C35D9CCE2DD719522E098EF3071BE
-43344FAA355CC5C455D389627F09EF75378566E32D51A20AC69F2634C911E073
-6C7D910111D7365D979BFBE1E81D1D43BCE742019DFBD2EB9CAED4250E75433A
-D34074ACC9E9E89B00F3A3D185C173E6761DEF33EB805B660DEDE616B3EC3587
-8DD1F9C39787B2E6FD7C571C87CB4B624E0441F75E59A377348277D71CD73060
-6D53B062110B3268B6694D559FE8FF671A39D4E5A77BCF3077ABA2E3D7045EBD
-3F78AC3720CE95C58ED0B6283A8AEFDA7A45FA126CF067705D8CC509FDD913EC
-AB715A4249610CA76BB469B0F11D311E07323549090D351E0BF6A5C5ECD288F0
-8C42CF166026AB50078DBFCDFB495A5A1510B81E26CFAA00F3E2FCCAD8EADDFF
-B41DAC42E2760E7DC4A6B0C8BDC9577778F423BEEF011DEB6A6C2887DC7F9934
-AAB384FBBE487EA6829DF49E07460B563E395CE7FAFB2A0714B09F00FFA4C93C
-F80334F72A854A3B6E420BF22D412AA4E470E8C7701C7DD2058827DCFF1B85D1
-5938FB0A934C79694420BA6FF6ABCC21E10ADC9B62DBACB139C15BFE33E24DBB
-5EE5B57F2A84BBCE54D9799CFAABEB6508620A7A2A56BBB8B6C9F25767B3D480
-F1AF1B62545B43768130CF7460C88515B5357B68EE134CC4DDB70DED1181FBA5
-D0E65BEB324DFF9C0655536FA1565C673A4F078977100827DDE3C3A56F214E9E
-1467642DD64D7F2C259F30FED642B910E8285F789337DD1B9D18EB98A8200D63
-2009BAEDEC71CA55114507DDB8ECE30C529646E4AD927B0C44B1C9B4ECC6D71D
-1D5B7466D36129C18157DC9B4E1FA9E9327D9F2BAD0B7F0A4D73B212C819CBB6
-89129D694BE4CCC01CDC74394596922CB51730F04041094760376195301EE756
-0B334362DA8C1705CD4BC4FDCCC932151160ED4CBAAA7BC24F5C5A7DC4B880AF
-F64A004F6CDD358C290B283D0260F21A314685B86C080EBDE8BF54B8DB257AAA
-227B852E8245D7BB731C90EFD63F14ECB4CC9884278B34CFD353E722CD0BE3C4
-915730AF77F736813B4BD36E574FC5469E6ABF20F7947FBE61D68F37132E8C73
-DBDDFFBFBDE8233A359550E8704A435A41CC75865113BD455F43BAC5107A8986
-1014CAA704B9D77B9AAE586B3EB4362994625CB882471D378AE0E5D256297C76
-5D68E0B97D2C23B0322883CF89BE43EA51BDADCA18906981EC7812F2CAEF1BD3
-4CC3CF85C912D1858BCBB1774539AEF07B3B6057728EB90DC495B1FF7A2BBC04
-5FE18C8510F04E6B5B8E17417949A9B0039C4AE33C4875A0AD89C88408AA6072
-8D7F21400E62E9A19CCA9A67DEB28804635A89C4DA30D33564F4DBE35AB0B6D4
-C09C6A3D94DD4A7D4481443F861C532D52364B0714E3BA599D4C2F11003C5220
-10E50CF567C3149B30F3B267237CB6144ECF32E4D0553BA71D338E4263360B0E
-571126E1BA2F16B77570BC40FA48D5AA4CB1ADDABC042D57426C4F1DEFFDC28A
-134EA51EDEA9F14913E0210B102EDFA9AD95DE7EFCE0BFEB233A151DB82F492A
-AF932E8D3C0178FCCAA022FD0E6DC4044C3FD18C846C76EBCA641C0E0A9D2D7F
-C82721FBEE99553F85503052FEB22CA2243168F6A7837E0BC1C77D83BC0E4C13
-56817E1253F6354F0CE06F0889A524BC8F7154957402FE985C79F3364D6B875B
-D4557FB1EDA1984D9D7A0D34FC09E5D20F6D2887DC534924FC13FD1BE1D47B8B
-38CD37A847D6F741CB75DFC68797890BCE1DA0E7EF9617ABC04F83F4E0889F34
-72033E486DF8E70076C259990DB506158D25C7547020D8244A5EC56153D11C57
-5477D97F7E33657C37B9E8125F5E682A551F34D0A897C35531A7B682D0C2B100
-D1B92A4EAC814AACCE9B648669874726BC16B355D054EC499A47132644ADC72A
-5C7B9914FD4581DD2E14C6B7D7A321A357D60BF8D47C6B597FF24F9E58EADB22
-419BE4077BB41FCF1F4244641EBAA567BB7C13339FC881DE65E324BC853B9A8F
-8AB2C62629FBDBD8C261CEF4248B26761B1A7924B76C7CF870451181FC696331
-A5802A8E18A953913F99D902EF1194E5A0BB9D0B2AAE08A2C8F9CE741C64BD13
-6DF383D4BB7E19CD0BE58B7B0A16EBF6FB272279C8AB09B7E549869CA284DDA3
-38ADDB92F4256A2AA316E5FDA1B97F1AC446D814D397D102726D6318E9581EA7
-5C5CABDD3354A2CED7787C1BE251AEDFDBB5A5C46F89610039867C3B51B5EBC4
-8EEAACF754814C2F14D3B3D81ED08E8E75FEC120C568D56A7CDE44D5B98EC2F5
-487AA94BDD1C84659FBD6B00AF2589824D210239C48C66391103169998C52093
-6262FC9BEB056E35E71CD0B550E69A1DB9F553788D34A15E7FA4B049CABD07A0
-0FBE0DE46469DEDC3E65CDAADAAF2C23A308B115FF910E6C7CABFEC1184CFBE1
-9A6F7575612F7DC4A72FE70A4ADD13FAA9915AA09EFCF4A29BE61C0CE3F1FD10
-6C2059A11EF35B54EA57C62395B62AC470475D29
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 25 /germandbls put
-dup 34 /quotedblright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 49 /one put
-dup 50 /two put
-dup 57 /nine put
-dup 58 /colon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 127 /dieresis put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA92F9AF34B34C1C44B8
-56AD10C118F03562E68C1D67E4A8414E94D3AA07DAD126D78FE9B6FB9A2B8BC2
-93A7C4BB95C982B6A3A4E13F17CCE9C00CEAEC5C5365D06BE9AC81F6E117CF64
-18E48C5617F307507A6A6D53830EC8AC16DFA46A3B2DE83040801C3300711E21
-CC2C1E619079C80B2CCA04960E6079DBAA69A86BB739116B6D6F737241FB7E7D
-77E287DA8724C4A474BA19F3AFCEE2A67497AEE22670783A0BCCDF4A2C118BEC
-4D8665B0F2EE270096D7457F41224E17F34C92CBFE3F886446B5AF47DBA9BD53
-A7ED1FFA43FD3B5807F66E9556FC428D3C954B679D4BDBBCCC4CB1C7B182939D
-35E47353D061C1D267181922E6117A1868750E27F1FC33FE3C5C53E2AD6C3CA9
-4A806675DEF3F07AEED581B037295031FE3EB9FF3DA6D31A9256B5705F95AB73
-F07DC7F78B7AEF23574FF7CEA111F4BB502F47FBC5E79BBD394F8CB93A81C40A
-E67EE84C754C4BC7ACB53A6BE9DB0A114CFC5C2C7E87E11DF220F2B612BE0255
-A2A34F53A9EA236A2ED547A52300435B9FC56CAE051830E0566D847D3FAEEF88
-4A4AB41AC6E03281402941227BB309C2B574C02B8E2CF9CF36F73CEB70486363
-13505FF4D02D7C0AFAA51AD51837566FB37761D22E56C4948FDD483149EA0A95
-64C15C62F2B40F01D336CAF44E6D382D63292C01EA493D57E478FD53964D027D
-D09F1C83044DA90C99BE3A8916272C2A89BFFD12EE35289BD89C94E59B534211
-DE1B13E7B65EB362FDF6069E2EBED59C84E59EDC13BFCF4F5DB2DED730B81B6B
-4FE90D47C95963EB392CA3597DBC6A13064C200230598AEA91AA72894715F93C
-4B5D17616E3AE81E1E499448AE2818DED8C21E74F88D7E66A57F16AA2BA8C1B3
-9CB40ECDCEA5D25E9A3BFDD7B5606041C8C4F9656852BEF4887B5C62A985F296
-5003D4A860E4C9D14AA6B9950E577676B7B490D105B5052D8465D0E4211B27FC
-863B411061B22D8036BA76F42BDD04577F2F290D7C2B1D6D14EE6EA759A65F48
-139FC9F16E4E6A617523B704946F089B47C57269532BF4B6A8977F86E7054BE4
-8048B51B9FE66E746FA52CA448551C5B78F5C9D48C1EF3BDFFD61BA323726A7C
-9E259139EF83A372E265B63A9E37D66130F05A7B5B8DB7034FFDFFC195C656AF
-34561370AB1F4357F2DF7F47CA01690C4A16F5CEC71A9BA24845C6417295C59A
-1C507185C5AFBCE9B04977E9804D0F790164EC653A27388A5BF8A3305B6E38EF
-12D1EC08C4124D9D35578E483FDEF46AE6B4902CF52981BDAE8318BC9903EECC
-45A973C3A0A08266EC98572BD205D3044329079520DADD0A3FD12C2934BDCEA3
-6D9D224B32E170A82A212BB173D73C781B077C674CFE166354770B53EC2BF165
-84E1186EFB71517495885031C3B54C14C7FEFD51108DA91F617D635E688D30E5
-554F4FDB1EA55A3ACA46CBA02B9B37AB6EA3CDC2C15E9A149BB3ACAFF6508F22
-DC12E895997169782EC26B7C9D79B4CF5AF1E8EA978D126762128470C5B689F5
-51BF6619FABE29A171D4887D3781BE6DA2DFA595E19F21B2129D7991CC4C343B
-E01522AA8616EE218BCD02E0AEBC76E6DEC214CEF87609310BD5AAAB21A2FCC6
-BB3FA37D89E272C30D24E8E9B4BECDB81C91106ECDD4315B7EEBCDDFBB808442
-76D91DE7A84599CF4F1DE811448A1C195A78DBBF527088C3669E05A427477644
-ACCF34C340CA324D2EBBDEC7CC2BD12DA381111613EE2C66AF730C556830EDEA
-C12C4C6C15C71E899A7CFAEA60635871926688A6814F74AB79183F0A4E235B6F
-16AF7BFB288103C58A8E188E1037012FD5DE0D8D66B58113FFFB865460959F74
-584B547BC7B693FDF2E050A9566A3E975DA2953900DD3429EE46F0422C824A60
-A5819A4B1ACF8EF9137A1773B170475AEF4FBB88C64BFD606D0E551A0BBB10FE
-DC5246BBD6537F54B8A1A5D8DE17F3BE83F7E8E6D0F4EC6C769F2D8C8358F081
-F20221E56D0922247A0CC0964972E39DCA785C4EBF4D0A9E72C774FB890FC4D2
-FB81BFD29B02C8A278780B55647CC5D5656AA5590F23AE4A7E2DCA1345F33368
-AFEF6CD461F3B85E97934A1382C742B3D947F092CCBDC19086AB4D7DBCC49863
-ED71C9841D61B893DD7D0EEB23EBA1A3B1E00F822459DFE1AC98C1F724D96AD2
-8061EB6F9DE008ACCCF3B1A09400E99E7BF87422998986386D29C27B9280D4A9
-A569ED71458BDC465C67DDCCB2C70A654976C2CCAE49A7951161FDDFE326217C
-5C19629838A699FD85DDFE00BCD975226B4C269B2BA85937A2CD1169A64BE769
-3C55B5F4E7F7E7EAA907107A53B2336F18DE52EEA7E5382AB7DB9F4F9416C894
-4EDFC7E417093F6F6150F2541ABBE02A435C514B0CF2EC4E5E56E5A5120D3C7A
-65A447CCA2312DD1B36C2E0F56BCA9C443E16BB5C447F74EFC644EF6D102BBFB
-BF9028A3EA6D060AC91394E975F0D249249FDAF775DD7C6E64CB0FCDA5BA8EE6
-D0A5D820E88BC718E5F499E7F376E5B3834D1AD448FBAD8958361D261E07E121
-5B6DCCFD06A550A3D930B2A07D844BF0DB1FD7A8539245957083C8490EA566AE
-823BA192BCB5F31D32573D3F6F78E280C426282BED756000563985501131E476
-A76E9C6DD970A3263ACE8B3426EE3591BD25FADE0ABCF2FE90DFA4D4A18B9916
-DEFACC3FDA83D8B0AB4017EE4ABA8864B2CDA271C78F5A60FCC62C72F8204DE7
-3691FF8764A5F462E4714F10F3519C660C9E746FD5D6508C7C3824F2750E8B5C
-828BE9F1677C1F87A8D315B8BDB8FE415549BB85870C176E3D9BA9C63FF148E4
-C944BD13A56773F6EA7C88D7CAC153944CEB589C8B366C4678C07091A48C4966
-D5AACB441F69523456D5AA3486B7E47E70D64E0A1E1B9DBADD15BE4F415095F2
-4C7F31B9C75ADD272EFFC226504031FEF49354841DCCCBC92DB01B2529D0E4AA
-CA95E5E4FC0F90D45773831FF2A90E7492241F6977A51D4ED4E21631C76D2055
-CFC75E0A0BEA2DAD4191484624A8903DBD53960EDC3A6DFE390021B70DAB42CF
-EF05245259C57032803E4D30212FD52A830EFBD10ACAC4963D990A6CB0CFEB21
-18614CA56785455354DDEC11D24B3096874A0A6F3459FACC180693B85DFB62A2
-6434D3B62BC4D041B014C19DD6207A3274DB74A5CFE88B34B7E7A407412EBEB8
-9DED1F5C8532287C2F4BC47040C6841028E06D27EC94E25D0ED8643959BD6F7D
-9B2E2ED81D3BF77BADF35A9FF6407DF4BCAAB1894B3F5465260450D0A70B1897
-9530C72EE73CF7DA282718B37A5D15E43BF43B094F590739A0D951D520F8EE2B
-B033441ECA054A042BE72BA4E806157DC51249A17223E48605F5D052B678C4B0
-61E5C665D6860CAB96C039C7D328AE51F22114AC358E30838DAB9E565F54785A
-B8F85AA684F5CBC4E1D4DD712EAE00C5C8B143EF7C9C12666D6DA3FBFC099CA9
-4277580DF6BE5D47140455F4994A7814F4E893621CBEB591DFCBFE32C8E47BF6
-FACED2C375040D1D3A6EE84A1EDEF528558854283DCE27977B407F4F38151BC0
-FDCBCC2AE21E424D5CC81EDD919EAC507C8F17278DD2A8B05AF6126675593E2C
-18F68B0A934D64FE9FF55F99DB786DF805474BE8FD5D70528FE9812DF6E10D9B
-3EBE905D5491643DFD21E9B1F5A683DF88539CC980B4DD9A017373B2B9D464AD
-7CDD24736D48897C1B6742053908BFD7E11C1D615114D4FF4E09F1CE574F09F3
-27624A5C340D26BD1ED2121C5A03858470E23565822D9E0F643B305ADFB7C99B
-96CFB8773B390BB9523539BAEE527953287AB7974BB201CBDF9C3A4BC73CAABE
-A527B7B082B18B72E44633575BF6E6C24F87580C25F04DFA00534565A6F15529
-115D32B823010E537CBE6F12515375D1608A5B3314B144424399EE76BA1A9C1E
-ED5B8437561CF39B6E12F4A68FE83EF10C1E306D3CFC1771F574D38BEA6EDB5C
-0C2E1F5E347277F8DCA4364BC822B8973601D780ED07B6A093DBDF5E95EC2F5C
-1BD8D20308716D9DDB9349CAB711B3B1C22B4A7B28817ACD3AB0E3FC6293FDC7
-BE32E9CAB50076DD0D84DC6B33A08C52BACD1946955F30D5547AC5499827D16E
-22BEFEB4001641DD41079FD88FDB65C3A263231F6C1F611F6FB1F000EF9B67C6
-3D68ED9A1376237A473BBDED821B9F29B2D803F6B82B76B121EB577F69775C3E
-C539E6ADFE6498A7FE24F7519AD30E16F320DDEB76E0B5B15B5CFB0F7CF9748E
-4E95CE98BC4454B7F9A91AF30265DE334831072008F639688942F02E817919E7
-85A70E731A372242346EB192896714AD906AD0BAA6375829A4AC1868C12DAB06
-7372C70F81D18C463EDBEC7F967AEFC18E29E6B4D6B54F01744EC270D34CF112
-BBE979942A5AED1691DF83452A8F1B85E7C6E06B4E7AA31C7F74217B2141D627
-DBF02C853AD5E3451E6E8B601BA31AED5ECA907CE0A2A90375E9A74996693F33
-FE501762BAABA4035961FBE33990B671C6DA78AC1A6234B9A93D4E45C92A4D1C
-4ADC18A9B6966178A3DA17CBFEAC0ADFF71CAF8673226EF2ED16891688EB69DF
-0A1DE792D130A07792EB325D9B20449BFE576C46B31DF1827A956C611E3B1331
-575555FE8718BF64A2FCCDC28E1E95CBFCDE18E90B72D1A331BA464D33E72214
-650214A5434C53F401813814FD5EB83CC2C027DBE7DE348585D98239C76E7827
-D5995D67D5B25ECE477D64924D9D237EFDC420A2157799D939B1802259D42C62
-1A320B2EAD70625E1C27CDBEFEE34AEEFD15C520C39AF401B23BB2993E5A84C4
-9A7C0D462ADCF9109554C8EACD74ED08E7C5367EE07E0A31E19718B8444AD175
-EA0B53C6901F6B4343A7884D97CA89FFF1FBDBAD326DC98309CAE6BC18DB72AD
-C57A397150E7118EF7C1A82E78F54402061AE1486266A7CBD5AC6DCFB61325A0
-CC6392E4FB1DF693E2D8DB4EE5E0E104C4373B13CC71194E2D3D0FA58703C565
-956C7F08849A3D0FD0E6ABC8CA83282103126EFA119826CD7C6E6DE5D9BF315C
-0477A2A2F62123870C2867BD80D208B3DEBD00AEE8274780FB9123755EB6865F
-4E8873D762DFA760A54916224CC0798AF5565E9C19A011EB02B18B51DFCC2372
-F0E0E6AF6786CA0292781FD5D90F5EBDB68B7BDBA8A80AB21FE329622E9A1CB3
-DBC3F77C30F99B8297503DE7C396BD315B390A83D76663D6CA88A5FA8D2430A4
-FB6B74EF29B77D9712F22656F2C3834E2073E4AEB8B73BA7BFD2A89128741CB2
-D74CD81DD2441CCC7667BD34C0B4203356322A28DEA8ED6E580F693968624D09
-D29F22BE1EE8775283211AD16752A380D8FDAC9F4AF93C97DC423884907BBDBC
-F85830EAAB27C8990D17DB1F417DC722861BCC20804EDC66E16D98C0DC37E399
-42805E66A22DA1A1FB9C6E0BCA55E715A1AF265585411E8CC75CCABC2038201C
-EEECC6A2D72858E50727311B0ADFD8C3FE6696C551FF2E3C0D4C563415FE17A2
-5CDC2EB84688B8A0A0817887D89AF6AE0C0090307D8129E9CEAD294235B57D60
-5DAA352AE264C5AD565D8998B770E7F6C1BA702987D6EC60D9DB33D9D3CB8B5F
-BB10C15799D07B8387D2953C216F1733DF0EB714B8B03AF2DCDD3E8210189D2F
-C40FF7B3E87C63553B3857D419C6E22C11E3F1FC9F3AC381C980AABED3021788
-D2951CE9AB60B33E34AA2E984A41E422A2503EE8FFC663B479E102446E4563CA
-0AFE3BDFED395025FA82F20F5909CC6DF16EC30EA4C69A9965EFE000554CEA70
-28A99F84EA6CD784CC6ED1D646040EEF63A99D4BBB8E2617AFB63026B15F26F0
-819C9FD92E5F27E276B8EEEF0D4791E62A2CFC3207D5BFCAD90316C15D3725B5
-DAC2371E02575383F2DCBFA327FC595909AC7F691321A0EC088880A371531F8C
-1E17A748731C7C60EF6AEC33A427233C46CF425770EA7AE36E6B514ABD351188
-3FEBAD4F9F570718081BDB8A04DC88E7FEFC394ECEC5CE2C3F2C01CD587B91DB
-C1D997A6B1B26ABA3FE9F52D06ADCF9E0D1AE08D5C333E018CA69B9DD42EFF3D
-5FAD8C353395F7B90C44873E7BF316BEB9279038275EAFF8655A292381722625
-82A40AA87EDEBF5DC6CF09AD67E3CFE7309648A8137876C6C941FAE66F3B3BF9
-1D109459F4236026104E0CCEE6E8B7F1A56C673BC42920D05990CFE818C2E34D
-6193D7D2FA18094DEF76E661479A1C1B98FD26C10F9991B98369E7AE31089314
-8B6346E0D29B55C6DE40471FDEF2B425437469F4A8495269EF5462BA6ACD1E80
-AC58D4F8C6C84BAA0D43C349A828B555E4789517B8835483059E7AABE8DE0961
-C253AC8B912D09FE4D7E2725A9BE99358E9B16DFD22AC1B86A6B17CB363C9B5B
-510C1AAA04C0C5A3B5CC0A9915F3AF11BE7AF0226528F5D92F0D704D9EB3EA55
-0677A8B622818A18B6F7D564FA5BEEA19C6AE12C1D473EB086F85BB04AED7997
-F883C693692AEE6A85276AEC4B30A96047B916EBD7C40197CF3EDFF343CEF605
-FD309044EB8EAC8E53675E3B80EB11B49FB5AD9870423B4E1C9C802596FA5409
-55718B430EDC2B751C22400EADDB55A58739E255827215BBBDF754262A01E168
-D7F7787834F931C4F3F47F19D47B4AF24AD7B2D0D0FCBC5E9A4AC99ED80C994F
-DCC263EA27587A346BAC7A9F2C99FD90892C7C1620E8ED04388F3FBC1BA8AE07
-435019E4FF712AF2481AF56ED31F80418F66752F6CF7254DDCB6B715F3EEE111
-44ADB86417A91D4DAA925E3711581A3A7EE0D3CC327CA68283B5C1383A12677A
-71D5033D2F1360B750038B3F454B994C32DCE48923C9A5A3348C99689353FD6D
-9624CAE248F88ECFFF3E3F36BE7B14FDE903415B51C4B75D2EC50D5D4CEC0A5D
-DA4F2DD45AF3FE6F19491042A1C4639CEBADD581A6AE532AF8D7A36FC0955368
-6B1DF6C8A353C4C4BDAB1D074D5BD35C4FFB1810B1EA076A377D39F49A71EEFD
-174E530E75D58DE10A017F4BD425A3FF079FC0D6C82B713D58A6E9A7BAF44896
-425047F9FACEB01D6846E1E1F3FF67F0ADBADF5AB4543A17A0E49D86025A090B
-1E51EE88EB05F09EF675DBBEB275872ECB89CD976A5F8A1F8890027D26A9C4C3
-9A707F1653260621FDB38B0FCF99B628565869AE6F6C95645BADA9AE0FF8E1B9
-81755AA4980ED90DA628144BDC3931E78CC5AC77F14780B1D8FEEA53694AD5E2
-4EF55C0A5EF0D9D2DFCC5DC2330F243E58AE7FF0B03611B8BB14DDB849DBC827
-692183DE8B9D7C915E6A161C0E0AB1A1355C2FD81FC31D314CEC53C8B70B54CD
-CFD14853C59CBEAC029D424EF734666849BDD5688837904C34995B1BE23E2577
-CE6B09A3E81EB1E29945AF1A33BA1F55B4FC81C1C134DEA2BABE598261B06606
-9CFA30D2A109B3632BE80B741B2B63B2EE7C567976B6B4D10D62167E4D1931C8
-3426E27D046C021B770A53396BF0CBA7D6DD27F3517C5C5EE2F353B66DABF6B3
-E27E516FBAE34463A0F24A244BD93B8FEEE0CE735A8949F90CF3916348038300
-20B4EC40DAC2AB280B4146E9E7A58FBEA4759E819C9AD93A3CABD059F0B2499D
-EDF9534E7729C0D2689369D56EDDB70216CC9CF4EC8DB45D6AC7D10BDE966277
-162D53B3D2F85B157442CA95FB9BEE113EC6507B8AEAEEE5EFB44DC52B1A628F
-54276A2133D5271900CD19EDF04D7EDCB50C86347648D2DB3803B448B1B18E6C
-F9D69348E4B666B1EADECFA3438727977FB339A527552AF057DE2E0CACB1843D
-C875826C4E59D6FAC08F0784708700BB69AA1B704A895B0628C17ACCCC160BD2
-1620FFD013DB19B2AB209004CAAF0B6549927998E7510B0FCE3B5A4E129A719F
-E794099DA261D049A78284952F25BE6A88A72E15CFF842B68AE76C0C9E39513C
-92C907F060C73607EDA9E19FF81C9C0C257F608588CDDE61D27BA2F2FAC7EECA
-516BA6ED12065ED03AE6F6625CC57E0F454B45587C6DDFA00EB36DF43F218A36
-D1A4441A2FE6F962069A599F81D41E11201CC45079F36B8CC271F28699DC7E03
-79B60CCA0CAFC6F6E91B7EB0ED5345B3D653CAA800790E0B0C97185DFE9296AA
-864F86EDD9075F7CDD9CC21E34A8BEB5592EEC555B627F17B5567D8A7002A182
-59639B73F5E5CEA2B7D1D22E5257E5E743306FD45A1A8998C9F84BCAD4D54C6C
-8B88777A4403D3BF0C425D0CFB7A724A05AAEEEC0493FFAB3AE4C60C0CB32CF8
-12351C1F3ACF78FD55A0A896629BB10BDEF0D1A1090ACB311D7EE42A0440059E
-C457F1F88EF8F7311E1A9859B326F45846201AD8D3EE978227C7D54F4081ADE1
-4F55D31360331B8E1144061DD0AEF140BB8E74940BE8A7B6C868F6AF9F74AE99
-27CFC0A0FC6F5F246382A033B623FBEADF474007E6666489E6500F6E202B7993
-62C6DEC527B43B0E93212DD01D935914FF830620FD6C7E933A6575CF41488C86
-B806B3ACFB256FD97D82416C130B5FCFCE319DFA8CA225F1812AF259C4F7F5B3
-3FC5FC8C101FB9E73678392F85BB507D27043CDCEF6E7085E91FA005C1B9FC8B
-A880C4808E76BB5802B53654DAE21718AEA6C83EC93F8C31156CDF08A70AB5A5
-1B5BB1CEA56D76E5632D969ABD98D9C1FFD718FAD18D66E60F3035A0E7F901B5
-62B14A8827C879F7C78CF5C40D4FD1752AAE9384D2327C5AC75B7B1D78882665
-EC78BC521706FC33E6C906A1D2AB172E470BB96CB6D406A7E8A7A2AA0E2B1E66
-446AD075B41C577E9856B2B014F5E83EA1D68229691F10C46BC330A816E29918
-8D0EA64B2A37530E8FCBCB6C7C6FB9C0B33AD0DD798E3BE5A70747068E9BA222
-FFA832B3BE80C00D37817B75E7119CBFA500DAD61C3D179E3FF00DA2B09FB22F
-295680D8283AE5C085EA6B691C5CB5DC95BD727CDD6DFD74BDFED3D5E5A311D1
-48A6DE06AD948AE2FD94D493F03956A82E482B364744D60DC18A4B8A9F743A83
-F06EC957E9F95E62ADBD8D239E10CA9E9C53BCF2EDB94E081EFC988BDC19AB68
-C76CF8D6484C1A6B83CAC3034F0D975AA532749BB48F7FBC7D6CC34016AB4B74
-E9B91C4485C1E256D926EF5B71C92195F94CBB558EC2D05DB7F1A8B0E2B1E90C
-FE067C789A2DD7AB774B3907DE144F2C40DF555B6810BFBCCC67C30CF10C40E9
-43792B02AF78827F756E3C5D65CE829AAA9A6F1A605D77E5DCFF9C2892D51A78
-988B18392132103A03C528B64119106DFEAD528393ABFD2D35FD23C02638C6B0
-1688F5C9990F6101B127486364FE2DD19B43DC4FB4B4D0289AFE8006D2163E81
-9586D53AD470F9FD17F47CD9A7E82043479796DD4BAEA9352FBE8D1F25A24E12
-085A8CC643C2482E631DFAEED23BAB33B55BCC88AB5FEB3CC33A1B02DB6E79A9
-CD36BD636302E78E93839287272C33AF6A8888C769D7964F3310410EF69E2D81
-35B36FB6E8367D42D7F9D42D92FF4442735A5A4FAFAA8949F26E256E0D108332
-94B320EA0B10BEC92908C5D349166F18856A5FEBEE1211A1CD526319C20C8BA7
-9BE4AE8915309E3E2C95F5857F748FAC86B996B100E9A455F6A9D6F8CD9508ED
-1AE4FC31E99E3156445BC771641082C8F004D0D4757D18696AC69497AC27A943
-B60BE1C899E441A92FDA7B2721EE7CA0D022EB724EB1EACF0D2355B3FB1E5BC9
-F45B4AC740AD44FA2CF3422A1A4AE07E7F631B8E52677F4DF36886802D6FA193
-0C4BF30E2D0719C7BF5505A8C50C34834200CB7027C40BF7E2CF1ACC3AABE16E
-CE4E3ACF2E8C3732B728349511B58EFB045E2461163F0A1B075C83377F1BB7C9
-7CABAC3E85D8F23D263D700C50121EEFFDB20EA41DFE330E4FED43037CD2AC75
-55DE3ADD2922A33FB4A40C36560D218A1518C333D76275A3EAEBD94617874AE5
-F4FBB40E421774AC7498ADD7E4EE9F01C79DC754EDE50417843B0F4897C58465
-BACB704112266BBDEF6091DC25732FAA30571098B8D372FA154430666C2BCB40
-83331983E5850DF97844CB5DFD4919A4FD13CEB5807554CCC6039FE674974801
-1E55D2C2143DAA3607739CA6C054C07DEB64B5107309EB3BB20997F9B96F67E3
-6699C0DF225AC7AC0122F2DA1900EC0F8DE5D663F0F5F9DC86685741E8C125C6
-BC19F278D90667DE8AADB7855A8963394230ACB8BA70655B086E45CB38233957
-E455E38F8A0D94E408A6270DC18AA2D7D65F1EB20C8C4334BB13A14D7C06BB56
-6A1D82E4C3513AE1C73D7C1698B37429479A2D0D353FA96722D78D9DB196EF2B
-A1A4E2963673EEC8A2272C482464A5D999114A8EDAB191AB4C9D47874B9680BD
-B3DB8E4EEDBE1D61DCEB8B52F7431244990FFEA26AE6C9E3AF10F3DA07CC81F6
-057A6FDCAA092F81C5207017067F7C5BDD9EC0913EF08379DA3F2AD209F9EC11
-A739CB14C1A8346C4AC60B65684440F89667BE535CB82A7A23E45DB2C73CB5D1
-A41EC7C31AFCCA361D624B1C44535AE7722B02A26D770E86A0966571F2CB5D61
-35E7AAE4079AC8AA043B368AF680518E73E1CE70C6265715BFFCE902855CACC7
-7D594E9A18E6800DF00921BA57FFD1F2F8B2B521BB93B503C74FCB38C3B68D8F
-4FB2466D64CA60047EDBFC282A7B1451E9FD3CC4A88BD51AA74BB9908CCC3C40
-AF80E47D2A664D1C8B29CA7B4A694BDB3F56A1A42C64BE29752FA4BA1BDF4002
-648D17D0B04CB0AD73D816CCE04A400F8D11B7EDFF372B104C0159EA94AB995C
-1A5E09600BF1208A69B7A53E85E82D7B7AA6B896A5F82B6CF08C6E9D561AB2A3
-ED32A23F64C70855670A9744D750CDCBAC87E118D1F962653C0449DC10AFA29E
-6B6FF146A3A06B94A91F06D7941424E8C264F5972E025250D6841745EF20EBD3
-185FC83B55CA90F8B1B260747D97748D0649FC04F1D69D954A1A997680AAA353
-7B69B63F8A0014AAD855C0B2E6AAFC033277FC9F0AFDF82DA5F43B997CDA6CA7
-E1714A28744DDB4FE8E67437E68E2235041B377C3DBE29404B863D53DF6BB2B4
-422C9C748D2443409F5D92B35F935906D0048CE4F9B2979CDC6B32801AF8B460
-75E2B423D7C4FFD6B544B03AB86958C82D59201F3A9D61DF5CEB28927C3019C8
-CD0D28A8EF2C457A9721182B64EE1D52A9BE3D36C7931436C62A2A0B9235501D
-EE86537319551E7D274A1AB12D3E38A4B5B0ADED590588018AA87B2DC81C5667
-21326C0BEF227229EF0158B66F3B048931D9DED03B3C16FBC3FB1425E8119666
-588E2D848360ACED5BBBE674396858F66E0FA7251C90AC60FB5636CF3DDAB79F
-737AB6F2BEB79D8BDC88041FAED46E60032C5073F9B0C15364E7B74A07B31E3F
-4D6B8C3CF481A9BE705B60DF551F779A5B8554FAE4B430AFF4C672A250DC2A02
-4EDC840495126F4A30F1E7FAFA381E69EACE3BAC8B999F9788B529320E128F80
-5BBD3EE188A2241EB728E30C59B5C057801E6EAC2ED77E819C090F012BFC019C
-F222EB8F6B2E019F5865B747BB3CCD9FB4B4708E912814983277D5159868C1AD
-F1AA092A0B4001C025729A6BF32AFAA911D7BE09A6E79CC9FF91AAB83D61772A
-FB8F62AF5CE7C2364FD7C5BDD469413136459493D2FC061BDFDD5604571F2E9C
-F81812BE4609D2E035B8B25EAF75110307E7C28ED135274F31DDC282D92D5FCA
-FD085F600869A654E56E03206260E9BEFD4406032536A25CD6DF613CDD94239E
-E3E3496A9860BD9DF8FFA7FE17225590139EDF5E31AF033B53D27172CB481F33
-37E40E25864EEF564FA783D4A3C0576EE60871031406F3C85C1366B1F7604D7E
-DB0FDD7E54E6720D933694E65E0F84B02994561B34D0051A3880C6B799B18CA6
-6EE702B7B19D995BDEF18FA9F85324008A9AFFF93B80BD9B5F65B369D73B33F4
-AF2EF66473C2FA5295EF07967CDCA7A932599160FC1C1F20452867F1BA283EA3
-5E760E709E1B643F99C3C417BC5CD39997C0C3563AA88BB626B83204CC37A590
-3F5D5A51DB8E309FD5C9C761BCCE06E806784A1D8D83C50DA19C2FE670AD5C84
-FA4D1FCB1410E7AFC5704178C564AA199A936D5EB94A8DCC79C4DA208EFFC801
-B0E61EE83375428F15E5BBA146BBFE354FFE98BE95AF2C4F875BBB77E9424910
-8A9E6144825B009F94F30C410E8BA1E09E51C5014F4D8873CFB9824169510024
-5719EBB755FDBC0196BB2163D2367B85B28F45E6C0A0EF63BA8D859BFE4E6931
-DCE4366457F2426AC8A9F496CF69A8EB1BA3F265961464AF3D1A63AC51E364C3
-B76F4ACF6D272F708C8532266765421D6FD82F41437E9BF02A433B0AFE7D971F
-4ACA90CE15482491BE8E80769A3FD0377EF245262017B08D6935E20267D7B068
-D7ADC39982A803903807B4CAA129CC364F717A8773CAAC45CDE42C6098DA53B2
-0ED85F24714DC971832471A6C59690873A8CC06191DE2234A3863B0D3F440A0A
-859748CCEFCA3997F4BC1A8C41A7AD2FB7CC71770AD7836397C512BFC2E4EAB5
-9BDAD292E195452A1ABF06165E8818AE8EC81EC70F26E721132798A343CD50C9
-817E5EFAE93C2C29342D4817F7579F43D09DF6F88A2DFAE1452B06B047B399CE
-49F62DF5DF63BB9E34AE224B7F0EA2BD3019B0D19D9575EFB02161389F1138D3
-9199FCAF9D8805C737807C80E5A6412CFC39FE8DB021BAAC77DB5F08F25FE6FD
-FDD8018BEB5F042895B520E6E66B0E013648BB0AB2938CB5841B6F61FA498844
-0AC7C8B7DAF6741613B0F6255D1A80356D574ADF05B8B4FE993950984F2C2E53
-6AF90BF44CDF09FC05912D83CFF9691D3406C71F3851C7008A1E76423A1DF83D
-AC70053E78A72F2EF045687DFC489FB50F3FE517DE979E6A062E60F1049C5171
-061049084E58A54124240A356E110D6751608D964E0BB766D76278A614123CE0
-3B79DB317C4FD72ECA8106B1B9E0FBB25B690E7E9D9AEC69448A3E00F23DE5BC
-6566BA0F2FED9C8DBF7D40E68CEAEEDEFABF69F6470054447C6FC2E3435480D1
-737DD4C5A31C7EF11D92EE74ACAC96970B3F1A8351F9159B06213A7D5F3C14FC
-E3193A4BB9967551F10934EC8DE67B7CC4938D22A11840090354508AE6317D3C
-6852B14D7E9E7C789409299DB3721E52C455104F6DA1D904E7B88491A32956E7
-BDE4DAB95FF0EFA8AF30464EF1BAD6D20787A693CE7D7299F4F3E8B1F7D5CE77
-3D5A88F6435CE49B1AC69762C00DA60F5E1BF5C738C8C157DC78AFFD456DEAA5
-B9028CE16566CE94F916A94DBF7AD3B610379EA23DA5DEC6CEAB8ED633BE821A
-3480394AF8E0C567DA1D4D5537B41C9923452969F558B9ECF5EC145796029972
-CCA4825E7936F64B1D981D8BFEE90E225E9A4C7DCFA8B1635814E685BA1DC13D
-A54818877604CD557847324A65492C2EFF34FE696B488361E0BEF760E8CC5736
-9FCFB4191E975B889FAE0E27729D0C9B381598558E1AC6A55974776119C06BAD
-7702853C4EB84A2C660168120B4B863A33A7040A1EABFE0752CD0810A5FA5FA3
-44993486CFED8C577B29B7B122ED2F80845B8A82ACC73245BB00D0E7A5297DE5
-8D0AA6D07DEDE3148AE16C593ADD5818B3AF38169E7389162E7A4871146FC7D5
-6621003C8356EA861461DB4DDD706EF305532946D0B36B36BCCCA3C65D124BF6
-84DDD60DDAC7E95BD7BCA3F12F40F63A0C2798BF04039E0FEE153D4BB228BCAF
-92533C67B9647C0F52380C6DCE39896EE21D22BBC170EB34FC2C4514615F4CA7
-A0DFF78D87F4F49A5051F7C8B4E127A3D835FB0F81F7B835F8C9D10483307ADC
-375B710EE1DB4A6A69D5AC2ABC214A33AAEB6A9A1A5A944F96102F77924351D1
-81EE1187B4BB5B5A25FBFB9ED9633E30164E6C01ABE0B89B16F1764AC5CF57BA
-8251FABA7D72EBFFD7D222052C3BDACBDBCE4140EBEB2AD7C73FFFD24DF56F54
-22EE37AD60BFCE4C9D970843D3FDE5E9C32EEFA4C1C86FA31C9C8B60D9D68456
-59D37190F5035A0486B8A20300B07D896EAC5DF16E8AAC2B2963C71F0FA0D407
-68E814C7B68AC110353B6CAEBF6A760D0C3AB28BA23D70BF027494540EF92CC2
-0F5802D9AAC3B26D98F96117674AB0DC5A756B5FE41373A9B70F6378A1405C90
-0AA968AB07FD47F8B6C9081B60A2B880EC04C3428E836FD44DC2D193D3712A60
-70F97BD4E67DDA55B523BB86848A6A47597C19BB7E95E93A4D0F5F340E4B7586
-1D98B2F4457E4E948277877480EE26702F1318C38AC8C8FB07754D4A1F6A0084
-8BEF6DEB1AC014D13D51D33383D549AF3A7CA64936C5784A13EF234E9AF39372
-F75D8461083A06DBFB2EF37B7CD2AA32C97894399E735118FAF8FA26EB7A18B1
-10E2FA1C7311A3A66352031D3F19C43767F7B27EA780B7E931F4E130B8119038
-D2EADC5C4F192CA1EC07D041EC289A0608A8AF6D771339D6D597738D7E3C99ED
-0A83BBDD3DBC5BE03BC33F1EA690E60C40A7BFC6A5A6640814D406CA530886F4
-F54E49E97D5CE8DC1CB7004CEC7D822285D7B87D3C08E54364E8BDFB36CE7FC1
-B181341C13999A749A1712F2B7D1EEFA07FB9A0FB0AD901337CD62EC3144804E
-D5A3A7817DA57AE3429EB187D56DEB3828A9FD1CA9D0F2B3AB0F912D7C40942D
-D54CEA40B324E2F3F6A012557E7A421C457DF92B5A0F2466FF3245C8FF25F81E
-45E6BF85789B70EF5BC79D6C8FA8B36803C9560C2DA04464B57AA18BC2EBBBA1
-9755FC3462E4FFA7EAD62AB638110707035680670B4D7765E52C1D79D963CF04
-8E9813D7D0325B0D15D72A02E171ED75681A7D63F72BF024540F1AC64B44D5A9
-ACD5FB3953B8FBA0D512B62380EC3ED6FA0B086F7BA6CA864BBCBE8A44543FAF
-6A639E3093A0C45D4F974CD1B95D9F1F4065E423D6BB107BD17C05FAB62BCB90
-CB4553F05CB418EFD386F29AD05BD659EDD17EB75E0DAACCB85CBA36AE98FE26
-392678396676C123210710528D05B3A2480DD2ACB254E87ED3F6429063337332
-3555B3A83A1258BA0872E573F4553DA670E734A7FDE7CCAAB2847EED6F8DF4EA
-11839987670A5CBF3843B48E0A434708842D5FA1BBE50B0C07A511E5F83EFB65
-BE64B1D2CB4368DB157324E4FBB02F3B29049CB94363482CAA517B6089F1EF1A
-EC4A1BF5C3D9310D8F775361C87D03822D9E67A63C5EDC0097DDC2E66278CF9E
-D48D1D323B3AFD7208971EF3FE7009110F330DADFA92C4D394974C036E22215C
-4B3E0AFB64C0386002D2624F42AB7A642556DFC4A231756CCEB0411B124CA5BC
-00F3EA0EF603
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 55387786 39139632 1000 600 600 (de-refcard.dvi)
-@start /Fa 197[20 58[{}1 66.4176 /CMMI8 rf /Fb 138[38
-24 29 30 1[36 36 40 58 18 33 1[22 36 33 22 33 1[33 1[36
-6[44 3[53 3[52 13[54 1[50 53 65[{}23 66.4176 /CMTI8 rf
-/Fc 242[61 13[{}1 49.8132 /CMSY6 rf /Fd 128[30 4[27 32
-1[43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19
-27 34 27 34 30 10[45 45 1[34 44 3[45 54 1[46 1[22 45
-47 39 41 1[43 42 45 9[30 30 30 1[30 30 30 30 1[18 21
-18 31[35 12[{}50 49.8132 /CMR6 rf /Fe 128[41 4[36 1[43
-59 43 45 32 32 34 1[45 41 45 68 23 43 1[23 45 41 25 37
-45 36 45 40 6[50 2[84 2[57 45 2[55 3[49 5[51 53 62 1[58
-61 18[23 27 32[45 47 11[{}39 66.4176 /CMBX8 rf /Ff 130[35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 2[35
-1[35 35 35 35 1[35 1[35 35 35 4[35 35 35 35 35 35 35
-35 35 35 1[35 1[35 4[35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 1[35 35 35 35 35 33[{}77 66.4176 /CMTT8 rf
-/Fg 128[57 4[51 2[83 60 64 45 45 47 1[64 57 64 95 32
-60 1[32 64 57 35 53 64 51 64 56 6[70 3[87 1[80 64 86
-1[78 2[109 69 90 1[43 90 90 72 75 88 83 81 87 19[38 19[59
-13[67 11[{}44 99.6264 /CMBX10 rf /Fh 128[35 3[35 31 37
-37 51 37 39 27 28 28 1[39 35 39 59 20 37 22 20 39 35
-22 31 39 31 39 35 4[35 1[43 1[53 72 53 53 51 39 52 55
-48 55 53 65 44 55 1[25 53 55 46 48 54 51 50 53 6[20 35
-6[35 35 2[20 24 20 2[27 27 5[35 8[35 12[39 41 11[{}65
-66.4176 /CMR8 rf /Fi 133[61 4[76 53 54 57 3[76 115 1[73
-4[42 63 1[61 1[67 11[106 2[103 3[108 6[108 1[90 69[{}17
-119.552 /CMBX10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- @landscape end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin @landscape 1 0 bop -242 -421 a Fi(Referenzk)-8
-b(arte)46 b(zu)g(GNU)f(Emacs)422 -313 y Fh(\(f)473 -310
-y(\177)471 -313 y(ur)23 b(V)-6 b(ersion)23 b(22\))-294
--135 y Fg(Emacs)39 b(starten)-294 16 y Fh(Um)23 b(GNU)h(Emacs)g(22)g
-(zu)g(starten,)g(geb)r(en)h(Sie)f Ff(emacs)h Fh(ein.)-294
-190 y Fg(Emacs)39 b(v)m(erlassen)-294 342 y Fh(Emacs)24
-b(un)n(terbrec)n(hen)h(\(un)n(ter)g(X:)e(minimieren\))109
-b Ff(C-z)-294 421 y Fh(Emacs)24 b(b)r(eenden)964 b Ff(C-x)36
-b(C-c)-294 587 y Fg(Dateien)-294 738 y Fh(Datei)-103
-741 y Fe(\177)-103 738 y(o\013nen)1034 b Ff(C-x)36 b(C-f)-294
-818 y Fh(Datei)24 b Fe(sp)r(eic)n(hern)915 b Ff(C-x)36
-b(C-s)-294 897 y Fe(alle)23 b Fh(Dateien)h(sp)r(eic)n(hern)747
-b Ff(C-x)36 b(s)-294 977 y Fh(den)24 b(Inhalt)h(einer)f(anderen)g
-(Datei)g Fe(einf)811 980 y(\177)809 977 y(ugen)169 b
-Ff(C-x)36 b(i)-294 1057 y Fh(diese)24 b(Datei)g(durc)n(h)g(eine)g
-(andere)h(ersetzen)259 b Ff(C-x)36 b(C-v)-294 1137 y
-Fh(Pu\013er)24 b(in)f(neuer)h(Datei)g(sp)r(eic)n(hern)478
-b Ff(C-x)36 b(C-w)-294 1216 y Fh(Nur-Lesen-Mo)r(dus)23
-b(des)h(Pu\013ers)g(w)n(ec)n(hseln)241 b Ff(C-x)36 b(C-q)-294
-1393 y Fg(Hilfe)-294 1544 y Fh(Das)20 b(Hilfesystem)f(ist)h(einfac)n(h)
-h(zu)f(b)r(edienen.)h(Dr)1035 1547 y(\177)1033 1544 y(uc)n(k)n(en)g
-(Sie)f Ff(C-h)h Fh(\(o)r(der)-294 1623 y Ff(F1)p Fh(\).)h(Neulinge)g
-(dr)204 1626 y(\177)202 1623 y(uc)n(k)n(en)g Ff(C-h)36
-b(t)p Fh(,)21 b(um)g(eine)h Fe(Einf)1024 1626 y(\177)1022
-1623 y(uhrung)g Fh(zu)f(starten.)-294 1732 y(Hilfefenster)i(en)n
-(tfernen)780 b Ff(C-x)36 b(1)-294 1811 y Fh(Hilfefenster)23
-b(scrollen)833 b Ff(C-M-v)-294 1920 y Fh(Befehle)24 b(zeigen,)g(die)g
-(Zeic)n(henk)n(ette)j(en)n(thalten)151 b Ff(C-h)36 b(a)-294
-1999 y Fh(T)-6 b(astenk)n(om)n(bination)26 b(b)r(esc)n(hreib)r(en)470
-b Ff(C-h)36 b(k)-294 2079 y Fh(eine)24 b(F)-6 b(unktion)25
-b(b)r(esc)n(hreib)r(en)636 b Ff(C-h)36 b(f)-294 2159
-y Fh(mo)r(dussp)r(ezi\014sc)n(he)25 b(Informationen)462
-b Ff(C-h)36 b(m)-294 2333 y Fg(F)-10 b(ehlerb)s(ehandlung)-294
-2485 y Fe(Abbrec)n(hen)25 b Fh(eines)f(V)-6 b(organgs)577
-b Ff(C-g)-294 2564 y Fe(Wiederherstellung)23 b Fh(v)n(on)h(Dateien)203
-b Ff(M-x)36 b(recover-session)-285 2630 y Fh(\177)-294
-2644 y(Anderungen)25 b Fe(r)140 2647 y(\177)138 2644
-y(uc)n(kg)300 2647 y(\177)301 2644 y(angig)d Fh(mac)n(hen)216
-b Ff(C-x)37 b(u,)e(C-_)i Fh(o)r(der)e Ff(C-/)-294 2724
-y Fh(Pu\013er)24 b(in)f(Ursprungszustand)i(bringen)195
-b Ff(M-x)36 b(revert-buffer)-294 2803 y Fh(Bildsc)n(hirmanzeige)24
-b(in)f(Ordn)n(ung)h(bringen)253 b Ff(C-l)-294 2978 y
-Fg(Inkremen)m(telle)36 b(Suc)m(he)-294 3129 y Fh(Suc)n(he)25
-b(v)n(orw)57 3132 y(\177)57 3129 y(arts)971 b Ff(C-s)-294
-3209 y Fh(Suc)n(he)25 b(r)-62 3212 y(\177)-64 3209 y(uc)n(kw)92
-3212 y(\177)92 3209 y(arts)936 b Ff(C-r)-294 3289 y Fh(Suc)n(he)25
-b(mit)e(regul)190 3292 y(\177)190 3289 y(aren)h(Ausdr)536
-3292 y(\177)534 3289 y(uc)n(k)n(en)439 b Ff(C-M-s)-294
-3368 y Fh(R)-240 3371 y(\177)-242 3368 y(uc)n(kw)-86
-3371 y(\177)-86 3368 y(artssuc)n(he)25 b(mit)f(regul)506
-3371 y(\177)506 3368 y(aren)g(Ausdr)852 3371 y(\177)850
-3368 y(uc)n(k)n(en)123 b Ff(C-M-r)-294 3477 y Fh(fr)-242
-3480 y(\177)-244 3477 y(uheren)23 b(Suc)n(hausdruc)n(k)j(ausw)585
-3480 y(\177)585 3477 y(ahlen)397 b Ff(M-p)-294 3556 y
-Fh(sp)-227 3559 y(\177)-227 3556 y(ateren)25 b(Suc)n(hausdruc)n(k)g
-(ausw)587 3559 y(\177)587 3556 y(ahlen)395 b Ff(M-n)-294
-3636 y Fh(inkremen)n(telle)24 b(Suc)n(he)h(b)r(eenden)552
-b Ff(RET)-294 3716 y Fh(ein)24 b(Suc)n(hzeic)n(hen)i(zur)312
-3719 y(\177)310 3716 y(uc)n(kgehen)556 b Ff(DEL)-294
-3795 y Fh(Suc)n(he)25 b(abbrec)n(hen)928 b Ff(C-g)-294
-3904 y Fh(Wiederholtes)27 b(Dr)218 3907 y(\177)216 3904
-y(uc)n(k)n(en)f(v)n(on)g Ff(C-s)g Fh(o)r(der)g Ff(C-r)g
-Fh(suc)n(h)n(t)g(w)n(eitere)g(T)-6 b(re\013er.)-294 3983
-y(W)g(enn)18 b(Emacs)f(suc)n(h)n(t,)h(un)n(terbric)n(h)n(t)g
-Ff(C-g)g Fh(n)n(ur)e(die)h(jew)n(eils)g(letzte)h(Suc)n(he.)-341
-4254 y Fd(c)-357 4256 y Fc(\015)i Fd(2007)j(F)-5 b(ree)21
-b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)g(Bedingungen)h(auf)g
-(der)f(R)1331 4259 y(\177)1329 4256 y(uc)n(kseite.)h(v2.3)1902
--421 y Fg(Cursor-Bew)m(egung)1902 -270 y Fe(T)-7 b(extteile)2244
--267 y(\177)2242 -270 y(ub)r(erspringen)540 b(r)3283
--267 y(\177)3281 -270 y(uc)n(kw.)70 b(v)n(orw.)1902 -190
-y Fh(Zeic)n(hen)1113 b Ff(C-b)203 b(C-f)1902 -110 y Fh(W)-6
-b(ort)1189 b Ff(M-b)203 b(M-f)1902 -31 y Fh(Zeile)1200
-b Ff(C-p)203 b(C-n)1902 49 y Fh(zum)24 b(Zeilenanfang)h(\(o)r(der)f
-(-ende\))g(springen)118 b Ff(C-a)203 b(C-e)1902 129 y
-Fh(Satz)1213 b Ff(M-a)203 b(M-e)1902 208 y Fh(P)n(aragraph)1025
-b Ff(M-{)203 b(M-})1902 288 y Fh(Seite)1197 b Ff(C-x)37
-b([)131 b(C-x)36 b(])1902 368 y Fh(Lisp-s-expression)822
-b Ff(C-M-b)133 b(C-M-f)1902 448 y Fh(F)-6 b(unktion)1069
-b Ff(C-M-a)133 b(C-M-e)1902 527 y Fh(zum)24 b(Pu\013eranfang)g(\(o)r
-(der)h(-ende\))f(springen)115 b Ff(M-<)203 b(M->)1902
-636 y Fh(eine)24 b(Bildsc)n(hirmseite)f(herun)n(ter)h(scrollen)287
-b Ff(C-v)1902 715 y Fh(eine)24 b(Bildsc)n(hirmseite)f(ho)r(c)n(h)h
-(scrollen)403 b Ff(M-v)1902 795 y Fh(nac)n(h)25 b(links)e(scrollen)874
-b Ff(C-x)36 b(<)1902 875 y Fh(nac)n(h)25 b(rec)n(h)n(ts)f(scrollen)837
-b Ff(C-x)36 b(>)1902 954 y Fh(Cursor-Zeile)22 b(in)i(die)f(Bildsc)n
-(hirmmitte)g(scrollen)93 b Ff(C-u)36 b(C-l)1902 1120
-y Fg(L)1971 1125 y(\177)1971 1120 y(osc)m(hen)h(und)g(Aussc)m(hneiden)
-1902 1271 y Fe(T)-7 b(extteile)26 b(aussc)n(hneiden)465
-b(r)3203 1274 y(\177)3201 1271 y(uc)n(kw.)150 b(v)n(orw.)1902
-1351 y Fh(Zeic)n(hen)25 b(\(l)2206 1354 y(\177)2206 1351
-y(osc)n(hen,)f(nic)n(h)n(t)h(aussc)n(hneiden\))115 b
-Ff(DEL)283 b(C-d)1902 1430 y Fh(W)-6 b(ort)1109 b Ff(M-DEL)213
-b(M-d)1902 1510 y Fh(Zeile)24 b(\(bis)f(zum)h(Ende\))622
-b Ff(M-0)36 b(C-k)142 b(C-k)1902 1590 y Fh(Satz)1133
-b Ff(C-x)36 b(DEL)142 b(M-k)1902 1670 y Fh(Lisp-s-expression)742
-b Ff(M--)36 b(C-M-k)72 b(C-M-k)1902 1778 y Fe(Bereic)n(h)23
-b Fh(aussc)n(hneiden)752 b Ff(C-w)1902 1858 y Fh(Bereic)n(h)24
-b(in)f(die)h(Ablage)g(k)n(opieren)497 b Ff(M-w)1902 1937
-y Fh(bis)23 b(zum)h Fb(Zeichen)f Fh(aussc)n(hneiden)516
-b Ff(M-z)36 b Fb(Zeichen)1902 2017 y Fh(zuletzt)25 b(ausgesc)n
-(hnittenen)i(T)-6 b(ext)25 b(einf)2956 2020 y(\177)2954
-2017 y(ugen)244 b Ff(C-y)1902 2097 y Fh(v)n(orher)24
-b(ausgesc)n(hnittenen)i(T)-6 b(ext)25 b(einf)2944 2100
-y(\177)2942 2097 y(ugen)256 b Ff(M-y)1902 2273 y Fg(Markieren)1902
-2424 y Fh(Mark)n(e)24 b(setzen)1035 b Ff(C-@)36 b Fh(o)r(der)24
-b Ff(C-SPC)1902 2504 y Fh(Cursor)f(und)h(Mark)n(e)g(austausc)n(hen)480
-b Ff(C-x)36 b(C-x)1902 2584 y Fh(Mark)n(e)24 b Fb(A)n(r)l(gument)30
-b Fe(W)-7 b(orte)23 b Fh(en)n(tfern)n(t)h(setzen)194
-b Ff(M-@)1902 2663 y Fe(P)n(aragraph)22 b Fh(markieren)738
-b Ff(M-h)1902 2743 y Fe(Seite)24 b Fh(markieren)934 b
-Ff(C-x)36 b(C-p)1902 2823 y Fe(Lisp-s-expression)24 b
-Fh(markieren)504 b Ff(C-M-@)1902 2902 y Fe(F)-7 b(unktion)23
-b Fh(markieren)791 b Ff(C-M-h)1902 2982 y Fh(den)24 b(ganzen)i
-Fe(Pu\013er)e Fh(markieren)521 b Ff(C-x)36 b(h)1902 3157
-y Fg(In)m(teraktiv)m(es)h(Ersetzen)1902 3308 y Fh(Zeic)n(henk)n(ette)27
-b(in)n(teraktiv)d(ersetzen)461 b Ff(M-\045)1902 3388
-y Fh(mit)23 b(regul)2184 3391 y(\177)2184 3388 y(aren)h(Ausdr)2530
-3391 y(\177)2528 3388 y(uc)n(k)n(en)274 b Ff(M-x)36 b
-(query-replace-regexp)1902 3496 y Fh(M)1967 3499 y(\177)1967
-3496 y(oglic)n(he)24 b(An)n(t)n(w)n(orten)h(in)e(diesem)h(Mo)r(dus:)
-1902 3604 y(dies)g Fe(ersetzen)g Fh(und)g(zum)g(n)2691
-3607 y(\177)2691 3604 y(ac)n(hsten)h(gehen)223 b Ff(SPC)1902
-3684 y Fh(dies)24 b(ersetzen)g(und)h(nic)n(h)n(t)f(w)n(eitergehen)349
-b Ff(,)1902 3764 y Fh(dies)2046 3767 y Fe(\177)2044 3764
-y(ub)r(erspringen)p Fh(,)23 b(zum)h(n)2744 3767 y(\177)2744
-3764 y(ac)n(hsten)h(gehen)170 b Ff(DEL)1902 3843 y Fh(alle)23
-b(v)n(erbleib)r(enden)i(T)-6 b(re\013er)24 b(ersetzen)388
-b Ff(!)1902 3923 y Fh(zum)24 b(v)n(orherigen)g(T)-6 b(re\013er)24
-b Fe(zur)2745 3926 y(\177)2743 3923 y(uc)n(kgehen)272
-b Ff(^)1902 4003 y Fh(in)n(teraktiv)n(es)25 b(Ersetzen)f
-Fe(b)r(eenden)479 b Ff(RET)1902 4082 y Fh(rekursiv)n(es)23
-b(Editieren)g(starten)i(\()p Ff(C-M-c)g Fh(b)r(eendet\))73
-b Ff(C-r)4169 -421 y Fg(Mehrere)36 b(F)-10 b(enster)4169
--299 y Fh(W)k(enn)27 b(zw)n(ei)f(Befehle)h(angezeigt)h(w)n(erden,)f
-(ist)f(der)g(zw)n(eite)h(ein)5912 -296 y(\177)5912 -299
-y(ahnli-)4169 -219 y(c)n(her)d(f)4344 -216 y(\177)4342
--219 y(ur)e(einen)j(Rahmen)f(statt)h(eines)f(F)-6 b(ensters.)4169
--118 y(alle)23 b(anderen)i(F)-6 b(enster)24 b(sc)n(hlie\031en)298
-b Ff(C-x)36 b(1)212 b(C-x)36 b(5)g(1)4169 -39 y Fh(F)-6
-b(enster)24 b(v)n(ertik)l(al)g(teilen)545 b Ff(C-x)36
-b(2)212 b(C-x)36 b(5)g(2)4169 41 y Fh(dieses)23 b(F)-6
-b(enster)25 b(sc)n(hlie\031en)493 b Ff(C-x)36 b(0)212
-b(C-x)36 b(5)g(0)4169 142 y Fh(F)-6 b(enster)24 b(horizon)n(tal)g
-(teilen)693 b Ff(C-x)36 b(3)4169 243 y Fh(das)23 b(andere)i(F)-6
-b(enster)24 b(scrollen)607 b Ff(C-M-v)4169 344 y Fh(in)23
-b(anderes)h(F)-6 b(enster)25 b(w)n(ec)n(hseln)362 b Ff(C-x)36
-b(o)212 b(C-x)36 b(5)g(o)4169 424 y Fh(Pu\013er)23 b(in)h(and.)f(F)-6
-b(enster)25 b(ausw)5020 427 y(\177)5020 424 y(ahlen)199
-b Ff(C-x)36 b(4)g(b)141 b(C-x)36 b(5)g(b)4169 504 y Fh(Pu\013er)23
-b(in)h(anderem)g(F)-6 b(enster)24 b(anzeigen)126 b Ff(C-x)36
-b(4)g(C-o)71 b(C-x)36 b(5)g(C-o)4169 583 y Fh(Datei)24
-b(in)f(anderem)h(F)-6 b(enster)4977 586 y(\177)4977 583
-y(o\013nen)221 b Ff(C-x)36 b(4)g(f)141 b(C-x)36 b(5)g(f)4169
-663 y Fh(Datei)24 b(in)f(anderem)h(F)-6 b(enster)25 b(anzeigen)145
-b Ff(C-x)36 b(4)g(r)141 b(C-x)36 b(5)g(r)4169 743 y Fh(Dired)23
-b(in)g(anderem)h(F)-6 b(enster)25 b(starten)187 b Ff(C-x)36
-b(4)g(d)141 b(C-x)36 b(5)g(d)4169 822 y Fh(T)-6 b(ag)24
-b(in)f(anderem)h(F)-6 b(enster)25 b(\014nden)271 b Ff(C-x)36
-b(4)g(.)141 b(C-x)36 b(5)g(.)4169 923 y Fh(F)-6 b(enster)24
-b(v)n(ergr)4574 926 y(\177)4574 923 y(o\031ern)867 b
-Ff(C-x)36 b(^)4169 1003 y Fh(F)-6 b(enster)24 b(v)n(erengen)923
-b Ff(C-x)36 b({)4169 1083 y Fh(F)-6 b(enster)24 b(v)n(erbreitern)855
-b Ff(C-x)36 b(})4169 1204 y Fg(F)-10 b(ormatierung)4169
-1326 y Fe(Zeile)23 b Fh(\(mo)r(dusabh)4704 1329 y(\177)4704
-1326 y(angig\))j(einr)5041 1329 y(\177)5039 1326 y(uc)n(k)n(en)397
-b Ff(TAB)4169 1406 y Fe(Bereic)n(h)23 b Fh(\(mo)r(dusabh)4802
-1409 y(\177)4802 1406 y(angig\))j(einr)5139 1409 y(\177)5137
-1406 y(uc)n(k)n(en)299 b Ff(C-M-\\)4169 1486 y Fe(Lisp-s-expression)23
-b Fh(\(mo)r(dusabh.\))i(einr)5330 1489 y(\177)5328 1486
-y(uc)n(k)n(en)108 b Ff(C-M-q)4169 1566 y Fh(Bereic)n(h)23
-b Fb(A)n(r)l(gument)31 b Fh(Spalten)24 b(einr)5128 1569
-y(\177)5126 1566 y(uc)n(k)n(en)310 b Ff(C-x)36 b(TAB)4169
-1667 y Fh(Zeilen)n(um)n(bruc)n(h)24 b(nac)n(h)h(Cursor)d(einf)5157
-1670 y(\177)5155 1667 y(ugen)310 b Ff(C-o)4169 1746 y
-Fh(Zeilenrest)24 b(v)n(ertik)l(al)f(nac)n(h)i(un)n(ten)g(v)n(ersc)n
-(hieb)r(en)149 b Ff(C-M-o)4169 1826 y Fh(Leerzeilen)24
-b(um)f(Cursor-P)n(osition)g(l)5146 1829 y(\177)5146 1826
-y(osc)n(hen)262 b Ff(C-x)36 b(C-o)4169 1906 y Fh(Zeile)23
-b(mit)h(v)n(origer)f(v)n(erbinden)h(\(Arg.)g(n)5253 1909
-y(\177)5253 1906 y(ac)n(hste\))140 b Ff(M-^)4169 1985
-y Fh(alle)23 b(Leerzeic)n(hen)i(um)f(Cursor-P)n(osition)e(l)5324
-1988 y(\177)5324 1985 y(osc)n(hen)84 b Ff(M-\\)4169 2065
-y Fh(genau)24 b(ein)g(Leerzeic)n(hen)h(an)f(Cursor-P)n(osition)163
-b Ff(M-SPC)4169 2166 y Fh(P)n(aragraph)24 b(au\013)4630
-2169 y(\177)4628 2166 y(ullen)832 b Ff(M-q)4169 2246
-y Fh(Spalte)24 b(f)4408 2249 y(\177)4406 2246 y(ur)f(Um)n(bruc)n(h)h
-(setzen)618 b Ff(C-x)36 b(f)4169 2326 y Fh(Pr)4245 2329
-y(\177)4245 2326 y(a\014x)23 b(f)4403 2329 y(\177)4401
-2326 y(ur)g(jede)h(Zeile)g(setzen)615 b Ff(C-x)36 b(.)4169
-2427 y Fh(F)-6 b(ace)24 b(setzen)1092 b Ff(M-o)4169 2548
-y Fg(Gro\031-)39 b(und)e(Kleinsc)m(hreibung)4169 2670
-y Fh(W)-6 b(ort)24 b(in)f(Gro\031buc)n(hstab)r(en)678
-b Ff(M-u)4169 2750 y Fh(W)-6 b(ort)24 b(in)f(Klein)n(buc)n(hstab)r(en)
-668 b Ff(M-l)4169 2830 y Fh(W)-6 b(ort)24 b(mit)f(gro\031em)h
-(Anfangsbuc)n(hstab)r(en)286 b Ff(M-c)4169 2931 y Fh(Bereic)n(h)23
-b(in)h(Gro\031buc)n(hstab)r(en)606 b Ff(C-x)36 b(C-u)4169
-3010 y Fh(Bereic)n(h)23 b(in)h(Klein)n(buc)n(hstab)r(en)596
-b Ff(C-x)36 b(C-l)4169 3132 y Fg(Der)h(Minipu\013er)4169
-3254 y Fh(Die)23 b(folgenden)i(T)-6 b(astenk)n(om)n(binationen)26
-b(gelten)f(im)e(Minipu\013er:)4169 3355 y(so)g(w)n(eit)h(wie)g(m)4591
-3358 y(\177)4591 3355 y(oglic)n(h)f(erg)4886 3358 y(\177)4886
-3355 y(anzen)548 b Ff(TAB)4169 3435 y Fh(ein)23 b(W)-6
-b(ort)25 b(erg)4557 3438 y(\177)4557 3435 y(anzen)877
-b Ff(SPC)4169 3514 y Fh(erg)4263 3517 y(\177)4263 3514
-y(anzen)25 b(und)f(ausf)4730 3517 y(\177)4728 3514 y(uhren)705
-b Ff(RET)4169 3594 y Fh(m)4228 3597 y(\177)4228 3594
-y(oglic)n(he)24 b(Erg)4572 3597 y(\177)4572 3594 y(anzungen)h(zeigen)
-537 b Ff(?)4169 3674 y Fh(letzte)25 b(Eingab)r(e)f(zur)4734
-3677 y(\177)4732 3674 y(uc)n(kholen)608 b Ff(M-p)4169
-3754 y Fh(sp)4236 3757 y(\177)4236 3754 y(atere)24 b(Eingab)r(e)h(zur)
-4786 3757 y(\177)4784 3754 y(uc)n(kholen)556 b Ff(M-n)4169
-3833 y Fh(reg.)23 b(Ausd.)g(r)4538 3836 y(\177)4536 3833
-y(uc)n(kw)4692 3836 y(\177)4692 3833 y(arts)h(in)f(History)h(suc)n(hen)
-236 b Ff(M-r)4169 3913 y Fh(reg.)23 b(Ausd.)g(v)n(orw)4657
-3916 y(\177)4657 3913 y(arts)h(in)f(History)g(suc)n(hen)272
-b Ff(M-s)4169 3993 y Fh(Befehl)23 b(abbrec)n(hen)914
-b Ff(C-g)4169 4094 y Fh(Dr)4253 4097 y(\177)4251 4094
-y(uc)n(k)n(en)21 b(Sie)f Ff(C-x)36 b(ESC)g(ESC)p Fh(,)21
-b(um)f(den)h(letzten)h(Befehl)e(zu)h(b)r(earb)r(eiten)4169
-4173 y(und)h(zu)g(wiederholen,)g(der)g(im)f(Minipu\013er)g(ausgef)5561
-4176 y(\177)5559 4173 y(uhrt)i(wurde.)e(Dr)6028 4176
-y(\177)6026 4173 y(u-)4169 4253 y(c)n(k)n(en)j(Sie)g
-Ff(F10)p Fh(,)g(um)g(die)f(Men)4962 4256 y(\177)4960
-4253 y(uzeile)h(im)f(Minipu\013er)g(zu)i(aktivieren.)p
-eop end
-%%Page: 2 2
-TeXDict begin @landscape 2 1 bop -242 -421 a Fi(Referenzk)-8
-b(arte)46 b(zu)g(GNU)f(Emacs)-294 -227 y Fg(Pu\013er)-294
--76 y Fh(anderen)25 b(Pu\013er)e(ausw)336 -73 y(\177)336
--76 y(ahlen)646 b Ff(C-x)36 b(b)-294 4 y Fh(Liste)24
-b(aller)f(Pu\013er)g(anzeigen)638 b Ff(C-x)36 b(C-b)-294
-84 y Fh(einen)24 b(Pu\013er)g(sc)n(hlie\031en)773 b Ff(C-x)36
-b(k)-294 249 y Fg(V)-10 b(ertausc)m(hen)-294 400 y Fe(Zeic)n(hen)24
-b Fh(v)n(ertausc)n(hen)784 b Ff(C-t)-294 480 y Fe(W)-7
-b(orte)23 b Fh(v)n(ertausc)n(hen)835 b Ff(M-t)-294 560
-y Fe(Zeilen)23 b Fh(v)n(ertausc)n(hen)841 b Ff(C-x)36
-b(C-t)-294 639 y Fe(Lisp-s-expressions)24 b Fh(v)n(ertausc)n(hen)419
-b Ff(C-M-t)-294 814 y Fg(Rec)m(h)m(tsc)m(hreibpr)466
-819 y(\177)463 814 y(ufung)-294 965 y Fh(aktuelles)24
-b(W)-6 b(ort)181 968 y(\177)179 965 y(ub)r(erpr)387 968
-y(\177)385 965 y(ufen)630 b Ff(M-$)-294 1045 y Fh(alle)23
-b(W)-93 1048 y(\177)-93 1045 y(orter)h(im)f(Bereic)n(h)436
-1048 y(\177)434 1045 y(ub)r(erpr)642 1048 y(\177)640
-1045 y(ufen)234 b Ff(M-x)36 b(ispell-region)-294 1125
-y Fh(gesam)n(ten)25 b(Pu\013er)227 1128 y(\177)225 1125
-y(ub)r(erpr)433 1128 y(\177)431 1125 y(ufen)443 b Ff(M-x)36
-b(ispell-buffer)-294 1300 y Fg(T)-10 b(ags)-294 1451
-y Fh(T)k(ag)24 b(\014nden)h(\(De\014nition\))731 b Ff(M-.)-294
-1531 y Fh(n)-255 1534 y(\177)-255 1531 y(ac)n(hstes)25
-b(V)-6 b(ork)n(ommen)24 b(v)n(on)g(T)-6 b(ag)25 b(\014nden)307
-b Ff(C-u)36 b(M-.)-294 1611 y Fh(neue)25 b(T)-6 b(agsdatei)25
-b(angeb)r(en)478 b Ff(M-x)36 b(visit-tags-table)-294
-1719 y Fh(regul)-141 1722 y(\177)-141 1719 y(aren)24
-b(Ausdruc)n(k)g(in)f(Dateien)i(suc)n(hen)124 b Ff(M-x)36
-b(tags-search)-294 1799 y Fh(in)n(terakt.)24 b(Ersetzen)h(in)e(allen)h
-(Dateien)82 b Ff(M-x)36 b(tags-query-replace)-294 1878
-y Fh(letztes)25 b(Suc)n(hen)g(o)r(der)f(Ersetzen)g(fortsetzen)234
-b Ff(M-,)-294 2044 y Fg(Shells)-294 2195 y Fh(Shellb)r(efehl)24
-b(ausf)189 2198 y(\177)187 2195 y(uhren)783 b Ff(M-!)-294
-2275 y Fh(Shellb)r(efehl)24 b(f)87 2278 y(\177)85 2275
-y(ur)f(Bereic)n(h)g(ausf)552 2278 y(\177)550 2275 y(uhren)420
-b Ff(M-|)-294 2355 y Fh(Bereic)n(h)24 b(durc)n(h)g(Shellb)r(efehl)g
-(\014ltern)449 b Ff(C-u)36 b(M-|)-294 2434 y Fh(eine)24
-b(Shell)g(im)e(F)-6 b(enster)25 b Ff(*shell*)g Fh(starten)146
-b Ff(M-x)36 b(shell)-294 2600 y Fg(Rec)m(h)m(tec)m(k)m(e)-294
-2751 y Fh(Rec)n(h)n(tec)n(k)26 b(in)d(Register)h(k)n(opieren)525
-b Ff(C-x)36 b(r)g(r)-294 2831 y Fh(Rec)n(h)n(tec)n(k)26
-b(aussc)n(hneiden)744 b Ff(C-x)36 b(r)g(k)-294 2910 y
-Fh(Rec)n(h)n(tec)n(k)26 b(einf)119 2913 y(\177)117 2910
-y(ugen)885 b Ff(C-x)36 b(r)g(y)-294 2990 y Fh(Rec)n(h)n(tec)n(k)5
-2993 y(\177)5 2990 y(o\013nen,)24 b(T)-6 b(ext)25 b(nac)n(h)g(rec)n(h)n
-(ts)400 b Ff(C-x)36 b(r)g(o)-294 3070 y Fh(Rec)n(h)n(tec)n(k)26
-b(mit)d(Leerzeic)n(hen)516 3073 y(\177)514 3070 y(ub)r(ersc)n(hreib)r
-(en)207 b Ff(C-x)36 b(r)g(c)-294 3149 y Fh(Pr)-218 3152
-y(\177)-218 3149 y(a\014x)24 b(v)n(or)f(jede)h(Zeile)g(setzen)605
-b Ff(C-x)36 b(r)g(t)-294 3324 y Fg(Abk)-80 3329 y(\177)-83
-3324 y(urzungen)-294 3475 y Fh(globale)24 b(Abk)76 3478
-y(\177)74 3475 y(urzung)h(hinzuf)502 3478 y(\177)500
-3475 y(ugen)502 b Ff(C-x)36 b(a)g(g)-294 3555 y Fh(mo)r(dusabh)21
-3558 y(\177)21 3555 y(angige)26 b(Abk)373 3558 y(\177)371
-3555 y(urzung)e(hinzuf)798 3558 y(\177)796 3555 y(ugen)206
-b Ff(C-x)36 b(a)g(l)-294 3635 y Fh(globalen)24 b(Ersetzungstext)i(f)490
-3638 y(\177)488 3635 y(ur)d(Abk.)h(de\014nieren)98 b
-Ff(C-x)36 b(a)g(i)f(g)-294 3714 y Fh(mo)r(dusabh.)24
-b(Ersetzungstext)i(f)571 3717 y(\177)569 3714 y(ur)d(Abk.)g(def.)203
-b Ff(C-x)36 b(a)g(i)f(l)-294 3794 y Fh(Abk)-163 3797
-y(\177)-165 3794 y(urzung)25 b(explizit)f(aussc)n(hreib)r(en)438
-b Ff(C-x)36 b(a)g(e)-294 3902 y Fh(letztes)25 b(W)-6
-b(ort)24 b(dynamisc)n(h)h(aussc)n(hreib)r(en)302 b Ff(M-/)1902
--421 y Fg(Regul)2193 -416 y(\177)2194 -421 y(are)37 b(Ausdr)2697
--416 y(\177)2694 -421 y(uc)m(k)m(e)1902 -270 y Fh(jedes)24
-b(einzelne)g(Zeic)n(hen)h(au\031er)f(Zeilen)n(um)n(bruc)n(h)98
-b Ff(.)36 b Fh(\(Punkt\))1902 -190 y(n)n(ull)23 b(o)r(der)h(mehr)f
-(Wiederholungen)464 b Ff(*)1902 -110 y Fh(eine)24 b(o)r(der)g(mehr)f
-(Wiederholungen)458 b Ff(+)1902 -31 y Fh(n)n(ull)23 b(o)r(der)h(eine)g
-(Wiederholung)569 b Ff(?)1902 49 y Fh(Sp)r(ezialzeic)n(hen)26
-b Fb(c)g Fh(maskieren)610 b Ff(\\)p Fb(c)1902 129 y Fh(Alternativ)n(e)
-24 b(\()2299 167 y(")2332 129 y(o)r(der)-5 b(\\)5 b(\))813
-b Ff(\\|)1902 208 y Fh(Grupp)r(e)1207 b Ff(\\\()36 b
-Fa(:)11 b(:)h(:)34 b Ff(\\\))1902 288 y Fh(gleic)n(her)24
-b(T)-6 b(ext)25 b(wie)e Fb(n)5 b Fh(te)25 b(Grupp)r(e)532
-b Ff(\\)p Fb(n)1902 368 y Fh(Anfang)24 b(o)r(der)g(Ende)g(eines)g(W)-6
-b(ortes)465 b Ff(\\b)1902 448 y Fh(w)n(eder)24 b(Anfang)g(no)r(c)n(h)g
-(Ende)h(eines)f(W)-6 b(ortes)253 b Ff(\\B)1902 556 y
-Fe(Einheit)481 b(passt)27 b(am)f(Anf.)94 b(passt)26 b(am)h(Ende)1902
-636 y Fh(Zeile)594 b Ff(^)555 b($)1902 715 y Fh(W)-6
-b(ort)583 b Ff(\\<)520 b(\\>)1902 795 y Fh(Pu\013er)552
-b Ff(\\`)520 b(\\')1902 875 y Fe(Zeic)n(henklasse)261
-b(passt)27 b(auf)g(diese)71 b(passt)26 b(auf)h(and.)1902
-954 y Fh(Explizite)d(Menge)241 b Ff([)36 b Fa(:)11 b(:)g(:)35
-b Ff(])367 b([^)35 b Fa(:)12 b(:)f(:)35 b Ff(])1902 1034
-y Fh(W)-6 b(ortsyn)n(tax-Zeic)n(hen)126 b Ff(\\w)520
-b(\\W)1902 1114 y Fh(Zeic)n(hen)25 b(mit)e(Syn)n(tax)i
-Fb(c)83 b Ff(\\s)p Fb(c)487 b Ff(\\S)p Fb(c)1902 1288
-y Fg(In)m(ternationale)35 b(Zeic)m(hens)3073 1293 y(\177)3074
-1288 y(atze)1902 1439 y Fh(Hauptsprac)n(he)25 b(einstellen)707
-b Ff(C-x)36 b(RET)g(l)1902 1519 y Fh(Alle)23 b(Eingab)r(emetho)r(den)j
-(anzeigen)159 b Ff(M-x)36 b(list-input-methods)1902 1599
-y Fh(Eingab)r(emetho)r(de)26 b(in)d(o)r(der)h(au\031er)g(Kraft)g
-(setzen)91 b Ff(C-\\)1902 1679 y Fh(Ko)r(dierung)24 b(f)2273
-1682 y(\177)2271 1679 y(ur)f(n)2400 1682 y(\177)2400
-1679 y(ac)n(hsten)i(Befehl)f(setzen)285 b Ff(C-x)36 b(RET)g(c)1902
-1758 y Fh(Alle)23 b(Ko)r(dierungen)h(anzeigen)283 b Ff(M-x)37
-b(list-coding-systems)1902 1838 y Fh(b)r(ev)n(orzugte)26
-b(Ko)r(dierung)e(ausw)2761 1841 y(\177)2761 1838 y(ahlen)50
-b Ff(M-x)36 b(prefer-coding-system)1902 2014 y Fg(Info)1902
-2166 y Fh(Info-Betrac)n(h)n(ter)25 b(starten)732 b Ff(C-h)36
-b(i)1902 2245 y Fh(F)-6 b(unktion)25 b(o)r(der)f(V)-6
-b(ariable)23 b(in)g(Info)h(\014nden)288 b Ff(C-h)36 b(S)1902
-2354 y Fh(Bew)n(egung)25 b(innerhalb)f(eines)g(Knotens:)1973
-2462 y(v)n(orw)2122 2465 y(\177)2122 2462 y(arts)f(scrollen)847
-b Ff(SPC)1973 2542 y Fh(r)2003 2545 y(\177)2001 2542
-y(uc)n(kw)2157 2545 y(\177)2157 2542 y(arts)23 b(scrollen)812
-b Ff(DEL)1973 2621 y Fh(zum)23 b(Anfang)h(eines)g(Knotens)543
-b Ff(.)36 b Fh(\(Punkt\))1902 2730 y(Bew)n(egung)25 b(zwisc)n(hen)g
-(Knoten:)1973 2838 y Fe(n)2017 2841 y(\177)2018 2838
-y(ac)n(hster)e Fh(Knoten)821 b Ff(n)1973 2918 y Fe(v)n(orheriger)21
-b Fh(Knoten)755 b Ff(p)1973 2997 y Fh(nac)n(h)24 b Fe(ob)r(en)1033
-b Ff(u)1973 3077 y Fh(Men)2110 3080 y(\177)2108 3077
-y(uein)n(trag)2386 3080 y(\177)2384 3077 y(ub)r(er)24
-b(Namen)g(ausw)2941 3080 y(\177)2941 3077 y(ahlen)237
-b Ff(m)1973 3157 y Fb(n)5 b Fh(ten)25 b(Men)2277 3160
-y(\177)2275 3157 y(uein)n(trag)f(ausw)2704 3160 y(\177)2704
-3157 y(ahlen)h(\(1{9\))290 b Fb(n)1973 3236 y Fh(Querv)n(erw)n(eis)23
-b(folgen)h(\(zur)2704 3239 y(\177)2702 3236 y(uc)n(k)h(mit)e
-Ff(l)p Fh(\))319 b Ff(f)1973 3316 y Fh(zur)2073 3319
-y(\177)2071 3316 y(uc)n(k)24 b(zum)g(letzten)h(gesehenen)h(Knoten)202
-b Ff(l)1973 3396 y Fh(zur)2073 3399 y(\177)2071 3396
-y(uc)n(k)24 b(zum)g(V)-6 b(erzeic)n(hnisknoten)438 b
-Ff(d)1973 3475 y Fh(zum)23 b(Anfangsknoten)j(der)e(aktuellen)g(Datei)
-140 b Ff(t)1973 3555 y Fh(b)r(eliebigen)23 b(Knoten)2554
-3558 y(\177)2552 3555 y(ub)r(er)g(Namen)f(ausw)3106 3558
-y(\177)3106 3555 y(ahlen)72 b Ff(g)1902 3663 y Fh(Sonstiges:)1973
-3772 y Fe(Einf)2121 3775 y(\177)2119 3772 y(uhrung)23
-b Fh(in)h(Info)g(starten)502 b Ff(h)1973 3851 y Fh(Begri\013)23
-b(in)g(den)i(Indizes)f(suc)n(hen)483 b Ff(i)1973 3931
-y Fh(nac)n(h)24 b(regul)2292 3934 y(\177)2292 3931 y(aren)g(Ausdr)2638
-3934 y(\177)2636 3931 y(uc)n(k)n(en)h(suc)n(hen)303 b
-Ff(s)1973 4011 y Fh(Info)24 b Fe(v)n(erlassen)903 b Ff(q)4098
--421 y Fg(Register)4098 -270 y Fh(Region)24 b(in)g(Register)f(sp)r(eic)
-n(hern)560 b Ff(C-x)36 b(r)g(s)4098 -190 y Fh(Registerinhalt)24
-b(in)g(Pu\013er)f(einf)4961 -187 y(\177)4959 -190 y(ugen)435
-b Ff(C-x)36 b(r)g(i)4098 -110 y Fh(Cursor-P)n(osition)23
-b(in)g(Register)h(sp)r(eic)n(hern)290 b Ff(C-x)36 b(r)g(SPC)4098
--31 y Fh(zu)24 b(abgesp)r(eic)n(herter)i(P)n(osition)d(springen)315
-b Ff(C-x)36 b(r)g(j)4098 146 y Fg(T)-10 b(astaturmakros)4098
-297 y Fh(Makro)r(de\014nition)25 b Fe(starten)672 b Ff(C-x)36
-b(\()4098 377 y Fh(Makro)r(de\014nition)25 b Fe(b)r(eenden)631
-b Ff(C-x)36 b(\))4098 456 y Fh(zuletzt)25 b(de\014niertes)g(Makro)e
-Fe(ausf)5034 459 y(\177)5032 456 y(uhren)300 b Ff(C-x)36
-b(e)4098 536 y Fh(an)24 b(letztes)h(Makro)e(anh)4752
-539 y(\177)4752 536 y(angen)607 b Ff(C-u)36 b(C-x)g(\()4098
-616 y Fh(letztes)25 b(Makro)e(b)r(enennen)375 b Ff(M-x)37
-b(name-last-kbd-macro)4098 695 y Fh(Lisp)r(co)r(de)24
-b(f)4417 698 y(\177)4415 695 y(ur)f(Makro)h(in)f(Pu\013er)h(einf)5136
-698 y(\177)5134 695 y(ugen)34 b Ff(M-x)i(insert-kbd-macro)4098
-870 y Fg(Befehle)h(f)4544 875 y(\177)4541 870 y(ur)h(Emacs-Lisp)4098
-1021 y Fe(Lisp-s-expression)24 b Fh(v)n(or)f(Cursor)g(ausw)n(erten)152
-b Ff(C-x)36 b(C-e)4098 1101 y Fh(aktuelle)25 b Fe(De\014nition)e
-Fh(ausw)n(erten)492 b Ff(C-M-x)4098 1181 y Fe(Bereic)n(h)23
-b Fh(ausw)n(erten)701 b Ff(M-x)36 b(eval-region)4098
-1260 y Fh(Lisp-Ausdruc)n(k)23 b(im)g(Minipu\013er)g(ausw)n(erten)216
-b Ff(M-:)4098 1340 y Fh(Datei)24 b(aus)g(Standardv)n(erzeic)n(hnis)i
-(laden)180 b Ff(M-x)36 b(load-library)4098 1516 y Fg(Einfac)m(he)h
-(Anpassungen)4098 1667 y Fh(V)-6 b(ariablen)24 b(und)g(F)-6
-b(aces)24 b(anpassen)377 b Ff(M-x)36 b(customize)4098
-1776 y Fh(T)-6 b(astenk)n(om)n(binationen)27 b(de\014nieren)d
-(\(Beispiele\):)4098 1884 y Ff(\(global-set-key)40 b("\\C-cg")d
-('goto-line\))4098 1964 y(\(global-set-key)j("\\M-#")d
-('query-replace-regexp\))4098 2140 y Fg(Eigene)g(Befehle)g(sc)m(hreib)s
-(en)4098 2291 y Ff(\(defun)g Fb(Befehlsname)k Ff(\()p
-Fb(A)n(r)l(gumente)5 b Ff(\))4169 2371 y(")p Fb(Dokumentation)g
-Ff(")4169 2451 y(\(interactive)38 b(")p Fb(V)-5 b(orlage)5
-b Ff("\))4169 2530 y Fb(R)n(umpf)15 b Ff(\))4098 2639
-y Fh(Ein)23 b(Beispiel:)4098 2747 y Ff(\(defun)37 b
-(diese-Zeile-zum-Fenster)q(anfa)q(ng)42 b(\(Zeile\))4169
-2827 y("Zeile)37 b(an)e(Cursor-Position)40 b(zum)c(Fensteranfang)j
-(bewegen.)4098 2906 y(Mit)d(ARGUMENT,)i(Cursor)f(in)f(Zeile)h(ARGUMENT)
-g(bewegen.")4169 2986 y(\(interactive)h("P"\))4169 3066
-y(\(recenter)f(\(if)g(\(null)f(Zeile\))4663 3146 y(0)4592
-3225 y(\(prefix-numeric-value)41 b(Zeile\)\)\)\))4098
-3334 y Fh(Die)27 b(Sp)r(ezi\014k)l(ation)i(zu)e Ff(interactive)j
-Fh(gibt)e(an,)f(wie)g(die)g(Argumen)n(te)4098 3413 y(gelesen)d(w)n
-(erden,)g(w)n(enn)f(die)h(F)-6 b(unktion)24 b(in)n(teraktiv)g
-(aufgerufen)g(wird.)4098 3493 y(F)4146 3496 y(\177)4144
-3493 y(ur)f(n)4273 3496 y(\177)4273 3493 y(ahere)i(Details)e(geb)r(en)i
-(Sie)f Ff(C-h)36 b(f)g(interactive)26 b Fh(ein.)4391
-3661 y Fd(Cop)n(yrigh)n(t)4694 3659 y(c)4677 3661 y Fc(\015)21
-b Fd(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20
-b(Inc.)4549 3725 y(v2.3)h(f)4701 3728 y(\177)4699 3725
-y(ur)g(GNU)f(Emacs)h(V)-5 b(ersion)21 b(22,)g(2006)4657
-3788 y(en)n(t)n(w)n(orfen)i(v)n(on)e(Stephen)f(Gildea)4098
-3881 y(Es)e(ist)f(gestattet,)h(diese)g(Referenzk)m(arte)g(zu)f(v)n
-(ervielf)5336 3884 y(\177)5336 3881 y(altigen)h(und)e(zu)i(v)n
-(erbreiten,)4098 3945 y(v)n(orausgesetzt)j(dass)f(sic)n(h)e(der)h(Cop)n
-(yrigh)n(t-Hin)n(w)n(eis)g(und)f(der)g(Hin)n(w)n(eis)h(auf)g(diese)4098
-4008 y(Erlaubnis)g(auf)i(allen)f(Kopien)h(b)r(e\014nden.)4098
-4101 y(F)4139 4104 y(\177)4137 4101 y(ur)27 b(Kopien)h(des)g(Handbuc)n
-(hs)f(zu)g(GNU)g(Emacs)h(sc)n(hreib)r(en)f(Sie)g(an)h(die)f(F)-5
-b(ree)4098 4164 y(Soft)n(w)n(are)24 b(F)-5 b(oundation,)21
-b(Inc.,)g(51)h(F)-5 b(ranklin)21 b(Street,)h(Fifth)f(Flo)r(or,)g
-(Boston,)i(MA)4098 4228 y(02110-1301)h(USA.)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/dired-ref.ps b/etc/dired-ref.ps
deleted file mode 100644
index fa1a86f27ad..00000000000
--- a/etc/dired-ref.ps
+++ /dev/null
@@ -1,1889 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: dired-ref.dvi
-%%Pages: 1
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%DocumentFonts: CMBX10 CMR8 CMBX8 CMTT8 CMR6 CMSY6
-%%DocumentPaperSizes: Letter
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t letter dired-ref.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.03.22:2035
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 57 /nine put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E07BB563C96C0A3E
-6D4DF600BB73729BC4A5B134928F1370B9F07C587F79388B1D9AC62BFB1566DD
-CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43
-0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F
-08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E
-588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF3C9
-ADF568FD0365E58DB79935BFE98055726F1762241007E17F406CDD104D4E1411
-DF62D3DBEA32CC435DCB9E14DE94BAB3FB3F9DEB3C783C5F804CF18434722517
-08FF8A116CB58B1EB14C96C3579F076465F1A0B16A17F202BB9F0EAB24E3341A
-B9D190CFCD066D48D6FF74818E39E5416FD2EA43416A83D7A8146D29079FE553
-034B2B18F8AD3B08F0433CD5DA8B55D64AF3777102466712795437BFF7FC2D62
-E3C866B5D7D2DD03EB2D1CA1ABCC798AAE0DB6FE1B2EBE5409CFC4B4D55976A9
-1E1721CDDFAE166D30248F2BAE9D70F9ECFAB6E8FF213ACC090D70D5D7F82CDA
-89B29898E7362757C4E0EDE8B5C8F6196CB82BFAB5D0FF74960FB4893E8AEB7A
-F507D0C799B529637B9A864CE72232BDDF56BB4B79AFA17C795D554657B08574
-8A82B0DF5DCD67704445F3A4F0FCB07A61C6A4BEB1D913CC2F002640DCF4BFBD
-5F5CA89463202676525148E9ABDBAE2F6A04243412A1E0C84D6133E1F9DFDD4F
-6B230FB77FA127E4C3B7D364D568EEF37F00C9F15A485A30027B39C2A876A3FD
-7C9CFCB86931C4CEC15243353349BAA2B13B5D2B9800979D2C2924C0DBAD52E4
-2AFDBFA13CA2254B2DDE4F3BA5D2EA7AAA9E7CB3E0C3662413AEA74E8876FAD7
-FC5B991A56374AD47A585AB15F7DC08B103E4FF1ACE3939DD0B1B14F9EB7AEAA
-0DD0C98F1CC80888F11DDA518E1D56E8A29970E1CBBC452019B053E46BF8290C
-4E5BF7586B3A78934C7362085F323962F44EF5CB26617FC6789B32F8CC062E08
-C261845C8E83E2052A019434045746AB684008D39E0F63C90DEC50A147534B66
-3B28171B4A46F8EF649E7F34234AA592492BC326777A018FDF486DAB0E3093C8
-410BF60DA1B847BBA84143F8F36BE2B2239BE6A21F45BBEB9B7F48BA7B30B2AE
-F6AC4EE16918E72C4B66707C41F9C5DCE7E8897EA217CAF231BCB32139B4C1FC
-0CF91C1E23A6B91E7FC6DD138CD17724890CB0D958304DAABD04488EABCF1B93
-64E5E521354499289B4F6803CC5829D95E0060A68F031B3BA78690490F87D293
-69403417E953DDC218715B15DB94D068F6B5E558AC708E3D5F68548A4A20C630
-E6D41D95FFE0973B3672897AD9D68795E6D5429F3EB992A63D0A21E0B0C9F666
-845491E1C2083F8250481390666B516AFBB231AB398CA9984014B22B1BD3DDB2
-BEF02C269973C5B24166FA22E7B1C3EB2BC5CD52967C683CF4118C05FB2EBCAC
-1A2924E4560F1DC1E8D5893F04D37178F5AAF223BD7CD71C9DE8A98CB0703C3D
-79E1FD0986657243F635E28723E47E33EF58A058480779FE7175E03687363B69
-8C0C72A46FD66F46E1BCB233C3136204D72151EDA5294585B9CB90E1ABCBC2DA
-4D4D89CA5757B9DCB54FF3BAAF659A0CBD085B21178568802DE8797820E709D1
-D64B2C40D417EED85C73E285D011495EDED9896BB75DE2839D948E87BB5A0905
-875AC4520C2063CEE82BCCA71679E4CCBC5B37C87FFB191BF1A16C2D30C6A67C
-AC748679CB5D0C81C8204A6AB3DCAADE753457F8CB5A86F8A09FB21CDABEED26
-CBFB0188427465DB057C834B345E592D99BACDFF3691F14505E31F5CF9217393
-34466ED27FB3FBA3CD8FC145797A466CB7107190EEC5F7C299373882EFDB5282
-60B61E8A8F296A1652E9EC65A3D6ACE0E051F69723D55708D538D3EF38F76214
-3688BDD25AC02C4BA71784A5D6DC38ADE9FF918ABC4CB6128D2270705506BC73
-0A9FFD15041BE89D01056022AE4CE59F84AC318C59BC9F89FDED0BC884476211
-1A010F089039A96CC2097FF3E3A05F0593930911DFC91A5435701D2EEE24EBFC
-1B41423AA46E933E7103B7CDE75527372A7718C0B2CF412DC980E703D75B4024
-46C1C9CF31639F050855F59896EE105A297DEE56F1DFF0448BFC7F0E438BA379
-3495FEE6E537DBDEC034CC92241E75E192F9D1187BECB52D3EFC455EF08A2A77
-4F6A9CDE92366DDD31424C51CCDEAEBA1744FA290031C78B1D5BC0CA032D6C03
-8E1E8F6DB08E2A365D6B4068D2E09A685C1515CD434C8CB9FA214F5EE59E1570
-9B921B854CBB772361B44332A50FF6D333D4F2DF3D2FE1A2FCF10B104E773FE2
-74031361FE14AD205905940A959AB1D922E79C7F7778E49008E3291DAECD5DE8
-F0BFCC6D3588A4B491CD5CA01F40B40584365E6E256E97038A1E475A9E15C248
-8AED89788B6EBA9AD2BFD77CD289A4DAD565EB7CBFF27FB058EF663946350356
-A559E88646D7CF219D36B819A3767946881948847C3CFEFE2E63CBD6345B08F1
-1A1F6706FF01A88DEE060753FF9EFA850048A42993EB97179CC1A32D0593A30A
-4D57B55E5C854BA7BD8EC91169FB93BD883FCAB74B1B823BF9D950B60127C21F
-1578D0CF1A4AF4C23DAA436DCEA07D0A98F16CE9292BD0F7A205A4C9E0A9DFCE
-73C95829AB8BA819C0B9DE0011B6F00B6021D8909C8D3F7B5E287997ECBF9A65
-6819F0781D8C6AAA5735B640567B2400BF586EA6A3494FBAA878C666940ED153
-A16460D7F941A4CF58C89A0885016FE90991846F8045A04C9E3CB09398206D17
-57696D9696964BF63027C3588B9BDD8DF631D301B1C39FC6CC2D95871793CF29
-1A605D8A5F963094EE70AB48769E30A2F729B072918BC09F4E78640023C57F2E
-5801814C8367AF3C692825638D9DE5A1CCDDAF813EC126C81D903F5F75429DEB
-D503DF197DF6D34AA7A2AA2538640D1F8A8E775BABD36C230EA38B5844AC6F52
-D122FBCE58BE92CEAB9E8BD6C9CB81DA2E4687F9A316029198AA3205825EE224
-DECEB03DBB1BD358DBE6FCE1B2791FCEBDBB67A212DD025B370456DB6C4FFB8E
-32CE8AECF3641974BFDCBF7EEF2D87325AF97064F7A7D3C39AAA690A9C3EA1AF
-AA2FE83E0B370FE4618684C26589ECBA8F007062A0557DC8EF82E3178D09CEC7
-A78BAA5DEDFEC57E4B5E02FA7EC4333BB6A81A9B8F8A716C9F052D030007C732
-C6FB4482D9B03032B34572282AE622B6BBD37A71DB6A3CC735C28BE41C035A31
-A78921B604B2A3FD1CFC328A58AAC7FD58676D833E5D7B9389ED583F98E6F484
-0CD11BDFD3B74DAB616BFCE375D7465E1E7E9C348F0178DF88E0D95815CE0406
-684EFFA473FB6A3FC3691FF6BA37919013B45BC41799161395B06FB507B6B3B3
-399A2AA51F2D9E6D4BC4A9031D2CAC4B28C336C28550D59A59DCCF7AD400FF99
-38405B356380B744C9446BE5275B8A29A81A7C5313732BD057937D29255EA86B
-765B2045898F968B55980B347168E385FBDA3C28095772194C0012A4C4BF5DF7
-E212FB3C50052F275FC13CF314B2CA4381ABD15DCE8D0C9D63755C1ECCB7B3A2
-C5DCA0F1E33E079D608C59037BE10C6AB019C6EED3FAED25B56E3D7A2C00A256
-53F54897B02075BBD7D0BB082D273FBD5EF64E315D07BA01E170AD2308392C46
-A2569016E198FB162F3B6038BEF7F6F6ACF964D5938993C3FD7B7173C5008D56
-365A335593CF8AF084AA04A07705A101AC347B15A5DBD59401EB63CD13E889F6
-BBA625BEE85BF5391FF6CCD7E5A008316EE25E3F698478BA04B58BB2EC6A23EF
-ADFEC29EB8D645F09CD0458E28EF5997445F256E79A0A8B0D9763FF42564156C
-ACBABB93F33F9F290DFE4FA278494B7344728143388240EFFEDAD9BA871AC319
-60DB7A10AE78520A685678499F62FEEC4DC2D5F86FF75B712EC4A79D47BFB049
-FAA541C074CE614BC683451CA17496F20533B96D9FD3AF451D319D43F579BE6C
-63B70AEE94630EEB079EDF34B545FFB5C4016DE3A52908C71C9CE034ADB4ED74
-C3AB97406C24E1A2F3A5AD1053F49D7BB0C2C20915E8B47AE706395C800B3410
-7FB5390B4DC55ABC69109155BABE19041A0A593A99AB3D06F54CEBB5AAEFFA2F
-DFD0626C633185798F2F726F272CD53419526DED0DD0DAD140441D9F0150DA25
-7CCF66CFEEE2C8E0A57D3629C0A9083D5C1DCDC0C8044AF5F633CF37F8DB91EC
-83740A75CAB170860B143058D67B8866CD2E1AE98AC764619C8FF8ECDDAA8FA5
-25A8F0B50CB89CDEF84C44ED2839258760332094EA90E9A4DB5042FCE3C869C3
-A0C8BFAED6A56E0B7E55AA99ECECAEF05CD367D52909FF0D7AEBA2550B01311A
-D674439A347A5B72CDB8401BF3A2F87E1C47B79E11BBD42DF21AD6CE872D8195
-ACDE87C5C3229794F31C82CB2E57F40C6E0FA704C44B80DCE7E064CE5E9E0CDC
-2149944C5B15C0D75E8FC14E1EB183077E5A96BF43CF30BA64EE12F87841E688
-50F3BE27F132560AA76E68B72343C1A4A6323601ADDA47EC240F5499D8D69164
-38A8CAF303DD66A568D487263A650E47E3323F12E91AF2A5D4B7BCF8CE2A7E27
-58904F2CF9E7FB1AD8FD6682A2193DAA8E371F73B001B8F3B2E6EBAB3EB92677
-61DB29CEF08BC40AB2AD5A8A9EEFF739818C7A46281A828FCFEEF32AEEEB66CF
-E4AF5719BFA8CEAC41B5F1F70D47E96F099B2EB9DD9E38BDAD236DC7770B496D
-4A0539849EFB5E94E1A08195F0C0855FE73BF6AD1D9AD97EE222AE43E9E50E23
-25BE593D849699692606A7593334D34673523C5226C3B2925539FECB7B71BD95
-F60606A5A62D1167140B25E089AA03914F22874C3420816EE4AE4F6D8FBE2EFD
-71F09431E411F459C2BA217D8CAABABB363A7F7FD477C63318C6577BE1CECC09
-ABE0514622610A66592FE034B44C721F6FF8004B2CF14663D1F3C66BEA9EAC02
-403DD70EB0048FF9A795C0417AFD0A6E2082CC7345B458718D73BAC0B7AA3241
-B09135AA86C35C20D856604D9AA0E5D1A411D0FE9B6056204D482028DC6C1F99
-CAE6BC4EE1EEFF3A2D44A5D89907ED416D7493BA30C9C3240537120925F62CAD
-B0BA5CD29B2C2D18A0CEFD62123A56466FEAB0C2CC96E64D100A70AC1104DF0E
-553F72E932EEE6934BBCD6136A1B1A8DBEFD84D13306C90D4EB094A680EE1736
-56EF3400B79A4A1F74999E9931509E9504C9A92635C047491EB5F9E2250E545B
-D179141FCD485C2FF766D3F6F1A5490171AD4A5FFD602FF6A36D83C401445C07
-DC106A669E7BBC8E142C20E5FB0A38B5ABCCE8F46DD7267BDDFB751C38D326EE
-98E72B9C2264A63D002532026FE8CD61CB54B8009D25C4A25A4AFB2A46856BDC
-EC6604F63E16C4D0118CBF13ACDCD27891F652A8D9E4A0E3CD8E93FA86F584A4
-814E8986757DA8F1547C2CA6F0AE0FF86B4C3D885DE3C8CF9785E8A84B900908
-7A1E1C361FDF42CE58936B9220AA3B079B37DEAF3424AD0B1B61510F1792623B
-FFC8BC9FAC38469ED59CD520E191DA2C8780D28C7A5E20C456CCE46D176115C0
-FBCE348C8469759744A69666435DFD66CB378976FDEADDD2824F8EB4F5B4CB0D
-CDBDD8987428086DFA2D0FACE9895A83E4CDA336534E8A4368BA2E1CB88B8D74
-7D62387D389CEEB6EED466019FAC5334493C4BBB5E7D57704518AE380DC02335
-9F4D83C9CBD165B4CD20D435F8C637136A591D12A55F809021A5FFBA45AA8CA3
-64185CB5221F0EE4D26B124393D159282F93309EED52DFE6F8071049555E99E1
-C6717678EFBECCAEE7FBC5DC8FEDE888F738C56E4221FFF1E098C21E9EE60BED
-362C6CF63EC65354DEECBEE583898E1EBE1EDC8B21001CAA2675A4354A55DB04
-ABED88D49290C97B67F7843C15566689E11E8F4E3ECE99F772BD7DDC0E4162CD
-A4F66BE34CC51EB02739F1E283E703F955B2388F368D1A1106A507B996330E10
-C120FCCBE09649BAC6975079D8A43A76E8F9BBF1687916FE20C628E6F8D05AD6
-89FF1AE9A229BF2691BC68314EE1F0FE0C7FA4355FA2850A51E28D5FCD9D4B03
-55AD479F16DA5B0EF577E9782059C0737ACCFEF3CB6E3776A1D283B2BA82B1C3
-3DEFB4DD57D577B194CA242F41C4DB0AED395C67BADA209E1A7FB96C1801F3F4
-486D5CAE277BF622BE8EAF78A733C42B6B2AF7BD869B484A3397A5B96AF2F160
-BF215C2D05A3ACC9AD7C044E1C8BDB1037BA3BC093152A2552BF7DBADF1C599E
-506291A8DF282F9EB736C8688F7CF8211E2023ED63C37B6E8A66D8A750180C3F
-E8CDF6130C7A8A1A8B78F9E7B730BC416F77B64FD4588D17DE7BE107305E1381
-AB625DAF36F2A23E2CDEE4B39DF1392ED96C0377A6ECCCED11440A8BAA69EBE4
-88DEB5CEA0201EBDE4B74DC34EF09B72D8DA7A0C49663F0BBA63FE9F2D7B6F48
-BE05C3BD729795E0C64E40F96E77DF68432F3EC588C647DAFB5B7A682736E2AF
-5B214F1A74CE3B1F09095A32EF01A8BB85DA3FC93A1E8F824BCD4BE5A47F58C3
-4B8ECB57A9632A7C41914442CAF93DADAD498721520723FD391D2A9169DFAA01
-6BDA71D0F066599764914D48AAD62EB8F3DB1DF5FC7BEC14D26BD68A179A267B
-12E087FD5EFF4C7AD3783E0110B262B90F8F83194AE8C3EA86195F8882DFF8C1
-BB61A4800A426CB7D2E7B1B6C75C66672ABFF0ED2E93AC70A5582DA425269E66
-A393DB43E45967CCCC91F885798C76F31628787A55520F44BCC3F3DC2FDEDE00
-E3FE15B69A21432B20004C2D460DD8203872DCF3F1898E51DA2AC9B049F89EFB
-2427B8CA921997FA7F091C8FCF4CCFB26241B19B7C4556B8CBFD34BE3F88EE23
-1CE71A4CCD522170C16DB22BAE9A116124D7F758B6717E5176369E435CD6E74D
-92889BEB97EA0A18280A1B5CC8ABFD94CDBD56A56E8C3E93AE28306591F967D9
-5DD34B73FEEC7E97A1E9FD57708B3EAFF527BE842092D193055443A08A881507
-E7FEE154FF632E3CC0915C73888F7CCA4AEED837166607E8E05EC776F6878EE8
-EFC7652F5F47A6B5B5417ED9B49EE57F0A61BBB301ACF50EE569F4AD1E158A03
-F3BF12E0EDCB80AFB442E36DEB7307D45C0AC40928FBC5C4551818EB1A216B83
-5B6F4DA29C9F49117AC9723B775DD9B92358FE03E5382D82CF549145A1D69E14
-9551EDCD6BFE42AB784E585B87368B16043A6CC0E700929131C1030A05AF74B3
-0B5A7E117A3D57EEA07238880F202EA0DEF418CA058EA0FF74F9B16C242EE4D8
-4BA8FEAF24F61F5797D38D2CD95C19D1D4F214E8A21A54EB5221E23057419E24
-25199F729B609E582D8EC3026F9F32446FE280D0EBDB4183C5967E3662E79E20
-30402D53FB7445070D9DEB9456D6B515F838908FE5456A9FFC43AC6C6A083691
-AA13E5A00D31C1D74EF62F6F8F9980811BF4FDB360120E0DA69F69F464BBE06B
-514B1D22D20A924FD6EDD6CFD2D4B7BF406A722F98B1B73C9859F34A41862500
-2530158232C1FD056656C2348F942FF5119FF015346997E569AFCB91400F7E6D
-00E741FACC0C7D0401BFB7358347860272C7B010C6906886D4799167DAC504DC
-D29EDD804A32E81B0AE4D96B71E78418277316873E73E848E1ED0B87FE94B9C0
-135A050578F9433889A14C99ABD7EDBE850ECEE39F50EFEAE52E568812708F87
-3892A2BBCDE6F37D644D853C249E3F29FAF100389B5B6255EF55B3F981D5E15D
-24010A059F2E0C54C91025FFD21DE48F371DDF046025218DEBB5774990BB8997
-07BAFADEE942F386EE90DE40B36A975A5B52D10C83B2A8D1D89EA69EA8C43134
-6949F08B39D757B0942896C972B82E88F7671D01F74FB2B6EB4FCCC7AEB9D5FF
-C37A247ECBE08E7FC9CF710529AD5169DF88E58D8CFF70FF8AFD0C41D74A8DAC
-6BF0CFF3B2B094BF1EB49C261C60530DF9942A7DA271023F8D83E4B97693B1FA
-A594D91F8198EB83E25C7FB88A079E062C283AAF083214F473EEC8C18DDDB986
-52B2EEC249FE95816424D0259CCF420488327D3CE5D8050CFC2BBC7708B2D9DC
-87172BF17CD944D54DB241FFF0B41226DDA03649DA24846B1D251DBBC53D6BA3
-C9BB6FFE2A27CA2BF80FB383FEACF0987DCE180CC34AE03BCBF66F67FED65C04
-C3B4E4FEFC8974D01AF8EC6B90B2E878CDD25AD0C877B649BA5B894A35A3DC9F
-9634E09FE31AC8BBC94A4FD9AC59F3DA4C5B705EF39824BB86C664E9CF7BC951
-27D9AD6BE0C49055DA50735CE1BDF4B9354AAE664758498B3A8DCF6C0428769E
-D9B97D501E6F2662B17E646DF54599E0857FB44CFBF666F3274C6040B4F7443B
-346B0EB617DE39B5C6972C81A70F64A7E2C2DAB930F5CE41F7F37BE70470DE75
-E3440860F166332E4811B8C82EC6FBC0447E2515870A6856717B12E62CA0D194
-BE027D93A83900344D757CC1803A4BE4C891D9B459A38C98FA95FA7001BB1544
-03DF1B6DE5A438F6AFC5C532FB90E6CB0746F41960E03ED9C1CF6B31937FC168
-B7DFFFC7F7F56218D048CC957F7E94516A840D07EAC3D20B2800E92786D2F3E9
-B29F454BBCA6C2F7B4080A78BDCF79F3F642F2146CA6ED55CE8E29F66E3AF594
-F83944381F8552993CFEC41C68AD72C104271D46C44638728A472CA05197A758
-318E4A8F26586357D342ACE8FE82B5A01C67070F14285577681658D185A2D5FA
-7F491F1E39ADE4E1F55DE3320053C19ED60A839E05CBC908CEB514273D90D7BE
-F4142197DB833F970827140DAB4F15E6345727C58B072BF86313DDFB7409C4A5
-412FF66710FC15684AE71A5F8ED4E44856BD5C0B00DE984B373C6449BB45C705
-1D9BFEFA89DB27A4AC9D052A74B26EF44494F3B8B142E08C9A674447E5686F96
-6852F577E7F7FD7CFF4AC98D5FFD42AA9A61DEBCB437B3894ED3D474C56D2191
-3B86F65CC7AD813C8F7F94EAE2EE7D5F92D7FE14AFB7232A80CF8DB50686070D
-22E670ECC7D773EBC441E328CA3C3568613F4B445C9501D94485146E506B8634
-ED87D6F7C8654857451E754E177B1ADD5698E03CCE082211F80E1D9BB1229DB5
-926FE754B04D03A1D05C2E9001A30DC08CC2AC247E5270406225AB8E8F7A5D0B
-82484E7A96202BC474A2A888DC8FD799F9AFDD0AAA644044C68805EC456EAFB1
-2E7F9A6C6831048843390C9B83BA7A97C940D920EEF594D2513ECD80752E9FE3
-BDA056603BB7708ABF801D23D7CFCC5D6285F7F5C98C86D79E8BE1AA56FA6612
-F24E3590A854D7DEED90B548BB067782BAF899C5591A6563B04FAC965E1720E5
-302DF72E406C158567D25D504507CCDF28361038E0753A5F07682C64B497D5DC
-3E09DB3FA1765F4E76AF2CFE65299BE00D188570CD2DB339DCAE92E8CEB48542
-4056E6E4D857D4569F6F251E3125F45B24D32475912457223130710F8910054D
-AB36776493EA611835FA4BF01E8E3CEFA4674D41B007D7395AC45F285CB8A83A
-CAD4534F7E9E62CB28B388526F7D062BC329312C64F115B88C82EECE1F458C86
-4C87E974049824A463EF0A8665F662824F55B0670C9CF6CFA1B843B7DCC69DAF
-F6C5C6BAAD131247C0326A9D1749210C61C11312A5D8F5F098EFC17137230879
-D97EC6D4E851682B7B8A1242DFD71B1D55372175BEF6B1C72407EF88E0919ABB
-7915A480A40ADD9326086E0572CB589A2FD9FD69A4A3E7FF074374F4713DA9E9
-18CC6B7C889209D4EE03E7EBD6E5A4691C3F9430EBB2537F0890A035270FFFD0
-AAAA279112919DF2B9E80DBC5E2EEF67168019A32F081A30460F04FE62BCD86B
-59A0D4FB43517F51B65E0B31AE79D0FF3BFAC2466B3C529E7DED25E230195F6F
-B202D8C63EAEE78FC3E82F14E06D4B7BF7F561F4CAFABC49E9BB84D378A7DE3B
-00990F11BBB437FA763034402965075535030B58193471050B6C30EC2A8CDBDE
-702D25384DC35F53D65B9A6FE03E0844F2146D3B2A9D5582B26C30706FEE030C
-C770BD911E0793F05712EBC7ABF483E1A303D1ACAA2C846ADC6BCB7984D5097F
-72FDA0A45FEABEA1C9C916DBFBAE5D19048A80810C9787730DD9427873F82CC5
-F5664855C0A4F201F50EE359E6823246C956E548EA23E83B4FF3F56F38C8CBB9
-7FE3AC5A05124CA379C6C86B09AF83E275403DB42AF22B6D47898F037346BBDF
-63ED4FCE9A07403D087180EA77C179EA70FF24D6DCD6BB8CB12961721C6D9C05
-891430AEA510745DE8693127EA3A5EFCE92414F8DBC35F961675B266B869ECA9
-0DE1530D1C35B576EE7F40E052DDE2D36A850133CD094B7B64A29AF62C7C2CB9
-FA6BB064B3A6D79D4B06EF54CD5FD1167D0E2EF7EA79541812C4E7AF0F6885C3
-427084AE3027E2648D8D465648CEB9B0D46B60E43675FAD2FD3F6DDA78752122
-061A7FCCB2BB2A14503CC5A2D63F3F540E37D19DFC7A758BADE5E87FF4D245AF
-4908D72432095692F1B82BEC2AADA9AFF87B570C0367914222F501753F6B8101
-A85B634C19FEEE9A926068E1AE665C2041ED42972E28CB1764957DB04E2097C6
-AA814D263158D312C63F9AEDB2E9C28B40F88EACB602A0EDF91A29A98FF932BF
-48613D0DE7F7E78ED3AFA6F0C415942F8EDD5749F40058F220813E9680BA010D
-6D3AB12742408B78E595C9FB1254EF8556ABCB23ABA6E983A84EA817E93B0D85
-F4CFF27E07FB245B27ABC09D039D139DBA8BC2F8E8A5ED1901947D1B693B9643
-F191EE88F7DEAC0A1B1F6ACDA466B6E1345E21E347C00321AF74CAE1D5406378
-DC092F1E234B642B260C713A7EF27EBF82E430D863366EFBA1A04E228CD412C9
-F9ACF4C31D3439FEF5BE1E8B0AD53CAA2FE5888592B78386ED44B6AABC1E4CA8
-68415A2864C584BA590E39BBCDEAC8F082028F046470886893865890E999E4F2
-5509DF776DF6D2E4BB7C9BDD2C64F6F01C345924DC95F23B24D2BFDE87809511
-4F491BFD46BEACC2BF32592AC0FCC3BC874956E0E72783693BB1B9AA763F6C7B
-8124DECDDBA4C51E9915BD6460318F990E93439DE180AFCB0E08F9494C7794FF
-719F1851157A337FE24248B80FAB31CC68AD7668838795FC6899AE73FF084F24
-4543A42FADF3607FE2E2E593770559B63FE9341688150791B5BDC9F1C13FBE52
-73E6A8F3C74F1503CAABF8884C83E5087DAE968B0342F6D7FFCFC373EBF6E43D
-3974DD991595EEB5B55D83657EE4A5E014C1E9B3467A28F4113DCBD412F09A90
-C215A4167A161B17A9F28EBF03A7D2E52C260194302ABE0A7E047B15A4A904A5
-F15784ABB6B69DEA9C6662C3FB033BED4EDDD4B8AE1FD3E3FB00B5877225FCE5
-BF33E2A798EDC490614F92310B4993912751E0459FCAF3718F51601A35EB9FC2
-EDF95C3631A68A7B752BC0729F8D0E61DE0D06044D321262D81E6A381520FEB3
-E4B8E50D82D84AD08018D936E0FB3CC4DC6069
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 40 /parenleft put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 50 /two put
-dup 51 /three put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 123 /braceleft put
-dup 125 /braceright put
-dup 126 /asciitilde put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA41101E19F8FDDB46DD34CB3B0749
-5410293E3008FA73A6197B2E3BDC593A7FBE007CAFAB124C808AE2859E1E27B3
-02DECB8781E533F023F0A752B8EC1310E28908EF443CF44DA789A615DB76B1BF
-463F16077F7E05208BB95299132F8137640A8301B9E8057C97B07644B1170F35
-1206A18C75C2EF9B8EB3A23AEA8AE38066C32878DDE27D424E53B5254B3708D2
-C3750210C4A1EEEAE38350EA0F980D0297066910FA2EE797995D3A886D5708F3
-ADD7DB6427B1FB9E6002CE7FCA26808F50CA01564DCD7EC1732CB99D9EAE32AE
-DDD50DD878A849484DC3AE168AACC456E011BFC668524A88A37CF10225DD780B
-CAE018038E62585FDB13CAE6CE4FB067021B41F37A16F15F5C9C87DE63E218D5
-4B1EEEC40A8A73323DB866B30CE8415B995555CBA8EEF3D631D40360406E71D4
-19E5262DF1656DDBC683DB5AA5973062D84A784E75187C2C565089294A3963AD
-AF257AD1DADCAD1B6D3587B2426613120A1DF4A5156FAA65C9B2089389CB5E1F
-2355D1D95B55C4D4663B9318DE9CEF31ABD540F396980C1BF7EB635C0E7541B0
-AEFA274C376B7732F7A196B931A2D5EC585A567A95D6051D04A0E511987E3550
-F201450F2CEA6F0766FB214315D7320E50458EA84542979F17B1E46513FD7EF2
-6BDE25058BEFE40C1F97BF975439F149E5D00F2C0E282BAC28278AD8AD46A0E5
-829FC3B8D27792BB1856FCC681DFDD0EBF4AC6C49967855DE59799DA44A86EF9
-5EE262C07D91009AC542205D095B1F99758C7A386C977B0E49C2FCBE68739A83
-327A11940EDEDCD1233232DA90F39EF6B590756A74B5422A0BBD9CA583D7F249
-98B74752EB51CC70719B7B115BDE8AD532395FA730E6CE753D56690F6D0F0B1D
-C3013990334225FEE17A4D8F0EABA11E042F7827FE1A27A130B614D60B476123
-73F198B917958382B2D73449B892F4D192D1CDD1FE8C70B2A46B358415225A04
-ED1A9184983B76001A63F46CD56CCE48D5A5F33183F35949082B2765415BC0B7
-E7A34384D3985E064D29310DF3D085FFFEA83E437701B56F4103E48675C1291A
-511285A85EAFA3A69CFE5D0F0213430AFD12049746DCEB3A2FF6ADA7D917F158
-189FEEB95577B5D8A7B85A5A31375A7FE1067FFFA70F4594E3EE425BCA2E2BC4
-95B23DAE1CD424917AF01F5640CB6B758268CDE667DD4FCDF847D817CA9098BC
-B6E67FDD3C12A0392F63CA2A9272A78ED483F9F3BA9A32E30BB3F50E90509FB1
-2CE28975B20F3B18D7FE2CED4562088DECE21843AFE38603C511774433C52958
-0CC685B4C5497CE6C4A40169BFF636DD22ED7A3618748DEE08CF6A2E28221D09
-7F61092DC9911B101B335979559F1C5F3315B954A533862648A882EFE054DFAD
-1520C9359D64751F894C036ACCA779092AE50AA630D906D57A0E72009F47DDEF
-6B27F4575F09DDAABCFA09FA614D23B4FED547DE8C590F0780A8B3F2BFB7A8D9
-F60773E1C75C861B0E66C2A62CE09D7E0F40DFA0E09A28CF5989FF59B686A9AB
-380ED44F61E286C3427E7E5EB1E3AE824785F027ADC45E741687B9F06690DFD9
-2ED58796B544D797EA260DE35455C3D85C5B2EF43C07E8E8F1553380A404F7A3
-8D2D11C7690F7195EBE649E1A6AA2A89313FA54CDF906FB920278852D4CCC566
-1E4C5B250D880321DB061F5AE069DCD28C7AF449CA265048A70CF3BD4C9B4F32
-9DC83E5D2E95C281396460DD529BB40C87EDCE512A443777168DD90583490C7C
-CEA97E6DDA0A3A6DC65AE1BDC977EC425F0C054F6503F5F704426CED87A69F8F
-E03BD90788B19BF05122A6E43AB1EC16209062A16790D1D560239CCD3B08BC9A
-23C2CBEEDF42DED6EDC61C3F672AAE0C18BE563951C948266953B7EA5208B5C3
-56287DEDE6DD29658A98583FA150DB7C60C3C050B3E77DD7CE63D0EAC970AC3C
-60C1055ACCF3125B211F63EF9EA3D1F499E691D3C72E5B58154329ABE46DBD02
-0EE4D2A7520F471661D118868CFA2C636C94A65EA28FBF3810FB211F9C4BCBB8
-B768F7929B7B76BCD39D33BACCD27091876C62EE2FDB416459F6E773A5A9D463
-4A7A4D98F595E67F738E136EE94697E9DEEBB36E72818CC034B53C19C3D4B2C9
-DA5A126A32C728987D04DA86FFE88A2DB7224E5C15ACE12F22CCE260F3CF2438
-5D4DA6D4417E9889A5074131E7ED5EA22DB32265E318BB6A82C8A9D13A74B698
-649F49142487F511181980C73F50E0793A206FB82CBA2AB150D542B9C23A4725
-CBC16FE5FC4B10233044E126EFB2F4A6BB66FC0AD2F091F3B83B3634BF1760F4
-E1CD587F8A717449D031A4A63FC52054E3503294A3516E914A223D30676DDB29
-9E9ECDD61CC4F04D0DFC05FEBB09EBD5B09991B0729E6A3BA4D5265AF30366BD
-E997A7A200367EFA2BEA748A8E04337EFF2F5488A2AF5E9D6F43EA80638F9A03
-09A2D304E2EE9CD9DC06D22332CE2F59783537D2C7FB40482A14E95E914209C8
-632049C99288266CA8B7E773F8A9D8E48E887E9E85B55B6D3D561882D2E8E43A
-01D03FF7750707CCC3C144E72E9074616F213C335CDF67A036E159F0D584AF46
-91FAC76CA4E85C9B78F941943F5C7323640FCA279F9323D104EF2C12A49743F2
-06B6B033B72819743158CA8A58118FF2D526629E1E150D314BA188F74458B4A5
-D90B8073954AFCC4FF41D41CEBF0AEE88B336B6DF70F9E89F4ABA7B302121F6D
-9766F1C05813EDDD99347C05D1F8CC8412520971EEB622A904260758B60635E8
-CACE856DD8E6725AC2FED7C3917B25954A684E1663C4E04FAB20D76DCE40DF6D
-D8507A20B08424A09A11F16273FAA3E71DCD916E1080320E5B789A84CDD89192
-7C10EE0649063AF47EBD90B94B861DB814C4BEC3CCB5705C64BCF3F83CD112CC
-946664EBDF1C4715ACF9905A58BE3DB3E11DB62135A9066A8BB946C2ECD5AA5F
-C39ACE2DD1956EA3F34F08F4AFE400BA0495D5DFF65C22C567897BCD44FC5114
-AE412CB13C73AFBEB9C5B70C9CFD73CB0BA868BFA1F57F9CC3CF97894397C479
-CC5254D95B432082D99853E23A0A410C6D63CC1B1978C1C099119C8D7D75FF67
-D3F34267A6D3778137601E9213D2C89BD9C407E2790DA06524497C647676BAD8
-FA32017CC9CF8A5CEB9F6A48F7434907564EDA3253B0B9F2078909E799BB5405
-B1C5A5B7689A700F7F47F206955905F595360E5D0DE91EF67174E0A526CE88A0
-54456829B844B3B84BBF796394B7EAEA0FCA50A2D0C033DC9C83CF7309A2B704
-8B00AE855DD2E52808316CF7BA9A5A2AA3DD52B653DF351F930AF19AB934B110
-D5D77F98848623F60E887CFA5B2A9E680E19236DCC37F99730C925213761B28E
-0A91C64A264785AB662889F658D0F7532DCEAF433983F931B0DC80F361DB3EF8
-5F8FF33FF46707841F793C2C3C6FF8F536F46FB3F42DE22E06E3DEA9541CEFE2
-5F57B0CB09216EB395D24BB826F8F1F0022F5EAA69472980FC7DF810EFE21D0C
-7EB290DA21A756D47F57DD921319B753B0859C203D5CA16E32FA91408245ABB6
-D5607EE50F3C9562B88A1037689CCDAEE0B9D6D40DF31D4703F06D2BC534793C
-7E1B77A735C9A2B66DC218C61852F5EDDF4D062E3804A7F28180551AC7F971D6
-EC2E5AA95EFFC329D74AE31698B78A12EC7248382ECDC0D9BF8A42A096668C88
-2A122CCD5B2C65160DB0ACC8468B072AB62428AF823380A8EEF92177DE627A89
-DA3A03EF836A48A810303EE4EB92E6736321B3B0A3BA9F8165621C110C08F365
-F8E76C1EBE0574600BD7BE1436CEAB10315FA769346776640A6A616731F23E3F
-3562C60FC75250328FCEF70CD2F9E3CF844703138DADFBB484C605238A7DEE1F
-2362A11144DFB5E5B7361B5460708C6361927A2C8687DE73DFCFE9373F7364EF
-8241A2A37789AFD6F47FA009C1A3A963A747FBFC8E1A1D592B8C8A405513A626
-2D5A3970051276506A46265F86A28D6E29D41BB36BA611AFBB8A713D19543F87
-B2BA98F715F9670C8ADCD0B59EC7CA1C45AC4436900AAC9406570E56A1DB48EB
-188166913D42068227E6853437E7971BABBD26DBBF07298035C13597E48D639B
-BB66C9CF42859A0AA59E395F5689B2CA25A990C43ABC26C3E9B176C011399447
-BC5C8707593B18088E9BF8C58FFE9204ACFB19B9CFEDC4B0CBA60D7DC25A6EFB
-346CDB2E20B20C907E5610E3C61B403996E5FBE45CBDCE19721043D72E97471A
-CEDA59D92692713F1F7AF0FB1B9140A995545AAA0FEFBAABCC40684BE0DCBF83
-68FDCB70D9D2546A428009C1F9CEF99EF720D12C5299A5856A33EDAAEE1266E6
-66892932D9C30D5DAD7D90E0F0617C412EFC68494A700741BEB8FD37F7EFBBF5
-1A901C4903930C9757BAE9938EB964A39C3C4833632CBEBE93C5C07FDC2A4E78
-27E6852F3DB34302BCAAD6626B10BAD1790F5735AAF3C236FAE3E1E8FFDCBEA5
-FAE064B08DF7B68F033CE4D3521FD41437AFA4F18F603791D8434E630E6598D1
-D25A011EA99A2D4C4E47A0D0ED4FD01E12B810D376775856608E34D8C9DF3724
-48D919BCDB09DA820FBDBD163A9FF76CDD61DB100ECFB7BC5DD08C5018D9F9C4
-035484764850BDBE3E688EF0B58EA6D93D2EDB5EA70CEE815F9B119E12CB60FD
-01CFAEBAD1256FCDAC96D767FF075C85F1DC6C5252350062498C62607AA63F5B
-BA376EEA8F422CA1C72D2CA837FC2829AD8BDD914C7233572C1E512B45F4FB54
-61036B5B8014780E2560AEBE548EBF9EF5D383A3BCC809558E9F337F462378F2
-5425ED071B51CFFD95B2952ACE7FBFDCF4686FE856195DBD8A8300FC75F66C63
-DCFDA5BE7F835C844FAA446D014782F298342E9B2691E2199C835ED83AD79B2B
-516D9439E14208869AFABE62AFD868BDC493D3B856FD2E696FDC08FD0DA551A3
-D9E44F69A559609F4478F0C1CD443D7628A712EC34E5536441E7F529ACDE8168
-652B8CF1FFBEEFD5E91CD2DEE43797C525E01A74A31B82AAC5354037272B1AF4
-15FDFB761B2D02ED81E6F7DE82EB6F74B0F73A26612461630BE9143A24769625
-86CC5C0BE34E568F30249EA4980E8E457D3B7454B44AD72EC70222E7FB87C1CA
-BADEBE17086CA0C898E3F6EE059C1C63C67F5B4967F11AFF115CD7DC27E541E2
-E75FB60A76E0572AB1B16E4AAB9AFC4D5935EC936862F0A08222423480014F0E
-14AD4669F306AAB1B841C374B5A910C4752CA79AB1B3F3E1017851AD2A9CEDC0
-150672A866C941A105FA02375AD1CE54F9CED00C7792513EA2681DFB6397924F
-9310550C0C6BF77ABD3979FC524B73D6E6A14D3AD3FF187B61BD33B4B5347288
-69FEC56DC2D8C1F8AFF28D1DFA9907CA6CCBBE34D12EE9B14E1550F8041564A5
-C9E0C292290028C162CFDBF0473CA11622C3FEBF42D94DB41A181EE51C09AD6D
-B7838DA1D2F6D98D99E4A8E3EBD89C6AD70DC364C25CCEC718FA499E7EEC73E0
-434369A669EE979621F74FECE955E3501A52AB14E5FCC3C3A8EC140308311BF4
-D8AF8AAAA59CD7F52A7EAD94AD8433635A1423DDA2187CE0EC35CFEC0FFC74C4
-D095AC9A7DBF182616078E954B3AD580CE8AF901CF4D5EA3217B1E734F37DDD5
-67E32CA4A59E9DED87439007F576D64CBBE99D7ABF2D12A9D63F7339E88D3A79
-90A7BC9A722CA7A5418451ADC14F6480363C00AEE363A556DBF48CCDAE30F9EF
-8933620080B9B24F2FDDC1EB267544F65679F0EEC21693141A947B4B981E29E4
-8C1FCF6F71EDC7C5D86B5CA21103F335C1D03F99EB5A9D7FC348B8A65092E72D
-F49BBB7853213A06C15B01D3FF5BE94041B709737865C4C34ED4124801CC3D5C
-4E719494AE482CF2786B3DA85B4BB747811C865535BC76ED597B71B0D2A896F9
-E2EDEE96974352A3735F892CAF48FBD944A1E39C319C4E69C8CCB0147F643CFC
-6F8C72E312E65C20B8DD5F623F0A0AB667D65C4EE5EBECA2B2E6827ACE502C85
-78421A1731FC792BE5BDFE9B90C631838E299A72A19EA564487DE3B28218AE11
-F30FF509AB7F223387E7AF6B3E1162F1A377D8A64D0FD439844DE8264621FA8D
-1FE268EAB4FAD31C60F4EAC668A1E44E81D86177721E8968EE05A677ED7E8507
-61E34154EA7A27CD27696D3B34D932CA2DE65687DC7A2969BD8A46E30471533F
-E3129C347095832C69FB6FF380CEF6608821A57381CC551B771E33D969815EC6
-A7DF385DD3B50F26E025797BD7808F6ED254AE3A5AB0664AE1E6DF308A1F7549
-2AABA4EF4A228E4A932E87296999ED42080AE1C260A356407DAC03A3D7F09D8C
-6EB3175950EBB743E02119A7ED867012680F8065CAF41E0864E1E7591D635478
-FF4AE2B7B2D25F45568AEEB57B0CC0C86C49EC91F8C84515CDC449E57BBDBEA5
-07CACD01599A368E7D55DF58A8260A89288EFDF87E15065CE6161EFF495A1FA2
-D37A9265AAA63464A101C98E8F38E866C61E57ED511DA8D5A0B95E366967FBDC
-8DAEE09396B6C542C024F543013D619AF7471F9E25BB0003A0B7F01E10813CF8
-8FF216FF04CFF8BB1047D7DA09EC94A5E46C22592AD501E2C4D77539D75549F3
-37039C3AB64281310CDB07CDB1573B2BA0A3F9512C6AC2A411FEDB4972A63ED0
-81C9669D6F1DC786FF0C5E3AEB5B836A80A0A1069164933717672BA201B91A90
-D79568FA3C87C974C6932B33CCCEB6C25ABF0E42B39CE100E5B0EB7FD3A5AD09
-1AC044731B1DA133BFF68C493894A5DDA8EA37A968CA059D90DAF8F5B4677CA0
-96C72D48270959FD2468E84D0D0D40A62FAAF309FB1C81013ACF51ED861A8567
-9C49CE9F79C85C04DD7DA6FF28CCCF42055C0C978065B8AF44C95E9184591B28
-EBE5DB4DCD92960E0C6086A08FAB63CA8002192CA28D70ABE02AB7E20EF11A8E
-05A1F274C64C66D9CE63990EAA71B2FF4EF315B45B8E0528E05C9185DEEE215D
-B49619D301BBC66D3DFB8BA1E5FFD7F66FFB003EFC8F472BF46CFE5DADFBB943
-3A3B57F94C54532E87613AD8B6CF52929A42A449D16AA40DE362558DE9F329E0
-DD09B5498BDE842FB14924BCE20FFB13B0FD393B6BDB427E46B8E2E0A0F70CD7
-B93F43018602E5F74BA11EF2A8DB031D6FE1B3EA2ABB165FC550BC233C442648
-B7E78BD68150EFCEB92DD47660781F4A39A74DB35922F5C935DBA398FD7AB77B
-8E7A230E1E81950C308FDC2A6CA5E17151E6119B4CD058237DC50DF812D8AA1E
-15BE5E0E0844AA5239B84CFAF9381DDEEEB5E3C99E6108C805407E30E3FCB96E
-5DE662A5F576C486779D10E5E4E37FF9B06237C527D4523EDD5AA03EB863ED41
-457E46D1A9DA0E26E79D834FB435470DBE0DB3C3EC0F639DA999F7D2E3E217CD
-81386991DE2CDCA721DE046F7CE6C9ED03CCF87E4D980DABE15A291D6CD3C158
-6468FD891FE00470075ED3312411786898226794107BBD4648F046138F5405A7
-11751B3DE6523FE715FAE02FBE24112BFC3F2F6D129B25B3B7B9312D4482B178
-C466C10BA1989CF1BCE66BB4B42A6BA268AC494FBDC6FAEAA7A72ED1C48F405C
-C00C5E70C917916407395C7D9180A95389E5384B8F4FC41CC982A2DB8436A143
-3CE48A4D32CCF6AE8A042451AA10366D08E99C90707BF8A60B6688949D0335DB
-782756592DB158E823CB7E8F4DF6C3DB1DD098A1DDFC34053ED49094119E95FF
-FEBD589E647D64B43EDDA638B83EAF462C781E2AC2B981D6085B280303339094
-F9AEEC637E45329D66F36A07683E567CC97D9BB8DE891F73FF16FC4B923054BF
-479E7AE19528733D6E2337DD1D4E75376CA9E843D547BA28C2D4BD182B807AC0
-3988A0A1905F9FF0D22B4CED5A0028298D31D570631C1892FCF87D6620A55D50
-24B679D50FC1DEDF84E4AD00AE2521D78213B85C364B16ED6F8BD012B6382DF3
-DB3077178D82F7F81D308E33D9767C18F7ADF0B93DD3C6D616902C5AEE775FDA
-FCA928094A5BD1A5224E3FD1E45F59F3EF30F086DD81FB7546632117818804FC
-70ACC6F6872C2B3E8CA29AA87FE9D9C1A8CAC1EA995F4A237889262511A368B1
-338146CF75B01838C71627D6339EE498B4EBE4AE8F86978F77632CA59188A2CD
-96C633F2B84F30097CDDFE6D2FF2FAA9CB82C1AC881FCFE16548CCC60CE89398
-1D91443E6BA76EA6ABF5154EB647D3CE510B938F725D8C6EAB3C293877DF86C8
-4C830C8379461728446AE23D445E4AFF5BE84DB94BDDF1477DD60E94C27DF754
-C46DDCD8E2B6B5EB9B928E75AEA6A6B6A8EA1991BD12E870C8CCC4383FFE1219
-0257A7D8A14C6C8059C24974B6FD1B452E13082DE064724C1B5822962E0063D6
-8D86CF3673BBA76F8C0446A7501938B1C5838A205F13041A96CA27AB6F4F4004
-9F3ADC11B0C01C1949019B60FD93CA0F3CD86126CA3BEA16C556D763C7476A38
-A75771A8524BCF508A4938D51E951F4E1E5DA5E4C67F13991BE3ED13321B96E8
-C1B60673892D0F091EA3931B6B08615FC6A0C5E75BDACED9F41A5EAEA45E50BA
-46298852E262486D80AB0AE3EE18040B997C85F5C9737C5A4F08A5376244C259
-AC7FA36C0B88D25C647D11F8F9F578D8633482CFA582065F2B2231B562003001
-FA81BFC8B67B161313A421D1D9CC3817DCB5B81E625BDAD0C438F49A29945525
-25BEEAB86A926C12503749FBF30D945EE450E9213F950F4DA5AC62C732522958
-DE00E60A9DAE074D4093C381259E91164865186099DC045BC43C9CD4B88630C9
-15A8BA9A89395393922DA7EE582ECB3A3DA5CD4421EF0EEE4C57032570E74271
-546DF3F774F3D3C6EB243464928FF3E7E1EA35659FF7AB0D48050FC8841B2AAF
-ED403649BE27A32F9819F9CB3CE1100A7185B29A4239C4C461BE76B9DDAB4332
-357F55AAD0021264D5625A0ABEFAE29F95819579563CB61D5BAD81A20AC5C47C
-BCA1DCCF82A96E7D1C8672440E28F7AFD9C34FF7EB4C4531ADED742923019A61
-AF6D10354BDACC9F82BC31BC88C189E549014ECCC0ED8527686AF33817114267
-D8356689E20B37B1B6F4EF9A6B9ABF3E19A818A8E4D8D232F305D3B63CC9DF28
-CAB9A53358515D788A9A8818443D506969AA199FF9CB11439BF1E5916CB5A3B6
-520DF9EA1AD8E52871453CD628F5489FFC23A324FA5DD9FF0E2B29C9FCD67EE8
-9A93783162E5B6B0A191CA871B940D68E486DB3843AB56164541407BEB01C8B6
-D1E0313F2A38208018BC661D778AF6AD9B3F15F74A66E041E171143A0A08EA84
-7BA7D2C6ADC207145183EBC2FEC692750C32DAA588954701AD45E0FE7701CFAC
-7AB2635C35BE0ADF227E4FE982D562AFD137835024A5438EE46B96171E184533
-3A736021B4F0A24EEDAE8972A1D10F9AB149726AE541BAD42E9BC4AB0F219D14
-04752DC2C501E8A155CFF3407316FAA2E163E745432EA99CDFC4393583035730
-17522395BCBF2C2FC3C2A319DF4A88A7EF1EB25F21A39222C3929F95D4616654
-8418333C33AF322DFC03C623484E9AF520FD0B8C8BFBFFA4CC83CE4FE08CA55E
-D3BCE8588C940761F4F5E6310434D82D0E88F034E6BEB3AB968FFFDBD942B547
-D89BB2F136C4CC3FA867A9E2C691D2EE9DD38E59BC3022359DCDEA3140D6C7B8
-60FC65621FFC2B6E0EFAE7AAA0A503FA397946C3C43EAB5E0443FA6E8BBBEC7C
-852654FB6C4D05D290A4CB4B3F9BE2133CEF24B9162E8BA3DC6413C075853083
-110CD2942134248583560479B679089B1015D47424F19129EE822D691655AD9B
-4A8772DEADA5130AB6AE36F669A5946E941E5C2457FC781605A1D69A6F253959
-0E9D1B6914D931DFE4B798E73810F45FFCF7AA128EFE7A528F18555D0F81C646
-4F2895B47492BD862C78EB9D641D15B5C98D6983B6E8163D32F7BDF63160D288
-E7A027FF60F64F023FB0E27DFE7C841313B2C49C5FDA2F218BF5C9F154BD7F46
-412FAAE274AA38B3B30E18344B3A8E542B5CAB6DE7E4AF502EE67826B872C41A
-C440DFCF3AE553DC00538FD7F09F0E21EE52651117EB15BB598E57375DB52A2D
-C5187DB0E2AE60309853E356644E4DC45D349226CAA239CD9F1A4EFAED21CBAC
-EE7DC0197AAD1C694D62A9F29D0A5CB1FFD7CCFD9771199EFB09725621826291
-FF7F72D472EADE5D3FE0C0FD4541FC8E158862D98757F8B80BBECAA1F8299D0A
-2E6AA28DAFF9E3F6458CD78114136F46E6B1B0BF68BAC2120710B857998B6F22
-826C61AA95CA9476B606971A7AD550D9901AB38019FA14A4792EE0AC0BDB0F5E
-010B78EF50C96CE03621F21CBF1AD96BEE428EED181BAC0FF4CEBCB416B08150
-735D906055DEBF4A57E77791AC8F018FFE1BCBDB83BCEB4F0105CCCAE44486F4
-BCAC2E6B895353AE411D09949885846EC7444F2850FB419A60BEBE8247F9C3A2
-80D52A8BF246EE65140EFAE795E6C178B9481024251DA564DAE2B6D54753BC06
-4A555858CDF013C36E13F1AD8A581CD9A2DA31BE5C5EB8BC820AB1FA3B94F5F5
-F742AA198E393A1DDD9638BCDC7462C5DC5E0B25A8F9C3408A65B3043BCB1768
-9429E48319CBD5DA8C8A35D50D0923B3B148DA9BFA7C904CEE07F724D3A51CFD
-81B5027FF761E0B45E36570ABC0AD515AFA28E80702B594D2C382CA8AEDD1850
-5CB6F371315BCC0D15AE6D12FD189271C7BD527B1498081CB701474468BC57E5
-BC89A342D7CB23E2D74DFC5EECF14D2C7E802A79D7D0E5BA393C36ECEB6BC569
-70A6B935B0B3C70738A906C0414DDF189DFD5E6667EB44C5FACF64483C37E059
-46B04D17EC2CBC1583620F8FDE5D556E6E12281F41747FF6C18FC6507B33C23D
-09C02BEA195CC0F37D2EBAFFC4FFEC5B83499EC6326F4737704531253BD41425
-FD3280BA73FA63DB463271F0813A522F5A583BF3B0A8C41462B0B829815F59CE
-87A9E152C6545811F80EF3144CDD217ADCFEF1F7AF2B9D1C06802524510EE62F
-EA407213422E1300455AC19E27E157A3F596BF639D8342D339D22B21E38F2177
-EDD19B91FF90AC8A8C2D17182D7E2732CF2E291E555914224C40E7E3170DD617
-9B158044C66A407D4C85225A1CF27BF027EFCA6E171A057270F402E7884723EE
-558CAB4248BAF8BA8E4ED73DE39E7300C91368F4FE4E0C5CB77FDC05F0CD1205
-C3FE450F7EFE1BA4BCF850BF7CC13123AB85CC0F912548B31C41F3772139D731
-2C1026DC05049D887503C8BD76DEFAF0E29D1F9EEA53659D58964B4CCD1C4352
-910FE7D1DCD4C3F71C21C4CAB7D223037E4089287F6A10CAB1C80EAAFE13CA0D
-716D136B1248836A1A81AED1847FEFC8CC60E4F8B2BFD896A9730A16CE788D8F
-EB1BCBDCC2728FA05247B77A7DC18F757DDFA5EE99A80508C9F800F65AF63E18
-097509AA25EF35209B70DF4E09E48E39E93ECDFCACFC99267D45C62FB0A15494
-3AB2F5F92143E0CE824F2306E45B2288B1CA09DDFEEC59075C5C86E7ABE33516
-40295A65887490F33FEA0FE29FC7580690C6EC5A9D1AEC45098F0479AE2A89F5
-556CFD965CEA61549B89C146C6679DD30B22CB26B2964CD4D1167F3D369474A1
-6FE362422CB61BDE9654CBACEF423196B24329280C4E762AFDD18012E6BCD9DF
-8F59E9D57CB4015ECC2B56CF845C11076F5264C222CBE7B0F8FE263165367997
-896C9E9429A402493E160ADF94AA07BE64ECB39B4DA9A1D20E9F29BA9EF770D0
-9AB9050E63D734D018EB6E43E31E523320ABBA1DA1DBB01DE90EC6263A6E7401
-82A4F6E1AA68D06553D5717525368C2D5617158B18D70188F9B649DA61D4C000
-D22AFA6A6B8D1B049FBF486B65F99BD9BA572E7D8D66F4D2DDE3F79132E6E4DE
-20322D9165C4D4774D80E66A3A164E3CFD097CEB2C378076AA09DC214BC7C071
-3C3628A56716B6D84B250993F51759652415E01B51C324F5C0741472001C16C7
-FE5135FCFEE4FE310C74D4B3750A7D37E330833941E11D2D5E8A81BB1FBB77A1
-1523B65A1DEA473D4A61801B29D0AAE08F47B6F2BC9AEB22A7CF88AD5D34598B
-66B0B96364759457E7063DD99C2D2A10B0B880C75FE4F8DBDD8E3460A872028A
-80CB692CF959E6D403C89BE1112380DDCFEF833822BE22A7648A17D9314AB0CA
-BAAEDD4D8B87AA5DF53D0D76EED1A98E4DBC74A2BCDD30EA21025F4964F0B7A0
-427808C00AB3E3D7F19DD5F3FE6D3165E87639851DC114D3863F113D7131E273
-AA0241A49C96455F33F4311FA40149F2BD989C30D55DD8279DAA97B29ABF9A57
-7EE8B583AEE63619C997E17CC528B43FF24DFF6020F34B1D7298A410892ACC34
-82FB6CB27A9135FE84D477243DAE69B0B12A22EC93226EC8F0BF314BE64FBA5D
-1139A9E8F5206ED1EF38DC1B085AA70D9AC6BD3023DA76B133B3A78A093FFCC7
-6DF10CA4B1381E5C5126E7818D27EA2580C4024A4FF89B8BE33FB535C3011818
-BFFBE6B0A6862198AF5DC7E84A1C77746109DDF855814D03CF752FA3137E3CA4
-C058183DAEA56FAA877BD919970CCC0B2F9BF3A18A5F2D3488A0AC447A199317
-09C8F891025269A56CDEA73505D0E795B1868BA3E99FE12FA5DB16226D221B20
-74D17A17E1891D4492BEBD57B0AA319B43A9A8C9F3822242F4E8049BA7982282
-EA10B1C19B4EE1B1E54145A6801A86189EA642F7C22D85A6661D7CA42D625B55
-98FB688C535EFA0B5F44CD2DB8FBC26163EB87BE08E365D95F674F3021248A71
-6A53787895CAA015D74E7CE6E5AE73F2010128259EE56CBC8C313EED283F7EF7
-B644EA2679D81C7859FDEFE87085D3C62CAA2408A3D5C4E2E99C6E4BADA3768B
-E4494F072E9F0A5308BB75850A78FC8CE0609A2AB385CCFB3CA076BAE2BCDBC1
-44345CD924C74625BC9371258C648569883DF67ED83F8AD3FB7B1096CDDD7EBA
-25E0102006C31DCD4D55EFFD4D37B05D881359DCF28E83E4AB1245D3529C7482
-576B26AF0DD75C3A82B5A8F3528EE862CF722C896FA9319A2B813443A535BFE0
-D3B0A2811475A434266395BDFB39207EFF7EA5B6CD9E014D93CAAA22840C0A75
-C8FF9A175D2046CE7F49C4EC8E5572BCC7D7CE7E186DEA70315D674364638E60
-F355ECD080C64D3D301E77A578CA8EEF3EDB0610FE61ED541EFC97536EC0639F
-D406FE774CC5708435F5AFCEBFB0563F7C4D7543869E85451FB3DE01C83AB60A
-120A920DF83AB10EF7AF5F2A4CAC36E119CA59C62C9E58BB725A9464040738DF
-70AA3A62DAAD8E24F6F617EA27E1DBE52B327912FAAFAFE05E7D4CF19F65BD7F
-1033202FF5C0C72C4425F7C32AD0A464BBA1D084538A70D52545DF67396CDFC3
-33A915D87A0260B3AE4CAD4F53AC36ABB222256D85B742D00458B4ECE95631E0
-8F21A496DB102D3A2A0CA7BED0789984056D0F34B7674EFC66AE40B7B444B5EA
-C7CB62A0B1FBE33915522A0845CBE5523D949D4332B5E71AC7B1C177863DCD5F
-93C8C6DEE528EAD00114651DB6644C2146E4A7B0DA91E8FDC6968A99B3D516F3
-0D7CB48A037F3359487385807AF606AED4B1C98F4122AA3534AAFB9D9E37799C
-4157601B15AEFEC90F360A7EA2A741460AF365C9CC06C14C1B863CF02EBB5781
-BF4A27590BB7674AA770862D021207A2183239928C5B33C39D1704E87FA51303
-2A05A597F231044724DC06DB237ADE5FA528CC4FF749B880B91147DB9AFF2202
-85A8E2D72CFDD806DE99B5FBA42F6A042906B40369FB6587F2EFB1141334FEF6
-E8A2B5C813A96F76D4ADBB8BC75D5390F610B18420E4E5B029AB7FB265D776D4
-7A3742B1E6815286AA295EDFD64FE22980A97339EAA6A4A2330893949F3BFB2C
-06F658621EEE6F0C010EE8228DA49712A701DE1DF1870BEAB73A7E3AF4DD86D8
-702E39EB7B88F112019DE6F98AD2EEE53115E7ED8B008400C13EA30813F21486
-EB77B0803F4184E071A836ECD0252C6C9F6BC7DA1164570212B87A15473F6FE8
-8530F01CA2653D19BF85E149B68A2DC307682C23A1AD246CF6FFF0548BBE472C
-C0E08847B3062B4CB03F54EEE42AFA6779D67EC0B9908F72CCEF290418B00EC2
-2794619A951D4513DEABD376D80B71669B683D8BAFF3A86487F8F83B77379CE0
-C1356F16DBE8468B05B5A4DD8A8A3FAE67
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 77 /M put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB75348A88CC361FF06E984C86AF0EA429
-DAA5808CCE3583664AEFE0C59EDA04A147FB51227A5AB0C13942323E9B3733DD
-3EE7DF7F774DE5D0D0980DA8C0192983F1E3EF18481EAF1EFEDA0068BCBDB28A
-7FC7D9191EFFC574588DEC1E180341DC959F8EF56ED5B19F50AA82A4653649B7
-CDCA11A1FF27AFA7FF189A7E8A7C099AEEE0CAF3E121798B2721ABE8808D20A4
-AB6E704C0C376BD242C4966325D4C939669E28B55BC335405C400A9983B89EBB
-B13D8C5F3A148E38E9ABD86D0171C927F1051266CBBD5C5D12522AF7CC17918F
-410BABDD5FDD279338E8B17434DBF20B8E06B58D9E13B731E3C07E4CC350C431
-CE2034CB23828A19AE93124011BF053A3C5705D9BEF6D95205FB8360391C84B3
-7C6D719C0FB459A312AAC3C4256EAB293B6DC729CC5070524D1BDA41091E8B42
-2B6C4A092995AFB40CCF35730350CBA197F3D5BC5BB83CEDDBC6FBDE23A885CE
-61D416B3A6CEC46474A0F42D5B923A61832262F234001DBCED9A7A00F5511F3D
-C2178422A46CA5494AA8C37F51C40339CF9392A7098DF8596EA97C440989CA06
-EEEB5025B29EBF6038EFDDFD6F70989D63440E9C14E2A1040FAF427EB41259E3
-FF3BA255BD4C04BAAC47326181EC7CA1FFB32CBCAB92B1F8CDE6ED0DD3FE6D5F
-EE14B739FC25BB13CD94A0C0DD7CEDD886AAC62248C64B8439064D1038886DB3
-187F017A79318B69963296B4812128EACEFBAAE983646E021F24BDAA2B78E8FE
-2BCD5BFB302103D7DD28668DA7A60C446A27BFF8D6C66F4FBC61D271B91F0470
-16F567DABCD1E8B04CFBEF602BD9CE44B724B3EB8D30CE573EBB13BAA047F947
-90B24F2E49C20E2474EE9D019565E6FF25BDB3F74DF05BB9E148E1C5883A9EA1
-53AD3833A612643316CB420AF3DB29F008BA36A2EF00D25D9AA606862E0B96B4
-A1AA4BAAFF8999589849411F07E2D77946CBCB5FDBD2B0B19717997CBFD658D7
-04F62F79ED661F4D7DC87B9D27F976C7A2CCE456408703083D0044AC4063789B
-6A407EA9CBED9C091E4FB511833EAF520213B0378623279402EA99B58929D292
-143E0E986592AE731097872378122A70DED836C1AB5C759F84FE2E907BE8897A
-940785D5F56F46DE7BDDFE353A61B5B3BC8322A831069214BEBFEED880C0B57E
-C099D813172E3F5531BAEDD24718CABE1B6C49BC24FDE597F38485737E059D67
-86C01213000714E31BB813F06C4EA57CC02A36D3BFED9D7C24C1A1A1D785F4C4
-2F163CFE73F5E6E201C561683862D5E4C2CF8C641EE2117AD65BCE5D8E0888EE
-236E65992789D9ECBF747198CFCF157261E8162604442575C8FC216686094848
-2EFBDD209F84EB7FC0C1D32CE26594009D1736486C59DEC211122EC08996E8AF
-7BD09800A67DCCF0DE30FA91A02B867D675A53E03030215141BE90D4A367FD72
-D44CE7E9601E354522B5D106BCF6F4F7494699CBF5BE9424ABBB27B97BFC1D94
-6336428BAC4F7ECD6A97EAFA546B191C9148777FADBBD726291CACE5E3CD536C
-193B2CD36D73D749646E2694562A742A2B5FFAEF4F25641C0708E9CB543D4C3A
-D9BF517C8B1CB1AC5FF0AC934A5F863B48F49AD02640A5A5168ABDBBD0843ACF
-1D45AF2615AB109F2B20A9216C98D2E10EBB8A20B96FA2E88F471839222D2713
-DDCE0898C3740D27093A1A5CD0E766D5A4D1F64E598B08586102D2E7818AC532
-26357753573416B46DAFC8FF3ECEA87F7698B7E28D3A9D834447FEA89F1E8626
-459B4D8C4EC9EDACEFEF2B3828368BABBD24B2EFCE5F5AB64DC6E5D604BB3D4D
-A5A531E15E586C2C9D2B2E1E6E9C384573F613B6CB2EAEAA987DAD1D97C6A67A
-E1F8599FDDD51C1E0313A3FC8A3DEE990240415044F3E9140F729A2D9EFB116E
-1EABFCFEE5D3E35951B0B3BA72AFAC855CC38B081E0F37A594AC1B893D857362
-CA79723689F4485DC6104D42CAF10014E54403EACC7D6FF7984B92112D64E614
-E4ABD1847DFA29C193BAA452AF268906710001A965D09D61F7B0E1C17B8677BF
-AAAFDA334A797DB064E2D6619B78A52A53CE7EBF4DCAB73DAA9BDD11882AAE56
-EB7183571BD90FAFEC8994A220907482F15C0B427DD8C7D19AAB9B9E2DC8D383
-56D2B1913828EE5A6D7E2525095E7F88D75F53F50681A3CFF4552F071A2FA66E
-DF5D720C350A22B88953BB78935A1077F862960845888E475A6AFCB44432D221
-59D3E6F6B29DA905DB620E4A591FA2E484431304FA591656214CCC6A5B9B81A4
-18B73683D6B29E475A55910C74BC7BA5B69C29EAD6FFCC2F7E3075F77FD0F3EE
-AF907A3492643FDE9BFEE4B37213636F95C7D1CCC31E6091719A29CAC5AC310E
-6714F7E01F2874348FAFC1319C5682500C984C196084477C8902CE6885CCC0BB
-3032574229AA3BDC6D87820A8AC7F188E2E4697F97B759EC7588786DF0EEE4A0
-ED96E45742241A963A73990909652694E69D051D5D73B1EDED01B36FDD5548BD
-1CB45F2C58D83CEF62B589A27F560F7D5F0D00BB085D4A29198DA348DA836897
-4B372D47F8E243EAA64B7C07CBB2C891AD658359FBF6A3805200A82926961D06
-97F53B24512519F6381FC3C0BD6C06E1B79FFE742C7E96835F293CBC795A2B7E
-F74A3FFC97711A379028D717328F564EFC744474B5B665FD2F77C3B946F272F2
-F380E617B9CB01527451701E3D84FE0577AA148F9879BF64373D39B081A8244F
-F1C0791DF8BFB0E37840ABED4DA873648F8E37D5AA523A6521551FA262396CFD
-03948DB6C3CC69F92E53713547A86A8FC725C151BC421DC0B268D4CA49CBA972
-AF2C0B146AD29C903D0915891167FCB8647EB2B5CF9C326AF276F633392022FF
-F4D48A4AEEE8480FBD99AED1B9983A9789CB7B9F0FDF68E2980642808A4CA6E6
-3F58D8A32A49C3ABEA36465F058FB7EADBF4B5E390C0482B81A151BDF17C324C
-7EDC9268126AAD4E0B75B626FF0CE8FE8103EDE6AB1C9C5976D2C308ABD0FE5A
-F4290F893F3532C2F2D6F8AF7D88595859031807E7A7EFB79115CDA7AC1A3BBE
-F151135BFE012872D75C1AD3B738FD8377E2FF25C610D463F46630F9288F1A4A
-224638C110D73302CA98D973011F561BCC890087BA0AAC381AB725ECBF902B3F
-109318F854D56E8E40EE825B828259981FAC0980027D7A874B6B2D77BA4A21BA
-DB443AADA891C5EAC059DCF0D6276CC7C23D1CE0104F1FBD10CD49C73AC3721D
-DF358EA83D599CED87B42BB55F83623B78E1A2A15FF089BA5500773A0AA2A36D
-020F8272EEFE118BE67EC135107EB89FE8ED17C27B8C8EAE93D496A1187D5D59
-507DB228CF7E723A21B36130EF8CF41C289206AB7B3418E5751CC7DD4B20D0B9
-EEA3BB37EA52622AE47B9D6D2B8999178AE01DC21CF1410B3D460352659D5FED
-E07B07461D71B0172E31D31E386CC73501A817409A8A2417EBF6CEEEF26A9A9E
-261990AACA42378302E471C83746724FF16749583DD4E0864717C7DEDEEEF1A7
-051D9D2DC642EB952C2E8A2DAE2FCB0D40CC86C58DD69A26AE12DF2E3F6E3E80
-6F356C4837B9EFDC535431A0CF7D9A8F2D400EA4FAF682C9CF292B5E493AAD07
-B66002C7F1434E5DEB03E6367E5AA549AB1517D0D0461D7A54009F1B76A175EC
-48728A51FB53F136A562C680CB7CD2AFF19C57F6D9E98108C7248CBFF6B12111
-7D860715BDEA90FF7749C0484B276801A06A28F10FB43C96C02813C56B8CEF28
-D0F854045313D422C3214F72A668758EEC05D14FF8E8028665612BFF7F863FD8
-D24381E05BCBF7E62C2CDCEA208C5CB2DE777189008AAB0C9C852273C91D3DF2
-47F27FE8EE1BAB0C6D558736FE1219F4EBBEC5BA57EDE3623A7701761D966B6C
-70B54BC6A98D982BE761BC5B03DFC8F863080C51F49AB6CD434D8E662421BA75
-7F44275723AC782F76EF1EE56D2E3BAEB2B42AC4255C89116DB694986857832C
-EA9AC219445CE19EF472999F5981E231A012BD95D1E8DC206AC8508B23E0A40C
-2FF90E4A3AA64B6642FC67E35A61474EE2CB5B92075A8D4CDEB1E77CF0CE9074
-59D4CC48B769261C338E6CAC537B413503F12BF22C1688CF914DCE5111C1ADE0
-7E54B732891411FA9F9C96413D9C5E2EAF7656159CB4B67C5C98DF2C49E4CE55
-8C354F46A7BB37BEB9EF9083427510AED4C599E1189DC483DBB0D41CBBB1681B
-467BD8385E25434FBC7B109A65AB059A17DC1C09A98DD598E149A3782B16BF9E
-C38DDA8E3B2CE11D15121FCEC1C0C8DE4CB9FB31BB79590DCE07B1F7BF999844
-F64E43920725180BD5C234C898FB937FD7A73F9FF121943516AA1BF32FFF6BBB
-0939EC24CAC3E35B00FC74C513B7417EC3281E30729DEB6FFB1A4EB2D27FB411
-4F235D4AE3355ADA7022D5CEDF6D4E8B58F7DA83D74DCDDA8DDF62A1DC791276
-9AD995ECFADC7B8FFA486938D362417D91F967ED33DEB0BB9FE3CE014F0A3381
-F19F21245FF63AE2F4B054190FF07B9865E27C5A7B2F845FF8F2051451B5C139
-2A64BADBB0642DC195A630E60915EE593DBBD949898DB77D01F00DDCFD46258B
-170799D67413C60E224FA13A40589EC4E83E6A205269C414709C832123D5CE6B
-466B7AC96E6C004E956C8FE45FC2EB1436F6886D3D8C8758B633D4F923AFFAE4
-456B78F514F06D159865718BFCEA50EFA6B2427C4D910CF94A0A1E1B4E681E8A
-B04526B8A26C81C84882F3CA82AA6AA918A5B650A7B2D984F63241BBFC7FC4AA
-B66EC337AAEB3FB2B9BBE21F869F163B70C9A606806F2AA087752722DCD3996E
-83D8A84F3C426F22E28AAA9BE7B7A6FCF9E35D83ADD68124E185704DB19B5814
-300314D885634EC4144D0F40F966A68C54057E62BCCFFA6BAE055A9459B5727F
-5BD5EF17E1E57B178BDB71BDE4D1CE32538AF8E34C35EB730A141A2FF7065EC7
-888F264CFDC33381145073FAA4CEE61CD7B1B5D05F5B8D66F2CB1D310264325E
-12469774B1349BA0DEA910FA6B10DEB3870162A252CFDBA30062D3CD970B53A1
-FA60AC96F0C91FF297B8D2247A4CD0639793E9EE96C249AC5ED1D356AD9DE548
-F0BA2CF1D009A5D26227C0BAF46D473E4DB43E635D3FFC142E7E7E5B7BCFC279
-C693A75E9F9326B1DEC5F8F9A6591CFF5B1D416B21D39BDB3E7866985685E4F4
-6E81512D64E3FF3CC3EADE6A3ABC8860EC1C6F57ACB5436B744FE3B87E19172D
-4E04B39AB7D4EEFC46BBA1FB8C725E08394AA78CAEB110151D405ADD73294997
-B494715CBC8FAD279F384B2651D977592824BBB053517155875FD377E02C67F7
-2C6DB8214CDA4259522FD96249E968131F198FDE65207D993D319324ACCD3496
-1112E84E309312396F405FA410C35C54D5880CEE0EA703A79CA6B141977077BA
-53DE939AA1AB8141A2143FE22A2E843F59208A61954F8413914A376E5F8B2988
-DEDA23CC0821FF29ABEF5123E2AEBBAA58ED975F4E617676BA152D13C6DE7FFC
-8D6D91B6F6FD6D1323A58E55AB05147829721FF633EADB94674038BE9D91E149
-5E1E995819756BDFB3D49F4C8BB82066646B6F6AC6F4C6C36666AF487216ECB8
-2E9F857B548422A5E6999658DDF7E3E006C60DA897AB8BAB3C1626E117AB48AC
-DB47F631B4D20E1DADB776ACB9B8FF37149CB392C561CB7232D9695DF87720F2
-75FBB2FF11D84B698631E75B40DEA03A5FA20BA7DE23C19BC699DC03DC0CECB0
-7CA55FE59B57CE5BF4AF9AA199F1C1FE489358454F2B467168B7A67B958DB736
-7089B0236B120E910D4ABEB482DA536527F89D54C2D2E3E1B9AC27BB11F6E7F6
-C5F649E839251083189993DD72C9A0CDBB1696D456660666AE2B6849CF6458D6
-5CD028D7548460F53D570AC00F76E058D112BD595A346530118591DD7A3B806B
-10726CAB360F7AA1DC2F39E565919818E593F806CB35D78A60A1DA6DE4E1DE91
-4A97CAA0876D73AB8E112FEE624563B2EFE5DE00EBBA9DCE9AD3B3D9EBEB5A17
-912EECD7F4AAB721F2C580451FADBF4CE114E6B025507AD7FDEC1A50583885DD
-EFC60872236CCFD4DD7CA1225D491B6A1528ED20214740CD51B9BB4432979EF9
-CEE142303226BC8FD2F39A304836C45DC5DFB4A507C7AA63ABDB0AED0AC0E5CD
-72F5FDA0F0F344A0ED6B5426CDCC3AD43728F12CB790E400D7A3696036DFB35C
-01B43BC077881798D39CEA3D493FBCDD31782B707E8BA3AD4144B61A495594E6
-9BFC27F3672C84D5C989AC530785A8E8B65975FC60BE99D8EFFF604E84402320
-9D9B6C5D1C522CB3D3860993F210E75DCDBE564DBB76DC0E7E1E3B953BAE1912
-9FB37763AB32317C8B70380531811304EFACF482DC089223794EECEA292F5AE5
-28E68D248059E3C52E32D7BF356D4DF6383791D9564B7EAF6C8F8981AF3258A7
-13FDB9E0EED9EF9557536CD4B51D01AD06C29534793670A56E920E27E6FFC4F7
-7187E86724AD81D920FC6C7DA8BFDA1E7E6EC715B86D2098F1DA824B86EC0EC3
-F30D41A53C3EB4AC2436A98DDE15C84D2EE92363C3DADF098D4772D587250A6C
-CBA058062AF6ED244A3F62EEC0D55E33E73D9398822F78E6A82DB7F143EF9451
-D6EA019100F8B7D9F48A04F400BD0A119EF6882A3AB2305BB698BAAD4143FDE2
-CA17BA31187FFE046BD524ED38C612C111F8C5EE0B0DD2C78BB029D299531FA0
-6E689C12085C64F0237AA7DD50ACD43D648C1FB893F811B49662D6EB5417D713
-3711DF874BF56ABED857B3E57E044600ABBBA0789E18791A565938D22AFE6B74
-709497B58B544238E93F339EE87F978E274FC3E34BF181F363A2E68E9453E722
-D4C0BCCBF68E185CC80D9FF0DDDCFB23A07E27DE63CFADB9CC6B817637F929C5
-26E3E4CBB0D9ADE0F5425C4489BA1B6ABC00F95BBF31137ECB0DA2CC13DFA8B5
-D1107BED920C8FC1021D9A205A5A18E50CE348B3E225F8BD003E877CC4F19518
-26C4B789B2EFC830DFB0C37824D4E08710D66CDA577CF214CC2A5CCDBA5F2F6A
-1CAA6EAF7ED6EDE948395BE9BF35679C870D9AE357A14F5C9FFF6B4CCB0FEFD3
-1FC5A39963DED92072FD8466E99C8ED39DA0BFC95E02684527F824F1515A0C25
-B2225454C1D4EAA93D136E6154FDEDBFBD3158E03A3BCD6DBA1CE3A4CA6EDAFF
-190854E54F95506330CED979655CE299DAE6E452F47DB46CA707404359717DEF
-824A58E00B18DD9544A6AE5C71A7668444BF58E4459D70DCD858519EE0954B96
-89994425DE1C589E8ABDD0BDC620C4B6480B88A4036821F36E01D8D227D38101
-559C1F7D8AA4444F99A581489750B0C8F49842F2B30C5C8CBA63342D80C7FAD3
-DFAA487FFB7B687517392EB1F8EC000177CC362C41C74ED549A130EAAB1DC63F
-3C2A7FDAFE54A88EC34E12A31B2F737DCB571E6A41BDAB7F748FCAD29B09CDFD
-6E05411A6B9FF58ACF4D043C80D9AD358FA3CCB3B055A7E706035BF758B6BBA6
-F0A17E9199399E087F610FC47FC34F7D85757F60B072A70E71625A2618B2EEA2
-7ADB10AD2F7ACEE2FBC62108C310CF5F888A630A6602A72671A90864285C5055
-E6B4CE87C4BFE5DAAF0BA3482E82E43A642599D6D7AEC3BDCA5B08DCE0B8F6DA
-80D667E0F3278C1DA4C9595B2B9BF54A34A1583FE784BE77F0AA68B84469131A
-EFFA2D07E453CD95274C676BBAF5DECE37E8C8867A825CDC389EEAC1DB19ACB0
-46C9DE0CA047261D2C716BC8492B67C0F11F5E8D81D41CD7404D5A721815E45A
-D975CA2ACAE72A9D28F4A0805DE62FDF8CA197EAF84C4805AB023E560582732B
-EA2C7CA388E6E014F2902240BFD92971C517DD77CB50140A0064DC656B57DB6D
-F3E2FFBA815B7D25AE897D1BB216EA81AE4D805A128088FE2C1EE89E8B7DAD49
-6C685C90FDA11A6CDD218E70F29CC2BC73E4DA9635A2E8DF4E6DBBE711CE4EC1
-3EA2515CFDF9863E61495FF691CC4F7D8B454CFAEA25D519E0162A16A7A4E66F
-683723A7166890CD82A9B6CF3141047B710D11969A4B3FA88D2903C38EAC7CDF
-34731A84A9444B3C78D0A55D103528C6A1D881373BB3DCB62909642960DB3052
-02DADEDC87279C43F093A456FA555C06375C087F4B3F925B3000166615D13BB8
-632BB9D486704794755E60E881748A8A9270DE48163AE68FC06BB8C10E9A6C79
-4AE5BB01AB176F2E1B906C36FD451CF2C3EEF8E0B4BFF22EE2410B5617775567
-7E6A4AA65B2694D06EA0B744C5B84F67C0B1FDD782090CC04E4DBEFD7FF5C4B4
-90D77580C624E5FFB419C361FCAD3D0517263BF4CE5B2E5433F43DE272B173E0
-2750467042044471932696A0E10A472A67F9123B0B26518E5A827E0F5107901F
-3B6282947294F5D8398DF13D9FCE3A11A91FB989F931A367DB0F36C775D3FAC6
-45C70263226BB02201E0975382097F2C8F60F396C64DC8FCA851118B24349EAC
-9C1E1F9BCC5B736C18DC45521B61352A2AE120D3B9744DDD81FE76A3EEEAE8A9
-53636CFB1900167CB21880E722D516725A011669FEEDED819753B5EE7C30F3BB
-0FF7822CA48AE2C55E6135672988C94D7B84E92C99067D97AE68E31DF1052E7B
-D879B1339F3D4FDC48B845D8D1D23526E4AAFA6C0DE7997EE1076C8722328C52
-F2F801F0DB9DD243630078C62D6BAC2F725D85E6FC97CC61E1B87A8E2450A0EC
-EFC2FB89D4997195DDA282114955403A4EE7B9C4E0A37DD2A4E994ED3039A73B
-5D3CE6008CC86088A1D7590F70BCD8101A37C8E98D410803C1AC36C815EBDF4A
-3E4FDCB4CDE84D43C422FADE645B3D70D51DBECB5456C017D9202CDEDC54BCF2
-AFC541D0A29C1988549850E11B9F248B9FEA1D076A9129AE6868800316559DAA
-68DBD9D6BD12E8A6A60DC85043CADF74D0E5A2316A7106A2D7F5EDE4928CF873
-3A3F793818549D6701F9E6D82E62BE5ECB4A50D233756FA3F32B38C3B022BC14
-AA4590C99769599F3ED95E1FB6C681A01D8E1FFC2876A6ACE2AA8C6EA982BD47
-04CD2AFA239E645281892995958494BF2CC5FDCBECD3AC7B72AF52584299E6F3
-27F409B7DC0307BF4C9F11BC280507E8F320681C7EB4B7E3956D387CC181ED84
-66E286216900C6DCBA24A6B684C7945DD8CE980C66C1CC5FFFEC14CF2AA2B4C3
-8281ACBD78ABE1EA431458C5F73D100A43BC4C74C4BFA8B5C0FD732D78859ED5
-3FFAFA16CD4447BA7CEEF8ADA934AB62824D85D3BADE26A474F6C2096A77A289
-01BE53356ABE54A78CF1A30EE47BC5C3ADE777C8108FC164FEFD7A5A63518D14
-DC8676560D62083AA50D7E4D83B81EA7DDDB1473A8F4B350C77D70D0CC4203DA
-C0AB4958C7B9821EF0714364EF2DD1DDE2FCAE7CEAEA203EDBA3F93CD5B8B35A
-D8D5AA2281387F82C04FB653AA329DEFECD72254000A30FFACA9A23CFA6E9B3F
-669732D9DECEA6E025F0AEAC902AB785B6C36AD5E1BFE474BDFA4FE0F8701BD5
-87A87AF692F607ABCCDBF45C7D801A977F425F379E6E4A745594B2DD3F90BEB1
-C669B3FDFC7D78399F8C5E0FFCA3118A486BA8720034AAA6CAF7348E04D6E7AD
-A27BAEA87632B7B5A6CD8F3E443A43BBC47F7B7AEEBAF4A14B5C02C471F72FB3
-1E133097D10E6A4ACE1E1C7172CDFC4F65E95A7B71BD0121E1C03CB92865BB2C
-5FD0C7DEFDDAA35943B8D4370FC8EF4C67CE0D94B2C8A6044614625B610359BC
-DC65B29EA1267D6283375F64EEBAC282A2415A9CD48F16D9557BE5E71D9A2824
-3A85668D9F89B165CA147E25FA33AA9713A3337777AE76BC8F6E816CDA5F3107
-898D34A23EA13653E161F3F6F8185F1DA2B0A104130B663AF775B333394637B1
-010784D6E18AEA9F738A41B6E9AF1FA70098A32414D431E391B75FF2D4C05260
-4BF53AA61537978DBE814ECAAE7DC49C705538A3CD883A1F5A54F3FF78FE39A6
-1FE40E8E38D9AC7C7D4665CA341CD0FCE194DD5363A597B349D1B2B0C1F7ACD7
-D58ACA50FB33585996554585EDAFDC55EFAB2CA1DB6D64075FA49BE540CBEF4F
-AE5DA55DC54B2B41E25621478D4AFCAB32D35FD8941528226CE6F5B646A616D1
-B2A42A8F814F83D486B96366B6551535143E06C25C68BC5AC2EC5E45ECC6B9FB
-090DD8A40395C770760D0DAD3810E6D7BDB4FD42B2FE15F97DFEA924389F459B
-71FC2C3ACC8D0E5B20E51F31438BB1B6411DCBA203188EDF46A4A433
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /fl put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 68 /D put
-dup 85 /U put
-dup 88 /X put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 118 /v put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E42779FA15EFDB451F
-53495CE8EFF239E4EC442E1439594549D45F5276F93D496C9AC712D762D0B702
-E894290BA028837304AFDDD8BAA6564E9DC307A14A7A206550FADDC7784DE3BF
-3390188BBCDDD929C82B1D7B529553BA75ACF5B385D31EE3902D96B2B5DDFFF1
-9F0F90FD791E54128C1717F313486896868A34FAFF22E23CEF046D02C147B147
-C5129E21B6A4D0235C6987001CD70C578B2E1221AEEC83116144C66FC8A390D4
-83F72487347A5FFFEDFEDE690DE6778BA82BBD976A48798F33EDCFBE08095B85
-A0ADC3447CE01E563CBA1B2384D9CEF3C2ABA1ED9C47FBBA5E59479B7F07C4E4
-870CD0F97A78A47E865E6A6A3B7CF7C54E8D80DD98A1433CEFB3E3B5EFF67992
-1788C44C04490B1715FC88FFA7732A16A20FD23927FC3AEB81F1DE5A761A8270
-9FD8D8F4F68BA0FB8DAB4818B3B454B5A7B864AA7041CCAD8579E4C8C57774C9
-E2672491D9DA6C13A69B3CD5F2B5F726CDC8E69A713245E7792A413BF0C31C8E
-211FB7ACA96B9F1DFE53FBBB45E19A0F4F3523E875041659DE233850F1AA60EA
-14B0D5BE09E41E1700EF68FDB99F60B07D89B7EE47E90D14C857AA1AACD8DC62
-0461A08E1FF6EECA003B3A853B6E75317AC141146A6C65BFA7268007E139D9C7
-ED3DD944888331A595B78D1B0705B75F29554A99425A33772B8D493632697CDB
-A9C3585E8575ACE0A83F088B04BCD02731CA1C3EC7367FE60C8670A33040E160
-7D88225AC0929A213CD719E5DE3094A2583DFC59080B032C2207DAC7279CEE40
-6C79124ADC76F81C99348BBBA1F463919E60D65AA7A2D47F9C60C5D951FDFF70
-62F711A8F1FDCD8A755FF94B13862ED6286A7A24716B5E7EF799C127BC446533
-2D251123FD43939D6F101A72B75503F5FECD3116089C69BFEF653251707D8CA5
-18E214F175BD81448B657CE4B0E428DF641CD62DB4703241E7A07257DCC82579
-5B67BBD28702BDE8F705CA9B27522EB727F3D2EC6A853B8912C5EB0494BABF61
-61B79B132E7BE0FE80FB52F82681F7B3F59A9679930600AA912C213D60FC571B
-48D6348132C0D9FCC66375CC2A146DAA30901BBD400BD01DD873C3A1DB05130D
-9DD9E04B964023F0C01C9496EEE01526F7DBCBB4DBD567C2CBDC5BB6E780A747
-BF4D7FB6B227BA2351A4FA4509F28148F1B28CC73658CBC5B8CCA0CB34382AE2
-6B72C6D5001338D1A5A91FEA28AA539208097797D4ADA26A6DFE97A8E7069912
-68129C9129E9B6BA40CCAF95F6F1A76535F2530C03239B927F4B90DD4D9FD6B6
-4B9570EA4BEE21B15C25BFB2C42BD4B93911790E17A1FAA9D4843FD519F2B573
-1DAD07942EA30F97DD15C0CD5F51189F248964977B0CECDA01E9747B35BC30F9
-85A88AD77145CAEF05856AB7F8E27CE4FBC269B493C8B907255B27C9004B72BD
-56D93848AA456D5DAF2912ADC65BA79D2F6EB7B5CE17849EC0BB2999E9BFFD69
-27D9749EE8CA9AB64AB1BFAAD6E328160D82DB759EB8C79FB63333AD2D0825FB
-6D6CE77608F71E9086B8AA2759C3FA235F236814B85ED648AF740A5DB4B8F34D
-E0548BE8CFE4B747B05160C698312C91E21F4BC6C5D016CA79D6468BC9A42DAE
-E298467593E2FBC6793F6C1B66DE0F70FC0F0B5E2F3666DB2BA7AFC1F639B273
-6CAD24DD1CD7C5ECA2B33698009F29EEECE97E52AB92ED5FCCE12F8A17821A23
-109316588AE645DB82CFA3D20D0BA7D83270DD17755D39AA391B49E9E2C4263D
-07FD503E1B21034D9971164AA80679A67577B9D17BB30C2E68D544E9F9E52ACE
-7318A141C3ECEC36E78A7A32B00A630DA61A14104B881CDE11E5CC967A4F50D8
-84B11B3D0B6AC6B17D95139044D14F1A8452D4E876675E47E4274BA805226F88
-0A8921F91341C7FDA4714F790A63DFBB316934EBBB9D947EBB021359CBD79C11
-EFCCB67C2D871D24E1617D8C8877D5AFF847A2164FE7A317EEB7459934EE50D9
-682D84592C6D265D2E486593C8F97C1B4B1B1F2841A6A6B20EAF18DC3005A6D4
-61AACC2DEBB2F3E21F308201E90DBCD8E91F3E7104A2C987324797D52383BA34
-66292E7D3A3F414328A9952E49A085437A00AAC3F2B2B3D1401C80B3A55350C3
-DCD55E23DC095AECAF505733A602E2D7E632014B393A7675B19324690DA682D5
-A9E4C7533D708632B5C7F886D681CD958623B760B692B59F6AFB4FF7327254FB
-AD45A9BFD2B86BF576DE1B857238C10B0A60C55EE1BD2E6B23068E354E369E5A
-43D909432F01D3EEF018C87DCE07EC838DCB5D4F1BFA43C87B88363C7574EA75
-0B8C4662CE67059710052A99FB8C59F9A64873E066FAFE5AB6E39AC9E96BBE84
-D6BF072D60DDEC69091DA00EB450570D2D41E5BDF25BA605C906D71230769024
-99A0B1B89ABBBE5EF9A1566F489353F5BB933DAD776FB2419A0EEFA1D3E09CF6
-36B3E534B1F997B86EDE70AE21DCA966A74F0CA292706879F57CFABC2D36B9E2
-A66222FF70B41DA4E80CC87D2E0836EE48C4EDBE3E00DC0A61768F36F46BB15B
-63BE40981C80EAE3457DF22DD5381AB27123DDE774167D39F52B5E04BCBFED56
-D2AE111EF58EDCABDC35FA218472A8EE5FE2D92A346A3BD83E757838EF1D33E7
-0D4CB4774E13115CEAF77069DDBF1EEAC7F8DE102E9F88530ECD9885C8FFF78E
-289EDE509A3AA90906AB6216C88A44EFEC69F29DC2182601F9E6B8E211451012
-75869E10ACA6BF24D090DE7272F50325A84E2559DE77E14CD4FA5B9697B7054E
-9B0EA281B158C8E3E8D5861A9CF983615095F83F766DD92856E982E732F4D989
-60D5586E89218E40DC21F24E8C106BF35FF4C042A120E21D09BD389B3D6D957B
-5B68B758F70899FD22C4C7EEB67AEE7082BF286D5A08F5BC0B55D09613731E93
-AD01B02FA93832DF8E5FF7F15B2A25066CC497FC74BEC590EE442CE96CD10BC1
-69837CB924BD3D6CF5133298C6EFA43E194A7EBD970D93AFC5F21E48A2F005F2
-FA9BD18D8CC3493AC92AF5B80DED65CFF97417BD39CE02D7F04015BF6B87F873
-6297B9BFDC598380A462DB29028E3AF8568E33103D23D8DF87B70E3E6E6C88CD
-A6100596CE4B54D21D10EEFCD9C55B4F354BA75E2DF83061CE3AB08B52C6719D
-B2A601C72B9EEB4029CCBBA09589687353DFF4CDD000627A6E278CA16168B18C
-2470D1EE98959962C8D09DF2BBD7F9DBF925159B5036435A2AFFA895325311E2
-67CD2FDF6E8837DFA80FD49827989F62C798F09DE4CAEC4C1C5ABD4F44A5D687
-42066409CEE7D70A8D03E119FC3B0B416961D48B096402A5E05F12C169D09CCA
-449C8F337C553DFD075A61421643434A85D3E4FBDD8A4898A28523D9BAAD89A2
-407FE142489B2CAA4A6F9F3DF4B65A5AF8F604ADA3BC0B12F06390199B072535
-C2F3E3A1181AC4C7B482748D252BB2DF8DCC0EF128A40366E7F5F28AEF18944A
-D7D732CFD01BBB6237DB50904BE8DE727683B2EDE86A47F8BA7D2F9B225F3C18
-88C26DCCE222ACC87DA6F714DF90E9EA0FDF82C20075C0BBE647CE245186F3D5
-FCD2EEFD695309FF9B6F186C8729AAB72AC012915E824E1B159647511B35F585
-3D9B14F58621B09E7C41483372D75C1D2E9019BA212B6345E56C279E5D9BD852
-FF009390D1ABDE89A4833713D8ED115FA95D0A4CBDF75AA4D13A106CC3CB120C
-28B65473465236BA6E9C94F35276FB6EDA06715912836326E4C1329ECEF1B9FD
-F1F8105DD1BA2D126C4C55B3F73F1BBA4F3200B22264AE9A927EFE84D0BBC66E
-889A9AC9C590A396C82534FA204EFE22B5207908B99FE27D53F735126EB8A01E
-C1A29C1DDC19DCE99C94F89FCB0923E8D3AF48D9315B2BF4A17E98F2224B1616
-DEF1DC0B615F737D946F8830C474536F64917D1238E374C3D77B101F6F088D9B
-09C6BE45EA2F2D1E85EE4521AA53ADECC150BB31A4EFDB7B4F221EF7CE2C6746
-63778794ABF6131F7A4165E154FF3BA1BBCA13BE1C971F77E1C3A1C5A599E9C6
-799FC88B482D1356D4F20FD98B1D2B5FCB19A19454F95062D359D7B3520EA793
-1BEB5E79C549847F8E9C0B47F12F0DC1231B1295683D18BDFF636CBE1DEB31BD
-AA65E8B3E2E3B01CC99ADE954EA784CB987D3D6EDAA5849A870D21BD01972E19
-A8422FFE663636AF0A25F2DE3134293FB78A2E67A3688ED794536FD10277C022
-20BA19F17A05E3C5331D5B96015935699F4F0BE6E27DFA02A794A7BBFAE38C89
-944484CD701F805B70D33EA785114B8B8BA6B3BBEFC91696FEA9B9AB3A5A1894
-1A6C32A5A727F6D1989912F3452C33D10B49E3DCE9BC18BFC60AA57904D97042
-CDB02BB20A9ECFD1A387B7AC86E90B5D0C8311086373CDE82A9B5F5CA5A73834
-E62E3675ED5E24EA04C7DB5015896E00DB5B6097BE07E6F8F00A35BB80A1FB6C
-DAB3CFBDAAA517E2A63EA322B2BE56BC1FCCA14216671B27454606EC045A32D0
-B3108E0B112AF1ED1CFDA1B67C270F5756567D948798C099ABEAE7A6A04BA4A1
-A83122D8BFD934B3F9115CAD48C153C9A29DE035FC85BDEB816AB3B04DCA09DD
-1DA3D1F854AC203107C66466F0261C33007E7AC824CE3EE77DA729EFEA225C47
-C6AF01D45C0B1722A8661C3F5CCF865EEB5333BB39BC7444A363C4DE53BC8D56
-066DBCC68A96AAA64C00AD08772B0209B66F00986788378763DEF5A3E8CBBEEA
-0EE6554DADF6AE73C3A027E8FA95D78FC367CD9755B8BF0C5CBB1850D0DC2668
-4740A6F5C35A09C850E13EA42F83B1FCCEEEBC1CDBC869D376C81D97B9F1B605
-388A190CF8F796DFA121B8EDE0134D42A8986CDB6DBBE3888FB5CF42DD2D6B02
-B5B3D3A82EBA1F0029
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 78 /N put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 126 /tilde put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BFC796733DE9
-AB6BF5E38D819DAB1562DECC6E6F542F9779E2EAFB16903EEDB2138F37F22CA0
-69CFD3ADA1EEDF70596D2D8C0F82BCE623594932068AB28DB6A6811D16DBE1ED
-F496EBFE5C67A99A9DB90E2A604D5EA99A84F330FA30063FF88DB12AD6B230FE
-FD369E8407D0968F60DBBFD54292CA1A05875D1924C861859F55725D479924F5
-493F6F766F0006CC8063CB4F40D4A97379E3F7D5DE1DF8D6B8DAF796BAF20005
-4A291D8AECAB748BF3877FF32265FD40C047E954CA5176CC9208311B1AC4D27A
-258E5CE7C0FC38E8495385F17A0AB4E6D1992CD95130277E89B325DF1C38D5D5
-3F64AAEBABB72E05A7AFFC442E24F7647C43CFD6033F0C06634B105E00658E8D
-07B425F413FE8FEBFED224C00EDFF223E7FF32A012AA613D33FA3F899FA41FC2
-6015140AECAD0383B4E76D8FA5C34C62BB3F73049C1FD09BB47AE03ED8A8630A
-AAF498897DD58D8A4D0AACA53A35977DEBE827EEC1F29A790920964A82DC87BD
-15BAD40B6D60802CBFD4A2EC69D822C800EE3D632864C64ECB10A80299970F69
-17FACC4DFB492E57B23AA747E8735C5002E0E887F92D2F66850416367BAE660C
-8FD2266F60DA6252A62BED9FBD183F9CD5585D35A205E2606F348F4692BF711A
-A82E86531E4CCFBF6609C225A55326CDFC300083A3B8B7FB1101854F3AA82277
-AF2E56DEDF352F3E77B9FDD572E889A7B126F38A4D7F8ACBD602A2BCEFF97E78
-7B5B031059319C73B9F76F16D35C17641F8ABD0AC201A2870E784730B2476508
-45B0DE3AC797B403EEF416B0BE5F34F1DC876019DB7F6EFC1547FF1BD817D976
-5656C851E86EFCB97DBBD49FB6BD76A78FB4FFF3D4EEA1FD1E064903903C3052
-82835AEB01BF0DEF704C29BB8A03A8DE4F2EC07D8AA8D5AFF6D4F3329A8E5A76
-05E89517DBDD95DAE202DC845E97207FC5548BEA9AD8C38A78F156ECF3A70AB4
-91FCF1B91B727B198E5F3BEF20010B8ED26E96B6447F69192A04FE2FD3126BFB
-984ED808F107A3B1DE7774F0B3E3DB38C5835AD5FAD0F8CD061EDA10728DC794
-BDC243CBF68B5E1EBDBA1600931C625070155243DE79745849E487277FCA3DF3
-0BBFC149AF46E96202947944487B5DDE8E1FC1703F81538A6020EC89E332115C
-E5DBA7EB6CF5AE1B5CCFF4655F06333076384494738E730F0EAC5A00B8413C05
-15C01A8D78D1ECC2D2258E2D4140428945165A59C883B67B600436CD5B1E7CC7
-2DAD551B7D668B87E6565E0D382429397CC8EA507B4F3DF40C60E84DEE076D42
-DFAC2FC2E9BF28AB017C29E0A950417377EEBB8C8F307F96ACC5126F9D19D5CC
-62FDEA276D4D646EE024110E62015499DE242442AFA8C2C8CA6E4126F2858680
-F440EC8F58466FE876EDF0E9D4C7B9592AB23EF5444FA95E026F7E8FF8025B48
-7D9083922E158A721EEAED385270C6B29CB4D50B8FC407AF40C5F5D957B2E4CD
-E43484C388D25E64AD67EF75932CADAA6A87AD31DD7AC61AF9837CBC5E43433B
-5E0B5B1129794538B25DF83FFB82837A45DF19385C15D20FDE3CC5F314D97F05
-7CD23994B9770C36235C5F7699B14C48A37D961766519D9F8EE3A70BDCBC6AAF
-0342403AB2E843FC4024E40CB5900F7E570C4DA2A5E838D5A0B75595DF2B8ACE
-6309D58D5C1B09618282A5B1F1FC6CF71F277BA6A6093DCB3B0CCD854C724BE6
-8AE23433C5A56C6203153BFBCD4776EFC1108C13342345C24A8196BC312A3630
-8F91BF9B041CB590120D4C8777A12DADC80573D419990430278F58D223DDFFBB
-4109661B1E57A964841550C6A58D739C729124540F2B3260B115A15E1495A4FE
-409094D70EFABD3992DAFBAF3B1CDF714C33EC6843ECE874EF9A4C2479A9969B
-32A6B95E82BB0E73A3AB037183A5B190C1F99BCF5E9A8B154F120FF51B52945F
-B42DEB8223E37D0D368A0077069510E326356E8592AF1CD3D12DFFBF84CFB123
-2BA7C7584A9CB397F040104A7F3AF70BD29780F9C836F5521D51E0C08A2D77A7
-38D8B1B9EA9377CBF9E0AC2E71C0C7DB75C8F10BE551D3CD64D41B7239549B2E
-9EF2D221E5A0141BF12C3634812D05CD81F01074CFB35687FE76BA122374FC4B
-F0654A02E6F299B005F4473FC1030A05AF50ACEFB15E6C629871FAC24B53A264
-5CA17B0D4A42E047315761EB02C4CB7EF4B2D0B1242CE2E67D1B62FD99CD47F1
-E6C144B6819944C9ADD16D97E590B5BA5A1CECD85CD8A66FF002AF6C1DFB110F
-BE4988CD53F97612047E3FEE1214817B188BBFFCF00A97485D4260E12FE68C27
-E03E42C9921008C24B78BE865C55EDE7B7F9E25D5E6734E4DD45336B807CE24C
-224BDF0BC21479ACB57E7DF4CC115298C4AA0F3D67E8EC50DEBC59C86A00FBBE
-C65FD4684BBB57C3AB0C57FF5693BE81FC118B40344600CF4DA1610B2589036A
-3AD412889977FA8D1433B616409DF38A8B82D0CF473C2D870885437FEAF125DA
-18A003B3706A1FDA2542CEC3A02F49260DDB0D5E20A515C0C8A96D668FDE0785
-F450173006E30B5409812211F81025B9A933F9B44952AAFB5D69D31270BA29B8
-DCB1C183AE74C3D0C48F0B59C61AD0C3B308621E63A322F259B4E3E763CA8D3D
-E280C27B463309989296A884EAE4603BCACF21957EDE23260B6927318908D248
-EE8E3C77BDECA95260901E13C5B5D5BEF2E0C391D3D725ECB675512D1544F3FD
-A128D5E47000B2DF2F0D49FF77331716C44833DBD565F25ED5577FBC909040D8
-CE1575A1A85A307F58820538AA4484B80D8A9043C49D145AE9EABCE5C6B45FB2
-DE5399440E264DF18CC9CBBCDFB1EFCBC61FB339D9F66D3ADE1898FFFC448743
-9328ABEA62DA73B7BF495C8CA7A9F0B6AB7DE17D63445909806152C2333D57CC
-D61296D9E8F56851CE6C335D242C53D97D02C5ACCC70792D196F12551E7FE0F5
-7405BDA1B94620086E14CA498151EC184005996F69AF873BD435F653611D550E
-970F88DBC10E814EC1CDB108891A1FCA836E8635D65E165445A30489B8A85463
-59FAF1ABF818D4425979F800C705A1A78EC5FA411C03003064D779555AEC75FB
-8C9EA656E19417F8AAAAC61CD0343388679A07F38C2B0993D021BD8FFB49C92D
-9D45A58556BF5AE337AA76D1CF229CFF14D89EA9CA756BDAE37563FB27A246C1
-0AA58966C65B6309F2306902CA90BCA265238B79FFEFCD1D9D73122E12F024B3
-687A69C3CAD4895F7C0BE7237C8F3B6B90E99365FDA4172E2BE2C6C3B89A6BE2
-A72905F52658D1A797F45B918B9E8F9DB949625C76BA70F615B8000B38E33ED0
-45234BB909DE7CA5CAC433253DABBBC85CCECF70B5E57FD7ED50E4C17712FDD3
-6943F034A47B66C116D8A229747AB29F7609BB289513E57CFDB53CB9F64FD46E
-522625C48F7928AC40A4AF9F2FE8578B32B71E650D118C0BBEEB5A453C0D5B9C
-7A85821359158EFFE77488468D02095C13E2193C37007CF7BA69AC1498948150
-57B697A10D2E7636D39EB760C8825CF066463C9327D54666EA9A133D766BAB41
-033AEC2EF577C27124D43B4F1B403037E4D3977D36B6EE77E7DEC5EFEAB66153
-8E02C767995E1B65C6C3900B0625E05B30720554CB66296A673DA3D6222E2DB4
-26FE3DC0CE1204F67328DFB647E673005F69D412C1FC32F24190B7C2E06D6584
-D64CCCA34DBB210A38FD94D03CB1C0320597AED024EDE20FD479C89CA56EE17F
-D3A213BCF5FA8FEE9C9362F2DF55C68DDE73F6C8F794957EED0F6B2DD1F7BCD4
-4A3908333C7DB4A2786FA78DC2E4B8B16DC7CF61BEFE12914992652B3AC9320C
-39ADB78E00717F3C56C0FD6C834D156B6D4391FA539C2AD4851C855AD2A40BDF
-8B479FB348CE56839128FEB0A88FEA411CF488C959AF2D03B9A9ECF2A38369BF
-A0C898A0D69875B1C13EE48D071F20AFAEBDB09C5BD325F9EB2DE64C0423D354
-4B17058FC82CC0BD6518AA179609D866C712EEF7958AAE3FDA22ACFF9D939CA9
-FD2BEEC408F16B526903BD5CC3831BF4D7F55A1B6D7E0BCAF1D5ECA4617BA698
-EC18A62BF0DD66ACE6DE648B3E270D031CED116B6817A2159134197B3D88DDEE
-9D57BD478FFFB018D24FC3098B5821775ABB6476CD2BAC2693297B76B12B4D25
-D1F1608EBF965619E62C6E52D93FA52824340524193CE4202D7307C76AF5A258
-FF6CE0AEF6FBE5795F1302A7300F74C4218222F1EE0C9D4C57168A5C1B65867F
-4C3A18CA3409C052F6B639736B20DA21CFF058C8B579ECD5E8AFAE20329B74DC
-F8B81BE1DA33C2F4F66A3B393AF83E808D86AF49BED141156C71FB4BFAFEE8FD
-5DB0D18F32409F035BC5791E2D68A3419E25F2CA07C4B5840042C1641336CB3A
-99482001A4AD383754E09533CBBF56911ADDFD49A0625A40095372CE23CD0CBF
-30A7433A0C98EABA19B78DD7677609900F6924180EBA0BDD4E7095498DA18610
-33A0D1C336BCAF26B18138D6CEF9B23ABA3D54818C08726DF0AC1684A1A6E183
-A97F06219DD414D64D1EA84438844F1D2C5BFA061C7ED503EA63E2D5D38C2700
-92EAE8C698D0B3A298288CE15406223895DC7FDECCB9E02144EF27F452AEFB33
-B86CF15D5327B079CDF2C9D41837457FEAD7FDAEDD6573A20E7C4BBE2FB2C493
-7C5D15430C7E3BF9FC4BC25CBBEFB7BC96496BC6C9AA030449B0B8EDDABE0F8D
-FB6E9CBC51F7FC28B5DCBE502D4B773A0736B5016E9B0CB2F0A3E6F5F40F3F1F
-1C119B89C3CB5A294A54DA36245F1BED8C231B08FA6DF3D18E2A989B6E01A44F
-067361DE404A33C847395584B5DEB00555BEA31C216C21EB481970DCD7466292
-A605ECC2999E3961B95E02B3033EFCE2DD08A59AA0C39EBD1ED69264C5856050
-62F23793D6CFD17BA93CA4AF0B67F8FC6CA8708D5B8AD87526977A86C4F8A0B3
-CA104172E1419B66A0C3478D7C2E1DD7C887396EE00D8CF64A0954556CA12FB5
-06BB9DA386BF5ED9544CA66B6F79D611DE87706BA65CFC2FB97772538FDB929B
-CAAF81F1EDA8DA486D3B6D4E30400940950B25F227545A88D4F9855EC9C04727
-CF5C54297C3085F2F9F0527EAECB549277CD0853177C442343629D6AEF311AFD
-8E0F81107495340A20D206441FCABC0E58A3DE47580E3F2C63818F9EC0C07A7C
-FA63DD74DF7AF66D46AD23886C713D0EB7AAA682DF72DA0CFD9063489A6E1B54
-34DE64546E1A61F00F1B7ED0D147AB48864D085C50FB5C9B69599D9234FBAA5E
-7AA25D466C0C878635ECD52868AC82AF488105E3323222E7928AEA11E24CD5BE
-905195072DF90D2A4B2F875B5B334775E859BDBA1523337EC60ACFEEA5B466C8
-4C1819DD53F3F63954949BA2BDFAB43699C5860DA2B542CDB48C99EB3DE2AC0E
-1B69AAC433AC0CF2389A529768C56B1B945A2AE0A4134FF778AAC525F632EF1D
-685BEC8F8930158C502AC8F6FDA3FE39AC2D2EE6BD00EF6B083672886E82D121
-B74885FBF48E6F12CC5D063FF0FB941F916257E5153473E3A7DA9A0F2B183A67
-678DC31A2B62E3241FA8F930A53F79DB88D6F53AFCE6EBD24EE22903BF59C17C
-B36DA49DD50A959A916BE48990534A82814EF1835B235F33E20A82892C8370E1
-55DE7434136ADB948463CA8480C9B8004FE51B025672BCF3B50E1B3170AE776F
-86E3B81A4D64A59596C397B248AA7DB1C63113446EC7CC319B7CB5C4583848A3
-E1D7A161D00F8C33E38AE4CDBE16A2D03B5956EFD11305C91A9E2D558CD0CF5A
-29BFABACA34B3822D0520E69A03950E608AE76067D8F4A4E5548E4E6773E726B
-37C352CA410740313B4734806FCFF5B5C5798BC3D0DD4184713CC4667AE07CAD
-D1B0000AB134C156D11316BD87695C383A00F281DD797549F75A208C3E596A4B
-8EFC3CBC7798832B72BC74986B2ECF2715899B32181978870F502E1E56732AAE
-79FFC3290E2F7E69327A429355A9CB2B6D5F70E98F94D82C8F4B4A581D58DB00
-D3F5811978BC4AD970C525429839A99E92AE16CD83CC81377497DDF1045D7A2E
-E225371928FA5F77CA680C4CEBA217BAD84CABD9BB68B8C6F8B44C26B6CDA3F2
-7442CDD941D6ADEB041AFD84B7327BC153FFE695E2A6EB3960FF21B9604136D7
-6AA16E075135F5FE571229C34102E0BAFBA0A8E854272E7B5CB7668E825A9257
-E1A71DBCC669C5CDF9BD69296A65E083644E8E3C0FEF5C225590403E30BABF5D
-2A20D0ABC6A11A9A388F267444B6960EA39EFF8ACD46B6BFADCBB1A75A5A7DC3
-3A78B903600647E637C29B43024408E8A64D56E6A0DB6E80E6C5125A7BB1972A
-AE82435C9DD330F815676DDFA0E9078A1F2582AAB6457EC40FE777E007C195C6
-8B7AE97A9D83585233B3BA932CF736BCA54DD9F0F2E96174E259E108ACD05FDD
-0717DDC04605D5DFBA0A26E0BEAD8B971DD48A494AE48A0D9F412ABF47A7466D
-E95B766609FB6929A55EDBDDB33C2F9EE57AC3240909B44B3EACFF8138E30126
-75901B1C04ADE99F2917C9021FC54195C8DC88E0E864EF4135D74538B4731BE0
-B8EC7EC672CE963F8E92D23AD7D78F28F8CBB2551C1E5807ED35EC720A3DEEA3
-0F10FBB4D5C90F1A53043F41B8A5418E84CFEA4DE0A3A06BD24DE67A7F9E5951
-C5858DA19F525454FAD318866825514B30F3CC5F9E4932E9767E3C01379DE9C3
-B8ED4FBF9426B22A7099BD90E2342E2EC431058AC3F8819C29A3BBF892D3B300
-B4D38F8CF6DCB7E60DEAF01AF41FC87A175280C07B61D3948EFFD123C781D8C6
-100DD08998D2D9B62A6B0C119CD7C65F59FBB319BB8DE030566CAE36645FAF1F
-A1F3C9B14799F4A527D45BC851F27ED5CEE5C86916CBCD3AFDA3089E2942B5B2
-FBCA6AA36AB0661D539A165D6B8BE40DD445382D4EF87C1EC7CF66D31A57E8AF
-3158876B4458D06899CE461F2E09EAC2086E95B02661EE17D349D3A2CA503589
-119E2DE92BB0AEF7C819E7E49D8B40E1F5AC042E3C6574D2972DBC50A96EA57A
-7A36D6081406720078015E428161719D14E986D5AB8052CADDC9F5DFA163FCCF
-208F36F5CC390D21A2996EDA8136D36EC04227C8884FDCD4378FD64AE8DD8AE8
-960FC00FF4FD7BB839978C85FB92F8ADF1EFA66CCF223A1097D5F10F33550A3C
-35488FC9F6B5A3D9325E228CA6FDC9D70CE739CEA33CD2B53D26C6C71FC9A6CC
-FC6372C82A89ADD70D26ECC576F0DCFABD1CCA3F6C85C3D5EEDF2D7B99B341B2
-38076A3BC5D4E7B5BA4D2D0BCA028484DB7DD0503159B3189EAF1075163CC1A4
-311AB0CD2741E6F8E5F1DCDC7FA2356B5BD9E5C7675014EFE0F4DBB1EDDE68D0
-B4E7F651FC65BACAE0CBFC8D59920645C9AAE3F0E3768583663432A5DBCFD7ED
-79F27A5570EAD899810C197373A5DBB7C0B58C2B9123C63B949626F6C326460C
-A83B401EBB9D5A62931BE6E4300BD706520907616F05746FEC30FD8FD42E5067
-5DA5D298E25D0070A11471D10014176FDFDBD80951EDA999EF299E0316F8E37F
-56091F787CFC5B0A05BF7C1185017CE1C6224D84D440CA5D63D1E6BADEF68B17
-9071DB6D63A56C257476A624BD0FB0CD0F6BDBC1492F1AB978746B06C4AC558A
-7DEC2E3DDDA09E0EAF0CBDE93BDD0E7D539F089F572945BAADFD778304B7010E
-D088C0464D3E8CD26BA814B35D29832749059DC6D1DC1333B4F02B8FBA646167
-31184FFFC7535B66AB6B81E88334149E744EE1CF42EA82DC0DC891EE1939F7A7
-8C2C4044690DB8EA7C7FF0E0399E1C72B13EDAABC0B939D903556A3CC1A0C228
-4F8577520A8B89D8C80C2A62F598A85B330BB4C5A0307BB7CFCC379B38C08406
-80574755A5DB13E8D899E79D2E13AA39967091B8FE9B9215B217468B8D7A9194
-49FC1BE8273113132305A78B14DA281CF31EAA2822ABF3D665BE33EA96293CF4
-EC7A222A25B599513F403EFBCC972074B9A49917614B81363E3674007F39907C
-78FA7BAE8E1ADFDB81C28F8A27564EE505CD126EA32D7C0B176754BDCA993B17
-2979E4A018E9501481ECCEAF5A145DEA5382AE896FE8EC7B80DD33CD053B8144
-F2BB0548F1B1E489C7953ADA4CEB33CA011AE4BF71B90CBA3C5F719527B059E0
-77E9848CE582712A4654854150F6C739CE5240C4DAA239C85B18D1902D310220
-D10AE3FA1149FC58EB2B936E480749B4BBEB1A9FDB65AC4043EE72A48AF07B51
-AB7F5C3437B00E93E4888DD5F660A210EA954007231C255397328618CA971A3E
-A268C9633D58C1C5B228D155D8F061BD0F9A9390C618E280B6EA8F083D445A3F
-EF5701B4F769E1CEE1BE6DB102CE66933DF57F8D39A7DABC0AC3F19968C83019
-01B25061EDFD2E29AC7FC1AEE896F51FDFFFC0F3B9ED1F5EBB00FA8BD1C86AEC
-CF33BF5D39563FC2C131359A5C669B5056D1B06518AA58E6A18FD999B3197281
-C653E88BDDEC41C5DEB802D4BC1C2D5858178F7730C03C2465C49DDA3CB887C9
-0A04D7C525F93320C8CC3C492326DFB99A55EC7BC860B0BD8FEA308960D4D3BF
-A82C5EF341C8D2DEEB5133B7E4F39B4E0759DFD8BA214A1EED1CCD89D3F4566A
-C15A16632F567924C83321AA092F59353A34551FBA8151DB35A12373F488FB53
-F7A1D1C8E3BC571569B2D945A164868E61344BA82B1CD2DF9196EC6B44954E09
-03F2FB3DEC44B955FB6D59B099826ECDF9EBCC79A99CB52F14DAF8E74CE5341B
-BF2D86819AFC83800BCA6B9B40DC2D8D5C3F1A94945E3134BEEE8D132141E3D6
-075684753B8AD71F3D2685384EED24D9982B7DFB09851BA1C50C0823F951BC53
-2E039CF72CA42AC8FA3D58FC7E633AF9030296382A65803C6CC8E28A6D84373B
-94E47E8DC6406253BFF53396F303C1CA04BF3AF22AE7151F7627173FB87655D6
-F9C15D36D4D8DC074CA7D9004DBE10E9C23AC662E47A1859A0A9408BB5F426DB
-68A4943C0630090E1639B16A9E289C929F31246787ADF5F061DA7BFA1CC2BE23
-65DFCCB6FAF92BF5016B104080FE0877ABB26653361FB4B684898CF0C0448AB5
-FBDCA703D4CDBCA85B9539538461CAEDF25AF85E09328D183202EF479E046C84
-02CEDC8B29A19766AD4ADBC39AF94DBB465DB7251A250B8313A9FC70D0394BFE
-7C87882DD6E75459AC6DD1DE1B6CEF7DEE035EBA072A177FA4E4D11217DFB0A5
-9D4D08679D615034BAF2B3C92FE65C01D5BEC90FCDAAAEB0842113902F83DC6E
-D212A45BA748C6FB3108AAFC3EB912A8C59451088B8E972ECF2739204306C9D9
-D5C2E35AEEBBD7805F000EAE98E259291D6B759BC5123D4541292FC9B9393A4D
-7215D02871452FB02DE816D615B59C4822B5A335C3A61E63F794C025CFF2BAE8
-B41CB92E669C8D95250C3FC45A05478B2D6B7E01D6315E222E22509CEF3275E4
-4435345DB53CFACFFF69DE98E913F53C6CDD0B34E38279C0E7DDD774EC949F2A
-28410AA4E109CC284A5A1D2172218299FDF3E9
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 40258431 52099146 1000 600 600 (dired-ref.dvi)
-@start /Fa 242[61 13[{}1 49.8132 /CMSY6 rf /Fb 134[32
-32 43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19
-27 34 27 34 30 11[45 1[34 44 1[41 1[45 54 3[22 1[47 39
-41 46 43 42 45 7[30 1[30 30 30 1[30 30 30 30 1[18 21
-18 44[{}48 49.8132 /CMR6 rf /Fc 129[35 35 1[35 2[35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 1[35 1[35 35 3[35 35 35 2[35 1[35 35 35 35 35 1[35
-35 2[35 35 35 3[35 35 35 35 35 35 35 35 8[35 35 2[35
-35 35 1[35 35 1[35 1[35 35 35 35 1[35 33[{}63 66.4176
-/CMTT8 rf /Fd 134[60 60 2[64 45 45 47 1[64 57 64 95 32
-60 1[32 64 57 35 53 64 51 64 56 11[88 1[64 86 1[78 2[109
-3[43 90 90 72 75 88 83 81 87 52[64 67 11[{}37 99.6264
-/CMBX10 rf /Fe 137[43 1[32 32 34 2[41 45 68 23 43 3[41
-1[37 45 36 1[40 8[61 2[62 16[62 26[32 32 26[45 13[{}20
-66.4176 /CMBX8 rf /Ff 129[35 4[37 37 51 37 39 27 28 28
-37 39 35 39 59 20 37 1[20 39 35 22 31 39 31 39 35 11[53
-6[53 6[55 1[48 54 51 16[35 35 1[35 20 24 20 2[27 27 26[39
-39 41 11[{}42 66.4176 /CMR8 rf /Fg 141[57 3[76 4[38 2[42
-63 76 61 1[67 14[103 13[105 99 67[{}11 119.552 /CMBX10
-rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-letter
-%%EndPaperSize
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop -91 -364 a Fg(Dired)47 b(Reference)f(Card)17
--256 y Ff(\(based)25 b(on)f(Dired)f(in)g(GNU)h(Emacs)f(22\))-152
--176 y(Commands)h(mark)n(ed)g(with)g Fe(\(D)n(X\))f Ff(require)g
-(dired-x)-450 31 y Fd(En)m(tering)37 b(and)g(Exiting)h(Dired)-450
-196 y Ff(run)23 b(dired)1244 b Fc(C-x)36 b(d)-450 276
-y Ff(dired)23 b(the)i(directory)f(of)f(the)i(\014le)f(y)n(ou)g(are)g
-(editing)150 b Fc(C-x)36 b(C-j)g Fe(\(D)n(X\))-450 356
-y Ff(quit)24 b(dired)1226 b Fc(q)-450 561 y Fd(Motion)38
-b(Commands)-450 726 y Ff(mo)n(v)n(e)24 b(up)g(to)g(previous)g(line)769
-b Fc(p)-450 806 y Ff(mo)n(v)n(e)24 b(do)n(wn)h(to)f(next)h(line)806
-b Fc(n)-450 886 y Ff(mo)n(v)n(e)24 b(up)g(to)g(previous)g(directory)g
-(line)469 b Fc(<)-450 965 y Ff(mo)n(v)n(e)24 b(do)n(wn)h(to)f(next)h
-(directory)f(line)506 b Fc(>)-450 1045 y Ff(mo)n(v)n(e)24
-b(to)h(next)f(mark)n(ed)g(\014le)762 b Fc(M-})-450 1125
-y Ff(mo)n(v)n(e)24 b(to)h(previous)e(mark)n(ed)h(\014le)640
-b Fc(M-{)-450 1204 y Ff(mo)n(v)n(e)24 b(up)g(to)g(previous)g(sub)r
-(directory)495 b Fc(M-C-p)-450 1284 y Ff(mo)n(v)n(e)24
-b(do)n(wn)h(to)f(next)h(sub)r(directory)532 b Fc(M-C-n)-450
-1364 y Ff(mo)n(v)n(e)24 b(to)h(paren)n(t)f(directory)764
-b Fc(^)-450 1444 y Ff(mo)n(v)n(e)24 b(to)h(\014rst)e(c)n(hild)h(sub)r
-(directory)561 b Fc(M-C-d)-450 1647 y Fd(Mouse)38 b(Commands)-450
-1812 y Ff(visit)23 b(\014le)1144 b Fc(Mouse_Button_2)-450
-1892 y Ff(p)r(opup)25 b(men)n(u)880 b Fc(Control-Mouse_Button_3)-450
-2095 y Fd(Immediate)37 b(Actions)h(on)g(Files)-450 2260
-y Ff(visit)23 b(curren)n(t)h(\014le)1040 b Fc(f)-450
-2340 y Ff(view)24 b(curren)n(t)g(\014le)1032 b Fc(v)-450
-2420 y Ff(visit)23 b(curren)n(t)h(\014le)g(in)f(other)i(windo)n(w)516
-b Fc(o)-450 2500 y Ff(visit)23 b(curren)n(t)h(\014le)g(in)f(other)i
-(frame)574 b Fc(w)-450 2579 y Ff(displa)n(y)24 b(curren)n(t)g(\014le)
-955 b Fc(C-u)36 b(o)-450 2659 y Ff(create)25 b(a)f(new)g(sub)r
-(directory)734 b Fc(+)-450 2739 y Ff(compare)24 b(\014le)g(at)g(p)r
-(oin)n(t)h(with)e(the)i(one)f(at)g(mark)207 b Fc(=)-450
-2942 y Fd(Marking)38 b(and)f(Unmarking)i(Files)-450 3107
-y Ff(mark)23 b(a)h(\014le)g(or)f(sub)r(directory)h(for)f(later)h
-(commands)83 b Fc(m)-450 3187 y Ff(unmark)24 b(a)g(\014le)f(or)h(all)f
-(\014les)g(of)h(a)f(sub)r(directory)248 b Fc(u)-450 3267
-y Ff(unmark)24 b(all)f(mark)n(ed)h(\014les)f(in)h(a)f(bu\013er)460
-b Fc(M-delete)-450 3346 y Ff(mark)23 b(\014les)h(with)g(a)f(giv)n(en)i
-(extension)515 b Fc(*)36 b(.)-450 3426 y Ff(mark)23 b(all)g
-(directories)932 b Fc(*)36 b(/)-450 3506 y Ff(mark)23
-b(all)g(symlinks)982 b Fc(*)36 b(@)-450 3585 y Ff(mark)23
-b(all)g(executables)901 b Fc(*)36 b(*)-450 3665 y Ff(in)n(v)n(ert)24
-b(marking)1075 b Fc(*)36 b(t)-450 3745 y Ff(mark)23 b(all)g(\014les)h
-(in)f(the)i(curren)n(t)f(sub)r(dir)464 b Fc(*)36 b(s)-450
-3825 y Ff(mark)23 b(\014le)h(names)g(matc)n(hing)h(a)f(regular)f
-(expression)96 b Fc(*)36 b(\045)-450 3904 y Ff(c)n(hange)25
-b(the)g(marks)e(to)h(a)g(di\013eren)n(t)g(c)n(haracter)259
-b Fc(*)36 b(c)-450 3984 y Ff(mark)23 b(\014les)h(for)f(whic)n(h)h
-(Elisp)e(expression)i(returns)g(t)108 b Fc(*)36 b(\()f
-Fe(\(D)n(X\))-450 4191 y Fd(Mo)s(difying)j(the)f(Dired)g(Bu\013er)-450
-4356 y Ff(insert)23 b(a)h(sub)r(directory)h(in)n(to)f(this)f(bu\013er)
-408 b Fc(i)-450 4436 y Ff(remo)n(v)n(e)24 b(mark)n(ed)g(\014les)g(from)
-e(the)j(listing)419 b Fc(k)-450 4516 y Ff(remo)n(v)n(e)24
-b(a)g(sub)r(dir)f(listing)823 b Fc(C-u)36 b(k)-450 4595
-y Ff(re-read)23 b(all)g(directories)h(\(retains)g(all)f(marks\))280
-b Fc(g)-450 4675 y Ff(toggle)25 b(sorting)e(of)h(curren)n(t)g(sub)r
-(dir)f(b)n(y)h(name/date)114 b Fc(s)-450 4755 y Ff(edit)24
-b(ls)f(switc)n(hes)1065 b Fc(C-u)36 b(s)-450 4835 y Ff(reco)n(v)n(er)24
-b(marks,)f(hidden)h(lines,)f(and)h(suc)n(h)375 b Fc(C-_)-450
-4914 y Ff(hide)24 b(all)f(sub)r(directories)853 b Fc(M-$)-450
-4994 y Ff(hide)24 b(or)f(unhide)i(sub)r(directory)675
-b Fc($)1866 -364 y Fd(Commands)38 b(on)h(Files)e(Mark)m(ed)h(or)g(Sp)s
-(eci\014ed)1866 -269 y(b)m(y)g(the)f(Pre\014x)1866 -103
-y Ff(cop)n(y)25 b(\014le\(s\))1193 b Fc(C)1866 -24 y
-Ff(rename)24 b(a)g(\014le)g(or)f(mo)n(v)n(e)h(\014les)g(to)g(another)h
-(directory)79 b Fc(R)1866 56 y Ff(c)n(hange)25 b(o)n(wnership)f(of)f
-(\014le\(s\))713 b Fc(O)1866 136 y Ff(c)n(hange)25 b(the)g(group)f(of)f
-(the)i(\014le\(s\))601 b Fc(G)1866 216 y Ff(c)n(hange)25
-b(mo)r(de)f(of)g(\014le\(s\))854 b Fc(M)1866 295 y Ff(prin)n(t)24
-b(\014le\(s\))1183 b Fc(P)1866 375 y Ff(con)n(v)n(ert)25
-b(\014lename\(s\))g(to)f(lo)n(w)n(er)g(case)524 b Fc(\045)36
-b(l)1866 455 y Ff(con)n(v)n(ert)25 b(\014lename\(s\))g(to)f(upp)r(er)g
-(case)507 b Fc(\045)36 b(u)1866 534 y Ff(delete)25 b(mark)n(ed)f(\(as)g
-(opp)r(osed)h(to)f(\015agged\))i(\014les)217 b Fc(X)1866
-614 y Ff(uuenco)r(de)26 b(or)d(uudeco)r(de)j(\014le\(s\))648
-b Fc(U)1866 694 y Ff(compress)24 b(or)f(uncompress)h(\014le\(s\))588
-b Fc(Z)1866 773 y Ff(run)23 b(info)h(on)g(\014le)1073
-b Fc(I)36 b Fe(\(D)n(X\))1866 853 y Ff(mak)n(e)24 b(sym)n(b)r(olic)g
-(link\(s\))855 b Fc(S)1866 933 y Ff(mak)n(e)24 b(relativ)n(e)g(sym)n(b)
-r(olic)g(links)658 b Fc(Y)1866 1013 y Ff(mak)n(e)24 b(hard)g(link\(s\))
-983 b Fc(H)1866 1092 y Ff(searc)n(h)24 b(\014les)g(for)f(a)g(regular)h
-(expression)452 b Fc(A)1866 1172 y Ff(query)24 b(replace)g(regular)g
-(expression)539 b Fc(Q)1866 1252 y Ff(b)n(yte-compile)25
-b(\014les)996 b Fc(B)1866 1331 y Ff(load)24 b(\014les)1259
-b Fc(L)1866 1411 y Ff(shell)23 b(command)i(on)f(\014le\(s\))777
-b Fc(!)1866 1618 y Fd(Flagging)38 b(Files)g(for)g(Deletion)1866
-1755 y Fe(Unmark)27 b(commands)f(remo)n(v)n(e)g(delete)i(\015ags)1866
-1863 y Ff(\015ag)c(\014le)g(for)f(deletion)933 b Fc(d)1866
-1943 y Ff(bac)n(kup)25 b(and)f(remo)n(v)n(e)g(deletion)h(\015ag)533
-b Fc(delete)1866 2022 y Ff(\015ag)24 b(all)f(bac)n(kup)i(\014les)f
-(\(\014le)g(names)g(ending)g(in)g(~\))185 b Fc(~)1866
-2102 y Ff(\015ag)24 b(all)f(auto-sa)n(v)n(e)i(\014les)869
-b Fc(#)1866 2182 y Ff(\015ag)24 b(v)l(arious)g(in)n(termediate)h
-(\014les)627 b Fc(&)1866 2262 y Ff(\015ag)21 b(n)n(umeric)e(bac)n(kups)
-i(\(ending)h(in)d(.~1~,)i(.~2~,)f(etc.\))72 b Fc(.)1866
-2341 y Ff(execute)26 b(the)e(deletions)h(requested)g(\(\015agged)g
-(\014les\))134 b Fc(x)1866 2421 y Ff(\015ag)24 b(\014les)g(matc)n(hing)
-h(a)e(regular)h(expression)333 b Fc(\045)36 b(d)1866
-2624 y Fd(Regular)h(Expression)i(Commands)1866 2790 y
-Ff(mark)23 b(\014lenames)i(matc)n(hing)f(a)g(regular)f(expression)120
-b Fc(\045)36 b(m)1866 2869 y Ff(cop)n(y)25 b(mark)n(ed)f(\014les)f(b)n
-(y)h(regexp)674 b Fc(\045)36 b(C)1866 2949 y Ff(rename)24
-b(mark)n(ed)g(\014les)g(b)n(y)g(regexp)591 b Fc(\045)36
-b(R)1866 3029 y Ff(hardlink)1273 b Fc(\045)36 b(H)1866
-3108 y Ff(symlink)1290 b Fc(\045)36 b(S)1866 3188 y Ff(symlink,)23
-b(with)g(relativ)n(e)h(paths)668 b Fc(\045)36 b(Y)1866
-3268 y Ff(mark)23 b(for)g(deletion)998 b Fc(\045)36 b(d)1866
-3462 y Fd(Dired)h(and)g(Find)1866 3627 y Ff(dired)23
-b(\014le\(s\))i(whose)f(name)g(matc)n(hes)h(a)f(pattern)39
-b Fc(M-x)d(find-name-dired)1866 3707 y Ff(dired)23 b(\014le\(s\))i
-(that)g(con)n(tain)g(pattern)365 b Fc(M-x)36 b(find-grep-dired)1866
-3787 y Ff(dired)23 b(\014le\(s\))i(based)f(on)g Fc(find)h
-Ff(output)347 b Fc(M-x)36 b(find-dired)1866 3994 y Fd(Getting)h(Help)
-1866 4159 y Ff(dired)23 b(help)1221 b Fc(h)1866 4239
-y Ff(dired)23 b(summary)h(\(short)g(help\))g(and)g(error)f(log)253
-b Fc(?)2219 4484 y Fb(Cop)n(yrigh)n(t)2522 4482 y(c)2505
-4484 y Fa(\015)21 b Fb(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5
-b(oundation,)20 b(Inc.)2302 4547 y(designed)h(b)n(y)f(Stephen)g
-(Gildea,)g(Ma)n(y)i(2006)g(v0.1)2299 4611 y(for)f(GNU)f(Emacs)i(v)n
-(ersion)f(19)h(on)e(Unix)g(systems)2128 4675 y(Up)r(dated)f(for)j
-(Dired)e(in)f(Ma)n(y)j(2000)h(b)n(y)e(Evgen)n(y)g(Roubinc)n(h)n(tein)
-1866 4767 y(P)n(ermission)d(is)g(gran)n(ted)h(to)g(mak)n(e)g(and)f
-(distribute)f(copies)h(of)h(this)f(card)g(pro)n(vided)g(the)1866
-4831 y(cop)n(yrigh)n(t)k(notice)e(and)h(this)f(p)r(ermission)g(notice)h
-(are)g(preserv)n(ed)h(on)e(all)h(copies.)1866 4923 y(F)-5
-b(or)17 b(copies)g(of)g(the)g(GNU)f(Emacs)h(man)n(ual,)g(write)f(to)h
-(the)g(F)-5 b(ree)17 b(Soft)n(w)n(are)i(F)-5 b(oundation,)1866
-4987 y(Inc.,)20 b(51)h(F)-5 b(ranklin)20 b(Street,)h(Fifth)f(Flo)r(or,)
-g(Boston,)i(MA)f(02110-1301,)j(USA.)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/e/README b/etc/e/README
new file mode 100644
index 00000000000..c547fc68fda
--- /dev/null
+++ b/etc/e/README
@@ -0,0 +1,12 @@
+eterm-color.ti is a terminfo source file. eterm-color is a compiled
+version produced by the terminfo compiler (tic). The compiled files
+are binary, and depend on the version of tic, but they seem to be
+system-independent and backwardly compatible. So there should be no
+need to recompile the distributed binary version. If it is
+necessary, use:
+
+tic -o ../ ./eterm-color.ti
+
+The compiled file is used by lisp/term.el, so if it is moved term.el
+needs to be changed. terminfo requires it to be stored in an `e'
+subdirectory (the first character of the file name).
diff --git a/etc/emacs.bash b/etc/emacs.bash
index c207e5ffe9e..79ce7840d93 100644
--- a/etc/emacs.bash
+++ b/etc/emacs.bash
@@ -55,7 +55,7 @@ function edit ()
case "${windowsys}" in
x ) (emacs "$@" &) ;;
- sun ) (emacstool "$@" &) ;;
+ sun ) echo "unsupported window system"; return 1 ;;
esac
else
if jobs %emacs 2> /dev/null ; then
diff --git a/etc/emacs.csh b/etc/emacs.csh
index 8afea6bd35c..880aad08f01 100644
--- a/etc/emacs.csh
+++ b/etc/emacs.csh
@@ -16,14 +16,9 @@
## 2 = resume emacs
## 3 = new emacs under X (-i is so that you get a reasonable icon)
## 4 = resume emacs under X
-## 5 = new emacs under suntools
-## 6 = resume emacs under suntools
-## 7 = new emacs under X and suntools - doesn't make any sense, so use X
-## 8 = resume emacs under X and suntools - doesn't make any sense, so use X
set EMACS_PATTERN="^\[[0-9]\] . Stopped ............ $EMACS"
alias edit 'set emacs_command=("emacs -nw \!*" "fg %emacs" "emacs -i \!* &"\
- "emacsclient \!* &" "emacstool \!* &" "emacsclient \!* &" "emacs -i \!* &"\
"emacsclient \!* &") ; \
jobs >! $HOME/.jobs; grep "$EMACS_PATTERN" < $HOME/.jobs >& /dev/null; \
@ isjob = ! $status; \
diff --git a/etc/emacs.py b/etc/emacs.py
index d8bfb6bcd68..964c1f17f40 100644
--- a/etc/emacs.py
+++ b/etc/emacs.py
@@ -1,234 +1,11 @@
-"""Definitions used by commands sent to inferior Python in python.el."""
+"""Wrapper for version-specific implementations of python.el helper
+functions """
-# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-# Author: Dave Love <fx@gnu.org>
+import sys
-# This file is part of GNU Emacs.
+if sys.version_info[0] == 3:
+ from emacs3 import *
+else:
+ from emacs2 import *
-# 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 3, 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.
-
-import os, sys, traceback, inspect, __main__
-from sets import Set
-
-__all__ = ["eexecfile", "eargs", "complete", "ehelp", "eimport", "modpath"]
-
-def format_exception (filename, should_remove_self):
- type, value, tb = sys.exc_info ()
- sys.last_type = type
- sys.last_value = value
- sys.last_traceback = tb
- if type is SyntaxError:
- try: # parse the error message
- msg, (dummy_filename, lineno, offset, line) = value
- except:
- pass # Not the format we expect; leave it alone
- else:
- # Stuff in the right filename
- value = SyntaxError(msg, (filename, lineno, offset, line))
- sys.last_value = value
- res = traceback.format_exception_only (type, value)
- # There are some compilation errors which do not provide traceback so we
- # should not massage it.
- if should_remove_self:
- tblist = traceback.extract_tb (tb)
- del tblist[:1]
- res = traceback.format_list (tblist)
- if res:
- res.insert(0, "Traceback (most recent call last):\n")
- res[len(res):] = traceback.format_exception_only (type, value)
- # traceback.print_exception(type, value, tb)
- for line in res: print line,
-
-def eexecfile (file):
- """Execute FILE and then remove it.
- Execute the file within the __main__ namespace.
- If we get an exception, print a traceback with the top frame
- (ourselves) excluded."""
- # We cannot use real execfile since it has a bug where the file stays
- # locked forever (under w32) if SyntaxError occurs.
- # --- code based on code.py and PyShell.py.
- try:
- try:
- source = open (file, "r").read()
- code = compile (source, file, "exec")
- # Other exceptions (shouldn't be any...) will (correctly) fall
- # through to "final".
- except (OverflowError, SyntaxError, ValueError):
- # FIXME: When can compile() raise anything else than
- # SyntaxError ????
- format_exception (file, False)
- return
- try:
- exec code in __main__.__dict__
- except:
- format_exception (file, True)
- finally:
- os.remove (file)
-
-def eargs (name, imports):
- "Get arglist of NAME for Eldoc &c."
- try:
- if imports: exec imports
- parts = name.split ('.')
- if len (parts) > 1:
- exec 'import ' + parts[0] # might fail
- func = eval (name)
- if inspect.isbuiltin (func) or type(func) is type:
- doc = func.__doc__
- if doc.find (' ->') != -1:
- print '_emacs_out', doc.split (' ->')[0]
- else:
- print '_emacs_out', doc.split ('\n')[0]
- return
- if inspect.ismethod (func):
- func = func.im_func
- if not inspect.isfunction (func):
- print '_emacs_out '
- return
- (args, varargs, varkw, defaults) = inspect.getargspec (func)
- # No space between name and arglist for consistency with builtins.
- print '_emacs_out', \
- func.__name__ + inspect.formatargspec (args, varargs, varkw,
- defaults)
- except:
- print "_emacs_out "
-
-def all_names (object):
- """Return (an approximation to) a list of all possible attribute
- names reachable via the attributes of OBJECT, i.e. roughly the
- leaves of the dictionary tree under it."""
-
- def do_object (object, names):
- if inspect.ismodule (object):
- do_module (object, names)
- elif inspect.isclass (object):
- do_class (object, names)
- # Might have an object without its class in scope.
- elif hasattr (object, '__class__'):
- names.add ('__class__')
- do_class (object.__class__, names)
- # Probably not a good idea to try to enumerate arbitrary
- # dictionaries...
- return names
-
- def do_module (module, names):
- if hasattr (module, '__all__'): # limited export list
- names.union_update (module.__all__)
- for i in module.__all__:
- do_object (getattr (module, i), names)
- else: # use all names
- names.union_update (dir (module))
- for i in dir (module):
- do_object (getattr (module, i), names)
- return names
-
- def do_class (object, names):
- ns = dir (object)
- names.union_update (ns)
- if hasattr (object, '__bases__'): # superclasses
- for i in object.__bases__: do_object (i, names)
- return names
-
- return do_object (object, Set ([]))
-
-def complete (name, imports):
- """Complete TEXT in NAMESPACE and print a Lisp list of completions.
- Exec IMPORTS first."""
- import __main__, keyword
-
- def class_members(object):
- names = dir (object)
- if hasattr (object, '__bases__'):
- for super in object.__bases__:
- names = class_members (super)
- return names
-
- names = Set ([])
- base = None
- try:
- dict = __main__.__dict__.copy()
- if imports: exec imports in dict
- l = len (name)
- if not "." in name:
- for list in [dir (__builtins__), keyword.kwlist, dict.keys()]:
- for elt in list:
- if elt[:l] == name: names.add(elt)
- else:
- base = name[:name.rfind ('.')]
- name = name[name.rfind('.')+1:]
- try:
- object = eval (base, dict)
- names = Set (dir (object))
- if hasattr (object, '__class__'):
- names.add('__class__')
- names.union_update (class_members (object))
- except: names = all_names (dict)
- except:
- print '_emacs_out ()'
- return []
- l = len(name)
- print '_emacs_out (',
- for n in names:
- if name == n[:l]:
- if base: print '"%s.%s"' % (base, n),
- else: print '"%s"' % n,
- print ')'
-
-def ehelp (name, imports):
- """Get help on string NAME.
- First try to eval name for, e.g. user definitions where we need
- the object. Otherwise try the string form."""
- locls = {}
- if imports:
- try: exec imports in locls
- except: pass
- try: help (eval (name, globals(), locls))
- except: help (name)
-
-def eimport (mod, dir):
- """Import module MOD with directory DIR at the head of the search path.
- NB doesn't load from DIR if MOD shadows a system module."""
- from __main__ import __dict__
-
- path0 = sys.path[0]
- sys.path[0] = dir
- try:
- try:
- if __dict__.has_key(mod) and inspect.ismodule (__dict__[mod]):
- reload (__dict__[mod])
- else:
- __dict__[mod] = __import__ (mod)
- except:
- (type, value, tb) = sys.exc_info ()
- print "Traceback (most recent call last):"
- traceback.print_exception (type, value, tb.tb_next)
- finally:
- sys.path[0] = path0
-
-def modpath (module):
- """Return the source file for the given MODULE (or None).
-Assumes that MODULE.py and MODULE.pyc are in the same directory."""
- try:
- path = __import__ (module).__file__
- if path[-4:] == '.pyc' and os.path.exists (path[0:-1]):
- path = path[:-1]
- print "_emacs_out", path
- except:
- print "_emacs_out ()"
-
-# print '_emacs_ok' # ready for input and can call continuation
-
-# arch-tag: d90408f3-90e2-4de4-99c2-6eb9c7b9ca46
+# arch-tag: 894b5227-638f-45fd-8567-0417d5c35900
diff --git a/etc/emacs2.py b/etc/emacs2.py
new file mode 100644
index 00000000000..b48689508e6
--- /dev/null
+++ b/etc/emacs2.py
@@ -0,0 +1,239 @@
+"""Definitions used by commands sent to inferior Python in python.el."""
+
+# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Author: Dave Love <fx@gnu.org>
+
+# 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 3, 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.
+
+import os, sys, traceback, inspect, __main__
+
+try:
+ set
+except:
+ from sets import Set as set
+
+__all__ = ["eexecfile", "eargs", "complete", "ehelp", "eimport", "modpath"]
+
+def format_exception (filename, should_remove_self):
+ type, value, tb = sys.exc_info ()
+ sys.last_type = type
+ sys.last_value = value
+ sys.last_traceback = tb
+ if type is SyntaxError:
+ try: # parse the error message
+ msg, (dummy_filename, lineno, offset, line) = value
+ except:
+ pass # Not the format we expect; leave it alone
+ else:
+ # Stuff in the right filename
+ value = SyntaxError(msg, (filename, lineno, offset, line))
+ sys.last_value = value
+ res = traceback.format_exception_only (type, value)
+ # There are some compilation errors which do not provide traceback so we
+ # should not massage it.
+ if should_remove_self:
+ tblist = traceback.extract_tb (tb)
+ del tblist[:1]
+ res = traceback.format_list (tblist)
+ if res:
+ res.insert(0, "Traceback (most recent call last):\n")
+ res[len(res):] = traceback.format_exception_only (type, value)
+ # traceback.print_exception(type, value, tb)
+ for line in res: print line,
+
+def eexecfile (file):
+ """Execute FILE and then remove it.
+ Execute the file within the __main__ namespace.
+ If we get an exception, print a traceback with the top frame
+ (ourselves) excluded."""
+ # We cannot use real execfile since it has a bug where the file stays
+ # locked forever (under w32) if SyntaxError occurs.
+ # --- code based on code.py and PyShell.py.
+ try:
+ try:
+ source = open (file, "r").read()
+ code = compile (source, file, "exec")
+ # Other exceptions (shouldn't be any...) will (correctly) fall
+ # through to "final".
+ except (OverflowError, SyntaxError, ValueError):
+ # FIXME: When can compile() raise anything else than
+ # SyntaxError ????
+ format_exception (file, False)
+ return
+ try:
+ exec code in __main__.__dict__
+ except:
+ format_exception (file, True)
+ finally:
+ os.remove (file)
+
+def eargs (name, imports):
+ "Get arglist of NAME for Eldoc &c."
+ try:
+ if imports: exec imports
+ parts = name.split ('.')
+ if len (parts) > 1:
+ exec 'import ' + parts[0] # might fail
+ func = eval (name)
+ if inspect.isbuiltin (func) or type(func) is type:
+ doc = func.__doc__
+ if doc.find (' ->') != -1:
+ print '_emacs_out', doc.split (' ->')[0]
+ else:
+ print '_emacs_out', doc.split ('\n')[0]
+ return
+ if inspect.ismethod (func):
+ func = func.im_func
+ if not inspect.isfunction (func):
+ print '_emacs_out '
+ return
+ (args, varargs, varkw, defaults) = inspect.getargspec (func)
+ # No space between name and arglist for consistency with builtins.
+ print '_emacs_out', \
+ func.__name__ + inspect.formatargspec (args, varargs, varkw,
+ defaults)
+ except:
+ print "_emacs_out "
+
+def all_names (object):
+ """Return (an approximation to) a list of all possible attribute
+ names reachable via the attributes of OBJECT, i.e. roughly the
+ leaves of the dictionary tree under it."""
+
+ def do_object (object, names):
+ if inspect.ismodule (object):
+ do_module (object, names)
+ elif inspect.isclass (object):
+ do_class (object, names)
+ # Might have an object without its class in scope.
+ elif hasattr (object, '__class__'):
+ names.add ('__class__')
+ do_class (object.__class__, names)
+ # Probably not a good idea to try to enumerate arbitrary
+ # dictionaries...
+ return names
+
+ def do_module (module, names):
+ if hasattr (module, '__all__'): # limited export list
+ names.update(module.__all__)
+ for i in module.__all__:
+ do_object (getattr (module, i), names)
+ else: # use all names
+ names.update(dir (module))
+ for i in dir (module):
+ do_object (getattr (module, i), names)
+ return names
+
+ def do_class (object, names):
+ ns = dir (object)
+ names.update(ns)
+ if hasattr (object, '__bases__'): # superclasses
+ for i in object.__bases__: do_object (i, names)
+ return names
+
+ return do_object (object, set([]))
+
+def complete (name, imports):
+ """Complete TEXT in NAMESPACE and print a Lisp list of completions.
+ Exec IMPORTS first."""
+ import __main__, keyword
+
+ def class_members(object):
+ names = dir (object)
+ if hasattr (object, '__bases__'):
+ for super in object.__bases__:
+ names = class_members (super)
+ return names
+
+ names = set([])
+ base = None
+ try:
+ dict = __main__.__dict__.copy()
+ if imports: exec imports in dict
+ l = len (name)
+ if not "." in name:
+ for src in [dir (__builtins__), keyword.kwlist, dict.keys()]:
+ for elt in src:
+ if elt[:l] == name: names.add(elt)
+ else:
+ base = name[:name.rfind ('.')]
+ name = name[name.rfind('.')+1:]
+ try:
+ object = eval (base, dict)
+ names = set(dir (object))
+ if hasattr (object, '__class__'):
+ names.add('__class__')
+ names.update(class_members (object))
+ except: names = all_names (dict)
+ except:
+ print sys.exc_info()
+ names = []
+
+ l = len(name)
+ print '_emacs_out (',
+ for n in names:
+ if name == n[:l]:
+ if base: print '"%s.%s"' % (base, n),
+ else: print '"%s"' % n,
+ print ')'
+
+def ehelp (name, imports):
+ """Get help on string NAME.
+ First try to eval name for, e.g. user definitions where we need
+ the object. Otherwise try the string form."""
+ locls = {}
+ if imports:
+ try: exec imports in locls
+ except: pass
+ try: help (eval (name, globals(), locls))
+ except: help (name)
+
+def eimport (mod, dir):
+ """Import module MOD with directory DIR at the head of the search path.
+ NB doesn't load from DIR if MOD shadows a system module."""
+ from __main__ import __dict__
+
+ path0 = sys.path[0]
+ sys.path[0] = dir
+ try:
+ try:
+ if __dict__.has_key(mod) and inspect.ismodule (__dict__[mod]):
+ reload (__dict__[mod])
+ else:
+ __dict__[mod] = __import__ (mod)
+ except:
+ (type, value, tb) = sys.exc_info ()
+ print "Traceback (most recent call last):"
+ traceback.print_exception (type, value, tb.tb_next)
+ finally:
+ sys.path[0] = path0
+
+def modpath (module):
+ """Return the source file for the given MODULE (or None).
+Assumes that MODULE.py and MODULE.pyc are in the same directory."""
+ try:
+ path = __import__ (module).__file__
+ if path[-4:] == '.pyc' and os.path.exists (path[0:-1]):
+ path = path[:-1]
+ print "_emacs_out", path
+ except:
+ print "_emacs_out ()"
+
+# print '_emacs_ok' # ready for input and can call continuation
+
+# arch-tag: d90408f3-90e2-4de4-99c2-6eb9c7b9ca46
diff --git a/etc/emacs3.py b/etc/emacs3.py
new file mode 100644
index 00000000000..96e8ebbfb8b
--- /dev/null
+++ b/etc/emacs3.py
@@ -0,0 +1,244 @@
+"""
+Warning: This file is automatically generated from emacs2.py with the
+2to3 script. Do not hand edit.
+"""
+
+"""Definitions used by commands sent to inferior Python in python.el."""
+
+# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Author: Dave Love <fx@gnu.org>
+
+# 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 3, 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.
+
+import os, sys, traceback, inspect, __main__
+
+try:
+ set
+except:
+ from sets import Set as set
+
+__all__ = ["eexecfile", "eargs", "complete", "ehelp", "eimport", "modpath"]
+
+def format_exception (filename, should_remove_self):
+ type, value, tb = sys.exc_info ()
+ sys.last_type = type
+ sys.last_value = value
+ sys.last_traceback = tb
+ if type is SyntaxError:
+ try: # parse the error message
+ msg, (dummy_filename, lineno, offset, line) = value
+ except:
+ pass # Not the format we expect; leave it alone
+ else:
+ # Stuff in the right filename
+ value = SyntaxError(msg, (filename, lineno, offset, line))
+ sys.last_value = value
+ res = traceback.format_exception_only (type, value)
+ # There are some compilation errors which do not provide traceback so we
+ # should not massage it.
+ if should_remove_self:
+ tblist = traceback.extract_tb (tb)
+ del tblist[:1]
+ res = traceback.format_list (tblist)
+ if res:
+ res.insert(0, "Traceback (most recent call last):\n")
+ res[len(res):] = traceback.format_exception_only (type, value)
+ # traceback.print_exception(type, value, tb)
+ for line in res: print(line, end=' ')
+
+def eexecfile (file):
+ """Execute FILE and then remove it.
+ Execute the file within the __main__ namespace.
+ If we get an exception, print a traceback with the top frame
+ (ourselves) excluded."""
+ # We cannot use real execfile since it has a bug where the file stays
+ # locked forever (under w32) if SyntaxError occurs.
+ # --- code based on code.py and PyShell.py.
+ try:
+ try:
+ source = open (file, "r").read()
+ code = compile (source, file, "exec")
+ # Other exceptions (shouldn't be any...) will (correctly) fall
+ # through to "final".
+ except (OverflowError, SyntaxError, ValueError):
+ # FIXME: When can compile() raise anything else than
+ # SyntaxError ????
+ format_exception (file, False)
+ return
+ try:
+ exec(code, __main__.__dict__)
+ except:
+ format_exception (file, True)
+ finally:
+ os.remove (file)
+
+def eargs (name, imports):
+ "Get arglist of NAME for Eldoc &c."
+ try:
+ if imports: exec(imports)
+ parts = name.split ('.')
+ if len (parts) > 1:
+ exec('import ' + parts[0]) # might fail
+ func = eval (name)
+ if inspect.isbuiltin (func) or type(func) is type:
+ doc = func.__doc__
+ if doc.find (' ->') != -1:
+ print('_emacs_out', doc.split (' ->')[0])
+ else:
+ print('_emacs_out', doc.split ('\n')[0])
+ return
+ if inspect.ismethod (func):
+ func = func.im_func
+ if not inspect.isfunction (func):
+ print('_emacs_out ')
+ return
+ (args, varargs, varkw, defaults) = inspect.getargspec (func)
+ # No space between name and arglist for consistency with builtins.
+ print('_emacs_out', \
+ func.__name__ + inspect.formatargspec (args, varargs, varkw,
+ defaults))
+ except:
+ print("_emacs_out ")
+
+def all_names (object):
+ """Return (an approximation to) a list of all possible attribute
+ names reachable via the attributes of OBJECT, i.e. roughly the
+ leaves of the dictionary tree under it."""
+
+ def do_object (object, names):
+ if inspect.ismodule (object):
+ do_module (object, names)
+ elif inspect.isclass (object):
+ do_class (object, names)
+ # Might have an object without its class in scope.
+ elif hasattr (object, '__class__'):
+ names.add ('__class__')
+ do_class (object.__class__, names)
+ # Probably not a good idea to try to enumerate arbitrary
+ # dictionaries...
+ return names
+
+ def do_module (module, names):
+ if hasattr (module, '__all__'): # limited export list
+ names.update(module.__all__)
+ for i in module.__all__:
+ do_object (getattr (module, i), names)
+ else: # use all names
+ names.update(dir (module))
+ for i in dir (module):
+ do_object (getattr (module, i), names)
+ return names
+
+ def do_class (object, names):
+ ns = dir (object)
+ names.update(ns)
+ if hasattr (object, '__bases__'): # superclasses
+ for i in object.__bases__: do_object (i, names)
+ return names
+
+ return do_object (object, set([]))
+
+def complete (name, imports):
+ """Complete TEXT in NAMESPACE and print a Lisp list of completions.
+ Exec IMPORTS first."""
+ import __main__, keyword
+
+ def class_members(object):
+ names = dir (object)
+ if hasattr (object, '__bases__'):
+ for super in object.__bases__:
+ names = class_members (super)
+ return names
+
+ names = set([])
+ base = None
+ try:
+ dict = __main__.__dict__.copy()
+ if imports: exec(imports, dict)
+ l = len (name)
+ if not "." in name:
+ for src in [dir (__builtins__), keyword.kwlist, list(dict.keys())]:
+ for elt in src:
+ if elt[:l] == name: names.add(elt)
+ else:
+ base = name[:name.rfind ('.')]
+ name = name[name.rfind('.')+1:]
+ try:
+ object = eval (base, dict)
+ names = set(dir (object))
+ if hasattr (object, '__class__'):
+ names.add('__class__')
+ names.update(class_members (object))
+ except: names = all_names (dict)
+ except:
+ print(sys.exc_info())
+ names = []
+
+ l = len(name)
+ print('_emacs_out (', end=' ')
+ for n in names:
+ if name == n[:l]:
+ if base: print('"%s.%s"' % (base, n), end=' ')
+ else: print('"%s"' % n, end=' ')
+ print(')')
+
+def ehelp (name, imports):
+ """Get help on string NAME.
+ First try to eval name for, e.g. user definitions where we need
+ the object. Otherwise try the string form."""
+ locls = {}
+ if imports:
+ try: exec(imports, locls)
+ except: pass
+ try: help (eval (name, globals(), locls))
+ except: help (name)
+
+def eimport (mod, dir):
+ """Import module MOD with directory DIR at the head of the search path.
+ NB doesn't load from DIR if MOD shadows a system module."""
+ from __main__ import __dict__
+
+ path0 = sys.path[0]
+ sys.path[0] = dir
+ try:
+ try:
+ if mod in __dict__ and inspect.ismodule (__dict__[mod]):
+ reload (__dict__[mod])
+ else:
+ __dict__[mod] = __import__ (mod)
+ except:
+ (type, value, tb) = sys.exc_info ()
+ print("Traceback (most recent call last):")
+ traceback.print_exception (type, value, tb.tb_next)
+ finally:
+ sys.path[0] = path0
+
+def modpath (module):
+ """Return the source file for the given MODULE (or None).
+Assumes that MODULE.py and MODULE.pyc are in the same directory."""
+ try:
+ path = __import__ (module).__file__
+ if path[-4:] == '.pyc' and os.path.exists (path[0:-1]):
+ path = path[:-1]
+ print("_emacs_out", path)
+ except:
+ print("_emacs_out ()")
+
+# print '_emacs_ok' # ready for input and can call continuation
+
+# arch-tag: 37bfed38-5f4a-4027-a2bf-d5f41819dd89
diff --git a/etc/emacstool.1 b/etc/emacstool.1
deleted file mode 100644
index ef1941111fd..00000000000
--- a/etc/emacstool.1
+++ /dev/null
@@ -1,155 +0,0 @@
-.TH EMACSTOOL 1
-.SH NAME
-.I emacstool
-\- run emacs under Sun windows with function-key and mouse support.
-.SH SYNOPSIS
-.I emacstool
-[{window_args} {-rc run_command_path} args ... ]
-.SH TYPICAL USAGE
-In ~/.suntools or ~/.rootmenu include a line like this:
-.br
-"Emacstool" emacstool -WI emacs.icon -f emacstool-init
-.SH DESCRIPTION
-.B Emacstool
-creates a SunView frame and a tty subwindow within which mouse events
-and function keys are translated to ASCII sequences which Emacs can
-parse. The translated input events are sent to the process running in
-the tty subwindow, which is typically GNU Emacs. Emacstool thereby
-allows GNU Emacs users to make full use of the mouse and function keys.
-GNU Emacs can be loaded with functions to interpret the mouse and
-function-key events to make a truly fine screen oriented editor for
-the Sun Workstation.
-.PP
-(Note that GNU Emacs has a special interface to the X window system as
-well. The X window system has many technical advantages, it is an
-industry standard, and it is also free software. The Free Software
-Foundation urges you to try X windows, and distributes a free copy of
-X on Emacs distribution tapes.)
-.PP
-Function keys are translated to a sequence of the form
-`^X*[a-o][lrt]'. The last character is `l', `r', or `t' corresponding
-to whether the key is among the Left, Right, or Top function keys.
-The third character indicates which button of the group
-was pressed. Thus, the function key in the lower right corner will
-transmit the sequence `^X*or'. In addition, the [lrt] is affected by
-the Control, Meta, and Shift keys. Unshifted Control keys will be
-non-alphabetic: C-l is [,], C-r is [2], C-t is [4].
-.PP
-Mouse buttons are encoded as `^X^@([124] x y)\\n'. ^X^@ is the
-standard GNU Emacs mouse event prefix, it is followed by a list
-indicating the button pressed and the character row and column of the
-point in the window where the mouse cursor is, and followed by a
-newline character. In GNU Emacs, the ^X^@ dispatches to a
-mouse event handler which then reads the following list.
-.SH OPTIONS
-.B Emacstool
-supports all the standard window arguments, including font and icon
-specifiers.
-.PP
-By default, Emacstool runs the program
-.I emacs
-in the created subwindow.
-The value of the environment variable
-.I EMACSTOOL
-can be used to override this if your version of
-.B Emacs
-is not accessible on your search path by the name
-.I Emacs.
-In addition, the run command can be set by the
-.I pathname
-following the last occurrence of the
-.I \-rc
-flag.
-This is convenient for using Emacstool to run on remote machines.
-.PP
-All other command line arguments not used by the window system are passed
-as arguments to the program that runs in the Emacstool window.
-.PP
-For example:
-.PP
-local% (emacstool -rc rlogin remote -8 &)&
-.PP
-will create an Emacstool window logged in to a machine named
-.I remote.
-If Emacs is run from this window,
-Emacstool will encode mouse and function keys, and send them to rlogin.
-If Emacs is run from this shell on the remote machine, it will see
-the mouse and function keys properly.
-However, since the remote host does not have access to the screen,
-the cursor cannot be changed, menus will not appear, and the selection
-buffer (STUFF) is limited.
-.SH Using With GNU Emacs:
-The GNU Emacs files
-lisp/term/sun.el,
-lisp/sun-mouse.el,
-lisp/sun-fns.el,
-and
-src/sunfns.c
-provide emacs support for the Emacstool and function keys.
-Emacstool will automatically set the TERM environment variable to be "sun"
-and unset the environment variable TERMCAP. That is, these variables will
-not be inherited from the shell that starts Emacstool.
-Since the terminal type is
-.I SUN
-(that is, the environment variable TERM is set to
-.I SUN),
-Emacs will automatically load the file lisp/term/sun.
-This, in turn, will ensure that sun-mouse.el is autoloaded when any mouse
-events are detected. It is suggested that
-.I sun-mouse
-and
-.I sun-fns
-be loaded in your site-init.el file, so that they will always be loaded
-when running on a Sun workstation.
-.PP
-In addition, Emacstool sets the environment variable IN_EMACSTOOL = "t".
-Lisp code in your ~/.emacs can use (getenv "IN_EMACSTOOL")
-to determine whether to do Emacstool specific initialization.
-Sun.el uses this to automatically call emacstool-init (getenv "IN_EMACSTOOL")
-is defined.
-.PP
-The file src/sunfns.c defines several useful functions for emacs on
-the Sun. Among these are procedures to pop-up SunView
-.I menus,
-put and get from the SunView
-.I STUFF
-buffer, and a procedure for changing the cursor
-.I icon.
-If you want to define or edit cursor icons,
-there is a rudimentary mouse driven icon editor in the file
-lisp/sun-cursors.el. Try invoking (sc:edit-cursor)
-.SH BUGS
-It takes a few milliseconds to create a menu before it pops up.
-.SH ENVIRONMENT VARIABLES
-EMACSTOOL
-IN_EMACSTOOL
-TERM
-TERMCAP
-.SH FILES
-.DT
-emacs
-.SH "SEE ALSO"
-emacs(1)
- .../etc/SUN-SUPPORT
- .../lisp/term/sun.el
-.SH COPYING
-Copyright
-.if t \(co
-.if n (c)
-2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of this
-document provided the copyright notice and this permission notice are
-preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of
-this document under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of
-a permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this
-document into another language, under the above conditions for
-modified versions, except that this permission notice may be stated
-in a translation approved by the Free Software Foundation.
-
-.\" arch-tag: a1f44815-5163-4026-89c1-4404e4b81d37
diff --git a/etc/fr-drdref.ps b/etc/fr-drdref.ps
deleted file mode 100644
index 7a21d14b0e0..00000000000
--- a/etc/fr-drdref.ps
+++ /dev/null
@@ -1,1997 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: fr-drdref.dvi
-%%Pages: 1
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMBX10 CMR8 CMBX8 CMTT8 CMR6 CMSY6
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips fr-drdref.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.03.19:1910
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 18 /grave put
-dup 19 /acute put
-dup 24 /cedilla put
-dup 39 /quoteright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 57 /nine put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 74 /J put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E07BB563C96C0A3E
-6D4DF600BB73729BC4A5B134928F1370B9F07C587F79388B1D9AC62BFB1566DD
-CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43
-0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F
-08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E
-588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF21B
-85440C6929315A6C6EF7A0CD27AA4D99B257B6A24F3031A6E96251A095375ED8
-45B575654F34C33F0F852229008F345EDC1DF3B33D1A52049DD3B92CA9C132CD
-1CD7C4378567D942D72926A9DDE2808B62DC83F0287194820CEADBD472FC66CA
-F1B9270283676B576557384BF6195EBBCFB7D3E82E8BF06308B4AE88AAD99598
-01BD7AAAE4586DD21BA132B52EF629CE9AB1CD1A7607571F859045D01F916FC9
-332205A8CA697F9E45D813551525DFD3B2058CD190E3B835B23C1192231AE9F9
-1B9DCCE94EF4D7F75AF6AD5963CECCD32D43C2D09193F7B4CE73B3DB8ACB8F7A
-A81AAF067F25E80D411CD0B03E8A4DCD1388F46B8A5A7E6314525799B28BDE2D
-4D772865E8FB6FFF94B87EBC3E6F24617AC6056E723E0796ACF2872733B2631E
-9F2CE949C38C7A1A245B12FACD83AC8377DFABA3CF6E3E1FDEDBAA18756FF6DB
-C3DE478A63A5984892BB296534844EDAD80AE3C505E09DD735780FC47BF88AAB
-6F2C692DCF7B26DD1A0CDC12D4B1E6D9B526D732F668FF02A4FE0019ACEBE631
-DEA8D2A4B42BD0D533311942F61954EA929AFFC2F533131F6E457702DD578AEA
-62C1D9C0CFA19C7615573E28240531CF9A0CFE024F782D8BB90A7E427DB26B9B
-8932E947F5BAE092F36CB1177B1CE552B0E4038F507943797BEC490E140F201D
-4FA40F4B2BDD95AE14F66517C2D5E7E97F3685F7AC2BEAC86C53758807859504
-25176DFE30A4023632772B8C9E29044D5D20EB456371318A048BBA633A30A6E9
-CC019BB796D8D049E288814DE1C6116BE98C7D0DABEDFD01EF19E3792347C7F9
-90E99A74886016D7F70C2E0052781718CBCDBF372E8A0C056B4B006DEB7B0099
-F543AF4467E14DFBF0FC0C5B88F94D5DC0E8A8411D697CC2D9F7E672B4827C74
-E5E9748CBA1E71E9217D08A1937D409CB6523C7838038BF23A3CBF1BB94A679A
-6A846A4B9ACA3E5097D5F55299990F0C3594899CD70ECD14F34C9BB41197A02F
-F9A942CAA23E2470B85F9EEC9CD8F798A164F20A909FB1F6844CA55D2E1BFBD5
-6E7AB9D9CB4154A7E8B798A44F6C229A511AEB7F67910C1AD3D4DD9276B0A260
-004FF84E8E8476BB5103E9AC6214C486483F866DC7CA10701F0E82C037E756FD
-110DAFA6B274B5FD776CBFCA77F819C79EB5CB075374DD2D4DC0A5F05F445658
-7F0CA887E39D6D95EBD16211B404DDF8DB59D4E9CDCB326A4F64E2C5E03AAF38
-FE870BB8198786A4258880E0EA6F7F63CBC50645EE1B56B18BB1C45C23F2F9AC
-4F73A223EA8A5A598E3871E94FCE31ECDDC8A88D8B0961B152E5A397866F830F
-3CF9D980D8AF56A13B14C72C66BB58ED026CA28B42CB822012BF3EC89469407E
-1B7FD909357AAE1B4E00B00C19CCF80E402BCEBCE5415490A6FBC971B142F71C
-D749F1325341538CCA282EB257772B2242D68C5C7974C2C4363BC0D5BC84867D
-47ADD5A9BF6CED9FBCAFF6EC18B2955EC2C193F07813B2259148DFA7F6E2E485
-DBDBEBCA9269E56B9A0666E61FC72EBD841D4DB78DF285281BB76974BEECF5EB
-37DBC31E5D90F534B831B22E387D05D79346B6E4772EA55C1ABB8A9AAE3D2A5C
-7EE7545827A8579F71A32AEDE4E53468325462C203C7E9CB9618321EEF3F518F
-1613A0B5D9F0B3EB70E6E3B10E88D3451D1BD30050618DCC1F29A79C26BC1318
-A09D90ED81634CCD2E9256DC418EDC8A8DEA0AD46C297145C5EF499ED28A9D5F
-3BDC74DD8EA59B76B6AEF17EC33FA2DCDE5421A3E2AEBA5B2AE728B05DF73B45
-DD5E987688AE467431437FAF77341F2B25D9AD451864EA14B54BB90C7E2A98D2
-0903D4CE71721124460AA8BF2F3D902B3315957548328D464892C3F7FF1DF0E3
-EFFF92128D4211289AFE3389F10B72F4EA72DD9E760680A1B035C3007500EBD5
-8FFCCE6B742261CB4BE1DA1756418CE73126521FF8667A9698EF83510CD6AE4B
-8FBAFC10238E8BE5654069992E4C414B86091679F0A5F26D357107DFD581E990
-87E2F6F692B9B38ADC04C83ED9336D3F28F5B366D0435D88A5F328D25C8D3D29
-175AE184A850982BFAC3963E5A42026CDC20D687A98627D10B1FC23D50B719B3
-E1C6A99771DEA39715D2F0C050EE67A4235D26577A050F498A992348392DE9D1
-70489F2136E5E338500F6D883EFDC5F59B72C7889021B6A1EB673F94B33E2119
-1D7CC415218BA4826E366E5FAE7086CB6BA3ADC6B29896F9C9F6ECABD60821AD
-2550F8F0B7E06B2E0CDBA056175066D1F894C60EEF42979440A641EF050790CD
-14DE82ECEDF433876D65DA2E1A3EF1AFD0C5D0C918AD85C28A643CD58BB8DE12
-884FE854F9E5608D5A6C634DFB93E3C6D72425A67747DB966E89A02DF174E679
-919470D3F629B6B99F20AB65973315CDC9643E68424E9946824D3E214030C67F
-1A7E459A0C22D22698FCEB6D52F37C1805C8BAEB312C1FA754384087AA752FDB
-116342685A6B0C66828451A78D12DB21835361264E43B449468A61D60457D3ED
-D124475F7A3F05D3858E050C1811F9598A3B1BBDCEA2D3B93F9A87D5BCA44307
-020A02727FA4A72B10D96FE21E5033B9C76765DE27AF1512D4FDF737B3DB729F
-94169ADB1C0E07B6EC361D7A0B709637C382C3409E01F5AF9110731BA2865FA9
-41273C6CB4058CA6F0C08C04DA937D9C07894EA65ED914D08C76621A975D0B99
-9987B7D356D6254F4EDCC3850DC28850EC79ADEEA1730A95A51008298B187C41
-621A3B18B4FF4B0B90671D326FF20AC79B02B826EE424B1C9B3552BC2A7BCC94
-DC2A3CCD97AFD212AF1046B86494A564B9BF6FC5CBB3855A4FCD10C399C0C2CC
-A859CD24B9FBB8400DE84273A56CF8352CE67A5B39CEBD7246E663A08303E83A
-14241479C0309B0D470D66C4F08C2321312186FEEBD5CB80BF1A623EE006BD6E
-658FDAA4FAAED51A0486FA34E28556EAFF784DF972B92BA42ABEB69FA9917C58
-0E0E1145503859FC0206BB738F57D1AA4E8C101A5493372E39ECACBA3C96E428
-A89BF1DB741284ECC41A49F2FEE2280588F67EFFD97C1F30104E4596324B5C13
-8A52819943C925352470783A00BCE74F2813CEFA94B75D29994ED535978D2A12
-7C89AF6CA16DD8D26962B1E3464E073192B8DDBFA13D445D84A106A5B8FD3C15
-F9FA35B6B5CB58A6F507745FC0CAFBF824219674E9910A4E6C853534933069A3
-A9B43A3839F3E7071536EDF4F00EDAC28A59EFD86802C21B39EA5C31F6534BB2
-9EB210CC9FA2AD177BB1C01C51A711F2848B089851D5873BB72C38688FBD22EA
-7C3771560645DD8216A26A2A00AC05C3ADC58241D932A2E7C4AFB74C4F241FFF
-EA7766CE6B1BFFC093818DCB26E57730406689797F38762896FE03D84453CF1E
-5ED11EF98A5677523A01EE4FADF8E6A87DEB684477D71948710AB5DB30DE1E4D
-76D66C74DAD470955C276A6B6BFF6613594454AFEF5ED712EECCBEC3A3278C96
-54B24FD2F16607D18BE8ED4F0B35675CCE0A5DB08CF3C392C17E891D244251FA
-61563E91BF029AB5DB30787F6BDB56C8E72857B3A3F73C16F8CBC86B05D2EE7C
-E4C2AD1A440C56193C36A31CFF1C5C3EB1B3EAC8D051BC4B3605A0A8689627B1
-1BFBD29BAFF55F2C85EF1E00D167DB8E7D7585BC83297AADFCD91A156E9D2E61
-38967A50749362FDCA4C1186C7C72DFBBD4575A37E51B6A858DC159960E487A0
-F8FAE74E35E287DAC0AD3F149EA24EEE769E9479101429F6093CB1F417DA65D7
-3DA9E13839475D764B98F646C9B48E367CDF21E137069026FAEB3BB697272EAD
-098289D24348074F177731A736506C048CD6EA33FB85145BD95D1EBD7EB52DBB
-C6E6DDE5EF8EA2BA33216135638FFC53551B89D35C15DE97F6AA91D83BA493BB
-DC91FC80F60587359038255BC33111AE0A5E7D577F7A05C63B13128A214C85D6
-F7FD7DA077310E22BB40F43E2288E38BEC27DEAF7FABFAFA03D507AE4B9BF4A4
-81394F81BBEF2B374B4318A465631A7E5692BE1E0FB24A05979D661F94AD3F3D
-95C53C88650CF4BFE316BC48FC15B078A14D2D6F56C5D6661CADD82A0CA5B3B7
-C0038BF7F05E621B6B6E9C7E74283CC4A9F41276A4C8C4B159880F80EE5F412C
-175192167F0BD87D90AC9EDEDC0DE742312939633AA47F233A2293A984E26EAB
-051F77F18BF6D660DD9A8788F78EA563D1B947B6233E3C3D9FD520B905C10B2D
-2A5F7A627C4EC400AFD9B750751FABE5864C4437F0C0026ADEA28AF1476FE62D
-7DB423FEE234BE6FB792178146C9F0BF133316548542746C03B25B2E78C45561
-4565C772DD83BF994339BD39C7E88C57DACD11ACA9FA8D5D31AE9EEEDE15CBEA
-D8C734116E0AA946AB76CC44C3C6AFFBA5BF5B1F7F3589F89EB8E206D09A621A
-E67E68BA1D617519D49E6CFA3699F27C75C3378FB9BDE01F31775583E71A23FF
-1C9BB76954635E46228F2B255C9E5112A0D1730CC1101AA8F2ADE8AFEAD934B0
-DBC063D917CFCC70E9929A50CFEEDC9A4D482F6C57CCC97300B2205FE27E51C3
-B92A11EDB7CE41F09B86B6BFDDD51EE0B30DA0B73E43872F8C14442B2B96F52E
-1F0A717E8148952CFF00497EE8A495E1113E26B33A66B1E50B71C7DA3FC652CC
-1F756BA352FF6DED439924792DA16DA6DE9AE785A57E10A7B25422FE3BF44BA1
-5DEFC6A7B533274B4D93E57E68DA5DE125ECC49C68D2E19872E0EB14DDCDF3BC
-3680D9BC0EC07DF69BF60B48449FE08A4FA39962570475D0E45FA78872A98F21
-19925097835E69DC649A5220599E77A1209BA8B4C54DE1724D0220518BD93A95
-07A1F90CA79F97946FD351866D1C5DE9093C474AF5752F0FF40155A8D9389635
-AD515F7FE0A6E579EA5A00DA70C0964FFE64F1C0279A0E2AAAEDCF56499B48F7
-5B8106360843297280EFA171D232DBE5F33097960BFEA1324B895AE31DBAD69B
-C0C189588476479A9CF2E3C38DF2FC7A00ABD56C02CEA444B48552FCD94F1039
-F5EFAB8EB94ADF4146B992BFAE91AA72DD118E6ACB08DB6C1809ACA82DD1E1B6
-8C2F8C36A3EBACB14F13E0EEA9C2E96C6DB71CFB171CE1A72AD3A6A675F578F2
-A093A80B916FC74119A169C29B4FDBE5007CE11613166F7D65CD0C1C42EA499B
-60B4DDEF12B952BF3D9B6F6BD735618F5043F87E040A21CDE7839F58264BD058
-E609D9C2F480C1BAFB9FF9F4C5CA23F5890B7BA58EBCC02A5FD4A8DE47692B53
-4BCA8A2DE0EB379B5D22F7395299AA54E61EEA4CA54FDD3B9D9C4B727BA2632D
-CED3942387A3B30075BC3641E3FE6C793A1C6511EF79DD3217931C7E06631FA8
-936828278F1E6894FE8600F5F01EB4AE50F01EE69DE340C1B72F57E6C977A91A
-FAD2BBCD5FD0BC12AC5A404750874941CFB9354BAC5718C65AA793A13325F44C
-A09F1CBAA8A8C081EC7495A965A366687AA2B5FCA1A09D09EB9B9B21F5A6F828
-111F023932EC8A55C8C381F44D29C5A13C3AEBB9889A1EB96A90BAE1B83B4CF7
-A12BEDA0A0F22BFFE9F16BC4051C40CE81A88B33C954CB7AC64A7C9DE7B29F36
-4B57DD9D3490927BBBCA649DA16C56E2C00D42ECDBCA91975F11704605ABF9AA
-099CD2767DFB36C16A2784456F9CCDC0D0A940B35C3E1FFBDB47C04F73774086
-63DCCA9AA7555D952211A687114BF2F6CBBFF8F0E791E349FD359A3BECE71E5E
-CB1BC5EACF49A44E8768AED7858982C1693943DE6E3599CDAFAF3932CF1AAE2B
-0E50840D217B0276A3227D7C78FCD7F9CF9963CA2D06FB83E3918AA25F3EFC11
-ADE8A9F508F7F980D05DF5FF6743056C0CA95CB37257E8197A538713826D7EBA
-0391D9DFA4BA33CE5D5FF2FD88F18DA7B6FE01A796DFCF3700E6794F7128791E
-82A9E71E70E3699739D96228AB338D1B4CEDC95627203311956700D216891ED1
-C24A909E323EFF2D289D0F36A8E9F915DE3413784D63604E2B2B8435FEBCCD19
-E66A8C21E4883D2EA16FA2C851A7CB55FB52B6F1E768399754AFA160425F40D4
-C5E7A2F473D68D02B214DD73BBE3AE3AED9999D99B1C4F9E80F1017E56D2FA2C
-9B008CC70B175943E39DA05FF35D6D98944319C1769D05DEAC0A1FAC7FD15361
-6C645638542630C3F51AB474616D1ABB113FE30B0A19C75952E63F6A6C66A777
-0C24C643FA00A89A7B87A516E7964620992E692DCB7CAC3A9C33A3135223B7FA
-E8D2B15C490C7F85939C567BAD5B89B042E165B3027AE73F3EF551717C295107
-DFF783B63C8810347A615830E25DA5DC3AD34173C543F9D0D70650B3D60713D8
-686DD99437F8CF01BDDFCD12DC21A7840A32D80BE8040C1A92476156CAAB28F2
-6898BB63A4E4A1FEA0DE3584ECF4A0E5F17884C1EAF9449E709CF4D740863E91
-86D4DE3CADD661DEF2D3F774A6D5012D8FA517CB55E8EA2A532A06BB66C3600C
-460B0D7ABD9C4364FC05234FC0F2B086C661224BF0FFE94CA13267A79482BBCA
-30F0CECC5A11493BCE4F3A051F5784E29770491BA1970E6AE53F1116271D9E62
-F24B8B0FF1FFA1B7B195B5052690907A1BA7D03C1561DF34918B711F4D223865
-DF1DDF64FD2F662A88B5F37A05F07A88A66DA2A0DFA6FD8850C7FAE9AAB65E51
-69FA8018D40BB0CB3BD5205EA9083E4E871E0FA4FB6EC9DF796CFA4A28B48C7E
-086188265B8F0598B5326A72E968776895343B4C6EBE931C02594B9B857AAA16
-0F5FE0B660F47B32E75EB1B6EE7764831AF3E424D69563D6264E7F8796A513F5
-DB640C8F138D523C3AA9A9DFC3FBB971004B556D76FE41D3BCF644EE472BCBFE
-33D3B74A906E8307EEB6EF88899EC614E69C69032EDF90BBA8DB56F6CBCDD52E
-6D518B34E4A8B65527C589C5B3CDB7D4028EFEC7DC19A97B5D096A52408FAE4E
-04FE33C215F20AF30A01CB47100FFE020ADD1F4C751105811632B5AE02B9C6C9
-C54303AA9E610D854454E7D1699F51DDC5C347D74900EBFC2F4D39A2AC4545AD
-1BB8973D14F210327845F46EFBB45F900657F075F4F63FD072C7D8D0C11FE939
-4D7CEE776A6E8170B9CD20083FE78AA6154C10299967244F7F0F9ACE4758323B
-7941ABBE3ADF933515628603A7E3E0C8A26D62603E2622D95F4CA67EBAC96C28
-F56F4C895CC9C77C51678B537C620AC33A19C05753A5A378AE65F727EC486E57
-5EACB5A6DFED74F254A997A807AD138CD967133769C3087F78E1BFD00F6522A0
-8F9D0CFBA244633D94A36B0F4973345D75F92671D30CE33E48055B7E2DB3C5DB
-297B1B7AB6FB99EF948E3C78CB5FE43B2355BC181FC8FE50B7F9CC8076203497
-261907E87CB5C9B46D36B6A319F06294556D42CFC04CF446B9B1E3361CB8FF80
-C60D46F478586A2CB9BA8D8C7D7FF4FDEDD2FCFF429CAA3E82EE481BB11BE8D0
-75A577B008FA11777B7122F994A9094907C991D22519947658A5CA5522F2E439
-F692B2FF173021CC69583F940033FBDE1441E7E410FF77281FF662A96FA63335
-2FDB1642F5337575BB71300D99974C5E072794330FB597C45B5FD2B7A50D1092
-ADFFD7F4D8BEB6D0094173A74D8716AEC82E6BD3F54D1EE81853CA4CE449F70F
-EAF892F11B2B10078653E3E976AC5023CD9E8720CE64DC0B27B178CA93A87D36
-922CE12E7C0015137F802CB9DE57B56E2EBA8F815D33AA59FFC0908EE6CA39AB
-A198650075BA9C6D4071D4FD79357FDC5241F57A134FA3A91116E31F9170FFF0
-4474241517507B5B4AC37F60EFF14052AA126018A04FE5ACE5E0206EC88C2682
-9C5956F8640EF2A02F3934D0817C871DB8BB264B7AD133E18CA746E4AFA86603
-B1D0E26D7C01291A399C8CC5EDB836CAEEF5725A8B609179BFD4A886142ED4FF
-D23E51ACC050AE1A1832CAD1FAEC9610A272A79BB061C65351AA7470CA158888
-808C2CAD232184A8CE7275D0F914EE68A719BF4334970C5804331F3BF0F54E6F
-48CD90E445B2506E105F2332E0CCAFA5A6E24451CC86B5646B8BD899BBEAA77F
-DD0BDD3A796F2E348E9D8BFA9CA64C25F22C3F2FEA901CEAEC7CBCFF2C05A4A4
-D592F254E4404D8296A157A0D09C92FE2D9D172522F6899AFFB4B8DD2F0BE8CC
-CB6D1CE4DD8943CE1B67C609CB760B9D018FEEBEF38F786783A7772A74A0AA3F
-187D6F59513108589A5F65F52556F8C82A25ADFB4621940D74D3734E0B584480
-18FF5EF6C37936D65848F46155C57D5E91125E1755BFF945FFE3D6DBB8C9C7E7
-03EBE3A2A20CE540B22B95A8AE42F5894E3E87C608BE88AE694239F3889B54BC
-78A8A95088F4F2954305FAD3F184D479692BE150C7D668AAABB1DCE5DF4ED431
-D326133CEC3B40374204939000EF2E953D105F3EEF4DD5224C11D4EC886070AB
-CC22764AB2CFB27D7B8A2CEAB9EDBEC665B1C280B2E312D4159478FE2F7EA864
-653E35B06760348EE14141610DCB40C50B1F264475B9D0E872E1EB9B02302333
-B1C46AEDB1DC916578247FC0D01524009CBDCA1BDA4CF1A3BBDE122A2433566A
-8D675D015014D243708F282C9B5DE77A0B8B3C95616B5B514A3753DA818295AF
-7AC048312BC6C4EC63F7DDA88B3A6D0921435F6DF3C24F422C300F4E69A224E1
-F30275A8D3288A3E60D620CB64FB7B3A61A01017567240E804FDFE093FE2D99F
-B95A7B91E5E6A789816862106C5AF37EC7C2F32C9CA3A2326C71F96165C5757B
-70034273B7AA33A959340FAD21898D6951A326B30454D6F651D9CEA3AFC74D2F
-D4BC67B9CDEEE61326125D4FA4A1A0F409A634D0047ADE6AB4F39C1EF3A7FEC8
-15F1EFCFF7DCF1D8AEB833F7F7DB3C4AE8EB3B2E4A52133DD8073AFAAAB19480
-D77EB2C65B16FE9D1422D36F254EA7743A09C1C5ADB1D25773520954FCFB293B
-24CEAB37A6E5C8E5665E09C9DFE1F38C519C49CF65CAA8A97E9A1C7305236799
-6641EEE3303FE28678C16C9FAE9117C4AA29F0CEDA89A9C96D112653E0DF43B8
-E5970068D0EB2DA40BEA84A67CCC568090759C8E58754959AD1813F1EFAC456E
-138FBB10907EDC7390A0ACE7DBC720E59EF5FBA41BF0A796D2BABD297C2A3349
-5F81EF1753925B85C5364F64DFF3E7F445846C210EAB32015F9813936DA4C3F1
-6504DB1022392AE3C91723CF0E14349E90D9A8D0EE85AC2F13E38C83B3307286
-66671C80E869F88538D1BD024734D11D05128366C71EA45572AA9A38870BA66E
-39A9FE1E0AFE9A64C5AB84F6D9739843949B23EC8C322F0F36DC8ABF39D3A91D
-9F8775180B16185BB23C1622C8ED6F3FD369C4C98FDE12EC9FA2A595E411FE4A
-F673680B2D3DCAF39DA49F08E72D73248DBE9E7263F18FA96D4848965876BD7B
-45555FF0DE9C495A698695429FBBE060E928E9EC051807E4A079FD16033F8622
-D46FB1870D1C05CC5775D67EAEA1AD6EB9375835A255FE69500C0C638F3051A8
-82662402AB9032575B4E4304ACDC286CF07511DBE3387AB41D45777158E2159C
-F160FA968C48145E35F520464D444036B9129968392BFDAD86784885BC7BB0EF
-885BC94758B2316F4BE7F7FFDDA910EBC2C6D184BC4073DE43FF69ACBE5E06F8
-79D5B80561B76AC8C614C65D4D95CBEE246B3FC5EC73D71D8C06D1EBFC83EED4
-4276F41FCA8C9558DF499EA41CF3D605D70BC6EBD366D1B42FE7947067EEDE6B
-93093E81E288C9DC6C67825378EE6993CE61CF1DF9695D3D23F89A76FC8E78C6
-AD481A7AB09F5DC59F7FD0685EA60B47A04384F536E05FB02388F6F94BAF656B
-B6EECB5EBA3FC10D50FFBDDC04E41ED4749FFB7CCAA6EEDDAD5720AE43D005B1
-B517AE20886CEF2B3CFA1A0AB2F42E6CA21B98FE9D971C2BCD8531A232A3C618
-AE92E3FEDEEE9CA214E4BD2AC55E3D09EFF2F83D709F4205D77BDD60A6137DF8
-AF15DA5BDB4E179801E398A9487E265F910C1400A9EDD96A79E87F100F41AEE4
-5501DD30F1DABBE8129E03C49F34509E039BF9FF33027A7DE0151F0C6D1D6763
-BA3253AFB8C6EB952DD29971DA58DFECED4952D66139FE2CD9EE6AACAD552C8C
-FE9222BE9924BAEAEE3A4697AF0CA6750F0A3E78EB9D3C30D0C7B28AFA8560D6
-FDD44499B606474AE0FFA2321C9A811886B560D8076363BFA89E7E4953FE49B0
-E310E989E5B2CD312E6677B43033319E2C672559FDB3BDAA87213282BF7D002A
-3253C607122E33229A895E37A57D0C5EABFD56F67D97B6491CDE12F8192674CE
-294ED9D67C1453598DD9EA9A39A8B4D59EB31446336A89C99E00364866987BA8
-E020434BA059FB185511A24F568CF9EA2FD892FBB97B7E717B90D6D473865731
-516880BD58AF581575B84DB2E53141C1ADE845DB4D5198927877EEF6343F6982
-A644AEDBFB54AC043A6C7824C5A0B95E5DA08297E1220535AC94290BBADB9E68
-D6419787135784ED0442627AD5DBDDE15CB4DD39A6DFA879A6394BB2F1E48D98
-8257B7877AF61CD99471799B798D80A32F1E716181F57BAB600D5E4208172049
-F62CF7548192828ECCAA3005105341D85BD2C5E125403B9A445E6F9A34A12CA4
-566FC725245A914556C4E21AE0F0DD637FFCCADD3424D7F60AE417D0F5C08E5C
-BF539432E111FC4B41F0BDF7936A40C5747DF6309BE843BDC19FF23C920606D3
-0EB2660B4783212FAE51A2951A172549A267E606D4F4316ACA08BD7B4AE22EF8
-51384F6A6DC006049AEACE4700CCD6D3D2799684A4D9744346F9930DA3731806
-7092B1BA0EFE643D6C12C32323E85BEBA3BADAE1BCCC35D7E1970C0BF0C3F43D
-4D1857C4DC06FA17C1A2688E0D0D2CD065D368B528F5E8C25B10C3E66FA50AC3
-E25138B4A7312E076CC158E71AF675A0BCC84A7D29AD10FB2F4F1D64E9FF4B60
-1A8E51D097CA8F7ADE80CCDD559413812C76C8F78CF3DA09BEAB26745EC2B66B
-725FD65B4C57740EB32A07222D4C09D4EF516E05541064AB13E7F1DD7E8B8FDE
-4F8A68D888BF273B1913A5C4828454B02B35FC28079C1D004511990053E894D9
-C73609795A0C8EB9C5EC23CAD88BB51F336E5FB3A660922876CC5A65C769850F
-B32FEDF7CEC076451AEE18731EF3E20418A257EB7E5284A0CF60010CF4202140
-EE7570AF23EA836FE0F181D92BEB73788C5641F6ABA737B44B880A6BE7642DFC
-BBE6A01FBABEB6E6193C54FB789EB08154889C157E423C88CEC386FFFE6238C3
-9605F1CFC9414E90AA02553CC202C006B15923BFBBD057483BC8151397163192
-6764C00C52CB18BE39CC4250D4F27095F80A669B50618EDD4ADCF1BB717A2927
-E4F79DFAA8612BB8366C405E98F8880122D3F40B5972A10918DE869B1E62F60E
-DC5C98649127FDDE91D2DE4C79796171AAFB9557AB0B9248737D63A0D16E4D6E
-E1FCF08786A454BD5934D35030A9C07D526899DB2CAE0EECAD0B6F551337370F
-C19FD193F596F9ABDA76296A6BAE23C05F70AF4C08452C918217CCD7526850C7
-B9A343AF14F576EDD9503354F263A7F61A52F4B733F8A90ABD958B3EA1C5B19C
-6F6FC46EE0179E38CDB51303C66944EA4CCEBFE2664F430033E43C53B5E29471
-DC4E1525896EA7CC48760CED4E27DF51A4363FE23623D369579D3269ED830C63
-A7C9B6B75B8B28BE16527B2639251EE97B65952C43F7A86E0E5DC24137DE6E28
-38C9CFE78FCE3DD20660CC31DB0100EF7E1AD06BD4EB50D3E70FB57B39DD737E
-D281BA957FDD01758B80AD83A7EFC2796EB5DC795F923E85D50647AE61FB9C10
-74D74E4921B08CDEF6185A2901DE7A401808B820B84E66BD8B21C3775B272FDB
-4F6620BC74451F7E619FF7BB48835E2F426B76E446B4279DFFFCE66A29561B55
-1B4B4ECA6074BD019737D80B8D6735998F60DEAF045EC2353E5FB9EB2887C42F
-D73B7B5F9532D0098B1148B85DA089F2939FF02C9E97AA25217D7ECC2869148D
-8A4C43D6EC227766D21CF84F1C5C23EAF57017751A2C3713FC49F64F54E4FA90
-404EF49ABE7457480440F98048D6A8D339D0E84D2BD95F1B0FE3902BE12B78ED
-E7D22706BB67C280170B7BAD52E4E2E671EFE8110DDB0135460E6239BA38046E
-8CCD8CEFE40CA95F8EF3E05164A8B7C0677FA2D40F609F3030EA28ECFB3C9B3C
-8D4ABB320849FA87A4F3C3FFAD063019BAA6EBF37642B2DFBC08A5F995636E20
-E166B409D0E728F316FA79A8C1A1A90102E57FE83DC4DE3DEAFE3BB244629EC0
-347DBA5D11DB99E72BFF743A8A5E81347A9F77C020BC9452723915398F72022F
-B92DFE6B72F8A0B4913E05C0CB80E952AE7940534E3E52F4EC1DCFAF6B80616F
-1D22448D8001392A6A6C9B107AE99EF29E8024878F845811DB2A95F55BFA70A5
-A3E92F47986F02958AAE10141956C75F5B3BDFEA31623CBFD937CFE222EA16ED
-2F47D5861B1888C6B5FF68D590A2A7F9C86BF13727CDB0A59B9D8BB778114793
-165646DDF760C5A1860D06CA493D52C52ABCE6EB3D1B56F0CE1B92BC30B9DF48
-78FF9791C41CDF4601B06EACFE80682B88E8F26BDF5E65C29F8C158DFB79AC9F
-A23EBDC8B1A10B60C2C6BF4133E25032B07B559E91A121C63FD0139F2A1382D7
-D723B727E00CC36762EB9A6616D83C76BB3141ED19F69F0DF9D1D222E7A97039
-F9F5282F6FAC08C7CA5F243E5621F8B3B7124F1829A81A43294ACDFA8171B413
-147D910EBCD820DA2486A7B38596476FA8106B68C69FA2C2B98DBD577D308602
-D9161CA4AF3239831B8253839CDDC8E9E1C2EFDCEED2A96C868BA097706BA465
-38B2332BD60ED8D8889E570DB488BFF23EB1A54E34587CD276AEF66E89B1888A
-85F0D1ED88A6E21EF0ED805F629108E4BD0AD51451DA19D4049071F875409023
-9B826C6F66BC40544B2A559936F8C3E2728E70A4CF42DD2D41
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 40 /parenleft put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 50 /two put
-dup 51 /three put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 123 /braceleft put
-dup 125 /braceright put
-dup 126 /asciitilde put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA41101E19F8FDDB46DD34CB3B0749
-5410293E3008FA73A6197B2E3BDC593A7FBE007CAFAB124C808AE2859E1E27B3
-02DECB8781E533F023F0A752B8EC1310E28908EF443CF44DA789A615DB76B1BF
-463F16077F7E05208BB95299132F8137640A8301B9E8057C97B07644B1170F35
-1206A18C75C2EF9B8EB3A23AEA8AE38066C32878DDE27D424E53B5254B3708D2
-C3750210C4A1EEEAE38350EA0F980D0297066910FA2EE797995D3A886D5708F3
-ADD7DB6427B1FB9E6002CE7FCA26808F50CA01564DCD7EC1732CB99D9EAE32AE
-DDD50DD878A849484DC3AE168AACC456E011BFC668524A88A37CF10225DD780B
-CAE018038E62585FDB13CAE6CE4FB067021B41F37A16F15F5C9C87DE63E218D5
-4B1EEEC40A8A73323DB866B30CE8415B995555CBA8EEF3D631D40360406E71D4
-19E5262DF1656DDBC683DB5AA5973062D84A784E75187C2C565089294A3963AD
-AF257AD1DADCAD1B6D3587B2426613120A1DF4A5156FAA65C9B2089389CB5E1F
-2355D1D95B55C4D4663B9318DE9CEF31ABD540F396980C1BF7EB635C0E7541B0
-AEFA274C376B7732F7A196B931A2D5EC585A567A95D6051D04A0E511987E3550
-F201450F2CEA6F0766FB214315D7320E50458EA84542979F17B1E46513FD7EF2
-6BDE25058BEFE40C1F97BF975439F149E5D00F2C0E282BAC28278AD8AD46A0E5
-829FC3B8D27792BB1856FCC681DFDD0EBF4AC6C49967855DE59799DA44A86EF9
-5EE262C07D91009AC542205D095B1F99758C7A386C977B0E49C2FCBE68739A83
-327A11940EDEDCD1233232DA90F39EF6B590756A74B5422A0BBD9CA583D7F249
-98B74752EB51CC70719B7B115BDE8AD532395FA730E6CE753D56690F6D0F0B1D
-C3013990334225FEE17A4D8F0EABA11E042F7827FE1A27A130B614D60B476123
-73F198B917958382B2D73449B892F4D192D1CDD1FE8C70B2A46B358415225A04
-ED1A9184983B76001A63F46CD56CCE48D5A5F33183F35949082B2765415BC0B7
-E7A34384D3985E064D29310DF3D085FFFEA83E437701B56F4103E48675C1291A
-511285A85EAFA3A69CFE5D0F0213430AFD12049746DCEB3A2FF6ADA7D917F158
-189FEEB95577B5D8A7B85A5A31375A7FE1067FFFA70F4594E3EE425BCA2E2BC4
-95B23DAE1CD424917AF01F5640CB6B758268CDE667DD4FCDF847D817CA9098BC
-B6E67FDD3C12A0392F63CA2A9272A78ED483F9F3BA9A32E30BB3F50E90509FB1
-2CE28975B20F3B18D7FE2CED4562088DECE21843AFE38603C511774433C52958
-0CC685B4C5497CE6C4A40169BFF636DD22ED7A3618748DEE08CF6A2E28221D09
-7F61092DC9911B101B335979559F1C5F3315B954A533862648A882EFE054DFAD
-1520C9359D64751F894C036ACCA779092AE50AA630D906D57A0E72009F47DDEF
-6B27F4575F09DDAABCFA09FA614D23B4FED547DE8C590F0780A8B3F2BFB7A8D9
-F60773E1C75C861B0E66C2A62CE09D7E0F40DFA0E09A28CF5989FF59B686A9AB
-380ED44F61E286C3427E7E5EB1E3AE824785F027ADC45E741687B9F06690DFD9
-2ED58796B544D797EA260DE35455C3D85C5B2EF43C07E8E8F1553380A404F7A3
-8D2D11C7690F7195EBE649E1A6AA2A89313FA54CDF906FB920278852D4CCC566
-1E4C5B250D880321DB061F5AE069DCD28C7AF449CA265048A70CF3BD4C9B4F32
-9DC83E5D2E95C281396460DD529BB40C87EDCE512A443777168DD90583490C7C
-CEA97E6DDA0A3A6DC65AE1BDC977EC425F0C054F6503F5F704426CED87A69F8F
-E03BD90788B19BF05122A6E43AB1EC16209062A16790D1D560239CCD3B08BC9A
-23C2CBEEDF42DED6EDC61C3F672AAE0C18BE563951C948266953B7EA5208B5C3
-56287DEDE6DD29658A98583FA150DB7C60C3C050B3E77DD7CE63D0EAC970AC3C
-60C1055ACCF3125B211F63EF9EA3D1F499E691D3C72E5B58154329ABE46DBD02
-0EE4D2A7520F471661D118868CFA2C636C94A65EA28FBF3810FB211F9C4BCBB8
-B768F7929B7B76BCD39D33BACCD27091876C62EE2FDB416459F6E773A5A9D463
-4A7A4D98F595E67F738E136EE94697E9DEEBB36E72818CC034B53C19C3D4B2C9
-DA5A126A32C728987D04DA86FFE88A2DB7224E5C15ACE12F22CCE260F3CF2438
-5D4DA6D4417E9889A5074131E7ED5EA22DB32265E318BB6A82C8A9D13A74B698
-649F49142487F511181980C73F50E0793A206FB82CBA2AB150D542B9C23A4725
-CBC16FE5FC4B10233044E126EFB2F4A6BB66FC0AD2F091F3B83B3634BF1760F4
-E1CD587F8A717449D031A4A63FC52054E3503294A3516E914A223D30676DDB29
-9E9ECDD61CC4F04D0DFC05FEBB09EBD5B09991B0729E6A3BA4D5265AF30366BD
-E997A7A200367EFA2BEA748A8E04337EFF2F5488A2AF5E9D6F43EA80638F9A03
-09A2D304E2EE9CD9DC06D22332CE2F59783537D2C7FB40482A14E95E914209C8
-632049C99288266CA8B7E773F8A9D8E48E887E9E85B55B6D3D561882D2E8E43A
-01D03FF7750707CCC3C144E72E9074616F213C335CDF67A036E159F0D584AF46
-91FAC76CA4E85C9B78F941943F5C7323640FCA279F9323D104EF2C12A49743F2
-06B6B033B72819743158CA8A58118FF2D526629E1E150D314BA188F74458B4A5
-D90B8073954AFCC4FF41D41CEBF0AEE88B336B6DF70F9E89F4ABA7B302121F6D
-9766F1C05813EDDD99347C05D1F8CC8412520971EEB622A904260758B60635E8
-CACE856DD8E6725AC2FED7C3917B25954A684E1663C4E04FAB20D76DCE40DF6D
-D8507A20B08424A09A11F16273FAA3E71DCD916E1080320E5B789A84CDD89192
-7C10EE0649063AF47EBD90B94B861DB814C4BEC3CCB5705C64BCF3F83CD112CC
-946664EBDF1C4715ACF9905A58BE3DB3E11DB62135A9066A8BB946C2ECD5AA5F
-C39ACE2DD1956EA3F34F08F4AFE400BA0495D5DFF65C22C567897BCD44FC5114
-AE412CB13C73AFBEB9C5B70C9CFD73CB0BA868BFA1F57F9CC3CF97894397C479
-CC5254D95B432082D99853E23A0A410C6D63CC1B1978C1C099119C8D7D75FF67
-D3F34267A6D3778137601E9213D2C89BD9C407E2790DA06524497C647676BAD8
-FA32017CC9CF8A5CEB9F6A48F7434907564EDA3253B0B9F2078909E799BB5405
-B1C5A5B7689A700F7F47F206955905F595360E5D0DE91EF67174E0A526CE88A0
-54456829B844B3B84BBF796394B7EAEA0FCA50A2D0C033DC9C83CF7309A2B704
-8B00AE855DD2E52808316CF7BA9A5A2AA3DD52B653DF351F930AF19AB934B110
-D5D77F98848623F60E887CFA5B2A9E680E19236DCC37F99730C925213761B28E
-0A91C64A264785AB662889F658D0F7532DCEAF433983F931B0DC80F361DB3EF8
-5F8FF33FF46707841F793C2C3C6FF8F536F46FB3F42DE22E06E3DEA9541CEFE2
-5F57B0CB09216EB395D24BB826F8F1F0022F5EAA69472980FC7DF810EFE21D0C
-7EB290DA21A756D47F57DD921319B753B0859C203D5CA16E32FA91408245ABB6
-D5607EE50F3C9562B88A1037689CCDAEE0B9D6D40DF31D4703F06D2BC534793C
-7E1B77A735C9A2B66DC218C61852F5EDDF4D062E3804A7F28180551AC7F971D6
-EC2E5AA95EFFC329D74AE31698B78A12EC7248382ECDC0D9BF8A42A096668C88
-2A122CCD5B2C65160DB0ACC8468B072AB62428AF823380A8EEF92177DE627A89
-DA3A03EF836A48A810303EE4EB92E6736321B3B0A3BA9F8165621C110C08F365
-F8E76C1EBE0574600BD7BE1436CEAB10315FA769346776640A6A616731F23E3F
-3562C60FC75250328FCEF70CD2F9E3CF844703138DADFBB484C605238A7DEE1F
-2362A11144DFB5E5B7361B5460708C6361927A2C8687DE73DFCFE9373F7364EF
-8241A2A37789AFD6F47FA009C1A3A963A747FBFC8E1A1D592B8C8A405513A626
-2D5A3970051276506A46265F86A28D6E29D41BB36BA611AFBB8A713D19543F87
-B2BA98F715F9670C8ADCD0B59EC7CA1C45AC4436900AAC9406570E56A1DB48EB
-188166913D42068227E6853437E7971BABBD26DBBF07298035C13597E48D639B
-BB66C9CF42859A0AA59E395F5689B2CA25A990C43ABC26C3E9B176C011399447
-BC5C8707593B18088E9BF8C58FFE9204ACFB19B9CFEDC4B0CBA60D7DC25A6EFB
-346CDB2E20B20C907E5610E3C61B403996E5FBE45CBDCE19721043D72E97471A
-CEDA59D92692713F1F7AF0FB1B9140A995545AAA0FEFBAABCC40684BE0DCBF83
-68FDCB70D9D2546A428009C1F9CEF99EF720D12C5299A5856A33EDAAEE1266E6
-66892932D9C30D5DAD7D90E0F0617C412EFC68494A700741BEB8FD37F7EFBBF5
-1A901C4903930C9757BAE9938EB964A39C3C4833632CBEBE93C5C07FDC2A4E78
-27E6852F3DB34302BCAAD6626B10BAD1790F5735AAF3C236FAE3E1E8FFDCBEA5
-FAE064B08DF7B68F033CE4D3521FD41437AFA4F18F603791D8434E630E6598D1
-D25A011EA99A2D4C4E47A0D0ED4FD01E12B810D376775856608E34D8C9DF3724
-48D919BCDB09DA820FBDBD163A9FF76CDD61DB100ECFB7BC5DD08C5018D9F9C4
-035484764850BDBE3E688EF0B58EA6D93D2EDB5EA70CEE815F9B119E12CB60FD
-01CFAEBAD1256FCDAC96D767FF075C85F1DC6C5252350062498C62607AA63F5B
-BA376EEA8F422CA1C72D2CA837FC2829AD8BDD914C7233572C1E512B45F4FB54
-61036B5B8014780E2560AEBE548EBF9EF5D383A3BCC809558E9F337F462378F2
-5425ED071B51CFFD95B2952ACE7FBFDCF4686FE856195DBD8A8300FC75F66C63
-DCFDA5BE7F835C844FAA446D014782F298342E9B2691E2199C835ED83AD79B2B
-516D9439E14208869AFABE62AFD868BDC493D3B856FD2E696FDC08FD0DA551A3
-D9E44F69A559609F4478F0C1CD443D7628A712EC34E5536441E7F529ACDE8168
-652B8CF1FFBEEFD5E91CD2DEE43797C525E01A74A31B82AAC5354037272B1AF4
-15FDFB761B2D02ED81E6F7DE82EB6F74B0F73A26612461630BE9143A24769625
-86CC5C0BE34E568F30249EA4980E8E457D3B7454B44AD72EC70222E7FB87C1CA
-BADEBE17086CA0C898E3F6EE059C1C63C67F5B4967F11AFF115CD7DC27E541E2
-E75FB60A76E0572AB1B16E4AAB9AFC4D5935EC936862F0A08222423480014F0E
-14AD4669F306AAB1B841C374B5A910C4752CA79AB1B3F3E1017851AD2A9CEDC0
-150672A866C941A105FA02375AD1CE54F9CED00C7792513EA2681DFB6397924F
-9310550C0C6BF77ABD3979FC524B73D6E6A14D3AD3FF187B61BD33B4B5347288
-69FEC56DC2D8C1F8AFF28D1DFA9907CA6CCBBE34D12EE9B14E1550F8041564A5
-C9E0C292290028C162CFDBF0473CA11622C3FEBF42D94DB41A181EE51C09AD6D
-B7838DA1D2F6D98D99E4A8E3EBD89C6AD70DC364C25CCEC718FA499E7EEC73E0
-434369A669EE979621F74FECE955E3501A52AB14E5FCC3C3A8EC140308311BF4
-D8AF8AAAA59CD7F52A7EAD94AD8433635A1423DDA2187CE0EC35CFEC0FFC74C4
-D095AC9A7DBF182616078E954B3AD580CE8AF901CF4D5EA3217B1E734F37DDD5
-67E32CA4A59E9DED87439007F576D64CBBE99D7ABF2D12A9D63F7339E88D3A79
-90A7BC9A722CA7A5418451ADC14F6480363C00AEE363A556DBF48CCDAE30F9EF
-8933620080B9B24F2FDDC1EB267544F65679F0EEC21693141A947B4B981E29E4
-8C1FCF6F71EDC7C5D86B5CA21103F335C1D03F99EB5A9D7FC348B8A65092E72D
-F49BBB7853213A06C15B01D3FF5BE94041B709737865C4C34ED4124801CC3D5C
-4E719494AE482CF2786B3DA85B4BB747811C865535BC76ED597B71B0D2A896F9
-E2EDEE96974352A3735F892CAF48FBD944A1E39C319C4E69C8CCB0147F643CFC
-6F8C72E312E65C20B8DD5F623F0A0AB667D65C4EE5EBECA2B2E6827ACE502C85
-78421A1731FC792BE5BDFE9B90C631838E299A72A19EA564487DE3B28218AE11
-F30FF509AB7F223387E7AF6B3E1162F1A377D8A64D0FD439844DE8264621FA8D
-1FE268EAB4FAD31C60F4EAC668A1E44E81D86177721E8968EE05A677ED7E8507
-61E34154EA7A27CD27696D3B34D932CA2DE65687DC7A2969BD8A46E30471533F
-E3129C347095832C69FB6FF380CEF6608821A57381CC551B771E33D969815EC6
-A7DF385DD3B50F26E025797BD7808F6ED254AE3A5AB0664AE1E6DF308A1F7549
-2AABA4EF4A228E4A932E87296999ED42080AE1C260A356407DAC03A3D7F09D8C
-6EB3175950EBB743E02119A7ED867012680F8065CAF41E0864E1E7591D635478
-FF4AE2B7B2D25F45568AEEB57B0CC0C86C49EC91F8C84515CDC449E57BBDBEA5
-07CACD01599A368E7D55DF58A8260A89288EFDF87E15065CE6161EFF495A1FA2
-D37A9265AAA63464A101C98E8F38E866C61E57ED511DA8D5A0B95E366967FBDC
-8DAEE09396B6C542C024F543013D619AF7471F9E25BB0003A0B7F01E10813CF8
-8FF216FF04CFF8BB1047D7DA09EC94A5E46C22592AD501E2C4D77539D75549F3
-37039C3AB64281310CDB07CDB1573B2BA0A3F9512C6AC2A411FEDB4972A63ED0
-81C9669D6F1DC786FF0C5E3AEB5B836A80A0A1069164933717672BA201B91A90
-D79568FA3C87C974C6932B33CCCEB6C25ABF0E42B39CE100E5B0EB7FD3A5AD09
-1AC044731B1DA133BFF68C493894A5DDA8EA37A968CA059D90DAF8F5B4677CA0
-96C72D48270959FD2468E84D0D0D40A62FAAF309FB1C81013ACF51ED861A8567
-9C49CE9F79C85C04DD7DA6FF28CCCF42055C0C978065B8AF44C95E9184591B28
-EBE5DB4DCD92960E0C6086A08FAB63CA8002192CA28D70ABE02AB7E20EF11A8E
-05A1F274C64C66D9CE63990EAA71B2FF4EF315B45B8E0528E05C9185DEEE215D
-B49619D301BBC66D3DFB8BA1E5FFD7F66FFB003EFC8F472BF46CFE5DADFBB943
-3A3B57F94C54532E87613AD8B6CF52929A42A449D16AA40DE362558DE9F329E0
-DD09B5498BDE842FB14924BCE20FFB13B0FD393B6BDB427E46B8E2E0A0F70CD7
-B93F43018602E5F74BA11EF2A8DB031D6FE1B3EA2ABB165FC550BC233C442648
-B7E78BD68150EFCEB92DD47660781F4A39A74DB35922F5C935DBA398FD7AB77B
-8E7A230E1E81950C308FDC2A6CA5E17151E6119B4CD058237DC50DF812D8AA1E
-15BE5E0E0844AA5239B84CFAF9381DDEEEB5E3C99E6108C805407E30E3FCB96E
-5DE662A5F576C486779D10E5E4E37FF9B06237C527D4523EDD5AA03EB863ED41
-457E46D1A9DA0E26E79D834FB435470DBE0DB3C3EC0F639DA999F7D2E3E217CD
-81386991DE2CDCA721DE046F7CE6C9ED03CCF87E4D980DABE15A291D6CD3C158
-6468FD891FE00470075ED3312411786898226794107BBD4648F046138F5405A7
-11751B3DE6523FE715FAE02FBE24112BFC3F2F6D129B25B3B7B9312D4482B178
-C466C10BA1989CF1BCE66BB4B42A6BA268AC494FBDC6FAEAA7A72ED1C48F405C
-C00C5E70C917916407395C7D9180A95389E5384B8F4FC41CC982A2DB8436A143
-3CE48A4D32CCF6AE8A042451AA10366D08E99C90707BF8A60B6688949D0335DB
-782756592DB158E823CB7E8F4DF6C3DB1DD098A1DDFC34053ED49094119E95FF
-FEBD589E647D64B43EDDA638B83EAF462C781E2AC2B981D6085B280303339094
-F9AEEC637E45329D66F36A07683E567CC97D9BB8DE891F73FF16FC4B923054BF
-479E7AE19528733D6E2337DD1D4E75376CA9E843D547BA28C2D4BD182B807AC0
-3988A0A1905F9FF0D22B4CED5A0028298D31D570631C1892FCF87D6620A55D50
-24B679D50FC1DEDF84E4AD00AE2521D78213B85C364B16ED6F8BD012B6382DF3
-DB3077178D82F7F81D308E33D9767C18F7ADF0B93DD3C6D616902C5AEE775FDA
-FCA928094A5BD1A5224E3FD1E45F59F3EF30F086DD81FB7546632117818804FC
-70ACC6F6872C2B3E8CA29AA87FE9D9C1A8CAC1EA995F4A237889262511A368B1
-338146CF75B01838C71627D6339EE498B4EBE4AE8F86978F77632CA59188A2CD
-96C633F2B84F30097CDDFE6D2FF2FAA9CB82C1AC881FCFE16548CCC60CE89398
-1D91443E6BA76EA6ABF5154EB647D3CE510B938F725D8C6EAB3C293877DF86C8
-4C830C8379461728446AE23D445E4AFF5BE84DB94BDDF1477DD60E94C27DF754
-C46DDCD8E2B6B5EB9B928E75AEA6A6B6A8EA1991BD12E870C8CCC4383FFE1219
-0257A7D8A14C6C8059C24974B6FD1B452E13082DE064724C1B5822962E0063D6
-8D86CF3673BBA76F8C0446A7501938B1C5838A205F13041A96CA27AB6F4F4004
-9F3ADC11B0C01C1949019B60FD93CA0F3CD86126CA3BEA16C556D763C7476A38
-A75771A8524BCF508A4938D51E951F4E1E5DA5E4C67F13991BE3ED13321B96E8
-C1B60673892D0F091EA3931B6B08615FC6A0C5E75BDACED9F41A5EAEA45E50BA
-46298852E262486D80AB0AE3EE18040B997C85F5C9737C5A4F08A5376244C259
-AC7FA36C0B88D25C647D11F8F9F578D8633482CFA582065F2B2231B562003001
-FA81BFC8B67B161313A421D1D9CC3817DCB5B81E625BDAD0C438F49A29945525
-25BEEAB86A926C12503749FBF30D945EE450E9213F950F4DA5AC62C732522958
-DE00E60A9DAE074D4093C381259E91164865186099DC045BC43C9CD4B88630C9
-15A8BA9A89395393922DA7EE582ECB3A3DA5CD4421EF0EEE4C57032570E74271
-546DF3F774F3D3C6EB243464928FF3E7E1EA35659FF7AB0D48050FC8841B2AAF
-ED403649BE27A32F9819F9CB3CE1100A7185B29A4239C4C461BE76B9DDAB4332
-357F55AAD0021264D5625A0ABEFAE29F95819579563CB61D5BAD81A20AC5C47C
-BCA1DCCF82A96E7D1C8672440E28F7AFD9C34FF7EB4C4531ADED742923019A61
-AF6D10354BDACC9F82BC31BC88C189E549014ECCC0ED8527686AF33817114267
-D8356689E20B37B1B6F4EF9A6B9ABF3E19A818A8E4D8D232F305D3B63CC9DF28
-CAB9A53358515D788A9A8818443D506969AA199FF9CB11439BF1E5916CB5A3B6
-520DF9EA1AD8E52871453CD628F5489FFC23A324FA5DD9FF0E2B29C9FCD67EE8
-9A93783162E5B6B0A191CA871B940D68E486DB3843AB56164541407BEB01C8B6
-D1E0313F2A38208018BC661D778AF6AD9B3F15F74A66E041E171143A0A08EA84
-7BA7D2C6ADC207145183EBC2FEC692750C32DAA588954701AD45E0FE7701CFAC
-7AB2635C35BE0ADF227E4FE982D562AFD137835024A5438EE46B96171E184533
-3A736021B4F0A24EEDAE8972A1D10F9AB149726AE541BAD42E9BC4AB0F219D14
-04752DC2C501E8A155CFF3407316FAA2E163E745432EA99CDFC4393583035730
-17522395BCBF2C2FC3C2A319DF4A88A7EF1EB25F21A39222C3929F95D4616654
-8418333C33AF322DFC03C623484E9AF520FD0B8C8BFBFFA4CC83CE4FE08CA55E
-D3BCE8588C940761F4F5E6310434D82D0E88F034E6BEB3AB968FFFDBD942B547
-D89BB2F136C4CC3FA867A9E2C691D2EE9DD38E59BC3022359DCDEA3140D6C7B8
-60FC65621FFC2B6E0EFAE7AAA0A503FA397946C3C43EAB5E0443FA6E8BBBEC7C
-852654FB6C4D05D290A4CB4B3F9BE2133CEF24B9162E8BA3DC6413C075853083
-110CD2942134248583560479B679089B1015D47424F19129EE822D691655AD9B
-4A8772DEADA5130AB6AE36F669A5946E941E5C2457FC781605A1D69A6F253959
-0E9D1B6914D931DFE4B798E73810F45FFCF7AA128EFE7A528F18555D0F81C646
-4F2895B47492BD862C78EB9D641D15B5C98D6983B6E8163D32F7BDF63160D288
-E7A027FF60F64F023FB0E27DFE7C841313B2C49C5FDA2F218BF5C9F154BD7F46
-412FAAE274AA38B3B30E18344B3A8E542B5CAB6DE7E4AF502EE67826B872C41A
-C440DFCF3AE553DC00538FD7F09F0E21EE52651117EB15BB598E57375DB52A2D
-C5187DB0E2AE60309853E356644E4DC45D349226CAA239CD9F1A4EFAED21CBAC
-EE7DC0197AAD1C694D62A9F29D0A5CB1FFD7CCFD9771199EFB09725621826291
-FF7F72D472EADE5D3FE0C0FD4541FC8E158862D98757F8B80BBECAA1F8299D0A
-2E6AA28DAFF9E3F6458CD78114136F46E6B1B0BF68BAC2120710B857998B6F22
-826C61AA95CA9476B606971A7AD550D9901AB38019FA14A4792EE0AC0BDB0F5E
-010B78EF50C96CE03621F21CBF1AD96BEE428EED181BAC0FF4CEBCB416B08150
-735D906055DEBF4A57E77791AC8F018FFE1BCBDB83BCEB4F0105CCCAE44486F4
-BCAC2E6B895353AE411D09949885846EC7444F2850FB419A60BEBE8247F9C3A2
-80D52A8BF246EE65140EFAE795E6C178B9481024251DA564DAE2B6D54753BC06
-4A555858CDF013C36E13F1AD8A581CD9A2DA31BE5C5EB8BC820AB1FA3B94F5F5
-F742AA198E393A1DDD9638BCDC7462C5DC5E0B25A8F9C3408A65B3043BCB1768
-9429E48319CBD5DA8C8A35D50D0923B3B148DA9BFA7C904CEE07F724D3A51CFD
-81B5027FF761E0B45E36570ABC0AD515AFA28E80702B594D2C382CA8AEDD1850
-5CB6F371315BCC0D15AE6D12FD189271C7BD527B1498081CB701474468BC57E5
-BC89A342D7CB23E2D74DFC5EECF14D2C7E802A79D7D0E5BA393C36ECEB6BC569
-70A6B935B0B3C70738A906C0414DDF189DFD5E6667EB44C5FACF64483C37E059
-46B04D17EC2CBC1583620F8FDE5D556E6E12281F41747FF6C18FC6507B33C23D
-09C02BEA195CC0F37D2EBAFFC4FFEC5B83499EC6326F4737704531253BD41425
-FD3280BA73FA63DB463271F0813A522F5A583BF3B0A8C41462B0B829815F59CE
-87A9E152C6545811F80EF3144CDD217ADCFEF1F7AF2B9D1C06802524510EE62F
-EA407213422E1300455AC19E27E157A3F596BF639D8342D339D22B21E38F2177
-EDD19B91FF90AC8A8C2D17182D7E2732CF2E291E555914224C40E7E3170DD617
-9B158044C66A407D4C85225A1CF27BF027EFCA6E171A057270F402E7884723EE
-558CAB4248BAF8BA8E4ED73DE39E7300C91368F4FE4E0C5CB77FDC05F0CD1205
-C3FE450F7EFE1BA4BCF850BF7CC13123AB85CC0F912548B31C41F3772139D731
-2C1026DC05049D887503C8BD76DEFAF0E29D1F9EEA53659D58964B4CCD1C4352
-910FE7D1DCD4C3F71C21C4CAB7D223037E4089287F6A10CAB1C80EAAFE13CA0D
-716D136B1248836A1A81AED1847FEFC8CC60E4F8B2BFD896A9730A16CE788D8F
-EB1BCBDCC2728FA05247B77A7DC18F757DDFA5EE99A80508C9F800F65AF63E18
-097509AA25EF35209B70DF4E09E48E39E93ECDFCACFC99267D45C62FB0A15494
-3AB2F5F92143E0CE824F2306E45B2288B1CA09DDFEEC59075C5C86E7ABE33516
-40295A65887490F33FEA0FE29FC7580690C6EC5A9D1AEC45098F0479AE2A89F5
-556CFD965CEA61549B89C146C6679DD30B22CB26B2964CD4D1167F3D369474A1
-6FE362422CB61BDE9654CBACEF423196B24329280C4E762AFDD18012E6BCD9DF
-8F59E9D57CB4015ECC2B56CF845C11076F5264C222CBE7B0F8FE263165367997
-896C9E9429A402493E160ADF94AA07BE64ECB39B4DA9A1D20E9F29BA9EF770D0
-9AB9050E63D734D018EB6E43E31E523320ABBA1DA1DBB01DE90EC6263A6E7401
-82A4F6E1AA68D06553D5717525368C2D5617158B18D70188F9B649DA61D4C000
-D22AFA6A6B8D1B049FBF486B65F99BD9BA572E7D8D66F4D2DDE3F79132E6E4DE
-20322D9165C4D4774D80E66A3A164E3CFD097CEB2C378076AA09DC214BC7C071
-3C3628A56716B6D84B250993F51759652415E01B51C324F5C0741472001C16C7
-FE5135FCFEE4FE310C74D4B3750A7D37E330833941E11D2D5E8A81BB1FBB77A1
-1523B65A1DEA473D4A61801B29D0AAE08F47B6F2BC9AEB22A7CF88AD5D34598B
-66B0B96364759457E7063DD99C2D2A10B0B880C75FE4F8DBDD8E3460A872028A
-80CB692CF959E6D403C89BE1112380DDCFEF833822BE22A7648A17D9314AB0CA
-BAAEDD4D8B87AA5DF53D0D76EED1A98E4DBC74A2BCDD30EA21025F4964F0B7A0
-427808C00AB3E3D7F19DD5F3FE6D3165E87639851DC114D3863F113D7131E273
-AA0241A49C96455F33F4311FA40149F2BD989C30D55DD8279DAA97B29ABF9A57
-7EE8B583AEE63619C997E17CC528B43FF24DFF6020F34B1D7298A410892ACC34
-82FB6CB27A9135FE84D477243DAE69B0B12A22EC93226EC8F0BF314BE64FBA5D
-1139A9E8F5206ED1EF38DC1B085AA70D9AC6BD3023DA76B133B3A78A093FFCC7
-6DF10CA4B1381E5C5126E7818D27EA2580C4024A4FF89B8BE33FB535C3011818
-BFFBE6B0A6862198AF5DC7E84A1C77746109DDF855814D03CF752FA3137E3CA4
-C058183DAEA56FAA877BD919970CCC0B2F9BF3A18A5F2D3488A0AC447A199317
-09C8F891025269A56CDEA73505D0E795B1868BA3E99FE12FA5DB16226D221B20
-74D17A17E1891D4492BEBD57B0AA319B43A9A8C9F3822242F4E8049BA7982282
-EA10B1C19B4EE1B1E54145A6801A86189EA642F7C22D85A6661D7CA42D625B55
-98FB688C535EFA0B5F44CD2DB8FBC26163EB87BE08E365D95F674F3021248A71
-6A53787895CAA015D74E7CE6E5AE73F2010128259EE56CBC8C313EED283F7EF7
-B644EA2679D81C7859FDEFE87085D3C62CAA2408A3D5C4E2E99C6E4BADA3768B
-E4494F072E9F0A5308BB75850A78FC8CE0609A2AB385CCFB3CA076BAE2BCDBC1
-44345CD924C74625BC9371258C648569883DF67ED83F8AD3FB7B1096CDDD7EBA
-25E0102006C31DCD4D55EFFD4D37B05D881359DCF28E83E4AB1245D3529C7482
-576B26AF0DD75C3A82B5A8F3528EE862CF722C896FA9319A2B813443A535BFE0
-D3B0A2811475A434266395BDFB39207EFF7EA5B6CD9E014D93CAAA22840C0A75
-C8FF9A175D2046CE7F49C4EC8E5572BCC7D7CE7E186DEA70315D674364638E60
-F355ECD080C64D3D301E77A578CA8EEF3EDB0610FE61ED541EFC97536EC0639F
-D406FE774CC5708435F5AFCEBFB0563F7C4D7543869E85451FB3DE01C83AB60A
-120A920DF83AB10EF7AF5F2A4CAC36E119CA59C62C9E58BB725A9464040738DF
-70AA3A62DAAD8E24F6F617EA27E1DBE52B327912FAAFAFE05E7D4CF19F65BD7F
-1033202FF5C0C72C4425F7C32AD0A464BBA1D084538A70D52545DF67396CDFC3
-33A915D87A0260B3AE4CAD4F53AC36ABB222256D85B742D00458B4ECE95631E0
-8F21A496DB102D3A2A0CA7BED0789984056D0F34B7674EFC66AE40B7B444B5EA
-C7CB62A0B1FBE33915522A0845CBE5523D949D4332B5E71AC7B1C177863DCD5F
-93C8C6DEE528EAD00114651DB6644C2146E4A7B0DA91E8FDC6968A99B3D516F3
-0D7CB48A037F3359487385807AF606AED4B1C98F4122AA3534AAFB9D9E37799C
-4157601B15AEFEC90F360A7EA2A741460AF365C9CC06C14C1B863CF02EBB5781
-BF4A27590BB7674AA770862D021207A2183239928C5B33C39D1704E87FA51303
-2A05A597F231044724DC06DB237ADE5FA528CC4FF749B880B91147DB9AFF2202
-85A8E2D72CFDD806DE99B5FBA42F6A042906B40369FB6587F2EFB1141334FEF6
-E8A2B5C813A96F76D4ADBB8BC75D5390F610B18420E4E5B029AB7FB265D776D4
-7A3742B1E6815286AA295EDFD64FE22980A97339EAA6A4A2330893949F3BFB2C
-06F658621EEE6F0C010EE8228DA49712A701DE1DF1870BEAB73A7E3AF4DD86D8
-702E39EB7B88F112019DE6F98AD2EEE53115E7ED8B008400C13EA30813F21486
-EB77B0803F4184E071A836ECD0252C6C9F6BC7DA1164570212B87A15473F6FE8
-8530F01CA2653D19BF85E149B68A2DC307682C23A1AD246CF6FFF0548BBE472C
-C0E08847B3062B4CB03F54EEE42AFA6779D67EC0B9908F72CCEF290418B00EC2
-2794619A951D4513DEABD376D80B71669B683D8BAFF3A86487F8F83B77379CE0
-C1356F16DBE8468B05B5A4DD8A8A3FAE67
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 13 /fl put
-dup 18 /grave put
-dup 19 /acute put
-dup 39 /quoteright put
-dup 65 /A put
-dup 67 /C put
-dup 68 /D put
-dup 70 /F put
-dup 76 /L put
-dup 77 /M put
-dup 79 /O put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB75348A88CC361FF06E984C86AF0EA429
-DAA5808CCE3583664AEFE0C59EDA04A147FB51227A5AB0C13942323E9B3733DD
-3EE7DF7F774DE5D0D0980DA8C0192983F1E3EF18481EAF1EFEDA0068BCBDB28A
-7FC7D9191EFFC574588DEC1E180341DC959F8EF56ED5B19F50AA82A4653649B7
-CDCA11A1FF27AFA7FF189A7E8A7C0E94AEEC901DDEB541604DEC0FE90FA0685A
-FDEADECE61CE2731FDDF7FCF2AEF7CC2B1EE7095F483C2597F66694FBD2AD81B
-F68FF2E378BD8357CD1B60A1CEDA2DE760A98868ACB45CCC8CC2370FE267830F
-B795058E0FB0EB3C625259C36BF9AD2EFB5C64A45797E18797CE1A2C0304CDE9
-9D88E11E878A721610EC57958C7E80A5E78226017A263288DEF5D335199E8F28
-787DF769550AD33E15342FC5E4751F8865AA66E78B8CD2388EC3618A619AD302
-5760E9F293085CB54BBBDD47C5ADC3F479E39A795541ED8CC921D1B41C9FB1CE
-57B1340BB4BFAD1329EE4EF2DE599944404B7DF94C759037CBE96073FD77DAC9
-B140B4580EF178A84D0746276D6E667E26671117EE04102304F2F599A423A687
-53CD9E2B061D02D54EF56439E33AD985A84C1CA8F6666CF7746E0DB19A79F249
-AE1F7714AE5E1D6723C5D3AF86E6ADC9F2BEA6A62C3C03A67414A99FCCCFEB42
-4EE4BE9FC8A530F06879F46889624F7D704EFCB951C1DA1613D55D61D33F6213
-F12610A6F071E79918AC289EA5A3AA9049229902B646FE14E8D19DBE673E1D7C
-76577E34ABE80ECF2F5D6E13CE0926F40AAA23EC01EA99F5CCC32D1FA8E11013
-102730BB65BC6743F348F15510601D29ECAD4659EEFC318BE1C85414883A2394
-6B8CA6AFC294778FE68559C8D182216AAD333EBF0EC6B570837069E0D9C6104E
-976A77751759A8D4C2EEA1303B6B728350843EE415D8B4BDC7CBDCD9E2D55C64
-2D01FF18630A55E8F505646B1F382384FE8C140E60F04ED9E86DB24E4B752C6E
-525E86E024A632219C1C533DBA8703DF80814AF725450D043D0D644293E70D3B
-CB5ECE08BFBE0444C3D5EAE7FCA49069B8B629CD14D78B51F893769666D1FDE0
-B3E5A9537E7296E0EE3EE6FAA0703033DE5ACF3ED11E0370F2DDE727675E7AAF
-EBDD2E5A81316445B567DE081A7A9EAAA4675990C41FD7DFD4BC99D336C943BB
-73031C74225C15F4698E5FA82A132EE19B9B31886802C6182501EC6432C93AD2
-C4902DDFAD356F9FBAD0CAA247391A9B32BE207736FD79C4CDD489F1A4F98FAA
-ECBBF11FC37861E7A2A072876E493258DD9F0102DFE6AA1C25B62C9824E65D42
-E301387324128538099538096807A5A70B2CE44C7F32C25B1E6C69E333D9CCA9
-51AC941EE59B3274FF13A0E61EDBB4894A803110AC572874B5F85AAFFC9CD694
-3EEC16F5D5E8B0A3249FE76FE8861ADF9EDF7DD9CA2C54FC5F01CA0AA1C94CF6
-E0168BE4432B048678496E8A0A1C0870C12067A21B1470F2C8AC2084FFEA2C67
-D05433570F589BAF958E9E268210CE7539BF1FABC6E0A5FFEF617E0FC0154942
-B5B14743A09D2853436120C8FAF14F7E87575F282E47742FAED463B04837EB14
-40119CAAC467715C62F9E465A38B5643FB4B6E34B8A9F0C86E8D78428C8418C4
-ECE00D82B19FA3F11CB265205782C989F5D6CEF77838FCEDF27D6D00B3C6BC7A
-8195AA7551358B3DBBE7D63F26F3F660A1197F26BA9A359C64EA219C51BF94BB
-08ED6D8BC1FA4A0C07F2B7CD30D484D3AFE2FD6A7541DF8BB2CC63D7AEE79356
-303DFFE873C237E73F6A8F064B8C002C246655200FCB5C62C2F6A1EE2827370A
-0462DE0773D4050CAA21B52D4AE613CD019AB7D5167C05EC56C401F88BC446CD
-52B473ED8C80F6E6743FF7DD1291926677465E010421CAE6E45EFDC3B5E83ECD
-F0C8AEF8EDA714D97ED1ED71602C39534F7C42260A5008B4CD2A92D039608CA7
-14ECBEBB5852EB017C5C7AB2A936B0BA9D4BE29EB48B111B5AECB1E907DC2BEC
-D08E2CFBD4438BE1FCD8D1FB7A2C795E7446B210F8C4692DFD29107D44A58B63
-CA66643018239034600B293777A53B1A8EA74EA1F0327D4E1D9000115ED9178F
-E5258FF352071FD06489C5C911B379AD4DBE7C15A11DF46D9993F80D9F5DFEEC
-D85CC3F8B8ECED7E15D1AE8D18D07052BFD9658403D6E956C249BE6E93617575
-36C9CF59D1C95C5336B9E635C6ACCEB60DAEEF076E4D9845115C420441F26115
-7C5ACC311CF30A1A2B86EDD191016E28C7BCED87B7797818E4D6A26DCA59976F
-08E0F7F8CE42CC8CFCF197C3A6A00755EB43817FE0574FBD3D5F5770F49845A0
-242F811182A45FFC2598075B4C48E7E4B24B0537EBB40D992453667D436B875C
-54BFB2FBEEF31E03539AE762BCD1961D448568CCCF3B2D9EF222ADED5741A2B7
-E57D6E5E09A354733A0A9DA31EFA86959DF6E3CC5E6E3AF6DBD3CD52AF24307B
-531E9E7561CE85658A65FBEAE0AE358DFF19A55CE42056EF89AFC3F62404D1F4
-5406002450FF5759059F1A7E555A7EBC99BE89DD5CD4E95918D43D572BF72F62
-7309EE47ED0EA71326E9DF2942A23C07444FB09C1C16A2BE2627AFC8F83D535C
-53F165E80AF1EE97C551A1A619C0DB440511730273C2C4760C2F5A146E889C96
-AF2EE5CF1112DFA0D139186A2FD65C79468B8DA9C84FE4C0CADD6E9DD82791AF
-15E6AE0091CD2E58AB3C2178168D0AE9E80E8FA95F2815A747AD2B5570EBF7E9
-833D4761D17233C2CE02CAB64D1D7E49CA9076F753FF6278CEC08B8950C6B546
-A9DA2A27509EB3A77FFBEB78D360216E99FF9C37C6979DC2DB404842080874B6
-C8D3C77A50BAF3C00D156BFCA21682FBB8C45A014BC0F9CEF5098ECFA736D01A
-C279B88A194449D964625BCED9E2CF2BC40A857ADA5D95B2EA3D000F0112653D
-2056A88D5621B85CEA7A573C004A996F77800894A32850E4536DF75327ABC0CE
-65F5AD6AFC8AE9E82296B6E795A0EB61776F07C38DA7A3E3E5EFC29694A03B28
-19182F03178847F3059F996BE5DBFD4C819D80B1575454D234F599787C856EC6
-A054356CD4DA09D46A542E90177F33EFE4EA17E5A2B54AFEE4E075D67D49959E
-2D0F8A8FADA6DB2908E9B753F40789138E31FFD04F5415E492A397738719CDEF
-BFA5B8F1919440A1256FE5554752F4B77C47E96F4CAD3DCA4B99E0D6C0B339A0
-04B58D399B27B709028E6A3F20D129D9C437E3E34E608B6B5748729EE15747C2
-E800EEBB09741E3ADC1FC1379FF077897F18123E8CBA5C450437CBF6C73C647B
-0F9E402478C3CA3BA683130E82C375E5C3F2FD4FAB53837544DE92B3C8206462
-630471AF0C33A8260B5DB013F78B3A8D3D0CC501AAAD9743B09B1BE57BD8D624
-6F6E27B5D678A673AA5001A375545D2B35F01DDFCA6F50F2A8E584F832777CAC
-CDD2ECE0B77C6905ED235E18F44606851EDB11D9C72E0F5BB813A149DDAAF6A9
-9C1CCACC107F7748FAD8ABAFBDF7DD183DA8424ECF8C2C7A16F3B56860ECC570
-86334306B17A3C57D543335A8127D5F795F2908F633AAF517F9FD14CBD2B996E
-D4F9FF06C14E03EE6106ECB4B6712707D1FD39640E10C8785A85C0DC13EB91BB
-9AD7BAF17060C14EB6E66BA2BB676EF7AD3FC20DD06F6F36AB02B0EAF391F4C9
-B6B47833031B5979CF19144D3EA7463C9D2D62AC231320B37E5FA12D7E080999
-BDCE3082EDFA16947D33B2D2FDF1103DC3DFAEB1B56495AE58569EEB60E5F492
-2A35D36349FB1C6614ED813BF7D5C8151D74BD8E122CE59F3A8C225271D57B37
-E4442FE3F0A7E5985F56409CFB53986AEA0F79B1EBF6587DF00479CBBD9EE56B
-DE157F215B03BA2D0DBEBF93A9464F7F7442FD5AC3861AE5FDC4B2C4CC8526F9
-5BAF472C6E90092824613486ED40AD61C4B0FAAB6928A13FE8A96296C01FD078
-738712D491E10D0475C786F2504DBCE4835943756BF469EC96A793423295CB71
-FA0D052652CD5321096DC7FCE70DEC61ADD97CB5F5CE65D7299168589B3ABCA4
-164552AE6AD1671F98D0A046D9487CC6EFDD3B13B6F885087D5883CC5280906E
-FB6C61384D0B577BC83427DCD6916E84AA004B141F9BE9872E6098C37C9F691A
-9BC4E26F00B82E3BBD02B25900B09D51633D5EDFBA3E54C219D7256A5D4B22BA
-F669ADAA5382D67EFC23FF8852841D06B3515C55D75D338A41EE936DCC6ED6EA
-BA12256DB834D37D500A358A0741AC21D33928794968A6125CAF20B0C8FE22A8
-64498B942263D72F52D9975FD8DF8CA848A3BCFE4591BE071FF9BCB791742DD2
-E99AAA19E924E616CABEC27CC8BCE9084653CFB08CDFED2C219345B7A2B7BE7E
-B329F79DDF4AEEE17064AE84CEEFB417E6C8F3C5D2C486C77CD28F89F40FE817
-9842CB14802B4FEB44E23D66863BAF870D9DDCD95EFCAAD73C133B4086F1467B
-AF6791D7DC378380E154239959CD2EA471D58B66FF02184326585CDF1F736CA6
-3D1B95E16BB5455CBC9523C3701289D6FA6881453C9DCC21525308B8602D2603
-F90958823AE84D54B91E018C3763C1BF3AA0BA978DC520A0ECFE6420AEAA5DE2
-C8DD7CAB9BC659DF502F0BCD44807C518B5EA67F26D48A88F21916CF0660BFC0
-912B6BDBC062A909B0C66DEE438ACFB753204D6769A798EC6EE98666847FEF4C
-D9FF64C0C95C279ECE58F1AA879949BF59F40728A72009E7989DECEA9EADB44F
-F5680A3DEE60160FCD85D1FD77B0042154140C09838B65CE33A79CAC30134CD1
-1C910ABBA0B1CC0B476696C763D71C233A38A6B7A1A12D0EFF193D9983351BEC
-F723EE088FAA6C9D50AD3086FEB50C3D01751741B63937EB78ACB8A4BA87F74D
-3D8AD65C44574D0A77F14D5346BFFB33973F411544A060729C13137450E10A0B
-8A7A4F84DBCDA4D92492E12BFF3F97E34375E310E85D04D4B2FC673357DD8049
-E4569F59406AF75CAE1AE76FBB10D757D49B4C43DAE6A0D7B9DD139E3D709FDB
-14BA9C95F67371242BEDDAC6FDCB86B37DAB4D6D2B39A15937D031DF7C20BA72
-9FB832B2AC434EA10A2E0B77D676A8DCBE3A1BC25EFF3D4056323B0DC8474F24
-C6772CA087695A4BF902735CC5198E10CAAAF564A3BE95C275F596C864AC7DE0
-C81470DC221EDBEF4C52F3692EDD18623AB79CE79E3A51A3DAFB60198D6304D1
-70B6DDFB7EA19807417DBB975977F7972049D3106C3ACB826A50BCECF68251D7
-545DF4D2C4593857812EB6AB86FAC4DF45BB9F6C64AC12E7D0140AF023FC9CF1
-9C1575E8338A06C25F7CD8B6094300A572C54C4E924CAEC25FAF1B47469B3DDD
-8CFE09AB1FBDE43FCC303C2E00ABAB5A79532573F9DEBB6A75E22CF471ACA244
-6E3332773D6D2B909BAB44E823A2BF4FF371B0A15FE5CBCFEDAC711735A1ADDB
-A02F3527BCEA1354B0556FBF74FD89E1025B48025BA7422AA2F0A0414C77ECC6
-08899CAFFA4BE15F6A5E93D9940E4545F40890C152F05F0FC9984D7650A7B1D3
-1BAA9A0AE70C7A1B1FAFA4FF7C7E6775E821591B6A93AC39F64C37790D69038B
-0566079A890D670599B01F3DABE3F58D1D584CB00BCC30E8EA20169875AC67FE
-BBBCB346C57904519EFFA01709948CFAD69F004FF255CD62B28965DBBC615E54
-FE6CC33BF0279CA79DEC1669A21DF70AEB4A4633053F3507FA9026B4F9A55E1B
-F4D68CFF33EC49C76AFC9D1E6E1EDB188BD981BAD5A83ADD73744DECE79224F6
-F558260BF4D2B04E2E65B37456EB05F7630BA3E15FD4F5F7EF45DBDAAD425116
-092FD7460F9082353E09E20C66110B1FAFF7C11F396A7D0A9D0F460EC78D134A
-74C9B344A3BC3DC10B3E60CA74E4BB575C54500BD22F410B9B5CEA21F3A85165
-25C72187F5120CC724088CA28F3946DB76C592C69A1302A208AC1A51F6305179
-EFBA41AB5B60B13FF1CFB6B6161BF2A01E81691A5A8AEAFF7D9584B419161569
-BD8945FF97B796C60F5FC0712DB15FCCE84D780C2620AB21F764435CCEB3DA64
-703103CA0634A50A0C0A5E3FE2E6FCED1889BE4F5BC7A019F8D8D697CFD24B6A
-5A7B040F98D9993625033A09E9B3D2C6F3DFF413E9BDC5890E4E2F58BF91F676
-0325425559A74E0D3B39E05D4EE6A792E426F6A612FD77AD3937598A36B9A8DA
-1FFE8373DA2C1FDBB8D4DDC3CFBCF20F2B3A2D8E6A7403D1186A8D8DD4E12AD6
-04D8D22B435D16285985C02DDA1410EE25AC222D8623B680403EC4E897A127CB
-F8830FD914F840BA9DB48C12CF6B2A7B8F5249637882B3871CDD2F137981C98A
-0FEBB565BFF01F3D9335AD23BD3B677D1DD762C2364872E9628C33E13F890010
-4B95A53239F2C5697F604F0589671573BFF43753C8B2A7259C84B4D5479DD0A6
-E9C9C05C3A5ECA87ED0007CDB61BD3E85521859EE10BC77B34DA8E7351A050A6
-1333AE0623596BF24E062AFA602DE049362346237C1D7EB805619CBE8A738D1A
-FDB9D5B84AA46A4750BF11C402A329178B2B59413BA0F2E9C3D167176173C163
-C66A980111EC0A30D64C6C8B9F9C7CBFD605F02654F6375B7A3FA7B9BD04377D
-696AC176E06DC2F82802C67389B956D79658422621608808987B90A060A25894
-7FCB55226FD6491E2D0CFBE611B73B4C5BE140521ABDE334B8B0833E6202B714
-62E9CE6FF030912B85A327B69DE37BD89D1A029B22021EB4AE23BAB65EC90355
-2FF485895C62035EFBB36F1FE3CE7F042690A0EA60D4FBA833CABB4DDA727CD9
-D7216985E44CD993591ACED2BD07C282FB95C07E6B3588B0A0EB73CC3FBD3023
-308DDE03060536F69FA9668B1F06B4CB2AC952D4321A99750B42D9D0365EA3B6
-5FE77B627A9A7CFD4F9F1666C0FA02C00CBC6E6EAE13AFD78C8996CA69A02BB6
-65FB02BBECE3AE7A695195F58EA12D941716CAAC8A0997154BC80843DDDCD74B
-5A38B0D70667B7234C5EFBC0F7FB602DB533AFBC2362F88CD60ECEB59CF5B1D8
-0B9591905B04B8C634E6BC3670109BA6D60D1B4D0F6EEE73197FCE27E29D492D
-735B2CAEC1AF3B9AECB81A2B61015F99E848692DF47C23185EE6E3810BCEAE42
-C01A8016BD4F78673E6C00BB8D99C454866921E480CD06444EF43AA035C86F5E
-98FCB238A87AA6EF921B65AA00E2E895DA9DC8FFED2033B079CF45AB3DD48D7F
-FD6D3638CFEF0ADA4048F1D27C9CA6FE58FD608469E9E4AAAF44C4905FB68B34
-598D6E1BA3A21FD81EAC6F65A0CD67F980C4F2A96CD1A763BC91A7704B69D11E
-9BEC8228708304A5419226B9352C8A9E333EB6F3E081CE97DF685FCDA2C08C78
-4776D1F44AF70CE111B05166002D17EFCB31F6DEE5A8EA404AB386777D7E1B3B
-274A4918AA6613FF3B12F101F09D85B5E3F988D8EC02B65BD31F039F80E15403
-1C00783C36EB1686C1DCA30EBD62E072432CA608C4C7182331139F56EB736AD0
-27E2C002A365333635101305B520566CC763401F46F7F85DDBB781CA50744634
-7DE6BBA25DB93F3FF51BAE303FAF4B494C622A207E6AF0BF1064C9121C2F2445
-E8F46B8238C7273B89BA8B33A23C56EABDB3BA2DDF5831EB55F46BFD140DA5A5
-2FE7665CE873CC0CB9FE96DCC91328BF4D0D4F1AD1492C9C7C278AE67290EC68
-2BD0F93FD3E091D93E5BE02A6339C243429BC2D21EBBB920D4633D94185AA4E9
-124A8693E72185413CCE00309D3307DE8E444D8B0F855AFD421D5BB68B3C625B
-A2B9AE0F8CBA9352C63E324F8972DF41904DC78CCF4D425715D1CF5A1EB7A935
-9D0A8C79C14BA670C8D6772F15920622C2292D5E21EFAAA5C60E10D3325DD730
-2BF34A23178AD19DBD50DFA8CC8C0501CD1BE0C492926446CB17FEA772C00D48
-C3B23451AD493A6A6D236DBFD145CB7993D16A58F704DE77FB1470B3CDFA67F4
-835732E65B2A9DF23F53006FF3485E8A1233850D4CBF5BD856B00E3F3F8BBE0D
-BEF7F13E5764D656676A48E947732506A39AE157CF56DA7D7EF49DB48961F6AB
-0F9037A9283B7619763A6CE95BA1B58D2B72155694E84D330657247D0F43D736
-161D5BD49EBE4131072407E1409EFAD6D1BBCD21FC11DA2DC6E93046A06CCE6E
-735F1C3B5C88A01165DBF07CB86E3E609D47BCB2BB87B99F5D8E903D435A330B
-67674BE5E81244BAF17337DC8EA68E86C588C03EA85DA2B78D57CE72B3B62C0D
-3EFFDB07C7210B6A51D2ECD734DA29D8D0C14DDBE61CE176FE226B580427A9CE
-4C76CAA42717849DFBCEC08AA06DE53B013FE246966BA177055A950025CDE913
-E5D9D28E53EE349E03DC8C53C9A1551541CA10F2DDFC05E1C3DBBACDB321FC92
-C3C23E241EBDB8856D0D6A338668210E196141711622E7FAB27F80A07EC32DFE
-16F38B5F3DB735AB199036458D91F4FB1DD88236722FFC8AD032057CE97B64D3
-45167DA10C72B7BF526A6EC0E706BBD0ED91652B2781842F8DE5EC9A1E792236
-1854879179CB67DC53DAF6226C3CF47EE3FFDCE17008ACFED5B5105DC93302D7
-E1D3402691FFB75255E2BF2ED1D3C6EB38754C4120ECF6330FB0CD390E08A88D
-73CBE6D4F468B8B64D23152FA3F94941
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /fl put
-dup 19 /acute put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 45 /hyphen put
-dup 68 /D put
-dup 76 /L put
-dup 88 /X put
-dup 94 /circumflex put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 120 /x put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E42779FA15EFDB451F
-53495CE8EFF239E4EC442E1439594549D45F5276F93D496C9AC712D762D0B702
-E894290BA028837304AFDDD8BAA6564E9DC307A14A7A206550FADDC7784DE3BF
-3390188BBCDDD929C82B1D7B529553BA75ACF5B385D31EE3902D96B2B5DDFFF1
-9F0F90FD791E54128C1717F313486896868A34FAFF22E23CEF046D02C1419BA3
-4389DED48DFDE7F78F8ABE3DA17968B0F496945212845780F542C02A9FF04228
-93F0BE060C25D1F025E126D6F118EE0430CB71D5F505F1F1CFA4F13344F0AA89
-B2C910B4D4CAD5C06EF454B46AF7E725041C12CC2AB1F26A27E7EE894FA48475
-EB4A59658B4C84DE0D447BCFEB6DC029FC62E833DED093D365637BB4FFE6E54A
-FA8F11FE00A7F34EF25F9B37B74A763559B8048939CA9717D0A56CD52013D39A
-3418FB36F83A45A97B23B02D78EC7DF62F59495DC7FE2CBDFA2809CF9767D1DC
-B6AA7E9340B087566C3489B54EF32765AA77932C18E32F7F2BF03BCF1C9DB761
-236BF1159D7EF7BA13584E669FB1AB7922657A4096B81055E7285BEC4FDA1B9F
-F357FE89D12BCBA6A212AF2A021E6236B5F3AB3EF737223242746C4EE1FA8B30
-B432961A657121FB2DEBC398F4203366FCF496AF60B6BBD08AEBA243682DF531
-C2D17D85EC6368360462D357784D7563E23AAC44192FF9FD302803945B4718C6
-0A6E8927D340AF205F90ADBCC6D9CF9F2D95AA77EA5D27640D07A64FA082FF70
-AC271AD67AF53EBD42A1A1D06253B87E1D2F9D751985400B50A17851A058607A
-AEB752016567CD73027B5DFBCB2DC21FFECD11A007CF99F2487D49233B53CDF4
-458B10D8A6339B19224B225FC3107F2CE4C8F2A9CB1DB10B756BA3EF075FDA30
-7180AECC9136A728808C5275F04A901D30A0858AE1FF8DE220060113711AEC2E
-BCC5B57FA74225FCC802B16F3C6EF91C0D2A7C161A2FD5CB60C97306F7D3EC8F
-BD51C9DEC56280544FBE7F386F44DB987AA4E7A81F5AD2EC476A5D15CB2104ED
-220EC9D87AABB903BFE776A8E2D6D100BEC447AE99087427FCB5DF0004CB99FA
-629FBAE0AB3120C4CE6A5D1BF2C9056A35A6D8B776717324245FCF4149C448B6
-19698E9BD3BF24806929AE5B42CBAA14D9EF6D293543868166780DB02CCA1CF3
-1B5920B3A1980A159C71E94BBE479CFD35EC091F69D24BF00EA0779CBE23473D
-8574A1EDA79660AC5C47D29C4463C50241C04748792A7FA29AE0543643E27DAB
-0ACD228E449A1C83D5C057980739CD21D5C1CD592E982AB3E476550412904643
-2F3A1C2AD194908096FEF2FA80A071431075951514AE2679803DFA39184CE9A4
-C6AF7580511038A6FA0E54E73D55194F499B4415288FFCAF773B81B9C48B2A9E
-1A7FB96C100CA6D3F0B48209F4862AD9CE8EF933989DCE1B73D3931599E57742
-B040B92C221CE2AFCAAA25ECEFCCE560B94893B93DF096804121D968BCE8A427
-AA3616F7D06DD1423FC7D68318C393C212C707BADCBBB59A94E5E3E057201F61
-5D9DCEB02AEDFB509A65874F85BD531BD56115681838E509607CECA3C3DBF0FA
-93A5E891039FBEF4F564DB3CA8352D64E8A3C30F1B8763311F5834A072532ED4
-8080A6CFDA0CC7F841B55BA2DDF21848E8E9CAFFDE936BF0858A3C09BC536228
-9A11043CE78BA022904DC09828E4D7233B1BD6E1414357E13F010F4A6DF84831
-462BAB2CE0162E168A29204C92732A9C8B65B22743830A8E603C7661509A2A80
-8DF8CEAA63AB92BD4115160DFDACA109AD42582A8FED4584364CA5F0C3CB9EB8
-6D044E28D4BF1629A75984DD7EF5F3444A483B91B43357468816A6BA5922E56C
-168171A7B3CA8DCA7DF1274C921A860C26A36E7D49EE364AD0EBDB2405DF8F06
-BA9A2F4CC686AAB2096C23527A3AC4FD6D4476A46ACCD10566CB0555F0E598E9
-7761702A727A91A0A79FAA65F5B06665DEE1148353627EDE044F267EDC2AA6A0
-39AA0F7DE29608A18C2A3F0520F59B7702C7576AB6D7552E46312B5331849350
-A367272B71B3E6D5109FFE119755486467ED45746B0F27357F1EF931B5E12851
-FB223B588059DCC67362E47A3146F0E16176F362DBBD31A19C6696266E4639A7
-55DCD47CDDF1459D54D26D2422A1B50782CCEA79F35A2D262B2280605EEBC03A
-8835DB418109D38E36C0A44CF2966539F37BD5725CA67809C140A2E17C14E7F4
-912E752F75FAB802B0C62A210428392EBE00822DD61ADBD544F3582F813D10D5
-9873BA68B713E2C7367EB60F3905C0C49BC47C330C0F9DC1819A323D4DF0C45B
-ECF1E1CBB01522FF20E33FCA91121B7663B63F4606465555E569DBE49F88C876
-D497436039869157F7C9171FC1DFE87E1A5B0CC12F2EDD7D7237D93C439F2C48
-C0E9C55C7B0EFA3AEBA6E6C517578ED3D457120512031D3704D38881018743FF
-B95D976F4232A8F64A4CD1931F2584A409788AC47F5773B6312CDDB34AE437BB
-F7A2488EC67FF7BA825DE90DADE93611F6EB7B10F17717DE7C85542E54FDBB64
-A19F859970DE991954DB72945909D63BAB31AB7488F85934C821AEAB24CD8286
-3EC4DDEEFD050E4D03D3888AA6DF636560392E9BB60087FDB7E81054A42986D0
-974F8AE3684A659E9B6F2A34F9C3BD7490686E0F5AFB07F9FEEC6044F93707E4
-8E03750E41E99D93E137D4E999C47B100FF7F33812142BCFFAD81ADC7ADF898A
-28D0FF5065D529CBF95D5D10C3398DAD829F51A60426EF44BE40543FC545301A
-342D0314A5ACD84CB770D706FB5C35E996AABAA277B38F85C7D5C8800ACF8878
-1DBB33B6AD14B25D4523EC01FD08E4F07F1A1FA677ED02DC77BEC346FB1DD19E
-4D1811FF5CEA0CAC53693A8255C2AF5CFA159466BF78EF83AFAB988869D60CAC
-4EBFE6369927861D7F8D6C8AE27DBDFE53E5B16EEBB0274EACAACFC1DAEB1E49
-A6484027A0DFF59C9BE87BADFD7B5CB844C62851A3DF797A5729F6D9F9ABC75C
-47F937C5ECDCB374AEFBC418BDB14E5138814EF1835B21C298BB07650FF84051
-DDB74C4EDC7EE6B0F5132B6D50BBBC30FF60C642853C13BAC92D741E8720BE29
-342D8EC6811C5C493449D79CFD6F8776F72EDEE68020AA4F6AB0C38CDCCBE517
-19382E10BCFD1FBB507B4E06B24602D75E975DFCA3A897215D4ED8D4C1A11DF7
-F68139416A44D9DEB0A077E52501CF2C7FFBE201EB14418F8943E2690E7AC8CB
-173EC890B232E79CF28735C42814597F52A471989259CD1C3D1310D84B668895
-22853809E05F26C28067F5EF97FFC9FA1D870DF1FE5DA1D6E449908FF7D40125
-013B57A34C90AA7F7830CE1F6CFD1C7F9B1FC865B160671B97101CF7961DBAAE
-D8DDF68CDF9150AA4D7D379AAAF0660E8941B5EE08AABB4B2C27163E9BEB55F5
-F35AFE29559B381E23CC07D700CFF4126E020DDFD3034428461D0105A6D27D19
-833F3B38228508953F1B22EC62276AEAF09C4B1D8E7758EA68813A20E79EFBC7
-E3779546015B714A0D903190A1F40FC20CD4AFA681C848A0ECFFF2E0936BE7EA
-CED292FBC25AF6FDB10110A777F59F27166A0A66752204DE35DAD4A78968116D
-E8043BA9C76D12FC987F999F807974F0F386BE2FA01B5A4BC00E7282016722FC
-871C1CD8E3C67BB7DAF2024349E44828480E6C6767F504FC4927C7457D1BAB40
-B955E2FEF273DE998F75633E776B6AC16ADEAB893A66056BFD071C8C05D1FEA5
-86C1282280A25C6A1F974A4AA09819844E9E111D3CCC3B4EDE4B072F3AE10F45
-A7F6CD52A75921A7B2B855E414218EE21985DE3A070FB027D2B9B278206FDB54
-87BD1A73E9E6D5782D9EEE209E90D8948799A30D398B69567F3F90F3BB61BACD
-05390D3BABCCC9BC66BE2124ACE5B1D6AFD7830843028DA1B7E4E0837884CBBF
-C651CFDEB0603366E1EE6E2FF55758E7EBFE961026BA687D5553733C66158F0B
-41B100D85F75D673E4798BA1407CA8D20BC1E4714E7BBFA43C6A0D05E0A2031A
-71922150AEB33EBC109DD017F3AB194A4A26E69316B4FB5DBAD473E8CC965298
-941AA44BDD3E74C6DADE122E10580690FEF825540B334D9E7353A8CE1769BFE6
-9E343B12E672F455EB66F7C7197E5CEA726F775DF83C057EDB5BC3BBEAD4C3F3
-85D74CCD4E0167EABBC015410F64C501934080BECB910E28212A14E5440EEFA7
-A166AD8EE84EEC46B4E7D22BE069CA2E3EA8A4D4D3C7C39F53AA60F2C9BE9CBE
-DA881D39A2648BB0E76B273EEF070881A8D6D5AE0E208494844527344F1CB977
-F9587B6593219D53C2BB242745E2F766EE45476B1CF7A57F5AE1E552F66D86BE
-34DB1328563EBA8C82234FCF3B032CAE4F91EA2D2D654D9FC945792BFA7630CC
-5DD3D58F8CBC0A768C332AA3577A68B078ED678D459CCA95CB2219C3AF9911BC
-757F30B3E5D0F2B65975C9BB457EFEDE18C2A0A84481052304788792190AA148
-5879DA96637FF82EA549C21C261BCBB208382EA8CF88D5F90B459E035881EF0A
-538C11BD0D9DA7DDE779B0EC130D2178FC172D36418A0952F9954891E4F3FDDC
-E2EC9057F744C3E773A86A66FD5F96955849B954C0FF52AB188818C5C61B9246
-420972150A610F9B48703DE474F59C3F4D1BE7D6D2B644A53EBBFD31E0A0C859
-9ED16BDB040B423E7199523253F8B6930B42C3022B987282877176EAA2DA5D8E
-A296E691A63DD4AB1940203A9466DCEA610C1E710E19B51F024AC7290464E0CA
-D71F1ADBBCC929D47C067EEEECE89F51813DDC912BC3A458D0CB124671ADA83A
-E3F84A32C6D7C8328F3A61ED1A6145AA3FB9B0C61494C1727AD7C31179F3A782
-6186AD804A4E7D9FF45F23DB040974D97D234CA4369B0D7E100C9618DB4F0878
-F4D09DCA3951AE16452E0C778DF27929B1E8CA7BA0499C0CED63A1D44A055AEA
-B1B419EA759EB22870D07276550C82984B16CF42EC601180E2761CBF7AE318F8
-08226B26FACEF9D49325C01C5AA0AC3972DCFD03E1087BE1EF3E03706F66C303
-F18034BF95AA2E884E5F3437E82970B1E7EE52C6EF9D9AE515E62A22727E0FF9
-57B57723F2C0D6AB361B69C9706EE642A22D60C50582351071CE7CD2CB2063CE
-F79B68D9889F778A579974A044937D8985EF2EDB4802C41C9F1C90C2CA955E09
-794E1869445DD838C72E6C40B27F0EB4CA469CCA43EF2CBC52D0F85EA9A65A14
-85703F20CB9C8A23DFB37AF40924F4C6DC42845A908FD681EB7A9760CE42E6A8
-CAC78FD7B5CDA0ABD6B7FF2F5A7C11BA6728CA320918A724D258CC0CF39AF7E0
-7F7EB31A504421E7256E4DFC9094DCDF9D5AADD011D28E3BBDD50EDEADD9A6C8
-5A3D88480EBD42B25BC54F25124F74A4AD553381D91BB0073D0E2CA40260F47B
-019DC331A162029C3E83DCC2F671E62285CAAE1508B721A2725C1E393B26C33F
-A21321E0BC4EF1DFE7FD059CEE5714F2F9305DFAE2E13AAB396A8BDCAAB31DA3
-5D2C97192EE1A3F6A3222ED562DCF55938FF3569D575E79EA970CE161EDB92FD
-8AECEBEEC8B1B659354E686D3DC314B9E7CC0BB26335938C1C7E1B345A8EC8E0
-448DD0ACEF4F0DD28EF06BB4CB88949E8BF0FBD7AC280B3C88C965ECFEEFF13B
-AED2C9C86B43AE788B7CF2553AE7F595B8CB7E1D02CDDCB93C15
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 14 /ffi put
-dup 16 /dotlessi put
-dup 18 /grave put
-dup 19 /acute put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 76 /L put
-dup 78 /N put
-dup 85 /U put
-dup 94 /circumflex put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-dup 126 /tilde put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BFCDAD26E094
-0B5FA59BAF86B33DC3FB410482C89BD49D35366A89B60E664BD2FB8B6BA4C8F0
-6346FB25A30ACD007AFEBF8AD0DF025287F48C231635CB6432E5D07CC199F5E6
-F6F2FCBC82331A9856BBE0AAABAFE8F4557FBC1F1755C616014C46FDD9BCD5E2
-74D6ED50824C60C92D3FE775537FF81BFA46D5CD10719F7759C3202BDD4ACE5B
-16155CEC9104E72C64AE50EF312202BC3868261B1E2FA93DE6232D7A5ACCF319
-E69B1B46CC9059E83E5363F843D7943FE7199A188C7086B2479E51DD46B03661
-026301509A0B5820167D62A4DAB4FB1B2036061C3BD36EF9F17C00B1EF2834BE
-B4EDA7C90D86EAFA03FF8ECBA7E3A965E6FA7C7C58FBBF508D7A1B13F8EFD6F2
-42A708BD62E0044C17422CFA3675F118EC90BEAFF1B0B26FD87DE34F560BACA2
-B3F71DCA46C784DD766FB880AE6C3899154FC1469CEB07DD97AEC7BEE2306813
-72C082827E05174D93C6ADB569125F9216FAC9417AC2F08BCBEE840A1D934F04
-6D2C0D128C20605670488E32EB8A4DF4D1F41F960ACD5B075380E7FABBDD7940
-0061C86E7632B97F0CF576013FC802089CDDD049CC50ACD2577BD46EDE07C475
-4C3E9610BE4169296F1E4548F6D850C3BC0F109EA0C85DF87E794F65C3F7DC47
-BC5D474047FCF7AC44C31ECF04D3777325D8B26CCCDAA6DD5D10A22719C0E9AC
-18DFC769FAA33A7CAE498F93E090559513952CF0C127683AB56FDBBF7FB4C0BD
-FF8DF946996DFA44366FA13EA2DE60E35708456B501485F025FDF67B2527CB5B
-775A28FB4F7A506546A12D7DF1E266B1075465A9DC0B62DBB3C70CF8A9919ACC
-69DF54A36E536FDA79BFDC65D00F1E105515E9B14A5C2CC4350FC582C84CEDD8
-952AAE0AA20AA7A92ECC025964AD79AED3791232D219E04A654A2FF25C901B24
-072CD077FF3949594627A38A32A220C4957F2A5ABE88BBB7DBB360CA19C63D25
-EE7BF0940DD0FD50CD90792A03D61521A82F90376723A190FB039397CD48FC66
-28CEF6D3421040367DB78142702FFD89E0A00E03CC42C6D0B02C5639C26C8A58
-EBC6EAC6CA242376A680A5A73CAE6C893AE7BCF42F21966DF0F487D1FD20826A
-1AB6D9B3E4AED46B224E95668E4DF918C8DA5B63C8CFA1F4BEF212A2E4CA63C8
-73FE76801DAD11E96D059E0EB0672342F505BEB7D0231DACA72F90EEEB0E944B
-973B00DF7FEA21AD2DE77571A922C39D526EBA4907C01EF8719E9591E3CC0BEB
-6798FEF283083109B3807DC715265E6CEA6E874FB01F758E7F4B372CB6967A12
-7C9B1D328AFDDC0DDC32243E1E847F69E02BD6C64CE24AFF85CC05BB90BA3AFE
-1DF8A910A230A48004034D7F72C23A4F1B556BCA4DAAABB66011074615E8992E
-00EECF73939959F27BCACEE2E60389EF53393F861505C0E374B8BA7DA2A54634
-1FD44F541649C585D4EA8012426E957AABBE7B78633800805DD6C958B347F386
-6A4A3F0308081F1EA96676F7221C90674ECC66BA7E32345585363E44B6BEFF11
-8424EC471F8C234B145A9F7C6741C1C0C257A55078BC8897B24E1CC71AEFF8E4
-3C46CF3ED69BE05ED2747D027E55E8D24DB09D9978A5FD5BB5968C777DC6E62B
-7769E18593A21F1D7061B7E01D55FAFF879A299C6990DD8FE4E03F80F2BD85C4
-8489D834EEBA66BBF6A378CA16418091D3B06173130922E9C9AED4CC09B00FA7
-17C0E6218E5F17DB18BDF932EC3B7814CB746CDABE362CFFAF9EA195DB2E3355
-C4804D4E65FEB1BE1293524D1E0C7A9CF87C04107E60EEF8E6316FE1961EFA4C
-380691175D7CAD5D42A04BC9117A8A53E86D17021048A9F73F8BD6C30BCEDCA7
-512B4224F26D5C3F949B65FE8A222539ABF1319FB80F7C1C7A9049849BC39718
-4F081BE49D110030630957DBA11BC38DF9E67F60C3A0E2B4165E81F0E1444690
-7DFA89C8463247F1D84E31A168E6A6C12320012B4BF5104E343CD3A9A4A80ECF
-6FC7B0043E6B9107F1EAD0E949D4C7286A2A9CF506522AA76758ED115800586B
-8765A82598C8F882F3BDDE02EA5A508D23AEE9CCAC51B237E0C004A1B8921F83
-9516AAF0640C2126CBC274A744740A4CE202BF4DBA9B9635A345C90A87994049
-C8C975A3A364DE31790B9138CEDEFD6736626405F5C55F8BAAF6723641688424
-CCA5871C72A65D204F4B9BC8A5B2572CDBC55A615E7BF4695CB5E3FD45280236
-C2B569DBE95893E896D1B300BE04FBA8470F89305584B332486CF98EA496F675
-61AE9FE8C6099BFEC126D8B6E2ABA4CD97F7434DBED0A09151671EE9BDF7F1FB
-029378C428D367A4DD129DA2A33C21C91EBB53045983BC27700DA4F8CD28D4CE
-BCB9D37B5DD4A213BFA8B48BBF40399DCED470E541BFC87C0B14C2EE96959F36
-26536E7442A18F022CF7A1523707E2C71CC700959B038856E4B562E0FEB326A5
-149220427406DBBE2E2DF677BE8F133CAAEFF29B491E590848DDFA014E0A6E61
-D393071FBE1A75DE6D751920045D59831440D0F2F84C48BB712E2787B969FC93
-41B4F53427CECA794D8CFFFC394F5C61FBAB6D289FF49F08EA396111194E941F
-BF0FDE0A480A0D8025C2A1EB0A7123C2C4933FB57F8D5821AD99D87FD6F595DD
-2E3938CDCB424E28C18A5B72F301CF91DAC0A7A52C637BB60561B14903297EE9
-EA8361DDDDE5C3DF4D7BACCA022EC94422F26A233A62FA49B48F59F0B772D4A5
-01D558AC29A11CFBCA0A1D22DFF33E42A6ABD39107FEE8CB267358710AE2018E
-BAE0C60C5115216B4E5A235DE847F2174456DD5167A49FDE0E298BD6F78435CE
-45277AC664AC406D26A46B3EB6FCE8FEF468E1C17F9F3878317E6B93ACD62B83
-873ECE0B8A7E3D577A1DF1CD6BBAE97485680152BCA0A6612EB132F295176232
-FDA5FAFB9570CD4C45F6543857C21D3B529CE2B56A7EB7F8A8AA72775022550A
-C98C1C40A5A2FC71E79D0F13FDCB717272A52EFD70681F899D6FF0F984D2B038
-8F40A07F2EDC6D89905125BF49B8DED77B70CB677B2F5D8E14A596F08D1CA4E6
-FA0E729C9869B9B9D1715235C5FAEEA75E57AB60E6576FC06CE5CAA30BE42B9B
-AF09F2FE4F358526501BA0BDE042CDE1A3B6290FE3A8CB744CA6E2082CCFD6E3
-371D90319099ABC30108CFF909C9E3FFFCD5027FC7792B3337FDAD757F9F189E
-94CFB440246DB5080D22B0484BC9EBA1B71E759B775152DA6750C5125EC57F21
-E3DCF7781F6B1F4F0B8A454F7145C56A013110B56724961F2B5C9D5BBC31C38B
-B03EDEE91AF1842DC0AD3A139514B4B9876074751893AC60D79C9FF29AE3BA0D
-797DA4CCFBF188238B7CD7238909A368964B80904E8B319107529F7740D8CD36
-A4F4416F5CDE3ECD9E96E0528F3DA04EC8D2D9F883649F276CD9E9EEFECE0554
-B59154E978443DEF09DA8E20768C773F64CB6990CE16AEC00CC9C354D7B4A871
-C93433BDECA5C5B29A576352C18DF64415BD65FB49AA4A37C6A08BB49EF727FC
-AF41BAA5561E96C8A8D3C878642B264AE6FE7A4714A95BA15751098B655B8DDE
-BAF7CB671D0C831122C688DF16500092D9893165D84304A76EEF783B1BF9C7BF
-A0A44561034D7B5AF0B941081BAB79935F87CC47C1A94C3474F5A816038ACF55
-A28971441815C25409267CE15DCEE1106DA3AE31DD6CFEE18C56930D8B83F72E
-39D9F8388028B829F8C088AB1DF85E48C9136E7A002F58B6C228B24DADBCB575
-1E46776DFA05BC5B9975B275C4771E133039E03589E91886F9B8D8A24CCE2C28
-869B9611C9F1A1C2DB2B4D98CC2B33657FBD9D401232E8A60B26BAEB7B6ABA0A
-08AC541D2C40E5D5F99E59087B5FA41BEBD443C9DA454515BB212E8871FE5003
-B218CE118BC213128782ED027E29382606F84A730B362206F35E2AF28FE0057D
-66115636DFD24EEB3ADAD99EF5437EBECAC657988475A398815EEA1D47FAACD4
-9D5498CCF68B58B9D733925AE8BE4F49EAF633E000B6AC6FF355058B08E059A5
-FFDF1B568C2FB202E1FE5F0E33667C31AD1BA08C5443FC3DD94F3E70040BF186
-9D6D1759275AA67CBAF0D58C6CA455A3A3E947A5E92B44B9A1A79154918905CE
-6BE152BCA8C421B2B9281917EBF329597BF5072952BCCA4E3B14E783EC0C9FCC
-FA05EAF1EEAB96F7F88FDF23FC5A7C702542B3484F0341D81C235DE61BE04653
-4DF80DA696682CE68CEE9D4DF7611D86EEE18C00ED8E5406F3297ED1E0687F46
-86526AF9C811766A79F26F4A9291C8FA58AC32237696BD52A8C07CFE7DD95E1B
-1B401ED62F4E81B8DB488EE433F7470C09673C5BDD609BBC5F4F92109686B803
-E63FA706A382F6FEBF4486FF7E414886AE0769BF7A45E1A1AF84D31EBB6E8B2E
-760BE525A023166F9C77341C19CC4C83632CCACA07C833B355791BDD303266A3
-8D57C9BD3F75DA69B60C86A0863DD8E7F99AB41875DCCA3BEDFD63E4ABAEF0DC
-20F67CDB3FC225D97D22C6DABEBDE62AD4E6B45F39D796EF2B4EA684DF8AB73C
-BD8C5E8B0515E33497FF95DB0D270AFE7E02463AAA9E507277ECE5A13A408AF8
-1F02675800CF1ABDD3E469D88788C2D7492AAA455B4DA5FA121923F9B33EED5E
-B6D0C1138B364370D9D435C31C85D4C6E351F9922D12EC851B2C53CBA16F36C0
-0FFFBEBF42FAEFC77FEEB164D16668F11F9B279736380482DC333CF89C42A4D1
-E01DE4377AA06BA655DECBEF86F1FD882891BF859BBBD39B73D2FB7DB7678DB4
-77C54FD056D115E7FA62E582B6CD2803D40882204ABE7A245241C149377A7B5A
-BC75982489F6F29A301CABCC547F005CBF01819BB279BC775C1A67C0A1544D81
-1063FA144761F1D0B6BB3CFA49927B1415647D03E62BDF7B37366EC4D3E79068
-D3B70246E1D3AD811DAE133FFD5402059F936D38B9A33499096FA1F674D1A26D
-E4DCDABDE6512815390EB7225E2C2E629624815BC5B7004697A566B15F03340C
-828A635E303A5D8F665EAC15629D68D72EFF4BB28C732D0777DE732139E1F3E4
-7DED96116B8B82894170BA697D2388014AA235BCBA356B8E162463C98D1A602F
-6AE42FF547A0604527364E55585E600D3E9E226F50BBF994D645B458718D4237
-F331C1AAA01901A270BA61A5BEA47A34D2B36F1A01E33167A5120BCB1B95737B
-DFCD6C21AE76B86CF22C34A1BB544E3DA6D0BB02EECA21B537AA3F85384E0685
-FE86FFD4883E5917E8E4A6BA9F72386C04DFABFF7E85FF327D0380A581055E29
-B5DD25F67E459AD8E455701CA56E6682CE157498F8015E9EA9309964507680A8
-129708565754D39295938D39B75F6FA0E60DAA1B3586A73CD93B690ED7075A58
-B1D81CB99A85A4E2C2C7CBDB0BD156A9453DF4A0DBB0B5BE7F2E385AC0CBDF42
-53B43BCB0B7051970CA90668EAE5524B4B47F9316B5EBD95B42DFB6A686366F5
-4E8ECD2EEF1C1DC0D4E91D627CB754D05C42F6B627166B53C5E9979F67C05FC5
-1518A9F66338E6F0A68A073757C1B09C3BA45A4ACEEB88FA312BD29C64B9F704
-2AA83B63F6B79D4BA81804F31C49C5E86DA588D60FF5F5F0DAD45121D1DF136B
-824522C19BC1FD616B7ECFD801A8E6B3C900C8C7EF387ECAFA0171F94B12972B
-9BBB9400329B94664828228A7B082747CE7BB86FA4BA7DFFC70D6369F701F4D6
-75362A1E2E9FC1F9491A21B74A7B7D9E08A2D1CFEEFB1B00B217E9B82BA3F043
-F9A78D26F017DA6E33BFF7FBA1A3F0A7A9FDF9E545C9574B0E643A2576FB5D11
-D2A31C80B7D1E223AE9D65D0DA27ADFFF437D29537A815808C4051D5AD68B8AE
-AB72C83E36CDA0072FBA4BC6BAC1AECF629119AB2A7FC1DA1ECD40A759943EC9
-5F5A5D8C94331532B16C85F79925E485494469A1EB4741D90208E4436BB71700
-DC5A262B1857337F13121EFC90D50416FA6C9F59EF53CAAE5D8FF8B922939F24
-55A8380FDD23B6DBF89CE32FA744951CBB0D1F0F54E2F4D47D07176E08559FEE
-CD080B9EC4E92C389381DD7888F7CFA9B01287B6EB9F7FF4FF4B0B5F14AD44D7
-62502DF574417E86520F578FE229113B707673E7C596947663A6DF14067ADD25
-B2BA77923EF2C29E4CF0AFA1E76A9B3531153D65CE094C768C17A0D429A11FAA
-F765671285FD96EA5759F2FBA19E8520D748D4BB6B2581974004BCA3A231E69A
-80E8B9C3DE4185AA9FE85FBD47CE5FE47CEAD1CE8BAFBEB9F6E1D546537BB712
-76DA80BCDBA6324BDCFDCB33DA14D6CD7FA460A06E5F977ED8295B5529BFB984
-D5CA95E43F2645035CD347640DE79BC6EA3008556279D33AD1EE216DF0C84A6C
-CD78B2EF8F2DE91176FAF066BD0856BBF7C2E9B36269139C51FA2CF9C032CB26
-BA80F92D00D53B626EE4A497006C81F93A4A0ADDB3ECF54ACC6A88F0F4EEA5F0
-C41E4B6455F9D4CD80057C2078D667D74EAFAA08815678EC144B8FC1CE4794F5
-747B942C90896D9BFB7065FF36E37AD38DD5EC51899CDE80A549C816AAC70456
-3B41E00B099BB201B4C49C2A91F5D75AC1F1AD6EB8BF300FC840E8F3C28ECA46
-FDD957D4E9F82828719760F0D067042F7EB687D12AF6ED89F5108B8092D9DEC0
-28362EF0597EA892067603C2F2780283617D14AB3F2998B4D94F272DD48A4FF2
-2240632723F02C2C6C526A0D1D7C3DB7D650979080B936EF2D71B5AEE7F1C743
-730712A2DDD6A7E87FFBB31C0E8B9C57D33E8B7CB24B9B79E2D01D698F4A2B52
-DCA685B76DAAC5A7849829CCB09F533E6AB6EBB2867097D29FD6CC02C6570758
-778207BB9FCEA10E355D2334405A6C5CED25B06D51B564A8FABE0810F3CF1591
-96773D29F172AA58F1A785762B88AD2857C2DD2C582E48E92EEC42F37C956F9C
-754E1C985FD9A3F066DDC7505D55A0019691964BBE8648DB702C2531639C015B
-C919A266078DA05556DA1E18C8609430DBAAF5EF26C3F6C476302CDD49652264
-5F3E12926CE91BA7EA2D77FC046FBDD952C66E35D810FABA0DF577854999D3CD
-17A06E168C4BEE93AB73D6ACF5CBE38AC803B049F89EFB2C5A4D608BF7A6A107
-2FFA1C3020933A896D33D172AF8F313D53572F5646A1BAFF9BBBD7894D9A8968
-D4F04222ADE3A1BE7C5913DFB65FCA39FC3C68FDFD6EC93D6858F0740F93D886
-C09AFF43A5C1DF7052378F128EDB66786A3547CC075C2FA023EA2A63C7A6B064
-97D470AD76B07A59D7CF3ACCC5CC563CEA0B8173812C710A2D44E2D60CAFBF16
-13D1890265804DE85521829FD3DC04F967BBEA013F8178709A51416AE0D87FA8
-8C3DD085CC9D8D2EE5DE3DD630EB053F540B1CBCEE164BF529E3EC1218646437
-CB101F887AC6F5AD782BBB677E8FF3018E686D3DA1DB617759506627C269669C
-5BD0AE3FEF1181ED2B692AD3120E40EBB0D8F3CB127FA865FE7A36130E74720D
-023F60D6A1590E725E0A86468A5D7469AE8F7DB27B45991ADDEBF35BAD7BB467
-CF1CE137C48AD5C648648BE0AD3DC95B888D3432CDA047B58BCECDB1C10740C9
-EBCBFC21732296C3E9E273129E62CDB1ED23C5494DDCF13C72CD91F5495DCD3D
-D9E624B4C516169F6BD6808FD557474A1A49D93C0457CB91C15EEB0C59A2A47C
-CC64EB273209F7ED5292C015F301BC6A004825D9715F988E8417C998F4B3AE39
-AF1EE945944B95CB0BE7C2C78174D36DCC181D2C4485F7A4F6E3F188D84996D2
-7767614B51B595D27D7BA1F010CCBFBB4A850E4924CC190AABCF3FFCF4562262
-DB52023EBCC89EB7FB29F1A56BB5D5D411FD11301FF3FDFCF512FB01D4AA67F4
-ED3F670C222977F22DFCEF59A9C9C76EEE0F914F04D9FBA6D917371F25475624
-3C8CBE5FD9BAEE93BE81AC5F4C35E811277FC61E16D98CDAD851B39360FEE863
-D640317D92FCD587EE527714A70FED5B60976AC6516F7B0DA2E3B48B209BBDB4
-3E8D0F5A68DADEF38A3FEBF97885B68038B397852C5B1EB6081A12C4A19F27B2
-2964C2B12430024135DA79255CF0B9C830F9B67110FB782ABCC0B11F5E5D2E7E
-62007E5B0CAD89273CD169316020DD055AB316CB9E22ECF70A13C7DB0190AD57
-9D8507AA5B1E0AD996137F3D01F74DB257EF115115BF54039B05113E767DBFE9
-6E95259984262CF15B39F40F7557BECC3D72B996945E3748F12D7D264CF03A73
-939711DB0FE60ED2C0C058832D62B36EA9581BF1ECE84BEECA8A532362D045EE
-6A8B375683A3517866FE5CE4BA9AFEB598DF3A521E2D40180063F0146C1E6D70
-69FF30273ACA3B469A4ABA1F00F832F43ECAA26F50EB30AA4A0A43F6672CCCC8
-7AA3261709206497C62FA161DA05BE012FF0C61E8AC135404E11C88E44798FED
-C8624EBA14C3F29E78F6756509AFA6A6DB52F64D1C21131C3D6AC7CCC85DC039
-E7C7F52B7236F799BA55D2E1A0F950157337479E123BED44F10D737CA349BD79
-D7A866B61A41E9E373A72F697074920791C4392683F1065BB05546A3EC1A1BEA
-4E06DF055CC3E49A97D497033CED7F2157E838A71D530574997E8A9ACC9D112B
-6F1E3287BD1D6DE3059D573105BFBF7BB9EA5919EB0D472BD9EA40FFF317A600
-BFF74E9A567300946392FCC1446818C033D5ED18DD09F1FC40C31798C4877C1E
-F7589A7EE12FC113E0D5C394B9E162ABAC29902D2037375064E8B93F85FCC226
-75582633D74F19134963F189FC8BA3534B69B4592C6B43D12F30ED8B11D51D6B
-BCF5FF96E919F7E0071403EAED712255A515079CA17B281318ABB9D44A5AAB96
-956B2E40A8312B3BBF3A928343BF7FE6DE81889EF8629E7A353C1D0771DE8899
-E4D7D47ECE44B4F7D0FE2FA4B10675AA0C24F59E22CC8A432FE7776DF4F042D5
-2C37464202664B75275CD4C46DF7FC32CFAC0CA4D0E6F7805A0221625CBFF147
-17F876EAB25801B3A9BB3020EDD39F2386820D1FF0788F63CDE1B04D0E417F0D
-16DDB16B0850591B0A8B6B0E9BE531558434D2EA441DCA1F99D1DBC0177AED2A
-84D268C923FA11182CD287F35C38441DB259CA632010732A34098A6A7B2036BF
-77AB4B4442062B3F1CEF021BA4EB5A3B7BC51D92555A7E68EA5FA142E6406B9C
-5292A56B48CDC13ACDB8594EB2689AC52D3E1E8F4E3F20DCFD0D60F588274247
-749D26677BC25F74AAF7A9BC4EE9F7CF33B43C56884BFC617DB872339465AA22
-ABFBE14FC1D7C6DFFE26A1384C54E84E4D0C53C8BCF20052E5E0C37DCD7B87A6
-BF43DB8E4095F235A28591C939A0EAED07E7515347CA17F3C861076D590497E3
-379F5671095566EB74480D635DCDFCA0513FBE5D175AD3A70DA5AE551EDA1A82
-0F9626CC07D0DFA4AF84E34D76DA4734165E261E5ADB08A7894F831FA36A8C91
-F4CF41B0395BB698E7AD3B5B53F7823F0F250ABA832E877D5B8D144A507365CE
-DEB558DA47F8325185C0B73E30BD7731B7E529817B3F6B845CE44A5474F2C6E6
-566A7B129544E2ECF251F146555661F8A088FFB50068B052826E5B20832D2328
-EAD92DC22B22BDB5860577CEFD4DF35C46FBAFECDCA3F4074BDCEE3208B77BDA
-FB58A1730DFBB0D984F08735C3CCB821A68CE37567A9817451A7C78FF7F55729
-85ABC2567D522BBAD215095A0447EF30D23BA45A24ACDEC4E38DA511674828DE
-6AD7736F3B989AEE38DB3F7A61DBB7C2438CAA02CB395209780FB22D4BD1CBA9
-5CF9B2169F973E322649597A56064432BCF0A2B484F0A145AD3E79773E1A0466
-9C5644EB6700703E67DDA869E4200FF89F3FEE1CD37318607177B8F8CDEB685D
-87829150D86131929C85630375EA5A1A539DEDE767808E6E55D5AE2346B4D39B
-85E1B3BE9BE4BBABAB62219A05C303D72D63354754513A753DBD8654F2948E87
-12B850890DAB5B0C82EF882AE1A34C2D8CFF44FFB6E9129F0DD7BE6F11606B9C
-7FB57ACAC628C011AAD417478FEBCFA0B1D59051191A2DCFE35A1F0BB3C88EBC
-78C8E1FD5E7ED2980D95AB248D6140AAAF17C9D8ECBE0E553FE476C23905CFFF
-4646C906D39DFB11A3715F260D13F250732EC66D4BDFD3F2D7FA95520A2938E3
-35762638B374221674B700ADD197501ECF1EF1454790B6AE5ADDFAAC6AF1E712
-B2A467591659B7AA4D7BA89C4DB0F16EB49FA37A5632676502A86536D3E38893
-08DC8CFEBCEFBBF7A1A9104E4C9F827AF885A981222E4C9B89B69710B4F761FA
-3992E8168EDB118CE8C3
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (fr-drdref.dvi)
-@start /Fa 242[61 13[{}1 49.8132 /CMSY6 rf /Fb 133[27
-32 32 43 32 34 24 24 24 32 34 30 34 50 18 32 19 18 34
-30 19 27 34 27 34 30 10[45 45 43 34 44 1[41 1[45 54 2[31
-22 1[47 39 41 46 43 42 45 7[30 1[30 30 30 1[30 30 30
-30 1[18 21 18 4[18 14[27 4[30 30 18[{}58 49.8132 /CMR6
-rf /Fc 129[35 35 1[35 2[35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 1[35 1[35 35 3[35
-35 35 2[35 1[35 35 35 35 35 1[35 35 2[35 35 35 3[35 35
-35 35 35 35 35 35 8[35 35 2[35 35 35 1[35 35 1[35 1[35
-35 35 35 1[35 33[{}63 66.4176 /CMTT8 rf /Fd 135[60 1[60
-64 45 45 47 60 64 57 64 95 32 2[32 64 57 1[53 64 51 64
-56 2[57 14[86 1[109 69 5[72 1[88 83 1[87 25[32 19[57
-57 4[64 64 12[{}33 99.6264 /CMBX10 rf /Fe 135[43 2[45
-32 32 34 43 45 41 45 68 23 2[23 1[41 1[37 45 36 1[40
-2[41 5[61 11[49 7[62 22[27 3[32 32 20[41 5[45 13[{}26
-66.4176 /CMBX8 rf /Ff 129[35 4[37 37 1[37 39 27 28 28
-37 39 35 39 59 20 1[22 20 39 35 22 31 39 31 39 35 20
-1[35 8[53 6[53 1[44 4[55 1[48 54 17[35 35 1[35 20 24
-20 2[27 27 20 19[35 35 1[20 1[59 39 39 41 11[{}48 66.4176
-/CMR8 rf /Fg 139[53 1[57 3[76 4[38 2[42 63 76 61 1[67
-28[105 99 47[69 19[{}12 119.552 /CMBX10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop -273 -364 a Fg(Carte)46 b(de)g(r)m(\023)-66
-b(ef)m(\023)g(erence)46 b(de)g(Dired)-8 -256 y Ff(\(bas)n(\023)-33
-b(e)25 b(sur)e(Dired)g(de)h(GNU)f(Emacs)h(22.x\))-342
--176 y(Les)g(commandes)g(marqu)n(\023)-33 b(ees)25 b(par)e
-Fe(\(D)n(X\))k(n)n(\023)-39 b(ecessiten)n(t)27 b(dired-x)-450
-31 y Fd(Lancer)37 b(et)g(sortir)i(de)e(Dired)-450 196
-y Ff(lancer)24 b(dired)1267 b Fc(C-x)36 b(d)-452 276
-y Ff(\023)-33 b(edite)31 b(le)f(r)n(\023)-33 b(ep)r(ertoire)30
-b(du)g(\014c)n(hier)g(que)h(l'on)e(est)i(en)f(train)-450
-356 y(d')n(\023)-33 b(editer)1182 276 y Fc(C-x)36 b(C-j)p
-Fe(\(D)n(X\))-450 409 y Ff(quitter)24 b(dired)1242 b
-Fc(q)-450 613 y Fd(Commandes)38 b(de)f(d)n(\023)-55 b(eplacemen)m(t)
--450 779 y Ff(ligne)24 b(pr)n(\023)-33 b(ec)n(\023)g(eden)n(te)1138
-b Fc(p)-450 859 y Ff(ligne)24 b(suiv)l(an)n(te)1213 b
-Fc(n)-450 938 y Ff(ligne)24 b(de)g(r)n(\023)-33 b(ep)r(ertoire)23
-b(pr)n(\023)-33 b(ec)n(\023)g(eden)n(te)721 b Fc(<)-450
-1018 y Ff(ligne)24 b(de)g(r)n(\023)-33 b(ep)r(ertoire)23
-b(suiv)l(an)n(te)796 b Fc(>)-450 1098 y Ff(\014c)n(hier)24
-b(marqu)n(\023)-33 b(e)24 b(suiv)l(an)n(t)950 b Fc(M-})-450
-1177 y Ff(\014c)n(hier)24 b(marqu)n(\023)-33 b(e)24 b(pr)n(\023)-33
-b(ec)n(\023)g(eden)n(t)875 b Fc(M-{)-450 1257 y Ff(sous-r)n(\023)-33
-b(ep)r(ertoire)23 b(pr)n(\023)-33 b(ec)n(\023)g(eden)n(t)861
-b Fc(M-C-p)-450 1337 y Ff(sous-r)n(\023)-33 b(ep)r(ertoire)23
-b(suiv)l(an)n(t)936 b Fc(M-C-n)-450 1417 y Ff(r)n(\023)-33
-b(ep)r(ertoire)24 b(p)n(\022)-33 b(ere)1179 b Fc(^)-450
-1496 y Ff(premier)23 b(sous-r)n(\023)-33 b(ep)r(ertoire)919
-b Fc(M-C-d)-450 1699 y Fd(Commandes)38 b(a)m(v)m(ec)f(la)h(souris)-450
-1865 y Ff(visiter)23 b(le)h(\014c)n(hier)914 b Fc(Mouse_Button_2)-450
-1945 y Ff(ouvrir)23 b(un)h(men)n(u)786 b Fc(Control-Mouse_Button_3)-450
-2139 y Fd(Actions)37 b(immediates)g(sur)h(les)g(\014c)m(hiers)-450
-2304 y Ff(visiter)23 b(le)h(\014c)n(hier)f(couran)n(t)902
-b Fc(f)-450 2384 y Ff(visualiser)23 b(le)g(\014c)n(hier)h(couran)n(t)
-807 b Fc(v)-450 2464 y Ff(visiter)23 b(le)h(\014c)n(hier)f(couran)n(t)i
-(dans)f(une)h(autre)f(fen)n(^)-33 b(etre)185 b Fc(o)-450
-2543 y Ff(visiter)23 b(le)h(\014c)n(hier)f(couran)n(t)i(dans)f(un)g
-(autre)h(cadre)261 b Fc(w)-450 2623 y Ff(a\016c)n(her)24
-b(le)g(\014c)n(hier)f(couran)n(t)871 b Fc(C-u)36 b(o)-450
-2703 y Ff(cr)n(\023)-33 b(eer)24 b(un)g(nouv)n(eau)h(sous-r)n(\023)-33
-b(ep)r(ertoire)625 b Fc(+)-450 2782 y Ff(comparer)27
-b(le)f(\014c)n(hier)h(sous)g(le)f(p)r(oin)n(t)h(a)n(v)n(ec)h(celui)f
-(sous)g(la)-450 2862 y(marque)1182 2782 y Fc(=)-450 3065
-y Fd(Marquer)38 b(et)f(^)-57 b(oter)38 b(les)f(marques)i(des)e(\014c)m
-(hiers)-450 3231 y Ff(marquer)31 b(un)h(\014c)n(hier)g(ou)f(un)h
-(sous-r)n(\023)-33 b(ep)r(ertoire)31 b(p)r(our)h(de)-450
-3310 y(futures)24 b(commandes)1182 3231 y Fc(m)-450 3363
-y Ff(^)-35 b(oter)30 b(la)f(marque)h(d'un)g(\014c)n(hier)f(ou)h(de)g
-(tous)g(les)f(\014c)n(hiers)-450 3443 y(d'un)24 b(sous-r)n(\023)-33
-b(ep)r(ertoire)1182 3363 y Fc(u)-450 3509 y Ff(^)e(oter)24
-b(la)g(marque)f(de)i(tous)f(les)f(\014c)n(hiers)h(d'un)g(tamp)r(on)171
-b Fc(M-delete)-450 3588 y Ff(marquer)23 b(les)h(\014c)n(hiers)f(a)n(y)n
-(an)n(t)j(une)e(extension)h(donn)n(\023)-33 b(ee)160
-b Fc(*)36 b(.)-450 3668 y Ff(marquer)23 b(tous)i(les)e(sous-r)n(\023)
--33 b(ep)r(ertoires)614 b Fc(*)36 b(/)-450 3748 y Ff(marquer)23
-b(tous)i(les)e(liens)g(sym)n(b)r(oliques)562 b Fc(*)36
-b(@)-450 3827 y Ff(marquer)23 b(tous)i(les)e(ex)n(\023)-33
-b(ecutables)747 b Fc(*)36 b(*)-450 3907 y Ff(in)n(v)n(erser)23
-b(le)h(marquage)997 b Fc(*)36 b(t)-450 3987 y Ff(marquer)19
-b(tous)h(les)g(\014c)n(hiers)f(du)h(sous-r)n(\023)-33
-b(ep)r(ertoire)19 b(couran)n(t)72 b Fc(*)36 b(s)-450
-4066 y Ff(marquer)24 b(les)f(\014c)n(hiers)h(don)n(t)h(les)e(noms)h
-(corresp)r(onden)n(t)h(\022)-35 b(a)-450 4146 y(une)24
-b(expression)g(rationnelle)1182 4066 y Fc(*)36 b(\045)-450
-4212 y Ff(mo)r(di\014er)23 b(les)h(marques)g(par)f(un)h(caract)n(\022)
--33 b(ere)25 b(di\013)n(\023)-33 b(eren)n(t)189 b Fc(*)36
-b(c)-450 4292 y Ff(marquer)f(les)f(\014c)n(hiers)h(p)r(our)g(lesquels)g
-(une)g(expression)-450 4371 y(Elisp)23 b(ren)n(v)n(oie)h(t)1182
-4292 y Fc(*)36 b(\()p Fe(\(D)n(X\))-450 4574 y Fd(Mo)s(di\014er)h(le)h
-(tamp)s(on)f(Dired)-450 4740 y Ff(ins)n(\023)-33 b(erer)23
-b(un)h(sous-r)n(\023)-33 b(ep)r(ertoire)23 b(dans)h(ce)g(tamp)r(on)338
-b Fc(i)-450 4820 y Ff(supprimer)23 b(les)g(\014c)n(hiers)h(marqu)n
-(\023)-33 b(es)23 b(de)i(la)e(liste)379 b Fc(k)-450 4899
-y Ff(supprimer)23 b(le)g(listing)g(d'un)h(sous-r)n(\023)-33
-b(ep)r(ertoire)397 b Fc(C-u)36 b(k)-450 4979 y Ff(relire)23
-b(tous)i(les)f(r)n(\023)-33 b(ep)r(ertoires)24 b(\(conserv)n(e)i
-(toutes)f(les)f(mar-)-450 5059 y(ques\))1182 4979 y Fc(g)-450
-5132 y Ff(bascule)c(le)f(tri)g(sur)f(le)h(nom/date)i(du)f(r)n(\023)-33
-b(ep)r(ertoire)19 b(couran)n(t)72 b Fc(s)-452 5211 y
-Ff(\023)-33 b(edite)25 b(les)e(options)h(de)g(ls)968
-b Fc(C-u)36 b(s)-450 5291 y Ff(r)n(\023)-33 b(ecup)n(\022)g(ere)24
-b(les)g(marques,)f(les)g(lignes)h(cac)n(h)n(\023)-33
-b(ees,)25 b(etc.)270 b Fc(C-_)-450 5371 y Ff(cac)n(he)25
-b(tous)f(les)g(sous-r)n(\023)-33 b(ep)r(ertoires)704
-b Fc(M-$)-450 5451 y Ff(cac)n(he)25 b(ou)f(fait)g(appara)-8
-b(^)-27 b(\020tre)24 b(le)f(sous-r)n(\023)-33 b(ep)r(ertoire)347
-b Fc($)1866 -364 y Fd(Commandes)50 b(sur)g(les)f(\014c)m(hiers)g(marqu)
-n(\023)-55 b(es)50 b(ou)1866 -269 y(sp)n(\023)-55 b(eci\014)n(\023)g
-(es)37 b(par)g(le)h(pr)n(\023)-55 b(e\014xe)1866 -125
-y Ff(copier)24 b(le\(s\))g(\014c)n(hier\(s\))999 b Fc(C)1866
--46 y Ff(renommer)29 b(un)g(\014c)n(hier)h(ou)f(d)n(\023)-33
-b(eplacer)30 b(des)g(\014c)n(hiers)f(dans)1866 34 y(un)24
-b(autre)g(r)n(\023)-33 b(ep)r(ertoire)3498 -46 y Fc(R)1866
-103 y Ff(c)n(hanger)25 b(le)e(propri)n(\023)-33 b(etaire)24
-b(d'un)f(\(des\))i(\014c)n(hier\(s\))307 b Fc(O)1866
-183 y Ff(c)n(hanger)25 b(le)e(group)r(e)i(d'un)e(\(des\))i(\014c)n
-(hier\(s\))458 b Fc(G)1866 263 y Ff(c)n(hanger)25 b(le)e(mo)r(de)h
-(d'un)g(\(des\))h(\014c)n(hier\(s\))501 b Fc(M)1866 342
-y Ff(imprimer)22 b(le\(s\))i(\014c)n(hier\(s\))901 b
-Fc(P)1866 422 y Ff(con)n(v)n(ertir)24 b(le\(s\))g(nom\(s\))h(de)f
-(\014c)n(hier\(s\))g(en)h(min)n(uscules)126 b Fc(\045)36
-b(l)1866 502 y Ff(con)n(v)n(ertir)24 b(le\(s\))g(nom\(s\))h(de)f(\014c)
-n(hier\(s\))g(en)h(ma)t(juscules)122 b Fc(\045)36 b(u)1866
-582 y Ff(supprimer)26 b(les)g(\014c)n(hiers)g(marqu)n(\023)-33
-b(es)27 b(\(pas)g(ceux)h(a)n(y)n(an)n(t)g(un)1866 661
-y(`\015ag'\))3498 582 y Fc(X)1866 734 y Ff(uuenco)r(der)d(ou)f(uudeco)r
-(der)h(le\(s\))g(\014c)n(hier\(s\))430 b Fc(U)1866 814
-y Ff(compresser)24 b(ou)g(d)n(\023)-33 b(ecompacter)25
-b(le\(s\))g(\014c)n(hier\(s\))335 b Fc(Z)1866 894 y Ff(lancer)24
-b(info)f(sur)g(le)h(\014c)n(hier)906 b Fc(I)p Fe(\(D)n(X\))1866
-973 y Ff(cr)n(\023)-33 b(eer)24 b(un)g(\(des\))g(lien\(s\))g(sym)n(b)r
-(olique\(s\))538 b Fc(S)1866 1053 y Ff(cr)n(\023)-33
-b(eer)24 b(des)g(liens)f(sym)n(b)r(oliques)g(relatifs)569
-b Fc(Y)1866 1133 y Ff(cr)n(\023)-33 b(eer)24 b(un)g(\(des\))g(liens)g
-(ph)n(ysique\(s\))669 b Fc(H)1866 1213 y Ff(rec)n(herc)n(her)16
-b(une)h(expression)f(rationnelle)g(dans)g(des)h(\014c)n(hiers)h
-Fc(A)1866 1292 y Ff(remplacer)e(in)n(teractiv)n(emen)n(t)i(une)e
-(expression)g(rationnelle)38 b Fc(Q)1866 1372 y Ff(b)n(yte-compiler)24
-b(des)g(\014c)n(hiers)853 b Fc(B)1866 1452 y Ff(c)n(harger)24
-b(le\(s\))g(\014c)n(hier\(s\))958 b Fc(L)1866 1531 y
-Ff(lancer)24 b(une)g(commande)h(shell)e(sur)g(le\(s\))h(\014c)n
-(hier\(s\))234 b Fc(!)1866 1710 y Fd(Mettre)36 b(un)i(\015ag)g(sur)g
-(les)g(\014c)m(hiers)e(\022)-56 b(a)37 b(d)n(\023)-55
-b(etruire)1866 1831 y Fe(Les)27 b(commandes)g(qui)g(^)-41
-b(oten)n(t)26 b(les)h(marquen)n(t)f(supprimen)n(t)h(les)1866
-1910 y(\015ags)g(de)g(suppression)1866 2013 y Ff(placer)d(un)g(\015ag)g
-(de)g(suppression)g(sur)f(le)g(\014c)n(hier)339 b Fc(d)1866
-2093 y Ff(sauv)n(egarder)25 b(et)f(supprimer)f(le)g(\015ag)i(de)f
-(suppression)171 b Fc(delete)1866 2173 y Ff(placer)33
-b(un)h(\015ag)f(sur)g(tous)h(les)e(\014c)n(hiers)h(de)h(sauv)n(egarde)
-1866 2252 y(\(don)n(t)25 b(les)e(noms)h(se)g(terminen)n(t)g(par)g(~\))
-3498 2173 y Fc(~)1866 2322 y Ff(placer)33 b(un)h(\015ag)f(sur)g(tous)h
-(les)e(\014c)n(hiers)h(de)h(sauv)n(egarde)1866 2401 y(automatique)3498
-2322 y Fc(#)1866 2467 y Ff(placer)16 b(un)g(\015ag)h(sur)e(les)g
-(di\013)n(\023)-33 b(eren)n(ts)17 b(\014c)n(hiers)e(in)n(term)n(\023)
--33 b(ediaires)46 b Fc(&)1866 2547 y Ff(placer)18 b(un)h(\015ag)f(sur)g
-(les)g(sauv)n(egardes)h(n)n(um)n(\023)-33 b(erot)n(\023)g(ees)20
-b(\(\014nis-)1866 2626 y(san)n(t)k(par)g(.~1~,)f(.~2~,)h(etc.\))3498
-2547 y Fc(.)1866 2700 y Ff(ex)n(\023)-33 b(ecuter)22
-b(les)e(suppressions)g(demand)n(\023)-33 b(ees)21 b(\(\014c)n(hiers)g
-(a)n(y)n(an)n(t)1866 2779 y(un)j(\015ag\))3498 2700 y
-Fc(x)1866 2849 y Ff(placer)k(un)g(\015ag)g(sur)f(les)h(\014c)n(hiers)g
-(corresp)r(ondan)n(t)h(\022)-35 b(a)28 b(une)1866 2928
-y(expression)c(rationnelle)3498 2849 y Fc(\045)36 b(d)1866
-3104 y Fd(Commandes)25 b(sur)h(les)f(expressions)g(rationnelles)1866
-3247 y Ff(marquer)j(les)h(noms)f(de)h(\014c)n(hiers)g(corresp)r(ondan)n
-(t)h(\022)-35 b(a)29 b(une)1866 3327 y(expression)24
-b(rationnelle)3498 3247 y Fc(\045)36 b(m)1866 3392 y
-Ff(copier)31 b(les)f(\014c)n(hiers)g(marqu)n(\023)-33
-b(es)31 b(par)f(une)h(expression)g(ra-)1866 3472 y(tionnelle)3498
-3392 y Fc(\045)36 b(C)1866 3525 y Ff(renommer)29 b(les)f(\014c)n(hiers)
-h(marqu)n(\023)-33 b(es)29 b(par)g(une)h(expression)1866
-3605 y(rationnelle)3498 3525 y Fc(\045)36 b(R)1866 3657
-y Ff(lien)23 b(ph)n(ysique)1231 b Fc(\045)36 b(H)1866
-3737 y Ff(lien)23 b(sym)n(b)r(olique)1154 b Fc(\045)36
-b(S)1866 3817 y Ff(lien)23 b(sym)n(b)r(olique)h(a)n(v)n(ec)h(c)n(hemin)
-f(relatif)551 b Fc(\045)36 b(Y)1866 3897 y Ff(marquer)23
-b(p)r(our)h(une)g(suppression)698 b Fc(\045)36 b(d)1866
-4072 y Fd(Dired)h(et)g(Find)1866 4215 y Ff(\014c)n(hier\(s\))25
-b(dired)e(don)n(t)i(le)e(nom)h(corresp)r(ond)g(\022)-35
-b(a)24 b(un)g(motif)82 b Fc(M-x)36 b(find-names-dired)1866
-4295 y Ff(\014c)n(hier\(s\))25 b(dired)e(con)n(tenan)n(t)j(un)e(motif)
-307 b Fc(M-x)36 b(find-grep-dired)1866 4375 y Ff(\014c)n(hier\(s\))25
-b(dired)e(bas)n(\023)-33 b(es)24 b(sur)f(ce)h(que)h(pro)r(duit)f
-Fc(find)r(M-x)36 b(find-dired)1866 4554 y Fd(Obtenir)h(de)g(l'aide)1866
-4697 y Ff(aide)24 b(sur)f(dired)1208 b Fc(h)1866 4777
-y Ff(r)n(\023)-33 b(esum)n(\023)g(e)24 b(de)g(dired)f(\(aide)i(succin)n
-(te\))g(et)f(trace)h(d'erreur)142 b Fc(?)2219 4869 y
-Fb(Cop)n(yrigh)n(t)2522 4867 y(c)2505 4869 y Fa(\015)21
-b Fb(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20
-b(Inc.)2282 4933 y(conception)g(de)h(Stephen)f(Gildea,)f(Mai)i(2006)i
-(v0.1)2252 4997 y(p)r(our)d(GNU)g(Emacs)h(v)n(ersion)g(19)h(sur)f(syst)
-n(\022)-29 b(emes)23 b(Unix)2069 5061 y(Mis)e(\022)-30
-b(a)21 b(jour)g(p)r(our)g(Dired)e(en)i(Mai)g(2000)h(par)f(Evgen)n(y)h
-(Roubinc)n(h)n(tein)2393 5124 y(T)-5 b(raduction)21 b(fran\030)-27
-b(caise)22 b(d')3019 5111 y(\023)3014 5124 y(Eric)d(Jacob)r(oni)1866
-5211 y(V)-5 b(ous)23 b(p)r(ouv)n(ez)g(faire)g(et)g(distribuer)f(des)h
-(copies)g(de)g(cette)g(carte,)h(p)r(ourvu)e(que)g(la)h(no-)1866
-5275 y(tice)e(de)g(cop)n(yrigh)n(t)g(et)g(cette)h(note)f(de)g(p)r
-(ermission)f(soien)n(t)h(pr)n(\023)-29 b(eserv)n(\023)g(ees)25
-b(sur)20 b(toutes)i(les)1866 5339 y(copies.)1866 5425
-y(P)n(our)c(obtenir)f(des)h(copies)g(du)f(man)n(uel)g(de)h(GNU)f
-(Emacs,)g(\023)-29 b(ecriv)n(ez)19 b(\022)-30 b(a)18
-b(la)g(F)-5 b(ree)18 b(Soft)n(w)n(are)1866 5489 y(F)-5
-b(oundation,)26 b(Inc.,)f(51)h(F)-5 b(ranklin)25 b(Street,)h(Fifth)e
-(Flo)r(or,)i(Boston,)i(MA)d(02110-1301,)1866 5553 y(USA.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/fr-refcard.ps b/etc/fr-refcard.ps
deleted file mode 100644
index b42e35568ae..00000000000
--- a/etc/fr-refcard.ps
+++ /dev/null
@@ -1,2755 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: fr-refcard.dvi
-%%Pages: 2
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMBX10 CMR8 CMTT8 CMBX8 CMR6 CMSY6 CMTI8 CMMI8
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t a4 -t landscape fr-refcard.dvi -o
-%+ fr-refcard.ps
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.05.15:0316
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124C2B6534F3CD1866AF92009D93B97F763AA3D16684AA65F029E776DA
-3BFB75EDD46D562E6A284DB4F2FDBF7CDE7C1F3772CD7B6FD372842A0E07E3EF
-68A98AB9278ADC2D35891543F57ED6DCFE8923368D556F1A8B3E35863112F409
-FBE67FC270328312BAA43A9A372C510717B50AAB01A1E02A9982113E2D7C601C
-B0BDA1C0E081E546A97647B74EE5194C57ACD62502B329FED4D966BDEB4028F0
-F082EDD5DFC8387653D620E9E73FDCE3C155347D5929C3A24D6121AEA46BBF3A
-B1C8A4793FB7F21C84400912C27D9AB0845537103553BF8F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
-BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
-09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
-3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
-E8929A4813956AAB24BE7C20FCF9196E8E2F30816FE2279CE3E6067667A39E44
-488D58BFD17606AE885FA06F478D359A6ECF5564C095FE0E5038425D8B152750
-F72F41B3D1E7420EE91CF4A9ED5BBE8C2275624AE257D2BDF5752E803B426F40
-924CB5C29460BC09EC84F3F3A95F6900836F0ECCF6A7BB85A3F8D650017E5FE0
-503A73644EC6C6B0254F0259F8DD4AB3945950974CEB34521881A2506E76EBB3
-7DBA7812E0186DE2C0AD3E6D42BCA320014368DD738408C54AE2CAAA9C05612B
-E7F33218F2FECCE8DB2E4B3A3BCD9D8D0BAD7EDDCCAE45F6A15FD2B8ED263E45
-14AF0CC7B58EF52D5FE73023EE9DAB8249D1EB3B795C7B42BFD2A2852D2D16BF
-CD71056F412571F41CF7EE80AA916EA4FF1630B1E226F474CC3195006043B1AB
-915DA8A9484B930F1F00028287EA3802DA3C3F99961952E04B736CDEC7768307
-879B4D2D553518FBBA727266F94C3A607FFD5D85CD0FB802CA51E6A3792C80F9
-A637D47C13A787F5D9C5BAC24E843DA198B7CC898AD786DEAC0BA9B6EF955ECC
-72DA3A8CCCF7F3B69597A2F868AE359737A9714AE6D81989B4152DA33095DAB8
-5759080AA156DF1F3767120018CE81D296D813DC52786586CF3F38EE3CE181D3
-9D79439EE13D4E5799E03338E93315C3F6BA8ADC731A0D8282637E524C1E9736
-29C594C6F19B49C859D7CCA98148215F7E6943637797641D44DC9FB8FA403FCA
-BD581E477C7BBDBC84048141760B4EE0D181D585C519D02DEB7D1C650BB49874
-A75E95E6A17D8024346AF3288A32A7EDFFAE15BACD436CC76850F2EAC7EFF565
-C4273160FC5DC7434DB94BFA01D1648421FCFEF66D786CFF60F0031B649B6F14
-E9139B27185E6E9A70E439AA8D68C6535A42634FFDA55DE86BDEDDF3D6B73015
-37C7437A96CDAC620A29942E834F714D82774AED0A83771A152EAC0CC043CB09
-02574AFC4CA006FC0D24C3DAAF4D681CC1D2D7870F273773171A4977AD05A082
-0DF3F50C8A36D7D8AA96E82387AAFB48D048CFAE2CBAA88F1865B84CFBBC1731
-A212A44EB98265A8D4A8C118E038A0C3503B27D8B58846C4F3E8112C8B05A41A
-9F8B0E1513528F5D7E509EE847F7224AA06819954974F8065AF49F21840E972D
-C1B028B541BA1364045E814A9F8FB299B6B62CA150245D92588056992FE6D71B
-FB16F2B42A3DE425B302051FCC4A2AA76F6146BAA385614913D2B11191CA6A09
-BAE8567DCAC342D013C7830A0F03D848397110F021C63C9D6AFA90ABBC2DE4C9
-69EDFEE42C028640F9784E8CA11B83B4E7AB58F8335FA294DD68BA87FFFCC743
-67239D7FF1C54B725D53581832F5307FF1995D8273EBA54372AC82B7D5EC5773
-8F52B55255502008E0EDA0646D4D71137D822A57C0E9E05F3D61B91436B5FFE5
-CD90CABEA89420F4ADD844733B9B0F0C72688B9184A2EF69966411DF2B23A25A
-11F009C6F23E452854B77AA33129C531C2C7A8666D550A83CBA6F251CB016F0C
-940EC74FF62C721F3D854404F431DB39548F0785C5140A9D406C06306CBB0C99
-B7AA0E4680D8DE074B369A7481F0C12BCEDB787A1A9E4C71C869F5022447E317
-E6B851B8D89144BEE028D2352745CB0C081A7E806482F74E7EDDB5F1601A58D9
-EC5B92F7DAD1B462B0EB9DF227D20E2FD7963B11044F6699AEA42D8B6FCE78DF
-F13DF7917F8E9056EF57ABEE9A83EEBD2630452EF3A88FD64BF58135FFDFC5EC
-3C57C10AC6684044FBE557F1435152410707AA671D2B04E6D4C6BF928F876423
-072DCCBED74DB014BF98D66AFF1F2A0C4A725264A36724DE08EE18EB4FCD8451
-2815A6B0CA80C03444039CCA3F6713F0BCD3595E3D6E7F1EAF936C99E445677D
-B96724B2FDB0D2050094229CD7A239C0C72D19914AF99B2985BCFC38A6DCD1D5
-B79A09FC85A955742D9B5C023AD0D53AB5C3EF9853CD74A590441471DE86E170
-E854AA8E23F0F45734B10A87B00F671686D9ADAA574AE633DB6016479D81C5E8
-AE030B680944F4A4D0354BE27192D5B186AC4741E30F887C1FB12D744F3CAB55
-AA891F739CC87B8C9422335D6431CA3598CFAD661AD1C89A5126D0A29707BC2D
-DEF9DA9B5D0AC8BE4425B2BE0C0ED4EA2EFDA1D1C2D4176BF980DC11A7114BB0
-E3F4DA2275D60ADE37E9DF1FF70177368D6DC78065A734EA20E06C8878AABF67
-51BD3758E592B1E389D8266FA4F6BCA64FBCB2487194FEF05914180E879DFEE3
-5EA35A67FCDAFF1887A0F78A9880F2B3304446195CFBDE1399CDC39831D9AEFA
-3C432923BBCA48940019A61AB0464494D29FAC5E6183F9A849D9BAC4296162E5
-A44E1717330C117A402403BEEB31C9BA07C3331BD8FB4BC71AC31EFF81087E72
-A9D75816DF6FD9AAB57C23A46F6DF8415F281F5C39348E8EC540F2AB4BE0CEF8
-87DA88360D12F38130769D0758175FFB61ED8F20C7A17963C4F3F5287D360A72
-4175C45B318A0360CC569F0D47644507FDB4A3699A40662BAD1C65306D652C44
-5C774850560A42157D5507FAC1C7AF431888A5D9BE185AF7772FE57B1F14CA9C
-E13826E6E0531510FA1C8139A365B1641F6EF77F32C5B44AC42BD47DAC9C2FFD
-B99B10700968A44C063B45B96C380C9865667CEAFD8FEC20499966E1960361AA
-0F1D7B9038B27A0BEAD2E4847ECB6787C2F4811EFB5CF7DB92D995E3039C141E
-F17C1BFABE1CF58757675C45FEFF4F7E4B63F10B64AD4586C5AE9219D465BFC5
-DEC3F90DE72189503777D1E382F0F0732DD815B0313B0D0AD6E03A73D0981493
-07F1E96604BE2B3F2B227C038863667E9C58218AEBDD794F2D2DE1AB7CCB8854
-9BB56990DEEF6F7E32D5931102BF059120759EEA11522ECFD8AA20D9E136CB84
-CF6654CF3839C66326D4C926D15254DBB11F9D59A59494B1B794D79E167E9116
-CE9F16C91F297DA655422B05853A72F5E2932725A365B385DF32984364CBAADE
-0A65E573EE13339A505F7B1EA8379B15B0AA01CDDCE32226D33D8D957ECFFA95
-A70BFF143B5ECC595AE58174728DAADEC99801EE8ECC7EB0AF18A056E5B279AD
-B7337916675D3A20A1A45E46FA55F29EE05D38EEC228EC6834F38AC0C5BDBF53
-883BDDE80182B4E8B4606548CECE724AC6BB986761C7618095D4C6B83E72381A
-3E8997C31B659E585708AE8653E011EB837948B7B09E980832BF09A03D244DCB
-A5C89C3B6369C83788E1351F198BEA1F98C36B17A40CF2A6809C8CC43C18DEE5
-CD29DDB52BA4530CFCE4711059B88DC0D16C0F9D6DEEB058A108CE5E861A66B3
-BC088345B3B0816FA6CDB44BD4696E4D80C73EA34DD795A79C700E36AF4E8256
-76D001C35751B85A17E7BE6985D2FF8D697947CAE32D033EBD5F53D059AAD1B0
-D36391A8C6B85E4D2F08D151711CA356BD738888AD8FA88DF2DE7F8031EBDFAF
-CC40496AF010278B4AD4921FCE02A732A26700EDBA79ACAC0DD69E4BC0E553F0
-0357F59B6DE1B76C9E5FA97A51F69BCA3182F2CE60D0A6C3EE3C917237CFAC83
-1787DCFDEDF7851B02EDC8F14D5B40DC05136BA95C9B9EB2BC5091F332C77386
-1D7EC7AFA6BCCB87E8AFC067F45589667E52AB0D469832D209E445CBE57400FD
-1CA88231B2772B22AF30B5958F8703C3A238B4CFF00171D30C939D9500637966
-19F43DFEC9BD39D516365DB22DC53DD20AFD9511F7B1DC92E0E2191558C97633
-C71730A9E91B3E5639CFCDB7FC7C0B07F81AB1B6FB42C9C27C41B6B5B36287F6
-A80CB722E8795D88AA29DE0BC1275CCC2ABC39E0AE1C15BF0E24C94D231C38DE
-B3D706BF3124B31FD10B6D7A39976D01F21447D41E39048655A44FBADE0B5DB7
-708EB8A877B3F9200F0C43CA35D9A51D258CFD34BC1AF9760B1F1824D65C0DF1
-37781D7A4EFDBB1D6BC8C7303054FEFE34AE8545AEF43FAD7EAC8077B8F23583
-7F793569199A57BD8D1891102768BFA56EF238E990F437060C8772324AD54A91
-7BB72EC46725D3684DD41C25A779C6D6FCCF404399A3FD5658CCDCE608EA9AA0
-BAEE911972BC77AD27C54A9805AD0C041F532FE4F387CC8A4BD24FCECF05B843
-87824C8F540396D1AA94ACB3337DF1E135263EB28C18018F019D6A406A506C72
-59B80CDBF79C51B22A5A70F3E1019AF79ACD67DAC7E343A9773092F4539C5066
-2C82E3442CD513CD8B922204F1FE98D95E48C9A165EA3FE44957A8BED940258C
-977EC33FA627584D4AA5016F9F53D5E6C71FEACE09C91CA0FC92EE825D8DAFB6
-EE671B072833CC1D8FCA04874A6F6081D6413874F0008E7DBC9DD88AD374F6FD
-F4083B759031C5D76A11D30A4B99C33E9A5A75317C1EE0E154780A9D3F235284
-467919B60F44685B760EE3062164A04C304B7CED681C7FE0764C4A19CC14828F
-B65BAA2176F3B3232C62F2DD26C145DF814D37056830B08B0FA9BE0245BFA82A
-994A7341CD152783100917C4DE1EC36AA31FCD73F3914BED2A0393599E9A6572
-202925C9C7E55000672235AE2F557416E1032AB1C287BF53989EA541018192F3
-74060BCC8F46E073F7CC001F03547D229B1C53185147FA4DDC2B99A5DAAA041C
-6E8CD64B9BB3AC5DEA2641858D02A79FEEA73F537FF5571A20D8FCC7F18FB20B
-35AD024FEAAF8C2AF17A8A04DCE887681AE02D6184A8A20275E3731026C34E59
-2E17E820BE88FCBECF72CF061B5110C16D36DDB19DFE009F22642AF7D0A42C29
-FA410E4D4F58A3F7ACAB152480BA58CA3415C3C8BF76F9A976FA5DE2111A2344
-D581D2F73DEA5EACA5DD1C4E9BD0D77DAC82C6B407B1726E018D26081D87B94D
-B6B536CE84BDE6B73189411CBBEB50C43E64E3FC2D24D7979A408F568D900EC5
-438FE7EF78116A98E2F6D117A6D9B12D27A96FE28E9B25DB946A3852E21200E1
-2C258483657D525746A678DC4D3726E890485A742BAF318BDF08CAC98BD1C9A3
-FF818252D2F1141185DBF6D84D7C393C50BF90C1D76A8052CEC8FECC7E196C61
-30F23DF9BDC028919D694759967789FA88907AC476B02C9B5E925A5143B1AEDD
-134DEFDB26DA3B3F646FE596690296681FC17F0D22F5A0B1375DDD5ED741219F
-A6A2B2F6D20ED4C031861357C2CA7D86DF95E82B1579D26936BD9A13C59FB004
-33088EDE3435BE982D6AE595BA825F64A82F0D6E84379A67556584DD0F415047
-33B6462EF72860D1A9FBDAB44CE06981D17E0C0712D86FF158C9A7CAED4C4331
-5E4118D8AA718FA6A8D371EC1E8421AB116E893E905F5E352F7AC4057D4C546F
-068E508D21B6561AF9F5651995A9FA9DE2F8F6276722949488E53BD5169F1868
-
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 18 /grave put
-dup 19 /acute put
-dup 24 /cedilla put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-dup 122 /z put
-dup 127 /dieresis put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB613CCEAE69
-BDDBDABC60BF16B61C044A68AA41968B22CEC6F3EA7B0C02C44ED2BF3957ABF8
-B03474ED11BDB07B69BB517CC6A6953FC1732CEB1D4BF5B6C27F30889B4DA0BE
-B48781C7C224795CB655BE03CC246E4366C918F4A1B8FCB49E85E299B923E95D
-5711E49455770726136CC449420520807FEA21FAA658A4076ECAF1B065107CDC
-ED0BE922F22A283E1AA2A900CE4D5F55259C475F1868A7889D46DE0D8E0F17E9
-14175EBB20E16D9E5B3E1CF776F28CE5BD16940334685862F9A6EE0B828CBEB6
-EED4F34ABCB56E7B1D6F65C94D74F286416836E5B4C1CBE19ADFBEEEC3FE7CB7
-21CDB89A4FA18C33B7E215591250EE5F5FB888624010C7832CB7AA7E088C7B61
-8AB01AE7963B2C511344B963A60C59542AF7D88096DEE782C9EA80C670966208
-020786A1C0D0C845E08ACEA8F075F85394D3D923F49FCF38639C1FB1CA0BADA8
-FDDFB7121B0E367353D6F95BC523C08C8DAFDBDD2B0FC9230A6B7DCE6CFD27D5
-DEDBD0380CB1F8B0C0852336BD5698367C6F8A32088299443570141E0E09C31C
-BFB95FF1D599611E27A00328566920B4C2006BDA2CE24FFBDA8613B2C5AA62B5
-BCED045B3BB89C5468213D249D7B287EAC7A04C5A0F14FB9CC9ECD8A62083EFD
-D9BE224860BC3044FA07E1E2FAD367C545DC5B73E1BA876520313A3A5D193EE9
-1B5B27FEFCB04D406B3212105841A1339ABAB9B0B0767608DEB2ED7048256DC5
-B98878CA93CAD7990F658A2DBA54048E4509D27BFD48032D93AB3765955F6D55
-4639275D229FEADA618AEC2239BB1DCE56D1A456EA658FF3D7B322F8266ADD38
-41B08B80904F650229709FE189C98071097143B9E532C3DA6BE556856CDE900B
-7583AF6C10CA85699B2447C2EF6591D0FA0074D810AA328170305E1F3562F2A3
-4538F0D0C56245C11ED240E316DFEF64FA1AF9C0E64BC86782F59DEECA197B4B
-EE38625921D4693B38B343466F10E4C9E0FB3DBB8CC417FA7696AF9603F732DD
-7E719B6A6BBE64F4FD78C4873890D867236D82E35ABF102129C9C9DCBF9715C6
-0E969DEAFBF9BB650B321CEBE6253183C2EFEF6B6BC28EBB6F28AFC57B22F83F
-AA928A5CA96DE41EB9B33C6297BC0BE1F63472AF7CC02721C31C314C704EEED7
-9ABEA57556FFD2B367D262950D0BC885F1FCC203C5833022484B72F5C59FEA3E
-8D2738B923349F0E44828DFBF4B9068C9DA80B141EA7C9506595B0A27A2DEF90
-EE785F8AC6F0629824F2F2585D22E6928304DB7A5CC8B3F5126D3EF00FED1C0F
-1AEE437ABA4200200849E5FB8A1B370B0092F0124E30A1086EFE05D0E03D3905
-A058FF054D2F6454D784BE414301CDCBF4FBE6E340A7AE8ADF3063E978C31686
-242E19A023BF5B0F5744E09CC2E855007C264E6CB13C9924E523301D7FD51D3D
-7CBEE8C1C4095007221DFA728507A079B62986817369E9A91D0221160A3F452A
-9B827DB0B0D5CA1C626CC7844BFD97C90F80C84AAD4D34A0AE7C75DC019A0E4A
-33ECC7E9F6B1F1678B1F0F3AC52DC46B8AFCD6C5FA88045F932CACDA8FF33598
-EC8066C6E997CDBB4613917C0B4043F8A481C62E18822B5C77A2911A8FBAB2BB
-3FD35514119214174C4DDB4CC6CE20BBE8B077A797F123B28EC55FAF52F65FFD
-B147280D82F362F1AC431DE0AF87E8A0C307D7B5E978340B606689EE5C3C8911
-CE65B607F02778A4BD54984EB3924420B0FC9D624B7B7166B455AABB0AB8A7C4
-EEB2F66A95DD2E72B249D83C84C3075FF365B26DDFB7AEACCF2A048BD8C80C41
-88E415BE80BD89F313F72C3BA490A720158607A71BF92A3885116A8A303B2121
-293946B1EC5A085F034E66B1BEAD4B859B733282192393C6E3D4CBD194153520
-FD429BFEF266BFDCEDF8762BED7B9F1E6A11F41FDE053DE22AC9F664DF870C30
-2E0089EDBFABF28CAB55B4F7B92C22F0DF152397107C2AAC18C9F4827AF0D2F1
-A1B1F8626AA8E6C52C612914E092E8C3002D25771522A1B37152CDDA553C1F2A
-44EF83429495A940A14DDA3E42B5CBC5AC55E652A7CD43195DE8803413A6E11C
-16342B090004266C7126B9576F68E071EB211BE824A154889F4FE2DED93896D6
-1C818FC3F9ACBC28D3D2CD47D94F685AFFBE83C045799F4A99C242A449A33CB1
-1BFFEE26334ADD624111FBBD9A4DA9049555FC1D05D3759F1C83E7BAB71467A1
-057064C94135C618CA08D98EB11A42EF8E4EEEE6BF436663D6C2173667B3BAFA
-77318803FA93C51971978661B06AE62F5A9C30C35F2E6D05334F0AFD94B9C84C
-9176E7DA1FAE09CD214EFB1DB44649474E3EC965F29ED5709CB721A1A17290B6
-B2FE92E7DA02FECA17A70382FB1970FF678BC4EB254638D9D60314C524AE5A74
-22AE09222246FC45237EFEC7D8E151CEFC63F734A626D896A47828940E76621B
-C4D734BBE10C116774A7C2E748AC2A893B34782F3CD9EB0C34079B72A170DE68
-8C56D67458FF6932BC6796BF521668136EDC5A4623B55F833E963D9AF91C697C
-85AC71E7DAECA138E9471C8535A8409122C466B7CF6F5BED3B154D055B79AB5A
-E8D5A6D4B11BF71B011265E411C2FA0162AEA0BDF7FF68FB60DFFD0E0A194E19
-B89E8CACEC175F92DEB8F634EBCC667CFB7FE47FFACF66990EFEFFBCCFABCD6F
-B675D4F8D6F870A595CB4F95EEDEF12BE1220BB16D798EE58A06F7AFAC00300C
-29CBDDED9CCC72972E4ECC095D5F2E0EC1890065F34A848491B128EB73F86204
-D5078938337EA05B8008CA3E57139408FB0B39C057C1939B78108F4C75322107
-79BD61078C393A7DB042F0DF344D6B0A8C914BF8829A156D1CDDE51EC65F6B7F
-A54828C7A71029343EC88D8CE8AF98DFB1B640CB1A2AB22C7721F72508D2179E
-667C8A5CC87E57E07BCF5BEADF7A8B836B536A83BA41D3D4AB541312D45613EF
-A083BE7926DD8BD006EC08FEC6D53DF6A281C79B82E3C5336B165511BD6AC6CF
-0621414F9F61863B5D147934BA875488FED09F1FD9867E35EEF0DC61776B0491
-B7838300390E43B8C7144EE6999D1EC1EC9188A9AAA33E5B67A1DE83552980A2
-359137C6A689F5C0601FAA09EF47C9BCC57DC2A72C2838762C1FD23D43434354
-6973357CD871FDC39C4D77C267DEA96BF9A9AE78A70CB709C4B928D77DB05C03
-FC8B0F504D948003DC9146762C510D21C144680F0A0A5203996CAF2936753AE4
-079E0CFDA5E03E6A482F11D663FC27D5E8B6A73B8EAABC3069C9B5D0B1E01909
-119B2560B70ADB2546F622D5596AF276B6003BDF456A3B4883648A1114191BC8
-585D0C2A712CC95CF5191413A5D3C4A4ABCD40F33ADC187997898C93AD946103
-862A8E8F7509BDF130BCD9696619181C19995A570EF3AC61827123212F96552F
-285D492510CE4C260F73B741EB8A881B139CF97922D2BEAA6EDB151343CB6DCE
-74FD202ED919C816AA6AECA20D31BA94A49FBF66AA299FE67806C51C7D4DC88E
-A0DF9311445C92AEEED1A21C264901D5F53A3259691E300A5E434F3B8F60763D
-CB45B35EAA8E3AD00C82E0AE79F6E59ED544D31EA5112EE1B256111832E3D780
-B222DCC2EAECC748CFD53413E7B7BF60EDD4558D17338F5DA099B2179B5E4859
-404C296C3FA92BD458D4A18894F15FBF42B1986E2A7BCF8C1D7C25C6F17DF170
-6DF76813852BA3CC16A0F9C54A836C75F392DAE45AFA57640BAABD459903ECB5
-1457F1E1AB898BF51FF34A578B13BF2C2192B3DA8C74197D10ECB0792E7FC57C
-688D13CD1D2B8FC04CC896E0F9CAB7C73F0B178B2B9B6069AE5D61581D6E4630
-342941000C556FA766664C9E4DF8ACD970A4E13498BD359F1F62CD7B59D6CF7D
-C5AB39CF1FEF04990E1B34C2B13C3073865999AAEC9931ECC6FD7E4505C2D0EE
-672A193FAB459F8051367C67C2F121CBE051CA9E9ECB45A31C41B5CBF7C83685
-B85C76EE1067EA62E6D77816601C4A936A4D5E1B3D966AE2307CB739F234DB7B
-AF00AF3B357EDBD5EC79D97688310803B58FDB85D85C669C4ACC6705BF1B8F52
-76B0D709DAA03610AD25727639EDB403278178D96C663569EF75642E0D89DAC8
-F3475DAF48C05E8475A010522D1DCAF78BD5E366CFD461524C5AEB0C6F8CF0B8
-BC08592C46ED2F6264988662330C62AF843EC740AFFDAB40567D85DD31B2D107
-C726AE7B36821421DE1559DFBBA7D8C11D537E944121EB2ABC28910FC4307084
-2321866C9EFBCA1A7EF9D77346E620B74FAFB3449AD4A31ADD0E6D7192FFF6A8
-44DC537CAB0EB595708290D7C91E3805EC664E3D0AA3152906A9EC957F2A57CB
-6EDDF1185D8EDA5D631A32EF2A7F2ADCE4F8FB15C3F8170EAD24B97803DFF358
-165D5C03528B1B92B9687DD0FF8E299A306D693C0220EC63C5AD9F515D0CFC78
-03DF3D714B670CE2C09020286E6C7F09A582FBDEA7F153CF37A748133F61283B
-537FE1BE8ADE8B468D8B68CBED4D2552F2C7A19B0E069A79F9FA5627FB57D024
-752893CFA39FF3ECAEC0F622908E683BBB50C76BC2815A46B5023C25120589BA
-00CE9F1E81EE2F0A448C235AA68A962789AF11E87F85FC6FE285079329D254AD
-DCDC4563BF6F82C76A27A512BACE3DFEC586ECD83D464ECF5499B1027BB3E71E
-60C31C77766B05B00B1833ADD7F9A83EE544A1EF42E4EBF7F5A7B82D0E318A8A
-03EB2D4DB9F9905D4B9A52BA9C5D1D2821821C57C8500866343A819380253D1B
-EE92F96EB2CCA3782DE6B16825ADF42B716154BCCE1106C1201C00360DBA1F8D
-01FCB2B57137491C17A17A7B1D3D1AB4F70BD5CC4572FE37E2E2CB4EA578CC8F
-69892616306B8598456B8F345FD49F58223C8D1B00752F6CE0D278277B3DABBA
-97977264D53A95A034E3BF891ACC165E0898D569E9DD9EB9A21F5ACE628FE6CB
-115DC17AE728337C4A184151A954B7C5F6D0A872CE9929A13040CD1D8DD92560
-B8D58CC3EB8E025AC7A9400FB7D8A827F7BE4C56EA930029ADF44078BC5EA389
-5782B7A3B04256B66CA866B65A2BD0A4300481ED9EF898A4881189C55FBB2B0D
-C371EAB5DC9294E2BE1F68DC70CEE16B7B4427AFEDEAA8C420B63AC524E5AAAB
-1C0504A2E9C5E601831FD84DA7C7A78FAE4660D1AADC38578A2929E6C00F611B
-FA966D3490191EB437C2042B2EF87A493D1D184AD79550D817830C0C680B75A4
-5946ED1B46E5D26946AEE0057BDB4BE9B23884B839890E8ACD3F55608B7B68E2
-27B57A662DE621F1CF6AD89EF74D8FE1FBF42A95D2EF01ED6DEC83E659A36106
-8320126AE91C2A2051FCA141BDD3FFF477E674916E058BBC0428879C81ED9914
-E83B9C47920BABC636ECDD8C59A1ADAD12C384EFE8860DC8DE04DD8F7ADE8942
-CA3CF4CCB9EC7A0372A5FA7364026286086B463383C07AEC413D6A0415E6FCD2
-7A96973CA85B116134B41C8F120B557E43F38D21432885394F0C83602276BDCD
-7A2AF8A16D0CA4FAC497CE0FE1D19CA1D40F314CC872FCDDE3F330D5C6342C8D
-4CB634ED156D7D5B0468DC981706E775E5D5D23F1F0EB7B1CAC12833B8CF7D15
-A8CC34E07DE0CBFB425A50E22B79BA064C25A31596B95132D0B597561B2986FF
-2DDAC35CA3FB7F46659D721EA243793EC3BFF6BE5074DFCBC0B68FBCCB456D73
-47FECB042B1A1D7E1C290CBE8EC065E43B0C2805E225CA2F9967FEE8AB286D34
-02ECBD45D4A1EF6760EAB45362D09D245BB24249FAF120B797AD8A0173C6238C
-BE9824BFCEEE1DB6F05C8930819DE5F4CE87A8AF60DA79F5E53F18F51EA056C7
-D27B63845393F348A36B76859AA36C506EC5FC1419AB11CC41CD53D11360B23B
-8D520B860742104EB334F0D4BD01C94E654ACD4E7D88479D225530353FB67F64
-9865A97A10BEF98CB97CA3A3C9353F23F939FF98032E1AA6277536193A94739E
-35419AEC8D6CB44E85999A042E19EB1E6E4048323224760F610C8BF0E376F341
-2AC4CE2A52ED4551695F949FCB3C618E90FEF1392141B57A7B19CCFB57208A61
-C0F6940C9757BAA58102DBABC4780BCFCFCE8EA3CD9722FBF6BA55A4A6993A30
-325B2B9A0AD91CF8DF367CB979FFD4631634371853E3A5921069D464ED85E350
-6FBD46403428E74FAD68A324FAF8D13E896F336901795D71E5D2DB89E889C1BE
-C522FEB36C61D7E0E4B1B0EC693A0CFE4107647615051CCBB7DC16E97AD1BA35
-CE9A096DFF39786C33DA44E00552A2804A59841C5C22B18AC531BB9C0115F96A
-6956067574A462E428A5B43947EACB821D5215D5BFFFEA5279ACB6C5A31AE4E5
-0C02FB488E26606B36F1EEE1438372B7316154F65894F5C5E822C5631EB39AF5
-4651F131149F16F47567F97BD833D5BF3A8286814A8D73CDDEFA00A0EE22B5CF
-83499201F787F87DC5173DB57C12CAFDDFA8FE2953A4C336F13B2CEDB2315BD0
-0D4D63BF1818958DE6CE23B8ADDC55BAB29E1FD39DE94E047807FF791E40C68C
-573EDF6D22A0C6975AABC854543627201D22D817121BBDCD9F5BB0288F04940D
-C663CE143603B41392303A955A90CDA082899ECB1BA3591EF47E6AD1B5DCCB3E
-E6E68CD54310D21A0E809E957E6957D0004DCC386BC45526051094D82A2ECC32
-BE893DD5D32981AC1C3E5078EBF8CF2A0828B5B1719CF3120A6C767FAFFE68A3
-B57B6B5E1DF30B714EF791BB3C9B3D5D4BA21D33B3A81EB77757A3BCF842E15F
-1648EEC4655E10DBD61F2FAC6E96B96271B33B5E58E7CD380564822CD380BB52
-2E63097B912F140205926D11424378B8F134A85731B897747B128B7770B65A98
-1D8A8F2582E83F2E7BC0140074E1BDF96D5D8B16872ACA21BBCE43C52C68A331
-D491CA8AF687AA57BE80FF6F040335299E86BF7CFB26715E822384C7D2014281
-960A0C79CC7E77E4D6CFF0F5B2475E529BBE3464729B6A33DDFE36D26FABD8AD
-BF09C5599E1E33170C6AF8367342360E73681AAF946D42A3B661B0BABC9A3874
-BBDCBF3AA7C134D0ED3CADCCDCA0260E0213C3CD82173B8F544073B535E2C2D3
-D837416D51BE7FACE789B72BB3520FA7C8C80F52BF42C1862B309775540F6957
-1FDD0D5D6E4CCA987FF11577F6EDF7B3F044D3995BCE794CCCC129CF0BE7195F
-0F831289C1BB3C5C796F190138F0079F50C894021C27FA48D1FF4D1472DEE1BA
-EFAE61AEFDFE4F8C28528A32EB41B392E09BE386988BB4E92A83B1D833AA9A52
-2D2768D56EA0066017954EB9FCB2766BC8EA0F5A1BBDE25D548DF19CBA4A3A36
-28592831BDBFF6A7BC98AB965375A1316672FBD75D5D524B5283DBAD1084BC8D
-795EA03214D8F931BF336CB1520E3009C231734688AEEC98BBDF173C8FFA7DC5
-5F23ECE810811B1385BE7E7AF5B2974E7D80A1C86FC88BD6CC6A815B773EDBE2
-48BA5C3D8918C8F5E53F65605A574CDF99C7B29E72AA548C07EE3B1748D74F39
-0E201ABE1B36F9B7F11CA7B2869B7428C05BAB0E61D8CCCC3BBB497A5AAA2A72
-817CE375C1E68799649C6D6BF1E0CEE7974CB24DB8BFA82B786C87090347DF43
-A10532DFB6115038479591C3891293C22B33275976D269F5FC003984E815600A
-52940610447150D5BBDBBEFE6EFFB653C8A1DFE1115FBFD129FFE94825F247A1
-9F4307B13CEBE73596960D611B9E6D50B6ADE781FA381C48A73B47E2528B7D78
-2336BDA5F55CFBD3DEAECCEC9282C72D4BD3FEC0B6BEB5FADEE8D3126F7E8017
-38324C6C61677676006D66782B3D0E707126C40F8EED0180F527608176E29EED
-28E61C15BAE9D007C88B309530C5CE5753A568E0C94C1A4869D5457C9D043C2B
-157ED1C5EC2739A93755DD6FB02B92A5473FAD0F0B0C3341CAEDAE18E54EC140
-7A5B7A00721E495AB860EBA8DC36F25DEAC79B8DB57A7831B0542022315F34B4
-AD4A237617A221B09D92F934CE82405FB48564BAD05C3009AFA4D011161474D6
-2265A735E34607D45E6ED94D94FB1C901D6B4D6F4977B9BDAF1CECE6C8B65193
-C4743502A005ABF094249DEEDBD34B49810D69AD90CA0D950760E6D6AD8124BA
-A4DB0FA3394C7A6F9435B324C119D9AB4FF2A41E9C619F31DFF1FC22387D42E4
-3FA8DA47519DC003870486A139AC7CE1DA52B927679BD382975CEC601F1B01E6
-5ACFF335B326D80C6E6586C7677C4B148CDB3609248B3437CA43106C863C98F5
-0713644D81BAF67F2F1F3B3D67BE586B693F93609BE34A9CE769FD2FAC80A0FC
-68C5B10E148D1616939CE8D1AFDE025F8238C81963A5203128755DC399CFBC49
-AD4A8F08BBD20578151349A9FFE1D422DD1FACDD93466F228BEFAEA33E973A1F
-511028CAE3137DC36E99FED6C3719F5B0A8960AB6911000B18B0888226B76C02
-B77027A97C15D7553C3B71BDB62B5A78178C2F02276873B49438B3E854BAAA5E
-EF0A1B9D12B7E206E369F9E33EBB6A9F863101E72CC2832DF567A87F7452D5A0
-61F2177BD31C6D731AF564D1C0F058BF75E0B6C0AC24202B56AE2F100FB9D469
-4391D5B16874F1A5E4F0EE8FDA0E36B339D2D42D270F63EED284617670E01324
-D38D4EF3E92180A4F8DC2604B9189504D0FCC1F8394425810DD1BC4D233E89C8
-8284BCF502AFFF66A54E738F3BEFA7B4F51AF9C35575B1DC1EE6D922F0A09E82
-EE454ADBBD1DC0992470B0764332E312E2A3764217B502A9497274C5E2F13316
-46ACECBF93952AF579854CE0AAEDFE42584E216A93181861B66BC49D81FDD7D8
-3FA8FB05503F861A69254A5E21EB6CFF8855E7D08AF2B2D161A2328244F285D0
-E7876EC603CE837EDE0971AAA9BCAFB86329955E5F1F78A00E521CBEB22363A4
-142BDF69D408358C7C4D4E2E1ACF9CA11B72481B97F9231644988EFE3CA45659
-2655999007B7F4DA9EDDB47352519333815A28A5A53BEB5379D699CE73A0F6ED
-31156A41750753C3EB3EA6CB382BDC17702086C6C750286610CC7B0ED2009AF8
-BFA6460E643F88AF1A71744E2F42F92A6D5D0BD7FB2EEDE8EC854FCAB94242C1
-65634B2D10117CAAC9DB5CDEE681EFFE140810F7C9182162479C257972AA398A
-9B8B40286F9ECE6863CFAA33EEE37A20EBFB28403448D0019B99CE76655AE359
-E97D1B26861C4F8E0E17D5836D4AACF4F05AEC01EB12F45EA2964C6614FBD903
-FE930D67C83FA691F8F8241725F61356093B99C1E3F61BD69D63B13F748603F3
-BA9ACAE25A5820FC771547F1FC8EDAC3CBDA4D27C2E76F6A567B297081C51274
-29CDF072F62DE0B06096C7891F8A13542F44561DBF4E6179BFF1414A4919679E
-35E819B8655DC254C734B0471F61702D79E7D8D79861331A12CBDC0D1DF4472B
-0972AF27F184126C5CC24B5991549CCD9569C5E6A2536031E1BAD8D74DFB26F9
-F1B239267E44799A41C516D9949B03C76D2E4FF02B4018035C5DE91E7376452E
-D0A29D4E590CD69E3795AABF23DFB3B4A1C392F181CE6AE333C7DDF355307A12
-9FF9A1E357E5A8F0FBFB70406B2113BD7D404E6D7BABE8AB8D027A217E907C0B
-9D322F2B50F27AAA7E6DE95A14F16E61762ABADD2B2DB1BCE1A45AEBB423A63B
-2B64F2FA0B96FE37835F73A03358C755D55A86FA70E67E9CEB034F770E89FD48
-C41CE3D76FEB3EE18935DDF3A9251901FE9DA8F937F891EE181648F5A09E6AC2
-9317F5572856F1C8F1D90D6DC4E9CAB3869B6C30CCC58FE4F385FA5D01E5A1FF
-DA826AB7DF0D3EFEA10DB987D44DBC2E21E1F2FE3521CC3C1AC942FA5359B66D
-866CE1B7FE969A6F6C4F6E231DD9878D4EF3A166AE196F3A624E3E840DF4C948
-BFB315FC68F1F395278E6C3422930BC8D7AA293071B9F5ACCF3477FD797B2113
-A6605074CEC01253A75BF1E582D72E1766F72CE250AA62EFE25AB512C662ED23
-EB6FB19FDFC936D65668D143E7B63947FC50DCFFE5E3D825D15C0142FD17A550
-E6CE5DE77C765DC44866C8C85D0979F754B79C7C1BA57A45B2138B5A0D8722B3
-FCE9EC0915226AC5FA06C8DEAFCF132112010716D00BAA9EC84FAB149A86457F
-DAD83AD440A6D8802C2EC016E04E12BF6EE9B27AE6DCA0E047BD0767696D652A
-99F49C6E9472846023B7464E28B040FBC493BFFB443773A4DFF73A6464CCC43E
-3F3974DDE181F162A1E0F7C28D1EDB267E52F007212A82FD71432249749CEEC7
-F7027492F0C4AABCB20E217F76EB7F3F16B92875438271C88149B62961A97467
-9019EEA80E7B91AA608A9699BBED43FE5A937AFE62613BB7FFD4D55B123AEDBF
-A8C4FF6F88BB1DD3E42C16116CD63B6D4B47C6669233686B24DE774DE4E5567D
-AE75B64D89EF449AAAF1DC34CC9B5F6A1B380F2B65F8E4481956C911B241C439
-3CFF801B0BECC2F742E3F8DBFA7657B6BCA33A739913620843C97F94510AE3EE
-69DCADEE2775FECDA97B4AA73003413EB63971C06A435F6022D8DB74370D8AAB
-AAAA704DE82D50093BF6633F2649898ED33AF613B3BF7574C8BB76621A902E21
-7BF8AC2158FEFC7BC768F60084F4C3BBA86ACEAE575029EA1935F85B2E4E2B33
-3A176338F92F5CD578B1B90F2045B2104F62E845349B82784075F00A82085666
-014F7E804AB0718397CCCFA9328348FE44020223C6B9E4E1B8E688837A7DFA5F
-97ADA785FF999836256593D27B46075E90C58222CF1C22E4478004E1924F66F1
-EAF37DF7C9EEA1248EA56DC46DD0D126939A26F6B772340D6DA5F167BD75F994
-CA180309B1FCEDE0476F73C130A78A568E37B714B3B6A76BEB0C2E750F2B51D5
-295291010DC84842BDB34B1F969382FC41980ED8CFDD2ADD0202C7305C9EA4D0
-0E35D71C82B359B23A2F05
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 18 /grave put
-dup 19 /acute put
-dup 45 /hyphen put
-dup 46 /period put
-dup 65 /A put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 73 /I put
-dup 76 /L put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E427782B91F1098562
-3E22288F48ADE6EFA58CAEBE7C070A920C3A85F4327940DBD99179C26E3ABF17
-64E9CC6A45F17F19F3EC1C53B17485B813CB01915D55CA2034552666D5E44A96
-A0FAE064F599AEF095CA1816F7066EF0AFB220FE1DF11FAFD503505C5E6793A2
-6475E95FB467E2F3B5E7C6663A70B15698A1D158E23D3ABE3B6942B24832AC3C
-13F258038DDF209525C4124806A369ADB0423C2FD0F823AE3056F380B7128089
-689FD64442104C476657434FCEB87CF0F30CF5789B430398617359FFD974BFFA
-C9C55ACD601AC6CB8E97FA11DF303EA517BA2CFC359C6D59FF2B72CBB5ED34B9
-122E5487989CAB13A4F8B1CA24C5CB7D889EB8988CD8DD846275F32B2ECD3DE0
-C8B47765B1346D707BDC6F26F1465D16591D53D578D0D5F512A03AF4A269C1BF
-7F1E3A4BFDE928BB48E512AB8DA01383475C57E9DFCC800FCD9FD4960D8ED405
-5C52D648C91432144AAF7FFB4EA13AA3AD6C5FAC5EEBDA0A6C801AF3BF21C422
-1B53FD169F2029E4552DFEF4D27C08A8EDFDCCB4BCD1226A4CBDF6D50996DE87
-31E1D72A3BB7A51CBB36FC6EFDB1C50DBBB498DBE73AB31C9992D92A2A863068
-CEBDDE3A09A6367EC9FDAE330A18646B4745A247B1586BF2FDC18B5346053661
-142830C0AC11CEE134CA6BE6B115E4BFD14E2F323F421CFBD6DABBC49C10C62A
-5DC30DC5627FD5A938F4D92C0BC873AC16368841B1C0F060FE56E10C506F32B7
-C784DD1EB21A0C8A7A08C672B98FCB3C2491C16AFBE620BA1E860438C0E0C934
-630CB619FCECC748C516B2490F38A29FED7CB7C505EBD7134C800CD1A45983A7
-D4345E6D2E6498E11CA3AE5EBB3E579C9B78A771CEED32F8BA3946551C7A15AB
-B578BCAF25BC80D9A0169B6A547D08D677678EB3D287AA32683135802A365CB2
-E4A9CCF44EB215EB95140325F1ED1B4951503D94E933B2B4A6C015DC84D12D33
-0FC7F804048C1362A91CD1367234E78DE55E08F6284F5EA65AD6A7ECF7CDA406
-02E530FE9CA3FD79BDE8FA2BDE763BBAA80F9835A4C9B14CD83BA6FD1F9D7E41
-6C5EFF4AEB41E179FBC4910D123E188AC24C26FE3C2D0065362A87A85CAFA1BF
-15B1A3284F52CD24A5039FA47A73D5B194E13190C94B9FBD18ACD58615666B11
-A686542019874F1E962D034326FEDE4AAF12E30E6CC751E9662FB53CA195627F
-B5C5BA1ED33AA3B2A684CB5452F0143DC25FA2EE16F9C68F5FD204693634E0EC
-AAF0DCBC8799BE01436AE26C7A918C7BD57B2589DF0CB21D0857799D50173D86
-BE3F59E3EA5CDDCB394A25860968093C6FCDF1D9E38DBD1033741204581983EE
-84604B3E0B9C882BDF8C6AB648B1D7617D2181EFDFD8AB7EF075220132E2C411
-439C3D2076D357609E0457FAB333BC289FA0D62088918A9C4867C9CD0C8AB332
-D8FC119FFB5D3531F1A6514C26A77B874DA7B98BEB6AC6C6BDBCECEDBA06C64F
-0E435FA63F2995E724E64128C6783E90300471E3D2C73EB4BD9EFE28866783BB
-93EC0A04D79338D479472669D86AE46792645D807F3FE4AA131CF93B3A3694E2
-FEDE40F4D77EC29732DC4F180BA4ACB87B17423970F9762FFA065F92C6FC7F03
-1D344E46F85BB06AD98A0A9B5F22B801D20400A3D03557679D9983CACF51BA79
-23A12B9C7A67D67CAF0D66A5B92C3A29B3A108C0FD4505BA363D5D7E4AC391B0
-61CD6882B16229BB5F5DA3CC73797C26444581E5D86C54D074457B19AF1E128C
-CEA50A2C106880FFAE35EF7D569F605340B5A3C8F5B78EC715C16AD8959FF4DE
-414856AE8759D93F24D1E654E5573D3089AEEAA55543E1CC25EDEC8D9AA0A47D
-271898ECE2DAD982E6258E9F8B141FB24DAB69B81D4094448713E7C80E4CFAD5
-2D6916759C7C3A017EF5489E59F7EC5976624F323D3454A245ED85A524DF97F4
-54BDA55F8EFD5F4FA9E8E44B36AEB06683C833AAA8C389C01F16A858E08344E3
-F28EE5B7E3F4EF408A0ECBA488586625D5CB1E0D24A15F7681E36A9A3EB9B9F3
-DA6CCC03AAEDDFD1DE8791C4E02D761A512E8AAD6D1E242A08311F9DAD1D5F6E
-8A06222B37D6CCC39C933999CABF6B869D435B4AA756C1656CE6423656687802
-5B1DE7605BFB98CC7EC1EE979755D03D03B6C9474D5805AF57700CFFA0B9B11E
-2D2D8D3A1AA58B8CF1F46490DD73EEA13BDCEB20B5C77D1873603D6D58E33767
-DC96E98E630B2DBA7E950AD83A079712C83BE73CBD713B00EBDD425B239E2502
-9E740ED172EE1FF63233FE13E39BB7EC8E02CCBBBAF6A25DE4F3425FA6BB44B4
-C624457A474E11C05CDBC95F9850969D70FE4A84B7A096A405EB3E5EE73DD3BD
-503919AD5C3B172B51C3949FF98A0FA529F1626D3F2B43CCC04E25B16511AFA2
-E89B2E9B0ED36B5DC6DD312D5B484346900F13FCB9F3C2EAC4C431354198A9C2
-0D1D2C1B4AB8287924F7DF929AF1E48EAC6680502FBCA923EAB6CC8E23A72C19
-695F0BB856501390E2821240F33387EB1D6147D16FEC72FEE6576CA2D507E373
-986BE6DD8782A3F5257A73BEDA19539FD32F04418AE9F4AE280DB489C5D5BA6C
-5DAD0C27E45ED27A560661B46A0ECEBBB3BBAD32D4A2E0E24366FA4ACBB3C279
-1006F6DE15EBEC7456CEDD9ACDAD1987708D2C2EFB33A301AA3AC385CA9089D0
-7D4967C96DB76DDBF88DE16D584F39DEE45DF11FFABF92FA43E92094BA6FB14D
-45C80C976B3E6879AE21B193C3D3398C93895EFB1A943927448042BED0A8E0E4
-64E308D01C9A7B2CAF8867F330894A5ACC8D6A53A5CD1D662934A8568D1987E4
-45A973B0F6096FDFFDFEF6CA327C158C3B4F403184C401CEB9F21B98A037EEF6
-73F0426639A2247BC855A1BF95241A0F002B6DA615060DA8136AF02A07F85FA2
-A8C3418F306B5EEF8E10FCE51AFBF9AF2913D44A88567A6C7DD8E094F317DBFB
-8A2E014C2B5E0CB5632E598B5F5E05322C33C6FC4BB38DCB53D2F05C36B470B5
-21491F0FB127730D42662DDFC9ADF12AFACA3050FCBB5D4B2D632910ED76316D
-4DD15B50524AD795981EC4EA9FED7A8359A0656C8CC97CF8B6C93B31FAC0AD89
-4B2B6426C44BA13CCBC90D945DF35373DBB98239B0996E74A27E1D0A03DD6DE2
-13899C0EBB143F47C81AD18747E491E831DC5F400B2B15AA148B73E7A60E562B
-0862AE054ED5DB070E4511BEA08C4A45A0A4E45F254922C3AC8A60F749CF3199
-2B54F58C6D1219515ADF3BA353A8864F2379EE2DD75D1D6D4F23D4DFCBE916E0
-BC6BA439068866934B51C4B3D323F493A155D734D14629E717859F79651E7FFB
-AAB7DC7D5AB2C817A2D53B695B76DAAE59C130DE5BB0250B6FC71D428E51C638
-50A12028F5AE208554638D56354EED671044FD120AF994A382CAC7BEFCFB3787
-14C635679E0A83918F4734385B06C0D2430ABCFB9790FB6B0C35B1DEC75147FD
-93FE15B6768651E4A86BC7D4ECCF3929004CC1D83BB96FCB66239DB04EFF505C
-699270F60BD85C459DC560ABC6AEFA21A14EBA379ED68A0D0458B084692FD3BC
-82662FBA17BA478BD4CBD0581486B3879C29EA67987049811D3D7924BD567652
-08CF2D76D019BACAB684E75CC17D43752ACD5912B77B2598077912DD9FF9B7F7
-9D45CE8BA008826E3B3453FB33960AF037C524F9EEE1E5D162856D7C61E60FCF
-C47C65CF4144FA651D6C1018CBE382976D63357457B65A210C0A91DB08EDD237
-74E2A1074ACDA59FBBDE07EA3A7D35301D77C9B3B32523283EB031CF918F2D70
-A37B7830270965B7DF23026280175DA18783BEEFDF77E594DDD0577604B6AFAA
-04CE83C72F51D43F560A8A637C9109AE23A2A8E70547B90796194AAD05A71F55
-EC2AAA6E6F6195599A64D0B6881E6B6C7E388B998A6EFF16FB50CC4FD6BE9731
-CF4CAC7689A908305C5D10B452D99F241DCF8A9322D5A3D1675CCC5886A72669
-968784DF64DE454E24DBDCF35D8447142C74E39AEBF975415EC667EF4ADB470B
-7B064A2EB41BC9C748CC2C87B34119AF8D90B787A1746C5B0EA0A596087FD328
-921369872040912DCBE8D61CF5173B518AD912412EC6E1E1A62F98F94CC692C9
-F8E1FA3524839F59184D6222EAB2DDEFF9C5AEB52E18D8632F45879F720905CD
-7E228DE6808C4DD45E73C1962DB596000C951E0C7CEAD68907C4B6A71A304DB2
-EFF52E1E4C518C16239A1BCA98F5B2B31DDEB4645891C2BDA55FA36BEFD60A97
-49F18006E4745FFDE55AA8857BAF4447E6DA000E39680FC39D1EBA90D4B1B590
-84EB9E16F9520ABC79050E8D65BBC6D89D1435CAC07B3EC707390E5B4E6EC3AF
-6080323D4CD284A90839D3E64662DD475658BA23B5C830052E8BA64B289ED4F9
-0F1B7CF455230D4D287B1825EA428C5307B8A6E634870CD3F4039B0319DE21B9
-86CC6BB783423D6AABDF9116BF65F434E2E884DE5745FCDD9425A2D24B3F281B
-972543253492F3F23A814F9EA0D1E2FF5858900F0FF61423408417EB345DC41F
-4CA225A39F4C7A4B71E1BEFD86749274999343B0A062C11599F83F0CFC8CAF49
-C9139888C443C2D882C91856601086BDBAA9C35371DFCF1E964CFD71AC2A0B69
-C30FF89044D0755AB03CEC10AAD0435CA3F1F86B42FA70655179FA9BFA41E7FE
-1346EFB0034A18C228A8B0ADA76814F18E56671EE6528288B511D30A03F994C3
-26785306EBDB08A11C09662261692F98F385E61F9497F36F43C627B6A3FAEDDE
-3BAE58153A3B740E956FC41E29923D13888A50032597B9CAB299C1BF884A5001
-0B52622F7622A50EDFF74D97BEFD798E183725BB276A6E33E250709781F1887D
-53FC854F7F07F156D509EF432DFA317CEF0793012CB2F097E07C66BDEF5EAB7F
-CE0EFF17285F31298BB81C1CC50CB0EC984C1311B66CD24E0602F166F5014185
-4E38CAD17A62BEAD92CD2AA25DB0D4061F503E2E2ED4D0EEAAA6C97D2B253D96
-1AAB5F4D40EBD363EEE76A01378BD8636BABD43B9A8B18A1A514B27F0C88110E
-1DE3254D37261145430CD39A8F2685E611FF9C14E1427EFC121FF812EA60955C
-C77B58708FBF6BA301A7E909B1D166D002D8C4B8CB66C51CD52C07C9010D5359
-82A217CC8DA97CFD5FD99E12D205F61473401D3C43AFF0448437D316694747A9
-ACE4E9BEC72026B1E83C037FAC43460F62B1FD771A9C5F03AA347D888ABCE3FF
-4B7B7B69F5E49EF462CAEB299555156892014ABD2CA18C7189242D5219ABD178
-C5819CC1F509EC0CF0E1E3E249E871C1ADDD06E18644AB897D9DCFF9B9E971BE
-D2F8125247A2ED412AF5DB80CDBC588AE4E195DB17C4437B6FDC5CCE091F88AB
-C92128DFDA17D7326AE1446DC91BBBA989D94045A782D1530B81F551972B9A46
-EE407EB010DFCD3830F8DB622984C62F7F4C3FFE6DD106B634FB5318CF450F3B
-FBB998B70D84EBC210BA829F5EB76BED17F1BE3F2537BB2804A1F4813E381DFD
-C54F6F392B00A82B7EEE6AFE4976FD7235BA0B8D339FC41AFF776E611275D72D
-34AF70C85D54B33AFF4B6C141C1215358DC5670D4F9D7B5C636C766184E6863C
-E7A8DB1FC60C093CC5B20C1454748DBF05EE2FAA71F87632C61E80DD10FDED0E
-A7046335C29754D27BE6B5F39AD7554586382ABB3355E367E94646B2FC85DEEE
-14E5831172B5668B27671D5005B0EEDC0244628F6746F43DB0E9F4919957BDC1
-769C1A5970EDEB74EC7F49F63F8367F554BBDF04C8A18A3C9740476243CDE6D4
-A03FE56BDC1F148538D07C29EA1295CB4E4BEBC05A3765B8BDE8D46EBB0206DF
-B6FB82412BA37109FF0518745227AC234AAF169ACFF2776E820B425953498AD5
-DFDD5AF4DF661531598F1548FAB29F8E28C4AA67B987D33B084BE2937591EB1A
-427945B36DBF80CDA83D02D2C1C808CFD8D1D8476F78E42F295166C591EA545C
-7AF53D0AE4BCD3C39987A06B5556A9C63FB411C99D4AC57B79FF912BA5987575
-0504A87B3304B4E6FFEB865872807DFC8EADCEC909D8D6D839F923FEC10424DE
-50C16112505B363FE32D5EF407FE2B8BD8FC10799C3CEF5DC2DA9EE7DBC774C8
-F68680F98DB7AB84D79565E84B0063B2F466C82AD817C744BD72605DA743E612
-3DA12819A2C5357BCA207A756FA1DB40682AD3031B75BF37B17F671C92CCA035
-CD188B5184F2A8C01DEC7D75062D0E14A1218F2CF8A3EF5079FEC3F95F73A9ED
-5F1C2D108A03B9435D2A8E875224C0ADF0E03E558D29EE705D44E2763558471C
-9BAE805428A2F10527A1CCF09EBC44C70CAE43768ACA19628D801AB11345FF6B
-A46D23DEE958A992D3111953C82903B0788FD52BD491B78352F3C9133FC180E8
-3F1B98CF4CB038124B9E2A9699EB5424A97726621ED51DFFA1CAC9F1BE906B7E
-B8806A9E5DF8BD74252E67ECB24879B253BC02E505B7A32468594D70A7356F57
-932C5EE332F698F5F66ACA1D4B81A9B521D184EE6EC52BC97CBFECF8FD95E27D
-F03AD4B97E300E3F36DBA88A40D9F72936410CA2B511C42F4C2EBFEB20BC3A72
-440B22FDEB2F46175F64C60FA82F7C9AFFDCFF96640CACE4C211D773F03C7BF3
-2A322AE5B263132C6DD178EF04E62E1265EBF8F4B306C8E5C2AAF7C882DCF8CC
-4153A3D63CADA7F1EEC6902D48DAFF08DC3A17E9AE7732649A971FF6671B5EB3
-D741E6507F6CD7BF69BCF6617A86E689EFC7A3C7D43F85930791FC3E0A49AE12
-563490AEA59ED993D11E0510F64FE31FEE70C92DADB323E36212F3F5C15125B5
-37A480B4E46E5CD42C32E68D7A574153A2EBECFC3A8872C4D7DCF45311AAEAB2
-03564F6F595FEE224F75B4F4438627C878098114674EE482BEAC4941A87F7EBA
-AF803681BABA0890874FFB6D01D3D3CF0FE8682C46D9737E95C913F64E55C300
-FA0ED70D5C604F90C1D764CBB0C49C34EB7B76E3BBA02F1154C0E20B7D8EE5CB
-B21BCA91E4BB5DB62938FFA6361AEB2E49BFD61C053FB73ABD422C09749179D7
-B7513314D5DCB5525E72018245E4CA624EF10E913C0A811C76902B2FE6C74EF3
-EA839539EF27B31FC7F828C272B72685D23A1967D4BC903A990DA7004DF42914
-C4B512E1B3EC50DF510BD51EFC31B7D5C4DBAD3F24B0B0ADC745E263BAC4A6B6
-0DFA8496FD4812E0C51AB09598400C474F02742C010CEB834B84B466882221F8
-99CB8E30D38836B43B2361F29C1BC3F35AE96D084E2780BFEAE0809AF6CF9E7B
-2738E0774629C43E63B90A31F89A6ADB29D2724520766A76FF186D6657204789
-ADA458DB0DEBA76579EF9B21510F15A98EC00F9B17D5E2F927477B9E97DD7C21
-4F248F07773F16AF916B2BD31E6D6631CFEC133D9BCA1EDC8EF6C5D788A93D88
-7FF7E671869ACF1442A14997A01B85F642FFA89AE27D60B53CEC9418F772E59C
-D3BAAFAAC25730AC6B7168D9E78B974A09637302D404E64A11482BEF20A94A9A
-8C9EEB1E48D758FFE7E5236888175F802C23CEBA580637D975A979D284EEF29A
-FF3E83D39EA8DC40207A1C91F021C7FE9128400E79E1D1C88BB4BCD8369A9AA8
-58D0592A3AC18FA116DFA9DD297075C9C6243CB28262539EF1C48D850F66546C
-B8EFB06C0F339A2DE454B91B129FBB3CD3F319FDD5FB7DEB07827FFF722C95A8
-ADD385E9605E4C5E4B467455FAB8E054CDC085C9F3CE905DD5194049D1657839
-73C465D4348000A687FECE3C916F00960EBC7A245F67A63A15291A0F62261D3B
-D0DBD831D091F9FE88BF29526B7316E33B229F44DCE193EC459F4A5C0C0E719A
-33DA6124BA1D2AA3D93440FCE000C42942242A9E356E5CB10560CAC62FCD0DF1
-ADE8154DF592776882EC3A77D6202DBC204E3DFB97E05ED1128DF9A2EF0C8C3A
-5974CC0B523286147A938EDEF90923DEE8C1758FA8B6A0B689CCB1D8C365EC1A
-1F6292F3D4A8BA49B6BBDB1D92E338BBA96E00568A57C27C64F2AB8159DBD21C
-69A49DA9DA4521F6C8CABF809988F886780DC60413C46CC8512E2A3396754FCB
-6FC515E242BDC9BD32DDDFC1A4456B837C21176DD534A41583966518135D00ED
-4E4A7A6A639F464A354674CC1803A81CB9BFC1262815A4DD95229F05956B97F1
-ADFF3996303BCE98E36BC076A0A3A9C731162957B56762F8A8B5EBCD716A6804
-1954278A0EDCBC6C1719B9D3F8FCAC515A814601D6FCEED0BEB1797BE69C6404
-DDD598E08571444E08EA827BAED5D2366182480FAAA91A37C9D7EC7460A614E9
-D4D5EA6C425D9B9131C3769012FD66896BC1D0086DF016310DA3C56AB53CC840
-872F3E759A3F867E6D1D42B611C9C781BBC9AF55279547766D0351FF2B48FD49
-CE58CC05FD7297BC11F59DFA9F1C57F465FCA6FA213591A65282AD2E4A92ADAF
-
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 58 /colon put
-dup 60 /less put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 76 /L put
-dup 77 /M put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA4111CDD092DD0CAEC1DC6D0CEEC3
-B291B4AF285DBA243A3457A855171EA0527DFBF10E34A60D3BE2092B3218365F
-07271A0CFA3AD15205D0D0886AAE1C89807C74C6BB23F55F0405A522BE78D4C3
-0E6C7A2C17EF66CDDD65AB75D03526DBD692FF1557B689A200BB5A593E92DA77
-01E5A82004AEF4402C06C65B21971E8240F87BE60F5F7E0B56D3024B7D49B9A7
-724C55353C362CB35B720A5405B2B9301A1A0083802E8766ADB7856925D45001
-1FA451AA61F72022FF0419B1650CE94208DEEC7EE3B53ED7F9E995F883338936
-EA6FCE2E2466BE5C04B46FC7DD9E80E6F1ECDF77599D3AB9E61C00D7E425636A
-E0AAD63D341CE31564C7882916EC35366208A3C06435BF1F55086D627E06B996
-7C49FF12CC6D0E793EB19C4972C3904ED0FA9FE0C4E05140CBAB2C41EC148B05
-43A9AD2CA401532FE0045933AE0B08BC1F16D94D85420A26A9D32A9F2486BD9F
-EA2553F2E8B6950F63A1102E9E8DE227BD756612412DB1520358DDB08CFFAEF4
-AC3597978F43E982BEDBAD042738D05AD42348840F9D0122535E6CE711AB2898
-9F1003DB762D3B15BF35F3B7F593C40282FCDA0CFB1DD0B2B3A8DB68E326251A
-E4B6B6C559E735EEA2CB221ED8B8E2366B1BFAFAA234FCAB5F94F7134DB434C9
-7033F5ED902DE94FAB29392934E8DFFB00C5D27505CFDB2F1BDC7B10C9379B1B
-8533F17A4369203D2C65B5C75975A65D20BF6880FFDF8043435779F26127B38E
-09399EBB27BC2CC481594BEAF8A749445805A6EDA1DCDD02D7F23038B6EF99C3
-18918626F164B6F9FB32CFFB0D936C11AE7E2AC80543864A65EA8575DE49848B
-B09FDE687FA8AD27D0221315119A0EF7CB87E6C72A232B51E48F4AA67AB0FE6F
-36C4BA99B3C0C343EEBF2C0E5905E71FB897C0E80C9A3B15A9CBE81994D24580
-EC447198E94134154F103060C6CCEEC2006A2F7B8A01457493EDB59205B0194F
-F4859CB75EAF60F98B0A213864DD8407DE4DF86AE6EDC5147FBED02C022B26D4
-158A8313188C7BFA5F185AF65FA75F0A17DE6A5CA276DCBDB01CF410114E8B17
-5DCCB1486455DDA266A778A9EEB6B41B9DE0F79021D241FEB9E9496DDEEB6558
-7145D3540032DD2F1848CF4AD9F88E67C4B77339BFA9EE3CF75FD78A63ADB40E
-68B3D693AEB0E7AA4E46B84BAF08CDC361A106C566D01FE63AF40D245B717B92
-FD7391F92B159830ACA6303C8E96AFA4780DCD4963BD98AF67D8511E4E6C6E7A
-32616CE5F6CB270F01B6AC4EE342610E0CA1AF1DFE51CECFF133AD714F5EE89E
-978C4BF5EA08125733CFE4B0C3853429E910677D568EA9A4A0800AA5D391A772
-E8114BC600B2D6B2651BBF987CC3509B00CEEBDDBDD82330A9181D209271073F
-B37241398D70D049B9FF607A41AC70E64B928DEAB1A0B4745D98ADEFB18F2D04
-0C44BD18F8687967984B9D48A5BF27E09CEFFD7953E6D9881A197CD09B8C75AE
-31C9ED0FEF539E4D71E4DE6E65D106975A0F9C57966D50E678AE5EA9FB83EC80
-0020420E2FDB7F4234A3DF285B9D761E1F0A21018BDD9EB84934B808E345BF4E
-91556AE5779EADC1BD02E198C73D1D10A56A0F09F01302BB91879DBB084C488C
-972D39D4212AAD28F9B24C164F18CAAF595BB6F9EA9DB90C3AC98D0F37C36830
-F28A9DDAFBD9E3C84928E9EA230FBC0F3C3D05DE4084621B65D26AF4F07F74E6
-183E59EAAE390C8AC834DC662B06E83A9CADC8B891B3EDB56FCA7252600082BB
-DCE150610319A3861811339A621DEEAD6D619D475BA86984561F489D052BAA18
-7AF5FF29298168AC79B1626F882CB19F6AF7DCC4E28124ECE52599C51890E580
-132273798D3013CF390A8569A8618258D3570D2F1E538E96793E4A939293BCAB
-A9EAB62579E456B5C80CB9B79A70EB36080A6AAECB786FBDC7F19E6543F67B8B
-39D24FF379D8C6C257C2E361FDB384C822DB095DA0F10211D6572E4DE6D4E8BD
-1770868E2752631376DEDD29CC784ECD374D72232026BDF4650B9E2712190D39
-4C0748743D7EE4706B7B31C90E5743E85DAB062B01DA4960E0314D9D51293BEA
-9DC2DA2C67DF7186F9346CA769A0C7C6E6DE1BD9B48709EB87C6E6139BDFB245
-69A02887DF104549CFDDD7FFD86E9822FFFD2DF186512BB81BEE95253FB15FEA
-01E04ED643D2C7ED7B43AF1919ED54C69908A87FEF3C46BE979787C79F885451
-3C658541A8E388297ACE1CE31AF3DC7DE205B72F27EA432387A609D9401C0FA7
-B53EF719D0BA60B400DD9D02C7D9626799D39C51039B3D0408CBCFEBB0B2EF81
-220B69B2953E00666BB31C73F11F1E6108C62F4F54138631B9FAAC2C9F92935C
-2B3D9989D3D78AE5CB66BB48F669178200ECEECAAF28DC0D5378238DFB8C4DEE
-D337C8F28BBAC0840F950DF373EE8C3A59568D95648E33802210A3A563B5819B
-14C059E7F4AC6F426CD4E7B3F1A2F6F4C2FC19C2C3E9DA7D2C8F950D7564C282
-860C60EADC8F9B71B90DAAD27095804884289E914F0BF17C555A91FD07B13DA0
-66232C27711289C4D5E20A39A4660BFC00566BB31FA6511B763EFBF1CF95AC91
-CCC63FB618BB886C3B7318CC8301E323EDB4E016F0F7889C4FEDE858094C23E2
-8429D32F5C52CAA03CFD74820F2B956E61560B64CCA58607B300CA9166864F66
-49FC01C8848EE25857AD731386858093E9F87299D452D9C13D06F90E9FEF2C9C
-B9B78EA3D3F31785364D36B1650A567AE8CF30A7A5E5C6686B614DFFF65EE9E1
-04211CFDD13B3F021E5D9C965BB56FA136C0B14761ADEB5C8092088990E8D0D6
-B92F39F4E85E71FA38904C93EFB4D7FFA8012920C2445339BEEFC621CD4765D7
-01A9C397BDA9C3C0D0E6B15297BA0BBF6169BF10162524EA71D7CA539FC209BF
-375314A88500ECFB9C7363C5AE0D7FB44D0D1AFA09F34E57AAEA2EA67E2888A0
-1B202C2FC4017AB742D5437E8BC89CB24A4A1B0DF2453026E69B60AD3AC8EEAF
-ABCC24A1F4C628D67BBC03985396C05E5DFFDD98A0CD615D37EE0FC2C9173D91
-7F20B0964E1FACA7FEF48DDF1ABD76716E06B403998530C15C434F1FD2BBB250
-4B95E75486B54604D3687C2320FDF083A23C01A79363A225733925DBB954D366
-3C535E17565ACB00D3ACB5116996A172743511888EAA2D69B180A4C4FECCF034
-BBB539DCD94510B84AB82E9154C93F025FE50BF00B325A6CC4B6974BC3B67596
-CF605CC04A14625DB25A6EB9E9F9BE93066E34A285CDC45ED330AD2073A9DDF4
-8D3A6739CBF4E846C3BB01B9DC7F01055BD43AA0022FFFB2B93DC850419B4BF7
-97451F057CC0BC68C208DF288E8A1310A015BDD1019C17EBDB42CDCA2509CE3C
-E74D55C55630B10A7F042F260D0B285DE8399D11D079E91F348317AA3DDE0CC2
-A8DAC75318B5FEA8A6359EE3765E6F75E58D354B9607034F6A8BF0B22C9F770A
-F537347806E5FB7C0A6A9325D0519B02A0E7CA47946561B848BFB1C00B5AC67F
-BE25853D147950FB70854C7F4C8D7C503850F1748DDA6210DDA2BDA36DE9AF9E
-7D4DD3152165C9AFE4CAD15D146B71F0B7F2DEAA5EB3E1637A9CB5C3CF60ACB0
-7E6A11244B3FE758DF42E346A847B6FDCA6B6FCD7F02BE7D467CDC4AA2435E5E
-34647FB8C7EFCBFD144895C0AECD5E0F2AA6375C005C75535C0833FCC123A07A
-C841157D68C80ED5341FBCA8C83274C751016C40FB73A5EA4C6ABE1ADB730CC5
-1CD781A616C79C2B99EB1F13115FB00A8994DF8017791E23CCC269D90D49B402
-E1AEEF2326CB2AB44079CE18A1FFA08195CA2AFAD0ED73D907F4FC6422B882BE
-F7CE67E17EE720B1767BB925E432CDE667B4D3F0483DBCA9EEF9A41A786DBC81
-AC9A52114892FB6D2FA892B6FDD27DDDB9E173AB1DB7FD612506E2D0338D1747
-1ABEB8BA78BF7127FEBBA18A70DAEEB612B7E48885C76CBB9DB5786C17B286C8
-A955C89B3DC4FBC16C3DA027D10148F5A2C685255F2D165570BF8BB7EF72A0C9
-F90C740E57BA036C38B3FD04BDE1119FD3582FAF9F254220CC20532D8C839CCD
-ADB7ED9483CB784126475CDE0E8B2C602A14D13486C214AD6B53E14779E7DCD0
-59A4C4D62A704B4EFA896439CB66B953822B492265FFA6BE2367DE24DA97CD5E
-31D715A3320B7D0E1EEC35EA1828A218BF3B2B4EFDADCF91DDF152D4E4F92155
-757446DD8D122A22AC3C02D9FB49D31732A03F9AAC36B0494F234466B3C239AB
-4D41488FFB5EE503F69942287348E09637CCE28F1A6671B06E8F700A2276B2E9
-60BCDD1CBAECFE816F6A4A1277569D6EF85BB49503708F56A8411F76E53148F8
-A49C0623E3EC3DE32B280F5BD47AE3F759589C2E4DF29ED5DFC587E8241F559B
-4B6A1F8646D292D966CBCF651D751E5C92751B289BB75A8058E9B19C375013AC
-5B810252BF23FF9C7A0A568C6B4E329F5B71003118F3DE19F99760B525AC3D51
-AC85F6E4E47F1EB7589AC39379C35DE27F4FC5B79B8F5D33049D4BF72A8FAD0D
-04A1C77795B44EDC59FEC22A5843F86D18FD4415FAC8AD44AA7520392D57B7B6
-2C755EF3AE81A83D965E65EE8583F575AE1CC4F50A37F0B3C007771A5B60B01C
-19FF8858951E0E7CAC7D157D3F5BC7F0E453738DC33EB390F31D38781CDA8578
-F9555EA83FA8BF8BDF55740882D9140C9596ABD438E903B366ADF71304E81E58
-FF9B51BA19FE3EB5599C6D1787569B44BF26D4E14FE79C1D47F3FD4E573CCECC
-BA3F8FD36B608D87CAAC3686BE994B252287AEFD9A14AB3051CD4D751F27DB18
-BED214064F065F20D3FE097DF160C63EA5CD01B3C27788A927C79A21C4F2164C
-EEE8F38C79A7C68B1C1958F7B6F0F696A203C93918B3C23DBBEECCCB2EF2D96A
-EF6BA2A7AE40979ACEEFF78FC82EA9B34F6126F515C307783045FE80587D0FD4
-D0F81422E0B82CCC82BEE3D4189536E2C08B35AFAF3FAE2D5D009DE9BB99598A
-A91B9B58964B4CC7CB625084C0DC42ED14D685C25C85181A8735C4EA6BA9CFD2
-B7C8E67977D047470C7A778166FF42BC4B9A8F33C5451FD16878F6D65A47617C
-543A1E51AC939FB97235FDCD67962AD3CB5985DFA5737B28AD2E24DFA5921B3A
-CF2CF5FF6687C7EC9C66C4DF80C039DD5965CB1B49D0091ACAC40AA078DF781E
-55A2457EE55B1E0422C5F8074A9D475E194E5742857BD6544A636AE573FD8E68
-70BF3858E463E94E5F5D956B9859DCF1917516005364779BB9DDB66F5DA107E4
-2B5BC512D0F9C32FDC34794BA631A0731CED84706E2FB9AF7CBD4ECD53B6157F
-7B01BFFB519C87689E2A489833D22F3C1D812849B656E6C91088880F135DEE39
-FBE71EB03E6B5AD77280112F6C3E2636D22A38AD1D34F33B7C327122B9F4BE2E
-791FED7545D52ABF2ACBDFCF770F8F874806DE0D1977776B330FB8D84A52834B
-0D2BC3FC18BC1885959B65A2B395202A8BE49350C1E133EBAEDF41D36345C24F
-86E4576E68E81EB707EEFED92F6F09FA46F2F54BA766E3B20F1CFBD6677B59EB
-73778BADEBB3783A5CFA9138815187A86694E8965FABF1DF6960865AE363D418
-4C3401F3854DD5C241F3667E2CB34EBBE9A74D890283DCA529E1B63DEA16898E
-FD241DAA19EECE2869780A8A03BE546819B3C82762F5757E72C0FA749F90050B
-BDDE78E6D01685F6DCEB9A6F45E7EC9D253ED34D2EBCB98FDE257FE1AE7D39C7
-1171F5425F3604B93531EBD0DFF691A905ACAB90F760AF4A674C500119B91549
-0566246482F9454E3D3927239AD8DEEE6D4E9ECB56748D2965D7D4C59E358307
-F936122ECCF570568F9C8C8FE5F135AAE916CED51041840BC4B1F403FA632FD1
-E694065B7F48EE00FE1E6ACAD8B86A11F3ECCA19B5ADB114D0980766991F8AC1
-573EA9B5C8FB5669574CC0426377764CF911BD316C8A7D772F78F47524112BB2
-A32F11FA6A6D1B295D96456A0D621C2B8F284DBD8FEA152D9EDE6A68B9CE8CED
-65E380ADEA02DD9C06733A4984AB4F7F8C5E87E58C9AEC65CD3490C87C04DCA3
-42AC5CFFDAF21995432D0115B425B20DFC3AF8206354267FD0A8242BE0B23B24
-7B8BFE5CB5A2340838F3BD77B6ED26A6E43D2F732F5036807505B5E8C155D194
-03E57F31DB974254F3CE52708587825117D646942431DC4A29E99E7DF8193B3F
-2C9FA9049DF511A48E405A3B798F0855493AA0A2777BF1F9F55B6797F27B8711
-5B34A0C897B7B13543477D159232939A052E46DF470936A8479BCA8ED9F97F88
-A9D77E43F19DBDD737EA504D94AC6DDAF29AF0DFB73AF8B7681E501AE88A6264
-B879436A69BD0DCF3465BE9D480A31B9702B2BDDB87D647E5A03B7E931505CD6
-7FF4595F44DA7EC3B1BE6C3E713AB806A1737D026A890E77AD137A9317779D08
-B84026855E4D84BFF2B50ACD7E4E23A50B888916681BE1FFD83128E9C36029BB
-AB6225DECF2F6DFE22E12A084C27F809F53074A272735FA977D783ADFA5555C5
-F2FF03C670E2018C9388CA3034414402C60E0D49E121FA06B54E649E73E65E2E
-3376B59F3E3221FF238488418E7B969795938996B506C9CCAE529C1AD10CBCBD
-B2DC727D9722C198F7BAA1BF583AEE1B88740668CC1E9EC960B33820981700CC
-01F5AB0586DEA46B96A72EBA2568E8A3774935B4A17BB2DF361B4E4D30814CAE
-7C6BABE324FE7FCC67E32F773924E8C995A025948E253CA14FD35DB48A4C9869
-10ADFBFEA18E729FE71A53584FF7CC8E50D04A3700181E0218558C262873C7D8
-DF424F5457D76FE99ACDF797E542433AAF9E811516AC28698A179E17915BB3E1
-368DC25C96394147D0483ECB7EC5543595AD8903BEBFB250C76ACC782BBA59DD
-36D393AB25D84A09E19F7788CAA4A9110997581DCA6EA82B149660101B9DA10C
-66A13ACB601596B68CBDEB3F8AAAB3DE33874C0B07B71BCB6E4BF05CA47A7AD0
-69B6F516E4ED20D017CE5D324FE97D7FD2412A73B92D8601B8D716AD4C87891B
-53D9E95DFAC1F27A582CCA123096B12BC1BFD68F432956606CAAD9752102B925
-555EB728A26DCB480AFA1E87F2990585E477E5E83C045A72FB2DD04D0AFC8512
-640086008CD6989676719D94E4646EA41508A6A4C25E93E84B3928E9F875186D
-B2C6079FA73A221FADDED66AA88F5B49208D10C2E1E91E25DB3818D69E69F10D
-197A16CF687E74CDE885CB876C185F19D120D916E66F88D03B308ECD3BF2010C
-7530AC389495B4E63B70999149C463F46DC3FBB0E77E74ACA0E0CE17172AEFB5
-F3D559DA122B384EC940CD845E8B5271D2859A12F5E913BA6CCF8576ED7F5C04
-9C4FE5B7DF849BBD08DB1B44A71A59CD1769853CF9E49A3425D48D19233988AC
-3263BD7D1861EE4E99C9D33FCDE02854B0A9CCC24F337F04F9AA4F0292F5613B
-0DC69AFFD972B2EA03B018057A588936F7868AC2FF5474B9A9584F2AB70A6813
-23571813A6B3B48ABA4CB44F6C14E9DD5EBC97D9A705F215B31352711E6DDC25
-27B5CF2AB2C4A1B2310A91711D39A4BB8EDC93361A18A38487F8D2E3C91E5D80
-53C2B713BB837DE72556FA3D1E797EB6A90D83DA02DE424D074B6A8EFF11BE23
-D9E905B15C4860FEC665B2182CA30293A86B5D1BB1F7230D7ACF88D7C53317F2
-57FABDDDC049CA2CF03E8F0FE9FD160736418DDAD7809A85D3F3CAE9F7C51E3D
-2238449F781D61AE69614F0B307558D4423C86EE67C353E9B49DBEB7B060D7F5
-25AE5A7F64F20D22B4932E86D5F70632334D3F08F22B81472545ADD27C389FAE
-F619E9FF87185F0F54BDDD40430CC44576CA2A2F3F4C115D3C82E53689203F93
-36421BCAEB7FE999BF2EA19D3B126C073EEEEDE1E841BA512B2A4D8E1BFB3A8C
-B2272496B09DD88CC7C37EE8E06BB92797FEA48E4845D7EDB60A61206C581894
-1FB3FFFFA610E81026A7AFF8D400EF068D1797F8512F05223DDA51FE18DFDD7D
-79FA8754A79D501826F705CC5450BE63C2390764D2AF32BDEF3E45940774C9AF
-E869BCF5D5C028278DA373F0B0B6ADA106DBF419FFD5ECA3C60A6C1AD46C6C25
-5C3DC971BB07A23E3F3180DD9DEAEDFC2A96DF506424C5EFA695150D5B550AF8
-E60CDEA33876B075EF693883F6FB70EF5676B4552318E1EBBD4050B2BAD9273B
-FA895B3DAB65E4202AB0EBBC633A0810F852824D3FA83865E505F0A226A85D26
-C7D69739B671A64FDAA895F7C98660E43B18923702C6E02C3B0806BC375AC535
-527265D76CAB05110C7854CB477F1ED55D0B876CF2421E3FD0F21337AFBEC2BD
-24E8E304B141B878DDF0A9F692E1481FCE9FE8734E6FE9CC2114F0F341AB9E03
-8E4118316EEA0985914711F52F7D2CA2FF11FD9D79C5CBC12807B5992B8485DC
-494FC91F87A7A8731CE88752D02E4527597BD7485D4B88BADA367D516EE4069E
-12625CD755DE031815AE82EEABBFF8563BD74A2A5430F4B084D7F10CAB27224B
-8A8ACAB00DD8B88D7A3B9F05D769D8328E46C1345B7BA0DAD75302227CE54C2C
-AB035F296ADF6F7F7E7CDE3EA657F1244C2370C6D95EE876257AD318A92D90D9
-4249B2EF5F001B88C41BF9C9424E9904A28951038318B55BEDDD504F111622D0
-0F9D23CDB090D27E1A7B0B7DEF03C71D5F90523852FB2530A4832382EC10EDDD
-EAA73D2C1CC08A53F1262BF636D56748631DEBE79B173EBF76B6E2334BF0D855
-74430668E6E49160A25FDE5DB59FE6320B10D00AFDAA328324572B6F767D98D5
-ABFF8B9418D51864EAAAAAA2872BEDBA9ADDD7F24012DDCD6200E5B322B2FBF2
-3A37639CBD9918FBAC813DDFF7A330CEAF3BBEC787D6B404C88E22F2EA4B0F88
-1260BC45253FDDB713D260F72F074FF766A841C7B258F281C092CF643013ED6D
-F4C3DB7750E93E405958FD2DFB84FE26FB582A61A029088B6193560370751546
-230789365755CF9412EE72731564C80661E5D607DB15823CFD57DC71DB65996A
-3093A3328998FC86ED7E2214BDAA5D70F0DF0D54D0E2380B71B9E321131F247D
-37AB1EE17FEC0ABCFC5906695B15B21CF44DE062BDBC4B9088844D4F0E39E071
-0B33110F36C709E62F7129C3089F2C235F2EFCB1820B54FFA88F157C0CE08271
-AF58E9BEDEEB16F461B77596D9FCA92F3ED5B751FC0C0312769C23E85DB83BA1
-A1F8D74BC27276BD842D5856664582B3F5414E2213E382DDD8EC2EEF31E79B95
-C2497A33906574377E7FAF03CE9131A925189213E7BA883D30BDA2D03A696FDC
-E62DC5B68FC604FC6E612BCDB18482FDAD3EE1E2E0ED7F93C91C81176D33BA53
-6CEBA5D8ECDF838640ED67372D1B2943A94D82DC93AC338C57CDE651DAE7C234
-03630634D5C816277DBC9EC71DC0A862F19B1756A11703DF5DB91E110FDC7271
-C2EBBC42F233B575752573E7C3DDC8EFC73A6B8DE7E6B8D48352C3733CB9635C
-ECAD66C97F2DD346865CF018F46B4565883834D989216E3CA25556E1F9E98930
-394B985ECF798743D8277C2AB8DCAC16B483610DB7C3C90F71680D807BFD5493
-FBEA7F3FA4293659AE976D036FAD43D509C2DBA3992DD24DE8A99BF1FEEE7431
-31705015A098AD47A51E6D955DAA1A4B03CEA003E0273BA5671F7F1998238D88
-D0DA4262B134AC9003BCE375A75AC93715F8F2F8A628409CAE9FF9D119301B3E
-E8147F1DE16649984430EC4BA948BF5C74111D0F8056383D444F6524C7FAD4F8
-6A4FDF445CF8EEDFED560A6C262E24C0444B2AF705926A9E0805A1911F0230ED
-5B2030D956CEC14A102CF4F8E8C3DAC74ADC16C169BC4A4DE75DB3CE82376254
-00FA86DB89265200CEB4CC133B2A993AD95C5AE5A695DEBB05624CEE6DDA6B5E
-A089344AFA90ACA83A413762F0153EAF7DE15333BF9AF6E75EFEB3964D59E183
-42C5E52A77C87E85E2B3049508C00ADA5D6F0A8EEB2A4D71DF16F3DACD580DD5
-68C68834C0778B469ED2F8C833A1BA9CD0DB2D6AD88C506F5BB23CFEF461D30C
-ABF3164B702B433E0156590C1FD699268144766D3AE1F8E582ADC19B2D4FEC59
-0DDC8270512D3318D854BE1BA7F545AF9D9A0F3B59710609AD7A624CDCE04DAB
-095A54E8FBBBB1987D01EB7CD1B6BEDCCAA46A07077655A73707D6902BE02565
-EC7C6145AF4E52D1073E3DAC7C087A14E9631570901BEE1FF3255B8D501384A4
-0658B67909EC2F6B90A1BCEFFA9D74C1CF5570D7EA96391CAB7CA4E0CFDDB3FB
-C3591EEB49AB7B154973F0EEB9879D53DE90351F0F76BD90764ADE187C68FEB5
-AF1B4B290F2F0AA66E1D138B21C1D4EE491ED26EE44CE490F326A0407B0FA267
-1707218CA4EE1FDE220835476614DD67C7845DFB243FD2C5D856ABC7E97671AD
-B85BCAABD214B9D9BA81B4E925A726A122F1FFF11F9581A3F08645BBC4197B27
-D40D2A95EE1DAFA9C8A6157E0E79866BA40C0702B26210725AA2239785D9D9F5
-017047AB62B57F6744B2D4A5D642E971074A2FB1F8809AB65A52E96C51415FC1
-A5286427DE8C81BBFB5A218090595CC14A86A40ED9709D5752157EA673A4084A
-93BD7E215DBD1148BC140DDC68FF8F3C1AE10894D8BA9C4A3AE55992F88429C8
-DD9B8247EB0D653FFE69165BE6827825C1F88FB36E69F2A8A3CDB6D72FF96DDA
-072C65F51A898EE82590678C43FC184B532ABBEEB801F0143111C9941F2B1C3A
-484DF4C0AA7E738EB2063278EB7B70E1BAAA88C50BC462ED449B66E4E0978C1F
-7DB04568AF5EB412C3E41BA22E8273C1996042DFF01F9702B676E858F4FDD430
-F6B417197D8999945E9A82DA43969580863825D31F9D59A0D87D0F313FE2C28B
-C6B97A98DB142B88A45943DD49471C3424BEB1DB482E9650B0B92AC70FE8845C
-DA7716D68C9C2A14BD68F379E2C9DBFF92DBACFA705F328AC2D196F472A24ACA
-244A17F00C82EF653DCB067E0F3762CA52E58A5604D29EB1D56B2EB40417E2E7
-9406035A253BC2F539D5B09ACABB048EF1D689A5889B9C5FA6B2E0E2EDB9599B
-F6F4B355E3733E6BF9B21DBF7580E52526F2900F980B3C28062A33A25CE7F6A7
-4F13D6AAD9327ECC7F3F97BF15C3BEDE1A0DE042E749F648354D061C3E52E7D9
-F376216E4BD2B782A5AA0D9FDC5551CF660285E4CA7363858C51DCC79F66072A
-2FFD59D6799BC84EDC0C5DC09D9E40056A4608B235F1357D454ED3028322AB8F
-DAF5CC60F8B5EF4E01A8ECE97C491D828A87CB85D50CD56E4A7BB6DE2315CB0B
-D0113AE20B4EF27FC486B648C3C0E6F69C1FFAE0C766DFB8B16611CB504FCAD3
-06B8169190CC5F836CB68D7CC34A8434BDDBBEF33E2B778884A8070654378FB3
-744459C9FFD348B2059652D47335D7C864619700681D45A39F068430F8DBC4F0
-D1122FCC17182216F62C82A2800FEAB2247A07413B3809DBAD5A03E1F1968BBD
-B41B98142B9B0403D882A3A70B334F0365353E51A7FE4309DE4EA9BE3B695601
-3CF86249952A437666BDFACB7D272F200A64B9C09A125287FE2779E950687EBB
-3EB747653C8D95758407DC3AD8C95AC3D2E18994156FD13CC03A6653EC7A2993
-F9893778089FA63708B0E3942A226A5289090412CBED2CD71BE93DD4CC56F095
-2E41EB41DE3CA0F8953C28C3285C57B75C13CB8A7E588054BDBF3B5AD6E86965
-4BAC32C54CC88E2BA882A887BD84BBC8F15DE986DC2118D2DD0A0E154EE11815
-65B18565F5C97BA8F5753324CCB5CD8D40463D909E832CAD28E62AA2250D8DC3
-120252A10404200CEA8A2B67CF44676E6003B7FC2AC00ADDE1227724B9E8999E
-B5A4E94223504B52575111E828E4AC03833844683B64101AB5D91EFB4CC8A822
-72C394436D8930F1541359194EAB8F44403958F415678D3EACC777022271EBA2
-2A76DC2E2E833B426A15D5AE648101CDB8116D353A837D466E4311DD86F1D921
-64EF76C5CB35B5B0E4B8B1B93861E03C1B635391276D77ECFCF247E714CC67EF
-72209891C418D1472541D68A6761EBB440E360881E993D3FA4E29CADBFE733AA
-7C260797DFE27403E70F6B1D2E493A1C55B2381AF9A815808B5081231FDF30D7
-CB3A1D091A4B6887F9EF692C736AB5770BA5921D48DB3F196A4515FEFD4317D5
-BCBE5394CB5EFDB4C4A972B669C294966E5D76171CE5B903E4D8E6AE50C5C075
-37C42B59E74CF491556B618191C3489D11288587FF05713B18529C7C7DE1B9FC
-CEA7667AA32EC4F02F452F9F20E54C89E071ABFC4155ACDB4DF3900EAEC25386
-E14C88BB174890A966703ABE3B6EE4E229882DD0543C3E33025F072EECAC34A7
-7945C2D58A721E42FE71F1A2CBC59EE8278EE39F6BFDAE2AABA5562E0970991B
-75A3AE1B2B0CE3B8BA0E32F6D281990054BB095B9E9B128D54E3492C08380208
-B6FD878894DE6F487363C826F26F5B810314E48E86C933B885D21887ECFC7FA7
-711F256D819274209A0E08AB6E147F7642D07C97F92E70699D88ADDFFC941A17
-E521A3D5E3596491CF5D9BB95E483C353441CC4748A59F9E49C79968AAD58F19
-38FE5E275EA22403CC4A287A30F7B616CD4B31519AAB4DD7237916906B59CBCB
-C275E1E993B33AD6F76E945DD4CFC3CAC1BA88E5CF9D15F03212207182AA054E
-9B53A2469E76F128006747A7E3E95720EC90B43BAF6E016205435EA4AC8C8303
-E1E41BF20358CDA809B88C72AB0C2011A6C91A884D542D92971327564E175217
-A40ED9EDA6B45192C46B648215A556591A5C8AFB8468947B8BEBFAB854983A44
-CB88DD24D3C8920383944E2FE13C18A45D4A5507110C61FBA11945DDE8F0E5C6
-265F450C30BDF5D3C95F40573B139857539F01E8C804BDC8DA9306C133E7FC0B
-66F52013A1D7C4BBF2B2E1EBF80EC769D802C7117C06AE917206ED17D13A3E95
-5C987FBAFDF8B1B49E00376E8B4D60E9F2B140267A587BE8D14B1A0249C2B1DF
-003533FDA36B565ED493CD1A807E139F6C2CE7148B6FE62615731CDFF1EFD40A
-A79DCDDD7F4F4CA0D00DF277E7A38556B684A32AC4A8B6998EF6C1693F043E31
-374B86213BF7CAEE905D239D358FFCF91EF2F34DF7E0A1A16832A54640D42610
-8C77E6BDB82B862426F153B0C87170D31DA509ADAC29EE7A614EF359D584CA36
-787DA85840A14036378E25A53F907D10F7416D5334705DB9A111553FAF2EE20F
-9C3A0BFE2D3BE88C28899043C8293D012CD8E2752F30A883C2287D5AE64D00D7
-443218C7F45449B4C9B2BCEBCEEBAE0AC8934549F5E27BC01AED860754AB4962
-12C42C1E066CE0B5726331F64A1B6A738F4D79388076AF52C46CE481988B5341
-85A8CFC7F9ACB1F0647D33B762CCC7C34F91BF607940DFC09040775AFC3FAF6A
-41E89010D5700942F78D5F6E159CD13806F1F62C28EC0BD6F40E4E812B50F088
-A20C82231D47C911A9F4213077793947F6C8EA53BF2763F75779BBFA65A75E27
-791959727522E48FC28B9C649BB0AA1DFF96D7681CE5C8A42632EEC5CB7405FC
-167DAB24900FF3CDFA2FADEB8829283B73CBA2B1A95B483CD3E6F02C693AAFF9
-9C09D3D2DC196A6EAF720FDFE7C060FECB0392610B17EC0AE65C72D89D892694
-99CADF5E3F60F6571E29EBA897831B8AB7253557713BA2529465C615D848A1CB
-57633090AF2993CF37E19A97094B8686238056F22AAAC0CD81034661B9BFF73B
-18151C4DDCFCBA332283CB1970BF1830DB778E626626DE94E0A8004E5FD830CA
-93E4BC3607809BD56C75B558196999C92E7325ECDF73AA32B49C49C3C5FE4B95
-7F50AC40FD642A52CF12F3547ACAC754EB8F7164FE5624BEF7160B14258EDAD8
-E26A181219321F2AA523CFCA7B2E12878A5E242BB7BA5C9F22D0C5722766C564
-306F713ED39E883D2A7ED68A0D7C7EFD64EB39FC189A0C7FF8111660A188E19C
-DE642C8F2B0D284AC2B52405206A5E1A449319D94B3DFA20DBCBC522B5D67431
-E3A072463B59BF356F924434B5AEA53BD49298D25738AA79AB1E274F0A7E9330
-2982789B56EE39AEE8DF359C968C704C7D3B8FCB09FFC69587EEFA7E39DD5370
-FF513753E7518954525B083BFA191115CF310A98EF5CF0C2540265031BCC9694
-8C6A3F1A053753838516389F26ED5D57BE285F92938D59B0DBC6047C0439E127
-55CF071FE044451EC5C557F6CC29D8C5256EB48AFB23A0CCA88307B7E8EE1E45
-91B46854300FF369C6D84072D4D1625A0613CD330AB55B0B326554909D57C7DD
-73422A8588FAEA378B917785E75F25E4F4183A36AE15C7FC2C3E2C6E890B113E
-0B3FEACB2A3C5ED2F7E5BFF91E8E273869D4143A954E6A5C1012A2FC7839A878
-B86D878370EF71ED0A7555E8858C68B1468E130C1CE3A6199D93FAD963AC0877
-1981237BF431B598966143C8DC7F3B802729DF288A39EDD5B06F0F808741C6AC
-4D59EEDEE8655A6CB5FFFD911D8A942590E4BA2709403D0741C70B0FF9FBFA7C
-C3FD928B5B265DEE100172E5E917F273918C7941AB9071E1C3EC631AC555CE9F
-35F88068E213C0F9A4BA7D133755EFB674717B4FF225AA16BB0B7A930D7F4474
-F2C9C784CB7C8C0A2F2201B57541D25DB2C2C8EB11D172306F7F912149C2E61B
-40B0A570CF8A47F792860E4CDCBEB9A05B511E4903921CB80EAEB5A3B6567E14
-71229E7AE16210B7F307E1FEB739554261547BFF5B559B88CB5BDD64124817D1
-AAE0DEDA95D830BBCFE0AE34A90A70E42BE5E9A54D420B7F15D678425F1F7408
-B0A45ED88BBC61FFF2433D65AEBC21CC21A454F416913AF8B4272F7E20CAE1E6
-0AFB2D16F862DFB2861CCDFE73BA66BA95636004349740C2E9292EA3C326F077
-1A69BE963D955A35B72920D063127E3C8DB8655C089312F094231517A9198B70
-CEB0F01B22DD451966D72B2152947AE928D38F39C34EA1A6DCAA758EE660700E
-351A8E433028CD6ACD63B6745E0F501E72E3E3A001696B500F83B67E027E47C4
-36B251893D87A5B646C1BFCC94F2516C5A82CA364FCD3F128289F1DBBD0E1BD2
-8D641FBA92924ECDB132C1F89BA3650DAE6E68BAD856CDAC195A70FBB0D9ADD4
-BFE9194C5C2C525337AC29B8A55D56BB2BF90C004F1B5B3842DB2581E728BFE7
-4112D349EF2FD56CD145DC9CCE9F8364830E466E60F6F437EEE13DFC07D8009C
-ECF876BCF50BF9C60CC60544EBD3BC42EE61F0DB1ED1EB920CD367149B52B2FD
-353B4ADB2C18A087AA670E492BA5FAB513AFBE786F2A729D93F28D282A2A1945
-3A0D2565D395FB4A07E97F04E1A50AEA7EBCAB7D5DABA2603BDCA8FE770A4012
-114B736C19E1649153A74C74E7218A0A031EAAFD8420A712DEB1233036455045
-18F9902DB6390E82EF280BF3C104B4E25EDAD22880D74EE456D1E5225D683D5F
-13E8DA2C4D1A8A1F456D9A3887EB3D9ED71BBE682C7FA3AD06CE4F2C554DBB72
-71FCCF5A8D945387E9FA42BE9D774C44FD296270FB67B1004273051EFB74C2AC
-2E215CCEA6F18AADA4EE6B94915242B113F094ACC5D837566D5B49C51FA2012A
-792357BA0162EA6D04C7106B60E25EDC02CC4FDDC90FA314E4D9DD972536C486
-7A772B06B55C1545C98E90E8104FD7AA76B0DC12C7331859B6DFD01FF9022F05
-34FCF3DB906EDDF0E8
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 18 /grave put
-dup 19 /acute put
-dup 39 /quoteright put
-dup 45 /hyphen put
-dup 65 /A put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 74 /J put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB75348A88CC361FF06E984C86AF0EA429
-DAA5808CCE3583664AEFE0C59EDA04A147FB51227A5AB0C13942323E9B3733DD
-3EE7DF7F774DE5D0D0980DA8C0192983F1E3EF18481EAF1EFEDA0068BCBDB28A
-7FC7D9191EFFC574588DEC1E180341DC959F8EF56ED5B19F50AA82A4653649B7
-CDCA11A1FF27AFA7FF189A7E8A7C0E94AEEC901DDEB541604DEC0FE90FA0685A
-FDEADEC90DFCF25D074ECABBEF0F518FF620E5DC46EEFB4EFF37B0A862754A46
-567F057C58A40714D712EA5A6F783D9A1C7AECD26458D64C2C203CBD059208D6
-F0AC8240A745488259475394331C07AE954D0E9CA3C467D35F09441535A222F5
-57A2FF2E6A20548CA3C7598CCD31AFAA761AC507A0C0B4A25D660EFE5357807A
-77F869A500A973C94A94F447DCD06A6BD6CE911E361C39C67BDE63F8C9C8DA37
-EF3B38F974D988A76BDFDFE0AB54DA1A0ED775A0F7E567AEEBE683580D9ED9EA
-DBD427477C504FBDBB53FAAAD9CDEEC4F30529BFFE61593EC32F78BA5CB44620
-14889B2495D30F49AA78518FABA939E0C08F86A4A117A55B66ADF5E35E5C247C
-3FCF5311672DAC9438EB2A92AEF7D7D4DB8860F63748EE51C7A13082B3BD6FE1
-DC8600DA605E7F6E33421392AE906279B0A58DDFB8AFB3AFC8592B8299282AE9
-51A552F05503FC6A1B269DF1B246989B3B30A1B0223A63DFD1D98157466D4AC0
-385E4BA07A9E17F29BC10BA58BA9BA1974FD3EABCA1644E74824B87F4C41CA25
-CB10397710231F7FE686465E27FE510D839343D898D4064F292E8A5F4636102D
-47AB90B92FAFC17C1C1490700228F6E6B1BDEEF3977F38F1957FD88FA2A414AA
-85971BBB1161022A4A5AB2AA0E7AD5C3C5D5B1BAABA354F932E78031D291D5F7
-5E746CDC1EC49ED6114400F4724ECFF05FE0BED47CE6C9063B9672CE2B2D1687
-E0BF5FA55A6993EA65C08AE90C22E5315994E311EA22DC5B2B886C4663E74627
-4BA7D8FF798F2A9F6C0B4A107E56FD5F51995156CDD5B7961E9FA85FF829BC2A
-EDC874B4CAAAFB9658FF1D6A46076EF08D7F48069BA083D4B526B3A946B7A828
-CE1D3979F9DF0CC3EF0599B2DEE151323EFBE9A23D08ADC21F05A3ADAB8D99B0
-4FE04D7184BB27510A69DE354644A1DDD153304E35363E7137A0E139847054A5
-19E03D0F4D2E30540A80D6C709605AB5DB6F787DA05E2ADA1C19405B9CB4C390
-F61DB018F1E2B1968DB20BEB33337F7D68119A242232B81C261B270855BC7372
-D1C0A2E2A4952103E010019BE073E6CE7CAA6EE6F4C8FDB6C31D398F7A216ECD
-C4B9985F3745569FF9153B3F29A898B4DB75378F81635568A1CA7294093EDF40
-4870424C022BCB532815FDA87D4BC8FF55DEFAC6156AC74542D671FCC53F2BBD
-016DE21E23A541F10478FF7FC501755E6AB5E75A906DB456D94F3B82165BE809
-86A232C245E4BC91CBD3CCF7734E59273D0C921098076FF86AFA61352C0530DB
-712D639163B64AEFBEA8702482DD3A1C68D270934E1FD0A93966683B8EA39CFF
-DF4E52E1CEF2D2478EBE2D43B422EA37B6297F2FC0FA44979714D0F1917F714F
-17718377AEB042785E251116D23E2B36843F7FDD927698F08E817DA602B767BE
-0D27FFCB1159F6E259C59C71AAC0CE244564D3718F8553FFCF7661258A5F6013
-E6F07AF84201AE4E57AC2407EAB2C5CACBEBEF4D4A7B8863132353A4A0F94C1A
-3E549307E6D8FE43DA728C823849ACCE7E1736F19C87DB633D9B48B56C30161C
-D386D1519AF35646E6EAE0EC1DE6ABE921FBF7E7252C77B06F40FA2BBD5A720B
-17AFCB6F674E7CE9301431190FA12FCFB1FA4C3259C4DFF1CABB3EDA464A0634
-51F290717E98F0675A2C26EBA06E94AD0B246AE538E2DD68E64B9DD1E8E9DA61
-FA9FCE0EFAB00AA1DE16D3E2A3464C8F46AB87C0C6A74DB3737FEFE0B5AF55FD
-8FCEC6B70C740DF3AE3BF665D1E57F474F5A12DCD32066A071038B1451D11A6F
-EC1EAE7E4A1F10F72FCD8E471D96EACA18F182808AAD7C25432DDE2655FC7D29
-74F28DDEC27D7240E62CA2A7A88F515C6E142216ED761F626DCDAAD76B1C0AF1
-30A527EE40D3D840433865E2D188101955BCAC01733A87391E4522B80F8009D1
-8EB2C05BBC6CC22B482DD76D20502FD13C155B621CD30E236409269B69324E91
-1E3F8295EEE82B01C32F32377C18D1B70B96F992B6A46E1F5B3F12BFCCB5D247
-9D5A73222D74FFD9CA2CA7C15BA46779E479BB6A6BE5E43750F3B42E64DEAB1C
-6A38AA4A4AC2FE6B97675D788DA7D5192027BFAA13D89DC55AA922C9E42E376A
-098DB21A0E82BD6067703EC97ED86B294FD4F6C9DE10C0DCE761F4E18E9786A2
-A7800077B3A344C26FC7209C022A1BFEF360E9A27CE10025544BD94C1C4905D9
-B6D0CC716A86D320DEBA483C3FD51E0A8095404C2104391D81FC8B125953BA94
-C8A5C3B40073B375BEC7CE1D2BB7DADC337CA7D116D03B0B117254A513CA53FA
-72A1B4EAE0692F9E169E601994D5966FA064E6BA8A4D8DD30C899EF14A6DA8E8
-FD4855A7D2AD1D8195A886BC19137C96AED43B05319016C4DE523BEEEA9B4077
-9C107CE041AFBF02613053545CDDEC1F9945FC50A2A07796F16E052A1BA3CB9F
-789AB621DAB2C21AA85B902DED049BF8CC5246154A24BFC46CEB3DA1A43C1A8E
-2A5B17860D7DF7B321F4F3024CB85B3379CEA5C69A1404787761F5A6F2A04697
-06982999F31BFD938000423E3E3F0AC26002C23E57427FC45C2CAEC40683EA75
-8DA96381CC257788BDAB943AF8FF30286ABF3C409B3E2A83C174FDECEF2C4367
-ACCBF9EE597F8742433A1D119A03FAD64B98DA0711C4C0682CA0321529E39BBB
-D63F2E5DEAE7B99BE08FD3226745A61074D724A8021858A5A70B4EDA458E7094
-67F9BB5C34DC40621F7D4104D14F5FED04D0F6D83134861EE21AD7031A007311
-635C0B7FDE742F9DD1B6A26B7708E28B3B9E19D43B007F880408ECB2B4446E3A
-92F82C8711F6296779321B29B18AC1340C83F6305D9F443856AA9E44DC262CE4
-0F2945A36F897C23F97943D8709419E9B3759E0B93CDBB0B2E4EA97618B65971
-BDCB42F9102B4E3764F46A3EB04DA60FF459D9518EAAF4DEFC0717A500EDC105
-131F43F305F42AFA0A08E9F592441DAC459A4F73F71BC01CF4D14BBD40D93935
-920A7999EF8B20583EEBA5275385BFD4CA59EC1779B85D991400CF3456637F4E
-1536F85275A9E6AB094BB2686B2507453976FE1A763D9126148B9B07A9295AA1
-2DD1C66BA4BE7EB5A9CD7CC0452935CC1F2B0FAE0C287714EDEB91DD9D163079
-FA9A33D83BFD5EBE1486B663B46552B30E325F7AE29A698680183ADA02503A45
-D137E82A07F6EF8A50D7F42D703317E82DBDB8CE78E6FA3846E7C912C65A16AB
-9966F23F2A6FCA6DAE4D7D7F7E6D563339A12F792DFE2A40B8811F03C693F019
-1861AC5009CC2CAC44B2B80436EA7AF4D978AF680E6A3A5D040780B00818ACD2
-DB7EE433EBFD4A10CFCACBB77855095F4813E0513ECC3125154D2EAA232DF8B2
-192BAFBB1B01D2E1E0ED15BCFAA6DFB91A467FDC7DC116270F2CD577A5400F4B
-B7EC1A909BF545C08006A43C207BC000AF7B83B3729810C53B985B4C4B9451C7
-C890E6D5915C051204887E7BEC8E2BC3905B7E5F463F5301D5FDF632B8CC9621
-D968CF0319E7E77268E69FEE9A103BCDFBE55EC5A44234E56D5599BCB0318772
-ECC5D92C741C20A99A3C590FA9C3D1620E4536C09B0C1A9BA59E0BD8354BA528
-AD40AE2D1CD36D9D3F19EB7A1F580150CA33BBBFCADD80B8C272C914CB53ADA7
-9FDC2F631FE209ED66EAD5F60EFA2C601A1D77541DD2502D40413ABFA9077723
-2E47727DD893CDD06C3EBBBDDD756C1862A2276930B1D7D5B82E1CB8C4458BA1
-0D0F354E9D14AF9B057D5AE0B77AE33279864B421BE03871ED2C73F56C9A69EA
-13A59F801B11F96EF73D9F6215CB55C342B4AE97B4424C2618471DC353DB1313
-34033D188A6B2BC33F0B0D9BC4FB79EC818308422052EFCE93A2C562EFD672F6
-89B5E95149EC2C65EBF4D808C6FE6ADB138DECB4F7F16486BA3F2BC05BFF7F26
-760A67839A549AD77A7A720CA5B11C5364C5A8A62D6ADFC5B1B77964A0D2AC9C
-3885625881BEE7543D1236ECA08C8B92B9E17BC4D5E30D0EEE02CB5F6F4093E7
-9CBB3903467ED98BFABD1DE45B43E19D6347C9075C7773F6C8FA7B186F7A7E5C
-7BD3860B28924B3BC81DB91EF5989CC4B2B26EF07018AAD1F4CE17D71031950B
-CC8203068853E447CF698381E26CC2ABF1A386B732350B1FC4E4DBE614E77ED9
-400D05B7537527FBBAF718DCCA9567347F230E95D3B258FD0981D5AE92BD9B83
-35213AFA4138C67563E663EE9AA2B72D28B23695E3DDAA7E39E453EA6742DE3D
-9FFD0C682305BF6A36F4662310EE6150B4BCB100BA28FAAC1F55E8C3756DA10E
-853E05E4AAD4FCC81A7DDC4482468F77AEFAF8BE272F592EB3DB0A5C9DD52120
-DA9BE6B2BA372F17CB4DDED38D6E8D8BEFA599577CA823AC4781C223FCA87BB0
-0FF99898016DB038D229D43BC9A3F64599A2A240C3B58DC64FC116A86E27631C
-05DACB3C4138295DC970610D69C52DEBB042C2EA93FE08D21C8115A17C647A6D
-A88DB5A886BBA79AE1A45E98DA902020A0A64AEAE2AAC79B19776CDC888E2F85
-BFAE06CB039EEF2BEA74CCD806AEE550B94470748ACAA17B1F0E7B3D79473DA8
-8AE663BF3B2FC71E7F03A358D8E37039A4ACE134CF4A0ED32FF46CC4D1A33215
-A672ACE9877354620BDBC5B2A79A8E639B2D07157A8E3CA43FCA9B7F86C5C8B1
-43EF6E5234FBB4EE1FCD23F2840F6A1768079A6E1313F50B10481B77EEC59B92
-9EF42DD5A12D7AF44061896EAF60EEB7711C1948C18D5EA11363954D19CD29E2
-7CCA5314EBFCB646A4C0B1E8BBFA955E3B91406D0EF98F53443824EB2F2C5D10
-45FAB9E29123F2ED827FA3249A7C240E167525BC4626D47C51CB634D7717B1A3
-56DB656F4735204521604CF930A6CB448BC3F1700BFF7D320C530D3BB34D02F6
-7A2E904A7A46FC99DF9C837AD5DB234ED236A239BF55647230713CFAED457D95
-E698FE3A9C42DC36EA072EC140A9C7171BC0823A6ED93E33D1EC107302727CEC
-AB44F336DA0F6C5D6122B607FDF7740E196D9B728CCF35B5B473305086A45A6F
-E2BBAF4C75BF1EEF04C43A93495FEF8837B7F573C8109DA3681BFC8683B19BC9
-CCA9385651FE24991E5B01C81AB98CE4A66A77846FEAA4D43197DF0956417CFC
-D53C502B203104ADEA2A775ADA9C5675486E34796F186C3D7FDF3B6F1EFEAE9F
-360A7C8D5F8FB448A6A5056F9CB6DF5704798591363DF01C40A6095226FA722B
-702C1C69E9C9D10FD0414A5BC011AEB89654250C37BB8BFB82C2F838FBD3801E
-07324AD33B7B536E6FE7458E5EAB31290AB829D1191DD37990FA60E92B5E22A4
-38F15E93E6E0B886360B33A375B30BB12C28C8ABE9F3847DF4EE10823A365DDE
-32F07477151EE5C356954721D80099BC7EAA924F93D6BDB9595D17F23206A1A0
-262DFB5CC2B58197560DEC6DB19733A4A74E15EAE8AB221485035A2228282935
-6935B8F8A66FBC11426566C9E279226C0ADFA642C6C40E82F23B5F38CAF5814F
-98143883FC3F9E78DB773BFEC9025BE2838B3D8428DB9A6974BC72D08E4D4143
-E16BE626FE5A17DD6B860402FD4CBA6DCA90E9919F0B76AB1133EB77ECC4879F
-31235389348E18ACF5575B10D172AD707B85716F28D693C24386187F1AC8EFB6
-8BC7317DA6544AD70B265FDD5D831D093058C0EA45985D21BADD8B4C574D0890
-AC0A3A297E67E93608D725F7259EB25131B9035D78B34AD91E5D8554A680E585
-7E0A5F0D0429B7BB9A3F44F90670FDA666E9D95AA12C0248F8FEC2FD1C3809BB
-81119F5D000C5D36C0EC4CF6CA870663D0DDB3C183FACB174930885DC5C36318
-34B91CA7299EE48FEB56DD90344D1415F7B18B2CF1AAB6345501E07D614D4735
-A4179F41557155F426663D4F5E2924C1977C6322E8B70142C258D5EAB6394DBB
-EABD625FDDAB289B6B7B2BCE797FBC07B27A767F8FC1FA480702512BBED3630E
-274260E4EE572785D1BC388F3027CAA6117652D2E09B2E809C224EDCF42F4539
-0D87CB471DFDE571BAC8AFE090862DA27B1858B1CCE3CB19ABD06DFCAE985887
-ED3D8767752A4FB3D89277DC2E6244A21EEBB7D4A33312C652A456FB75C3F341
-E57A8B9D96D60D962F152C0CD1548962BBB2E2996BEBD3EEC9B493077FBC633F
-B30EA5CCC5B6587ED4751E48783C996C5CBEAC5FBD7B6E6CFFB056C316C23042
-5A14EB836B430342BA073C1345CC163F4DD6A328D483559379B0FD6161882E68
-83C1A757E542CC86688947AF910FCDC2D8E9B7A8BE4909988898451B395089E2
-E4EE0F156B4F41494D097259534F43BF558B9C37224900E62DA5211FBADCBD54
-F0D78045E8AB3A7FFD84C6F82F876B77BDA2614790316D030DECC31D2B53AAEF
-23551A3998E3BC7C5DC2E6156C8C3B2020A41A08A71873D23E90350B9E668CA4
-65169F9C2870E01DE0804D5542B6D9B67E44477F8DDEA36D778497535EDFE824
-E4073D48B1CB45F752CDB5CBFA4CB1B25A377A3F64269D8D03FB58510C90A9AD
-45A14A708066A0997628998DD01C7436FB4F4A53E15405CE8B52213ABE2805E8
-8AF014F2EE142D90E2702DC46E70C2777B528B8B39F68478BE86BE53640389F6
-E0D143C89A178E18A12D8837A6E6300E2808272EC8EDAF1ABBF025BCA7E6487D
-E0A3CF69ACFF5826E99FA50BE33B3BE6113BE1F964D56A5CF80CF51DC16ED1F3
-DE85BB09753A1F049A630AA850B0AD95820CF560F86EAC10AA77FA1A93137A2B
-97D94889274048A2BF9CC772E8F3B376D3A18A7B33DF1C3FD7EB44E3F5485F05
-E8C945D3883456457E0B139A210E554AE28917C66A60683C37CDB95573C376BF
-09F0F9E8F2FF1A74043061355A26BBA7F7FAD18D068FAD5EF3776C08AE89D257
-FCE5D123259789213BBB773D25B0A171177E3AB897D124F30CBE96089B5BFADB
-5D0E7835F90BDF11E669E896B0746DFD5B6DDDFE48CB73902B39D657154D49FE
-331A94EFB68005FE13FC0CF51E775C93DA95DDEB5D65CD912FDE2785E17D7156
-D2E5F8A9F1069A901EA2E666FBB4E69371EAD5B206D89DC64EBA14F74BEFC5C0
-AA3189FCACD8AABBC65811AABD4736B7102C6557552C874487078EAF2DC5223D
-2C85F315A25C733C5238B60693A9911B6822EAD45B8000B1635A4B878C3B88C9
-765EB7DCBFF9BCB76246AA6C974A617DF95810DBC0D5C56BE511BEEB08372222
-955C07DC4DE89D64DF203C65294683E3401442855DE6CE859725486969F875FD
-035A3036DDADBA6D2CC1C1CEF2072E34705416857EB04BD77027197C9BD804CA
-D4E76BC29B62182B9A71A7F7020222A62414348BA9BCCFB341BA9205F962497B
-972A1681BDFE446CCA7C27C6DCDC18886B80936A7927DD5E226C77CA7115A4D4
-533F973AE31AF3F35916F7F5A0C20201E5B3F0FF1BAF7EE2BABA1234A678A290
-806F2005FF02570D4AC19A0498EFCDEEA83FA0101D48AA9306AC72294A91FD90
-520A0B6B1168482BA912C73C758659A930963AF7CA39135597A70DA2E6E809A4
-96B5E30830626E7AB2E66EA0B99B99D9200A3DCADA848AC1D3687D11853EB0A5
-080142D1E079E01673BEF9CC2F7CEE0B5CDA2D340BD5166FF8A857A49C1714DF
-19B0B0493621E68686096E0DEF31DA0B1D3F54FA67BF219E8A4E21A64F3E9608
-E320E2F2CD50F29179C2DDDF7853B552E228711344F9086300204BF14881B596
-9FF6FD04DB6A689062D816EEFFBDFE58DDDDF91CAD961074570B991795565A80
-BC64909BD9B9CCC6A53DC2DDF557AB1CA36A859BD43F8BA0F0E1EBE7723DDC03
-D1AA08388A698616DF90F698FC268C2D33CDB889001B0DBE019A0B6868DD39C5
-A561501F4B59B65129423DDF5E291451A60EB9B91A7D1D84F9EC5A9E99040ECC
-101B315F829500709C69ADE04CB0F5E686352B9818C440A04D0EEE3617F1845C
-4C63AD4A648942114ECFA4675B58B0A39951B04F11DBEDF797FED12B0C414C23
-B2D0E17A8F89DABEE8AB94AC2E97F8433D86C10FB56E527A1B7187414AAE6001
-556567E9CCC61D95250AC723234221D787CD986525B1557676C5F0A2D155B7B7
-160D8D6ACC76E2AD2CF22043F127A5063EF272960B564CC7B5B4487C19C31CCC
-4E1EA55AFE87F701E25CBFFC84F4C7C2C9877A0E069AD4E7FCA96EB576368401
-843BFECEC961A5F63E2F26AFA1FCD55187E2F173514ED0113398158FDE82C8DD
-793DFA23B1556F99BC5492996C673306F406DA945961E7C6C1B0CE8DA9677998
-44882D0C88BF5CD1C6065D6EC2958441186A6230358EB99CC1C1FD96F9318D4E
-2FBACF83FE3DC8989A46C7E07E4534BA1A1AC4E62CA6CBA9746171CFA81AF392
-690E2A6A52218DE19FE5C08B9BEFD3D48B788F3D591F66B28949B9E3FF9B2A89
-D3F403DD89A2554B0660FF2F56D49C324395AE8B402CB3E1B81950C9C53C274E
-C49A4D074A82ED63E81241D793F30A39D15DD9A612D152BA842A5745B890C42E
-766E89D3802A46A82D62EFA630FE0F35DE67B65892F91BC466940ED15F589F88
-6990261FF0178CD7B2EEA1DD374BF42D43612AB4F15EB0988D5DFD58BE3EBCA5
-66179A068C1E7B0286F79918CF0034BAE713B7EC42A724E481C1A4BFD71BE8D7
-223C5F20ADA5CE211E005E49E4DE2B31D7BB2FF6CC9107E0AB8C70936D403007
-F61C5794BAC4B7F1C33CBBDCBC078B4716BF6246CFF30762D4319B7A8914E08C
-28C05B410DD5E35B2C9F881F90B1D7889D205309D8B81F918665094A605DDF2B
-E96D451984EAB8C88552E81CCD17DE242ADE18E1A170CFDD0A1D67434393C555
-BFC6F0A26866BE0D581495710B1213C1E5B218A2670E6030A2E0A52A9E67A766
-5C9F62A7C3020C39A4BFD38B81844AFFBF9AF2E8E62359541AD724E116DAEECA
-3A6B0F6BB1BEE6B12D35EABF7D2AB2204A6C7A91EB8D0260889B4A6F8B55A861
-7D56C694A7D7BEC30CC8C4EFA55AB8EEF385B55BBA251BA8F24C0E50909DC7A0
-4A77CBA1AB4D5EE517418B0B8CD2EDD5646012D4791A214F8990AC55B522B52C
-36FD980F2FFE86B34D2AE3D59CC45C5ED4E7EDE8F13DA2F88F9BCC3438422BE7
-4E9909B265CAE15916F77ECD3BE1649B67F4C7F4C6A636022B5809AC59C9CE22
-F4BA7906E2ACDF5820715B05715A6700ABB935D5A8811E0E5639EAABA27685B3
-7D6AFA549A5E8B2F90D0C1DF2500D604A78512EE93B28FF939CE642BE022720A
-8DDB14073B0C005E8923A2D140515E1FA724F40B35744B9A1760C1C786DF1275
-86E66ECA994F5213A39151954A648F8D506D18F14839838055608E56CBF5F36F
-C676EF076F71C8B91793933B956C4615125665F673148C0CB32161D50FCC8219
-620CADD9CF5344A9FBB4B273D481A2FAE8203AD727315D72C6939D05CCBB4C7D
-D558617CDA26AF49CFBE57A51E04D9CE2791F7CA93B741569FA2B3A2D398088A
-83A228941402CF0874033764CE0521C719F73AED9C04B24141A7EEE45D168738
-E0BF2219D4B54D4320777C31916AF66605DCBA057D63676B02FE31CF4F7C8854
-2F96FD2C3E64CB9E2066A307F1B453A02E49EAD0F61C3D5C7FFB3162C4758047
-05175EE543ED6AD163EFD3FC47FD64941006A57F614AAA83B6EF502DC0F20868
-C3A512622347C7F990E1ABD98252413323BCAB1110AA3EE6FEA3FD5B43349D29
-F8EB69D1DF9DC510C20D343BF8A4309CBD0683A9EBE5DF9ED94C72A607BB4F3E
-4D59C8163ED08AC6132ED78C0C4664D8604AC64B721957D678F6DD65F96CEF28
-26B760421B3410A975B4A6013C049BE5CC57D308D2E08986D923E17995010D15
-FC4878D48E1CFB9597B0A1571068371D5D90094ED993505E299DF28579E639D9
-CA1A29E00EC9570F7A90104F947F9264B61CBB9474E733851E8C4901E81A82DB
-4BB1CEEAFB69C7C316656048EC4BB301DB70422F32D22852BFEC9EDADED06684
-C53A45206E50F4C41231CA3A40B72FD34DE87031384B139F4BB3795DF3D7B3B1
-C7054ABFF5355DFB450E04C44BF540B1611ED54AAB6CAECA18BB041239DDC582
-09B79CFDCE1E7628EB1F0E9F5B191937DE46DAB8A39E55E9677CE4B9A74DF5CA
-5F8697405C701DC49DEF7CBC9FD4FB8567CEBD0B50CA381DDEE6775922049F99
-B830418E4F58B4B14B675903DDE0F8B471733E99A6D3CE59D8AE86948CC2F6AF
-7F5EF218FC6EE8FF566EF68EE678CD23161D3BA274C5A4361A1F4D2A6F187FD5
-617757F57762C994911E73ED175C7861FCC3E9A90435B06617C3E20E6C0CEFA3
-26B6E0657C517DEE65F6E2623FCD635C9E2115AAC1F7AE4855950C8F304657C2
-9A91D78735DD8B3E186645C95FDD54BA42CDC50CA38F2E43A713F8F8667C971E
-314626DC049B35A4D0413693743758DB3DA78906E860B9C73E4AE913BB4C106C
-2BCEE6A2E4EF3D64F301B0955A7AB3F46E5208F6729ABD8AD606B1D6BD995E15
-620C9ABC897FF77FD40823CA164A4BC57E92AF62711479C15499CE779BF19C53
-B76F3CA8883B24B065145B1B085BC41D54EFF591039FFC95DF40B7E5D2006BF8
-3769D9CD5A7298F927041C782FFE6E1D498F2DCAE069808BBD6297A8D28C1D5C
-283F3B974F43B3E42BBFDDCBAE85CCA7DD1B71F0E2A7EAA9D6CE1ED5371DFAB8
-4463D3CA11C92C78EEC2F7DAF668E3434EBE32F468E00BB571DEF193BEE7BDBB
-3998205296F7FD37FB86455D98B5934C84D6DF1CD4B340A0F4A4D3DD62CE6FE7
-F49B761E712A389CEF6845902E915E1290556B20FC26503973CB26AD670EA9CA
-3DC725E2614BF32ED9F89A20645B3A98F3B1731229AF580F27B574D55929DC38
-C2CAC9EAC582FA2E6D77E566EDD090A737304CEAC48A170CA7D6A167079F4B0A
-CB70D93C9F2E10D437D604C7F4384CAD4C0B5C73A5863F73BFA8DAF7EE93A88A
-1E213163053617F8F1E940956606F23BC8E3811F6D2494C435D8343F0BD340D8
-09503585309C01A20EDD20FFFC0DC44172444C3F449213D5D91CC5BE01647BA9
-BB43344F6A5B51E315DF81A2C5F15B0B9A9140921966FD2798839BC0C2B435F1
-9F53927A5CAD86D0ED5882C999B844B800F541E4D121D424F3F82918E32A0E42
-E7AD6D0D9F6B36DF04CB46
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 14 /ffi put
-dup 16 /dotlessi put
-dup 18 /grave put
-dup 19 /acute put
-dup 27 /oe put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 57 /nine put
-dup 58 /colon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 74 /J put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 88 /X put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
-044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
-A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
-23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
-19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
-1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
-8BF2773F290801174DF1E106976E76D30DD26B2EAE14AEB46D9A6D5AE5DF24A8
-B1E70BF48388EB19A7C8B29C32060E48BD7F76511BDBCE65E842AC959C5046A1
-6E86BE1D71E78FA3D60420BDDE4B7AB23451F5A87CE169C24F59690D2FD61D9C
-81E29D0D3038876B09C9D5EF38006216080B644EEF27E9180DD485331A7F1C68
-2C324524CF7004B8EC76AB44560990C477AD1D11313545C7FEF3229FD8E1FB81
-C0CB794C23C0492563BF15952C1731D2613402854B0F0F69167C361E716AD247
-9A1599DB7CC277C2B15C4A8E7BC15BBF09B9FEC12962ACA3A21689E52D2F5D86
-14E14A8BA91C2502D8FBC950C4E9EE94406CC23EEF8656A3A19D820BA6A0CBD2
-04862E9B4F5C07062AD949972F8D5EF41C6B2386F26387FB0AD1D38345FCBD22
-D893B36A46C1BF3A2E79ED3864918BE7E859942A81D782517C61BCB8B71C22E3
-C83771B414724B5F477B2E7D2A4A3B31A7ED7D5CBEE58DC728E3912E8BF5D43E
-426CB9B73743CC9EC1C01E4D16B76D7D9D03EAB503168D6E8ECCE7C8264C16FA
-1CDDEE973D998C8D288BBB744E9A173CD45A9137FBC7428BEC36B98BA93A795A
-5B0363C503A49AE6FC8B77A7552E9486FD3885A69DD3DEEF00BA80712ED3AC18
-9C2AFD2ED50D78082BDB7EF77A828569EBD177ED828131936E925A60892F8972
-4216E46BEBC69A036BC915EAFBDDE504597BEE45A71B1F3EF8A725E9F8E12724
-7DAAD1B0F6F4CAFD0F9B7D6331490DE84B995192A4A74052D9D77FB87863251A
-E735E9146686F8B94AFC8E844D93FE36C9B2A7F9759AAEB94C00C174FE87A68B
-AF6304021C16F70D6DE0AC4D41B061493F1541E9660B85CC9D144BF7CC74C600
-BC3B4852D3EF21C96272DB7951CD7C99E089A12B950A64ACCD27E2A60CFFCA6C
-9A1C2FE056038CFFE667E4ED31A009DCC1897A82B113351866778927659DE5F0
-34A5A0C423EC636B8AA500F111EE3582B44E84422C745EFDF79A5567CD08FD30
-A7C3D4F4FDAA6C0443ECD80C37A6B8C79DC8777BEE2A29D9A8F886C32D9C1A27
-E36A1E1679D9397499222A00057B19DA30FA8D467AF6E39C3B144D465EBDE9D2
-A29B9D1004347E6B3ADB1988705E880F893733C09C3872092D4F57ABD8799AE3
-D93B799874C6C244E29F265101E561DA0E1A55CCA8FE7CCF33853BC63DA0BB30
-7D10C87A53F259CC17B04B24702C7011352ED6708BA178E3EFD64B9771EBBF29
-858F659D242316B0D8235FCFD5753482C30273258D25D76795C043962D6277FC
-5F11266D677AEB3FEF1C78CFCE463D8F5754DEF529F858FB63BB189AF6AC5DFD
-8CDA9EA75BCE010CC6442F7C3A2A4E82445C09F945099242F9150BF0FF432F5E
-0FBA3531493740A37ACFD827D615B51E8B31C2D04C1BADF631BCD0D88C69C3ED
-522FADE93F486BFCA28E7784C4F18D5C0810B61F1623EFC75A01A2D4CC5A6EEE
-4F1833AE27D66790747A55B544443A5A4F760D4D32658226B02AB823B50F0C27
-5AB96B1EBAB4BD292FB398E68E347D08BF931684A4B040F4080F6029ECCFD3E4
-1634F11963FB3696D7CE5BD792719D225DAD34C0FEFD258005B6D17E7AB2A3F1
-2CE99485B7EA798A0A4C82F4C62682E8DD71A8AE2DC06215E2FCAE9FCD0299ED
-71D9E2076938618EB24DDD70ABBEFE881F5C7E53A35F53E14D3A0A384F5C1887
-F3271B35DF22D585A6DBC6FD9EC887FED3FEE171B9D26D7A6D5F2D2E95B614D0
-A3A183FD19976EE569CA71BB04F0EE0B4004DD920F0E06E5EEFD7C534DC26F93
-5D089A83940C5CA041311B0C260BBDC4E507FB1EAE6E6611D92368581EEC40C6
-25456404194F3B39CCBC7B598690A63160D48E65DCEB2DBCC71838A43FE3E706
-866189E14D38E1F3F8665FD22DBA0C6632C39FE499645BEB569C27A55656EC16
-343CF42D90F6075FFCECE177E5D8AAA1AEBE69C54A5E6EE9FD63D163AB088835
-07C41D1B87E3A69D94AC3EA01203A90869FB78181265CD6FEFF5104A715B304F
-17BB57519044AF0ED113C35ED50EC5D1DDC9F64C49C54F5BE09DB5A55A15C2B8
-530CCDA044B3348279ACE2DB78B933F785D630DC5A50B5FD8B59F66CDCD5F144
-57E006AAD9C8E46F8449FE10A4FAD67399FEAD2BF4C84786999A0A202E6DE102
-4DE5A1C1AA193CCE7DDED11E061448729C2DFD77779D6137B8F16CBA1F542CAB
-DEF8D0F43E978C091F81C3E1880760E0DF6A803AD22FB18FAC19FFFCA27545C1
-A95CE57F49DC14C45042D668F486AFB17D2BC068ED6DEE387D8C1D79F6B604E1
-6B93DFFB4F740FBB246A77A20B259E0CAD2A041E49F5E8B7621BD7949C639A83
-2E22360FF4568EED8D7E5878F0ECEAD16D0C0FCEF5C60182067F65E780A85C8D
-13024A83741CEF3A0A5C7EC9AF17CC3B6A7E8E9F5CE1D9030D2B8A149870F5AE
-A6F8837E098623F4DEAFC72ABA66C2A8C451850FC4A445F7F9A5180F3A507B76
-1864229D203C2BC502FF4FAA942280C7A41AB3DCD6D6F17BC8BEE1B2778A3EDB
-7B774D000264DCE3CB4C0578637E1E5A73AFA25A514757B1E78A25B53F3A0B72
-F1C46520887103EFEEA0C8B74E03E0B2ADCF05060649B9C4AC1A38584D99482F
-3829548F3E8F8C84ABFF1FEBE6724E2B993B663B2611FDB5CEA8DB995C4841F2
-4370304BEA5FF2C7E1924DFE092F0962E2C21699BB0743B12714E9224F9AA72F
-EBB381ABCF5FCCEB0ECBFE24CFE859CE16A37A97843153B282E9EC4A7981512E
-9F6297E022C86BB50AB022EABFB2EDACB1768A07A6D6F93A37184AFAF9895B42
-F57FBB2BC89CD2CE89401AE756BEF39C9EABF986F68228A1FA92397B2AD65A9B
-4A9620866FB7935F2AFB353AAC7BD2212F03BF3CD7A675B97FD8F2E76D9AD388
-77401035D70C39FEA2D06096EC8B91B7105EB70683D6F086B4FF1B9CDD2B9ACF
-A69E0A056845E0634240DC2EAC13C086461954A90713F71FAA11F764137B9D20
-EA17D85B0B8690FB5DB9ED6DE8A59B857120401A43FF7C681B196DC34FE6DF80
-ADFF9F8044B5A73A46FD3730BDA083410904202ACFAF9B7AC9D6E1FEA68642DC
-89A8C69B8007693EA58059139C89D82376838FF3666D715F119DCCE6125BC239
-132B8F8B1910987E0431B226C86A3E75184DEF8F81D6AC4C6965CB7F609F24BB
-ACD268891727A67844B3DA9E65040DD4E6CE9EBEE720C70D419046A066A8A241
-FC17DD94FD4971A21D4B1ED809AE4E5BDF0CD2FD2C8D0E2B09162CB222B1A8F7
-E3384E2CB9B8ACD63763B11EE9FC647D74CD76F27D396285C319EC7BB85B7771
-E9984F7ABF4C7F84D1D3C458468BC86810370B8160C19EF5CECDD8B37A374ACB
-8C933C06270F2BCFCC8BC87246B7B0D83A85ECE239A435E7A46AC9E3A938A558
-603E8183620B7AED5B367F153F77F2741C21DE1C931FBB736D558191F7708DC7
-F5B5BC9291E9E283B6239E3D83B7B880DB26BD8375CD85FBB6C68800F56E65DB
-4E5D7E3DB87086C516188127FA6C9D9C874FD38DC3595CB55FFCF7A21D21E09A
-C0B8BBDDBD0412CB3C74FE85135E92AD2A74D7AFE61081BE8417446ECBB23574
-47F6A7F98BB95FED5ED34CBB36FA755A9BBE6EA87413A7F15CD0AB74E1C28731
-286FB50A23E012E26CA483CEE2835968CC6CAF6586C854E8F7786890763ABE99
-2822C1EE910AE51B0A69F39899406E993766034ABEDB8D955282B84D7194E204
-6410401868B4391890655E0B68108F8A714F41D9B0DA6CAF880E63EB84164E36
-78EAE9E37185D70D3FE3EF8600E351D9D55598327FB15BC01E49689147D5D0B8
-DF3B15523463C24329D251AB7F8B1322C6A426AFC978AA27FD1C4C2C3C0432FD
-173ED14F342C657F0A9165D09B33CB22BF9B10D7AD6FF075E0A7D00575CA6ACA
-4FC24DD249B472B0F7D812F37CD3311C63FF0ED922C287EBE368AAFC6289ECE6
-E52A0F23CC722EA14E492E475D9EAD2897BE707A3213F6442AE3974A33C69A1B
-DF8578075D47C61424B72E873752B6DB765A534007417560C8690CA7126748D5
-024FB3E9132E26267F4BEFE045B0A50265C3A6ADC2D9AC8A36C58E04C7257CA7
-82B3025A1D7D69B7833208BCC30B47F7B9DB1C15F8AFDCCC69CB42949530E38E
-8B98A151AA6BEAB2C9380560BDC236E660B9DD4B2C1A486E0E0D54039C9B7E99
-7EFF71AC4E07A863D36A09374AA63B12B671F334C32A0099EFEB2DE50697F5E4
-C2FB06A421D633CB7531826DE3FC00D9C051992C005A45B9EB4F0003EE294875
-B6EC2143C49D07E51AC0BF62CDCD56A94445116BBC872C61DE454596B0E23263
-4294F72B7AC189A3F6C9F1B726A8F422F4114D8835019867791531ED34767605
-305DB7CD7ABE8290DCBDF9C219F9EB6EF7EFECFAC3FF3B5DDA13B91D0B3CEE3E
-FE1E85E6028542067D149F727BE995B1028D451D8DF9BA109F5A01887DF4F0AE
-B786B4CB6F37AA98884083D055051D9371638591C3AC62BCCC474326986A21D0
-711D1642D457A30E49038645E6BF5ACB3B46D0A0E60FF2BCA7088ACE271E7376
-E2CC365A3180DA33977DBC15FB5C0AEEE6877ED6020267F65EFCA736EC2D6E6E
-7C57BEF4DEF28B5FCD8A33F5E634F421297006149536ADF669F9FAE0465697CE
-3B9B67A0651D21794FFFD966FD833BDE89DBFAB72465DFCDAC76038AB62E6599
-7310F1492CC4E3136AB7A06E6130690FAF1168EDB7123DABFC8180E7ACB21D1E
-A68AB0CC8765F61E087C11272DD62B1181530A819FCC15AA8ADB82E7B60C7F9E
-5D3C7EF78A61A0BBA9FE436211C4273976B53297ADA19E6B34E185F4E24C4090
-71AE1F9515C3D032CCD29EC1411780D4C90AEB08C67BCE1DCC6D45A6505ADA9A
-68EB5CB00173B5A6CF5B45856560798A9C6EDC1F43064FD6C54FECC27333B588
-9A35E1FEF53933AED516921E768FCE1C25DF66F45CC3854C9D82D4AAAAE9F1FC
-D5A0684596C00E4B48F40FD246CB91DA53A99E96BF7D72BE7E8A1F80777449D1
-2AF02ECB23EC42ACB06EF6E3F16FDECB75101CFE4C1C7EE92E942F4C6602A98E
-BC4FCB57DBB6E5F7DA3BC5501F371B6014187833547EB0D0C57AC9AAA7E27355
-CD3525C516D5E279E509BA54726DD9A3F7176552F808F6D3E73A484872E3135A
-BF56934C6AEC8008CD97EF53893871F0F8647677F33D586BF675D723A96BD6B0
-A0EFB8C5D93C9EF29509BE2398BFF3094F639E18CF7D27DA441DB5664D6B5E60
-BE9FADD4FAC3914B88871758CBCCBB38E8C4E72A4B53744A22D9894BCABB0144
-667F9E22DBAAD7934394469626CCD133AC2800882449FE082BDE41CDCDD4AC44
-7E20F083020EB46E59D9DBC744A4C7C11D5286C640DF888BE17A15E11C603435
-247B8D3892A888D88AEC22776E94861B98277FAC0F147CB0DC13CC7ED2E92C43
-CF845A58FEB59A570DA559C2A6084B1A44E2E6AE6BBA8A23512CB6AEBFA8A8A4
-5E9A5DE1BA9F175B77138469A90503D61DB62C2EBFB3B3E2D6522FF4F28B371D
-9E4A18C6195F3EC4FBFE0C9C1F1FF37FF0E1F8FC58EB7A58DBBEC681973EF716
-44ACB1C9DE4D2E82548A149E3D829DD3D5652F8A2AFD10A75DF0EB3FE4187063
-C88C7CFC0B3456AE1DBFF4D448FE2CBD205EEE3B727C76D2C7DED8926CCC1D40
-B566DF075326821926D92FF7B9F31B63F4DBE1A59B246E11FD06F0D2CA106895
-89F3259D6A9CC4611425ED3F494A3314E9A8FEDB74681B7F8E50FC2E04826A59
-9D1F6C6ECADF0B237872BE71F13D001E56CDE77D2DC8AEDD4471F56CFA9BC03B
-00B943B3C5D65B9F2FB053AC9A8930F46702B466C7D30AA7602FE1646D7EB045
-4CE04C8C9A68E9209812CAC5274DA6B5BA9431773AFE05B16AD6F07598337E93
-ED5B324AB15FC9BC52357B16A988C2D1447500534EB8A44CF6A03EB9CB247239
-A5C942951721E762A014D340858BDC57D1EAC94CB32881740C23995BFA3D91CC
-03CC1DD258A1097A29B0D0DD534D38B4BA0FB7B364BB9CDEE55569833B8900B1
-15F5B6B08FBD59C9DA5FC3E6C6CB7EA0486DB1EAF8C10177881AF188AE360C0F
-84F439766F7334A1F71F43FFEE23D0D7A545A426A95402D4FAD95354C6F79E9C
-688756C872C539E3FD53D92F12FAAC12569BAE2D75741D8FE2BAE684C61C0465
-48EA4A909FFE97239007815CC1976424C06A9D0CCA6CEE35574506604DD41A05
-3D84872C8F4D6C8653F2E3C1F90D66896EF1EDBBB78FF3FE86F92829BBC6FAA1
-6E327EBA28D0C623EF62928696D810CBFA72E12BA47AF369301489C4D7D70173
-4A71D089B71577E5338C3BCF637A1E262B187152CB5BA800E4B135690FAAF1AE
-E9464FCCEB38B1FDDCDE15060F51881EED476CD29FC0348A14EB5C48CED2D412
-B1F332B6BFE818D276C4D86E879B7B3B24FC3BA11FC22A44648B84DD304FA21C
-5A8A4CF56D1A4676A2C6C053E136A186D358DF383B9683234BA3CE3B4F2DFD58
-E78EA633572C9F03959E2B43BFA210E500B7178C23DC1E1FE9C10A693A79A29D
-E05DB8FDB7ADE08F2CE99E7B7A5A22C5EBA78D061ADC32122622B618AD22002F
-A04CC36F7D4AAAAFED1EC490CB1772D7B10E2E67A51FA830584DBE97BC0F2E20
-986B18B80DAEBEF08F5D145D8AC82AFBD8AEA7543E2FFC7623BF96D0AB99E1B5
-95245616F416A23D13B28361AB00753BA62C0609FC8FAEF12A4F5ADF11F58CE0
-C13CB24D3FB26E2D1DFF42E41BEDB3F0AB6F6970A76AB635B962C6B91D062D66
-15B1376E0E327EB4AB469A0663C86BED1C24607FE4CE5D6E09D6214B15628CB3
-BDE6A6BDF80206A25A5B07D1B55116C8858CD6E06AB272FA5104A3D852F04B2F
-D1A57F428859533DE8E5B7D61E53ECC5B85A807A680280A393CE9AF335A7BD0A
-C0568444439B3A0558D5F94FFF4DF4644F8B1FC6397D7F8A656A61394B631AF2
-77D43C8D06CB9CB020802578A1BF512353E632648FEA9400DD75E6803248D748
-7C84DE95977E95512723219029C03964441B2B96256A5B2B386A034A2D2B6586
-F0B73A5049FD96D5A54DA035F72FCE3F722584AF90452DD3B57DF93978A29FAE
-07CCE8872FD1C1F6B60886713FAC54D7493DC4391773C6B4F93F4AB4AFAD28FB
-2798AB8258448819FE0F3214C28227E080C7379F3B1F307B726EEAD0324790BA
-EE5A942DDE3E672DDCE377E0CC813A49E59465A91890E4CC6263A346B491A824
-C0355F1C2CFDB4724CABA263DA2DF1D9CD67779BA725C0FE7EFA2962541AC1AD
-CF100A8C0DBA44D54996387A7003DF1E72C32085A6F5EFC231EE1197F1F585EF
-F06BF997B2E11A2024F5628BE445B7F422697F27E267C8ED1CAB42F65BC88B7E
-6ED0C8D72C445691FBBC02D15455E9905C54B90646D3C2D3B741EBE943E31CCF
-63315D8FD762DDA3362C8CB30406E38FB38144E026E353C36B0459C65E66B79C
-AB289755A9BB7588E4C30ED78AA5EDAEEF32A81D040A60BB612E75FE23DDCBB5
-CD7F63FB545A0DBE2C9284CF11C34CC05C0291CDD3B94F2313A209A6E9778194
-7D20D65D69CCA1291694143193BF1D9E54FE17C49AAF74B94A321F2B33B3D38E
-DC8B6C10AF802C7950FFF1279728BA0E65EAABE0590EC9A41C68416A4450CEC5
-344E7C920E35BD047E87B27B019BD08550083D9ADFD3692FBFA17CDE56F7383B
-BC8FA281C6B5BDBF7F8515E60C4849E568335D06BF31025BD27D5A0747C85424
-3FFABCD15B690BD43FFAF11BF4ED7DACD462F36D50CE750399EA7AF7EB833D35
-0849EBA735755A0580DAE1FA3B8266FD53E313A9174CB4A1946013F812F63EAA
-980F4CF357F8BEAB360CE726E19D0EA211E21B7579453156E339AD3D2C251038
-57621F427D0B859BC44E2803256C5B5234DC3DB6D49DCA330AB7D71B23F05E2C
-BA6232C747B2654974E5C1A880E406DE54B95253AB8D7D2797C528C72FE124DD
-C5AABEB7E4C590C37D87D3DE9B1A0AF2B0E6305020295273E491C980CE55126E
-EC0A95B374A7308FDC9512CE9FE37C3774958EC2FDF9D77C21164FB19ED8D8C4
-B059093B6117B84502447975C4FFEF6B807EAA1252B84CFDFA006D97DE63960C
-4C3C08FF13F4B2D89AA214B170FCCFE509859C9288FF5802DA62D635AD28D72B
-2ED94065B7DBCC04677BADD74AF75CE546FB6CD31F44D7F4CC551571FF7B8A57
-873199143E332CCFBE78155F8481C6F13F973D611178766E1AFBC062C948327E
-7A7C7BBF4344960610D80EB280C58766E57928A35530F1401799A1FC18B09EEE
-24F2D584C779509D9B0A8566902158F8F0B9938951479277BE50C213E84D5DED
-FDB0FE395C41B51E3138F21BA90CFD8E68CD5364DF8FE270544D9650971689A4
-85419DDB9137CB3C1E39EBECEBE48F72EF1FD9E234CF31A9D9A20DACD5BAD570
-951EEDFF24ECA8A2D8ABCE3AED7DFA164DB03E964C964EEB02F699ACFF7DE100
-6287DA70A8D7A0E132AD534B693AC4E72F4845582A1A62FEBA4932F491A07C74
-63DD166FB3FE239B5A960DEB87EE0A2A9D542B6C1CD6F577FD573C1774A726FB
-FCF35A4A9A85F515D07454F43DB197EF8EBDC99BE2284324926A2481C770CEFE
-9408DACC976B24C46997B43F486A85FE5858A45D4C0764EE421021F5894586AF
-F04F827A024C043AD3662399D7B798972767E4300BE2018E948C6F7BE1F584A8
-30766A63B84F26CB7C1C1DFCBA6CD67654D7321DDC18C2DBFE9775E1E42A7C74
-6062387972E2C516D5C149FB94AE548CB6422B6D7ED1D68E5A972C37B974A65C
-18775FD907ED6B4F4CF83368785AA5E9F7BFFEC94C51A6754589B16DD61987D7
-C571AF11E56B7DB027F10A46110DDA458455B97CDD391E06D17D886E316401CD
-62D8E386EB0237426546FD64979566480D822D9180EDBF1FBDC1144E85ECA3C1
-954C6F95C78FC9CC567FE82FE08809C5A566D34F6DB51A83C998BCE23BA856E5
-38ABB64E22D8DC48F1E1C37C9AAE9271579E42C8B271D8B70C0600B2E660917A
-740A24C5CFFF44F5E750162F365EBD2A29C0AE993CEA7FDFDD78AA39ED3C965B
-B041691A4A57EB41622C8F2982C3C17D7FA9DFFBFCD296CF936BDB6E2904510C
-908FF6195971455E12298F861BDBD2ECE6D5D47E008CDA769ED08800B7E47CFB
-1F0767B2BDE7D437AA6938C3FA18C07EED739AD2A2EA28B4E597DD9F2C1EAD48
-7CC0661ABFCDE974A717145628406973EC6459F83335E0852982F390A0139495
-55599C104EF0F1339D25984A348982957B9267D81C446B5E09E56C70429AB895
-D0BF1A2734C0899D473418AA47D60E778980B69300B6DFF51A26FED4AA00D148
-37AC24F509CC5FACD0EAE0572E7CED539823FC1599FA6AD0FA7FAB6B0C4B1B94
-B10632EAAD840E7CEF7A35545AB6DB81F04959EE4A1DFD2996B47CF193139BB2
-C1CB75B8BD817256C67B7B8B8D6F41B42A385A2E660C5A41EC479158730C98AC
-EAC2E410226D59A948D219556CF98B755066BFF040E6A6D2286174CD87C116C9
-646F1CAF525C4392874EAD4DF0415E9B4638E6EC126F2D856447B142269FA169
-5D7C4222C422FC4728C7A05F88D0EAE70150B49731CCE7A85A81557567DC0FDC
-187D0E87739CB93AA581C3AD024ECD6E12BC2A3344665F7E596DFDE6FFFF04F1
-58CB836544FC7495A8DBC8BBBD3EA02E1A1A14D22698E9BB1AB17D43F1E33642
-5FF511C6C8A84814619C482AC70F5262B4297ADC53FEA762E58D1BF7E3515A25
-1C0316A26FA9141FB4907454E619A4D3B89E7490CF91E05C42C22CF7DAA45103
-885A3656C5C1170886F789A7237A3FF0981DB0512244A81843C755D3E81D0C31
-C79E914FD17226C7A7CB98DD5B899927FA012141DF2ACA0F5CFA9C4038CE5493
-F533DCB65E6A49AB04181566D30DA4CFD9A1DD854530BEC561A439F6B1354B66
-67CCFF1644E172CA43D6349D90A0979579B0D3DB32D9A08C0A919456922F4BFC
-CD0A493136014F530B9D8582A1EE24B0906C4D2287E897B32DD9D510009691D4
-E93A68CDA75DE51DFC4EB8BD55045E7583C91178DEE65AFD00A114A09F43A16C
-5901094FFA27F00246842E76BA2B33163172514346F4520733F0F343358DCF68
-29B5A3820C637FC639A028C80F961C302F527A2A00A5DAEFEF204832EF6C1E70
-2550F1EC5B5AF3A05826FE50656922A7AF604FB997BE8C622F0671A58AA1E698
-6DBBFF24C774D5BCC98DD2436105AE4DA658EC3AA377F905D54627D41EEAD912
-FD7E28A719B09A4BE9DBD75C065131186E1D64FBCAA4C8B70DCF6C4DB22D2EB2
-09A392658C3A23AF99A2DBB4A623E958E0F597697215A048F278241D497CC448
-F5193459E1AA66309AD7CA0897F6909037016BC3976E24443D09AA9511AF9B7E
-66BA33028C53EDB2003C11720DA394BBCA6318C13E1C11F10B7A9A52AF7A05D0
-D11844405EE6F1216FABEF4DE0845759864676DEDD8CDD81A08EFE4B8267675D
-4B971016C305D7AD7E2C2CB15E81AD0709F4D57BB534331627459156A9E79FE0
-E51169F4B0D977CDBC81139C18DC709AFCFF255BB05AAAEA7D539CF0E9E2B60F
-10E0C96116E566840FC99DB00CF7EEAE0577371861809784F5E810E5B4501383
-F4B04E3F92956DDDEA43FF563DF653899729A52A4E7133D2EB55FDE74C72745B
-667DA8CF4DDE4E15E0540A31C08D00B8F5F711330C289C5E741AB6D72313272B
-3053B23B3F78ABB23B8F82E81179A648E8676BDE7041D9EFEB6B2D4B1C5B851A
-A08F9BAEE095D2CB1992F8C9667688FB76489B60C4D3C94927779357E51DE5B8
-E0293CF92AFB6EDDD744A5EFEDC08CB52F3F11DBFDDA95A16857601D15F44A4B
-12A60E1681376ED56FBB021C6C6ABFAA9274AF78FA6FA156434E5B8F59573591
-0D03406B63704816DEB1CB7BD286330530E20E9DEE564244243CE1C35B86C63E
-C210C4591A159C27403196AACB5FAB1DAF3567B07F72113A84DDA71EF57A25E5
-696F32C68616C1209624A3B6BC8E3E762644960BC25ACE895DC6E981E60B45BF
-D7C0250F830C41C1EC111F9473CE3813E7D704375BE16D4C38D83A9FC70F198E
-1D68E23FB4BEB00EB5B6A7D4835580FCD30818BF46655D03722CEA391720E4D3
-C80FF26295CAC376B910A0E43F6A9FC856666F2F611AC40470A0BBD9CC6E22A7
-F79982D399C005815F88DE91EEFFF99A410E1AC7114063609477DC7599307DA4
-2DB6B6A6F274FC46794D70B190E267696B4A1E8BD0BC2EE5F06A7CC77844363C
-F0BE07A59DDAF0E32A3CA83FE6404179B01E7C5BFF2B76E1C7F555D5935CD7DA
-7F385A4FBCCE8BC043C868F6938FAF9CA163814E1E2BBEAB55E694E7428CD9B6
-D73569152E8C595E256590B39EE7A99627A860DC377B6EC71750A6FA64A72EE4
-F6489A1A5A234322D8DFDA02C8704419E0EF17493F9E3CDEFFC445736CDE71B9
-DCFBFF4A357C570E899C966858754C105F2908816ADB1858A0656C964F547CEE
-002C11BEBEA2A30E55A43120838E94994E390F298F7E4E6236EA30DE6CABBE0F
-03C8F3EA89130D3AF01E33E03AB649C3A731A5855601966BD09ED6F87BA768FB
-D68389A74DBCD7619FEC31503CC846099A571A35491AFD63097531DDC702CEDA
-BE9BD9E20303C0A6FE8E30B4EB2E27048A9415971E802C025D166324F4F30D25
-DE855A69D97437615DC3C1750FE021BD113C9767AA28AD16DF037D191928BE48
-0606FBB6663E07428BD2DC19EDD1D08D641DDDD8EC140AE69B31276CE7013DD4
-15EA07913F9B432735B196C137191C9C1CBEE5581732E91D1782A47913E42952
-45A9B0225D5D99514AC26E10FC7AE33BF096F2EC4E446CE08F5BB4E4F2872D9F
-56722077561BC7DAAFFBECCBF5C45DE8BC29939376EC700F52B43518C05B1002
-BD343941DE35187C54A4EC5C875F50C195471273171E4024805F0A02CDAA0158
-33891C3E50E179214D53D2EB466BB82A90516F4276E30067815FEB0585EB101D
-FA5B58A8AA860D2BAA73D94BC34D3F5CC328490F35B04B5D4D560A224AAF0EF0
-D666F1DC0750C17CDD109C63641DD41B8EF84A4247E4070C73295AE4EFCE3B66
-D2E291F745358407AF7C1FBBFC52677B33286965CAB5BE21ED85E63DB84986FE
-166515BDB9331E27C25D42D4444297A8AC93E3E5DCEC65AD75B121C80A94FC0F
-E206B5A4B6283544414FD3FE2FDC5BDAC0B3031EFC6D871E9A3D41278972C0F2
-F37FA49535AD6EA1ED801F4D00397EA06E4AC3D5D867D1F63067E74A6061615E
-C6E370D063CFADEE4EC16DA3BA0840D5F2C791A9A5DC469F519B87F6E2FB225D
-D1EB189C932D11758BC0710B1E1C4C33D9E5A17F65DECC6E920E61E53F596C8A
-9F32392078ABACA3C60E884770CF4004C5E0771C2629CFFD11F06431A57B267D
-423B07425D7C6154F4A6E2F018080C07A78672EAB2929B5A07422FA8BD1EF535
-94B4FDB61C836EF9E9642B7FCF22584B189DEEA061C3FDA4A6409274595B1AEB
-A04E3F1144B6D0F6648B4E2E8374BCFCF3235B610588292A4674488AF8498CA6
-F389E5D372C6C678F3AA03ECA699ED4D839B2BE8AA5B43E516A2850EB6532DDA
-757D3B3675AD7A37F79927DA46E1A03861F5ACC36BC19E2184AF0CB5346F9F9E
-12FA2BBB209944F4CDD5C6D255117743E7F23F03021886FF8069865093032452
-953C43B913B50DF01FC7CCC9281FDC26FD37FE1A2866B12F22973F4C57990EF9
-3504277C7091753AC591FB430F8E16E5E77A6639A8AB5A5F3DF8FCCC650AA39B
-B3EB181CB26CE6D18719E8ADDBBF5B81A9D5C4680BFE9DF5896B71344F4E17C3
-58C0576704A8E515162F615AE8CEE6E4909987FA7B0D6A5AB5F2D0146B96D3EA
-5F434D28A2244DA8460BB70E34EA42187223E9C889FFE783BAA7CC3DDA025D56
-888CC43CEB66FB6792DE7AC6753D2401487343FD66007E3C2C9D81B5B1612465
-37AF044A023A4EA768403A8FEFBE0F9160C705C333650B60F4EF63F9451F4361
-C433F5D790A37107BFFABC982E66E9191486FDEF9C640092F8B475456BE30681
-E3E1F3E216FF130CB52A0344B6CCAF3BBC8A327262A8C675A68BF3BDBE4CE061
-C4B8F33C3130DD6FB49E4DD8914FE7F7CDAF49F13956F86FA2B88E05EBF83DF2
-06711C8303A2B8877F5A0A9706A07C6505CE0C2AF5731D1A72B190FDE2FDC698
-ADAAD113AEDBCB841829B96A089750CEDA284182B360F687FE0196D4D43D4603
-EB9954331326527F77CC4B8D850B841187117413CC6B5F462C64A3959CC7693B
-E358EE5F2CE58F4EB42153F954981EDF869B5DA9559A4B69CC554FF39D4D4E77
-0C8CFFBA1E7893766F55B7D367B02E8F6C337FD10C22D60A6225048B01CF8C30
-86124E73A35DC54B2B68C97A3556AFCEA4E982D71257DAD041433A4A60B6CCC3
-98F4E749219D982CE35EE0BE0F953D908945712465097C6214746A864F4B52C3
-3A45DE9542A7F76ABE5155883D275498D6A5633800BA5B3B45078A52D321BF70
-14A506096C76DA29AE83A4D2204633D9CEC517CDC41FF04EE01790659588D0A9
-14B460FFBDCCDF568A303A5BB001CAD84BA60D4B2EF4D764F9887C21635B32FD
-E9BF53AC249BE88117CA54F8161F40B2FBEC6935D621DEE89FA7ACCF0CD1E8CB
-9ABA2079596EE31C7DB9EE1FFA7D499B43A91D117365D82852EA7DEF15F0ADD6
-AE864307FCBA01CDA5D9F17AA12551A060CD6FD4BB69EB09B99BD0D39C69D164
-E9573BC0E97BEF5D08A2936AEEE00BD6615EBECCB9DF9852A72821249EA3BED3
-020166D83242251D35B00F35BF822213BCCFA53372A5A9CC85AA0755E2840A68
-7E28C6BC6FCC151EBF5E8B74DE652794F312A6630F6FB891EEE4707E9259DC31
-230C42986B3C60AE7FDC542B7CB2180A871821D72248B2FFDF36E3A7ADED61F8
-DE6428B29CB0B98BA868E33246CF5A6BA12A6FBACA7436527FBE2FC6DF860A77
-5FA79538304FD552AB47E056AED3E3E6267BBD55CE52190DFD3932FFA9A850F5
-4CB7A7E938A32F18E7A86E94C3C365D0C4A85E64E0A749A005738C201B999B40
-8D9534D8317597A5D7169809BD0C829A5AF1B22E660BFAF7A4A1C81377B6AE44
-FC639CF5CED0AB54D0B639880CAEC0222D73B626A37C90DB982CADC78A01BCBB
-AD833E83EEF3C45F208A90B3AAAAAC8A25A28975675C64DCBE94FEAF96F07FEC
-3D8EA3DD2A0B776492BAF2F4D14A8AE1921C5DEE62BD385247A9536B2D8DDDDC
-1D51196E72804524A9175C93CB276069D7CD6555A2084A51FC13B503CEFA1835
-C572B64BB65203CD666FDD1C79DBED16B7EC15B37AD79602AFBE1A1FEC89C865
-DE6420E6790D59CDA4EFEFDF352CF101D2B64EEC253F13B3C854FC03370DB220
-227F67A5654E595E1C6E18A6A6AF672F0638D1B35C69759D347224DCC89223A8
-A9A6682EFAF9179AF0C7CDE0D9F991E89D258596E93F26819896C730526735BA
-681674536B7D1F8C243FA809DA6572601EC8E9665204C155D4EA516B61799080
-25627C82CF7E89BA81CEA8C865D0AAFBB7DA3C47E1508D985470E6A11C93AC68
-72F823BFAAB5011A760F369164158479690A2A696A4CDE768B520E75F9A9415D
-6C0CE866FB2BCACA7B9575E8F2658CCEB6E0DBFFEE00388A9BCD9706AC8D3F13
-B03109669E54C773BA71B93DD88B3972B48B1E30C6DDA9FC8F76ADF717373F85
-FD72E2095C983B1085C2436545C0260A5788641BA646755594CD06BBDEEB721F
-AB272E8145F81AFA2659029BCD25640BB9B406FD20
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 55387786 39139632 1000 600 600 (fr-refcard.dvi)
-@start /Fa 197[20 58[{}1 66.4176 /CMMI8 rf /Fb 134[35
-3[38 24 29 30 1[36 36 40 58 18 33 1[22 1[33 1[33 36 33
-33 36 51[26 45[{}19 66.4176 /CMTI8 rf /Fc 242[61 13[{}1
-49.8132 /CMSY6 rf /Fd 128[30 4[27 32 1[43 32 34 24 24
-24 32 34 30 34 50 18 32 1[18 34 30 19 27 34 27 34 30
-10[45 45 1[34 2[41 1[45 54 3[22 1[47 39 41 1[43 42 45
-9[30 1[30 1[30 30 30 30 1[18 21 18 19[27 4[30 30 18[{}50
-49.8132 /CMR6 rf /Fe 135[43 1[43 45 32 32 34 43 45 41
-45 68 23 1[25 23 45 41 25 37 45 36 45 40 12[57 45 61
-61 55 61 2[49 2[30 2[51 53 62 59 1[61 18[23 27 25[41
-41 18[{}39 66.4176 /CMBX8 rf /Ff 130[35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 3[35 2[35 35 35 1[35
-2[35 35 4[35 35 35 35 35 35 35 35 35 35 1[35 1[35 4[35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 1[35 35 35
-35 35 33[{}74 66.4176 /CMTT8 rf /Fg 135[60 1[60 64 45
-45 47 60 64 57 64 95 32 2[32 64 57 35 53 64 51 64 56
-2[57 7[87 1[80 64 86 86 78 86 1[109 69 1[59 43 2[72 75
-88 83 1[87 19[38 5[32 19[57 57 5[64 12[{}43 99.6264 /CMBX10
-rf /Fh 132[35 31 37 37 1[37 39 27 28 28 37 39 35 39 59
-20 1[22 20 39 35 22 31 39 31 39 35 2[35 1[35 1[43 1[53
-1[53 53 51 39 52 55 48 55 53 65 44 1[36 25 1[55 46 48
-54 51 50 53 6[20 35 6[35 35 1[35 20 24 20 2[27 27 20
-4[35 6[55 7[35 35 1[20 1[59 1[39 41 11[{}68 66.4176 /CMR8
-rf /Fi 139[53 54 57 3[76 115 6[42 63 76 61 1[67 11[106
-6[108 6[108 1[90 1[99 47[69 19[{}16 119.552 /CMBX10 rf
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: a4
-a4
-%%EndPaperSize
- @landscape end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin @landscape 1 0 bop -384 -421 a Fi(Carte)46
-b(de)g(r)m(\023)-66 b(ef)m(\023)g(erence)46 b(de)g(GNU)f(Emacs)361
--313 y Fh(\(p)r(our)24 b(la)f(v)n(ersion)h(22\))-294
--135 y Fg(Lancer)37 b(Emacs)-294 16 y Fh(P)n(our)24 b(lancer)f(GNU)h
-(Emacs)g(22,)f(tap)r(ez)j(juste)e(son)f(nom)h(:)31 b
-Ff(emacs)p Fh(.)-294 190 y Fg(Quitter)37 b(Emacs)-294
-342 y Fh(Susp)r(endre)25 b(Emacs)e(\(ou)i(l'iconi\014er)e(sous)g(X\))
-211 b Ff(C-z)-294 421 y Fh(Quitter)24 b(d)n(\023)-33
-b(e\014nitiv)n(emen)n(t)26 b(Emacs)527 b Ff(C-x)36 b(C-c)-294
-596 y Fg(Fic)m(hiers)-294 747 y Fe(Lire)23 b Fh(un)h(\014c)n(hier)986
-b Ff(C-x)36 b(C-f)-294 827 y Fe(Sauv)n(egarder)22 b Fh(un)i(\014c)n
-(hier)691 b Ff(C-x)36 b(C-s)-294 906 y Fh(Sauv)n(egarder)25
-b Fe(tous)e Fh(les)g(\014c)n(hiers)551 b Ff(C-x)36 b(s)-294
-986 y Fe(Ins)n(\023)-39 b(erer)24 b Fh(un)g(\014c)n(hier)g(sous)g(le)f
-(p)r(oin)n(t)h(\(curseur\))165 b Ff(C-x)36 b(i)-294 1066
-y Fh(Remplacer)24 b(le)f(\014c)n(hier)h(par)g(un)g(autre)g(\014c)n
-(hier)208 b Ff(C-x)36 b(C-v)-294 1146 y Fh(Sauv)n(egarder)25
-b(sous)f(un)g(autre)g(nom)g(de)g(\014c)n(hier)163 b Ff(C-x)36
-b(C-w)-294 1225 y Fh(Basculer)24 b(en)g(mo)r(de)g(lecture)g(seule)490
-b Ff(C-x)36 b(C-q)-294 1402 y Fg(Obtenir)h(de)g(l'aide)-294
-1553 y Fh(Le)27 b(syst)n(\022)-33 b(eme)27 b(d'aide)g(est)g(simple.)40
-b(F)-6 b(aites)27 b Ff(C-h)h Fh(\(ou)f Ff(F1)p Fh(\))h(et)f(suiv)n(ez)g
-(les)-294 1633 y(instructions.)i(Si)16 b(v)n(ous)g(d)n(\023)-33
-b(ebutez,)19 b(faites)d Ff(C-h)36 b(t)17 b Fh(p)r(our)f(un)g
-Fe(didacticiel)p Fh(.)-294 1741 y(Supprimer)23 b(la)h(fen)n(^)-33
-b(etre)24 b(d'aide)599 b Ff(C-x)36 b(1)-294 1821 y Fh(F)-6
-b(aire)23 b(d)n(\023)-33 b(e\014ler)24 b(la)g(fen)n(^)-33
-b(etre)24 b(d'aide)555 b Ff(C-M-v)-294 1929 y Fh(Rec)n(herc)n(her)25
-b(des)f(commandes)g(selon)g(une)g(c)n(ha)-8 b(^)-27 b(\020ne)73
-b Ff(C-h)36 b(a)-294 2009 y Fh(D)n(\023)-33 b(ecrire)23
-b(la)h(fonction)g(asso)r(ci)n(\023)-33 b(ee)24 b(\022)-35
-b(a)24 b(une)h(touc)n(he)185 b Ff(C-h)36 b(k)-294 2088
-y Fh(D)n(\023)-33 b(ecrire)23 b(une)h(fonction)813 b
-Ff(C-h)36 b(f)-294 2168 y Fh(Obtenir)24 b(des)g(informations)f(relativ)
-n(es)h(au)g(mo)r(de)102 b Ff(C-h)36 b(m)-294 2333 y Fg(R)n(\023)-55
-b(ecup)n(\023)g(eration)36 b(sur)i(erreurs)-294 2485
-y Fe(Abandonner)24 b Fh(une)g(commande)517 b Ff(C-g)-294
-2564 y Fe(R)n(\023)-39 b(ecup)n(\023)g(erer)24 b Fh(les)f(\014c)n
-(hiers)h(apr)n(\022)-33 b(es)24 b(un)g(crash)72 b Ff(M-x)36
-b(recover-session)-294 2644 y Fe(Ann)n(uler)24 b Fh(une)g(mo)r
-(di\014cation)473 b Ff(C-x)36 b(u,)g(C-_)g Fh(ou)g Ff(C-/)-294
-2724 y Fh(Ann)n(uler)24 b(toutes)h(les)e(mo)r(di\014cations)305
-b Ff(M-x)36 b(revert-buffer)-294 2803 y Fh(R)n(\023)-33
-b(ea\016c)n(her)24 b(un)e(\023)-33 b(ecran)25 b(p)r(erturb)n(\023)-33
-b(e)557 b Ff(C-l)-294 2978 y Fg(Rec)m(herc)m(he)36 b(incr)n(\023)-55
-b(emen)m(tale)-294 3129 y Fh(Rec)n(herc)n(her)25 b(en)f(a)n(v)l(an)n(t)
-819 b Ff(C-s)-294 3209 y Fh(Rec)n(herc)n(her)25 b(en)f(arri)n(\022)-33
-b(ere)783 b Ff(C-r)-294 3289 y Fh(Rec)n(herc)n(her)25
-b(en)f(a)n(v)l(an)n(t)h(\(expression)f(rationnelle\))75
-b Ff(C-M-s)-294 3368 y Fh(Rec)n(herc)n(her)17 b(en)g(arri)n(\022)-33
-b(ere)15 b(\(expression)i(rationnelle\))71 b Ff(C-M-r)-294
-3477 y Fh(Utiliser)22 b(la)i(c)n(ha)-8 b(^)-27 b(\020ne)24
-b(de)g(rec)n(herc)n(he)h(pr)n(\023)-33 b(ec)n(\023)g(eden)n(te)166
-b Ff(M-p)-294 3556 y Fh(Utiliser)22 b(la)i(c)n(ha)-8
-b(^)-27 b(\020ne)24 b(de)g(rec)n(herc)n(he)h(suiv)l(an)n(te)241
-b Ff(M-n)-294 3636 y Fh(Quitter)24 b(la)f(rec)n(herc)n(he)i(incr)n
-(\023)-33 b(emen)n(tale)412 b Ff(RET)-294 3716 y Fh(Ann)n(uler)24
-b(l'e\013et)g(du)g(dernier)f(caract)n(\022)-33 b(ere)357
-b Ff(DEL)-294 3795 y Fh(Ann)n(uler)24 b(la)f(rec)n(herc)n(he)i(en)f
-(cours)526 b Ff(C-g)-294 3904 y Fh(Refaites)34 b Ff(C-s)h
-Fh(ou)f Ff(C-r)h Fh(p)r(our)f(r)n(\023)-33 b(ep)n(\023)g(eter)34
-b(la)g(rec)n(herc)n(he)h(dans)f(une)h(des)-294 3983 y(directions.)42
-b(En)28 b(cours)f(de)h(rec)n(herc)n(he,)h Ff(C-g)f Fh(e\013ace)h(les)e
-(derniers)f(car-)-294 4063 y(act)n(\022)-33 b(eres)25
-b(et)f(ne)g(conserv)n(e)h(que)f(le)g(pr)n(\023)-33 b(e\014xe)24
-b(d)n(\023)-33 b(ej\022)e(a)24 b(trouv)n(\023)-33 b(e.)-185
-4254 y Fd(c)-202 4256 y Fc(\015)20 b Fd(2007)j(F)-5 b(ree)21
-b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)27 b(P)n(ermissions)21
-b(au)g(dos.)27 b(v2.3)1902 -421 y Fg(D)n(\023)-55 b(eplacemen)m(ts)1902
--270 y Fe(Ob)5 b(jet)27 b(sur)g(lequel)g(se)g(d)n(\023)-39
-b(eplacer)102 b(En)28 b(arri)n(\022)-39 b(ere)69 b(En)28
-b(a)n(v)-5 b(an)n(t)1902 -190 y Fh(Caract)n(\022)-33
-b(ere)803 b Ff(C-b)329 b(C-f)1902 -110 y Fh(Mot)973 b
-Ff(M-b)329 b(M-f)1902 -31 y Fh(Ligne)931 b Ff(C-p)329
-b(C-n)1902 49 y Fh(Aller)22 b(en)j(d)n(\023)-33 b(ebut/\014n)25
-b(de)f(la)g(ligne)200 b Ff(C-a)329 b(C-e)1902 129 y Fh(Phrase)891
-b Ff(M-a)329 b(M-e)1902 208 y Fh(P)n(aragraphe)749 b
-Ff(M-{)329 b(M-})1902 288 y Fh(P)n(age)953 b Ff(C-x)36
-b([)258 b(C-x)36 b(])1902 368 y Fh(S-expression)721 b
-Ff(C-M-b)259 b(C-M-f)1902 448 y Fh(F)-6 b(onction)834
-b Ff(C-M-a)259 b(C-M-e)1902 527 y Fh(Aller)22 b(en)j(d)n(\023)-33
-b(ebut/\014n)25 b(du)f(tamp)r(on)180 b Ff(M-<)329 b(M->)1902
-636 y Fh(P)n(asser)23 b(\022)-35 b(a)24 b(l')n(\023)-33
-b(ecran)24 b(suiv)l(an)n(t)715 b Ff(C-v)1902 715 y Fh(P)n(asser)23
-b(\022)-35 b(a)24 b(l')n(\023)-33 b(ecran)24 b(pr)n(\023)-33
-b(ec)n(\023)g(eden)n(t)640 b Ff(M-v)1902 795 y Fh(F)-6
-b(aire)23 b(d)n(\023)-33 b(e\014ler)24 b(l')n(\023)-33
-b(ecran)24 b(v)n(ers)f(la)h(gauc)n(he)391 b Ff(C-x)36
-b(<)1902 875 y Fh(F)-6 b(aire)23 b(d)n(\023)-33 b(e\014ler)24
-b(l')n(\023)-33 b(ecran)24 b(v)n(ers)f(la)h(droite)419
-b Ff(C-x)36 b(>)1902 954 y Fh(Placer)24 b(la)f(ligne)h(couran)n(te)h
-(au)f(cen)n(tre)h(de)f(l')n(\023)-33 b(ecran)82 b Ff(C-u)36
-b(C-l)1902 1129 y Fg(D)n(\023)-55 b(etruire)36 b(et)i(supprimer)1902
-1280 y Fe(Ob)5 b(jet)26 b(\022)-40 b(a)26 b(supprimer)439
-b(En)28 b(arri)n(\022)-39 b(ere)69 b(En)28 b(a)n(v)-5
-b(an)n(t)1902 1360 y Fh(Caract)n(\022)-33 b(ere)25 b(\(suppression\))
-370 b Ff(DEL)329 b(C-d)1902 1439 y Fh(Mot)973 b Ff(M-DEL)259
-b(M-d)1902 1519 y Fh(Ligne)24 b(\(jusqu'au)g(d)n(\023)-33
-b(ebut/\014n\))282 b Ff(M-0)36 b(C-k)188 b(C-k)1902 1599
-y Fh(Phrase)891 b Ff(C-x)36 b(DEL)188 b(M-k)1902 1679
-y Fh(S-expression)721 b Ff(M--)36 b(C-M-k)118 b(C-M-k)1902
-1787 y Fh(D)n(\023)-33 b(etruire)23 b(une)i Fe(r)n(\023)-39
-b(egion)804 b Ff(C-w)1902 1867 y Fh(Copier)23 b(une)i(r)n(\023)-33
-b(egion)24 b(dans)g(le)f Fb(kil)t(l)i(ring)383 b Ff(M-w)1902
-1946 y Fh(D)n(\023)-33 b(etruire)21 b(jusqu'\022)-35
-b(a)22 b(l'o)r(ccurrence)g(suiv)l(an)n(te)h(de)f Fb(c)l(ar)71
-b Ff(M-z)36 b Fb(c)l(ar)1902 2055 y Fh(R)n(\023)-33 b(ecup)n(\023)g
-(erer)24 b(la)g(derni)n(\022)-33 b(ere)23 b(r)n(\023)-33
-b(egion)24 b(d)n(\023)-33 b(etruite)303 b Ff(C-y)1902
-2134 y Fh(R)n(\023)-33 b(ecup)n(\023)g(erer)24 b(la)g(r)n(\023)-33
-b(egion)23 b(d)n(\023)-33 b(etruite)25 b(pr)n(\023)-33
-b(ec)n(\023)g(eden)n(te)224 b Ff(M-y)1902 2310 y Fg(Marquer)1902
-2461 y Fh(Placer)24 b(la)f(marque)h(au)g(p)r(oin)n(t)634
-b Ff(C-@)36 b Fh(ou)g Ff(C-SPC)1908 2524 y Fh(\023)1902
-2541 y(Ec)n(hanger)25 b(le)e(p)r(oin)n(t)i(et)f(la)f(marque)483
-b Ff(C-x)36 b(C-x)1902 2649 y Fh(Placer)24 b(la)f(marque)h(un)g
-Fe(mot)f Fh(plus)g(loin)363 b Ff(M-@)1902 2729 y Fh(Marquer)23
-b(le)h Fe(paragraphe)678 b Ff(M-h)1902 2808 y Fh(Marquer)23
-b(la)h Fe(page)912 b Ff(C-x)36 b(C-p)1902 2888 y Fh(Marquer)23
-b(la)h Fe(s-expression)647 b Ff(C-M-@)1902 2968 y Fh(Marquer)23
-b(la)h Fe(fonction)787 b Ff(C-M-h)1902 3048 y Fh(Marquer)23
-b(tout)i(le)f Fe(tamp)r(on)653 b Ff(C-x)36 b(h)1902 3222
-y Fg(Remplacemen)m(t)g(in)m(teractif)1902 3373 y Fh(Remplacer)24
-b(une)g(c)n(ha)-8 b(^)-27 b(\020ne)25 b(de)f(texte)492
-b Ff(M-\045)1985 3453 y Fh(\022)-35 b(a)24 b(l'aide)f(d'expr.)31
-b(rationnelles)145 b Ff(M-x)36 b(query-replace-regexp)1902
-3561 y Fh(R)n(\023)-33 b(ep)r(onses)33 b(p)r(ossibles)e(p)r(our)g(c)n
-(haque)j(o)r(ccurrence)f(dans)f(le)f(mo)r(de)h(de)1902
-3641 y(remplacemen)n(t)25 b(in)n(teractif)f(:)1902 3749
-y Fe(Remplacer)f Fh(celle-l\022)-35 b(a,)23 b(passer)g(\022)-35
-b(a)24 b(la)f(suiv)l(an)n(te)182 b Ff(SPC)1902 3829 y
-Fh(Remplacer)24 b(celle-l\022)-35 b(a,)23 b(rester)g(l\022)-35
-b(a)584 b Ff(,)1902 3909 y Fe(P)n(asser)23 b Fh(\022)-35
-b(a)24 b(la)g(suiv)l(an)n(te)g(sans)g(remplacer)321 b
-Ff(DEL)1902 3988 y Fh(Remplacer)24 b(toutes)h(les)e(o)r(ccurrences)i
-(suiv)l(an)n(tes)119 b Ff(!)1902 4068 y Fe(Rev)n(enir)23
-b Fh(\022)-35 b(a)24 b(l'o)r(ccurrence)g(pr)n(\023)-33
-b(ec)n(\023)g(eden)n(te)365 b Ff(^)1902 4148 y Fe(Quitter)23
-b Fh(le)g(remplacemen)n(t)i(in)n(teractif)348 b Ff(RET)1908
-4211 y Fe(\023)1902 4227 y(Editer)23 b Fh(a)n(v)l(an)n(t)i(de)f
-(reprendre)g(\()p Ff(C-M-c)i Fh(:)31 b(sortir\))119 b
-Ff(C-r)4098 -421 y Fg(F)-10 b(en)n(^)-55 b(etres)37 b(m)m(ultiples)4098
--299 y Fh(Lorsqu'il)17 b(y)h(a)g(deux)h(commandes,)h(la)e(seconde)i
-(est)e(celle)g(qui)g(concerne)4098 -219 y(non)24 b(pas)g(les)f(fen)n(^)
--33 b(etres)25 b(mais)e(les)g(cadres.)4098 -118 y(Supprimer)g(toutes)i
-(les)f(autres)g(fen)n(^)-33 b(etres)105 b Ff(C-x)36 b(1)212
-b(C-x)37 b(5)e(1)4098 -38 y Fh(Supprimer)23 b(cette)j(fen)n(^)-33
-b(etre)487 b Ff(C-x)36 b(0)212 b(C-x)37 b(5)e(0)4098
-42 y Fh(Diviser)23 b(la)g(fen)n(^)-33 b(etre)24 b(horizon)n(talemen)n
-(t)170 b Ff(C-x)36 b(2)212 b(C-x)37 b(5)e(2)4098 143
-y Fh(Diviser)23 b(la)g(fen)n(^)-33 b(etre)24 b(v)n(erticalemen)n(t)476
-b Ff(C-x)36 b(3)4098 244 y Fh(F)-6 b(aire)23 b(d)n(\023)-33
-b(e\014ler)24 b(l'autre)g(fen)n(^)-33 b(etre)618 b Ff(C-M-v)4098
-345 y Fh(S)n(\023)-33 b(electionner)25 b(une)f(autre)h(fen)n(^)-33
-b(etre)291 b Ff(C-x)36 b(o)212 b(C-x)37 b(5)e(o)4098
-425 y Fh(Choisir)23 b(un)g(tamp)r(on)i(\(autre)g(fen)n(^)-33
-b(etre\))160 b Ff(C-x)36 b(4)g(b)141 b(C-x)37 b(5)e(b)4098
-504 y Fh(A\016c)n(her)24 b(un)g(tamp)r(on)g(\(autre)h(fen)n(^)-33
-b(etre\))141 b Ff(C-x)36 b(4)g(C-o)71 b(C-x)37 b(5)e(C-o)4098
-584 y Fh(Lire)23 b(un)h(\014c)n(hier)g(\(autre)h(fen)n(^)-33
-b(etre\))308 b Ff(C-x)36 b(4)g(f)141 b(C-x)37 b(5)e(f)4181
-664 y Fh(en)24 b(lecture)g(seule)657 b Ff(C-x)36 b(4)g(r)141
-b(C-x)37 b(5)e(r)4098 743 y Fh(Lancer)24 b(Dired)f(\(autre)i(fen)n(^)
--33 b(etre\))339 b Ff(C-x)36 b(4)g(d)141 b(C-x)37 b(5)e(d)4098
-823 y Fh(T)-6 b(rouv)n(er)24 b(un)g(tag)g(\(autre)h(fen)n(^)-33
-b(etre\))278 b Ff(C-x)36 b(4)g(.)141 b(C-x)37 b(5)e(.)4098
-924 y Fh(Agrandir)23 b(la)g(fen)n(^)-33 b(etre)25 b(v)n(erticalemen)n
-(t)416 b Ff(C-x)36 b(^)4098 1004 y Fh(R)n(\023)-33 b(eduire)24
-b(la)f(fen)n(^)-33 b(etre)24 b(horizon)n(talemen)n(t)373
-b Ff(C-x)36 b({)4098 1084 y Fh(Agrandir)23 b(la)g(fen)n(^)-33
-b(etre)25 b(horizon)n(talemen)n(t)336 b Ff(C-x)36 b(})4098
-1214 y Fg(F)-10 b(ormater)4098 1336 y Fh(Inden)n(ter)25
-b(la)f Fe(ligne)f Fh(couran)n(te)i(\(selon)f(le)g(mo)r(de\))127
-b Ff(TAB)4098 1416 y Fh(Inden)n(ter)25 b(la)f Fe(r)n(\023)-39
-b(egion)22 b Fh(couran)n(te)j(\(selon)g(le)e(mo)r(de\))76
-b Ff(C-M-\\)4098 1496 y Fh(Inden)n(ter)21 b(la)d Fe(s-expr.)30
-b Fh(couran)n(te)21 b(\(selon)e(le)g(mo)r(de\))72 b Ff(C-M-q)4098
-1576 y Fh(Inden)n(ter)25 b(la)f(r)n(\023)-33 b(egion)23
-b(sur)h(une)g(colonne)386 b Ff(C-x)36 b(TAB)4098 1655
-y Fh(Ins)n(\023)-33 b(erer)24 b(un)g(retour)f(\022)-35
-b(a)24 b(la)g(ligne)f(apr)n(\022)-33 b(es)24 b(le)f(p)r(oin)n(t)168
-b Ff(C-o)4098 1735 y Fh(D)n(\023)-33 b(eplacer)24 b(le)g(reste)g(de)g
-(la)f(ligne)h(v)n(ers)f(le)h(bas)240 b Ff(C-M-o)4098
-1815 y Fh(Supprimer)23 b(les)g(lignes)h(vierges)g(autour)g(du)g(p)r
-(oin)n(t)73 b Ff(C-x)36 b(C-o)4098 1894 y Fh(Joindre)20
-b(\022)-35 b(a)20 b(la)f(ligne)h(pr)n(\023)-33 b(ec)n(\023)g(eden)n(te)
-22 b(\(suiv.)30 b(a)n(v)n(ec)21 b Fb(ar)l(g)6 b Fh(\))71
-b Ff(M-^)4098 1974 y Fh(Supprimer)23 b(tous)h(les)g(espaces)h(autour)f
-(du)g(p)r(oin)n(t)102 b Ff(M-\\)4098 2054 y Fh(Mettre)24
-b(exactemen)n(t)j(une)d(espace)h(au)f(p)r(oin)n(t)223
-b Ff(M-SPC)4098 2155 y Fh(F)-6 b(ormater)24 b(le)f(paragraphe)715
-b Ff(M-q)4098 2235 y Fh(Placer)24 b(la)f(marge)h(droite)g(\022)-35
-b(a)24 b Fb(ar)l(g)30 b Fh(colonnes)287 b Ff(C-u)36 b
-Fb(ar)l(g)42 b Ff(C-x)36 b(f)4098 2314 y Fh(D)n(\023)-33
-b(e\014nir)23 b(le)h(pr)n(\023)-33 b(e\014xe)24 b(des)g(lignes)607
-b Ff(C-x)36 b(.)4098 2415 y Fh(D)n(\023)-33 b(e\014nir)23
-b(la)h(fon)n(te)975 b Ff(M-o)4098 2538 y Fg(Mo)s(di\014er)37
-b(la)h(casse)4098 2660 y Fh(Mettre)24 b(le)g(mot)g(en)g(capitales)627
-b Ff(M-u)4098 2740 y Fh(Mettre)24 b(le)g(mot)g(en)g(min)n(uscules)561
-b Ff(M-l)4098 2819 y Fh(Mettre)24 b(une)h(ma)t(juscule)e(au)h(mot)523
-b Ff(M-c)4098 2920 y Fh(Mettre)24 b(la)g(r)n(\023)-33
-b(egion)23 b(en)i(capitales)556 b Ff(C-x)36 b(C-u)4098
-3000 y Fh(Mettre)24 b(la)g(r)n(\023)-33 b(egion)23 b(en)i(min)n
-(uscules)490 b Ff(C-x)36 b(C-l)4098 3132 y Fg(Le)i(mini-tamp)s(on)4098
-3254 y Fh(Dans)24 b(le)f(mini-tamp)r(on)h(:)4098 3355
-y(Compl)n(\023)-33 b(eter)24 b(autan)n(t)h(que)g(p)r(ossible)496
-b Ff(TAB)4098 3435 y Fh(Compl)n(\023)-33 b(eter)24 b(un)g(mot)872
-b Ff(SPC)4098 3514 y Fh(Compl)n(\023)-33 b(eter)24 b(et)g(ex)n(\023)-33
-b(ecuter)758 b Ff(RET)4098 3594 y Fh(Mon)n(trer)23 b(les)h(compl)n
-(\022)-33 b(etemen)n(ts)25 b(p)r(ossibles)313 b Ff(?)4098
-3674 y Fh(Utiliser)22 b(l'en)n(tr)n(\023)-33 b(ee)24
-b(pr)n(\023)-33 b(ec)n(\023)g(eden)n(te)26 b(du)e(mini-tamp)r(on)91
-b Ff(M-p)4098 3753 y Fh(Utiliser)22 b(l'en)n(tr)n(\023)-33
-b(ee)24 b(suiv)l(an)n(te)h(du)f(mini-tamp)r(on)167 b
-Ff(M-n)4098 3833 y Fh(Rec)n(herc)n(her)25 b(en)f(arri)n(\022)-33
-b(ere)22 b(dans)j(l'historique)251 b Ff(M-r)4098 3913
-y Fh(Rec)n(herc)n(her)25 b(en)f(a)n(v)l(an)n(t)h(dans)f(l'historique)
-285 b Ff(M-s)4098 3993 y Fh(Quitter)24 b(en)g(ann)n(ulan)n(t)h(la)f
-(commande)394 b Ff(C-g)4098 4094 y Fh(F)-6 b(aites)39
-b Ff(C-x)d(ESC)g(ESC)j Fh(p)r(our)d(\023)-33 b(editer)39
-b(et)g(r)n(\023)-33 b(ep)n(\023)g(eter)39 b(la)f(derni)n(\022)-33
-b(ere)38 b(com-)4098 4173 y(mande)22 b(a)n(y)n(an)n(t)g(utilis)n(\023)
--33 b(e)20 b(le)h(mini-tamp)r(on.)30 b(F)-6 b(aites)22
-b Ff(F10)f Fh(p)r(our)g(utiliser)f(la)4098 4253 y(barre)j(de)h(men)n(u)
-h(sur)e(un)h(terminal)f(en)h(utilisan)n(t)g(le)f(mini-tamp)r(on.)p
-eop end
-%%Page: 2 2
-TeXDict begin @landscape 2 1 bop -384 -421 a Fi(Carte)46
-b(de)g(r)m(\023)-66 b(ef)m(\023)g(erence)46 b(de)g(GNU)f(Emacs)-294
--227 y Fg(T)-10 b(amp)s(ons)-294 -76 y Fh(Choisir)23
-b(un)g(autre)i(tamp)r(on)674 b Ff(C-x)36 b(b)-294 4 y
-Fh(Lister)23 b(tous)i(les)e(tamp)r(ons)719 b Ff(C-x)36
-b(C-b)-294 84 y Fh(Supprimer)23 b(un)h(tamp)r(on)757
-b Ff(C-x)36 b(k)-294 257 y Fg(T)-10 b(ransp)s(oser)-294
-409 y Fh(T)k(ransp)r(oser)24 b(des)g Fe(caract)n(\022)-39
-b(eres)598 b Ff(C-t)-294 488 y Fh(T)-6 b(ransp)r(oser)24
-b(des)g Fe(mots)783 b Ff(M-t)-294 568 y Fh(T)-6 b(ransp)r(oser)24
-b(des)g Fe(lignes)755 b Ff(C-x)36 b(C-t)-294 648 y Fh(T)-6
-b(ransp)r(oser)24 b(des)g Fe(s-expressions)496 b Ff(C-M-t)-294
-822 y Fg(V)n(\023)-55 b(eri\014er)37 b(l'orthographe)-294
-973 y Fh(V)n(\023)-33 b(eri\014er)23 b(l'orthographe)h(du)g(mot)g
-(couran)n(t)273 b Ff(M-$)-294 1053 y Fh(V)n(\023)-33
-b(eri\014er)23 b(l'orthographe)h(d'une)g(r)n(\023)-33
-b(egion)231 b Ff(M-x)36 b(ispell-region)-294 1133 y Fh(V)n(\023)-33
-b(eri\014er)23 b(l'orthographe)h(de)g(tout)h(le)f(tamp)r(on)53
-b Ff(M-x)36 b(ispell-buffer)-294 1308 y Fg(T)-10 b(ags)-294
-1460 y Fh(T)k(rouv)n(er)24 b(un)g(tag)g(\(une)h(d)n(\023)-33
-b(e\014nition\))475 b Ff(M-.)-294 1539 y Fh(P)n(asser)23
-b(\022)-35 b(a)24 b(l'o)r(ccurrence)g(suiv)l(an)n(te)h(du)f(tag)298
-b Ff(C-u)36 b(M-.)-294 1619 y Fh(Sp)n(\023)-33 b(eci\014er)24
-b(un)g(autre)h(\014c)n(hier)e(de)h(tags)217 b Ff(M-x)36
-b(visit-tags-table)-294 1727 y Fh(Rec)n(herc)n(her)25
-b(dans)f(tous)g(les)f(\014c)n(hiers)h(des)g(tags)32 b
-Ff(M-x)k(tags-search)-294 1836 y Fh(Remplacer)24 b(dans)g(tous)g(les)g
-(\014c)n(hiers)159 b Ff(M-x)36 b(tags-query-replace)-294
-1915 y Fh(Con)n(tin)n(uer)24 b(la)g(rec)n(herc)n(he)h(ou)f(le)f
-(remplacemen)n(t)122 b Ff(M-,)-294 2090 y Fg(Shell)-294
-2241 y Fh(Ex)n(\023)-33 b(ecuter)25 b(une)f(commande)h(shell)519
-b Ff(M-!)-294 2321 y Fh(Lancer)24 b(une)h(commande)f(shell)g(sur)f(la)g
-(r)n(\023)-33 b(egion)176 b Ff(M-|)-294 2400 y Fh(Filtrer)23
-b(la)g(r)n(\023)-33 b(egion)24 b(a)n(v)n(ec)h(une)f(commande)h(shell)
-148 b Ff(C-u)36 b(M-|)-294 2480 y Fh(Lancer)24 b(un)g(shell)f(dans)h
-(la)g(fen)n(^)-33 b(etre)24 b Ff(*shell*)223 b(M-x)36
-b(shell)-294 2646 y Fg(Rectangles)-294 2797 y Fh(Copier)23
-b(le)h(rectangle)h(dans)f(un)g(registre)341 b Ff(C-x)36
-b(r)g(r)-294 2876 y Fh(D)n(\023)-33 b(etruire)23 b(le)h(rectangle)807
-b Ff(C-x)36 b(r)g(k)-294 2956 y Fh(R)n(\023)-33 b(ecup)n(\023)g(erer)24
-b(le)g(rectangle)754 b Ff(C-x)36 b(r)g(y)-294 3036 y
-Fh(D)n(\023)-33 b(ecaler)24 b(le)f(rectangle)i(\022)-35
-b(a)24 b(droite)571 b Ff(C-x)36 b(r)g(o)-294 3116 y Fh(Vider)23
-b(le)h(rectangle)894 b Ff(C-x)36 b(r)g(c)-294 3195 y
-Fh(Pr)n(\023)-33 b(e\014xer)24 b(c)n(haque)h(ligne)f(du)f(rectangle)392
-b Ff(C-x)36 b(r)g(t)-294 3370 y Fg(Abr)n(\023)-55 b(eviations)-294
-3521 y Fh(Ajouter)24 b(une)g(abr)n(\023)-33 b(eviation)25
-b(globale)462 b Ff(C-x)36 b(a)g(g)-294 3601 y Fh(Ajouter)24
-b(une)g(abr)n(\023)-33 b(eviation)25 b(lo)r(cale)f(au)g(mo)r(de)215
-b Ff(C-x)36 b(a)g(l)-294 3680 y Fh(Ajouter)24 b(une)g(expansion)h
-(globale)505 b Ff(C-x)36 b(a)g(i)f(g)-294 3760 y Fh(Ajouter)24
-b(une)g(expansion)h(lo)r(cale)f(au)g(mo)r(de)258 b Ff(C-x)36
-b(a)g(i)f(l)-294 3840 y Fh(F)-6 b(aire)17 b(une)i(expansion)g
-(explicite)f(de)g(l'abr)n(\023)-33 b(eviation)71 b Ff(C-x)36
-b(a)g(e)-294 3948 y Fh(F)-6 b(aire)23 b(une)i(expansion)f(du)g(mot)g
-(pr)n(\023)-33 b(ec)n(\023)g(eden)n(t)261 b Ff(M-/)1902
--421 y Fg(Expressions)39 b(rationnelles)1902 -270 y Fh(Un)24
-b(caract)n(\022)-33 b(ere)25 b(quelconque,)g(sauf)e(\014n)h(de)g(ligne)
-150 b Ff(.)71 b Fh(\(p)r(oin)n(t\))1902 -190 y(Z)n(\023)-33
-b(ero)24 b(r)n(\023)-33 b(ep)n(\023)g(etition)24 b(ou)g(plus)734
-b Ff(*)1902 -110 y Fh(Une)24 b(r)n(\023)-33 b(ep)n(\023)g(etition)24
-b(ou)h(plus)747 b Ff(+)1902 -31 y Fh(Z)n(\023)-33 b(ero)24
-b(ou)g(une)g(r)n(\023)-33 b(ep)n(\023)g(etition)751 b
-Ff(?)1908 32 y Fh(\023)1902 49 y(Ec)n(happ)r(er)25 b(le)e(caract)n
-(\022)-33 b(ere)25 b(sp)n(\023)-33 b(ecial)24 b Fb(c)488
-b Ff(\\)p Fb(c)1902 129 y Fh(Alternativ)n(e)24 b(\(\\ou")i(non)e
-(exclusif)5 b(\))476 b Ff(\\|)1902 208 y Fh(Regroup)r(emen)n(t)994
-b Ff(\\\()36 b Fa(:)11 b(:)h(:)34 b Ff(\\\))1902 288
-y Fh(Reprendre)24 b(le)g(texte)h(du)f Fb(n)5 b Fh(-i)n(\022)-33
-b(eme)24 b(group)r(emen)n(t)146 b Ff(\\)p Fb(n)1902 368
-y Fh(Limite)23 b(de)i(mot)1000 b Ff(\\b)1902 448 y Fh(Non)24
-b(limite)f(de)h(mot)874 b Ff(\\B)1902 556 y Fe(Ob)5 b(jet)707
-b(D)n(\023)-39 b(ebut)264 b(Fin)1902 636 y Fh(Ligne)743
-b Ff(^)450 b($)1902 715 y Fh(Mot)785 b Ff(\\<)415 b(\\>)1902
-795 y Fh(T)-6 b(amp)r(on)658 b Ff(\\`)415 b(\\')1902
-875 y Fe(Classe)26 b(de)i(caract)n(\022)-39 b(ere)227
-b(Corresp)r(ond)70 b(Compl)n(\023)-39 b(emen)n(t)1902
-954 y Fh(Ensem)n(ble)24 b(explicite)339 b Ff([)36 b Fa(:)11
-b(:)h(:)34 b Ff(])262 b([^)36 b Fa(:)12 b(:)f(:)35 b
-Ff(])1902 1034 y Fh(Caract)n(\022)-33 b(ere)25 b(de)f(mot)375
-b Ff(\\w)415 b(\\W)1902 1114 y Fh(Caract)n(\022)-33 b(ere)25
-b(a)n(v)n(ec)f(la)g(syn)n(taxe)h Fb(c)67 b Ff(\\s)p Fb(c)382
-b Ff(\\S)p Fb(c)1902 1288 y Fg(Jeux)38 b(de)f(caract)n(\022)-55
-b(eres)37 b(in)m(ternationaux)1902 1439 y Fh(Pr)n(\023)-33
-b(eciser)23 b(la)g(langue)i(principale)568 b Ff(C-x)36
-b(RET)g(l)1902 1519 y Fh(Lister)23 b(les)h(m)n(\023)-33
-b(etho)r(des)25 b(de)f(saisie)268 b Ff(M-x)36 b(list-input-methods)1902
-1599 y Fh(Activ)n(er/d)n(\023)-33 b(esactiv)n(er)25 b(la)f(m)n(\023)-33
-b(etho)r(de)25 b(de)f(saisie)227 b Ff(C-\\)1902 1679
-y Fh(Choisir)17 b(le)i(co)r(dage)h(p)r(our)e(la)g(commande)i(suiv)l(an)
-n(te)72 b Ff(C-x)36 b(RET)g(c)1902 1758 y Fh(Lister)23
-b(les)h(co)r(dages)568 b Ff(M-x)37 b(list-coding-systems)1902
-1838 y Fh(Choisir)23 b(le)g(co)r(dage)i(pr)n(\023)-33
-b(ef)n(\023)g(er)n(\023)g(e)312 b Ff(M-x)36 b(prefer-coding-system)1902
-2014 y Fg(Info)1902 2166 y Fh(Lire)23 b(une)h(do)r(cumen)n(tation)j
-(Info)557 b Ff(C-h)36 b(i)1902 2245 y Fh(Rec)n(herc)n(her)25
-b(une)f(fonction/v)l(ariable)h(dans)f(Info)110 b Ff(C-h)36
-b(S)1902 2354 y Fh(Se)24 b(d)n(\023)-33 b(eplacer)25
-b(dans)f(un)f(n\033ud)i(:)1973 2462 y(P)n(age)f(suiv)l(an)n(te)948
-b Ff(SPC)1973 2542 y Fh(P)n(age)24 b(pr)n(\023)-33 b(ec)n(\023)g(eden)n
-(te)873 b Ff(DEL)1973 2621 y Fh(D)n(\023)-33 b(ebut)24
-b(du)g(n\033ud)881 b Ff(.)71 b Fh(\(p)r(oin)n(t\))1902
-2730 y(Na)n(vigation)25 b(en)n(tre)f(n\033uds)g(:)1973
-2838 y(N\033ud)f Fe(suiv)-5 b(an)n(t)907 b Ff(n)1973
-2918 y Fh(N\033ud)23 b Fe(pr)n(\023)-39 b(ec)n(\023)g(eden)n(t)814
-b Ff(p)1973 2997 y Fe(Remon)n(ter)22 b Fh(d'un)i(niv)n(eau)634
-b Ff(u)1973 3077 y Fh(Choisir)22 b(un)i(sujet)g(du)g(men)n(u)g(par)g
-(son)f(nom)177 b Ff(m)1973 3157 y Fh(Choisir)22 b(le)i
-Fb(n)5 b Fh(-i)n(\022)-33 b(eme)23 b(sujet)h(\(1{9\))488
-b Fb(n)1973 3236 y Fh(Suivre)18 b(une)h(r)n(\023)-33
-b(ef)n(\023)g(erence)18 b(crois)n(\023)-33 b(ee)19 b(\(retour)f(a)n(v)n
-(ec)i Ff(l)p Fh(\))71 b Ff(f)1973 3316 y Fh(Rev)n(enir)23
-b(au)h(dernier)g(n\033ud)g(visit)n(\023)-33 b(e)413 b
-Ff(l)1973 3396 y Fh(Aller)22 b(au)i(sommaire)f(Info)658
-b Ff(d)1973 3475 y Fh(Aller)22 b(au)i(n\033ud)g(le)g(plus)f(haut)i(du)f
-(man)n(uel)189 b Ff(t)1973 3555 y Fh(Aller)22 b(sur)h(un)h(n\033ud)g
-(par)g(son)f(nom)395 b Ff(g)1902 3663 y Fh(Autres)24
-b(:)1973 3772 y(Aller)e(au)i Fe(didacticiel)e Fh(Info)591
-b Ff(h)1973 3851 y Fh(Rec)n(herc)n(her)24 b(un)g(sujet)g(dans)g
-(l'index)364 b Ff(i)1973 3931 y Fh(Rec)n(herc)n(her)24
-b(un)g(n\033ud)g(par)g(expr.)31 b(rationnelle)73 b Ff(s)1973
-4011 y Fe(Quitter)22 b Fh(Info)962 b Ff(q)4098 -421 y
-Fg(Registres)4098 -271 y Fh(Sauv)n(er)24 b(la)g(r)n(\023)-33
-b(egion)24 b(dans)g(un)g(registre)423 b Ff(C-x)36 b(r)g(s)4098
--191 y Fh(Ins)n(\023)-33 b(erer)24 b(le)f(con)n(ten)n(u)j(d'un)e
-(registre)480 b Ff(C-x)36 b(r)g(i)4098 -83 y Fh(Sauv)n(er)24
-b(la)g(v)l(aleur)g(du)g(p)r(oin)n(t)g(dans)g(un)g(registre)139
-b Ff(C-x)36 b(r)g(SPC)4098 -3 y Fh(Aller)22 b(au)i(p)r(oin)n(t)h(sauv)n
-(\023)-33 b(e)24 b(dans)g(un)g(registre)294 b Ff(C-x)36
-b(r)g(j)4098 172 y Fg(Macros)i(cla)m(vier)4098 322 y
-Fe(Lancer)23 b Fh(la)h(d)n(\023)-33 b(e\014nition)24
-b(d'une)g(macro)g(cla)n(vier)180 b Ff(C-x)36 b(\()4098
-402 y Fe(T)-7 b(erminer)23 b Fh(la)g(d)n(\023)-33 b(e\014nition)25
-b(d'une)f(macro)g(cla)n(vier)93 b Ff(C-x)36 b(\))4098
-481 y Fe(Ex)n(\023)-39 b(ecuter)24 b Fh(la)f(derni)n(\022)-33
-b(ere)24 b(macro)g(cla)n(vier)f(d)n(\023)-33 b(e\014nie)116
-b Ff(C-x)36 b(e)4098 561 y Fh(F)-6 b(aire)23 b(un)h(a)t(jout)h(\022)-35
-b(a)23 b(la)h(derni)n(\022)-33 b(ere)23 b(macro)h(cla)n(vier)155
-b Ff(C-u)36 b(C-x)g(\()4098 641 y Fh(Nommer)23 b(la)h(derni)n(\022)-33
-b(ere)23 b(macro)h(cla)n(vier)59 b Ff(M-x)37 b(name-last-kbd-macro)4098
-720 y Fh(En)24 b(ins)n(\023)-33 b(erer)23 b(une)h(d)n(\023)-33
-b(e\014nition)25 b(Lisp)297 b Ff(M-x)36 b(insert-kbd-macro)4098
-894 y Fg(Commandes)i(de)f(gestion)h(d'Emacs)g(Lisp)4104
-1036 y Fh(\023)4098 1053 y(Ev)l(aluer)24 b(la)f Fe(s-expression)h
-Fh(a)n(v)l(an)n(t)h(le)f(p)r(oin)n(t)227 b Ff(C-x)36
-b(C-e)4104 1116 y Fh(\023)4098 1133 y(Ev)l(aluer)24 b(la)f
-Fe(defun)h Fh(couran)n(te)620 b Ff(C-M-x)4104 1196 y
-Fh(\023)4098 1212 y(Ev)l(aluer)24 b(la)f Fe(r)n(\023)-39
-b(egion)742 b Ff(M-x)36 b(eval-region)4098 1292 y Fh(Lire)23
-b(et)f(\023)-33 b(ev)l(aluer)25 b(dans)f(le)f(mini-tamp)r(on)333
-b Ff(M-:)4098 1372 y Fh(Charger)24 b(depuis)g(un)g(r)n(\023)-33
-b(ep)r(ertoire)23 b(standard)113 b Ff(M-x)36 b(load-library)4098
-1547 y Fg(P)m(ersonnalisation)g(simple)4098 1697 y Fh(P)n(ersonnaliser)
-23 b(les)g(v)l(ariables)h(et)g(les)g(fon)n(tes)108 b
-Ff(M-x)36 b(customize)4098 1805 y Fh(Exemples)24 b(de)g(d)n(\023)-33
-b(e\014nition)25 b(globale)f(de)g(touc)n(hes)h(en)f(Emacs)g(Lisp)f(:)
-4098 1913 y Ff(\(global-set-key)40 b("\\C-cg")d('goto-line\))4098
-1993 y(\(global-set-key)j("\\M-#")d('query-replace-regexp\))4107
-2168 y Fg(\023)4098 2192 y(Ecriture)g(de)h(commandes)4098
-2342 y Ff(\(defun)f Fb(nom-c)l(ommande)43 b Ff(\()p Fb(ar)l(gs)5
-b Ff(\))4169 2422 y(")p Fb(do)l(cumentation)g Ff(")4169
-2502 y(\(interactive)38 b(")p Fb(template)5 b Ff("\))4169
-2581 y Fb(b)l(o)l(dy)h Ff(\))4098 2689 y Fh(Exemple)24
-b(:)4098 2797 y Ff(\(defun)37 b(cette-ligne-en-haut-de-)q(la-f)q(ene)q
-(tre)42 b(\(line\))4169 2877 y("Positionne)c(la)e(ligne)h(courante)g
-(en)f(haut)g(de)g(la)g(fen^)-35 b(etre.)4098 2957 y(Avec)36
-b(ARG,)h(place)g(le)e(point)i(sur)f(la)g(ligne)h(ARG.")4169
-3037 y(\(interactive)h("P"\))4169 3116 y(\(recenter)f(\(if)g(\(null)f
-(line\))4663 3196 y(0)4592 3276 y(\(prefix-numeric-value)41
-b(line\)\)\)\))4098 3384 y Fh(La)21 b(sp)n(\023)-33 b(eci\014cation)23
-b Ff(interactive)h Fh(indique)d(commen)n(t)h(lire)e(in)n(teractiv)n(e-)
-4098 3463 y(men)n(t)28 b(les)f(param)n(\022)-33 b(etres.)42
-b(F)-6 b(aites)27 b Ff(C-h)37 b(f)e(interactive)30 b
-Fh(p)r(our)e(plus)e(de)4098 3543 y(pr)n(\023)-33 b(ecisions.)4391
-3635 y Fd(Cop)n(yrigh)n(t)4694 3633 y(c)4677 3635 y Fc(\015)21
-b Fd(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20
-b(Inc.)4531 3699 y(v2.3)h(p)r(our)f(GNU)g(Emacs)h(v)n(ersion)h(22,)f
-(2007)4661 3763 y(conception)g(de)f(Stephen)g(Gildea)4510
-3827 y(traduction)g(fran\030)-27 b(caise)22 b(de)e(Mic)n(ha)n(\177)-29
-b(el)22 b(Cadilhac)4098 3919 y(V)-5 b(ous)22 b(p)r(ouv)n(ez)g(faire)g
-(et)g(distribuer)f(des)h(copies)g(de)f(cette)i(carte,)f(p)r(ourvu)f
-(que)h(la)4098 3983 y(note)16 b(de)g(cop)n(yrigh)n(t)g(et)h(cette)f
-(note)g(de)g(p)r(ermission)f(soien)n(t)h(conserv)n(\023)-29
-b(ees)19 b(sur)c(toutes)4098 4046 y(les)21 b(copies.)4098
-4138 y(P)n(our)d(des)f(copies)h(du)f(man)n(uel)g(GNU)f(Emacs,)h(\023)
--29 b(ecriv)n(ez)19 b(\022)-30 b(a)17 b(la)h(F)-5 b(ree)18
-b(Soft)n(w)n(are)h(F)-5 b(oun-)4098 4202 y(dation,)29
-b(Inc.,)g(51)g(F)-5 b(ranklin)28 b(Street,)h(Fifth)f(Flo)r(or,)h
-(Boston,)i(MA)d(02110-1301)4098 4266 y(USA.)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/gnus-booklet.ps b/etc/gnus-booklet.ps
deleted file mode 100644
index 051ae541424..00000000000
--- a/etc/gnus-booklet.ps
+++ /dev/null
@@ -1,4317 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: gnus-booklet.dvi
-%%Pages: 23
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%DocumentFonts: CMBX12 CMR10 CMTT10 CMBX10 CMMI10 CMTI10 CMSY10
-%%DocumentPaperSizes: Letter
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t letter -f gnus-booklet.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.02.17:1832
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro 0 0
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
-@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 3 /asteriskmath put
-dup 13 /circlecopyrt put
-dup 106 /bar put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57030ACE57A0A31C99BEDB251A0ECAD78
-253AB32E9AD71F7E106560BA511DA17DA9B50B0585742DD7C5FC3BA0B94348CC
-1C27F194D9FD5DD303309D4E1262DC924ECA34D9AD0A1C03CA53FFC8036F7E2E
-2CD4BCCAB4E0DA5190B82FBA20E8B270A70EF52A45594AC7694410620D3C1D22
-551745BE1260BD92FB2E2E4F0EE01B20474AEBF637443CA05A7E0B10B74B26A2
-07564055ECBCD0D0FE74432C4546088809C3A727FFE5B1FD4D381384C8252E6F
-857F3C258F914EC00E2F7CFC2358216B59727FF5FBA1E338775300DB9B419413
-84D5E681B4CD663AC89F811CF0779DEDFE5C19D6B042A79F515421AFEB448EDB
-07360EFFFE6FEEA90CC2F93CBEE3D2D93F9AF8F8669A669CA69B24523F967AFC
-106C531307EDAF69C87DA583DBD6B8854984844D9108A2A80A8F5E7F7055FE31
-A245BDDC780C7557EA0ADB89681C4145BDECE9762A974B866A64AC43A0985572
-674A8B6143E9FE00CDA6D5BC4426AC59E7A0123FE2CE14DE1CEE1D36726FAFFC
-690ADA80BF135CE37E7157CEBD9AD2B0E9558B312273E48D5E2A64D5B5061351
-2BDC6B09DEB910C5B564B9EE6F5682B1E4CB138FEE1A84C4956414FACCACA131
-2BE6E5420E4F786C2AE808734394436D59A739EA3752D705F37579732B1F0277
-588DD8967ECA661987758A90E627DE0B18EF922FBA33C255DA2D65B5F0F62355
-CA7D140B162B35324ADE4C027E2C97F4667E8989930C68DA43E8BC377154D379
-4FA65238E11EE8E042A6F1647BEFA8F2B5F858ADAEE4A4202E727DB43C09A079
-2DBF9468E15E5C93CFBB7BE3EEC20AA4B794ECB6C33F2A8E61E5E18FD69792CE
-A901D8C2D2D6AA533F6BCED445F262084ED5483EA5ACE2EC337E943C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI10
-%!PS-AdobeFont-1.1: CMTI10 1.00B
-%%CreationDate: 1992 Feb 19 19:56:16
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 110 /n put
-readonly def
-/FontBBox{-163 -250 1146 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F
-21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6
-06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF
-55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5
-B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86
-0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9
-1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961
-7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A
-7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402
-356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B
-19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2
-C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F
-244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B
-AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95
-592943209E846E55B4CB54F6658CBA3C0B29796D69D0435D5431ABECF3448C15
-98CA2F36F3659E29AEB79355EC2ADF835CF0886C21B766B9DEBC3950B5B3B496
-2E06D980A8C60305B273232D4604F12632FB4F1B2F9703952C823C098543AED1
-CFB4ECF259A11985F0C944A57B5AFD853374FCF12305601200C2A393E2FC77FD
-F78C2BEB83AB223A89D9E231D1BB561CE1F4D3312057C0F2EBE3A4A42DE5841C
-76FC2DACB6AB66060F39BBC2322F2BD0DA994A0797B263F0BEC5EC4510824FCB
-4C7F8481696055EF8DE1C1C05D0674C336D02C8518CE56F343D6B42C7A97B5A8
-EA69DEE7ADE33B02CF4F76F933829F00393A85D0EA858264CB41E74E3868A981
-2B419E8D3589D2CDDF4D9DDFD5D49E2465AEC78D030632C41F8DFE22EC3F58F0
-71F6F7E8D8FDCBD2B66C36AC8BAB740DF7A644D1327039BD68E006A6F3712831
-BD5012DFDDD2B76FF5FBA9DB3900D9CA6343FDB653E8939366C6245FF354A6C1
-DEF6F8ED35EFFA585EF476968F2C493BB87F4EDAD08ACAEA4C7EE4B67A6B370A
-C7EEF09FCBAE6C68E8F472398CD0B5F8E1826464236E7B37F45AFC80D277242A
-F715AA9D4518B60BBFF8A007B2AD31A7B79C46248E76ADE55F3BAE2142CFD0D5
-619977E1A93FD9633A69A2A12CF76BC88F5227892B872AA8B3E42485FECDBE4F
-113A65D84ED470A027DDA1C38ABFA2F94E26750008F1CDE08912E517
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 60 /less put
-dup 62 /greater put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-95601766777978D01677B8D19E1B10A078432D2884BB4F7B8C3293B68BB78100
-16724E495064BA0168CC86D413CB48560D6D318357397832F7A858CD82030C7D
-8A4A1919716E8B26AFF8789AAF489EE4E0A88DC477551A87C7DF2856189E4596
-FE015956AFE5CC019F5CA6323A12B763B7B08B92C1A2940D3C566C43729E5482
-63C6DC5E834AEB4DAFB5AE8F0B8931A4687C94D11587B9071C8D81DA14F12776
-53A1985A3EBE37827656BD4635E03F09C3231F906874645E7DB3E59045A59D67
-E745D8487CF73FC50F64060544F624F357BC998A87FBE468DEBB38A09449EBCA
-D041D7C29225ACD16CB8A59E87924D15A9125F064710A6CCCA3AD3103D8FCC94
-CC3571C6F9192774FCFE5BB42A14B27960903144D28BF047BF4C77646EA7BF6F
-440D4EDEB712C63F2E8080419E42D1D58EED685EB5CDD49F80DB6E5553B519FA
-C6A39A093155802F3EC607721F390307E91ECB597ABA60A537E3F8C045BF5DD3
-D88CF6518D37FCD95D2F295D902D617440D23516D962F47750A682A319ACE1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 53 /five put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 89 /Y put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-331942DA18ADF89C5E79B969611C123465054D82CE579FD1C32CCAA23D807D6F
-D9F6442FB39EDDAB88C0D5DEF3A63CDAFF6666B37B26A65384593CE2BC57B431
-BA196A7B8C6514611D83AECEE76612E2DEC60E9F661AC23BC8C0124B56B6A702
-287B95F9FBB9C60868080FF3B0F4896DE5184F0DE05535EED24D6F001A3B4ACB
-3A2321B541464B2E998294CD57DF86CDFAAB088FE612B524C8C208976D45D6DE
-EF1FE97D5AC907C5C3F7503F6E8D6856C253B85563682BFA3FCA3CA2448D1BD9
-2DCC43578BABB343AAA7E8E58885920596ADFC972CD8383DE48DEE1F7E590BDA
-AB2464F3D91A002744C19275FA149EC5A01DF715A98F4A87948F78BD565CE88C
-97F58E8FAF5022206B77732231F759EE9EFC34EC66015D35315B10F36BCDDA54
-86804DA18B754CE39697902AA03F6D49E3FF5057FE4DEE12E9C985D395F64A57
-16F939E2A7C81D1A9AA36394FF95E1FD431FA6913CBE7F50692FE1B76CB4B266
-179A7F86D84CBDF2860789BF8EC89F6AF941B3E5BB5AE1BFB49D692AB221DAF2
-D73602AD328A345CD48DEB39EE2155DEFDC024218C36FBADDFC258EFC3F14406
-39D43410CDF82CBFDD6EA9DC6AE4E8D01AA0C01722FC5AF3EF577D1AE6702258
-821F259D914110B96AC19541D7942FEC05935A4B01A977B1C9B95843DE9DE0AC
-C14EC694A278C3E2E3F6C0EE6A90F3248A066808B8E6DB3B1FBC022E9DB435C7
-294A6FD65FE3BBBF1607475E1B41B3A97064CC583A546C7E66AE909FAA575372
-765300346821C8BF7A7154F387AF49DD7F746BF4422010D4711A33C4194CF3AC
-DC6C4E4FF9171274BD982925C2C4761F453C0F5A7F85EAD77C8D74F979E67074
-D47DA7519835E6409492C6F2F6A90983D511EDDD11C9E2E1FA20FC1EB970836C
-7F9F801792A9907F1DE4F0E927CA67C1CF065BBE185B7473CB0493EE58A39AA6
-E6D3BE6DC2BD00D4D7DBF7E5A1A8742B8BE0A067FE9903C4771C26FFA66BEA49
-412718CD449ADF85C7AF7D4AD7EFC5D1182BFE3FA99F2E5167231BEA5969EE84
-310C5FC47C911CB8BB95ED58BE1E482B40CEF32E9B25BA1BBA396D7AB322028D
-66EC4DA001741D4412B554239E82E46CDE723824C38259902F4ACF395BB3AD54
-B49642CED0FFB2CD57908194A24145687682317BDE902BC0259C4CD79CC402A4
-B13747951DC48D551D570CE5D37E96A05EDFB0B0FC7AEC7FEFEF7E03518895D6
-ACA21624CE3102DC11644486012393CD1B636F3570F74A43C42F01E0CA602381
-2078D1CDF6FFDE1BEC7FFA0AB0C8C06728224DB7319E182A82ECBC85D40F9FFE
-685999ACFE52AD5CF50B76BDE28CDC76A6908B415E214038EC58150038AC774F
-CD96B15A8457216DEAEF5E306C59ED46B3D048A510C2A2DC2CF211F3D8D95149
-28FFF8F4DA0B41FA58D9F9DED1E3EB18117178CD424FD533F442F369FD62BDF7
-F3086144A316A5F5CFD032AF54EF724B52B79AF8F397BE9900E9132F06C030E9
-3679615E6F5C5D31A39E924C0246FDA63EAF32D32C4C695318A8ADDB5764FF76
-20308ACCC29AA22494938C60F00CA86D5BCC84BEA46361501866F32BF3919C72
-8D188C4925DBE2531FBF68BB18E05D13ED2D41D776DBAA8CAE61F7053AFD8F88
-BA6E4947C0533C7889B3C922EDE668A83541403CAAF1BBE16EA4A915E2390287
-F5372EC1210172005DD7C87701AF94E0460992B8A97087BB028CECF737664C84
-1ECCDC8D5BA63B34F78F799DD961C901740A116B7DB5F47A4A81B658F5414725
-DC00BF4B812A120B7F9DFB8CDE639BAB256DD69FC7FC5F3890A8EB215728C33C
-B5D0A759C560D5B8A0D3B408E795E412F83328FDDFA92552E5D05BB5189356BB
-6CFA5B1CFE89C00E4F683A7B1E40B683C3477F43891A730E4445463CD7C60BCF
-6132ACBEC67A5252B122B7DC772B2AE58284D153C139D124B12AD4C96D611BEC
-DE75B99450C55C982A9F7A5D0AA9D63A9E24C2DC9DEB6DEE7A2ADD4919397E23
-0CCF22021788B091E01824C03DFB9955886C28FC6D47FB1AAE4277B2B34DD074
-D82E26C5FC4AF6440F12DCF508E510EDF3D8FAAA1000D71BE12F064C65149B4C
-83DBFD38905DAC2871CF6B657A17CA5E990D017B65383BAD2A537A2A9BA771E3
-28B68EDC8FE4B3A82989A6099E23938B47E35FEF91C8916ADA83C64534E264AE
-1B62919A3F1391F10CEF188DD769B6FABE3DCFE92F942797C346FC770C9496E0
-B3E029ACF7F51488B4A13E740E2100EACB1D52488133A2B44A696D3C45093E3F
-D13DE8B16042E4A83B45F1D9A88FC04E70FACD67AA862F6C8E17CB14309FB2D0
-55570939239FB717050D2F9A2CEA6F554CD483D4B372A1CC9636F2F3519D00A6
-F2FDA7D77E88DB8F391B00254A6E55A93ED906E9B934BA474965701C4C113ED0
-11A882B51BE7232FC3CBE36095F1481734035BD00261A45ED22E22DFF82B58D5
-00001512FC7278A2C04CAAC330A87DE0C675D9D1B7DE28F271AF3DC21CC447A6
-65E0370B728A3FFFF01C736D36204705F83C710ED5856F1DD88CD0E862E2E5E2
-B8521A9A77612037BCB90BD6E3FD370B3A2113A784F6ED66C138A4DFD36E8088
-EAE688AB914446E11274C1C30D53599237CEE22962266D8ACED01530F2D086FA
-E316365CE2C4D71B9B84DF09103D547739D0FE6903AC5D85E90CB3009C4C6C65
-124FB515F0485751CAC9B655990B7C99194FB157598FD3A90BBE61F86C3A206E
-32A249C308B06E9C15837561ECB0AE79952C897C047CF509916409D2B86B5DA6
-442E9224D7FFF1968D89076F27238B1438B9BB4BBD6D325331FA1ED160E606A4
-445276AA977713996CEBF378623C18FD2912B4B976CD1E15E479640CA40C1D2D
-C9A99BE56EA7D61AE00BB783B4EA7529F2337C33832A99864A46EE0411D76185
-126B9438C7C0440C5EE8A71611BF29E2064A37A2023C70E41C0494A3B61F5DE5
-458D930BE96340465296B6CC7FB8B96D98EB04F1B15ED244318D362C6244630E
-55882B234F98738A7D47E1A4E32341AED639DD70BE0292BC3219B87A17696A96
-ED3F4B5193BA0BE397009A2397CD8BF5CDB4DC2BA2BBED61196881579F61AF6B
-9D3EC04DC4FBE5DAB84117CF3BAC8D710A695086F7DA5C289BEDCE43DF3A1F3F
-C01B5D86B709AC8B6BCB7816F523EF75F238AAB4E89573EB6D20D3947D27E985
-FCD630E8BCC25E920E6A126330BE13408B8D22EBE2427A97C5E632D09F0A1DD3
-FE881979C93A586676B1C4B3C88D2F4AF379E51DC7CAC13344347A7063EFD845
-0A784C3350245E0ECC320040A53570CDC19FB69FCED5D3F5241F5D18D66FD3CE
-27D66FF0FCFA0A9C7076E8C6FEDB9942857AD4BE1FDA827BCFFD0E382C15BC1A
-7B476E9192B9E8DC95C1D22D988216DF3794755B3884D7013CD56B1C270358BF
-CF80BAEB2D968966A715B63C40B5C82E342A400223F18AC470896C7AFED625F2
-823AF4057213613F099991CE653B57D2F074903E8577CB16DB00B1797C936B70
-5CD1F3647AF43068D1B4C746152616614DE2F2BF2F377DA2B321C3C89EC01FF6
-9523F8210EC36DD78FC399E767371EB06EE2D38C351BC566981183DDCD9BA010
-58AD4A9AC600B74536CDAC5F5EE448AC2178280757F75DC2584356D9409C890F
-B68A5B59B5DDE1E052982238E0DE3E114FFB06DBB17AFFDA25F9AC39C476F484
-7153EEF61C29C8EA9B34AA5161DFAFFB669FE115E4A036517A2FBD7ED07BF059
-E7B82BBAE9FB4ED1EF6283C50C31198F36226755D3E22E6E7F6BE25BEE8C8FF3
-700D71BE25B7DCEEFCE426E92640C85F86B50140317B66CE4851FD94846F67DB
-1A17A9037785F8D713CC630AA25F0FC674641B2F7AE1540EC8D8EF880C4B34A3
-77FFD6256DE1ABDBA53747CDFC59BEA50611B41EEFA167EAE4AE2446EE7E155F
-206B2A29EF61A04BC957DEE0CD3F8F66D67327F376AAA4ED580C290D6ECD6FDB
-08AD3A4199D682E1351ED3B10EBB7A2B320A7DC8B4D9BCA029EC12812320633E
-DB7A1DD37B737633DD34FD4F9F796F76F86ED80AAA3F63BCE22EA6D41B21F0CB
-19405355CDABDC2FD59C99224BA24BAE05D2CEBF5401B5D011135B954671A1F0
-9BB55C7795FC6EE89DE1555E99F2A6EC6B8807B18BDF2D372041814636E1F695
-0E9CF606B460C7BB838A3C865723C270438FBA38ED2822B296C7734837F9D11F
-B10931A6508DDFAF696F41816B9067608E8BB2AB6ED4BA93B7F4E0EB45C02F06
-45F30E2A16728651499D26EDD06465FD1A3D3E25BB322CC1BEF8E86F407A35C3
-19366B5C5B36C49684B84C2589FB3F0E39FADBC2BCFB2E00F427FA294131F73E
-D5AEF4E779CB3AE30186FCEC25E901D362E20798B6062A1012F7D6CA1B0AF647
-C5E69873F3DC9675C8C97FD29FD4C9B027982FF47E62A6947AE7ACF9439C314B
-54D00B2506930D903A0AB423BC591E3A7D042613868A2B5AD2C3AF21A9944020
-45AD834181CAAD45293BED29C4ACB2F85BB07EFFCFF697F1E272BCBE6FB24D0F
-82A7CE7B986CEAE53FD4DB128EAE1AE5C622021E85F7036DAA213CCEB943D551
-66BA1C0FA934D29EFB332936EF6C29083A52EC8575A23819852B8CC66D8DE14A
-0899C6D4378EAA447284B65198E84BE4E0B1B81E6841529ADD2F09258618C155
-164B6B01F3DEF68BA8B598FC6C93677D03F3E472B0E28E41B758B88A0E57C078
-F32F4BB4B46632DA67F27312E84E30AB1C22063AF3BF6E39AE66340D936E02AA
-8973B46E12B993C551BBB162A1680A3131D5AB45BB4D7590F220CCD982A2BB6C
-E9D3A5C43B97CB06A3E56A3AC95C16FE432CEF81A302FC359AEE0646DB549957
-411ADFA396427F5E4C59D67B824A2F1F1BE10177432B22B42B41674215A6D620
-D6F267E4FE3E5589C6173B93CD3E8CDA18A503378213665391E36BA38F85340A
-108DE72EE423222BDFA5F04464300BFE163185890B04167303698F1BCAF85E2D
-114C3DBB20B07C56ED0ADDA202E9E3A67C2DF9E4846677CED6443DC3F371ABAA
-7FB0C5ACD27AE784F48AB59ACD34CEDAE846369D85E4DCC902EACE5367BDCA11
-70FC38F708E393FA3ED5E3B444132AF63B4A88EDE13C7D6E55DDC59406CE69FA
-8BBEAEAE3BCC02C49C1636D7A0EFB5C9387EA70FCBB27F9B5775E1CBC3922FD4
-8042D2B59986FE8841399D2E4D6C358F39DB164DC62825D3D74AA55B3906A74B
-EE3B065376ADE2A20C3C67C3186E12627EA7EB726BADD821C03FF5D4CDE3E800
-09D9C6454DB6A42F68ED8A9BC160BD9D54FE5FF381A058E611463F6D4BC69525
-A7CEB4B78954256A63941AE41183756010123CA696139A2D8FD3E5BC892E764C
-9F9D7FB8401158DF1B2112772C78B1BB24F67B0B8B1C4FE9F592D43D8B639943
-3CC26AAC5CE09363BFE76CFA0C6A44EFF885F0869BBEDFF882E4700C89AA96E6
-29749A7902B324043BE77FCC6D764FF3B76223AAEC915988E21745C8C23C2C9D
-FEDB693E7E4ABB4558C78596B8C8DE9625341EC5FD02A1DBC00822E8E790B1F4
-52012004D58414C8A292CCB8F5DDC879AA8E01AFA651C54CC77411D4480E1738
-63A3E43BE6588088684C8B84E3424AF586B9FB204352FC86C3ECA65F5A838634
-6B8E3AF9109B233F06BCE4A6CBF6C99E3E9AF5540C534781D3CD0B8F9F8AE465
-6CFA77AE02DFE91D0F9B98B3B7087A4CA5757654ECDB9B037BE8C66BFCBC865A
-EA813071AD7281D34A963A193935CD1050219A8EC7270675C9A1017AA338E568
-AA1672286A51ABA92F03AA96EBBF985B985DA3794EFC88EA69C93A46B69B3E3A
-98DDFA0040F77F11D9040A933E9A0DA010EB597F57FECDAB89FCD35971E59D12
-3A722E238B9A28FB9578853EACCA3AAE8102269243A758AC4C53B84A0863D881
-51D31E04A2D2A92B6131F5E0D3760FEB635C2ECD93319D2DCCED90AAF1E841A8
-48A5F38F8922CCEC7A971EC31D74B6AAF440E03D8922492485CAC2DEDB233154
-BC40909995C15573AF4C5A20870698ED9B74C02278B21C93948096DED79F814E
-5B7DF52E1F1CF73313161C6BFCABBDB40E94D7D60B35CA037E1063F62A46309A
-E8E335146F3E0148DCF5B33F67A14391767B33E34A02823C785750B635A213CD
-A84771D4B6D61FF7D65CFF7D990C9A6DCFF7D11F74C8778F3DB4B6E1A80DDFFC
-6087A122F11B607F3ED84CFB0BBA596DC7E06C34DCE7EF1486DE9B9B6B1F97EB
-82473DF29503E61FF937211780F33F85E1CB1D6AEDA5499D703CE7597A9D2034
-82B65AB54104066CB375EA62515045AC6F240566D15280071458DEF3F7C4CA9B
-7E13419B21607717611A61E969B53318F5CAC01FF9180E283D50534F933E1FB2
-4DA052C2F8577C613F4FA2E92F57FC3A1BE9E6F8BD4C122B038F72DDA904ABA7
-DD62A56AD97F9545E20F8151D778FBDF179A518CDB3EE2A57C102867738611F7
-7CC5DB44C2F1942457C6E7842245F068A714336606525F36221096590567E22B
-D1D2FDAC84D7E53E1263EB26514C72D22BBCDF3E290BCEAF0B61EC25EFFB88D1
-B983766CE346948965DE7E4DA2109C8CE13D2E0925B5D230087C9006952BC852
-9D5D577B60C7D083CD941EA249E7C4EA58A24CEAEA0533BE38D63A8C44722077
-16C163243B757B810D13CD45CB407AC574478A6874FDA05BDBB5908723442FF9
-FEEDF696E434669FA2961D36229DD64E434D0C016C2E48A399275CBA2D4A7B17
-8630115B762A02EBE280E76C107A3F52BA07E1C02367637FC439AA0F36E5A309
-A88ECBCC43621E13BA9D1412CF1DFD815B9090D4B5D5DF8EE00FD1A31DF4A6D3
-5DBED7C09E06A65DA835A8EF9A54E823AEBA6049B33A52AB7610FDEBACCA7CA7
-28D40B5BB9F19D3B910DC51B09D4F8BDB5027EED2BC79D9149DFEC627C8EB277
-E1B5BFB31D2D252BB664807A4127DF66E9C8A98235AEF263CE37E9398AF814F1
-BAE29A162061EF2BD03DAA16B16268A3334D8B92D700CFBDAD4D965C96DE39D0
-9268AA6A9D11C403FF3D170B2BFBEE5A8F805499F825AE5440B859760CB05D55
-493F024DD03785853984509B1AC437D4F20012FBC2BED50C5B3AA3326E3FB0C1
-2CA9B111F04931D5300CD276C936CCB7730A2031C58AC9F30F062741319094BD
-75EE0A75646A6A2CEA8730904E32315A708DDDE348AA7DC050C68491CCABFEA7
-72026223026934AFD00C7877A0FBE93F11CD49142CCCFCCE2F0FD18410E817B7
-D451CD0D799A2F5137CDC3727070FF522735A1A174DBBED299B5AF2A9502A8B7
-C399AE97658C675017826A329017E25367459C46CAC71CE7917D401F742AC058
-95687876C85705AA9DD6853DA74ACF0E00596ED1CC1B1513579EFECABC3FDD90
-5BFEE49316888B05C580263D86DCBC18F78BE58BED0DD64E455F7A88385F7883
-70DF1402A6DDB36FF93EDBC5A36062917D52633BBF165CA292A8558822C220E9
-11629D5B7FC13D0D0F9FFDD40815AE1203C2F58436C23A055C80B184D1A01287
-4ED651C118B560FBB1462689A3C340976600893B63ECDF14E5056F531C8CDFCE
-48341ADDBDA17522C0B9951D32D80DE0D4568B532722081FBD06A95BC8C86E80
-1B5CE483043CAB15F9EBF09B18678EEAA6D25A7AD6B224B84D7E16DC9EA927DB
-AD16D1487E2B861D70CEA5C81B424349BEBBFBBAE84A3461EA886A7958E17FC5
-F69727B328E1D079D0F98BBA1EED665630DBF99D2D535CAF87726A74980BEB92
-75975C55AEA05A57AA96F8010ED8B1E85F7A508108AABCBD0D3FE7D67D2F830B
-63B9E6E6290EA1B283563BD930724C4745A11DA7F75383B5EA1976BAD60818FC
-E66643106D468CC0689093E39691F03FA614658EB837305BAD24888995B06979
-0F28AE16FB00B081CF2776E42F336213B31811CEB57F4DBFB5A1C5EF045A4264
-07ACD3AFEEEBA8DF985A5F937BBD43D9F5F7B313F368587D15460A273F4A2ACF
-32C94935960580FD51B177714C23991E4D9991621E99D96E03B3403DDA3885D7
-E0A4D1F9DBA54BEA9B3DC7ED21FA8ED18C3858C861F730FBCF2FD8750BBB35E2
-A4CF9B7A7B769EE6EDFC4CDE0072D466CA61E8743FC0E2AF50719527FC9CC3FC
-4F1AF130E9204972DD045FAD6A836030040E3E769786FF967E5430AADA9F5BA7
-F4B2A78618FE4F2A8AE138F2977C10FC6FC3B57059DA43CC971439DC43C170CB
-B47DF3A939F6A3F4344721D08C2939771BA61608DE96E7218C4F2BB449D83EEB
-2120A71E1B6FE49F2137BCE29399BF8FE3D77158798E2433642B5AF8FA4AC080
-24870E05E5351C98EC7A0F1F15F0309DFD3F2DA976172989DC0BD3FF32627A33
-88CC2F25E30DDBB5F7595073E3B69967A4E7B138BE7EEEC8F6EE0A363053648F
-C3FD2C9B584308005BC660FFBEC8E370CCBCC28F78FF2908EF74AB735D414699
-5410A026150D7D4C18539DA13D7A28F1D04A27B9ADC533F7217829B71C954BB3
-122D0E9CA05EA13F8AD8777E1B6FAA948683AB2B4AD510352D8EA23FA6E6AAF9
-D06CBB874DCB0F77CCA88D280CAD0E97D4661A5BAC20C0612564AEF2DDEA37AD
-1E9E2703B9AFB83AF1CC4229A8A9CB50026068B46856DE04A0C94EBA584003EC
-966C471A340F061C15933AE02AAC4571C562960F2014B41E15F456584E2E188C
-F6E3ED15A19F324CC17B715A7A1926B2A6DE01329C99CB040B3F5A37BE1E5EF5
-2EA5E374D6AD7D0769FAC3D34A521B8EA85AC2A5422F4C309798AA803070DE46
-B86141D056068BA00A345E1408CB582CE10DB970351BF2F355F7D32DE5BAA3B8
-06F04CBA2C7DEA2A8E3FCA193A078CA52655F9146DA4303A228D773B02B4631A
-70FADA4F9548A5ACE58F7C907263ACF724FDE1E82F47A11AAE4C00ED75FAA7A0
-89858BABA114B41B3289F1A4BBC9BA4EAA02020813423C6BFA45C6C9D95C8193
-02CA0FF7B2FB0A1F5168DFDB385713F3D9F2715830F9764BC016C3CA5CAABBB1
-B704F3D7301FE8A961C8103361BCB3B40969A96A22F2744737B6ADA2ABDCAAB5
-1F3EAD524A3DFDE199A9D06E87729C520D312C1CA59B5878AFD9A5CBEFA907EE
-492576ECD05E6F51256174C41DD8A9F4646010609912BFA641FDD77A1966AB6D
-4C723A8A3BFA55C6ABB0F69D0C2F1C30BBA7E7BFE217F5B6E31CB6589D4E97F0
-FF3B9E6218181FCE7A0439A254543BBDA069014A70885960956AC81E3A450BF7
-53A59F124BA02A72D4201B46465762AE579C143F5EA943BC3D93173DC27FE678
-1F408F4EEEB177304984121508E970866BA4F6888D22D653F60143CD90AE67D4
-FD4054EF70162D5252D3370FCE13C0E0366E5614D65747A414AA42702CC7FA54
-C36B6E9143DF0835D5414F9EAFE6668B6EC7E772702918855E3969AAFC89C3F4
-29239EE9953CFF5848E8BC04FA9702E8E5344313F37C48B0B9E9315093018474
-637469D1850AF738517482692898987656F0CA14C3091CCD080C3FAEB02A0A73
-82CC4DA2E60AFAA299ABF5679FD5806D20B5A1BD85CB7E93389B6E63F8B365F0
-38573DD0CACCEE2EB713411057EA6CC5E0F4517395CED9165CAC183B8536EB1D
-B94621BF6ABE1CF0128FBE95E7051FEC47481AB391D7023340B66A1FF8CA4200
-E06D3E7121359BE9C63E04F1B32597D4C41108AD8C868A26CED06D7241C07527
-40D33023AFD4D3C264C9A583E3D5AFB9D3CAB0EB5BEAFD4F012E5F6BED0E55F5
-593D1E696C3F6606DDF2960A81561DF466A10406B296F686ECFAF51A5D017406
-DEC73D06EF5CA783EF3B4D03A8E4E37393B9356AEA788AEC5BDC16708D470F22
-4B4DA6A85F390D0B90906E81F46FC2A39852503B591051ABDDA88392BBE2D186
-3D1DD279A566B0A23FA937AF106FAD4B1AE6170DEAAB519F7CB6EDC352DA91D6
-30A30B70E3D4886C1BC6EACA9203FC21515D3706A115F9E2D430957ABDB077F6
-2AE94C9197A4B3BE6236392E96BE433C063AFBEE39B3EDCFF02D790F453DD372
-0065B24210F8589E864535CC3E6BC1E9967DEE1346272CD0116F4A56DDA67B81
-2ABE3826019A727100AC5CB358BF9DD26C7E2DC9F29B5F9FC9763FD5CA81621E
-BEFADFCC04846FAB053887E1566C239DAE3505E23104F6088B94083ACA1DA43C
-41992047DCC923D1C206816DFC3419E7902342BBBCE2005D9CB0E1785203CCA3
-07A545E26BD84AFD80083BD58F5D217EA190565DDC653124E43CC8C2827DBDE4
-B5217931BEAE4A6873CE50978247CD2E48BA8668B4B36B3A37A1EF08D3D19FBD
-32709F9F31EA4311F1DF393EBF1B876B3BF5047FFFFA7240CD41FE769318DC58
-1DF16A3A8ACCA24EB905AD1058335C893F420A41CFD8E56875A2144EEF25894C
-FE6A227FB6A856A043F9C4DC7E77A5762EB8C9F46E2E46CB9CC7260F893127BA
-D5D1A781DE7DED5CD7325BCC0AF99CE303B72BD83DF1D08FF4AEC50B15B50AD0
-A7757BE5D0A1AA1C50B78934FD24F518B4A17B62D27FFCD767F20254439ECD62
-3A247A5CB3C050DE0426D0D220CB3A98901056EC90C38EC7FC2D3BE08B6DEE5B
-F6F62177B3B5D080AE1E4D21FFEA92C87604B50FB4A16FD4EB3D28F08D1E330F
-64A83864CE1EE1F55428D7CD5E5D645EF4998D1EF6041624DA46BEBFA14A32C8
-5EF6D4FA176DADD6CB90E3340FE60B1FABAC2FD6EB3EEF4BFE923B6FE66ECCA9
-F63F813C9B37408BF89A94F0450F9F8DE6D671C8A95977735DDDDC275659A458
-B4D9F805909BB97DB7532ACCB1946B6D4CE2D878D910610AE6FBFAC6A1146838
-60E05FA48E463A52AB93D657FB35CDDD64606B44A4E6A360D036636903BE101D
-8BBAEA722F21543D9EC9A2F943AEFAFA93060C97CFB56AD6995172915DA2FDE0
-EC80C3E08287AAD52E4E2EF7FD257934F03461C4D00C7E1C686108E817532714
-6818FAF4BD40810EC9B8DFCBD0D9C2409ACBA8AB5DC8AC3E2A3B822E9091FDE9
-86836156CC7BF4390ED2742767D048C6D982898570AD7EFCF386EEDB5EC7CEB4
-3E00657F9990B2099F91F540943D1ADD9B6B0DB429D9FC57477BB7F7165C54EF
-BAB5188388BC8D2D54BD81F52005055408B4CBF5E590A043CF8142417787F6F3
-B76ACAC3F565AF3FDCE3366DABD0CF85F83061ADDD5E1BCFCE0CA486361D09DF
-B195F399E4216820861A2503D829A5328AFD24E7B7DDB9B23EB675DD9DBFA945
-9EFD9BCDBB36D37438F25307E99C683271CC4EB434A059EF26AFCB95176B4823
-811F93B036E708F3E6F2F2505BB0093ACBDF045A2262E81F1684E64A128E5A4B
-B499F2A1482406E9BBD4C3DCB546B679C676065972C80A18E82E5BA47539A496
-C7BE08E3C8A3A796CEC7D30A333EC870DA3A26C671D2BF55A87F696266CA0639
-AF8DB19068AF32943E8CC4158AB3528FDA63DE7B58E7E4532D7A0C62FA37ACAE
-1DC66844CB3D1C42C168713F2A6584B9DA5A11602B4AA1BA34B9494D7E18CE18
-6CA0A0FE80B9C564234DDD4627DEED8E9A0367A8262AFADFC10573D9D0686F0E
-AF8B7D849A8E826A2A0C14AB4807ECC7EBECEF411F0FB3A528BD2F8B109A722A
-6DA8AAFDE31164AFA47C68738B6B0ADF57D9710CEBDDD1D2DC13FC6F8378F8F2
-D269B9260669412AB6013B64CDFF68B20D0EE77956AC102285E6197C5ED7D001
-A2D6CA95BD572B8307053D3213763B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 51 /three put
-dup 58 /colon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB73439CB0DD021D44A7C11BF295E81733
-4DFBA460FF3D654F9FB337E99E6D66FBA87A817EB9CA1536C84833870E3626DA
-55D48DEF261C3CE14538C0AF5D07EEFCACD74368BDA94AAD203CBCAB5465F186
-82746D4C6A28F9D30C715568BFB011B6C12327592F8B086ACDB860B1B84DB9BE
-5D62B68E710728B40D3955F2954B2172647A7E768A6C9487E3C56D4978D17EEB
-2C720C85A83E323316607D56427221155B13CDF2BBC71ACB2F390F74E4109406
-70F027BB697124CE242BF18BCABC31F73E1809D2905251CD45F02B39F4C7641C
-162D24071643036BEC9106CCD764E3BF4835180A415348B848036DC6131FA96D
-9F4B393E53015524F0B1373DDA8D93A68E8175349188C0204483838C4B9C9DCD
-4CABE113B257128A83EC5F01ACBD3C7CACAE82688CB51661E40BF436628C2D94
-445EA8814E2263B4A9171EA84D964AA3119948D4B63E570B5A0C36AE283B5868
-05C7BA57BE5EBDAA1FEC31D8156D239A8761313946217C12D9286E6FDFDA75EC
-0E5B42D509AEA741853283CBDC74DD1A10BA88B3C2CF9A92B899C8F8ABDEF899
-0E9BD56E8C4CB7196FD7BAD6C8CF690C4D4CEF20D632F79A2B82DB1194883E0A
-5EF5CC7F4D1A13941D1FF042DCB7834749500F4351F88439A9D234B02B22BF00
-85153F38C6F10A289CA60A13240297C6076F7FDA18A72D10138437EE44F47A32
-D8575595299ABA470E16D8D084E652A76AAF7E9471AE8FEBE5AEE0C0708320E8
-D6C7D8C583B812FCC770E14214522C19D9EB6219189A4623EA71E4274BA24933
-DF43A387F09730F9A250F75CC7893F256F89EA09B37359CAA6AB5816339B4FE2
-6ED8917BD41E60877E62A9FD24392F550A5787C961FE2354A441102CC7A3C0A2
-017ABC2177FD83C8865A819165DD0F00EDD38F868ADE447D8F48DE07C687E4C6
-BABDAB605D5D86A289A8618CCA17FC406CCAAB0839292A4A1AAC91FA705E540B
-63A6150DD6BA5247D7A253ADEB87A5EE05742C7B2C1E4EC27EE4AF9BDE1A497A
-E4DFF6285E286C39075D9EC1A987B85DE7DAC4A8E8D9278F9D864A7D553D204B
-9C28FD08DDFF76B910715E8B98FFD88F4C346A441E0D4C268DD401250F6E071D
-6730D1F724BFD73476F31A4D5C020F3C1E093B15AED71A403D3D17671E157931
-8C443E8545D122085ADEFD305279EFE90BDF8832103C2271A1EB33A4B134494B
-E25BEE707161B04447405835A633D126CD0654C2F6F3122AA7C4D61E5B454341
-31E17EBF13B9B41E2F04DAD907074BE3AB545A00D81B5CD020DB050916680FBF
-C9FD2D2A0727E7E81B9E7D7C58F9BEDD98E6ED9A01DC44BF1106B8F8A3D080DA
-0CB931FB2A8C3E2DF229206615A04EA3F9E0215375F90C9189297BEEE692802F
-75875E95666E455AE3BCC5B94DA269C663A8B27538AB78889581BCF5EE594087
-87BFD4594A27B03630E806C6F191D634F9D24510373C7BFB2A3B151BF1CAE371
-18C5956BC9523E372E720C0E0CDCEB71848D2E18C328603F6B480736E6DC0164
-83DB39D529A11D5E2A16DD8405471BE0314F081CDE35719C7432DE421D7E5EF7
-3D31A22243386485F5C975E2B8C62F897E917E9B48C716D29D86FE0873EC7697
-DCFF0F3362DFDCD74117AAC219A9F295FF8654336AD04308F9E006D47C6BBD5F
-A1F2175C2EDC8B23FF8F7FC50E3E6A67B01297099335C04FF4395C58389364CE
-A05B63C4F77D4D19671C4B46A790E97259B9D34E1B2155FAF5C27E88093F29E5
-0A88D76CE7C25C4146D2BB6560D5344462FA0B28F7173BA5ED4B0A54EB880055
-8052F0D50C1625776BE94A4085C6E7FB78108EA387EEF0485C71E4960C8436D5
-8F3D48708B0354BF59ECCC8AC90AF19A92B600EA9341E8049AB978224F925CA1
-D3E16F3608668B506427DF60472A5E1EC7A43EB60D280D2579B2B4AD708178AD
-27BF68DB7B4E341A2399309268019736D202E4952154715F3F6C39EEDFA2B5F6
-12CA55FB56DEAA6792576CBA328F54C396D75C4DDA7BAC2AADE8861B6C8FADC3
-9141FBB1C79B7FF265454E044B81E757B4F562604235C1559CEB012E13D47308
-2FE032ED75CA5F543969BDB56340103787650FF7DF4FCAFEC472D6F4D80CABD3
-95EA28FFB4014B99211702C460D01CF679A9835B89C9B1EC0F5917924AFA5116
-9A3547D81212935731BDD7BD099342A6D3810AA6773E8AB10EC42E2E5C7C43CB
-256D240ECCCF989EBAD7B3679F5B24ED8779A0E4A1923854F45C9646F411BCC8
-71FB9ECCCEE45FC87857597FFAB005CD0F10509C5CDE132883D58D4D366018D2
-FEB8846698CF41A4894EA69182C48F47F1582297068624B21624C5604C70B81A
-DD33FA7085DF4D6C8104027939754510A7943E7A267F669BD47F68C11FC96A0F
-6994F4CF95E64C52308494100A396712889566501A97EEBC333DE9BA93F31B7E
-3494C7A40B37DE6239A84148A09644618D891519BF7BF5079B06781E71CC4D1A
-7ED423E8156D8CE3F8B1AF834817C186628B9E41AB4F99C4CA5ACAB118A8A28E
-18C9970DC8C2C2A3DC60DF42B294AC0603AB5AA798B3054DE3A81EE161AF7DDD
-EDBA0A81B614F36460CEE4E99E4C0421F8E0AC5CE986B56AFC7A5329D24939DF
-617BC4EC5ECC462D6369E16E1D26D3F4585C2E234B816A17CC7AD8BB26AC62BA
-D4152F6307A1DD4E95637697CABA4B0F00C50B25245EBACA28DAF97618E3B8D0
-32464AF7A9FF3B582D5D8FA33B274F76BC846DABF491B7A445C036FC5B5F0C71
-6FC7A4E029B2E4384BB95CF7661C33C90EB6AB12685B1D6A410C38D3CA4B4F5A
-B3C2488762F2B8ECD440E8985434786DEA5006F65E2E5F5656023B237C079CE1
-EDEB5A95D9B8D657EE7E4A289F2B372A91629A70F78BBAA6849F4508F3258D55
-F38448AFFCFB332C02A8F747A7E6595F21D6413694C82A96726BD5C9EC74F304
-44E32B7BB056A21AFE8A28790E140C9521ADA2BA82F655DC725201F3076BA07D
-044E0DDF34E6B3465B90519B47D484CF91B31B161120019EC07548743928B550
-37FF94DFB5983E3D95FE1F4FCF5DF0CBC27C3F7F79575B4B9C112F07D5A0538F
-A7789EA1350C2D4DCB472DEBB3A58460E406BCB29F7D7EF04686607E2BFFDEBA
-FAD0F98B0767D1A19D6E48461C8DBA9056525D5D537EC56E9B0843B7787466B6
-C7303D72156E4B4538AA442FB96FCE0F03C328AA001B0A581CAE397ECE3C949D
-F9BFAB59A0ECDDD9FFC9F1B2D7FCBA709F5A58D650E6FFC0285FFBAF5C1BA13D
-4D77CD5A7D85F9F80629F65B1D347CC9ABA8232E74A5A772C610B2ECD90899B7
-81CD4BEC821537DC1CDD9E5F3C58F75F726ACE574B0E643A68652FACA4CB2809
-E6A7BC46A4AC1C797F821C183F5B7BF0E7B935862132C308EAAEC6AEDBA86442
-98369E0C9DF6A21DD7C440C1C82C7FDCD95AA8104D84A77593F81815B88845B4
-CAC9186F2320AA0AA5994B534B72D8CDB91241726CE3B537862150A7E93C4DF2
-4278001759256A463E0EE780C486700450C286C8C37C0B60A076B895AC116FA1
-CAC514BCB15E82E59A71CDE6B3F8FD0F9E298B1BDD95B8BA996680D35ECB060F
-6635D60C21BCFA41BF9C0AE9407450BA86D43632C554BEE240E59444132A31CE
-33173935FD428943F27C7D6B9689EFC4C59AF4B9679AF0CCE2D9C39CE9BA9380
-67FFE0495840A9241F57B06ABD2C8C24450718E4D3A387C74D1A9706218A7EDF
-964227DE6747E1C88E971A5572ABC171BBBC5C3F064ACB9378A9DA35A4F89FA2
-54FEF44EB8B19686FB61F81DEF8BD7D35F9B387040666A4CFEE70D77074D3985
-CE056AA89E423369741A7D5A71973E49C9DC9AA3D464FD89C15110F559BCC359
-E0F12F02D4711F54A10F4BA58726E837A327DBD36CC420A184AE5C0C97C17281
-218EC9F166FEF376DC8B22E03F974AA8EBE598945A13E8D4D28329A660B4BA51
-A23C7D8AF15D7059045D1EE9F41913F1700F41C3648F3F16833320E88FF1A780
-D2DCCB94EFC28A3E628ECB571854908366D7805385B2768B8A117C15C059E688
-8AEDD18885E0177727B304FF3630B75969CDD990C7DDE10DE4E50DC41A2AFE46
-10651E36BAA92DA9E1FDE92E0F8C689495C12058B5C01EA8A39575471446E820
-9F068414A4ECD024D28E5635F9F0F6695A775EB9A19766766F13ED39350FF230
-970717EA4245E8A176FB2B150D6F790D05FA75936F6FB0C13CF47E2B457C6118
-B04C7D350F9CBA86EDF404171A0887F7E0A3CEBF016A0FEA8ACEC09076494FD7
-B7A93696C3C6D498BB89C41AE6B355AD4551CAA6E2A755B436E8D6960BD4A849
-71D4D68643E524D6CC2B909144BAE7FA35E432693B5BA6146F23EF1F1FAD6C85
-6E3DA573EA8F69928331254D7DA243079F7695426533990F6282939A2CD2BE71
-EDF13D938AB8D440E1F4D3346305E6259E1CE52C2F15A643E33BE39DBFBADB9C
-C2F0DF6568E7FA4C229C722A722AA5B14FABC3166F9F2170DC082DF6897DEEDF
-E56733C7156AD31D5577C67FC7551C189DCDF3984B3F4873ACEE4C28166E9E1D
-C85CA23B88BF54E56B9B001D5EFF302A134301CDE12FC5336EF358A14F387AEE
-FEE879DF032B65A2CE8BF0E6610D1E197594B947198A14616AD4B288B4F42594
-5A55D10228ED75F81B7A6E51D72B610F2B9FB348137CAE8D6FEE7BE34CEB7246
-4ACCEFCC1E46023009FF18ADC18CEF3861C006EE79A69066E233DD3A084A49E9
-807F5C8D089204C97D95883CB43DDD25949864F6AD2FDEA181D6D95C5B50500F
-A9FE3A8C8C13696669138B24269D4038F1483D45DDE34C5EB31984D7226C83AA
-50512648994D4508B5E7FC87BEF9DD22CDDA111CB518CF123354C910D3892578
-F94C25D08633A428EA144C222F052502F39B7ED781E9A25EF28C0B7DBDE5F551
-A3A4DB51AFA951C1474631837CD091BDFA747D73A911DE2D0A3136F11483C142
-586303FC5238323287B4091F17F51C40BE192EEAACA596FBAB0F2B6AC5548BBF
-FFE32B64809A71F973C2A6D807D659029132C42EF05AE8720381AB007258F74E
-8C3D1F8B47868FDA1E8315A91FCF828BDDAFBE59D8A0793424E44A5DFCE9FF67
-3889F8363D92FF6D88BB1A1E266330F5BA97B6E09AD6002EE100440DB372E5A3
-8C1576A7F45854A4BA3A9AF7E5BA3338CDAC032DE2FF5E83E54358642A454DBB
-D1DBF68378DE355B59797DFFF678AA242AFF22819418DF8ADC4A96B6712C6F3C
-87606C53003B46EE015D4E076714BEA316830E6FDC25D63F2DFB538EA71C4EDF
-A0489F03F9DED8C6C4DF5AD7122588D8291ABFFCD8E94C5859FE8320D8EB2CC6
-1C6406CF0959E4ED23EB633F88D772BE533F6E10733081EB8EDF5105ECB24EFF
-5940A7CA3456E755E30EFA77D4561048EA3610E3AA21515AED4C2F0DFE0E00E4
-E309772A31B39890F58DB1A6884232B2A71AD7E4360F8338AF0C951A08D592A9
-66D1A5D92F2A5EAE938CA4818E2D9546E02AEE318392FF8D0428A4648DDD5E30
-8A9FEA96F4A744871C2535CE84F31AAC35B1E507BCBD0A3F38C62B87EFB27DBA
-2E74BB6686FB4C79AE67E5922A37878FCE64D5C4764DA46D2647355C53907DE2
-FF4C2DA4081A98951CFA9EFA1258BAAA2213443E559D5F50BC16EDDB09BDA691
-8D35C80691478FDB3DA0341CE0FD827F98A159A0F6023F8DC404F5524F106FBC
-17AA86B9CBA5080B41D141B8311C0F9797DDCBFA120801FD066EAD7C2B816B81
-BE61D751A4791C5CCB83C8F92433F526757412E8E7B20CFEB35632D601913F0B
-9E84D106B99A6C366B1FF829997A3FDD87D423A788CC160D558AD59CE2F275C9
-4401F6DB975E2AE2F7B45C70C50AE7D556E6083DE28E6AD0D3974B28394410EA
-CE178CE8319A529DB95865B82F3F53E06EE20E9FA70DEDE906BA4DE96F1F3B21
-B5D992BA16176A097B6DB210430B01C3BC689C6ADE7C4911240DD3AF5F4D8132
-32C5A7B5B6C37133B35BA0C9AE5639351D9EDF8E1352D212EF3DF5A5158080CF
-887346467F49B9A6DD802372CE73FC34540AD0121E897D84152B64BD0721FE84
-E88927694F3217A0D8316C0BE99DD684014A360F7CF85A398CBA0BBBE177A3CF
-F05A2DF43CEC93DA419B735EBCCCE5AEB0610CD72CD7CAD1BA8C394974AC86A4
-2E2171C473EB9943BDD075B01F4320B39C1A3C9A8D68909ADE0063543D1DAF81
-00959CE185E96870F199B1E27555603824875AAD23DF7BF3909DC446EFDF905B
-0E1DF67731DF20BC6C6A8794E5AEB35526563D748016A369CC78CF6506568997
-4832AA528A7D61A9848AACC14080435F4C1485EDE2F17E292FEDEBCF4C2B9309
-5E11AE7C7E74E148B6B5B6621129A0591D042E87334C794FDD077309EBEA18D4
-3CC26C96F6F82DDE429F648CC39FF3E827BE18D0D90102942875984F4E985D78
-AAF75597CC6F41A5ECCD11BFB458BB73A61F7C01C7280E301FB0DDB81CAE0F52
-4A82A6AEE509EC2BF352189798B346D8865C5FDB3C508C60C201CFE64B5975D1
-B71719E46ABA3AA52287B200623DFB901563432A5037B17756F00C0FC5EBE99E
-1F69FF47F52C5D3A627F17AB19C5AE40845527FBF7AFCC17063979E8D6A6DA7A
-BD42B97B9AB1614B30EBAE85853F28DDE5EDECD42413E1085B1004544E752B19
-1E461B72EEC0BAA7BF34395717BB25661105650A5F0A195E42AFBF80D1DBB4A9
-5EE88F12A1E09904378B4AEDE5A7AD3CF926A24CA56282CC70E5CDAEC7B2CF38
-0B12ADAACA7B5CBDC369EFE71A9B910F495D884CBE7EDAEEE6017F1DCADA73BC
-3E640D72EF023E665E2D08D0742A5A6FBFE8C1633E2EDF1C3CC3D0C6643C7CA5
-6C2A8496EFF4C50F972CD37737D3355CAA69F4D1F34018C3B68028AC5425C96B
-54B448EF955BD7B70388EC04DCDA0CD999E7038F771100F2864220A6B9A72B43
-92D5237E22A55F72DB92C265EFCE8B0B20E51DA10DF19E68D4ED5FF3718703AF
-0230F261D0311A166D1E16C9BE3DDB28D02A3BFAD21427F0A725BEF62C4C17F3
-003FA2014F38F8F0A965F10A6121CFE7079AFC996DD8164EC7CAC6D870260487
-D554B3EC13130705F7DBD9ECC6AACAE5F9A2AE166BC71353A5398855907773D3
-4756689A7561355EAB7E871B0DE608FD43BBC20EB78931814BDE794F45A7AEA7
-A92F97582E7079A488098B381E6410D3946D2ACB73E865FB49E806F5D668AE05
-47C5ABF285AE08E32045D24087B931DC94EBAF02F8358D674CBA97A3E0708BED
-9B6D55E7CD7044BB25C1E96EA516B503C4D185091F55551E1F1B8BF925E44188
-28A1668C90ADDFA30827FFC2840C728C5EA2D3241882596F8232B91DF24670F2
-FBCD9929E57F9FEF100C8C03D74DC8930B845BEBEBADACB35DAC2EABC393ABB7
-7CEE82F823794AD857F182753E60B874B527D66AC690131DBC3886F159A722FF
-3B7830AEC1BD49D3D4C87DCA623233141E4DD81369943CD6C03E62D39176785D
-D3EF16F11A3162C102E7429F3B94720F89676D7C7E42426F224C8BFDC1874341
-DA6B35DC8CFFA899C4ECCF93AE5724F01EFA3B7360FD0D6EA3CB943ADD2F723B
-2FB72884874EBC7B0E1EDA76A8AAFEA746BB6EAED407D554BC261CF7E25CB075
-0F53AD6E5CBC29C49C11DEB192D508CF0EB1ABB4970A10AB7797B41C294295C9
-DEB70DC3A582859143F074F137CCCB6AEDCE4008D48390A3FDD35A0590023A0E
-FB3D65DC5679ED5D47909043557EBB1AD8945983096B0D9C6E057650F229ADC4
-2C0494633805F89319EFE8A5B063A8E9C67E83005B1DCADED61B81B20D5CF78B
-F3E70DB1DD68CE6D860CB308928950DE9A7B5FC5FB25BFCAAB8551D6D7B37476
-50B213376A8167909F95952E5379DC0CA0EA2485ADFB8A3D07F30AFBD179CF76
-6CF45932361C2E693A04264508A4206A681AA9FA70C5BAE52416ECD70F7C2898
-33B787E3D76B0E232A95706BF5C6F40C75883B752487E6864404A76940EFAC23
-1D0B7FE592B4AF04F69D075DA097C19B87EF6554AC94A48DAD3DFDE665C473CF
-5AE950F66932474A9448B1D4083373646849C13E01A562D43BD418EBAEAF3A5C
-919687AE5CCD3633EA440C6EF9BD3A9F1FB75BF1678166B72B3CB8E13543BBCF
-837205A4C1A61B0F4B2D98D2729343AFBBEB0C59B1B7719185A43DAF01113918
-C89958DCC11B047859D4ADBE49606ABDC8ACD9D3FCF94D05B39932F36154ACBC
-DA6C5697A0E868C4604D4C7985530803E6A458341BE76959489B61D681F07D1F
-CAE8FC93E2864DDB0BC0EF7000683FFB1285CB13B4F6602C98A9AEE3D7F1CE58
-C8B78D004FF35D31623CB2E8DC18B512230537376C2A9E7366D7A8F296CE50E0
-FC20D438065820AB2B2E0DC974EF515F5218478D577A51EFF5881F3783DE7908
-E18D7C5B4E2012C88173C225263E5186F457B58E8A8561CEBCDACAC17B5A6FCC
-15725D062E1340AEC46BCB6A9AB0BCD58B218122B04BE74F352C7E13171D4005
-02AF3C7459B35EF085B8247D5A582F4D8C3C19795A5718CAFA6460836B54776E
-367931B8D5FDAD890D7AF9F426999CA7B715D686D1079B303639E228C0254E8A
-399835F0B3F5669D89A783263ACEA4E63FD9C2EDB48B774064F8AF45357EF710
-82F270C599AF4223F75E7A32C9CCC82FACD11F81C85BC8483E860D938E6F9DD8
-EFB64D4EEF307C1940C238CF674CA9A9D24454E0D0611159DE357B4F4C13A8CD
-0D40A5620166D952029661C1B47FD716010C3F74B5B783E4DFC993EA78C9F355
-194C7B93E63E012F13F1BAA690B38E2AA01FF1AB8B07349E67AE79FB965EF406
-37349BE3EE4C43151834C98465C52534AB0B46D2B586D802DADD06013D1072CE
-B8E6FDCFFA9544613780E98D3BE40CBD685B0895D04F3B43A5D45B89702EC5D2
-2C00DF71405FF1EF17563035A78D845EDC5DD6FCF66545A87C04B008383E28E1
-A73E08A0FF057D4289E706E029A5A74B5273197C358903C459FFF85460E96E2B
-505D75FC2C1CB44D62D61010684C0EF67315C12DD5F871C9466F8AF75347F439
-1AB75EBAE512ECBAE841DB5B65DBD8907286C2F16E91B8246A50CAF383C17ADB
-9D933E3B0BF030357F67C49DC53E1AF3D93AC8EEEF8722CEB6D232BB6A6F7FA2
-D0E65E88F9C6D3C701631DE0F634DEF3BDD267BA5724CD93EC3540924867834E
-52CA46B2085641282B7B04643DC21F26EABBD3DD3263FFFB1FCDA700F924EB23
-023E86C6E06A94C51572BE876FBBF18FB176E86DCEB33E58868E94FD309CDD27
-73867C86F61641786BB52CD94B39B7239EF19FA30FAF283BBF03935C668FDB04
-E975A381BE0BF70B47DEFE5C22301D512CB356C5F987592DEC7352C728BA7470
-D3C5A8702AF12E960B640BA301BD7217FC7020ED049F03C1142FBE6AE44983C9
-1165D364210F9D9252EA1BC3ED36AA203749EB393407ED92BA9839BBF54ABB13
-B08378FCD5C23B03FCC9CE6D87209E79CCF8364269E3556568467034B6AAFAFE
-4D7F6B9F75E495218F69AA8884C7A6791A1AEFE4ED94A0B2331B6276ACA4A885
-4AB8791E94DD9881C8AD291F4E4A4D16D63BA3FFEB3354A2FEA1488F234A3844
-B761E4CADC4785B7BD6E9C213CAADDBA31AD9720B281C14F11CE88D074422356
-FDA4A90D7EA2BF31AA783E17043B0D16F8399CAC7375CA7A538793BED6CD2F64
-B4B9714CF2B9F1602A02AD3D78329A129FE39B6B4FBBFF2DE2617A5AAEA87249
-4AE9B76AC8F138E7985806F8BB1FF14C80D2EAE9E2FA022DFA3198408E9E1C7E
-73C90E92AABA26003FA393A99901586DA101BED54D7D6EBDD052E5657BB5F775
-941E104EC0A469A7FF1F6E3CBF445C9B8EEFDB21AAE1A17933D795D837EC4FF3
-85C20F0DE40C2DDC80763A6D9C7ED30D8222BA2AA7A031D6D1CD6DB3FB5CB043
-3C7111AFFAFFEEA12E2A4AFB290FCE2A9C9E38B8FBC8314CD12F71857309D0F1
-AD6E5837AA630829BF0FD7B8A91BE8288747F0517128977BECC9EC9C9D1657C6
-EFA030806BA6BA21FD88A95BDC89E2CBDAA68263513F5B9822D6CAB8F1B4D850
-8678ED0949A6F231FE82AAB1B251384AA7703A1C107B09D346991012E9B1F5DB
-0691B2BED694EA55DCD833A55CBBEE420C2C081B9F2EDF6F9163B0BA533B31D8
-EA3B7790A131A86F4EE9606237AE503A0A18BE4019D41454F9D6C244DD278AA4
-694DB86F1A1C66149DC4DE6A23365D132873298092E127B419A89599F8688526
-A4345CA4F819BA09770E14DA505497C78BDE870F0B70D0F442CF1E7B94C191A6
-4D570EEE6DBB62485724232DAEDA977DE0870DA0D791C76570F9ABC5F0340026
-ABABC70C21C2528E47FECDF110C267A5FE78BB364E6D6AB0CAFD2D8A9FBD4D99
-2AAE4678C59752DB699202DA6938A09964CF58D7BDCAFCF2528C3C3AED67128F
-F4822139251368E558C2E2BA30E00BA228747D060F887706C0F2913EE9497872
-6CA6104C3FF2FDFD042D074F1FDEBE6ADA52B6E417FF5D80A77F54705D13B447
-BD96A8573F7C7882A1AC225CA0DB514CAABC753B4733690A317EB2B13825FD4D
-7279CF4F79D0B66E6BB02E7AC825CC89A70CB817CED34C99ED82A49804A99127
-7539874F49B20E18623B583FE01E025929A0C49139125E065EBEDCA347F2912A
-2A4EA5BC37A54BFBA306FC3F9A812EBB273F33D8DAB116B84B66BBE56B7DDB14
-40DB0995B87CF90791807BAF25C692FA55572E95690E142398F43E14FE64369B
-B865F2C68DA38D2880A50766566693531E95142C459643225894E9881DAD9E65
-2BED00D3E79BFC3E4243E9A71C898787CB7AF8DDC263B9277B69F8EB7208CA10
-8A84CA8D353F43F516E501E8E60F3BF48F35077C689F29074B1D22076755D2A7
-C158544985670273B564A4B486B4E3E833163C9124A3D66BD89944C54FBA69AC
-A60951F71137D96F5136543BCDABE00E8235E6AD1FD1CA29F40EA034889FF968
-1F328C2E5048B69E42DBE67EF61A89A8E1964385E6AD8895ADC7494B516DC526
-93D8343BE892C93589B8E9FF96CB43FDD05C11B3817CBAEADD18F85DD18464CF
-8F5FEDECF55F79EC3093EFCBA427757A3860081DE0879FB1C439E989607C2642
-AD972113C391A421725E0FE68B3D31EF0F2CB66E7190909B690F9EC91C74AF1B
-D073E2C6831684DBD022BEDCDA51073424EF79EF52A146D56D293224ADA12C51
-9C890E4AFDFB7CDA34ABCB1436DAC32287CCB22903678B64716E25538DEC17AE
-BA0289EE17E8FC4BD09A30AF3594F3512E2717D6119727AF0B2DEFF8219440BE
-12E4B5B20FEABE2BC51E0BA882B2C32B8F2C0F25EF876FE6A1B1F39F63B95ED6
-E1759911CBD6EDA0DA4FB7790E0334E9F567F8CF2D9CB32854C26B008408B63B
-5FD7C47E91A686EC298BBBA0A66BA2F17F52998669FFD4710772BD29DF44ECA4
-98BD87B5DFEE21B4E6E0FF266F156718E8419C1160878BE60431F24650CD7385
-71039C9FEE067BC8C62DBB3EDDA61032E2CDB2EDE53CC96A172C847AB5813823
-60911763597D1DF69D804B33B3F144936720068A5853803B95008194D0A5CF1A
-6E1322C05DB00CED12E9BA797C46ED5711A05F747940C16A265EA5B7088180FC
-782D2E7971FBDE27793E4324AB252174DC46417A66B368641B6F639D3E8CE428
-0C6DFBD2FF4A16A7994B495271577A45CCC4003006A60FF860EF1A7B00DF9BE0
-2E5B574ADA9C7E51EEFAEE75645C6A3358F2AFD5AE392BFDC1574C1D163CEC2B
-ACE0A453DDDCCC3C01670BCC23AB93BD100B844287CC43ADB3449854ECF13452
-97C7CF21EC3DF97061B8EAFAA39D48C3668C4B1EDA91970A9F129DA529CF821F
-04748FB84CA3747FFB26BFD25F9A3CCC49C8D5D97E32051DC1948DF66D371E90
-398D16ADD731B5DCC662E0626D68BC8D759E3A55CDC5A9A1C550038EC997010F
-A76ECE272AC82FE057CB366B2B36CC83D11BDBA97D1BFE06C8EED5A19D2CB801
-15E41910D7AE2A8CFE154400289CEFF63675AE00D1F9605A6FE1B5D65D70A719
-09258069A04249DF1EFC7EAC90BCC824F94B8E03DC87DE612CB178BC5CB8A674
-E8A10D6DF44F2E68893D9103461151D5BA7F9EEF2EF952C2E6D23C616972D0A6
-D3062D3BBAD2AA46ECC87E9A02367F8F52959A9F74A426FE17ED2A894DE1616E
-298DA29DF7E50F13516E8732AA5FD3E580BBFE3D0EA9712A6B3254A0F020700C
-CCC6861627B5E1EF93473E6CAAA556C2ED6EF8F9A98F6CACD1333FAB1D5C0CE2
-1F3D5FAB7561725F2B606FEEB9419318F69E95BF9A3DB7E6C16F1933D5FEFC56
-BF242FC9B939268A695D3341FF27383DA852A477AF8B969B89486FE50C68D0BF
-36F2ED911F12C51FCE5BFD9D3A17F600D9B9C807A350A045EA7B52EB30D382E3
-21EB851CD4F6BB5A22E559DB70CB5520B2EDC42380B962EEA42EB083EC5531F1
-7894DFB87224C6187427B9184FD9BB16E7526FDC692E5FFEF9A51EB23DB04341
-0F228E1849C483E5CAD6D1E419195D97608B3D89502A35D8DCB415B3A0FDF8CF
-02E4ECFA1B08D1443550C6A1B2DBC690BB9916CC2EB710F044A2E7BDB06AC1D3
-10245D0D451E2737A409260A6E37D02307A6581AFA998F97FA1046A2B0C392C2
-DBDAFF905F2D331A7308DC160B7E27A676FC0C5C2381A83E6713CD2D80073B3C
-0EBA5539E793B3CD07B282990CA2971622B1A80272C3715CCF5FC18BE299B35A
-86A9376FE12E31C9453E4AE17F2A3C3F2790C0E770E350FD7B7995822FB08115
-EA59000C14B67D0A6F0BB5969C43862C5D162897D23108D2A30A9B0D56D9099D
-5515F595E03D5368409EE05241DAF52EBF390C57BDE5297AA5153A1CB64621C3
-A8FC5E52CC90D9635C02F11CBA2181DBDBB6DD85C0B778D9F4B8FAFE5461CC42
-9F8950CFE0D173F0688CB8F15FFEF1095C06714E7A400AE32B191C7C074A47EA
-58396C20E55B8CEEF282D9222528FB282F8133408854DD5BBC3DF129926968B9
-96CA64491F9D6717E612207ABF832D0D52E1117AC05CBC46FF2AD74C245E1FD9
-6DA647BFEE0F98B5463471A7226E35979D21767957D088738DC87297D70957AA
-2949E38F98AAB7EAA32F4B85DE8F8D966480C079301FB70BC2451DFF20A192FC
-BEBD18CBD0B3653504BB48ADDB6AA7EC1F6B382E4787C2E354ED5178D7CEF606
-A5CB12D5D17386E49FF8CC9576395695252B3432F54E5616EBA9A4D524936CA7
-297F43686CA8FD613F4F5757689D221B65B12C3F9972F85B1A72009CD72DD001
-CA908C84BB0ED57913B5B976E2E464567967F17C2DF7926EF7333BEE80450675
-3DC4D84A1485E31A512FDEB1619D09D0DA43DA763E6A354EE12576026CA5503B
-669E6D2EFC62A1D945C0EAA86C6BFE933FA0EFA00CAA04BB4E200207DDD3BBF5
-FFC1058377A9A0E92A6C8443DF9F68DF8457BED7B7420A13F79F23FAF207B360
-05FFBEC591173CF8F39FFF766DD25122E6D1247A12DD5F20921A47AAA7FB26BF
-9A2406C95DEF9BFD49AB7179ED57E7B3E5724EC2E9FC1F87A6335BC55754B86F
-EE8E99E45A951AA818A6C0D6E3D56A3F97F28FF1D40A34B4D13790E270902A4C
-7BC76CDFECC8AAF220A5D698BC387B821442C0BE024117CA6E52C1759723DAAD
-9809D984EC7F8FD9D0D604D08BCD4F763A72FDD57189BC512A2F6F0911CB5788
-0E5EBF4377E9A25656B2A671F17A88AE76FF951A4143C882D531E14E63C37852
-9ED71D70AFFE1CAFFB2350850BE6FB4D7914FFEE9BEBAF7B92A97086123B83D3
-E3D74494502F62155993DE3B63B302CEB37D021506F13CE940CEF49AAC14BDEC
-78687D564312E3576B3E2954E46816A006CF1F5C681D5FA3114F0C5E7FB1B5BA
-9B134449FE8D4E3856D584BC7FDA65FBC4CD454F7CC21DEA953B57E0C6186C15
-9FE6A920398AF774FBA48A4CB47D66CCF64355C30004FBE13A29303552ABEE69
-21805589C5E04747251D260BEA9FF67E8627A43F60FC1A7AEE778AB69CC6B384
-902BCDE4C976455B05D747485F837FB69FEC9C8F7B21DF057ED184E2807F8A9F
-626C0D5B1E930846B13B16297F7E416CA30FC8D3836EBB3D88F2EAE685BC1B0C
-71A9F08913289828B25CFE9954CAF1C18BE7DAB644025968F2EF748D7DDC58C7
-4CAC4F74BCB480CC4727135C4866454A90A354586730455BF9E02877448D99C3
-865FE188DD79C77BBFD6D7BEA36C984857A56B0336DA81E9FB4BFA4630C1DFF9
-5D23949A7E0376880F970A956DFF3879C8C6BDE6E70E9E53F50984A2CB471EAC
-E2BFAC37313E698E3976842B0A0A08A99486B89D951FC2830C2492586906E63A
-26DD78C575BC641A1CED9B3D7D36EB29F261BE64F117DD96D2374F54D3F17889
-0B8D9A1B24DDE4B039AA764FBC7BE7510C70DCED3BA151D87CAD2C1E965E88D8
-AF97B802757E1C6382E85E1065A9B2CD795E12D6D9A824586CA2ED21CE150229
-8922087AE0BB0B5A02DC823B0E0D28AB0A627A56F8392614B3F79EF7430811FE
-4407BC1E9534333705502812BA2935F026472660A3EDF8F82A21ABFF923C0899
-427E05853369B8AD8F90510E7A167E5688A2FF11B24ACC83D779AB582DCA1552
-CE0DA529E0A01A22BF406AA86EC4C2234F7C42928E73F09C4163AC6DB2B42624
-FBF02FA40F57FA7D20DC43A42BD5CE0A3E089F5E979514AADADF7292F9EF5C4C
-974622867ECBCAFECCC18D1E97BF8DD7ABEAAB4A311FED1AB25455FF2811A1F3
-70846371919CEEC20EC6B1563B711DE9434D5A29FEDF4AFF303E41E95D4EC4CC
-2916DB84AF68804EC25DB9653D104013B3957F35A6960A67E8DAD91F2DE23DC5
-FDD04FDDD08165599C1EB8B773AB17D824CAE14E0F037476CC81FBDFB3058643
-0DC07DF5999EAA577F93AA85C435B8BCB48CE739A058090DAFC9342977FD1E34
-ABE0FC946B2CA764A317F61D5C91AB481F06D33DC18D666CCDCC883DBC50DD46
-15E19DA6D060DBB54FA6C1A04EB2C8BF8665116A975328C1CB0E9FFD988555AC
-31CE3AE5938D92B42C1B5F199AD57A3ABA8670E52A50E22490892E6776137B30
-8064402955792441E2215C6E7C3D992CC37A95509142BB58973905D47A71E2A4
-6ACA15FF2C96DF2AAE34EC24CDF25924A84D10CF3013E33612F365929099EB49
-834B601460BF3F692B3AE9636A8471DA375896D834941C8EF861C65D9C6AD172
-8D364263B179DEC2A871946DCEC051C3FB6CD5630D6610F5BEEF3BF6FB129AE5
-CEC3A0D2B7E720A785E2F3527D2A91C0A3B1B848224A2DF4A0FB909513622119
-20680804F8B5B1385DF54AB4FF45908B5C8E46AB65E5173D6488B49EE4FB0082
-BB523E136AE710BFB7A37CB1B61200BC94438E29CFD4DC994C11820C7E661BED
-8EC5504BEC09B3B0AB5BFB11EB0690A404FA588821FD0FB1776E4EC34D6C9972
-143A68E199F1AAFA718B76EAEB1C618FB88FB43F316915913C0AA2EB24F24AC3
-91D1364A7960E4E2E074426AE16D779009AE34DC5B6C617A561C167433AA64AA
-0713264458F0DAAB97FF276533242139D178A5FC102139BE12D0C6985430D364
-A3B361FC440662601DA89A95345534D4069A43CF59E0D2DA90CD52D0737A8F4D
-B4E1A21DD690231ADE0531A8D933D40A1A4767EBAD183BDB7608571A6087B59E
-BEDDA1909E44C5956B085D107EA68AEB984C7823AC93B6959C86BBEED5EF12CA
-9B6610FE
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT10
-%!PS-AdobeFont-1.1: CMTT10 1.00B
-%%CreationDate: 1992 Apr 26 10:42:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-readonly def
-/FontBBox{-4 -235 731 800}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19
-38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF
-D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204
-EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727
-A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593
-F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714
-4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA
-6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E
-A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B
-E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F
-1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438
-452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF
-8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369
-5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA
-DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9
-BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19
-741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79
-E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712
-E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7
-D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE
-C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC
-FF798F2ABFC4F3539392985C4CB324B0007229586D1E0321559F67C057FD7902
-194490A4C133DA790FF3BF23A13C2B1B69EEB75950F9106F2BA1E3CA65C90FF5
-931DADF03DA48AFB8561FC2E710087251BFC42B80B297A3DB0DA138A7622A931
-DA293B0C740987ACE9F2A8EC2DB98F85783C01623FD3612C7E4A84FD93446770
-C3DD7431F955A5F3734F6931BD790F0A45B8D17CB74BDAA4BFF6DAB5380CBF61
-72F37CB67A909E2842E0AC5D9D07D01A4BABBDE2AC70FE5753460D7E1A708B7D
-0EFB2B5FF55F9E4571C466AF1F91E545585845B09D855C3A01F713C1BF081EB2
-7E2A0E598708737D475BEDAF60BC100FD0A0628C6001A203348CF6A3AFEE6DEA
-A2EB57E35599FAD0B8A52BE1B77757E92EA2F51BF07A285E26A452F417D2751B
-3D53F9D671EEB920B5F0325D4D4C2634C07508492279701623E5224F9DA08DA5
-E0A6923FF60DE967B397E5FF727EDA6331CD8A7AFD99B233FD2F29DFF4DAEE2F
-19077C666DF3D5ACB7C7A5D8321D0F0A3BCA7A7AB68700D672AF3BBEF1809303
-753E5DF7A93276F4DAA3D09B72A1248945922F39E7AB9B8A6C79FE2124E63F81
-0E6A3000E8960E71B73E9003276E22FA43B41CCA6555DA1A22700A87C2999DDE
-579B60444EAC745BA9F007005FB64503947996D0CCD37B62DD6513D2AAA3D092
-47370C35C4DDAFB83D725A2F5158FA7E35DDA46879EF7BC3CD137B7E911D460A
-E3A396CE584E5EEC3789E72DE1D7D5770F0A04CC74222484F667011FD890B85D
-140E5CBF5B51C4D72D979F0EF522D68614EF81B6454E6BF8BEC3152F43C1D2C3
-4CF67D25CEDFF158E0E172F1FFE5FAC28C1C21FCF83DE1BA49EC21C735B1B356
-B32ACFFD6C18EA4C7CFC5EC94FCE6B36D4276637F53938A262EB354B1E1CCD50
-E75053787B56CA48F01E3F04CCE15E6E4BD7AE6D4ECC97A2A69C3179BEDDD9BB
-4DD7E669BD039347B7069A110CC3A750B4EC32F701FA042A50D4FA886F2C0858
-B776B47F02F3A6E16FF1B47C0BE0254A0DF84F099CA11A4D8CD69A8FCEDD2006
-5E373016B38695BC945374E44D33502358DA4931A199C6A0B7684CE6A5F68BF5
-AACAE1692AFD11500095266537753C476B5F50E6450425F3967A8ACA40892F4B
-6BB307862110EAB63B20F3180620809238B7AE8D4DB6EB8954D76D64D7BC964F
-16C63084D5D37F1C2CA1473AF1ED7B8E2BA2D376084E634702DBCBAF5CFD7587
-191198B11C410222AF174A1438EC89498BC3159964D5B76688757581AC78BEAF
-347597FB5C9BA56B004CDE62508D08E4A9D262F025842B2F7D3F36CE4222789E
-46C24C8031FC30501EEC14CD4EA39CE11FE9FDAFE524AB4B45DBFD0F133D3D89
-E8B0354C92975815F596A6A0D4A9D726BBCC097DA398D7E3F9CD3960ED09DBF5
-21CF052D84903D3B45C117C1D752BDF820444BA4E7B252EE8172CDC518954F6D
-33BC85CFE034B4A955FFBEF3591B95B3198DEF089B380572AB2D158235081A1B
-EEC413879DF147A49AED3F57788DF45F6F14D6E1F7D707EF27C3843B504AB16A
-0F9A521F5B78B5A0BB903CDF6FAA52877B246C62452346455D090A38126EC54A
-78314C8A717EA3A00280FC8AE6EAFB8D0564E4B2C6004FD437163590AD9B88E4
-590E8304229671D6B6B3B9D729315DFB475B7DE4C9C8852D39CF841E1C383D35
-30737F50A78FC45418833216362C976E9972BEF15C2EBA00515E7E24C30743B3
-500A760976FDDD46E4515F52407EF4A58B25A2616B23800B4A7597DDDFC77C3A
-B1C7481343153E67419C5A7D3C897680A9B7A02221266936CC527B53576EA4CE
-0FEA00283036AF4EE46247BCCDD6EC5C4AEC8716E79CDD3793C4B1B0BA2F965C
-2AE4C39480518BE6970A3E668D8F84F2AA00448D794E064731D6FD591A8FD65B
-64E32F77BCFD8A3B20CD9382F0C19E8FDE7A29B785F4C0367CF0B072E7E03B1A
-E61918832E077379093CDDC111153ACAB2C0A907AC671FE264B60F55A9812C09
-508ACF47DA10AD207224CB50A7DF6147FBCB08A517360046223FF5B0B03C93FD
-9C412E264586DF9345291EB12339C0C435C6211E818D45D50A770E811C774732
-95EDD1B252B774006131D52C3C3866C72C41FFD36580A6EA45291F8B2A9FE190
-BEE458AFD39FC2B0A1BF16593C8E37A54F1CC54F6C34A0FDB3D2BEB1DB6202D2
-194BB6F6160467DEAC412D17048D777582A330963F3E4635C29DF4D316DC6A00
-71B9D9D5E77A561A86B25EAC15D014AB4BAB38F3D60D596D23B4B1BF509A506C
-3EE8E4F204960E203E460412808BABE88375B989F76735937BC857585722D2A2
-FFD90EE1ED56895F15737A6F82271D1625A8DBCD6EC116A527BE8D0E7D7FAE9A
-FEC69B06D7EB89904FB82BD7C76EDCFDE140E4D68F3243237D86E67F4C1AF65C
-4B4ED683D1330E879202E1029E013949A3B5B75F092F1FBFC89093957F83C6EF
-C010B3D13B140B564936793B0D5E5C71DD5D11978868B1A8F14E1F91C0228807
-9E3CB0A24F55201063B3F953324439DEE32F3E8F47007489B700FE66918871CA
-06A98A89E25DAA476F0F6BEA50C1DFFFFA49C8071B03521FFE53D7691627B438
-CD80D943FDF5E01F0A1D9F8F493E04D0CC9B231252242685A9F9B5B96E5694C1
-7D135678863622202BBD917904041C599DF9A39302E88DF425266D888955D8DF
-56D7A8A93BC0CFD9CE3BDB9344B28396B3A754FE8A2E2BB7A6DB1938D7275A3A
-847991DC9D98472181FEDAADC40A0810AD524AACC09B40529BA6F2B0C7D99847
-9A04539057C79F903CD4FBD7004E952DCDA7A61533D6BC7AD370FB7189413744
-BD45AE3A13BB2551402ADFB9FA623A9487013C608EFE25F24CE777EB152D8C6F
-5AD4F12891092719918DB43D113F7F0D6EC565003270C5EF85195ADE629CFDA9
-DA8E17EF3B882A9097AA0854CAAE8A8102762F082ED84B1F317FF69E372B32AF
-0D7672679A0A03E0A613A9222B7E5EE8DE08DF7043E8D7050DCAD2118033D4EC
-57F35C0C8B607BBEC49D495B2F2A9DD69C4FD3E94964913DF759A500CF25E1F5
-7CF6174E813116B3E7B54A895617C8FC00E1F9D34F8F75D74FBC73DE4370D907
-E3EADEFABD0DE72EA4119202CFC32F5FF9CB611EF2D4376E6DBAD1AAEFC73833
-FE6A08028AF81229995AF0646FA1ACCF3D93F73CB43AE9D739C4C7731FD09A93
-76BCE1B756F8BD5214AA7474445D62AA808918EACBA03127AE41B29B78EC8A3A
-17FBD8ED9E73DE5CB9AAAD3EE447828B699A3322B1B26C4CC104C8FD0190E864
-B6B84D2AD0F9478344983438B61D43BCCDC9D85F8F0C9F1303060248BA9D9CDB
-DF5017A7DFAFCADA079C5596351DF4ECDEFCE2E08C8444298F5559DAC69CCD96
-449D610998D326C6C90560102A8F823E5C4A65F93C1FC2FFD6EDA274D5B20B92
-F5C2DE3ADC966019CBB6A26E21509C854C218EB1461FC3A51EBE003EC9971D5C
-03D2BD56D4AF35AB9EF784DF645BDBAB1F08A17AC62958F4695401D24012DB42
-CC12E37733B9768816CFD76016ABFD1A31135D8D6B404F22E6F543F085AE08E3
-449CB50ABAEF32E214B199D0D63F0DF0A7A2571C6D0D0F061EF810EE36D23893
-19BBB9961DB4D54F3582F8A0B372302CFBA72861EBC60E228B44DF0DBDA08C95
-98B0FC34D407A120A6A642D49A8FC0C50AD576FD744090B7D25193AF5F35C186
-9014E118AD66174A7E62DF12696F4844134D24B902CCE75B6E2B5E6AFC8EE691
-C81F5C5029B0048C499B9646991CF8C556A548EA34D10DE706D47B60D20BCAD1
-50B63E07821BE8F2E3AB89B350A6783619CCE1FA047F031C673DE7A408804117
-16B7BC8A2BEAF91C15D98896A5852BFAB4EB0CDD899079ABF2989964C832DF0C
-C9B6788502F4FB4B3F6DADAB5A35FC97983E436DA03AA33DBD3F6EF2C8ACB12E
-4AD050CEA10D67B9DADBE70B6B4172D8F884BFC3029925424DE005181FCDEEDF
-E5ADDAE02D99F5043728B4AFF6FC3F1EC28063E70B74FFD8BA970A8A5326B6BE
-9A43EB0B35B49FB2A15EE670A67221D5B80918396BB74BD4B111A1AFFF653DFB
-BEFD8B01BF533F41C769A4F3BDA21489EF5CDFE70262AE0660034B4AE0FE08BE
-8BB34B5188E47CA5B2BB3991B9EA77DBF9B902D0952A28341E59307BAA8E45ED
-F901CA1272CEC23B5B9ABE7EB55FAC42B24AECDB85BBAE4271C089E249D6B38D
-EA4152C06484EF912C035DE301C3352F5879DCF8D8B9BE878F4D06BFDEE05BCE
-1A5BE4AA949B73E8A84CE1278EFB79976EE93CE4F282583848307E1935006C61
-67305D7244D058B2CC17BBE6E99F4DD07ABB7A7DF01CE3FBD60746CBEF68AD1F
-8E7578346A27F0370E27D5D184599FAFFF4CD4896A18502E738EC4D5EA79A726
-0B350FC3DD3E5EF41B3EED04487255805DFA1C3D6F855A5105512D67F8E09B75
-8C0584058132B4D36720B4CB026B292D1D4511E1C310EEB6B742596ED877BB5A
-A55DE7CE8BB87526C9EE5E6708CB189980FDD9A012AAB21448D838DFA9774436
-296310CED1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 15 /ffl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 61 /equal put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 94 /circumflex put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65
-0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830
-B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D
-AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007
-97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8
-FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5
-20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4
-0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F90A32C4175B6BFB279
-024EAE1B04D721A6C54FD623E38A7F3F8BCF859C78E546BBA7FCC19854611A6D
-807792A9BB489C26149D05FAD3B703CCF8812EE946617AC1DA9EDB3A2ED55D49
-DDDEFA61EA1F01DAD8280555AFE0A03B16FF19B8626E724B27AFEB8682C898CB
-CF84E39CE3B141286A5994C60855979B402B85355D38C8282CA1FE2B6866F39D
-40CEC013FC39380642DD83F730C9336723239DBA45730D7217E40F526619FE6F
-0BF2211ADADF1135C691A3FF5C68257D7584F6824526B4D7068574CB36B7FCE9
-3F018B6A9A8F9B38BCE842100D72E9E948D1C6C7B9461A52DAB14D19C5674618
-5BBE9A74A927FD1DD053A124008AA010A5C1E67C4691D6D16D0A501EF725E67B
-573D49D451C96AF80597F94E6852CD7EEE8C3B0F854BBAE757C88EF056665465
-1085ED1F62DEEC0AFA18FE805F33EF3FC77FBAC4435B6ACC0891857D99FFD9CB
-77CC83F29DAEBAB59DDEC7FFD7FBA1AC10F8CD29B1FA089D0A6037AACECB9F9F
-F00BEA4A3FBD9E493DBADB3B5FEFE81DBE8B0D883A7B31475E66F685940ECD6D
-B48859C824FA2F48C9A647FC70531EE020C9DEEF720E914308F3E914A3EB1D31
-703482E9C67ACD0D4E6630A68D7D5EBA69A8E4EA09785BBC0D3E101F3CF87A01
-2199BE3358CA844F24B95703C918D12C373270D95EC7BB9535B379A208FDE826
-8D1553651A1C434283570DBC57F42E06725036778EE114D3C1BDAE63F93C1D6E
-CF241EC3F3724DB2EF043024BF0C75EC1CBAB4FD249C133229160EB3DF0B349F
-42D13DAB4047E22758CC35D6936FC14C8C711EF6FFA6E0116FB519A7B507295F
-C0C58D564A2A4934E33C34D525376D8A00262757CE0DC4BB61BDBC29D6DF5F17
-C176523B0DCCD364CA8C1F272323156F8111459DA8A09A1DC76ED46AF19D911F
-845042ACFFA9ACB399723B1D19F99B293715954AA68FD6EC42440357B7C4A758
-6A1CD086791F92172EE2E0240793F31139AE723140CBA57CD7942D236E72EE44
-45B80724C124BAEF8EEB3699BA3D3134790E72790126362DCAACB3B068E48A9A
-46A23F0FD2285DD1D4DAE8D4EA877B0E3574EB8E27E0DF68F2DAAD0447C1912D
-7D5B8AB1D96CF8926C19EEEA708590E7B46DCD8497A7A3E921A3CB21A43590C6
-9FF971DF49C48B362119F0015362EDCD3A6902263687A4C98A8F7C911B616DEB
-36A764559F25F6F6BA6F950586ECCF8093A75296C7046080488EB9DC920F57C7
-BD4B8D7AD35EB430EF00E0B8472E9414A43F0AE5D02B47AE510026087053C99E
-87F0F7EA60D31930AB6ED25984C2322D8E78184A1B68002611B28D8928691439
-1378D17799F6CBBA2B5D4A77E7D92480922B62513CF3B35B13170730EE733A2A
-D7460CF8294405D1B606D0C1A3D558AAD6F82C8FBAC5DC3887E3D2E86909CDFD
-42FEB809FD6EB85901100FA367DC8CF456A517176B92D4175A2B06A144BA91C4
-AE282B4D5758925895CCF6C0A22A08CC31255C06A585F3B7BA122889973D1B1F
-C171C76868897D6C4D07D6D0998EA1881428DDB3B60B749D96FE2A69E87B9B43
-C591FF9A7EAFE37102705260CF27B9F3B1AFCEDBDBD9C2F0154BC01FE340864F
-5F57BDAAD7D8A6187C4BA3F87B7CEB53EFA234B8FB2B5595BA0B6B41998718D4
-7A2668C2EB85231BB21406DDCA0759B0A6865207AB97CA226211219C690F3E71
-BC3F6B552E158DACBA3D537BCAFF71B1858E75CE9A8096EA14F8F27478E1EA56
-104B6187DC4B5013773E5934D947E535E6A02E5B3088B2FE1AD3CCEAD8D56E12
-3D05F1279320F6E6AE2E5407F983DC0A8DF2FE91412BE71A495D62D07DC91F77
-39C5DC20EA59C8A336CD187ABE7576B3098C5CA0304AD4A2270EE9839910B4BC
-B1554622A65C1082884FE7C071A0C510F928D04F4771B4900A95AB7166862793
-F07BD20A7C334AB6977BDDB78A8D2854A8B60EEE28E37A7D3DDE760A1DC3E617
-097DECDFA7FE2444B09947C113D99B74FD04B566513C5C765B32EAF5B28374D2
-A121A103E074D3AB3F66E2793BEE809EEC075882C441D991ED35EE5F7C2853D7
-07B57072C47E8804D1D6964491D9AADA9FE1F5E7CBD474E4F9AD792159C518EB
-0642E027F33C84F019678EB4A33913545085D0B8ABA4C66691DA4194C199D78A
-D93301A5A0198C78E4B9CF1F5A0DC9AF883C98D5E1186FB4A0EE876461BB392C
-9D264C18697A6234E88098D9A865526195580216E951FE954B7BCCB1699107E6
-B65D804E6A0FE9D5A3484BCAFE408A2882C05AA3F88CEB3E9A50DBFD7E590049
-BAB0DAC9CDAC62A3F2585C2D3AEDD293B05BE3CE35DB8D88FAD2BB225269F4DA
-5D75FEBCF0FF31FCED794A0C6095DEC54360514FC2FDC7F6D7B09257867731E4
-171B7367AD25A328972DC7910B274718D42E1E9306F2D7BCCFE493CBE0603127
-7656A06CABB4AEDA23A610EB414D0FA7910E2EAAC8F515E9059210BE4A216269
-9C1FB4264E9EBD96BBFE00A95BACB47699C9EAA1A0013C7DC721F63005437259
-7C6FE26C15E3AE502D1D295F6126920E8C86A754F524E1F461A384260A7F49F8
-B2A2F6BFFD7D8C2F1EBD1B7B2EAA77481923D9F98FFEFDE599FAF75BE47EF9E0
-6E2C398ACAA6B21B246E06B6979DBA4D1594CA11BB39D942329516F088E8CEC6
-FCD5649F558A832BF516F7A4DF0EF8E8E35CFD023B454383967C8EA805BE4EA0
-4E3F526C769FF910ECC3FAC4972A1AE3EE08BC77B48B75263F3F63A0E719A4C1
-47E21D24FEF5E2454613B37351BBDD0DAD3D340EB38CFC51CF65970080E4AC74
-CDC251C70FC8D04D188694BB1A5A498124DDDAECCB22170A0B288ED15D0911B7
-91BBE28793F2268602000147534292C205255C4E9F6643C20F67936F942957D0
-163A789A94214BF37D9F561012ADF4375B41D4FA0DD52202B060250F946856BC
-045171711D26453C43F65BED459ACC0CD3596AB452195BFECF9BFF49A3B1B58E
-749D001C8FA8B81293A6B064BD561E2EA00D3E2226377F57DF4C3291F8C52674
-4DB9D80AC1E2F87AA78EDB8541900ED84829325F0A07DE05B9E5CB89E2CFC344
-206ED1C0C325D9121C3D8161F1A76A14FC4BB46DB014A58F364D75D2701BED1B
-18AFDDBD70AF2F5F1837B10429F187944DE81FFF4878B45551D41E228E710C35
-87F3633E0A05A95A082E47A63D1EF1135F0A062ED2E734232ACAB250B4F821B4
-2E83450A2F8D3CDF7F55A9F554374658B373265AB95E60604993DC31DEA76121
-6C24B27841F9644C06C2A7242459C6F06A1D1D48CC938846CCA7698527635504
-EB5482F9B93B7E531F7EAB88BF86F4BD757C3FD9D0ACDE80899675395EA27551
-29A1E8113652BC93ACB6FC3813D109ABBDD5C458FF5F2A78B3EF3B4A935F2B7A
-2DEC26246E97CBAB69698D4C005C8D5E093907ABA3FACAB29AB9A2FFE363C1DB
-2C3F70BE13BA54EA6EAF09561904744FB5731302E2F85E74896B1078F6EF9381
-AD473BFB8852F36201CEE5ECEEE45F84D6FC22BC6EECC8846F74EA40A9048F8D
-E8F43F5689908E228B74266DBCC3EDE3A666FCFF6711BE61C7DE61146D9BF691
-08587DA7C6C83D29C92C3850C8263724FC55AAC0B228C390A47A56D7CDBE63C0
-4AF87FA92F40EE921D852C1FD5BEEF965D5083631682CF558C3E319C60407F1D
-EF606F8D72B9D6E9EA1B6C2F108B2B87B583410494B4BDBD7AC2EBC3A7BF6CA1
-A6A809EEB67CCC83EE39FC8D2ABFE3F3A7CBFF91A1AB4E84D3C310260C7BCD97
-DDCCA9C06AC86615C9A1E0AA194271A9EC1A80A6CE62CEED1A9CA26AD3E9BF2B
-E9835F60325D08E797741BDE1613EAEC4E330EA2B58E4C4B837229663B761F49
-217B9E268B161C10B3269160761C2B7B415F1C9BE713609948F5AE2E6CB8D61F
-5037BF4F4B887B9C98167FF4585F2CC87559FEBE0DB85059FC324651FF8551A3
-97216D31138546B1AE5A15AF59078779A9F89F2354E2309B458F2DA1DA96689D
-29EDA5A14BBF5E6E8AC03F7607E512FA6BD27667E7E55BDB32593E9449C1AD66
-D0A1E5C323CCDE758C9D47D34C9D57EE7C5DE1D924FF718CC13D439605F2FA81
-225D1BFEE6660B79F0F4CE2841F918D2A23F5FEB39B6F17E0D9FF5E249AF7D42
-72761F12975764C5DAE5F8B15809B527B2A2E13B68287371A46FB5AC674024E4
-1AD37DC93E612A828B6F2F17B4EAD061F5295CF12FE7C2E2DACB7871B87F86B6
-B4768C65DEB8257856F3EEAC2BA6E23EB38C2F8CD4357051202481325F9C3B4B
-8F7950E5E079154A0830EE37239DEE75F9947989E33E491C53AF18704D8765AB
-999E73B05C7C6D056B0D7DD13A10880DB342A95382A8221A2A9CA371483AE915
-01853F72328541C1C410FF8F12B5548EE9BF7FEA87462469BFE8C4AC108AD56A
-AF7F8920E0C75BB5645A716FE8564FAB8E98C23D548F9C01FCBD8EB1F51985DB
-9C268AA1BC0D53A6712E039C4C22CAFC287B2A24CA1ACE05FAB1F8B3E02DDA27
-97195BD68395E8CAD87BA53725EA62E439FE52B82993103E2550677ED8590FF0
-CDBB211EE2086763D599E809429D5489F2193A318422ED157E2E87BD8C0C72A3
-76E4593B36173E27901A5CFAE30353FE2B4166A4DACA2454C1667C9112F6CC1A
-CF5079ADD92A7F713D5C7040EA54BCB4C6EAAD34E6EFBC7B25D8C27FC91589BF
-7CACD2FE2916F0AB24EB8600237AF05187364C74F09B4DACB92E605DDCEBFDB1
-09A7A3B96B3BF4BF0E991F41F59FB1A6AE46158A7E560C7D22CA7934CBAF8795
-0B7A19157E3D14683AF5CC5D9C25FCF4622C3ACFC2D450950D1F218825E51428
-37446EB3A54B21A12764FD5FC3E4AC8F341DDD6D14F03BFC300608A62E112C01
-188C921686B1F04F7EAB620FE6611E4802559FCB11C2AEC174AF421E29A6481B
-9675A3A6B869D8708E034CD4314671D83521A0A5B00696EF1D1694A0B437991E
-64CB71E5BB48A8564600F5C364B2C188CC5C49B792396B534228D1D82B640E0F
-E6A80E5B8C86C6AA57B0E3657AA5B0BD51EBBA71438BC6BB64890E35710705BE
-D5F56426208E8D049815BC3F4C392009407C2F1FFDF5FC444CC1E18A74DF4F9A
-10FB516C1DA7C1645BF8A36B686301F34EA4253CCF8D5A3C2F9B918B0B748661
-EF649697A1121BC6758D79B068904C6AD976D0B6E9E570CA204DF47FA970C8A3
-E65F609353505C5709332275C48F023260F5A87B2077223ECB8EFE1A6CDEF505
-939B30D50F571C0F2BC703ED479DCB5BE16691AB6ABA0D3095B82C98EF829478
-91849CC9860A9A09A621C0B61D179EB875CF827BEF9A0B7F9191B533304419D7
-CFE5E31236498A850DBAD71EC6E53B5C979166EE82A4B6C998193BABDACB7B7B
-8824DFFA0FEF39D82C12565FB8C18E9EBB4C81C861A653BB738A67B0ADD596EE
-13E1AC54A9F1278796481D61580DEF9D4EB8F6955B95B2A48B572728A26AF46E
-B1EA7978CAB67979613C45885FBD90A61ED0CB2A116D87C70D287CAF0B5BBF03
-666938E785E6B85F64729CF4D1C73026E25D859544F17613019FC37BD7269456
-01C796C57290509047D7950454E0261AC3B986396D342A58C6BE6DF1B6BA931F
-558F32AA65B12274C20DF3A9B141C74A6A6764191C7E2ED9C847FC4B7C996D51
-190B7EE0BD9D6F10035DDED9D31840996EF1B90D801A2B632C4BA69F5BF7CC38
-10935D1100B01E0249E23569D0BF8529A4DD1881613143ECC84C534723E2F3F9
-9A6AB21703EAA67CF2F580BF9718EAD075A09C68A9B28758494A919DABBA26CC
-14B565F62A1EA4ED4F72E520E5F440CC3E766A56BAA1A557815B7DCB6764D982
-5C915788DC231B6A72ACBD3D0C504FD05B9828B32FF5E274D474C0897C77F211
-E8C238A04C79F3DB3682B0FED52236814F0F51CF4E303E066D1F2F6D91F57268
-BA85498B3070EA737A1F5764978B67F191F1CA7922788F6CD9C33697BBE99DD0
-9555A65BF47F9E34F1994036742929A97A4EC64E1F1FB4F2FA79B1763E3EC09C
-194306DF0C8E6B318F0A54960F109B757B4ED820D4570FA45BCA285248E01FCE
-91EFB04F83A07700D7E708AE0B10817AFFFB45B1541045478D643EEA02D454CD
-A298210AC4C6D1DE1D3AE19DC04F29FE82AD7AEF79233FA0CAE2793BF7F27283
-7BF47753B5FD8F88F22CB027B38AA0BB776616AD32632C7025BC5F2FEFE35A20
-6BE0682F7094F67E852DDC67272226BDA9189B574B76DB55ED083A8DD7384546
-D7BA31F1675B9987BB2FBEB58C59DD360433F53FE2447C3CF93C86FA9B9EEF94
-F72634A687F2FF318263C13FF7B16BDC37E8B31A83210F9AA3555AF10404299E
-D1B2A7D010465C507A1C8382114EDC835CF2CCECDDFEA195DC4CE33BD1BDC256
-E7F0A2469B157763B855C3A8311385FEC225024E7FA51B90DE87B75DADBC0DE4
-8437F75B73BFD3276F2B8522D2882AACB1F27227355787428CA30B5F9BA02C62
-84317B20ED0CEADCECC998B447E53F9D6F40D64F748ADE33DF0B70381588C1E6
-CD009833C34E109B8B85D75B9F45B0B4E8B50C9C91D8A046A56A497D9069C840
-C9C5C54DAA1226FE96AFADB7B23A556AA883515FCCECF748E91A69ACECBE49D9
-7DDCD20B1DE77E5D5C7583573788C57EDB633CF14AC1366FF8C2223E6585A795
-940AFC57055C0E73807DBDBE6509EDA01BC9BE066EA100F9F2DEFA01C82724E6
-8748F046E870D50EF61CCD00E392C06DFA214980C0335CB1A7AA8260DE220685
-89FB90068B4781F4401C6CB0027844F3F4DDB569D451C0CCBA6751F38FAFE6C3
-672C29D4CC32300E4D6192466BE6819A40A6EA0A8AC94FFEA0E44684AC9873C6
-1AD4A6F800082857F502BC50B7DC1A0D01925A477308E5D7CF21015FEE346F60
-0A5B643168C56507DB48FFD4A4B60EBDBF5EF1FD8BBAC9D1860969F06E9357B3
-F6872B9B6022C49694C24D227FA709DB45D4BBD264BE9941051FD2D29DC4DE27
-E7E66D2500D2FA7B4CE19D12C461BD0688E73916B58A1305617088BE3284FD19
-2BADB8068D68C1284885DB2DD22FCD73A3D30A14334E738DFB52DEAD08AFA9A9
-28B2B0A278F2F5FEE79855DCD2CCC9B7C23EC02B6BE438ECC227EAA9E308B20A
-517D7D0BA028A35620907589B40524625128703F25980C10A8C15D030E891B52
-4CEC0230C8DA96522FAA4BA0B3B67D01B937990187DEAA0FF648BF92F89145EB
-62A3A0639A9D5FDFDC4B1ADE57FA5F07F730EAED2BFD33FA4CE4CD41D4041449
-A47DF7B384DE32E7DD216F5B23FC4E1E3CD4476E6ADF3C6A5BDDFA2FED0BFC1A
-387C84FFA676CFED0312A9D5FB82297BD47525859A75F05334616301B06F55A5
-B7D1F572DE2F20112201455DA1FDFE77395E0A838249C9FF9AFF6B2FAF886970
-ACA6B38DDF305D4843BDA13F398E0DC4B5F99CA8440D9DB2B60E1BD690569C8F
-317C024810E45AE4A3492653D82C57ABF91F37F6720125E38F655AEE4CB3855B
-5F9308771F980DF3598AE44F4B44A0C1224649376039E27A2A77A1987BD69A65
-E8ACF9F64C31B5132125316B3117537F7F1569E4C37805725EBA9501EEA3FCE8
-04613013B8DE12AE3D3CEB78A1E69B74A03F4F53A8A3E3A2AA2CB0FA1CC5BD45
-D209C2EFB4C086763F08E59D1CF785358C4DEA67014205C90A4391131962B102
-CD7C1C2C9FB54CBFF97B90D14DA026B7CF4AEC7FE66ED25B5FD5D9DBB8BF8C61
-987FD2611BC6D85D34B354B288DA91A20CB01C0571272D64C5F382AF1C4E0CF6
-B6E985F17D5526085102940DB92F909148CFAE0A823AFD48B98EA1ED810162D5
-60D3FFCAA7D0F42613F00A2554A78331E2EE9AC9406067BB30DF81A4573CC45D
-5DB24990257D9BA441BBDDAF81F4AFFFC5851E07759A77578604511A26CA7954
-5338D9D9ED8216D82F46DD91647E6E08B6C2436806B64A5A4031B96A5C4EC782
-03FB8A8A311DCA0AB6816DA8D6884ECDC474441D2EF54B1273A9C2C4DF7B1848
-C4F9D2DB79B451A56C6B6CE86CBC2F3ABF1A6B0313036CE2E1D75337D7DB9536
-6ACEBAF4FB6ED96056E7EE18AA763023F8391DAF1C8F560C8CB48DB8E2C30B2E
-9B3EC8EC7310CA79940B9592988EBC940E4035036081C1BC155BA959CBCB0882
-96BC32A71B54F23E28AF9C01812D542023B6FA98509B9BCE0A11F6E4A9C2B525
-D856FA6A32BFA1AF937470602532E089185853EF4005D0F136B73500761A5B73
-20DE5CF5932B05FD0254F81B299B151A6ADD0963E919FE387A33C5BD493F9C84
-B94598F6ACF6EF10DF49D31D715BDD803A99AA7A79D782347298AB8AE734175F
-677C2C0C0CBCB26B08CFD202048FDE6B11A2B19A6F8CFF048262DF41F02FFC3D
-165C3D0CAFF801D76BADBD6D10C544366A216FA1DB31E15A9E5693406C92FD1F
-E9DAD1D395FC48DF4AB1D98378DA9946809F4B9A9F1591BEBBE6573EC790F284
-BB8BC2E9A8B9DCFB384F1FF6F48EC38212CF10C44826BF11201B1ADC90098254
-95FBA172A27FA1F2DA5667910A77B6B6B229882F27B3C151F16768E0387F81F8
-0EFB879FA9E61A2EEDB9390C837EB073EC45C74C51BF6010450DF7053D63FE93
-D9C62F5CDB02E3B49D282BB1F7A8A7AF864383C83321D3B396DC77DCF2F80038
-7DBEBB1635BA66EC76D7A517A3AB3B3367E8C9A9454ABECA448344E28B066EC7
-FA170ACE912907CA4B654BC59929CD15FCE2E41A342CAD48DDFBA5A18DB02A71
-B5D9D8F5AA183C1126D1BFA2F9096E866E01BF6A719A4B293FD2BF0AAAC4962B
-1E55EDDF52CD000004189BF0E50F1F5AC07F8DA31E2D3D4E68C24291C309205B
-8F777184535B6C779AD156154232B97C2806947E455BC7FE0F0CED79C00160C1
-F1A5FF494C6F61C3EF60FE174F11BB4447F59145B8FF9C88A2670C009C7019D5
-2416C70D765DC568BAA0EB64F653266E0D68CB50D44977E2ED5441685B773E03
-3DEC9E814C10DC475ED326618A04EAD178CC99543E042ED144A1C5E8D7851E31
-AAF157BF21B80A128EF16F42CE912545D575B801359ACEB93A40B0B87D525478
-023686C7746B1C4D894EC12F1C371257150B8DDC3B94576F86A1E3CCFE5345D3
-48DAABCA6044EA84A7D4B12DBE71FEB609B32AC2A757FC786BCEECD8B6249C61
-090609612C2E6EAEE5263A38D3A3F680A07669A2978DD61C0EAD29A64E2CB443
-2960CDA0185E10304AA7040A14842AA951947805AF6938FFCDA1D167534E537C
-5A5E384473615DEBEA0249E2C26AB35410BC6DF1AD5B8F870CC6E1793D2E8698
-8D039E56197E47F89046923D84A768E37EC4872444CB9D7D280371E1F38B9270
-B417A7E9C03B9B6647581C17870BDD5A91CC5822EAC76E7C049EFFA1305E2740
-279E456DA51FBB59CC401D09C5BC8523192CC016BA7E6A8B8BD258FD2FEE8F48
-7F96F8C2B5106582CBB0B94F0E4783AAE892B0CA4EC4F2643BC1C93547C1A92F
-CD6B7E7B697200C5A07BC59E8576228136C3810016279F4D7D09A3E2401F5FF6
-E6007EBBB48B67DE9E4F7F5EE6C0CB135F76FDC3B9D534D54F9D31DBA78940F3
-6C910CECFD4FEBE18919D67BB1383F0783C763BEDB939EAF897A89593EB764BD
-772A6BA4886E77C91D26C15A885DACAE74E4796876632570874357A6AF91E768
-4BADC1805106229D467EA963BA1F46C805AA418858EBD068411D81E7F4405F92
-5A142484B808D174F29C23A20E908986B110891840E3E0FBDB07A758194A661C
-2C86A5629F1F39DC24FC074FA2AF4DC56BD4F377189D40739F110A4DCFED88CC
-67F5175C843C2BF05A6C3DA20E11ED398A8647CF14ED8463D9DB96D756E02032
-C71FC1BB5EAFA99C30880EF70215D181884C4F8DCBA41B2847B9B90631AD92E8
-AE5730E4CAEDCEE93B95BFCE038E585EEC0E2268EC23638D738EE7378793050D
-F3B932939A052E4009780A94848F9C636210098670281884C024682661193453
-187076665BB8E01AFFC0EB888A550793FC2DB999A1BD3449BA49F85DB6DB2238
-1BE7987DA1074AEE95DD0C2052B4CB8FEFA9B445305C572D70ED0818F01646C6
-429E31DDD0EA9902B3D384506BCB1B132B0835060587B321F53EE4D51BB56D4F
-B3E6A4ED652013E189CEDD643339662CE7DD7414750B709116818D226AF9A526
-1F6F33643A8D6F6FDF1F85D16D8035D6561EEF394F5F805E532C0301B6D2C55B
-74082AF2D5B863C52120DF7F315F2E08576E9170A4D39200BCC99F914EFC91C0
-06627D0B17ABB946E77748D574191153E2DDE460EBBFFAB57A17113C418B5F53
-85C95C5740BFF028712BA4CD554E1FB60B0EFB137EF738A478E297A8811A246D
-C1C02F4DE7FAB05862F31D731BA7999277DA18BCECBFCE38B373668246E619E9
-E5CADE8D094248944E01F71CDF74C32232FB75DE48B4956AFFC77E4736397B69
-98A1DE487D71317E55DA6C337C156085EFA241A7301B37E04F8FBDE06C19EF96
-5DF3E8F61F55FF0B85B4AD77680E6E0EDB6D6EAC6EC25BE90547F1D1616A40AF
-05B8D8196410175992DE7A49C1DCBAC6AA9644FACFBF353687C60281633504D0
-1041E977A51DDEFD798D3C08E4BB156E045DA2675FD5220A77099603CC05EC70
-2BDE6EAFF38A917E645AE7E2E9D42AEA82D53BCBAAB7F7D48454CE06F92D8B99
-1675500BC6E81B3D7AD03175C3A6AFC596296C7EB64AABE8E177ADC4AFA5C9B9
-033313DB9EFA2408278A3F9F1D99DB2BC172F3945E625C97F2C3611D9D18F6DE
-ECE01162C5FE946198130D373163C5652B957DD12189360D0EEAE9505C34C59D
-38C356CCA13BB483501455EC230BBE9DE59750F3513A89AFEB864D481F14CADD
-987D4FC338A6ABF4F8246A91B7DCF09AE40A8BDB6F2E4700744478B1A74623E0
-F2FCCA9A3ED222CDD5770B58337B921A150C654B414C37863015838C26CECC34
-8EA63E57F105E78C92041514313EBAEDEED37950D5BABE305FF8AE51E3670251
-40C6EB69C967B3249D9623C268DD6CA2F55A067A9D64061C6F08C42F83B18712
-5748C595F285C1F160A8B17E7C71441BBA4EABA9D5D27ABABB93CC277365E613
-14C911195560782273B5AF701A09E491D9888F6FF80AED9B566CEF2B21D38B29
-3E693728DADD70F2E4CD4485595B69BF0B88135421AFB30C9DCAD26B13175ACF
-0203CAFBE658ABC88425EEA91C34D98FE19D2A16D00AE61403DFE173182C6F28
-D11BB7B0044B09066580397871FCE39128A5DEB836D2C6353ABD94BD2B4D3B6B
-FD6E0CF095C829BA712AFCE4CD08DC01DFA4E386986568502BD896C165565B48
-A49FFB0802582A1E58D611047CEDE03380F4C9231C48DDA202005AC32C44ED1D
-BE6C26E0F703674C15DCCBAC7FE369B7A96AAB25C40E4C13C854F4A64F346921
-9A4104071080A36904416CDF93309EE72ECF5EBC0DE4E2FDA62650F324217A61
-0646C0F9F34937E1FD91759550E40D29627A9985F21F5F8718C1997DC04D41AA
-28BA8B37B64F19BB6040A97C9DB61A172A62349426258A084F695BAC03CD5AC8
-BC6AB154C053581597D968C2F12D205CA8690D163F74EEC458C8B3324ADB8B54
-1058A4760DD3D069FD436F3A138E61D82002D7821F1B8AD4E8436236F90D8A38
-02C5C6BD375AF706B6F0D1B61FED384D045F3112126158B020F164AC40CBE52F
-83A9A9D4B16349786B6C24FD33DE9172024ED95B2D8D91A84A95BA294AE409D1
-944A2028F4ABB36B80D990E2A671274AF6AEC78A1E7110037EDD716695AB5611
-CCBBDE0598A26FB90EBB60576419C416F0DB3790CA7EC41CEA529E78BF007A01
-37B607209060F2D00CB25E8F1004C11B208EDD785C9A1A2C67C5C757A53FCDD2
-C3C63B187FD09AA4353C8E0497F26261FFB5BA8FD5468E7B93067EFAEE50BE47
-18643B1C96654598161901CA255E478A789BB034AB6B278E72BFFB10385C61F1
-01CC5B63367669552B5DF78B717C39A5CFEC8C0A213232E2AE660096EADC4747
-56BB4B4661E7A506BE2192738256A2071F20D59C5DF25E31F8B3D6DD249F11A9
-9EC99C217B720870B01094288D98C435A7441AF1244D8AF1D763897351461A23
-3D8F610095D5CA5198AD301DEBFEC59F1A808C930CEA70728D1F8BA27AE2E994
-71C6530E623C44B941F5E872213A702554623CC721750BDA28920F1741CC9BCE
-9E7A1D74D6E88F3776CD5E85A08B3F0150AD2D21DF9CA78A0F6A353B8000A74B
-0131AB96E80D0D9ED246414B414C51FF8CF41BC4E4E1062027A01B884BDDB6B3
-40B7D63997139471BD0616881192887776087F372BD2064BA14D3BEB555A8028
-176069EBB9E88A22B77C8095AA9A8356100CC95170702A9798006C356454F9C1
-F8B1A247AA75AB150364B48C4D47E35CF568B8F2BF89F92EB6E1494F40ED8399
-D7FC965A17DC5F6E2A375108C881137E1D08247094B83777DC1E59B4B0146533
-F46A5875C2E2C9BEAD7AD3D8043B761BE0B2AD4E31A1095FC7C00AC4F897CA68
-4E3449EEA7CA5069C1F00F1CC6F738746C560E11C35B4422C4E4B66E88EEFA0A
-6BB59D87FE0532DB49B5FDBCD37275CDCE2A78C2628608194F46AF27F43454EA
-0DA59865F7C1ADF0B9A5D3F7F0411984FD28EC4F0D993C0939135384AE65CF7F
-32FE1F76E9E53EDBEA582FA52A0C0E927AE4FDE57D2AA6965081ECA787932E33
-7BB7EAA86A191E98369B353C6ACE1B01D528C996332206C07838D668EC9203E8
-E835114455FE7D440A8E950C493A43B3B07897F1D78805F1F8BB58699A38238E
-FAFAF30BB6321645D50C1B52C1C49786051F1B5B1EB9652947E9A910A3AABE2B
-E04DF06EFC57B61EB2B8C08CC6C427AA4A4B575E44DC1C95E6A78D74956A8344
-32B0B1339703C8D4029C253D92BB5547E2C54A61FC7D3C57493278A4A7EA259C
-CFECAA2BE3F2A01935F896264B893E3D8AA2AE0080F4D95968539ABF66722820
-143AF605EBDD9FD85FD5CB8F778E032EFACE612FB233FF6220E2713CDCAB4D6E
-69E5D46DF23A05C50EA32364EDC5E4A7795D11810A7DC7A9BCF3CDD474406643
-0E5030458D81ACAC7828974A7C863D13480F71271C48F242E08F59E4C27C1860
-D4AA62136149EF4EFADCF5C5BB32568A6B42FD09841EA18566E5A79826D45670
-FE204BFF2D37CED76005FCA1C89BA8CE98C8844C5483F1AFB4E7E024C4005900
-58B0CD7DDD34E2998030363C7B09872FBC51E31FBFE1D59B5B8178427A09563F
-EE9B34F295DDA43547FD72AF75D4B6CD865565D8296A34736134B9DAF376120B
-E9E4130F252CC8E63337821279F7506D2AFF35F7B8B7F196EDD017A2973D71D9
-B3ED615FB1F4917EB820BB9BD78E4AE4DEC0AE8871C702D716FAAECFBF6F5F66
-0C3B98F8EE8F8027D04AD99D792D9E28F087532116581FF18EE01143DE14DCA7
-3F86F4F95023C9620B9796249A998EE423B727076BE3A25DDB2F49CE61CF6F12
-0DC3DA9E733182CA06F42FBCD9096AF41F6D7152BB8778261448A1573413A474
-F344575D495BADBF7C77F311B7B8CFE93C8C7100DDB0B8D63D79741FBBAF989B
-51CF3443256F706FE49E51DA0A82F169C15C9F9F0D42ED2167FDB68AB4A52C24
-19D890C4B5A424DC2A9CAED06878900A48B2F68AAE8017D51F08BF2F60C652F3
-41C282BA653874FE80122AB4C03E98106AB1231855304599E5D4E44444409884
-D9A9E3AAA504C7884F96681E990FD44FEBCA06C7B2D37C0A64A0D81B1CD77FE9
-B9DAFDDFF6054C89A6AE5EAB60D735A81C4B54D1E253239F2B425ED7CC96986C
-890F1C85DFC23F37BC927871D620C86F43ED2FF5D95D09D602C5B9BF115E2408
-29C1848F378C9CCCE8984AD765A9A14967A146DF6EDCADA408F436276FC9354E
-9B93A0C0317D3B8BEA979D6EE97C19B1DC44BC5DE527C4A0123EB7109742F0DE
-5CF79A8C92D1B21E0F4E80D8A6AE80765A395FD27605AD4873F70BFB57875DF6
-88C4F32E9E39C0D2261E99391703D436217D29F64E521C25B88965F50ADDBFFD
-DDBDDDEB3DD6828A9F0AFA8B5E371325866D523FAC3BCD8B715C1E93BA23884A
-F0A3ED9B585B604958DA18911855A01BBB43C9AE29B9B67085CE2862E6D39BE0
-0DB284BC530B133BA6816BCB11086299DC07E59403E078CEC4E1CD173FD555FD
-E463CB1503851C384253B249BC4B582D9204755E915C377E69B6DCAADEAB33C4
-3D6BDB7A2E0FE109296B43239C2F6D4CF8D3533CF39E349C3CA433A83BEA6A51
-D1E8F2FB6374C3C20F46032697BE1C7A2E9225E6DAC6CFB1CE3D56BF037E552D
-E21511E62EF4DC03F210BAFEAF026C9177DBCD3FEB242E352A9990105532F241
-EB240C7800AD27DBAEE973AB9243E0415D42C6A569A848145980D09540C80858
-0AB6C8C6F7529A781D9469062410C5370608C3A01743BAC595F7F6D883C76888
-8302BB4A437B69832A3BC4E6F0B673161D0152C1AE0D150F6938DEA6330E730D
-97E53BC5F123B5B210C00147CCC04B9169342B63C51FD6C3CFD76F938C114895
-AD76AEC0A5410F7D623A5E4EEB8370BE907A585B98075552AF8BBAE543EFD4E1
-A3EA07FD3D21BDC2B038A5EEC3E5BB356070A98526DE7FF6F21B0EF7CA3F96A1
-C2A80FB156E9FB3A7F86FC969786D75D8F530DE24C6C5DF8A9201E18C401FD60
-A92130950B7E53A4B82BD3A06BF5635317D3E57A63C9DEC795BF468813E69DDA
-EC79BDF6E1751E31808530F3FF97B833714C76E5342E8CEFABEDD9500E04964F
-F0894F758BA4CDFAF6155B0FDC613553E491EB43A8C7230B2D02757A0864695B
-7008A0AB7253C0773ABFF8C34CA5632BF92DA4739CC314FCC8239606F488E3C5
-06314DFAF238394E234359D0AA4F18FED20D856D987392B0E7A7B60BB6C92B92
-201C7115C01AF0E848D4F51C3F5FB39659426073B8D53D3081C9B027B059238C
-288C036B486795FAE868AD0E01BE6B4DB50C08827E4C358F0E1861E046EDEC75
-30E4758CADF3BD040B5C95D63462128C6CE83BC7CD6A749D7F9C679F108DD96D
-9F218B6085E713639696E41AF442AA7539290A043B0D7C585144D1B1BF90CC36
-1E488DB896748F5DAE6D79ECCF0BB1482D5C9B7DC9016302F4132CBC165C1AFD
-6ADC5421FE0AC39929FCEC993CFACB094405F2A76C8EDAD051857922FA8185AF
-6B5954488C52918311D16656CB731AAF1CBD12570FBBC84FC8D00225050879A9
-64128F264CAE0272A3FB1A98532E586ED7985BE0F9482519D3F02D625C9544AA
-1821508D9C8427BBEDF29AA443C367B06682B2F9358698F65F81B755C3365C9C
-124FAD4CC5521895654EB69DDB78D1B7526C0033AEF4CF9FFE9A4742BFCC783D
-2654F507FEA42E7E56EED82832088D1CC437DDD243761FD7AF1F497853A956B7
-492F6D579190704A31EE9AFC317D9696633DDBFC81B0196E232DB69832B7CD44
-41CA34FE11728AAD82AA1609C4CB6B7BA4F3B1FC6B65BB1087F4037A88B4CCD0
-EDC736196D8DC7D56AF485C744BF22856D7478BBF5F7318F500C07F18813AECD
-94DA1CA5CC3AAB7D773B5C33CC46837A5026849A01FB5731A179C6C6BFA9AC17
-F04721A001EA10157AC3CBE77D2FC7C75F6834FEF56BA001D10D128D56654E69
-739B68839AEA3127A40C6659524626DDAE1AC06FA7DE8E93CFD063A4627E5862
-2BE25201F52C4902EF3074205D6002C890B1AE01FAA0402751D86CC972315B8F
-E152EB75B0B383CC73EE30907AAD07239091FB4A09BB648694922BB0E471891C
-929845531C238CC9B391C1CE80D5D7E1778D485E5E992FE6D71BC768B49DE57A
-E9B7B3A580F58C39D8809AAC884735F06C27E4FF4A73B6EB8FE2590060646338
-D20EDDC2540A5255FE346EEC59757A7E382425B1E29380F1A2AB7802DB2E7802
-16186DA8583A9A4AD3D63EC53F2D287699CEDE3C3FC6DBFFA06F2FCE12358C3E
-1ECFED29641970DF017137AFA9B76F46AF50C7EB87F3765B433B8BE938B9BD46
-962AB615041F70391B41921A467E78A7ACCEB643F32865CF8D78F239E4173E1F
-97ED8DFBCB9985CE2FC46276F4A0AC18E862D4FF5C17F69C0A179A87E4D0B401
-0EC88E25DB4D8FBF05906126823B75E13B79D373B6447B1356B4B1686CC9CFAA
-A82AFCB659C014E3D6C06308C6DF17EC15B20880D01D2FBE8A913A7F10FC6BBE
-50CB440367B31F143BBF8EC3C1F78ACF0EE0915A001B13ECC8A03191EC915A60
-935A5F6795DBB0675981C8DA91AD33E312D416454604E61E4C3E616931A641BB
-797CAC5F7B5F60505D3FEE32AB5B12D4C0CE2116A965F97A69D8EAB4A3A8ADF3
-5D0A2D29C15B434D56797F3CA287BC76952AAE288108F7FA392341FE7FB514A7
-7BF1DA77B89FD11E7BBA73C2D7FA2ABB851D405B66A8550876BC689BC3A4ACBE
-340333E34F4845ED4F35EC11639066E3B6E64E692B824E7466AE559A209ADE97
-275EEE971F736F1DB6DC3EEA83322C7F531F57057BBF7A385353A26812CED979
-E2186625FDC3AF9144971C4D727851BA1DAE148812C0C3D337C6811593D07FFD
-44D4929F1BF3D3D33F9842D17174C7D26CF7B4D62597B8782582E763F057F748
-40B963FB3A217A063E98994FE57A5C649CF9C8CDA74FE9C05B97C0FDEC17B7B1
-90080464F13839096255CFDCD59462C50F9FA73DCEB96B11D319A05DD0B94C75
-5E7EB97079B4F13C71DC120969A439932229C3FAACFD160958162B136592A4B7
-3E2D8FEFFBA9B2C217CB2FFB7C23328AF99643856D0B3548288FBA2363D72BD9
-F8090133D7064FA406874CC25089C5662E866B40CA6BCB6BEEF73E6EC6C45DCC
-2E180CFC8398005BF20DBF1CCB9F8778F3C948B950E41EA9FBB590EE1396D9CF
-51676169DF4008477F95F7A3DF4B6C14CFC78ECC8D047684E31D1B334DA9A0C0
-277EFEAE5D70ECF0DCE45F6D3D9900EF0D7374D6D8F7F8EA237FF35F11BD0E7C
-A49758D3B6B63120D4B10A2C5CAFDA0B2BA5FB2F86F26F39974E54150E990BBF
-337E4F13B7D433B827729E218BBF6385FFE3D9C0D27330F0F8F4FB4B2D9CF3F3
-B7AA64A7E3E93ABA4BE2DF090AEEE0F1D6B1DEC285FB47A66132E7B597AC55AD
-332008A5268871527100137998EDD1E4985A9F793335221B2CD17B97DC1BF278
-B8FD9F70BDCCE69E8A8AEF7C7DF9CF2F32B59E42E64FD3FA988B55577685463E
-8932ECFE6B2C8EF31E2A74D7AFE6119C0391207464074180ED26ED7C769627F1
-7BD90B3FE64DF02F0EEF7C52DC49CBAD0141703E5A85874301383BF6B172B454
-8D75E3CAFAB9C9CE6E304135D9EB3A33F36BBD49D2DCDF8909EA41A7D68B7496
-FBDA643A106E7F4DE9178B9AA340023289F2AD6B26B619C2E3227629E631D8A9
-AA3AA68D6D608A58EF9B1181116D4C4BEB49103B3483E7D0E73C58BE81D34620
-49352AE4A2364EE4720AAA2943C632A723F81C4CDBFFA369347C32FC33AEE0AA
-6A436B3DF22AFB513B8035E2065066AFCA5FE90790A2D62F47E4F0A3B929A914
-47A5E432104E7D038E7838E344CB283BB0752528697ED54A2E895923AA52F5DF
-DA93FFA86CC591DEB6E9415B57EECE8330CE902689DF122B1CB4466ABE6942B0
-E1DD56B75F3409F2E3F44206ED7C725960E37C3C90EE0734FE9B0A2AD8CC2589
-BBB87120A802216D0A76858D45F6AB7326CBAD774370F9E4A00427DA04FD9875
-21C79DC98BA02EBF99608940C8EE41321626EF8962C7D5472DC4DD28E856B59E
-2D472144415A95D09D05B70AF0993D078BA0BEB9B5526E52BCC7DE5ACE2EFE52
-818B6F6F1050617D3C424CCC74F65A8ADBF705AF1D45DA5C8CD24264FE5E49C2
-5B75088A605BD58D01F3EB25DD45AC546AD5D8EDD4F96D10876B25EC008B5BB1
-F04A5F4CD8AEE2F628C99FFB3D31ECD1CCA781D93F2877A1E660153BFE45026F
-826C4E552305494CF7AEA54C11CD157FDF72AFE0F0D3E382140706F13CEFB8ED
-8874134782B21D5E5F4C62D22DCD0A77A2EF61794520069766E52558B3CDFA77
-586F7C88D2EEDE15D32DC6DBEC54C8C20DA8E140F3C1BA7DB7166C8093B1D774
-56931CDF81C3A85C51957DA8F81E71BDEA0707BA225BCD22659AAA99FBF6B307
-0482EBA4C7C6217DDBBA50C60FF947FCEC65F1E9D5E42F7B0C643FC08E69D50A
-D86C2094BE8175BC194451BE5E0348E0244FCDD5A529E0F6E49B055E771C990C
-2C7DE86440F8A8B3031FA3E3A99338E7E8D6549BC1347A047D8AB461928884A1
-16D79D0A708AD860C5E3C7ABB4584DA65B7AC9B303E7C660F97B43E270E390DF
-A44A5DE23FF158A8D1CBE738479F4E54C366CF27384168EDA749DD5081D2B4AF
-87EA919FB2C5829298FD1895B2569FDAD9914AC9C5151EE930079F24F1EC384F
-716B54D3371EEBFF1BD79455C75A3B95B3C11DFA0E66A123AE41033BEF6EECCF
-8599FCE6E4BAF6AA86BCFE117ED0D66D84FCF2EABB76D5F713BAC635354699AA
-6FFBFE1652A0D3307F2A73A63901804DEA7537F0D925DA890068F9C4F55F23C0
-02ACA7729E4F5ECEE704E21E59AF9F8C8BC6A4F4F7AFAF425FF2763C53950A5C
-B8A05F9A8EDB929E15229A3D6E2854CFE49EFEB2ED498D8017857135B5C28D54
-42D15322999AEFEA70CA2DC44A0B99FC9642480625201412565236950F725D96
-34323447DDA2ED1F166B92331FC42ACE46F45284F95BFAF6E6378665AC1C0005
-B15752D13ECBA0AE6E15BD57DD7CA6108D79EB8AD37C83B96F81E78A1605F9EC
-2D721D641F912C401C6B32A03C057EDBEFA094F97B250E3B906B377F7BD69341
-54D301A00A8CCB6F18B294526EEDFB1ADBFEEB8DCE4B8CA001871CB349C6FD18
-A9606000781C57F79FA340A120A58B9793C411924DABE338E931BFCAD1A45E2C
-607AE3845D7549171E05A410F34DFCCAA4F4E49FD117EA0A53F4C83393C3BCED
-0D9C2E3F5117F0DDE8228201B75C8CA9240E0BF470488DEF2E68879F9A222459
-44F9E2B4F0F63EDBA2DAC45428D600DBA1B0418858E102B371B176F97536FB9A
-7F72EDB51A87EE53B5E730E83FA4326ACDE5152BF6CBA53CFAEC721E88654DB1
-1E5A6B3145CC42534768F3380C8953A2F6F63870939CA300D231F67101952771
-C0B0879D493A01776E2A65A22408BFB0A46D7A50CC79CB72E5FE2A87C16FF499
-3514FA4E9AF60A0FB08BAB119EA92F6639D7AAE4450E0CFE0BDF3B21B5F22006
-D134072F9324670CC7EF2D68222593F0B6DE491778B4C8DE8FD5B16CC2FA7DB2
-8878D99BC3BC837279E25F15D26F691CCFDDEE514320C263E6BC5C3139A9BB5D
-58D3D27C3B341E838DA63D8FD2C91C2C6AD2CFF2A319E0D9DFA6CF78CF903FAB
-033EE0D608D63E2E6FC85F5B7E511AB2375AB55F736D5390BCACBBADC4581AEF
-3434B434C4DD5E4DD46D41A68D6BA3C73518EE12328553D9C83150FD21FC61DB
-CD93E8CE52AD786292FB1BB9F0D07CE9A51CEEB8734C7E996D37A3E5874BCEAB
-4E8A9E61808BB3DB237B376064BEE5F9AC1946E4FAB0123FF552564AB124F02F
-43281EE953F748C167450F52091541CB417693CC9723D968654F5B75351B01CA
-FDBA1B25C88F6D3B99ADFD96E7C73E7F5C502FE4F387B50A35260594D849D67E
-A0C1D90B5E38D9E41A761E1B1AA5990B5D6E31CBD5A3AED32F7B99121E54BA78
-B7A8ADEB7B4EDD1A17294E5E030F6E5FA4472E4DC016EF4313904DC90A8A1E9D
-7D10F00C8487AB25B05831FF311B958C0862E004522C0401A7327AB56488CFF5
-0757CA5768A86A21A08A6990A87AB6D3DEAA9BE36600F998B887B36514D189B0
-26BB6FF1F7C7B2B12BA982B964C8859E50F84410E362D63AFFCCABFA7DC0212A
-5D71A0B1177E57D8A1670696C0D86B6CE49BFDE2DC4049049620512DA96A4218
-E95722F552822A813EEBEFBC86039F2ED8EA3B101A546CE56A6243D10F0E7E5D
-15812878CCB1F4B043FB81C4A105B4B3704C9F37F98FC0A97F1D6B80337DE00D
-96C8CE98530274378702256CE31E1FCAC429616B763DD6C033524FAF27685F69
-986DD6BB95198FFBF37301D6A4A2AF6D6D4BE901852C905EB3BDE31B67FD0DAE
-3DE87EBE3F6CE7999990E1611A707332818E54E7D0CFED88E7313BB3B9952E16
-EDE7A5A8F54E61E1B2C53008FA2D050EF44B02F63F75E4637005ACE771AE8895
-0DA2771D1E31D8A9618ADB1A0D3D53921A9522B68AF0B70FC9DBEFD169AB67FA
-8F3E4EE711102CEF22353F5E0E3AF31DE0F51BE759C998C43B973F11F4722B16
-A059170C4EFE8BBAB5C4DF9602BD0E23F9C9792362FD0E47F453E662677CD8A1
-2C20C721DA64C700A3D33C85670FC79C652F8D08FB5A898D4D189B992F155C9A
-2297369E2899B14F2C2017A61EF5D9D41075C57AC12D06FBBE9D5BC9DA21419E
-0884FF6C09494F71F489FBDB2A59E9515D922CA4EC505965A5A167EBDFF57FBC
-A05E36B782E901F0E32510BC955F8F0973B1C79271C6EDE2D696A7A0348AA51C
-7FD9C9461DCA982C4E9A720E7F1AF93571AF0DFDEA1374C6A37149B525C0E961
-8BF60465C196687070167BE691B06D47EB5FFB07F41E043C0B526D102EADDBE4
-83466D5E5F53240A9AB0B32EA0360928BD932D92BD66F608C5B06AE8600577F5
-7094E1FC457FD692034E64FF67B5EF1166B56169C761ADA251B30CDA7D543C7F
-24EBDB65453BFAF666B61E24FC2C95396317E714ADE31305C23E6009ACDCE582
-636B42AF7D66C425E9EA338CA577121B5D7FBE8B636828659D92FD1BFB9CBD1E
-6139744873D314837A9467A05606AA632205C408D48603DCFF8253EAA0B17A63
-8F00D8D1CB8BCB827A8B84CF9316430D3AC94C52D62499A80DF402F374C8D1A2
-D9732D0EC8627D39522B1AD76A793D9921E249179D5C88335009FFE1310BBC30
-9258A5719563138BB9BBD445A0FB553DA3365C49C8EC7FE4C8A02CA5BD9850A3
-37E47C38495721DAA89096ADA012AB8283B85E84029154F6EF9D07376FD108BB
-0BD88338D13D0E5CFD0F17E16AE3FEDB4BA3BB7EC1EDD6C052E7ACC179C2CDF4
-453A7BA0F04F9ED48F2189D63E9B67C3227F4752E69C570AF2F673495E405D62
-EF2FB14B1594E0CB0065EAC033F5676A55CADE49A0AC7041A798DFAC2A856AC8
-2778ABF60FBA5607C40BBA031A0D3251D4A4AE3FC0983A3AB0385A4940A303BB
-B3966D0AE5FE555F94A582B21B697228A56BDE846ADC64C30E8822F720A42F80
-E8CEC0A4DBFF3628CEF45A581A40F387465511E864792A8091B5231797528A7E
-2BFC8095D429871F6F06CA37895188B3697B3A3BE5EFCFC44A027C61F0398FD8
-6B2E2FD5E851C8A7FC65D3DD7BD8326E3E1948DA3C2481D42ED3A9EC1DC738DD
-A7BC4972D1FCDC1A51CD997C0C71DEDBCB96A938906787101CF3ED6227DA7DEB
-9CF07CA47959CD00648018E77CD1EEB91F679DFEE825B0FD94BF093DDBECA311
-121F542394714155E8308DAF9C3614D630AF08820CAED7A72310DF20DBA4C2C8
-808AF01FDF58A27A5E5F8F888B95C9127B46F28A75CF64E876571BA08D9BEEE9
-E0F1851588713227D83B654DDF19A87112EB36028611530CDA1C176B6C000B74
-1580F2920AED544F8AA8203C19EC31371E9E1ED81E065CD6D3CA3388214E7951
-66A74465223F4891D30FB8E609505C4AF9633B23C31B93846E73CBC0420CB587
-339715AE47953D67665F018F5999D4E77226F83BA9465C0DECE46A234B712E94
-190F39AC5226C33E4099A027317EAF7AA8E796124FD83576709F59A5E3D47297
-D6F21D51CE73B4337A300CD18AD8F3C8CE848DA861BDAB21CB8B7D77F7B50446
-69E6C9816BB4E5924841B87CFBDD486E669FF23596CEDD90D21B181154BFB9CA
-C9307C1671B38DDDBADC8E01DEA15D92DBB066A87EE62409EB1E86BC04D49B8B
-11446C8579A9082A788009D65BC22ED6537D3C2931AD7D0190FFF8692B7FA29C
-3E55CBF139A282A92B9B3052C0B75DF8C45AC120B203E1DD8B0A87438CB46356
-2064F9B714DC3E9F87E47196E969360B24FA71AE14B22062170E0F213287C178
-F0EC1AC384D408F7F88ECDC195F700380AC1DA1ADD6BA8EF1F7A3B201BF3B8C6
-6D491A624242C4A74BAE0F139CD2A5F13AE9B27E26BB4F19413F5F21C4506A51
-3E9BD32E77134FB669F7358F08B7573C0C528B8D584F75AAD2AE2EC2F94B455F
-BAC45A6C27816D8EB462B046DE68085C7B713811240997F7D918E1780A0020E4
-DA51EC020D8A65BFEF7C63C1CE750FE0BB6BC50A1E49A659B66BCBBBDBEFC886
-5D6A1C20C7E657300745E93496BF33D7264034479A29BCAE32E08D048F84AA23
-784881BF5A7A1EC33966481C98674580E7281F352759572FACD09EBD50696FFE
-781C85BF021686AA494D5B4149A97FB8240B53AFB1649282ECA83FB40751065D
-F7B07DFCCCBE718547B7248354B733F7C21917E446648E0975A66173CAF742F0
-E1F97892E113EFFDDDFD39A8B4178E6E888F8A33AA6AD94A69EA32DB64E5E48D
-BE733D22A51F1F5AC42270E44B890411C3629149D6747A73863268BE15BF8F6E
-D73F81CF18B897B0C1A7FA4D196B0B9C16C30387C3B2E7B181B2162310B4FD07
-28D59D345074275832900C38CEE8FBF42D5AB5DF0DDCBC0D5A3AA423C2048F0A
-C01B930A485DD9ED6E5AB316BD3B53BDF02E654E75364620039368EDBEB66D78
-CAAA98F22FCDEEC3267B9E2570020F238AE7BCA0CA3E50CBFB8188B8F130F3A7
-28E1DD78324CD259FFF098832C38A6A60CCE16DEADBCD95684528E1C18A59CF4
-1398C99DE4ECE0FD2E5E9696FC8DB7BBC53E2D3CDA253E4AB0B70C1184DB02BE
-FA7AE04EFE483EDF5C5F1D8764AE6CD1D1A181D47DE8F6EFF60D1C0ECFB69BD6
-CD2F8AB8EB388DDC79A12952072EA059DF9F7F3CF2180A1D4FED6AAB3F2F92CF
-4EE779C0494AE74695A2A40926743ADF61E97C1C20F81B16C992DC6C10682F78
-12341588F1F746CAB11BADD065213C44BC029CC3B0DBDE737267ED743C8CDAE4
-40A6D55BDA7DDB95B0ED7E3FDDFE25D3EE59B79EA31B9AA476D577107C760C0B
-05C2D6AAAA92BF5C36AAAA292E89FB923EF38107D6626725FDDC35B31BC7E2C7
-E9408359EC70D3F9BAC167E86A50F3CF688BDBBA91FF877E873A349A91281F9B
-6368332D8F43DBF37593AE3F7827B80BA6CCCD4B93734CF515EE1A48B1AE615A
-F46A36CDC1F78F48F01E4B120C2CD31DADEBF2B3F76561680FB21E05352EE479
-8B7C4DE783FA2EDADAEF70E3013A848BC638
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 40258431 52099146 1000 600 600 (gnus-booklet.dvi)
-@start /Fa 149[23 92[83 9[42 2[65{}4 83.022 /CMSY10 rf
-/Fb 145[47 110[{}1 83.022 /CMTI10 rf /Fc 193[65 1[65
-60[{}2 83.022 /CMMI10 rf /Fd 134[71 1[97 71 75 52 53
-55 1[75 67 75 112 37 2[37 1[67 1[61 75 60 1[65 13[75
-5[128 5[106 4[96 102 19[45 3[52 52 40[{}26 119.552 /CMBX12
-rf /Fe 133[42 50 50 69 50 53 37 38 39 50 53 48 53 80
-27 50 29 27 53 48 29 44 53 42 53 46 2[48 1[50 1[58 72
-72 99 72 73 66 53 72 72 65 72 75 91 57 75 49 36 75 75
-60 63 73 69 68 72 6[27 6[48 1[48 1[48 27 32 27 9[50 21[53
-56 11[{}64 83.022 /CMBX10 rf /Ff 134[44 2[44 44 44 44
-44 1[44 44 44 1[44 2[44 1[44 1[44 44 44 1[44 51[44 45[{}17
-83.022 /CMTT10 rf /Fg 133[37 44 44 60 44 46 32 33 33
-44 46 42 46 69 23 44 25 23 46 42 25 37 46 37 46 42 23
-1[42 23 42 23 51 62 62 85 62 62 60 46 61 65 57 65 62
-76 52 65 43 30 62 65 54 57 63 60 59 62 65 39 1[65 1[23
-23 42 42 42 42 42 42 42 42 42 42 42 23 28 23 65 42 32
-32 23 65 69 42 69 42 23 17[69 1[46 46 48 11[{}91 83.022
-/CMR10 rf /Fh 134[59 59 81 59 62 44 44 46 1[62 56 62
-93 31 59 1[31 62 56 34 51 62 50 62 54 7[85 1[116 85 86
-78 62 84 1[77 84 88 106 67 88 1[42 88 88 70 74 86 81
-80 85 17[56 1[37 31 2[44 44 28[65 11[{}51 99.6264 /CMBX12
-rf /Fi 138[90 63 64 66 2[81 90 1[45 85 4[49 74 1[72 16[120
-10[127 4[115 12[81 3[81 2[45 46[{}17 143.462 /CMBX12
-rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-letter
-%%EndPaperSize
- end
-%%EndSetup
-%%Page: 0 1
-TeXDict begin 0 0 bop 134 906 a Fi(Gn)l(us)52 b(5.11)h(Reference)f(Bo)t
-(oklet)131 3345 y @beginspecial 0 @llx 0 @lly 493 @urx
-505 @ury 2470 @rwi @setspecial
-%%BeginDocument: gnus-logo.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: gnuslogo1.ps
-%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley
-%%BoundingBox: 0 0 493 505
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 62 string def
-
-% lower left corner
-0 0 translate
-
-% size of image (on paper, in 1/72inch coords)
-493.0 505.0 scale
-
-% dimensions of data
-493 505 1
-
-% mapping matrix
-[493 0 0 -505 0 505]
-
-{currentfile pix readhexstring pop}
-image
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff01fffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff8003ffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff0000ffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff8000007ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff0000003ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe0000000ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff000000003fff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff000000000fff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffc0000000007ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffff80000000003ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffff00000000001ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffe00000000000ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffc00000000000ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff8000000000007f8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff0000000000003f8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff0000000000003f8
-fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffe0000000000001f8
-fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffc0000000000000f8
-ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffc0000000000000f8
-ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffff8000000000000078
-fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffff0000000000000038
-fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffe0000000000000038
-fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffe0000000000000038
-fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffc0000000000000018
-ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffc0000000000000018
-ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
-fffffffffffffffffffffffffffffffffff80000000000000018
-ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
-fffffffffffffffffffffffffffffffffff80000000000000008
-ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
-fffffffffffffffffffffffffffffffffff00000000000000008
-fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
-fffffffffffffffffffffffffffffffffff00000000000000008
-fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffe00000000000000008
-fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffe00000000000000008
-fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffc00000000000000000
-ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
-ffffffffffffffffffffffffffffffffffc00000000000000000
-ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffff800000000000000000
-ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffff800000000000000000
-ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffff000040000000000000
-fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
-ffffffffffffffffffffffffffffffffff0007ffc00000000000
-fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffe001ffffc0000000000
-fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
-fffffffffffffffffffffffffffffffffc003ffffe0000000000
-fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
-fffffffffffffffffffffffffffffffffc007fffffc000000000
-fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
-fffffffffffffffffffffffffffffffff800fffffff000000000
-ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
-fffffffffffffffffffffffffffffffff801fffffff800000000
-ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
-fffffffffffffffffffffffffffffffff003ffffffff00000000
-ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
-fffffffffffffffffffffffffffffffff007ffffffff00000000
-ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
-ffffffffffffffffffffffffffffffffe00fffffffff80000000
-fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
-ffffffffffffffffffffffffffffffffe01fffffffffc0000008
-fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
-ffffffffffffffffffffffffffffffffc03fffffffffc0000008
-fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
-ffffffffffffffffffffffffffffffffc07ffffffffff0000000
-fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
-ffffffffffffffffffffffffffffffff807ffffffffff0000000
-fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
-ffffffffffffffffffffffffffffffff80fffffffffff0000008
-fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
-ffffffffffffffffffffffffffffffff81fffffffffff8000008
-fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
-ffffffffffffffffffffffffffffffff01fffffffffff8000008
-ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
-ffffffffffffffffffffffffffffffff03fffffffffffc000008
-ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
-fffffffffffffffffffffffffffffffe03fffffffffffc000008
-ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
-fffffffffffffffffffffffffffffffe07fffffffffffe000008
-ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
-fffffffffffffffffffffffffffffffe07fffffffffffe000008
-ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
-fffffffffffffffffffffffffffffffe0ffffffffffffe000008
-ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
-fffffffffffffffffffffffffffffffc0ffffffffffffe000008
-ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
-fffffffffffffffffffffffffffffffc1fffffffffffff000008
-ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
-fffffffffffffffffffffffffffffffc3fffffffffffff000008
-ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
-fffffffffffffffffffffffffffffff8ffffffffffffff000008
-ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
-fffffffffffffffffffffffffffffffcffffffffffffff000008
-fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
-ffffffffffffffffffffffffffffe7fdffffffffffffff000008
-fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
-ffffffffffffffffffffffffffffe7fdffffffffffffff000008
-fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
-ffffffffffffffffffffffffffffc7ffffffffffffffff000008
-fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
-fffffffffeffffffffffffffffff87ffffffffffffffff000008
-f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
-fffffffffcffffffffffffffffff87ffffffffffffffff000008
-f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
-fffffffff8ffffffffffffffffff07ffffffffffffffff000008
-f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
-fffffffff8fffffffffffffffffe0fffffffffffffffff000008
-f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
-fffffffff0fffffffffffffffffe0fffffffffffffffff000018
-e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
-fffffffff0fffffffffffffffffc0fffffffffffffffff000018
-e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
-ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
-c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
-ffffffffe0fffffffffffffffff81fffffffffffffffff000018
-c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
-ffffffffc0fffffffffffffffff83fffffffffffffffff000018
-800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
-ffffffff01fffffffffffffffff03fffffffffffffffff000038
-800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
-ffffffff01fffffffffffffffff03fffffffffffffffff800038
-00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
-fffffffe03ffffffffffffffffe07fffffffffffffffff800038
-00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
-fffffffc03ffffffffffffffffe07fffffffffffffffff800038
-00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
-fffffff803ffffffffffffffffc07fffffffffffffffff800038
-00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
-fffffff007ffffffffffffffffc0ffffffffffffffffff800038
-0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
-fffffff007ffffffffffffffff80ffffffffffffffffff800078
-0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
-ffffffc00fffffffffffffffff81ffffffffffffffffff800078
-8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
-ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
-8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
-ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
-c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
-fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
-e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
-fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
-f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
-fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
-f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
-ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
-f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
-ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
-fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
-fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
-fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
-ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
-fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
-00000000fffff3ffffffffff003fffffffffffffffffff0001f8
-fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
-00000001fffff1fffffffffe003fffffffffffffffffff0003f8
-ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
-00000001ffffe1fffffffffc007fffffffffffffffffff0003f8
-ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
-00000003ffffe0fffffffff0007fffffffffffffffffff0003f8
-ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
-00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
-ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
-00000007ffffc07fffffff8000ffffffffffffffffffff0003f8
-fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
-00000007ffff803fffffff0000fffffffffffffffffffe0007f8
-fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
-00000007ffff801ffffffc0001fffffffffffffffffffe0007f8
-fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
-0000000fffff000ffffff80003fffffffffffffffffffe0007f8
-fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
-0000000fffff0007ffffe00003fffffffffffffffffffe0007f8
-ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
-0000001ffffe0001ffff800007fffffffffffffffffffe000ff8
-ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
-0000001ffffe0000fffc000007fffffffffffffffffffe000ff8
-ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
-0000003ffffe0000000000000ffffffffffffffffffffe000ff8
-fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
-0000003ffffc0000000000000ffffffffffffffffffffe000ff8
-fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
-0000007ffff80000000000001ffffffffffffffffffffe001ff8
-fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
-0000007ffff80000000000001ffffffffffffffffffffe001ff8
-fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
-000000fffff80000000000003ffffffffffffffffffffc001ff8
-fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
-000003fffff00000000000007ffffffffffffffffffffc001ff8
-fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
-000007ffffe00000000000007ffffffffffffffffffffe003ff8
-fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
-000007ffffe0000000000000fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
-00001fffffc0000000000001fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
-00001fffffc0000000000003fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
-00003fffff80000000000003fffffffffffffffffffffc007ff8
-ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
-00007fffff80000000000007fffffffffffffffffffffc007ff8
-ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
-0000ffffff0000000000000ffffffffffffffffffffffc007ff8
-fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
-0001ffffff0000000000001ffffffffffffffffffffffc007ff8
-fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
-0003fffffe0000000000001ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
-0007fffffe0000000000003ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
-001ffffffc0000000000007ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
-003ffffffc000000000000fffffffffffffffffffffff800fff8
-ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
-00fffffff8000000000003fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
-03fffffff8000000000003fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
-07fffffff0000000000007fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
-3ffffffff000000000000ffffffffffffffffffffffff003fff8
-ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
-fffffffff000000000003ffffffffffffffffffffffff003fff8
-ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffff800000000007ffffffffffffffffffffffff003fff8
-fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffff80000000000ffffffffffffffffffffffffe003fff8
-fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffc0000000003ffffffffffffffffffffffffe007fff8
-fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffe0000000007ffffffffffffffffffffffffe007fff8
-fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffe000000000fffffffffffffffffffffffffe00ffff8
-fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffff000000001fffffffffffffffffffffffffe00ffff8
-ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
-ffffffffff800000007fffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
-ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
-ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
-fffffffffff800001fffffffffffffffffffffffffffc01ffff8
-ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
-fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
-ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
-ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
-ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe01fffff8
-ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc03fffff8
-fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff803fffff8
-fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff803fffff8
-fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
-ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
-ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
-ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
-fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff803ffffff8
-fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff803ffffff8
-fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff807ffffff8
-fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff807ffffff8
-fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff007ffffff8
-fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff00fffffff8
-fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff00fffffff8
-ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe03fffffff8
-ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe03fffffff8
-ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffc07fffffff8
-ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffc07fffffff8
-fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff807fffffff8
-fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff807fffffff8
-fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff80ffffffff8
-fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff80ffffffff8
-fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
-fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
-ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
-ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
-ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
-ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff80fffffffff8
-ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff81fffffffff8
-ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff81fffffffff8
-ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff01fffffffff8
-ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff03fffffffff8
-ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe07fffffffff8
-fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc07fffffffff8
-fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc07fffffffff8
-fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
-fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
-fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff80ffffffffff8
-fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff80ffffffffff8
-fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff00ffffffffff8
-fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff01ffffffffff8
-fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff01ffffffffff8
-fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
-ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
-ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
-ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
-ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
-ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
-ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
-fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
-fffffffffffffffff03ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
-ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
-ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
-ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
-ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
-ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
-ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
-ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
-fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
-fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
-fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
-fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
-fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
-fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff807ffffffffffffffffff803ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff00fffffffffffffffffff803ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff00fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff807fffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff807fffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff807fffffffffffffffffffc03fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff00ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff807ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff807ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff00fffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
-fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
-fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
-fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
-fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
-fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
-fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
-ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffff801fffffffffffffffffffff801ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffff803fffffffffffffffffffff801ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
-ffffffffff003fffffffffffffffffffff803ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
-fffffffffe007fffffffffffffffffffff803ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
-fffffffffc007fffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
-fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
-fffffffff800ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
-fffffffff801ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
-fffffffff803ffffffffffffffffffffff007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
-fffffffff003fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
-ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
-ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
-ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
-ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
-ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
-fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
-fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
-9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
-0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
-07fffff0007ffffffffffffffffffffffc01fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
-07ffffe000fffffffffffffffffffffffc01fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
-03ffffc000fffffffffffffffffffffffc01fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
-03ffff8001fffffffffffffffffffffff801fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
-01ffff0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
-00fffe0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
-00fffe0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
-003ffc0007fffffffffffffffffffffff003fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
-001fe0001ffffffffffffffffffffffff003fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
-000fc0001ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
-000000001ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
-000000003ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
-000000003ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
-000000007fffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
-000000007fffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
-00000003ffffffffffffffffffffffffc00ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
-00000003ffffffffffffffffffffffffc00ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
-00000007ffffffffffffffffffffffffc00ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
-0000000fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
-0000001fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
-0000001fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
-0000003fffffffffffffffffffffffffc01ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
-0000007fffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
-0000007fffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
-000000ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
-000001ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
-000001ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
-000003ffffffffffffffffffffffffff801ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
-000003ffffffffffffffffffffffffff801ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
-000007ffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
-00000fffffffffffffffffffffffffff003ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
-00000fffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
-00001fffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
-00003fffffffffffffffffffffffffff007ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
-00007fffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
-0000ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
-0001ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
-0001ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
-0003ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
-0007ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
-0007ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
-001fffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
-007fffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
-00ffffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
-dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
-fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
-ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
-ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
-
-%%EndDocument
- @endspecial eop end
-%%Page: 1 2
-TeXDict begin 1 1 bop -128 -281 a Fh(Notes)-128 -128
-y Fg(Gn)n(us)30 b(is)g(complex.)44 b(Curren)n(tly)29
-b(it)i(has)e(some)h(876)f(in)n(teractiv)n(e)g(\(user-callable\))-128
--28 y(functions.)43 b(Of)30 b(these)f(618)f(are)h(in)g(the)h(t)n(w)n(o)
-f(ma)5 b(jor)28 b(mo)r(des)i(\(Group)f(and)g(Sum-)-128
-72 y(mary/Article\).)55 b(Man)n(y)33 b(of)h(these)g(functions)g(ha)n(v)
-n(e)f(more)g(than)h(one)f(binding,)-128 171 y(some)i(ha)n(v)n(e)f(3)h
-(or)f(ev)n(en)g(4)h(bindings.)59 b(The)35 b(total)g(n)n(um)n(b)r(er)g
-(of)g(k)n(eybindings)f(is)-128 271 y(677.)48 b(So)32
-b(in)g(order)e(to)i(sa)n(v)n(e)e(40\045)h(space,)h(ev)n(ery)f(function)
-h(is)f(listed)h(only)g(once)-128 371 y(on)25 b(this)g(b)r(o)r(oklet,)g
-(under)g(the)g(\\more)e(logical")g(binding.)36 b(Alternativ)n(e)24
-b(bindings)-128 470 y(are)j(giv)n(en)g(in)h(paren)n(theses)e(in)i(the)g
-(b)r(eginning)f(of)h(the)g(description.)-3 570 y(Man)n(y)23
-b(Gn)n(us)h(commands)f(are)g(a\013ected)h(b)n(y)f(the)i(n)n(umeric)e
-(pre\014x.)35 b(Normally)-128 669 y(y)n(ou)24 b(en)n(ter)f(a)h
-(pre\014x)g(b)n(y)g(holding)f(the)i(Meta)f(k)n(ey)f(and)h(t)n(yping)g
-(a)g(n)n(um)n(b)r(er,)g(but)h(in)-128 769 y(most)31 b(Gn)n(us)g(mo)r
-(des)f(y)n(ou)g(don't)h(need)g(to)g(use)f(Meta)h(since)g(the)g(digits)g
-(are)e(not)-128 869 y(self-inserting.)35 b(The)23 b(pre\014xed)f(b)r
-(eha)n(vior)f(of)i(commands)f(is)g(giv)n(en)g(in)h([brac)n(k)n(ets].)
--128 968 y(Often)28 b(the)g(pre\014x)g(is)f(used)h(to)f(sp)r(ecify:)80
-1068 y([distance])g(Ho)n(w)h(man)n(y)f(ob)5 b(jects)27
-b(to)g(mo)n(v)n(e)g(the)h(p)r(oin)n(t)f(o)n(v)n(er.)80
-1168 y([scop)r(e])37 b(Ho)n(w)g(man)n(y)f(ob)5 b(jects)37
-b(to)g(op)r(erate)g(on)g(\(including)h(the)f(curren)n(t)-128
-1267 y(one\).)80 1367 y([p/p])31 b(The)f(\\Pro)r(cess/Pre\014x)d(Con)n
-(v)n(en)n(tion":)42 b(If)31 b(a)f(pre\014x)g(is)h(giv)n(en)f(then)-128
-1467 y(it)j(determines)e(ho)n(w)g(man)n(y)g(ob)5 b(jects)31
-b(to)h(op)r(erate)f(on.)49 b(Else)31 b(if)h(there)f(are)g(some)-128
-1566 y(ob)5 b(jects)31 b(mark)n(ed)f(with)i(the)f(pro)r(cess)f(mark)h
-(#,)h(these)f(are)f(op)r(erated)h(on.)47 b(Else)-128
-1666 y(only)28 b(the)g(curren)n(t)e(ob)5 b(ject)28 b(is)f(a\013ected.)
-80 1765 y([lev)n(el])h(A)g(group)f(subscrib)r(edness)g(lev)n(el.)38
-b(Only)27 b(groups)g(with)h(a)g(lo)n(w)n(er)e(or)-128
-1865 y(equal)e(lev)n(el)g(will)g(b)r(e)h(a\013ected)f(b)n(y)g(the)g(op)
-r(eration.)35 b(If)25 b(no)e(pre\014x)h(is)g(giv)n(en,)g(`gn)n(us-)-128
-1965 y(group-default-list-lev)n(el')38 b(is)h(used.)73
-b(If)40 b(`gn)n(us-group-use-p)r(ermanen)n(t-lev)n(els',)-128
-2064 y(then)28 b(a)f(pre\014x)g(to)g(the)h(`g')e(and)i(`l')f(commands)g
-(will)g(also)f(set)h(the)h(default)g(lev)n(el.)80 2164
-y([score])40 b(An)h(article)f(score.)76 b(If)41 b(no)g(pre\014x)f(is)h
-(giv)n(en,)j(`gn)n(us-summary-)-128 2264 y(default-score')27
-b(is)g(used.)-128 2463 y(Gn)n(us)h(startup-commands:)-63
-2557 y(M-x)f(gn)n(us)405 b(start)27 b(Gn)n(us.)-63 2657
-y(M-x)g(gn)n(us-no-serv)n(er)46 b(start)33 b(Gn)n(us)h(without)g
-(connecting)f(to)h(serv)n(er)d(\(i.e.)56 b(to)682 2756
-y(read)27 b(mail\).)-128 2852 y(Additionally)-7 b(,)21
-b(there)d(are)f(the)i(t)n(w)n(o)f(commands)g Ff(gnus-plugged)13
-b Fg(and)18 b Ff(gnus-unplugged)p Fg(,)-128 2952 y(whic)n(h)32
-b(are)e(only)h(used)g(if)g(y)n(ou)g(w)n(an)n(t)f(to)h(do)n(wnload)f
-(news)h(and/or)f(read)g(previ-)-128 3051 y(ously)k(do)n(wnloaded)f
-(news)h(o\017ine)g(\(see)g(C-c)g(C-i)g(g)f(Gn)n(us)h(Unplugged)g
-(RET\).)-128 3151 y(Note:)66 b Ff(gnus-no-server)36 b
-Fg(ignores)k(the)j(stu\013)f(in)g Ff(gnus-agent-direct)o(ory)o
-Fg(,)-128 3298 y(and)19 b(th)n(us)f(do)r(es)g(not)g(allo)n(w)g(y)n(ou)f
-(to)i(use)f(Gn)n(us)g(Unplugged.)1814 3247 y(C-c)28 b(C-i)72
-b(Go)27 b(to)h(the)g(Gn)n(us)f(online)h Fe(info)p Fg(.)1814
-3347 y(C-c)g(C-b)49 b(Send)28 b(a)f(Gn)n(us)h Fe(bug)f
-Fg(rep)r(ort.)-128 3672 y Fd(Group-Mo)t(de)-128 3856
-y Fg(RET)50 b(\(=\))38 b(En)n(ter)f(this)i(group.)67
-b([Pre\014x:)57 b(ho)n(w)37 b(man)n(y)h(\(read\))f(articles)100
-3955 y(to)f(fetc)n(h.)62 b(P)n(ositiv)n(e:)53 b(new)n(est)35
-b(articles,)j(negativ)n(e:)52 b(oldest)36 b(ones;)100
-4055 y(non-n)n(umerical:)f(view)28 b(all)f(articles,)g(not)g(just)i
-(unread])1139 4515 y(1)p eop end
-%%Page: 2 3
-TeXDict begin 2 2 bop -128 -294 a Fg(M-RET)137 b(En)n(ter)27
-b(group)f(quic)n(kly)-7 b(.)-128 -194 y(M-SPC)152 b(Same)28
-b(as)f(RET)g(but)h(do)r(es)f(not)h(expunge)f(and)g(hide)h(dorman)n(ts.)
--128 -95 y(M-C-RET)49 b(En)n(ter)37 b(group)g(without)i(an)n(y)e(pro)r
-(cessing,)i(c)n(hanges)e(will)h(not)g(b)r(e)291 5 y(p)r(ermanen)n(t.)
--128 104 y(SPC)256 b(Select)47 b(this)g(group)e(and)i(displa)n(y)f(the)
-h(\014rst)f(\(unread\))g(article.)291 204 y([Same)28
-b(pre\014x)f(as)g(ab)r(o)n(v)n(e.])-128 304 y(?)380 b(Giv)n(e)28
-b(a)f(v)n(ery)f(short)h(help)h(message.)-128 403 y Fc(<)354
-b Fg(Go)28 b(to)f(the)h(b)r(eginning)g(of)f(the)h(Group)f(bu\013er.)
--128 503 y Fc(>)354 b Fg(Go)28 b(to)f(the)h(end)g(of)f(the)h(Group)f
-(bu\013er.)-128 603 y(,)396 b(Jump)28 b(to)f(the)h(lo)n(w)n(est-lev)n
-(el)e(group)h(with)h(unread)f(articles.)-128 702 y(.)396
-b(Jump)28 b(to)f(the)h(\014rst)g(group)e(with)i(unread)f(articles.)-128
-802 y(^)377 b(En)n(ter)27 b(the)h(Serv)n(er)e(bu\013er)i(mo)r(de.)-128
-901 y(a)377 b(P)n(ost)30 b(an)g Fe(article)h Fg(to)g(a)g(group)e
-([Pre\014x:)43 b(use)30 b(group)g(under)h(p)r(oin)n(t)291
-1001 y(to)d(\014nd)g(p)r(osting-st)n(yle].)-128 1101
-y(b)373 b(Find)28 b Fe(b)s(ogus)f Fg(groups)f(and)i(delete)f(them.)-128
-1200 y(c)382 b(Mark)22 b(all)h(un)n(tic)n(k)n(ed)f(articles)g(in)h
-(this)g(group)e(as)i(read)e(\()p Fe(catc)m(h-up)p Fg(\).)291
-1300 y([p/p])-128 1400 y(g)377 b(Chec)n(k)27 b(the)h(serv)n(er)e(for)h
-(new)h(articles)e(\()p Fe(get)p Fg(\).)38 b([lev)n(el])-128
-1499 y(M-g)273 b(Chec)n(k)27 b(the)g(serv)n(er)e(for)h(new)h(articles)f
-(in)h(this)g(group)f(\()p Fe(get)p Fg(\).)37 b([p/p])-128
-1599 y(j)394 b Fe(Jump)28 b Fg(to)f(a)h(group.)-128 1698
-y(m)350 b Fe(Mail)26 b Fg(a)h(message)f(to)h(someone)e([Pre\014x:)36
-b(use)27 b(group)f(under)h(p)r(oin)n(t)291 1798 y(to)h(\014nd)g(p)r
-(osting-st)n(yle].)-128 1898 y(n)373 b(Go)28 b(to)f(the)h
-Fe(next)g Fg(group)e(with)j(unread)e(articles.)36 b([distance])-128
-1997 y(M-n)269 b(Go)24 b(to)g(the)g Fe(next)h Fg(group)e(on)g(the)i
-(same)e(or)g(lo)n(w)n(er)g(lev)n(el.)35 b([distance])-128
-2097 y(p)373 b(\(DEL\))21 b(Go)g(to)f(the)h Fe(previous)g
-Fg(group)e(with)i(unread)f(articles.)34 b([dis-)291 2197
-y(tance])-128 2296 y(M-p)269 b(Go)26 b(to)g(the)h Fe(previous)e
-Fg(group)g(on)h(the)h(same)e(or)h(lo)n(w)n(er)e(lev)n(el.)36
-b([dis-)291 2396 y(tance])-128 2495 y(q)375 b Fe(Quit)27
-b Fg(Gn)n(us.)-128 2595 y(r)386 b(Re-read)27 b(the)h(init)g(\014le)g
-(\()p Fe(reset)p Fg(\).)-128 2695 y(s)386 b Fe(Sa)m(v)m(e)53
-b Fg(the)f(`.newsrc.eld')g(\014le)g(\(and)f(`.newsrc')h(if)g(`gn)n
-(us-sa)n(v)n(e-)291 2794 y(newsrc-\014le'\).)-128 2894
-y(z)382 b(Susp)r(end)28 b(\(kill)g(all)g(bu\013ers)f(of)6
-b(\))29 b(Gn)n(us.)-128 2994 y(B)360 b Fe(Bro)m(wse)28
-b Fg(a)f(foreign)f(serv)n(er.)-128 3093 y(C)359 b(Mark)27
-b(all)g(articles)g(in)h(this)g(group)e(as)h(read)g(\()p
-Fe(Catc)m(h-up)p Fg(\).)38 b([p/p])-128 3193 y(F)365
-b Fe(Find)28 b Fg(new)f(groups)f(and)i(pro)r(cess)e(them.)-128
-3293 y(N)357 b(Go)28 b(to)f(the)h Fe(next)g Fg(group.)36
-b([distance])-128 3392 y(P)362 b(Go)28 b(to)f(the)h Fe(previous)f
-Fg(group.)36 b([distance])-128 3492 y(Q)354 b Fe(Quit)27
-b Fg(Gn)n(us)h(without)g(sa)n(ving)e(an)n(y)h(startup)g(\(.newsrc\))h
-(\014les.)-128 3591 y(R)358 b Fe(Restart)28 b Fg(Gn)n(us.)-128
-3691 y(Z)368 b(Clear)27 b(the)h(dribble)f(bu\013er.)1139
-4515 y(2)p eop end
-%%Page: 3 4
-TeXDict begin 3 3 bop -128 -294 a Fg(M-c)297 b(Clear)26
-b(data)h(from)h(group)e(\(marks)h(and)g(list)h(of)g(read)e(articles\).)
--128 -194 y(C-c)i(C-s)164 b Fe(Sort)39 b Fg(the)f(groups)g(b)n(y)g
-(name,)j(n)n(um)n(b)r(er)d(of)h(unread)f(articles,)i(or)310
--95 y(lev)n(el)27 b(\(dep)r(ending)h(on)f(`gn)n
-(us-group-sort-function'\).)-128 5 y(C-c)h(C-x)153 b(Run)26
-b(all)f(expirable)g(articles)g(in)g(this)h(group)f(through)g(the)h
-Fe(expiry)310 104 y Fg(pro)r(cess.)-128 204 y(C-c)i(M-C-x)49
-b(Run)28 b(all)f(articles)g(in)h(all)f(groups)f(through)h(the)h
-Fe(expiry)g Fg(pro)r(cess.)-128 304 y(C-c)g(M-g)139 b(Activ)-5
-b(ate)28 b(all)f Fe(groups)p Fg(.)-128 403 y(C-c)h(C-i)174
-b(Gn)n(us)27 b(online-man)n(ual)g(\()p Fe(info)p Fg(\).)-128
-503 y(C-x)h(C-t)158 b Fe(T)-8 b(ransp)s(ose)27 b Fg(t)n(w)n(o)g
-(groups.)-128 603 y(H)h(f)323 b(F)-7 b(etc)n(h)28 b(this)f(group's)g
-Fe(F)-11 b(A)m(Q)28 b Fg(\(using)g(ange-ftp\).)-128 702
-y(H)g(c)311 b(Displa)n(y)27 b(this)h(group's)e Fe(c)m(harter)p
-Fg(.)39 b([Pre\014x:)d(query)26 b(for)h(group])-128 802
-y(H)h(C)288 b(Displa)n(y)42 b(this)i(group's)e Fe(con)m(trol)50
-b(message)41 b Fg(\(using)i(ange-ftp\).)310 901 y([Pre\014x:)36
-b(query)26 b(for)h(group])-128 1001 y(H)h(v)304 b(\(V\))28
-b(Displa)n(y)f(the)h(Gn)n(us)g Fe(v)m(ersion)f Fg(n)n(um)n(b)r(er.)-128
-1101 y(H)h(d)302 b(\(C-c)29 b(C-d\))h(Sho)n(w)f(the)i
-Fe(description)e Fg(of)g(this)h(group)f([Pre\014x:)40
-b(re-)310 1200 y(read)26 b(from)i(serv)n(er].)-128 1300
-y(M-d)288 b Fe(Describ)s(e)27 b Fg(all)g(groups.)36 b([Pre\014x:)f
-(re-read)26 b(from)h(serv)n(er])-128 1400 y(D)i(g)304
-b(Regenerate)26 b(a)h(Siev)n(e)g(script)h(from)f(group)f(parameters.)
--128 1499 y(D)j(u)300 b(Regenerate)26 b(Siev)n(e)h(script)g(and)h
-Fe(upload)f Fg(to)h(serv)n(er.)-128 1770 y Fh(Group)38
-b(Subscrib)s(edness-Lev)m(els)-128 1923 y Fg(The)24 b(table)g(b)r(elo)n
-(w)g(assumes)e(that)j(y)n(ou)e(use)g(the)h(default)h(Gn)n(us)e(lev)n
-(els.)35 b(Fill)25 b(y)n(our)-128 2023 y(user-sp)r(eci\014c)i(lev)n
-(els)g(in)h(the)g(blank)f(cells.)p -128 2150 1608 4 v
--130 2250 4 100 v -78 2220 a(Lev)n(el)p 161 2250 V 99
-w(Groups)p 905 2250 V 479 w(Status)p 1478 2250 V -128
-2253 1608 4 v -130 2353 4 100 v -3 2323 a(1)p 161 2353
-V 173 w(draft/mail)g(groups)p 905 2353 V 1478 2353 V
--130 2452 V -3 2422 a(2)p 161 2452 V 173 w(mail)h(groups)p
-905 2452 V 1478 2452 V -130 2552 V -3 2522 a(3)p 161
-2552 V 905 2552 V 917 w(subscrib)r(ed)p 1478 2552 V -130
-2652 V -3 2622 a(4)p 161 2652 V 905 2652 V 1478 2652
-V -130 2751 V -3 2721 a(5)p 161 2751 V 173 w(default)g(list)g(lev)n(el)
-p 905 2751 V 1478 2751 V -128 2754 1608 4 v -130 2854
-4 100 v -3 2824 a(6)p 161 2854 V 905 2854 V 917 w(unsubscrib)r(ed)p
-1478 2854 V -130 2954 V -3 2924 a(7)p 161 2954 V 905
-2954 V 1478 2954 V -128 2957 1608 4 v -130 3057 4 100
-v -3 3027 a(8)p 161 3057 V 905 3057 V 917 w(zom)n(bies)p
-1478 3057 V -128 3060 1608 4 v -130 3160 4 100 v -3 3130
-a(9)p 161 3160 V 905 3160 V 917 w(killed)p 1478 3160
-V -128 3163 1608 4 v -128 3357 a Fh(List)38 b(Groups)-128
-3508 y Fg(A)28 b(d)50 b(\(C-c)26 b(C-M-a\))e(List)i(all)f(groups)f
-(whose)h(names)g(or)f Fe(descriptions)h Fg(matc)n(h)58
-3607 y(a)j(regexp.)-128 3707 y(A)g(k)52 b(\(C-c)31 b(C-l\))g(List)g
-(all)g Fe(killed)f Fg(groups.)45 b([Pre\014x:)e(lo)r(ok)30
-b(at)h(activ)n(e-\014le)f(from)58 3807 y(serv)n(er])-128
-3906 y(A)e(l)73 b(List)25 b(all)f(groups)f(on)h(a)f(sp)r(eci\014c)i
-(lev)n(el.)35 b([Pre\014x:)f(also)23 b(list)i(groups)e(with)i(no)58
-4006 y(unread)i(articles])1139 4515 y(3)p eop end
-%%Page: 4 5
-TeXDict begin 4 4 bop -128 -294 a Fg(A)28 b(a)84 b(\(C-c)21
-b(C-a\))g(List)g(all)f(groups)g(whose)g(names)h(matc)n(h)g(a)f(regexp)g
-(\()p Fe(aprop)s(os)p Fg(\).)-128 -194 y(A)28 b(A)64
-b(List)28 b(the)g(serv)n(er's)e(activ)n(e-\014le.)-128
--95 y(A)i(M)50 b(List)28 b(groups)e(that)i Fe(matc)m(h)h
-Fg(a)e(regexp.)-128 5 y(A)h(m)57 b(List)25 b(groups)d(that)j
-Fe(matc)m(h)g Fg(a)f(regexp)f(and)h(ha)n(v)n(e)f(unread)h(articles.)35
-b([lev)n(el])-128 104 y(A)28 b(s)93 b(\(l\))29 b(List)e(all)g
-Fe(subscrib)s(ed)g Fg(groups)f(with)i(unread)f(articles.)36
-b([lev)n(el;)27 b(5)g(and)88 204 y(lo)n(w)n(er)f(is)i(the)g(default])
--128 304 y(A)g(u)80 b(\(L\))29 b(List)g(all)f(groups)e(\(including)j
-(read)f(and)g Fe(unsubscrib)s(ed)p Fg(\).)38 b([lev)n(el;)29
-b(7)88 403 y(and)f(lo)n(w)n(er)e(is)h(the)h(default])-128
-503 y(A)g(z)89 b(List)28 b(all)f Fe(zom)m(bie)g Fg(groups.)-128
-603 y(A)h(c)89 b(List)28 b(all)f(groups)f(with)j(cac)n(hed)d(articles.)
-36 b([lev)n(el])-128 702 y(A)28 b(?)87 b(List)28 b(all)f(groups)f(with)
-j(dorman)n(t)d(articles.)36 b([lev)n(el])-128 973 y Fh(Create/Edit)h(F)
--9 b(oreign)38 b(Groups)-128 1126 y Fg(The)28 b(select)g(metho)r(ds)f
-(are)g(indicated)h(in)g(paren)n(theses.)-60 1220 y(G)g(a)180
-b(Mak)n(e)26 b(the)i(Gn)n(us)g(list)g Fe(arc)m(hiv)m(e)h
-Fg(group.)36 b(\(nndir)27 b(o)n(v)n(er)f(ange-ftp\))-60
-1320 y(G)i(c)185 b Fe(Customize)26 b Fg(this)i(group's)e(parameters.)
--60 1419 y(G)i(d)176 b(Mak)n(e)22 b(a)i Fe(directory)g
-Fg(group)f(\(ev)n(ery)g(\014le)h(m)n(ust)f(b)r(e)i(a)e(p)r(osting)g
-(and)h(\014les)255 1519 y(m)n(ust)j(ha)n(v)n(e)g(n)n(umeric)g(names\).)
-37 b(\(nndir\))-60 1619 y(G)28 b(D)159 b(En)n(ter)19
-b(a)h Fe(directory)h Fg(as)f(a)g(\(temp)r(orary\))g(group.)34
-b(\(nneething)21 b(without)255 1718 y(recording)k(articles)i(read\))-60
-1818 y(G)h(e)185 b(\(M-e\))27 b Fe(Edit)h Fg(this)f(group's)g(select)g
-(metho)r(d.)-60 1918 y(G)h(E)165 b Fe(Edit)27 b Fg(this)h(group's)e
-(info)i(\(select)f(metho)r(d,)h(articles)f(read,)g(etc\).)-60
-2017 y(G)h(f)197 b(Mak)n(e)26 b(a)h(group)g(based)g(on)g(a)g
-Fe(\014le)p Fg(.)37 b(\(nndo)r(c\))-60 2117 y(G)28 b(h)176
-b(Mak)n(e)26 b(the)i(Gn)n(us)g Fe(help)f Fg(\(do)r(cumen)n(tation\))h
-(group.)35 b(\(nndo)r(c\))-60 2217 y(G)28 b(k)178 b(Mak)n(e)26
-b(a)h Fe(kib)s(oze)h Fg(group.)35 b(\(nnkib)r(oze\))-60
-2316 y(G)28 b(m)153 b Fe(Mak)m(e)28 b Fg(a)f(new)h(group.)-60
-2416 y(G)g(p)176 b(Edit)27 b(this)h(group's)e Fe(parameters)p
-Fg(.)-60 2515 y(G)i(r)189 b(Rename)27 b(this)h(group)e(\(do)r(es)i(not)
-f(w)n(ork)g(with)h(read-only)e(groups!\).)-60 2615 y(G)i(u)176
-b(Create)26 b(one)h(of)h(the)g(groups)e(men)n(tioned)i(in)g(gn)n(us-)p
-Fe(useful)p Fg(-groups.)-60 2715 y(G)g(v)178 b(Add)28
-b(this)g(group)e(to)i(a)f Fe(virtual)h Fg(group.)35 b([p/p])-60
-2814 y(G)28 b(V)160 b(Mak)n(e)26 b(a)h(new)h(empt)n(y)g
-Fe(virtual)g Fg(group.)36 b(\(nn)n(virtual\))-60 2914
-y(G)28 b(w)162 b(Create)34 b(ephemeral)g(group)g(based)g(on)h(w)n
-(eb-searc)n(h.)56 b([Pre\014x:)51 b(mak)n(e)255 3014
-y(solid)27 b(group)f(instead])-60 3113 y(G)i(R)161 b(Mak)n(e)26
-b(an)i Fe(RSS)f Fg(group.)-60 3213 y(G)h(DEL)50 b Fe(Delete)26
-b Fg(group)h([Pre\014x:)36 b(delete)28 b(all)f(articles)g(as)f(w)n
-(ell].)-60 3312 y(G)i(x)178 b(Expunge)26 b(all)i(deleted)g(articles)e
-(in)i(an)f(nnimap)h(mailb)r(o)n(x.)-60 3412 y(G)g(l)199
-b(Edit)27 b(A)n(CL)h(\(Access)f(Con)n(trol)f Fe(List)p
-Fg(\))i(for)f(an)g(nnimap)h(mailb)r(o)n(x.)-128 3512
-y(Y)-7 b(ou)35 b(can)f(also)g(create)f(mail-groups)g(and)h(read)g(y)n
-(our)f(mail)i(with)g(Gn)n(us)f(\(v)n(ery)-128 3612 y(useful)c(if)g(y)n
-(ou)e(are)g(subscrib)r(ed)h(to)g(mailing)f(lists\),)i(using)f(one)g(of)
-g(the)g(metho)r(ds)-128 3712 y(nnm)n(b)r(o)n(x,)24 b(nn)n(bab)n(yl,)f
-(nnml,)h(nnmh,)g(or)d(nnfolder.)35 b(Read)23 b(ab)r(out)f(it)h(in)g
-(the)f(online)-128 3811 y(info)28 b(\(C-c)g(C-i)f(g)g(Reading)g(Mail)h
-(RET\).)-128 4044 y Fh(Unsubscrib)s(e,)40 b(Kill)d(and)h(Y)-9
-b(ank)38 b(Groups)1139 4515 y Fg(4)p eop end
-%%Page: 5 6
-TeXDict begin 5 5 bop -128 -294 a Fg(S)28 b(k)138 b(\(C-k\))27
-b Fe(Kill)f Fg(this)i(group.)-128 -194 y(S)g(l)159 b(Set)27
-b(the)h Fe(lev)m(el)f Fg(of)h(this)g(group.)36 b([p/p])-128
--95 y(S)28 b(s)149 b(\(U\))28 b(Prompt)f(for)g(a)g(group)g(and)g
-(toggle)f(its)i Fe(subscription)p Fg(.)-128 5 y(S)g(t)150
-b(\(u\))28 b Fe(T)-8 b(oggle)27 b Fg(subscription)g(to)g(this)h(group.)
-36 b([p/p])-128 104 y(S)28 b(w)122 b(\(C-w\))27 b(Kill)h(all)f(groups)f
-(in)i(the)g(region.)-128 204 y(S)g(y)138 b(\(C-y\))27
-b Fe(Y)-8 b(ank)29 b Fg(the)f(last)f(killed)h(group.)-128
-304 y(S)g(z)145 b(Kill)27 b(all)g Fe(zom)m(bie)g Fg(groups.)-128
-403 y(S)h(C-k)50 b(Kill)27 b(all)g(groups)f(on)i(a)f(certain)g(lev)n
-(el.)-128 674 y Fh(Mark)39 b(Groups)-128 825 y Fg(M)28
-b(m)50 b(\(#\))29 b(Set)f(the)g(pro)r(cess)e Fe(mark)i
-Fg(on)g(this)g(group.)35 b([scop)r(e])-128 925 y(M)28
-b(r)86 b(Mark)27 b(all)g(groups)f(matc)n(hing)h(regular)f(expression.)
--128 1024 y(M)i(u)73 b(\(M-#\))44 b(Remo)n(v)n(e)e(the)h(pro)r(cess)f
-(mark)h(from)f(this)i(group)e(\()p Fe(unmark)p Fg(\).)95
-1124 y([scop)r(e])-128 1223 y(M)28 b(U)57 b(Remo)n(v)n(e)27
-b(the)h(pro)r(cess)e(mark)h(from)g(all)g(groups)g(\()p
-Fe(umark)32 b(all)p Fg(\).)-128 1323 y(M)c(w)59 b(Mark)27
-b(all)g(groups)f(in)i(the)g(curren)n(t)f(region.)36 b([pre\014x:)g
-(unmark])-128 1423 y(M)28 b(b)73 b(Mark)27 b(all)g(groups)f(in)i(the)g
-Fe(bu\013er)p Fg(.)37 b([pre\014x:)g(unmark])-128 1693
-y Fh(Group-Unplugged)-128 1844 y Fg(J)28 b(j)87 b(T)-7
-b(oggle)26 b(plugged-state.)-128 1944 y(J)i(s)79 b(F)-7
-b(etc)n(h)28 b(articles)e(from)i(all)f(groups)f(for)h
-(o\017ine-reading.)-128 2044 y(J)h(u)66 b(F)-7 b(etc)n(h)28
-b(all)f(eligible)g(articles)g(from)g(this)h(group.)-128
-2143 y(J)g(S)66 b Fe(Send)27 b Fg(all)h(sendable)f(messages)f(in)i(the)
-g(drafts)f(group.)-128 2243 y(J)h(c)75 b(En)n(ter)27
-b Fe(category)i Fg(bu\013er.)-128 2342 y(J)f(a)70 b Fe(Add)28
-b Fg(this)g(group)e(to)i(an)f(Agen)n(t)g(category)f([p/p].)-128
-2442 y(J)i(r)79 b Fe(Remo)m(v)m(e)27 b Fg(this)h(group)e(from)i(its)f
-(Agen)n(t)h(category)e([p/p].)-128 2542 y(J)i(Y)50 b(Sync)n(hronize)26
-b(\015ags)h(c)n(hanged)f(while)i(unplugged)g(with)g(remote)f(serv)n
-(er.)-128 2812 y Fh(Group)38 b(T)-9 b(opics)-128 2966
-y Fg(T)i(opics)25 b(are)e(\\categories")f(for)i(groups.)35
-b(Press)23 b(t)i(in)g(the)g(group-bu\013er)f(to)g(toggle)-128
-3065 y(gn)n(us-topic-mo)r(de)j(\(C-c)g(C-i)g(g)h(Group)f(T)-7
-b(opics)27 b(RET\).)-91 3164 y(T)h(n)176 b(Prompt)26
-b(for)h(topic)h Fe(name)f Fg(and)h(create)f(it.)-91 3264
-y(T)h(m)153 b Fe(Mo)m(v)m(e)27 b Fg(the)h(curren)n(t)f(group)g(to)g
-(some)g(other)g(topic)h([p/p].)-91 3363 y(T)g(j)197 b
-Fe(Jump)27 b Fg(to)h(a)f(topic.)-91 3463 y(T)h(c)185
-b Fe(Cop)m(y)28 b Fg(the)g(curren)n(t)e(group)h(to)g(some)g(other)g
-(topic)h([p/p].)-91 3563 y(T)g(D)159 b(Remo)n(v)n(e)26
-b(\(not)i(delete\))g(the)g(curren)n(t)f(group)f([p/p].)-91
-3662 y(T)i(M)146 b Fe(Mo)m(v)m(e)27 b Fg(all)h(groups)e(matc)n(hing)h
-(a)g(regexp)g(to)g(a)g(topic.)-91 3762 y(T)h(C)162 b
-Fe(Cop)m(y)28 b Fg(all)f(groups)f(matc)n(hing)h(a)h(regexp)e(to)h(a)h
-(topic.)-91 3861 y(T)g(H)160 b(T)-7 b(oggle)26 b Fe(hiding)g
-Fg(of)i(empt)n(y)g(topics.)-91 3961 y(T)g(r)189 b Fe(Rename)26
-b Fg(a)i(topic.)-91 4061 y(T)g(DEL)50 b(Delete)28 b(an)f(empt)n(y)h
-(topic.)-91 4160 y(T)g(#)153 b(Mark)26 b(all)i(groups)e(in)i(the)g
-(curren)n(t)e(topic)i(with)g(the)g(pro)r(cess-mark.)1139
-4515 y(5)p eop end
-%%Page: 6 7
-TeXDict begin 6 6 bop -128 -294 a Fg(T)28 b(M-#)73 b(Remo)n(v)n(e)23
-b(the)i(pro)r(cess-mark)d(from)i(all)g(groups)f(in)h(the)h(curren)n(t)e
-(topic.)-128 -194 y(T)28 b(T)-7 b(AB)72 b(\(T)-7 b(AB\))28
-b(Inden)n(t)g(curren)n(t)f(topic)g([Pre\014x:)36 b(uninden)n(t].)-128
--95 y(M-T)-7 b(AB)56 b(Uninden)n(t)28 b(the)g(curren)n(t)f(topic.)-128
-5 y(RET)156 b(\(SPC\))28 b(Either)f(unfold)h(topic)f(or)g(en)n(ter)g
-(group)g([lev)n(el].)-128 104 y(T)h(s)213 b Fe(Sho)m(w)28
-b Fg(the)g(curren)n(t)e(topic.)37 b([Pre\014x:)f(sho)n(w)27
-b(p)r(ermanen)n(tly])-128 204 y(T)h(h)200 b Fe(Hide)27
-b Fg(the)h(curren)n(t)e(topic.)37 b([Pre\014x:)f(hide)28
-b(p)r(ermanen)n(tly])-128 304 y(C-c)g(C-x)49 b(Expire)27
-b(all)g(articles)f(in)i(curren)n(t)f(group)g(or)f(topic.)-128
-403 y(C-k)202 b Fe(Kill)26 b Fg(a)h(group)g(or)f(topic.)-128
-503 y(C-y)202 b Fe(Y)-8 b(ank)29 b Fg(a)e(group)f(or)h(topic.)-128
-603 y(A)h(T)184 b(List)28 b(activ)n(e-\014le)e(using)h
-Fe(topics)p Fg(.)-128 702 y(G)h(p)195 b(Edit)28 b(topic-)p
-Fe(parameters)p Fg(.)-128 802 y(T)g(M-n)96 b(Go)27 b(to)h
-Fe(next)g Fg(topic.)37 b([distance])-128 901 y(T)28 b(M-p)96
-b(Go)27 b(to)h Fe(previous)f Fg(topic.)37 b([distance])-128
-1155 y Fe(T)-8 b(opic)32 b(Sorting)-128 1303 y Fg(T)c(S)g(a)77
-b(Sort)27 b Fe(alphab)s(etically)p Fg(.)-128 1403 y(T)h(S)g(u)73
-b(Sort)27 b(b)n(y)g(n)n(um)n(b)r(er)h(of)f Fe(unread)h
-Fg(articles.)-128 1503 y(T)g(S)g(l)96 b(Sort)27 b(b)n(y)g(group)g
-Fe(lev)m(el)p Fg(.)-128 1602 y(T)h(S)g(v)75 b(Sort)27
-b(b)n(y)g(group)g(score)f(\()p Fe(v)-5 b(alue)p Fg(\).)-128
-1702 y(T)28 b(S)g(r)86 b(Sort)27 b(b)n(y)g(group)g Fe(rank)p
-Fg(.)-128 1801 y(T)h(S)g(m)50 b(Sort)27 b(b)n(y)g Fe(metho)s(d)p
-Fg(.)-128 1901 y(T)h(S)g(e)82 b(Sort)27 b(b)n(y)g Fe(serv)m(er)i
-Fg(name.)-128 2001 y(T)f(S)g(s)86 b(Sort)27 b(according)f(to)h(`gn)n
-(us-group-sort-function'.)-128 2096 y(With)i(a)e(pre\014x)g(these)h
-(commands)f(will)h(sort)e(in)i(rev)n(erse)e(order.)-128
-2371 y Fd(Summary)45 b(Mo)t(de)-128 2555 y Fg(SPC)169
-b(\(A)26 b(SPC,)g(A)g(n\))h(Select)f(an)f(article,)h(scroll)f(it)h(one)
-g(page,)f(mo)n(v)n(e)g(to)h(the)204 2654 y(next)h(one.)-128
-2754 y(DEL)160 b(\(A)28 b(DEL,)f(A)h(p,)g(b\))g(Scroll)f(this)h
-(article)f(one)g(page)g(bac)n(k.)36 b([distance])-128
-2853 y(RET)154 b(\(A)28 b(RET\))f(Scroll)g(this)h(article)f(one)g(line)
-h(forw)n(ard.)35 b([distance])-128 2953 y(M-RET)50 b(\(A)28
-b(M-RET\))f(Scroll)g(this)h(article)f(one)g(line)h(bac)n(kw)n(ard.)35
-b([distance])-128 3053 y(=)267 b(Expand)38 b(the)i(Summary)f(windo)n(w)
-g(\(fullsize\).)73 b([Pre\014x:)60 b(shrink)38 b(to)204
-3152 y(displa)n(y)26 b(article)h(windo)n(w])-128 3252
-y(&)267 b(Execute)36 b(a)h(command)g(on)g(all)g(articles)f(whose)h
-(header)f(matc)n(hes)h(a)204 3352 y(regexp.)e([Pre\014x:)h(mo)n(v)n(e)
-27 b(bac)n(kw)n(ards])-128 3451 y(M-&)163 b(Execute)27
-b(a)g(command)g(on)g(all)h(articles)e(ha)n(ving)h(the)h(pro)r(cess)e
-(mark.)-128 3551 y(M-n)182 b(\(G)33 b(M-n\))h(Go)f(to)g(the)h
-Fe(next)f Fg(summary)g(line)g(of)g(an)g(unread)g(article.)204
-3650 y([distance])-128 3750 y(M-p)182 b(\(G)27 b(M-p\))f(Go)g(to)h(the)
-g Fe(previous)f Fg(summary)f(line)i(of)f(an)g(unread)g(arti-)204
-3850 y(cle.)36 b([distance])1139 4515 y(6)p eop end
-%%Page: 7 8
-TeXDict begin 7 7 bop -128 -294 a Fg(M-s)151 b Fe(Searc)m(h)29
-b Fg(through)e(all)g(subsequen)n(t)g(articles)g(for)g(a)g(regexp.)-128
--194 y(M-r)151 b(Searc)n(h)26 b(through)h(all)g(previous)g(articles)g
-(for)g(a)g(regexp.)-128 -95 y(A)h(P)141 b Fe(P)m(ostscript)p
-Fg(-prin)n(t)27 b(curren)n(t)g(bu\013er.)-128 5 y(M-k)140
-b(Edit)27 b(this)h(group's)f Fe(kill)f Fg(\014le.)-128
-104 y(M-K)119 b(Edit)27 b(the)h(general)f Fe(kill)f Fg(\014le.)-128
-204 y(C-t)168 b(T)-7 b(oggle)26 b Fe(truncation)i Fg(of)g(summary)f
-(lines.)-128 304 y(Y)h(g)156 b(Regenerate)26 b(the)i(summary-bu\013er.)
--128 403 y(Y)g(c)161 b(Insert)27 b(all)g(cac)n(hed)g(articles)g(in)n
-(to)g(the)h(summary-bu\013er.)-128 503 y(M-C-e)59 b Fe(Edit)27
-b Fg(the)h(group-parameters.)-128 603 y(M-C-a)54 b(Customize)27
-b(the)h(group-parameters.)-128 702 y(A)g Fc(<)133 b Fg(\()p
-Fc(<)p Fg(,)27 b(A)h(b\))g(Scroll)f(to)h(the)g(b)r(eginning)f(of)h
-(this)g(article.)-128 802 y(A)g Fc(>)133 b Fg(\()p Fc(>)p
-Fg(,)27 b(A)h(e\))g(Scroll)f(to)h(the)f(end)h(of)g(this)g(article.)-128
-901 y(A)g(s)165 b(\(s\))28 b(P)n(erform)e(an)h(i)p Fe(searc)m(h)i
-Fg(in)f(the)g(article)e(bu\013er.)-128 1001 y(A)i(D)135
-b(\(C-d\))30 b(Un)p Fe(digestify)e Fg(this)i(article)f(in)n(to)g(a)g
-(separate)f(group.)41 b([Pre\014x:)160 1101 y(force)27
-b(digest])-128 1200 y(M-C-d)50 b(Lik)n(e)59 b(C-d,)67
-b(but)59 b(op)r(en)h(sev)n(eral)d(do)r(cumen)n(ts)j(in)f(nndo)r
-(c-groups,)160 1300 y(wrapp)r(ed)27 b(in)h(an)f(nn)n(virtual)g(group)g
-([p/p])-128 1400 y(A)h(g)156 b(\(g\))28 b(\(Re\)fetc)n(h)g(this)g
-(article)f(\()p Fe(get)p Fg(\).)37 b([Pre\014x:)f(get)27
-b(ra)n(w)g(v)n(ersion])-128 1499 y(A)h(r)165 b(\(^,)28
-b(A)g(^\))g(F)-7 b(etc)n(h)28 b(the)g(paren)n(t\(s\))g(of)g(this)g
-(article.)37 b([Pre\014x:)f(if)29 b(p)r(ositiv)n(e)160
-1599 y(fetc)n(h)f Fb(n)33 b Fg(ancestors;)26 b(negativ)n(e:)36
-b(fetc)n(h)28 b(only)f(the)h Fb(n)6 b Fg(th)28 b(ancestor])-128
-1698 y(A)g(t)166 b Fe(T)-8 b(ranslate)28 b Fg(this)g(article.)-128
-1798 y(A)g(R)137 b(F)-7 b(etc)n(h)28 b(all)f(articles)g(men)n(tioned)g
-(in)h(the)g Fe(References)p Fg(-header.)-128 1898 y(A)g(T)138
-b(F)-7 b(etc)n(h)28 b(full)g Fe(thread)g Fg(in)g(whic)n(h)g(the)g
-(curren)n(t)e(article)h(app)r(ears.)-128 1997 y(M-^)142
-b(F)-7 b(etc)n(h)28 b(the)g(article)f(with)h(a)f(giv)n(en)g
-(Message-ID.)-128 2097 y(S)h(y)170 b Fe(Y)-8 b(ank)23
-b Fg(the)f(curren)n(t)e(article)h(in)n(to)h(an)f(existing)g
-(message-bu\013er.)34 b([p/p])-128 2197 y(A)28 b(M)122
-b(Setup)28 b(group)f(parameters)g(for)g Fe(mailing)g
-Fg(lists)h(from)g(headers.)37 b([Pre-)160 2296 y(\014x:)g(replace)26
-b(old)i(settings])-128 2567 y Fh(Select)38 b(Articles)-128
-2720 y Fg(These)27 b(commands)g(select)g(the)h(target)e(article.)36
-b(They)27 b(do)g(not)g(understand)g(the)-128 2820 y(pre\014x.)-60
-2914 y(h)230 b(En)n(ter)27 b(article-bu\013er.)-60 3014
-y(G)h(b)137 b(\(,\))29 b(Go)e(to)h(the)g Fe(b)s(est)e
-Fg(article)h(\(the)i(one)e(with)h(highest)f(score\).)-60
-3113 y(G)h(f)158 b(\(.\))38 b(Go)27 b(to)h(the)g Fe(\014rst)g
-Fg(unread)f(article.)-60 3213 y(G)h(n)137 b(\(n\))29
-b(Go)e(to)h(the)g Fe(next)g Fg(unread)f(article.)-60
-3312 y(G)h(p)137 b(\(p\))29 b(Go)e(to)h(the)g Fe(previous)f
-Fg(unread)g(article.)-60 3412 y(G)h(N)121 b(\(N\))29
-b(Go)e(to)h Fe(the)f Fg(next)h(article.)-60 3512 y(G)g(P)126
-b(\(P\))28 b(Go)g(to)f(the)h Fe(previous)f Fg(article.)-60
-3611 y(G)h(C-n)49 b(\(M-C-n\))28 b(Go)g(to)f(the)h Fe(next)g
-Fg(article)f(with)h(the)g(same)f(sub)5 b(ject.)-60 3711
-y(G)28 b(C-p)49 b(\(M-C-p\))28 b(Go)g(to)f(the)h Fe(previous)f
-Fg(article)g(with)h(the)g(same)f(sub)5 b(ject.)-60 3811
-y(G)28 b(l)160 b(\(l\))29 b(Go)e(to)h(the)g(previously)e(read)h
-(article)g(\()p Fe(last-read-article)p Fg(\).)-60 3910
-y(G)h(o)141 b(P)n(op)27 b(an)g(article)g(o\013)h(the)g(summary)f
-(history)f(and)i(go)e(to)i(it.)-60 4010 y(G)g(g)141 b(Searc)n(h)27
-b(an)g(article)g(via)g(sub)5 b(ject.)-60 4109 y(G)28
-b(j)158 b(\(j\))29 b(Searc)n(h)e(an)g(article)g(via)g(Message-Id)f(or)g
-(sub)5 b(ject.)1139 4515 y(7)p eop end
-%%Page: 8 9
-TeXDict begin 8 8 bop -128 -281 a Fh(Threading)1139 4515
-y Fg(8)p eop end
-%%Page: 9 10
-TeXDict begin 9 9 bop -128 -294 a Fg(T)28 b(#)154 b(Mark)26
-b(this)i(thread)g(with)g(the)g(pro)r(cess)e(mark.)-128
--194 y(T)i(M-#)50 b(Remo)n(v)n(e)26 b(pro)r(cess-marks)f(from)i(this)h
-(thread.)-128 -95 y(T)g(t)191 b(Re-)p Fe(thread)28 b
-Fg(the)g(curren)n(t)f(article's)f(thread.)-128 5 y(T)i(^)181
-b(Mak)n(e)29 b(the)h(curren)n(t)f(article)g(c)n(hild)h(of)g(the)g(mark)
-n(ed)f(\(or)g(previous\))h(ar-)183 104 y(ticle.)-128
-204 y(T)e(n)177 b(\(M-C-f,)28 b(M-do)n(wn\))f(Go)g(to)h(the)g
-Fe(next)g Fg(thread.)36 b([distance])-128 304 y(T)28
-b(p)177 b(\(M-C-b,)27 b(M-up\))h(Go)g(to)f(the)h Fe(previous)f
-Fg(thread.)37 b([distance])-128 403 y(T)28 b(d)177 b
-Fe(Descend)27 b Fg(this)h(thread.)37 b([distance])-128
-503 y(T)28 b(u)177 b(Ascend)28 b(this)f(thread)h(\()p
-Fe(up)p Fg(-thread\).)36 b([distance])-128 603 y(T)28
-b(o)181 b(Go)27 b(to)h(the)g(top)f(of)h(this)g(thread.)-128
-702 y(T)g(s)190 b Fe(Sho)m(w)28 b Fg(the)g(thread)f(hidden)h(under)f
-(this)h(article.)-128 802 y(T)g(h)177 b Fe(Hide)27 b
-Fg(this)g(\(sub\)thread.)-128 901 y(T)h(i)200 b Fe(Increase)28
-b Fg(the)g(score)e(of)i(this)g(thread.)-128 1001 y(T)g(l)200
-b(\(M-C-l\))28 b Fe(Lo)m(w)m(er)g Fg(the)g(score)e(of)i(this)g(thread.)
--128 1101 y(T)g(k)179 b(\(M-C-k\))35 b Fe(Kill)e Fg(the)i(curren)n(t)f
-(\(sub\)thread.)59 b([Negativ)n(e)34 b(pre\014x:)50 b(tic)n(k)183
-1200 y(it,)28 b(p)r(ositiv)n(e)f(pre\014x:)37 b(unmark)27
-b(it.])-128 1300 y(T)h(H)161 b Fe(Hide)27 b Fg(all)g(threads.)-128
-1400 y(T)h(S)177 b Fe(Sho)m(w)28 b Fg(all)f(hidden)h(threads.)-128
-1499 y(T)g(T)163 b(\(M-C-t\))28 b Fe(T)-8 b(oggle)26
-b Fg(threading.)-128 1770 y Fh(Limiting)-128 1921 y Fg(//)116
-b(\(/s\))28 b(Limit)g(the)g(summary-bu\013er)e(to)i(articles)e(matc)n
-(hing)i Fe(sub)5 b(ject)p Fg(.)-128 2020 y(/a)116 b(Limit)28
-b(the)g(summary-bu\013er)f(to)g(articles)g(matc)n(hing)g
-Fe(author)p Fg(.)-128 2120 y(/x)114 b(Limit)28 b(dep)r(ending)g(on)g
-(\\extra")d(headers.)-128 2220 y(/u)112 b(\(x\))27 b(Limit)h(to)f
-Fe(unread)g Fg(articles.)36 b([Pre\014x:)f(also)26 b(exclude)h(tic)n(k)
-n(ed)f(and)h(dor-)72 2319 y(man)n(t)h(articles])-128
-2419 y(/.)135 b(Limit)28 b(to)g(unseen)f(articles.)-128
-2519 y(/m)89 b(Limit)28 b(to)g(articles)e(mark)n(ed)h(with)h(sp)r
-(eci\014ed)g Fe(mark)p Fg(.)-128 2618 y(/t)126 b(Ask)39
-b(for)f(a)g(n)n(um)n(b)r(er)h(and)f(exclude)h(articles)e(y)n(ounger)g
-(than)i(that)g(man)n(y)72 2718 y(da)n(ys.)d([Pre\014x:)g(exclude)27
-b(older)g(articles])-128 2817 y(/n)112 b(Limit)28 b(to)g(curren)n(t)f
-(article.)36 b([p/p])-128 2917 y(/w)98 b(P)n(op)26 b(the)h(previous)f
-(limit)i(o\013)f(the)g(stac)n(k)f(and)h(restore)e(it.)37
-b([Pre\014x:)f(p)r(op)27 b(all)72 3017 y(limits])-128
-3116 y(/v)114 b(Limit)28 b(to)g(score.)35 b([score])-128
-3216 y(/E)101 b(\(M)28 b(S\))g(Include)g(all)f(expunged)h(articles)e
-(in)i(the)g(limit.)-128 3316 y(/D)95 b(Include)28 b(all)f(dorman)n(t)g
-(articles)g(in)g(the)h(limit.)-128 3415 y(/*)116 b(Limit)28
-b(to)g(cac)n(hed)f(articles.)-128 3515 y(Y)h(C)50 b(Include)28
-b(all)f(cac)n(hed)g(articles)g(in)h(the)g(limit.)-128
-3615 y(/d)112 b(Exclude)27 b(all)h(dorman)n(t)e(articles)h(from)g(the)h
-(limit.)-128 3714 y(/M)82 b(Exclude)27 b(all)h(mark)n(ed)e(articles.)
--128 3814 y(/T)98 b(Include)28 b(all)f(articles)g(from)g(the)h(curren)n
-(t)f(thread)g(in)h(the)g(limit.)-128 3913 y(/c)121 b(Exclude)27
-b(all)h(dorman)n(t)e(articles)h(that)h(ha)n(v)n(e)e(no)h(c)n(hildren)h
-(from)f(the)h(limit.)1139 4515 y(9)p eop end
-%%Page: 10 11
-TeXDict begin 10 10 bop -128 -294 a Fg(/C)52 b(Mark)21
-b(all)h(excluded)f(unread)h(articles)f(as)g(read.)34
-b([Pre\014x:)f(also)21 b(mark)g(tic)n(k)n(ed)26 -194
-y(and)27 b(dorman)n(t)g(articles])-128 -95 y(/o)70 b(Insert)27
-b(all)h Fe(old)f Fg(articles.)35 b([Pre\014x:)h(ho)n(w)27
-b(man)n(y])-128 5 y(/N)50 b(Insert)27 b(all)h Fe(new)f
-Fg(articles.)-128 104 y(/p)66 b(Limit)28 b(to)g(articles)e
-Fe(predicated)i Fg(in)g(the)g(`displa)n(y')f(group)g(parameter.)-128
-375 y Fh(Sort)37 b(the)h(Summary-Bu\013er)-128 526 y
-Fg(C-c)28 b(C-s)f(C-a)53 b(Sort)27 b(the)h(summary-bu\013er)f(b)n(y)g
-Fe(author)p Fg(.)-128 626 y(C-c)h(C-s)f(C-d)49 b(Sort)27
-b(the)h(summary-bu\013er)f(b)n(y)g Fe(date)p Fg(.)-128
-725 y(C-c)h(C-s)f(C-i)72 b(Sort)27 b(the)h(summary-bu\013er)f(b)n(y)g
-(article)g(score.)-128 825 y(C-c)h(C-s)f(C-l)72 b(Sort)27
-b(the)h(summary-bu\013er)f(b)n(y)g(amoun)n(t)g(of)h Fe(lines)p
-Fg(.)-128 925 y(C-c)g(C-s)f(C-c)58 b(Sort)27 b(the)h(summary-bu\013er)f
-(b)n(y)g(length.)-128 1024 y(C-c)h(C-s)f(C-n)49 b(Sort)27
-b(the)h(summary-bu\013er)f(b)n(y)g(article)g Fe(n)m(um)m(b)s(er)p
-Fg(.)-128 1124 y(C-c)h(C-s)f(C-s)62 b(Sort)27 b(the)h(summary-bu\013er)
-f(b)n(y)g Fe(sub)5 b(ject)p Fg(.)-128 1223 y(C-c)28 b(C-s)f(C-r)62
-b(Sort)27 b(the)h(summary-bu\013er)f Fe(randomly)p Fg(.)-128
-1323 y(C-c)h(C-s)f(C-o)53 b(Sort)27 b(the)h(summary-bu\013er)f(using)g
-(the)h(default)g(metho)r(d.)-128 1419 y(With)h(a)e(pre\014x)g(these)h
-(functions)g(sort)f(in)g(rev)n(erse)f(order.)-128 1651
-y Fh(Score)38 b(\(V)-9 b(alue\))37 b(Commands)-128 1805
-y Fg(Read)28 b(ab)r(out)f(Adaptiv)n(e)h(Scoring)e(in)i(the)g(online)f
-(info.)-60 1899 y(V)h(a)245 b Fe(Add)28 b Fg(a)f(new)g(score)g(en)n
-(try)-7 b(,)27 b(sp)r(ecifying)g(all)h(elemen)n(ts.)-60
-1998 y(V)g(c)250 b(Sp)r(ecify)28 b(a)f(new)h(score)e(\014le)i(as)f
-Fe(curren)m(t)p Fg(.)-60 2098 y(V)h(e)250 b Fe(Edit)27
-b Fg(the)h(curren)n(t)e(score)h(alist.)-60 2198 y(V)h(f)262
-b(Edit)27 b(a)h(score)e Fe(\014le)h Fg(and)g(mak)n(e)g(it)h(the)g
-(curren)n(t)f(one.)-60 2297 y(V)h(m)218 b Fe(Mark)28
-b Fg(all)f(articles)g(b)r(elo)n(w)g(a)g(giv)n(en)g(score)g(as)f(read.)
--60 2397 y(V)i(s)254 b(Set)28 b(the)g Fe(score)f Fg(of)h(this)g
-(article.)-60 2497 y(V)g(t)255 b(Displa)n(y)27 b(all)g(score)f(rules)h
-(applied)h(to)f(this)h(article)f(\()p Fe(trac)m(k)p Fg(\).)-60
-2596 y(W)h(w)204 b(List)27 b Fe(w)m(ords)h Fg(used)g(in)g(scoring.)-60
-2696 y(V)g(x)243 b Fe(Expunge)27 b Fg(all)g(lo)n(w-scored)f(articles.)
-36 b([score])-60 2795 y(V)28 b(C)227 b Fe(Customize)26
-b Fg(the)i(curren)n(t)f(score)f(\014le)i(through)e(a)h(user-friendly)g
-(in-)317 2895 y(terface.)-60 2995 y(V)h(F)233 b Fe(Flush)27
-b Fg(the)h(cac)n(he)e(of)i(score)e(\014les.)-60 3094
-y(V)i(R)226 b Fe(Re-score)26 b Fg(the)i(summary)f(bu\013er.)-60
-3194 y(V)h(S)241 b(Displa)n(y)27 b(the)h Fe(score)f Fg(of)h(this)g
-(article.)-60 3294 y Fe(A)k(p)g(m)f(l)50 b Fg(Mak)n(e)26
-b(a)i(scoring)e(en)n(try)h(based)g(on)g(this)h(article.)-128
-3389 y(The)g(four)f(letters)h(stand)f(for:)-128 3489
-y Fe(A)p Fg(\)ction:)38 b(I\)ncrease,)26 b(L\)o)n(w)n(er;)-128
-3589 y Fe(p)p Fg(\)art:)64 b(a\)uthor)41 b(\(from\),)j(s\)ub)5
-b(ject,)45 b(x\)refs)c(\(cross-p)r(osting\),)i(d\)ate,)i(l\)ines,)-128
-3688 y(message-i\)d,)40 b(t\)references)d(\(paren)n(t\),)j(f)6
-b(\)ollo)n(wup,)41 b(b\)o)r(dy)-7 b(,)41 b(h\)ead)d(\(all)g(head-)-128
-3788 y(ers\);)-128 3888 y Fe(m)p Fg(\)atc)n(h)27 b(t)n(yp)r(e:)-128
-3987 y(string:)37 b(s\)ubstring,)27 b(e\)xact,)g(r\)egexp,)g(f)6
-b(\)uzzy)-7 b(,)-128 4087 y(date:)37 b(b\)efore,)28 b(a\)t,)f(n\)this,)
--128 4186 y(n)n(um)n(b)r(er:)37 b Fc(<)p Fg(,)27 b(=,)h
-Fc(>)p Fg(;)1118 4515 y(10)p eop end
-%%Page: 11 12
-TeXDict begin 11 11 bop -128 -281 a Fe(l)p Fg(\)ifetime:)38
-b(t\)emp)r(orary)-7 b(,)27 b(p\)ermanen)n(t,)g(i\)mmediate.)-3
--181 y(If)36 b(y)n(ou)e(t)n(yp)r(e)i(the)f(second)g(letter)h(in)f(upp)r
-(ercase,)i(the)e(remaining)g(t)n(w)n(o)f(are)-128 -82
-y(assumed)c(to)h(b)r(e)g(s\)ubstring)f(and)g(t\)emp)r(orary)-7
-b(.)45 b(If)30 b(y)n(ou)g(t)n(yp)r(e)h(the)g(third)f(letter)-128
-18 y(in)e(upp)r(ercase,)f(the)h(last)f(one)h(is)f(assumed)g(to)h(b)r(e)
-g(t\)emp)r(orary)-7 b(.)80 118 y(Extra)26 b(k)n(eys)h(for)g(man)n(ual)g
-(editing)h(of)f(a)g(score)g(\014le:)-63 212 y(C-c)g(C-c)59
-b(Finish)28 b(editing)g(the)g(score)e(\014le.)-63 312
-y(C-c)h(C-d)50 b(Insert)27 b(the)h(curren)n(t)f Fe(date)h
-Fg(as)f(n)n(um)n(b)r(er)g(of)h(da)n(ys.)-128 595 y Fh(MIME)38
-b(op)s(erations)g(from)g(the)f(Summary-Bu\013er)-128
-748 y Fg(F)-7 b(or)40 b(the)i(commands)e(op)r(erating)f(on)i(one)f
-(MIME)g(part)h(\(a)f(subset)h(of)f(gn)n(us-)-128 847
-y(article-*\),)i(a)d(pre\014x)g(selects)h(whic)n(h)f(part)g(to)h(op)r
-(erate)f(on.)72 b(If)41 b(the)f(p)r(oin)n(t)f(is)-128
-947 y(placed)26 b(o)n(v)n(er)f(a)g(MIME)h(button)h(in)f(the)h(article)e
-(bu\013er,)i(use)f(the)g(corresp)r(onding)-128 1047 y(bindings)i(for)f
-(the)h(article)f(bu\013er)h(instead.)-128 1141 y(K)g(v)190
-b(\(b,)28 b(W)g(M)g(b\))g Fe(View)f Fg(the)h(MIME-part.)-128
-1241 y(K)g(o)192 b Fe(Sa)m(v)m(e)29 b Fg(the)f(MIME)f(part.)-128
-1340 y(K)h(c)197 b Fe(Cop)m(y)28 b Fg(the)g(MIME)f(part.)-128
-1440 y(K)h(e)197 b(View)28 b(the)g(MIME)f(part)g Fe(externally)p
-Fg(.)-128 1539 y(K)h(i)211 b(View)28 b(the)g(MIME)f(part)g
-Fe(in)m(ternally)p Fg(.)-128 1639 y(K)h Fa(j)211 b Fg(Pip)r(e)28
-b(the)g(MIME)f(part)g(to)g(an)h(external)f(command.)-128
-1739 y(K)h(b)188 b(Mak)n(e)27 b(all)g(the)h(MIME)f(parts)g(ha)n(v)n(e)g
-(buttons)g(in)h(fron)n(t)g(of)f(them.)-128 1838 y(K)h(m)165
-b(T)-7 b(ry)27 b(to)h(repair)e Fe(m)m(ultipart-headers)p
-Fg(.)-128 1938 y(K)i(C)174 b(View)28 b(the)g(MIME)f(part)g(using)h(a)f
-(di\013eren)n(t)g Fe(c)m(harset)p Fg(.)-128 2038 y(X)h(m)168
-b(Sa)n(v)n(e)26 b(all)i(parts)f(matc)n(hing)g(a)g(MIME)g(t)n(yp)r(e)h
-(to)f(a)h(directory)-7 b(.)35 b([p/p])-128 2137 y(M-t)191
-b(T)-7 b(oggle)26 b(the)i(buttonized)g(displa)n(y)f(of)h(the)g(article)
-f(bu\013er.)-128 2237 y(W)h(M)g(w)50 b(Deco)r(de)28 b(RF)n(C2047-enco)r
-(ded)d(w)n(ords)h(in)i(the)g(article)f(headers.)-128
-2336 y(W)h(M)g(c)73 b(Deco)r(de)28 b(enco)r(ded)f(article)g(b)r(o)r
-(dies.)37 b([Pre\014x:)f(prompt)28 b(for)f(c)n(harset])-128
-2436 y(W)h(M)g(v)66 b(View)28 b(all)f(MIME)h(parts)e(in)i(the)g(curren)
-n(t)f(article.)-128 2707 y Fh(Extract)37 b(Series)h(\(Uudeco)s(de)g
-(etc\))-128 2860 y Fg(Gn)n(us)44 b(recognizes)e(if)j(the)f(curren)n(t)f
-(article)g(is)h(part)f(of)h(a)f(series)g(\(m)n(ultipart)-128
-2960 y(p)r(osting)38 b(whose)g(parts)f(are)g(iden)n(ti\014ed)i(b)n(y)f
-(n)n(um)n(b)r(ers)f(in)i(their)f(sub)5 b(jects,)41 b(e.g.)-128
-3059 y(1/10.)12 b(.)i(.)g(10/10\))26 b(and)i(pro)r(cesses)f(the)i
-(series)e(accordingly)-7 b(.)37 b(Y)-7 b(ou)28 b(can)g(mark)f(and)-128
-3159 y(pro)r(cess)37 b(more)g(than)h(one)f(series)g(at)h(a)f(time.)68
-b(If)39 b(the)f(p)r(osting)f(con)n(tains)g(an)n(y)-128
-3258 y(arc)n(hiv)n(es,)26 b(they)i(are)f(expanded)g(and)g(gathered)g
-(in)h(a)f(new)h(group.)-60 3353 y(X)g(b)50 b(Un-)p Fe(binhex)27
-b Fg(these)h(series.)36 b([p/p])-60 3452 y(X)28 b(o)54
-b(Simply)28 b Fe(output)g Fg(these)f(series)g(\(no)h(deco)r(ding\).)36
-b([p/p])-60 3552 y(X)28 b(p)50 b(Unpac)n(k)27 b(these)h
-Fe(p)s(ostscript)f Fg(series.)36 b([p/p])-60 3651 y(X)28
-b(s)63 b(Un-)p Fe(shar)28 b Fg(these)g(series.)36 b([p/p])-60
-3751 y(X)28 b(u)50 b Fe(Uudeco)s(de)28 b Fg(these)f(series.)36
-b([p/p])-3 3889 y(Eac)n(h)26 b(one)i(of)f(these)h(commands)f(has)g
-(four)g(v)-5 b(arian)n(ts:)-63 3967 y(X)28 b Fe(z)122
-b Fg(Deco)r(de)27 b(these)h(series.)36 b([p/p])-63 4067
-y(X)28 b Fe(Z)106 b Fg(Deco)r(de)27 b(and)h(sa)n(v)n(e)e(these)i
-(series.)35 b([p/p])-63 4166 y(X)28 b(v)f Fe(z)51 b Fg(Deco)r(de)27
-b(and)h(view)f(these)h(series.)36 b([p/p])1118 4515 y(11)p
-eop end
-%%Page: 12 13
-TeXDict begin 12 12 bop -128 -282 a Fg(X)28 b(v)g Fe(Z)50
-b Fg(Deco)r(de,)28 b(sa)n(v)n(e)e(and)h(view)h(these)f(series.)36
-b([p/p])-128 -181 y(where)28 b Fe(z)g Fg(or)e Fe(Z)i
-Fg(iden)n(ti\014es)g(the)g(deco)r(ding)f(metho)r(d)h(\(b,)h(o,)e(p,)h
-(s,)f(u\).)-3 -82 y(An)c(alternativ)n(e)f(binding)h(for)f(the)h
-(most-often)g(used)g(of)f(these)h(commands)f(is)-91 17
-y(C-c)28 b(C-v)f(C-v)49 b(\(X)28 b(v)g(u\))g(Uudeco)r(de)g(and)f(view)g
-(these)h(series.)36 b([p/p])-128 350 y Fh(Output)i(Articles)-128
-501 y Fg(O)28 b(o)77 b(\(o,)27 b(C-o\))g(Sa)n(v)n(e)g(this)h(article)f
-(using)g(the)h(default)g(article)f(sa)n(v)n(er.)35 b([p/p])-128
-601 y(O)28 b(b)73 b(Sa)n(v)n(e)26 b(this)i(article's)f
-Fe(b)s(o)s(dy)g Fg(in)h(plain)f(\014le)h(format)f([p/p])-128
-700 y(O)h(f)94 b(Sa)n(v)n(e)26 b(this)i(article)f(in)h(plain)f
-Fe(\014le)g Fg(format.)37 b([p/p])-128 800 y(O)28 b(F)65
-b(lik)n(e)27 b(O)g(f,)h(but)g(o)n(v)n(erwrite)e(\014le's)i(con)n(ten)n
-(ts.)36 b([p/p])-128 900 y(O)28 b(h)73 b(Sa)n(v)n(e)26
-b(this)i(article)f(in)h Fe(mh)f Fg(folder)g(format.)37
-b([p/p])-128 999 y(O)28 b(m)50 b(Sa)n(v)n(e)26 b(this)i(article)f(in)h
-Fe(mail)e Fg(format.)37 b([p/p])-128 1099 y(O)28 b(r)86
-b(Sa)n(v)n(e)26 b(this)i(article)f(in)h Fe(rmail)f Fg(format.)36
-b([p/p])-128 1199 y(O)28 b(v)75 b(Sa)n(v)n(e)26 b(this)i(article)f(in)h
-Fe(vm)f Fg(format.)37 b([p/p])-128 1298 y(O)28 b(p)73
-b(\()p Fa(j)p Fg(\))28 b Fe(Pip)s(e)f Fg(this)h(article)f(to)g(a)g
-(shell)h(command.)36 b([p/p])-128 1398 y(O)28 b(P)62
-b Fe(Prin)m(t)28 b Fg(this)g(article)f(using)g(Muttprin)n(t.)38
-b([p/p])-128 1668 y Fh(P)m(ost,)f(F)-9 b(ollo)m(wup,)39
-b(Reply)-9 b(,)37 b(F)-9 b(orw)m(ard,)38 b(Cancel)-128
-1822 y Fg(These)d(commands)f(put)h(y)n(ou)f(in)g(a)h(separate)e(news)h
-(or)g(mail)g(bu\013er.)58 b(See)35 b(the)-128 1921 y(section)28
-b(ab)r(out)f(comp)r(osing)g(messages)f(for)h(more)g(information.)-60
-2015 y(S)h(p)151 b(\(a\))28 b Fe(P)m(ost)g Fg(an)f(article)g(to)h(this)
-f(group.)-60 2115 y(S)h(f)172 b(\(f)6 b(\))29 b(P)n(ost)e(a)g
-Fe(follo)m(wup)g Fg(to)g(this)h(article.)-60 2215 y(S)g(F)143
-b(\(F\))29 b(P)n(ost)d(a)h Fe(follo)m(wup)g Fg(and)h(include)f(the)h
-(original.)36 b([p/p])-60 2314 y(S)28 b(o)f(p)82 b(F)-7
-b(orw)n(ard)26 b(this)i(article)f(as)g(a)g Fe(p)s(ost)g
-Fg(to)g(a)h(newsgroup.)-60 2414 y(S)g(M-c)56 b(Send)28
-b(a)f(complain)n(t)g(ab)r(out)g(excessiv)n(e)f(crossp)r(osting)f(to)i
-(the)h(author)e(of)211 2514 y(this)i(article.)36 b([p/p])-60
-2613 y(S)28 b(m)128 b(\(m\))29 b(Send)f(a)f Fe(mail)g
-Fg(to)g(some)g(other)g(p)r(erson.)-60 2713 y(S)h(r)164
-b(\(r\))28 b(Mail)f(a)h Fe(reply)f Fg(to)h(the)g(author)f(of)g(this)h
-(article.)-60 2812 y(S)g(R)136 b(\(R\))29 b(Mail)e(a)g
-Fe(reply)h Fg(and)f(include)h(the)g(original.)36 b([p/p])-60
-2912 y(S)28 b(B)f(r)78 b(Lik)n(e)27 b(S)h(r)f(but)i(ignore)d(the)i
-(Reply-T)-7 b(o:)36 b(header.)-60 3012 y(S)28 b(B)f(R)50
-b(Lik)n(e)27 b(S)h(R)g(but)g(ignore)e(the)i(Reply-T)-7
-b(o:)37 b(header.)-60 3111 y(S)28 b(w)137 b(Mail)28 b(a)f
-Fe(wide)g Fg(reply)g(to)g(this)h(article.)-60 3211 y(S)g(W)112
-b(Mail)28 b(a)f Fe(wide)g Fg(reply)g(to)g(this)h(article)f(and)h
-(include)g(the)g(original.)-60 3311 y(S)g(v)153 b(Mail)28
-b(a)f Fe(v)m(ery)i Fg(wide)e(reply)h(to)f(this)h(article.)-60
-3410 y(S)g(V)135 b(Mail)28 b(a)f Fe(v)m(ery)i Fg(wide)e(reply)h(to)f
-(this)h(article)f(and)g(include)h(the)g(original.)-60
-3510 y(S)g(o)f(m)59 b(\(C-c)28 b(C-f)6 b(\))28 b(F)-7
-b(orw)n(ard)26 b(this)i(article)f(b)n(y)g Fe(mail)g Fg(to)g(a)g(p)r
-(erson.)-60 3609 y(S)h(D)g(b)60 b(Resend)28 b Fe(b)s(ounced)f
-Fg(mail.)-60 3709 y(S)h(D)g(r)73 b Fe(Resend)27 b Fg(mail)g(to)h(a)f
-(di\013eren)n(t)h(p)r(erson.)-60 3809 y(S)g(D)g(e)69
-b Fe(Edit)27 b Fg(and)h(resend.)-60 3908 y(S)g(n)151
-b(P)n(ost)28 b(a)h(follo)n(wup)g(via)g Fe(news)g Fg(ev)n(en)g(if)h(y)n
-(ou)e(got)h(the)h(message)e(through)211 4008 y(mail.)1118
-4515 y(12)p eop end
-%%Page: 13 14
-TeXDict begin 13 13 bop -128 -294 a Fg(S)28 b(N)149 b(P)n(ost)27
-b(a)g(follo)n(wup)g(via)g Fe(news)g Fg(and)h(include)g(the)g(original)e
-(mail.)37 b([p/p])-128 -194 y(S)28 b(c)174 b(\(C\))29
-b Fe(Cancel)e Fg(this)h(article)f(\(only)h(w)n(orks)e(if)i(it)g(is)f(y)
-n(our)g(o)n(wn\).)36 b([p/p])-128 -95 y(S)28 b(s)178
-b Fe(Sup)s(ersede)27 b Fg(this)h(article)f(with)h(a)f(new)h(one)f
-(\(only)h(for)f(o)n(wn)g(articles\).)-128 5 y(S)h(O)f(m)50
-b(Digest)28 b(these)g(series)e(and)i(forw)n(ard)e(b)n(y)h
-Fe(mail)p Fg(.)36 b([p/p])-128 104 y(S)28 b(O)f(p)73
-b(Digest)24 b(these)g(series)f(and)g(forw)n(ard)f(as)h(a)g
-Fe(p)s(ost)g Fg(to)h(a)f(newsgroup.)34 b([p/p])-128 204
-y(S)28 b(u)165 b Fe(Uuenco)s(de)28 b Fg(a)f(\014le)h(and)f(p)r(ost)h
-(it)g(as)f(a)g(series.)-128 305 y(If)36 b(y)n(ou)f(w)n(an)n(t)f(to)i
-(cancel)e(or)h(sup)r(ersede)g(an)g(article)f(y)n(ou)h(just)h(p)r(osted)
-f(\(b)r(efore)-128 404 y(it)i(has)f(app)r(eared)f(on)h(the)h(serv)n
-(er\),)g(go)e(to)h(the)h(*p)r(ost-news*)e(bu\013er,)j(c)n(hange)-128
-504 y(`Message-ID')h(to)h(`Cancel')f(or)g(`Sup)r(ersedes')g(and)h(send)
-g(it)g(again)e(with)j(C-c)-128 603 y(C-c.)-128 836 y
-Fh(Message)e(Comp)s(osition)-128 989 y Fg(Press)27 b(C-c)g(?)37
-b(in)28 b(the)g(comp)r(osition-bu\013er)e(to)i(get)f(this)h
-(information.)-60 1083 y(C-c)f(C-c)160 b(Send)28 b(message)e(and)i
-(exit.)37 b([Pre\014x:)f(send)27 b(via)g(foreign)g(serv)n(er])-60
-1183 y(C-c)g(C-s)164 b(Send)28 b(message.)36 b([Pre\014x:)g(send)27
-b(via)g(foreign)g(serv)n(er])-60 1283 y(C-c)g(C-d)151
-b(Don't)28 b(send)g(message)e(\(sa)n(v)n(e)g(as)h Fe(draft)p
-Fg(\).)-60 1382 y(C-c)g(C-k)153 b Fe(Kill)26 b Fg(message-bu\013er.)-60
-1482 y(C-c)h(C-m)128 b Fe(Mail)37 b Fg(reply)f(to)h(the)g(address)f
-(near)g(p)r(oin)n(t.)66 b([Pre\014x:)55 b(include)37
-b(the)377 1581 y(original])-60 1681 y(C-c)27 b(C-o)155
-b(Sort)27 b(headers.)-60 1781 y(C-c)g(C-e)160 b Fe(Elide)27
-b Fg(region.)-60 1880 y(C-c)g(C-v)153 b(Kill)28 b(ev)n(erything)e
-(outside)i(region.)-60 1980 y(C-c)f(C-r)164 b(Do)28 b(a)f
-Fe(Rot-13)g Fg(on)g(the)h(b)r(o)r(dy)-7 b(.)-60 2080
-y(C-c)27 b(C-w)137 b(Insert)28 b(signature)e(\(from)i
-(`message-signature-\014le'\).)-60 2179 y(C-c)f(C-z)160
-b(Kill)28 b(ev)n(erything)e(up)i(to)g(signature.)-60
-2279 y(C-c)f(C-y)153 b Fe(Y)-8 b(ank)29 b Fg(original)d(message.)-60
-2378 y(C-c)h(C-q)153 b(Fill)28 b(the)g(y)n(ank)n(ed)f(message.)-60
-2478 y(C-c)g(M-C-y)49 b Fe(Y)-8 b(ank)29 b Fg(a)e(bu\013er)h(and)f
-(quote)h(it.)-60 2578 y(M-RET)155 b(Insert)31 b(four)f(newlines)g(and)h
-(format)f(quoted)g(text.)47 b([Pre\014x:)42 b(justify)377
-2677 y(as)27 b(w)n(ell])-60 2777 y(C-c)g(M-r)148 b Fe(Rename)27
-b Fg(message)f(bu\013er.)37 b([Pre\014x:)f(ask)27 b(for)g(new)h(name])
--128 3031 y Fe(Jumping)k(in)f(message-bu\013er)-128 3184
-y Fg(The)d(follo)n(wing)f(functions)h(create)e(the)i(header-\014eld)f
-(if)h(necessary)-7 b(.)-60 3278 y(C-c)27 b(T)-7 b(AB)164
-b(Mo)n(v)n(e)27 b(to)g Fe(signature)p Fg(.)-60 3378 y(C-c)g(C-b)204
-b(Mo)n(v)n(e)27 b(to)g Fe(b)s(o)s(dy)p Fg(.)-60 3478
-y(C-c)g(C-f)h(C-t)77 b(\(C-c)28 b(C-t\))g(Mo)n(v)n(e)e(to)i
-Fe(T)-8 b(o:)p Fg(.)-60 3577 y(C-c)27 b(C-f)h(C-c)72
-b(Mo)n(v)n(e)27 b(to)g Fe(Cc:)p Fg(.)-60 3677 y(C-c)g(C-f)h(C-b)63
-b(Mo)n(v)n(e)27 b(to)g Fe(Bcc:)p Fg(.)-60 3776 y(C-c)g(C-f)h(C-w)49
-b(Mo)n(v)n(e)27 b(to)g Fe(Fcc:)p Fg(.)-60 3876 y(C-c)g(C-f)h(C-s)76
-b(Mo)n(v)n(e)27 b(to)g Fe(Sub)5 b(ject:)p Fg(.)-60 3976
-y(C-c)27 b(C-f)h(C-r)76 b(Mo)n(v)n(e)27 b(to)g Fe(Reply-T)-8
-b(o:)p Fg(.)-60 4075 y(C-c)27 b(C-f)h(C-f)84 b(Mo)n(v)n(e)27
-b(to)g Fe(F)-8 b(ollo)m(wup-T)g(o:)p Fg(.)1118 4515 y(13)p
-eop end
-%%Page: 14 15
-TeXDict begin 14 14 bop -128 -294 a Fg(C-c)28 b(C-f)f(C-n)90
-b(\(C-c)28 b(C-n\))f(Mo)n(v)n(e)g(to)g Fe(Newsgroups:)p
-Fg(.)-128 -194 y(C-c)h(C-f)f(C-u)90 b(Mo)n(v)n(e)27 b(to)g
-Fe(Summary:)p Fg(.)-128 -95 y(C-c)h(C-f)f(C-k)92 b(Mo)n(v)n(e)27
-b(to)g Fe(Keyw)m(ords:)p Fg(.)-128 5 y(C-c)h(C-f)f(C-d)90
-b(Mo)n(v)n(e)27 b(to)g Fe(Distribution:)p Fg(.)-128 104
-y(C-c)h(C-f)f(C-m)67 b(Mo)n(v)n(e)27 b(to)g Fe(Mail-F)-8
-b(ollo)m(wup-T)g(o:)p Fg(.)-128 204 y(C-c)28 b(C-f)f(C-o)94
-b(Mo)n(v)n(e)27 b(to)g Fe(F)-8 b(rom:)p Fg(.)-128 304
-y(C-c)28 b(C-f)f(C-a)94 b(Insert)42 b(a)f(reasonable)f
-Fe(Mail-F)-8 b(ollo)m(wup-T)g(o:)64 b Fg(for)41 b(an)h(unsub-)389
-403 y(scrib)r(ed)28 b(list.)37 b([Pre\014x:)f(include)28
-b(addresses)e(in)h Fe(Cc:)p Fg(])-128 503 y(C-c)h(C-f)f(T)-7
-b(AB)50 b(\(C-c)28 b(C-u\))f(Mo)n(v)n(e)g(to)g Fe(Imp)s(ortance:)p
-Fg(.)-128 603 y(C-c)h(M-n)214 b(Insert)27 b Fe(Disp)s
-(osition-Noti\014cation-T)-8 b(o:)34 b Fg(\(request)27
-b(receipt\).)-128 857 y Fe(A)m(ttac)m(hmen)m(ts/MML)-128
-1009 y Fg(C-c)h(C-m)f(f)159 b(\(C-c)27 b(C-a\))g(A)n(ttac)n(h)h
-Fe(\014le)p Fg(.)-128 1109 y(C-c)g(C-m)f(b)138 b(A)n(ttac)n(h)27
-b(con)n(ten)n(ts)g(of)34 b Fe(bu\013er)p Fg(.)-128 1208
-y(C-c)28 b(C-m)f(e)147 b(A)n(ttac)n(h)27 b Fe(external)h
-Fg(\014le)g(\(ftp..\).)-128 1308 y(C-c)g(C-m)f(P)127
-b(Create)38 b(MIME-)p Fe(preview)h Fg(\(new)g(bu\013er\).)71
-b([Pre\014x:)59 b(sho)n(w)38 b(ra)n(w)393 1408 y(MIME)27
-b(preview])-128 1507 y(C-c)h(C-m)f(v)140 b Fe(V)-8 b(alidate)27
-b Fg(article.)-128 1607 y(C-c)h(C-m)f(p)138 b(Insert)27
-b Fe(part)p Fg(.)-128 1706 y(C-c)h(C-m)f(m)115 b(Insert)27
-b Fe(m)m(ulti)p Fg(-part.)-128 1806 y(C-c)h(C-m)f(q)140
-b Fe(Quote)27 b Fg(region.)-128 1906 y(C-c)h(C-m)f(c)h(s)86
-b(Encrypt)27 b(message)f(using)i Fe(S/MIME)p Fg(.)-128
-2005 y(C-c)g(C-m)f(c)h(o)77 b(Encrypt)27 b(message)f(using)h(PGP)-7
-b(.)-128 2105 y(C-c)28 b(C-m)f(c)h(p)73 b(Encrypt)27
-b(message)f(using)i Fe(PGP/MIME)p Fg(.)-128 2205 y(C-c)g(C-m)f(s)h(s)90
-b(Sign)27 b(message)f(using)j Fe(S/MIME)p Fg(.)-128 2304
-y(C-c)f(C-m)f(s)h(o)81 b(Sign)27 b(message)f(using)i(PGP)-7
-b(.)-128 2404 y(C-c)28 b(C-m)f(s)h(p)77 b(Sign)27 b(message)f(using)j
-Fe(PGP/MIME)p Fg(.)-128 2503 y(C-c)f(C-m)f(C-n)50 b(Remo)n(v)n(e)26
-b(securit)n(y)h(related)g(MML)h(tags)e(from)i(message.)-128
-2774 y Fh(Mark)39 b(Articles)-128 2906 y Fg(d)171 b(\(M)33
-b(d,)h(M)f(r\))f(Mark)g(this)h(article)e(as)h(read)g(and)g(mo)n(v)n(e)f
-(to)i(the)g(next)89 3005 y(one.)k([scop)r(e])-128 3105
-y(D)154 b(Mark)45 b(this)g(article)f(as)h(read)f(and)h(mo)n(v)n(e)f(to)
-h(the)g(previous)f(one.)89 3205 y([scop)r(e])-128 3304
-y(!)194 b(\(u,)37 b(M)d(!,)i(M)f(t\))g(Tic)n(k)e(this)i(article)e
-(\(mark)h(it)h(as)e(in)n(teresting\))h(and)89 3404 y(mo)n(v)n(e)27
-b(to)g(the)h(next)g(one.)37 b([scop)r(e])-128 3503 y(U)155
-b(Tic)n(k)28 b(this)f(article)g(and)h(mo)n(v)n(e)e(to)i(the)g(previous)
-e(one.)37 b([scop)r(e])-128 3603 y(M)28 b(?)74 b(\(?\))37
-b(Mark)22 b(this)i(article)f(as)g(dorman)n(t)g(\(only)g(follo)n(wups)g
-(are)g(in)n(terest-)89 3703 y(ing\).)37 b([scop)r(e])-128
-3802 y(M)28 b(D)50 b(Sho)n(w)27 b(all)h Fe(dorman)m(t)g
-Fg(articles)e(\(normally)h(they)h(are)e(hidden)i(unless)89
-3902 y(they)g(ha)n(v)n(e)f(an)n(y)f(follo)n(wups\).)1118
-4515 y(14)p eop end
-%%Page: 15 16
-TeXDict begin 15 15 bop -128 -294 a Fg(M)28 b(M-D)121
-b(Hide)28 b(all)f Fe(dorman)m(t)h Fg(articles.)-128 -194
-y(C-w)244 b(Mark)26 b(all)h(articles)g(b)r(et)n(w)n(een)h(p)r(oin)n(t)f
-(and)h(mark)f(as)g(read.)-128 -95 y(M-u)242 b(\(M)28
-b(SPC,)f(M)h(c\))g(Clear)f(all)g(marks)g(from)g(this)h(article)f(and)g
-(mo)n(v)n(e)g(to)264 5 y(the)h(next)f(one.)37 b([scop)r(e])-128
-104 y(M-U)226 b(Clear)34 b(all)h(marks)f(from)h(this)h(article)f(and)g
-(mo)n(v)n(e)f(to)h(the)h(previous)264 204 y(one.)g([scop)r(e])-128
-304 y(M)28 b(e)251 b(\(E,)27 b(M)h(x\))g(Mark)e(this)i(article)f(as)g
-Fe(expirable)p Fg(.)37 b([scop)r(e])-128 403 y(M)28 b(k)244
-b(\(k\))21 b Fe(Kill)f Fg(all)h(articles)f(with)i(the)g(same)f(sub)5
-b(ject)21 b(then)h(select)f(the)h(next)264 503 y(unread)27
-b(one.)-128 603 y(M)h(K)223 b(\(C-k\))27 b Fe(Kill)f
-Fg(all)i(articles)e(with)i(the)g(same)f(sub)5 b(ject)28
-b(as)f(this)h(one.)-128 702 y(M)g(C)228 b Fe(Catc)m(h-up)28
-b Fg(the)g(articles)f(that)h(are)f(not)g(tic)n(k)n(ed)g(and)h(not)f
-(dorman)n(t.)-128 802 y(M)h(C-c)163 b Fe(Catc)m(h-up)28
-b Fg(all)g(articles)e(in)i(this)g(group.)-128 901 y(M)g(H)226
-b Fe(Catc)m(h-up)28 b Fg(\(mark)f(read\))g(this)h(group)f(to)g(p)r(oin)
-n(t)h(\(to-)p Fe(here)p Fg(\).)-128 1001 y(M)g(b)242
-b(Set)28 b(a)f Fe(b)s(o)s(okmark)g Fg(in)h(this)g(article.)-128
-1101 y(M)g(B)229 b(Remo)n(v)n(e)26 b(the)i Fe(b)s(o)s(okmark)g
-Fg(from)f(this)h(article.)-128 1200 y(M)g(M-r)151 b(\(x\))28
-b(Expunge)e(all)i Fe(read)g Fg(articles)f(from)g(this)h(group.)-128
-1300 y(M)g(M-C-r)63 b(Expunge)26 b(all)i(articles)e(ha)n(ving)h(a)g
-(giv)n(en)g(mark.)-128 1400 y(M)h(S)242 b(\(C-c)27 b(M-C-s\))g
-Fe(Sho)m(w)h Fg(all)f(expunged)h(articles.)-128 1499
-y(M)g(M)g(C-h)50 b(Displa)n(ys)26 b(some)h(more)g(k)n(eys)g(doing)g
-(tic)n(king)g(sligh)n(tly)g(di\013eren)n(tly)-7 b(.)-128
-1595 y(The)31 b(v)-5 b(ariable)29 b(`gn)n(us-summary-goto-unread')d
-(con)n(trols)j(what)h(happ)r(ens)h(after)-128 1695 y(a)d(mark)e(has)h
-(b)r(een)h(set)g(\(C-x)f(C-i)h(g)f(Setting)h(Marks)e(RET\))-128
-1910 y Fe(Mark)33 b(Based)f(on)f(Score)-128 2042 y Fg(M)d(V)g(c)82
-b Fe(Clear)28 b Fg(all)f(marks)g(from)g(all)g(high-scored)f(articles.)
-36 b([score])-128 2141 y(M)28 b(V)g(k)75 b Fe(Kill)26
-b Fg(all)i(lo)n(w-scored)d(articles.)36 b([score])-128
-2241 y(M)28 b(V)g(m)50 b(Mark)27 b(all)g(high-scored)f(articles)h(with)
-h(a)f(giv)n(en)g Fe(mark)p Fg(.)37 b([score])-128 2341
-y(M)28 b(V)g(u)73 b(Mark)26 b(all)g(high-scored)f(articles)g(as)h(in)n
-(teresting)g(\(tic)n(k)g(them\).)38 b([score])-128 2594
-y Fe(The)32 b(Pro)s(cess)g(Mark)-128 2747 y Fg(These)27
-b(commands)f(set)g(and)g(remo)n(v)n(e)f(the)i(pro)r(cess)f(mark)f
-(\(#\).)38 b(Y)-7 b(ou)26 b(only)g(need)-128 2847 y(to)h(use)g(it)g(if)
-g(the)h(set)e(of)h(articles)f(y)n(ou)g(w)n(an)n(t)g(to)h(op)r(erate)f
-(on)g(is)h(non-con)n(tiguous.)-128 2947 y(Else)g(use)h(a)f(n)n(umeric)g
-(pre\014x.)-60 3041 y(M)h(P)f(p)69 b(\(#,)28 b(M)g(#\))g(Mark)f(this)h
-(article.)-60 3140 y(M)g(P)f(u)69 b(\(M-#,)28 b(M)g(M-#\))g
-Fe(unmark)g Fg(this)g(article.)-60 3240 y(M)g(P)f(b)69
-b(Mark)27 b(all)g(articles)g(in)g Fe(bu\013er)p Fg(.)-60
-3340 y(M)h(P)f(r)82 b(Mark)27 b(all)g(articles)g(in)g(the)h
-Fe(region)p Fg(.)-60 3439 y(M)g(P)f(g)73 b(Unmark)27
-b(all)g(articles)g(in)h(the)g(region.)-60 3539 y(M)g(P)f(R)54
-b(Mark)27 b(all)g(articles)g(matc)n(hing)g(a)g Fe(regexp)p
-Fg(.)-60 3638 y(M)h(P)f(G)50 b(Unmark)27 b(all)g(articles)g(matc)n
-(hing)g(a)g(regexp.)-60 3738 y(M)h(P)f(t)83 b(Mark)27
-b(all)g(articles)g(in)g(this)h(\(sub\))p Fe(thread)p
-Fg(.)-60 3838 y(M)g(P)f(T)55 b(Unmark)27 b(all)g(articles)g(in)h(this)g
-(\(sub\))p Fe(thread)p Fg(.)-60 3937 y(M)g(P)f(s)82 b(Mark)27
-b(all)g(articles)g(in)g(the)h(curren)n(t)f Fe(series)p
-Fg(.)-60 4037 y(M)h(P)f(S)69 b(Mark)27 b(all)g Fe(series)f
-Fg(that)i(already)e(con)n(tain)h(a)g(mark)n(ed)g(article.)-60
-4137 y(M)h(P)f(a)73 b(Mark)27 b Fe(all)g Fg(articles)f(\(in)j(series)d
-(order\).)-60 4236 y(M)i(P)f(U)53 b Fe(unmark)28 b Fg(all)g(articles.)
-1118 4515 y(15)p eop end
-%%Page: 16 17
-TeXDict begin 16 16 bop -128 -294 a Fg(M)28 b(P)f(i)87
-b Fe(In)m(v)m(ert)29 b Fg(the)f(list)g(of)g(pro)r(cess-mark)n(ed)d
-(articles.)-128 -194 y(M)j(P)f(k)66 b(Push)32 b(the)i(curren)n(t)d(pro)
-r(cess-mark)g(set)h(on)n(to)g(stac)n(k)g(and)g(unmark)g(all)170
--95 y(articles.)-128 5 y(M)c(P)f(y)66 b(P)n(op)27 b(pro)r(cess-mark)e
-(set)i(from)h(stac)n(k)e(and)i(restore)e(it.)-128 104
-y(M)i(P)f(w)50 b(Push)27 b(pro)r(cess-mark)e(set)j(on)f(the)h(stac)n
-(k.)-128 204 y(M)g(P)f(v)66 b(Mark)41 b(all)g(articles)f(with)i(score)e
-(o)n(v)n(er)g(the)i(default)g(score.)77 b([Pre\014x:)170
-304 y(score])1118 4515 y(16)p eop end
-%%Page: 17 18
-TeXDict begin 17 17 bop -128 -281 a Fe(Mark)33 b(Indication-Characters)
--128 -128 y Fg(If)28 b(a)g(command)f(directly)g(sets)h(a)f(mark,)g(it)h
-(is)f(sho)n(wn)g(in)h(paren)n(theses.)p -128 -100 2578
-4 v -130 100 4 200 v -78 -30 a Fe(\\Read")34 b(Marks.)41
-b Fg(All)29 b(these)g(marks)f(app)r(ear)g(in)h(the)g(\014rst)g(column)g
-(of)g(the)-78 70 y(summary)e(line,)h(and)f(so)g(are)g(m)n(utually)g
-(exclusiv)n(e.)p 2448 100 V -128 103 2578 4 v -130 202
-4 100 v -77 173 a(`)h(')p 47 202 V 101 w(\(M-u,)g(M)g(SPC,)f(M)h(c\))g
-(Not)f(read.)p 2448 202 V -130 302 V -51 272 a(!)p 47
-302 V 126 w(\(!,)h(M)g(!,)g(M)f(t\))i(Tic)n(k)n(ed)d(\(in)n
-(teresting\).)p 2448 302 V -130 402 V -59 372 a(?)p 47
-402 V 118 w(\(?,)i(M)g(?\))g(Dorman)n(t)f(\(only)h(follo)n(wups)e(are)h
-(in)n(teresting\).)p 2448 402 V -130 501 V -68 471 a(E)p
-47 501 V 109 w(\(E,)h(M)f(e,)h(M)g(x\))f Fe(Expirable)p
-Fg(.)37 b(Only)27 b(has)g(e\013ect)i(in)e(mail)h(groups.)p
-2448 501 V -130 601 V -72 571 a(G)p 47 601 V 105 w(\(C,)g(B)f(DEL\))h
-(Canceled)f(article)g(\(or)g(deleted)h(in)g(mailgroups\).)p
-2448 601 V -130 701 V -60 671 a($)p 47 701 V 116 w(\(M-d,)g(M)g(s)f(x,)
-h(S)f(x\).)38 b(Mark)n(ed)26 b(as)h(spam.)p 2448 701
-V -128 704 2578 4 v -128 721 V -130 1019 4 299 v -78
-790 a(The)c(marks)e(b)r(elo)n(w)h(mean)g(that)g(the)h(article)e(is)h
-(read)g(\(killed,)i(unin)n(teresting\),)-78 890 y(and)k(ha)n(v)n(e)e
-(more)g(or)h(less)g(the)h(same)e(e\013ect.)38 b(Some)27
-b(commands)g(ho)n(w)n(ev)n(er)e(ex-)-78 990 y(plicitly)i(di\013eren)n
-(tiate)g(b)r(et)n(w)n(een)f(them)i(\(e.g.)e(M)h(M-C-r,)f(adaptiv)n(e)g
-(scoring\).)p 2448 1019 V -128 1023 2578 4 v -130 1122
-4 100 v -56 1092 a(r)p 47 1122 V 121 w(\(d,)i(M)g(d,)g(M)g(r\))f
-(Deleted)h(\(mark)n(ed)f(as)g Fe(read)p Fg(\).)p 2448
-1122 V -130 1222 V -70 1192 a(C)p 47 1222 V 108 w(\(M)h(C;)g(M)g(C-c;)f
-(M)h(H;)g(c,)f(Z)h(c;)f(Z)h(n;)g(Z)f(C\))h(Killed)f(b)n(y)h
-Fe(catc)m(h-up)p Fg(.)p 2448 1222 V -130 1322 V -67 1292
-a(F)p 47 1322 V 111 w(SOUP)n(ed)f(article.)36 b(See)28
-b(the)g(man)n(ual.)p 2448 1322 V -130 1421 V -72 1391
-a(O)p 47 1421 V 105 w Fe(Old)f Fg(\(read)g(in)h(a)f(previous)f
-(session\).)p 2448 1421 V -130 1521 V -72 1491 a(K)p
-47 1521 V 105 w(\(k,)i(M)g(k;)f(C-k,)g(M)h(K\))g Fe(Killed)p
-Fg(.)p 2448 1521 V -130 1620 V -78 1591 a(M)p 47 1620
-V 100 w(Article)g(mark)n(ed)e(as)h(read)g(b)n(y)g(duplicate)h
-(suppression.)p 2448 1620 V -130 1820 4 200 v -72 1690
-a(Q)p 47 1820 V 105 w(Article)h(is)f(part)g(of)h(a)f(sparse)f(thread)h
-(\(see)h(\\Threading")d(in)j(the)g(man-)98 1790 y(ual\).)p
-2448 1820 V -130 1919 4 100 v -70 1889 a(R)p 47 1919
-V 107 w Fe(Read)e Fg(\(view)n(ed)h(in)g(actualit)n(y\).)p
-2448 1919 V -130 2019 V -71 1989 a(X)p 47 2019 V 107
-w(Killed)f(b)n(y)h(a)f(kill)h(\014le.)p 2448 2019 V -130
-2119 V -71 2089 a(Y)p 47 2119 V 107 w(Killed)f(due)h(to)g(lo)n(w)f
-(score.)p 2448 2119 V -128 2122 2578 4 v -128 2261 V
--130 2360 4 100 v -78 2330 a Fe(Marks)32 b(not)g(a\013ecting)g
-(visibilit)m(y)p 2448 2360 V -128 2364 2578 4 v -130
-2563 4 200 v -74 2433 a Fg(#)p 47 2563 V 103 w(\(#,)44
-b(M)c(#,)k(M)d(P)e(p\))i(Pro)r(cessable)d(\(will)j(b)r(e)g(a\013ected)f
-(b)n(y)g(the)h(next)98 2533 y(op)r(eration\).)36 b([2])p
-2448 2563 V -130 2662 4 100 v -71 2633 a(A)p 47 2662
-V 107 w Fe(Answ)m(ered)28 b Fg(\(follo)n(w)n(ed-up)e(or)h(replied\).)37
-b([2])p 2448 2662 V -130 2762 V -67 2732 a(F)p 47 2762
-V 111 w(F)-7 b(orw)n(arded.)35 b([2])p 2448 2762 V -130
-2862 V -60 2832 a Fa(\003)p 47 2862 V 116 w Fg(Cac)n(hed.)h([2])p
-2448 2862 V -130 2961 V -63 2931 a(S)p 47 2961 V 115
-w(Sa)n(v)n(ed.)g([2])p 2448 2961 V -130 3061 V -71 3031
-a(N)p 47 3061 V 107 w(Recen)n(tly)27 b(arriv)n(ed.)36
-b([2])p 2448 3061 V -130 3161 V -51 3131 a(.)p 47 3161
-V 126 w(Unseen.)h([2])p 2448 3161 V -130 3260 V -72 3230
-a(+)p 47 3260 V 105 w(Ov)n(er)26 b(default)i(score.)36
-b([3])p 2448 3260 V -130 3360 V -72 3330 a Fa(\000)p
-47 3360 V 105 w Fg(Under)28 b(default)g(score.)35 b([3])p
-2448 3360 V -130 3559 4 200 v -72 3430 a(=)p 47 3559
-V 105 w(Has)53 b(c)n(hildren)h(\(thread)f(underneath)h(it\).)116
-b(Add)54 b(`\045e')g(to)g(`gn)n(us-)98 3529 y(summary-line-format'.)35
-b([3])p 2448 3559 V -128 3562 2578 4 v -128 3756 a Fh
-(Summary-Unplugged)-128 3907 y Fg(J)28 b(#)154 b Fe(Mark)28
-b Fg(the)g(article)f(for)g(do)n(wnloading.)-128 4007
-y(J)h(M-#)50 b Fe(Unmark)28 b Fg(the)g(article)f(for)g(do)n(wnloading.)
-1118 4515 y(17)p eop end
-%%Page: 18 19
-TeXDict begin 18 18 bop -128 -294 a Fg(@)102 b Fe(T)-8
-b(oggle)26 b Fg(whether)i(to)f(do)n(wnload)g(the)h(article.)-128
--194 y(J)g(c)59 b(Mark)26 b(all)i(undo)n(wnloaded)e(articles)h(as)g
-(read)g(\()p Fe(catc)m(h-up)p Fg(\).)-128 -95 y(J)h(u)50
-b(Do)n(wnload)26 b(all)i(do)n(wnloadable)e(articles)g(from)h(group.)
--128 176 y Fh(Mail-Group)40 b(Commands)-128 329 y Fg(These)28
-b(commands)f(\(except)h(`B)f(c'\))h(are)f(only)g(v)-5
-b(alid)27 b(in)h(a)g(mail)f(group.)-60 428 y(B)h(DEL)106
-b(\(B)24 b(bac)n(kspace,)f(B)h(delete\))g Fe(Delete)f
-Fg(the)i(mail)f(article)f(from)g(disk)h(\(!\).)305 527
-y([p/p])-60 627 y(B)k(B)219 b(Crossp)r(ost)26 b(this)i(article)f(to)g
-(another)g(group.)-60 727 y(B)h(c)241 b Fe(Cop)m(y)28
-b Fg(this)g(article)f(from)g(an)n(y)g(group)f(to)i(a)f(mail)g(group.)36
-b([p/p])-60 826 y(B)28 b(e)241 b Fe(Expire)27 b Fg(all)g(expirable)g
-(articles)g(in)h(this)g(group.)35 b([p/p])-60 926 y(B)28
-b(i)255 b Fe(Imp)s(ort)27 b Fg(a)g(random)g(\014le)h(in)n(to)f(this)h
-(group.)-60 1026 y(B)g(I)248 b(Create)26 b(an)i(empt)n(y)f(article)g
-(in)h(this)g(group.)-60 1125 y(B)g(m)209 b Fe(Mo)m(v)m(e)28
-b Fg(the)g(article)e(from)i(one)f(mail)g(group)g(to)g(another.)36
-b([p/p])-60 1225 y(B)28 b(p)232 b(Query)26 b(whether)i(the)g(article)f
-(w)n(as)f Fe(p)s(osted)h Fg(as)g(w)n(ell.)-60 1324 y(B)h(q)234
-b Fe(Query)28 b Fg(where)f(the)h(article)f(will)g(end)h(up)g(after)f
-(fancy)h(splitting)-60 1424 y(B)g(r)245 b Fe(Resp)s(o)s(ol)25
-b Fg(this)j(mail)f(article.)36 b([p/p])-60 1524 y(B)28
-b(t)246 b Fe(T)-8 b(race)29 b Fg(the)f(fancy)f(splitting)h(patterns)f
-(applied)h(to)f(this)h(article.)-60 1623 y(B)g(w)218
-b(\(e\))28 b(Edit)f(this)h(article.)-60 1723 y(B)g(M-C-e)49
-b Fe(Expunge)18 b Fg(\(delete)h(from)f(disk\))h(all)f(expirable)g
-(articles)f(in)i(this)g(group)305 1823 y(\(!\).)37 b([p/p])-60
-1922 y(K)27 b(E)216 b Fe(Encrypt)28 b Fg(article)f(b)r(o)r(dy)-7
-b(.)38 b([p/p])-128 2193 y Fh(Draft-Group)h(Commands)-128
-2346 y Fg(The)21 b(\\drafts"-group)d(con)n(tains)i(messages)g(that)h
-(ha)n(v)n(e)e(b)r(een)j(sa)n(v)n(ed)d(but)j(not)e(sen)n(t)-128
-2446 y(and)28 b(rejected)f(articles.)-60 2540 y(D)h(e)180
-b Fe(edit)27 b Fg(message.)-60 2640 y(D)h(s)184 b Fe(Send)28
-b Fg(message.)35 b([p/p])-60 2739 y(D)28 b(S)171 b Fe(Send)28
-b Fg(all)f(messages.)-60 2839 y(D)h(t)185 b Fe(T)-8 b(oggle)27
-b Fg(sending)g(\(mark)g(as)g(unsendable\).)-60 2938 y(B)h(DEL)49
-b Fe(Delete)27 b Fg(message)f(\(lik)n(e)i(in)g(mailgroup\).)-128
-3209 y Fh(Exit)37 b(the)h(Summary-Bu\013er)-128 3360
-y Fg(Z)28 b(Z)61 b(\(q,)28 b(Z)f(Q\))h(Exit)f(this)h(group.)-128
-3460 y(Z)g(E)55 b(\(Q\))28 b Fe(Exit)f Fg(without)h(up)r(dating)g(the)g
-(group)f(information.)-128 3559 y(Z)h(c)75 b(\(c\))28
-b(Mark)f(all)g(un)n(tic)n(k)n(ed)g(articles)g(as)g(read)f(\()p
-Fe(catc)m(h-up)p Fg(\))k(and)e(exit.)-128 3659 y(Z)g(C)52
-b(Mark)27 b(all)g(articles)g(as)f(read)h(\()p Fe(catc)m(h-up)p
-Fg(\))j(and)e(exit.)-128 3759 y(Z)g(n)66 b(Mark)27 b(all)g(articles)g
-(as)f(read)h(and)h(go)e(to)i(the)g Fe(next)g Fg(group.)-128
-3858 y(Z)g(N)50 b(Exit)27 b(and)h(go)e(to)i Fe(the)f
-Fg(next)h(group.)-128 3958 y(Z)g(P)55 b(Exit)27 b(and)h(go)e(to)i(the)g
-Fe(previous)f Fg(group.)1118 4515 y(18)p eop end
-%%Page: 19 20
-TeXDict begin 19 19 bop -128 -294 a Fg(Z)28 b(G)50 b(\(M-g\))27
-b(Chec)n(k)g(for)g(new)h(articles)f(in)h(this)g(group)e(\()p
-Fe(get)p Fg(\).)-128 -194 y(Z)i(R)54 b(\(C-x)22 b(C-s\))f(Exit)h(this)g
-(group,)g(and)g(then)g(en)n(ter)g(it)g(again)f(\()p Fe(reen)m(ter)p
-Fg(\).)36 b([Pre-)66 -95 y(\014x:)h(select)27 b(all)g(articles,)g(read)
-g(and)g(unread.])-128 5 y(Z)h(s)82 b(Up)r(date)25 b(and)f(sa)n(v)n(e)f
-(the)i(dribble)f(bu\013er.)36 b([Pre\014x:)f(sa)n(v)n(e)22
-b(.newsrc*)i(as)g(w)n(ell])-128 318 y Fd(Article)46 b(Mo)t(de)e
-(\(reading\))-128 499 y Fg(The)21 b(normal)f(na)n(vigation)f(k)n(eys)g
-(w)n(ork)h(in)g(Article)h(mo)r(de.)35 b(Some)20 b(additional)g(k)n(eys)
--128 599 y(are:)-63 677 y(C-c)27 b(^)186 b(Get)28 b(the)g(article)f
-(with)h(the)g(Message-ID)e(near)g(p)r(oin)n(t.)-63 777
-y(C-c)h(RET)50 b(Send)28 b(reply)f(to)g(address)f(near)h(p)r(oin)n(t.)
--63 876 y(h)334 b(Go)27 b(to)g(the)h Fe(header)p Fg(-line)g(of)g(the)g
-(article)f(in)h(the)g(summary-bu\013er.)-63 976 y(s)347
-b(Go)27 b(to)g Fe(summary)q Fg(-bu\013er.)-63 1076 y(RET)202
-b(\(middle)23 b(mouse)f(button\))h(Activ)-5 b(ate)23
-b(the)g(button)g(at)f(p)r(oin)n(t)g(to)h(follo)n(w)317
-1175 y(an)k(URL)h(or)f(Message-ID.)-63 1275 y(T)-7 b(AB)206
-b(Mo)n(v)n(e)26 b(the)i(p)r(oin)n(t)g(to)f(the)h(next)g(button.)-63
-1374 y(M-T)-7 b(AB)102 b(Mo)n(v)n(e)26 b(p)r(oin)n(t)i(to)f(previous)g
-(button.)-128 1645 y Fh(W)-9 b(ash)38 b(the)g(Article-Bu\013er)-128
-1777 y Fg(W)28 b(6)77 b(T)-7 b(ranslate)27 b(a)g(base64)f(article.)-128
-1876 y(W)i(a)77 b(Strip)28 b(certain)f Fe(headers)h Fg(from)f(b)r(o)r
-(dy)-7 b(.)-128 1976 y(W)28 b(b)73 b(Mak)n(e)39 b(Message-IDs)f(and)h
-(URLs)h(in)g(the)g(article)f(mouse-clic)n(k)-5 b(able)104
-2076 y Fe(buttons)p Fg(.)-128 2175 y(W)28 b(c)82 b(T)-7
-b(ranslate)29 b(CRLF-pairs)f(to)h(LF)h(and)f(then)h(the)g(remaining)e
-(CR's)h(to)104 2275 y(LF's.)-128 2374 y(W)f(d)73 b(T)-7
-b(reat)27 b Fe(dum)m(b)s(quotes)p Fg(.)-128 2474 y(W)h(e)82
-b(T)-7 b(reat)27 b Fe(emphasized)g Fg(text.)-128 2574
-y(W)h(h)73 b(T)-7 b(reat)27 b Fe(HTML)p Fg(.)-128 2673
-y(W)h(l)96 b(\(w\))29 b(Remo)n(v)n(e)d(page)h(breaks)f(\()p
-Fe(^L)p Fg(\))j(from)e(the)h(article.)-128 2773 y(W)g(m)50
-b Fe(Morse)27 b Fg(deco)r(de)h(article.)-128 2873 y(W)g(o)77
-b(T)-7 b(reat)27 b Fe(o)m(v)m(erstrik)m(e)i Fg(or)e(underline)g(\(^H)p
-1371 2873 25 4 v 30 w(\))h(in)g(the)g(article.)-128 2972
-y(W)g(p)73 b(V)-7 b(erify)28 b(X-)p Fe(PGP)p Fg(-Sig)g(header.)-128
-3072 y(W)g(q)75 b(T)-7 b(reat)27 b Fe(quoted)p Fg(-prin)n(table)g(in)h
-(the)g(article.)-128 3171 y(W)g(r)86 b(\(C-c)28 b(C-r\))f(Do)h(a)f
-(Caesar)f Fe(rotate)i Fg(\(rot13\))e(on)i(the)g(article.)-128
-3271 y(W)g(s)86 b(V)-7 b(erify)28 b(\(and)g(decrypt\))f(a)h
-Fe(signed)e Fg(message.)-128 3371 y(W)i(t)87 b(\(t\))29
-b Fe(T)-8 b(oggle)27 b Fg(displa)n(y)f(of)i(all)f(headers.)-128
-3470 y(W)h(u)73 b Fe(Unsplit)27 b Fg(brok)n(en)g(URLs.)-128
-3570 y(W)h(v)75 b(\(v\))29 b(T)-7 b(oggle)26 b(p)r(ermanen)n(t)h
-Fe(v)m(erb)s(ose)g Fg(displa)n(ying)g(of)g(all)h(headers.)-128
-3670 y(W)g(w)59 b(Do)28 b(w)n(ord)f Fe(wrap)h Fg(in)g(the)g(article.)
--128 3769 y(W)g(B)60 b(Add)29 b(clic)n(k)-5 b(able)27
-b Fe(buttons)g Fg(to)h(the)g(article)f(headers.)-128
-3869 y(W)h(C)59 b Fe(Capitalize)28 b Fg(\014rst)f(w)n(ord)g(in)h(eac)n
-(h)e(sen)n(tence.)1118 4515 y(19)p eop end
-%%Page: 20 21
-TeXDict begin 20 20 bop -128 -294 a Fg(W)28 b(Q)124 b(Fill)28
-b(long)f(lines.)-128 -194 y(W)h(Z)138 b(T)-7 b(ranslate)27
-b(a)g(HZ-enco)r(ded)g(article.)-128 -95 y(W)h(G)g(u)50
-b Fe(Unfold)28 b Fg(folded)g(header)e(lines.)-128 5 y(W)i(G)g(f)71
-b Fe(F)-8 b(old)27 b Fg(all)h(header)e(lines.)-128 104
-y(W)i(G)g(n)50 b(Unfold)28 b Fe(Newsgroups:)35 b Fg(and)28
-b(F)-7 b(ollo)n(w-Up-T)g(o:.)-128 204 y(W)28 b(Y)g(c)62
-b(Repair)27 b(brok)n(en)f Fe(citations)p Fg(.)-128 304
-y(W)i(Y)g(a)57 b(Repair)27 b(brok)n(en)f Fe(attribution)i
-Fg(lines.)-128 403 y(W)g(Y)g(u)53 b Fe(Un)m(wrap)29 b
-Fg(brok)n(en)e(citation)g(lines.)-128 503 y(W)h(Y)g(f)74
-b(Do)28 b(a)f Fe(full)g Fg(deugli\014cation)g(\(W)h(Y)g(c,)g(W)g(Y)g
-(a,)f(W)h(Y)g(u\).)-128 757 y Fe(Blank)33 b(Lines)e(and)h(Whitespace)
--128 905 y Fg(W)c(E)g(l)96 b(Strip)27 b(blank)h Fe(lines)e
-Fg(from)h(the)h(b)r(eginning)g(of)f(the)h(article.)-128
-1004 y(W)g(E)g(m)50 b(Replace)42 b(blank)g(lines)g(with)h(empt)n(y)g
-(lines)f(and)g(remo)n(v)n(e)f Fe(m)m(ultiple)189 1104
-y Fg(blank)27 b(lines.)-128 1204 y(W)h(E)g(t)87 b(Remo)n(v)n(e)26
-b Fe(trailing)h Fg(blank)g(lines.)-128 1303 y(W)h(E)g(a)77
-b(Strip)26 b(blank)h(lines)f(at)h(the)g(b)r(eginning)f(and)h(the)g(end)
-g(\(W)g(E)f(l,)h(W)g(E)f(m)189 1403 y(and)h(W)h(E)f(t\).)-128
-1503 y(W)h(E)g(A)57 b(Strip)27 b Fe(all)h Fg(blank)f(lines.)-128
-1602 y(W)h(E)g(s)86 b(Strip)27 b(leading)g(blank)h(lines)f(from)h(the)f
-(article)g(b)r(o)r(dy)-7 b(.)-128 1702 y(W)28 b(E)g(e)82
-b(Strip)27 b(trailing)g(blank)h(lines)f(from)g(the)h(article)f(b)r(o)r
-(dy)-7 b(.)-128 1801 y(W)28 b(E)g(w)59 b(Remo)n(v)n(e)26
-b(leading)h Fe(whitespace)g Fg(from)h(all)f(headers.)-128
-2055 y Fe(Picons,)k(X-faces,)h(Smileys)-128 2203 y Fg(W)c(D)h(s)86
-b(\(W)28 b(g\))f(Displa)n(y)g Fe(smilies)p Fg(.)-128
-2303 y(W)h(D)h(x)75 b(\(W)28 b(f)6 b(\))29 b(Lo)r(ok)d(for)h(and)h
-(displa)n(y)f(an)n(y)f(X-)p Fe(F)-8 b(ace)29 b Fg(headers.)-128
-2402 y(W)f(D)h(d)73 b(Displa)n(y)27 b(an)n(y)f(F)-7 b(ace)28
-b(headers.)-128 2502 y(W)g(D)h(n)73 b(T)-7 b(oggle)26
-b(picons)h(in)h Fe(Newsgroups)e Fg(and)h(F)-7 b(ollo)n(wup-T)g(o.)-128
-2602 y(W)28 b(D)h(m)50 b(T)-7 b(oggle)26 b(picons)h(in)h
-Fe(mail)e Fg(headers)h(\(T)-7 b(o)27 b(and)h(Cc\).)-128
-2701 y(W)g(D)h(f)94 b(T)-7 b(oggle)26 b(picons)h(in)h
-Fe(F)-8 b(rom)p Fg(.)-128 2801 y(W)28 b(D)h(D)56 b(Remo)n(v)n(e)26
-b(all)h(images)g(from)g(the)h(article)f(bu\013er.)-128
-3055 y Fe(Time)32 b(and)g(Date)-128 3187 y Fg(W)c(T)g(u)50
-b(\(W)25 b(T)f(z\))h(Displa)n(y)f(the)h(article)e(timestamp)i(in)g(GMT)
-f(\()p Fe(UT,)29 b(ZULU)p Fg(\).)-128 3286 y(W)f(T)g(i)73
-b(Displa)n(y)27 b(the)h(article)f(timestamp)h(in)g Fe(ISO)f
-Fg(8601.)-128 3386 y(W)h(T)g(l)73 b(Displa)n(y)27 b(the)h(article)f
-(timestamp)h(in)g(the)g Fe(lo)s(cal)f Fg(timezone.)-128
-3485 y(W)h(T)g(s)63 b(Displa)n(y)27 b(according)f(to)h(`gn)n
-(us-article-time-format'.)-128 3585 y(W)h(T)g(e)59 b(Displa)n(y)27
-b(the)h(time)g Fe(elapsed)f Fg(since)g(it)i(w)n(as)d(sen)n(t.)-128
-3685 y(W)i(T)g(o)54 b(Displa)n(y)27 b(the)h Fe(original)f
-Fg(timestamp.)-128 3784 y(W)h(T)g(p)50 b(Displa)n(y)27
-b(the)h(date)g(in)f(format)h(that's)f Fe(pronounceable)h
-Fg(in)g(English.)-128 4055 y Fh(Hide/Highligh)m(t)38
-b(P)m(arts)f(of)h(the)f(Article)1118 4515 y Fg(20)p eop
-end
-%%Page: 21 22
-TeXDict begin 21 21 bop -128 -294 a Fg(W)28 b(W)g(a)133
-b(Hide)28 b Fe(all)f Fg(un)n(w)n(an)n(ted)g(parts.)36
-b(Calls)27 b(W)h(W)g(h,)g(W)g(W)g(s,)f(W)h(W)g(C-c.)-128
--194 y(W)g(W)g(h)129 b(Hide)28 b(article)f Fe(headers)p
-Fg(.)-128 -95 y(W)h(W)g(b)129 b(Hide)28 b Fe(b)s(oring)f
-Fg(headers.)-128 5 y(W)h(W)g(s)142 b(Hide)28 b Fe(signature)p
-Fg(.)-128 104 y(W)g(W)g(l)152 b(Hide)28 b Fe(list)e Fg(iden)n
-(ti\014ers)i(in)f(sub)5 b(ject-header.)-128 204 y(W)28
-b(W)g(P)118 b(Hide)28 b Fe(PEM)f Fg(\(priv)-5 b(acy)27
-b(enhanced)h(messages\).)-128 304 y(W)g(W)g(B)116 b(Hide)28
-b(banner)f(sp)r(eci\014ed)h(b)n(y)f(group)f(parameter.)-128
-403 y(W)i(W)g(c)138 b(Hide)28 b Fe(citation)p Fg(.)-128
-503 y(W)g(W)g(C-c)50 b(Hide)28 b Fe(citation)f Fg(using)h(a)f(more)g
-(in)n(telligen)n(t)g(algorithm.)-128 603 y(W)h(W)g(C)115
-b(Hide)28 b(cited)g(text)g(in)g(articles)e(that)i(aren't)f(ro)r(ots.)
--128 702 y(W)h(H)g(a)156 b(Highligh)n(t)27 b Fe(all)g
-Fg(parts.)36 b(Calls)27 b(W)h(b,)g(W)g(H)g(c,)g(W)g(H)g(h,)g(W)g(H)g
-(s.)-128 802 y(W)g(H)g(c)161 b(Highligh)n(t)27 b(article)g
-Fe(citations)p Fg(.)-128 901 y(W)h(H)g(h)152 b(Highligh)n(t)27
-b(article)g Fe(headers)p Fg(.)-128 1001 y(W)h(H)g(s)165
-b(Highligh)n(t)27 b(article)g Fe(signature)p Fg(.)-128
-1097 y(F)-7 b(or)22 b(all)g(hiding-commands:)34 b(A)22
-b(p)r(ositiv)n(e)g(pre\014x)g(alw)n(a)n(ys)f(hides,)i(and)f(a)g
-(negativ)n(e)-128 1197 y(pre\014x)28 b(will)f(sho)n(w)g(what)h(w)n(as)e
-(previously)h(hidden.)-128 1429 y Fh(MIME)38 b(op)s(erations)g(from)g
-(the)f(Article-Bu\013er)h(\(reading\))-128 1586 y Fg(RET)50
-b(\(BUTTON-2\))27 b(T)-7 b(oggle)26 b(displa)n(y)h(of)h(the)g(MIME)f
-(ob)5 b(ject.)-128 1685 y(v)184 b(Prompt)27 b(for)g(a)g(metho)r(d)h
-(and)f(then)i(view)e(ob)5 b(ject)27 b(using)h(this)f(metho)r(d.)-128
-1785 y(o)186 b(Prompt)27 b(for)g(a)g(\014lename)g(and)h(sa)n(v)n(e)e
-(the)i(MIME)f(ob)5 b(ject.)-128 1884 y(C-o)98 b(Prompt)23
-b(for)g(a)g(\014lename)h(to)f(sa)n(v)n(e)f(the)i(MIME)g(ob)5
-b(ject)23 b(to)g(and)h(remo)n(v)n(e)e(it.)-128 1984 y(d)182
-b Fe(Delete)27 b Fg(the)h(MIME)f(ob)5 b(ject.)-128 2084
-y(c)191 b Fe(Cop)m(y)28 b Fg(the)g(MIME)f(ob)5 b(ject)28
-b(to)f(a)g(new)h(bu\013er)g(and)f(displa)n(y)g(this)h(bu\013er.)-128
-2183 y(i)205 b(Displa)n(y)27 b(the)h(MIME)f(ob)5 b(ject)28
-b(in)g(this)f(bu\013er.)-128 2283 y(C)168 b(Cop)n(y)33
-b(the)i(MIME)g(ob)5 b(ject)34 b(to)g(a)g(new)h(bu\013er)f(and)h(displa)
-n(y)e(this)i(bu\013er)100 2383 y(using)27 b Fe(Charset)-128
-2482 y Fg(E)171 b(View)28 b(in)n(ternally)-7 b(.)-128
-2582 y(e)191 b(View)28 b Fe(externally)p Fg(.)-128 2681
-y(t)196 b(View)28 b(the)g(MIME)f(ob)5 b(ject)27 b(as)g(a)h(di\013eren)n
-(t)f Fe(t)m(yp)s(e)p Fg(.)-128 2781 y(p)182 b Fe(Prin)m(t)28
-b Fg(the)g(MIME)f(ob)5 b(ject.)-128 2881 y Fa(j)205 b
-Fg(Pip)r(e)27 b(the)h(MIME)g(ob)5 b(ject)27 b(to)h(a)f(pro)r(cess.)-128
-2980 y(.)205 b(T)-7 b(ak)n(e)26 b(action)i(on)f(the)h(MIME)f(ob)5
-b(ject.)-128 3293 y Fd(Serv)l(er)46 b(Mo)t(de)-128 3475
-y Fg(T)-7 b(o)28 b(en)n(ter)f(this)h(mo)r(de,)f(press)g(^)g(while)h(in)
-g(Group)f(mo)r(de.)-60 3569 y(SPC)49 b(\(RET\))28 b(Bro)n(wse)e(this)i
-(serv)n(er.)-60 3669 y(a)170 b Fe(Add)28 b Fg(a)g(new)f(serv)n(er.)-60
-3768 y(c)175 b Fe(Cop)m(y)29 b Fg(this)f(serv)n(er.)-60
-3868 y(e)175 b Fe(Edit)28 b Fg(a)f(serv)n(er.)-60 3968
-y(k)168 b Fe(Kill)27 b Fg(this)g(serv)n(er.)36 b([scop)r(e])-60
-4067 y(l)189 b Fe(List)28 b Fg(all)f(serv)n(ers.)-60
-4167 y(q)168 b(Return)28 b(to)g(the)g(group)e(bu\013er)i(\()p
-Fe(quit)p Fg(\).)1118 4515 y(21)p eop end
-%%Page: 22 23
-TeXDict begin 22 22 bop -128 -294 a Fg(s)163 b(Request)27
-b(that)h(the)g(serv)n(er)e(scan)h(its)g(sources)g(for)g(new)g
-(articles.)-128 -194 y(g)154 b(Request)27 b(that)h(the)g(serv)n(er)e
-(regenerate)f(its)j(data.)-128 -95 y(y)152 b Fe(Y)-8
-b(ank)28 b Fg(the)g(previously)f(killed)g(serv)n(er.)-128
-5 y(O)131 b(T)-7 b(ry)27 b(to)g Fe(op)s(en)g Fg(a)g(connection)g(to)h
-(this)g(serv)n(er.)-128 104 y(C)136 b Fe(Close)26 b Fg(connection)h(to)
-g(this)h(serv)n(er.)-128 204 y(D)133 b(Mark)26 b(this)i(serv)n(er)e(as)
-h(unreac)n(hable)f(\()p Fe(den)m(y)p Fg(\).)-128 304
-y(M-o)50 b Fe(Op)s(en)26 b Fg(the)i(connection)g(to)f(all)g(serv)n
-(ers.)-128 403 y(M-c)55 b Fe(Close)26 b Fg(the)i(connection)f(to)g(all)
-h(serv)n(ers.)-128 503 y(R)135 b(Mak)n(e)26 b(all)i(denied)f(serv)n
-(ers)f(in)n(to)h(closed)g(serv)n(ers.)-128 603 y(L)144
-b(Set)28 b(serv)n(er)d(status)j(to)f(o\017ine.)-128 873
-y Fh(Unplugged-Serv)m(er)-128 1024 y Fg(J)h(a)49 b Fe(Add)28
-b Fg(the)g(curren)n(t)f(serv)n(er)f(to)h(the)h(list)g(of)f(serv)n(ers)f
-(co)n(v)n(ered)g(b)n(y)h(the)h(agen)n(t.)-128 1124 y(J)g(r)58
-b Fe(Remo)m(v)m(e)28 b Fg(the)h(curren)n(t)e(serv)n(er)f(from)i(the)h
-(list)f(of)g(serv)n(ers)f(co)n(v)n(ered)f(b)n(y)i(the)34
-1223 y(agen)n(t.)-128 1536 y Fd(Bro)l(wse)46 b(Serv)l(er)f(Mo)t(de)-128
-1718 y Fg(T)-7 b(o)28 b(en)n(ter)f(this)h(mo)r(de,)f(press)g(`B')h
-(while)g(in)f(Group)g(mo)r(de.)-60 1812 y(RET)49 b(En)n(ter)27
-b(the)h(curren)n(t)f(group.)-60 1912 y(SPC)64 b(En)n(ter)27
-b(the)h(curren)n(t)f(group)f(and)i(displa)n(y)f(the)h(\014rst)f
-(article.)-60 2011 y(?)188 b(Giv)n(e)28 b(a)f(v)n(ery)f(short)h(help)h
-(message.)-60 2111 y(n)181 b(Go)28 b(to)f(the)h Fe(next)g
-Fg(group.)36 b([distance])-60 2211 y(p)181 b(Go)28 b(to)f(the)h
-Fe(previous)f Fg(group.)36 b([distance])-60 2310 y(q)183
-b(\(l\))29 b Fe(Quit)e Fg(bro)n(wse)f(mo)r(de.)-60 2410
-y(u)181 b(Subscrib)r(e)28 b(to)g(the)g(curren)n(t)e(group.)36
-b([scop)r(e])-23 3669 y(Cop)n(yrigh)n(t)390 3666 y(c)367
-3669 y Fa(\015)28 b Fg(1995,)e(2000,)f(2002,)h(2003,)g(2004,)g(2005,)f
-(2006,)h(2007)g(F)-7 b(ree)691 3768 y(Soft)n(w)n(are)26
-b(F)-7 b(oundation,)28 b(Inc.)-3 3951 y(P)n(ermission)22
-b(is)i(gran)n(ted)f(to)g(mak)n(e)h(and)f(distribute)i(copies)e(of)h
-(this)g(reference)-128 4051 y(b)r(o)r(oklet)g(pro)n(vided)e(the)i(cop)n
-(yrigh)n(t)e(notice)h(and)h(this)g(p)r(ermission)e(are)h(preserv)n(ed)
--128 4150 y(on)28 b(all)g(copies.)37 b(Please)27 b(send)h(corrections,)
-e(additions)i(and)g(suggestions)e(to)i(the)-128 4250
-y(curren)n(t)f(main)n(tainer's)g(email)g(address.)36
-b(Bo)r(oklet)27 b(last)g(edited)h(on)f(April,)h(2006.)1118
-4515 y(22)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/gnus-refcard.ps b/etc/gnus-refcard.ps
deleted file mode 100644
index 298d7e83c1a..00000000000
--- a/etc/gnus-refcard.ps
+++ /dev/null
@@ -1,4582 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: gnus-refcard.dvi
-%%Pages: 6
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%DocumentFonts: CMBX12 CMR7 CMTT8 CMBX7 CMMI7 CMR10 CMBX10 CMTI7 CMSY7
-%%DocumentPaperSizes: Letter
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t letter -f gnus-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.02.17:1832
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginProcSet: special.pro 0 0
-%!
-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
-save N userdict maxlength dict begin/magscale true def normalscale
-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
-@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
-savematrix setmatrix}N end
-
-%%EndProcSet
-%%BeginFont: CMSY7
-%!PS-AdobeFont-1.1: CMSY7 1.0
-%%CreationDate: 1991 Aug 15 07:21:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /minus put
-dup 3 /asteriskmath put
-dup 13 /circlecopyrt put
-dup 106 /bar put
-readonly def
-/FontBBox{-15 -951 1252 782}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
-8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
-F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
-E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
-424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
-E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
-C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
-868AEA25DA3D5413467B76D2F02F8097D28419D2EEAC108405E4AC2173E4304F
-5A8445E1A94C3022676F3B8E366AD06FBA451263D1014AD0ED97FBE558F363DF
-DA6BD1699F2B52BCCD8A3F91F6F7AE84A72501DC904505DE87C6F10EB1874721
-CA18FC4A7A7937BB915589A460E62278A7C52E2D75D8B1A29458ADE9F21B8596
-5D659D3BAB69F6FF11DE44938A28FF578EC12502ECABB442F42FB29C2E76B5EC
-9BE7255337BE899A9126EB7CFF1465CCD70877E16863C2A00C2E0BB4F3C8215F
-AA0526ECB9D656F2F08E54994170BB60DBADD92ADAE03829D4F9BFCBF4A1CCB9
-64B518BD068EDB92E7C3D0F954AF63F051E1D9531424BFD7B47122A986191CE9
-D1932DA8F549A439936DC5B41183B8F06FFA04EB737108F86378D7C791038663
-19CFEB6E26CAC5A284D2159240543E4EDCC912824B2E8CE6E88A6A6F08CA316F
-0A041D58E3D824F51A4B59FE8C54171E131307D544D854DD0996DDE1D7AD9B5A
-BA98C7CA45F121EBB079159095F010CAB2A3562A2CE53A09269D1642F6BB833F
-A06EA3BDBE4DFFB6D9FACE3F372619F6420F4FF71802456CA51DF66566335CD0
-00B0D3751570249F9A43C4A8BDA8EE12DF9E63B5E85305570D4D053E9B65AA6A
-14C3E00476EC8551E16A726A4946DC7B0B699E6B7AE43213230002AB7CFDEE29
-F2FC7DD3B002C51C619B095993559E5B683D9082DD9988CDFAFAA12092D6F956
-2A0940012468FAEFE2DEAD89DFCF62A70CE082F732504AA0E355520A551C43F3
-36211CA9D9111E6D524F329D181F8118036106C0011C9B1DD69B22A5A56B7A3A
-885190CA89DEE998C82E2A9023497348177A67C2C2A2BC209A93BA3552608A61
-C66A5FC069894F891AD31B17424F0D3369D2449348C0EA807D652FAB46BECFC7
-28890FB9B683EF9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI7
-%!PS-AdobeFont-1.1: CMTI7 1.0
-%%CreationDate: 1991 Aug 18 21:07:18
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 110 /n put
-readonly def
-/FontBBox{-27 -250 1268 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962CCA6FACCEA6B71BEEF7C056FBD376F2F0D0BD6BE0A0A8259139B28B99C6
-25119B8C60FF7BA002476930DFDC2F6B1B5A80F1C0E544A22E3F0FB2FEAB64B6
-A509B61E1AB96121FBF7F2BC27CDE5B4961048FC2169C8DB745FCC7AF0EED507
-284038B15CE53E69AA22CA76C2A208F6AD8614CD500D479A5E0FD25E7BB14C7F
-C47C503E4CC38975CB0A8F7E109665FB69EBAE6EB68B2D6FA3C967D5BDE7830E
-9CE6F13DFAEBC852DF1D7D0CDD33DD4D5CD6D94DD8AE0D48AB638013CF75A25C
-04FDEA8775EC52A13AF40FA41F7354624D917EE620318C702237AF8C0E1FFA02
-127F862D4DFD0A56774235A881AFBB8F7F4BCB33811C581CFF38462F669B7F97
-1F97AC09373B8F9B7E653013AF8170613E8D7E17235A893BE296A0CD2096B71F
-16778388993EDF1B003EBCE23DD02949CBFAAAB5D9F6A08178BFB8ED1043FC1B
-0B90D9AFC27B19783740E8DDE0E5E01D116A8CB083C721FBB8EBF71018A9570E
-78590CD831116BC0FDA4229F79A581874FC3A1F108A4FCA80CE27FA54A2A7505
-5BDB3D52E2595512837732322FB5BBE459C0205EB38439E34A39544F0A1567C6
-F29FBB7CF931708C8F92786CCBCBB443D54462B3B4B7BD38E90D325EBC31BA05
-FAAB393C7EBDB9EC48E4ACC15A247D2348A62293A726FCA4250B4A407F64270F
-923EB516CB8A3B5D19876C8755EB291357E4E4CC5903D1A536A635E267F7A971
-B1C33AA7F58E1ADA931C450EA8367B18E20E683CCEEC1BC079E837DDAFFF0D16
-23C4AED0DC04DD9458A630FD498794823FFA55705315F0687E7592A5DFC8B8D6
-FE2F3C64B4A4F9D37F5F2200BAA277F2E0BA8E5A84A0ED79B2B3A074C78BF4EC
-5BB4A625C8BA32E29212FF284BD4434F8F819228D786D69351850707A15E50C0
-81F251CFC855CAD7091265B62991C10DA312443BF1C7F9E942DFCE9337DF574F
-67BE7473A8ADB1485EC45E5CC49B8CDFFB44E9410C364BB5B6736AC5100A6FB9
-C9277AB89176701EE09DAD38D7597DA4E28B8606D0881920D8DECE61C4738BCD
-D46A779C71A9EDA291E11AB7558AA542EA91A258283158F02A73E6F0BC24FEC7
-2E09A90AF14304782915366CD432AF052167C29202035CA7EE647CFE01F780C8
-6EABACE2CB4310C04FE06848C73E64B7750F59B6A5EB6C1071EF5F92FBE1EAD3
-3A43E77B1EB81CD4BC81848A08266ECD31C3DEB8AB82C69113D9FCA2EA1FD16E
-A3A52F37804F4DFCB8451384C8524C7D3B23D7AFA50691CA942E70BC33301D2B
-56CC5A949964651EF7E393CDEBC7D08BEE8E5AAAA68E29A200E461E2CBC62DD7
-2A2E0E3DF2A89286A0E120EC674DDA116380E3A0BA22B61BE0D52DF0CB4F4F7C
-81010A822077F42EC6B12E3A8C3BA0BD
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 47 /slash put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 73 /I put
-dup 74 /J put
-dup 76 /L put
-dup 77 /M put
-dup 80 /P put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 88 /X put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B781EB59569E3D0D54D8EFAE0F3EDE26279776ABA15341E42E636
-6E02817082BE6FE0B04249A4840C11F95F8ADEFF72173E9A5F2AB2F62C427E5B
-DC010E18641EAC906A5EF0F9BC2108062134A7F10956219C5847C0D82F0E8663
-12D963E012DF0DD899911EC5D8096F80B49CA3444CF1294FBFAB57DFACC9D01C
-46F3BA2F3D1C14EC30CBF83E5729F1C074D4F1665405CF54722827FBC24AEF08
-F6DD0BC6A79A2DB1FF539454E8F5D1A42D40CCFBC093AFD3E57973A009095CEA
-B91FAFD236C47F453B38DB0067907A28EB5E9ADE87A2181F1D6DE4E183631716
-C21F0F952E0666AC74371F8B5C888DC44FBA5607435A619684F502CF625663C7
-94B0DAA79BE8E129E7F5C5AD1B7495C1BC9B1C759867467F55148C7FF2F914D8
-95218C4C3C2D2DB3482C21EA050F23D6A7A056B172EB210276CDB3B1DCA47A99
-96AF4B0A1E4A219C2559BDAF6F4C56D862C31ED9A55CA79860C1AEE80CF26214
-5B9B93517F0FEC475FA130F73682FA201230EDCEE6C5F1DB8C73B21F8CE6CA78
-73DA692889A66771DA94EBB0ADB9C6FE5305C8FC02E546E39856C58CB873B99F
-5CC26488402D139BD6B3574AA0C553E5E8A17FFA5B834D213729610091D8C8CC
-E81A41A4D5DD8B19D4B8D3CB3A870316F6114EC8C247DD55447F8CC88BD98AFE
-34F2019A282357F5BB508F7244E2190400D450E8926074D4269966020B1EB798
-C66ED53549CF9E7C3EF4349EDE7B9DC97331F32D93CF694BF7815D556DF580F7
-5B6E58EA3EC79BBE1703680AF47621948723B39466BA36D51C738DF998CD2B33
-8D58CE6C9D287AEF19DAE92A730955C4CD1BE79CBB82F73A6A99029E58373CD6
-CCBD8D3032C5CDDEAD9FF65FED8C15C8C0742294EB55256C1DBA45BA0014D415
-42970DB31BDF8447E405178C1C5EB09A9F2A24AD77A05851E3C1658E1BC348AC
-6B61D84A7DF50F14B21CFD85B3A7455B4BA42566A5D50024DC5A11A473EF65CD
-A938A86FEA73795CA0E6333891CB2338C6B4A4F614773EC4E705A1FD6C0479C8
-F89AC68DE87D86F3CEFC68FD088158283822DF2C3F52BEC168B89F701F8D51E5
-95CAA1C11753DC6553C9170516D38C247C241EE4EFC27CF78E3946A733C29209
-013658C0363E6485A267A5E470F7AC44FE508D1E7F6032176750C08BFB4FDE09
-D91146989BB98AE02E126058588215D7C73127981C79E96FE937A84BAD294030
-AA8936DD0DC36D805485B9775B11697270A2690C93172291399F54C1BE1EE4E6
-90947B89A4C657C8EEC26EE2FD33A419E891E8C5AD303FF87050363CCD7CBBEF
-E129462E88397A34C45EF602E706E94A3006A29104336A5AE24E0842460EE971
-DAB656E0A43ACE183A8FE5CA18F1828E80F833FC9498DD197AF6C97B740239AA
-40E2BA5CA3E34B94447EAB95A59DB6DEB16481188F816B37802A551E265FBCCB
-EBF2EA6644EFA5BBF004DDB1C06776C1C951673B19CA2BED8C6B3E4BA82EA70B
-80CECD2F1A90C2A087DE95180225079692E9C182156857B95A01EE7FA83C9103
-0D1A06B4D9C0A61F400A2932837E897D35F95479C6006305AED0A2BFF00378C7
-89C025413F8C680AEDB84AC6973B52B6C88539288C02AF0691BC163E0E4A9A44
-13DE955F5E63581B6DDA1D92E1CB5A400FEBD34C53314AF210A0083761BB6257
-BA63640589C5277A96834879212CCB263655C52A3EE63C93E4F316520EBB2394
-A37EA8B43FED95D3A08EC186ACF044D482E39C96D93B5C49569A13349EA196F2
-EAA3B736D9AA76ACF6BCE9C19948710A7988C70E6C16183F36E86F189911D0C7
-477A95E54346123753E95EC78A7E038F9A744F248C0A2633C5E06860C372FD3A
-21689B7A5B5E332C5A2A43EF3B272877D53E0E4CB5DADE3B94C6A74630B2BEB1
-2711CC0079EFFF73C34B4276E5550256E7F2DD18F61823EBD73B5C66A2F1A254
-F79B6D4E90328FCC4EB1D8101B2B20F19CF758C7BA6344B4136292E925CBB7F6
-765B685B60525D6DB5B7D783EB9B58C21BE4D0E2C92A768E6C706CB4AA059D1F
-BC5E29D3BBC9351D44B2D40CA49A4847121B2E17A813740E434B538CB2078507
-9D860955F246711918B5684E515AF85D4C7A47A55164D59A0BE6356C65EED299
-FD53BB475808043252FA87639855E0FB03B540EB4D75E6CE8F2319F748CA8583
-9B24AD0F6DA66217EF9F3203582779EE0E655C57BE7E520A988AD7BAF25E829B
-32452864D6ECE4F6DA85D7540E12E3B304ED80C3EF82138EA2629833FEFE0383
-0DCA1760959D785DD07188FC974230871B3316D4645092E12254342404A10619
-DA7A3F4E0B3B610F6A54D3A997043F282A64380F743BD5BAE237B207F8658FEB
-53330E641EB59D7CE4AED8446BA58461B59E6797BE90667D634B432ADF54E554
-4508155F73B2E4651329E560A84CD6A6361AA10A7814CCC87A23ADCFBEC30D59
-FF88B62DB938F5EE6CA50BECE47FF8BE4806C54A07FEC1D69ADF19C043D71E25
-38E1285F15B5E397D3DE373631D3F9B5B00C0CFBD0EEC93A0E85DC6D37034017
-4B9BA9EF8EE12232A1D8CEC4A27F1055C6EF169B5DFC77D04B250E69469D2FE9
-E4231B09C4FC7D05C4C1EA4B8DA599C506E91B736D58A2CDB85CF108685E0D0D
-EB287C15119E6261309ACE646C1B9E437FF9D4C91BBEFBC273C09DA95D4EFCC6
-30097765785DD8CEA73C93D21A82D5132ADA019B616FCF189204D0017CE6326A
-EA8341D6F45511F3B03C4D62596618443742D574C6580A2F8CB0ED450937ED2F
-EF6278FEFC481874DA116855204C91B778F3F9479602800CB3223170004EE929
-58F3D5D1801EC3C1024D7059D3ED4AA21D5AB764058ACDD6D31F338A84181014
-E1A16EF03A3037DD93A0FF41AAAE1D913F0C508BBA5D64B79E72EFC58CC49F4E
-610332BCAE318E3EAE0BDEB7FB781669915C17B645DE4D047C179C7B367204FF
-3D97E1114655A02F058E02482938ABD9B000F2C6FE840B1B78EE6976BBB84284
-2FDDD83BE83A4E43BFA8B6C1D6A4067497B735DAFDE4A917FCD5AD6CCEE3DCF0
-3A181EFB99E43245AD49E9AAFEC41FB29D1A1EA82A0C8414301027B012F72AAD
-1F3365038DDF183098C6AA01C94A5B138B416118162FF5ABA9036A6723C82166
-D0A6565189CDF78381916C84D1305E217EAD2A1CDA6BA60073DB298BE6B72F6C
-C1AB2DF7F5E94A7042FAD7F52A910E71F498707A07374FC83EEB07FB217E5687
-DE50141C3BD3ABA91FF0B83F0D7B6A0B2387DE7F1F142323343FC88B1A72E17B
-FAF4519FF7E43576F4BE914F834C4FEE6427706069B9FA6D5250CA9492113AD6
-ECFFD975D06AA674D10C236AE1C95C16CD09B03CFA79F2529F44480A046BA8CE
-5EFDC03F3ED17C06EAAC65AEEC71BEE15AF3A5B7FE96879061BD7293D557A97D
-86F16C7C0D3B1B78E522CCFE81EA5111B368E6212F9B8786FB41414A6E4E5C11
-3A74D2988C52998E6C9AA90356C79F14E4BAF689D0CD524BF632CC4F01EA1F28
-71DF4BEFC748C63E5AAF4E1FB04CD32827BEC33A525E4653B6A85F52043F613B
-0702D41C48F99D43A075739D5268C9B5E2B81711B496E381A99F31E639074DD4
-12439A6090F0C20A0262BEF4CC6FB64D73F838A91E759866A0A221C4889CE71D
-6FA48543C31DF2BB91A6A12B541A9273E9472B777F158EC15AED5855D69841DA
-4DF1EE32C92C37E8CA23C544EB0C8BBFB4B3189DC7F74C10929B96824218E5CF
-274F5B8B06EC236A525C4D1CAA1B9A8E9381833078A7330938582B35AAA475C8
-1C994E1E97DB2F96E0FDA19E54F20B3D70463CE9D658DA5B802182DCEC91586E
-49AEEBF58E785AFCF1D5AF982392BC15D8B33C5F2EF4C345E48543563FCF45E5
-06539920523CA33DE5B6A291307301F14C2AE5FD7B181F36B9200C63898A0B26
-C88A4693F14566F4CE82513F3FE9564815859F041C6258D9C7BAD6DED49A706F
-979CADFB3669F699A4F61A90DB34D86A644D65BA8EA93AC3AF8582F08756A71D
-20D5F316D2E4ECC359346C601E6B39E1BED36AF7F60D9904DC711895CD8116BD
-44AC5570EC33EE859CA4D84C158C3181A57085CEE1DCD23A66C7C0194FDB97AA
-547756A8CDE2B4346AC3B10D474364F792B35C891C7B8A70984B4C4D5D47B797
-0ACF7435CD6EFC14EC87D7589FD719A4FE01FBCC009B942E36F92DF6A9E94881
-E1267B7D461CAECFDB7AFAED9C24C9E51F0E336A3AAFEC4082D61D2DDAFD98EF
-42DA608D66471B481E89BE94C6EA43B2A9C87C2D5F93F2DC1969D2BF4A8E07C9
-E5C9C1608506FBE90AD17D6808CCA415A0904314EB01C959A3A586E0062A6E7D
-DC1D95736C28CCDC9DB3C4401E2119B380028C3FA5D422EB3664D2AF340D00AF
-EAC3C63F41C2F0140C2DBF21EDCDE28312BF85D02B7AFFCC0456F60C0C67404F
-E04EAA2C4FBFCB0AB9A2DC526F106C6B895A327733D2C1061B36D9E61B309948
-C47F447443654B05B2BA393D542F83823C0A5E9024BAADB331E55736EF13B9D9
-CAB4D0CF70A7C1A6E24FB33E7EA57717D186C0A342F7FCBD84A8886A76C38446
-C71FB75D9B6FE247A7D99FC82260A833D9395368F95331B90F70EFAF9F60E059
-EF53F745227C5BFB8C83E9023966A701C14C45ED5DF0EBD17B79DCE720DB3294
-48E7761DFDEA855AB61A8FC1A77108F3BEF2F33C8661B25F763E99527B47AFF6
-D5B35B711FD6117C2A45F1511211AED24DC09C7753D0A199AB7F48B25EE615E0
-A03A5F9C7227E264E7EBAF18CA64C08DFEC5BC445E503D70258EC974E1A97F0C
-C71FAC8A5EFECAC1EA117F4B6BA511DCBBA628A5FAFBB57A469A0D484E61E90C
-6CD49750467CC7320292BB1C36A9C4CFBDA3B8C151D489226FFBFA28AFDACF5B
-9086959CD8510AFB14735134C71571B3C9A7C059498A88388AF8C8306320B0DB
-395FD549217D1B3F43ECFCD1C0A43263BE3880BDB07B2206A82751759C4309D5
-87812C46EE7EBA4802039D843BDCC8AAA7855D9CB19EAAAF15C23CC8A4F4FD16
-05499F2AA67B8C7F298F17084157B38A60829BAFDBCD9C6DF46D64FA34C4FBC2
-CC8B87A5829B8CC665A16DC1F8829C11A93863C9E00383121BB12ED2634AC363
-78686BD89F74772CB3554404990411A5D1FA62685F5AF0FD658FADE9CF5A46D4
-C121BEBDEB171C06CAFB5E6E1AA688D957EFAFE1FCD3E023D03AB0B13C350949
-1503FCA0A4C6821FF3CFEE0EAFC6BF677181707C3911E328F963A9BD15B4F255
-F3AB083296022BC414C5386FF5FE07745513877290635346034C69D4BBE93331
-8067371B19F71491AFA1E45F55457BB66375DC8A459CE9F54100D11E721E2BB9
-B1492378906ECA9E5052EA4D094A85AA19BAFB2619D544430E52DA7DFCD7CD85
-224EA1E8AA154BFD1A41AD7105AFE2DDF60577AEFF38F9CC5F1CFAA3DDD84F7C
-5D8D8AAE015C65A556E04E410390BBA806AA33D8D838178F98886F908D8C1F4B
-5632250D5E81FDAD4244162618716408A2A728D9AAF6998FDBC1AA29E5C20286
-AA3A28163D2F3E94A8F60EE16AF592CE6D32BEB8313C9BCC2603FD8A2D8B27ED
-EE115425DA1377D15DE4FA8BF049831000F1B0FD29724AC055850AA071C7D43C
-BC9D2F9FA7426DB40B1B27078CD60B9421F3B9C5989AF8DF3488D8D91499355B
-C771D762AE15AF80079BC7E6964F02716CA09A87B0EA72AF0658B03DEA67DF37
-5454E183B9813C97C9123A22A81AAF7DA97590AEE38B966EE4AFC8DA71AA943D
-32AC83DF6D6E71E9C98B95A13E92FB4130A0024B716CDE33872530947B1A21A1
-14826165940F0B4D8F055C6A938892388B3E035E1533877A8773C14562D69D3B
-8A3E60F11A265C45AF3EE773F1CED0CCB9629D99F8690412DF829D466C55AC5C
-D1A9148CEAA34F5F4B6F17369DD9E041348923647BD5FE3B57E11FF8A9B42516
-25689CF0988421F8394A82AAB30C1ECB5E8EEC36F81ED8C5BA6BFA36B1DB1E54
-C31DB816683E3E933597BBBFFA1BA9421E7906D829767FABD1AAB482F75C99E3
-F8A21011DA33C5D8A190713CE7B8CCD958194CD6803F07AC67CC480B1833CEB1
-5C8107D23925DE4D1706A350626C9830740060D4DD24E2DFDB1FE89CFA3299B9
-6C9B0AC53D187CDCF4ADDD4B39F0E5903C2E8DE39D4642DF2EC6B4B1A7FEF419
-A8470C06304A3B554438C277395625FAE555992501D2E5BCC14760438DBB7E37
-6914B87AFEC86272DB379F8E0600B8044A6D917203CC916725FD65B0BEB5C6F0
-0A8E27F9C5BC606495215EF0BCC3C9694DD0363BA9A2CC27C6A67C270DFCBD17
-A576639FD20C240886808BBD24D7D7BD2DA1C657AC5801912B770D4C8762EADA
-3FAC32614CF6EE10A4ADE075A385EA9D505CAAE4ECE338E492A37D2148A1547A
-56D2E9A7D7FCC9DA8617848F0C75D2EC5215E7C5685FC576618D6A38681F4074
-03D88A5F95A45F0ABF57396C47E2DAC23EB32437AA755660B4E964E9C9A01C7E
-EE48BE8620D06930920B5CFB9FFC97632D5D08B7D449DD3630D5FB8FA258ADB4
-2E1ECD1F946126A77791022F4EC76A42298FEE9B37CF0452A1AAB9B4336FA91E
-87E893B9E52203ACFEFA5BDB12771721A430DA086F7B9A881C484D78F3F35E80
-0937C5D449EA36EFDAF71A3023E63F0408B1F293F94D1E98D965E3B783442554
-9E559FAD2B27DA30AA240E15F8EB9177261410FA27384CC4294BBAA6C6DC378D
-2EB456D8D362EE081D83D837DB9EB4CCB2598AD307552FC8E1656D7A41D9622E
-0CA07D5EBAB6AD78345CDDA2C509659126874C1325893B9ED1FF89EF4950BC18
-483524C2353F8203E154A913F42E67E64959FF4D8197A43F1EEC5FDA1DFA0F2A
-0E1B87EE45FD240AF797172FF27032E74942095898DB7E809355C1D708BD164E
-C0348C3FEB2B97CD54D4EE2E41F6F0296B9BB025E02B565D0E05743A68D2F624
-8437C5E6AD97A8B2438E33C02BEECCE7A4B94CDE3E9E70BD1AE4BEC4477D2CA8
-1392F02EFA318742D22DDBA8A68F68F5361E5539C6525D9254D8478D67F2082A
-B96B895A6008F2A9A1FCE057F28DF81F8F67981DD91789A53329EE5DE234B28F
-8CEC97B044E1DB76F3320C7CF18874453A15CB74FBEE02A2CA38364B00E60B63
-030B6DA914CDA4D7B696E405957E4BD4BC6A5FF06ADDDFEDDB211E054D871CA9
-F8FE5994FA3EA0C56CCB3A76FD120F1DB780E9D2D698E207861AD18A2885EFBF
-73E09AA99ED95A6678554060FD1538AC3769723728921138272EBBD4D6C5B135
-F6F0809C5A74C8044D36198BCBECD50909AABD0D93FD99FC5C8E8E0410F37462
-E83B28254AE083F6D5249FCABB482DA0292513ACF1995A33D26C5C775258307D
-9162D7918627E17C0D7CF1733A306ACF7373DC36958BB3256D055EBA3ED03BAF
-CE7CEC77ACB4B95E62D450F5BD534F775DAA2E71C631ECD368BFAB0C8693EDF1
-9AFCC237B4E5BFACEB61A7BA77DF89B705AEE2C773C17234D11D159CD0F74378
-78E3DE00110AA85C3D60E9EE8DF3EA58B487889AEEB59267DB415855EAFB864A
-4EDBACF110AA863C4044FE047374FD5E7AD1B332283800C0051B1A60D6961771
-CBD32912528FBC3237B22DDD1323CA3A15C7DC579783EF55DDD9250260D1484B
-E506E664D8397BD628335F4C6D2AC558AD7975D0D9F1246935BD75548629193E
-D4E099AF3C544B8D4B85338B83F59A1CC6CF5D09F29692B637BB17A9074A1CBD
-F063F95AED674456F3427149AB2FC896FFFB5AFDA16B577CC647773ACACB8E77
-15E37639D6CF89494F7385056898CEBFE4730822029F71AE176B24119B52DCD4
-0BEA99B317256360914CE3681ECBDD2BEE63ADE6D90E6834C1AB01F9140FB8AA
-E1D5E326C2326EBCBA858C8EF06C76629EF0EF21267576B23F52CD8FBB936DC0
-FA0571E0B37F245F7940E737DEA373BB29EFC33D8944AE5541E9A3048C1958C9
-A139577C82EF29B07204329CA4E89AF54BC5D6AF21231BB24B6E5BCC4066E0FA
-08F78E4570A2296CE5D81C8E4A53E101EECF2514BDA6F61A532F6E856B920956
-B6609FBC201C463D1EC905B0C99EFC5341E747C7D2378264C8E002A0DAD0C040
-C56DB0953FA8A477E5C6EF7499590A0644D4D3F6436313819C76F850F5A2F9A3
-7F72824DA4B4912B7AACE623065C45C6F33E67E46392D78AFD6C3C349780D0ED
-16BECCBCA6B355016EF4140E668D8766BB2E2F128EF7562F296E83480509433B
-B02807CD83E9A307904CA364B92897D685E810A55B7242FC78B8653A676A0503
-E7553639167C466C00CF6CB9C153986E197F29D0F7141EE5778A9182266EF4F0
-63E3E5BE8FF5FC7887B9BA5D178E0090CC0BF78E2C54E218D7A9745662C00DF2
-5288C00B3BA0FFCAE876EC33E2844AE309EDEB7632C2CCC9AE8AF6780048FFE5
-DFDCB8D3D68CDFCD702312C5340F881CE95CFD438653439008596E450CD450C4
-6ACDB4E4F0F98739480473A34123AB62301673AAF0355A170BECDC9FF0305546
-4132F53DA59593224FC1F8620A0F5F65C2C8EC5FC842046DC653452D17CC06FD
-E304AA3687478F40C8824FC99BD288A0F61DC8AA6FE064C6774D074656262FEC
-0AFE597CEB2B406590971D949FAD3D07CA4C9B39BD036EFE39B6D721F43F03BF
-0ADEB155803651CDB32B4638963AC2C194EBACFB1464DD507CFA970AAA3357DE
-3DBF0F5AFC3C733E01CF1EE5FAB6580F70933C0D5089F95420BCC6909C57DAEC
-6BCFA637CA8CCDB6B5B97C1565440F454023377BF8357FA16B0E8582EB674624
-608C2D9B3E3915D57164396948C6AFCB325CD01EB08741AEB6F56A0FC25D2EEA
-4F8A80373FA13B4C83A6B37CF1B1E30C7CEC6675656DFA9F53A97A4C1BFE09CF
-B7BD925C639CE81A6B00313E2497A9164A5BE5C0939D6184777FA86F1D32F96D
-EE469D1E1BDD611AB7C4F8B17ACE74EB1547356C06BF8E19AA60A17D70045119
-C653A1712FF86AB2AF1677EDA48A30025BE535874838DD29F90B7AF5C9366898
-68E9EDF998403B8D66C43814D74250D4F87EC1BA428E5E74928FCD8B56B28887
-C73EDC45485EA2433881E9C436045BC988109BF289B458DC4C61F9342D480C5C
-1D38182E4D2BD8D414F88189434C477D76AF59100E5613761C90A93B2F245144
-E8D94A807FB420C7457B7EB2F8ED42E20CF3129A097C7AE41BFBE4466779AC3D
-2FD93281A01073AAC35617F90D01F69871A802668F79DFDA152B9C636C3EB50A
-CEB5644FD45C1B84BFA89BC393D403832C12441ABAC0A648EB47F025D8F7137E
-E520D47E8E6B12D61DDF1F87EEBCB8272324567D172067D1F4453BD4533416B0
-39B5C3BAF812A494AE7B63E741BD3D404F24773C0364D8D99AB55C03C8065C24
-FBECC8AA80DB69F167478CABC30E9BB6AF07AD578A184BAE62D3EA05836F2741
-E77570D1C2BCB9DA1DA2D8E0389FDA5AB53A74AF87A7940A036355E7F6770363
-31A42693A4E1BCBAA0618659ABE69227133F80D84775A03BB5F4B20DD999A0B1
-B9F962306665EF7BF71132BCBF70B10642F2497BBBDE0A213FDE6E6E812130C9
-BD67C4857B42DD17F19B73B44B45150CC793182F00CE53000B779D56E939479F
-E6BF98F2A2CED7005AEA51DA6AEBFEA53D00C40626AC6EBF0E13D247D5B3A2EC
-95E07AC0B4B06EA994721B709E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR10
-%!PS-AdobeFont-1.1: CMR10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-readonly def
-/FontBBox{-251 -250 1009 969}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3901F92CC2EC9BC842
-5EE578CF06846C7078E026DFCB18AD4D78023652F0165DE17C183E43752132BB
-19F361414774D5C13AD718B01F47E61745009D823C3996FB208C3A9D4B4F116E
-4D38E56725461BBA1FE17CDC27CD99AC7D748CF7750CA2C6E1EC5E4746AC85F5
-E8274DA59750A144AD5AEBE6C9A7CE843BD6837FE2A88078124AA1A94EFC1C50
-B811EAEB2679AD57294AB13E45AEEB8C6EA105696E341E4C14ECF573EEBB83E6
-F9DE39BD6CC376158231CA2A83D91F721ABD116A40698F26610853E7FD075472
-ED40CCE32031FCFAE2737B412807F7C9E6494D0B73B7AB13AFD20D5219A71562
-12A7B57DD9965B15AFB38BEDA28D35D73282D4F1F9A15C4403B7C69C7E80DF54
-C112D7813F7271A5474438A7CC380735F029CFDF4C0C30C3901A7E30F8B3B017
-B1A663CC9481C79B903806F30AF37522828FD5DE3EC220C719B63A90FB3CE105
-3D5E0F56440F1657C4D99760B010A26A6B8411D2FC60C28C4E885AD14A379244
-841B408BEDC905276B7C9BE5BDFC5675334396F3715517D7A61C24BE35125DBD
-E1F7E59DABE44B1155B5AD46DB008CFEFC55199AA3C109B9E8CB20C27483AD63
-EEA01A4E84E7D17631144F1F24B4B1864047E1FFD3AAC17EF92DC3567F66DEDA
-A47A0A9B59F3703ABCD08C592C654013063F9274AEAEFB3AF08C60159D834495
-5CCB7AC6233F19424729A60D4DE89BC5FB4B356DA22701D9654B9FAB411D0711
-A09247F852E3FA20245D4E9064D92BAED7C23AD21A09AAF09F4BFD20FF0B2BB7
-6720E624EF9B6B8EE2FF020E0C2995E236C7C5E3BD9F43F044C0C90BA3BE9D40
-B3F3DB25345B0B79C8587ADA006002B3B87E1567F5A3441C9C9DD1E80E0AA709
-B2870C995AF82E7E8DA5AF8CEAB2F4C53024B03DDF03D49FDD4D8EC1E140DA30
-F013232C94E7DC014E8AE24C47F693295A0124678989968736287F3F240A48F4
-68D694921FD09304E96DDD0EF3D6ED2A5E7D1BCAEE720E9E26162321E7EEDAA4
-F60C46179849A7FF437E4E760DA618EC310BB373C79BDF77DBDB2C8DC3506454
-C84A084CD32A310A5B9C53D17183FF9348424C4703563E39C7E72EA1FF3E8CD6
-26AAD04AC26F5F3D82B0AFF6DFCE69CF6A2B80C851692A361A0373EC97C7670E
-75779E8ADAB55C5882E227B8A77EED0842FD8F64ECE33DAECDD125E99258ED86
-610A5B326ECD44E272FFC7CB7C5329508F288C0B56C64B2B88C3F90770A53DD9
-5AB6188061EF70A78857C498EB73E27E5C349682BF104F8B9C0ADE7BFDB8CF3E
-D777DF991172B17F90F5EB09E054B7847BBEA260E4ECA36ADA3E89BAA1CE0776
-793B2A8E9F6F85D92BE7C596A183E99F757D607D840182E8D2052A35AF7CE66D
-DB2F50CBD8D40A857F0A0284D2177F0162D2161DBBECF72D86D085E3F4BCCF13
-17D3317BF65C87B307FC6A857E58555736F46F957CEBFD08A04236A2E18C0C86
-3E55EF783469FF5C15C7CAE01CA054961E9359C243A41CBF210AA69ED2EE4134
-08021C295367D20A17872099262A0362DC364BD720BA2F61D28626FC1004435D
-7C2CB3309B41EADC1EBFB2F2E9ABDF6ABD6879DFE17F1F8D527E5CBA9CEC328E
-CCBDE7D2F10728C99D9B62DA34EDCC42AD0011F8369EF9498F79F46753073464
-7D7E8C362ED7105BA39D30FECFB8C281A4880C46AF32EF2FB81B5E3B24E8E01D
-5F173B88E7E1DF1D917796B4373197BB682985F2A4B9D588865BF2C1A7336819
-72A9E1EBCCDB25703E0089CC2CEFCB4024ED41EAB81E265B6F911F164CA24710
-7500D1B19385F7EDAA98BB29F72D96A277A62918DD18A5D1E87E1D7C966C2AAC
-A8CFCF26DE9EC9D60DBF8C5968204265CD68212517F8E43E6C665C0A7D2639AA
-D5655363127857A67A36EB7B60FE762D505D880B7998C4D1C583D0E609087881
-30183626EEA5C4E59889AD88E8C3DF79854671AA0C9D7666135B844130A9DD87
-E31FC8BF519F30B553D927C7A3B81B8D08D6BFBF3CFE97C0370CF838B67B01BC
-A9ABE1DCB0E9ED6A49A953C3950871DE0D7BA24839FCF0666F5583F639279597
-BF6649E453DAD403B59D44E211A67180FD36BA0B89D5E8F1B4B88F1F8DEC9DFB
-5B5225D1FC4ED7F9A0937F52798954E3D8E354CD0EDEE924B56EF95107BEA498
-24892CF3C814E031A331BF6A011D0697E885E4EABC364624385EBA0708024B7C
-BB0A6F8E326C0BB47DA80734A7C580BF611B8D71EC860569BBC5D18EC9A06ACB
-B3823A877420C9481A6CD8BD6152D68CF2C9625DCCA06BCE53A3BAF23FE934CE
-9149C2D2EB647CE66B286C13213B75740A9ED1CEA56C91
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI7
-%!PS-AdobeFont-1.1: CMMI7 1.100
-%%CreationDate: 1996 Jul 23 07:53:53
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 60 /less put
-dup 62 /greater put
-readonly def
-/FontBBox{0 -250 1171 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
-C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
-B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
-DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
-4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
-FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
-76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
-123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
-012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
-A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
-44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
-4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
-01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
-D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
-914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
-261BC634F64C9F8477CD51634BA648FC70F659C90DC042C0D6B68CD1DF36D615
-24F362B85A58D65A8E6DFD583EF9A79A428F2390A0B5398EEB78F4B5A89D9AD2
-A517E0361749554ABD6547072398FFDD863E40501C316F28FDDF8B550FF8D663
-9843D0BEA42289F85BD844891DB42EC7C51229D33EE7E83B1290404C799B8E8C
-889787CDC0C51802EA1E0C63E6DE20980D3DD206F05365BAFFC8480251B55F22
-604D59D4C2CA4A8F65FBEA5D588E362EDD7BCFE6BD5F7F11160EC61912C1C4B5
-7062193A966C338C5DA9A059FA5F4B7262C6A8973A5566FA024EA42C609AA587
-4BFB0F642737EC09D42F4D95C419C25F0008B625F00A1D0A10F2E8A45E4F497D
-DE1AF68967ECF18ECA3A2919A5769247B38AF39084D6328DB47A11606DDCF69D
-17D471D165C5161B04A01C6EED7F2B1427B82F6B6E50171F18E570EB5EDC1F45
-3212A2F1F202987D5F8A3F2841CB24F6190410D49B183421E6EB5F138B2F659B
-A0B18267721341C8EF7907B02EEBB82C3B3BA7E7FE89D4FA240CDE585FAC1C67
-966D3DCA80A1725D6C008082CFFFD1E42D98B17A63233F3E8F5F3ADF8A9CBE47
-070F851CD80D9860380DE9BDFD2E34A4AFD03149FA04BE68145344C4144EB69F
-70CC929D7014060AAEBD220CB3BFD6E9EEA23F2E213AF397CAD50CD982EDF759
-1F22420BACADA3550B974507E271332FD68415C27DF380AB387429C0758B7345
-548524
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX12
-%!PS-AdobeFont-1.1: CMBX12 1.0
-%%CreationDate: 1991 Aug 20 16:34:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX12) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX12 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 53 /five put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 89 /Y put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-53 -251 1139 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
-AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26
-7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF
-20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390
-B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D
-68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809
-D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E
-26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D
-F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26
-77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299
-BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E
-C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8
-30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5
-148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C
-E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D
-E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23
-337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598
-0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6
-472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E
-A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26
-331942DA18ADF89C5E79B969611C123465054D82CE579FD1C32CCAA23D807D6F
-D9F6442FB39EDDAB88C0D5DEF3A63CDAFF6666B37B26A65384593CE2BC57B431
-BA196A7B8C6514611D83AECEE76612E2DEC60E9F661AC23BC8C0124B56B6A702
-287B95F9FBB9C60868080FF3B0F4896DE5184F0DE05535EED24D6F001A3B4ACB
-3A2321B541464B2E998294CD57DF86CDFAAB088FE612B524C8C208976D45D6DE
-EF1FE97D5AC907C5C3F7503F6E8D6856C253B85563682BFA3FCA3CA2448D1BD9
-2DCC43578BABB343AAA7E8E58885920596ADFC972CD8383DE48DEE1F7E590BDA
-AB2464F3D91A002744C19275FA149EC5A01DF715A98F4A87948F78BD565CE88C
-97F58E8FAF5022206B77732231F759EE9EFC34EC66015D35315B10F36BCDDA54
-86804DA18B754CE39697902AA03F6D49E3FF5057FE4DEE12E9C985D395F64A57
-16F939E2A7C81D1A9AA36394FF95E1FD431FA6913CBE7F50692FE1B76CB4B266
-179A7F86D84CBDF2860789BF8EC89F6AF941B3E5BB5AE1BFB49D692AB221DAF2
-D73602AD328A345CD48DEB39EE2155DEFDC024218C36FBADDFC258EFC3F14406
-39D43410CDF82CBFDD6EA9DC6AE4E8D01AA0C01722FC5AF3EF577D1AE6702258
-821F259D914110B96AC19541D7942FEC05935A4B01A977B1C9B95843DE9DE0AC
-C14EC694A278C3E2E3F6C0EE6A90F3248A066808B8E6DB3B1FBC022E9DB435C7
-294A6FD65FE3BBBF1607475E1B41B3A97064CC583A546C7E66AE909FAA575372
-765300346821C8BF7A7154F387AF49DD7F746BF4422010D4711A33C4194CF3AC
-DC6C4E4FF9171274BD982925C2C4761F453C0F5A7F85EAD77C8D74F979E67074
-D47DA7519835E6409492C6F2F6A90983D511EDDD11C9E2E1FA20FC1EB970836C
-7F9F801792A9907F1DE4F0E927CA67C1CF065BBE185B7473CB0493EE58A39AA6
-E6D3BE6DC2BD00D4D7DBF7E5A1A8742B8BE0A067FE9903C4771C26FFA66BEA49
-412718CD449ADF85C7AF7D4AD7EFC5D1182BFE3FA99F2E5167231BEA5969EE84
-310C5FC47C911CB8BB95ED58BE1E482B40CEF32E9B25BA1BBA396D7AB322028D
-66EC4DA001741D4412B554239E82E46CDE723824C38259902F4ACF395BB3AD54
-B49642CED0FFB2CD57908194A24145687682317BDE902BC0259C4CD79CC402A4
-B13747951DC48D551D570CE5D37E96A05EDFB0B0FC7AEC7FEFEF7E03518895D6
-ACA21624CE3102DC11644486012393CD1B636F3570F74A43C42F01E0CA602381
-2078D1CDF6FFDE1BEC7FFA0AB0C8C06728224DB7319E182A82ECBC85D40F9FFE
-685999ACFE52AD5CF50B76BDE28CDC76A6908B415E214038EC58150038AC774F
-CD96B15A8457216DEAEF5E306C59ED46B3D048A510C2A2DC2CF211F3D8D95149
-28FFF8F4DA0B41FA58D9F9DED1E3EB18117178CD424FD533F442F369FD62BDF7
-F3086144A316A5F5CFD032AF54EF724B52B79AF8F397BE9900E9132F06C030E9
-3679615E6F5C5D31A39E924C0246FDA63EAF32D32C4C695318A8ADDB5764FF76
-20308ACCC29AA22494938C60F00CA86D5BCC84BEA46361501866F32BF3919C72
-8D188C4925DBE2531FBF68BB18E05D13ED2D41D776DBAA8CAE61F7053AFD8F88
-BA6E4947C0533C7889B3C922EDE668A83541403CAAF1BBE16EA4A915E2390287
-F5372EC1210172005DD7C87701AF94E0460992B8A97087BB028CECF737664C84
-1ECCDC8D5BA63B34F78F799DD961C901740A116B7DB5F47A4A81B658F5414725
-DC00BF4B812A120B7F9DFB8CDE639BAB256DD69FC7FC5F3890A8EB215728C33C
-B5D0A759C560D5B8A0D3B408E795E412F83328FDDFA92552E5D05BB5189356BB
-6CFA5B1CFE89C00E4F683A7B1E40B683C3477F43891A730E4445463CD7C60BCF
-6132ACBEC67A5252B122B7DC772B2AE58284D153C139D124B12AD4C96D611BEC
-DE75B99450C55C982A9F7A5D0AA9D63A9E24C2DC9DEB6DEE7A2ADD4919397E23
-0CCF22021788B091E01824C03DFB9955886C28FC6D47FB1AAE4277B2B34DD074
-D82E26C5FC4AF6440F12DCF508E510EDF3D8FAAA1000D71BE12F064C65149B4C
-83DBFD38905DAC2871CF6B657A17CA5E990D017B65383BAD2A537A2A9BA771E3
-28B68EDC8FE4B3A82989A6099E23938B47E35FEF91C8916ADA83C64534E264AE
-1B62919A3F1391F10CEF188DD769B6FABE3DCFE92F942797C346FC770C9496E0
-B3E029ACF7F51488B4A13E740E2100EACB1D52488133A2B44A696D3C45093E3F
-D13DE8B16042E4A83B45F1D9A88FC04E70FACD67AA862F6C8E17CB14309FB2D0
-55570939239FB717050D2F9A2CEA6F554CD483D4B372A1CC9636F2F3519D00A6
-F2FDA7D77E88DB8F391B00254A6E55A93ED906E9B934BA474965701C4C113ED0
-11A882B51BE7232FC3CBE36095F1481734035BD00261A45ED22E22DFF82B58D5
-00001512FC7278A2C04CAAC330A87DE0C675D9D1B7DE28F271AF3DC21CC447A6
-65E0370B728A3FFFF01C736D36204705F83C710ED5856F1DD88CD0E862E2E5E2
-B8521A9A77612037BCB90BD6E3FD370B3A2113A784F6ED66C138A4DFD36E8088
-EAE688AB914446E11274C1C30D53599237CEE22962266D8ACED01530F2D086FA
-E316365CE2C4D71B9B84DF09103D547739D0FE6903AC5D85E90CB3009C4C6C65
-124FB515F0485751CAC9B655990B7C99194FB157598FD3A90BBE61F86C3A206E
-32A249C308B06E9C15837561ECB0AE79952C897C047CF509916409D2B86B5DA6
-442E9224D7FFF1968D89076F27238B1438B9BB4BBD6D325331FA1ED160E606A4
-445276AA977713996CEBF378623C18FD2912B4B976CD1E15E479640CA40C1D2D
-C9A99BE56EA7D61AE00BB783B4EA7529F2337C33832A99864A46EE0411D76185
-126B9438C7C0440C5EE8A71611BF29E2064A37A2023C70E41C0494A3B61F5DE5
-458D930BE96340465296B6CC7FB8B96D98EB04F1B15ED244318D362C6244630E
-55882B234F98738A7D47E1A4E32341AED639DD70BE0292BC3219B87A17696A96
-ED3F4B5193BA0BE397009A2397CD8BF5CDB4DC2BA2BBED61196881579F61AF6B
-9D3EC04DC4FBE5DAB84117CF3BAC8D710A695086F7DA5C289BEDCE43DF3A1F3F
-C01B5D86B709AC8B6BCB7816F523EF75F238AAB4E89573EB6D20D3947D27E985
-FCD630E8BCC25E920E6A126330BE13408B8D22EBE2427A97C5E632D09F0A1DD3
-FE881979C93A586676B1C4B3C88D2F4AF379E51DC7CAC13344347A7063EFD845
-0A784C3350245E0ECC320040A53570CDC19FB69FCED5D3F5241F5D18D66FD3CE
-27D66FF0FCFA0A9C7076E8C6FEDB9942857AD4BE1FDA827BCFFD0E382C15BC1A
-7B476E9192B9E8DC95C1D22D988216DF3794755B3884D7013CD56B1C270358BF
-CF80BAEB2D968966A715B63C40B5C82E342A400223F18AC470896C7AFED625F2
-823AF4057213613F099991CE653B57D2F074903E8577CB16DB00B1797C936B70
-5CD1F3647AF43068D1B4C746152616614DE2F2BF2F377DA2B321C3C89EC01FF6
-9523F8210EC36DD78FC399E767371EB06EE2D38C351BC566981183DDCD9BA010
-58AD4A9AC600B74536CDAC5F5EE448AC2178280757F75DC2584356D9409C890F
-B68A5B59B5DDE1E052982238E0DE3E114FFB06DBB17AFFDA25F9AC39C476F484
-7153EEF61C29C8EA9B34AA5161DFAFFB669FE115E4A036517A2FBD7ED07BF059
-E7B82BBAE9FB4ED1EF6283C50C31198F36226755D3E22E6E7F6BE25BEE8C8FF3
-700D71BE25B7DCEEFCE426E92640C85F86B50140317B66CE4851FD94846F67DB
-1A17A9037785F8D713CC630AA25F0FC674641B2F7AE1540EC8D8EF880C4B34A3
-77FFD6256DE1ABDBA53747CDFC59BEA50611B41EEFA167EAE4AE2446EE7E155F
-206B2A29EF61A04BC957DEE0CD3F8F66D67327F376AAA4ED580C290D6ECD6FDB
-08AD3A4199D682E1351ED3B10EBB7A2B320A7DC8B4D9BCA029EC12812320633E
-DB7A1DD37B737633DD34FD4F9F796F76F86ED80AAA3F63BCE22EA6D41B21F0CB
-19405355CDABDC2FD59C99224BA24BAE05D2CEBF5401B5D011135B954671A1F0
-9BB55C7795FC6EE89DE1555E99F2A6EC6B8807B18BDF2D372041814636E1F695
-0E9CF606B460C7BB838A3C865723C270438FBA38ED2822B296C7734837F9D11F
-B10931A6508DDFAF696F41816B9067608E8BB2AB6ED4BA93B7F4E0EB45C02F06
-45F30E2A16728651499D26EDD06465FD1A3D3E25BB322CC1BEF8E86F407A35C3
-19366B5C5B36C49684B84C2589FB3F0E39FADBC2BCFB2E00F427FA294131F73E
-D5AEF4E779CB3AE30186FCEC25E901D362E20798B6062A1012F7D6CA1B0AF647
-C5E69873F3DC9675C8C97FD29FD4C9B027982FF47E62A6947AE7ACF9439C314B
-54D00B2506930D903A0AB423BC591E3A7D042613868A2B5AD2C3AF21A9944020
-45AD834181CAAD45293BED29C4ACB2F85BB07EFFCFF697F1E272BCBE6FB24D0F
-82A7CE7B986CEAE53FD4DB128EAE1AE5C622021E85F7036DAA213CCEB943D551
-66BA1C0FA934D29EFB332936EF6C29083A52EC8575A23819852B8CC66D8DE14A
-0899C6D4378EAA447284B65198E84BE4E0B1B81E6841529ADD2F09258618C155
-164B6B01F3DEF68BA8B598FC6C93677D03F3E472B0E28E41B758B88A0E57C078
-F32F4BB4B46632DA67F27312E84E30AB1C22063AF3BF6E39AE66340D936E02AA
-8973B46E12B993C551BBB162A1680A3131D5AB45BB4D7590F220CCD982A2BB6C
-E9D3A5C43B97CB06A3E56A3AC95C16FE432CEF81A302FC359AEE0646DB549957
-411ADFA396427F5E4C59D67B824A2F1F1BE10177432B22B42B41674215A6D620
-D6F267E4FE3E5589C6173B93CD3E8CDA18A503378213665391E36BA38F85340A
-108DE72EE423222BDFA5F04464300BFE163185890B04167303698F1BCAF85E2D
-114C3DBB20B07C56ED0ADDA202E9E3A67C2DF9E4846677CED6443DC3F371ABAA
-7FB0C5ACD27AE784F48AB59ACD34CEDAE846369D85E4DCC902EACE5367BDCA11
-70FC38F708E393FA3ED5E3B444132AF63B4A88EDE13C7D6E55DDC59406CE69FA
-8BBEAEAE3BCC02C49C1636D7A0EFB5C9387EA70FCBB27F9B5775E1CBC3922FD4
-8042D2B59986FE8841399D2E4D6C358F39DB164DC62825D3D74AA55B3906A74B
-EE3B065376ADE2A20C3C67C3186E12627EA7EB726BADD821C03FF5D4CDE3E800
-09D9C6454DB6A42F68ED8A9BC160BD9D54FE5FF381A058E611463F6D4BC69525
-A7CEB4B78954256A63941AE41183756010123CA696139A2D8FD3E5BC892E764C
-9F9D7FB8401158DF1B2112772C78B1BB24F67B0B8B1C4FE9F592D43D8B639943
-3CC26AAC5CE09363BFE76CFA0C6A44EFF885F0869BBEDFF882E4700C89AA96E6
-29749A7902B324043BE77FCC6D764FF3B76223AAEC915988E21745C8C23C2C9D
-FEDB693E7E4ABB4558C78596B8C8DE9625341EC5FD02A1DBC00822E8E790B1F4
-52012004D58414C8A292CCB8F5DDC879AA8E01AFA651C54CC77411D4480E1738
-63A3E43BE6588088684C8B84E3424AF586B9FB204352FC86C3ECA65F5A838634
-6B8E3AF9109B233F06BCE4A6CBF6C99E3E9AF5540C534781D3CD0B8F9F8AE465
-6CFA77AE02DFE91D0F9B98B3B7087A4CA5757654ECDB9B037BE8C66BFCBC865A
-EA813071AD7281D34A963A193935CD1050219A8EC7270675C9A1017AA338E568
-AA1672286A51ABA92F03AA96EBBF985B985DA3794EFC88EA69C93A46B69B3E3A
-98DDFA0040F77F11D9040A933E9A0DA010EB597F57FECDAB89FCD35971E59D12
-3A722E238B9A28FB9578853EACCA3AAE8102269243A758AC4C53B84A0863D881
-51D31E04A2D2A92B6131F5E0D3760FEB635C2ECD93319D2DCCED90AAF1E841A8
-48A5F38F8922CCEC7A971EC31D74B6AAF440E03D8922492485CAC2DEDB233154
-BC40909995C15573AF4C5A20870698ED9B74C02278B21C93948096DED79F814E
-5B7DF52E1F1CF73313161C6BFCABBDB40E94D7D60B35CA037E1063F62A46309A
-E8E335146F3E0148DCF5B33F67A14391767B33E34A02823C785750B635A213CD
-A84771D4B6D61FF7D65CFF7D990C9A6DCFF7D11F74C8778F3DB4B6E1A80DDFFC
-6087A122F11B607F3ED84CFB0BBA596DC7E06C34DCE7EF1486DE9B9B6B1F97EB
-82473DF29503E61FF937211780F33F85E1CB1D6AEDA5499D703CE7597A9D2034
-82B65AB54104066CB375EA62515045AC6F240566D15280071458DEF3F7C4CA9B
-7E13419B21607717611A61E969B53318F5CAC01FF9180E283D50534F933E1FB2
-4DA052C2F8577C613F4FA2E92F57FC3A1BE9E6F8BD4C122B038F72DDA904ABA7
-DD62A56AD97F9545E20F8151D778FBDF179A518CDB3EE2A57C102867738611F7
-7CC5DB44C2F1942457C6E7842245F068A714336606525F36221096590567E22B
-D1D2FDAC84D7E53E1263EB26514C72D22BBCDF3E290BCEAF0B61EC25EFFB88D1
-B983766CE346948965DE7E4DA2109C8CE13D2E0925B5D230087C9006952BC852
-9D5D577B60C7D083CD941EA249E7C4EA58A24CEAEA0533BE38D63A8C44722077
-16C163243B757B810D13CD45CB407AC574478A6874FDA05BDBB5908723442FF9
-FEEDF696E434669FA2961D36229DD64E434D0C016C2E48A399275CBA2D4A7B17
-8630115B762A02EBE280E76C107A3F52BA07E1C02367637FC439AA0F36E5A309
-A88ECBCC43621E13BA9D1412CF1DFD815B9090D4B5D5DF8EE00FD1A31DF4A6D3
-5DBED7C09E06A65DA835A8EF9A54E823AEBA6049B33A52AB7610FDEBACCA7CA7
-28D40B5BB9F19D3B910DC51B09D4F8BDB5027EED2BC79D9149DFEC627C8EB277
-E1B5BFB31D2D252BB664807A4127DF66E9C8A98235AEF263CE37E9398AF814F1
-BAE29A162061EF2BD03DAA16B16268A3334D8B92D700CFBDAD4D965C96DE39D0
-9268AA6A9D11C403FF3D170B2BFBEE5A8F805499F825AE5440B859760CB05D55
-493F024DD03785853984509B1AC437D4F20012FBC2BED50C5B3AA3326E3FB0C1
-2CA9B111F04931D5300CD276C936CCB7730A2031C58AC9F30F062741319094BD
-75EE0A75646A6A2CEA8730904E32315A708DDDE348AA7DC050C68491CCABFEA7
-72026223026934AFD00C7877A0FBE93F11CD49142CCCFCCE2F0FD18410E817B7
-D451CD0D799A2F5137CDC3727070FF522735A1A174DBBED299B5AF2A9502A8B7
-C399AE97658C675017826A329017E25367459C46CAC71CE7917D401F742AC058
-95687876C85705AA9DD6853DA74ACF0E00596ED1CC1B1513579EFECABC3FDD90
-5BFEE49316888B05C580263D86DCBC18F78BE58BED0DD64E455F7A88385F7883
-70DF1402A6DDB36FF93EDBC5A36062917D52633BBF165CA292A8558822C220E9
-11629D5B7FC13D0D0F9FFDD40815AE1203C2F58436C23A055C80B184D1A01287
-4ED651C118B560FBB1462689A3C340976600893B63ECDF14E5056F531C8CDFCE
-48341ADDBDA17522C0B9951D32D80DE0D4568B532722081FBD06A95BC8C86E80
-1B5CE483043CAB15F9EBF09B18678EEAA6D25A7AD6B224B84D7E16DC9EA927DB
-AD16D1487E2B861D70CEA5C81B424349BEBBFBBAE84A3461EA886A7958E17FC5
-F69727B328E1D079D0F98BBA1EED665630DBF99D2D535CAF87726A74980BEB92
-75975C55AEA05A57AA96F8010ED8B1E85F7A508108AABCBD0D3FE7D67D2F830B
-63B9E6E6290EA1B283563BD930724C4745A11DA7F75383B5EA1976BAD60818FC
-E66643106D468CC0689093E39691F03FA614658EB837305BAD24888995B06979
-0F28AE16FB00B081CF2776E42F336213B31811CEB57F4DBFB5A1C5EF045A4264
-07ACD3AFEEEBA8DF985A5F937BBD43D9F5F7B313F368587D15460A273F4A2ACF
-32C94935960580FD51B177714C23991E4D9991621E99D96E03B3403DDA3885D7
-E0A4D1F9DBA54BEA9B3DC7ED21FA8ED18C3858C861F730FBCF2FD8750BBB35E2
-A4CF9B7A7B769EE6EDFC4CDE0072D466CA61E8743FC0E2AF50719527FC9CC3FC
-4F1AF130E9204972DD045FAD6A836030040E3E769786FF967E5430AADA9F5BA7
-F4B2A78618FE4F2A8AE138F2977C10FC6FC3B57059DA43CC971439DC43C170CB
-B47DF3A939F6A3F4344721D08C2939771BA61608DE96E7218C4F2BB449D83EEB
-2120A71E1B6FE49F2137BCE29399BF8FE3D77158798E2433642B5AF8FA4AC080
-24870E05E5351C98EC7A0F1F15F0309DFD3F2DA976172989DC0BD3FF32627A33
-88CC2F25E30DDBB5F7595073E3B69967A4E7B138BE7EEEC8F6EE0A363053648F
-C3FD2C9B584308005BC660FFBEC8E370CCBCC28F78FF2908EF74AB735D414699
-5410A026150D7D4C18539DA13D7A28F1D04A27B9ADC533F7217829B71C954BB3
-122D0E9CA05EA13F8AD8777E1B6FAA948683AB2B4AD510352D8EA23FA6E6AAF9
-D06CBB874DCB0F77CCA88D280CAD0E97D4661A5BAC20C0612564AEF2DDEA37AD
-1E9E2703B9AFB83AF1CC4229A8A9CB50026068B46856DE04A0C94EBA584003EC
-966C471A340F061C15933AE02AAC4571C562960F2014B41E15F456584E2E188C
-F6E3ED15A19F324CC17B715A7A1926B2A6DE01329C99CB040B3F5A37BE1E5EF5
-2EA5E374D6AD7D0769FAC3D34A521B8EA85AC2A5422F4C309798AA803070DE46
-B86141D056068BA00A345E1408CB582CE10DB970351BF2F355F7D32DE5BAA3B8
-06F04CBA2C7DEA2A8E3FCA193A078CA52655F9146DA4303A228D773B02B4631A
-70FADA4F9548A5ACE58F7C907263ACF724FDE1E82F47A11AAE4C00ED75FAA7A0
-89858BABA114B41B3289F1A4BBC9BA4EAA02020813423C6BFA45C6C9D95C8193
-02CA0FF7B2FB0A1F5168DFDB385713F3D9F2715830F9764BC016C3CA5CAABBB1
-B704F3D7301FE8A961C8103361BCB3B40969A96A22F2744737B6ADA2ABDCAAB5
-1F3EAD524A3DFDE199A9D06E87729C520D312C1CA59B5878AFD9A5CBEFA907EE
-492576ECD05E6F51256174C41DD8A9F4646010609912BFA641FDD77A1966AB6D
-4C723A8A3BFA55C6ABB0F69D0C2F1C30BBA7E7BFE217F5B6E31CB6589D4E97F0
-FF3B9E6218181FCE7A0439A254543BBDA069014A70885960956AC81E3A450BF7
-53A59F124BA02A72D4201B46465762AE579C143F5EA943BC3D93173DC27FE678
-1F408F4EEEB177304984121508E970866BA4F6888D22D653F60143CD90AE67D4
-FD4054EF70162D5252D3370FCE13C0E0366E5614D65747A414AA42702CC7FA54
-C36B6E9143DF0835D5414F9EAFE6668B6EC7E772702918855E3969AAFC89C3F4
-29239EE9953CFF5848E8BC04FA9702E8E5344313F37C48B0B9E9315093018474
-637469D1850AF738517482692898987656F0CA14C3091CCD080C3FAEB02A0A73
-82CC4DA2E60AFAA299ABF5679FD5806D20B5A1BD85CB7E93389B6E63F8B365F0
-38573DD0CACCEE2EB713411057EA6CC5E0F4517395CED9165CAC183B8536EB1D
-B94621BF6ABE1CF0128FBE95E7051FEC47481AB391D7023340B66A1FF8CA4200
-E06D3E7121359BE9C63E04F1B32597D4C41108AD8C868A26CED06D7241C07527
-40D33023AFD4D3C264C9A583E3D5AFB9D3CAB0EB5BEAFD4F012E5F6BED0E55F5
-593D1E696C3F6606DDF2960A81561DF466A10406B296F686ECFAF51A5D017406
-DEC73D06EF5CA783EF3B4D03A8E4E37393B9356AEA788AEC5BDC16708D470F22
-4B4DA6A85F390D0B90906E81F46FC2A39852503B591051ABDDA88392BBE2D186
-3D1DD279A566B0A23FA937AF106FAD4B1AE6170DEAAB519F7CB6EDC352DA91D6
-30A30B70E3D4886C1BC6EACA9203FC21515D3706A115F9E2D430957ABDB077F6
-2AE94C9197A4B3BE6236392E96BE433C063AFBEE39B3EDCFF02D790F453DD372
-0065B24210F8589E864535CC3E6BC1E9967DEE1346272CD0116F4A56DDA67B81
-2ABE3826019A727100AC5CB358BF9DD26C7E2DC9F29B5F9FC9763FD5CA81621E
-BEFADFCC04846FAB053887E1566C239DAE3505E23104F6088B94083ACA1DA43C
-41992047DCC923D1C206816DFC3419E7902342BBBCE2005D9CB0E1785203CCA3
-07A545E26BD84AFD80083BD58F5D217EA190565DDC653124E43CC8C2827DBDE4
-B5217931BEAE4A6873CE50978247CD2E48BA8668B4B36B3A37A1EF08D3D19FBD
-32709F9F31EA4311F1DF393EBF1B876B3BF5047FFFFA7240CD41FE769318DC58
-1DF16A3A8ACCA24EB905AD1058335C893F420A41CFD8E56875A2144EEF25894C
-FE6A227FB6A856A043F9C4DC7E77A5762EB8C9F46E2E46CB9CC7260F893127BA
-D5D1A781DE7DED5CD7325BCC0AF99CE303B72BD83DF1D08FF4AEC50B15B50AD0
-A7757BE5D0A1AA1C50B78934FD24F518B4A17B62D27FFCD767F20254439ECD62
-3A247A5CB3C050DE0426D0D220CB3A98901056EC90C38EC7FC2D3BE08B6DEE5B
-F6F62177B3B5D080AE1E4D21FFEA92C87604B50FB4A16FD4EB3D28F08D1E330F
-64A83864CE1EE1F55428D7CD5E5D645EF4998D1EF6041624DA46BEBFA14A32C8
-5EF6D4FA176DADD6CB90E3340FE60B1FABAC2FD6EB3EEF4BFE923B6FE66ECCA9
-F63F813C9B37408BF89A94F0450F9F8DE6D671C8A95977735DDDDC275659A458
-B4D9F805909BB97DB7532ACCB1946B6D4CE2D878D910610AE6FBFAC6A1146838
-60E05FA48E463A52AB93D657FB35CDDD64606B44A4E6A360D036636903BE101D
-8BBAEA722F21543D9EC9A2F943AEFAFA93060C97CFB56AD6995172915DA2FDE0
-EC80C3E08287AAD52E4E2EF7FD257934F03461C4D00C7E1C686108E817532714
-6818FAF4BD40810EC9B8DFCBD0D9C2409ACBA8AB5DC8AC3E2A3B822E9091FDE9
-86836156CC7BF4390ED2742767D048C6D982898570AD7EFCF386EEDB5EC7CEB4
-3E00657F9990B2099F91F540943D1ADD9B6B0DB429D9FC57477BB7F7165C54EF
-BAB5188388BC8D2D54BD81F52005055408B4CBF5E590A043CF8142417787F6F3
-B76ACAC3F565AF3FDCE3366DABD0CF85F83061ADDD5E1BCFCE0CA486361D09DF
-B195F399E4216820861A2503D829A5328AFD24E7B7DDB9B23EB675DD9DBFA945
-9EFD9BCDBB36D37438F25307E99C683271CC4EB434A059EF26AFCB95176B4823
-811F93B036E708F3E6F2F2505BB0093ACBDF045A2262E81F1684E64A128E5A4B
-B499F2A1482406E9BBD4C3DCB546B679C676065972C80A18E82E5BA47539A496
-C7BE08E3C8A3A796CEC7D30A333EC870DA3A26C671D2BF55A87F696266CA0639
-AF8DB19068AF32943E8CC4158AB3528FDA63DE7B58E7E4532D7A0C62FA37ACAE
-1DC66844CB3D1C42C168713F2A6584B9DA5A11602B4AA1BA34B9494D7E18CE18
-6CA0A0FE80B9C564234DDD4627DEED8E9A0367A8262AFADFC10573D9D0686F0E
-AF8B7D849A8E826A2A0C14AB4807ECC7EBECEF411F0FB3A528BD2F8B109A722A
-6DA8AAFDE31164AFA47C68738B6B0ADF57D9710CEBDDD1D2DC13FC6F8378F8F2
-D269B9260669412AB6013B64CDFF68B20D0EE77956AC102285E6197C5ED7D001
-A2D6CA95BD572B8307053D3213763B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX7
-%!PS-AdobeFont-1.1: CMBX7 1.0
-%%CreationDate: 1991 Aug 20 16:35:49
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 51 /three put
-dup 58 /colon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 89 /Y put
-dup 90 /Z put
-dup 92 /quotedblleft put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-55 -250 1289 751}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
-B1805DA88AE375A04F3C90C160DE16F890E93B13B46BB2F4971D900BB550E53F
-EC6248832A83CF441B4851445885479839AFAA2903A27676E5FDBCD653467C5B
-6757DA1B722133018873A10B4FD9D710BBD9BE518D989B67DD4533F8702D640E
-B84C3CC2607748FBD7C4BC6DA98537C7A83BCDCD871BC342E318F22902994EA5
-8F5F698960BF55B6DD1ADBAA57D96E80D7C28E06447C5E0131B450234C39D332
-D6EBE6E76DD503B658866DF4DB6774597338B1DB90AC6C0ABAEBA29CE9656E89
-167D88958F3BF262133689AD41A5B9A90DF2838A221C5067B73066612A0FAD18
-6A3670B2A69D1731367C8335600294ABC365F383F983A8AB1E37C1C1804893F7
-DBF122DA9C3843D1715ACBEF92F28AECE850981251D1D25F13B0DE4320D26157
-D14147622A29E7E7F6A037AF34A0197D57AB2A9F7129001F7F636F3B07E0F12F
-D409D880B878EC8C911E3B1F24AE299AC56227FB9D6ECDDDC5F8DFCD18D8D0B1
-4BF4C36A2E36F69E7291A1A0F738ED27D586BAAE8C04E00D5B3C88316AD3374C
-5164218F5588EEDBF966055C55E9781D75B1D7B9C1A2FD2682E7CB88FA9C6889
-8C5510BD1964BB505CABF99F91C7110745DFBC4B8A2A15295320EAF27A97ED84
-C6E59474C2832859A5E2536E33893D90929D6D2585C73A6F3D305D728BD9838C
-EC5FFFE4A313350D2D25BCA2B4A67B628DF5A11CEA76A9FDC74DC5D2879999B0
-4BF7CFC2FC4FD0995E6E201353E5B9472105BFA252E2CCE8D95B6A5389B34FC2
-E61C6F4946A12563C86E60D3802FCA4F1C330C0EA48A47D633DCC16CB4C75800
-338C14F18731B6968385634D63ABCE86699A670F904A77946A019D30CDEC9379
-659165D57232605BC12B7E1E162E384AF1F4E462A05BFD9EAE7595658C3E14F6
-F654AF27CABC7D7A1E561EFDA8AA8590CC1F8AAD0323B30DA116954E2617B11B
-55078C2F1CB86A5202E7340AB106B2674DB4FE472D089987AAA2A967B088601C
-211C281185CC8DBBBE35146A7B294EAA65D01C66C0CBBBE2812372489DC02D28
-52B9CFFADBE226B4E32EAABCDC7BF251950730153586E69544A1F83AA1DE2C81
-24AA851DEAAFF6E9E835DF4D1F4F6D352503244EDD0868AC7234DB283B2931CC
-E7F03AB5DE14CE5F0D3B1C5EE41A9CC9F137C0B631D764AE9329809094B24B4F
-B07FBEC80CEB25FEDD10470BB25A09D4E208D12B36419E68F74ACD8F639C7593
-F64BF2510423DB77600E791827B7D34B64AA94AD04E9A9F6630CD3971CC391EB
-4B1C67F2DF1C883E101EF2433670E6C4BFD1472F935461F9B9574C61511D8606
-9D29CB8E5CB77EC885E05BF095603F1E0A4E4F7CABEFA2E50243751455E09D36
-9826D4BABD9157F7A0ECF4FCD13EC591CDB10C536E4F39EB583244ED733A46E9
-700B52E2C2786687608CFAB0507F3397FBCBA83F29A2D75962CEEDBD90C04F0E
-035CAD0AE0041F4492F1EE87B77D8DD879A94E803ACD2385B5B7273068DCD050
-FB4DC1B0070ECE76F1F7EEB57665977B166FA42EB5EA6BFE038D777E18060FEF
-405EF2A734F0D3D6459B7D4876E39CCA3B74520BFC85C7061A0883675E89471E
-4B46AF1E34F9F3580D03B130913B079E15B3F354CC5C07459D7A91B035A3E501
-0A2ABE4AFAE104608E1CF9C92A15F10ADEF57A50750E33A27EBBA6B6650DAF5B
-CF26B40F15625402B611B2620F024FCC36684AE5056F2EB7FF0C2D3B728DEA4E
-48CA52A44D59D4BC7D776DB1BF54089011FFC70FBF6BBEC2C049A01688B8FDE8
-2E40A5A65A7186A3ECBF7613D01A05FDCEFD30C9A275FEE9153AEEEDF3E1A54B
-623470D18656B0A6093A77114DE346587B39293E5C2D8380DCB61C159BF607F0
-D5227054B1B6082B2E07A0C99323B62FBBD79C2F6393E5CD1BD320A270A4FD77
-D26E0378C95042B487D32CCA7221163A678DDEE821CECB098A74DA45C4AEB9AD
-7C22576FF1E14BC94F44F9EA09C59B2B10C644CEC05774C0124146FF2FAA04BC
-6BFD57350B3792D7888B4EA6B9D8F9F9A529236E6CA760B2090C4AA9F88B09A6
-DDA55675082ECD05010EE74C35FB934134BF5DFA7C10A82A3A9BCC75B45DB8D4
-9CECEA849A680AC90E1AB4A543DE60F41E3F79CD934A633F27BCE5C6A626748F
-314B9F5EA5E1762563EC4DDDCE0BE4085D26CC4F9CBFC3BF901DCECDCFD0E557
-BE5744532459F667C4EE5BBE3E901B7786D9C527883ADAFDC29AD7EF03AA1C5E
-FDE67CE5B323BB912C362C4DFEA655ED5D9ABADD2A688E9E5D05301A7222F963
-840D56CA25B3AFB14FCDA10FF49AFE3A01DD7AF7AADEEF5463878678AD09058F
-DBE57209A5CA982A6F31244D3BF7905104A6664489190E8BAD3A393B39EE08AD
-0DD12D058EEA2BA7E79C0B6E320B1DD7D83CE80D222D8A01F6AEFD94B746A6E9
-BC6729385FAACE882E904D74EF72721552A8AA44A39C05C06E9F2EBCF55518A6
-6CC8432AF4F1D11338D0C332559DAD2A85E62379FAE3E7C18BFF9481A9FCFBA7
-7F53E1EC1C019E333F47B2B3551955DDFA1284193FFDE474263711C5ADE3523A
-14AE65FFCF4A2CB16849D5D409E290ACBDF65D0305DD3AD2D7973287184ACBEA
-1151D98E1BF146B42BDDAC4BB28D1C8B246F55F8EAEF0AEA0AFE49AF4B1B98D7
-8FC49DF5BC812AED4E81C7A4CFE3565D009894747E480BCAB13F5F8214D6E734
-DEE09B30848B18B8E7AFCD3B0EE132F237207E27457256DA12E1D5D4334DCB6F
-F3EEDF302185DA039C02332DBF73F235982FBDE05EC6B46247394BB32708419C
-16BF3BF846EAE3F8C28EA07C6AA97D767F2D773402EDA4902A682DD8A198B75E
-0768CBE9DEFE3C18C619238A05021B4D6E9847E5E7D249DFA13A08A3ECCD1870
-54B05F45279377ACC6D733F6F02083B7E466D2BD493935D29A1BBAA0A61E11A0
-EE822B79C6AFC22F0673FC142C90A4BFE2BECC0031330653AA9F29ECCF31ABBC
-ED5D631200EBEFBECFCE97A7C68635D339F74F78895ABAF5287169428F599632
-E8330900A00C3252B34DA8216BFFAF0D37C235C5CF86A367E32D92DFBCFFBFEE
-6E8E1E6640955E98C0314175A9353F64FD00715D06AB62CEE84DE13E1A8D2085
-0F15E911E4E1CDB63034EC0DC8898A4DA5B141E084307FD5D906501CD09BF37E
-48AA7FB22E13E7BB8FB42014A9F3B5CBD859BC098CD23132C0D84A734AA2613C
-0DF2EA41166A505C725DB1C723E0AFCE7151DB888567ADFDB1633D0C80919F71
-8CED38FF8355738B6E9819D6DBFE4F0AB47342B50A2C981303D34543EB0D5BE1
-244FE03B8B47C2CFC5686DE39533E2E85D080D30E0BACD7A0B978BB2C593386B
-AA7AE9F9B9D02661963D572878EE92AEC470624A5D43569508D859DBBF2A0444
-9751A0B9B22487E9F59961768A03F0C01D520C30A98BC73B385FF7E7990B6D06
-D9F1187D60B43E98C6B32CA1E86AE3108F2F22957C508100A27903C482B190A8
-6C5EED0EAAFC07DFEE76AAF9F7F70BC9A7A5030A65264A4E1DF358E0A4AED12C
-816B2809DB119E4138C69EEB4F5ECA8482A6003CB9B7929B9690C7E890A47FC3
-B58E7EFAA01DB490B856D4501B02494A9420F36ADC00043522E73A15A7DF0CA6
-F65480DFCE5E7AB94E4C1F1C94311DB5CE720218FA6F2E1BE38F684F66D5738D
-096A6FBDEB758A1CF8F462E2A9F955EEABC0586CB9341080EB9F570BCAEF8971
-59119BFC9B40F70859065E3C8A164F87284C91DFE624FA26A5F17EC4591EB9F0
-005E39B925110986A738E4ECCF77F9823F6B762EFBEB2ACD7E6A3E00B1D7CA01
-BDB371B4496A63560C5941F8414F65DE0A02ED7C96517FE9B57C8EA71186C4DB
-DCC1574A49216BDD6FDA823AF322C73588A391444A50153C6147790F6D0E2BA3
-E38354655BFAD767DC70C809C0A6892AD4D60E8A8638E84CF40596FB3A70299C
-61AB6C2102DEC9C32565C82A8482F9E75BA965965BAEE6F491DCCB42BFC29500
-DD0B698A298C66111E0504C21A46414C849A9BF3EC9D2FD649223C03BED33877
-A11C27471D9BF306552984717267F112E292DE72170917B17F6B39643AAA1537
-560335A18ADF293AC7720A598AE6C3920EA7BCC525543A24BC32DCF7780C829B
-568003A9B5AE7CD89A29611FC7D88FAAD8A7F9F2E3BF39D34AA05E5EB910CB43
-3BBCB04C034E7ED64696E0535C4A62F56B4204DB762B12F5D7AD3C1F88CD3087
-8DFAD79DF65C71260FE69971AB94A1DD7D3050BA1C91086B17F808181F29E9B5
-028BBCAAACE4C84AEB2E0C5BAD73CA275B386E92250D8C5E6FBECB93F181A5F5
-D8D0BFE8BC8EC2605827C45A8C5D78E00695D25BC780BC98AF78C71658FB8B86
-070ACD29BB8F4F12D7DB518C9C05B0433F9A908528C4BDC7C3C026C9B46B0154
-74445822DA79CD04D8FDA875885ACFB0338223EB7102D657119F57A7AA441F75
-6D1A11E189C14054A2C7D42B453AF8759A28BA172EF836A6753F864805C657D7
-04D1220D0518BE7DF59019FD7448829A9E919E7C2C557EF914C3528AEBFDEE83
-A9B29D28564294E68FEC0D7CA91E40097732C35FAD349F293CC9FE62F5BD890F
-5D432D351F67FD13B2A485ED880833745ED8D7DF54B6917961035BDEFD37F813
-65CB7FB7F78A5230B8DD8E5B10A770B80638AAC3839101BC5ED86A4F1A9BB112
-CACE57B43A1A4619254591CB8E9715050BF7B79972328D23490B70720465A3D2
-45B9EDCFB856CE5EC5A2E7F5D4894B085163C7F2FA8DB663EF80715F982479A8
-7ACB24CFF9A28D7BAA4CDC360AF5B235CB1202180AE8633BE32AD359B14E77B7
-D6201980A91D70BE7AFFBF786FE734F4A1CA2A7C717378DB3E17DB2CA241994B
-CD5C0687358166BD3A040CC4DEAC9BB59989FAB0883802F0C181842ED3C37822
-0DDE3D7DE5539F23585E881086D0AF4FE088EABB37ED000E1907135776634479
-CA2455126CF07CE8E785D4A0D2BD8ADF6616E633214E85C7AFC06C47DAF31612
-84BF89C67EDE466A9C36E2592EAD0CD6F69B9EC0CB2083A86AB792469B5F1C18
-FE31069EC3CE3373C02A29D49D630AA44E1B1F79783962F8C66E57C157994DBA
-2F1C052CDFC819171F16EE9897F06B7FEA82B6EA55F9CEC8ECA702D831C08C34
-408870FD7E6AC746D27D9C72C2FBC9A04797F1EEF221E2772609E69409A564EF
-C31315EA7C80E28BF099D06AEB9F3279A1DE121CC02B42897EDDA3FD8A4D339B
-461E06F08E2346CCA53F823044959D4E42785F4E07C1632722FA9234AEC21B07
-72F66E0035A6ED9F5AE725FB226D7A11112460848137E4A851EF81E4185C2BF5
-025E257FF6D23885ECE611BAA67995845E292620C31F2B81BF7EBE6D9869EB4B
-0F0F14107E99B57139D67F67F32C7CF402EF49052EEE2EA5D1EFD207C2A61815
-62392F93D3092D5C58D2A085B3D23A356A6F5CABD6CC31DC96F3D107F6B71DA0
-3FCAB827EB7B854D7D0AAB8A2C151B60B0DA7C6B1AC3C0B3B5D0A891CFB0EFE8
-872836BCAC8951479863B1346768BF464F77997203BB869CEA66AA93B8217360
-663D7AB83532D0F6941167BC340F48F9369E5798439DAE1176A8FF6189221678
-D6D4BCA2A36663C824623FAEEAB3662829D7824767E3D2D43BB500B9E9E929FA
-47ED8D6932049E402C9428839F7AA69AA4BB870DA07682DD85AB6B117E2999D4
-B3F4B3B7C42FE796D73F0AC74F6514BE5647129789A6F1C2F2998E49DD681C08
-2FDD79A19368D04BBC2EA7DB7E1EFF2EE711326999222863598FA12DD43CD357
-1597C8640B7509D35FBB70702A33E0F50C5035A902C4790166CC8B7BBD87BF5D
-95088420D5614561E03E1F63579AC6B6E9A98C90CF48BD67BED3C3911A135327
-F1F4203405D78AC22BAC926D8424B0245027AA5E33E263D38024123ACA595928
-6879CB22FD9523D5BA5680DBB053187B4B0A56CB02B6F59C76656E4ED1572602
-D3817887286B86F5C39904D2CDAB04EB419F1C60DACA09B5F4CB0D7C0D1D46F1
-9B8054DD492D7B8EC83E84C18F31E4F11119388A7EF4DA63F218295483C6E0DB
-C2EE15F792338FA28B0AE65655509BEF69D47138FD9C42E491FD30EA57716088
-EC8FB92BABDF5469E2915A3B4AD5462C4A16157FDA7D25626454FE1C9C42551B
-ACD615F6BBB8096C952AF34A133AD853E3DA7BC646F75DF3CFD324A6BF1E65B4
-3ADBA5BB8941152EAF57376ACC944DC686D6D4170B787F2B08ADA80A396CF890
-DCE5C494252DF0556787F5B42AE68B82DC904393BEB4D68847748F8F97CB6933
-6B8C49553F6E031B8B5CF0AD3348AB29C711A44D24CD8E862E2582207F234B22
-6D2EDCDFC51B9FF26D9A7126092081EF9E1DE73BD92529961A726902B2DA2382
-9403248240174BAB2A2F7E57522248338AB8ED7A51C6B1B4D85575368B869145
-66698E6EDBF15BBC4DB60C2134DAD1745F1161246882C22F493545482B872F20
-C8DD2746D46FE66E3DB5878101C56DBE7D3075779B5F6616F01CFBCBAEFF376A
-428255AFA67A60C4F2C5257CE451A7B800CE3B41C5C0F88E45701AEF55A819E3
-F720F3BBA579163DBD50B20CDAF057AE58D49545FB101E8D9CB6E927E82C9FE7
-63A9B4AE81E60F4BB9401FEF4515D14EA8DB8652A4B0EDC06BC30CC2D4579A44
-A8BFFDC164D1AEC0952CCE2721CF2F8FE30EC9B528B2F08B6375349CA845D15B
-A6FA0FC13CC3AAEF7E57FA668982945551BF738AF657F8FC57E9DE685E6827D7
-DD992F131A3305B7570F9D9BF9632C374BD2BA0DCD2119A879279DFF4846B76C
-B702FBDFBF8B8DD82A564E5E1DC485F254CB8754084E54F44EAF8A7CBFA60CE2
-0CB45858F261F849AFF1A4894E7996C882EA8D6E767365198556C06A9878AF2A
-291D2D5EF1651A9AFED1A05C1523A4716A2DC7DCD9F37F87975B407E8463B0DD
-F4F1F04E3D92B95BFFB5F753937C2665CB455FDADA4CBF59E4B901D7E26F891F
-45363612F740E74B046935829A9224F4D3662934BAFE9994DEA5E778C8931F32
-31A908F2E6484D29357B79138B12B1A17358B5823C3085E42647E743E5BF2249
-425B9DFFEB1EBF290D90361F21F7CE706BCB8D8367130B5EE9F99AEEE5174CA6
-A20BE4BA04243CB808E90FCBE39470F539829F3E7835FD77C2579CCD4740C8B7
-D6CDF0B808FAD7B83169AD6FAB56FB83935E2D5510D8AC1308CE176DF832AFE9
-F93220286B1E5CFD8203FEECA246805C6423281B90F084B8F8031E4BD512C7CD
-76D83BE165FAA68B9006003A6739919B2B918FEF1ACBE04280114513A07A03A6
-73CF7140C382D4FC3E375A8C1BD433D9A5565F611E20FE2E72301DBB61010AA0
-594CAF5923DB274A918F07F445BE7615516F8B65173D21841E0684408D42C1D9
-AB1EC1D8EAD97DC0FF312333B1C46DE5FC57289F9CD73DBCC648F73843A42431
-E11BC173F8886DD14060A0A27A6CEBF33787A780C417AA175FAC78EC78D991CA
-C51641C0A556BCBF911A7A5BF328BE6E0DFE9AE1DF428140C0291B58E14B2A16
-62F77B66B99B32E784EAB51E3C4A72EEC40332C41241F24217E2317B2EA4D1F4
-B80014F64833C6CAA787F62D681F38B7B33339875DD835EF4BD5C82917697573
-BDA861CEAF4BFB3FC156D2183457689B9103353F45AAD1536BDB46551CBCCDAE
-83A6D844DA1AF22E697FBE4AC312F09BF17269859C48F9ACCB0546A1ADB97887
-9EBA1B44CAAC9B472EBE03CDB9B7420E51BDD599D0C50247ED46F112B4207377
-59D6EBD144AA3B8B30A5AAC117D288B3244E6C4B8CB148E238F5E1DDD0E18139
-75DC4B417172196C9EC0B6250FC1270C138C54782B56B82AB2A9CA9F7FDBB145
-395A2B66A91566CF9ED0049B0A7777D0E8224A73ADCBE246B5B1694D70CB093A
-DC7462A97B705FBB790D624BCA64872B318F265DE2AB9A66D45E5F1E51C56F6E
-BCCB696C2F577E727DFB2EF433F68AFD742B631705FDE521DD2024785CBEB985
-D511DADCFFD7B32E8EDC894C8B8A168397F7190D77B85932E42F3F605D2B0AF7
-47E27ACCEB38FD269F93FCA362CEC0522098391D8368AF79797A9625B4BE7E98
-ED53E03B3956D4AD256CB0834489F2A2773A2580D9ED2F9F0F32051F19EE3FD5
-A9D542B9611A77584C9BC77E92C88CD40CB063D6CC1580116CFE9ED2A05CBCD7
-95046E346664161C90FF82E8EF485702F975D92707B1FE8667500D0770C84E07
-5FD9D7CF6D18B0867D8CD059B3A0148B2F77D6D01C871B7D82EE65B17C2B58AF
-1BE6D871BAB085F710CDE2D5B34F4F49197F43BF14E094914940C34E7C27EA32
-CC47E9473BDEB71A35D89577601A680BA41890F6BBB13E1A06BE4655D4BFD9D6
-770EF9ED32A049B937B9317A760D7CDF99D4648BF22BF8FB025B5165F0E6DC0E
-8634A8CB4E545D2A1EE2460C3C482995A8029CD532661096BBAEA9D1CF2E60C2
-C7FF62EE04B05E0409809BC19AE9F95A5372F836AADC219F5D7368C903C30972
-87E0AC348B2B48834815907821CA2DB0ADE998D1A10784AB8F801513AE91480C
-E1DE763026F99BA5E1916C69D067D2D9960ADEC23F6B4B8B648A8CB21B239F53
-82EFC5C7BAF1D5F5B391EBD7E4B94B3CB8983F3D907A95914F1CB7A9DEFDB48F
-7876E8D58E4C02286EE961AA349F23F229CE23AEEA10A76E01107195ABC9F0E9
-E7454C2BB51D9A596F653772FB8B265B6015DFE56FD74B592BFF66E29AEFA129
-F801CD3E57E18CDFC0AD7D2903BE7267CE9D62616AA8ACBDAFA14B1E78CF182E
-9E6E86AD041D112996E72A8ED9AD8BFE86EC94041323293FBD4FC9EFA3BE8DB1
-9263AD39DC46954C1D882B89DFFEDD52DA79753BD4B0E22BAB7CE533D3D48BC6
-448A4EF9AC63F358997C73D51F75E15C05B8AFBC1EFF4ED82257AD8B4B9BEC7D
-5C821EEF63FED9F3656DEC0CC0862633F4FBB055CC8A52369888A5331CFDC014
-5578825D7C39C58374A2A43EDC424A1164192B23D48F1D69224B318F9B7B8D04
-EA6102128D55ECEC44143A9C47AA9D47FD782914FC0BD8DD697036D8DE0728F8
-1EB380DFD1A49B929E1691CDD18AA57ABD992977FFA34D410EEB15F48F716EC6
-1B3375942D366397917472F142AC175629FF5AD33F428C09098833D172E683FB
-BB7C5E809706B19528C894AC9926919F700333CDEEFAB4105F34AE4B56352C8E
-2F4B8D85EE57972D39275A29433D800911289AC98A046C3D26929C387DC3FC61
-330B1ABF2F8F5E16602AB62C2CFD7D893D3AFB2B48A31FFBCF145E49C90F93A3
-7011E5268F098AA5F4F2DEB7EB4BA0ED4670896C489BDD2BCE8757661682A4B2
-041E23FBED350ADA3C5F12A290F4960EA283CBD7067CDD0B66FA25C9FBD5B828
-11999386B1141BDA3C8EA3EC6563BD9206DFD8402C4569BC626EDC17B769F81B
-6A662AABF2D02FC4BE1E9B80354C5103BA67AB9D226A30AFAECE0873BD668734
-624780E0E4436F700646C7780272551AF201CDE43EF67B4165924D9D1B1D2F59
-8B4B3AF6AE3CCB83CD6A6CE87B818AF51A83FDC208DAF2F215E04B30D3C98C55
-DFC6870714BEE7BBD3E2D6A785C9DDEBFDEC579896F5CD651B47F1580D7C402A
-E43658097C1090BA58B149F6B4EB239DF1C1E2E272F12F0F5C7CB4E0FDA5CA64
-8EED629FED19D0BDE8B8E36B1AB1A75730549FDBC23F46528800583161C92313
-3D4E8F4C27F3DDE1BC900F45180B6760F9ED518AD47830E365370BCC91ED1BA4
-2D7062C66531359107320D0814FE03581CCD043F005184668DACAE59598886A0
-8EAAFEE8404BC00605E0B991372218F44C6EECB9B6E5543ECF7F5E6B34597D84
-33784562DEA3813A910EC618236D8EFCE9F003E17BED988A2E285AABF2185AD8
-1F201554C8A0F913BCAFF44A6B66F882161E0540AA6ACB55A30B7E5527BF6A15
-82CE26D1E2BFF5DDDC2DB4A6DEEC934D0C7A0F887EF1CF0FCFB020E15A494D88
-2F0B645B7489ADE40CAA609E4462A6AF34A4B87461819EBAD14FFC97345DBA91
-3C584672A037A9295570E0E69840801650186202DF5BD62E63C2532A6DAAC7C3
-4D8B774F622E084FE898B012500ABD7C8B7DBAE482C64464C44E497E060F86C1
-5E6C1826E9DA4E72694D8189DDC1443A08FDC86E5AA8A536D9FD58E9DA5E4164
-8762E8B16A17715FB9D7814C098A9E0CEB06473C27AE0B50D263EC567DCC7D29
-D16240A6ABC1C2384AD51A511C7C34B0A4859355159C74D4575CA07A52C36158
-DE8E0767503EB4C17E4A37966ACDE8E9E54A48603D2E6389934E44594E21EDF8
-4E29BCB99A32D7C9B6B1AE973167ACFC25D470CBBF4CB7DE6BF9A2251AFDFAAB
-A23465190121193AD7AB702E3DE6A9A44F016DBE101F56ACE64D9748E38D0764
-2257FC0802A0EBD5C9F20BC0B1166DEC516DDCBFC4B4D171C9A057E02E24508B
-FDA3FF814A6BAEDAC8A4567DB6C62A28EAF58B46A57873FA48A877A4F48CCF2C
-5EBEA58CA1C6EF69DC9BA9EE6F0D6F17AF224A51B999B1FE2A359EA317611B84
-86D973B71100E349CCD368B92381383E35907F868CB8E03BFFF7AD711B875552
-7AB30F3DCF80124970519A50DFBAD3B7AE6B7035287BCDF03766A4F96A01B463
-A72081CB766060F5E04D2825A810F22A8410E61599BB01C41887A9273200FAA0
-BFBF455C23FF89C0CE27E3517E98418CA63F4BF6C662E707FE19BC786AE61B09
-321AC4C866B11977D9AEAFC7C3EF28F10D55EBFD0FCF18FB23EF51DDFAFC5040
-0B21FAC68AB187615BF693DE34820F3332C67881ABA427B9AEBA31C4B8C32DAC
-363BFE7835DDA983F77A6083A90194DCEEA253691A465E1801C1ADDE0AE4ADFC
-49E89A8D42453A813ECBFD2F0BC5CE3B91E941DDCEBE420C590E7B1CD1066677
-2822513EDA68CE6195B738ABF24957073FC2DC672F03DA7DB86B67CC6CE5BEA0
-3DE3168CCB410D22F1B1F4107ACE598624012665AD1FCE5094B05D53D7B311A8
-9F29B91678FBDE3A6940F61961E7E0FEF2289C26810635AF390D5BD63E164C8F
-FBED6FC0E823D9824E46646F2E45ADC588FFE13260943EF33D20C50B083D84E3
-96124BB2F3196A5A08DAF7D1BB1C1FF14B5776D0B3F18C76FB50BE4C868BC914
-662A549DFFDE49004F5CE0135C78FB35FA8AD82337E1C079E02AFB7484B36945
-6371396D7187DA295AC942880FA9D99823C89C9184AF63800E4DF1B179F9FAC9
-78C89F3E121D70440091F2D9AD538D3442422EE500FBD2A05CFCDA62C439398C
-316D96995C1293CA127AA68082C1D72A6BB2A3D458A7EEF05691D5BFD9A97B3A
-E359629796B1C9D95CB92230314377CB4C1BE04D2B3F2D78A39E5A28D8DA33D6
-E493A40D4F85873763FEE46EC48B0A4FC44DA5BFB010C09167AAC2A7D91CF33F
-24C6737571E0112AF55ED408230DB1352ED4EA13CCD9B1F0F2C5B52B103C1ACF
-52BE1310C6C67C9CF01F4B5304C1317F2884AE39D2C844110B9EC35F2D6BD0F0
-D933071476E0840C35D1A1C2AFE7FEB68AFA018A8F9891654D6F2B96587C28C1
-F7FCFCC869F9FAC03DF69D9CD98D3C216CCCFC68B1E3A4D332296CFBBC77ECE7
-1A900BBD688938AABEE489FA21F3EF2CA37939A671225224D6B13BA3C224EA37
-2BFFC1EE652473BA0EDB6F415E1163B5E758023B867F7F9628EA61D9D89AE3E9
-755C6D7C210BE6AA09640242A7F929FD5FE127392CF889A295DFF83C27E3FDB1
-B2A55169AF3D6590A4B705FA54B0D762B710B8A18BEFACB2F6A959AECCC34F9B
-055B786282217114A08C7EC3DC0DF458D6017EE954F7A432F11B390348663D77
-769BDB3FF7EF653A0526FA6B7AA01DABB072274CD7B586A84FB9DFB811BBFE69
-4E13BC74CDBE0729F4072A60F1DC7853167C7D8C14C8CBCEDFED13DD48721EE3
-1E4A70884AAC386F218141BD9D6B7E5219D1F96FAD0B1E0AE1A46C31911BF361
-E0901CB0FDC7C359652EEBED18FFF38858262D7BAB129EC0486EAB500E0CC924
-F1F4B0712A638A16274ABF203BD35D9969B67BDAB2F0F1A204BD4607B18E8219
-17BF429CD76801E83E165B0AFC1327B7959DE41A2985AD2BAF5FE0BC4AC8D5DA
-CB053F1BC7F4606B93AA70B7E7ED919F49D6AD8011DE8C591AEDE4A217516F07
-C5321870B293BB58767353077BA76D950097B0D0073AD6CD5F6A3A746AB91CF8
-E0C2A2D411F76FF18C8FF9BC343979C23EAE63E7A81254ECF1BD614213FE97CA
-92B936938EA217ABE32202FCE7A683392C0C1371B1D9A5BFEAA15D924C98F69C
-9CF43E04690BD24D049E38877FDF8A7D9A43F5E1EE3EB145DA9A809F42A65AEA
-DC709E60A7DA59CA3C2A357073336AFC4702522BC3A080DEBB8FAFD7CBD35A90
-EF8E5DD9ED15E48F33530F7192DC8C9CA0A435DF7CAFD44105411AA85CB7EED0
-E0F15DBD3AB44B9615231DF87171626C83D7390BA0894567617A5E5242773524
-CE3E5A5CFC264D3CCEC985FE938AC7E8409F5812126C1CA28343EF437AC78CB9
-C78746BCF238EAD81A2C175F677FBEDABF62B71FF988858B85FE8AA22BE50634
-67F6C72E30A4453B32882F0B154C09AE5960312BB2FDAF200739ED0545811A49
-69E943000952B17D1A3B05C50067B4CD2D3B66972180FCD311CF14AAA31B4ED1
-B1F917F746FEAEE68922329E0870D69E8A483A9ED059EEE4390ED874AA1E3AD9
-BCD9CA57924779B50697A2C286ED0BFFE503FCEB0E4E9311F14F12D956B51FA0
-A242BC726B36926D9CA810E3C30FA04FA098D826AE5D482470A1E0D854021238
-F6251599F4BB54ED5BD5C4A2797E46FFAB5ACE6FFD54C16B8EB1C9AB5D5BAFE8
-1F7A4D7ABC6F881D1EBBE96C74CFF2B9E0BEDA4B8944C7F4C19DC82CD75760DD
-D2736A76FB48ACEA0C233D3F6A4A799E3063F397BA57D03EBB82D9EED85C3181
-C5E4BB6763D9A7F3E1116523454D7DBDF7DF7C431F79E169F66752C897863394
-82E708AAA1B2CAD022FFD2C739F3E1DEA199C91CF2A68B58CF6E1438831484D4
-ADDFFCFD1C9E0EFAD7091687D19160E82CDBE169542099161ACAF02B268165D2
-39A1C7AB1ECAF2CB8B4B801EC221A886E9B6C684B1BF39F94C4E5566C3A99047
-1F193234A71FBE87D8609BEAC11C0F2C112635FA558BBECE42F6779BC8366166
-FD2D53F58AB6EB9E33003652A36EEBFAC4773BA8A3D445F89460CEA116C4FBC6
-EB9E7C7259D5F69746CB868D0ED66220A118C0B3CE4E2B22267E0D975277E4B2
-E72C3E5E36730188793D0DD284F98D874ED526056F2B4BB1DDD32E11D844193C
-89DC2BC6A8AC1115109B856A755CB66C297036302D1E6074027559DDE73032ED
-0517906763C7BD521BCB91569CD9AAC830FBC26C7003207EFF51A077743A8B38
-7F60734F94AE9DF227BF29C579284EF3A2477B6DE0AAC8AF6B1FA51B8E36514B
-CD365D8A61EED27627C448722C5B50E64A02D3F717AEB807CDA28A30ACBC7B48
-F9A932818996B60CE46A9C657C7CC0B4643211199623E1035C0C1A0AE52993F1
-FA6A6B13D2E999B22A7B1410A2BFB2FB13268B3E9323325CFD734FE9D416C814
-16817F1AD16AD8FD420203F7192AE9CBD18A4507E39CBF995F612E5F28ACE226
-05670B011506E1A3A39563FA60A6D3127B829BBC315619172EFB88F9C63CF266
-A90F50A2FCFB26EE9BB4520E7F5E652E7665A06351FE281FACCD0C9D8A482D9E
-EFC288DEED5A2D8ED7570BBABA85010801091C2F4B0A00DFD7F81CF7F88AAF10
-896300C8F17739BF0ECE11C74A32F133A63162A88AB6A7DB67FDBFEE061D9DD7
-1996446B52D08B938126C48D20A304B07EFDE7025268826BA2B35D42B999E04F
-9C7676CD51FA13D16197F03D18FC498A3DCFE4498F5C75457DEC8D78AE4D4700
-9FA458AE1B0DDFEF5A157DF48418AF8F4A60C6E410157A0A9F79CBC31B5D7F7E
-C38A545F7F3C9A3ABF3DE70EE943592E89A139C8FC3F9B7D760D5671B4D1771D
-EBADEB9AA2A29AA83A3184EFDE9F37FFCF3B9EA02F8A6A24B15E5B905CA50C2C
-D1DC1ED9CF5973E4D0935A6FF1DAC61044F4AB6B7A01ADA2EBBDFC4A5D808259
-762708A06CCEF4CD709330194CDDDC9E1BA5F613C70C8F45F5BB3B9AA2281EF7
-9DC85A6DA851BA1B000497F3558EFEC21136B1C19BF1252AE5DC4FB206E8F400
-163D791BA4BC8316ECCF259E898B1D01AD4062D9CCCA08AA204E254C75716DB0
-ACD48E85A19C44ADCE79E75A2E87F15ABB7876F7D6F389C56A81C4E128EC9982
-A734C2858CCA0EE263FDEDF6B3BA6AAE6AB442F144436680913A54396A3138A5
-A801A4AD4C7B57928E5DB7DB88B010174F3A74E52DCCBC74FD07CD2662FC5E79
-D0A336A54FE84DBD2CD40041C40641182D99D218CB6BD7C75B6973960619C7D5
-E8082CD6782E88C427E7A66CB9AA53722A098657DEB3A31CDFDA95577880B4E5
-C57DB71646B3D6DB47275252EFE0DF3BBCE70552A9889F5E1A1A289FE0B15E05
-
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 108 /l put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD932BAC455BF8775C27AEA6C73EED3EB2F8DB5E356AE27
-41B35C8AEFE73C4CD6A591AAE4F45762EBD6D3636C03F08C552BBFD0A13D11D5
-491F8369B4BAB8ED9D6F1DE7DB7AFD383986C4338D3AA71C9AF2B8A0955CFD86
-0345F16D9798B25156DDF826A7CB6A0CC4CB43078BEBD3E499DA95562A08EED9
-7CA27B7A0CE3FA7EBDAA87A6025D9475E08694A08C849D61903847DEE6A781D4
-6E8B2BCE73E5A8D0902FC0E90881531948E6007F6BDB3A02439ABD9CC44983F0
-8180646CCF67948BCDEBEC9520EA721D24D30C9700CF9789B880F9F3ED0D322B
-78548FBA7D0CF1A9B898B2AC7952653F4C505CBD88330EC4A5D245E284F8DEE6
-01283E96F76BF3D7452F8EF5AC05AF9259D10365CE52FE91C2065874BA057BFB
-9221BDD9138712C7CFB8CFB21AC264330A28CE321642806138E980A0550760B0
-2DF05BC74DDA1850C608EBC7EEC512D3B134EAF047E4F3A8321049DBAC94B6B5
-1EAE443BE5415E86978A7F79C780B7E3FEF356C58AE8BAB19D8BFED719358F80
-B9805059CD16428A6AE0AE7B7BBCFB9539A6DEE77FC03B331A108AE824CD5BC3
-4F4888E2EF2A65514F9FC6CEC8ADE64C441C89CD17D1D5917882DDCB7E110C12
-7B58C75757BBE2A3609C40B212E6E78FB6A6CA337BE2E31C8165A6AB72A76D62
-FF4F496A240D20B902FC19F968867B104E0653F3924DF9DA5D19207F1247277A
-42EE84ABFC9CA1B5C44C727F909932E328F079D21C7E6668E659678F57372ED6
-2F67000BA21E39EABF7EEE78F75F828A994BD0632D0DE65D89F95B900C127D08
-7C64132B93A3BDA1D9F31E7390906A1A11370F87989CB8C81FD1E0D3845496F6
-D1AF13DF88ADB3C35313FFF478C8421703AF70E1A418B8908B18239E60689421
-3CF85F804D1C3C73FB16934F622D3EB63B44C93AFD9EF2027818C8FCEB26AE56
-4C14E41063BFF3E6AC612899F3AA2B6F9B16A326893981BC78A36899F0F3B755
-ADF930ADC9CD1CCD12BED30C9D5422017986C4FEAB220D82318E7D33EDDC127E
-36C9904A23A28EAA8371A63FC88334234150A18317DCBF87ADE2414894B7C96A
-67497B5B22F803F6D2E20FEFB118294F780BF9C45AE07F7237C1A78F4664CFF8
-7ECE9E5FA9A64BB0DCE5DB07026505520B41D5A1D88A1C6CCD07A8D2BC5678A4
-2610B0D3CFF5DDF0F1022276492A154B9DA654E877034B695A9738D229CA097C
-EBF5F869F37B3F258C6F10DE9430523988EB864D9DDB28998B27C4B5726B59E2
-562455F5D80826EBCC111F58C506E5EC62D6424D05A74E0C9B08F554752092C3
-880F79F9DD9061EE8334B19A98191621465A0C2A54744A57AA2B58436E1A1AB1
-D2E6CB25E2DF67D8E30910ADB8AA66BA4ED6DC033A749B6C76D4B25CCD5AA4A3
-27F7A847C24A32F9576B206181F18D29F40836EF0371BF1F6C10F427F2D684D4
-8AA306C492542EFA658672DDB26FC4F3B8A137B4116019EF5B6DBE65C2F610A1
-1E2984A1ED0F8D00FB63EC6CA83D17AE2068A4F05124AD5467216A1785A37F06
-AA878E12DF849C77EF981EBA84200F9E8952904C943A65BC7D15C7545BC79FC3
-73C94F5D491EAB3F2EA8167F421270236A99480E3BA8E25F890A600BDBE1108C
-95D40CBD29FD1D9085BCB41F810E4FB80D90AFD637D4783CD6B6FAC069255EB2
-1B64B953F07BB3971D74DD3C6C0186AB4FD2C9BA83D24111BF64547A2CBD301C
-6951AF5675FF688EBBDF206D4F71E15688DA7C1F0B065B824FA33D4A5CB770D0
-C5240D6640C8B9528A6BBD77A306A7B8CD1649D91A516595B4A08B10062E07A4
-56B4A806D553F5DC76086C119DEE107C3D606ABF8E7F251ACA31086CDDD13A09
-DA0C251337E911C5D7C0221919376CF1E718233543837CB0B53D83B1FF297260
-37B32C922D0576B3C67C1AD9EEA0312AEFB24908F8B2E644975D65D94B1AEE65
-E448904068D1A044E5A5E1D95C8B39443E629076D98AAEE338C7D912B3716D8C
-9FB1BB650D99C7ABF670A2A9199F57F4ABC5B03A49764F4ACCE3F5580BACB54E
-A8E76BC1E7BB681C4388F99737AD7C048AF15EFC20ECC29F31F9D607F9ECF6B2
-7D85CA5100E35A9DFFBF16D0EFF4CCE0BB5437A4E9AF7DA9624358140D416B81
-3B6427038B37D7FB96692A426B3B5046537B7415563DC20367FC2E86C83A1955
-1CB2D39C0057F50C328240368B205F37A45D8F95529ECE1E5A2B504F5D6E464C
-0649217306544388E965C255AE7CC5E3D52F22271409ACBE2809BA286A62983C
-C3664714937A41A9E418EF09EDE75503D9D2FBE09182D8FF00790046538696D2
-002DA68251BC80E5EE3B0D880862E8A073A35A5C8C2E86C6B4AB367A216D2775
-86FB73C6530AF5E326A70050BEDC3C9F770DC732D9FDC3AF6D5F3D9F541BDF81
-564224DA4FE86E4F7A549A2B0B1496565E55D7877C6E25C3D980B2A9CD9FF3A3
-90A2148B8B03A0DFA8F9CBB4BC9782C52C8E401D0E77F28C44AC87608DF2EA21
-5A3E05999022D7A99301CC7DEAF40A7B2085AF6816D293CD0E532A9258511608
-D3955A6B2C86C4BBFE36A26A38A3385AE2EE45E631385852857FC9FF28EFDC98
-F3C5BDF4BD903712981C12A930323B0D3F2EBE08DAD3B9C790E8850C79CEF96F
-7B99DEE79BCD35AD82460056ACB98FC5E4F0522713062E61810B37F97D0516B1
-02AE59F0D06BAF969F3124FD63CC20C060BDBA068E3A3BD2B7463ADFDFC7E9B0
-1447AE9B86E1198779C4D4F1B22E32008C1EA78B6E3F605DB176025E704A50EC
-4F15868C5CC0E1EAF47F9D92F1BD3CD42297440941C2D1CC9501A9DD47FB263B
-F41BA73FE7E63A4F4859D8324DC806DC2CE56D039D02D1DE0462CA161A93296C
-EF3DFE9C0D222F7FC356627960FD9FDC0B0FCE1DCF693CF37BE3CE8E740C12DF
-F26DC251C4D2837A42C6D355BAEA2601EB9BB56801F06383B3E5080BB1AC1147
-4D40051EFF4DF9CAF47DF220E2E3B33E0EB922BD37AE326AD8D487CD70DE70F7
-FA19A008A5720F093A805DCF6324D950CBE4D57C67CBEDE642BE4A792E71E499
-511AB753EEDFD0908D0E74163629FA961298D52EDC3238C99CB3DD1D408B1C79
-DD395E93920B27D3E8AD65B14742E9C4E4A341BA55844ACD33CB6628E598A459
-A1052252DCE62DA4B535565571DAB7B58D68D14DAC5F524D270C8F6A8AF5DD89
-3FDF0068EC8BBD082B0F6EE7C7984C516DBE1D33A136971127828CE5F0A2A733
-0197B63A0884D55D5046D5161E29E15B30BD892D697796510B13C154CFB637E8
-ED8DE0354257BBBD31947A1BB7339AD5E9A864FAD1C724E2C2EC498001FDBF72
-09DF7C0C53F085B7F91E4F36D6755A64C6B58A57CD38A8A0B6444276ED6543D4
-09519625F13136B51CBB556E7D371920658DDD5081FAC9954D22DCF827A2109E
-594FE3173C97CAD4C1F14E4397A72D636EF95679539EBF6E9CBBF363AE7CD30D
-AB21AEDF9BB0DF8534D25138B7EF948D1698355329982DEBD0B2F6646ACE08F8
-79330D8E36F9C0BCD2633A4CBC92D6D071AED918F090C9BA719C72EFE158256A
-47B03A4201636606C12197BEF39F2B744E6B680EB2543263E18C2541DB918BD8
-CABC3E04506701726DB0A7C8B5FF980692922F123ABDA7AA6F8076025D5AE35C
-9420D1B1F24410F24A16BE625CE6D9DC9065CFADB39046C200954E359E071800
-C6B218BFC959A9C9242DAEFEB41891F2415F49E275D04723E42D58A297E5F1A7
-EDABD1B9A9D2B044A1CB0585EBD447C2BE6A2CB1DA5BCC998A492E243182162F
-187BA804B402866303D70829E5B79261FAE267398F40FF34F465D59AA5F34EA7
-266B05AA24FA69745F4668336CCC7000C74B86E3071DCCCC6B285564D1F45A1E
-7CFFCEF3C051864CB991F62C497807A7A08019BDD74F85D0DB2EBA
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR7
-%!PS-AdobeFont-1.1: CMR7 1.0
-%%CreationDate: 1991 Aug 20 16:39:21
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 15 /ffl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 56 /eight put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 61 /equal put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 91 /bracketleft put
-dup 92 /quotedblleft put
-dup 93 /bracketright put
-dup 94 /circumflex put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-27 -250 1122 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
-E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
-47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
-8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
-78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
-1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
-01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
-C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
-F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
-8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
-A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
-455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
-9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
-EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
-52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
-563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34E6F4C9A04BEEA891E
-4D22B39729EE4F0ECBF3CF3C429B3BB657DF66811D3A108A73513A22D252AEBA
-66664B33422FED0E63D93F9F8E24320719C09F50626EABAAE93F5649E1981AEC
-E8F19F6105EA978C51CBF54E94F3DBC93516313F00B281D1B8C8E4C1DB33363E
-B81B61D7224245842A6B98939F0ACF3ED081BFE7A813215D36CD6ABC3EBD6B99
-A5FAC5AA7A0DB126B0A1FB14B58525546D4D8BB6E95F803D6E48BADA30D5E152
-5C06B84B608E7C4743E7AAA2A52C10C39DD7406E1888D7B160C93EAEF4E55220
-E9218CF1892B3CF058E803AE0FF0681AFA7297AE4EBD71D49DCC12AD3BD4699A
-88C4816B6BF304C20873F9F9AE7163480B57CE3A811F3475F23DA9C6A400C1A5
-E21560F00DD3F66902F503F451FC4D697E57240D55B61D08970122A1ABF34D19
-DCBCAF7364E269974C430C7D2AB8741AE5F2C934DA0D0F105A181767E743DEF2
-04A9B7540D00E9C092667EFBFAC9AA7962AB1212FF4E58A480071225844CCD34
-88455EE9D68CA47CC9E819F190CB5AD7ED425CAE02C1B39E3583001F087CA89E
-33E6EBCF83845D42FC62D46B7D228BFF483937EA07F8772A65FFB274E0C0FD3E
-A7DADE69D04A8204BF65A7C85BB8F1BF06F3F30488B0BC37D7847C4753632A65
-E0928FD3918D3ADD1E777F595321382AA6A2CDE3D21195FB755FB302B9657B48
-F8BC3A7F4476E6CC29C8CA773C6C51CBD11C8CCA9113DED6EA5BC8AF705FE21C
-6A6681146FE7E2AF5B881C2A962A7CF9F14326DDEC715B9D0AD2D6B4963BB0D5
-F7D12C0432C52F9835F68908DA77D0467D3FBAD2E511E578E5F60E161BA3C54D
-38C315A7A950A8517F128493170EF43B357FB104355DEF18CCE4AD2C351ADF25
-AA0987C95B94EC07C71CB684EFB1389F9881813A3CC5A930C2D2F4ADB31C436F
-61CC5C1835DD22A7CAAAAD1FC4DC66CE4A0438159E05743F51B7E4E237771D81
-749F3AD0DC601499002766ECDAA8A36F5E8E7FCA0EDE1A200E7C828ABBCF9814
-5C7292627B587C13381AB2BEB0FDC3C038301D314F9CFC4290718DB06B9BF8CF
-725265C899837501F6F8F53FA62017E29BA856A1DC78F138F44597306C907227
-0F77F54049E5F402A5A1636CBEA7E6CD02EE1B50FF23E4A8F9D379ACA241E71D
-8F0E627052E2F4080A7B7E3F4899FF6FF70B756585429ACBBA205E68DD432EB9
-644D82A66063BAC3A3CA3CD99F0053B365136412DC6B4971143A06200BAA0388
-E148837793888ECEF814B21CE33EF8FD0C7B93587FEFF4B1E26D105ED9826A39
-19260305CD90F63C9A603B90FA0DD01ABB33294DC4085182688D585E23471677
-64BFAA5CF0AA2D6C87F1345F0DD630DFCF0C182A0450F4EFA170FAA7E2BC098E
-D0B157FB41E829BD9C407989736EDC282353E4443FA7BA430E5828DF210921BD
-D91B2F87F9FE4494D6A2D56E989AE6F55EE9763BA8646124A4BBE942B463D67A
-FBF305B4B0CFA0EB896994FBE0ED10FA6B92BBF74EFDC7E9EA6FB9B2D84BF9FF
-DA89B73220C1684BE7C0E64A251996F4F7CD2EA8A2BBE6498FD57B5917B34D95
-D54F3BBB381BDC31831DCA0F9F2D9304D6414DDBA9308FC4DEB528FEB6CB0B8A
-67DB01A4157E167736A68AB8FF7217AC70BCD6590920C64ECB8E08AD1DDCD5BE
-ECD2645179AC7F616BB49E235212A17530EA3C182DE56A77883583CE9C0AC482
-D4EFA2663F734C990A00D89270C4168AF73ACC83CE2B5A2BD0C94F8A624DBF80
-D33BF96ECB57E176E67A7CEB769E31E757FD6A642B8BA84599B62AAA47E5C5B9
-8E7743574566FFF4C2FA9BA16B8DAC2E403956FED5086152F63CB97A4BE5B692
-EF92796BADD4104339CC46150AED165A3CA9CCF93FE5A2D0DA5FC3977AECD496
-90B2F2D5C6CA939ECD2239B28F81FABA32626EC3F55C04CD2962D832BD9AFBFF
-0C08B516195E27717CE68FE9CF9D742638CBD4CF0B541C9FFB3491FE3118E2A2
-5DCDDF03859386F90FFB6BA26979DFABF3853B417C8C364BE5FF46AB9C6A51F6
-FE413F4BF54C4DAAE2BC0A7B68ED18A6D6192CAA2F770DD4F25A13D3CFB66315
-2423F4FB74312797B6DDB3E0DBA1A0BC7AC2F6E75B5AFD4C5BA311D5C5413F14
-4BA2E0CD516FE16650DC5558C771C98AD79ED7C7E493C6B4F961DE3564C1E7F8
-9423C82A30EF547357D1767C83DCA302BD5D93AAA10CA9808F025CB8ACF20480
-F19567EF239153F7C314B9248E6691C8D0256C9BEA3F25C99B9FF1ECCB3829B8
-4902D963A267ECDE988DF7C06E696AB0590A3BE1497E1A4C82C8484E3F18DAF2
-B39881A1195222E579428E057C4C116772FCF183496DBEBA48D6138559679FC2
-C2E0E3FE943AA1A395AF2D7A0241C442078D361F62E4A09B4B6CD1A1FA5B809F
-A54EEE10ED45BE999CBD8717F377A6558054F0CA87FABA43F974FEADDB9C5223
-452B8718EC2CC063F9DFB889F9A9FE727A7A6CEEDEE00A2606D1FE23F5CBE5FA
-2A2A9927E765B876E90CB5F9622267FCB4C98EC1A5602E744B83F57B877FC484
-E40626F7458AB95F5A796D59921D2B4800553A71AD7DFC785129358CDE5CB1A8
-2E64FADF5EFAD14009CAA471BC26282B622904E3138CEC71B5651849448B139E
-DAD26051917049D10414023758B77164EF644633B8AE4FBF64DECCB96198B540
-2BBD3F2E194114A9756B102E914BC2B197A506E2E3AED1892B2D6F1EAA5AAF74
-D41B63620E557D568AE7FFD609B2DF1E95544C3351B6D4446DCD273FE64EDF0D
-681C2462EAD09284614841D2D61B6DE93619730A7977A359ECDBF3D7C629800A
-415853D12518E3E366428A3535F31B4A796772E9E4C202C7213BB567F0C2CDB7
-01156807EA0AECFA22A8B688910018F745DB88FA1322EE14199DFEDEE353E306
-D5E7EC3C5A0E60F5328EB0D6655FD6ECAFFDF98D69218DEB9A1EFAF31A05E193
-5D5117F54924B029DF9511693B259424246C20B6EBFDA0E3D940BEDFAA4ABE03
-A9D4CE7EFA06FA02F329298CA9ECD1A0AAA8C16D86199DE317125C8F4E7EF759
-5F0FFAECCCB82469F154A6F4DBC0DEF5EE49284AC4274D23BA9AC851708BC19D
-AB914EAB462703C12017272A80AE0DF3E79B111B6C8169FADDAF655CB7DDED35
-CC7630AE1F5770F9656C43F74BE04BDC4BD3F5B34EA0226807849C648751543C
-C6EA619C3FCE17B23A2FD7D998D7AAFDAE280AC1FCD71068D905FE7CE4493C9E
-F976DB87ABD49791F6FAE9C9C80B1886DF7966F229334B57EEDC66B18C2045B0
-ABB6AA8678A5BD0A4E2172D1F8BE8781A39C1E5C5D90746243ECF9F644DFE3A0
-CC5D9C32C9E2F01BB81FBF3C408FD39566491F7FB24FC48EAB82DFCFD1CBC38E
-8A35DA138D3345025B03C6F48835CCD1287196C7740B7E111D734A366C942B05
-EE52BA5F5092D29E9333C9CF341466E2FB65F11D5644A0180DB1AA415B3E0215
-1C40FC26A874E5B9061E0FA7BE2638AE41328EABC218C7A4D558A3DC7A882481
-2201C843E449F8DDCB63C5FEE44400CA77901FEF9F0104FA4B25221DB1F590B7
-5451D4190B87BEB4D921FA2DE2668489BD120B2FA779A1B5BB1FF3F706126AFC
-7571B9A458B91E6F28EFDB7AD747349D451E01A3F31021223A86DE0389C1E940
-BA23FBAA862D9E14899A8430B08B7D7DC7E8BAD1C8DD4CA4E9782E16BD56C106
-EA51C0C24FFBD2FF322EDD06639FD6BD91174028B692451B270DB79090A6D7A7
-45C8498ECD4C2CA23714ACE8E5476D056ACE311212A4163F19907D9C1348029C
-95F94061B152E36E151EE97A63225DB1C672600F9436D00D2E395EDB299B321B
-967949A8D0DCF34D23243B29C33127C78874EC3DBC6A3205AC0E43EF43BDE522
-8C8D5BB1A70F026375474AB25625AC7C46757C070A058E2D20D0776431D40AB3
-30ABFB1AF648BD1E01F5B6609DB351F70BF2383F5DE5B02CBCE3E9613BFE4512
-2726D4FFA44C93BBFD5D6255171810FC7D20359C9BF61A6CD020C9C1C1DA5DD9
-D5A425A9D4C57A0BEEE5513004C95330F815EB0718DC38B3AB6124EE81D80B03
-FB840DF5EAA18C52F44832CE75CA11FB2AAD868CE1132805CFE191CB6D787FFC
-0429F3D2E254E99ED3B7F1A8CA07D160AE4769A5C4D3C9BC6238524F1CA44BA6
-9B63B6D73C3A7565D24D7F810ABC3F5A221D3A5FDD744D99E8A05582CBA2A977
-22136C3F5A729BECC9929EC3301398A8EC4B786A5C2F19A77F034FC28B868DBA
-8602FAFE1A1CD0E5DF258C5B6E5041D14736D7FE48BD79E937F322362FF2AF8A
-3A1CF1C4D01E2EF30F11D0B94AEA86B2116124F00C63D94A63B78D49BF932E25
-8EDCF447D77142935E4C3714E47508F68D4A34528B8EA7ED0B083643AA9C17CE
-ADC7A0CCADEFF1CB0C66A3F1BC3A7805AD08A7BD77528606BD4FD8D849BFC1ED
-249B9E9BCDB6AE0ABC292B5DE21E5D6B44B631E31B7D34C770E8AE5E1B14C28E
-8A061CF4E638E1C395F060A8223EBB56BF05AA15481162B2807F563FBF7570C3
-35AE24D1209C52619DB7E5AFAA950D2682D5D48478CC7366A74C7059AD9F6517
-3153B8732EC9DA41AC99F884014C67DA9325DD47EE9DF7DE982A3D778867FEBA
-0D1C8F01A1DD23A132A4E0CC8ECAC484E1105F5FDAFAB08571A30DE66E94EFA1
-E6F3CBC4CE371F68A804A52861998D8C25B5E6ADA917EF34051A5E9A949BA896
-28E857982B317DFFC5E337384C5F28E2277DB2762B694DE94F4160571D868142
-7DCC0474115BBFD8348432D73E28E83FFB35D7BCB719B266B45C39DCE5D0E62E
-29B6DB4895D090CD8AF563746CCF9C16FC22534A9BCC71E968DA9414E4337327
-03ABB8E5378BB7F4FA18FADB9FD41AC925FE497C356A26A79EC56938C597643E
-DC8D1EB9C5C893B992D1830A503755FB7F9AEB2A5CF07184C350A93DCCF92CA4
-63A60B90AA90732A3EB6A6C11C0CEDC10A08D8D43B1B9E28D046EB6158CFDF05
-73941B9EB41F05F81AC485CD944987F777487BFF43ECF058C819BEED85C860D7
-05126EAAD8E3B9D33D84FAB7887052E19A8F266E10F7F1354D463D4D4175146F
-7C7457BA1C47BCF077ECAF9016D34035A62AF91DECB9C2B9CFCA339A578F5B3F
-551FB7ACFF53E437B3E3C3C4CF486DDE4F8ABBC4C2402AD38923ED1830326FE7
-792A7C90605FFF779BB3827A005D0AC6BAE938AB4F87CA4A19B39696AAE8F92F
-83DB336183169CE59DD50FB9DA6CA4FBB96AB719EFEC21F4D061B10F324C0B38
-AF62ABBA76F1B4D4DA754B60925B9E8F9FA1BE62F1D91B45A54D5113D8A2F1C7
-8D5CF5D2C4E4E6740BC2EEFFBD752C8A59AB0935F8441A22C3635A3A53530FF9
-D79717CE6806581436A3D70680ED8F10672E4C73538F271CE936882BE4690E66
-2D5BEAAECDB9332B2C526524B9AF8CE75B385ADE74E1E4E6CD583D7D81C6C3F2
-90EE5C766A31FCD817805CDB12FCDE04C665D2247D4CEECF6BD4F47CEF4285DB
-D9C41196756F3851080B99CCD3DBDED23B783823A09E74A2F2459C14A1728D07
-4890C4CC97D33B3D2525481EDDE080388E072BE5861EBD1EA509126474B2F6E9
-ED3BB5D5BCB6B04F8159120846B8289DD5AD9CF5C2352F73884BC6BA5897CE41
-221CA0A80A2C9E253438673B6BE603688CB99A57F88CDC3A2AFD36F158E5A167
-E9809B59A8782BEE091E32B96DFDAF405CDB1E5EC180AEE6E7BF5D6AA89D62C7
-D6FEEE3FC009FBA286E7AC630384147B3CBDB2D4F046B197344559BCA7108486
-5C446B7A0EE718934890680905555B7E3F38CE455C44024ED6C593567F746532
-D25820C2807B520973E1F8355CE495D727930CFF48FACEACD5DC1F583759674B
-DA32D8EA3758D76A1C71B5A33D9331F1A365C00D834C840ED7906176DFA84AA0
-E5990BFA07496B80DD91B24CFF2E85BCB6166B415F8D90D81D03968FE0AB788D
-A46FF622E6AE14F67806C40B391ED74C92A39A3B14538E6ED0002D0E6680CE19
-F95AC92E836974258F101215E9E2FCAC33F026EB5726269AA0661DFEACF27286
-827B8876DFB65D9B3A70C1FFC0EB2058F1F3D9BA32A0DBD923488FB855B2274C
-E9077CB1D2013258F5E8DE5AD2E2841B9EED1A6CFD13F42EF4643CE6EF881967
-3AD7E03707C22F62C11019057B5E330FCF16593D25EC52C2A6AF763CDDABC3B9
-51469456F6A2C37E65C06BA6FDF1B0529006095404225633DD320A252BFF2056
-74D0E1922464D03F1790D71CACB50A809CEC34A5145F3DA6A5507851D21E4826
-9E7940AB8E4C49624C0243267BFD73ACD8F0CD439C2B5E4011901397773E7FF4
-BDFEBBE7602BFAFFF3EB724C5369F9329CBDAC5A17DDF702667094C691D2B4FC
-CCDE0F097FA9517441F76DBC8EC802B26E0C81546C878C1033689A4E13E51AFE
-7BFA521EA9616314DDDE2223391EEAA8EDF941792942A4AB398320D17723E543
-07054D4BC1B3D75DE4D82EB4DC3F92691EF465A60FFABEB310B6480840075E79
-57CB36DD91E3810CF9471DA8C4D074E4C66042129045BDA514CFA07470EAF6E5
-6C7D4A407D058C57F3EC570801F15869D1823FB81A779831DA8F43CC58637793
-6F98C18C517D0206F88BD46C8DFEEC2CFFC5929D59B9C5CAC4D223F758318540
-B2AFDD38DFA90AA36DBF5577BD2B5A27022824E727F5BB69AA4CDFDDEA22DC8D
-22B87149E8F47B957A650E8BBE7C4F1F57E2EA46C6DD7E05066A7FE5DB83128A
-2C90559F2625AEF38F4E3CE9C614232460CA06962AC0D206B383C2FB35431697
-40FCC094BFDE8DD27EC6FFCF490564FBC1A558AB294D285246F5D7CA33673C6A
-754BF6E10E13F3979CDBCC1AD38916BCF34C3D9E4558B6C7955AB7F662A0E9D1
-FFD8FAA601D3040AA86E055BEBE49B6647634BF8D32F14986286570A415C936C
-3D6AD9C29C21B15F0D73C14CD5D6273498DD4BB97E725A5E3C1522CCDA436D74
-F758BF23FCFAFEC18CE37EE5225AD3CA92C5DD95B6A60E0B348F21FE02F316BC
-1D500CAF87EC16054100449149668CAC2C0BB5467834B534DA92FA6ABDA77052
-C47B3E6083A900ACFE1E964470BF89C250E25AC232C668D9F36BE3ED7B7DA74A
-CEFAE3B68A0BF9634AB0DBFE15D7EA23CBEBFFF9357D7B5F7B5EF8A7F7C1E4FB
-F62703938A6ACDC08930F0F88B06FAB42DBE48FEB1A732A838B486B24D0AC2D1
-C1D43AACBF6D18FD5C88847CF0E37162627896189140896C1951A1D7BA4ED8EC
-79CFC58CFA58037A2B68C63A43022CCD7F94F212708EA5EB98A179BC28A8722C
-6E8552AF149184A30F843C5CAFF3726FB29E105167FBFACF5ADE9D54741252B7
-E548A6571CB1AA8B26E66D4AD989D69D1F5845F03270E39593AB93012ACFD276
-853F16371587EFA9078118FF416A7BEFA383A2B9E882D4DDF003186B53EEDAA0
-36ED13FC2752E03A15B7E0CF89BC740239C73C62DAF6F4259B21428B1A8F7507
-E6A3861210792248A4F5B44132F8FF2A2488DDA9B14BD15E08A341B9E53C3455
-61854F1A251B3E51C01ED0FD73CB926C7027EDCF7625EF3BDD64FB9CDC9BFAC7
-712333ABF2C5DB5344D79411CA8B0875A123B426D2988F6E230B3723F784FB18
-CA93DF81177BDFA5199FDC8832B192D14C46CE46A981CD3EF2DD5A564DC13C56
-FD65D6B01C7BEAD7FDAE927374CF0AEDF8D742FF4A5CEF273B23B0FEFF5B7028
-B3FDB2E378E7E83292C3887B28C4DE42A131382F75709C96FD10924E1EA53587
-A7D37B4384DDE8EA13F093AA5D5F6A154F4D95BF3CC3B2BB2D621A02296B36CD
-441F6C52D2659F1BD0DFB0DB36BB6F41D2F69B4CDD61A51E993D3BEAE97DF5AF
-71D600FA1C4FAB717F3C0B016E42C4342C92C89B4A91CD243B2E2062256BA9C6
-3CD6F745653242CCBF12B07E3CE3F04AC3EFE6E354E1EAD143FB5590A464DDF5
-FE0C4A26FEFAB9E1A8B87C289F3F0058E89897D4B9067128E89C52F0F71F719B
-332D37A820D3E57ED51EB884AD23BB5991170156162C41E8F4057B2D2683F6E6
-4A82342B684D4CE077C257F1EBAF7322F36DC4D2659DEBFC872FEFCEA2ED367D
-004578AB6DF641933B6CFCC6CBA82A6889BC795518CB8B3C865EA7FB33639E0C
-0DDA3711D18191862DB833782DEDAA1926912F58CA01FE4EFA2C36911359CE25
-BCAB28E865EA5536148EFDE3A4FB7BC5B5B8F426B666C1F716EAF793D8823491
-7EFDADB40A74F5CD46B8BB6AD15D9AA25F313D9D4A26088AC61D6BED91D1A5B3
-7875C511401CB9166B93C471187B36C423F7553B6097810D337BAC80566E62CB
-BEC9F98E3C28C0A80BD0548D14344EC89EB33395BD4BFC263F541436F0144A9D
-C2904709F4225D29925595088730F81C9536BA015305009A55542951A7EA05ED
-E83FD3E0F47901FD49B4A97F67ED76770C19A7DA58AB17752C83AB1A7B67A22A
-A3E631D4862F18A010B92F6D49D2847790BCC38875B585CDD7F8DCEEF2D7487F
-21AAADFFF430662E16A8EE62B6DF8927ABFB94BDF0B1F86737184BFEA4ACE8D3
-85FF57EA1C2BC69280787AACEBC789D1C2E7A84A2CAE48760F7EE6FF6F961F50
-DD804530208BC5286460AF322C2BF181E4CFF3182FBBA2C3ACEED09D6A0A30F5
-E10BC4D807D8B3E50C73219013D8E184B92655235AB541E93F88BEE4A145DCD8
-29059B9F3CB4A5A4E1077441410458F4AFC93992526EE36D5BF0A9F18B5D9EFE
-757D5124078C6D022E17EE89EDB5D745FD64DBAC7150D1A94257F64BC8A8A6D3
-13EAA25A03FF281A2E4A646CA91BFA412903C3362B109CD07335D6A004C75243
-A605E42E98E849A5067977F610FF7EBB3A5D64047CDDD41B6160735B3785EE74
-968BD18B5AC9E334122A2D0C0FBE4A308DE1FCEB07AB09857D66B45C39DCD5F5
-877C9E6CCE4ACCEE6D7B8B889D2711316CD52702FBF09268F7E093642C0A8EED
-C28F4BD9416951F098176814330834E3C4A9A6644CF8C5D4128A51CB477EBB39
-88B9475C1B11240E3A7313512EA118E125D7F898B0D0663683F75041903E12CD
-CE261B196E0D148EAA1CB128E2D90CD4BDE6E5C805E41BDA96F8832BE4BD10A5
-506F456264634BA14C8FC68BA20F1F9708A1560F416FC7E3AB5113894885C1F2
-04D9065702B76AC46820FC40FCDDB7FB2F0919122D6953B64D3FB0BB55C1D4EC
-EE9DEE2FBF7395DE366E540D61AC8BF5AEB3DD1593A3DE9806DA10F05072A523
-1BB6023DB909171EA47AFF9B92F9726AA727D85A7BB55C22B7FA53C2EBF47A17
-60A5496A2B8BBAF47D3BC64FD86C5A97DDC9187A1E20980D29629CC88F4B0240
-281C33DC019AAAB43DDC800C457E4948EB2CE51C2E70875477AE20EB7AE33F88
-2ED0060817A64D995CAD48DE5C7A946DB734CA9C9EB5BB71FAB66B33ED3EF35C
-A85069636F840904B3AE9BEB83D944CCA17A2F0A0CAFCE5A0E37E4F5884EE149
-9E4C098DEDF882DBEDFC9F2F9FE7CC3AB1332EFB9E4BB0D65E76540A2FDAD362
-50A9FFE91C895E6833AF1048AA3C3FA579DD0D4AFF5140C2BE5E20FB42629C7E
-FD394AD12749ACA37397DDDC65795B0ED8955A7FF5FBE2553E2BCC9B6A0D2A32
-95C3F20347FD12CE3A89AC7D5F3EF343DD0E3057D1DDFCCB2C491040BF2F64F2
-8711540ABB01202DF33529595E4EF59EF97991EC89841C39F06EBE620983F254
-1A752FFDB89A276B28B6D09C006AB5C779CF06EF5DF3B05F059A82F585FEF7AD
-13C16BCE9D2BD73F3F0B3D77AAE12A793027702A7FF98B4B7FD8679157C10F87
-FECE28638AF884E28BDCD5424F0CCE1F569ED798EA4F5AB5ABE2D1DF26F16686
-72F086E61E76CF9B2B345A30C3E9BB79FE1A573DD610A0CC804500FA370E05BC
-9698EDE7361E1C0B0BA3CF1E315BFAC67C6315DCAEF837AB43D55C1AAD094014
-08B3904C8E624A39FEDF277689C2EB428CB83F28ADBD7DC2FF219451B5B9E19E
-07AA0E09AF248E77546ED560293EE9CFD3E55439AF84AE98306F251116CDFF00
-A75B92D884848BF0DF694DB95D40F00EBBD77559A124931241A35364801D5135
-2DE8473BF1A3EF06AD9040BFABDB58F7E6DC4D7E0595C0AB5F3C32569F25D94C
-437ADBC21E2B8B1CED2EC10A2847F1D6EDF39466B6C3668B2B28869F573FFBB1
-0F5C24A9A238D10C9C2099F0A985AEC98779BF2A174449CEE218041D3DE49D3D
-87916F1A3D9647F0504ACF6F034D4D910B2B168F26E7A7A8D5EBC3AC28FEA423
-38E9781BF5E7E2A7107FF81DE2954734ECBA05524B901E42402C63F57404B73D
-CE81453185073B653CC3A40C9973377B7A86D68F1CC98EE062524884F9D9CDB7
-DD3E9921BF8490E3AF6C82E631E06985BAC77999BFF70F1CA11772C2AB47FA32
-68F28D625D84265937E0F0883A4FF3FA90F77B623CB95BBC1057287E380DF6D8
-F3E5A6033CD245BB35A47BFE1A5443A20C49F9CD13FDFF613DE06FF2A4E82618
-962C45438C9CCE27FA21756328385E95FC595901489BB8A7D280DFDF3140C95D
-DCBF3D272492BCD1361C4630F5C0F3914DFA64E1DA8C7F960941D28980208344
-96712D3FEA0EC13CBFFC2F551F7ED9CB6B1A01320851F640F5F427F2AF76D5FD
-62929BF71FEB9C55D02376087A430FC0E5F1E89414F1F44BFEE2DA8A7000CFA7
-978AB2BBB15F902C00A26E7D05B6C04D26390A914F344319A2A84F8A07EEC986
-6C1BEF79EBD651EE6C526E7569ACC9279F00EA6D22D31EA760B79253AB2E02D6
-05EB48883687F551BE0EE6C7CCB94AF615377A4B225295CC5DC7BB6BEACDD5DD
-E936717CDB1CE249FF9F714F4AD4087C0AF402AD6A17BB6008B65365DC9AF3AC
-50D1199D347BC6391FB9F6C40114FD4B4581642C288B22E3C343A8C819B477DE
-FAE2AA506003EA22AFF5ADF480284DFED7AA2B3A77573A7548544DC99FF42C1B
-362AD2A10ED5A70D6101E0FD107DDD55CB717130BA4960AE8B8C53ECA0AEB3B4
-179FC416C3A5D71FF0A313A0FB1C4B847AFF034EC98BAFC34B8E1287324E3707
-DC49F3EADC9BA68DD6A2F3147AF8D183815AE347B6F0F0F6A9A58107F4784A8D
-DC3A8B2D89FA4F8B52B9AD020E4FD8451DF943809912E16BDC63E20FC19F7A59
-210DD6CFEA601C26A1DCCCA9288DB29DD191658652330AD85E920D1C639579EA
-A08259DFA5C95EFA7D87FB51276E989652BDD037AC5F8A8045A768B443440C91
-B510C36A561264E227B8590C430AC3342D980A1D120FF01E4800775610826328
-F26FB6018101548AAA1F239A4D32B1593C33B96FCD069FCACE04A1C48CFFDFB7
-BC2DC6F6DFB33C637B6D11D721F85839AA093E4827FC8209538AAE4A8D885FA7
-9FBD55ACC990B13070464D85AC1B7CC41B7D7844FE1D129E49FF126B13FF6A74
-F0B2B42C19ACC661634A4A4E4483AECE30B9A134D5FBC22C76FAB5219B3CF701
-D212CC2B0425F78372FBFFC289D617CB389A8C553E0A45070FE94945EC523FCC
-B25264925DD7374BAF301D85B750CD9EB311C8867CED774DB0B55EC06F81CD67
-77467D5C5D2C94E80B95E6B89C60B3BB0CAFF9DAF3E9DD11CF74C3F14ED09E40
-A1196B85107C6A16A200C31FEDB33E69F532EFB32F2D41158EA3E99B3AB85A0A
-B0D44D11D536EA0322E189967906893B06B8B827592D3DBB3F13B5783B20CD6E
-E767292DF1A01BC0C8CD85FAF3C18D830BA617DFCE9586381B44A27FDF4A436C
-8B861F77004A8237CD4AF97605E40E91580DB0E360285FBB817217742CD0EA28
-20998EE8BF4680E8D2B3B9E8D6DF97D07A6EBE29A5827512D44F51C9F6A534A0
-571F9046FF26EB7CFC2A9B3D9204CB9B9717554A9D3925ACA7EB555077801DB2
-A90454B3EF000D983A7CFD3F9036650D36768F98076804E0081A575650BA1C07
-DC2F914184590FC6F155B9D6A658A3A4713BFEFFBB85C9835C344FD1D53DCEFD
-7867D59B8D02715B1FE9C72E3640D80E576757F705C961BA5DE91460EDAD0797
-7BB6448F6DF8963E1A348D5FECDB0A596650F19B178F7C068BDED8379C5CB807
-9C2CF81F1EF7C0831D7A7406E0A0400736C0D29DFAEFFB68D21B11735968FC32
-FAF971BFD73DDFD4AF00744D3129B7160860EEB502D6466047A58BDF3DF15529
-239B296321E9D792B72F6DD9BE5E476B2E07746883CF397CD24A6D8F6AFCBB50
-19738FF2AF4115398997D7849867C11FEF7CC533BD063DAA70704E2306A20976
-C6C9E945A35E4603848DC8622E95B6D034892E95988DFA955C60B0F39D7F6AE9
-374B74C80CE08D5B4BE42A50D19ACC0E02EFFBB8A66347FB4F255A93374C3A4D
-FECBBFFAFC1203D89972A54AD834F921C905064A85242105E14A057BC4794A45
-40E42B446377DCD8022B32B81A922CE5F0825305D9BE365604CE79A3E661078A
-9CB3099C40EAA2A4F0FDF4B9592F9F4F62B4BCF9E566943BE19427AF592C5985
-C55474E5A4C04F627D400EFADC307FC56409CEE145FBAFF64727B5A03601EEEB
-B709A18C588CC17F517FF47663EBC466D22DF67DD096E7D6D18A9625083BCB9F
-2235F22509788E523A29CE3B0E0766C2DED71D1FFC39A7E7EC800E636CE139CC
-54A1824A83B1C0D440CEC3C8DE158A7AC3907921A341A66BAD6C6C485DF894FA
-523AA95881949EA945CB6CA873B5FA5BC47B290396F29CB8E3909B76FC3D18F4
-4DFFCD06D4CF71B75F74EA6222CE8967CDA1BEB46CD55089A97E81D4EEE53807
-F9BCAA6EED32D13A791EF109A6E4FF24EB9B36247E6D95223A542D9DF56791ED
-2F6291B54B2F88AE0C83F10B7DADFFEFD307DEA0E560CA847D13003A3DD27D43
-8F7B9DD6154DE2F3405B1E58CED5A5D2F29D9E12B2DB91D899E9A5C99ADD5372
-662E518DB733E17F4615A3985166FB496925E65B03920C02E900BF4C52B589F5
-F9A89E9136519F91A3EC0CED6D2057965DCA18BB7294C17D5E89408CAFC92840
-752649AAD0C55365FEDF393AA428609186C22F350A07D13914D2523B37F8105A
-4F2193E3609881FD3F4A219E8BAA31B925B8FF5B5A1C31A1B8F2EDAB27E4878F
-915CD50301F187ED4A8B26FA6E8B5B0DE4B703BF9254E1DEAE6475F78053CD09
-5A7AD84A666BF58641DA88640ADD560584F81648F6052A40E8E5684B9C292855
-1C5A354C50D4D8FD923FBD556A80E5C3ED7CC83CDF28CCC8AC8FA49CAA17CFB3
-4852DB42D5C28A8D09E45BA955ED82B8CA2EDA805A993981EA74F9F61653E03D
-0AFD94C6081455B887EF5B5EB49D78A45C83E0A226D4304EBD2B6394DC51211B
-CF8AEF0FD4E02DB528B95CDE8510C40ABE86FB0C5589354C945BEF9A162ED59E
-055D2944582F986DCA15F51EA5A363A103F1446655A2EB56CB1C9135DA043048
-FF9DAC6C343E75F27994F74FABFA432C8671A206401C5DF01B70519AE5C1B269
-B7689BF2470AE7765279D1DAACAE7CB3349BC3B988C902E07CAAC63F56078BF3
-097F635700B588F0C0B870569F159D51B50BB05471C00F0948C479F22526E3D9
-A1293ADEE6C4F38379EDD23510F630A2319D36646DEE5A503C2ECAF7ACD712DE
-804FCAFCE247C81D4F933234EF60500FA644CCE8EC7E6CE2620CC48980347B77
-EE24F0B5D9F14C05128E7654B80C6C1ACC7E4D5F37E42B4217D70F0A82BDF25F
-55DDF51079FD8836153B04D4F9D1F372C6C478D178C1F584EC1ECE2D780F25DC
-B1837736E64010F208B67A82950818D0C33D46A56A928C1AC828EB3B64425E83
-2C460FB8F41ECD90EE18DFBA68D47B7D2D0734885154C9D4CCD62D12CF477A93
-E76783FA0D02CCF9EB72A9F7EE89413E18607EB043D3BE4D59453D301D077E07
-3661D24DBB7BD42EE38C95FDA23765332368E11FE937D621BB484E917FDDF2D9
-D27B2E442D371F4FF204D4010406023AC236E427E7304D43759B004EB8B4C9C6
-61ABB907A482BAAEC4D533675BF9B00907DD8F36FC8BC654FE8C49F7C4A064F3
-EF4587310221EF3F3A734F11886DA0486AEADCA6D2E517DFBF435CF5F1C05B77
-ADFDCC16B1E9EE3E0F6755CD53353570A49F7480E300A6B744F948655B43D875
-457A549D757257286E8D56A240BFD003C5479A85E4321AB8BDB19F9AFE41A4B7
-0380E31EEF209142F747E69F458934A749AF2A68B108D47C7479C54E235C2299
-6481BD51F075BBE91A88C807227B8C40F09EC7D7D7744C107D581326F6D31AA7
-B77650CBA84688218D4DA76C29B65D1A94193FAF92253F11301DF52677EC47BE
-5C4BACB13334CC882BB4CAD0ED0CF545AEDC9AD97B156DB743F8F37F9CD5B513
-0F311FF9DFDD99350267E5F0274A1D8B9F6CF330DB8E366BD118C342A2E6D2B3
-43FF36E5EC1ED2A07F32D96459731E9CB0D5D3FA29FA5030911E2AFE5116C2C2
-DA1E05A47789B08AE0C7A8DD48363FCC43CC1ED4483C33A49C2D8444220E2E04
-802100B94671FE20BE1E220302EA0F6143988D0BEE3332E1577DB253EB09DAAB
-86D1FCC7B631D32A0F268DE0EB980FF605BA2C6AA1767373E9EB61D1991A62E6
-7F0B93947B3A095943EFD35FF065A60636AE67B2D4A0DD1255513681A0A610B6
-EF260A9E8496C91ABCE77A4F12539B72F18B914E053A631CAE2E8DBE62EDA3B0
-C73268E5ECF4EC38B8CD78570AD0E2D0DDA8383805589C2881BA8869A72DC024
-F6A589D4CA1C0E882BF9C39821EBB446A24BDBA0D3EF95E4CC97CF1D080205D0
-FE11B3BC35531E6570CD21BFC262ADA097EAF485203D2D68E821A0C91A0C0972
-DB17C8F867618E72B47FE307E915D4B655E96077C9ACF7E778CBF23A61B54D90
-1A67037E0C7E0FBCD8571031CFC6A7E9D4465ACAAA7865A4F2930DA0A1502C2B
-6B5CE7714265E041E5BFAC0ED16F7668EB26EE21A118A15259111A3C52D704AC
-B111BB224A8CEE81E346B808AC8B8BFD4CA4A5112515E1BDD0D2B25D2DDBAABF
-EEEBB4A194BF71B2D54B7E516FC06A27D69E895CD35EE91FB844AA3B57C2C06E
-509FFDAC0269E6EAAE00A9306CA9B9DA4D198A979DB15DAF84DBD5200226F1F3
-792FBF476A7C1371A67494919DCBBC753E27575C367B1F8E8E9D6B7A17865EF6
-47AFC502C7246C8F36B8BD80E7CCB94FC9A4721326B80249078D572BB97FEFFD
-F8F0C953E914DF0845AD81999782B75B29779A46260270A5466FFA32CAEDAD67
-C9F867610C0324D029491F91A80A6FF6FD1FD746292B1A5E374198A734FEA0AC
-04DC481F4166BF66F2ABF2ACA39F18C622511DDC95571EC38BACB8C0A1EFEACA
-0AFDB11D62080D30BE8DCDD770E95DE9DBDB0BAB3CC27B2A3AADC4C67A75C214
-92CAC2C95100D8EA9ED8DD6E11FF18CB9D2D333AAFF860FE19CB1ECB8CFFB7B4
-E50D8F6A07F0DB82C6488A0F987F416E80063A8BA0800F57AEA0FCF35B4825F8
-8D98236AC8FDC007AA6CBAC764B162DFC878F9CA2FE5C6D055773713D3040822
-E6E43CA13304E8F58637C215432AD10493D2365952D86E0D03A2245A997F59DD
-114A8B4AF4ADFDEAFF8881A717B2088B4BB41E0586172179F3BFD20FA63FA80A
-8485EE5460FDEC972DBDE1B2E35CFA67CE4A8A6C10F6C9CA1CE07492BAC5392F
-AF86E6ED6E687DC2CD5F22CD9961D1423971574CFD9BC5A90446B82FBDD3D867
-26E4E4F31B3329B8A10BF17CF59656049AF978DF69F6EF333E30254461FAE586
-DBAF2D0800162849D5ABEB6AE938E1BAF6B37B1B12176BA429BE5AA534844B8E
-36205BECCE8161F783F02E1CDF05BCEECFCE0C1E04768CCAC5B0CB982C4DFF1D
-183659891F076681B8F2744745AF2AFACD100308D0CBF9411715F44A650EEDFF
-5729684D342BF7A8ED09DA89CC24046AC9EBA9DD98AC7C57E918CE01BFAA0483
-3FEC2A837BF7CFA68E3192997258B9DF780ABF413317C7DFBF185AD58A90654F
-0D8A455CC60C0778EE666BACA413E519DC3A9F198928ED16299B917A16AB00A7
-E443E611AD8E2B59BBA43B9F7DF38BB9D9EA244610C905CB83DA96413AFBFDE6
-2792267F82697A3565193334247AF5747C196233A56F28D41C84C3444A42035B
-38179D82EFA9042DEE33AA12C602C82670933B51F9C24EE1B8D96CC3D22F5281
-18970F62CF8E65CF4B5078DD6E8C0E39B93FF68FE89BC08944E11DB1E3F0BBB8
-1E619B90F80A1ABEAE3B1C2E1716DDFFA62523CC463FB38CBBC5F78340CA3FA6
-1F494E5ABDD38B2A6CF1D52F4A280219FCEDF375FF7BB670A269CC71B51CDD4F
-D84E850AAFF98C529F0784FFA7B9252DB7DFF8F37DEE51249C283BBF25DE9D21
-BB3D3ABD2E43F530135B3F074D400AACCAE51AFCEFAAB410C30EA3A1117AEC50
-7175220722BEDEA65FC75F231B22257BA7EAB092AB76B9DA6EB0D1B3429D7B07
-FC354CCEA0A2F73DD8C6CB551CE03485A4A327B869EE2696C805A3F69A04E762
-45A998A1C5B49E88B73B8C19BC1FDF83FF2A53B2293A61467525F8552CBF9B4A
-8D70B4299E960145CFCA20050F3B45E3F817A65403203BBFCE94F6B85CD2738C
-9509AE569BD7D62D53F9DF0D4637CDB2C4E89BE84A2C5D12C734238BA541B54D
-CAF47C74249D50963A8406CBA77EFFAD0017407AC6804AA0080A8AD493218E59
-425A85B155F3BEA8212C495C46F76656F2AB5B5062DCDF11F6EAE81BED67D7A0
-67C2A2CBF8B839904B8C37AA023E3E3D4C729219D98B51D6A2E519CB94534661
-CA709D121F11EC2B0F27DE8DF29E44E7C98459FD4C7828FF56FC6FCB5EC744EE
-3109B1C6E74091F5EF1FBCDD3AB344F78D5FF96C2316271C0CFBBF0595E2AA10
-6EDEE914004512B5DCCF4FB31A4C073B742473ECF602682E06F953AEF3360D58
-49AFAF9942AC307406945A95D08C82AA135CADB262E9D171106D54C6D951BC8F
-8FC0584D019D7D29E4A083E2911EE492681F9CFA94488CB563E6DDB1FCDF561C
-9B90EA2DD166E0CEAA90291D5F9AA0BCFC2490DD8452B7674238E9E866C47B06
-9A3EBF0FF9FBD55ED0AD2C33A1AAFFB45D7ED6420A8B397C56CB7F053D099F64
-414BBB019AE3AC9D3C1BA9AE43D63376D4979B762F34C5AA2B061EAA1AF7DBC6
-B9C5111242B6A29D3C8159E8B61D2A871E28484A944CAA57C83E28C25555AFBB
-6BDFB62B1385509A313DF0B34052AF2C7A4C8A6FCF0D6FCF4F6768EB50030D76
-06C928771D31839542AAE8026E67E1140894D3AA457EB21EC98F16783EDBE246
-37ABB138BD858A880FA1F87F8747CC97D1385339C7F726B4130DBE216F2672CE
-BFAC07888A1199F690A7746E3401BFBAF06527EAC103AB67BCA7E0801CC3B55A
-AFEA3716953A394596E57D4D2F17856ECBC0664C16201CEC9FE672BE276A2FF3
-B8EA055AAC28580FFD2E01CB19622E014F5B7D282A739B7869214F227246E12C
-52E9D21A19CF3763F197FD98962B1D7241A835CDB05FF0389E9A087695F92F6A
-41760B0CB0B3E7E70174DE52ECB01E990E72A910E3AD7444A7BE5E8D713D8860
-4C167E2247217DD9C767FFAABEFC51137AFCF93C70A6486FADEF221A296E8960
-F6AF171ECE801D5624DFE8B14D68B1084F608416D8495506AD7908FCC4D4102D
-468D75EA17DD0190AED982E01B80A90D376D5E853A1F26AF3F27F6D33CBF43E6
-94CDEE0EBBC899788C3E06BFC903F5E99D4F42B63FA20290BDA005B5E3664B59
-7BC8045F6628C32DD07CBAABF37E30395310A3F8E771F8F20A83EBF18002C049
-465ED8E1A798CF04570FA68E3AD82D77F86744641B997DBBD8EB717E0481BD82
-0EBFD8A1677F202B70B838FC43CA2B9EF366507B0C807A962C7A9253B82EDADC
-AAAF59ED8E5EB33DFC15B0CAD021D63F8AB45E598BB2BBA292799A41D2E2E8AE
-18E97794F466959B2D4D14875462210458FB4931C7CE7828653512DD6D61A396
-F20FD5B09F6EA48329EA9D7275112DE826F02876458639F5680B23292A519638
-9512C9508CA76D4A02D68EAED4218E969AEAD2CC3FA02561B22AD5EE1B04EC83
-F7832DD528F66D3CA96ED440455A13A9A58BA2F0C100012E5472E9C4FCECA5AB
-A74005F524C128894C0E22A6DAEBE96CBE3A07ED9A3655A09D0D6B6DC93B923C
-47ABD95CE2B6D19C5413E545E56A4E27D193D112921748F4280AD928AFAA42BC
-65292839A5F385975D570F0D1DD960A086B1B3784DFD4CD03B20458F6F96743E
-6BFBC708B9C776350430071118996E138FBEEA651A4FD20E52810E408B05CAB5
-C44320BE99D94727E480A5E24E55CEF080A8BCD85BD6A21D11007988A16BC204
-0B616D1886404A22E20758CB03E7DEA70F10BC72829E2C5713E05B006DCA8509
-FE997F530BBCD4BF8392428E2C64608FC749A896EA08B52B97B2C53BE17E1931
-9716DA6C7C18F797B1851C258D3C9372DEA22B08FD8A67FD7F9657B94DF1B25A
-844ED9906D9C52FB6B5FC0BC8BA360FC70B0CD4195C0CF9A871966A64E52692C
-2248818968507E441EF1038AB16C329BF95F428EED86F4A6E93BF6A7E18DBAB6
-1F5F2F5AB5160D87DF4880E69AFF7B7E7FD854152820A6573EB1ED95D1C2A7C1
-3A046339236FD39CA5C2E0A487455F4D70988E50FE3A65A09411C50020C54E4A
-C282D4DDCA62F9046D8E1BBDD741F80528D143603FAD39DDF9010D2246664D8E
-176B9142315DABA3E3E58061F8A5E84047302C85C69D4E15E79FE38B20708066
-F967D44D3A6457589ABE20482A9527C183185641469C4523D6F230E07647CF29
-E718793336272E77DC9D4BA3C90CA436250C3F7A0A4D4F375CE59CE4EC194CAE
-5BE89673DF273E5E11CDD2FC9EC7902BA45F6CBE9EE44BFFC062A9B4F2773B54
-713504453037881B39290D0D77C90E0C4B9A3BB28628CB210E9B419884636658
-FB1A47B7E59771830C14AB484D831155938E64D21E579DDA18F56F019A575818
-E6FC1E9051419F264A4AA984A485AECE8836C68D4AE6BDD037A4498FAE8B97F1
-67169BAA2BC619C2C6670063C6383A1FE0318A14CB8089E0563AA7469A4655CC
-2E842E2FD53230CD84AF03E266E9B6AF869F18997E0A94E2E4ADECDFE35D58DA
-0F2B1F5A2BC29A67730719FB00F71BE9E6DCECAC60E062255C6A1E61016FB50D
-3B4F8EE6F063F6A0453045BB564A9420A92F8CD287C9F93E91214FF8713C0662
-2467C81FD25173D90C189D74961608D7EACA0AD30A43BAD334FBD3A98CAD4424
-A89418B0A0BC3D18430D2ACB49077A7394CD85104DD27C19229B2228013D3048
-265CE0CA9656F52B96056B42D1BEAC71011D80304A24BEA088209417B4D653F5
-CF890BFBF71034613F49CAF5E6EEBFA0FFBDF52B021C7BC3ABCB659575E51556
-2388D24BF93123F80F2BE6C6CBDBF3E2ECAAD15CE9A6F7E5779144432C601722
-4CB077BBD4684D72950D3CFFAAF597A63FE4E561FA40BABF4E9E6A51E7CFC4A0
-003CE461B09DD4FE843E71903CA9CCF3AA77F646928F1A89E203691B9D4A1846
-F435E783E557ADA00D0C3C070E49146D9633FB2CE9805E30B8439F30227FEBE4
-6AE570FADD8829289C91E2519C921C36CD884E64BAB406C5173645B508E8360E
-50C0E861222CFAAC063F089A2EEF7081B8E3A961BE4699011F22DD8CECC8FE1E
-8F930336D22D6934C6A08291ADC1CAF6C7589B04AB8F65E6E7A73B306222E14B
-005FA67470D72532102A38F32CB8A47455FCB9151249E769623765B93419B0F7
-28DD23F25D719DE38203AE6AFED24B1CDEB175E49BD0D1BE8461BEC54B04046F
-B3E1C77F99CA3D1480748BF1F5C5356E53891235553310785A85C22032E34E41
-EAF6BD98334F58F784B5D4200D69FE047C7403EDE66E001F150B9D3EDCB8EE13
-7B70232A0B9F15D055937A3012C11C229622012DA9A36D2FA957F3BDBB6883A5
-B04142053D0E38B822269945ACB6D78A65C657388394C22E408E7028456DCBEC
-C0A973B60A893ED7233A1947D5111CFAE629C5F555198E2027A50DA665AD365F
-8242A2FD4257DE302CC107A7F2BB023C1FB3DEB0B277A76E103D27EF109DDED0
-E71F533ADB2A7EB46D61816AC6FD01688ED1BE85EE75DBDBC7F07119B310442F
-B5F60CE2BBE85AD6D01C07E0B7AEF5A960C61C6C0E15D303AF92E441DF6A2A19
-05785913F34C8E91891BA9046E07D05E863D0B2A9258005783BAAD33BDCBEEC6
-336BC1F189FE49A4943D15715229434AA5D6FEC98E2B6CC57203CA0BCFF9F0F9
-9682BD7F06F43646395D84ACEA48D443D2142D5B4F573BE4861DA121BD642FE4
-CE7F5C8DD1A71DBCB42CA27E6223140C329BBF60B123A1EFA3335555DDE7CE26
-539BB2EE50BBBADA900DFD1EA05FACE833924930BBAB4C247780D183896E9CC3
-A0AB37DF2ACD5A3A048D63CDBB93AD03AA99A994DBCBB2617BB2E8D45B862609
-A2551705A930FEBB53F3F588D969AE920E41FE0450EF63D0C22DE488038C0D07
-F878B35194C61EE40906994CBC8EB0D810191AC4E92C199DF21D0F760F2C3753
-8D8601765DD06E5CA8CDFBEA6AED8B766F3997FD8C479CF9C3A07143CE613A3C
-1BF879F8647A610FF5EA599647E497927ECAC4FE45389FD6A972C9A144CB00B9
-52DDEE40FEFC02A7708610CE164CEEEBEC5508578CE432B9E40F09BDC81293FE
-B1CF32E8283F5CA07A6F215FE0474D6FC3BF02703CEF85B000BAE1CFA2614457
-D37B1B1A4B99DE65CAAC080D2E914E41DDC7749FF401080A706242184C2B9E2B
-011CFD9C6D66BE270DFCAC4C6252B0509BD6F295A6BAFAF4BEC661DEF4CE1F8A
-13C642E68E5025F57C5F8A0D7DDF77995B83817EBC1619F002025BC45D06839C
-B720C94266FAC4EB6112E0534ACA6174B086C81C6C9D34238FF23822C7601543
-B81045F557155DA8733F274E016B1D0CC77081D15E14278AEDC86070BA57D0FC
-A639F0177D6F37E0686CB142315F502C19559C617BF270BB3A5E34C73FB16789
-14D52E64F990AF10BF91EA4D404813EF8169CB99E6F0C174917FE3C5A51D9B11
-B376A6E861BEFCFF7EA76C4419B0AAEB1FD203B80E04670AC90C10AEC21F9937
-324ECE1E31515D7B5EAEEBFF872795DE1774AB6C9C5813F56E8F145AE98B5A5E
-004E6194B19268B109387A0A193F937468792C75FDCA8EBFC045DA0858C0D8CB
-A18C254DF04201FB57F5781CAE3F3BEDE887B364C3338EC5E67B8FC8554194E1
-A0379658BA9A3CA1F846DA7D490D1FFC90B20E1F1FCA47AA6BD40B835C281625
-A86FDB0C946FA809110538B78B07BAF03BBA979F198A7A5B1DFC330CD828B328
-21D1B5F5B0727892118CE409257083B1D418AC568A9C8479DA800C73647C2A3B
-C2553514ECD615C4844FEC5A61CBEFD6FA1CEFD7BC35E57FC02C8B53532BD1A0
-3D18136EA94881B2373449A298FCC38184B7F91CFC558B5542791030132E0EA6
-D9093A44F8ACF920D282969C8FC5D30DC6E4EFD2DCC705E11809D3B98DE9163B
-778FC9A32272740E31B2062BB218D1FE31CA54C397BD13E800191E6BA77C3634
-F467B81FAD7247CA945C6C7150CD56E3EC2BF64A925EA3BAFB762584AE7055AA
-486C224A08473C85F1BDC4BBD0FFCFBFAA90D68D9A4BD62616360DA580E4E596
-B2D05A06361278377C3295C81487E28DFEE000DA276A95E1EAFA73C94630D948
-1A8BE5F649AD1E2041E15A85
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 40258431 52099146 1000 600 600 (gnus-refcard.dvi)
-@start /Fa 149[20 92[66 9[34 2[52{}4 58.1154 /CMSY7 rf
-/Fb 145[38 110[{}1 58.1154 /CMTI7 rf /Fc 134[50 3[53
-37 38 39 1[53 48 53 80 27 50 1[27 53 48 29 44 53 42 53
-46 8[72 99 2[66 53 2[65 2[91 57 1[49 36 4[73 69 68 72
-17[48 1[32 27 32[56 11[{}37 83.022 /CMBX10 rf /Fd 201[42
-42 42 42 42 42 49[{}6 83.022 /CMR10 rf /Fe 193[52 1[52
-60[{}2 58.1154 /CMMI7 rf /Ff 134[71 1[97 71 75 52 53
-55 1[75 67 75 112 37 2[37 1[67 1[61 75 60 1[65 13[75
-5[128 5[106 4[96 102 19[45 3[52 52 40[{}26 119.552 /CMBX12
-rf /Fg 133[33 40 40 54 40 42 29 30 31 40 42 38 42 62
-21 40 23 21 42 38 23 34 42 33 42 37 2[38 1[39 1[46 56
-2[56 57 52 42 56 56 51 56 58 71 45 58 39 28 58 59 47
-49 57 54 53 56 6[21 6[38 1[38 1[38 21 25 21 9[39 21[42
-44 11[{}62 58.1154 /CMBX7 rf /Fh 134[31 2[31 31 31 31
-31 1[31 31 31 1[31 2[31 1[31 1[31 31 31 1[31 51[31 45[{}17
-58.1154 /CMTT8 rf /Fi 133[30 35 35 47 35 37 26 26 26
-35 37 33 37 55 19 35 21 19 37 33 21 30 37 30 37 33 19
-1[33 19 33 19 40 49 49 67 49 49 47 37 48 51 45 51 49
-60 41 51 34 24 49 51 43 45 50 47 46 49 51 31 1[51 1[19
-19 33 33 33 33 33 33 33 33 33 33 33 19 22 19 51 33 26
-26 19 51 55 33 55 33 19 17[56 1[38 38 39 11[{}91 58.1154
-/CMR7 rf /Fj 134[59 59 81 59 62 44 44 46 1[62 56 62 93
-31 59 1[31 62 56 34 51 62 50 62 54 7[85 1[116 85 86 78
-62 84 1[77 84 88 106 67 88 1[42 88 88 70 74 86 81 80
-85 17[56 1[37 31 2[44 44 28[65 11[{}51 99.6264 /CMBX12
-rf /Fk 138[90 1[64 66 3[90 7[49 74 90 72 1[78 14[120
-10[127 3[117 13[81 3[81 2[45 46[{}15 143.462 /CMBX12
-rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-letter
-%%EndPaperSize
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop -190 -264 a Fk(Gn)l(us)52 b(5.11)g(Reference)h
-(Card)223 881 y @beginspecial 0 @llx 0 @lly 493 @urx
-505 @ury 1235 @rwi @setspecial
-%%BeginDocument: gnus-logo.eps
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: gnuslogo1.ps
-%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley
-%%BoundingBox: 0 0 493 505
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 62 string def
-
-% lower left corner
-0 0 translate
-
-% size of image (on paper, in 1/72inch coords)
-493.0 505.0 scale
-
-% dimensions of data
-493 505 1
-
-% mapping matrix
-[493 0 0 -505 0 505]
-
-{currentfile pix readhexstring pop}
-image
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff01fffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff8003ffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff0000ffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff8000007ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff0000003ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe0000000ffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff000000003fff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff000000000fff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffc0000000007ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffff80000000003ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffff00000000001ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffe00000000000ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffc00000000000ff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff8000000000007f8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff0000000000003f8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffff0000000000003f8
-fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffe0000000000001f8
-fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffc0000000000000f8
-ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffc0000000000000f8
-ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffff8000000000000078
-fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffff0000000000000038
-fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffe0000000000000038
-fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffe0000000000000038
-fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffc0000000000000018
-ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffc0000000000000018
-ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
-fffffffffffffffffffffffffffffffffff80000000000000018
-ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
-fffffffffffffffffffffffffffffffffff80000000000000008
-ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
-fffffffffffffffffffffffffffffffffff00000000000000008
-fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
-fffffffffffffffffffffffffffffffffff00000000000000008
-fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffe00000000000000008
-fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffe00000000000000008
-fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffc00000000000000000
-ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
-ffffffffffffffffffffffffffffffffffc00000000000000000
-ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffff800000000000000000
-ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffff800000000000000000
-ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffff000040000000000000
-fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
-ffffffffffffffffffffffffffffffffff0007ffc00000000000
-fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffe001ffffc0000000000
-fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
-fffffffffffffffffffffffffffffffffc003ffffe0000000000
-fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
-fffffffffffffffffffffffffffffffffc007fffffc000000000
-fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
-fffffffffffffffffffffffffffffffff800fffffff000000000
-ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
-fffffffffffffffffffffffffffffffff801fffffff800000000
-ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
-fffffffffffffffffffffffffffffffff003ffffffff00000000
-ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
-fffffffffffffffffffffffffffffffff007ffffffff00000000
-ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
-ffffffffffffffffffffffffffffffffe00fffffffff80000000
-fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
-ffffffffffffffffffffffffffffffffe01fffffffffc0000008
-fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
-ffffffffffffffffffffffffffffffffc03fffffffffc0000008
-fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
-ffffffffffffffffffffffffffffffffc07ffffffffff0000000
-fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
-ffffffffffffffffffffffffffffffff807ffffffffff0000000
-fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
-ffffffffffffffffffffffffffffffff80fffffffffff0000008
-fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
-ffffffffffffffffffffffffffffffff81fffffffffff8000008
-fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
-ffffffffffffffffffffffffffffffff01fffffffffff8000008
-ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
-ffffffffffffffffffffffffffffffff03fffffffffffc000008
-ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
-fffffffffffffffffffffffffffffffe03fffffffffffc000008
-ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
-fffffffffffffffffffffffffffffffe07fffffffffffe000008
-ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
-fffffffffffffffffffffffffffffffe07fffffffffffe000008
-ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
-fffffffffffffffffffffffffffffffe0ffffffffffffe000008
-ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
-fffffffffffffffffffffffffffffffc0ffffffffffffe000008
-ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
-fffffffffffffffffffffffffffffffc1fffffffffffff000008
-ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
-fffffffffffffffffffffffffffffffc3fffffffffffff000008
-ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
-fffffffffffffffffffffffffffffff87fffffffffffff000008
-ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
-fffffffffffffffffffffffffffffff8ffffffffffffff000008
-ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
-fffffffffffffffffffffffffffffffcffffffffffffff000008
-fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
-ffffffffffffffffffffffffffffe7fdffffffffffffff000008
-fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
-ffffffffffffffffffffffffffffe7fdffffffffffffff000008
-fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
-ffffffffffffffffffffffffffffc7ffffffffffffffff000008
-fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
-fffffffffeffffffffffffffffff87ffffffffffffffff000008
-f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
-fffffffffcffffffffffffffffff87ffffffffffffffff000008
-f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
-fffffffff8ffffffffffffffffff07ffffffffffffffff000008
-f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
-fffffffff8fffffffffffffffffe0fffffffffffffffff000008
-f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
-fffffffff0fffffffffffffffffe0fffffffffffffffff000018
-e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
-fffffffff0fffffffffffffffffc0fffffffffffffffff000018
-e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
-ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
-c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
-ffffffffe0fffffffffffffffff81fffffffffffffffff000018
-c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
-ffffffffc0fffffffffffffffff83fffffffffffffffff000018
-800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
-ffffffff01fffffffffffffffff03fffffffffffffffff000038
-800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
-ffffffff01fffffffffffffffff03fffffffffffffffff800038
-00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
-fffffffe03ffffffffffffffffe07fffffffffffffffff800038
-00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
-fffffffc03ffffffffffffffffe07fffffffffffffffff800038
-00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
-fffffff803ffffffffffffffffc07fffffffffffffffff800038
-00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
-fffffff007ffffffffffffffffc0ffffffffffffffffff800038
-0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
-fffffff007ffffffffffffffff80ffffffffffffffffff800078
-0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
-ffffffc00fffffffffffffffff81ffffffffffffffffff800078
-8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
-ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
-8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
-ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
-c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
-fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
-e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
-fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
-f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
-fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
-f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
-ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
-f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
-ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
-fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
-fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
-fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
-ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
-fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
-00000000fffff3ffffffffff003fffffffffffffffffff0001f8
-fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
-00000001fffff1fffffffffe003fffffffffffffffffff0003f8
-ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
-00000001ffffe1fffffffffc007fffffffffffffffffff0003f8
-ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
-00000003ffffe0fffffffff0007fffffffffffffffffff0003f8
-ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
-00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
-ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
-00000007ffffc07fffffff8000ffffffffffffffffffff0003f8
-fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
-00000007ffff803fffffff0000fffffffffffffffffffe0007f8
-fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
-00000007ffff801ffffffc0001fffffffffffffffffffe0007f8
-fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
-0000000fffff000ffffff80003fffffffffffffffffffe0007f8
-fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
-0000000fffff0007ffffe00003fffffffffffffffffffe0007f8
-ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
-0000001ffffe0001ffff800007fffffffffffffffffffe000ff8
-ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
-0000001ffffe0000fffc000007fffffffffffffffffffe000ff8
-ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
-0000003ffffe0000000000000ffffffffffffffffffffe000ff8
-fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
-0000003ffffc0000000000000ffffffffffffffffffffe000ff8
-fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
-0000007ffff80000000000001ffffffffffffffffffffe001ff8
-fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
-0000007ffff80000000000001ffffffffffffffffffffe001ff8
-fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
-000000fffff80000000000003ffffffffffffffffffffc001ff8
-fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
-000003fffff00000000000007ffffffffffffffffffffc001ff8
-fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
-000007ffffe00000000000007ffffffffffffffffffffe003ff8
-fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
-000007ffffe0000000000000fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
-00001fffffc0000000000001fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
-00001fffffc0000000000003fffffffffffffffffffffc003ff8
-ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
-00003fffff80000000000003fffffffffffffffffffffc007ff8
-ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
-00007fffff80000000000007fffffffffffffffffffffc007ff8
-ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
-0000ffffff0000000000000ffffffffffffffffffffffc007ff8
-fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
-0001ffffff0000000000001ffffffffffffffffffffffc007ff8
-fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
-0003fffffe0000000000001ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
-0007fffffe0000000000003ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
-001ffffffc0000000000007ffffffffffffffffffffff800fff8
-fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
-003ffffffc000000000000fffffffffffffffffffffff800fff8
-ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
-00fffffff8000000000003fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
-03fffffff8000000000003fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
-07fffffff0000000000007fffffffffffffffffffffff001fff8
-ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
-3ffffffff000000000000ffffffffffffffffffffffff003fff8
-ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
-fffffffff000000000003ffffffffffffffffffffffff003fff8
-ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffff800000000007ffffffffffffffffffffffff003fff8
-fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffff80000000000ffffffffffffffffffffffffe003fff8
-fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffc0000000003ffffffffffffffffffffffffe007fff8
-fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffe0000000007ffffffffffffffffffffffffe007fff8
-fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffe000000000fffffffffffffffffffffffffe00ffff8
-fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffff000000001fffffffffffffffffffffffffe00ffff8
-ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
-ffffffffff800000007fffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
-ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
-ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
-ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
-fffffffffff800001fffffffffffffffffffffffffffc01ffff8
-ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
-fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
-ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
-ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
-ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff803ffff8
-fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff007ffff8
-fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe00fffff8
-ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffe01fffff8
-ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc01fffff8
-fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffc03fffff8
-fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff803fffff8
-fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff803fffff8
-fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffff007fffff8
-ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
-ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
-ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
-ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
-ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
-fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff803ffffff8
-fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff803ffffff8
-fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff807ffffff8
-fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff807ffffff8
-fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff007ffffff8
-fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff00fffffff8
-fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff00fffffff8
-ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe01fffffff8
-ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe03fffffff8
-ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffe03fffffff8
-ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffc07fffffff8
-ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffc07fffffff8
-fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff807fffffff8
-fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff807fffffff8
-fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff80ffffffff8
-fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff80ffffffff8
-fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffff01ffffffff8
-fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
-fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
-ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
-ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
-ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
-ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
-ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff80fffffffff8
-ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff81fffffffff8
-ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff81fffffffff8
-ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff01fffffffff8
-ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffff03fffffffff8
-ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe03fffffffff8
-fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffe07fffffffff8
-fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc07fffffffff8
-fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc07fffffffff8
-fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
-fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
-fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff80ffffffffff8
-fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff80ffffffffff8
-fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff00ffffffffff8
-fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff01ffffffffff8
-fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffff01ffffffffff8
-fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
-ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
-ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
-ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
-ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
-fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
-fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
-ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
-ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
-ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
-fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
-fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
-fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
-fffffffffffffffff03ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
-ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
-ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
-ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
-ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
-ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
-ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
-ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
-fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
-fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
-fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
-fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
-fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
-fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff807ffffffffffffffffff803ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff00fffffffffffffffffff803ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffff00fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff807fffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff807fffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff807fffffffffffffffffffc03fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffff00ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff807ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff807ffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffff00fffffffffffffffffffff007fffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
-fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
-fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
-fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
-fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
-fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
-fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
-ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffff801fffffffffffffffffffff801ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
-ffffffffff803fffffffffffffffffffff801ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
-ffffffffff003fffffffffffffffffffff803ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
-fffffffffe007fffffffffffffffffffff803ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
-fffffffffc007fffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
-fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
-fffffffff800ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
-fffffffff801ffffffffffffffffffffff003ffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
-fffffffff803ffffffffffffffffffffff007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
-fffffffff003fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
-ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
-ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
-ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
-ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
-ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
-fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
-fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
-9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
-0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
-07fffff0007ffffffffffffffffffffffc01fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
-07ffffe000fffffffffffffffffffffffc01fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
-03ffffc000fffffffffffffffffffffffc01fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
-03ffff8001fffffffffffffffffffffff801fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
-01ffff0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
-00fffe0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
-00fffe0003fffffffffffffffffffffff803fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
-003ffc0007fffffffffffffffffffffff003fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
-001fe0001ffffffffffffffffffffffff003fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
-000fc0001ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
-000000001ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
-000000003ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
-000000003ffffffffffffffffffffffff007fffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
-000000007fffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
-000000007fffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
-00000001ffffffffffffffffffffffffe007fffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
-00000003ffffffffffffffffffffffffc00ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
-00000003ffffffffffffffffffffffffc00ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
-00000007ffffffffffffffffffffffffc00ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
-0000000fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
-0000001fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
-0000001fffffffffffffffffffffffffc01ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
-0000003fffffffffffffffffffffffffc01ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
-0000007fffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
-0000007fffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
-000000ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
-000001ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
-000001ffffffffffffffffffffffffff801ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
-000003ffffffffffffffffffffffffff801ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
-000003ffffffffffffffffffffffffff801ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
-000007ffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
-00000fffffffffffffffffffffffffff003ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
-00000fffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
-00001fffffffffffffffffffffffffff803ffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
-00003fffffffffffffffffffffffffff007ffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
-00007fffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
-0000ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
-0001ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
-0001ffffffffffffffffffffffffffff00fffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
-0003ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
-0007ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
-0007ffffffffffffffffffffffffffff01fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
-001fffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
-007fffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
-00ffffffffffffffffffffffffffffff07fffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
-dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
-fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
-fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
-ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
-ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
-fffffffffffffffffffffffffffffffffffffffffffffffffff8
-
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
-
-%%EndDocument
- @endspecial -364 1079 a Fj(Notes)-364 1183 y Fi(Gn)n(us)23
-b(is)f(complex.)28 b(Curren)n(tly)21 b(it)h(has)g(some)g(876)h(in)n
-(teractiv)n(e)d(\(user-callable\))-364 1249 y(functions.)28
-b(Of)22 b(these)f(618)i(are)f(in)f(the)h(t)n(w)n(o)h(ma)t(jor)e(mo)r
-(des)h(\(Group)g(and)-364 1316 y(Summary/Article\).)k(Man)n(y)c(of)g
-(these)g(functions)e(ha)n(v)n(e)i(more)g(than)g(one)f(binding,)-364
-1382 y(some)g(ha)n(v)n(e)g(3)h(or)f(ev)n(en)f(4)i(bindings.)28
-b(The)21 b(total)g(n)n(um)n(b)r(er)f(of)h(k)n(eybindings)e(is)j(677.)29
-b(So)-364 1449 y(in)22 b(order)g(to)g(sa)n(v)n(e)h(40\045)f(space,)f
-(ev)n(ery)g(function)g(is)h(listed)f(only)h(once)f(on)i(this)f(card,)
--364 1515 y(under)f(the)h(\\more)f(logical")h(binding.)27
-b(Alternativ)n(e)21 b(bindings)g(are)h(giv)n(en)g(in)-364
-1581 y(paren)n(theses)f(in)h(the)f(b)r(eginning)f(of)i(the)g
-(description.)-364 1648 y(Man)n(y)g(Gn)n(us)h(commands)e(are)g
-(a\013ected)h(b)n(y)g(the)f(n)n(umeric)f(pre\014x.)28
-b(Normally)22 b(y)n(ou)-364 1714 y(en)n(ter)f(a)i(pre\014x)e(b)n(y)h
-(holding)f(the)h(Meta)f(k)n(ey)h(and)g(t)n(yping)g(a)g(n)n(um)n(b)r
-(er,)e(but)i(in)g(most)-364 1781 y(Gn)n(us)h(mo)r(des)e(y)n(ou)h(don't)
-g(need)f(to)h(use)g(Meta)g(since)f(the)g(digits)h(are)g(not)-364
-1847 y(self-inserting.)28 b(The)22 b(pre\014xed)e(b)r(eha)n(vior)h(of)h
-(commands)f(is)h(giv)n(en)g(in)g([brac)n(k)n(ets].)-364
-1913 y(Often)f(the)h(pre\014x)f(is)h(used)g(to)g(sp)r(ecify:)-298
-1980 y([distance])f(Ho)n(w)i(man)n(y)f(ob)t(jects)e(to)j(mo)n(v)n(e)f
-(the)f(p)r(oin)n(t)h(o)n(v)n(er.)-298 2046 y([scop)r(e])f(Ho)n(w)i(man)
-n(y)f(ob)t(jects)f(to)h(op)r(erate)f(on)h(\(including)e(the)i(curren)n
-(t)e(one\).)-298 2113 y([p/p])i(The)g(\\Pro)r(cess/Pre\014x)e(Con)n(v)n
-(en)n(tion":)29 b(If)22 b(a)g(pre\014x)f(is)i(giv)n(en)e(then)g(it)-364
-2179 y(determines)f(ho)n(w)j(man)n(y)f(ob)t(jects)e(to)i(op)r(erate)f
-(on.)30 b(Else)21 b(if)h(there)f(are)h(some)g(ob)t(jects)-364
-2246 y(mark)n(ed)f(with)i(the)e(pro)r(cess)h(mark)f(#,)h(these)f(are)h
-(op)r(erated)f(on.)29 b(Else)22 b(only)g(the)-364 2312
-y(curren)n(t)f(ob)t(ject)f(is)j(a\013ected.)-298 2378
-y([lev)n(el])e(A)h(group)g(subscrib)r(edness)e(lev)n(el.)28
-b(Only)22 b(groups)g(with)g(a)h(lo)n(w)n(er)f(or)h(equal)-364
-2445 y(lev)n(el)e(will)h(b)r(e)g(a\013ected)f(b)n(y)h(the)f(op)r
-(eration.)28 b(If)22 b(no)g(pre\014x)f(is)i(giv)n(en,)-364
-2511 y(`gn)n(us-group-default-list-lev)n(el')d(is)i(used.)29
-b(If)22 b(`gn)n(us-group-use-p)r(ermanen)n(t-lev)n(els',)-364
-2578 y(then)f(a)i(pre\014x)e(to)h(the)g(`g')g(and)g(`l')f(commands)g
-(will)h(also)h(set)f(the)g(default)e(lev)n(el.)-298 2644
-y([score])i(An)g(article)f(score.)28 b(If)22 b(no)h(pre\014x)e(is)h
-(giv)n(en,)-364 2710 y(`gn)n(us-summary-default-score')e(is)i(used.)
--364 2843 y(Gn)n(us)h(startup-commands:)-364 2909 y(M-x)g(gn)n(us)334
-b(start)23 b(Gn)n(us.)-364 2976 y(M-x)g(gn)n(us-no-serv)n(er)49
-b(start)26 b(Gn)n(us)f(without)g(connecting)e(to)j(serv)n(er)e(\(i.e.)
-38 b(to)25 b(read)241 3042 y(mail\).)-364 3111 y(Additionally)-5
-b(,)20 b(there)h(are)h(the)g(t)n(w)n(o)h(commands)e Fh(gnus-plugged)g
-Fi(and)-364 3177 y Fh(gnus-unplugged)p Fi(,)g(whic)n(h)g(are)h(only)g
-(used)g(if)f(y)n(ou)h(w)n(an)n(t)h(to)g(do)n(wnload)f(news)g(and/or)
--364 3244 y(read)g(previously)f(do)n(wnloaded)g(news)h(o\017ine)g
-(\(see)g(C-c)g(C-i)h(g)g(Gn)n(us)f(Unplugged)-364 3310
-y(RET\).)h(Note:)28 b Fh(gnus-no-server)21 b Fi(ignores)h(the)f
-(stu\013)i(in)f Fh(gnus-agent-directory)p Fi(,)d(and)-364
-3377 y(th)n(us)j(do)r(es)g(not)g(allo)n(w)h(y)n(ou)f(to)h(use)e(Gn)n
-(us)i(Unplugged.)-364 3443 y(C-c)g(C-i)68 b(Go)23 b(to)f(the)g(Gn)n(us)
-g(online)f Fg(info)p Fi(.)-364 3509 y(C-c)i(C-b)50 b(Send)21
-b(a)h(Gn)n(us)h Fg(bug)f Fi(rep)r(ort.)-364 3714 y Ff(Group-Mo)t(de)
--364 3850 y Fi(RET)202 b(\(=\))18 b(En)n(ter)g(this)g(group.)27
-b([Pre\014x:)f(ho)n(w)18 b(man)n(y)g(\(read\))g(articles)f(to)h(fetc)n
-(h.)-22 3916 y(P)n(ositiv)n(e:)35 b(new)n(est)25 b(articles,)f(negativ)
-n(e:)34 b(oldest)25 b(ones;)h(non-n)n(umerical:)-22 3982
-y(view)c(all)g(articles,)f(not)h(just)g(unread])-364
-4049 y(M-RET)120 b(En)n(ter)21 b(group)h(quic)n(kly)-5
-b(.)-364 4115 y(M-SPC)131 b(Same)21 b(as)i(RET)g(but)e(do)r(es)h(not)g
-(expunge)f(and)g(hide)g(dorman)n(ts.)-364 4182 y(M-C-RET)51
-b(En)n(ter)19 b(group)g(without)h(an)n(y)f(pro)r(cessing,)g(c)n(hanges)
-g(will)h(not)g(b)r(e)f(p)r(erma-)-22 4248 y(nen)n(t.)-364
-4315 y(SPC)213 b(Select)25 b(this)i(group)f(and)h(displa)n(y)f(the)h
-(\014rst)f(\(unread\))g(article.)42 b([Same)-22 4381
-y(pre\014x)21 b(as)i(ab)r(o)n(v)n(e.])-364 4447 y(?)311
-b(Giv)n(e)22 b(a)h(v)n(ery)f(short)g(help)f(message.)-364
-4514 y Fe(<)290 b Fi(Go)23 b(to)f(the)g(b)r(eginning)e(of)i(the)g
-(Group)g(bu\013er.)-364 4580 y Fe(>)290 b Fi(Go)23 b(to)f(the)g(end)f
-(of)h(the)g(Group)g(bu\013er.)-364 4647 y(,)323 b(Jump)21
-b(to)i(the)e(lo)n(w)n(est-lev)n(el)h(group)g(with)g(unread)f(articles.)
--364 4713 y(.)323 b(Jump)21 b(to)i(the)e(\014rst)h(group)g(with)g
-(unread)f(articles.)-364 4780 y(^)309 b(En)n(ter)21 b(the)h(Serv)n(er)f
-(bu\013er)h(mo)r(de.)-364 4846 y(a)309 b(P)n(ost)18 b(an)g
-Fg(article)i Fi(to)e(a)g(group)g([Pre\014x:)25 b(use)18
-b(group)f(under)g(p)r(oin)n(t)g(to)i(\014nd)-22 4912
-y(p)r(osting-st)n(yle].)-364 4979 y(b)305 b(Find)21 b
-Fg(b)r(ogus)g Fi(groups)i(and)e(delete)g(them.)-364 5045
-y(c)312 b(Mark)33 b(all)h(un)n(tic)n(k)n(ed)e(articles)h(in)g(this)g
-(group)g(as)i(read)e(\()p Fg(catc)n(h-up)p Fi(\).)-22
-5112 y([p/p])-364 5178 y(g)309 b(Chec)n(k)22 b(the)f(serv)n(er)h(for)g
-(new)g(articles)f(\()p Fg(get)p Fi(\).)30 b([lev)n(el])-364
-5244 y(M-g)227 b(Chec)n(k)22 b(the)f(serv)n(er)h(for)g(new)g(articles)f
-(in)h(this)g(group)g(\()p Fg(get)p Fi(\).)29 b([p/p])1922
--317 y(j)337 b Fg(Jump)22 b Fi(to)g(a)h(group.)1922 -251
-y(m)303 b Fg(Mail)27 b Fi(a)g(message)f(to)i(someone)e([Pre\014x:)37
-b(use)27 b(group)f(under)g(p)r(oin)n(t)g(to)2280 -184
-y(\014nd)21 b(p)r(osting-st)n(yle].)1922 -118 y(n)321
-b(Go)23 b(to)f(the)g Fg(next)g Fi(group)g(with)g(unread)f(articles.)29
-b([distance])1922 -52 y(M-n)239 b(Go)23 b(to)f(the)g
-Fg(next)g Fi(group)g(on)g(the)g(same)g(or)g(lo)n(w)n(er)h(lev)n(el.)28
-b([distance])1922 15 y(p)321 b(\(DEL\))15 b(Go)h(to)f(the)g
-Fg(previous)f Fi(group)h(with)g(unread)f(articles.)26
-b([distance])1922 81 y(M-p)239 b(Go)20 b(to)g(the)f Fg(previous)h
-Fi(group)f(on)h(the)f(same)g(or)h(lo)n(w)n(er)g(lev)n(el.)27
-b([distance])1922 148 y(q)323 b Fg(Quit)23 b Fi(Gn)n(us.)1922
-214 y(r)332 b(Re-read)22 b(the)f(init)h(\014le)f(\()p
-Fg(reset)p Fi(\).)1922 280 y(s)332 b Fg(Sa)n(v)n(e)29
-b Fi(the)g(`.newsrc.eld')e(\014le)h(\(and)h(`.newsrc')f(if)h(`gn)n
-(us-sa)n(v)n(e-newsrc-)2280 347 y(\014le'\).)1922 413
-y(z)328 b(Susp)r(end)20 b(\(kill)i(all)g(bu\013ers)g(of)5
-b(\))21 b(Gn)n(us.)1922 480 y(B)312 b Fg(Bro)n(wse)22
-b Fi(a)h(foreign)e(serv)n(er.)1922 546 y(C)311 b(Mark)22
-b(all)g(articles)f(in)h(this)g(group)g(as)h(read)f(\()p
-Fg(Catc)n(h-up)p Fi(\).)29 b([p/p])1922 613 y(F)315 b
-Fg(Find)22 b Fi(new)g(groups)g(and)g(pro)r(cess)f(them.)1922
-679 y(N)309 b(Go)23 b(to)f(the)g Fg(next)g Fi(group.)29
-b([distance])1922 745 y(P)313 b(Go)23 b(to)f(the)g Fg(previous)f
-Fi(group.)29 b([distance])1922 812 y(Q)307 b Fg(Quit)23
-b Fi(Gn)n(us)f(without)g(sa)n(ving)h(an)n(y)f(startup)g(\(.newsrc\))f
-(\014les.)1922 878 y(R)310 b Fg(Restart)23 b Fi(Gn)n(us.)1922
-945 y(Z)318 b(Clear)22 b(the)g(dribble)e(bu\013er.)1922
-1011 y(M-c)246 b(Clear)22 b(data)g(from)g(group)g(\(marks)g(and)g(list)
-g(of)g(read)f(articles\).)1922 1077 y(C-c)h(C-s)142 b
-Fg(Sort)29 b Fi(the)f(groups)g(b)n(y)h(name,)g(n)n(um)n(b)r(er)e(of)i
-(unread)e(articles,)j(or)f(lev)n(el)2280 1144 y(\(dep)r(ending)19
-b(on)k(`gn)n(us-group-sort-function'\).)1922 1210 y(C-c)f(C-x)133
-b(Run)20 b(all)g(expirable)f(articles)g(in)h(this)h(group)f(through)f
-(the)h Fg(expiry)g Fi(pro-)2280 1277 y(cess.)1922 1343
-y(C-c)i(M-C-x)51 b(Run)22 b(all)g(articles)f(in)h(all)g(groups)g
-(through)g(the)f Fg(expiry)h Fi(pro)r(cess.)1922 1410
-y(C-c)g(M-g)122 b(Activ)l(ate)22 b(all)g Fg(groups)p
-Fi(.)1922 1476 y(C-c)g(C-i)149 b(Gn)n(us)23 b(online-man)n(ual)d(\()p
-Fg(info)p Fi(\).)1922 1542 y(C-x)j(C-t)136 b Fg(T)-6
-b(ransp)r(ose)21 b Fi(t)n(w)n(o)i(groups.)1922 1609 y(H)f(f)266
-b(F)-5 b(etc)n(h)21 b(this)h(group's)g Fg(F)-8 b(A)n(Q)22
-b Fi(\(using)g(ange-ftp\).)1922 1675 y(H)g(c)257 b(Displa)n(y)22
-b(this)g(group's)g Fg(c)n(harter)p Fi(.)30 b([Pre\014x:)e(query)21
-b(for)h(group])1922 1742 y(H)g(C)240 b(Displa)n(y)19
-b(this)f(group's)h Fg(con)n(trol)i(message)e Fi(\(using)f(ange-ftp\).)
-27 b([Pre\014x:)2280 1808 y(query)21 b(for)h(group])1922
-1874 y(H)g(v)252 b(\(V\))22 b(Displa)n(y)g(the)g(Gn)n(us)g
-Fg(v)n(ersion)g Fi(n)n(um)n(b)r(er.)1922 1941 y(H)g(d)250
-b(\(C-c)26 b(C-d\))g(Sho)n(w)f(the)g Fg(description)g
-Fi(of)g(this)h(group)e([Pre\014x:)34 b(re-read)2280 2007
-y(from)22 b(serv)n(er].)1922 2074 y(M-d)239 b Fg(Describ)r(e)24
-b Fi(all)e(groups.)29 b([Pre\014x:)f(re-read)21 b(from)g(serv)n(er])
-1922 2140 y(D)h(g)253 b(Regenerate)20 b(a)j(Siev)n(e)e(script)g(from)h
-(group)g(parameters.)1922 2207 y(D)g(u)249 b(Regenerate)20
-b(Siev)n(e)h(script)h(and)g Fg(upload)f Fi(to)h(serv)n(er.)1922
-2385 y Fj(Group)38 b(Subscrib)s(edness-Lev)m(els)1922
-2489 y Fi(The)22 b(table)f(b)r(elo)n(w)h(assumes)g(that)g(y)n(ou)g(use)
-g(the)g(default)e(Gn)n(us)j(lev)n(els.)28 b(Fill)22 b(y)n(our)1922
-2556 y(user-sp)r(eci\014c)e(lev)n(els)h(in)h(the)f(blank)h(cells.)p
-1922 2645 1344 4 v 1920 2711 4 67 v 1972 2692 a(Lev)n(el)p
-2172 2711 V 98 w(Groups)p 2786 2711 V 405 w(Status)p
-3264 2711 V 1922 2715 1344 4 v 1920 2781 4 67 v 2031
-2761 a(1)p 2172 2781 V 159 w(draft/mail)f(groups)p 2786
-2781 V 3264 2781 V 1920 2848 V 2031 2828 a(2)p 2172 2848
-V 159 w(mail)h(groups)p 2786 2848 V 3264 2848 V 1920
-2914 V 2031 2894 a(3)p 2172 2914 V 2786 2914 V 774 w(subscrib)r(ed)p
-3264 2914 V 1920 2980 V 2031 2961 a(4)p 2172 2980 V 2786
-2980 V 3264 2980 V 1920 3047 V 2031 3027 a(5)p 2172 3047
-V 159 w(default)f(list)h(lev)n(el)p 2786 3047 V 3264
-3047 V 1922 3050 1344 4 v 1920 3117 4 67 v 2031 3097
-a(6)p 2172 3117 V 2786 3117 V 774 w(unsubscrib)r(ed)p
-3264 3117 V 1920 3183 V 2031 3163 a(7)p 2172 3183 V 2786
-3183 V 3264 3183 V 1922 3186 1344 4 v 1920 3253 4 67
-v 2031 3233 a(8)p 2172 3253 V 2786 3253 V 774 w(zom)n(bies)p
-3264 3253 V 1922 3256 1344 4 v 1920 3322 4 67 v 2031
-3303 a(9)p 2172 3322 V 2786 3322 V 774 w(killed)p 3264
-3322 V 1922 3326 1344 4 v 1922 3485 a Fj(List)37 b(Groups)1922
-3596 y Fi(A)22 b(d)73 b(\(C-c)29 b(C-M-a\))i(List)e(all)h(groups)f
-(whose)g(names)g(or)g Fg(descriptions)h Fi(matc)n(h)e(a)2103
-3663 y(regexp.)1922 3729 y(A)22 b(k)75 b(\(C-c)18 b(C-l\))g(List)g(all)
-g Fg(killed)g Fi(groups.)28 b([Pre\014x:)d(lo)r(ok)18
-b(at)g(activ)n(e-\014le)e(from)h(serv)n(er])1922 3796
-y(A)22 b(l)91 b(List)29 b(all)g(groups)g(on)g(a)g(sp)r(eci\014c)e(lev)n
-(el.)48 b([Pre\014x:)41 b(also)30 b(list)f(groups)g(with)g(no)2103
-3862 y(unread)21 b(articles])1922 3928 y(A)h(a)77 b(\(C-c)22
-b(C-a\))i(List)e(all)g(groups)g(whose)h(names)e(matc)n(h)g(a)i(regexp)e
-(\()p Fg(aprop)r(os)p Fi(\).)1922 3995 y(A)h(A)61 b(List)22
-b(the)g(serv)n(er's)f(activ)n(e-\014le.)1922 4061 y(A)h(M)50
-b(List)22 b(groups)g(that)g Fg(matc)n(h)h Fi(a)g(regexp.)1922
-4128 y(A)f(m)55 b(List)22 b(groups)g(that)g Fg(matc)n(h)h
-Fi(a)g(regexp)e(and)g(ha)n(v)n(e)h(unread)f(articles.)29
-b([lev)n(el])1922 4194 y(A)22 b(s)84 b(\(l\))18 b(List)h(all)f
-Fg(subscrib)r(ed)g Fi(groups)h(with)f(unread)f(articles.)27
-b([lev)n(el;)18 b(5)h(and)f(lo)n(w)n(er)2103 4260 y(is)k(the)g
-(default])1922 4327 y(A)g(u)73 b(\(L\))23 b(List)h(all)f(groups)h
-(\(including)d(read)i(and)g Fg(unsubscrib)r(ed)p Fi(\).)33
-b([lev)n(el;)22 b(7)i(and)2103 4393 y(lo)n(w)n(er)e(is)h(the)e
-(default])1922 4460 y(A)h(z)80 b(List)22 b(all)g Fg(zom)n(bie)h
-Fi(groups.)1922 4526 y(A)f(c)80 b(List)22 b(all)g(groups)g(with)h(cac)n
-(hed)d(articles.)28 b([lev)n(el])1922 4593 y(A)22 b(?)79
-b(List)22 b(all)g(groups)g(with)h(dorman)n(t)e(articles.)28
-b([lev)n(el])1922 4777 y Fj(Create/Edit)37 b(F)-9 b(oreign)38
-b(Groups)1922 4881 y Fi(The)22 b(select)f(metho)r(ds)g(are)h(indicated)
-e(in)h(paren)n(theses.)1922 4947 y(G)i(a)66 b(Mak)n(e)22
-b(the)g(Gn)n(us)g(list)g Fg(arc)n(hiv)n(e)h Fi(group.)29
-b(\(nndir)21 b(o)n(v)n(er)h(ange-ftp\))1922 5013 y(G)h(c)69
-b Fg(Customize)24 b Fi(this)e(group's)g(parameters.)1922
-5080 y(G)h(d)62 b(Mak)n(e)17 b(a)h Fg(directory)g Fi(group)f(\(ev)n
-(ery)f(\014le)h(m)n(ust)g(b)r(e)f(a)i(p)r(osting)e(and)h(\014les)g(m)n
-(ust)2095 5146 y(ha)n(v)n(e)22 b(n)n(umeric)f(names\).)28
-b(\(nndir\))1922 5213 y(G)23 b(D)49 b(En)n(ter)32 b(a)g
-Fg(directory)h Fi(as)g(a)f(\(temp)r(orary\))f(group.)58
-b(\(nneething)30 b(without)2095 5279 y(recording)21 b(articles)g
-(read\))1922 5345 y(G)i(e)69 b(\(M-e\))22 b Fg(Edit)h
-Fi(this)f(group's)g(select)f(metho)r(d.)1922 5412 y(G)i(E)54
-b Fg(Edit)23 b Fi(this)f(group's)g(info)g(\(select)e(metho)r(d,)h
-(articles)g(read,)h(etc\).)1860 5838 y Fd(1)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop -364 -317 a Fi(G)23 b(f)164 b(Mak)n(e)22
-b(a)h(group)f(based)f(on)h(a)h Fg(\014le)p Fi(.)30 b(\(nndo)r(c\))-364
--251 y(G)23 b(h)148 b(Mak)n(e)22 b(the)g(Gn)n(us)g Fg(help)h
-Fi(\(do)r(cumen)n(tation\))c(group.)29 b(\(nndo)r(c\))-364
--184 y(G)23 b(k)150 b(Mak)n(e)22 b(a)h Fg(kib)r(oze)f
-Fi(group.)29 b(\(nnkib)r(oze\))-364 -118 y(G)23 b(m)130
-b Fg(Mak)n(e)22 b Fi(a)h(new)e(group.)-364 -52 y(G)i(p)148
-b(Edit)22 b(this)g(group's)g Fg(parameters)p Fi(.)-364
-15 y(G)h(r)159 b(Rename)21 b(this)h(group)g(\(do)r(es)g(not)g(w)n(ork)h
-(with)f(read-only)f(groups!\).)-364 81 y(G)i(u)148 b(Create)22
-b(one)g(of)g(the)f(groups)i(men)n(tioned)d(in)h(gn)n(us-)p
-Fg(useful)p Fi(-groups.)-364 148 y(G)i(v)150 b(Add)22
-b(this)g(group)g(to)g(a)h Fg(virtual)f Fi(group.)29 b([p/p])-364
-214 y(G)23 b(V)136 b(Mak)n(e)22 b(a)h(new)f(empt)n(y)f
-Fg(virtual)h Fi(group.)29 b(\(nn)n(virtual\))-364 280
-y(G)23 b(w)138 b(Create)26 b(ephemeral)d(group)j(based)f(on)h(w)n
-(eb-searc)n(h.)40 b([Pre\014x:)35 b(mak)n(e)25 b(solid)-105
-347 y(group)d(instead])-364 413 y(G)h(R)137 b(Mak)n(e)22
-b(an)g Fg(RSS)g Fi(group.)-364 480 y(G)h(DEL)49 b Fg(Delete)25
-b Fi(group)d([Pre\014x:)27 b(delete)21 b(all)h(articles)f(as)i(w)n
-(ell].)-364 546 y(G)g(x)150 b(Expunge)21 b(all)h(deleted)e(articles)h
-(in)h(an)g(nnimap)f(mailb)r(o)n(x.)-364 613 y(G)i(l)166
-b(Edit)22 b(A)n(CL)h(\(Access)e(Con)n(trol)i Fg(List)p
-Fi(\))f(for)g(an)g(nnimap)f(mailb)r(o)n(x.)-364 684 y(Y)-5
-b(ou)22 b(can)g(also)g(create)f(mail-groups)h(and)g(read)f(y)n(our)i
-(mail)e(with)h(Gn)n(us)h(\(v)n(ery)f(useful)-364 751
-y(if)g(y)n(ou)g(are)g(subscrib)r(ed)e(to)j(mailing)e(lists\),)h(using)g
-(one)g(of)g(the)f(metho)r(ds)g(nnm)n(b)r(o)n(x,)-364
-817 y(nn)n(bab)n(yl,)f(nnml,)g(nnmh,)g(or)i(nnfolder.)27
-b(Read)20 b(ab)r(out)h(it)g(in)g(the)f(online)g(info)h(\(C-c)g(C-i)-364
-884 y(g)i(Reading)e(Mail)h(RET\).)-364 1081 y Fj(Unsubscrib)s(e,)39
-b(Kill)f(and)g(Y)-9 b(ank)38 b(Groups)-364 1193 y Fi(S)22
-b(k)120 b(\(C-k\))23 b Fg(Kill)g Fi(this)f(group.)-364
-1259 y(S)g(l)136 b(Set)21 b(the)h Fg(lev)n(el)h Fi(of)f(this)g(group.)
-29 b([p/p])-364 1326 y(S)22 b(s)129 b(\(U\))22 b(Prompt)f(for)h(a)h
-(group)e(and)h(toggle)g(its)h Fg(subscription)p Fi(.)-364
-1392 y(S)f(t)129 b(\(u\))22 b Fg(T)-6 b(oggle)21 b Fi(subscription)g
-(to)h(this)h(group.)28 b([p/p])-364 1459 y(S)22 b(w)108
-b(\(C-w\))23 b(Kill)f(all)g(groups)g(in)g(the)f(region.)-364
-1525 y(S)h(y)120 b(\(C-y\))23 b Fg(Y)-6 b(ank)21 b Fi(the)h(last)g
-(killed)f(group.)-364 1591 y(S)h(z)125 b(Kill)21 b(all)h
-Fg(zom)n(bie)h Fi(groups.)-364 1658 y(S)f(C-k)51 b(Kill)21
-b(all)h(groups)g(on)h(a)f(certain)f(lev)n(el.)-364 1837
-y Fj(Mark)38 b(Groups)-364 1948 y Fi(M)22 b(m)50 b(\(#\))21
-b(Set)h(the)f(pro)r(cess)h Fg(mark)g Fi(on)g(this)g(group.)29
-b([scop)r(e])-364 2015 y(M)22 b(r)79 b(Mark)22 b(all)g(groups)g(matc)n
-(hing)f(regular)g(expression.)-364 2081 y(M)h(u)68 b(\(M-#\))22
-b(Remo)n(v)n(e)f(the)h(pro)r(cess)f(mark)h(from)f(this)i(group)e(\()p
-Fg(unmark)p Fi(\).)29 b([scop)r(e])-364 2147 y(M)22 b(U)56
-b(Remo)n(v)n(e)21 b(the)h(pro)r(cess)f(mark)h(from)g(all)g(groups)g(\()
-p Fg(umark)i(all)p Fi(\).)-364 2214 y(M)e(w)58 b(Mark)22
-b(all)g(groups)g(in)g(the)f(curren)n(t)g(region.)28 b([pre\014x:)g
-(unmark])-364 2280 y(M)22 b(b)68 b(Mark)22 b(all)g(groups)g(in)g(the)f
-Fg(bu\013er)p Fi(.)30 b([pre\014x:)d(unmark])-364 2459
-y Fj(Group-Unplugged)-364 2571 y Fi(J)22 b(j)78 b(T)-5
-b(oggle)22 b(plugged-state.)-364 2637 y(J)g(s)73 b(F)-5
-b(etc)n(h)21 b(articles)g(from)h(all)g(groups)g(for)g
-(o\017ine-reading.)-364 2704 y(J)g(u)62 b(F)-5 b(etc)n(h)21
-b(all)h(eligible)e(articles)i(from)f(this)h(group.)-364
-2770 y(J)g(S)62 b Fg(Send)22 b Fi(all)g(sendable)f(messages)h(in)g(the)
-f(drafts)h(group.)-364 2836 y(J)g(c)69 b(En)n(ter)22
-b Fg(category)h Fi(bu\013er.)-364 2903 y(J)f(a)66 b Fg(Add)22
-b Fi(this)g(group)g(to)h(an)f(Agen)n(t)g(category)f([p/p].)-364
-2969 y(J)h(r)73 b Fg(Remo)n(v)n(e)23 b Fi(this)f(group)g(from)f(its)i
-(Agen)n(t)f(category)f([p/p].)-364 3036 y(J)h(Y)50 b(Sync)n(hronize)20
-b(\015ags)i(c)n(hanged)f(while)h(unplugged)e(with)i(remote)f(serv)n
-(er.)-364 3214 y Fj(Group)38 b(T)-9 b(opics)-364 3318
-y Fi(T)k(opics)22 b(are)g(\\categories")f(for)h(groups.)29
-b(Press)22 b(t)h(in)f(the)f(group-bu\013er)g(to)i(toggle)-364
-3385 y(gn)n(us-topic-mo)r(de)e(\(C-c)i(C-i)f(g)h(Group)f(T)-5
-b(opics)22 b(RET\).)-364 3454 y(T)h(n)169 b(Prompt)22
-b(for)g(topic)f Fg(name)h Fi(and)g(create)f(it.)-364
-3521 y(T)i(m)151 b Fg(Mo)n(v)n(e)22 b Fi(the)f(curren)n(t)g(group)h(to)
-g(some)g(other)g(topic)f([p/p].)-364 3587 y(T)i(j)185
-b Fg(Jump)22 b Fi(to)h(a)f(topic.)-364 3653 y(T)h(c)176
-b Fg(Cop)n(y)22 b Fi(the)f(curren)n(t)g(group)h(to)g(some)g(other)g
-(topic)f([p/p].)-364 3720 y(T)i(D)156 b(Remo)n(v)n(e)22
-b(\(not)g(delete\))e(the)i(curren)n(t)e(group)i([p/p].)-364
-3786 y(T)h(M)146 b Fg(Mo)n(v)n(e)22 b Fi(all)g(groups)g(matc)n(hing)f
-(a)h(regexp)f(to)i(a)f(topic.)-364 3853 y(T)h(C)159 b
-Fg(Cop)n(y)22 b Fi(all)g(groups)g(matc)n(hing)f(a)h(regexp)f(to)i(a)f
-(topic.)-364 3919 y(T)h(H)157 b(T)-5 b(oggle)22 b Fg(hiding)g
-Fi(of)g(empt)n(y)f(topics.)-364 3985 y(T)i(r)180 b Fg(Rename)23
-b Fi(a)g(topic.)-364 4052 y(T)g(DEL)70 b(Delete)21 b(an)h(empt)n(y)f
-(topic.)-364 4118 y(T)i(#)151 b(Mark)22 b(all)g(groups)h(in)e(the)h
-(curren)n(t)f(topic)g(with)h(the)g(pro)r(cess-mark.)-364
-4185 y(T)h(M-#)69 b(Remo)n(v)n(e)22 b(the)f(pro)r(cess-mark)h(from)f
-(all)h(groups)g(in)g(the)g(curren)n(t)f(topic.)-364 4251
-y(T)i(T)-5 b(AB)69 b(\(T)-5 b(AB\))23 b(Inden)n(t)e(curren)n(t)g(topic)
-g([Pre\014x:)28 b(uninden)n(t].)-364 4318 y(M-T)-5 b(AB)57
-b(Uninden)n(t)21 b(the)g(curren)n(t)g(topic.)-364 4384
-y(RET)136 b(\(SPC\))22 b(Either)f(unfold)g(topic)g(or)i(en)n(ter)e
-(group)h([lev)n(el].)-364 4450 y(T)h(s)180 b Fg(Sho)n(w)22
-b Fi(the)f(curren)n(t)g(topic.)28 b([Pre\014x:)g(sho)n(w)23
-b(p)r(ermanen)n(tly])-364 4517 y(T)g(h)169 b Fg(Hide)23
-b Fi(the)f(curren)n(t)e(topic.)29 b([Pre\014x:)e(hide)22
-b(p)r(ermanen)n(tly])-364 4583 y(C-c)h(C-x)50 b(Expire)21
-b(all)h(articles)f(in)h(curren)n(t)f(group)h(or)g(topic.)-364
-4650 y(C-k)172 b Fg(Kill)23 b Fi(a)g(group)f(or)g(topic.)-364
-4716 y(C-y)172 b Fg(Y)-6 b(ank)22 b Fi(a)g(group)g(or)g(topic.)-364
-4782 y(A)h(T)157 b(List)23 b(activ)n(e-\014le)d(using)i
-Fg(topics)p Fi(.)-364 4849 y(G)h(p)165 b(Edit)22 b(topic-)p
-Fg(parameters)p Fi(.)-364 4915 y(T)h(M-n)87 b(Go)23 b(to)g
-Fg(next)f Fi(topic.)28 b([distance])-364 4982 y(T)23
-b(M-p)87 b(Go)23 b(to)g Fg(previous)e Fi(topic.)28 b([distance])-364
-5149 y Fc(T)-8 b(opic)32 b(Sorting)-364 5257 y Fi(T)23
-b(S)f(a)54 b(Sort)22 b Fg(alphab)r(etically)p Fi(.)-364
-5324 y(T)h(S)f(u)50 b(Sort)22 b(b)n(y)g(n)n(um)n(b)r(er)e(of)i
-Fg(unread)g Fi(articles.)-364 5390 y(T)h(S)f(l)68 b(Sort)22
-b(b)n(y)g(group)f Fg(lev)n(el)p Fi(.)1922 -317 y(T)i(S)f(v)69
-b(Sort)22 b(b)n(y)g(group)g(score)g(\()p Fg(v)l(alue)p
-Fi(\).)1922 -251 y(T)h(S)f(r)78 b(Sort)22 b(b)n(y)g(group)g
-Fg(rank)p Fi(.)1922 -184 y(T)h(S)f(m)49 b(Sort)22 b(b)n(y)g
-Fg(metho)r(d)p Fi(.)1922 -118 y(T)h(S)f(e)74 b(Sort)22
-b(b)n(y)g Fg(serv)n(er)h Fi(name.)1922 -52 y(T)g(S)f(s)78
-b(Sort)22 b(according)f(to)h(`gn)n(us-group-sort-function'.)1922
-17 y(With)f(a)i(pre\014x)e(these)g(commands)g(will)h(sort)h(in)f(rev)n
-(erse)f(order.)1922 254 y Ff(Summary)45 b(Mo)t(de)1922
-390 y Fi(SPC)143 b(\(A)20 b(SPC,)g(A)g(n\))f(Select)f(an)i(article,)f
-(scroll)h(it)f(one)h(page,)g(mo)n(v)n(e)f(to)h(the)f(next)2194
-456 y(one.)1922 522 y(DEL)136 b(\(A)22 b(DEL,)g(A)g(p,)g(b\))g(Scroll)f
-(this)i(article)e(one)g(page)h(bac)n(k.)29 b([distance])1922
-589 y(RET)132 b(\(A)22 b(RET\))h(Scroll)e(this)h(article)f(one)h(line)f
-(forw)n(ard.)29 b([distance])1922 655 y(M-RET)50 b(\(A)22
-b(M-RET\))h(Scroll)e(this)h(article)f(one)h(line)f(bac)n(kw)n(ard.)29
-b([distance])1922 722 y(=)221 b(Expand)22 b(the)g(Summary)f(windo)n(w)i
-(\(fullsize\).)29 b([Pre\014x:)g(shrink)22 b(to)h(displa)n(y)2194
-788 y(article)e(windo)n(w])1922 854 y(&)221 b(Execute)18
-b(a)i(command)e(on)i(all)g(articles)f(whose)h(header)e(matc)n(hes)h(a)h
-(regexp.)2194 921 y([Pre\014x:)28 b(mo)n(v)n(e)21 b(bac)n(kw)n(ards])
-1922 987 y(M-&)139 b(Execute)20 b(a)i(command)f(on)h(all)g(articles)f
-(ha)n(ving)h(the)g(pro)r(cess)f(mark.)1922 1054 y(M-n)153
-b(\(G)25 b(M-n\))g(Go)g(to)h(the)e Fg(next)h Fi(summary)f(line)g(of)g
-(an)h(unread)f(article.)35 b([dis-)2194 1120 y(tance])1922
-1187 y(M-p)153 b(\(G)28 b(M-p\))f(Go)h(to)g(the)f Fg(previous)f
-Fi(summary)h(line)f(of)h(an)h(unread)e(article.)2194
-1253 y([distance])1922 1319 y(M-s)164 b Fg(Searc)n(h)22
-b Fi(through)g(all)g(subsequen)n(t)f(articles)g(for)h(a)g(regexp.)1922
-1386 y(M-r)164 b(Searc)n(h)21 b(through)g(all)h(previous)g(articles)f
-(for)h(a)g(regexp.)1922 1452 y(A)g(P)156 b Fg(P)n(ostscript)p
-Fi(-prin)n(t)22 b(curren)n(t)f(bu\013er.)1922 1519 y(M-k)155
-b(Edit)21 b(this)h(group's)g Fg(kill)h Fi(\014le.)1922
-1585 y(M-K)139 b(Edit)21 b(the)h(general)f Fg(kill)h
-Fi(\014le.)1922 1652 y(C-t)177 b(T)-5 b(oggle)22 b Fg(truncation)g
-Fi(of)g(summary)f(lines.)1922 1718 y(Y)h(g)168 b(Regenerate)20
-b(the)i(summary-bu\013er.)1922 1784 y(Y)g(c)171 b(Insert)22
-b(all)g(cac)n(hed)e(articles)i(in)n(to)g(the)f(summary-bu\013er.)1922
-1851 y(M-C-e)91 b Fg(Edit)23 b Fi(the)e(group-parameters.)1922
-1917 y(M-C-a)88 b(Customize)21 b(the)h(group-parameters.)1922
-1984 y(A)g Fe(<)149 b Fi(\()p Fe(<)p Fi(,)22 b(A)g(b\))g(Scroll)f(to)i
-(the)e(b)r(eginning)g(of)h(this)g(article.)1922 2050
-y(A)g Fe(>)149 b Fi(\()p Fe(>)p Fi(,)22 b(A)g(e\))g(Scroll)f(to)i(the)e
-(end)g(of)i(this)f(article.)1922 2116 y(A)g(s)175 b(\(s\))23
-b(P)n(erform)d(an)i(i)p Fg(searc)n(h)h Fi(in)e(the)h(article)f
-(bu\013er.)1922 2183 y(A)h(D)151 b(\(C-d\))21 b(Un)p
-Fg(digestify)f Fi(this)g(article)f(in)n(to)h(a)g(separate)g(group.)28
-b([Pre\014x:)f(force)2194 2249 y(digest])1922 2316 y(M-C-d)84
-b(Lik)n(e)19 b(C-d,)h(but)e(op)r(en)g(sev)n(eral)h(do)r(cumen)n(ts)e
-(in)i(nndo)r(c-groups,)f(wrapp)r(ed)g(in)2194 2382 y(an)k(nn)n(virtual)
-f(group)h([p/p])1922 2449 y(A)g(g)168 b(\(g\))22 b(\(Re\)fetc)n(h)f
-(this)h(article)f(\()p Fg(get)p Fi(\).)29 b([Pre\014x:)f(get)22
-b(ra)n(w)h(v)n(ersion])1922 2515 y(A)f(r)175 b(\(^,)20
-b(A)g(^\))g(F)-5 b(etc)n(h)18 b(the)h(paren)n(t\(s\))g(of)g(this)h
-(article.)27 b([Pre\014x:)f(if)19 b(p)r(ositiv)n(e)g(fetc)n(h)2194
-2581 y Fb(n)28 b Fi(ancestors;)21 b(negativ)n(e:)28 b(fetc)n(h)21
-b(only)h(the)g Fb(n)5 b Fi(th)22 b(ancestor])1922 2648
-y(A)g(t)175 b Fg(T)-6 b(ranslate)22 b Fi(this)g(article.)1922
-2714 y(A)g(R)153 b(F)-5 b(etc)n(h)21 b(all)h(articles)f(men)n(tioned)f
-(in)i(the)f Fg(References)p Fi(-header.)1922 2781 y(A)h(T)154
-b(F)-5 b(etc)n(h)21 b(full)g Fg(thread)h Fi(in)g(whic)n(h)g(the)f
-(curren)n(t)g(article)g(app)r(ears.)1922 2847 y(M-^)157
-b(F)-5 b(etc)n(h)21 b(the)g(article)g(with)h(a)h(giv)n(en)e
-(Message-ID.)1922 2913 y(S)h(y)178 b Fg(Y)-6 b(ank)21
-b Fi(the)h(curren)n(t)f(article)g(in)n(to)h(an)g(existing)f
-(message-bu\013er.)28 b([p/p])1922 2980 y(A)22 b(M)141
-b(Setup)28 b(group)i(parameters)e(for)h Fg(mailing)h
-Fi(lists)g(from)f(headers.)50 b([Pre\014x:)2194 3046
-y(replace)20 b(old)i(settings])1922 3225 y Fj(Select)37
-b(Articles)1922 3329 y Fi(These)22 b(commands)e(select)h(the)h(target)g
-(article.)28 b(They)22 b(do)g(not)g(understand)e(the)1922
-3395 y(pre\014x.)1922 3461 y(h)193 b(En)n(ter)21 b(article-bu\013er.)
-1922 3528 y(G)i(b)119 b(\(,\))22 b(Go)h(to)f(the)g Fg(b)r(est)g
-Fi(article)f(\(the)h(one)f(with)i(highest)e(score\).)1922
-3594 y(G)i(f)135 b(\(.\))29 b(Go)23 b(to)f(the)g Fg(\014rst)h
-Fi(unread)d(article.)1922 3661 y(G)j(n)119 b(\(n\))22
-b(Go)h(to)f(the)f Fg(next)i Fi(unread)e(article.)1922
-3727 y(G)i(p)119 b(\(p\))22 b(Go)h(to)f(the)f Fg(previous)h
-Fi(unread)f(article.)1922 3794 y(G)i(N)107 b(\(N\))22
-b(Go)h(to)f Fg(the)h Fi(next)f(article.)1922 3860 y(G)h(P)111
-b(\(P\))22 b(Go)h(to)f(the)f Fg(previous)h Fi(article.)1922
-3926 y(G)h(C-n)50 b(\(M-C-n\))23 b(Go)f(to)h(the)e Fg(next)i
-Fi(article)e(with)h(the)g(same)f(sub)t(ject.)1922 3993
-y(G)i(C-p)50 b(\(M-C-p\))23 b(Go)f(to)h(the)e Fg(previous)h
-Fi(article)f(with)h(the)f(same)h(sub)t(ject.)1922 4059
-y(G)h(l)137 b(\(l\))22 b(Go)h(to)f(the)g(previously)f(read)g(article)g
-(\()p Fg(last-read-article)p Fi(\).)1922 4126 y(G)i(o)123
-b(P)n(op)22 b(an)g(article)f(o\013)i(the)e(summary)h(history)g(and)f
-(go)i(to)f(it.)1922 4192 y(G)h(g)123 b(Searc)n(h)21 b(an)h(article)f
-(via)h(sub)t(ject.)1922 4258 y(G)h(j)135 b(\(j\))22 b(Searc)n(h)f(an)h
-(article)f(via)h(Message-Id)g(or)g(sub)t(ject.)1922 4437
-y Fj(Threading)1922 4549 y Fi(T)h(#)131 b(Mark)22 b(this)g(thread)f
-(with)i(the)e(pro)r(cess)h(mark.)1922 4615 y(T)h(M-#)49
-b(Remo)n(v)n(e)22 b(pro)r(cess-marks)f(from)h(this)g(thread.)1922
-4682 y(T)h(t)160 b(Re-)p Fg(thread)22 b Fi(the)g(curren)n(t)f
-(article's)g(thread.)1922 4748 y(T)i(^)153 b(Mak)n(e)22
-b(the)f(curren)n(t)g(article)g(c)n(hild)g(of)h(the)g(mark)n(ed)f(\(or)h
-(previous\))f(article.)1922 4815 y(T)i(n)149 b(\(M-C-f,)23
-b(M-do)n(wn\))f(Go)h(to)f(the)g Fg(next)g Fi(thread.)29
-b([distance])1922 4881 y(T)23 b(p)149 b(\(M-C-b,)23 b(M-up\))e(Go)i(to)
-g(the)e Fg(previous)h Fi(thread.)28 b([distance])1922
-4947 y(T)23 b(d)149 b Fg(Descend)23 b Fi(this)f(thread.)28
-b([distance])1922 5014 y(T)23 b(u)149 b(Ascend)21 b(this)h(thread)f(\()
-p Fg(up)p Fi(-thread\).)28 b([distance])1922 5080 y(T)23
-b(o)153 b(Go)23 b(to)f(the)g(top)g(of)g(this)g(thread.)1922
-5147 y(T)h(s)160 b Fg(Sho)n(w)22 b Fi(the)f(thread)g(hidden)g(under)f
-(this)j(article.)1922 5213 y(T)g(h)149 b Fg(Hide)23 b
-Fi(this)f(\(sub\)thread.)1922 5280 y(T)h(i)167 b Fg(Increase)23
-b Fi(the)e(score)h(of)g(this)g(thread.)1922 5346 y(T)h(l)167
-b(\(M-C-l\))23 b Fg(Lo)n(w)n(er)f Fi(the)g(score)g(of)g(this)g(thread.)
-1860 5838 y Fd(2)p eop end
-%%Page: 3 3
-TeXDict begin 3 2 bop -364 -317 a Fi(T)23 b(k)64 b(\(M-C-k\))33
-b Fg(Kill)g Fi(the)e(curren)n(t)g(\(sub\)thread.)57 b([Negativ)n(e)31
-b(pre\014x:)48 b(tic)n(k)32 b(it,)-195 -251 y(p)r(ositiv)n(e)21
-b(pre\014x:)28 b(unmark)21 b(it.])-364 -184 y(T)i(H)50
-b Fg(Hide)23 b Fi(all)f(threads.)-364 -118 y(T)h(S)62
-b Fg(Sho)n(w)21 b Fi(all)h(hidden)f(threads.)-364 -52
-y(T)i(T)52 b(\(M-C-t\))23 b Fg(T)-6 b(oggle)22 b Fi(threading.)-364
-127 y Fj(Limiting)-364 239 y Fi(//)103 b(\(/s\))22 b(Limit)g(the)f
-(summary-bu\013er)g(to)i(articles)e(matc)n(hing)g Fg(sub)t(ject)p
-Fi(.)-364 305 y(/a)103 b(Limit)21 b(the)h(summary-bu\013er)f(to)h
-(articles)f(matc)n(hing)g Fg(author)p Fi(.)-364 372 y(/x)101
-b(Limit)21 b(dep)r(ending)f(on)i(\\extra")g(headers.)-364
-438 y(/u)99 b(\(x\))22 b(Limit)g(to)h Fg(unread)f Fi(articles.)29
-b([Pre\014x:)f(also)23 b(exclude)d(tic)n(k)n(ed)i(and)g(dorman)n(t)-195
-504 y(articles])-364 571 y(/.)117 b(Limit)21 b(to)i(unseen)d(articles.)
--364 637 y(/m)81 b(Limit)21 b(to)i(articles)e(mark)n(ed)g(with)h(sp)r
-(eci\014ed)e Fg(mark)p Fi(.)-364 704 y(/t)110 b(Ask)27
-b(for)g(a)h(n)n(um)n(b)r(er)e(and)g(exclude)f(articles)i(y)n(ounger)f
-(than)h(that)g(man)n(y)g(da)n(ys.)-195 770 y([Pre\014x:)g(exclude)20
-b(older)i(articles])-364 837 y(/n)99 b(Limit)21 b(to)i(curren)n(t)d
-(article.)28 b([p/p])-364 903 y(/w)89 b(P)n(op)30 b(the)g(previous)g
-(limit)f(o\013)j(the)d(stac)n(k)i(and)f(restore)g(it.)55
-b([Pre\014x:)44 b(p)r(op)30 b(all)-195 969 y(limits])-364
-1036 y(/v)101 b(Limit)21 b(to)i(score.)28 b([score])-364
-1102 y(/E)91 b(\(M)22 b(S\))g(Include)e(all)i(expunged)e(articles)h(in)
-h(the)g(limit.)-364 1169 y(/D)86 b(Include)20 b(all)i(dorman)n(t)g
-(articles)f(in)h(the)f(limit.)-364 1235 y(/*)103 b(Limit)21
-b(to)i(cac)n(hed)d(articles.)-364 1301 y(Y)j(C)50 b(Include)20
-b(all)i(cac)n(hed)f(articles)g(in)h(the)f(limit.)-364
-1368 y(/d)99 b(Exclude)20 b(all)i(dorman)n(t)f(articles)h(from)f(the)h
-(limit.)-364 1434 y(/M)76 b(Exclude)20 b(all)i(mark)n(ed)f(articles.)
--364 1501 y(/T)89 b(Include)20 b(all)i(articles)f(from)h(the)f(curren)n
-(t)g(thread)g(in)h(the)g(limit.)-364 1567 y(/c)106 b(Exclude)20
-b(all)i(dorman)n(t)f(articles)h(that)g(ha)n(v)n(e)g(no)g(c)n(hildren)e
-(from)i(the)f(limit.)-364 1634 y(/C)89 b(Mark)18 b(all)h(excluded)d
-(unread)h(articles)h(as)h(read.)27 b([Pre\014x:)f(also)19
-b(mark)g(tic)n(k)n(ed)e(and)-195 1700 y(dorman)n(t)k(articles])-364
-1766 y(/o)103 b(Insert)22 b(all)g Fg(old)f Fi(articles.)29
-b([Pre\014x:)e(ho)n(w)c(man)n(y])-364 1833 y(/N)87 b(Insert)22
-b(all)g Fg(new)g Fi(articles.)-364 1899 y(/p)99 b(Limit)21
-b(to)i(articles)e Fg(predicated)i Fi(in)f(the)f(`displa)n(y')h(group)g
-(parameter.)-364 2078 y Fj(Sort)37 b(the)h(Summary-Bu\013er)-364
-2190 y Fi(C-c)23 b(C-s)g(C-a)55 b(Sort)22 b(the)f(summary-bu\013er)g(b)
-n(y)h Fg(author)p Fi(.)-364 2256 y(C-c)h(C-s)g(C-d)51
-b(Sort)22 b(the)f(summary-bu\013er)g(b)n(y)h Fg(date)p
-Fi(.)-364 2323 y(C-c)h(C-s)g(C-i)69 b(Sort)22 b(the)f(summary-bu\013er)
-g(b)n(y)h(article)f(score.)-364 2389 y(C-c)i(C-s)g(C-l)69
-b(Sort)22 b(the)f(summary-bu\013er)g(b)n(y)h(amoun)n(t)g(of)g
-Fg(lines)p Fi(.)-364 2455 y(C-c)h(C-s)g(C-c)58 b(Sort)22
-b(the)f(summary-bu\013er)g(b)n(y)h(length.)-364 2522
-y(C-c)h(C-s)g(C-n)51 b(Sort)22 b(the)f(summary-bu\013er)g(b)n(y)h
-(article)f Fg(n)n(um)n(b)r(er)p Fi(.)-364 2588 y(C-c)i(C-s)g(C-s)62
-b(Sort)22 b(the)f(summary-bu\013er)g(b)n(y)h Fg(sub)t(ject)p
-Fi(.)-364 2655 y(C-c)h(C-s)g(C-r)62 b(Sort)22 b(the)f(summary-bu\013er)
-g Fg(randomly)p Fi(.)-364 2721 y(C-c)i(C-s)g(C-o)55 b(Sort)22
-b(the)f(summary-bu\013er)g(using)h(the)f(default)g(metho)r(d.)-364
-2790 y(With)h(a)g(pre\014x)f(these)h(functions)e(sort)j(in)f(rev)n
-(erse)f(order.)-364 2987 y Fj(Score)38 b(\(V)-9 b(alue\))36
-b(Commands)-364 3091 y Fi(Read)22 b(ab)r(out)g(Adaptiv)n(e)f(Scoring)g
-(in)h(the)f(online)g(info.)-364 3157 y(V)i(a)202 b Fg(Add)22
-b Fi(a)h(new)f(score)f(en)n(try)-5 b(,)21 b(sp)r(ecifying)f(all)i
-(elemen)n(ts.)-364 3224 y(V)h(c)205 b(Sp)r(ecify)20 b(a)i(new)g(score)g
-(\014le)f(as)i Fg(curren)n(t)p Fi(.)-364 3290 y(V)g(e)205
-b Fg(Edit)23 b Fi(the)e(curren)n(t)g(score)h(alist.)-364
-3356 y(V)h(f)214 b(Edit)22 b(a)g(score)g Fg(\014le)h
-Fi(and)f(mak)n(e)f(it)h(the)g(curren)n(t)f(one.)-364
-3423 y(V)i(m)180 b Fg(Mark)22 b Fi(all)g(articles)f(b)r(elo)n(w)h(a)g
-(giv)n(en)g(score)f(as)i(read.)-364 3489 y(V)g(s)209
-b(Set)22 b(the)f Fg(score)i Fi(of)f(this)g(article.)-364
-3556 y(V)h(t)209 b(Displa)n(y)22 b(all)g(score)g(rules)g(applied)e(to)j
-(this)f(article)f(\()p Fg(trac)n(k)p Fi(\).)-364 3622
-y(W)h(w)171 b(List)23 b Fg(w)n(ords)e Fi(used)h(in)g(scoring.)-364
-3689 y(V)h(x)200 b Fg(Expunge)22 b Fi(all)g(lo)n(w-scored)g(articles.)
-28 b([score])-364 3755 y(V)23 b(C)188 b Fg(Customize)17
-b Fi(the)f(curren)n(t)f(score)g(\014le)g(through)h(a)g(user-friendly)e
-(in)n(terface.)-364 3821 y(V)23 b(F)192 b Fg(Flush)22
-b Fi(the)f(cac)n(he)g(of)h(score)g(\014les.)-364 3888
-y(V)h(R)187 b Fg(Re-score)23 b Fi(the)f(summary)f(bu\013er.)-364
-3954 y(V)i(S)198 b(Displa)n(y)22 b(the)g Fg(score)h Fi(of)f(this)g
-(article.)-364 4021 y Fg(A)k(p)f(m)g(l)50 b Fi(Mak)n(e)22
-b(a)g(scoring)g(en)n(try)g(based)f(on)i(this)f(article.)-364
-4089 y(The)g(four)g(letters)f(stand)h(for:)-298 4156
-y Fg(A)p Fi(\)ction:)29 b(I\)ncrease,)21 b(L\)o)n(w)n(er;)-298
-4222 y Fg(p)p Fi(\)art:)29 b(a\)uthor)22 b(\(from\),)f(s\)ub)t(ject,)f
-(x\)refs)i(\(cross-p)r(osting\),)g(d\)ate,)f(l\)ines,)-364
-4288 y(message-i\)d,)h(t\)references)d(\(paren)n(t\),)i(f)5
-b(\)ollo)n(wup,)21 b(b\)o)r(dy)-5 b(,)21 b(h\)ead)g(\(all)h(headers\);)
--298 4355 y Fg(m)p Fi(\)atc)n(h)h(t)n(yp)r(e:)-231 4421
-y(string:)29 b(s\)ubstring,)21 b(e\)xact,)g(r\)egexp,)g(f)5
-b(\)uzzy)-5 b(,)-231 4488 y(date:)28 b(b\)efore,)21 b(a\)t,)h(n\)this,)
--231 4554 y(n)n(um)n(b)r(er:)27 b Fe(<)p Fi(,)22 b(=,)g
-Fe(>)p Fi(;)-298 4621 y Fg(l)p Fi(\)ifetime:)27 b(t\)emp)r(orary)-5
-b(,)21 b(p\)ermanen)n(t,)f(i\)mmediate.)-364 4687 y(If)i(y)n(ou)g(t)n
-(yp)r(e)g(the)f(second)g(letter)g(in)h(upp)r(ercase,)e(the)i(remaining)
-e(t)n(w)n(o)j(are)f(assumed)-364 4753 y(to)h(b)r(e)e(s\)ubstring)h(and)
-f(t\)emp)r(orary)-5 b(.)28 b(If)22 b(y)n(ou)g(t)n(yp)r(e)f(the)h(third)
-f(letter)g(in)h(upp)r(ercase,)-364 4820 y(the)g(last)g(one)g(is)g
-(assumed)g(to)g(b)r(e)g(t\)emp)r(orary)-5 b(.)-298 4886
-y(Extra)22 b(k)n(eys)g(for)g(man)n(ual)g(editing)f(of)h(a)g(score)g
-(\014le:)-364 4952 y(C-c)h(C-c)57 b(Finish)22 b(editing)e(the)i(score)g
-(\014le.)-364 5019 y(C-c)h(C-d)50 b(Insert)22 b(the)f(curren)n(t)g
-Fg(date)i Fi(as)f(n)n(um)n(b)r(er)f(of)h(da)n(ys.)-364
-5197 y Fj(Output)38 b(Articles)-364 5309 y Fi(O)23 b(o)53
-b(\(o,)22 b(C-o\))h(Sa)n(v)n(e)f(this)g(article)f(using)h(the)g
-(default)e(article)h(sa)n(v)n(er.)30 b([p/p])-364 5376
-y(O)23 b(b)49 b(Sa)n(v)n(e)22 b(this)g(article's)f Fg(b)r(o)r(dy)g
-Fi(in)h(plain)g(\014le)f(format)g([p/p])-364 5442 y(O)i(f)65
-b(Sa)n(v)n(e)22 b(this)g(article)f(in)h(plain)f Fg(\014le)i
-Fi(format.)29 b([p/p])1922 -317 y(O)22 b(F)62 b(lik)n(e)21
-b(O)h(f,)g(but)g(o)n(v)n(erwrite)g(\014le's)f(con)n(ten)n(ts.)28
-b([p/p])1922 -251 y(O)22 b(h)68 b(Sa)n(v)n(e)21 b(this)i(article)e(in)g
-Fg(mh)i Fi(folder)e(format.)28 b([p/p])1922 -184 y(O)22
-b(m)50 b(Sa)n(v)n(e)21 b(this)i(article)e(in)g Fg(mail)i
-Fi(format.)28 b([p/p])1922 -118 y(O)22 b(r)79 b(Sa)n(v)n(e)21
-b(this)i(article)e(in)g Fg(rmail)i Fi(format.)28 b([p/p])1922
--52 y(O)22 b(v)70 b(Sa)n(v)n(e)21 b(this)i(article)e(in)g
-Fg(vm)i Fi(format.)28 b([p/p])1922 15 y(O)22 b(p)68 b(\()p
-Fa(j)p Fi(\))21 b Fg(Pip)r(e)i Fi(this)f(article)f(to)i(a)f(shell)g
-(command.)27 b([p/p])1922 81 y(O)22 b(P)60 b Fg(Prin)n(t)22
-b Fi(this)g(article)f(using)h(Muttprin)n(t.)28 b([p/p])1922
-265 y Fj(Extract)36 b(Series)i(\(Uudeco)s(de)g(etc\))1922
-380 y Fi(Gn)n(us)22 b(recognizes)f(if)h(the)f(curren)n(t)g(article)g
-(is)h(part)g(of)g(a)h(series)f(\(m)n(ultipart)e(p)r(osting)1922
-446 y(whose)i(parts)g(are)g(iden)n(ti\014ed)e(b)n(y)i(n)n(um)n(b)r(ers)
-f(in)h(their)f(sub)t(jects,)g(e.g.)28 b(1/10.)11 b(.)g(.)f(10/10\))1922
-513 y(and)22 b(pro)r(cesses)f(the)g(series)h(accordingly)-5
-b(.)27 b(Y)-5 b(ou)22 b(can)g(mark)f(and)h(pro)r(cess)g(more)f(than)
-1922 579 y(one)g(series)h(at)h(a)f(time.)28 b(If)22 b(the)g(p)r(osting)
-f(con)n(tains)h(an)n(y)g(arc)n(hiv)n(es,)g(they)f(are)1922
-645 y(expanded)f(and)i(gathered)f(in)g(a)i(new)f(group.)1922
-712 y(X)g(b)50 b(Un-)p Fg(binhex)22 b Fi(these)f(series.)29
-b([p/p])1922 778 y(X)22 b(o)54 b(Simply)20 b Fg(output)i
-Fi(these)g(series)f(\(no)h(deco)r(ding\).)28 b([p/p])1922
-844 y(X)22 b(p)50 b(Unpac)n(k)21 b(these)g Fg(p)r(ostscript)i
-Fi(series.)29 b([p/p])1922 911 y(X)22 b(s)61 b(Un-)p
-Fg(shar)21 b Fi(these)h(series.)28 b([p/p])1922 977 y(X)22
-b(u)50 b Fg(Uudeco)r(de)23 b Fi(these)e(series.)29 b([p/p])1922
-1046 y(Eac)n(h)21 b(one)h(of)g(these)f(commands)g(has)i(four)e(v)l
-(arian)n(ts:)1922 1101 y(X)h Fg(z)120 b Fi(Deco)r(de)21
-b(these)g(series.)29 b([p/p])1922 1167 y(X)22 b Fg(Z)107
-b Fi(Deco)r(de)21 b(and)g(sa)n(v)n(e)i(these)e(series.)29
-b([p/p])1922 1233 y(X)22 b(v)g Fg(z)63 b Fi(Deco)r(de)21
-b(and)g(view)h(these)g(series.)28 b([p/p])1922 1300 y(X)22
-b(v)g Fg(Z)50 b Fi(Deco)r(de,)20 b(sa)n(v)n(e)j(and)f(view)g(these)f
-(series.)29 b([p/p])1922 1372 y(where)21 b Fg(z)i Fi(or)g
-Fg(Z)f Fi(iden)n(ti\014es)e(the)i(deco)r(ding)e(metho)r(d)g(\(b,)i(o,)g
-(p,)g(s,)h(u\).)1922 1438 y(An)f(alternativ)n(e)f(binding)f(for)i(the)g
-(most-often)f(used)h(of)g(these)f(commands)g(is)1922
-1504 y(C-c)h(C-v)h(C-v)51 b(\(X)22 b(v)h(u\))f(Uudeco)r(de)d(and)j
-(view)g(these)f(series.)29 b([p/p])1922 1702 y Fj(MIME)37
-b(op)s(erations)i(from)e(the)h(Summary-Bu\013er)1922
-1806 y Fi(F)-5 b(or)22 b(the)f(commands)g(op)r(erating)g(on)h(one)g
-(MIME)f(part)h(\(a)h(subset)e(of)1922 1872 y(gn)n(us-article-*\),)g(a)i
-(pre\014x)e(selects)g(whic)n(h)h(part)g(to)g(op)r(erate)f(on.)29
-b(If)22 b(the)g(p)r(oin)n(t)f(is)1922 1939 y(placed)f(o)n(v)n(er)j(a)f
-(MIME)g(button)f(in)h(the)f(article)g(bu\013er,)h(use)f(the)h(corresp)r
-(onding)1922 2005 y(bindings)f(for)h(the)f(article)g(bu\013er)h
-(instead.)1922 2071 y(K)g(v)160 b(\(b,)22 b(W)g(M)h(b\))e
-Fg(View)j Fi(the)d(MIME-part.)1922 2138 y(K)h(o)162 b
-Fg(Sa)n(v)n(e)22 b Fi(the)g(MIME)f(part.)1922 2204 y(K)h(c)165
-b Fg(Cop)n(y)22 b Fi(the)f(MIME)h(part.)1922 2271 y(K)g(e)165
-b(View)22 b(the)g(MIME)f(part)h Fg(externally)p Fi(.)1922
-2337 y(K)g(i)176 b(View)22 b(the)g(MIME)f(part)h Fg(in)n(ternally)p
-Fi(.)1922 2403 y(K)g Fa(j)175 b Fi(Pip)r(e)21 b(the)h(MIME)f(part)h(to)
-h(an)f(external)e(command.)1922 2470 y(K)i(b)158 b(Mak)n(e)22
-b(all)g(the)g(MIME)f(parts)i(ha)n(v)n(e)e(buttons)h(in)g(fron)n(t)g(of)
-g(them.)1922 2536 y(K)g(m)140 b(T)-5 b(ry)23 b(to)f(repair)f
-Fg(m)n(ultipart-headers)p Fi(.)1922 2603 y(K)h(C)148
-b(View)22 b(the)g(MIME)f(part)h(using)g(a)h(di\013eren)n(t)e
-Fg(c)n(harset)p Fi(.)1922 2669 y(X)h(m)142 b(Sa)n(v)n(e)22
-b(all)g(parts)h(matc)n(hing)e(a)h(MIME)g(t)n(yp)r(e)f(to)h(a)h
-(directory)-5 b(.)27 b([p/p])1922 2736 y(M-t)160 b(T)-5
-b(oggle)22 b(the)g(buttonized)e(displa)n(y)i(of)g(the)f(article)g
-(bu\013er.)1922 2802 y(W)h(M)g(w)50 b(Deco)r(de)21 b(RF)n(C2047-enco)r
-(ded)g(w)n(ords)i(in)f(the)f(article)g(headers.)1922
-2868 y(W)h(M)g(c)67 b(Deco)r(de)21 b(enco)r(ded)f(article)h(b)r(o)r
-(dies.)28 b([Pre\014x:)f(prompt)21 b(for)h(c)n(harset])1922
-2935 y(W)g(M)g(v)62 b(View)22 b(all)h(MIME)e(parts)h(in)g(the)g(curren)
-n(t)e(article.)1922 3114 y Fj(P)m(ost,)37 b(F)-9 b(ollo)m(wup,)38
-b(Reply)-9 b(,)37 b(F)-9 b(orw)m(ard,)38 b(Cancel)1922
-3217 y Fi(These)22 b(commands)e(put)i(y)n(ou)g(in)g(a)h(separate)e
-(news)h(or)h(mail)e(bu\013er.)29 b(See)21 b(the)g(section)1922
-3284 y(ab)r(out)g(comp)r(osing)g(messages)h(for)g(more)g(information.)
-1922 3350 y(S)g(p)141 b(\(a\))22 b Fg(P)n(ost)g Fi(an)g(article)f(to)i
-(this)f(group.)1922 3416 y(S)g(f)157 b(\(f)5 b(\))21
-b(P)n(ost)i(a)f Fg(follo)n(wup)g Fi(to)g(this)g(article.)1922
-3483 y(S)g(F)135 b(\(F\))22 b(P)n(ost)g(a)h Fg(follo)n(wup)e
-Fi(and)h(include)e(the)h(original.)29 b([p/p])1922 3549
-y(S)22 b(o)g(p)86 b(F)-5 b(orw)n(ard)22 b(this)g(article)f(as)i(a)f
-Fg(p)r(ost)g Fi(to)g(a)h(newsgroup.)1922 3616 y(S)f(M-c)66
-b(Send)21 b(a)h(complain)n(t)f(ab)r(out)h(excessiv)n(e)f(crossp)r
-(osting)h(to)h(the)e(author)h(of)h(this)2159 3682 y(article.)k([p/p])
-1922 3749 y(S)22 b(m)123 b(\(m\))21 b(Send)g(a)i Fg(mail)f
-Fi(to)h(some)e(other)h(p)r(erson.)1922 3815 y(S)g(r)152
-b(\(r\))22 b(Mail)g(a)g Fg(reply)g Fi(to)h(the)e(author)h(of)g(this)g
-(article.)1922 3881 y(S)g(R)130 b(\(R\))22 b(Mail)g(a)g
-Fg(reply)h Fi(and)e(include)f(the)i(original.)29 b([p/p])1922
-3948 y(S)22 b(B)h(r)83 b(Lik)n(e)21 b(S)h(r)h(but)e(ignore)h(the)f
-(Reply-T)-5 b(o:)29 b(header.)1922 4014 y(S)22 b(B)h(R)61
-b(Lik)n(e)21 b(S)h(R)h(but)f(ignore)f(the)h(Reply-T)-5
-b(o:)28 b(header.)1922 4081 y(S)22 b(w)131 b(Mail)21
-b(a)i Fg(wide)g Fi(reply)e(to)h(this)g(article.)1922
-4147 y(S)g(W)111 b(Mail)21 b(a)i Fg(wide)g Fi(reply)e(to)h(this)g
-(article)f(and)h(include)e(the)i(original.)1922 4213
-y(S)g(v)143 b(Mail)21 b(a)i Fg(v)n(ery)f Fi(wide)g(reply)f(to)h(this)g
-(article.)1922 4280 y(S)g(V)129 b(Mail)21 b(a)i Fg(v)n(ery)f
-Fi(wide)g(reply)f(to)h(this)g(article)f(and)h(include)e(the)i
-(original.)1922 4346 y(S)g(o)g(m)68 b(\(C-c)22 b(C-f)5
-b(\))22 b(F)-5 b(orw)n(ard)23 b(this)f(article)f(b)n(y)h
-Fg(mail)g Fi(to)h(a)f(p)r(erson.)1922 4413 y(S)g(D)g(b)69
-b(Resend)21 b Fg(b)r(ounced)h Fi(mail.)1922 4479 y(S)g(D)g(r)80
-b Fg(Resend)22 b Fi(mail)f(to)i(a)f(di\013eren)n(t)f(p)r(erson.)1922
-4546 y(S)h(D)g(e)76 b Fg(Edit)22 b Fi(and)g(resend.)1922
-4612 y(S)g(n)141 b(P)n(ost)21 b(a)g(follo)n(wup)g(via)g
-Fg(news)g Fi(ev)n(en)f(if)h(y)n(ou)g(got)g(the)f(message)h(through)f
-(mail.)1922 4678 y(S)i(N)129 b(P)n(ost)22 b(a)h(follo)n(wup)e(via)h
-Fg(news)h Fi(and)f(include)e(the)h(original)h(mail.)28
-b([p/p])1922 4745 y(S)22 b(c)148 b(\(C\))22 b Fg(Cancel)h
-Fi(this)f(article)f(\(only)h(w)n(orks)h(if)f(it)g(is)g(y)n(our)h(o)n
-(wn\).)29 b([p/p])1922 4811 y(S)22 b(s)152 b Fg(Sup)r(ersede)22
-b Fi(this)g(article)f(with)h(a)h(new)f(one)f(\(only)h(for)g(o)n(wn)h
-(articles\).)1922 4878 y(S)f(O)g(m)50 b(Digest)22 b(these)f(series)h
-(and)f(forw)n(ard)i(b)n(y)f Fg(mail)p Fi(.)29 b([p/p])1922
-4944 y(S)22 b(O)g(p)68 b(Digest)22 b(these)f(series)h(and)f(forw)n(ard)
-i(as)g(a)f Fg(p)r(ost)g Fi(to)g(a)h(newsgroup.)28 b([p/p])1922
-5010 y(S)22 b(u)141 b Fg(Uuenco)r(de)22 b Fi(a)h(\014le)e(and)h(p)r
-(ost)g(it)g(as)h(a)f(series.)1922 5082 y(If)g(y)n(ou)g(w)n(an)n(t)h(to)
-f(cancel)f(or)h(sup)r(ersede)e(an)j(article)e(y)n(ou)h(just)g(p)r
-(osted)f(\(b)r(efore)f(it)j(has)1922 5149 y(app)r(eared)d(on)i(the)g
-(serv)n(er\),)f(go)i(to)f(the)g(*p)r(ost-news*)g(bu\013er,)g(c)n(hange)
-f(`Message-ID')1922 5215 y(to)h(`Cancel')f(or)i(`Sup)r(ersedes')c(and)j
-(send)f(it)i(again)f(with)g(C-c)g(C-c.)1860 5838 y Fd(3)p
-eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop -364 -281 a Fj(Message)39 b(Comp)s(osition)-364
--177 y Fi(Press)22 b(C-c)h(?)30 b(in)22 b(the)f(comp)r
-(osition-bu\013er)f(to)j(get)f(this)g(information.)-364
--111 y(C-c)h(C-c)137 b(Send)21 b(message)h(and)g(exit.)28
-b([Pre\014x:)g(send)22 b(via)g(foreign)f(serv)n(er])-364
--44 y(C-c)i(C-s)141 b(Send)21 b(message.)29 b([Pre\014x:)f(send)21
-b(via)h(foreign)f(serv)n(er])-364 22 y(C-c)i(C-d)130
-b(Don't)22 b(send)g(message)g(\(sa)n(v)n(e)g(as)h Fg(draft)p
-Fi(\).)-364 89 y(C-c)g(C-k)132 b Fg(Kill)23 b Fi(message-bu\013er.)-364
-155 y(C-c)g(C-m)112 b Fg(Mail)18 b Fi(reply)g(to)g(the)g(address)g
-(near)g(p)r(oin)n(t.)27 b([Pre\014x:)f(include)16 b(the)i(original])
--364 221 y(C-c)23 b(C-o)134 b(Sort)22 b(headers.)-364
-288 y(C-c)h(C-e)137 b Fg(Elide)23 b Fi(region.)-364 354
-y(C-c)g(C-v)132 b(Kill)22 b(ev)n(erything)e(outside)i(region.)-364
-421 y(C-c)h(C-r)141 b(Do)23 b(a)f Fg(Rot-13)g Fi(on)g(the)g(b)r(o)r(dy)
--5 b(.)-364 487 y(C-c)23 b(C-w)120 b(Insert)22 b(signature)g(\(from)f
-(`message-signature-\014le'\).)-364 553 y(C-c)i(C-z)137
-b(Kill)22 b(ev)n(erything)e(up)i(to)h(signature.)-364
-620 y(C-c)g(C-y)132 b Fg(Y)-6 b(ank)22 b Fi(original)g(message.)-364
-686 y(C-c)h(C-q)132 b(Fill)22 b(the)g(y)n(ank)n(ed)f(message.)-364
-753 y(C-c)i(M-C-y)50 b Fg(Y)-6 b(ank)22 b Fi(a)g(bu\013er)g(and)g
-(quote)f(it.)-364 819 y(M-RET)136 b(Insert)29 b(four)f(newlines)f(and)i
-(format)f(quoted)f(text.)49 b([Pre\014x:)40 b(justify)28
-b(as)-6 886 y(w)n(ell])-364 952 y(C-c)23 b(M-r)128 b
-Fg(Rename)23 b Fi(message)f(bu\013er.)28 b([Pre\014x:)g(ask)23
-b(for)f(new)g(name])-364 1119 y Fc(Jumping)31 b(in)h(message-bu\013er)
--364 1223 y Fi(The)22 b(follo)n(wing)g(functions)f(create)g(the)g
-(header-\014eld)f(if)i(necessary)-5 b(.)-364 1289 y(C-c)23
-b(T)-5 b(AB)163 b(Mo)n(v)n(e)22 b(to)g Fg(signature)p
-Fi(.)-364 1356 y(C-c)h(C-b)194 b(Mo)n(v)n(e)22 b(to)g
-Fg(b)r(o)r(dy)p Fi(.)-364 1422 y(C-c)h(C-f)g(C-t)92 b(\(C-c)22
-b(C-t\))h(Mo)n(v)n(e)f(to)h Fg(T)-6 b(o:)p Fi(.)-364
-1488 y(C-c)23 b(C-f)g(C-c)88 b(Mo)n(v)n(e)22 b(to)g Fg(Cc:)p
-Fi(.)-364 1555 y(C-c)h(C-f)g(C-b)81 b(Mo)n(v)n(e)22 b(to)g
-Fg(Bcc:)p Fi(.)-364 1621 y(C-c)h(C-f)g(C-w)71 b(Mo)n(v)n(e)22
-b(to)g Fg(Fcc:)p Fi(.)-364 1688 y(C-c)h(C-f)g(C-s)92
-b(Mo)n(v)n(e)22 b(to)g Fg(Sub)t(ject:)p Fi(.)-364 1754
-y(C-c)h(C-f)g(C-r)92 b(Mo)n(v)n(e)22 b(to)g Fg(Reply-T)-6
-b(o:)p Fi(.)-364 1821 y(C-c)23 b(C-f)g(C-f)97 b(Mo)n(v)n(e)22
-b(to)g Fg(F)-6 b(ollo)n(wup-T)g(o:)p Fi(.)-364 1887 y(C-c)23
-b(C-f)g(C-n)81 b(\(C-c)22 b(C-n\))h(Mo)n(v)n(e)f(to)h
-Fg(Newsgroups:)p Fi(.)-364 1953 y(C-c)g(C-f)g(C-u)81
-b(Mo)n(v)n(e)22 b(to)g Fg(Summary:)p Fi(.)-364 2020 y(C-c)h(C-f)g(C-k)
-83 b(Mo)n(v)n(e)22 b(to)g Fg(Keyw)n(ords:)p Fi(.)-364
-2086 y(C-c)h(C-f)g(C-d)81 b(Mo)n(v)n(e)22 b(to)g Fg(Distribution:)p
-Fi(.)-364 2153 y(C-c)h(C-f)g(C-m)63 b(Mo)n(v)n(e)22 b(to)g
-Fg(Mail-F)-6 b(ollo)n(wup-T)g(o:)p Fi(.)-364 2219 y(C-c)23
-b(C-f)g(C-o)85 b(Mo)n(v)n(e)22 b(to)g Fg(F)-6 b(rom:)p
-Fi(.)-364 2285 y(C-c)23 b(C-f)g(C-a)85 b(Insert)27 b(a)i(reasonable)e
-Fg(Mail-F)-6 b(ollo)n(wup-T)g(o:)39 b Fi(for)28 b(an)g(unsubscrib)r(ed)
-58 2352 y(list.)h([Pre\014x:)f(include)20 b(addresses)h(in)h
-Fg(Cc:)p Fi(])-364 2418 y(C-c)h(C-f)g(T)-5 b(AB)50 b(\(C-c)22
-b(C-u\))h(Mo)n(v)n(e)f(to)h Fg(Imp)r(ortance:)p Fi(.)-364
-2485 y(C-c)g(M-n)181 b(Insert)22 b Fg(Disp)r(osition-Noti\014cation-T)
--6 b(o:)29 b Fi(\(request)21 b(receipt\).)-364 2657 y
-Fc(A)m(ttac)m(hmen)m(ts/MML)-364 2770 y Fi(C-c)i(C-m)g(f)135
-b(\(C-c)22 b(C-a\))i(A)n(ttac)n(h)e Fg(\014le)p Fi(.)-364
-2836 y(C-c)h(C-m)g(b)119 b(A)n(ttac)n(h)22 b(con)n(ten)n(ts)f(of)27
-b Fg(bu\013er)p Fi(.)-364 2902 y(C-c)c(C-m)g(e)126 b(A)n(ttac)n(h)22
-b Fg(external)h Fi(\014le)e(\(ftp..\).)-364 2969 y(C-c)i(C-m)g(P)111
-b(Create)23 b(MIME-)p Fg(preview)h Fi(\(new)g(bu\013er\).)32
-b([Pre\014x:)e(sho)n(w)24 b(ra)n(w)h(MIME)61 3035 y(preview])-364
-3102 y(C-c)e(C-m)g(v)121 b Fg(V)-6 b(alidate)22 b Fi(article.)-364
-3168 y(C-c)h(C-m)g(p)119 b(Insert)22 b Fg(part)p Fi(.)-364
-3235 y(C-c)h(C-m)g(m)101 b(Insert)22 b Fg(m)n(ulti)p
-Fi(-part.)-364 3301 y(C-c)h(C-m)g(q)121 b Fg(Quote)23
-b Fi(region.)-364 3367 y(C-c)g(C-m)g(c)e(s)79 b(Encrypt)20
-b(message)i(using)h Fg(S/MIME)p Fi(.)-364 3434 y(C-c)g(C-m)g(c)e(o)72
-b(Encrypt)20 b(message)i(using)g(PGP)-5 b(.)-364 3500
-y(C-c)23 b(C-m)g(c)e(p)68 b(Encrypt)20 b(message)i(using)h
-Fg(PGP/MIME)p Fi(.)-364 3567 y(C-c)g(C-m)g(s)f(s)82 b(Sign)21
-b(message)h(using)h Fg(S/MIME)p Fi(.)-364 3633 y(C-c)g(C-m)g(s)f(o)75
-b(Sign)21 b(message)h(using)g(PGP)-5 b(.)-364 3699 y(C-c)23
-b(C-m)g(s)f(p)71 b(Sign)21 b(message)h(using)h Fg(PGP/MIME)p
-Fi(.)-364 3766 y(C-c)g(C-m)g(C-n)50 b(Remo)n(v)n(e)21
-b(securit)n(y)g(related)g(MML)h(tags)h(from)f(message.)-364
-3945 y Fj(Mark)38 b(Articles)-364 4037 y Fi(d)227 b(\(M)26
-b(d,)g(M)f(r\))h(Mark)f(this)h(article)e(as)i(read)f(and)g(mo)n(v)n(e)h
-(to)f(the)g(next)g(one.)-100 4103 y([scop)r(e])-364 4170
-y(D)214 b(Mark)22 b(this)g(article)f(as)i(read)f(and)f(mo)n(v)n(e)h(to)
-h(the)e(previous)g(one.)29 b([scop)r(e])-364 4236 y(!)245
-b(\(u,)25 b(M)f(!,)h(M)f(t\))g(Tic)n(k)g(this)h(article)e(\(mark)h(it)g
-(as)h(in)n(teresting\))e(and)h(mo)n(v)n(e)-100 4303 y(to)f(the)e(next)h
-(one.)28 b([scop)r(e])-364 4369 y(U)215 b(Tic)n(k)22
-b(this)g(article)f(and)h(mo)n(v)n(e)g(to)g(the)g(previous)f(one.)29
-b([scop)r(e])-364 4435 y(M)22 b(?)151 b(\(?\))30 b(Mark)21
-b(this)h(article)f(as)h(dorman)n(t)f(\(only)h(follo)n(wups)f(are)h(in)n
-(teresting\).)-100 4502 y([scop)r(e])-364 4568 y(M)g(D)132
-b(Sho)n(w)21 b(all)g Fg(dorman)n(t)g Fi(articles)f(\(normally)g(they)g
-(are)h(hidden)e(unless)h(they)-100 4635 y(ha)n(v)n(e)i(an)n(y)g(follo)n
-(wups\).)-364 4701 y(M)g(M-D)50 b(Hide)22 b(all)g Fg(dorman)n(t)f
-Fi(articles.)-364 4768 y(C-w)148 b(Mark)22 b(all)g(articles)g(b)r(et)n
-(w)n(een)e(p)r(oin)n(t)i(and)g(mark)g(as)g(read.)-364
-4834 y(M-u)145 b(\(M)24 b(SPC,)g(M)g(c\))f(Clear)h(all)g(marks)g(from)g
-(this)g(article)e(and)i(mo)n(v)n(e)g(to)g(the)-100 4900
-y(next)e(one.)28 b([scop)r(e])-364 4967 y(M-U)133 b(Clear)28
-b(all)f(marks)g(from)g(this)g(article)f(and)h(mo)n(v)n(e)g(to)h(the)f
-(previous)f(one.)-100 5033 y([scop)r(e])-364 5100 y(M)c(e)152
-b(\(E,)22 b(M)g(x\))g(Mark)g(this)g(article)f(as)i Fg(expirable)p
-Fi(.)29 b([scop)r(e])-364 5166 y(M)22 b(k)147 b(\(k\))30
-b Fg(Kill)g Fi(all)f(articles)f(with)i(the)f(same)g(sub)t(ject)e(then)h
-(select)g(the)h(next)-100 5232 y(unread)21 b(one.)1922
--317 y(M)h(K)187 b(\(C-k\))23 b Fg(Kill)g Fi(all)f(articles)f(with)i
-(the)e(same)h(sub)t(ject)e(as)j(this)f(one.)1922 -251
-y(M)g(C)191 b Fg(Catc)n(h-up)23 b Fi(the)e(articles)g(that)h(are)g(not)
-g(tic)n(k)n(ed)g(and)f(not)h(dorman)n(t.)1922 -184 y(M)g(C-c)139
-b Fg(Catc)n(h-up)23 b Fi(all)f(articles)f(in)h(this)g(group.)1922
--118 y(M)g(H)189 b Fg(Catc)n(h-up)23 b Fi(\(mark)e(read\))h(this)g
-(group)g(to)g(p)r(oin)n(t)g(\(to-)p Fg(here)p Fi(\).)1922
--52 y(M)g(b)201 b(Set)22 b(a)g Fg(b)r(o)r(okmark)f Fi(in)h(this)g
-(article.)1922 15 y(M)g(B)192 b(Remo)n(v)n(e)22 b(the)f
-Fg(b)r(o)r(okmark)g Fi(from)h(this)g(article.)1922 81
-y(M)g(M-r)130 b(\(x\))22 b(Expunge)f(all)h Fg(read)g
-Fi(articles)f(from)h(this)g(group.)1922 148 y(M)g(M-C-r)61
-b(Expunge)21 b(all)h(articles)f(ha)n(ving)h(a)g(giv)n(en)g(mark.)1922
-214 y(M)g(S)201 b(\(C-c)23 b(M-C-s\))g Fg(Sho)n(w)f Fi(all)g(expunged)e
-(articles.)1922 280 y(M)i(M)g(C-h)50 b(Displa)n(ys)23
-b(some)f(more)f(k)n(eys)h(doing)g(tic)n(king)f(sligh)n(tly)h
-(di\013eren)n(tly)-5 b(.)1922 349 y(The)22 b(v)l(ariable)f(`gn)n
-(us-summary-goto-unread')g(con)n(trols)h(what)h(happ)r(ens)d(after)i(a)
-1922 415 y(mark)g(has)g(b)r(een)f(set)h(\(C-x)h(C-i)g(g)f(Setting)f
-(Marks)h(RET\))1922 596 y Fc(Mark)32 b(Based)g(on)g(Score)1922
-689 y Fi(M)22 b(V)g(c)75 b Fg(Clear)22 b Fi(all)g(marks)h(from)e(all)h
-(high-scored)f(articles.)28 b([score])1922 755 y(M)22
-b(V)g(k)70 b Fg(Kill)23 b Fi(all)f(lo)n(w-scored)g(articles.)28
-b([score])1922 822 y(M)22 b(V)g(m)50 b(Mark)22 b(all)g(high-scored)f
-(articles)g(with)h(a)h(giv)n(en)e Fg(mark)p Fi(.)29 b([score])1922
-888 y(M)22 b(V)g(u)68 b(Mark)22 b(all)g(high-scored)f(articles)g(as)i
-(in)n(teresting)e(\(tic)n(k)g(them\).)28 b([score])1922
-1055 y Fc(The)k(Pro)s(cess)f(Mark)1922 1159 y Fi(These)22
-b(commands)e(set)j(and)e(remo)n(v)n(e)h(the)f(pro)r(cess)h(mark)f
-(\(#\).)29 b(Y)-5 b(ou)22 b(only)g(need)f(to)1922 1226
-y(use)h(it)g(if)g(the)f(set)h(of)g(articles)g(y)n(ou)g(w)n(an)n(t)h(to)
-f(op)r(erate)f(on)h(is)h(non-con)n(tiguous.)28 b(Else)1922
-1292 y(use)22 b(a)g(n)n(umeric)e(pre\014x.)1922 1358
-y(M)i(P)g(p)64 b(\(#,)22 b(M)g(#\))g(Mark)g(this)g(article.)1922
-1425 y(M)g(P)g(u)64 b(\(M-#,)22 b(M)g(M-#\))g Fg(unmark)f
-Fi(this)i(article.)1922 1491 y(M)f(P)g(b)64 b(Mark)22
-b(all)g(articles)f(in)h Fg(bu\013er)p Fi(.)1922 1557
-y(M)g(P)g(r)75 b(Mark)22 b(all)g(articles)f(in)h(the)g
-Fg(region)p Fi(.)1922 1624 y(M)g(P)g(g)68 b(Unmark)22
-b(all)g(articles)f(in)h(the)f(region.)1922 1690 y(M)h(P)g(R)53
-b(Mark)22 b(all)g(articles)f(matc)n(hing)g(a)i Fg(regexp)p
-Fi(.)1922 1757 y(M)f(P)g(G)50 b(Unmark)22 b(all)g(articles)f(matc)n
-(hing)g(a)h(regexp.)1922 1823 y(M)g(P)g(t)75 b(Mark)22
-b(all)g(articles)f(in)h(this)g(\(sub\))p Fg(thread)p
-Fi(.)1922 1889 y(M)g(P)g(T)54 b(Unmark)22 b(all)g(articles)f(in)h(this)
-g(\(sub\))p Fg(thread)p Fi(.)1922 1956 y(M)g(P)g(s)75
-b(Mark)22 b(all)g(articles)f(in)h(the)g(curren)n(t)f
-Fg(series)p Fi(.)1922 2022 y(M)h(P)g(S)64 b(Mark)22 b(all)g
-Fg(series)h Fi(that)f(already)f(con)n(tain)h(a)g(mark)n(ed)g(article.)
-1922 2089 y(M)g(P)g(a)68 b(Mark)22 b Fg(all)g Fi(articles)g(\(in)f
-(series)h(order\).)1922 2155 y(M)g(P)g(U)52 b Fg(unmark)22
-b Fi(all)g(articles.)1922 2222 y(M)g(P)g(i)82 b Fg(In)n(v)n(ert)22
-b Fi(the)g(list)g(of)g(pro)r(cess-mark)n(ed)f(articles.)1922
-2288 y(M)h(P)g(k)66 b(Push)24 b(the)g(curren)n(t)g(pro)r(cess-mark)f
-(set)i(on)n(to)g(stac)n(k)g(and)f(unmark)g(all)g(arti-)2172
-2354 y(cles.)1922 2421 y(M)e(P)g(y)66 b(P)n(op)22 b(pro)r(cess-mark)f
-(set)i(from)e(stac)n(k)h(and)g(restore)g(it.)1922 2487
-y(M)g(P)g(w)54 b(Push)22 b(pro)r(cess-mark)f(set)h(on)g(the)g(stac)n
-(k.)1922 2554 y(M)g(P)g(v)66 b(Mark)22 b(all)g(articles)f(with)i(score)
-e(o)n(v)n(er)i(the)e(default)g(score.)28 b([Pre\014x:)g(score])1922
-2721 y Fc(Mark)k(Indication-Characters)1922 2825 y Fi(If)22
-b(a)g(command)f(directly)f(sets)j(a)f(mark,)g(it)g(is)g(sho)n(wn)h(in)f
-(paren)n(theses.)p 1922 2848 2203 4 v 1920 2981 4 133
-v 1972 2894 a Fg(\\Read")h(Marks.)k Fi(All)21 b(these)f(marks)h(app)r
-(ear)f(in)g(the)h(\014rst)f(column)g(of)h(the)f(sum-)1972
-2961 y(mary)h(line,)g(and)h(so)h(are)f(m)n(utually)f(exclusiv)n(e.)p
-4123 2981 V 1922 2984 2203 4 v 1920 3050 4 67 v 1972
-3030 a(`)h(')p 2080 3050 V 99 w(\(M-u,)g(M)g(SPC,)g(M)g(c\))g(Not)g
-(read.)p 4123 3050 V 1920 3117 V 1992 3097 a(!)p 2080
-3117 V 120 w(\(!,)g(M)g(!,)g(M)g(t\))h(Tic)n(k)n(ed)e(\(in)n
-(teresting\).)p 4123 3117 V 1920 3183 V 1986 3163 a(?)p
-2080 3183 V 114 w(\(?,)i(M)f(?\))g(Dorman)n(t)g(\(only)g(follo)n(wups)g
-(are)g(in)n(teresting\).)p 4123 3183 V 1920 3250 V 1979
-3230 a(E)p 2080 3250 V 107 w(\(E,)g(M)g(e,)g(M)g(x\))g
-Fg(Expirable)p Fi(.)29 b(Only)22 b(has)g(e\013ect)f(in)h(mail)g
-(groups.)p 4123 3250 V 1920 3316 V 1976 3296 a(G)p 2080
-3316 V 104 w(\(C,)h(B)g(DEL\))e(Canceled)g(article)g(\(or)h(deleted)e
-(in)i(mailgroups\).)p 4123 3316 V 1920 3382 V 1985 3362
-a($)p 2080 3382 V 113 w(\(M-d,)g(M)g(s)h(x,)f(S)g(x\).)29
-b(Mark)n(ed)22 b(as)g(spam.)p 4123 3382 V 1922 3386 2203
-4 v 1922 3402 V 1920 3602 4 200 v 1972 3449 a(The)17
-b(marks)h(b)r(elo)n(w)f(mean)f(that)i(the)f(article)f(is)i(read)f
-(\(killed,)g(unin)n(teresting\),)f(and)1972 3515 y(ha)n(v)n(e)28
-b(more)f(or)i(less)f(the)g(same)g(e\013ect.)47 b(Some)27
-b(commands)g(ho)n(w)n(ev)n(er)h(explicitly)1972 3582
-y(di\013eren)n(tiate)20 b(b)r(et)n(w)n(een)h(them)g(\(e.g.)g(M)h
-(M-C-r,)h(adaptiv)n(e)f(scoring\).)p 4123 3602 V 1922
-3605 2203 4 v 1920 3671 4 67 v 1989 3651 a(r)p 2080 3671
-V 116 w(\(d,)g(M)g(d,)g(M)g(r\))g(Deleted)f(\(mark)n(ed)g(as)i
-Fg(read)p Fi(\).)p 4123 3671 V 1920 3738 V 1978 3718
-a(C)p 2080 3738 V 106 w(\(M)f(C;)h(M)f(C-c;)g(M)g(H;)h(c,)e(Z)i(c;)f(Z)
-g(n;)g(Z)h(C\))f(Killed)f(b)n(y)h Fg(catc)n(h-up)p Fi(.)p
-4123 3738 V 1920 3804 V 1980 3784 a(F)p 2080 3804 V 108
-w(SOUP)n(ed)f(article.)28 b(See)21 b(the)h(man)n(ual.)p
-4123 3804 V 1920 3871 V 1976 3851 a(O)p 2080 3871 V 104
-w Fg(Old)h Fi(\(read)e(in)h(a)h(previous)e(session\).)p
-4123 3871 V 1920 3937 V 1976 3917 a(K)p 2080 3937 V 104
-w(\(k,)h(M)g(k;)g(C-k,)h(M)f(K\))g Fg(Killed)p Fi(.)p
-4123 3937 V 1920 4003 V 1972 3983 a(M)p 2080 4003 V 99
-w(Article)f(mark)n(ed)g(as)i(read)f(b)n(y)g(duplicate)e(suppression.)p
-4123 4003 V 1920 4070 V 1976 4050 a(Q)p 2080 4070 V 104
-w(Article)h(is)i(part)f(of)g(a)g(sparse)g(thread)g(\(see)f
-(\\Threading")h(in)f(the)h(man)n(ual\).)p 4123 4070 V
-1920 4136 V 1978 4116 a(R)p 2080 4136 V 105 w Fg(Read)g
-Fi(\(view)n(ed)f(in)h(actualit)n(y\).)p 4123 4136 V 1920
-4203 V 1977 4183 a(X)p 2080 4203 V 105 w(Killed)f(b)n(y)h(a)h(kill)e
-(\014le.)p 4123 4203 V 1920 4269 V 1977 4249 a(Y)p 2080
-4269 V 105 w(Killed)g(due)g(to)i(lo)n(w)f(score.)p 4123
-4269 V 1922 4272 2203 4 v 1922 4367 V 1920 4434 4 67
-v 1972 4414 a Fg(Marks)i(not)h(a\013ecting)g(visibilit)n(y)p
-4123 4434 V 1922 4437 2203 4 v 1920 4570 4 133 v 1974
-4483 a Fi(#)p 2080 4570 V 102 w(\(#,)f(M)g(#,)g(M)g(P)g(p\))g(Pro)r
-(cessable)e(\(will)i(b)r(e)g(a\013ected)e(b)n(y)i(the)g(next)f(op)r
-(era-)2131 4550 y(tion\).)29 b([2])p 4123 4570 V 1920
-4636 4 67 v 1977 4616 a(A)p 2080 4636 V 105 w Fg(Answ)n(ered)23
-b Fi(\(follo)n(w)n(ed-up)e(or)i(replied\).)k([2])p 4123
-4636 V 1920 4703 V 1980 4683 a(F)p 2080 4703 V 108 w(F)-5
-b(orw)n(arded.)29 b([2])p 4123 4703 V 1920 4769 V 1985
-4749 a Fa(\003)p 2080 4769 V 112 w Fi(Cac)n(hed.)g([2])p
-4123 4769 V 1920 4835 V 1983 4815 a(S)p 2080 4835 V 111
-w(Sa)n(v)n(ed.)g([2])p 4123 4835 V 1920 4902 V 1977 4882
-a(N)p 2080 4902 V 105 w(Recen)n(tly)21 b(arriv)n(ed.)28
-b([2])p 4123 4902 V 1920 4968 V 1992 4948 a(.)p 2080
-4968 V 120 w(Unseen.)g([2])p 4123 4968 V 1920 5035 V
-1976 5015 a(+)p 2080 5035 V 104 w(Ov)n(er)22 b(default)f(score.)28
-b([3])p 4123 5035 V 1920 5101 V 1976 5081 a Fa(\000)p
-2080 5101 V 103 w Fi(Under)21 b(default)g(score.)29 b([3])p
-4123 5101 V 1920 5234 4 133 v 1976 5148 a(=)p 2080 5234
-V 104 w(Has)c(c)n(hildren)e(\(thread)g(underneath)g(it\).)36
-b(Add)24 b(`\045e')f(to)i(`gn)n(us-summary-)2131 5214
-y(line-format'.)j([3])p 4123 5234 V 1922 5237 2203 4
-v 1860 5838 a Fd(4)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop -364 -281 a Fj(Summary-Unplugged)-364
--169 y Fi(J)22 b(#)132 b Fg(Mark)21 b Fi(the)h(article)f(for)h(do)n
-(wnloading.)-364 -103 y(J)g(M-#)50 b Fg(Unmark)22 b Fi(the)g(article)e
-(for)i(do)n(wnloading.)-364 -36 y(@)192 b Fg(T)-6 b(oggle)22
-b Fi(whether)f(to)h(do)n(wnload)g(the)g(article.)-364
-30 y(J)g(c)157 b(Mark)22 b(all)g(undo)n(wnloaded)f(articles)g(as)i
-(read)e(\()p Fg(catc)n(h-up)p Fi(\).)-364 97 y(J)h(u)150
-b(Do)n(wnload)22 b(all)g(do)n(wnloadable)g(articles)f(from)g(group.)
--364 275 y Fj(Mail-Group)39 b(Commands)-364 379 y Fi(These)22
-b(commands)f(\(except)f(`B)j(c'\))e(are)h(only)g(v)l(alid)g(in)g(a)g
-(mail)g(group.)-364 449 y(B)h(DEL)95 b(\(B)16 b(bac)n(kspace,)g(B)g
-(delete\))e Fg(Delete)k Fi(the)d(mail)g(article)f(from)h(disk)h(\(!\).)
-27 b([p/p])-364 515 y(B)c(B)185 b(Crossp)r(ost)23 b(this)f(article)f
-(to)i(another)e(group.)-364 581 y(B)i(c)201 b Fg(Cop)n(y)22
-b Fi(this)g(article)f(from)g(an)n(y)h(group)g(to)h(a)f(mail)g(group.)29
-b([p/p])-364 648 y(B)23 b(e)201 b Fg(Expire)23 b Fi(all)f(expirable)e
-(articles)h(in)h(this)g(group.)29 b([p/p])-364 714 y(B)23
-b(i)212 b Fg(Imp)r(ort)23 b Fi(a)f(random)f(\014le)h(in)n(to)g(this)g
-(group.)-364 781 y(B)h(I)207 b(Create)22 b(an)g(empt)n(y)f(article)g
-(in)h(this)g(group.)-364 847 y(B)h(m)176 b Fg(Mo)n(v)n(e)22
-b Fi(the)f(article)g(from)h(one)f(mail)h(group)g(to)g(another.)29
-b([p/p])-364 914 y(B)23 b(p)194 b(Query)22 b(whether)f(the)g(article)g
-(w)n(as)i Fg(p)r(osted)g Fi(as)f(w)n(ell.)-364 980 y(B)h(q)196
-b Fg(Query)23 b Fi(where)e(the)h(article)f(will)h(end)f(up)h(after)f
-(fancy)g(splitting)-364 1046 y(B)i(r)205 b Fg(Resp)r(o)r(ol)22
-b Fi(this)g(mail)f(article.)28 b([p/p])-364 1113 y(B)23
-b(t)205 b Fg(T)-6 b(race)23 b Fi(the)f(fancy)f(splitting)g(patterns)h
-(applied)e(to)j(this)f(article.)-364 1179 y(B)h(w)184
-b(\(e\))22 b(Edit)f(this)h(article.)-364 1246 y(B)h(M-C-e)50
-b Fg(Expunge)18 b Fi(\(delete)e(from)h(disk\))h(all)g(expirable)e
-(articles)i(in)f(this)i(group)e(\(!\).)-64 1312 y([p/p])-364
-1378 y(K)22 b(E)182 b Fg(Encrypt)23 b Fi(article)e(b)r(o)r(dy)-5
-b(.)28 b([p/p])-364 1557 y Fj(Draft-Group)38 b(Commands)-364
-1661 y Fi(The)22 b(\\drafts"-group)g(con)n(tains)g(messages)g(that)g
-(ha)n(v)n(e)g(b)r(een)e(sa)n(v)n(ed)j(but)e(not)h(sen)n(t)-364
-1728 y(and)g(rejected)e(articles.)-364 1794 y(D)j(e)151
-b Fg(edit)23 b Fi(message.)-364 1860 y(D)g(s)155 b Fg(Send)22
-b Fi(message.)29 b([p/p])-364 1926 y(D)23 b(S)144 b Fg(Send)22
-b Fi(all)h(messages.)-364 1993 y(D)g(t)155 b Fg(T)-6
-b(oggle)22 b Fi(sending)f(\(mark)h(as)h(unsendable\).)-364
-2059 y(B)g(DEL)49 b Fg(Delete)25 b Fi(message)d(\(lik)n(e)f(in)h
-(mailgroup\).)-364 2238 y Fj(Exit)37 b(the)g(Summary-Bu\013er)-364
-2350 y Fi(Z)23 b(Z)61 b(\(q,)22 b(Z)h(Q\))f(Exit)g(this)g(group.)-364
-2416 y(Z)h(E)56 b(\(Q\))22 b Fg(Exit)h Fi(without)f(up)r(dating)e(the)i
-(group)g(information.)-364 2483 y(Z)h(c)71 b(\(c\))22
-b(Mark)g(all)g(un)n(tic)n(k)n(ed)f(articles)g(as)i(read)e(\()p
-Fg(catc)n(h-up)p Fi(\))i(and)f(exit.)-364 2549 y(Z)h(C)54
-b(Mark)22 b(all)g(articles)f(as)i(read)f(\()p Fg(catc)n(h-up)p
-Fi(\))g(and)g(exit.)-364 2615 y(Z)h(n)64 b(Mark)22 b(all)g(articles)f
-(as)i(read)f(and)g(go)g(to)g(the)g Fg(next)h Fi(group.)-364
-2682 y(Z)g(N)52 b(Exit)22 b(and)f(go)i(to)f Fg(the)h
-Fi(next)f(group.)-364 2748 y(Z)h(P)56 b(Exit)22 b(and)f(go)i(to)f(the)g
-Fg(previous)f Fi(group.)-364 2815 y(Z)i(G)50 b(\(M-g\))22
-b(Chec)n(k)g(for)g(new)g(articles)f(in)h(this)g(group)g(\()p
-Fg(get)p Fi(\).)-364 2881 y(Z)h(R)53 b(\(C-x)25 b(C-s\))g(Exit)e(this)g
-(group,)h(and)f(then)g(en)n(ter)g(it)h(again)f(\()p Fg(reen)n(ter)p
-Fi(\).)36 b([Pre\014x:)-200 2948 y(select)21 b(all)h(articles,)f(read)h
-(and)g(unread.])-364 3014 y(Z)h(s)75 b(Up)r(date)21 b(and)h(sa)n(v)n(e)
-g(the)g(dribble)e(bu\013er.)29 b([Pre\014x:)f(sa)n(v)n(e)22
-b(.newsrc*)g(as)h(w)n(ell])-364 3219 y Ff(Article)46
-b(Mo)t(de)e(\(reading\))-364 3356 y Fi(The)22 b(normal)g(na)n(vigation)
-f(k)n(eys)i(w)n(ork)f(in)g(Article)f(mo)r(de.)28 b(Some)21
-b(additional)g(k)n(eys)-364 3422 y(are:)-364 3477 y(C-c)i(^)157
-b(Get)22 b(the)g(article)f(with)h(the)f(Message-ID)i(near)e(p)r(oin)n
-(t.)-364 3543 y(C-c)i(RET)50 b(Send)21 b(reply)g(to)h(address)g(near)g
-(p)r(oin)n(t.)-364 3610 y(h)275 b(Go)23 b(to)f(the)g
-Fg(header)p Fi(-line)f(of)h(the)g(article)f(in)h(the)f
-(summary-bu\013er.)-364 3676 y(s)286 b(Go)23 b(to)f Fg(summary)q
-Fi(-bu\013er.)-364 3742 y(RET)172 b(\(middle)21 b(mouse)h(button\))g
-(Activ)l(ate)g(the)g(button)g(at)h(p)r(oin)n(t)f(to)h(follo)n(w)g(an)
--52 3809 y(URL)g(or)f(Message-ID.)-364 3875 y(T)-5 b(AB)175
-b(Mo)n(v)n(e)22 b(the)f(p)r(oin)n(t)h(to)g(the)g(next)f(button.)-364
-3942 y(M-T)-5 b(AB)93 b(Mo)n(v)n(e)22 b(p)r(oin)n(t)f(to)i(previous)e
-(button.)-364 4120 y Fj(W)-9 b(ash)38 b(the)f(Article-Bu\013er)-364
-4213 y Fi(W)22 b(6)72 b(T)-5 b(ranslate)22 b(a)g(base64)g(article.)-364
-4279 y(W)g(a)72 b(Strip)21 b(certain)g Fg(headers)h Fi(from)g(b)r(o)r
-(dy)-5 b(.)-364 4346 y(W)22 b(b)68 b(Mak)n(e)27 b(Message-IDs)i(and)e
-(URLs)i(in)e(the)h(article)e(mouse-clic)n(k)l(able)g
-Fg(but-)-170 4412 y(tons)p Fi(.)-364 4478 y(W)c(c)75
-b(T)-5 b(ranslate)20 b(CRLF-pairs)h(to)g(LF)f(and)g(then)g(the)g
-(remaining)e(CR's)k(to)e(LF's.)-364 4545 y(W)i(d)68 b(T)-5
-b(reat)22 b Fg(dum)n(b)r(quotes)p Fi(.)-364 4611 y(W)g(e)75
-b(T)-5 b(reat)22 b Fg(emphasized)g Fi(text.)-364 4678
-y(W)g(h)68 b(T)-5 b(reat)22 b Fg(HTML)p Fi(.)-364 4744
-y(W)g(l)86 b(\(w\))22 b(Remo)n(v)n(e)g(page)g(breaks)g(\()p
-Fg(^L)p Fi(\))f(from)h(the)f(article.)-364 4810 y(W)h(m)50
-b Fg(Morse)22 b Fi(deco)r(de)e(article.)-364 4877 y(W)i(o)72
-b(T)-5 b(reat)22 b Fg(o)n(v)n(erstrik)n(e)g Fi(or)g(underline)e(\(^H)p
-838 4877 20 4 v 24 w(\))i(in)g(the)g(article.)-364 4943
-y(W)g(p)68 b(V)-5 b(erify)21 b(X-)p Fg(PGP)p Fi(-Sig)h(header.)-364
-5010 y(W)g(q)70 b(T)-5 b(reat)22 b Fg(quoted)p Fi(-prin)n(table)e(in)i
-(the)g(article.)-364 5076 y(W)g(r)79 b(\(C-c)22 b(C-r\))h(Do)g(a)f
-(Caesar)h Fg(rotate)g Fi(\(rot13\))f(on)g(the)g(article.)-364
-5143 y(W)g(s)79 b(V)-5 b(erify)21 b(\(and)g(decrypt\))g(a)h
-Fg(signed)g Fi(message.)-364 5209 y(W)g(t)79 b(\(t\))22
-b Fg(T)-6 b(oggle)22 b Fi(displa)n(y)g(of)g(all)g(headers.)-364
-5275 y(W)g(u)68 b Fg(Unsplit)22 b Fi(brok)n(en)g(URLs.)1922
--317 y(W)g(v)125 b(\(v\))22 b(T)-5 b(oggle)22 b(p)r(ermanen)n(t)e
-Fg(v)n(erb)r(ose)i Fi(displa)n(ying)g(of)g(all)g(headers.)1922
--251 y(W)g(w)113 b(Do)23 b(w)n(ord)f Fg(wrap)g Fi(in)g(the)g(article.)
-1922 -184 y(W)g(B)114 b(Add)22 b(clic)n(k)l(able)f Fg(buttons)g
-Fi(to)i(the)e(article)g(headers.)1922 -118 y(W)h(C)113
-b Fg(Capitalize)23 b Fi(\014rst)f(w)n(ord)h(in)f(eac)n(h)f(sen)n
-(tence.)1922 -52 y(W)h(Q)109 b(Fill)22 b(long)g(lines.)1922
-15 y(W)g(Z)120 b(T)-5 b(ranslate)22 b(a)h(HZ-enco)r(ded)d(article.)1922
-81 y(W)i(G)h(u)49 b Fg(Unfold)22 b Fi(folded)f(header)g(lines.)1922
-148 y(W)h(G)h(f)65 b Fg(F)-6 b(old)22 b Fi(all)g(header)f(lines.)1922
-214 y(W)h(G)h(n)49 b(Unfold)21 b Fg(Newsgroups:)29 b
-Fi(and)22 b(F)-5 b(ollo)n(w-Up-T)g(o:.)1922 280 y(W)22
-b(Y)g(c)59 b(Repair)22 b(brok)n(en)f Fg(citations)p Fi(.)1922
-347 y(W)h(Y)g(a)56 b(Repair)22 b(brok)n(en)f Fg(attribution)h
-Fi(lines.)1922 413 y(W)g(Y)g(u)52 b Fg(Un)n(wrap)22 b
-Fi(brok)n(en)f(citation)h(lines.)1922 480 y(W)g(Y)g(f)68
-b(Do)23 b(a)f Fg(full)h Fi(deugli\014cation)c(\(W)j(Y)h(c,)f(W)g(Y)g
-(a,)g(W)h(Y)f(u\).)1922 647 y Fc(Blank)32 b(Lines)f(and)h(Whitespace)
-1922 755 y Fi(W)22 b(E)g(l)85 b(Strip)22 b(blank)f Fg(lines)i
-Fi(from)e(the)h(b)r(eginning)e(of)i(the)g(article.)1922
-822 y(W)g(E)g(m)49 b(Replace)27 b(blank)g(lines)g(with)h(empt)n(y)f
-(lines)h(and)f(remo)n(v)n(e)g Fg(m)n(ultiple)i Fi(blank)2182
-888 y(lines.)1922 955 y(W)22 b(E)g(t)78 b(Remo)n(v)n(e)22
-b Fg(trailing)g Fi(blank)f(lines.)1922 1021 y(W)h(E)g(a)71
-b(Strip)22 b(blank)f(lines)g(at)h(the)g(b)r(eginning)e(and)h(the)h(end)
-f(\(W)h(E)g(l,)f(W)i(E)e(m)h(and)2182 1087 y(W)h(E)f(t\).)1922
-1154 y(W)g(E)g(A)55 b(Strip)22 b Fg(all)g Fi(blank)f(lines.)1922
-1220 y(W)h(E)g(s)78 b(Strip)22 b(leading)f(blank)g(lines)h(from)f(the)h
-(article)f(b)r(o)r(dy)-5 b(.)1922 1287 y(W)22 b(E)g(e)74
-b(Strip)22 b(trailing)f(blank)h(lines)f(from)h(the)f(article)g(b)r(o)r
-(dy)-5 b(.)1922 1353 y(W)22 b(E)g(w)57 b(Remo)n(v)n(e)22
-b(leading)f Fg(whitespace)i Fi(from)f(all)g(headers.)1922
-1520 y Fc(Picons,)31 b(X-faces,)h(Smileys)1922 1629 y
-Fi(W)22 b(D)g(s)79 b(\(W)22 b(g\))g(Displa)n(y)g Fg(smilies)p
-Fi(.)1922 1695 y(W)g(D)g(x)70 b(\(W)22 b(f)5 b(\))22
-b(Lo)r(ok)g(for)g(and)g(displa)n(y)f(an)n(y)i(X-)p Fg(F)-6
-b(ace)23 b Fi(headers.)1922 1762 y(W)f(D)g(d)68 b(Displa)n(y)22
-b(an)n(y)g(F)-5 b(ace)21 b(headers.)1922 1828 y(W)h(D)g(n)68
-b(T)-5 b(oggle)22 b(picons)f(in)h Fg(Newsgroups)f Fi(and)h(F)-5
-b(ollo)n(wup-T)g(o.)1922 1894 y(W)22 b(D)g(m)50 b(T)-5
-b(oggle)22 b(picons)f(in)h Fg(mail)h Fi(headers)e(\(T)-5
-b(o)22 b(and)g(Cc\).)1922 1961 y(W)g(D)g(f)84 b(T)-5
-b(oggle)22 b(picons)f(in)h Fg(F)-6 b(rom)p Fi(.)1922
-2027 y(W)22 b(D)g(D)55 b(Remo)n(v)n(e)21 b(all)h(images)g(from)g(the)f
-(article)g(bu\013er.)1922 2195 y Fc(Time)31 b(and)h(Date)1922
-2287 y Fi(W)22 b(T)h(u)49 b(\(W)23 b(T)f(z\))g(Displa)n(y)g(the)g
-(article)f(timestamp)f(in)i(GMT)h(\()p Fg(UT,)j(ZULU)p
-Fi(\).)1922 2353 y(W)c(T)h(i)67 b(Displa)n(y)22 b(the)g(article)f
-(timestamp)g(in)g Fg(ISO)i Fi(8601.)1922 2420 y(W)f(T)h(l)67
-b(Displa)n(y)22 b(the)g(article)f(timestamp)g(in)g(the)h
-Fg(lo)r(cal)g Fi(timezone.)1922 2486 y(W)g(T)h(s)60 b(Displa)n(y)22
-b(according)f(to)i(`gn)n(us-article-time-format'.)1922
-2553 y(W)f(T)h(e)56 b(Displa)n(y)22 b(the)g(time)f Fg(elapsed)h
-Fi(since)f(it)i(w)n(as)g(sen)n(t.)1922 2619 y(W)f(T)h(o)53
-b(Displa)n(y)22 b(the)g Fg(original)f Fi(timestamp.)1922
-2685 y(W)h(T)h(p)49 b(Displa)n(y)22 b(the)g(date)g(in)f(format)h
-(that's)g Fg(pronounceable)f Fi(in)h(English.)1922 2870
-y Fj(Hide/Highligh)m(t)38 b(P)m(arts)e(of)i(the)f(Article)1922
-2987 y Fi(W)22 b(W)g(a)116 b(Hide)22 b Fg(all)g Fi(un)n(w)n(an)n(ted)g
-(parts.)29 b(Calls)23 b(W)f(W)g(h,)g(W)g(W)g(s,)h(W)f(W)g(C-c.)1922
-3053 y(W)g(W)g(h)112 b(Hide)22 b(article)f Fg(headers)p
-Fi(.)1922 3120 y(W)h(W)g(b)112 b(Hide)22 b Fg(b)r(oring)f
-Fi(headers.)1922 3186 y(W)h(W)g(s)123 b(Hide)22 b Fg(signature)p
-Fi(.)1922 3253 y(W)g(W)g(l)130 b(Hide)22 b Fg(list)g
-Fi(iden)n(ti\014ers)f(in)h(sub)t(ject-header.)1922 3319
-y(W)g(W)g(P)104 b(Hide)22 b Fg(PEM)g Fi(\(priv)l(acy)f(enhanced)f
-(messages\).)1922 3385 y(W)i(W)g(B)103 b(Hide)22 b(banner)f(sp)r
-(eci\014ed)e(b)n(y)k(group)e(parameter.)1922 3452 y(W)h(W)g(c)119
-b(Hide)22 b Fg(citation)p Fi(.)1922 3518 y(W)g(W)g(C-c)50
-b(Hide)22 b Fg(citation)g Fi(using)g(a)h(more)e(in)n(telligen)n(t)g
-(algorithm.)1922 3585 y(W)h(W)g(C)102 b(Hide)22 b(cited)f(text)g(in)h
-(articles)f(that)h(aren't)g(ro)r(ots.)1922 3651 y(W)g(H)g(a)134
-b(Highligh)n(t)22 b Fg(all)g Fi(parts.)29 b(Calls)23
-b(W)f(b,)g(W)g(H)h(c,)e(W)i(H)f(h,)g(W)g(H)h(s.)1922
-3717 y(W)f(H)g(c)137 b(Highligh)n(t)22 b(article)f Fg(citations)p
-Fi(.)1922 3784 y(W)h(H)g(h)130 b(Highligh)n(t)22 b(article)f
-Fg(headers)p Fi(.)1922 3850 y(W)h(H)g(s)141 b(Highligh)n(t)22
-b(article)f Fg(signature)p Fi(.)1922 3919 y(F)-5 b(or)22
-b(all)g(hiding-commands:)27 b(A)22 b(p)r(ositiv)n(e)f(pre\014x)g(alw)n
-(a)n(ys)j(hides,)d(and)h(a)g(negativ)n(e)1922 3985 y(pre\014x)f(will)h
-(sho)n(w)h(what)f(w)n(as)i(previously)d(hidden.)1922
-4183 y Fj(MIME)37 b(op)s(erations)i(from)e(the)h(Article-Bu\013er)1922
-4299 y(\(reading\))1922 4416 y Fi(RET)50 b(\(BUTTON-2\))24
-b(T)-5 b(oggle)22 b(displa)n(y)g(of)g(the)f(MIME)h(ob)t(ject.)1922
-4483 y(v)155 b(Prompt)21 b(for)h(a)g(metho)r(d)f(and)h(then)f(view)h
-(ob)t(ject)e(using)i(this)g(metho)r(d.)1922 4549 y(o)157
-b(Prompt)21 b(for)h(a)g(\014lename)f(and)g(sa)n(v)n(e)i(the)e(MIME)h
-(ob)t(ject.)1922 4616 y(C-o)88 b(Prompt)21 b(for)h(a)g(\014lename)f(to)
-h(sa)n(v)n(e)h(the)e(MIME)h(ob)t(ject)e(to)i(and)g(remo)n(v)n(e)f(it.)
-1922 4682 y(d)153 b Fg(Delete)24 b Fi(the)e(MIME)f(ob)t(ject.)1922
-4748 y(c)160 b Fg(Cop)n(y)21 b Fi(the)h(MIME)f(ob)t(ject)g(to)h(a)g
-(new)g(bu\013er)g(and)g(displa)n(y)f(this)i(bu\013er.)1922
-4815 y(i)171 b(Displa)n(y)22 b(the)f(MIME)h(ob)t(ject)e(in)i(this)g
-(bu\013er.)1922 4881 y(C)143 b(Cop)n(y)24 b(the)g(MIME)f(ob)t(ject)g
-(to)h(a)g(new)g(bu\013er)g(and)g(displa)n(y)f(this)h(bu\013er)g(using)
-2112 4948 y Fg(Charset)1922 5014 y Fi(E)145 b(View)22
-b(in)n(ternally)-5 b(.)1922 5080 y(e)160 b(View)22 b
-Fg(externally)p Fi(.)1922 5147 y(t)164 b(View)22 b(the)f(MIME)h(ob)t
-(ject)e(as)j(a)f(di\013eren)n(t)f Fg(t)n(yp)r(e)p Fi(.)1922
-5213 y(p)153 b Fg(Prin)n(t)22 b Fi(the)g(MIME)f(ob)t(ject.)1922
-5280 y Fa(j)170 b Fi(Pip)r(e)21 b(the)g(MIME)h(ob)t(ject)e(to)i(a)h
-(pro)r(cess.)1922 5346 y(.)171 b(T)-5 b(ak)n(e)22 b(action)f(on)i(the)e
-(MIME)h(ob)t(ject.)1860 5838 y Fd(5)p eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop -364 -44 a Ff(Serv)l(er)46 b(Mo)t(de)-364
-80 y Fi(T)-5 b(o)23 b(en)n(ter)e(this)h(mo)r(de,)f(press)h(^)g(while)g
-(in)g(Group)g(mo)r(de.)-364 146 y(SPC)50 b(\(RET\))22
-b(Bro)n(wse)h(this)g(serv)n(er.)-364 213 y(a)146 b Fg(Add)22
-b Fi(a)g(new)g(serv)n(er.)-364 279 y(c)149 b Fg(Cop)n(y)21
-b Fi(this)h(serv)n(er.)-364 346 y(e)149 b Fg(Edit)22
-b Fi(a)h(serv)n(er.)-364 412 y(k)144 b Fg(Kill)23 b Fi(this)f(serv)n
-(er.)28 b([scop)r(e])-364 478 y(l)160 b Fg(List)22 b
-Fi(all)g(serv)n(ers.)-364 545 y(q)144 b(Return)21 b(to)h(the)g(group)g
-(bu\013er)f(\()p Fg(quit)p Fi(\).)-364 611 y(s)153 b(Request)21
-b(that)h(the)g(serv)n(er)f(scan)h(its)h(sources)e(for)h(new)g
-(articles.)-364 678 y(g)146 b(Request)21 b(that)h(the)g(serv)n(er)f
-(regenerate)f(its)j(data.)-364 744 y(y)144 b Fg(Y)-6
-b(ank)21 b Fi(the)h(previously)f(killed)f(serv)n(er.)-364
-810 y(O)128 b(T)-5 b(ry)22 b(to)g Fg(op)r(en)g Fi(a)h(connection)d(to)i
-(this)g(serv)n(er.)-364 877 y(C)132 b Fg(Close)22 b Fi(connection)e(to)
-i(this)g(serv)n(er.)-364 943 y(D)129 b(Mark)22 b(this)g(serv)n(er)g(as)
-g(unreac)n(hable)e(\()p Fg(den)n(y)p Fi(\).)-364 1010
-y(M-o)64 b Fg(Op)r(en)22 b Fi(the)g(connection)e(to)i(all)g(serv)n
-(ers.)-364 1076 y(M-c)67 b Fg(Close)22 b Fi(the)g(connection)d(to)k
-(all)f(serv)n(ers.)-364 1143 y(R)131 b(Mak)n(e)22 b(all)g(denied)e
-(serv)n(ers)i(in)n(to)g(closed)f(serv)n(ers.)-364 1209
-y(L)138 b(Set)21 b(serv)n(er)h(status)h(to)f(o\017ine.)-364
-1388 y Fj(Unplugged-Serv)m(er)-364 1499 y Fi(J)g(a)50
-b Fg(Add)22 b Fi(the)g(curren)n(t)f(serv)n(er)g(to)i(the)e(list)i(of)f
-(serv)n(ers)g(co)n(v)n(ered)f(b)n(y)h(the)f(agen)n(t.)-364
-1566 y(J)h(r)57 b Fg(Remo)n(v)n(e)18 b Fi(the)f(curren)n(t)f(serv)n(er)
-h(from)g(the)g(list)h(of)f(serv)n(ers)h(co)n(v)n(ered)e(b)n(y)i(the)e
-(agen)n(t.)-364 1771 y Ff(Bro)l(wse)46 b(Serv)l(er)f(Mo)t(de)-364
-1895 y Fi(T)-5 b(o)23 b(en)n(ter)e(this)h(mo)r(de,)f(press)h(`B')g
-(while)g(in)g(Group)g(mo)r(de.)-364 1961 y(RET)50 b(En)n(ter)22
-b(the)f(curren)n(t)g(group.)-364 2027 y(SPC)61 b(En)n(ter)22
-b(the)f(curren)n(t)g(group)h(and)f(displa)n(y)h(the)g(\014rst)g
-(article.)-364 2094 y(?)159 b(Giv)n(e)22 b(a)h(v)n(ery)f(short)g(help)f
-(message.)-364 2160 y(n)153 b(Go)23 b(to)f(the)g Fg(next)h
-Fi(group.)28 b([distance])-364 2227 y(p)153 b(Go)23 b(to)f(the)g
-Fg(previous)f Fi(group.)29 b([distance])-364 2293 y(q)155
-b(\(l\))22 b Fg(Quit)h Fi(bro)n(wse)g(mo)r(de.)-364 2359
-y(u)153 b(Subscrib)r(e)20 b(to)j(the)e(curren)n(t)g(group.)29
-b([scop)r(e])-344 5163 y(Cop)n(yrigh)n(t)-14 5161 y(c)-33
-5163 y Fa(\015)23 b Fi(1995,)f(2000,)h(2002,)g(2003,)f(2004,)h(2005,)f
-(2006,)h(2007)f(F)-5 b(ree)21 b(Soft)n(w)n(are)498 5229
-y(F)-5 b(oundation,)21 b(Inc.)-364 5378 y(P)n(ermission)g(is)i(gran)n
-(ted)e(to)i(mak)n(e)e(and)h(distribute)f(copies)g(of)h(this)g
-(reference)d(card)-364 5445 y(pro)n(vided)i(the)h(cop)n(yrigh)n(t)f
-(notice)g(and)h(this)g(p)r(ermission)f(are)g(preserv)n(ed)g(on)h(all)
--364 5511 y(copies.)28 b(Please)22 b(send)f(corrections,)g(additions)g
-(and)h(suggestions)g(to)g(the)g(curren)n(t)-364 5578
-y(main)n(tainer's)f(email)g(address.)29 b(Card)22 b(last)h(edited)d(on)
-i(April,)g(2006.)1860 5838 y Fd(6)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/gnus/gnus-setup.ast b/etc/gnus/gnus-setup.ast
new file mode 100644
index 00000000000..2893c40b245
--- /dev/null
+++ b/etc/gnus/gnus-setup.ast
@@ -0,0 +1,51 @@
+@title Configuring Gnus for the first time
+
+@node What do you want to do with Gnus?
+
+@variable outbound (:radio ((item :tag "Send mail via sendmail" "sendmail") (item :tag "Send mail via SMTP" "smtp"))) "sendmail"
+
+@variable backends (:set ((item :tag "Read news via NNTP" "nntp") (item :tag "Read mail, store it locally" "nnml") (item :tag "Read mail and store it on an IMAP server" "nnimap"))) (list "nnml")
+@result primary-mail-selections (list backends outbound)
+
+@text
+Welcome to Gnus. You need to tell us what you want to do with Gnus
+before we go on to specific configurations.
+
+Choose the tasks you want to set up:
+@variable{backends}
+
+Choose the method Gnus will use to send mail:
+@variable{outbound}
+
+@end text
+
+@next (member "nnml" backends) "Setting up local mail storage (nnml)"
+@next (member "nntp" backends) "Setting up a NNTP server"
+
+@node Setting up local mail storage (nnml)
+@variable mechanism (:radio ((item :tag "Get mail from your Unix mbox" "mbox") (item :tag "Use POP3 to retrieve mail" "pop3"))) "mbox"
+@result nnml-mechanism (list mechanism)
+@text
+You are setting up local mail storage, using the nnml backend in Gnus terms.
+
+Your mail can be downloaded into Gnus in several ways, choose one:
+@variable{mechanism}
+
+@end text
+
+@node Setting up a NNTP server
+
+@text
+TODO: this will be a real link.
+Run M-x assistant and use the news-server.ast file as input.
+@end text
+
+
+@c Local variables:
+@c mode: texinfo
+@c End:
+
+@ignore
+ arch-tag: 6b7b200b-9169-4b44-8b32-b73773fa71af
+@end ignore
+
diff --git a/etc/gnus/news-server.ast b/etc/gnus/news-server.ast
new file mode 100644
index 00000000000..294f92382d9
--- /dev/null
+++ b/etc/gnus/news-server.ast
@@ -0,0 +1,64 @@
+@title Configuring Gnus for reading news
+
+
+@node Setting up the news server name and port number
+@variable server :string (gnus-getenv-nntpserver)
+@variable port :number 119
+@validate (assistant-validate-connect-to-server server port)
+@result gnus-select-method (list 'nntp server (list 'nntp-server port))
+@text
+Usenet news is usually read from your Internet service prodider's news
+server. If you don't know the name of this server, contact your ISP.
+
+As a guess, the name of the server might be news.yourisp.com.
+
+Server name: @variable{server}
+Port number: @variable{port}
+@end text
+@next t "User name and password"
+
+
+@node User name and password
+@type interstitial
+@next
+(if (assistant-password-required-p)
+ "Enter user name and password"
+ "Want user name and password?")
+@end next
+
+
+@node Want user name and password?
+@variable passwordp (:radio ((item "Yes") (item "No"))) "No"
+@text
+Some news servers require that you enter a user name and a password.
+It doesn't look like your news server is one of them.
+
+Do you want to enter user name and password anyway?
+
+@variable{passwordp}
+
+@end text
+
+@next (equal passwordp "No") finish
+@next (not (equal passwordp "No")) "Enter user name and password"
+
+
+@node Enter user name and password
+@variable user-name :string (user-login-name)
+@variable password :password (or (assistant-authinfo-data server port 'password) "")
+@text
+
+It looks like your news server requires you to enter a user name
+and a password:
+
+User name: @variable{user-name}
+Password: @variable{user-name}
+
+@end text
+
+@c Local variables:
+@c mode: texinfo
+@c End:
+
+@c arch tag is missing
+
diff --git a/etc/images/README b/etc/images/README
index 8838c5aae8c..b36e1e97f02 100644
--- a/etc/images/README
+++ b/etc/images/README
@@ -23,8 +23,17 @@ Author: Satyaki Das
Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
License: GNU General Public License version 3 or later (see COPYING)
+The files splash.xpm, splash8.xpm contain copyright and license
+information, but it is reproduced here for convenience.
-The following icons are from GTK+ 2.x and GNOME 2.x. They are not
+Files: splash.pbm, splash.xpm, splash8.xpm, gnus.pbm
+ Author: Luis Fernandes <elf@ee.ryerson.ca>
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
+ License: GNU General Public License version 3 or later (see COPYING)
+
+
+* The following icons are from GTK+ 2.x and GNOME 2.x. They are not
part of Emacs, but distributed and used by Emacs.
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
diff --git a/etc/gnus.pbm b/etc/images/gnus.pbm
index 365b8f52c8c..365b8f52c8c 100644
--- a/etc/gnus.pbm
+++ b/etc/images/gnus.pbm
Binary files differ
diff --git a/etc/images/gnus/mail_send.xpm b/etc/images/gnus/mail_send.xpm
new file mode 100644
index 00000000000..f1d2282ec8a
--- /dev/null
+++ b/etc/images/gnus/mail_send.xpm
@@ -0,0 +1,39 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"24 24 9 1",
+" c Gray0",
+". c #675e6580613e",
+"X c #8c8c7c7c6969",
+"o c #9b458d377822",
+"O c #a941a6459f3e",
+"+ c #c8c8b2b29898",
+"@ c #dadac2c2a5a5",
+"# c #eb4dea2fe4ad",
+"$ c None",
+/* pixels */
+"$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$ $$$$$$$",
+"$$$$$$$$ .@#+ $$$$$$",
+"$$$ .+#####@O $$$$$$",
+"$$ .+##########.+O $$$$$",
+"$$ @..########O.+# $$$$$",
+"$$ O@O..@#####.+## $$$$$",
+"$$$ ###+O.O##...##O $$$$",
+"$$$ @####@+..O#O.+# $$$$",
+"$$$ O####.#######.O $$$$",
+"$$$$ ###+O########.O $$$",
+"$$$$ ###.########@O $$$",
+"$$$$ +#+O#####@O $$$$$",
+"$$$$$ #.###@O $$$$$$",
+"$$$$$ .O@O $$ .. $$$$$",
+"$$$$$ .. $$$$ .oo. $$$$",
+"$$$$$$ $$$$$ oo $$$",
+"$$$$$$$$$$$$$$$ Oo $$$$$",
+"$$$$$$$$$$$$$$ oOOX $$$$",
+"$$$$$$$$$$$$$$ ++++ $$$$",
+"$$$$$$$$$$$$$ O@@@@O $$$",
+"$$$$$$$$$$$$$ $$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$"
+};
diff --git a/etc/letter.pbm b/etc/images/letter.pbm
index 0daf3b65b80..0daf3b65b80 100644
--- a/etc/letter.pbm
+++ b/etc/images/letter.pbm
diff --git a/etc/letter.xpm b/etc/images/letter.xpm
index c79211f5347..c79211f5347 100644
--- a/etc/letter.xpm
+++ b/etc/images/letter.xpm
diff --git a/etc/images/smilies/grayscale/blink.xpm b/etc/images/smilies/grayscale/blink.xpm
new file mode 100644
index 00000000000..eec7209f38b
--- /dev/null
+++ b/etc/images/smilies/grayscale/blink.xpm
@@ -0,0 +1,24 @@
+/* XPM */
+static char * blink_xpm[] = {
+"14 14 7 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #6E6E6E",
+"# c #515151",
+"$ c #ABABAB",
+"% c #737373",
+" ",
+" ",
+" . ",
+" + ",
+" @#$$# + ",
+" ++ + ",
+" ",
+" + + ",
+" $+ +$ ",
+" %+ +% ",
+" %++++% ",
+" $$$$ ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/braindamaged.xpm b/etc/images/smilies/grayscale/braindamaged.xpm
new file mode 100644
index 00000000000..cd47b32824a
--- /dev/null
+++ b/etc/images/smilies/grayscale/braindamaged.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * braindamaged_xpm[] = {
+"14 14 6 1",
+" c None",
+". c #ABABAB",
+"+ c #000000",
+"@ c #515151",
+"# c #171717",
+"$ c #737373",
+" ",
+" ",
+" .++..++. ",
+" +@.++.@+ ",
+" +.@#@@.+ ",
+" +@.#@.@+ ",
+" .++. ++. ",
+" + + ",
+" .+ +. ",
+" $+ +$ ",
+" $++++$ ",
+" .... ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/cry.xpm b/etc/images/smilies/grayscale/cry.xpm
new file mode 100644
index 00000000000..78bf6662d6b
--- /dev/null
+++ b/etc/images/smilies/grayscale/cry.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * cry_xpm[] = {
+"14 14 6 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #ABABAB",
+"# c #515151",
+"$ c #6E6E6E",
+" ",
+" ",
+" . ",
+" .. .+. ",
+" +++. +.+ ",
+" +@+ ",
+" @+# ",
+" @@ ",
+" $++++$ ",
+" .+@ @+. ",
+" @+@ @+@ ",
+" @ @ ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/dead.xpm b/etc/images/smilies/grayscale/dead.xpm
new file mode 100644
index 00000000000..9be9883c077
--- /dev/null
+++ b/etc/images/smilies/grayscale/dead.xpm
@@ -0,0 +1,21 @@
+/* XPM */
+static char * dead_xpm[] = {
+"14 14 4 1",
+" c None",
+". c #737373",
+"+ c #ABABAB",
+"@ c #000000",
+" ",
+" ",
+" .+ +. + +. ",
+" +@+@++@+@+ ",
+" +@ @+ ",
+" +@+@ @+@+ ",
+" + +. + + ",
+" ",
+" +@ @+ ",
+" .@ @. ",
+" .@@@@. ",
+" ++++ ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/evil.xpm b/etc/images/smilies/grayscale/evil.xpm
new file mode 100644
index 00000000000..e358cf89454
--- /dev/null
+++ b/etc/images/smilies/grayscale/evil.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * evil_xpm[] = {
+"14 14 6 1",
+" c None",
+". c #6E6E6E",
+"+ c #484848",
+"@ c #ABABAB",
+"# c #000000",
+"$ c #737373",
+" ",
+" ",
+" .+ +. ",
+" @# #@ ",
+" #+ @+# ",
+" #+ @+# ",
+" ",
+" # # ",
+" @# #@ ",
+" $# #$ ",
+" $####$ ",
+" @@@@ ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/forced.xpm b/etc/images/smilies/grayscale/forced.xpm
new file mode 100644
index 00000000000..095084569c4
--- /dev/null
+++ b/etc/images/smilies/grayscale/forced.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * forced_xpm[] = {
+"14 14 6 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #6E6E6E",
+"# c #ABABAB",
+"$ c #171717",
+" ",
+" ",
+" . . ",
+" + + ",
+" + + ",
+" + + ",
+" ",
+" @ @ ",
+" +# #+ ",
+" @@# #@@ ",
+" #$++++++$# ",
+" ######## ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/frown.xpm b/etc/images/smilies/grayscale/frown.xpm
new file mode 100644
index 00000000000..b513f4c92fd
--- /dev/null
+++ b/etc/images/smilies/grayscale/frown.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * frown_xpm[] = {
+"14 14 5 1",
+" c None",
+". c #6E6E6E",
+"+ c #484848",
+"@ c #ABABAB",
+"# c #000000",
+" ",
+" ",
+" .+ +. ",
+" @# #@ ",
+" #+ @+# ",
+" #+@@+# ",
+" ",
+" @@ ",
+" .####. ",
+" +#@ @#+ ",
+" @#@ @#@ ",
+" + + ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/grin.xpm b/etc/images/smilies/grayscale/grin.xpm
new file mode 100644
index 00000000000..f6e45882a46
--- /dev/null
+++ b/etc/images/smilies/grayscale/grin.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * grin_xpm[] = {
+"14 14 8 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #515151",
+"# c #6E6E6E",
+"$ c #ABABAB",
+"% c #FFFFFF",
+"& c #737373",
+" ",
+" ",
+" . . ",
+" + + ",
+" + + ",
+" + + ",
+" ",
+" ++@@##@@++ ",
+" $+%%%%%%+$ ",
+" &+%%%%+& ",
+" &++++& ",
+" $$$$ ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/indifferent.xpm b/etc/images/smilies/grayscale/indifferent.xpm
new file mode 100644
index 00000000000..1e4f69e0f4f
--- /dev/null
+++ b/etc/images/smilies/grayscale/indifferent.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * indifferent_xpm[] = {
+"14 14 6 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #515151",
+"# c #ABABAB",
+"$ c #6E6E6E",
+" ",
+" ",
+" . . ",
+" + + ",
+" + + ",
+" + + ",
+" ",
+" @ #@ ",
+"#+$+$ $ + ",
+"$ +#+$#++$+$ ",
+" $ ++# ++ ",
+" + ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/reverse-smile.xpm b/etc/images/smilies/grayscale/reverse-smile.xpm
new file mode 100644
index 00000000000..a62eab0481c
--- /dev/null
+++ b/etc/images/smilies/grayscale/reverse-smile.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * reverse_smile_xpm[] = {
+"14 14 5 1",
+" c None",
+". c #ABABAB",
+"+ c #737373",
+"@ c #000000",
+"# c #484848",
+" ",
+" ",
+" .... ",
+" +@@@@+ ",
+" +@ @+ ",
+" .@ @. ",
+" @ @ ",
+" ",
+" @ @ ",
+" @ @ ",
+" @ @ ",
+" # # ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/sad.xpm b/etc/images/smilies/grayscale/sad.xpm
new file mode 100644
index 00000000000..3addb6b6b5a
--- /dev/null
+++ b/etc/images/smilies/grayscale/sad.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * sad_xpm[] = {
+"14 14 5 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #ABABAB",
+"# c #6E6E6E",
+" ",
+" ",
+" . . ",
+" + + ",
+" + + ",
+" + + ",
+" ",
+" @@@@ ",
+" #++++# ",
+" .+@ @+. ",
+" @+@ @+@ ",
+" . . ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/smile.xpm b/etc/images/smilies/grayscale/smile.xpm
new file mode 100644
index 00000000000..463785e6d4c
--- /dev/null
+++ b/etc/images/smilies/grayscale/smile.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * smile_xpm[] = {
+"14 14 5 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #ABABAB",
+"# c #737373",
+" ",
+" ",
+" . . ",
+" + + ",
+" + + ",
+" + + ",
+" ",
+" + + ",
+" @+ +@ ",
+" #+ +# ",
+" #++++# ",
+" @@@@ ",
+" ",
+" "};
diff --git a/etc/images/smilies/grayscale/wry.xpm b/etc/images/smilies/grayscale/wry.xpm
new file mode 100644
index 00000000000..79e29792ef0
--- /dev/null
+++ b/etc/images/smilies/grayscale/wry.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * wry_xpm[] = {
+"14 14 6 1",
+" c None",
+". c #484848",
+"+ c #000000",
+"@ c #515151",
+"# c #ABABAB",
+"$ c #6E6E6E",
+" ",
+" ",
+" . . ",
+" + + ",
+" + + ",
+" + + ",
+" ",
+" @ ",
+" ## $@ ",
+" #++++++# ",
+" @$ ## ",
+" @ ",
+" ",
+" "};
diff --git a/etc/images/smilies/medium/blink.xpm b/etc/images/smilies/medium/blink.xpm
new file mode 100644
index 00000000000..9bd48f7874b
--- /dev/null
+++ b/etc/images/smilies/medium/blink.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * blink_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+"= c #8F7B00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&&&&&&*&&%. ",
+" +$&&&&&&&.&&$+ ",
+".@&@%##%&&.&&&@.",
+".#&&&..&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&.&&&&&&&&.&$.",
+".#&#.&&&&&&.#&#.",
+".@&&=.&&&&.=&&@.",
+" +$&&=....=&&$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/braindamaged.xpm b/etc/images/smilies/medium/braindamaged.xpm
new file mode 100644
index 00000000000..e42259de920
--- /dev/null
+++ b/etc/images/smilies/medium/braindamaged.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * braindamaged_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #8F7B00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&#..##..#&%. ",
+" +$&.%#..#%.&$+ ",
+".@&&.#%+%%#.&&@.",
+".#&&.%#+%#%.&&#.",
+".$&&#..#&..#&&$.",
+".$&.&&&&&&&&.&$.",
+".#&#.&&&&&&.#&#.",
+".@&&*.&&&&.*&&@.",
+" +$&&*....*&&$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/cry.xpm b/etc/images/smilies/medium/cry.xpm
new file mode 100644
index 00000000000..e7358ad11f2
--- /dev/null
+++ b/etc/images/smilies/medium/cry.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * cry_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&&&&&&*&&%. ",
+" +$&&**&&*.*&$+ ",
+".@&&...*&.*.&&@.",
+".#&&&&&&&.#.&&#.",
+".$&&&&&&&#.%&&$.",
+".$&&&&&&&&&&&&$.",
+".#&&&@....@&&&#.",
+".@&&*.#&&#.*&&@.",
+" +$#.#&&&&#.#$+ ",
+" .%&*&&&&&&*&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/dead.xpm b/etc/images/smilies/medium/dead.xpm
new file mode 100644
index 00000000000..1d8fe12d2fa
--- /dev/null
+++ b/etc/images/smilies/medium/dead.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * dead_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #8F7B00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%*#&#*$#&#*%. ",
+" +$#.#.##.#.#$+ ",
+".@&&#.$&&$.#&&@.",
+".#&#.#.$$.#.#&#.",
+".$&*#&#*$#&#*&$.",
+".$&.&&&&&&&&.&$.",
+".#&#.&&&&&&.#&#.",
+".@&&*.&&&&.*&&@.",
+" +$&&*....*&&$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/evil.xpm b/etc/images/smilies/medium/evil.xpm
new file mode 100644
index 00000000000..b7a18f8cd62
--- /dev/null
+++ b/etc/images/smilies/medium/evil.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * evil_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+"= c #8F7B00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&@*&&&&*@&%. ",
+" +$&#.&&&&.#&$+ ",
+".@&&&.*&#*.&&&@.",
+".#&&&.*##*.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&.&&&&&&&&.&$.",
+".#&#.&&&&&&.#&#.",
+".@&&=.&&&&.=&&@.",
+" +$&&=....=&&$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/forced.xpm b/etc/images/smilies/medium/forced.xpm
new file mode 100644
index 00000000000..df52a7eb862
--- /dev/null
+++ b/etc/images/smilies/medium/forced.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * forced_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&*&&&&*&&%. ",
+" +$&&.&&&&.&&$+ ",
+".@&&&.&&&&.&&&@.",
+".#&&&.&&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&@&&&&&&&&@&$.",
+".#&.#&&&&&&#.&#.",
+".@&@@#&&&&#@@&@.",
+" +$#+......+#$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/frown.xpm b/etc/images/smilies/medium/frown.xpm
new file mode 100644
index 00000000000..e4573ed5a37
--- /dev/null
+++ b/etc/images/smilies/medium/frown.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * frown_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&@*&&&&*@&%. ",
+" +$&#.&&&&.#&$+ ",
+".@&&&.*&#*.&&&@.",
+".#&&&.*##*.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&&&&&&&&&&&&$.",
+".#&&&@....@&&&#.",
+".@&&*.#&&#.*&&@.",
+" +$#.#&&&&#.#$+ ",
+" .%&*&&&&&&*&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/grin.xpm b/etc/images/smilies/medium/grin.xpm
new file mode 100644
index 00000000000..d8db415a14f
--- /dev/null
+++ b/etc/images/smilies/medium/grin.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char * grin_xpm[] = {
+"16 16 11 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+"= c #FFFFFF",
+"- c #8F7B00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&*&&&&*&&%. ",
+" +$&&.&&&&.&&$+ ",
+".@&&&.&&&&.&&&@.",
+".#&&&.&&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&..%%@@%%..&$.",
+".#&#.======.#&#.",
+".@&&-.====.-&&@.",
+" +$&&-....-&&$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/indifferent.xpm b/etc/images/smilies/medium/indifferent.xpm
new file mode 100644
index 00000000000..98519c3bdd2
--- /dev/null
+++ b/etc/images/smilies/medium/indifferent.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * indifferent_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&*&&&&*&&%. ",
+" +$&&.&&&&.&&$+ ",
+".@&&&.&&&&.&&&@.",
+".#&&&.&&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$%&&&&&&&&&#%$.",
+".#.@.@&&&@&&.&#.",
+".@&.#.@#..@.@&@.",
+" +$@&&..#&..&$+ ",
+" .%&&&&.&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/reverse-smile.xpm b/etc/images/smilies/medium/reverse-smile.xpm
new file mode 100644
index 00000000000..9641c333033
--- /dev/null
+++ b/etc/images/smilies/medium/reverse-smile.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * reverse_smile_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #8F7B00",
+"= c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&&&&&&&&&%. ",
+" +$&&*....*&&$+ ",
+".@&&*.&&&&.*&&@.",
+".#&#.&&&&&&.#&#.",
+".$&.&&&&&&&&.&$.",
+".$&&&&&&&&&&&&$.",
+".#&&&.&&&&.&&&#.",
+".@&&&.&&&&.&&&@.",
+" +$&&.&&&&.&&$+ ",
+" .%&&=&&&&=&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/sad.xpm b/etc/images/smilies/medium/sad.xpm
new file mode 100644
index 00000000000..bc635c12dbe
--- /dev/null
+++ b/etc/images/smilies/medium/sad.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * sad_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&*&&&&*&&%. ",
+" +$&&.&&&&.&&$+ ",
+".@&&&.&&&&.&&&@.",
+".#&&&.&&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&&&&&&&&&&&&$.",
+".#&&&@....@&&&#.",
+".@&&*.#&&#.*&&@.",
+" +$#.#&&&&#.#$+ ",
+" .%&*&&&&&&*&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/smile.xpm b/etc/images/smilies/medium/smile.xpm
new file mode 100644
index 00000000000..b08129b8ed0
--- /dev/null
+++ b/etc/images/smilies/medium/smile.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * smile_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+"= c #8F7B00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&*&&&&*&&%. ",
+" +$&&.&&&&.&&$+ ",
+".@&&&.&&&&.&&&@.",
+".#&&&.&&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&.&&&&&&&&.&$.",
+".#&#.&&&&&&.#&#.",
+".@&&=.&&&&.=&&@.",
+" +$&&=....=&&$+ ",
+" .%&&&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/images/smilies/medium/wry.xpm b/etc/images/smilies/medium/wry.xpm
new file mode 100644
index 00000000000..3bc841b49ce
--- /dev/null
+++ b/etc/images/smilies/medium/wry.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * wry_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #000000",
+"+ c #1D1900",
+"@ c #887500",
+"# c #D3B600",
+"$ c #FAD800",
+"% c #645600",
+"& c #FFDD00",
+"* c #594D00",
+" ...... ",
+" .+@#$$#@+. ",
+" .%$&&&&&&$%. ",
+" .%&&*&&&&*&&%. ",
+" +$&&.&&&&.&&$+ ",
+".@&&&.&&&&.&&&@.",
+".#&&&.&&&&.&&&#.",
+".$&&&&&&&&&&&&$.",
+".$&&&&&&&&&%&&$.",
+".#&&&&&&&&@%&&#.",
+".@&&#......#&&@.",
+" +$&%@&&&&&&&$+ ",
+" .%&%&&&&&&&&%. ",
+" .%$&&&&&&$%. ",
+" .+@#$$#@+. ",
+" ...... "};
diff --git a/etc/splash.pbm b/etc/images/splash.pbm
index 7f3589512b0..7f3589512b0 100644
--- a/etc/splash.pbm
+++ b/etc/images/splash.pbm
Binary files differ
diff --git a/etc/splash.xpm b/etc/images/splash.xpm
index 741deeac31c..741deeac31c 100644
--- a/etc/splash.xpm
+++ b/etc/images/splash.xpm
diff --git a/etc/splash8.xpm b/etc/images/splash8.xpm
index 1c209585739..1c209585739 100644
--- a/etc/splash8.xpm
+++ b/etc/images/splash8.xpm
diff --git a/etc/tree-widget/default/README b/etc/images/tree-widget/default/README
index d8cc1c6efbb..d8cc1c6efbb 100644
--- a/etc/tree-widget/default/README
+++ b/etc/images/tree-widget/default/README
diff --git a/etc/tree-widget/default/close.png b/etc/images/tree-widget/default/close.png
index 1c3f6083992..1c3f6083992 100644
--- a/etc/tree-widget/default/close.png
+++ b/etc/images/tree-widget/default/close.png
Binary files differ
diff --git a/etc/tree-widget/default/close.xpm b/etc/images/tree-widget/default/close.xpm
index 6b0315aa75d..6b0315aa75d 100644
--- a/etc/tree-widget/default/close.xpm
+++ b/etc/images/tree-widget/default/close.xpm
diff --git a/etc/tree-widget/default/empty.png b/etc/images/tree-widget/default/empty.png
index 9837936f3cc..9837936f3cc 100644
--- a/etc/tree-widget/default/empty.png
+++ b/etc/images/tree-widget/default/empty.png
Binary files differ
diff --git a/etc/tree-widget/default/empty.xpm b/etc/images/tree-widget/default/empty.xpm
index 8af9f2f23e1..8af9f2f23e1 100644
--- a/etc/tree-widget/default/empty.xpm
+++ b/etc/images/tree-widget/default/empty.xpm
diff --git a/etc/tree-widget/default/end-guide.png b/etc/images/tree-widget/default/end-guide.png
index 72bb67a4513..72bb67a4513 100644
--- a/etc/tree-widget/default/end-guide.png
+++ b/etc/images/tree-widget/default/end-guide.png
Binary files differ
diff --git a/etc/tree-widget/default/end-guide.xpm b/etc/images/tree-widget/default/end-guide.xpm
index a8e684ac406..a8e684ac406 100644
--- a/etc/tree-widget/default/end-guide.xpm
+++ b/etc/images/tree-widget/default/end-guide.xpm
diff --git a/etc/tree-widget/default/guide.png b/etc/images/tree-widget/default/guide.png
index 85fa0c87b7b..85fa0c87b7b 100644
--- a/etc/tree-widget/default/guide.png
+++ b/etc/images/tree-widget/default/guide.png
Binary files differ
diff --git a/etc/tree-widget/default/guide.xpm b/etc/images/tree-widget/default/guide.xpm
index 85b3cec00ce..85b3cec00ce 100644
--- a/etc/tree-widget/default/guide.xpm
+++ b/etc/images/tree-widget/default/guide.xpm
diff --git a/etc/tree-widget/default/handle.png b/etc/images/tree-widget/default/handle.png
index 8a00d7b3f24..8a00d7b3f24 100644
--- a/etc/tree-widget/default/handle.png
+++ b/etc/images/tree-widget/default/handle.png
Binary files differ
diff --git a/etc/tree-widget/default/handle.xpm b/etc/images/tree-widget/default/handle.xpm
index fcdf2b40920..fcdf2b40920 100644
--- a/etc/tree-widget/default/handle.xpm
+++ b/etc/images/tree-widget/default/handle.xpm
diff --git a/etc/tree-widget/default/leaf.png b/etc/images/tree-widget/default/leaf.png
index ef8cee2c787..ef8cee2c787 100644
--- a/etc/tree-widget/default/leaf.png
+++ b/etc/images/tree-widget/default/leaf.png
Binary files differ
diff --git a/etc/tree-widget/default/leaf.xpm b/etc/images/tree-widget/default/leaf.xpm
index 58d90f2d7ef..58d90f2d7ef 100644
--- a/etc/tree-widget/default/leaf.xpm
+++ b/etc/images/tree-widget/default/leaf.xpm
diff --git a/etc/tree-widget/default/no-guide.png b/etc/images/tree-widget/default/no-guide.png
index a063d3f2555..a063d3f2555 100644
--- a/etc/tree-widget/default/no-guide.png
+++ b/etc/images/tree-widget/default/no-guide.png
Binary files differ
diff --git a/etc/tree-widget/default/no-guide.xpm b/etc/images/tree-widget/default/no-guide.xpm
index d9d93ea7294..d9d93ea7294 100644
--- a/etc/tree-widget/default/no-guide.xpm
+++ b/etc/images/tree-widget/default/no-guide.xpm
diff --git a/etc/tree-widget/default/no-handle.png b/etc/images/tree-widget/default/no-handle.png
index 123cf45fa97..123cf45fa97 100644
--- a/etc/tree-widget/default/no-handle.png
+++ b/etc/images/tree-widget/default/no-handle.png
Binary files differ
diff --git a/etc/tree-widget/default/no-handle.xpm b/etc/images/tree-widget/default/no-handle.xpm
index 3eaa2daee32..3eaa2daee32 100644
--- a/etc/tree-widget/default/no-handle.xpm
+++ b/etc/images/tree-widget/default/no-handle.xpm
diff --git a/etc/tree-widget/default/open.png b/etc/images/tree-widget/default/open.png
index ea2a8dba00d..ea2a8dba00d 100644
--- a/etc/tree-widget/default/open.png
+++ b/etc/images/tree-widget/default/open.png
Binary files differ
diff --git a/etc/tree-widget/default/open.xpm b/etc/images/tree-widget/default/open.xpm
index a216a3f5ab4..a216a3f5ab4 100644
--- a/etc/tree-widget/default/open.xpm
+++ b/etc/images/tree-widget/default/open.xpm
diff --git a/etc/tree-widget/folder/README b/etc/images/tree-widget/folder/README
index e611050b088..e611050b088 100644
--- a/etc/tree-widget/folder/README
+++ b/etc/images/tree-widget/folder/README
diff --git a/etc/tree-widget/folder/close.png b/etc/images/tree-widget/folder/close.png
index 3a509b095f8..3a509b095f8 100644
--- a/etc/tree-widget/folder/close.png
+++ b/etc/images/tree-widget/folder/close.png
Binary files differ
diff --git a/etc/tree-widget/folder/close.xpm b/etc/images/tree-widget/folder/close.xpm
index 116c1db37d8..116c1db37d8 100644
--- a/etc/tree-widget/folder/close.xpm
+++ b/etc/images/tree-widget/folder/close.xpm
diff --git a/etc/tree-widget/folder/empty.png b/etc/images/tree-widget/folder/empty.png
index 3f89471828d..3f89471828d 100644
--- a/etc/tree-widget/folder/empty.png
+++ b/etc/images/tree-widget/folder/empty.png
Binary files differ
diff --git a/etc/tree-widget/folder/empty.xpm b/etc/images/tree-widget/folder/empty.xpm
index 598401ab413..598401ab413 100644
--- a/etc/tree-widget/folder/empty.xpm
+++ b/etc/images/tree-widget/folder/empty.xpm
diff --git a/etc/tree-widget/folder/end-guide.png b/etc/images/tree-widget/folder/end-guide.png
index b1290f31e6f..b1290f31e6f 100644
--- a/etc/tree-widget/folder/end-guide.png
+++ b/etc/images/tree-widget/folder/end-guide.png
Binary files differ
diff --git a/etc/tree-widget/folder/end-guide.xpm b/etc/images/tree-widget/folder/end-guide.xpm
index 6788538c7ab..6788538c7ab 100644
--- a/etc/tree-widget/folder/end-guide.xpm
+++ b/etc/images/tree-widget/folder/end-guide.xpm
diff --git a/etc/tree-widget/folder/guide.png b/etc/images/tree-widget/folder/guide.png
index 8535f86f3bf..8535f86f3bf 100644
--- a/etc/tree-widget/folder/guide.png
+++ b/etc/images/tree-widget/folder/guide.png
Binary files differ
diff --git a/etc/tree-widget/folder/guide.xpm b/etc/images/tree-widget/folder/guide.xpm
index 647d0590173..647d0590173 100644
--- a/etc/tree-widget/folder/guide.xpm
+++ b/etc/images/tree-widget/folder/guide.xpm
diff --git a/etc/tree-widget/folder/handle.png b/etc/images/tree-widget/folder/handle.png
index cc5aa61b860..cc5aa61b860 100644
--- a/etc/tree-widget/folder/handle.png
+++ b/etc/images/tree-widget/folder/handle.png
Binary files differ
diff --git a/etc/tree-widget/folder/handle.xpm b/etc/images/tree-widget/folder/handle.xpm
index d3eb5f387b3..d3eb5f387b3 100644
--- a/etc/tree-widget/folder/handle.xpm
+++ b/etc/images/tree-widget/folder/handle.xpm
diff --git a/etc/tree-widget/folder/leaf.png b/etc/images/tree-widget/folder/leaf.png
index c15762b6570..c15762b6570 100644
--- a/etc/tree-widget/folder/leaf.png
+++ b/etc/images/tree-widget/folder/leaf.png
Binary files differ
diff --git a/etc/tree-widget/folder/leaf.xpm b/etc/images/tree-widget/folder/leaf.xpm
index 53a86c75d64..53a86c75d64 100644
--- a/etc/tree-widget/folder/leaf.xpm
+++ b/etc/images/tree-widget/folder/leaf.xpm
diff --git a/etc/tree-widget/folder/no-guide.png b/etc/images/tree-widget/folder/no-guide.png
index 81999263b2c..81999263b2c 100644
--- a/etc/tree-widget/folder/no-guide.png
+++ b/etc/images/tree-widget/folder/no-guide.png
Binary files differ
diff --git a/etc/tree-widget/folder/no-guide.xpm b/etc/images/tree-widget/folder/no-guide.xpm
index a74b84061ca..a74b84061ca 100644
--- a/etc/tree-widget/folder/no-guide.xpm
+++ b/etc/images/tree-widget/folder/no-guide.xpm
diff --git a/etc/tree-widget/folder/no-handle.png b/etc/images/tree-widget/folder/no-handle.png
index 3055803a595..3055803a595 100644
--- a/etc/tree-widget/folder/no-handle.png
+++ b/etc/images/tree-widget/folder/no-handle.png
Binary files differ
diff --git a/etc/tree-widget/folder/no-handle.xpm b/etc/images/tree-widget/folder/no-handle.xpm
index cea559fd763..cea559fd763 100644
--- a/etc/tree-widget/folder/no-handle.xpm
+++ b/etc/images/tree-widget/folder/no-handle.xpm
diff --git a/etc/tree-widget/folder/open.png b/etc/images/tree-widget/folder/open.png
index 6696a43c09c..6696a43c09c 100644
--- a/etc/tree-widget/folder/open.png
+++ b/etc/images/tree-widget/folder/open.png
Binary files differ
diff --git a/etc/tree-widget/folder/open.xpm b/etc/images/tree-widget/folder/open.xpm
index dfbf758dd8f..dfbf758dd8f 100644
--- a/etc/tree-widget/folder/open.xpm
+++ b/etc/images/tree-widget/folder/open.xpm
diff --git a/etc/orgcard.ps b/etc/orgcard.ps
deleted file mode 100644
index 0cfcffa3d8e..00000000000
--- a/etc/orgcard.ps
+++ /dev/null
@@ -1,2871 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: orgcard.dvi
-%%Pages: 2
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMBX10 CMR8 CMTT8 CMR7 CMBX8 CMTI8 CMSY8 CMR6 CMSY6
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t landscape orgcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.02.26:1928
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 50 /two put
-dup 52 /four put
-dup 54 /six put
-dup 55 /seven put
-dup 58 /colon put
-dup 65 /A put
-dup 67 /C put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E07BB563C96C0A3E
-6D4DF600BB73729BC4A5B134928F1370B9F07C587F79388B1D9AC62BFB1566DD
-CCBD1F58ABBF1F53AD21E3BFF25EEEB046F66A924E5F431EBD7228050BE2DF43
-0B9B538DAAD511EED97630CD9A9C05CC49DC251325A93EA842C6D07B44BE620F
-08E66B611F54314B0177E299304F2294F8DEDE9914736944F125A50B5007373E
-588AD80D9983CE7824DA30CEE5DC3114D69D7ACEC0758D8201805B82925EF3C2
-C87A1A169C5ADE44B561EC1660E617FB39D1B1547B33C0FEB33C3A1D7340A62A
-CD9CEFA49481F19B39A704A53A0B98A11744143CDDA0E668E6325935C6497A9F
-AFF471194932AFECBF25B441AD55A43751FBAB76F3E544C4254AEC4BEB5CFE4C
-C1318C3A0FAD0E8C1BABEE20B203E1DD9412E66BC55BEBD6FBBEBA84F56604FD
-85D50F733D9794611F4137EC10ACB4C4ECA5A81CAACC45213E92ED3C26726BBE
-91430E7633A2BDB8EA3D0C55259D7DBE468AC0964A63728C9B8EA4E15CF0EEA3
-2E754B9170EAE6B8818DCCDDAD643B9F6C91C3C5B245CD442358C60AF390DC76
-342E659D4EC45552626F069F346F46B18062CE26D5912336C6B29FCBFA5C3113
-ED86E44B529CD95B7B5B934D899762C4F3457F56ACCC763BCCD5BD08975EB5F1
-C5216DA4CBF3409EC71054B0145183F7DFB31517D199EB16D4C6DB0AF05E5720
-10B06F395BE3C8C59CEEBCEA1E00F9EA3FD880AC197508CEC11E33B6B6EABE3C
-0FAEBF246743F62D280875D052656696AA88DABB918F79279A980754F3DCFBEF
-7999E7FB7C9E7F88CB15E1596F08E48FA74F1CB613B587BFE72717437E38D08A
-C8B160982A6F92CD0BAD7E033766BB1D92F78F22FE5750D002AB2C7A101A57D6
-3E7ABA9BD4B8C0A4F2820123BBCCD520B9608AFD4372366D876F848ED068245B
-6BC1DDF4B826E4A9FEC4390CEB2DAAA63D9D013B706059347709F3E996C3682A
-F88D827B8B7E1206BF2B2A394AFB00B1207819DAE82D112003911EA8A70DC244
-D7AC4EAA9E8FEB152DBB56A092831B8E149DBBF89E38EE4B39AEC0516C059380
-F7629463356E1A99544E6DBAECDC8AC0A5DCEA38C6E60D06F931A0BCD18F897A
-97217E61AA565EB017AD1A04F4BCB9D2773C04A068232F426DA17912BD61463E
-E4D6442E5B5C15715DF0664E565A77CE40F05BF942079BF3EA4E6EB459D452BE
-529DB54833F6EA5A05E2A645905DB6F2BE7E0594F99A20C7A529EE4B60108792
-FA3D0C09BA47241FB3768B6B224E164B87D247552DE8C62F8CA1C4482195F024
-E140450A043B9480F72A9D84518C9D120D267E49FE72ED1D2387051FEB89E474
-9CDC8226CBB3149CB9E5BD3840F81E6E071B71CBE0CAF2AD204B35BB2B4D2252
-8012AAF7493A958146E1E5A7455C21FBF36D299701570F7FD1174D3ACF461E5E
-ECCDA88DB12351D6AEF67FA66A015E6BF17CDC91D7DD10F9CBE389FFAB685507
-A32CF749510BB91F6F17263C548D0B1861B27B473CB9102085E162864214AE8E
-FFCC03E6E28DF8CAC6C6765C7A46657952FB9FAF03ADDB38E4BA14BD501570EF
-7B40AEBFD3320A5AD8BE650612DD04E13715B3DF076C7DE13A7B64AFE51F3AE8
-B26144E7CCA536FD91F083964EB721093DB72047684A6AE9F3995071AF5F5F1C
-EC0185BAD0D3D6BA33F7AA87AF2118EAFB7FE11AED9175D5BD9E56CF070843DD
-4CFF31665E76FD6CBEFCDBE0D7CC5E0638EA98E38ED8733F0A12F9846817D949
-EBED9BC845AA3F66DA46299583C3AB750EA9900AFDFEB5E5F938C565ED20E051
-88B82F596E539FD167FE3DA545CCD4D38526C915CB92CAF583034A6B935E7843
-380494244B87CBCA0116F1BE4B90F65BD82DC2C9954668CD744E701959B53B75
-DE8C1D50C7315BE4D4C94FF5A1D0F13340E8B586AE2FFF33B2307E3BCE5E0757
-8F8D4FC879CDDEB948023B6C3A9B3C989E3C0A12B054C9E4B9B063C4FDCB892B
-057A86F1142142257426515FD76509FF56A2DD69BF98ABC6ABFC4A8602903B84
-CE20B550B57BAED730F44C82DAD117146EFB6C53F705927DA998AFC1FB976484
-BAFB1F4755F6A3FABB7A2CEBD79D1EA9136F1847E3092A0D34DEC695C7509371
-FF077694F0A247AC96DB4A6F75150899C26DA07AB13DF955E0AB0D5EFE0DA8AF
-D7CD24A886975D087A4F2FAB8D0E92991A9499584E3286D78DDC2F59566EEE8C
-4BF9298E78F2A9FEDD9964A9B6A082F1012FFEEA0283E64BFFFFF9E6FF007A17
-16EA43943FF9A5F9D0CBFAF84E19F5C6DB2D89794FD5450DE9BC0D976510BA2F
-CA53022A37D273EAC3E6EC219F931B46E834F85AC444B83E8B150D974717EBCF
-1FAE1AFD51050394258C25055D30C20305C65914596EBB41E7D806BA233D0825
-529F1F5AF5296B170F061E98FF0CABE8D12FB31A34C5AFE93E65BFBEEE38F304
-32C6CE23430DEC4128FFCE4B8EAA54709529F03A12F59156E7D7DF62D4A2AB7B
-6AAA8263F46388410AC2912E551112569057472CCD7FF5ED44726C7F9DDF5750
-EAF49F466CD6F2EAAD4CC6E35FC5513DE139E7E347D0F6767CF153E432C2FEAD
-38E9E54253B1EBD071412823594F4343AB1D2FEFD0C8721505525CCD6FB3F87A
-7FFC5B88FAF58FE2E0E86A1A5162F595DAAE825BFEF488083E5CF2A48C635F74
-4B9FC91982994910A6C06F2D6FEB2CBDA98149DEF502B7BF821DC12DE0664D31
-DAFE24F67B2343510432FC637F15DB3022F9E96AFC7C25A50B508D4C212E3112
-2E86483A8874004B8E2B8F18EF1ED091647BE5950602CAA13896FDB22E10FC9C
-5F2E6CEC122E215D70DF60CFD79456D13A6889544ED4B22DD7D5C79802DDBDBD
-86174DC103DDBA097D049C6E810ED7ABCDD94BA9EDB259FC5818DF62B976DA55
-3048AFF5C449F2EF544E814FBED1339CE8A576A7336CE29CB6D0E83F8E5E3EE2
-B7A3217EE0BED4D01D02CB1D902B05292EF3FC41C04FC23501DD8818BEB701A3
-92C23851656E3614BC6A68C8BBB0FB30557882A55991C1163D2B70B76E0B9F38
-F53544EAB3AD5304077A54D4B3035803684E1837A3760901E36DFDE4407731B2
-36EADADB9FBC5B086B1A27E6F89C9B4BB12CBB26F4F8E86AB4DE8EB0B63D66AE
-CDAEB516E17954E442923697D17058CAED6609D53F7DD50895F2F79A6CA537D2
-344DDA0BDAFFF4A2CCE0753EB27C875D1140E38106DF7B3A42FD696170C05E6B
-B0661A6FABB42516931546B1DDBEDDA19BB9A7F1DC62E0437BAC2D571239C6AC
-791728D482DE9F2624F8A50F03A1ED39AD433793EA48E813C660A8B43C103438
-4C8CEA258F9875E82CC4738F61768B9A0FAA19DFC4C8CF7DDCAAC70981F03C93
-A2A6D2371B8FF974180439E3430438B0A5BE3B8516CAFB05D2EE51F5CFABD5F4
-9FF5166594E0BCAEB18EBF9D8083F38A2A707779627375B2A1AD31909BE34782
-742444578D5BE70297615061131F4A275F28E3E550777E7BD3B10102E03075FD
-9D89C24D708D12814A70F378B5908096524CC9068E8CF2E082D6BB817432FD8C
-89A17C5DC6992C1C3A59083A7F53892360B794D45FDA420CB5FC2560329640A0
-AB0564D8A0421411D481C6C608808C55342A7C5803B50A9E1D8AF4383C7ADDD4
-29CD57BE680CA8A03E9E84500479999304D4B997F8FF3B53898BADD14F89C08C
-E5718620FB4E081C54D064E015C2CCAAE54CB950BE1B8A97E7E5E2E5B5FEF65D
-9D53186116B7943BB8833FE21366E6FE43F8C5AEA2037149A3FE464A034B76F4
-098DB9FEABB4486F01788EE3F8E8C66197E009F1219470E2C95CE9059823E7FA
-4307E26EA8192B9BBE4599B1ABC06541E0A26E6E8A9F57E74B7B2A06E52282E7
-86F92BAE883FFD3D2802696515A2C69A1DA08569EB95FA10D9CA49E110A8CA1A
-350AF5A6F5A989CD498CEA19C47CBFD664EFA5410F0A7BFD969903AE3E1AC77C
-B6326381963668445133B159A9A72ECF078635DD9F89B9BF1C458086C26753B8
-29B47C70DFC282E3021DE9A4D5350BD8F98F68FD49945269FB6C73BBA9081960
-75BA537DF244074B277C4D3BF3A59FAA6F0E0F6F489FFAFAAE94DB13119757F9
-0FD044781469B0B7BA968567B0A07B6B154E7F6401028AA140E5AEF100164792
-BD57EACC8D265A287376B7624BEB67980639020825453CF24621A82C706099AD
-56277695E526C787D44AD36F97C29A471B37EB2F390120E3EE4077B1EC835547
-7FDBB26B646A35643E447E20138F7CE5C3D69CA733B0847CCDC22F5F6E20CA60
-3B81AE63F6A38483E04D634480ACCD2EE089809361D085AB9609DE8D0134F462
-AB5DC21E5A8608D25D7A5B66A6A6921DD8A27CBBD3A5E7CE49BEC015B774294E
-A497B57C35F75AF64631AF4B95258EAD0F9501B35E3C44944DB18466F2619D28
-981D2AFB1654E8CD8E174DB350992BDB35983CAA5EE9184179EAFB93552705A4
-0208877779112BE42C576FCC6A3C94133DB408F4ED2EA4E4A7A6F5EBBA74B161
-1D0F116471708CC98EFC5B14D179EF07DBCD9A5B5E7E6A15C260788A0626BF8F
-0DECA177D2CB45EA9C90F2FDBD8E799BF42C9730F367F3DB1F6167D263E38772
-4D51ABA82E74B481F7C90A4AF598946869466DF606B45FA82F214A3590C02EFE
-9A71EDF6ECA7496812F0F1FEFCB29FB0881100186AB2186509CDB0670337D096
-81A41CACC03363D397272251D7C7A1374949A9D4E3DF32789AEFE3127C224D9B
-73B6CA57FBA0E54F0A2E38C32AFCE9DD385525FFCB5CF9FE6CC9684E77BDDA53
-05049A6A3E589D31C7D7066947175109655B4C3541BF05755B0644B55D34D405
-EFB4BA8A0D486249EAC7CA0C0F185CC19680D8FB5BA540B0A5F27E430C3D0C72
-CC2F2B1F06F36258878CB8AB21BF4A4D7944F19D41B79E17613C272D5E40763E
-4462D5C8643B4E37FC329056CFA0BB8ABB6D64A146145182015F8C892A5576CC
-D22E976930DB0C1094EDB5C122276A0764844C35E10853CA4F69C58EE90D39E0
-9FAB09B52E1DE908A2CA2F33D594F585828495B281022D2D00DED3BBBFA0472B
-5C630EF89ED53FFE9BFAB5B8B7F2B08C0CA31DD7223BBDF5276F39CE71EC8FE3
-7D250EFAB54CFACC7179AAA98EB8F972E8D03485630A87CADC425526D9BF1482
-E5BACF079037F0EB2141DB6CE00D0D11EE1B7B2641D412E78583A547547350A3
-317CD3CD18F7FE7F38FFF9DA57D7D44A58A96F6EA309E2379B186B7C5CEFCB94
-EAE8195E0DE7664A364CDBA016F43EB88FE337FCF80A0498C6A894C092B585C1
-02789DA87114C50B3EFB823EF5813CAD71CA38444B2BAEB33F7387C1A9F512D1
-8439074FCCDCFEA654A5B78BC7F253076F56459695AAED5C72468AA9D48D72C0
-0D9343A63A642D2D216EF05B1D81157629EEC652411879C94F3ED47B953D314B
-8756938270DC9054ABCC8DC28763A8A5C8E561F01E3A2D76DC37EA43771CA11C
-6E06F985539FF4D300BBCA574A755C28203426729FC73F5CCB978E74B4A86F50
-090904E48F9A0A36C1201B809559E385CE9B0CBC885CF20B31BE2215E3DCCD4D
-9F1A56EA2857E0B982F2FCC3FC1F7E7850E34D2296AC3CA92DCAB4026FFA3944
-25A4E19A8C678E695526342EDDD5C9E8D055E212CC7A64E1F3DB7DDD88DB54BB
-BF92D83DAB5A0EF137B84D56883529F1795CC63FDA45EAAB1E66535297FD8A31
-8B683CFA039F6DDA6A21539E68C8C3520B825D4D8C841EDA265E7E04103E14FE
-8F5A6476DB4B6EDBCD085736502B25FF1DC12B9C0C6278E1DA8706AF096C0935
-2BE1E7AE0A5F2E2EE6DFBC34F55A2425344B5FB902F82963C77CD41340E8DEAF
-8B73457EF0031DF0461E37407B439ACEE52757DBA679B788CCD528541E8EED39
-63A63BD312457CF89C911391F10276F426E5022A760AFACA626903D896D4F9FD
-4C485261D16DACBFE6B61E455D2974247FE0F5EBC82AF0575BE40D96128409D1
-F99978F476C9ACF7E77C0F615ECC1769EE2B43900254D7F768F9BDCC0655736B
-5FF04F81066EAC2E6132EFCC2C65E859083D9928086EC36470A84FFD5FEA00D0
-67821313F38A46E47A03FA855A14063F14FD68631DD0E44ED2C6CCB171653A56
-EF323B19961D3B86CCEF235265D30805CFD1C993C71DB7922A5221C5A8C25016
-C380A6557419CC7879EDBB21C349EF33A2595412AF7F2C3688C3C20CDAF1F56D
-36475154A5AED3739FB3082CCCC3B0B325ADF3B8592A0395F1B7FC724A0AC009
-F898E8F9AA80BCB48C76AE94C151FFAF4EBF7D870C65E35002C7E445C7F00C77
-1DB6D2C260BB5E9C9497EBD922E7B9658B925E54E00BAAEE21D6A67EB514711F
-3EF05E302318206291A96BA66572201ECB3F226500277E9638BC84731B764B4E
-76AEB32C03197FF36556D34F2B8172B7924441264C9DF83BAFE162B49742BC52
-B33E31DF2102D57E8C862D930B217AC1CA0CE9534F62CFFF0125CAF9CFAE31C7
-DCEC45861CA4AEC55CF3409C95948ADCDC660BB19772F86D1D456A969F5CC3D2
-A7673706BF239363D20AC2F4A7A351EB3AE4C2DAFEC3947F49673BE9EA68B5E8
-1F35E4478E89E92B38D19C8A368C9180809B53F79FB32F408F7388C76959D215
-C2BFEFDCED1C0C8053DDEAEE81BBC97E15C6CAEE8F05415808488F419AFBBEFE
-691E5A910B53A381C7436954ED3E0E9EA0E5C8817B67288F5E6CCF731FF6B165
-C7000B664C9A38784ECD0F9C214C336AB6BF4C9ADC60F44FDE100330C5609178
-583484D91C84880B36BD316BE0563278D3D29C57D4E3404BF3E0F5069B2988C1
-F1AB5C9973DBBD265FB1165E7808BE8D168B63525D6FA944BE5BD28314AE0A5B
-101C78A4BD532877DFDAF7F4D747C27C1D1FEF2C3556A8A45BF2C88EAE01D95D
-77EE9A180CC28C601CC4B00BBA6198BC5D0E8FAE6843E705A715A51EA14809DB
-02A624CC4BDB623FADFF90F5A137093380095B820A4EF37CB35326CEA4674D9E
-4A8184D25ADCC9D3517E6B02E00B127ECE775FFA250CE9B3AA2984E856087DE9
-7AAF1907D68F8AAF3CB07A034F88E976529AB6F60C190FF952EA0DB2672FB4C0
-D24735FD57932C664B322114EA87D1D98229C1B5AAABAA7649C574E9C05E42CE
-38CDFBB171E7B1FD1882754BFC0737C55DE2DEF0DF0EBDA160D84CB03231078D
-1FD1F588BF9575C29FB680F65078DB52DACC096AEE312BE16882383C9A102E0A
-DC3966939163A1188E252633CBC3D1055AD97AF14393DCBA32EC5D24D0488DF2
-CBA1733AC645B2DE4F7C8A3ABF20C7AC37C8C43EC493F232C054373AD93027C8
-B0A2453AF04AFE94CBF29DB005F24F9AD2E6D4CEC64F329834F2F39A858F0E63
-C0FEBD5EAFA6F5B380C956F445C2BD51AF4234FBD3CA4466B34D6152FE27DF3E
-D6025608EE647DE4BA7A1DC7A1DB1651192EA787BD75D82CAFCC7A5726928CE7
-CEE722D3C8B9DBAB77EB240C51684EEBF570C8ED996018913A8D2DFD12D341CF
-212168B14F6EDC5B95EC6466454F00EC3648C03D1618ED34C57B0D1D4D1732C2
-077AC02B5FD130DAFC09090F1CA5C1743036810EF86FA119A2774E518C82C651
-F3AEAFEFB00233695DAA7528373463C8E3AADCA69D13929A265CE29CAE7C9B22
-411B13F24784DA42EB3DF6C7C6DD9C04B167384A6DF81088F50B51CD10B9A4D8
-1B6DC94827282BE31501C03C29265BE63A20BA54B1690C510A20613ABD10C545
-6A7143BFB9C6E2D5156D926891A0BBCE62EEB65A45A1BD9557C427C1872CEABC
-411CE1ED857190785BF506B52FA56FAD1EE7AA168D9CF763AB2B7DA561008E75
-F84D2DD747282FD0BA924AD3E271E597E9EE4278D1A422317FDAB9C5DF0B55F1
-67FB7847BF5C3D0ABB90D0D0D0DF95A520CDDC778ED22849B23D396774C93702
-D33D20337D58BAD00CCD12FEB34B0D4B5561C41B402A59021CE7023F12B9F305
-9E5D3136228AC189CE3D18761089781C5AAB38B3B7FA6205A926262E58AFF1D7
-FD536B19409F82B8F89457FD7503658DA8CCBB35A9C374EA7664970244F14D04
-2446BFBD583766C2F552EBCBDFFB0BA521C2EBA849B48C9541D6E7E6780A52D1
-B6326A1DFE69B33B5181FFD1013842B314787DA0E86C86F434258DECAF48CBCE
-548A76804C2DA46F3852540B2E194F5CE95B34477EE11299E7C1A08B4D4BD28E
-1AFD0E500F7BDD0B53582FF2B9662E5F608F3E355CD95E6A216EE8BC2C047FC1
-6A5DAACB08C71FDF705F882CB2D86F91964FFAD356B0D35EC4A50E83C104C95B
-724C85D256C06AFA4AA0DBDFE2160F0ED9A8D0BB6846C42055C7BAED7BE1C519
-DA628C270251C4B60D679C9D56DE5563C4C6FCE19B9C6D6EB99EE7F6E3598C9B
-063081DB9D3701B62F3BDFDFB783E35AE6ED183141CAF6867EC74C09D2B5122A
-C478BE7F37FDBEDAE08D4EE9637A4B28B81FE1A3DFCD8DD00828FF42ECF3E22A
-66F0E8317EEB7EECE2DEAAAA78687C26DDD470B49649CE19BA786989B76AA8AE
-4CE3568FB47893AE67D8C79AF5457600CB5B09A5F82CEE8027AFFC026E59F379
-70780DA7A2814587FD3BE93E38BFAC2BD30772BE2771363C561E2D9F54D6D1C1
-EB4C006DCE83EA61B8616FC149D748DEE7D53B1E2C55D487C58F987D1FA8948B
-B116FB9E8CA9BA70F0ED720655B6336764016FA354F334795EBA5FC35AADB9DC
-BB50F313F7B626AB164B5248F9460B957D3E05C047F26776E671837B4B2EB458
-5E4197F3FF3087389755B56A007A501752568F920F04BA3307B24E7211D39FF2
-40FC4988CD86E921ED827DB92212523B7DCF6A14E897A3FF05FA5690C71A2B33
-216ADF5A2E468F0E513CAF9D957688F45A719E220F8C76CD2F86B0915ECB3EE4
-BC64C54A24C753F9333C71A66551993BBAC36975DECC66D43826281B63720418
-7982B6B5C2DE44376E5D7192375381D72069C3137478490927353EAA5E6C24DD
-56AFFFE84F906F71558951ADAEDA19FA3DD49A8A8144BE907B1A139B40A5FABE
-8AB57CE03574469293ACBC02E44BC0C7F6B36FB58761C167BC9A0164B91C9995
-2172898DF2F67D623CEA81904E3589FB4A3CABFD3F8BA922F8A55BA471E799FA
-06292C922ACE066F24EDE84E43D3F34AEA8D199EC21C4BAF8C00EB611D27ECCA
-8BF0678F48EAA7020B9F98CBFF67B12D46A64467FE01BEF5E17EC7B2080655D6
-B384660F1CAF85395CA2325C1A0E8152073E1A4ECB1BA86E4671E9AFCECB044D
-AC5C4892248B1940A3279769779212D6F87CFD18FD76120BDE5AF1DDA4F42802
-90640E1B77DCD2B7B302550C046DF13D1B7C8FC0DF4A202CC4AB5908F8E229B5
-BE28252D80C6D12949DFA9776C7B3DAF0DA811EA7AE53A70B2059FF409271852
-A43F5AF79427F6EB018FEF249B7301D8C9844309A52E41E2A5984035A2860156
-44DED1705CC59885042D71DD20EF695057B8373411B15855CD9C61C59E
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 6 /plusminus put
-dup 36 /arrowboth put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E93302530FA3F4BEF341997D4302A48384A
-CEFFC155894130DFBD7E83DAFBCE70381094F6605C8EB9DBEEA3DCEA0333F929
-2365B0C003D8996C3E4E58354D9469906A28DAAA2DF13E0859B7EFA49E7B5EF8
-D01C865F4EC310688116C8B672599A57DB03C2DB20806B9E15BBB2A87DB203D7
-14DFAE5551A5D34D8B4B6CB1DB4CB038D54D702E3B67DEB2898C05EE33325853
-3F09AF1C2DEFC5257DC5C91A6490DC40A48F6B7168945ED1FFBA835DA83399ED
-A9EF1ADC5EB6DBD0B789B9F28DDABA4EA659DA94A569F2FF3292D067941CB094
-B6C17CF8B66DD7C555A45413C3DD9FE30B2E9C1ABC7EBEF6F15F7DA1B3D9D8C6
-2899BB3239FB59D09F31521BD6FDB84438F675A5357CC2439D97F825BAF6C79A
-4DC06A86FA4FECA352121A4A1A3FB7A976232BC4D9BE5116BF8A5EB5DB354EEE
-3D0C229F849FBD05FE564953EE85DDB485D1886E1FEF1CE64E68F00817F8B0DF
-6A653C68312B93C3AF89C1B2A83DEC642E7D1FE0A0D78A7FCCA1B8A96864EDD5
-9119B787D621E57B088B3A463640F695E6FA699AAC321B53F93576ED3DAC2FD5
-86E18127E8FA95D79886276FE099621AC8EF46951F508645581EE53EA2E38F37
-EB610A8F242DA8F7EEABD6D4ABC27DC76D01FAACC1CAD424C51D9F2070AB1A96
-AAD2D3510AA34FE5F7C534D8AE6367C287A38948D9CA2398C799C5F861C284B5
-40D6C1804F41
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 46 /period put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 115 /s put
-dup 116 /t put
-dup 120 /x put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
-BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
-09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
-3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
-E8929A4BBA0EC700D5662AAD9EB38047C6C7C63EB3FA03B5EA9E56DF0E30B3AC
-058198429E22081FFD4CCC1F3A7A88AB8A22C7C6C6448934DEC2212E89998259
-653D779091F4F7F6C0A76024363A9001817B1D572847779F98F02FF9A1B45270
-2F7E42A25C687D6E56C89BBB580DE865D7372A02F329E71E0BDDA2CC8CEE41B7
-FE95846B78982FAF79E544CEF8D72A94FA73E69ED3A5F834BBE082CE0E8D4EA0
-2F619CF8441B5E057482D71D834BC6D93BF9F7777FDD2A5216911D31D34CDD76
-8D0F805FF6A71D77AED0D540ABF995DC77C30ACB207DB2513D691105199B2555
-CA9418777932A54E99E56E5171261B3708D8646A28803DEC8EABB44E80F3132A
-B273B74A56B5770C09508637BE122DEFA8A0B3438403DF67AD2FE9641009CF03
-44E39E8A56E244C56B8777F486C958C5196286F36761F2568FE1A8A6E74D6891
-19F7E393FB94388DE651E078D4D40DFD141A0FC074ACB3384BE70073C08E2EE6
-065EEF9768D260C08E40B2461EB226D820BC43EBCC49A943528B8E5FFA474300
-BEE3AE339C2E0C4B247A4F8F9CE588AC67CB6FF85ABAE18AE0F77219E44DBBF0
-C6B5958D89EA19BCA780BEBC7C29EC8919CB9754753DCF4781F34FF4F75FB52D
-C00A65650B9AEA0411B117D2DB6A813F17569F8D0BD600FF94F063EED10A9F10
-72B6FF606A4778CD73CE7A03EC5F31B6B4C9D93B80921FB7109C1E9926C77113
-5AAF1CA527E5D262674D0B05681E38FE2F14916248E81C52079AE46C4AA3C1F6
-9BDE6B8A497600BF36E594079AD3637D27E2F4FB0E89F80CD10A1991CDFABF46
-C36D32D5309D24024BF22F920D954E50EF667272BFB5CAAD0824641634CA4CB5
-E7491D66A5ADE670AEF9C5B1F1B45497FF99C2361EDB1FB5C8F5D9EDAE288C68
-EA3337F3AC1EC76037252B7107C3F96746EB0A6BB2DD05F1D372B0ED5C3F56B9
-CD6BB3EE200D9A60372D4EFAC7739E2629151FDB2BC336A95260119FCE6A9511
-2937DC9F522CC0CC6DDFDDF5673A962E2DFE6EA3923A5CFE9C4EC0C69BD1DEE6
-9F56420E6E8F972A3B7462F4DFACDE97B4F821E1109099298C77FC831E6837D0
-5BEA4AE2D59CBD525A79C96E491C20EFE0138F1F9A9AA1B30367982357719380
-EDDD75F4547F1997BEADCB8B7FA9227DD211433CC05C0B804E8BAAE95171EAEC
-EFB60DBB8399E83709895D5B4DC11E11FF91E2A39861B12FFA587E8D752D74F8
-71456FE15C7B6A885F2BE67C63B2D9CDC1EE5688CE99156821183B552DF78DAD
-64F178CDF98390D8C1967CE7D9BDBA99AFD5A9908A950A11FBED22FF6A61D0B9
-3BF4842A22E2295DD259B0DCE2773F9D672B217B7F19A4D22BACD2DF929FFDED
-EEF43C052D515BF739EB5B397F9B8762083965A85F96E6BD48E0402C85FA03CC
-5CBB51BF4CDD01B891BDF1959AB822E9E6A8B9CD914EC25E861DAB64C443641C
-BC2F1ECFDF4C3966E11F137787AAE702564B3EC4754982726AD67DB2A98E2EA6
-3B843D824EE3FB92888AF133ED29CA1B92A87C50E71640E418A5ABFFF469F972
-8AAE580B2E255272870AF5BBF923F9805104847880113BBFEA1FFED8B19915E0
-A0F0436BBE20C7E3FA1DCECFF072B8FBE3A100A33B181C0816CD4E28A8E432AF
-BF308B89336A8710EE740E1583A9ED41C97F96D546DD7613CC7B214501E14087
-1E8F1002BDBDC12DBC8F4CDB5D2E62EEC19007B3D89407B865721C28C7579845
-04CB6EE7A3AD6032D3DCF9D01F83DE750BC8F0DFDFF13FD400AACEC35690983F
-B5E04373CCBF469472B8AA0FA6A398BEBEFA8D914D548D0BB5589E1C40D7F625
-4F8E0FC08108C2288DECAC258D819FF92AFCB63954960A5B194934FAB5F4E757
-FAB4AF44176447EFE9E20B44F0E8BDCCC0925DD4703F6DA0B2E61E3121CB737E
-9E5FAE5B899987C8851CCE11408B5B12D5F67DE0552ABEAC69596F377AC65A83
-25E8ED90ACA8DD09D0D9AC984C2EB9A01F3502CC81422C68456A9B15796C8B08
-0060EDCACA5CAA76549D613EE7CFF973E9091B2B8EE4B1DD0117DC140C16527B
-47B335576E75C4E558E3777AA9EEDD3DA21B63E7DDDC10CBA609090099118E86
-37A4AAA5300E6DCB887E36A60601D4A02E98A547AE834960BFE45F644A23211A
-3D039D63BE8A49BC421B19E6FCD8132DD37D65E88C685B1775B1D05FEB41C705
-E3DEEA6307A5B44AF3153407B8042099128F867D3924B477FE258B3A23A47757
-B8F09B52A747698DD84E7EE65C4B30ADC97F7D6A63BB621E9EA9CD76BF8F3408
-0FF1D4AAB7A5F1417EDD399AD210F59E06B606A26C69368CC896616E802BFBB1
-613B4CD2AC76FB267B7EB1178B703F33B8D199BFB0968A82B193A1A32325442D
-C4FEA2BB70F971AACFB0722724724FEE9041A3232BEA3A9870939C5F0A5C00D2
-B292BEB07201BA6FF9B43D887E7F18A28AC2B9C998419378DCFFD57DAA9A88BB
-B97758828F0CFD6B810FF4D2A0B2D62D06110F2C804EB4E555E1B2E0E316E503
-D30F7878704FD816B6F19D49A1F9B37CAFCEDBA771421CE1C43DF0BCF2B2912C
-2E9F1105A4A91EB3BE467C8D4B3312D204915C237E09327BEBE496031CA2BD42
-EEF53F0ED5CE1F9D6496624A97042B0B45B3E59D01D41ED3DD16399C6279A9A3
-491272AE972C2F332CA37E1D074B97C62E7308EC803C251DD44A2B9B2317FC72
-345F338F335BA8A1C0F4E6BCFF7DA5CEEC539C08B26384F70724118E3D6BFC45
-608966E2FAAEA78A14234FE7547DA9C2D02EB4EA39835064BA994175B8BEFB61
-D0450C331985D54E2B1602D85EFE3A09FDA2346D13E203F3A52C2AF678ACBC01
-3980E95BDC04F2BC968C1341FCD4463783167C3361AF4777333EA568DA52D2FD
-A2B34B7064477C2B455385ABCC88BCDF277A1B33C90D3A6A431DEC8BB5863B70
-E1C769932C49EC1540B1139F1300003F59042EF79953930CC90C087370B46999
-0CCA827C1F1AE29E1CE29098CB4B3CCB91A61052071A550DC52284DA71169D75
-EB5B418A7CAB2DD4D9245615DAF8D846D45EF49C331E11EF875B2C62E470B0F2
-01BA91B2141C4380CCF5773C0C7B90B4447DBA415A2372B2DA4AB109D13DA0C0
-6E5E54C9DBA4FC967F0350E655425D1A896A2E6FF676657F4241A76F9F018190
-6AC7B8F53052B8DCD54168874304FCF0530E38EA0A422D292DC6E310495B5AF2
-E2F54210227F0FE30576CD6EC8E8BA26A398BE076716C20F0972F153C404D539
-ABDFE8BCB69D8E9A7D7733A7123BDB6E7755E35B10C233DE30BCB34227D7E550
-56DAF2DC5ED812C1127B1EECE52E1485FF2DD092984B0DC1E58F13115E939B3C
-9639DD3B13604CE8DCD603A13E8DCB7520461CFD6EC06F7B0B729CBDDDBB89CC
-9A70CDA0840B9098C39A01DFD556E3DF37966F07921067DE045A80D5716C8F11
-BDACA5F2AF25C7527440BAACA8C5F211A3C30FE38DDF87F34FE9E3DA9BD3ADB1
-7C151D5AD23BE78FB5672C9339F8BD904AFAD6674453A3BB589C1AF295358C1E
-4F6F89BB020E1A146B5855B46A366773B65CC0C449319CCDBE75B3D8AED76104
-E4C4ECC307FBAD006E98A40268DA58CFB135869C0DF12F3D9F96AE010BBD2AFA
-5297D587D5C599DB3687EDFE865BF7AB530C8396A7DCBF84D196D65055E078FF
-CF1BA51EDE702BCDE009D9903EA7658E906887C4BD16E91D9FD49FCA8F75517A
-332077D8284E564D84789C561E93E27CA36D32DF337713FF2E91861683F6DA40
-C5E8F505640B8CE65895FACF142565AAB691F7C9376978F98B679CBE1C163029
-1E49797740BF747243A3A569811EBAC9119E7FDE8026E752C198D116BEA29A14
-03F40F6C30C571146C72E6AB8F581AA24D24B639BE55E925DB8640CCEEBF1277
-C5628599AAF6D1858ACBDA07C56A7AA9009221D0DA3B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 45 /hyphen put
-dup 58 /colon put
-dup 67 /C put
-dup 69 /E put
-dup 72 /H put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 79 /O put
-dup 81 /Q put
-dup 82 /R put
-dup 84 /T put
-dup 86 /V put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E427782B91F1098562
-3E22288F48ADE6EFA58CAEBE7C070A920C3A85F4327940DBD99179C26E3ABF17
-64E9CC6A45F17F19F3EC1C53B17485B813CB01915D55CA2034552666D5E44A96
-A0FAE064F599AEF095CA1816F7066EF0AFB220FE1DF11FAFD503505C5E6793A2
-6475E95FB467E2F3B5E7C6663A70B15698A1D158E23D3ABE3B6942B24832AC3C
-13F258038DDF209525C4124806A369ADB0423C2FD0F823AE3056F380B7128089
-68987840F5C813B43027BCB2A20A1378CE89971FFAB7C49E769C107D0A77337C
-26919C3539778669CC12C77CCBF76FFD1E1EAEB90B33848CC5CF679166698556
-B7D72CB8A2244D22E99AF9F854F242617F6F3E61A0DC7BD2BF6A40C87F046879
-D8D9A19460B6261BF22B7DB0E3C0266CB89E6B328012BA6499F3EB3016431689
-E372BB495E3C0861C6D08BD2477EA2A485BE95AA1739B80EC541D841D22DB92E
-02A1B7E3CC1686F87BCD971917C5C1A65BFE2289A803E76639F8514E0D3675D0
-96C20C000970A05788A538D6A49DF66AD5C336B20461172A6A72609A577D1689
-75FEBAA74943DCFB58C3306A436B9A04921AFD5E852BA61F8A24EECE2B189934
-9723380458FD60FA66245270133F2497692687D0ED736302E1E415C74951869F
-00EB304B5BB55326C942323BC1B45753B58A961B5FAA27E04EA4F40E5A7689CA
-2A1F93A2EE11C08431C377CB8567BFB94E591F1E90A43A0683CB6430DCC6D8C9
-260726710936305887AF0B706CB4207C093A062E9F71416BD3CDCE1B61641767
-DD8531D86855C9900740E0F462E9FB34582AE93082968D35373332D8B7826736
-391198B342749A3466F25EADDD844760D4800B34C5E62AFD5ADF384A5CC75DDB
-3A01C80C11EF5942CDCB0FF12BA3FCF59E38CA65C6281B3176A173F444F74AD2
-F04E140B0AA8FB97892C6D56EBF0CE944CE85E6338C14CE9379C0E59D12B0688
-FA11EF7690BFD992B62B21415CE5DBDEFA73F5A2A824E77EDCB985AE0DE18ECF
-DDC0B34ADDC0DBB27B780873B2805F8C6BEBD6E0FEB5E7F3055D2A2B4E5720A7
-4C955C480A8B44A600F9C05CABB4C2F4E611FD6F89F5163134298F633595FAFF
-5B5FFE82155DEF7794C43738F417358062E83CFB1874D69945085D2A3816598A
-F50C5FF9393C8943CD10CE49605A3A1AE9A156ABFEC23175B39D371164D98408
-506A49A965BA09DB934F2A75EB77DDF6C8440C9788480639AB0EFD730F4EA731
-0543BBA428FE02CA1CC4B6328F448437E1DBE7C489078336AF4F6E32D6DF15CE
-531FC458E56696745AAE8BB6B9450C245726171F769D87ED908948F4BA8AECF8
-8F003C365266F1B442AA7A7C2714E9DA2E026CECF393803FABF7680224DF9AF4
-0FA85E76249B1C4A774037409BDD1D02D4718DFB2CE5A5FC5AA2C7B06579C881
-E0C9F0CEB353D5E5F472CCFE1299C53C8CB62122024C2BB84F5D7307C94DAD6A
-57D7DC660A66CDECE10951C3E55CEC6148762139D2EA064CCD32B5BB384C82F2
-43E5DC85EFC369269C27FA9B5AA9AF74FAC95E321DEFF3C6CF75BA836024AABE
-3C30F4C4B414B96EBF3A55175F9BE6F8857870656D3051D104058BDC0FDAC3FE
-A48B5B7178168A44CB954F4D8C3195F1FC71D1B843D5404A24C7B9C4D45ABAD3
-99C51873F5238D3CD624459366DEA9C1848CD2C04EB2FFE0DFC42F7AF3498261
-AFD4EF43C651468AE86D61F311153A9A5D8789476F21EDED63D3DE855FA062F6
-43FD9D9CF6184D27CCB66EF93A1CC72F5C7FF9F3F49A2E92EFDC1D99B9FEEB20
-5FDA506E07DF6BF940C1D580A5C059D7E1DB67B3798A301741981458ACD7D2FE
-E299832B48FCCAAE65C06E1AA4E10CE41D15EA08E80B6D2A1A53C1C63C9A457B
-829A7C23C23401ABDC0F25293590BE8B632D15C80F81CFC38B85A94B5D48FC3D
-8C681F51941621760630833EF2C49A6982CF35898EC1EBD2177434E083B15A57
-836BF17B4AFD3B4F3D712636696DF05FE82C47CE62B61CFDE995149A54F298D2
-6C3235FD52595BA9B7806F11FE4F0142DACD2809372BA24629D130D8A01F10DB
-776E447925376F4B80CE2B6B66BD5B7B3D4E2621E018358F4AB3AE45D0E1A00B
-975BAD2008FEEA11552451F1A61E912503F9377718A4B325F647507D5E757230
-DDE27D6CB87589B2ED25882A7B80D89FFFF48C54C01EE3B8A918A836128CAB4D
-7D2ECD77A67A49CD91CE5C4E003DA9F1076D30C611A0DAC289C17741AF82F473
-E7C49BAE28082FC03B41D4B541D0BA5D7D82379EDB9D64FD5165A0103538AE71
-295753DC2823A7C5E100704F954891A23D719C4F936DEDBBE9C4355B27B89FAD
-45A29D0E5C85A69E2D200305BB3708308BC679C2FE980564CBC015ED3D782E78
-8D48D2F57208FFD02009D73393A0FEA4DD14CA62A446B16243C2A8BEF453A90C
-78D89D69313C27957F34A862E45FDE5638EDC3D57D3117B0CCB542E0FC3011CB
-6412293292FB551B219FE3072203142024C53D3BDC5C817B5E8B6A484A2A8BC3
-8BF7081E875F36464EBC8D7A828899001E924BB9611CD62366EE43064783C430
-21CCA1678B538BFD58A2291AC68460F1BCDB36EC0F075B8DA7B13E363C519A23
-C96FA37135DDC2EF4FA57F181A94B4CCB800D2F7024CF1D7993F053BCAF911CF
-60A36BF423C99A43A2963CF3359A1F2C8188AA8EB28DF443AF3E4AE50F23F429
-578E18A4FDB99BE0A2225E7DD7AC06B868F6B8A5660D3FBCD365230E384715D4
-33ECD66C4739A829E4885D46E14B36ADF54F37E79CC49AB1076A49AD8B27636C
-0732AB8FAAED87C7890E5FA5317580C027E5047EC30A8356E0B47749CC737382
-993D676928E8142E6B51307E1CF2B3BE5AE8CDB33B649FD018487156F8E2FF7D
-85E6B939253DD96696E6D570E259234C47992C2AAC13FA6D086CC91C102A6CAE
-B30BF0B9B45732EE55E083103C34266B2A80F1477E34EDE9913EE90FB24B5D9D
-07514B16E3BA70ADDD02564411E365C042F716B6C5C8E94C26E92AC368F51323
-E880944E0F9741FAC1EA8D41EBECACD27AD338A55BA30FC3349261BA15048299
-4DA1B2149B74BE8862637CD26CBAD1EB1E712A4C2E36B625CBE8D1B0D30ED6D3
-7D644B027941EA55026CB22D8A4C08AFCE45FCB99ADAF933E8DE08C8967E92A2
-45C42E9499522B4B122F38BDE1023EB714EF35722F077CF2D71A144B64773436
-D35008625DF320B7658F5E2E637FCDF8D94E49884F916E3F39AC2071EFFB156B
-75E3358F9D02D4EB15F088F6452CD9B3710B052FFD5C5DC3A45B7C3A9EA11305
-8DEEF39A93AA68A486275696A4E4FE27EB577388925F228B9239AD395ED7052F
-4DDF57867804E3FD4C6F7EA8622BF2401D02E2C4E53AD18105684ED2CC222B1A
-38E59F99E0E25D8A9754C6C6C171EF65A28310125AA193735F026DD112C1ED2C
-F61835AE0AD3753373678554202918B032E0A363BA9A041C95CCD442BF9D4C43
-D0DD14018E9422C4550586CE93E69BF9C9333C66137F6E087BA85EA81B90CBD2
-75F45713C407A86D381EFB9692066BFD9237468086345DF9481C8A571F695C40
-E850B30AEB04AAB9BF740ABE53BA163C563F49A566475641D674538BF8531DB9
-DD77F36086A5D1F8C2E4569560A1464F5A27A4056195565B14A0FC3EFB8AD267
-1F4996B678C8C7C804E1C7208DBC3AA7C29BCFB8A3B796E0E00C8F3832BD5132
-7602F0FBCE8E645DA3A86CDD88C7B898C31D8DA72CAB51ED4EB5EDC680029AA6
-FBA32B92E36AEA941BF29DEDECC6730EE3CC1AEB6212CA3493A734118B3466E7
-725EC06C69F7600C9C7FF98953F7A9BC0DD02C36472CDFCCE360836930293B18
-A523CDDDC9A8537F798F912967F1487D47CD1C46F1B82F1E2C764A24745D1BE5
-090E694A433F4C6865309FA9F606BF09D71A3B1EA34D64D3631012BEBAE8AB88
-37C91ABF7B06D29EEC9EB772A26C8A7EDA25CEA8F30C8C46F3847711D28EC176
-D834246943C44D362457A446951A3302816CBE65D3FB1CE0B281D795FF148938
-FAE1B297EEE2CF5F1968002BA2310CD8F1D3B7DABD2B1877F4368B5DA6E59E26
-2AD70CAC1BEDF0261EE31E3B896967D337954DE7DD1533824E1952234915D613
-069BAF373D8BE5B3A4C1D5538C4E1D741B90007560E89002B5EA819316B1263D
-9A522C23817B01E49C38454D1B1144BE93F86FD9B458CF8EC40BEFB0069919A6
-527E0EDD1B5A5D28431E8009045DE821E11F2790A0AB6DDC0D7CA40F8858E91D
-12BE281CA0EFD5A27F018EF6100F49A522F53721D8B6A41AA4725345112EE408
-904601539B671205A613D54DFB074EACAE2A86DD866429B0D1EB94F3E4E0CB8D
-D51D0A39716B59A4BCC253CB9359F3648E9207B453380FC76ECC61D46C3E07E5
-F63A715288750DCD67CEA7C055A53D53787AB422A0511E4D8E2536C471799A99
-4E3B44B6CB216831D0DB81458C2F709E8592DC238B01E1F1D39B562EB6998E9F
-FF31233047F609FE96866A96B326FD16DD5E509C045DEDF4DD8D7D02BF0ECEB4
-506B398F0A74B5C5E8CE0689C5E26BBA8AC11B22674A735D54696AC2F44547AB
-52E3BD8A7054DE97AB567EE4E0963EBF229EDADD57A2512E9B89CFEF374B7DED
-A408A7726EADBF49B0E6A177D8876B0F788B78408D56ED9FB090BAE6A8C6439C
-7F5AF2FE0C5BA57A389C92B865E52DAE238E22535279AC36E60DF19F54239538
-8A9781C520D97D49F6EA80C4EADE5BF9D17F3A28300D3C841B05A7F838544362
-6C23785D6B1C236814B0F7736CDC7ADAB919B6951FEE9BA7A62A4F4B9336C187
-117853565F7BCB05C259826777FBB49B5037F72AEAC8C1EDCF945092446FDB5B
-74CE9DCA84F3797FA667177421ADDB108AA6D482364A93F2225CF13CB3885427
-B1F6902EE69D064C1A88E5F04DA352E0345AF1E779CFA3FAF37727430A757CD5
-0B59E55A3E0230E63FF88C6750F76D07EFFA1A78B903D77E04023E5265CF5A88
-D811F3A0B3E2AF7052D2360020203F2F0102F947080662F378308D078477064C
-B8124AF110B4B33D710E440C73D210D805858A28FFDCD291A0B544C154A2AB3F
-664C26C9FC663A1A97A04A59C77E8627EB32B2A42F6690CE70786A5EF1B34E99
-57720D925F9E70F5C9DEE94C3E17BC30DA1B98937C573FC2C7EEB202645D3F3A
-816C190439C80829EEBCAD79EBDA164DEACD04107D74408F0ADA22D1F7BC00FC
-FBB6359BA6117D8EB97E17DDD4809C739137686F846FCEBBEF62B9F55A2149DC
-A71D994EB9EA9D7376F805FD9E904AC50A13579D182244B610768123B08F92FA
-1B189CBE3A9C8C5C2E0E63CF47AE522C4DB585867752FA2B64BB5F2D50ECA9FE
-2A062966103FD48A55B49F6E4830BF6C3939A40B918529B5AC01AE4B334842CE
-96B5FA4E6ECB15CED6D7F493A7E1605A9647CC0DDEF454A961CD757E59F04EA9
-8E62D3C999EFC2C5FE9BB6EDDDAF4BD31E10E9C5B3B7C4DB75274D8ACA7447ED
-B34272B2F0E41A697D693793E0C04A4E9D30750A217E504FDF62D4A2AB57630E
-193BBDD8070616D59A5CC58036F3FC66836D63CBC70BFC19FB48BDA4DCF58D12
-4106DFADD95377641DE1A24A65BDA93392161491A564A317404BF46666D2287B
-6E3F2E0D272AA18337FDB9E81D7A2D0812BC04687ABA6D9B88EA883809FF7682
-652327BB3E10557534B8F4594B9AD86B95A9326602E865EC56AF146B70FEE003
-CA5B37FE969B196DED84A6A699F23BDFB8348F7FAE27DAA2FB12C0A41C7268EE
-972B87C8724F022A01CA8DB977738033CE5D8915ED12134619A71089837660DD
-ECFAB431F53699ABB1E6FF52880B2D1A1BDFD6E613AA4448381563965DA594A1
-0701242692DB7E58AF9DC3026082DEEBABA5D6958AFE2AE19D53F6C9F0488AB3
-59C30331BDD91BA7685CF5F903AD278C3D75404E3262CC157A1D3C567DCE7BA0
-3306DB42FDFC96C1CCDC51DBC55F46C4DAA942E953AA3145B25A5E2D157B388A
-A4B68D098EF6903721C8DACC062D31E96B4F9909B7528362F1558BC915A3DB3E
-48C570D4C1C8582E797D39A7170FA22E2358BE23067159FA6C098B8827F873D6
-5680CC93B5B05CECD223C9732197B96DDEF87802B1A7E7B1B2228A6FFAF80C5C
-23767C9B21AFF004D1DAC66AB53D343030C9B0D6C25B1891AA93E911D61D35C5
-0AC26184E42658AE9271BBFAEBF2D2CBFF894DF26772E5196A0AE47C8A52231B
-FAB82CC3584540DACDCBDC8DBC09C833E5D6D012790B9AF3B1580D0F7E8BA407
-E8E35087A1E3C5361BCC8F03C6FEFFBCD8531A42F1CE478A7D1039AB25F5B2C3
-FC71F36B8380B90869C6C5956D574D4260E4EE615559A581B0FA60A599F9B181
-8EA47D431915E6D598701167A4CDFA160A4B0EBAF14CDE748D1E614E1EDBB5DF
-65B380EA41B1FF85A9989829CE1C1E6559BED3E8CE48B69AFF96CDAF942A6D6D
-15DE7C2A3D01B99334FA908EEE059045846470E862FAAF828DBA1C08E1A798A4
-6F91ABA3380A75720DACC2676A99F70891B73EC130CA6F125A4F5A0A78B37850
-0A7E9F586FCF4ABFE0C651EF317497DBDCAE1C17B11092D2E736E89B24986085
-C2EC72EE7C3BFB61EC414C71DBCEEDA3BF3F0D2D94E8EE4526B02B48ACD39360
-A563CB5AF3FF0335FCF8C626639677C4D1656463AA00F22486568EBDAFF2739C
-8D55B844ABB8CEB3D0837F03DD1C5ECD36AD948B9A29F5542C7E92C1B60E2C29
-AB2EC50135AFCD09BDF341BDFD12B2A1E2886C3AB039BF92CD769405244DDF80
-0E2FD935AFB6D7D35C76145A8D3F4824B95E338DAB335478A23F3FE655107CE0
-4C4223CD2C73C25A674AD76C1F03E71EBE63629A83FE3713B9DE78D5247DB1A1
-581958FEE0C008D9D99A91D35990F3CE3E8063A9CE632DF6AC5B2C9B502943A8
-445842BDB16737CE0C64C546F0396D4764F05CB859975AAA634852A30AC70725
-1BFDB2823526AA324DED4DA8B5AED06EB3AE464E228109D9839AD2A23BC9BFF1
-B7524D5D193F799FB1F0F69D4A8C97979C384F2D6CD8EADC052E67FCD37DF4C2
-602954EDA36B0A7671D6BE32D78E3DCCA549236197B193D4D0D0A9653F0FE062
-EEEEF079F8675723406973C1C677EC7BFA34DAE98C5A43C32B3C4608A71C7C85
-4B9704A07D90624FEFBA36201117018E3BC5AB242F9D75014A4BA9DD98C04950
-4F50530202B7578DD05F1AC087B0D64D81CE0EC06905B5CEEAF1E02C23642260
-788FF9AD68EF0380A70A192E24085D5DF02B022321505CD52F25EB2E56DCE224
-2A293566FEEE9023314FBF5F8213C65AC9D5BE7D4B0D535CD07D9B1C5A780BF2
-3B62772883CB65C9DBE77FAAE77AEAFD02D448B914D0B1A1B9B4392C2F85F000
-6364A4BDCC7DC8D374A0E17F4916C0469B76523D90E213189CCABE0F13CAF3F2
-280D7CBE4FA55D914F97BEEFDB2A9C5072E3D77792721B49980395A8B9D41B84
-BB7B1EE10FA3B984464C976D4724A370584533A199D58E897246D6B6FF2054F4
-1B2CABF615E25B9D0869FC018FB54ED68D97380EAF6386378E421A12FC5DD31E
-3DEC9B4A2C6ADC74F7087A163F40D7F477F2D99CE071C34A6432938BB026A3D5
-3F6F8424EFFB7224307D25DA338D55770A004ACB20D575E13BEED8E64819DABA
-FB571FC7553B92B71BBBC21B5F0DF73C244BC910A9143A9D5126718E482A1040
-DEDFEF8A728BF851F17054041212A881AC57FFD6C9A4F120B8ED45183649924F
-068E43703894B9B33A121B275D291AB18C149ACE51F5C5BD60AA55BA2285BEFC
-F43DAC2383B82B8145A3963170CBB6FC34122ED0A0168DB8AFFB95363BAC1725
-820F128C9444E23BEAF86AED7AF40AD0ECD47A9485B2EAE88B80729C2DCE8999
-A1F03DA20B2E0B28BD8D48C7249D2FF8C500C5B766302CEF5F4CC94FD6CAA0C5
-E37F3C595966EEC397C92A483F6C1B2565C8D08AF784E760B8797FA420801F3B
-755C0962408DB47822C97C4C7FD8FF4A27A9E7FD93C182ABC49E9D6C918861ED
-04630B87FD49C315D1564121CF91DECE8A563D25D25C67B5C4A2061006F6D0A0
-F3D3EE2B349EA1180F477C9B94D06B0130CD5660C0CDAA6D53784179417352C9
-9204E4B968CA82528E84D0F259B95C985B77D06B362329E82FDA880D8F4EBB3E
-F21F95074CB03F0457FD6281D09B20D4DFA693CB36D66122D0CF46E01B7EDDD5
-8798D0B6D5540A8B36E26ECF3F011DD2F6CDFB60BCD8BE9CE6878F2BD6FF0BC6
-98FD2EFEBD93AD48996A8F4923D947140E37DF55082BF340C822F88CD8F3E659
-4AAF2558C9188FE279FB0598B2416612F6A5B486277871F3BCC9052E560FAC2B
-FAEF36D11147F4949545BA844ECCE8765621039C8BD5354F9F46BEB2820CB0AC
-AB12DBA87EAA80BB934C9B68F2BC5E780B4D43D7B5FC37E647E21D7C72876D03
-777F285A9AB88E524E261CF1E92C2619003A2F6D4F6D38138CA537EE1FAA521C
-46E6A8F2E70E907EB364A2E0041DAC26505D70E26B3924B89037690BB8382E54
-A9D3A95A9658AC4DF9C2417F6084A5DE2CC106996AF8870AE9423874CA8FC676
-59F733E4788F18A63F11B25D43C4A831BFE5DE59325383B4B96730D9ED61DC0E
-2B223BDAC365334AB22DA73308EBE02E6C315D88CF32176F27C55DA8EE2DE43F
-69AA3721AC94BB8D4FCB2EC151411F3608B1118146329D9B041DC3B4F0FF1FB2
-D4975D260B663AFCA695BF9031BD36EDAA097B8E27F41218D99FD4D23160F939
-B71155761F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR7
-%!PS-AdobeFont-1.1: CMR7 1.0
-%%CreationDate: 1991 Aug 20 16:39:21
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-readonly def
-/FontBBox{-27 -250 1122 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
-E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
-47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
-8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
-78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
-1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
-01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
-C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
-F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
-8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
-A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
-455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
-9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
-EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
-52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
-563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34F3E25568930ADF80F
-0BDDAC3B634AD4BA6A59720EA4749236CF0F79ABA4716C340F98517F6F06D9AB
-7ED8F46FC1868B5F3D3678DF71AA772CF1F7DD222C6BF19D8EF0CFB7A76FC6D1
-0AD323C176134907AB375F20CFCD667AB094E2C7CB2179C4283329C9E435E7A4
-1E042AD0BAA059B3F862236180B34D3FCED833472577BACD472A4B067A46F8EE
-2AFACDE591ADF7304939394F221B5B9B316BC47DC7772711A35B466E1790D4F5
-C02C57DE57A0498128C6041CB7E702F4D8500433633B8358C438237BBA39C647
-F659FACF75574B1AAD3FE61FB97D6C5D0B19E4AC762321891092E73D192C4816
-2F14A6FFAA1B22AABB65E8F611F1E9AF66DF68DA1B2B64B4CA8870261F8663FA
-28953254FA64F0AD6EFBFAB15830AF856A65835C803B70963595060F91F4079B
-F8BF5396F04C070254AC5DCACB20C0B1FADD38825886322366927C97E3C5AA1B
-EA858D5974EBC14D17D4ADDCB3C7EA74A8A2B75293747CFCE0B484713D631F95
-43BD5A359229F1276D2F652078ADA5000D1E060CE5CDF2E57401E487F3C10975
-09AACD27CEE8581EBADC25D0FC9CEA533B99DCEDC0F28E782F4FE22AE097CCF3
-F73338DA748C535291B4E8AF84546FE4B910107B6FFC5439C5B966DE6C905D86
-460A69D6031EC3F7261FCB6D932F722BC1F550574EBD6F676AC9770969657422
-4C8212F9FC9A49C9F0E813A2ACD16D1131A73D3001E698C63F76FE6D6143D310
-155256BE90530489736CF35CA2D7E4A1FAEAE2423ABB52E55DD7314097DF7C09
-F39C3E3A29F9BAA3AEBA89CC3E7B134E79A2DA39D449D98FE4ADE1A0ACDA79C4
-1E2C78CDCC5BDD192DAA27F17DC4368EBC54CC009802018E50519F69025DE7E8
-FB61694AEA672E59D00F6BA0CA9509FB8DC6544CB92B70BA0AE393A43959C90E
-8857B0DA53A8D26426CAE0DCF2F3033BAC62502E08447B09CC18B2525AB65EC2
-C63074FF725168D115137ECDAB1EEB083711F647F757C9806056811466D59087
-B93D6B71594046B3B60A7D5789D6B99FC14764428A251F0A54ED
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 57 /nine put
-dup 58 /colon put
-dup 59 /semicolon put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 89 /Y put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 124 /bar put
-dup 126 /asciitilde put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA411E43A07E33F7B09F2857AD105C
-08EB767A9F9C2C040F3E577B74DD991C4113C44027A60B8183F23B527D74BC89
-CAFD464A929C40B5EE63D0B69B5DD928C52D0F9839232AD4E51591D15C32E331
-78CD45AE926E05C5FF0375F97B4329729976E213EAC877D8B00F85E3D589C589
-24507F435755EF67755684CDD0C0AE8771E554CD0EDEE97B77131D02CA1DF7C1
-C7F448DCB5DC4BF378B0317D21F512226770B611A3EAB0AC35738266CD03C04B
-8113AC9706A39870A7371832E9955BBBB13FD47584CDD636744376E20A2A72FA
-A1B554624DE8DDFE51ABFE1BBAD17BD357DB08B177AD0B33D864AC4CC04D7F7B
-50BF3A26CA770502D639D64FE5A198EE3D217BAD1CEAF6195AEF54362334DEC0
-6E27B0AA124D5BD99A2FF168FA3685EFA9BF5809EC76F44FA3BC2C969F7ECE87
-C71A3EFC3256C2DAD0BC78570578B95A44797C965E963285122149283A77E3C8
-D4C553D1443D094DFCE9E9C9509F2F6CA8A58C5D63471A47901FC8E1562B9C11
-4670E53FF45F4DFAA6E3A27B4F955BD43784C5BB356A6FAB3CD049B9FE5275F8
-F930F83FC21579E61E7F20F05364B72371E1112287FA5C28917C5F98A48AD51A
-87708812DD609A92FDB764D710DAB450724C84A28513973509C9E4CD3CD50A64
-F0CD0DB6A9FA459A178E7BF67D46A21B8EEFEB19FEBEB453D490EFE90094C294
-98A246B27618A049FAA90DD355DCB1AA6B602EB1BE472125791CA0E04AABCAAB
-1BAFE92760A10CD9D0B501E55D3B2AAA76CFC374313C4BB5C765C9CEF1E7E5E8
-081D45C223E1DA398F77615C3A44CB0391C505A070B9061C875929874E32EB44
-0D9692148DF4A77CFBE77F7D5D70B239DD2A5E681097ED9742663A914EADB605
-8B1C0033F1B30C06605AD37A826DE7848D3B59779BB998C3E57DD2AE80B7BDB2
-B2367579E253A2674548F1B717A0CD84E5CA6ABE166CE2F1243A4D22AF519E6C
-1C087AC5F81236BEDF794064D7F1B7A04EAFF6C628F7EEA7943B9F497E172E28
-49F8D3B3E41EFE2B0BFE65E72643F14A1853605D516E3BF7FC59C13B1134B9FA
-7D9CEBC9608A66886D03F4F5C35E7241D9EF4086250CB5C00F7D94C0B6C7B639
-A9C198FCC41D6EFD89ED68CD447EEF62F196A4FD7A7C124557C370A5CCF9E926
-592FAD165DC03F37FEA13EDE22B64694BFC42B733D8E0BD9EA4976DEF3099048
-CD0FF471F72F1BA8D67FFAB61B4FDC8834CC475713A3D144873808B51AD266CF
-BA55B8205BB40FD8A3FF28738A9990197D17B753A57B8FC24899500128A205F9
-5C8E0B63891C638B3F3E3BEC0FACBE02FD08EE9A9489CBB002E8BC0A1DE01FD0
-10A77C7FB9ECD009B61389841ED59543C10ACA8EC123F4B96F8B6E22BBE3ACAD
-8EDC13394A1C10D8C6971C37E9ADB3B5CAE2A78D9E299FF17871EFD0BD483F02
-AC96C84F5499DED22B14F13A57BBE20510BE25F17F51F299429CFAB7514FB5A4
-F4173691B1CC7775F9FDAD392B0D84AC6DBDFAB9BDEFF67C56DCC3B02D954661
-A07D765C4A4EE98F58B13D28F3DAD22A896BEB1779B0274433EB5E2E906F9522
-96E74A9D5867CDB4B4858A80DD69532A44B0BB512330D003B188FD6B6F724263
-F011390DF160D0FA044A6F0828DDBCE0E2A7E956D7E09C6546601532F053D5F2
-62069615E3F6683D2B4F0A803E1E66D499DF3819CA3B83C469A0468D5CFD228A
-70065B2B272421C0CE5BAB7671D69B4A92AAA802AA863E632EB44D2CED233A33
-3A09DAB712788E450B67D7139AD9BC3FDF80624D9B8DAEA438C0E6B5AA07684A
-D11C1452F17F5E042C8A48BC13095FC3C078E9986693D1D9929C337B8161ADC9
-258CA267C9FBB136B09C6B84879D47EBBD5D6DBAC674E659FA3AA359CE69DEF6
-3D6D038E785D1C8A284162CD416880DD5F573D563316E5DB788037B683A26CD8
-C60B75E1A1138EDCD9AA998252110177F2A1CFBF4FCC0EF7AAEF02ADDFA74628
-AF11E50A8A851174B6DE8AFD381EB48B28003EC913183B0B7EB0016C84994266
-26448FAE7FF37B6EE7604113A4FEFCF421E6A4E0F98B7180A64E9946CFF2B4CD
-A92B51C8803FFEB3B3C000DAD409715021BE9414CEBF0987F3B4456E7C27EBE2
-A3D8D250142DDB02A4FF49D9D8A67FFABC57361D619BF8B80BBECAAB9B576FBA
-A580FEB7FC6F9FD556341025EF51EBAF765A626FE93B988F0C33CB1B37873C7B
-63E9E855D07396B8BD361F4BE0E627459FDEC7B91472D22B574F546E41674D63
-62DF6225371C9DAD0A9129DCEDC89A81489708F14B6DFD79AC00A0DB7AA7D93F
-EC5BFBDC17D06D599488ACF137AC92C55FF3DE619E6CCA4FF633919E59EE1FE3
-3D153E6B8B8C1CBB3135E0025C4BB8A3CDEA44B5FF7071319DFB0112982793D9
-860A2FC92638B7C30A944685687F8DC719B0048B375F801678D9C936CD3C083E
-F5579977D7CC4267486DE97656FCAC59CD82B4DE3032445A30C8B6C8160C6016
-080AA9D647BC6649714A2282DCDD5FAFEF61EC3E7D96D8652FADEDE39BF2EBED
-41DED35B9C2E3C76B4317BFE5262DFB14BB625BBFCB103EF0F67B4559E0222DF
-CDC260F22208EF73515592B6D397E5C286C831676DEEFA29A8131072553F238E
-5E17A0E3A080AF0968362F54F5EC1990E5A3312CD4E8FE5470192642273040B7
-9B94E435DD6A0DFC69947DE35ECCE13E14E64D879E84801DBD65F0C123A3F0B5
-CFBFB6ABEFF14F860B9595ABC25FAAF7AA20588172E46F52E77D4010036AB4F7
-9F0294FEF7E66766DA9270C27FA2B159E823758A57614489C5C5D711D4F3B019
-1DF3D1C065E7592E8D342C82C740C384648CEE7DE0699516BDD298A486119E2C
-A567F5F81F76A8160996D5BD57A65557A682B77BA241B24348124C0B7BECB5A7
-60D6EA2A861C99F5F617B250C0FC760B1D81037A786166A75BF2408CFA77DE01
-152BEB50921B3624517F8023CB111527CE517C6104593F8F1C0DE3C4E6AB4E47
-E7419AF7553C784A6DCA3A4DE233245AF0F9CC749F9A7D81E19784E9677D6946
-E2D1F2A7C407C9420225A87D9E94AC52A275D8A19AF807FBBA36FE78E9C11E66
-D46602FE2D7F0E63D1E21D099B590F5EDFEEA0935C9C8056E02D57F510E71302
-F3E0F93DEAF28B3EBCF46D097F5F065B28B506392E17008C9FD21DC8654EB024
-1E5376C2427DEDD6C7369878B9DCCD04F35D594F3CE144DAD63FFB6E2AD71260
-EAB7F19290B2B8883B0E97D8A8B3D0D6E9B99503D8853223CABA8FA1AE289B8F
-C0164CDC832069D7AAA6DBA23B9520ACB4EFD0145F317DED15D9B317646A9619
-F4EF45F2389448C1A7F75BCE53865D813C97D949C9D94F225C998A1403CE718C
-A3C63CE6187801D3203CF4EA7F43440E2D620DFD3C1F7452CD9EC856188C5CBA
-FEC2D90A2DE296D850142DBE6D50D5D43C7AA4F6207B4E5A32CD0A197DF729C1
-0388636EBA410A9982F9C16B966498BE61FA25DB0A44A4C24095A4D0E92305FB
-84AC47D49C99209AAE281EA88E80D234EE1CB834771F32DBC1C1898F86802F7D
-D86B6ED5588E8029809DBDF8A9E5139CD8ABDC9BE14F073755D40E21E1BBCC68
-9DDADEEA9F2E95480DA9F0BE40F82BC18849C84216612D8E42185061429A1908
-A8BBF1CEA0B66070C4EBDA360AD5BCDD4E636396A2F92A6012BDEA37A7765F8B
-7654509788847E0ADE8EC67F87A40037F196BED1520691B9DF0D35EBF99D45FF
-B3669D2817ED8781145C79979FACCBF5DA3210C478ED890C6E404C2C9D48BE5F
-8AAB63094C7ACFC5ED7A4A56983A23C3A617BE52C0EBC20F3715D00ADA200ECB
-13A5C9762670E3A04A605BC830F9A8DB0D21BC4ECDA28ABBA03824B98F4A61B7
-319FB56C9936E2AB79C954EB1A36AC8798FA450DEB871FAC1170CCCD80BA8B42
-26544AFBE99259576D9C440E31E2C0C2918D0508047CB79DECAF20709581E13F
-1F8735E583DE60FD03E70929A75E49B3EB2D297868049BC55AFF959FE5631D9C
-746A54CD8E2E91C6D3CEC4B4AE418CDBA3C6B9B252B55E869B7AC630C50DD342
-3898204FA82E7CCA3CC91294B159C579BFAF9864B200700196587CB0A21E9218
-7AA09DF7D2C1DB463066E3D4A6EE0F0F8AADD0E4AABD2C0F8362F860A4768B05
-5AA46FF0E6C08A52BB078C7187A7321F2D0B7563D3927B6740EEEB6D20A8FB7A
-B7745CE3F751B8B6ED6DC24DB08B9E18BD6A24E93EDF9721650629AB5F3C3090
-E9C6163B15B1AE4417DD61822FC7E5C2BB3C868B3839FBCD5B1B5804D31B62F8
-14027E431828B072F7F7F3EA8D8F90D433632EE703CA43476851E3C5356FE9C5
-EC3AD392BDC12805F2FCEB66103044C32BDDAF03E8E8D18313FA6444B2E0D92B
-BA0F041CC408A2F88CF9F0CCBE3240F222B1D73499B9D732D83B976B67AB347C
-DC17A20435447D262A4AA72967A0F866D19A292684BA6DC7AF5636D266E32FCE
-2C1A62224AEA1A79E543D2F793B0B8FBA7AAD3D5A914D51A59D73FB6F1F54C3D
-54713CF59C5EFDF4C9190CAE614B217A23D8F0D69E89D102E0BCACB875EA0D02
-05EEE1DB5E95BA6D1FAE5E727140A5001190A23E5536E0B6C948E7AE1419FBB9
-7792704BEE0345A4EB038C142624A63A9FD40A27F96158214C1BB4DF2EC1A370
-D325D3EF16661BA76C6B7FCB0493EE58B89DA4C84A9C79795619781E886C6B70
-BDBBF392C846311BC58B783B30B187CBABEC60888E00BD429B39E4B7B99F874B
-E39FB98794332FDF8E12C6751B299B9E03DAD3E60707668E1543E8F0CDA3DD2C
-40C93BE077E42686390164AC9D41CBE2A1245062B053EBB608A4587AE7412B84
-CB86D3D43112CD1A3BC50C2CE958CAFAE983062AF001CD341C206AE3B612503C
-074BCBB8729D96BF2C65CDD30542DE6AAB9C1AED638F8E877EFA7F48A484AE13
-99F671320AE9532449B64EBDA99576C4A1D64632482A9571DF06EAF113A61251
-28FCF6C93D4528BDFF10B695C10BBFBDA0E09513F710FE32810FFCF6042AF596
-373CE984EF21ED2D7DE36CE1352FE2F3359ACDF1886ABF265D0209D249EA26E0
-D04F64EE2B7173FFA1956F8490CB1E83070EC24F6F215217572DD5E9DFB93DE6
-F03F73A2F5EC6822C1CD331F7AB96AA694FBE4087BE6254FC2F618D2341F0839
-C851187967A878CD2D7C15E4F9F7159782C4A7F92CD27789F0C276F59F894FA4
-8E9C3C5BF1FBB95F28C97771182B330C3F112C54C3D2C7F24A5161C7C885C7AA
-C3F8B756829468F1C1F6C06587BAEBE58BB5B2BA899AC37510696261FDE7BFDB
-39F260E2EE831CA953C22B6D752C65320BEB215A4DB801322CE2B9164C6A28B6
-3B68B6D762815503328E984864E8C376C38D3FECB286973E11A1E070E5563157
-8323E44F60015A79971D4F51E11ECAEC8DEE3888D918214B07C5DD5EC9F2AE7B
-E7C03B20BF005C2CD6EE2D901A8C1AB4D5B42E516D27B8AA49AAD3239194C371
-1FC129A71A1B9193A5D2E165AE86903005B44F2082080F365131AC55F3AE789F
-793E1917065600ED9578C815263F3D89662ED06305A4266887A8C98B2BED94AA
-76BC9D443976C37A0CDA5DC71070437159A9E5DF7A45D3428A1C2107796C81AB
-DAF6E41DB09290DCA48E502CB464DE52455367BB868A704782DBD6F8332F59D4
-9BD1662F8A63BBD1A4E8DE63A080D96ACE48C97321DCFCD8F5E642FF191CAD8F
-68D0D6658A8A5DBB8F35CC31D90CB44549676B335A0BF54C055966C552DE7DB6
-2A1E32EE7BAAE71C62D9D0104BC5B46C420EF3F2AF7A9300612C104BF3F104B4
-DE686971C770FA9550024118997F4AF8CA9A36DA51507B0DBC253C4D1D94E551
-460C37C1E0BDA5DFFA6A2C04A740283F42A812A2517D029A55A5D027A24B291F
-EA4EC929F393F7A90FCD58F7DA0871FF849AA84BCC61A2AE6C17018F0B313617
-F13507F6215C8E7CA6F9C36944D47F9D26B0E382510B71310CAF6AA091084487
-6A7DECDEE38A6C920B2DD188BE66E8FB4474DA8872409424EE3E86F7D5FEE017
-ECBFE3B30984EE7D2A21B063E619E9DEE5395C73C0C11EF645450E351DD634A4
-B0EB5F1A212BF6C74F5C70D0170990114446A05C70E15FEA203C3508034B1E08
-F841CA1AE7D2074F3B4E99413B4F2ECE3F96530988799B0C0F8FF3FC344197BE
-6D6D6F38ECF4B5D4C8626D3903EBFB7FA2881402F0505794133917C062940B4B
-971650BF3A052C2852079B30334F1F88F569A27A0FF21B69E9E265D1A6388D74
-F41C23AFB0267D90222005BE6C70035DB0348B18DEB3A024989A67D4D262A52E
-501C237DC7031B98F275ABFCE3CFF9AD80D3A22E096023E42B928C78A9CC1E28
-786362ECFBFFA1B3FC256F74C209EA02AC65B790FC277E89A9A16457F4F12453
-3C5BD1B1BC991FD9605088AED21DC1E7E723330884D24F534A696CE29799DB5A
-D148A390C355C59A96F3BF7911EB8A2A4D438DCC2EFD97B4333F1AA6092C7E38
-1ECE0929CABF258CE4EACFA5B0D1966FB89E77A3C2A4436EA6C933DDA09D9673
-54F6E7077A15A86113B4571B753EA50C7E30D9D8E837BE60C90AD137EF960221
-FB21672C1BCCEF23440B3F3BE182C39348CDF2E9ED9B23284B10DD6D55E041A4
-35B81420197BC18E35172191815A18D4D34EB23A3E945F651E5990BBC8D72D96
-FA7772381F25231EF6955F17351BDDE45A9D4CA3765C794B48F0E59E0AE081C6
-451B7DBA0703251BAA90ABE78CEA8DF423F317D88EF061DECB1C2ECDBBB99937
-506F76F7632B6BA2A8AEEEDF84D63444AFC5EFA57ADD2F951E630C6FD0C88618
-E9E40D333E6A6A0693A5B43ECAA9EFEC1AAA9454F4D7CC2D78AA85F236A64C16
-D2D6882B11D7C1487EDE396E774FD952F1E9E9E6DEAA4F2EE134874C763B8ACB
-050C2E8945602DD6C3DE22DF4883D9F29A156D7EF96AC75AD63C7DAE5D9E7C70
-4619A62938EC7DD03FEE15346198CC595E0AF5EE40EBECD97AB6A9545CF72711
-423A844D66BA7914C70D17E8283250D85DFE200EBEF4070B48BB059AB15C871D
-A94C54B8B8FB76A5A97A4DA65F5516CD5B8E1B35E69073D0DAEA406BBE1B505B
-AD6717AF7914DADB0E5164D4C874A7EEEB6D084BA86ECB1DE861F2EDC278CC8C
-BFEA8238332547201232297F4CA6C8F8CF06EA26578F0A405FA32AE5E5A622F7
-F1965D81681AC6E9C9CE77B98A620DB88AA0FAE34E1C6FF931D7CCF0F29C4541
-54A54BF4CFBFD3A578A0233722DB68094B8A65A7364DA724CEEF28D4879A5E1B
-279A0820B76F6B08CABA6B1DBE38F4D7ECB7420423479296909F023193ACE05F
-C9CEC2409A4A56D66926E79A32B9CC2AE03592785E41C31707EFBA77B98AB8C9
-7FAA2DC6C319EA203D1A0B06DAC0F43CC60763FFF13641C8B24F7AEF55E80422
-F5C1A4A378A8A05128577A8BB214FA84BCC780105D9ED556E78996B82DC470B8
-78C69B438F03F9BAA1BBE61FCAEBB4459139BFCDF7C80F4DC5410560FA7B60A8
-5B906AB6F98C80A903607EF07CB242374261483C9D4C4F7511D5F336B0362640
-FECDAA67159A22EDD94C67728F8F7DB2436528EB1CF984100A173AEC0284F38B
-74E00244512746A4DA0E2CCBE98AA9A8B27D28696075FE3959CE6CF1EC67AA45
-9F700FEC972C09BD02232BF7EF27D216138F8EF3C761B597A2FA7A08A9CFA39A
-D045177988929F9A6C984CA160CB7ADD11B6E13951607FFA017DD3AF55134743
-83CF1CE955314CB035863D0FD6C8DA3881167486AE15951D0E07CD69E0C5FCCB
-C55772ECE83EDB2F24A2540DCD181BC8474B53208B39C76CA1D205BE5AAAB47F
-8084BF7B565DD6C338FDB81ED346E0572FC45EDA2684268E6950CB749AE36F88
-9A69E1BC2E0EA73A9886E4CDE44236E96AE55DD48A1CF3AC57D023A09DD878E5
-A9B76492C226DD82E384E8E86F35947DEEB4E4A3ECDC0735AEA8D9466D1CE8C5
-96FF354F321EDFAB5E4B68C55F9624D6ECA16A66855CB9CCF4A23A3CE8C4B1FB
-6CADE3ED0539241FDF23B16B8A2E439A9CE01D7E7BB8AA406A05137DD1F4C0E6
-AEA8E68B69F6A3BF726AACE5FF5BB40BE8A3FE0E9C98F0073FD50A4CC38087F6
-91947A89B2FAD33D783E7146E93C94A16FD50624610CEBC2306E046DADC35EAC
-0115D733A3D702810E527C5D903FE6484F20173FF561C04E3995258A8BE2A5E3
-F609FE5FF236C88702AC35B5507EF0B94D0E997531150BE4ACDF31BC86D29A4E
-EF4EBDAFEC9AFB57CB079C00B6250051ED9D040538E5FDD5939F3282C5167E21
-A7F5B53028EC6CDB634E825C2E5983A7E32192676F86061A3ECE654C78B40CD8
-C7DDE58E33C9766FD2458EA023485BB07A8219AA4DDA9BF3188EDE35DA9B8E5D
-F71440CA5F8C3213CE1F2F762C00616B586D31161648C360FE3D752181990E1D
-AA745858702CFA4FE5D6510DBFA5E8F9E0765A45E87150F9276172454C5CE262
-470BBD1F9D1366AC35CDA1A7267F6FE684D4FD86B6B07D088F32BF47DBABCAB4
-B5C01B0914FBB221D3CFF148FB742F5FD4D1469EF3D477A78F54497C09A0DB00
-FD81988867D0B02BC2B503E71774C8B114B385C7AC9E0C200555F78B6184BA8B
-1D2D7F2CA058D83862FC5DEA56DD40359DEBEDFE1D82975A639312874B391A21
-85DE652AAE18A355DC023929326D569502E386D7196CEFBEF996BB20D31EED2F
-020817A2E55177612E8E20F504AA8A116AA3280BD76D2FC1D1B3CDFE7A63AC7B
-890F7ADDCC05BC6D28BB3D86EA63FB4AE285B7F6429D6FC7FF3F85ED1AE216A5
-A840ADB17924B70EB010A1B537795F45EE331A4A4F3D4F30113108694B3FD220
-E9CE77DF8F0A4839343965B61F0866E973491ED2D76BCFECF15AE8EE62D50665
-D57878EC94F6E269ECEAC001EDFC673A1731398196C0B55B92D970BE790ACD0B
-DDD898119772AFFB078777D79B163139D55789E882E982AD8E66569439208377
-F0AF3210CA4788417FBB59AB740F0D4904A6FDDCE16599E8BAFF95F8782C78B2
-7E8189DC3C3D40B5BDAF7D2E1332C825110269CFB1DF3DCA16618C794BCD1515
-D5463DC3EE2E3221E9E7C136DB9F234B436FFD4A09D5A06321927C927181CC95
-2CE7DABD8A8576C39B269C637EC3D6070049ABB0986A00C6BD3F14BDB4C81221
-0CEB236FA2D7C63C95C72C18C653AC3472D948E15403CB36B7162FE074143C88
-2CFD28E6D03B91841FAA4AF0C2C8C47FEF5ABE471AE04C39EECBBBAC487B1438
-6B7B030C8409247080742661452B326A61DFC81F1254777D4731AF831B79D349
-12429F9C6C2D5266F9FE7D1431A9402851E4BE6DADBEFF7D272BE5EEBE03BCD4
-2244BC6E7447E08E5FA2AEC3E0A435A0EBEBA5C4CB3C9A0F5A7D1FD47C2D01B8
-A04B683FA58A5EFC5C1EA7CCB9C05944C7E8E04AFE4C94199BAB4DB89A821571
-99844C61515BD39D990500A6DAFF5ED3F1D882FCB9E8789EA8FF9064725A98C6
-E327164C5DB8077C3383A0BD7DF41A241A181C43B5C176B2FB83BA378552B58F
-FEB9B8127E36F4D5531E3802914CB3D59C098DCC3F5651F3B47CB632E1F08A1C
-56D0F493DE0AE73EDED032E02A688D872569BAE68AE1830D2E43D819DBAF73C0
-213BD6B5773D404721B7F35D3F65E23187CF538423372DB5A5B0CD60B1B896F4
-8117BC736D436FBD9952D22518B04C5B9D7E51508CE19EE3DFE4687C62AEC9C0
-C0980EE943E8685F143E8C557BFECACD41A5EECAE793380E9D342143C9DF4B5A
-FE556B5730538F58D1587FD20AC8940E9EC1CC82978E620F84D26EF0AB386CBE
-02C7B91B6CDE2A5500C66C859FE35F1375701535E6FCEBEB20D959D039A0E96F
-DB79D75CB1835826E25678B7640412BD885F422FA2F5252E60F4D707173862B8
-0C4A0C28E8A6275CD5566C4361262663AF6A4F85256B54B0883940BCEABAF944
-CCEFB5E1380AE78C72DB04B6CD2A2137C3DE70338266CF670ACA499900564AA5
-7FEBC6BEEF25E9F4D5C12300E043722EBEF1179E163C387FDFE16172FE2D176E
-AACB6990D34EC078EB8B9BCEA4D5FF3FB20EBCA6D0A929196688604898DF58B5
-C44822ACF78BF35BA9E9318A4EF969AE66E2605B5B0DF692D3BECF751CBE98EA
-B727DB224847EDFCB8638217AB2210B6409B11D6962A7330935BCA373121E6EF
-7B2666272FEDB769092D1AB7E036D84F9BFB64D7669B6DDB2BA77BCB68C494D9
-34C242A708BD62D0A657C19356C27AE1E1522FE94169C4ABB15D784934191131
-4E02E6A2A75147C64327878040DB2FC995B5BD6127551C0C81F02C4D0995B6DE
-FF7353B9B034CFD2F4EE12B566FE230428CD8DB0331A84B6CEE4843A0980E33C
-DC3E643C06C545E56D2F30E67301954F2F5300C3CF46B21F7B7300D7408DFD52
-B98AE1620E80B10099B154D086A3EE9DF475680FF6D95E41BA3ECFA6E8DBC8DD
-55364E9D6E12E9A172CCBD4AA69F09E0571DDE18317020E072546A60D510EDCC
-6E002D3D097641C4BAC3C2B144CA33BEC8A46C232C394AF3C1438C817F5C57C0
-8450C805C37EAF0ADBF0A03E8BEE9303F5ECB100D2879C045341678FA1FB5D9B
-02C68CD3CDE71422C1C5263DD3E54E056BC7122EB0EBC277016FA3DBA743A8ED
-698B08FDF2AD9FF8395A33050FE1A81A46D076503AE065B0C5A674B363D814D9
-31459FEBDC640315155434D945E94BDA16053D429FE22B5EBB4DB9D97CA5E7CA
-75A3AD29D1471F0207205E32CECC459C2A3105899C9AB44C152C731AA0E8161D
-3C45731FCA8A96F300E233F70D71A08A7264677931D6044D970ED03F8AE1F23B
-50CED9E95C44855E8217C3630E5E58495F4E9FE8909A4F9C90BBB2CD31E54B69
-4823CD8C97B6CEC90B7EC15D4D5D5ACCD5546DFFCF538D04C3C8DB14E00626E9
-A835E506375FA795DA839F075B54BBD2CA94F13FFDD37F4FAEF8BE101BA6EB31
-8124E9341B27412C89933E5458084939C85B224CABD1902B38B8C548D7BD0081
-7FBF4042205C816236D83BCDFB2B4BCF4839A824C86AC3EA06FF1657B1B53F73
-DD38425FCB4843F614CD8FA950EEA47D0AB0FA032CE0A2DB5CC4350C73C361C6
-7549D5A62DC991D805185E52C0CDFF0F4A8A27ED7FD8940AC93749771BE18131
-EE96AC8777C63B7A5A3028716B81AF1755877E9C229E5D7E395752D85429A3CC
-550909DBA185FA04CDA0265BE047C4637AE47E051D880ECE7E38828842D6D05B
-A01AF70B3AD0A0735881B98C828CE9D45C346AE91A21F9593F66A3BDD7641F64
-343D8E005249FD3C5B80988F8C5C02FE02FDA5422640A078E6AD03A3D5CD7F53
-7D0C7F87349B0D7C4D688EFB052CA427959ADCA311044C10162EB3758DCA0CEF
-7098891EA9725B3AE42A39A5ABB886535A2B1DD0FF86B248C05D789F3C1DAF48
-B86296895E67B8D58327D6B3DB82FDA493DF085F1695535A1E3DE78C8003D92C
-8D1E642635B1043F4B0513245ECFF3A0B2F7772283E1722870A526000D2B350C
-ABA20A1928C4376410DB81F2E99B8711C5EA5CEFBDF37E7CB8FC123C1DF0C8DE
-38E2E805CE185BD8AFE31700043F6EF954EAC7AF7D95D1593FFDDC18D012FB83
-716BEA95D309DE82A041512392005ACFF14C19D13F860CFEDA39D47C02ACED58
-757AD14B7F8DC666A6FFBFFF96617D4EA6B3199BCA20A38FF914C68CEA41E716
-7F5B330EB9502912E192B804269E94F7146E3D90D3410E9DD43407482D4D62F9
-E9306B040CDB59E20B9E4599F397B62BD7625CACC75C8B763C727732AAE4AC3F
-03331F31A1CBEB5420B1BCB70C5A9F9E124E43D8CACA5F5421E0FE0FCC0CD6EC
-714E694AE5BD9D54432E567FB2F309CEB00DAC803AACAAEEC11E990FE58967F5
-A192A01DF7559CD3470287468768AC60104BABB26BC081B8610866B3794C0E1B
-1941FBE210A59D548C73A5D60D3427D999CDA1BBC05109C24CCB640934C4DDE5
-762AC4B75A5B290129211C702DA1E5D5CF364E98E6CBDA177F6E0D6FD040F0D7
-EEEA408C1519FC6FCA653A20F53AC49CF73C85EF3BB4411B5E9A1D3F40FEBCC1
-A4FEC836E8E2694FA07FE07F686D35779AFFF927C15BCBA436B828F3162C9AB3
-7EC1072FD97B5485338C48EAA934EABFF16ED3EF299F9EBA6347AEA4465207EC
-E64CB2AE62270EB4AF5D530902B70A2C955AF02C1818FD19640AB7715EA696D2
-0DE1330B8248112C3D9F6B63BAEFB9BE393ED909E2BF1496C010EAAFA3121342
-F79634350DA1C74F20A53790E4DD6040A8FCFB495D2FF0A542C6DADC34D3331E
-1450691A44EF78AC2313F0B275CD785F8F77513AE16C454F3F54EF0121E14955
-198837365CB81BA356DF21171B5F74FE6C88AF772CBAB1D1BC0E906DD7661028
-AA736A42C5A076699278035299AADE0BAF4A24B11D751D8FD7828A25E1DF4FAB
-408C56D1883697A809BC485A43A7D235E4F665B546CE7EB7192BCCFDDAAFF1B5
-B1CA8DC1A62242242530C3396851D7C617DCA40EC0954A2DDC3A7E630A4A0B4B
-D02A0D525B5945F595A753DC890F52505F6A55983125953D3C43BA16C59EE7E5
-84EF075581BB50D7F9F986E3D6D0D45D06A3C82A34547C26FCAC6CCDBAE3DECB
-C8713D318B6F54E44AE57C048DBC92B9679A23C76505C456676CE99822B838A4
-AE58239AEB7CD1B6BEDEA7A0483E1CD18139D42AEA29CCF5EE80AB3799621C03
-AD6BD9434618EF655DAAA10D26134BC0F1A6C434769421D8CD4DE5972A5117B8
-A256D0EABB5B570E8777A840F2601242345508F630A51F4CC3B3FDA9C2F87D2F
-E14CEF5230A595822EB7A3BDC9F4BCA5E40A8317DC9C899A9699DFCF001F02A9
-E8302FC426A59043F79071E8DD8DFFC5654FCF87B737353BB44694E474E4E72B
-D6DC4CF005F325D7D2F933964DDF26E7694075530EA2AF8E7ECA20216DACF1C2
-E5D3D4F8A48EC27435484031AB59E2EE387CD6CE46B8D1BAD37CF6ECE6C4050C
-E1E811E8874631A6572E873C6ADAB4A105832EADD0B90A09306F3A0C6D575084
-CEB6466A5FC57A9FFBDEB9A4F45E0BCD94F34F5220AD1121308F21826B030EBF
-2C2E495F3A0177F664DC1F8C6508EDD271F7B66641B8EA8664DE727C45ACB514
-2A7DA7A804EAEB8AFD108EDCAB39BF48EDAC555DE1CF9729DC2145344ED6DAF7
-DEA91F6F8A3855448AA5D0ACEA2DBF664F7B00C445B46B777DD6594631148F82
-B1D6338F5AF3DF34B607080930E12A3AFE301532A49A02847BAE99AA40394404
-E32F23860904957FA654A69FA95A39286B41186F8B2937DA7CECADCC2C74F025
-F2A436F23157E3BD12A7BB91AC443495EB65F77F6D1D3A74D13330F9BFD341A0
-41A712C7C3B7D8E06ED0BEDFC9B7253971D498743C0A056C2297F029134C5298
-DFEA70C15F237BE15BA538AF16908B7C1C9615719AAFF37F776D6E5BD5483556
-901C72F33B2ED2ECEA155672B23370C9E06BC4FC6171807AD21FD22409B4E49C
-0165FC6C7B5CC119B45D3EF0DBF04ABE79E53D4F32B4F27E2B36ABCBFF315DD8
-6B68E04AB691920B7A84DF6E27B0A120FBA1921B4BDAA1855892BC0D2A2A0609
-B29D05EFBF99D7E2C28DB6482C807D8D6A6571E59231EAE51ABA62C26A383329
-5DD7D92DACE0CFF78F8E6E75AE8EE9E49BED1288A24BA0ECC1549BDBB9FDF320
-EAF1366CBDF50E9102EA1FB23EC463E9B663CCDD587141C5860CD824715B8DCC
-E263B7D93D600110A9FBA1B3F15E8576FF9794C1D1B338A65101012036BA4D12
-D8A4312304BCF98ABADF19D1529DD939E68BA3D0095A23E8D0BB0E6F62FF214A
-517480DFF4E1E06C7D983C4B04E32B8F3ACE9FF0CFBA997B6CEF3E010AE61172
-C80FE788F6D7496A1BD4DDF0C6D049E78170F8C9B11DD37021C1E7F1D168504F
-1247F94BA5AE4D0B4190B45B54A023C4DCEA75E62D3AB0F42574F2A62E08F8AA
-38A337F612D59769B5186CC06F471A6A3334D8340F4993FA599605E5839ED720
-8DFCE26D959CD6A2A891945B4E38DD649C8AC85BCFD19584D7B5BCD8A0035BEE
-B98E6B91336AE05E057AEB2B821A4517F3B2FB4C0BCE466CB549F9626B95CD96
-1F2AC305F8C14CD4F6591AFD200D3FC61B85385D4C8666182285FF6BE411F024
-1F261A1A0A4BB05967A122B5C752F9AE2BF47336BE317B0300F7D195140605FD
-C7065ED3D7F5DB29C23B827C17B9507F3C78C88CDCC9C760B630645F3D86D2E0
-96BC935F7ADA90E3289AEEB023436CF92089EFFE4DCFA8220BEB3D647ED45216
-372129C91700A8EA1DE46CEF84A1592A3E669CCA18F6FD89E7E0319D8F6CC2CB
-3448695F445AB0D18A6864E117D94DEFC5C2C260BF643DD712DB914EA16E390D
-DFBE02C3B59DE4F3E220209B9FB3369181554C5DC88D4C69033B6815F586C854
-BF6413D7F0FF714CB574F76D0A409DA6C59E4C58C237908F06320CAF129AF21C
-E9973F0524DC319E71AA897E793D0603A03DC232D98783651AB0C3836E05FCC5
-4579177A28E192DFEE6C6A42E62A362D5CAAE29F86A48B2938E847B555C0B40E
-1CAB7ED0960FD74E124F9638F8E9F10A9BE30C60480033CEAFC8D59CB4145F2E
-CF7F9638007302FD387378C2ACAF75FD1F449BAE2C81FBA2F0898FE0C7C77311
-9207B169651133FC736A81A26AF7A8C798745A2E1EE8DD9A47D029A3D2628C72
-08F9BC00170DF30B92F1CB166C7066CFADE780FD9B18AFED5BF3075EA9F7FEA8
-BE650B548EE804EDEF2AA3CCA9BBEB82BC667D62E71B0E86CA19D67185D13A6B
-A04B186229CC4616DB9737D23AC863F2C539B616F822C7B08A422EA3D8332971
-B18BAB95BDC81A4FBC20DBACE7FF2C67B85E9760E2FEE52AE79D6E2D296AB413
-46272E6A14DB855EE6395503EE93A701F93999E5B687A5A06D554A7EA148560E
-75E22E2ABD9813CFB7704FF3A284F77A22AB45E4951B3FADA6E9624050FAD82D
-A3D8CA362ADF14B8540DE877A43E1F396E4F1E91B04C05912B615D6F078CCBD8
-F4AC7BCB49F5A1F9528274DC8E3F5C55441F4DE55365BF91F52B02C5DB2047A7
-E9717B89767368CF6DCCCB43C2E6C5F67F66BB4D7EEDDE8C45AADFA8F99BF6EB
-E0285D1820EBBC0C0B3405E8FC193517833E32B24E52B5D42DBD359BD1B8F2C2
-613DAF745C91712C160D7C2164D8411FB65C2E1D8C42AD0F6F091D30CBB3DC3F
-382C78B9ABDE94079BB7F3822DDD74FBE7265F54CFA6BD178A61CC5E037A1463
-757D01A4556E6C1EEAD960E54E5132ED38AC3D2EF464E8D8634B5119111F8A6E
-72B6C392BF64CCBCCE41974E1D26A6331ECDB6D9F853CF028C8B8EFBC0CA58D0
-8E4B15B0702A215976AADF2AC6680A58FF21EBCA326282422FF47B9ADD2A6E9A
-D463180320F6B45206016735FA4D9D959E270845319CC2679B161317E4C5FA0D
-B095BFE30938B6B69B57A98AC551B4BD5F9143650F71B7D965EFC1B364B3C9D2
-A252FD71E94E3969F09BC5CD0C48D5F99032141081A935A81D3B8B29E3C76A92
-518260F4928A21BBAD822930502251160624B6077672231080F005EE0F425E81
-28EB7B0351B9CCA88A2CF9CBA3A37AE0307DE35146B51E13BD3792C6261E3977
-399119943D7F3E277953135305A437609BECB8FC129DDBCC1D30F12745E017F8
-D541E3B718C8B64EEA64D6BD9F224B2FA26F502219425F5B77FDE4B1DF3E1D9C
-1421CDAA006836E30DA12509D2CCBD9A4467F2399AE28C476303FD21DCEDEB2E
-A65FD84DB0C3A7AFF407505C6E9BBEEBB59F8DDF21D7BB60A9E3311FF2CDC9DE
-D5BBBF2F69E37A453AAFCA9D726F0129523AE7F1FD9815F587BED78C214BA39B
-E26A06DC7C7A842E0D575057692E6D518211262836B22CA3868482F0C41DE378
-E51C699280610FBA7EB7BC73680E82B9AAF74D8AE4960922C499D179DCEB127F
-8D8E6C6E0CCA6D52C32991F5C99FCC087E449E3DAF5208813B5CCAFB41632470
-9526A36A806161F192A61A307B9CABB1F570999EAF1E351EE5D5CA3433002501
-A23CD87AB84D430BA7C93B2846F3D15CCE8C70C92251E7B0B6786CCDE65573D5
-FCE93C24AE5C70AFE021C36275F203CD64424F4AE089E59493BFFDD6A722F577
-B8675B45108C71ED9B5F2750F716EC790FFBABE0A2A147D2484A38D10406F97F
-0DCDD56078DC967DD38578B882B670905DEB5CB3A4221D48E1E62EC08237AFBE
-8D35DB38E4733B28C8AE02A9D5605D221F1A6FCD8B5749E89F3A94B1958156DC
-D8F442921991CE767B792D05E7DE2112CC36CBB334F89600699490F525E28A65
-23493100E7108B949C582805DE7E6908F8A3560AE831BBEDA0D5EC467BAC24DE
-7DF8D3661180DB1F8FCD0B725F2BC7557D659734E14591168B09F5241C30F7EA
-F6D5AF6C9E4CB0CFF75C6D1DEA6354B4D4C4B13CA8AA74A069A904B9656AD09F
-BD93B73FAEB7EDDB5AECA792CDE711C466E9B4B73C2C3A4575BCC32C5B4C3259
-C162CBAAA70BDB931E052DC281E9E08E9275F4DEE6DF1416D46D73A357786DA4
-55CC29DDF1A473948F98FC7524CBB1C94F6CB3EF9AAD9789EC1F7978C71AC24A
-F076CB6E03E70CE2026119FCEC993CFAEA086AA920C00EDFF23A4375E8F37941
-E08EACF699492AAF09A621C93B1353082883D556FFC210D851860C43E08A5FD1
-4A597BBDCCF8EAF298BBA34AD69A8194AF13B3D591C52A0361CFC76B51958660
-F297E6EDA2D5DC2A07FE0D3CB478644D65769C042FE63577BF1AC11F425A27D9
-7BAF18CF88B3022C944DBD0CA9BCEF7B1B2AB49E9CBDA3DCAADC83B02BF12D32
-0173FE78AF7009D3976DF68DD7255ADE5F84A426904A34FF6BB216D58B6FCE3A
-E7FC04384B70F7D33BB71E38F1B01DF16DC35ED834B83E14EDF1ED51DEEF33FE
-78EAE706806B2AB84F7C7AA20780136A164F558EAE0706D5F9F2F68B203BB96B
-1A36366251201EB694C0BE2D80ADFABF6E3B25A1A930FC3863982E0E6A54B405
-BE7CE3EF6BA25C9D925BBDBB153D9472BBAA340A2EE14FFE926AADE91F752581
-4ABC04C4BC506EF0B025BD27625D53DCC0D47654E1B74EC24D2E8F6322CBAD35
-0E0ABC7BCF79A6DF39F006EAD55AC826F0C49676A8215FC08E8B542AC5348E99
-08061252BE975BDC97694418591F41473FFD97826BEA061678E37E6CD1F100EA
-5729FC41ACAE6C7D4265D09B78263CD79A5AEA3B9BC746C9172889CAC7B401A1
-C5556EC1B332FF9F6FE3F5D4B819EB048F639B0813FA9559931853A9D25165AD
-4389D60D3BA99E6F3C7E6A77514CB3749D99682C7E40AC215CD4D16B82B58490
-15FDC3060967A15F83D8E1CA8E7E63E145762BC31417E490940B78AC943A81A0
-A7BEB63AFEC5C9C6B90C567F10C9C80AB3EAE5FB6C8EB7DA3EAC6CD31F6E07EF
-1DB35E919A2EAF376938D79A6F01CC8A0929749E8ED1CFE31730127110A792DD
-6FC5B8223DB9A9F7BB407881C7E613FEC1AF8CE524E54F08C4C95B6175C0C520
-C42FD183B9E1C27A3EBBCC1299137F89A5045DECAAB3C8B8EE61566AEF4BEEDD
-95F639385E4C77005CE84C9528F9A21A088DA3EC90ADC8DE6C8EA7DD5E936914
-222E1F3CB5108E889CB4FC0DC1CF82BDF94BBFD1303C09B0A095C7E0999D2EDB
-BAC04410836593F36369B537FDA6C9704ED50FDC1C5451D817DFCB374DA8EEB7
-A75AFE38DB1D0C2A0F9DAD120C398C087BC39502255B62A1812EE9CE0171838C
-5784E8B86C3B1D7F8C4614BFC0417691871806F35E3AC0BCE1C7E0BCD88EF462
-E7ACFEFDFA49176DAB278DFE545D63CA1DE4A21786DDA97E850ABC01A7491795
-3B16D3C6F1F671E296EFD9BCDFDE8F3193D82A5F3DE70C5D558E1AA4DA9378F6
-06E2C95AB3B43D9265047E73158CC88BC842672BE869770D249E1A12F7DC50D6
-75231D0F7ACA1E9F7023E3ADEADB0D2AA7937918BEEAA4A683DEBDCEA325FFA1
-4CE16DE4AEC435C23D5F75538EA6D034C3541D84A8CB47DD16DD9263BBFC6987
-475DF0278511D0BA604D0C105F245C6E6006961A46FDCCBF16E54E436E5E0BE6
-6E2CDA406056C42294F515C0E64569B58C09906CF92B5A2F2D095F0222A1DFB4
-E0360A1637D2C11A2D221E3D0B851C79BF9609946AFEF1EFD3977964FDFDAB17
-FA5C29620A73844653B97EBF5DB330367A3C52531DF1F5209845D989ABCA1EFF
-F9DEDD09803CA4ACDFE23AD7B0E7DE9F85354E551596E85C566D48D0915D2596
-3E96FFE25CE5CAFADD4795D8C77E385DB762DFFB557E1FE37E3948AF83884CF0
-A4
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 45 /hyphen put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 86 /V put
-dup 88 /X put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B781EB59569E3D0D54D8EFAE0F3EDE26279776ABA15341E42E636
-6E02817082BE6FE0B04249A4840C11F95F8ADEFF72173E9A5F2AB2F62C427E5B
-DC010E18641EAC906A5EF0F9BC2108062134A7F10956219C5847C0D82F0E8663
-12D963E012DF0DD899911EC5D8096F80B49CA3444CF1294FBFAB57DFACC9D01C
-46F3BA2F3D1C14EC30CBF83E5729F1C074D4F1665405CF54722827FBC24AEF08
-F6DD0BC6A79A2DB1FF539454E8F5D1A42D40CCFBC093AFD3E57973A009095CEA
-B91FAFD236C47F453B38DB0067907A28EB5E9ADE87A2181F1D6DE4E183631716
-C21F0F952E0666AC74371F8B5C888DC44FBA5607435A619684F502CF625663C7
-94B0DAA79BE8E129E7F5C5AD1B7495C1BC9B1C759867467F55148C7FF2F914D8
-95218C4C3C2D2DB3482C21EA050F23D6A7A056B172EB210276CDB3B1DCA47A9E
-8B03B9BADC72F42D28ACE31D0633A0A1B22254F37EBF0433F0EF1CFEBC1CC653
-E3EE6D197AAF36E7F871AE76A67986E81B67FDA59F9B0CF210C7ED7D696AC130
-748A803C64D211C6FC54BFA3A7FD94B0B54968E027E480CD0643275FC723BF56
-75B0EBA2E2731351BF689F46408D57BCCBD9566501256B58E653AA0B7567E024
-80AEC3AA619960C0D3D21113BB0352C897F8444E1767B102D88050521577DC38
-6FFEB2753BD3C35317738826822127DC3D50FC0D3DB048CC30A10DFF384A1369
-FF255E6AED7A0A9E18497BD332F0DCFF1E8D10D99B444FDF254B167F8EEB3ECA
-7E5AEF54E0D8E6F24B61D6D3D1D1249A79BBF8A64D1C43A6E625B79C6F1257E5
-8FF8BD32250A40D8C8B7A6122BD9E4567D2E06FF83BBEA5EA739AFF37556536D
-462FE2CCE6F3942D3ABE3AF440A167E357D4D4FD8B6BF13D00887F406819BF86
-F505A0ABEC3BE6CEE22FFA2054E8621FA203AE5158D6A9B72B255C6380228A3A
-4F0107C4B49DEE47A76663975BC1A346117DE5CEE30B33FB9A47B3A8CC8D2247
-1D75002040937D1952210E91FE84584200B02AA188EAD9E53228DED6A4827909
-76EBD83A3FFC6CCA78A9C8301DB15D2963462E7C2C850494934EFE4764B74850
-3FC039FEB875DA3F51EC633967352C75105A1222751EDFBB3E8B7295828C819C
-0F4409C670C9F8265515D0B02890AA1381B176ADCC0AD8BAC6773C8AD0A81072
-52359935196A0C176F31B879161A8557C439DE7A7C2EB5CDCA8FB70B3C6A4D96
-BB857EB50E62666F6491A8B33F22D827628152DEAF185C5868CDE54E70A9669A
-5F35B15645039165F8B5D38042D86D3A14F1FC54F0834216EAD6E26994ED1512
-5B1F2DC4AA6D98A4A27B251AD94799B369A9D5851CF3203E8B463B504521FAB3
-A35463DCC628BED7B28B217E936D4A902F12D25125D8A1FB9FED7BF5D93282ED
-90F51DBE642934488B673558EC5619407EEF7003976190C83EDA1C88470334D0
-F7866E00F9AA46EC23118690F4919FE8F66ACC0449643C295F609D755A50B1D9
-4A7E0E74A1BC5E54F5003108851B68D0471F8E16AEA89CE63D1DAC97105CC182
-567505956D0AB9DF91781489D2DD967FC900AF59E8C32D7EA79EBEE5E7F277C8
-E770181BA651493CC8E2FABC2470118E549E1670B8A5489F1102E1057BA9DCC9
-127DFF48BBA8CCA89F13433A68F7A7949E065058DB0BAD1E69B1F65CEB0C7721
-89547769A252E6C5676AE6721F4F851B25059ECDDB9CFC8BE72FC369D50DCEEE
-5BAB96BB7EB970CAF63F212DE07137FA4C733214FD4A20B09B1ACEF8FA5A8E0D
-A5B557B17BEC9D7DDBF6EE72196C9EC09F189118D46D5BD9F84435A8472E4114
-30C45E6361E1B68948B701565FE336563E8258B3F02879B82B01CC9006D50F65
-ED2C6891D10F8E6535E9E4FD9E681C5816AC231540F1214B14837AD1FCA18054
-BED0125C805753D9C058FC0F45BABBD7D169BAD43BD63FDA0E2A5605D07E522A
-DADFFFA92AFCEAD131DBCCADD9BAC27A11AAFE8DEBA049FD158D390CB62E5D2E
-397D988627D04D52CD8487D8FE3541F10B16E2515B330A9D1CC6BFF784077B48
-CF3E9713DC6880FF4E351B2A900479EA72D67D02A44D8F11D9AEDE578B9A0662
-F1388D0B7BFA90875258E730DC135116FB83FDCCE11BE9BF6329158B3BFF888F
-CF054A570A6859C2E5AC74A15CE1F8216D7510EDCD48497EBEECFAC300416D3C
-497DCBC23ABFEA088784042FF6DC6C30729C67FCB099BC635C89EF34115ACF2D
-A19A1361C610F3F204C1281EDD9FA169484E32ED91EF6B997A18553881D2BB0B
-008FBF43C560598A649AA261644AD10427E5E26CBCF00D6538A138CF8081E56D
-9C5A2DA70EC01F312D78A7E427F64360B4AF8F6447682139F82F92047AF537C3
-F44C8F700E7579253F381F86C842BA4A7B662D886ECAD6A0F218F48CCE2D3971
-536500745A8B2FADA62C6A161F2B9048761894A2060FE89A016970B9A94AC371
-53A531322668AEC94EDA0CFA9B1493D27713907D239FFEFCDC32790358B25465
-AFB0538D8AAE97FAD59F8E3CD360E4E9BB425FD598A9BC08048B21E3750C7D0F
-ADCCDD5787328A3EF700C18894717B2F7F5522B439A2D010B3C90BC844F7B302
-A756C5E23097C41133121E81C965D2BB031351A15B3ABB7D3064344EE61A1DB9
-D0ABF29B61290CF0A6DA5EF07A6FE9C5304B397604E26D37162CE4E68A5B09A4
-57EA2DD9315E0EEB0F12FDEEC6C15894966A0F82EC67C3121D0448F0F76B4426
-6D33F5A1441A902B12F79266908F71714AF5B9D084F4DFE87AF83F9A3D441351
-8419C5CC8CF086F6D1B7A7605CF78BCA9ADF19F5201E7B47D6DF8FBF34803EEA
-808CF8C14430B983684742EF4B0B61D6ACFBEE2813CDE3CFDEAC4E8BF9E7CF6A
-CE1B7933C5602E10A121933323E883F65312ED25E35867610869F941C328BCC0
-0A292C29CA74081EC545867FC4D72D53A08DEE3266AE7D44AA02417335A3351A
-B7E9EB5E8F56FED5F56C09D0590D8DFF8AF40A740814BCD8D52DCD33DA948BCA
-C6AB5FF12178896212A0575494CB170164A228A828CCBA6309B07520994CE8AB
-E9D7BD372135364731B6E629B7505659768236E71290BB8FA662A55B5F060AD3
-40ABB0465F52FFC21F7745AFE33FD9C1D2F348C0E06D30BFA9A15B537366D46E
-A5AA9C8D5228939B15B8D0D5DD4EB3437B51CB8B66BA669E0A437FF1670227CF
-A80869EBE85EA7E5548F2A84487DB0CE37A7513C8C5115834D63CC173A93845F
-01FB0E81E5AD3013E3A555D1B8A007F63CF721E1D03B98E4B6AFB09DE19BC080
-B10ACEE6276100FF06D44BFE9D94BE2DF0745049B7319FC922B0C729AE7D8728
-C933CD707A9C3F22D4FABBFE8A9D49A4CA2521BB0B46D0D610B8736DAD66D775
-7E731ACD4FB0552C04ADB2D2F3044FE8D779605BAFDF4BBC46C2352A9D25FB86
-00CA93F10AF819235CCFBF0A7BC5CC3E652774C090DB6AE9D05EDB0576023AEC
-C1C0B4CE3405EEEE38C2DDC11431CF0812B33FC8D6B0C152A9A99AAAD6E93F77
-D9F0380945B53DA5D671DD89AFE0108D2D83D7282BC810C7CD9218E19BC09DDC
-53BA1C4915273DD4DE16DCF9E6BEB0A70793B9B22B13006BA0D5A2001962DB3B
-B237BC6832F4394FA970CAE12903A9D0DFD5705C3925044B19EEDEED24808A78
-50DE64FA5B86AE0AEBE9F89AE6754A58DFEC0DA7D9F1561F3801C35196D2F0D2
-1E44B981172690445D9B7FD25C682BF541EDEB4F66C591140E9D64336CB2AD68
-9920A8B27C7D8204C810435BB899EE1D1B4C22C1DD3C66C0233B381B2875F71C
-987378C1B95106E46D39AC7E386F3DC12C5C644DE2CB2FF6C6AA29FDFB852AD5
-9D8CD739E655C3B03E85FBC76CBDC0D395FFAA5F1DEB5F06A3FEE3778CDC6253
-A31ABB6820591A3C0FC93CC99ED767AE73191A3609CC420E30B516B7C060E546
-308E6D1BE6049C3E4FF7C088CD957E5A6152F11328F4962D6670544069513E44
-50A0649226606AC9AE4F144C3502EE67AC7654EAACA12C226709E151B4BD9E79
-DF695DA06550B79A02D704C3D0A3921699C8EEEFAEA2F56E7D7D12D8C23E6EE7
-F4DA3010844F52C7E1D3BDEFDA7FA29026F99CCCD3442C6E7C1AEC8CCE49B39E
-140875186A3F731222CF34B0FFDD1F5ACF07AC8B2B950C8CF60B98C8CC805D5C
-5651077E0DD2497F919C158D8C16E0A4C7778475EE400CEDC340BB973090D553
-1CB4A778F436377ACE1B8A9FD3B4B4DA1A55F63BC849A199E429778ED4F03360
-E26D9A1E3E19AA6141ED9407753C4775FA23F712DBF66B2ADF76D150EDD495E3
-55931397DBA3132A1548C9842516EE60B691556AD97152978CECC323D9929F0F
-57677AEB1095C654BCC61BD1BDE977EF1948CCCE38E91C3AE6A9DA1FA7D40D1D
-82252EF589880B90C00E1CA3C597DF0D33D9FE7F8F1B995A5F3A3E6D97548937
-DB7B90B9B95B8C288CB4B10D19A618DCB32AD8DB16262D756B8AB5A4F9118C9C
-0B5456C359EBE17C0AD5888D003D4B3887EFD384F528CAA24E6445DB0692913E
-768A589A04281C3D74A5E1D8D29B543AB0F9DCC5DA0AB8F3CF654121B7557ED5
-7C89C78FD44F1652A5D01E81F4C5C2465D36E6EAB9E8FD441E81F3757EF8C534
-A2310B7F118FAC2F2485E1BCDB6979E1EA2DDBCB0433ADB4415E10A5CB9777A8
-48D0CE5FF5AAE335A1810BE551091D9808F074D577CF96E129AF3854401CB97C
-6A14598F5EAEF50810E70BF88988FD1F1C9734D39A075B5996BC79DF1FFF1864
-B3AA587691CEF8C46864C723707CFD1A3F3664EB4F364233ABC21754A156BD9B
-0508070554CB202CDC7A7856FAF71531557568B49DC69A9C91CE985E4C236C8E
-20FFC2625D257FB30E723CC2D3D7024B018EAEA7DC61A6F5AF0A5CFEC2920AE6
-B61960B28AFAF4C8650A37B832C579D2601AD3C0F88B9428BE29D04E70862F89
-7A32AB493B2D43FA1C71D4A1B01DD7A1E057714087D03F2CB45B3B6FBD511C38
-E447431FA86C77360E76A10AB910F1D70AD320244CC6CE1C08C17CFB716CC75D
-664816CDDFFE8CABD112D4B4F57EC24165EB73D27D84474277EE4DDFF1C1B8C1
-76D89E239A217970FB228E1C0EA768232CCF406D3C4FD2BA87EE5AC563A8CDDD
-E4BDB0F255283E2704AE21BCA952441C5D478E9A99952569C5D7C72F3FAB770F
-520A4A9FD34823F895667DE631BA6EE2E31D8D407BA3B5D9FBA77A9C9823034A
-110376B9F938828BD1C2BFFBF5D2C343194EC7229C17AF3A40F5C9B80FFBB8ED
-5EFD7DDD7EBD24309A19360BBE2EC267EB436A963EFB5DD1FA3D5E1A760F7F5B
-F77D85C46A9256B79C4A20DC1CEB710541C03AFAFDD25BBC42F2CC101B22FA44
-7A27AB2451FA5C4F6F81A8B293F84F7EACB88C9B3F3FFD8122D76C552927C51C
-A61D7F440D0E65ED8929E83F0BE5D5971D599922DE2F614DCCD3D081EB6A0BE0
-CEAEC598E6931CCA9E81BF364FB4D7AE89D91198F49C0FA1F3F21FB4045F9C81
-8D42A9F37126D7C8D49CD3BA9289F1EC9126779751C030921D7BE04D9C9A34EE
-DCD581F352501167C5E20E096C3E05CF76D13C63407E4C458AA18458C96A7366
-8AA5A1C59378CDDFFC07DD7F8DFDC0A9CA01C44345728F84DA7FDA0D3B9B6FBD
-AF33F5A0435DDAB4BBFB0306C6BD669CAD2BF7EDC57DBFBA18817429D6EB1DDF
-AC30904D0574FC5E241D03851AAA8AB62E4C57B128B7FB544D79A0E7A9CAEDEB
-5B0B77E7B779285971BD8F40BA7EFB89B5D671ADDE26E4E12F3D8701B136E4FE
-9D30F2DDD17838252BFBDB72223DF8C2370968A77223AF47E031ACC1F277D660
-A87E5FB474985633B9C89292851E5250754E4F599877767FEEAFE00BD0D5B3E8
-C08D1A834901A17BD1F34536BCF7C2101109D91548C83BF4D481886B8E74C36B
-4D3FF5E2EC3D3001A738F4199E941A9D43D1A0E2B17A26EBA862941C387E943B
-C395729779E674CCE545DA0AC9B55949799FB84176625190E27FDB62389AC580
-C7B6116F1B943EA8355AA673A030E60DDC19982B2B0F50514269BE3DFD7152BA
-2D03274926F77D30426D5413248A19A09E5514B7BB7059367F810B5326F2B9DE
-9C10E48BB99B63ABE59CA4ED624E5FE8D99E0A95377C85DD87CBC86D87557E3C
-4C7DF02A58B97D0EFC549693EDAEE73FF48CE60F955E3EE7AA2B5A7187CC9A79
-572AA7059A5ACF7B59D1415C3460D19AEC2F06BB65979C48D5925EBD5C808433
-94F8FAAD644E75F063F92AF84B85361E6042B000F3D9C9F201D473956B424911
-3E57AA0A162FA207720808BDEB0A6C5E92634A281157DDEED586E424E7F23FB6
-48C0C7AFA6CA9225018B7791EDB5EA4BCA9B40284557B9E06E0E6F6EBE1B87FD
-1DD442CC587E0F8EF370608A8FB34F706C1834B4E30B007188B55F67C39BCB02
-464D0C40C11EE41F06464A8A2F833371C81CD22EBABFB02F9BB72697C015F802
-2BBEBEA079D1946A166C2AA15F6A93CF099305223C50FA30695BCE01AC7D7902
-7B8270D73FD09EBA26901D56FDD42C2B4F9AF82D42A5E097DFE24B6C247F5A30
-3654A15422C44730720DB447DFAE6EE331C2620281EEE48295885F5C8DE2F080
-B569F415BA4FBBE099317494D723AA59F7AA4CD1F7952D6E88404630A5F2D31E
-798C4B31406B0CD0AEF35CA8FBAC5822E9C4DF7067892EC5AB8F56CB34FC06B5
-04D8E6E5E7D5723FAFDDD589879FD4822CFAAF3837F967578F0FE37B41EF6EC9
-D26B803E480BD052C18141E783FCA2EB700A837DC74BB1199CADFB9DED46F6F4
-5139540ADB243F4A9494AFE342C58106B76B47DF736007BFB06C8770443448DF
-472C4613ACA4FE34D3061D8A662A16ABF38FD726A307E8879A3965477242599E
-33587CAA5444E6CA15C0F01FC1CED728E0F510927DC76ABA972A9ABD2E136AF7
-15ED7237A85FCD04086B26165438A81C4BCBC2E8E634C14ACE183DA7277040BE
-A31CB4C3FF543400EB9A0EC4BC35A5570911C4EC8B9A38D6289452E375C324DB
-11560F51CAF5A8A4195E089920561E92973BCBFE3BA292947795FC69F99434AE
-7133EBFD0613EDEBD37778CECA1C54CBB4D2F4FBDBEFEC33CDB6C39942EF2A9A
-1B2762B3364C1CEDE1DE08F4B5D82D13B4176E109B8CF547D14541D2DC4F9928
-887ACC00990603B6CF0D1A2B8ABE5695C1EC615F3475D26316C27F2F0E581319
-9364CA8C849858ED624FBA87FE0C28177E9C6CF67773BAB8D7AE6EE38DA8CFEB
-2F44BC92939395719A7971FEFE234EA147F87BCED52920FC8A4E5E73BB71D695
-737438B586319D79E73FD5D319692C0A3FF3914FD2C2BDEEF9859A1669ADDDDA
-932956E6AED69B84574075BA2501BE4C3BF0C1B8BE1A925A0AB04281B2441378
-375931C02A436894C249614483F15D01CCF810550C189A9A8A33AC6AD265F81E
-39C917B36ED255526116BCC92A91BC006D41DCC1D8A375509B95E094C23B950C
-BEE6ADC9D2D6C5BEF4D0A2371A3C757722A0E604AFF93C04BDD5AD56B74FE019
-26063D0B11216EBBF92A252A9DE3F98C5C8637EC5A0C7B74D6B5C290B53FF6B1
-26E27CFCBD64F6AAE53831FEF296EB582F3F8AE0F30D14B21A7119003D50A4B5
-5D8254BCD27F3C28241E365C3F5FF692C5EEA3708E378FD86548D8BCF944908C
-BACCF574383DBFD0EF5BF49B94DDF9D07D29D8EA52F51A6F5CB30CF8E12F9516
-98E9848EA62CE3D47AB04BFF09FD75A8A461BA891662CE03BC452A6CDF5CCC2C
-77409E49D21D2E4B0646AF015FE29262442820BA7B5E7FB1E8A8D9453B647401
-0EE32CEE6F9FF9F5F2176B80603D9991B6AEAD8FE6C1D2B5C21A9223C0EDC265
-0F8F83408F6D4CB207E4BF234DCE6205CC35AE11F5FC709FF0D9B72DCCD184F9
-32B2AE2059CFBD8BA8B88890DF73DD8583EF7E61A5F521AF9D722706C3C1263B
-4F134CF9D26B7DFF3878D5467DEE392DB99913B24A538B31F50337D2969FD876
-3E1BC75B97C0283BA32DFC68CBFA6BF05E37865305C7BD81D88D68647C409A12
-CC9D6B62703913FF21EC8759E2175C5F854296CC173CD86D321DB2BF6AC73130
-024702972E209E5F21E43827A0000ED1E004C0FE2C6F85631108AC6EC40853E0
-18549AC3DFD8435C91B225111364A104BD448217BCD4123D91E44AA0D8ADA40C
-C4853EA478F37D11C7F93BD3293238E70892F2C21F1BD38E2A7064F00C48EFFE
-465B6D405820BFEA0AB5B638E8F1713659B2CCAF83B6A855CC510A25CE72F52C
-095581F033152FDFBD06E0F5EEF797D5F9033A407EBBB4E2A348C82ACEB21815
-95B232B620945921ABCC420B93F8AD4F8272D535091BCF269FC81A5474CB7232
-5DE82027CDE68BD0D8416998CB136D299A0821C42B692CB598C44B4B7E922A32
-1710D49026E8591D74D3F5C2BB90417A926762A1F03951FB7B24A1056B6C063D
-66E3C31E24042AE286DB78CFA3CBCABB3DB505B86E76E4592B1ED9083E57816A
-0E3F9ABB06C327904B01B5553A26C9A34E5B0361695727C32129906780AC59AD
-C6C8395F6BA8C8C7213545D585D9AB35A8788A68B4DB244E3BE88A387D536B7B
-4209B975B21623949B012A161D4F70B338065101656045BA681F5AD9EB608532
-0969E644D2501B6C59259EDD26C94764FC88121B09661BE3FA16AC1A680AACED
-16606E002DB4542B78DF0037084A28A3DA650AD960AC36579A3095F6AC608F47
-187754ABC3D255C4FD18A3A3B8A4C98434E82B176F236F58694685B48DBB66DF
-68EE5E2580FFB2EAD20D2302A27D740E4C5DC7E64E32A0A2F435573A473D0F7D
-30E4DA259DA4BC7CE3A4845E1339525AFDB1F90A4FADEF02B42FD736DD88AA30
-FC4A695C600AFA98515713FF5221EF3C1DE90FB89ED5E14ADDF202A3F8F8E697
-8D4942E11B8296ED2483D546FEA9E125FE16CAA4908D2C19DF1E6849C4A12474
-D3B68A6D99746B4497D8A5B6DE176E22290F0328A6CE055B4A200E66F4ED4C7B
-DBA81B9AEAAA61D07185F697E526FF92F6FC5E20B8F9EA8EB9C6F2686172CF9F
-8FD0D381F0E5CA1E8332FAE61DB487B12ECB42204D01444A4945C969498CAEA4
-C8279D212AB44C3C9B57055A5196C9B4991686C34E301A2BEC8E3D274DBE5926
-9E7A71784B305201354FABA813946C772B80FCB65C2D7FE32EBC57364CF4C151
-5CEF00E914F22C0EE6D9D5AD88BBEA04DCF55F6A1479561309DE782039069656
-F1ECE3F53B570394EFA2D75B7D85C4E675275E251EB7AE6D8EFF56BCDBE9606D
-F04637C7F123113C8F66A91703D936C95A5B509180FDAC5AF468224AEECE393E
-BE9B9239743436345A7E6EC4AC5E5E6877052A195918B3B86CCCF5FAACDC1A88
-5F3FDF5E2A73C557971F10EA11AD66AAF770403F738F61B7F2F3506A38CC4524
-CB019ECDFC5594C70E893C049B5B5FFF6343FE0F50625D08A68C7D71B3EB6F9D
-0CB6078AC1DC70F713D9E9B6763FF09C19B075FDDE93E8E5861A6B9962CC549B
-5FE5C5755110CCF41AE276D3570092D1D755D0E6F07C0A1CC52A7076269AF06E
-A251901421CB7FAC8FC7B9E40F6989F422B16962478DF29B3D37E20E34A03810
-E846F5404EC92521E8CE4928CC0EA4CCE88E48E8211EBB8F976D7879E250429A
-85CDE8EBF25AB2D8589407E8A2ACEFB2359F02A50A471300BDEA7D6B87908FFB
-15FF716552B1EE220470ECA2953E9637E679724B9FC8D6F7D5877CBA8173AEA6
-2D40252422EDE5CF58A137CFB1083844A253487DE8EE5C83FE61C78AA5019508
-5FEC27EB68A60B7AAD6054732EE12C75D947CA24253169E4DD88F275382240C9
-67863FC42C24DFD06A5254ADF80E61F48ECE49034FA887B229A7EE77FA17E93D
-7749D2221382A8F6C8044C4E7D85280A281583F9678EFBDEE2FF27D4E9BC8602
-115BE694977F3100FBF1EFB7255CE1841ED89415BDAB6819D2455F7C9D3593CF
-3AC18C74AECD26779730EEE23ACCB5DC9CCE1DBE3E9687B60534383FFCB0910A
-32D56BD315F78B95946D5264E18AACE1E2B00F26D792EDA2A5ABBF4A693CC166
-6829B28DEB2BA9880D540784304C51E5FEB2CC90DA41048160126B15AAE2985C
-1A81ADD4BC6A3415A093B2F5BEC20D40630A8AC2C4A1659D152BCBAE805CBCC0
-2D7988903F7534FAD33C11CD7803BF7547BC8794A8F434C72EC7A1CB20CF74A9
-B3EACAE96269C1FF92A06CED9142B5EAB7A303A910505E49DD98F3C12F42B28F
-E11AE4B6556DCF6D38F500CA21A712992654F066DB74FB75DDAF0D1A0C4B33BF
-6E11B2594765CA9A1B073FC1B7F1E76B8CFAD27F0247CBCAD5A6AF6A2200A120
-B707A39DDD467A561E89460459CA6C36BF66D15CED9A9EC9B48E1E1B982142FC
-6B47A130801184D97FD4F795FB3ECD25FBAB48FB2F5400F84658F9DBE0518977
-E77B925E1277CD8599F65B07C570D1B4D4945B9EACA0F1C6295AF7150C736336
-5B3C11A76C9446C8D712389323FBA5F27F1947894066F11681799115A43EA223
-8B96C6C250247943ABC44DC229FF0FF178F7A7A225BF563545AC3424783351C4
-E7637DC3769B42CE607553142AC0EC19248082473A3AB78792CC4AAE92FD6086
-C4EC0F993D2A6E78F744FEF23FE32AE02CCEFA60F691FC9ADB4287583E30B719
-C441C2DCD9C9ADC1B34717713E8B6553E25A0EE8DCA74BFA324CF1A0D4FDA066
-A11036CEFD12CBB8EACEE2E9A1C0401852AD172ADB5F17ECD2AE7E7A08017670
-1F8425F0D474992A9B463BD9961C6EE4D23ED351991D831C503AF101252677FB
-0A462AF9F642E73C9D25194263D7965DDA88E6AB27EEEFA274EB4EAA9B76A0CF
-4649CBD51CC1EDD93B832BB5909DAC55116BE1C491A2E3BC32FE65FCACA03D95
-81DB97FA18D6B7A47754CA2B4C810F72D631650EE4EC5DA654A45D161C2026B8
-EE93697B7D57A1A1C2522284B247D6D2710F6FDADA54BBC9205E213728F08512
-2BEB0CC69AAEA29B19CC9B0A7A0C2B87864F6361A18922A65BFE3F06EE7E8B8C
-6BC567ED26BB6C9DBDD9FCD0D4240C2FFCA475A636B25C41AF360EF66D87377A
-7F1FD4F52816F4C8A957A20F568BB24F62D730A5D6F8E7C3E86D44D643DEB0D2
-0C99BC31A2462F34EC6B3CCE0CC71ECAE01C50D029524C51581FFB6AAD620492
-1D9054200BFD7C89944E44C38A8A31E4E84BEB42FC00D4E6478800A0B83E4809
-053205F4770D2AB17F52C6FA0BF79F7BFFAE4957779F242C403C09ABBF03AC8B
-43D54451381426039498AD469EC5CBAF9CFFA9D1E7534565DEC499FEC9A8BFD6
-122D2B34AA9E6128107056CDA164845B9226DE2ABBA994EFD46734E708F72D5E
-CB4EE21945FE977A1271C6DD944C6954B9450B55E88F6F067A3719D2F993D565
-7FCC1DAE06ECEBB17FD00576457CD93367F426B5449ED46773C90D55716C457D
-D225D6E27146BD02F26A393DC341B8BDD57220C5E5641F937E686F698727CBE2
-2A1BD497E056956A3BA0AAC64C05DD25F438E681A026DA0DE50E65D7CA586676
-B8B40DC642FA4E712AFC16DAA8CCEFBCDD4BE6B3395BEB979DEFBEC1C7BCC606
-F57B6AC84A16F74645BF848C7615F69FA0B36B1C895CC57D1066936AD6E4519D
-935EB849C34038E888B3968CB96A8A528B5BC0BE83C90F18BFB3E0EDF825CC5A
-4BE969964B07B88EA3280163D2D11D1167972089DD388897AF3DB4DD89FD9263
-3E6F3CBFBDE028D4885B0AA94927735AD767B89055E677FEBBFF6E3D2D94C75A
-64D44206AC33EDC9419A1D2C64A54B15CC38EBD16BDD7319C73196C019C38FB8
-D355FD2F6C6774BB158AC13BF06FD8CC08DCAC580A3668AE9FF495635FE1A20C
-18D6A378F91CC979B9F24E75EC9BFA97009A9F6924330F5052D0549F7E8C5570
-8309E3F99F64499B87E626AAF6AA8D7D6E652D07F75A800B70E8ECC5BEFD3831
-3A83D88E66CBA4F0E9D915EC14D29617D17CD6C539CC10DD298BF0C5DA0368B1
-06162FB284B1CBA405DE168A7CAD737D37FA4FA2876577A03438F7D903F4A781
-E51E4ABA2D3238A13C4481835230
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 13 /fl put
-dup 33 /exclam put
-dup 34 /quotedblright put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 54 /six put
-dup 55 /seven put
-dup 58 /colon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 88 /X put
-dup 92 /quotedblleft put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
-044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
-A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
-23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
-19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
-1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
-8BF32EFC8C0D1CC0C1622ABA0B6CE939036B2D9CAFA2A3B0C4B5DD9AE5B2D798
-CC856CB41F82D3B5FCBBF70D07E05369713730081901FEDE318F9DA81D39F84C
-45D0996AC0E8FD780FD2E5E6BD013D98463E0A51034735243F2B3695371E8451
-6A6EC4236E47A282AD2966E06BF3FB59C6222C15A34F1E910E637D805741BC1D
-CD426BF31361147DA45BDA2884880D90AEE92DF02AE5C4772537FEEA157A6D50
-3BBB910A80A2EF41D18213631584B343ECFBD6BA006AD6BCAC63E9CD9430DF59
-98091BE32FE17FCA7B32DCA95052F5BACF73FEAFCE5EA47B740FDC972C2FAB94
-E1FE42F8536DE4DD0DBFC4CCF3A96DC1140F736344D4DC796756948ABEE0433B
-BFFD9F1A343259444D248598844888F046800D6BFC7BFE3F63900767727A8742
-10C756EC6380274290F84F7B2055C2390BF04B466B5D4437C0D6AC55C90792CE
-8A8BB5602BC96118B07FDB8692006E91585273AEFF55D71967011A1658205ECB
-A0B0C1CE1F7C5167A5868D5DA81EE5CC3A41983425663776391EA37525FF1357
-2CBD0C9B4644850880C5115C7F0677A605C1009D018A9D6BF4F94A6DD019CA26
-FA7D748D55D441CE1111EFE5254381E1F916912E1B446CC7803DEB5C9B1AF811
-3938473A2FDD49E5A0360F4020CAF9E85E056E59430B18AD352BA929C9A3DA10
-D7C524D92AEA6F4DCC13E2B59DBC0B8C0CD90B1E4E82BCEE516928BC9E1BB67A
-060EFD856CC9F1CFFEF90C421DBB3CAFD1959B332EADE93C9CCB31006248BD6A
-5D79AA8E049C5EA70DAB46F5D3E73984814E9F3E15A0383EFCD157240D43BF23
-F84372FB3915791E581FA0E4CD457289FACCC08C0D37CEC1FC45DE3751445A9F
-824A6B006B5E672AAABEC2B8D5DB7B0745C1D01C52657B7DF4FFB9803FD9655F
-B7D34C6048E8BF44A0235DFA9791770CB3E451E01ED7A578512DCA397F24F71D
-B2784D0778C02BCD5A88FB1671F8019523D8ECD0F42D273A72F2140D3C14F40F
-7BC451BE2FD39FA297D9857745B4B8F8531CA0DFD9E72E8EE0E7FBCDA811C8D4
-167DA0037F9F1F181115209C22FA250C8234695C1085931C3D92585563366C74
-826D4E5F9A61F39E3F8CEB8701591C4A5FC62940C2729A2D9FFAB09F833D47C8
-1B184163D87FB4E5EC4BD91B81C325FDA8ECC31EAC76FAB333A9EE090C202EFA
-FB2BF753A5AB8D147F8949C6FCA5922E1B2C6231ED86BBB953166DE2C08A3DC2
-433C76CAA7260AC901C3B4E2E78C8A6064F0ABBA1F4D16BACAC5288F199A0929
-25F1DC8ECA38DA299A229D86E105C29CCD0FD59585467BAB46AECA7A76905CEB
-1CE91EFB79E3B4EE3CDE096E2CF63DFF71544E639567BC8F12263B2F596CB4F1
-FEECEB69763A7EE15B0E59A2529A116E6E3BD067BFB3690021068ECBF18F6D9C
-3F3F07D8C7E2A7793FDEE84EAB71613A6EA8F6AC665A7C0376A6406171EAF3F3
-4E466A08318F942F2830757721CE2B193F3A7404D51375DF34495AE48356DD78
-E4AB3A71C2BE2094D5196BBBEBF056029805A302F6AE5F4A9BDB25461E81617E
-A634959D343DAC10BD072CE16D7C51C120F9B6A1D75EBC4D03DF60048B8CE15A
-94FD31DAE86A4BF525C979C7E96BC1DE88069A342C9E07C0340AA83DCF381134
-0C13C315D1B690B5E858A20362441C9F61A20B70392F87078E5C3F8B4AF23D99
-B051B170140D0069DC6E2D4FFAC6E45EE56221264A894AE68FABF04994EF9D87
-EF92B498493E3F0B2F003C47C861320E714FE36F9B4669226E40753B2FA90731
-CE281E469DB371C975B186E2910879681485763CD9316CD4017C5D9ACE43DCA0
-38397FE463F2A3D6B72209FBEA175E75793163F0FE4A2CAE3C7E5061D1A7C31E
-1F8FD3082D2743CEEA008B0F0AB55C2BBA23918A1BE4200DC628662775AC2D66
-FB16BB7C06C295357A1BD655CFF3E0C49046C2CFC70FDB87E62C2EA187A0914D
-2B55FDECDD9309FC215AF8882D65174ECEC01F38158C4D96FF9EF1B17AF32EB4
-E7C2B4770F5CE67E2B26BA0ABA9116BB3F89944E308A0127C99B1A145F730B50
-28473FD0DE250D63A7116DA1ECCE93B02F3CED8C894E6B090F5A01A26822503C
-EA68C5A7BC8734C35E40D3A56449F6AC36406A0818C666F0EFB88BF02AC4C296
-201B0D0848450A54B3FE1A75F641D1592D265CA639D29DD99C47AC8DCAA2FE5F
-0216CD31751A42FB48F53200053979FD87DEBBF427363CE1748FAADFA0C6E2C7
-9B407F5D041D9383385891A86F33AC51F0C7F4902580D9446D8118D8EF2BB177
-5C2A39867EF485A454C07CD835350997F5C18EC1C3A83E57F57D8A0813EF784D
-19B088E03344EEB3EE8AF03D18B2A4EB5A57E1DE60CFFC487FF1C2DCCDC88C40
-1B7B1B16A0DB3AA16474F6CF5F92C7490CA1F3D94B33B18DAAAED531D2740961
-53F662902417A01C2B33489862A446A5D7BC27B87ED382CC41175114C7B0D42E
-6DEED8A64B3034F764BDAFAA477191564F3EF1339976051C0BFF59E56FA20C7D
-C5954E0A805A4A8431B40401E8A188D2409A16013427152F64CD8CD502C5EC4E
-B2F5AFFBF1F4D5BBD636109F2AF10BF4737DC0F722E11649EA017EBB2F4F531C
-9D08E88CCC7D3345E4B2A96F14C9CF8E211B90F8A2CE2EF57A68BDA5997271C1
-93A69D91A285B2198A12F8B3C23FCA396CBF176473CC5A4C4E24ED72990BDF14
-162EDFE244272250864246D493134DBC29C5CF2C8A5B5E27FCCFC7C577C014FE
-FD8F723CFC46F2D9700738788930F22656B5F1AD5A34C4EA6C96EF45C8E68138
-CE87FEA609914E3936624E1E6B167A60237A34C04FF1500C52E7258FDF3DE58E
-FFED1699614DE43622D1057F172E54AEE1257FCC853C0D1828B072F7E7C0AC3A
-F14DC27378E13A403905AB96F4A00DB324AC54CEE7D0ECB3B3F1284E558EA103
-4852D84A427552A33F0E35F0E22D7DD2BABC25EC55FF814AB99F1B909C20229D
-00DE91E7F2A0822FE812AB0C9FCE5D398375F7317E37267F74D69CF30F838045
-F9907C1D5F591D85AA9B95A686A9D73E1B7093A8A38D58E67644596859206F8F
-8DD908A526C150F352A7314259DC1FD65423A25B9A21F38CD46112F27FEFF426
-1BB880A4CBE9C46DC27C4CEB94381402911B5AAB94EE5333E5F48B66F4B1480A
-F4B06CFB826DFD48239BB7C422C20BF917DFB10A29890236F795DD9C1EAE186E
-44ADB3BEA0E3A185F6A381875EFAB07F16C91143911BF848290753BD98F1A12B
-DE4E2792C0B7ECD10503C5CE2E37D525AF9EB8473E2BFFCDC2C4080A14E4A476
-F160AC58F3E9783E5395F441F2448C50E41AEAAFFF30F298EFAAA4677CE300D7
-52D527FF32A74AEA41BF3C660CA672FE9FEC4BE4BCAA5C276D8BCA8B5285452F
-6A6DAB2693ABCE19DA3DD7038DA50851083BFFDA946007F272C89ACC4655A95E
-7D99B71F8D4FDB32A91214B344D33BDC7C33B6976335A97CBD6D58E9D78561A7
-CB273F61F8EEE59DA85F76DAAB67AD82CA7FECF99BB395BCD34E4C6F06BDA2C9
-BC2C29DE279F0122F4A43DD56C1754BF2B77ABA6AFCA4C34A093366EE406E357
-3115735A9213BDF32D5C5E432DE3F99B392C3E8031706EDA1A78962870FEB011
-B9E0879272B2881534EA6DFFA50D4745B099E1F388919A69343EDD83F6F4FCDE
-306197E3A21FAE3246C66520AC829E22D8BF759B971A10692BA9046F1742C847
-D36E0DAF081816E34BB9119E9F045DC7AF4D66DDC9A540719986FF9997F8440C
-1EA3D701C64AE89A6714B43F6015AF498AEB9CFA93708CDA38334CCC077B9F3C
-790CDE2896872B41C7BFF5D900F127831DE8CE9D73040B2DE948781386F760EE
-1E7F16D09C6BCC69C59AA3093A387BBE64F66DE8785414210E3684B3C41F2449
-B9B3253B8FB62B494A1AEABF2C1ED8F8BDEA333B13FDAF1FA5BFAB70A4268BE1
-50BBD16E4521DEB6366AE0A6E6B8C3BBD56576D7CCECA6125F364259468C1B29
-EDF9BBED09B604C3C44295302CABCD71DE70A6A13B74132E2681F9A6991C3C21
-FE51F5DBFCC724953BE9A06A291EFF0775E358B13470E7B540F322BA9849DF90
-0A493AA0C92C4DB72BCBF21230D67D9EBF2B10B7E8E73EC067BA9F7FB37B26E4
-E41F99FB53B05AE9020D8B7EA591ECF2F53A2563D5B9860A2B464110A4AB3464
-E6A6C30D5AC9D6FA0D7C020231154910D325F098EF3C22CDE49FDC91022855CE
-54DA964FE24D59260F6DC5C940A0A5D7E564B8DB34E042889CB0DE84B301C4AD
-CCD1F1F9537673D5773EC6BA5756C0EEE40270FF801628AB3C397775DF0031B0
-AEB581603CA9BDFDE2C0DF758B97A8BE52EA20D35103B19B5AA2D7FDD26842BF
-F14EB69B7C8F6E5187AB60A186303942ACFF394260E95DFF9429F30C481A1921
-D48F75F7E748126A4DE5DB5458438A608D0AD758BE984B309D9F2EE1C19F833E
-ADEFF840EC97A03074ABD2CB0A4D70F750C574DBA1D139E896ED5521FFFBAAF6
-278B28E401E29D3170DC88B205899D30D668DE66642635DD8DF45865250D1E53
-4AFBD2F81B98B717895C4A51AE9679BF2B5D80EB811F0EE1D3C639EBC47EB194
-CF466F9471403F48F9B7BA17754D872C987BC22A0E0679E7BE2B7E37EAAC4B71
-BA21BBE539FFF3ABF563ECC1A2DA9E61D478C66DE3B93D4D82F3E43883BD28BD
-FE63C9189DCEEDC2D7011748FEFE8768217F138A5D304C1C20847F24F6E61D3F
-D1200BA5D94711082D250659D9CA9B4C6A9509C4C753558144622BFA364B031A
-3CD32F3358A5165C8604F06B0871B86921B210A4B2D95D0DFFEC6E06A5B06894
-787323DC6B7CC6C7AA8044743083B3CE670762229E8355AD0519F0D7043CCA79
-A37205AA182F723A3FC3E7E05AAA07D7315DD7FBA672D81E261649C5FE832866
-31976B9A567680AAED953A13F98921D0476BBBCFEEFA09264BBA421C0915092B
-1C94F775173A74D92ED9C600626B30BC0AFCBEE5749DDC362AB86C1F5F22CC2D
-6C0D9D4E6E44FAEE6D1DE961C51677812672644E2784E3ED3861D46D807493B4
-92EA8AF7D95A701100CD7570DD0A302BDD4CD7309EDC2E4D1281DBD9091FB89B
-EDDA3EC4FFFCF36DD46A509D20E202C703BAF2546E854862FA3F2B812DA1FBB2
-BCAA4FC095E0027DFC4D7845E98B9698855C38F587A4E7CB21BB7F85C3F65B36
-7343612C43DA4EAD5E9543E51F92144F0BCE6238912508AE66CE7034D23823E7
-3155F0976C4DE253FD340EEE8588044DE58DACD046BE1561F9833FEB0B64673B
-E68B0FD1D0A728C73A0E2DF54138F54FF741838AE3A81E2648907D9E9B7216E7
-2438B86A019F03354101E5FA9E7D63A02EBB2B84E1AA10565F4F34C46487D260
-7121B2F584C11F9D96B9F285465E639BC9494A0AD5F24A234A92447E0F568B71
-4C8E867D79F8DA50CE7FE73DA5EAD0BA98327095260F87DCCABB8E8A11A3D394
-1012082942A5C55C3D5FE68F9BB14FEDA80A78022D2E4612A86FCFEFF0E8A9A4
-9C5A36EF1320C143AB5B85E1547423D9FC8D5B354E551F6FD15049BA210C2249
-9170A4D5583A0715C9324D98F87A4AEDAA8AC89E5009B7639A17178DC19F474F
-474C14686D2B1E432DEF3BB0163914CB83C474DA09205188D41C080CEE1E1725
-63108F30542B8AFE5519884FC2FA36C05D5E9D49D3482F8BCA8E28260384C275
-C141C52CFDDA480514A553AD517D6F0BA8F086533D6169DD6C6E85564D0F0C2B
-018B5E6008D59A919B507C9D9ED8E61DB0B62BA874656DB7B36AE0E8168C42DC
-AA69A38A8ACB17E3F4A17F64ADD37D6E4761C815087F3316E2D1A28675DDD319
-AF189249C8E838E567E63C91D5309681B9B26565275DE739A37C6C63FD267A72
-23D018641CA1C9EC413CBE625FCB98B209A28E1A078D62159369AFE5824446F8
-CCFF3D9E1DA58AA9FAD15399DF370F3575739011C90AA013EEBBB2378506F486
-44C0D8F20E480500A761EAEE24E9A187A54F3BA9227B049782C21E4899FA0C22
-A9DEE48C564974CF49EBB1CC7AED3307C75988C1333673E11D322694EA0F60C4
-322AF2EBD48F9601F0D73BAA4273D6D2EA0FF2E03D5A3E7D8A7416B2BFAF8D1C
-380BB26FB72F7C6FF61CAA645A3AEACF0FE24375DA61572F8D9A6984BE512C25
-9B2CE5AAF0A7112B9D4EA75AF218B95B10E8D09C8A8F07BD6C7A74F7FE68C8E3
-4D8CA542FCBF1E14ED5CF2812CDDB00D6E6FCAEF4F8BBA742CB361455959CC2F
-70AE061FA46E282396921D6B3027622A30198C0893347CE952493282F7374FC9
-E6D4FAEFB1E7B6A9C291900A18843C71D1F0960AA4948EE41F4661A7FA82FE63
-EE3E3C5A7C7C031C74316A42686C299938FF605A8BC55A76E4BE11CB03AC9930
-E574BFBD6EE691ED832149E95DF5375C352406BEAF3B21BBA8CD7EAFAB6AB516
-94DFB7F03F1A3B26DE26EDE2279F541608FC6F42F955502A10888A5A21ACCC8F
-D3A9E7E4D91CA303B651287F2676608FF130C2D31B3E2D4963B165FC3F4A4B3D
-16CC4BF4209537C147C1DA9034B1A98794C56F6BA588F30968D3695BFF242DF5
-0420899AA19E45828F826AD0C97080FF2698AC33F2A93BEBEEFE66E1688E67F7
-F0D14D174E50F0981851FA0E0A7DDAFC39D69339E0B3BEA12E0A57937AA1101C
-A2D34D3B78F8D33CB545333B5A5E98287B77C615949E0D3E2A5E006E84D20A1E
-DF8BD21FE8443D1B88F01FE60AD70B7013700774CFDA9B90EEB952C956F95DD2
-F0CC75F3FB271818D0F3DB52E5838AD0E233A1725B3995D134786C267BBDFC51
-772CA3764F2AC50372ACD485E7A04104B52DCE20A9E7F282698BB0D06B49DDF9
-F454C5176FE4A331406FACDDB579FD6D29473E40EAEE218B62ADA9FF9DC9C667
-B706788AC68013EAEC48E7E7AE5495E0BDEE36A8F289007433DDECDCD9020B9D
-73FECDDDD4489BB5FE0F25C147F69E61D16F8AE9BFD5D3F94C6AE3F273C61E8B
-6D74FAD823D7977D93E01E504B64DC7DE542C7B3F363D7C7B5EEB17774D82263
-1428D494F9CBAF4DF416A83A85E0EB37E352DBED8E1350338907956A5518FB5A
-3DBFC4289AD7925471EE3F11BDC917D93A85853D101667C933CA00C8AB3F7D10
-0CE0A62324705CCFFAD98D93E6F23CF8039C5C4E7675D6C770742EC5556D92E8
-222D9F58C6DB3BAE67C9DE815EF1DD22920CF93BBD9A001F3551E1D129CDBE11
-9CDF4926EE48048B207F64B30C676E39F71FE69A981FF6A763257E77F96BC1A3
-1538DDC45F204C4EC6D4971F542DBDFE503DD1ED59B5022ED2B2188B6A1E5B9E
-8B5DD767E3C41E83B0640C4473FA5834964A1832DC8452B589F678E31F1F7524
-432D4D3CB3F487F8C2CB1BCF5B3C43B992EF8C8F5CDF0AB2DB9AB8FB0BBDE8EB
-4544918F442109A6C7195AC11903835CE46E82D05EFF7FFFE3701B6DCE9FF64D
-0066F1722C4FC1B148688C431120C5CB958E9C6F1CEEDE7DCB0E12E95C60FB56
-8AB7B60182C8346982E62650D31C0D717357B2492E50850D839785FD4BEB5DA4
-4901ED42B374FDC37CBE894C71FB6BB440F9439D7CAD8B94381660115A39371E
-C828E88DF1A75245377872351AE054CB9E3D3A10734D3C29F276844036ACE3C7
-2DBBA8F956620FB541EFAB83D8C2CD247E94326DDACB00402294CFF6E51C2209
-76073ED148B6BF55165D253F1013B653560FCDC84875B2CBA9703ACCA6220D58
-3D4147FA9A009B880C937ED0D583D252269785DE66293FFD58D04911F2C45E19
-211A9CFB03967E80A82299629A9979D68ABED7848BE9C66BE41ED517A89EA5E8
-FF0A957A885F92F12ADE25DE96F66CBE05C1BF074F127858F8C10EE636F90A8A
-1EAEF16ED8FA59616BF2F520617E70205AAE9A98FC97DD6CE2C4AD069B1B4A4B
-9FAE6A11520A619D3806AA096FA549CEB493267D3288EF94C0B71CF93F8AE863
-F2E0B77C23A3235EDE56B80134904A3EE43B8117CCD2784D9EACBC8CE5E7AB44
-B1ACDADC552C27026004E128D6D2F46377480507846DA1BD011700664E4C91AC
-DE0B1D81E68259E4F99DDCE27B6A53E8AE095E92CC5DC148D4250C26EA013AB1
-733EC33E21982D17D993DEED27528841BAF3AF0048C1CADE3C957B32C50AE1C2
-9ABBBE7B95792357179C12617103C3FFE49F3ABD0C9968BDB1AAC7430898C3D4
-3F41D510EB990B5AA8FCFC7B23260268352532955C9F805ACC41692FB5B96136
-F5FD6A64D0CFA5010F60CDE76DEAB40F7EB5E9588BD58A67716FDC109CF43515
-E71ADEC3636E73F80B80A6E9B26C7B2988C030503B8C229BE9DDEA857B801D69
-50BE7DD68ECD411B168C3063B2D387DE91FFF469151C5707CCF5950A9DF36432
-1835C7F7D7CEFFF49CBE9E859A0BF95D20C424708B3CAE98839294C453400C36
-5C5F2AE3964092522A04B0505E8C0A5E9D6770067C6D99E4BEEB8C2E1420C3DE
-25CED757A7CABE35C38CC750A823D69746368ABEDB6383A4926DEE9DFB3B2074
-E96F21D4E52DE8B3228B057A10F36E4BC6CF057916FD9FA21075A504E20F5473
-04D4BA5C45FA3F95BE41ECDDE5311D63F1B5ACA33FDFEFADF811A0CA3308949E
-98F53ED130386E3C12AD2D6A3AE35CF27C9BC2C551F2D9DFFD2219AF7D4A98DD
-DC195EB1F943C7FAAB9E2758440B10F0FF62AF5D340E04EA697D0F67AC456BDD
-006CD1D7F0AEE17F01C0FEB6E711C978AA1D0A8640FC512A7A797533D24BC65D
-0A19AFF9A01A392376B47C4F9A62233540201BC1C92FD2A157E0E8D15F08B6C3
-5A8A60008C5127E4A1CF35345AF3DC4E917BB89D7E642DF326C3B006D0C85D9C
-5AD27D02AFA792A2436C0BB073E7230FF626E9C9ABCB3D9C5306DBFE902DD8A2
-7BC63135022D4250C40AFBC8FC4C877016BAFECCE7D1BCAEA5DC8ED70C85E719
-AD21AE35A533B640D4926C5B95259A24971D0220A89BF02676098D150496BEEE
-FEE72D1A05EAAB995B0F35D9248519AD6837C4506B3AC5056CC31AE130A9AF60
-D3EEFA8672522924D5CCE22208B2EF5AB31342F42C153483344E24AB1E9046AA
-A5E26BB5D1F068F089E936ADE53AB510DFE7FB8B065E713FEA90C4A6E7DFCE12
-8AEC089FE864793307B779D8806353E5E91BE12E11F01C5F1DD44533B93D22EE
-632A1978A56ABE9B1B6973B2F742B9EE9F0C1C8BB222AB5DCBAE010691BE7AE1
-EAC06889C1BED9B89C26E6E2FF90B8339D70749FC0B2A721120B6327E8768CEC
-029E99ACE4DD1882D8C582B1436D4D7137E5124D67211702E45F72CBA6282CB5
-9F29738FBAD0D768C6DA978C42BEECA998A04C1F7287456602860635EA487C5D
-4439C4880665DB286483BE9654CB80E13561D242D85FC89951469826B07D210C
-75C2DE7BC78542152214F3FA92F8CF7902A1C95ACA9A6FB0DDF0EF117C7096B1
-32FD795DED3DBB5017047F38357097E111E1D362ECE788ADFF41CCE6406655FD
-410AB8F61CC14BE2C300EA25AB441F58F90EDE8B93678E09491A5B04916B4995
-51DD887E476E18738419E0B8A691C4B36C70EC09071E1B173ADD0622FB8F5F43
-CB9632A903F6461350A9C67589D33AFB22EFFDD22F76DB860609B1D641726052
-B7CB84925A6D55FC505904BCC38CD7344B78C07327C0BBED8936C3573432B418
-7992B9CAB68B4E1730B5428DDBE29C7BDC635CCBEEB7EC2614776A66A2199D9F
-45C53C4614537F640AD0E0451BBB338580E49841CF38EE5EAED7FF7D134ABEE0
-F08593A235B0FC63F555D1B949EE838D933A232CBA5B50E80D2CDEEF933766E3
-0EFD1587117B763701FA12018B1655D6E615EAB5A02DA41FDC6C144EF0363ED5
-CC145ABDB2A896154EF12B5341BDCECA568779EBB2D69A44453551754900319D
-D263DECA53499AA13D3ABCFC0F2DEBA8666DD85B62AE202A53ECE5B9D0A332DB
-317D9D83541E4A389D2373B7C244EB26A18A478A87E36997623C91644B3DD2DA
-2305ED1E9A6737D0EECC15207C98244E86ABCFA03CE90E448EDC0D425A76D2BD
-5CB57DA5879CC0510B3DB37F330C650C180815E459C33CF0260784F5D3067556
-A210F3DF26F101DD977A80C017BD9BE3A93EB9EEEC319A3897BBB5CC37C744C3
-E87532930951309F4289D946139B639A501F212C76E8CDEA8414B156932C9968
-1F5A0AAF4C8E27981B2CBB1B6D57981C91F1D9503A8A8CD63A914CBD058D613C
-A29538C6C40621656F149BA82E9ADF48DB129C9FE67DB0F3889CD773D1344EB8
-6836FFD09FBD83137E766AA76930199E1E74DCC608931E88C0587B38714B15DB
-DB61D069034581C574DE119ED68F7A7D1018017D910A6E76A31044B2F5D97848
-118CA5675E6A4CF4BCE2C4885DEFF02FAFC07BADEB8AC2C3870FF37049998306
-EE8A3AA61465B2073CF9A962AD576A683FD83A6300CE2C23ED0D249C8A730E26
-B3444488FB97A3F0F14E5BBF056DA1E99DACDF796728D4BEB53348E3C94D2993
-52F04F3170A731C90F821F25300E21E8FDAD2D79139CCE2BBDFD4F092936BB55
-60F50D597F4E664E0053BC7D96F148578324B93333A694A08B2BD8D27609D821
-A4622B815A6C11D81C8F5C67C98373D9C682F53E552AFE5F775D70E03326970A
-36AA5820C369958BAE2CC2BF5A38016D986905A1A71F6404B54A6742E42098C6
-D8547D8584D86288C16580EBAA6A9F6A0B8472926A184A3604CE941B02B80724
-674AC3C2A8E1AEA7D607DA25E9D14A04278A455F75B320E392835AC80721EA68
-47356167E8C4ABBB4487F4A13576716645C7C998AB0BA0E121699924AE1AA868
-39CB66B9538AE1FEC40B5760CD691B6C93362DBC95109BB95CE7E15EEB2C5CC2
-B0D301F2E18DBC0BB28F75C0735E4BDF1B3A57171BFC4563497A4607A2F8CDF1
-7BF8B1940607FC9F086C8EE502404CBBE78316BD643F85AAB14B5FC40A16D98D
-51FCA6940D0A574A47D26761BCABC4DF0944D1B9AB19FC2DD13C7F129E25763B
-03CA38F2A7A293D7625895EE8AA192F9E3BE7A89A92FEDB73B6E6837C7255A93
-50DD7C57A318C763FB44E2EAA156E3EF2EFD828E85AB7E40281BAC038EA3B775
-880A1BD39CE89E2A4296E734B8A158A59B849A73D91C17FBBF6C3734006732A9
-12C57790B61BEEB5FD9BC8408F26733F37D2F5257EDD0B8CFB6AE71CA15E5372
-6CE269E9105EE47C3834EC4DC9C2BB4E3F201FE28B2FC9B905CDDA877B338DD9
-2BAFFD5923D615FFF6F78C64BB959B6CB194EDA4EF176D805580F4CBAD51BD60
-90F858FF170B34B26C8DC3AB99DBFB6F67D7F871344783332E66715EF72692DC
-C1173EDB01892B62A153894D0DB280084E5AAE6370531005479CDAF8A0F59A69
-85E5377C09D2E25C8EDD6FB08EE556A51C13A2709F18D0F028D5CD582485C425
-216AE79A201B80061160516685DD583A7CBDC355CCC0A94AFFB4AB11497C0231
-7CEDEEFC73AC0F63B61470DA14C740D335B72C880C8CD92ED61104CEA26F181C
-6BD9B8B9AFBA2AA87551CFB09425F30AB6A28FFF777B7C375F2160A89C98E15A
-1DE1947E698DB197E053AB1635E653A062ABFADC470F2907B23AD06165683282
-2FC8271911304436EC7D55176E20AB645784C67707DB1B16C6DF4AB3C01E7434
-C68A0D01A704C73137C315D648248AB98D2EC6EB026905089E69F01B7EFEA57C
-E00CC62B0A12CDE4530ACE0A3FA59C18AFD75B36F789A39C6FAC36533A4DC147
-433CA47C4E32DE8EB62418565ED2240778F902C4461549C2B39D2B8AD041E410
-F0B538B4B62416A7E4099E3BB73A69E9AE79FEACAA422EA38AF038E1A95A3EA6
-C97ACB26CA869F75A7C16ED0AEDF918CD62BA71AE4C9BCA99C2DAF3F2D6D277D
-A9D2331E25D8AAB1DF014E58879D09E38CB9029AD2C58C39FECAF89D223239D3
-34AD88BA6D822399C411E6432D2BDB87CDADDEBDE37EE9FE231216964EC8CF69
-DC53CF66E9D8277611DCAD5AF3F2971DA84191C5A5C98C0FCCBA2544D58AA2D6
-E9475D787630677F8A6A995612DB47AE0801E197453E79666054A435745E9E14
-CE605CC3904127EAFF6876F89BD9207ED51CE30E81715A1E7AF6A50A20072E9F
-CDD7C179CBBA25724FEF2E8BA565675FE9C8E3409530F30085B632AA8790732C
-1E8DDF950D11B43885C710C9FB51D7224555F64308CB8BF281184AA6F95079C5
-EFF29B67B1AB58F1038890D944927AF462F00C683ACD8B22D50ADD052DFC7B1D
-3CA6137854F2ACA5398AFEE10880D1E619382FDC534A6C8DDCAB18A1327B81C4
-3E19E771F49237735A52D61B54A78432A36DC4F52D97543C1B4CB3D3E582EF41
-76224D2ADFA2EE9393B60AFB70EC652AC882919303A817532B739D853126B219
-756B4211795C0331630F6173ED63F793F84E8479957BB859B9E0B834B96BB889
-65C55158ABB70A6708A1A6828853E8999CE0EB78EDB7076C7D844FDD7A4EC721
-264E38186F5BE696E7CEF981B08059E80A993DA342041FFA3F55D7FBAAAFBAC8
-67077D1E794EC949C6142DD492A31CB5EE91690DFCF4FF4FC02FA8083425EF8B
-13C9FC09628674D9ABB2D86BD1E8CEFDF13D2FA22EEACCA34A0A13F74E406546
-8943E1FCE6CB34FE5138EA0EA2C15DFA7628663ADDCD621583B1CE8DF44E387B
-8682678002D9A15CB92C103C5B99A7740801A687D63BB666B1C784B426B5591F
-CE1D200BD1050905B62B5AA0198E11D21A53D011FD3808AA880E867FAB9BD9CE
-11B3265A53F382463E85A40CFCAB3DF12D09359B463D9C6B919E26A71486CBBF
-D5994B10C4C83007F8F1953F85B79ACFDB0976B4E00B478CE0BA8EB8E01F94D8
-69D4C0AEEDE6402C95B8522CA2C58E98CBA0D7720FF1F13C680F8A2A215B693E
-DF29CC6B106A919E7D99B70CA4EE33BD95354595F706405187D55A48CA9D9921
-E70B393D4FB453B1E731EB69BE8EEE7E8B4A48279898FE6E26D86B562E121778
-80214E4EE58DD6A2B16A61D59314A3E57D7C3892A3D558751A4106C0F962A5D2
-DAE214CFE1E9FE76A146662EF4307A2C62FA23D6D85FBD488834F7F7F5992E95
-ED15829CF1F36DF3CF62036FFFECA564D1EE0D949F3EA016CD0F19B305C4CCAF
-AAE8A57CDBF7B04D82C05F0FCD7B61928B3BD2814139CDAA798ECA033D4E7628
-2856ABC0A3201C43FFBD794CA3735CD2482E9F4B2C4C3B039B7ABDDAC5523135
-304833B55B3EA5CB3A1D0ED2E5E6A85A1D241B4E937BACAF2D6A311E26DA1CC8
-A823FE4A10D5CDD45DB84C99102E6CEF7D2467300A4093A4B5C1CB45F9D78149
-EFC04CD7E4717D74A8B708627FBF3640E6CB8424234B0D41A54A4385EFFACC11
-2ABF427C7416DC18946CA2B53DDD6B837F1AB9763D4A2F66E964D985D14AF408
-93AAF0FA61C90F4DC72734843947B5799493F11CB2D58E109362B003977981DA
-9B55AB5BB4DA25517335612E08C9385FAC90AFC09A5EACC3868F5982F4778805
-BEB09E0F9DCBB64D4591A92502F72B2CA1ECC8BB3179DF2E5062EDAC808C1897
-68D846DF3F87801B1FF4CA4F230811655475B245DEAA6A5E1AB290CDB3F1BC89
-C520E3411076C7882F55B018D1D48CA5BFD44D5EFD4FAE4D972C49E4301FA1B4
-4924C0FAD2C159E7552160E310C99159D4270B7F28541DFBF5B6D0A9663787E1
-9FC24DF89EC5EB7C876454FFEAB290C81519A09518CF556910A70B776CBC1375
-ECE11465577B0FDF26BAE00B0344B8DE0C41F5D2967956E8C38343D5AB79C9CC
-B015185DE0F98FD3F4296E41EBA0A5B41E2B849F80938BA21637D7D68EC65668
-5BC550FEE3123C61BD695FDC3464E5B922F696FA2AD56A842B31898B13D7F136
-DB3407C8C8D6BF091BC091D1244EE4964674AB977FC762BF582895B87492BF65
-623868AD8AB7300886C66B3A4029CB8BB96A45B8004A8EDC51E085B88824DC6E
-2B8F934C0BF938557D9E30EA2F6FDCF5B861271DCB61E1DCF2B092905E0E06E3
-630512BC9BB3CABC76C6D4ED40A9AC30DB6A595967436980B6DE103D518B08B5
-9730D8FABD09D05A1A9F8F5634D6AE4CB81FC21AF938A657FC88742DC81E809C
-C1ED81A953E19B0EEA907DAA54EB093BA9FADF6AB67769D035C7E214A445FF58
-9C277544F036623B1C06D3BA0FBFBCB94C4A5ACC290841D1B1C990304BF73B6E
-B636553F3C2326255EA57A62EEF22B7E2AF61B45A332D9DB768FBDEDB2ECD7CA
-561D4CBE7A77E0766A85DAADBEFFF969D32F7B2466F88EB821C4BAE4CE668F1E
-DC428455D9915BB0976E79BA49D57E87411AE9CE13AAB02F00447C79C8A76061
-9CA2B941F7B59A910CC714E64D0243B34A048D0507167CD2743281E8653919A2
-3197D15E34F7F57698E125B1C26B10FA55DEF390ED5034B4BFC84F71C11DCA58
-565DF8DA32D123F1919C13F3B5EB60F972C06F3E6FD7248B7A65877CCE6C6655
-988FB5B96A0509F33E984C819CAA63E411A6CA8D448C5CD0BAA74D4C5D7FDAB7
-84E514A239CAE0DA8E9B692ADAF3B66D55D5BAC0B8FB27FC2BD14D2D58A0AEE5
-6E03248A37CD0A938E633C78B60BD7D7804A07984693C6280AD9F6AFA883F588
-7EFAC89D13D06AB50DA00190B0F99414294EF59B4EBB5AB58AD968AF48C568F3
-C4AD4CBCA882F8F1CD7CF95397E6A05F97216D522E9E22C43B83981AA9C72A27
-C1A8DF7BD7BBFEEC44036924872B59BDBF6EEEF2255DF79253C204DEDEBE6168
-880F5B748D8E3EA2FB632A3C580AD35879AE044B2B12D12FB4DB566F2E001B1C
-60741F4BE72C53539B840255EB071AEC55CA0A1E22D65C4CD3F9A5230B48B317
-B3431F6F579196F72050C7ECE47A310B92515E87FC0F534D9747A216B47C8461
-75984BEE5BE9E47AA41840FD5DD746A0308748A1BA208B350BC04AA61795A290
-7EB5F91FEF7CF7937FF43AE9E29BE6F643007B1E39EE83351B936BE74BD6D052
-B7CF111A49677FFF872F3BB025DEF8649B2741935A96AC27BB7EF345FD156B4B
-3E4A5F0206AE2AF893BFCC6A4FB5FAE7A5B058ED17D2D25E81FD0E60AA720620
-9765912ADEE418695301E51124A77FDA93882C926288A3E7B9F9924000E74E30
-8B18DDA5D0A70020C9419BAC3970CA461DB34FF9D288696FCB732F58A909518A
-57D61B0D41A8BDD24A6DE0FE6EA8700DD5400691D9456CEBE6B0EE460B2CCA1E
-E4F6B5E3228A061996C30CC032CCDB70A6B00B395A92E4C707C9DE3AFEC3C290
-B00292939C106B9BB11DBC16587FC9B005D3E6162EBC12C6AB493EAC3EB84A6A
-6BDBEED24C02F827D4A94B73A0676B30A2670887B73C55B01218832EB3F57690
-C68CB1407D6088994A100D4966B43389ED0118043223EEC6345DF34A9A87D2D8
-DCCF6D5CA31C98D4A331B1DD6794E5BA75EA62BD3075FDF67AAFB910EE555813
-22E68CEB7D346B3E745DD7C8A130CA576A1B96F8C7AD5B6918836164138D6480
-35DA3A931648C9E64850A97DC73326D5605BD7B8508AA84F022771F264BD809D
-0D9260653BB70B89DB02A2EA018B615FA01105789081E8DB1A94B252C3B87A4E
-34AE5D2068EDB2F2BC5B9E577EBF8A40ADB7ADAF5741945856696744FAA0806F
-25596349553F4BF7955E60937C7A8DD6B1BC14ACC0F0E63C99B0EC211EE437D6
-97CBCEA075B12C458799A88A45501FC4C5ECC10C144E1F265C696C2BCFD14BA5
-30747B5D50F9F6A80A2E231B55E6BB42FF34C83FD1B32C751072DCAC20E480DB
-2FE35E0C58D127E80DE6741E8C2D04232E9A9300EA471D02E142E6A5687E6C34
-DC5108038E82C7238EE473AC70BF088B4C5D338A30E6FEE90C7D80CA6EBB6B82
-7750E463F5C0BC280B21DFFCEA48CF78B90AC2AB175DFAC78059D8839263937B
-7E1E7BE2C8421A02C011AE1718EA71302A73BEA2ED188274D80DAB1C3E2F7E65
-62A5F646C9859A7536B7719F7D95F2AFC3834D742D5D88D3A7A7C25959BBBF36
-B88DE17C568729E857E980B049345BE1224FDCD255356D9B5B5F7615483EB063
-CDC576B2736823C0CF5034EC0C2475C05C365F0FF775DBB724AD996203A281CB
-235FAEBEF583113C5BD8C8CCF4336C45E53CA940F3AEC63C42F08A3BE4BB63DA
-0326C9913C48C6BB5F4B64362A40F14D299A658F47BF6C47192672634F598D74
-60419837C75965C661853CD7AA551581241D0E6CB5097175A9AD7417404C6F4B
-7F2F5C248DEFE4EA85A877C1E3E5A3C10A21150FE918B6CE9FE26C234C91A69F
-9D0FF58102C128DA7AB1211DD029C946C4E88B0623C7425FE63641DC118EA01C
-7F358CCDA82B5FB6F3F7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 55387786 39139632 1000 600 600 (orgcard.dvi)
-@start /Fa 242[61 13[{}1 49.8132 /CMSY6 rf /Fb 134[32
-1[43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19
-27 34 27 34 30 13[34 44 1[41 47 1[54 3[22 1[47 39 2[43
-1[45 6[18 2[30 30 1[30 1[30 1[30 1[18 21 18 44[{}41 49.8132
-/CMR6 rf /Fc 219[71 29[55 6[{}2 66.4176 /CMSY8 rf /Fd
-135[33 3[24 29 4[40 58 18 2[22 36 2[33 36 33 33 36 50[22
-46[{}14 66.4176 /CMTI8 rf /Fe 134[43 43 59 43 45 32 32
-34 1[45 41 45 68 23 43 1[23 45 41 25 37 45 36 45 40 10[61
-1[57 1[61 61 1[61 1[77 49 2[30 63 2[53 1[59 8[23 12[27
-32[45 47 11[{}38 66.4176 /CMBX8 rf /Ff 204[33 33 33 49[{}3
-58.1154 /CMR7 rf /Fg 129[35 1[35 1[35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 1[35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 5[35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 33[{}86 66.4176 /CMTT8 rf /Fh
-134[60 60 83 60 64 45 45 47 1[64 57 64 95 32 60 1[32
-64 57 1[53 64 51 64 56 8[87 1[87 1[80 64 86 1[78 86 90
-109 69 2[43 1[90 72 75 88 83 81 87 19[38 45[{}41 99.6264
-/CMBX10 rf /Fi 133[31 37 37 51 37 39 27 28 28 37 39 35
-39 59 20 37 22 20 39 35 22 31 39 31 39 35 2[35 1[35 3[53
-1[53 53 51 39 52 1[48 55 53 65 44 55 1[25 53 55 46 48
-54 51 50 53 6[20 2[35 35 1[35 35 35 35 1[35 20 24 20
-1[35 27 27 20 2[35 59 35 20 19[39 39 41 11[{}71 66.4176
-/CMR8 rf /Fj 141[57 2[69 76 6[69 42 63 76 61 1[67 14[103
-2[103 1[131 9[99 16[69 69 1[69 1[46 3[53 53 40[{}19 119.552
-/CMBX10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- @landscape end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin @landscape 1 0 bop -169 -357 a Fj(Org-Mo)t(de)45
-b(Reference)h(Card)g(\(1/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h
-(4.67\))-150 -45 y Fh(Getting)37 b(Started)-150 79 y
-Fg(\(add-to-list)i('auto-mode-alist)h('\("\\\\.org$")e(.)e
-(org-mode\)\))-150 162 y(\(define-key)i(global-map)h("\\C-cl")e
-('org-store-link\))1504 138 y Ff(1)-150 244 y Fg(\(define-key)h
-(global-map)h("\\C-ca")e('org-agenda\))1364 221 y Ff(1)-150
-341 y Fi(F)-6 b(or)23 b(the)i(man)n(y)f(customization)h(options)g(try)
-68 b Fg(M-x)36 b(org-customize)-150 410 y Fi(T)-6 b(o)24
-b(read)g(the)g(on-line)g(do)r(cumen)n(tation)i(try)111
-b Fg(M-x)36 b(org-info)-150 606 y Fh(Visibilit)m(y)h(Cycling)-150
-754 y Fi(rotate)25 b(curren)n(t)f(subtree)g(b)r(et)n(w)n(een)i(states)
-291 b Fg(TAB)-150 824 y Fi(rotate)25 b(en)n(tire)f(bu\013er)g(b)r(et)n
-(w)n(een)h(states)384 b Fg(S-TAB)-150 893 y Fi(sho)n(w)24
-b(the)g(whole)g(\014le)854 b Fg(C-c)36 b(C-a)-150 963
-y Fi(rev)n(eal)24 b(con)n(text)i(around)e(p)r(oin)n(t)586
-b Fg(C-c)36 b(C-r)-150 1033 y Fi(sho)n(w)24 b(subtree)g(in)g(indirect)f
-(bu\013er,)h(ded.)g(frame)127 b Fg(C-c)36 b(C-k)-150
-1227 y Fh(Motion)-150 1375 y Fi(next/previous)25 b(heading)751
-b Fg(C-c)36 b(C-n/p)-150 1444 y Fi(next/previous)25 b(heading,)g(same)e
-(lev)n(el)393 b Fg(C-c)36 b(C-f/b)-150 1514 y Fi(bac)n(kw)n(ard)25
-b(to)f(higher)g(lev)n(el)f(heading)424 b Fg(C-c)36 b(C-u)-150
-1584 y Fi(jump)23 b(to)i(another)f(place)h(in)e(do)r(cumen)n(t)350
-b Fg(C-c)36 b(C-j)-150 1666 y Fi(previous/next)25 b(plain)f(list)f
-(item)557 b Fg(S-UP/DOWN)1605 1643 y Ff(3)-150 1864 y
-Fh(Structure)36 b(Editing)-150 2012 y Fi(insert)23 b(new)i
-(heading/item)g(at)f(curren)n(t)g(lev)n(el)195 b Fg(M-RET)-150
-2081 y Fi(insert)23 b(new)i(TODO)e(en)n(try/c)n(hec)n(kb)r(o)n(x)k
-(item)225 b Fg(M-S-RET)-150 2178 y Fi(promote)24 b(curren)n(t)h
-(heading)f(up)g(one)h(lev)n(el)285 b Fg(M-LEFT)-150 2248
-y Fi(demote)25 b(curren)n(t)f(heading)h(do)n(wn)f(one)g(lev)n(el)233
-b Fg(M-RIGHT)-150 2317 y Fi(promote)24 b(curren)n(t)h(subtree)f(up)g
-(one)g(lev)n(el)301 b Fg(M-S-LEFT)-150 2387 y Fi(demote)25
-b(curren)n(t)f(subtree)h(do)n(wn)f(one)g(lev)n(el)248
-b Fg(M-S-RIGHT)-150 2484 y Fi(mo)n(v)n(e)24 b(subtree/list)h(item)e
-(up/do)n(wn)445 b Fg(M-S-UP/DOWN)-150 2553 y Fi(kill)23
-b(subtree)1097 b Fg(C-c)36 b(C-x)g(C-w)-150 2623 y Fi(cop)n(y)25
-b(subtree)1052 b Fg(C-c)36 b(C-x)g(M-w)-150 2693 y Fi(y)n(ank)25
-b(subtree)1046 b Fg(C-c)36 b(C-x)g(C-y)-150 2763 y Fi(narro)n(w)23
-b(bu\013er)h(to)h(curren)n(t)f(subtree)446 b Fg(C-x)36
-b(n)g(s)-150 2937 y Fh(Arc)m(hiving)-150 3085 y Fi(toggle)25
-b(AR)n(CHIVE)e(tag)779 b Fg(C-c)36 b(C-x)g(C-a)-150 3155
-y Fi(mark)23 b(fully)g(done)i(c)n(hildren)542 b Fg(C-u)36
-b(C-c)g(C-x)g(C-a)-150 3225 y Fi(force)24 b(cycling)g(of)f(an)h(AR)n
-(CHIVEd)g(tree)341 b Fg(C-TAB)-150 3295 y Fi(mo)n(v)n(e)24
-b(subtree)h(to)f(arc)n(hiv)n(e)g(\014le)593 b Fg(C-c)36
-b(C-x)g(C-s)-150 3364 y Fi(mo)n(v)n(e)24 b(all)f(fully)g(done)i(c)n
-(hildren)444 b Fg(C-u)36 b(C-c)g(C-x)g(C-s)-150 3445
-y Fi(T)-6 b(o)24 b(set)g(arc)n(hiv)n(e)g(lo)r(cation)h(for)e(curren)n
-(t)h(\014le,)f(add)h(a)g(line)f(lik)n(e)1495 3421 y Ff(2)1533
-3445 y Fi(:)-150 3518 y Fg(#+ARCHIVE:)38 b(archfile::*)h(Archived)e
-(Tasks)-150 3692 y Fh(Filtering)g(and)g(Sparse)g(T)-10
-b(rees)-150 3840 y Fi(sho)n(w)24 b(sparse)f(tree)i(for)d(all)h(matc)n
-(hes)i(of)f(a)g(regexp)92 b Fg(C-c)36 b(/)-150 3910 y
-Fi(view)24 b(TODO's)e(in)i(sparse)f(tree)580 b Fg(C-c)36
-b(C-v)-150 3991 y Fi(global)24 b(TODO)f(list)g(in)g(agenda)i(mo)r(de)
-389 b Fg(C-c)36 b(t)1466 3967 y Ff(1)-150 4060 y Fi(create)25
-b(sparse)e(tree)i(with)e(all)g(deadlines)i(due)204 b
-Fg(C-c)36 b(C-w)-150 4130 y Fi(time)24 b(sorted)g(view)g(of)f(curren)n
-(t)h(org)g(\014le)367 b Fg(C-c)36 b(a)g(L)2046 -364 y
-Fh(T)-10 b(ables)2046 -223 y Fe(Creating)25 b(a)i(table)2046
--128 y Fi(just)d(start)g(t)n(yping,)g(e.g.)349 b Fg(|Name|Phone|Age)39
-b(RET)d(|-)g(TAB)2046 -59 y Fi(con)n(v)n(ert)25 b(region)f(to)g(table)
-741 b Fg(C-c)36 b(|)2046 11 y Fi(...)30 b(separator)24
-b(at)h(least)f(3)g(spaces)537 b Fg(C-3)36 b(C-c)g(|)2046
-106 y Fe(Commands)26 b(a)n(v)-5 b(ailable)25 b(inside)j(tables)2046
-201 y Fi(The)17 b(follo)n(wing)f(commands)i(w)n(ork)f(when)g(the)h
-(cursor)e(is)g Fd(inside)k(a)f(table)p Fi(.)2046 270
-y(Outside)24 b(of)e(tables,)i(the)g(same)f(k)n(eys)h(ma)n(y)f(ha)n(v)n
-(e)h(other)g(functionalit)n(y)-6 b(.)2046 365 y Fe(Re-aligning)25
-b(and)i(\014eld)h(motion)2046 460 y Fi(re-align)22 b(the)i(table)g
-(without)g(mo)n(ving)g(the)g(cursor)70 b Fg(C-c)36 b(C-c)2046
-530 y Fi(re-align)23 b(the)h(table,)g(mo)n(v)n(e)h(to)f(next)h(\014eld)
-311 b Fg(TAB)2046 599 y Fi(mo)n(v)n(e)24 b(to)h(previous)e(\014eld)762
-b Fg(S-TAB)2046 669 y Fi(re-align)23 b(the)h(table,)g(mo)n(v)n(e)h(to)f
-(next)h(ro)n(w)328 b Fg(RET)2046 764 y Fe(Ro)n(w)26 b(and)h(column)g
-(editing)2046 858 y Fi(mo)n(v)n(e)d(the)h(curren)n(t)f(column)g(left)
-544 b Fg(M-LEFT)2046 928 y Fi(mo)n(v)n(e)24 b(the)h(curren)n(t)f
-(column)g(righ)n(t)497 b Fg(M-RIGHT)2046 998 y Fi(kill)23
-b(the)h(curren)n(t)g(column)731 b Fg(M-S-LEFT)2046 1068
-y Fi(insert)23 b(new)i(column)f(to)g(left)f(of)h(cursor)f(p)r(osition)
-104 b Fg(M-S-RIGHT)2046 1162 y Fi(mo)n(v)n(e)24 b(the)h(curren)n(t)f
-(ro)n(w)f(up)678 b Fg(M-UP)2046 1232 y Fi(mo)n(v)n(e)24
-b(the)h(curren)n(t)f(ro)n(w)f(do)n(wn)594 b Fg(M-DOWN)2046
-1302 y Fi(kill)23 b(the)h(curren)n(t)g(ro)n(w)g(or)f(horizon)n(tal)h
-(line)291 b Fg(M-S-UP)2046 1372 y Fi(insert)23 b(new)i(ro)n(w)e(ab)r(o)
-n(v)n(e)i(the)f(curren)n(t)g(ro)n(w)285 b Fg(M-S-DOWN)2046
-1441 y Fi(insert)23 b(hline)h(b)r(elo)n(w)g(\()p Fg(C-u)h
-Fi(:)31 b(ab)r(o)n(v)n(e\))25 b(curren)n(t)f(ro)n(w)79
-b Fg(C-c)36 b(-)2046 1511 y Fi(sort)24 b(lines)f(in)g(region)867
-b Fg(C-c)36 b(^)2046 1606 y Fe(Regions)2046 1700 y Fi(cut)25
-b(rectangular)f(region)758 b Fg(C-c)36 b(C-x)g(C-w)2046
-1770 y Fi(cop)n(y)25 b(rectangular)f(region)715 b Fg(C-c)36
-b(C-x)g(M-w)2046 1840 y Fi(paste)25 b(rectangular)f(region)695
-b Fg(C-c)36 b(C-x)g(C-y)2046 1910 y Fi(\014ll)23 b(paragraph)h(across)g
-(selected)h(cells)399 b Fg(C-c)36 b(C-q)2046 2004 y Fe(Calculations)21
-b Fi(\(in)j(com)n(bination)h(with)f(Emacs)f Fg(calc)i
-Fi(pac)n(k)l(age\))2046 2099 y(set)f(and)g(ev)l(al)g(column)g(form)n
-(ula)567 b Fg(C-c)36 b(=)2046 2169 y Fi(set)24 b(and)g(ev)l(al)g
-(\014eld)g(form)n(ula)661 b Fg(C-u)36 b(C-c)g(=)2046
-2239 y Fi(edit)24 b(form)n(ulas)f(in)g(separate)i(bu\013er)473
-b Fg(C-c)36 b(')2046 2308 y Fi(re-apply)23 b(all)g(stored)i(equations)g
-(to)f(curren)n(t)g(line)96 b Fg(C-c)36 b(*)2046 2378
-y Fi(re-apply)23 b(all)g(stored)i(equations)g(to)f(en)n(tire)g(table)
-101 b Fg(C-u)36 b(C-c)g(*)2046 2448 y Fi(iterate)25 b(table)f(to)g
-(stabilit)n(y)703 b Fg(C-u)36 b(C-u)g(C-c)g(*)2046 2542
-y Fi(rotate)25 b(calculation)g(mark)e(through)i(#)e(*)h(!)31
-b(^)p 3291 2542 22 4 v 49 w($)115 b Fg(C-#)2046 2637
-y Fi(sho)n(w)24 b(line,)f(column,)g(form)n(ula)g(reference)315
-b Fg(C-c)36 b(?)2046 2707 y Fi(sum)23 b(n)n(um)n(b)r(ers)h(in)f(curren)
-n(t)i(column/rectangle)143 b Fg(C-c)36 b(+)2046 2791
-y Fi(cop)n(y)25 b(do)n(wn)f(with)g(incremen)n(t)625 b
-Fg(S-RET)3661 2768 y Ff(3)2046 2886 y Fi(F)-6 b(orm)n(ulas)22
-b(t)n(yp)r(ed)j(in)d(\014eld)h(are)g(executed)i(b)n(y)e
-Fg(TAB)p Fi(,)h Fg(RET)f Fi(and)g Fg(C-c)37 b(C-c)p Fi(.)2046
-2955 y Fg(=)24 b Fi(in)n(tro)r(duces)g(a)g(column)g(form)n(ula,)f
-Fg(:=)h Fi(a)f(named-\014eld)i(form)n(ula.)2046 3050
-y(Example:)31 b(Add)24 b(Col1)g(and)g(Col2)522 b Fg(=$1+$2)2046
-3120 y Fi(...)30 b(with)24 b(prin)n(tf)f(format)g(sp)r(eci\014cation)
-387 b Fg(=$1+$2;\045.2f)2046 3190 y Fi(...)30 b(with)24
-b(constan)n(ts)h(from)e(constan)n(ts.el)352 b Fg(=$1/$c/$cm)2046
-3259 y Fi(sum)23 b(from)g(2nd)h(to)h(3rd)e(hline)485
-b Fg(:=vsum\(@II..@III\))2046 3329 y Fi(apply)24 b(curren)n(t)g(column)
-g(form)n(ula)518 b Fg(=)2046 3424 y Fe(Miscellaneous)2046
-3519 y Fi(to)24 b(limit)f(column)h(width)g(to)g Fg(N)g
-Fi(c)n(haracters,)g(use)140 b Fg(...|)36 b(<N>)h(|...)2046
-3588 y Fi(edit)24 b(the)h(curren)n(t)f(\014eld)g(in)f(a)h(separate)h
-(windo)n(w)126 b Fg(C-c)36 b(`)2046 3658 y Fi(mak)n(e)24
-b(curren)n(t)g(\014eld)g(fully)f(visible)502 b Fg(C-u)36
-b(TAB)2046 3728 y Fi(exp)r(ort)25 b(as)e(tab-separated)j(\014le)370
-b Fg(M-x)36 b(org-table-export)2046 3798 y Fi(imp)r(ort)23
-b(tab-separated)j(\014le)447 b Fg(M-x)36 b(org-table-import)2046
-3892 y Fe(T)-7 b(ables)27 b(created)f(with)h(the)g Fg(table.el)i
-Fe(pac)n(k)-5 b(age)2046 3987 y Fi(insert)23 b(a)h(new)g
-Fg(table.el)i Fi(table)582 b Fg(C-c)36 b(~)2046 4057
-y Fi(recognize)25 b(existing)f(table.el)g(table)474 b
-Fg(C-c)36 b(C-c)2046 4126 y Fi(con)n(v)n(ert)25 b(table)f(\(Org-mo)r
-(de)g Fc($)f Fi(table.el\))312 b Fg(C-c)36 b(~)4242 -364
-y Fh(Links)4242 -217 y Fi(globally)24 b(store)g(link)f(to)h(the)h
-(curren)n(t)f(lo)r(cation)166 b Fg(C-c)36 b(l)5858 -241
-y Ff(1)4242 -148 y Fi(insert)23 b(a)h(link)f(\(T)-6 b(AB)24
-b(completes)h(stored)f(links\))138 b Fg(C-c)36 b(C-l)4242
--78 y Fi(insert)23 b(\014le)h(link)f(with)h(\014le)g(name)g(completion)
-192 b Fg(C-u)36 b(C-c)g(C-l)4242 -8 y Fi(edit)24 b(\(also)g(hidden)g
-(part)g(of)5 b(\))24 b(link)g(at)g(p)r(oin)n(t)247 b
-Fg(C-c)36 b(C-l)4242 88 y Fi(op)r(en)25 b(\014le)e(links)g(in)h(emacs)
-722 b Fg(C-c)36 b(C-o)4242 158 y Fi(...force)22 b(op)r(en)j(in)e
-(emacs/other)j(windo)n(w)320 b Fg(C-u)36 b(C-c)g(C-o)4242
-227 y Fi(op)r(en)25 b(link)e(at)h(p)r(oin)n(t)884 b Fg(mouse-1/2)4242
-297 y Fi(...force)22 b(op)r(en)j(in)e(emacs/other)j(windo)n(w)320
-b Fg(mouse-3)4242 367 y Fi(record)24 b(a)g(p)r(osition)g(in)f(mark)g
-(ring)510 b Fg(C-c)36 b(\045)4242 437 y Fi(jump)23 b(bac)n(k)i(to)f
-(last)g(follo)n(w)n(ed)f(link\(s\))403 b Fg(C-c)36 b(&)4242
-506 y Fi(Find)24 b(next)g(link)998 b Fg(C-c)36 b(C-x)g(C-n)4242
-576 y Fi(Find)24 b(previous)f(link)876 b Fg(C-c)36 b(C-x)g(C-p)4242
-672 y Fe(In)n(ternal)26 b(Links)4242 768 y Fg(<<My)36
-b(Target>>)984 b Fi(target)4242 851 y Fg(<<<My)37 b(Target>>>)913
-b Fi(radio)23 b(target)6045 827 y Ff(2)4242 920 y Fg([[*this)37
-b(text]])948 b Fi(\014nd)24 b(headline)4242 990 y Fg([[this)37
-b(text]])620 b Fi(\014nd)24 b(target)h(or)e(text)i(in)f(bu\013er)4242
-1060 y Fg([[this)37 b(text][description]])387 b Fi(optional)24
-b(link)f(text)4242 1156 y Fe(External)j(Links)4242 1252
-y Fg(file:/home/dominik/img/)q(mars)q(.jp)q(g)352 b Fi(\014le,)23
-b(absolute)4242 1322 y Fg(file:papers/last.pdf)740 b
-Fi(\014le,)23 b(relativ)n(e)4242 1391 y Fg(file:projects.org::*tha)q(t)
-41 b(text)418 b Fi(\014nd)24 b(headline)4242 1461 y Fg
-(file:projects.org::find)42 b(me)523 b Fi(\014nd)24 b(trgt/string)4242
-1531 y Fg(http://www.astro.uva.nl)q(/~do)q(min)q(ik)317
-b Fi(on)24 b(the)h(w)n(eb)4242 1601 y Fg(mailto:adent@galaxy.net)635
-b Fi(Email)23 b(address)4242 1670 y Fg(news:comp.emacs)915
-b Fi(Usenet)25 b(group)4242 1740 y Fg(bbdb:Richard)39
-b(Stallman)701 b Fi(BBDB)23 b(p)r(erson)4242 1810 y Fg(gnus:group)1090
-b Fi(GNUS)24 b(group)4242 1880 y Fg(gnus:group#id)985
-b Fi(GNUS)24 b(message)4242 1949 y Fg(vm|wl|mhe|rmail:folder)670
-b Fi(Mail)23 b(folder)4242 2019 y Fg(vm|wl|mhe|rmail:folder#)q(id)564
-b Fi(Mail)23 b(message)4242 2089 y Fg(info:emacs:Regexps)810
-b Fi(Info)24 b(\014le:no)r(de)4242 2159 y Fg(shell:ls)38
-b(*.org)947 b Fi(shell)23 b(command)4242 2228 y Fg(elisp:\(calendar\))
-880 b Fi(elisp)23 b(form)4242 2298 y Fg([[external)38
-b(link][description]])246 b Fi(optional)24 b(link)f(text)4242
-2492 y Fh(Remem)m(b)s(er-mo)s(de)38 b(In)m(tegration)4242
-2638 y Fi(See)32 b(the)g(man)n(ual)g(for)e(ho)n(w)i(to)g(mak)n(e)g
-(remem)n(b)r(er.el)f(use)g(Org-mo)r(de)4242 2708 y(links)25
-b(and)g(\014les.)36 b(The)25 b(note-\014nishing)h(command)g
-Fg(C-c)36 b(C-c)26 b Fi(will)e(\014rst)4242 2778 y(prompt)g(for)f(an)h
-(org)f(\014le.)32 b(In)24 b(the)g(\014le,)g(\014nd)g(a)g(lo)r(cation)g
-(with:)4242 2874 y(rotate)h(subtree)f(visibilit)n(y)719
-b Fg(TAB)4242 2944 y Fi(next)25 b(heading)1043 b Fg(DOWN)4242
-3013 y Fi(previous)24 b(heading)921 b Fg(UP)4242 3109
-y Fi(Insert)24 b(the)h(note)g(with)e(one)i(of)e(the)i(follo)n(wing:)
-4242 3206 y(as)f(sublev)n(el)g(of)f(heading)i(at)f(cursor)468
-b Fg(RET)4242 3275 y Fi(righ)n(t)24 b(here)g(\(cursor)f(not)i(on)f
-(heading\))388 b Fg(RET)4242 3345 y Fi(b)r(efore)24 b(curren)n(t)g
-(heading)745 b Fg(LEFT)4242 3415 y Fi(after)24 b(curren)n(t)g(heading)
-790 b Fg(RIGHT)4242 3484 y Fi(shortcut)20 b(to)f(end)h(of)f(bu\013er)g
-(\(cursor)g(at)g(buf-start\))71 b Fg(RET)4242 3554 y
-Fi(Ab)r(ort)1256 b Fg(q)4242 3748 y Fh(Completion)4242
-3895 y Fi(In-bu\013er)34 b(completion)g(completes)h(TODO)d(k)n(eyw)n
-(ords)i(at)g(headline)4242 3964 y(start,)19 b(T)-6 b(eX)19
-b(macros)f(after)h(\\)p Fg(\\)p Fi(",)h(option)f(k)n(eyw)n(ords)g
-(after)f(\\)p Fg(#-)p Fi(",)i(T)-6 b(A)n(GS)4242 4034
-y(after)24 b(\\)p Fg(:)p Fi(",)g(and)g(dictionary)g(w)n(ords)g
-(elsewhere.)4242 4130 y(Complete)h(w)n(ord)e(at)h(p)r(oin)n(t)702
-b Fg(M-TAB)p eop end
-%%Page: 2 2
-TeXDict begin @landscape 2 1 bop -169 -357 a Fj(Org-Mo)t(de)45
-b(Reference)h(Card)g(\(2/2\))546 -242 y Fi(\(for)23 b(v)n(ersion)h
-(4.67\))-150 -47 y Fh(TODO)38 b(Items)g(and)f(Chec)m(kb)s(o)m(xes)-150
-99 y Fi(rotate)25 b(the)f(state)h(of)f(the)g(curren)n(t)g(item)354
-b Fg(C-c)36 b(C-t)-150 169 y Fi(view)24 b(TODO)f(items)g(in)h(a)g
-(sparse)f(tree)380 b Fg(C-c)36 b(C-v)-150 239 y Fi(view)24
-b(3rd)f(TODO)g(k)n(eyw)n(ord's)h(sparse)g(tree)258 b
-Fg(C-3)36 b(C-c)g(C-v)-150 335 y Fi(set)24 b(the)h(priorit)n(y)e(of)g
-(the)i(curren)n(t)f(item)369 b Fg(C-c)36 b(,)g([ABC])-150
-405 y Fi(remo)n(v)n(e)24 b(priorit)n(y)f(co)r(okie)i(from)d(curren)n(t)
-j(item)179 b Fg(C-c)36 b(,)g(SPC)-150 485 y Fi(raise)23
-b(priorit)n(y)g(of)g(curren)n(t)i(item)557 b Fg(S-UP)1430
-462 y Ff(3)-150 566 y Fi(lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)n
-(t)g(item)538 b Fg(S-DOWN)1500 542 y Ff(3)-150 662 y
-Fg(#+SEQ_TODO:)38 b(TODO)f(TRY)f(BLUFF)h(DONE)347 b Fi(to)r(do)25
-b(w)n(ork\015o)n(w)-150 731 y Fg(#+TYP_TODO:)38 b(Phil)f(home)f(work)h
-(DONE)347 b Fi(to)r(do)25 b(t)n(yp)r(es)-150 827 y(insert)e(new)i(c)n
-(hec)n(kb)r(o)n(x)g(item)f(in)f(plain)h(list)282 b Fg(M-S-RET)-150
-897 y Fi(toggle)24 b(c)n(hec)n(kb)r(o)n(x\(es\))i(in)d(region/en)n
-(try/at)i(p)r(oin)n(t)71 b Fg(C-c)36 b(C-x)g(C-b)-150
-967 y Fi(toggle)25 b(c)n(hec)n(kb)r(o)n(x)h(at)e(p)r(oin)n(t)684
-b Fg(C-c)36 b(C-c)-150 1037 y Fi(c)n(hec)n(kb)r(o)n(x)26
-b(statistics)e(co)r(okies:)32 b(insert)23 b Fg([/])i
-Fi(or)e Fg([\045])-150 1106 y Fi(up)r(date)i(c)n(hec)n(kb)r(o)n(x)h
-(statistics)e(\()p Fg(C-u)h Fi(:)31 b(whole)24 b(\014le\))81
-b Fg(C-c)36 b(#)-150 1301 y Fh(T)-10 b(ags)-150 1447
-y Fi(set)24 b(tags)h(for)d(curren)n(t)j(heading)589 b
-Fg(C-c)36 b(C-c)-150 1517 y Fi(realign)23 b(tags)i(in)e(all)g(headings)
-613 b Fg(C-u)36 b(C-c)g(C-c)-150 1587 y Fi(create)25
-b(sparse)e(tree)i(with)e(matc)n(hing)i(tags)285 b Fg(C-c)36
-b(\\)-150 1657 y Fi(globally)24 b(\(agenda\))i(matc)n(h)e(tags)h(at)f
-(cursor)243 b Fg(C-c)36 b(C-o)-150 1852 y Fh(Timestamps)-150
-1998 y Fi(prompt)24 b(for)f(date)i(and)f(insert)f(timestamp)266
-b Fg(C-c)36 b(.)-150 2068 y Fi(lik)n(e)23 b Fg(C-c)i
-Fi(.)31 b(but)24 b(insert)g(date)g(and)h(time)e(format)144
-b Fg(C-u)36 b(C-c)g(.)-150 2138 y Fi(Lik)n(e)24 b Fg(C-c)36
-b(.)24 b Fi(but)g(mak)n(e)g(stamp)h(inactiv)n(e)322 b
-Fg(C-c)36 b(!)-150 2208 y Fi(insert)23 b(DEADLINE)h(timestamp)516
-b Fg(C-c)36 b(C-d)-150 2277 y Fi(insert)23 b(SCHEDULED)h(timestamp)451
-b Fg(C-c)36 b(C-s)-150 2347 y Fi(create)25 b(sparse)e(tree)i(with)e
-(all)g(deadlines)i(due)204 b Fg(C-c)36 b(C-w)-150 2417
-y Fi(the)25 b(time)e(b)r(et)n(w)n(een)j(2)e(dates)g(in)g(a)f(time)h
-(range)172 b Fg(C-c)36 b(C-y)-150 2499 y Fi(c)n(hange)25
-b(timestamp)g(at)f(cursor)f(b)n(y)h Fc(\006)p Fi(1)g(da)n(y)238
-b Fg(S-RIGHT/LEFT)1710 2476 y Ff(3)-150 2580 y Fi(c)n(hange)25
-b(y)n(ear/mon)n(th/da)n(y)i(at)d(cursor)f(b)n(y)h Fc(\006)p
-Fi(1)189 b Fg(S-UP/DOWN)1605 2556 y Ff(3)-150 2649 y
-Fi(access)25 b(the)f(calendar)g(for)f(the)i(curren)n(t)f(date)221
-b Fg(C-c)36 b(>)-150 2719 y Fi(insert)23 b(timestamp)i(matc)n(hing)g
-(date)f(in)g(calendar)89 b Fg(C-c)36 b(<)-150 2789 y
-Fi(access)25 b(agenda)g(for)e(curren)n(t)h(date)507 b
-Fg(C-c)36 b(C-o)-150 2859 y Fi(Select)25 b(date)g(while)e(prompted)598
-b Fg(mouse-1/RET)-150 2928 y Fi(T)-6 b(oggle)17 b(custom)g(format)f
-(displa)n(y)g(for)f(dates/times)72 b Fg(C-c)36 b(C-x)g(C-t)-150
-3124 y Fh(Clo)s(c)m(king)i(Time)-150 3270 y Fi(start)24
-b(clo)r(c)n(k)g(on)g(curren)n(t)h(item)612 b Fg(C-c)36
-b(C-x)g(C-i)-150 3340 y Fi(stop)24 b(clo)r(c)n(k)h(on)f(curren)n(t)g
-(item)628 b Fg(C-c)36 b(C-x)g(C-o)-150 3410 y Fi(cancel)25
-b(curren)n(t)f(clo)r(c)n(k)829 b Fg(C-c)36 b(C-x)g(C-x)-150
-3506 y Fi(displa)n(y)24 b(total)g(subtree)h(times)619
-b Fg(C-c)36 b(C-x)g(C-d)-150 3575 y Fi(remo)n(v)n(e)24
-b(displa)n(y)n(ed)g(times)726 b Fg(C-c)36 b(C-c)-150
-3645 y Fi(insert/up)r(date)25 b(table)g(with)f(clo)r(c)n(k)g(rep)r(ort)
-289 b Fg(C-c)36 b(C-x)g(C-r)-150 3841 y Fh(LaT)-10 b(eX)37
-b(and)g(cdlatex-mo)s(de)-150 3987 y Fi(preview)24 b(LaT)-6
-b(eX)24 b(fragmen)n(t)673 b Fg(C-c)36 b(C-x)g(C-l)-150
-4057 y Fi(Expand)25 b(abbreviation)f(\(cdlatex-mo)r(de\))305
-b Fg(TAB)-150 4126 y Fi(Insert/mo)r(dify)24 b(math)h(sym)n(b)r(ol)e
-(\(cdlatex-mo)r(de\))99 b Fg(`)36 b(/)f(')2046 -364 y
-Fh(Agenda)i(Views)2046 -208 y Fi(add/mo)n(v)n(e)25 b(curren)n(t)f
-(\014le)g(to)g(fron)n(t)g(of)f(agenda)197 b Fg(C-c)36
-b([)2046 -139 y Fi(remo)n(v)n(e)24 b(curren)n(t)g(\014le)g(from)f(y)n
-(our)g(agenda)299 b Fg(C-c)36 b(])2046 -69 y Fi(cycle)24
-b(through)h(agenda)g(\014le)f(list)551 b Fg(C-')2046
-40 y Fi(compile)24 b(agenda)h(for)e(the)h(curren)n(t)g(w)n(eek)320
-b Fg(C-c)36 b(a)g(a)3733 17 y Ff(1)2046 121 y Fi(compile)24
-b(global)g(TODO)f(list)640 b Fg(C-c)36 b(a)g(t)3733 97
-y Ff(1)2046 201 y Fi(compile)24 b(TODO)f(list)g(for)g(sp)r(eci\014c)h
-(k)n(eyw)n(ord)218 b Fg(C-c)36 b(a)g(T)3733 178 y Ff(1)2046
-281 y Fi(matc)n(h)25 b(tags)f(in)f(agenda)j(\014les)637
-b Fg(C-c)36 b(a)g(m)3733 258 y Ff(1)2046 362 y Fi(matc)n(h)25
-b(tags)f(in)f(TODO)h(en)n(tries)554 b Fg(C-c)36 b(a)g(M)3733
-338 y Ff(1)2046 442 y Fi(\014nd)24 b(stuc)n(k)h(pro)t(jects)869
-b Fg(C-c)36 b(a)g(#)3733 419 y Ff(1)2046 523 y Fi(sho)n(w)24
-b(timeline)f(of)h(curren)n(t)g(org)f(\014le)458 b Fg(C-c)36
-b(a)g(L)3733 499 y Ff(1)2046 603 y Fi(con\014gure)25
-b(custom)f(commands)570 b Fg(C-c)36 b(a)g(C)3733 580
-y Ff(1)2046 684 y Fi(con\014gure)25 b(stuc)n(k)g(pro)t(jects)708
-b Fg(C-c)36 b(a)g(!)3733 660 y Ff(1)2046 753 y Fi(agenda)25
-b(for)e(date)i(at)f(cursor)661 b Fg(C-c)36 b(C-o)2046
-886 y Fi(T)-6 b(o)24 b(set)g(categories,)h(add)f(lines)f(lik)n(e)3010
-863 y Ff(2)3047 886 y Fi(:)2046 961 y Fg(#+CATEGORY:)38
-b(MyCateg)2046 1059 y Fe(Commands)26 b(a)n(v)-5 b(ailable)25
-b(in)i(an)g(agenda)g(bu\013er)2046 1157 y(View)g(Org)g(\014le)2046
-1256 y Fi(sho)n(w)d(original)f(lo)r(cation)h(of)g(item)524
-b Fg(SPC/mouse-3)2046 1326 y Fi(sho)n(w)24 b(and)g(recen)n(ter)h(windo)
-n(w)626 b Fg(L)2046 1395 y Fi(goto)25 b(original)e(lo)r(cation)h(in)g
-(other)g(windo)n(w)260 b Fg(TAB/mouse-2)2046 1465 y Fi(goto)25
-b(original)e(lo)r(cation,)h(delete)h(other)f(windo)n(ws)91
-b Fg(RET)2046 1535 y Fi(sho)n(w)24 b(subtree)g(in)g(indirect)f
-(bu\013er,)h(ded.)g(frame)127 b Fg(b)2046 1604 y Fi(toggle)25
-b(follo)n(w-mo)r(de)861 b Fg(f)2046 1703 y Fe(Change)27
-b(displa)n(y)2046 1801 y Fi(delete)e(other)f(windo)n(ws)791
-b Fg(o)2046 1871 y Fi(switc)n(h)24 b(to)g(daily)g(/)g(w)n(eekly)g(view)
-534 b Fg(d)36 b(/)f(w)2046 1941 y Fi(toggle)25 b(inclusion)e(of)h
-(diary)f(en)n(tries)473 b Fg(D)2046 2010 y Fi(toggle)25
-b(time)f(grid)f(for)g(daily)g(sc)n(hedule)388 b Fg(g)2046
-2080 y Fi(toggle)25 b(displa)n(y)e(of)h(logb)r(o)r(ok)g(en)n(tries)446
-b Fg(l)2046 2150 y Fi(refresh)23 b(agenda)i(bu\013er)f(with)g(an)n(y)g
-(c)n(hanges)239 b Fg(r)2046 2220 y Fi(sa)n(v)n(e)24 b(all)f(org-mo)r
-(de)h(bu\013ers)673 b Fg(s)2046 2289 y Fi(displa)n(y)24
-b(the)g(follo)n(wing)f Fg(org-agenda-ndays)221 b(RIGHT)2046
-2359 y Fi(displa)n(y)24 b(the)g(previous)g Fg(org-agenda-ndays)238
-b(LEFT)2046 2429 y Fi(goto)25 b(to)r(da)n(y)1110 b Fg(.)2046
-2527 y Fe(Remote)27 b(editing)2046 2625 y Fi(digit)d(argumen)n(t)984
-b Fg(0-9)2046 2695 y Fi(c)n(hange)25 b(state)g(of)f(curren)n(t)g(TODO)f
-(item)333 b Fg(t)2046 2765 y Fi(kill)23 b(item)g(and)i(source)830
-b Fg(C-k)2046 2835 y Fi(arc)n(hiv)n(e)24 b(the)h(subtree)854
-b Fg($)2046 2904 y Fi(sho)n(w)24 b(tags)g(of)g(curren)n(t)g(headline)
-536 b Fg(T)2046 2974 y Fi(set)24 b(tags)h(for)d(curren)n(t)j(headline)
-573 b Fg(:)2046 3044 y Fi(toggle)25 b(AR)n(CHIVE)e(tag)779
-b Fg(a)2046 3114 y Fi(set)24 b(priorit)n(y)f(of)g(curren)n(t)i(item)612
-b Fg(p)2046 3196 y Fi(raise/lo)n(w)n(er)23 b(priorit)n(y)g(of)h(curren)
-n(t)g(item)361 b Fg(S-UP/DOWN)3801 3172 y Ff(3)2046 3266
-y Fi(displa)n(y)24 b(w)n(eigh)n(ted)h(priorit)n(y)e(of)g(curren)n(t)h
-(item)189 b Fg(P)2046 3335 y Fi(sc)n(hedule/set)26 b(deadline)e(for)f
-(this)g(item)377 b Fg(C-c)36 b(C-s/d)2046 3420 y Fi(c)n(hange)25
-b(timestamp)g(to)f(one)g(da)n(y)h(earlier/later)139 b
-Fg(S-LEFT/RIGHT)3906 3396 y Ff(3)2046 3489 y Fi(c)n(hange)25
-b(timestamp)g(to)f(to)r(da)n(y)598 b Fg(>)2046 3559 y
-Fi(insert)23 b(new)i(en)n(try)f(in)n(to)g(diary)612 b
-Fg(i)2046 3657 y Fi(start)24 b(the)h(clo)r(c)n(k)f(on)g(curren)n(t)g
-(item)g(\(clo)r(c)n(k-in\))176 b Fg(I)2046 3727 y Fi(stop)24
-b(the)h(clo)r(c)n(k)f(\(clo)r(c)n(k-out\))654 b Fg(O)2046
-3797 y Fi(cancel)25 b(curren)n(t)f(clo)r(c)n(k)829 b
-Fg(X)2046 3895 y Fe(Misc)2046 3993 y Fi(Op)r(en)24 b(link)f(in)h
-(curren)n(t)g(line)673 b Fg(C-c)36 b(C-o)4242 -364 y
-Fe(Calendar)26 b(commands)4242 -273 y Fi(\014nd)e(agenda)h(cursor)f
-(date)g(in)g(calendar)350 b Fg(c)4242 -203 y Fi(compute)25
-b(agenda)g(for)e(calendar)i(cursor)e(date)180 b Fg(c)4242
--133 y Fi(sho)n(w)24 b(phases)g(of)f(the)i(mo)r(on)669
-b Fg(M)4242 -64 y Fi(sho)n(w)24 b(sunrise/sunset)g(times)636
-b Fg(S)4242 6 y Fi(sho)n(w)24 b(holida)n(ys)1014 b Fg(H)4242
-76 y Fi(con)n(v)n(ert)25 b(date)g(to)f(other)g(calendars)478
-b Fg(C)4242 167 y Fe(Quit)27 b(and)g(Exit)4242 258 y
-Fi(quit)d(agenda,)h(remo)n(v)n(e)f(agenda)h(bu\013er)376
-b Fg(q)4242 328 y Fi(exit)24 b(agenda,)h(remo)n(v)n(e)f(all)f(agenda)i
-(bu\013ers)258 b Fg(x)4242 495 y Fh(Calendar)36 b(and)h(Diary)i(In)m
-(tegration)4242 622 y Fi(Include)25 b(Emacs)f(diary)f(en)n(tries)h(in)n
-(to)g(Org-mo)r(de)f(agenda)j(with:)4242 713 y Fg(\(setq)37
-b(org-agenda-include-diary)42 b(t\))4242 882 y Fh(Exp)s(orting)d(and)e
-(Publishing)4242 1009 y Fi(Exp)r(orting)32 b(creates)g(\014les)g(with)f
-(extensions)i Fd(.txt)k Fi(and)32 b Fd(.html)38 b Fi(in)31
-b(the)4242 1078 y(curren)n(t)c(directory)-6 b(.)38 b(Publishing)26
-b(puts)g(the)h(resulting)f(\014le)g(in)n(to)h(some)4242
-1148 y(other)d(place.)4242 1239 y(exp)r(ort/publish)h(dispatc)n(her)642
-b Fg(C-c)36 b(C-e)4242 1331 y Fi(exp)r(ort)25 b(visible)e(part)g(only)
-715 b Fg(C-c)36 b(C-e)g(v)4242 1400 y Fi(insert)23 b(template)j(of)d
-(exp)r(ort)h(options)423 b Fg(C-c)36 b(C-x)g(t)4242 1470
-y Fi(toggle)25 b(\014xed)f(width)g(for)f(en)n(try)h(or)g(region)295
-b Fg(C-c)36 b(:)4242 1561 y Fe(HTML)27 b(formatting)4242
-1652 y Fi(mak)n(e)d(w)n(ords)g Fe(b)r(old)897 b Fg(*bold*)4242
-1722 y Fi(mak)n(e)24 b(w)n(ords)g Fd(italic)898 b Fg(/italic/)4242
-1792 y Fi(mak)n(e)24 b(w)n(ords)g(underlined)p 4629 1805
-326 4 v 728 w Fg(_underlined_)4242 1861 y Fi(sub-)f(and)i(sup)r
-(erscripts)781 b Fg(x^3,)36 b(J_dust)4242 1931 y Fi(T)4281
-1945 y(E)4320 1931 y(X-lik)n(e)23 b(macros)940 b Fg(\\alpha,)37
-b(\\to)4242 2001 y Fi(t)n(yp)r(eset)25 b(lines)f(in)f(\014xed)h(width)g
-(fon)n(t)460 b Fg(start)37 b(with)f(:)4242 2071 y Fi(tables)24
-b(are)g(exp)r(orted)h(as)f(HTML)f(tables)321 b Fg(start)37
-b(with)f(|)4242 2140 y Fi(links)23 b(b)r(ecome)i(HTML)e(links)640
-b Fg(http:...)73 b(etc)4242 2210 y Fi(include)24 b(h)n(tml)g(tags)905
-b Fg(@<b>...@</b>)4242 2301 y Fe(Commen)n(ts:)35 b(T)-7
-b(ext)27 b(not)f(b)r(eing)i(exp)r(orted)4242 2392 y Fi(T)-6
-b(ext)22 b(b)r(efore)f(the)h(\014rst)f(headline)g(is)f(not)i
-(considered)g(part)f(of)g(the)h(do)r(c-)4242 2462 y(umen)n(t)29
-b(and)f(is)f(therefore)h(nev)n(er)g(exp)r(orted.)44 b(Lines)28
-b(starting)g(with)g Fg(#)4242 2532 y Fi(are)j(commen)n(ts)g(and)h(are)e
-(not)i(exp)r(orted.)53 b(Subtrees)32 b(whose)f(header)4242
-2602 y(starts)24 b(with)g(COMMENT)e(are)i(nev)n(er)g(exp)r(orted.)4242
-2693 y(toggle)h(COMMENT)d(k)n(eyw)n(ord)j(on)f(en)n(try)285
-b Fg(C-c)36 b(;)4242 2860 y Fh(Dynamic)i(Blo)s(c)m(ks)4242
-2987 y Fi(up)r(date)25 b(dynamic)f(blo)r(c)n(k)h(at)f(p)r(oin)n(t)486
-b Fg(C-c)36 b(C-x)g(C-u)4242 3056 y Fi(up)r(date)25 b(all)e(dynamic)h
-(blo)r(c)n(ks)490 b Fg(C-u)36 b(C-c)g(C-x)g(C-u)4242
-3223 y Fh(Notes)4242 3326 y Ff(1)4313 3350 y Fi(This)e(is)f(only)h(a)h
-(suggestion)g(for)e(a)h(binding)h(of)e(this)h(command.)4242
-3419 y(Cho)r(ose)24 b(y)n(ou)h(o)n(wn)f(k)n(ey)g(as)g(sho)n(wn)g(under)
-g(INST)-6 b(ALLA)g(TION.)4242 3498 y Ff(2)4304 3521 y
-Fi(After)24 b(c)n(hanging)i(a)f Fg(#+KEYWORD)i Fi(or)e
-Fg(<<<target>>>)j Fi(line,)c(press)g Fg(C-c)4242 3591
-y(C-c)g Fi(with)g(the)h(cursor)e(still)f(in)i(the)g(line)g(to)g(up)r
-(date.)4242 3669 y Ff(3)4303 3693 y Fi(Keybinding)g(a\013ected)i(b)n(y)
-e Fg(org-CUA-compatibility)p Fi(.)4535 3777 y Fb(Cop)n(yrigh)n(t)4838
-3775 y(c)4821 3777 y Fa(\015)d Fb(2007)i(F)-5 b(ree)21
-b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)4795 3833
-y(v4.67)h(for)h(Org-Mo)r(de)e(4.67,)i(2007)4912 3889
-y(Author:)k(Philip)18 b(Ro)r(ok)n(e)4473 3945 y(based)j(on)g(refcard)g
-(design)g(and)f(format)i(b)n(y)f(Stephen)f(Gildea)4242
-4022 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e
-(distribute)f(copies)j(of)f(this)f(card)h(pro-)4242 4078
-y(vided)23 b(the)h(cop)n(yrigh)n(t)h(notice)g(and)f(this)f(p)r
-(ermission)h(notice)g(are)h(preserv)n(ed)g(on)4242 4133
-y(all)20 b(copies.)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/pl-refcard.ps b/etc/pl-refcard.ps
deleted file mode 100644
index 32f310ed0cd..00000000000
--- a/etc/pl-refcard.ps
+++ /dev/null
@@ -1,4086 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: pl-refcard.dvi
-%%Pages: 4
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: PLRoman10-Bold PLRoman8-Regular PLTypewriter8-Regular
-%%+ PLRoman8-Bold PLRoman6-Regular PLMathSymbols6-Italic PLRoman8-Italic
-%%+ PLMathItalic8-Italic
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips pl-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.02.12:1721
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: plrm.enc 0 0
-/encplrm[
-/Gamma
-/Delta
-/Theta
-/Lambda
-/Xi
-/Pi
-/Sigma
-/Upsilon
-/Phi
-/Psi
-/Omega
-/ff
-/fi
-/fl
-/ffi
-/ffl
-/dotlessi
-/dotlessj
-/grave
-/acute
-/caron
-/breve
-/macron
-/ring
-/cedilla
-/germandbls
-/ae
-/oe
-/oslash
-/AE
-/OE
-/Oslash
-/suppress
-/exclam
-/quotedblright
-/numbersign
-/dollar
-/percent
-/ampersand
-/quoteright
-/parenleft
-/parenright
-/asterisk
-/plus
-/comma
-/hyphen
-/period
-/slash
-/zero
-/one
-/two
-/three
-/four
-/five
-/six
-/seven
-/eight
-/nine
-/colon
-/semicolon
-/exclamdown
-/equal
-/questiondown
-/question
-/at
-/A
-/B
-/C
-/D
-/E
-/F
-/G
-/H
-/I
-/J
-/K
-/L
-/M
-/N
-/O
-/P
-/Q
-/R
-/S
-/T
-/U
-/V
-/W
-/X
-/Y
-/Z
-/bracketleft
-/quotedblleft
-/bracketright
-/circumflex
-/dotaccent
-/quoteleft
-/a
-/b
-/c
-/d
-/e
-/f
-/g
-/h
-/i
-/j
-/k
-/l
-/m
-/n
-/o
-/p
-/q
-/r
-/s
-/t
-/u
-/v
-/w
-/x
-/y
-/z
-/endash
-/emdash
-/hungarumlaut
-/tilde
-/dieresis
-/.notdef
-/Aogonek
-/Cacute
-/.notdef
-/.notdef
-/.notdef
-/Eogonek
-/.notdef
-/.notdef
-/.notdef
-/Lslash
-/Nacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Sacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Zacute
-/.notdef
-/Zdotaccent
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/aogonek
-/cacute
-/.notdef
-/.notdef
-/.notdef
-/eogonek
-/.notdef
-/.notdef
-/.notdef
-/lslash
-/nacute
-/.notdef
-/.notdef
-/guillemotleft
-/guillemotright
-/.notdef
-/sacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/zacute
-/.notdef
-/zdotaccent
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Oacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/oacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/quotedblbase
-] def
-
-%%EndProcSet
-%%BeginProcSet: pltt.enc 0 0
-/encpltt[
-/Gamma
-/Delta
-/Theta
-/Lambda
-/Xi
-/Pi
-/Sigma
-/Upsilon
-/Phi
-/Psi
-/Omega
-/arrowup
-/arrowdown
-/quotesingle
-/exclamdown
-/questiondown
-/dotlessi
-/dotlessj
-/grave
-/acute
-/caron
-/breve
-/macron
-/ring
-/cedilla
-/germandbls
-/ae
-/oe
-/oslash
-/AE
-/OE
-/Oslash
-/visiblespace
-/exclam
-/quotedbl
-/numbersign
-/dollar
-/percent
-/ampersand
-/quoteright
-/parenleft
-/parenright
-/asterisk
-/plus
-/comma
-/hyphen
-/period
-/slash
-/zero
-/one
-/two
-/three
-/four
-/five
-/six
-/seven
-/eight
-/nine
-/colon
-/semicolon
-/less
-/equal
-/greater
-/question
-/at
-/A
-/B
-/C
-/D
-/E
-/F
-/G
-/H
-/I
-/J
-/K
-/L
-/M
-/N
-/O
-/P
-/Q
-/R
-/S
-/T
-/U
-/V
-/W
-/X
-/Y
-/Z
-/bracketleft
-/backslash
-/bracketright
-/asciicircum
-/underscore
-/quoteleft
-/a
-/b
-/c
-/d
-/e
-/f
-/g
-/h
-/i
-/j
-/k
-/l
-/m
-/n
-/o
-/p
-/q
-/r
-/s
-/t
-/u
-/v
-/w
-/x
-/y
-/z
-/braceleft
-/bar
-/braceright
-/asciitilde
-/dieresis
-/.notdef
-/Aogonek
-/Cacute
-/.notdef
-/.notdef
-/.notdef
-/Eogonek
-/.notdef
-/.notdef
-/.notdef
-/Lslash
-/Nacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Sacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Zacute
-/.notdef
-/Zdotaccent
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/aogonek
-/cacute
-/.notdef
-/.notdef
-/.notdef
-/eogonek
-/.notdef
-/.notdef
-/.notdef
-/lslash
-/nacute
-/.notdef
-/.notdef
-/guillemotleft
-/guillemotright
-/.notdef
-/sacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/zacute
-/.notdef
-/zdotaccent
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Oacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/oacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/quotedblbase
-] def
-
-%%EndProcSet
-%%BeginProcSet: plms.enc 0 0
-/encplms[
-/minus
-/periodcentered
-/multiply
-/asteriskmath
-/divide
-/diamondmath
-/plusminus
-/minusplus
-/circleplus
-/circleminus
-/circlemultiply
-/circledivide
-/circledot
-/circlecopyrt
-/openbullet
-/bullet
-/equivasymptotic
-/equivalence
-/reflexsubset
-/reflexsuperset
-/lessequal
-/greaterequal
-/precedesequal
-/followsequal
-/similar
-/approxequal
-/propersubset
-/propersuperset
-/lessmuch
-/greatermuch
-/precedes
-/follows
-/arrowleft
-/arrowright
-/arrowup
-/arrowdown
-/arrowboth
-/arrownortheast
-/arrowsoutheast
-/similarequal
-/arrowdblleft
-/arrowdblright
-/arrowdblup
-/arrowdbldown
-/arrowdblboth
-/arrownorthwest
-/arrowsouthwest
-/proportional
-/prime
-/infinity
-/element
-/owner
-/triangle
-/triangleinv
-/negationslash
-/mapsto
-/universal
-/existential
-/logicalnot
-/emptyset
-/Rfractur
-/Ifractur
-/latticetop
-/perpendicular
-/aleph
-/A
-/B
-/C
-/D
-/E
-/F
-/G
-/H
-/I
-/J
-/K
-/L
-/M
-/N
-/O
-/P
-/Q
-/R
-/S
-/T
-/U
-/V
-/W
-/X
-/Y
-/Z
-/union
-/intersection
-/unionmulti
-/logicaland
-/logicalor
-/turnstileleft
-/turnstileright
-/floorleft
-/floorright
-/ceilingleft
-/ceilingright
-/braceleft
-/braceright
-/angbracketleft
-/angbracketright
-/bar
-/bardbl
-/arrowbothv
-/arrowdblbothv
-/backslash
-/wreathproduct
-/radical
-/coproduct
-/nabla
-/integral
-/unionsq
-/intersectionsq
-/subsetsqequal
-/supersetsqequal
-/section
-/dagger
-/daggerdbl
-/paragraph
-/club
-/diamond
-/heart
-/spade
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/xlessequal
-/xgreaterequal
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: plit.enc 0 0
-/encplit[
-/Gamma
-/Delta
-/Theta
-/Lambda
-/Xi
-/Pi
-/Sigma
-/Upsilon
-/Phi
-/Psi
-/Omega
-/ff
-/fi
-/fl
-/ffi
-/ffl
-/dotlessi
-/dotlessj
-/grave
-/acute
-/caron
-/breve
-/macron
-/ring
-/cedilla
-/germandbls
-/ae
-/oe
-/oslash
-/AE
-/OE
-/Oslash
-/suppress
-/exclam
-/quotedblright
-/numbersign
-/sterling
-/percent
-/ampersand
-/quoteright
-/parenleft
-/parenright
-/asterisk
-/plus
-/comma
-/hyphen
-/period
-/slash
-/zero
-/one
-/two
-/three
-/four
-/five
-/six
-/seven
-/eight
-/nine
-/colon
-/semicolon
-/exclamdown
-/equal
-/questiondown
-/question
-/at
-/A
-/B
-/C
-/D
-/E
-/F
-/G
-/H
-/I
-/J
-/K
-/L
-/M
-/N
-/O
-/P
-/Q
-/R
-/S
-/T
-/U
-/V
-/W
-/X
-/Y
-/Z
-/bracketleft
-/quotedblleft
-/bracketright
-/circumflex
-/dotaccent
-/quoteleft
-/a
-/b
-/c
-/d
-/e
-/f
-/g
-/h
-/i
-/j
-/k
-/l
-/m
-/n
-/o
-/p
-/q
-/r
-/s
-/t
-/u
-/v
-/w
-/x
-/y
-/z
-/endash
-/emdash
-/hungarumlaut
-/tilde
-/dieresis
-/.notdef
-/Aogonek
-/Cacute
-/.notdef
-/.notdef
-/.notdef
-/Eogonek
-/.notdef
-/.notdef
-/.notdef
-/Lslash
-/Nacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Sacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Zacute
-/.notdef
-/Zdotaccent
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/aogonek
-/cacute
-/.notdef
-/.notdef
-/.notdef
-/eogonek
-/.notdef
-/.notdef
-/.notdef
-/lslash
-/nacute
-/.notdef
-/.notdef
-/guillemotleft
-/guillemotright
-/.notdef
-/sacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/zacute
-/.notdef
-/zdotaccent
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/Oacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/oacute
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/quotedblbase
-] def
-
-%%EndProcSet
-%%BeginProcSet: plmi.enc 0 0
-/encplmi[
-/Gamma
-/Delta
-/Theta
-/Lambda
-/Xi
-/Pi
-/Sigma
-/Upsilon
-/Phi
-/Psi
-/Omega
-/alpha
-/beta
-/gamma
-/delta
-/epsilon1
-/zeta
-/eta
-/theta
-/iota
-/kappa
-/lambda
-/mu
-/nu
-/xi
-/pi
-/rho
-/sigma
-/tau
-/upsilon
-/phi
-/chi
-/psi
-/omega
-/epsilon
-/theta1
-/pi1
-/rho1
-/sigma1
-/phi1
-/arrowlefttophalf
-/arrowleftbothalf
-/arrowrighttophalf
-/arrowrightbothalf
-/arrowhookleft
-/arrowhookright
-/triangleright
-/triangleleft
-/zerooldstyle
-/oneoldstyle
-/twooldstyle
-/threeoldstyle
-/fouroldstyle
-/fiveoldstyle
-/sixoldstyle
-/sevenoldstyle
-/eightoldstyle
-/nineoldstyle
-/period
-/comma
-/less
-/slash
-/greater
-/star
-/partialdiff
-/A
-/B
-/C
-/D
-/E
-/F
-/G
-/H
-/I
-/J
-/K
-/L
-/M
-/N
-/O
-/P
-/Q
-/R
-/S
-/T
-/U
-/V
-/W
-/X
-/Y
-/Z
-/flat
-/natural
-/sharp
-/slurbelow
-/slurabove
-/lscript
-/a
-/b
-/c
-/d
-/e
-/f
-/g
-/h
-/i
-/j
-/k
-/l
-/m
-/n
-/o
-/p
-/q
-/r
-/s
-/t
-/u
-/v
-/w
-/x
-/y
-/z
-/dotlessi
-/dotlessj
-/weierstrass
-/vector
-/tie
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-/.notdef
-] def
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: PLMathItalic8-Italic
-%!PS-AdobeFont-1.0: PLMathItalic8-Italic 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 32857
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 556 156 0
-%%EndComments
-FontDirectory/PLMathItalic8-Italic known{/PLMathItalic8-Italic findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLMathItalic8-Italic)readonly def
-/FamilyName(PLMathItalic8)readonly def
-/Weight(Normal)readonly def
-/isFixedPitch false def
-/ItalicAngle -14.0362 def
-/UnderlinePosition -117 def
-/UnderlineThickness 36 def
-end readonly def
-/FontName /PLMathItalic8-Italic def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF13E7A26E167F6FFBFA02D201035C41858D1C9BC3
-C5482BBD107AB18A030FF0012B4F80F35E3B5F2DACDA8DA3AF61CA4B9D6F97CA
-640BBDA51C5EE4608B0BA41E06E5531A75A3AA83454901AD3EB84A39DDF29139
-7F4CC0CDC03202665FB60DB649BF152427838B7192CEC676AA2A0DA9BFFBCDE5
-69E48508484670CC75B5E5A534E17E0D46EE7ADB21AD5F8B433A001279D54FE4
-66730968D8DD7CB05F42ED6EA3D86C6AE6B21B3D3BAB9E27B9C46721A475898F
-4D9018FBA3FBD95F754DB80DC5375CE15B229DFF01A6DDE71F29724C41749179
-4CE2CF23B2549F1CDB2F992C900FFF4C58A50D89FE2AF87DB2A40D86C13DE9A6
-DCB1AB47B273AC768471B1A5380A8F13E35DC0B4F61C2BE6C7AF6DA740B3B420
-5A3D3E5905EB628EF58212420084AA1A390A401A8701AA5695E99C908FE7FAEF
-78B5907B740869BB38525FEF89E5722C9472D7CB53F3FC4F591BFE0EA1D08956
-FA78F7FBBFD715357EDD7E5EB84721E202AF56F3070434199E1D6FA71F8A4F04
-8F596C8FED02A5A88A1F78A913B92D132586C1F3194CF55F2391CC65E4E12E7C
-30BE87678550213E4DE8F527B408B31E72EF7F0A034A2747CEC6361673853B40
-7F1D4B66DAA509D22557BF3DD658B4F36A3A075BCB8A96755A83EBE33291F877
-660ACD6274EF96757CB7515036BA88A9CF8E77ED0BB6C17C9D6EEDEB6D7314B5
-287EA4EA33AA18387EEA867CA0FE208A8BDE6D679508976F7928EA84F2908126
-264AE8A399DDE7F4450988622D3E319964895143AB13FD85097FA3DDF76971E2
-22E7911257FF4F9C32D68C0F195D4E90424FC1557A18DF1795A8D9BEB3D7B313
-392D40D1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLRoman8-Italic
-%!PS-AdobeFont-1.0: PLRoman8-Italic 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 37745
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 556 156 0
-%%EndComments
-FontDirectory/PLRoman8-Italic known{/PLRoman8-Italic findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLRoman8-Italic)readonly def
-/FamilyName(PLRoman8)readonly def
-/Weight(Normal)readonly def
-/isFixedPitch false def
-/ItalicAngle -14.0362 def
-/UnderlinePosition -117 def
-/UnderlineThickness 36 def
-end readonly def
-/FontName /PLRoman8-Italic def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-45 -260 1200 921}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF13E7A26E167F6FFBFA02D201035C41858D1C9BC3
-C5482BBD107AB18A030D1E9CF347E4CDD7792FCA72747568EBACDBEE0242F654
-2AA61AF9420834407706CF33F36FDB9BB8C0BCA09E3E0D3EDB9711AAB89ED3CE
-DE5BAC9EA97ED8B2AA2EC5B0FD8F60EBF836328FB19ECF23F73D72DA42C48CEA
-7E403A5DB5841637E35178A7D1E2250CE208FB9A0CE583F9BB5F242D0D9FE5EC
-48A88EF14F534F65A1A06E03D2812E5E90B5EF2EB39962F6DE24669519B26087
-92FA2BADFFB2E71E2884959C9FCE35D20D2FAC51AE938CAA2DC481B16CA80385
-6153A79977CF168D27AC23AF5C9F5A5C699DB568890CB86800CE46D2B9A95E8A
-8FA33D57532065B43FE92134F20207B4D72A1EE997D34C8AE59813E246D2B0AE
-2002DEB3A16A92F234CF7B44A58B63AFE598C36853E0D56F000D1659799D7487
-0F9FAFD22BD2ADDE02B5705B5F8F86CAB54A5E5135A88B05136C106FE7784BF3
-43039C49B39B0B7A38728EE401FC15B57643B5BAB4968AC4965F27BF8327C9FE
-55B586D057A5B67F9729789DDC5C6C5A4AC9E21CE0ACF1C02A9B72F3C264E021
-FD054E895299785FF6190EF689DDCB6281B496A3FBEAF9140B86917135468FE0
-06F159D3299B384C346A8C02EB51E908376F7B54992F9DFD820D91DB7016505A
-8DF7F307E7A7E8E64841163AB3E1550DE6141FECE531A950C0A07C88F66C2C6D
-8FDE6D0A0D2512D7931EBC886B052717039570A75CB813B767EF3F6E157210A3
-A46A4A30114F032BA029D8207A52E17904D85DF0A7D9E501B59E4B817D6632F1
-77624C7B256530D4492AE7E4E3CBA90F50E8BAF9435EBFD205E6A62F64EF5974
-CD8E25A6906CAC83605B885C22BDD36FA9C48822F17C1071C0C7FC963342019A
-CD959A8ADEBD17C734D458EF614EF1A550F5879209A327816D66B7BCEDBE1DD0
-B5D560DF7DDC6F3E2CC8DDD94C94EF3D27DD71FBE170C8BE4617BDFA87FDE559
-AD552CFC1E5BC2A9EC89E2F197EA7A34DD83662671BD7F31FD232892A1E58878
-B389013A404C98354BF71E103BE4CE2C7181C69E5F95299EE164A740C1CCCA57
-C467DCD70275FABB0DFF9F8F1AD8AD4198DB878C3AD7CB78118E12A771959CF7
-86275EFF05A5288B4C2C7246386BFEA0B225EDD48F17DD3B54687CA515946C04
-611860F426EC3524C5FAE321B5F9FC78F1BCA9E33E21B50F40E3C37B9F9218D1
-DA2E3C6CFA4065F1A60674A6AB6C7FDE5DE8D5E4FB54155696745FE9B404D672
-492F4032F57316FB5AD3274C504FE924AC9063FF90376483C8647FD30CB62763
-F54165BF4263C2F43AB0EEAB3455B2CD9E6F785385C62EEAD35229EEB3718DBE
-0BC2EA0E63FD8AE3A2A4D72613E494716E01A9C7FBC41B9657385B3FE17C4EFB
-060F260AED6A623A639302FDEF4479EDFD9D47DAE05320FD1665794C567AFE7B
-58DF5A12CE50929D7B689BB81F7FA6C8645AD007458A277A9522BBF8BDD6175D
-EFE417F9C20DB9E80D69DF85AD1860901078C3FC53973E6829973B91B589C727
-05D0809BEC5D74611E49F8C76750BBB8F02ABD2DAA5B7A19BFFD1A04AC79CBED
-22D9A06E0D1013682B37DB1677ACDCD9C2C882B7BF79F5205F1FB7FECE186716
-2276D9CF4FC6DA7C463439B10D45C7D718949C66133B2CA8FEE89B66CAD26C84
-0798B31828EA8305FCC34415D565A241C970E47BC3F1C212B287568149F82292
-BB2DF12C1167E57C0BEBA7DEF44EDE70A2C55D4595E79DBCC5B6E4A3D8B685AB
-4B86A76260FEFE2CDE336C126BA223FA9F4B4CD364EE74452FDD69F69B69D8C1
-2007F62E80F13AA8F974B0E2D06CDD42E9B61FDC3B182449627810C93DBA6928
-3F0AF62704F47A967543D5331E935F94F2A58AA9394588881EF3502D264C81E2
-8A7E1B43265201F1B4C49A4EE76448D1CD1F48A8C01E28CB26E9AD37F59724E1
-9678A61445AD43374C6120A959A130EBE4E6566F00C1CA18C6FCBB397BE77F6C
-D0D633F95DDB27AA84711729B172ABCA93F2DEF59ECB621657FFDDF7395F8F23
-C8E2542FD282E76CC78FA320C1B249F51DEA3CB819EFFAF581E60EA5C9AFA0FE
-4348A0795B5A19537D568479C2CE392D8D5A1351531B298ED4B7DAF343114351
-01EEE86C77968293FEF7E667094888C4727B20698DA61FCA950CF774154BA653
-D5C26C224A560EE958725486FC899905CAF450F44198BA633D8639980EA7B220
-89247B9C3121BF1C0C1DD432FB523701060720730E9F51B76319D37980604F92
-E34598BDF81A3E2F8FEDA1187CA50F9236EDE39D157842BB99697A6908A49996
-02AE079A8B885AF93A5FE8B9A960C247807DD37A497D2622D848CA434C1BE615
-232A94F9D254AC9D9D4414C706E17FE6E313E2F73FED61DAAF687478A220CE96
-C89872D795D3BB3ECAE68C984F09636A149C022F4127F2E220714F4C46B51A77
-C19C9BDB44260EAC4D5D177CF6626A3EBD6025E8C4BFB074BD852EBE2A2D4B20
-656E378DF6727113FC2E4411972F265753772EC845BD8AF84289F92E00FF084E
-E23E1FDDBF92EAF6FFE8906B8442503E051275D93D41906A7A3990A637102730
-53DED37849C52D39779DAAF3AFD572A41A40D45D3F9B39005F8424ADEC822FA4
-6DBAFD4C80195448F613F24FB2C27402DA065FACEA0325A339CE2380AC4E3068
-F6E707516D38B690DF71AD0E8C35C4924D7129C419343DBDDB85ED1890F76404
-1509A21551866BFFFA6C78B414051129C72D0E315C84144B2966F72FDA22367B
-D243EF56A477B3DFBCC8AF7B6FB67E620200B215C8EAAAC52FF900289981316B
-C60E07B9A6F340CFF8CFFECBB8575DDAB8AF935881AEC6F0F7D866C1E6AADEC9
-1C8E901CD09E8CE73723AFC16BFA3EE6659849D3E05EB1CD20E45CF7C5636E95
-F2E7746600B1A247D3742F9A57BFFC2AAD5303AB20085A3110AC1CC2B7560852
-01DBDB06D7B6548E29F5307474F9F6EA10BD205FABE4465EE49B1CB1F4719F2D
-B45D11CF0F4808BBC4AEA4881748C0A2F1F9A03CCD801AEBB0EC68A78F6911E3
-6E12E02ECF7E9DDCC72C99BA46D8765468462B9AADD9F877A33AE08A7D848E5E
-B3F2831DF3DAB63CD24527A0A6E70944211C590B86E3F769D89C49BC776AEF6F
-84543FE1C546870C54BAD8FE049E4A91AC3AEA0D87D744E223D4CF6B54BDBAAD
-227763C2D8905E71628EA34AE453661179B0452AC0110490592564A451C9C2B5
-E8F3395CC1A4FC913C9166EE6B800104F28BEE3DF01BA22C5AFDBEB963177665
-6663828AF4AFADF09D8FCC025ECA483CDF75579CD24CCB5A013B13B4687A026D
-5829C885EF20E05E4D2069E117E0F85D66D2E881213E1819D30DF615DE4EAA4D
-1CFDE17373D85C7687ABC96B7AEAB6E230A511B0A95F0F111CDB9FC398A1F3B0
-FC6A85426E37C3B5EE1F629FAF9AA74DA6519EE828AEFE628891BBD83835BD4D
-BEE58B6B05801B1C94FCC20CD390495FD1D4A6D9421FBE64D4348497FCA9D5A1
-1B332C9F58FAE22D7A20FDC5A20D73CEB95EAF8A8F1512C407DE6B07852122DE
-62F98D8CAAECD64C1FC9FDFF9626E1600A56A061E2A9833070D949B1C539E42B
-4733842C69D117D2B58AE4D908FF904C71696A34C1610AA6982BC8E4D52C7D25
-D2FA3E9BF80185399BC5C251127B6C69556B9279FC9194E2846675A21436F963
-54CB97418729B8EBB94FF5664A8B29A0787F92A9B74D1DEB5E6ADCA4454CEDD2
-0F053780BC224C7246CD134F47B25ACA5AA08B431BD2315157C36611705DF0DE
-767FE9B0BF9E20989C124A54C79C77032B8514408528B970BE27C739F5308A5C
-440E8ED21BEA735122C136EE3E634BB7968281E22133A947416DA2238038CC14
-7146AAF2ED1D90FDF92AC9F25075CE7D76366B5B28AEBBC239980A38968FF9B8
-15E5DC93846CCC8A07CED3567C467E54790062892C274817774286E395ADE505
-3A4951FEE70FEB9CB1F837A1295CED4E933130C8750760B559F45B22D7C27E3C
-6583E51C894211DA5115B186FC14F401766C7591C5E01F1924741FB1F4063CEC
-627363559A53BFC7CC1CBDAE2D8231BB7CD198E97C7594F32ACB35C58A28CD0F
-CA766E49BD7D5717316BC685BD9F0481E4637B1CD7102E1C4CB48B75AE681984
-ED9CA2AC0845C47C4CED4B587C18D106959EBBD9B874FAD6E18EF539137A54C6
-C787E1B5D5F3ACB77B13DB27D871503CB5DAA2E395B4BF897509D5306D0FC936
-8EFBC24A135F07A2C28AE26A6E32E5C8D3A9A09C3F1EE0C18FAB75843EEC7B5D
-A65F61997FD9CCAF17118850F74EB98D5EA6D66D7BD2551678F5EF0231543C5F
-8EC4F703B17276912A1EBBC4BC66DC598F6F5B4953BB6790B900677E94056D90
-F65DF04CD94D395C28EEA275244C1047D178DDBAF6E0971324F72468AA5AD6D1
-3FFC9C6F679A412BBBC86A1FE55F5369B12A058513319619B0C5870276265C79
-5C55AE4E6C07855A9BC2FBF179869D8FC843020887F3103FFDADD38034D8F34E
-BA9CC74D233E20BBCD42F78C46D62EC4BE01C5454E032466231D3B7E999C1166
-890D3F5F644F8AFCC6540A50ED46346EC80B6171119377D458D193B1F81EA3BB
-72234EDDC8234B8620A78AD003F279A4B22246BEF2149C36EB3FD38729F6E875
-67247A57B89115DB90A7C0C4F0CDA620A1B77304C21C3648550D2F2750F258AA
-E40AB8D6B13DC41FFCEA039BF45BC9436FA8D61435C7A68AA72F30E27B5BA2F7
-BFE00578BB6C18A3DB61A9E84B41CC5A6F4F561D37DACDEA2AE6C8D0C05364A1
-410F300809B64B66CB87A567BEBE883B9D0923B4D2D583FF42B048E68C069BF6
-CB92D44DA5D39CD4D2B1F245E01C1F36626E3819E7DCBA9450A2BBF0324CA6EE
-EEE7B4FA88BA66620BB08F65A08BF76C5EBD69FFF5A9A7B1874BC65B1F468763
-282BC437C335BF2645040109A3D2D98CB563D4CEB5C030A7D2F2834679DE74EF
-934E027649AC2EBE9AD41E8CE89D36560FCFF3F25B87B75D65CDB23CB54D3C26
-66ABBD1FD11820859189DD2064241C0568E46CEE6FD265E7112FDE545A510341
-6158931C0FCE0FC36E3939F2FAEA67C25E93CBFD63D7EC135192132941FCCB3E
-6C30276B14D1BC62CA9CDDED45AD603B12563F509005C3E1E1A60488C0FCDCEF
-F58ED64B88A852A32989A638052F6C72D13D031D72A93A103F2F0EA765A81AA2
-5830ED17BAA8AFAE51D0A8CDD7778027505E6F9D14DD64DD2D471FE06C928FB5
-09CEC6ECCC7A7C8B1E29AF07E83C804E8DC1B2DF754B713A660582EBB6337765
-08F4688432DBBB867EAEBB4D9F2113FDB414357A3C444B90AC3B8FB8D6683B17
-083469EE367CC1F13C2388C1E140DA4004919027257F2186CF716C6858D30E57
-18711C074A9C05A17C8B512E2767AA2880C8F5D39ED4026EFD3B57466FFBE533
-0AB6BC5E2CECD68B9981B2BEF1AED8D00A3AEEB5328A5436567D6AA32DF46C7E
-F465E963B3FEEDA9112932898719493BEC545829BC2C9C99BE09D7BBDAF95DC4
-09FB645CCFCEE8A7AEB1CDAEC087354CD5EFE743E5B9422B3CE88E98C37E3AF2
-22687DB9CF10CD88109B0AA050F06A64F75ADD796D0CFE51760C4C5E1684D5EA
-B3437D479FC45AA9E0DADA17371D616CC087DBA8854E4A1372610EF06A1FDFEA
-71D4347680EF8ADD88F630075746AE447896CF63F361505A235EAFD1ECF61B9C
-2F36F92CB169B0F5A9A943C39CFE18B2F8F92CD45B12481CDDD1FE7A73DC4D18
-1C5916886C28EF30DD36AF482F2E48AA56435A4BFC57904CDBA6BB2FBF209B96
-83DD7583FE4BC0A3A381305D2284B467A236251092352BBDE73D091175D2BF8F
-DC26D77EA9B7E64FA8DC43E91706ADA1B5B74DC9D0879EA696EC44E1564EDA61
-AAF453FADF6FE1F298A21A418194C741F4E7CA7334A4F4962901A65B01942F0D
-FB1AB2AD398ACB8D44D136FC64DBD90510A6669C729E62A007D77BFB4DE9C813
-B80BC78A2240D57BA12F612C7BDBA3119C40FFB6EE0B0A7D704ACD3F96E18104
-115DD13BCD1C2E70F8ADF9F258F9B24B13060D2ACE1428C729D0AC268F5A1543
-14142AA8C89BD3E40D837F715293BB155CE657EA499F1A8C14F631774D4713B2
-67DCE7C7BBAEDBD7CD236E6DD24FA08410678A21B3BBF0BCBA7603E5B58D38F2
-6480DC5660DFB6395E5A1C3C2E64E6DAE27DF8ED36E9F2844D17BBDC17761FDE
-A4E83449FBA11226394847D3626E1BDB596AD95090D12D0BA9D148144FF6BE4E
-63740580820644A352FBC02B408A9EE41D348535CAF92B0863EB7884B5232413
-A1820718E00C9812F53EAF068B7868CEB2A755FB3B3BB04BFA131CF5D3F2342B
-858D2D40789EB15ACE5239BAEE279192A9C7D6FA8FCA10770D0BF7B4A2965C18
-BA9ABC63573339592026E53A6CD6974A9A613C036C0AD32CED13619C79539574
-C2C49EDAF6067CFBF22F6916D5B77A57308E13B23854B5C1261209C1E74D6483
-9F40DBF229141445D90A48D0D3535BC38088A07A58FB49B4328E4EC85D1B9233
-0CBF0C7CD07E6C58CC5985D7940672239A9DF4942294E8F09D45931E357CC5C4
-AC86D3B4960EF4D2BA9A099494BCFB3CA0BAC086BD1E52D51937BEAB738C9314
-302716BBC93AD9D2BCF89C8057BDD69149DB83884CEA2635DF627DB30483F131
-52D70D8C762CD2C56D3FD45B8DAF3A92DDF8582E4A2427F78924276B949C5AF4
-8B4078A4F51CCB9B129C6ABC2285718515BFF83CFB393FB7C7565BB7DB2D92CE
-8627C44FB4744DC3BD466705D1674F79026A5413390B297A18699938EC1A8F6E
-B97C6E930E069B60BFFB4419BA888A1721E7F4003EBE0C1AA54B7A5E28939CFE
-0B8B4732BA2BF3A67FDB9F528328EAE9A7CBC78AB15228156D4C7E62BBFEFB8B
-D78EA8C0CCB1838661BDF29863CF48868E4DAE932E4333CC1A7CA904620CE247
-80821FA175B59A1454FAF223D2300F3433E424395B7666D7BD74A887D66B641C
-7C49B7EE92CD764794A5B6B11F82A0E5DD3C5AAD3E35EA216E34978C90A7487B
-D8EF92E8264C4F50CBB149C450E8450506E7411DD4D2C59F76850BE79F5E0824
-AFB0C0B6207D5084C6DB32B75A85C0AFC04D3EB56A5D9D444D86174C0218E551
-9469BBFD2D82446C8A21EC7EB7196D50926443AE6281A9355BE10820960B091B
-5668527F349ABFBFDEF66D1BF9B945C979CC4B65A45A94F541305239D5D8F30C
-D234127F01D8D61246C24DF667A295744EF0B8EA9FBD304E1E27C5051E037AA4
-D77A8E8E3827BF5E3C70DE472A518BFD42CF72C4E13C4F95283393CE1604AB8B
-5D705952F36DD07E02D59FFE71F34624FCC4DF36D0F728385494B14C7B748E5F
-A8B10FFCEF5BF984CAA3BA3F907BF371C93EB43E4EE1B52986E76333A3F14901
-57CAB27F7B6949C334F264FDC984EFCB4556AE252DD5FFB101E93FAAEF0947A7
-A47A99930382ABD4D063AAB0AA041D01C2D94C190F7D4D7C7601E876471D92D2
-873049D8725885159C3AB513A0990521CFB725ADE116A6A2AC6810281F5A947A
-AD2DD7B8D84256FEFAFD5A05D414822B03FEBABAE8D7B4BDFFBD09F0D116CEFA
-8552A3D42750DD847D0C74CF8DB33CE4751B3CB1ACAA32BE5B32D39FBCF191F9
-9E588B8641909F6D22740CABE131CC78D088CD1937803753EFDA1449048B6917
-9D7554B3852ECD601A2773A1CAB7FCDF1AB101339FCDC29A06EEB427BA2B98B5
-B936FDEFAC99ED1AB910FF57513810347F3666952CABA5F90399BF95605A9630
-326E797CCFED22AE46D4748E7FEA347B82BC54EE49007DCF8453E70E9C467C96
-614BAE985EB8A9FA84AEB969B7F926C5A2B064F8B9893507EA6F80D6AEF3DF76
-9A848B2D9F368024FD53F0DA543F17ED079C706BE055D5BBBDE07A54828FA8CF
-677D43401C0FDD9DCF86920A8040F5DC5BC5E1657467D66D7806B3537A67E8FF
-D0C9C4AD9075AD7627243290CFF8300E9824519B9C9E94652FA7FFA93AB927EF
-159E3E6183DC2EFA2E2FE117BCB2A266AC3EC93019896D3F2F68C88CF24D6227
-AE1634A97A5D958F9D77781BFEE185040DD38CB013B32D31427E55C8955F245C
-83CE0DA87FB967246B36760935408B2CBC6B79E27F4EFEF8717069EBD41DE4F7
-841C635BE7F699871AEC19945CAB00903F6962CE242C3D546DF7F15DBA8728D4
-3A90F268B8A110DC4C1EADBE597E2053A0BCAB20B94AAC4D77842A0C7FDEC69F
-B5136C6FA6AC1C6C96E982428FE49259CF59C3EFD4B13B3C916A0B6C972845E9
-2AF874E893BF8D781A1E08A805B4E07053751D068AD02E22F4D3742481796993
-AFDB2DB256A659FA327440561593F32AF46133C1C891528FD69665BF4CA5AF7C
-0ED51B5C7676131D082051CF3BB2567FD6F81880088B8E08E14471F850CBEE79
-1E7DAF21293FA5EE648E931FE9A408DD63D024A156EB3335F59BF86296D3229E
-B10E851BF39F89CB172354772F1994B5FC994DF1935EBBF328BCD06A5E17D1F2
-813C5128CA9800C1515C29A6B089AB8C3C87AAA2689482F4ACEED7D292610BA8
-EBB15DFDFE6CA8770519C27E643D619C8968D72FE5953A80CF3C34CCE7ECE90F
-090938C3B1F079EFA22A9B6DE86A14D1EE7BD88F02AD7B880B4D662EB60AAD48
-C71F9D9613A492CE9A57D44A0C1E3FCA240A0F49C57285C302455BEDBCC6F7E5
-F5363853AEE3EC6BC822ABC902A152AD0713F18FBAD4EF266B2542BF31414F7C
-FFB2F9FB9F14B0EA04698F8C6413784164B8B843CC6B86710167D09805BDBFA2
-B4520DD6108F9EFDEDC16D747800463BBE0FF7232003C1E05EAA6AC17AE757C9
-E7E82BA2C9E452C076B263342E8A698B78E34F711405A1CE29782544FC466E0C
-5FE8DDA7EBED8A8D5676590570D325D3EF003B1E7F041D57AF4332E0BDFABFD6
-926C0E971A463C05F828E36FC4FC068C1BCBAD1ADDC04CFEEC0E2A7842ACFB6A
-082DAA3A619F63166742DA29F8614799DF092A4B6B55B3E61281D4B9069972C3
-77A42603AD50375EF59633D3C9E1F8DE44AC9378E95DAF5EA171B0B19CDAD5DF
-3805AB169E7571990AFEB99F5A161670B389ABC0587892446DE3CB
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLMathSymbols6-Italic
-%!PS-AdobeFont-1.0: PLMathSymbols6-Italic 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 29885
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 417 117 0
-%%EndComments
-FontDirectory/PLMathSymbols6-Italic known{/PLMathSymbols6-Italic findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLMathSymbols6-Italic)readonly def
-/FamilyName(PLMathSymbols6)readonly def
-/Weight(Normal)readonly def
-/isFixedPitch false def
-/ItalicAngle -14.0362 def
-/UnderlinePosition -88 def
-/UnderlineThickness 31 def
-end readonly def
-/FontName /PLMathSymbols6-Italic def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF105BF4659ADEAF285B288B8C45EBB1C430ADC5E0
-55C153C58D0F07FB32132C3CEA11815265D39A20821F7A1A778738160578BCED
-399653EFF49CAC16EBD0B780A11C18E6966BE38184B550A4D69D69DB456B328E
-355FFDAA78C47EE83DAE72A4DB5A385052324763CDF9D67D462D1550C78C3AD8
-D5FF01E46EAFB7361C516DD8C71870BA0AEB8E6FEAB79E82D9CF94B9945492EC
-7526AAF2785529A98FD4A7EBB5F15BABC0619FBC49C907F07FEC8E23D3D35C71
-A304A01A695DD9119D8866D0A5DA72A216E9F80DABECA85A56CAAA79DC5E42A3
-CF4F1D171A6D50DB9BAE2F88130DF372B37A75D81089B6BEA6002C995ED468D4
-58AC20B9EEB2AAC85F82943BD9E77210E6753EA5604033D75954FC56CFE8EA07
-FAC26C11F80FFA3706A4BC08DD6698ABFD26B1E4EEB6AF0585C7CACED2867442
-F5FE4455978BDBA063C52E8210D675E198F88DAE125EAA7F5977208E4CD75D5B
-8AA2D56A3111A050E501FD978DBEC0E0DB9C4D5A1BB8A9E7BB776B37107CD588
-225511D4A92100290CDD8BF9315A05962616BDEF31DD007AC99947459D2F1279
-227E647DB37994441D207FC17B5F5127DFE683A18263F071BC1C3B8023F974E9
-CC07FF8D037BB5AF29F2B829D8492C7F0AE5DCB73E9D05B0E925556DC91B7102
-99C21C5E31B451DA322ABB2B59D887FE5E39FBCF94C05E6C67AD8A7BA2F9B635
-0B42115E8D0FF2000464A56568B9E97A96BEE20D96CECAE4ECA748C571175629
-C60F35CDB604A66EAD9D4D7AF66B53E3B0D41DFAEF96ABC838929DADBBBB98A5
-D8D52800C963E2EB8CE0D5878E65F40F5C91E7C887EC5F5B9EDFBA08700284C2
-967FE93F346CA2AEC93EF3F1BF3095A56723F43FB389AE8189C08570A68FE01C
-5F07EEF6ED05C4B4AC9D3E266A606F4C5D44CB71BDF55943069923A29BCC9632
-FB5F15E1D2E733FFB930FB
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLRoman6-Regular
-%!PS-AdobeFont-1.0: PLRoman6-Regular 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 31499
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 417 117 0
-%%EndComments
-FontDirectory/PLRoman6-Regular known{/PLRoman6-Regular findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLRoman6-Regular)readonly def
-/FamilyName(PLRoman6)readonly def
-/Weight(Normal)readonly def
-/isFixedPitch false def
-/ItalicAngle 0 def
-/UnderlinePosition -88 def
-/UnderlineThickness 31 def
-end readonly def
-/FontName /PLRoman6-Regular def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-30 -260 1203 929}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF13E7A26E167F6FFBFA02D201035C41858D1C9BC3
-C5482BBAFCF7DF8061B51863FDE697437824573E60CC3736B77D96B9B17F4AC2
-4CCBC0394C27774C26FC66F04993D0E73F619503565343C1E03ED8880A14A7A8
-E686CEAF12D18FB2C70E54D7C524923386E488A5781001B47276F3CCB8173466
-544141F99FD85B6BCEAD8A7E1294BA184AC78C372F2E5B85E8AA15AFEA2A77F2
-C42E7590A246BE66D35D32B78F084C348A79FBBBE7B6F9567C3EA4B3B0C1CEC5
-A3DE0E36448F8C66F8992474EA20D179439C30FE7793746A258FD1F1A3714F39
-A0CAFC38273B74534DB852131FB30B383E6EDFFBCC308B14442B86C8109777EB
-79B6A3CA593C194FA43AC76959392665CB4B80FF1F4F14FF499E92D1E25C217C
-45FC5A535E0B2C2EFF0BB3EBFF84387DC0AE48D3EBCF5E702DC09298FCC1C222
-93A666201A11EF320BFFC01CBAA10C0032682C8E1E263214B80D797AB7E393E4
-6E5CEF5EDBD37618D2877E34F59F794BAF7859558C79871830A4581AB3426B88
-8F236D57DB2F5A50B37FDDFA61F635DF10C313E5AA3FD101F7027BE6C68A1C05
-0AD00D19CFEBF7C899CB6DC0F30CF38F782C94DA1B1B82FD8797EEEB29846B6D
-B84DEFD0C7F2FBD86CA8D87CB293347A95C4C462D94D7EE9B4862F04FC79F789
-D849F04C06573FF3B1C6FC0878C36954AD758A7C7BE59C3BAA712A0A56D9636B
-628138797772C16BE5309CF91E7B9440BC8CE2D95FA1D8388E21499C6652666A
-ADBC2FDF3E1CE2670000924D3BAE8E782777B037B0FBA022555B0FCC1421A0B6
-60B7381809F7FAD8EA305C71530FD9173A18E079156D95730D32EFEA3D477C04
-33ADAD9AA04C4B6A9E56344507DFC06D2EDBB23894BC719D68C21A6625E48518
-D2E33F8722EFDDB4D5DBE2E0970EF2443D4FB7D4CCC38EF2E093AA45402FBA7E
-8BD0AF96F2879BC2589DAC396A5021C1E4B35D1557349F9FE0789CDA8E35CE25
-242ADA516CBCC69635AC49A6314CC3471A1E5C9B1012DD10AE3C3B7E657D2664
-3C179C5027423D11BB023866AEF1C65E4B9824DE0908EF0E20A590BB9F5F6771
-2F9876FCA3999A6012F079C3B17D769B11BD0CA1828AC72035B1A79E19FFD9BD
-6CC4B15B5D0941AD7281D9031F89B9FE8AEA4A19EA669736C5200BF5CFE04FD3
-CE304CDED06A21C9C5BF3BCCEAD202AABA714B46E92CB87B16FCFB51D3FBC0B1
-1D69B7A4205E5112E125D2C497D8570BC5E87D6778490596F4940117DC761D3A
-97CBE3B1CDA706CB838573AF0FBCFF9C486793D5365A31053B30E0134A36E6C2
-BE8BFCA2D3368D88A5F72194EDB068A98AF034999E0789E20ECC77E4254A48E5
-1F7B432276DD279E64CB13662ABAE3C26C582E056B4745BA43CC844A757BEDCD
-010C20E025BE688F21AE393E7871517F2763CB1AA124E99BA0DA7ED9CFBBC177
-88CAD36269D9C5CB3AF26542BD43D588B6F544B8474C62E7FF2F07AED1A46A2C
-4B6084E497A4AC42D3780891731205F0348F536FC68936CF4FB684A2111EAC01
-72A53CBF5E879256D282F71F697D6DC6406131859F597CFBA4AF83394B6E823A
-B1D4A0B2C6DC5E8457B0E4C4A1E24848EDCCD19203080563B710920DD1110838
-994AEABFD1F0A5CC1318F776F9E59C1CE71334AFF1063D3B9878FEB884628827
-508D628FB3DD5AEE9A5661A5AB0139014FD7DB850346A689C3C990955AB1514A
-A37B2E33A610A1CF47FDE04D16FB56FEA578E6EA001C8428FC9C353C5A905B8A
-7C6E81B91108662E1ADE69CEB9E0C0C556B4B26BD677A4621CBA130FB1FBDD15
-FB65955F91EC0E4F9DC9D476485541083B58C378548EFE328BDD6D891C0B3D31
-9B71970E28F8DF280A2A3A9866E3258026116132692ADB296DD96ABC023742AB
-30C275A5059488787C530B85035A763F0DB28FFB7321EDFD7A84F196628CDD52
-B063FCD64976B2AC1BFF25343E48ACE0BCBFA4B17022F2B11490CEC6D844E86A
-25B597E0D475F3E0D6B62CFC70432170E2686EFC8E6DB6980D032F02ABD4F665
-7F1748F28CBE526D90398D3840182F35ECB41A03FBEDB4CA29BC51FB2BC0C62C
-E1B3FEE159A7BD1E785256B4388BE0BFDE518C3F79BA7B78FB84A3503225F146
-F9EC2A3CA0D004E35A76A3BA7B6029658F403669F2A0B5B0442BDB988DEEADCE
-82A145DEB68E18C538386C106D7BC88FBC1BF6544BF1CF40D0743BEC6FD3F826
-8D35B9176DB4F005D0FFD58FA4E07973DCDA6D7D1987934FF0D9EAC98DDF62C6
-AFDD8562D9AB60C61C32F507498352491141C005CBD6D61CDFF743D17BFEC0EC
-F5A0965FFF31D1ECE140A551EA602DAD6ECA806E9B5A0507CA54A84EE6427B86
-9046F1FD661720BD6740644A4F3BBA13278D94471F64ED8C9CAE4858366308A3
-36FFEA30517E49CD61EF344BC4DEF12AA87F0286ADDEB69705B9040340730498
-38C0DB7719CAE2A9C25076D8F5BBA7D5D4F8C596AB3BA23B48D55E673B605916
-4C4176234C61159EE24F2A6688EB74F71080636B595CCD064AAEC0CE876604D7
-6978B921AAF1168D074B2A4751C3D7C2325BEC85DF280B33285E09F25E70C469
-EA88A87CD621D3188F769B8C216D755770CA38652BF04D68761F0607FC7926C0
-D4BFFC5A4E0CB32F86CEB100C0B2DEEC22EF1EA53EBC7340D1A093ACFEC2A465
-DE64C6AE6FBCFBD9E90FDB327A6F347B37A005A4FF777167798B100F7BCAC11A
-ACF31A73C50873D3A1BAE46960D9DB146C951E9A23B49AC5B25B8487DA55B0AF
-AC54946C49BA7E773D6DEE7B2DFBD99274A8D23022ED4E29CB1BCDDC57296986
-480ECA084610D96BEDA842C9B8077E11797AC484450C17CEEFBD33397D848DCE
-D0BAB94724D3763B650F5F47AC924381F4BC6284F9E08A88C7895443D35056EC
-AD9AD3220CF58421DACCB1AEEFA5C7D4801D93C0FA7D9B51E99DE115C0F9B3CB
-6C42075E45072A114EBAC0B0F263ACEDD95A8F5D15D1339193DA369A7559BE85
-5EDE27C68AC4D888DE5F8D2B1B99B73FFEA315EA7D65D1F72AF063A629672D29
-8245D1F9672DD68961C1734BE891551CD993623082824CCB8A5983236B4DFB3D
-13C02D26B27665126BC84955402CE2D267B6F66D9465907BB3E7B2C75010F3B5
-82CEC1C97B589ACB1CF67CF762DFB0D3C65F14C6DA2BF9A875C34881E0AA0039
-3CCF1E3E7A2D1E1FA8C115059A69852439F8D31D2BB63458E0DA6D150968330F
-D6B8572443E10B01EEB0EAEDF433870C0523C32B54CC3864C25766B80E644F7A
-B7A74F91EAFF38CFEC6599D538100BAC4FCA3E575EB48CC65069D163D255AB56
-8A79706C0986E691E67A210377B13F2AE0CF71B34ED649C025A8BA6CF7C24249
-DA6D1369433C427EBFC14C67EC12ECA650670FDC930AC97A6B2449412EC60294
-905A3D1540EEC68747915A3F49482FBEAD4031D9AB6265FB6BB647FD9FD95E0A
-202A48C35320B04790905077BBAC170BE3529EB55B908CAE4B8F60D73C15112F
-317F4843C0116C8D26D271791695B51CD354B5D7D42743FA494262DF3BA47E66
-E3B8932289192BA7E030922609E03905B37E88EDFA25F24D7F07B8F5C90D04C2
-C97A7301BC5B442634F12D8DC7016FE2C013C913AFE54049D17EEC1EF32A3EE7
-6AADE218DACCEAD910D8B8B12DD40FA60319B227A4036874EDF770CFBE8E7394
-FC4DF8CB692AABF163D6EC83D30125CCE76F945F97E6222A2C93284D0F8519F2
-06FB95AEA6BB102FEF09C25D849D8D5F67C547A48937B3ED6932CB31DA99306C
-B9C02D13FF96CA0551022065DDC6D2FE07D0F2E33023013BE175CA87C5ADB9AD
-43927837F9B1F1BDF714B7D49B81029800D533B972431F4B6DBBAC79996B5882
-558441EB3370DBAAF0D5886161562831CD23DEC40E6264A2DF4B991069CDA2F8
-50B1937C6C12E5209E30C31648EDCC4ECD6472B9775021FBB6FB5527933E64E3
-112DEBB7E8167B9C10C491F14B92DD07838BC18D124357B24AB26A44B6FAB103
-7FB0997B367483D2C8C0D44E6111CEE2EC3CFCBBF060F416C0B747EC5BA54AA7
-43154084CCBE5AA960C4D1E2BCE002794741AE799F0F745B1DD6551E9DBDCC57
-51105F1B452FA8039841AC003F10F851BE565F93622832E97BB688798FC7719E
-47EEE2B94EBC03B2A99FB0444CE1B96775CE4E17444833DED69B16D0891B957E
-ADEA9B8B7B0371B5B6C525461A1B0B47B72EF158C0B8DAA61EBBD2FE4DC35FA9
-45B109E02BC9D0CA8F2F54C1BB773553E69D68E57589A437A6CFF712A5A5B775
-02E567EF0D7673C78E33FB53B8936DF55D655D394055FFCD33242AA55F5D8015
-9ED5927999DAFBE4260C95B2F05CB540672D9D294A026D04F0CF049DFA74A19F
-38BB8A746DD4976CA2B53DB31F06594B8F0A30BE859B28D6233AFBABF86E04F0
-5D4AEAE6015371E5849E2A375D979859ACBC25317F24F583F59256C1E1ED8B2C
-0334D571CECF2B4C3E28198796D327C21664F97C2F417CE0B2E60E577E946DD3
-624ADD58869960793856E257249D7E2F2A9CF549FC7625360FA022F2F055ACBC
-7A816C359AD64C6D3F146C93724A08324ED1CE7C8D3DA3C710044C03A37A680D
-1F806296BBF942428F43DFC6E9A7B5EDA26186578223C50EB478AC4131E851E4
-AAC8A0CDC05E45D59FF3D05CCA1DD7DF9A1E17C0D953F9F160F20D43269F7171
-E9320C26306F91514C90644046B293912B31CAF9FDDDBE3FBC8272FF827B677E
-CADAF295574EBED60685F10EAE1ED416C434625304D404E9A2F1002341AC2775
-0FA1CF1A994E99B20E46E76DAA92E985B513F344F9F14DD6715944830B4437CF
-D732AE81782ADB85BEC5D81E544D200A0A4823E767182192913C1B26358408A8
-3A7EDE5AB7FF3C65ABF6352258235890D5C8FFC972EBAFDC88074933F8A7D31F
-42B0F25BD659CA9E620284261237BFF4891BA7A769C5741FBEA4FB1A36D8FEFE
-EB12B472EC3A7899D9CA6D40BA17195C8530C373FDCD38877ECD01B39D57A632
-5FFBC5C4A8FFAE0D6B8EDCC9FD98FEEF4273560C8E4BBB51F39470098ACF4BEF
-68F3473D994D9CD04A768FD883B762EF29ECBB0113B85E9EEE582D062693DF8E
-223CDD15B8B185AA9778398144A77B1CEA2158DF6A2F31E70EAA93FBC1368DED
-01FD932B6B55E0AABE2DC95CA8033A3F755FBB8515426BB432CB6210B93F60CF
-A4478149856413B86B4B6F6343FB1E1C57436E6E45DAC8CDF772C0065EF634DC
-A076DD7A4137FC6C9BCC6182DF2C5346B526B1E178D16C6D2C47179F35919B74
-552FE1F7A0185C5AB94D3452AAAE1AF13B4929C91D710393EFB379209FE16ED2
-175265D14F360C6488E18A8C0973844C950B9BDA89959372A2D1D83ADEB80887
-AD84C2E2099F73A2E468110AAB2BC8367161DF44E4B8EEAEEBB91C50FD3E067E
-BB629F83EDCC2D659B3FF757B1D1CD9D256FAE1A2E9ACFC032BA9F411D5BE7BA
-35B34EB84BD59C8FC9005C544BC83CFE7F062423EEC29B326C19A0684DBBCF44
-FEAF613BE20321AF7D1CA940090DB58920B9219284D91DA3BD4CCB8DB367464F
-CC848329BCBE84245A4B5E96BA2200F2CA72A28E2D8B37EB1309FD6C6F51D89C
-16AAB4DC27CD99AC7D748CFC6CDB1BCD36CFB0020B11D1CCC9186C1571D50641
-31D888349947B448513C7E832EB9F35B28EF86C2313AC9C9D795E8419F8391DE
-31E82F5EAAA4A6474A598FAADF2F5BBADBD7460804D71371C1358E7EB05B2A2A
-871DBB24797F62063F8E28DBF7B4B6C2BE6916D5E7DABC3DD8447B926452AFF6
-B12970869D2816CAABFB163DE7D75B530B2F873CF5039B0594D1CD925DDCC24B
-CF772AF6E8BC64819469293A064442141A4D01526C93C55879A8EA0224911F07
-28FB73B1C2DF58F5D22984E6BBC957E31B7641D701115B694EE342F8362C571A
-7C31BDC1C6F2611B5337EA2F3A34AD00EA8287694838776068268A7E27B3AED8
-75F2D2745418BEF0E6DB6834777CD3B07F91EDACA9CBFED80FF429114EA8CA10
-2F52A894B559D32FD8113D33FD627F1A45160C6A78F9BBCD9F863EB98DAAE397
-E4EB52EC153DCD51E0A00C801F30D092FC6BA87A44335CBB48C9B5753D6BC5B8
-8419A6836646059BC1DCB1EA3B8DA7C513787F4347FFAABFA9652CE7053CECDC
-C6C6F581C821188EA33AE262BFE594DC5FB9A68831E34C847BB9A76D0CFAC87E
-EE89512A909C311F76C628F8AF9CAF3B3B0ECF287887C4B60AAAA76F4AEABBC4
-621A77FCEF79ED2BA0F97CDB6BA9B9A5A15750E281F613D5284F9140DDC10F6B
-F04EF552B9187C731E917E010E60D7FFF8DEFB90AD524F270AE546A0AEDAF2C3
-BA43D4F55F4E43F0D499183588A932010DB5B286081C496D7F8CEF80B726CDF7
-FF55F0110BBB7B370F4FD868249CB0A96BB35ACD1B69919F6A28087C29ABB361
-D74A9DA9BBE01D0385CC0754152E15F6E53740A5FB455B31C42939D360C9EE75
-0717CD14C8540D83BFAC01AA395F4D7000D5CED4AA191BBC3C3547A7BB582977
-AD2018357C46CDE56AE5478758A21952A9BD4C969BC4732A952FDE70391DDF69
-E53FE2E16F3128E1B32287D17243011EECC2AD462977FB0771947CA2A87CCEE7
-B70DA51DA910206FB93D1B7DDB787D23897AC0E155460E177146D39F2BA87373
-D13F599A3156967062C3C04ADA4014CA1D5291979ECBDEEB9E652324E3DFA14C
-7B11FBE5732DF381D10A7A32DEC9B4B33F474E68659BA1F7A32F692CC2A9E1FA
-963B96FEDCDE7AF353F5ED557EB63E7EB6BE5B31CE1626D8F34E8C78819D0B21
-C94D04333C03631BFC1F7D3595B6E8E8087F344789BA3D658BD459635EF190C6
-FD931CC6DC432F6B38EC25928BD5D29F481F21D3FD13850E219373D4B6A52BC8
-43442D216D3FE1A19DD68FC05C20255ED677A3DB7473E418014AD6941290855E
-E4C7FF49F8DD752EB19D171C1274A67153A226EB2AF74471396DB48A3605B32B
-D19D050841E3E32E22AA1B1D0119C51B47D45281B1A3D03D82A218C62B4183D5
-2096ADFB3682BC7B26D4FCE4353868086E257D832A76958E158640B120A04E4C
-0EDC9D66F1293445DD5E2AEFEFD4058EF3F525632A2FCC77AE0E06BA10C51B14
-2DA96B923EEE3F41B4A98E71FCE292F152ED6D670C32B244091E7AB728E87FA7
-2C5A49782F144DD9F5D7E85F87DB15A99803740BF5804BA18EAAFBE7CB36B461
-235BDC39B2A789EBC437319730EE11F7DAE6F263D7AC0BCCC7E4607A3CD013FA
-812A39E719528B8DCC8C1ABE18CD34DB785FE2F795E37BF5486BBB6F8662EDF2
-95863DBD3BA73FE26B7C38103E7AC4E1B04CB130EB34CF798E1D1FA9A365E0D5
-1D12FEDF4F2FE8DBC0404B5E809F3625D2A8EB83FCB7D0386523100A573CE1BA
-4D1C88D22C94CF7B542DAABEA1A79D0AC4739FBE423236C2CCB8A22A4D6A751B
-561E24DF2B9D64684E50A32226D2458EB5C828D74D5441EB4F6211D7E3D646E5
-C5B87214B0413FEB6A66F251B1BF0DD7E83EB7A58864E7C93BF27AA1BD0DD1AE
-226A4A908C81BE54AF8C43ABFE8C9C88AD7F724F43A7D85B6A43EB40D93B3A8B
-8CC745EFCC2153CF4C9A6583D885733AAE5EE1D55E1D182907488A48EDC74ECA
-B0303336F2C76F2E9A6FAAD123C5545CA0DF75BC4F947251AE4E295374822A12
-9525C441F8A3BA4B198F84D01655B565A503F283468FD810129217BACA9FDF27
-068A6773A3DD4077DFC854CF71303811E901E3B871FC0360FD919D83DF85BA4F
-8A38BB5B769419209E26DC34552781A99BEF4D417BD0BE537C6B026A7AA17AE5
-D7DF16459511C1C18AC14D00005E1F63BD0F9C9877BCD438C36E8BE800F488DD
-0F75FE78815881B627579F24D1DB7942617B3F5EF25EF00F6D6105A5BFB9B4A3
-0BAFCB4E3DEE046E24F67C74AB52A93D201D5DCDAB7F46BA0451E7AFF2663D00
-36052256E9A4CC1DC6971DB83BBAD54AD8214505EC661E0B95B7FDE6D222C2DC
-7EDF0773CA5E9D70BFFAE000258F3D61AE95D289F75A99C15004B3D3860843D6
-8C9045050673930281B2737F7C89F43BBF60B9755E838DD9A3B4F3578CEFE523
-A45254D80952AB05F51FDCC00454E22CD75B2090B944F06A9489FB7184EC758E
-67582592A31497383AFFCF8DBF139FC149FC6D14ABC0E4F6DF3061B2B584D4DE
-6889B93F7F704EDFC8DF9ABAF071E595D6CDA380FFC11E8506C46FD85A09C6ED
-5D5A02638E53963A0D03AC8DCA5CD347820753D0A0F0EF5F0592F17C5539DE62
-D814653080ACD0617F36270D905A48269265D404CF2A653F4E4395CEF7B3DE06
-DE9EA6A42BB17EB905650DA46019AFC6FC67719A505F093ED05413FFA4DF37F5
-B9BC3EB769ECE6AE654C50B7AB9B39C362B5068C1FB77E5A3F5629E78162D7CD
-F625E60AA72D86144B604C3E6BB6700AF62C74927A7376BF6F192FECA323A6AC
-7322D58D488B561F445A181FC3D93546488EAB314A49BE875ABC7EB71716E9C6
-7503E081482CBF436191B004EB5A4652DEBEC5E904EBC6FA6E3E864C1CE576B9
-786536B6533FC1C2102A5D11C50233C6A2A47C60E9B48D7D6706BCA5F3ADA4B9
-646E8EB39F2E7EB0B6C666C986FF1523281057E87083DF11FCCCE3A889D1A936
-DE9037C594F6E1736C9A197895F7C6D2918521460EA6F80BDFF45A5C9C32070F
-501E64E99E359F6371936E338A328245CC2EEAF6A72D5707FCAAB965A125B8E2
-2117C7871141CE94662DBF19D730F2D4F2F664984C7B6733533CAA046C9BF29D
-C52DA166C1D2274DC402A31CBF300248657BEC2B6D7D1677173819BABE5F350C
-5EBBA5DCE4B99F4BD90718DF448F2463BD5BD42074EC8F676BC0B1D28E678BFA
-F2DC379A584875E46BBD0A761213F6585DAFCE2C96D8A6D12A760674CD1CDB99
-C944FCDA5438967B66C6B6A14BD2FA48BF178D54E99D164F45F73CF25BFDCECF
-61A085F8E7762309AD094BF15AA7F180D34650EC30F7F49509DB0D55ADCB6A9D
-FCA9B91D9EB98AD3FE59D715531B254233E6A6A950C8D119607F904EE9AA5A43
-F570F8662F5DEBF9A04B44A8DD89B994C2E54982B205514C8E57DFFFA0DB4797
-BCA6DC037C90DC710C4909D5CD1175622C410272C01D72264785C95B6BD66D62
-FD392F699D4ACE97EAC92E1025CA8165FBA52F3027D8BF7DD6A3D3CFE43E524F
-4049490B1A723FB534ECB5464CAAEFFD5901A37DBDFA2E3922EAA4F1C4AA3142
-1E60E14A5E5253347F152311B48B8E1C1F7194181B2164031D611A41057FB94A
-152E669F812F39AE6AED5EAF4F2DB1A861278BBA55A8C38B8B76006FDC712D22
-0CF657158DBD3C696DB206E0A4693F97580590FE544C94697A9BC12FCDA1296D
-2B8BD5BE925E2A4170A23A3D2D1505423EE7579012FBBFCB9D2405E662C53704
-786A294C949E075D2C1DAC413FA75CCE63B3F14A307DF0DDBB5439A8B4065848
-0C8E0C1D72D311626373A1FC73EE38578ED96870B744E06972A5261CD7F635DC
-463B444423B3074FD0F857F92225EB6432A74DB5A796ABF8B88583600FBBC9B3
-B75F22604D380FD357E1316967B6B4AD59E8135CC03A0FB3542DA191F25A23A0
-F0C84A537938CE3BFF4536774490288DC73513143538F92BB5C364C8A7B27ABE
-9E24CE15D73DFD1DE9B21F97413A735608B6A67433CEFFADB6E5E12EF6E37685
-6EF8169B5FACAB8AA6B9DCF92439A3AEFCF1048358652C44D33E208D434674DC
-607DA66548F36E37AC3454152BC2A3FFE9F3B29B7486CE1F9962389DB02CD5CD
-986C897672772BE7FFE78D3D3603ED03B0B9AD81F58B4C26AA6CEB6F6EDF72CA
-F1F809D43F3432906E6561142116A38B78E3429903FE4E6D61AFFCA7BD3677F3
-13997E1519AE89A692D3827D692109AD1B0E299D2A38BC4D30BDE485C20AF8D8
-11DC4EA036574101CBA7DBAC3941A22DC3CEA88BC85FCE2E6644BE29275136D0
-9F4863F9D71E41FA380EA5E99FF79CCAC5FCBB177D90079894FE7591E558D753
-3597F91EFFD89722F4151399DADBCB5C26B3F5B4994FC102DB01D3B7577A5A38
-E2A193B6329CF31733982FFF5A5108796F9A582E37F2B60AB908139804642F3C
-FE3CAAB3CD74A1A4A3ADA8E345CBC236949E1FF94BD51E25736C3EEEE8B4EB2F
-75117AD025F24591E5C24EBE2700F5518046C507A646BF60DAD559F48BC039C7
-B650348E250EA482F19049BBCA6E5DC2C20C15474D696075AEEEA2CE72C1764F
-02922C81E2E0D2E488020A8C1E9DBDA45C6127FEB15A5FC7919261B5638E53DE
-B6E0B0776BE15539D2CF70F64F97BCAE52AB53F5C5DC8D53146082C2F66FDAD2
-7A99B173218049C3A4DFB994B3EC41CBBDBF093293835313F65672DC50A688A5
-F7678E990B156C4AB40535E42003800B400FCD06AF0465D2B73DD3ABBCD52894
-C0E88C48BA5BC0719E571044C8FD853070CC8A989792346FC407A84B54BF8276
-0A170B45F3FB64B5C51B1B0372488BC7DEFCBB8937EE5BED57881A2AEB42FEC0
-6032A1A85CC234D6F529BF313584DA6FCFA2D9627DE4B388CDDD6DF8481A4FB1
-6FD96949520D7B53D9EB9B8425483679DC1CC9E83707400CF74D2D9ADA87171F
-B5FF9A1072BF6D473714E7AD18E00CE85149D64917D76CCAB751125CFF7BD7F9
-C57EFB9DE0BE8E482039747FEC0F59F515FA68BBB37F2EE55BABE1C5C92C88B3
-EAB24BE48B7822A1ADDF81C83957E2B397A7FA474CE40003CC674E22FE93384B
-3460A9F4490F24184C4925EC140BD81EB77E01C7E8913EB4FC6A578C18956D67
-1BF0E9FA4B51CC250E9239F770B670BAB3BA2F9C090214CCEE0E6A6A3D1E4101
-A56AC6A18F067AA0120E80BE24FC1F692CD68F95E819277522655E0785FEA3C3
-5009DAD265B22EB4030B86B2F6C62E73A7532B89A38DEE7E2D68DF9500569838
-1D9A59B63FD792DEE8B630DF738742652F03258D18592FE572E51A97A6B1B26A
-9061DB341F75C42A86C70CC854F399C4B25F6B1905FE9E3615E53111D928074D
-22D42C73827FE92B63799CEE04BE3C646902CC758E8340B902CFB33211DE183E
-C64C12EF199EA37893BE52D9A32033A053B748A17568BF2BA7A6B927CE31E414
-12B545C2F7C97E1A42CD3C9B4BC560C9567C50F1B3414424341D71D36B7BCA55
-EE7C30D685FD9749B35FED2F39FE8E1E2776C3E7794FF4AC9CADCBC434FD7D45
-4C118408BA787E7211C38B520AD822DC04989F30D5306E70F1FB57D400BE3B33
-B62F01CE1D2A2132660C847BD8168262098AEE11A94AE0645530A682E4556B00
-44F0C6A358D85D0029E0F50A0BBE2571E1CB530252CB15A6797DFAC59307E7C7
-D8332A00CC02079717C6DB63110980638271DB9116961D0D57DFEA1F4254D9A6
-26919272F26F4189FD6778645D08FF094E1596A7D8BC9AE2F7A0CE53CB61A809
-7C5DD1D936C7D6F5FFFE6F4F9DC141D6C53C3F388F435468738CB3748884AE9C
-6FEAE267C403D59C2EEAFC09EE39BED756F305725C58AB433CF7B6C94C1EB2E0
-59691D70D2DCEBF52154D75CFB37DD0BBD6288AC9BBEA7666D34A8B92C4B6D5F
-AC1DC45840F3097B0A09EC5A7689C0DC1F4A6B57C9D1D4C82067E6FFAE16C98C
-2961C6BD4481ABBFCA4840B6EFBCFB00E860AF5CB8700B9786BC52C714446814
-D75DB090BD0129A0A5699D477C2F0E36D4AA030617B8E21F611E6FEAE36AEC18
-7687D1D7F3B55EA216C0312ACDD3E0F5F620B5C81A96C4F046F585A48F89006A
-1D9A8CD3B2485F85D70E24A475246F9D672CB6CF99FE3465283DF6FE77E10D71
-10B96098FED55247CC65C1D4A30C8190917C50B70F39028A7BEB816AA8323D9B
-BD8453E22306541CA84F117D8558ACAA3DF16896990FC1702CBCA1F06C4E3911
-781B42415590CC222D0A3991DCF32090E4481B966E7AFC85EB925DFE31A01203
-D19AA3E15417E059ABAD2B3EF8C25E4DB7C71BA3C3FE5BE691A666E3D8446FCD
-A6F526E52BE4C0926CCC6E180D5CF4CB683122F9EA63C65F4B696FE2AC90C480
-FA06CB6240FD371C8B082E81EE08E8134EC1417FFFFED2AB55699D2D1CBA3CFD
-D35D4821F179735890D8F4AC996C85141A95222394672B1389FCFF4596EAAF8A
-37351631EEE62B1A49E3950241BABB4838F92D003830BB0E1E89CF6E222176EF
-1666EB16B190CE48DF704965848BC049856B090B5A6906FBB75F9D23EF222D4A
-6D6E32D40452093E834FC1F5286F449467982B353D0BD5BD6ACB91C654C97A61
-BCAFB46AA514A961FB416B342A5B7B12F6F1C7F336F597D29177EE9441BF3CC9
-285244CAD94BA047AEF72DB99CF2ABF117EFCACFCD85DAABD0CDD0EE1A47C6DA
-9DBF0F87E537797C53AC25A6A9472DE0FA9F0F673F863C1C11BDB35AD8BAD61A
-B057285DF7A7A81E1AC53C414907DCEB1596807768B2DD6DC3300F93BE70B12D
-7B85FB288CC16456196B23941AA2EE0BE33C560DEA07506457A5F02B5C0E342D
-317055DED4C8C497266003B87C2B779F15033B0335B7768DB8C7E196195242CA
-0F88A303F6AF0AEB31852B6D3B363B4DEA1ABCE3E5328D3F81DF5B95F5D2D04B
-DB8781508BB850B5119E580C524A20877FD642DAC2B63112B4B218CF410FF27A
-59C128D3603B5AFA4578F39CA9F37E4CB4B5CA5B54CED209AAF97D6E5ADCF013
-5DF61BB465314DF0F876545A1D6470A05D725B1E06498FDE2FAAFE335AA1367E
-F4BD4B81F75C255E105538BE9A679553C2535B4FDDBE8065993ABC36ED244B37
-0E3F3EF423181E2D390B8D0F185FA6F568CC8AA7E61BDD861D48FDAF5135B233
-289B9FBA4EDFD177934FA02DB84D812167223AC8AB009624DDFF3B29474BE7CE
-913E9F88960D3EE6B6457EBCA53FD3FB79C0FD03BB233CD3A581D71BBB50DC64
-79A02D3AF6D2A0C1043DF47D5CB8146B2E1D95E6BC5210B2F2BA372FDE53D1B0
-FC99C72D43BE46A6C48C363B1C3C4A04B3EA0C5C3140191F5FBB8D985DD827AA
-3DA5A41A06AB07BC476674E656CC1991115D2CE27339C6BE49242A41F03B6EE8
-F23A394084C343CEEDD24598AAFBE1A4EE510018011890559E23C82FBE651F8A
-9D1F34B29B18FF0F40574CEA65B96C5FBB6EF340838DD1373328C9361FD90B96
-BC386A0DC2B6E07B18F891D8490FF38DE7FFE11AC30B47645C58ADAF22D3966D
-4B029F3AF846EFADC953EC35C00E12B1EB4DEA7E2F8382C1AC27DA639BB79FBF
-964DB7169537705DAF2E49BEDF54D62C9CD1D483EACE63D4921FE9C0FAC455CC
-874519096BFF72F2BABEA46B5723719D5A7C4D04507FA3AAB4199E4AE0DEC5C6
-383103A87B4A6383F415E5751D6C008E26BE50AA44C469EADE59CD0376689DFE
-3E0EC5421104B22814700F73C4E81BBE8789F8B0DAE5A24E89776B50382DA52C
-D45B9FCC27C9ED65221AB1CDB0E6E8F00E6438BD4263EC8D9B476D24C516BA80
-BA4C805C5B44118DC1ABBECDA8F7252844A55E2CBFC7F98CEF161ADBFAE83FB8
-300E7E2D5174854F43AA01D2D4854DA9B652858EAF9FA8015AFA30EE871FEE05
-712136E270EA14D1AF6FEA13E94ECBCB29EB18D19599EEB2A9968745096F6394
-9C531E9D96E94295601778562200B430B68D5CCCFA3DCC78037D5B490C14FDE2
-2FE93AAE188BEFFA832602DC5027B4CD1EE52A6954B4964BDDB34E8551740724
-8415F1AFFD536B5138D9B7DC721CA492EECA8355AB2F1B4305EC4A9C95B5A615
-CED28E98911D99C093EDCC36D4CFE6B64410AE7936F0E1E3FBF58CB773DE1828
-5F147A55B58FCFD290D924D12F9739B26310F924F580676662407ED212FB2F32
-B143B930F693840964AF0EBE9266CD8B401D0BA07EC798F1E1880BE0C1C61B63
-7650AB3A8AD7C594C7A9CEB69C6909C38C7F5AD9368E3410DEF3399AFA358111
-204105049C9BF95FF0FA2A603B2278BA9F719F9E0314BF3FB3EC8947782F262E
-DAA59AF7D28CC2395E2D24B70FE2F0786E97949726BE88FACC46A822359328D6
-D20176556DB3A5280D571A27356423A5D44F83FBD3CA64A03AB9B13A6972EACC
-0135CB7311DD479A9822F78551D4B723556972CF5721F49BD17CD7C9CECCEC67
-B3BC8CA4F7079707AB1366C348AAEDA2B02126E89A720BFCCBA9325E313C8C38
-4B4B6DA1DE88EF3F8D8B069AF17B9DF4FC211352F9BC8F2EDCA7F537373B57AC
-0FAFE2E10C388130FEB6A6E673CC94DEDFD9FD22E8D486784344CCA0BB25E997
-3C57B5162359C6F831F3C50C18
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLRoman8-Bold
-%!PS-AdobeFont-1.0: PLRoman8-Bold 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 30988
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 556 156 0
-%%EndComments
-FontDirectory/PLRoman8-Bold known{/PLRoman8-Bold findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLRoman8-Bold)readonly def
-/FamilyName(PLRoman8)readonly def
-/Weight(Bold)readonly def
-/isFixedPitch false def
-/ItalicAngle 0 def
-/UnderlinePosition -117 def
-/UnderlineThickness 54 def
-end readonly def
-/FontName /PLRoman8-Bold def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-70 -261 1246 937}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF105F3D1FFA85450238616E5A0C33EAC0F9CCBDE6
-AC15F1CF2A94043733C8CD06266771C56ED8A3DA9FEC02BF3C2E26FF3BAE2CBD
-FBCB8CE1E8BA45E7C3F8D6DDB1C1C5BDC54883488DA7CC4CD2C05BFDBA771011
-DBA8CF2637698C547BE9EF95591B4E0B4BF322BAE091CDED462DD98A0FEEDD13
-B63EA201AA22586619B9E0F89E8963AA1DEBEBC5FF84827ED982298379501BDF
-B8C460A2DA020F85E62754372D716C35BC979085D5D028A78E6BF0328C4F409B
-9192E5443F6F0A4704FCB17689BB601B980A049B3507ABE7F8BABB2352FFD5D2
-DC0C9E62DA8B6E80F86A4C9C0F03E3F6FD5BC04815A0B1CF153A90701E8D69C9
-32D73148E8CD2AE4B79DB7B34A135AE9FA28BEC8579A8699D66C696ADE507683
-4329BAA902E701CA42717476298C9FF511E8DE1A268DEC768A941E3DF9669D04
-6C697F818EA103F176646D72499CDDCC90EA530A828BBDBEEEF59FADE7248B21
-1FF63B2B858D2D40789EB126C98F5489BBEFDFBF09F285EEFF14AA13715DDF6F
-7034D0EA4F1FB73476024F8769ABEEEF7FA4EFCCA30C35F607F5C12CAB51089E
-2C7C6F4150C4774423E8C99C28166E5FC3BCE52C13F05719FAF20F60E5D15B63
-0ADA5342D0CE252B67A9CCAF247C1A705A84EE6DB91C7C0A0100F1978F245635
-FA140CEF7FB92E22D07071D76B34DBB962CFC90A5084AFA8A975DBB3644ADB10
-37620E73A8012950F693A42136142D77A1741E2895CB2CF6F647E827537F2698
-9BF63286102E4EA6220BEAA1EF3FB862F9AA0FF7F3371CC1F33591F2A81E9478
-84D1E3DD1A8975EE6F7B0BB69266D0FDC747F0F89C2635D595FD984CA77B5C5D
-D25C2852914D3225D07083B0BF8E4F10510C0D2491AB13FCB507AB79FD0421C5
-C06B9D593022C0A0C703A8479904F0256C5A0B12BEF34533C9C6EBBD193EC913
-183B2BE2ADBC924DDE75551EA794895FF697FFF58FC24F8F4074B96C1735036B
-66C5A6AF44E14C485F3DBD0DCAA1D2BA8DB2FAD3A6063907DFBC54DB0C3B8554
-7C61D7E791F0EFFE61FE49DE095377351777C233796E3C3B76493BB9C08D5891
-88CFF8CAC6EEB756CF0ABE5F5A77BD5100F96AFEDFD0228ED63307080927953F
-8BC73DBF1486A8CBBAE3C2A090DBFDB78D3C62F09DB178EB00BBA223AD140645
-B75794C47656E27DBFBF9E5695E704B4AE18EA08ACA6B60CA473B46905057635
-E6502D167CA1053BE9C8A37F18431BE64882149C65F47BDD1671010328FC7FD7
-464D887D7965B8CE22255BE94C6D185D042C297E406CB8FEA4722686F0B1F3D1
-30CB7B6A59454807003F55C42D8258610E443A3D3EEF019E826ED8528FA772F9
-0CD5A59CF0F9525FCD41C0A368A954452FB1AFAF4C19766336E629B65F5ADFA4
-D0C3C442D34EF5E344A819CFACC305F6831226C56160914266B1D28D74185B0E
-0FAC89BECE59F6885F2E1394A596001FAC3C14C4AE3B287732A74624CD1AA642
-CABD334B5FCE8441F56E2FCC3EEAE0959D55D77119128D5486A2B3890E1DBD28
-018ABA72A1442AD6946BC91FECC6BF991DEF9A693800F88FCD01DD8842D53A0E
-6D87E0F2079F816DF768493C7075240C93B644EE1EAC1A1F2711CE3C5B6F7630
-6A7B57F1EA05DE738806354AC06F6330A38533E085E1EF6CC1BDD35A3F6DAAA1
-9C857EBA17FEA216B731233A518B48040D40CBF94EA8E15DF7F0D97F71A4F3E4
-3AB674E1C4AE3F7E57DD385E1C63444E5B8EF4FDB9699B949B759F595899D229
-2619ECE920ACEA03EA27944046811AFD022372C017C1161A5D9974DFEFF4F032
-92F436BCC3CBAC1B766229EC03F717405C6BA98AF61B53AFA57A14B7F2D4815E
-0733979B9FE7F2EBF30D6F43D5A1031F84BD428D30A72C71236573E05AAB9F71
-9D48E54C53FEFD797C9D6CEEF884247A495C8B6F736704478FB265EEDB2C014E
-DC06AF0F99618F7D40617650FD9314E731D92207FFE12AB3DDECBB5F218BBE63
-758374E04BA7A6B3E9C951D8F90287AD8C6485F5339624848692FD811DE08921
-43A3166E8A243C09AD0E674C1D486D4F59FC3F155A19D63A97CBB7B99FF5756A
-44F596F7FDB2249F5029FF35484E94C45FBAD23887ADF1F1F07CEC18C186F3C9
-09FD4316EE5CFB825AB81F98AB45E118E7EEC24B12C968A4DC8F5A07545EE52C
-6BBB76A334615A272924F1868E2AAB61A3C1D0E82B661EA9C1B94B2EAC616248
-3BFC6A074E90F0395AF08BDAD01BC664D35CE925F6F04405595BD5A8A009F16F
-70DB778E6032E3243476B874464269ACA5BF82566FE07660CAE36E35E6CDF134
-E82DE4DCFD2BE250662021E34D75944F3A93D799C3633FBC05451AB907B3E76E
-C0DF833FDB049A03348CDEAB9F513F4251B69782EFCB7BF7D23A5844DB96A32B
-DCE57D5C67D702AEBF0B8E2D333F98F57EEF40E66F956E98933A8C0E3DBB1D00
-989805A5D391A7728D51B18AE0FA5374AD3D78AF2B3F4C6CB32606657ECF51B6
-1ED2737839DB3B83FC3C528DD3B9304F30DA69CA757DF77A57F2EE78A22CE58C
-67244215DE18BCF06B4C2607D10368EAD71325D69BF3460F448A5E38A4D87BD8
-AEE6DF7CBE80059C2A83B08C696A8423FE23278F98D87173A9E686234B6E8B6A
-41A1565DB7CD7B6E984DEE494A7B01B637E77EAF484C238B02138995BDA8F401
-BC2AB317B12C429198C61D6D0DB796E73D1F01A4F48E7D98A9B2B4F0106A7238
-F457195D09FCB4CA2D81A942C37D7258F523002CEFA1CB9EDEBC0FF97EBEEA67
-B0B94F8A355299FBF350DB9CC57CC348B817348347A92520EBABA10C972DA468
-E1D75411661B046544BF2723FF4B45AC1F3C41698192EDAEA808C1FCEEB0A101
-C52F7A0A857FE92008A5DEB59FF71B33DAAED2DEE10380BD00159522AADD72B6
-6B8DFF757DF5A2AC8EB65977F54D3234B52B495A915C91C43CA5E08BB3F88634
-06FB1CC2CF016E6BCB592914E79DEDC7ACB9E0574E8DE0DAF6A12EA013AAADF6
-F1D7076ED71FBE9706E8CDFAB981D03330EE306078B7A2F954E5A230D5975793
-6660D3CB62D4FB676940A2F08D727FA2AEFCBE4AC82DAFEEF86EB672ACE9A64A
-A094FE3697A275D68B3A674D43404E33F99836541F880846106385A467700E14
-FF13B2D5DD4E61176641A01BDB02DD95FCD9E8F7867EECB897301D2FE70F5091
-60C1CB42875A052F4D53D6124E7D7E64030217149D945E58DFF20AE4267D1CF0
-52953745A4D54A253FB2AE3D37E39706B7571AAAED118CE796246940463E2D04
-4358AE67AC7BFC8697CF929C6B47ABCA35F1F7E9AEC0F0BDA1BDA3C46A81CA96
-EC40EA33D43AF106DFF90F450E7B24F7088A5E41311E9B82067883EDC8BCDDDF
-CB6A87C2A885AD457EB21EA14C919CE9F13C2BFED1652493DD64960EF0B77F65
-031C7D4F88A7F87669A117DCB087F1D2BC31824E9572A3F3CD0C1171F118FDC2
-149533BA921D3E005374772DC9A937B9DBBC40F6BB6BFBD9CD7021261D2C8117
-31B526265F1A63525475398013F04B49F67164F032D2F3C2DDC16FD131C7F302
-A2F9FB65ECCCAD46169329B7C59A444976F34F301F2906629B3D30BE4A54C7E4
-77FDD85B8D52A42EB6E9B4B10C0C20C1A175AB640E476814AB3ED796B8189A3F
-739C72975C388195E806E7C824571D4783F11B5F1889192ECBE6DCA069227164
-C2CC7FA6F6974CAA8E8DA1D36DDE0F6D84642CC593FBD38744296B82E44AC1A5
-54E3D03ABC8B3DA3F404CCADA635E1B497C482A2A657E4E6C9C21533B3D1672A
-022D1935DC96866AF1BFFC7A438014B5902A55B0F6CF2F8AE22F37FBD6545D9E
-8FEC766BFD055074C5D637D7CF1805F02C4559E7AD0F0C3E68A9DC74A9D79B2F
-FF0D43D16E0D780DA8251F4D0C298EA47151D9B41FF20364B875ADCBEDB9D8D2
-E139D55D686C7E96E4E59D476FD2FC56FCDBA6777B31BFB424421ED6047D0736
-338A42C2A174C3E0F92DA62475947EE726E1C877B97AE9E1A6649A0CB6953A8D
-B701BF7A8A91680293C1F5DAE96E1A7A9C9012A54077D77F63305D13F623F9B8
-ED4D7FD2F08CEF3916F1EA9CBB74334DEB94DAC8D2D246B81D8EDF863AAB492A
-E57E8EDF86F51C1705B63562D004710A84EAD6E3E6E195CBDAC59C6559093C11
-233AD680967E1EC25734E2F4C6DCA412C2E0A836F88D24D6FE389DDA01FA4306
-90CEC6D8F7061643F30D1874BE32DBF1FA9D3883FADCE79A8521483C2AD47B0A
-CA1E1FA73EA9C4CD1348704810FBF3EA97132DFA64AE2AEA572E8B3C8F56B2AC
-1D5C87E48486591A3C1C4760B0E12B51E1234E945ADBEA4BD8C6953A5C3B4BF2
-D0372D0210175B00375938695CA4A2904943033C1F9036FA76EBDCFA48841DE5
-394BBBFE6F613682D938AB70D416CD39E8562FD546F1E50BFD42D0C60D8E87DA
-E14E79860B37E3E8AACFCAFA98EEE36E181581656DD25A7835DD6BAB3830ED59
-A43AB87815C627822DB3D6E1566AE808D65B12481CDDD1FE7A73DC4D181C5916
-886C28EF3E057C202CAD95C87793D5F78FF22EDE240535D6E3DC2BA4865E3562
-D7A3B0B34414144629AA8E5986E337E7AD09BB07B4671FF09BFAD30292186B7F
-6BD8C29D65B4356C4E2C8E6ED1E2D6B1093F9F3749B84F64B1FD5992C1EF09AE
-2E4E0F5236844C1052D0EBF84B621A37B09C82C73AB92A7451F4AB96F55DA6D3
-5FB7C3A342EC821ADA931C653006BF3BE90ED148B99FE059B9DF5536CCD95377
-E0D3FE9C05F30F995C001D5F190A0BFCC817D5DBC16B44DFEDAC2A39A813FC48
-91B49E7775375100F55E9F16B3DF05B11CFD93731EE7455CCC4ED0ABEF6C73B6
-DADAD2702D31876A1CFCE58D619A66DF8CCC311631985E922540F0D3D5236EA9
-7982C05E30482CFBAB903804529BEFFC802F9800AD9A061C5A9DEFE69400B2EF
-05694742221D464A6661A7F34E6D65CC45A36D5E736F1412AECDD420CD51195E
-AACBEA028E44400CF14E44F283F129D896AC099E3A80CF8CF84F57C0E4BCEADB
-69142DB4E45865796EFC447255A99CCE4EC07AF8CBD2560CC56845D97159BD8B
-8EEE2C388AED3B21C2EB19D38EE7EF00B7FD440C38A1BD8E6A11149D6BA9283C
-269D2E0AB1795DA66CA39727598CDE36A037F2FAFDC119B5449795A6AEDFB0D6
-02DDA6976077056F38E453DACE9E719FD335668D0308E1BDC9C039C5D12C144E
-F074FC348973D42CB83D61BAA2EE3C43062E6959165E9EC2602F42298810713A
-9B31042BB5A1A31266E9604F5428E00C21C1CEF23C264CAA7ED1498203368309
-F97CF308EB489545B7ED76123320FF3E98ED91EB5F18A4F7D911D3EEADD41EB7
-B8921ED1DFEDAAD93A07401077BAEADD59BAB0E23E86CDCE1D9FF33AFA5A22B6
-21455429C82A60188A9CC302686387398B27E1352493EE662FB80E0D2F4448FB
-963304426DADE00CD6E6894AE12715154AE64BF9BE90FCE97C3147008F00F136
-FEF0E8CA99A6CF8AE101D94B52602E22933C091369BC8AA064E0AC4EE68A7C1C
-4309D6BBD6B6043F41C732FD622ED48AE06ECEDC6303F1592B79CE46CA4C8845
-39400BB3DF940EFA1C84D534874007249ADA3E06D08D112D96A5DF0FB3DAC7DC
-B6211E6A24365C3791605F84F39C859B3BE698EAA1ADC90FF68C556ED6A60335
-01F5E1C090E3A641843D4AE30DBBE4C189B5B5F89B0683474C2B05C44EC07ED3
-3B46E63C23D3E8DA5DA36488AAD1C3D83D53A038FA1F23EF76E43D5B088D0A38
-FA8A6BF8B50E61083FD9F8ABB5D85D4C18C17255B9A042CBD9DE2B1953F12988
-BBBF028A9223883F9BB654504DBE5C353EE60A5E033A38DC5393FD4C40408AE7
-49815B5F2755B73B9B5397599CE4A935999B70701E7651148B2CF46FC1B740EE
-3D97E3381F635DEE68AEF01B942C5BD89B956D79982A3403BD54D8D22E4EBB05
-585173AA55CDC6AA48050371B243E1B0966F05D0A82089E2FA3670AA62E81DEF
-656644E81D1BDE643F11B2443FF507770909B0AE054CD40FF05CA14BB428392B
-F935DCD3E32E62A547C003325C8F250AE9758545EB67E078F2697513890EBAE0
-9588F48C0A10B69864BA960D8D626027B44100380B53E4C2F5932B239F9F8C94
-B0782041128675069491EDC6393BFD9BDBC2F4BF31F70D77135241629CA599EA
-7B17C74542892876C5CE297F6C23FB62B6AA682136AB07E51153C93B32CBB0DC
-ED323005754A20A64F3D9E308E4A41F4549DD76E9F2F1D6A2A01676831AEBFD3
-B4171EFDCB28C5442BE496A96D13ED2C4C25E1A873151CF6ED500EF18B733E14
-061C6B3455CD1EDDC5E481B7BFB2614856135A86B878F86765CC77527581AE71
-32C02219E85F3B956F30F3399AFA3592C6701CCCC59E7EC7C5C5CE77F653FDAF
-73BFFA369C29D2ABDACE28F121BB6F8395DBB21EC64F0F69D1C7445D3004D45A
-8F3F541EEAAB3BAE066D98DB760D2FDDFD3D16C84CD797C1810C55505D450256
-DE2B9B1556981C6250ACBD9AEE22844A329FA077387C2319E7C86F65CC173576
-429980C812BD83ECE52D08E83FA9CD37F1BEEECD76E6909031B3B449885969CE
-752ED4874BB76182CF57EF9ABC7FC6A56E92C9795539B579DCFDCD94BDCFFF99
-D6B0566A2F144874F369C67ACDAB40586A33CA01172C1DC4ED397DAAB6937ECB
-C03CE8A8DE781129AF903A2071B32CCD999C06C27A66F8B1306FD73AA6311D73
-262D996D89D49CB5BE569EE0D7BA248DBA2E17C19C92702FDC0E06AFE8835CD1
-CBE3F9C99C3BB40E515FD7B16BA576825A5C05F297A13F5B8976437E10CC2E46
-693D1A4083AAF2B7A46C4E46F54CF6DA89266D1F965DCED45B76E61DF587FA2D
-766F39206C44E5AB89B00A5DE491BC8992BC31C851B3DAAE8B302E79D73A9819
-90A0DB13C2E3338ADD04DBDA9E67FEC445AE2D886E1B38B1F160DF505C6635E5
-C55FF27D8F388FCD81BEADE0FB3708C00A4BDE339FC8B00BD2926B9A2BA6A300
-D5A60076F863CB74628D8DE0237439F1B7C07CDBB2AE6B759E774FEC3F2CF6D0
-C964CB8D35E85540B97BAC732278341BF05B7FB7F927C13BF67EC38B752B05BF
-0085886EB77492E76C28E88692D219E16879EB0E41C9020ABE935D35B465EADE
-DB47C90FE2589CC4F1589D571180A8A4782AE1E9532FE5FF83AFBFC657B34121
-A995317A6D17310C8D714C5E590A98CEC6898DA5055F9BC4C88403B63255CC9D
-7B64FE2CD0CF3EA724201E9DF5271C9A5273D75452E8D7EC353E7D81E92D04A6
-4871A8744457EC29CE48B19D3804120D21DFA6034A14B252C7688B62F09861CA
-7BB9F160120DF141893AD510C29283CF8C5625627487584F5D9C80390F8CC18E
-380BEC846083E33344F425468DD7C19ECFFF0D16B079485659EA94578B3CE9C9
-2D3D497324077A727EF39F893C9B3740FE2E9D8DBE9CB4BC244D9DA6259DCC3E
-5A2E64AEE6B2FC3A3E5AC524756CBB7D7854CFAD833C0E4B3D2A68B2366102AB
-04094D88D3F18C3AAE9A6FBDFD2C2EAD99224C88F82E3220BB28E676941F818C
-D45F0FB2F55C4B77AED5A57BEEEB868046CCEB6DF1687AB3C6014940AFB1A6FE
-04844DDDB5D5A1A2EA65B6C789621A07F8AF76573E7BA2BDC85C893D5F4B3EF1
-014A08B5705B5F8F86CAB5020D1ED1FD9ACAB966CE06B883E8D1DED7CA22EB4C
-6799E68CFDB502EC670D15B0A1CF50CFDC11E8869C21CCA790046C2773626A1E
-DC7B140E2865F915F6AEB7EFACCE030B48991EFB54A88CED8FAABD94BC7D4F34
-82B0669F0885D1EA3DBFCD53064B70371658095EA7215574250373D8383DF962
-8957602E4F8D8E0B35BA9B0D4823485953B3CD3EF9D5B561D8E4B211C4FBE9D0
-A7349AB865B5A54329A6E5EB809F959C46437306DE6CBB953D59BC1D0619E23F
-3A9AF33258C86AFB2F73E2B0C49F62AD946AA8259A8B1D882552729A6847D7A4
-F886B9EA56ECAF341FDECB9490DFB7AFA506A3FA669B69FD3C31C7E4DEB288A5
-7D94B05643000E9B8D8A39D6B9EB08AE2741F2794C10799B06FE4359A20D42BA
-8E313C84F7694E7D9735621ACF85D920A9B6E343CC2A8FDA44FCF69B9F4B04D0
-1DC6057DBFC2B0085C29A95EB03DA57125B658AFB0BB255792D6D7039D1FEA75
-C28531E7280F26F57845D24204611DE9ED7854B7108D3C1511C95A9D188B89D4
-E33E0CA5168252B138217E94C52C3E21141C6593A1B8086692DD9F4B8FC20B85
-1B1CB51A7D983EEB01DE0AB2536A6DE82E8DE2ED92346B5918BC5735835437F8
-6CDD43B26AFE3816A6F76087D3DD7A9892460E6B6A09E5CB823BC5B7B93CCD6D
-4F2407A6573408317F15803ABC8777163DD6E1BBE517F927C34B1F3249863949
-1AB1A1CB0C4E894BCDE243A97EF9EB9C673D4EA0F58B2B11ECD0C7F700A5BEBC
-2404C7C876C281E433DA9A039F645549B32A224AAEEB83C49921E0BFC0A3B66B
-FBEE976F069D256717A40D4950FBBBD20C626217A45A4B81E98B67D920CF6596
-26B51D88373B619BC2ED5104DB78936B2F50E449E68FBB05CDAE4D7A5BCE7561
-669EDCF29419310D9EC11917D3D726F2E736A78CAE3D1B2564F7A5C35E21CEE3
-5255268AB1065F2929C07E161728190859B2C076A8411B42EDB079468F08130F
-F0C8C9E118926FCC6AA7E6375997266691C1E08BD0AEC4036AA977995A2D6889
-861ED8B5A653D68EFFFBA64D968E675949F1A7886969D17E57EA780B1BDAEDC1
-00063E0F0CA5DFA7A88EF38810F06D7C6E504512FC8AD2A626AEC53FB6FBBE49
-2ADC8189708529FF7B5DCF6C3B81C4183FCE0FD0C7F6B0713475C955C756C7A7
-366E444E1804B5A4823BA87A965BD2724F9001D0758578128A95D232F3CBC38C
-F3B76B92097A94B6E52792CE81A458755AA6246DEE8566566A1F5E7C9C458001
-22D55D4A575A91CAAC7F6AC6CAC1A04D0EE2AFE20BCF8191C0F7F147A93DD114
-F7760ACB25BE24945AC1FEA340C1F0051D0A70227B35B4B35E7C7A8C976D5380
-0506923F1FA5CB0CBD9F968D068DBF528C83F7023AB1AAB55A523B4D711B0DD5
-9987AF3B59B8A361F8F2D12E639FF368D6C892FD7CFDB8A72E327A4391E45DC6
-C5105F51DE862F93B03A24C9418E59D019445473A72AF9870D32D5DF7D83683D
-FEB4BDCCD30BAF6B590D49CF9D875B309A944A99F32AD738B618A634D4E46B69
-2F5431B34B0B08C9D6D400948E6AA7120830EB4B34B59FDA0B150D035C040E6E
-4C000633E5954C2944481154D16BB28F88CC5E36842220F4943B0272AC32A322
-7A281EC4DB95F4A9A493E3DD868DCA5868184C4CB4A16D0874C9B8B9EB48D724
-A498F77B33BDC6C51B6791F9B47C6A95437F537591F5FBE87F7FD7BC7005EEA3
-9A649CF301F783F3A79E6944F6C25D39708C553B117B05C53FA39EF76B2EB828
-13C8D18231BCAA29629EF9E81B0DFC6F84CE4886F48588F399E21A1EC805DAB3
-
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLTypewriter8-Regular
-%!PS-AdobeFont-1.0: PLTypewriter8-Regular 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 30414
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 489 178 0
-%%EndComments
-FontDirectory/PLTypewriter8-Regular known{/PLTypewriter8-Regular findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLTypewriter8-Regular)readonly def
-/FamilyName(PLTypewriter8)readonly def
-/Weight(Normal)readonly def
-/isFixedPitch true def
-/ItalicAngle 0 def
-/UnderlinePosition -133 def
-/UnderlineThickness 61 def
-end readonly def
-/FontName /PLTypewriter8-Regular def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-5 -232 545 841}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF105BF4659ADEAF285B288B8C45EBB28817B16FD4
-E84AAACE8EEE3FF662C0A331845CF93764AC3D89DBD552B91A1E9B652CF90846
-0DB65CABC15CD4439AE5B5277F193D525319F51C7E4782F09759A87E1B37A013
-C4C25F5C7C43490B50CCE7B9C9DDB33861BF2A2B755FC0E3526A02B7C2134177
-0EE0DF579B43A3965DAF9548EF0E6A5E88A265DD968CEEF0372F7433A5575690
-DB0EB58EEB024104A2B925CD1B8C8971D80232693C6E616E78306DDC79494FD6
-F4CF9A1BE8B2478B8C2073F3DFB2AC1B08A9F95E5A6129BF96DD6F356E3CFB10
-6CD4681B468893DCDD5049B6664BC42200513B9CADB615879E41D6190AA3A0DA
-1C06F42C9AA4FDAFFC058871FF664D81B7FF38800C5754EB41D1244C5E974D96
-75B6FFF16F3C96BD9BE14FF20C785A6F46E7AB9DA0A6025784AFDAA74E9E69FA
-C88CAE97BD8239E974438E141CB19E762A1FDB01DA5EA72FC2C4A95C05EDB8A7
-B96E93483B35288221D856957449AA4AF7FA6963E77ACEBC40FC0F4228F77FFC
-CA2F2F7CAFD93CA182B25CD0F7F8387DD8CA44A544BEE210382DB0321D08CED2
-1EE48F9FC2C35D851EE98AD3863A0A6C40428D521AC56BD90E5D14B07E2D70F0
-84A5A74282463E426240BB2AECAF921477FCD299B2E5EA7AE199713BD4573977
-97B1F5E1DF730CF36E7E0DA7F9805EBCA7E545DC35A60B9C93D1A9DBDF00700F
-D1893286ADE1BC40550DBD475801848196FF59D705A0D83B4647C244630A285F
-751DAF6D51E9B9D5CB3E7541626E069F54C8A0818C4D8691E084B8B2BC1DE7C5
-7D2992EB24625547D67BD112B59BA801D75428F331EB561A6F257C8BC677E44A
-3629E20B6B00AB8DD9359F982E1B59361D233CED47B7985A34DE5861E0AE858C
-398D95179E007A6CFE211D8D3BD07A191CC377126A41EA96394170A5BF25824F
-7EAC28280B1FD9CBECFC7CE7D76F3A09B3BF227F67DF57D19B3F873D1E7E46FB
-042B8425F182A1ED39553AF1119CB14C388EAB56D36EC43623539BAE1C2022B8
-3E3269E878E4DABE11BCA251600788A06FE5A8EFD273C02B6815F111514C2BB2
-1B16C7E4F8EEE21D4959D2B78540E1566B5CEA3A7F4143DCAF0C973C32B448B5
-8F1851EC935A0A0CB753F67FCAD925FFA67EBD994DA888B66526C76E1442E95D
-FD76D944D13FFEE76B06B2243B93A714BFADD14A52A3C56D45CA8B4F0E073865
-F3309041EDE5D2768687CC471AED42F2886C1A3AE9E544B5CDB0AED33204093B
-570CA37A1D626A0D50E4E66FA2EBA88294BC72B991CD58E1D9531AABC9DE7DF9
-163FFF77B46319A796AD9178781F0E51C7EF4F7A449D9C8AA7783653A7C6BBEC
-CA0FE1D38F417818F37A3A070EBFE95EA7DB361DDD6001FE4B7368A1F1A012D2
-896DFBD327142268C81D827F8AC87AC0DF39B1E0EBAAC34D6E17090F43C615CF
-AF7439D2C6E8BF87B0383B6F7AE56DC9264635E2188986E0AEBCC298331EF89D
-F1DB61968812291C5BD83579B55601659E8374CBEC1D71A935C8D6761F3CDD58
-F8B8E447555557A7961C86F877E0D837CAB76BCAB53B32CC96206C18B1F1E45C
-30E63E42686F7F60305F5F135461F8AB4E1A5B5CEC69FEB1914AAB7AC7447F29
-30362DD09229C80137E2DCFC1D586DCEE2DAA656D1555DA1488F1F17F4CD7A08
-396913FB7265FF4F5796CAE1DD7047D46C72420DE5C1EA962F618B18A3DBDF7B
-E1566BDF90F502A700E00BF19971469BF22120B8F798205B3CDAE20E03994784
-712355A46936E8C7FC84527E7D439BC235430FE2C6D0C98D7AF768B0F4285C4F
-A2CF91CF95EB6C4616704AC458155065BE7F7633423E4283CA25D06CE7826FF3
-DD99BB594BA35798649DEA27F65FF89E3AC674408818CC72602AC5BAA57C00F2
-4B8940BFA717354350E40BF722188F38CE9D46B2ABC0413F6782048119C7B3BB
-00C482B190C7FEB04EE0C4F936D673FF29BE91E000ED4AE191931633CAAD57CF
-2076E8A43DD4B42790D389B16E1FBCF04E0C4EC39D7982084FB63865B81ECA05
-A80E40C0DA667129F87745EEF4660FB56D9F92BAF993C4A1F9918298D2DA853E
-94734B26CA503A277634E4192DC17787C412E7273DDE3F70DA94BF8D08C5A921
-6D29E2CF0BD6D47B45C1DE6D1C0F2EF0F0A0569A8BA8389597F0617364303EAF
-057DCAAA45CA93BA7CB71BBA2F3D6AED42553105A5C120308AD6E4B905367A51
-96F5A334775804EF2047F7F8BECEB82913736130C521620B2D0C877D96C24DA3
-DAA51DA0C97290306F2B40E28DCDBF18E72B17D6C2F443F2718C25440586C64F
-328339EED2EEA79229F7D6AA63EDCAC14D0E7609CA2C1325A2F5E66E9CD987C0
-4095F0034DD3BD95E0FDCED4E2B4C542E8DE10296260304F2DFAD6EBE48CC19C
-34839E7B1DA20F7E26BC52C73DBFB67111A6BA5680BBDB2E202C5641DE56ACA6
-72B233D05F45F0AAB98FF5387F0F57089A2D575B2659F0EAE5FE109377B949DC
-F7A7CD8B56AB4BAD106CD589113ED0ED88E4562C1AA4B411796D217E22BD3373
-C972885EC11829358C1583255E15BAE9ACEC391B579C16BF069302FE49157850
-C07ABAB3222956D475D6241EFE4E186C1F6147D7607A45398FA21F25E7A1E529
-2523B5C5A70AB68F0E82288384134272F550C045B9FCC0F5DFB46C9FF7436B00
-26DC732ECA0A51437AE3F14C4CF1CE9A372900526B412117FA0C16776770FF8C
-6758AF06F4E4291B21347541CBBC63FC3048F27D9C4C9369E0FF17C243C8725D
-4177FC4E030950F86B944EF7F6468A1273BA67845FC46D7C43D38CCAD33A0225
-1EEDA8600201AFC252AA5812AA5072BE796574CE2C9A985FDFBD3E2B876BE576
-710C393A8356649F386E1979A6F7EBB8CC911A0345F33273203BC909CEA33A2D
-4B68B92DF8431F441E8603E1B735366BDEA64084E2039F6F689D1D1AEFD7CE0E
-AF2EC676BF771F5B9316AFD5C2AED1F9B71F55A5D5E997CEADB3435EB9BE3CE7
-2605076331FDB634340EB236626F0EE54F1DB5B3628E247CF976B6AFE25DAF40
-3311F039C6561DAEBF46AD62DB6E27933E03BB118A00D0F025F0A14EBAFB5897
-7B835708E9D552067650A999C62F6C26F98370DAE50451FC90F48753DAF686F3
-642E6E7A209CA9617468EEA88155D181FAD328163D315EB92F8E42446275F5A6
-2376530BDEB66C20F6AA24B51A02AEBEF322648F56EA12F46DF6A22B590B9F0F
-AAD50D044E12428A74D03BFD927A376A70A50816CC70D50FB51BE1161FC30F6C
-059EB4E54EE1ADAC62B7362B8CC7D7E6C18C3EA533285B7E62617DB6523E629B
-39FDA591442B82FBABDEBF5DD307FD5FE881F99944982823409EC0269BD33DD9
-4B412A8D349640AFBBE5F42363EF87ECFBB07FD376BD2C1A641459EA2C6ABED7
-0CF63CDD5FE7231C05A3020749339681BE57B4CD50903AE0459070B2E1CBDEA4
-02066DFAC37A4B06C8D2CFE0B88F287C3FED26A115C2173238A8C843BF252705
-3FA78840C66160E0E099D4F50B9B0756B0C75BC7DC06B034D0EF5C55E86C0A7A
-3AFBFE040101F5F3E2EFCFDF11D52E8BE37297EE576202FD04008079F09BB2FB
-82B1D1E2E078E4D42F8C9ED1C9D6B0EA1CB656E493908FC60CDC49BDA893459C
-EC2F7068E9336C351E276A37D7EAD511A3BC741690961339CD650B2CEBB80EB6
-8DBC5D82F253F83F62958034C6C1590AD32A8EDB9588B3DDA9D5744616A43CBC
-56B00F822F7AE0AC4005DC811EBC418E6F0D0BA80CB2062F319454FD0EEE07E1
-55DBBAFABC7790789ED0C3E2E2237AC3FFB62638BC2BD4B3CDF1DCD2F4F7A072
-0503D7161B7EF3264E153925BAEFE64761F5EBA2915DAF3D8379BBEE93C7ADE7
-21409B093C1927BF03F3B5EBA369EEC9DEB81AC4B59F8C8A49FB435D4620E8A2
-008A02EC5681D000A8EBB023F0EF15AE3F6D91CA26515A86F5B9D008786002CB
-B1EE977C88AE260A1D2E428520C8811D02A0A094F845FF4A109BF1A5B3E4F822
-D84FF85A7AFAED62A69684C2DEC40609D994CC7847064A18E9F4B13BD4CA03F2
-42DF0F81E34F138B8A76AC6C4A8FFECCA09AE8210DC0157687AA55F982E7F97C
-2B2459661177FC792403F181E7C0131D379A49B2C7649F51FD803890EC88A5EA
-75D82CF49C948544456D6323286CEB2539DDE7A73364AB352763C407C0F09DC3
-F3022EF6347C31A53640E45FADCBE33FE5F40AC5A42258DC11796E8F834E7FCC
-4C523D95207B36E865797879DD5D854A04EB3F5AF5E709F26CD9C484E3C56D49
-78D17EEB944C905C0FB4E7F592C93535C26977C3BC6B9CB149F3725C894669FF
-44C8BDC92CC29C5B7F2DDD6DD5104E04E810338E7B485BDE7BCF903F734DD7CB
-5C9B7DBCD5ADF9264A60D166F0211390A48B60413102DE03A69C33515BF9C595
-EFEC75E06F07B35273CDCE50516A57F191028439EC8E5B8124192D43A47EEF26
-8AA1B135AC4F442444A67A855D1C96EC73E306DFAE22973DEF8FF548AF36F41E
-219F071A8126A9DF8158DF67183BC133AA81F2082FBDA1525D000067FFE55783
-E17EDFB171D6AD67DEA1649F54431D42B663F7868151FE6102F9CCC90D4FD2A0
-931193F10D34CCEB45D5F2337EAB4F70211F994C0737897477BA5BFECD0802B0
-86594E2D64281DBE9D61FF6706E8D5A4A955D3A423DACE1AB5B13A4DEEF2E9A1
-36BABC8E1328AB11B4B26222A6F4169D9ED91D60D4F8C46C16C745B58752D394
-15CCA9C948A3665E31FBDF35035E4B79D216D2A2E10837B4D590E00464AEA544
-FD607E476804BFA21D553A9A3B6E29937F52FEDF5BCBAEEA8FF205D91E61D6FB
-F0894C659A61F005C6FCE1A0E970036117F50BEF1DDDBC2AD2B526C65E1A4E98
-BB4EFAB5F880FF2492A0FD1A321D392B6590F33779183066983F1B67526D6089
-6E706D9DA2C2E4289EDB0205C94E76DF309E19377297C58FBEC02B0424B56DD3
-7AC73B7D957BF9CE3B0999EF24263FA13A3DC4FAE0E34ED9BB413501394C01D7
-3557DC869EA0D45CDD151E01EA0F5D6ACEC38C3BB28D26B8F817C641C4DC2B64
-A89E0D6A283C98929C675D9735BBF8799A87D3987420F014A0A2B1B15A104121
-6988DE7335FA7130D761D45E9F9CAA56046AD1CE245C969AA0F257BFF37ADD69
-89E85FCA26A24EF31C4375A2809CC5ED835EB1AECF35AB8ED9C07D27DA60451F
-2CFF04B9C2ED3225AFDFED29C110AEED350F45EB766CE005561141B3076B162B
-5B0DEB09713CDA59AA7ABDF6A54B35F6010FEDEF6C34FAC4077EF07FD0FC8962
-530A98376BD26C39075D9EC1A987BC99B27BB61B4A077FADD338C2A01580D84E
-0135EED6CD280ED033AD04799EB9F13AD2F4373BDA157D2389CF1D71F65EA74C
-B0A90A62A05E0E6853A89537F380C2FB287D7458FCF8C5301D4633D93064D975
-906ED3948EEA7CDCA298C41A6F679848AEB924DF95B58D8DA93DD0E43634791D
-B7B31DB298B7E78F839ED8D858AD4C77BACED05E5DD0C717505475857A47A977
-CFDC3FAB4954286AD4115B409DDFFEE2757E3B3C622CC6935DA0C4EBE6E73DBA
-9E508070C5EE9E91EACEFAFF2D8B6BF15794A552055E3B2E9707A0C61D904E41
-B9B0B901CC8489414DEF5E701BDC76E7B9700EBBB54DEAF0039BFD9D975A0C53
-23A575E10783F738A69564D8C4D3DE3B27BF408FF68EDBBA8148EA7FEBCF1093
-41488F906450AD70892A75ACEA874898A1893291A97827D2AF45C8379364325D
-D8DC1AE11DD1E3F0088AEB39EE217541A4C17DF1A012D2896DFBD32EE1A8844F
-5EA592BFA0F8530A17935D1E17DC0C1FAF30A7C463EB45F0D1798271E583290B
-0195489A5ED95EB8E3733A3BA2F98CD9C937C36603B7F3357786F66BE72851EC
-C43D94B484700D72CE5B239CB06EF050913C84520BBC0DD71A5ED6AB07863F84
-5D07F03C217FFD7A58EA0C7A398BCA6EF0DC03DF19A3B7F0621E5DF8F48C433C
-5CA5EF5AAC63F57DE0552ADA3E14BC9A225A7A06271CD2A35B031DA95C0CD59F
-19CAAE0B2173E3498FB7D0594BE5C1C51FF11BC7660627C309B251D45D787512
-8814A1B75DD571FF042DFD6A009817A28C281C3E1974EF64505EAEE437E10F0C
-446F2AADC2AFADBF3F607C7C93DF8C301739E51DD451D8AA55F085706C278C5E
-1981EC64A5A3157D7221A45C95F7E64231E58015863310F60AA52F893F9E0A8D
-7C22D8D3DC349EE4B9BEEACBE36A6DA23FB3E8BE62FBEA68C93884A25FC2EF78
-FF074A7B458B16FC14050FFD4C8F2AF68FD0E13011CC3011A88576B8430B4A72
-8F254E9C04A8F1FA82E223319B624D546799A137A61DB960A3746B2BBA04956B
-86F9B706370053CD173E9D3D2261AA9B3F73296995CD0398C35E5E008CE46E03
-4B3F80AD2AD5D46C478AC54EA771DB2E116B5F3D795D8EB4965FEA812297011C
-EF1C2764D61BF8F9E244474B07910763C27010AA86EA4B7F6B1B609DC99F0970
-D73EBD25676A2743F442E4D7193F90BC0CB3045FFD66D27ACDDDF6844EE95C8F
-00645E9CF2C3A71C1499CEF50F2E70E256AB6AB6592D605E873EF375665DFD55
-2665499DA042C5A95A254853EDE7EA1D4886861F7462E61A0C068124A89F89C6
-62F872C866C7A9878969095404E84D2420904CE81614809D97B4B88FADC24F80
-974B48D8FC563ED82DD7C0F29D35DE34A5C877A7242EA8814BD8504C65F2182A
-4F50833FE84E224696BF32270E8F67664170E613506B72390D0FEFD2B476E5DC
-9EC3DDB6310B59817ABDE32A3EE76BE0B8A3520D7A8D41D16D4A3E36D597C7EF
-86102A0AED5B0CDF3872DD27DFE5E285F8C7EB1331FA15A73709AC2C7FC1F5E9
-5F94BE63D6C28148250AB67AD6A45BD188255D5A783B32B5A6F76E0435095678
-386F97F6A459467A25F2E4A55724FED24FC2F8852D3935955D9934F923793DC8
-C963116DC5A3531FEFD7C5B014F39EAF0D7FA4DA1316C308D33B21BDA87C1A98
-1C720790A9C991F318764F19E9835FF8E82FC677217C210DA1DA5CA989C9A0A1
-67813257F9E37202DFF04A22E5AE26375A3B2CCD6F934361CA0D77F47A7E2119
-C1009E2ED2540C5E635C5BED74DE76E48E06E6CC926E03DA745316CF48850271
-71A5258697AF20F1314EEAE7564CBDDB40C97652C1697D2BAD5DADF0C1A92F7A
-DA6F3100F29C864BAC5DEC9D29C4575F7FBFA39A86BF16ED2466D8DD2EA2E80F
-589B3D0F108E530CF19D665AB209ED3EBB7280DA88C7345730E8184BFC9EEE4D
-9FE376D7825CAB14AA924CE621CE0B2988A9B0EFE7FC3E279A4429B2939059F4
-B4ACDE2A650BDB5CC9D5EDE1495155DEE2C89E1D3383D2DD1B6292B7E21C27CB
-7B049D1773BB0EDE89B977122D3F26873231FE69504FC0649FAFE3A951A6CBE1
-B23CD348F54FFC2A14A682573428FE006FE3F5CF538761B57C9C44F436A457B7
-CDD95BF3E6515958D80EE7A4F522507421DD6C9353BE1058FF7075573BE448E6
-FE375870F4820113C592E7080C797D60E3942E7913F0F41394DD01524B342881
-E852CBF50A9DD891830B3F01552C5F73CD7B30B5D459A86CA5817830AC8A29F7
-2B012B75109F5C3EF03D8A3735EBCF71EBDD6930043A3C643A6C32AE3CE9BCC4
-85CC5D3239C3736B16542980AF0FD4D413DB8EA31A431CF3879574BED7345763
-B25155ECE30DDA73A32C390177AE0796710AEABAA07E36BF91FF2BE61055CE45
-A3CDA0B1517F1DAAF840012EFAEAFD5632B370AE8955FBC699FC847FFBFDCDA5
-C1AFBE3C28EFAE4B76D065623775693E0F3E49E3BBA089C8E19C23606AC75631
-E9441EA26E2188147BBA8F70A7D7A5A77E157C651E556EBAA6474EAD3A6188A2
-DA05BAD2DE0ACC02B8ADF47401F8A55BB73B29F727ABBEEBCCA3DD33DE32C90A
-2546C090ECD872C48AB4BF001752E079D2065D9B7D8C2AF27B2546D995629784
-10572FD2E0F7DD562FAF98506FA0A2186A65E1F7427482E42145649903A220DD
-FACBA5A39A5309459035396E4E94B3BC031F24E8A43F0731EB6D10A3C1BCCF7D
-E243728C87C7C96516574D26B0B7F5A52403137483EB24731126502CC6AF65E4
-21861F92C749EC695084E897679A1D09E7C4979D6FDDEDC084737B4D8235B053
-2F0C9447D871D68AF75FE7C4D24754AE69C5A0CF0A56B288F6278D34B3DA4A62
-02D377C85DC513FB5FCE978189EACD38403BF6113933188796D8A4AFD80D2300
-A67CA6CFEF470051C6D10F9FC88148B4248784988E2158F33615341EAC94E61A
-5557C7530B5AC1B657C3BB2BBCF10FBDC0BE74AD2E8AE6D170A3787578FBBE56
-B646D229B2E148E351A63DD8460DEB8FC4CE4F9BE1E94D4A4D6FB049AFDBE1DE
-F666C14EE422C36FD17FBCBCC6ED253E29CB3BF1374422CB313853E14748BFF1
-53D14F913213FC416951EBB43CC03F854D0A45A4A9C821415D9D121966AA4CD6
-31C61065CA780CE9A649CE076161278E8AEC8E4A609C147AE7BDDAA18A31C629
-0C876ACE023566656DE99C8DD328A3CB3F59C1311A1A870FFC9399F87D391830
-13BE512EEED0D64EC9D62E85D42BFFD334BFA5DEDB60ADDBC3349FEE1A1204F5
-64D32B1E47489F91C6651A29B8628F33FED3EBC94F41A68C19FF670B7E847BF3
-14D7B208C9AE11C70595C8198CC04A5EA4FF63763A313DFC80E922A6E9E93228
-5287C3AF97002FE3BCD9479D77856FA941F152CAA9227C44F1B39B60A159223D
-0BF3A3C7921F47CC03240186432EA6675326AF7ED0E7034FE0395EE0E4C8EF10
-E60B2F5B3039BF6D022875BB277FD8633BD1F7D69E3F0ECF51B70C9F79A3E8E6
-488704F6D542DDEAD58934B8C9F894AD07C295CA6B866E436A9743BF070D8563
-E19B7C08BF709FE9C5B6D51F9767EB89239985717EF84B341F6EDC288E441482
-48DE53A7D1BAB7FA350C8593FB8FDEF73BC274B65EA08846E632CE0C60CC7F16
-ADFA60E6653103BF10422F0075B496C585C7EA4D4352FAB75ACEE263BADCF6F9
-685591D040EA6EF2F860C23E9E27D70C0BC4BDFE33186B4D160812207091ABFD
-250125F39A7A3523F57EFA2D7917653D743EE04489ED6317AA5345C3B2781902
-7A3A34E56A50009A8764F9539ECF7203CEE399698A49E1FBF816243BA11159D6
-03611ECEABFC83489227E8F58A94FD5E4061CD340BA09635BDA9183B36CA2A9B
-6119D7E5C2E55C82ED7A700772FCA980B8B95899C9C0E0AED713F04B18AA0C86
-0E00A184F14699C7AA23BA98A9B63DEDEB61826EFE3D65D5BC7A271618E9C68F
-91297E07FCFBA5E244A20E27AAB110135F538A3AE88EA6A15FD2D150E6E9EA97
-03AB24F289049B952E80E28017623E6DEC899E4E9929C668A1F8E600BC62D9D6
-C520DAA727C85C35CA0D143AD7D555615D2BF15B25BED1F8B0B19C0A4F982514
-CCC24D25D5E5DA979BE412A17E89CA231836FBDBF9F20EF5A4DCCB4EEBB22D91
-88736383A898B0C9B0D6A2EDD43CC1D15143FB8348646A34FC8C88262CF69B46
-F4C60D1AFFFEF4F6F1B008F46F1581BFD75A8F3452090D88F9DD2C8B71970FB3
-F77DD24ED084CCE11F587DBEA211BCC08739ADF1FF013BE242CE5197CD4E1E88
-69C1B9ADD4AF06FBCF316E3EF577DD728B074F13D2D36727CE498593617FFB07
-D4992BEC67799540E0A435B286027DC36F49CE3A0478839F2127DC4AA7289AD1
-680396D0C5935D3DC5582E7A8C6E7441AD77E332BBCF11EA2D9F5B98920A9B9A
-F042877D3D6B8908C9033A1E95F5F8A1D36201E233D7B49853910A59DA98B41D
-CA3A245A829395D38B9CB7717C2F2FA5D1E334B78CF52DBF6EF8F389B9C32DDA
-88EF621E3F8D25BBBC544C48EC89F3B799FC5FC1EEED325FE8AF57981321B9DF
-605565A2103A1331F8130DFBB446FEF44B5A3B8F51BA6A9EF8569954BE283FF0
-6CA7398BA4E94CF911E29C5BBD155449877263E8C348FFFEB953A6669194D489
-801B196ED4A4D09D5665D19185FBAAAC42A6B7F1CED08821977D671F820CD8E1
-1B048EC8C8F7706F7026124B2132E7EDCA20DA643CEB0ED271EF787F63F45751
-71DA1303BA5194B63EA9837CEAF441CAC7BE73129551A5EF0FD3EA2BEE24C866
-4FF43748792CB89A5777AF5968FA716C3A0B2C307341FF0752FCCF88558D837A
-3F803F870C88B1971E84AE575DFF2BB81C97E9900CECFD4FEB93F67D42AC8D5D
-2DC5B2A044C90C31167A11C43DDB568EF592E9DA606B695F4C59418914FFDFCD
-DDAFC55B36051B0EAEBADF8713489E46C0D94B3911FF6BC967EEF7099F8F2094
-E1BD2DA0C5C1CC24199790F05A6182C0D83D245932DAE9FE5DD1F6ECFE77948C
-B97C5DD2A61346B1C3592D42BB2FDD14652267A1D399B723518AAE7617042157
-35B30783B6F9F6C059CF1A7B3577A727E52A1BB0643D7C0BF67205BE4F9090A9
-4062BA511DA13FA80C389947E0F0222D29794B681DCD02070111BFD5E8E3AD79
-06AFDB28BDD7ED3FE5B86BEB27F94F7C68BD6D8D373EB6C03106A34F9B6DB854
-216C6DDFEE7F7642A33AE5CBFB043542EEAFECB6562995578C5BFBB15B6A9235
-0E85BCCC74F7202493510425674C34FF7150D22A8FF7418B1789C5A7F8B2444B
-B1056D574DF0F6EC2DA281D13C61CAE602135D72426BD0C10B3554B9CCA9E1D4
-CFCC6B1AC5AC072CEA763BBA2BF91679112A47C740E21AD18A43847D2338E3F0
-8F685971CC0199B0E8F68A9BBCD1E5AE213CE21516D94CF159627C60A60BC1C7
-2938D70601E5D0391DBB1DFE8D8BF2E7B9FEDEBAD7E245B1CC70BF69A394EC0D
-C86F1D3A4BD9F0B7E0B238A258D61F0FD05291E77CE35AA11FB2694644494B75
-3E12679F14B0E5D804DDA98D3EF39F1CC64FD3ABF464A75BF1F4D5D0E379D340
-6A452EF024D21DBF303F4EFFE269941913DCF742964A2564F44296E321EABD95
-DBD8CD1DCC3603CE1DFA14DFD5F667348C85DDD8F7CF714364CFEA703CAAF786
-152DB61A034CB4409EE8AF81B13BD45F56891CF4B7E41257F04777C9B6166AF9
-BFC16918A7ED6B226151E1888295585D8CB5FE3BE97D9FD776E8BDA02ACBEB51
-4C473F30E82243A2456F80A21894208C5DF2EAB207C5C8A563DE6CA07B436232
-7F94C0B973BE05175B316FD8EA4389968A94C978CFEDEE8FB2190E191E921521
-A4170000B5580A3FEB81A52D2AFD9330931DCA4594B784259FAF2631B34FE0CB
-7B172DA962E55C2D6D0AF34A62E8F651BA9290699FC59B3D2D6F7F081D5E706A
-A6AD5E2BF9B7BE48BD9BC51D61E2FFEEEBE997B7347ECAF56591AF9BFF5229C2
-C80B64E30DBD1985524FAC26656968042A5801ACEA877D3607F0CACBF35E24FA
-5D1C113A04A67040C66351DE85F00892C88B3F789DCE9A9F36973E17900E4D77
-ED73F6778772868CE46933A67E3C2ECE270481D074949436AA6A94E0C3580377
-4283508E7C1B0A47D617685B02579C0C5AB29D35E34AB17565A1A105340F53C3
-350AB96B5FAEE89458E00CF4F48F691DA405B49F4D5152E57EE782667BD2C06A
-68AAAF5358F07E5348D4DC98AA2E930BE03B13E936B44C29A4E70B6860AA9ABE
-A8C80D9ED9F86395F3AAEF21FA579432250A08E7EE1627AC0F30E7B6E312F476
-B5639F37282ECEC24155940FAE2BA6FFEC523A253E6DA7AD4CACBEB2E1DD7FEB
-B6DACE84E91FF8F3433DFB96E4EE5FF73482457B9477E5DB9D80CE7FFF324F48
-CD0567C07ADD825DD5DCF5FD2F657F8FE5EEE9FD2085A4677D7D5F986BD1B97B
-C09BB3083A8D33C725D5C204BFD60BE38AF2C43FF1EE18574EE86EC025980B2F
-C46E094A91F5E78929BEE0367D8D3905FD48B09714A5849CB4888A35303A4FC8
-9D591D99A57DFD9A2C914BA4444AA978B399227B218BE378B1DC01FE7095E70C
-F107A8241B9EDA3401512474015F3FE6D2205F40117D1A4869FC11A62BA85327
-5D5707F786085ECC72DADB653BCC130918854C7DA4416A7EDB961B6801D4990B
-7D8037D7D4A0E8522DD1D7592C43A62DEDCD9F50636E4F6DF10DC2DD03416EAA
-DCD800AC4306E346CEE57375625BF7C100C14C0A34E18E84B6450BDD689A10A2
-4E54FCFA7B469CF4F6E9B0A0322458184F95F7267212B7D520E1C45639711B2C
-5E5CF282A8E4242787B5669D38B15AFAEA40E319269D7D041647CFFBCC1648E2
-9D0D4159A1EBE45D1D8D5140AB03BD74A86E9BAE09180517EBF3C5351BA94E38
-44FF8E4A42277493FAF469E1BB56F6225009B7A4BFB42D6F9483FFA863C65A16
-03A9ED78D1CB105B6524EF06B6AE98A85CC97E1FF95DFA981828AAB11312E41B
-E1E8B94F29FA40B92B6C648B57E8CC1C12C8F64F19235F84C0FD8FCCD0B8F64C
-173B4671B48DAE6574D25124C400CDBF7319EA639549D6D63F5527B96AFC8102
-04AC331F5A6AE0B9FCA8ACF343ADA120E115AF74E5A370D962CDC2F03C962484
-00896098345E25958EF5F1E42E5404F0CFF25779F341825AD0CA60327B8B4EB4
-EBBE98C5901A0AB9947C7A9ACAC2A2D52A6854D4215964A9B50DC84C35DA9C80
-FD37D7F45211DB5EBAD66200BF86D1B7DDE8B8CFFC15699B57574F41BC525F44
-92D0B382D0EA1F8B260ACB4F6D20F6DC2A8E19738E6D6C2C8F8886F34346900C
-331081E46C0216245E4F951022FCC0AE71C321D72E9EE3F8E0BAB7B50AEE96AC
-57AD3E7E80292D374CC5CADA3A58EE42B8E5AF7E0857A2D7D6A49C3CCBD5FE25
-30CBFF7D2DED0C09A3465DB9866A44DB92510CC4FC7FF6A5FD2D7B9D98B42542
-E3943284FBC49A9F4D5D29AF090D9EEC1BADC848B2A1C3418DCFB8621A019EC0
-244B482A7756B7F451C8F50E639955F0CFA11667E84E00E76A14E3995BF3A17D
-0D6220F6063DD3A440DF1345FBB452CC096440BDED6A66857E5EB9F7ADCBAE97
-D6BFC65CEBB5781075053C8B8D01810DC79910A61DBD9C2FE70DF8E5A2F9B01C
-B28DBC9D078C2D461015EC70BFD21A4E8BE1D627F074CDBD3F121D57EBF35F6E
-EA5ABB33EC69A1791DC55E45724A16B26B4B4CBD0A3B391613AEC708EF590B3B
-94807CC1AABD633D0190DD6DBE07559EBDB8D547A8700245E274462234B7DFBC
-3AC8C5BE2754CAEF619AAF499BCACC517CBBBD772B873BFCD1D77D6D7AC184EF
-09824F8C93DAD1EAD6C3278DBF5BEF592944D1C0261986E5DC0E928521657898
-85C67595B54AEBD0753A2F13B23A7CFDF5B0FFD61B5DB71D7AEA9400CC22AD68
-510404AE571D56144A1CEB5FDD07EBA70373847ACA6D61251C79276E21F3612A
-A66EEDA92F9531A9E80120E754C45EE33932FCB63558F0E4436A061972CB87A7
-A78095AA583A672EFAB142684CB93E8F97BC6DAC1F943AF65430E5E1A7B589FD
-51ECC713BC2417FC2AC10748DF60079DED68C55EB78F55478C2847AF84A53D10
-22F21AB9BB80CF8C65DA34CBC16EDFCE3068C4F17B96FD44FDC30BAF101F4A7B
-0E421DDFC25470ED373BEC0FACBE01A0830E9F60B68DC014DB248AB9968C77CF
-AA5052BBEA891A9C2C153FEC849383059BDDD75CA572F6885C653944F04E6580
-3B5471A73570B36DF5BA539AF4CA561CE3F121753378D24E4F066126E9407DE6
-75CB455EEAFE31541BE8D3B11552EEB7625AF8F44AFD826CA6BBC0961EBE1E65
-D96A80F72079759D3913CC00C41AFCC2E8BD77E4684B0BA9A046C45FA064D462
-27115A711B5741929C99FE76799F3878C83DF3EB952FE3701DF6D1DD9269F45B
-059DE4221079C53EBD185834F20EAFE9516AE2542DFC07ADE444E2911A1AF742
-50DCDA2F35533B6ADC400BE3F1334BF03DAF8507F1BA344F37A62C93ED723B99
-85DD143CBB2FF1C6CAB51A3D53144B5AEEE8FBFCFD7E94C1BD65ACDC1800AFCD
-F10802E54F97AF281E8189C20B7691464A509E04F50780DDCB29E6880CE6D021
-318111668E4E00A39A3E177FBE919698F556F36DF8ABAE00B92DB57060E7C37E
-A7841F824E33CCB749A80FD9906056B3B675D2965EFAD87CFAA1439784A0C172
-F30E7C32DADC9232567FEF3D544A73C9502A6A805FD2AB6F086BEE1D4704EF0F
-696400C507EEE8DBA68CA9EA8BBA9BF656DCC6138E2B2E5A27F24191FF71F984
-6AEC38E8A427393C96BFCCAA69924DCA437B5E18B17530CEA4D3456C3D857C11
-6EF03FAE1BCF595125912F129F8713A2B5483500F099709DA2E78B87C409C6C2
-5B6B4C5E1C7FD85F23DB9B544EB428A92D63AE8DE6837479DA0A4235C81554A4
-CDEBE0A13601549E5E9EF9CC778392D8ACC6CBDF167D511A3E5212B2FD8F2093
-349FFC2843356168A97050D6BB94FCD5E51507C5DFEEEA78F8F78F3516D62215
-7FC703FA58AB15A5B6E08B071117DCD73945CA33F0E49E0E02D57F82A02FA6BD
-15946D42D5AA118078554A2F6B33C43CE5C86B9CD2E11AEF151F68A9DE431437
-358CFB4427C4C2443AA9B73A890EBB5211BD3004FEC19B09A0043B9A48BE8FC6
-D6E2B4ED3BF497D0553CE08B83B3D13C77A7F70B385FE049A2D8EF336D54DDBE
-A35505E57CBCC6173959E05CDE1CAB7B97FF8D3AF32F206EF37D821B92D76D49
-7B17D31A9343E448B1CEBB51AF0DCFADC5937A8CC468A4A26A966DE4F7A71B5A
-8576A783A64A4B9FB795F2BBEC9573F88772C68FF15020AE3F6B3D978AB61926
-B0DA27604A975C2DB6421DF604FDC5D2F639ED3337AF4E6533CA348CE58DA987
-886A0BB3B232C4871FBF95A636E90AEE93B13E4EE6690097D16A66553687007E
-C343FBB4BFD329CD63146A11C6EAE47383B7D5ADE4599D51F7ECA6C6C8435B49
-BC4AA33AD40D70CD0591274730AA3116A0BB4D9580E15B10358EF74344A35DCE
-EF7930FE8AC50ECAB81AD910150E9D909671965AC826EF3570EFE9DCD2C23E3C
-0686D6C958E81513EF8E856375EF14910FDCE53A2CC75C31FB4CC98352E497BA
-66D5B5F02683ADA1B57907FE29E551D4356DF800771FDF6323976F6CB8D41A72
-BB0BCD5BA1D0C5DFC7B30517F708580BB486D8DDCC49F5122454F7463CF54E4D
-D8FE3AB57B68D7FB62C600590366788558933F87311E6FBEAE1A0F77A01967EC
-C97267BB19A46D3574B49906D23318902F7922326591068746558FEE0A84D83B
-F553D2C485CA8C37F1A40546D7684B92D7C5DEFE312A823F117A125FDCA90648
-CC648B33DBCD17520460C89E0149E00DB2D018843F4106C35431F9A26A279016
-224E633F16FA09076239E82F6F5B101C9A1FE4AFA629399AF5CA419471EA13BC
-0610CB10DE3609E5417F814161AF869D9E4E053BA22CFED450C88E540940AB0B
-A933F2D9C989D2E00E3D3537F6377CAB0F7B6CBF6312D35B800557E269D519F7
-8092C4AC931BDA19F7737B176E4820B9D3F72A9B0E0773EF91F82BDF812FDF42
-084AECAE788D879A6FBFC2198334B437122D1F5098214290C17D63C3379D6C9E
-79ABEAB518F5BCD9BEFBD6FEB556AA64BCD5B5207541D34DB8D0036EF24AA183
-84A2D7C035437266B36FB3CDA8A80E93BCFBF25418BEEC672961BADDC36AD323
-BF12C931B2439722796F929FB1F68429124249DA2A9276D8F2420F82A81FB0C3
-DE6EF9F4F306479322D9A6A9278B1A9CB0C1ED12B73F6435048BBEA6F5E3C414
-88E459D86A9A52D4D74339BD6AB509EEB4AB7E567E237202C8F1FF0B0AFAA20D
-CABDE3409F3BE6541A1ACB557323CF3F9ECE336FEC89C4A041E09718761DE065
-7F13F42CC2ACD83037AE441247F1324F6F14AED5A13BEADC8A3F51557B35BF5B
-E2285A1E0A374E34A64DFE6694B723A02C7CB4AE2E3AA3D97EAC0B6CCECB40B5
-0CF9DE0EB8E4D9A13177A3D9E835EE742FC6479DDDA318B61AF49CB3C8DDA06F
-58568CE8468B8CB056C78D6B89957E29003CFC6D0B7BDE6550691FF6EAE5D63A
-7E83C873FF1A1EAACB8F73E5DE34A1EE71B6DEE81B6BE216AFB7670DAB35ECA5
-352830B18099FE5CD0DB566E3B6ABB12DCCA21779961A61A89B211D0B0139534
-9F8222ED81C4090FDC4DCE46F82C569A16182B126CBE5DFF50E33D9AA1F3C1F3
-8B3F8454B3B606A17FF969A160996FDEC3FD7774D7496C56FAD1D7EC85FEA79B
-BD89389275D701D5A0B220F74AE2744358FF391E70041C53649E42663BC79B0F
-896ABA484B06532BA3C542F44D04780B31793DC3588A8A57A3F43BFF32E0BBDC
-E2D5744145FE796ABB1DACEE440B5B2CEE966312E8668233B7DEE86E1662DD7A
-CA7ECAA10F9ABBADD26A5096F87FAFDC93647EC1246A1A01F835B9272CFF293D
-75111A98794F973948CD2E9256B4C11C35F648B8B099BA239F077B790BACFA13
-A7A6FB6829FA299A664AC53D866D59D69AC6219237315416DCD7634A478AA3F0
-CBF14B01440415FFB44B955CE1B7E4403B45D0C5F84FF1F94BB4673394EAEDC5
-3334D8DF5FEE387A7E170682950705AFF8911B9F82EB6D75CCBC5E830492BDFA
-78AB0E19532F13B0A68EC14DBD57694CB60734554C837EEA049EE19036437FC6
-2A8CFD94301FF00A06730103F87A46F746B141347D6A519B35842AD0F533B692
-86DE9040E12797E78041A50387FA904192917DE35BD56D767FE6D41A9394E5A4
-3E113A087CBC42C86D71672C001FB8E18AE25E99C33FF1FDF1DF12F38F2921B7
-2DCA18338C477C2040F4BA8AECF2933CFA0A9C08AB9516AF44D4197194E3906E
-1A47F428E178D7E9F5DBCC1DDC73D8C96769B43046B75593FA8FBE53A16DBE2A
-CA69312A8F4B26C7E75A2971FEF9DB92690FC43A6A55B13B6A06D53CEAFD2736
-E2C1244F106FF2118A016EB4C1FB8D76281CA50AB56F783416BBE0D85D43F6DF
-745611F6F133757E3F657EAB60D952C6769BA31027A604DAD8C28E746CE6E01E
-39CE1A5D99E826235E2B32D8D9F39ED7A90A852038A2248C92BD4D836F82DCB8
-72B6BE7EBD141D9FE4F664FB875B0D16F4DC72FE7EA927F9E9402ED47C63B5C2
-9295261BE144D10B4BB4B49B708FEF3808317A02B9D4DA689240B68DEE3E5A79
-6C5362489025315A8D44D572C6A7866C59052C27A691BCC073546E37FD699818
-64D2752D7EC32F527664CE2C218DC41BC437CEE5A744669D332CB3D0C0F32B32
-42CA982706D3B4DA6BD9B1F4E31B44BC1F9AB9AC4C26DE5B1F84392FF8D9503A
-82DCE35E7418D0BB41858253C5F8EEAC5DEB99B729487524F3FF9CDC09DD6242
-603DEEB3E534B1F9879172E5122E7C399C813547B18709C6C42482302F841314
-45FE78B4B6AB40969A46A5857E36082EDCA56B0C50F70B3C87CBCF086C2C2C94
-820F462360D116D7CAD3E24D99E9B523295C6920F7FC801D94973015C60D0E10
-A1529CA0BBEE521D4FE2CACA48BFE918170B32AE3013A028D48BE905346169E0
-090FAD0BEDDB85C78D824A7F23BC4E48CCEDBC8B1DF39F81496AE27A92FAF47F
-6A01247548DF90DBD56F16AB39961D064CFAA5C82C662E7AA737CEBEBF231756
-39A36CA5E5A62F64EF5974CD8E878B7EBE543F170BE7FC082E847F3E46AD6173
-8A3D3D5509D23B3F27372DF2D9794E76CDB43A7AAB0024A38A6BBB824BF60EE3
-FA578D4D746EED9C6344D9735AEFEF59ED9CAF65C534B2DA378A122649A112FE
-89A8507D4A61C356E9F170A38713B42A943FC535455FFCE9206108A3E1F8EBE4
-B0BB08771E558284CDEAE623C40610CFD957991FD27124272B5C36EECE403798
-740F708DC51CB62AD14711416E25EBF4E4BDF74C53268EB75397EB464DEB602C
-9F61ECCDEA568F351CD1457CEFC102D13673619175454C90756B98DE424C6BFB
-11D80BB18870F0474B4E41CA42BD48D8996E285EE8C5356AA4624372D65AED26
-E2CDB074D2F14B6A1EA9B76920EA90E22934E666A7DE2B5A083A11809B8488A9
-A4E930CE3953589341A4F9DF1F86241E452E703149D640511B02ACDB01283A9A
-A3A16536B09D018CF80B684E9F08D1AB27AB0AB47F382032C18946141F037849
-CA7ED0FEFC3998D9F8EF591811201CC423CC64CDA38485100143873139163F48
-7BB59A6AF989740D1A649A6F9B9EC50C10A9B2E93437CDEA9D314DB847436614
-28CCB4CE02662246C2424148790EC018351AA113D9A0A2E70FB46FD54EA84DA1
-C14B964468D4E42D75581F9668B83D4B4703C855CE8562BDE64A942C9D78EFF4
-9C79340157672D4DA55FC4018697AF3EC3A9DAD346C87D5CE849793C7ECA6851
-46A3B287AD6A9F004334F05C9ECFFE90B6D9C9AD5B41DFB5A38F814C4CFDB508
-2A6F5963E93E3A4CA88EFFCA9951C4D52E82C68EA28BDACB61C6AF6DB220C48E
-9DD4953A24B2CDBB5F37DF257178271BED7E6AF0A3028699F8EFE9C69A5FC3FC
-54A56483531E7925A7AD6402D32E46B7A839BE5668E4292FC083C0B336A6CC27
-9D3F91BC3985070ED952B979E9ECE9A5F05322FCCB71326DB47C2E464E453FF2
-D41606230F283D1232EFF84C278E317C6E7BEA6B0B2379DD90E7D4070C6854D7
-8A349C0EA008336F4263C63988B242B2C3BBD238AF6EDD472A4CE102C4A2BDF6
-89DD29D112A75E1D48B1262EED0E88BEA7CE6105280716E56E1867ECD075B36A
-C7129CB5611FE389EA16AD4F1D398DDEEF906EDF16D09561AB30FFE827AB7306
-F2E75BFE704EE8FEC256A6E56FF64199038C006B9BD322662AAA57128CF7C46B
-4532E9290A0BCBD99601AC41C939B74C5EEF26D4B8AFF2ABCD75573B43686B6A
-824D68C5FD86772F838F349C0EB447ED12033A2E0DF8B1282B0B8C4F66A7EF7D
-54F88CFB199769DCDB12B4F9E46BF041F9D9542BD25275751456AB8DD944EE33
-35B4F89ADF5908290E543DF55E56C4A4CD30765DDF9AB61F9365FCBC56E92FDE
-53A26F582D1009A91E848C7730A7307CE2FD2633E10AB2810DA88D73907C0174
-23F6A857F749656A85071EB2D42A73210FC95927B3FAE880BC3C2FD9EE456DAB
-E33B86FF95063E1666764B157F933014C1ED77655C2C7CD2F2FF01450844AA5D
-A2B6BAFD6689DD45532F38C9DA7035D219F1F59E7096B4091E7577FEF06A8EC7
-68CE94AC36018C7A4590BC0B23EA42970F107D23215F006CDE4E36909226315C
-E81EE4645B0F9FC187A389FC94B0B88A2B8BBD6C8584CE237BFE9A25115C3EDE
-FD7AA4B8E8F33071785DE12335BD62E18F3573B74A881A701867B7B72B366144
-4ADBB9454946F9F2815E119670AB866FA07AE46D39C6D94C1DFC73E43374D8CC
-BF8BF2660A5CABD711BAF00313DEA3E9B077F1440935AB4FAAD4EA04F3199E9E
-DA2976B9916405D4C706652477399823C5D2F1C652236FFF052DC53A8500ED33
-F86DB117FD01DF7F865917248A215F2A1E8C0C801F8773BAEE0C6BA10997D577
-D80D03428997EDBFD37C36BC606356F57E774B3CD4594E0E29CBD217101791CB
-08FE37F177D201DEEF1A08EE67CF5E402D7C688398493C2DD29E99ED397477F2
-B0872E4228A45DFDFA571C7680DFEACD9CF6184D27FFD7D6DF754405A2CED22E
-C26F9B2761463C01F64E5B4C7D1746F62642EBE648E32FC239320600690919E6
-2D9AE66DD5A552F2FDAD74858A8F87FA7653F1C2FCDB8E1F4985ED1405A5F27B
-28A1C0A04E7CAAB8BC94160E1B25734A95289D455E6A64EEB65D74C76B123EAB
-74ECAC9327F4A57D757158B51BD17A0C0BFE6251FD317AA030E211B10C9B5C28
-A617482DB21157A1A9E2B43CD32747D14DFAB92E08B9E745939F4A426F9A3E63
-0778520D33456ECE373AFC20749E267FCAA88F092FEA5F3E64BDF5629CA57F25
-28FE3F1F11906E5C583099E5A110946533A74100E32DF1A793FCF352C67CB948
-ABD084CA35EBCAAE875166F66573B5F241CB15D90B74852307D5
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLRoman10-Bold
-%!PS-AdobeFont-1.0: PLRoman10-Bold 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 31190
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 694 194 0
-%%EndComments
-FontDirectory/PLRoman10-Bold known{/PLRoman10-Bold findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLRoman10-Bold)readonly def
-/FamilyName(PLRoman10)readonly def
-/Weight(Bold)readonly def
-/isFixedPitch false def
-/ItalicAngle 0 def
-/UnderlinePosition -146 def
-/UnderlineThickness 60 def
-end readonly def
-/FontName /PLRoman10-Bold def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-56 -250 1164 916}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF105A25E1BFC9F2B5D2ADC8239CF6CEB1085A5D47
-76BF78D14753F998C47F4FCB1AB6B7595496FA51AF12771741C525CC727551A1
-C53B99507CB5132343184F19D28615DDDF61BA4ED26FF746A8DE2D895CD9FBAD
-56CCEADDEFE9E0D07A01FA572FA8E90427DA946147C08161A3D49C534A5966D4
-9DB68B43E54B6ABCE3674E951551A86FEE8206E15D755FC96D3E006D6BFC1C3E
-DC4557CB035687755E7896FBBDD7F0E8FEB84BC965BB3A156AC014EB63AFD5EA
-9F86295B06A8954DF1FD0F5C49D1E4FC45E07F61035F23768667FA661FD8D83A
-F919B5E9FC42F7F3376488CBDF2D84189AEC29D3442963C84EF6A185E1FE8B2E
-DAC61E0AFE78F39DE16CD153A9A5521BA6235A41981D6FA292307BB16FDDDC1C
-3BA6FE06BE9366B3243E303CB1134E3301899D29B46159F65190979324826E4C
-C903AC30059F04637AEAED972F75FA7E60FD83CA6E5A43206587E6329F6CC3FF
-5895100355AD8F4D4EEC9CB5330F6B28D7229DA29624B70E833AA2943C05C912
-B7B60343A7DC7A3F6F1AEA9D868237E30DB8618BB04B765781A7EAA080503F95
-16B125739FAB9FBEF8523676B7509EA7AD0D2111E34025D45A68E6713BE04923
-2B3DF2EE4EF47A38B0D8C545F3F85475C51BE22597651714C1A4FD2F200995C6
-807B6805524A6D24289FF6CE2EB50AF4ACE16F148480E3E0A4266097351A03ED
-AD9D7E84C86C4F5E7BE57336A0CC4F925415F9F6B65DD690FB21D5EFB414B7DB
-80614C024373D7F7E68D33EFB93F057E59608220CC29F4A3B54C712E006E1D6B
-D993668999C3A856C017533B7CAF2195E89F96FEAB7D91BE5CA1D915F241BB4E
-E66E1D478AA9DD9E87F5C8B0761AEF5A91CE7EB13407DBF99FAB4515DA29F183
-AC857EB50E62666F64930EBB260229711369CEDDA424A91D8D42E19D196B44DA
-81BA1B9098DC35CCE4573C54F6813B02641C8CB75C522A0ED1925CCDF7BA6D06
-1C34D61E35F697E4A448DD19120937089808561FDBE83ED134AF5107488A9723
-63BFC0B6FB57A75B989432D8A030128F796038DFBB841803231B3D1A1A4BB33E
-22B0709D275570C37263293E6F25DE1A406FC80BB622CFC49D6B7D6D30D0F7B5
-12AC417E418D0BD296B2BC46C1E4ABF5E2D8428D248B12CFAE6A804A5536562F
-FF26C1CBA38C4FE099F8917C246F8327451148CCB23B78527E5F6729ECB4491B
-34132B6113E63B7180C5FC979D625B6D370D36E8D019AD43A7B8ED81721B449D
-67917AD7C9EF1E123570A93F53E03A2AE1A3CBE32AE587A838AB8E337ACE0AA7
-6DBC3BCB401D48A9512E4C2C162673270BEA1042D124477238B826DE582A230D
-A9890E458B8C6A10D1285B1C51570C0D94FD0AC193F8130DBB5F84D6476F5DF4
-B4DD749A33EF353D83D7CFCA9A321D23CCE16C49D5B65EB42AC17F004F7DC1CC
-C96ADEF11D3EAA6D5418583CF9F199EF342D909D8260BCAC2F6D8D50B5B60914
-009142D59F7361F842E6AF5543B264999DFC8C1AE598D322483045C74B8C5962
-3576A210A17848CE8BCC3674D9A938D7C66C1C509B8E4A79B7F9C1AC2ECBD3A0
-E7EBD5C9187F887964AF85CD87ABF45EEC4E04BF350182DC28A70C1B3E372E65
-7CF4097243AA2D200DE755C3AE18D92FA0250F62BEEBB6F14EF5E51DF139A6F3
-5ED3A8A74B81FF539DEDB60DA4FA3D729000A35317623DCC6809C3475892111B
-D952667728887DAE7D347AEE9EE0C6DE82DB06897E44E38C9E98E488F3893EFD
-099E277EA8A4697D0987FB01A110C1DED37CAF49B841976DD89EB500236CBAA8
-4C2435D88DB6260FCC2D27E03848338171AAFCE43A4561E4BDC9BF1BF4BEFF3E
-8B53097421F602A18C94817F54639AB84BEAD0D71412F8FABE5A24DE1560CB94
-9D746B5C33BB22F242D485368169D550059149EFF10496C9162F79D35DA71EC8
-997385844F8D58C6AEFFB23D9B4DF868327E7BAA061F61B65201FDC5744FD880
-0582F1C54AB74AED751F364DD9BE61C39F983276381302AB55A2F3ECDD36C59F
-299A93FF29FD80F22BCF2A9A4F01CCCF1E10C2DA4065A30828BE7CEE911370B9
-CE7E88DDDA179510EF1FD813BAEF4B930DFF8FD5B1BD2B1DF4014D9BCB47A72E
-317F79D55A9417BCD367D9234C5471ADD144DD1AF3A76EA8A63CC475F5179A8C
-18ECC0D62BA973BEB5B80B96AD9E9C4018AEF735F019AAA33799CC40467CD33A
-BDA7E803F7745E4C1C988226D1D7EEDE4BD0A7A1833B19CB43DEB2538341FA4D
-65A0A885D72FB775CE8B716878066CEEA84853BD9D097E71411511E98B27DF6F
-4C6104916EFB6F3F2AC969A4DA6D49EF4FA7B5AA479980F57705D0FE9E419307
-A77ED0815842F507F27183D8A5D55EA53B9D72DB9DFBA8D910331183571965BD
-0DBA9A840E37A7D4CE19CAF6881D65F8CB127FF9339190CD044880D04A8313E2
-C113D52C8ADDF2829CC7205928BBC4283D1719B702D7A1233DB0BAB179033DA9
-D418C328FFE1E1502AB5C9DA764112E9C82CE75C57C2E5AB45A406D2D87D17F3
-348DE0B66F121E76E6BD1FF6BC3CAEA11F7E0B2D9F3D3991A68CB9F5399C5CA4
-9F8D79C9DC04B65B020926BD092AD872B158F05CA09EC0F50AA7BC09F3067A7A
-A6254F6DBB9A3BF36665834C8D6B85DBE998CE526A2DC4672AFB01117A84560E
-31456F95396A4AD4E01789D7C44BDACD73329B02077BA34720E87F8D55257BB7
-530A2CE5F9899E56D72455378C51B46739D055183CA8800E0A79E01BABF2184B
-C4177DD5A9B869567B7E0DACC95FC3104F8FD850F4F7E5F3A3B32040409E8490
-09ECF20D3F7F0FC69F3214C00CEB9AF9F5A4C5A920BA06CD8BCDCC40219ED34E
-AD309DC79246CEA3EF9F3937F3ACCB52AD5E151A42CBD1A80DC59107424BFB3F
-05949E921C0089ECF5282E2683BE378FC17A6E3E30FC8A797CFCB0C90A83C3BA
-B4D2BAEAB95E8A590966A1F7C23FE0E61A1017DB919CEAB5799D099E451B9938
-B053874352924FFFE06ADC0596DD1C07F98D5D2F7156874CEE7459BE20D6E99A
-DB61645A21B4DEA72B19A5DE611F98E2D6D1DC621B8B40C03330E4CB6113229C
-A997D9356D87A63A6E6D2CBA7207E5ED2A8B5D6BE90BE4203C3F857F759E4697
-0DA5B1B19BFEBA52AA4C43753F00BE4D09A41E15D1A960EB9E3158BF0C92D099
-DC93D658FCFD4B0A8821B811AE3C8DAD4CF063DA31F7E8E2986CA4D81B07EBBD
-6D70427D4060323EC6C0B1D4F0D14003C671AF4B2C8202C02B110FBD21BA4CC1
-F4548E3E9704D01550E11B1D1CC97A59F5B2264D35F9A3EAC3929319ED28A90B
-37E3FFF62390EFD808BDF9537CA9479C76B8DB8FDA7BD20DA0C263D5F5029A0A
-CB527790B33C9B0E9870FD873E94D4A3CBD09FE8EFA6FA5694ADBA674280C7A0
-C102A032465003A5310EF846E4B962C8046FB3F9AF2A670D888F7266D4DA6D40
-82480147332F31087D2FE5445B295C56A2FC16217BB5B5A44C3B11027C7176E9
-3CF7DCA4E95529116303DF6A79C301E00600AB38A00EEA61310B34A5E042732D
-2A5A07070351CE3D94CCCC38CA05A3B890E925D744B6AF48AAE86AF266EC3AB8
-5890BEF91F6A0402E4C9E457A92854A526D1EDBE28594BC5F2B30B2D1C0AA610
-8E674ECCA30C45555CA2D11F94EFED513D3744BF7C85D411526108BE7B72351E
-48E30F6EDA6B277239E5E75BA397998E519B27EC9E29F7D2117C93D6155A8CE6
-CF4424870972FC2B171C4C055458665B88B08AFE9C1EAE19DF07EA703E6EE873
-EC04657166E98BA573A3EEA5967F58691C47B09CEBE352FF45D653F34E9C61DA
-16A1DA997814E99C70B6CAA983A119D5C72C143446A1F1384FC401B554D99B5A
-53378D53978C4B1DB734A10BA4315EAE6637704C683E6C590BF2EF885BE65A9F
-57662C785DE0B832395706406F4352C3BD0299E2D51F2FD2AED148A3DFFABC32
-2A2A3F62BF60D6F2439E2D50DCBA8DBF9A98E36E7F3CB0F1282761CD321E25A9
-B0771D2CC29F5BF67E7591163219389B0F4BEF7935058ED16528D28E50E37BBE
-B1D1554503645C1052CE94A55077C7300F05F142F0EF670D0975D3E512F8520A
-4F7541A9D9A7C8E66911844735529060B541F6E2706649A38F2345052550944E
-73B0CD2720E2E9EE55B42F75DA831AFF5F4A1B1587CE8B070FCD6CAD74138969
-F2C64E0D04E7A384AB792F36A93039AF47F5F301BC6859E75A2535D014B9A85A
-231737A55533C8A6318928AE4F6BB7D73551EE33D4FABED8EE7952C3AECD739C
-9C0F9B0C800627DDA0D25C33B62C5EDC02610D4A348BF572C78CB30A2F939E91
-71AF69937EE32526B0722C162E655624906DFE47F66A1EF66EE2AA37CB4120BB
-5CE017FCC070EFE541F22CB595D2E55E6C7A52C3C7DA8948ADFB24D679C3FA35
-3EE4725DB5DD405C8CE39D8C2712D7DEE63C22CE01867117D1908D958AD0EFBD
-5C6CBE684E8993B9C48429E96ABC0D85756EBB96B502E82F60BDCF13FD75A52D
-505CED91635094F55BF2570F9211FAE9B3691A04D0896F1A6D409FB13CE8590A
-7BEBAF2770DFB333EA66621A56115E2E7A1763D775A7AD326589128EE1829F1A
-1E3B8FBBD4A78F8A01F09263081B8BA278BD0B7D531AA9D50B72A167232A5C3E
-69EC1A3CC2370D8619DB10C162B96E490193208D7CE9CBC4EB12C2BEA2C26F76
-8EE4BDC1C612B31C7A4A924DAF743E8296350CA4382200124B7C22AD75592BE8
-CE7BA0842EDE36A1D32DC13EF79CD0334D822B4F4FF52A35DC39B445B55318D2
-00DB5122520207570D513B06AD9A21446882273FB569F8251ABC9287517EFD31
-1812C967F59A12EF2385A7F49B1E33AC0462BD394555FD4892363909518452AE
-28C283128602DB2E36B26E4C92C4D48E3C976E64C24E8B2C638B40A5DE68CCAE
-80B0FFF820557C27F39B6113A62C11D64ED00E224CBEABB4AC456B56C6235E20
-7E82071EFA4509598A6E3D04FE29E1CEAF4713263A0B11C7D838FB46F60D89F7
-CEE7C5C0D6C91D5102F5A4B0F09FB9B43D9D05D9E9CD6D1F52ACB1745231E213
-BCD4A2FC290AB05B0BCE4285A33BC2A9A8EAA8989AE8BF9E2E3401628296A8C6
-FC1D3D14588E07EFC19FB4DEA090AD58C190F60FB936D5078B8FF050F767A53A
-82F9D8976374F582C1513B386DFC9035C49528CAB649B6AD98F74FD037431B85
-F88956B5D698353161B2D103402F2BB0FBA01033423168BF615C33FDCB30CA36
-9A6C9857B81868B25F5E3A9B19FB70A20A4A2E4ED6201A0C74D322562BB5468D
-B1830B5F72431398040695CDC0722BEC75EC3DD979FA99344F34C69C09F6B2A5
-FDCE116D38A531B0C6A5A4AFB79D8A7063FA5214F3012B43E80B013C352EAA05
-DEC5A6772F6AAAF3D526A95DBB4FA2D09E524A75515AAB594A2CE70FF89C0248
-16FD5FE2A0CC6D6BBEA5E489A740D461B542ECC7092AB91CEA4DFB1C7C768210
-5E23A374BCA91885E747274F31E5C64B7A397FDD41932F2A16CBB052084E3E24
-90EBDF90624BB22393DDB90DF1D8545651EA776CA13D046B0ABFCA115414EB46
-52911C21C71EF12B865DD8DB8B54E7B0AD52BB9A04C1A3AD3827FFEDA3DFDCF3
-BC90CBA8188EC1FACB777CA1C5C32CC0FA8AB3125B0ACBBC32D387AE65025C55
-1AB599C3EA4A5B43EFD388D2DAB89BB947561AC3E73728A55039E4A7EA63CDDC
-B2C2AA2FD9116F5A58A72EF317F76DDDFACD79B407D72992A3B6C83A80D1EE1A
-B160FA3A167599B4678AB660942341D99178F2172D51E5FE6A532AAFEB7C1909
-8C9E2A5BFEB899C63EEDB7645170A6A63867AEA0E83B77BF5F411BD5E5E19903
-9448352F89B440C80D668FF731A43F7E858197D75EC2D18BF067556A8F861310
-0AE8E0CB05FFC5891EEA9F0E324F9909668FF731A43F7E85066F8B30F3AC3455
-EAEFC63DB890C59CDE42353355744B983B11398E7B381CBBE069E98B5DC49123
-2670D6609742C8432AAAB19E471724033995E4064CD4DC59030A1E5075D46585
-E1D62E0267C75EEF3919EB6C5635C9EA88F549F4FF7DCDA5DD6F5ABDAF12E0B1
-0F880A7996D730F9FE2F3B9316FC41775DF4F288C71B51746D20B6FEC22E6FBA
-8E9B22727AE236E786250497721120F259611D3BE08A85FA51AD2356ED33184D
-3BA70D5FB8970E912C0A2F7CEDB74F255EB3344E9524A2AE82D38AB4F653A529
-152F8B7A5077E96854439260BCC53B76CB0BD7CF8F1645BBE764E8CE87CBD1AE
-B3F08785B73EEDD5496C7EB648874EC2748E23E685294D68E286596C02EF3512
-78B15DF2AB38FE915639E033A2E65166CF72D08AF8E6C47BA0A8D7692F07A7E6
-0912138E50FB9B3B0285C7FA62B2E2E2751B919742CB4AADFFFBFC6C167505EB
-CDE13B5C46D41BB33ECA6B84DF5059BE43390F39105E94800741C67DD8A7CA79
-5C3BFF6DB885FC6AB3971A6B6C279940BB8EC33A721E686DE01614813A18D310
-CC118F55FA0A322EA09EE20EA0F98E57E9C7E810EF373A3B86CA5D3A2F9BE1DD
-E610B775D3B832A2AB360D686C35106A05E6D58359D08C11F7F211B86E827EA4
-88E454BF17ECDFCE5124A1A4F131B44066E5C90FCD461AF11FF3C6ED7D6D58E5
-D4CD38E3B381E085B733F0D46DC8A66884D9F69189DE900E73E57950F2026AF9
-C57C89A25D31394BA7C724BE83C92E65ED8F6B8F00242244CE216FC2904D50F9
-7C4D4E96EEDE68BAB0DFE4083E7722E3F8EF38A0E069A5D124F7D1ECC85143D6
-787C743E34A74471711ED3A42969A9DE0FD5D2CA9DB012A2D0028C45F255E429
-B0B5700BC9EF2D369EB96E6A51C18E0B7D11C1E8781AE1A3D0076B612D11B562
-1DC08959079B12ABD106800647D055F1B598E72D65D57A440E8EB2F63FC1BA74
-E8304F6AA6170A4D9824A57A65089E4DCAD04E977398F555DE3C62D39A3C53FF
-436B408329130BBB41E5E7A8E6A0BF1DB857B98483F987B7A0AB9EC8AD2369F0
-1BBDE6DB5D5D29A111B3A21A2C22BAFFA13368B435782155A21C5547086B58AB
-245FD1AA1D04378CC56EAA38E271F5AD173EF8FCDA96B4B4BCC8B234BEE63206
-2C8F982F7C533D161328ADE0BF280B5EEC9059FD061E3C0CDBB3ADC4A2CF5D2E
-FFAF649F60EC4C773067E3DBEB1061010A1151E984376E22A912F7DC87B1D8F9
-F837595D280E534512D611F066A0541B9522BFF9B03EB749E4C8952EB576015A
-DC4F3B405669EB8B7CA47BCFA0916B2AB84B280BC1B8AAC92CA89FB909880B99
-D96DF4CD26210105289C56119F264789527CF706F0BD8A82E5328886EBFA71FD
-7533903CE238B7253FC672484915ADB8816E25D533839F4238684B428A721307
-1F5258F29F714B2EA61E0262D25549742079FB76A1438A8DCF5655EB64342E5F
-B658F27B7E8F66327FCF51F0219F04241E4F741E77D9C6976FE371A357A51829
-C5D8B2C4D383397B01C0C2D8877DBBDDE63D5C46FD8EDD3B8ACD5BCCA5D0FBF0
-3C77A4E5605D8CEBDBE6477CEBA8D1FF0F28BBE2B28616A371CCC186DDD423D6
-8EB88F0C08E1AB4C3DF12C2203D326AF0FC6915A613EA49E6A2064BCA333F9AB
-C6130C112144D1E9BB26AC3C4AB1A54C7B0944A0BC0B30A59B8F71BDD706763F
-2B59B836E23576978F9C76D2E8823F97E5B111B184178812ECD4873088D74F0B
-7E52750E002540DFA0E09A157CF9686345ECB609FDD66F30ACD5C04833F18705
-938E2EBB9D965777BCA210F7AEA3230572AB5DB8E0878AB0236277E3EAD22C76
-DB9262FA6D18A89078E2407973F08E400788706688E4BA35AA5284CF67A1DAEC
-3971DC7EFC40DBFFDBEAE5FC0317A22756B57B2DE3A6B8038F2E5B5FC95930B4
-C58475514A22B7DC55527A93E9309E36915B0263D255A98C8E076789D6306ABC
-2674417BAB70CFC0B68EA258B56E9BE8022E717E0D3B5E7F595B112B8B522A72
-0758CBB01FF632C2750F82A557D9BF40A04BA972EC6DC7C95D711CAD8522281B
-221078F37B7CDD6360E1064DF1FA02C00CBC503EE105F0EFD56598F4761F6623
-34C6BAE583CEC27934C74B7430D649338629D99CFFF13869DA0303E61F19986F
-2BC4D18DFE52EE1275B05D195FE43B5D53CDCC0CB7051D42B2D9EFA4D1A7C650
-B85A65294CB582FADF481A756C597B046DA33CF4A84889F5C11FD913C5B90EE1
-AE09C9237750ED3AFF144833F7E02A1E6817E75390483647D9269FDF5C7905C7
-96C4D1FEB2BAAC71BB05BD07D82BF2873E3756C9A7FFE09897138C27CE899207
-36A83786208351C54A4EE2CC0FA897CF8F13B90ED37B79B5D33C3CD71A5D2029
-3794E6A79FB1AE84693C1159BC7230A9E40A5071E082030CD1F9CB2959FF37E5
-0A0BEE6B09A96E3602F9204E5CC7A9D311A8D39FCFDEE9D3C25B923F80783807
-D3778A57186403E5F3E03E6921A36373FB36ED27177033C6E827E38EC47E301B
-8DE05AD0D05A1E6EB881CD4C1DA36B97270F38342322E80461124A46987FDD26
-60A226D91F10AD11504D70201AD99ACA09A6B21C74569030270D679583BB7E99
-03ECAE0921EFE1788DDC381DE031A73D319B3B7BFFF353631E37141F9916DB7D
-4BE037550126FB9F1E56264B8E31F73B5950066BD0B6C530AEB917E75112C2C0
-914D3C52E7746C0E3DB4CF9D8D543B7145556CDEAE8D36D4D8E9B602A2B316F5
-8098D67026DA0C2E2D8C19B8CACC4E37C30782D7A8A6EC4B085610CAC9DDE535
-EFCEF15457A38A65C5598A9BEDDEF36F0C304F726C4C8A5262055B889245BBDF
-17A3DB3077685EFECEBBB624A1E5482D72781D6E552F903643A951E6BD1D24A0
-16B91D8E550F83FC8FEC7A1C50DBC13B8728F127EDC534A75C6EFAF569AC0410
-1791EE28370EFF6FAF6BBBB7FF2D7E4DA00126702255EBFA172E726A6AA3FC8E
-265326E2F8A35D7630C94B115AB564EA838A0438B847A17F580A2B8773F79443
-4138A4471575DBBECFB41C6DB983ED2BAB8405E698B49E75CB5E5355222CB222
-78A328DF0E3A05EC0C1176427E5AC9EE93489E03340B3DC577AC456856EB9B59
-F9B8F1CFAD9BC46D3A17F10E1976F9DA77F22694BA155F336A4731FEDC7096E8
-BCCC1B8648A0D68CD1D8FF199A540C79C4CAFCA596E9C5E95EC9796B36F3402C
-380471D7B9F2ABFDD056602905D5DBD8D28EC6C4262817F4B31961A6075CD478
-4CB7998FAD7F260A49F30B3A69791FB013316463B48B2983327CA4EC48518B28
-B0D52755CA172C6F9921325B37D2C95E6B7BC3DE279A5AA4BA178EC6F759CA5B
-F39E701BA58B7D3D0E7AA8C7F45BAD067C9A182E508E54655443E84B3A45E7CD
-E8F0175F40B86F59AC9B292B44E25EC3DF66C40734039BA64C612CC1F13A84C8
-3C6A4EC17BD115442BE320549EAC82A4C9DBFD9461A46D4CE42D739AB0228F07
-EB90BA652C87355F5A08BC79B5C8631CC793537A741E75C506DFE0FA63B4FB63
-34CB8DECD010782399AC2BD517576D3B82797040F254FE286138FF4957EC8F69
-DFE5565ECD326C26AD6B952793B2DEAC1DF9B63A58CA672B57861089DA967747
-DBECB32042ACE40BCA54927AE5FFD3583BC54FCC1BE2D6C4F9BA34EDB55B6FCB
-E9D4984FE301EA26EC6000B8A7B67FB45B476E3879A8E565345EB5DC90F1373F
-0B72508D564C1EADCB68083D066477F2CEFE1E112D644E3EF5DF83E067D762C6
-C0BB6991C98ED4C30A01F7843C71628E8C7B55560DB1D261236A2DA1A6C91EA3
-FC5F244DD1C94B6BE4CA711F01C56C2AE13FB162F8204075242853D83F29A5A8
-03737BA7A4DD6CD1BCDA185981F9A5DDB33F6906CB94F6736F648D96B1AD87D1
-2E74FB0373FA4EF35E9423C22CD7DA9D732623B3C0C9D1C0F18E382F3E312362
-592C4A2CA37C3390CFCFBCDBCBE6153F334A7506AF9B7B1FBCEA2A6835A068DF
-8884B4089802A732F20F463971151B22B5282C29810C42A774DDD00348F79BE7
-A13F212ECE33EA03851C54F7B4AB6E9B24E6A901234347D9C7234D792B960665
-40754B01E538A60CD050C5E5BB6D5EC39B23DEEF44FA672F7E981EA955B13FD7
-0332F569675678C1D1EC97F5B78F9E1F166BA4CBDDF6CD8DF9C4456749C4432A
-A841DFBA2B2CD86FB34839EB96CE547AC4A7FFFF432E54AA32176E645365F83B
-D4C8E0D8CE320C437847C5EC09C0162260DADFC31F6A14AA0C21EF638DBDD072
-8FB092C989BC116500B170E4A295C296DBF62B3EE1DE5063C289B99F3D64D4B6
-4A7675B258273D7E9877BC7B70799B40E27E66FDF954D155664B4A5B84732A8B
-850101796E8EC18DB08A33FC71357BAADAD0DBEEBE40EF185550403CD585F1F9
-125E1590CB168D4092318CB0C8736C98E866E3397D2F273F2E1A41AB6EB1E353
-B6B0A13088E8F71D3038948AE252DB3B0FE81C4F54B4A067ABBE8A47B5A8AF43
-1D169299EE93DB0FA105092438D1EBF5C949064FD62BB42DA88F6325C80DB521
-B9116F5FEC189B4F347EA7B3A3949ED6A73723EEC5D3093EBEE1187679D7DF62
-C2BE9AFC7AC2AB814C125D97F7149F4C8C9FE6CCEA3BE51BA03042798578EB9C
-40D5F773D7126DE9CD94BC8F37A6A77813CB6E9B0DAF23EA62F5EB658C2179FD
-FAE682962AC66FF354D2E6AE8A7C26F1E5236BD930CD2594ECF150A39BF39ACA
-2CDF5A25635ABE8F06E77F7769C2278833FB387592507FEEDA4F6A3829EAE2E7
-F1EF367867BED38573B2B1960D18516B32F644922AE761425BE640BA0F27CD80
-FD5D9F542DAB7F5EAFEBDEEE7C1B799C71DB7CF2DE13623F676D945A2C08707E
-AC6217501ABC6148F070893FB0EFC66C709AE4DF8A3518B817C183245F1B733C
-17687883CEE41732A9D7D983798F037CD453E1A9AA3CB30B2C7B48C04846746E
-CF5E512CF9C8A08916B5065BB4EB26ABEB99C4A67FD3BF11D9D2B66AE5F37364
-2E607454EE97853ABC6D40B18ED8E5D98795FB0A08C8254A8A7F0E6532B08A52
-F2AC9A9711A81BC6EC9CF652DE040EEA6AB3FAC01F65ED521B4AC18356EAE57D
-3BD2407FAF55717CD73359525EA631D74754BFA26D5865F978C52C8E1295F412
-224A628032910E48A3ED08D0556D61ED3BD7829AE7E509610F4AB454250D5AF9
-1A683B276DC3C37F330F74A59591F058B9110AE0D46DE921654B6B9391DE0FBE
-34848FEA0015CC9BE022C660E90729CE4413F00ABF8B2958BE04275ADDD4E2C7
-2424FC8F2829868168E0896B13EA6DF16B0DC33774E633F1B04B7E3D1C2813B9
-129F9A66FB407538D797E5174CA7079CB2582CF0AA108AC1864C968DC32F5177
-1135CC09EF7AF19F1F98D0357222AEC67F9CBADF73C37FFA97E826525B4FF098
-5B995A1CAC3BF1615FD8CB417E10DD91F71EAC34519F89DBB92DCD9F1557A59A
-DBB39052C4F5D732A46EB574744DCCE29090138AA1F6F47E5183C50D2A764BA6
-C1554BCA0ED6C948BC6847AEAB4736BC407670DBD077ACE83F0EEF592146BE4E
-8B2BFFB27E300E3F5F6B8B75BD9435F1BC878F26B120D58F2F8E7D5077A80D8A
-027F89A05A3B5FF0962D6F4F9CCF80F7D1430FFA224275D9CDBF55B9E352F979
-F98E41E3B8AE23AF83B5CD26DAD96BBDB702C04B147D55F5545A95719CF28C3E
-97CD9ED819667E7D95B3A3A8CD7C83A0AE1C690365CA3BB121513CD600F05283
-A0E5A09B679B6BE4EB9433E5651FC4468B8F217B4CC41369C23E4EC7985F1570
-E59A8BCA751A7D639E32C5691EC4CE8BF75D7CA6F23D0D6861D28EAC20DE03D0
-1BFC00FB080ECF71E3B70B3B871A995A41F1B7DE9065FC7561798DBDA6351A9E
-0E7255F2EDD22993EFF01EC46A1568B58FC28F87D3573314DEDC993004AA6C6C
-E9B617E4931B1523E74883E8E03B88E4A1991FFAE782095458A04752A8422F38
-D48E55B547A53BE6AC7CFDE51435137908479E87C5109D62C984B73E2BFD24F5
-2D414A56642CCAF056AEEB5A299B89FCD6704BCE23BCD81C204D549E3189EC36
-ED44101F02B9DBF8D1D9CE4C1362DF697C89C6BBFED0EAFDFAE2C5AD83C18C8A
-CB39F51CB5AEC24F7E0F663D3B53A7B0A2C277AC78DE2E29429F75071BB97AFC
-7F9762C26D4704003694532CF37C1A56D5517155BA77230422BCEB620E7EC9F3
-C6D531B49EDE685D354C7BE71655B13ACEEC052B83E9C21C3D50F69EFF06C8F6
-65D53FE037CE70241168AD11D4F3371AA8BE05F43C804481C27BD745ED277509
-E171A93D97FE67F4393C8E945E03856DEED83E72693886E16BEC3B2C8603BBC3
-F61669351E8574B8B60A425CB5AEA6640A8D79E1D1F2B949BA44D152F9A92BF6
-EC42415E2C941F291BE9B9596D2FF731E969BC54BB5CA6E0C32A63C776F9A677
-492A552EF20CC7EC30F63B84568F4D63A0989AC338A465F23CCBECAD2A485EB4
-4229B49A109A6C211B86D81B663C9AADD510E80341A823041A510811F83590A7
-332330499F3747656BC09B309DF7F3A4B3D069A93CE85AF1496A8180AAC3341B
-17E89EE49163473375E86E95A8E8E5AF26F29FA48518DD604EFE671555B9BE09
-5EB82F2E1250C59CF4040992BB4099B3AE4A80A5D6CD275AA4323DEEEFD43597
-E62FC06FEDD330EBAEBBE430A4F613CFDF4BB055A93F428FF35D7BF98D039024
-2E0C1983C79A133A1417AEB142476468F85F6A3089BE2717E3D67896D19FA490
-C4CD562B57366DEE84C857186645C4676C22E52FFBCD470EE2C62C6E4AAB0563
-9FC38E300320DEC4932920A64B152E3DEB6A793A4574D7806DBE3F4C2EC9888B
-5649A359CC203C2F71A91761847C3912E5CAA5919CC7C94D0F6BE8B1BD90ABB2
-2A002558C6D3A3EB5C02D8782A92FEE3A8AD71736EBE4BC4E987BBF0E5EF69F6
-CC6EDEF9E6EEA553E5373B010DA099907CEEB96A734884F5E959095F3F1EB9A7
-684BF6B638AD26F90F846B528684DD6457047DFA42D7D31407E365156B618A05
-E0C3D1D7B1A463E7794396EEF9390043547EE0623A16FC124A7F674A5DEF1A39
-D83FF41C05B8A407CEE6F0746D60F7DB83725CEC32E473D409C3C86A3FEDC78A
-67B03F145C16F1812AB2F8211C009D678F2871EC987405E4EACCE2F5F460E907
-5158D14300444A6F7C8991CAB4957AA40A75EF24ACFA4F151ECE3C357812B657
-104E0538D4105FCD089D1E81D08A9BAEE684BE1B397FD8D6B92F86979F67B07E
-B827697FE8DB065EB4698CFE11074C9E6AB8848B4767783A02FFAFE1CF097A22
-49BA4A46F719217287EF866BDFE7D7C751345E5AA0E578E54650E6A826C0362E
-A6A9FB112AC16FA42F9BF8B7D6653831B04BF675BD1D27A1493773E798740D5C
-034E3F19A89EA4EE3CF7E3D855C3CF4DE1FE6CDF1087591FB97CF3EAF7A1915E
-CA5ABF5986DE6B004540DFAC498950F6FF634795B83F9F1F3889AE41825FB89C
-3246F2FCDA575E926B6692F1981533759BDBAA46BC195525A78016B8C57356B7
-0F1203F2B9C61D457215C23F154ADAD643A2ACB456EFE642891FC7594CCD0771
-C64BF9A93F1701E000BDFC29AA5821C2BAA0D9AED8D3806EA4AF710E03FA2F49
-B5DECFBF182B1CBE354B697A6E5073F7C81C47C55138A3819E121884A0A5E87B
-E8DE4D02
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-%%BeginFont: PLRoman8-Regular
-%!PS-AdobeFont-1.0: PLRoman8-Regular 1.11
-%%CreationDate: Thu Apr 13 18:00:00 2000
-%%VMusage: 1024 31375
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997
-% ADL: 556 156 0
-%%EndComments
-FontDirectory/PLRoman8-Regular known{/PLRoman8-Regular findfont dup/UniqueID known{dup
-/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
-{save true}{false}ifelse}{false}ifelse
-17 dict begin
-/FontInfo 13 dict dup begin
-/version(1.11)readonly def
-/Notice(Copyright (C) 1997 American Mathematical Society. All Rights Reserved. Adaptacja PL JMN 1997)readonly def
-/FullName(PLRoman8-Regular)readonly def
-/FamilyName(PLRoman8)readonly def
-/Weight(Normal)readonly def
-/isFixedPitch false def
-/ItalicAngle 0 def
-/UnderlinePosition -117 def
-/UnderlineThickness 36 def
-end readonly def
-/FontName /PLRoman8-Regular def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 0 /.notdef put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/StrokeWidth 0 def
-/FontMatrix[0.001 0 0 0.001 0 0]readonly def
-%/UniqueID 0 def
-/FontBBox{-46 -260 1080 920}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
-1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
-B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
-4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
-DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
-2AD360A28616CB4A0670C1BF13E7A26E167F6FFBFA02D201035C41858D1C9BC3
-C5482BBAFCF7DF8061B51863FDE697437824573E60CC3736B77D96B9B17F4AC2
-4CCBC0394C27774C26FC66F04993D0E73F619503565343C1E03ED8880A14A7A8
-E686CEAF12D18FB2C70E54D7C524923386E488A5781001B47276F3CCB8173466
-544141F99FD85B6BCEAD8A7E1294BA184AC78C372F2E51950F79844BF99538D3
-5CA2530E636C821BDBF28843F9F48878C5B3D1560AD7EBF9279E90C993EB09E9
-47357DAFC76071F98E84AB3C17EA7B49A06C55E512F6265F15555A6C47AEC525
-381449C04D2A48C5C72CB15E07EB74DE8FF1F8572AA28AB47DC19E5558D0CC68
-A51733DBCCAB4AB8798079565B82622F61A03472AE0A3DE6CD251493DEF89C38
-5255DD4CD5F214B6A7B36AFBBBA1E86D352FF82CC01B72872C33384180326A01
-4C998B467A6F5307BB43CFC5807C5516517FC7066CB1F147229B0CC9A0E20126
-28A6BE305080E8FC9A94B98D56FFBE6688309F6D9793FEDAA5926EA5679791D4
-74BC0B7939D43C0AA387BB7D9759D0213A6F36607CC721D6B87FA453D0E82635
-D5695E1B8D43FB421979DCB016E5CA2765235A8148701570D9563168F06C40EA
-E2C3813033A5D7441FE2F5A3B451290BCA5D541320D8DE86610389C0D9DB3032
-4F35E3F41F7FCBEC699C2392CC42065233DA1DAC8F01EFD3C68B55FB44300E0B
-11954CA5863023430A727D50DFB8D021C3FA1F371DC668BFE9B1CF2E2C93B0CC
-107A3BD2986CC84CF28D4940F93FA5BD3D4314B3C4B93CF52BF89AC53466038C
-05C0592171D6DB3717525B37D33DC7D4DCE62BC5140AB590C156D658E164D88B
-56E6F9CEAE61FBB850C398377A8B3B9B0605595400D89642FD874209635F566E
-CD661D7DB1F56AE69F266EE3AE8475A72A79FB407FC26533A22B3EB9B11A123B
-76F23B805B496B37CDA7823E39FEA037382CF60E7CE51F6532B87D96246DF48E
-DFF837FA25657EC253C20B175686D514DE3EC4C75BA916D2BE7E935DFDA9DE27
-054A0914519B226A7A8453ECAFA803EC3719606C69B27C28B8831608E37AB0AA
-60B11750ED869357A65973A96B30ECA2849840ECA56B29812065F4CB66E936CE
-0EF228C1CD2E68F237F0AC62A0776E6F2EBC33865E5FE83EFD89FAC4C11F2F85
-E0B96415723A8F20391FE6A514D30057A0913FB3FB117254E73AD81D40CBEFB3
-3B4B742142323FA3C3B562E1EAC34E7FF56F7CDB72907984F5E73CCCCEE37DD3
-ADFC1C309B44756AD5D93FCBE749DACB54473477FBEE8798B973D7E7C4052B91
-189F059DA1B284C7F42F6BB8D95B4067A8141AB8B4CC2F091E6135645CD869F1
-A903EF745677C765D4CCDFD8B568F1339BBEBB63F268A435FE43E20B99E1FAFB
-7FCFE79828EFF008C89CD60F2D73FF874F5F00DBCD673759B39B1EC0F1E2AA5C
-A952A079E1E45B9DC216ADFADE342458015F5764D7DA28C536176409633C4337
-22F5D89E57354423D8DABF363628E62B818D14C7C8709016D2CD3EBF22608D12
-B5EAD4F2183D20A1D74B6F64989F395AD1F4253B4FADCF44C5206D8DE6AB0A9F
-67A9A5FA60EE600B71B912109EADE2541CF8DAE849562C79CC225E96A94B9BDE
-472EDE36F8DF14A368A465437978818B4C8EB837A10864912C2C9C3FC2897183
-B0B225E5156CC72A5EFA2F6C2FDABF8C0D2788448D65E6F02604D2D63D3D43A7
-45DDAD53383BE15E76538061CD6523C42AE04A309AF8949EEC96498BD7FC84E0
-ACF4C687D965E78D2A8EA4977311E33C823AC7FC1029291E7A26EB4DB0974703
-86BDB6CD26559D1C29873B6A659B937B96A1F545C8F0E4D6B74CBB6290BECAE7
-173EB9071FE57904EE3DEB4CC00F3E4019EFDC1EAD90B0F8940695805370574F
-61D17BD6FC5C9FB8D18DA9DA3404E26A97DC64A8257B75361C9829DB6E453147
-DF8C3D1F0EC964DCD9D577A5116B1418955484541550F31FE244405399F18482
-4744E06EC1D1D83451A8078E3DD3DF939F24A13BE4C74F1033CF940807905AAD
-81B0FBB016A6ABB87AF68B306A45E502A5156D0D822E770953A57C1164D26A10
-9947F3956628315A221357E004F62E80A1719218A18EDB5C817F4AE4576E49B0
-D09786B499E6E72C22F7B388B3D2426DE85C619AE7B63260B6F3D9F7389B5B9D
-2A9C9BB8FB1B2B95D7C8479149B8F71D794844779E3E75A3B587ECEB8402AFB6
-E5E9868BE0ACB7EF6488A4C772D67DDCD7084560CA43E5BA8F6F2AC2615C55A4
-F4E3D9DB6C3D0C429A3CCF6A7BA17AE2B5DC446FDE3105FBECC25AC56F94455C
-5FD01C1F2DDE31AD27950AA807562480E79985DCBC685AB12C8D4DE1C39268FD
-D2230CD25505FC28D2CED46EA6CEDC27326B62520977CA9EAF4356A981AB0F7D
-6ECC46A2D259E27A0625D1B6B7BB058750DF7E7961AC02510F5B6EE04E45B561
-E9988871D125317E14B83714D18F84E5C4E50BC74E4467777AB55BE7E79E6A34
-DAC730FF609EB5815E8929FB0742BC839A39E9378CB6D5F4CF46F48C321ECCE7
-246AB4E34AEB39829B5EE09B1EF172E8C0FFEB2E655E5FCC51C9DDBD83F855EA
-C474A8736927D72421F28DC5199CB64F57A392D2738F84625AEC2D3D6BA583EC
-24398D567BF2EC06CEC72976C1AB6B3C31410E8D6B00DDB397C0E357E657D0CC
-D61EE7A6DF3277E3D551AC55B34825D09A6F2495A39D4B32FEFF6182802287A4
-868542F933B667468D197BBD57C0E2D8C55B7673C79829358469A3FE856445AC
-A1D8FC1A02958FA16F33A2455597C010A1E3526B264DD15CD6313F6CBCDF8B39
-A869B985EED8CEF6824FBD8DD50C04CED7F87DA1797A60C5E8DCED65C1074A2D
-AB87621CEAF1864D59B1AF75F5A9128F601362FDCB045942E26D5CA5CCA1987D
-3D16E2FDCD4860EC357C5C7C61943C75F27EF6BABA6D1482E9C55F12CF7CF2A9
-13FB2CE66241390A3ED026FCBAE7E568C0AC6E1DF14C0C3E92E696B8F8E9B7E6
-3E6283F537235581D28C2EE4615334D6B5B69A25565F3514D43A141A85B4B1FF
-B55204CF730FFED115661513AE690AECDD91791D761A45D69CCBC086D1AA38E2
-780FE896E01C69E46591BA9CDCF208058849432FF49CB298674BA423C1D6CD6A
-F7BC99FF5C9B52264D486321F3D1E703E9A9E433A5AEDA8F83954EAB5781EF18
-E08CC1F7D36D1F0256561DB84E0DBA4681990CFB4A9CFA7584BDA40906265D8C
-6F9AF6978D929610EBDDAE08DA72021D9AD36682B89B02E385120D3B58213C98
-B0D69DD391C9382CA888C679ED3EB9B52AC7354906F0104D3990F40678B17CCC
-CB2C2BC758B1098AA113BA62F11004E1302D6A3AC104CC5B467DFBDD92A14720
-6523BE1A8D74DBFFC7C51921D5588D4524070473397D45BE89DAFB02871BA701
-D455FAA6B79CCFE92DEB18715405D2823867526EFEC419653EB3FBC428592F9E
-1DD0CC46FC0E92018032C37E968442AC60C06D49D4F4D92F7DA236C73B01A7EB
-F85DE9F84D3A5691C931140EFF12BDABCE7ECD74710D6F3518861A35FC1061EE
-B232963B3F0BEDF4EE6BF9C62ECA29A883D89878818276E4A5A520E260FB5780
-56EFDE8757BD405E1BB0B5087824206AFA5FE46559C2274C06F979ACA29B85F5
-85885F14D3BB3F2A6C8C837C41DE5D9B283955159B7F0C9D349CF28F2A577056
-73E627FDF21EEB0E1351CDC979DCC5C686D4C9E96650E4FA70975126E47F2803
-71E1F963484EA5717A0B4B63634F92F6862F44C45992AD1E45B86A2396A0FB90
-96DC4D2FE64193327485E7AAB8D4CAEB340725057E64058F25B597E0D475F3E0
-D76F461E9C7A0811E8EC4075D21B5F9357ECC41C4DF1DD0B9A9E1055B341DA1F
-71F73551EC7F6FC65F3D9F53140E618FD0D0ED7D053166500517C3D5C64D1C30
-B41002E7C46E47A7C65EB3AF97E72594C518A0034038946DDCFE3E23B27267DD
-B7191C87D5C92B15B71047215D80EFB45A0275641BABEC3940090EF2E3ED1FEE
-61436DA107749746B5118B5F4C57B3FEA20864A490BFFA4CFC27C7170082B8A4
-38F9CD97B97EB00D2DF8161335A24F561ECEB4FB6CF5BA98A1725AEBCC5CB1F7
-A93994DE3461A8FF61F2E56C5CA78EF6825A13BB04ABECA8B745DEEE33F77C17
-BA0EB6554C0CD94118FA8F3587D5105CAAD7D3534117B28A278F06A71EC263D7
-EC135192132942A076778D2437F4652FC3F2D1CBA0A87340AA1F3A80CDEA8165
-65D4B535A5EEF86D283956B995C6B0FCAE62AC953A08694BF444F28DA1C82E9C
-A1C2D93C8BD16760A91B02B4044AEE9931ED7B94AA019BEAD3E07F283A27E2D2
-C6708BD8A21E85ADB2E2DD7DE392216B7C53B891E16180CDC03DDD8AFB697A00
-9C4B3893DF4E2532EEB11A2955946BB92848A510C516C908501871C51A1A9828
-B41C13CA367D5A2B8E6F2E46F6C8F726DCE90FC2158B83382C7EFF505ADE1C4B
-837957293C67DF287C8B2340D731E4495446B5AADC2BF18D3CAB3AEB2B0B8771
-B7BA9939D0BAEA1174C492CE873B6522615E530B9FB90651AD700EFC78B4D4D2
-AF1AC365D58F3956C211A76C5B5D57F356EA4A9D7D7FDC6D246C967D99221C10
-E06B2F3E91005EC0BCC9A85A7D7C8906790CDD8CB5054547EF99B756661D6438
-95DF79E9BE619F569B936D8A84B759AC9A551DE571634BE643B4D346B14ADC19
-A793F80F1E6D56EF46C5AB9676458D15A7A1B69A9484857517A5F51E22F0F31C
-29AC65B5B3D05416E763B0D102F50FA386E9317108A182F9448DAC386C8CEC4C
-4A2E4950CFE234AEB39A20004EECCD3194408B8748374623A45C5EB8C4CAB000
-EF290AEA38F840066456911FF96A992819AF5EEA35CD76BF2F108FA45DF84B2E
-915123DCED78D3C953830F4FDFFE499FF2BD421F9FC06C7B364E6040B5027249
-A19AFFAD51FD58AC604FFACA84F2850431C1CA8FA02D92D6B2899C442A5A981D
-B37BBD0F95FB6612CB7D76FE663A99E6BA58A0A2EC4B1E541D96A6C8FBCBAAB6
-98D363D28FF3F3DA83E18BEE1E9E972DFA9D85A6CC5B38314F6AAC8B5CEEF712
-3DC1F6674B508BA0CA2F1D10F41CB6BF581E58F4FF03ACD3DA0F2A1298700C73
-551F9B07B443D1BC5E4EFE77037671FAAF08633A13C303EAE11BC5E7318F8D95
-72760FFA000582EC243DA0A9B677C36481A3E474F5A3D7ABF80CC0315CDF5870
-C595E8F8349D2BA5B47B3F387A73654956A72A8BE169C5D0B120667A01B928DB
-90315692D6BE29D6D17FB491A9DECF27C480F283578AD590D4557BDCFFB6BAEF
-8136B8116D81A730D638DB6574647F5F1463ABFF37AECD69BE9AD7B87EC13DF7
-B662B6AA178F4EDB8DD0AC194DF463639938A5A26374D1D5735B79C339F7B421
-983E61769C43955C269DACA02134FADD4A03EE61444C2F8DA54D9557145C8244
-96B2B89BE7CBEB6ECC8848D17A70BA8DB8DD6E5B41F5D2917F0497F0F6CAF869
-0596A92D6B28370196094CE7BD850DB4E7A6CE89EA7C92E0C40B31C03651F1D4
-45B1E94E192EADC2A6507C119021E687F2CB6EA298ACBCDFCEED5E4A97080AE3
-2BC98C90EC787CF473F88C935906D0BD17218BAC5C5CBEBA60F0298D4AD1B6F8
-5EC1E6609D09821BD121F361A0D2AE90FBCF7F0C9088B30640149CEBEF18C8C9
-0734DAF11F4928277A4F197E3EFBF17115FC387BDA86A994239C9716711FCD9D
-4D78D3CA88145F3CD0304A05C76BABFE324148AA96EBCACE22455CA060310D07
-69E1CF38CFE5F50CF6E6BF687C2500E3DAA62B3FF0C184955E04FC32A6CA464F
-42492C4FA45409B5EA00478A21937B0B1072631FD01ABCA6AF3F50DF969F3B5A
-C7B9417F7374DE7DC83F2B3D66FAC9E510D5EAA048077AEE3B7942ED0508663E
-38C51F5365F8E420A030E8713D457B54F8BF292D59FB3F556ADCEB45DF4D0071
-31943AD8320268AB1F0E9E41C167B865C8A06DF5F7365BE364258FE9318EB501
-E496182B15C6C4BBCDDB7094ED2C21EC501C520B42125CC79B078F0C2F3D497E
-077FF92CEEE279D2FF847399E70A9C4D00767155542EE22A0FA45CB0481D3330
-444D7448A966AD16A3D11FC76133074AF52C0A4A4A1BE90C3436EC6C3B42E25A
-41DFA8F71A87B059612007C141D6795671F3A1E788724EE04C6EDD8672F04BF1
-B180B3604072520484AE8BE66CA44B67C0831856D10B7DED00AE8F3B1DA1C704
-90BB59A0C9F513CAE4E7E7549429B0275AF422EB548577C286446247F1AE16A3
-C25FD6CA02D74451FDF612CD4E07EBBA6599DB6A9E6D157E7FB615FA653AF274
-4618ADB8B5F8FD83C8F01DAB3A6B7234E6136DF33F27A6DD1E55E7A513EFB425
-B3A0F9ED33760E52C72BE659A6AFF6FA89AB01DA0ACF1D4CC2A0E4DACA3EC7E6
-4E4E10824A8EB84608A5E95A2593A77AC3B48D4B4EFF99AC5E8ECAE12389B1A3
-02E16B7DB5970B85AD4B7DA373F0D51E81DC69EFC45BD40DF4EFFE58142BA8B4
-EF904FFEF935954AFB9BD2041241B1BC8519E238033113629B6246DA4B173E92
-9C882C49928D1BB2A9C024F25D85D78DD6ED27DF9056031052D9279097919A22
-5431C5E693744016124AE1F298C8CFE42A925AD42883914C13F1E40E091803D9
-D140375C5EFCD7AE903A45A531B3FF0D01341A77F5F142BB10E32729BB0C3892
-F3FF9C179F9A45F2054FAF27C47B84E63397C8EA891CD4173431F8F28084D649
-289E46000992DA783622A8DF8F0ECA99B7CD78F3DE7516C10068856ED15BCF2F
-BA48D1F4FAAC6003FA121C5611D82187A5E462AD7A7128010CC68202C17DC217
-C7A9CA60D39A737E8FAE822C8963E4EE812214117B779ABC586A2749AC9E0792
-A1437AB869AC036F4846E4AE49CCA926D2D683F66EEBFE6B60E40C0F481F20EF
-40953783C0AA5E5AF15279A3D414A11BCD5F7FBC20299DDC4C3039CB756C3DC2
-24122A755512E6E1B82614FA1BA1F145790C3C0C2D3B1495691791A0B3B277F2
-48C388212CA31B9D833A848E62533BED862F5C93831BC0D7DF4A7D89B17B01E6
-8D8315D95C3F4E7BD8C20BB0BA9355DE01DA336E69E76F551238BE8E3FB9AD4A
-566DB80360EE9E9232918C6B013EBC5CACDF4E6683D7B48FFDCEEEDC99610E1E
-D949844E178CF307F10F868F5484EA844C2DE853809D2019D63084442DC43E51
-68B38119A341ABA48C33E08DA77E617184FC84CD97519824DA3A4990703CC889
-8A859FBE7654F08D93E0C5F6E7249796D482759EF0ECDA75C678B3C8EDB84406
-CDE9B13118B1B756CDFCEA8A19E13DD8C68641F7CC6BE0E8FAB8FF04B95E820A
-3A1C90C85F73E35855764A9B8CA5BE4CA0C8C3FC699D2EC01BCA4DC383D3243F
-8F825BEC634B3E7506A8D328199ECEDA10FE9EACDE7B649BBCC5D78092427AD9
-825B7654F2E6D76B0E75CCECC577A01679757EECB85C8D3AFE287B147F6A9F87
-48502F4A198BB2BE26153AD81E8354F8B203776FCCB0100A89B425951D1B8F92
-48A26968B74E354BB337EAFFA5397857055B2801E7D7D7C23CF530D4E5A3FB29
-CEECD1AAE86EB828ECC41A6A0A5E89B4FAC2D686EB98ADFC9422773A6F8637D9
-DA64D2A24158D290EEFDF000EFF179080089918D3A502B3837C6167B2F3F6275
-131B545BB3BF3A27D91157033E8A34275B3F9105BD9E948C3774DC0D81015B99
-7BD95D5A6D2E16A229EC56E5288CD3D65277679C4EC2DAFBE68723D83CA4E606
-B0C3D2DD4C2AE6AF43A6F26735142CF5E886349383E91212FEE2C8CD98998B55
-C68F45D0DF8F1DF0471866F337222D20E2DED5A96469048562AF098EA46AA2E0
-0D6FF215EE9AF3ED128A9AC51A4B1CD0D02B3DDE08FC25128C9A440FCFDD220A
-80841B03D08C6D13EB000DAD73C64C85DC340DD9221323006A80D3706ECF7E2B
-1F58923890D034FFB3636B8CE8BE725389889891825E685D296616D727A89C9B
-EFCD87DB5546A990855D71099735224B1D86589C424B5D655C79FA548C96679E
-BC7CD17EC3D32F4C61C8619E31924D4E1DFABB55D26591F936B9634CCDA99121
-6DC7F0A516C38A6370EA9789C1A159DF5A0FDE7BB0B3B6BEBDE51DF41A98F712
-9D98F64A9911C43C1D967F23AB0AFD69FDDFFE5A1C2B2B7D6417B9B9F7871F74
-F32EDBAAD84D57CB948EFC9C9BDC9C56847A9C40E1FE1E7768DBD1E6142873F9
-F069429085567AB66B7BE423A7EC9FD2CFF80EC9FD40684C65605D540CD25CD9
-9499AA0E1624F181202EBA794307EB35938452E50F015DEEE493BBEC696F8515
-E991E9AF9A6E84D6010254A43E27D51665E509C8F9D526BC971FC1E59A948E33
-42FC09EC12681682C2FB84DE3FE4ED85DD647659C2426F6227C91873EA1E71C7
-90F1A8B46DFEAA5BE2976854217B5678678213ADBEE8A4222C11ACEACDB1339F
-255D42B9616CD67B0D406674C6E3E48CF323DC2B1784FB78A4FF02D5A1D1D5FA
-854135EFD4CE3545163013073574D8A504D502134BE30EA125A1A67B982478A8
-039EF2120FB08CD896F4CC8EB9819F5DBF74CEDC0D5D3564AD5A30151D920BE9
-5DB92CA93054D133A88A4E8540A4BD84FC05BE1AF6E6F101F07485442DBFF263
-D0AC098CECF52E0BAB9CBB766E982A849674E4053F0E3DACDB2637D03F900BB4
-C2BA4EAF9599F9F8F6F3FA2A21C96B1A3894090AB7C89BF1F90C5AC9381C998F
-8BA03805F04918729E7E1C75FB3283AEFF4EF2AFF444946A08C6FC7545F8C21D
-55A6D02C9C7CE37F62C54BBB31CE87AB0578811CFC996BF912809474583F4EAD
-94CF4C2C533BA4E10837B4D590E00460DC9B19869D8EA076C6BEB9AC5C7F0930
-6C793353E2BC38AE62B811E5FE9B42CD08612C1010C6D13FB3BBDD6436B1358F
-84029389630A47C01CCBE47224478A3797194A5442DC4F0547E58A3E07AA72C7
-19EE53B58A4A961DED5E06B9614A41F04ACD5D82B122D5E537A8884C88A30680
-E7420BB183CB7633FE6492E65F775BC4CD490116D87DB13D315377E4D9D18AA9
-40A2D014E52817F1D25307ABDF2AAEC100F0D61AD0879CAD4C7256A6F2572D5D
-4DA5DA57C4282B6A3EDFBCD92193C82B6819EC7A0E097B02F7F00A21F1AAEBE7
-A3E9D49CF87407B56B889FBBBCE311D287C59A2B07520C039A728EF2371F7813
-13188248A5AC5A28D760138CB78F8E98AD1007D3BA6E2AE69412055EAD68A871
-6CFBCCFD033F5115A9540A3E871B6935832BA240B28DEC5FB76CE50C5CBF4E31
-4A0EDBBCCEB01E837B18CF95543236D509062E9258BFD1D9E60B481957D58C3F
-B480F16829CB834856A2A46D83686EDB11D99163C96185DFBE698C5FBFD425A6
-9C783E86CF8DE5EE731F7F0DCE571434D9E8B0F75969801D81EF462278192288
-F5E4AA4EB478D42B345965257FAC9F7EE6EAC611698DD3D7DDC247B4EC54431F
-E9A9C1E02DFD319644643919DF480D626F8F6C4B870C2410B14FB7D558CF1940
-FC9E4F76A23D4F95D15FFEEA0BC8FFCD59A003689C036BDA1F271E00AFA7D2F4
-5DA5CF2FA4C13E3F7F3CF95DC4D929319233F8CACA302EC0DABF582182FBE2B7
-C8C1E962797B2F78BF0695AD8E3EB83C296D13B40ACBFA7860462B466DE909FD
-E59203E41046C9CC546F0AA7DF04FAF9BF7A9270933D8B167D25B884FA9B1424
-BCD8A86D15E8D5BDD2EA983AC7AE11C3A627E1B4C8ABACF1A3A5E5EF35C8D4C8
-DB34B96A9C9FBE4AF511C281DD652BF4B19B8D3286408B2F15B775F539728BF8
-561CD76E989896337FC86461E2AC656CD4FB63CF50B9BE39A2DAC6D19DF94521
-70137125554AE6C3074F92A087E85C326033F43A0EE3AD384E901CF96674547A
-109422D4A764FB8E074C0ABA9B9EBBF646B2CF9213303674DA2899B0E7176F71
-1C08C895A205FE2A58F63051244C90CDECAA9EDE48268E9A30EB41F7C7C8B9C3
-286FF7EBCDD8D88D5BB8236C73D275F48CDB393035C7C34CE64BFF822731CB57
-B412DA75BDD8DC89E4006297551EBB8F8DD17DCE29389F17E25F9A8937812993
-709F886D67DFF017CECA614101DEFCEEF27C73C515328B1BFD174595E361AA06
-D9AD9D6BAA92E985B513F344EA9C395BAB1D5DA7F092724DA1A8896B95DB1EDA
-54C18AE1124B37F37361E2D4778180D279EACA24D8B0556C8C35AF37D66C9D36
-2B284FEB3C8E119FD40728984FBB5D707A73A4054038326303B2EDCC2B320A95
-9CF9CB7F75850F94E97539D44BCAD3E1B344447D55FE640A8791911E0F6592FF
-403FD242FAC2887994709E897E990AE0B90650894F020B2FA8E70561819C3196
-00953A6D08AE930BEE0DD8010786431DEA7A06396DEC4CA387F4ECE353A1F262
-A415164F9FCE5A3AB645F3F1C2492A5D6A806C5E2E0F1A32B4AEF4658F37EC5F
-AA5142F698F4B47ACE8E6B9CDB63C66B7415142916176AC37C3FAA05F65EE580
-A47FB2AF726DA0178DFF6507B1E539B8BF06738821D62BD6EED27E377A0773E6
-55A753168E20D89A2F019156EDD5F4F259264F34AD94F3355A0EA1BE155A403A
-C2FBCE53095D32237781F869374C555EC2C85F173519D01B4011E66C5A5C460A
-345D6A47CD4C7723EFC96D3F87F125EB67171CF21548D17AC5E874AE4DC1EED5
-422FA44AC0A8AE53CA89F843C0C82960D9813E454EEDD02E02FB2945BB83FDFE
-69567189255200701787FE407A55DD7F39B9CC018A3DCBB912C0A7069C700870
-63935DABBB3169014C53D2AFCCF8321CE55B76427CBF8A8792DB025C79457E2E
-8AC9CE36DC55DA254AC9B584DF22F1166C2D59BF13DE16F609E6E1D02B009D87
-D7787088F93BDCB752F0B33BEFC4C54A01DD0729FAC6ACCC0B581A791ABC8B6B
-5B3975C98113C0191F42DC1F16C27A239DFD8824F52E0F52489A13D73FDFB694
-7E5A4AD1DBF2C33BF6C7DD8BCFC9C206D885291F3DADC62B6F85EBF53996997B
-38CFFB4B46E596B18F97AE1A2B9D614A460C6DA4FEDCB521C094752E5514C4E0
-A230F6F53A722462EF6C757B7AF73047B65723C118F8FBA5AFEB4C5110F6897C
-AF863825C16354255FBDA1A11E032F5CE7938F9876934C8F041FA6B0B28B1475
-C29E7A6F6134E6B7834D250263CF0484300C701AFBB50C9D3819BF272DE9E072
-5355D8BA6CBAF7918783AA5DF2A7E04205166034F08A0B9CAD265100985D711E
-C93AF97AAD54C4B62FFA16346354CE7C8E0485AFCDBDB6411CF2A11C945931E8
-1694E072414A1E454DFC2459C38158DE94153A893D27E12CC7AF879C440EF4C1
-B4DB8772520AF9F33FA6AF50F10042C55DA356EB89937479D0D4AE4A50A5CD25
-DF4F1CF780E22D97B61403A3AB0FE8C06A205B78DCBC9F07C1B51BD17A0C15DA
-6DDF7CE93671E300D47132008080C78C427E5D20D1FC6DBC6DFB821355F6C024
-5895AAE922E6928304CEB68E29AF7E1DB701F8E3455B367D1EF586D46A452A6D
-AE76D390C86F059D5AD4046836E2CC32DAD05BE0764157BF01C8046FCE356D97
-0BF3D50DDD1FB1A4B4F4D8526B253C6107465F766A5A9FF9B25A0A865E724D3F
-BD101E3301FE55B7DC49577004F7B413F5DA0DCAE6BDBF74D55340F9ABF01F90
-DADFB4DD03339EC57A1F5844F3EF3F974D01C05051BF2B71452E0B86C16C31DF
-12AD5B430F784ACAAAC977B910F9410D4DA78FDDE71866A111060DC04A9B7EE3
-447E8D5E89BAAFB954EED6F5519C8929AB015E1AE23341B3A7E64DCEEAC77792
-BBFF9BAED548B0BEB21B1A20239265A6B9FB0DDCDB9DAAAA93476EC412D8F9DA
-717DE5C0409E3B8985B528B517EF4D7DE95EFBDDCFF61B31905CD6919ADF2E99
-326104E3D761CC12B30ADAC02FC95984060002EA64DE673608F2BA4CE7687AF9
-610D825F186B6BFA2A65AB82CD8115DD1077A18DFDBF5A698E094341400EAC99
-E86343F5725B852F9AEB88538B137786C60D3CE62BE0B97217E06115115272F0
-D2969F6664B28073FC63B58B8CC16E845A95028FDC070A874AA86A4E2BC706A2
-C0D28FC06DEB1D82D7E17829A865E948D4E265B6FC039ECD95F6AE1E45DCC7E7
-85EBAFB74BB36B09FDB91E2A7496CA4AD5735FBF2685A1DD6635051DAE86DCBC
-FE2C218F64A21F76E60CBC196DCA5B2FC701CBE0EE41CDB25AC717A8573685CB
-0275B9F54DC365EF5BEFF71A9B3CA12345AFE1857B21769BCA79F0211944A2C0
-DDAFA93CFDED3FAEBEA72C7FD8BE710D6FE41E403E1DC6CDEBED50F1C034506A
-3761225C99674B27596940666C503E7CD5B248F2812B3493C597E69B51290F33
-E63359A56D0BFF41B5731FEAE368434D471411B1DC8A1AACB30E79BA2A4FB832
-45D7D2D45C6207ED7264269C84DFD7735988F8EBF44FD3304F36298C7AF2400E
-7F92C81E20C31556C90BDDE6F1260E6D68B25131259675952596E2EC365755E1
-606E5E61FA489CBF883C539F3ECD897484C88F530802A9F3E947BE40F71DBD9A
-4F35AA01D1B927C534309B31AF9BC1DE351A23ED1C8823B162A0BCC1DFD8581B
-1CFAE0F45CCEC717566D2726835C5BECB4147CB90E1F6BB04956824D435C997D
-7CCC8D1F46974559CA1EF0B7FC3234D9EBDBB7709117FD67ED3D905BC8C2F07C
-1B38EC0BB305619BA9B0E3B6D234274A8BE43616588DF08BBC60B5DB9D1996E3
-DF4BB78F2B82B798D603C9FD44592B34D371532CF3455AD9EDBFB44D91DB0BFA
-0138B7346868AE305FE7EEE0C2916CCF382DD0728F4DF4C45213F72E98D093E3
-2C7DCB222BD91675D581EADD9FD5BC6B4F3CE801CEEC450F737B1093D26A1C91
-CB2958844EB07E3B4B780E51B1B469A19D94264C9A74DB3B67391940EB7BF8F8
-B5708BC044C23DFDC813E70B602F8100E8A0E694F90EEEBCBAE58FA56AF14725
-E3995E5CB8126B6765626621AD4936921822938F70FCE180655F44910C968C65
-59BA9200B9DA68297BE8A802748266B2B5E4B3F7647FD88AD4FB366C4066F66C
-01CF96A20F03A8910C553297D1399FA0C19B1DB9BBE40296A49E4564DA6C51C3
-F01AEE882DABB7D33D717C53006BEF8F5A60E0406A7E7326F32C3538E189F268
-C286B3EF5897DA0D83A5B08A98AA6EE4874D6499FDBC0AE9201FDF4B2FFBA028
-68BAF3AF1DBBCAFA7DB513D3862822EE91CA5F54DB0AC5F6417A7CA682051C83
-89E88D28E81D7361D0E946B14EB7A3512C7AE38EA3C067A1C107EC6B0A443456
-8E1BC11C568D091B255748F695DD3314F2B4BCC9F350EE64D44A782B627F9FFC
-B9A312B657C7D9495ACE71EABDFFEE67862562C010AE5C851FF518A45AE70152
-FBA327B97D67892FA9506487995554B078C711331156DC39DACA9D7E8171C756
-20F143F1323691F9ECCB5C91B330D0E8D8069EACB692DD7EA0E7389D5CE5E0A5
-E13406703921341390B488BFE6F41A91B37D7CD6E5C1F011D26427C5872F12AA
-0CE1DE763037AE40C9AFB488B48A246E064A4AB04DAEA8906B785B43EBA146D2
-BBD1CECEA355FC195197D1D06C2C33A36C9DD4BF5E6B7AE55A67728A31A47B7A
-E831E8B6A2E0A07930229C2994F3A00048731069CA4D3336B5FAD3CF91478E7F
-FE96B235EE9603B10025B0ED1DD70300765E5550DCF62DF68203FCE7DBBB783B
-A2AB2F9A75D96D02FCC5F5BA3ABA0E3D0C65386749972F84E91DC312E31E001B
-56E5FF546E219BA46DAD405158B4B865DBC499CF6D715A4081F2B53E958B0448
-1D2AC8E79AFB2F643D59983DA05CEC6D0E3E997028E20D022C743B18DE9BAA76
-A70A117CDB6D100A1AFF652032D4348FC9A3AEFD190FC03100DAF894304BEBA7
-82786B4F50C13A70D9EF0C6B3DE685AE8AC10CE69C823866305F3207C0663955
-612AF91A19C55CCA6ADE1D9E8B8838EB8F7893F15AB5649D77809E18A58398C3
-857375AA5B9C0039784ABA892FBB524D0E932C179BF28C45DE6088E4D4DF8440
-D8C0268B2F0B59F29BBA902790F1020C0BA11586966695EFFE4B14095694B3D7
-BF65A4927ED52817C1CD73C968F13A9F79544918ED02E4C6B9686EC5BC77D108
-4CBC86CD49A1C7112B8E3E6A21FEC000576F732F27FC98BBEADB043188968A9B
-76F97835E4380D7BBEDBF4C3B97FF9CBDD06828E95FFE3E11797AEE8787E0B73
-69FBE5212734078A8A3DC378B0C17E2A63962BDF4D97ACC7E2A8085A71C42578
-DB40634AFA3498630BEC9367B5F6F472D2053BEA4A4B84440529C1F1B8695A21
-7E7CD84B9D4F924129F21BA2D1D6F7E27A57CE61292A06DEB73269B47679655D
-6B2737942C24ED49366639EDD7EFA5D2D223E52CDEBA17BD19FF47D10F401CAC
-EDD9916D5249DD046C459025462E775BAE3143C6004C4A826633446BDABF25D9
-B3B0AEDDF6585A51E49293E05EC35C0AB151464F786A5E87658DBF32F6D0DC28
-748159F30D56C40870F1936638F175D3AD4E8FC61BF9F5E3EFE0E635FAFE9E00
-E7517C54BA553C717FA02B5C7E66056BB68CDCAC43CE0B7B56AA5FD7BBDEDA87
-D8B5238439D589EDCCE7923766CF7D25DBB9FA70BBB088D3899781D7B3045FF2
-96A6FC41A267943125A7C65E949991860A3CDC129D59E4BA56209E7A3FC43FC5
-9F6BBF6F56F075BBEB47D841D0C3D4C6F8BD85F277F6DD732F73DD6697F12C5B
-4317BA505B0B46A45E05CB0EE8430F216DFB5B2891F7214641B50604D4070281
-494C635D66AABFEA79E3100A16E6EB31D9C320E34F2EFDDB0237BABD99F3D5ED
-2700BB1367DD7ED7BF0F31A87C6FEAF596C1BECAF420A8E59E08C78F1C0529A9
-E81A411599F343F07D7628BDC8B045DB1B260425976C12C80E4D38A24D5D458E
-3F55F8D5D0D823A046B8E6ED3BB2DB5707F96B012C1475AFF25A304CE2C23FB8
-E4AC0AD95EBAE53EA8CCD9BBB436676FFB06FE4B779AAED999EE403D239BD728
-B8A2AD327F8DF1FAFC9C621991AA6DD62F8A033264593CB4AAC76A132C32DC02
-E8A762976D03B915DA0552B8D466AEAF8FC57714A81B91C5031F5DFBB2932347
-A75297C2C6BE407D3F1D52AFD4BC1550827A7F56664FF865B548849492EF0BD4
-70F6DBAA26660B1EA63030AFB30A82D8A52AA0F5FE263926783E769D899FC743
-95C0C7E735A3ACCB6B4047B72A72DE0DFB2CDA8019E2AD0E3C368DC4E023187C
-86205CD1C53EA3A5C2A14537AC47C94A9E1BFB20B614EC93A2F24B401E9E5963
-1C5811D0CC797E196204DE91D2939992424C47D8E099AAB743C3A467E1ABD791
-8457E75827AC70B67FA0A30882ACB7854DE8D432828A33F1E1A0491D1A4B0EAD
-E3F5751600D83565D0984AECFE9E66399F45D8C1B2B7113F960D3BA3851BF1E0
-2C91C149EB0DBAB88279B3B881207FE40969B0A4ADD21E0897F8F775CF9B45A2
-CA439B63BBEB1936836B4F631949E6D3757B822034F385BC97602DE8FE7A64C3
-BA9763995DEE384636E6C23424A2EEF3F7943A5D053735DBC15FA404A704AC74
-9ACE75E95A0351FBADFF4B1642B0216F3FBF94CA131F7782F62A960078E42D4F
-B7243A28F99770339E02AD61A0BD4C61183EC999CD24BE87F0D3CEC147157145
-C82797C98842DD196DE1024B30FAFB9B93EDA03CCD8A890EF83423C501808C03
-C89FF69B74AC399604E11BBE039EA7E69E4C66D728755CAAD8B2970FBBAAABF9
-921E23B2864043F1E2CBA4DFDC6C215E944107776289376E5AD409F065DF0187
-2CAD15EBF47DE0481A08BA65CAF4B348F1E6E73523A6E1A34D44D837091A6260
-F217D91DECE903684CFF88A5EC91E458AD3F43DAFA00DE90E4FF42985BCB01D9
-1620879206A13B36193A06C46AD3F75C7E4339BE86B20200E15B07B02C711B06
-0818AFA86416E07BE7B0DAD8AB233CF17FD78334C7B4E2446CF5C643B9D5AAC6
-AB86DFAB1B53FD93C8FC6E34524EF28EA6565D7F9A596E6CBE6D2BF192195627
-67BA09C4B7217EFA08B6BA127E50F4C3953BF64E4E7D2F14E43E5B8558F6C908
-31C93686CFD936FA14F41AF740BB420AD26311BC90B64305D53665FC27B4DB73
-3297517331506937109C56228D771AC2F9C8A3AA1F791A1BC6D0A7DA858C1BAC
-A59F28697EAA0DFB6A6353FCE1D07C4D3BE598B04294AFABDBA9971F8A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-{restore}if
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (pl-refcard.dvi)
-@start /Fa 197[20 58[{encplmi ReEncodeFont}1 66.4176
-/PLMathItalic8-Italic rf /Fb 78[29 14[33 39[29 35 1[47
-1[38 24 1[30 2[36 40 58 1[33 22 22 36 33 22 33 36 33
-1[36 51[26 45[{encplit ReEncodeFont}22 66.4176 /PLRoman8-Italic
-rf /Fc 242[61 13[{encplms ReEncodeFont}1 49.8132 /PLMathSymbols6-Italic
-rf /Fd 85[21 47[27 32 1[43 32 34 24 24 24 1[34 30 34
-50 18 32 19 18 34 30 19 27 34 27 34 30 9[61 45 45 1[34
-2[41 1[45 54 3[22 1[47 39 41 1[43 42 45 9[30 30 30 1[30
-30 30 30 1[18 21 18 44[{encplrm ReEncodeFont}49 49.8132
-/PLRoman6-Regular rf /Fe 12[41 55[36 9[32 5[45 27 3[37
-3[36 40 38[36 43 1[59 1[45 32 32 34 1[45 41 45 68 23
-43 25 23 1[41 25 37 45 36 45 40 16[55 34[27 45[{encplrm ReEncodeFont}32
-66.4176 /PLRoman8-Bold rf /Ff 12[35 55[35 1[35 7[35 5[35
-35 3[35 3[35 35 34[35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 2[35 2[35 35 35 1[35 2[35 35 4[35
-35 35 35 35 35 35 35 35 35 1[35 1[35 4[35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 1[35 35 35 35 35 33[{encpltt ReEncodeFont}
-85 66.4176 /PLTypewriter8-Regular rf /Fg 12[57 55[51
-9[45 5[64 39 3[53 4[56 37[57 51 60 1[83 1[64 45 45 47
-1[64 57 64 95 32 60 35 32 64 57 35 53 64 51 64 56 6[70
-2[118 1[88 80 64 86 1[78 86 1[109 69 90 1[43 2[72 75
-88 1[81 53[64 12[{encplrm ReEncodeFont}48 99.6264 /PLRoman10-Bold
-rf /Fh 35 11[35 55[31 1[31 7[28 5[39 24 3[31 3[31 35
-37[35 31 37 1[51 1[39 27 28 28 1[39 35 39 59 20 37 22
-20 39 35 22 31 39 31 39 35 20 8[72 1[53 51 39 2[48 55
-53 1[44 1[36 25 1[55 1[48 54 2[53 6[20 35 4[35 35 35
-35 1[35 20 24 20 2[27 27 20 4[35 20[39 39 12[{encplrm ReEncodeFont}65
-66.4176 /PLRoman8-Regular rf /Fi 84[76 9[67 38[61 6[54
-57 1[76 69 1[115 38 4[69 1[63 76 61 1[67 11[106 4[94
-1[108 6[108 1[90 69[{encplrm ReEncodeFont}19 119.552
-/PLRoman10-Bold rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 16 83 a Fi(Przegl\241d)46 b(p)t(olece\253)g(GNU)f
-(Emacsa)738 191 y Fh(\(dla)24 b(w)n(ersji)f(22\))0 398
-y Fg(Uruc)m(hamianie)36 b(Emacsa)0 564 y Fh(Ab)n(y)24
-b(uruc)n(homi\242)g(GNU)g(Emacsa)g(22,)f(napisz)h(jego)g(nazw)n(\246:)h
-Ff(emacs)0 672 y Fh(Ab)n(y)f(w)n(czyta\242)h(plik)f(do)g(edycji,)f
-(patrz)h(rozdzia\252)g Fe(Pliki)f Fh(p)r(oni\273ej.)0
-875 y Fg(Opuszczanie)36 b(Emacsa)0 1041 y Fh(t)n(ymczaso)n(w)n(e)26
-b(zatrzymanie)f(Emacsa)492 b Ff(C-z)0 1120 y Fh(zak)n(o\253czenie)26
-b(sesji)d(z)h(Emacsem)629 b Ff(C-x)36 b(C-c)0 1331 y
-Fg(Pliki)0 1497 y Fe(w)n(czyta)5 b(j)22 b Fh(plik)h(do)h(Emacsa)742
-b Ff(C-x)36 b(C-f)0 1576 y Fe(zapisz)23 b Fh(plik)g(na)h(dysk)898
-b Ff(C-x)36 b(C-s)0 1656 y Fh(zapisz)24 b Fe(wszystkie)f
-Fh(pliki)807 b Ff(C-x)36 b(s)0 1736 y Fe(wsta)n(w)22
-b Fh(za)n(w)n(arto\261\242)j(innego)f(pliku)g(do)g(bufora)249
-b Ff(C-x)36 b(i)0 1816 y Fh(zamie\253)24 b(plik)f(w)h(buforze)g(na)g
-(inn)n(y)578 b Ff(C-x)36 b(C-v)0 1895 y Fh(zapisz)24
-b(bufor)f(do)h(pliku)g(z)g(p)r(o)r(daniem)g(nazwy)267
-b Ff(C-x)36 b(C-w)0 1975 y Fh(k)n(on)n(trola)24 b(w)n(ersji)f(pliku)g
-(`c)n(hec)n(kin/c)n(hec)n(k)n(out')293 b Ff(C-x)36 b(C-q)0
-2186 y Fg(Uzyskiw)m(anie)h(p)s(omo)s(cy)0 2351 y Fh(Napisz)20
-b Ff(C-h)h Fh(\(lub)g Ff(F1)p Fh(\))g(i)f(p)r(ost\246puj)i(w)n
-(ed\252ug)f(dalszyc)n(h)g(instruk)n(cji.)e(Je\261li)0
-2431 y(jeste\261)d(p)r(o)r(cz\241tkuj\241cym)i(u\273ytk)n(o)n(wnikiem,)
-f(napisz)f Ff(C-u)37 b(C-h)f(t)f(Polish)0 2511 y Fh(ab)n(y)24
-b(wyw)n(o\252a\242)h Fe(samouczek)e Fh(Emacsa)h(p)r(o)g(p)r(olsku.)0
-2619 y(usu\253)g(okno)h(p)r(omo)r(cy)931 b Ff(C-x)36
-b(1)0 2699 y Fh(przewi\253)24 b(okno)g(p)r(omo)r(cy)838
-b Ff(C-M-v)0 2807 y Fh(aprop)r(os:)24 b(p)r(ok)l(a\273)h(p)r(olecenia)f
-(zgo)r(dne)i(z)d(napisem)176 b Ff(C-h)36 b(a)0 2887 y
-Fh(p)r(ok)l(a\273)25 b(funk)n(cj\246)f(uruc)n(hamian\241)h(przez)f(kla)
-n(wisz)242 b Ff(C-h)36 b(c)0 2966 y Fh(opisz)24 b(funk)n(cj\246)1115
-b Ff(C-h)36 b(f)0 3046 y Fh(p)r(ok)l(a\273)25 b(informacj\246)e(o)r
-(dnosz\241c\241)j(si\246)d(do)h(trybu)260 b Ff(C-h)36
-b(m)0 3257 y Fg(Usu)m(w)m(anie)g(b\252\246d\363)m(w)0
-3423 y Fe(przerwij)23 b Fh(cz\246\261cio)n(w)n(o)i(napisane)f(lub)71
-3503 y(wyk)n(on)n(yw)n(ane)h(p)r(olecenie)750 b Ff(C-g)0
-3584 y Fe(o)r(dzysk)-5 b(a)5 b(j)23 b Fh(plik)g(zgubion)n(y)i(w)f
-(wyniku)71 3664 y(za\252amania)g(system)n(u)625 b Ff(M-x)36
-b(recover-file)0 3743 y Fe(an)n(uluj)23 b Fh(niec)n(hcian\241)i
-(zmian\246)709 b Ff(C-x)36 b(u)f Fh(lub)h Ff(C-_)0 3825
-y Fh(w)n(czyta)t(j)25 b(plik)e(wg)h(aktualnej)g(za)n(w)n(arto\261ci)h
-(na)71 3904 y(dysku)1029 b Ff(M-x)36 b(revert-buffer)0
-3984 y Fh(up)r(orz\241dkuj)25 b(za\261miecon)n(y)f(ekran)602
-b Ff(C-l)5 4758 y Fd(c)-11 4760 y Fc(\015)20 b Fd(2007)j(F)-5
-b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)g(P)n
-(ermissions)h(on)g(bac)n(k.)g(V)-5 b(ersion)21 b(1.2)2196
-83 y Fg(Szuk)-6 b(anie)36 b(przyrosto)m(w)m(e)2196 249
-y Fh(szuk)l(a)t(j)24 b(wprz\363)r(d/wstecz)i(\()p Ff(C-f)e
-Fh(ab)n(y)h(zak)n(o\253czy\242\))188 b Ff(C-s/C-r)2196
-330 y Fh(szuk)l(a)t(j)24 b(wprz\363)r(d)g(tekstu)h(zgo)r(dnego)h(z)e
-(wpisyw)n(an)n(ym)2267 410 y(wyra\273eniem)g(regularn)n(ym)705
-b Ff(C-M-s)2196 491 y Fh(szuk)l(a)t(j)24 b(wstecz)h(tekstu)g(zgo)r
-(dnego)h(z)e(wpisyw)n(an)n(ym)2267 571 y(wyra\273eniem)g(regularn)n(ym)
-705 b Ff(C-M-r)2196 679 y Fh(wybierz)24 b(p)r(oprzedni)g(napis)762
-b Ff(M-p)2196 759 y Fh(wybierz)24 b(nast\246pn)n(y)h(napis)791
-b Ff(M-n)2196 838 y Fh(zak)n(o\253cz)26 b(szuk)l(anie)e(przyrosto)n(w)n
-(e)602 b Ff(RET)2196 918 y Fh(an)n(uluj)24 b(rezultat)g(ostatniej)h(p)r
-(opra)n(wki)460 b Ff(DEL)2196 998 y Fh(przerwij)23 b(szuk)l(anie)982
-b Ff(C-g)2196 1106 y Fh(P)n(ono)n(wne)25 b Ff(C-s)p Fh(/)p
-Ff(C-r)g Fh(p)r(o)n(wtarza)g(szuk)l(anie)g(wprz\363)r(d/wstecz.)2196
-1313 y Fg(Przemieszczanie)37 b(kursora)2196 1478 y Fe(przemie\261\242)
-27 b(kursor)751 b(wstecz)71 b(wprz\363)r(d)2196 1583
-y Fh(o)24 b(znak)1154 b Ff(C-b)198 b(C-f)2196 1663 y
-Fh(o)24 b(s\252o)n(w)n(o)1127 b Ff(M-b)198 b(M-f)2196
-1742 y Fh(o)24 b(lini\246)f(wy\273ej/ni\273ej)793 b Ff(C-p)198
-b(C-n)2196 1822 y Fh(na)24 b(p)r(o)r(cz\241tek/k)n(oniec)j(linii)615
-b Ff(C-a)198 b(C-e)2196 1902 y Fh(o)24 b(zdanie)1101
-b Ff(M-a)198 b(M-e)2196 1981 y Fh(o)24 b(ak)l(apit)1107
-b Ff(M-{)198 b(M-})2196 2061 y Fh(o)24 b(stron\246)1108
-b Ff(C-x)37 b([)126 b(C-x)36 b(])2196 2141 y Fh(o)24
-b(s-wyra\273enie)941 b Ff(C-M-b)128 b(C-M-f)2196 2221
-y Fh(na)24 b(p)r(o)r(cz\241tek/k)n(oniec)j(funk)n(cji)526
-b Ff(C-M-a)128 b(C-M-e)2196 2300 y Fh(na)24 b(p)r(o)r(cz\241tek/k)n
-(oniec)j(bufora)536 b Ff(M-<)198 b(M->)2196 2409 y Fh(przewi\253)24
-b(do)g(nast\246pnego)i(ekran)n(u)578 b Ff(C-v)2196 2488
-y Fh(przewi\253)24 b(do)g(p)r(oprzedniego)h(ekran)n(u)514
-b Ff(M-v)2196 2568 y Fh(przewi\253)24 b(w)f(lew)n(o)1039
-b Ff(C-x)36 b(<)2196 2648 y Fh(przewi\253)24 b(w)f(pra)n(w)n(o)990
-b Ff(C-x)36 b(>)2196 2727 y Fh(umie\261\242)24 b(lini\246)f(z)g
-(kursorem)h(na)g(\261ro)r(dku)g(ekran)n(u)226 b Ff(C-u)36
-b(C-l)2196 2938 y Fg(Kaso)m(w)m(anie)g(i)i(usu)m(w)m(anie)2196
-3104 y Fe(obiekt)26 b(do)h(sk)-5 b(aso)n(w)n(ania)524
-b(wstecz)156 b(wprz\363)r(d)2196 3208 y Fh(znak)25 b(\(usu\253,)f(nie)f
-(k)l(asuj\))590 b Ff(DEL)283 b(C-d)2196 3288 y Fh(s\252o)n(w)n(o)1101
-b Ff(M-DEL)213 b(M-d)2196 3368 y Fh(linia)23 b(\(o)r(d)h(kursora)g(do)g
-(k)n(o\253ca\))432 b Ff(M-0)36 b(C-k)142 b(C-k)2196 3448
-y Fh(zdanie)1075 b Ff(C-x)36 b(DEL)142 b(M-k)2196 3527
-y Fh(s-wyra\273enie)915 b Ff(M--)36 b(C-M-k)72 b(C-M-k)2196
-3636 y Fh(k)l(asuj)24 b(obszar)1134 b Ff(C-w)2196 3715
-y Fh(wsta)n(w)24 b(obszar)g(do)g(`kill)e(ring')698 b
-Ff(M-w)2196 3795 y Fh(k)l(asuj)24 b(wszystk)n(o)h(a\273)f(do)g
-(wyst\241)r(pienia)g Fb(char)322 b Ff(M-z)36 b Fb(char)2196
-3903 y Fh(wsta)n(w)24 b(ostatnio)h(sk)l(aso)n(w)n(an)n(y)g(obiekt)497
-b Ff(C-y)2196 3985 y Fh(zamie\253)24 b(wsta)n(wion)n(y)h(obiekt)f(z)g
-(uprzednio)2267 4064 y(sk)l(aso)n(w)n(an)n(ym)1066 b
-Ff(M-y)2040 6050 y Fh(1)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 83 a Fg(Zaznaczanie)0 249 y Fh(wsta)n(w)24
-b(znacznik)h(w)f(p)r(ozycji)g(kursora)463 b Ff(C-@)36
-b Fh(or)f Ff(C-SPC)0 328 y Fh(zamie\253)24 b(p)r(ozycje)h(kursora)e(i)h
-(znacznik)l(a)428 b Ff(C-x)36 b(C-x)0 437 y Fh(zaznacz)26
-b(s\252o)n(w)n(o)d(p)r(o)h Fb(ar)l(g)30 b Fh(s\252\363)n(w)699
-b Ff(M-@)0 516 y Fh(zaznacz)26 b(ak)l(apit)1063 b Ff(M-h)0
-596 y Fh(zaznacz)26 b(stron\246)1064 b Ff(C-x)36 b(C-p)0
-676 y Fh(zaznacz)26 b(s-wyra\273enie)897 b Ff(C-M-@)0
-755 y Fh(zaznacz)26 b(funk)n(cj\246)1033 b Ff(C-M-h)0
-835 y Fh(zaznacz)26 b(ca\252y)e(bufor)938 b Ff(C-x)36
-b(h)0 1046 y Fg(Zamiana)h(z)h(zap)m(ytaniem)0 1211 y
-Fh(zamiana)24 b(tekstu)h(w)f(trybie)g(in)n(terak)n(cyjn)n(ym)302
-b Ff(M-\045)0 1291 y Fh(z)24 b(u\273yciem)g(wyra\273e\253)h(regularn)n
-(yc)n(h)549 b Ff(C-M-\045)0 1399 y Fh(Odp)r(o)n(wiedzi)24
-b(w)g(in)n(terak)n(cyjn)n(ym)g(trybie)g(zamian)n(y:)0
-1508 y Fe(zamie\253)f Fh(i)g(wyszuk)l(a)t(j)h(nast\246pn)n(y)i(tekst)
-443 b Ff(SPC)0 1587 y Fh(zamie\253)24 b(nie)g(przemieszcza)t(j\241c)h
-(kursora)416 b Ff(,)0 1667 y Fe(nie)24 b(zamienia)5 b(j)21
-b Fh(i)i(wyszuk)l(a)t(j)i(nast\246pn)n(y)g(tekst)223
-b Ff(DEL)0 1747 y Fh(wyszuk)l(a)t(j)24 b(i)f(zamie\253)i(wszystkie)f(p)
-r(ozosta\252e)h(tekst)n(y)113 b Ff(!)0 1827 y Fe(p)r(o)n(wr\363)r(\242)
-23 b Fh(do)h(p)r(oprzedniej)g(zamian)n(y)498 b Ff(^)0
-1906 y Fe(zak)n(o\253cz)23 b Fh(zamian\246)i(in)n(terak)n(cyjn\241)561
-b Ff(RET)0 1988 y Fh(w)n(ejd\271)24 b(do)g(trybu)g(rekursywnej)g
-(edycji)g(\()p Ff(C-M-c)h Fh(ab)n(y)71 2067 y(zak)n(o\253czy\242\))1108
-b Ff(C-r)0 2278 y Fg(Wiele)37 b(okien)0 2444 y Fh(Drugie)23
-b(z)h(p)r(olece\253)h(dot)n(yczy)h(\377innej)e(ramki")0
-2552 y(usu\253)g(p)r(ozosta\252e)h(okna)884 b Ff(C-x)36
-b(1)0 2660 y Fh(p)r(o)r(dziel)24 b(okno)h(\(jedno)f(nad)g(drugim\))270
-b Ff(C-x)36 b(2)212 b(C-x)36 b(5)g(2)0 2740 y Fh(usu\253)24
-b(okno)970 b Ff(C-x)36 b(0)212 b(C-x)36 b(5)g(0)0 2848
-y Fh(p)r(o)r(dziel)24 b(okno)h(\(jedno)f(ob)r(ok)h(drugiego\))418
-b Ff(C-x)36 b(3)0 2957 y Fh(przewija)t(j)23 b(w)g(inn)n(ym)h(oknie)753
-b Ff(C-M-v)0 3065 y Fh(przenie\261)24 b(kursor)f(do)h(innego)h(okna)328
-b Ff(C-x)36 b(o)212 b(C-x)36 b(5)g(o)0 3145 y Fh(wybierz)24
-b(bufor)f(w)h(inn)n(ym)f(oknie)386 b Ff(C-x)36 b(4)g(b)141
-b(C-x)36 b(5)g(b)0 3224 y Fh(p)r(ok)l(a\273)25 b(bufor)e(w)h(inn)n(ym)f
-(oknie)447 b Ff(C-x)36 b(4)g(C-o)71 b(C-x)36 b(5)g(C-o)0
-3304 y Fh(zna)t(jd\271)24 b(plik)g(i)f(p)r(ok)l(a\273)i(go)f(w)f(inn)n
-(ym)h(oknie)131 b Ff(C-x)36 b(4)g(f)141 b(C-x)36 b(5)g(f)0
-3384 y Fh(jak)24 b(wy\273ej,)f(t)n(ylk)n(o)i(w)e(trybie)h(do)g
-(czytania)142 b Ff(C-x)36 b(4)g(r)141 b(C-x)36 b(5)g(r)0
-3464 y Fh(uruc)n(hom)24 b(`Dired')e(w)i(inn)n(ym)g(oknie)306
-b Ff(C-x)36 b(4)g(d)141 b(C-x)36 b(5)g(d)0 3543 y Fh(zna)t(jd\271)24
-b(de\014nicj\246)h(w)e(inn)n(ym)h(oknie)331 b Ff(C-x)36
-b(4)g(.)141 b(C-x)36 b(5)g(.)0 3652 y Fh(p)r(o)n(wi\246ksz)24
-b(okno)h(w)e(pionie)786 b Ff(C-x)36 b(^)0 3731 y Fh(zmniejsz)24
-b(okno)g(w)g(p)r(oziomie)709 b Ff(C-x)36 b({)0 3811 y
-Fh(p)r(oszerz)24 b(okno)1116 b Ff(C-x)36 b(})2196 83
-y Fg(F)-10 b(ormato)m(w)m(anie)2196 249 y Fh(w)n(etnij)24
-b(bie\273\241c\241)h Fe(lini\246)d Fh(\(zale\273ne)k(o)r(d)e(trybu\))
-311 b Ff(TAB)2196 328 y Fh(w)n(etnij)24 b Fe(obszar)f
-Fh(\(zale\273ne)i(o)r(d)f(trybu\))481 b Ff(C-M-\\)2196
-408 y Fh(w)n(etnij)24 b Fe(s-wyra\273enie)f Fh(\(zale\273ne)i(o)r(d)f
-(trybu\))296 b Ff(C-M-q)2196 488 y Fh(w)n(etnij)24 b(obszar)g(o)g
-Fb(ar)l(g)29 b Fh(k)n(olumn)669 b Ff(C-x)36 b(TAB)2196
-596 y Fh(wsta)n(w)24 b(no)n(w)n(\241)g(lini\246)f(za)h(kursorem)589
-b Ff(C-o)2196 676 y Fh(przesu\253)24 b(cz\246\261\242)h(linii)d(za)i
-(kursorem)g(w)f(d\363\252)363 b Ff(C-M-o)2196 755 y Fh(usu\253)24
-b(puste)h(linie)d(w)n(ok)n(\363\252)j(kursora)568 b Ff(C-x)36
-b(C-o)2196 835 y Fh(p)r(o\252\241cz)25 b(lini\246)e(z)g(p)r
-(oprzedni\241)i(\(z)g Fb(ar)l(g)30 b Fh({)23 b(z)h(nast\246pn\241\))98
-b Ff(M-^)2196 915 y Fh(usu\253)24 b(o)r(dst\246p)n(y)h(do)r(ok)n
-(o\252a)g(kursora)586 b Ff(M-\\)2196 996 y Fh(p)r(ozosta)n(w)25
-b(dok\252adnie)g(jedn\241)f(spacj\246)g(w)g(p)r(ozycji)2267
-1076 y(kursora)1210 b Ff(M-SPC)2196 1184 y Fh(wyp)r(e\252nij)23
-b(ak)l(apit)1034 b Ff(M-q)2196 1264 y Fh(usta)n(w)24
-b(n)n(umer)g(k)n(olumn)n(y)g(dla)g(trybu)g(wyp)r(e\252niania)121
-b Ff(C-x)36 b(f)2196 1343 y Fh(usta)n(w)24 b(przedrostek)h(dla)f(k)l
-(a\273dego)h(no)n(w)n(ego)g(wiersza)77 b Ff(C-x)36 b(.)2196
-1452 y Fh(usta)n(w)24 b(czcionk)n(\246)1056 b Ff(M-g)2196
-1663 y Fg(Zamiana)37 b(wielk)m(o\261ci)h(liter)2196 1828
-y Fh(zamie\253)24 b(w)g(s\252o)n(wie)f(litery)g(ma\252e)h(na)g(du\273e)
-390 b Ff(M-u)2196 1908 y Fh(zamie\253)24 b(w)g(s\252o)n(wie)f(litery)g
-(du\273e)i(na)f(ma\252e)389 b Ff(M-l)2196 1988 y Fh(zamie\253)24
-b(pierwsz\241)g(liter\246)f(w)h(s\252o)n(wie)f(na)h(du\273\241)278
-b Ff(M-c)2196 2096 y Fh(zamie\253)24 b(w)g(obszarze)g(litery)g(ma\252e)
-f(na)h(du\273e)318 b Ff(C-x)36 b(C-u)2196 2176 y Fh(zamie\253)24
-b(w)g(obszarze)g(litery)g(du\273e)g(na)g(ma\252e)317
-b Ff(C-x)36 b(C-l)2196 2387 y Fg(Minibufor)2196 2552
-y Fh(uzup)r(e\252nij)24 b(tekst)h(o)f(t)n(yle)g(o)g(ile)f(jest)g(to)i
-(mo\273liw)n(e)214 b Ff(TAB)2196 2632 y Fh(uzup)r(e\252nij)24
-b(o)g(jedno)g(s\252o)n(w)n(o)783 b Ff(SPC)2196 2712 y
-Fh(uzup)r(e\252nij)24 b(i)f(wyk)n(ona)t(j)900 b Ff(RET)2196
-2791 y Fh(p)r(ok)l(a\273)25 b(mo\273liw)n(e)f(uzup)r(e\252nienia)653
-b Ff(?)2196 2873 y Fh(przyw)n(o\252a)t(j)24 b(uprzednio)g(wpro)n(w)n
-(adzon)n(y)h(tekst)g(do)2267 2952 y(minibufora)1104 b
-Ff(M-p)2196 3034 y Fh(przyw)n(o\252a)t(j)24 b(nast\246pn)n(y)h(tekst)g
-(z)f(`kill)e(ring')h(do)2267 3113 y(minibufora)1104 b
-Ff(M-n)2196 3193 y Fh(wyszukuj)24 b(wstecz)h(p)r(oprzez)g(histori\246)e
-(wpro)n(w)n(adze\253)92 b Ff(M-r)2196 3274 y Fh(wyszukuj)24
-b(wprz\363)r(d)g(p)r(oprzez)h(histori\246)2267 3354 y(wpro)n(w)n
-(adze\253)1065 b Ff(M-s)2196 3434 y Fh(przerwij)23 b(wyk)n(on)n(yw)n
-(ane)i(p)r(olecenie)548 b Ff(C-g)2196 3542 y Fh(Napisz)23
-b Ff(C-x)36 b(ESC)g(ESC)24 b Fh(ab)n(y)f(p)r(opra)n(wia\242)h(i)e(wyk)n
-(ona\242)i(p)r(olecenie,)g(kt\363re)2196 3622 y(ostatnio)h(u\273yw)n
-(a\252o)f(minibufora.)e(Napisz)h Ff(F10)i Fh(ab)n(y)f(uakt)n(ywni\242)g
-(men)n(u)2196 3701 y(w)f(minibuforze.)2040 6050 y(2)p
-eop end
-%%Page: 3 3
-TeXDict begin 3 2 bop 16 83 a Fi(Przegl\241d)46 b(p)t(olece\253)g(GNU)f
-(Emacsa)0 325 y Fg(Bufory)0 491 y Fh(wybierz)24 b(inn)n(y)g(bufor)930
-b Ff(C-x)36 b(b)0 570 y Fh(p)r(ok)l(a\273)25 b(spis)e(wszystkic)n(h)i
-(bufor\363)n(w)574 b Ff(C-x)36 b(C-b)0 650 y Fh(sk)l(asuj)24
-b(bufor)1139 b Ff(C-x)36 b(k)0 861 y Fg(Przesta)m(wianie)0
-1026 y Fh(przesta)n(w)25 b Fe(znaki)1031 b Ff(C-t)0 1106
-y Fh(przesta)n(w)25 b Fe(s\252o)n(w)n(a)1023 b Ff(M-t)0
-1186 y Fh(przesta)n(w)25 b Fe(linie)1067 b Ff(C-x)36
-b(C-t)0 1266 y Fh(przesta)n(w)25 b Fe(s-wyra\273enia)802
-b Ff(C-M-t)0 1476 y Fg(T)-10 b(ags)0 1641 y Fh(zna)t(jd\271)24
-b(okre\261lenie)g(\(de\014nicj\246\))656 b Ff(M-.)0 1721
-y Fh(zna)t(jd\271)24 b(nast\246pne)i(wyst\241)r(pienie)e(de\014nicji)
-366 b Ff(C-u)36 b(M-.)0 1801 y Fh(p)r(o)r(da)t(j)24 b(no)n(wy)g(plik)f
-(T)-6 b(A)n(GS)532 b Ff(M-x)36 b(visit-tags-table)0 1911
-y Fh(wyszukiw)n(anie)24 b(tekstu)i(zgo)r(dnego)f(z)f(p)r(o)r(dan)n(ym)
-71 1990 y(wyra\273eniem)g(regularn)n(ym)f(w)n(e)h(wszystkic)n(h)71
-2070 y(plik)l(ac)n(h)g(wymienion)n(yc)n(h)g(w)g(T)-6
-b(A)n(GS)247 b Ff(M-x)36 b(tags-search)0 2151 y Fh(zamiana)24
-b(z)g(zap)n(ytaniem)i(w)n(e)e(wszystkic)n(h)71 2231 y(plik)l(ac)n(h)g
-(wymienion)n(yc)n(h)g(w)g(T)-6 b(A)n(GS)179 b Ff(M-x)36
-b(tags-query-replace)0 2312 y Fh(k)n(on)n(t)n(yn)n(uuj)25
-b(wyszukiw)n(anie)g(lub)e(zamian\246)71 2392 y(z)g(zap)n(ytaniem)j(w)d
-(plik)l(ac)n(h)h(wymienion)n(yc)n(h)71 2472 y(w)f(T)-6
-b(A)n(GS)1176 b Ff(M-,)0 2683 y Fg(P)m(o)m(w\252oki)0
-2848 y Fh(wyk)n(ona)t(j)24 b(p)r(olecenie)h(p)r(o)n(w\252oki)684
-b Ff(M-!)0 2928 y Fh(wyk)n(ona)t(j)24 b(p)r(olecenie)h(p)r(o)n
-(w\252oki)f(na)g(obszarze)304 b Ff(M-|)0 3008 y Fh(\014ltruj)23
-b(obszar)h(p)r(oprzez)h(p)r(olecenie)g(p)r(o)n(w\252oki)287
-b Ff(C-u)36 b(M-|)0 3087 y Fh(uruc)n(hom)24 b(p)r(o)n(w\252ok)n(\246)h
-(w)e(oknie)h Ff(*shell*)439 b(M-x)36 b(shell)0 3298 y
-Fg(Prostok)-6 b(\241t)m(y)0 3464 y Fh(zapisz)24 b(prostok)l(\241t)h(do)
-f(rejestru)659 b Ff(C-x)36 b(r)f(r)0 3543 y Fh(sk)l(asuj)24
-b(prostok)l(\241t)1015 b Ff(C-x)36 b(r)f(k)0 3623 y Fh(wklej)23
-b(prostok)l(\241t)1040 b Ff(C-x)36 b(r)f(y)0 3705 y Fh(wsta)n(w)24
-b(pust)n(y)h(prostok)l(\241t)g(przesu)n(w)n(a)t(j\241c)71
-3784 y(tekst)f(w)g(pra)n(w)n(o)1007 b Ff(C-x)36 b(r)f(o)0
-3864 y Fh(wyczy\261\242)25 b(prostok)l(\241t)953 b Ff(C-x)36
-b(r)f(c)0 3944 y Fh(wsta)n(w)24 b(napis)g(na)g(p)r(o)r(cz\241tku)i(k)l
-(a\273dej)e(linii)376 b Ff(C-x)36 b(r)f(t)0 4155 y Fg(Skr\363t)m(y)0
-4320 y Fh(do)r(da)t(j)24 b(skr\363t)g(globalnie)858 b
-Ff(C-x)36 b(a)f(g)0 4400 y Fh(do)r(da)t(j)24 b(skr\363t)g(lok)l(aln)n
-(y)g(dla)g(trybu)603 b Ff(C-x)36 b(a)f(l)0 4480 y Fh(do)r(da)t(j)24
-b(rozwini\246cie)g(globalne)g(dla)g(skr\363tu)360 b Ff(C-x)36
-b(a)f(i)h(g)0 4559 y Fh(do)r(da)t(j)24 b(rozwini\246cie)g(lok)l(alne)g
-(dla)f(trybu)i(dla)e(skr\363tu)90 b Ff(C-x)36 b(a)f(i)h(l)0
-4639 y Fh(rozwi\253)23 b(teraz)i(skr\363t)952 b Ff(C-x)36
-b(a)f(e)0 4747 y Fh(uzup)r(e\252nij)24 b(dynamicznie)h(p)r(oprzednie)f
-(s\252o)n(w)n(o)268 b Ff(M-/)2196 83 y Fg(Wyra\273enia)38
-b(regularne)2196 243 y Fh(do)n(w)n(oln)n(y)24 b(znak)h(za)f
-(wyj\241tkiem)g(znaku)h(no)n(w)n(ej)f(linii)114 b Ff(.)35
-b Fh(\(kropk)l(a\))2196 323 y(zero)24 b(lub)g(wi\246cej)f(p)r(o)n
-(wt\363rze\253)715 b Ff(*)2196 403 y Fh(jedno)24 b(lub)g(wi\246cej)f(p)
-r(o)n(wt\363rze\253)674 b Ff(+)2196 482 y Fh(zero)24
-b(lub)g(jedno)g(p)r(o)n(wt\363rzenie)683 b Ff(?)2196
-564 y Fh(traktuj)24 b(dos\252o)n(wnie)g(nast\246pn)n(y)i(znak)e(\(na)n
-(w)n(et)i(je\261li)2267 643 y(znak)e(ma)g(sp)r(ecjalne)g(znaczenie\))i
-Fb(c)480 b Ff(\\)p Fb(c)2196 723 y Fh(alternat)n(yw)n(a)25
-b(\(`lub'\))933 b Ff(\\|)2196 803 y Fh(grup)r(o)n(w)n(anie)1161
-b Ff(\\\()35 b Fa(:)12 b(:)f(:)35 b Ff(\\\))2196 883
-y Fh(tekst)25 b(n-tej)e(grup)n(y)994 b Ff(\\)p Fb(n)2196
-962 y Fh(na)24 b(p)r(o)r(cz\241tku)i(lub)d(k)n(o\253cu)i(s\252o)n(w)n
-(a)615 b Ff(\\b)2196 1042 y Fh(nie)24 b(na)g(p)r(o)r(cz\241tku)i(i)d
-(nie)g(na)h(k)n(o\253cu)h(s\252o)n(w)n(a)368 b Ff(\\B)2196
-1149 y Fe(obiekt)26 b(do)h(p)r(or\363)n(wnania)540 b(p)r(o)r(cz\241tek)
-70 b(k)n(oniec)2196 1253 y Fh(linia)1179 b Ff(^)349 b($)2196
-1332 y Fh(s\252o)n(w)n(o)1144 b Ff(\\<)314 b(\\>)2196
-1412 y Fh(bufor)1150 b Ff(\\`)314 b(\\')2196 1519 y Fe(k)-5
-b(ategoria)25 b(znak)n(\363)n(w)583 b(p)r(or\363)n(wna)5
-b(j)26 b(z)70 b(p)r(ozosta\252ymi)2196 1623 y Fh(p)r(o)r(dan)n(y)25
-b(zbi\363r)e(znak)n(\363)n(w)543 b Ff([)36 b Fa(:)11
-b(:)h(:)34 b Ff(])244 b([^)36 b Fa(:)11 b(:)h(:)35 b
-Ff(])2196 1703 y Fh(znak)25 b(k)l(ategorii)f(sk\252adnio)n(w)n(ej)g
-(`s\252o)n(w)n(o')149 b Ff(\\w)397 b(\\W)2196 1782 y
-Fh(znak)25 b(k)l(ategorii)f(sk\252adnio)n(w)n(ej)g Fb(c)325
-b Ff(\\s)p Fb(c)364 b Ff(\\S)p Fb(c)2196 1979 y Fg(Mi\246dzynaro)s(do)m
-(w)m(e)36 b(zesta)m(wy)h(znak)m(\363)m(w)2196 2139 y
-Fh(ustal)24 b(g\252\363)n(wn)n(y)g(j\246zyk)534 b Ff(M-x)36
-b(set-language-environmen)q(t)2196 2221 y Fh(wypisz)24
-b(wszystkie)g(meto)r(dy)h(wpro)n(w)n(adzania)2267 2300
-y(znak)n(\363)n(w)917 b Ff(M-x)36 b(list-input-methods)2196
-2380 y Fh(w\252\241cz/wy\252\241cz)25 b(meto)r(d\246)g(wpro)n(w)n
-(adzania)g(znak)n(\363)n(w)138 b Ff(C-\\)2196 2461 y
-Fh(ustal)24 b(system)g(k)n(o)r(do)n(w)n(ania)h(dla)f(nast\246pnego)2267
-2541 y(p)r(olecenia)1157 b Ff(C-x)36 b(RET)g(c)2196 2621
-y Fh(wypisz)24 b(wszystkie)g(system)n(y)h(k)n(o)r(do)n(w)n(ania)58
-b Ff(M-x)36 b(list-coding-systems)2196 2702 y Fh(wybierz)24
-b(prefero)n(w)n(an)n(y)g(system)2267 2782 y(k)n(o)r(do)n(w)n(ania)783
-b Ff(M-x)37 b(prefer-coding-system)2196 2861 y Fh(wybierz)24
-b(meto)r(d\246)h(wpro)n(w)n(adzania)f(znak)n(\363)n(w)88
-b Ff(C-x)36 b(RET)g(C-\\)2196 2968 y Fh(P)n(o)24 b(wybraniu)g(meto)r
-(dy)g(wpro)n(w)n(adzania)h(znak)n(\363)n(w)g Ff(polish-slash)p
-Fh(,)2196 3048 y(k)l(a\273d\241)18 b(z)g(liter)e Ff
-(\241\242\246\252\253\363\261\271\273/)k Fh(uzysk)l(am)n(y)f(pisz\241c)
-e(ciac)n(h)h(`)p Ff(/)p Fh(')f(i)f(o)r(dp)r(o)n(wiedni)2196
-3128 y(znak)25 b(z)f Ff(acelnosxz/)p Fh(.)2196 3315 y
-Fg(Rejestry)2196 3476 y Fh(zapisz)g(obszar)g(do)g(rejestru)751
-b Ff(C-x)36 b(r)f(s)2196 3555 y Fh(wsta)n(w)24 b(za)n(w)n(arto\261\242)
-h(rejestru)e(do)h(bufora)422 b Ff(C-x)36 b(r)f(i)2196
-3662 y Fh(zapisz)24 b(p)r(ozycj\246)h(kursora)e(w)h(rejestrze)465
-b Ff(C-x)36 b(r)f(SPC)2196 3744 y Fh(przemie\261\242)24
-b(kursor)f(do)h(p)r(ozycji)g(zapisanej)2267 3823 y(w)f(rejestrze)1109
-b Ff(C-x)36 b(r)f(j)2196 4028 y Fg(Makrop)s(olecenia)2196
-4188 y Fe(zacznij)23 b Fh(de\014nicj\246)i(makrop)r(olecenia)493
-b Ff(C-x)36 b(\()2196 4268 y Fe(zak)n(o\253cz)23 b Fh(de\014nicj\246)i
-(makrop)r(olecenia)459 b Ff(C-x)36 b(\))2196 4349 y Fe(wyk)n(ona)5
-b(j)22 b Fh(ostatnio)j(zde\014nio)n(w)n(ane)2267 4429
-y(makrop)r(olecenie)967 b Ff(C-x)36 b(e)2196 4508 y Fh(dopisz)24
-b(do)g(de\014nicji)g(ostatniego)h(makrop)r(olecenia)118
-b Ff(C-u)36 b(C-x)g(\()2196 4588 y Fh(nazwij)24 b(ostatnie)g(makrop)r
-(olecenie)233 b Ff(M-x)36 b(name-last-kbd-macro)2196
-4670 y Fh(wpisz)23 b(do)i(bufora)e(nazw)n(ane)2267 4749
-y(makro)g(Lisp)r(o)n(w)n(e)713 b Ff(M-x)36 b(insert-kbd-macro)2040
-6050 y Fh(3)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 0 83 a Fg(Info)0 249 y Fh(w)n(ejd\271)24
-b(w)g(tryb)f(czytania)j(dokumen)n(tacji)f(Info)247 b
-Ff(C-h)36 b(i)0 328 y Fh(wyszuk)l(a)t(j)24 b(p)r(o)r(dan\241)h(funk)n
-(cj\246)f(lub)g(zmienn\241)g(w)g(Info)117 b Ff(C-h)36
-b(S)0 437 y Fh(P)n(oruszanie)24 b(si\246)g(w)f(obr\246bie)h(w)n
-(\246z\252a)g(Info:)71 545 y(przegl\241da)t(j)g(do)g(przo)r(du)786
-b Ff(SPC)71 625 y Fh(przegl\241da)t(j)24 b(do)g(t)n(y\252u)874
-b Ff(DEL)71 704 y Fh(na)24 b(p)r(o)r(cz\241tek)i(w)n(\246z\252a)876
-b Ff(.)35 b Fh(\(kropk)l(a\))0 813 y(P)n(oruszanie)24
-b(si\246)g(p)r(omi\246dzy)g(w)n(\246z\252ami:)71 921
-y Fe(nast\246pn)n(y)f Fh(w)n(\246ze\252)934 b Ff(n)71
-1001 y Fe(p)r(oprzedni)23 b Fh(w)n(\246ze\252)898 b Ff(p)71
-1080 y Fh(przenie\261)24 b(si\246)f Fe(wy\273ej)867 b
-Ff(u)71 1160 y Fh(wybierz)23 b(p)r(ozycj\246)i(z)f(men)n(u,)g(p)r(o)r
-(da)t(j\241c)g(jej)f(nazw)n(\246)111 b Ff(m)71 1241 y
-Fh(wybierz)23 b(n-t\241)h(p)r(ozycj\246)h(z)f(men)n(u)g(p)r(o)r(da)t
-(j\241c)71 1321 y(liczb)r(\246)g(\(1-9\))1094 b Fb(n)71
-1401 y Fh(spra)n(wd\271)23 b(o)r(dsy\252acz)i(\(p)r(o)n(wr\363t)g(z)f
-Ff(l)p Fh(\))497 b Ff(f)71 1480 y Fh(p)r(o)n(wr\363)r(\242)24
-b(do)g(ostatnio)h(przegl\241danego)g(w)n(\246z\252a)198
-b Ff(l)71 1560 y Fh(p)r(o)n(wr\363)r(\242)24 b(do)g(sk)n(oro)n(widza)
-762 b Ff(d)71 1640 y Fh(wybierz)23 b(w)n(\246ze\252)i(p)r(o)r(da)t
-(j\241c)f(jego)g(nazw)n(\246)389 b Ff(g)0 1748 y Fh(P)n(ozosta\252e)25
-b(p)r(olecenia:)71 1856 y(wyw)n(o\252a)t(j)e Fe(samouczek)g
-Fh(Info)638 b Ff(h)71 1936 y Fh(wyszuk)l(a)t(j)24 b(zagadnienie)h(w)f
-(indeksac)n(h)384 b Ff(i)71 2017 y Fh(wyszukuj)24 b(w)f(w)n
-(\246z\252ac)n(h)i(tekst)g(zgo)r(dn)n(y)71 2097 y(z)e(p)r(o)r(dan)n(ym)
-i(wyra\273eniem)f(regularn)n(ym)341 b Ff(s)71 2177 y
-Fe(zak)n(o\253cz)23 b Fh(Info)1021 b Ff(q)0 2388 y Fg(Dired)37
-b({)i(edytor)f(k)-6 b(atalog\363)m(w)0 2553 y Fh(wyw)n(o\252anie)24
-b(edytora)h(k)l(atalog\363)n(w)605 b Ff(C-x)36 b(d)0
-2633 y Fh(usta)n(w)24 b(\015ag\246)h(`D')e(\(do)h(usuni\246cia\))h(na)f
-(pliku)315 b Ff(d)0 2713 y Fh(usta)n(w)24 b(\015ag\246)h(`D')e(na)h
-(plik)l(ac)n(h)g(zapaso)n(wyc)n(h)333 b Ff(~)0 2792 y
-Fh(zdejmij)23 b(\015ag\246)i(`D')d(z)i(pliku)773 b Ff(u)0
-2872 y Fh(usu\253)24 b(pliki)f(oznaczone)j(\015ag\241)f(`D')587
-b Ff(x)0 2952 y Fh(uaktualnij)24 b(za)n(w)n(arto\261\242)h(bufora)654
-b Ff(g)0 3033 y Fh(w)n(czyta)t(j)25 b(plik)e(wsk)l(azyw)n(an)n(y)i
-(przez)g(kursor)e(do)71 3113 y(bufora)1242 b Ff(f)0 3194
-y Fh(prze\252\241cz)25 b(mi\246dzy)f(p)r(orz\241dkiem)g(alfab)r(et)n
-(yczn)n(ym)71 3274 y(a)f(p)r(orz\241dkiem)i(w)n(ed\252ug)f(dat)n(y)h(i)
-e(czasu)71 3354 y(p)r(o)n(wstania)h(pliku)952 b Ff(s)0
-3464 y Fh(wybierz)24 b(z)g(bie\273\241cego)h(k)l(atalogu)h(i)d(jego)71
-3543 y(p)r(o)r(dk)l(atalog\363)n(w)j(wszystkie)e(pliki,)e(kt\363re)71
-3623 y(za)n(wiera)t(j\241)h(tekst)i(zgo)r(dn)n(y)g(z)f(p)r(o)r(dan)n
-(ym)71 3703 y(wyra\273eniem)g(regularn)n(ym)459 b Ff(M-x)36
-b(find-grep-dired)0 3914 y Fg(P)m(olecenia)29 b(dot)m(ycz\241ce)h
-(j\246zyk)-6 b(a)31 b(Emacs)g(Lisp)0 4079 y Fh(oblicz)24
-b Fe(s-wyra\273enie)f Fh(przed)h(kursorem)398 b Ff(C-x)36
-b(C-e)0 4159 y Fh(oblicz)24 b(akt)n(ywn\241)h Fe(defun)830
-b Ff(C-M-x)0 4239 y Fh(oblicz)24 b(s-wyra\273enia)g(w)f
-Fe(obszarze)322 b Ff(M-x)36 b(eval-region)0 4320 y Fh(w)n(czyta)t(j)25
-b Fe(s-wyra\273enie)e Fh(i)g(oblicz)h(je)71 4400 y(w)f(minibuforze)1003
-b Ff(M-:)0 4481 y Fh(w)n(czyta)t(j)25 b(bibliotek)n(\246)f(z)g(k)l
-(atalogu)71 4561 y(systemo)n(w)n(ego)816 b Ff(M-x)36
-b(load-library)2196 83 y Fg(Proste)i(mo)s(dy\014k)-6
-b(acje)2196 249 y Fh(mo)r(dy\014k)n(o)n(w)n(anie)25 b(w)n(arto\261ci)f
-(zmienn)n(yc)n(h)2267 328 y(i)f(czcionek)911 b Ff(M-x)36
-b(customize)2196 437 y Fh(Przyk\252ady)24 b(przypisania)g(kla)n(wisza)g
-(funk)n(cji)f(Emacs)h(Lispu)2196 516 y(z)g(wyk)n(orzystaniem)h(notacji)
-f Ff("...")h Fh(i)e(notacji)h Ff([...])p Fh(:)2196 625
-y Ff(\(global-set-key)40 b("\\C-cg")d('goto-line\))2196
-704 y(\(global-set-key)j("\\M-#")d('query-replace-regexp\))2196
-809 y(\(global-set-key)j([?\\C-c)d(?g])f('goto-line\))2196
-889 y(\(global-set-key)k([?\\M-#])d('query-replace-regexp\))2196
-1094 y Fg(Tw)m(orzenie)f(no)m(wyc)m(h)i(p)s(olece\253)2196
-1259 y Ff(\(defun)f Fb(nazwa-funkcji)42 b Ff(\()p Fb(ar)l(gumenty)6
-b Ff(\))2267 1339 y(")p Fb(dokumentacja)f Ff(")2267 1419
-y(\(interactive)38 b(")p Fb(wzorze)l(c)t Ff("\))2267
-1498 y Fb(tr)l(e\261\242)25 b(funkcji)6 b Ff(\))2196
-1607 y Fh(Przyk\252ad:)2196 1715 y Ff(\(defun)37 b
-(this-line-to-top-of-win)q(dow)42 b(\(line\))2267 1795
-y("Przewi\253)37 b(lini\246)g(z)e(kursorem)j(do)e(pierwszej)i(linii)e
-(okna.)2196 1874 y(Z)g(ARG,)g(przewi\253)h(do)f(linii)h(ARG.")2267
-1954 y(\(interactive)h("P"\))2267 2034 y(\(recenter)f(\(if)g(\(null)f
-(line\))2761 2113 y(0)2690 2193 y(\(prefix-numeric-value)41
-b(line\)\)\)\))2196 2301 y Fh(W)28 b(funk)n(cji)f Ff(interactive)k
-Fb(wzorze)l(c)h Fh(opisuje,)27 b(jak)g(b)r(\246d\241)i(czytane)h(ar-)
-2196 2381 y(gumen)n(t)n(y)35 b(w)e(trybie)h(in)n(terak)n(cyjn)n(ym.)g
-(Szczeg\363\252o)n(wy)h(opis)f(uzysk)l(asz)2196 2461
-y(przez)24 b(wyw)n(o\252anie)h Ff(C-h)36 b(f)f(interactive)p
-Fh(.)2489 3610 y Fd(Cop)n(yrigh)n(t)2792 3608 y(c)2775
-3610 y Fc(\015)21 b Fd(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5
-b(oundation,)20 b(Inc.)2533 3674 y(W)-5 b(ersja)21 b(1.2)h(dla)e(GNU)g
-(Emacsa)i(22,)f(czerwiec)h(2006)2845 3738 y(pro)s(jekt)g(Stephen)e
-(Gildea)2813 3802 y(t\252umaczenie)g(W\252o)r(dek)h(Bzyl)2196
-3894 y(P)n(ermission)i(is)h(gran)n(ted)g(to)g(mak)n(e)g(and)f
-(distribute)f(copies)i(of)g(this)e(card)i(pro)n(vi-)2196
-3958 y(ded)c(the)h(cop)n(yrigh)n(t)g(notice)g(and)f(this)g(p)r
-(ermission)g(notice)g(are)i(preserv)n(ed)f(on)g(all)2196
-4022 y(copies.)2196 4114 y(F)-5 b(or)27 b(copies)f(of)h(the)f(GNU)f
-(Emacs)i(man)n(ual,)f(write)g(to)g(the)g(F)-5 b(ree)27
-b(Soft)n(w)n(are)h(F)-5 b(o-)2196 4178 y(undation,)20
-b(Inc.,)h(51)i(F)-5 b(ranklin)20 b(Street,)i(Fifth)f(Flo)r(or,)g
-(Boston,)i(MA)e(02110-1301)2196 4241 y(USA)2040 6050
-y Fh(4)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/pt-br-refcard.ps b/etc/pt-br-refcard.ps
deleted file mode 100644
index d7ce686f12d..00000000000
--- a/etc/pt-br-refcard.ps
+++ /dev/null
@@ -1,2576 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: pt-br-refcard.dvi
-%%Pages: 2
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMBX10 CMR8 CMTT8 CMBX8 CMR6 CMSY6 CMTI8 CMMI8
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t landscape pt-br-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.01.20:1524
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124C2B6534F3CD1866AF92009D93B97F763AA3D16684AA65F029E776DA
-3BFB75EDD46D562E6A284DB4F2FDBF7CDE7C1F3772CD7B6FD372842A0E07E3EF
-68A98AB9278ADC2D35891543F57ED6DCFE8923368D556F1A8B3E35863112F409
-FBE67FC270328312BAA43A9A372C510717B50AAB01A1E02A9982113E2D7C601C
-B0BDA1C0E081E546A97647B74EE5194C57ACD62502B329FED4D966BDEB4028F0
-F082EDD5DFC8387653D620E9E73FDCE3C155347D5929C3A24D6121AEA46BBF3A
-B1C8A4793FB7F21C84400912C27D9AB0845537103553BF8F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
-BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
-09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
-3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
-E8929A4813956AAB24BE7C20FCF9196E8E2F30816FE2279CE3E6067667A39E44
-488D58BFD17606AE885FA06F478D359A6ECF5564C095FE0E5038425D8B152750
-F72F41B3D1E7420EE91CF4A9ED5BBE8C2275624AE257D2BDF5752E803B426F40
-924CB5C29460BC09EC84F3F3A95F6900836F0ECCF6A7BB85A3F8D650017E5FE0
-503A73644EC6C6B0254F0259F8DD4AB3945950974CEB34521881A2506E76EBB3
-7DBA7812E0186DE2C0AD3E6D42BCA320014368DD738408C54AE2CAAA9C05612B
-E7F33218F2FECCE8DB2E4B3A3BCD9D8D0BAD7EDDCCAE45F6A15FD2B8ED263E45
-14AF0CC7B58EF52D5FE73023EE9DAB8249D1EB3B795C7B42BFD2A2852D2D16BF
-CD71056F412571F41CF7EE80AA916EA4FF1630B1E226F474CC3195006043B1AB
-915DA8A9484B930F1F00028287EA3802DA3C3F99961952E04B736CDEC7768307
-879B4D2D553518FBBA727266F94C3A607FFD5D85CD0FB802CA51E6A3792C80F9
-A637D47C13A787F5D9C5BAC24E843DA198B7CC898AD786DEAC0BA9B6EF955ECC
-72DA3A8CCCF7F3B69597A2F868AE359737A9714AE6D81989B4152DA33095DAB8
-5759080AA156DF1F3767120018CE81D296D813DC52786586CF3F38EE3CE181D3
-9D79439EE13D4E5799E03338E93315C3F6BA8ADC731A0D8282637E524C1E9736
-29C594C6F19B49C859D7CCA98148215F7E6943637797641D44DC9FB8FA403FCA
-BD581E477C7BBDBC84048141760B4EE0D181D585C519D02DEB7D1C650BB49874
-A75E95E6A17D8024346AF3288A32A7EDFFAE15BACD436CC76850F2EAC7EFF565
-C4273160FC5DC7434DB94BFA01D1648421FCFEF66D786CFF60F0031B649B6F14
-E9139B27185E6E9A70E439AA8D68C6535A42634FFDA55DE86BDEDDF3D6B73015
-37C7437A96CDAC620A29942E834F714D82774AED0A83771A152EAC0CC043CB09
-02574AFC4CA006FC0D24C3DAAF4D681CC1D2D7870F273773171A4977AD05A082
-0DF3F50C8A36D7D8AA96E82387AAFB48D048CFAE2CBAA88F1865B84CFBBC1731
-A212A44EB98265A8D4A8C118E038A0C3503B27D8B58846C4F3E8112C8B05A41A
-9F8B0E1513528F5D7E509EE847F7224AA06819954974F8065AF49F21840E972D
-C1B028B541BA1364045E814A9F8FB299B6B62CA150245D92588056992FE6D71B
-FB16F2B42A3DE425B302051FCC4A2AA76F6146BAA385614913D2B11191CA6A09
-BAE8567DCAC342D013C7830A0F03D848397110F021C63C9D6AFA90ABBC2DE4C9
-69EDFEE42C028640F9784E8CA11B83B4E7AB58F8335FA294DD68BA87FFFCC743
-67239D7FF1C54B725D53581832F5307FF1995D8273EBA54372AC82B7D5EC5773
-8F52B55255502008E0EDA0646D4D71137D822A57C0E9E05F3D61B91436B5FFE5
-CD90CABEA89420F4ADD844733B9B0F0C72688B9184A2EF69966411DF2B23A25A
-11F009C6F23E452854B77AA33129C531C2C7A8666D550A83CBA6F251CB016F0C
-940EC74FF62C721F3D854404F431DB39548F0785C5140A9D406C06306CBB0C99
-B7AA0E4680D8DE074B369A7481F0C12BCEDB787A1A9E4C71C869F5022447E317
-E6B851B8D89144BEE028D2352745CB0C081A7E806482F74E7EDDB5F1601A58D9
-EC5B92F7DAD1B462B0EB9DF22604BB2D617AC6056E723110CEBACFB0F6ADFC92
-F64C98F9910F91A8C4B39EF508A1AA01656C41247E1E8280A97089C515A1792B
-509D2DBD3C5B6972F6829B60135247B75DFA7C067675B7010FB2F116B5009B12
-1F139A8A3E25FF52BE00D9C4AE67496958CA3D1D4568218542B77C865056E45A
-0A07947C4E7D16D24E07A77ED01F10226CBBC21E0DF75293CED54214149619A2
-4A591F3F99EB14032AE840BEC7313CF1F24250BD8D6BDDBE85883D35D6907C77
-FCF01A7E8DAA9BF8E47DA3225623B645891455874BA99ABF9AC9CFABC083127E
-CA636C8673A1ECF967BABDABF1A569319A4E382E7C593CB954522CC9DF04BEA6
-57297331734B3959805B89F96DD23C38DC8CE17C7373EE5F7A9035557E40C310
-7D1DA91F87F0CF45E54518B549DDC5F91851E2899E9756A069CBAE8E63A42974
-299781A390072C7E59B9433F9D47111900DEF4E4F10913BAEE90794333454574
-37B7A46664522983EADBAF6155C6A8624CC7FF1A850313072EF5B066059CC840
-C4A1DA2BAC6DD27D3D3BC9653003D5B25405492BB64FE4A1C294F06492093093
-A4B0175F6DBFE6C4C28C310F71010F97035774250EE0468E54A7CCF54465C7FE
-7A70ADA08BB5B6A4AEBB3F60FA39FB810E6D7B1FBF169DEF45FD7E7EEC4B273E
-A11269ED5BC9F8250F8D29BCBB656105FF2D71FB624F7A67C899828D3A563491
-9CCE8EF268F2A8986577C3A752F91B650DC9717A89F76DBAC254DF1BC705308B
-2E4C7C55A152ED1AE945337B93E411B46DF56DD8F0942DD8403ED15FA515079C
-A1035F3C7A2648761792E241C6710503F7A6093FAD8BCA34C0378700928762E7
-FC371BDA7488C95F69518E1DB63068E740942234A79478DF18C5752490DF199F
-95C654423257DE301117F3C379DA5C90392A7BA173BA19BF2C35C9A0EE180098
-C228CED65FD5241B5DA3D318891994D363AE49E3B0FFDE091C82DB4BE7B240EB
-159050F74BD181337EE202011BC96EB74C68E8BBB26E46020355378E6EC2B9D8
-89DB7907378B83FDC294B134E69D5AC1B2CBC821420EE28CEE8681EA3EC902F8
-3E8503A833B675E21679D6C5B7041701FC553B95D2DB82987EB4A010C8DCD9A9
-C0FB4C048617716CEA638CE3A16C90E55DBF76408A71B3B7FB784820EC3971EF
-726DBE12A1098F350D9FF84E1846CD57B6DDAEF32C6B839644F57EE6B256090E
-C711154CB95AB2910587E15E3F16D402943157E9CBA2174BE93B820951499A42
-F797664141F9F2698166395DF7116293B6557266C7DA28E2FC1F8BDA4B00C07B
-6F7FE6AD4937A694EA423A2B90F9EBD30B8D3710E7E6D7BE15BA631E6991EE2B
-1A28A02C4CC51889C37702E57F13F1E54295D77148C7EBB6B006DD232EF94D83
-20FFCB794B221BDEB84DCD737D301A44B8414B4591BD1D184C85B09BC5E28A0D
-7DB0830419C1D92775DBFAD72F2D7E581EB08E516B0DE87BFF2DC167EBACE23B
-73A3E770832A7A22B28AD12CA07DD15D22FF5EE53C48C55CEE77BD2D429571F8
-9DC52FC92A2D4F7BEDC0F27C39E7BFBBE38721E56234E9AF5FF1EFC753C8E281
-4EAF702CA8F08D3407FEF7E177FDE6177F6604B47872CD9EC22A6644C5A78CDA
-FE3C51033C45BC1BE224F09EAF923B058E13ACDC61A0E7CB5C999DB0C8543BFC
-4D65815338F65AA12BDDFC1EF5A249270D84BF1377FA064F62F41787F3D875D3
-0E4EBD38E30D593389ED01180CA5AD540A89B31933BCEC4DEEA2CFA94C03FD0D
-290573BB3162C80FA9783A66AF33F11CD9437A7EE16812BBC32D80DC10057A97
-C83152905B954CBE464EF39D40056FF3047D9D57B9088A7FAD48E997B5096D20
-E21F9FF5858FC241EC16527F66DE8B403281A8FCA32AF1408D05387C3BFF79CF
-25C5E6EE231B17287ACC5643C94E54A6962CE33246F7D03060042B623CB80C2C
-2E2AC47CB431B64828D8D35426810074E1B98188A866406D24B8020D2082961A
-A4AA27528B60C098CC0F8D34FF1DC6C5A4836C028B2295A4D8281278264283A9
-ABE23AC0A2EC42562FFD6F5FAFA72C8A029F333C26D8CC5B972073019BFB320A
-966156DEF26E9AE303FB4E20EEC86A48468755EB228C5BDAB00714F96797F5D7
-E099755C8F80F0E3331B038527D5743345DDB65784D8234292AEB642C74D95AB
-8927727F73AF12F8B189BDA6BE8BE6A08333ED0E2F6F95CE8367174E0280565A
-97E1F70518E142D658D2335C2FF8C7C401322D6405D0964966EAC8341F34BB5D
-1C654BD9D3489E6F730BB646EDE9F8607F401C5DD1B310D7D422703F305ADDE4
-BC45DD88E798C4F4286B117962E210BB9EFDC968BEE0A9C3EB6B35D1C2E8E50F
-9B9A8D965B63255791A17BF7E7596DDB15B617B98A8E838DE92775EE9338421C
-9A4C9BF5B8E78E475E814EB117719239075BA70DC806DCEF05ACC948AEB8378F
-DBAFC9D998270678435EE7F8E262C2341B173AEE3F9A2EBC2C74CB158BE302D7
-A4FE57E744271A24F3714DF24DDC103687754CFC72ADDED342B5FD5CF9D13D98
-1A13712D09148EF593050E8099035C6B9AE8CFD59948E786E3EC4E1F426FA3A7
-9082E10E79CE44C2D9FA830113503944F8D23CDB9C27A3570907FEAEF76D3ED7
-C8E1F81DA7A51CF5B723F0E4C42E3ECAC298B3E1ACB9679A1250633C373805E5
-C9496CF87FA7A858656D4A663D3EE3218D9792CF705C361994B69461026D8CCC
-130FB9D34293701A137E393F5AE79DE677D13DF5AE9EDDC545496A8C5456A860
-B36397BCC78EF754B6965D22004B978B4A55409F73C44B9FF02801D524740B9C
-E4F45750CD7E45235F376CC2CDCD3BC1B8C7658F52A5EB185EFDB6A0884FF0AF
-1958FAA5FDF4595D6EDFE28FB5249A40BDE8BA11AB0E997E9876CA0A0CD05A5B
-A26F60316F61DBF6E65F43089BDA2D57F00EC72BA3666952E730B14C79FFADB5
-7448ACE6463BD29995D6F6F571BF3D0B426897E457BD30FE76D6CDD6151A94D3
-3D53801608A7E865A01A2FF3D915CAC2614DFDA0A931E009FD1CB63FCEFD0A3D
-B26711BE84286E389805941573E02841C8E653FD3131316E768E2D096E5BA648
-9F03F9825333B2DAC376A79850AC29CEABC8BB1E7D4E34F37D6E9F388124A9E1
-9981131FE0F6718FFC580E678C9D8C1AED790D0C0D78407050D5FF315E605C73
-A16D6868E5DE5E8C1F63A88E159CC44DC0BB3E5CEC35CCBB7493975DC55F52BB
-A33709E5AE3066894885728EE784142B492056EF876521DA69BE39FF4E2BB95E
-C60688678B37692CD40A8BCD585240B0AA809328CEC0F954F0D50DA10DF61A21
-EADE286E22F67227CA286D9A0512EC909DC28518994C6D6E207D4D00514B0EF9
-5DCDA5965D827642072E6DB4B23D1F6C3250081B4D8E66084AEFD663C5F26E7C
-E19A4F3C9A100FC4AADA76F9E4AD474D033819801F7444B51203366CC709AD98
-F62722F700E13DB42D80041014AFCA8D12B23B85BB2302AB944C437FE0FAADF3
-E86291BA50463C32C29FC7D8E4B5EFED49EC40947016D0846AC79E3776E62388
-372568D2AD0DAADAFECEFBC4F7E6A8B47C214A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB600BF00E09
-8A98D1D031C430FAFDED5CFE3944C4818C6A0C98FF909FC1FA6F3E7E282BFA41
-4681DB8E2D5D12A2B653E32B01A8A9C9955AE525F963EAF4B07A6D1D08E880AC
-3D77B15077B8882DAB21B262E2EC978310BC07DB953F8C65C9D5D01F35FB5A9C
-B8C57B07209A07E1C0C1B5F1324B128B60D43C223F73DC12DE901CA5AAA63BF1
-2D47B7B0B9D35F25A459484BC917AD0D87779E379F2E5E5677F463D9D4E33B38
-99DF4ED7F1C5B33E0C23064233288FF324E07452C5DD4C46365512B412E6CF46
-DCCCB4EF51A65A8E2AC9A5BC5384F739AB8D4995143C9BD3599696884AF450A9
-0B3A707395DAD474797780AD0A87C8317DDC98871259B09B0038E5CA31E6EB6E
-8FAFD3D294971700EE6CF2D4CABAA8AE2C0965FD3E864037DBE485129CA30BCA
-3DEA01CCF4AC088FC977A4668029EDAC0CFBC69C930546E7B7EA31296D7F8B31
-0DB809DE11C0150DC81247B6259C110EF06F9B3ABC4641940EDF4CE46494AC13
-72C2933FD2B3288BD37E4055F58B0E83FF9BC369A112E9FEA4CDA525E3B92B3E
-932E64E549388DEA2C0B1F29B356A0E216B37B8742916B0AA46AFE2147532AAC
-A54DB16333B9B4B66665314F8028D1DAAA6BF0AA511DDA067041E465100A7824
-D778792F109404C1A5EFE3481C9E20007664E5664A3FFF70BE402C3BC84628F1
-2703294F2514048F2B8CA0BD9EFF679B8EBBC8E49A6909FDB6D9439E5852F7AE
-296746725B1840172ECB51B72B1F2F982740F7EE67F40D96BE2B8C310F98A980
-1116EA8A4D57850E5F87DA60D054A24BBA2831838C211B008BBF8E3683B8D407
-9A3AADB4AD7D0312D560FF2DEDDA60D0A353D797BC831E4A76A234F9AAA123D8
-1BDD68A4EFDAE4338358A616D29309A416B4962EB01F6DECB59E84A5852ACDDE
-BEFF98EAC8D864A4B457A6864A7C7ADD3EFD7B2EDB984A3D14BA84390B06B83C
-550FDEC4A8A1F60B8F47BF810BD636BA945DDA0C1ABEB31C80CC71DEA1DF420B
-D41E4D04512EA018C53422F1722EFBC78123B383C9BBACA7F62C5477BB8579B4
-471922BB21A881AB30840F1A076A3B14E7EFB5A0D04610F1D248B8D6977C7C24
-5C1307D468792CC180A2DDC3AEAAEBD1682951167D9B010A3F31F74A54114C90
-6B7E87AD0D74F6E64C225E4F6C93277084CA01C09DD7B7FA91F5D7FDF9C78C34
-9F40F5CA84E8341093AFF161914663BAD849119F4D56B5C880FBC709A99F89CC
-460183DFA77E9A8817F0488874D68F1E64F690865A6ED2FA92D4B0E08C51F5E7
-95767B6B3C433DF63FC5F8E77057C2B8194BF161C3F8104FD0FA8C4033914C21
-895DAB5D43BE63E461672613B9333FA125D04205FB9EF2708D83DF0D49483E24
-143531AE2C99F7F96F95AAE8E292E1879EBCC408CC102A32CEC3FCE958691227
-5446870CEDF38ECA235F19B62F7D83116DAE464E77EA2EF5F321EEA6E9C9B685
-27845D4BC456DC77767EE49F915496C84A7BDACF424378B835FE2CECAD2E3CEF
-366E0BEFDA94E1B4FD1D838CA676E002427508687E3535B681CD072B03356F5D
-C804A3D54746C4C7501E61176E7FCC900DD83AF1A73BBE3C3D26B3EACA9E6B30
-52430FA70C2266B17C1302659F6FD5857422D1AE32F15FC9F746B770AD6F45E1
-CCD6A402BA290917E96AE92061E801EE9876FFFF800C957D57D75EDC1199DB8D
-FAE3A98603A0964F0F05F2DECF98E798360C70AA89438452AA8CFC95C5BE6E82
-D12FF9536DB97DE9A2452013B2D95D81875820B57FB0DFDF9A4A778A914F2034
-F6A8373B81351C44D69CFDF430997BE3576D86CEE83156772E71A7A70EB0AEEE
-7621DFF6E101B32F7A2ECB0B9F02ECB4F54DCB54AAFE7978C759B116F84125D5
-401851A9360D1FDF438407FEE5843EA5E4062139D474A76121006923240EAF67
-CB93828CEC646D632F9F0EA8C20DDDAB3080BF7D774F9BBD6FDCCF38B3F560E8
-84D93B442FEA4E7EB429B7B9C14B276FCB8F39B6431A141E96A24106335B966E
-F3161D90EB9CA3DB6B3F7107D25590F7F4454D2B510A2C0B9764F80EFA8F060A
-9B078CFF276A88013D97FA5E908DE854A00FB655585B9AB0D22E9E2E86DFF0D1
-AAD10D3C1B0A34E9ED40E7B18F3AA2CB0EBE66F14A18615A0BB818A05B1B70F6
-D0DFEA076D71F8BE0978DBBFD62EC9ACABFF8703485899B12D3A68BE64B2A40D
-0D3650B42E55DCD5ED90A9CD2FE2EA64398FFE6BEC54E9BAD493D034B743A214
-5A5FD3B2AFE6FD112D73F393DD613359E7558840B0B9007483264A21F39A30E1
-239A08D90F3C11F48DEEDF8A549BAC0AB84C0CE01A39AFB47732DFBB03FB925B
-B72ADA2697186843116B540DAFC381F0BDF51FB554A7905F1FEC57CFFD19D141
-EF384F0D16F6ECFE47CD2515B9402BA6CA55D473250E3EB2DAC143823EAC583A
-BF749C1C1247CFFF1C0D41868B2CF0F6F0594D0DF2CD984757CFC86413A1FC6F
-3DB37B2CF2A2E04EBE7D05B2278EB9FABBF671ED8D8A5B1D1228C2F698240026
-8666021F7A977F2BB41CC6B1F0D3B7A46521C717285E5E61E936EC61196F820C
-C4C746560DC0F031B6797E67BAC1A518DA30EE8AB870F3A3531C781B4355DE1C
-66E31FD022BC5E8100A319F218D824FE4B0472AA8822C3F7E5F1CA5BFC2CDD93
-E1BB1B0A192842C39DB1B8703B81D1B8D8EEECD9832D321F903D7C06E724090F
-B7F4FA37064F1ED601E970091C9E99B5EA7BC06FE4E69E34052F065FB0331B07
-E3F6B76CEB7B7058EC5985AC310F9F502D982C43B144FB0A19A0EEB0E8D2D59C
-FC88340EEA8CF2EC23822956934954194DA3850C70B135FE2626D0B75C4CCB35
-132378CC7BEC8DD4F86A9B0B1D6C3A89BCA2C750DB5FDFED7BFA2C0A447C614D
-812FDD4000CC37A0CE6994E0C35871C426F872395C71B4566553D083CC436108
-7F50426FE26A03EB7877250BDCF09861DA35E0E92C34A6714244CC183FFE6F82
-C665A6408136EF31A0A50AB9C38AB284FCE23F867D12FF239654D18DB9100A85
-1FAAD02EC6F5B4AB691916A846CE953CAF5B32774D37E208DF38BC9EF3A5F680
-A62CDF924DDA39563128E7FE539FA6C2CE09F5C9F154BD523D3B1211EE7C5437
-128C316A8F171E3B75E27B204531BE59BD50374BF918DFBED45D73FB0E242B6E
-EFA52C5B0DB85952E4E6C86B301A5174920BD322C49DBB29EA44646676A4C4DE
-EBC9B61A279A3CEEDA2553D4B2136294074141687DB75364DD78E6815E9AE2EC
-366FF3E042726B039A9C5C193B53C808CBB0A498B7C80404754B67F7CF49145A
-D1B7E337076982EE64E6F76D31BF17C396A115A69E0610F25BB9E5DEAF5FECE0
-8319CFEC44B8549229993901FC72AA17351A442568754A3B5B4DF7B8061D73C6
-0B29DCEAC0DF72A6236D4BB6ECCF4EABC47713B2A609DC07D96740A769473869
-FD1AC9B5BC0137EB2A3327B51378159AFDB5BBF257F4E60F127828E8CFE74E01
-D968038F659EEBA34361CE6CE0987A80C7ADBC06D71C6E3D815989AD77551771
-66F1A1AAF42A3F7649DC718AB600BFC70E4CF0247AA2A4BFBD84771199AF150B
-78100CA83704D34EF7D65F51235DAD8A5882EEA58729CEF60CAD3683B572D0A7
-89A6DAF840DCB6C7AA4A4B23222D08087B975BB64809926B588A0300F0DE79BB
-320494CED7BDE6636F3D9D826D7353C2C923BFE00949B710611D9E3DE47C3876
-711F0135334980FBE4801C3BFF158F1FB5E2E5E388D8EC7689E92D8869A7C166
-1C4262C63687BC092675C23B6755BF2B107647A4EDCDBAE8E511A64ACEB9CDAD
-F15ACE64F8E8E4A9B2064C0FD8E446CAF1592C8F109376B98D4A5B31B15B2892
-7C0FBA025E497B454B25DA16D9C31F8C0BD17368499D3B1D92A06E5E4C8C6A87
-06E7E68C95975157BAE3712904797B50802CE069B74208F549710D978CE4A253
-C186EC2D6415479D0FEAA1DC076885B2A509B0E6411E6B5C8E0EAD7578997B9E
-C5DFA526E73CFA5D3839664B3470B1973FE1790EFE2A534A277AFE1B140E5669
-407396D0BEDEAD0A9B7B7AD54CAED5C8A70EEF86FB0045EEB34907E32204EC9B
-278C809150B70F1F086F756AFFECE6F05946C36C265EC6EE79F9A8659FF0549E
-33E4E750B3292799B3448560930996F9FCAF0B5083EE6F23B238A41EEB065506
-B63F6B94F6DE9EDD11947AFB257961EE4297C832AF97D38AEF181FED09CE97D7
-FDCC50CA3BA7332EE65E16B91F62CD678C28CD26B87DA984AE10BE0276366AC7
-7BE023637C1122C8ED16412B00637D59ECB9ED3DE6A6A816E54630DAD0E5E306
-1FC9A8070EA0EE84F2E59A7E4D814C8F766ECD9EA08A23E266F1BA97362D724A
-CB2AF5932D160D281A03342E28D57B55042D68827C831B8BAEB3A42E3A38531E
-36FC41EA30DAB3F1EC598A3E011099E5586F65C806A85629AF34351B3A24A8C2
-76E43F08449043C788C5CBA1B0EA703C100377540870DC8CB1898D6783B29D66
-23BE3D60C08251392D5060FEA9BE4A40EF55FCDF1CA4BEB397041CE284527907
-E6969695E657A1A75665CB7EA8CEAB74972919F286EF710A7D123E81F60F625B
-8BE0EECE4F52E73D0186ACD058D96721819B43AD03C98123A5892B4198E3304E
-1925512299560CCBA0AEF6F9FA2EEDD0ABB0D0649AEF7DA23DFF6EEFA2BF847D
-99A217F8665916CCE5518D0849D611C7221BDBDDC4FC0E7381A49DA520815274
-3934A0FB9435C721CAB181701E292D3368DFFC86613F755D4801E97D7B872E0A
-0F6E57A80363EF1DF156CD873C303A898A5D75D742E755D019DA3091B788A036
-0CAE670793C4CAC7A15C2DEE25E49D7697F17D2F4715C2DF7964F2F88C13D83D
-C06E6ABCBF412C543BE52A4166FCC090F12E66727FF1B01C8FDC772E52DDED00
-40EE0A60818F186487150B1E5EA3B73196834A2D201E6847E3EE97BDB9CE9B6B
-ECD33FB11216C18EC4E2CB7C4B8E841EDC37057FAB5AAF23A088C7DB0CA3DB9A
-67799B2629CE0E70610F254A87A925D3D107450F209F26481B5F416D41E26C55
-934226FAF151ED9FD52E19841CC57B3C45A5F9F15B6FA9C0CF8827EC69D372E9
-839B245139330A92B0F8F2E759D0F5E2AEE7A08F0744DAE19CA53080B062D3A7
-E1A07511FF4803F76AB6E51A80185E8734392059F3B1B9ABEAEFCCA68FBE923E
-3CFFF31A62C16BB5596DBEED2FA5F9AED96A0A42A8EC600847A1D80E24F63BCA
-D6E711FF7F0A96C1F87A8D70611B311F87A04535E4822A7FF4531A9B1FAAD13C
-4E80F5AF473AB4183C65CD87F6D9FF0E5FF6279E3E174314F3413EB629DFC3D4
-DA5B751031BB211DFE829F583DFCFAB20C9D972BD57B2C3B604141AAD99A922C
-38CD696CD05FCEB4035334B02A1FDEBAEBCE1672ED6BB7F83B5FECE3001B9F7D
-70B45AE7E282D9F9FBFA62187E7E0675969C232B581CBF4C6BBF10C5CE84C3D9
-1ADEC8110EA8566DDDCD81E0C00FC5D59BBAFFEE83C274277CB42BFF09D2AA05
-FA0D8BE8DB1EBF587D31A5A8E9C570302965B2F148833CC8C64FAED2FE6DD962
-4FDF21B46A8A9C9C54B873D6DD285C1FC20BCAA83AC67D7CEB023F29F00B1438
-3BCCF291746D6A04E176368398862D4394BDB6BAB8A24BFF5DE8848D5E250E10
-98CBEFC7D88AA7FE731F6B398BA1BCE100C3C3F602C11CC039FE279B7E46DE37
-0C8328B49107C6FBAA10E509A76C9A7D34A8B96418A36EC0B3F56348A1CB5763
-2314FBB223B0CB9C054730EB2D8F9BE48CB980024B624A3FD4794B22F18ADC84
-20DA169DFCE96CAC361942A22FCD95E260F46D1279F293F2709302539214D2DF
-70D1DF28377F0A99840226330506FB5EE3A0BD9BB02A99D840A3EA58C69B93E0
-50E7B164165A7EDDFD0E7A4083891E3F5A12653FA9AB3BF1C330678358A50910
-C65FE974EF46C8AC66CF7E16D27CC6CD372FDF2E7451BF5753B029E8A456FA07
-3207EF3EB547B319EEF01DEBC64DBC8A33FF83DB4ACBA00502EAD9B3D7CB8501
-5942A7617ACAFA1594657513F71FABD0BE842A5DC60D629D0C752D7632F7F047
-0E7C87CBF771837B5947273AE5DBD500A41B884E576488836F6A8612F93E71C5
-4D64831C34B6FAF3DECE28BF4B20E7A870AD5D0F15670E7886F43360C0BDF2E8
-5A55496CD838E57BD4A0C27610AB2F5F0A7D76C1AA97641260FA03B461A3D223
-3DE435A15CFD585F5BC82BDEABF1977D7AAF973C6207C632C2DC5EA4D6617101
-43F45CA50D60132309E8795D2B0B6927A0C06324307C6599521A9FFA4CB5113D
-7C23F8830BC9EBDBF923AC5B12BB34DE6E1C7C0129D2CF2EAA09B68DFF712912
-A46E032A2A575B214293E06ACB5DDCEEE77C39F3A9071D9CE655038DB4EC2A2C
-480AAC659FD3D18BD497A8F6C5446E2A6496AE279803F329CBB3F6923C53F965
-7B6801DE0D3B1E00A8F5BD2FF70782D962F31AE5C6D6DD32F9307A97CF121830
-157802BA4A56043F833402A7A383B94D79C80ED4FBB6CF188BB91E421165DE85
-245E64BAAB30690EB6C3A8E51F6C074BA0509AE82F59E74C7417D06C65202030
-D602637542CA33CFA6522119EC9E2F25814BB5A196E47146ECCFBC844D17A5AC
-18C1F640E28750D3B6856A38B14FBF3B3C70D4BA559B2DFFA01D112CD89F7F40
-A201D0DEADDA581EF4AC73A051C005BED84C7AE69C3AE65163E8FE89F50594C2
-67747A3724E89CC50075956D3F2BFFA490FB6C02CE988AD18F52C815F2BFC18A
-D1A86E95576C1076F955183310B6271FC489052140553A08F9E322C0003964FA
-5751F67640750AE533F7D90061AB9E487C4200A30AC0CB9D1D6B882631125FCB
-FA1B24573E504A042B2722CBB83D5701294600EBEE5AD470D1983D44124FCEA5
-51BEA2690F79C58BB913A8F6036B7FC87C5314B6960F52F2579337DDADEE0249
-B2207B7AE69D4AAD19E5CF36BA318FFA19324978B4DE4ECA1E66366B070175C9
-60529A88B19F69587F9F479EA8279312DE2F6302FA872DE1A623654D2C46938E
-4F92B56E3C1513F80425060B66928CEB8672DE30C722631FB26EDCD7883F914C
-4F07167152A21B6D4F7AA789841648EC8A6859EF4696F8E2A615ABBE54161E8D
-C79111FCF9F9C956C1DFA1B3462C3C4570C91D3720812182CA75C72CD4B1979F
-D6376F48212F466945C83A94F148F300A4FF573334D01AF0E6E37E4D8F918A02
-9CD4246AB83D1946D230FF9BE714BA3D5BEDD2D331C7FA68CFE88FC0AF6F89B5
-E515227F55EC66293FBB3FCDD1976B0DE8ED0766F8F60E44B7831E25672BF65D
-6DBD52D97FBE605A2CBC2E4B72C443D2F60658E81E2183BD70D4E66277560B0C
-DC0CAC9F41726329AE7208C956D246B45CD31AA4152D23468902E5903170F10D
-BB169BE014910AA9102F382BC033A26B4DE9DAC0D7ED7F848C9C9176805D4B5E
-8D47176190D1F7AA6F8B1B2F77A5358C3B44C21C3A4F48359DCBDE38F636929B
-F0D6140AD48F557516C88E2186B12D011573A188A71771F37E9FEFEB9781137A
-1F44F2C90F4204C3B018E015CE87976E38F65505E54DE894A2E9B292BF742ABD
-35521DBA016B6A3C1BE594C020B1254459D3334F92BCF2645A454A3AA0F9A40A
-682C816937D4CD2C392D396E6E14DC64CB72143F9C3925CED4A721ECA16F39C3
-06A04605C768344C64FA9C9B75EB4FDD28139BF786619544F0A077BC564FB554
-A59DAE6BC2058064C0106C4878418D6A124654B23D9354706AF7449C996199F8
-1D3DAA2A712A18CC214BECE73751E996933968EA5766801653EBC042D1B38AE2
-996900B303A56EC81141741E26F4310265D8E785B1BFACF7B6210F2AADCE5C84
-56474ED40D92666DEDC745E4521DBC1A26F26AD1319DE992822838EA3FAC3C02
-E4F185497747635D932FFBB6EEC172AA9B975042F665BD097556EA18AD19FF77
-CCF11C505E618A19BD21159748FCC9005C9F6BEFD4B3840307B11477F21B4C80
-C6CFA2E822731A4372613498B69886FA4F43E2423C73928395C85CA14C3D5EE0
-41A6FED4A65533409372897FFC229C88847204EA16770DC57FFDCB88FA7C69EF
-EBE08C4EB56DC0D1561023AE4F4057C138FFFACD7E0B7E4C3059B168492FCEAF
-39218326F9C53CB151479639A0AB8CD5B7EAC4F53C9D54C2B91C2D6B42124C40
-C6F69ACD9B93A1AD62F37D68A35E59EF96A332ABE5CD1B52F8BE81C98EBB5C6D
-611D98B24386832ACFDB35AFBC089181D91814CE1098799B6453E7DCD921BAE9
-92760955D4729353B1B9316BFFFF1F9395BB293244D1F2B05D5934830084A81F
-C723CBC710F0CAFB8E79D6376D874DB0DE06022FD1E9916FD034382C24D35B57
-A93B81C632F39ED08B37CBD0026D727AE8068912566BB5474F58EAA977B02B87
-3162B42EED393667CB88AB5AD10EDE4A40D5AF10955DD0CB0C99FAE88AD6FDE6
-56F222885FB42190FF4882D51DBEDFED76DAB1F9404C4723B6D7727238E1C18F
-9E607AF6948E851569349ABCC415FDE3DC33F3BFCB410FC8B9773349491AC74F
-247BA3B60D1E6183F8A666AF584453037EAD347C6C6AC7D8B0124F398AC6A323
-FCCC15CE4345B56BC2CFBBD17AC5353D60191D0E3C9A9CF78DCCD46DF5F94C08
-A012B7618901095688C82869D11824493806CCD4FD7F90A3347586E6681D260C
-168869AF2A9D1F16637484D4C81382EE66B08BFFDFC57EC9FF815B1B8F60566B
-A405CB9BF6EDA6C9030FBE770F82DDBE998CC1A21BFF7BE67CFD55FD0EF86249
-EEE248A9CD8DE1CFB4CB8B100D29E8A2E50324F7D716A6AC7745BC307E74261D
-9AC05E3A9BB4E1EA6D434C82DCC2675CCE0AB1AFABCE03F8A938321257A15ED9
-71FFCE05DC19AB211D1907BB9DC032004EC6AD80AE7342DA9EAD9B6EA8AF4DD6
-E022B3DA7D187B42BE8D6F0682FD89F4283AC87D1CF68B6193A500539C7E0280
-DAFDD1A43E0560D2FC444BB9A949FA408F7F7E130E5D1656F2355FA7264B57B8
-40A70366CB14DEF5908C1A69B8365DC0CBBADFB4B82B2FE6EB68DDC9B1FE71C6
-2D61F5A48DBDF1BC8A9FE9D81CAE0F95A2FA190FC194A94623826D4A76D24132
-3A3A453D71E03414205A14ADD34DE6654972FCEC6E77BC7F988DF7212D642FC2
-86D98BA69B2CA28426880D25B97B845D3B0BE5015029F37BE17AA11D4A457118
-08F97B141DEBBA2F4EFE542CDC3AFA825338ABF0CB919718DE8C3ED384AC8078
-10BB680A52115C92AC3A6C75CF5D9BE57277BE62A0C638D058B6FB4F22B669DC
-9BC239891E3006D13D2B74A8878B8D932F12E4CCA70E5DBA1CAB0EF0D7EBA6F9
-8C89FE5A4DE66FD55579EA6E0D0B302AD7FAC851FF41E1B50BF2771D45BD4287
-A3712CE3E26C1634C30DC6E0C2B2B9BEFED266A65DA87505B05725D9E882496A
-3A2D9BCA03344153528C694F151250CF45ED116291453BD9C364372F19E3E047
-3B2E1268377C5F3D60376892D49EC914156AC19102AE4B83FA1BCA49B20596EE
-73A6B8832F30BC5440C076A5C79E61204D8DB5C99D885955723016C7E93218D3
-3F1DE9F004F301E134966BC7B30D87DCCE1EA53863D0C4231E6FEBA239CBE110
-D00DF9F318F77B6A55BABECB54FBA883110D88F2EAA5837954B88278801F1FF9
-DF37E6642449A7296A34CE8D14B32970C37A013A83D60F9D5F3CCE70E80E3AB1
-24DB2F9982D9A1281B7792BDF5EAC3473422DBBE5492784BF5B0DEFBC6FE05BA
-283506E84F5DB90E5D31A94CB84FC593B9A12B2F48DCBE4F0567CC6ADDDBB8B4
-359C3EF63045D4A4B607DA8CEA2EF305D9AFA2EA059C061E8D877E10F2517910
-2EF8EE46DD88AAB0CD1366B226D48FAB68294269E30D032A859B1BBEDB38D679
-4C545E8D4F32E78764B36AE45E2DB298ADE78DD1661D73BBC892EEB03D3417A3
-39F4DB9D20F260885EE5D6900CCD091152DD0DDAB60EC66CEAB06E4CF987F90C
-1D4E74BF853A04C2B74601E743F52F0F29D2D05FFA0B6BACC64468CF62C0A2
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 16 /dotlessi put
-dup 19 /acute put
-dup 24 /cedilla put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 126 /tilde put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E42779FA15EFDB451F
-53495CE8EFF239E4EC442E1439594549D45F5276F93D496C9AC712D762D0B702
-E894290BA028837304AFDDD8BAA6564E9DC307A14A7A206550FADDC7784DE3BF
-3390188BBCDDD929C82B1D7B529553BA75ACF5B385D31EE3902D96B2B5DDFFF1
-9F0F90FD791E54128C1717F313486896868A34FAFF22E23CEF046D02C1419BA3
-4389DED48DFDE7F78F8ABE3DA17968B0FEE61D27AB43F61978CC300F2924EA14
-BA6FC2FB5CD4E01313B34CEC99B77A3D837EE53D274DC3BB04EBB9EF0EEC5A69
-962A0F4F2A482166A52E809D5C4888EC688BD43E5A099D9FA7035129CA7C2722
-844491DE966335021F4012ABC14F978ED81748F0538178EA4C9D7A0B35351EDE
-6807474C509D11DAB19B297536ABBC95CE452FB95A95A704B50458BFA68E30D8
-BC5CF97BCD247877760E3D6214BC148EC97E11DAF733750448223DAC2431D482
-63AB82145EA5F9ABBDCC991DB40F5DD4D5F484954C2E595E477F986444F55AEE
-401B565D0FE39818DB83ED1702301ED4A36C26B64CBB6C061D6D0D15E5BBA146
-B302DD3E988B4A55409F36929DF832640D9E53100AA7ED1D1B256F255CCC0690
-C3CF605410317820B3E03ECB0B9EB0127613DD7816D649EF409EB9C1EDEA9D8B
-54F7AE88DD345B7E37076A9009EEF28BF01F3A1C854881D99A29D9034BAAFDD8
-C3F2FAD2A47CB69009B4352F69FDC78C225C69B3A637A26065954A38329AF9B5
-29A7F6932FD992D80292F2CD1597FA436D0DE7C91407D1CC2AFEB98F55478094
-2741CBAEB447D55DEFC2B7C49D020B6EB50616F4BF5063D30EE5838E4FC2E147
-715C3B6416075E9AEB71E42569A9ECEFF9A2AE2AA55C500BED59B9C1F6A1F66F
-38AE40AA742517E379E65283EE626156AF35FE4A26E1CBA0073A738709F54B4D
-B9BDAA4EE057E728D0B461687C9975DACDF3690605C2D98EE0B7BA127114E52C
-23C542E8D2EF39D2C9E4B793EA50A934110C51066DF92D7B38C3480777D07EAB
-49B84B4CEDEE7158CFE26EC882F1A5E4B28441561FD2D13647AB40792DD4A970
-25B7F1A23EF4EBDCDFF405B122646895FB3E8E628027E34A72E67020D5E62A87
-38C223A0F1BA730FB4FAC3112FEC9111997301529D41598F4A40249E083ACB42
-ADE41AC53ABBD8717429106AF10DE43B659A6BBA8A235107E1CB2FE299511AB7
-6CFDA174E57BB46991370ADD818E0BC0C54A8C66E4C97AF12E038FDA89110237
-F214F4D582705CE5B3315FA281E35AE58953F8D70457CADDD552CDD364C90FBD
-DA811ECABA00498EECC9094A28B5E198058D7E2D4D76EA6D75959FB832FB7034
-989D3059DF980833CB801F53DB5E1117FF0BFF172BA5821D83A2A3D669F39A29
-B85B33884FD0240588A9894FC06E395193E97179B9DEC65AB5F823757547945D
-863733D848BF0FA705C52606455D8A3541ECD15C42A0FFA699FF350DB28EE378
-3467202A90B7ABBDE00DB651874F6D60CC26909C7618D4C741ACE9180A572632
-BFCE0C6C9021E1ABCFAD7824095B19DF5B849A293E7F1795806DF7FC89A8A91B
-27E3908645DEE3E6468BE5356ED95832591900216DFF2BF9316A474B7BD36214
-8EEB23E9AD6FC316076B051DD9C90C7D632120F972FC285632F12367C5ED1560
-9B2918D03B72B9B551D2177E700EEEE3377B8CCC1AB270255D90A81C3183457E
-4358C0F074367D9A555149559B8A6038B2F3E740215847A92DB817B98DB070A4
-6B92C8C8A0746319DF9E9FCF25E73789ECA755D28959F89621F315608ECE9029
-BB685128C8D22BED5500D1886C7A677C985DDF465869866E2F725F6BDE7FCE2C
-C819498AE0DEA811D77FD1C7431BFA72BA2ACE9656A7B947B698B95EC35D9A1B
-E9E908B2E47F213C7780BA017D3F52E3A65ECD58002A40B9BB01A7A9D9B05484
-AC1831899684A68B28CC9DE6C37514A815145B7B13990DCC49D8C28642496457
-B23819CDF607DBFD58F09E920CB72E0C971D883DBB5C8CB563BC09F096F20EAC
-4F2E6391A8736AEDF56B60A4FBAAD9E2126C42FD8C71B5AAEC21B6206E7547E7
-0B0CECC2EFE5734F00EF5CFF7F35F4A49F2F5BB6E3B5260A9FF0C8FEBFDCD944
-F797069CE01E2CD7CAA31A8297142C8BEC67C912248931C6256BECE7D7EC08D8
-2F81BE0558DC9C80E7E9B4E60BFD3ABB8F33BD62CDD74C78272833D88A13116F
-1999901D3D02A3AB6DBAB0059C475931B9C2C7A99CE5CDDB388D95B2682DF46C
-AAB2DE828CC5A4D2F41B7689C83E30D4BD80B9909FEF97441664290119C8C36F
-E3C16D55AC2E121675137F4BEAB59765CC5C85C1B7EB918ACA2CB44EB0B06CE9
-BE34C937A8AE8122BB93773F6F411F7A759AD4811874D72F7E3F75EA52109914
-7D00EA70A4DBF354EEBCF2E8AE0CABEF155ACDC24E6797AC20B388675E8CB391
-FBA2122CB835176E241899C7F13F534DBF8DB886A6F83F126BF019DBF9FC5C8D
-E4C95FACEADD7E7B6A1755C1CEF78D7AA92286BF4837EDA2E794EE2E2277D58F
-E66DAE65897E32BF653F4AACBE2B17AB3AA7FE117E029436F8F6059069B74ACF
-1EC7B1302AFF42B38C72A96141B21FEEB4F4FFFAECEC4F2C2FC1068D831DA3D6
-7BE531812DE4307FFFE8A98B6C4AB5F9E5A1F6956AE39807CD6A18A12AF22992
-35D43F2A274D6D081E8D530C8BBA1CA5B5F8AA11E0E05036B272D9CD053C615A
-9DEA172685B70429A9A8308E9C16B95E6E06789B1E3DD22A7289F05D13BF0789
-F50D6608835CADDDA11676597736C41E7DA9A948C857439F0B6F39845FB1679D
-3C8C14F3C8C5131A469EAC144B44DD3F3DC1315FB627A80587F37A42B211064F
-9780A45ECEBB176CE484A8018D41896F6FDB4E4F4257A60E869F280DE1CAD45F
-BB478526395FC993C9CA6A566D3FAB84B678D7E0F591A8E7D009DA0952A44632
-DC4277D08D56B5E81103DF31BF466629EA658C190EFC1DFADC75D272E7DCE4A0
-C6309F2563AB76640643CCF0A905614A3EED3426DC172A4FE55B76640B415A10
-951883D8FCE87FFD8E1987E93475DA0435344EC33709FDEEA16D732B9BF323CB
-FFDC2F308FAB7D76D431713478E922BD9CA32CF958B8E6B82B8ED9B81CB06BCB
-3AF17A9CB807F8FB2A963450667F7CD93E292E13916FC07B976E7FBD978D10EB
-685D7160102AA8359E260454D8C094C2BD04648FDC58E14A075B6EBE0E861E3D
-6117DA938A1215B0790E7F46B7EEC0AB98C37FF9A54A7D3A6DD83759FE9716D6
-80F4AADC28AA151DC0E7916146343B2229FEBBE04E4650018BB3D3172C2E1455
-3080E67ADF626201FECF58201BC5FAEE3C01E8EBF8781A4F8595CF80B013ABA7
-A2842C6AAC9BB76FCD645F0B5A081B69B5A641886826EEB75C8ABAE54E7FA7D4
-39875A9ED06053C61A330ACBF818BE56FEC992BD5A30CEB78D8CA54FB1CABC63
-02E052501B309D157571BB3BF7E27493D6C2BB197064E1E26DC2FF85D5549B03
-5D53346C86588A0980DD26175314898BD7288FDFA33E44FC77AF2AF116D39543
-13B45BCFFDC83E8B9E2C9AAA46AC3ECCFB07E17B35DE3070818B648E2A69D438
-FCCD284A6955A8D50CCA3C46ED33F8C3A3D686311BBEECBA3CCA1206D01B955B
-A805244D4E5D4F02E346B408F838264C5A056413D25326FF1AADBD21C2130B87
-CB6F9C91420B9594309F002215ECA7A5BCE554CABBB1A43CBD3E76372A48D95A
-2F1237DAE67566A6BFF200E263345D4FBD5A1B7266BC04F85EAF6DEE32ED2D01
-D15F80DD5D8C1EF7E614BB629990C440C0B964B39104F82CD5D0CBB0BC376ACD
-0E2E75D06E65C92D163E7498EB7B0F9A7A6BD9C8483B0CC801C30A31A4DB8DFA
-2DDF2F1EF87634ACC600B066E017BDA91917569E9AD59F33D7564C875EF596AF
-A953F2226C410FB2CEAB7A508A666CA3D94F2C25A931ED9518DF783AEF44DE3C
-733875511D5E6E4E06E3C430D979208B60445757CAF3EEB3B63C29751E3C5C34
-D120E62F4868D87828D191221FA26BF60F4DC9741991EE948B413587CBF50520
-FF5F296B9483EB0E056F548E82E9DFECC2B90DCD5D5EA0958C62A48B1784716A
-859C863592EC99195BEECEB6AA64C2A870D34903722AA7B19B1C7F5126BB74FF
-763EC2285CCB52F13A2D1E95D8875DEECF34DDFD5CC3F18F27E925C9BF9690C6
-263CC22381F06042F0AC415A28EA5302DE6F35F1215B04C098AA18277F23EB63
-E08951EF3059C4A3C606E548DAC4CEF42D2A116C02EED4270D1334B3C7813820
-054DC6639A3C4B25A398D5354F57B7C556A5A95D20FA6FBF3406E3CFA512648F
-6680ED47767E80A0F0F1EA0603CB441476A81B8BB278584E747369C88E4A9A27
-202C3688C3C2162AECCCB65FEF5314F81E0953BA98E833F84134502BA2C4F0DB
-CBCD65A0EB3DEADFD9584FFFC9948571038249749CE13A9FF0969100DB588B09
-901964577D93D0856FF3A078C4DC79FE5B6C1B5A5B35FD22B214BC16E2D7A5FE
-9B34197D4A24A1DC48240C6CBEE2F4FF5A1353A1E8F83209B0310166B96FF31D
-56CC9EB5BC1206BFAD846CD174304627F81638FDE11A6BDE75CA9F346859E578
-85F334A455BE91A56B9413EE7D8AA01FF35499934773CAEA0D32041B04933C9F
-51AAC647AD00541885B774AD4D3634D409DADF2004D8EE731A3E6134D79F0954
-CAE30C6A6CDD2BA4A9F93C10C94C1F9934917627E4FE44965AE2DDE0B415E0AB
-EB5D1624171C7D55769F616F73D7812DC4222C2E4D65DF04EFE406BC4835F746
-BCF26D09314490CA27CA888713E8EA68C130EBB4CC5E23F2468220AA157D6803
-6811FC79435982D29E09A43F7707B821B3FD44738EC3993797469052AA9C0AAA
-F21AEC2E1D2DB7AF0F65B4C3736FAD9C3A4DE9E72CC92B53B74AD4343D244EA9
-EC06AD54D945040A6F160A6E1D9F4B5902601647A2811F9D2312FAFEFBB31BD8
-0D0B39593E10DD94B862FF81B35649FB16178D80C9F6F027C2CC3BEEFB474A17
-EF1C77A9247B0D550BD314240C2BCF0A37DDFF8BAB723B153970CE2849897844
-29D3C6ACC315198B15CD9D3FF34A8E283A5137C42474BFABD43B7C7181409831
-3BC0F8BF0506CC5FFE145289105E80854503FD574F37608D176B4F9B60B05222
-6F4D14D97B85F27066D0E19999AD9EF9B657B24136FDF9061411735629D48504
-1171A1A9186630275E705D61390E2BE3D33D0D97902096587FEA4E7DB365AD54
-0393E3A46D605A3B6EA413D14465B7B8E21106C8938A67E51FE9B1BE16637E15
-763DBE8BF1D9A10E28389421AE48C8D31A6F424350E7F10804F4626331AFC871
-69CAB26391A66A12BD07B8D761380F5717B207850257E97EA23ABEF5BB35BE49
-A09FA8CE4B0C101F614AFB6C4EFEBF1254D3B86F55F8B56D9AECC8E381CF1421
-FBE59AC373352296D8F33468BBCC19EB3185406A09528BEB811C190B99FA86E5
-AFD86E94A12C600D267F5F43D0DCE259D6D191E425B1CA0DE9175FEF448C9F3D
-EA82033212ED917388CDBD31A6658960E6CB45B6D7F40653C4802BE6C26ED167
-EDB3D361647B157A7AB0C0CED73DE07685BC674C59A7CE9CE049DE8DC1B5459F
-8F9C54441B994483FE30A024CC33F093D6FE259626A436F4DD28F37B297295E3
-22AC3F9976E7ED86D6C3C7483971D456883A62A63BB59F3CDF5E1AD6BA381B9F
-B4D042F69B7B6415B641E569FBF1A127256CE296DBB5629CB8B37AC47C93804D
-FB58DF99F70611FB2631BB84BD7E34F671EBE84325C35C4529E75239339B09FA
-313CFDF6AADA
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 58 /colon put
-dup 60 /less put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 76 /L put
-dup 77 /M put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA4111CDD092DD0CAEC1DC6D0CEEC3
-B291B4AF285DBA243A3457A855171EA0527DFBF10E34A60D3BE2092B3218365F
-07271A0CFA3AD15205D0D0886AAE1C89807C74C6BB23F55F0405A522BE78D4C3
-0E6C7A2C17EF66CDDD65AB75D03526DBD692FF1557B689A200BB5A593E92DA77
-01E5A82004AEF4402C06C65B21971E8240F87BE60F5F7E0B56D3024B7D49B9A7
-724C55353C362CB35B720A5405B2B9301A1A0083802E8766ADB7856925D45001
-1FA451AA61F72022FF0419B1650CE94208DEEC7EE3B53ED7F9E995F883338936
-EA6FCE2E2466BE5C04B46FC7DD9E80E6F1ECDF77599D3AB9E61C00D7E425636A
-E0AAD63D341CE31564C7882916EC35366208A3C06435BF1F55086D627E06B996
-7C49FF12CC6D0E793EB19C4972C3904ED0FA9FE0C4E05140CBAB2C41EC148B05
-43A9AD2CA401532FE0045933AE0B08BC1F16D94D85420A26A9D32A9F2486BD9F
-EA2553F2E8B6950F63A1102E9E8DE227BD756612412DB1520358DDB08CFFAEF4
-AC3597978F43E982BEDBAD042738D05AD42348840F9D0122535E6CE711AB2898
-9F1003DB762D3B15BF35F3B7F593C40282FCDA0CFB1DD0B2B3A8DB68E326251A
-E4B6B6C559E735EEA2CB221ED8B8E2366B1BFAFAA234FCAB5F94F7134DB434C9
-7033F5ED902DE94FAB29392934E8DFFB00C5D27505CFDB2F1BDC7B10C9379B1B
-8533F17A4369203D2C65B5C75975A65D20BF6880FFDF8043435779F26127B38E
-09399EBB27BC2CC481594BEAF8A749445805A6EDA1DCDD02D7F23038B6EF99C3
-18918626F164B6F9FB32CFFB0D936C11AE7E2AC80543864A65EA8575DE49848B
-B09FDE687FA8AD27D0221315119A0EF7CB87E6C72A232B51E48F4AA67AB0FE6F
-36C4BA99B3C0C343EEBF2C0E5905E71FB897C0E80C9A3B15A9CBE81994D24580
-EC447198E94134154F103060C6CCEEC2006A2F7B8A01457493EDB59205B0194F
-F4859CB75EAF60F98B0A213864DD8407DE4DF86AE6EDC5147FBED02C022B26D4
-158A8313188C7BFA5F185AF65FA75F0A17DE6A5CA276DCBDB01CF410114E8B17
-5DCCB1486455DDA266A778A9EEB6B41B9DE0F79021D241FEB9E9496DDEEB6558
-7145D3540032DD2F1848CF4AD9F88E67C4B77339BFA9EE3CF75FD78A63ADB40E
-68B3D693AEB0E7AA4E46B84BAF08CDC361A106C566D01FE63AF40D245B717B92
-FD7391F92B159830ACA6303C8E96AFA4780DCD4963BD98AF67D8511E4E6C6E7A
-32616CE5F6CB270F01B6AC4EE342610E0CA1AF1DFE51CECFF133AD714F5EE89E
-978C4BF5EA08125733CFE4B0C3853429E910677D568EA9A4A0800AA5D391A772
-E8114BC600B2D6B2651BBF987CC3509B00CEEBDDBDD82330A9181D209271073F
-B37241398D70D049B9FF607A41AC70E64B928DEAB1A0B4745D98ADEFB18F2D04
-0C44BD18F8687967984B9D48A5BF27E09CEFFD7953E6D9881A197CD09B8C75AE
-31C9ED0FEF539E4D71E4DE6E65D106975A0F9C57966D50E678AE5EA9FB83EC80
-0020420E2FDB7F4234A3DF285B9D761E1F0A21018BDD9EB84934B808E345BF4E
-91556AE5779EADC1BD02E198C73D1D10A56A0F09F01302BB91879DBB084C488C
-972D39D4212AAD28F9B24C164F18CAAF595BB6F9EA9DB90C3AC98D0F37C36830
-F28A9DDAFBD9E3C84928E9EA230FBC0F3C3D05DE4084621B65D26AF4F07F74E6
-183E59EAAE390C8AC834DC662B06E83A9CADC8B891B3EDB56FCA7252600082BB
-DCE150610319A3861811339A621DEEAD6D619D475BA86984561F489D052BAA18
-7AF5FF29298168AC79B1626F882CB19F6AF7DCC4E28124ECE52599C51890E580
-132273798D3013CF390A8569A8618258D3570D2F1E538E96793E4A939293BCAB
-A9EAB62579E456B5C80CB9B79A70EB36080A6AAECB786FBDC7F19E6543F67B8B
-39D24FF379D8C6C257C2E361FDB384C822DB095DA0F10211D6572E4DE6D4E8BD
-1770868E2752631376DEDD29CC784ECD374D72232026BDF4650B9E2712190D39
-4C0748743D7EE4706B7B31C90E5743E85DAB062B01DA4960E0314D9D51293BEA
-9DC2DA2C67DF7186F9346CA769A0C7C6E6DE1BD9B48709EB87C6E6139BDFB245
-69A02887DF104549CFDDD7FFD86E9822FFFD2DF186512BB81BEE95253FB15FEA
-01E04ED643D2C7ED7B43AF1919ED54C69908A87FEF3C46BE979787C79F885451
-3C658541A8E388297ACE1CE31AF3DC7DE205B72F27EA432387A609D9401C0FA7
-B53EF719D0BA60B400DD9D02C7D9626799D39C51039B3D0408CBCFEBB0B2EF81
-220B69B2953E00666BB31C73F11F1E6108C62F4F54138631B9FAAC2C9F92935C
-2B3D9989D3D78AE5CB66BB48F669178200ECEECAAF28DC0D5378238DFB8C4DEE
-D337C8F28BBAC0840F950DF373EE8C3A59568D95648E33802210A3A563B5819B
-14C059E7F4AC6F426CD4E7B3F1A2F6F4C2FC19C2C3E9DA7D2C8F950D7564C282
-860C60EADC8F9B71B90DAAD27095804884289E914F0BF17C555A91FD07B13DA0
-66232C27711289C4D5E20A39A4660BFC00566BB31FA6511B763EFBF1CF95AC91
-CCC63FB618BB886C3B7318CC8301E323EDB4E016F0F7889C4FEDE858094C23E2
-8429D32F5C52CAA03CFD74820F2B956E61560B64CCA58607B300CA9166864F66
-49FC01C8848EE25857AD731386858093E9F87299D452D9C13D06F90E9FEF2C9C
-B9B78EA3D3F31785364D36B1650A567AE8CF30A7A5E5C6686B614DFFF65EE9E1
-04211CFDD13B3F021E5D9C965BB56FA136C0B14761ADEB5C8092088990E8D0D6
-B92F39F4E85E71FA38904C93EFB4D7FFA8012920C2445339BEEFC621CD4765D7
-01A9C397BDA9C3C0D0E6B15297BA0BBF6169BF10162524EA71D7CA539FC209BF
-375314A88500ECFB9C7363C5AE0D7FB44D0D1AFA09F34E57AAEA2EA67E2888A0
-1B202C2FC4017AB742D5437E8BC89CB24A4A1B0DF2453026E69B60AD3AC8EEAF
-ABCC24A1F4C628D67BBC03985396C05E5DFFDD98A0CD615D37EE0FC2C9173D91
-7F20B0964E1FACA7FEF48DDF1ABD76716E06B403998530C15C434F1FD2BBB250
-4B95E75486B54604D3687C2320FDF083A23C01A79363A225733925DBB954D366
-3C535E17565ACB00D3ACB5116996A172743511888EAA2D69B180A4C4FECCF034
-BBB539DCD94510B84AB82E9154C93F025FE50BF00B325A6CC4B6974BC3B67596
-CF605CC04A14625DB25A6EB9E9F9BE93066E34A285CDC45ED330AD2073A9DDF4
-8D3A6739CBF4E846C3BB01B9DC7F01055BD43AA0022FFFB2B93DC850419B4BF7
-97451F057CC0BC68C208DF288E8A1310A015BDD1019C17EBDB42CDCA2509CE3C
-E74D55C55630B10A7F042F260D0B285DE8399D11D079E91F348317AA3DDE0CC2
-A8DAC75318B5FEA8A6359EE3765E6F75E58D354B9607034F6A8BF0B22C9F770A
-F537347806E5FB7C0A6A9325D0519B02A0E7CA47946561B848BFB1C00B5AC67F
-BE25853D147950FB70854C7F4C8D7C503850F1748DDA6210DDA2BDA36DE9AF9E
-7D4DD3152165C9AFE4CAD15D146B71F0B7F2DEAA5EB3E1637A9CB5C3CF60ACB0
-7E6A11244B3FE758DF42E346A847B6FDCA6B6FCD7F02BE7D467CDC4AA2435E5E
-34647FB8C7EFCBFD144895C0AECD5E0F2AA6375C005C75535C0833FCC123A07A
-C841157D68C80ED5341FBCA8C83274C751016C40FB73A5EA4C6ABE1ADB730CC5
-1CD781A616C79C2B99EB1F13115FB00A8994DF8017791E23CCC269D90D49B402
-E1AEEF2326CB2AB44079CE18A1FFA08195CA2AFAD0ED73D907F4FC6422B882BE
-F7CE67E17EE720B1767BB925E432CDE667B4D3F0483DBCA9EEF9A41A786DBC81
-AC9A52114892FB6D2FA892B6FDD27DDDB9E173AB1DB7FD612506E2D0338D1747
-1ABEB8BA78BF7127FEBBA18A70DAEEB612B7E48885C76CBB9DB5786C17B286C8
-A955C89B3DC4FBC16C3DA027D10148F5A2C685255F2D165570BF8BB7EF72A0C9
-F90C740E57BA036C38B3FD04BDE1119FD3582FAF9F254220CC20532D8C839CCD
-ADB7ED9483CB784126475CDE0E8B2C602A14D13486C214AD6B53E14779E7DCD0
-59A4C4D62A704B4EFA896439CB66B953822B492265FFA6BE2367DE24DA97CD5E
-31D715A3320B7D0E1EEC35EA1828A218BF3B2B4EFDADCF91DDF152D4E4F92155
-757446DD8D122A22AC3C02D9FB49D31732A03F9AAC36B0494F234466B3C239AB
-4D41488FFB5EE503F69942287348E09637CCE28F1A6671B06E8F700A2276B2E9
-60BCDD1CBAECFE816F6A4A1277569D6EF85BB49503708F56A8411F76E53148F8
-A49C0623E3EC3DE32B280F5BD47AE3F759589C2E4DF29ED5DFC587E8241F559B
-4B6A1F8646D292D966CBCF651D751E5C92751B289BB75A8058E9B19C375013AC
-5B810252BF23FF9C7A0A568C6B4E329F5B71003118F3DE19F99760B525AC3D51
-AC85F6E4E47F1EB7589AC39379C35DE27F4FC5B79B8F5D33049D4BF72A8FAD0D
-04A1C77795B44EDC59FEC22A5843F86D18FD4415FAC8AD44AA7520392D57B7B6
-2C755EF3AE81A83D965E65EE8583F575AE1CC4F50A37F0B3C007771A5B60B01C
-19FF8858951E0E7CAC7D157D3F5BC7F0E453738DC33EB390F31D38781CDA8578
-F9555EA83FA8BF8BDF55740882D9140C9596ABD438E903B366ADF71304E81E58
-FF9B51BA19FE3EB5599C6D1787569B44BF26D4E14FE79C1D47F3FD4E573CCECC
-BA3F8FD36B608D87CAAC3686BE994B252287AEFD9A14AB3051CD4D751F27DB18
-BED214064F065F20D3FE097DF160C63EA5CD01B3C27788A927C79A21C4F2164C
-EEE8F38C79A7C68B1C1958F7B6F0F696A203C93918B3C23DBBEECCCB2EF2D96A
-EF6BA2A7AE40979ACEEFF78FC82EA9B34F6126F515C307783045FE80587D0FD4
-D0F81422E0B82CCC82BEE3D4189536E2C08B35AFAF3FAE2D5D009DE9BB99598A
-A91B9B58964B4CC7CB625084C0DC42ED14D685C25C85181A8735C4EA6BA9CFD2
-B7C8E67977D047470C7A778166FF42BC4B9A8F33C5451FD16878F6D65A47617C
-543A1E51AC939FB97235FDCD67962AD3CB5985DFA5737B28AD2E24DFA5921B3A
-CF2CF5FF6687C7EC9C66C4DF80C039DD5965CB1B49D0091ACAC40AA078DF781E
-55A2457EE55B1E0422C5F8074A9D475E194E5742857BD6544A636AE573FD8E68
-70BF3858E463E94E5F5D956B9859DCF1917516005364779BB9DDB66F5DA107E4
-2B5BC512D0F9C32FDC34794BA631A0731CED84706E2FB9AF7CBD4ECD53B6157F
-7B01BFFB519C87689E2A489833D22F3C1D812849B656E6C91088880F135DEE39
-FBE71EB03E6B5AD77280112F6C3E2636D22A38AD1D34F33B7C327122B9F4BE2E
-791FED7545D52ABF2ACBDFCF770F8F874806DE0D1977776B330FB8D84A52834B
-0D2BC3FC18BC1885959B65A2B395202A8BE49350C1E133EBAEDF41D36345C24F
-86E4576E68E81EB707EEFED92F6F09FA46F2F54BA766E3B20F1CFBD6677B59EB
-73778BADEBB3783A5CFA9138815187A86694E8965FABF1DF6960865AE363D418
-4C3401F3854DD5C241F3667E2CB34EBBE9A74D890283DCA529E1B63DEA16898E
-FD241DAA19EECE2869780A8A03BE546819B3C82762F5757E72C0FA749F90050B
-BDDE78E6D01685F6DCEB9A6F45E7EC9D253ED34D2EBCB98FDE257FE1AE7D39C7
-1171F5425F3604B93531EBD0DFF691A905ACAB90F760AF4A674C500119B91549
-0566246482F9454E3D3927239AD8DEEE6D4E9ECB56748D2965D7D4C59E358307
-F936122ECCF570568F9C8C8FE5F135AAE916CED51041840BC4B1F403FA632FD1
-E694065B7F48EE00FE1E6ACAD8B86A11F3ECCA19B5ADB114D0980766991F8AC1
-573EA9B5C8FB5669574CC0426377764CF911BD316C8A7D772F78F47524112BB2
-A32F11FA6A6D1B295D96456A0D621C2B8F284DBD8FEA152D9EDE6A68B9CE8CED
-65E380ADEA02DD9C06733A4984AB4F7F8C5E87E58C9AEC65CD3490C87C04DCA3
-42AC5CFFDAF21995432D0115B425B20DFC3AF8206354267FD0A8242BE0B23B24
-7B8BFE5CB5A2340838F3BD77B6ED26A6E43D2F732F5036807505B5E8C155D194
-03E57F31DB974254F3CE52708587825117D646942431DC4A29E99E7DF8193B3F
-2C9FA9049DF511A48E405A3B798F0855493AA0A2777BF1F9F55B6797F27B8711
-5B34A0C897B7B13543477D159232939A052E46DF470936A8479BCA8ED9F97F88
-A9D77E43F19DBDD737EA504D94AC6DDAF29AF0DFB73AF8B7681E501AE88A6264
-B879436A69BD0DCF3465BE9D480A31B9702B2BDDB87D647E5A03B7E931505CD6
-7FF4595F44DA7EC3B1BE6C3E713AB806A1737D026A890E77AD137A9317779D08
-B84026855E4D84BFF2B50ACD7E4E23A50B888916681BE1FFD83128E9C36029BB
-AB6225DECF2F6DFE22E12A084C27F809F53074A272735FA977D783ADFA5555C5
-F2FF03C670E2018C9388CA3034414402C60E0D49E121FA06B54E649E73E65E2E
-3376B59F3E3221FF238488418E7B969795938996B506C9CCAE529C1AD10CBCBD
-B2DC727D9722C198F7BAA1BF583AEE1B88740668CC1E9EC960B33820981700CC
-01F5AB0586DEA46B96A72EBA2568E8A3774935B4A17BB2DF361B4E4D30814CAE
-7C6BABE324FE7FCC67E32F773924E8C995A025948E253CA14FD35DB48A4C9869
-10ADFBFEA18E729FE71A53584FF7CC8E50D04A3700181E0218558C262873C7D8
-DF424F5457D76FE99ACDF797E542433AAF9E811516AC28698A179E17915BB3E1
-368DC25C96394147D0483ECB7EC5543595AD8903BEBFB250C76ACC782BBA59DD
-36D393AB25D84A09E19F7788CAA4A9110997581DCA6EA82B149660101B9DA10C
-66A13ACB601596B68CBDEB3F8AAAB3DE33874C0B07B71BCB6E4BF05CA47A7AD0
-69B6F516E4ED20D017CE5D324FE97D7FD2412A73B92D8601B8D716AD4C87891B
-53D9E95DFAC1F27A582CCA123096B12BC1BFD68F432956606CAAD9752102B925
-555EB728A26DCB480AFA1E87F2990585E477E5E83C045A72FB2DD04D0AFC8512
-640086008CD6989676719D94E4646EA41508A6A4C25E93E84B3928E9F875186D
-B2C6079FA73A221FADDED66AA88F5B49208D10C2E1E91E25DB3818D69E69F10D
-197A16CF687E74CDE885CB876C185F19D120D916E66F88D03B308ECD3BF2010C
-7530AC389495B4E63B70999149C463F46DC3FBB0E77E74ACA0E0CE17172AEFB5
-F3D559DA122B384EC940CD845E8B5271D2859A12F5E913BA6CCF8576ED7F5C04
-9C4FE5B7DF849BBD08DB1B44A71A59CD1769853CF9E49A3425D48D19233988AC
-3263BD7D1861EE4E99C9D33FCDE02854B0A9CCC24F337F04F9AA4F0292F5613B
-0DC69AFFD972B2EA03B018057A588936F7868AC2FF5474B9A9584F2AB70A6813
-23571813A6B3B48ABA4CB44F6C14E9DD5EBC97D9A705F215B31352711E6DDC25
-27B5CF2AB2C4A1B2310A91711D39A4BB8EDC93361A18A38487F8D2E3C91E5D80
-53C2B713BB837DE72556FA3D1E797EB6A90D83DA02DE424D074B6A8EFF11BE23
-D9E905B15C4860FEC665B2182CA30293A86B5D1BB1F7230D7ACF88D7C53317F2
-57FABDDDC049CA2CF03E8F0FE9FD160736418DDAD7809A85D3F3CAE9F7C51E3D
-2238449F781D61AE69614F0B307558D4423C86EE67C353E9B49DBEB7B060D7F5
-25AE5A7F64F20D22B4932E86D5F70632334D3F08F22B81472545ADD27C389FAE
-F619E9FF87185F0F54BDDD40430CC44576CA2A2F3F4C115D3C82E53689203F93
-36421BCAEB7FE999BF2EA19D3B126C073EEEEDE1E841BA512B2A4D8E1BFB3A8C
-B2272496B09DD88CC7C37EE8E06BB92797FEA48E4845D7EDB60A61206C581894
-1FB3FFFFA610E81026A7AFF8D400EF068D1797F8512F05223DDA51FE18DFDD7D
-79FA8754A79D501826F705CC5450BE63C2390764D2AF32BDEF3E45940774C9AF
-E869BCF5D5C028278DA373F0B0B6ADA106DBF419FFD5ECA3C60A6C1AD46C6C25
-5C3DC971BB07A23E3F3180DD9DEAEDFC2A96DF506424C5EFA695150D5B550AF8
-E60CDEA33876B075EF693883F6FB70EF5676B4552318E1EBBD4050B2BAD9273B
-FA895B3DAB65E4202AB0EBBC633A0810F852824D3FA83865E505F0A226A85D26
-C7D69739B671A64FDAA895F7C98660E43B18923702C6E02C3B0806BC375AC535
-527265D76CAB05110C7854CB477F1ED55D0B876CF2421E3FD0F21337AFBEC2BD
-24E8E304B141B878DDF0A9F692E1481FCE9FE8734E6FE9CC2114F0F341AB9E03
-8E4118316EEA0985914711F52F7D2CA2FF11FD9D79C5CBC12807B5992B8485DC
-494FC91F87A7A8731CE88752D02E4527597BD7485D4B88BADA367D516EE4069E
-12625CD755DE031815AE82EEABBFF8563BD74A2A5430F4B084D7F10CAB27224B
-8A8ACAB00DD8B88D7A3B9F05D769D8328E46C1345B7BA0DAD75302227CE54C2C
-AB035F296ADF6F7F7E7CDE3EA657F1244C2370C6D95EE876257AD318A92D90D9
-4249B2EF5F001B88C41BF9C9424E9904A28951038318B55BEDDD504F111622D0
-0F9D23CDB090D27E1A7B0B7DEF03C71D5F90523852FB2530A4832382EC10EDDD
-EAA73D2C1CC08A53F1262BF636D56748631DEBE79B173EBF76B6E2334BF0D855
-74430668E6E49160A25FDE5DB59FE6320B10D00AFDAA328324572B6F767D98D5
-ABFF8B9418D51864EAAAAAA2872BEDBA9ADDD7F24012DDCD6200E5B322B2FBF2
-3A37639CBD9918FBAC813DDFF7A330CEAF3BBEC787D6B404C88E22F2EA4B0F88
-1260BC45253FDDB713D260F72F074FF766A841C7B258F281C092CF643013ED6D
-F4C3DB7750E93E405958FD2DFB84FE26FB582A61A029088B6193560370751546
-230789365755CF9412EE72731564C80661E5D607DB15823CFD57DC71DB65996A
-3093A3328998FC86ED7E2214BDAA5D70F0DF0D54D0E2380B71B9E321131F247D
-37AB1EE17FEC0ABCFC5906695B15B21CF44DE062BDBC4B9088844D4F0E39E071
-0B33110F36C709E62F7129C3089F2C235F2EFCB1820B54FFA88F157C0CE08271
-AF58E9BEDEEB16F461B77596D9FCA92F3ED5B751FC0C0312769C23E85DB83BA1
-A1F8D74BC27276BD842D5856664582B3F5414E2213E382DDD8EC2EEF31E79B95
-C2497A33906574377E7FAF03CE9131A925189213E7BA883D30BDA2D03A696FDC
-E62DC5B68FC604FC6E612BCDB18482FDAD3EE1E2E0ED7F93C91C81176D33BA53
-6CEBA5D8ECDF838640ED67372D1B2943A94D82DC93AC338C57CDE651DAE7C234
-03630634D5C816277DBC9EC71DC0A862F19B1756A11703DF5DB91E110FDC7271
-C2EBBC42F233B575752573E7C3DDC8EFC73A6B8DE7E6B8D48352C3733CB9635C
-ECAD66C97F2DD346865CF018F46B4565883834D989216E3CA25556E1F9E98930
-394B985ECF798743D8277C2AB8DCAC16B483610DB7C3C90F71680D807BFD5493
-FBEA7F3FA4293659AE976D036FAD43D509C2DBA3992DD24DE8A99BF1FEEE7431
-31705015A098AD47A51E6D955DAA1A4B03CEA003E0273BA5671F7F1998238D88
-D0DA4262B134AC9003BCE375A75AC93715F8F2F8A628409CAE9FF9D119301B3E
-E8147F1DE16649984430EC4BA948BF5C74111D0F8056383D444F6524C7FAD4F8
-6A4FDF445CF8EEDFED560A6C262E24C0444B2AF705926A9E0805A1911F0230ED
-5B2030D956CEC14A102CF4F8E8C3DAC74ADC16C169BC4A4DE75DB3CE82376254
-00FA86DB89265200CEB4CC133B2A993AD95C5AE5A695DEBB05624CEE6DDA6B5E
-A089344AFA90ACA83A413762F0153EAF7DE15333BF9AF6E75EFEB3964D59E183
-42C5E52A77C87E85E2B3049508C00ADA5D6F0A8EEB2A4D71DF16F3DACD580DD5
-68C68834C0778B469ED2F8C833A1BA9CD0DB2D6AD88C506F5BB23CFEF461D30C
-ABF3164B702B433E0156590C1FD699268144766D3AE1F8E582ADC19B2D4FEC59
-0DDC8270512D3318D854BE1BA7F545AF9D9A0F3B59710609AD7A624CDCE04DAB
-095A54E8FBBBB1987D01EB7CD1B6BEDCCAA46A07077655A73707D6902BE02565
-EC7C6145AF4E52D1073E3DAC7C087A14E9631570901BEE1FF3255B8D501384A4
-0658B67909EC2F6B90A1BCEFFA9D74C1CF5570D7EA96391CAB7CA4E0CFDDB3FB
-C3591EEB49AB7B154973F0EEB9879D53DE90351F0F76BD90764ADE187C68FEB5
-AF1B4B290F2F0AA66E1D138B21C1D4EE491ED26EE44CE490F326A0407B0FA267
-1707218CA4EE1FDE220835476614DD67C7845DFB243FD2C5D856ABC7E97671AD
-B85BCAABD214B9D9BA81B4E925A726A122F1FFF11F9581A3F08645BBC4197B27
-D40D2A95EE1DAFA9C8A6157E0E79866BA40C0702B26210725AA2239785D9D9F5
-017047AB62B57F6744B2D4A5D642E971074A2FB1F8809AB65A52E96C51415FC1
-A5286427DE8C81BBFB5A218090595CC14A86A40ED9709D5752157EA673A4084A
-93BD7E215DBD1148BC140DDC68FF8F3C1AE10894D8BA9C4A3AE55992F88429C8
-DD9B8247EB0D653FFE69165BE6827825C1F88FB36E69F2A8A3CDB6D72FF96DDA
-072C65F51A898EE82590678C43FC184B532ABBEEB801F0143111C9941F2B1C3A
-484DF4C0AA7E738EB2063278EB7B70E1BAAA88C50BC462ED449B66E4E0978C1F
-7DB04568AF5EB412C3E41BA22E8273C1996042DFF01F9702B676E858F4FDD430
-F6B417197D8999945E9A82DA43969580863825D31F9D59A0D87D0F313FE2C28B
-C6B97A98DB142B88A45943DD49471C3424BEB1DB482E9650B0B92AC70FE8845C
-DA7716D68C9C2A14BD68F379E2C9DBFF92DBACFA705F328AC2D196F472A24ACA
-244A17F00C82EF653DCB067E0F3762CA52E58A5604D29EB1D56B2EB40417E2E7
-9406035A253BC2F539D5B09ACABB048EF1D689A5889B9C5FA6B2E0E2EDB9599B
-F6F4B355E3733E6BF9B21DBF7580E52526F2900F980B3C28062A33A25CE7F6A7
-4F13D6AAD9327ECC7F3F97BF15C3BEDE1A0DE042E749F648354D061C3E52E7D9
-F376216E4BD2B782A5AA0D9FDC5551CF660285E4CA7363858C51DCC79F66072A
-2FFD59D6799BC84EDC0C5DC09D9E40056A4608B235F1357D454ED3028322AB8F
-DAF5CC60F8B5EF4E01A8ECE97C491D828A87CB85D50CD56E4A7BB6DE2315CB0B
-D0113AE20B4EF27FC486B648C3C0E6F69C1FFAE0C766DFB8B16611CB504FCAD3
-06B8169190CC5F836CB68D7CC34A8434BDDBBEF33E2B778884A8070654378FB3
-744459C9FFD348B2059652D47335D7C864619700681D45A39F068430F8DBC4F0
-D1122FCC17182216F62C82A2800FEAB2247A07413B3809DBAD5A03E1F1968BBD
-B41B98142B9B0403D882A3A70B334F0365353E51A7FE4309DE4EA9BE3B695601
-3CF86249952A437666BDFACB7D272F200A64B9C09A125287FE2779E950687EBB
-3EB747653C8D95758407DC3AD8C95AC3D2E18994156FD13CC03A6653EC7A2993
-F9893778089FA63708B0E3942A226A5289090412CBED2CD71BE93DD4CC56F095
-2E41EB41DE3CA0F8953C28C3285C57B75C13CB8A7E588054BDBF3B5AD6E86965
-4BAC32C54CC88E2BA882A887BD84BBC8F15DE986DC2118D2DD0A0E154EE11815
-65B18565F5C97BA8F5753324CCB5CD8D40463D909E832CAD28E62AA2250D8DC3
-120252A10404200CEA8A2B67CF44676E6003B7FC2AC00ADDE1227724B9E8999E
-B5A4E94223504B52575111E828E4AC03833844683B64101AB5D91EFB4CC8A822
-72C394436D8930F1541359194EAB8F44403958F415678D3EACC777022271EBA2
-2A76DC2E2E833B426A15D5AE648101CDB8116D353A837D466E4311DD86F1D921
-64EF76C5CB35B5B0E4B8B1B93861E03C1B635391276D77ECFCF247E714CC67EF
-72209891C418D1472541D68A6761EBB440E360881E993D3FA4E29CADBFE733AA
-7C260797DFE27403E70F6B1D2E493A1C55B2381AF9A815808B5081231FDF30D7
-CB3A1D091A4B6887F9EF692C736AB5770BA5921D48DB3F196A4515FEFD4317D5
-BCBE5394CB5EFDB4C4A972B669C294966E5D76171CE5B903E4D8E6AE50C5C075
-37C42B59E74CF491556B618191C3489D11288587FF05713B18529C7C7DE1B9FC
-CEA7667AA32EC4F02F452F9F20E54C89E071ABFC4155ACDB4DF3900EAEC25386
-E14C88BB174890A966703ABE3B6EE4E229882DD0543C3E33025F072EECAC34A7
-7945C2D58A721E42FE71F1A2CBC59EE8278EE39F6BFDAE2AABA5562E0970991B
-75A3AE1B2B0CE3B8BA0E32F6D281990054BB095B9E9B128D54E3492C08380208
-B6FD878894DE6F487363C826F26F5B810314E48E86C933B885D21887ECFC7FA7
-711F256D819274209A0E08AB6E147F7642D07C97F92E70699D88ADDFFC941A17
-E521A3D5E3596491CF5D9BB95E483C353441CC4748A59F9E49C79968AAD58F19
-38FE5E275EA22403CC4A287A30F7B616CD4B31519AAB4DD7237916906B59CBCB
-C275E1E993B33AD6F76E945DD4CFC3CAC1BA88E5CF9D15F03212207182AA054E
-9B53A2469E76F128006747A7E3E95720EC90B43BAF6E016205435EA4AC8C8303
-E1E41BF20358CDA809B88C72AB0C2011A6C91A884D542D92971327564E175217
-A40ED9EDA6B45192C46B648215A556591A5C8AFB8468947B8BEBFAB854983A44
-CB88DD24D3C8920383944E2FE13C18A45D4A5507110C61FBA11945DDE8F0E5C6
-265F450C30BDF5D3C95F40573B139857539F01E8C804BDC8DA9306C133E7FC0B
-66F52013A1D7C4BBF2B2E1EBF80EC769D802C7117C06AE917206ED17D13A3E95
-5C987FBAFDF8B1B49E00376E8B4D60E9F2B140267A587BE8D14B1A0249C2B1DF
-003533FDA36B565ED493CD1A807E139F6C2CE7148B6FE62615731CDFF1EFD40A
-A79DCDDD7F4F4CA0D00DF277E7A38556B684A32AC4A8B6998EF6C1693F043E31
-374B86213BF7CAEE905D239D358FFCF91EF2F34DF7E0A1A16832A54640D42610
-8C77E6BDB82B862426F153B0C87170D31DA509ADAC29EE7A614EF359D584CA36
-787DA85840A14036378E25A53F907D10F7416D5334705DB9A111553FAF2EE20F
-9C3A0BFE2D3BE88C28899043C8293D012CD8E2752F30A883C2287D5AE64D00D7
-443218C7F45449B4C9B2BCEBCEEBAE0AC8934549F5E27BC01AED860754AB4962
-12C42C1E066CE0B5726331F64A1B6A738F4D79388076AF52C46CE481988B5341
-85A8CFC7F9ACB1F0647D33B762CCC7C34F91BF607940DFC09040775AFC3FAF6A
-41E89010D5700942F78D5F6E159CD13806F1F62C28EC0BD6F40E4E812B50F088
-A20C82231D47C911A9F4213077793947F6C8EA53BF2763F75779BBFA65A75E27
-791959727522E48FC28B9C649BB0AA1DFF96D7681CE5C8A42632EEC5CB7405FC
-167DAB24900FF3CDFA2FADEB8829283B73CBA2B1A95B483CD3E6F02C693AAFF9
-9C09D3D2DC196A6EAF720FDFE7C060FECB0392610B17EC0AE65C72D89D892694
-99CADF5E3F60F6571E29EBA897831B8AB7253557713BA2529465C615D848A1CB
-57633090AF2993CF37E19A97094B8686238056F22AAAC0CD81034661B9BFF73B
-18151C4DDCFCBA332283CB1970BF1830DB778E626626DE94E0A8004E5FD830CA
-93E4BC3607809BD56C75B558196999C92E7325ECDF73AA32B49C49C3C5FE4B95
-7F50AC40FD642A52CF12F3547ACAC754EB8F7164FE5624BEF7160B14258EDAD8
-E26A181219321F2AA523CFCA7B2E12878A5E242BB7BA5C9F22D0C5722766C564
-306F713ED39E883D2A7ED68A0D7C7EFD64EB39FC189A0C7FF8111660A188E19C
-DE642C8F2B0D284AC2B52405206A5E1A449319D94B3DFA20DBCBC522B5D67431
-E3A072463B59BF356F924434B5AEA53BD49298D25738AA79AB1E274F0A7E9330
-2982789B56EE39AEE8DF359C968C704C7D3B8FCB09FFC69587EEFA7E39DD5370
-FF513753E7518954525B083BFA191115CF310A98EF5CF0C2540265031BCC9694
-8C6A3F1A053753838516389F26ED5D57BE285F92938D59B0DBC6047C0439E127
-55CF071FE044451EC5C557F6CC29D8C5256EB48AFB23A0CCA88307B7E8EE1E45
-91B46854300FF369C6D84072D4D1625A0613CD330AB55B0B326554909D57C7DD
-73422A8588FAEA378B917785E75F25E4F4183A36AE15C7FC2C3E2C6E890B113E
-0B3FEACB2A3C5ED2F7E5BFF91E8E273869D4143A954E6A5C1012A2FC7839A878
-B86D878370EF71ED0A7555E8858C68B1468E130C1CE3A6199D93FAD963AC0877
-1981237BF431B598966143C8DC7F3B802729DF288A39EDD5B06F0F808741C6AC
-4D59EEDEE8655A6CB5FFFD911D8A942590E4BA2709403D0741C70B0FF9FBFA7C
-C3FD928B5B265DEE100172E5E917F273918C7941AB9071E1C3EC631AC555CE9F
-35F88068E213C0F9A4BA7D133755EFB674717B4FF225AA16BB0B7A930D7F4474
-F2C9C784CB7C8C0A2F2201B57541D25DB2C2C8EB11D172306F7F912149C2E61B
-40B0A570CF8A47F792860E4CDCBEB9A05B511E4903921CB80EAEB5A3B6567E14
-71229E7AE16210B7F307E1FEB739554261547BFF5B559B88CB5BDD64124817D1
-AAE0DEDA95D830BBCFE0AE34A90A70E42BE5E9A54D420B7F15D678425F1F7408
-B0A45ED88BBC61FFF2433D65AEBC21CC21A454F416913AF8B4272F7E20CAE1E6
-0AFB2D16F862DFB2861CCDFE73BA66BA95636004349740C2E9292EA3C326F077
-1A69BE963D955A35B72920D063127E3C8DB8655C089312F094231517A9198B70
-CEB0F01B22DD451966D72B2152947AE928D38F39C34EA1A6DCAA758EE660700E
-351A8E433028CD6ACD63B6745E0F501E72E3E3A001696B500F83B67E027E47C4
-36B251893D87A5B646C1BFCC94F2516C5A82CA364FCD3F128289F1DBBD0E1BD2
-8D641FBA92924ECDB132C1F89BA3650DAE6E68BAD856CDAC195A70FBB0D9ADD4
-BFE9194C5C2C525337AC29B8A55D56BB2BF90C004F1B5B3842DB2581E728BFE7
-4112D349EF2FD56CD145DC9CCE9F8364830E466E60F6F437EEE13DFC07D8009C
-ECF876BCF50BF9C60CC60544EBD3BC42EE61F0DB1ED1EB920CD367149B52B2FD
-353B4ADB2C18A087AA670E492BA5FAB513AFBE786F2A729D93F28D282A2A1945
-3A0D2565D395FB4A07E97F04E1A50AEA7EBCAB7D5DABA2603BDCA8FE770A4012
-114B736C19E1649153A74C74E7218A0A031EAAFD8420A712DEB1233036455045
-18F9902DB6390E82EF280BF3C104B4E25EDAD22880D74EE456D1E5225D683D5F
-13E8DA2C4D1A8A1F456D9A3887EB3D9ED71BBE682C7FA3AD06CE4F2C554DBB72
-71FCCF5A8D945387E9FA42BE9D774C44FD296270FB67B1004273051EFB74C2AC
-2E215CCEA6F18AADA4EE6B94915242B113F094ACC5D837566D5B49C51FA2012A
-792357BA0162EA6D04C7106B60E25EDC02CC4FDDC90FA314E4D9DD972536C486
-7A772B06B55C1545C98E90E8104FD7AA76B0DC12C7331859B6DFD01FF9022F05
-34FCF3DB906EDDF0E8
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 19 /acute put
-dup 24 /cedilla put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 45 /hyphen put
-dup 46 /period put
-dup 58 /colon put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 74 /J put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 122 /z put
-dup 126 /tilde put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B78188FA4BCFB0B51692D07B0BEBB930C6F0997B437E2C51B876B
-61A563A2673932C2045833FAA35DB22ADE12102335D5DC734AE3AC5EEE6658D7
-92EB62131E1DFBA441F53EFF9021D9D4C491F26BE8F54C61165CAD778CE8695C
-EEAF70E3B20C64D4C2B34A084B5770BAB2A974E898F62BFE90F132A37E2DCA4F
-43E13DB13C94DFA8ECE2B7374827AE168634FA007F8981ADA046CED3448BF453
-FCD9A4F194FA648F9FC0971734BB69CB75348A88CC361FF06E984C86AF0EA429
-DAA5808CCE3583664AEFE0C59EDA04A147FB51227A5AB0C13942323E9B3733DD
-3EE7DF7F774DE5D0D0980DA8C0192983F1E3EF18481EAF1EFEDA0068BCBDB28A
-7FC7D9191EFFC574588DEC1E180341DC959F8EF56ED5B19F50AA82A4653649B7
-CDCA11A1FF27AFA7FF189A7E8A7C099AEEE0CAF3E121798B2721ABE8808D20A4
-AB6E704C0C376BD242C4966325D4C939669E28B55BC335405C400A9983B89EBB
-B13D8C5F3A148E38E9ABD86D0171C927F1051266CBBD5C5D12522AF7CC17918F
-410BABDD5FDD279338E8B17434DBF20B8E06B58D9E13B731E3C07E4CC350C431
-CE2034CB23828A19AE93124011BF053A3C5705D9BEF6D95205FB8360391C84B3
-7C6D719C0FB459A312AAC3C4256EAB293B6DC729CC5070524D1BDA41091E8B42
-2B6C4A092995AFB40CCF35730350CBA197F3D5BC5BB83CEDDBC6FBDE23A885CE
-61D416B3A6CEC46474A0F42D5B923A61832262F234001DBCED9A7A00F5511F3D
-C2178422A46CA5494AA8C37F51C40339CF9392A7098DF8596EA97C440989CA06
-EEEB5025B29EBF6038EFDDFD6F70989D63440E9C14E2A1040FAF427EB41259E3
-FF3BA255BD4C04BAAC47326181EC7CA1FFB32CBCAB92B1F8CDE6ED0DD3FE6D5F
-EE14B739FC25BB13CD94A0C0DD7CEDD886AAC62248C64B8439064D1038886DB3
-187F017A79318B69963296B4812128EACEFBAAE983646E021F24BDAA2B78E8FE
-2BCD5BFB302103D7DD28668DA7A60C446A27BFF8D6C66F4FBC61D271B91F0470
-16F567DABCD1E8B04CFBEF602BD9CE44B724B3EB8D30CE573EBB13BAA047F947
-90B24F2E49C20E2474EE9D019565E6FF25BDB3F74DF05BB9E148E1C5883A9EA1
-53AD383463F47D6C1077CB8D8DE48F71A5D42C54BEF4C0058EDAA735809798FB
-356002E6B41BC6D5E3D3027540168761334720113FF02B2C734749091BE71BE4
-5DA61AC33554AF15E6F60EBECDED2ED271C80B5C4F943ECFCDA66DB6165620AB
-0360CF8DD672B0C03DF892BD397923C6855938CB739FE4B3815D76DBCB1C8A22
-EE4A86AB55FF7994EB31BA410DE548B6276C354EEE51D5BBDBBEF76E9DA42C02
-CCB3729DB2F52BFC06A5A030F32927E2215BC0C86F99D9F39C0C4E342DD816A3
-B51AB73808F2545F9C55CC3D352B263E37D3D6E47854D7508D29BF6B52CDA83B
-45C36FD67DCAA7BD22745B1AA86908ADE52BB14B55498AFFB5892A6BC9256571
-575183D73B178FB7B67307222F6165175519E7CF674964F2131FF44528D21025
-3A624A5AB5BD4411386573C91A067186318F266B2EF29918160A5F5AFC3AD9C4
-68F5C559617D890FABCDDDEEAD20FE6658231877FF9B545C2042681D7FE55EE1
-BA15672861CDEAD8D891294B2648A8F238982D6EB21E190D731CCDC0D7D3B015
-EF80EE325C722BB465DD16683548DFFF777EE8C0974FF530B89A37EE183A3B9B
-7723983B3616C1309F9993AA1A5DD55CCCC4F0B6167A4D4279EDB9C4B0C161E6
-AD204EBAD822BDD6379C4FE669C2391550E799AFAD6CC1F1B9F939477B62BEF0
-304897E43C721F7624C1C14B7C04CDD413776888FC82D681820B736BB5BE00C7
-0F0419B675B503E66A43FBD834A26899EF4CC8A4548117D22F2AFFB5314688C8
-45629324E61EAF29141A2473ACF527FD0E359D6688CBBBBE09162A7292DBAE12
-3E753760B6908EB5CC5F0A6433A3A0CC0332D35B133DB3F65BD8BD8D6916D34B
-47DB6D595EF0B371789D3E86C29FA43184D530AA8F55E5B9C77EF695E4DA3608
-91589C5A163EED18214F66B832DFB9CD48D517C41722FE7E35CBF3F6C4FF5B8A
-33F7BB36440DB3D2C429E869413EC2775650C2F90F49FE64FF23FB64FECF7FF5
-F5C8E231C98ED067BAA67B964C49DA0A22E62B4B7FEB7471DA6FC2F1D6A8C078
-8CB07F28E0DF9C415C6F293DC7EB552C08AAD0380263567EA358A76B19D4B1D6
-C50A5B31C6B459EB90F0F6482E2374DBE3BA8798CFF4343A8229A15A5EFA3290
-7685A7750FBF32EEA61B7885C6D993AF73D36175D5BE0B5DAEF1814EBE0793B2
-2F767D4F52BD8566BB2122106127617CA9FB2EFBBF6FA289529587F7914BC7E3
-D9A141E953EB453FBD3D6430B8A7C11C82F2DAB16605E3F2BECA72A7E672D23C
-A51AB425C1AA404E623296B30179DD584C56C8A30746A3CFB5F2FF1AF0C667CB
-A32E6D08921BF9690A4FA541E3808C1F17531838A76A1865CD2B0156B1D44627
-D38ADA6809846DB85AB8428B157C13C87F0A1D6A104AF92906488FBC593810C1
-BA02A4DCAD1E3363D963AE266E0BBD925D595036C85BFF0C0608393467BB9793
-F5871FBEA8B5103CBE06434A7521396AB8C8D4C6CB9F2BF092CAB2BD9FF5971B
-3F4312985B64F86F0487E5234E238877E1DE24189B8066C0489F3F37A1C6CAB4
-E9782789ACF9299E527DE0108B6137EC2C0A38C72A8AC6DDE0A40EF5B50C418B
-DD8A869187381A4C84D3B9189A4F438C4DB208BF6E98A2467A3492C9F69E6AF4
-EBDF7DA5BB5F06852AA21760DB3A78CE7CDC8A3BE5ECBE695740A3F80ED42DF3
-AE8A314930F8541C68B978C817F61433D6767216DBD9FF6B65E4C8ECF8778A42
-37DA64A5DD63768706D3B0A6DF5EE723259A11A6F56D0A34E0152A8498AF8EB0
-09D1833F4C580FEF5E40BD604892279A113217A5727EF4BD330A1E8AD28D1F36
-AECA499B8D5D4F12F337D4205A541A610A3270C88156854F3356E171C2373921
-43C09D0CEEBC255293655F302CA2C580256E42A0C7D29DF5718428D6C451F739
-5B664025F68E95FBED4024FF098D6B11B3FDCA121EBC1C8D57D391147FE9731B
-3157D64F17491B4A1DFE98E65C145A3AEB1081DF03F5FAD1159AA7F64EE80BFB
-1AC2589F9848DE68732169548003F798D173D4B05C62BA04C4281185F97584D4
-388045D9413F8A93D7C7480B92C087B9245D0BE5808DA675DFE3F0FD4025BA29
-3FD3145F9DB7D6C29CB4538CA71D60121E4CA81D8F6F193A15C7EC6B2A82719B
-1B7C21F5C7193766FA33A4A43BE25E6D6911BC6373B47D7568B27DC114BEA46A
-14100A84B09D8D752D043981D3551F8BB53339308CE3C37036F4CFF24E0CBF06
-6E772315ADE640380CBBFC06FDF698714B975B3450ADB2D486F59B950E2BB590
-4664E88831F122FCFEC5F37BC61DFA985DFF06365DD0F1D477A47274E3A1CAC2
-3985E7BE059095B888BEF43580006EA4799DE8336518F27115F540EF6523325E
-7AD2DEAA4748838019EDCF5F1D4517F5141C9B03DB510DB1F1E517760DF69372
-654BC56F0EB1DF69EC626F1D9EE62F1060679AE856EF9D149A72FC4CAC01B0DA
-A2493440F110329BA302C59AC7D8B4E797E4944208441DE05D8104E02B5A2FD3
-B214CBDDAB0F2DAF4FC0216E2B4FB05CAC36A45988ADBC3B00D2817F10C3A1A7
-BD723EFBC4E2C20F2DCCF7452AE9C93CFF05DC2729AFF78A20C5AC2F4F494DBA
-27BA6B842CBD9275F2CB3673F543802A5D8D553187009A2322B7D05D9662BA39
-C6701C73BC8C6DC4E22B18390F0197F4634888F486C9F0BB2D0610B9CD3F8F41
-AF5B8AAE7F82BF2BBD4E861BB47084ED5FE7DD18085D467CD2DBE88578FA2451
-C4E2A43AA406476B99B71D1C9CFD22BD9AF53937558C0585A1E113B286981308
-0D2DA7896FBE647539252E8D6CF54A8A9E4D24FDDE28F2E58916F9A4F9137A12
-30731F9B57ECC0F310BE696D80C44FF8C7D77363774EDB0221B562E738D07F70
-819B90F9B9967C7A863C5A404B32F93B7B5A028FAFE3CE5F6AF8D644D4F7E200
-841FE9AAF13F186C298D64D31E85EACCF733597ACEA02958D5FFE1DBC90873B9
-A3D7FE0D47ADEB943CAB14CEB70CEB0B2F05BAE0516F787F9237EAC62E110CC5
-DBF203EDF10D23D001BD189F4BED786C798D6B89C0086B25097B5E9CEB377A0A
-5D46A4C4CE4820261C488A0F4CD4A8D9782B8FD97ADC65D8F5C081A7B5DBBB01
-66B568D166AB2930646E1B52F161C4CA80034D083288235943B4A41D62B2F61E
-F498859C33C340CA4E070B8DBCF11222FF7F04C1552DDA0CE634978B65F7BB05
-626C3DFDD929FCF88E3A69F6ABFA6D79294E2DC4396255B497379FFC0992793F
-5832BBDED52B2F6A0B309CA0115572722B266DB5455E4B63A74AA81B3BDD4C06
-09710F7D35EA70DBA05A39B42EF9B3C8FFB4D02B2AF1054A98A0610875C21E6D
-4377CC7D21925F670F9CF4292896678D330366FA109E0876AEC09A73B4A9BEF4
-FF27EA54758A8A861E30F5C1705D81DFD43C726CE75603067443EB17849AA6FF
-EA2FC7B0F09D6DCB5AA3E4AF20D69AE07E5752DDCC458306D97F942B1B94DAEE
-77EE52987F31011A1CBB13FD8A82ED2A3E20BE2BE9884858BC5F2144BD24BA49
-0F353F43769A48DF55BA13E34FC54CC0A0B772FDE2365464545DBDF957ABF306
-1CA6CDF9436B85987A607233D19B82DA291BA0AB332275ED2201CF7BCE51BBF4
-1534B7F5414C9607FECB9D60DD052E17671662A8755FCAB9996FE5504B55F30D
-EAE1C6C0F3FCD064A92A4F5ECFCD043DBF1C11D88CC5F0B98C1026D58B1FAD64
-DDAAF0DF9B4371FD037D0FD7966E758BC6B69FB3DF05D704E0D29C6530ADE318
-037E7AC0CF83735B89249F769174A00CA29E9E6266926A151D806C3580637905
-D5ED7D4FD68EC2FEF472D63F274097FC81E7F8DCC25D8AFF364261B7C27DB3E1
-C3ECBF9519411DAFEE1E0680EAF3041D48744D9F5936C2B86B07E58AD5F5A0BF
-64D1A8F6E80364AED36452F7605DD219270C6AEDB874A3DFC26496B929409DA4
-50E231A4DEB04ABEF427E2F6BDF573471A72155777189DD483A25FEB73D5AF2F
-5689083C6B94F2783E8B1373558D20E752D784A816154357FCD16D0CFD6AF677
-B1BDA26A104D7946AD99A84A12CA7163C4C50AB91B6EF1A9026CD218D01F6B5F
-CF661E03C01E6DEC5146196D320F5D7D7D3027C448E4E2BA5D179A178368D3D2
-1E23E9FAE1F7811DF257CFA4C720EF62497290BA024552037A5056FEB841339F
-358B8B13E52CBD48A230AEF06B2CE729B3FA79D6F648CC6728459A6033CE59F9
-7C5ABDAD30252C36A3CF3276B4187EF60311B638D15ED1BDCA77229CF3F868B1
-36943BF8594C74BDBE816DAB738BA8E5F7006EAEEDEB5E5B47EF726C22A6919A
-EC3E9C7199969C63DCF3D644AFE486AD14FD4323E4BD25CCE8EC3521C411CA2E
-6F1072C3455D019B47B3788824FF926036EF7E12DF9059429911F4FA97A7593B
-4DC22F91C96D7E765930223C8573CA13F262DB28C2544EC4582DD27C0169F169
-DA02A968DB3A0DFE8858B9BC536520CC3CCC0805442D32DB828E2AADABDB9354
-C9D3582D9E29CED492A3A62AD47BF0EAF26BE414D14AD4ADB0B757B9CAF3B85A
-C842D042C9C71D7B2CEAF04B001EB57B38CA50306391E9052B9E6561ACE60831
-4FED2919C30273C0703E7B4D49B83A30AC97793AD4DA30198F820902A05B54EB
-D62501C9C44BBF9E59493B97E2A68A2C8DA04089A6E76D127103493306633BA4
-BC378CD0DF35CBB4B859023D0F75A6785521A7168CEA6F63A5C027D6D6DF5039
-6C9B3186B7709DBC3A4A3083708D49A184E11AEC92DB7191CA98E343F2E07334
-D8A317C006B15E7751B55D5AD05D0B4034F41541A83F20D36C5529B001A9AD9E
-864008A1568C7FBA6E5AF0A8DCB20A999E146324217A9C2B1A9EE7916BA0DCC0
-ACEB6A8E7CBEB4A94F7710C745EBDB230E460B3DDE022629C52D50E30E84D9CF
-16950B26D3CECBB916BDDCD874AD8FA5112A56413F77D97B8D232258C750115E
-BFDDB88E75A8F1237794C07C346EEB75475E39FC0A9D2D7F15E617ACFB02E361
-012DF901F9DD3830076B2C9474076D653A155220024AC07FFC04BA2B63E3482F
-09BCBA47A58517A20CD834D13C7464DD7C2C757D60714D7F7BD122AE8029431D
-9F8990EE1D32B2A3780A7ECF0A770285A7C9D1EA93BEE809E848D9D7A32A4A27
-890131A0AC8EA060ACD683BBAC05288AFAB76599A9BE7254EA7D944804D2FE69
-E50078699F070907C0A95F7CACD96DE652FABB5654E3E29E5C10D93E0208D5F2
-BDB726920FE5A144A4256DF23F6D5EC89F8495F879A582B4921C3259B1B4CF24
-5A65ABEDF4626A78DA00EF9F2CBF7AAC82F2CE6FD2C0A4C6CD1C24F272E74DEA
-783C8DFD363A656EF1C399F6FA1C5F9CCF3DA479D80D6E16A2417AFBBBC5BE96
-16E48179DCFA21BF4E8FF18F118CFF54F5845EE38E6D822CDC0B331D35808C32
-56F10786824C341CD286B307CEC7BE77701D97DB098677C39C6D5CC1963221F9
-5DB0C4A95934ADC0197DEFD99EED44CD7AA7362C000109E64003EB2CE77F373E
-39BD4222CBD3886B232FDE5F00B946EBA6BABF5C06543753C3F630339BDA1F8E
-D57329078455E6409ED5865013EA7E5B907A9F4B720B2D443F5E1B22EE9E0FA9
-9B9E04D4DAD3DE7C9BC375641410FB7556B35443B2F6D2DF5B442C1D1B404CFD
-40DA8A2652C50F0B2E56A7C23F388885F2C1DABC0B1E4462F16258D8FDB8D3E6
-6AE62F29882C7BD4B9364000F8156D4DF01E004D6A914362BC52DC34F727DC96
-348210AFBFA061D38B8B7660A4404D1094DEF6B56E6DFB0433CB0445C0FEFE67
-FE6565195406B5AAC008D686337116397B5086A4AE6E089F5C55A02FDBCC2AC5
-DF2A25D00761F6F2AF6DAD1FA32BC530D7C0F511874F72A3F8C782DB8EB420AB
-02915C7BA59832167C84144B5E76162F3472C9F653D73283138879D68124ED10
-BAA6D80E452D5BDEFCBC7BA6592BB7A2B61982EAEBC9D1829FDE24539F304F6C
-5954EE1E58BF3F1DF4103DA71F7B2DD9D0E0129B3A5231B2B05E4A3510301505
-BC008BC342D3748BA2D0EB0639B5E16692E323F76B0544A18CE18E841063D290
-4D1DC08480EF2F429C8248A6985F43A7282462031D2FE5F6A4FE1B8DC407B7CF
-8BE46D3AB3A6EBC8D5F26E7E6B708AC748C3F059354047E91366323DD440D96B
-64192793D14E5551025D27B947FFCAE00EE4F620483230DA4DD41A33342A5785
-D7B0879EF7BD6CDC199AC62137DD767C06AF0B2342D4AAD9DDF080F1582B3FE1
-99F642B5D5DE3FD874E19A09CF99648B93E06B2144C34D054DCFE03C247CC953
-433EC63379BCE8EA994A15BB91360D77A6B5F9C6F7A66B11FEE6E3454366E6E5
-7D7E80AA1D5CD42D3283A8D10D1D3199D48070370EF843AACE1665B045E0D00B
-695AD62776B2EF893C79A3EA40B196AAE876E44B08D4009A6C2EB5C755EA49EF
-48A4EFEDAD1FD395FD2486348430B08B7D6CD15B1B5D4EF999C3DEA683888A6D
-7DCF8DD79E8E9C57343513BFBAE93CD5256E1C804D13B0C797BB34F70BBE57A7
-070A8709AC3CB4ADDCDCB1265AF1D2EF7A99B3BB944B5A0FB0DEF69A8C95DCDE
-B4CD0A1F26141378F1179E61767DBABEACA06DAFCA703FC72648021429C1ABCC
-28A89444B9DF7F263E71C5F184B191F32FEEAA2E21E6F72C41DA1B91B0134711
-A460721CA5A46D06AA53D821F3E43BE6BD3F580F7C81A84D35E091B05178B5AC
-A59BBF965F01CD5715AF7E6A532DE4A53DEDB1B2D52BAC1DF42DB9EB89836FE4
-CD352D9A17A1FDA99F5BB9F091E3DC02973DCA186099B17E1F8C59CB48ED6B05
-8035808110C40300E05626E1BAF62AFF738D233CC8A505E15190009DA26ED5C2
-FF9F9AAB8269F04F1E5018511DB89AF5C3086B7E5D4ECDC89A7E018AD55CB977
-47AD5C802BAF5996A0BBBA01CBE725A8CC0C77A9CAEF6A1F70AF7764E33F4043
-90520FEB84DBF662BD445639A6DA17C5AB94EEA33EF003FFCE18E4D24B18B913
-AB3C3037B526E07D8B7F36C86C66A3E335362736A1B359680FA2321F5AE99D7D
-4AD3DD038DAF197E2CC786353EB7A9282ECDDD4EA7A74013FA0D54A177AE313E
-A50DEA48354259F219A0430DBCED655B3CF35139F3035242F0B679344750144D
-0AFC7DEC91435E8CA677D9F6B0EADB00A4A5D55623D79043C7E708AB12917E57
-CCEA78D86E246047AC7398291068773A583C891C175A12C45701AB4EC468289C
-449684BF433A8679C67382D4EC94827127616C7FD0216F98E2FA375ED81444D0
-9CBC5D7CBE2933B2ED3527B3514F8BC03D006E0CA3839594F3390C5B8DD9CAD8
-4065108FA4D9008D88CE81CC92CF56501A51F0F10649EDB00E78B07EC2F740C6
-26B6DA2655CEDFA01AEA6628DA7E8048CF1168B664A5BDE5C4C96D8E91CEF757
-8A269686849C262085EFCD02AA2CEB20700CCB291EB85169E6D4DA6647BF4B13
-F93AD71FBE617F5030795A709607B8A7694A5B9A003365E9AFFE53670EE1CE2D
-D691E341A35E7A3B164986D5AFDCC16DFEB18848F7BC001D3104A182F1DCACD8
-35A6B2E78D8E147EB684A5950FD1EDADFF3466D8250619C5E08E8D5B9AAD1BF8
-D5A09F0A70B015BB85B2B579DF07043B3830745F133A82041020782641D98D1E
-F0CBA06E877EC7258FCE088028DCF38105399B84E5E7C6879D6B9CFD70B54EF3
-9C8AF17DEA2950876648D38B3586DA5A3020842486AC406CDA759CF8ED2488F7
-FC7251AEC3EFC11CA0609690BEF1507CC9CEFA0A21DB52C8CDCBE28C49E2FC92
-A8962F2ED323BF4C788B0F16EC8342D17DC91570A1A39558DFB521B27A99A155
-904D493DA60A5D789AEA141FFE3D2D79CDC882C0BF043EC48E5E5E86098E67AE
-BB27075560518C99766BFA6AF7D97B2501F5DEA5358668201451A031701C0289
-35B653064B04E3021270422E708BD1D4A8863660AED311B77CCCBB7F62734D4C
-C0AD9A6E16CDF537EB766C17754E66F7CA6AE294CA20156A6750BCEE734BCBFF
-362A3E4602A9704E0F8DA4F5F8C382631C765C0AAD7825AE2AD9A04FDF9957D5
-A087E90E5D715FABC5F246890C9FBC34318C6EB08CBC617B47C30F84E5E81253
-B7AE7F7D9311674604F136826DC9BDACC22D4AB78F3D07B71059D97B7E5A43BC
-380F4435D88B425F4777D364A4F949892BAD4E809D05ED716866CBB87A8B620F
-ECED3C289BE1CB45DE147E3B4E90417CCEBD033C95BE0FAD62BDE7EA33452E77
-F9225ED42A24A0371079ABA4473B83618452D3F59F7C62DB3970319D898C0834
-987055A5ACF619D245BCE03AA59A579FE24A4BB22154CAEF7A3B3B329B4B7368
-28AAB0A91F9D3002466D0EEB737CA3D69289E243E70DFC0D248BACFC9BB3337A
-300CF09EBAC02D888CFF89399B5958829F2D71218ECCB5F9ECDE9943FC4282A8
-C731D9718EA3D5B429F2249E2C59DBE67E2C0610A547A8A72BA1F1FFFB964328
-92E36DD628B9DAABB495540064B2F1BAF19019309D185B173A202055CC647214
-D00D80139662E966D810114DFA2DA33ABB8FBE60B69126B906544B586B6B82F3
-0E87761DAC16B27DA7D47D8EDE379CA189DE36FED1521025135B877FA076C8DE
-A1C01304CFF8DC2069BA9139617B913194FA91DD08BD915A7F8376C726FE08A5
-F0C98C4CE0AFBD2CFC06BE94B5393F5BFC83D852566B61240F9A28386B1F87DB
-B18164AF9CA8B1C7F656DC90CF7C44D9B28ADD400DA389768DDC99845818C8C3
-04F2A23D9846E3564A8E11C70A969B06C7B254AB5165D05C58A220C5A2960F7F
-27A5FDD2870229CDBD6D5EFEE92BB78B9E3DB8960133EC66E565A2A1CA822489
-8BDBBE78851C8F03B44C3071DE94FE1D42835A4E0E5B1D80280CB9106A392864
-4BD22D9AF3E3AF3C5AE945E64FF4B70396828ED465139BE30960F3AE96C7A2B6
-341C7ED348E927010202322E28A483FE98CEA6BF321C981EDE4539A4325628EC
-0C24AD1942C9D1CBFEFF525E03A7A1A3D8727635BADBF5002C31AF8050F95075
-377B8CC8ED0C959CD047846638EBEB2B66B95D1896A6A9E61B434C138DD37CD3
-742F4E984CA0BB1D77045B7E96792534EFC8F83C554BFF464299F62FD56AF8D7
-F088BCF9D50097E52806A05AD2111319E8243566E225E5CD7C0BC8DB3DC61CB2
-29B1A8A129A0BF566464720ACDA31333F501BA78001554F7725F4A66D650B28B
-BEA225D9C5F68CFE46E97045618C8C647918F06B29500DAC1B9FA25C7FA2CFA9
-B3A14F45B2614BC46BC86928830929D9B1C03AFDE044334B535425A2AB4B760A
-5BD7A39F382D28019A9E9D8263AC6D9A7671C696110B1167DB19530F6B82364F
-0F1D02126A367E4AFAD407560D0C0F3E8B8755A2A2C19706207FB6551948E6FE
-AF6AA143677DAE9C42ACEE24BFE8812006AD7340CCDF0DCF31ACC01721ABD081
-BC0486E9D97C4F1C3AD01A3CDCB65BA8759948195C41F6B56C2F079667562BED
-412604A7EBA171EF77F7334DB2E6BDC0184C15524B4064FC9597661315258825
-8F59DC08D6ADD7FF1DCD2A5EBF60D37C292490A40BD52E33683A3509741F828E
-A00BF021D83B21CAA0EB7CFB86DCCB67AB3693CDE887C07F12CD5AA3CE22D792
-BE682D5C794199B3483627C3766B843CECADBE91215E1F445BF93F022AB99BDA
-DEB9A7CB0BA9AAB562090577FFE452FB81635C16F5E9E30CD3EE87221C098858
-95296716DCF19D6247958D4828866277050979C31F27E1E9BC96DFA5B616E93C
-88D099DE70391DDF62FBE3532935DC3C5A45193BFA0B7D8C17ABB447319487B8
-C623004C9C2DDA4CD18BE390AC31B3B94697430F40B65A651635CD929688C8BD
-D6324B7531BFFD8D09F0E89E83C824738E7D897303F4F6EDD97546ACF2A54473
-6902BA3B82F2ABB3524F8787027D19AED8EA26B066EECB00F989D9E9E757C027
-8B21D22053AD17AECF7E1EF14E9A0C2DE93C623393DC74D91442EA1D8542909B
-1CD05D47E08D27F4315090B59D4F19D96B0108BD33276C23517D7F184D7E8244
-4860D87AEAE9F35F14FD45C4928D96FDFA93C888898890A6758A604077142935
-64BFC4C606268EDBF31F9A217A297AA6156E8D9151B5A5717450EDAD9FF901C5
-B1EE0A269F21CC03B308974B33E9C30E8F168022C71579AE90796051B412E5DF
-926F0C60508C999C6EBC4199C0B71036759EB4647D91F82232579FAAD24D654F
-A89BE9FB197453E958764E9B97EC7A8A76C182610323B78918037C000806C95E
-55E849B9DCEF7FBF7427986DFB4807375CDF001206C91917911313A8B4BF4E75
-202B857D6C41260CCEEF9041592FB8FACC08D7B9C2DF916D41E48964C0952BD3
-4EC0A715B8B110EB8A5FB2DE3C9BA9AA389F9784AA760838B7A998FB736F2F3F
-F91D7109D2996C0C5FBC179FEBDD47DAC74BC5A1669C58F20813986BE2CF2A05
-554DE1358574523453911BD88FD911D499D78EE025C1DC9D7D0B357E67F9244E
-4DA51AF644D330E3FE937468938AD15AC71066B167C72541236ADED8207036F8
-BE838C63D8935472F1C8B906DC1426C9373F86629F39142C4B0ACE7BAB58D4FF
-A11EC7600F4250D949049EE3FFC85D3BF0677CB31CB4CE7F7A8181F8DE6D44B9
-000AF404E211AB5249B8D7CA37246F23A48BB2078FB16A095984B137E212D2D7
-C74E5574EB534157F49283D31A18D1729DCE3A7543C208411C21E9DF00590618
-25C2D8D6546B442D69216E411BD686686CEBD1C6B59AC731F8BA1435DE732EC4
-93D9AF6AC08055203232B3C1A6E5C2612A5B6C231F5E277E60B55FF146914BF5
-69983EE4CDD11B95CCDB57B1D9AC489984AA80E3791F6F2ECA4054B8794BF03D
-60F1C0551B9BF6747741AB77A91A1D520EA763B0F74D718747D1418546E490B6
-49A9A977C82EF6F7B76C7F9D8F387D39FE73631CF8FE47A3F0CB5B06AC83B107
-613C0343C96C0C8D33B3AB58C995876FCF3A9A9144DD27D43222D30FFD93BF50
-67409BF7154DE457567A7D3C763E9D6A1FF8719CFE1AED079E2D5B9C5FB5E8CB
-5FC753202EBAD213C041493614A09F3887E2F9D8629351E4E8029319D554B36F
-FB85E8A2ABC5B3BFA7E52B222216EBEE316037CC58563A77ECB1BE77890F10EB
-B5DF6871D23063F6D2BB6E3AE2E51D654E4039797E6B8EE9E0C794246ACFBA14
-71FDC01282E37B820FFB836DB96687B390E41869F98A9B0CEA00B5816C6E37CD
-1DB55F8AF15078F166BD8C7F3AB11A6BCCDF80F73C825290B815DAE2013D098D
-2FE738FB76D38F3364608FF0DC5C6A048261E6DF21C0793E683E2902C098C6D5
-7A9C1AD8EEE88FFCD812C2F87FE19B17049719EB911DC66038B63DEACBDF6CB2
-66A6C18FA3EC7294C41329CF11FF23209E45B826EBF27609FBC10FED20A7F368
-66C0DB3036A446FCF7B2B5432D8F2E9E95AC65F828D9F824628952B27231AD09
-2F5193FFDFAE9BF3796C2BC0FFEE82251739294D82B40B70EA4FC7FC1EA71038
-1E87E951C4A3B31C1A3CA67B12EA2486F53AC6CCD7044A198E6AAFEB66D2D267
-D139FB8EB71C29056811A460FC1FEEAA5098DEC3DFB28BBA94A7F6D690B4DF93
-A40743A5718E4D8A3147C5019C847D0A4C237BCF8ACA358DED2DB5915FAAE683
-A27BD2E0545D5CF183DB9E506D46B4C885295587CC7C9C8113E22C4F42B9CBC9
-F236D99E7C41AE58B26B92BF4D689A34707D44A11793DDA31F2C95287BC719A8
-46BDB3E13392EBB14901F4A3993795E8FA5777AD6662677520D9A5D00D59EEB3
-AEF39AA66A1DA2
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 16 /dotlessi put
-dup 19 /acute put
-dup 24 /cedilla put
-dup 34 /quotedblright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 50 /two put
-dup 58 /colon put
-dup 65 /A put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 92 /quotedblleft put
-dup 94 /circumflex put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 122 /z put
-dup 126 /tilde put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
-044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
-A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
-23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
-19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
-1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
-8BF148BF893357A81572660ABA054F4FB8EBDFB17C139BFAADB06A51D65DE1F6
-F050CB3E91E659BB472B9B3A9F7968B65BB053A8319789CB0728BE2E05B1D719
-3A66759ECCFC6522D6EC0A34C1F451E55F2D1C1226B62828D4041A065C741A83
-5216629A4591897025D65E85441DFD91BBB266409ABDD926FB8001E8B969DC30
-2BF245C9680634072322A9B3D6AF4074416A5C81954031BAA2BCF0C804070B46
-B2AEA4AEC2A47FB1BF4EFBAEDAD04E8F63C75C46CCEF26B057E9EB4321A1BE98
-4752B6CB6904E5A95CDC679925797402D680808F627670A273B22E373D303F20
-0EF533BAC0868D7839814EF85AE2A8CE59633DCC4D666C6A312525AA043A6CE1
-0B00C0E8866D57EF5CF0C2541C55D9708D646140D9EAAAA9B8F7C941921F9CAF
-F86ADD7D23CE47530085EE5348680E52195E6B46D12F61505BBDE52A125E1D39
-5EBACAE0C52225081F22F1DDF140A4996B21E32FA4554B1D82BCF226B2C20CBC
-5E0113B3BC9F1300ABCC2305CC9EE2714C8515BE25FE12195940B78B2198453A
-8E94956625BDA043B515A3035B8257D2F9319E6D2D07DA01CC3DBAD0B367A09B
-7E383C90EA37F3CBE8AD78BE11A2050A9F70F13ED243C582FA2C29B6F0C6C7C6
-4C4895F2C738C8681F4669D9229B73780B9A2CC762440D49BA83559D3AEB3A01
-CCC6A4CF3135DB32AFA128E8BD2594FE6CBC9C3A1971BD2D5BBD6B5B42C02F29
-27DE553E076EA4A551D5234BDDF419E845E31E9DB55CDCD729F020C6EF202A57
-F4A455FD0920A12C664C2749ACE8C7B348D2F0670B698A3CA3858173F8FF5942
-719FAC63938DE87E9B8A25AEA9BA27DAC9D5F4C6AB825FBCF96F3DECDF07B196
-3322FFD30810C832368C7CC28EE920B89FFFE9176DC4EC8D1630D915D8D67F48
-0283835D6FF115D0B68FA3C3D07095171C17CC6530A04FAC78AB00EF4A5B486B
-FFEDDC456CF3CA0C9824382A8592F3F84259A527102456ED4325AAFDB1E9E049
-CD0621FC7F802BB547EF1EF1D9631CAD8D47852271BD2907ECC3455A6B6AED82
-E1E3D760D097DEFFA164AC9C7AEB7125A46CB00BF7FE40391FA338541142C073
-636B4F11F07DD645BFB7285B1F7D646F8C1EB07545062B2C9534BEB8A1D442FE
-F0024EE23756B1166DD612DC04B9059B383F8D092DDCE6AD7462CC17E0422826
-97A829FA6C4CB92F4798608354A21144C9C9C1D51C3481650667710FBEED3FDB
-E7968794F70E6B431A1E4EF744FF61E9637DE34FBFCA87ABF788CE8DE3CC9774
-E977B26485BB0BBC853B0B7077DD66CA2583D3F44E870CD8705C81DB3D3E728E
-8F8BD31117C0C7AA94B165CBEAF56A9F6E2889DE52F88C9E4D09E5E9923DD3BC
-772993FE5A5E19733773FD3CB3D852D29F8E548AB4F683D78FF6A8D727B614E5
-7B2BB24240EE5EFAF02D5506D22E9747B32F707F9142223838E51931764D476C
-287A8CE18E7264A85B5075855B529FA76611357D9E0C25D2979006ACC54CCCC0
-686DA8E467B153809F2CBBC3D175243C5CA27D5F171B066FF3CC1D39E458FD26
-AD45DA28FCC099EBDC1F6A40F1C9B6E32124B39F29669E773C394E3569EEDF27
-3F3D6F161C35D7C1633E2237729B2098BED5F055B6E5736265BDF97709C57697
-BF2BB3BC650469F918ADDCC7C85DA8873E002ABC34906594BB43A2DA61802FEC
-8587378B3322E2B5D84D4BBCFEE0241081BEA45478C9DA7674567D9D4D1143A5
-B274106F08452F0DF1B8EE561454A6115832C9C729886189DD8FE50627DE389C
-5DEA816442952C22E000754AAD67A3865731C1E64B1BE13AEDDE8961CFE98919
-60F5EDEC2A4B16298C5EA102AD4BF8CA0D158FDDD1AFD514B5627C72792DB342
-D5421CBF7E223307E3AFE0BC31124E325B80D45EF8262323EB2BBEC53ABEA50B
-0010AAC20996F0F0842DA4AAFF538A327FFF81C7886946B8B0D10601C6976F85
-18479273F4EDE00BD6611B1E7CD9A2872C806D76E2C5FFC0BB1887AD69C1008F
-6741707C189FFF3AD0760067F71A85E62B372E3C5F22EA28AB2B6CAE00BC2CBE
-3C0EBBA114A1C246FBCF3D236C6D7D0EF16BA6A4DA6C867A694E6DC4ABA6C52B
-0B50E76CC07CB9BC107C3C80C1D991A6224BA8D9BFF3EB51153251486A215982
-78E6497BEA8F4034FF7B15F27A822303FA2B93AE248A259F8D9BBD647F7922B3
-D1A5E2EBCA10B5481412F07FCD17C9574C7A8164F34D5AFF446B09EC99C25DE1
-71E13DD7F3E2F29FDA2BE232385C1FBEB711B763FCBA851D5D2789C77FDBBBB9
-2C451DBC687B80D7F7C26927BA8E6B56C08460AA772579BF1A9DF54830212867
-B5B1990E48D834F1DC7117CB1377C81151E967D2D6F812CFBC18082FCAA97C87
-00DCE91C041926A1B69D05341175C3E490C3011F80BF15BAE23E85DE2EE56F04
-32750ED878988D802DD9939B92BD71AAC16D1A56BE59E62436064CCEB453B87D
-E9DF683A2B918859FEC38B038ABB06759262644FA44BC37FE36C3A805E6CB50B
-6C5E62DF9AE0466C1DD6E0790AEEC120E34A62892E5643E372D18504C5B96548
-76A96DE55CA7ACA66EB7F186F64512C5F9F4B9D5DEECB387B2DDBAEFC75DCC0E
-2764FC5D90DBB797C66C327CA540EA6B4BCC37ED15A7408C67404CE24010EA8D
-6D2433FF51D24FFE65A1E79155B3B1E2932DCFB5A19BF2F12989C5AEA84AA4AE
-63F262F1DF68BCAAC5AB0DB91F32A00A65B6A9D20A5621B4908792F41DE64111
-F05EE6F812B1DE676167F6D28365577BC11C5D712CD7932B62514F7DDFF51E6D
-F86F08F674A95B5E8A87B72818E3EAD9E4547201D4C4137CAE99467C0D8325D0
-DD7B2360365AACAFE901BD79761541C80BE5940900CFA61DA9A462E0AE5C6993
-7082D8990725B902B9DFD598D3EB30A98240AFF887486A6F30E3BEEBFFE5A323
-F5A579CF171EAF76E37688CB64884DACDC887E4D7BC852BFC3561FA1804A779C
-837097F716D6C9774E8DAFF0EC2EED106CE80043F2621FC8E7AE6E786846817A
-C0E1B56F7810244B18D0E7D3DBD3F8D799EF1C7FC57C233B4887F05FF643EBAB
-71C2A78DF12A7861699FA83CAD4A829A5D7391A32B5DE24992674E051683780A
-5F940A7E1A708B0F415441AEB0B15B35A3900AB727E0B31CD0AD0CD34C49BFF1
-D3D857CEFD0183D0A4E4078191C010574B463101BD0258E843BCCA3C38553E30
-38973097F9DCCC5AD3F31FB8E0EA1331A5A8AD02789280411467B1D8045DD9DE
-3D2BB653D0CE9C803ACB19412FA52C5D207D6659744A54185E6A2A9D618B0C32
-DEAF49E3DCAB1AD8AF0760DA8F1E3A6A668DA91EB2A78173F01BEE3E82EA6A9B
-2B6526817327B15FAFE636F7FB2013CD057973E0997FA082D862CA181E915313
-7E2D9269536C29A07C573D0D21FB83CBB37B9D0B87B1C215AFC4585C9408919E
-6FD4E213BA7BB30FB2135EF0722B7793E10DFE77034E84F015C021E89875E831
-D64021799C750E4E452B68975DDC50530078E286F27F148240C12DD542DEEBEF
-16F268163FAFCA552359BA3180F0E207B4CA036F1937C7ADC92D60A98691218A
-7304273D1EC865A723130A73F9954E5A93EBE8391F6212E71D6D89073349315C
-7EDE852FEDDE896CD0AB0FB3B5BA7239762B8290C1689737C260B6BBD4977F06
-4C91757D2940989D97229EF11D465EEEF6A3401F4D2EBFDD593C463806C738CE
-11EB250FBBC7DEE8988ACA14FC0470B5E05008F605685C1894EC0F8DC9DE8878
-3207C94745915483534D7BC4A580EF109763A7F2E5662F0E8376AE1B3A4200D1
-D0341D71FCAC9A97E55EC03C5F82E8C9DF8B1E7A5D03A1020197EB0E47D460A8
-84F58EEEE7009FE046D8CFD1DE90E7CF6F7908D6DA76D66E5EB7BED5C1A18865
-AAE5C9561CC80FE0FABC08DA84E879734B9D2EC5582370453FE386DFC8312E17
-EA3F88E0914FE68962803030F8FE1B77C2F6B585180772508AD72227BB8B2F25
-636879D10584408CF1D875A0EE38DD834AA05AF066FBF3739BC20DA57359ACAF
-564CF7402A618CDD168FED371AA5D082485997836D4704797BBC39FC20655B27
-D21006468300FEE7E955E2343F7141B66A9264B3EB5000899E4FD8CC392D0984
-F6ED3D9FACE627A4FD15B1CBBC862472D4717220E7CFAC40E2E0FABF4DC79AA8
-F92E7E2ACD6348D2A50E59E65627F676E48685308BFC2D77B66702FE2D7F0AD1
-0731C4FF9C3668E8A3A190523C834BCB9F19F3E0764F0BD0C820E20B4A8629C6
-220B0D7A093318F66FC99D1CD0E55BB006C8BA97927F53BAFA8602EE29EDF64C
-519FB4A1FEC8154CDEA79FCA9A51637905D8257EA895DDAFE507AE6F85243526
-39D48A15EFD4BF3F1F5A9995468BDDF3C5B17D83C19D7346599D2098F6E6306D
-AB3D85F2B4DC0AFDE66087304957B6ABCF10EB6CE261A984BF34BEDBF0F1C33C
-154D4F05D5DFB78871CD02D95999F5D10307DAE1099E31F8B483A5A5BB312F91
-89BE34A5006BF9495E60D584F76AD2DBD7E77E335F1BD5F06AAF62AD995DB8E4
-2D20E65EE417EC6157B311001FC85CA9EAC1DCD6002A80FFEAD04BFD9326BDDA
-CF79075C7CE380482AF8CB9DBD58C75ECB29B04C5F4C77D25AC5482D3B2CFA31
-5FA7AF23BEFD7F5109BCCF3A91DAF949CF95B7CD37111FBF15FCEB24A7A08286
-B8F82747353FB352A9B6F8FE9422785834EC14D50841147B99581915857A55BC
-C9255BCD68599274997DFAAA13275A21C4E2CE988BE250BC8E3BCC6743BBF578
-A92DDB1B5B0D97BFE65089EF34F9610528C6BFAFE0FEC75B4E260A7CA6EDC6BD
-75FA81D8E67EC8C0418DC3F8D079998E58C4385A78C050EA8C6D16C691DEB7C4
-D12A5D8A16B8BE277358057E112F1B42EC7A4A6DA8F8505E37837581FAB0CC39
-CCAF717E564096227E084DA4549B781C9592D69439B437E38F71FE283D425302
-5E1748339954528C27DDA3F03D0C049DFB453600DB822B3A285DE28B5B26DCE2
-CF65F7F82D90D21F5DE3A89B4F13216B1B366B12C1412E29B77863B5356F7D7B
-8DB20FD17AD170B0924575C222B3252FBDCC837EC4E62DA75CB6A074E74D2CFF
-26ABE0CA85C7FA7DF38595ED9D24361135F184277DDE45A0D28443C6817FC63A
-A0B02E67606A7E1FE8A678622DF0B539649A40EFB8ADD39E2B0FF242E05903D0
-D39F288A81D591732B4B52200F18DC92B81F9105A7751A5AE9675F5A0FB8D8E0
-6E989152A69360CC0CD0F3D18B7A6B0588A077D04210358F754C2566E20B9026
-850C4094BA7B147FDD9A8331F24F1A72B47B15226EB4BFD717BBFBB857D70C61
-176A12F99678F2E7512AECADEC1277CFC23F8C1695A8F884A02F73F2823E051C
-8E7B37E4933FF231316266C7CDA3BD4B51ED7E0229727E9CC54613E45346CEC9
-EDCEAF8E6DB711C5A0613282C16615F64989D2511721D473FAB5294C7AD8991E
-761936462EA70C93780F0021FA2AF0660E3DC7CD069D78483F6230D5F207A10D
-FC896C176A054507A673F5F0F16B90F87657B62B3684C065481C3B940A49405B
-DBD5F7E48EA3AA5DBA5AF80E5A350F7DFFAB2E5F3B61F20D1F0FCB4C5BDADDE2
-1BBF698DAC949D3626871FBB4196DDD4F7E898BC2CBFF00BE6576F9B5EEB5475
-F56320CAFFB343BCB6D7671FF528BEFDB2A39E22FBF3E4A690E230A359D0BACC
-0B0AA10BCFB8F2CD3C94113CC215BB1EECF81FDBA6295B80EDE7283213430EF8
-9824ECF151E2EAE81C2F0A60852785528C83C5051E4999868EE233188C0CD535
-E32E01774CF4E8BF4107C251A35DC781E4FBD5FDA2C5A5317EAC13B7DDEF9F20
-0A40BF9D465697A0C9BD1BB43931EA73B5FF11F914A3426276CEF562B4A755DC
-D8D4C033680C218D991106E4A886AC27CE6183BE5C5193A0670ED839E47D9354
-41E03BBFE21311BABBC8FDD7F7EE7DE0BFE63334FED4062BFAD88517424F0345
-6F6731A9C5909568A089C33797018D54A879E4D361052CE165346DA215009177
-00A6EFCDD61C2229251A7ADA84EADD0880AAB5AECAA85E420E27BD695595DA2A
-0749644E2904683501C45B670A402A4F4AB84DECF89577C524B7E07CF854DAF8
-088A8A0E1B87668700C93E22CB25E80FD6320F6FE3E6E6A28114CAB81E0496BF
-B65769628712636019FC99E5CC511849E1CF897152580D78106EFDE3DA4EC31D
-31BB8A51074CCC16E95527FFCEC4FEC2C0FE227D6F4FCEBD14D431D216F72D06
-646F66DAC716C1D5E372B6FF71786FA762652D755A956DB8E3A5E80B0DBA2B85
-06AE9BD7C947E95D9557F5BE05C946DCF2060A8318A4D5607B56D5714038B1A0
-CECACB7663C9B51E3ED42705AA5A272E255C9967CA6CBF6BCCB83205CC64AFED
-41E1D752FB6BFEA3BBBA189EE4C7429421EF0519CE9C1A789C2EB856E54E0A0C
-361AEECFB8C3C8E33FDCFD1FEDD6C9E6F1C66132C52CF6F492F8F301CA376A96
-89B9CB73ED089ABAEC1697EE2CD27D9454CA610526EEFCA2C7EDD9D48547D38F
-77F6B4196B99D30D7C9750685C63F12DEEB502161AA1D57A93475E20A419DA35
-21F972D6905A4B61604A2A5680199834768831F7F92362EA3665385115EB9621
-230ED00B3573B49E1FAC66781FECE2303B77492F7B150F0E93EE035421EEA2FC
-0EA61C003B74F882971C923F5CBCC1F19555DB6DBECDF381CCE40929A0F72750
-0185BE2971C50ADDAFA9DF32F24D30F96CA855B79998FEFE84D717094720D0A3
-87A1586CEDA198ACDDC9FAF870F4FBE2D1CC457D0A7221DFC571003FCC18EF04
-2D4F4CE6B05279CFBED6EB556526F58885AEBB19A6A395E4FDD6466AC1353740
-2746EB1D73BAA95C01C13BD26C9D9A67819EFECA4AD79305B1F9312348E0B79A
-66EEF7B5354E225FA52966F22EBA6845A4FDC1057CA961F101497661F855770D
-5C942E2FF701A82ABDD3D890BC8F0C912442053A5431EBEAC3B737D69751CA25
-5CAF1F5F192307C6C4AF459AB347E67CBF4A0EB6767B8AFA49B80CD5A6D9D9F7
-0421199501F4AD61CA812189CE016F17535A8AAEF2142CBD1AF628B820260647
-52A52255DE3C74153EB9322A4D46898B616CCAEB1831ADE8A1EDF06D399AA76D
-D87780DF6468BB6C7504BC0E431C02A57B579652790C5074F32E30D96848AD13
-8D1DB40D5CAF64DF467C4396C7269F875C05C8F37D97A66A1B16EA70AA9CEE3A
-E1BB18CE08DB8B5DC24D0C98A19AF9058820DB28D2D969F398C423F71F2291D9
-7366FE29EAAA50F062FD4B7E41183EE7904240EDF5E0D10502EB3A6446EA7E1D
-4D5019D4DC6BDD366E346266666C6ACEA04A79ED0CFEA69DA182AB57CA233FC0
-9B728DBA4DECD3CE7B01BA56761AF243660073BF036AB3410B47EB0F54E600DB
-6B78843247B0BD9E10682435BB31664F28DF504F0C733CA6719C238224F38DD3
-85C4679865FDDB643225C8DA4792A674A97FD2ECE879AFD9521AC82AC11E32C8
-A53D344257E3600AEC7A7EE6F5BD7F685BE7C976FFF5910C21250D6A2488B593
-B38DD425426E2C77ADFD5C312BC58FCC7E524BE59922FA2CE296F419E98BBE8B
-6BB860011E2178D82FE482BDBA87EE43B539E939E5040F5DBBA84A7684934CE1
-D5B941060E11C3D21E8DD456946E71D049D0050C71C981E588D3A14F1EF09C19
-3C1A3F9201CF5FB14533F5989331ADC770F0962AD6DBB44AEB5EF2833AB982D5
-88AFF86934F10A7EA4076951A9AC07E7883EF7DEFA483ADD8C29BAA5B60220BA
-108E7BA10A30815950F502AB165B824B46239110929F98A87A272D137C3B3EC2
-F5BBCB4BB4B5C566826BEBDC986B72357AD71856FF7C25B80B386EB034DC229C
-E2AD3310C9ECB2EA54D10A1AE294263F88531F526E8726891571D561FCDC134D
-A3AEB7D9D55ECB6C44342AA920B4D223D088CE9FAF0ECCFA2C56DAA10BC9E605
-A4BDD8A6E20783E33DFE5DA1CB5643BA51933A970A114D65D1710344366C10F1
-C880653605BAAE5730974D7B70A7D98B1E6B5F7BCBA9C3C637DB23DEC8DE700F
-BE7BFDF611431E5D43ACDA097EA8E31D3E643C112BD30346D7532DD106E751E3
-D3F56E8E458A31DF2E3B00A661CEB1DC91331D916AF533A793255FFCC416CC1F
-8B7C7BE961155A6385F4557625218D15B15BF9282FDB95E496E75A19E5226A9E
-7D0061F34599393C00F617D7C876AE2F95CC501636C300EFAA14496206D798D4
-5908227F20C5BBF8B41AD3A4CC346ABF759B971A0CE8694577750D3891BFA9CC
-73088A2CC81825CCEBDA0E538B50F4CF2A9512EAAC0D0EFE90D51DF6DDF3CA5A
-40574FDE79DD7A8FE4059AD856B6515D54A4466BEAA08894C305D6B68D562313
-CC5A34125131E8257CAC116E19AB71BB93D046B7C027EA2B68872F0CEDBED1F6
-173DA52D6F392DBD32D94D5934F4BB1995E84D4116666915E4D79D522DD46C77
-EAB298D578645651C77C2E64206B8C833266D5BE0593B143D868A1A4DCB478BC
-62C02EE1E2D81E97C3B11C46D87F2EE696810AED9213E108A8E298CD3A42F9FA
-74C9CD25823B6D506926D5FB56CB4EE6B2564484BE8048C2303911B86D6D713E
-5D6E0D9705FB3E16EC3237CF631169E1387A4DC3422E8833E5F918B374148D42
-D5C8D9F2DEB151FBDF589F2A430A1E780416607E94CF596F3B46E5DD54C1323F
-CBE03E29ED97AC2DDC4ECA947FFD1D9EF829CA1ECC12F63AA7B1FAD91E01FF47
-46A66923AF0B2FF7E9C9BF5AF163DD9A6D1495FEC0FAB87E23CB978BB555A3B5
-1455381BB980F082214CAF0165664CB5C43C3EC28E9284FEFD92181323406C94
-A3456D8D331DBBCAFA7DB513D62F90DB296088325BE04AD64081EEDE140772CF
-8B14808BA3733CB320E66A78B19A9F267615F018B720608F693054EC1EBE12CF
-548135A824D48EFFAABD88B56C039D8C06CEB193ABFE0BD68E508B487961C06B
-EEF59BDBD29959CC5CB88731329162127787BAD8CC00DD92CF1877931021367B
-958F90706E7C72F585D95F0845EB0071CFC2A4209F34DEAEB7F08D7A43A5CD19
-6EB9B857160FC67BC8784BD7F667D30C4CD0250878BDF3F1F41D83F2DB32A3FC
-83AD502437E619AC2C36603EB6C8BB89D8A363C26F19E968DC2B886CF1466FCF
-59C1D32BF88C71687CA3FC2873793B5EA4DD4FC246B96A85DF74E8F1EC3FE9CA
-EBFA6771871D5033E9ADA9ED5EB0BFEECC89C1DC79A06DB85A02C16987A24E96
-96E1DC2CF2BB583689E9084A21F243509E19B259348668AFCA7DA2BC4A925D2F
-3804C4BFC3C159178AA514073817C2A559F62E05FDF2F420F642B1BB723D0DFB
-415F2F92B89D73BDADB193DE08314364B113ABDD2CB6010F1D30399E0EF92033
-94A53042898B4AF669883B8BF77A0E209EA954307C7A0B111D840AA7AE23C43C
-077901CE287EECFE55C8F6030A89AF120054BB877E186C198E27C9525C65CD8A
-76B8697718D0D3A44F5C241B09643A3C15CA3493A7375361AB61DC9227A41EBA
-243DC35A558A1A963439689C9FF0FB6E1B61FD125D105B2AB3D6481700B2F2C0
-7C372E29BA80111BE854945D47A175FFFD1FF0F41E7F7E1B442C3B25D0FDF748
-334E5FE2F01CFFC7156C2F6CB59242EB561A8EF467A11FE04CEE21A23CF0E5CA
-290C61E712EB81947D94D349788B3278F64F3B454A42C5665AB1CF2A5F260652
-8161A27185CBC1D2B36A899C74C4EA141125F9F7DCE6EDD8D5D15B99ECF3EB38
-1B9481D7A97CA69E91657063B97AD87050CEBB19BD2453EDDEC05AD575904BAE
-9E209E7A4ED60E1A7BA2B70CF8F06A0E08EE3909AC8C68771C063CEEE8F402DE
-DD430CB1567FF0A8F724E66BFCF4E9EE7776AD979E8FD64277DA705596565A03
-3ADB953F0851C7713A3C12950A3322E77B36FA3AC604A68F47BBC4607E4EF46B
-2C56B20C93E10C875A9A989D39B3209D04AEA46F90B32B590EB856A92A7436E1
-66D0391E20146CDE1C04155D0A2E5CAE977FA2EB0088C673AE306E96DFB2681D
-047081F9305942C4D62CA93F634A5997B8E2BC27AFA18B440C341D7FF364C49D
-D842E9032C472A30552F7CBFEE5486ADE24243241E132ABE18DCA1EBD412A14B
-C9D44A43DDC3B80BE44B1453FEB3EDE5FC4062B9460EA0497E13926EA5D070D6
-A1F7CDB9064CE04A4988D3AF2B1720BE6B6D1A35C779F78973532A03C9A63D6A
-5E92FFC797D072CEB87DAE94B819279E214C7394EA5F3DCF88449FCE7C54C606
-C7421C5921C34DB3CF003CD867DA6D39216D05A436557E687B3308AB52153E13
-C235352D6DB1D07D1B706EA7B61E8E0679386FD5CFD1ED375B9DD9DF85099679
-995A72984A00728051CCEC5A75BF6CB98AA1C6DEE6991F3FD5EAB626A16B4E05
-A111D103E65075BB1E90B75FC19B6D9A8FAD52C36130F1C6D5A3A95A26D063FA
-0FB68F130E2701B7015749E829DAB17E52FFFA8B2F4E53A4CE194A1359415D1A
-55CEC124750C2BF4D1FF459BD4967B24085973744951E548D5272D51F6DC9503
-ECEC50EC88031A51040C402E33EA5759E49DEA36EC498D40D311A167A20D489F
-C0260BD3138CB15483851E75ABBE52BA6A435D270C44699EE3F74A16ED51E496
-7AAB2C16A461DC32FE00675E20B5B8FEA54B570D5009EE999F893027739574D1
-8D201D3FAE0084451F82C0FCDFE77DCDD0331BF1970FDC4C8806755F7944F3B2
-6FA183540FDB481F7FF062A4FB8AEC38506E5FF03EC1B862E6C825DFC1AE750D
-F2E5954DAD4AF3FBC473B77691961A0587F21CD62AEEB001E3ABB155B6913275
-710B60C5D70161F03F0045DF77B30A40EDA3F33147AD6377D11F42933084753F
-93CA21B0036A9486F3A82C8AEAD26D16897A247A1DAAF7C752A7BB1A4726E625
-488223AE7BC741BC0473F4CCDC37F6604AADCE2A11228DE9B044647A0B0D2C6A
-5AAF53D870A2B6674A9EBAF8A0990AEE11A5F1ED50C7F51B22373543A2F8420D
-225F4976AD7AA5DE2D543D2C360CE7352292879E2D4C3A41460ADF5F1BEFFB47
-5F80C39990201701E323BA2197CF0EA66F3C4898D63C311AD2802728066D8427
-F597D97E69A38E349A2E46AD1686CED2F3018A8DF8241D3935170114213FC8E0
-6239F121B43504D4BEEBAE34552EC3E439098620188D47DBF0E16A96FC172545
-30AA7112E4A3D55945CD21F86632004CE3A8332E612C7711175C350F18665073
-A3332AC5F547799A28148A4B76D9BB1F9CB3B90896B6B123B4757B8D305BB102
-DD9E3A6962D36AE8BCC9DFDE46787D8752EA2202A472738DAC63B595693CF045
-8665FFFC1874D51487686EB03559447A26166EDB513A3ECAC4C219EDA63296CB
-1AC78C3BB24B75A65B84F266525A44F152D7C5DD224F773594AEFFA09C551D30
-08C5E2DBBBE6406ECB74A41D66EFA0AA78C02D91E134ABDC31A1FF2D8B480AE6
-EE8AC22AEF76D5722A1489F6F03B0A6BEC57FB9C4E8DA62A066E9318C39BEBA3
-29835CE532B695CFF1CFB5C95BF3C5DB7A6F3276FCB7F08056197D91345D4929
-1CA2C12AC65AB118769E280DB6D612F04612312E4B7E598D09CF158CA0398D9F
-D5747C67A5B7526A43D934A22EDC2AFCB0AD56C8D3662A1C296B265766213BC4
-5D23160843DF2660245E7F5ADBCFF1AF3DEFFE6F2A0909D84ECDCB789A3AA0B8
-FD2E8E12A1132B5136F4E58DF40497266F8EE599BF39C949D062B49478B77D62
-D43C0FA30318E098F625E51948CA0609860DD8E511767795C3B8C748FE3091A6
-86CDDC5F5E30044A04126D5569B8059078B63500C2C7DA58089BBF6CC5DEF008
-B87387FED4ED821DA98A7B5E14677FECF11DD3C249501401FD1D2F8E9AFAC453
-F07A3EBA6A74B6027D0395C212F8756B67B9738962E9847F76EA4119CD1FA20A
-236868371E56412979A58E5C699A72D7355A5BBD98827DEAB84F38248CB33879
-D2548950E74C10D717D9A37F80690D80E9BE0DE440307DA795E9D2DD54F38C83
-48ACFF28572C98D56B675CCBE8E2141DE16C1606427F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 55387786 39139632 1000 600 600 (pt-br-refcard.dvi)
-@start /Fa 197[20 58[{}1 66.4176 /CMMI8 rf /Fb 134[35
-3[38 24 29 30 1[36 36 40 58 18 2[22 36 33 1[33 36 33
-33 36 51[26 45[{}19 66.4176 /CMTI8 rf /Fc 242[61 13[{}1
-49.8132 /CMSY6 rf /Fd 134[32 1[43 32 34 24 24 24 1[34
-30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 11[45 1[34
-2[41 1[45 54 3[22 1[47 39 41 1[43 42 45 9[30 30 30 1[30
-30 30 30 1[18 21 18 44[{}44 49.8132 /CMR6 rf /Fe 129[41
-5[43 1[43 45 32 32 34 1[45 41 45 68 23 2[23 45 41 25
-37 45 36 45 40 72[36 4[41 2[23 3[45 47 11[{}26 66.4176
-/CMBX8 rf /Ff 130[35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 3[35 2[35 35 35 1[35 2[35 35 4[35 35 35
-35 35 35 35 35 35 35 1[35 1[35 4[35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 1[35 35 35 35 35 33[{}74 66.4176
-/CMTT8 rf /Fg 129[57 3[51 1[60 1[60 64 45 45 47 60 64
-57 64 95 32 1[35 32 64 57 35 53 64 51 64 56 2[57 7[87
-1[80 64 86 1[78 86 1[109 69 1[59 43 90 1[72 75 1[83 81
-87 18[32 38 3[45 45 15[51 4[57 6[64 67 11[{}49 99.6264
-/CMBX10 rf /Fh 129[35 3[31 1[37 1[37 39 27 28 28 37 39
-35 39 59 20 1[22 20 39 35 22 31 39 31 39 35 2[35 1[35
-6[53 51 39 52 55 48 55 53 65 44 2[25 1[55 46 48 54 2[53
-6[20 7[35 2[35 20 24 20 2[27 27 5[35 9[31 4[35 2[20 3[39
-41 11[{}56 66.4176 /CMR8 rf /Fi 129[69 9[53 54 57 2[69
-76 115 3[38 2[42 63 76 61 1[67 2[69 8[106 2[103 3[108
-6[108 1[90 1[99 8[38 58[{}21 119.552 /CMBX10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- @landscape end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin @landscape 1 0 bop -555 -364 a Fi(GNU)45
-b(Emacs:)62 b(Cart)o(~)-68 b(ao)45 b(de)i(Refer)m(^)-66
-b(encia)259 -266 y Fh(\(para)24 b(v)n(ers~)-35 b(ao)24
-b(22\))-450 -59 y Fg(Iniciando)37 b(o)i(Emacs)-450 97
-y Fh(P)n(ara)24 b(en)n(trar)f(no)i(GNU)e(Emacs,)h(digite:)31
-b Ff(emacs)-450 300 y Fg(Saindo)37 b(do)h(Emacs)-450
-455 y Fh(susp)r(ende)25 b(ou)f(minimiza)f(o)g(Emacs)476
-b Ff(C-z)-450 525 y Fh(encerra)24 b(o)g(Emacs)933 b Ff(C-x)36
-b(C-c)-450 709 y Fg(Arquiv)m(os)-450 865 y Fe(abre)23
-b Fh(um)h(arquiv)n(o)910 b Ff(C-x)36 b(C-f)-450 934 y
-Fe(salv)-5 b(a)23 b Fh(um)g(arquiv)n(o)h(em)g(disco)603
-b Ff(C-x)36 b(C-s)-450 1004 y Fh(salv)l(a)24 b Fe(to)r(dos)f
-Fh(arquiv)n(os)h(ab)r(ertos)543 b Ff(C-x)36 b(s)-450
-1074 y Fe(insere)24 b Fh(outro)g(arquiv)n(o)g(neste)g(bu\013er)409
-b Ff(C-x)36 b(i)-450 1144 y Fh(substitui)24 b(este)g(arquiv)n(o)g(p)r
-(or)g(outro)463 b Ff(C-x)36 b(C-v)-450 1213 y Fh(salv)l(a)24
-b(o)g(bu\013er)g(em)f(um)h(arquiv)n(o)g(esp)r(eci\014cado)155
-b Ff(C-x)36 b(C-w)-450 1283 y Fh(alterna)22 b(o)g(estado)g(de)g(somen)n
-(te)h(leitura)e(do)h(bu\013er)71 b Ff(C-x)36 b(C-q)-450
-1494 y Fg(Ajuda)h(\(Help\))-450 1661 y Fh(T)-6 b(ecle)24
-b Ff(C-h)h Fh(\(ou)f Ff(F1)p Fh(\))h(e)f(siga)f(as)h(instru\030)-31
-b(c~)c(oes.)-450 1759 y(remo)n(v)n(e)24 b(a)g(janela)g(de)g(a)t(juda)
-666 b Ff(C-x)36 b(1)-450 1829 y Fh(rola)23 b(a)h(janela)g(de)g(a)t
-(juda)766 b Ff(C-M-v)-450 1927 y Fh(aprop)r(os:)30 b(mostra)22
-b(comandos)g(que)h(casam)e(com)h(a)-450 1997 y(string)990
-1927 y Ff(C-h)36 b(a)-450 2063 y Fh(descrev)n(e)25 b(fun\030)-31
-b(c~)c(ao)24 b(asso)r(ciada)h(a)f(teclas)392 b Ff(C-h)36
-b(k)-450 2132 y Fh(descrev)n(e)25 b(uma)f(fun\030)-31
-b(c~)c(ao)803 b Ff(C-h)36 b(f)-450 2202 y Fh(busca)24
-b(informa\030)-31 b(c~)c(oes)24 b(esp)r(ec)-8 b(\023)-27
-b(\020\014cas)25 b(do)f(mo)r(do)249 b Ff(C-h)36 b(m)-450
-2405 y Fg(Recup)s(erando-se)g(de)h(Erros)-450 2561 y
-Fe(ab)r(orta)22 b Fh(uma)i(op)r(era\030)-31 b(c~)c(ao)756
-b Ff(C-g)-450 2631 y Fe(recup)r(era)24 b Fh(arquiv)n(os)f(ap\023)-35
-b(os)25 b(crash)313 b Ff(M-x)36 b(recover-session)-450
-2700 y Fh(desfaz)24 b(uma)g(altera\030)-31 b(c~)c(ao)25
-b(\()p Fe(undo)p Fh(\))400 b Ff(C-x)36 b(u,)g(C-_)g Fh(or)f
-Ff(C-/)-450 2770 y Fh(restaura)24 b(um)f(bu\013er)h(para)g(o)g(arquiv)n
-(o)252 b Ff(M-x)36 b(revert-buffer)-450 2840 y Fh(redesenha)25
-b(a)f(tela)942 b Ff(C-l)-450 3024 y Fg(Busca)38 b(Incremen)m(tal)-450
-3179 y Fh(busca)24 b(para)g(fren)n(te)907 b Ff(C-s)-450
-3249 y Fh(busca)24 b(para)g(tr\023)-35 b(as)965 b Ff(C-r)-450
-3319 y Fh(busca)24 b(p)r(or)g(express~)-35 b(ao)24 b(regular)584
-b Ff(C-M-s)-450 3389 y Fh(busca)24 b(p)r(or)g(express~)-35
-b(ao)24 b(regular)g(para)f(tr\023)-35 b(as)282 b Ff(C-M-r)-450
-3487 y Fh(seleciona)24 b(a)g(string)g(de)g(p)r(esquisa)g(an)n(terior)
-268 b Ff(M-p)-450 3557 y Fh(seleciona)24 b(a)g(string)g(seguin)n(te)h
-(de)f(p)r(esquisa)260 b Ff(M-n)-450 3626 y Fh(sai)23
-b(da)h(busca)h(incremen)n(tal)681 b Ff(RET)-450 3696
-y Fh(desfaz)24 b(o)g(efeito)g(do)i(\023)-37 b(ultimo)24
-b(caracter)413 b Ff(DEL)-450 3766 y Fh(encerra)24 b(a)g(busca)962
-b Ff(C-g)-450 3864 y Fh(Use)28 b Ff(C-s)g Fh(ou)h Ff(C-r)f
-Fh(no)n(v)l(amen)n(te)i(para)f(rep)r(etir)e(a)h(busca.)45
-b Ff(C-g)29 b Fh(cancela)-450 3934 y(ap)r(enas)c(o)e(que)i(ainda)f(n~)
--35 b(ao)24 b(foi)f(feito.)-358 4131 y Fd(c)-375 4133
-y Fc(\015)e Fd(2007)h(F)-5 b(ree)22 b(Soft)n(w)n(are)g(F)-5
-b(oundation,)20 b(Inc.)27 b(P)n(ermissions)21 b(on)g(bac)n(k.)28
-b(v2.3)1860 -364 y Fg(Mo)m(vimen)m(ta\030)-51 b(c)o(~)-56
-b(ao)1860 -208 y Fe(a)n(v)-5 b(an\030)-36 b(car)1124
-b(tr)o(\023)-40 b(as)109 b(fren)n(te)1860 -139 y Fh(um)24
-b(caracter)1027 b Ff(C-b)142 b(C-f)1860 -69 y Fh(uma)24
-b(pala)n(vra)1011 b Ff(M-b)142 b(M-f)1860 1 y Fh(uma)24
-b(linha)1085 b Ff(C-p)142 b(C-n)1860 71 y Fh(para)24
-b(in)-8 b(\023)-27 b(\020cio)23 b(ou)h(\014m)g(de)g(linha)579
-b Ff(C-a)142 b(C-e)1860 140 y Fh(sen)n(ten\030)-31 b(ca)1136
-b Ff(M-a)142 b(M-e)1860 210 y Fh(par\023)-35 b(agrafo)1103
-b Ff(M-{)142 b(M-})1860 280 y Fh(p\023)-35 b(agina)1192
-b Ff(C-x)36 b([)71 b(C-x)36 b(])1860 349 y Fh(sexp)1260
-b Ff(C-M-b)72 b(C-M-f)1860 419 y Fh(fun\030)-31 b(c~)c(ao)1194
-b Ff(C-M-a)72 b(C-M-e)1860 489 y Fh(para)24 b(in)-8 b(\023)-27
-b(\020cio)23 b(ou)h(\014m)g(do)g(bu\013er)550 b Ff(M-<)142
-b(M->)1860 587 y Fh(rolar)23 b(para)g(pr\023)-35 b(oxima)24
-b(tela)721 b Ff(C-v)1860 657 y Fh(rolar)23 b(para)g(tela)i(an)n(terior)
-732 b Ff(M-v)1860 727 y Fh(rolar)23 b(para)g(esquerda)843
-b Ff(C-x)36 b(<)1860 796 y Fh(rolar)23 b(para)g(direita)911
-b Ff(C-x)36 b(>)1860 866 y Fh(rolar)23 b(a)h(linha)f(corren)n(te)i
-(para)e(o)h(cen)n(tro)h(da)f(tela)119 b Ff(C-u)36 b(C-l)1860
-1069 y Fg(Cortando)h(e)h(Apagando)1860 1225 y Fe(en)n(tidade)27
-b(a)f(cortar)642 b(tr)o(\023)-40 b(as)250 b(fren)n(te)1860
-1295 y Fh(caracter)25 b(\(apaga,)g(n~)-35 b(ao)24 b(corta\))416
-b Ff(DEL)283 b(C-d)1860 1364 y Fh(pala)n(vra)1027 b Ff(M-DEL)213
-b(M-d)1860 1434 y Fh(linha)23 b(\(at)n(\023)-33 b(e)25
-b(o)f(\014nal\))714 b Ff(M-0)36 b(C-k)142 b(C-k)1860
-1504 y Fh(sen)n(ten\030)-31 b(ca)995 b Ff(C-x)36 b(DEL)142
-b(M-k)1860 1574 y Fh(sexp)1119 b Ff(M--)36 b(C-M-k)72
-b(C-M-k)1860 1672 y Fh(corta)24 b Fe(regi)o(~)-40 b(ao)1044
-b Ff(C-w)1860 1742 y Fh(copia)24 b(a)g Fe(regi)o(~)-40
-b(ao)981 b Ff(M-w)1860 1811 y Fh(cortar)24 b(at)n(\023)-33
-b(e)25 b(a)e(pr\023)-35 b(oxima)24 b(o)r(corr)n(^)-33
-b(encia)24 b(de)g Fb(char)211 b Ff(M-z)36 b Fb(char)1860
-1910 y Fh(colar)24 b(a)h(\023)-37 b(ultima)24 b(coisa)g(cortada)582
-b Ff(C-y)1860 1979 y Fh(substitui)24 b(a)i(\023)-37 b(ult.)31
-b(colagem)24 b(p)r(ela)g(c\023)-35 b(opia)25 b(an)n(terior)106
-b Ff(M-y)1860 2184 y Fg(Marcando)1860 2340 y Fh(p)r(osiciona)24
-b(a)g(marca)g(aqui)730 b Ff(C-@)36 b Fh(or)f Ff(C-SPC)1860
-2410 y Fh(tro)r(ca)24 b(a)g(marca)g(p)r(elo)g(p)r(on)n(to)h(e)f(vice-v)
-n(ersa)281 b Ff(C-x)36 b(C-x)1860 2508 y Fh(colo)r(ca)25
-b(a)e(marca)h Fb(ar)l(g)30 b Fe(pala)n(vras)22 b Fh(adian)n(te)290
-b Ff(M-@)1860 2578 y Fh(marca)24 b(o)g Fe(par)o(\023)-40
-b(agrafo)829 b Ff(M-h)1860 2647 y Fh(marca)24 b(a)g Fe(p)o(\023)-40
-b(agina)935 b Ff(C-x)36 b(C-p)1860 2717 y Fh(marca)24
-b(a)g Fe(sexp)1012 b Ff(C-M-@)1860 2787 y Fh(marca)24
-b(uma)g Fe(fun\030)-36 b(c)o(~)c(ao)839 b Ff(C-M-h)1860
-2857 y Fh(marca)24 b(to)r(do)g Fe(bu\013er)858 b Ff(C-x)36
-b(h)1860 3041 y Fg(Busca)i(e)g(Substitui\030)-51 b(c)o(~)-56
-b(ao)1860 3196 y Fh(Substitui)24 b(in)n(terativ)l(amen)n(te)i(uma)e
-(string)300 b Ff(M-\045)1860 3266 y Fh(usando)25 b(express~)-35
-b(ao)24 b(regular)301 b Ff(M-x)36 b(query-replace-regexp)1860
-3364 y Fh(Resp)r(ostas)24 b(v\023)-35 b(alidas)24 b(no)g(mo)r(do)g(de)g
-(busca)h(e)f(substitui\030)-31 b(c~)c(ao)1860 3463 y
-Fe(substitui)23 b Fh(esta,)h(e)g(prossegue)594 b Ff(SPC)1860
-3533 y Fh(substitui)24 b(esta)g(e)g(en)n(trada)h(e)f(n~)-35
-b(ao)24 b(a)n(v)l(an\030)-31 b(ca)298 b Ff(,)1860 3602
-y Fe(pula)23 b Fh(para)h(a)g(pr\023)-35 b(oxima)23 b(sem)h(substituir)
-331 b Ff(DEL)1860 3672 y Fh(substitui)24 b(em)g(to)r(do)g(o)g(texto)h
-(restan)n(te)388 b Ff(!)1860 3742 y Fe(v)n(olta)22 b
-Fh(para)h(a)h(pala)n(vra)g(an)n(terior)530 b Ff(^)1860
-3811 y Fe(encerra)1177 b Ff(RET)1860 3881 y Fh(en)n(tra)24
-b(na)g(edi\030)-31 b(c~)c(ao)25 b(recursiv)l(a)f(\()p
-Ff(C-M-c)h Fh(para)f(sair\))121 b Ff(C-r)4241 -364 y
-Fg(M)s(\023)-60 b(ultiplas)36 b(Janelas)4241 -223 y Fh(Quando)23
-b(forem)e(mostrados)i(2)g(comandos,)g(o)f(segundo)i(tem)f(comp)r(or-)
-4241 -153 y(tamen)n(to)i(similar)d(para)i(frame.)4241
--59 y(elimina)f(to)r(das)h(outras)g(janelas)351 b Ff(C-x)36
-b(1)212 b(C-x)36 b(5)g(1)4241 11 y Fh(divide)23 b(a)h(janela,)g(acima)f
-(e)h(abaixo)261 b Ff(C-x)36 b(2)212 b(C-x)36 b(5)g(2)4241
-81 y Fh(elimina)23 b(esta)h(janela)640 b Ff(C-x)36 b(0)212
-b(C-x)36 b(5)g(0)4241 175 y Fh(divide)23 b(a)h(janela,)g(lado)f(a)h
-(lado)606 b Ff(C-x)36 b(3)4241 270 y Fh(rola)23 b(a)h(outra)g(janela)
-870 b Ff(C-M-v)4241 365 y Fh(lev)l(a)24 b(o)f(cursor)h(para)f(outra)i
-(janela)269 b Ff(C-x)36 b(o)212 b(C-x)36 b(5)g(o)4241
-434 y Fh(seleciona)24 b(um)g(bu\013er)f(em)h(outra)g(janela)113
-b Ff(C-x)36 b(4)g(b)141 b(C-x)36 b(5)g(b)4241 504 y Fh(mostra)23
-b(um)h(bu\013er)g(em)f(outra)i(janela)171 b Ff(C-x)36
-b(4)g(C-o)71 b(C-x)36 b(5)g(C-o)4241 574 y Fh(busca)24
-b(um)g(arquiv)n(o)f(em)h(outra)g(janela)160 b Ff(C-x)36
-b(4)g(f)141 b(C-x)36 b(5)g(f)4241 644 y Fh(busca)24 b(arquiv)n(o)g
-(\(ro\))g(em)g(outra)g(janela)140 b Ff(C-x)36 b(4)g(r)141
-b(C-x)36 b(5)g(r)4241 713 y Fh(executa)25 b(Dired)e(em)h(outra)g
-(janela)279 b Ff(C-x)36 b(4)g(d)141 b(C-x)36 b(5)g(d)4241
-783 y Fh(busca)24 b(tag)h(em)e(outra)h(janela)413 b Ff(C-x)36
-b(4)g(.)141 b(C-x)36 b(5)g(.)4241 878 y Fh(aumen)n(ta)25
-b(a)f(janela)f(na)h(v)n(ertical)563 b Ff(C-x)36 b(^)4241
-948 y Fh(estreita)24 b(a)g(janela)948 b Ff(C-x)36 b({)4241
-1017 y Fh(alarga)23 b(a)h(janela)988 b Ff(C-x)36 b(})4241
-1202 y Fg(F)-10 b(ormatando)4241 1343 y Fh(iden)n(ta)24
-b(a)g Fe(linha)f Fh(corren)n(te)h(\(mo)r(do\))473 b Ff(TAB)4241
-1413 y Fh(iden)n(ta)24 b(a)g Fe(regi)o(~)-40 b(ao)22
-b Fh(\(mo)r(do\))706 b Ff(C-M-\\)4241 1482 y Fh(iden)n(ta)24
-b(a)g Fe(sexp)g Fh(\(mo)r(do\))763 b Ff(C-M-q)4241 1552
-y Fh(iden)n(ta)24 b(regi~)-35 b(ao)24 b(rigidamen)n(te)g
-Fb(ar)l(g)30 b Fh(colunas)281 b Ff(C-x)36 b(TAB)4241
-1647 y Fh(insere)23 b(uma)h(no)n(v)l(a)g(linha)g(ap\023)-35
-b(os)24 b(o)g(p)r(on)n(to)347 b Ff(C-o)4241 1717 y Fh(mo)n(v)n(e)24
-b(o)g(restan)n(te)h(da)f(linha)f(para)h(baixo)329 b Ff(C-M-o)4241
-1786 y Fh(apaga)24 b(linhas)g(em)f(branco)i(em)e(torno)i(do)f(p)r(on)n
-(to)112 b Ff(C-x)36 b(C-o)4241 1856 y Fh(jun)n(ta)24
-b(a)g(linha)f(com)h(a)g(an)n(terior)572 b Ff(M-^)4241
-1926 y Fh(apaga)24 b(to)r(dos)h(brancos)f(em)g(torno)g(do)g(p)r(on)n
-(to)212 b Ff(M-\\)4241 1995 y Fh(insere)23 b(um)g(espa\030)-31
-b(co)25 b(em)f(branco)574 b Ff(M-SPC)4241 2090 y Fh(preenc)n(he)25
-b(o)f(par\023)-35 b(agrafo)797 b Ff(M-q)4241 2160 y Fh(de\014ne)24
-b(a)g(coluna)h(limite)e(de)h(preenc)n(himen)n(to)215
-b Ff(C-x)36 b(f)4241 2230 y Fh(de\014ne)24 b(um)g(pre\014xo)g(para)g
-(cada)h(linha)403 b Ff(C-x)36 b(.)4241 2324 y Fh(formata)23
-b(fon)n(te)1024 b Ff(M-o)4241 2490 y Fg(Mai)s(\023)-60
-b(usculas)36 b(e)i(Min)s(\023)-60 b(usculas)4241 2631
-y Fh(P)n(ala)n(vra)23 b(para)h(mai)r(\023)-37 b(usculas)688
-b Ff(M-u)4241 2701 y Fh(P)n(ala)n(vra)23 b(para)h(min)r(\023)-37
-b(usculas)684 b Ff(M-l)4241 2770 y Fh(Primeira)22 b(letra)h(mai)r(\023)
--37 b(uscula)24 b(\(capitalize\))312 b Ff(M-c)4241 2865
-y Fh(Regi~)-35 b(ao)24 b(para)g(mai)r(\023)-37 b(usculas)713
-b Ff(C-x)36 b(C-u)4241 2935 y Fh(Regi~)-35 b(ao)24 b(para)g(min)r(\023)
--37 b(usculas)709 b Ff(C-x)36 b(C-l)4241 3120 y Fg(O)i(Minibu\013er)
-4241 3260 y Fh(As)23 b(teclas)h(seguin)n(tes)h(s~)-35
-b(ao)24 b(de\014nidas)g(no)g(minibu\013er.)4241 3355
-y(complete)h(o)e(m\023)-35 b(aximo)24 b(p)r(ossi)-8 b(\023)-27
-b(\020v)n(el)557 b Ff(TAB)4241 3425 y Fh(complete)25
-b(at)n(\023)-33 b(e)24 b(uma)g(pala)n(vra)641 b Ff(SPC)4241
-3494 y Fh(complete)25 b(e)e(execute)861 b Ff(RET)4241
-3564 y Fh(mostre)23 b(as)h(op\030)-31 b(c~)c(oes)25 b(para)f(completar)
-432 b Ff(?)4241 3634 y Fh(busca)24 b(a)g(en)n(trada)h(an)n(terior)e(no)
-h(minibu\013er)250 b Ff(M-p)4241 3704 y Fh(busca)25 b(a)h(pr\023)-35
-b(oxima)25 b(en)n(trada)h(no)g(minibu\013er)e(ou)i(o)4241
-3773 y(default)5681 3704 y Ff(M-n)4241 3826 y Fh(busca)e(regexp)g(no)g
-(hist\023)-35 b(orico)24 b(para)g(tr\023)-35 b(as)355
-b Ff(M-r)4241 3896 y Fh(busca)24 b(regexp)g(no)g(hist\023)-35
-b(orico)24 b(para)g(fren)n(te)297 b Ff(M-s)4241 3966
-y Fh(encerra)24 b(o)f(comando)862 b Ff(C-g)4241 4060
-y Fh(T)-6 b(ecle)22 b Ff(C-x)37 b(ESC)f(ESC)23 b Fh(para)f(editar)g(e)h
-(rep)r(etir)f(o)i(\023)-37 b(ultimo)22 b(comando)i(uti-)4241
-4130 y(lizado.)31 b(T)-6 b(ecle)24 b Ff(F10)h Fh(para)e(ativ)l(ar)h(o)g
-(men)n(u.)p eop end
-%%Page: 2 2
-TeXDict begin @landscape 2 1 bop -555 -364 a Fi(GNU)45
-b(Emacs:)62 b(Cart)o(~)-68 b(ao)45 b(de)i(Refer)m(^)-66
-b(encia)259 -266 y Fh(\(para)24 b(v)n(ers~)-35 b(ao)24
-b(22\))-450 -59 y Fg(Bu\013ers)-450 97 y Fh(seleciona)g(outro)h
-(bu\013er)779 b Ff(C-x)36 b(b)-450 166 y Fh(lista)23
-b(to)r(dos)i(bu\013ers)890 b Ff(C-x)36 b(C-b)-450 236
-y Fh(mata)24 b(um)g(bu\013er)960 b Ff(C-x)36 b(k)-450
-420 y Fg(T)-10 b(ransp)s(osi\030)-51 b(c)o(~)-56 b(ao)-450
-576 y Fh(transp~)-35 b(oe)25 b Fe(caracteres)795 b Ff(C-t)-450
-646 y Fh(transp~)-35 b(oe)25 b Fe(pala)n(vras)858 b Ff(M-t)-450
-715 y Fh(transp~)-35 b(oe)25 b Fe(linhas)945 b Ff(C-x)36
-b(C-t)-450 785 y Fh(transp~)-35 b(oe)25 b Fe(sexps)964
-b Ff(C-M-t)-450 988 y Fg(V)-10 b(eri\014ca\030)-51 b(c)o(~)-56
-b(ao)37 b(Ortogr)o(\023)-56 b(a\014ca)-450 1144 y Fh(v)n(eri\014ca)24
-b(a)g(pala)n(vra)g(corren)n(te)639 b Ff(M-$)-450 1213
-y Fh(v)n(eri\014ca)24 b(to)r(das)h(pala)n(vras)e(de)i(uma)e(regi~)-35
-b(ao)152 b Ff(M-x)36 b(ispell-region)-450 1283 y Fh(v)n(eri\014ca)24
-b(to)r(do)h(o)f(bu\013er)656 b Ff(M-x)36 b(ispell-buffer)-450
-1487 y Fg(T)-10 b(ags)-450 1643 y Fh(busca)24 b(uma)g(tag)h(\(uma)f
-(de\014ni\030)-31 b(c~)c(ao\))485 b Ff(M-.)-450 1713
-y Fh(encon)n(tra)25 b(a)f(pr\023)-35 b(oxima)23 b(o)r(corr)n(^)-33
-b(encia)25 b(da)f(tag)282 b Ff(C-u)36 b(M-.)-450 1782
-y Fh(esp)r(eci\014ca)25 b(um)f(no)n(v)n(o)g(arquiv)n(o)g(de)g(tags)142
-b Ff(M-x)36 b(visit-tags-table)-450 1881 y Fh(busca)24
-b(p)r(or)g(regexp)g(em)g(to)r(dos)h(arquiv)n(os)188 b
-Ff(M-x)36 b(tags-search)-450 1950 y Fh(busca)24 b(e)g(subst.)32
-b(em)23 b(to)r(dos)i(arquiv)n(os)119 b Ff(M-x)36 b(tags-query-replace)
--450 2020 y Fh(con)n(tin)n(ua)c(a)h(\023)-37 b(ultima)31
-b(busca)h(ou)f(busca)h(e)f(substi-)-450 2090 y(tui\030)-31
-b(c~)c(ao)990 2020 y Ff(M-,)-450 2291 y Fg(Shells)-450
-2447 y Fh(executa)26 b(um)d(comando)i(do)f(shell)528
-b Ff(M-!)-450 2517 y Fh(executa)26 b(um)d(comando)i(do)f(shell)f(na)h
-(regi~)-35 b(ao)223 b Ff(M-|)-450 2586 y Fh(\014ltra)24
-b(uma)f(regi~)-35 b(ao)24 b(p)r(or)g(um)f(comando)i(do)f(shell)120
-b Ff(C-u)36 b(M-|)-450 2656 y Fh(inicia)23 b(um)h(shell)f(na)h(janela)g
-Ff(*shell*)420 b(M-x)36 b(shell)-450 2859 y Fg(Ret)o(^)-56
-b(angulos)-450 3015 y Fh(copia)24 b(o)g(ret^)-35 b(angulo)25
-b(para)f(o)f(registrador)330 b Ff(C-x)36 b(r)g(r)-450
-3085 y Fh(corta)24 b(o)g(ret^)-35 b(angulo)912 b Ff(C-x)36
-b(r)g(k)-450 3154 y Fh(cola)24 b(o)g(ret^)-35 b(angulo)947
-b Ff(C-x)36 b(r)g(y)-450 3224 y Fh(abre)24 b(o)g(ret^)-35
-b(angulo,)24 b(mo)n(v)n(e)g(o)g(texto)h(para)f(direita)107
-b Ff(C-x)36 b(r)g(o)-450 3294 y Fh(tro)r(ca)24 b(p)r(or)g(espa\030)-31
-b(cos)25 b(o)e(con)n(te)r(\023)-37 b(udo)26 b(do)e(ret^)-35
-b(angulo)133 b Ff(C-x)36 b(r)g(c)-450 3363 y Fh(an)n(tep~)-35
-b(oe)26 b(uma)e(linha)f(a)h(string)610 b Ff(C-x)36 b(r)g(t)-450
-3567 y Fg(Abreviaturas)-450 3722 y Fh(adiciona)24 b(uma)g(abreviatura)h
-(global)442 b Ff(C-x)36 b(a)g(g)-450 3792 y Fh(adiciona)24
-b(abreviatura)h(ao)f(mo)r(do)g(lo)r(cal)352 b Ff(C-x)36
-b(a)g(l)-450 3862 y Fh(adiciona)24 b(globalmen)n(te)h(expans~)-35
-b(ao)26 b(de)e(abrev.)179 b Ff(C-x)36 b(a)g(i)f(g)-450
-3931 y Fh(adiciona)24 b(lo)r(calmen)n(te)h(expans~)-35
-b(ao)25 b(de)g(abrev.)220 b Ff(C-x)36 b(a)g(i)f(l)-450
-4001 y Fh(explicitamen)n(te)25 b(expande)h(uma)e(abrev)366
-b Ff(C-x)36 b(a)g(e)-450 4099 y Fh(completa)25 b(com)f(base)g(em)g
-(pala)n(vras)g(an)n(teriores)139 b Ff(M-/)1860 -364 y
-Fg(Express~)-57 b(oes)39 b(Regulares)1860 -208 y Fh(qualquer)24
-b(caracter)h(exceto)g(no)n(v)l(a)g(linha)344 b Ff(.)71
-b Fh(\(dot\))1860 -139 y(zero)24 b(ou)g(mais)f(rep)r(eti\030)-31
-b(c~)c(oes)725 b Ff(*)1860 -69 y Fh(uma)24 b(ou)g(mais)f(rep)r(eti\030)
--31 b(c~)c(oes)717 b Ff(+)1860 1 y Fh(zero)24 b(ou)g(uma)g(rep)r
-(eti\030)-31 b(c~)c(ao)757 b Ff(?)1860 71 y Fh(protege)25
-b(o)f(caracter)g(esp)r(ecial)h Fb(c)565 b Ff(\\)p Fb(c)1860
-140 y Fh(\(\\or"\))1253 b Ff(\\|)1860 210 y Fh(agrupamen)n(to)1040
-b Ff(\\\()36 b Fa(:)11 b(:)h(:)34 b Ff(\\\))1860 280
-y Fh(mesmo)24 b(texto)h(que)f Fb(n)5 b Fh(-)n(\023)-33
-b(esimo)24 b(grup)r(o)447 b Ff(\\)p Fb(n)1860 349 y Fh(quebra)24
-b(de)g(pala)n(vra)886 b Ff(\\b)1860 419 y Fh(sem)24 b(quebra)g(de)g
-(pala)n(vra)744 b Ff(\\B)1860 518 y Fe(en)n(tidade)707
-b(casa)26 b(in)-9 b(\023)-32 b(\020cio)70 b(casa)26 b(\014m)1860
-587 y Fh(linha)856 b Ff(^)400 b($)1860 657 y Fh(pala)n(vra)782
-b Ff(\\<)365 b(\\>)1860 727 y Fh(bu\013er)831 b Ff(\\`)365
-b(\\')1860 796 y Fe(classe)27 b(de)g(caracteres)315 b(casa)26
-b(esses)91 b(casa)26 b(os)h(outros)1860 866 y Fh(conjun)n(to)e(expl)-8
-b(\023)-27 b(\020cito)459 b Ff([)35 b Fa(:)12 b(:)f(:)35
-b Ff(])212 b([^)36 b Fa(:)11 b(:)g(:)35 b Ff(])1860 936
-y Fh(caracter)25 b(de)f(sin)n(taxe)g(de)g(pala)n(vra)84
-b Ff(\\w)365 b(\\W)1860 1006 y Fh(caracter)25 b(de)f(sin)n(taxe)g(de)g
-Fb(c)278 b Ff(\\s)p Fb(c)332 b Ff(\\S)p Fb(c)1860 1201
-y Fg(Conjun)m(tos)37 b(de)g(Carac.)50 b(In)m(ternacionais)1860
-1357 y Fh(esp)r(eci\014ca)25 b(uma)f(l)-8 b(\023)-27
-b(\020ngua)24 b(principal)488 b Ff(C-x)36 b(RET)g(l)1860
-1427 y Fh(mostra)24 b(to)r(dos)g(m)n(\023)-33 b(eto)r(dos)25
-b(de)f(inser\030)-31 b(c~)c(ao)96 b Ff(M-x)36 b(list-input-methods)1860
-1496 y Fh(habilita/desabilita)24 b(um)g(m)n(\023)-33
-b(eto)r(do)25 b(de)f(inser\030)-31 b(c~)c(ao)136 b Ff(C-\\)1860
-1566 y Fh(determina)24 b(o)g(sistema)g(de)g(co)r(di\014ca\030)-31
-b(c~)c(ao)369 b Ff(C-x)36 b(RET)g(c)1860 1636 y Fh(mostra)24
-b(sistemas)f(de)h(co)r(di\014ca\030)-31 b(c~)c(ao)166
-b Ff(M-x)37 b(list-coding-systems)1860 1706 y Fh(escolhe)25
-b(a)e(co)r(di\014ca\030)-31 b(c~)c(ao)26 b(preferida)143
-b Ff(M-x)36 b(prefer-coding-system)1860 1911 y Fg(Info)1860
-2066 y Fh(en)n(tra)24 b(no)g(leitor)g(de)g(Info)760 b
-Ff(C-h)36 b(i)1860 2136 y Fh(busca)24 b(fun\030)-31 b(c~)c(ao)25
-b(ou)f(arquiv)n(o)g(no)g(Info)448 b Ff(C-h)36 b(S)1860
-2234 y Fh(Mo)n(vimen)n(ta\030)-31 b(c~)c(ao)25 b(em)f(um)g(no)r(do:)
-1931 2333 y(rola)f(para)h(fren)n(te)891 b Ff(SPC)1931
-2402 y Fh(rola)23 b(para)h(tr\023)-35 b(as)949 b Ff(DEL)1931
-2472 y Fh(in)-8 b(\023)-27 b(\020cio)23 b(do)h(no)r(do)933
-b Ff(.)71 b Fh(\(dot\))1860 2570 y(Mo)n(vimen)n(ta\030)-31
-b(c~)c(ao)25 b(en)n(tre)g(no)r(dos:)1931 2669 y Fe(pr\023)-41
-b(oximo)22 b Fh(no)r(do)902 b Ff(n)1931 2738 y Fh(no)r(do)24
-b Fe(an)n(terior)911 b Ff(p)1931 2808 y Fh(mo)n(v)n(er)23
-b(cima)h Fe(cima)824 b Ff(u)1931 2878 y Fh(seleciona)24
-b(item)g(do)g(men)n(u)g(p)r(elo)g(nome)311 b Ff(m)1931
-2948 y Fh(seleciona)24 b Fb(n)5 b Fh(-)n(\023)-33 b(esimo)23
-b(item)h(do)g(men)n(u)385 b Fb(n)1931 3017 y Fh(segue)24
-b(refer)n(^)-33 b(encia)24 b(cruzada)h(\(retorna)f(com)g
-Ff(l)p Fh(\))113 b Ff(f)1931 3087 y Fh(retorna)26 b(\023)-37
-b(ultimo)23 b(no)r(do)i(visitado)483 b Ff(l)1931 3157
-y Fh(retorna)24 b(ao)g(diret\023)-35 b(orio)23 b(de)h(no)r(dos)470
-b Ff(d)1931 3227 y Fh(ir)22 b(para)i(o)g(top)r(o)h(do)f(arquiv)n(o)f
-(Info)445 b Ff(t)1931 3296 y Fh(ir)22 b(para)i(qualquer)g(no)r(do)h(p)r
-(or)e(nome)382 b Ff(g)1860 3395 y Fh(Outros:)1931 3493
-y(executar)25 b Fe(tutorial)c Fh(do)j(Info)575 b Ff(h)1931
-3563 y Fh(busca)24 b(p)r(elo)g(assun)n(to)h(no)16 b(\023)-27
-b(\020ndice)490 b Ff(i)1931 3633 y Fh(busca)24 b(p)r(or)f(express~)-35
-b(ao)25 b(regular)513 b Ff(s)1931 3702 y Fe(sair)22 b
-Fh(Info)1097 b Ff(q)4170 -364 y Fg(Registrador)4170 -208
-y Fh(salv)l(a)24 b(regi~)-35 b(ao)24 b(em)f(um)h(registrador)488
-b Ff(C-x)36 b(r)g(s)4170 -139 y Fh(insere)23 b(o)h(con)n(te)r(\023)-37
-b(udo)26 b(do)e(registrador)f(no)h(bu\013er)150 b Ff(C-x)36
-b(r)g(i)4170 -40 y Fh(salv)l(a)24 b(v)l(alor)f(do)h(p)r(on)n(to)h(no)f
-(registrador)361 b Ff(C-x)36 b(r)g(SPC)4170 29 y Fh(salta)24
-b(para)g(o)g(p)r(on)n(to)h(salv)n(o)e(no)h(registrador)243
-b Ff(C-x)36 b(r)g(j)4170 234 y Fg(Macros)i(de)g(T)-10
-b(eclado)4170 390 y Fe(inicia)22 b Fh(a)i(de\014ni\030)-31
-b(c~)c(ao)25 b(de)f(uma)g(macro)436 b Ff(C-x)36 b(\()4170
-460 y Fe(encerra)23 b Fh(a)h(de\014ni\030)-31 b(c~)c(ao)25
-b(de)f(uma)g(macro)362 b Ff(C-x)36 b(\))4170 529 y Fe(executa)24
-b Fh(a)h(\023)-37 b(ultima)24 b(macro)g(de\014nida)410
-b Ff(C-x)36 b(e)4170 599 y Fh(adiciona)24 b(a)i(\023)-37
-b(ultima)24 b(macro)f(de\014nida)426 b Ff(C-u)36 b(C-x)g(\()4170
-669 y Fh(nomeia)24 b(a)i(\023)-37 b(ultima)23 b(macro)h(de\014nida)129
-b Ff(M-x)37 b(name-last-kbd-macro)4170 739 y Fh(insere)23
-b(uma)h(de\014ni\030)-31 b(c~)c(ao)25 b(em)f(Lisp)318
-b Ff(M-x)36 b(insert-kbd-macro)4170 942 y Fg(Lidando)h(com)i(Emacs)f
-(Lisp)4170 1097 y Fh(a)n(v)l(alia)24 b Fe(sexp)g Fh(an)n(tes)h(do)f(p)r
-(on)n(to)603 b Ff(C-x)36 b(C-e)4170 1167 y Fh(a)n(v)l(alia)24
-b(a)g Fe(defun)g Fh(corren)n(te)712 b Ff(C-M-x)4170 1237
-y Fh(a)n(v)l(alia)24 b(a)g Fe(regi)o(~)-40 b(ao)824 b
-Ff(M-x)36 b(eval-region)4170 1306 y Fh(l)n(^)-33 b(e)23
-b(e)h(a)n(v)l(alia)g(o)g(minibu\013er)736 b Ff(M-:)4170
-1376 y Fh(carrega)24 b(do)g(diret\023)-35 b(orio)23 b(padr~)-35
-b(ao)25 b(do)f(sistema)106 b Ff(M-x)36 b(load-library)4170
-1581 y Fg(P)m(ersonaliza\030)-51 b(c)o(~)-56 b(ao)37
-b(Simples)4170 1737 y Fh(p)r(ersonaliza)24 b(v)l(ari\023)-35
-b(av)n(eis)24 b(e)g(fon)n(tes)408 b Ff(M-x)36 b(customize)4170
-1835 y Fh(F)-6 b(azendo)25 b(teclas)g(de)f(atalho)h(globais)e(em)h
-(Emacs)g(Lisp)f(\(exemplos\):)4170 1933 y Ff(\(global-set-key)40
-b("\\C-cg")d('goto-line\))4170 2003 y(\(global-set-key)j("\\M-#")d
-('query-replace-regexp\))4170 2208 y Fg(Escrev)m(endo)h(Comandos)4170
-2364 y Ff(\(defun)f Fb(c)l(ommand-name)43 b Ff(\()p Fb(ar)l(gs)5
-b Ff(\))4241 2433 y(")p Fb(do)l(cumentation)g Ff(")38
-b(\(interactive)g(")p Fb(template)5 b Ff("\))4241 2503
-y Fb(b)l(o)l(dy)h Ff(\))4170 2601 y Fh(Um)23 b(exemplo:)4170
-2700 y Ff(\(defun)37 b(this-line-to-top-of-win)q(dow)42
-b(\(line\))4241 2769 y("Reposition)c(line)e(point)h(is)f(on)g(to)g(top)
-g(of)g(window.)4170 2839 y(With)g(ARG,)h(put)f(point)h(on)f(line)g
-(ARG.")4241 2909 y(\(interactive)i("P"\))4241 2979 y(\(recenter)f(\(if)
-g(\(null)f(line\))4735 3048 y(0)4664 3118 y(\(prefix-numeric-value)41
-b(line\)\)\)\))4170 3216 y Fh(A)26 b(esp)r(eci\014ca\030)-31
-b(c~)c(ao)28 b Ff(interactive)h Fh(explica)e(como)f(ler)g(in)n(terativ)
-l(amen)n(te)4170 3286 y(argumen)n(tos.)32 b(T)-6 b(ecle)25
-b Ff(C-h)36 b(f)f(interactive)27 b Fh(para)d(mais)f(detalhes.)4463
-3550 y Fd(Cop)n(yrigh)n(t)4766 3548 y(c)4749 3550 y Fc(\015)e
-Fd(2007)h(F)-5 b(ree)22 b(Soft)n(w)n(are)h(F)-5 b(oundation,)20
-b(Inc.)4627 3606 y(v2.3)i(for)f(GNU)f(Emacs)h(v)n(ersion)h(22,)f(2006)
-4760 3661 y(designed)f(b)n(y)h(Stephen)f(Gildea)4170
-3746 y(P)n(ermission)28 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e
-(distribute)f(copies)j(of)f(this)f(card)h(pro-)4170 3802
-y(vided)23 b(the)h(cop)n(yrigh)n(t)h(notice)g(and)f(this)f(p)r
-(ermission)h(notice)g(are)h(preserv)n(ed)g(on)4170 3857
-y(all)20 b(copies.)4170 3942 y(F)-5 b(or)21 b(copies)g(of)g(the)g(GNU)e
-(Emacs)i(man)n(ual,)f(write)h(to)g(the)f(F)-5 b(ree)22
-b(Soft)n(w)n(are)g(F)-5 b(oun-)4170 3998 y(dation,)29
-b(Inc.,)g(51)g(F)-5 b(ranklin)28 b(Street,)h(Fifth)f(Flo)r(or,)h
-(Boston,)i(MA)d(02110-1301)4170 4053 y(USA)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/refcard.ps b/etc/refcard.ps
deleted file mode 100644
index 7967ea4d946..00000000000
--- a/etc/refcard.ps
+++ /dev/null
@@ -1,2518 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.96 Copyright 2005 Radical Eye Software
-%%Title: refcard.dvi
-%%CreationDate: Wed Aug 22 13:09:55 2007
-%%Pages: 2
-%%PageOrder: Ascend
-%%Orientation: Landscape
-%%BoundingBox: 0 0 612 792
-%%DocumentFonts: CMBX10 CMR8 CMTT8 CMBX8 CMR6 CMSY6 CMTI8 CMMI8
-%%DocumentPaperSizes: Letter
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips -t landscape refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.08.22:1309
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI8
-%!PS-AdobeFont-1.1: CMMI8 1.100
-%%CreationDate: 1996 Jul 23 07:53:54
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-24 -250 1110 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
-85B385124C2B6534F3CD1866AF92009D93B97F763AA3D16684AA65F029E776DA
-3BFB75EDD46D562E6A284DB4F2FDBF7CDE7C1F3772CD7B6FD372842A0E07E3EF
-68A98AB9278ADC2D35891543F57ED6DCFE8923368D556F1A8B3E35863112F409
-FBE67FC270328312BAA43A9A372C510717B50AAB01A1E02A9982113E2D7C601C
-B0BDA1C0E081E546A97647B74EE5194C57ACD62502B329FED4D966BDEB4028F0
-F082EDD5DFC8387653D620E9E73FDCE3C155347D5929C3A24D6121AEA46BBF3A
-B1C8A4793FB7F21C84400912C27D9AB0845537103553BF8F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTI8
-%!PS-AdobeFont-1.1: CMTI8 1.0
-%%CreationDate: 1991 Aug 18 21:07:42
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTI8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMTI8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-readonly def
-/FontBBox{-35 -250 1190 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
-525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
-F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
-84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
-0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
-06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
-5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
-D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
-93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
-FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
-E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
-46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
-8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
-4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
-1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
-9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
-BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
-09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
-3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
-E8929A4813956AAB24BE7C20FCF9196E8E2F30816FE2279CE3E6067667A39E44
-488D58BFD17606AE885FA06F478D359A6ECF5564C095FE0E5038425D8B152750
-F72F41B3D1E7420EE91CF4A9ED5BBE8C2275624AE257D2BDF5752E803B426F40
-924CB5C29460BC09EC84F3F3A95F6900836F0ECCF6A7BB85A3F8D650017E5FE0
-503A73644EC6C6B0254F0259F8DD4AB3945950974CEB34521881A2506E76EBB3
-7DBA7812E0186DE2C0AD3E6D42BCA320014368DD738408C54AE2CAAA9C05612B
-E7F33218F2FECCE8DB2E4B3A3BCD9D8D0BAD7EDDCCAE45F6A15FD2B8ED263E45
-14AF0CC7B58EF52D5FE73023EE9DAB8249D1EB3B795C7B42BFD2A2852D2D16BF
-CD71056F412571F41CF7EE80AA916EA4FF1630B1E226F474CC3195006043B1AB
-915DA8A9484B930F1F00028287EA3802DA3C3F99961952E04B736CDEC7768307
-879B4D2D553518FBBA727266F94C3A607FFD5D85CD0FB802CA51E6A3792C80F9
-A637D47C13A787F5D9C5BAC24E843DA198B7CC898AD786DEAC0BA9B6EF955ECC
-72DA3A8CCCF7F3B69597A2F868AE359737A9714AE6D81989B4152DA33095DAB8
-5759080AA156DF1F3767120018CE81D296D813DC52786586CF3F38EE3CE181D3
-9D79439EE13D4E5799E03338E93315C3F6BA8ADC731A0D8282637E524C1E9736
-29C594C6F19B49C859D7CCA98148215F7E6943637797641D44DC9FB8FA403FCA
-BD581E477C7BBDBC84048141760B4EE0D181D585C519D02DEB7D1C650BB49874
-A75E95E6A17D8024346AF3288A32A7EDFFAE15BACD436CC76850F2EAC7EFF565
-C4273160FC5DC7434DB94BFA01D1648421FCFEF66D786CFF60F0031B649B6F14
-E9139B27185E6E9A70E439AA8D68C6535A42634FFDA55DE86BDEDDF3D6B73015
-37C7437A96CDAC620A29942E834F714D82774AED0A83771A152EAC0CC043CB09
-02574AFC4CA006FC0D24C3DAAF4D681CC1D2D7870F273773171A4977AD05A082
-0DF3F50C8A36D7D8AA96E82387AAFB48D048CFAE2CBAA88F1865B84CFBBC1731
-A212A44EB98265A8D4A8C118E038A0C3503B27D8B58846C4F3E8112C8B05A41A
-9F8B0E1513528F5D7E509EE847F7224AA06819954974F8065AF49F21840E972D
-C1B028B541BA1364045E814A9F8FB299B6B62CA150245D92588056992FE6D71B
-FB16F2B42A3DE425B302051FCC4A2AA76F6146BAA385614913D2B11191CA6A09
-BAE8567DCAC342D013C7830A0F03D848397110F021C63C9D6AFA90ABBC2DE4C9
-69EDFEE42C028640F9784E8CA11B83B4E7AB58F8335FA294DD68BA87FFFCC743
-67239D7FF1C54B725D53581832F5307FF1995D8273EBA54372AC82B7D5EC5773
-8F52B55255502008E0EDA0646D4D71137D822A57C0E9E05F3D61B91436B5FFE5
-CD90CABEA89420F4ADD844733B9B0F0C72688B9184A2EF69966411DF2B23A25A
-11F009C6F23E452854B77AA33129C531C2C7A8666D550A83CBA6F251CB016F0C
-940EC74FF62C721F3D854404F431DB39548F0785C5140A9D406C06306CBB0C99
-B7AA0E4680D8DE074B369A7481F0C12BCEDB787A1A9E4C71C869F5022447E317
-E6B851B8D89144BEE028D2352745CB0C081A7E806482F74E7EDDB5F1601A58D9
-EC5B92F7DAD1B462B0EB9DF22604BB2D617AC6056E723110CEBACFB0F6ADFC92
-F64C98F9910F91A8C4B39EF508A1AA01656C41247E1E8280A97089C515A1792B
-509D2DBD3C5B6972F6829B60135247B75DFA7C067675B7010FB2F116B5009B12
-1F139A8A3E25FF52BE00D9C4AE67496958CA3D1D4568218542B77C865056E45A
-0A07947C4E7D16D24E07A77ED01F10226CBBC21E0DF75293CED54214149619A2
-4A591F3F99EB14032AE840BEC7313CF1F24250BD8D6BDDBE85883D35D6907C77
-FCF01A7E8DAA9BF8E47DA3225623B645891455874BA99ABF9AC9CFABC083127E
-CA636C8673A1ECF967BABDABF1A569319A4E382E7C593CB954522CC9DF04BEA6
-57297331734B3959805B89F96DD23C38DC8CE17C7373EE5F7A9035557E40C310
-7D1DA91F87F0CF45E54518B549DDC5F91851E2899E9756A069CBAE8E63A42974
-299781A390072C7E59B9433F9D47111900DEF4E4F10913BAEE90794333454574
-37B7A46664522983EADBAF6155C6A8624CC7FF1A850313072EF5B066059CC840
-C4A1DA2BAC6DD27D3D3BC9653003D5B25405492BB64FE4A1C294F06492093093
-A4B0175F6DBFE6C4C28C310F71010F97035774250EE0468E54A7CCF54465C7FE
-7A70ADA08BB5B6A4AEBB3F60FA39FB810E6D7B1FBF169DEF45FD7E7EEC4B273E
-A11269ED5BC9F8250F8D29BCBB656105FF2D71FB624F7A67C899828D3A563491
-9CCE8EF268F2A8986577C3A752F91B650DC9717A89F76DBAC254DF1BC705308B
-2E4C7C55A152ED1AE945337B93E411B46DF56DD8F0942DD8403ED15FA515079C
-A1035F3C7A2648761792E241C6710503F7A6093FAD8BCA34C0378700928762E7
-FC371BDA7488C95F69518E1DB63068E740942234A79478DF18C5752490DF199F
-95C654423257DE301117F3C379DA5C90392A7BA173BA19BF2C35C9A0EE180098
-C228CED65FD5241B5DA3D318891994D363AE49E3B0FFDE091C82DB4BE7B240EB
-159050F74BD181337EE202011BC96EB74C68E8BBB26E46020355378E6EC2B9D8
-89DB7907378B83FDC294B134E69D5AC1B2CBC821420EE28CEE8681EA3EC902F8
-3E8503A833B675E21679D6C5B7041701FC553B95D2DB82987EB4A010C8DCD9A9
-C0FB4C048617716CEA638CE3A16C90E55DBF76408A71B3B7FB784820EC3971EF
-726DBE12A1098F350D9FF84E1846CD57B6DDAEF32C6B839644F57EE6B256090E
-C711154CB95AB2910587E15E3F16D402943157E9CBA2174BE93B820951499A42
-F797664141F9F2698166395DF7116293B6557266C7DA28E2FC1F8BDA4B00C07B
-6F7FE6AD4937A694EA423A2B90F9EBD30B8D3710E7E6D7BE15BA631E6991EE2B
-1A28A02C4CC51889C37702E57F13F1E54295D77148C7EBB6B006DD232EF94D83
-20FFCB794B221BDEB84DCD737D301A44B8414B4591BD1D184C85B09BC5E28A0D
-7DB0830419C1D92775DBFAD72F2D7E581EB08E516B0DE87BFF2DC167EBACE23B
-73A3E770832A7A22B28AD12CA07DD15D22FF5EE53C48C55CEE77BD2D429571F8
-9DC52FC92A2D4F7BEDC0F27C39E7BFBBE38721E56234E9AF5FF1EFC753C8E281
-4EAF702CA8F08D3407FEF7E177FDE6177F6604B47872CD9EC22A6644C5A78CDA
-FE3C51033C45BC1BE224F09EAF923B058E13ACDC61A0E7CB5C999DB0C8543BFC
-4D65815338F65AA12BDDFC1EF5A249270D84BF1377FA064F62F41787F3D875D3
-0E4EBD38E30D593389ED01180CA5AD540A89B31933BCEC4DEEA2CFA94C03FD0D
-290573BB3162C80FA9783A66AF33F11CD9437A7EE16812BBC32D80DC10057A97
-C83152905B954CBE464EF39D40056FF3047D9D57B9088A7FAD48E997B5096D20
-E21F9FF5858FC241EC16527F66DE8B403281A8FCA32AF1408D05387C3BFF79CF
-25C5E6EE231B17287ACC5643C94E54A6962CE33246F7D03060042B623CB80C2C
-2E2AC47CB431B64828D8D35426810074E1B98188A866406D24B8020D2082961A
-A4AA27528B60C098CC0F8D34FF1DC6C5A4836C028B2295A4D8281278264283A9
-ABE23AC0A2EC42562FFD6F5FAFA72C8A029F333C26D8CC5B972073019BFB320A
-966156DEF26E9AE303FB4E20EEC86A48468755EB228C5BDAB00714F96797F5D7
-E099755C8F80F0E3331B038527D5743345DDB65784D8234292AEB642C74D95AB
-8927727F73AF12F8B189BDA6BE8BE6A08333ED0E2F6F95CE8367174E0280565A
-97E1F70518E142D658D2335C2FF8C7C401322D6405D0964966EAC8341F34BB5D
-1C654BD9D3489E6F730BB646EDE9F8607F401C5DD1B310D7D422703F305ADDE4
-BC45DD88E798C4F4286B117962E210BB9EFDC968BEE0A9C3EB6B35D1C2E8E50F
-9B9A8D965B63255791A17BF7E7596DDB15B617B98A8E838DE92775EE9338421C
-9A4C9BF5B8E78E475E814EB117719239075BA70DC806DCEF05ACC948AEB8378F
-DBAFC9D998270678435EE7F8E262C2341B173AEE3F9A2EBC2C74CB158BE302D7
-A4FE57E744271A24F3714DF24DDC103687754CFC72ADDED342B5FD5CF9D13D98
-1A13712D09148EF593050E8099035C6B9AE8CFD59948E786E3EC4E1F426FA3A7
-9082E10E79CE44C2D9FA830113503944F8D23CDB9C27A3570907FEAEF76D3ED7
-C8E1F81DA7A51CF5B723F0E4C42E3ECAC298B3E1ACB9679A1250633C373805E5
-C9496CF87FA7A858656D4A663D3EE3218D9792CF705C361994B69461026D8CCC
-130FB9D34293701A137E393F5AE79DE677D13DF5AE9EDDC545496A8C5456A860
-B36397BCC78EF754B6965D22004B978B4A55409F73C44B9FF02801D524740B9C
-E4F45750CD7E45235F376CC2CDCD3BC1B8C7658F52A5EB185EFDB6A0884FF0AF
-1958FAA5FDF4595D6EDFE28FB5249A40BDE8BA11AB0E997E9876CA0A0CD05A5B
-A26F60316F61DBF6E65F43089BDA2D57F00EC72BA3666952E730B14C79FFADB5
-7448ACE6463BD29995D6F6F571BF3D0B426897E457BD30FE76D6CDD6151A94D3
-3D53801608A7E865A01A2FF3D915CAC2614DFDA0A931E009FD1CB63FCEFD0A3D
-B26711BE84286E389805941573E02841C8E653FD3131316E768E2D096E5BA648
-9F03F9825333B2DAC376A79850AC29CEABC8BB1E7D4E34F37D6E9F388124A9E1
-9981131FE0F6718FFC580E678C9D8C1AED790D0C0D78407050D5FF315E605C73
-A16D6868E5DE5E8C1F63A88E159CC44DC0BB3E5CEC35CCBB7493975DC55F52BB
-A33709E5AE3066894885728EE784142B492056EF876521DA69BE39FF4E2BB95E
-C60688678B37692CD40A8BCD585240B0AA809328CEC0F954F0D50DA10DF61A21
-EADE286E22F67227CA286D9A0512EC909DC28518994C6D6E207D4D00514B0EF9
-5DCDA5965D827642072E6DB4B23D1F6C3250081B4D8E66084AEFD663C5F26E7C
-E19A4F3C9A100FC4AADA76F9E4AD474D033819801F7444B51203366CC709AD98
-F62722F700E13DB42D80041014AFCA8D12B23B85BB2302AB944C437FE0FAADF3
-E86291BA50463C32C29FC7D8E4B5EFED49EC40947016D0846AC79E3776E62388
-372568D2AD0DAADAFECEFBC4F7E6A8B47C214A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR6
-%!PS-AdobeFont-1.1: CMR6 1.0
-%%CreationDate: 1991 Aug 20 16:39:02
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 12 /fi put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-readonly def
-/FontBBox{-20 -250 1193 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
-BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
-CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
-C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
-D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
-23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
-D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
-93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
-6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
-EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
-CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
-D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
-00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
-B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
-99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
-A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
-11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
-50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB600BF00E09
-8A98D1D031C430FAFDED5CFE3944C1EA9CBCA28220AA4043F389568D91C81D55
-79B07B0AB08B8C9A97E8A077E9470F009FF04CEA11DDB886852B1D8F4F8277C2
-89DB25E0B816FA5FFDE51F0BD931E82DB0A63D0A7E8EEEA61A6001419065BD7C
-C7CAE6304D67C8A9D17FA5EB6074BBB37E217394AC665BB5D62C18936FFA6416
-CA88B5EE8B4609D6DB1C0DDC3485435788AB81CD09EF2C4867AB76094199ABDC
-4C632AC625D9C171631AEB4A4597EB2C6154F21031DFA3D2421B200D98FB5BAC
-DCA2AC7EE4346880207ECD304FC1A8D1A4D89C07C3810B0966F23A82C6F2D0E0
-3C8B824D0AF596D91646C023A885F1AA7E1EBF78805984E2A9F3EA669717CFF0
-DAEACBB810476915178DCAD1DC9817927787AA1B01E700955982CE5B81636B98
-2F5C1559A47D262454C20C1C5A16365EF3D93072E09485C49DE40A0A8917B8EC
-EC2BAB34197089496C9C0D5E270BE99642D86C80EB8A4D3A1308CDB3D198CF44
-18043E5A4F6BB56C56ADD1A7F5F00E88CCCD3637DC402A10F5C9D4DB5C401029
-8C3ABE815A9A028661A1D41C9B6D22E6BFE2E9B7D50C045A2DE5553F4F483EC8
-9D6DDDE85816FDEF687938F1D8D51D2F3D895D34FACFDD36E8D6BA6A3205AC45
-78DC23BE6F9148792AC96F1C44DFB716FC883E63A26EDDC6EBABC759F1641FB8
-AF339E84052CF3CEC808E70F18AE25139CCF6143498CE992C7E645EE35A50BBD
-D3BDC9D5FA885C7F4B361F4E552C47D99F8CC0F56F0E856C2F51AD2B7296EF0E
-F7E1A964044DC9BEEBB67BDC830F6026EE80C8A0C7F3DE64086BEAB5947FEEFC
-EBAE229847E91B4E1377749F89687E1AA41494D17CFC65D65A8C5D9ADECD5309
-112006D7BE209A17B9C8C8708730BF56CF35458BB1AD7BF0D9BA86ED255961C0
-2D8D81478D5A094CCC6841624838ABEEA0AF72F1833D3BA07E3683282E501819
-7542BB0D87DFB741EACF875C838821B821F780540EC06631E3F09B4C3032C2B3
-6E2A414204120E045394417E77813028354802866ADC8648E480E8183B492A41
-8959AA9CEA6A8683CE19F68224534250E8579BC6E7B4FCE6EC8FE88C81D023B2
-803F4051D082F0DE1CD459DE0C8261336C3AD7363A50EADFE6210A0BC68282D1
-B1CF74407921143BD7186029A602D8278E3018482DEA5D7630022EB4DB667F06
-08BF071F6842F1D67E56396F2CB78BCC2995569A099175D223738A15792B375F
-EF2F03ABD91ABEEAA69ED0E78030CA879CD8862C71C92C0A8C5695C7F477B793
-959791F2B066D63EFFA1DB8AB194DCBD1231E9DBC44768BDFBC03342A733062E
-07CB4043803EA78DC80B08499DDEA63EE7702A4926236DBE5C646ACF1645C1A9
-5169D4C517A546F824DB14CE505336217774B79D48A1F026467ED406680F6A03
-AF30032E60A99CF06E1EFA182DD8BC0EA060B8A5847ACA336F3BB22FFFADC090
-F6B9DB007BB4C7864669CE4209C0B499A1A617A44C1D9406EA39DD00EB39B78D
-EC9757CD67E0B84539712657AE0FF455271205E767ABE4B34F93D3DA2DC21AA1
-2A1355DC75414A9642FC0D501B87BE14B06BDF31A29F3B0BDCF3D9DE3A28AFD3
-B2C6F624890DCFE0825AEB4A6AFC9A44CD4B4BDB1352565421BFE0CF31D8B575
-19F521183DBC31867AB58C7473657EF1A045E42E23AD6008795257FD2291DBF8
-E10BC88744902071BCD32EAC53BF8B71697EAD353B561C6221A61B6E53DFA619
-1F1F01B472A97370F3D4A3280D26B4A0A1842C26606E2AADDBE4EE716CD25465
-DF4AAE0A4B8AAC44067B78C03DC159093727712A39BDE4C902F3EB770D9CACE8
-C139E160C5E55C66258770C36A136BA9E7510B21699A079E3A771D08769D1588
-1DAD9EF22F5A2EB661CC88CC6E1346F4F5548704A9E2F2950CE9DD1239821A08
-9FB5559642CE693FAD75406C2B85F5F8CF6DDBDF9DAA24B87031B931E1751EDF
-2C0AA6BC2D8B9459B9C4981652653D57DE294AA768B1793BC175C3C081A13A4A
-961747380E3E9DB8EFBADEE8A047E78FF382AA7D2F09519A4B83C2EDAE167D7C
-5A1B230948582F1A966A721320C11E65CC85A596AAA32BCD54A7BA6C1A3FD103
-C068A2B7E7B7C66A76D1BEE1916FFBE7DACC70676900FCCE03AFBD93113E22F1
-D45B5564AD3053DF0FBE4A3DDCA73D3D49959A4256A50F8C80021FDEEA77666E
-6384FCEFECDBA01FDB2E46D6C422C46BC2B150E09A2F4D4C2D8FD7D78C5C8C12
-9A839E25281BF1BC390523AAC184BC8DC2357B41E2FB09609E0EB65E40048580
-DD33D908046166733AFFA8D33A78EF4286DF6E57FAFDC75A77C94F9486412AB4
-A27BE34BC597B2D02963BCED345DEC4776ECD653991E442709F2A4EF1DCDCB09
-A18C2FBBAB473CDC81B440D3BE42323603B25832D1A4558D857C47CAEAF798D2
-94F803B8B9082B4B4298DF5FC84D4BBF7B0C90399DCCD2E63F332DED120CD19B
-5533D7A010A34D1763B68B4DA26D12FBB82F13F5AB069D5E24E97181340551E2
-1B9FC4DB15B8913A2334C010BBB1867B210FF562E73BCC4607EE57DA9F52E99B
-D25B95E602FA62760F4FD902A2393893C80FD75C3966B523FC4515224A92E7FC
-57BE85BA6D0794AE4FFE054139C81FAFE3E82A9789E9C4CD1310643ABA10AB23
-6E3681F0862FAEC02DC74FD513898766F8A0971E2C4760975F236084CE1A1C45
-5AB43A1986CDECE8AE76A8EF0F4EB6A35223C3001F4B6FC03273FE9BCA55B7B7
-99DE05BC03E61AF713B6588F3746295C5FEB2DEC81ABE04B6C434B35381BD447
-CB5EF5E36ED368BC09452F09E7B7D0AC7B9B56456EE10515B6439A2ADD6BDD13
-8184F57B26AF67E77F0A9CFFB2198162A21041C3B7B225857C4AC9570386AEF1
-9DE4FD47C74ABEE0BF6B40456BC95A8D82FE0584D999D11A39437A32553FDB98
-72F6DB4E8EB3DD6A002D2A168ABF01B180E3860F802D46A16AB011A4A96C2F71
-0330B1260EA5444448AA5B4899202DB4DBB148F4AA4B057D085681E2D2FE89A7
-03C687E6EFC16E0858649E46C21B77A9F0EC547AA9ADE92D7FCF0BE8D353B215
-20511CD6D706DC4EC48E738FD6939EF24268F37173249A0881B0972BB2214FFB
-043A4083CC9E0135F356B36E00B64AACEE0711B784AC687AB17F5E839773221B
-E884A1F46223525D70BDA5BF82AFCD012ECD327CB4852F8CC538E09F3913AC23
-E8BB0C8613301DC12A08F0647599D1BB06960509A569BCCCCA3045C3459B93FE
-949ECDB751E2AEA912558CB0DE59FF10E3511641D3516B2DAB11AAEEF958629C
-7F756A0489105C7C1723BBC7A2304CD98D36F019FF494074488F686A967A1B9E
-8AA64B988F79342E5120476DCEC087009952E9C2F3766A272E54D27436660A5A
-7488899A8DA1F7FEB38C12EC5EC781ACDD0948EC8077022A549280828F0B7EA1
-DC3B4787E708D46B0310113C998BF40BAF77EE7B90243AF7E70391E2255F116F
-E2B0982AC9723D713A5E00454748EC8B4A855DA7DF6F239430874AFEA187B622
-A3F6705E4D79FD47A83EC981D5ED14E9AB8C4AD4F3E5CD56CC4C0453FF9E3D5D
-41327958F4D1A6E129328FFE7FF643B63F7138F280AE59CD8228B0ABC2023FEE
-7B634FF42B54F21C7F945539C0AABD81298C72964413D966BD53ECDE9969A22A
-0B0BBC172553A4430BA0C48A7499ED6BCD19917B3BED8708899E98DB07C1B1AB
-6A17B5ACD6BAC51892EE4870D6EA08C0EB89AE4ECFE10F19E1242E7490D91D52
-DAD1B515A38A9F277FC07A728023ECDE78F10130CD3DB1AECB3CF2408FB1A9EC
-D899A4C6C8747F8311502A88450A113796573CB5F2FF149C61B9F4D475C12A35
-B36842C17AA26DE8ABB0AB97D3CC329189388DD57D9A51B671460162E360448B
-E8A9B1C6B81BD88EEDED5C868814209C6CB99A4C345CF153E015A8699F4BBBA6
-4CCA3996981B9BE36A02B38F4A3BE0C79F1628CBB5B792678362AD968FC459A0
-DFDF6257425D5C665B53DC5FAA741E6E83359AEC56F3590AEEEFE87C5DCD05CE
-4294E1DDAD41ADD5861043BEBCA5BC8E0048DDEF0D48C213D750EB7AA9B55831
-1A3AEDB1757C1D193BEF212212D46DDC2CA98504E47A0897D3B1479D98D825A7
-80DCFE89BD6EA0BB7F0D9FDC2636B9DD627CA76019E6EC89E489D64051099F59
-5D4826AF2B1D15D78BB1FA98CDCD524DF47798111A887C1D650E4C4D94FF174E
-8B794D79F789F34F25448B9FCC218608D4830D7AC1ABD2C9DEB90B0B9EB1970C
-44693ECF1FE235580BB33FD43BD28558202EC7EA566C64D2F5D6D8D284EF73F5
-2093AE92C65C76E7424393B6EFF08C3010A0038651CB063B8DC785BDAC78BCDA
-E9A9C574CB20991157708B6A1FAE0C9156C1B0580961777DBF42A79E665E55B4
-68756B12BC393A464B61A506EF0E782476A6FD48529DE8B1DC82CA79DFB6E947
-CE777123A054BA86CBB9ECE3B75EEB73BCA23098B1359E152A121DFDB935EF6C
-8CB0F35604754C02DDB317D94036BBC99349B20596BC36FFFA65BF11D2075E65
-6A36F0A3C5F3117C02A4BD0BD58D434A66B851D279CDFF194165027633BFFBC4
-C6F47CD99CC7FA385F2E7A70022A9E73A54C5B8BF9EBD394B8C11D95B08AF3F6
-6B6626A7D89C485593BD244FB3E926CF54D02B9CACAD09EB17D8B2036AB3DACB
-D6D3B5F8655BD222489AD8415D44A7B7840296028F2E7EDF8F3E5B126D5F6764
-B9832A346CC52D02DA12A043BD9E39310C65D93407799C837F80FA8A181DA13E
-9EE446FE474A236321357DFFA9EDFEACCBA6B6DE4ED895FC94D08F509BE63825
-A661794B10C730457B29809FA68453C95AAE6C0AF0AFDD4C3DBE75E43AC59E39
-04CF82829398EEF70EFA8ECC473E76A1B6C02BB2A7B142EB4985530C0A173D27
-B4259EA302692E1D01DBA7C71ED9A8DCFD371FD692B14E8751BE83CB8F0EFB18
-FDC0617882A29B04755F1FBF7A50FD75325F4BC6267AB43B485AE0728D8F17CE
-02F8512DD62228731E469B21EC1497F49982137B368D6D33FC3436DDB9FE774A
-2A290BFFDAC838F44EB659193DD8B495B351A4BC75AD18A05C50854A303F0878
-8DF3F200FAB1ACA287D847D33A8C8F9521AA4CC8B4257DDBB62C2399FE32D32C
-D99CEEF5BA561E0709A1D44A1D73CCA06255062A12E6549136360F6A262B4672
-B3B2D39A8097B4AA529FF4288DE0B9E5DA4CF2024D717CBDC29759812914F140
-76A5E136194107A7CDE76E2C0EF8A0804190D3322C8C8E281A522A6660E6590B
-875DD18787F1D142373B63F52FAE9ECF5BD4AA0225CCC2DA26BCD2AE0360014F
-8FE4BBA8FAFC8C778C228C98C47B2A33C63A1C313F22AE8CE340F50C9162C64E
-2BEA1B8295270344E705F41E5E0FE0892E8B2555309A68EE2BBDDDCFD9098282
-552EE99C3B355FC4B1329AC2BABDCD888D9493AEC24B7064BB716E91071C3204
-BC86820FD8D54CF3D4CC22803D4A4F083E312376735EB8C44744C1B8A1C3A4F8
-1607AF7087CAA62374C724308125770AE240BA73E2E9C3264AE21C07C75B97E1
-D127679574C6F7FEE51B5FF5532CDF05178DEB4B9DDE6AEEA908A8FC4A57FC98
-EA737002C581DBE9DB2A7159C18086DC7B54FE88E1C9455AD57324E710365553
-575AAD6CA71B81E2F75F31AE7D2AA54B7FA22CE8BA75D821182EF3F8113FE53D
-47F30A70597371AD7381BE349A849D2DD95D461FB737D2F73683BD85040A93A0
-830E3916AB7B6A80C15BD6FD14D850C3F620E11EA4937FACFD68C5F1CFA05871
-AEAC0911C0356D82B579F689B24C288EDCFBAFA6C5A70CDE0849B1CA0CA41412
-4DFC1E409847415402FCE9F3E35CF87FF5CADBFFF71F3B1EE2C13DB56380411C
-241F03BD12242DD35987BDD5B2482B0CFED9CED935F183B9975977EFC0A93862
-8AD3FB48835E0AB04CC04526D956B63C480FA99FB558311F02C9134B83D5CDB2
-527231B74D29DECE0DD2328B55FC228410BF01BC9A5236C21A96CE39DD2A8936
-E28447AB661B6130F9A12B9DB56DF2C32183379FF5947E3572CD123DCE23B7C8
-59F318F1D19D1AD8FE7AC4D6AB1BA48B74AD10A9084E26BF022C66ABC9E18D03
-20175FCCB7A346DC4A07D87B6B89A93533AF929EC1A99EDE00B38A9E6D073244
-4059E56420431FC37660CEF5009B55BE2D9E096DC21DE0DD3DB9ED61AEB31B18
-F1AA98162929CB2B11183970961008DB9782B9F0AA3FD24C71F63EAC783C1B35
-49F76798E46CD1024CB4EF6D75081FE2E6A31131A6261BC206F7C2A86D687FFC
-C5E886E4E3DDEAC8F4932CCC21D35E1107576699E88399C6103525BE7B22515E
-B600F6E701C277C4094D3A904B16040A744CE4D8A3330B9CC11CB89348C34689
-8113C7386D6C5BB195B284E73B6FBB913F7F962E460E1EB3ADFDFDBF5229966F
-710BA348F9B64805F8ECB7245CF52C1E34005DFCCFC29FA1C5938CAB1FC1D00A
-D906E1738172082DCC35FDD1C523678AA295B0F607BAA88A0A21C703DE7D40E2
-99B24AD007263A8ABAB7B8185B18BEEFD57C7D82175A28972AE4D0C09ABEE7E9
-BC51DCAC9A588FF4AB7CBAE0EF799171887B6DCB5381888D56ADA069D95B97B4
-4F447E8B7033214C890DED5FBF0926AC73364762A8684B36C971F324A1A2AD8C
-C98AD1ADB37D1C034AB23CF71967A44262211CF3B1AB7DBD7A835CC1D8485063
-94088A21E91CCDF10A61BA7B39E20C91A2A838D6DF27ED2A3E6C7D31982CD55D
-C63C4D2028625AFD7FC6B4AFB6874721E1F5FB483DEB672858872F5714A120A8
-6411DB2545F42AA8F40229FCB0981D7BBDCB4AD8DEFDB582564610FA1A0A23AC
-0648AA88577DFD9F75FF196F1D0C58D1AEB886A6443781D36D69FAFEA413B093
-CD03D450AB5B93CCFDF5897BE21FD7686936F9C052D9234292E5D8C6E3AEF79E
-27C3469FEA5773DC61F151347E6E910BDAAEF1B8FFE606F50431403AABA2DC91
-AAA75D0B6277159C96F8CEB5E7C24BC2675141D64493F0142C5D6DAC0FC6385F
-0809A80779BAFCCAFE715C7A7EC5A2DCFC64DABA55FA55CD5AD7002887B3F54A
-59E6A7702FD135ADCED5ACFC2DB06AECB4297E8A8A367FAA62840ABFE0BF5E9F
-C58EF2CFD8EA8464BD0DC03251D1E0F405CA9D686C92173ED29DA37D9F616A50
-6DCB98E5DD8D238547078FF053D4FD52426A431EC81560835DC98E4CED52CAC4
-62E20AC5254B9BEDE84869623421C3787240560DB885F6C0C40444FF4BC91774
-D13EA62E8049740582E48C9EA3CF28AB4560963D2D4273FC30EA178CE3B3EED4
-8AEE6D37D9BDD9A1086834093D3454D046D0C8DD50AA309A47D796DCAB3E4144
-92C44ADD7A338F15E3C543F91D081D12D3668C933A977830A69C159EC189FCF2
-6B01B20AF2D25A8D6FD040C55914F77650CE40788A689FE9BABB7EBC257BDDB5
-1E0793C240425DD1F5F6FF75EDB200758331D8531C10E1C4188F48E783CABAD8
-30F946671136F2FE14B7BF2A2BE952E90CE8436E48401F324D1342632F9C1AE9
-E248CF06ED1106E6FFCC8444DEE4639264C2CC604F9BA31D6CDEF45D1B30DE95
-18C637B2A2B664FF0819D65F1FFDEDD628A0E4EE584574425959EB41558BA91B
-C807A11BAD0DE0BCC713AF7A8B1292735C17EAF001F176E2686EA035E344CA61
-6DF6F468ED41045DC47A4371DE882B850DEE11096CED7EC72C3AF36AA2F4301E
-4FDE09FADD6A93DDE03932B21622B705FB82BEA14D1D217F947F68871CDD710A
-8B3840BF0D33F5867E0DB5C9DCCEDB903C8A5DA2D82CE6377E281900B2FFCB36
-21E7CAB72383D1C4A5DBEED82B1C30FA2304BB87076A6C4A5BF6305803C9385F
-B387642BDD2EBC6D660E1492B13266306DAFE8EFFB2EC94B472F32F6D5A5D357
-929E6014A97A55E7549E384A6E3B4051ED84F55A0CE39DBC8BE5F6EB3533B34D
-EB8C013F219F9432C007D9D783EDA498709EB0704B8A30E36080E536D9FC90E4
-A41C758AB3DCF3D741373EEC4202A812240E1FCB40396A257FAE74B8B0937B38
-5F96BB52264834FFBC95C12898E309E76C92F7D7905E3834B89F1A6BDD0A58D5
-BDA6B9C6ED10DCE2CE9CAB4B1D4D2112B2AA880EB6709AFFC515555DBDAD8307
-1158F820DA6A6DFBE2269F98A0B02AE270F144F8E11FC7F5E1B8A4044A6ACA21
-5152288D343A8EC876B96F2D13C4EACAE1650481ED417090344E044F682C0D65
-2BFA753D02A72CC0507EA8FDE860701B43027DFCBC7B3FAF26B3C484F602B00D
-DB1F747CD60F02EC569671FD0CA70323A158633B86C45381DD81AF80C935786C
-713DE54521C43260E77B3308687524864B5D764E6A65400A984C788A6B6C7FDC
-CA5B874E2890A8F956031FBB205D0F527C8CC3D65202A957CD552068CF4853E1
-9AC32CED27EC96F53880AC4B62DAF7EE6B892C4030442237503EB68C19365596
-BA25710DE5C0804AB2D28745D348AA1AA26DA9FDD8C0E33F66183AF0C8DF0E58
-D83ED9FC39A0DA78DCBF76729FAC538E018A1DCFA998318632D45B7E2D70D97E
-AD99C52DD6189707DA73360C4523015D55E8C82E28822C42B724CB9E3C35BE2B
-F0021CD83B3F04316948021F4EA1C01959C45AAFE6BF3C7D83C4009913E7C1B6
-D26410338411BDCFF261238D75431D0AEF473129A7AF610768138C8612BBDE3D
-2FAA5937F2A4EEF1758B57CF132C14EF80FCF68B59E20E3D910B53B674CFA3DE
-C74BF65B19BC99522C88C3697D473A790EBBA79F66A8C031F5540DCD42C4E6FC
-96AB35C7F4ED9A887DF2DA76831A009973C94FBE60FDD3544E6A05169FED5BAD
-252FF65648B7DB4540C41230815AC3A25E9E563A4B98D37B1BF9EB43739538FA
-9D168855DCD55E268155E047B12B1DA6E57A50C9DD7AD5162B6BEC0195154878
-D311EFC4CD15B75649FC917634A9A9372F110EC0483319D93D311A143F3FBA05
-441C6444446193DD5874F1AFB9FBCB244F0BBEFE122160E4DFCDD4C8FC866925
-510B4F9C35B8F5538AF5C7506056DCB52CB8972B28E4097501C527BC1489FCD3
-BB51B6F0EA29A48E26B61CF367CE6E0A3DEE3277E07CD347B1B4053079E19C2A
-F11AD996A20466E3DB3E225641AF23F6C5C4D8CFA0DFA6952FAF262B05B52824
-B2D5E768DAA24DBC0D75A59957407BA162800D659383C98B1E9EE7C46F69870F
-2ED9F3F5AF5018AB7B52B5C26BA3C94F76F99E15E35EED8D00B994A1D1B23A1A
-5F892C5558DE9FB4DD14AC92F8F649EDF9E7AC85604C3FBC752DF7143F2A7239
-8302B08CBA56172C1FD319094B9B920DCFEFF4EF3EBC755EEC4A5950722EB60B
-5E54502ED16E1AFFD4281DEA5AA79FA474F661865233B620681639CBEB1A6B49
-43B9E7BFAF391C8819FB1EEF7AD854907C0F2B5E7BCBB168C87B45FDFB24142E
-13C7E826BF169A3412750528F7B229991C0E81AFA9D90001789235E6ABF935BC
-BE0D225E5EA55C9980D1ADBFA63BEF090F054B65E4653452F289A4EFDDD44D42
-4242D1504468E522E475F6939C3A24599396A164ED9D5E6BDADBF381F7C15445
-D3C77DD819A4015507452B994198FB572934BDDD0CB582645333F567DF13F839
-4042D4DC89B3325D128A2A93D8B406EC774505960086E5DEFC62E6B5927CB842
-7A4075162232EE9ED861D997240BBE94F87F5379E97F8DB09D15B0B67B73997A
-A7CEDEF83B9246212A0FC036DB2BD6A2F883F9748AE84193A31DEDAC285C700D
-3929FECE62567902B60F8109A920AE6CDE5EE6F19CC701FCCEC11AD33DF63CF5
-547877EE2625BA39D0952BF10E6CA242599AEA71CDD288FEFF6FFC511CAAF4D3
-CC16216793D35E6488DA771C25AEF92389E27BDA29ED2E8087FA6CE8B52513AA
-9E51008FA424CAD8C48E81F33B3A957033153C03B1AE368C68AD5670233C9DDF
-7A785AC5E6728C07109C23BDA88BFFC9B40767D65D1B451CC0ECD6DF104A0A5E
-9C030CE244452BE8FAAEDFCA13D93D8AF4EC9A9665340673A9EF13A88D4E0CD5
-66020C635F
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX8
-%!PS-AdobeFont-1.1: CMBX8 1.0
-%%CreationDate: 1991 Aug 20 16:36:07
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/FontBBox{-59 -250 1235 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
-7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
-EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
-7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
-AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
-E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
-4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
-5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
-611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
-D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
-EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
-35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
-ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
-7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
-C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
-B3F5A131BB19D1E5414C86C5F995521076340536E10613E42779FA15EFDB451F
-53495CE8EFF239E4EC442E1439594549D45F5276F93D496C9AC712D762D0B702
-E894290BA028837304AFDDD8BAA6564E9DC307A14A7A206550FADDC7784DE3BF
-3390188BBCDDD929C82B1D7B529553BA75ACF5B385D31EE3902D96B2B5DDFFF1
-9F0F90FD791E54128C1717F313486896868A34FAFF22E23CEF046D02C140CCD4
-9730CDEA373A7CAC4D69E3ED60590B4CF83F26EB66896E706DFAB81296288E1C
-41CE859B3767F0AD86413F8EA2E72110FC52BF6804ED797C3B31CFEDB482B58B
-39C27F22547956219CFA5F19855B8FBEF0272DACD598ED59993377D76FCE9551
-285694FC4109E112FB3B531145321D33201949D2B68213B0E7F96F20BBFDE3CC
-992AADBF0DF7DE6B75436DE2D0BF13D8BC7535804A71D4544E98B9E203D5388A
-89BB181750CEAD2FACB627BC6107EE1C9C2860E491AB54D40769F9822C77E830
-5F20BFCE14A539F27C0BEEA7B6F11FEA0FDA7B542C0C84F8FE811F0BB6EE47F7
-ED10C4FA171225FAE1E92DC79B62605BF720FB79F2B59B925D1B1BB08A2FE6D4
-6A888653F496E5199172B81D32FD04ED21EEEEE08CED51C87F22208FA48C8F70
-18573E3D31B1664D932578C1D24535B2FBA5B1628C3FFAADB4B29A481E754D4B
-CB5BBE2AC2393AB94393C640E6429D99F55DC15761194DADA1C56B216EE4BB60
-1D106EF3DCC9D02631376C3448A47EEC7522AD087C4DADA713B72552E2B9627A
-1FA7FABCEB12B5CC3C2789CA9351D3EB78DD73CD6442DD2122BAFDACD317747F
-588DB4DB7E7FA894A13C7CBE2665D2F4E668BA4D5976832F8BBACC2F4EB6E00A
-805AB5BFB52D402C1A5F607016CCA00602D2BDCF4953B503D5FBCD1F8CCD4930
-0212BCF99C3BF4D2055407A962FF2D451843A96BDB812D7EB7AEA8FC5B020ABF
-312D8E98A261902F2085F5546BAD83F189615BBC3D431D43841C70016320E050
-33D0DD9FB670F25F3A47C818EE9D173209A95AF350AE5114D2B5B1F4A526BBF8
-951DC1B9994E77234A8106D74DE3F3CFCACAF4FF5B6608145C731A80E9C05A97
-6F118480BF5895FEDB8606E6B00409ADBD6D60C39A4A30CB9B5AE46508095FF2
-2E5E0BE6CC724DD66014BEC91FAA107F8AF7AC5986C1488995117DBA4616E335
-646BF32CB244FE26073330BCDBA19C29AEA59576F4141AFAEB3326FCD5304C62
-6E81506BB2AF943D196A033B89BC0E00BDE0863C05ACA121CB8777355FBF122E
-80B452FEFEE07B3678DC1AA93B3F6975CF4EC48049FEB6BE4ED39B01C5D3AB00
-E0984A4F61D7384FF3D94ABFACD1ADE899E982E11BC9A0E984874EC2DF8D233A
-DC199301547833C5C33E64B08E72FC8A097092E054BEC04E4E59CEB8328A646A
-C9275AE8D781125676F18FAF1BA2B88BB814CB7AF980817B67C967EE7A1221E6
-CD311A025F5F258E0A9710DF92B6CA1919B859D0BEF4B00F49DC632D9A82BC37
-A5475BB3C27D56FE647D72EB0B96FEF22A43A2FB28A49C8F49CFB68514318208
-CAEE1EED06021A7E5550EBBD8745BAEDBC5320C87285B6DD4D5AEA230E47DC94
-6B704162CD8EB7F95C2B1E1FCBB3BDC5EB90A3A7E6B28A084EDCD665C626E0BF
-288A680B54A79CA47EE352C57B6393DC6742C5B99AC3043A23D6B1E131A89059
-1B1CE7BADEBB878CA5A93B0CE4D4A6433EEA505E3E85E0CDD299CDACFC1E3945
-9733039E66152DF405081E320FECB14DCA425411EF73DEA0C10A9FD032EEE891
-F24B6AC497E42A796A565BC545418C889510BC82994DB46D47B27960F3BDBCCE
-1FE918F7437310468D9C1D4CFA08A23586B23F209CA5E1D5B9219F9146FD4A67
-272861D66B633C6115E0512EA33E99E5A2C9F786BCF687DE4D94EF7F781A849B
-B5AB60B6E571F5510242BF41FA501EDEDED1E98632385821B6111E7C243F0F8F
-394554D6F3E6B7CCE3904DF60006BC23971460A063161D8C7B188C00691CC2C6
-744BB48BBB19BF42C81787A6A60352C30631B9DDC6B25635D09190C72539F39F
-D2A60792DCB4D6C9B0E89B118C83266E6E545DCB0B40E2655EA02E1399C7F1CA
-076C97D6CBD3A89350CFDDD35AFEB9F5DC6180FD53C667540D462848D1B0A575
-114DAD87E1C280AD20030C8C29E93F0FC77465D473C26EF10B332F3D9EB16C84
-93B2F19701547BCBFC251E9B7AA540C2889BD38A17DB039BF9B0C10B1ABA41D2
-BF051BA690B962CE839E6F9C2AFC081031C1049FBBE87B4067A63515BFD1D7C5
-857F560A16B9F7999509D8D825872DAA36E44EA4F7D3CDA7488566D5713CFDF3
-4138C9A981045F83D83FD19EFC2D14CB163A590DF68AA7E5F59E05C7A6F26B46
-5786456B43EF57FB329C91530D503848EA324CE9F87747C2B1D0182CC61C28F5
-98847100F23192937A5B5E3327605FFAD1ED0395B2AA53A41C52E014D3C15E15
-0E91D9D963F377629B43BF71DC3090DB109A56ECF6C5C9EAB8C8C9A12CCCD471
-E6FC1030D7FF7D400AE435D5C333958896A4F6E57BC68321F6B1E6D7540586DB
-5A4F495CA2266A45D940FAE1C55AC750D2C650AB0A770DBC7DA2BAD9F14EF411
-64058DDBB9C050317F53D46B59DF5A8D2B4AAEED48ABE87CD5396FE2E8FAEA86
-BAE4C009CD71165A2EAEB72D680F70D55A9B866AEDC2690643B9B1A59CC85862
-AE40CCF7CED2EA6CD30D4B3BD5BE48C547FF52A9FAD1CD75BB7F21BEFCCAE738
-709CCA12294AA1EBA6A89204A8400E25466167B6A8CDA5E87CE571CD841F53D6
-AC5C57D5DE83FFDA77A5AFF1246B1B6B0527864B348DFD44CBD8205CCBD8B5A3
-51D56D897CA483951D2EDA954DD164D4252CAADCA3E5E0539BE0B9DADE6972E6
-3ADF7572F855F4825DC5FC85FDBF7F3A63F914CB5580676DA8FCFB9FAB170CB5
-CEB586F231153E29D03E85BB16F36BE558A91D706DD07CD6A426ED3BE8E64CA4
-5B9AE4FCBEA5EBB41ABB853A208D06F1668111A4D936C9A967ACB9D8263CA679
-79511E31CE1964ABEF5B4786CDFAE5CAF695F52DD437880746244CF68E793C27
-35E12A0BEDFC4CFA874A1FE53CAC6BC262BEF051087A988DC6B612C6E923268F
-7960CF416473761118D9B9FDB2F4A8D0454D2472272ACAC1CB4012EC52FA4903
-5A34C2B762B9702583795F9E046D096CC2CDF32BBFD0852233316DB914863AD3
-7B44CD88BEC7A3B3F0BDD1A199A172E318A62F5099BEDBFFB9F0A0074D9D6FD9
-072CC2D9899A31290CC098A77A18688164C6B86D60FD64D2F2B4FB89A7DF8272
-56740E85F27F11A4C429A438A6489A9E9BAADD235CA7E2478EAE998AE0A083C3
-30ECC6ACAAC3AA5053BE5780F5E082A56720143C3482A0DC91B0E1BE3AFE0327
-1FCD1A1F7BAB38E208747D8F465C5D3CB763B8EBB4691C20899F9618D8AD30E5
-166F8F0484E62116B22FEAAFCC9E337F2188F3B0E6967AA8364930E6B300903A
-AD310F61A1D9E37E5E81A6789981D000419B8D27048C525A7FA22B1F96F4946E
-70C9578B257B67888E28D2A2A1586A460842A32F2C264F7514BC3C6630A0DC1B
-BF4E583D6302A09EEBE76DB3AC28CC9D7DC341D14C745CB4AD539047DF9A5B59
-06A3FFE21DF9CE5F12A8C603B91652D07A044476729451FD8ADD752E6DC28972
-70D69C4491E906F5B0FE2008EB0705FA5D98B3AC8C8E2419BF34E2F4741FD369
-D07228085B26F57BD5DBF28CC92608FD0E0731BBC304D6B00308FC3C068B225A
-5E9EA26A18BC3EEE444D6C40C6ACC6B583A6F87DC5CE75F51C871FA18E0883D1
-4978C0D8F123A1BA73B66A268ABE134F62F9A3A60AADD56B9039F9DB87099429
-ABE357CC0ACE37D572AD946D0481F6207C2A3369E9470B5C2317A9ACF4B73414
-9EF59CC9F3716AC5D1E3F048BA6542F16331A71222E5ED686F7E28D63DECDDF9
-9ACAC3D605063AB18089D375A321B14941969ED7E35D9F9AE73CD825C6104E2C
-334534442103B9451EBC3688722A20404251C003AD0BDF43411609A20FB1E600
-7F328DDB7AF1746FBDE127447E0FE50050E678E4DD1E79291F7D83CD07821AEE
-5DD61EEBCEDF75F183437C9AA6417BE61E74F8FB2DB0A7C1891C80C5D04E592E
-FF1095AE86EEBF40998EE452520DC0D79332F77A7F3838716836C9E64D9EC809
-555A8C7FD72F6B3C9F4A81FD4CD9E66D2856FAA087A59248DDFD33AADCA0D403
-990DA961A15068ED6A20538A564E1F891439660BCEFB21D1E205B546BF63C89F
-F80C6716A2364C1222E4DE7DCAABC01329C3C335EE1C9C6003FECFFE0ADAC78E
-3256339722CA93243C823566ACFD0DDE09E237B5256CE9F4ABF43DC5790648BA
-111E032BDB926A263C45B30024D2AB93E2D214BFDC2DBC93B8D38B1A6229F6CB
-74FF545158BD92BFDBAC7613968EAD2083BD7748A581C2E5BFCD38D6EB672038
-36364AA51FC4B3683A408EBF1ACC7DBA0FBDDE1D455C6E03017A688D4E580BF6
-D9D44CA668C778AF4204A578B9E04A74DF77E13F19CDA2733679FA237CF1DF5B
-81C8256833369AD723B9826B8C87A6E1122A84EB49AB63CDE1B281756ED3AC70
-BF7FCDC06B9183DC625C57C547962811D7F0AD3E43B3EA65FDF3878B3A06BF45
-4075A761241AA220E3043790143C688E2CB33B716D77C2C9FB9C1948B5F61457
-B0A6079251472EB89672AC6C3DEFE3A0A512A9899FF79A366463CD3E4A5EBB33
-5BDCDF65F66DB23C5F4478FE98D3CE0FBED50FAD539D6597568033FBF26D49FF
-FD339DD37DD0D6361A981B794BB4571B7211F145E033E71962DF5FD3DAC4ACB1
-72A15DFF9A26CEAD20BFAC76440FC3F770B83E45A8C8AD9833E685BF589FE9B0
-7C12A2B3B9A3EBEC71FBE7FE08AC4F73E716522763A151E70DEC10519FA96831
-9D3F87869FF731EA332A5A240FA36B49BF2E010F976C9792B9C984C42CCF8A0F
-5F40ACF8735D0C87406BB3E2555C81236696EE69DAF4AF68908E912316758B60
-CD6D36B7DE897E595711831D8B456FFF483CFB58CEF8594510B45D24E0F06571
-A5C0C45E73706657C7A26C244AD7860E71E1B41D5276DEDE69FBE758B18B6BCB
-147E166575CE65AF8AEE345FE1A6266F4A82BAAADA58A989B5D30ED7F992A2EC
-8E92B256EBA63FC6AFF2A5368E9ECCEB5541DBAF23D287DF8027359D4FB4C692
-540E7BFA0B12FF6084966A6FAEE65455AEA90803C44EFD50EFA95F6E6E41583A
-934C8D1E72D95F1F3BF78B2D4F3BCA05E79A5A8AF5D48732BE2533F5434F8C6A
-413A90A1922D46B894CCF8CA366C4ED049142245BF77753B4ED19700E16518D3
-3254A6EF730704AC9EBDF9EECDCCACE4525A6DFA808DE4094383C2F74281EC73
-86E106A3EED8497A15B6966E4E00C9F46577DB1AB5F6A3C2DE0360EF4C140165
-968A3D36B10258E2866764D324D9ED6B377F3026A433F2D850103906A729608C
-6230339BE659B3E6CDC5239994088AFD77452A173E33BC1963F0B845737A3040
-CBB1351E499CC6D02684C0E019A709BC0826173B340D815533324FE52E6C851E
-D4C734EB3064D292B077DF7EC087CAE537D54F5CC85920492C5E0631AA13DB19
-F50ED934FBECD744C468C443C1AF9904739589A6362CDD7C359E1B5D8B3D409F
-A0EC10FF5A64FEA3F8E5809E1C2BC6C1EC220216A4D21627CCFEC0CF7C923F9F
-1F18FA6BF44FE990AEF8E3C731431D044F4E3DE561DE8BC272FA8E28A0655DE6
-597B68539CC1320EE0B2F2B33D4877ECA9AFF56D2F8A67F65A47DDBCDBFE8818
-219E9FD419F00CCA14C2A79B8E225D9919F552567ED66E867CB91DC2074DC442
-A8E29392B0F40D77CBC215B60217D2BAC703954074F2BC90EDBA6470AA0F4A9E
-F2401222256B7CA2F6D18A085E687E6ACD5F2A37147C2D7FF6F0CC7B87DA3803
-B3157E9615F61B4792C3DBF7A44139203C2B9B1398C72A2255BD5D8803780F0C
-D2CCA4E7848F0E02C63C35E859B80B5B2953A9E68C221841EE10B1B0098BBBE8
-1DD9C187DB3C487238E92EEA4C762C9D48
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMTT8
-%!PS-AdobeFont-1.1: CMTT8 1.0
-%%CreationDate: 1991 Aug 20 16:46:05
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMTT8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch true def
-end readonly def
-/FontName /CMTT8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 58 /colon put
-dup 60 /less put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 76 /L put
-dup 77 /M put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/FontBBox{-5 -232 545 699}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
-3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
-ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
-C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
-F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
-4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
-61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
-6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
-B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
-6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
-C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
-BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
-52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
-48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
-351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
-C4CF2F4F438A4E520CD864F3EAFB5363753B82978F6FD664A14E5D6F3A929348
-5839EA752FD635619C4FABF1E1454510BD9D6B538A343BE748AE05B47F917367
-1BA5EDB15F1BDBE806E51B294257D7087334165419A6520462D794D670A1D6E1
-3BB03BF689391D056D55AD660D15A386E6D222C9572BDC4DC8A46EEC75124BB5
-F0E8978FD6031A90E4768CCBF62A5ED8C8087FD66D2033011947634878BDC0AB
-6501DA7E6D96E227068E993DBB0072F037CA4111CDD092DD0CAEC1DC6D0CEEC3
-B291B4AF285DBA243A3457A855171EA0527DFBF10E34A60D3BE2092B3218365F
-07271A0CFA3AD15205D0D0886AAE1C89807C74C6BB23F55F0405A522BE78D4C3
-0E6C7A2C17EF66CDDD65AB75D03526DBD692FF1557B689A200BB5A593E92DA77
-01E5A82004AEF4402C06C65B21971E8240F87BE60F5F7E0B56D3024B7D49B9A7
-724C55353C362CB35B720A5405B2B9301A1A0083802E8766ADB7856925D45001
-1FA451AA61F72022FF0419B1650CE94208DEEC7EE3B53ED7F9E995F883338936
-EA6FCE2E2466BE5C04B46FC7DD9E80E6F1ECDF77599D3AB9E61C00D7E425636A
-E0AAD63D341CE31564C7882916EC35366208A3C06435BF1F55086D627E06B996
-7C49FF12CC6D0E793EB19C4972C3904ED0FA9FE0C4E05140CBAB2C41EC148B05
-43A9AD2CA401532FE0045933AE0B08BC1F16D94D85420A26A9D32A9F2486BD9F
-EA2553F2E8B6950F63A1102E9E8DE227BD756612412DB1520358DDB08CFFAEF4
-AC3597978F43E982BEDBAD042738D05AD42348840F9D0122535E6CE711AB2898
-9F1003DB762D3B15BF35F3B7F593C40282FCDA0CFB1DD0B2B3A8DB68E326251A
-E4B6B6C559E735EEA2CB221ED8B8E2366B1BFAFAA234FCAB5F94F7134DB434C9
-7033F5ED902DE94FAB29392934E8DFFB00C5D27505CFDB2F1BDC7B10C9379B1B
-8533F17A4369203D2C65B5C75975A65D20BF6880FFDF8043435779F26127B38E
-09399EBB27BC2CC481594BEAF8A749445805A6EDA1DCDD02D7F23038B6EF99C3
-18918626F164B6F9FB32CFFB0D936C11AE7E2AC80543864A65EA8575DE49848B
-B09FDE687FA8AD27D0221315119A0EF7CB87E6C72A232B51E48F4AA67AB0FE6F
-36C4BA99B3C0C343EEBF2C0E5905E71FB897C0E80C9A3B15A9CBE81994D24580
-EC447198E94134154F103060C6CCEEC2006A2F7B8A01457493EDB59205B0194F
-F4859CB75EAF60F98B0A213864DD8407DE4DF86AE6EDC5147FBED02C022B26D4
-158A8313188C7BFA5F185AF65FA75F0A17DE6A5CA276DCBDB01CF410114E8B17
-5DCCB1486455DDA266A778A9EEB6B41B9DE0F79021D241FEB9E9496DDEEB6558
-7145D3540032DD2F1848CF4AD9F88E67C4B77339BFA9EE3CF75FD78A63ADB40E
-68B3D693AEB0E7AA4E46B84BAF08CDC361A106C566D01FE63AF40D245B717B92
-FD7391F92B159830ACA6303C8E96AFA4780DCD4963BD98AF67D8511E4E6C6E7A
-32616CE5F6CB270F01B6AC4EE342610E0CA1AF1DFE51CECFF133AD714F5EE89E
-978C4BF5EA08125733CFE4B0C3853429E910677D568EA9A4A0800AA5D391A772
-E8114BC600B2D6B2651BBF987CC3509B00CEEBDDBDD82330A9181D209271073F
-B37241398D70D049B9FF607A41AC70E64B928DEAB1A0B4745D98ADEFB18F2D04
-0C44BD18F8687967984B9D48A5BF27E09CEFFD7953E6D9881A197CD09B8C75AE
-31C9ED0FEF539E4D71E4DE6E65D106975A0F9C57966D50E678AE5EA9FB83EC80
-0020420E2FDB7F4234A3DF285B9D761E1F0A21018BDD9EB84934B808E345BF4E
-91556AE5779EADC1BD02E198C73D1D10A56A0F09F01302BB91879DBB084C488C
-972D39D4212AAD28F9B24C164F18CAAF595BB6F9EA9DB90C3AC98D0F37C36830
-F28A9DDAFBD9E3C84928E9EA230FBC0F3C3D05DE4084621B65D26AF4F07F74E6
-183E59EAAE390C8AC834DC662B06E83A9CADC8B891B3EDB56FCA7252600082BB
-DCE150610319A3861811339A621DEEAD6D619D475BA86984561F489D052BAA18
-7AF5FF29298168AC79B1626F882CB19F6AF7DCC4E28124ECE52599C51890E580
-132273798D3013CF390A8569A8618258D3570D2F1E538E96793E4A939293BCAB
-A9EAB62579E456B5C80CB9B79A70EB36080A6AAECB786FBDC7F19E6543F67B8B
-39D24FF379D8C6C257C2E361FDB384C822DB095DA0F10211D6572E4DE6D4E8BD
-1770868E2752631376DEDD29CC784ECD374D72232026BDF4650B9E2712190D39
-4C0748743D7EE4706B7B31C90E5743E85DAB062B01DA4960E0314D9D51293BEA
-9DC2DA2C67DF7186F9346CA769A0C7C6E6DE1BD9B48709EB87C6E6139BDFB245
-69A02887DF104549CFDDD7FFD86E9822FFFD2DF186512BB81BEE95253FB15FEA
-01E04ED643D2C7ED7B43AF1919ED54C69908A87FEF3C46BE979787C79F885451
-3C658541A8E388297ACE1CE31AF3DC7DE205B72F27EA432387A609D9401C0FA7
-B53EF719D0BA60B400DD9D02C7D9626799D39C51039B3D0408CBCFEBB0B2EF81
-220B69B2953E00666BB31C73F11F1E6108C62F4F54138631B9FAAC2C9F92935C
-2B3D9989D3D78AE5CB66BB48F669178200ECEECAAF28DC0D5378238DFB8C4DEE
-D337C8F28BBAC0840F950DF373EE8C3A59568D95648E33802210A3A563B5819B
-14C059E7F4AC6F426CD4E7B3F1A2F6F4C2FC19C2C3E9DA7D2C8F950D7564C282
-860C60EADC8F9B71B90DAAD27095804884289E914F0BF17C555A91FD07B13DA0
-66232C27711289C4D5E20A39A4660BFC00566BB31FA6511B763EFBF1CF95AC91
-CCC63FB618BB886C3B7318CC8301E323EDB4E016F0F7889C4FEDE858094C23E2
-8429D32F5C52CAA03CFD74820F2B956E61560B64CCA58607B300CA9166864F66
-49FC01C8848EE25857AD731386858093E9F87299D452D9C13D06F90E9FEF2C9C
-B9B78EA3D3F31785364D36B1650A567AE8CF30A7A5E5C6686B614DFFF65EE9E1
-04211CFDD13B3F021E5D9C965BB56FA136C0B14761ADEB5C8092088990E8D0D6
-B92F39F4E85E71FA38904C93EFB4D7FFA8012920C2445339BEEFC621CD4765D7
-01A9C397BDA9C3C0D0E6B15297BA0BBF6169BF10162524EA71D7CA539FC209BF
-375314A88500ECFB9C7363C5AE0D7FB44D0D1AFA09F34E57AAEA2EA67E2888A0
-1B202C2FC4017AB742D5437E8BC89CB24A4A1B0DF2453026E69B60AD3AC8EEAF
-ABCC24A1F4C628D67BBC03985396C05E5DFFDD98A0CD615D37EE0FC2C9173D91
-7F20B0964E1FACA7FEF48DDF1ABD76716E06B403998530C15C434F1FD2BBB250
-4B95E75486B54604D3687C2320FDF083A23C01A79363A225733925DBB954D366
-3C535E17565ACB00D3ACB5116996A172743511888EAA2D69B180A4C4FECCF034
-BBB539DCD94510B84AB82E9154C93F025FE50BF00B325A6CC4B6974BC3B67596
-CF605CC04A14625DB25A6EB9E9F9BE93066E34A285CDC45ED330AD2073A9DDF4
-8D3A6739CBF4E846C3BB01B9DC7F01055BD43AA0022FFFB2B93DC850419B4BF7
-97451F057CC0BC68C208DF288E8A1310A015BDD1019C17EBDB42CDCA2509CE3C
-E74D55C55630B10A7F042F260D0B285DE8399D11D079E91F348317AA3DDE0CC2
-A8DAC75318B5FEA8A6359EE3765E6F75E58D354B9607034F6A8BF0B22C9F770A
-F537347806E5FB7C0A6A9325D0519B02A0E7CA47946561B848BFB1C00B5AC67F
-BE25853D147950FB70854C7F4C8D7C503850F1748DDA6210DDA2BDA36DE9AF9E
-7D4DD3152165C9AFE4CAD15D146B71F0B7F2DEAA5EB3E1637A9CB5C3CF60ACB0
-7E6A11244B3FE758DF42E346A847B6FDCA6B6FCD7F02BE7D467CDC4AA2435E5E
-34647FB8C7EFCBFD144895C0AECD5E0F2AA6375C005C75535C0833FCC123A07A
-C841157D68C80ED5341FBCA8C83274C751016C40FB73A5EA4C6ABE1ADB730CC5
-1CD781A616C79C2B99EB1F13115FB00A8994DF8017791E23CCC269D90D49B402
-E1AEEF2326CB2AB44079CE18A1FFA08195CA2AFAD0ED73D907F4FC6422B882BE
-F7CE67E17EE720B1767BB925E432CDE667B4D3F0483DBCA9EEF9A41A786DBC81
-AC9A52114892FB6D2FA892B6FDD27DDDB9E173AB1DB7FD612506E2D0338D1747
-1ABEB8BA78BF7127FEBBA18A70DAEEB612B7E48885C76CBB9DB5786C17B286C8
-A955C89B3DC4FBC16C3DA027D10148F5A2C685255F2D165570BF8BB7EF72A0C9
-F90C740E57BA036C38B3FD04BDE1119FD3582FAF9F254220CC20532D8C839CCD
-ADB7ED9483CB784126475CDE0E8B2C602A14D13486C214AD6B53E14779E7DCD0
-59A4C4D62A704B4EFA896439CB66B953822B492265FFA6BE2367DE24DA97CD5E
-31D715A3320B7D0E1EEC35EA1828A218BF3B2B4EFDADCF91DDF152D4E4F92155
-757446DD8D122A22AC3C02D9FB49D31732A03F9AAC36B0494F234466B3C239AB
-4D41488FFB5EE503F69942287348E09637CCE28F1A6671B06E8F700A2276B2E9
-60BCDD1CBAECFE816F6A4A1277569D6EF85BB49503708F56A8411F76E53148F8
-A49C0623E3EC3DE32B280F5BD47AE3F759589C2E4DF29ED5DFC587E8241F559B
-4B6A1F8646D292D966CBCF651D751E5C92751B289BB75A8058E9B19C375013AC
-5B810252BF23FF9C7A0A568C6B4E329F5B71003118F3DE19F99760B525AC3D51
-AC85F6E4E47F1EB7589AC39379C35DE27F4FC5B79B8F5D33049D4BF72A8FAD0D
-04A1C77795B44EDC59FEC22A5843F86D18FD4415FAC8AD44AA7520392D57B7B6
-2C755EF3AE81A83D965E65EE8583F575AE1CC4F50A37F0B3C007771A5B60B01C
-19FF8858951E0E7CAC7D157D3F5BC7F0E453738DC33EB390F31D38781CDA8578
-F9555EA83FA8BF8BDF55740882D9140C9596ABD438E903B366ADF71304E81E58
-FF9B51BA19FE3EB5599C6D1787569B44BF26D4E14FE79C1D47F3FD4E573CCECC
-BA3F8FD36B608D87CAAC3686BE994B252287AEFD9A14AB3051CD4D751F27DB18
-BED214064F065F20D3FE097DF160C63EA5CD01B3C27788A927C79A21C4F2164C
-EEE8F38C79A7C68B1C1958F7B6F0F696A203C93918B3C23DBBEECCCB2EF2D96A
-EF6BA2A7AE40979ACEEFF78FC82EA9B34F6126F515C307783045FE80587D0FD4
-D0F81422E0B82CCC82BEE3D4189536E2C08B35AFAF3FAE2D5D009DE9BB99598A
-A91B9B58964B4CC7CB625084C0DC42ED14D685C25C85181A8735C4EA6BA9CFD2
-B7C8E67977D047470C7A778166FF42BC4B9A8F33C5451FD16878F6D65A47617C
-543A1E51AC939FB97235FDCD67962AD3CB5985DFA5737B28AD2E24DFA5921B3A
-CF2CF5FF6687C7EC9C66C4DF80C039DD5965CB1B49D0091ACAC40AA078DF781E
-55A2457EE55B1E0422C5F8074A9D475E194E5742857BD6544A636AE573FD8E68
-70BF3858E463E94E5F5D956B9859DCF1917516005364779BB9DDB66F5DA107E4
-2B5BC512D0F9C32FDC34794BA631A0731CED84706E2FB9AF7CBD4ECD53B6157F
-7B01BFFB519C87689E2A489833D22F3C1D812849B656E6C91088880F135DEE39
-FBE71EB03E6B5AD77280112F6C3E2636D22A38AD1D34F33B7C327122B9F4BE2E
-791FED7545D52ABF2ACBDFCF770F8F874806DE0D1977776B330FB8D84A52834B
-0D2BC3FC18BC1885959B65A2B395202A8BE49350C1E133EBAEDF41D36345C24F
-86E4576E68E81EB707EEFED92F6F09FA46F2F54BA766E3B20F1CFBD6677B59EB
-73778BADEBB3783A5CFA9138815187A86694E8965FABF1DF6960865AE363D418
-4C3401F3854DD5C241F3667E2CB34EBBE9A74D890283DCA529E1B63DEA16898E
-FD241DAA19EECE2869780A8A03BE546819B3C82762F5757E72C0FA749F90050B
-BDDE78E6D01685F6DCEB9A6F45E7EC9D253ED34D2EBCB98FDE257FE1AE7D39C7
-1171F5425F3604B93531EBD0DFF691A905ACAB90F760AF4A674C500119B91549
-0566246482F9454E3D3927239AD8DEEE6D4E9ECB56748D2965D7D4C59E358307
-F936122ECCF570568F9C8C8FE5F135AAE916CED51041840BC4B1F403FA632FD1
-E694065B7F48EE00FE1E6ACAD8B86A11F3ECCA19B5ADB114D0980766991F8AC1
-573EA9B5C8FB5669574CC0426377764CF911BD316C8A7D772F78F47524112BB2
-A32F11FA6A6D1B295D96456A0D621C2B8F284DBD8FEA152D9EDE6A68B9CE8CED
-65E380ADEA02DD9C06733A4984AB4F7F8C5E87E58C9AEC65CD3490C87C04DCA3
-42AC5CFFDAF21995432D0115B425B20DFC3AF8206354267FD0A8242BE0B23B24
-7B8BFE5CB5A2340838F3BD77B6ED26A6E43D2F732F5036807505B5E8C155D194
-03E57F31DB974254F3CE52708587825117D646942431DC4A29E99E7DF8193B3F
-2C9FA9049DF511A48E405A3B798F0855493AA0A2777BF1F9F55B6797F27B8711
-5B34A0C897B7B13543477D159232939A052E46DF470936A8479BCA8ED9F97F88
-A9D77E43F19DBDD737EA504D94AC6DDAF29AF0DFB73AF8B7681E501AE88A6264
-B879436A69BD0DCF3465BE9D480A31B9702B2BDDB87D647E5A03B7E931505CD6
-7FF4595F44DA7EC3B1BE6C3E713AB806A1737D026A890E77AD137A9317779D08
-B84026855E4D84BFF2B50ACD7E4E23A50B888916681BE1FFD83128E9C36029BB
-AB6225DECF2F6DFE22E12A084C27F809F53074A272735FA977D783ADFA5555C5
-F2FF03C670E2018C9388CA3034414402C60E0D49E121FA06B54E649E73E65E2E
-3376B59F3E3221FF238488418E7B969795938996B506C9CCAE529C1AD10CBCBD
-B2DC727D9722C198F7BAA1BF583AEE1B88740668CC1E9EC960B33820981700CC
-01F5AB0586DEA46B96A72EBA2568E8A3774935B4A17BB2DF361B4E4D30814CAE
-7C6BABE324FE7FCC67E32F773924E8C995A025948E253CA14FD35DB48A4C9869
-10ADFBFEA18E729FE71A53584FF7CC8E50D04A3700181E0218558C262873C7D8
-DF424F5457D76FE99ACDF797E542433AAF9E811516AC28698A179E17915BB3E1
-368DC25C96394147D0483ECB7EC5543595AD8903BEBFB250C76ACC782BBA59DD
-36D393AB25D84A09E19F7788CAA4A9110997581DCA6EA82B149660101B9DA10C
-66A13ACB601596B68CBDEB3F8AAAB3DE33874C0B07B71BCB6E4BF05CA47A7AD0
-69B6F516E4ED20D017CE5D324FE97D7FD2412A73B92D8601B8D716AD4C87891B
-53D9E95DFAC1F27A582CCA123096B12BC1BFD68F432956606CAAD9752102B925
-555EB728A26DCB480AFA1E87F2990585E477E5E83C045A72FB2DD04D0AFC8512
-640086008CD6989676719D94E4646EA41508A6A4C25E93E84B3928E9F875186D
-B2C6079FA73A221FADDED66AA88F5B49208D10C2E1E91E25DB3818D69E69F10D
-197A16CF687E74CDE885CB876C185F19D120D916E66F88D03B308ECD3BF2010C
-7530AC389495B4E63B70999149C463F46DC3FBB0E77E74ACA0E0CE17172AEFB5
-F3D559DA122B384EC940CD845E8B5271D2859A12F5E913BA6CCF8576ED7F5C04
-9C4FE5B7DF849BBD08DB1B44A71A59CD1769853CF9E49A3425D48D19233988AC
-3263BD7D1861EE4E99C9D33FCDE02854B0A9CCC24F337F04F9AA4F0292F5613B
-0DC69AFFD972B2EA03B018057A588936F7868AC2FF5474B9A9584F2AB70A6813
-23571813A6B3B48ABA4CB44F6C14E9DD5EBC97D9A705F215B31352711E6DDC25
-27B5CF2AB2C4A1B2310A91711D39A4BB8EDC93361A18A38487F8D2E3C91E5D80
-53C2B713BB837DE72556FA3D1E797EB6A90D83DA02DE424D074B6A8EFF11BE23
-D9E905B15C4860FEC665B2182CA30293A86B5D1BB1F7230D7ACF88D7C53317F2
-57FABDDDC049CA2CF03E8F0FE9FD160736418DDAD7809A85D3F3CAE9F7C51E3D
-2238449F781D61AE69614F0B307558D4423C86EE67C353E9B49DBEB7B060D7F5
-25AE5A7F64F20D22B4932E86D5F70632334D3F08F22B81472545ADD27C389FAE
-F619E9FF87185F0F54BDDD40430CC44576CA2A2F3F4C115D3C82E53689203F93
-36421BCAEB7FE999BF2EA19D3B126C073EEEEDE1E841BA512B2A4D8E1BFB3A8C
-B2272496B09DD88CC7C37EE8E06BB92797FEA48E4845D7EDB60A61206C581894
-1FB3FFFFA610E81026A7AFF8D400EF068D1797F8512F05223DDA51FE18DFDD7D
-79FA8754A79D501826F705CC5450BE63C2390764D2AF32BDEF3E45940774C9AF
-E869BCF5D5C028278DA373F0B0B6ADA106DBF419FFD5ECA3C60A6C1AD46C6C25
-5C3DC971BB07A23E3F3180DD9DEAEDFC2A96DF506424C5EFA695150D5B550AF8
-E60CDEA33876B075EF693883F6FB70EF5676B4552318E1EBBD4050B2BAD9273B
-FA895B3DAB65E4202AB0EBBC633A0810F852824D3FA83865E505F0A226A85D26
-C7D69739B671A64FDAA895F7C98660E43B18923702C6E02C3B0806BC375AC535
-527265D76CAB05110C7854CB477F1ED55D0B876CF2421E3FD0F21337AFBEC2BD
-24E8E304B141B878DDF0A9F692E1481FCE9FE8734E6FE9CC2114F0F341AB9E03
-8E4118316EEA0985914711F52F7D2CA2FF11FD9D79C5CBC12807B5992B8485DC
-494FC91F87A7A8731CE88752D02E4527597BD7485D4B88BADA367D516EE4069E
-12625CD755DE031815AE82EEABBFF8563BD74A2A5430F4B084D7F10CAB27224B
-8A8ACAB00DD8B88D7A3B9F05D769D8328E46C1345B7BA0DAD75302227CE54C2C
-AB035F296ADF6F7F7E7CDE3EA657F1244C2370C6D95EE876257AD318A92D90D9
-4249B2EF5F001B88C41BF9C9424E9904A28951038318B55BEDDD504F111622D0
-0F9D23CDB090D27E1A7B0B7DEF03C71D5F90523852FB2530A4832382EC10EDDD
-EAA73D2C1CC08A53F1262BF636D56748631DEBE79B173EBF76B6E2334BF0D855
-74430668E6E49160A25FDE5DB59FE6320B10D00AFDAA328324572B6F767D98D5
-ABFF8B9418D51864EAAAAAA2872BEDBA9ADDD7F24012DDCD6200E5B322B2FBF2
-3A37639CBD9918FBAC813DDFF7A330CEAF3BBEC787D6B404C88E22F2EA4B0F88
-1260BC45253FDDB713D260F72F074FF766A841C7B258F281C092CF643013ED6D
-F4C3DB7750E93E405958FD2DFB84FE26FB582A61A029088B6193560370751546
-230789365755CF9412EE72731564C80661E5D607DB15823CFD57DC71DB65996A
-3093A3328998FC86ED7E2214BDAA5D70F0DF0D54D0E2380B71B9E321131F247D
-37AB1EE17FEC0ABCFC5906695B15B21CF44DE062BDBC4B9088844D4F0E39E071
-0B33110F36C709E62F7129C3089F2C235F2EFCB1820B54FFA88F157C0CE08271
-AF58E9BEDEEB16F461B77596D9FCA92F3ED5B751FC0C0312769C23E85DB83BA1
-A1F8D74BC27276BD842D5856664582B3F5414E2213E382DDD8EC2EEF31E79B95
-C2497A33906574377E7FAF03CE9131A925189213E7BA883D30BDA2D03A696FDC
-E62DC5B68FC604FC6E612BCDB18482FDAD3EE1E2E0ED7F93C91C81176D33BA53
-6CEBA5D8ECDF838640ED67372D1B2943A94D82DC93AC338C57CDE651DAE7C234
-03630634D5C816277DBC9EC71DC0A862F19B1756A11703DF5DB91E110FDC7271
-C2EBBC42F233B575752573E7C3DDC8EFC73A6B8DE7E6B8D48352C3733CB9635C
-ECAD66C97F2DD346865CF018F46B4565883834D989216E3CA25556E1F9E98930
-394B985ECF798743D8277C2AB8DCAC16B483610DB7C3C90F71680D807BFD5493
-FBEA7F3FA4293659AE976D036FAD43D509C2DBA3992DD24DE8A99BF1FEEE7431
-31705015A098AD47A51E6D955DAA1A4B03CEA003E0273BA5671F7F1998238D88
-D0DA4262B134AC9003BCE375A75AC93715F8F2F8A628409CAE9FF9D119301B3E
-E8147F1DE16649984430EC4BA948BF5C74111D0F8056383D444F6524C7FAD4F8
-6A4FDF445CF8EEDFED560A6C262E24C0444B2AF705926A9E0805A1911F0230ED
-5B2030D956CEC14A102CF4F8E8C3DAC74ADC16C169BC4A4DE75DB3CE82376254
-00FA86DB89265200CEB4CC133B2A993AD95C5AE5A695DEBB05624CEE6DDA6B5E
-A089344AFA90ACA83A413762F0153EAF7DE15333BF9AF6E75EFEB3964D59E183
-42C5E52A77C87E85E2B3049508C00ADA5D6F0A8EEB2A4D71DF16F3DACD580DD5
-68C68834C0778B469ED2F8C833A1BA9CD0DB2D6AD88C506F5BB23CFEF461D30C
-ABF3164B702B433E0156590C1FD699268144766D3AE1F8E582ADC19B2D4FEC59
-0DDC8270512D3318D854BE1BA7F545AF9D9A0F3B59710609AD7A624CDCE04DAB
-095A54E8FBBBB1987D01EB7CD1B6BEDCCAA46A07077655A73707D6902BE02565
-EC7C6145AF4E52D1073E3DAC7C087A14E9631570901BEE1FF3255B8D501384A4
-0658B67909EC2F6B90A1BCEFFA9D74C1CF5570D7EA96391CAB7CA4E0CFDDB3FB
-C3591EEB49AB7B154973F0EEB9879D53DE90351F0F76BD90764ADE187C68FEB5
-AF1B4B290F2F0AA66E1D138B21C1D4EE491ED26EE44CE490F326A0407B0FA267
-1707218CA4EE1FDE220835476614DD67C7845DFB243FD2C5D856ABC7E97671AD
-B85BCAABD214B9D9BA81B4E925A726A122F1FFF11F9581A3F08645BBC4197B27
-D40D2A95EE1DAFA9C8A6157E0E79866BA40C0702B26210725AA2239785D9D9F5
-017047AB62B57F6744B2D4A5D642E971074A2FB1F8809AB65A52E96C51415FC1
-A5286427DE8C81BBFB5A218090595CC14A86A40ED9709D5752157EA673A4084A
-93BD7E215DBD1148BC140DDC68FF8F3C1AE10894D8BA9C4A3AE55992F88429C8
-DD9B8247EB0D653FFE69165BE6827825C1F88FB36E69F2A8A3CDB6D72FF96DDA
-072C65F51A898EE82590678C43FC184B532ABBEEB801F0143111C9941F2B1C3A
-484DF4C0AA7E738EB2063278EB7B70E1BAAA88C50BC462ED449B66E4E0978C1F
-7DB04568AF5EB412C3E41BA22E8273C1996042DFF01F9702B676E858F4FDD430
-F6B417197D8999945E9A82DA43969580863825D31F9D59A0D87D0F313FE2C28B
-C6B97A98DB142B88A45943DD49471C3424BEB1DB482E9650B0B92AC70FE8845C
-DA7716D68C9C2A14BD68F379E2C9DBFF92DBACFA705F328AC2D196F472A24ACA
-244A17F00C82EF653DCB067E0F3762CA52E58A5604D29EB1D56B2EB40417E2E7
-9406035A253BC2F539D5B09ACABB048EF1D689A5889B9C5FA6B2E0E2EDB9599B
-F6F4B355E3733E6BF9B21DBF7580E52526F2900F980B3C28062A33A25CE7F6A7
-4F13D6AAD9327ECC7F3F97BF15C3BEDE1A0DE042E749F648354D061C3E52E7D9
-F376216E4BD2B782A5AA0D9FDC5551CF660285E4CA7363858C51DCC79F66072A
-2FFD59D6799BC84EDC0C5DC09D9E40056A4608B235F1357D454ED3028322AB8F
-DAF5CC60F8B5EF4E01A8ECE97C491D828A87CB85D50CD56E4A7BB6DE2315CB0B
-D0113AE20B4EF27FC486B648C3C0E6F69C1FFAE0C766DFB8B16611CB504FCAD3
-06B8169190CC5F836CB68D7CC34A8434BDDBBEF33E2B778884A8070654378FB3
-744459C9FFD348B2059652D47335D7C864619700681D45A39F068430F8DBC4F0
-D1122FCC17182216F62C82A2800FEAB2247A07413B3809DBAD5A03E1F1968BBD
-B41B98142B9B0403D882A3A70B334F0365353E51A7FE4309DE4EA9BE3B695601
-3CF86249952A437666BDFACB7D272F200A64B9C09A125287FE2779E950687EBB
-3EB747653C8D95758407DC3AD8C95AC3D2E18994156FD13CC03A6653EC7A2993
-F9893778089FA63708B0E3942A226A5289090412CBED2CD71BE93DD4CC56F095
-2E41EB41DE3CA0F8953C28C3285C57B75C13CB8A7E588054BDBF3B5AD6E86965
-4BAC32C54CC88E2BA882A887BD84BBC8F15DE986DC2118D2DD0A0E154EE11815
-65B18565F5C97BA8F5753324CCB5CD8D40463D909E832CAD28E62AA2250D8DC3
-120252A10404200CEA8A2B67CF44676E6003B7FC2AC00ADDE1227724B9E8999E
-B5A4E94223504B52575111E828E4AC03833844683B64101AB5D91EFB4CC8A822
-72C394436D8930F1541359194EAB8F44403958F415678D3EACC777022271EBA2
-2A76DC2E2E833B426A15D5AE648101CDB8116D353A837D466E4311DD86F1D921
-64EF76C5CB35B5B0E4B8B1B93861E03C1B635391276D77ECFCF247E714CC67EF
-72209891C418D1472541D68A6761EBB440E360881E993D3FA4E29CADBFE733AA
-7C260797DFE27403E70F6B1D2E493A1C55B2381AF9A815808B5081231FDF30D7
-CB3A1D091A4B6887F9EF692C736AB5770BA5921D48DB3F196A4515FEFD4317D5
-BCBE5394CB5EFDB4C4A972B669C294966E5D76171CE5B903E4D8E6AE50C5C075
-37C42B59E74CF491556B618191C3489D11288587FF05713B18529C7C7DE1B9FC
-CEA7667AA32EC4F02F452F9F20E54C89E071ABFC4155ACDB4DF3900EAEC25386
-E14C88BB174890A966703ABE3B6EE4E229882DD0543C3E33025F072EECAC34A7
-7945C2D58A721E42FE71F1A2CBC59EE8278EE39F6BFDAE2AABA5562E0970991B
-75A3AE1B2B0CE3B8BA0E32F6D281990054BB095B9E9B128D54E3492C08380208
-B6FD878894DE6F487363C826F26F5B810314E48E86C933B885D21887ECFC7FA7
-711F256D819274209A0E08AB6E147F7642D07C97F92E70699D88ADDFFC941A17
-E521A3D5E3596491CF5D9BB95E483C353441CC4748A59F9E49C79968AAD58F19
-38FE5E275EA22403CC4A287A30F7B616CD4B31519AAB4DD7237916906B59CBCB
-C275E1E993B33AD6F76E945DD4CFC3CAC1BA88E5CF9D15F03212207182AA054E
-9B53A2469E76F128006747A7E3E95720EC90B43BAF6E016205435EA4AC8C8303
-E1E41BF20358CDA809B88C72AB0C2011A6C91A884D542D92971327564E175217
-A40ED9EDA6B45192C46B648215A556591A5C8AFB8468947B8BEBFAB854983A44
-CB88DD24D3C8920383944E2FE13C18A45D4A5507110C61FBA11945DDE8F0E5C6
-265F450C30BDF5D3C95F40573B139857539F01E8C804BDC8DA9306C133E7FC0B
-66F52013A1D7C4BBF2B2E1EBF80EC769D802C7117C06AE917206ED17D13A3E95
-5C987FBAFDF8B1B49E00376E8B4D60E9F2B140267A587BE8D14B1A0249C2B1DF
-003533FDA36B565ED493CD1A807E139F6C2CE7148B6FE62615731CDFF1EFD40A
-A79DCDDD7F4F4CA0D00DF277E7A38556B684A32AC4A8B6998EF6C1693F043E31
-374B86213BF7CAEE905D239D358FFCF91EF2F34DF7E0A1A16832A54640D42610
-8C77E6BDB82B862426F153B0C87170D31DA509ADAC29EE7A614EF359D584CA36
-787DA85840A14036378E25A53F907D10F7416D5334705DB9A111553FAF2EE20F
-9C3A0BFE2D3BE88C28899043C8293D012CD8E2752F30A883C2287D5AE64D00D7
-443218C7F45449B4C9B2BCEBCEEBAE0AC8934549F5E27BC01AED860754AB4962
-12C42C1E066CE0B5726331F64A1B6A738F4D79388076AF52C46CE481988B5341
-85A8CFC7F9ACB1F0647D33B762CCC7C34F91BF607940DFC09040775AFC3FAF6A
-41E89010D5700942F78D5F6E159CD13806F1F62C28EC0BD6F40E4E812B50F088
-A20C82231D47C911A9F4213077793947F6C8EA53BF2763F75779BBFA65A75E27
-791959727522E48FC28B9C649BB0AA1DFF96D7681CE5C8A42632EEC5CB7405FC
-167DAB24900FF3CDFA2FADEB8829283B73CBA2B1A95B483CD3E6F02C693AAFF9
-9C09D3D2DC196A6EAF720FDFE7C060FECB0392610B17EC0AE65C72D89D892694
-99CADF5E3F60F6571E29EBA897831B8AB7253557713BA2529465C615D848A1CB
-57633090AF2993CF37E19A97094B8686238056F22AAAC0CD81034661B9BFF73B
-18151C4DDCFCBA332283CB1970BF1830DB778E626626DE94E0A8004E5FD830CA
-93E4BC3607809BD56C75B558196999C92E7325ECDF73AA32B49C49C3C5FE4B95
-7F50AC40FD642A52CF12F3547ACAC754EB8F7164FE5624BEF7160B14258EDAD8
-E26A181219321F2AA523CFCA7B2E12878A5E242BB7BA5C9F22D0C5722766C564
-306F713ED39E883D2A7ED68A0D7C7EFD64EB39FC189A0C7FF8111660A188E19C
-DE642C8F2B0D284AC2B52405206A5E1A449319D94B3DFA20DBCBC522B5D67431
-E3A072463B59BF356F924434B5AEA53BD49298D25738AA79AB1E274F0A7E9330
-2982789B56EE39AEE8DF359C968C704C7D3B8FCB09FFC69587EEFA7E39DD5370
-FF513753E7518954525B083BFA191115CF310A98EF5CF0C2540265031BCC9694
-8C6A3F1A053753838516389F26ED5D57BE285F92938D59B0DBC6047C0439E127
-55CF071FE044451EC5C557F6CC29D8C5256EB48AFB23A0CCA88307B7E8EE1E45
-91B46854300FF369C6D84072D4D1625A0613CD330AB55B0B326554909D57C7DD
-73422A8588FAEA378B917785E75F25E4F4183A36AE15C7FC2C3E2C6E890B113E
-0B3FEACB2A3C5ED2F7E5BFF91E8E273869D4143A954E6A5C1012A2FC7839A878
-B86D878370EF71ED0A7555E8858C68B1468E130C1CE3A6199D93FAD963AC0877
-1981237BF431B598966143C8DC7F3B802729DF288A39EDD5B06F0F808741C6AC
-4D59EEDEE8655A6CB5FFFD911D8A942590E4BA2709403D0741C70B0FF9FBFA7C
-C3FD928B5B265DEE100172E5E917F273918C7941AB9071E1C3EC631AC555CE9F
-35F88068E213C0F9A4BA7D133755EFB674717B4FF225AA16BB0B7A930D7F4474
-F2C9C784CB7C8C0A2F2201B57541D25DB2C2C8EB11D172306F7F912149C2E61B
-40B0A570CF8A47F792860E4CDCBEB9A05B511E4903921CB80EAEB5A3B6567E14
-71229E7AE16210B7F307E1FEB739554261547BFF5B559B88CB5BDD64124817D1
-AAE0DEDA95D830BBCFE0AE34A90A70E42BE5E9A54D420B7F15D678425F1F7408
-B0A45ED88BBC61FFF2433D65AEBC21CC21A454F416913AF8B4272F7E20CAE1E6
-0AFB2D16F862DFB2861CCDFE73BA66BA95636004349740C2E9292EA3C326F077
-1A69BE963D955A35B72920D063127E3C8DB8655C089312F094231517A9198B70
-CEB0F01B22DD451966D72B2152947AE928D38F39C34EA1A6DCAA758EE660700E
-351A8E433028CD6ACD63B6745E0F501E72E3E3A001696B500F83B67E027E47C4
-36B251893D87A5B646C1BFCC94F2516C5A82CA364FCD3F128289F1DBBD0E1BD2
-8D641FBA92924ECDB132C1F89BA3650DAE6E68BAD856CDAC195A70FBB0D9ADD4
-BFE9194C5C2C525337AC29B8A55D56BB2BF90C004F1B5B3842DB2581E728BFE7
-4112D349EF2FD56CD145DC9CCE9F8364830E466E60F6F437EEE13DFC07D8009C
-ECF876BCF50BF9C60CC60544EBD3BC42EE61F0DB1ED1EB920CD367149B52B2FD
-353B4ADB2C18A087AA670E492BA5FAB513AFBE786F2A729D93F28D282A2A1945
-3A0D2565D395FB4A07E97F04E1A50AEA7EBCAB7D5DABA2603BDCA8FE770A4012
-114B736C19E1649153A74C74E7218A0A031EAAFD8420A712DEB1233036455045
-18F9902DB6390E82EF280BF3C104B4E25EDAD22880D74EE456D1E5225D683D5F
-13E8DA2C4D1A8A1F456D9A3887EB3D9ED71BBE682C7FA3AD06CE4F2C554DBB72
-71FCCF5A8D945387E9FA42BE9D774C44FD296270FB67B1004273051EFB74C2AC
-2E215CCEA6F18AADA4EE6B94915242B113F094ACC5D837566D5B49C51FA2012A
-792357BA0162EA6D04C7106B60E25EDC02CC4FDDC90FA314E4D9DD972536C486
-7A772B06B55C1545C98E90E8104FD7AA76B0DC12C7331859B6DFD01FF9022F05
-34FCF3DB906EDDF0E8
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMBX10
-%!PS-AdobeFont-1.1: CMBX10 1.00B
-%%CreationDate: 1992 Feb 19 19:54:06
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.00B) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMBX10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Bold) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMBX10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 87 /W put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/FontBBox{-301 -250 1164 946}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82
-7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378
-77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18
-2DB0E39997F264D408BD076F65A50E7E94C9C88D849AB2E92005CFA316ACCD91
-FF524AAD7262B10351C50EBAD08FB4CD55D2E369F6E836C82C591606E1E5C73F
-DE3FA3CAD272C67C6CBF43B66FE4B8677DAFEEA19288428D07FEB1F4001BAA68
-7AAD6DDBE432714E799CFA49D8A1A128F32E8B280524BC8041F1E64ECE4053C4
-9F0AEC699A75B827002E9F95826DB3F643338F858011008E338A899020962176
-CF66A62E3AEF046D91C88C87DEB03CE6CCDF4FB651990F0E86D17409F121773D
-6877DF0085DFB269A3C07AA6660419BD0F0EF3C53DA2318BA1860AB34E28BAC6
-E82DDB1C43E5203AC9DF9277098F2E42C0F7BD03C6D90B629DE97730245B8E8E
-8903B9225098079C55A37E4E59AE2A9E36B6349FA2C09BB1F5F4433E4EEFC75E
-3F9830EB085E7E6FBE2666AC5A398C2DF228062ACF9FCA5656390A15837C4A99
-EC3740D873CFEF2E248B44CA134693A782594DD0692B4DBF1F16C4CDECA692C4
-0E44FDBEF704101118BC53575BF22731E7F7717934AD715AC33B5D3679B784C9
-4046E6CD3C0AD80ED1F65626B14E33CFDA6EB2825DC444FA6209615BC08173FF
-1805BDFCCA4B11F50D6BD483FD8639F9E8D0245B463D65A0F12C26C8A8EE2910
-757696C3F13144D8EA5649816AAD61A949C3A723ABB585990593F20A35CD6B7E
-0FA0AD8551CEE41F61924DC36A464A10A1B14C33FAFB04862E30C66C1BC55665
-6D07D93B8C0D596E109EE2B1AAB479F7FAA35279ADB468A624BE26D527BFF5ED
-E067598E1B8B781EB59569E3D0D54D8EFAE0F3EDE26279776ABA15341E42E636
-6E02817082BE6FE0B04249A4840C11F95F8ADEFF72173E9A5F2AB2F62C427E5B
-DC010E18641EAC906A5EF0F9BC2108062134A7F10956219C5847C0D82F0E8663
-12D963E012DF0DD899911EC5D8096F80B49CA3444CF1294FBFAB57DFACC9D01C
-46F3BA2F3D1C14EC30CBF83E5729F1C074D4F1665405CF54722827FBC24AEF08
-F6DD0BC6A79A2DB1FF539454E8F5D1A42D40CCFBC093AFD3E57973A009095CEA
-B91FAFD236C47F453B38DB0067907A28EB5E9ADE87A2181F1D6DE4E183631716
-C21F0F952E0666AC74371F8B5C888DC44FBA5607435A619684F502CF625663C7
-94B0DAA79BE8E129E7F5C5AD1B7495C1BC9B1C759867467F55148C7FF2F914D8
-95218C4C3C2D2DB3482C21EA050F23D6A7A056B172EB210276CDB3B1DCA47A9E
-8B03B9BADC72F42D28ACE31D0633A0A1B22254F37EBF0433F0EF1CFEBC1CC653
-E3EE6D197AAF36E7FFCC75FE1811BD701298F763AA466B7843770F5F21996A50
-DAA186F387AA9717FEBF91992ED5C4DED8E2C57F0C29F9E3C607A0B528DEC8EC
-4908033A0EB87FE3614C55D35338F758606E2B971F4F1956D9009904DC07007D
-FB7C7879D19CD37FB26769ADA21348B058957261B5A8CBB91F9A4E6BECC2445C
-BF9F64DDD464C6FD2F3E8C89A40CA8FC75CBF6CADA6A6B7D2C63EB5714D15C26
-6E5AA387CF1587932E216BCB4E7391D63F1469206CBF2E297124D8B8C93B1418
-7855751D9C3112888B1E80AAACA230A30728456CA5B1AA59E075C5B534895B24
-F7689D6D6A998EB98A49CE1E2548C4059539E501B40B465322E26B47E2D64843
-E6E675F055A97BA488249709434A12E8F25CC476C8A43944BB37C25EC841F696
-0202AB3EA1EEB657105CA1EEC7B3BC1860F59E1D517B1EF715E9E7946401926E
-D0A2FDEC1B14931699A266CFF4506DC74CFD11878E9675664F7B0984F807CBA1
-3F84CDEBCE60D893C887BAEEBD19C68D676727B36D31591AFD543F60669891BA
-94B31E3E0267301F74D799F5116296B883D9940164A8FD9C5EF6BA97D75949E2
-32995ECDC83C8B55E12858B4AF11CA04CF1DBD9E89D9450AAC2B8E733A702D27
-8B5520A3577B7F8EA6A1D7B0B468262623D6C55D9BB33C6824BBF3F48BF10599
-42C77FF13EB7EB6F971B0BB2F06F856541DAF495B850AB6402528C284A4BA939
-65D7754A8AAE431D01DA7C7547C92F29A3D152A758D6237E52C61974DC49BBD3
-AF7E01C6CA74526E48515B5B19D8A96E67A403F8B96C699F750DC36C46D1167C
-C3B84A260AB5E7A530B8D23B99D098F7160C4C3C275A1F76ED1E167807C65135
-BAD8BE880A844B64A6DA80CC40FEEA6CEB6EEF1FD01504E1BC8DCE99225BC02B
-A4224B206C072E95B6A32B4CF6351CE1CCB009BDD15C304E566BDCCF714D2E90
-46B3DD8F3180A0FD2C814936742F96B99D6F8853F55FC596F782FFF3666137C7
-91642CFF9EA7F703E67820742B44104DD9355ECAEBB9779CECB2D6790A84FE34
-6194D3AB97C02C4AF635DAA0365BDC2B8FC811A9676143FFB839C488165F941A
-6443A6CB4550F5399B1A4C60B4992A0BAB139F08EBE8FB4F072D208511888489
-27142135141C6F5CCFFA6A2494AE9985CE6B8864BD50B9CDD2D9C19A83371CCA
-9626C02A938CD95A052DFD66C0C76F807732F578B9FA4057418055F9281787DA
-8CA227B2A7A106E4BD09BC0D5F1D14D5C325B0CFBC4B2BD7E64037896E8C4D37
-CD4B78191DC36999E7AAA353DFA73251BB85006018BB901DEDA41D48339B6CA2
-DAB70C8465F78ADBE36BB42DFD2547E9A18D01FC529B4EAE6BB1EFCAC5FCC50A
-4AA032B2FC7323488EDDF56A77C8C82FF09A97212C295946A81058C3266CEB83
-7F76EC815673B6449D53289112E3A09E874E0A75443AE4AB1796D3433C7AC5A9
-9E90C2515BA532B1037DF0B26E8A900888D57BA61CE086D8D48140D648BC4EAE
-490CFE2D9694B7BD9C45020769AAA8C3CD90E1283F2A3F480DC7FB575B8B8435
-FBD16FD244321C4958142323025076A52067231FB64D602DC386E8AC85B76B99
-D702429C8DF0A17E51670DD63DF7274790D2464AAECB288BF7A02CFAECD3AC61
-1C5E6C819FC5F03E8A98952287A44DCFD9C9079DFA9772E94E768478D3632AFB
-23E9195DA4473F141EB705A949F9F7149ECB0315EC56DF03F135E1ED0EA6A046
-AE61A8E88CF70A59CBE42C4987414F4593F53C98C8C7C82AD4D8F339E426AA61
-B207E51BAF2323771794FA1CF77BAB933A36EF91733FF412E7A621A8DAC07A96
-E8E68E22388EC51C61ECD1CF6E1812D894A9FF867F97F9B3A15EF0785B6AECAD
-B4C3DAAF79DE59055A270A86A4C299906C90683A8AB69F06CC473C6B0E3470AE
-5596DCF72CF801FB84A338C1BCF8AE0CC43D3581C628B5AD3EB2D01CC89A6845
-D1A66CDC12F662A4D9D73B1DDC2978E2B68B4F8B8E7B4389F5448680ED77BCBC
-09CF4106FA91DC27E02A05747C31DBDAC47797CFE9452C43F6178D2F835EF7F1
-2DF381BBB65A9A2D390349E955D8A2126B17CD7431EE7AD45CB3B180049520AB
-90EE579C057019BD152D9CD985EAD1D4E111BE36DE5503B7F55D95FAEC4A74C5
-D0A61A6AAC800729DA9F7F8762F6447A5A30B3591FD624C57CB42AC85A3DC6E4
-3884E778E4A76801AE7537536DF232DBCFFDA5B777784EEDEA44B184CEF28352
-6F9FC878EF329369D22C9DDB965615AE9551CA29E374332C3AB0DE815AB44196
-42F9C1AAD67133B5320CC69808D934491C1B963D0AC3F506052675A65AB37F5A
-948EC38216D618F4F18555B956E82914D5218C956D08AECE229685B190CFC9E5
-C8D7A4567FE38E03273C47F698EFBB2950A73AD8C07543988399C7F586760C90
-9B527CBBAB1F343049BDFABDDE94B472FC19B269F15D3A315883526AAE6F931A
-0EB3CAD700F88C29CE862CA43E43DAE03CA982A81F58FC879BD445945168326A
-04C5A6380AECD7EBEA3D0FCFE1EF1B7C310368CFC0EDB1D6E0547DCD5831CDDD
-E06450C1EA0D8345A0D17DE19A5EF92136C1F8F404825B82F50315DC696A921F
-B8B2FEDCFA3E999E494B57010DB57E4345C721B4736C55DA23671088813BB09E
-624BB63B38DAA68C21EBDF1F3DA652EB693CDE19C6FBFCF8FA9A2BF70A01ECF1
-1C358D5231D4135876E48E5FF1A4B9DEB14494E5A3282BC88F386165EBBA6928
-8E0DFF6D932D7FF591DF34A219D395561D905F49F89309314BFA91082B060960
-816C86DEC3BB0F6BE43E7F66782125B3925BA85D97CA2A1F48A3B2362777EE5F
-3D476B1A16664CAAA5E7BD51D2C890828FDDFC33CB16FFCA42B6898472FD698D
-D931B10B439675B5C003882A30447058FB4195831A27286F25027B10F5B603C8
-16254D13132471369A1800E3D5FE04806B8B445A293F6308F9C0DD0130CCB422
-764E87361242E7BC3EF8EA420A26B3F2ED9F1E03AB8CD73D60302389D6507AA0
-7356D610923699B603701A87D9E1C5632FA5856597F59FAE2CAA6D47D17A7EF0
-8D2F208F8818271BCC8896669BFA402F2002EA57261874640843CE0F1F8392DC
-87109F142169FA8C83D4FA1D2971CAFEC7439D67DA2A615ED0C961601078A251
-5524579325C7A82A13096F32D3EC76A67E2493A91ED24A6B2DAAA49951B2D332
-3F58B00ADBA185CF3AA9BE207725A0B286CAA61D076117EE225E7C66E2462A01
-DE9D2885C5E97C472EE04F692703CD75A55E846B5B3E9672541F3EF0A8EF34C7
-CE1FFF82424D3EC2836BA099781D08F43EBF74C7DFB20FFC208D5B0FABB1B0BF
-779B386917E1DF953E7DD89BEB6976ACAA42FF9206849397D61705835FB87958
-314BA40C37D62D6F02A70375A93056B55ACC9621CF94B19448AEA37D5B43D9BD
-2050D71C3BDE5B624EAD096F67327B37746C3D07B4B408A97DD4AF4C0DF7473B
-71916E53D2CE9A9A133FFD0B392B1FB47601C2A9D54D844B4BCEC5EF938E6D1A
-DB2A905B37908A8072C54D5737300302306A586F388368CB7A506296DA6C5E17
-2B8B54B9EEE6AA1E11557B26B1D62C5B4ABA17FA10D4AE0D9E1D3C4FE91D9E8B
-70B97F5A918DD46AED82E1E3EA4734BF45805D18531167A9ADA1ACBD8DEB48BC
-9B5436EC24279DC4B0710A0270A919C2E9722CC029AC29FC5F270B314CD211A5
-ED2C93920FAC054DB2524ED3F8B27B07AD7A63DE96F00FDF2D74D7957D3C856F
-647BF955B7EFDB0F01F9A64B07494878BDDDA08B63412234253C04D2AF94657B
-B68483E6145D7312D96F12C69E6C854394C377B619BAB9B371C8A9ADA103859D
-1C7BA93CD925C144D39AEBF2BA72E67C17437270992AD464626B43158AA7E7D5
-E8A25DD5D36AC2896D03FBD961432F735AD83F87C86F67025B749B4172AD9BA1
-6E452108889C5B1A3D656DF1B8993ECFF57C312F2B3B6DB4B8BC3C8380FA8681
-4C29470E19DC9E6A56F1D5D147D5D25FB88F890B750494BB9DB44AC231DD0CFD
-EB7CFB59F76571C86EA2B17D85B0FC0D2DF014463111C932DE08820B3D3C0D17
-92AC0C9F00427FEEB1F53135198538CBF238446341B9CFDC17646194583A3F19
-649A1503A7F07F5DDC20A441B1C2C70F38AD5CD8981252DAE9A3A8F4238CB4F0
-3975E0084FF6C31F446853CDBFE77B87FD7EEF60D57373A95C062676B4F79102
-92300F652574833B0D0AF2D92C214BAAFD656BDED35DECF617EBFBEA2E5A8367
-0198E4BAEE596F1C54B3ECA7D4D7F9AA9BFD5AD5A9D228FC6C6D1B7BB512AADB
-E84167C24B65291DB5814959E98A99931437B00AF36A30D5D98B17B278DD1D39
-13DF0B59AD0A1E91CF9B90CEEE1E487B6CD65E0CF3B3A74F2C7B8086B7270908
-F29076338AD4B4EA0D37C04856ABCAD938E9D4E9BD43BC3E13124727B2A085D0
-ACC979A96185BEAF79F042EE42CD352F37899A05176DEB9C4FBBD9D5B5A63D2B
-82B195936FBB29B383ABB647CD51E704879A1AD69C451B2B0F2A3327A67C0425
-D3A1AC63C0F73C25168E393C1767E9D07B04D7A2D1ED3BBCE1153123A8A1C89C
-64C6F53BB7BFFFB57040B3CA289669021C9F7800EF5F416042321D95DC5D225B
-29B23FA7EC5F8151A9CAD269EBF1BF9A4DD0D4CEB63988FFFEDB55A34C3AD692
-5334E33E7BD882A4ADA0D98BC2E7B4EF04587F2CE9D25A1ABA29DA682EAE7533
-52E0734E35CE7FB158D520EE0D66242703429DAF3C4D167AD0685187193E9FE1
-06EF6C3E90315064EB2EC2EB8EF53FD56012D7426D2C8BC229CD39723C339BCD
-989618B22949F6D4979D564D350D5E1300C71180BF74BDEDA4B5D961E887B357
-20DF075DD09FDBF469FC19981B48CD28CABB558C8AAEBAA54B36A6C303BBB215
-BB1C8B0ED96B418AF84C69CBBB60F054FA9B8279CCA8EBE8628FFF877217ABB4
-F2E1B8569CD2AA6B2224A275E6423E108FFD8508F17C703E9043476491687842
-5CE5795324D9B64EE0281A38BF37265355E8CC5D84CFAA60830C73271407126A
-BF9E48D4AC6723B7A8D54A8880FAB3BAA5DFB1307F7149F8BE635BF7C79721B9
-9448FF1170781E6A773AAF493B5CC7CC0068FF421EF4923BC8F7FC547191BE15
-5D45809DC1303B2E1C4C7A23A1D8161CAA852036B453D8D1B4DF62BD0E8BE7CF
-50B95DAC1C8E5844D4F18AFB129C71D0DFFF958BE26B57D4E57E3A0B275BDED2
-05E769FF2A073BC45BC3B2549DCE8204CF78B8950F38A92270F4AEA9FC428562
-60CC1A26B7B20BC6FB3B675B268138A49947ADD087B5B39FD45770DB5C10FB83
-DD18D7AB1C9EBB29BEC7983562265A1686CCD395AB0EF3C9748C5A33C2939D1F
-DC3146AF0F2E30B4172984B73A48341311237E974697D1EE03533061B865FB76
-D1C26FBE4E0CA76C8B3C278C650DDBCBADECFC3028F402120F1190AEE9EBC9AA
-A6EE57FF7082C113DDAFC9B094D4B9AF0E3405165BDAF284C478F7F10F294380
-ED8948BBD7AC87878B508D65797DC240B555DED69F8B883479CA5DF85F59F392
-93DD5C83334464657E7F5B344BD8B1803A42D4F3B365FD73D1237129A45488A2
-5350B2872598A5FE7E7E1C967C5A5E6533B85ADE0E855C6D559B8BD80E5C714D
-CCB04307AEDFFDC41E693F64CA3674F1CC113448BED653DFE02508C07D0B57AB
-FBAC51E87F46CD90ED99EDD6536E6BD9C5A12FDC8C38ABA2DE20D28E48911377
-49E573E47F6048A5616173EF23597922629BAF0577349E52F20E6F6D473C3AC6
-DDBBA3CC5901277D39F2EE81FF226E300A9BB0B5894C276F4718BE50EFEC1FF5
-8A2283EE27F5E199D62EDB8EA10C36020AF5312DED0050AA79D79F52F588AF4D
-7436B3555D7B6ABA5502645511EA6F215FEEA1D5E7790202F6125E4AC4164A1F
-B6A0C4B1AE9C25475DCDF4A9B34161858F7B7D0A2BA865C65E4BDD57F81CB8CB
-A04CC0326814E419EAFF3ADF468C654187F9F9E4E699AC891BDC68CDD7B6238C
-AD7DD458F9D2BDC35242631DF71A327A2BF6BCA1CC3D7236F8B9D615F5A310AB
-DF553AD76FBDAEF228E3619DAC71528B4842E9EDF753F3F9F17F0D0DA81AF276
-056B9EF78A0EBC517B40D1157CEBEF8B9AE4DC17FEF5AABD97BFA91A3AE70112
-0F637C128631161CBD9D4C056F8E2D3B2A90F48108BCEC3871766E242B2E0C82
-1E4BBE0E468FC1C1B7389734BF0E9638634BCD62B00C8ABF2691CC2DB6972588
-A75B58640CD738ABA1BA4C17D66987D73A5C36081894FAF432EC3847DA898C6D
-A4801F56CF236EEEB28C6263584B701254AB7112E62DF2AFCCE0A57D6D252359
-3609FC9E3721513165D54FD71A6DC7F2FC7EBBEB54659C0DD241ECF2CD6B835B
-D43C1840855A3FFDDF4A260A97C86B01111A5AC6BC55CCAB612E68BF59F3B97B
-8472B792F72B7BCFE16ADCEF782441D6B1ED237085AB948C1DF3C6A1AC5E548F
-1651F3EDF3C8D445109FBB6EC5AD5889482F4B73AE2540A4AA1B3CD153BFE497
-93E758F6B2E07C6436353F809A66CD6D9AB482E75CE2B55ADA22A2B1C55F2810
-875ACF9E3F5B9E49C476FFDE0FDA12E05942EB9C4C59A10CA4231E1A04DC03E2
-6361E285E517DD39C80C97CDF6FDF4B794EDF24B78ADC7995501C8E3996C3FC5
-CBE409478E6192F9A782B5B163252BCB4968BAA2B0C9CA3FC905492F9BB70855
-25CA8873DD1C994D65E74F37C56FEEB948CF5CAB1C6D51DF6C1E06B3DB776740
-6080D9B0EEBFD8EE81F607A99DA723FD58AC40C2E23B095A3B74C0282A8B1B5D
-03CF0FF89AA3F18CA86792F8AC6E29840019186058F9B000B7CDE938DF60F3CB
-C202602F2378C608BA9D002281CDB22DF15D4722ADEC41EC942F7F826AC6F516
-6A1943156FB0DB95DC36A30ADBD988846B0C8EC476E5DF4E536FE4B7717FE1A8
-5FC19A2C469577B609073119029A9AE6A82C9E00E3E6694E62116AFC0D7CC96C
-B645F7DAE1CBAC1FFBECE873E590614A13E21FD94A805561334767CE5E4FB6EF
-ECD1A83016BD9F6469ED9F1D0EE77BF5E88492A1E569A8D1A54B2DB47A93369D
-7E4DC9188ACB4523AF57A86E1595274B76FC566967989D50194F59F97F6F039E
-243A91094E3CCA88A899A347BF94CCC8A733EB2A9F646C77A2C2FF36939CDFD1
-4AC0BC711B00B35B6BE4017CC994469CAE8500AB667153C99E9FD5CD386F114F
-8ADC7426D9A1A229B604EC688610D0055F287739054F9BF7330C1716182C3A3B
-5B1991C09C75D862DDC48CA11361F38C387F7CD147122BAA0F7CB1C8819006DA
-7257789A3083A7C7349114871D8AF42677673A3AF007E9CEC3B27A63EEA877F1
-91C5820BA602AACC3351F64EAD99EF9D5AB7880B3949209CFB66A810673BB410
-73C7056D04F2CDC9457E790F649951B3AF95ED7DD5D9A97C1D7F6A5DD76A1B3A
-9AA803F712E73573CEB3A1CE391D276B3FC20E1FAF2781FB035D7B1098E9692E
-2E6909273D14F754778387B24C4CCD76DC6EFBA53AC2334653EAA12D96F986DD
-44B283C6370D191113A5DB4F972FC2FEB6C7B51F6A41665F544C8B60460842F1
-869D4FF7A64E884830B866A7609ACC4B1F17B4337EEDA863FDD72AEE54113C65
-53EBEC75EA24C5F65FA0AA7321D24ECD23843A0317ACD32D09B1F3F690DAFD5F
-0C328FDB63A9388B128ECDBBB6AB3C8D054D80BC3D2C6192960FEC592C295CE5
-503308B68AC6DE1FE8A0E6535FD283CCBDF820A23F399746BF54133535A5D7D2
-42A1BA10E73D90FDB75028936C4E6EC5FE86732BB869BE527E1074AC01CDF755
-AFBC2855A2DDC8B44AF4FE761E58B04E0FB1FDCEF4C45AEFFEC84AB88141D4D1
-038C6035009977652A3279A628CB134481FFD5281CD073714AADB87A8191A762
-912F238557F6A1825FC721BD32FF20E507138D479CC1FA57060A86C3748BC414
-9F475A5FC0E6096BF9C1E6946FBF9175C6F03D94284A214A83072D75CCA5FC40
-121EF84A9778E42F4D96D61B15518F855DC40A09A25B1221AC6FC13310F17AA4
-CBFF2950B4A6BD40E8DEEE0A0CE86A3C2314932C1C8D1651CBE2BF33C2A88ED9
-1DE9D87287EA84F2E6A4B9BCC914884B8305D9BBFCAAA91C52F44784F5B603CD
-3C2106E067669F67E2371AC3BAEE828D14114AD032F9CD2D7607AFD9D6C4D170
-DF7C005B7085736CD303E6D18C64488EB35A210BDC5E9BB3B20B55D4DF6DDBC2
-B1BC0099CB2C7CFF4DF3086BA81EE3309D8BDFDA4AA59727E8B5A7D7E520B0AB
-A1A123B776311DB50BF87E9E22A4C4F9A90ADD35397FEEB7C090A029A98D332B
-B44D8E8DE0CDA3A605BCCA9A470A965EF9F3192599F5B2218828A88AC877434F
-D7EEB17744ACF3C9E5DE73B08B1D49B517B8DFA306049D2F381CF68E47B6A85B
-2C9E6C72CA5C7799FB6C71A79AFE7F00F96B8C9AB952CECA3FD3EB815BB3EB68
-0FB79E838F1CF01790ABB471298D304B18037CB71F291EEAB1D144B7F64A70CB
-A1C754B12AD657D1CC0DBC66B7E6F93ACD9D5A8C7B36F959A99706B9AB5B3332
-7A1DBF66E13EE0E7F7EF900BB6B2BC14BD0F938E2E27E41FF4FFA8296EC1D829
-A58C7587E3BAC293A5FAFE95CFC4F8E133ED5F43A5FA80524C996B32C8E54B90
-C3BF4B3BB002D433D22440868DAA1061B9B95448F0425C138F877EF7CFD481CD
-15B29B6CDD5B440D64C4246FB79BB080CB85477BC3E09A57AB9CE155339F2E50
-5EF003B07A68B6769C8D87621A69BCA512B59192C7D06CB4461B9C8FB29C8319
-2872479837E3EE93DFB86BC3376EE661220FFC3F5283C00F043FC5AF4C089E91
-F602DF07DF62BB3990C59490CEF80B1D736811157BF54FD83DDE66EC3B040A4D
-E562EC4B502796F8602CC6F8C67A03FF2C6471A693143F57DBB5017C41998F33
-F6DF5B2C297C0C44C89C55465F7C0C2CC7846E7D3A096D7F6AC4B15D65704642
-CA4359A7E20456BE1AD12E5FE803C9F513912EE4584B522819186B8DE6BCFC77
-00F36A9CA7AF968675B0272A3DFDB13AB5AA3E6CB0B77E228F7A0CA45F45BA7F
-B7F065631BF416BCC832C278C4AE249C3DBC77FE7CC5163D06AE9771471C445C
-214E451884A7DD7E6F4D110EAA5EE71F5003A3FC9218EBCB2CD5E5C28BBC2FAD
-3F4829CB50BB5B91DA35CE8E00B33DEA993154537396EC1904BD155F4B01EA4A
-3F3BCD19E3F3BFD55A974A5518E622CFB06D525B8CA92AD7A290DE6D9FEA242B
-8B89E069868760DC9BEC1E42EECA652C0A1CB4C1763AC63A582BB15120BCD29F
-C1C5FDB0D353CF18385EEA4D99C8C69BC4B76921096870B2121084CAA1840CF6
-08AD34B322CE5C4AEAAA670F74E244EAF893134777DA2769A49767B49823AE41
-59CCD7B86F6B4532F672EFA35430B57871F768574A064C6EF9FC353BF988471E
-921B377B6DAFE54517B3D3276CF95E5772B619D3430E89F2A693E32A6A15EF87
-017BC9446751B38B373C62EB6C9287D2C1851634A833771ED7D17FEF8683B643
-17B1F717FB3CFBFF9609D653E407C05B23567A5BD2E624250D69ACD2047F3A31
-897740E407D6FF79F719270ADB6163C47E6F97987BFC36AA5C0CE086FE19BA89
-688E90A92EA796E87C4BBC45493FD57199AC96BBBBC3677ECC3CA3DC5310E414
-65091454BDBC56D276CC3B1904955A5FD555C7CB3FB3C99837B7CF398CD00C2A
-1273AEA37A40A4317A1F9519D725960ED08D184C2B42B2CE4D490CF870D88353
-7604CE9F854D134474F22516F9DA1D170AEDF6527C268D51693121D3E7D6F43A
-5CBF12758A3F70D547ADC3388F8DB433B08C7046AF624C08BE63437B247F6E14
-922B66AC15F172A23F71AAC52D95405D851381ADB28C5773304199135FEE8E89
-345C35ABCB6FE96AC1E85ABF190CA64D8872E4ABBDE787E59976460FC0889076
-4D9658B6D71355053D5F200D25ADB1E529D8A8BB547C7DA5F4DF91614FEB198D
-11A5B0ECBC8A9066C145A44B2E76DB97C8B964FE4E53EE9981D91814ABAE1697
-F003014BD58A125EE73C50CF278C4E7624B8387B496121CB8A41F13E076FC452
-9CB0962308EC2BA763565C6CD88AAB5EB9D499641BF50FB904152F64FF94147E
-FBF463E3CAAA3C5409007BBF6B8C60654EDF9FF305487C45FB49491EFEC6F8A4
-5E417E861B0B86610995AEBD0479824574D9B8FCA4875B43E4B89E6B3CC785B1
-E524D81EDAE69E2B71774210EAEF78326910A836405A87A37FE227473A034FFD
-1DCEB3468ECDA953BAD29F12DAC93653F615AFE7D374C7FFDCE9C15E52D7F2B7
-1D3CEDFD21059E9FF4B7E1355DE12E9C3B1E6BE7E4C0E28C5F4EE8E1514288EF
-A0476F13B17388C0676A16DFF26939319C14F72AEEDB6D4D51FBD5CDFA885E36
-F49C78A363D0849A956E9D8D8D6BF45AF42C1630F2F01925CB855AC9838E9A91
-8467F3E1DA6B4B6473FB1EF853593891E2095FE159C7AF24E419B743B135CD42
-E89823DFC5F316D927C3956376C11375371AE45C8BD02E502DFBC9CA56982B48
-B69285102C9B38972612B3DC8AA9C8AFA35830FBD3CB7C9CEF46AA860DBAEDD9
-841063BCCB67FC242D63014362310F3A6BEBC614E67AAE395F4285604CC37E94
-4CBE201FC1085D87303503E39CD9C338948287FCA7F351E2B055E75F497558EF
-33772AB2035A24C19D962E63397D7F9ADBDFD8EB3BEADF4C74E0A7B21E6240F8
-739237CA345BA42E0C6EE14D7087F655420E98B052199BEA5F71CF8B629D7518
-584B37E3B4DAE3B002B9F56A06D91A91DFB058096E4892C78314296C549EC7B0
-893EC4E3324B33E0CC412CA96DC4DC97AD7574FF232DE50AF0F2B581365EB7ED
-A354613092C87F6088D8B7A1E702282F7E8FA12A1675C88B4A2A4DDCA858C14C
-DA96EA3ACD45A05433BFC8502A02B5737D1F08534FD794A4022178F87A2C26E5
-10B4956A095EED54275C9B822E65D256F02355811FBF6B036E5F46B6F5EA4E05
-F3CFFB4D686A7A7501467F1BBDE90345A1CFD75C06A59A2315F35981338C1B0A
-65094CD2498E40233CE54E475A6F3E139D215CFC2996CCCAFF9B76FAF0C4978A
-CD54E73E7BF74C11DEC651602FA5B8D0D85E8A173599DEC761802DAB5157A40A
-AE177E59E1BFC4AF440FDBEAAD87E9E702214BC1A378B0127AA405F26AC727A0
-2046173A3016A387B2A00FEB03A1EB4001017193B9DA6438792983FCCFDE2D5E
-BECAD57F8CED5CB7002ED3E626B5477EA0108E85ED6D47BF044BD6C25BA9EEF7
-8E6A6E55179D18B9B652D8E13AC22A6B3DF1BC88F1FBB5534FC306D5473BF3EB
-57014EEFA1E8D7E719D7D17DFC71830FAE02298E45C13573C413E0E5DF7EFA1A
-C28B04DB57F3527364963B30164A58424C6907F7038B7DCAAEED91F0FAE03E24
-521BBA746344E36CAEC164EF0332475C75B2ED03459390C2BE49CDDA207A24B0
-BD764351D17B621D1933B2689379D15518775759A1091937EF8DC2D161BB4BCB
-A15624C7AD3EF06162A1DAC94D8B6C6C0AC49F95FF6C5C86
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMR8
-%!PS-AdobeFont-1.1: CMR8 1.0
-%%CreationDate: 1991 Aug 20 16:39:40
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMR8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMR8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 34 /quotedblright put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 49 /one put
-dup 50 /two put
-dup 57 /nine put
-dup 58 /colon put
-dup 65 /A put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 87 /W put
-dup 88 /X put
-dup 92 /quotedblleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-readonly def
-/FontBBox{-36 -250 1070 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BE10AC538E4B
-58C4B6BE0BBBE0D121DCD89FA1D8532F91EA374A83705EFA8FD4DFEB37C91DF0
-C1459A641899007FB972682950D1380B4537582E33C818CD46BE14D91C44836C
-F921476D1F55F6225310120A5BF9FC29E9B3BBCE29CEF9FF78704C59022BB254
-BB0981F6948E37682E172ECFFD060080860B58BDAEF87EE9CC9606838CE391E4
-144F941CE0BB5A49FDBC5BCB2A47011EF3E7B4CA1FEB87503D5CC5CC0A4BD51C
-D5CFC57415CBA0C3E89A334931243678CA19517332040320E2544F563ECF0A86
-542D89C23B40F671E78C8AD864FA543E49F43685DE66F6390C67CDE9CE1389A3
-A85EDBEC0A29C42FFF201BF642D9761D61E1BA6499B3EB61C2E313CB84E38ED8
-6F038A950AA7A3E12A60C14BC2A48252F1FC4A24049A52A9993FE1053401CE48
-34CDE4BD2C865DEBF6EF2E48F7C085FB8976B37383C9F8E3D4425417DA2F1DFF
-33A95CE01B3BE1CAFE80D65D56AC63CB2D873856AE925337292925402BBA4CBF
-70EC76AD6E5229CC4CB2B587DF328F780350D1E4AD579B4444F7BA546AC1AEE2
-C6E4BD774D3BF38E11F397F5439157F3CF809955C7927DC8CAF7D176720843B3
-6505A59181085C4F0C7D31E6A206F3C4CB427C031C459C797886CF2410745CDF
-4C24248346ECA2767CCC3A3DBADA103F1A6A7C94EEA4210AD76877733CA35606
-BDCD78C5A626F031B8B9E98D91F2BAA7ED9C2AB4954DA5DC94FC48C859BB5B31
-43131A021C9C903021ABDAAE0B20BD5A3B28A51CCA07D41E5A99C1F14072573E
-175F3465C772B0F4056E2716BE5E008D0FF1BA87B639E2B4A8F88539226E38DC
-732CF5B742D29C364777828DE30F57B2A019A932A1544E8AC5841D6782411945
-B76ACE4C2562028102372626A5A264AE3F13F746F3E478D83C447F6AB7304D5E
-5977DDF5C254E328F84FC29EB6E3010253BA4E6595364F15F06CA446F0B5CBE3
-578A9AEA1738D94DFB906593827521FB920B876CF9E89CA2E21AEF896492233E
-D81C02F646907E0532B5D646B64EEFF6FA5E91AE6503954A7B60883FE7B08EE5
-0648FFE45080B84B9563E98A3F679DE8E9BD3FB7A1B2F035549BC2BE6766F4DF
-A8400AE7A70C499D6C49264A77252B2D3738E666D7BFA5CDD9F1A5B203DACBE5
-F1EE7FF770A8A2567626162FC83143451EC2648AF80CC4EB48DA17BF683067DA
-F465A3C6D4225BC2282B4DC86217CE5AF2F731D07A56FD61BA12F7C298A3D7B3
-B1401B0A31D378D5E15135C014F563DDFD8476AD4A94E24CABDB0C1756F8AF17
-5715B2F045BCD1E40FDF22A58F87C593DDC28F5A1F53A089296357878ED76CAC
-A1E269C56FDA60DF76FB52F1950883B47A5E0DA7119ED98D56ED590AD19C1700
-34CEEB5576C8CEF59A22A39A026E0FDCF96205D452BC8FAD4D119E8E20DDD104
-9D7ECED52E420D85995B9F7969E560C7A49B3A4429891CF29E658D88D6AB6B1A
-0C2854552EDE7C2F6F4488EAD52EEA40EFA7DBBF91360A062B926B30B78AD6CF
-75F05CF91AC211C71A7317403461A525BDFF08C380FB2296672D864FA77BABF3
-D26D94EE5558F0985170F83730FBECC03E4BA0BBE3C3909CD9C520F05D8AD3DC
-77C649A03DF750A1441E67954670D427DC267D13D5C1C43E38110378F66F7C83
-3AD0014DB37AAA9E1F399BC397FF7359FCCC7CE758BC69EF13E50016376E98C2
-2CEA7397E8EB4F96E2C9965A088B061063D5D8DB68C96DD3662363A929CD947B
-CB477012BE5078D2C1E8B0179C57F7F67D3E2707067E27DB122D6563ECA39B2F
-1CD189D785354263449E0028190D7EEFAF6D0424509AA2EA43F6A53B95EE3FE4
-82354DB8E3F7B7833F9B55E35BCCD28F608D3A9D8C4B81E588D3A15DFFCF3B66
-4B0D156B223C61A568D8451E7E65B473907900B5040E3486FD2B0E0E0A5D24AE
-6D9406A9115DD0FC8F3B785CA4CB8E98DC1E7DF922485BEAD4AC9BB02374E852
-4960719075010F730A748A9E5B909A02CF7EF3EE368DDEC383D4FFB47A5096FF
-6139811F850DB3E05910EB07D2F04D7CA61FAC4DA080161127F1CF088BB0B9C6
-376B635B2C57F30F7D594CDA88B2ED752D395F360DB50269DF6FCC0DBEA85839
-906AC2E9FCD5CB3F003E628BE01FABCBDB76FB97DAF6E5F76F2FFC30FEA042C7
-2353540DE16611F350A256E31B3891A38F9ABC2970651A3E2E48D6817CCA709D
-A499AF22F1CEEFD30A005DA4CDE594F562135180985D21A5B180991E501F3CD7
-E46DBB5ADA616A329459559AF55E9C3C85BC89684860D5D9D0C798A213279CC0
-4AD06C510D69D922337E57789E0CD91D3F804341A7B803432621F3A166FFEAA0
-01A382152D1C61747C49C668B12D24FA861C72543FC3970F9117F454792A7349
-3BF873F2BFCAC89D0C17DD4898952DC1E69AF87B68043B385F1411EE9A879650
-ADA6501475945E5DAFAF42EE3E2FDD7868F01C17CB28A292DE35C305CD1A9FCC
-8AF025E0AA1FFA9A579E0672257A513116B346541F511323FF26F57D2CE59501
-84BB15C355D729B0C41C20416BB3AEDE66F45D6D6E98710321D3B6ED8E718626
-03ED3AAB1DDF52FAE18C29F48C6CB31735A0F45F4188A1AA3C0959EC53F7CE05
-757D437A569826D882AC4517C33FD3FAECF06F03FCE758F9A777C629C44ADD0E
-20DFFCD9976EEB5158BE2294D3691296201B19DD837779AA946441E673AA7AB5
-90BB2065E682F32A1D46EC589E3F0184A73AA5743765D6C53C137BEBBC9E01C5
-BD9F07165EB6C77393F4D4861A5C4CACB7E289FA428514C3C8045804C61B407B
-2BAA59B8CEE81512382CF039001F0EFAF69EC62AF9BA2A4CB53874F0D93A2F9B
-E74F9A58F9E317FCF8F82697E47665E55D518F607E6285CD826B439A775D4971
-D8EB1D2825633446806D7FF9AE54F62F82F5E00D2193DF1B23CC0A3323B8F6BA
-654BD4383D0B476E52D381B99A3424A7F6A5DD1F7A807531799899E8ACA483B5
-08FE009CADC9F07121703B6DEEA0284B941EAD7D53ABF0E172A4F6F4FF0FD280
-F95BE8E25E9C01A4EDC0D5AC0500A7AB8D99E5D7E7816BA87C9E913BC14D8FB0
-A4A145C0E398CAB10B7F281213F96B848C19FBBE3985FE439420277848F91C60
-E90EAA66922DA62B69A14648DCEE900D7CE9C87F3F375DCE4565BDC0D6B05CE9
-A418CC881CF0266C9E0FF3E02D1EDF4F46488B36595D534FDB419212E180E910
-507044EF09D562A557636D5AF6D1D6A4E9D6888AF4AC91402C7E67FBED2B88E6
-947AAC3C8840DBF58286C1B94FBFF1BE0732896A26F61F772FF979B667D4765E
-CC8380503610158EBB18002172D612EC5FBAACF8A724C7AFDAEB22CFD018FE14
-EC736E2D256FCC47DF8117477A7AD858BE6D8986F11762A775DCAFE44A81E309
-A16C619EBEB9623DFC1667C600409C30190113CB87A94512114E8A2C0105793C
-8A74FA831F05C81ABF13786372681E1B3892C648867E75D2C7F5D501520B64E4
-CC0BAA74ECC6A2E033047CB14D854E7A198C181E3E4DF06A5EFE9C6AB13E65D5
-2172BFE493DC0C75F6A5997A5CC6F7A622F3F9318B08F32C3FF8A7ED14BD9743
-58E8C60C45C858F5145459893011E9D40A667876F48633D079C347BA66CF02A2
-0F6B7A08159EF5F4D71D370E18CD3159A17988962F9764640E18F7CD34707E50
-D46C7BE1466703F4E5A76FCB59FD68C6DFB4A205E770FD1F11811B52E1A11641
-7720ECF4B11FD3AD44C2FB5E37279AB0C320704A22B8F6F70F53E0F47A619F82
-D4166E5B7C1EA0CDC1FB1AD52A6FED667D61A200E64A15D2C974F07457BA976B
-675764000F46AE8E91E351529562B217C9E9A3B93950ECF294996317EF4D929A
-81A8CA086E4A7242D48587A676164B7DC98F9875D14B044276FB4A031845FD38
-C47BE4F77018375BAC63648275B477024FB35208B4061A495EB1A9FC667DAE70
-F417AEEB931CEE0C9A435FA3BD20144ADB5473CD137430BF267ADA3FF5E333CB
-C80B1AD385E05F347329E68A1B2C7C0C05EFD8F49398922E9C6DEE3BA7198C89
-30B571D1B1AC79CD7390A46ACFF7AF92FC99CD10E9BA4407A2DB70D4BB1FCAEE
-FC662BCD66CF83B63A2B3A9923A56B0540B72510E498037AF9BE8DD385F32BBC
-99A202B137D4C540BDBAF6413877DEE14B26D58B357D8851CFB751DF2A2CE7D8
-F772D98DE7DD4A9FC7D4BA8D1DB4A439D57C9DB5F8F93D889D70E7716036E52C
-5A92CD4157C0BE9FDD4660414AB9F29428A7407AAC0D28793BE17BEB46D9A953
-D5D5F27C852CF88E50BAD670BD0847D4E1B167074D2964AA4944DB45B879BE86
-9C56BF924719799969C9E7DE3FD0196F3CD0586855C490C430DA82B220D8E86E
-767234CCAA939F9AF1FD74225DAC5746F3F29A8C89D001F193FFDA7580BCB069
-EC4A0F13D6C9D261F93055379E8E6CAE8359449B86057B2342CF4BD51787BAB0
-8F2E2277C7DE40A06BFA90C93C7F5DA6A3C71CCDBA9D944ED7B014FA426DB638
-1B39A364D6B98B631293FEDF6646F5D9E7B6BE216DBFA565907E308669012F27
-A84890F9E3D7B1BF61E831C8ADD8BCC441D02D964E6BD3128AE5030611AD6048
-66614FB904F2B8722DA5368D5E5FC7E1D60D20F2AC08B20E4E1FE618984C8A61
-391B281C55476EC56D1A51C1B1D39AF4A10CB0448B6AECBB9B014A233526B6CB
-005610C9228DABEC64B56D1BFEAE81BC1E9007542BE5C47E3B05CF109A1A6709
-54EEA279D32E4040370B58E33B5A1A1D80B395A8AB364C88C2FDD3F7EF449A41
-10180533589D20244E5E0A65C5F1D4275434E19B8AFB84DCA93AC1937C6C2CEC
-4A420730B464217660843AFFF049A99426D882FA2CC3680CEC254C6E4FF81C53
-4978AC63C602DBFDD81D14D3964C4739A1F3EF4B15C98B7A73D26BBF39F27559
-2AB8E8029F6E83EACFA1F8DA09CDF2562C002BD9367EBA5D682E5425CADDBFD1
-45FBE01862D7DE9D083C95502D03C779E8A51DF6131EDF12488396D512AD24FC
-411F248AA851B54E399B81CDBD605919771A4F3FDCEAB92274EFA582F59C7771
-10AE7AA21801548A13EA8532E0543A9C560C20EE3C73AA75FAFA795BA39372E3
-0DE80F5F47F7AB05B4F21028EF298247B51ECD3E34E0D4AE3C1303958F0CDB35
-6BE93BE9D3014161D81A3E863F7C3767F5D82284CA2605E43E0CD6C9A01F3DC9
-433CA526AC3CA43869D1E5AF320C19A7A034C03658C30D5A5A72C25B4ED43ACA
-E14D6B8C249D6E6D0C9C291CE0CBB404060E837A965A1F5D8937F681522BB956
-FA363C842256273A25E464B43A19B86DBF9EEAB1E7F70EEEEEEF3F93EF54262E
-647DF4701506F4B346EECDF569C85F7D03B29B26D1E8FAA28386CE07A9BF8E3F
-8DCA805F2CCBC55A6F5E32E50E32026BBCB128315E2D35E35EAB1E1C142D8C4F
-CAC940888BC1DB394595A3F748C9CFA2ADF493EE70A41C7D26556DFE9DBB6A74
-FB23C9AC863CB34BDCFE560DDF98D231876003A86C5714BF76CD3CBEE1052963
-44C200A3918E0EA3F51231515ED5449E9B8F06B451BA7B124F05634868C24D2B
-A14C0511EC27C28E836F76F1765BBFC3E9AC484721768F0475B3C98C775D5B70
-D9EC58945DDACA523EFDA41C4830A26E91E4C8D2006708EF956C7EBD7D19DFBC
-DD20A6598F6894791A6C032DC5E6540597C97651D50F83F6A430E931DDC0C516
-1EC297528B9D72B9787DF9D6C9900AFD7F5EA607F790984984FA603ACEA8D05D
-20560237F60CE521E9642CEE775EB04806912A01AB73EC92FFA64AA3A84999CA
-1B57C6C133EC4B6865DA57E83828B8AA2635B3EB57F64D2D90F9AD559E049FB1
-26886D577CEED6C370EB6A303057172B46F443FD4BD9FD0E0D50CB441D970151
-F01DF840CE3DFB5CDA9104F4A4B6634693CA32F6FB73A38F3173014D8E1CFE0B
-B163AFD91EA1D945AF548065FE55AE954FAABA468262E8BC19843EE3E11125A3
-CB3F59B3E32C6162D6F2C58B2CD5D28E87219F9A9A9722874A9B88911425E31B
-EFF198DF3480030F6ED1555C91FF3DB151E5A566819674659C25271450CD9354
-330C9B1CDBC54E4DC98861764E3675C336BB5DF130A43BBC7B8E2C5C40D16C94
-033DE6EDCDE05F232B3FEF61EC182028EDF281F42591D1F597B4E424F73BBB10
-F3EFB5F275E722213E52AB94AA6D767A945E3E82F9A217B786DFCFC19593A88D
-ABE66FCDF794E6356F991B754290088F9B55219AD3F20447B56716119A483003
-99E284DAA7321A4129BBCE1D9A58E7AF7C65994BB62D529EE7EC99CD1D1F658E
-C37052410F535ABFEF7B401D0ED1277CCB6E18179925F6E7001330F8B939F7E1
-605C63BE858882DE246270507A0A1777ED4245DD7CB2FC4BD49CA6F5DE6697A6
-CE05A3022C84ECCAE8F0F1500885DD835E13E5BB336B208CBFE1870F80D52912
-3F777D348EFEAA77DA609ADC6D53372F3E01182EAB8A05FC4B3DDE07CCB10BBB
-7441A3F2E4AFF140F6663B7DF0C96E804BF35AEABD1176D94B8974E199B6D6E8
-97D4EABFCD54C7B4629924F22C80DF1801EF9F8482660F5CED63AA229F225816
-5CEF2B6A12D736604089E3BC6F21E30A768890CC5DFDDCC10DFA1E614C4C913F
-1DBED33CAA775B1C01D58B30B57F26B9E6FDFC0F1449B5EB002D9D5B999F95FB
-AE0A1D9E7B8C7A7824463B841A0565EFE3F19F10920098BC0430A3A9A1898363
-8EA14F0A84D59DA321CB6A346FA3308AB7DB8A0BE4FB3FDCCF5F46B8B4AC9203
-A6428E9B510305140820AC86AD4BF419AF9094FD60FF3463DA0258C5F0FB767B
-FBCA4B62160FAD8D2419796FF10D8AD44DDD1CE8BEC22067D7AD5096B1E6B326
-3AA531227B02B0672BFB2ADF9356ECC541C556151E59AE021D9043B1847292F7
-E6E00F991FE9376CE92307A13C037C14CF1413EFAAC096A19C0A4B14B2089621
-81B47727C6014FA86F0479AAB63C4944D78A9AB967AE17F4F7BA746EADED5417
-D5BBD68DDC822C744432CCBC00587AFF808EC0EB5DB4ACAE9E55A18E2DBE88E3
-5556976658B4E181DE93AC670431D90FB14ACCC19B9EE95E7AA3317B9345FC42
-C7A38347F930152E7A9525561904F9292955226AEFD2CA05D9823927FD34D582
-0139F662DE08AC60D0456883744557E9B78C6A4F2E6B7535B3F5BFE1754130C2
-C9BA2B6493F612D4307F183D82723FB73653EB980A379CE58FD7E8B7D688AD7D
-CED57CF951D0B0D00671C9E0E25C748379A8BC89475616670952E796A1804B4F
-30D9A6AA145712D1C1859A87FE4C8EF8210E9ACFE5193261183D0C170EB03C12
-84EF83013710D350AA0438C0EA0A9D66F4350796327B12019E6B4BC708094ECF
-CD85AD6FFE5D5C6A9AC95FA066BB08F44AC97E8445FEA67E3520BF38024801E8
-912FAFDB543124BB8B03528F372B22FB2482D7667D57188118AB1C95B46AF0F1
-ADFF94D2E39D73DAE759928FC0D2F7DD00E854ACAC62B9D783075666A0FD9909
-99A6BB222AD272EFA07C9F4E62EA6E22B67C363E5AF7335CCF18DA0B59FB33B7
-2C352DA67F87B28AE464D1EE92E38AD396DABC9ED22CD973BB850797FA4BA155
-549F071280BB12C7A9B9D1834F32A3E4407963103ED244226E5892F5A2EA4144
-EFF6A0C4BA24BCF45B9366131D0C09D69AD50E1150859BC44E283EB84D257AA6
-F970EB9E48F6B60C8180C169626F43D5A232AD674B7438CAFDCA244F2F711FC2
-E50BE43FE379B9AB380882CD15CC1272450246E8FCDFB64E98309BE6FFCBFD43
-BB10D1826CA228C0C0331CA36216E680680289445471AF6528D2E3E4F6321298
-10B2D6AFFC5EAD6AA8721F46515473173C0040D5425E1D1BC660C864C5011FFC
-ED996B2083F5CC11630D64B5C7029237004710B1EF765667C8DADA607452CAC4
-60A1CD85AAC006CB60786D9F566AB7E9624D571B7388D5CADF26274C7EDCA1D1
-D75D054F5D931D7950704B18921CDDDF5CEAE257671F377A0C1ABD7597D4FB29
-ECB923FF12083BA90BEBC95E93B61193595C0BE7181ACFC3F5A068E6E56026F6
-984E01B341C01685E1D306AD9A42A7DD375704DDD345647989A6CAC2FA407233
-82BA30F71584586AD5F8308DD164FD0E788555EED6B1E8B0E4484893076D1D71
-182578ED0C5C5D4DB805B7C75FF92C7A1CC96773BA32203CD0C893DD592117F2
-DAFE8C9E1FBE859D3AFE11FA068279D7B75C0157F065FA16577A872CD1B2CA71
-784CAE81D720FFA3EE1C6EA6220B253FB088698CCE811D37C9668D2F71302F9F
-159C95BA8BC41BB56B7C584CBE6AEEF8D6716AC6B9C8BF657F340241FACB8B5F
-863DA71BC37F91AEF5F3EC379AAA07DA8BA900E45AC3888A1435980BA7ADB033
-B4AA9054F9E855E1973BF162EC3F4DC2455CBD98FC31D5451246CC88F3FF5CDB
-22880E3685C97149CCFCCF7DDD19B7AD61B46C8762194274F48237098AC5EC7C
-F2D7F56EB2AC91CC5275D7D0838BC76DA9E0BB1F1B6E88F439EAB042B3487A77
-3694AE03422D5019416920E7D95618B24B07A8D2EF7F6C22EC67F22DADBF1499
-2A2CD15EC4B518BEF37BCF67EE085B7FC3D32F56EA6EE08180990371E83B1327
-8AAB1973E6DA6188E1732F4D66AFBB39E7C21E1A6D299D87043B0C86F6811B8F
-A1B87646692587220A4AE0A91648F3E86BC6343EADADE07D89C674FDBF6CE091
-3C9BE0501AD4C13CB61B8985CC0C1FBA92A213B688A3DCCB1A13016E3196B7E8
-0B987D6417D7028DF1A94AE0B996962B085AF7584B0E29AC9EE2C22A7D124702
-F26855ACE2E21939D1746E843A679DFA46D7293F08CBC31EEA3D005D87C28B05
-D0AC1ABEFB49FFC9C5859926E7997A1F4007827221BC9077222208A7E6762563
-009E297BBADD0A33B009FDCB4EE02B6D1A5D4553C2A6A3FC4B1088E764F40A08
-59C9BA931D73143550D8AAFBE07891F64D4F748A3AE56F3923A8A49FBAFDD8CA
-22A757FA39E915E2002D1D9EB83FA146FA8FE4A375CD8D8B8BBA8F3054999F07
-67F4BE0292774E5B221075824D3D57161860763927D2BE57F82CE63D178AEA54
-24FDDB4B529145B32BDDC83EDF5918FB6930AAFDC21E1A16A8F64007455DE27B
-210CD374A3FD8291594DD90309D97D53EC23D2CE5105D54EAD696A035D72DC92
-98375DE338BC720E939F763BC5A3B9B1CA9742AEF605D4799E5149820B09A788
-F2777C9F485B2748E6DC1EAC03EBBD9D1160F679841BC8D068767A70E2503FFB
-F16FD289760BED0C149CFF778B006EAA6D10E2381B853BA57557640F76C44F93
-F6A3FD5EAC05027F2CADC059BADCA6B2FA2380C7E24F91633804CC32F93AFB71
-42FC3C5430ECF3C363E9363BA165507B1E631D80919D740C83048E788E27CE03
-481334F41BDA50EA0C5AC08E45657210DF5E9E9049C99BD86075F7AEB96C1DF9
-812339D5E95DBB961A6CCD4432A842AD176C0F11DCD32044D5D4C3CD870A9C19
-C2F8F8108E94033960A12FBA170465E5BA2ED2B427B5C4259FF8D51248DB80C5
-778A7DC0CED69DCE784AAA3D3FB236C8CDF9ADD9E3A8A0566A15B95481D64D1B
-3361C657A586B9E38AB0E98C6C67108DC7BE7413948E4488A1EB2E48F5111699
-3D5655D6B7F375FF90DC89490ADE36CD53B969C6B1491F020E70F926A4002F58
-D80516B0604E12A9EB0AD9F8369D90A690F390475F046ED82837106B989B081F
-AB718EA8337DAB429DCC126F80E23217C98DD8EA3449A73C66E6E2162E7C3475
-739AC26909A195E6FD34821FCD52FCEF60BAB85D81031B93215BB137E4D7771E
-6DEDD8C0512406BD0509050F499B20174F694019D33AC7B9923F11F9EC9EE79A
-75DC1C6E23D78137543F3F39040144A3AF04075C8FCA201A18FEDB3A9CAB10C1
-BDC2395425B27631859D655AB5E00AD2E7D044243AF8DD4AFA7E898151B94AC8
-58B588E4E8C3A8EF78DBA31C88CE8EE5B9581B1894876327366C782E52A05004
-D14CC443A6A22493C70D7B32BBE8FEC14DDE0DF75EC3EDAB52A7D5AA1B41AE09
-0279F8AFF104EDBABA8BCC9E461E4FEBC5CB3D2FB012C2F0711FB4A12CF7E8C1
-E973D8C32EB71F362C6743AF79F86A772854DE6B4FA36ACCD814A7AEEE7D6BEB
-BB431B064212DB00C054AB718D2579C22E81A6F49C76EB7382DA8A1764E04A74
-C67BE4207D93279A70240793BC6A5358E97D119B3F9A6F7DC8858B22BF8666F3
-91C9E444FF6EF893DA7454AD98E7B0BABF9615205979A8A69CAC43A9F69233F1
-BB922EE0DA52E8F41F955AF57586DC3BEA16FFBF55033CA2DD8F0C55297FB0B7
-E6CE026A3F2B08573DB1E91A34AED33429680E544A30108C90E597E8BD39BAE1
-75C4064951CFB38F1A64AB2AEBAAF6806DECE33488B580D9F9647EE41E8F9B0C
-7A199225C9174D025B23A158F4F04D76B6BB9F5B78DC168DA7874426EA616009
-9BBCB08948CE5FE807C0979F61F386576329955001A680DAC16D925577DC20EB
-E97243D030BF16DD5098275B6555B366B59989DB8D79D509D5775932DF6845E5
-4769CC4716952EE82FA2D09C4C419137B84E48EA64C7E119B43FA7D441BC2923
-35B8B5FC2A8FF5D46503AC496886596048611EE35DE217CCBBCF01749BB933FD
-20C50750C54259A7EC0B2CECBD752BEB13A899D4552292D77F4B64781D61F090
-D34D66C2C7C6BBC4C85016A46DE2637680534300A04CB6E0C16B5A7FE654B06C
-4FD71FA1A17B0E4A067CB9306A1AEA6CF5A590DC0E30961EDD056D60D6366819
-B3EC4E7C6B9E0082B86363666C83565C80FDCE6152F3B6607975822AA2897B78
-806881C6B8451B0C2BCF1FC07EB24BB304EDC5E64E777CCFA2B86DCC276D185E
-8DE6294BEDC1FF52975B1F017327E27C04B121504F45CAD532164CCE73D4CFEB
-3D216F46F9DB2C1C58EEAA9DA74586DA321A742E01C61773AD4D39261893DF6A
-63F22F80F02B38FAF41D188F923F889EBF1B0709E34AD60331F323DCF2097672
-7EFC30127AB402A3C4D9C7AE88302D5A7B91247AE89AA98BEB035DF51954A42E
-922E73FA4A66E378C6688A1CDF425A48563049C30216CA209BDF479914039327
-EB9175B4C8EA399F0BC02F4D3A1EF795F1F774D9C4FDAEB1DA6C0F977A4B4C5F
-FB71B7790D704F4DCB3ACBA2B32C0434635DB7133E5EBC144C2868AB3C4E67A6
-5C4D347D0A77A23681281EFE53FCDDA9DF62C7AB0F8B537BE4B22544B5074BE8
-7B193D2B5339FD46A62B8B14E6660BDDCB157F016FDEA3ED1CB3CDCB5CD7E796
-2A12A21CCCC0E568D56733CD6FFC3199A776E31F044A32801203B11EED7E8BA2
-F7153E9ED49EDCA747A48D8ADCBC4CDB33B9E530FD51AC36D43FE8BC19B07311
-D765E02E4BAC5252B9DD5E0D02C554A25607341E5C437192F2BE10B8D895FAF9
-BC645E2E714F6F2E9716AB7AC7706C389F5A072C222D808848D61EA3222F935F
-A58A4D0DE506E6EB351396E3F53AFEC44A0AC4CC6B22064AA6AC79E8BFCF477B
-36311FB56CF3F2F4CF290610E4C9EC3FCA898AD685B083593A0355BA6D68BAE1
-ECD13F2752EBD5082AED23542184F6BD0820711BF6889F74335684720DB88A0B
-D09973122AD44C6F8A29524427AEA937799C2A5A7530624872CCD6E0D5B4A4FB
-71128163937E60CE472641E0BF20E5AA447B7BCDFF0430B0DC51ED862A942C77
-6559E7E729AD91B5FC8A8C0B9A3A81A7B25B79F867D290E051E61DB6584292C3
-1D3FF2A43B7F330CC4EF51F889CF6C41BC17C0A37D48CBFACA320D0F8F81FB6C
-0FA345815B553245AFBF5757F50ED6443D1928ECDEA26D69132B144E610D67C6
-A097A94AD061A05F641FD4E8626FA58EC9AD6FBC956A161518732B84C1422EF9
-E70F0FAF340AA35FB904E50AE6B47F6C45A8E7D5B2B1368B45AD5B1CDE5C80A5
-9E65385C8C0C5CBB89189084E1C92C1BE209B2EE3EE712637127DD73FBFE6BFA
-9D4ADB559F6F5883F215273D674784A1C4F64F79196676942D2B90840336F42E
-EE44767432CFE2EBE2550487C9567C990BAF93A246A77F77AFCCA2BF738966BB
-D811A2922F825AD11D769C15F24299D7405341FF867FD6E7550463DB69AC5C48
-767A9F55EDCF31421FB230322E493A5B99F347E33A811C890F69888B35045166
-B37C730F954856C8BB7DFED1ECDAF30AF7FDB675F727F6FFB931B81476DE3F0B
-950456E6235B4E2DDEFB07CE3E96D1
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 52099146 40258431 1000 600 600 (refcard.dvi)
-@start /Fa 197[20 58[{}1 66.4176 /CMMI8 rf /Fb 134[35
-3[38 24 29 30 1[36 36 40 58 18 2[22 36 33 1[33 36 33
-33 36 51[26 45[{}19 66.4176 /CMTI8 rf /Fc 242[61 13[{}1
-49.8132 /CMSY6 rf /Fd 134[32 1[43 32 34 24 24 24 1[34
-30 34 50 18 32 1[18 34 30 19 27 34 27 34 30 11[45 1[34
-2[41 1[45 54 3[22 1[47 39 41 1[43 42 45 9[30 1[30 1[30
-30 30 30 1[18 21 18 31[35 12[{}44 49.8132 /CMR6 rf /Fe
-134[43 43 59 43 45 32 32 34 43 45 41 45 68 23 43 1[23
-45 41 25 37 45 36 45 40 85[47 11[{}25 66.4176 /CMBX8
-rf /Ff 130[35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
-35 35 35 3[35 2[35 35 35 1[35 2[35 35 4[35 35 35 35 35
-35 35 35 35 35 1[35 1[35 4[35 35 35 35 35 35 35 35 35
-35 35 35 35 35 35 1[35 35 35 35 35 33[{}74 66.4176 /CMTT8
-rf /Fg 133[51 60 60 83 60 64 45 45 47 1[64 57 64 95 32
-60 1[32 64 57 35 53 64 51 64 56 9[118 2[80 64 86 86 3[109
-69 90 1[43 90 90 72 75 88 83 81 87 53[67 11[{}42 99.6264
-/CMBX10 rf /Fh 132[35 31 37 37 51 37 39 27 28 28 37 39
-35 39 59 20 37 22 20 39 35 22 31 39 31 39 35 4[35 3[53
-72 53 53 51 4[55 53 65 44 2[25 1[55 1[48 54 2[53 6[20
-35 6[35 35 2[20 24 20 2[27 27 20 4[35 21[39 41 11[{}55
-66.4176 /CMR8 rf /Fi 140[54 57 3[76 115 6[42 63 76 61
-1[67 11[106 2[103 3[108 6[108 1[90 1[99 67[{}15 119.552
-/CMBX10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%BeginPaperSize: Letter
-/setpagedevice where
-{ pop << /PageSize [612 792] >> setpagedevice }
-{ /letter where { pop letter } if }
-ifelse
-%%EndPaperSize
- @landscape end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin @landscape 1 0 bop -358 -364 a Fi(GNU)45
-b(Emacs)h(Reference)g(Card)274 -256 y Fh(\(for)23 b(v)n(ersion)g(22\))
--450 -58 y Fg(Starting)37 b(Emacs)-450 101 y Fh(T)-6
-b(o)24 b(en)n(ter)g(GNU)g(Emacs)g(22,)f(just)h(t)n(yp)r(e)h(its)e
-(name:)32 b Ff(emacs)-450 295 y Fg(Lea)m(ving)37 b(Emacs)-450
-454 y Fh(susp)r(end)24 b(Emacs)g(\(or)g(iconify)f(it)h(under)g(X\))254
-b Ff(C-z)-450 533 y Fh(exit)24 b(Emacs)g(p)r(ermanen)n(tly)691
-b Ff(C-x)36 b(C-c)-450 728 y Fg(Files)-450 886 y Fe(read)23
-b Fh(a)h(\014le)g(in)n(to)g(Emacs)744 b Ff(C-x)36 b(C-f)-450
-966 y Fe(sa)n(v)n(e)23 b Fh(a)h(\014le)f(bac)n(k)i(to)f(disk)722
-b Ff(C-x)36 b(C-s)-450 1046 y Fh(sa)n(v)n(e)24 b Fe(all)f
-Fh(\014les)1062 b Ff(C-x)36 b(s)-450 1125 y Fe(insert)16
-b Fh(con)n(ten)n(ts)j(of)e(another)h(\014le)f(in)n(to)g(this)g
-(bu\013er)71 b Ff(C-x)36 b(i)-450 1205 y Fh(replace)24
-b(this)g(\014le)g(with)f(the)i(\014le)e(y)n(ou)i(really)e(w)n(an)n(t)78
-b Ff(C-x)36 b(C-v)-450 1285 y Fh(write)23 b(bu\013er)h(to)h(a)e(sp)r
-(eci\014ed)i(\014le)538 b Ff(C-x)36 b(C-w)-450 1364 y
-Fh(toggle)25 b(read-only)f(status)g(of)f(bu\013er)454
-b Ff(C-x)36 b(C-q)-450 1561 y Fg(Getting)h(Help)-450
-1719 y Fh(The)22 b(help)g(system)g(is)f(simple.)30 b(T)n(yp)r(e)22
-b Ff(C-h)h Fh(\(or)e Ff(F1)p Fh(\))i(and)f(follo)n(w)f(the)i(di-)-450
-1799 y(rections.)30 b(If)20 b(y)n(ou)g(are)g(a)g(\014rst-time)g(user,)g
-(t)n(yp)r(e)h Ff(C-h)36 b(t)20 b Fh(for)f(a)h Fe(tutorial)p
-Fh(.)-450 1905 y(remo)n(v)n(e)k(help)g(windo)n(w)813
-b Ff(C-x)36 b(1)-450 1985 y Fh(scroll)23 b(help)h(windo)n(w)869
-b Ff(C-M-v)-450 2092 y Fh(aprop)r(os:)32 b(sho)n(w)23
-b(commands)i(matc)n(hing)f(a)g(string)80 b Ff(C-h)36
-b(a)-450 2171 y Fh(describ)r(e)24 b(the)g(function)h(a)f(k)n(ey)g(runs)
-449 b Ff(C-h)36 b(k)-450 2251 y Fh(describ)r(e)24 b(a)g(function)856
-b Ff(C-h)36 b(f)-450 2331 y Fh(get)25 b(mo)r(de-sp)r(eci\014c)f
-(information)528 b Ff(C-h)36 b(m)-450 2524 y Fg(Error)j(Reco)m(v)m(ery)
--450 2683 y Fe(ab)r(ort)17 b Fh(partially)g(t)n(yp)r(ed)i(or)f
-(executing)h(command)72 b Ff(C-g)-450 2762 y Fe(reco)n(v)n(er)23
-b Fh(\014les)g(lost)h(b)n(y)g(a)g(system)g(crash)142
-b Ff(M-x)36 b(recover-session)-450 2842 y Fe(undo)24
-b Fh(an)g(un)n(w)n(an)n(ted)h(c)n(hange)474 b Ff(C-x)36
-b(u,)g(C-_)g Fh(or)f Ff(C-/)-450 2922 y Fh(restore)24
-b(a)g(bu\013er)g(to)g(its)f(original)g(con)n(ten)n(ts)114
-b Ff(M-x)36 b(revert-buffer)-450 3001 y Fh(redra)n(w)23
-b(garbaged)i(screen)717 b Ff(C-l)-450 3196 y Fg(Incremen)m(tal)36
-b(Searc)m(h)-450 3354 y Fh(searc)n(h)24 b(forw)n(ard)990
-b Ff(C-s)-450 3434 y Fh(searc)n(h)24 b(bac)n(kw)n(ard)935
-b Ff(C-r)-450 3514 y Fh(regular)23 b(expression)h(searc)n(h)671
-b Ff(C-M-s)-450 3593 y Fh(rev)n(erse)24 b(regular)f(expression)h(searc)
-n(h)435 b Ff(C-M-r)-450 3700 y Fh(select)24 b(previous)g(searc)n(h)g
-(string)576 b Ff(M-p)-450 3780 y Fh(select)24 b(next)h(later)f(searc)n
-(h)g(string)533 b Ff(M-n)-450 3859 y Fh(exit)24 b(incremen)n(tal)g
-(searc)n(h)729 b Ff(RET)-450 3939 y Fh(undo)24 b(e\013ect)i(of)d(last)h
-(c)n(haracter)580 b Ff(DEL)-450 4019 y Fh(ab)r(ort)24
-b(curren)n(t)g(searc)n(h)815 b Ff(C-g)-450 4125 y Fh(Use)20
-b Ff(C-s)h Fh(or)f Ff(C-r)h Fh(again)g(to)f(rep)r(eat)h(the)h(searc)n
-(h)e(in)g(either)h(direction.)30 b(If)-450 4205 y(Emacs)19
-b(is)g(still)f(searc)n(hing,)i Ff(C-g)f Fh(cancels)h(only)g(the)f(part)
-h(not)g(matc)n(hed.)-358 4311 y Fd(c)-375 4313 y Fc(\015)h
-Fd(2007)h(F)-5 b(ree)22 b(Soft)n(w)n(are)g(F)-5 b(oundation,)20
-b(Inc.)27 b(P)n(ermissions)21 b(on)g(bac)n(k.)28 b(v2.3)1746
--364 y Fg(Motion)1746 -201 y Fe(en)n(tit)n(y)e(to)g(mo)n(v)n(e)h(o)n(v)
-n(er)472 b(bac)n(kw)n(ard)69 b(forw)n(ard)1746 -121 y
-Fh(c)n(haracter)885 b Ff(C-b)302 b(C-f)1746 -42 y Fh(w)n(ord)1017
-b Ff(M-b)302 b(M-f)1746 38 y Fh(line)1058 b Ff(C-p)302
-b(C-n)1746 118 y Fh(go)24 b(to)g(line)g(b)r(eginning)g(\(or)g(end\))281
-b Ff(C-a)302 b(C-e)1746 197 y Fh(sen)n(tence)913 b Ff(M-a)302
-b(M-e)1746 277 y Fh(paragraph)855 b Ff(M-{)302 b(M-})1746
-357 y Fh(page)1028 b Ff(C-x)36 b([)231 b(C-x)37 b(])1746
-437 y Fh(sexp)1033 b Ff(C-M-b)232 b(C-M-f)1746 516 y
-Fh(function)916 b Ff(C-M-a)232 b(C-M-e)1746 596 y Fh(go)24
-b(to)g(bu\013er)g(b)r(eginning)h(\(or)f(end\))212 b Ff(M-<)302
-b(M->)1746 704 y Fh(scroll)23 b(to)h(next)h(screen)822
-b Ff(C-v)1746 783 y Fh(scroll)23 b(to)h(previous)g(screen)700
-b Ff(M-v)1746 863 y Fh(scroll)23 b(left)1155 b Ff(C-x)36
-b(<)1746 943 y Fh(scroll)23 b(righ)n(t)1108 b Ff(C-x)36
-b(>)1746 1022 y Fh(scroll)23 b(curren)n(t)h(line)f(to)h(cen)n(ter)h(of)
-f(screen)312 b Ff(C-u)36 b(C-l)1746 1213 y Fg(Killing)h(and)g(Deleting)
-1746 1376 y Fe(en)n(tit)n(y)26 b(to)g(kill)723 b(bac)n(kw)n(ard)69
-b(forw)n(ard)1746 1456 y Fh(c)n(haracter)25 b(\(delete,)g(not)f(kill\))
-360 b Ff(DEL)302 b(C-d)1746 1536 y Fh(w)n(ord)1017 b
-Ff(M-DEL)232 b(M-d)1746 1615 y Fh(line)23 b(\(to)i(end)f(of)5
-b(\))699 b Ff(M-0)36 b(C-k)161 b(C-k)1746 1695 y Fh(sen)n(tence)913
-b Ff(C-x)36 b(DEL)161 b(M-k)1746 1775 y Fh(sexp)1033
-b Ff(M--)36 b(C-M-k)91 b(C-M-k)1746 1882 y Fh(kill)23
-b Fe(region)1099 b Ff(C-w)1746 1962 y Fh(cop)n(y)25 b(region)e(to)i
-(kill)d(ring)736 b Ff(M-w)1746 2042 y Fh(kill)23 b(through)h(next)h(o)r
-(ccurrence)g(of)e Fb(char)329 b Ff(M-z)36 b Fb(char)1746
-2149 y Fh(y)n(ank)25 b(bac)n(k)f(last)g(thing)g(killed)620
-b Ff(C-y)1746 2229 y Fh(replace)24 b(last)g(y)n(ank)g(with)g(previous)g
-(kill)358 b Ff(M-y)1746 2431 y Fg(Marking)1746 2594 y
-Fh(set)24 b(mark)g(here)1018 b Ff(C-@)36 b Fh(or)f Ff(C-SPC)1746
-2673 y Fh(exc)n(hange)26 b(p)r(oin)n(t)e(and)g(mark)658
-b Ff(C-x)36 b(C-x)1746 2781 y Fh(set)24 b(mark)g Fb(ar)l(g)30
-b Fe(w)n(ords)22 b Fh(a)n(w)n(a)n(y)639 b Ff(M-@)1746
-2861 y Fh(mark)23 b Fe(paragraph)894 b Ff(M-h)1746 2940
-y Fh(mark)23 b Fe(page)1095 b Ff(C-x)36 b(C-p)1746 3020
-y Fh(mark)23 b Fe(sexp)1101 b Ff(C-M-@)1746 3100 y Fh(mark)23
-b Fe(function)966 b Ff(C-M-h)1746 3179 y Fh(mark)23 b(en)n(tire)h
-Fe(bu\013er)852 b Ff(C-x)36 b(h)1746 3370 y Fg(Query)i(Replace)1746
-3533 y Fh(in)n(teractiv)n(ely)25 b(replace)f(a)g(text)h(string)414
-b Ff(M-\045)1746 3613 y Fh(using)24 b(regular)f(expressions)305
-b Ff(M-x)36 b(query-replace-regexp)1746 3721 y Fh(V)-6
-b(alid)23 b(resp)r(onses)h(in)f(query-replace)i(mo)r(de)f(are)1746
-3828 y Fe(replace)f Fh(this)h(one,)g(go)g(on)g(to)g(next)466
-b Ff(SPC)1746 3908 y Fh(replace)24 b(this)g(one,)g(don't)g(mo)n(v)n(e)
-572 b Ff(,)1746 3988 y Fe(skip)23 b Fh(to)i(next)f(without)h(replacing)
-488 b Ff(DEL)1746 4067 y Fh(replace)24 b(all)f(remaining)h(matc)n(hes)
-525 b Ff(!)1746 4147 y Fe(bac)n(k)27 b(up)d Fh(to)g(the)g(previous)g
-(matc)n(h)460 b Ff(^)1746 4227 y Fe(exit)23 b Fh(query-replace)871
-b Ff(RET)1746 4306 y Fh(en)n(ter)24 b(recursiv)n(e)g(edit)g(\()p
-Ff(C-M-c)i Fh(to)e(exit\))370 b Ff(C-r)3942 -364 y Fg(Multiple)36
-b(Windo)m(ws)3942 -244 y Fh(When)27 b(t)n(w)n(o)f(commands)g(are)g(sho)
-n(wn,)g(the)h(second)g(is)d(a)i(similar)e(com-)3942 -164
-y(mand)g(for)f(a)h(frame)f(instead)h(of)g(a)f(windo)n(w.)3942
--67 y(delete)i(all)e(other)h(windo)n(ws)467 b Ff(C-x)36
-b(1)212 b(C-x)37 b(5)e(1)3942 12 y Fh(split)23 b(windo)n(w,)h(ab)r(o)n
-(v)n(e)h(and)f(b)r(elo)n(w)267 b Ff(C-x)36 b(2)212 b(C-x)37
-b(5)e(2)3942 92 y Fh(delete)25 b(this)e(windo)n(w)640
-b Ff(C-x)36 b(0)212 b(C-x)37 b(5)e(0)3942 189 y Fh(split)23
-b(windo)n(w,)h(side)f(b)n(y)h(side)649 b Ff(C-x)36 b(3)3942
-286 y Fh(scroll)23 b(other)h(windo)n(w)838 b Ff(C-M-v)3942
-383 y Fh(switc)n(h)24 b(cursor)f(to)h(another)h(windo)n(w)206
-b Ff(C-x)36 b(o)212 b(C-x)37 b(5)e(o)3942 463 y Fh(select)25
-b(bu\013er)e(in)h(other)g(windo)n(w)320 b Ff(C-x)36 b(4)g(b)141
-b(C-x)37 b(5)e(b)3942 542 y Fh(displa)n(y)24 b(bu\013er)g(in)f(other)h
-(windo)n(w)273 b Ff(C-x)36 b(4)g(C-o)71 b(C-x)37 b(5)e(C-o)3942
-622 y Fh(\014nd)24 b(\014le)g(in)f(other)h(windo)n(w)460
-b Ff(C-x)36 b(4)g(f)141 b(C-x)37 b(5)e(f)3942 702 y Fh(\014nd)24
-b(\014le)g(read-only)g(in)f(other)h(windo)n(w)148 b Ff(C-x)36
-b(4)g(r)141 b(C-x)37 b(5)e(r)3942 782 y Fh(run)23 b(Dired)h(in)f(other)
-h(windo)n(w)390 b Ff(C-x)36 b(4)g(d)141 b(C-x)37 b(5)e(d)3942
-861 y Fh(\014nd)24 b(tag)h(in)e(other)h(windo)n(w)452
-b Ff(C-x)36 b(4)g(.)141 b(C-x)37 b(5)e(.)3942 958 y Fh(gro)n(w)24
-b(windo)n(w)f(taller)852 b Ff(C-x)36 b(^)3942 1038 y
-Fh(shrink)23 b(windo)n(w)h(narro)n(w)n(er)698 b Ff(C-x)36
-b({)3942 1118 y Fh(gro)n(w)24 b(windo)n(w)f(wider)844
-b Ff(C-x)36 b(})3942 1264 y Fg(F)-10 b(ormatting)3942
-1384 y Fh(inden)n(t)25 b(curren)n(t)f Fe(line)f Fh(\(mo)r(de-dep)r
-(enden)n(t\))267 b Ff(TAB)3942 1464 y Fh(inden)n(t)25
-b Fe(region)d Fh(\(mo)r(de-dep)r(enden)n(t\))420 b Ff(C-M-\\)3942
-1544 y Fh(inden)n(t)25 b Fe(sexp)f Fh(\(mo)r(de-dep)r(enden)n(t\))482
-b Ff(C-M-q)3942 1623 y Fh(inden)n(t)25 b(region)e(rigidly)g
-Fb(ar)l(g)30 b Fh(columns)413 b Ff(C-x)36 b(TAB)3942
-1720 y Fh(insert)23 b(newline)h(after)g(p)r(oin)n(t)662
-b Ff(C-o)3942 1800 y Fh(mo)n(v)n(e)24 b(rest)g(of)f(line)h(v)n
-(ertically)f(do)n(wn)437 b Ff(C-M-o)3942 1880 y Fh(delete)25
-b(blank)f(lines)f(around)h(p)r(oin)n(t)482 b Ff(C-x)36
-b(C-o)3942 1959 y Fh(join)23 b(line)g(with)h(previous)g(\(with)g(arg,)f
-(next\))236 b Ff(M-^)3942 2039 y Fh(delete)25 b(all)e(white)h(space)h
-(around)f(p)r(oin)n(t)358 b Ff(M-\\)3942 2119 y Fh(put)24
-b(exactly)h(one)g(space)f(at)h(p)r(oin)n(t)503 b Ff(M-SPC)3942
-2216 y Fh(\014ll)23 b(paragraph)1025 b Ff(M-q)3942 2295
-y Fh(set)24 b(\014ll)f(column)h(to)g Fb(ar)l(g)800 b
-Ff(C-x)36 b(f)3942 2375 y Fh(set)24 b(pre\014x)g(eac)n(h)h(line)e
-(starts)h(with)506 b Ff(C-x)36 b(.)3942 2472 y Fh(set)24
-b(face)1211 b Ff(M-o)3942 2609 y Fg(Case)37 b(Change)3942
-2730 y Fh(upp)r(ercase)25 b(w)n(ord)961 b Ff(M-u)3942
-2809 y Fh(lo)n(w)n(ercase)24 b(w)n(ord)979 b Ff(M-l)3942
-2889 y Fh(capitalize)25 b(w)n(ord)975 b Ff(M-c)3942 2986
-y Fh(upp)r(ercase)25 b(region)924 b Ff(C-x)36 b(C-u)3942
-3066 y Fh(lo)n(w)n(ercase)24 b(region)942 b Ff(C-x)36
-b(C-l)3942 3212 y Fg(The)h(Minibu\013er)3942 3332 y Fh(The)24
-b(follo)n(wing)f(k)n(eys)h(are)g(de\014ned)h(in)e(the)i(minibu\013er.)
-3942 3429 y(complete)g(as)f(m)n(uc)n(h)g(as)f(p)r(ossible)539
-b Ff(TAB)3942 3509 y Fh(complete)25 b(up)f(to)g(one)h(w)n(ord)673
-b Ff(SPC)3942 3588 y Fh(complete)25 b(and)f(execute)778
-b Ff(RET)3942 3668 y Fh(sho)n(w)24 b(p)r(ossible)f(completions)636
-b Ff(?)3942 3748 y Fh(fetc)n(h)25 b(previous)e(minibu\013er)g(input)484
-b Ff(M-p)3942 3828 y Fh(fetc)n(h)25 b(later)e(minibu\013er)g(input)i
-(or)e(default)276 b Ff(M-n)3942 3907 y Fh(regexp)24 b(searc)n(h)h(bac)n
-(kw)n(ard)f(through)h(history)204 b Ff(M-r)3942 3987
-y Fh(regexp)24 b(searc)n(h)h(forw)n(ard)d(through)j(history)261
-b Ff(M-s)3942 4067 y Fh(ab)r(ort)24 b(command)953 b Ff(C-g)3942
-4164 y Fh(T)n(yp)r(e)28 b Ff(C-x)37 b(ESC)f(ESC)28 b
-Fh(to)h(edit)f(and)h(rep)r(eat)f(the)h(last)f(command)h(that)3942
-4243 y(used)e(the)g(minibu\013er.)38 b(T)n(yp)r(e)26
-b Ff(F10)h Fh(to)g(activ)l(ate)h(men)n(u)f(bar)e(items)i(on)3942
-4323 y(text)e(terminals.)p eop end
-%%Page: 2 2
-TeXDict begin @landscape 2 1 bop -358 -364 a Fi(GNU)45
-b(Emacs)h(Reference)g(Card)-450 -141 y Fg(Bu\013ers)-450
-24 y Fh(select)24 b(another)h(bu\013er)811 b Ff(C-x)36
-b(b)-450 104 y Fh(list)23 b(all)g(bu\013ers)1018 b Ff(C-x)36
-b(C-b)-450 184 y Fh(kill)23 b(a)g(bu\013er)1084 b Ff(C-x)36
-b(k)-450 378 y Fg(T)-10 b(ransp)s(osing)-450 543 y Fh(transp)r(ose)24
-b Fe(c)n(haracters)760 b Ff(C-t)-450 623 y Fh(transp)r(ose)24
-b Fe(w)n(ords)915 b Ff(M-t)-450 703 y Fh(transp)r(ose)24
-b Fe(lines)964 b Ff(C-x)36 b(C-t)-450 782 y Fh(transp)r(ose)24
-b Fe(sexps)935 b Ff(C-M-t)-450 985 y Fg(Sp)s(elling)37
-b(Chec)m(k)-450 1151 y Fh(c)n(hec)n(k)25 b(sp)r(elling)e(of)h(curren)n
-(t)g(w)n(ord)516 b Ff(M-$)-450 1231 y Fh(c)n(hec)n(k)25
-b(sp)r(elling)e(of)h(all)f(w)n(ords)g(in)g(region)201
-b Ff(M-x)36 b(ispell-region)-450 1310 y Fh(c)n(hec)n(k)25
-b(sp)r(elling)e(of)h(en)n(tire)g(bu\013er)395 b Ff(M-x)36
-b(ispell-buffer)-450 1514 y Fg(T)-10 b(ags)-450 1680
-y Fh(\014nd)24 b(a)g(tag)g(\(a)h(de\014nition\))716 b
-Ff(M-.)-450 1760 y Fh(\014nd)24 b(next)h(o)r(ccurrence)g(of)e(tag)612
-b Ff(C-u)36 b(M-.)-450 1839 y Fh(sp)r(ecify)24 b(a)f(new)i(tags)f
-(\014le)537 b Ff(M-x)36 b(visit-tags-table)-450 1948
-y Fh(regexp)24 b(searc)n(h)h(on)f(all)f(\014les)g(in)g(tags)i(table)138
-b Ff(M-x)36 b(tags-search)-450 2027 y Fh(run)23 b(query-replace)i(on)f
-(all)f(the)h(\014les)144 b Ff(M-x)36 b(tags-query-replace)-450
-2107 y Fh(con)n(tin)n(ue)25 b(last)f(tags)g(searc)n(h)g(or)g
-(query-replace)163 b Ff(M-,)-450 2310 y Fg(Shells)-450
-2476 y Fh(execute)26 b(a)e(shell)f(command)670 b Ff(M-!)-450
-2555 y Fh(run)23 b(a)h(shell)f(command)i(on)f(the)g(region)362
-b Ff(M-|)-450 2635 y Fh(\014lter)24 b(region)f(through)i(a)f(shell)f
-(command)276 b Ff(C-u)36 b(M-|)-450 2715 y Fh(start)24
-b(a)g(shell)f(in)g(windo)n(w)h Ff(*shell*)467 b(M-x)36
-b(shell)-450 2909 y Fg(Rectangles)-450 3074 y Fh(cop)n(y)25
-b(rectangle)g(to)f(register)659 b Ff(C-x)36 b(r)g(r)-450
-3154 y Fh(kill)23 b(rectangle)1043 b Ff(C-x)36 b(r)g(k)-450
-3234 y Fh(y)n(ank)25 b(rectangle)992 b Ff(C-x)36 b(r)g(y)-450
-3313 y Fh(op)r(en)25 b(rectangle,)f(shifting)f(text)i(righ)n(t)401
-b Ff(C-x)36 b(r)g(o)-450 3393 y Fh(blank)24 b(out)h(rectangle)843
-b Ff(C-x)36 b(r)g(c)-450 3473 y Fh(pre\014x)24 b(eac)n(h)h(line)e(with)
-h(a)g(string)553 b Ff(C-x)36 b(r)g(t)-450 3676 y Fg(Abbrevs)-450
-3841 y Fh(add)24 b(global)g(abbrev)886 b Ff(C-x)36 b(a)g(g)-450
-3921 y Fh(add)24 b(mo)r(de-lo)r(cal)g(abbrev)737 b Ff(C-x)36
-b(a)g(l)-450 4001 y Fh(add)24 b(global)g(expansion)h(for)e(this)g
-(abbrev)313 b Ff(C-x)36 b(a)g(i)f(g)-450 4081 y Fh(add)24
-b(mo)r(de-lo)r(cal)g(expansion)h(for)e(this)g(abbrev)164
-b Ff(C-x)36 b(a)g(i)f(l)-450 4160 y Fh(explicitly)24
-b(expand)h(abbrev)680 b Ff(C-x)36 b(a)g(e)-450 4269 y
-Fh(expand)25 b(previous)f(w)n(ord)f(dynamically)368 b
-Ff(M-/)1746 -364 y Fg(Regular)37 b(Expressions)1746 -198
-y Fh(an)n(y)24 b(single)g(c)n(haracter)h(except)g(a)f(newline)291
-b Ff(.)71 b Fh(\(dot\))1746 -119 y(zero)24 b(or)f(more)h(rep)r(eats)807
-b Ff(*)1746 -39 y Fh(one)24 b(or)g(more)f(rep)r(eats)827
-b Ff(+)1746 41 y Fh(zero)24 b(or)f(one)i(rep)r(eat)882
-b Ff(?)1746 120 y Fh(quote)25 b(regular)e(expression)h(sp)r(ecial)g(c)n
-(haracter)h Fb(c)96 b Ff(\\)p Fb(c)1746 200 y Fh(alternativ)n(e)25
-b(\(\\or"\))900 b Ff(\\|)1746 280 y Fh(grouping)1170
-b Ff(\\\()36 b Fa(:)11 b(:)h(:)34 b Ff(\\\))1746 359
-y Fh(same)24 b(text)h(as)e Fb(n)5 b Fh(th)25 b(group)718
-b Ff(\\)p Fb(n)1746 439 y Fh(at)24 b(w)n(ord)g(break)1009
-b Ff(\\b)1746 519 y Fh(not)24 b(at)h(w)n(ord)e(break)884
-b Ff(\\B)1746 627 y Fe(en)n(tit)n(y)676 b(matc)n(h)27
-b(start)84 b(matc)n(h)26 b(end)1746 707 y Fh(line)774
-b Ff(^)465 b($)1746 787 y Fh(w)n(ord)733 b Ff(\\<)430
-b(\\>)1746 866 y Fh(bu\013er)706 b Ff(\\`)430 b(\\')1746
-946 y Fe(class)27 b(of)f(c)n(haracters)238 b(matc)n(h)27
-b(these)71 b(matc)n(h)26 b(others)1746 1026 y Fh(explicit)e(set)549
-b Ff([)36 b Fa(:)11 b(:)h(:)35 b Ff(])276 b([^)36 b Fa(:)11
-b(:)g(:)35 b Ff(])1746 1105 y Fh(w)n(ord-syn)n(tax)24
-b(c)n(haracter)201 b Ff(\\w)430 b(\\W)1746 1185 y Fh(c)n(haracter)25
-b(with)f(syn)n(tax)g Fb(c)157 b Ff(\\s)p Fb(c)397 b Ff(\\S)p
-Fb(c)1746 1388 y Fg(In)m(ternational)36 b(Character)g(Sets)1746
-1554 y Fh(sp)r(ecify)24 b(principal)f(language)643 b
-Ff(C-x)36 b(RET)g(l)1746 1633 y Fh(sho)n(w)24 b(all)f(input)h(metho)r
-(ds)423 b Ff(M-x)36 b(list-input-methods)1746 1713 y
-Fh(enable)25 b(or)e(disable)g(input)i(metho)r(d)478 b
-Ff(C-\\)1746 1793 y Fh(set)24 b(co)r(ding)h(system)f(for)f(next)h
-(command)307 b Ff(C-x)36 b(RET)g(c)1746 1872 y Fh(sho)n(w)24
-b(all)f(co)r(ding)h(systems)372 b Ff(M-x)37 b(list-coding-systems)1746
-1952 y Fh(c)n(ho)r(ose)25 b(preferred)e(co)r(ding)h(system)114
-b Ff(M-x)36 b(prefer-coding-system)1746 2157 y Fg(Info)1746
-2323 y Fh(en)n(ter)24 b(the)h(Info)f(do)r(cumen)n(tation)i(reader)321
-b Ff(C-h)36 b(i)1746 2402 y Fh(\014nd)24 b(sp)r(eci\014ed)h(function)f
-(or)f(v)l(ariable)h(in)g(Info)183 b Ff(C-h)36 b(S)1746
-2511 y Fh(Mo)n(ving)24 b(within)f(a)h(no)r(de:)1817 2619
-y(scroll)e(forw)n(ard)949 b Ff(SPC)1817 2699 y Fh(scroll)22
-b(rev)n(erse)973 b Ff(DEL)1817 2778 y Fh(b)r(eginning)24
-b(of)f(no)r(de)820 b Ff(.)71 b Fh(\(dot\))1746 2887 y(Mo)n(ving)24
-b(b)r(et)n(w)n(een)h(no)r(des:)1817 2995 y Fe(next)e
-Fh(no)r(de)1043 b Ff(n)1817 3075 y Fe(previous)23 b Fh(no)r(de)900
-b Ff(p)1817 3154 y Fh(mo)n(v)n(e)24 b Fe(up)1097 b Ff(u)1817
-3234 y Fh(select)24 b(men)n(u)g(item)g(b)n(y)g(name)564
-b Ff(m)1817 3314 y Fh(select)24 b Fb(n)5 b Fh(th)25 b(men)n(u)f(item)g
-(b)n(y)g(n)n(um)n(b)r(er)g(\(1{9\))176 b Fb(n)1817 3393
-y Fh(follo)n(w)22 b(cross)i(reference)g(\(return)g(with)g
-Ff(l)p Fh(\))230 b Ff(f)1817 3473 y Fh(return)23 b(to)i(last)e(no)r(de)
-i(y)n(ou)f(sa)n(w)518 b Ff(l)1817 3553 y Fh(return)23
-b(to)i(directory)f(no)r(de)621 b Ff(d)1817 3633 y Fh(go)24
-b(to)g(top)g(no)r(de)h(of)e(Info)h(\014le)578 b Ff(t)1817
-3712 y Fh(go)24 b(to)g(an)n(y)g(no)r(de)h(b)n(y)f(name)623
-b Ff(g)1746 3821 y Fh(Other:)1817 3929 y(run)23 b(Info)h
-Fe(tutorial)825 b Ff(h)1817 4009 y Fh(lo)r(ok)23 b(up)h(a)g(sub)t(ject)
-h(in)e(the)i(indices)398 b Ff(i)1817 4088 y Fh(searc)n(h)24
-b(no)r(des)g(for)f(regexp)648 b Ff(s)1817 4168 y Fe(quit)22
-b Fh(Info)1083 b Ff(q)3942 -364 y Fg(Registers)3942 -198
-y Fh(sa)n(v)n(e)24 b(region)g(in)f(register)767 b Ff(C-x)36
-b(r)g(s)3942 -119 y Fh(insert)23 b(register)h(con)n(ten)n(ts)i(in)n(to)
-e(bu\013er)392 b Ff(C-x)36 b(r)g(i)3942 -10 y Fh(sa)n(v)n(e)24
-b(v)l(alue)h(of)e(p)r(oin)n(t)h(in)g(register)531 b Ff(C-x)36
-b(r)g(SPC)3942 69 y Fh(jump)23 b(to)i(p)r(oin)n(t)f(sa)n(v)n(ed)g(in)g
-(register)486 b Ff(C-x)36 b(r)g(j)3942 274 y Fg(Keyb)s(oard)i(Macros)
-3942 440 y Fe(start)22 b Fh(de\014ning)j(a)e(k)n(eyb)r(oard)i(macro)429
-b Ff(C-x)36 b(\()3942 519 y Fe(end)24 b Fh(k)n(eyb)r(oard)h(macro)f
-(de\014nition)482 b Ff(C-x)36 b(\))3942 599 y Fe(execute)24
-b Fh(last-de\014ned)h(k)n(eyb)r(oard)g(macro)278 b Ff(C-x)36
-b(e)3942 679 y Fh(app)r(end)25 b(to)f(last)g(k)n(eyb)r(oard)h(macro)477
-b Ff(C-u)36 b(C-x)g(\()3942 758 y Fh(name)24 b(last)g(k)n(eyb)r(oard)h
-(macro)292 b Ff(M-x)37 b(name-last-kbd-macro)3942 838
-y Fh(insert)23 b(Lisp)h(de\014nition)g(in)g(bu\013er)289
-b Ff(M-x)36 b(insert-kbd-macro)3942 1041 y Fg(Commands)i(Dealing)f
-(with)g(Emacs)i(Lisp)3942 1207 y Fh(ev)l(al)24 b Fe(sexp)g
-Fh(b)r(efore)g(p)r(oin)n(t)744 b Ff(C-x)36 b(C-e)3942
-1287 y Fh(ev)l(al)24 b(curren)n(t)g Fe(defun)855 b Ff(C-M-x)3942
-1366 y Fh(ev)l(al)24 b Fe(region)935 b Ff(M-x)36 b(eval-region)3942
-1446 y Fh(read)24 b(and)g(ev)l(al)g(minibu\013er)687
-b Ff(M-:)3942 1526 y Fh(load)24 b(from)f(standard)h(system)g(directory)
-175 b Ff(M-x)36 b(load-library)3942 1731 y Fg(Simple)h(Customization)
-3942 1896 y Fh(customize)25 b(v)l(ariables)e(and)i(faces)396
-b Ff(M-x)36 b(customize)3942 2004 y Fh(Making)24 b(global)g(k)n(ey)g
-(bindings)g(in)f(Emacs)h(Lisp)f(\(example\):)3942 2113
-y Ff(\(global-set-key)40 b(\(kbd)c("C-c)g(g"\))h('search-forward\))3942
-2192 y(\(global-set-key)j(\(kbd)c("M-#"\))h('query-replace-regexp\))
-3942 2397 y Fg(W)-10 b(riting)38 b(Commands)3942 2563
-y Ff(\(defun)f Fb(c)l(ommand-name)43 b Ff(\()p Fb(ar)l(gs)5
-b Ff(\))4013 2643 y(")p Fb(do)l(cumentation)g Ff(")38
-b(\(interactive)g(")p Fb(template)5 b Ff("\))4013 2722
-y Fb(b)l(o)l(dy)h Ff(\))3942 2831 y Fh(An)24 b(example:)3942
-2939 y Ff(\(defun)37 b(this-line-to-top-of-win)q(dow)42
-b(\(line\))4013 3019 y("Reposition)c(current)f(line)g(to)f(top)g(of)g
-(window.)3942 3098 y(With)g(ARG,)h(put)f(point)h(on)f(line)g(ARG.")4013
-3178 y(\(interactive)i("P"\))4013 3258 y(\(recenter)f(\(if)g(\(null)f
-(line\))4507 3337 y(0)4436 3417 y(\(prefix-numeric-value)41
-b(line\)\)\)\))3942 3525 y Fh(The)35 b Ff(interactive)k
-Fh(sp)r(ec)c(sa)n(ys)g(ho)n(w)h(to)f(read)h(argumen)n(ts)g(in)n(terac-)
-3942 3605 y(tiv)n(ely)-6 b(.)32 b(T)n(yp)r(e)24 b Ff(C-h)36
-b(f)g(interactive)26 b Fh(for)d(more)h(details.)4235
-3736 y Fd(Cop)n(yrigh)n(t)4538 3734 y(c)4521 3736 y Fc(\015)d
-Fd(2007)i(F)-5 b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20
-b(Inc.)4399 3800 y(v2.3)i(for)f(GNU)f(Emacs)h(v)n(ersion)h(22,)f(2007)
-4532 3864 y(designed)f(b)n(y)h(Stephen)f(Gildea)3942
-3956 y(P)n(ermission)29 b(is)f(gran)n(ted)i(to)f(mak)n(e)h(and)e
-(distribute)g(mo)r(di\014ed)f(or)j(unmo)r(di\014ed)3942
-4020 y(copies)f(of)h(this)e(card)h(pro)n(vided)g(the)f(cop)n(yrigh)n(t)
-i(notice)f(and)g(this)f(p)r(ermission)3942 4084 y(notice)21
-b(are)g(preserv)n(ed)h(on)f(all)f(copies.)3942 4176 y(F)-5
-b(or)21 b(copies)g(of)g(the)g(GNU)e(Emacs)i(man)n(ual,)f(write)h(to)g
-(the)f(F)-5 b(ree)22 b(Soft)n(w)n(are)g(F)-5 b(oun-)3942
-4240 y(dation,)29 b(Inc.,)g(51)g(F)-5 b(ranklin)28 b(Street,)h(Fifth)f
-(Flo)r(or,)h(Boston,)i(MA)d(02110-1301)3942 4304 y(USA)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/Makefile b/etc/refcards/Makefile
index 4608ea2c93d..8ac87d26d75 100644
--- a/etc/Makefile
+++ b/etc/refcards/Makefile
@@ -1,4 +1,4 @@
-### Makefile for Emacs etc/ directory
+### Makefile for Emacs refcards
## Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004, 2005, 2006,
## 2007 Free Software Foundation, Inc.
@@ -23,29 +23,71 @@
## Top-level targets.
-## PS files included with Emacs.
-all: refcards dired-refcards misc-refcards
+## PDF files that are included with Emacs.
+all: refcards_pdf dired-refcards_pdf misc-refcards_pdf
+REFCARDS_PDF = refcard.pdf cs-refcard.pdf de-refcard.pdf fr-refcard.pdf \
+ pl-refcard.pdf pt-br-refcard.pdf ru-refcard.pdf sk-refcard.pdf
+refcards_pdf: ${REFCARDS_PDF}
+refcards_ps: ${REFCARDS_PDF:.pdf=.ps}
-refcards: refcard.ps cs-refcard.ps de-refcard.ps fr-refcard.ps \
- pl-refcard.ps pt-br-refcard.ps ru-refcard.ps sk-refcard.ps
+DIRED-REFCARDS_PDF = dired-ref.pdf cs-dired-ref.pdf fr-dired-ref.pdf \
+ sk-dired-ref.pdf
+dired-refcards_pdf: ${DIRED-REFCARDS_PDF}
+dired-refcards_ps: ${DIRED-REFCARDS_PDF:.pdf=.ps}
-dired-refcards: dired-ref.ps cs-dired-ref.ps fr-drdref.ps sk-dired-ref.ps
+MISC-REFCARDS_PDF = calccard.pdf gnus-booklet.pdf gnus-refcard.pdf orgcard.pdf
+misc-refcards_pdf: ${MISC-REFCARDS_PDF}
+misc-refcards_ps: ${MISC-REFCARDS_PDF:.pdf=.ps}
-## No PS files: vipcard.tex viperCard.tex survival.tex sk-survival.tex
-misc-refcards: calccard.ps gnus-booklet.ps gnus-refcard.ps orgcard.ps
-## Following PS files are not included with Emacs.
-survival-cards: survival.ps cs-survival.ps sk-survival.ps
+## The following files are not included with Emacs.
+SURVIVAL-CARDS_PDF = survival.pdf cs-survival.pdf sk-survival.pdf
+survival-cards_pdf: ${SURVIVAL-CARDS_PDF}
+survival-cards_ps: ${SURVIVAL-CARDS_PDF:.pdf=.ps}
+
+VIPER-CARDS_PDF = vipcard.pdf viperCard.pdf
+viper-cards_pdf: ${VIPER-CARDS_PDF}
+viper-cards_ps: ${VIPER-CARDS_PDF:.pdf=.ps}
+
+
+## PDF files.
+
+## The page layouts (a4/letter) are written directly in the .tex files.
+
+cs-refcard.pdf cs-dired-ref.pdf cs-survival.pdf sk-refcard.pdf \
+sk-dired-ref.pdf sk-survival.pdf: %.pdf: %.tex
+ csplain "\pdfoutput=1\input $<"
+
+pl-refcard.pdf: %.pdf: %.tex
+ if ! kpsewhich -format=fmt mex > /dev/null; then \
+ echo "No mex format found."; false; \
+ fi
+ pdftex $<
+
+ru-refcard.pdf: %.pdf: %.tex
+ pdflatex $<
+
+gnus-logo.pdf: %.pdf: %.eps
+ ps2pdf $<
+
+gnus-refcard.pdf: %.pdf: %.tex gnus-logo.pdf
+ pdflatex $<
+
+gnus-booklet.pdf: gnus-refcard.tex gnus-logo.pdf
+ pdflatex '\def\booklettrue{}\def\letterpapertrue{}\input{gnus-refcard}'
+ mv gnus-refcard.pdf $@
+
+## Everything not explicitly listed above.
+%.pdf: %.tex
+ pdftex $<
-viper-cards: vipcard.ps viperCard.ps
## dvi files.
-## FIXME the sk-*.tex files say to use csplain, but were not
-## traditionally in this rule. Fix the doc or the rule.
-cs-refcard.dvi cs-dired-ref.dvi cs-survival.dvi: %.dvi: %.tex
+cs-refcard.dvi cs-dired-ref.dvi cs-survival.dvi sk-refcard.dvi \
+sk-dired-ref.dvi sk-survival.dvi: %.dvi: %.tex
csplain $<
pl-refcard.dvi: %.dvi: %.tex
@@ -78,7 +120,7 @@ de-refcard.ps fr-refcard.ps pt-br-refcard.ps orgcard.ps: %.ps: %.dvi
dvips -t a4 -t landscape $< -o $@
## A4, portrait.
-cs-dired-ref.ps cs-refcard.ps cs-survival.ps fr-drdref.ps \
+cs-dired-ref.ps cs-refcard.ps cs-survival.ps fr-dired-ref.ps \
pl-refcard.ps ru-refcard.ps \
sk-dired-ref.ps sk-refcard.ps sk-survival.ps: %.ps: %.dvi
dvips -t a4 $< -o $@
@@ -93,34 +135,9 @@ viperCard.ps: %.ps: %.dvi
dvips -t letter $< -o $@
-.PHONY: mostlyclean clean distclean maintainer-clean unlock relock
+.PHONY: clean
-mostlyclean:
+clean:
-rm -f *.dvi *.log
-## Note does not delete generated ps files.
-clean distclean maintainer-clean: mostlyclean
- -rm -f DOC*
-
-
-SOURCES = [0-9A-QS-Z]* README *.[ch16] emacs.* ms-* \
- spook-lines termcap.* *.tex
-
-unlock:
- chmod u+w $(SOURCES)
-
-relock:
- chmod u-w $(SOURCES)
-
-# ${etcdir}/e/eterm-color is used by ../lisp/term.el.
-# TERMINFO systems use terminfo files compiled by the Terminfo Compiler (tic).
-# These files are binary, and depend on the version of tic, but they seem
-# to be system-independent and backwardly compatible.
-# So there should be no need to recompile the distributed binary version.
-TIC=tic
-e/eterm-color: e/eterm-color.ti
- TERMINFO=`pwd`; export TERMINFO; $(TIC) e/eterm-color.ti
-
-
-## arch-tag: 4261f003-cf77-4478-a10a-5284e9d8f797
### Makefile ends here
diff --git a/etc/refcards/README b/etc/refcards/README
new file mode 100644
index 00000000000..c9ae93a276a
--- /dev/null
+++ b/etc/refcards/README
@@ -0,0 +1,17 @@
+Some of the *.tex files need special versions of TeX to typeset them.
+The files cs-*.tex and sk-*.tex need csTeX, a special version of TeX
+tailored to typesetting Czech and Slovak documents. We provide
+generated files for these documents, so that you could print them
+without installing the modified TeX versions.
+
+
+COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES
+
+The file gnus-logo.eps contains copyright and license information, but
+it is reproduced here for convenience.
+
+File: gnus-logo.eps, gnus-logo.pdf
+ Author: Luis Fernandes <elf@ee.ryerson.ca>
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
+ License: GNU General Public License version 3 or later (see COPYING)
diff --git a/etc/refcards/calccard.pdf b/etc/refcards/calccard.pdf
new file mode 100644
index 00000000000..10ac28d4e0b
--- /dev/null
+++ b/etc/refcards/calccard.pdf
Binary files differ
diff --git a/etc/calccard.tex b/etc/refcards/calccard.tex
index f2f033cc7e1..12cbd4a686b 100644
--- a/etc/calccard.tex
+++ b/etc/refcards/calccard.tex
@@ -6,10 +6,17 @@
% card version 1.9, by Stephen Gildea.
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
\columnsperpage=3
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(1l)
+
+% Nothing else needs to be changed.
% Typical command to format: tex calccard.tex
% Typical command to print (3 cols): dvips -t landscape calccard.dvi
@@ -666,7 +673,7 @@ Variable names are single digits or whole words.
\bye
% Local variables:
-% compile-command: "tex calccard"
+% compile-command: "pdftex calccard"
% End:
% arch-tag: a2764f34-ec23-4083-bd5c-53f9e70a5da9
diff --git a/etc/refcards/cs-dired-ref.pdf b/etc/refcards/cs-dired-ref.pdf
new file mode 100644
index 00000000000..9b9d1061e14
--- /dev/null
+++ b/etc/refcards/cs-dired-ref.pdf
Binary files differ
diff --git a/etc/cs-dired-ref.tex b/etc/refcards/cs-dired-ref.tex
index c936ab0eedf..913e0112699 100644
--- a/etc/cs-dired-ref.tex
+++ b/etc/refcards/cs-dired-ref.tex
@@ -23,13 +23,20 @@
% Boston, MA 02110-1301, USA.
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
%**start of header
\newcount\columnsperpage
\columnsperpage=2
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% This file is intended to be processed by plain TeX (TeX82).
% The reference card looks OK with 2 columns per page, portrait mode.
% I haven't tried it with 3 columns per page.
diff --git a/etc/refcards/cs-refcard.pdf b/etc/refcards/cs-refcard.pdf
new file mode 100644
index 00000000000..8f4b684374f
--- /dev/null
+++ b/etc/refcards/cs-refcard.pdf
Binary files differ
diff --git a/etc/cs-refcard.tex b/etc/refcards/cs-refcard.tex
index c9742eed0eb..7d87a182603 100644
--- a/etc/cs-refcard.tex
+++ b/etc/refcards/cs-refcard.tex
@@ -7,10 +7,17 @@
\newcount\columnsperpage
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
\columnsperpage=1
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% Copyright (C) 1987, 1993, 1996, 1997, 2001, 2002, 2003, 2004,
% 2005, 2006, 2007 Free Software Foundation, Inc.
diff --git a/etc/cs-survival.tex b/etc/refcards/cs-survival.tex
index 25f2786103f..f19c8ddf228 100644
--- a/etc/cs-survival.tex
+++ b/etc/refcards/cs-survival.tex
@@ -21,6 +21,12 @@
\endinput
\fi
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
% 2006, 2007 Free Software Foundation, Inc.
diff --git a/etc/refcards/de-refcard.pdf b/etc/refcards/de-refcard.pdf
new file mode 100644
index 00000000000..88172947c93
--- /dev/null
+++ b/etc/refcards/de-refcard.pdf
Binary files differ
diff --git a/etc/de-refcard.tex b/etc/refcards/de-refcard.tex
index 76de0410b52..6199a0249ec 100644
--- a/etc/de-refcard.tex
+++ b/etc/refcards/de-refcard.tex
@@ -4,17 +4,17 @@
%
%**start of header
\newcount\columnsperpage
-\newcount\letterpaper
% This file can be printed with 1, 2, or 3 columns per page (see below).
% Specify how many you want here.
\columnsperpage=3
-% Set letterpaper to 0 for A4 paper, 1 for letter (US) paper. Useful
-% only when columnsperpage is 2 or 3.
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
-\letterpaper=0
+\input pdflayout.sty
+\pdflayout=(0l)
% If you don't have german.sty, you can either get it from CTAN or
% change the \glqq and \grqq commands below.
@@ -394,7 +394,7 @@ Wenn Emacs sucht, unterbricht \kbd{C-g} nur die jeweils letzte Suche.
\section{Interaktives Ersetzen}
\key{Zeichenkette interaktiv ersetzen}{M-\%}
-\metax{mit regul\"aren Ausdr\"ucken}{M-x query-replace-regexp}
+\key{mit regul\"aren Ausdr\"ucken}{C-M-\%}
M\"ogliche Antworten in diesem Modus:
@@ -689,7 +689,7 @@ wird. F\"ur n\"ahere Details geben Sie \kbd{C-h f interactive} ein.
\bye
% Local variables:
-% compile-command: "tex de-refcard"
+% compile-command: "pdftex de-refcard"
% End:
% arch-tag: af0a2666-f289-49f1-a9cc-cedab9783314
diff --git a/etc/refcards/dired-ref.pdf b/etc/refcards/dired-ref.pdf
new file mode 100644
index 00000000000..5ee213a8f50
--- /dev/null
+++ b/etc/refcards/dired-ref.pdf
Binary files differ
diff --git a/etc/dired-ref.tex b/etc/refcards/dired-ref.tex
index 45c1e8fc14f..3a76c6894cb 100644
--- a/etc/dired-ref.tex
+++ b/etc/refcards/dired-ref.tex
@@ -20,13 +20,20 @@
% Boston, MA 02110-1301, USA.
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
%**start of header
\newcount\columnsperpage
\columnsperpage=2
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% This file is intended to be processed by plain TeX (TeX82).
% The reference card looks OK with 2 columns per page, portrait mode.
% I haven't tried it with 3 columns per page.
diff --git a/etc/refcards/fr-dired-ref.pdf b/etc/refcards/fr-dired-ref.pdf
new file mode 100644
index 00000000000..e23d4bd04c1
--- /dev/null
+++ b/etc/refcards/fr-dired-ref.pdf
Binary files differ
diff --git a/etc/fr-drdref.tex b/etc/refcards/fr-dired-ref.tex
index e768a521203..0e082c8bdd2 100644
--- a/etc/fr-drdref.tex
+++ b/etc/refcards/fr-dired-ref.tex
@@ -20,13 +20,20 @@
% Boston, MA 02110-1301, USA.
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
%**start of header
\newcount\columnsperpage
\columnsperpage=2
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% This file is intended to be processed by plain TeX (TeX82).
% The reference card looks OK with 2 columns per page, portrait mode.
% I haven't tried it with 3 columns per page.
diff --git a/etc/refcards/fr-refcard.pdf b/etc/refcards/fr-refcard.pdf
new file mode 100644
index 00000000000..eedf0de063e
--- /dev/null
+++ b/etc/refcards/fr-refcard.pdf
Binary files differ
diff --git a/etc/fr-refcard.tex b/etc/refcards/fr-refcard.tex
index 202f5d483d2..b8264c94412 100644
--- a/etc/fr-refcard.tex
+++ b/etc/refcards/fr-refcard.tex
@@ -1,17 +1,17 @@
% Reference Card for GNU Emacs version 22 on Unix systems
%**start of header
\newcount\columnsperpage
-\newcount\letterpaper
% This file can be printed with 1, 2, or 3 columns per page (see below).
% Specify how many you want here.
\columnsperpage=3
-% Set letterpaper to 0 for A4 paper, 1 for letter (US) paper. Useful
-% only when columnsperpage is 2 or 3.
+% PDF output layout. 0 for A4, 1 for Letter (US), a `l' is added for
+% a landscape layout.
-\letterpaper=0
+\input pdflayout.sty
+\pdflayout=(0l)
% Nothing else needs to be changed below this line.
% Copyright (C) 1987, 1993, 1996, 1997, 2001, 2002, 2003, 2004,
@@ -82,9 +82,9 @@
\centerline{traduction fran\c{c}aise de Micha\"el Cadilhac}
% previously: Eric Jacoboni
-Vous pouvez faire et distribuer des copies de cette carte, pourvu que
-la note de copyright et cette note de permission soient conserv\'ees sur
-toutes les copies.
+Vous pouvez faire et distribuer des copies de cette carte, modifiée ou
+non, pourvu que la note de copyright et cette note de permission
+soient conserv\'ees sur toutes les copies.
Pour des copies du manuel GNU Emacs, \'ecrivez \`a la Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
@@ -308,7 +308,7 @@ suivez les instructions. Si vous d\'ebutez, faites \kbd{C-h t} pour un
\key{D\'ecrire une fonction}{C-h f}
\key{Obtenir des informations relatives au mode}{C-h m}
-\section{R\'ecup\'eration sur erreurs}
+\section{R\'ecup\'eration sur erreur}
\key{{\bf Abandonner} une commande}{C-g}
\metax{{\bf R\'ecup\'erer} les fichiers apr\`es un crash}{M-x recover-session}
@@ -649,8 +649,8 @@ Autres :
Exemples de d\'efinition globale de touches en Emacs Lisp :
\beginexample%
-(global-set-key "\\C-cg" 'goto-line)
-(global-set-key "\\M-\#" 'query-replace-regexp)
+(global-set-key (kbd "C-c g") 'search-forward)
+(global-set-key (kbd "M-\#") 'query-replace-regexp)
\endexample
\section{\'Ecriture de commandes}
@@ -683,7 +683,7 @@ plus de pr\'ecisions.
\bye
% Local variables:
-% compile-command: "tex fr-refcard"
+% compile-command: "pdftex fr-refcard"
% End:
% arch-tag: 39d6dc6e-1a4a-4071-84db-4719d4e9e40d
diff --git a/etc/fr-survival.tex b/etc/refcards/fr-survival.tex
index e39f23bf05b..2a1190b51f4 100644
--- a/etc/fr-survival.tex
+++ b/etc/refcards/fr-survival.tex
@@ -22,6 +22,12 @@
\endinput
\fi
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
% 2006, 2007 Free Software Foundation, Inc.
@@ -413,7 +419,7 @@ contient entre parenth\`eses le nom des modes en cours.
\bye
% Local variables:
-% compile-command: "tex survival"
+% compile-command: "pdftex survival"
% End:
% arch-tag: 2fb4e93f-8bfa-4ab4-bc6d-b475131d766a
diff --git a/etc/refcards/gnus-booklet.pdf b/etc/refcards/gnus-booklet.pdf
new file mode 100644
index 00000000000..1137d3e3a38
--- /dev/null
+++ b/etc/refcards/gnus-booklet.pdf
Binary files differ
diff --git a/etc/gnus-logo.eps b/etc/refcards/gnus-logo.eps
index 861414e52ee..861414e52ee 100644
--- a/etc/gnus-logo.eps
+++ b/etc/refcards/gnus-logo.eps
diff --git a/etc/refcards/gnus-logo.pdf b/etc/refcards/gnus-logo.pdf
new file mode 100644
index 00000000000..3629a605e6d
--- /dev/null
+++ b/etc/refcards/gnus-logo.pdf
Binary files differ
diff --git a/etc/refcards/gnus-refcard.pdf b/etc/refcards/gnus-refcard.pdf
new file mode 100644
index 00000000000..bcbde3da6b4
--- /dev/null
+++ b/etc/refcards/gnus-refcard.pdf
Binary files differ
diff --git a/etc/gnus-refcard.tex b/etc/refcards/gnus-refcard.tex
index 4bd03ad4f77..d5002b20ac2 100644
--- a/etc/gnus-refcard.tex
+++ b/etc/refcards/gnus-refcard.tex
@@ -121,7 +121,7 @@
\newcommand{\Copyright}{%
\begin{center}
Copyright \copyright\ 1995, 2000, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.\\*
\end{center}
Permission is granted to make and distribute copies of this reference
@@ -566,7 +566,7 @@
{\esamepage
\begin{keys}{C-c C-s C-a}
C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
- % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus
+ C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\
C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
C-c C-s C-i & Sort the summary-buffer by article score.\\
C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
@@ -876,6 +876,7 @@
\begin{keys}{/M}
// & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
/a & Limit the summary-buffer to articles matching {\bf author}.\\
+ /R & Limit the summary-buffer to articles matching {\bf recipient}.\\
/x & Limit depending on ``extra'' headers.\\
/u & (x) Limit to {\bf unread} articles.
[Prefix: also exclude ticked and dormant articles]\\
@@ -900,7 +901,7 @@
/o & Insert all {\bf old} articles. [Prefix: how many]\\
/N & Insert all {\bf new} articles.\\
/p & Limit to articles {\bf predicated} in the `display' group parameter.\\
- % /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus
+ /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\
\end{keys}
}
}
diff --git a/etc/refcards/orgcard.pdf b/etc/refcards/orgcard.pdf
new file mode 100644
index 00000000000..26f1d63b65e
--- /dev/null
+++ b/etc/refcards/orgcard.pdf
Binary files differ
diff --git a/etc/orgcard.tex b/etc/refcards/orgcard.tex
index 1207fadc76b..95cd63b04c2 100644
--- a/etc/orgcard.tex
+++ b/etc/refcards/orgcard.tex
@@ -1,27 +1,33 @@
% Reference Card for Org Mode
-\def\orgversionnumber{4.67}
+\def\orgversionnumber{5.03}
\def\versionyear{2007} % latest update
\def\year{2007} % latest copyright year
-%
+
%**start of header
\newcount\columnsperpage
+\newcount\letterpaper
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% At the moment this card works quite nicely in 3 column format and
-% currently takes 2 full pages. It is thus suited to producing one
-% double-side page when printed.
+% Specify how many you want here.
-% There are a couple of tweaks in the format of this card which make it work
-% slightly better on A4 paper. The changes due, I think, to Stephen Eglen,
-% are commented below. Revert the changes if you want letter sized paper.
+\columnsperpage=3
-% Try running something like
-% tex org-mode-ref.tex; dvips -t landscape org-mode-ref.dvi
-% to print the card
+% Set letterpaper to 0 for A4 paper, 1 for letter (US) paper. Useful
+% only when columnsperpage is 2 or 3.
-\columnsperpage=3
+\letterpaper=0
+
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
-% Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc
+\input pdflayout.sty
+\pdflayout=(0l)
+
+% Nothing else needs to be changed below this line.
+% Copyright (C) 1987, 1993, 1996, 1997, 2001, 2002, 2003, 2004,
+% 2005, 2006, 2007 Free Software Foundation, Inc.
+
+% 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
@@ -35,8 +41,8 @@
% You should have received a copy of the GNU General Public License
% along with GNU Emacs; see the file COPYING. If not, write to
-% the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-% Boston, MA 02111-1307, USA.
+% the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+% Boston, MA 02110-1301, USA.
% This file is intended to be processed by plain TeX (TeX82).
%
@@ -54,6 +60,10 @@
% For this you need a dvi device driver that can print sideways.
% Which mode to use is controlled by setting \columnsperpage above.
%
+% To compile and print this document:
+% tex refcard.tex
+% dvips -t landscape refcard.dvi
+%
% Author:
% Stephen Gildea
% Internet: gildea@stop.mail-abuse.org
@@ -82,20 +92,20 @@ are preserved on all copies.
% can be scanned without complaint.
\def\bye{\par\vfill\supereject\end}
-\newdimen\intercolumnskip %horizontal space between columns
-\newbox\columna %boxes to hold columns already built
+\newdimen\intercolumnskip %horizontal space between columns
+\newbox\columna %boxes to hold columns already built
\newbox\columnb
\def\ncolumns{\the\columnsperpage}
-\message{[\ncolumns\space
+\message{[\ncolumns\space
column\if 1\ncolumns\else s\fi\space per page]}
\def\scaledmag#1{ scaled \magstep #1}
% This multi-way format was designed by Stephen Gildea October 1986.
% Note that the 1-column format is fontfamily-independent.
-\if 1\ncolumns %one-column format uses normal size
+\if 1\ncolumns %one-column format uses normal size
\hsize 4in
\vsize 10in
\voffset -.7in
@@ -106,15 +116,18 @@ are preserved on all copies.
\footline{\hss\folio}
\def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
-\else %2 or 3 columns uses prereduced size
- \hsize 3.2in
-
-% FIXME - Try to make things more A4 friendly
-% \vsize 7.95in
- \vsize 7.65in
-% \hoffset -.75in
- \hoffset -.25in
- \voffset -.745in
+\else %2 or 3 columns uses prereduced size
+ \if 1\the\letterpaper
+ \hsize 3.2in
+ \vsize 7.95in
+ \hoffset -.75in
+ \voffset -.745in
+ \else
+ \hsize 3.2in
+ \vsize 7.65in
+ \hoffset -.25in
+ \voffset -.745in
+ \fi
\font\titlefont=cmbx10 \scaledmag2
\font\headingfont=cmbx10 \scaledmag1
\font\smallfont=cmr6
@@ -132,13 +145,14 @@ are preserved on all copies.
\def\bf{\eightbf}
\def\it{\eightit}
\def\tt{\eighttt}
-
-% FIXME - Try to make things more A4 friendly
-% \normalbaselineskip=.8\normalbaselineskip
- \normalbaselineskip=.7\normalbaselineskip
+ \if 1\the\letterpaper
+ \normalbaselineskip=.8\normalbaselineskip
+ \else
+ \normalbaselineskip=.7\normalbaselineskip
+ \fi
\normallineskip=.8\normallineskip
\normallineskiplimit=.8\normallineskiplimit
- \normalbaselines\rm %make definitions take effect
+ \normalbaselines\rm %make definitions take effect
\if 2\ncolumns
\let\maxcolumn=b
@@ -154,16 +168,16 @@ are preserved on all copies.
\intercolumnskip=.46in
\def\abc{a}
- \output={% %see The TeXbook page 257
+ \output={% %see The TeXbook page 257
% This next line is useful when designing the layout.
%\immediate\write16{Column \folio\abc\space starts with \firstmark}
\if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
\else\if a\abc
- \global\setbox\columna\columnbox \global\def\abc{b}
+ \global\setbox\columna\columnbox \global\def\abc{b}
%% in case we never use \columnb (two-column mode)
\global\setbox\columnb\hbox to -\intercolumnskip{}
\else
- \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
+ \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
\def\multicolumnformat{\shipout\vbox{\makeheadline
\hbox{\box\columna\hskip\intercolumnskip
\box\columnb\hskip\intercolumnskip\columnbox}
@@ -173,7 +187,7 @@ are preserved on all copies.
\def\bye{\par\vfill\supereject
\if a\abc \else\null\vfill\eject\fi
\if a\abc \else\null\vfill\eject\fi
- \end}
+ \end}
\fi
% we won't be using math mode much, so redefine some of the characters
@@ -225,7 +239,7 @@ are preserved on all copies.
\def\<#1>{{\it #1\/}}
% kbd - argument is characters typed literally. Like the Texinfo command.
-\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
+\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
% beginexample...endexample - surrounds literal text, such a code example.
% typeset in a typewriter font with line breaks preserved
@@ -316,15 +330,15 @@ are preserved on all copies.
\section{Archiving}
\key{toggle ARCHIVE tag}{C-c C-x C-a}
-\metax{mark fully done children}{C-u C-c C-x C-a}
+%\metax{mark fully done children}{C-u C-c C-x C-a}
\key{force cycling of an ARCHIVEd tree}{C-TAB}
\key{move subtree to archive file}{C-c C-x C-s}
-\metax{move all fully done children}{C-u C-c C-x C-s}
-To set archive location for current file, add a line like$^2$:
-\vskip -1mm
-\beginexample%
-\#+ARCHIVE: archfile::* Archived Tasks
-\endexample
+%\metax{move all fully done children}{C-u C-c C-x C-s}
+%To set archive location for current file, add a line like$^2$:
+%\vskip -1mm
+%\beginexample%
+%\#+ARCHIVE: archfile::* Archived Tasks
+%\endexample
\section{Filtering and Sparse Trees}
@@ -359,13 +373,11 @@ Outside of tables, the same keys may have other functionality.
{\bf Row and column editing}
-\key{move the current column left}{M-LEFT}
-\key{move the current column right}{M-RIGHT}
+\key{move the current column left}{M-LEFT/RIGHT}
\key{kill the current column}{M-S-LEFT}
\key{insert new column to left of cursor position}{M-S-RIGHT}
-\key{move the current row up}{M-UP}
-\key{move the current row down}{M-DOWN}
+\key{move the current row up/down}{M-UP/DOWN}
\key{kill the current row or horizontal line}{M-S-UP}
\key{insert new row above the current row}{M-S-DOWN}
\key{insert hline below (\kbd{C-u} : above) current row}{C-c -}
@@ -378,34 +390,6 @@ Outside of tables, the same keys may have other functionality.
\key{paste rectangular region}{C-c C-x C-y}
\key{fill paragraph across selected cells}{C-c C-q}
-{\bf Calculations} (in combination with Emacs \kbd{calc} package)
-
-\key{set and eval column formula}{C-c =}
-\key{set and eval field formula}{C-u C-c =}
-\key{edit formulas in separate buffer}{C-c '}
-\key{re-apply all stored equations to current line}{C-c *}
-\key{re-apply all stored equations to entire table}{C-u C-c *}
-\key{iterate table to stability}{C-u C-u C-c *}
-
-%\kbd{TAB}, \kbd{RET} and \kbd{C-c C-c} trigger automatic recalculation
-%in lines starting with: {\tt | \# |}.
-
-\key{rotate calculation mark through \# * ! \^ \_ \$}{C-\#}
-
-\key{show line, column, formula reference}{C-c ?}
-\key{sum numbers in current column/rectangle}{C-c +}
-\key{copy down with increment}{S-RET$^3$}
-
-Formulas typed in field are executed by \kbd{TAB},
-\kbd{RET} and \kbd{C-c C-c}. \kbd{=} introduces a column
-formula, \kbd{:=} a named-field formula.
-
-\key{Example: Add Col1 and Col2}{=\$1+\$2}
-\key{... with printf format specification}{=\$1+\$2;\%.2f}
-\key{... with constants from constants.el}{=\$1/\$c/\$cm}
-\metax{sum from 2nd to 3rd hline}{:=vsum(@II..@III)}
-\key{apply current column formula}{=}
-
{\bf Miscellaneous}
\key{to limit column width to \kbd{N} characters, use}{...| <N> |...}
@@ -413,6 +397,7 @@ formula, \kbd{:=} a named-field formula.
\key{make current field fully visible}{C-u TAB}
\metax{export as tab-separated file}{M-x org-table-export}
\metax{import tab-separated file}{M-x org-table-import}
+\key{sum numbers in current column/rectangle}{C-c +}
{\bf Tables created with the \kbd{table.el} package}
@@ -420,6 +405,43 @@ formula, \kbd{:=} a named-field formula.
\key{recognize existing table.el table}{C-c C-c}
\key{convert table (Org-mode $\leftrightarrow$ table.el)}{C-c ~}
+{\bf Spreadsheet}
+
+Formulas typed in field are executed by \kbd{TAB},
+\kbd{RET} and \kbd{C-c C-c}. \kbd{=} introduces a column
+formula, \kbd{:=} a field formula.
+
+\key{Example: Add Col1 and Col2}{|=\$1+\$2 |}
+\key{... with printf format specification}{|=\$1+\$2;\%.2f|}
+\key{... with constants from constants.el}{|=\$1/\$c/\$cm |}
+\metax{sum from 2nd to 3rd hline}{|:=vsum(@II..@III)|}
+\key{apply current column formula}{| = |}
+
+\key{set and eval column formula}{C-c =}
+\key{set and eval field formula}{C-u C-c =}
+\key{re-apply all stored equations to current line}{C-c *}
+\key{re-apply all stored equations to entire table}{C-u C-c *}
+\key{iterate table to stability}{C-u C-u C-c *}
+\key{rotate calculation mark through \# * ! \^ \_ \$}{C-\#}
+\key{show line, column, formula reference}{C-c ?}
+\key{toggle coordinate grid}{C-c \}}
+\key{toggle formula debugger}{C-c \{}
+
+\newcolumn
+{\it Formula Editor}
+
+\key{edit formulas in separate buffer}{C-c '}
+\key{exit and install new formulas}{C-c C-c}
+\key{exit, install, and apply new formulas}{C-u C-c C-c}
+\key{abort}{C-c C-q}
+\key{toggle reference style}{C-c C-r}
+\key{pretty-print Lisp formula}{TAB}
+\key{complete Lisp symbol}{M-TAB}
+\key{shift reference point}{S-cursor}
+\key{shift test line for column references}{M-up/down}
+\key{scroll the window showing the table}{M-S-up/down}
+\key{toggle table coordinate grid}{C-c \}}
+
\section{Links}
\key{globally store link to the current location}{C-c l$^1$}
@@ -466,24 +488,24 @@ formula, \kbd{:=} a named-field formula.
%\key{\kbd{vm://myself@some.where.org/folder\#id}}{\rm VM remote}
-\section{Remember-mode Integration}
+% \section{Remember-mode Integration}
-See the manual for how to make remember.el use Org-mode links and
-files. The note-finishing command \kbd{C-c C-c} will first prompt for
-an org file. In the file, find a location with:
+% See the manual for how to make remember.el use Org-mode links and
+% files. The note-finishing command \kbd{C-c C-c} will first prompt for
+% an org file. In the file, find a location with:
-\key{rotate subtree visibility}{TAB}
-\key{next heading}{DOWN}
-\key{previous heading}{UP}
+% \key{rotate subtree visibility}{TAB}
+% \key{next heading}{DOWN}
+% \key{previous heading}{UP}
-Insert the note with one of the following:
+% Insert the note with one of the following:
-\key{as sublevel of heading at cursor}{RET}
-\key{right here (cursor not on heading)}{RET}
-\key{before current heading}{LEFT}
-\key{after current heading}{RIGHT}
-\key{shortcut to end of buffer (cursor at buf-start)}{RET}
-\key{Abort}{q}
+% \key{as sublevel of heading at cursor}{RET}
+% \key{right here (cursor not on heading)}{RET}
+% \key{before current heading}{LEFT}
+% \key{after current heading}{RIGHT}
+% \key{shortcut to end of buffer (cursor at buf-start)}{RET}
+% \key{Abort}{q}
\section{Completion}
@@ -502,16 +524,18 @@ after ``{\tt :}'', and dictionary words elsewhere.
\section{TODO Items and Checkboxes}
\key{rotate the state of the current item}{C-c C-t}
+\metax{select next/previous state}{S-LEFT/RIGHT}
+\metax{select next/previous set}{C-S-LEFT/RIGHT}
\key{view TODO items in a sparse tree}{C-c C-v}
\key{view 3rd TODO keyword's sparse tree}{C-3 C-c C-v}
\key{set the priority of the current item}{C-c , [ABC]}
\key{remove priority cookie from current item}{C-c , SPC}
-\key{raise priority of current item}{S-UP$^3$}
-\key{lower priority of current item}{S-DOWN$^3$}
+\key{raise/lower priority of current item}{S-UP/DOWN$^3$}
+%\key{lower priority of current item}{S-DOWN$^3$}
-\key{\kbd{\#+SEQ_TODO: TODO TRY BLUFF DONE}}{\rm todo workflow}
-\key{\kbd{\#+TYP_TODO: Phil home work DONE}}{\rm todo types}
+%\key{\kbd{\#+SEQ_TODO: TODO TRY BLUFF DONE}}{\rm todo workflow}
+%\key{\kbd{\#+TYP_TODO: Phil home work DONE}}{\rm todo types}
\key{insert new checkbox item in plain list}{M-S-RET}
\key{toggle checkbox(es) in region/entry/at point}{C-c C-x C-b}
@@ -526,6 +550,24 @@ after ``{\tt :}'', and dictionary words elsewhere.
\key{create sparse tree with matching tags}{C-c \\}
\key{globally (agenda) match tags at cursor}{C-c C-o}
+\section{Properties and Column View}
+
+\key{special commands in property lines}{C-c C-c}
+\key{next/previous allowed value}{S-left/right}
+\key{turn on column view}{C-c C-x C-c}
+
+\key{quit column view}{q}
+\key{next/previous allowed value}{S-left/right}
+\key{next/previous allowed value}{n / p}
+\key{edit value}{e}
+\key{edit allowed values list}{a}
+\key{show value}{v}
+\key{make column wider/narrower}{> / <}
+\key{move column left/right}{M-left/right}
+\key{add new column}{M-S-right}
+\key{Delete current column}{M-S-left}
+
+
\section{Timestamps}
\key{prompt for date and insert timestamp}{C-c .}
@@ -548,23 +590,17 @@ after ``{\tt :}'', and dictionary words elsewhere.
%\key{... forward/backward one month}{M-S-LEFT/RIGT}
\key{Toggle custom format display for dates/times}{C-c C-x C-t}
+\newcolumn
-\section{Clocking Time}
+{\bf Clocking time}
\key{start clock on current item}{C-c C-x C-i}
\key{stop clock on current item}{C-c C-x C-o}
\key{cancel current clock}{C-c C-x C-x}
-
\key{display total subtree times}{C-c C-x C-d}
\key{remove displayed times}{C-c C-c}
\key{insert/update table with clock report}{C-c C-x C-r}
-\section{LaTeX and cdlatex-mode}
-
-\key{preview LaTeX fragment}{C-c C-x C-l}
-\key{Expand abbreviation (cdlatex-mode)}{TAB}
-\key{Insert/modify math symbol (cdlatex-mode)}{` / '}
-
\section{Agenda Views}
\key{add/move current file to front of agenda}{C-c [}
@@ -605,7 +641,7 @@ To set categories, add lines like$^2$:
{\bf Change display}
\key{delete other windows}{o}
-\key{switch to daily / weekly view}{d / w}
+\key{switch to day/week/month/year view}{d w m y}
\key{toggle inclusion of diary entries}{D}
\key{toggle time grid for daily schedule}{g}
\key{toggle display of logbook entries}{l}
@@ -632,6 +668,7 @@ To set categories, add lines like$^2$:
\key{change timestamp to today}{>}
\key{insert new entry into diary}{i}
+\newcolumn
\key{start the clock on current item (clock-in)}{I}
\key{stop the clock (clock-out)}{O}
\key{cancel current clock}{X}
@@ -640,7 +677,6 @@ To set categories, add lines like$^2$:
\key{Open link in current line}{C-c C-o}
-\newcolumn
{\bf Calendar commands}
\key{find agenda cursor date in calendar}{c}
@@ -662,6 +698,12 @@ Include Emacs diary entries into Org-mode agenda with:
(setq org-agenda-include-diary t)
\endexample
+\section{LaTeX and cdlatex-mode}
+
+\key{preview LaTeX fragment}{C-c C-x C-l}
+\key{Expand abbreviation (cdlatex-mode)}{TAB}
+\key{Insert/modify math symbol (cdlatex-mode)}{` / '}
+
\section{Exporting and Publishing}
Exporting creates files with extensions {\it .txt\/} and {\it .html\/}
@@ -674,17 +716,17 @@ some other place.
\key{insert template of export options}{C-c C-x t}
\key{toggle fixed width for entry or region}{C-c :}
-{\bf HTML formatting}
+%{\bf HTML formatting}
-\key{make words {\bf bold}}{*bold*}
-\key{make words {\it italic}}{/italic/}
-\key{make words \underbar{underlined}}{_underlined_}
-\key{sub- and superscripts}{x\^{}3, J_dust}
-\key{\TeX{}-like macros}{\\alpha, \\to}
-\key{typeset lines in fixed width font}{start with :}
-\key{tables are exported as HTML tables}{start with |}
-\key{links become HTML links}{http:... etc}
-\key{include html tags}{@<b>...@</b>}
+%\key{make words {\bf bold}}{*bold*}
+%\key{make words {\it italic}}{/italic/}
+%\key{make words \underbar{underlined}}{_underlined_}
+%\key{sub- and superscripts}{x\^{}3, J_dust}
+%\key{\TeX{}-like macros}{\\alpha, \\to}
+%\key{typeset lines in fixed width font}{start with :}
+%\key{tables are exported as HTML tables}{start with |}
+%\key{links become HTML links}{http:... etc}
+%\key{include html tags}{@<b>...@</b>}
%{\bf Export options}
%
@@ -720,21 +762,6 @@ Subtrees whose header starts with COMMENT are never exported.
\key{toggle COMMENT keyword on entry}{C-c ;}
-
-%\section{CUA and pc-select compatibility}%
-
-%Configure the variable {\tt org-CUA-compatibility} to make Org-mode
-%avoid the \kbd{S-<cursor>} bindings used by these modes. When set,
-%Org-mode will change the following keybindings (also in the agenda
-%buffer, but not during date selection). See note mark four$^3$
-%throughout the reference card.
-%%\vskip-mm
-%\beginexample
-%S-UP $\to$ M-p S-DOWN $\to$ M-n
-%S-LEFT $\to$ M-- S-RIGHT $\to$ M-+
-%S-RET $\to$ C-S-RET
-%\endexample
-
\section{Dynamic Blocks}
\key{update dynamic block at point}{C-c C-x C-u}
@@ -753,10 +780,8 @@ $^3$ Keybinding affected by {\tt org-CUA-compatibility}.
\bye
+% Local variables:
+% compile-command: "pdftex refcard"
+% End:
% arch-tag: 139f6750-5cfc-49ca-92b5-237fe5795290
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: t
-%%% End:
diff --git a/etc/refcards/pdflayout.sty b/etc/refcards/pdflayout.sty
new file mode 100644
index 00000000000..187ffee867b
--- /dev/null
+++ b/etc/refcards/pdflayout.sty
@@ -0,0 +1,49 @@
+% Copyright (C) 2007 Free Software Foundation, Inc.
+
+% 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 3, 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.
+
+% This file defines `\pdflayout':
+% - \pdflayout=(0) is A4 portrait,
+% - \pdflayout=(1) is letter (US) portrait,
+% - \pdflayout=(0l) is A4 landscape.
+% - \pdflayout=(1l) is letter (US) landscape,
+
+\input ifpdf.sty
+
+\ifpdf
+ \def\pdflayout=(#1#2){
+ \if0#1 % A4
+ \pdfpagewidth=21cm
+ \pdfpageheight=29.7cm
+ \else\if1#1 % Letter
+ \pdfpagewidth=8.5in
+ \pdfpageheight=11in
+ \fi\fi
+ \if l#2 % Landscape
+ \edef\oldwidth{\the\pdfpagewidth}
+ \pdfpagewidth=\pdfpageheight
+ \pdfpageheight=\oldwidth
+ \fi
+ }
+\else
+ \def\pdflayout=(#1#2){}
+\fi
+
+% archtag: 63c938a5-cc78-4964-962d-603c90d34afc
+
+% arch-tag: 3464d27c-1439-473a-bc47-a7c501e8c156
diff --git a/etc/refcards/pl-refcard.pdf b/etc/refcards/pl-refcard.pdf
new file mode 100644
index 00000000000..03e517bc33d
--- /dev/null
+++ b/etc/refcards/pl-refcard.pdf
Binary files differ
diff --git a/etc/pl-refcard.tex b/etc/refcards/pl-refcard.tex
index 43f583b8e75..f9e478f6467 100644
--- a/etc/pl-refcard.tex
+++ b/etc/refcards/pl-refcard.tex
@@ -28,10 +28,17 @@
\newcount\columnsperpage
% This file can be printed with 1, or 2 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
\columnsperpage=2
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005,
% 2006, 2007 Free Software Foundation, Inc.
@@ -995,7 +1002,7 @@ przez wywo/lanie \kbd{C-h f interactive}.
\bye
% Local variables:
-% compile-command: "tex pl-refcard"
+% compile-command: "pdftex pl-refcard"
% End:
% arch-tag: 19d15a16-70be-40c8-ad91-88899aac32a9
diff --git a/etc/refcards/pt-br-refcard.pdf b/etc/refcards/pt-br-refcard.pdf
new file mode 100644
index 00000000000..ca65c99699c
--- /dev/null
+++ b/etc/refcards/pt-br-refcard.pdf
Binary files differ
diff --git a/etc/pt-br-refcard.tex b/etc/refcards/pt-br-refcard.tex
index 6492ce55c10..2531af624b2 100644
--- a/etc/pt-br-refcard.tex
+++ b/etc/refcards/pt-br-refcard.tex
@@ -8,11 +8,17 @@
\columnsperpage=3
-% Set letterpapaer to 0 for A4 paper, 1 for letter (US) paper. Useful
+% Set letterpaper to 0 for A4 paper, 1 for letter (US) paper. Useful
% only when columnsperpage is 2 or 3.
\letterpaper=0
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0l)
+
% Nothing else needs to be changed below this line.
% Copyright (C) 1987, 1993, 1996, 1997, 2002, 2003, 2004,
% 2006, 2007 Free Software Foundation, Inc.
@@ -681,7 +687,7 @@ detalhes.
\bye
% Local variables:
-% compile-command: "tex pt-br-refcard"
+% compile-command: "pdftex pt-br-refcard"
% coding: iso-latin-1
% End:
diff --git a/etc/refcards/refcard.pdf b/etc/refcards/refcard.pdf
new file mode 100644
index 00000000000..51dd3343d6d
--- /dev/null
+++ b/etc/refcards/refcard.pdf
Binary files differ
diff --git a/etc/refcard.tex b/etc/refcards/refcard.tex
index cbe82c48c9c..0e12bf57ac6 100644
--- a/etc/refcard.tex
+++ b/etc/refcards/refcard.tex
@@ -8,11 +8,17 @@
\columnsperpage=3
-% Set letterpapaer to 0 for A4 paper, 1 for letter (US) paper. Useful
+% Set letterpaper to 0 for A4 paper, 1 for letter (US) paper. Useful
% only when columnsperpage is 2 or 3.
\letterpaper=1
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(1l)
+
% Nothing else needs to be changed below this line.
% Copyright (C) 1987, 1993, 1996, 1997, 2001, 2002, 2003, 2004,
% 2005, 2006, 2007 Free Software Foundation, Inc.
@@ -673,7 +679,7 @@ Type \kbd{C-h f interactive} for more details.
\bye
% Local variables:
-% compile-command: "tex refcard"
+% compile-command: "pdftex refcard"
% End:
% arch-tag: d67bdf5d-b77c-44eb-a22e-f4f7d25174d2
diff --git a/etc/refcards/ru-refcard.pdf b/etc/refcards/ru-refcard.pdf
new file mode 100644
index 00000000000..d962cd8edd3
--- /dev/null
+++ b/etc/refcards/ru-refcard.pdf
Binary files differ
diff --git a/etc/ru-refcard.tex b/etc/refcards/ru-refcard.tex
index 2853c65a115..16f9538857a 100644
--- a/etc/ru-refcard.tex
+++ b/etc/refcards/ru-refcard.tex
@@ -518,7 +518,7 @@ With ARG, put point on line ARG."
\end{document}
% Local variables:
-% compile-command: "latex ru-refcard"
+% compile-command: "pdflatex ru-refcard"
% coding: cyrillic-koi8
% End:
diff --git a/etc/refcards/sk-dired-ref.pdf b/etc/refcards/sk-dired-ref.pdf
new file mode 100644
index 00000000000..412cd3bc20c
--- /dev/null
+++ b/etc/refcards/sk-dired-ref.pdf
Binary files differ
diff --git a/etc/sk-dired-ref.tex b/etc/refcards/sk-dired-ref.tex
index e00de765241..4767ad7de75 100644
--- a/etc/sk-dired-ref.tex
+++ b/etc/refcards/sk-dired-ref.tex
@@ -23,13 +23,20 @@
% Boston, MA 02110-1301, USA.
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
%**start of header
\newcount\columnsperpage
\columnsperpage=2
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% This file is intended to be processed by plain TeX (TeX82).
% The reference card looks OK with 2 columns per page, portrait mode.
% I haven't tried it with 3 columns per page.
diff --git a/etc/refcards/sk-refcard.pdf b/etc/refcards/sk-refcard.pdf
new file mode 100644
index 00000000000..722e9332d82
--- /dev/null
+++ b/etc/refcards/sk-refcard.pdf
Binary files differ
diff --git a/etc/sk-refcard.tex b/etc/refcards/sk-refcard.tex
index be5b57b8405..e51a1872d9b 100644
--- a/etc/sk-refcard.tex
+++ b/etc/refcards/sk-refcard.tex
@@ -7,10 +7,17 @@
\newcount\columnsperpage
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
\columnsperpage=1
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
+% Nothing else needs to be changed.
% Copyright (C) 1987, 1993, 1996, 1997, 2001, 2002, 2003, 2004,
% 2005, 2006, 2007 Free Software Foundation, Inc.
diff --git a/etc/sk-survival.tex b/etc/refcards/sk-survival.tex
index 61d549e1b5b..d936c6da393 100644
--- a/etc/sk-survival.tex
+++ b/etc/refcards/sk-survival.tex
@@ -21,6 +21,12 @@
\endinput
\fi
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(0)
+
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
% 2006, 2007 Free Software Foundation, Inc.
diff --git a/etc/survival.tex b/etc/refcards/survival.tex
index 45662ecc4ea..75072f7b4e8 100644
--- a/etc/survival.tex
+++ b/etc/refcards/survival.tex
@@ -3,9 +3,6 @@
% Title: GNU Emacs Survival Card
% Author: Wlodek Bzyl <matwb@univ.gda.pl>
%
-% $Revision: 1.8 $
-% $Date: 2000/05/05 22:00:48 $
-%
%**start of header
% User interface is `plain.tex' and macros described below
@@ -25,6 +22,12 @@
\endinput
\fi
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(1)
+
% Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
% 2006, 2007 Free Software Foundation, Inc.
@@ -410,7 +413,7 @@ contains names of the current modes, in parentheses.
\bye
% Local variables:
-% compile-command: "tex survival"
+% compile-command: "pdftex survival"
% End:
% arch-tag: 4f9a0562-617b-4843-aee1-450c41d6b22c
diff --git a/etc/vipcard.tex b/etc/refcards/vipcard.tex
index 667a8e9d132..09fc583eb4a 100644
--- a/etc/vipcard.tex
+++ b/etc/refcards/vipcard.tex
@@ -3,10 +3,17 @@
\newcount\columnsperpage
% This file can be printed with 1, 2, or 3 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
\columnsperpage=1
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(1)
+
+% Nothing else needs to be changed.
% Copyright (C) 1987, 2001, 2002, 2003, 2004, 2005,
% 2006, 2007 Free Software Foundation, Inc.
@@ -678,7 +685,7 @@ moves 11 lines below current line to the end of buffer.
\bye
% Local variables:
-% compile-command: "tex refcard"
+% compile-command: "pdftex vipcard"
% End:
% arch-tag: 342a9548-4de4-499d-b864-74fb426b6729
diff --git a/etc/viperCard.tex b/etc/refcards/viperCard.tex
index 71996e9d143..b672ce9ebc8 100644
--- a/etc/viperCard.tex
+++ b/etc/refcards/viperCard.tex
@@ -3,10 +3,17 @@
\newcount\columnsperpage
% This file can be printed with 1 or 2 columns per page (see below).
-% Specify how many you want here. Nothing else needs to be changed.
+% Specify how many you want here.
\columnsperpage=2
+% PDF output layout. 0 for A4, 1 for letter (US), a `l' is added for
+% a landscape layout.
+
+\input pdflayout.sty
+\pdflayout=(1)
+
+% Nothing else needs to be changed.
% Copyright (C) 1995, 1996, 1997, 2001, 2002, 2003, 2004,
% 2005, 2006, 2007 Free Software Foundation, Inc.
@@ -743,7 +750,7 @@ Ex commands can be made to have history. See the manual for details.
\bye
% Local variables:
-% compile-command: "tex viperCard"
+% compile-command: "pdftex viperCard"
% End:
% arch-tag: e287b45c-4c5e-4bf9-ae28-ead4cd9f68e3
diff --git a/etc/ru-refcard.ps b/etc/ru-refcard.ps
deleted file mode 100644
index 108beb7b80f..00000000000
--- a/etc/ru-refcard.ps
+++ /dev/null
@@ -1,3938 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software
-%%Title: ru-refcard.dvi
-%%Pages: 6
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: CMSY10 CMMI10 CMSY8
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips ru-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.01.20:1526
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMSY8
-%!PS-AdobeFont-1.1: CMSY8 1.0
-%%CreationDate: 1991 Aug 15 07:22:10
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY8) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY8 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-30 -955 1185 779}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
-F83C7D393392BCBC227771CDCB976E93302531886DDA73EBC9178917EFD0C20B
-133F1E59A8222E5BFB551A83F4FA4E7575C4E9556A1CD08636CCD84A8CD68BC5
-B0B5FDB60A42D5268523571C380A40A2185DA33AFCEF07CF681C587F69335477
-0A535626330F01005AE0E22F4F056542904D0BC2735740435058364F3E7EAE12
-D6E8F8F33F9F6E5B5DC4B10CCE72C3A8B08746022ADDA3C1C47766E8BE936416
-3C4F26FA35AF5DA3F7D9F49E6A866FE2F2536512BF226E3CCD1C2B9ADF85B404
-6377DEB1E20508D3D0E69F244B91C1C736A1BE3815FDDAB369C55D99CDA5C82A
-7873D8B378A3ED6E0D6C518B5F741029D946B0356249E3A6BCD013B7C829C503
-BA9D46A1C3CBD3FEC92F0C2D2207B273DC24E300E83AB9EED3EBBA394BE52DBA
-35BA6B291F971A79BC60
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD
-0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE
-E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C
-7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37
-88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6
-DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1
-AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY10
-%!PS-AdobeFont-1.1: CMSY10 1.0
-%%CreationDate: 1991 Aug 15 07:20:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 106 /bar put
-dup 110 /backslash put
-readonly def
-/FontBBox{-29 -960 1116 775}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
-515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD
-5F3D998C7A49AEF3CB6B1A9EB69F3CEA454AD2808F02492DD00C7050748656DA
-5A3A67850F65A778D67EBCC7040722819412C6225B3188DD2D94DDE572362C17
-4F50D814C4EBB50F501DE84522460B812765DDAABC6A311FFB429457E6767CDA
-983F330179AF9D598AEB9650568AD79307FB100555AB73B0929E428272550D22
-FBFA319BCE7F77420EFC9514634223E3BB29AD77E0B2A7D67B90AF5FEF8199FF
-0109AF4F39A23E7860EFC6F83A1BEE01DA2F5092363C2FA05251FAB8B291517B
-5806321FFA8B26906A5EECFE9CDD4949944E19B3504B268938BCAC03C2CE0CC5
-F4465CF1CF403B667113059AC5D340E30AE1825AA2829DA83196C33044E6023F
-C1654A0861D138AE84F16B962C0122AC9345ED069B0D66F1B775F1D5E3CD3B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (ru-refcard.dvi)
-@start /Fa 242[71 13[{}1 66.4176 /CMSY8 rf
-%DVIPSBitmapFont: Fb larm0800 8 56
-/Fb 56 241 df<3C007E00FF00FF00FF80FF807F803D8001800180018003800300030007
-0006000E001C0038007000600009157A8714>44 D<FFFFC0FFFFC0FFFFC0FFFFC012047F
-9018>I<3C7EFFFFFFFF7E3C08087A8714>I<003FC00000FFF00003E07C0007C03E000F80
-1F000F000F001E0007801E0007803E0007C03E0007C07C0003E07C0003E07C0003E07C00
-03E07C0003E0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC00
-03F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C00
-03E07C0003E07C0003E07E0007E03E0007C03E0007C03E0007C01F000F800F000F000F80
-1F0007C03E0003F0FC0000FFF000003FC0001C2D7DAB23>48 D<000C00003C00007C0003
-FC00FFFC00FC7C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
-7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
-7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
-7C00007C0000FE007FFFFE7FFFFE172C7AAB23>I<007F800001FFF0000780FC000E003F
-001C001F8038000FC070000FC0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003
-F0FE0003F07C0007F0000007F0000007F0000007E000000FE000000FC000001FC000001F
-8000003F0000007E0000007C000000F8000001F0000003E0000007C000000F8000001E00
-00003C00000078000000F0003000E0003001C0003003800060070000600E0000E01FFFFF
-E03FFFFFE07FFFFFC0FFFFFFC0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC00
-0E007E001C003F001C001F803F001FC03F001FC03F800FC03F000FC03F000FC00C001FC0
-00001FC000001F8000001F8000003F0000003E0000007C000000F8000003F00000FFC000
-00FFF0000000FC0000003F0000001F8000001FC000000FC000000FE000000FE0000007F0
-000007F0380007F07C0007F0FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC0
-70001FC038001F801E003F000780FC0001FFF000007FC0001C2D7DAB23>I<0C0001800F
-C01F800FFFFF000FFFFE000FFFFC000FFFF0000FFFC0000C7E00000C0000000C0000000C
-0000000C0000000C0000000C0000000C0000000C0000000C1FC0000C7FF8000DE07C000F
-801F000F001F800E000F800C0007C0000007E0000007E0000003E0000003F0000003F000
-0003F0000003F0780003F0FC0003F0FC0003F0FC0003F0FC0003F0F80007E0E00007E060
-0007C070000FC038000F801C001F000E003E000780F80001FFE000007F80001C2D7DAB23
->53 D<0003F800000FFE00003E078000F8018001F007C003E00FC007C00FC00F800FC00F
-800FC01F0007801F0000003E0000003E0000007E0000007E0000007C0000007C0FC000FC
-3FF000FCF07C00FDC01E00FF800F00FF000F80FF0007C0FE0007E0FE0007E0FE0003E0FC
-0003F0FC0003F0FC0003F0FC0003F07C0003F07C0003F07C0003F07E0003F07E0003F03E
-0003E03E0007E01E0007E01F0007C00F000F8007801F0003C03E0001E07C00007FF00000
-1FC0001C2D7DAB23>I<300000003C0000003FFFFFF83FFFFFF83FFFFFF07FFFFFF07FFF
-FFE0700001C06000018060000380C0000700C0000E00C0000C0000001C00000038000000
-3000000070000000E0000001C0000001C00000038000000380000007000000070000000F
-0000000E0000001E0000001E0000003E0000003E0000003E0000003C0000007C0000007C
-0000007C0000007C000000FC000000FC000000FC000000FC000000FC000000FC000000FC
-000000FC000000FC0000007800001D2E7CAC23>I<0000000000C00000000003C0000000
-000F00000000003C0000000000F00000000003C0000000000F00000000003C0000000000
-F00000000003C0000000001F00000000007C0000000001E0000000000780000000001E00
-00000000780000000001E0000000000780000000001E0000000000780000000000E00000
-0000007800000000001E000000000007800000000001E000000000007800000000001E00
-0000000007800000000001E000000000007C00000000001F000000000003C00000000000
-F000000000003C00000000000F000000000003C00000000000F000000000003C00000000
-000F000000000003C00000000000C02A297AA437>60 D<C00000000000F000000000003C
-00000000000F000000000003C00000000000F000000000003C00000000000F0000000000
-03C00000000000F000000000003E00000000000F800000000001E0000000000078000000
-00001E000000000007800000000001E000000000007800000000001E0000000000078000
-00000001C0000000000780000000001E0000000000780000000001E00000000007800000
-00001E0000000000780000000001E0000000000F80000000003E0000000000F000000000
-03C0000000000F00000000003C0000000000F00000000003C0000000000F00000000003C
-0000000000F00000000000C000000000002A297AA437>62 D<00003FF000000001FFFE00
-000007C00F8000001E0001E00000380000700000F000003C0001C000000E000380000007
-0007000000038006000FC001800E007FF001C01C01F03C00E01803E00E00603807C00700
-70300F80038030701F0001F838601F0001F818603E0000F818603E0000F818E03E0000F8
-1CC07C0000F80CC07C0000F80CC07C0000F80CC07C0000F80CC07C0000F80CC07C0000F8
-0CC07C0000F80CC07C0000F80CE03E0000F80C603E0000F80C603E0000F80C601F0001F8
-1C701F0001F818300F8003F8183807C007F8181803E00EF8381C01F03C7C700E007FF03F
-E006000FC00F8007000000000003800000000001C00000000000F00000003C0038000001
-FC001E00001FF00007C003FF800001FFFFF80000003FFE00002E307CAE37>64
-D<000001800000000003C00000000003C00000000003C00000000007E00000000007E000
-0000000FF0000000000FF0000000000FF0000000001BF80000000019F80000000019F800
-00000030FC0000000030FC0000000070FE00000000607E00000000607E00000000C03F00
-000000C03F00000000C03F00000001801F80000001801F80000003801FC0000003000FC0
-000003000FC00000060007E00000060007E00000060007E000000C0003F000000C0003F0
-00001FFFFFF800001FFFFFF80000180001F80000300000FC0000300000FC0000300000FC
-00006000007E00006000007E0000E000007F0000C000003F0000C000003F0001C000001F
-8003C000001F8007C000001FC00FF000003FE0FFFC0003FFFFFFFC0003FFFF302F7EAE35
->I<FFFFFFFC0000FFFFFFFF800003F8000FC00001F80003F00001F80001F80001F80000
-FC0001F80000FE0001F800007E0001F800007F0001F800007F0001F800007F0001F80000
-7F0001F800007F0001F800007F0001F800007E0001F80000FE0001F80000FC0001F80001
-F80001F80003F00001F8000FE00001F8007F800001FFFFFF000001FFFFFFE00001F80003
-F00001F80001FC0001F80000FE0001F800007F0001F800003F0001F800003F8001F80000
-1F8001F800001FC001F800001FC001F800001FC001F800001FC001F800001FC001F80000
-1FC001F800001F8001F800003F8001F800003F0001F800007F0001F80000FE0001F80003
-FC0003F8000FF000FFFFFFFFC000FFFFFFFE00002A2D7DAC32>I<00001FF000C00000FF
-FE01C00003F00F83C0000F8001E3C0003F000077C0007C00003FC001F800001FC003F000
-000FC007E0000007C007E0000007C00FC0000003C01FC0000003C01F80000001C03F8000
-0001C03F00000001C07F00000000C07F00000000C07F00000000C0FE0000000000FE0000
-000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000
-000000FE0000000000FE0000000000FE00000000007F00000000007F00000000C07F0000
-0000C03F00000000C03F80000000C01F80000001C01FC0000001800FC00000018007E000
-00038007E00000070003F00000060001F800000E00007C00001C00003F00007800000F80
-01E0000003F00FC0000000FFFE000000001FF000002A2F7CAD33>I<FFFFFFFFFC00FFFF
-FFFFFC0003F80003FC0001F800007C0001F800003E0001F800001E0001F800000E0001F8
-00000E0001F80000060001F80000060001F80000060001F80000070001F80000030001F8
-0030030001F80030030001F80030000001F80030000001F80030000001F80070000001F8
-0070000001F801F0000001FFFFF0000001FFFFF0000001F801F0000001F80070000001F8
-0070000001F80030000001F80030000001F8003000C001F8003000C001F8003000C001F8
-0000018001F80000018001F80000018001F80000018001F80000038001F80000030001F8
-0000070001F80000070001F800000F0001F800001F0001F800007F0003F80001FE00FFFF
-FFFFFE00FFFFFFFFFE002A2D7DAC30>69 D<FFFFFFFFFCFFFFFFFFFC03F80003FC01F800
-007C01F800003E01F800001E01F800000E01F800000E01F800000601F800000601F80000
-0601F800000701F800000301F800180301F800180301F800180001F800180001F8001800
-01F800380001F800780001F800F80001FFFFF80001FFFFF80001F800F80001F800780001
-F800380001F800180001F800180001F800180001F800180001F800180001F800000001F8
-00000001F800000001F800000001F800000001F800000001F800000001F800000001F800
-000001F800000001F800000003FC000000FFFFF80000FFFFF80000282D7EAC2E>I<0000
-1FF000C00000FFFE01C00003F00F83C0000F8001E3C0003F000077C0007C00003FC001F8
-00001FC003F000000FC007E0000007C007E0000007C00FC0000003C01FC0000003C01F80
-000001C03F80000001C03F00000001C07F00000000C07F00000000C07F00000000C0FE00
-00000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00
-00000000FE0000000000FE0000000000FE00001FFFFEFE00001FFFFE7F0000001FE07F00
-00000FC07F0000000FC03F0000000FC03F8000000FC01F8000000FC01FC000000FC00FC0
-00000FC007E000000FC007E000000FC003F000000FC001F800001FC0007C00001FC0003F
-00003FC0000F8000F3C00003F007C1C00000FFFF00C000001FF800002F2F7CAD37>I<FF
-FFF0FFFFF003FC0001F80001F80001F80001F80001F80001F80001F80001F80001F80001
-F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
-F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
-F80001F80001F80001F80001F80001F80003FC00FFFFF0FFFFF0142D7EAC19>73
-D<007FFFF0007FFFF00000FF0000007E0000007E0000007E0000007E0000007E0000007E
-0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E
-0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E
-0000007E0000007E0000007E0000007E0000007E0000007E0000007E0038007E00FE007E
-00FE007E00FE007E00FE00FE00FE00FC007800FC007001F8003803F0001E07E00007FF80
-0001FC00001C2E7DAC24>I<FFF800000007FFC0FFFC0000000FFFC003FC0000000FF000
-01FC0000000FE00001BE0000001BE00001BE0000001BE000019F00000033E000019F0000
-0033E000019F00000033E000018F80000063E000018F80000063E0000187C00000C3E000
-0187C00000C3E0000183E0000183E0000183E0000183E0000183E0000183E0000181F000
-0303E0000181F0000303E0000180F8000603E0000180F8000603E0000180F8000603E000
-01807C000C03E00001807C000C03E00001803E001803E00001803E001803E00001803E00
-1803E00001801F003003E00001801F003003E00001800F806003E00001800F806003E000
-018007C0C003E000018007C0C003E000018007C0C003E000018003E18003E000018003E1
-8003E000018001F30003E000018001F30003E000018001F30003E000018000FE0003E000
-018000FE0003E0000180007C0003E00003C0007C0003E0000FF0007C0007F000FFFF0038
-01FFFFC0FFFF003801FFFFC03A2D7DAC41>77 D<FFF80003FFFCFFFC0003FFFC01FC0000
-3FC001FE00000F0001FF0000060001BF8000060001BF80000600019FC0000600018FE000
-06000187E00006000187F00006000183F80006000181F80006000181FC0006000180FE00
-060001807E00060001807F00060001803F80060001801FC0060001800FC0060001800FE0
-0600018007F00600018003F00600018003F80600018001FC0600018000FC0600018000FE
-06000180007F06000180003F86000180001F86000180001FC6000180000FE60001800007
-E60001800007F60001800003FE0001800001FE0001800001FE0001800000FE0001800000
-7E00018000003E00018000003E0003C000001E000FF000000E00FFFF00000E00FFFF0000
-06002E2D7DAC35>I<00003FF000000001FFFE00000007E01F8000001F8007E000003E00
-01F00000FC0000FC0001F800007E0003F000003F0007E000001F8007C000000F800FC000
-000FC01F80000007E01F80000007E03F00000003F03F00000003F07F00000003F87F0000
-0003F87E00000001F87E00000001F8FE00000001FCFE00000001FCFE00000001FCFE0000
-0001FCFE00000001FCFE00000001FCFE00000001FCFE00000001FCFE00000001FCFE0000
-0001FC7F00000003F87F00000003F87F00000003F83F00000003F03F80000007F01F8000
-0007E01F80000007E00FC000000FC00FE000001FC007E000001F8003F000003F0001F800
-007E0000FC0000FC00007E0001F800001F8007E0000007E01F80000001FFFE000000003F
-F000002E2F7CAD37>I<FFFFFFF800FFFFFFFF0003F8001FC001F80007E001F80001F001
-F80001F801F80000FC01F80000FE01F800007E01F800007F01F800007F01F800007F01F8
-00007F01F800007F01F800007F01F800007E01F80000FE01F80000FC01F80001F801F800
-01F001F80007E001F8001FC001FFFFFF0001FFFFF80001F800000001F800000001F80000
-0001F800000001F800000001F800000001F800000001F800000001F800000001F8000000
-01F800000001F800000001F800000001F800000001F800000001F800000001F800000001
-F800000003FC000000FFFFF00000FFFFF00000282D7DAC30>I<003F803001FFF07007C0
-7C700F000EF01E0007F03C0003F0780001F0780000F0700000F0F0000070F0000070F000
-0070F0000030F8000030F8000030FC0000007E0000007F0000003FE000003FFE00001FFF
-E0000FFFFC0007FFFF0001FFFF80003FFFE00003FFE000003FF0000007F8000001F80000
-00F8000000FC0000007CC000007CC000003CC000003CC000003CE000003CE000003CE000
-0078F0000078F8000070FC0000F0FE0001E0F78003C0E3F00F00E07FFE00C00FF0001E2F
-7CAD27>83 D<FFFFF003FFFCFFFFF003FFFC03FC00003FC001F800000F0001F800000600
-01F80000060001F80000060001F80000060001F80000060001F80000060001F800000600
-01F80000060001F80000060001F80000060001F80000060001F80000060001F800000600
-01F80000060001F80000060001F80000060001F80000060001F80000060001F800000600
-01F80000060001F80000060001F80000060001F80000060001F80000060001F800000600
-01F80000060001F80000060001F80000060001F80000060001F800000E0000F800000C00
-00FC00000C0000FC00001C00007C00001800007E00003800003F00007000001F00006000
-000F8001E0000007E00380000001F80F000000007FFC000000000FF000002E2E7DAC35>
-85 D<00FF000007FFC0000F01F0001C00F8003F007C003F003E003F003E003F003F001E
-001F0000001F0000001F0000001F0000001F000007FF00007FFF0001FE1F0007F01F001F
-C01F003F801F007F001F007E001F00FE001F06FC001F06FC001F06FC001F06FC003F06FE
-003F067E007F067F00EF8C1F83C7FC0FFF03F801FC01E01F207D9E23>97
-D<07C0000000FFC0000000FFC00000000FC000000007C000000007C000000007C0000000
-07C000000007C000000007C000000007C000000007C000000007C000000007C000000007
-C000000007C000000007C0FE000007C7FF800007CF03E00007DC01F00007F8007C0007F0
-007E0007E0003E0007C0001F0007C0001F8007C0001F8007C0000F8007C0000FC007C000
-0FC007C0000FC007C0000FC007C0000FC007C0000FC007C0000FC007C0000FC007C0000F
-C007C0001F8007C0001F8007C0001F0007C0003F0007E0003E0007F0007C0007B000F800
-07BC01F000070E07E0000607FF80000001FC0000222F7EAD27>I<001FE000007FFC0001
-F01E0003E0070007C01F800F801F801F001F803F001F803E000F007E0000007E0000007C
-000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC
-0000007E0000007E0000007E0000C03F0000C01F0001C01F8001800FC0038007E0070001
-F03E00007FF800001FC0001A207E9E1F>I<000000F80000001FF80000001FF800000001
-F800000000F800000000F800000000F800000000F800000000F800000000F800000000F8
-00000000F800000000F800000000F800000000F800000000F800000FE0F800007FF8F800
-01F81EF80003E007F80007C003F8000F8001F8001F0001F8003F0000F8003E0000F8007E
-0000F8007E0000F800FC0000F800FC0000F800FC0000F800FC0000F800FC0000F800FC00
-00F800FC0000F800FC0000F800FC0000F8007C0000F8007E0000F8007E0000F8003E0001
-F8001F0001F8001F8003F8000F8007F80003E00EFC0001F03CFFC0007FF0FFC0001FC0F8
-00222F7EAD27>I<001F800000FFF00003E0780007C03E000F801E001F001F001F000F80
-3E000F807E0007807E0007C07C0007C0FC0007C0FC0007C0FC0007C0FFFFFFC0FFFFFFC0
-FC000000FC000000FC000000FC000000FC0000007E0000007E0000003E0000C03F0000C0
-1F0001C00F8003800FC0030003E00F0001F03C00007FF800001FC0001A207E9E1F>I<00
-03F0000FFC003E1E007C3F00F83F01F03F01F03F03E00C03E00003E00003E00003E00003
-E00003E00003E00003E00003E00003E000FFFFE0FFFFE003E00003E00003E00003E00003
-E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
-E00003E00003E00003E00003E00003E00003E00003E00007F0007FFF807FFF80182F7FAE
-16>I<003F00F800FFC3FE03E1FF1E07807C1E0F807C0C1F003E001F003E003E001F003E
-001F003E001F003E001F003E001F003E001F003E001F001F003E001F003E000F807C0007
-8078000FE1F0000CFFC0001C3F00001C0000001C0000001C0000001E0000001F0000000F
-FFF8000FFFFF0007FFFFC00FFFFFF01E0007F83C0000F87800007CF800007CF000003CF0
-00003CF000003CF000003CF800007C7C0000F83E0001F01F0003E007E01F8001FFFE0000
-3FF0001F2D7E9D23>I<07C0000000FFC0000000FFC00000000FC000000007C000000007
-C000000007C000000007C000000007C000000007C000000007C000000007C000000007C0
-00000007C000000007C000000007C000000007C0FE000007C3FF800007C703E00007DE01
-F00007F801F00007F000F80007F000F80007E000F80007E000F80007C000F80007C000F8
-0007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F800
-07C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007
-C000F80007C000F8000FE001FC00FFFE1FFFC0FFFE1FFFC0222E7EAD27>I<07800FC01F
-E01FE01FE01FE00FC007800000000000000000000000000000000007C0FFC0FFC00FC007
-C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007
-C007C007C007C007C00FE0FFFCFFFC0E2E7EAD14>I<07C0000000FFC0000000FFC00000
-000FC000000007C000000007C000000007C000000007C000000007C000000007C0000000
-07C000000007C000000007C000000007C000000007C000000007C000000007C000000007
-C01FFE0007C01FFE0007C00FF00007C007C00007C007800007C00E000007C01C000007C0
-38000007C070000007C0E0000007C3C0000007C7C0000007CFE0000007DFF0000007F9F0
-000007F0F8000007E0FC000007C07E000007C03E000007C01F000007C01F800007C00FC0
-0007C007C00007C003E00007C003F00007C001F8000FE003FC00FFFE07FF80FFFE07FF80
-212E7EAD25>107 D<07C0FFC0FFC00FC007C007C007C007C007C007C007C007C007C007
-C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007
-C007C007C007C007C007C007C007C007C007C007C007C00FE0FFFEFFFE0F2E7EAD14>I<
-07C07F0007F000FFC3FFC03FFC00FFC783F0783F000FCE01F8E01F8007DC00F9C00F8007
-F800FF800FC007F0007F0007C007E0007E0007C007E0007E0007C007C0007C0007C007C0
-007C0007C007C0007C0007C007C0007C0007C007C0007C0007C007C0007C0007C007C000
-7C0007C007C0007C0007C007C0007C0007C007C0007C0007C007C0007C0007C007C0007C
-0007C007C0007C0007C007C0007C0007C007C0007C0007C007C0007C0007C007C0007C00
-07C007C0007C0007C00FE000FE000FE0FFFE0FFFE0FFFEFFFE0FFFE0FFFE371E7E9D3C>
-I<07C0FE0000FFC3FF8000FFC703E0000FDE01F00007F801F00007F000F80007F000F800
-07E000F80007E000F80007C000F80007C000F80007C000F80007C000F80007C000F80007
-C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C0
-00F80007C000F80007C000F80007C000F80007C000F80007C000F8000FE001FC00FFFE1F
-FFC0FFFE1FFFC0221E7E9D27>I<001FE000007FF80001F03E0003C00F00078007800F00
-03C01F0003E03E0001F03E0001F07C0000F87C0000F87C0000F8FC0000FCFC0000FCFC00
-00FCFC0000FCFC0000FCFC0000FCFC0000FCFC0000FCFC0000FC7C0000F87C0000F83E00
-01F03E0001F01F0003E01F0003E00F8007C007C00F8001F03E00007FF800001FE0001E20
-7E9E23>I<07C0FE0000FFC7FF8000FFCF03E0000FDC01F00007F800FC0007F0007E0007
-E0003E0007C0003F0007C0001F8007C0001F8007C0001F8007C0000FC007C0000FC007C0
-000FC007C0000FC007C0000FC007C0000FC007C0000FC007C0000FC007C0001FC007C000
-1F8007C0001F8007C0003F0007C0003F0007E0007E0007F0007C0007F000F80007FC01F0
-0007CE07E00007C7FF800007C1FC000007C000000007C000000007C000000007C0000000
-07C000000007C000000007C000000007C000000007C00000000FE0000000FFFE000000FF
-FE000000222B7E9D27>I<0781F0FF87FCFF9E7E0F987E07B87E07B07E07F03C07E00007
-E00007E00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007
-C00007C00007C00007C00007C00007C00007C0000FE000FFFF00FFFF00171E7E9D1B>
-114 D<01FE1807FFB81E01F83C00F8780078F00038F00038F00018F00018F80018FC0018
-FF00007FF0003FFF001FFFC00FFFF001FFF8001FFC0001FCC0007EC0003EC0003EE0001E
-E0001EF0001EF0001EF8003CF8003CFC0078FF01F0E3FFC0C0FF0017207E9E1C>I<0060
-0000600000600000600000E00000E00000E00001E00003E00003E00007E0001FE000FFFF
-F0FFFFF003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
-0003E00003E00003E00003E00003E01803E01803E01803E01803E01803E01803E01803E0
-3801F03001F07000F860003FE0000F80152A7FA81B>I<07C000F800FFC01FF800FFC01F
-F8000FC001F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F8
-0007C000F80007C000F80007C000F80007C000F80007C000F80007C000F80007C000F800
-07C000F80007C000F80007C000F80007C000F80007C000F80007C001F80007C001F80007
-C001F80007C003F80003E007F80003E00EFC0001F81CFFC0007FF8FFC0001FE0F800221F
-7E9D27>I<FFFC01FFC0FFFC01FFC00FE0007E0007E0007C0007E000380003E000300003
-E000700001F000600001F000600000F800C00000F800C00000F800C000007C018000007C
-018000003E030000003E030000003F070000001F060000001F060000000F8C0000000F8C
-0000000FDC00000007D800000007D800000003F000000003F000000003F000000001E000
-000001E000000000C00000221E7F9C25>I<FFFC3FFE07FFFFFC3FFE07FF0FE003F001F8
-0FC003E000F007C001E000E007C001F000E003E003F000C003E003F000C003E007F801C0
-01F00678018001F00678018001F80E7C038000F80C3C030000F80C3C0300007C181E0600
-007C181E0600007C181F0600003E300F0C00003E300F0C00003E300F8C00001F60079800
-001F60079800001F6007D800000FC003F000000FC003F000000FC003F00000078001E000
-00078001E00000078001E00000030000C000301E7F9C33>I<FFFC07FF80FFFC07FF800F
-F003FC0003F001F00001F001C00001F803800000F8030000007C060000003E0E0000001F
-1C0000001FB80000000FB000000007E000000003E000000001F000000003F800000007F8
-000000067C0000000C3E0000001C1F000000381F800000700F800000E007C00000E003E0
-0003C003F00007C001F8001FE003FC00FFF007FFC0FFF007FFC0221D7F9C25>I<FFFC01
-FFC0FFFC01FFC00FE0007E0007E0007C0007E000380003E000300003F000700001F00060
-0001F000600000F800C00000F800C00000FC01C000007C018000007E038000003E030000
-003E030000001F060000001F060000001F8E0000000F8C0000000F8C00000007D8000000
-07D800000003F000000003F000000003F000000001E000000001E000000000C000000000
-C0000000018000000001800000000380000000030000007803000000FC06000000FC0600
-0000FC0C000000FC1C000000783800000070700000003FE00000000F80000000222B7F9C
-25>I<FFFFFFFFFFFFFFFFFFFFFFFF03F800001FC001F800001F8001F800001F8001F800
-001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800
-001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800
-001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800
-001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800
-001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800
-001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800001F8001F800
-001F8003FC00003FC0FFFFF00FFFFFFFFFF00FFFFF302D7DAC37>207
-D<FFFFF800FFFFFF000FC01F8007C007E007C003E007C003F007C003F007C003F007C003
-F007C007E007C00FC007C03F8007FFFC0007FFFE0007C00F8007C003E007C001F007C000
-F807C000FC07C000FC07C000FC07C000FC07C000FC07C001F807C001F807C003F00FC00F
-E0FFFFFF80FFFFFE001E1D7E9C23>226 D<00FFFFFFE000FFFFFFE0000E007E00000E00
-7C000006007C000004007C00000C007C00000C007C00000C007C00000C007C00000C007C
-00000C007C00000C007C00000C007C00000C007C00000C007C000018007C000018007C00
-0018007C000030007C000030007C000070007C000060007C0000E0007C0001C0007C0003
-80007C000F00007E007FFFFFFFE07FFFFFFFE07C000003E078000001E070000000E06000
-000060E000000070E000000070C000000030C000000030C000000030C000000030C00000
-003024287F9C27>228 D<001F800000FFF00003E0780007C03E000F801E001F001F001F
-000F803E000F807E0007807E0007C07C0007C0FC0007C0FC0007C0FC0007C0FFFFFFC0FF
-FFFFC0FC000000FC000000FC000000FC000000FC0000007E0000007E0000003E0000C03F
-0000C01F0001C00F8003800FC0030003E00F0001F03C00007FF800001FC0001A207E9E1F
->I<001FE000007FF80001F03E0003C00F00078007800F0003C01F0003E03E0001F03E00
-01F07C0000F87C0000F87C0000F8FC0000FCFC0000FCFC0000FCFC0000FCFC0000FCFC00
-00FCFC0000FCFC0000FCFC0000FC7C0000F87C0000F83E0001F03E0001F01F0003E01F00
-03E00F8007C007C00F8001F03E00007FF800001FE0001E207E9E23>238
-D<07C0FE0000FFC7FF8000FFCF03E0000FDC01F00007F800FC0007F0007E0007E0003E00
-07C0003F0007C0001F8007C0001F8007C0001F8007C0000FC007C0000FC007C0000FC007
-C0000FC007C0000FC007C0000FC007C0000FC007C0000FC007C0001FC007C0001F8007C0
-001F8007C0003F0007C0003F0007E0007E0007F0007C0007F000F80007FC01F00007CE07
-E00007C7FF800007C1FC000007C000000007C000000007C000000007C000000007C00000
-0007C000000007C000000007C000000007C00000000FE0000000FFFE000000FFFE000000
-222B7E9D27>240 D E
-%EndDVIPSBitmapFont
-/Fc 197[23 58[{}1 83.022 /CMMI10 rf /Fd 145[42 3[23 106[{}2
-83.022 /CMSY10 rf
-%DVIPSBitmapFont: Fe lati1000 10 6
-/Fe 6 115 df<0000F800000007FE0000001F871C00003E03FE00007C03FE0000F801FE
-0001F801FE0003F000FC0007E000FC000FE000FC000FC001FC001FC001F8001FC001F800
-3F8001F8003F8003F8007F8003F0007F0003F0007F0003F0007F0007F000FF0007E000FE
-0007E000FE0007E000FE000FE000FE000FC000FC000FC1C0FC000FC1C0FC001FC1C0FC00
-1F83C0FC001F8380FC003F8380FC003F87807C007F87007C00FF07003E01FF0F003E038F
-8E001F0F079E0007FE03FC0001F000F000222677A42A>97 D<00007F000003FFC0000FC1
-E0001F0070007E007800FC003801F801F803F003F807F003F807E003F80FE003F81FC003
-F01FC000003F8000003F8000007F8000007F0000007F0000007F000000FF000000FE0000
-00FE000000FE000000FE000000FC000000FC000000FC000000FC000030FC000038FC0000
-787C0000F07E0001E03E0003C03E000F801F003E000F81F80003FFE00000FF00001D2677
-A426>99 D<000007C00000003FF0000000FC38E00001F01FF00003E01FF00007C00FF000
-0F800FF0001F8007F0003F0007E0007F0007E0007E000FE000FE000FE000FC000FC001FC
-000FC001FC001FC003FC001FC003F8001F8003F8001F8003F8003F8007F8003F8007F000
-3F0007F0003F0007F0007F0007F0007F0007E0007E0007E0007E0007E000FE0007E000FE
-0007E000FC0003E001FC0003E003FC0003E007FC0001F00FF80000F01FF80000787BF800
-003FF3F800000FC3F000000003F000000007F000000007F000000007E000000007E00000
-000FE00000000FC0001C000FC0007E001FC0007E001F8000FE003F0000FE007E0000FE00
-FC00007801F800007C07E000001FFF80000003FE00000024367CA426>103
-D<0003F0000001FFF0000001FFF0000001FFF000000007F000000007E000000007E00000
-0007E00000000FE00000000FC00000000FC00000000FC00000001FC00000001F80000000
-1F800000001F800000003F800000003F000000003F000000003F000000007F000000007E
-07F000007E1FFC00007E783E0000FFE01F0000FFC01F8000FF800F8000FF000F8001FE00
-0F8001FE000FC001FC000FC001F8001F8003F8001F8003F0001F8003F0001F8003F0003F
-8007F0003F0007E0003F0007E0003F0007E0007F000FE0007E000FC0007E000FC000FE00
-0FC000FC001FC000FC001F8001FC1C1F8001F81C1F8001F83C3F8003F8383F0003F0383F
-0003F0383F0003F0707F0003E0707E0003E0F07E0003E0E07E0003E1C0FE0001E380FC00
-00FF003800003C00263B7BB92A>I<01E000FE000007F803FF80000E3C0F07C0001E3E3C
-03E0001C1F7803F000383FF001F000383FE001F000783FC001F000703FC001F800703F80
-01F800703F0003F000F07F0003F000E07E0003F000E07E0003F000007E0007F00000FE00
-07E00000FC0007E00000FC0007E00000FC000FE00001FC000FC00001F8000FC00001F800
-1FC00001F8001F800003F8001F800003F0003F838003F0003F038003F0003F078007F000
-7F070007E0007E070007E0007E070007E0007E0E000FE0007C0E000FC0007C1E000FC000
-7C1C000FC0007C38001FC0003C78001F80001FE000070000078000292679A42F>110
-D<03C003F0000FF01FFC001E783C0F001C7C700F003C3EE03F80383FC03F80387F803F80
-787F803F00707F003F00707F001C00F07E000000E0FE000000E0FC000000E0FC00000000
-FC00000001FC00000001F800000001F800000001F800000003F800000003F000000003F0
-00000003F000000007F000000007E000000007E000000007E00000000FE00000000FC000
-00000FC00000000FC00000001FC00000001F800000001F800000001F800000003F800000
-003F000000000E00000000212679A423>114 D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Ff labx1000 10 36
-/Ff 36 256 df<FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FF
-FFFF8019087F9620>45 D<000000007F800000007FFF800000007FFF800000007FFF8000
-00007FFF8000000003FF8000000001FF8000000001FF8000000001FF8000000001FF8000
-000001FF8000000001FF8000000001FF8000000001FF8000000001FF8000000001FF8000
-000001FF8000000001FF8000000001FF8000000001FF8000000001FF800001FF81FF8000
-0FFFF1FF80003FFFFDFF8000FFC07FFF8003FF001FFF8007FC0007FF800FFC0003FF801F
-F80001FF801FF00001FF803FF00001FF803FF00001FF807FE00001FF807FE00001FF807F
-E00001FF80FFE00001FF80FFE00001FF80FFE00001FF80FFE00001FF80FFE00001FF80FF
-E00001FF80FFE00001FF80FFE00001FF80FFE00001FF80FFE00001FF807FE00001FF807F
-E00001FF807FF00001FF803FF00001FF803FF00001FF801FF80003FF800FF80007FF8007
-FC000FFF8003FE001FFFC001FF80FDFFFE007FFFF9FFFE001FFFE1FFFE0001FF01FFFE2F
-3A7DB935>100 D<0003FF8000001FFFF000007FFFFC0001FF83FE0003FE007F8007FC00
-3F800FF8003FC01FF8001FE01FF0001FE03FF0000FF03FF0000FF07FE0000FF07FE0000F
-F87FE00007F8FFE00007F8FFE00007F8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFE0000000
-FFE0000000FFE0000000FFE00000007FE00000007FE00000007FE00000003FF00000003F
-F00000781FF00000780FF80000F80FFC0000F007FC0003F001FF000FE000FFC07FC0007F
-FFFF00000FFFFC000001FFE00025257DA42C>I<00001FF0000001FFFC000007FFFF0000
-1FF87F80003FE0FF8000FFC1FFC000FFC1FFC001FF81FFC001FF81FFC003FF01FFC003FF
-00FF8003FF00FF8003FF003E0003FF00000003FF00000003FF00000003FF00000003FF00
-000003FF00000003FF00000003FF000000FFFFFF0000FFFFFF0000FFFFFF0000FFFFFF00
-0003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000
-03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003
-FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
-00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
-0000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE0000223A7DB91D>I<00FE007FC000FF
-FE03FFF800FFFE0FFFFE00FFFE1F03FF00FFFE3C01FF8007FE7801FF8003FEF000FF8003
-FFE000FFC003FFC000FFC003FFC000FFC003FF8000FFC003FF8000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF30
-257DA435>110 D<00FF00003FC0FFFF003FFFC0FFFF003FFFC0FFFF003FFFC0FFFF003F
-FFC007FF0001FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000
-FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000
-FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000
-FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0001FFC003FF0001
-FFC003FF0003FFC003FF0003FFC001FF0007FFC001FF800FFFE000FFC03EFFFF007FFFFC
-FFFF001FFFF0FFFF0003FF80FFFF30257DA435>117 D<003FFE00000003FFFFE000000F
-FFFFF800001FF00FFE00003FF003FF00003FF801FF80003FF800FFC0003FF800FFC0003F
-F8007FE0003FF8007FE0001FF0007FE0000FE0007FE0000380007FE0000000007FE00000
-00007FE00000003FFFE000000FFFFFE000007FFFFFE00001FFF87FE00007FF807FE0000F
-FE007FE0003FF8007FE0003FF0007FE0007FE0007FE000FFE0007FE000FFC0007FE000FF
-C0007FE000FFC0007FE000FFC0007FE000FFC000FFE000FFE001FFE0007FE001FFE0003F
-F007FFF8001FFC1FBFFFC00FFFFE1FFFC003FFF80FFFC0003FE003FFC02A257DA42E>
-224 D<000000003E0000000003FE00000001FFFE0000007FFFFE000007FFFFFE00001FFF
-FFFC00007FFFFFFC0001FFFFFFF80003FFFFFFF00007FFFFFFC0000FFFFFF800000FFFC0
-0000001FFC000000001FF0000000003FE0000000003FC0000000003F80000000003F0000
-0000007E00000000007E00000000007C00000000007C01FFC000007C0FFFF80000787FFF
-FF0000F8FF80FF8000FBFE003FE000FFFC001FF000FFF8000FF800FFF00007FC00FFF000
-07FC00FFF00007FE00FFE00003FE00FFE00003FF00FFE00003FF00FFE00003FF00FFE000
-03FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE000
-03FF80FFE00003FF80FFE00003FF807FE00003FF007FE00003FF007FE00003FF003FE000
-03FE003FF00007FE001FF00007FC001FF00007FC000FF8000FF80007FC001FF00003FE00
-3FE00001FF80FFC000007FFFFF0000001FFFFC00000001FFC00000293A7DB930>I<FFFF
-FFFC0000FFFFFFFFC000FFFFFFFFF00003FF001FF80003FF000FFC0003FF0007FE0003FF
-0007FE0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0007FE0003FF
-0007FE0003FF001FFC0003FF007FF00003FFFFFFC00003FFFFFF000003FFFFFFE00003FF
-000FF80003FF0007FC0003FF0003FE0003FF0001FF0003FF0001FF8003FF0001FFC003FF
-0001FFC003FF0001FFC003FF0001FFC003FF0001FFC003FF0001FFC003FF0001FF8003FF
-0003FF8003FF0003FF0003FF0007FE0003FF001FFC00FFFFFFFFF800FFFFFFFFE000FFFF
-FFFF00002A257EA430>I<FFFFFFFFE0FFFFFFFFE0FFFFFFFFE003FF003FE003FF000FE0
-03FF0007E003FF0003E003FF0001E003FF0001F003FF0001F003FF0000F003FF0000F003
-FF0000F003FF0000F003FF0000F003FF00000003FF00000003FF00000003FF00000003FF
-00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
-000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000
-00FFFFFE0000FFFFFE0000FFFFFE000024257EA429>I<000FFFFFFFFFC0000FFFFFFFFF
-C0000FFFFFFFFFC000007C003FF000000078003FF000000078003FF000000078003FF000
-000078003FF000000078003FF000000078003FF000000078003FF000000078003FF00000
-0078003FF000000078003FF000000078003FF000000070003FF000000070003FF0000000
-F0003FF0000000F0003FF0000000F0003FF0000000E0003FF0000001E0003FF0000001E0
-003FF0000001C0003FF0000003C0003FF0000003C0003FF000000780003FF00000078000
-3FF000000F00003FF000001F00003FF000003E00003FF000007C00003FF00000F800003F
-F00001F000003FF0007FFFFFFFFFFFE07FFFFFFFFFFFE07FFFFFFFFFFFE07FE00000007F
-E07F000000000FE07E0000000007E07C0000000003E07C0000000003E0F80000000001F0
-F80000000001F0F80000000001F0F00000000000F0F00000000000F0F00000000000F0F0
-0000000000F0F00000000000F0343280A435>I<0003FF8000001FFFF000007FFFFC0001
-FF83FE0003FE007F8007FC003F800FF8003FC01FF8001FE01FF0001FE03FF0000FF03FF0
-000FF07FE0000FF07FE0000FF87FE00007F8FFE00007F8FFE00007F8FFFFFFFFF8FFFFFF
-FFF8FFFFFFFFF8FFE0000000FFE0000000FFE0000000FFE00000007FE00000007FE00000
-007FE00000003FF00000003FF00000781FF00000780FF80000F80FFC0000F007FC0003F0
-01FF000FE000FFC07FC0007FFFFF00000FFFFC000001FFE00025257DA42C>I<3FFF003F
-FFFF003FFF003FFF003FFFFF003FFF003FFF003FFFFF003FFF0003FE0000FFC0001FF000
-00FE0000FFC0001FC000007F0000FFC0003F8000001FC000FFC000FE0000000FE000FFC0
-01FC00000007F000FFC003F800000001FC00FFC00FE000000000FE00FFC01FC000000000
-3F00FFC03F00000000001FC0FFC0FE00000000000FE0FFC1FC00000000000FF0FFC3FC00
-000000000FFCFFCFFC00000000001FFEFFDFFE00000000003FFFFFFFFF00000000007FFF
-FFFFFF8000000000FFEFFFFDFFC000000001FFE3FFF1FFE000000003FFC1FFE0FFF00000
-0003FF80FFC07FF000000007FF00FFC03FF80000000FFE00FFC01FFC0000001FFC00FFC0
-0FFE0000003FF800FFC007FF0000007FF800FFC007FF8000007FF000FFC003FF800000FF
-E000FFC001FFC00001FFC000FFC000FFE00003FF8000FFC0007FF00007FF0000FFC0003F
-F8000FFF0000FFC0003FFC00FFFFE03FFFFF01FFFFC0FFFFE03FFFFF01FFFFC0FFFFE03F
-FFFF01FFFFC04A257EA44F>I<701FFF00007CFFFFF0007FFFFFFE007FE00FFF007F8001
-FF807F0000FFC07E0000FFC07C00007FE07C00007FE07800007FE07800007FE0000000FF
-C0000001FFC0000003FF0000000FFE00003FFFF800003FFFC000003FFFF80000000FFE00
-000003FF80000000FFC0000000FFC00000007FE00000007FF00000007FF00000007FF000
-00007FF0F000007FF0F800007FF07800007FE0780000FFE07C0000FFC03E0003FF801FC0
-0FFF000FFFFFFC0003FFFFF000007FFF000024257EA42A>I<FFFFFC3FFFFFFFFFFC3FFF
-FFFFFFFC3FFFFF03FF0000FFC003FF0000FFC003FF0001FFC003FF0003FFC003FF0003FF
-C003FF0007FFC003FF000FFFC003FF001FFFC003FF001EFFC003FF003CFFC003FF007CFF
-C003FF0078FFC003FF00F0FFC003FF01E0FFC003FF01E0FFC003FF03C0FFC003FF0780FF
-C003FF0780FFC003FF0F00FFC003FF1E00FFC003FF3E00FFC003FF3C00FFC003FF7800FF
-C003FFF800FFC003FFF000FFC003FFE000FFC003FFC000FFC003FFC000FFC003FF8000FF
-C003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF30257EA435
->I<000F8001F000001FE007F800003FF00FFC00007FF00FFE00007FF81FFE00007FF81F
-FE00007FF81FFE00007FF81FFE00007FF00FFE00003FF00FFC00003FE007FC00001FC003
-F800000FFFFFF0000003FFFFC0000000FFFF000000001FF8000000000000000000000000
-0000000000000000000000000000FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF03FF0000
-FFC003FF0000FFC003FF0001FFC003FF0003FFC003FF0003FFC003FF0007FFC003FF000F
-FFC003FF001FFFC003FF001EFFC003FF003CFFC003FF007CFFC003FF0078FFC003FF00F0
-FFC003FF01E0FFC003FF01E0FFC003FF03C0FFC003FF0780FFC003FF0780FFC003FF0F00
-FFC003FF1E00FFC003FF3E00FFC003FF3C00FFC003FF7800FFC003FFF800FFC003FFF000
-FFC003FFE000FFC003FFC000FFC003FFC000FFC003FF8000FFC003FF0000FFC003FF0000
-FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF30397EB835>I<FFFFFC00FFFCFFFFFC
-00FFFCFFFFFC00FFFC03FF00007FC003FF00007F0003FF0000FE0003FF0003F80003FF00
-07F00003FF000FE00003FF003F800003FF007F000003FF00FC000003FF03F8000003FF07
-F0000003FF0FF0000003FF3FF0000003FF7FF8000003FFFFFC000003FFFFFE000003FFF7
-FF000003FFC7FF800003FF83FFC00003FF01FFC00003FF00FFE00003FF007FF00003FF00
-3FF80003FF001FFC0003FF001FFE0003FF000FFE0003FF0007FF0003FF0003FF8003FF00
-01FFC003FF0000FFE003FF0000FFF0FFFFFC07FFFFFFFFFC07FFFFFFFFFC07FFFF30257E
-A435>I<001FFFFFFFFF80001FFFFFFFFF80001FFFFFFFFF800000F8007FE0000000F000
-7FE0000000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE0000000F0007F
-E0000000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE0
-000000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE000
-0000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE0000000F0007FE0001E
-01F0007FE0003F01F0007FE0007F81E0007FE000FFC1E0007FE000FFC3E0007FE000FFC3
-E0007FE000FFC7C0007FE000FF8FC0007FE0007FFF80007FE0003FFF001FFFFF801FFE00
-1FFFFF800FF8001FFFFF8031257FA435>I<FFFF8000007FFF80FFFFC00000FFFF80FFFF
-C00001FFFF8003FFE00001FFE00003FFE00001FFE00003FFE00003BFE00003DFF00003BF
-E00003DFF000073FE00003CFF800073FE00003CFF8000E3FE00003C7FC000E3FE00003C7
-FC001C3FE00003C7FC001C3FE00003C3FE001C3FE00003C3FE00383FE00003C1FF00383F
-E00003C1FF00703FE00003C0FF80703FE00003C0FF80E03FE00003C07FC0E03FE00003C0
-7FC1C03FE00003C07FC1C03FE00003C03FE1C03FE00003C03FE3803FE00003C01FF3803F
-E00003C01FF7003FE00003C00FFF003FE00003C00FFE003FE00003C007FE003FE00003C0
-07FE003FE00003C007FC003FE00003C003FC003FE00003C003F8003FE00007E001F8003F
-E000FFFF01F00FFFFF80FFFF00F00FFFFF80FFFF00E00FFFFF8039257DA440>I<FFFFFC
-3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF03FF0000FFC003FF0000FFC003FF0000FFC003FF00
-00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
-00FFC003FF0000FFC003FF0000FFC003FFFFFFFFC003FFFFFFFFC003FFFFFFFFC003FF00
-00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
-00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
-00FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC
-3FFFFF30257EA435>I<0001FFC00000000FFFF80000007FFFFF000000FF80FF800003FE
-003FE00007FC001FF0000FF8000FF8001FF00007FC001FF00007FC003FF00007FE003FE0
-0003FE007FE00003FF007FE00003FF007FE00003FF00FFE00003FF80FFE00003FF80FFE0
-0003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE0
-0003FF807FE00003FF007FE00003FF007FE00003FF003FE00003FE003FF00007FE001FF0
-0007FC001FF00007FC000FF8000FF80007FC001FF00003FE003FE00001FF80FFC000007F
-FFFF0000001FFFFC00000001FFC0000029257DA430>I<FFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFF03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFFFC3FFFFF30257EA435>I<
-00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFFFE07FF00FFFFF001FF8003FFE000FFC0
-03FF80007FE003FF00007FF003FF00003FF803FF00003FF803FF00001FFC03FF00001FFC
-03FF00001FFC03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE
-03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFC
-03FF00001FFC03FF00001FFC03FF00001FF803FF00003FF803FF00003FF003FF80007FF0
-03FFC0007FE003FFE000FFC003FFF003FF8003FFFC07FE0003FF3FFFF80003FF0FFFE000
-03FF03FF000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000
-03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000
-03FF00000000FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC0000002F357EA435>
-I<0001FFC000000FFFFC00007FFFFF0000FF80FF8003FE00FFC007FC01FFC00FF801FFC0
-1FF801FFC01FF001FFC03FF001FFC03FF000FF807FE0007F007FE0001C007FE0000000FF
-E0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0
-000000FFE00000007FE00000007FE00000007FF00000003FF00000003FF00001E01FF800
-01E01FF80003E00FFC0007C007FE00078003FF001F8000FFC07E00007FFFFC00000FFFF0
-000001FF800023257DA42A>I<7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7F81FF81FE7E01FF
-807E7C01FF803E7801FF801E7801FF801EF801FF801FF801FF801FF001FF800FF001FF80
-0FF001FF800FF001FF800FF001FF800F0001FF80000001FF80000001FF80000001FF8000
-0001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF800000
-01FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001
-FF800001FFFFFF8001FFFFFF8001FFFFFF8028257EA42D>I<FFFFF001FFF8FFFFF001FF
-F8FFFFF001FFF807FF00003F8003FF00001F0003FF00001E0003FF80003E0001FF80003C
-0001FFC0007C0000FFC000780000FFE000F800007FE000F000007FF001F000003FF001E0
-00003FF801E000001FF803C000001FF803C000001FFC07C000000FFC078000000FFE0F80
-000007FE0F00000007FF1F00000003FF1E00000003FFBE00000001FFBC00000001FFFC00
-000000FFF800000000FFF800000000FFF8000000007FF0000000007FF0000000003FE000
-0000003FE0000000001FC0000000001FC0000000000F80000000000F80000000000F0000
-0000000F00000000001F00000000001E0000003F003E0000007F803C000000FFC07C0000
-00FFC078000000FFC0F8000000FFC1F0000000FFC3E00000007F87C00000007D1F800000
-003FFF000000001FFC0000000007F0000000002D357EA432>I<00000001FE0000000000
-0001FFFE00000000000001FFFE00000000000001FFFE00000000000001FFFE0000000000
-00000FFE0000000000000007FE0000000000000007FE0000000000000007FE0000000000
-000007FE0000000000000007FE0000000000000007FE0000000000000007FE0000000000
-000007FE0000000000000007FE0000000000000007FE0000000000000007FE0000000000
-000007FE0000000000000007FE0000000000000007FE0000000000000007FE0000000000
-00FF87FE1FF00000000FFFE7FE7FFF0000003FFFFFFFFFFFC00000FFE07FFFE07FF00003
-FF801FFF801FFC0007FF000FFF000FFE000FFE0007FE0007FF001FFC0007FE0003FF801F
-F80007FE0001FF803FF80007FE0001FFC03FF00007FE0000FFC07FF00007FE0000FFE07F
-F00007FE0000FFE07FF00007FE0000FFE0FFE00007FE00007FF0FFE00007FE00007FF0FF
-E00007FE00007FF0FFE00007FE00007FF0FFE00007FE00007FF0FFE00007FE00007FF0FF
-E00007FE00007FF0FFE00007FE00007FF0FFE00007FE00007FF07FF00007FE0000FFE07F
-F00007FE0000FFE07FF00007FE0000FFE03FF00007FE0000FFC03FF80007FE0001FFC01F
-F80007FE0001FF801FFC0007FE0003FF800FFE000FFF0007FF0007FF000FFF000FFE0003
-FF801FFF801FFC0000FFE07FFFE07FF000003FFFFFFFFFFFC000000FFFE7FE7FFF000000
-00FF87FE1FF0000000000007FE0000000000000007FE0000000000000007FE0000000000
-000007FE0000000000000007FE0000000000000007FE0000000000000007FE0000000000
-000007FE0000000000000007FE0000000000000007FE0000000000000007FE0000000000
-000007FE00000000000001FFFFF8000000000001FFFFF8000000000001FFFFF800000000
-0001FFFFF8000000444A7DB94B>I<FFFFF01FFFF0FFFFF01FFFF0FFFFF01FFFF007FF00
-03FE0003FF8001F00001FFC003E00000FFC007E000007FE007C000003FF00F8000003FF8
-1F0000001FFC3E0000000FFC7C00000007FEFC00000003FFF800000003FFF000000001FF
-E000000000FFC0000000007FE0000000003FF0000000003FF8000000007FFC000000007F
-FC00000000FFFE00000001F3FF00000003E3FF80000007C1FFC000000FC0FFC000001F80
-7FE000001F003FF000003E003FF800007C001FFC0000F8000FFC0001F80007FE0007FC00
-07FF00FFFF003FFFF8FFFF003FFFF8FFFF003FFFF82D257EA432>I<FFFFFC3FFFFF00FF
-FFFC3FFFFF00FFFFFC3FFFFF0003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF
-0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF00
-00FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000
-FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FF
-C00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC0
-0003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC00003FF0000FFC000
-03FF0000FFC00003FF0000FFC000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF8000
-00000001FF8000000000003F8000000000001F8000000000000F8000000000000F800000
-00000007C0000000000007C0000000000007C0000000000003C0000000000003C0000000
-000003C0000000000003C0000000000003C032327EA435>I<FFFFFC3FFFFFFFFFFC3FFF
-FFFFFFFC3FFFFF03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
-C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
-C003FF0000FFC003FF0000FFC001FF8001FFC000FF800FFFC0007FC07FFFC0003FFFFEFF
-C0000FFFF0FFC00001FF80FFC000000000FFC000000000FFC000000000FFC000000000FF
-C000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FF
-C000000000FFC000000000FFC00000003FFFFF0000003FFFFF0000003FFFFF30257EA435
->I<FFFFFC3FFFFF0FFFFFC0FFFFFC3FFFFF0FFFFFC0FFFFFC3FFFFF0FFFFFC003FF0000
-FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF000
-03FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0
-003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF
-0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003F
-F00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000
-FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF000
-03FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0
-003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF0000FFC0003FF00003FF
-0000FFC0003FF00003FF0000FFC0003FF000FFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFF
-FFE0FFFFFFFFFFFFFFFFFFE000000000000000007FE000000000000000000FE000000000
-0000000007E0000000000000000003E0000000000000000003E0000000000000000001F0
-000000000000000001F0000000000000000001F0000000000000000000F0000000000000
-000000F0000000000000000000F0000000000000000000F0000000000000000000F04C32
-7EA44F>249 D<7FFFFFF00000007FFFFFF00000007FFFFFF00000007F81FF800000007E
-01FF800000007C01FF800000007801FF800000007801FF80000000F801FF80000000F801
-FF80000000F001FF80000000F001FF80000000F001FF80000000F001FF80000000F001FF
-800000000001FFFFFF00000001FFFFFFF0000001FFFFFFFC000001FF801FFE000001FF80
-07FF000001FF8003FF800001FF8001FFC00001FF8001FFC00001FF8000FFE00001FF8000
-FFE00001FF8000FFE00001FF8000FFE00001FF8000FFE00001FF8000FFE00001FF8001FF
-C00001FF8001FFC00001FF8003FF800001FF8007FF000001FF801FFE00007FFFFFFFFC00
-007FFFFFFFF000007FFFFFFF000033257EA439>I<FFFFFC00003FFFFFFFFFFC00003FFF
-FFFFFFFC00003FFFFF03FF00000000FFC003FF00000000FFC003FF00000000FFC003FF00
-000000FFC003FF00000000FFC003FF00000000FFC003FF00000000FFC003FF00000000FF
-C003FF00000000FFC003FF00000000FFC003FF00000000FFC003FF00000000FFC003FFFF
-FE0000FFC003FFFFFFE000FFC003FFFFFFF800FFC003FF003FFC00FFC003FF000FFE00FF
-C003FF0007FF00FFC003FF0003FF80FFC003FF0003FF80FFC003FF0001FFC0FFC003FF00
-01FFC0FFC003FF0001FFC0FFC003FF0001FFC0FFC003FF0001FFC0FFC003FF0001FFC0FF
-C003FF0003FF80FFC003FF0003FF80FFC003FF0007FF00FFC003FF000FFE00FFC003FF00
-3FFC00FFC0FFFFFFFFF83FFFFFFFFFFFFFE03FFFFFFFFFFFFE003FFFFF40257EA445>I<
-FFFFFC000000FFFFFC000000FFFFFC00000003FF0000000003FF0000000003FF00000000
-03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000
-03FF0000000003FF0000000003FF0000000003FFFFFE000003FFFFFFE00003FFFFFFF800
-03FF003FFC0003FF000FFE0003FF0007FF0003FF0003FF8003FF0003FF8003FF0001FFC0
-03FF0001FFC003FF0001FFC003FF0001FFC003FF0001FFC003FF0001FFC003FF0003FF80
-03FF0003FF8003FF0007FF0003FF000FFE0003FF003FFC00FFFFFFFFF800FFFFFFFFE000
-FFFFFFFE00002A257EA430>I<FFFFFC0000FFE00000FFFFFC0007FFFC0000FFFFFC003F
-FFFF800003FF00007FC07FC00003FF0001FF001FF00003FF0003FE000FF80003FF0007FC
-0007FC0003FF000FF80003FE0003FF000FF80003FE0003FF001FF80003FF0003FF001FF0
-0001FF0003FF003FF00001FF8003FF003FF00001FF8003FF003FF00001FF8003FF007FF0
-0001FFC003FFFFFFF00001FFC003FFFFFFF00001FFC003FFFFFFF00001FFC003FF007FF0
-0001FFC003FF007FF00001FFC003FF007FF00001FFC003FF007FF00001FFC003FF007FF0
-0001FFC003FF003FF00001FF8003FF003FF00001FF8003FF003FF00001FF8003FF001FF0
-0001FF0003FF001FF80003FF0003FF000FF80003FE0003FF000FF80003FE0003FF0007FC
-0007FC0003FF0003FE000FF80003FF0001FF001FF00003FF0000FFC07FE000FFFFFC003F
-FFFF8000FFFFFC000FFFFE0000FFFFFC0000FFE0000042257EA448>254
-D<0001FFFFFFF8003FFFFFFFF800FFFFFFFFF803FFC007FE0007FE0007FE000FFE0007FE
-000FFC0007FE001FFC0007FE001FFC0007FE001FFC0007FE001FFC0007FE001FFC0007FE
-000FFC0007FE0007FE0007FE0003FF0007FE0001FFE007FE00007FFFFFFE00001FFFFFFE
-000000FFFFFE000001FFE7FE000001FFC7FE000003FF87FE000007FF87FE00000FFF07FE
-00001FFE07FE00001FFC07FE00003FFC07FE00007FF807FE0000FFF007FE0001FFE007FE
-0001FFE007FE0003FFC007FE0007FF8007FE001FFF8007FE00FFFFF1FFFFF8FFFFF1FFFF
-F8FFFFF1FFFFF82D257EA432>I E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fg latt1000 10 75
-/Fg 75 126 df<000E0000003F8000007FC00001FFF00003FFF8000FFFFE001FFBFF007F
-F1FFC0FFC07FE0FF803FE0FE000FE07C0007C0780003C01B0D77B42D>2
-D<7FFFFFF0FFFFFFF8FFFFFFF8FFFFFFF87FFFFFF01D0579942C>21
-D<1F003F807FC0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FFE0FF
-E0FFE07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC07FC01F00000000
-00000000000000000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B3470
-B32C>33 D<3C001E007F007F00FF007F80FF007F80FF007F80FF007F80FF007F80FF007F
-807F007F007F007F007F007F007F007F007F007F007F007F007E003F007E003F007E003F
-007E003F007E003F007E003F003E003E003E003E003E003E003C001E001C001C00191977
-B32C>I<0007001C00000F803E00000F803E00000F803E00000F803E00000F803E00000F
-803E00000F803E00000F803E00001F807E00001F007C00001F007C00001F007C00001F00
-7C003FFFFFFFE0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8003E00F800003E00F8
-00007E01F800007C01F000007C01F000007C01F000007C01F000007C01F000007C01F000
-007C01F000007C01F00000FC03F00000F803E00000F803E000FFFFFFFFF8FFFFFFFFF8FF
-FFFFFFF8FFFFFFFFF83FFFFFFFE001F007C00001F007C00001F007C00003F00FC00003E0
-0F800003E00F800003E00F800003E00F800003E00F800003E00F800003E00F800003E00F
-800001C007000025337DB22C>I<0001C000000003E000000003E000000003E000000003
-E000000003E000000003E00000000FFC0000007FFF800001FFFFE00007FFFFF0000FFFFF
-F8001FFBEFFC003FC3E1FE003F03E07F007E03E03F007C03E03F00FC03E03F80F803E03F
-80F803E07F80F803E07F80F803E07F80FC03E03F00FC03E03F007E03E000007F03E00000
-3FC3E000003FFBE000001FFFE000000FFFFC000007FFFF000001FFFFC000007FFFE00000
-1FFFF8000003FFFC000003E7FC000003E1FE000003E07F000003E03F001803E01F007E03
-E01F807E03E00F80FF03E00F80FF03E00F80FF03E00F80FE03E00F80FE03E01F80FE03E0
-1F007E03E03F007F03E03E003F83E0FE003FC3E1FC001FFBEFF8000FFFFFF00007FFFFE0
-0003FFFFC00000FFFF0000001FF800000003E000000003E000000003E000000003E00000
-0003E000000003E000000001C0000021417BB92C>I<07800007001FE0000F801FE0001F
-803FF0001F807FF8003F807FF8003F007CF8007F00FCFC007E00F87C007E00F87C00FE00
-F87C00FC00F87C01FC00F87C01F800F87C01F800F87C03F800FCFC03F0007CF803F0007F
-F807F0007FF807E0003FF00FE0001FE00FC0001FE00FC00007801FC00000001F80000000
-3F800000003F000000003F000000007F000000007E00000000FE00000000FC00000000FC
-00000001FC00000001F800000001F800000003F800000003F000000007F000000007E000
-000007E00000000FE00000000FC00000001FC00000001F800F00001F803FC0003F807FE0
-003F007FE0007F00FFF0007E00F9F0007E00F9F000FE01F9F800FC01F0F800FC01F0F801
-FC01F0F801F801F0F803F801F0F803F001F0F803F001F9F807F000F9F007E000F9F00FE0
-00FFF00FC0007FE00FC0007FE007C0003FC00380000F0025417DB92C>I<0F801FE03FF0
-7FF07FF87FF87FFC7FFC3FFC1FFC0FFC007C007C007C00FC00F800F801F801F003F007E0
-07E00FC03F807F80FF00FE00F80070000E1D71B22C>39 D<0000380000FC0001FC0003FC
-0007F8000FF0001FC0003F80007F0000FE0001FC0003F80003F00007F00007E0000FE000
-0FC0001F80001F80003F80003F00003F00007F00007E00007E00007E0000FE0000FC0000
-FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FE0000
-7E00007E00007E00007F00003F00003F00003F80001F80001F80000FC0000FE00007E000
-07F00003F00003F80001FC0000FE00007F00003F80001FC0000FF00007F80003FC0001FC
-0000FC000038164272B92C>I<700000FC0000FE0000FF00007F80003FC0000FE00007F0
-0003F80001FC0000FE00007F00003F00003F80001F80001FC0000FC00007E00007E00007
-F00003F00003F00003F80001F80001F80001F80001FC0000FC0000FC0000FC0000FC0000
-FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0001FC0001F80001F80001F80003
-F80003F00003F00007F00007E00007E0000FC0001FC0001F80003F80003F00007F0000FE
-0001FC0003F80007F0000FE0003FC0007F8000FF0000FE0000FC0000700000164279B92C
->I<000380000007C0000007C0000007C0000007C0000007C0000007C0002007C008F807
-C03EFE07C0FEFF07C1FEFFC7C7FEFFE7CFFE3FFFFFF80FFFFFE003FFFF8001FFFF00007F
-FC00007FFC0001FFFF0003FFFF800FFFFFE03FFFFFF8FFE7CFFEFFC7C7FEFF07C1FEFE07
-C0FEF807C03E2007C0080007C0000007C0000007C0000007C0000007C0000007C0000003
-80001F247AAA2C>I<00007000000000F800000000F800000000F800000000F800000000
-F800000000F800000000F800000000F800000000F800000000F800000000F800000000F8
-00000000F800000000F800000000F800003FFFFFFFE0FFFFFFFFF8FFFFFFFFF8FFFFFFFF
-F8FFFFFFFFF80000F800000000F800000000F800000000F800000000F800000000F80000
-0000F800000000F800000000F800000000F800000000F800000000F800000000F8000000
-00F800000000F800000000F80000000070000025267DAB2C>I<0F801FE03FF07FF87FF8
-7FFC7FFC7FFC3FFC1FFC0FFC00FC00F800F801F803F007F01FE07FC0FF80FF00FC007000
-0E17718A2C>I<7FFFFFF0FFFFFFF8FFFFFFF8FFFFFFF87FFFFFF01D0579942C>I<1F003F
-807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B708A2C>I<00000007000000000F80
-0000000F800000001F800000001F000000003F000000003E000000007E000000007C0000
-00007C00000000FC00000000F800000001F800000001F000000003F000000003E0000000
-07E000000007C00000000FC00000000F800000001F800000001F000000003F000000003E
-000000003E000000007E000000007C00000000FC00000000F800000001F800000001F000
-000003F000000003E000000007E000000007C00000000FC00000000F800000001F800000
-001F000000003F000000003E000000003E000000007E000000007C00000000FC00000000
-F800000001F800000001F000000003F000000003E000000007E000000007C00000000FC0
-0000000F800000001F800000001F000000001F000000003F000000003E000000007E0000
-00007C00000000FC00000000F800000000F800000000700000000021417BB92C>I<0003
-F80000000FFE0000003FFF8000007FFFC00000FFFFE00001FE0FF00003F803F80007F001
-FC0007E000FC000FC0007E000FC0007E001F80003F001F80003F003F00001F803F00001F
-803E00000F807E00000FC07E00000FC07E00000FC07C000007C0FC000007E0FC000007E0
-FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC
-000007E0FC000007E0FC000007E0FE00000FE07E00000FC07E00000FC07E00000FC07E00
-000FC03F00001F803F00001F803F00001F801F80003F001F80003F000FC0007E000FE000
-FE0007E000FC0007F001FC0003F803F80001FE0FF00000FFFFE000007FFFC000003FFF80
-00000FFE00000003F8000023357CB32C>I<00070000000F8000000F8000001F8000001F
-8000003F8000007F800000FF800001FF800007FF80007FFF8000FFFF8000FFDF8000FF9F
-80007C1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F80007FFFFFE0FFFFFFF0FFFF
-FFF0FFFFFFF07FFFFFE01C3477B32C>I<000FF80000007FFF800001FFFFE00007FFFFF0
-000FFFFFFC001FF80FFE003FE001FF003F80007F007F00003F807E00001F80FE00001FC0
-FE00000FC0FF00000FE0FF000007E0FF000007E0FF000007E07E000007E03C000007E000
-000007E000000007E00000000FE00000000FC00000001FC00000001F800000003F800000
-003F000000007F00000000FE00000001FC00000003FC00000007F80000000FF00000001F
-E00000003FC0000000FF80000001FE00000003FC00000007F80000000FF00000003FE000
-00007F80000000FF00000001FE00000003FC0003C007F80007E01FE00007E03FC00007E0
-7FFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC023347CB32C>I<000FFC00
-00007FFF800001FFFFE00007FFFFF8000FFFFFFC001FF807FE001FC000FE003F80007F00
-3FC0003F003FC0003F803FC0001F803FC0001F801F80001F800F00001F800000001F8000
-00003F800000003F000000007F00000000FE00000001FE00000003FC0000001FF800001F
-FFF000003FFFE000003FFFE000003FFFF800001FFFFC00000007FE00000000FF00000000
-7F000000003F800000001FC00000000FC00000000FC00000000FE000000007E000000007
-E03C000007E07E000007E0FF000007E0FF00000FE0FF00000FC0FF00000FC0FE00001FC0
-7F00003F807F80007F003FC000FF001FF807FE000FFFFFFC0007FFFFF80003FFFFE00000
-7FFF8000000FFC000023357CB32C>I<000007F00000000FF80000001FF80000003FF800
-00003FF80000007EF80000007EF8000000FCF8000001F8F8000001F8F8000003F0F80000
-07E0F8000007E0F800000FC0F800001F80F800001F80F800003F00F800007E00F800007E
-00F80000FC00F80001F800F80001F800F80003F000F80003E000F80007E000F8000FC000
-F8000FC000F8001F8000F8003F0000F8003F0000F8007E0000F800FC0000F800FFFFFFFF
-FCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC000000F800000000F800000000F800
-000000F800000000F800000000F800000000F800000000F800000000F800000000F80000
-007FFFF00000FFFFF80000FFFFF80000FFFFF800007FFFF027347EB32C>I<0FFFFFFE00
-1FFFFFFF001FFFFFFF001FFFFFFF001FFFFFFE001F800000001F800000001F800000001F
-800000001F800000001F800000001F800000001F800000001F800000001F800000001F80
-0000001F800000001F800000001F83FE00001F9FFF80001FFFFFE0001FFFFFF8001FFFFF
-FC001FFE03FE001FF000FF001FC0007F001F80003F801F00001F800F00001FC00000000F
-C00000000FC000000007E000000007E000000007E000000007E03C000007E07E000007E0
-FF000007E0FF00000FE0FF00000FC0FF00000FC0FE00001FC07E00003F807F00007F003F
-8000FF003FC001FE001FF80FFC000FFFFFF80007FFFFF00001FFFFC000007FFF0000000F
-F8000023347CB22C>I<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F0000000000
-0000000000000000000000000000000000000000000000001F003F807FC0FFE0FFE0FFE0
-FFE0FFE07FC03F801F000B2470A32C>58 D<00000002000000000F800000001F80000000
-7F80000000FF80000003FE0000000FFC0000001FF00000007FE0000000FF80000003FE00
-000007FC0000001FF00000003FE0000000FF80000003FF00000007FC0000001FF8000000
-3FE0000000FF80000000FF00000000FF00000000FF800000003FE00000001FF800000007
-FC00000003FF00000000FF800000003FE00000001FF000000007FC00000003FE00000000
-FF800000007FE00000001FF00000000FFC00000003FE00000000FF800000007F80000000
-1F800000000F800000000200212A7BAD2C>60 D<2000000000F800000000FC00000000FF
-00000000FF800000003FE00000001FF800000007FC00000003FF00000000FF800000003F
-E00000001FF000000007FC00000003FE00000000FF800000007FE00000001FF00000000F
-FC00000003FE00000000FF800000007F800000007F80000000FF80000003FE0000000FFC
-0000001FF00000007FE0000000FF80000003FE00000007FC0000001FF00000003FE00000
-00FF80000003FF00000007FC0000001FF80000003FE0000000FF80000000FF00000000FC
-00000000F8000000002000000000212A7BAD2C>62 D<003FFE000003FFFFC0000FFFFFF0
-001FFFFFFC003FFFFFFE007FE007FF007F0000FF00FE00003F80FF00001F80FF00001F80
-FF00001F80FF00003F807E00007F003C0000FF00000003FE0000000FFC0000001FF80000
-003FE00000007FC0000000FF00000001FE00000003FC00000003F800000007F800000007
-F00000000FF00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
-0000000FE000000007C00000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000003800000000FE00000000FE00000001FF00000
-001FF00000001FF00000000FE00000000FE00000000380000021337BB22C>I<00007F80
-000003FFE000000FFFF000003FFFF800007FFFFC0000FFC0FE0001FE007F0003F8003F00
-07F0001F8007E00FCF800FC03FFF801F807FFFC01F80FFFFC03F01FFFFC03E03F87FC03E
-07F03FE07E07E01FE07C0FC00FE07C0F8007E07C0F8007E0FC1F8007E0F81F0003E0F81F
-0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F00
-03E0FC1F8007E07C0F8007C07C0F8007C07C0FC00FC07E07E01F803E07F03F803E03F87F
-003F01FFFE001F80FFFC001F807FF8000FC03FF00007E00FC00007F00007C003F8000FE0
-01FE001FE000FFC0FFE0007FFFFFC0003FFFFF80000FFFFE000003FFF80000007FC00023
-337CB22C>I<0000FE00000001FF00000001FF00000001FF00000001FF00000003FF8000
-0003FF80000003EF80000003EF80000007EF80000007EFC0000007EFC0000007C7C00000
-07C7C000000FC7E000000FC7E000000FC7E000000FC3E000001F83F000001F83F000001F
-83F000001F83F000001F83F000003F01F800003F01F800003F01F800003F01F800007E00
-FC00007E00FC00007E00FC00007E00FC00007E00FC0000FC007E0000FFFFFE0000FFFFFE
-0000FFFFFE0001FFFFFF0001FFFFFF0001F8003F0001F8003F0001F8003F0003F0001F80
-03F0001F8003F0001F8003F0001F8007F0001FC007E0000FC07FFE00FFFC7FFF01FFFCFF
-FF01FFFE7FFF01FFFC7FFE00FFFC27347EB32C>I<7FFFFFE0007FFFFFF800FFFFFFFE00
-7FFFFFFF007FFFFFFFC003F0003FC003F0000FE003F00007F003F00003F003F00003F003
-F00001F803F00001F803F00001F803F00001F803F00001F803F00001F803F00003F003F0
-0003F003F00007F003F0000FE003F0001FC003F000FF8003FFFFFF0003FFFFFE0003FFFF
-FC0003FFFFFF0003FFFFFFC003F0001FE003F00007F003F00003F803F00001F803F00000
-FC03F00000FC03F00000FE03F000007E03F000007E03F000007E03F000007E03F000007E
-03F000007E03F00000FE03F00000FC03F00001FC03F00003F803F0000FF803F0003FF07F
-FFFFFFE07FFFFFFFC0FFFFFFFF807FFFFFFE007FFFFFF00027337FB22C>I<0000FF0070
-0007FFE0F8000FFFF9F8003FFFFDF8007FFFFFF800FF81FFF801FE007FF803FC001FF807
-F0000FF807F00007F80FE00007F80FC00003F81F800003F81F800001F83F000001F83F00
-0001F87F000001F87E000000F07E000000007E00000000FE00000000FC00000000FC0000
-0000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC000000
-00FC00000000FC00000000FE000000007E000000007E000000007E000000007F000000F0
-3F000001F83F000001F81F800001F81F800001F80FC00003F80FE00003F007F00007F007
-F00007E003FC001FE001FE003FC000FF81FF80007FFFFF00003FFFFE00000FFFFC000007
-FFF0000000FF800025357DB32C>I<7FFFFF0000FFFFFFC000FFFFFFF000FFFFFFF8007F
-FFFFFC0007E003FE0007E000FF0007E0007F8007E0003F8007E0001FC007E0000FE007E0
-000FE007E00007E007E00007F007E00003F007E00003F807E00001F807E00001F807E000
-01F807E00001F807E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000
-FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00001F8
-07E00001F807E00001F807E00003F807E00003F007E00003F007E00007F007E00007E007
-E0000FE007E0001FC007E0003FC007E0007F8007E000FF0007E003FE007FFFFFFC00FFFF
-FFF800FFFFFFF000FFFFFFC0007FFFFF000026337EB22C>I<7FFFFFFFF0FFFFFFFFF8FF
-FFFFFFF8FFFFFFFFF87FFFFFFFF803F00001F803F00001F803F00001F803F00001F803F0
-0001F803F00001F803F00001F803F00000F003F000000003F000000003F000000003F000
-000003F001E00003F003F00003F003F00003F003F00003F003F00003FFFFF00003FFFFF0
-0003FFFFF00003FFFFF00003FFFFF00003F003F00003F003F00003F003F00003F003F000
-03F001E00003F000000003F000000003F000000003F000000003F000000003F000003C03
-F000007E03F000007E03F000007E03F000007E03F000007E03F000007E03F000007E03F0
-00007E7FFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC27337EB22C>I<7F
-FFFFFFF8FFFFFFFFFCFFFFFFFFFCFFFFFFFFFC7FFFFFFFFC03F00000FC03F00000FC03F0
-0000FC03F00000FC03F00000FC03F00000FC03F00000FC03F000007803F000000003F000
-000003F000000003F000000003F000000003F000F00003F001F80003F001F80003F001F8
-0003F001F80003FFFFF80003FFFFF80003FFFFF80003FFFFF80003FFFFF80003F001F800
-03F001F80003F001F80003F001F80003F000F00003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F00000007FFFE00000FFFFE00000FFFFF00000FFFFE000007FFFE0
-000026337EB22C>I<0001FC0380000FFF87C0001FFFEFC0007FFFFFC000FFFFFFC001FF
-07FFC003FC01FFC003F800FFC007F0007FC00FE0003FC00FC0001FC01FC0001FC01F8000
-1FC03F80000FC03F00000FC03F00000FC07E00000FC07E000007807E000000007E000000
-00FE00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000
-FC00000000FC00000000FC0003FFF8FC0007FFFCFC0007FFFCFE0007FFFC7E0003FFF87E
-00000FC07E00000FC07E00000FC03F00001FC03F00001FC03F80001FC01F80001FC01FC0
-003FC00FC0003FC00FE0007FC007F0007FC003F800FFC003FC01FFC001FF07FFC000FFFF
-FFC0007FFFEFC0001FFFCFC0000FFF07800001FC000026357DB32C>I<7FFFE00000FFFF
-F00000FFFFF00000FFFFF000007FFFE0000003F000000003F000000003F000000003F000
-000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000000003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-0000F003F00001F803F00001F803F00001F803F00001F803F00001F803F00001F803F000
-01F803F00001F87FFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF025337DB2
-2C>76 D<7FE0000FFCFFF0001FFEFFF0001FFEFFF8003FFE7FF8003FFC0FF8003FE00FBC
-007BE00FBC007BE00FBC007BE00FBC007BE00F9E00F3E00F9E00F3E00F9E00F3E00F9F01
-F3E00F9F01F3E00F8F01E3E00F8F01E3E00F8F83E3E00F8F83E3E00F8783C3E00F87C7C3
-E00F87C7C3E00F83C783E00F83C783E00F83EF83E00F83EF83E00F81EF03E00F81EF03E0
-0F81FF03E00F80FE03E00F80FE03E00F80FE03E00F807C03E00F803803E00F800003E00F
-800003E00F800003E00F800003E00F800003E00F800003E00F800003E00F800003E00F80
-0003E00F800003E00F800003E00F800003E07FF0001FFCFFF8003FFEFFF8003FFEFFF800
-3FFE7FF0001FFC27337EB22C>I<7FFFFFC000FFFFFFF800FFFFFFFC00FFFFFFFF007FFF
-FFFF8003F000FFC003F0003FC003F0000FE003F00007F003F00007F003F00003F003F000
-03F803F00001F803F00001F803F00001F803F00001F803F00001F803F00001F803F00003
-F803F00003F003F00007F003F00007F003F0000FE003F0003FC003F000FFC003FFFFFF80
-03FFFFFF0003FFFFFC0003FFFFF80003FFFFC00003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F00000007FFF800000FFFFC0
-0000FFFFC00000FFFFC000007FFF80000025337EB22C>80 D<7FFFFC000000FFFFFF8000
-00FFFFFFE00000FFFFFFF800007FFFFFFC000007E007FE000007E001FE000007E0007F00
-0007E0003F800007E0001F800007E0001F800007E0000FC00007E0000FC00007E0000FC0
-0007E0000FC00007E0000FC00007E0000FC00007E0001F800007E0001F800007E0003F80
-0007E0007F000007E001FE000007E007FE000007FFFFFC000007FFFFF8000007FFFFE000
-0007FFFFF0000007FFFFF8000007E007FC000007E001FE000007E000FE000007E0007F00
-0007E0003F000007E0003F000007E0003F000007E0003F000007E0003F000007E0003F00
-0007E0003F000007E0003F000007E0003F0F0007E0003F1F8007E0003F1F8007E0003F1F
-8007E0003F1F8007E0003F1F807FFE001FBF80FFFF001FFF00FFFF000FFF00FFFF000FFE
-007FFE0007FC0000000001F00029347EB22C>82 D<001FF8070000FFFF0F8001FFFFCF80
-07FFFFFF800FFFFFFF801FF01FFF803FC003FF803F8001FF807F0000FF807E00007F80FE
-00003F80FC00003F80FC00001F80FC00001F80FC00001F80FC00001F80FE00000F007E00
-0000007F000000007F800000003FE00000001FFC0000001FFFC000000FFFFC000003FFFF
-C00001FFFFF000007FFFF8000007FFFC0000007FFE00000007FF00000000FF800000003F
-800000001FC00000001FC00000000FE00000000FE078000007E0FC000007E0FC000007E0
-FC000007E0FC000007E0FC000007E0FE00000FC0FE00000FC0FF00001F80FF80003F80FF
-E0007F00FFFE01FF00FFFFFFFE00FFFFFFFC00F9FFFFF000F83FFFC0007007FF00002335
-7CB32C>I<7FFFFFFFFCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFC007E007EFC
-007E007EFC007E007EFC007E007EFC007E007EFC007E007EFC007E007E78007E003C0000
-7E000000007E000000007E000000007E000000007E000000007E000000007E000000007E
-000000007E000000007E000000007E000000007E000000007E000000007E000000007E00
-0000007E000000007E000000007E000000007E000000007E000000007E000000007E0000
-00007E000000007E000000007E000000007E000000007E000000007E000000007E000000
-007E000000007E000000007E000000007E0000003FFFFC00003FFFFC00007FFFFE00003F
-FFFC00003FFFFC0027337EB22C>I<7FF00007FF00FFF8000FFF80FFF8000FFF80FFF800
-0FFF807FF00007FF001F0000007C001F0000007C001F0000007C001F0000007C000F8000
-00F8000F800000F8000F800000F8000F800000F8000F800000F8000F800000F8000F8000
-00F80007C00001F00007C00001F00007C00001F00007C00001F00007C03E01F00007C07F
-01F00007C07F01F00007C07F01F00003E0FF83E00003E0FF83E00003E0F783E00003E0F7
-83E00003E1F7C3E00003E1F7C3E00003E1F7C3E00001E1E3C3C00001E1E3C3C00001F1E3
-C7C00001F3E3E7C00001F3E3E7C00001F3E3E7C00001F3C1E7C00001F3C1E7C00000F3C1
-E7800000F3C1E7800000F7C1F7800000F780F7800000F780F7800000F780F7800000FF80
-FF8000007F80FF0000007F007F0000007F007F0000007F007F0000007F007F0000003E00
-3E000029347FB22C>87 D<7FFFFCFFFFFEFFFFFEFFFFFEFFFFFCFC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FFFFFCFFFFFEFFFFFEFFFFFE7FFFFC17416FB92C>91
-D<7000000000F800000000F800000000FC000000007C000000007E000000003E00000000
-3F000000001F000000001F000000001F800000000F800000000FC000000007C000000007
-E000000003E000000003F000000001F000000001F800000000F800000000FC000000007C
-000000007E000000003E000000003E000000003F000000001F000000001F800000000F80
-0000000FC000000007C000000007E000000003E000000003F000000001F000000001F800
-000000F800000000FC000000007C000000007E000000003E000000003E000000003F0000
-00001F000000001F800000000F800000000FC000000007C000000007E000000003E00000
-0003F000000001F000000001F800000000F800000000FC000000007C000000007C000000
-007E000000003E000000003F000000001F000000001F800000000F800000000F80000000
-070021417BB92C>I<7FFFFCFFFFFEFFFFFEFFFFFE7FFFFE00007E00007E00007E00007E
-00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E
-00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E
-00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E
-00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E
-00007E00007E00007E7FFFFEFFFFFEFFFFFEFFFFFE7FFFFC17417DB92C>I<7FFFFFFF00
-FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF807FFFFFFF0021067B7D2C>95
-D<0038007C01FC03FC07F807F00FC01F801F803F003E007E007C007C00FC00F800F800F8
-00FFC0FFE0FFF0FFF8FFF87FF87FF83FF83FF01FE007C00E1D72B82C>I<01FFF0000007
-FFFE00001FFFFF80001FFFFFE0003FFFFFF0003FC01FF8003FC007F8003FC001FC001F80
-00FC00060000FE000000007E000000007E000000007E000000FFFE00001FFFFE0000FFFF
-FE0003FFFFFE000FFFFFFE001FFF807E003FF8007E007FC0007E007F00007E00FE00007E
-00FC00007E00FC00007E00FC00007E00FC00007E00FE00007E007F0000FE007F8003FE00
-3FE01FFE001FFFFFFFFC0FFFFFFFFE07FFFFBFFE01FFFE1FFE003FF007FC27247CA32C>
-I<7FF0000000FFF8000000FFF8000000FFF80000007FF800000001F800000001F8000000
-01F800000001F800000001F800000001F800000001F800000001F800000001F800000001
-F800000001F81FE00001F8FFF80001FBFFFE0001FFFFFF0001FFFFFF8001FFF07FC001FF
-801FE001FF0007F001FE0003F801FC0003F801FC0001FC01F80000FC01F80000FC01F800
-00FE01F800007E01F800007E01F800007E01F800007E01F800007E01F800007E01F80000
-7E01F800007E01F80000FE01FC0000FC01FC0000FC01FC0001F801FE0003F801FF0007F0
-01FF000FF001FF801FE001FFE07FC001FFFFFF8001FFFFFF0001FBFFFE0001F8FFF80000
-F03FC00027337FB22C>I<0003FFE000001FFFF800007FFFFE0001FFFFFE0003FFFFFF00
-07FE00FF000FF000FF001FE000FF001FC0007E003F800018003F000000007F000000007E
-000000007E00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00
-000000FC00000000FC000000007E000000007E000000007F000000003F00000F003F8000
-1F801FC0001F801FE0003F800FF0007F0007FE03FF0003FFFFFE0001FFFFFC00007FFFF8
-00001FFFE0000003FF000021247AA32C>I<00000FFE0000001FFF0000001FFF0000001F
-FF0000000FFF000000003F000000003F000000003F000000003F000000003F000000003F
-000000003F000000003F000000003F000000003F000007F83F00003FFE3F0000FFFFBF00
-01FFFFFF0003FFFFFF0007FC0FFF000FF003FF001FE001FF001FC000FF003F80007F003F
-00007F007E00003F007E00003F00FE00003F00FC00003F00FC00003F00FC00003F00FC00
-003F00FC00003F00FC00003F00FC00003F00FC00003F00FE00003F007E00007F007E0000
-7F007F0000FF003F8000FF003F8001FF001FC003FF000FF007FF0007FC1FFF0003FFFFFF
-FC01FFFFBFFE00FFFF3FFE003FFC3FFE000FF01FFC27337DB22C>I<0003FE0000001FFF
-C000007FFFF00001FFFFF80003FFFFFC0007FE03FE000FF800FF001FE0003F801FC0003F
-803F80001FC03F00000FC07F00000FC07E00000FE07E000007E0FC000007E0FFFFFFFFE0
-FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFC0FC00000000FE000000007E000000007E
-000000007F000000003F000003C03F800007E01FC00007E00FF0000FE007F8003FC007FF
-00FFC001FFFFFF8000FFFFFF00003FFFFC00000FFFF0000001FF800023247CA32C>I<00
-000FF80000003FFE000000FFFF000001FFFF800003FFFF800007FC7F800007F07F80000F
-E03F00000FC03F00000FC00000000FC00000000FC00000000FC00000000FC00000000FC0
-00007FFFFFFE00FFFFFFFF00FFFFFFFF00FFFFFFFF007FFFFFFE00000FC00000000FC000
-00000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000
-000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000000
-0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F
-C00000000FC00000000FC000003FFFFFF0007FFFFFF8007FFFFFF8007FFFFFF8003FFFFF
-F00021337DB22C>I<00000003F80007F80FFC001FFE3FFE007FFFFFFF01FFFFFFFF03FF
-FFFE7F03FC0FF87F07F003F83E0FE001FC1C0FC000FC001FC000FE001F80007E001F8000
-7E001F80007E001F80007E001F80007E001F80007E001FC000FE000FC000FC000FE001FC
-0007F003F80003FC0FF00007FFFFF00007FFFFE0000FFFFF80000F9FFE00000F87F80000
-0F800000000F800000000F800000000FC000000007E000000007FFFFF00003FFFFFE0007
-FFFFFF800FFFFFFFE01FFFFFFFF03FC0001FF87F000003FC7E000000FC7C0000007CFC00
-00007EF80000003EF80000003EF80000003EF80000003EFC0000007E7E000000FC7F8000
-03FC3FE0000FF81FFC007FF00FFFFFFFE003FFFFFF8001FFFFFF00003FFFF8000007FFC0
-0028387EA42C>I<7FF000000000FFF800000000FFF800000000FFF8000000007FF80000
-000001F80000000001F80000000001F80000000001F80000000001F80000000001F80000
-000001F80000000001F80000000001F80000000001F80000000001F81FE0000001F87FFC
-000001F9FFFE000001FBFFFF000001FFFFFF000001FFF03F800001FFC01F800001FF801F
-C00001FF000FC00001FE000FC00001FC000FC00001FC000FC00001F8000FC00001F8000F
-C00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000F
-C00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000F
-C00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0007FFFE0FF
-FF00FFFFF1FFFF80FFFFF1FFFF80FFFFF1FFFF807FFFE0FFFF0029337FB22C>I<000700
-00001FC000001FC000003FE000003FE000003FE000001FC000001FC00000070000000000
-000000000000000000000000000000000000000000000000007FFFC0007FFFE000FFFFE0
-007FFFE0007FFFE0000007E0000007E0000007E0000007E0000007E0000007E0000007E0
-000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0
-000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0
-000007E0007FFFFFFCFFFFFFFEFFFFFFFEFFFFFFFE7FFFFFFC1F3479B32C>I<00000E00
-00003F8000003F8000007FC000007FC000007FC000003F8000003F8000000E0000000000
-00000000000000000000000000000000000000000000000001FFFF8003FFFFC003FFFFC0
-03FFFFC001FFFFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0
-00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0
-00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0
-00000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0
-00000FC000000FC000000FC000000FC000001FC03C001F807E003F80FF003F00FF007F00
-FF01FE00FFFFFC007FFFF8007FFFF0001FFFE00007FF00001A467CB32C>I<7FE0000000
-FFF0000000FFF0000000FFF00000007FF000000001F000000001F000000001F000000001
-F000000001F000000001F000000001F000000001F000000001F000000001F000000001F0
-1FFFF001F03FFFF801F03FFFF801F03FFFF801F01FFFF001F000FE0001F001FC0001F003
-F80001F007F00001F00FE00001F01FC00001F03F800001F07F000001F0FE000001F1FC00
-0001F3FC000001F7FE000001FFFF000001FFFF000001FF9F800001FF0FC00001FE0FE000
-01FC07E00001F803F00001F001F80001F001FC0001F000FC0001F0007E0001F0003F0001
-F0003F8001F0001F807FFFC0FFFCFFFFE1FFFEFFFFE1FFFEFFFFE1FFFE7FFFC0FFFC2733
-7EB22C>I<7FFFE00000FFFFF00000FFFFF00000FFFFF000007FFFF000000003F0000000
-03F000000003F000000003F000000003F000000003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F000000003F000000003F000
-000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000007FFFFFFF80FFFFFFFFC0FFFFFFFFC0FFFF
-FFFFC07FFFFFFF8022337BB22C>I<7F83F007E0007FCFFC1FF800FFDFFE3FFC007FFFFE
-FFFC007FFFFFFFFE0007FE1FFC3E0007FC1FF83F0007F80FF01F0007F00FE01F0007E00F
-C01F0007E00FC01F0007E00FC01F0007C00F801F0007C00F801F0007C00F801F0007C00F
-801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F
-801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F801F0007C00F
-801F0007C00F801F0007C00F801F0007C00F801F007FFC3FF87FF07FFC7FF8FFF0FFFE7F
-FCFFF87FFC7FF8FFF07FFC3FF87FF02D2481A32C>I<7FF01FE00000FFF87FFC0000FFF9
-FFFE0000FFFBFFFF00007FFFFFFF000001FFF03F800001FFC01F800001FF801FC00001FF
-000FC00001FE000FC00001FC000FC00001FC000FC00001F8000FC00001F8000FC00001F8
-000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8
-000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8
-000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0007FFFE0FFFF00FFFF
-F1FFFF80FFFFF1FFFF80FFFFF1FFFF807FFFE0FFFF0029247FA32C>I<0007FC0000001F
-FF0000007FFFC00001FFFFF00003FFFFF80007FC07FC000FF001FE001FE000FF001F8000
-3F003F80003F803F00001F807E00000FC07E00000FC07E00000FC0FC000007E0FC000007
-E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FE00000FE07E00000FC0
-7E00000FC07F00001FC03F00001F803F80003F801FC0007F001FE000FF000FF001FE0007
-FC07FC0003FFFFF80001FFFFF000007FFFC000001FFF00000007FC000023247CA32C>I<
-7FF01FE000FFF8FFF800FFFBFFFE00FFFFFFFF007FFFFFFF8001FFF07FC001FF801FE001
-FF0007F001FE0003F801FC0003F801FC0001FC01F80000FC01F80000FC01F80000FE01F8
-00007E01F800007E01F800007E01F800007E01F800007E01F800007E01F800007E01F800
-007E01F80000FE01FC0000FC01FC0000FC01FC0001F801FE0003F801FF0007F001FF000F
-F001FF801FE001FFE07FC001FFFFFF8001FFFFFF0001FBFFFE0001F8FFF80001F83FC000
-01F800000001F800000001F800000001F800000001F800000001F800000001F800000001
-F800000001F800000001F800000001F800000001F800000001F80000007FFFE00000FFFF
-F00000FFFFF00000FFFFF000007FFFE0000027367FA32C>I<0003FC078000001FFF0FC0
-00007FFFCFC00001FFFFEFC00003FFFFFFC00007FE07FFC0000FF001FFC0001FE000FFC0
-001FC0007FC0003F80003FC0003F00003FC0007F00001FC0007E00001FC0007E00000FC0
-00FC00000FC000FC00000FC000FC00000FC000FC00000FC000FC00000FC000FC00000FC0
-00FC00000FC000FC00000FC000FE00000FC0007E00001FC0007E00001FC0003F00003FC0
-003F80003FC0001FC0007FC0001FE000FFC0000FF003FFC00007FC0FFFC00003FFFFFFC0
-0001FFFFEFC000007FFF8FC000003FFF0FC0000007F80FC0000000000FC0000000000FC0
-000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0
-000000000FC0000000000FC0000000000FC0000000000FC0000000000FC000000003FFFF
-00000007FFFF80000007FFFF80000007FFFF80000003FFFF0029367DA32C>I<7FFE003F
-C0FFFF01FFF0FFFF07FFF8FFFF1FFFFC7FFF3FFFFC003F7FE1FC003FFF01FC003FFC00F8
-003FF80070003FF00000003FE00000003FE00000003FC00000003F800000003F80000000
-3F800000003F000000003F000000003F000000003F000000003F000000003F000000003F
-000000003F000000003F000000003F000000003F000000003F000000003F000000003F00
-0000003F0000007FFFFFE000FFFFFFF000FFFFFFF000FFFFFFF0007FFFFFE00026247EA3
-2C>I<007FF87003FFFFF80FFFFFF81FFFFFF83FFFFFF87FC00FF87E0003F8FC0001F8F8
-0001F8F80001F8F80001F8FC0000F07F0000007FF000003FFFC0001FFFFE000FFFFF8003
-FFFFE0007FFFF80001FFFC000007FC000000FE7800007FFC00003FFC00001FFE00001FFE
-00001FFF00003FFF80003EFFC000FEFFF007FCFFFFFFFCFFFFFFF8FFFFFFE0F8FFFF8070
-1FFC0020247AA32C>I<001E000000003F000000003F000000003F000000003F00000000
-3F000000003F000000003F000000003F000000003F0000007FFFFFFF00FFFFFFFF80FFFF
-FFFF80FFFFFFFF807FFFFFFF00003F000000003F000000003F000000003F000000003F00
-0000003F000000003F000000003F000000003F000000003F000000003F000000003F0000
-00003F000000003F000000003F000000003F000000003F000000003F0003C0003F0007E0
-003F0007E0003F0007E0003F0007E0003F0007E0003F800FE0001F801FC0001FE07FC000
-0FFFFF80000FFFFF000003FFFE000001FFF80000003FE000232E7EAD2C>I<7FF003FF80
-00FFF807FFC000FFF807FFC000FFF807FFC0007FF803FFC00001F8000FC00001F8000FC0
-0001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
-0001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
-0001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
-0001F8000FC00001F8001FC00001F8001FC00001F8003FC00001FC007FC00000FE03FFC0
-0000FFFFFFFF00007FFFFFFF80003FFFFFFF80001FFFCFFF800003FE07FF0029247FA32C
->I<7FFF01FFFCFFFF01FFFEFFFF83FFFEFFFF01FFFE7FFF01FFFC03E0000F8003E0000F
-8003F0001F8001F0001F0001F0001F0001F8003F0000F8003E0000F8003E0000FC007E00
-007C007C00007C007C00007E00FC00003E00F800003E00F800003F01F800001F01F00000
-1F01F000001F83F000000F83E000000F83E000000FC7E0000007C7C0000007C7C0000007
-EFC0000003EF80000003EF80000003FF80000001FF00000001FF00000000FE000000007C
-000027247EA32C>I<7FFF007FFF007FFF80FFFF00FFFF80FFFF807FFF80FFFF007FFF00
-7FFF0007C00001F00007C00001F00007C00001F00007C00001F00007C00001F00007C000
-01F00003E00003E00003E00003E00003E00003E00003E03E03E00003E07F03E00003E07F
-03E00001F07F07C00001F0FF87C00001F0FF87C00001F0F787C00001F0F787C00001F1F7
-C7C00000F1F7C7800000F9E3CF800000F9E3CF800000FBE3EF800000FBE3EF800000FBE3
-EF8000007BC1EF0000007FC1FF0000007FC1FF0000007F80FF0000007F80FF0000003F80
-FE0000001F007C000029247FA32C>I<3FFF03FFF07FFF87FFF87FFF87FFF87FFF87FFF8
-3FFF03FFF000FC007E0000FC00FC00007E01F800003F01F000001F83F000001F87E00000
-0FCFC0000007EF80000003FF80000001FF00000001FE00000000FC000000007C00000000
-FE00000001FE00000001FF00000003EF80000007CFC000000FC7C000000F83E000001F01
-F000003F01F800007E00F800007C007C0000F8007E0001F8003F007FFF01FFFC7FFF83FF
-FCFFFF83FFFE7FFF83FFFC7FFF01FFFC27247EA32C>I<7FFF01FFFCFFFF81FFFEFFFF83
-FFFEFFFF81FFFE7FFF01FFFC03E0000F8001F0000F8001F0001F8001F8001F0000F8001F
-0000F8003F0000FC003E00007C003E00007E007E00003E007C00003E007C00003F00FC00
-001F00F800001F00F800000F81F800000F81F000000F81F0000007C1F0000007C3E00000
-07C3E0000003E3E0000003E7C0000001E7C0000001F7C0000001F780000000FF80000000
-FF80000000FF000000007F000000007F000000003E000000003E000000007E000000007C
-000000007C00000000FC00000000F800000000F800000C01F800003F01F000007F83F000
-007F87E000007E0FE000007E1FC000007FFF8000003FFF0000001FFE0000000FFC000000
-07E000000027367EA32C>I<3FFFFFFFE07FFFFFFFF07FFFFFFFF07FFFFFFFF07FFFFFFF
-F07E00001FE07E00003FC07E00007F807E0000FF007E0001FE003C0003FC00000007F800
-00000FF00000001FE00000003FC00000007F80000000FF00000001FC00000003F8000000
-0FF00000001FE00000003FC00000007F80000000FF00000001FE0001E003FC0003F007F8
-0003F00FF00003F01FE00003F03FC00003F07F800003F0FFFFFFFFF0FFFFFFFFF0FFFFFF
-FFF0FFFFFFFFF07FFFFFFFE024247DA32C>I<000000FF00000007FF8000001FFF800000
-7FFF800000FFFF000001FFC0000001FE00000003F800000003F000000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F000000003F000000003F000
-000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000007F00000001FE0000000FFE000007FFFC00000FFFF800000FF
-FE000000FFFF8000007FFFC0000000FFE00000001FE000000007F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F000000003F000000003F000
-000003F000000003F000000003F000000003F800000001FE00000001FFC0000000FFFF00
-00007FFF8000001FFF80000007FF80000000FF0021417BB92C>I<78FCFCFCFCFCFCFCFC
-FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC
-FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC7806416DB92C>I<7FC0000000FFF80000
-00FFFE000000FFFF8000007FFFC0000000FFE00000001FE000000007F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000000003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F800000001FE00000001FFC0000000FF
-FF0000007FFF8000001FFF8000007FFF800000FFFF000001FFC0000001FE00000003F800
-000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000000003F000000007F00000001FE0000000FF
-E000007FFFC00000FFFF800000FFFE000000FFF80000007FC000000021417BB92C>I
-E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fh labx1440 14.4 68
-/Fh 68 256 df<0000001E0000003E000000FC000001F8000003F0000007E000000FE000
-001FC000003F8000007F000000FF000000FE000001FC000003FC000007F8000007F80000
-0FF000001FF000001FE000003FE000003FC000007FC000007F800000FF800000FF800001
-FF000001FF000003FF000003FE000007FE000007FE000007FC00000FFC00000FFC00000F
-FC00001FF800001FF800001FF800001FF800003FF800003FF800003FF000003FF000007F
-F000007FF000007FF000007FF000007FF000007FF000007FE00000FFE00000FFE00000FF
-E00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FF
-E00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FF
-E000007FE000007FF000007FF000007FF000007FF000007FF000007FF000003FF000003F
-F000003FF800003FF800001FF800001FF800001FF800001FF800000FFC00000FFC00000F
-FC000007FC000007FE000007FE000003FE000003FF000001FF000001FF000000FF800000
-FF8000007F8000007FC000003FC000003FE000001FE000001FF000000FF0000007F80000
-07F8000003FC000001FC000000FE000000FF0000007F0000003F8000001FC000000FE000
-0007E0000003F0000001F8000000FC0000003E0000001E1F7974D933>40
-D<F0000000F80000007E0000003F0000001F8000000FC000000FE0000007F0000003F800
-0001FC000001FE000000FE0000007F0000007F8000003FC000003FC000001FE000001FF0
-00000FF000000FF8000007F8000007FC000003FC000003FE000003FE000001FF000001FF
-000001FF800000FF800000FFC00000FFC000007FC000007FE000007FE000007FE000003F
-F000003FF000003FF000003FF000003FF800003FF800001FF800001FF800001FFC00001F
-FC00001FFC00001FFC00001FFC00001FFC00000FFC00000FFE00000FFE00000FFE00000F
-FE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000F
-FE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000FFE00000F
-FC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF800001FF800003F
-F800003FF800003FF000003FF000003FF000003FF000007FE000007FE000007FE000007F
-C00000FFC00000FFC00000FF800001FF800001FF000001FF000003FE000003FE000003FC
-000007FC000007F800000FF800000FF000001FF000001FE000003FC000003FC000007F80
-00007F000000FE000001FE000001FC000003F8000007F000000FE000000FC000001F8000
-003F0000007E000000F8000000F00000001F7979D933>I<07E0001FF0003FFC007FFC00
-7FFE00FFFF00FFFF00FFFF00FFFF80FFFF80FFFF807FFF807FFF803FFF801FFF8007E780
-000780000780000780000F80000F00000F00000F00001F00001E00003E00003E00007C00
-007C0000F80000F80001F00003E00007E0000FC0001F80001F00001E00000C0000112776
-8F25>44 D<000003FF80000000003FFFF800000001FFFFFF00000007FFFFFFC000000FFF
-01FFE000003FFC007FF800007FF0001FFC0000FFE0000FFE0001FFC00007FF0001FF8000
-03FF0003FF800003FF8007FF000001FFC007FF000001FFC00FFE000000FFE00FFE000000
-FFE01FFE000000FFF01FFE000000FFF01FFE000000FFF03FFE000000FFF83FFE000000FF
-F83FFC0000007FF83FFC0000007FF87FFC0000007FFC7FFC0000007FFC7FFC0000007FFC
-7FFC0000007FFC7FFC0000007FFC7FFC0000007FFCFFFC0000007FFEFFFC0000007FFEFF
-FC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC
-0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC00
-00007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000
-007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC0000007FFEFFFC000000
-7FFE7FFC0000007FFC7FFC0000007FFC7FFC0000007FFC7FFC0000007FFC7FFC0000007F
-FC7FFC0000007FFC3FFC0000007FF83FFE000000FFF83FFE000000FFF83FFE000000FFF8
-1FFE000000FFF01FFE000000FFF01FFE000000FFF00FFE000000FFE00FFF000001FFE007
-FF000001FFC007FF000001FFC003FF800003FF8001FF800003FF0001FFC00007FF0000FF
-E0000FFE00007FF0001FFC00003FFC007FF800000FFF01FFE0000007FFFFFFC0000001FF
-FFFF000000003FFFF80000000003FF800000374F7BCD42>48 D<0000001E00000000003E
-0000000000FE0000000003FE000000000FFE000000007FFE00000007FFFE000003FFFFFE
-0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFF87FFE0000FC007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE
-000000007FFE000000007FFE000000007FFE000000007FFE000000007FFE00007FFFFFFF
-FFFC7FFFFFFFFFFC7FFFFFFFFFFC7FFFFFFFFFFC7FFFFFFFFFFC2E4E76CD42>I<00001F
-FE0000000001FFFFF00000000FFFFFFC0000003FFFFFFF8000007FFFFFFFE00001FF803F
-FFF00003FC0007FFFC0007F00001FFFE000FE00000FFFF001F8000007FFF803F0000003F
-FF803F0000001FFFC07FE000001FFFE07FF800000FFFE07FFC00000FFFF0FFFC000007FF
-F0FFFE000007FFF0FFFE000003FFF8FFFE000003FFF8FFFE000003FFF8FFFE000003FFF8
-FFFE000003FFF87FFC000003FFF87FFC000003FFF83FF8000003FFF81FF0000003FFF803
-80000003FFF80000000003FFF00000000007FFF00000000007FFF00000000007FFE00000
-00000FFFE0000000000FFFC0000000001FFFC0000000001FFF80000000003FFF00000000
-003FFE00000000007FFC0000000000FFF80000000000FFF00000000001FFE00000000003
-FFC00000000007FF800000000007FF00000000000FFC00000000001FF800000000003FF0
-00000000007FC00000000000FF800000000001FF000000000003FC000000000007F80000
-0000000FF00000F800001FE00000F800003FC00000F800007F000000F80000FE000001F0
-0001FC000001F00003F8000001F00007F0000001F00007E0000001F0000F80000003F000
-1F00000003F0003E00000007F0007FFFFFFFFFF000FFFFFFFFFFE001FFFFFFFFFFE003FF
-FFFFFFFFE007FFFFFFFFFFE00FFFFFFFFFFFE01FFFFFFFFFFFE03FFFFFFFFFFFE07FFFFF
-FFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFF
-FFFFC0354E7ACD42>I<000007FFC0000000007FFFFC00000003FFFFFF8000000FFFFFFF
-E000001FF803FFF800007FC000FFFC0000FE00003FFE0001FC00003FFF0003F800001FFF
-8003FE00001FFF8007FF80000FFFC007FFC0000FFFC00FFFC0000FFFE00FFFE0000FFFE0
-0FFFE0000FFFE00FFFE0000FFFE00FFFE0000FFFE00FFFE0000FFFE00FFFE0000FFFE007
-FFC0000FFFE007FFC0000FFFC003FF80000FFFC001FF00001FFFC0003800001FFF800000
-00001FFF80000000003FFF00000000003FFF00000000007FFE00000000007FFC00000000
-00FFF80000000001FFF00000000003FFC0000000000FFF80000000007FFE000000007FFF
-F8000000007FFFC0000000007FFFFC000000007FFFFF800000000003FFE000000000007F
-F800000000003FFE00000000001FFF00000000000FFF80000000000FFFC00000000007FF
-E00000000007FFF00000000003FFF80000000003FFF80000000003FFFC0000000001FFFC
-0000000001FFFC0000000001FFFE0000000001FFFE0000000001FFFE03C0000001FFFE0F
-F0000001FFFE3FFC000001FFFE7FFE000001FFFE7FFE000001FFFEFFFF000001FFFEFFFF
-000001FFFEFFFF000001FFFCFFFF000001FFFCFFFF000003FFFCFFFF000003FFF8FFFF00
-0003FFF87FFE000003FFF07FFC000007FFF07FF8000007FFE03FE000000FFFC01FC00000
-1FFFC00FF000003FFF8007FE00007FFE0003FFE003FFFC0001FFFFFFFFF800007FFFFFFF
-E000000FFFFFFF00000001FFFFFC000000001FFF800000374F7BCD42>I<0000000000FC
-00000000000001FC00000000000001FC00000000000003FC00000000000007FC00000000
-00000FFC0000000000000FFC0000000000001FFC0000000000003FFC0000000000007FFC
-0000000000007FFC000000000000FFFC000000000001FFFC000000000003FFFC00000000
-0003FFFC000000000007FFFC00000000000FFFFC00000000001FFFFC00000000001F7FFC
-00000000003E7FFC00000000007E7FFC0000000000FC7FFC0000000000F87FFC00000000
-01F07FFC0000000003F07FFC0000000007E07FFC0000000007C07FFC000000000F807FFC
-000000001F807FFC000000003F007FFC000000003E007FFC000000007C007FFC00000000
-FC007FFC00000001F8007FFC00000001F0007FFC00000003E0007FFC00000007E0007FFC
-0000000FC0007FFC0000000F80007FFC0000001F00007FFC0000003F00007FFC0000007E
-00007FFC0000007C00007FFC000000F800007FFC000001F800007FFC000003F000007FFC
-000003E000007FFC000007C000007FFC00000FC000007FFC00001F8000007FFC00001F00
-00007FFC00003E0000007FFC00007E0000007FFC0000FC0000007FFC0000FFFFFFFFFFFF
-FF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF800000
-0000FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC
-000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC00000000
-0000FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC
-000000000000FFFC000000001FFFFFFFFF8000001FFFFFFFFF8000001FFFFFFFFF800000
-1FFFFFFFFF8000001FFFFFFFFF80394F7CCE42>I<0180000000060001F00000003E0001
-FE000001FE0001FFF0003FFE0001FFFFFFFFFC0001FFFFFFFFF80001FFFFFFFFF00001FF
-FFFFFFE00001FFFFFFFFC00001FFFFFFFF800001FFFFFFFF000001FFFFFFFC000001FFFF
-FFF8000001FFFFFFE0000001FFFFFF00000001FFFFFC00000001F0FF8000000001F00000
-00000001F0000000000001F0000000000001F0000000000001F0000000000001F0000000
-000001F0000000000001F0000000000001F0000000000001F0000000000001F000000000
-0001F0000000000001F007FF80000001F03FFFF8000001F0FFFFFE000001F3FFFFFF8000
-01FFFC01FFE00001FFE0007FF80001FF00003FFC0001FE00001FFE0001F800000FFF0001
-F000000FFF0001F0000007FF8001E0000007FFC00000000007FFC00000000007FFE00000
-000003FFE00000000003FFF00000000003FFF00000000003FFF00000000003FFF0000000
-0003FFF80000000003FFF80000000003FFF80300000003FFF80FE0000003FFF83FF80000
-03FFF87FFC000003FFF87FFC000003FFF8FFFC000003FFF8FFFE000003FFF8FFFE000003
-FFF8FFFE000003FFF0FFFE000003FFF0FFFC000003FFF0FFFC000007FFF07FF8000007FF
-E07FF0000007FFE07FC0000007FFC03F0000000FFFC03F0000000FFF801F8000001FFF00
-1FC000001FFF000FF000003FFE0007F80000FFFC0003FE0001FFF00001FFE00FFFE00000
-7FFFFFFF8000003FFFFFFF0000000FFFFFF800000001FFFFC0000000003FFC000000354F
-7ACD42>I<00000007FE0000000000FFFFC000000003FFFFF00000001FFFFFFC0000007F
-FC01FE000000FFE0007F000003FF80003F800007FF00001F80000FFE00007FC0001FFC00
-00FFC0003FF80003FFE0007FF00003FFE000FFE00007FFE001FFE00007FFE003FFC00007
-FFE003FFC00007FFE007FF800007FFE007FF800007FFE00FFF800003FFC00FFF000003FF
-C01FFF000000FF001FFF0000007E001FFF00000000003FFF00000000003FFF0000000000
-3FFE00000000007FFE00000000007FFE00000000007FFE003FF000007FFE01FFFF00007F
-FE07FFFFC000FFFE0FFFFFF000FFFE1F807FF800FFFE3E001FFE00FFFE78000FFF00FFFE
-F00007FF80FFFEF00003FFC0FFFFE00003FFC0FFFFC00001FFE0FFFFC00001FFF0FFFF80
-0001FFF0FFFF800000FFF8FFFF800000FFF8FFFF000000FFFCFFFF000000FFFCFFFF0000
-00FFFCFFFF000000FFFCFFFE000000FFFEFFFE000000FFFEFFFE000000FFFE7FFE000000
-FFFE7FFE000000FFFE7FFE000000FFFE7FFE000000FFFE7FFE000000FFFE7FFE000000FF
-FE3FFE000000FFFE3FFE000000FFFE3FFE000000FFFE3FFF000000FFFE1FFF000000FFFC
-1FFF000000FFFC1FFF000000FFFC0FFF000000FFF80FFF000001FFF807FF000001FFF807
-FF800001FFF003FF800001FFE001FFC00003FFE001FFE00003FFC000FFE00007FF80007F
-F0000FFF00003FFC001FFE00001FFF00FFFC000007FFFFFFF0000003FFFFFFE0000000FF
-FFFF800000001FFFFC0000000003FFC00000374F7BCD42>I<1F0000000000001F800000
-0000001FC000000000001FFF80000000001FFFFFFFFFFFFF1FFFFFFFFFFFFF1FFFFFFFFF
-FFFF1FFFFFFFFFFFFF3FFFFFFFFFFFFF3FFFFFFFFFFFFE3FFFFFFFFFFFFC3FFFFFFFFFFF
-F83FFFFFFFFFFFF03FFFFFFFFFFFF03FFFFFFFFFFFE03FFFFFFFFFFFC03FFFFFFFFFFF80
-7FFFFFFFFFFF007F800000003E007E000000007E007E00000000FC007C00000001F8007C
-00000003F0007C00000003E0007C00000007E0007C0000000FC000F80000001F8000F800
-00003F0000F80000007E0000F80000007C000000000000FC000000000001F80000000000
-03F0000000000003F0000000000007E000000000000FE000000000001FC000000000001F
-C000000000003F8000000000003F8000000000007F000000000000FF000000000000FF00
-0000000001FF000000000001FE000000000003FE000000000003FE000000000007FE0000
-00000007FC00000000000FFC00000000000FFC00000000000FFC00000000001FFC000000
-00001FFC00000000003FFC00000000003FFC00000000003FFC00000000007FF800000000
-007FF800000000007FF800000000007FF80000000000FFF80000000000FFF80000000000
-FFF80000000000FFF80000000000FFF80000000000FFF80000000001FFF80000000001FF
-F80000000001FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF8
-0000000001FFF80000000001FFF80000000001FFF80000000001FFF80000000000FFF000
-000000007FE000000000003FC000000000001F80000000385279D042>I<000003FFC000
-0000003FFFFC00000001FFFFFF80000007FFFFFFE000000FFC00FFF800003FE0001FFC00
-007F800007FE0000FF000003FF0000FE000001FF8001FC000000FF8003FC000000FFC003
-F80000007FC007F80000007FC007F80000007FE007F80000003FE00FF80000003FE00FF8
-0000003FE00FFC0000003FE00FFC0000003FE00FFE0000003FE00FFF0000003FE00FFF80
-00007FE00FFFE000007FC00FFFF000007FC00FFFFC0000FFC007FFFF0000FF8007FFFF80
-01FF0007FFFFE003FF0003FFFFF807FE0003FFFFFC0FFC0001FFFFFF1FF00000FFFFFFFF
-E00000FFFFFFFF8000007FFFFFFE0000003FFFFFFE0000000FFFFFFF80000007FFFFFFC0
-000001FFFFFFF0000000FFFFFFF8000003FFFFFFFE00000FFFFFFFFF00003FF7FFFFFF80
-007FC1FFFFFFC001FF807FFFFFE003FF001FFFFFE007FE000FFFFFF00FFC0003FFFFF81F
-F80000FFFFF81FF000007FFFFC3FF000001FFFFC3FE0000007FFFC7FE0000003FFFE7FC0
-000000FFFE7FC00000007FFEFFC00000003FFEFF800000001FFEFF800000000FFEFF8000
-000007FEFF8000000007FEFF8000000003FEFF8000000003FEFF8000000003FCFF800000
-0003FCFFC000000003FC7FC000000003FC7FE000000007F87FE000000007F83FF0000000
-0FF03FF80000000FF01FFC0000001FE00FFE0000003FC007FF000000FF8003FFC00003FF
-0001FFFC003FFE00007FFFFFFFF800001FFFFFFFE0000007FFFFFF80000000FFFFFC0000
-00000FFFC00000374F7BCD42>I<000007FF80000000007FFFF800000001FFFFFE000000
-07FFFFFF8000001FFE01FFE000007FF8003FF00000FFF0001FF80001FFE0000FFC0003FF
-C00007FE0007FF800007FF000FFF800003FF800FFF000003FF801FFF000001FFC03FFF00
-0001FFC03FFF000001FFE07FFE000001FFE07FFE000001FFF07FFE000001FFF07FFE0000
-00FFF8FFFE000000FFF8FFFE000000FFF8FFFE000000FFF8FFFE000000FFFCFFFE000000
-FFFCFFFE000000FFFCFFFE000000FFFCFFFE000000FFFCFFFE000000FFFCFFFE000000FF
-FEFFFE000000FFFEFFFE000000FFFEFFFE000001FFFE7FFE000001FFFE7FFE000001FFFE
-7FFE000001FFFE7FFE000001FFFE3FFE000003FFFE3FFE000003FFFE1FFF000003FFFE1F
-FF000007FFFE0FFF000007FFFE07FF80000FFFFE07FF80001EFFFE03FFC0001EFFFE01FF
-E0003CFFFE007FF000F8FFFE003FFC03F0FFFE001FFFFFE0FFFE0007FFFFC0FFFC0000FF
-FF00FFFC00001FF800FFFC0000000000FFFC0000000000FFFC0000000000FFF800000000
-01FFF80000000001FFF80000000001FFF800FC000001FFF001FE000001FFF007FF800001
-FFE007FF800003FFE00FFFC00003FFC00FFFC00003FFC00FFFC00007FF800FFFC00007FF
-800FFFC0000FFF000FFFC0000FFE000FFF80001FFE0007FF80003FFC0007FE00007FF800
-07FC0000FFF00003F80001FFE00003FC0007FFC00001FF803FFF000000FFFFFFFC000000
-3FFFFFF80000001FFFFFC000000007FFFF00000000007FF0000000374F7BCD42>I<FFFF
-FFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFF
-FE00FFFFFFFFFFFFFFFFFE00000FFFE0000007FFFF00000FFFE00000007FFF00000FFFE0
-0000001FFF00000FFFE000000007FF00000FFFE000000003FF00000FFFE000000001FF00
-000FFFE000000000FF00000FFFE0000000007F00000FFFE0000000007F00000FFFE00000
-00003F80000FFFE0000000003F80000FFFE0000000001F80000FFFE0000000001F80000F
-FFE0000000001F80000FFFE0000000000F80000FFFE0000000000F80000FFFE000000000
-0F80000FFFE0000000000F80000FFFE00001F0000FC0000FFFE00001F00007C0000FFFE0
-0001F00007C0000FFFE00001F00007C0000FFFE00001F00007C0000FFFE00001F0000000
-000FFFE00001F0000000000FFFE00003F0000000000FFFE00003F0000000000FFFE00003
-F0000000000FFFE00007F0000000000FFFE0000FF0000000000FFFE0001FF0000000000F
-FFE000FFF0000000000FFFFFFFFFF0000000000FFFFFFFFFF0000000000FFFFFFFFFF000
-0000000FFFFFFFFFF0000000000FFFFFFFFFF0000000000FFFE000FFF0000000000FFFE0
-001FF0000000000FFFE0000FF0000000000FFFE00007F0000000000FFFE00003F0000000
-000FFFE00003F0000000000FFFE00003F0000000000FFFE00001F0000000000FFFE00001
-F00000F8000FFFE00001F00000F8000FFFE00001F00000F8000FFFE00001F00001F0000F
-FFE00001F00001F0000FFFE00001F00001F0000FFFE00000000001F0000FFFE000000000
-01F0000FFFE00000000003F0000FFFE00000000003F0000FFFE00000000003E0000FFFE0
-0000000003E0000FFFE00000000007E0000FFFE00000000007E0000FFFE00000000007E0
-000FFFE0000000000FE0000FFFE0000000000FC0000FFFE0000000001FC0000FFFE00000
-00003FC0000FFFE0000000003FC0000FFFE0000000007FC0000FFFE000000000FFC0000F
-FFE000000001FF80000FFFE000000007FF80000FFFE00000001FFF80000FFFE00000007F
-FF80000FFFE000000FFFFF80FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF80FFFFFFFF
-FFFFFFFFFF00FFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF004D527CD156>69
-D<FFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFF
-FCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFC0007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFFFFFFFFFFFFFFF80000007FFFFFFFFFFFFFFFF80
-000007FFFFFFFFFFFFFFFF80000007FFFFFFFFFFFFFFFF80000007FFFFFFFFFFFFFFFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF8000FFFFFFFFFF8007FFFFFFFF
-FCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFF
-FCFFFFFFFFFF8007FFFFFFFFFC5E527CD167>72 D<FFFFFFFFFF80FFFFFFFFFF80FFFFFF
-FFFF80FFFFFFFFFF80FFFFFFFFFF800007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF000000007FFF000000007FFF000000007FFF000000007FF
-F000000007FFF000000007FFF00000FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFFFFF
-FFFF80FFFFFFFFFF8029527DD130>I<FFFFFFFFFFE0000000FFFFFFFFFFE0000000FFFF
-FFFFFFE0000000FFFFFFFFFFE0000000FFFFFFFFFFE0000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE00000000000000FFFE00000000000000FFFE00000000000000FFFE00000000000000F
-FFE000000000F8000FFFE000000000F8000FFFE000000000F8000FFFE000000000F8000F
-FFE000000001F8000FFFE000000001F0000FFFE000000001F0000FFFE000000001F0000F
-FFE000000001F0000FFFE000000001F0000FFFE000000003F0000FFFE000000003F0000F
-FFE000000003F0000FFFE000000007F0000FFFE000000007F0000FFFE00000000FF0000F
-FFE00000000FE0000FFFE00000001FE0000FFFE00000001FE0000FFFE00000003FE0000F
-FFE00000007FE0000FFFE0000000FFE0000FFFE0000001FFE0000FFFE0000007FFE0000F
-FFE000000FFFE0000FFFE000007FFFE0000FFFE00003FFFFE0FFFFFFFFFFFFFFFFC0FFFF
-FFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC04552
-7CD14F>76 D<00003FFE000000000007FFFFE0000000001FFFFFFC000000007FFFFFFF00
-000001FFC00FFFC0000003FE0003FFE0000007FF0000FFF0000007FF80007FF800000FFF
-C0007FFC00000FFFC0003FFE00000FFFC0003FFE00000FFFC0001FFF00000FFFC0001FFF
-00000FFFC0001FFF00000FFFC0000FFF800007FF80000FFF800003FF00000FFF800001FE
-00000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF
-8000000000000FFF8000000000000FFF800000000007FFFF8000000003FFFFFF80000000
-7FFFFFFF80000003FFFFFFFF8000001FFFF00FFF8000007FFF000FFF800000FFFC000FFF
-800003FFF0000FFF800007FFC0000FFF80000FFF80000FFF80001FFF00000FFF80003FFF
-00000FFF80003FFE00000FFF80007FFC00000FFF80007FFC00000FFF81F0FFFC00000FFF
-81F0FFF800000FFF81F0FFF800000FFF81F0FFF800000FFF81F0FFF800001FFF81F0FFF8
-00001FFF81F0FFFC00003FFF81F07FFC00003FFF81F07FFE00007FFF81F03FFE0000F7FF
-C3F03FFF0001E3FFC3E01FFFC007E3FFFFE007FFF01F81FFFFC003FFFFFF00FFFF8000FF
-FFFC007FFF00001FFFF0003FFC000001FF800007F0003C387CB642>97
-D<000003FFE0000000003FFFFE00000000FFFFFF80000003FFFFFFE000000FFF003FF800
-003FFC0007FC00007FF8000FFE0000FFF0001FFE0001FFE0003FFF0003FFC0003FFF0007
-FF80003FFF0007FF80003FFF000FFF00003FFF001FFF00003FFF001FFE00003FFF003FFE
-00001FFE003FFE00000FFC003FFE000007F8007FFE00000000007FFC00000000007FFC00
-000000007FFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000
-000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC000000
-0000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00000000007FFC00000000
-007FFE00000000007FFE00000000007FFE00000000003FFE00000000003FFF0000000000
-1FFF0000000F801FFF0000000F800FFF8000001F800FFF8000001F0007FFC000003F0003
-FFE000003E0001FFF000007E0000FFF80000FC00007FFC0001F800003FFF0007F000000F
-FFC01FE0000007FFFFFF80000001FFFFFE000000003FFFF80000000003FF80000031387C
-B63A>99 D<0000001FF800000003FFFE0000000FFFFF8000003FFFFFC00000FFF83FE000
-03FFE0FFF00007FF80FFF0000FFF01FFF8001FFF01FFF8003FFE01FFF8003FFE01FFF800
-7FFC01FFF8007FFC01FFF8007FFC00FFF000FFF800FFF000FFF8007FE000FFF8001F8000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF8000000FFFFFFFFC000FFFFFFFFC000FFFFFFFFC000FFFFFFFFC000FF
-FFFFFFC00000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000
-FFF800000000FFF8000000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FF
-FFFFFE00002D547CD328>102 D<003F000000FFC00001FFE00003FFF00003FFF00007FF
-F80007FFF80007FFF80007FFF80007FFF80007FFF80003FFF00003FFF00001FFE00000FF
-C000003F0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000001FF800FFFFF800FFFF
-F800FFFFF800FFFFF800FFFFF80001FFF80000FFF80000FFF80000FFF80000FFF80000FF
-F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF
-F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF
-F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF
-F80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FFF80000FF
-F80000FFF800FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFF0FFFFFFF01C547CD324>105
-D<003FF0001FF8000001FF800000FFFFF000FFFF80000FFFF80000FFFFF003FFFFE0003F
-FFFE0000FFFFF00FFFFFF000FFFFFF0000FFFFF03F80FFF803F80FFF8000FFFFF07E007F
-FC07E007FFC00003FFF0F8003FFE0F8003FFE00000FFF1F0001FFE1F0001FFE00000FFF3
-E0001FFF3E0001FFF00000FFF3C0001FFF3C0001FFF00000FFF780001FFF780001FFF000
-00FFF700000FFFF00000FFF80000FFFF00000FFFF00000FFF80000FFFE00000FFFE00000
-FFF80000FFFE00000FFFE00000FFF80000FFFC00000FFFC00000FFF80000FFFC00000FFF
-C00000FFF80000FFFC00000FFFC00000FFF80000FFF800000FFF800000FFF80000FFF800
-000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000
-FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FF
-F80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF80
-0000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF80000
-0FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FF
-F800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF8
-0000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF8000
-00FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000F
-FF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF80000FFF8
-00000FFF800000FFF80000FFF800000FFF800000FFF80000FFF800000FFF800000FFF800
-00FFF800000FFF800000FFF80000FFF800000FFF800000FFF800FFFFFFF80FFFFFFF80FF
-FFFFF8FFFFFFF80FFFFFFF80FFFFFFF8FFFFFFF80FFFFFFF80FFFFFFF8FFFFFFF80FFFFF
-FF80FFFFFFF8FFFFFFF80FFFFFFF80FFFFFFF865367BB56E>109
-D<003FF0001FFC000000FFFFF000FFFF800000FFFFF003FFFFE00000FFFFF00FFFFFF800
-00FFFFF01FC07FFC0000FFFFF07E003FFE000003FFF0F8001FFF000000FFF1F0001FFF00
-0000FFF1E0000FFF800000FFF3C0000FFF800000FFF780000FFF800000FFF7000007FFC0
-0000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC0
-0000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0
-0000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFF
-C0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042367CB549>I<000001FFC00000000000
-3FFFFE0000000000FFFFFF8000000003FFFFFFE00000000FFF80FFF80000003FFC001FFE
-0000007FF00007FF000000FFE00003FF800001FFC00001FFC00003FF800000FFE00003FF
-0000007FE00007FF0000007FF0000FFF0000007FF8000FFE0000003FF8001FFE0000003F
-FC001FFE0000003FFC003FFE0000003FFE003FFC0000001FFE003FFC0000001FFE007FFC
-0000001FFF007FFC0000001FFF007FFC0000001FFF007FFC0000001FFF00FFFC0000001F
-FF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC
-0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001F
-FF80FFFC0000001FFF80FFFC0000001FFF807FFC0000001FFF007FFC0000001FFF007FFC
-0000001FFF003FFC0000001FFE003FFE0000003FFE003FFE0000003FFE001FFE0000003F
-FC001FFE0000003FFC000FFF0000007FF8000FFF0000007FF80007FF800000FFF00003FF
-800000FFE00001FFC00001FFC00000FFE00003FF8000007FF00007FF0000003FFC001FFE
-0000001FFF80FFFC00000007FFFFFFF000000001FFFFFFC0000000003FFFFE0000000000
-03FFE000000039387CB642>I<003FF8007FF0000000FFFFF807FFFF000000FFFFF81FFF
-FFC00000FFFFF87FFFFFF00000FFFFF9FF00FFFC0000FFFFFFF8003FFF000003FFFFE000
-0FFF800000FFFF800007FFC00000FFFF000003FFE00000FFFE000003FFF00000FFFC0000
-01FFF00000FFF8000000FFF80000FFF8000000FFFC0000FFF80000007FFC0000FFF80000
-007FFE0000FFF80000007FFE0000FFF80000003FFE0000FFF80000003FFF0000FFF80000
-003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000001FFF8000FFF80000
-001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000
-001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000
-001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000
-003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000
-007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF8000000FFFC0000FFF80000
-00FFF80000FFFC000001FFF80000FFFC000001FFF00000FFFE000003FFE00000FFFF0000
-07FFC00000FFFF80000FFF800000FFFFE0001FFF000000FFFFF0007FFE000000FFF9FE01
-FFF8000000FFF8FFFFFFF0000000FFF83FFFFFC0000000FFF807FFFE00000000FFF800FF
-E000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000
-0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000
-0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000
-0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000
-0000000000FFF8000000000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF800
-00000000FFFFFFF80000000000FFFFFFF80000000000414D7DB549>I<0003FFC00E0000
-1FFFFC1E0000FFFFFF7E0003FFFFFFFE0007FE003FFE000FF0000FFE001FE00003FE003F
-C00001FE003F800000FE007F800000FE007F0000007E007F0000007E00FF0000003E00FF
-0000003E00FF8000003E00FF8000003E00FFC000003E00FFF000000000FFFC00000000FF
-FF800000007FFFFE0000007FFFFFF000003FFFFFFE00003FFFFFFF80001FFFFFFFE0000F
-FFFFFFF00007FFFFFFFC0003FFFFFFFE0000FFFFFFFF00003FFFFFFF00000FFFFFFF8000
-01FFFFFF8000000FFFFFC00000003FFFC000000007FFE000000001FFE0F8000000FFE0F8
-0000007FE0FC0000003FE0FC0000003FE0FC0000001FE0FE0000001FE0FE0000001FE0FE
-0000001FC0FF0000001FC0FF8000003FC0FF8000003F80FFC000003F80FFE000007F00FF
-F80000FF00FFFC0003FE00FFFF801FFC00FE7FFFFFF000F81FFFFFC000F007FFFF0000E0
-007FF000002B387CB634>115 D<FFFFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFFFC00FFFF
-FFFFFFFFFFFFFC00FFFFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFFFC00000FFFC000000FFF
-FE00000FFFC0000000FFFE00000FFFC00000003FFE00000FFFC00000000FFE00000FFFC0
-00000007FE00000FFFC000000003FE00000FFFC000000001FE00000FFFC000000000FE00
-000FFFC000000000FE00000FFFC0000000007F00000FFFC0000000007F00000FFFC00000
-00003F00000FFFC0000000003F00000FFFC0000000003F00000FFFC0000000001F00000F
-FFC0000000001F00000FFFC0000000001F00000FFFC0000000001F00000FFFC000000000
-1F80000FFFC0000000000F80000FFFC0000000000F80000FFFC0000000000F80000FFFC0
-000000000F80000FFFC0000000000000000FFFC0000000000000000FFFC0000000000000
-000FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC00000
-80000000000FFFC07FFFFFE00000000FFFFFFFFFFFFE0000000FFFFFFFFFFFFF8000000F
-FFFFFFFFFFFFE000000FFFFFFFFFFFFFF800000FFFFFE0007FFFFE00000FFFE0000007FF
-FF00000FFFC0000001FFFF80000FFFC00000007FFFC0000FFFC00000003FFFE0000FFFC0
-0000001FFFF0000FFFC00000000FFFF8000FFFC000000007FFF8000FFFC000000007FFFC
-000FFFC000000003FFFC000FFFC000000003FFFE000FFFC000000001FFFE000FFFC00000
-0001FFFE000FFFC000000001FFFE000FFFC000000000FFFF000FFFC000000000FFFF000F
-FFC000000000FFFF000FFFC000000000FFFF000FFFC000000000FFFF000FFFC000000000
-FFFF000FFFC000000000FFFF000FFFC000000000FFFF000FFFC000000000FFFF000FFFC0
-00000000FFFE000FFFC000000001FFFE000FFFC000000001FFFE000FFFC000000001FFFE
-000FFFC000000003FFFC000FFFC000000003FFFC000FFFC000000007FFF8000FFFC00000
-0007FFF8000FFFC00000000FFFF0000FFFC00000001FFFE0000FFFC00000003FFFC0000F
-FFC00000007FFF80000FFFC0000001FFFF00000FFFC000000FFFFE00FFFFFFFFFFFFFFFF
-F800FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFF8000FFFFFFFFFFFFFFFE0000FFFFFFFF
-FFFFFFC0000050527BD15D>193 D<FFFFFFFFFFFFFE000000FFFFFFFFFFFFFFF00000FF
-FFFFFFFFFFFFFE0000FFFFFFFFFFFFFFFF8000FFFFFFFFFFFFFFFFE000000FFFC000001F
-FFF000000FFFC0000003FFF800000FFFC0000001FFFC00000FFFC00000007FFE00000FFF
-C00000007FFF00000FFFC00000003FFF80000FFFC00000001FFFC0000FFFC00000001FFF
-C0000FFFC00000000FFFE0000FFFC00000000FFFE0000FFFC00000000FFFE0000FFFC000
-000007FFF0000FFFC000000007FFF0000FFFC000000007FFF0000FFFC000000007FFF000
-0FFFC000000007FFF0000FFFC000000007FFF0000FFFC000000007FFF0000FFFC0000000
-07FFF0000FFFC000000007FFF0000FFFC00000000FFFE0000FFFC00000000FFFE0000FFF
-C00000000FFFE0000FFFC00000001FFFC0000FFFC00000001FFF80000FFFC00000003FFF
-80000FFFC00000007FFF00000FFFC00000007FFE00000FFFC0000000FFFC00000FFFC000
-0003FFF800000FFFC0000007FFE000000FFFC000003FFFC000000FFFFFFFFFFFFF000000
-0FFFFFFFFFFFF80000000FFFFFFFFFFFF80000000FFFFFFFFFFFFF8000000FFFC000001F
-FFE000000FFFC0000001FFF800000FFFC00000007FFE00000FFFC00000003FFF00000FFF
-C00000000FFFC0000FFFC00000000FFFE0000FFFC000000007FFF0000FFFC000000003FF
-F0000FFFC000000003FFF8000FFFC000000001FFFC000FFFC000000001FFFC000FFFC000
-000000FFFE000FFFC000000000FFFE000FFFC000000000FFFE000FFFC000000000FFFF00
-0FFFC000000000FFFF000FFFC000000000FFFF000FFFC000000000FFFF000FFFC0000000
-00FFFF000FFFC000000000FFFF000FFFC000000000FFFF000FFFC000000000FFFF000FFF
-C000000000FFFF000FFFC000000000FFFE000FFFC000000000FFFE000FFFC000000001FF
-FE000FFFC000000001FFFC000FFFC000000001FFFC000FFFC000000003FFFC000FFFC000
-000007FFF8000FFFC000000007FFF0000FFFC00000000FFFF0000FFFC00000001FFFE000
-0FFFC00000007FFFC0000FFFC0000001FFFF80000FFFC000000FFFFE00FFFFFFFFFFFFFF
-FFFC00FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFC000FFFFFFFFFFFFFFFE0000FFFFFF
-FFFFFFFFC0000050527BD15D>I<3800003FFF000000003C0007FFFFF80000003F003FFF
-FFFF8000003F80FFFFFFFFE000003FE3FFFFFFFFF800003FF7FFC007FFFE00003FFFFC00
-00FFFF00003FFFE000003FFF80003FFF8000001FFFE0003FFF0000000FFFE0003FFC0000
-0007FFF0003FF800000003FFF8003FF000000001FFFC003FE000000001FFFC003FE00000
-0000FFFE003FC000000000FFFE003FC000000000FFFE003F8000000000FFFF003F800000
-00007FFF003F00000000007FFF003F00000000007FFF003F00000000007FFF003E000000
-00007FFF003E00000000007FFF003E00000000007FFF003E0000000000FFFF0000000000
-0000FFFE00000000000000FFFE00000000000001FFFC00000000000001FFFC0000000000
-0003FFF800000000000003FFF000000000000007FFE00000000000000FFFC00000000000
-001FFF800000000000003FFE00000000000000FFF800000000000007FFE0000000000FFF
-FFFF80000000001FFFFFFC00000000001FFFFFF800000000001FFFFFFF80000000000000
-1FFFF000000000000000FFFE000000000000001FFF8000000000000007FFE00000000000
-0003FFF000000000000001FFF800000000000000FFFE000000000000007FFF0000000000
-00003FFF000000000000003FFF800000000000001FFFC00000000000001FFFC000000000
-00001FFFE00000000000000FFFE00000000000000FFFF00000000000000FFFF000000000
-00000FFFF0F800000000000FFFF0F800000000000FFFF0F800000000000FFFF0F8000000
-00000FFFF0F800000000000FFFF0FC00000000000FFFF07C00000000000FFFE07C000000
-00000FFFE07E00000000001FFFE07E00000000001FFFC03F00000000003FFFC03F000000
-00003FFF801F80000000007FFF801FC000000000FFFF000FE000000001FFFE0007F00000
-0003FFFC0003FC00000007FFF80001FF0000000FFFF00000FFE000007FFFC000007FFF00
-03FFFF8000001FFFFFFFFFFE00000007FFFFFFFFF800000001FFFFFFFFC0000000003FFF
-FFFE000000000000FFFF8000000044547AD250>199 D<FFFFFFFFFF8007FFFFFFFFFCFF
-FFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFF
-FFFFFFFF8007FFFFFFFFFC0007FFF0000000003FFF80000007FFF0000000007FFF800000
-07FFF000000000FFFF80000007FFF000000000FFFF80000007FFF000000001FFFF800000
-07FFF000000001FFFF80000007FFF000000003FFFF80000007FFF000000007FFFF800000
-07FFF000000007FFFF80000007FFF00000000FFFFF80000007FFF00000001FFFFF800000
-07FFF00000001FBFFF80000007FFF00000003F3FFF80000007FFF00000003F3FFF800000
-07FFF00000007E3FFF80000007FFF0000000FE3FFF80000007FFF0000000FC3FFF800000
-07FFF0000001F83FFF80000007FFF0000001F83FFF80000007FFF0000003F03FFF800000
-07FFF0000007E03FFF80000007FFF0000007E03FFF80000007FFF000000FC03FFF800000
-07FFF000000FC03FFF80000007FFF000001F803FFF80000007FFF000003F003FFF800000
-07FFF000003F003FFF80000007FFF000007E003FFF80000007FFF000007E003FFF800000
-07FFF00000FC003FFF80000007FFF00001F8003FFF80000007FFF00001F8003FFF800000
-07FFF00003F0003FFF80000007FFF00007F0003FFF80000007FFF00007E0003FFF800000
-07FFF0000FC0003FFF80000007FFF0000FC0003FFF80000007FFF0001F80003FFF800000
-07FFF0003F80003FFF80000007FFF0003F00003FFF80000007FFF0007E00003FFF800000
-07FFF0007E00003FFF80000007FFF000FC00003FFF80000007FFF001F800003FFF800000
-07FFF001F800003FFF80000007FFF003F000003FFF80000007FFF003F000003FFF800000
-07FFF007E000003FFF80000007FFF00FC000003FFF80000007FFF00FC000003FFF800000
-07FFF01F8000003FFF80000007FFF01F8000003FFF80000007FFF03F0000003FFF800000
-07FFF07E0000003FFF80000007FFF07E0000003FFF80000007FFF0FC0000003FFF800000
-07FFF1FC0000003FFF80000007FFF1F80000003FFF80000007FFF3F00000003FFF800000
-07FFF3F00000003FFF80000007FFF7E00000003FFF80000007FFFFE00000003FFF800000
-07FFFFC00000003FFF80000007FFFF800000003FFF80000007FFFF800000003FFF800000
-07FFFF000000003FFF80000007FFFE000000003FFF80000007FFFE000000003FFF800000
-07FFFC000000003FFF80000007FFFC000000003FFF80000007FFF8000000003FFF800000
-07FFF0000000003FFF8000FFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFF
-FFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFC5E
-527CD167>I<FFFFFFFFFF800003FFFFFFE0FFFFFFFFFF800003FFFFFFE0FFFFFFFFFF80
-0003FFFFFFE0FFFFFFFFFF800003FFFFFFE0FFFFFFFFFF800003FFFFFFE00007FFF00000
-00000FFF80000007FFF00000000001FC00000007FFF00000000003F800000007FFF00000
-00000FF000000007FFF0000000001FE000000007FFF0000000003FC000000007FFF00000
-00007F0000000007FFF000000000FE0000000007FFF000000001FC0000000007FFF00000
-0003F80000000007FFF000000007F00000000007FFF00000000FE00000000007FFF00000
-003FC00000000007FFF00000007F800000000007FFF0000000FF000000000007FFF00000
-01FC000000000007FFF0000003F8000000000007FFF0000007F0000000000007FFF00000
-0FE0000000000007FFF000001FC0000000000007FFF000007F80000000000007FFF00000
-FF00000000000007FFF00001FE00000000000007FFF00003F800000000000007FFF00007
-F000000000000007FFF0000FE000000000000007FFF0001FC000000000000007FFF0003F
-E000000000000007FFF0007FF000000000000007FFF001FFF000000000000007FFF003FF
-F800000000000007FFF007FFFC00000000000007FFF00FFFFE00000000000007FFF01FFF
-FE00000000000007FFF03FFFFF00000000000007FFF07FFFFF80000000000007FFF0FE7F
-FF80000000000007FFF3FC7FFFC0000000000007FFF7F83FFFE0000000000007FFFFF01F
-FFF0000000000007FFFFC00FFFF0000000000007FFFF800FFFF8000000000007FFFF0007
-FFFC000000000007FFFE0003FFFC000000000007FFFC0003FFFE000000000007FFF80001
-FFFF000000000007FFF00000FFFF800000000007FFF000007FFF800000000007FFF00000
-7FFFC00000000007FFF000003FFFE00000000007FFF000001FFFE00000000007FFF00000
-1FFFF00000000007FFF000000FFFF80000000007FFF0000007FFFC0000000007FFF00000
-03FFFC0000000007FFF0000003FFFE0000000007FFF0000001FFFF0000000007FFF00000
-00FFFF0000000007FFF0000000FFFF8000000007FFF00000007FFFC000000007FFF00000
-003FFFE000000007FFF00000001FFFE000000007FFF00000001FFFF000000007FFF00000
-000FFFF800000007FFF000000007FFF800000007FFF000000007FFFC00000007FFF00000
-0003FFFE00000007FFF000000001FFFF00000007FFF000000000FFFF00000007FFF00000
-0000FFFF80000007FFF0000000007FFFC0000007FFF000000000FFFFE000FFFFFFFFFF80
-00FFFFFFFFF8FFFFFFFFFF8000FFFFFFFFF8FFFFFFFFFF8000FFFFFFFFF8FFFFFFFFFF80
-00FFFFFFFFF8FFFFFFFFFF8000FFFFFFFFF85D527CD167>202 D<FFFFFFF00000000000
-0001FFFFFFF0FFFFFFF800000000000003FFFFFFF0FFFFFFFC00000000000007FFFFFFF0
-FFFFFFFC00000000000007FFFFFFF0FFFFFFFC00000000000007FFFFFFF00007FFFE0000
-000000000FFFFE00000007FFFE0000000000000FFFFE00000007DFFF0000000000001F7F
-FE00000007DFFF0000000000001F7FFE00000007CFFF8000000000003E7FFE00000007CF
-FF8000000000003E7FFE00000007CFFF8000000000003E7FFE00000007C7FFC000000000
-007C7FFE00000007C7FFC000000000007C7FFE00000007C3FFE00000000000F87FFE0000
-0007C3FFE00000000000F87FFE00000007C1FFF00000000001F07FFE00000007C1FFF000
-00000001F07FFE00000007C0FFF80000000003E07FFE00000007C0FFF80000000003E07F
-FE00000007C0FFF80000000003E07FFE00000007C07FFC0000000007C07FFE00000007C0
-7FFC0000000007C07FFE00000007C03FFE000000000F807FFE00000007C03FFE00000000
-0F807FFE00000007C01FFF000000001F007FFE00000007C01FFF000000001F007FFE0000
-0007C01FFF000000001F007FFE00000007C00FFF800000003E007FFE00000007C00FFF80
-0000003E007FFE00000007C007FFC00000007C007FFE00000007C007FFC00000007C007F
-FE00000007C003FFE0000000F8007FFE00000007C003FFE0000000F8007FFE00000007C0
-03FFE0000000F8007FFE00000007C001FFF0000001F0007FFE00000007C001FFF0000001
-F0007FFE00000007C000FFF8000003E0007FFE00000007C000FFF8000003E0007FFE0000
-0007C0007FFC000007C0007FFE00000007C0007FFC000007C0007FFE00000007C0007FFC
-000007C0007FFE00000007C0003FFE00000F80007FFE00000007C0003FFE00000F80007F
-FE00000007C0001FFF00001F00007FFE00000007C0001FFF00001F00007FFE00000007C0
-000FFF80003E00007FFE00000007C0000FFF80003E00007FFE00000007C0000FFF80003E
-00007FFE00000007C00007FFC0007C00007FFE00000007C00007FFC0007C00007FFE0000
-0007C00003FFE000F800007FFE00000007C00003FFE000F800007FFE00000007C00001FF
-F001F000007FFE00000007C00001FFF001F000007FFE00000007C00000FFF803E000007F
-FE00000007C00000FFF803E000007FFE00000007C00000FFF803E000007FFE00000007C0
-00007FFC07C000007FFE00000007C000007FFC07C000007FFE00000007C000003FFE0F80
-00007FFE00000007C000003FFE0F8000007FFE00000007C000001FFF1F0000007FFE0000
-0007C000001FFF1F0000007FFE00000007C000001FFF1F0000007FFE00000007C000000F
-FFBE0000007FFE00000007C000000FFFBE0000007FFE00000007C0000007FFFC0000007F
-FE00000007C0000007FFFC0000007FFE00000007C0000003FFF80000007FFE00000007C0
-000003FFF80000007FFE00000007C0000003FFF80000007FFE00000007C0000001FFF000
-00007FFE00000007C0000001FFF00000007FFE00000007C0000000FFE00000007FFE0000
-0007C0000000FFE00000007FFE0000001FF00000007FC00000007FFE0000FFFFFFFE0000
-7FC0000FFFFFFFFFF0FFFFFFFE00007FC0000FFFFFFFFFF0FFFFFFFE00003F80000FFFFF
-FFFFF0FFFFFFFE00003F80000FFFFFFFFFF0FFFFFFFE00001F00000FFFFFFFFFF074527C
-D17D>204 D<FFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF80
-07FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFC0007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFFFFFFFFFFFFFFF80000007FFFFFFFF
-FFFFFFFF80000007FFFFFFFFFFFFFFFF80000007FFFFFFFFFFFFFFFF80000007FFFFFFFF
-FFFFFFFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF00000
-00003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF8000FFFFFFFFFF80
-07FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF80
-07FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFC5E527CD167>I<FFFFFFFFFFFFFFFFFFFFFF
-FCFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFF
-FCFFFFFFFFFFFFFFFFFFFFFFFC0007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF80000007FFF0000000003FFF80000007FFF0000000003FFF80
-000007FFF0000000003FFF8000FFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFF
-FCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFFFCFFFFFFFFFF8007FFFFFFFF
-FC5E527CD167>207 D<FFFFFFFFFFFFFC000000FFFFFFFFFFFFFFE00000FFFFFFFFFFFF
-FFFE0000FFFFFFFFFFFFFFFF8000FFFFFFFFFFFFFFFFE000000FFFE000003FFFF000000F
-FFE0000003FFFC00000FFFE0000000FFFE00000FFFE00000007FFF00000FFFE00000003F
-FF80000FFFE00000001FFFC0000FFFE00000000FFFE0000FFFE000000007FFE0000FFFE0
-00000007FFF0000FFFE000000007FFF0000FFFE000000007FFF8000FFFE000000003FFF8
-000FFFE000000003FFF8000FFFE000000003FFFC000FFFE000000003FFFC000FFFE00000
-0003FFFC000FFFE000000003FFFC000FFFE000000003FFFC000FFFE000000003FFFC000F
-FFE000000003FFFC000FFFE000000003FFFC000FFFE000000003FFFC000FFFE000000003
-FFF8000FFFE000000003FFF8000FFFE000000003FFF8000FFFE000000007FFF8000FFFE0
-00000007FFF0000FFFE000000007FFF0000FFFE000000007FFE0000FFFE00000000FFFC0
-000FFFE00000001FFFC0000FFFE00000003FFF80000FFFE00000007FFF00000FFFE00000
-00FFFE00000FFFE0000007FFF800000FFFE000003FFFF000000FFFFFFFFFFFFFC000000F
-FFFFFFFFFFFF0000000FFFFFFFFFFFF80000000FFFFFFFFFFF800000000FFFE000000000
-0000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0
-000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000
-000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE00000
-00000000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000F
-FFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE000000000
-0000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0
-000000000000000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000
-000FFFE0000000000000000FFFE0000000000000000FFFE0000000000000000FFFE00000
-00000000000FFFE0000000000000000FFFE0000000000000FFFFFFFFFE0000000000FFFF
-FFFFFE0000000000FFFFFFFFFE0000000000FFFFFFFFFE0000000000FFFFFFFFFE000000
-00004E527CD15A>I<0000000003FFF0000007000000007FFFFF00000F00000007FFFFFF
-E0001F0000003FFFFFFFF8003F000000FFFFFFFFFE007F000003FFFFC003FF00FF00000F
-FFF800003FC1FF00003FFFC000000FE3FF0000FFFF00000003FFFF0001FFFC00000001FF
-FF0003FFF800000000FFFF0007FFE0000000007FFF001FFFC0000000003FFF003FFF8000
-0000001FFF003FFF00000000000FFF007FFE000000000007FF00FFFC000000000003FF01
-FFFC000000000003FF01FFF8000000000001FF03FFF0000000000001FF07FFF000000000
-0000FF07FFF0000000000000FF0FFFE00000000000007F0FFFE00000000000007F1FFFC0
-0000000000007F1FFFC00000000000003F1FFFC00000000000003F3FFF80000000000000
-3F3FFF800000000000001F3FFF800000000000001F7FFF800000000000001F7FFF800000
-000000001F7FFF80000000000000007FFF00000000000000007FFF0000000000000000FF
-FF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000
-000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF00
-00000000000000FFFF0000000000000000FFFF0000000000000000FFFF00000000000000
-00FFFF0000000000000000FFFF0000000000000000FFFF00000000000000007FFF000000
-00000000007FFF00000000000000007FFF80000000000000007FFF80000000000000007F
-FF80000000000000003FFF800000000000001F3FFF800000000000001F3FFF8000000000
-00001F1FFFC00000000000001F1FFFC00000000000001F1FFFC00000000000003F0FFFE0
-0000000000003F0FFFE00000000000003E07FFF00000000000003E07FFF0000000000000
-7E03FFF80000000000007C01FFF8000000000000FC01FFFC000000000000F800FFFC0000
-00000001F8007FFE000000000003F0003FFF000000000003F0003FFF800000000007E000
-1FFFC0000000000FC00007FFE0000000001F800003FFF8000000003F000001FFFC000000
-00FE000000FFFF00000001FC0000003FFFC0000007F80000000FFFFC00003FF000000003
-FFFFC001FFC000000000FFFFFFFFFF00000000003FFFFFFFFC000000000007FFFFFFF000
-00000000007FFFFF8000000000000003FFF0000000505479D25F>I<3FFFFFFFFFFFFFFF
-FFFE003FFFFFFFFFFFFFFFFFFE003FFFFFFFFFFFFFFFFFFE003FFFFFFFFFFFFFFFFFFE00
-3FFFFFFFFFFFFFFFFFFE003FFFC0007FFF0001FFFE003FFC00007FFF00001FFE007FF000
-007FFF000007FF007FE000007FFF000003FF007FC000007FFF000001FF007F8000007FFF
-000000FF007F0000007FFF0000007F007F0000007FFF0000007F007E0000007FFF000000
-3F007E0000007FFF0000003F007E0000007FFF0000003F007C0000007FFF0000001F007C
-0000007FFF0000001F007C0000007FFF0000001F007C0000007FFF0000001F007C000000
-7FFF0000001F00FC0000007FFF0000001F80F80000007FFF0000000F80F80000007FFF00
-00000F80F80000007FFF0000000F80F80000007FFF0000000F80F80000007FFF0000000F
-80F80000007FFF0000000F80000000007FFF0000000000000000007FFF00000000000000
-00007FFF0000000000000000007FFF0000000000000000007FFF0000000000000000007F
-FF0000000000000000007FFF0000000000000000007FFF0000000000000000007FFF0000
-000000000000007FFF0000000000000000007FFF0000000000000000007FFF0000000000
-000000007FFF0000000000000000007FFF0000000000000000007FFF0000000000000000
-007FFF0000000000000000007FFF0000000000000000007FFF0000000000000000007FFF
-0000000000000000007FFF0000000000000000007FFF0000000000000000007FFF000000
-0000000000007FFF0000000000000000007FFF0000000000000000007FFF000000000000
-0000007FFF0000000000000000007FFF0000000000000000007FFF000000000000000000
-7FFF0000000000000000007FFF0000000000000000007FFF0000000000000000007FFF00
-00000000000000007FFF0000000000000000007FFF0000000000000000007FFF00000000
-00000000007FFF0000000000000000007FFF0000000000000000007FFF00000000000000
-00007FFF0000000000000000007FFF0000000000000000007FFF0000000000000000007F
-FF0000000000000000007FFF0000000000000000007FFF0000000000000000007FFF0000
-000000000000007FFF0000000000000000007FFF0000000000000000007FFF0000000000
-000000007FFF00000000000001FFFFFFFFFFFFC000000001FFFFFFFFFFFFC000000001FF
-FFFFFFFFFFC000000001FFFFFFFFFFFFC000000001FFFFFFFFFFFFC0000051527BD15C>
-I<FFFFFFFFF80000003FFFFFF0FFFFFFFFF80000003FFFFFF0FFFFFFFFF80000003FFFFF
-F0FFFFFFFFF80000003FFFFFF0FFFFFFFFF80000003FFFFFF0001FFFF000000000003FF0
-00000FFFF000000000000FC000000FFFF800000000000F80000007FFFC00000000001F80
-000003FFFC00000000001F80000003FFFE00000000001F00000001FFFE00000000003F00
-000000FFFF00000000003E00000000FFFF80000000007E000000007FFF80000000007E00
-0000003FFFC0000000007C000000003FFFE000000000FC000000001FFFE000000000F800
-0000001FFFF000000001F8000000000FFFF800000001F80000000007FFF800000001F000
-00000007FFFC00000003F00000000003FFFE00000003E00000000001FFFE00000007E000
-00000001FFFF00000007E00000000000FFFF00000007C000000000007FFF8000000FC000
-000000007FFFC000000F8000000000003FFFC000001F8000000000001FFFE000001F8000
-000000001FFFF000001F0000000000000FFFF000003F0000000000000FFFF800003E0000
-0000000007FFFC00007E00000000000003FFFC00007E00000000000003FFFE00007C0000
-0000000001FFFF0000FC00000000000000FFFF0000F800000000000000FFFF8001F80000
-00000000007FFF8001F8000000000000003FFFC001F0000000000000003FFFE003F00000
-00000000001FFFE003E0000000000000000FFFF007E0000000000000000FFFF807E00000
-000000000007FFF807C00000000000000007FFFC0FC00000000000000003FFFE0F800000
-000000000001FFFE1F800000000000000001FFFF1F800000000000000000FFFF9F000000
-0000000000007FFFBF0000000000000000007FFFFE0000000000000000003FFFFE000000
-0000000000001FFFFE0000000000000000001FFFFC0000000000000000000FFFFC000000
-00000000000007FFF800000000000000000007FFF800000000000000000003FFF8000000
-00000003800003FFF00000000000000FF00001FFF00000000000003FF80000FFE0000000
-0000007FFC0000FFE00000000000007FFE00007FC0000000000000FFFE00003FC0000000
-000000FFFF00003F80000000000000FFFF00001F00000000000000FFFF00003F00000000
-000000FFFF00007E00000000000000FFFF00007E00000000000000FFFE0000FC00000000
-000000FFFE0001F8000000000000007FFC0003F0000000000000007FF8000FF000000000
-0000003FE0001FE0000000000000003FC000FFC0000000000000001FF807FF0000000000
-0000000FFFFFFE000000000000000003FFFFFC000000000000000001FFFFF00000000000
-000000007FFF800000000000000000000FFC000000000000005C537DD163>I<000000FF
-FFFFFFFFFC000000000000FFFFFFFFFFFC000000000000FFFFFFFFFFFC000000000000FF
-FFFFFFFFFC000000000000FFFFFFFFFFFC0000000000000000FFFC000000000000000000
-00FFFC00000000000000000000FFFC00000000000000000000FFFC000000000000000000
-00FFFC00000000000000000000FFFC00000000000000000000FFFC000000000000000001
-FFFFFFFE00000000000000FFFFFFFFFFFC00000000000FFFFFFFFFFFFFC0000000007FFF
-FFFFFFFFFFF800000001FFFFE0FFFC1FFFFE0000000FFFFC00FFFC00FFFFC000001FFFE0
-00FFFC001FFFE000007FFF8000FFFC0007FFF80000FFFE0000FFFC0001FFFC0001FFFC00
-00FFFC0000FFFE0003FFF80000FFFC00007FFF0007FFF00000FFFC00003FFF800FFFE000
-00FFFC00001FFFC00FFFE00000FFFC00001FFFC01FFFC00000FFFC00000FFFE01FFFC000
-00FFFC00000FFFE03FFF800000FFFC000007FFF03FFF800000FFFC000007FFF07FFF8000
-00FFFC000007FFF87FFF800000FFFC000007FFF87FFF000000FFFC000003FFF87FFF0000
-00FFFC000003FFF8FFFF000000FFFC000003FFFCFFFF000000FFFC000003FFFCFFFF0000
-00FFFC000003FFFCFFFF000000FFFC000003FFFCFFFF000000FFFC000003FFFCFFFF0000
-00FFFC000003FFFCFFFF000000FFFC000003FFFCFFFF000000FFFC000003FFFCFFFF0000
-00FFFC000003FFFCFFFF000000FFFC000003FFFCFFFF000000FFFC000003FFFC7FFF0000
-00FFFC000003FFF87FFF000000FFFC000003FFF87FFF800000FFFC000007FFF87FFF8000
-00FFFC000007FFF83FFF800000FFFC000007FFF03FFF800000FFFC000007FFF01FFFC000
-00FFFC00000FFFE01FFFC00000FFFC00000FFFE00FFFE00000FFFC00001FFFC00FFFE000
-00FFFC00001FFFC007FFF00000FFFC00003FFF8003FFF80000FFFC00007FFF0001FFFC00
-00FFFC0000FFFE0000FFFE0000FFFC0001FFFC00007FFF8000FFFC0007FFF800001FFFE0
-00FFFC001FFFE000000FFFFC00FFFC00FFFFC0000001FFFFE0FFFC1FFFFE000000007FFF
-FFFFFFFFFFF8000000000FFFFFFFFFFFFFC00000000000FFFFFFFFFFFC00000000000001
-FFFFFFFE000000000000000000FFFC00000000000000000000FFFC000000000000000000
-00FFFC00000000000000000000FFFC00000000000000000000FFFC000000000000000000
-00FFFC00000000000000000000FFFC00000000000000000000FFFC000000000000000000
-00FFFC00000000000000000000FFFC0000000000000000FFFFFFFFFFFC000000000000FF
-FFFFFFFFFC000000000000FFFFFFFFFFFC000000000000FFFFFFFFFFFC000000000000FF
-FFFFFFFFFC0000005E5279D16D>I<00003FFE000000000007FFFFE0000000001FFFFFFC
-000000007FFFFFFF00000001FFC00FFFC0000003FE0003FFE0000007FF0000FFF0000007
-FF80007FF800000FFFC0007FFC00000FFFC0003FFE00000FFFC0003FFE00000FFFC0001F
-FF00000FFFC0001FFF00000FFFC0001FFF00000FFFC0000FFF800007FF80000FFF800003
-FF00000FFF800001FE00000FFF8000000000000FFF8000000000000FFF8000000000000F
-FF8000000000000FFF8000000000000FFF8000000000000FFF800000000007FFFF800000
-0003FFFFFF800000007FFFFFFF80000003FFFFFFFF8000001FFFF00FFF8000007FFF000F
-FF800000FFFC000FFF800003FFF0000FFF800007FFC0000FFF80000FFF80000FFF80001F
-FF00000FFF80003FFF00000FFF80003FFE00000FFF80007FFC00000FFF80007FFC00000F
-FF81F0FFFC00000FFF81F0FFF800000FFF81F0FFF800000FFF81F0FFF800000FFF81F0FF
-F800001FFF81F0FFF800001FFF81F0FFFC00003FFF81F07FFC00003FFF81F07FFE00007F
-FF81F03FFE0000F7FFC3F03FFF0001E3FFC3E01FFFC007E3FFFFE007FFF01F81FFFFC003
-FFFFFF00FFFF8000FFFFFC007FFF00001FFFF0003FFC000001FF800007F0003C387CB642
->224 D<000000000000FC0000000000000FFC000000000000FFFC00000000003FFFFC00
-0000000FFFFFFC00000001FFFFFFFC0000001FFFFFFFF8000000FFFFFFFFF8000003FFFF
-FFFFF000000FFFFFFFFFF000001FFFFFFFFFE000003FFFFFFFFF800000FFFFFFFFFF0000
-00FFFFFFFFF0000001FFFFFFE000000003FFFFC00000000007FFF8000000000007FFE000
-000000000FFF8000000000000FFE0000000000000FFC0000000000001FF8000000000000
-1FF00000000000001FE00000000000003FE00000000000003FC00000000000003F800000
-000000003F800000000000007F0001FFC00000007F003FFFFE0000007F00FFFFFF800000
-7E03FFFFFFE000007E0FFF80FFF800007E3FFC001FFE00007C7FF00007FF00007CFFE000
-03FF8000FDFFC00001FFC000FFFF800000FFE000FFFF0000007FE000FFFF0000007FF000
-FFFF0000007FF800FFFE0000003FF800FFFE0000003FFC00FFFE0000003FFC00FFFE0000
-003FFE00FFFC0000001FFE00FFFC0000001FFE00FFFC0000001FFF00FFFC0000001FFF00
-FFFC0000001FFF00FFFC0000001FFF00FFFC0000001FFF80FFFC0000001FFF80FFFC0000
-001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80
-FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000
-001FFF807FFC0000001FFF007FFC0000001FFF007FFC0000001FFF003FFC0000001FFE00
-3FFE0000003FFE003FFE0000003FFE001FFE0000003FFC001FFE0000003FFC000FFF0000
-007FF8000FFF0000007FF80007FF800000FFF00003FF800000FFE00001FFC00001FFC000
-00FFE00003FF8000007FF00007FF0000003FFC001FFE0000001FFF80FFFC00000007FFFF
-FFF000000001FFFFFFC0000000003FFFFE000000000003FFE000000039547CD242>I<FF
-FFFFFFFE000000FFFFFFFFFFF00000FFFFFFFFFFFC0000FFFFFFFFFFFF000000FFF8001F
-FF800000FFF80007FFE00000FFF80001FFF00000FFF80001FFF00000FFF80000FFF80000
-FFF80000FFF80000FFF800007FFC0000FFF800007FFC0000FFF800007FFC0000FFF80000
-7FFC0000FFF800007FFC0000FFF800007FFC0000FFF80000FFF80000FFF80000FFF80000
-FFF80001FFF00000FFF80003FFE00000FFF80007FFC00000FFF8001FFF000000FFFFFFFF
-FC000000FFFFFFFFF0000000FFFFFFFFE0000000FFFFFFFFFC000000FFF80007FF000000
-FFF80001FFC00000FFF80000FFF00000FFF800007FF80000FFF800003FFC0000FFF80000
-3FFE0000FFF800001FFE0000FFF800001FFF0000FFF800001FFF0000FFF800001FFF8000
-FFF800001FFF8000FFF800001FFF8000FFF800001FFF8000FFF800001FFF8000FFF80000
-1FFF8000FFF800001FFF0000FFF800001FFF0000FFF800003FFF0000FFF800003FFE0000
-FFF800007FFC0000FFF80000FFFC0000FFF80003FFF80000FFF8000FFFF000FFFFFFFFFF
-FFC000FFFFFFFFFFFF0000FFFFFFFFFFFC0000FFFFFFFFFFC0000039357CB442>I<FFFF
-FFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF0000FFF8001FFF0000FFF8
-0003FF0000FFF80001FF0000FFF800007F0000FFF800007F0000FFF800003F0000FFF800
-003F0000FFF800001F8000FFF800001F8000FFF800001F8000FFF800001F8000FFF80000
-0F8000FFF800000F8000FFF800000F8000FFF800000F8000FFF800000F8000FFF800000F
-8000FFF80000000000FFF80000000000FFF80000000000FFF80000000000FFF800000000
-00FFF80000000000FFF80000000000FFF80000000000FFF80000000000FFF80000000000
-FFF80000000000FFF80000000000FFF80000000000FFF80000000000FFF80000000000FF
-F80000000000FFF80000000000FFF80000000000FFF80000000000FFF80000000000FFF8
-0000000000FFF80000000000FFF80000000000FFF80000000000FFF80000000000FFF800
-00000000FFF80000000000FFF800000000FFFFFFFE000000FFFFFFFE000000FFFFFFFE00
-0000FFFFFFFE00000031357CB439>I<0000FFFFFFFFFFFFF80000FFFFFFFFFFFFF80000
-FFFFFFFFFFFFF80000FFFFFFFFFFFFF8000000FC0000FFF800000000F80000FFF8000000
-00F80000FFF800000000F80000FFF800000000F80000FFF800000000F80000FFF8000000
-00F80000FFF800000000F80000FFF800000000F80000FFF800000000F80000FFF8000000
-00F80000FFF800000000F80000FFF800000000F80000FFF800000000F80000FFF8000000
-00F80000FFF800000000F00000FFF800000000F00000FFF800000001F00000FFF8000000
-01F00000FFF800000001F00000FFF800000001F00000FFF800000001F00000FFF8000000
-01E00000FFF800000003E00000FFF800000003E00000FFF800000003E00000FFF8000000
-03C00000FFF800000007C00000FFF800000007C00000FFF800000007C00000FFF8000000
-0F800000FFF80000000F800000FFF80000001F000000FFF80000001F000000FFF8000000
-3F000000FFF80000003E000000FFF80000007C000000FFF80000007C000000FFF8000000
-F8000000FFF8000001F8000000FFF8000003F0000000FFF8000007E0000000FFF800000F
-C0000000FFF800003F80000000FFF800007F00000000FFF8003FFFFFFFFFFFFFFFFC3FFF
-FFFFFFFFFFFFFC3FFFFFFFFFFFFFFFFC3FFFFFFFFFFFFFFFFC3FFF0000000000FFFC3FF8
-00000000001FFC7FE0000000000007FE7FC0000000000003FE7F80000000000001FE7F00
-000000000000FE7F000000000000007E7E000000000000007E7E000000000000007E7C00
-0000000000003E7C000000000000003E7C000000000000003E7C000000000000003EFC00
-0000000000003FF8000000000000001FF8000000000000001FF8000000000000001FF800
-0000000000001FF8000000000000001F484880B449>I<000007FF80000000007FFFF800
-000001FFFFFE00000007FFFFFF8000001FFF03FFE000003FFC007FF000007FF0003FF800
-00FFE0001FFC0001FFC0000FFC0003FF800007FE0007FF800007FF000FFF000003FF000F
-FF000003FF801FFE000003FF801FFE000001FF803FFE000001FFC03FFE000001FFC03FFE
-000001FFC07FFC000001FFC07FFC000001FFE07FFC000000FFE07FFC000000FFE0FFFC00
-0000FFE0FFFC000000FFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFF
-FFFFE0FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC000000
-0000FFFC00000000007FFC00000000007FFC00000000007FFC00000000007FFE00000000
-003FFE00000000003FFE00000000003FFE00000003E01FFF00000003E01FFF00000007E0
-0FFF00000007C007FF8000000FC007FF8000000F8003FFC000001F8001FFE000003F0000
-FFF000007E00007FFC0001FC00001FFF0007F800000FFFE03FF0000003FFFFFFC0000000
-FFFFFF800000003FFFFC0000000001FFE0000033387CB63C>I<1FFFFF0003FFFFFFE000
-7FFFFC001FFFFF0003FFFFFFE0007FFFFC001FFFFF0003FFFFFFE0007FFFFC001FFFFF00
-03FFFFFFE0007FFFFC00007FFC000003FFE000001FFF0000000FF8000003FFE000000FF8
-00000003FC000003FFE000001FE000000001FE000003FFE000003FC000000000FF000003
-FFE000007F80000000007FC00003FFE00001FF00000000001FE00003FFE00003FC000000
-00000FF00003FFE00007F8000000000007FC0003FFE0001FF0000000000001FE0003FFE0
-003FC0000000000000FF0003FFE0007F800000000000007F8003FFE000FF000000000000
-001FE003FFE003FC000000000000000FF003FFE007F80000000000000007F803FFE00FF0
-0000000000000003FE03FFE03FE00000000000000003FF03FFE07FE00000000000000007
-FF83FFE0FFF0000000000000000FFFE3FFE3FFF8000000000000001FFFF3FFE7FFFC0000
-00000000003FFFFBFFEFFFFE000000000000003FFFFFFFFFFFFE000000000000007FFFFF
-FFFFFFFF00000000000000FFFE7FFFFF3FFF80000000000001FFFC3FFFFE1FFFC0000000
-000003FFF80FFFF80FFFE0000000000003FFF007FFF007FFE0000000000007FFF003FFE0
-07FFF000000000000FFFE003FFE003FFF800000000001FFFC003FFE001FFFC0000000000
-3FFF8003FFE000FFFE00000000003FFF0003FFE0007FFE00000000007FFF0003FFE0007F
-FF0000000000FFFE0003FFE0003FFF8000000001FFFC0003FFE0001FFFC000000003FFF8
-0003FFE0000FFFE000000007FFF00003FFE00007FFF000000007FFF00003FFE00007FFF0
-0000000FFFE00003FFE00003FFF80000001FFFC00003FFE00001FFFC0000003FFF800003
-FFE00000FFFE0000007FFF000003FFE000007FFF0000007FFF000003FFE000007FFF0000
-00FFFE000003FFE000003FFF800003FFFF000003FFE000007FFFE000FFFFFFE003FFFFFF
-E003FFFFFF80FFFFFFE003FFFFFFE003FFFFFF80FFFFFFE003FFFFFFE003FFFFFF80FFFF
-FFE003FFFFFFE003FFFFFF8069357EB46E>I<7000FFFE0000007C0FFFFFF000007E3FFF
-FFFE00007FFFFFFFFF80007FFF801FFFE0007FF80003FFF0007FF00000FFF8007FC00000
-7FFC007F8000007FFC007F8000003FFE007F0000003FFE007E0000001FFF007E0000001F
-FF007E0000001FFF007C0000001FFF007C0000001FFF00000000001FFF00000000003FFE
-00000000003FFE00000000007FFC00000000007FF80000000001FFF00000000003FFC000
-0000000FFF80000001FFFFFC00000003FFFFF000000003FFFFF000000003FFFFFE000000
-00001FFFC00000000003FFE00000000000FFF800000000007FFC00000000003FFE000000
-00001FFF00000000001FFF00000000000FFF80000000000FFF80000000000FFFC0000000
-000FFFC0000000000FFFC0000000000FFFC0F80000000FFFC0F80000000FFFC0F8000000
-0FFFC0FC0000000FFF807C0000001FFF807E0000001FFF007E0000003FFF003F0000007F
-FE001F800000FFFC001FE00003FFF8000FFE001FFFF00003FFFFFFFFC00000FFFFFFFF00
-00003FFFFFF800000003FFFF00000032387DB63A>I<FFFFFFF807FFFFFFC0FFFFFFF807
-FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC000FFF8000007FFC00000FFF80000
-07FFC00000FFF800000FFFC00000FFF800001FFFC00000FFF800001FFFC00000FFF80000
-3FFFC00000FFF800007FFFC00000FFF800007FFFC00000FFF80000FFFFC00000FFF80001
-F7FFC00000FFF80001F7FFC00000FFF80003E7FFC00000FFF80007C7FFC00000FFF80007
-C7FFC00000FFF8000F87FFC00000FFF8001F07FFC00000FFF8003F07FFC00000FFF8003E
-07FFC00000FFF8007C07FFC00000FFF800FC07FFC00000FFF800F807FFC00000FFF801F0
-07FFC00000FFF803F007FFC00000FFF803E007FFC00000FFF807C007FFC00000FFF80FC0
-07FFC00000FFF80F8007FFC00000FFF81F0007FFC00000FFF83F0007FFC00000FFF83E00
-07FFC00000FFF87C0007FFC00000FFF8F80007FFC00000FFF8F80007FFC00000FFF9F000
-07FFC00000FFFBE00007FFC00000FFFBE00007FFC00000FFFFC00007FFC00000FFFF8000
-07FFC00000FFFF800007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE0000
-07FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF8000007FFC000FFFFFFF807
-FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042357DB449
->I<00003E00001F0000000000FF80007FC000000001FFC000FFE000000003FFE001FFF0
-00000003FFE001FFF000000007FFF003FFF800000007FFF003FFF800000007FFF003FFF8
-00000007FFF003FFF800000007FFF003FFF800000007FFE001FFF800000003FFE001FFF0
-00000003FFC000FFF000000001FF80007FE000000001FF80007FE000000000FFFFFFFFC0
-000000003FFFFFFF00000000001FFFFFFE000000000007FFFFF8000000000001FFFFE000
-00000000001FFE0000000000000000000000000000000000000000000000000000000000
-0000000000000000000000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFF
-FFC0FFFFFFF807FFFFFFC000FFF8000007FFC00000FFF8000007FFC00000FFF800000FFF
-C00000FFF800001FFFC00000FFF800001FFFC00000FFF800003FFFC00000FFF800007FFF
-C00000FFF800007FFFC00000FFF80000FFFFC00000FFF80001F7FFC00000FFF80001F7FF
-C00000FFF80003E7FFC00000FFF80007C7FFC00000FFF80007C7FFC00000FFF8000F87FF
-C00000FFF8001F07FFC00000FFF8003F07FFC00000FFF8003E07FFC00000FFF8007C07FF
-C00000FFF800FC07FFC00000FFF800F807FFC00000FFF801F007FFC00000FFF803F007FF
-C00000FFF803E007FFC00000FFF807C007FFC00000FFF80FC007FFC00000FFF80F8007FF
-C00000FFF81F0007FFC00000FFF83F0007FFC00000FFF83E0007FFC00000FFF87C0007FF
-C00000FFF8F80007FFC00000FFF8F80007FFC00000FFF9F00007FFC00000FFFBE00007FF
-C00000FFFBE00007FFC00000FFFFC00007FFC00000FFFF800007FFC00000FFFF800007FF
-C00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FF
-C00000FFF8000007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFF
-FFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0424E7DCD49>I<FFFFFFF8001FFFFF00
-FFFFFFF8001FFFFF00FFFFFFF8001FFFFF00FFFFFFF8001FFFFF0000FFF8000007FFC000
-00FFF8000003FE000000FFF8000007F8000000FFF800000FF0000000FFF800001FE00000
-00FFF800007FC0000000FFF80000FF00000000FFF80001FE00000000FFF80007FC000000
-00FFF8000FF000000000FFF8001FE000000000FFF8007FC000000000FFF800FF00000000
-00FFF801FE0000000000FFF803FC0000000000FFF80FF80000000000FFF81FF800000000
-00FFF83FFC0000000000FFF8FFFE0000000000FFF9FFFF0000000000FFFBFFFF80000000
-00FFFFFFFF8000000000FFFFFFFFC000000000FFFFCFFFE000000000FFFF87FFF0000000
-00FFFE03FFF800000000FFFC01FFF800000000FFF801FFFC00000000FFF800FFFE000000
-00FFF8007FFF00000000FFF8003FFF80000000FFF8001FFF80000000FFF8001FFFC00000
-00FFF8000FFFE0000000FFF80007FFF0000000FFF80003FFF8000000FFF80001FFFC0000
-00FFF80001FFFC000000FFF80000FFFE000000FFF800007FFF000000FFF800003FFF8000
-00FFF800001FFFC00000FFF800001FFFC00000FFF800000FFFE00000FFF800001FFFF800
-FFFFFFF800FFFFFFE0FFFFFFF800FFFFFFE0FFFFFFF800FFFFFFE0FFFFFFF800FFFFFFE0
-43357DB449>I<0003FFFFFFFFFFFFE00003FFFFFFFFFFFFE00003FFFFFFFFFFFFE00003
-FFFFFFFFFFFFE0000003F00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000003E00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000003E00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000003E00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000003E00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000003E00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000003E00003FFE000000003E00003FFE000000003E00003FFE0000000
-03E00003FFE000000007E00003FFE000000007C00003FFE000000007C00003FFE0000000
-07C00003FFE000000007C00003FFE0000F8007C00003FFE0001FC007C00003FFE0003FE0
-0FC00003FFE0007FF00FC00003FFE000FFF80F800003FFE000FFF80F800003FFE000FFF8
-1F800003FFE000FFF81F800003FFE000FFF81F000003FFE000FFF83F000003FFE000FFF0
-7E000003FFE0007FE0FE000003FFE0007FFFFC0003FFFFFFE03FFFF80003FFFFFFE01FFF
-F00003FFFFFFE00FFFE00003FFFFFFE003FF800000000000000030000000000000004337
-7EB449>I<FFFFFC000000007FFFFEFFFFFE00000000FFFFFEFFFFFF00000000FFFFFEFF
-FFFF00000001FFFFFE00FFFF00000001FFFE0000FFFF80000001FFFE0000FFFF80000003
-DFFE0000FBFFC0000003DFFE0000FBFFC00000079FFE0000F9FFE00000079FFE0000F9FF
-E000000F1FFE0000F8FFF000000F1FFE0000F8FFF000000F1FFE0000F8FFF000001E1FFE
-0000F87FF800001E1FFE0000F87FF800003C1FFE0000F83FFC00003C1FFE0000F83FFC00
-00781FFE0000F81FFE0000781FFE0000F81FFE0000F01FFE0000F81FFE0000F01FFE0000
-F80FFF0000F01FFE0000F80FFF0001E01FFE0000F807FF8001E01FFE0000F807FF8003C0
-1FFE0000F803FFC003C01FFE0000F803FFC007801FFE0000F801FFE007801FFE0000F801
-FFE00F001FFE0000F801FFE00F001FFE0000F800FFF00F001FFE0000F800FFF01E001FFE
-0000F8007FF81E001FFE0000F8007FF83C001FFE0000F8003FFC3C001FFE0000F8003FFC
-78001FFE0000F8001FFE78001FFE0000F8001FFE78001FFE0000F8001FFEF0001FFE0000
-F8000FFFF0001FFE0000F8000FFFE0001FFE0000F80007FFE0001FFE0000F80007FFC000
-1FFE0000F80003FFC0001FFE0000F80003FF80001FFE0000F80003FF80001FFE0000F800
-01FF80001FFE0000F80001FF00001FFE0007FF0000FF00001FFE00FFFFF800FE001FFFFF
-FEFFFFF8007E001FFFFFFEFFFFF8007C001FFFFFFEFFFFF8003C001FFFFFFE4F357CB458
->I<FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFF
-FFC000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFFFFFFFFFFFC00000FFFFFFFFFFFF
-C00000FFFFFFFFFFFFC00000FFFFFFFFFFFFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FF
-C00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFF
-FFC0FFFFFFF807FFFFFFC042357DB449>I<000001FFC000000000003FFFFE0000000000
-FFFFFF8000000003FFFFFFE00000000FFF80FFF80000003FFC001FFE0000007FF00007FF
-000000FFE00003FF800001FFC00001FFC00003FF800000FFE00003FF0000007FE00007FF
-0000007FF0000FFF0000007FF8000FFE0000003FF8001FFE0000003FFC001FFE0000003F
-FC003FFE0000003FFE003FFC0000001FFE003FFC0000001FFE007FFC0000001FFF007FFC
-0000001FFF007FFC0000001FFF007FFC0000001FFF00FFFC0000001FFF80FFFC0000001F
-FF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC
-0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001FFF80FFFC0000001F
-FF80FFFC0000001FFF807FFC0000001FFF007FFC0000001FFF007FFC0000001FFF003FFC
-0000001FFE003FFE0000003FFE003FFE0000003FFE001FFE0000003FFC001FFE0000003F
-FC000FFF0000007FF8000FFF0000007FF80007FF800000FFF00003FF800000FFE00001FF
-C00001FFC00000FFE00003FF8000007FF00007FF0000003FFC001FFE0000001FFF80FFFC
-00000007FFFFFFF000000001FFFFFFC0000000003FFFFE000000000003FFE00000003938
-7CB642>I<FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFF
-FFFFFFFFC000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF8
-07FFFFFFC0FFFFFFF807FFFFFFC042357DB449>I<003FF8007FF0000000FFFFF807FFFF
-000000FFFFF81FFFFFC00000FFFFF87FFFFFF00000FFFFF9FF00FFFC0000FFFFFFF8003F
-FF000003FFFFE0000FFF800000FFFF800007FFC00000FFFF000003FFE00000FFFE000003
-FFF00000FFFC000001FFF00000FFF8000000FFF80000FFF8000000FFFC0000FFF8000000
-7FFC0000FFF80000007FFE0000FFF80000007FFE0000FFF80000003FFE0000FFF8000000
-3FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF8000000
-1FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF8000000
-1FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF8000000
-1FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF80000001FFF8000FFF8000000
-1FFF8000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF8000000
-3FFF0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF8000000
-FFFC0000FFF8000000FFF80000FFFC000001FFF80000FFFC000001FFF00000FFFE000003
-FFE00000FFFF000007FFC00000FFFF80000FFF800000FFFFE0001FFF000000FFFFF0007F
-FE000000FFF9FE01FFF8000000FFF8FFFFFFF0000000FFF83FFFFFC0000000FFF807FFFE
-00000000FFF800FFE000000000FFF800000000000000FFF800000000000000FFF8000000
-00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
-00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
-00000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000000
-00000000FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF80000
-000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7DB549>
-I<000003FFE0000000003FFFFE00000000FFFFFF80000003FFFFFFE000000FFF003FF800
-003FFC0007FC00007FF8000FFE0000FFF0001FFE0001FFE0003FFF0003FFC0003FFF0007
-FF80003FFF0007FF80003FFF000FFF00003FFF001FFF00003FFF001FFE00003FFF003FFE
-00001FFE003FFE00000FFC003FFE000007F8007FFE00000000007FFC00000000007FFC00
-000000007FFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000
-000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC0000000000FFFC000000
-0000FFFC0000000000FFFC0000000000FFFC0000000000FFFC00000000007FFC00000000
-007FFE00000000007FFE00000000007FFE00000000003FFE00000000003FFF0000000000
-1FFF0000000F801FFF0000000F800FFF8000001F800FFF8000001F0007FFC000003F0003
-FFE000003E0001FFF000007E0000FFF80000FC00007FFC0001F800003FFF0007F000000F
-FFC01FE0000007FFFFFF80000001FFFFFE000000003FFFF80000000003FF80000031387C
-B63A>I<7FFFFFFFFFFFFC7FFFFFFFFFFFFC7FFFFFFFFFFFFC7FFFFFFFFFFFFC7FF807FF
-C03FFC7FC007FFC007FC7F8007FFC003FC7F0007FFC001FC7E0007FFC000FC7E0007FFC0
-00FC7C0007FFC0007CFC0007FFC0007EFC0007FFC0007EFC0007FFC0007EF80007FFC000
-3EF80007FFC0003EF80007FFC0003EF80007FFC0003EF80007FFC0003EF80007FFC0003E
-F80007FFC0003E000007FFC00000000007FFC00000000007FFC00000000007FFC0000000
-0007FFC00000000007FFC00000000007FFC00000000007FFC00000000007FFC000000000
-07FFC00000000007FFC00000000007FFC00000000007FFC00000000007FFC00000000007
-FFC00000000007FFC00000000007FFC00000000007FFC00000000007FFC00000000007FF
-C00000000007FFC00000000007FFC00000000007FFC00000000007FFC00000000007FFC0
-0000000007FFC00000000007FFC00000000007FFC00000007FFFFFFFFC00007FFFFFFFFC
-00007FFFFFFFFC00007FFFFFFFFC0037357DB43E>I<FFFFFFE0001FFFFCFFFFFFE0001F
-FFFCFFFFFFE0001FFFFCFFFFFFE0001FFFFC01FFF8000001FF8001FFF8000000FE0000FF
-F80000007C0000FFFC000000FC00007FFC000000F800007FFE000001F800003FFE000001
-F000003FFF000001F000003FFF000003F000001FFF800003E000001FFF800007E000000F
-FF800007C000000FFFC0000FC0000007FFC0000F80000007FFE0001F80000003FFE0001F
-00000003FFF0001F00000003FFF0003F00000001FFF8003E00000001FFF8007E00000000
-FFF8007C00000000FFFC00FC000000007FFC00F8000000007FFE00F8000000007FFE01F8
-000000003FFF01F0000000003FFF03F0000000001FFF03E0000000001FFF87E000000000
-0FFF87C0000000000FFFCFC00000000007FFCF800000000007FFEF800000000007FFFF80
-0000000003FFFF000000000003FFFF000000000001FFFE000000000001FFFE0000000000
-00FFFC000000000000FFFC0000000000007FF80000000000007FF80000000000007FF800
-00000000003FF00000000000003FF00000000000001FE00000000000001FE00000000000
-000FC00000000000000FC00000000000000FC00000000000000F800000000000001F8000
-00000000001F000000000000003F000000000000003E000000000000007E000000001FC0
-007C000000003FE0007C000000007FF000FC00000000FFF800F800000000FFF801F80000
-0000FFF801F000000000FFF803E000000000FFF807E000000000FFF80FC0000000007FF0
-1F80000000007FE03F00000000007FC07F00000000003F81FC00000000001FFFF8000000
-00000FFFF0000000000003FFC0000000000000FE0000000000003E4D7DB445>I<000000
-00003FF8000000000000000000FFFFF8000000000000000000FFFFF80000000000000000
-00FFFFF8000000000000000000FFFFF8000000000000000000FFFFF80000000000000000
-0003FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF80000000000000003FF80FFF80FFE00000000003F
-FFF0FFF87FFFE000000000FFFFFCFFF9FFFFF800000003FFFFFEFFFBFFFFFE0000000FFF
-C03FFFFFE01FFF8000003FFF000FFFFF8007FFE000007FFC0007FFFF0001FFF00000FFF8
-0003FFFE0000FFF80001FFF00001FFFC00007FFC0003FFE00000FFF800003FFE0007FFC0
-0000FFF800001FFF000FFFC00000FFF800001FFF800FFF800000FFF800000FFF801FFF80
-0000FFF800000FFFC01FFF000000FFF8000007FFC03FFF000000FFF8000007FFE03FFF00
-0000FFF8000007FFE07FFE000000FFF8000003FFF07FFE000000FFF8000003FFF07FFE00
-0000FFF8000003FFF07FFE000000FFF8000003FFF0FFFC000000FFF8000001FFF8FFFC00
-0000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC00
-0000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC00
-0000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC00
-0000FFF8000001FFF8FFFC000000FFF8000001FFF8FFFC000000FFF8000001FFF87FFE00
-0000FFF8000003FFF07FFE000000FFF8000003FFF07FFE000000FFF8000003FFF07FFE00
-0000FFF8000003FFF03FFF000000FFF8000007FFE03FFF000000FFF8000007FFE01FFF00
-0000FFF8000007FFC01FFF800000FFF800000FFFC00FFF800000FFF800000FFF800FFFC0
-0000FFF800001FFF8007FFC00000FFF800001FFF0003FFE00001FFFC00003FFE0001FFF0
-0001FFFC00007FFC0000FFF80003FFFE0000FFF800007FFC0007FFFF0001FFF000003FFF
-000FFFFF8007FFE000000FFFC07FFFFFF01FFF80000003FFFFFEFFFBFFFFFE00000000FF
-FFF8FFF8FFFFF8000000003FFFF0FFF87FFFE00000000001FF80FFF80FFC000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF800000000000000000000FFF80000000000000000
-0000FFF800000000000000000000FFF8000000000000000000FFFFFFF800000000000000
-00FFFFFFF80000000000000000FFFFFFF80000000000000000FFFFFFF800000000000000
-00FFFFFFF8000000005D6A7CD266>I<FFFFFFF001FFFFFCFFFFFFF001FFFFFCFFFFFFF0
-01FFFFFCFFFFFFF001FFFFFC00FFFE00001FFE00007FFE00000FF000003FFF00000FE000
-001FFF80001FC000001FFF80001F8000000FFFC0003F00000007FFE0007E00000003FFF0
-00FE00000001FFF801FC00000001FFF803F800000000FFFC03F0000000007FFE07E00000
-00003FFF0FC0000000003FFF1FC0000000001FFFBF80000000000FFFFF000000000007FF
-FE000000000007FFFC000000000003FFF8000000000001FFF8000000000000FFFC000000
-0000007FFE0000000000007FFE0000000000003FFF0000000000003FFF8000000000007F
-FFC00000000000FFFFC00000000000FFFFE00000000001FBFFF00000000003F1FFF80000
-000007F0FFFC000000000FE0FFFC000000001FC07FFE000000001F803FFF000000003F00
-1FFF800000007E001FFF80000000FE000FFFC0000001FC0007FFE0000003F80003FFF000
-0003F00003FFF8000007E00001FFF800000FC00000FFFC00001FC000007FFE00003FC000
-003FFF0001FFE000003FFF00FFFFFE0007FFFFFFFFFFFE0007FFFFFFFFFFFE0007FFFFFF
-FFFFFE0007FFFFFF40357EB445>I<FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFF
-F807FFFFFFC0FFFFFFF807FFFFFFC000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
-000007FFC00000FFF8000007FFC00000FFF8000007FFC000FFFFFFFFFFFFFFFFE0FFFFFF
-FFFFFFFFFFE0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE000000000000007FFE0000000
-00000000FFE0000000000000003FF0000000000000001FF0000000000000000FF0000000
-0000000007F00000000000000003F00000000000000003F00000000000000003F0000000
-0000000001F00000000000000001F00000000000000001F00000000000000001F0000000
-0000000001F80000000000000000F80000000000000000F80000000000000000F8000000
-0000000000F80000000000000000F845487DB449>I<FFFFFFF807FFFFFFC0FFFFFFF807
-FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC000FFF8000007FFC00000FFF80000
-07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000
-07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000
-07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000
-07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000007FF80000
-07FFC000007FFC000007FFC000003FFC00003FFFC000003FFE0000FFFFC000001FFF000F
-FFFFC0000007FFFFFFF7FFC0000001FFFFFF87FFC00000007FFFFC07FFC000000007FFC0
-07FFC000000000000007FFC000000000000007FFC000000000000007FFC0000000000000
-07FFC000000000000007FFC000000000000007FFC000000000000007FFC0000000000000
-07FFC000000000000007FFC000000000000007FFC000000000000007FFC0000000000000
-07FFC000000000000007FFC000000000000007FFC000000000000007FFC0000000000000
-07FFC000000000000007FFC000000000000007FFC000000000000007FFC0000000000007
-FFFFFFC00000000007FFFFFFC00000000007FFFFFFC00000000007FFFFFFC042357DB449
->I<FFFFFFF81FFFFFFF03FFFFFFE0FFFFFFF81FFFFFFF03FFFFFFE0FFFFFFF81FFFFFFF
-03FFFFFFE0FFFFFFF81FFFFFFF03FFFFFFE000FFF800001FFF000003FFE00000FFF80000
-1FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FF
-F800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE0
-0000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF0000
-03FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001F
-FF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF8
-00001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE000
-00FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003
-FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF
-000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800
-001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000
-FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FF
-E00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF00
-0003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF80000
-1FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FF
-F800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE0
-0000FFF800001FFF000003FFE00000FFF800001FFF000003FFE000FFFFFFFFFFFFFFFFFF
-FFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFFFFFFFE0FFFFFFFFFFFF
-FFFFFFFFFFFFE063357CB46C>I<FFFFFFF81FFFFFFF03FFFFFFE0FFFFFFF81FFFFFFF03
-FFFFFFE0FFFFFFF81FFFFFFF03FFFFFFE0FFFFFFF81FFFFFFF03FFFFFFE000FFF800001F
-FF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF8
-00001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE000
-00FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003
-FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF
-000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800
-001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000
-FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FF
-E00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF00
-0003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF80000
-1FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FF
-F800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE0
-0000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF0000
-03FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001F
-FF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF8
-00001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003FFE000
-00FFF800001FFF000003FFE00000FFF800001FFF000003FFE00000FFF800001FFF000003
-FFE000FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFF
-FFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000003FFF000000000
-000000000000007FF000000000000000000000001FF800000000000000000000000FF800
-0000000000000000000007F8000000000000000000000003F80000000000000000000000
-01F8000000000000000000000001F8000000000000000000000001F80000000000000000
-00000000F8000000000000000000000000F8000000000000000000000000F80000000000
-00000000000000F8000000000000000000000000FC0000000000000000000000007C0000
-000000000000000000007C0000000000000000000000007C000000000000000000000000
-7C0000000000000000000000007C66487CB46C>I<FFFFFFF80000007FFFFFFCFFFFFFF8
-0000007FFFFFFCFFFFFFF80000007FFFFFFCFFFFFFF80000007FFFFFFC00FFF800000000
-007FFC0000FFF800000000007FFC0000FFF800000000007FFC0000FFF800000000007FFC
-0000FFF800000000007FFC0000FFF800000000007FFC0000FFF800000000007FFC0000FF
-F800000000007FFC0000FFF800000000007FFC0000FFF800000000007FFC0000FFF80000
-0000007FFC0000FFF800000000007FFC0000FFF800000000007FFC0000FFF80000000000
-7FFC0000FFF800000000007FFC0000FFF800000000007FFC0000FFF800000000007FFC00
-00FFF800000000007FFC0000FFFFFFF80000007FFC0000FFFFFFFFF000007FFC0000FFFF
-FFFFFE00007FFC0000FFFFFFFFFF80007FFC0000FFF8001FFFE0007FFC0000FFF80007FF
-F0007FFC0000FFF80001FFF8007FFC0000FFF80000FFFC007FFC0000FFF800007FFE007F
-FC0000FFF800007FFE007FFC0000FFF800003FFF007FFC0000FFF800003FFF007FFC0000
-FFF800001FFF807FFC0000FFF800001FFF807FFC0000FFF800001FFF807FFC0000FFF800
-001FFF807FFC0000FFF800001FFF807FFC0000FFF800001FFF807FFC0000FFF800001FFF
-807FFC0000FFF800003FFF007FFC0000FFF800003FFF007FFC0000FFF800007FFE007FFC
-0000FFF800007FFE007FFC0000FFF80000FFFC007FFC0000FFF80001FFF8007FFC0000FF
-F80007FFF0007FFC0000FFF8001FFFE0007FFC00FFFFFFFFFFFFC07FFFFFFCFFFFFFFFFF
-FF007FFFFFFCFFFFFFFFFFF8007FFFFFFCFFFFFFFFFF80007FFFFFFC56357CB45F>251
-D<FFFFFFF800000000FFFFFFF800000000FFFFFFF800000000FFFFFFF80000000000FFF8
-000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000
-0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8
-000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000
-0000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFFF
-FFF800000000FFFFFFFFF0000000FFFFFFFFFE000000FFFFFFFFFF800000FFF8001FFFE0
-0000FFF80007FFF00000FFF80001FFF80000FFF80000FFFC0000FFF800007FFE0000FFF8
-00007FFE0000FFF800003FFF0000FFF800003FFF0000FFF800001FFF8000FFF800001FFF
-8000FFF800001FFF8000FFF800001FFF8000FFF800001FFF8000FFF800001FFF8000FFF8
-00001FFF8000FFF800003FFF0000FFF800003FFF0000FFF800007FFE0000FFF800007FFE
-0000FFF80000FFFC0000FFF80001FFF80000FFF80007FFF00000FFF8001FFFE000FFFFFF
-FFFFFFC000FFFFFFFFFFFF0000FFFFFFFFFFF80000FFFFFFFFFF80000039357CB442>I<
-000001FFFFFFFFFE00007FFFFFFFFFFE0003FFFFFFFFFFFE000FFFFFFFFFFFFE003FFFC0
-003FFE00007FFE00003FFE0000FFF800003FFE0001FFF000003FFE0003FFF000003FFE00
-03FFE000003FFE0007FFE000003FFE0007FFE000003FFE0007FFE000003FFE0007FFE000
-003FFE0007FFE000003FFE0007FFE000003FFE0003FFE000003FFE0003FFF000003FFE00
-01FFF000003FFE0001FFF800003FFE0000FFF800003FFE00007FFE00003FFE00001FFFC0
-003FFE000007FFFFFFFFFE000001FFFFFFFFFE0000001FFFFFFFFE00000001FFFFFFFE00
-000001FFFC3FFE00000003FFF83FFE00000007FFF83FFE0000000FFFF03FFE0000000FFF
-E03FFE0000001FFFC03FFE0000003FFFC03FFE0000007FFF803FFE0000007FFF003FFE00
-0000FFFF003FFE000001FFFE003FFE000003FFFC003FFE000003FFF8003FFE000007FFF8
-003FFE00000FFFF0003FFE00001FFFE0003FFE00001FFFE0003FFE00003FFFC0003FFE00
-007FFF80003FFE0000FFFF00003FFE0001FFFF00003FFE0007FFFF00003FFE00FFFFFFF8
-3FFFFFFEFFFFFFF83FFFFFFEFFFFFFF83FFFFFFEFFFFFFF83FFFFFFE3F357EB445>255
-D E
-%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fi larm1000 10 82
-/Fi 82 256 df<01800060038000E0070001C00E0003801C0007001800060038000E0030
-000C0070001C006000180060001800E0003800C0003000C0003000C0003000C0003000CE
-003380FF803FE0FFC03FF0FFC03FF0FFC03FF07FC01FF07FC01FF03F800FE00E0003801C
-1981B91C>16 D<1C0007007F001FC0FF803FE0FF803FE0FFC03FF0FFC03FF0FFC03FF07F
-C01FF01CC0073000C0003000C0003000C0003000C0003001C00070018000600180006003
-8000E0030000C0070001C0060001800E0003801C00070038000E0070001C00600018001C
-1980B91C>I<FFFFFFFFFF80FFFFFFFFFF80290280962A>21 D<0000600000E00001C000
-0380000700000E00001E00003C0000780000780000F00001E00001E00003C00003C00007
-C0000780000F80000F00000F00001F00001E00001E00003E00003E00003E00007C00007C
-00007C00007C00007C00007C0000F80000F80000F80000F80000F80000F80000F80000F8
-0000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800007C00007C
-00007C00007C00007C00007C00003E00003E00003E00001E00001E00001F00000F00000F
-00000F800007800007C00003C00003C00001E00001E00000F000007800007800003C0000
-1E00000E000007000003800001C00000E0000060135278BD20>40
-D<C00000E000007000003800001C00000E00000F000007800003C00003C00001E00000F0
-0000F000007800007800007C00003C00003E00001E00001E00001F00000F00000F00000F
-80000F80000F800007C00007C00007C00007C00007C00007C00003E00003E00003E00003
-E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
-E00003E00003E00007C00007C00007C00007C00007C00007C0000F80000F80000F80000F
-00000F00001F00001E00001E00003E00003C00007C0000780000780000F00000F00001E0
-0003C00003C0000780000F00000E00001C0000380000700000E00000C0000013527CBD20
->I<1C007F00FF80FF80FFC0FFC0FFC07FC01CC000C000C000C000C001C0018001800380
-0300070006000E001C003800700060000A19798817>44 D<FFFFFCFFFFFCFFFFFCFFFFFC
-FFFFFC16057F941C>I<1C007F00FF80FF80FF80FF80FF807F001C000909798817>I<0001
-C0000003C0000007C000001FC00000FFC000FFFFC000FFFFC000FF1FC000001FC000001F
-C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
-C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
-C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
-C000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001F
-C000001FC000001FC000001FC000001FC000001FC000003FE0007FFFFFF07FFFFFF07FFF
-FFF01C3779B62A>49 D<000FF00000007FFE000001FFFF800003E03FE0000F000FF0001E
-0007F8001C0003FC00380001FE00700001FE00700000FF00600000FF00FE0000FF00FF00
-007F80FF80007F80FF80007F80FF80007F80FF80007F80FF80007F807F00007F801C0000
-7F800000007F80000000FF00000000FF00000000FE00000001FE00000001FC00000003FC
-00000003F800000007F00000000FE00000000FC00000001F800000003F000000007E0000
-0000FC00000001F800000001E000000003C000000007800000000F000000001E00018000
-3C000180007800018000F000038001E000030003C0000300078000030007000007000FFF
-FFFF001FFFFFFF003FFFFFFF007FFFFFFE00FFFFFFFE00FFFFFFFE00FFFFFFFE0021377C
-B62A>I<0007F80000003FFF000000FFFFC00001F80FF00003C007F800078003FC000E00
-01FE000F8001FE001FE000FF001FF000FF001FF000FF001FF000FF001FF000FF001FF000
-FF000FE000FF0007C000FF00000001FE00000001FE00000001FC00000003FC00000003F8
-00000007F000000007E00000000F800000007F0000001FFC0000001FFF800000000FE000
-000007F000000001FC00000001FE00000000FF000000007F800000007F800000007FC000
-00007FC00000003FC00000003FE00000003FE01E00003FE07F80003FE07F80003FE0FFC0
-003FE0FFC0003FE0FFC0003FE0FFC0003FC0FFC0007FC0FF80007F807E00007F80700000
-FF00380001FE001E0001FE000F8003F80007F00FF00001FFFFC000007FFF0000000FF800
-0023397DB62A>I<000000380000000038000000007800000000F800000000F800000001
-F800000003F800000007F800000007F80000000FF80000001FF80000001BF800000033F8
-00000073F800000063F8000000C3F8000001C3F800000183F800000303F800000703F800
-000603F800000C03F800001C03F800001803F800003003F800007003F800006003F80000
-C003F80001C003F800038003F800030003F800070003F8000E0003F8000C0003F8001800
-03F800380003F800300003F800600003F800E00003F800FFFFFFFFF8FFFFFFFFF8FFFFFF
-FFF8000003F800000003F800000003F800000003F800000003F800000003F800000003F8
-00000003F800000003F800000003F800000007FC000003FFFFF80003FFFFF80003FFFFF8
-25387EB72A>I<0600000C000780003C0007F003F80007FFFFF80007FFFFF00007FFFFE0
-0007FFFF800007FFFF000007FFFC0000067FE00000060000000006000000000600000000
-060000000006000000000600000000060000000006000000000600000000060000000006
-07F80000061FFE000006780F800006E007E00007C003F000078001F800070001F8000600
-00FC00060000FE00000000FE00000000FF000000007F000000007F000000007F80000000
-7F800000007F800000007F801C00007F807F00007F80FF00007F80FF80007F80FF80007F
-80FF80007F80FF00007F00FF0000FF00FC0000FF00600000FE00700000FE00700001FC00
-380001F8001C0003F8001E0007F0000F800FE00007E03F800001FFFF0000007FFC000000
-1FE0000021397CB62A>I<00003FC0000001FFF0000007FFFC00000FE03E00003F800700
-007E001F0000FC003F8001F8007F8003F0007F8007F0007F8007E0007F800FE0003F000F
-C0001E001FC00000001F800000003F800000003F800000003F800000007F800000007F00
-0000007F01FC00007F07FF8000FF1E07E000FF3801F000FF7000F800FF6000FC00FFE000
-7E00FFC0003F00FFC0003F80FF80003F80FF80001FC0FF80001FC0FF80001FC0FF00001F
-E0FF00001FE0FF00001FE0FF00001FE0FF00001FE07F00001FE07F00001FE07F00001FE0
-7F00001FE07F80001FE03F80001FE03F80001FC03F80001FC01F80003F801FC0003F800F
-C0003F000FE0007F0007E000FE0003F000FC0001F801F80000FE07F000007FFFC000001F
-FF00000003FC000023397DB62A>I<0003F80000001FFF0000007FFFC00001FC07E00003
-F803F00007E001F8000FE000FC001FC0007E001F80007E003F80003F003F80003F007F00
-003F807F00003F80FF00003F80FF00001FC0FF00001FC0FF00001FC0FF00001FC0FF0000
-1FC0FF00001FE0FF00001FE0FF00001FE0FF00001FE0FF00001FE07F00003FE07F00003F
-E07F00003FE03F80003FE03F80007FE01F80007FE00FC000FFE007E000DFE003E001DFE0
-01F0039FE000FC0F1FE0003FFC1FC00007F01FC00000001FC00000001FC00000003FC000
-00003F800000003F800000003F000000007F000F00007F001F80007E003FC000FC003FC0
-00FC003FC001F8003FC003F0003F8007E0001F000FE0001C001F80000F807F000007FFFE
-000001FFF80000003FC0000023397DB62A>57 D<1C007F00FF80FF80FF80FF80FF807F00
-1C0000000000000000000000000000000000000000000000000000000000000000000000
-00001C007F00FF80FF80FF80FF80FF807F001C00092479A317>I<FFFFFFFFC00000FFFF
-FFFFF80000FFFFFFFFFE000001FF8001FF800000FF00003FE00000FF00000FF00000FF00
-0003F80000FF000001FC0000FF000000FE0000FF0000007F0000FF0000007F0000FF0000
-003F8000FF0000003FC000FF0000001FC000FF0000001FE000FF0000000FE000FF000000
-0FF000FF0000000FF000FF0000000FF000FF00000007F800FF00000007F800FF00000007
-F800FF00000007F800FF00000007FC00FF00000007FC00FF00000007FC00FF00000007FC
-00FF00000007FC00FF00000007FC00FF00000007FC00FF00000007FC00FF00000007FC00
-FF00000007FC00FF00000007FC00FF00000007FC00FF00000007F800FF00000007F800FF
-00000007F800FF00000007F800FF0000000FF000FF0000000FF000FF0000000FE000FF00
-00000FE000FF0000001FE000FF0000001FC000FF0000003F8000FF0000003F8000FF0000
-007F0000FF000000FE0000FF000001FC0000FF000003F80000FF00000FF00000FF00003F
-E00001FF8000FF8000FFFFFFFFFF0000FFFFFFFFF80000FFFFFFFFC0000036397DB83F>
-68 D<FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE0001FF800007FE0000FF000000
-FE0000FF0000003F0000FF0000001F0000FF0000000F0000FF000000070000FF00000007
-0000FF000000070000FF000000030000FF000000030000FF000000030000FF0000000380
-00FF000000018000FF0000C0018000FF0000C0018000FF0000C0018000FF0000C0000000
-FF0000C0000000FF0000C0000000FF0001C0000000FF0001C0000000FF0003C0000000FF
-000FC0000000FFFFFFC0000000FFFFFFC0000000FFFFFFC0000000FF000FC0000000FF00
-03C0000000FF0001C0000000FF0001C0000000FF0000C0000000FF0000C0000000FF0000
-C0006000FF0000C0006000FF0000C0006000FF0000C000E000FF00000000C000FF000000
-00C000FF00000000C000FF00000000C000FF00000001C000FF00000001C000FF00000001
-C000FF000000038000FF000000038000FF000000078000FF000000078000FF0000000F80
-00FF0000003F8000FF0000007F8001FF800007FF00FFFFFFFFFFFF00FFFFFFFFFFFF00FF
-FFFFFFFFFF0033397EB838>I<000000FF8000C000000FFFF001C000003FFFFC01C00000
-FF803F03C00003FC000787C0000FF00003CFC0001FE00000EFC0003FC000007FC0007F80
-00003FC000FF0000001FC001FE0000001FC003FC0000000FC007F800000007C007F80000
-0007C00FF000000003C00FF000000003C01FE000000003C01FE000000001C03FE0000000
-01C03FC000000001C07FC000000000C07FC000000000C07FC000000000C07FC000000000
-C0FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000
-FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF
-800000000000FF800000FFFFFFFF800000FFFFFF7FC00000FFFFFF7FC00000007FE07FC0
-0000003FC07FC00000003FC03FC00000003FC03FE00000003FC01FE00000003FC01FE000
-00003FC00FF00000003FC00FF00000003FC007F80000003FC007F80000003FC003FC0000
-003FC001FE0000003FC000FF0000007FC0007F8000007FC0003FC00000FFC0001FE00000
-EFC0000FF80003C7C00003FE000783C00000FFC03F01C000003FFFFC00C000000FFFF000
-00000000FF800000383D7CBA41>71 D<FFFFFF01FFFFFEFFFFFF01FFFFFEFFFFFF01FFFF
-FE01FF800003FF0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE00
-00FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000
-FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF
-000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF00
-0001FE0000FF000001FE0000FF000001FE0000FFFFFFFFFE0000FFFFFFFFFE0000FFFFFF
-FFFE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001
-FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE
-0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE00
-00FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0000
-FF000001FE0000FF000001FE0000FF000001FE0000FF000001FE0001FF800003FF00FFFF
-FF01FFFFFEFFFFFF01FFFFFEFFFFFF01FFFFFE37397DB83E>I<FFFFFFE00000FFFFFFE0
-0000FFFFFFE0000001FFC000000000FF0000000000FF0000000000FF0000000000FF0000
-000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000
-000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000
-000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000
-000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000
-000000FF0000000000FF0000000000FF0000000000FF0000001800FF0000001800FF0000
-001800FF0000001800FF0000001800FF0000003800FF0000003000FF0000003000FF0000
-003000FF0000007000FF0000007000FF0000007000FF000000F000FF000000F000FF0000
-01F000FF000003F000FF00000FF000FF00001FE001FF8000FFE0FFFFFFFFFFE0FFFFFFFF
-FFE0FFFFFFFFFFE02D397DB834>76 D<FFFF0000000007FFF8FFFF800000000FFFF8FFFF
-800000000FFFF801FF800000000FFC0000DFC00000001BF80000DFC00000001BF80000CF
-E000000033F80000CFE000000033F80000CFE000000033F80000C7F000000063F80000C7
-F000000063F80000C7F000000063F80000C3F8000000C3F80000C3F8000000C3F80000C1
-FC00000183F80000C1FC00000183F80000C1FC00000183F80000C0FE00000303F80000C0
-FE00000303F80000C07F00000603F80000C07F00000603F80000C07F00000603F80000C0
-3F80000C03F80000C03F80000C03F80000C03F80000C03F80000C01FC0001803F80000C0
-1FC0001803F80000C00FE0003003F80000C00FE0003003F80000C00FE0003003F80000C0
-07F0006003F80000C007F0006003F80000C003F800C003F80000C003F800C003F80000C0
-03F800C003F80000C001FC018003F80000C001FC018003F80000C001FC018003F80000C0
-00FE030003F80000C000FE030003F80000C0007F060003F80000C0007F060003F80000C0
-007F060003F80000C0003F8C0003F80000C0003F8C0003F80000C0001FD80003F80000C0
-001FD80003F80000C0001FD80003F80000C0000FF00003F80000C0000FF00003F80000C0
-000FF00003F80001E00007E00003F80003F00007E00003F8000FFC0003C00007FC00FFFF
-C003C003FFFFF8FFFFC003C003FFFFF8FFFFC0018003FFFFF845397DB84C>I<FFFF0000
-07FFFEFFFF800007FFFEFFFFC00007FFFE00FFC000007FE000FFE000001F8000DFF00000
-0F0000DFF00000060000CFF80000060000C7FC0000060000C7FC0000060000C3FE000006
-0000C1FF0000060000C1FF0000060000C0FF8000060000C07FC000060000C07FC0000600
-00C03FE000060000C01FF000060000C01FF800060000C00FF800060000C007FC00060000
-C007FE00060000C003FE00060000C001FF00060000C001FF80060000C000FF80060000C0
-007FC0060000C0007FE0060000C0003FE0060000C0001FF0060000C0000FF8060000C000
-0FF8060000C00007FC060000C00003FE060000C00003FE060000C00001FF060000C00000
-FF860000C00000FF860000C000007FC60000C000003FE60000C000003FE60000C000001F
-F60000C000000FFE0000C000000FFE0000C0000007FE0000C0000003FE0000C0000003FE
-0000C0000001FE0000C0000000FE0000C0000000FE0000C00000007E0001E00000003E00
-03F00000003E000FFC0000001E00FFFFC000000E00FFFFC000000E00FFFFC00000060037
-397DB83E>I<FFFFFF0007FFFEFFFFFF0007FFFEFFFFFF0007FFFE01FF8000007FE000FF
-0000001F8000FF0000000F0000FF000000060000FF000000060000FF000000060000FF00
-0000060000FF000000060000FF000000060000FF000000060000FF000000060000FF0000
-00060000FF000000060000FF000000060000FF000000060000FF000000060000FF000000
-060000FF000000060000FF000000060000FF000000060000FF000000060000FF00000006
-0000FF000000060000FF000000060000FF000000060000FF000000060000FF0000000600
-00FF000000060000FF000000060000FF000000060000FF000000060000FF000000060000
-FF000000060000FF000000060000FF000000060000FF000000060000FF000000060000FF
-000000060000FF000000060000FF0000000E00007F0000000C00007F8000000C00007F80
-00001C00003F8000001C00003F8000001800001FC000003800001FC000007000000FE000
-00F0000007F00000E0000003F80001C0000001FC000780000000FE000F000000007F807E
-000000001FFFF80000000007FFE000000000007F800000373B7DB83E>85
-D<7FFFFF003FFFFC007FFFFF003FFFFC007FFFFF003FFFFC0000FFF80007FF8000007FE0
-0003FC0000003FE00001F00000001FF00001E00000001FF00001C00000000FF800018000
-000007FC00038000000007FC00070000000003FE00060000000003FE000E0000000001FF
-001C0000000000FF80180000000000FF803800000000007FC03000000000003FE0600000
-0000003FE0E000000000001FF0C000000000000FF18000000000000FFB80000000000007
-FF00000000000007FE00000000000003FE00000000000001FF00000000000001FF000000
-00000000FF800000000000007FC00000000000007FC0000000000000FFE0000000000000
-DFE00000000000019FF00000000000038FF80000000000030FF800000000000607FC0000
-0000000E03FE00000000000C03FE00000000001801FF00000000003800FF000000000030
-00FF800000000060007FC000000000E0007FC000000000C0003FE00000000180001FF000
-00000380001FF00000000300000FF800000006000007FC0000000E000007FC0000000C00
-0003FE0000001C000001FE0000003C000001FF000000FE000001FF800007FF800007FFE0
-00FFFFE0003FFFFF80FFFFE0003FFFFF80FFFFE0003FFFFF8039397EB83E>88
-D<001FE0000000FFFC000003E03F000007000F80000F8007E0001FC003F0001FE003F000
-1FE001F8001FE001F8001FE000FC000FC000FC00078000FC00000000FC00000000FC0000
-0000FC00000000FC0000007FFC000007FFFC00003FE0FC0000FE00FC0003F800FC000FF0
-00FC001FC000FC003FC000FC007F8000FC007F0000FC007F0000FC0CFE0000FC0CFE0000
-FC0CFE0000FC0CFE0001FC0CFE0001FC0CFF0003FC0C7F00077C0C7F80063E183FC01E3E
-180FE0781FF003FFF00FE0007F8007C026277DA52A>97 D<0003FC00001FFF80007E03E0
-01F8007003F000F807E001FC0FC003FC0FC003FC1F8003FC3F8003FC3F0001F87F0000F0
-7F0000007F0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000
-FE000000FE000000FE000000FE0000007E0000007F0000007F0000003F0000063F800006
-1F80000E1FC0000C0FC0001C07E0003803F0007001F800E0007C07C0001FFF000007F800
-1F277DA525>99 D<0000000FC0000003FFC0000003FFC0000003FFC00000003FC0000000
-0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F
-C00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0
-0000000FC00003F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003FC00F
-C0001FC00FC0001FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC07E00
-000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE0000
-0FC0FE00000FC0FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F00000F
-C03F00000FC01F80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801CFFF
-007C078FFF001FFE0FFF0007F80FC0283B7DB92E>I<0007F800001FFF00007C0FC001F8
-03E003F001F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F00
-003F7E00003FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE00
-0000FE000000FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F80
-00070FC0000607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC002027
-7EA525>I<00007E000003FF80000FC1E0001F87E0003F0FF0007E0FF0007E0FF000FC0F
-F000FC0FF001F803C001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F80000FFFFFC00FFFFFC00FFFFFC
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000003FC00007FFFF8007FFFF8007FFFF8001C3B7FBA19>I<00000003
-F0000FF00FF8003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100FC003F000
-0FC003F0001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F
-8001F8001F8001F8000FC003F0000FC003F00007C003E00003E007C00003F00F800003F8
-1F0000073FFC0000060FF000000E000000000E000000000E000000000E000000000F0000
-00000F000000000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8003FFFFFF
-C00F80007FE01F00000FF03E000003F07C000001F07C000001F8F8000000F8F8000000F8
-F8000000F8F8000000F8F8000000F8FC000001F87C000001F03E000003E03F000007E00F
-80000F8007E0003F0001FC01FC00007FFFF0000007FF000026387EA52A>I<0380000FE0
-001FF0001FF0001FF0001FF0001FF0000FE0000380000000000000000000000000000000
-0000000000000000000000000000000003F000FFF000FFF000FFF00007F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00007F800FFFFC0FFFFC0FFFFC012387EB717>105
-D<03F000FFF000FFF000FFF0000FF00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00007F800FFFFC0FFFFC0FFFFC0123A7EB917
->108 D<03F00FF0001FE000FFF03FFC007FF800FFF0F03F01E07E00FFF1C01F83803F00
-0FF3800FC7001F8003F7000FCE001F8003FE000FDC001F8003FC0007F8000FC003FC0007
-F8000FC003F80007F0000FC003F80007F0000FC003F80007F0000FC003F00007E0000FC0
-03F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007
-E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC0
-03F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007
-E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC0
-03F00007E0000FC003F00007E0000FC007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FF
-FF83FFFFFFFFC1FFFF83FFFF40257EA445>I<0003FE0000000FFF8000003E03E00000F8
-00F80001F0007C0003E0003E0007C0001F000F80000F801F80000FC01F000007C03F0000
-07E03F000007E07E000003F07E000003F07E000003F07E000003F0FE000003F8FE000003
-F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8
-7E000003F07E000003F07F000007F03F000007E03F000007E01F80000FC00F80000F800F
-C0001F8007E0003F0003F0007E0000F800F800007E03F000001FFFC0000003FE00002527
-7EA52A>111 D<03F01FE000FFF07FF800FFF1E07E00FFF3801F8007F7000FC003FE0007
-E003FC0003F003F80003F803F00001F803F00001FC03F00000FC03F00000FE03F00000FE
-03F00000FE03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03
-F000007F03F000007F03F000007F03F000007F03F00000FE03F00000FE03F00000FE03F0
-0001FC03F00001FC03F80003F803F80003F003FC0007F003FE000FE003F6000FC003F780
-3F0003F1E07E0003F0FFF80003F01FC00003F000000003F000000003F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-07F8000000FFFFC00000FFFFC00000FFFFC0000028357EA42E>I<0003F800C0001FFE01
-C0007E0781C000FC01C3C003F000E3C007F00077C00FE00037C00FC0003FC01FC0001FC0
-3F80001FC03F80000FC07F00000FC07F00000FC07F00000FC0FE00000FC0FE00000FC0FE
-00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00
-000FC07F00000FC07F00000FC07F00000FC03F00000FC03F80001FC01F80001FC01FC000
-3FC00FC0003FC007E0007FC003F000EFC001F801CFC0007E078FC0001FFE0FC00007F80F
-C00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0
-0000000FC00000000FC00000000FC00000000FC00000001FE0000003FFFF000003FFFF00
-0003FFFF28357DA42C>I<07E01F00FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003
-EE07F003EC03E003FC008003F8000003F8000003F8000003F8000003F0000003F0000003
-F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003
-F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000007
-F80000FFFFF000FFFFF000FFFFF0001C257EA421>I<00FF030003FFE7000F80FF001E00
-3F003C001F0078000F0070000700F0000700F0000700F0000300F8000300F8000300FC00
-0300FF0000007FE000007FFF00003FFFE0001FFFF8000FFFFC0003FFFE0000FFFF000007
-FF8000007F8000001F80C0000FC0C00007C0C00007C0E00003C0E00003C0E00003C0F000
-03C0F0000380F8000780FC000780FC000F00FF001E00F3C07C00E1FFF000C03F80001A27
-7DA521>I<00180000001800000018000000180000001800000038000000380000003800
-0000780000007800000078000000F8000001F8000003F8000007F800001FFFFF00FFFFFF
-00FFFFFF0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800
-C001F800C000FC01C000FC0180007C0380007E0300003F0700000FFE000001F8001A347F
-B220>I<03F00007E000FFF001FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F0
-0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0
-0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0
-0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0
-0007E00003F00007E00003F00007E00003F00007E00003F0000FE00003F0000FE00003F0
-000FE00003F0001FE00001F0001FE00001F8003FE00000F80077F80000FC00E7FF80003F
-03C7FF80001FFF87FF800003FC07E00029267EA42E>I<FFFF807FFF00FFFF807FFF00FF
-FF807FFF0003FE003FF00001FE001F800000FE001F0000007E001C0000003F0018000000
-1F80300000001FC0700000000FC0E000000007E0C000000007F18000000003FB80000000
-01FF0000000000FE0000000000FE00000000007F00000000003F00000000007F80000000
-007FC000000000CFC000000001C7E00000000383F00000000703F80000000601F8000000
-0C00FC0000001C007E00000038007F00000078003F000000F0001F800001F8001FC0000F
-F8003FF000FFFE00FFFF80FFFE00FFFF80FFFE00FFFF8029247FA32C>120
-D<FFFF803FFEFFFF803FFEFFFF803FFE0FF8000FF007F00007C003F000038001F8000380
-01F800030001FC00030000FC00060000FC000600007E000C00007E000C00007F000C0000
-3F001800003F001800001F803000001F803000001FC07000000FC06000000FC060000007
-E0C0000007E0C0000007F1C0000003F180000003F180000001FB00000001FB00000001FF
-00000000FE00000000FE000000007C000000007C000000007C0000000038000000003800
-00000030000000003000000000700000000060000000006000000000C000000000C00000
-7C01C00000FE01800000FE03800000FE03000000FE06000000FC0E000000701C00000038
-380000001FF00000000FC000000027357EA32C>I<FFFFFFFFE00000FFFFFFFFFC0000FF
-FFFFFFFF000001FF80007FC00000FF00001FE00000FF00000FF00000FF000007F80000FF
-000003FC0000FF000003FC0000FF000001FE0000FF000001FE0000FF000001FF0000FF00
-0001FF0000FF000001FF0000FF000001FF0000FF000001FF0000FF000001FF0000FF0000
-01FF0000FF000001FE0000FF000003FE0000FF000003FC0000FF000007F80000FF00000F
-F00000FF00001FE00000FF00003FC00000FF0000FF800000FFFFFFFC000000FFFFFFFC00
-0000FF00007F800000FF00001FE00000FF000007F00000FF000003F80000FF000001FC00
-00FF000001FE0000FF000000FF0000FF000000FF0000FF000000FF8000FF0000007F8000
-FF0000007FC000FF0000007FC000FF0000007FC000FF0000007FC000FF0000007FC000FF
-0000007FC000FF0000007FC000FF0000007F8000FF000000FF8000FF000000FF8000FF00
-0001FF0000FF000001FE0000FF000003FE0000FF000007FC0000FF00001FF80001FF8000
-7FF000FFFFFFFFFFC000FFFFFFFFFF0000FFFFFFFFF8000032397DB83B>194
-D<0003FFFFFFFFFFF80003FFFFFFFFFFF80003FFFFFFFFFFF8000003C0000FFC00000001
-800007F800000001800007F800000001800007F800000001800007F800000001800007F8
-00000001800007F800000001800007F800000001800007F800000001800007F800000001
-800007F800000001800007F800000001800007F800000001800007F800000001000007F8
-00000003000007F800000003000007F800000003000007F800000003000007F800000003
-000007F800000003000007F800000003000007F800000003000007F800000006000007F8
-00000006000007F800000006000007F800000006000007F800000006000007F80000000C
-000007F80000000C000007F80000000C000007F80000000C000007F800000018000007F8
-00000018000007F800000018000007F800000030000007F800000030000007F800000030
-000007F800000060000007F800000060000007F8000000C0000007F8000000C0000007F8
-00000180000007F800000380000007F800000300000007F800000600000007F800000E00
-000007F800001C00000007F800003800000007F800007800000007F80000F80000000FFC
-003FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FE00000000007FC3F0000
-00000000FC7C0000000000003E780000000000001E780000000000001E70000000000000
-0E700000000000000E600000000000000660000000000000066000000000000006600000
-0000000006E000000000000007C000000000000003C000000000000003C0000000000000
-03C000000000000003404980B841>196 D<FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFF
-FFFE0001FF800007FE0000FF000000FE0000FF0000003F0000FF0000001F0000FF000000
-0F0000FF000000070000FF000000070000FF000000070000FF000000030000FF00000003
-0000FF000000030000FF000000038000FF000000018000FF0000C0018000FF0000C00180
-00FF0000C0018000FF0000C0000000FF0000C0000000FF0000C0000000FF0001C0000000
-FF0001C0000000FF0003C0000000FF000FC0000000FFFFFFC0000000FFFFFFC0000000FF
-FFFFC0000000FF000FC0000000FF0003C0000000FF0001C0000000FF0001C0000000FF00
-00C0000000FF0000C0000000FF0000C0006000FF0000C0006000FF0000C0006000FF0000
-C000E000FF00000000C000FF00000000C000FF00000000C000FF00000000C000FF000000
-01C000FF00000001C000FF00000001C000FF000000038000FF000000038000FF00000007
-8000FF000000078000FF0000000F8000FF0000003F8000FF0000007F8001FF800007FF00
-FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF0033397EB838>I<FFFFFF0001FFFF00
-FFFFFF0001FFFF00FFFFFF0001FFFF0001FF8000007FF00000FF0000003F800000FF0000
-003E000000FF0000003C000000FF00000038000000FF00000070000000FF000000E00000
-00FF000001C0000000FF00000380000000FF00000700000000FF00000E00000000FF0000
-1C00000000FF00003800000000FF00007000000000FF0000E000000000FF0001C0000000
-00FF00078000000000FF000E0000000000FF001C0000000000FF003E0000000000FF007E
-0000000000FF00FF0000000000FF01FF0000000000FF03FF8000000000FF077FC0000000
-00FF0E7FC000000000FF1C3FE000000000FF381FF000000000FF701FF000000000FFE00F
-F800000000FFC007FC00000000FF8007FC00000000FF0003FE00000000FF0001FF000000
-00FF0001FF00000000FF0000FF80000000FF00007FC0000000FF00007FC0000000FF0000
-3FE0000000FF00001FF0000000FF00001FF0000000FF00000FF8000000FF00000FF80000
-00FF000007FC000000FF000003FE000000FF000003FE000000FF000001FF000000FF0000
-00FF800000FF000000FFC00000FF000000FFE00001FF800001FFF000FFFFFF001FFFFF80
-FFFFFF001FFFFF80FFFFFF001FFFFF8039397DB841>202 D<FFFFFF003FFFFFC0FFFFFF
-003FFFFFC0FFFFFF003FFFFFC001FF8000007FE00000FF0000003FC00000FF0000003FC0
-0000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF00
-00003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC0
-0000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF00
-00003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC0
-0000FF0000003FC00000FF0000003FC00000FFFFFFFFFFC00000FFFFFFFFFFC00000FFFF
-FFFFFFC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC0
-0000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF00
-00003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC0
-0000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF00
-00003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC0
-0000FF0000003FC00000FF0000003FC00001FF8000007FE000FFFFFF003FFFFFC0FFFFFF
-003FFFFFC0FFFFFF003FFFFFC03A397DB841>205 D<FFFFFFFFFFFFFFC0FFFFFFFFFFFF
-FFC0FFFFFFFFFFFFFFC001FF8000007FE00000FF0000003FC00000FF0000003FC00000FF
-0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003F
-C00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF
-0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003F
-C00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF
-0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003F
-C00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF
-0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003F
-C00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF
-0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003F
-C00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF0000003FC00000FF
-0000003FC00000FF0000003FC00001FF8000007FE000FFFFFF003FFFFFC0FFFFFF003FFF
-FFC0FFFFFF003FFFFFC03A397DB841>207 D<000001FF80018000000FFFE0038000007F
-FFF803800001FF807E07800003FC000F0F80000FF000039F80001FE00001DF80003F8000
-00FF80007F0000007F8000FE0000003F8001FE0000003F8003FC0000001F8007F8000000
-0F8007F80000000F800FF000000007800FF000000007801FE000000007801FE000000003
-803FE000000003803FC000000003807FC000000001807FC000000001807FC00000000180
-7F800000000180FF800000000000FF800000000000FF800000000000FF800000000000FF
-800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80
-0000000000FF800000000000FF800000000000FF8000000000007F8000000000007FC000
-000001807FC000000001807FC000000001803FC000000001803FE000000001801FE00000
-0003801FE000000003000FF000000003000FF0000000070007F8000000070007F8000000
-060003FC0000000E0001FE0000001C0000FE0000001800007F0000003800003F80000070
-00001FE00000E000000FF00003C0000003FC000F80000001FF803F000000007FFFFC0000
-00000FFFF00000000001FF800000313D7BBA3C>209 D<001FE0000000FFFC000003E03F
-000007000F80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001FE000FC
-000FC000FC00078000FC00000000FC00000000FC00000000FC00000000FC0000007FFC00
-0007FFFC00003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000FC007F
-8000FC007F0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC0CFE00
-01FC0CFF0003FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE0007F80
-07C026277DA52A>224 D<00000000C000000007C00000003FC0000007FFC000007FFF80
-0003FFFF00000FFFFC00003FFFF00000FFFE000001FFC0000003FC00000007F00000000F
-C00000000F800000001F000000001E000000003C000000003C0000000038000000007800
-0000007003FE0000700FFF8000703E03E00060F800F80061F0007C00E3E0003E00E7C000
-1F00EF80000F80DF80000FC0DF000007C0FF000007E0FF000007E0FE000003F0FE000003
-F0FE000003F0FE000003F0FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8
-FE000003F8FE000003F8FE000003F8FE000003F87E000003F07E000003F07F000007F03F
-000007E03F000007E01F80000FC00F80000F800FC0001F8007E0003F0003F0007E0000F8
-00F800007E03F000001FFFC0000003FE0000253B7EB92A>I<FFFFFF8000FFFFFFF00007
-F801FC0003F0007E0003F0003F0003F0001F8003F0001FC003F0001FC003F0001FC003F0
-001FC003F0001FC003F0003F8003F0003F0003F000FE0003F003F80003FFFFC00003FFFF
-C00003F000F80003F0003E0003F0001F0003F0000FC003F0000FE003F00007E003F00007
-F003F00007F003F00007F003F00007F003F00007F003F00007E003F0000FE003F0000FC0
-03F0001FC003F0007F8007F800FE00FFFFFFFC00FFFFFFE00024247EA32A>I<FFFFFFFE
-FFFFFFFE07F800FE03F0001E03F0000E03F0000E03F0000603F0000703F0000703F00003
-03F0000303F0000303F0000303F0000303F0000003F0000003F0000003F0000003F00000
-03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000
-03F0000003F0000003F0000003F0000003F0000007FC0000FFFFF000FFFFF00020247EA3
-25>I<003FFFFFFFE0003FFFFFFFE00001E003FC000000C001F8000000C001F8000000C0
-01F8000000C001F8000000C001F8000000C001F8000000C001F8000000C001F8000000C0
-01F8000000C001F8000000C001F8000000C001F80000008001F80000018001F800000180
-01F80000018001F80000018001F80000018001F80000030001F80000030001F800000300
-01F80000060001F80000060001F80000060001F800000C0001F800001C0001F800001800
-01F80000300001F80000F00001F80001E00001F80007E00003FC007FFFFFFFFFF07FFFFF
-FFFFF07F00000007F07C00000001F0700000000070700000000070600000000030E00000
-000038E00000000038E00000000038C00000000018C00000000018C00000000018C00000
-000018C000000000182D3180A32E>I<0007F800001FFF00007C0FC001F803E003F001F0
-07E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F00003F7E00003F
-FE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE000000FE000000
-FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F8000070FC00006
-07C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC0020277EA525>I<3F
-FF00FFFFC03FFF003FFF00FFFFC03FFF0007FE0007F8001FF80001FC0003F0000FE00000
-7C0003F0000F8000001E0003F0001E0000000F0003F0003C000000078003F00078000000
-01C003F000E000000000E003F001C0000000007003F00380000000003C03F00F00000000
-000E03F01C00000000000F03F03C00000000001F83F07E00000000003FE3F1FF00000000
-003FF3F3FF00000000007F3BF73F8000000000FE1FFE1FC000000001FC0FFC0FE0000000
-01FC03F00FE000000003F803F007F000000007F003F003F80000000FE003F001FC000000
-0FE003F001FC0000001FC003F000FE0000003F8003F0007F0000007F0003F0003F800000
-7E0003F0001F800000FE0003F0001FC00001FC0003F0000FE00003FC0003F0000FF00007
-FC0003F0000FF8000FFC0007F8000FFC00FFFF00FFFFC03FFFC0FFFF00FFFFC03FFFC042
-247FA345>I<C07FF000E3FFFF00FF803FC0FC000FE0F80003F0F00003F8E00001F8E000
-01FCC00001FCC00001FC000001FC000001FC000001F8000003F0000007E000000FC00000
-3F00007FF800007FFC0000003F8000000FE0000003F0000001F8000001FC000000FC0000
-00FE000000FE000000FEC00000FEC00000FEC00000FEC00000FCE00001FC600001F87000
-03F03C000FE00F003FC003FFFF0000FFF0001F277EA525>I<FFFFC1FFFF80FFFFC1FFFF
-8007F8000FF00003F00007E00003F00007E00003F00007E00003F00007E00003F0000FE0
-0003F0001FE00003F0003FE00003F00077E00003F000E7E00003F000C7E00003F001C7E0
-0003F00387E00003F00707E00003F00E07E00003F00C07E00003F01807E00003F03807E0
-0003F07007E00003F0E007E00003F1C007E00003F18007E00003F38007E00003F70007E0
-0003FE0007E00003FC0007E00003F80007E00003F00007E00003F00007E00003F00007E0
-0003F00007E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF8029247EA32E>I<001E003C
-0000007F007F0000007F80FF000000FF80FF800000FF80FF800000FF80FF800000FF80FF
-8000007F007F0000003E003E0000001FFFFC00000007FFF000000000FF80000000000000
-0000000000000000000000000000000000000000FFFFC1FFFF80FFFFC1FFFF8007F8000F
-F00003F00007E00003F00007E00003F00007E00003F00007E00003F0000FE00003F0001F
-E00003F0003FE00003F00077E00003F000E7E00003F000C7E00003F001C7E00003F00387
-E00003F00707E00003F00E07E00003F00C07E00003F01807E00003F03807E00003F07007
-E00003F0E007E00003F1C007E00003F18007E00003F38007E00003F70007E00003FE0007
-E00003FC0007E00003F80007E00003F00007E00003F00007E00003F00007E00003F00007
-E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF8029347EB32E>I<FFFFC03FFF00FFFFC0
-3FFF0007F8001FF80003F0000FE00003F0000F800003F0001E000003F0003C000003F000
-78000003F000E0000003F001C0000003F00380000003F00F00000003F01C00000003F03C
-00000003F07E00000003F1FF00000003F3FF00000003F73F80000003FE1FC0000003FC0F
-E0000003F00FE0000003F007F0000003F003F8000003F001FC000003F001FC000003F000
-FE000003F0007F000003F0003F800003F0001F800003F0001FC00003F0000FE00003F000
-0FF00003F0000FF80007F8000FFC00FFFFC03FFFC0FFFFC03FFFC02A247EA32E>I<00FF
-FFFFFFC000FFFFFFFFC00003C007F80000018003F00000018003F00000018003F0000001
-8003F00000018003F00000018003F00000018003F00000018003F00000018003F0000001
-8003F00000018003F00000018003F00000018003F00000018003F00000018003F0000003
-8003F00000030003F00000030003F00000030003F00000030003F00000030003F0000003
-0003F00000070003F00000060003F00038060003F0007C060003F000FE060003F000FE0E
-0003F000FE0C0003F000FE1C0003F000F8180007F800703800FFFFC03FF000FFFFC01FC0
-000000002A257FA32E>I<FFF000000FFFFFF800001FFF07F800001FE003F800001FC003
-7C000037C0037C000037C0033E000067C0033E000067C0033E000067C0031F0000C7C003
-1F0000C7C0030F800187C0030F800187C0030F800187C00307C00307C00307C00307C003
-03E00607C00303E00607C00303E00607C00301F00C07C00301F00C07C00300F81807C003
-00F81807C00300F81807C003007C3007C003007C3007C003003E6007C003003E6007C003
-003E6007C003001FC007C003001FC007C007800F8007C00FC00F8007C01FE00F800FE0FF
-FC0701FFFFFFFC0701FFFF30247DA337>I<FFFFC1FFFF80FFFFC1FFFF8007F8000FF000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03FFFFFFE00003FFFFFFE00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-07F8000FF000FFFFC1FFFF80FFFFC1FFFF8029247EA32E>I<0003FE0000000FFF800000
-3E03E00000F800F80001F0007C0003E0003E0007C0001F000F80000F801F80000FC01F00
-0007C03F000007E03F000007E07E000003F07E000003F07E000003F07E000003F0FE0000
-03F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003
-F8FE000003F87E000003F07E000003F07F000007F03F000007E03F000007E01F80000FC0
-0F80000F800FC0001F8007E0003F0003F0007E0000F800F800007E03F000001FFFC00000
-03FE000025277EA52A>I<FFFFFFFFFF80FFFFFFFFFF8007F8000FF00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00007F8000FF000FF
-FFC1FFFF80FFFFC1FFFF8029247EA32E>I<03F01FE000FFF07FF800FFF1E07E00FFF380
-1F8007F7000FC003FE0007E003FC0003F003F80003F803F00001F803F00001FC03F00000
-FC03F00000FE03F00000FE03F00000FE03F000007F03F000007F03F000007F03F000007F
-03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F00000FE03
-F00000FE03F00000FE03F00001FC03F00001FC03F80003F803F80003F003FC0007F003FE
-000FE003F6000FC003F7803F0003F1E07E0003F0FFF80003F01FC00003F000000003F000
-000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000007F8000000FFFFC00000FFFFC00000FFFFC0000028357EA42E
->I<0003FC00001FFF80007E03E001F8007003F000F807E001FC0FC003FC0FC003FC1F80
-03FC3F8003FC3F0001F87F0000F07F0000007F0000007E000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007F00
-00007F0000003F0000063F8000061F80000E1FC0000C0FC0001C07E0003803F0007001F8
-00E0007C07C0001FFF000007F8001F277DA525>I<7FFFFFFFE07FFFFFFFE07E03FC07E0
-7801F801E07001F800E06001F800606001F80060E001F80070E001F80070C001F80030C0
-01F80030C001F80030C001F80030C001F800300001F800000001F800000001F800000001
-F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8
-00000001F800000001F800000001F800000001F800000001F800000001F800000001F800
-000001F800000007FE000003FFFFFC0003FFFFFC0024247EA329>I<FFFF803FFEFFFF80
-3FFE0FF8000FF807F00007E003F00003C003F000038001F800038001F800030001FC0003
-0000FC00060000FC000600007E000C00007E000C00007F000C00003F001800003F001800
-001F803000001F803000001FC07000000FC06000000FC060000007E0C0000007E0C00000
-07F1C0000003F180000003F180000001FB00000001FB00000001FF00000000FE00000000
-FE000000007C000000007C000000007C0000000038000000003800000000300000000030
-00000000700000000060000000006000000000C000000000C000007C01C00000FE018000
-00FE03800000FE03000000FE06000000FC0E000000701C00000038380000001FF0000000
-0FC000000027357EA32C>I<0000003F0000000000000FFF0000000000000FFF00000000
-00000FFF00000000000000FF000000000000003F000000000000003F000000000000003F
-000000000000003F000000000000003F000000000000003F000000000000003F00000000
-0000003F000000000000003F000000000000003F000000000000003F000000000000003F
-000000000000003F000000000000003F000000000000003F000000000000003F00000000
-0003F83F07F00000000FFE3F1FFC0000007F07BF783F800000FC01FFE00FC00001F800FF
-C007E00007F0007F8003F8000FE0007F8001FC000FC0003F0000FC001FC0003F0000FE00
-3F80003F00007F003F80003F00007F007F00003F00003F807F00003F00003F807F00003F
-00003F80FE00003F00001FC0FE00003F00001FC0FE00003F00001FC0FE00003F00001FC0
-FE00003F00001FC0FE00003F00001FC0FE00003F00001FC0FE00003F00001FC0FE00003F
-00001FC0FE00003F00001FC07F00003F00003F807F00003F00003F807F00003F00003F80
-3F80003F00007F003F80003F00007F001FC0003F0000FE000FC0003F0000FC000FE0007F
-8001FC0007F000FFC003F80001F800FFC007E00000FC01FFE00FC000007F07BF783F8000
-000FFE3F1FFC00000003F83F07F000000000003F000000000000003F000000000000003F
-000000000000003F000000000000003F000000000000003F000000000000003F00000000
-0000003F000000000000003F000000000000003F000000000000003F000000000000007F
-8000000000000FFFFC00000000000FFFFC00000000000FFFFC0000003A4A7DB941>I<FF
-FF807FFF00FFFF807FFF0007FF003FF00003FE001FC00001FC001F000000FE001E000000
-7E001C0000003F00180000001F80300000001FC0700000000FC0E000000007E0C0000000
-07F18000000003FB8000000001FF0000000000FE0000000000FE00000000007F00000000
-003F00000000007F80000000007FC000000000CFC000000001C7E00000000383F0000000
-0703F80000000601F80000000C00FC0000001C007E00000038007F00000078003F000000
-F0001F800001F0001FC00003F0001FE0001FF8003FF800FFFE00FFFF80FFFE00FFFF8029
-247FA32C>I<FFFFC1FFFF80FFFFC1FFFF8007F8000FF00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000
-03F00007E00003F00007E00003F00007E00003F00007E00007F8000FF000FFFFFFFFFFC0
-FFFFFFFFFFC0000000001FC00000000007C00000000001C00000000001C00000000000C0
-0000000000E00000000000E00000000000E0000000000060000000000060000000000060
-0000000000600000000000602B317EA32E>I<FFFFC1FFFF80FFFFC1FFFF8007F8000FF0
-0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
-0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
-0001F80007E00000F8001FE000007E00FFE000003FFFE7E0000007FF07E00000000007E0
-0000000007E00000000007E00000000007E00000000007E00000000007E00000000007E0
-0000000007E00000000007E00000000007E00000000007E00000000007E00000000007E0
-000000000FF000000001FFFF80000001FFFF8029247EA32E>I<FFFFC3FFFF0FFFFCFFFF
-C3FFFF0FFFFC07F8001FE0007F8003F0000FC0003F0003F0000FC0003F0003F0000FC000
-3F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0
-000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC000
-3F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0
-000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC000
-3F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0
-000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC000
-3F0007F8001FE0007F80FFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFC3E247EA343>I<FFFFC3
-FFFF0FFFFCFFFFC3FFFF0FFFFC07F8001FE0007F8003F0000FC0003F0003F0000FC0003F
-0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F000
-0FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F
-0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F000
-0FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F
-0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F000
-0FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F0003F0000FC0003F
-0003F0000FC0003F0007F8001FE0007F80FFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFE000000
-00000000FE000000000000003E000000000000000E000000000000000E00000000000000
-060000000000000007000000000000000700000000000000070000000000000003000000
-000000000300000000000000030000000000000003000000000000000340317EA343>I<
-7FFFFF0000007FFFFF0000007E03FC0000007801F80000007001F80000006001F8000000
-6001F8000000E001F8000000E001F8000000C001F8000000C001F8000000C001F8000000
-C001F8000000C001F80000000001F80000000001FFFFE0000001FFFFFC000001F800FF00
-0001F8003F800001F8001FC00001F8000FE00001F80007F00001F80007F00001F80003F8
-0001F80003F80001F80003F80001F80003F80001F80003F80001F80007F00001F80007F0
-0001F8000FE00001F8001FC00001F8003F800003FC00FF00007FFFFFFC00007FFFFFE000
-2D247EA333>I<FFFFC00007FFFFFFFFC00007FFFF07F80000003FC003F00000001FC003
-F00000001F8003F00000001F8003F00000001F8003F00000001F8003F00000001F8003F0
-0000001F8003F00000001F8003F00000001F8003F00000001F8003F00000001F8003F000
-00001F8003FFFFC0001F8003FFFFF8001F8003F001FE001F8003F0007F001F8003F0003F
-801F8003F0001FC01F8003F0000FE01F8003F0000FE01F8003F00007F01F8003F00007F0
-1F8003F00007F01F8003F00007F01F8003F00007F01F8003F0000FE01F8003F0000FE01F
-8003F0001FC01F8003F0003F801F8003F0007F001FC007F801FE003FC0FFFFFFF807FFFF
-FFFFFFC007FFFF38247EA33C>I<FFFFC00000FFFFC0000007F800000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F000000003F000000003F000
-000003F000000003F000000003F000000003FFFFC00003FFFFF80003F001FE0003F0007F
-0003F0003F8003F0001FC003F0000FE003F0000FE003F00007F003F00007F003F00007F0
-03F00007F003F00007F003F0000FE003F0000FE003F0001FC003F0003F8003F0007F0007
-F801FE00FFFFFFF800FFFFFFC00024247EA32A>I<003F8000C1FFF000E7C0FC00FE003F
-00FC001F80F8000FC0F00007E0E00007E0E00003F0C00003F8000001F8000001FC000001
-FC000001FC000000FC000000FE03FE00FE0FFF80FE0FFFFFFE003FFFFE000FFCFE0003C0
-FE000000FE000000FE000000FE000000FC000001FC000001FCC00001F8C00003F8E00003
-F0600007F0700007E038000FC01C001F800E003F0007C07C0001FFF000003FC0001F277E
-A525>I<000000001FE0000000000000FFFC0000FFFFC003F03F0000FFFFC007C00F8000
-07F8000F0003C00003F0001E0001E00003F0003E0001F00003F0007C0000F80003F000FC
-0000FC0003F000F800007C0003F001F800007E0003F001F800007E0003F003F000003F00
-03F003F000003F0003F003F000003F0003F007F000003F8003F007F000003F8003FFFFF0
-00003F8003FFFFF000003F8003F007F000003F8003F007F000003F8003F007F000003F80
-03F007F000003F8003F007F000003F8003F007F000003F8003F003F000003F0003F003F0
-00003F0003F003F800007F0003F001F800007E0003F001F800007E0003F000FC0000FC00
-03F0007C0000F80003F0007E0001F80003F0003E0001F00003F0001F0003E00007F80007
-C00F8000FFFFC003F03F0000FFFFC000FFFC0000000000001FE0000039277EA53E>I<00
-01FFFFFF80001FFFFFFF80007F000FF00000FC0007E00001F80007E00003F00007E00007
-F00007E00007F00007E00007F00007E00007F00007E00007F00007E00003F00007E00003
-F80007E00001F80007E00000FE0007E000003F8007E000000FFFFFE0000000FFFFE00000
-00FE07E0000000FC07E0000001F807E0000003F007E0000007F007E0000007E007E00000
-0FC007E000001F8007E000003F8007E000007F0007E000007E0007E00000FE0007E00001
-FC0007E00003F80007E00007F80007E0001FF8000FF000FFFF01FFFF80FFFF01FFFF8029
-247FA32D>I E
-%EndDVIPSBitmapFont
-end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 1258 -45 a Fi
-(\321\357\360\340\342\356\367\355\350\352)27 b(\352)n
-(\356\354\340\355\344)g(GNU)h(Emacs)1583 55 y(\(\344\353\377)h
-(\342\345\360\361\350\350)e(22\))-128 330 y Fh(1)132
-b(\307\340\357\363)l(\361\352)45 b(Emacs)-128 511 y Fi(\304\353\377)28
-b(\347\340\357\363)n(\361\352)n(\340)e(GNU)i(Emacs)f(22,)g
-(\357\360\356\361\362\356)g(\355\340\341\345\360\350\362\345)h
-(\350\354\377)g(\357\360\356\343\360\340\354\354\373:)f
-Fg(emacs)-128 786 y Fh(2)132 b(\302\373\365)l(\356)l(\344)45
-b(\350\347)f(Emacs)-78 966 y Fi(\317\360\350\356\361\362)n
-(\340\355\356\342\350\362\374)26 b(\360\340\341\356\362\363)h(Emacs)g
-(\(\350\353\350)h(\361\342\345\360\355\363\362\374)f(\342)g(\350\352)n
-(\356\355\352\363)h(\357\360\350)g(\360\340\341\356\362\345)e(\342)h
-(X\))255 b Fg(C-z)-78 1065 y Fi(\302\373\351\362\350)28
-b(\350\347)g(Emacs)2307 b Fg(C-x)42 b(C-c)-128 1310 y
-Fh(3)132 b(\324\340\351\353\373)-78 1471 y Ff
-(\356\362\352\360\373\362\374)28 b Fi(\364\340\351\353)f(\342)g(Emacs)
-2014 b Fg(C-x)42 b(C-f)-78 1570 y Ff(\361\356)m
-(\365\360\340\355\350\362\374)29 b Fi(\364\340\351\353)e
-(\356\341\360\340\362\355\356)g(\355\340)g(\344\350\361\352)1627
-b Fg(C-x)42 b(C-s)-78 1670 y Fi(\361\356)n
-(\365\360\340\355\350\362\374)27 b Ff(\342\361\345)g
-Fi(\364\340\351\353\373)2104 b Fg(C-x)42 b(s)-78 1770
-y Ff(\342\361\362)m(\340\342\350\362\374)29 b Fi(\361\356)n
-(\344\345\360)n(\346\350\354\356\345)d(\344\360\363\343\356\343\356)h
-(\364\340\351\353\340)f(\342)h(\362\345\352\363\371\350\351)h
-(\341\363\364\345\360)809 b Fg(C-x)42 b(i)-78 1869 y
-Fi(\356\362\352\360\373\362\374)28 b(\355\363\346\355\373\351)g
-(\342\340\354)f(\364\340\351\353)g(\342\354\345\361\362\356)g
-(\362\345\352\363\371\345\343\356)1226 b Fg(C-x)42 b(C-v)-78
-1969 y Fi(\361\356)n(\365\360\340\355\350\362\374)27
-b(\341\363\364\345\360)f(\342)h(\363\352)n
-(\340\347\340\355\355\356\354)g(\364\340\351\353\345)1534
-b Fg(C-x)42 b(C-w)-78 2068 y Fi
-(\317\345\360\345\352\353\376\367\350\362\374)28 b
-(\361\356\361\362\356)n(\377\355\350\345)f(\341\363\364\345\360\340)f
-(\020\362\356\353\374\352)n(\356)g(\344\353\377)i
-(\367\362\345\355\350\377\021)928 b Fg(C-x)42 b(C-q)-128
-2314 y Fh(4)132 b(\317\356\353\363\367\345\355\350\345)43
-b(\357\356\354\356\371\350)-128 2496 y Fi
-(\321\357\360\340\342\356\367\355\340\377)19 b
-(\361\350\361\362\345\354\340)i(\344\356\361\362)n
-(\340\362\356\367\355\356)e(\357\360\356\361\362)n(\340.)h
-(H\340\346\354\350\362\345)i Fg(C-h)d Fi(\(\350\353\350)i
-Fg(F1)p Fi(\))f(\350)h(\361\353\345\344\363\351\362\345)g
-(\350\355\361\362\360\363\352\366\350\377\354.)g(\305\361\353\350)h
-(\342\373)d(\342)i(\357\345\360\342\373\351)-128 2595
-y(\360\340\347)28 b(\360\340\341\356\362)n(\340\345\362\345)e(\361)h
-(Emacs,)h(\362\356)g(\355\340\341\345\360\350\362\345)f
-Fg(C-u)42 b(C-h)g(t)i(Russian)c(RET)27 b Fi(\344\353\377)h
-(\342\373\347\356\342\340)d Ff(\363\367\345\341\355\350\352)m(\340)p
-Fi(.)-78 2689 y(\321\352\360\373\362\374)j(\356\352\355\356)f
-(\361\357\360\340\342\352\350)2104 b Fg(C-x)42 b(1)-78
-2789 y Fi(\317\360\356\352\360\363\362\350\362\374)28
-b(\356\352\355\356)f(\361\357\360\340\342\352\350)1940
-b Fg(C-M-v)-78 2889 y Fi(aprop)r(os:)26 b(\357\356\352)n
-(\340\347\340\362\374)g(\352)n(\356\354\340\355\344\373,)h
-(\361\356\356\362\342\345\362\361\362\342\363\376\371\350\345)g
-(\361\362\360\356\352)n(\345)921 b Fg(C-h)42 b(a)-78
-2988 y Fi(\357\356\352)n(\340\347\340\362\374)26 b(\350\354\377)i
-(\364\363\355\352\366\350\350,)g(\352)n(\356\362\356\360\340\377)f
-(\347\340\357\363)n(\361\352)n(\340\345\362\361)n(\377)e
-(\352\353\340\342\350\370\345\351)835 b Fg(C-h)42 b(k)-78
-3088 y Fi(\357\356\353\363\367\350\362\374)28 b
-(\350\355\364\356\360\354\340\366\350\376)f(\356)g
-(\364\363\355\352\366\350\350)1623 b Fg(C-h)42 b(f)-78
-3187 y Fi(\357\356\353\363\367\350\362\374)28 b
-(\350\355\364\356\360\354\340\366\350\376)f(\356)g
-(\360\345\346\350\354\345)1672 b Fg(C-h)42 b(m)-128 3434
-y Fh(5)132 b(\310\361\357\360\340\342\353\345\355\350\345)43
-b(\356\370\350\341\356\352)-78 3617 y Ff
-(\357\360\345\360\342\340\362\374)28 b Fi
-(\367\340\361\362\350\367\355\356)f
-(\355\340\341\360\340\355\355\363\376)g(\350\353\350)h
-(\350\361\357\356\353\355\377\345\354\363\376)g(\352)n
-(\356\354\340\355\344\363)682 b Fg(C-g)-78 3717 y Ff
-(\342\356\361\361\362)m(\340\355\356\342\350\362\374)29
-b Fi(\364\340\351\353,)e(\357\356\362\345\360)n(\377\355\355\373\351)g
-(\357\360\350)h(\352\360\340\365)n(\345)f(\361\350\361\362\345\354\373)
-895 b Fg(M-x)2857 3816 y(recover-file)-78 3916 y Ff
-(\356\362\354\345\355\350\362\374)27 b Fi(\355\345\346)n
-(\345\353\340\362\345\353\374\355\373\345)g
-(\350\347\354\345\355\345\355\350\377)1502 b Fg(C-x)42
-b(u,)h(C-_)2857 4016 y Fi(\350\353\350)g Fg(C-/)-78 4115
-y Fi(\342\356\361\361\362)n(\340\355\356\342\350\362\374)26
-b(\341\363\364\345\360)g(\342)h(\357\345\360\342\356\355\340)n
-(\367\340\353\374\355\356\345)e(\361\356\361\362\356)n
-(\377\355\350\345)1086 b Fg(M-x)2857 4215 y(revert-buffer)-78
-4315 y Fi(\357\345\360\345\360\350\361\356\342\340\362\374)27
-b(\347\340\357\356\353\355\345\355\355\373\351)g(\354\363)n
-(\361\356\360\356\354)f(\375\352\360\340\355)1321 b Fg(C-l)-128
-4560 y Fh(6)132 b(H\340\360\340\371\350\342\340\345\354\373\351)41
-b(\357\356\350\361\352)-78 4743 y Fi(\357\356\350\361\352)28
-b(\342\357\345\360\345\344)2436 b Fg(C-s)-78 4843 y Fi
-(\357\356\350\361\352)28 b(\355\340\347\340\344)2477
-b Fg(C-r)-78 4943 y Fi(\357\356\350\361\352)28 b(\357\356)f
-(\360\345\343\363)-5 b(\353\377\360\355\356\354\363)28
-b(\342\373\360\340\346)n(\345\355\350\376)f(\342\357\345\360\345\344)
-1335 b Fg(C-M-s)-78 5042 y Fi(\357\356\350\361\352)28
-b(\357\356)f(\360\345\343\363)-5 b(\353\377\360\355\356\354\363)28
-b(\342\373\360\340\346)n(\345\355\350\376)f(\355\340\347\340\344)1376
-b Fg(C-M-r)-78 5142 y Fi(\342\373\341\360\340\362\374)26
-b(\357\360\345\344\373\344\363\371\363\376)i(\361\362\360\356\352\363)g
-(\357\356\350\361\352)n(\340)1527 b Fg(M-p)-78 5241 y
-Fi(\342\373\341\360\340\362\374)26 b
-(\361\353\345\344\363\376\371\363\376)i(\361\362\360\356\352\363)g
-(\357\356\350\361\352)n(\340)1580 b Fg(M-n)-78 5341 y
-Fi(\357\360\345\352\360\340\362\350\362\374)28 b
-(\355\340\360\340\371\350\342\340\345\354\373\351)f
-(\357\356\350\361\352)1659 b Fg(RET)-78 5441 y Fi
-(\356\362\354\345\355\350\362\374)28 b(\375\364\364\345\352\362)g
-(\342\342\356)n(\344\340)d(\357\356\361\353\345\344\355\345\343\356)i
-(\361\350\354\342\356\353\340)1248 b Fg(DEL)-78 5540
-y Fi(\357\360\345\360\342\340\362\374)27 b
-(\362\345\352\363\371\350\351)h(\357\356\350\361\352)1994
-b Fg(C-g)-128 5636 y Fi(\304\353\377)26 b(\357\356\342\362\356\360\340)
-f(\357\356\350\361\352)n(\340)f(\342)i(\353\376\341\356\354)f
-(\355\340\357\360\340\342\353\345\355\350\350)h
-(\350\361\357\356\353\374\347\363\351\362\345)f
-(\352\353\340\342\350\370\350)g Fg(C-s)g Fi(\350\353\350)h
-Fg(C-r)p Fi(.)f(\305\361\353\350)h(Emacs)g(\342\361\345)f(\345\371\345)
-h(\357\360\356\350\347-)-128 5736 y(\342\356)n(\344\350\362)i
-(\357\356\350\361\352,)f Fg(C-g)f Fi(\356\362\354\345\355\350\362)j
-(\362\356\353\374\352)n(\356)e(\355\345)g
-(\342\373\357\356\353\355\345\355\355\363\376)g(\367\340\361\362\374.)
-1860 6192 y(1)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop -128 -45 a Fh(7)132 b
-(\317\345\360\345\354\345\371\345\355\350\345)-78 139
-y Ff(\345\344\350\355\350\366\373)32 b
-(\357\345\360\345\354\345\371\345\355\350\377)1944 b
-(\355\340\347\340\344)450 b(\342\357\345\360\345\344)-78
-239 y Fi(\361\350\354\342\356\353)2667 b Fg(C-b)558 b(C-f)-78
-338 y Fi(\361\353\356\342\356)2726 b Fg(M-b)558 b(M-f)-78
-438 y Fi(\361\362\360\356\352)n(\340)2683 b Fg(C-p)558
-b(C-n)-78 537 y Fi(\355\340)n(\367\340\353\356)26 b(\(\350\353\350)j
-(\352)n(\356\355\345\366\))e(\361\362\360\356\352\350)1916
-b Fg(C-a)558 b(C-e)-78 637 y Fi(\357\360\345\344\353\356)n(\346)n
-(\345\355\350\345)2441 b Fg(M-a)558 b(M-e)-78 737 y Fi
-(\340\341\347\340\366)2726 b Fg(M-{)558 b(M-})-78 836
-y Fi(\361\362\360\340\355\350\366\340)2589 b Fg(C-x)42
-b([)472 b(C-x)42 b(])-78 936 y Fi(\342\373\360\340\346)n
-(\345\355\350\345)27 b(\(sexp\))2261 b Fg(C-M-b)470 b(C-M-f)-78
-1036 y Fi(\364\363\355\352\366\350\377)2597 b Fg(C-M-a)470
-b(C-M-e)-78 1135 y Fi(\357\345\360\345\365)n(\356)n(\344)27
-b(\342)g(\355\340)n(\367\340\353\356)f(\(\350\353\350)i(\352)n
-(\356\355\345\366\))g(\341\363\364\345\360\340)1508 b
-Fg(M-<)558 b(M->)-78 1243 y Fi(\357\360\356\352\360\363\362\352)n(\340)
-27 b(\375\352\360\340\355\340)g(\342\355\350\347)2054
-b Fg(C-v)-78 1343 y Fi(\357\360\356\352\360\363\362\352)n(\340)27
-b(\375\352\360\340\355\340)g(\342\342\345\360)n(\365)2016
-b Fg(M-v)-78 1442 y Fi(\357\360\356\352\360\363\362\352)n(\340)27
-b(\342\353\345\342\356)2302 b Fg(C-x)42 b(<)-78 1542
-y Fi(\357\360\356\352\360\363\362\352)n(\340)27 b
-(\342\357\360\340\342\356)2251 b Fg(C-x)42 b(>)-78 1642
-y Fi(\363)n(\361\362)n(\340\355\356\342\352)n(\340)25
-b(\362\345\352\363\371\345\351)j(\361\362\360\356\352\350)g(\342)f
-(\366\345\355\362\360)i(\375\352\360\340\355\340)1329
-b Fg(C-u)42 b(C-l)-128 1887 y Fh(8)132 b(\323\355\350\367\362\356)l
-(\346)l(\345\355\350\345)44 b(\350)g(\363)-7 b
-(\344\340\353\345\355\350\345)-78 2070 y Ff(\363\355\350\367\362\356)m
-(\346)m(\340\345\354\373\351)33 b(\356\341\372\345\352\362)1956
-b(\355\340\347\340\344)450 b(\342\357\345\360\345\344)-78
-2170 y Fi(\361\350\354\342\356\353)27 b(\(\363)-5 b
-(\344\340\353\345\355\350\345,)28 b(\340)f(\355\345)h
-(\363\355\350\367\362\356)n(\346)n(\345\355\350\345\))1510
-b Fg(DEL)558 b(C-d)-78 2270 y Fi(\361\353\356\342\356)2726
-b Fg(M-DEL)470 b(M-d)-78 2369 y Fi(\361\362\360\356\352)n(\340)27
-b(\(\344\356)h(\352)n(\356\355\366\340)e(\361\362\360\356\352\350\))
-1972 b Fg(M-0)42 b(C-k)384 b(C-k)-78 2469 y Fi
-(\357\360\345\344\353\356)n(\346)n(\345\355\350\345)2441
-b Fg(C-x)42 b(DEL)384 b(M-k)-78 2569 y Fi(\342\373\360\340\346)n
-(\345\355\350\345)2512 b Fg(M\025)42 b(C-M-k)340 b(C-M-k)-78
-2676 y Fi(\363\355\350\367\362\356)n(\346\350\362\374)28
-b Ff(\356\341\353\340\361\362\374)2116 b Fg(C-w)-78 2776
-y Fi(\361\352)n(\356\357\350\360\356\342\340\362\374)26
-b(\356\341\353\340\361\362\374)g(\342)h(\361\357\350\361\356\352)h
-(\363\355\350\367\362\356)n(\346)n(\345\355\350\351)1265
-b Fg(M-w)-78 2876 y Fi(\363\355\350\367\362\356)n(\346\350\362\374)28
-b(\344\356)f(\361\353\345\344\363\376\371\345\343\356)g(\342\365)n
-(\356)n(\346\344\345\355\350\377)f(\361\350\354\342\356\353\340)h
-Fe(char)916 b Fg(M-z)42 b Fe(char)-78 2975 y Fi(\342\361\362)n
-(\340\342\350\362\374)27 b(\357\356\361\353\345\344\355\350\351)g
-(\363\355\350\367\362\356)n(\346)n(\345\355\355\373\351)h
-(\356\341\372\345\352\362)1306 b Fg(C-y)-78 3075 y Fi
-(\347\340\354\345\355\350\362\374)24 b(\362\356\353\374\352)n(\356)e
-(\367\362\356)i(\342\356\361\361\362)n
-(\340\355\356\342\353\345\355\355\373\351)d(\362\345\352)n(\361\362)k
-(\357\360\345\344\370\345\361\362\342\363\376\371\350\354)f
-(\363\355\350\367\362\356)n(\346)n(\345\355-)-78 3175
-y(\355\373\354)k(\362\345\352)n(\361\362\356\354)2857
-3075 y(M-y)-128 3420 y Fh(9)132 b(\317\356\354\345\362\352)l(\340)-78
-3580 y Fi(\363)n(\361\362)n(\340\355\356\342\350\362\374)26
-b(\357\356\354\345\362\352\350)2177 b Fg(C-@)42 b Fi(\350\353\350)i
-Fg(C-SPC)-78 3680 y Fi(\357\356\354\345\355\377\362\374)28
-b(\354\345\361\362)n(\340\354\350)g(\352\363\360\361\356\360)f(\350)h
-(\357\356\354\345\362\352\363)1541 b Fg(C-x)42 b(C-x)-78
-3779 y Fi(\357\356\354\345\362\350\362\374)28 b Fe(ar)l(g)36
-b Ff(\361\353\356\342)2219 b Fg(M-@)-78 3879 y Fi
-(\357\356\354\345\362\350\362\374)28 b Ff
-(\357\340\360\340\343\360\340\364)2144 b Fg(M-h)-78 3979
-y Fi(\357\356\354\345\362\350\362\374)28 b Ff
-(\361\362\360\340\355\350\366\363)2162 b Fg(C-x)42 b(C-p)-78
-4078 y Fi(\357\356\354\345\362\350\362\374)28 b Ff
-(\342\373\360\340\346)m(\345\355\350\345)2071 b Fg(C-M-@)-78
-4178 y Fi(\357\356\354\345\362\350\362\374)28 b Ff
-(\364\363\355\352\366\350\376)2148 b Fg(C-M-h)-78 4277
-y Fi(\357\356\354\345\362\350\362\374)28 b(\342\345\361\374)f
-Ff(\341\363\364\345\360)2102 b Fg(C-x)42 b(h)-128 4523
-y Fh(10)131 b(\307\340\354\345\355\340)44 b(\361)g
-(\347\340\357\360\356\361\356\354)-78 4706 y Fi
-(\350\355\362\345\360\340\352\362\350\342\355\340\377)28
-b(\347\340\354\345\355\340)f(\362\345\352)n(\361\362\356\342\356\351)g
-(\361\362\360\356\352\350)1398 b Fg(M-\045)-78 4806 y
-Fi(\361)28 b(\350\361\357\356\353\374\347\356\342\340\355\350\345\354)e
-(\360\345\343\363)-5 b(\353\377\360\355\373\365)27 b
-(\342\373\360\340\346)n(\345\355\350\351)1333 b Fg(M-x)42
-b(query-replace-r)o(ege)o(xp)-128 4901 y Fi(\302)28 b
-(\360\345\346\350\354\345)g
-(\350\355\362\345\360\340\352\362\350\342\355\356\351)g
-(\347\340\354\345\355\373)f
-(\357\356\353\374\347\356\342\340\362\345\353\376)f
-(\344\356\361\362\363\357\355\373)i
-(\361\353\345\344\363\376\371\350\345)g(\352)n
-(\356\354\340\355\344\373:)-78 4995 y Ff
-(\347\340\354\345\355\350\362\374)g Fi(\344\340\355\355\356\345)f
-(\361\356\356\362\342\345\362\361\362\342\350\345,)g
-(\357\345\360\345\351\362\350)h(\352)g
-(\361\353\345\344\363\376\371\345\354\363)815 b Fg(SPC)-78
-5095 y Fi(\347\340\354\345\355\350\362\374)28 b(\375\362\356)f
-(\361\356\356\362\342\345\362\361\362\342\350\345,)g(\355\345)h
-(\357\345\360\345\354\345\371\340\362\374\361)n(\377)1238
-b Fg(,)-78 5194 y Ff(\357\360\356\357\363)m(\361\362\350\362\374)29
-b Fi(\361\356\356\362\342\345\362\361\362\342\350\345)e(\341\345\347)g
-(\347\340\354\345\355\373)1487 b Fg(DEL)-78 5294 y Fi
-(\347\340\354\345\355\350\362\374)28 b(\342\361\345)f(\356\361\362)n
-(\340\342\370\350\345\361)n(\377)e
-(\361\356\356\362\342\345\362\361\362\342\350\377)1468
-b Fg(!)-78 5393 y Ff(\342\345\360\355\363\362\374\361)m(\377)29
-b Fi(\352)f(\357\360\345\344\373\344\363\371\345\354\363)f
-(\361\356\356\362\342\345\362\361\362\342\350\376)1337
-b Fg(\002)-78 5493 y Ff(\342\373\351\362\350)28 b Fi(\350\347)g
-(\360\345\346\350\354\340)f(\020\347\340\354\345\355\340)g(\361)g
-(\347\340\357\360\356\361\356\354\021)1453 b Fg(RET)-78
-5593 y Fi(\342\356\351\362\350)38 b(\342)g(\360\345\346\350\354)h
-(\360\345\352\363\360\361\350\342\355\356\343\356)d
-(\360\345\344\340\352\362\350\360\356\342\340\355\350\377)i
-(\(\344\353\377)g(\342\373\365)n(\356)n(\344\340)e
-(\350\361\357\356\353\374\347\363)n(\345\362\361)n(\377)-78
-5692 y Fg(C-M-c)p Fi(\))2857 5593 y Fg(C-r)1860 6192
-y Fi(2)p eop end
-%%Page: 3 3
-TeXDict begin 3 2 bop -128 -45 a Fh(11)131 b
-(\310\361\357\356\353\374\347\356\342\340\355\350\345)44
-b(\355\345\361\352)l(\356\353\374\352\350\365)g(\356\352)l(\356\355)
--128 137 y Fi(\312\356\354\340\355\344\373,)26 b
-(\357\360\350\342\345\344\345\355\355\373\345)h(\342\356)f
-(\342\362\356\360\356\354)g(\361\362\356\353\341\366\345,)g
-(\357\360\350\354\345\355\377\376\362\361)n(\377)i(\352)f
-(\344\360\363\343\356\354\363)f(\364\360\375\351\354\363)h
-(\(\356\352\355\363)f(\350\361\357\356\353\374\347\363)n
-(\345\354\356\351)g(\356\352)n(\356\355\355\356\351)-128
-237 y(\361\350\361\362\345\354\373\).)-78 336 y(\363)-5
-b(\344\340\353\350\362\374)28 b(\342\361\345)f(\356\361\362)n
-(\340\353\374\355\373\345)f(\356\352\355\340)1869 b Fg(C-x)42
-b(1)-78 444 y Fi(\360\340\347\341\350\362\374)27 b(\356\352\355\356)g
-(\357\356)g(\343\356\360\350\347\356\355\362)n(\340\353\350)1825
-b Fg(C-x)42 b(2)472 b(C-x)42 b(5)h(2)-78 543 y Fi(\363)-5
-b(\344\340\353\350\362\374)28 b(\344\340\355\355\356\345)f
-(\356\352\355\356)2143 b Fg(C-x)42 b(0)472 b(C-x)42 b(5)h(0)-78
-643 y Fi(\360\340\347\341\350\362\374)27 b(\356\352\355\356)g(\357\356)
-g(\342\345\360\362\350\352)n(\340\353\350)1904 b Fg(C-x)42
-b(3)-78 743 y Fi(\342\373\357\356\353\355\350\362\374)27
-b(\357\360\356\352\360\363\362\352\363)h(\342)f
-(\344\360\363\343\356\354)h(\356\352\355\345)1530 b Fg(C-M-v)-78
-850 y Fi(\357\345\360\345\354\345\361\362\350\362\374)29
-b(\352\363\360\361\356\360)e(\342)g(\344\360\363\343\356\345)g
-(\356\352\355\356)1629 b Fg(C-x)42 b(o)472 b(C-x)42 b(5)h(o)-78
-950 y Fi(\342\373\341\360\340\362\374)26 b(\341\363\364\345\360)h(\342)
-g(\344\360\363\343\356\354)h(\356\352\355\345)1795 b
-Fg(C-x)42 b(4)h(b)385 b(C-x)42 b(5)h(b)-78 1050 y Fi(\357\356\352)n
-(\340\347\340\362\374)26 b(\341\363\364\345\360)h(\342)g
-(\344\360\363\343\356\354)g(\356\352\355\345)1775 b Fg(C-x)42
-b(4)h(C-o)297 b(C-x)42 b(5)h(C-o)-78 1149 y Fi
-(\347\340\343\360\363\347\350\362\374)27 b(\364\340\351\353)g(\342)g
-(\344\360\363\343\356\345)g(\356\352\355\356)1786 b Fg(C-x)42
-b(4)h(f)385 b(C-x)42 b(5)h(f)-78 1249 y Fi
-(\356\362\352\360\373\362\374)28 b(\364\340\351\353)f(\342)g
-(\360\345\346\350\354\345)h(\367\362\345\355\350\377)h(\342)e
-(\344\360\363\343\356\354)g(\356\352\355\345)1149 b Fg(C-x)42
-b(4)h(r)385 b(C-x)42 b(5)h(r)-78 1349 y Fi(\347\340\357\363)n
-(\361\362\350\362\374)27 b(Dired)h(\342)f(\344\360\363\343\356\354)h
-(\356\352\355\345)1766 b Fg(C-x)42 b(4)h(d)385 b(C-x)42
-b(5)h(d)-78 1448 y Fi(\355\340\351\362\350)28 b(\362)n(\340\343)g(\342)
-f(\344\360\363\343\356\354)g(\356\352\355\345)2003 b
-Fg(C-x)42 b(4)h(.)385 b(C-x)42 b(5)h(.)-78 1556 y Fi
-(\363\342\345\353\350\367\350\362\374)28 b(\342\373\361\356\362\363)e
-(\356\352\355\340)2049 b Fg(C-x)42 b(\002)-78 1656 y
-Fi(\361\363\347\350\362\374)28 b(\362\345\352\363\371\345\345)f
-(\356\352\355\356)2148 b Fg(C-x)42 b({)-78 1755 y Fi
-(\360\340\361\370\350\360\350\362\374)28 b
-(\362\345\352\363\371\345\345)f(\356\352\355\356)1982
-b Fg(C-x)42 b(})-128 2001 y Fh(12)131 b
-(\324\356\360\354\340\362\350\360\356\342\340\355\350\345)-78
-2184 y Fi(\361)n(\344\345\353\340\362\374)27 b
-(\356\362\361\362\363\357)h(\344\353\377)g
-(\362\345\352\363\371\345\351)g Ff(\361\362\360\356\352\350)g
-Fi(\(\342)f(\347\340\342\350\361\350\354\356\361\362\350)g(\356\362)h
-(\360\345\346\350\354\340\))470 b Fg(TAB)-78 2284 y Fi(\361)n
-(\344\345\353\340\362\374)27 b(\356\362\361\362\363\357)h(\344\353\377)
-g Ff(\356\341\353\340\361\362\350)g Fi(\(\342)g
-(\347\340\342\350\361\350\354\356\361\362\350)f(\356\362)g
-(\360\345\346\350\354\340\))775 b Fg(C-M-)p Fd(n)-78
-2383 y Fi(\361)n(\344\345\353\340\362\374)27 b
-(\356\362\361\362\363\357)h(\344\353\377)g Ff(\342\373\360\340\346)m
-(\345\355\350\377)h Fi(\(\342)e
-(\347\340\342\350\361\350\354\356\361\362\350)g(\356\362)h
-(\360\345\346\350\354\340\))617 b Fg(C-M-q)-78 2483 y
-Fi(\361)n(\344\345\353\340\362\374)27 b(\356\362\361\362\363\357)h
-(\352)g(\347\340\344\340\355\355\356\351)e Fe(ar)l(g)36
-b Fi(\352)n(\356\353\356\355\352)n(\345)1445 b Fg(C-x)42
-b(TAB)-78 2583 y Fi(\342\361\362)n(\340\342\350\362\374)27
-b(\355\356\342\363\376)f(\361\362\360\356\352\363)i
-(\357\356\361\353\345)f(\352\363\360\361\356\360\340)1493
-b Fg(C-o)-78 2682 y Fi(\361)n(\344\342\350\355\363\362\374)27
-b(\356\361\362)n(\340\362\356\352)g(\361\362\360\356\352\350)h
-(\342\345\360\362\350\352)n(\340\353\374\355\356)e(\342\355\350\347)
-1293 b Fg(C-M-o)-78 2782 y Fi(\363)-5 b(\344\340\353\350\362\374)28
-b(\357\363)n(\361\362\373\345)f(\361\362\360\356\352\350)h
-(\342\356\352\360\363\343)f(\352\363\360\361\356\360\340)1442
-b Fg(C-x)42 b(C-o)-78 2882 y Fi
-(\356\341\372\345\344\350\355\350\362\374)27 b
-(\361\362\360\356\352\363)h(\361)f
-(\357\360\345\344\373\344\363\371\345\351)h(\(\361\356)f
-(\361\353\345\344\363\376\371\350\354\350)h(arg\))817
-b Fg(M-\002)-78 2981 y Fi(\363)-5 b(\344\340\353\350\362\374)28
-b(\357\363)n(\361\362\356\345)f
-(\357\360\356\361\362\360\340\355\361\362\342\356)g
-(\342\356\352\360\363\343)g(\352\363\360\361\356\360\340)1211
-b Fg(M-)p Fd(n)-78 3081 y Fi(\357\356\354\345\361\362\350\362\374)28
-b(\362\356\353\374\352)n(\356)f(\356)n(\344\350\355)g
-(\357\360\356\341\345\353)g(\342)g(\357\356\347\350\366\350\350)h
-(\352\363\360\361\356\360\340)1036 b Fg(M-SPC)-78 3180
-y Fi(\356\362\364\356\360\354\340\362\350\360\356\342\340\362\374)26
-b(\362\345\352\363\371\350\351)i(\357\340\360\340\343\360\340\364)1513
-b Fg(M-q)-78 3280 y Fi(\363)n(\361\362)n(\340\355\356\342\350\362\374)
-26 b(\361\362\356\353\341\345\366)h
-(\347\340\357\356\353\355\345\355\350\377)1739 b Fg(C-x)42
-b(f)-78 3380 y Fi(\363)n(\361\362)n(\340\355\356\342\350\362\374)26
-b(\357\360\345\364\350\352)n(\361)h
-(\347\340\357\356\353\355\345\355\350\377)g(\352)n
-(\340\346\344\356\351)g(\361\362\360\356\352\350)1108
-b Fg(C-x)42 b(.)-78 3479 y Fi(\363)n(\361\362)n
-(\340\355\356\342\350\362\374)26 b(\355\340)n(\367\345\360\362)n
-(\340\355\350\345)h(\(face\))1833 b Fg(M-g)-128 3725
-y Fh(13)131 b(\310\347\354\345\355\345\355\350\345)44
-b(\360\345\343\350\361\362\360\340)-78 3908 y Fi(\361)n
-(\344\345\353\340\362\374)27 b(\341\363\352\342\373)g
-(\361\353\356\342\340)f(\347\340\343)n(\353\340\342\355\373\354\350)
-1672 b Fg(M-u)-78 4008 y Fi(\361)n(\344\345\353\340\362\374)27
-b(\341\363\352\342\373)g(\361\353\356\342\340)f
-(\361\362\360\356\367\355\373\354\350)1704 b Fg(M-l)-78
-4107 y Fi(\361)n(\344\345\353\340\362\374)27 b
-(\357\345\360\342\363\376)g(\341\363\352\342\363)g
-(\361\353\356\342\340)f(\347\340\343)n(\353\340\342\355\356\351)1457
-b Fg(M-c)-78 4207 y Fi(\361)n(\344\345\353\340\362\374)27
-b(\341\363\352\342\373)g(\356\341\353\340\361\362\350)f(\347\340\343)n
-(\353\340\342\355\373\354\350)1585 b Fg(C-x)42 b(C-u)-78
-4307 y Fi(\361)n(\344\345\353\340\362\374)27 b(\341\363\352\342\373)g
-(\356\341\353\340\361\362\350)f(\361\362\360\356\367\355\373\354\350)
-1617 b Fg(C-x)42 b(C-l)-128 4553 y Fh(14)131 b
-(\314\350\355\350\341\363\364\345\360)-128 4735 y Fi
-(\321\353\345\344\363\376\371\350\345)28 b
-(\352\353\340\342\350\370\350)f(\(\352\353\376\367\350\))i
-(\356\357\360\345\344\345\353\345\355\373)e(\342)h
-(\354\350\355\350\341\363\364\345\360\345.)-78 4833 y
-(\344\356\357\356\353\355\350\362\374)f(\355\340\361\352)n
-(\356\353\374\352)n(\356)f(\342\356\347\354\356)n(\346\355\356)1727
-b Fg(TAB)-78 4933 y Fi(\344\356\357\356\353\355\350\362\374)27
-b(\344\356)h(\356)n(\344\355\356\343\356)e(\361\353\356\342\340)1907
-b Fg(SPC)-78 5033 y Fi(\344\356\357\356\353\355\350\362\374)27
-b(\350)h(\342\373\357\356\353\355\350\362\374)2026 b
-Fg(RET)-78 5132 y Fi(\357\356\352)n(\340\347\340\362\374)26
-b(\342\356\347\354\356)n(\346\355\373\345)g
-(\344\356\357\356\353\355\345\355\350\377)1677 b Fg(?)-78
-5232 y Fi(\342\373\341\360\340\362\374)26 b
-(\357\360\345\344\373\344\363\371\363\376)i(\361\362\360\356\352\363)g
-(\350\347)f(\350\361\362\356\360\350\350)h(\342\342\356)n(\344\340)1130
-b Fg(M-p)-78 5332 y Fi(\342\373\341\360\340\362\374)26
-b(\361\353\345\344\363\376\371\363\376)i(\361\362\360\356\352\363)g
-(\350\347)f(\350\361\362\356\360\350\350)h(\342\342\356)n(\344\340)1183
-b Fg(M-n)-78 5431 y Fi(\357\356\350\361\352)28 b(\342)f
-(\350\361\362\356\360\350\350)h(\357\356)f(\360\345\343\363)-5
-b(\353\377\360\355\356\354\363)28 b(\342\373\360\340\346)n
-(\345\355\350\376)f(\342)g(\356\341\360\340\362\355\356\354)g
-(\355\340\357\360\342\353\345\355\350\350)293 b Fg(M-r)-78
-5531 y Fi(\357\356\350\361\352)28 b(\342)f
-(\350\361\362\356\360\350\350)h(\357\356)f(\360\345\343\363)-5
-b(\353\377\360\355\356\354\363)28 b(\342\373\360\340\346)n
-(\345\355\350\376)f(\342)g(\357\360)n(\377\354\356\354)h
-(\355\340\357\360\342\353\345\355\350\350)361 b Fg(M-s)-78
-5630 y Fi(\357\360\345\360\342\340\362\374)27 b(\352)n
-(\356\354\340\355\344\363)2247 b Fg(C-g)-128 5726 y Fi
-(\315\340\341\345\360\350\362\345)31 b Fg(C-x)42 b(ESC)g(ESC)30
-b Fi(\344\353\377)i
-(\360\345\344\340\352\362\350\360\356\342\340\355\350\377)e(\350)h
-(\357\356\342\362\356\360\345\355\350\377)g
-(\357\356\361\353\345\344\355\345\351)g(\352)n
-(\356\354\340\355\344\373)f(\355\340\341\360\340\355\355\356\351)g
-(\342)h(\354\350\355\350\341\363\364\345\360\345.)-128
-5826 y(\315\340\341\345\360\350\362\345)c Fg(F10)p Fi(,)g
-(\367\362\356\341\373)g(\360\340\341\356\362)n(\340\362\374)f(\361)h
-(\357\363\355\352\362)n(\340\354\350)h(\354\345\355\376)h(\357\360\350)
-f(\357\356\354\356\371\350)f(\352)n(\356\354\340\355\344)g
-(\354\350\355\350\341\363\364\345\360\340.)1860 6192
-y(3)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop -128 -45 a Fh(15)131 b(\301\363\364\345\360\340)
--78 139 y Fi(\342\373\341\360\340\362\374)26 b
-(\344\360\363\343\356\351)i(\341\363\364\345\360)2071
-b Fg(C-x)42 b(b)-78 239 y Fi(\342\373\344\340\362\374)27
-b(\361\357\350\361\356\352)g(\342\361\345\365)g
-(\341\363\364\345\360\356\342)1849 b Fg(C-x)42 b(C-b)-78
-338 y Fi(\363\355\350\367\362\356)n(\346\350\362\374)28
-b(\341\363\364\345\360)2212 b Fg(C-x)42 b(k)-128 583
-y Fh(16)131 b(\317\345\360\345\361\362)l(\340\355\356\342\352)l(\340)44
-b(\344\340\355\355\373\365)-78 767 y Fi
-(\356\341\354\345\355\377\362\374)27 b(\354\345\361\362)n(\340\354\350)
-h Ff(\361\350\354\342\356\353\373)1842 b Fg(C-t)-78 867
-y Fi(\356\341\354\345\355\377\362\374)27 b(\354\345\361\362)n
-(\340\354\350)h Ff(\361\353\356\342\340)1982 b Fg(M-t)-78
-966 y Fi(\356\341\354\345\355\377\362\374)27 b(\354\345\361\362)n
-(\340\354\350)h Ff(\361\362\360\356\352\350)1925 b Fg(C-x)42
-b(C-t)-78 1066 y Fi(\356\341\354\345\355\377\362\374)27
-b(\354\345\361\362)n(\340\354\350)h Ff(\342\373\360\340\346)m
-(\345\355\350\377)1727 b Fg(C-M-t)-128 1311 y Fh(17)131
-b(\317\360\356\342\345\360\352)l(\340)44 b
-(\357\360\340\342\356\357\350\361\340\355\350\377)-78
-1495 y Fi(\357\360\356\342\345\360\350\362\374)27 b
-(\362\345\352\363\371\345\345)h(\361\353\356\342\356)1974
-b Fg(M-$)-78 1594 y Fi(\357\360\356\342\345\360\350\362\374)27
-b(\342\361\345)g(\361\353\356\342\340)f(\342)i
-(\356\341\353\340\361\362\350)1776 b Fg(M-x)42 b(ispell-region)-78
-1694 y Fi(\342\373\357\356\353\355\350\362\374)27 b
-(\357\360\356\342\345\360\352\363)g(\342\361\345\343\356)f
-(\341\363\364\345\360\340)1624 b Fg(M-x)42 b(ispell-buffer)-128
-1939 y Fh(18)131 b(\322)-11 b(\345\343\350)-78 2099 y
-Fi(\355\340\351\362\350)28 b
-(\356\357\360\345\344\345\353\345\355\350\345)g(\362\345\343)n(\340)
-2037 b Fg(M-.)-78 2199 y Fi(\355\340\351\362\350)28 b
-(\361\353\345\344\363\376\371\345\345)g(\342\365)n(\356)n
-(\346\344\345\355\350\345)e(\362\345\343)n(\340)1659
-b Fg(C-u)42 b(M-.)-78 2299 y Fi
-(\350\361\357\356\353\374\347\356\342\340\362\374)26
-b(\355\356\342\373\351)g(\364\340\351\353)h(\361)h(\362\345\343)n
-(\340\354\350)1595 b Fg(M-x)42 b(visit-tags-tabl)o(e)-78
-2398 y Fi(\357\356\350\361\352)28 b(\357\356)f
-(\370\340\341\353\356\355\363)f(\357\356)h(\342\361\345\351)g(\362)n
-(\340\341\353\350\366\345)g(\362\345\343\356\342)1392
-b Fg(M-x)42 b(tags-search)-78 2498 y Fi
-(\342\373\357\356\353\355\350\362\374)27 b(query-replace)f
-(\355\340\344)h(\342\361\345\354\350)g(\364\340\351\353\340\354\350)
-1237 b Fg(M-x)42 b(tags-query-repl)o(ace)-78 2597 y Fi(\357\360\356)n
-(\344\356\353\346\350\362\374)27 b(\357\356\350\361\352)h(\350\353\350)
-g(\357\356\350\361\352-\347\340\354\345\355\363)e(\362\345\343)n(\340)
-1346 b Fg(M-,)-128 2843 y Fh(19)131 b
-(\312\356\354\340\355\344\355\373\345)43 b
-(\357\360\356\366\345\361\361\356\360\373)-78 3026 y
-Fi(\302\373\357\356\353\355\350\362\374)28 b(\352)n
-(\356\354\340\355\344\363)e(\352)n
-(\356\354\340\355\344\355\356\343\356)g
-(\357\360\356\366\345\361\361\356\360\340)1245 b Fg(M-!)-78
-3126 y Fi(\342\373\357\356\353\355\350\362\374)27 b(\352)n
-(\356\354\340\355\344\363)g(\352)n
-(\356\354\340\355\344\355\356\343\356)f
-(\357\360\356\366\345\361\361\356\360\340)g(\355\340\344)i
-(\356\341\353\340\361\362\374\376)720 b Fg(M-|)-78 3225
-y Fi(\357\360\356\357\363)n(\361\362\350\362\374)28 b(\361\356)n
-(\344\345\360)n(\346\350\354\356\345)e(\356\341\353\340\361\362\350)h
-(\367\345\360\345\347)h(\352)n(\356\354\340\355\344\363)f(\352)n
-(\356\354\340\355\344\355\356\343\356)f
-(\357\360\356\366\345\361\361\356\360\340)210 b Fg(C-u)42
-b(M-|)-78 3325 y Fi(\347\340\357\363)n(\361\362\350\362\374)27
-b(\352)n(\356\354\340\355\344\355\373\351)h
-(\357\360\356\366\345\361\361\356\360)e(\342)i(\356\352\355\345)f
-Fg(*shell*)1098 b(M-x)42 b(shell)-128 3571 y Fh(20)131
-b(\317\360)l(\377\354\356\363\343\356\353\374\355\373\345)44
-b(\356\341\353\340\361\362\350)-78 3755 y Fi(\361\352)n
-(\356\357\350\360\356\342\340\362\374)26 b(\357\360)n
-(\377\354\356\363\343\356\353\374\355\363\376)g
-(\356\341\353\340\361\362\374)g(\342)i(\360\345\343\350\361\362\360)
-1140 b Fg(C-x)42 b(r)h(r)-78 3854 y Fi(\363)-5 b
-(\344\340\353\350\362\374)28 b(\357\360)n
-(\377\354\356\363\343\356\353\374\355\363\376)e
-(\356\341\353\340\361\362\374)1692 b Fg(C-x)42 b(r)h(k)-78
-3954 y Fi(\342\361\362)n(\340\342\350\362\374)27 b
-(\357\356\361\353\345\344\355\363\376)g(\363\355\350\367\362\356)n
-(\346)n(\345\355\355\363\376)h(\357\360)n
-(\377\354\356\363\343\356\353\374\355\363\376)e
-(\356\341\353\340\361\362\374)638 b Fg(C-x)42 b(r)h(y)-78
-4054 y Fi(\356\362\352\360\373\362\374)28 b(\357\360)n
-(\377\354\356\363\343\356\353\374\355\363\376)e
-(\356\341\353\340\361\362\374,)h(\361)n(\344\342\350\343)n(\340\377)f
-(\362\345\352)n(\361\362)i(\342\357\360\340\342\356)821
-b Fg(C-x)42 b(r)h(o)-78 4153 y Fi(\356\367\350\361\362\350\362\374)28
-b(\357\360)n(\377\354\356\363\343\356\353\374\355\363\376)f
-(\356\341\353\340\361\362\374)1652 b Fg(C-x)42 b(r)h(c)-78
-4253 y Fi(\357\360\345\344\342\340\360\350\362\374)27
-b(\352)n(\340\346\344\363\376)h(\361\362\360\356\352\363)f
-(\361\362\360\356\352)n(\356\351)g(\362\345\352)n(\361\362)n(\340)1291
-b Fg(C-x)42 b(r)h(t)-128 4498 y Fh(21)131 b
-(\321\356\352\360\340\371\345\355\350\377)-78 4682 y
-Fi(\344\356\341\340\342\350\362\374)26 b(\343)n
-(\353\356\341\340\353\374\355\356\345)f
-(\361\356\352\360\340\371\345\355\350\345)1675 b Fg(C-x)42
-b(a)h(g)-78 4781 y Fi(\344\356\341\340\342\350\362\374)26
-b(\353\356\352)n(\340\353\374\355\356\345)g(\344\353\377)i
-(\360\345\346\350\354\340)f(\361\356\352\360\340\371\345\355\350\345)
-1220 b Fg(C-x)42 b(a)h(l)-78 4881 y Fi
-(\344\356\341\340\342\350\362\374)26 b(\343)n
-(\353\356\341\340\353\374\355\356\345)f(\347\355\340)n
-(\367\345\355\350\345)i(\344\353\377)h(\344\340\355\355\356\343\356)e
-(\361\356\352\360\340\371\345\355\350\377)813 b Fg(C-x)42
-b(a)h(i)g(g)-78 4981 y Fi(\344\356\341\340\342\350\362\374)26
-b(\361\357\345\366\350\364\350\367\345\361\352)n(\356\345)h
-(\344\353\377)h(\360\345\346\350\354\340)f(\347\355\340)n
-(\367\345\355\350\345)g(\344\340\355\355\356\343\356)g
-(\361\356\352\360\340\371\345\355\350\377)342 b Fg(C-x)42
-b(a)h(i)g(l)-78 5080 y Fi(\377\342\355\356)27 b(\342\361\362)n
-(\340\342\350\362\374)f(\347\355\340)n(\367\345\355\350\345)h
-(\344\353\377)h(\361\356\352\360\340\371\345\355\350\377)1395
-b Fg(C-x)42 b(a)h(e)-78 5180 y Fi
-(\344\350\355\340\354\350\367\345\361\352\350)28 b
-(\344\356\357\356\353\355\350\362\374)g
-(\357\360\345\344\373\344\363\371\345\345)f(\361\353\356\342\356)1287
-b Fg(M-/)1860 6192 y Fi(4)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop -128 -45 a Fh(22)131 b(\320)l(\345\343\363)-7
-b(\353\377\360\355\373\345)44 b(\342\373\360\340\346)l
-(\345\355\350\377)-78 139 y Fi(\353\376\341\356\351)27
-b(\356)n(\344\350\355\356\367\355\373\351)g(\361\350\354\342\356\353)g
-(\(\347\340)h(\350\361\352\353\376\367\345\355\350\345\354)g
-(\361\350\354\342\356\353\340)f(\355\356\342\356\351)f
-(\361\362\360\356\352\350\))388 b Fg(.)43 b Fi(\(dot\))-78
-239 y(\355\356\353\374)27 b(\350\353\350)h(\341\356\353\345\345)f
-(\357\356\342\362\356\360\345\355\350\351)1901 b Fg(*)-78
-338 y Fi(\356)n(\344\355\356)27 b(\350\353\350)h(\341\356\353\345\345)e
-(\357\356\342\362\356\360\345\355\350\351)1904 b Fg(+)-78
-438 y Fi(\355\356\353\374)27 b(\350\353\350)h(\356)n(\344\355\356)f
-(\357\356\342\362\356\360\345\355\350\345)1940 b Fg(?)-78
-537 y Fi(\375\352\360\340\355\350\360\356\342\340\362\374)26
-b(\361\357\345\366\350\340\353\374\355\373\351)h
-(\361\350\354\342\356\353)h Fe(c)1536 b Fd(n)p Fe(c)-78
-637 y Fi(\342\373\341\356\360)26 b(\354\345\346\344\363)i(\340\353\374)
-n(\362\345\360\355\340\362\350\342\340\354\350)f
-(\(\020\350\353\350\021\))1501 b Fd(nj)-78 737 y Fi
-(\343\360\363\357\357\350\360\356\342\352)n(\340)2454
-b Fd(n)p Fg(\()42 b Fc(:)14 b(:)g(:)44 b Fd(n)p Fg(\))-78
-836 y Fi(\362\345\352)n(\361\362)29 b(\342)e Fe(n)6 b
-Fi(-\351)27 b(\343\360\363\357\357\345)2227 b Fd(n)p
-Fe(n)-78 936 y Fi(\343\360\340\355\350\366\340)27 b
-(\361\353\356\342\340)2394 b Fd(n)p Fg(b)-78 1036 y Fi(\355\345)28
-b(\343\360\340\355\350\366\340)f(\361\353\356\342\340)2283
-b Fd(n)p Fg(B)-78 1144 y Ff(\356\341\372\345\352\362)2640
-b(\355\340)m(\367\340\353\356)79 b(\361\356\356\362-)2857
-1243 y(\342\345\362\361\362\342\350\377)3547 1144 y(\352)m
-(\356\355\345\366)127 b(\361\356\356\362-)3547 1243 y
-(\342\345\362\361\362\342\350\377)-78 1343 y Fi(\361\362\360\356\352)n
-(\340)2683 b Fg(\002)645 b($)-78 1442 y Fi(\361\353\356\342\356)2726
-b Fd(n)p Fg(<)604 b Fd(n)p Fg(>)-78 1542 y Fi(\341\363\364\345\360)2701
-b Fd(n)p Fg(`)604 b Fd(n)p Fg(')-78 1650 y Ff(\352\353\340\361\361)33
-b(\361\350\354\342\356\353\356\342)2262 b
-(\361\356\356\362\342\345\362-)2857 1750 y(\361\362\342\363)m(\345\362)
-32 b(\350\354)3547 1650 y(\361\356\356\362\342\345\362-)3547
-1750 y(\361\362\342\363)m(\345\362)131 b(\344\360\363-)3547
-1849 y(\343\350\354)-78 1949 y Fi(\377\342\355\373\351)28
-b(\355\340\341\356\360)2450 b Fg([)43 b Fc(:)14 b(:)g(:)43
-b Fg(])419 b([\002)p Fc(:)14 b(:)g(:)41 b Fg(])-78 2048
-y Fi(\361\350\354\342\356\353-\341\363\352\342\340)2423
-b Fd(n)p Fg(w)604 b Fd(n)p Fg(W)-78 2148 y Fi(\361\350\354\342\356\353)
-27 b(\361)h(\361\350\355\362)n(\340\352)n(\361\350\361\356\354)f
-Fe(c)2039 b Fd(n)p Fg(s)p Fe(c)566 b Fd(n)p Fg(S)p Fe(c)-128
-2394 y Fh(23)131 b(\314\345\346\344\363\355\340\360\356)l
-(\344\355\373\345)43 b(\355\340\341\356\360\373)g
-(\361\350\354\342\356\353\356\342)-78 2578 y Fi
-(\342\373\341\360\340\362\374)26 b(\377\347\373\352)2406
-b Fg(C-x)42 b(RET)g(l)-78 2677 y Fi(\357\356\352)n
-(\340\347\340\362\374)26 b(\342\361\345)h(\342\356\347\354\356)n
-(\346\355\373\345)f(\354\345\362\356)n(\344\373)i(\342\342\356)n
-(\344\340)1457 b Fg(M-x)42 b(list-input-meth)o(ods)-78
-2777 y Fi(\360\340\347\360\345\370\350\362\374)27 b(\350\353\350)h
-(\347\340\357\360\345\362\350\362\374)g(\354\345\362\356)n(\344)g
-(\342\342\356)n(\344\340)1473 b Fg(C-)p Fd(n)-78 2877
-y Fi(\363)n(\361\362)n(\340\355\356\342\350\362\374)26
-b(\361\350\361\362\345\354\363)i(\352)n(\356)n
-(\344\350\360\356\342\340\355\350\377)e(\344\353\377)i
-(\361\353\345\344\363\376\371\345\351)f(\352)n
-(\356\354\340\355\344\373)705 b Fg(C-x)42 b(RET)g(c)-78
-2976 y Fi(\357\356\352)n(\340\347\340\362\374)26 b
-(\361\357\350\361\356\352)i(\342\361\345\365)e
-(\361\350\361\362\345\354)j(\352)n(\356)n
-(\344\350\360\356\342\340\355\350\377)1338 b Fg(M-x)42
-b(list-coding-sys)o(tem)o(s)-78 3076 y Fi(\342\373\341\360\340\362\374)
-26 b(\357\360\345\344\357\356\367\362\350\362\345\353\374\355\363\376)j
-(\361\350\361\362\345\354\363)f(\352)n(\356)n
-(\344\350\360\356\342\340\355\350\377)1041 b Fg(M-x)42
-b(prefer-coding-s)o(yst)o(em)-128 3329 y Fh(24)131 b
-(\310\355\364\356\360\354\340\366\350\377)44 b
-(\(\361\350\361\362\345\354\340)g(Info\))-78 3519 y Fi
-(\347\340\357\363)n(\361\362\350\362\374)27 b
-(\361\350\361\362\345\354\363)i(\344\356\361\362\363\357\340)e(\352)g
-(\344\356\352\363\354\345\355\362)n(\340\366\350\350)1275
-b Fg(C-h)42 b(i)-78 3619 y Fi(\355\340\351\362\350)28
-b(\363\352)n(\340\347\340\355\355\363\376)f
-(\364\363\355\352\366\350\376)g(\350\353\350)h
-(\357\345\360\345\354\345\355\355\363\376)h(\342)e
-(\344\356\352\363\354\345\355\362)n(\340\366\350\350)615
-b Fg(C-h)42 b(S)-128 3719 y Fi
-(\317\345\360\345\354\345\371\345\355\350\345)28 b
-(\342\355\363\362\360\350)f(\363\347\353\340)g(\(\355\356)n
-(\344\340\354\350\):)-78 3818 y(\357\360\356\352\360\363\362\352)n
-(\340)g(\342\357\345\360\345\344)2257 b Fg(SPC)-78 3917
-y Fi(\357\360\356\352\360\363\362\352)n(\340)27 b(\355\340\347\340\344)
-2298 b Fg(DEL)-78 4017 y Fi(\357\345\360\345\351\362\350)29
-b(\352)e(\355\340)n(\367\340\353\363)g(\363\347\353\340)2074
-b Fg(.)43 b Fi(\(dot\))-128 4112 y
-(\317\345\360\345\354\345\371\345\355\350\345)28 b
-(\354\345\346\344\363)g(\363\347\353\340\354\350:)-78
-4206 y Ff(\361\353\345\344\363\376\371\350\351)f Fi(\363\347\345\353)
-2245 b Fg(n)-78 4306 y Ff(\357\360\345\344\373\344\363\371\350\351)27
-b Fi(\363\347\345\353)2184 b Fg(p)-78 4405 y Fi
-(\357\345\360\345\351\362\350)29 b(\352)e Ff(\342\345\360)m
-(\365\355\345\354\363)h Fi(\363\347\353\363)1932 b Fg(u)-78
-4505 y Fi(\342\373\341\360\340\362\374)26 b(\357\363\355\352\362)j
-(\354\345\355\376)f(\357\356)f(\350\354\345\355\350)1769
-b Fg(m)-78 4605 y Fi(\342\373\341\360\340\362\374)26
-b Fe(n)6 b Fi(-\351)28 b(\357\363\355\352\362)g(\354\345\355\376)h
-(\357\356)e(\355\356\354\345\360\363)g(\(1\0259\))1357
-b Fe(n)-78 4704 y Fi(\357\345\360\345\351\362\350)29
-b(\357\356)e(\361\361\373\353\352)n(\345)g
-(\(\342\356\347\342\360\340\362)g(\361)g(\357\356\354\356\371\374\376)g
-Fg(l)p Fi(\))1330 b Fg(f)-78 4804 y Fi
-(\342\356\347\342\360\340\362\350\362\361)n(\377)27 b(\352)g
-(\357\356\361\353\345\344\355\345\354\363)h
-(\357\360\356\361\354\356\362\360\345\355\355\356\354\363)f
-(\363\347\353\363)1089 b Fg(l)-78 4904 y Fi
-(\342\356\347\342\360\340\362\350\362\361)n(\377)27 b(\352)g
-(\363\347\353\363-\352)n(\340\362)n(\340\353\356\343\363)1841
-b Fg(d)-78 5003 y Fi(\317\345\360\345\351\362\350)28
-b(\352)g(\342\345\360)n(\365)n(\345\354\363)e(\363\347\353\363)i
-(\364\340\351\353\340)1748 b Fg(t)-78 5103 y Fi
-(\357\345\360\345\351\362\350)29 b(\352)e(\363\347\353\363)-7
-b(,)28 b(\347\340\344\340\355\355\356\354\363)e
-(\350\354\345\355\345\354)1617 b Fg(g)-128 5198 y Fi
-(\304\360\363\343\350\345)27 b(\352)n(\356\354\340\355\344\373:)-78
-5292 y(\347\340\357\363)n(\361\362\350\362\374)g Ff
-(\363\367\345\341\355\350\352)h Fi(\357\356)f
-(\361\350\361\362\345\354\345)i(\344\356\352\363\354\345\355\362)n
-(\340\366\350\350)1183 b Fg(h)-78 5392 y Fi(\357\356\350\361\352)28
-b(\362\345\354\373)g(\342)f(\350\355\344\345\352)n(\361\345)2107
-b Fg(i)-78 5491 y Fi(\357\356\350\361\352)28 b(\342)f
-(\363\347\353\340\365)g(\361)g(\357\356\354\356\371\374\376)g
-(\360\345\343\363)-5 b(\353\377\360\355\373\365)28 b
-(\342\373\360\340\346)n(\345\355\350\351)1028 b Fg(s)-78
-5591 y Ff(\357\360\345\352\360\340\362\350\362\374)32
-b(\360\340\341\356\362\363)d Fi(\361)e
-(\344\356\352\363\354\345\355\362)n(\340\366\350\345\351)1455
-b Fg(q)1860 6192 y Fi(5)p eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop -128 -45 a Fh(25)131 b(\320)l
-(\345\343\350\361\362\360\373)-78 139 y Fi(\361\356)n
-(\365\360\340\355\350\362\374)27 b(\356\341\353\340\361\362\374)f(\342)
-h(\360\345\343\350\361\362\360\345)1810 b Fg(C-x)42 b(r)h(s)-78
-239 y Fi(\342\361\362)n(\340\342\350\362\374)27 b(\361\356)n
-(\344\345\360)n(\346\350\354\356\345)f
-(\360\345\343\350\361\362\360\340)i(\342)f(\341\363\364\345\360)1435
-b Fg(C-x)42 b(r)h(i)-78 338 y Fi(\361\356)n
-(\365\360\340\355\350\362\374)27 b(\357\356\353\356)n(\346)n
-(\345\355\350\345)f(\352\363\360\361\356\360\340)h(\342)g
-(\360\345\343\350\361\362\360\345)1365 b Fg(C-x)42 b(r)h(SPC)-78
-438 y Fi(\357\345\360\345\351\362\350)29 b(\352)e(\357\356\353\356)n
-(\346)n(\345\355\350\376)g(\352\363\360\361\356\360\340,)g(\361\356)n
-(\365\360\340\355\345\355\355\356\354\363)f(\342)h
-(\360\345\343\350\361\362\360\345)775 b Fg(C-x)42 b(r)h(j)-128
-683 y Fh(26)131 b(\312\353\340\342\350\340\362\363\360\355\373\345)44
-b(\354\340\352\360\356\361\373)-78 867 y Ff(\355\340)m
-(\367\340\362\374)29 b Fi(\356\357\360\345\344\345\353\345\355\350\345)
-e(\352\353\340\342\350\340\362\363\360\355\356\343\356)f
-(\354\340\352\360\356\361\340)1227 b Fg(C-x)42 b(\()-78
-966 y Ff(\347\340\352)m(\356\355\367\350\362\374)29 b
-Fi(\356\357\360\345\344\345\353\345\355\350\345)e
-(\352\353\340\342\350\340\362\363\360\355\356\343\356)f
-(\354\340\352\360\356\361\340)1077 b Fg(C-x)42 b(\))-78
-1066 y Ff(\342\373\357\356\353\355\350\362\374)27 b Fi
-(\357\356\361\353\345\344\355\350\351)h
-(\356\357\360\345\344\345\353\345\355\355\373\351)g
-(\354\340\352\360\356\361)1187 b Fg(C-x)42 b(e)-78 1165
-y Fi(\344\356\357\356\353\355\350\362\374)27 b
-(\357\356\361\353\345\344\355\350\351)h
-(\356\357\360\345\344\345\353\345\355\355\373\351)g
-(\354\340\352\360\356\361)1260 b Fg(C-u)42 b(C-x)g(\()-78
-1265 y Fi(\347\340\344\340\362\374)27 b(\350\354\377)h(\344\353\377)g
-(\357\356\361\353\345\344\355\345\343\356)f
-(\356\357\360\345\344\345\353\345\355\355\356\343\356)f
-(\354\340\352\360\356\361\340)990 b Fg(M-x)42 b(name-last-kbd-m)o(acr)o
-(o)-78 1365 y Fi(\342\361\362)n(\340\342\350\362\374)27
-b(\342)g(\341\363\364\345\360)f
-(\356\357\360\345\344\345\353\345\355\350\345)i
-(\354\340\352\360\356\361\340)e(\355\340)i(\377\347\373\352)n(\345)f
-(Lisp)898 b Fg(M-x)42 b(insert-kbd-macr)o(o)-128 1611
-y Fh(27)131 b(\312\356\354\340\355\344\373,)43 b
-(\361\342\377\347\340\355\355\373\345)h(\361)h(Emacs)e(Lisp)-78
-1794 y Fi(\342\373\367\350\361\353\350\362\374)28 b Ff
-(\342\373\360\340\346)m(\345\355\350\345)g Fi(\357\345\360\345\344)g
-(\352\363\360\361\356\360\356\354)1389 b Fg(C-x)42 b(C-e)-78
-1894 y Fi(\342\373\367\350\361\353\350\362\374)28 b
-(\362\345\352\363\371\363\376)g(\364\363\355\352\366\350\376)f
-Ff(defun)1518 b Fg(C-M-x)-78 1994 y Fi
-(\342\373\367\350\361\353\350\362\374)28 b Ff
-(\356\341\353\340\361\362\374)g Fi(\352)n(\340\352)f
-(\342\373\360\340\346)n(\345\355\350\345)1561 b Fg(M-x)42
-b(eval-region)-78 2093 y Fi(\361\367\350\362)n(\340\362\374)28
-b(\350)g(\342\373\367\350\361\353\350\362\374)f(\342\373\360\340\346)n
-(\345\355\350\345)g(\350\347)g
-(\354\350\355\350\341\363\364\345\360\340)1078 b Fg(M-:)-78
-2193 y Fi(\347\340\343\360\363\347\350\362\374)27 b(\350\347)h
-(\361\362)n(\340\355\344\340\360\362\355\356\343\356)e
-(\361\350\361\362\345\354\355\356\343\356)i(\352)n(\340\362)n
-(\340\353\356\343)n(\340)1113 b Fg(M-x)42 b(load-library)-128
-2438 y Fh(28)131 b(\317\360\356\361\362)l(\340\377)45
-b(\355\340\361\362\360\356\351\352)l(\340)-78 2619 y
-Fi(\355\340\361\362\360\356\350\362\374)28 b
-(\357\345\360\345\354\345\355\355\373\345)g(\350)f
-(\356\364\356\360\354\353\345\355\350\345)g(\(faces\))1249
-b Fg(M-x)42 b(customize)-128 2720 y Fi
-(\321\356\347\344\340\355\350\345)27 b(\343)n
-(\353\356\341\340\353\374\355\373\365)f
-(\357\360\350\342\377\347\356\352)g(\352\353\340\342\350\370)h
-(\(\352\353\376\367\345\351\))i(\355\340)e(Emacs)h(Lisp)f
-(\(\357\360\350\354\345\360\373\):)-128 2902 y Fg(\(global-set-key)38
-b("\\C-cg")i('goto-line\))-128 3002 y(\(global-set-key)e("\\M-#")j
-('query-replace-)o(re)o(gex)o(p\))-128 3276 y Fh(29)131
-b(\315\340\357\350\361\340\355\350\345)44 b(\352)l
-(\356\354\340\355\344)-128 3458 y Fg(\(defun)d(<command-name>)d
-(\(<args>\))-40 3558 y("<documentation)o(>")f(\(interactive)h
-("<template>"\))-40 3658 y(<body>\))-128 3840 y Fi
-(\317\360\350\354\345\360:)-128 4023 y Fg(\(defun)j(this-line-to-top-)o
-(of)o(-wi)o(nd)o(ow)c(\(line\))-40 4122 y("Reposition)i(line)i(point)h
-(is)h(on)f(to)h(top)f(of)h(window.)-128 4222 y(With)f(ARG,)g(put)h
-(point)e(on)i(line)f(ARG.")-40 4322 y(\(interactive)c("P"\))-40
-4421 y(\(recenter)h(\(if)k(\(null)e(line\))570 4521 y(0)483
-4621 y(\(prefix-numeric)o(-v)o(al)o(ue)c(line\)\)\)\))-128
-4803 y Fi(\321\357\345\366\350\364\350\352)n(\340\366\350\377)30
-b Fg(interactive)25 b Fi(\361\356\356\341\371\340\345\362)j(\356)h
-(\362\356\354,)h(\367\362\356)g(\340\360\343\363\354\345\355\362)g
-(\355\340\344\356)e(\361\367\350\362\373\342\340\362\374)i
-(\350\355\362\345\360\340\352\362\350\342\355\356.)g(\304\353\377)f
-(\344\356\357\356\353\355\350-)-128 4903 y
-(\362\345\353\374\355\356\351)f
-(\350\355\364\356\360\354\340\366\350\350)f
-(\355\340\341\345\360\350\362\345)g Fg(C-h)43 b(f)g(interactive)p
-Fi(.)1110 5391 y Fb(Cop)n(yrigh)n(t)1461 5389 y(c)1441
-5391 y Fa(\015)23 b Fb(2007)i(F)-6 b(ree)25 b(Soft)n(w)n(are)g(F)-6
-b(oundation,)25 b(Inc.)1214 5470 y(v2.3)f(for)g(GNU)g(Emacs)e(v)n
-(ersion)j(22,)f(June)g(2006)1453 5549 y(designed)g(b)n(y)g(Stephen)i
-(Gildea)1242 5628 y(\317\345\360\345\342\356)n(\344)f(Alex)e(Ott)h
-(<alexott@gmail.com>)-128 5707 y(P)n(ermission)31 b(is)h(gran)n(ted)i
-(to)f(mak)n(e)e(and)i(distribute)g(copies)g(of)e(this)h(card)i(pro)n
-(vided)f(the)g(cop)n(yrigh)n(t)h(notice)f(and)g(this)f(p)r(ermission)f
-(notice)i(are)-128 5786 y(preserv)n(ed)27 b(on)c(all)g(copies.)-128
-5864 y(F)-6 b(or)28 b(copies)f(of)f(the)h(GNU)f(Emacs)g(man)n(ual,)f
-(write)i(to)g(the)h(F)-6 b(ree)27 b(Soft)n(w)n(are)h(F)-6
-b(oundation,)28 b(Inc.,)e(51)h(F)-6 b(ranklin)27 b(Street,)h(Fifth)e
-(Flo)r(or,)h(Boston,)g(MA)-128 5943 y(02110-1301)f(USA)1860
-6192 y Fi(6)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/ses-example.ses b/etc/ses-example.ses
index 6155483e29d..9ae2e879f6f 100644
--- a/etc/ses-example.ses
+++ b/etc/ses-example.ses
@@ -119,7 +119,7 @@ Sales summary - Acme fundraising
(ses-cell A16 990904 990904 nil nil)
(ses-cell B16 Eastern-area (quote Eastern-area) nil (D7 C7 D6 C6 D5 C5))
-(ses-cell C16 21 (/ life-universe-everything 2) nil (D7 C7 D6 C6 D5 C5))
+(ses-cell C16 21 (/ 42 2) nil (D7 C7 D6 C6 D5 C5))
(ses-cell D16 nil nil nil nil)
(ses-cell E16 nil nil nil nil)
@@ -202,8 +202,7 @@ Sales summary - Acme fundraising
;;; Local Variables:
;;; mode: ses
-;;; life-universe-everything: 42
-;;; symbolic-formulas: (("Eastern area") ("West-district") ("North&South") ("Other"))
+;;; ses--symbolic-formulas: (("Eastern area") ("West-district") ("North&South") ("Other"))
;;; End:
;;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
diff --git a/etc/sk-dired-ref.ps b/etc/sk-dired-ref.ps
deleted file mode 100644
index 99037ffc31b..00000000000
--- a/etc/sk-dired-ref.ps
+++ /dev/null
@@ -1,2071 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: sk-dired-ref.dvi
-%%Pages: 1
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: csbx10 csr8 csbx8 cstt8 csr6 CMSY6
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips sk-dired-ref.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.03.19:1912
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMSY6
-%!PS-AdobeFont-1.1: CMSY6 1.0
-%%CreationDate: 1991 Aug 15 07:21:34
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY6) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY6 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-4 -948 1329 786}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFB7605D7BA557CC35D6
-49F6EB651B83771034BA0C39DB8D426A24543EF4529E2D939125B5157482688E
-9045C2242F4AFA4C489D975C029177CD6497EACD181FF151A45F521A4C4043C2
-1F3E76EF5B3291A941583E27DFC68B9211105827590393ABFB8AA4D1623D1761
-6AC0DF1D3154B0277BE821712BE7B33385E7A4105E8F3370F981B8FE9E3CF3E0
-007B8C9F2D934F24D591C330487DDF179CECEC5258C47E4B32538F948AB00673
-F9D549C971B0822056B339600FC1E3A5E51844CC8A75B857F15E7276260ED115
-C5FD550F53CE5583743B50B0F9B7C4F836DEF7499F439A6EBE9BF559D2EE0571
-CE54AEC461D354A32E69F39DD0C017BD6576F1E9500DC0328E8AF6EAB528FD7B
-85132A2A9995EB211FCE849216BF6D663AD649AE92DA953C4D520AB9A22D27B5
-6C34121FD688F9E17FE39B939D8DCED9EDDE5AF6DD7DC2297F2A3E1287E5AF45
-0306EDBA3C843FB8234D0DDEC7595CDE6657E499324DA260BACAE9D6DB126FD9
-AAA7368F7164F6BBBBE11EFFFB65660DA0961A97D51ADAF2136A085FDC16C199
-72BC2CA210B330C03F4252A275FEAADC95CFBC79C3B7285C4C7B5C9665909A56
-4176C37DCB569C8EED1B59C58B5EBD3ADD31010DCFD59411FC2020E238A07B83
-2439DEB653AFF1CF197533724E45EDA9810B6793E27943CF51484A5BC7DC61C5
-E97F71E04BB623E0BC9C
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr6
-%!FontType1-1.0: csr6 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25711 25989
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr6) readonly def
-/FamilyName (csr6) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr6 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-24 -250 1193 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A1390082AA03548CCE363896DC
-8285532C521369225C90F80D727FDE65092A0044327885EC680B2ECCDFCCC5C5
-9B4F8AE2D078A25AEEA345A6E6A1D9F372DB3CF2B4AE635D7DB823D70EC82CC7
-1CF7E7DD0D047DC2513344927562EE8FDA9076DD136C4996A22589ABE803CAFE
-BDA907DB1C62DABD22A05EAF9FA8313F815BEDB67BADCEB77C1B22D845131345
-22CF2296D57DE34C11EDF6DD3E42B726C8D60E4A98663DE8F7CFBB416F0A4B01
-734649B217E4E94992F66E77AAD2A7289B5413E7F1DD41B9334CBC2EDE944C80
-D9758E1AC551D298DDCE91757B374D66B6BCB92998411DD3B7E6350480D52ADA
-A0DA546F63DF2A7AE22BE6BF9A78F5C34CBB597DDC4FF03AB527637DE7F3AEBD
-59ACFB058C4833A4A62A9125B4D90E7073184DAEC9D4662987F5CF6D0484D870
-C0FC4A29C03AF2BD159097D46F491069FF43EB0B92CEB9F09E71E089F2C916AA
-57DF56E8F0595F9ECB2B1F2431411F7311294DFA91459BC05EFD5C1C68099335
-7BF9559397107F8ED80B43B6E113CE5AD25E1F980D08A891F2A2C0F3A99B7281
-55128F8A4CC9B78A96D6FE58AC946267448735F669C6DF170FCEBCA6108F94C6
-CF3D5DBB8B2304D66AE30096A7D7E17A5E8DCA207567091B96CFE64BA77AF942
-E51BCF3793EF5B02DBF510FAC25F4E523C54CAD23CF2F472B4B3D42BC66565A9
-F5794FAB132F78020CDAB120A21E23DBFBE16FB32F7A618A7736C5F269691069
-D8B35B291D6876340C4158958C56A6717C5DEEA0A86C9C89D9BACB999156717C
-BFFE2CC56DF4F47B56EBEE1D2C3A118208D9778776104AFFE60A0C7A2BCC9ADE
-FD471CD27FA8318703D497D7F1E2F51B67B9E50D9A56C85EFBED66535792D720
-974ED9168E082F5211F2F607D91F5D81AF63A2DDD31D23E65D3AF936FF194F6D
-B9EF5D40498DB69F3BC87E7E19AE76FC0C54E0B4706FA34621284606BCDAB55C
-32BE1E917D3B3CC1AFCDF3D35507E63D119B0A3174D32B6AB0A05A8F919A426D
-9CB0E7F90458CA6C439565A9AD5648C12F47BCA98599D31E834654AD20E719AC
-64D073F8DA31D1FF07C1AFAEAD34D9A58C9CFB12FF747775D5CDEC0C1D84FF41
-B8EFC696D77D2105043CD29074D828D1E03C1A2CBB80C5112F4CBCCB4A769BB9
-A4F91F4366DF0B44B0480E6D1522A779C4EA84DBF398B540A2A4546216DE7B02
-CDFEAC0DF8D9A35DFD72457B2FC7F051D85EA1437F13ED17E53D5DE0F38A5AAE
-58B077651C978C555A9873AA29F0A4ADDD1B6BC50EA6C95B1588E7F8D6049EC3
-8D9D2730FF086983030ECAE9600D8A11335A186A6FE48DAFF7F663872B23F22A
-C62F5ADA341F5BC0106B99ACB3A1C8268D3DA2C4F93B17749BE68AACEBA9D456
-B3F0B7B3C1FB011B20FDF4067A48421B1ACAD3F6210BCDA6D664361849170191
-7E57121F1D6787DDC6E8EF9022A91290E1534CFD830134126467D7E328E92267
-B730800397D9A384D62460853F56C6C9A634D04E02932EC17CF0F54705615E03
-58A437569FD55BD44A33C29DADE84E385C97F7B788106B018E3C265726C31E4F
-B1509BB80A94E8258F503048C85DC89C7439141A587E13017010AA6DA23FA2C6
-97E37155FA9538B31C4CE0B72E1417382A1A1223828D9C4B2178EEA561BFE6B9
-43AEBE58EFAE10175760ADC68AE5642AD2D413F2B9D35DD07A69B45FDDF2673D
-28B02C23EFD71C08690ADF55C233BDFB3DBD1769138EB92AB13023B5D9C8FFB6
-B0A93C729DCD5E5CB8ACF9F7E1CBBA9B67CCF2A0296C8D1FB7113405844D654C
-33ED93894598563D1ECDD5CDEE590D8063C42782DCEF3812968B7F6DD27F409C
-91A278CFDE7D4803E089C0769EC1C3C0CE1328EA3C53827D65DF602AB6DE79B2
-F4FD4A5C9E3047B07A084E1B48F8B9DB9C8F4F8ABA76A2E1716C8103CD1A7191
-E0DDB5627F65E3475E3436250D9000B37F82CD5092E1638F1C771BE23B3C7494
-15F16719E4C1549FBB4C5E7AE764BF97FC458319AF304B72CC1B73C5F5A0CABC
-1C8134C14F861E325B030719248E3AF17D742D736AD0F07CA757AA4A1BCE50C6
-83C0DEBC1F64D96332769A65AFB4F8DF6310D8DB846431392B63CEB036A6FF54
-410E717681265F811A992B82B302F406614183A9BDBBAAEA43BBBAF8828B3D74
-7CAB59D02F4C41B5E8BB2369CC4BFDB378CC5831AEF9DF1715F915365968A422
-66FE4CC18FCE0666A1F0CE9A202B5F581D252347BA49B5F351EE40FF21F68B7C
-3DFBC1920114CE2D02D564F1B5C398DD834E20E9DC2639E3B7A2935D77894960
-AFB1584B7E0094C9F22D69BDB0F005CFBFEDF56E08790DAD1D3CE2AEE6C90298
-6507CC72FDC0BDBEA2D45CB8544A7001AB67B8B3E9A359ACBFCFA135DC277A44
-D578F9E962F1CA8D31E34D3128AE12E178AF39B18159EBEA4D1D0829DC536FD5
-8C48E955D7D52D1BD6527EE388C1BB2E6A5DADD1E7C452160A5D4768146E8811
-8722D5F9D69E925D6699E7EC2DE2C645FDCA36AB6A06BAC60DE1C355401A35C7
-E287DE71AD3A6CAA532A0DF377C6E02583D6DDECA77FE50842214051AFA0418C
-62244C0213DEB448711801EEF13CF96D498E45209185AB6CEFC9F304D32ACA2A
-98E8D8EA3737EA2F5C2BD6A1CFD08B7E2B3C0285BBBD2199AA120AE737B8B269
-535C20CC1FCB4612EAF3EEF2B49E98CBDF1F71F997DBC89403E7CAFA2F6E2B4A
-E9C90F2FE5FE13837FFE33AB01414903C905E4DA170F12C3F1A11BFCA51049CD
-6A34457EB03EDCE6DDBEA995DF832AD05A84DCD3A672FE6C35556FEB442202C4
-427D004540520B66AD955F2ADC68DD53FD7E9AB3B38DF22D8C44549F06214082
-15A7F95684F1727A53EC834E9CEBDC4C599B0A9A255BE0FC78EECDC9CFBFDB35
-29EFCC293A02D52F20E3EF5C148C1F6CF5BD4FC7F42D00411FE742BAD03AFEAC
-FA91FF2661AC60D5EBEC548AF4B4E0845E3D02AB7C9FC9E68CE7F1B5E4DE1EFD
-077562EDE46E6790015D18C0E9D9A52D5C7D617C5B7820924D99381FB8BF04DA
-5EF1732435FE328FBF8B1DEC60D5BEA45890A2B6D66A7B4B47B03FD3D19D9229
-9D1C8458085C909C125472CBC53798C16AF2C6F44ACEFA2F6CB6C5DD84B648EB
-1E1468D6A89DCF23A4AFE8C8EEA44048D240D392D0CE05C082CD711BE907BE94
-1E7ECE39CB183A185E602C47680AAE88859618761CB8A5282ACE290EAED9265B
-466DF5124F1C78253AC2DBABCF010D960A26E60830E11475B1BE35ACCD48036D
-97EC4867D6AE95F67A563952600952D30DE1F148B2B6950E33B2FCBD7ABE5BE5
-9CFFF37354288D61FC68B3377C6C24749C3B06F87F25D4E35CD717B6A9EF1867
-D4C13E024231589C9E89A3C87AF9F926B329419728A7F04C93F186D16D322191
-AEA715EF468CAE95EF9DFC6B2B69074D10C1866651961A061B909DA1FCABE3FE
-3855C578C953F5DAAAAAC876A4FEA53498B40DEABFF5DCCFAF8EF467CB26571F
-6E5D54FBACFF3ABB4EA0B1C41F237E26667D9DB110A600F0CF98B6066BB145B3
-96DC26800F08437185590EE3D2C080B2A547B51C7A131E9F7B55F0772DE5C844
-C2E8B1F55EA131D16E307008E408DD8A6665C97A01A63AB6BE1B41A158EF2F27
-348737DFB0B31ED64D5EB558A8E0D99478C8A2206FA0F050ADC736BD32CA0339
-D0305441F007C7DFEE295D6360BD4DD34FB25F2A07F3B00D2A4B3CDB49F021EA
-2DDC4D625F7CA6B50DED913ED0643F556A686E46BCCAEA641692FE2E996CB21F
-33ED78F3010D51EDE32C0A0AE3491FB91E7AA05D015A9AEA3B727C4EE45DF853
-37C5E0BE05D272C3A0C435C9C1CB1A1966AEE7F1687524246D409B0954971282
-53F7661B5CFFC8480E1BA4C039BF214DE3C7A1D7F0DC372CEC274F0945BBB948
-831DABEC5825C95ACD926B23B2EEEE6ED531B27DC3BFF41EE7554A75A0EA4B25
-A3461ABCA0C1558DCC68D8BA7AC6A05D0BC2C32CDA016655D87E2CE0501AE6C7
-D9324D637A9D70CB9EA0F15667B1730C0DA56400298741857E6E6A426E9CD5DF
-4F07CB4E882875B9DFC47786D1DFCC0C4EBA6EB5F7B890B2904E3FC00C4E2FF4
-7282022BE6254C35FCADE5AF9B6BE80864DA76D437D0284C3BEDD35B2209B5CA
-7A2D69EF139C6611D38FDBD46AB7BEFFC13BBBD9FC6564BC859B531B848A7C97
-8DBFA4CD4C98CC8D3E170955222011FA738A2A940B3D71BF0A18E4604FE2331D
-96588E9DCC91F026602044835C12BD112E7267DF7C0B674D48CFBCDA7B64B4ED
-1C16BC6F1A17AFED38C8943994F3E07771471A950D91B3C99F1B11D85A5142E1
-DBBDB2D142CF48130AF3E03F4D06DA816AF0914D0DBA5BB270AEE4E66F9C6BA3
-A57B1A68C3C0088D2248309C0CAEA2D5AF93F1734201F7B4580DDB4A4277DD0F
-FCC56F43D4B1E5DFF341C8952A723A40A02DAFCD95E57D975300484F68EF3507
-1BFB61E4E4CFFD0DE5920B271BBD4E3CB91EF76D42AB30427CCB980FA4736497
-20E8A12FD2E0B4F14E55482C99272941BBD7F75667929869C1840DC4E77B7AFC
-FEFB1DE383AB74441B16736487C2071B29015C52D47E1DFF058A4393BDB2F07E
-1BE759B8FBE39B80669F272BEA0ABD7C36D94C5A53806EC6F8C9FD5B68560815
-2C7933A78F7E4524C14B3CC0BCF25D44B8ED70E46026C7959E1CF055D07D8871
-8C576458B8C9DF424198A618B8E3377631DC6CC7405624160EA52171B167951A
-3234D91595AEAFE425F31872F11693FA0F9B1F09C6D2E19CBBC66EC4543A90E1
-D9173ACC94F7FE489010109CE1EBB2AD8E2E807C62875867D8FACC3805650253
-21F8E64CB5ABED16CEF3FC29936DB8B06E015C041198B700B493D274E2F3CB25
-D53F5D46DDDFCAF86C876B3FCF5CE00875D8A6237DB1247199AEFA377B4BA19F
-AFD56AD2FD2A463800579DAD33112DF863E2C504CFEC293D3F30BD350C77A248
-C3D0CA21D662F665407A19B6D0DF95FD73F01E530440C89924F0C2854EF730B0
-FEAA26912851247A73E99C0941CEC44FBEAA49275B96B42F61C6A446C3227562
-7751D752F3E0E8C634B129BD953C44829EB1876ADBCACE29E10F0948BB931A0E
-3CD1DA2129AA3CD2CFCB25A59D581F0A10F1813FC4501B3C97CA05EA3C7F69BA
-262903FA7EF879CF03FC000B23E09E9AAE09A022C0658C73730AD5822E0B989B
-A845ADFDC9F83879A747309EB8B819A5F1BD54C17DEDD16B24DED8A068516060
-4E28D3559B53947CA1F9FB1DF17370F5A76CC796DE2DCB2497CB476C73063977
-CCDEFFEC5940BAD140AF5B8EF887C034E9EB5A11DB0CACBC36D91B5756E43CC1
-3F873330B15EE187C3DE825D284E81FBC790DB5FDC8D4387D970450EF2DDFA09
-74F0504B90A0A9A643AF661F7670D4054DC3D1A35F5CE3D0C6308E33ED883D28
-B6F99E31AD5C291577CA6018F34CA0A69EF627F95C3ABF760A2F29760A6C8CB5
-2339B9C653FB9E73172354E5F9256FDF9B70168CA01089017C50C17FC5004AF3
-C906F760F7D05D0AE20BD3ECB7C118A9FA2022606848CA9D0E659E0F077A6293
-3F6E8494CA79BA412FC3C535E5DA9BDC2B96A336CFC803AE8B7CDE2ED42F9FE7
-236C33353457A3387978F50558A639345FBB8BB5954A86D855DBDE9004BB24AE
-6E3B6356B1C7F7EDAD3C8BA35BD02BEC40E17FB92E4E76EBA9536D8750BB4C9B
-AC67FA6D253A6384FE9EE3436EF62E620E87B961358B9F09CD64C864FC9B4CD7
-4A774CE71301176885DEFF3437BA9549B4E7FA3B9A46EF380C42154131482854
-EBCEABA59FC594AE632131479D682D88982173C51E64905D4131DE51C3D241B1
-51CE0B3EC3388CDDBA6DFBBAB2C2932B597BA3F10BA2FDF57B2FE8FBDB3A89CA
-B3BE45A42742D3343AAAA01C0F7A5FB1A50BDC460C9736867C41CC9D10F01863
-110AF2BA750E0920646FDD4A30F5274B295C915B2E832D01249146A9EFB7E30A
-897762A22C1ECC17B3E29294DC306A27944699DAD3759D838E75435D7F52A1BD
-8CB5ED924328F734A535193296AF4CC70AD6422E8ED3572B8B104BC40A28C8FC
-DA9E9B8B47FA9A94BABC582D3608BAE0CB94C2B67DC65ED95281387BD40B294C
-2FD516909ACEDE90991C023FDD3C5584EED0CBEA055A0221B575A62FBC5ECC72
-241D6C80260A4355B92E92EF644257C00E13D82D47CF0740CE71D1462705FBB3
-3E8F8DB59C787154BBE9E0FC791606BE3BD11537CBDD858487183595255E3360
-00EAB3E593AEA4AE635D0DCDB7F0AD2D95ACC4D6C37BE01762CB5E5D728B780E
-14A139A7F5E329ADC6C406A266AE90ED6DFC86D68A417ECB7A486EF0551FDFD3
-C83793A4B3F305D380DC56FA962B5474ADB62DEF714FFFA498467934E95BC976
-BE99035AADCB5250A5DD5FCAA64D3601BD788C35C214058AAB025DD3B77864A4
-76BF7F562574DC4466B23C7256246BBEC7E47419D3B7924AFDDDB7B605D499F9
-815D19F8BD8797AAC599DC62F2B3CED680A3860BCF87428A993BDA11643B830D
-ACC0D0493DCD72AAA9ABA51A8514E91EDB75DEC2378D5710332707DB8E9A3C61
-A85D1114E88D89CBDEFD3BE65C215292ABFFAF211CD17605C4DB85B9AE505150
-BDE896444F55C7A15BFEEA608D8055583487B1DFB5E831E35AEBECCA99EE9348
-2A428FF4DCEEFC005FC7D54AC750E1D228329718711AEA3AFCCFDEED13884A00
-DD02186AD492BE03EA4C836D3994CB345511AE8A0981753F77B562BA3A0F0703
-45EE012D273721070B5CC63453E78EC5B40E3F1845F08AF780885D5B55F7552D
-385F2F22BC86C4D37CFB2B8D43AB30B071DCF1FF032575BD87354EB680ACF012
-3881D4428F9AD52478B55858CE48CA964291FF97AB5CB46FABB04EED462AD1CD
-07404089DF52B923E492CFA2120C11DFF6156FD3A9FBE7B7AA4BCC4ED3BD4EF4
-E21200516D96DE372E8139D56C3F76FB29E42FFA6531AFCBEB2F6DA84336FA31
-8E7028E1E0D828AA135620FE30198506A3E094EAC140370D6C35293E816BE135
-96704BE5E4D6D6C83B42F91CF760D7D7E5DE20F569B31A3F49B3444AB5418B71
-9F72E599982F16AB21C83370BC1B3F9CEF750804FFF8C251368FB57850D5C49D
-2D49E43890C19232329E930ED9B8543DFE943F9C325467716C1CA7B43EF7BD27
-E0CE660DF3E6EA1D32E1C51F1C1CC36D273F1A482C9A62A7983D59C75EAF354A
-DBD703801513C471BEE721C2C728DB77658CC64F59FA9606FE85A3955E956EF5
-0537F5DB54B18E15622FC1187746362ADAA7B93BD0B0B3C1295FB350430E00E7
-F8C852467D0035394DDA11ECAB23FBCEF8D8888929C41577561DEC1D96D36CE9
-F45F0F17674E9C6C4133B36FB19936DBE5BABEE039C9BCD0AE86C9F15F218C39
-0CFE18EE9F26D4E0188085820F87D2BB8ED4C81191F36BB157AA2D97FEF3C500
-06DEFE2635F4A45F78FE9AD3585EEEB3F10651733DD1F4808BCAC418F92A7DF3
-B2E1712FBF5FF569E4E930E70E054A22F6862CAA271470C9F4358FB6CD1A3D3F
-15048080030F17D92DB7692257C8528DC80C79B145F29720F9468CE7768BFBAB
-5169811E01D06D43DD8A3B0F3C002E79248A48445DE4844855326A7E58F54876
-F9744E723980B6A61907CA9A13F4C12F823ACFC8F778E7089843E11216782D8E
-89D4875DFD01BB67BF85A0692BE5048AF1D3EB1CF8C087BE6FFFD60822CA5B47
-CAC2413F7A4E8A0DA4CF76C340578918B40FEDE73C48193391BE10D7F36019A2
-732B902C426CF80FC98581251100867B6D9BB728B3D010B882CDB07CB6F9FB22
-54F0B427EAF1EDD1FAEA5FE3AD156DDAC67CB8202A4E0D0AE5B49F35FC31E6CC
-87F00E54011DDE86A32DC844D0372FF2430F552545D648138C0502F46D7F90D6
-65736FB0D53F90EAB2DE0ED5ECF7C179FE1D846DF9256A669BE668F9AF96EBFA
-9EB14ABA4113994A6A56FE7FB3E8CA25DDD95273549052106DB8ADC5818DCF45
-841FC9336207CF67EA835DAC1D2C3918BD570C1E56B63D563EACDB397F28E198
-BE36D9E48CC5B228994866F68F858F7CCD1283668A9A949C99F3DE12F975EEBE
-D273BAB53FFDC9915F3EBBE6353C8D74B2E4517092D9BEAE2420942DF0074A69
-30A696E4B7FE4491AEEBD05385FE95E0003E14907C1BEF058D6ABD417CFAC682
-AD0949E6B0AE41D8F6C2C76BEE7F696E8FC623280F96DC4BDFC33F73FAC10265
-49F98BB4CEEF2676279F4FC5928FF7E51C7AE464377E29873E4E8D3F8A384626
-F030953654FD3A42A1127E7EF9DFF57EDD38F7BF4FC146A755FA5F6C810C706D
-6A834B32E68505B9E0726624BA8B7DCA96DBDD8F2344386260478160B0F3F85B
-E09A8E3AC4ACB796BCA6383A47B70F98FD798D6F2C1C385813EA7B3661D43DDE
-7B3C0C6455785420553956EF58B460CCC897187847802EF8DE9FBD23934FA8D1
-AD37F59724DA239776F0F513402D86060903C24105BF537BB2C0BC4D572E6D4A
-144BC35F7C1E710745FC4B02D6EF02F607489543C30B3E10FB765A73A9571845
-549565B5E4DC13EA259603958545A964C38480EDDF58FB409FC43A2909662F39
-5DE08816008CFD770B8A3B7517CBE72A5B23E5D6F96B3D6715B81F03190B3284
-E72034E0F51272427A6DA9C72CD39D8E8E5BB13D232D4D2CD741EF2550220269
-80C4B614FDB1972052A427C723FD8F774BEF5708160F46F11C702E4A35DD1AF1
-A920D08B6B91392293573169711A8A306CC5FCCD1B53B9D7A3DAF2D9911028F3
-3EED3A7E7BC346A70B919387423C91E2813A7A0892AC99BE0CA97D85975348B9
-CEC6BF3EE2BB656506244A9500A94A6CF9FA44AAEA2EBEA1A0DC7414E8B4708B
-1949EE5092B13881877F5F46EA92F3A1988A2C419C6CBA6307EA93F3CDFF149C
-AA132D48FD0818529452C8722E6277F8AA668E8CCB0D177248A00282A0316550
-2F6E96123B03AA20D8E7BEC2618947F71BD405BA3710043C4B627E211113F14B
-ED4AB1117B0A48E925A884F3730D05480984FB80B30744A528B3653F8CFD50B9
-8753EE836F07373751BFC86BF01390080306C3CF564419EDD4D9102FF4656529
-2D88B3F816CC70FB0CDEB89AFA68F968FADA39B23321BE4DC083D7643A6F4ED4
-02CF176ABE73AAE3FAE9BFFDB8E67CDF56330FBBAD21CD1977F5746B08193528
-A23BE8C98888DD658B8655362781AAB8AC2636F06838419FF581FD66B96FECDE
-C69D818BBFB8261DEF801EC40D20A6B79032F4B007C0D6F6907EA457731BA2F0
-60FA71D8886FBABA4EFD51998C1186C4BDF06CED2C2D7FF23250E48BAE3A8AE2
-ACEB2C0D0B37E2C7DA24CF6C43D76D4EBCCF409B7C7E4BC6323061703A5A3EA6
-B1A53EDACBD107296914D927D853C8840D4CF1D833741327FF21FE9BA51A9E32
-C0E97E86F03E9671E32E143894B1F05DCDADFEA60B24655EAFA58807909E90BD
-A5988A86C9BD38E0B1CD98FC79D1ADB5C3ADB78F285A7A314A72DACECCA0EA35
-BAFBB5EAB396AD4729DCFFA5264DC0DD86157078024A590E6067A6F1B5B2562A
-D1F15B3C8B118C15F07F6AB0BF1D9190D30976D88EA982E57D2E202AE26CD9BD
-00FA6220805E6D6FE5639B12813C5A6038851299DF0BD94A205D668CE5144749
-F71A18F633BF283DA453714EFE14E5FE869E524E80BC04A0AC3DEFD93B3231CD
-C88528CE3133EB6287EC0226A4DF0ECD42A13C0FD832320C0E29318D6C237D55
-AEE8B077AF3A819025EB88B94A6831B16E7BC10957C5E7CDAECB20BA23241E94
-CAC0734555505BBDD55A973A06A3C146A21AEEF899ABD43CBFEBC105FFF56C63
-7CE50DAC6913230A323201A81E101ADA71FAD718F35C74406505C62A605246D4
-EECB52D70D5E07D10D13CF303466A8A5198D02485FD445F56B2D90FA7B039711
-22523CF282CDA36BC0FC3539CBAE0E636094E7A37529A026A5AAD5B292D6E55E
-F16FC9E442DDEADEDC307BBBAB221CA11033982F971EAD2AB3E2A0C47805F059
-2333D6C473E1F5CCB9F8133AF91B63A2F3F6FE9FB11EB74900AA2D20C007DBC2
-681E5CF1A025DD2C25268B441B02911492539028345B03EFEB64D2C1AE9CA7AD
-94472236D7DFFCC081197351701145B365AB622CC2E5E09A17B357BBE0B0C523
-5A8D68AFC00BAD865B291678A7D9F83909B29516086D0DD4434E498F7CCD0645
-F327C654165AF137E197B17E6D37F90224F3568706852AB7BF5C78AC69A4C0F9
-23F18949932C058C8C21DC52956DA498E749437B69582751E1E12EB46231A450
-BDC05A65409630B0C6281534035BEC3FE0F3F173CA94BFF7E93E15F66D0B3C73
-F784C00BF1ED61F36996FDC82D0C9A11E1B3718675ABE286429E725A9F383B9B
-168F31734B8EDCB37E82C4B26C9A8553E6C454499CC89289E6045F8810413E9C
-4406391C6989AAA1BE34224B98C2EC4D3986095037158632C17F8D7A510CEEE0
-1C21F1C92593B2066AF4B86DD30E896D548C88B5946D1408D22839103C7A0EB6
-7F3D488173887A94B4A2B367DC8C67531286D131A1BDF35D6041EEAF1A086860
-22BE71A2A535B6264EE70F4C7CEE0990B33075D55733A5BDE0C63499EB9111A5
-ED5DA484D11063D8F03A2CEBC6612DC43D8C22913EB0B8E467B02A15A7595A36
-4DCB8AD0D74CB5493B59EF02B69ADAAC5F3CD7ECE0CA793A378C97E07C37C7E9
-4E5F11CDE9DFD0E61F9B88968A015CC4FB8D7966200C48C6EDCF59AC60CA9693
-74267C4A067BC76F8C0A4F204FDEB9D91CA4A69FE0E30C7158D44E1BAA50D92B
-1AE92896CFFFE56EE0AC571C2AFADBBFE59F1F23D42DAEE552D4D86F00B48F42
-60D7834201C7CCD9E52A7AC3029896C251F52CF3BA23451E8A18A383411071FE
-B4D214A45F297C0B9DD06578ED375B7E302B3AF410ADF197CDE49A0F58B40CC5
-64A4E14453FFB0FF7B59292AD7A63FCE0239FFFD0EBEA23C091D0760693D2ED8
-9A0B66E0125606F15424D3B3D82764BCF6A2A2BD399BDF0EB5B38E4980306D74
-558833268726829CC7579DC4AAD6E9589EB1473D8C289B9E331EA905830D07F8
-042B642F60B69D66B8D2D2FDB948BC16D16344AE983FC67352292C05EA1F5E16
-18DDA42173B00390985D3F8981FD33B102D37BB98B56A4BF76A17DAC639183D1
-8CA84E33BBC5BBA5D41821DA254A5BD4A8E8011D766319E001D2BAABF097556B
-8660001C2A9938E1A08265A3912BBCBDE5B1A592EA64D1F141CC3CD437194CD4
-5E4330FFD0FC6823469A618BA4B5C0E35DC27DB79E90F6F2B563CBF7E1D86A63
-6973573D2A9A8357C4EDC4D4D5C9BF56AAE4035E93B41B8D0807474E54035A88
-997BCAAE58A4A672E47D0F44C1EDA3C3ABC7AB8F3CB4F11AA89C23B00295F763
-38F77E9C4D509C18D4B2DCAE5A26A2E2E12FE603C19C220225A78BEE4A48B371
-935761EC9E601671940DC7E0F7819110E6FE16736AAB9EA8D395ED021957DA95
-5BEF62E5BB3B440CCC5926CA3C5652E22D9DEF2EE4F39764565A505704B3F80D
-37D58ED65304186111BF95C074E3B7097B953E24317BD119257C16434D5CC75B
-C9EFE5B27C115CFA047BDA6B41BD82D7359FB6EBB2F515B8C6750564C316A2F5
-E515EAFA9E5415D2474A3938F85A0D7B12980D11FA95AFCDCC23D131364CC544
-D10B3BD0A4F18A6EEFB79195F7566BAEB133847422802CF3234784FB095C6BA4
-B243A6C25C7BCDDD647988E640036B2662364B87C77E57DD501A017574DF1A32
-843C71FE7091
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: cstt8
-%!FontType1-1.0: cstt8 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 27102 27374
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (cstt8) readonly def
-/FamilyName (cstt8) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/CapHeight 611 def
-/XHeight 431 def
-/Ascender 611 def
-/Descender -222 def
-end readonly def
-/FontName /cstt8 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 38 /ampersand put
-dup 40 /parenleft put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 50 /two put
-dup 51 /three put
-dup 60 /less put
-dup 61 /equal put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 71 /G put
-dup 72 /H put
-dup 73 /I put
-dup 76 /L put
-dup 77 /M put
-dup 79 /O put
-dup 80 /P put
-dup 81 /Q put
-dup 82 /R put
-dup 83 /S put
-dup 85 /U put
-dup 88 /X put
-dup 89 /Y put
-dup 90 /Z put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 123 /braceleft put
-dup 125 /braceright put
-dup 126 /asciitilde put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-7 -232 547 749] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E61A0E1428E106CCC2583525
-72D46D12AB29122B2F73E8A1840E92A8B89FC7EB2DC186823768722F16340C65
-6DD7DC66340FDBED5DE27349212038949E02A53C843B61C70E1DD9DBD0087F65
-15B0F0D9BAE4BB4E41E67AD2A0627A0A172C22D63B4821EDFBCD61B658A40308
-132441266CF3C9493FFD6F22069801D31293B9BE8D89CB818E8ED600661D5183
-2E556F2B3D05DC1D4373F9890892FB7AB653D27E2633AB532F25D6EDE1857DB4
-C1F451A24EA87B44C7CE899D4978EA02D57085859C57CC3F1179AAAFA42490C7
-DA9BDBB4EDF14A2F18DD23B43727FCEAEF202CA5A65234905E786170816442CF
-D6B62BA8F62C10EE680DE45AB210E79CE579DB97E6727D763F4B9054F443CABA
-76BDE6AC53B3DB2F1297AFDAF08ACC65EAF52597D52CB237ECBA29A18AF0C0BE
-8FE6FA66CCEA594306E6F3AE4B9E21BA245325E122B85E38C3DD1AAF78869029
-377FEB743C8E393B1CEBF5118FE83D9F35B7F94FED7CCB0368F5D961179160B3
-0060975A6E3A783ABCCE964A7FADE8A5C8BD5B2039247E9C018E827AEA49A311
-ABCEF022A409DA1D18C821DF8961891AF8DE1AC3E4C4F41F17B8E5661B7C44AE
-308824113BD2D15FB2FCE33EC549E4770E65CEB695D0FE7B5377474B61759E36
-E4C91AC5818A3328B030125132AC01CE1D523E630391C1D8993B4170AD45352B
-6905F6E2E60AA156C0F5111580622309D79CF79EA745830144CC8823B4B5B330
-54BFC451FD8CD5FF0E388EDEA82764535C50F417A9DC659D8326BFEC6E5CA9D8
-D34BA3C647BFE0FA7C8FAD2E87A658F558B8F627C0356DDB161520F1640386D7
-4166B19F03C8024D14BBA67CDAFA3504FE5BDBF8A19E93F313C9B5C83296F632
-3E814A5F5427196DB2633B363FEA67DF56AF73A6F78A28B81CAC57FD11493B1A
-9233A404A1E8CBF2E5E4519A97070049C6E1C389020DD3219ED5D06C044E0F30
-DF4D4B472A3D0BE8B2B554F7244ABE708803E370C11E70298B1AF1E25F2D262E
-4134F7A239BB81496BCCD89F963783CE73442D4305E9EA8D2D08016BECBCD25C
-2E7FA6266569E55664DC7C43695B14B6FB573136E8E5B2D0A2C5EFC1E56A9C55
-021EB6A716D317768EEBE62439B6714F15EAD6402D6CB18772B202DFBCAF4A72
-01C041ECA0CE48C2D458AC0DFBBF9327D4566CD5AA138B21C0578718629C8EF4
-FE605BBD9FF46DA1FB9EBE950D6CA66A02CB7E640DCC0367D635E5CB62A8A35A
-6FFFE390984900CB1385D1C5B708F743895270823715BCB69EEB8D8F36874F51
-A0972B68861EC54632209346594DD1273BDB95F5CAB8B463780B97017348ED2A
-855AC367B9BA949C4F6CD562E6A4D8D49C133D5386646F9428D8AEB6790A33E7
-CE46937E6490E148362FF3DD636512B9D90063425D1BCC351789EBB732209296
-0B45B053697260E744D820447275668126FA78C3DBCB60B0C25230F87B8012CE
-E09068065FF335343A90FC6BD7E62793D1E77DD557CA6169F80484F7151CDE5C
-47305AA06889BEC69CB34B6678202DFF80A0B3F0D345E5C2D0EB04DCD6A378E7
-BA57A2A5EC3F26111FD8C0805ADAAF0355D0CDE87A01C7D8DFFE2EC6A870E173
-898C2B3816CD777C55A7D786FD2BF098CF4C518C728898977D97AA5BFD152219
-E0EB9D3DBBBDF115AB3E253060716D62B9CD254DAEEBE134625069483B82AC4D
-2730EB6AC36A7BA36DC79D8C49FAE2E47F54593A950B869CCA9C4ECD4E93F465
-B9D4513F8BEFED9EADA808A7270CDDF26F3215F0D11373988598C514F9F63BB3
-D49E5F4D91BBC63194EE89C826F9AA488BEA86903CF6A9975D9E2977407D3FA3
-CFCAC175E2A0FEDF042203C88CADFFC1FD0D03FCB765A3B53516836CDC340A8B
-07456DA4DE5BD8BE4E0CF3262F621FF6013F3814961C142F8B4A2E0AC9FC9442
-BC9A4DA90D056F7196DB877078B5A479F2AE9C206BA0CB36C1EAB352972F21BC
-9EF53807A42EEAE6F55CBBBB99E7F6CAD9228F9C69F0AE42C1290457E74179BB
-E7C44073664CB4714C8E56E02D4BF30458B111E0611800C761981DDBA311070E
-E2B1F37775E0C98009709E5C92595B51B5C0D397DFDDF558AEA81C600EABF0E5
-BF0514311C7AA66C444C3D13EA48DBDC5B8ACB12F31BF6225EF1CA6D52F3DF87
-07FF7B7C5D60629C831578D703B70E365E05BB1C166BC09AA6445D149C132589
-12F4EDAD89D1364AF705F5CAFA2A676B4825DEF98F313F611BFA9FA840AE88EC
-AB4B29E8C61162BD9ABC7AC2540AECA52D55A5277035DE68AD43B0A6D5B420B5
-4552AEEB397774E63006D34992E1755C5D0D51161C46FEEDAAA059CE145FB14D
-53270F269340C9BF94C7C1717892327547568B8B5D339664A59A689B59728260
-CF3FD421110CF5B6852D46BFF6E57C26CBA870D726BF73B04A4F83FADC8973E3
-071F7AEF640E838D64B9DEE76C9B9A45E3A6AE564D65D4A5E8D94019E2860283
-68D9228D386BBA73286977CCCDFA092C5DD868936F9DD875BBE83478F031EB03
-D2F92BCA8EDAD6D72341D7A906DE3DA431B65B4CEB8CE79E3AD78BC939EF5671
-FF65A3C67426AE4E49E45F4C8154420E0647883761376178AC4167D0381EBEBC
-B59A48E2B68AB15A2F99F44D6C6D6490CD60878BB9040DFA6A28DCB35F10515C
-CCC43ACFD4E5B75955D307F71FEE3DF10A386B85CDF5F1033633C6EC369EBBA1
-5A415AA426B3A8B48CDE6F754A7BA8072AA99BD61C501142454872E8FF69CDAC
-E63350EB72C2846AE2991E936B1B1EA4AAEB47CFEE542784F5158301015F8D10
-5020956399AA8FA4953F632EFC02A3738297871E55E1B953F0A4C6CCBFCC2361
-261ABE986A2D9BD1658B4C5BBBA208BEA23F717F0314DBF77F264FE46BE92831
-3455CAE4111E9E291E85F6774106B2F9D9339F28FEAB65B95619B07C150C3E74
-AC9C8BAB4ED7C35DFB3B3CC0BAEB67C0D49AACE9B5128E25E471C25EEAA41B8A
-F4E6043DCFB80A35FB7741F0B76805698574941039A897A703F109C6B5597919
-C3CE868E5871466E683B50088A70A04DB9571EB7A5947A0BB2461F222E0D1307
-CFD27B25B505F54CE38AA58573934EBB706A72F13D6722D5CD68900B196C59A0
-D457469D5C43DBEC8EAFC88F91AF4B363D6BA39D11515D446830E1A51777D6A5
-4719EBB6D0F2B04EFCC53AF6BB70CC5B7FC88D74FAD1065CCE7BE5C545A11E30
-2E66C05AF6354AB13CD3317ABF745FEFD8E38DBA4D1AAF1641340B1E940679E2
-9FA8B6AAD0D37EE6367E0E7D37F4F30629A54D3438BDD89D6C4EFC3C3EBAF606
-0508ADBF71E54BDDB4B58704EF6B0554DD6221FDB431BAF080E6404AA9E2153E
-FD34D3DCEBD3B1B7D0C80AF5EE4BB255BC08C19B1B06C7737099922BD287ED43
-BA5DECAF672051F967E0F3E9C0AADDBDA2A2546B6A56BFFD0557C864653D418A
-4B1B7F87336494CB026A466F8FA6E492D1CDB9465FBAD7107DCC537D7F00C261
-16AB59B2ADE773E9D6E386DC1ABF23C612EC78058484A5E1B4D293C8D88C8E54
-892CA442C9DF3A16AB1EDD3A673FDC573E98215AB675CEF4A3CEA6EF11F1C4D2
-E643C433E6F846C5240E85DD77E8F55786F3D8219D851A4A2EC3285A8921B640
-AEA54076FE2CDE81148814D5B44994BFC8B1BA8AA0CC29D55B9D419671E75093
-86068AFCAB7CD34DE7229D555F36129AB6A006EA7B022D66CF9054994E55D1FE
-0194638D21916C7DC85335EAACEC28D880D56A577C641CF1EA3519E13DCBC518
-42199B2626C95E503A4D616A255D4189EB395C5B9D5E421304C3720C90119121
-DA3B71761B7D3B88EE8F9E13B645DA1736F6127AD06F9668B437B80B9811999B
-425AB8E41CC713749D0069700A8D4082388F6B951777D0D0EF327326A545DFE6
-15734679385D5B51EDEC0E627CD66320A3C8CAF528FF63DC0EEF4EDDA1708F1D
-54DE66CC8689845EE2C8B199E53F2176C8DB8C16871A95F1C2B75623E495DDDC
-DAC40B2F0C2AA5B4BEF34E85F7014C942EB82771ED07399426C281E6E724B4F7
-9EFC644FFD0B36835D9A29052E3CC2793CCDC387FDDCCB0AC11A01332DF05D4E
-41FDDAEE1AFAEE91552789E9FCD645FC38F78E6354F28F1163B6E5F808A032CE
-296B1A5F44419FB8D34D183446B99A294D9F09E7CC3E8CE953C6971BFE5745EE
-6FCB7CBC1FD7DA6CF93FC65651F89FBDA2D3550DD04C1322F1FCB570F4B5D9E7
-C3162603874B40A18C9B75D33D50FE11BF835C06C4ECFAAF22F9087AB241C594
-CB769CB7C0E2396AEF11C56614DB1A25133209A780AE81C2829CD20EFA1435EA
-79F444108EDA18958F4F7AA04FB1422C0862C2DA45F6F938F350D07E5CA0229F
-4544185723144F9C57AB2A181EEA5EBADB6AA8354A8BF652A2EDF2E7A6BB9713
-04622F85744C6D8F818C4E32431CC4378DC69760BB773BA6D6094172EF07F4BD
-5ACEA4E89A41C2E6795E238A7D7FCD4C26C33B5FA65FE89153F7E7B630E4877E
-84A05776358376676CF0E11430649DD800737B8F1C91E9D822059DADE8C2C0E7
-89FF613D5B1CFD79621A7DAF5652B54B8A2761FA1C545AC80EF60C77861023D5
-0E64B65D1ABC28F524E92068ECC137E5A250F8C2FA42E9CCFB122EA19D4D03B2
-EFF72539E6738CAC2EF2AB949DE2228358EBE2A6DA9A6674DAAEE65DB92AA466
-7590B88165E9484AC4E7D9C906966AF728C7B55AE1788CBCBABA26F77BA0F226
-501CA47F81B4452197D80551834983FF7388342F85525211B5572A1E057F9E64
-6F4B281AC073401CEDEF2020E990A4AF3020F33DF136FFBDB087A4F62039A3B2
-BF1A96553CF5B0165FAC89CA21EC6E9A23F8EF5ED3F57EF1DD35C3E340D74A33
-54221A264176C1676B0A1290B13E48A043E51018666077F171D17A9A62630E33
-72D873CAC592E127EB2E2D2948A7E990674F9132B38C49BE15C335C661311FA5
-C52F446427496227B6AB973A9AE3EA5D5FDB9C4A24AE4451F0F7A05B48140B48
-6301522D8F130D5CDC8DBDD297E0F179B238642E2436B5DB98C0DD43D2B50E7B
-6BA30ED317BCA71BB2B109E70C982ECFE62821D38619B31FBD0D3917628C4BDD
-BBFA43DDD2D2AD28C8709ACB321570A99FAE28989412D5E3E8FE93A681207D28
-9BA01C4388EE00A94E09894B7738876110397D2D40643EA96DC8D0C780C22DF9
-5FF6BA8F46FCA42934A66CAB425270DA12383823776214FD2915C26E0228D948
-56065D62BB717E150A30CE77E8ECC4A1585CD0ABA26DC36231820B9057D9D270
-5050D4C18D22BB970709D6821D6F76F9DBC16B2D1EC6E5BE6C88DE213DE46A5C
-220529B9FEBC3A0CA8D176EC0D74E32AA5CF7345B8FF8F4CE7051C6D4DFD66B9
-EA8F8BC928A6421A0025B404E263F49DB7C54CB7C08DC783FF10FD24068BEA2D
-B0AC7AEEA6386EF4C98DA309231BA3EE83FE788EF7381C7ECEE3FAEB3779CBFB
-E51AFE29D5C49230BE72ED828339FA5F1FE9704CF831345453A84072F3312CE3
-C066947E9CBAE98806A87240022378C2D31F9257A54B0FE5D020F5BC0EFF5479
-CE50C2B49844B0B25E0B32023C7039A746F092B1775D7780DD67A2EF4A147439
-E7E1B3D4FDB73762EF27F5F3A495E60D2DC4A54FDF2AB3AFC054CCA17DAB27EB
-0B30EC4D0922EDE2B081908603E20D88BFD20221CAD443564A070ADCCE970A17
-7BDB1BBA43F4A1FDD52B849E516B1FB2EEBF91D2E6B6D1D4C10D2AF4EB2CFD63
-78B3C368414F2BA66D9D3422FD5164913495FB75B6DF1093A7C238F313AF78F4
-E48B4248C0841F0F4D1CC2BA47BF5E06E133BCA2323F7A9F2C694C7806A17977
-B83A7A714B48727D291325482D96220CDD4DB1A96089C693E57E275225472B9C
-217B6EAC289B8EBBD7273431B1BB1DC243D4B2CF94718C0B2759313D6551E1AE
-4C6D3A92FC3381B1F7E61ED04B063211379C4B88C5C6F22335EBDC24CAD8D9E5
-189A22C3D6F54428F5E2FEFCDE5C0EE2131C519A0DDFEC8851C02D82B5B48265
-7B11A40E8793300CE171853FD82874E09D814F5833F04441329C6650B0B7ECD3
-7FEC743EBD43E7F88542C389BED47D31A10FD8E02C23FF191B9F3174113723DF
-934E3665A5034A639C17B3985CD6D2F1CA289146581EF6D1BE3717EBC7E6A824
-C3D2290BB60244E163D213FF98A281FA409513AED35F15B4097FEFE4C3AACB03
-613570E1D66D29BE3D14AA5F3266920FA088D33948D96BDBA0E3980254360DF5
-7A7E1836BCBABB7BF9C42FC87556F8D08DAAD6249B65AE106296BB7F0C36A86C
-1A7DC23EFB77AF78D006DAFB6A703C6C1A16EDE52BD2B01A4218AC671769409F
-90D13744FB1FBF1F2EB3DA35F5B0D13F3862D69EAC091D48C57C647F71A0D718
-233F6A7950A610E1CAA551BD702098466A9ACF3F74FB64BC0DCE6C952DD26739
-857084C96302B0B641D425EFE5A2857DC340BFD3B8ECED763B298137E930E6B9
-A3C2565EA96CD52BC01A2959B21CABEF6DF7837DB737E006A72E5945B076F197
-84EBD29B05B50A78C92D0F2EF60C8842F26B506C1BE919590F4FB4FF34923664
-868037BA9C227C790BFC0DE4DD05D54D975B64F845540CB8CA4A005F9590B511
-653C782C81F0D64F3FDF8FFB627E985E877F41292BD6B752F76AEDC9846A1408
-F3056CD2C28ECB255B5FA6F3BC782A2A194559F33DE3FE01B5FE1BC223A15E2D
-19A2E61C48BDA40451EC6D1227724B9119D0F6BCA1B3E0394EC201D29EE7BD06
-99FA5D7F79A7894B801983D18A2AD3FFB641EEBC30313EF5F0E7524D1FD1FA9E
-3E996BA34FD8654EF1CBF0AF94929B7FE3B59C3BE1D1328CC1041CFDD358C360
-C275535CE03332E745115BF3212802D0AEEA8B9830E8F22D91289B531EDE024E
-5529E078B3F07D44CD0CED639E3F6307F3A5920C80461653CD1165276A9A8406
-C977F00D546307433DA39B3F0C7E77FBC3006B9CE33A9AF600A2E77947808B04
-C8A8432483A92B52649F0DDABE5DEEC492F4057F971D217BDAE50F2E9068F047
-65C9DC2BF810FB485424F1EEE5481F0A418BA3B04B0982F7645B72EC3434463C
-D7AAD47D971B0EA27F08B4768E5534C91BC97A55DB0C507450CD8A23A69C69EC
-88E3920BC8F2546A64F94DFF27825F40EA724E372853B9D6F88B076B2F3048C1
-418296D7C1C334C7978CC9CFF63D389A272D089BE63E2AE49B3111B16D7C799D
-6C748B8215DEA3A0B3917E1BB566409EAD33315BAAA2DAEB3D8CF0249D77CD6A
-B249757258F85CEDA706631A3A744B58199520234BD0CFFB9A2419ABDE6F672F
-1A17FF37D2F90FBD4EB7FA6A61D8AAF46A0088E5A4036BAB380E009980E4E046
-D44809CAF538BEF8A6A9F9FD0F79292B7E957C9ACF483334DBCC6F74BCA0A65D
-37A6F17FCB125391F0D08E5D2D103FB724254DBB0AA13D402AE99184C3769CD8
-B815348CCAF561F9D0D9E822616A8FFE8F8C5551BDBBF975772D5950C89F6205
-76477756526F9E1DC50AE067566B3BB8FDCBA50C3240425FDFC0ECC4C13F61CF
-C531DCCF8409AE8F982BB83DFA61127741962E35F961259B25CFAC3B8D4B7661
-84F2B75F8675AB774DA36A90FAA5203226CE0C1559D9EF9548C42AEE0981EE2A
-ADABA93DCE5749C832D6346536CC1B4EDE38FEB505C691AA2F16249555C51387
-0943062F78BF1D3E2E9BCAD32360E994A7198FB6FB73BFAE552DA090330B2EA5
-83BE32BCE7A118503C991E52A5608FC6FE369A851E21F52EF086D5290D254138
-97CCBA430363A3E9A857949EE4B0038A46139B938827D308DF12160EB4589AD4
-51F43C21C6B37F774170B52BE4B9059F4145B1CE0698FCDCFE0219543AE7EF0A
-581F553986F396A9BF2DABE719F5323E022FD3009D00BAE068481B3BDD54EEC5
-2FE03CCF1026000405284A3B0B4E7CAD80CC4715DCF9876E0953529FE25CEFD6
-E880F78DAC530CE52CF4B386DF921B4FDEF292C1946E8592C991B4ADDD161CEF
-343920F9D643FE7E4A134B301FB80E9F250E3D4103A6A80998565F1985517EA4
-A08B6DF5C3B04A5CE9C2E195C9F616295CEBF166EA762DACFCA087342A95CAD1
-7CF50A554DEC41BA6DC058B8DE3EE6C915C19EB54E7BE62D27A657A5E25451A0
-9AA9CF07C84F0AD930D7289E5A89ACF43B325E7AEBAE129D1F9362307603BED2
-47EB0AA9506711EB69AB7DF32FCEE97D305558147490B729B91A26BB637800F0
-D96E0A0B2F8CA9565779BDD5AE2C8953215B14D01C97AA2E6F222F3A334A4260
-793A569202E944082A535376E6C43877C42E7AF340DA943A3CAA65DE36FD7D0F
-63D5416A652B245183BC054F18B9DAAC1B737E39DAC19691BE14E7C34F2CD914
-9DB9D6EEFE763E88B68C3709BB720CB64AE6B53D63EE734EF705BAA0325E5B3A
-01615DCC3427909935A63DBFAE60ABA2553F4B902CD10FAE937CAEFF4CCAC346
-9BE15D5216E6AFC9EF9DB97CBD0BF84C1C0D236677754E7DEA7E8D7D70EBF3D4
-F76F085D46E3FA5B54BE692559C6A921450A80EE43AA32708580A635B3E111E4
-585ADC605208EFFF7DA65F2AB7CE1BB3797608661F24540B65B0BC2A967BA0A9
-589FCC9E21FECE0DA26FD85BCD09F79F2989B284C5F688264D43E6F2594FBFF7
-8459705BB01BA576EA4F2EB28BBE01D9178313B7B784E11F9E214CC3697E0DD3
-D71068D077867578033D1C6DECFF9E20EAB41E79D0975A99D16C886EF3452F26
-BDAF0D59C63626434165299CC6B943FDBFCFAFAF0713A07E6785CC8E8771C080
-EC6463B0FBD9903E845525CCD2DEE24A11C42C749AF67B67EEFA096DD5860AD1
-75DCA722CF280C1D76A0BE878D84FB69A34A8B5FDC115FEF5E11F14F40C522D8
-09B058982135D811ACD94E29FFF3FF91726E8E981749AA281DD237B12F994802
-530DBE2FC4254243B0D0BB483BA0F0768AB055EA84785E0E6C955E0BB66AF909
-FEFABC824EDCA7F8FE1E1D4B10D618A9B01D29ED46B5284C2BD31617099D73F9
-E33193ED394F895F40C941206876531F8CE68F6682FDC0D7110F3F72F1A896B0
-64C752337D910518EF68FF843EB63E62D466E328C3B21114E9B50C94452A0AC2
-5D145AFC71665D24C1B357B7C33F3062F3A3C62C2F261C116E6E66B23D86CF00
-497189200BD200A9CF608D78E4066A01CCA2B61D6062738B3915FB7F1F94BA84
-EFB6E7E43F62082F1F51073651925B9BAA1767E79317C54377ABBEEEE2FD8485
-FE1399F5F3DD5EDFD3003C1ED74F6A5DE9BFC51DB939E55DAFCA94D0E89323DB
-68A8D52F0DF168F4ADFD436E271AD2DF4376A835B886EE3565CD2FCC642C6B3E
-A01B998060F6A132C78A97D45541E4A2B6699C07AC6336BCAD8C57FC5AB74109
-D6D1AA0CBBEFDF35A43BAA60B6476F92F6BB85B3BF63A4CDF10824FB8274736A
-7FABD17B443D69DF7CE29B45B716F3F5CB4B5A4C71F99D4326815C4072E97508
-A6ADB4C48B541B724A3F3BD80FF1463B910D1091C1BF280A1148DEE7F1A953F6
-61A006B614AD830337B18F5D6B2CC0EC5402E6FDCC81B76478AFEA9EF6A6D5D6
-7B09553BFD0F60AA2B36C1BE3C30E64DCBBA143B8F83644B6A7A1056DB08DBEF
-846043D579B9A1A88662B4FFFB80018F9DF2B0B1292497EB1E0F19C84AB2163F
-DFBBCBDFB9A487F0A825807A1F12CE7BA75CF7436F88566D31472F4BCE1F16AB
-4441202980DF34AC9051E70171DE69B8C8B03D0F15D7BE95D3D0AAA6A82EABC4
-2AD24F67087AC91DF56E121DE01CBA5F202730889A03BFF834392D7859EF5BA4
-F9AA6AA0A082C5AC36CBE22668787809EBF2F471825655DC4FF532D1B4BAB278
-D0A775D3AF92B850DFDA1B7D0AD3CAE7D009CF0A12186160E29744FA239B86A8
-8DDB50CC132381EFC8BD80BEDE488C858C66966D8E84C67427A261AE1D50E127
-0FBDF478F15FA5CBE925F753FF13393BCF96F0E4CAE6C30AB6FC965B9DBB894B
-DEBD651C558430F620B47EF3EBD29F239CEBDF6B89B7B94D2ED0000644CBF1EF
-860DF2EC44A444E5D0328A5343329899A661EDF3878AE2C09935E16697563B20
-073A6FC372E76328803DA9BD7415B44F0B46ACB8321CB49AF1F420EA7B1D5F99
-2300AD9E8D4E8A66FDB767A4227D2252A61670A293A79E0B07BAC6BD0F12D8B2
-3FF4E170D6D2E8A0A9746A76F81B4F2FEC1F7050AE35FD468DC400626295A4D2
-52A1E243C4F52B6294F72141A0AF1A04B753F376AADC56359F7C4ADBFE79AA68
-53E3990330F33255287CB1192AE506E36FB3C3A00F2FE277722D48B526189372
-412F957A3D33F9B642DAACE6739B0096FE4B51E6FFD06027F7339778CB5BA57B
-34EDCF26F51A17C0370202B3DEAA2175CB97DFE6EA831D241DEEF080B233E87A
-C18672E784E66DFEBD46CDDCA5F4D98FFBA34D6BCB0DD73FC52B5168A35A7075
-E06D14A35438A35CE3D3540341C62FC9D3F1ECC4292A4783926AF2E33A8324CD
-87AE643A10E4823CA797A6D874840F93565E0ACC14E8B15A367ED5B34C920F03
-44E5CF0B77F25EB6E156D91DA019D1DFFFC07DC721F1CE87EE0B5798FB05CBD9
-AF1A1B537C82516022D1C455BB3A7400D311135F91293DB610DC5ADB8726D71D
-74E19DFCDA3C9C974CBEFA7DE04D0EBC0E6F36B76C0488275177AD779ACF91C6
-557E6259C55186992A07DA27629C12617EC2AD99DB78747D903606B1BD731209
-368506CB88E926D33875C1F03A076F1E2DEE72B04AE9CBBD637BAE78F85D5359
-F12FEFB099E7F79F9F4E4BC19967EADE1C774D39E17283D640CED5EEBE5F7065
-B9484913948988BB6397FA675C3CAD9184AA103ED711647FC1F2447B89A491FE
-07F08861BFDD33D8BFCC29419195CB424D7CA739B071A6CB48AA07BB8D6EA149
-6D3E5F0A6C0E0810FE6EA95067216F4948F14A1B5BA099FACBE40AF2EE31FBAD
-CE4203CA3A448255C2E01D848E1E16A06BF4911B3B6173DE296F8D599353943A
-340B7AAF53ADD697F7F0DB8C7AE71D41291C14A6BDF48437F53521C5914DE245
-B090282984C7A044FAB93B310717E1CAE827D3709FA4B3133F4B1D48793C8B67
-7520CF5A1667ECED10F65156FF80AEF4223A3A1DD4A2B5CFDCEC54068A5110C9
-B6BE775E937F87F78BD610C30F41FEFC96CC425E1D399F87FA4E224FD6DE6156
-A6FC881D166C2EF51E74020A7DA82C23C1B44D742DD8AE7796562A3FA1403CB7
-72726FAF5243AD865F16E1C7E9CFA9FB07C8D50EC46E6BA6204D7633595D5449
-379F93B7B5DF609834A03FD494DCA24C38988143C9BE067CC851E592209CE9E3
-EB91A4EBBDE654B21162D7E5569CC136C318EE081E7843EDBF9EFFBAD2372FD6
-A8C7BC331E304175AEF4542E601C15FDAB36310C7ED2531B06E0D8ECA422765B
-8FC546BA663B30831A2C948AD871BA3492A559C9E167E722EE6302981C66FEE5
-C8797E4531EEC2EE800363BEBF135FBD49958F17B3C714E30CE8150FE6B10C14
-1EE290B785A68646714C865A5525935AB83625D1C4B36030714561BAE2AFF947
-9062EB00A5553C70541C072627F4B2002B273098EA313ECF8D4304D89E4D58E4
-8894B1747BDFB183AFC1AAE2D4EBED27037840747C2B181EBB4A28F7DBB69AB4
-B1539E8256BB8FE1D496FD20C27E4F32D760A1589F1EA8B1892909A3FD5655D4
-E922F8178C513969267F3DBB4E9906EB689AE2CEE01B7E6242B2ED98F7D10FA9
-48AFDA10679C4375A6EEF12FC20DD02D21CC44995559839C1093E6EA7D867D2C
-A7EF5DCD6238FDD38A0C368F199AE515C8546F8BD511C9671510D335B769FE8D
-DA7554FC032DA527C628650AF7CDDEB5F0A17ABB3D30DAB0D264E523510351E3
-95B89A8B4BBC739708A9F6E2A9B2E1C246D653CD83E94847FD563F76C0F97E15
-87FBA4C60C3093D184F41BFCB3C36DD5B64D0B54D5BD45C36F4F0CA49B4B3871
-D5D7AE4848B3545FEE5508A5437B6336B0CB1BE95C52C4A956830CF0C5C77EFB
-89AF33CACD05C7BC3DEA59023F12B4DFD425762683605B4D6D0578D26C89F116
-46D81D0077CA9E1B418DD33BE7BB7FA0390C3015A455BF34F9F5521C52050B8D
-C467305A567984EF85ECE9BA26A60A81C57480E1342E861BB24C5DD2014E32AD
-51C74DF5EE6621532F926839C389C6943D1CC25957578BAA1FC0E3946C1198E2
-CA33BDC0CD4A7146C06E9CB7A094BECDAF9DD2D8DD90398707728B7CDCC0F512
-5587FACF96DE3C0CDC40D11059DA30FC8266120F94E6760E57AB1CC6F97A3373
-DFE6E49474A9BE9BA57B204070A2181612F62C2FAE9F76FF53E1EEFEBBB418EF
-AFA5D01FF7E2AAA3FC8EF390F1C90F81F7B725F577DA9E3724E4DB5D8B7EE2F3
-66989DDEB59FF71BB3FE57CB6A199A0B8904A00E7690269B916E00598CAB1321
-092F490EB7901D5E5B0CB4308CA693D9E89740F7FC86A294EA94EC5AA9E5556A
-A18D56E6DC6B2D27742AC888A0233E23F5DA77B88257AE4A4B50EDEA38F3FA61
-1E23B6269E9A41ABDC22C0A8365103F27E508737038F8E1A60FD47452CAEA728
-E00BFE2CCB5CF528295D5E689136C5637CE2FC9838AA32D84C8FB5E26962EF50
-0B545B5B4DAC2A05A637074F2514D6CEA7A69CF2F88A05C0FEA61B6042E92A46
-408DF757305F686C0E3083A06833EC9C8B2B23B6649815307978F32CFC60F17F
-DD370E1C0A7E5E764D212A1F385CC73725E08ACBB8CBF759F66AEF5AFF6C644C
-FA9807EDD1706D83C8A5C88AE979700ECF1FB3BC3ACC1AEA58CD17177289CB96
-68A67167CF719FBF54BCA2FC0338CA22CF1BE9E6DA4193E0754B5F3F0B5645FD
-19B9DB6503C2F6200CE27E6CC79D0F10EC7114E5CD60CBEFED555C8FE0F95209
-B5107D1181A4B9D6286F3DD8E664580BEFDB436E3CF716BAD8CEB658086346E7
-083EB572FDB69BDA6FED25237CFDC5DB6F1BB321B27F61C5E5899674AE1B0808
-CB878023FC1CA40AAF6E4AB02BF337FCEA41A20EFF533A03FBBECEE5CA70E196
-820A06C57FA25651940679389DD522864DC5FA35107087293FB21F8DD2C3BFF7
-4F4B5373D363BC73EB8CEB672204C8638C9EB97103590EACA1F0F3151A57E436
-AFEC0DF129291509AAD40E6BFAF8E324CD9C17AD056FD9C7AEDDD3C4791C1125
-56D15190F34753ED08855C8D1448F39AF103706BB3BD67716C0A96DCD01331C1
-F0B0C56D369AF5DA96328EA85DA2C427BD9BC6968772330442684C39CDED9D16
-F6F25A9CBD94F9AB4942017F4551168B0DA8A940668EE04404E5A62EB7CFA744
-9208A56833949C989E2464E4D4CCA2A956CE7DFEE8B6FBD69983362017FB07C3
-DB2DD65AA40E019BB3B4579D014FAB4892D5CE63C9EC14DC71D69D86B3840B7B
-166908760E4E2C2A598C71048E222E0A694EA77CE21330DF75433BA06F6B93D6
-C7A68E1D370ED66AE05C03C74BF2CFEC3C1231856F0113A11B84F5E975118955
-08FC432A4EA0DE469CAEBDA7800D2224CDB7E386F81E4D27B37EA521E38B1ABF
-61FF132292B87C362661225E64FDC8E9E45370CADAB9B57C9A0CD09C699D9CF0
-FB14A3ABCCB87085B33A08BE932074A7E10F5E733FB981EFA68F95DA8DAB2886
-8272D76CF125E81FA01EC92474431F9BD17EAFF42437CA4027E5A68526691A76
-A3767AC34172C5F509D8F6D3A9056F02D3ACB43BB5D70D8B24F5CF8A602F263E
-1BF1184E4A12BAACD82529BE2814E73038AD71730F2AD6EF0DEEF2673B0E8600
-50D316A9988E3B35CEF343B0E5F24D0214BFB1DABA00387677AE8D16FE961B47
-6E56551AAEB6AA9ECA626ABD01CA41EB6BBC15FF2892D7675F23F8959386F24C
-170610025CC0F6724E975DBF843AC45C0279895274FB57091432F504051A52C9
-819993050681762E87154B8000D436B04768061595694649ABA87131B0B8B850
-9B9AC65D1CF1CCFE6ED073AD680E9DAF2FFF847B216EA50FF97C2E0738E083D2
-54C9BD239B4D23C32A6B94BAD95102F70DE6C64BA20E480D6BB8EEBFD755586A
-EECF15900961CBA26BD6FEC03C3BB51A5D17024CCF8F054980E01C45BFDC1F18
-CB160EC8722349AC2CBD62B12F0D3C3555FBD815332F15D4BD3C833B4699C5D9
-57F84D305C363D7387E4011C025AE775E218E8BFC12C8E3727BC4D0D28BE308D
-6AD7E438094CDE7E2660234BE947811965606263564C7CE66853498677DD8F28
-943CBA9FD54E57B1720DBF90F6E399CED323AC651BFC4770911F515CDF8AAA69
-D2E26A8CA01859367931A33E96940EBFE29E653039622FC202A2ABDE7B451B00
-2E93E8AF6ED01D1E1A076AA60AE5CC51406DF644586AB7A9E1E20AD183AB50A9
-CF331A59D7691685C8D50EF7B473739799236302FFE5D2BD3FEC9A825DA4E686
-07E2108E32AC88F180C63C16BC300119A912D1A3D2ADB435EAF8B4B1437620C4
-9BF07318952AF158B6FBB24E3BC8C79949119CB8213864FB444FD39344C696C4
-014975DFD60E5793947D9985C668186CFF156B5A51A101FD652BC65B945EEBC0
-629D88593334CCFAB38D5E13A05037D5D91DDFBA4656494699C6DD524EA39B50
-3851D7F0FDB6AD2848426787C8B8F7C5A65CE9ACC644636D236409AD05C7AF57
-90350464847E98E9806CB4051992296FDE0D24EA95814A8F7B1FCA2B3DD7E1A4
-BFE0114B02876615F15E3BDD86C4D31619007E8FDA49EBEA8927EB28FBE0118B
-5615CF1A2479B97EA9209B2336D796934C2ACCBD815A603643EBC010D77F2DFA
-BE1934ED3617FB150B2D69AFC9227CCF457C31B6E98148D14F22889D3EEBE747
-1F58CBB932CECCE24B2E91EC2CBB4852957B152502BCF73BEE6172AFC954B44F
-1649ADB935FB67389319E24F359A87C790B8E04D997F48FD97879D969C7F299D
-99B011B9DBA379F5A90C5889DED01E871C39B9B3BF2A5F54C04E5F4AD327227F
-197BEEB00E54FD85911CB14675B3FB5DA8B4FF9D80EEF5F92DD6D22F01A40B18
-8CE8F740348E6458B2749D084CCF21AD59CFAA438B5B2B52BA165C3776FA5FB0
-59F95EDEA3F05B82817790C2247B4D4BB6D04312A176986C4DC3EC5BC5BEEA12
-BA0892ADCD2E5817F971BE60529228E88173D053D8D37CEFC40A53E3A7D56655
-E78CE8D89E0C2157F462B91BF66562608E84A7CCBF0FC97DCE7C32F4937CD1BA
-5A9EF98122077CCD77F0D4B413D88134428EDDD4B408A1CA44227FCC064AF791
-74B378997106AB867A0DAEB81C05A0E52046B893EB3264B13DE157487A870B21
-6B626804C90CA35C7487D8572D374F89BC214C104623F4FEB3FC9921A37BFBCD
-5691FC8D34C1504ECAAC62E5639E3D603DEAF642AFB29D65510C4649D1E10029
-478F57006EB3FC50650C79EC23799E3096B920D519D2777C0558ED6148CA36A7
-6B7960FDA29951C6806E43D886F4E09885AC300738BB85CCF1B9DB2702B26D28
-E71E20C15361E0AE4E62321EF84275E6C38A5394071989EDD48A50717C47F6F5
-FBB8CE06F4B98303F87B580F791BC936B474EE9AEF5D0B520394D29864F54747
-312FD93DEEFBC9A4E8948D0F04981A4B0FFC277F5331EADB2C9B260492104D1B
-9FF4A550E46526E18628FBC914FDFE4AF06FEFAAFDB7612BEB08A8F9701CF8E6
-16FEFE9F3FDD4C69CD8B94E774C6D7A5D0DA3B5542C8CCB50D99D2AA72E775B2
-F492FA87D09BDFADEBCD184F03EF0E2D32E9CB8CE536793FE7DC4FC36D4CCE41
-C7E4832CFCB89AC3C2D9424032B5200C0EBD030450E1F187C05132DA4CE553CF
-34322CAE917D85EC50CE6B5FA5683402B23DC346ABDCF3E6DE9932BC41CAFD66
-D5458DBBB689B60CEFB2C684764732C290F613777624D349DC3CD27515F730D4
-F7E7452C23FD57E50888B33A9359F3834A45DD8372E4CE789A50D6B4FAA9E5EF
-C300CDFF97216429E2F04F607EC88917D4F37D54A92D2B7E071A556686CC334D
-ED4E2509248075FCDC6E9EE6B36E1D1A87F7E7A5AF045184C7618E9730A88CF4
-788A783A9F0FDA1A62AA5D739618DF70976B29E2070A5DA79E7BE8BCCA15B10D
-C3034F128A120EE0204CBB875525B21ED31171E2671A86080DB1708AA5095096
-87B4A93754CC6728BA0FE317ADAB3D080132107CEDE64DE0E8A2169FA6CA58F0
-C0F859DED55CCC42840845EE5126C67FB7C12D06255EC8C1EA8D0818AFC432A7
-BF138150106B06296C19F723677937F0EF4916D9867A61881813165ECDAEF3B9
-DAC80ACCDA42728B299D3162F604F8EEDB5329516C21A722B6F90B44E3C178E8
-05AF55DCA05DEF68AC75F1AA91613E34B528C9E104A8A620DD863B7931441F1C
-980A606A0B2004484C1A2E88D0AFE8CAA98E5A9064C923F14B2B5906F9DB8F10
-8DFD79F217C965308DAA3A6F387B0BBA044588845A80B3850D96CE61954D7E26
-EC7D7E92001BDD39F0CA86751F6FC4E987A6C3267E60C8A02FAF445916B9BB44
-2EE70009084AD0EB3ABAC072200D33EEC864D50135653DA2774B9283D8978DFA
-EA91B0B759BDE7867758493A9EC7251A7C620DCCC132CD154F2F66678BA89750
-FA7E3D23D3050FC9D54F990A6F96F035CFC231302DFE51D0139FABA75A23B168
-685DDA1C9E68236A7D19541193F753A633B103FC09BBFB3E6F384DB7639429E1
-76EF95062BBA
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csbx10
-%!FontType1-1.0: csbx10 1.1/12-Nov-94
-% CSfonts -- pfb ver. Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25027 25304
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csbx10) readonly def
-/FamilyName (csbx10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 444 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 686 def
-end readonly def
-/FontName /csbx10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 68 /D put
-dup 70 /F put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-dup 122 /z put
-dup 185 /scaron put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 237 /iacute put
-dup 250 /uacute put
-dup 253 /yacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-60 -250 1164 908] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E729C1F3C653E51B9F09F139
-E332F81467DCD46C6B80A4E88E1FB2B35C9134E8C9E669DEEFA533F7F13511CF
-F16ED856C594BE960395D34E6F1FB840870E1390BD51DF0CB99AE59E98B369A9
-308EBD4D62411D723A06592B3F044EE52173E7B573E2FBC21F32D00ADCFD4905
-7907BAC782355B39ADF860CF2381EC0CC3136060C15C7F794F54FDF9445AE615
-FA03D051B337AB511F64C838302CBEB69E431B2B66B4CF0E61EB5ACCC8F55213
-E44FC7CB51E3ACC12F45BBEDC00C9A63A43839BDAD1C0186974C7539367FB600
-B9D9DE3DFCE060C626C826CCC9C6AF9B765C6D6487D5945B01FB21FD234A6D46
-FB48C4A049CA13C82BF001906C71B5E4C7D8317DEC3B2F4A0B8F28A9CA07F8CD
-FAEB3ED1ACDD5162F7D3491964E990EF808D40307E9FBDC0AB3B5BCAD56C895C
-C6666B4096AFADBC5B931D07B418009ED6BF9886982EF5689E1C67D980F16913
-28DCD11AF89476D84997CBC50E8E7942C3B7AB5C03A7DF37E3120834DAAF7EB6
-E1A625F38D0EFF2CE86A1AC4ACA3A3556D98D515AD265D35FCD8750E1F4E73E3
-A74900BDC6A9FA84C7A4A36214935A985CADB31B33706C0DDE055D4BBF888C0B
-38320A34A47CC395F479E84CBFB77BA6F9EB33F344B34D19ECD3466836255387
-772A0F959C9872EEBC9D69943B4CB8051FDB325D6277BBE0490A93FA59538F70
-E3AC3CB5A692944D30F6910239CC42F60DAAE4DD433F3F975668F57CAEBE86C8
-FAEBA262650D218F5DB434BC6B1DFB3532D244AB20D22A7E42C5EE6D3018269A
-8541F06633E64A7213BEBCB302886322215C3D9AEEC195F65BA110D897AAE35A
-FC5F90AA018E1A0C5BC69220A49AD863023AD349757E512042A101C8118DD50F
-9C8BBDC7B3E70E8959857A595C27F9E77496A50E83DD2AB513681A207DE3C58D
-43C0CF228D97497B4AF40E8C06F70D6F57CB07C4FE265CD1F01DF9CE14CA0687
-A58CF8150494A7C35F098E9602137EEB7EE353485A89C96E5188F9E0672AA9BD
-D8BEBAC637D3C1FC1CB6A9E46A2904299DC9FCE32806235D9DC6A3CA9AB79F4D
-A8B3A206698DCA8E3C32777B66C306861D1804686C70E9E677FE80A8C2EA40E3
-19260D8DF961B469BE5C0644637E9787C21146D045F3C5D5F98FEA3576D091DF
-92556B47B2C5D90D8ABF8C14A0C8FD4F4FCBB68971E4439EA9547D4E09D99124
-3111D02F4C228490C47EB3D54C79D3849AF18E823911621F53D54C34855FBCBD
-E727ED6A8E4E5C373769E6B9DB3E923275926683F4B77F637F9953C042A412CD
-417BCBCCD4836BA816F517976C798BA49413360F4AB6E2D6D2ABFFAACD9DE329
-E24EAAD32603F2C48A25D198AC539A604DA3D9C6F90676BDC54A16586D58C8F0
-114D19D4BA338890C5E4C89A830E36982B3F7356A05BCF4DF2CCC15628B63821
-5C6BBFE1ADB167545A1FA648B401EE68EC4F25D587FA08B3DD4D7B1059ACC681
-384ED46BEB92C39E3FFFA59AFD9218ED0F0EEDB0C7CF4C9C557306C10A99284D
-534F1505FE75349320256CB0F6BD29CA2177EC8E8B0528AFEE349409EACE7793
-8C1A2B7E4D651EAF719D3F6B356E8C4A7E6797F2E826F75943A0911A73DE8F31
-014CC3808CBFFDCBE9928E0062DB07EC284BE862A9A2917B4B4E0F6080580619
-246321AB5FCE069695FA75D15E336AEF8E52CF9B2903D5088F9C6F33243C3203
-F241B1E2DEE785425B8A3CB371F8AAEC54859A9BCAAC35FBF38FFFBE2BD98110
-0E8B7446C07B2DC41A4DEF18F47B79E769EE0D9B8C5CABE516B15A1C9A515676
-5D8EE4E1D799C04A464816E985F93D7A06B69964346240FBBF35D635DCBBDDA4
-4F1073D91945A036E575C7A4F038618F4851249D4680A3AD1F7BE79F4E995206
-382942615B9A280A4F3A37FD33C9BB7720E5B39FF719B82EAC5D74747F804C96
-A974D753E21D76E1E78647EF86B4D950F17B8F3119BD31D43CA2E540D8C8C091
-A8831C82B77DE71B44C81DC3CB1730481CE1BF5378F38CCDE06E9326712AF114
-DC9F86BE51C320ECFEBFD9766FC9BEBA6883584951B913DBEE0857F04B0A4600
-F5667B96E362E4848D4505965DFDDDE2CA0F51A16AF9082ABF1BAC60BEFA972D
-906D012BFBB3F2E796D6B56ECD295C5DA05AE1C8BB06E60D04CC59F665A7403E
-0929E42E6E0FA9505DA9D97ADDE5C05970C37DE096A4B5F8DFD283A167E1B8E8
-3785D5DACCC1DDB58523B9B359244DE9E0A8D200C202E046B6DED0F5F2414A5D
-0C47948A558C53FB128DE4567568CEEFF15D36C55585E6B93FD7D953894FD71E
-985328AB6EC292CFA50CE69D6AACB8B8E1FA2AE93EA4FE23B163BDF195AEE33A
-149314B62997DAE4410694CE7484B9F82709F9FC520227B02C90C67FA2098530
-57ED811F412BB9E9005F378D577514D9569BDFFECC18DFA953F47B84E20D0A15
-0BC60BF983236BA8E0E902CF8E94BAB84342F86F8041C3E2F7F6104C1A8D2DAA
-EABDB9499A4DBB2C2759D1AB3A34EEA5F799FA61F1813281AA4C529BF241FE17
-7603BDB87A0598EFBBF6CE8FA0DD67F4D13E26E406BF6A03605F77D7D7D7983E
-8B8274B99E885FD3AF61927E6A5738EF7CE6F5F296DCC5283B0821E9D6EA198E
-509B39C6BA68E9B357BBE0B0D510B157934FA99DCD8A91C01A46B33CD2AC2C55
-6DE9D95D40007EC3CF2D28474BEF6093AE8A33D7996E158D64AC4FC8AD4BF21B
-8293EE770C8A73564B477CE92663195610934B515AA390A00243CE0F4BF1BB01
-A152AD7FE106A6240C2E11A64AD8CF063805D68BDE3636E7BDA6D1C01301BF6F
-7825A5C5B3903A7526C4D25777401EBB72688D7F7C5DC3810CD0D40ECD22C399
-B97F231217449E66040EFA9104781BC4092E89DFDB73ABEFAB4058655D4894B2
-14224B36D9B9D21C04DA1F9CDCB6C276AC101F77A84B431DF3360B4DC4C6702C
-88FDB095395FD9B90116C1AAAAA761EE60B74138B33785C750E59B8F344CF20F
-8A27DF10D18AB38131097C48993268D27D99BFC273D7465C03CECD418F829BCA
-0A50A4AF5FFA39E5EB97AB12250460F497A82BE12288921FD8F6E6E514D2A755
-34687D264B2B1DE4B5ABECE5696E5D158D3C9C43A08A9A5F8C55243E3C1FB561
-279FF668B4EB1006E29AE4A5053514F98B1024F261FA7488F1AFCDE0E799330C
-4F9572C68FE8185581E0DFDDFD39FADB0BBAFF46C34AB17D3A1A73C8755B7A8F
-F3593CB2815945C2FAD7CA5618202EB4FB57F135DF1DEAA0201FB7A8453B3FB9
-D325C73CF27BBEE93F38D40E9900B9FB602C47E2E56494963E62BB8FB6B08D91
-2DBE58633DDE655E43ED9885F7F68572F82EEF73EE362D8AD4DA6CD8C4963435
-46393A215684E0A20DB432FAAAA21570E2C79594DCE22CB6DA1ABAA46A1475FE
-19CCB09ADF94BC4DD35AAF57AE000A5DAAFB9BB967A92097267E6CC790157DFD
-E2617DA45E1089F30413D934A4C3F69AE085F9A68D545B0218C107D4B26EF873
-655495FFDBE58498F98ABBC55F92D085D95DAC0AC94B680CA8F0096C975B10A7
-7B0D38759FA0A8C25AF088A86903A104E0EA4567E4FBDE7C2C836E4B2154B282
-06350AAE0BF06AF1F64B08DC2B883E6FA1014DA47B77D953903F4807E54E7ECE
-D9ED32206A4C0653EF1BBBED540C5726342B23E89270328961B05CE7EF8B2133
-94037B301CF2976A3C70AE59E30D24EAC361895D8B2E3098E1E40E17CE6B9DE1
-7683BBEBAD3BF4466487BB904DB43AFBE3871EACBAB6B6786B280240CFEA1378
-9B8EBD5286E03F9797ABA5F4684D21EC8C1AAD43FA373D6C45EC5B40C7C6192B
-216569A115DD4C5B335B26715CB18FD8019BBD2E58BBF32164859804082369BA
-148FD919D69482D0B16DB44E7EDFF65A2444AE146119B115C489A90122C13948
-7AE46F3194AFDDDFDAF95B64A06D40069577C5187B7C35C25B0FB44B93B17B61
-7BDEA227EACC07E3DDAA318D433B3DA8D14575189E5B79AE70699EE248FFC365
-403616B7CEA32DE77C2D29EF7E4F5BACF38872BE19FCD1CC402DB66E195EE094
-15F2E091012789079F24E8B75354C78D702250D0E77B7F9BC3E8D8B89A00338E
-C5A1B086A3F3DB8B8F87DA48A45B223F043AA4B9F53BE5E4BAB9A9FAD17F3EA9
-B1B4CB5BA6FEAA5935AFEEE9FEC4E30144AB7296AF26FA37CCBA79445F6F3AF0
-9D473B6618D1B552B8560450D315C0CDBBEFD7B62BBB5EF5D198178DDCEAAF8E
-BB76802FBF7771CA6D6081C312053B5A3365465176B636F3BA43791D8701D4B9
-45ACBA3CA361756F83233234E44F375B47B8D12A0D766BC05FAB092F6FA11EC7
-057FA9C303346E31534A7D0AC1B78CF6D9D1D03E1AB74CF3C980B466C4EA3783
-BD317F06261E4F7EEE67FE7965BE9E21E3FB99EF0AF54E554A2F02892E6546C2
-3E3CE6A9006CEC4EE733718B4B8C2B92AD09BD4CD4880EC34947708E2878CFBA
-6397DE32299869CBBDB4048BB2176ADA5605E50E394B59F33F718D61BAD8AA1B
-8D948010830FAE3CC75868301905CAFD5209240D23F34FDB2405F087502A2D98
-E8DDF7402C72C296D3AEB2F6A1F6FE81B25B8C3BB4570919DBB7916C62FC4C93
-CCF733A6A2B65AD88A102847533D68BF799360DC82636BEDD8B51F5529711121
-163A36BB7664B98CE379EF3787234D2E841D97FD1A8E2BC67FE045C93F403E1D
-59EF5765AC4FF95D5763EC0F41D2E879E27267BFA509B93D855B61FD1F3A49D0
-836F70D833FF2E9B8E688850B1B164CB41F54990A6D9A7226C49CCC309794EDA
-44CAAD11F956E3EE046B06D24579B5F04D645DF1899E189FD50D929E44305730
-BD61D30F0E2C5A3AD1DF2E3A05D25A964154FA096899CC35ACDDD9DE4921CE80
-41FB4649B556FE4E0EDF67E55154E57C96F560BEB805E5456772B80BFF822E22
-EA13847D867A1E3E56A714EB0E7D20244AA4275D964CE5515D87EC3F26B335EC
-2EBBA5CB0DEE8271002AF22185905F9C9E44F90BEA91E65D9AC6DEB4395631D9
-A96DA3BDA4CB2416CE4D40AAFB44F7B026E687577F1C9046931EAE225BD536F4
-EDEC94E3DD1963602F3949C5CB357C1C0F8B6ADDB33AE6CBE95693FAA0F8C3D7
-67842045F5CA48C8EA4CFF79864A85F650212829C9B8A0055BAFBCDD88BEAF42
-9DE610C7A4E0106742E5DCB5D8C1A0C6D4F4991D514D3EB096CF6B545522FAF0
-2AAA8DCA601CA5CD0B574D31C3E065E41E322A0624E3AD48834B7F7F6C08B1C6
-6A24153617BAA52981C696D4AB49CE9798229D3C65D3451BBCAEBAE81A381573
-C138A105AA4AA27B20DCCF8AA51A35CE38F93CCB6194D295D8CC0CA80C56B5FB
-DFCCAA6E311B3A99A6B6A28400B06BF95B10FBDA47AB04D59BE2A3F1492B4E56
-B2B79657B04A85F3BB9F99F9AEA511FBF449029F4F23F17F0092C2BD87D6D87D
-B51498C6C7330C595F1D03C6C3F95FAF3974E0E12950A2F590EB8DD7A01A25B2
-C87EA320CC5CC5EA938CE23C9B18F0A4C28426829FEBE7BF81BC5DCCFD930FBE
-2111AA91C4605FDAB56A367BC5C5B02EE4E543337BBC50A6B2C66B3E5D25A5A7
-1B8491F5589C965D5CF3EABED65A6AB96D493E3C8C9C0F9A56D0E11E0501969E
-53A78C5CE968EAE73F48380BEB7063EBF9A13DE8E1580531E6692EE9CCA42E65
-DE4B0697A788AF9EC4559DA06C54B05B2DD97EF0D5248121C96AA9ECDC3F6F32
-F9A77E87712779290874AC2E8E65C016B76AD96040A483990140C4A6176CC1C6
-5E83A1E8023B095950A8673E6CBA8F4574F7F3B23B471EC220A9F2F48E90EB48
-D3BAA50ECF066C038D9EBC8384D71D868F32DB0208DAB7A08E01DBE795BB6564
-FE137F69F29155F06B86A6D4D6D05BB18AD9D189A13256231F3CBBFFF8583CC6
-61908B1AD434B98BD1092B9174A46EF3B8408EC97EFA66494DC04E177FC39200
-4C115A56E03DE423FEA6BB20C3C9CC9AA5CFA918F050C1EFCA18EA8A1FB9D5F6
-3293BF3B6AB706987D1E65EE1C82D5FC8C5B4E0532F39698AB5AB0C40382BEB7
-69259023BBDE982804F02DA684463F59BEE2F06A61DFCF3B2A082F299D34A5F3
-17B31EA18AAD9069241DF0E80C8BB025F1485E71DBD6794747BCE4807D588DD1
-C5DEDE8D24189304926B103BE2CD55439225F084AA107C207E1F718E3042A993
-1C3EDEF8C47C5FE8526D78C6B5ADF013F15628470CCA64692A4A2C61CD056928
-BA63AA3AA736FF26270C73442FE279786B99F6EF7B54B1D7D506552AE2868B17
-418DE9AB202075628331DD3D93D591825727ECC92F7F9EE7050CBC831518F3FB
-DB4329339637CAF3815A39F342A9CE167B6B84BCE77BE3BD719DA663CC386A0C
-20CEEAF6D4D6D7B7191AEAE05E02CC409AF50199B71F86B07E2C97B05A958ECF
-8A55702227FF7C40DDF14EA0AA37FE2D4FC9AB4645B6C46894D391B2DF95C0C2
-D13868AB9738F3184445B00D501AA60836615861FF842096004D8B98E92AE327
-9950D1EE488E14EB1054A942ABFF94C6B9E28DBC57273C1DA440B3DF76A5F474
-0125A8A09347FF721CCE9E88A9329572041B9A993E614C2B9264E66FB20ECFDB
-6F767575C13D97F5FDF6D1AD3FD8F58FCE2B09B4726A46A65A8466EE17174EB1
-B176D051B0AB7E03A5CDCD047B66470B773524F4A2FCBD7759733CA3844367B6
-99985D0C03AD4B5CA381218126759958B5C9979BEC428EF80FA8E2A968608855
-4473E6D5E1B930B135FE26548E2AB40C54858ACB1B0220286091E60A16063B71
-28E1C3DE0719F068CE26522D7CCF676FEED0B84EA57EE1B2C93FF5A36154776C
-1FC758396623F08FAEA90414DF2C68F47284456F851B7670F453037E9220BEF3
-3F3F4E48847168B099A2157B83BCEBB6FF9171DF8C32250E74342508C32C018F
-FB44A1742CFAD58F25F2754ADB210518E7C1EE81028EB98E047713F7AFCF9A94
-E5A9E64E02D2B06DE33E3D6E8714335D5096B3175A9E67ACBF2A07D26D6705F2
-1AC1B84D1E2738412F244BE490928C1CEABB2C96166F00D2BAC0247459693757
-866871848899B2C6ACF19DCEE9BC77284AD0B7EC385A270858DEEABC803F9543
-CEB27797DCB4F7AC51956017FBFF0BB7E805E558CFBDC9ABF482296489964622
-9C57DE7D8E5ADB68A9269EBB71E8A733BA4323C55FBC6C7576AE27517A3B2B01
-784D213165F51F431629B051B400DDA7579B1ED75FF8A5DE30941271756FEB99
-939B6AB6C9C71B9C6B24BF57FF338BC512B7C076C944D21ED7CABFE2309F1744
-DD9193960884337CEF1690C5BB034DF5F5867C5016568709967CA55EDD013FA9
-B40E7AB512DFE90EBCDA8C2FB04CB94664EDA6956F0BFC35B43720709E3422E3
-D3344E791F2B5CE33970446C119E95056B4F594E5D78D13DA3805F8D9FC1E2C9
-A03854E6AE35A763186CE2D09D8DBB66A850BC86D113F60C27DA5691C788C6D3
-3E614E05231FAEB6E0C04D1A12396932BC82D63B00149EE23CE6D2A4A86EFD52
-0B33EDC9DDBEE4EA34181B9C4E90828C9DFB1F41C1D6BB07B3A049E6901CB025
-80152B12A344A6174A35AF1E3F675B30768E84A0F021A3F0A3279F2176777185
-40A4BE96F01A7D58DB64D6FDE60CC421AC4A038B92D18DA5537B8D5CD573B796
-F5DBDE6F40FF8634539A03C42911B33C3CCAABE42E8E60B5F333CE6F446B8006
-A34EF3C6DDA6156EF51F45EF5E1184B518EDE218A0470418DE161013DDAF31AC
-B66A079F299D74DF02468BAC37B2E8EF0F3D0760FB5B2E7DF9688EAAF624CFE1
-CF3E4904293093318498EDD1A8BB5892A1CD9B1EB2635942D40051A4EEF60177
-2D2839716F09A388464CE6325B0B05C18B816C65A28569772FC91149E7B467FC
-75713A51312D46109EA46FBF9F338393D606538D0D69D272B8085774BA1E280A
-14200D05585E688F4B71BA482D373B04B1FDCC303B6B2DF6087E03EF52E5285B
-A0DE927E8181534BB1AE01BABAC693122D7EA7E8EC11990471697A98B9573D3F
-010F5DC4C6728C9530BDD7FFE35657D848775B86899F08653BEC6FDAD2CF3ABB
-BA5C9913846B08D6C4B636899A0000DA116B39C9A5B914C656E6C6FD14AD5638
-E1D19A7A029E29A70D5853D57CE6CE43AC73D7758D8ADA48F6997B250A874454
-6CE5DC51A20F19513BDFBA02F637EE9A37AE688333C6EA8142A1C464882B6F56
-04E14C88CA53E34E24AEFECDF68E673BA4A22BF5D706FC3C6632156360786DC6
-3AA69AA896BCD2A72B35842AF203B11F50CAE61F6AD4BFB275CC761C842BD467
-D614E6780FE45163E0A23259008160AA936D364710BF02267C7B4BFAB09C04B1
-2CE61BB3BD949CEA2DED2DB92E5BBBC54F72B827C26D3D8EFB07EA934E8D3DF2
-BEB9C2BFD2EA9C3B9E8EF2BBCC33E9C45D1AF7F884BBD6C6922921A6490A5475
-2C2B295A373435A845A9E0E1336FB34697ACC534E596FE3C1DEE5414E62E1CEB
-CD823E1975ACE5E05AF06D4541BC9681A9C52C716A3378E86B9B4941BECDEFD4
-6A0EB5AFDDACEC487CA551E5971565E3B971116AD68075875B6EF98EF9BEDDCD
-4A1626D2CB614754A8FAE0104C703C84A715516A9FD2E5C883E2D3F611D984C4
-EAC171A290C8F19376093B516952C81691C090A880A60D7C57F65F615F58D6D2
-6303AF77118B1C2F842494E8AB2BD90C2AF2484D3309F40A6070C88509B32812
-7C37A01B8051CE4719825DEDEF30EBBB0863FA45E53C724C1FFE63BC8532EDE4
-2A34BCCAF706B559C3FBA0D2341F530E2A7FC53666F0A08B81BE19083DAE033B
-2AE86FCD88365A70ED2B96F07CFD6AE98A16C56BA95404514974575277099791
-5AE2D7D4C11C1F77099729D4E3A1CDC65691700D7B036919505E8B9AB1AD862D
-3DA326116785E82B88A4D0FB9CA730B0164AB17951401EFF78E020AAAEB7E443
-F944118738C1DE82831BE36A58130B230F4BAD4124D1EF0B4B4C671C1EFDC56F
-97798C8709363AC16CDA30E7D067BC129EEDF95624AB393AC95A78C03C175FDE
-FCC2CAA112FE2E3A017A93A89B3EC023074C11D3D920C31469A68E5010C1998B
-3DC48F608B077E8F961A9F45519C753E0FC8BC8AC8317ECB8A0C0BFCBFF9ECD7
-C4A93A7100CFD3A92B04C98BF99DB786990FE9FB263FE4F5A916865BD404172A
-51E0C0C766BD2B93266B3634E57A076C8744B7089ACF220775582E4459BC0248
-88FB9CB698FC6F61854D9626DAB281B828FC455BEA7FA64E66147E394EFC0B19
-E94ADB65D6370DB6B74C632EBA112F622F9E59CF911C4BE6C6109B928E40FF9A
-0977D655FE862C67B0C614779C13006958E288F22F78BD10DFB217CC4082277A
-A3E957C1BFB6F11F64F3E3CD9C97885B9BBB92C8BC03A8B14508D59B8C07C418
-EE79AC80FCA55AE0B53DB0B300438271FF36A420FAF314BFC246ADBDA2F3CF7C
-E33118904B862D053B6EDCD36A32876194CA090E89F8143F05864722177FD6A3
-4DDC7793C7E1AF2BA38A78F5B6D7DD0C026C5E219BAF6C36A5F6C4F1C7CE6054
-34108F81A473579159FB797B7D052C73383ABCC612B665EFC4B4F85B024892EA
-70A7DB7737EE5A87DA21217759D4AC6DBDDDAD0D86BED1714CEE4D69D0650258
-8AAB22CEBFA0DC80FC54943171D47C22615FD50971B066766CD40EFE0EF7BF0A
-BCFC6CEF84C778F2F852CAEEE77020419B52D02BE2BF67DFAB7E56DDD2B307C6
-C08419D07BB13A4CBE7B1BF08F5849BC8466C04FFACE91322652E724E486E1DE
-3DACC4903B1C5A0D6D0968CC315A2256DD19A09B276588A8F1571F0C207DA338
-7682B4119A8488C67BBED9BC8467FA95FBECEB1D6429D9F0F7011A3652CC5D3D
-897DDE77A28B94E56168FFC44ABA5C5DB97B2DE100DA3473084492D889B15858
-253128DB3DE7D008CBD3689A9AC130F6EB480A4035644B23696F6BCAD2213FBB
-E539F9C431A2A946D3120BF4953197DDB7012BCFA77686CC2B2A8FFB7DC00FE4
-66608941FA9EA90225FCC227F83A56E61039E6FC115860F338994142275A1203
-DBEE8B235610947549930DCF1661C8ECBE8EB514AD3FC0DA56E804FE98188CF0
-FC56255636DF9C0D7F0BED0CC834CC771B8B68903A3A7F7FE3024BE4341D47D9
-2F6B6126A4116C0994E857CF1C0C8B5ACDD5C1D22056016D39137FB0E3240C2C
-91650B1E140095F6F8746B65F990E40DFC6728AFB5D4AEA98799DF6220C5480C
-5DAA607995C714F40C8C7111A41AF324D723870087AF582EEF7CB41AE052972D
-F6E94DAD
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csbx8
-%!FontType1-1.0: csbx8 1.1/12-Nov-94
-% CSfonts -- pfb ver. Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25242 25747
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csbx8) readonly def
-/FamilyName (csbx8) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 444 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 686 def
-end readonly def
-/FontName /csbx8 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 68 /D put
-dup 79 /O put
-dup 88 /X put
-dup 97 /a put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 109 /m put
-dup 110 /n put
-dup 112 /p put
-dup 114 /r put
-dup 117 /u put
-dup 121 /y put
-dup 122 /z put
-dup 190 /zcaron put
-dup 232 /ccaron put
-dup 237 /iacute put
-dup 250 /uacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-63 -250 1235 908] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E2214AFC380F5ADA59470F60
-D8D2FC158BF2F0A53EF87A1802A897E4E860F34BF60C83C787AD1CA226FD5272
-574AA5061E43F5ED5C153D504B9658DAD50711C40D80A64620231075FA7ABE3E
-BD352D568BFB58C633E5BF9C561DF52E008B6270A05DE0C24269DDFA6B90EC90
-A0BE858A557DD6AEC6BFE6391078465E967382FE98FF878DD1E6DF2B713AC8BD
-D0E7CC7A6CA9EB806A96DE26EAA48F6BC49A016BA0950BD9EC232543199A1D6C
-5DE780E51C464DEAFE906C67C49C455BF0CA836160C409FC80C6F82370C72BA8
-D5C3C0EF2535E3FA3DC2F4F540258726F28ABCA9CAA3CA878CCBDD6273639EA3
-3FFA29C328F8F9E13479B8B91887F4C073B873960EF6FEB4AD5A2D48197B28BB
-F5F5889EAE914D38E97DAF6F87C2C6FC300AA4152CD5DCFCA4D25C6EC8FD9574
-F9A763F3B362A7945B7F392CB9CD126E93E93998BEB1B48FA7148FFC8A4E3D3B
-FE2E959A1D12839E2549C628C4D60BB88BB045DD9113BAC0CA2AE95D514ACD8E
-F7295207634056AF510379159EBC72F24E52327FEC852295DC6EA59178BD6A8D
-3651E23EBD4BB12104654D566EDEE0B9D2D7134EFD01281C34C1EEC0A5713A96
-4CED3F0A760F5C37C8CA3163884FDBCBC075A0210A6E76BB413DF97AD6A0C787
-835D361A6ED43349EDDF3732CFAF4E0214B3650D7DDF7650F27D78D21769D353
-CC0F680A66ABAC83137C95C8320C361E0698AED9C0D736FBBE80D4359D8CBB45
-AB5F76401EE22C6CA9D78DC4590CEF1CD7D9F9EE334E93E0147DBCE5233686D1
-607998FFE1340140D01E6381252DB48967EE6DFF5422E8B301289648A5000AC8
-A3AD9D1825FE41E9E3A55597FE88BCDAD2A05C02204EA9D8962958BF100A9189
-488F9422B96396E29C438C2829B9254719BE08BB792A23CF23AE241992E2A731
-7D274FCA140E52839EADF299B6F7FCBD91C1EED9F09ECC2B0E6AD3AB468086AB
-B06ECB9CF4F23E1064585EB784AD2F5C33858B103D979480FAE1376502863F8D
-EDB1B1FBEB37FD1594608A69C7E9F78B7405B7AEF8D733992A739E44AE5BB770
-3C322675D8EC3F149CF3062EECCABCA42B6F41EAF4859C250FCF197EEF370E00
-45337EA05779AC0871796EBE40AA547D1B437DF0D8C3C050FE006464A2BFF97B
-39226EFA909BC04CCC5D3C5B8E6211C3F4C77C6DFDEDAF2CF0DE416D8632737C
-313B4F64682B9C446A878C782BA6D48AEE80E17953AAC7FDD23465363D9DCB98
-83AE261391BB54AEF57E8A5CA874C985BA59C4D1B57B6C8C3E056166319AE0C7
-A3901006FCDF8C522D1AEE2980FC7069A31D428F46C6623C7F7CF67CC77605F9
-3ABFD90E284BCE7CD72B54BBD37D4A2258EDEDE22F0A4EBC50EBF121854647AA
-569AECAAF54302F3064A3EF0B4017A8D53AAEF3115E208BC6040842D63C44911
-DCD90055D3B8AA5B91C00BF0035005D95468408633A976C2ADBA3AF8EBDCE658
-702B43ADD3832CE4BFCD1B61B37EFFD5AAF1922A3D829C633B0A4C0994611381
-2B83D3740FF3D7ED55DE1CA370209533AA5476C2EC803A7EF39EDE2C8E93360E
-1FC06A0069ED59ECE66C7978560BDEA165F84750F35C14DB4A4F7FC8123FD5AB
-ACFC49C2E96F45762595330BA8FE7DD80BA78103202820517E60D2D875C34317
-5BAF5CD54F977CB8B5D65E8AC638E3494E00F477C8D189EFD727A97C84E6B9E3
-FB139F7B6D5ACA1C723098A78E45A7F5B5ED3832AB28CBD448250BB9FE3B87E6
-8AC82DCBDB46E5343CC380151E941D517034F7C7EC984C2A117A6C7AC1EEA683
-B440B80A35F68C6ADCF07A8658B5929F6DA9415DCEC757234D7E12B0CD5D162C
-B41088E32F66C33739C33E018E5EB1F3FEE383C92177F8D7AE7E91F7DF158B16
-6366FC8E3A74845AD8C79B0A8611701B27461B74B80AAC905F9A699324CF7A3E
-D1723472890054C8BFC017250AD6D0A3255FD94DDC8F6D441A34C171C40C60FB
-9BA5B7DBD0A753BC363701BECDA5FCAC6F11DF3DE30A171828B9C96C964A14DC
-AC4C086A4B2552B3882357A5230DC048BC38170375ADA0C62535FC1ABC15F4A2
-FFA216377D4150D390E681658A17228A9C6F30BF4B24BC797DC1DDFF20492EA3
-4DBE29160FB2F608AB1CDFAB1AE1FEA96DE6B1564624177AD14E76E25587DCD6
-7D9E8FD6E82C5117FA27CC45D4C51C05C48492B9263BC4250302A70ED13922C6
-50D444AA631FF5A60CCDC3D72AFE4055554939127138E0F75AB5E2B2628577DA
-2CFD62E98C7F50275656F719DF78B72F8320B6C931FB7552302932FEB21FC02A
-12A167C1AAD59FD604C64D8FF49A496976B17200E233F1933F326F03AC309AF4
-91BB3B04ED0DA2E498ECDD863A23C95EE128597D2D38D6C03BF9C52FA42197EE
-2CCB4994074DD381322F9394D959C400D9106AC7DE4D83AA228285C5DB0856F5
-E1EDD10CEC92D0667EF2B62DC2DA9F2D8E92B9D67C9F47FC0985987F5CBA9D20
-87998EA5CCF56797122B3E8BC68D9176A0ED55A404FBE65F6C05799A732EED5D
-21986E5722AF2088D1A5D5BB01CF220BACE1091A8C8EA3E62EE2D2937A1C8936
-83D795876F89D7012D993518B96625DF5927AFA7DBA4D2747C455AA87281AA06
-C40DB502DFDD70F5DAA87B8727255841099DA98D46CA21C000F9B4EE7F4271C6
-9A0A7B72F114AEA494B7AAFE23DB8EC3A832431BCCB348561F889C566DE515DC
-06DDDA0082C6BEA629DB41CBA65377833056F60AEB2AE78441E30F4C25BF65AA
-365B9FF79D24C8CA7EDF59C5916563D04F15F56C57906AFA44344C37ECFE9D34
-D137D42B6579D4E89D4E7EA45545B47F3FE2BBC26EA0F155F77B70DF96B4881C
-F1A7A0765C61B0D5A0DE4826793FF7D6D8A90DBA44AD1A51816AC6B92AF3F26A
-EA52EF1FC68A6168EEAFA86693D02C6CCCB18BF84094887DB6A7DAC9FF656D5A
-53EEF104B0385A7C10E96165D1793754E40448F7E29691354DB9AB24C5185272
-78DA0E931D8A449F8FFB196051935C3E3E84448DECA7EF2FD8EAB8FB30F60862
-E0C0A14E58FCBE7E2EDFE1B0747D628D1093CF666217326D96A0DC7A9A2514AE
-869683F646A10238919D4E5757401BD8018210C047C48265F34156AB58FD8E54
-C6CD03FB133606D555F43BC28752A3533060DC591541AC48EF83DD3D7724B934
-3DE8085F0C93839B5C0CA783EB1AE94423F279BEB73DDEB6C3F91ADC68BFAE05
-65F6F9687FB93610A1B3AE2124685641BD4A36D56B31F89C7D08D04541D701E4
-FC243CDA055B08AC954FAB21DAAE09722FE94C8C6A51834ED385991BD3502F24
-4189248E3137AFB9B71A2B2329D1C81882F21C88ABB967361B1E8A826953EB09
-966507D44698D01AA2C23ABA5B2EE35431FCF4533724D7C23EC6A3876C9513C3
-B61C58E0559A3A226EB0C32CBBA2D00579F9152B8863BDEB3E20EBB0270329E4
-AF9E25BB76C8FBCBC31B65B53654E0721EA9079752183706B01FDC3372E03545
-D2A935933326E5C973F28E2ED89AC0C070E507F40A81C21B1F18F8BEE064803C
-65DF650B5852E5CFDD8EC43BF90F956B8DE26364DAAD253BD2C804BE7FE17F6A
-04CB4DADC762FD5DA38D1382CD8F84AE5F504BEEFBAB13A965992F08B812836F
-FAF2AB5D5379EA5487A79473A16C27831CD11803071A00908A7EDED2D002B4A2
-B374F9CB8EA325C1B49B0E34370479BB75729818F10185FD5FD8B3D9DEE0BA58
-3F1CEA4C6209E5C44842FC44CB82C64ED1E9CEDF5849735E9631617832C36C8F
-6509058B788E952BB4B9A2E817BB557DFA1AAF741955687D888B13614CB78564
-E7CFEC5EF4BB753BC849423D738E956667C3D4064EA243B210914315D3D5A3E5
-FEE457C615DAFD4B867FEC8466B480FDF02A8310F51A3DA19119F4207C6BA79F
-797A30268F9CB755CAAA19DE6241E5FB6A1906564D5B8F1D264C988332312240
-87B405853B6D8F43601E602090221EDE3202B90E16B9DCB3EAAC50567C7F3505
-C68532B476EAE85E0A2FD88B2A76AA3FB580636D539B30DB118010A920052589
-27B2FED128A379AB521B31BACD5705A3AE0D8803B213DC6F0F348E59F59BC214
-D00278CBFB392B3F17C71A48208AA40CE9A2AF5FE6EF2B93A0C5C91296FB83C4
-2FAD6AEA3B931E991540FCAE632C846915C267C8239B7524C7E7F770549539D4
-1CED8E5C518B8FC86577F471562E05FE36CC680AB595C65897BFBE679B7CC1F0
-F36602E1FC750A4F33F42759B3E745661D7AA2B1C1909ED9F5C6E7AC7FF063D5
-1C294863ED1492D14BD166A71CDF4EA7EFCFA3E8EA7785DD57DFA74AB3520FBF
-6A169387B0425FFCD807EFE09427405DF7F52BA1200DEB0C542638176C6357DF
-816ADB9ECB7C1DD940DEFFA2B5725D457B149913ACE2DD508ABFF92151B37CED
-BBE13A912A19FFD52C3A020219114284809A350C9A01D05440787DA6AE6B60C5
-31751E99872175145A127940E1C108EA730E513E66FB499A348F395190C97AB6
-AF2CBA545F69445C8581C00FF7A9C1F9479E28B872087659230A81F38D8B679A
-82788CB4B1296C9916D7F2933AA6DB908F2AF0AA1314E6D113D8AB42F4F2B905
-77AD60F3C9B3A04E3431F2E5BB4DA87056EF328AC60489F2F5F8891D42C916E3
-C7E5A2D1509FA283622296F4089C17C8A297158E342034A4A1BA35C71CDD6B69
-4D87176FDEF490027F6CEE15BD20A6914D3993AF6DC912608EB9C2034B201534
-D5ED5FC3B1BE12798727CA0F3BCDC4C8CE3E17099AF38A0408777269369F2B2C
-D95C71475CA7A04413A83D45B5447823F86ABCD252B4A811A4CF46CCE2D496A6
-E03BB98A3FEC502D6D114D02B2058B6B206E1EB80D7B0E83DAA50E9D9481C8C1
-7FB732FA6A22349505861A8FDDD3A48AABB48065EB92E51327493207F28BDCBE
-91543B64CB2261DCC97437CA61876075B836F532947F4666DEB8A72C3FE488F7
-01A26A2A927BEDF8E65A7A9695181FAB841FFEBADED7E461525D4A3110378F2A
-6F691B43BF89173E1A2A184E1F9533F80F87D101FBD6F0E12F19B959FA2E81EE
-BB9C6D477FE7AF117AD0FEE3FFE2713317D5E5B163F7F70FFA22DF288EEDDF61
-C28E442594D26FEA08E2F2B7B5AD4F3B25EF6D39BE6FE177A77A8B7FF22FE177
-ECF96E7586811233AB0258088FAE31FCFE20C3D5742920EA09B2F2990492D4D0
-6626F2BCDA30F65B294FFD08CAECE8E3164B3052406EBE35BD1676BE5345ABDF
-7C242D0A2B503EFE816996C6D06436AAA3C6EEA4AD64FBE7CF2B47192C26CDA1
-816FB56D963AA4417595C1162883F7681228396B42979250E76B2FAF3BC2DA41
-6C56910C96F3675933468E6C2F1FC47CD1CA9E8F5F0239EE5CBC718A06BEF611
-45E64B217F2A3CD0FA4A5E9CB35378ED8E0248471EA75066F8586468757934E1
-BDFB5D6DBEE9B85818E8EDB4B5025FD23A43276EDE974975103E0898F08BB160
-E33A1BFAB2A4F0D011D468D48EEE7DA67ED1782559455422F1715498F9989423
-6733344B3BA5A9253E8A8FB515DA69E3A1F85009567B8CD92B1EC89291F6D396
-D6230F005B441694E73B958FD4E72F1CF62512394717EB14F22965C4F766D729
-6C89B363BBF3718A3D3525BACC74242E6670F4067C85E40DB39DAC0AC73C5F14
-3F8A373D2D914812298FFD77B9E63FF35D4DDD434F1C37B86C6C6B7DAEE81B8A
-E1D63E37EB6A03A8749F287F40E12BE20FB3F6C8CB06F2DAB3ED9983EEB00357
-E501718D76A39C0C5A702DA0918CC86D33A9250303F157FD13916341A20DF4D7
-DD676C98D869C6E03F7034F13F8896861D75AD150EF9ED31895A0AB49E837FC0
-54E1F06DAC48562ACA61D6BCADBD419847D3DB8AA65886DBC55F1FC5998C40FD
-8F4AF01BCF60E69331FA71751492FCCD83A6BF8240D828BAC7B55E51CB7B93C9
-0A0F6B47B386A9E68DD6A747B9413AB5F6144E30791E25D3DFED4046BD67E2EA
-D37A94B5CB3FC06A61F65371E8436CBAEF180488947A19B6287F403C6A80F1A2
-C206AB5AACAD966DDBA7D0EF363291C16006671375B71DB175AF02861C26849A
-41EFBED4CB93A0483D64DEE6800FCA2C1664FA100BEE214A28BBB0F207C8BC7A
-43CBF4AB6AD83335DF0AEED9DAFC3B355F8F69595E43BDC531C18D6F880D86B6
-1EE0EF469A2CC51212C1E0E1D922E0F2DB46879040DE4C2D1FF151A43C2A892A
-BDE033F31A636D54DD6AE2564C7735AE1B5F7BC302E6F353D3327CD04771CD87
-D9B0C0
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr8
-%!FontType1-1.0: csr8 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25661 25938
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr8) readonly def
-/FamilyName (csr8) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr8 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 49 /one put
-dup 50 /two put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 78 /N put
-dup 80 /P put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 126 /tilde put
-dup 181 /lcaron put
-dup 185 /scaron put
-dup 187 /tcaron put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 228 /adieresis put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 237 /iacute put
-dup 239 /dcaron put
-dup 242 /ncaron put
-dup 244 /ocircumflex put
-dup 250 /uacute put
-dup 253 /yacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-40 -250 1111 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A1390082AA03548CCE363896DC
-8285532C521369225C90F80D727FDE65092A0044327885EC680B2ECCDFCCC5C5
-9B4F8AE2D078A25AEEA345A6E6A1D9F372DB3CF2B4AE635D7DB823D70EC82CC7
-1CF7E7DD0D047DC2513344927562E9838BB0A17DEC4E513ACF1FF782F3D8027B
-7E9250875DDD4EE3CCA440DE9C628C3EC0D771840D359B9EC8C94991ED9E551F
-1B6836631196198581D2485BC6D82918C11874F095154B0872CE54E96900BB2F
-F1C79982170757E4A6D158B2AD92AB11E0684F74C0AD96A690D55E3663F37009
-CC9CEA85C49FB69932378B3822EF0B43C4F6854FEA53FE3DA8C66F54621F5904
-A7167F09938B97C9827B8062CD47DB637EC42FCBE54AF3A2609355A07B317576
-DE207567493BEAC1C89FF58B9C93FFA827307FB2E6F3F01DBD6FC8E66F97A4D6
-21EE41A240574E711450DAAFDF021C9F67A3DF3B780BE6B6232F6F229F1968F3
-81E3D30852A756A7A7D78EEF9EC6B4D8D66E9D944152711B910140E070124051
-2366C14DFA3C6C1E735E950E6936B762980AFCBFE3AAE4146ED2CFCD68807BEC
-214893E1E127C8EEC0CCA2876DA14304B733B1794AA02E72848E8E518B25EEBE
-F97452C663FA963ACABED12285D143DA237226E2BD7A4F0716639EED78EBE378
-E9D7BC4B83C5A0A2669245F917062108AD42F9764EBE10296BF54D7986B6CA80
-087E85C5F00F28DA6531C4AE041F2E5D4AA22F9E9DA737F4A6BF14869A7EB733
-75DA3322DFDF99B3728AF856EDBC918E5E5C51A54E525BA6FC2D3371030BE5AE
-092F9B858E3BB0D1D4FD4A575532A9C1CB735FA64BC79B2FC5EAE708C34EBD9D
-FDC58B37503ED13115E5F582102C9783E60B190C327D29965133EBB08548C09B
-85A6241DD366C39A78E5B29FC95F9144E36E45667AD3285CECAB7F9821CE3B56
-A1667E12B07CDED4A718BE3B6B348A20D957D775A1EBE00A88FA49D7162D5DA3
-49E2D10FDFCB371480AE057743F4A2F70C61188724B89583E037E1E9EB3B504E
-3C216068BD41CD7D5DC36EFF5DB32968DF686401A661D6BCCB0D5FE9770F732F
-294945FB2ABBC294DC7C846B0EC59A70C0509B424179FAEA0FC66E1A132AC823
-8E0DEF34A278BAAC6E0A3A5B40DFBB643D9BA7BE0DF8B50A2062A57BB60907E3
-04ED4115C6D54944FAD307A470AC86AF424D4F13281CAF3D230C946BD348053E
-3C27D24DB0385CD21B828DE52FFDD3AE194DA3B93BF851F4C6221C2EDA9373D0
-F7929C6B47AB88035D0944FFFE3002DF6AE6CCF91B847EA18AECF20E65142069
-3935901493ECDC5F6A7B5003F22B01111D92525F8D0110DBBEAB16E9ED6DEFCA
-7213829FFC1EEC83BB567764558776657C2AADDBB4DEAF6173DF15CCC34FD035
-C03458A6A578F45764486FDFD45E3E44D28B08340691A100CAFCE5AD44BF7F5D
-0AEE079F28BAD7C8D0EA2B55E320CD7FE3B77EDA9698F8451AC1D854BB10FEFC
-9C741CC32E2D7F2643AE066DA33DE7989CBBC604FFF86ABD2530630F257D4BB4
-F2260CCB88476E32262EC47A50644F962357733FC1B356B9518351776FD3DEB9
-1877503A72206810737A89929306EA0465A385D0BF218F3A11F4433B125B4BD4
-7C08478D9475A06E581ABE9CC523B9CB0558154BDC923F71E97900BA235CE8DF
-21D4461A0D822365912A74FDB2B29ECD5E540440EA91FE9D2762CDEA07441BAC
-714E876997F26C1556CA24219E705A01FFA2BDD006686575AA14BE7415679E50
-43D0F9A58414A458F4849476A3C322FB4BD50A4307BBC935CE5176285D4E6B60
-1F21C9D354EDF049017200333CC07F49CFE7A8E43EFA5E6E28EEDFFCE9D47C8A
-761686B3CB63C93A35BEA8FE88940B5C066697D5A514160F885F43CD8AB67C9B
-BF9705E0CA4DC64294D357B54C1409082A13977887FC85F0F038CB78DE39D29F
-7EE11F4D31AD66E8CF87CD70E79287EA95906C9A0AC65F04B9BA12724660FE31
-D24EF556CE9C161D1DFED59645E40B7B88365D6CE8450B456FB8C10D886142EE
-BB64056179E959FE6E4D9A9B2425633072B651C6982E296AC93379408538D053
-ADE1BB933C09791A87A9FCF1217AA9A67B0698A2357249CF3407C6B317DAAA07
-7140D221DB8F3554D80E2AEED997349FDA0590CFAB161B8A73E8BC46131DDF3D
-6B0C1D3BC5CE7A33534D1676F129264A19BAC6F0349F89EAD1059433A5CE8E8C
-5467FF6A3CB0EA04ED101DB0F62367E039B77B2B3F740A5524BAC9C650E15306
-03B66761A133F9591E9DE638B7AA9C114924274FDE6E49A2E9F423F6B3AA1E86
-06EFAF52AA6127FEB0861CC7ADDFEB958F6D45CA6877780A50C4FB6F6B93DB75
-E49A8BB0B662739B69D43B4989D4693403AE37BD7E69AE96CE00E15B86F1C6D4
-4000C37DBA4A37D8138E34098A570A8E865CA365430C8A9C4B859F60A3B2A256
-0C97C49EBDFBDE5623A6F926BF0DDA2444FAEC53BE7D7D61BD17A80537A5DFED
-65A166E2DD9D565CEF04D6F4052688E451F4A4ED2D4A642AFC64074DF1060452
-C5761A1C46A69F7CAE3119EF7574AEF94F01021FAFB921CE965EC7B8EBEF82C1
-729AE5426D7D97CE45A222019C4896F9F623CC8D716F5B7772BA21252559983E
-F67873D21D535F41C91B2ABFC9D7DA596B0664DB5ED87B46D5C8AE9AFA111F4F
-267919AD8049F91CBDD00194B7969C3C6391E0F7B470E88B844BE4903A14BC53
-AD6A5F75E5EDDE9F3344CB109F552E4AE184CA60744601A1178B8E417519D3C5
-BC9917B7987337A60E65E07AC1AD7B44C74A2F506E1F6276B5951FE289D33760
-13371D55B1FB441D30CF22D308D636330AFAD2E713D40B3CDAD5CBAAFB9F27E8
-4CB8E251D57BC92725F58349CFF1C0694146C46A6DA7ECD8456A20D0EF5B9F53
-B7EA82A379B5405C1CD8D3C8D56E398E25FA87EA568CD18F4406A6B0B1DF8315
-8A50400F8E149F0A74B4D8108E199057E34D99FF61AC44DB4E4E3A7DA051B9FF
-C766850839FAF5316DD6747D2351662379D4B42D278A7D0A2648031E19A88559
-91B2EFAC65D1017912ACFAC9903C261D2A3238A4713D25AB304CCC397AC28D04
-59CFEEC713B2C2B0DF1502F74DA2517D0635052AF45C80A628706E4964EEC43C
-8C0767D37ED6234F012AA59BFF3E5B65A83756BE5276B1E4594F360BE45E5919
-86D4411CC8B8A79AE77FBE6A4ADBFFA8EB02B814E46D4D17A9B61F35F3F60A79
-361D0585C1AB96651E3C0267F5B4C9562BA19D440A20FF9F55DF2F954530A5A0
-1BDC34AE2FD29352DFBC654A9647AE21C536A7843E16DD14E64E0EB0836277B1
-1D204BA28F81B4F4E5F3C7DE5BF2797C035B2B20A86BEA475E558527CC045F16
-A0F2EBBDDCD3F3575D2709099CA113B43BC0796B4545F6BD76336E48DCDAD950
-36B8CD49ECD9CE1D2D3EDE3DA855B3CB1DC18FFD0173345D027CFB81F91607EE
-42126E55948235F1EF7F15BDE8ED2BA445D887794A30754218B68B589C2CA977
-41A4433495939F58E420174767AAA196EFFC9444BD858AD48E2F47D4F2B1A4B4
-DD87BFD95175BBA16A7621B0CDFF3D12047898A6F5937F7E79BEE4624867A4D5
-15CF367AB2A0D98A0CD50C7E2F052AAE7D33B2C774CA7C0228F15CA9D65B9AE9
-72728875E6DF099D84CDCF16A93B1C4B55F5CF82D99E81F68ABE1EB0F27B44DE
-235863CDAB077DCC0678E274F3C0F92332E6DD690B89835437ACF21018B70B35
-BE8B5935D1BC5C9132F4924FB4B37B6FE7341C2D03A8FDF0F239C7C36F92A885
-DB53438AE9F4EA20CFAB2967C68428067FF8FCA8921B0B534B5319F2F45A7B79
-67FEFDC358C6F93440F8DAE91E31FEFBFB875BED8C92FAC2C49178F48550D160
-71CA54E82FCB5768AA5DECD380A86E73F7F9969B12E2D84C776DC43D3F9904C2
-C9DE8B8986196FF05FB3AEB8A633FFB38449F9247F90954F3570B4AEBFE1D840
-08D127F1471614619B50CD819EF29A7F3B3E05FD6A2F01EAD9B93EEFB3336847
-A3339C54796DD8F9D179A56B213C17B7633D7425D459DBA81E168644E4EF6A1B
-DF29A4941E450015D187F1EB6F2476E7A85E60F544C31146E5C09AF55066379B
-E1C9C55AEB9F98CF7D4702A4B085E78D38C1EBDFFB40CE0D706DC5D28543F419
-0D8B0B53FD8BC8FB81E511AB0BD33130D9F04CC38E694C8707D19FAABA5F507C
-5C1DA53DCA966B0E1836223CDBCA502B0D93CFB4B78A3EDE820F6BDC902EFD82
-F902DDD8103314600CA46BCE0CD0DAE6929BEC37D0ED814C63F7CFE6F712643C
-8F7D92BE9E47851E63EF3D5236DE822CFE0E136D48EBA150505BD59DDD94CE9B
-85C60E7173B2ABCC644D7FB7EBC6DF19CED6BAFC264008A72C2DF8BD0B459AD1
-52E8CE7FF30BF3DB89AE7B1DF29D52876FC81D4DF5F4DA36431BC8F6EA54B70C
-0EF8BEB8604FF5FD9E3173E7DDB3BF92585C10E917475156F390C9ACCE88B06F
-F707AA2F03A08A23394E2284F82393DC0F8370316E32E8B7F46ADC29F090CCEA
-84E54A7EC3B68E43A7ACFC6297C470D14622F0B7253CA7E0DB6BD7F937695EAC
-3D0A40409C0C67C736E669CED8A4DCE0A62204D96C94FF5BA678141D98D2D6CB
-FB28685983747B5B3852619D92B819E7ACF68EBCBD752BD6163817E93BE9BE09
-1880C88708AE3198B801DF0058B40279CDD99B65FACD13E6533881716796158D
-1C512DCBA26E1F3A2B8F0B5E4015522A10EA9FA4661F6D938493D376565DE1C6
-F1E885FE2BD3A2A7B8DF70C6AFD144C552591CF870650DF77C2EB6854E0ED019
-6862C7EFDB2368BF067A29EE38B98BC38B2B068033E07D1F701800439A027840
-2AB2D2FD19491397EA75713372A5261D4D69075D99F04B4CDED3B58084463B7F
-C1A285144B67E4A7D7F1327DF0DDFE3C29EE7D16E72DC368A3F3F0E8F5E6E727
-289A40307AE1F46F9A902494396134D11622DF81477F24A7332ED803E491D5A9
-ED6C3484C1A41D4DABBE497E51A78D535DBEBA13589FBB672821890510107246
-3B60C95F21310B86A03B2B983D1BB92601B487E33FED11DB571AB7C34E0C3537
-4099BFE1B2E0461E4576024EE88E8553EDD187FD1E7CCCB0B72787837A04A001
-455EC052C2F61B5234EE225987A03939CF14BCC9FD679627020B983CC704A8CC
-E9CEB7B5168D841F6717E4EC4A15A92CF9EAE6B8969FFF4F0794339D95093824
-F5B400A25B444876934607FCE7D07BCFCA67D4F8064CE5F446B56AB5C64D2BBD
-8BA18A5FE894FB4B6E12BEE8911D0B4E379AF22675A9AAD957644E5B9D0C07CB
-26F30D811D2644C8D07349C6FDCC28077704FB17619AD46F23AAA97303C3BA75
-933B7539D0DB1D970A47D6EBEA988A865E5E4E79EC89AE7A71D6F8571AF437D1
-B9E67A4C97B398DB54840FE2BFB0EDC11F852A246127888E0CA82765495C86E5
-C0B5A0EDBCAF29A8305AD10EB67585FC0F3242B56C5229ADBC45006F61C07E84
-40480BB621F8847016DFE7E3D0B3CA0201FA5B45E938BBEB4CDB67182D07CAE4
-1FE738160E8FF43A160EA0C40A1035CC7C3601D995150C5EB339FE04DA863BDF
-DD3161D357887D1A1E699D5136486E2F86C48B573B987B7AC29155B637171F4B
-8AEF42BD3AC44271985DD0486FED4610DAC764506D7ACA530EBB62F93479F780
-20B44398C3CE288D53F9D3F6E727E260E93C04021FC9E9B08E262CB9516BB3F3
-9B17B75D3C63B0CF4BF42E1B78D436B8D8F975CDA99DF4538EBD6E31104E0DC6
-BE56B68D9D7EE4A69806933404A9C93DAE7D6F10335C3FD37601BCD44EDB22BB
-BE48C4DEF81DC29A0869280E5E05C96DF61B1A8DAE9FB396CCBE78F0BD403184
-95EB5FFD0E8A6E71CFF84EFD8B851BC1CF1BD54A9BDAFA98F9082D78B44595D1
-DC94C7E25BAD8A752AA5D7BA9B687BD47672695C0752B0F998395B5E837D05F4
-091F68DA4692E364EA2958BEE17FEA81AAB2D709999B42769F316B85BF8ECB9F
-0EE57E5296E1BA089910C005A28A494691A20EA4A82EA82262B87AB14BA8FAB5
-EC572492A7C54FB7967F66036BEB8CCE631150BF4F061A57FF8FDE33D3A6F5EC
-1D661554EEDAEE6F8CECB6C9AE6D1B4F438F70544BB86B631EDADB7C3A61162E
-655A173CEC4F286D23A651155E46C0549202A1290B83BF3C864A071870946F1E
-09958F0849CACAC8EC60BCD95A292E3B406BC3707C6D6DADE8448D28CD48CD2F
-2FE0B81C6A6A258F255DFFFF895743F73267C042667808B708B634042C5D832B
-487B27B8449A319073F6DB98FDD9907AF53034E58E6EE02E320B38096751A93A
-2FC8903CA28C987C8C64DDECDABBEA53AE09E9EC7FAB1D76C240EC61F16A69E8
-0DDCF9B71D1D063CD3FE784DCD22CFA472A0224BB50A374FC6535BF0D2E9B971
-BCA305A872589DB11815F8533B2B6DE7AA5FB46CCE207CCD338291205D1C8011
-A4603E682C2144EF395C27D4642981D5F2BF89B61ADE6EB218FF092C12C1BC14
-F7FB77A8FA3E02AEF84199717D7F89A138E5A8E6C47D4FE968A7E75BE732BBDC
-86005A6AD29138082703CF2B849E22918BC07F12C0AD7112BA408723431D7C81
-493D6844900B6334EF8C6991803FEC41EFDBA14CA8ABF21120C62C254C3FBA12
-EB82E4C5953DF4480D73654B1F50BDF395B2733C00942AF58AF1EFC21F7F5D5F
-C0756D629A6B03612572CA7AE2F0683B558AFE4459F07F66491D7A5B41FAA64B
-55768E1EC9DE8E705DF32C3B4DB746DEC2430FF5A37C38F80A779889F39B9BAB
-01296D48E85D6550CEC37ADF4727892A2D3DE9FE489A1E434BE61E39E862CA60
-BBE55CB0480758A01ED77038065D347EC7959650B7F84A94CF496184A40B07AE
-08934E9DF83E8F69BB8B183AD6663E92FA514AEF1487DBD52180B24596754387
-C99CFA9BFC5E6247C74470E5402F1D85FB4343A8766170EBB96A89369F7F72FD
-5108F4E4571EF9ABF8FD0E114648881A5EE6DF669ACE73CA32976296CF3F1A58
-1B616B41EBCBD3D4C659ECAD8FDC0E597B86E974DB4A3094EA41F159A761384E
-91F0D358CD07CD16D6D47C2CE9ADE6AF506409A55E5D98AA42541D85C0FA966B
-B12E7E9F30037630904D3F52A7B3E7813E75B2A51620B49FC035EFA937AE9F95
-51BBCFB6E1961A42FE363BE6E5E58C5897015E5F88987A59B85A70CCC8523E68
-5A7FD1ED4078A5FE609337DAD0CADB792A88014D0C3D568A4F1D8959D9362446
-51F9A95E28140167EAA169610940D8DEE902FF76B7BA0FACD63B19FDE7042B55
-7F07ADAA9DA81A9867BBE53E02CCC491D7A5482C08AE3D2734A19342458C0FCB
-92D5CDE2F297CB467E5D86D52538998AC840E31B6F3A1682A0248B5B51BB2C66
-6C273F889562F76598587B298B82AEE81A383A6601677897473CB0F12827CD64
-6DD6897BB1F10062D8A697AE87AC09675BD66C55D874D7C51F6CEE004FA2AB98
-F7F5B8C7A69469672BC60072B7285436E6D19009144E17A69AF9C75AF8CC5954
-C27B9CB2A91D40453C3D4EC731732638B9BB424AC5AC7F5FB294B8A43C8CB688
-5A1CED394A4FC1C594DF0DEFD0A887065F7CFAD4EB6258D1F3F128CE67E239AB
-D781962DD3CDDE781600BED82963F8DA956398DC324B1F27AE1E4779807D461B
-246D58C11E534FD0C32BEADC7D80DCBE7E5C523EEDDDB14A29D167934C4EB81D
-D5FD065B14BF76676C095A4A8F7998EE8626957B1A98D19EE5868D37510FFA7A
-7412CE0F8E1B7811E787D0CC8DD00EA54D778C07926E29E37A2FF2B05D80EC4B
-F47A61C266D399955748F69CDFF16E1B42EC667BC32E3D7DDD2560B8AD58435B
-D6A9772A6F7E5DC47A0C0A11256DC2D6E8842D816B0390EC66FEC9CC90E2D297
-2513780B68273DB761FF6B5DE0E48C9C5905B51EF916F38266D214D6B62D7A7E
-7D5A0B1BB8CFB2FE3C5AA85F8493ED6012130751C711EE872657E8B88FA6EFEA
-81A91F7BA8C684FFA97BCD1193EBA08F93FCAE346A66949CFAC8583A161734F6
-6760C4BCC657C5F9D6425399BAE067D1B2A9E5BBE52BBAA9F1A6A973C88FEAB5
-43F97B3DBDCFB11D1B270DB0F87F87378565EE6820BA6697E6EAEBB202D8FB44
-65F88001F83B7A71AD9FE4BBE7307F9104218EED6891B3F28F4E86EF3B6F9F1F
-F93722874C53C73A9AF5691A3A90EA5E8786467895BB96DF77C7E43E80EF8459
-7FBD645DE3819474827408E10DBA6C8027D9D95052A4779AA2F57E7EB5D0BC20
-32C9A9EFC8BA2D240AB9A40C90BE5F3C6706FCCC4506CE05F45EF29301179B81
-5ABDC0226852EC246DF70261888879DB8F4B5C49549182FA278BF3029CB8E9F3
-04C6B9FB736F263093F6964508F986893F690856A3CE7A660D628F2194934315
-651AED9D746178DB8D026A4B7C153F23CDE6EFE943A18488B16BC8431659DE93
-4FEDC555D16C0DACAF7DF78E60098ABA2AD2A5ACD5748281EE6E462BA0022839
-D535DF8B9CDF6571D00FDEC1E356C879A12BE5F6AA7A7AA0E6E7882933675FEA
-18A0DA3ED360570DF5DC9F4B890229F9ED8233EEB732C8351E66B92F538986C8
-7C9DF17A169A1089751D5B9B3463651BE40E477155B0E737E719945BC2E42161
-4EC791599F93AB62248F4B5805F06AF9A0A143F178CA10BE059CC65C967DA033
-D1197498669BA22297944143E61C23B278BBDF64766430F9A972AB167BE0398C
-E7E925DE2FD5A7DE7278102D748C661A42C75CB5BB702E235115DE37D424A8D9
-5AB8B255B99A4FB174180F3418CCEE82747C17655E47E4B504A548CEF198D84C
-8964578ACE8B5CEB3CD9BAF646C86B2B15A78076A2743FFD4B469D9BE32470F7
-EB86402331DD7D65587DBA6DD1B4D5A1BBCD12886350B490B7BD60228B5D9E7C
-A900692F54A0155B3561A5389D0D94B2D3AC32A074BCB322AD4125935E9CB590
-A1BB932217D3B1CAA8B2FF0BB974EC9B02FBC926CB2433CA58866704F710BF88
-9D46043E96619716FC57FF52B2A5D290E0CFB87F675905F63475B2ACE31B60B1
-9AA6D0DDA0F1D7DC2CA3DD2F894A4F11C7C0D43B03A8FCF8E2DB70E0996480E7
-B155E65A6886FCC11241A95D135C3E7E8D81F3B582F2C6B70BCF2211484AA40A
-5AE20467E1A8052A4D8600C171F9FC87745C9233E91116EB8628DB16D93147EF
-5D0E092C314F9449B64FAF2C9143C5AA1FF160DD0ADE161E2C1827E2B54268CC
-556B286D590F746DD8CFD671D0EE29F8BA2CAEA3B02F859AB7D28E6F0E1E51B9
-AA3087172E1E52EC0E1D508BAA2E93E29D07AAE40391D9684E616DAF52A90DE0
-9DC04DE7C5D8DDAD516E985952C55C22FAC74CF5A376FCD3FD3471CC818ED831
-7AA36C82737D14672986F14C11F572A4B979B8E65394803B3D6B34E238CC8762
-154B3A67F608B4FD76F1557B16467FA38E86DD45C76ADA664A237777FDA0483D
-E021E481DB918CDAB2C4A8B6C2297262855FAC2935EB3B284F0BB97157CBB444
-196D6EAD70EA205B142BD4F55155990276FB4503A70EEB8CC626B2B2B0A0D373
-783EC741BCDA22AD1A839A14B9A97D0C85EAE401A0D7F17CD57A6CF9B3E088E0
-365F09D1C927AB4DA80D1F7AED1A79F95E48B5CEDD27D23CE1F372760B08EA7C
-5DDB53598C07BB9DA3AAB787C3721288056FA3121B6AC1E6CDAEE51CD964A341
-5CE8050E8A24476C1047BB0E78367ED50199A68A19F3C8CDDBAD3FC2B8F7084A
-C8D5C0E63A718D19C94DCD31E3A8D792E63C57B921E9083C68FF087F68C852DE
-086AD9FC46D94634A40754BB9771F33B31CC7C15AC8048237B35F1B289487436
-2971A39EBCB636E773EE1AD4C0556B43BC3608E4BBB2FB96BAA1671C0FC7D93C
-7F0CF7EEB2873730129F797669EB3716D0FB966F06D1C19E10E46257F5A44A3F
-5801FA3C76985FE15E8C6C7017288EABF56FA1D0E70552C15E7C0E50C94DFBA9
-F0CE421196E07129E2753B9A3C6A04CD956D91074C5F41D862DD09A907290014
-01C32A64D486495A88E8DC8CDC94052A2A02424C07F9973CAB15F2BA5F02704A
-5AB0C9C0302F60C98B264925FE6783844AA4DFD981AAA3D16E0EE21E1120CF8F
-F463B6E382FADE9F6118693A6ABA6AE4014CC44D391B0B8EB9BC6FAFDBA0EDEF
-B4EEA2F2CC69F29B6C5C33F587DD60D98940C508D3DDB0CD06A2CE62BE4A367C
-B6938BDA64EC959F06D8B41AE8D7D469AC4F0625C9375CED6AD1FC554C79BBD8
-3D9533544936910BBFA9BA81D8DF7A41630625259B1B35EEC474C9A4E1766694
-1D825E46A5CE1C06FFA3D8CAB54DDBA0C28E22EE95ECF451A54BA43404CEAAA8
-726EDEFADB2958EB77C9911166B3AC7B4F6A96629E5528E70173903B3DE93D85
-A9358B70619C5674CC2225EA8DDB87F453D299C0644DCE1D8FF6CF025752DC97
-FD8DE71699CA9C70B8ACB4D721CC7853835452A1193A97F21C18A3B41F6C59D3
-0BD6737422214FA339E99D43BD1C590AFDD7596FF0D11C536E61E16A77B272FE
-D37CD28FB1330043EDB707F3006A9FCCF2CC50030A3F738BCC81C3B785F0FA36
-A62C0570E15CBA245B37CC3637DF5E62ACBD1A6D97ED6856097C3F325A624215
-5E0385AE2D933A150B4C9DEBF7B5E0A2284992C27258F975A48B071DD5145BD2
-A8DB6BEFF219ADA81F71C5D6F82E5BB14AF17BCBDE037C010DCD92F94849286B
-087F3FA85CF66C5A32C6DBE6D907B0CAD21566C51269AD28693165D82D6C5642
-3C61D381A9D2612E22993B1DD20A841721904D1E2A43EE91C23438BDB2BB2B64
-95D20C4BD5112541978C439B7E1E0FD376862F5B8E3EE945D11C4DC652B91F7C
-D35D6F80C96B820FA512ADFCEE5DC8B636F3C8C353E596F77A477210C130DE8F
-FEE70044ECBDD1E07163217CC782C2EA28F9A269878FC9C71B8608490958FF27
-C273B3C1266C478F151D273D78DBD999463F356D72E76BCC2FB8479A30860639
-B09B61DAAFD3C7CB6F743CB0DE661F5F009867968B936F5B2C5E2D9283108D58
-763F1C549ABF5F445B367D1EBC49F0AB2DF426CCEEAF3B016A7FE71B92F1C9AA
-D954E454F825A19024461514C918DBF724835B8A7D5ABA28442F26720B3BB194
-963052CA0D54168BF24FD8CEB9FD91AACACF6D56814E30BF0D0CCFA25235231D
-4038F5B4F16198D7F2DAC82F797A1AFE4F3B0AEFCA30BBD1304EA4E7C379235C
-8095D02797C141D070C1F2D0053414A8394A4C02B0A68C2AA62DB0311D2736CC
-700A7F1AA7043CC0956D412686A2EC165BF5EEF5399E9E209CCA99FCA2126AF3
-4D3DC19FC13AD5CE601B8457D0044C79A7F6F427842FE54DA145B03A06DB4231
-745289858ED456DD43B27709CD2C6269F4EB5E1D5D6B180B232F09DCE691F7F8
-9D472DA89A0E4AD769E52EBEEFDCDC40B9A16BD8F53B166F8CA87D42F5F03F83
-A574FCFDEFEE9A58FA0228B8EF495B879D14F5337FE08A426BEBB4E95FA1A478
-A2C0383F6D714B79839BA789B6C84CAA24B3116290C688179EBC8D8974B6B83D
-6864A8BDBD3119208B65BCBD2D235AAA888F9D37B3622BF88A297004AD2E2F2B
-D1D2BB1A32DD3A2A46D9E4F39755A1F16AFE8711AEAD81DB3F6EF138DD814EDF
-0A0CE8667B0985B405EFBF58E68DA69C5B48A30536AE7B9E8AB0BB2882001ABE
-242B837F58608BA8FCF10A948F1C909B8CD6EF0962F0B18F340AA3E9BACA6A25
-61D45476AE2984019BF108109EB8C83D16B759BC65ACB7A324984BA50BCC2D09
-ECA71CB617C18B66504F4DA9681E66B55D2D17798B8870219871187CEC31CAAB
-AE42420466E634F64380F065269985B22B4B9A4BCE1F48E9964488CDDC566661
-A604EEF778A5AB11BA356A2A37E770F11E6E78E0F253585E11C0F881321C7059
-A8A62BC13DEA6879668721A0CB20DC1203F54782F9403ADCE7271415ECAC5587
-1B3EA170B8331726C049117D081E0B168FF6D0629F1A4554D8C8F574D331597B
-DCEC0EEEA3718AAE845D3F6C9A0E11F789BE56641535FB75B1B2F32828FEAF1B
-15C31CBA3E673758E2E04D6B607A996A12B2DE67CBFB51B6777CCEFD3BB2A317
-1818A35DD6641EAF719D3F6B356E8C4A7E67F2FCAE1B7475C18DF9DAA5BC193B
-320498074BFAF27F871CF0250EDE025184F6B5646CFF95DA1C007F859BC37327
-DCD235958BF53924E79F798FA820D6DC2169F99F503DE112094EEE77DFD75C5C
-6182FDEFC228C48BA87D979E4C06C5F90956B68A133F548751291E78879746BB
-8F4085EB7B0038B2C835CC7F4562E082AAED3F5F803DB0BAF26D8AD1E917685C
-8FAC69C85D2B069768CDE45C39CA964683DCFA5A5EE1AB0D83058A4597EAE2EF
-63EEEB94184DBC2406111BF53C3515A37E78A1BAC7F3147A402F226CDB77F2CE
-94EB11B6225168957C13D849623C0F59642562824D79E2CE3707D21DC6F29772
-CE1D416815DDBCD0175BCF5F5E0DE3E9BBB3128968388188892A84699D0B2A96
-9EF32168ABE59A3C9AC81F7CD7D46FC2C3EAE1F2E6C3A8DD7F425D18633F09F3
-9559E50B45E2D3485DED4ED9E48815C6667A695BDE35F5BB65B6787B0FBE278D
-4E14340FB2DE92A46F16F51F0FC82E65E980C3DC333E170FB78DBF550CD830DC
-2A2A1ACDD5998CA23CB71C4F2DE57E6C3F58EE85D5A7D51B6A4A94F8010CB2A5
-1EF05F55C65872EFF24332466B6A2200AAA5A8120A78893F7F9F2D5DB03378EE
-104142760CD50836A96306C1592DB07ADFD88797537B6A1B0ECCDAA904C30D38
-672233ACCE77D662A7F38B30D8403D6DD720176A1CDA181D259202BAE3CB5F67
-49E680B7F9C6BDBF30654837A5761A6A52BDC262F466A1E40DF1BB5AC239A23F
-B27DD3A3F9612F999880AFF524E3C915B65CB7DE8C785E05569A1A9C4EFD79D9
-ED4AA298783C8EB1B98006C9FBCB72F1C623C45068598BDDBA1FFA7D53B109DE
-CC1DC908A9A0400111AB469AC20D8E8C8C705BCD4359C24B8976A440DD863FBE
-615F22659C37E0B0A4B169845C717EF200876A519BB0C5F9BD066120B73D301C
-14DEFED06B889DE143978FF3AD885DAC3FB1BBFB9B0A081E66720D2A2993EEA4
-B72220BF7F3E53B6FA6C2350A5156B2523053C970CD322AF91D3D775DA8F222E
-FDD492E5C208883ED3FCBC0E2C7015F41137102A5F4F059CA6F51F0AA9D9EBF0
-BCBB6F2F79338847BC7C4814E976973B60FBDD0060FCA8087E00C47B81432A13
-FEC19A3F38573CA9C6E82D950C481F74032A2DBADE0DFE98228B3CAFFA44C57F
-0DEEC8796EB434FA2B945085A223EC257DDDD9091ECEC1746DAE2750CBA8E112
-FD6DAFB57ED73E01AABD091D910F3F992A644C565C8E036A553DD5755C766A3C
-1A50BBD02F9767486714D1F6319A0315F421B7F225F660A56911CFB94940C9F3
-D313A2D7E07BD0404FDE7B73A71932E2B343DA71B6DD9E91EF8A61F4C5E10644
-DB74ED3F2E45640E1DDE19AD7E752B92E6D8656C65DB65DEEE05765D05FE3468
-6B68C406F2070974DFB1643EC5E833EEC9AB1C3B263095A2174A5D54F7631E3C
-F3953CE8A0AF2962AE604C8D32670329E49922AB48CAB1B1BC556B6363D4A421
-BB42B3D27ABD305B465E445BA5EA30162679A5B30A0F7121F4F86A060D09641A
-FFD3B7378704D1A7AD005491E758E2674B5C9096400839BB0A3E585AAE44F1A3
-EF8A7468466E812B078D21DF051A4232F7DD4779D87F993F4DC55EC88F7F4EE6
-4C99A807
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (sk-dired-ref.dvi)
-@start /Fa 242[61 13[{}1 49.8132 /CMSY6 rf /Fb 134[32
-32 43 32 34 24 24 24 1[34 30 34 50 18 32 1[18 34 30 19
-27 34 27 34 30 11[45 1[34 44 1[41 1[45 54 3[22 1[47 39
-41 46 43 42 45 9[30 30 30 1[30 30 30 30 1[18 21 18 44[{}47
-49.8132 /csr6 rf /Fc 129[35 35 1[35 2[35 35 35 35 35
-35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 1[35
-1[35 35 3[35 35 35 2[35 1[35 35 35 35 35 1[35 35 2[35
-35 35 3[35 35 35 35 35 35 35 35 8[35 35 2[35 35 35 1[35
-35 1[35 1[35 35 35 35 1[35 33[{}63 66.4176 /cstt8 rf
-/Fd 2[60 2[64 12[32 3[53 51 6[56 34[51 4[45 62[51 60
-2[60 64 45 45 47 1[64 57 64 95 32 60 1[32 1[57 1[53 64
-51 64 56 13[64 2[78 86 90 109 6[72 1[88 55[64 67 11[{}37
-99.6264 /csbx10 rf /Fe 5[45 12[23 4[36 41[36 67[36 43
-3[45 2[34 1[45 1[45 68 1[43 25 23 3[37 45 36 1[40 8[61
-8[61 10[62 26[32 32 40[{}23 66.4176 /csbx8 rf /Ff 2[37
-2[39 5[35 1[39 2[39 1[20 3[31 31 3[35 2[35 34[31 2[27
-1[28 3[20 54[35 2[35 31 37 37 1[37 39 27 28 28 1[39 35
-39 59 20 37 22 20 39 35 22 31 39 31 39 35 11[53 4[48
-1[53 6[55 1[48 54 17[35 35 1[35 20 24 20 2[27 27 27[39
-41 11[{}56 66.4176 /csr8 rf /Fg 23[61 6[67 108[53 1[57
-1[76 1[76 2[73 1[38 2[42 63 76 2[67 14[103 13[105 68[{}14
-119.552 /csbx10 rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop -259 -364 a Fg(Referen\350n\341)47
-b(k)l(arta)e(pre)h(Dired)-42 -256 y Ff(\(ur\350en\351)25
-b(pre)f(Dired)f(v)g(GNU)h(Emacse)g(22.x\))-73 -176 y(Pr\355k)n(azy)g
-(ozna\350en\351)i Fe(\(D)n(X\))d Ff(vy\276aduj\372)i(dired-x)-450
-31 y Fd(Spustenie)35 b(a)j(uk)m(on\350enie)f(Dired)-450
-196 y Ff(spustenie)25 b(dired)1066 b Fc(C-x)36 b(d)-450
-276 y Ff(spustenie)21 b(dired)e(v)h(adres\341ri)g(s)f(aktu\341ln)n(ym)i
-(s\372b)r(orom)71 b Fc(C-x)36 b(C-j)g Fe(\(D)n(X\))-450
-356 y Ff(uk)n(on\350enie)25 b(dired)1048 b Fc(q)-450
-561 y Fd(Pr\355k)m(azy)39 b(pre)e(presun)m(y)-450 726
-y Ff(sp\344\273)24 b(na)g(predc)n(h\341dza)t(j\372ci)i(riadok)598
-b Fc(p)-450 806 y Ff(vpred)24 b(na)g(nasleduj\372ci)g(riadok)673
-b Fc(n)-450 886 y Ff(hore)24 b(na)g(predc)n(h\341dza)t(j\372ci)h
-(adres\341r)565 b Fc(<)-450 965 y Ff(dole)24 b(na)g(nasleduj\372ci)g
-(adres\341r)692 b Fc(>)-450 1045 y Ff(na)24 b(\357al\271\355)f
-(ozna\350en)n(\375)j(s\372b)r(or)794 b Fc(M-})-450 1125
-y Ff(na)24 b(predc)n(h\341dza)t(j\372ci)h(ozna\350en)n(\375)h(s\372b)r
-(or)473 b Fc(M-{)-450 1204 y Ff(sp\344\273)24 b(na)g(predc)n(h\341dza)t
-(j\372ci)i(p)r(o)r(dadres\341r)451 b Fc(M-C-p)-450 1284
-y Ff(vpred)24 b(na)g(\357al\271\355)f(p)r(o)r(dadres\341r)728
-b Fc(M-C-n)-450 1364 y Ff(na)24 b(nadraden)n(\375)h(adres\341r)863
-b Fc(^)-450 1444 y Ff(c)n(ho)r(\357)25 b(na)f(prv\375)f(p)r(o)r
-(dadres\341r)758 b Fc(M-C-d)-450 1647 y Fd(Pr\355k)m(azy)39
-b(p)s(omo)s(cou)g(m)m(y\271i)-450 1812 y Ff(otv)n(or)24
-b(s\372b)r(or)1034 b Fc(Mouse_Button_2)-450 1892 y Ff(zobraz)25
-b(men)n(u)874 b Fc(Control-Mouse_Button_3)-450 2086 y
-Fd(Ok)m(am\276it\351)38 b(ak)m(cie)f(nad)g(s\372b)s(ormi)-450
-2251 y Ff(otv)n(or)24 b(aktu\341ln)n(y)h(s\372b)r(or)883
-b Fc(f)-450 2331 y Ff(otv)n(or)24 b(aktu\341ln)n(y)h(s\372b)r(or)f(iba)
-g(pre)f(\350\355tanie)417 b Fc(v)-450 2411 y Ff(otv)n(or)24
-b(aktu\341ln)n(y)h(s\372b)r(or)f(v)g(inom)f(okne)480
-b Fc(o)-450 2491 y Ff(otv)n(or)24 b(aktu\341ln)n(y)h(s\372b)r(or)f(v)g
-(inom)f(r\341mci)449 b Fc(w)-450 2570 y Ff(zobraz)25
-b(aktu\341ln)n(y)g(s\372b)r(or)843 b Fc(C-u)36 b(o)-450
-2650 y Ff(vytv)n(or)25 b(no)n(v\375)f(p)r(o)r(dadres\341r)795
-b Fc(+)-450 2730 y Ff(p)r(oro)n(vna)t(j)24 b(s\372b)r(or)g(p)r(o)r(d)g
-(kurzorom)f(s)h(ozna\350en)n(\375m)194 b Fc(=)-450 2933
-y Fd(Ozna\350o)m(v)m(anie)37 b(a)g(o)s(dzna\350o)m(v)m(anie)g(s\372b)s
-(oro)m(v)-450 3098 y Ff(ozna\350)21 b(s\372b)r(or)e(aleb)r(o)h(p)r(o)r
-(dadres\341r)g(pre)f(\357al\271ie)g(pr\355k)n(azy)71
-b Fc(m)-450 3178 y Ff(o)r(dzna\350)25 b(s\372b)r(or)f(aleb)r(o)g
-(s\372b)r(ory)g(p)r(o)r(dadres\341re)308 b Fc(u)-450
-3258 y Ff(zru\271)23 b(ozna\350enie)j(v\271etk\375c)n(h)g(s\372b)r(oro)
-n(v)e(v)f(bu\013eri)249 b Fc(M-delete)-450 3337 y Ff(ozna\350)25
-b(s\372b)r(ory)f(so)f(zadanou)j(pr\355p)r(onou)461 b
-Fc(*)36 b(.)-450 3417 y Ff(ozna\350)25 b(v\271etky)g(adres\341re)857
-b Fc(*)36 b(/)-450 3497 y Ff(ozna\350)25 b(v\271etky)g(sym)n(b)r(olic)n
-(k)n(\351)f(o)r(dk)n(azy)541 b Fc(*)36 b(@)-450 3576
-y Ff(ozna\350)25 b(v\271etky)g(spustite\265n\351)g(s\372b)r(ory)550
-b Fc(*)36 b(*)-450 3656 y Ff(in)n(v)n(ertuj)24 b(ozna\350enie)975
-b Fc(*)36 b(t)-450 3736 y Ff(ozna\350)25 b(v\271etky)g(s\372b)r(ory)f
-(v)f(aktu\341lnom)i(p)r(o)r(dadres\341ri)108 b Fc(*)36
-b(s)-450 3816 y Ff(ozna\350)25 b(s\372b)r(ory)f(vyho)n(vuj\355ce)h
-(regul\341rnem)n(u)f(v\375razu)138 b Fc(*)36 b(\045)-450
-3895 y Ff(zme\362)24 b(zna\350)n(ku)h(na)g(in\351)e(p\355smeno)648
-b Fc(*)36 b(c)-450 3975 y Ff(ozna\350)25 b(s\372b)r(ory)-6
-b(,)24 b(pre)f(ktor\351)h(elisp)r(o)n(v\375)g(v\375raz)h(vrac\355)e(t)
-120 b Fc(*)36 b(\()f Fe(\(D)n(X\))-450 4182 y Fd(Mo)s(di\014k)m
-(\341cia)i(Dired)g(bu\013eru)-450 4347 y Ff(vlo\276)24
-b(do)g(toh)n(to)h(bu\013eru)f(p)r(o)r(dadres\341r)517
-b Fc(i)-450 4427 y Ff(o)r(dstr\341\362)24 b(ozna\350en\351)i(s\372b)r
-(ory)e(z)g(bu\013eru)471 b Fc(k)-450 4507 y Ff(o)r(dstr\341\362)24
-b(z)g(bu\013eru)g(v\375pis)g(p)r(o)r(dadres\341ra)416
-b Fc(C-u)36 b(k)-450 4586 y Ff(zno)n(vu)25 b(na\350\355ta)t(j)f
-(adres\341r)g(\(zna\350)n(ky)h(sa)f(zac)n(ho)n(v)n(a)t(j\372\))165
-b Fc(g)-450 4666 y Ff(prepni)24 b(triedenie)g(adres\341ra)g(p)r(o)r
-(d\265a)g(mena/d\341tum)n(u)106 b Fc(s)-450 4746 y Ff(upra)n(v)24
-b(v)n(o\265b)n(y)g(pr\355k)n(azu)g(ls)843 b Fc(C-u)36
-b(s)-450 4825 y Ff(obno)n(v)25 b(zna\350)n(ky)-6 b(,)25
-b(skryt\351)f(riadky)g(a)f(p)r(o)r(d.)448 b Fc(C-_)-450
-4905 y Ff(skry)23 b(v\271etky)i(p)r(o)r(dadres\341re)783
-b Fc(M-$)-450 4985 y Ff(skry)23 b(aleb)r(o)i(o)r(dkry)f(v\271etky)g(p)r
-(o)r(dadres\341re)395 b Fc($)1866 -364 y Fd(Pr\355k)m(azy)39
-b(nad)e(ozna\350en)m(\375mi)g(s\372b)s(ormi)1866 -198
-y Ff(k)n(op\355ruj)23 b(s\372b)r(or\(y\))1027 b Fc(C)1866
--119 y Ff(premen)n(uj)24 b(s\372b)r(or)f(aleb)r(o)i(presu\362)e(s\372b)
-r(ory)404 b Fc(R)1866 -39 y Ff(zme\362)24 b(vlastn\355k)n(a)h(s\372b)r
-(oru\(o)n(v\))711 b Fc(O)1866 41 y Ff(zme\362)24 b(skupin)n(u)g(s\372b)
-r(oru\(o)n(v\))749 b Fc(G)1866 120 y Ff(zme\362)24 b(pr\355stup)r(o)n
-(v)n(\351)h(pr\341)n(v)n(a)f(s\372b)r(oru\(o)n(v\))472
-b Fc(M)1866 200 y Ff(vytla\350)25 b(s\372b)r(or\(y\))1056
-b Fc(P)1866 280 y Ff(zme\362)24 b(n\341zo)n(v)h(s\372b)r(oru\(o)n(v\))g
-(na)f(mal\351)g(p\355smen\341)269 b Fc(\045)36 b(l)1866
-359 y Ff(zme\362)24 b(n\341zo)n(v)h(s\372b)r(oru\(o)n(v\))g(na)f(v)n
-(e\265k)n(\351)h(p\355smen\341)261 b Fc(\045)36 b(u)1866
-439 y Ff(zma\276)24 b(ozna\350en\351)i(s\372b)r(ory)844
-b Fc(X)1866 519 y Ff(vyk)n(ona)t(j)25 b(uuenco)r(de)g(aleb)r(o)f
-(uudeco)r(de)i(s\372b)r(oru\(o)n(v\))118 b Fc(U)1866
-599 y Ff(sk)n(omprim)n(uj)23 b(aleb)r(o)h(dek)n(omprim)n(uj)f(s\372b)r
-(or\(y\))270 b Fc(Z)1866 678 y Ff(spusti)24 b(info)f(na)h(s\372b)r(ore)
-886 b Fc(I)36 b Fe(\(D)n(X\))1866 758 y Ff(vytv)n(or)25
-b(sym)n(b)r(olic)n(k\375\(\351\))g(o)r(dk)n(az\(y\))587
-b Fc(S)1866 838 y Ff(vytv)n(or)25 b(relat\355vne)f(sym)n(b)r(olic)n(k)n
-(\351)g(o)r(dk)n(azy)443 b Fc(Y)1866 917 y Ff(vytv)n(or)25
-b(p)r(evn)n(\375)f(o)r(dk)n(az)922 b Fc(H)1866 997 y
-Ff(preh\265ada)t(j)24 b(s\372b)r(ory)f({)h(h\265ada)t(j)g(regul\341rn)n
-(y)g(v\375raz)224 b Fc(A)1866 1077 y Ff(nahra\357)24
-b(regul\341rne)g(v\375razy)776 b Fc(Q)1866 1156 y Ff(prelo\276)24
-b(s\372b)r(ory)g(\(b)n(yte-compile\))645 b Fc(B)1866
-1236 y Ff(na\350\355ta)t(j)24 b(s\372b)r(ory)g(\(load-\014le\))764
-b Fc(L)1866 1316 y Ff(spusti)24 b(pr\355k)n(az)f(nad)i(s\372b)r
-(orom\(mi\))578 b Fc(!)1866 1523 y Fd(Ozna\350enie)36
-b(s\372b)s(oro)m(v)j(pre)e(zmazanie)1866 1660 y Fe(Odzna\350uj\372ce)28
-b(pr\355k)n(azy)e(ma\276\372)h(zna\350)n(ku)g(pre)g(zmazanie)1866
-1768 y Ff(ozna\350)e(s\372b)r(or)f(pre)f(zmazanie)737
-b Fc(d)1866 1848 y Ff(o)r(dstr\341\362)24 b(zna\350)n(ku)h(pre)f
-(zmazanie)635 b Fc(delete)1866 1927 y Ff(ozna\350)25
-b(v\271etky)g(z\341loh)n(y)f(\(s\372b)r(ory)h(k)n(on\350iace)g(na)f
-(~\))191 b Fc(~)1866 2007 y Ff(ozna\350)25 b(v\271etky)g(z\341loh)n(y)f
-(\(auto-sa)n(v)n(e\))552 b Fc(#)1866 2087 y Ff(ozna\350)25
-b(r\364zne)f(do)r(\350asn\351)h(s\372b)r(ory)673 b Fc(&)1866
-2166 y Ff(ozna\350)20 b(\350\355slo)n(v)n(an\351)g(z\341loh)n(y)g(\(k)n
-(on\350iace)h(na)e(.~1~)h(a)f(p)r(o)r(d.\))71 b Fc(.)1866
-2246 y Ff(vyma\276)24 b(s\372b)r(ory)g(ozna\350en\351)i(na)e(zmazanie)
-398 b Fc(x)1866 2326 y Ff(ozna\350)25 b(s\372b)r(ory)f(vyho)n
-(vuj\372ce)h(regul\341rnem)n(u)f(v\375razu)119 b Fc(\045)36
-b(d)1866 2529 y Fd(Pr\355k)m(azy)j(s)f(regul\341rn)m(ymi)g(v\375razmi)
-1866 2694 y Ff(ozna\350)25 b(s\372b)r(ory)f(vyho)n(vuj\372ce)h
-(regul\341rnem)n(u)f(v\375razu)119 b Fc(\045)36 b(m)1866
-2774 y Ff(sk)n(op\355ruj)23 b(ozna\350en\351)j(s\372b)r(ory)e(obsah)n
-(uj\372ce)h(regexp)169 b Fc(\045)36 b(C)1866 2854 y Ff(premen)n(uj)24
-b(ozna\350en\351)i(s\372b)r(ory)e(vyho)n(vuj\372ce)h(regexp)119
-b Fc(\045)36 b(R)1866 2933 y Ff(p)r(evn)n(\375)25 b(o)r(dk)n(az)1145
-b Fc(\045)36 b(H)1866 3013 y Ff(sym)n(b)r(olic)n(k\375)24
-b(o)r(dk)n(az)988 b Fc(\045)36 b(S)1866 3093 y Ff(sym)n(b)r(olic)n
-(k\375)24 b(o)r(dk)n(az)h(s)e(relat\355vnou)i(cestou)385
-b Fc(\045)36 b(Y)1866 3173 y Ff(ozna\350)25 b(pre)f(zmazanie)931
-b Fc(\045)36 b(d)1866 3376 y Fd(Dired)h(a)h(Find)1866
-3541 y Ff(otv)n(or)24 b(v)g(dired)f(s\372b)r(ory)h(vyho)n(vuj\372ce)i
-(vzork)n(e)145 b Fc(M-x)36 b(find-name-dired)1866 3621
-y Ff(otv)n(or)24 b(v)g(dired)f(s\372b)r(ory)h(obsah)n(uj\372ce)h
-(vzorku)145 b Fc(M-x)36 b(find-grep-dired)1866 3701 y
-Ff(otv)n(or)24 b(v)g(dired)f(s\372b)r(ory)h(p)r(o)r(d\265a)g
-(v\375stupu)h Fc(find)125 b(M-x)36 b(find-dired)1866
-3904 y Fd(N\341p)s(o)m(v)m(eda)1866 4069 y Ff(zobraz)25
-b(n\341p)r(o)n(v)n(edu)1014 b Fc(h)1866 4149 y Ff(preh\265ad)24
-b(pr\355k)n(azo)n(v)g(dired)836 b Fc(?)2219 4454 y Fb(Cop)n(yrigh)n(t)
-2522 4452 y(c)2505 4454 y Fa(\015)21 b Fb(2007)i(F)-5
-b(ree)21 b(Soft)n(w)n(are)i(F)-5 b(oundation,)20 b(Inc.)2302
-4517 y(designed)h(b)n(y)f(Stephen)g(Gildea,)g(Ma)n(y)i(2006)g(v0.1)2299
-4581 y(for)f(GNU)f(Emacs)i(v)n(ersion)f(22)h(on)e(Unix)g(systems)2128
-4645 y(Up)r(dated)f(for)j(Dired)e(in)f(Ma)n(y)j(2000)h(b)n(y)e(Evgen)n
-(y)g(Roubinc)n(h)n(tein)1866 4737 y(P)n(ermission)d(is)g(gran)n(ted)h
-(to)g(mak)n(e)g(and)f(distribute)f(copies)h(of)h(this)f(card)g(pro)n
-(vided)g(the)1866 4801 y(cop)n(yrigh)n(t)k(notice)e(and)h(this)f(p)r
-(ermission)g(notice)h(are)g(preserv)n(ed)h(on)e(all)h(copies.)1866
-4893 y(F)-5 b(or)17 b(copies)g(of)h(the)e(GNU)g(Emacs)h(man)n(ual,)f
-(write)h(to)g(the)g(F)-5 b(ree)17 b(Soft)n(w)n(are)i(F)-5
-b(oundation,)1866 4957 y(Inc.,)20 b(51)h(F)-5 b(ranklin)20
-b(Street,)h(Fifth)f(Flo)r(or,)g(Boston,)i(MA)f(02110-1301,)j(USA.)p
-eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/sk-refcard.ps b/etc/sk-refcard.ps
deleted file mode 100644
index 3239a03d294..00000000000
--- a/etc/sk-refcard.ps
+++ /dev/null
@@ -1,2588 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
-%%Title: sk-refcard.dvi
-%%Pages: 6
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 595 842
-%%DocumentFonts: csbx10 csr10 cstt10 csti10 csr7 CMSY7 CMMI10
-%%DocumentPaperSizes: a4
-%%EndComments
-%DVIPSWebPage: (www.radicaleye.com)
-%DVIPSCommandLine: dvips sk-refcard.dvi
-%DVIPSParameters: dpi=600
-%DVIPSSource: TeX output 2007.02.13:1231
-%%BeginProcSet: tex.pro 0 0
-%!
-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
-1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
-/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
-setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
-restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
-(LaserWriter 16/600)]{A length product length le{A length product exch 0
-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
-
-%%EndProcSet
-%%BeginProcSet: texps.pro 0 0
-%!
-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
-end
-
-%%EndProcSet
-%%BeginFont: CMMI10
-%!PS-AdobeFont-1.1: CMMI10 1.100
-%%CreationDate: 1996 Jul 23 07:53:57
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.100) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMMI10) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.04 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMMI10 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 58 /period put
-readonly def
-/FontBBox{-32 -250 1048 750}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
-9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD
-0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE
-E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C
-7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37
-88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6
-DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1
-AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: CMSY7
-%!PS-AdobeFont-1.1: CMSY7 1.0
-%%CreationDate: 1991 Aug 15 07:21:52
-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
-11 dict begin
-/FontInfo 7 dict dup begin
-/version (1.0) readonly def
-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
-/FullName (CMSY7) readonly def
-/FamilyName (Computer Modern) readonly def
-/Weight (Medium) readonly def
-/ItalicAngle -14.035 def
-/isFixedPitch false def
-end readonly def
-/FontName /CMSY7 def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 13 /circlecopyrt put
-readonly def
-/FontBBox{-15 -951 1252 782}readonly def
-currentdict end
-currentfile eexec
-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
-221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
-8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
-F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
-E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
-424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
-E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
-C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
-868AEA25DA3D5413467B76D2F02F8097D2841EDA6677731A6ACFEC0BABF1016A
-089B2D24FA80E89E381E17A5E49663B60435D79C04AFCB27AF313045D656F461
-93419897889D12DC113AC6F3E770F84030ABB6E0E84822062F22823E15C18EE6
-E524114FBC6B5FE333E2C649670C7EEAB2EE8F98CECBC72B2061A886113BCD86
-34BC89B316AED93C32336F15F2038797FA6AA3B63EF403BEC4F40DCE0B2A1C89
-92BC8F62BF85B2D4418236D4795B16BAB0DC89098B5226FB96544457550AE495
-36ADB1399938FF601079DBCBD45914B5E3EB0D6AC6DD675A093B837B3A42BC37
-528CF6FF82FDD1BFEA6FDC9AC1D7C2B234D3E2CB59258C530CE314F409C10B0C
-6F6AB5C5328407AA1A3A0835D81524219D501B2CA34F839703364431A499320B
-F219D27AE28BC90912E7
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr7
-%!FontType1-1.0: csr7 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25529 25807
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr7) readonly def
-/FamilyName (csr7) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr7 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 53 /five put
-dup 54 /six put
-dup 55 /seven put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 77 /M put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 121 /y put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-31 -251 1122 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A13872340A840BE8B95A5F1C25
-CD575CD32721748B2E67F9EFB55236DAEBD0A0A66E00D40EA8F97CC2D2C60B23
-D6D605B155A7303A9304DF379860F72EEAAA9A6A3D763A766A4F7F7C298B77F3
-8BEFAAFC7E7C91B8285AAC489F9B84598AD6FD112A7E3F85F66B0E063013FA13
-EAAE7D3008EF4CC3C5E3A73EE8DDF17EF3426989F331E68C4E36976CA972DEAB
-90B647C14B200DE939EA777B45D3220E4619DFE510764CF8D22D8219515BD27D
-EDFE3C56106DEA15E8C5B3E8A66B1B8EFEEB3AF622C560D4D8A5C8CFD081C385
-9CE1F49CB88A38F2EB89589DEC399626D687B1AF9C593DAD2839D4A2593A1F13
-3FFC135447C687382EEEC507833E465286304C3200E5D3E7328064B84F05E696
-F7C269217DAA9466269DF343D09B283931A74BED0B18DB3F17F9E9F23F598D56
-D5EC687F7A1E6E70E6D6AB335CCAD0426C5396072F15A124743CA6149C5ABB72
-B8D388E2829E1FF5614D22C358B72F7A86EC62F17514C5A0C9EC297A31D0AD53
-1C9FDB368EC14813B24C84D3FDE47DC7990E350ADA10FC2E710099EBCAE53C63
-FEC9C91AA27DE81273BCC7EC20DDB18EED75D7D04DC39DD27EB86BA5EC4EC9E4
-349CE0EE181973616918A974B51A34B147BD3204EB4EFAB3A48CAEA28950D309
-6D39676C15E531296E88B57CCAC3DC957037D5E97FE28E784A2F98B3767F41CD
-6C5D59E708F123892A76C60EAB7EA01FEE0CBD94A78ABFBA9A34D0FEA1117400
-85FDDF49D3313E227746DE830E6D090D17073AC9D62BD413D8E8083658152108
-652C317C168DEAAB3CA7F0E20A50BF81B4BB1D32B7A26FD1D6ABF8907AFD01B4
-63272EB0915973C52515C87B55390252A98957C41751D016F2BBCB1E8577E6A9
-65600DBB29116D97A4DC9ECE699DCC7CAF542B507DDD77014C2926BAA2BC1631
-BA1E8FA5B5B98022786D9638A76360FFD99E9044C1F5B0655747B0DDAAD865BD
-A0E537302FA691935B8767EDB785573B859622143BED2717AB03262A0CBA7E5A
-F695D44640348F5C7CA372A9C7C4FCF369309FC3F27D7601646F7BE779596563
-D34BDE93140A1EC6F2BCC20D8EA1210CCF194D253C3234BF4CBB58256AAA4DD8
-3C8174AB99A31D54AAB23F63A8B80B973C5FB15770EC42B469B0BE7BC493C294
-16527A0F5D5C3BA85983E84F59D9F86F1642548A4ED5790BA17FDAAA2C8658D4
-771BAFEA3869A86E4777825D745663392642D27A1661C65202889D65D15D0A50
-B6C4F06A98D4302F694C03749274C25D91C9FE728405B46CB5289B854A7E8682
-A7A6E426D4DE26D5775808E650DA607A1171808788DED17A1715D7440D6A22CF
-01173F11A4954AA49209DE91D48049F3194DF0C25DEA3DB243B777885FF45FDB
-6ECDD1074B0052010F734F7DBC2F79AD8A3E267FAE9D97C3E43F0CED01AB9E5D
-93DAFCCCB326DD03C7291AD83CDFF069C79A939196AFFBC6930B0B5641402DAE
-4CDE4ABF5421FDFF8AC14C4421D3F253567FDBF9BEC201546C32C08CF24A0B5D
-7150DEE9208FD0E20F30DC460F3A3056018CBC2B3BDEBF3C971654E807E337E4
-7FDDF0F773DE0FCEAE36B0E0B859E1F2C5998994E9552D8E914675F5A00A855E
-8B17167F7073133BE20413033D04420649CD805B13785265A5EB42B76AEF246A
-3FC66787060EA27C1DA79B16DCCE11A67B92758ADB7496B1C9426D4837BAC8C8
-1110018C1FE3E882C6DDC059CAA29A2A451E202C0877C47FA7BB582977E8E7B7
-3944561FB68717A32BDA2C12B6E0E0613F5DF1B99908AFB05963CA5F48F44B37
-528903BAAD3BB7B44DC1DF804B48B814FAB4ED9C8B67B90753FA0544CB7151EA
-F414F439E45447B7E00EA0DDD9716CB18E6F4B1B876B46F4AE3FEF38D22125B1
-8030F8000A0869EC20DCEFF8FFDB0E7C39155E681D1CA1AE18770D60D3847B7B
-0C0232FE0EEDF8422A71AADC8429207AEFD8F9D68D8A8A81CA4058524A85EBEC
-627DCE848671DB10952F97CDA499AE32DA838CC4B2042ABFD9C82E1C44FD9B4D
-D778E3DE1EF0ACCFF0E98667F99BBE81A3A8EA8FE12A209F6BEE36AF7FE0430A
-7A05F781AA6015A9388AF7A7BC050402BF4B911DB192F6F50A20C488E297B9FF
-D62C7BA568DF06DC56379E97AD83A2162E4C088363E3FA1903E5BD6938BD3D0C
-74D6561B236D1F78786C20F4A5C0330B2FD2F175D75D4FAAB8DB701B92702C89
-44524FAE730767800C1B71DD4C7B217F3C12E54728B6CDC35DEAA6DC6827BCB1
-22AEB3B04198CC5DB863BC3552287EEBB8FDA1EB19E2B14EBE23790CFF34ABD2
-7479919A4816B83FC399B36E5C65930593CC4D07FADA850A6F9BAC3743DB32A3
-3FD7932EEE76FCBFA0F05BF141902025B9D92D7E6E829A7DF8AAFF4AC4E67C6C
-5E1E987438314F8C9900516B4AC073E5EA5E6DA4A6AB40A30517CCEEC1BAE4B4
-D2E574D2487C992980B9BEC05FAB0A7E5533CF9AC951E2BBF21810241A49C709
-D66D7066416185CC2404224DBBCDC121D2A77B833167A4FF40C2E296CEEAE79B
-C3D7842578CCB70330152C215F116FADAF32C037B418D269D591035D246C3A28
-1D94DFBAE0FCC2E4F3DD684847727DD8507C56D7DD1180455C231D0F22A83558
-C0035B7EA552FEFD1AA9FD1DC0BA8716E64CD5BC86F84276FA9D302BB8329CAC
-D7B36D5D28BC84B104E2E7C620566144104B113E6EABC02F4B499A919A0EB2C9
-254750F791E9D288981848A17BB406397750E1E063533909EED5F9A145E573AD
-8824A137907F7C4C931CD7F974BC226B848416CAC06C172D6F4921778AB362D9
-CEA68F1C66AC5795F4AE11FF52FFE1354B152C682B9DCEDBEE5937802430CA4B
-9D8DB908560440506E8273319195E0FB9BBC7676A10C8A2FE8E00E02F5533658
-40987BD7D583BBC165118939024D457D461A019D4DB4F98BF3A6FF801BD96D91
-3C83BF834E119C012686B9953AD97AE25BE1C7A7E741EB26D3D93E55B5CD7B78
-ACDEAC1FA02F5BC4CF7DA4C3675E695F77E64008F94AC2FA6A928555C33AE481
-D94575652F509FD01FFFC15041AE754BDE5A33F7C5FABDF5669944EAEB8A884D
-BE562D38199C73C4289E185D1793D70E2B5BD210147722F9A76C92C252728192
-E0932953D98F88E25ED673B03C498396179B45B0B7B34E77C7802540C2D32848
-F30961C6A297D69941E50190C896F459052478D24126D19EAC1F8A1531E66970
-C87560D13B94294FEB10FABE7A60CF96B3E866F56E0A30D6BDDDEC913178217F
-EDA129B098F4864EEE7745B85F39484775E852111D06F09221C42B65D1344148
-B75E80F2C73C52382E09C1869645C61F94FBF0F75279FB1874C7B6725612EDF9
-860E2D43416FE779337F3B057177FC1927AC7C08E664BB078D7A88754E8AEEC7
-B7050A42A1FB41E9109B0D0D853AEE0C8CC858C2322F5B84D48A6D706EA58DA3
-B559F5FA891834E7FCB636EC92C8D4AD667935B766637D4DF180A036E124C3E4
-37BE953E6A69AB663A24E8040D4E7955F81653993115ADD6EAE5EF3E99FBC1F6
-026B3861B9D14210BEE715B4B740E5228AB9AECBC553F7EFAA12A6B05E2F8076
-237CA834A9517EF999A1BACB14AB7B0D76DA0424FA37239F3DE56AC699F5DECB
-584E177ED1B778AC58D1FAE0ADF84F6ED1DAF4BCCC47FED08E972120C04146BB
-525AB915F7DE3BFC728D31D00C83C1703F0487C9B2943C512D1C366FDFCA03FC
-47FE882178C1DF18158090A62C5E7617FC34120326EAB952754559F0D8B69703
-460509F10D9FDAF4E29F4427CBA489D7A98AA60428B22449777E399E3E78FEB6
-1464FFF0247279C31B48524C28A84549B120DA1B8798DACC2367B0932A0BFF75
-F2D3F44EFF1FFB5066E0037BDDDD2229BB2530ED4D01C2A466F7F1FE89928092
-EA674F63B4B4C4AD64331A99681E63EDB66CA5D62B5598DC226936EA8614C5E3
-603267E6FF17FC08F7920FA3D92C9DCC571C4B31C12B8A4497C54261C7F916F1
-F70CC389EB038CF41EACDFF47E02959EDB3D8F50980FBBAE2E20CF28B6B96ECE
-D1582505FB0C00E662B1D0A31D48BF609210D038C9F8F52064AAFC42D3F4BDC9
-AB1916B45687100E58E97D910431F50E0BB03C9E5577591CD09684FC818E62C5
-3490925DBA1883BBD8CF5749FB25072754DEADCBF8EF6AB4AD998A5A82A90EF1
-D89C8F1CFDD15E703C4EF8A75F716541156508DA2067462C3B3D1332831A6258
-EA1B487B2039FBAC9B1898FFCEF004EBD7B748BE8812FF092B4592F317852A5F
-D450ED65F9AB7084B26632C69640CF28D54CF20363A49CC061445A11FA981B24
-868FA71DEA8753D395494C570FE29CDAFC2522EA3712CF8B4E072518EEFC3D4C
-591A86F3D33AA5112C33E7B4C4396D8E1C205A9DA6C1D8982E2093874A553B1E
-20D8C824B0F9934C8FE700A3C433D66D936AFB1464F369171A015A594344A973
-39205C1A75DE8830AC151D6076B1325FEB2A54BA363191FF74E67764A997E14D
-29270E9F7009E86548DFC8CBD96B1D3455D84B2FDBF10174EB054B62FAF3B72C
-5FEA8049A05B27168B4EFF01DD370C17DE4376C2793ACC698EA19C15C2E9E976
-C2F6D151D9E96F9892FEBE99F8AA201AA4031AE6A5502FA06AF57044566C590A
-2FA7EFB9F9A208C78B3970EC9AC9383A07F78A6B8E322F3F482B136148B37CF3
-B8D76BDE754050D7D491B47A559BC6741224D97652956E889B02261D9F164C3C
-903DBB12FF2A0D1A5BF986DFDED798728D29B9B988894E59BEFFF4B33C46E2ED
-22578236EC46C85947CBFE32894FDFA44319A135D989DE1015A66B5E2C0F3267
-227B0D1976E93AE88F6B5DEF77F049225C7190CFB9B733905B4548403288061B
-0B3793F72BD759941BBA7DD59BFCBE05BA7C9B8B21BD813654D0A3F8345E629B
-05B9100CCE2A26C826186AF363D4257733EA1175FF820B35B6D3290FEED1ABE0
-AF29C45610EB4109A999F098930DA22B1651995D1011DA3BC3C06A23182D72CA
-2CDF3079A8AB8A957E6932B4443C4286BB7787D949A7E6630C609304968C5A4A
-E6B75AC96C23959EEB0CA2F1D7AB77392EB1F0DAA029DB24B061068A453B6B4E
-8710DA5E406CFBC130ED9C494352F35D92491BBFD7563E43DBCCA40A4E8EE90D
-695DA2D1CA76684A7AD5465B2AC8F98DB84F7470DD3BF5D690384D58AF278448
-64C28AC301C9A5376040654BFEB63D68EB030A0816DB38F253B92AD36D3408FE
-CACC49666D06416CCBF60F7625103A1C8B06F0444BA457264F17834E3C631AE9
-3CD16C38A2764E21E5C06469DC9941DE01B2B69C249A21058DA41C0F712D6EB4
-771D564D395DB75E59B6B6FCAD823AA9292D16577986497570D3BF0027804326
-9BD710BA73326DEA241D8FEA02C77CFAFFB2E1B22C89BD7BBF762206BB7B63B0
-FFD8BB27727A4A563E5EF3C76DD57181408AD5D8D4CE428090A0BB7AB574F201
-591C049E4092C83725CB53433BC98592D5C401D05F01FBE781553AD2DA858885
-D905DE7C0A65E813175A4EB760BB3E01D73EAEA2F1AA91C203E695CFF8049550
-D8DE626DD2C256D519DC5324B99B354037A9978E3FF637F76F5E15595E09B6C5
-1D9C7D0EE94425F89BBC6C57A65DCE445DC2F49FA8C7636CCAD804F0B26126D1
-FD549870235BF4E5C7CA986F104C7C0E33BB7536E5A9FB8C986E89C6B25DA205
-A91D76249898F66AA72B8DBD39F60AD50FFC49AC88D7EA03FB0CB9E2BD13A3D8
-CE65E7FD6C6A88571FCFBBC727D54B69BE166B5739068D087E9BF832FB2D221D
-9716ACA9FE6AFC513ADF36F652265E0D202B32E1012851650EE6B39A5835EF65
-524CA2AE86DEAB22D43AB33B93512161F8C0C968382712788690EAB1356CE14A
-B10B24123BEE065424955021DBFC0243572607A62DC41ECB1E0E2108D4B2B805
-027E50BBB534B19193151BF0E4D5B3CDE4EF593F2FF4B2BE846B9BB8B2548ED5
-A647651FA1A93EBA678CF5A3069FC36C073423ABC716062D460DEA2ED5C5EDF2
-93BAF334EB970F9A5A2C069C273F332B5348BF8C52BFF8E5E6B395258A3FDF46
-90243DC26F19827D027445E99993D46D1D80B83991F9E49A36BE735B53AC696E
-E29A951AC9FB290D97382B593F2634FDF45429CF9557A23F957056D601E8DCCB
-828567132B96D5FD8CF721475AB86494CD3AAD998C2E17320F279577773E9501
-5FB03D38EE5D937B7BC9D3E8E089E47A1900717CADE0985E0D919C550AADE846
-125270BC3B1E72AE6B09333DDFB1644F3735FEE4748ADBBD6F33560FE348253D
-A1A2EA0406867C967E96D419E8A5E29B4AD6EE5415FFA396853E991AF6004448
-0A8AF0FAC0A09B5CE25CDB7C7D90450321527AF04343534302461E4E498FA76E
-66B801141737177FDA17A926DD22312AF9608A77D941FFC26CAF7E9C6736B62C
-B4F99589A95967E68680AEEAA8C41D44DE0C3ECCAB62188B325969B8E0A11820
-A6811E8050E222E7AF8B9134C3AA641A8C10667E0363675CA0702B346DFF151D
-1AB8DFD54C75530E9F215A40B481BA803A7BC22513C6F62B395C33A72F529C1F
-2C43692FF5E245856762501C8CA3F4597D1F620A8B4A48190C68A6FD3BD0B79E
-45B39DAA0A83404C59D7F2CEA76D8C39B3F9DA544C603AF27D2E0698B0D59B22
-52723B51A4C7240957A5F9BA3E07E79F8E93867EF1537C9E4CF857CC8A6E0896
-EA633D20C16EC0905AA74FB443F301D6C2FF909C363F99DD6A3BEC57B12859D9
-904D3D37F9B84215698108F4B3D6CB2B1E6DF5DEE5B166879342CA642D5F919C
-6BE08B6637817155564C3D7ABD29EEE1EBDED5571C31A8C75FBFFB52A616A773
-525A92B7E34DF5CF7328F6EABE0B9AA4282C8001FC1F5787BCE8D99544EA4790
-06C13E5D3C05802AD29662968CA835D043837DB65BBFAD21D4703D45274AAF55
-B04FDB4231E9D4D7F5EB4D14ED75850BFBFF2290750F3FD72284830780414A75
-E8553105F9C804B4BB2C5035CD7A1AAC5D2924D1B6C3FA7E717F4BCC00E784AC
-9FA498D9C814B6318AE10D15B6147495C1AB8FDDB12A38C93B3E20AC16C0756C
-2C0955D4C6B82C9DA7121AEB2D9DEC413E97E106CA1742146B72501AEFCF3D8D
-567B5B49359049096DD81065722BEAB7050BFE32F5DD8F141FF7D01630C673E4
-325EC6FF2D541F20FCCBC41FF5D311589C25F39F521C722F0B0A8F785FBE4818
-C984EB22D5293B799344DDDAF4A0414ABD71E4C66E5436999B14E925E7EEF81B
-3FC0903E36F7D902A4135A45A199CCF6B24E769A3CDE0544A914296C3D15BA76
-FA0EFFB40F7FA7E8A789462BE9603E85B01FCDC8A46C735D6937D407B5CEE5BC
-9BED3E4C4798FABA68BBA6663848C5432B5DC3CCAD6252040E245F9E02F30D4E
-0C7707093A1B654F9C80DC870773DCDFF7B7603614A0D00493EA8BFDBF5C6FDC
-9C9F4611E55F7E614312AD00F41837D4BAE3A6B966919437A60DA5D6A541D1E3
-2C528CE4297D3379181ADBCA7B6CA86155156D633DAB4EB5FE2653D95262E2DC
-AEF216304F72D1DAA0DBF303075ED87AA036E2D54F5574197793215322055D87
-73EB1543AC86CFFF249C495A0ACEAED06D9A61BD432D9FC8E45B27BAF9E9780D
-B37F1C0CF3D44EE1E5587DF39C18DE2A1C870278809F31C6DE14711B060818C7
-43A5949D8352932E9FCB4232372E55AF7CB5F283D8AAFF8F5D352577FA8FD9E8
-E337E4C6C2888DCE39CB6E6BC497EA04378CEE24D0E2ED2177602DC8D8E18260
-71C2FD1DDDDCBD1737E2E9FC117AF78BBC6C2C3A1BBD7B7F41AB71874D5B3FBB
-17EC95E055E0ECBF74EA6D9EFC259C7727996C90672AF33F8B4A343647401EDF
-70E7A4D43C136CD3E8AD2618810BCB00D0DDC484F9B7A5DD0473FD64F0E0DBE7
-3798E953E737EC83A330FBFD500A5A930B9117F1C720D2CD18FD4B2F6776724E
-EB7E137E6C8BBEBB70B8789BE8CCD9413F4098F08D0F2C7131C24962F717E97A
-96C507E726AC79EECBBB53BC3DE1DDE64425BE968233BEADF8124C09673371C0
-36C2B469F8D8E266531B13B82A18E7CBCEE346B40BEBAD371CBA5D36F8EDEF2C
-DB943BF490A6D8082922499B3CBC398853854FDAEE8DA4FAF204ECB931136234
-BB3CA445228F005C81B7040605337AAE3DFB3D0E36BE183E31FF848AA588DFA0
-7375E839956CAEDD61ACC25644682D9A36B780733490DC944614AAC380F8F03C
-5E595C5641E32FDE24FCD018E182837323A57AF0DD8E1C7A035CD704A5DF14C4
-0D8C9D7CF25029A6B55DCA871B88F4A59F28418C96F8F07500D331ADE797F880
-2E4D44FDB4B11195C9DCDFA24CF169FA95356B98D6263A8D15D82C2F88120744
-DFDB06F521D6113DCB863F779E7AFB31C9EE8CC55C3CC6A5B9862990EE30A78C
-C0FF46553998EFFF66F1E27BF8312CE63B8B0487EDF508C99D5F54586A6A88FB
-57AF348E3221C910DECCDBFC2005DC0B0CDAB3AF3DC7DF9391D50F219EE4C27B
-0A312F4AB26AFB6A3C6A67F5697EE2880DCBCD6E27CC92BD481452D205CC7155
-4DA8EDD05C91B096C3F8A3C7EF174A2A7D8CC2495D5FD5B7DF19256EB4A55548
-ACF2AF826B8FFF00CB38FE3B6FFB59C3E5C868A6A996E6D8B8A5B9B511B99810
-83615F55A7C5577FD55367D536BE414B5B3334221D0AD4250590547BCF01FC09
-1B491FF84C3B2C4A8781AE24D9B5EA4D10F6F4B6F6BA25FC48F480601B8D783E
-D1A820D978498ABE73FF98BC5D4A45A78672A997D9F63D97C6B87CD0E8E97F32
-A9478F43FA9D80AB17D5A0B5DA855076219B874084FD76037FC5EF73056C09EE
-FACD5CD1C28A95581F4F52C7837DE54009EBE541514F5BE2D9F334C26F25BCAA
-8C121C649034E00C962A4431640E897DE29C136CE85C0B409ABF38754BF77F48
-9100CDAFDF1BC6F391DF18AD5CD759056A68E9DF569EFA2F3C6EFEF4C83D6506
-5302153C57EC7B6CA17AD0831F0703F8D043A4B26BFEB59242020E29F88EB1BE
-7D90042D3BEF94BFCD6B3BD1A9F9A5A71FB24C3B8CE48182B40443811FAD8B11
-AF7D7F23CA94CA69B9FDDD267B57370095062384E51C606634BE9200A733F631
-740C64B1BD6004B169EE5EC4B2F4F61CF0C6D755B489E96342DE840218CD610D
-C539415D23B834EC5522068F34635B8504C08877916B90CC8F012959E9048500
-71060825C23416DD9A5F9362FBBA9D17419872092296424CB694A60D3586E1C4
-A695D880F51D5963F1B5B1F372E2CFE0B1013BD90FDD31EC1EC79010E9371E55
-69917283DD3AFC128E5BC1F973589975290B51C054C2B8B9BCBCAF73842CADB7
-9BA75E171B7E523E0DC4F3168415057EF3005B5E6635D70F935D2A923FBBF2C8
-F498B05478CDE2FE1FEC4956822F8F46488D1B0D87E211F345066501F975A264
-5720B66A158E262DABA754F8A4911F68485917AACE531B63EC3366128A81A8D7
-96F8A38F9381B537AEE62A7CCE3E774705C706A8387582B34E71EC690B0B1ABD
-082B8A776FD27DE161A37999539A7874C9DAD54BAF0DA2C4415F07FA6EFBD987
-578FA2F1611D60C9E51B4C3589C85EFAD5AF06DD2A5A65E32B340D41B201308C
-5E0BD23C854008135398365381747497D15DC7CE5FFAD2C3B38203F7A4743984
-96314336CC4CC4BCA070295B3CC0883B0217E01FEF746F33C77EBE589162A6B5
-8826CF158E7681124DAD20B92D4166DA46100FB53A8FD9FA7EA65BA56D282D23
-9B3781BE3C05EFC3CFB4ED2A28CC802F4AC8A4D0284FDACF75105D0A55A6857F
-767BEA5AD1F833B59D146774AADCC101C7C8855C6817D2AE7883B41418C3A8DC
-ED39537E4AA6A2A1AD574C4E13A9428075CA17FCDC9F1BAA753EA6EC4FDFF0A0
-7C742E4C3D07A24EED2B0FF46CDB875E79FED9F13EB898E63B9A49FBC6191DB6
-B242E36D1BD611404513FC058DA9B5BB644F48AFABD788EC0924D66FEA2A38BF
-A0010B4027C6FAD9FA0C643368557E82B9D850479CE651911C3F9607E355800F
-2FD921F5E4E4904A76145485848A17154B0A609035705D6876D2B7B7729714AE
-007A79545B39502B82DF0B391F9E89A566D99E8B2A331C9F6B5A60D401AD240D
-1AF72344DCF5A52E7640A36AA16736738A98E3C04D6B9B788DAA4B363D6BA39D
-11517B9F0362C60D7F44FB29EAF8C8C658ED66C60852AD6EE6ACBC262E2381F2
-6EBFD1E1258881E79E6014F5D526D9C676522D590CD3CBB50D457C6BDB72808F
-CF70B900B734042520F82336EEBB184457FC33E400748A617187D527A68FED76
-140E83B4650F0C6B044E201E535ABC637432CD36D108ED6E68E4CD3085B201BD
-D3D13E39228F39481654E5373543E24E689E81C2451D6FD78437C12C036AE1E8
-203FCD393B650A0EFA025074A921FFA6CE1668C761E74B1A42D1E8849404706C
-4D6B815193E47A7D6CB4B4AE469CA869B1D705AA23C9C368805DFEC8EA88FFF8
-1E6EA916369FEE9EDEBE97F7134D0A9730CCA89BEE27E262709D0EB56EA86867
-3560CCB75B1DE42DB59CB612298EBCA1B2F0F77C697AE08B9D2019BF835B3CAA
-714D5DD72179F90D53E9DF099F53BE9A326002D73FEF4358E065F43C51185F79
-AA0966D318DF5218E869689A166ECAD06746D3ADE72EDA65135E705CECF2C4DB
-04577C749A721518F65FD05573737FFBC3C1504CDD1C69B38B35866032EA1774
-011EF686959D33C37A60D173D907F28C08EF367137E146F0AC8EEB8315444263
-DD40774A0EB98FBBBE77A8270EB71514D6C2B7F5020938E02C06CC742D3F797E
-7D1BF310AB9F6124FF3FC1E2E5B15AAA48168C406D6B8F6E67CD3EB98766DEB0
-44B17FCDAFD247AF8243081010D3AE3C4C003E3A114A
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csti10
-%!FontType1-1.0: csti10 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 31328 31604
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csti10) readonly def
-/FamilyName (csti10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csti10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 45 /hyphen put
-dup 46 /period put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 103 /g put
-dup 105 /i put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 121 /y put
-dup 122 /z put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-35 -250 1125 857] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A13ACF068469E92BC111E5E809
-0E489E43C83DC29BDB053C4AF9440B668638D0EB64D2976E6F7D6472CE149020
-5249A42D7DBCA06030F48694F7CA0B38978998765D7E7BE1D365613011E79D8E
-DEB631764D47D1F9663A46A0702AE1CE700ABAC55A77DC4472405C469FCE7E7C
-36DAB4AE21FA18B149BB410DBFAC2B75994B10460A6C7E751278CCB5FA8E5B24
-5E892520BA083342A1002931BB5ABE2EFF28D930E0D7930AA5851A1AFFFFBDF6
-FF6D48342144760BA1E175D10A97EE1B90A38AF420466B14ABC5E5C82C949C95
-05665E2C47A9664D867B8B21F8972097D0CE8331D68CFA625C8889AEBF7EFD5F
-1443A9611CC142ECDB943B3C846032619AAB3A2EA3A4F8D4E016867BA36A4B3F
-5794DAC8B0B20FCAC48D701F8A66A0CC4B9B69C515F80A4DE93C7E14407AE197
-482425982208919BABDF9409FAA23D562486686557713769FDDB610C53EF1FEB
-98ED5C66B433459F187C46FFFCF9EAF4279CEE6771299B3F50B2A391427AE643
-5F4AF3D542ABB4F4894C8C4CA5FAC4246D797D939BE93652D0E7D7FD7B60DC4D
-C6E09254712DD95FD5CEB56885B95E0CF9478BD8ED8BB02566707CC3706ED88A
-A0536627AFD4D15DCA1BBAD2B2B5E16E0AC3117C0C60CC4243AE399D6573AD12
-881EFF746786E30261BC2DBE96DD8584F95AAB1A4DA0F48EF1420AD9E916172C
-6715E356C23C695DD51BE9967C8A49AC4A212733D71A0D5E2D0C6D85C5725607
-F441E959B8871102FB3927DFB2D1CBAD1DED737B6553A15CDF7D34FB7E32F6BB
-063962E928F1E7EA425CB2E597FE22DE83521F5FB6252BA3AEEEC6375BF1F8E8
-CF83439E3E8EB67B381CBBE03E7713075CE9B88F6F08974CCA3615F3A79225FB
-98D7D341AD62184152F44962DFA18FD3F7D7D2FB9DD5B2187AA4D7651F0105FF
-FB614F7BF7BFD58253C416C80431717FD3964BE33A3523CCA82EBDAD66348097
-47B760CAB3A6184E959536A730FE6CB0657A937909E1EBB8E8441B0CB40DEAAD
-95EDF48E202EF1A884004754EE06E217859097EF64CEDAD29FF8DD24B3DBAAFC
-5773018FA560022291F48ABFACF8F756D4BECA7245F95B37A2370668EB7DA739
-343123380AADC1DCEA7B5A49AD18503DFA577358BFD7AD66A2DE7DAE898315CE
-E464A80EE93D10723484FF9A156EF31A4368603D6B8BFA735F0F77093797A2C6
-206F7FA5C079C87B511F788DE52D1EA101FD5B8FB84A2E94782BCA6356A395ED
-769E5426308DEA7E69B397DEA706F9E9EBCBCB1D05D8C364C94281A9EEA64E71
-5D1C06273B79FBD6EE43BDA3E85B31208B8544D84AC03D3658A040A56105FCEF
-CA2AA8B746118344A1D93A926D421DF5B9376FB7F5422C7025D4DB0E26037249
-81C4D09F4E9931B5A2936051F9F7213D28E9D5DDC5A638B0D923FB3981E76B30
-0998B072127B47E189F5050B6533462AA4AD6DCAD8FF255828D847179012ED4A
-B503E502D371740C2E908AD4ECC6A831A3043B0217E29DBF0F87E5797C47A8ED
-66B13B91FE14A74674556FFBBC7599B02E5AA76A9295A705DEEBB649CF86FD21
-C7AE15B8784A1C9CE62BF09B19A595070994F5C7D1ED6989F64774476894E728
-CD45258A39664EE77A7BFBAEB5DCCDD6FF58AF63786AF5871BAD9B84527FEC7E
-CCB379D876402126484B741F0C568233AD9CA9246FD01BC9D0AEFA19FDF0EB89
-0BA642C6DAF52F4A12B5E5C97D1E8D7D150D16E91DB26DD2D6F9B7795546F05A
-9C55BCED0D69489184DA5EBF1B25627D5AD13AA85E29DF9C4F18C81BB562BF7A
-62C652EDDDD46698F1A5A4675F535F673E91BEDB7E9099E40E6E9E2DD24C1435
-6FC591417524C9D539490DAC5A00BD7BAFD86C664DBB7A34D32021CF5BF87894
-4A2E17A64C4F7F749B5DA2E891222E3E2526905301E47D0F6F2A7FDA2BA7D5DD
-754666413EA904DEC7522E873663AAB3BF305A3B3527FCA18031C2CC4B4DBE77
-A00C4D404E65C08BFB059244D0950A8DB4C508386F0F142897A191D1B03C6724
-95A25CBBE6B222307D95BE7A2F3EBEDBABE11833249FDAB48BE0EAB0A437CF49
-C7DC7356751770FAD9DB984BD5381781D4AE8311822A1AB3ED55CCEF3BFF4B57
-752D72E9F5B1676B22646E7FA913FD10E8AAAAB5D744464FFD06FB2A2C95BE01
-F9C59DB30A34BC9F7AEF84714F45B1A3781CD02B3795CB776739CD6BE49FE936
-6E8106A7AF90C684373F7DD88A7D552102D10E01B14813AE3E3F1F48023710B7
-F2D124ACF55014C8DACC03D56AB77687D391A69A7A67406E783FCF55AC828B71
-63E4F1CD119ABAC5FC938B0B8DD9D4E1C60867C483C077D29CB34B4E02888B85
-3BBDA01C7B6F2E05320731D8CADA91DAE369A89C7CAA128277B1BEB9A00EBC1F
-093125747363290CFD3D8D1E86ED6861B82DF2B71C37A29EACC9EFFA3439E4BC
-CFDCCD4BA4600F8BB4B90A5830AE598684840CFC5A5E3FA6F0CF8CE2D1905EFE
-163F81F441B521C6CC449F7E6DBF9E569590885DD01184FA776FC038CEAC6ECE
-18CE1E6554E9FDB967BA1A71B66A9E542684F73979A56D2718A9570A72AA3569
-8F42652F2794A6851BD33B0142612BE728C5C01D011F3D3D8D831282A2E02DDB
-2D724217BAEC4151ED2B99D5A0C7B8E9C6F4DB69ACDDB3192A6DC94767C16EA8
-2A224B08F00A2961409025F383D6CCF1F97B8152AD2D7C259D873A2DEEE4E024
-C21DDF2EF5DED14EFE94DC4BFE481995EB67F2E4ABBD74BB95EADC33A8672DC9
-67CDE20477F22D2CE160615114D7C549F037BED8438C621F745D34F73C52C626
-DD57A11951D0FDFEA9C389DD3ED6E4F1E0D57574D85D81A4D949BD4B8AB64089
-7B8596B43F41E911779E32BF55E7B0857497C1A094515CECCDFED5663820A5B0
-360E8A07CB60CA63DA0FC67DAEA24769E18547D8BDE50A205E936D635D1E8489
-153CB2C1B836322B9BE3C611D76B5C95C42DE6972F165C8E6F1D3288334BA696
-E674F3B19FA72CA0275E092D39D7034DC509D5AA40AB3645C556F2736B212C0A
-62F1E73454A3B3373A6968CE0D316A494F1F73B16CF75327EC45996F7EFD6465
-49E42F012E95A4AD1EE7A110BD398A78A2C5E395E2DDF37CD54CA94A77EB61C1
-9917A40CCD6EE62A916F4DC79A0F8DA20899EE0B1035C9B4C2B966A0C4A0F409
-77B0369E4A3B4CF38A8674AF1496FE2126CFC7E8C6DA1A36397F0554AB0276CD
-068C2DA3C42A7EE3077DC9264EABB616397BDCA53D3758885B35F5585F5C07A5
-DE6CBB7DADAB7B87DD92770226F568BB2953DFB53011C921CB16B162A80C3DC5
-BA865E5AF2B1BD218847C5F8BEE994CED23414009ED155DB3B594142836134CC
-F43A682107C6B1528706CBD124E0A8F446F278C2441374DCC36F37C16D4E3DB0
-1956807EB1FBF57677195B5777B5DBF61323C2BE3D7178C59EEB1B4615D15EC0
-758FCF44FF0A8B82A4C021AE6A71C2502D7B27AE3846C694A048D1CF0F0BE789
-BEA0BDEDB9A7A991FD239F61754068732610CF1358C9596D3FBE1A3A1DCFA1C2
-6CD2E4D3447CCDCB577228998E034FDE94A696A2C0AFE9EFAEB6D8F9EA8A2979
-D0FF87F8A2743E451197B9CF0D27505F6E963D201B346215BA945CDD86E8C66F
-16FEC3DD0D705A9EF958CE119D30DEF9D8FB4D91E229009B5F1C51AF6F19CD61
-B5611559A1B809E3289FF3A531DC8933D1D1BBE9AB6497472224D20B2E75CA41
-3927BB4C967B164D06F451B08B77E7D25DFC852D496D660CB969ECA1A52CD624
-F2C33BDB300632866303E9A561D8720B6CAF9435ED29A3DA1CA2D4D17811ED65
-296A8CCC27496DC9D58B11E5916F985E4089AD593C364BB9FF07251CCEA90A10
-68A3CAEBF82173952C53BA4AE1C60CCD6C569600A3B08AE4CF9275A6A907E2BA
-E4D090F833E41E47A28C1A5AF2D9D93EF9065D6B34D587334B7293EA22B25028
-B84227000100B8FD881E1BCB574918E4FD9C61FB7D5810A2191E62667207603E
-A7AC030301FC3452298307D00624090FDFB5ED8C04D88D9746D6DE2A2A5EC5F8
-569228BD686E8CD8660D40A17D0F49CC8803A28DBEFC63859AE2A1B477087CA8
-2BFF0B288ED86597C27A4EB540C380BC6E437DBEF233450FB80E1D486B30E32B
-5BD899A54D378E503B1F0B1B51BFC208D362A2061714F9991AF5C11C934C539D
-6441A8CCAE24FEB0DC84D4E84A9640546255FF78A9E4719CC53EA9B7468E11C6
-E6EDC21E7958B23FF38DE56A8416ED5217B1481F9629EFB47B9AF0F1B4D48950
-5834D62A7715CB7B848FA22F6B23002E1FFFCBA6B0A9B1CD091926C4D8C8CD76
-1CE506B380E48EFDAFC6E976DFA4F26C864A93C8BDC381F42BBAEF3DC235FD1A
-347E130611593E338CB5F645A15531F931174D36421792B8B075712065B7BA88
-AA548CD3BDC099A2CA24C178F2CDA2F706A187CFE9D9C98B75C4F83EA4D5AB78
-6421ED5B7C3CE6F13F67E8081A38C4AE82941A26A44FA3B7CC43BCC2EF7C44FE
-09148B3CA8EDBF50AA9F13404051E3DF923FA74953A2889C6FA94397F00829AA
-6DBFEFDE4AC6B41E77699555D80F62A2FBC5E9667A255F1A80951C78D0463EC8
-C8ED3372EADAF407559F031F9FA54D00EE86833F20D6B92AB054F3BD1711A8E5
-F2865E30DB320FF34F343FF079B9DC1BF2087B168548D9D74E5462CFF5CC865C
-4ABDCE765AE32EF11C12EE815BCA8AAB0ADA7F8321A4D512BC8FACE53FA5DC61
-B02EF24FFAFEA7F0EAFA57CE839371DA016FCA90B708ED641B5560BC88BB5F09
-59D7E25B155AEC3D78A26C332D36B70B4676F3695AD0BC6A505C908AA703CDFD
-C576C9B3E403F89AE4A2923FABC21F337CA91011E4C15064C92937E4FE0855E9
-47D14F88FDEF2DB4E176DDC22402C63EAE882CCD929132529DBB43810E0C5C13
-B64828A9BE2E4B7970066C592ECCE5D5AD7F26B18E05D926A0754471B49315AF
-641DCC33181395A1F7C3AFC1B0A2423A3458904B239F9DF3B219D919E3264567
-E98C3A05443BBEBEFA4CEC5BD3051A8C824A59EC51D908F34D07DEBAADF03F96
-5002DA513DC29DC2C0E299C8FD1E31FFC4F4951884DD1E387F65A28415B94507
-6F5074D9F7C11EA02B203CF3AB9FE13C99B80E9014F9F16511773B2B0CDDE337
-69B1A1F4F3BA6188FD560D8A58D7B91F0C8071839E4B8ED466874F7E5155E2EF
-2C6BBCF793DCFC02F9438A577DE76881DC450A4A1E85304E4B47AE6BADF1CC0C
-1D670E19A74F251BEEC734100F8E54E90CDEB140DAB7CE12A983EAF01AC382FB
-B9E566A19C818C19563CDE05BE6FBDDCD0EEFBCDE6FE33F457524827B4D49106
-21E96604F74281044684E6912E693218DAB3D3EE0A30F0709C4DAD3973823CD2
-3FD3428B5C09FD450812A579F87F8611D1D0DC308769D7B5001C96F2342D007A
-2AD9E469439055F7C2CE8B3C0212E5004D95B2038010C896BDC082AD919980A7
-1D8046CAB6A946130E200DA6A0FC4C36D0CA97F81F50C15E2C32E64BFB0CD738
-547DA26ED088CD26260B3A94BE9603033BAD08058E4BC56690DF90D5832FAEB5
-9C097460A33E3937E5B9CF5EB3C73AA52D56A505613816C2F704F0C7EAB91D42
-D4F8BA4A50161A9882AAF71CFD49091E255960BF77B444B6A074727F0A4D3678
-C35FEC92F53EDB4159603BBBFCA4212F307FC5D9D2553450E5876C36A1E39F4D
-DF0F94A4E829F4FCE02168AD02CF7C20FFFB570460B0EE2E9667C41641D040FA
-554D567019BD0BD93E9758B8B851DA4BD6B8C7901FBE14C1ED8763C0983285A6
-A2EA93E6583726AFBDBB137250B5C454F3C4033DDE41BCEE59E6B094343B45B3
-BAFE1C6C60C75FCC12F5F684DFC140B423A65D4811E7992CCC18165780775637
-735D2A680E7155F651962E3F8B91FFD24D8EAA7A3785490231B85A2DE3CB42F8
-0FF20191C487781D4BBEC33B392B5EB621C29453E5A6871D59430B8E108F028E
-3527ECD8EEAB5A09B1EE5DAE318A85D774623642904EDFD28DBAA84532397FE8
-8276F93262C79191A0021A3E558965F97518A2CE3BB5F382A5812EB8DB836612
-BE692DF48F19BBF8C750B981C98CBE21C91C791B44BD74EAB09C688D39253317
-BFC40A5F19DE0EFEE938FAB0208742DF9C0D9B6D43A158ED73AB2404E5D3984B
-4B3F4B4669920FC62403304F28B07456184080125A5F2AB416200FCFBAFA9D58
-9E98E71B813CFBE32466F9F88E79086D1A3A7FBEB4925C8D8559D8D3CFABC307
-39C03F2D5E6D317641CBC82424BD332D9CF9D7A5F157771BEBBD9EC164010FFC
-06C96E5628EF58B049D3EAC2709F4E0303BF57DF65E084FD277D74EBD4CED34F
-AD216E57297DC8D3753787B4A8C956C3FDFE40C60CB5994424DA48E498851F65
-2AFF7CB32F4D0067680F6890892A0829E2AAAD3BD0C4342AC52D5C5A4A4D4F0E
-7EFCF1A109CC043B206943A5C5744773536533161CE0D3A1658499C8C95076C6
-9EE31B24EED4173803A901D9FF7C3B415C44205451F9F5720E094C5253CFA24B
-6B7049963F8C18F4A8DC4956F6F34D9DB1318FCBB6D322079ECC7DBCA80723E9
-CCCC1328024E256121F20E6418DA4E815EF774B1F3CE398082960188277F1E00
-F18FE464E416718CB8957E575BC370AC23941D7D6FD308F0F40146FE7FCF0F1D
-627E5413B9CAC9D828656CC135B30BC2CF9773FC1A5C5DB9B2EBC5F6FDA37371
-959B381CA883DF7C1329620D7B7168809F3FB2B451DDB559C5B47A5EE70E5128
-88CC2FDB37CB23DD70C7CFA3985E5FEE49D10C24F0C3E54A666E8F16
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csbx10
-%!FontType1-1.0: csbx10 1.1/12-Nov-94
-% CSfonts -- pfb ver. Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25027 25304
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csbx10) readonly def
-/FamilyName (csbx10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 444 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 686 def
-end readonly def
-/FontName /csbx10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 66 /B put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 73 /I put
-dup 74 /J put
-dup 75 /K put
-dup 76 /L put
-dup 77 /M put
-dup 78 /N put
-dup 79 /O put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 85 /U put
-dup 86 /V put
-dup 90 /Z put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 181 /lcaron put
-dup 185 /scaron put
-dup 187 /tcaron put
-dup 190 /zcaron put
-dup 225 /aacute put
-dup 228 /adieresis put
-dup 229 /lacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 237 /iacute put
-dup 239 /dcaron put
-dup 244 /ocircumflex put
-dup 250 /uacute put
-dup 253 /yacute put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-60 -250 1164 908] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E729C1F3C653E51B9F09F139
-E332F81467DCD46C6B80A4E88E1FB2B35C9134E8C9E669DEEFA533F7F13511CF
-F16ED856C594BE960395D34E6F1FB840870E1390BD51DF0CB99AE59E98B369A9
-308EBD4D62411D723A06592B3F044EE52173E7B573E2FBC21F32D00ADCFD4905
-7907BAC782355B39ADF860CF2381EC0CC3136060C15C7F794F54FDF9445AE615
-FA03D051B337AB511F64C838302CBEB69E431B2B66B4CF0E61EB5ACCC8F55213
-E44FC7CB51E3ACC12F45BBEDC00C9A63A43839BDAD1C0186974C7539367FB600
-B9D9DE3DFCE060C626C826CCC9C6AF9B765C6D6487D5945B01FB21FD234A6D46
-FB48C4A049CA13C82BF001906C71B5E4C7D8317DEC3B2F4A0B8F28A9CA07F8CD
-FAEB3ED1ACDD5162F7D3491964E990EF808D40307E9FBDC0AB3B5BCAD56C895C
-C6666B4096AFADBC5B931D07B418009ED6BF9886982EF5689E1C67D980F16913
-28DCD11AF89476D84997CBC50E8E7942C3B7AB5C03A7DF37E3120834DAAF7EB6
-E1A625F38D0EFF2CE86A1AC4ACA3A3556D98D515AD265D35FCD8750E1F4E73E3
-A74900BDC6A9FA84C7A4A36214935A985CADB31B33706C0DDE055D4BBF888C0B
-38320A34A47CC395F479E84CBFB77BA6F9EB33F344B34D19ECD3466836255387
-772A0F959C9872EEBC9D69943B4CB8051FDB325D6277BBE0490B40A719343973
-13DEAE8D919C8249DE8B60E941AC5072AB647D75A4D38CF7B9588638DB3EDCC2
-0B11FDB0F2DADDCAD5DAB5B3A50520D5D0F5D0A87E550E475C4970EFE8F65857
-AC7138482456FD3E608120BCA6C483598937229D196896D16EC4737CF89BD4B3
-8CEDA90AFAE1206A96CA1F968771EDC9EF951844B94A006DC83BFF440DDC5994
-21048329FB1BAAF487936405456D1190C4B9407719F13E3E3058A363F4742F8F
-AA7A194CB41D89DDC4AFC13C8AE416B70FC98F9199970C09DA44479FF43EEC9F
-ADC6254F7742B066B0639591074DF34F63C258E373C50EE19D043F3246BAB6CC
-37EA07269EBB7308C2058BC3F4396C554E3D34130DE619E426A35D47EC7F1853
-D6008FF3507F6F5C474EDD7E93A6F78D5F6FA9E78F7FBE0C431CCA3176AB14F4
-8814332AF14A0CCCBB9E1DAC1991DF0ED814B53B2442C352D79110CEA883B1FC
-DF0C8E82CB626A3CDC090D06AA74CAC58FFDF7CF7D93FC4292E1044905181115
-4265A22CD0D05FD6EFA01D9DE496ACFA549F3E4B9DFA8084C510FA2602B844E9
-4F8F4FB5F334B62CBEDBDF0242871F546E906300AB550C45141390EE271D2BA5
-D8B0906C4E7C9A6181DFED9C34F6A3FAA8B678DF14C1E14826078ADFDB4E6C7F
-70B75E90777354D1429514DA56D71DF858E34B6D27E108C7822BE4025C75A72B
-B691E9C72B7FE62437E7D4666A2757694287A7C727A46DA84A86684B5A99DF9C
-CDA473F8EA13444FEABDD969CD18C61CAC91F57FA0B97FCE0FD0870068140D86
-F2002BCD8A1416C2AA35E6D3C331708BF7B40D4978CDB311EF111101C418EE69
-D86175019DE6985FF2AFF0E283BE508517C83872033E6CA7B018011D60ED622C
-5BEECCA28D2620CE9DFB45B593EE4B6B364B0EFE700D1C99A1C83874198E5CC0
-B6E9662552B7DE065F075D57D8FF0069E112E5553FF6111A501180F784CB395E
-28AB057F876C61E0B2B4889CCBC5956ACC76393F477B56387425CCBC53B3E3E1
-82E268E8FC759E0977F04D5ADB128DA32B8325D840DB3EA260FB2FF9BA70593D
-D2B0739412659725A2C739AD0EB00F9E79F168B55CBEF8FE70576EA4200F3D88
-BBC0CA2AB40F3AACF5744457EC281AB2A60432CDB7C3C2BAC0975AC960D4F28A
-725E6339AF7AF96FD6D0641C1762801CA876242AEE092FA0AA4E58F64142070D
-4A2BB0258AA98AB2FE6823A265C87BFA842F1513B0D4ED5D88BAA4307AC474B9
-CD08808AA4CA70DE6C1FA605909CEA1F6A5A02B04C0EAE0F92D3E0343274A50C
-E66F7C48F312E40D94FC1EA500930E6E9A6EE30F3BE60BB7BE9AEFBC6ECC9F2E
-244D34F801B9E56F089F76A4F8A224B0E013208B63AF2A891935D95E99B814C0
-C35B8399C3F27890755AA03F90F7580ED864ECB9A40EE498800518904FEED78D
-AEE60ABF4B9BAB3640421E26C996CB51205B57F5C3D94E07B48AAB64E7721287
-C6BAB1499225FF594DEB706C5C2143FEC4BFD21D7ED84874CC2C29742B5D609D
-D4B00DFE0571B7E9F1BFF7F232F0E0560B37E0A840D6ADCB72AA38EA26091851
-3579EE079E4B1E00E668090F4EB06891D4A91A91A719832540274D9A8107863B
-9A0FE19243F0E809DB394CC8C2FCB9E3F574B410CD0F28AA6CC6DA54495E7D79
-EA5A9FD225DA496F9D07BF1EAD17727623D47D45DA4F163BC15DFC1113EF3C40
-D5B3F71717E544F2D5BD98DC103822FD2F74AB1B82BBAC90B1D5F64E8021DCA9
-62D663CACA674BBF7E10453FE7B76E8CC37D7CCD04D0053657255DD339C46D6F
-F33EC4CDD8A6630D0A7BB98EFA936276DB968A1181A2ABD49859AF5FCC0A5925
-B8242D41FD0B18822B2E0C5EFA5DA1A8F005E49861825D631F964BA4A0526499
-B2F3022FDEC1F65E036C7527BA826EC142E6628B77B5F3B829C0401B6878A6AB
-FFE3159594DA428286254E2E17B10DD277AD92E7A497B89A515149D7EECD4777
-E1B6109EEB391AD61456E974C237FBA4E098566008C374C7D4A902013D1C3E97
-82693FA58BA7306E1E3EE352E9063EF27A8C52668C8E0EE8FACFC23F46B4734E
-634313610D8606847A72FC48C4E913F47F4E0F1855FDAC884723FB02E8DAD01A
-B77249456F04180C48F91B3844A30A06F122C6FB43A74FB5732F52D284822AD3
-A90FC837462561F3BDB490C0E8AEA8A88F6C1DB13F3A32AB039E9AC9967AB5B0
-02AA895405BACA3565C2B0D083D777333EA2EE05BC9A56515CC2712076408926
-716D901557BBE1DA7C5B25747F8B6F59E78B05A32A55ADFCBF69C59BBD378496
-02239914AC59BDDEB8D49EFD5B6BCB0AE54FDCFA9B832BEDF483F23478000BCD
-9C6425715CB9EB65D757B7FA57B2E016237AF3F426CFE92F2CD8867580807BCF
-24221C6F79B9B42B1801773F3FA2607E8B7FC8DCF45B38AF662A9009D8E22C00
-DE9E00BB801CAA9CF4E8042354F69084322AE1BA550CEDCCB08141B4E6467362
-2AFC963B3FC328F610638E112020B784B81749068D65725C5E304EE234FCB71D
-27B4B67833E0BC0B9DE63B93901D816EBE9948B8360A3BB862E10DEFDDC57DFB
-B9AD4F4E3758359B4ADA41110F0AFA7C2FB569A0B4C24541CC82CDA98D38CFBB
-AAF92E5997E2B30455DD90573B94C07CA3E3409E96FCFB88EB85F4CB3E36B8AF
-58ACB43A5981431CF9B7BA506254CF13C87AC5D91B44A26223ABC9E046AE28BF
-17BA17DE81C7922240780D7D8E58DEE7CE1BA37D6A2CA23F5495500F505009D4
-9707A1C3D2A9BD0EEC07EABB6B868F1B0728573F9EB7AA974F095CF0EFC7EF7A
-05F2EFF41F3C38BE7F8A48B5CDF540C099911C6D3655B93070B0B5EA5E421F88
-14C93F7C5B0C4AC26B0ABC0B9A672AA5744163F2EB86FBD1AA3F65DC9C6914AC
-5181F626501F0CEC756C93B39662E6D1843879C1DDCCB552352FAC0BF8FDB38E
-EBEFB70C514A9CE9FD5378155393058CDC11B0D20B18A40421C0A4D3009C929A
-9091A50CBAF55D4FFE6682393766D1813E07E1719A23031F72CCFEAE31416592
-43D322327D1EE95D035C3D6CF9D92DF74F2824395EF1856FBF4BF5FA8E184E6A
-D76BB2FE9AEAD584D63A4DD3B39EE8546B5FBDCC632942D2B0E65CCD369DD001
-C87DAC4365C2F9565B1CB28A64119234B6E9844507EDDB35693C4E365F00677A
-13265AEF8BCA4CA11A2DD85C1CC9A868901451DDA1D034528B8EE63852001CAC
-735326689F4AE86627FA8C419C818E215765CD89236697EDBB28B66B6E329F2D
-1679B84DFD15F4CFF75F3EA9F5188A61CF3325DB571A744C6B3FFF963E5F83BB
-1DF9FDE6473F8CEAE67E4391346EF4467524485EB5B1CC3A2996622B54F72E29
-30CCFB6CCF00F89E5F67D31A94F2B381289A718B0AA7FDD64DD6DB3051B2CC07
-E507A5A393706EDA30975A55D08A2DCE5E24C8EBC1FF05B0ED18BFA8E05BD842
-533F043E74AA28F46E1C6EBCEAED4D538E41215B960FF9B7E4887E2E742E4898
-DE83BBB4FDD71232E051BD7C40531FB676C5961CCA91E596F8AA2443D07B6A30
-41851BFA10EB1F4D76508F70B835F38F773E74E74070BA402FDF88F41163E2EB
-AB7E4A62183FAC05AE108AAD4B8F3650863233EC0A39E0E352A7DC363E687EB9
-DF4E60D8F006A3D18A413E80F8A59A9ACD61F802C4017214096CEF3770175539
-5642C1A9F8B5760F81BD85380B2BA28306B8B553C606FB09105A508AAD007EE9
-69D29B5477D517E18981183882BB7755633AB552FE884F70C0A17FADFE645F73
-AEA2D3EE7B2BC02505AE91462C262F0144E88D5646C40175D11FF2E77AD8F8FE
-D89F9135C975046EDFC7BA91749FE0ECF1A22E105C3ECF2710288C128B906A53
-10E80DBFD84DD5C22B8C87AC8EE510C35569647962D1A459CED55D01802310BB
-D68D5FD1823CF9245F534F31E45B3EBA3383685203F8DAC9F8E74B14985839D1
-DBCCC47FAFC8DB72057C6D034EB893AFD409B700AEFB52D9439A49FCAA948D90
-FFDAFA5AF87122759A33891B037C9E7D5E512A865A63FB3EE331C8A465530597
-825BB60736124E6E87F58A02D4A3CC8F3173323431D38EF063802DFA7C03ACB7
-CC813420E569110C10C6C00D584655C5DFACA3FACF74A6DC30F58944C19E82EF
-70091A543CD1C89F33A03C0DF205A102639F4585867ED7ACB4691A7144DC2F44
-0C8ABC96C6DCC0B21E8771B44F82042861DE7FD6117D47ECE96B6FC7D91B2F9C
-C294FDF3EF7DBF20C06CFF39B29AF25BA17C7EB7DAFDDE1C3E24D744F76FDFC1
-A97D5291142B7DCA1F4A5741C66F38FC345877D79450C4C4A9E296F910BC1CAB
-2389C7CD8524F2D75CA746F13A2F5E29542DE6F8C888A3CF6E1F2F5F9F81DAB1
-750B8EA9261A52A382769E2C94D92C16C8A8CBC29FAC0A343FCC741B6E3FA601
-0FAF1C9AFF394245E38E12ACEB608745E8645B8DF2426D182406048E2C0C7748
-3CE5E23FC895EADBE18C0497043E2612F8D1D47A87C6EA3DDCA5556906970A45
-048B038FB6E02477C60633B7E21D6CDF2977104C1C4A46C6C585535E1EFBB15A
-CA882FFA7E7B56CBCF7A3D3F5C5EA5F2B5459871883F36F8ADF1A5C4E5FDF402
-BD9C712AD5664C959CDEA33F4DED472DD15A4EA261901B122700C79820A705C9
-D0126684C0EA3273B601C60D17FBBE1A5343175D284E1BB7479D236DB0436ED6
-E4B3FA792AF4A2E6895DEB3FAC0E206184B720E664C9C580A55E12A305D73FCA
-9EC4F5EE952FE1A9E8BFFFDB23CC7A6E74F160BA33525D57ED47022DDEC70001
-3BC92C27B1EF28A5671FD24091DA2F6442E3E2105568A8E4DFBE796C588632DE
-D8E6F83ABF0AB80CFC4A0373D9C1247BF47E101E7EBB5D13404263BFDE17D02D
-16F77AA4E5F5FBD26F6D981B5F30B00229A51C1EB4293567060E142787EF0390
-4702297E5A10D7B511428603567D497BFF6B616C53F18E19A27C5C0ED67F0EAA
-DAE565464EB8C39D5F5C5BE42DD98F1891C34AE7F018010AAD2D16278FB3CADB
-F18CE883730CE55A9CB054AA1FF0CE524B9272DDE5D0438F1476A69019A83E00
-69500C2E65B05500B7EF7B5124E6D916398B49E4C646F3C13EED04599543E60C
-8D4B90194E82E3C080BDE8BD29ED2843448528D55EDB9912AABB7F3B71727E60
-6D06D408F175DE0DB1F2817C109063677DCE2401FD29FBF6315815E5725FA05D
-0B8158687941B07ECF1DC24F6D7FE940619B0D6F47BEDD7E6956112B95FE5D07
-0B1C4DDA74596ECA6075EE149BBF74ED4985AAD1AD1562F5CE624BA06DC9C1F4
-C0293464450EB069730F7E875C556B4826314284CD1620B343821AD2902110D1
-5F78B45EC687E2762D5D86829374B549B703700BA048FEC78D30CD7697E03E0F
-4963E818F8AD5CA19B494D67802C7D5C2E7F21C081EFE20081EF9037D9931911
-2C6BB8F06E2616F1C05777E78274223E12417839F678C5D5E1AE4190794155A8
-7BC335700CA3FC7E008FB8F64B53C0B85D78805A2F025CD50CB9E63766709561
-604178903C55AD1595755616726B8F384A3A969452CCE517112702FABAA07352
-74F307145A175294877D759C8BB62781C0071E47CF07E0918793633D34547AA2
-929C263487F7D4CE89B3081C42816429E1159882455DBB4BC252F485D1B853C6
-310016AA3A44341D9414EC010DF0D71A6D65ABD9A9347CD1175BD94E67E7171C
-456FA9DD32D476FFB4C3737F30D23A4402C68E4D51B0F91766BA4DA816699BED
-8C1E663F67C84A8E95CF78EED19F67D001904EA83D453A86B1593F0CEE814930
-A37E9A069739FCF1C162C62EBFD14424A8D9DB9FFB33A195E12CE46B94438C5B
-7B742F67BC435213B6CB521CFCE58D612400226ED682798E2B8900563A2EA3C6
-D535C829CC1D0376B8D54D4BF1D7B2B447D01206CEADDF3E8D0C1C05158C895B
-409A7C6C0994E14BCD5AFDEDC4705C10DB095E68BE81141EEBEC5BAAB0FD622B
-3891BEF98EF9961E3ADADD442577A73399F190338527F6CFE8D263778906C332
-6A65BD51166CE728E521797998BC265581DD5EF579FCB3A99045B924D2A76985
-D55ED260F7506747012CBA5E822B7F37E41A8926EE658D2EC542FCEFBB1FA970
-5AC37E738F183CF93719D5C064B9AB28BBBDAC399DB6E95542BF814BD8D02EE5
-372E7B5F503FA254FC1199F52684B7DB25D7F0252EEA99FEF90B909A0703DC98
-7DF420CA5374E56EBCEE32F70B7B54445DDEC3F93926FB746BEF6306F90FA472
-09FBB40BF94F7C394E95D5154EA88FD2EFD39B3C3ADF655949225DABD8BC42AE
-4317B533C31FDFBF9B94970B0C6574C678CA11CB0FDB3D4948F971007C9CFCCD
-FE4A0E5E1F9BA78772B60A7DBA24F789E9997AC91960D44DA79DB567F7F9FFED
-215C0A9585E3DB997A651B29B917C6A9FFBF11F616FDEEB300111D3976ABD248
-778427708CE701C0D2F89722448E41CAF23D9E4DA58ECCEA707FF27F3738E29F
-BBE17292EE69556CB0AEB4C1B12D146747BF5EB5BA8EB6168F5D9A7A24692C12
-BB4B8F4819B1402467E7F74B602123B52E58EB4B78AC279DFCCEDD365AECDDC4
-848B2498A85E23C43961D494FDE46090623CDD8729FBA1686D8729C4B8280238
-92E4FD1905F5A1AD1D0318B0B8B5C789B04C994C40206317F4FBB52DB0C7C6BF
-3B20446FF07A7D3117C3F59150B01E2E49D51C9F888F826DDD1F4C789D5A5091
-625294B5EB9BB9B9683FA2C28C0F7DE92D2FDA4D92BD60949692C7CEFD306B7C
-A43583138A32EB7D4CD08EB2DA109178CF8ED4D8A15823440527EA3B963A4492
-672A8605C8CA3017786761F6159E336C64A9C9439C3770A080C7E2AAB11CC750
-3D3DDE31C12566BD323ED135098F66B7A20C2AD0E6E34ED83A3BC416EB1EB0DF
-E9A3402F4E37B5DCA19AC99EC9EAF16665D422BD857298C8C6FAC50886B22076
-EAA875797D45C2BF7BE954DA45EAA3E4C729C5CD0B04FC213738E259F7795D28
-AFD506BBE213984DA91DBDFD48E4813A1F95F0C59DB1E4FE8013DDE7792B15EE
-C8871DC176D11FA3EEA37203D9BDFA12EEDE768E300F33DFD96104E16071D2D3
-2CE124F000DE8390A1CC4C6EF046CBFEA92E998ECFE478DD1E73B768BEDBC4B3
-414B99860E83C430DFE16C450A6B30413B7DEF1CF11C7B31000D1684314CBB30
-E1F06EC86F8D665BCC10AE035DA5D89B91EA92B0575FB761CF87721C2899BBED
-C95E91B6B299945D133F69D60B2D9AC8108B3B415C4B77E6F98A9EAF9A737A23
-D2EB466A9AB6E7B48BA33064556CCD21A74F72996E91D37900BB0C89C9505457
-B876BB21C0E406856A79133F1719C9441596D660855BAF76A10FB44A1584B3F8
-ACD8F0FFB9080B8B351B9A9C5C83A3E1FD67220B88674B965AC5477C81D5D4CE
-EEA62AF9148CDC3F684BBFE68F7AC74F3DDA8F45CECDC6B04C4B600588454BCE
-37DA0415EC8868C65E13CE8DFE60F3482419A84A8E01A30A6C38FDFB275B0F11
-16AC840BC0F60CF82A3D2453FB2E0E3AFC1EC311AC6A7F2DF42EE1E34F68F33C
-D507DEF9567D860BC052E014CA830CC3598106FE677311DDE9FCD81AAD4C6ABB
-453B7E55DB03761465C949D756B94CD975161042E6C4E14399DD3B58249CFC60
-63170C7F752D952C2334CA76323257DA48ED382D18F87ED305513C91C152B49B
-91F7349C677895AB7A172F00B8AE8B954FE7192401119FE67E7B919844EBD872
-530B1BEE9354E70E333C78B3CE28A9BF446D92BFBA85AB05243C980FC84D0DFE
-77EF4DF19551017A55DA07AE4DD21740B263FDBC3183CD0349564EB5EAD2A6E8
-46990D2C650C52A6EA567D713B2EFF34A53222E8A8BA052E01202D4427DDA498
-D72C9BE05B69C44C717CB0AFA9902898445AE479AA0CE3A71B8442E41C1E410C
-B97FCDEB1A24A7F37E7C0F7E1A1C23465191A2A88BA5E9D4931B7751CF683425
-FD15918140F88C503D0E7E53A23A2FA00790208322BE3E892539EEC1103A03E2
-292E792BDB7158AF68E60770F0914508E980051C7ADBFB3F49F192878160ED57
-B9EB2D111DAB662BB34487BE397D4224E99344950BABAC9E3463DCEE065DFEEC
-DECE48276DE29913D2765C61538BE959F8ED3A89EE395CA10704C0668D09D148
-2A806531BE18890799CCB783481B33DE339D658896B161DD925B2F88F6C8B534
-DE679CB77C035B379099D6D487CC60624520646EF8A226CF7D22C864F86CCB1D
-46346A4CDC557331952E387C8A3727CC9B8CF3086A6C5DF141876B77541791B0
-AC3607FE496101830A7E8FCCE2C113B421197F23AA0E2C036B193EDDF472C02D
-DFC755ABC67238861277B4DAA32703A69DD096EAD228A2F8834A43B047D4F8FF
-4E1ADF0C81A146ABF2CDA5A3302637907E1F1923440DDEF3AC69716D53B2FB8D
-F859735734DF0751E428E15B5F3BA9A082E75803CCCCFB574E5532E474E98FA6
-69B0BA8AF6132EB214CF02FEB04AC831796B91D3F1344428A29C18EA48014AAE
-11AAE6DE9EB115632C2FDFC502FBE3ED1BD1AE0AC81C0F3221E8AB0A0A0C737B
-CAD01CF7A6632C0FFEF23A47B504859B428AC7547888201C6FC0C28B166DFE75
-BF82458CCE6EE03A8734B18800251D6412689F7671C1F9C02EDF08E11D78ACFA
-CF15149AAEA2CCA02219ED56DDC9F508F60CF99F137A454D227A54430C4EC869
-A6E56EAB8F477575EB2DD5F716C7EAFB0A2935BA273B19C1689F3E35C75076A9
-9A58C888893D28561862B0B504BD91A0E83572B559F651584B2593856B1872FA
-7F8E116607AB325DE780E51C5AE48CB9A9D949A0F93E436D1725AA205320FD5C
-C3A2EAF1030E12AE91020F6179359C717EB44F60DEC37A2BDF0EEE21ABB7B758
-E5AFFE92041A31F3ED8395B0F9A251AA7EE6EF16DF9FDAFBC580EF5A5D3E7B53
-68C2575979FC64D403A707CE2A04D78E5C9FE1F0639D0DE261FC8864A37AE2C7
-E65ABD04C5B18E56C4E3095947E035454115D7751258F322D6CF7E2005BF9D06
-3B8B807FA2B1678D2B80776301CEA02173B33540B608A506DE29B799A2A8DDDF
-C61E7DB6B7C82D5575FC16F9F951F3AB117D10F1087D831F009EBAC6BB22936A
-CDA7278C0A172D9130679F594B62829ED9302904B6EC8092DCAA7F31E62C8B9F
-2C3FB096A0641EE04C249E256EB213E4ACBE6A17870DA305521728517A166E53
-70B9B48E763D46919FBF0F5879A3B332EE6AE56C90D4418669DD9969BF14AA5B
-8350FA5A2F8EB70C2CBC922073C454C9797D3F4C91EC26CAEB8DD38F318CF916
-5011FBD85A6D4A3B355DF7053C3E8CE71944BEA029A84C2FE2DFBC76D2DD69C7
-60A5155F3BFF3DE858665E2F0C4A24D6802E0CB57B41D55F08E439EE983785F5
-F5939DCCC53084AB8E785FCEA7E9CEC384AC2A8C47E7C97176E3BFAE6928DB28
-FA876E4E916E3A80CDA6A3DDB8C41B95E2A92344188D601EF38E25D6EC02FD9E
-3E6A731960F251298417E6086722375594B0BA1066D309239D257552D02B4267
-7CA192DB03326E6BEBE2B8F00B1C71E6E3CA6E7EADE94E6417AC37AFBC89D888
-266D510F96B27DEB8763CB3406E1CB4711E0D1AAA9C47438CE5C4FE8246C184E
-4A2765960AB89DF086FBFCD58E297E2DA1A67BFDB43995FD09E1F7FEDC1281E4
-84165095A6A4522D61711AEEB78C7A02DED55B9C6323206BB72D58B528B14B3F
-54823D66290DBEE7E2575C2EB0908A0FEF879823DD991C95ECD5135B82F2E58C
-5054C16CF89F14678558427A4B58722A547BF827F8F580E890AA7FC0ABE383F8
-2D15A4D54AA1B8B55C21E244E61DCDC6C74BC1977FE95B87EC6EEA104F809041
-CEC9DCBD036035BC2D8D83DD646500554CDBA746D7FF4D9EF5A8D05D411C498F
-EE4A2F7751922A460DC6553CDFA82E4B2CD14AF4066FFEECED560F512411D8F6
-05E3C23992B28EB7F1F814482D06982D4204E98903B8AB59FAA89ED44E29D51C
-87DFF08FAE71B6C1F963D35FC0DA85C93256FC228028A627DCFE8A593AA06FE0
-455F05B184714CB9646B9D554007830C6A66E9C514822FC08FCB984F6DF3BD90
-A6D40439A8FBFBFE8C6E34CCB6350F66B3EEEBA607C6B30CC8E9D0A27E25434E
-6074A094481460B561C2DA1CFC2E4E572C8B7ADA1480084D9E20A5ED14242CD4
-2EE28743EF1A270475C2B5E6DE3D44F0646246195041D7F569B61EFE0BE3EEBE
-7ECF3567A8856A11FF990B964702C351422CA8ADA67340B447506D60F4E7C760
-F6A237B5FEC336F75302CA9427FBB9F38BF3FE0C5CAACE330E27D7EC598A3971
-AA8874E6B90E43860BFA084180291A485AFF66570BC1C517F6080B000CCAA91B
-02D28E99A2B633940F807BD13529C9423D7B83CB3F6FBF8EEECD56254A357195
-19B828239A6899EE3169565721BF67864E3B528A7D5580F518FD1DA9F6C9D559
-DD891DF9FFA0497AD5924EE853D42F398E799365EFBD34FABA4CAD2DF8F10C1A
-3F70791A0ACDC5A72ED0527E4AFCD0B63370A705C0F38C06C3DDD0DC457C0BB5
-6D2208935AAE50D4C0CFFAC537D4C5828CB2D5691EF678BECD8C19A723DBB767
-8FDE643CB01E08B101C624EB53CFB2D6D30EA053F0B56B24661A395E880A6C88
-D2855084C8B6A67EB3C30B79F8F69C30E5A982814C0A98561A3B3500EB0FECBE
-BBB5E20ABAC3D2BD790786394ECF90A3F2069EADA7A5BD4F797D888CCB8BD310
-95B716EE728AFC5C937A49E16EB4AC5125FB5679CC1EAC9B452370912C83BDFA
-B59C3EAFAF414BC1971CFA7E4EF92C15170963C7222C3860753CE986489370E9
-AC56A1160933338FEBE4E017CA8B0B8E2B2C54497BD804B5B3C376769AC7E464
-74D5B44009485DF79438454F286730D0A3F5E8501E2D8281C9753DF36B845C81
-4E73A8EECDE8FC7D80CBC5157A4296BC0185F1532FF683D28471038BA6830D90
-27A8E7D132B0C4AB147C9D5AF7BC6F77C15CD411BF7EEF9530A733CF0B1C4132
-9AC7CFDE4AD37B89AF3C1F9CCED2EF9746BE854E1EA232147ED3F55342608E0F
-6D54F79C5E576885F490162627A98D75DD5069D5544FAED0063BD3930DE42E4E
-7B85E66BB64F6AC5533AEAC178B52AC0CB60F2AAB891E8C8A24215C16B335FB2
-3022DB8B8F05ECADF1A63022F22FA5B72492C020F1BAC3CA3C2F56BD9B77272C
-28317A144C13B6AABAAA64A42E5EF383141E122F6DE72D77433E778FA4EA0AA9
-9CCE7A37379E16F7DB37D12C8C3B8BFA9566019E83C8465D08689320DD3B8C0B
-9104496955383B7C2BD3C8B4F60AA60741BDC12BEBD4026BDC256B74A1E1CC84
-98915C9C2A0A9F2B1A36D88161C0335A9845027CC21DD649840594BCBB4C1826
-2468791EAAC3793294AED8CA25915F502E8736B8C762D3753B2477C6DAE01DB7
-B4B86C314101E40C6F8D3738A1C96813BE8373A8BFDBC8272D022D122C1959FD
-B68AC9B461A33DC3AE70C745D5B69D4A669FD6578842611BA256A82723C56F76
-E3F63ABF3A83D29A6E511768565F2EF1CE3ED586E60264DF3F9EB8A7742DBF81
-DF8DCEEC79DE4406469C9E56F966935ACF973A611BAF9780789DB843B2BCA71A
-3B328FF5873D3A5817DBEAF519DF1F931550A0EB957A1FCC36ABBB92B0996124
-127876EB8500673509BCE5F176CA20C0EAEA47F61A6F39D76F9A40252F4CFA55
-0C0FB609A73735C5B63E434C88BC515527AA8AB57A8836EAC44A63E20ABFAC61
-49F9B4BDBA6E28D87D47926DBE13D59996717E5907B2AEE0069FBCF0ACEDA2D6
-EF1DB764236BBC7801583333E92AFE72E2FA243190BA9447AB5AD9D868C36947
-C5D4A3A3A5E0D63FE7D49A60166B90B1CCD99CFF47C60B2D1FDBDFD355B4FBE3
-B330F32613C355AEDB7E4101937F164EB2A23A9829DEFF065D3350BAA692F88D
-44A0DAA86B10B254AEA90E8613DF1BAF3704840189A109D546042850A2B9A748
-615C7195124749D46627D2B20C1C8387320A6C624F745D66230E04372716FF8A
-25660C407602802940402F5CB594DED3A36B063ABCAE106C57B31D0801DB08D3
-B4A50E78A6A80AF67334FD75F6A53A05B38EFCC39A010043A361E9A0FD8FA21E
-BA9DFE44A8A791B94D49310695706E91C238A1B6A44A586A2760A450B1268032
-BD8FB6B39EA4E1DA846913577F7E75023CBC10AF73C34D60ED27FD1AF708CC70
-0E18AA0794CF9BB7E3BB8A3D4C20ACF9EBA1DD16C32F142AECC74EF37B0342E9
-A29F45FCCBEE8C506A01BF6DC8CE94B060B124A5BAD64F45FC2E23E663F413B4
-9316F94C1C03D2DBCE8EEFF9F7018248A9F5F929B6C5EB9FB521FB4C1E981C94
-185EA7BDF7A97B0038138A656150A3F2803D31B70B079AC0E10D28838F6B3329
-762A0CDFF651C03E604A39FFEEFB0D0336422B2D2D44A726BEBE6D313EF946E2
-37AAFF61518823AF00C7685EEA3E7D6EE644840DBD5E83C84A14F255985FD228
-F3A2C91ECEB58BB2E543668B413439770E5DF3E2938AFD849EB85A890DC8C94D
-B817F101A6783BEB7E24C8895959B8126D3A1A8F61BD1355964CC0FD4284DB13
-E977E16FCE0202BC147892DC28C76DE356A966A504FC0F24E67FF4BAF31EA048
-5E4048234A0DEB30C27CA190FFC724D817B0D3C1080DFF040F555182D9A33A6C
-EFF03FA526AEA64DCF2498707839ECDAE65003203FFBE650B07FE01AF4E17CC1
-0E10866566BAC525D9DE6F0ED4DBB310E299A947B62F280A651210A65A7F265F
-700E2FB0E2597C9D3D4B01FBF5500F203D2E53EEE0F04F2548C33B034BF978F8
-97D79672422BF0EB298B6179CA896C410FBF419DC6FC7829DDAA2C8A6AEE01BA
-E5FF1075325E07A55180CAAAFFF925A49DC0141FBA0342DE3A5187CFFBCD8AC8
-FDC24F873E1C53DC4FFEC0C0776447D1DBA99E60E69EF693D0C6EC81D72BC3A3
-A7E565CBA543441DBE7C31A92A9A9A144853EB2AABCCE1BF0612BE5D3F897056
-958C6D0924EAA3B3E1E02AA51E543B559F231673615E204F12D1F3FF9D4B2CC3
-A7A440503E4DF693919EE2E21926F8DD063D1626F557C95823DE429AEB93A4BC
-BFE20A4E0B251DA0ADFE5C4665B05490CC5BF50EA7915A934A963D279E98B87D
-65C059CD3BC7C6E84F2FF4AEBBDBA216D365ED051FAB8C572E58F1396AF664E4
-BA78788DC82D9EF4226ACC17B81B9DC6A142B7B559B73BDA9B49438B30DD597A
-0E3E296688E593FCDF1AA40064C1500AC4FBFFE0A96417906A7E706885FEE2BE
-8333558A464B5AEB89B5595B27986BEE4E8072E1D547989484DA80DD2AD2A7D9
-D61CE89A8FAA36ADB53C77C54CE2A4E81426899D3E4BD75BAE18F74D176135AA
-1D2DB92D869F071E0346E0619D792B28DC9BFBB5DE363CECCDD20609DFFBB403
-8FAB8A00A52325DEB0246D9351BF40EA0D4F900E64846F22A84CFB4005072D13
-98D29998D16C77EA531F8095E30792
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: cstt10
-%!FontType1-1.0: cstt10 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 26147 26416
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (cstt10) readonly def
-/FamilyName (cstt10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 611 def
-/Descender -222 def
-/CapHeight 611 def
-end readonly def
-/FontName /cstt10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 33 /exclam put
-dup 34 /quotedbl put
-dup 35 /numbersign put
-dup 36 /dollar put
-dup 37 /percent put
-dup 39 /quoteright put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 42 /asterisk put
-dup 43 /plus put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 47 /slash put
-dup 48 /zero put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 58 /colon put
-dup 60 /less put
-dup 62 /greater put
-dup 63 /question put
-dup 64 /at put
-dup 65 /A put
-dup 66 /B put
-dup 67 /C put
-dup 68 /D put
-dup 69 /E put
-dup 70 /F put
-dup 71 /G put
-dup 76 /L put
-dup 77 /M put
-dup 80 /P put
-dup 82 /R put
-dup 83 /S put
-dup 84 /T put
-dup 87 /W put
-dup 91 /bracketleft put
-dup 92 /backslash put
-dup 93 /bracketright put
-dup 94 /asciicircum put
-dup 95 /underscore put
-dup 96 /quoteleft put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 119 /w put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /braceleft put
-dup 124 /bar put
-dup 125 /braceright put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-6 -233 539 749] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A2E729C1F3C654AE5C10A2F637
-7885DEF6A2275DC695462949A67E0D187D38D4A662CF4FA12D30CCA27CE7A810
-692937F6C2BC165CE2B8622BD15D5E5E6CF11188ED2932DDC14A54EC300FCE1A
-2C0327DE4D1CE9EA805CEF466DDB70A9920DDDC1F8E2F221D9D2090BFCE081C4
-57317529B50A66612DE3F73CE16603D25D14319AC60398985FD75232461654DB
-2A541747ACA527AA312FC27F84AAFBBB7F32996C15D8E819BD14DC1EB8E32517
-A1085EDF51DA03E28D2D370F6148FA4CA5551A1577803A2F28D69BB52DAE3A21
-E7694EC5E8AAAE0A2E5BE5D6B4B7F9F9E0214DCA121536C0F03ABF09B3DCD1D5
-7842908B4480553EEC1250FDC4E4378A115DF03DDD18844135CF9C098E067275
-6044DD8E906F9A5FE4045B801FFB78CCD0B89F91DDA22768ADB0873958A698F9
-9F264E31FC8C2202AD497CB8F4D5FCC7B4B25F49ADE1472B8F4A60D9F54D4356
-9359F02EFD4058C58FA5E55F60BA752F27725618302916E03B39CA30EAB2C1D5
-10B84955DDD48C7F6C6A1627635192132959536AEB5D58F9A01E249978BF10D0
-D3FCBDE0143238F62CFC2D227521B9A378BC4962D8FF5B5423261096F4AE3427
-49367D8FD1A016AA686396062CDAB592721EF1DEB820EB141C2BB733F3FE3DB4
-2643F8E0BD0A99A49188A4018D6787D4C0CB301152A70157310047A3FE7C6E5D
-99DB6A9E6D909C86DEF977363DFC5E1523001D95C0DAD9F1E6AAC0184E6D9FEA
-B2BEE38745AE21871F43249D4A6D0E867AC7E43E80EF84597F9E17083DDAD189
-2E952ACE33A48351CAFF2BF2B977937E70B713CCB186BBE6C5825A46C99A54D9
-577EB6EDFBAD85503029B9A0776BDA3C877A0E650CAA6E799EADEB641E165016
-31603C8459F31242729A18EDB411FC40B0CD9A196661A5AF768C67C2C02654B2
-331B923D1BB8A85655E6D40B798A3ECF1CAF79DDA7EECB0F1782FD5D8F1BA5B4
-87A6694809B1BD85530F5E2CFE0DF37A6732DB59F595D16DCC5493BE2C847312
-8449B7212B211FD9179E5D7D6363D39D9AF2694D1543FE8814CCE09F57BC3676
-0BD45A687480DC365D0A0FA9459CB54891F74EB54079D63E53C8B0DB627F3A1E
-D2CA70C7A3705053579F811D5728B57DEC286F9DECA4B1C4EDE8ABBD76EE2C4A
-30C93B45C3B1D1C895809AFC85E0E6BF5BD16078D68714E51C0DB582018AA4C2
-0EF7225A3451CA2AB96C64863425A8DB30730A88D81FA788E35BF8F7FC19034E
-37A565087AB2E18A8286B88CBCC2D46E57FC508D1ED03CA06491D973B10252DC
-8E088D8AEC852F51B857A389BBB334C21251ACC9BAF6F648D4EB41EFBF209A9F
-81DCF104FC6A46174D9F0D84C09F998363D3F3F392F2B1FCB711AD32F5F69EAD
-D2D9ADB6D9ABAEFEFF7A9150417A4BBDF8518E241C96655C354247A63DA7C883
-B8E7606E9B3B31DF582B40F9D2987CF94619ABC955B8194B5AC6F6A0A35C4F04
-DFDF783B12276B6EA24CEFD160B537690EE0D9237297AE18CC9D557E36FF842D
-56EB0E9309672DA03FFF3610762392B2CAAA898F7465BFF165AFEA30AB740FC8
-DDE2AF312399850379515BA605D8123F8113ED125B11AC8F5C149E5E8AEA106D
-747F8C20E2BC75ED880969372C7FAEC67828B182C7F5619621FE2F7815F374C7
-1390C27508EC5E88F3DDB1CC12F3424EB859119E4C33FB4959B7157EC86A0250
-AF21592A3F136524848DBAFC51D1D72C3ADFC6AA3C1CC762333E910AAE808406
-5CFA83C16EBE0EAC9F4422E8C23383C76B1CA2453AD17408FEDEF3FFB6C81AE8
-3D4E69661AA96AD96DD667129AF4A1089B390E95C5E53B01C9A06C90A2CACC8E
-BC06A44D45AD42480FA293ECC658F897E2E0B1271AC2F4B846BCFD434D80AA8E
-1B620F2EE9B280C3647197EB6F0D966B4747B048F7B56306A4E563957386FA64
-096FB619E3FD2320EBBE7207B2D1ABBE6498535B0BD35D89076975A3CFFC401A
-E2AA685584B5BD587160609CBA3F9C532D5C416DBEF870FBF9D2BE835022CDE8
-E12A2B663679B010018ADE93A7346B6D03358366E2FB8DF511C08BD383199FA1
-07A9CA35D3763BCC7A9EC5FDA448214C914C774590CFF75EBF86F71C1EF0A3D0
-24B9AB7EFE5FEA107659FBBB586462A3CDA8397825D269D700C5441A5E764F8A
-D703FAB8F4BBB1554CC9BAB6D51230281DD54394AA449E01F38A4F7441102975
-E81593EBA6701209D404451C677583C0E298FDC778E8B2464D04D19D82F104DB
-4A2B43054D39B5F470C1CE551775A1E9AAEDD484442097914FCE106218FC1D9A
-1D2F4D5D6D5370EEE6A6291F110FB4DE8CB21FF14AE894F7F5E4911D4A46065A
-88595349D0BDB4147B0E27428921E67AF6FEBFD85547491F8746330B2634427B
-A10C654942DFEBC62F94E006B9CF723C7A097ED8C23FF4324E26CCC46489298E
-0275A1FA08168A1D3F9C7FDDBD18BB8FB8478B1B374C1DE41D8FC6281C5BFBEA
-8508B69F32A3BF2D1A6EE98C51277476DD6AB75382CB2F304996F3A15859CE1D
-96D38F20FAD46616EF29D34F1A09B7EF5D2A6330CC3AB097878E4248B9935072
-DC99F172B2036ED2A824D99453311599FC58702709DFC7422B518942146EE05B
-06A483BF60420E5187F7819E670B70CE29B1826454939F5E807EA94C0EDB525B
-09130337D1FD7567851A2CFB4BA6CADCD42E32BBE10CB2E2D474ABD44677ECB9
-FEB5B1BB1EE0B62F0C6CEA9E425486012B1110D1885BCDD5B5152E5F9F0F92BE
-4EA94EADE14A6BE6A74830E8309084E2C43612E1F6A8DC0D3619294134C6ECBC
-939E1EAB363857CA9DE3F213CF8B505787B52663F34AC647F6B1E3EAFA7D48F2
-445275F5A3E06ED3310C68FAF4EC12BD44476D50F64E866F7195860F56DF531F
-67B127FF9E7FB0FF7FFCA52B3AFEAE76D6DA2380A712C4E8BE72A3311E3DF0C0
-193B9BC27433C97B5090BE8BEE458AFBFB57BE9230F0743C3F854A3379E03107
-EABEA4CA0871F1126015B03589E7EFAC6581E387BF5B39BF2E9F0CC0F0DE16A7
-4D0933DBF682F64CF4471975FEEA002D42F81B54C3E286CE2FE2CE48548C9808
-B0AD35B955DFAA3D10C244F84F377E8DDAD0B18B4D444DC5A1A6DD4914A22FF1
-EDBF796A2B1E71690CAF5C3A15B36C0A65EB0E98678351E776E07E3D536898E5
-1A991B7CBAC30A87A9155C587A477F0C890CFD19FA90DFD8E6A2F20D2067A91E
-67270A1D469270F8CE354717D5B4044974015E825BFE5DFC6405278B74F61294
-1CF9A4517482740E9FCA86D7FF8106CD1FA71499E26B0D603A5585C58EF7C017
-6F209F202263AD128A8C781C58A01167008997DF2CE1EAED186DD9AD8DD93BB7
-4CBE69E6809FE0A0EBE876275DC9226742428C1679F10D705B8599F3B66226F4
-55D0312DD2F36F850D28CF509CD45DAB4720FAEBEB852A1FB29A51F8276EFC52
-9ACE54399ABABEE67A6D7E0EC4CA1FEDA0F9F2BD08BBC2F558C9CA61D1F43452
-7E0C84A00B62E0B07C313A04A86A5CE74741752BB26681E24750160B8BBF56EC
-7BB69100410B7053D06C31FD6B01A9B63D81169711477DA8C820A53BB28234C1
-4B5A7C155EDB51868BDBC0DB4510753A08F58A05AB07A61D841D8853BF16E00F
-41E626A0E83A9DCA8C3012EA7726A571FA5E7E5454C7A578B66859B454C6CE87
-D34F5F961E9617248141442C2E48ED308AF38EEB8D10FC08FEA32593DACCBBD9
-A1491432D70630F748167D8EF61C27ACB18BF42EA98601BE8FFF91A07A64A34D
-17A05772BA2FD518D8F7934172DAC8767B9EF7D46CAEAA6EF7E55A8DD06FC2EC
-5AFD04D17A7B91C4A9C42EE20856C0CB82EC4D09D8A32216957A78884F8CB77A
-09391BA5F59CA3F8094134A565F98E68D5174F5735475D9520E32B3ED70EECEC
-F6B5D3D72C6014375DC23FD7BA51DA5E07B68988FB133FAFDE6593B8BCE3A218
-77285F0C7AC963636791701341F6C2B5D062EB5BF98CB359667FB5352CD2F770
-FCCF1B637527CFC0F08C99EBAFADF4C97AD9D63D3B3891CA52C10389F2E46ACE
-F5D2DF909916274EC8AEDE68732B6C7B0047B00A5E7A23E5A69A1288BB190CC0
-75C0D21235F67DD0FF54A429975122DEA2EA9557CF9532AF46458036B6ACF27C
-CA64F9280818AEFF8EE0D3F14FA881D0AFFA9A0C9F23B96672464C9DEA0C68D9
-959BE56E197FCE8230B69A78E9AD2B7B895CBFEDBF22B1EC7AAC71396793C018
-2BD793BC1F1D8828C651E2FF234D621098FC234A1278F8807DE1CA26BCAAA253
-26F73B6800E16F589488E72879D8BAFAB26F6A2AE172BA72F1B63993AD0B9330
-45DA68C901AA49999E149D3FF0C691721E2376052118FDA9D3F485DC2B9628A5
-A679A7AB050197EA233DF301426D3F0693CEB5A5BFE6F7C476E2398B493CE1CE
-0A0F4205ED4A2FDC90CDEA808DFEF41E57FEAD7CDB3071D22275B1063A45695E
-19C8BB3CC0119CD0C6575E2E2160C746480C2C211AC57DEECD64C6E80733B048
-6F72154637966158D13F1EAE6ADACC063A9D94D9C077F634970D8469E1E3E294
-5C66347082C7DDC5EE97CB1FF28AD25E3F2415529CB930EE0D689E4E45E810BA
-2FCB5FB3B7E7BD4B92A3E6BCA5DE7670E0993EB5B81FB04A49A52D7EF616493E
-5229DD78C71D8670A1CB73E0D302F5302436BC7F8B816BE336C5BAE54E9A6719
-BA3692C614415CFE5F85D6D8815EA8420806116E147E99F9542599CD130E60DC
-C311B3CA551AFC7F32FDAD3B8DE4FBA46AA4FCB179F9E50EA979425D06B86025
-0DE10BD8B889B974A4B04528D26E3A5B754906EF59FC58B2580B20E1C32A6A65
-204BB1183DFA58C9D3DBACAD4643755508E5B43FADAA25767CB5B384E7D6F00C
-E8F890F7AFF34BB4C684F8A94C7E31C89E28887B498D9FA4C65C2E060BE61EB3
-802133497E4B41393C9C82BCAA46FEEF28159A326666579801F823BC5A5CB39D
-5DDAB7F50125B53B8EBDEF012BFB897C3F6A67409E0E3D52A1CD556CE3EE2622
-B57F1801A0E8888E16C069F26ABE6E09EF5937EFF485A6DCEA669ED47182754B
-CEC4AC865505E47478AF090559F269205565B9166D728280BBC5927D0DD6FD0E
-203493017CBA4BADD7D43BD10F077BA43C5A9479DFF6DD57835D64355DFD3769
-0DE5513BCBA645B0DB189DF33D7924148CFB343441F5529FA891C7083C752164
-87AF0F94125CFFEED444FB4D80D4FAAE0CB9510E647028E2964D374F12F84B6B
-215DB51D1BCDF120B62BCBC7576F3CAC5C848E53B4AFB7872A32BB4D3BA5E65D
-1F07FF87992DF1C96A3C896EF50CBD250735DE6915FE98F791B1DC62B85C77DA
-7864E9A037E6137252794497D17D1DEDF9ECFF7F80D1C2F9E89BC9FDE6618151
-260192BB0819DB1F1C4357DE51919B456B7D3CCE9E4F7102F3F268D61C448A15
-9A034BCDE6BC4DC676A3B3EE4B40811E81D6BB8CFB1DE4F4665522B194121C5A
-BD85444E262CD6BC7054219554EBD5B9F3789A328F88924B063F5F31DE07FF3C
-99D377AFB16AF86D8F7D3C18EBB95CED6936555CE2407A9001A8A4461B446741
-31E4D250517B2BA4C443CDED995C40B79D1BE00BA0334E94401AA1EC59E9618E
-BB8833A14E3A09BACC22C8627E4CD941EA254F38E0D48B17611741FDC5448510
-B85D6E6B787EDBF5E6587854DEFD03A225B53943808C8187AC75D10114F6D958
-CDBF9096CDB82A16C2190940124832C2F9A82323CB4CCB8DF8FB38F76014AEDD
-A860CEF99FC92B0C5AF52E8D2317CEF2FD8832AA54567AE028B8E299689179F5
-2D042911CB8EDE42AE253F25AAC58C808C5DC22FCE83501EF0596428FE7DAABE
-58E0DAF3BFFE57B1E81EFC15E54C1862EAC7F9E757B083348EAD536C3269D514
-FB30121FFFC9FB49FA34BABE4D63C64A05F66B6577D09717C6D465F9F7387F37
-DC0E5EA1600F8BAA0BAA4A0D17606FC9FDD85C4C94064FB85FAD7C99A8D64BE0
-8E1B60CC15FE61173F98BBF0549D6CC750D30F95CD461F9BFC6B199C96EEBCC7
-0D3BA58389D8405D3A2497AF2021B395B51D1C160CB4E60DA6E185052933BD21
-698FD0F76BA5BBD2C2B9DD330066469A92BB0076D6CA4F738D235614091D1121
-1B0B20DF408B01C8484935DD0BE5221F0A1F5A49FD2439C9A57AC3F0AA2844BD
-58ED88F0DAD9DE259596E551031BC28E38E7DB901FD79FF4683E82F7547B4610
-E457F1AA7510A234393FBB462F887DA421594183E2D1B8B68E2477B8D6BBA5A1
-DA11A740208DCFE8C3D7E9E92393BA0962F5AC5FF5A1010E8CA209E286375686
-05860B84D0D3211E16799ECEB1FDABBF21EE401088F7AFEDAFEC8E1D5DE8D532
-686D66818D42140461F37C1D83C5097FF1CD43A6F732E7660FB139890584D388
-9A4F830069D89D067D74E6BDA0A91BD3A461273B23782EA570EE1A644678F528
-A9C44345A0AB98788A64A89D2326FF2A2F646527531A5E2DC2118100B70F9BB5
-E48C3F550E64394F8F261778F5495F6F505EE7AF9A839FBBC551EB43F5B3982A
-9D863F516DC3F005AE00C012ECE801617567616C8F69D736CA6F4DE67F76942C
-6B3C5A16E4B4759F09FF8D6291E5B0ABB207BDD0478F6095E29568E9B4BC9CA7
-74EADFD4AC3819689ACBC25FEEB46439BF8ACB1FE3D7835B7A4C3197BB470A75
-821E9F1E4EE6A03676DF8D6FA88D8D1F29CE425BFA88EF3ED887CB56EA46A1BF
-3ECB7FB943A579EF060B64C9E900FDAE29F98608B1C4D01954AE9D4CE2449FC8
-FEDD0252AC95CB21DE18B767A8900045BF0AD9F1259012FFD58046D408D5FF8B
-56E5B8FC93C08B78547E1907BFD409BD10584AFA90410CB5077E0DC08C40DB44
-645F2062AA5AC95A0DBC58A5D18AE142C045547756B4500F770B3EBC70C72119
-AA5E3A50643409850F648AA38F20EBB5385658EB1B79482177F6EC6E807C1350
-6F2E201077988C8AC6B35A36D983C3E8783983D90FB4EC866CC34B1668A65FA2
-18E6E16413F14FD5523B2C93BB7AC4825257615AF1591A2A8E5EB95C672B9F6A
-2FC7DD3B3CEFDE8BA17A09BCF8194162D2249E4FFF69597B54BA86610A92A469
-81A39529A3CC720D953CCE466AA16B5D739915A8D68EB05495C3E83BD39AE625
-068A4A274E88054D1C1EE28ADABE453D6A62D2AE38E5D11E5006886C1FF86A8F
-7BE217F3DBA5004B23F345DE0A4687DF8A6ED77CB4FDCEA22F4B78A833489806
-E2C0009246757077E71AD7BD5821DB5F901C94F3E2B581178B5DB72E7DAB1E2D
-05CE8828B7C1E366768B9FF7D7266FCA4C0C407D3535E435AC9E09C20FD50A5F
-F86FDDEF95426B531EF220515101E1B5C28F2D8375A80B38FB1371D9CFC203C9
-7E035113435298E7F13B021936D5EDEC08801D746E8086DE824B19D759899F00
-EC3ACB6C2D94D9854F5C63851F0F6CB175019488B42A8B32C7F355A783B1A311
-9809305171C13600817075ED66DFE6E0AFE5CAA9C4B2FD6752A802EE5720C75D
-10D9ED4FB0A6A3B7E3B30FD619FCC6E4D585990196D20460B2212DA901D6D2E0
-37D95B8A164E6F48F92F06210228CA18714D95F07A31093382E5DBCC63FD1CF9
-A0FB922B1F53ED589DAAD82FE31EB4CA7337920ACDFC7ECB292FC943D64B4C91
-547B9FD13F218FA9765AF17613B4E6E0D92FF52C81182BF37F0ADA03A127383D
-CA6B29669CD277E6C2AF63D090C3C98EE22C53F1AACC392DE4603A82B6357E8F
-07A652418C13E400A3C50DBE5F5ADB3209A4181090E2314223BE637F40874FC3
-486B977631D05CB9C3440EED99AEFF52AF4D51E17E1EACB0DEE5FF59427D12D6
-BA4A9C05A0F851ED8ACDA56A86A322054084EF5A9CD69A4BB25CC715F63508C6
-489331DB805B7829132BAC356A1536FD6ECC5C4CBB256209C34E0D23CAE5053E
-23F6D3AB4095069C3CAC1B5CED50AB5FF625A022B6A57D0FFF5CF452F58265E4
-640EFE34D0E1E5A8BE5306311191742AE274BD6C4D0CBE99161BD3B277A1F7D1
-5768D1C80F162599CD946EC06323D7324AF3F4719180A441BD7C1EAEAEB64D88
-863D573A49F5B109959CB41BDAB81354665581E1F4BE4BDCD2820D44855014F9
-337D2CB99CB5121FF5B6D0531EC53DB41456D1AD77216BEBFD95A36EAE2DFA29
-C0AA7DF47A5824150445D5022E1AAA276D9D00167A333175B16701AA8C5A71C2
-E2FE6B094456F89C01AA64BD0B342EBA9D4A9F6458FEF0DC5A98FCE815986402
-5470C09B983C3FF119EA4565D7AA557055B62EBC14D20BAFF6F8328E9C05E3BE
-DE307950616A278174F682524A269BCDCF2259C3F3DF3E66F81BFDA17A20458F
-BE412BAEE9784BFCF5A91ACB4945F063FBE27260F879957D35DA59FBF5992EFE
-DD0ED3740DE5CF59E4A18ED0B202C26BB109EAFF9842741DD054036376C2BA24
-CAE66146E9728C291DA90614FCFC5331A460A902F8B50F8B400DFB49A0F20BBB
-FBB9F6E68BDBF31F58E656289FC611548F9C4BC02F1EE438B87CBC583ED872C0
-EBA4341155BFF53B224A7C197C69C52F0F18C838573937B505E9685AEEAD06AB
-A42A8DD91B96F67488CC9B609B8DCA8F99A2B139795F66F2916852D300B5338E
-FEE33BBADA4D02C1A57C2261C0F81CCD9188D7B37F9EE0F0B722B6F0BBB2F695
-683C5990056651864337503752884629E965018D948ED19870122A3AEA754B8C
-33EE5DACF17BF3232EEED081881CE8F50CD02497DA2A5C82257C8656D2B7EAD0
-E82A63A9353A5BD56100F434D5A92637C84BAD6527EF07FAAA4C2C6E7E2BE5E2
-7624B211C5E910EA3255E329644A1A3623227DE543B6154708C7E28AC903AB16
-2A121E2510892B051D62669BC8188C0D438538278520C75A38F1EEE82CB1AA56
-65B56DF3A51C9EC543A5E375D55372CEEBF951823AD1880195E077ED5C4C5050
-1A81AFA18069CACA5977604C0E84F234668C2E6D165037EBDBE36A3DEAC68887
-EF5F657C6515117B6CB4E0096A766AE856FA0B109339A75061BFC99F6F1230FC
-3074872E5EA7D93CCC3EA0A2AE6F114EEB578FC4E9DF74CF0FA5E90C4F5CBB0E
-1E775F2DADFE29553D14770386CCDFF6EC39E4B51A58F533DB5134E37DBF7DA6
-DCCF5E5DCF14B92146C72D3A8770A4B0509B0221A1CD806F22FB30B892976891
-CC5E5C11AF7CFFC237D1AE50095608EE584D6202F9ACCA370DB7A4B6D9AD5FCA
-9A650D4EAA9B3B7050374C3CB6274CCA80EDDB36B7A7CB776211758ABE97A8A7
-328E366E494026D142332957BD6B5F4E8E02F4E94F3EAC8D6D6EEA0002430C35
-6F17AFEF01531C7CEA582AE5F9638B401842B7E43CA0D6EBB2AB5AD28F7E4288
-4807D68DFF33948C06427019B514069EA8876657C34EA188C7BCE9F90B789947
-D2AC7BDB67AE6BE6BF2F2E493AC7F3D808B34E5D367FFF37C7F5DF24FA25E334
-C676AE154AFBBA026D405BA76914991B5C751BBFE7E7FB7AE6DC91DF41EF97AE
-9C4B5EC8664ACCE6CD2B602D440B75979F585611973B31CA9A8D022C2DA4AFBF
-BC0A9F40515BDFBF09D44086EE226841EE90733D9231E7979173D464B0FD2C05
-52CB437CFA0C265D9273EFA946F65CA38AD0BA6AC8FA73900CFB71FE6824E98E
-26D8E888662B33F0CF1FD2909499BAAE56CA998922501FB142457B1480221D96
-382899310DA463CAEDC8A6B44C5137DC6A9912652BBE9AAD5C535E5C13BC1EAE
-45654146ADEA066BA9DC12DD52E820EAE83DF4C66667E5B1FC05CA5B692FA13B
-126C657A398A869218488A9AE08B5A9306EE7CEF918E7D67A6CE22EA48534B6A
-7F23625C7E287D71EC3980D9F89AF0B29F2E6461A7C0874400AD0F2817BFE217
-8A2800131E4255E8743D55282B5B439E59E1A19B77E45FC030EE0CF2FC62DFFC
-8801C38C2EF38E819172D860F9D5898933FCCA29C0ADDBA72DC85E45D8190FAD
-04B7CF05CC534849E25270409C271AEAA4A93B00907D88C3F74C34EF20AEB90A
-10D6EF0C0D29229A0341595B6E17DA0D0A227D0A8CA14F7638DD23D016C4E9A2
-00A8E07B9849F21E4646ED07701F562AEEE85576FCB7C87D3819B318CD3A7F4F
-4A7F73834569F9FA80BD6BFB0F38615BB1DEDD9D2BDB7755D24805C9D1EACCA1
-6B723990353B7863909D6C1D6418BA0F144A9C089366331CAD6DD9B0FD411A4A
-0D28ADA58F69D2C3B0BBFB2A1F4D6B6C9B1646205CDF402CF4A72357DAD99FA5
-24702D3FBC0BF59EC79897AF7F6BE85666CA86637520B87DE875CE821C2C6D6B
-5C0DB8EF15230F7848E386A3348C2051083D99486533F0FA0C66C38A628BF6D4
-7249B16808764C3869C8A9290579D936B7BB34BDB73A0CA0E8BC6D46AA91BFF7
-F07839483BD052166EEAA29E539D520EFFB064C3774E9B48386328F464410B0F
-6F551CC3C3ECB8CC7AE371F405CE62F7921DFFC38B50C38DFAFE3591DE0E84D8
-7A0B895B2CEF4046B4EA651708AD81BD657431BB09848C778B8BB110B90CBF45
-1FD4CCA77CDF38DE2A919C915F38136196C7EBD5757185D2E0ED73333BA1119F
-C7E3145AA217D1673B451188798B63618DE43B37B946CFE053DBEB5E608EE038
-5151C099D6F55D26B7A74D3355C2C4E62BFD7EBBF8D904A4BBABDF4E34F4F2DB
-2E174746FF2A531BD24E266C9ACB64081940C0ADC3C9FFC5F3E79267D0596ECA
-29D2F9A701992F485D113D5AF9F52AF3E0329E2A2846CE5AD4F78CC28DECA22D
-26116819FECA8422E557A5F6A4F5431C5B7C982FCF1CB46B102227D1FDAE6685
-E1767E5535AD4252AB80A78DBF10BF52736D88BE397E006C63FB14F3B1A9B178
-E65F04114291F451ED91C8BEDCDC35F941DD8B6FADE1FDC0DC0E52E30B087412
-894B8EA885C12EAE88AE2DE400CCB5DB7A5BBFE569C3F6A2765C7D8C924A3303
-42148B1908A3BBED1E684A3C04DDF1004FE446BE7C685584F345EAEAE62296C8
-7C3A2311A008CDCB5D9090B3470380231FB3996E5F5AB87E69D580FB26780D60
-D134150C1F6B925ED74B72820D34D118BB77904617DBF21093D6094BCDB3A3FA
-75F260676C05C38C784C8A5D54376A8468AE1E43A6DD446A924CA89B45D1E77F
-562D1027CD81C6FA57F10FC83ABDEF4425263E91952D1B4EC9A5F81E159A9266
-0C3A5D1485525295A1A1E179F1534ABF5F6755D02886BBCF8831E8C7BD5ACE20
-29797018DA2D5F1DEDDCBA00D52D276FDCB0EBADBE0C04F33DB765E937CDE39D
-B59966BD0645EB7518687ABB07AF5945EF6A91B3ABEC6DB4CA22337427C9C75F
-FF90667487F5BD2E4E012C7C540F1048D3387930B2E0D27CBD670C0FBEB8EFFC
-B258E9E6AC5FE4DC16A22EF66177D796A6BCD303AC83DE3AF907703BBD87BFBB
-594FF2895801139276FB384651EC7649E9D66D2BEBF745C717A09617DB876470
-8E090D11B27A648C24605B228C35A4EE4DEA2D27578E7FCEEF4A6A343911C878
-02064D77770DB72CA6B55D5E24CFBA3C7208F2D72E7ADEAB56899AA90F23332F
-6B1646DA7DC1162644AAFB439CEE67E92EA2DEF4C8C560AF9EFC80A677E5FD02
-D674D764C07B384E9650E92B59A76DCAB1142257142E73AFD1DC6419FC7265E2
-83A52ED941B1DA36A6AC59991C40E27A48F738371A0665E6F54F12FA0EF0A240
-1BE92C980E11AE111375ABB0839F208805E945D69B1B7A5759DD9D10A7490A47
-11647FBDB7F09E1B091B37D2301A896BC90BE1E7C28A583018A752840FDCD3E2
-21214A8B920BA27CA37A76767CAA8D10F46BAC7D6CE00DE86194E72A4E0186EC
-35B996E135A24A312AD285D682A0E1F655583FBED8731E05DD2E7BB56C15D2C3
-0BE1811E0E26971EF11120A386B888949D16C8D371DECE752E085693CA5D121E
-7392FD8F7BD1A9E884EE2264266787DA730C7AA72A6F6A007AD627718C7DD4C9
-3A56A1FCBFF4C6DDD38D5D22BF69DDD21E00C94586D0C8E28951927DEDE1F224
-5710D6A4CDC27FC57EF3D0C66DFDBDD51BCFB3DE60B9B07E88D60C6E39BF04AC
-33F68AC2B518FE4FF8B09939E4831BF900CB7F38D1B3C4D2AEFA1FFB449AC0CE
-5AA1B24E09F5F2030959E4A13A636BB45AFAF057FA1D42FD3DC5CADFD750F045
-0EBD5D70C79911430C5CAE55065C1511942DAA2C42548E0A8E418BBE1FDDC636
-42C18FEDC12A79F1B73ED60E2A5A4E753A6436F95C52664E39EEB9F1290B843E
-8886BB6772A31EE986C38088687311462BC8A53A6442BB70BD5366728BEB7184
-260C6713B90CBDE76BCA55CB84A168BE45DB300C71CA5C28E0F94C5498F7DDB1
-D812800552332434F5D5605EE16CBC4D3D8CB16DA3E01AA3AFE87A5FF240D452
-7E9FED37A96848AD8E0EB856172FE3211420A6E3194C1B338D97B718F99478B8
-B1664C3AD7898757E86946E68730A5063B2F6A961D1C64E4A6D6A593ADB39389
-95DF4ECB11A7DE9FD70C5BE4B485BB655D1F8AA407AFAC574C437C1D506698DD
-92C17CC44B7D02BDD86200540C9E2EA910F3E295E028CA11240C2579B6370801
-B57FD623D4C027CCBA79C107E6E910C5DF4C21B59EB80C9B76E6D6C03015FD5E
-E434644F29C739E5A8D18B917ABB3D5C0B41881FB68AA7815CA64C55B25EF388
-D399145961A5920799E8470819CCF742977392AFA019626FF415A45815023125
-48590E3DC705D132A18A92EB2DB31CBAFF84DAF0F7A36E72D275449C3CF68E82
-234A75E358A2909B78FCDA7601139A75A79CB315090064379B736B05A5FE08E2
-77782845ACCC65152EA2A7F177F00DC1178D63210D53C3CD401C9C99479BBCC7
-A56D4225195343E36EC60C3D2FC9802E0F748C3A5D0978FE38EBC301CEAE0951
-C546DBD908AC474B940262B061F8F4D7B174470039EB7BE30AD02C1C3D600CF7
-EEEE7E385A133D3244ECA79A9B56CC35E3F58E5125D4139CED98CC00CC859A6D
-4ED845818B11C3CE8D0C7FA31A8C912B51D37DB31A5C916B31534A5707CDB3D8
-8F2A5027D312B5490B60BA8939F2BF89599A13496D0CA59A41889DF1836C1F47
-B791FAAD254509F51D0E50BF3B666A565C09154A80EE9BBB4C5963BD8CF7C4FF
-BBE3790BCB1C36047E9CFDD022C5D49B34A46290AF34AD77B278208A0C305ABC
-41EC281F20374C3E497BCC18C00BAA2D479A0442304C117FC5B3D2FC77BDDA24
-68B1DF2C1E7083B0A30C462ADE9B9C4134773EF6ED5693DC4E7A92AE4CC46E4D
-9D446C534FE0AF3F99991FFAE782123428CE3DE03C8EEE7466A196CBBA75A597
-690F9CA29D32045D440373AF992BB7997A831ED125E297837B144022A6F70530
-4612FA11EB1C5562CD666813ABDFB6FC662ECAEEED44CD43C40EDDE26F9F27B6
-700523DE3349A86E13262E4C55DBF7232B5DA6DFF69861E07BE6A5AF0C5F5A7E
-B35F54295BFF72AF442551753A0BE05FE26A04C67855F1F79BBD23C3DC20F09E
-448875E328AEB4B761946E240539EB8949197020B337E38CFDDE272D12FED5B8
-B84610DCB3675ADF54830AB7F4D5CB88DC9E1A0094B8C629A7592A04AD10BC8E
-553EC4AF5B88783D15BF3B52B7B40090A7860874543DC7538686292A6308C8D8
-B2B5FCC89500B3DE8FCF31623615BC4C3C0E5AA08EB8B88D91975C3064ABF700
-796A24B0689F09D49529BEA293AC6E115E75A8C49B82A0E185BBD0EA87C5AB12
-988D149D9D7AB5C4A20AFCCB0880FE80D080EC45A1B8817784E3854941D4FBF2
-73380745471EE9837B2EF0CDBE081A9FF98A42AEB54D57082D599A15F53A262C
-D8E11CD48D10DBDD99EFAD8FE38AFDDA0E1558A9E4123ABD7FCA44537D235BE1
-CCD6374584F17B047EF8356105E4F17EBAC0CE73428C5F18170558C31A6B8D8A
-EE51C3BD9CB5262B83D66CCEEDA7FDC8EDFF9984C05570CA0186154109121DF7
-BDC20E2906080D9B890700A06B6A609625F30A410821911C81CFE16068012033
-1BEE1B023045ADC0C7672C9FEEF79CBA5ABE95306616BD1922A4E68CBF15571E
-935F9466EE7AFD691D176CB768C0E2AF2B3E7765F59B0F2540BF7F7170B145B6
-793876429BA1C17509A65FE2C85DD6EA826F4E3DE909F8AD63FC8E9CA28986E8
-905D5325646FAE5D9AF72448785A951AA015916C5FA343D2414D2772335CEC07
-9FCF76CAF18AEDEDF264BDA8899DCB06C20C28EE8542EA46872732D863D65E9C
-6DFC6221C90A9FD9BFE833A1B9AFD1B333AE519F5A95EF395C99F788DB151F37
-F149C7C2E476330BB5557E09B9678B4675911281A19767878582CD3E36602608
-FF5177BBCE5AE601F3EB152987EDF604CD4928E2247C15A1F47E189B9C248DC0
-3FB6F0D1E16855AAC279AA3590EE80E5946E6BED4CB1F02856F14BB542E86BB1
-EE2408B9EEDC7EE2B8B0FCD1308273C87F72504CBFE816EC89466E78F9A6EA37
-26C1C3002887704AE92CC360F4108D3146D5AC3801DFC5ED05DE405587AF286E
-9157F9D40AAD08DA87D9EEB1A5B0141285C210DAB3AE7EF760B003B77C006284
-5AE8F84933609BCADA81DC47B943C31C8B22361A45F8EE632EDDB57641F58AC1
-ACD085AF64EE12975E498B3B922AEF89C59036FAFF7772C479DE6075FAFB2210
-D7795616225A4B75613BF589865FB0AEC66D287C5D82AA8B48C7F83574E4D4B5
-352A470ACC64AD03C62F013C0BCA45CE0B78FCC38B73B8A28BC991EFF5449EC7
-3966A35E53148443F512E3E4F7B56790AE29481D8AA4D8E321706D4110C9F0C7
-23CE214F1E145E1A55CDA8BC67E988F2D3432CF1B9A8287F890F2D4C1080D7ED
-1B930ABF96DCA16D2AE3FF5123AEB2CD51B48CB854F2282C52DC1A6AC78D5D82
-5BA7E5F5CFA810A0025DFDB334E74E02A90AA41775A26B12E0852724A7C779A8
-A55E17F006FEACCA8B7A6B2FAA7719455B92DC7728EFB608A32A3206387708BC
-802A09DE0DE78F6B12A36A4BBA709B16FD5D2699B96351CED92C9AE95112E5DF
-D25512251D965FB3DD925B3429430DBE475ED6D871AA61F1EC780DE6D0D0E0C0
-0205838E5FA5663D1CC13FFFA723EC4789DB2141A9E45422F6D9DFFBD5B34390
-C18817772A3C86D8028F656B09217E2807AB09309561F40C2730871C7441E40C
-309C44367F54538136B129AD100CB27C70E0D391B80181F9980128E4C25FEFDF
-229B48458F7826ABA333D06CE72874EEF09AAB3DF2C6525CD10257F50CC6F2C1
-FCD3865B5162234EE0EF5E52BA43D102B806773F6B6A89A052A871C9954F6F62
-A6D7D62959D94D102DEA0C0A85B048AEC157DEE3009F3B80497F0945201388CB
-21F55478472A8F037DBE28963C9EB787181EBEDD13A8276BCD829BF3C62B6E0F
-4C8DFC4534ABF21962BFD926D508FA85A5F6B186A294474A46697F74EDD76C76
-8184551680C1A50E0F5793628767D436D8B0204997387FF3423586E5FC113609
-1D437CBF17B8F5B8FEC2A52CBDA89495EAFDED96F26C5D9F6C7890F64A8C1AD9
-0A1F2162295C814BAED96085A8AD3B9532E323B2DB2C52165A4867C8A8AA2FA9
-1F5FBE6C6821BC99539C3CAF9BC10226EAF1951773DB1A1EC7EC83ADFE1AF835
-F560CABF62E7BF1A0E68A6EF495F9FEFC1466332C7CC85339693DD3EB5364E98
-DDEBBB00A2EBF926A50526D893AE38B62B875B1EF1FEE2B3E87E01F5E97C734F
-4A4E9097F441E4C819E8DFFD89278F51EF03A00A840846CED8D9E59EFD93D61C
-2375E5BF3F22C4C0B00724B10ACC9D9B94EF49D774C10D355E149536CDA29305
-CFC938DC976354F3BF7A3305F8EE3485AC7E779B83A92BC892354ECD15C6041B
-633886BF05E4C9868F1E0CE20655DD3AC63B80C0C0114EC949FD6A55F15969A0
-80504508FE299038B736F8205FF4C6AA24770881AFA8C5FFB385F76476F9406A
-6ADAE263C94158DAB91B64A0DBBC0AD305845D1CF9777BA4622BA59F5DAC31CF
-64D71AC7FAD218DE9548EB7C00996F162E308E8D0496BAC73921F6D19088DF5E
-3684D4CD02F12DFD87F6ABAA13DE4BCE2C64A4FDA8F9D8695AA2B4FE7AED2510
-D251F7413854B3355CB452F4029845F5E292C0B4E50C5E112E5A933438705844
-4A81E1043DE175562054FEF9D92B5DCEBF9F7EB5B7019BDC65E9617A7BCE3D3A
-8DC18CCC56657485ED065717B327174C59008DF94C123BD9AF8A7FE6ABC0D147
-105D0128379F7A3272D2856C88B28602D09400FA4EE0EB7F1AA0D4AB2C26C510
-2C4FDCA28F150D1F1D5660649533E1E6B0D6EA98791C98531B2C4B5BFDA832C5
-F592375FBCAB1D9B6808689D8615C152E66863EDEC4962722E45570038FA3AF5
-0ACAFC13618735E81F375EADBA653A86AD5044BD0F14ECD23BCF06008E522C39
-63B627A6D60F2F2823F0A72AA0AA269FF9202660E4F79D2E4688289C7670E553
-6E8985B539A753463CFDA12219B502714323741F3A0AE9D7FB51ACD312FF3538
-E0E0CEF015CC6C188F498884DFBDAB2DFFA1BC8BD732A65145E99FED1045DBA0
-C91CF9A53E4A5C1DB1C4C8235D80321C73F76DE2F82C80BED05798D7BDD9453D
-C1A61B0AED9984DFAFC130AF735026B7A455B0F549EB48F60B4829B3ED39BE55
-0C6BC67693FD84A588572A485305485E754E71F30A360881392C435A5599032F
-9BDB950F03CC4974290C58889E8413D32EBF54CEC76E07261AB64ACB8D1F9B66
-A72CFD757B453AFD53C43CB87A9676B0A95F60CFB22F365382F439E32F604BA5
-014FED486B57B927F5BCF3B97259C284C7D68A87A4269B24F6440C95B46BF8AC
-3580814D8511BD4CC3F965403D98969EE2C64B068127DA6F56F4AABEC1F231C0
-8221EDD2AFE29876A3CB64FDC80BE31555A313CAF76767C84605F1C5177E669C
-91F7C10360652851CE5999B30B234B355C7671FBC2ACEBE035891700A4B14A76
-F8AB9E9B5D7B93874739AE9E894BFA1AB0CF689A55B3980000D90199C8A04336
-D579C02EB1EBC37B48C7AA69231F125A5C70533A227880F1491209E8527DCC9A
-AECA2DB80A334D9D56721622205DF3F3B5C5B8380B8A2B6DA52F2B8BCAC1377E
-E54D4D12BED531B1A77E3DF48F07073DD5E2B0D0AB86062BE345CD570093D679
-2E7372C6313AC353C1C44C0B3EEE3F56CD519EFE407ACBC9B6418512662FEFE4
-4ED6948D34A282541333FF86D8FA8A22245A53CFD197B559E959FDDE027DC91F
-3DE344F4258D10CFD36AF35898CE83A1CE8EE387A2925F286A1AEDF311CC9AC5
-E3FD676DE98924D3D02843478879AEE2B52E59CFDF3F2818E9594D2D3B16243C
-97B62D70108B91FC76319DAA69B58817442627A73C7C6866F3DECF147EBA4022
-B19B94122C081EC1953C91A0DB2C8447268BA769ADA62EF540E2AE8A177DD572
-77D26175C55CE90347A1C238E648CA338867895149404451E4EA631429DEB62A
-C2ADA338686FB7D64C908400CA165B689AFBBC25AB8178D5653C091F8BE9E9BE
-46481D4436D2890802468539377FB38EE709377B0E71CF3F0D0600988F42695A
-481D3C73C8AB83A6BA9EB32D5C3D359E12EA325E56BCCD860B
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-%%BeginFont: csr10
-%!FontType1-1.0: csr10 1.1/12-Nov-94
-% CSfonts -- pfb ver.Apr.1998, generated from BaKoMa fonts. NO WARRANTY.
-% Accents are added using t1accent program, (c) Petr Olsak, 1998
-%%VMusage: 25429 25707
-% T1FMT-V2.0, Copyright (c) 1993,1994, Basil K. Malyshev. All rights reserved.
-12 dict begin
-/FontInfo 13 dict dup begin
-/version (1.1/12-Nov-94) readonly def
-/Notice (Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\012BaKoMa Fonts Collection, Level-B.) readonly def
-/FullName (csr10) readonly def
-/FamilyName (csr10) readonly def
-/Weight (Regular) readonly def
-/ItalicAngle 0 def
-/isFixedPitch false def
-/UnderlinePosition -133 def
-/UnderlineThickness 20 def
-/XHeight 431 def
-/Ascender 694 def
-/Descender -194 def
-/CapHeight 683 def
-end readonly def
-/FontName /csr10 def
-/Encoding 256 array
-0 1 255 {1 index exch /.notdef put} for
-dup 11 /ff put
-dup 12 /fi put
-dup 40 /parenleft put
-dup 41 /parenright put
-dup 44 /comma put
-dup 45 /hyphen put
-dup 46 /period put
-dup 49 /one put
-dup 50 /two put
-dup 51 /three put
-dup 52 /four put
-dup 53 /five put
-dup 54 /six put
-dup 57 /nine put
-dup 58 /colon put
-dup 65 /A put
-dup 68 /D put
-dup 69 /E put
-dup 71 /G put
-dup 73 /I put
-dup 76 /L put
-dup 78 /N put
-dup 80 /P put
-dup 83 /S put
-dup 85 /U put
-dup 86 /V put
-dup 88 /X put
-dup 97 /a put
-dup 98 /b put
-dup 99 /c put
-dup 100 /d put
-dup 101 /e put
-dup 102 /f put
-dup 103 /g put
-dup 104 /h put
-dup 105 /i put
-dup 106 /j put
-dup 107 /k put
-dup 108 /l put
-dup 109 /m put
-dup 110 /n put
-dup 111 /o put
-dup 112 /p put
-dup 113 /q put
-dup 114 /r put
-dup 115 /s put
-dup 116 /t put
-dup 117 /u put
-dup 118 /v put
-dup 120 /x put
-dup 121 /y put
-dup 122 /z put
-dup 123 /endash put
-dup 169 /Scaron put
-dup 181 /lcaron put
-dup 185 /scaron put
-dup 187 /tcaron put
-dup 190 /zcaron put
-dup 207 /Dcaron put
-dup 218 /Uacute put
-dup 225 /aacute put
-dup 228 /adieresis put
-dup 229 /lacute put
-dup 232 /ccaron put
-dup 233 /eacute put
-dup 237 /iacute put
-dup 239 /dcaron put
-dup 243 /oacute put
-dup 244 /ocircumflex put
-dup 250 /uacute put
-dup 253 /yacute put
-dup 254 /quotedblbase put
-dup 255 /csquotedblright put
-readonly def
-/PaintType 0 def
-/FontType 1 def
-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
-/FontBBox [-44 -250 1111 864] readonly def
-/StrokeWidth 0 def
-currentdict end
-currentfile eexec
-D9D66F633B846A989B9974B0179FC6CC445BC2C03103C68570A7B354A4A280AE
-6FBF7F98F75ADF5180CDD505CDC93F13EE312CB03AC7B00C9C4622C80D74023C
-C1962BD0CAF57F3C335DED6A6C36110E591128C8861CA07DCA77CF521BEAB94F
-BB761A39789AF6C405EB8B495E41C5915360664D422344DE89DA844EFDD13C45
-CB82B522B9E7256916FD366B61290914FC63045EA3C05BBD24545CC5F4451E74
-EDDDBE488ADB69505C96937B35E2D8E7DD2A21A13ACF068469E92BC111E5E809
-0E489E43C83DC29BDB053C4AF9440B668638D0EB64D2976E6F7D6472CE149020
-5249A42D7DBCA06030F48694F7CA0B38978998765D7E7BE1D365613011E79D8E
-DEB631764D47D1F9663A46A0702AE1CE700ABAC55A77DC4472405C469FCE7CD9
-FF240937B0C74279ABCB8583B4D1CEDC2856847F4CC2BB267318451B79C1AFE6
-6DBBE53C3CBE648C7E1554964DCF29B12753A8431E0E0793099E24E698395683
-346C2A1535DD6D0263200E9F1B76843F139EDDD475BEC3EB84BE3E1E664EC01B
-63B5EC60E6BC15EC7134E83F445BDF0C06D3AFA7EF773B48CD9E51AC628172E6
-D4D4D306767B31219D3E545A0819F4429C34E598F8A758719E02602982D87758
-5FD419D175B959787D3707D1467AB66BF8BEAF14AC38E07F6B90BAA760BB3807
-F83BA97C7C696849BFBE8EF51DBCE39508F288CFCC9A00D3534B62F8AB995AE0
-A2608EECBB5C156F4DED7195DEE9F66550737765DBAEC14039CDA155A14D9591
-B7AC0282147BC3DE8ED0DDB1280C7A23A51428C250F859584BF2DFDA68E82E09
-3E18B41374F224F3EAC407807CE5159AC61DBD6D308BA0FAF841AA47D482D8B0
-7B8524840E786C67FA7583E00445EC83AD41C7B1E472A1D50B243B4CE011C530
-3906853E6C1BE90D5EA39263010537E6C648EBA7A2471E162690233160C16585
-0765B12AA469C3384607C01312874ECED6F159354EAE356CF33F6E4750AF8261
-DE2D8CE36A47733FBBAE7EF2EF05BBC417EA2438E51FE64D79B5A8B72B33D6CD
-3899F761AC46D5DB2DBC85D61ADA5CE5567AC2FDAFEDE35069E38D96F784D79C
-2F08341CD43C8383249CF414967A307CA70CA44119F5D2FA8F9D85A40D5265A4
-CB432284702C5F6C8A311472442903F6FF36A794CCC6E244C61B93055D0EB49A
-520AD5DFDBA656EF2AC36E5F7FB910A1A7F3A7E86BE78297F2F856262200C7BC
-B07257C36767EFC44FA6248C34842722816CB49058B1142501F2377EC92B1974
-EC76639145C66141E61F75AE7CC6E8107B4AA9B7005DFA29B4D4473EE59B61E2
-FBED510F5E296AC9FCDD858C67E9C1DBB1168C67BDFC99016B1B34B3B0F2666E
-0FF4724DE3FA77DE5FEA14784C4237F82F11DF2BA370EF0354529BEA522D190C
-AE42F427E8E8FD3316FDE3591D08201E5AAC23865E36C7A35FACB7452D90179F
-5CCDBEFF01A02D952B50EC36A2CF9A0A30F5C36DB4BDB59AAF5A02040DE14123
-474B7CD72AD9B6051B2C83BCDBF4CF43E626CFA46495305810656C24D6187FC5
-1F29165A69077587677174A1528B05F585674DB38BE0A5C8B360F09FD897796D
-5C805A6ABBD010D86EE2AE24657174D4D6EEDDC9A7A4D050513FA40D26FF3B35
-DAE9AFD3749821AA86B44A4B073A67DFBAEB5C2E30198E883D00CCC22515D2FF
-ABC289CDE655DEC992D480DE31F16418D13CA057BA8E9B22728CBA7005E64180
-A33859BCBB8B8B3177B3F3EB1DC13E232F1B1FF6DC0482148C9F5EF254F540EA
-D89BBB09A4C3CAAD213F42F9D4CF57748F457C94DF8063A219E1C5DCF4C788F0
-30D506C4D789D6459510B9C7E3AB0CCEEE1063F75505EF96555466724D3FBD10
-BBBBBF32C1ACC7C13543A233DCEFA530A83E16FD42DE434703DDBE0921DBFCF3
-28FDF7BFEA972A8BA764F5BCE78063E6093434255E6C3BE4333BFBE1B325BF33
-ED8166B20E4E57B13B956E14CF9C88CB71E2498E45EEB0F144C46D2ED300DF05
-32DF4638AB8CF5C081E1AEDEA132362A53B712B4DDF140C56A2ABF05CE9EA0CC
-B76532F1857197D4D8DFB520BAC2D90B8839F11F5DD3BEE36B143FB9D80D79A6
-BBCA8F9AEFB675DCE7C0E5852C0FD399A0849EB56B488D0D67F228F93CF905AA
-69ABBDE20459D5E2C94E6710CEDFAAC1C15EF356997A12C2DACBFD9BA0526D38
-D2BB3BCED49F7CD15FC462DCC5BFD3D6F68FD45B96C23B33CEACDBF0C45788C6
-B6576591FF83A13DA0660589F7AB542C1FFFE3D307B43F4FD5D9751E1AFB6B6F
-5ABB927FC662DAFE37789B0ADA19CC6413723408E70AB67F1FC84286D52791E6
-12F7E3BD77CBE0A95400DA9BEAD85A2792554F2C5389CC2B8CBB3FD1E4F513E2
-0B47645196976250B5D680F1AD34324CF6F532130466ACC825DEFF64DD821B1A
-DEC09CB3A156687E7C3D32DCEC5A983CA2FFF2794B9EEBF6B8ED6C0189590C1B
-5C3ED7F6C71B3C920C03A2BE7353A5D46F3E5A19665A985CBEA89DFBF8EF0AD0
-3443DA81CC8CFF5186EC4B731DA3E37590C23912562503832AB1350298C532CB
-0BA75432F6EA6386DAE14864E4E83359656DFCFC6A975DB6FCA7EDC8E46D49EF
-02704D39F9308332B7A224A3969BA23AF2726A98F74CB8A1C788AD9C34F1AFBD
-8C3B8C71768FC23002F24643B61E70E92D7A820AA27D1934D9FB656BCDBEC6C1
-D7E826197A4A2DC64BA0685ADFDB96D4205C4B5191CB2B5469537EE8F4D4B4C2
-F0DEF0073B29F61008426B9E0E75A258AA90694C2BE86989B16DA3E01AA3AFE8
-67B546F5A94EAEA5BAE1FB7D5117FD838AA56D85A340F00826B205DE894516F3
-A0DFB5EDF0A00ACCC72F3436A1A30F58EE9298E33346F4F37AEC47212EE9FC99
-E0242D74F623FE862160F5ED6C4B26D22375C6308AE859F9C58F101DE58A76DB
-83EA7E3A54EA6BB8949CBD937D097BCBF264DE55D5F3BD4C2D4F2793796662C2
-C000A9F702CDED849D53114EACDD4AC7B0AF3BA0BDD01195488EB6C3471BCE7D
-7B2D88993F454DBD380993AF43F95C8048FCB199CDBE0B673D85A76A89B5C83E
-693D37248F1AD12D301E51DD4F42275BA825133E8EE29EC5E0616EFB870AAF76
-7C6EC45851799FCB44F5A7DD69BDDD8CFD1DFAAD1E2EF294D964237A9C1A307F
-3558137D87AA76F8F2AADBE5F814D44FA569A1E514B28BF8915A6938F5693984
-9D69175C949BE87AC2F8034B4173148F54168ACCD77DD3BFC3FC8F0D87CCD015
-9B51A0DBD22E87BDBDE1AE407B2DD30C9DF6BF92B0EEFFB9B9E020E782F137C5
-6CD55D8DDDACE55259898203D26142127CE59F5174B6E239376DE2081A801E7D
-1D8F4D705B4CF1ACE3AC96A8F7015E8A22277A8E2F963F311F336CAB1F95415B
-B03270B607E70F163583CC511B1AEB088DBA7AB389C5954C5958B10696469BFC
-1E76DE0F90622CD0151A15BE52D39BC642D55029B52F01B80F3EE244C9C53C3F
-7592A57E48586F51530B437AA43A190331F61365A3EA6B515B9C5BEDB30C9016
-E844A6DC01CD89586AB8D15D83CB302CAEA04E25B62EE5768FBF326CA8A2B0DC
-876E71B5BB4CA7288684C8B19094D1CB70D396F42D8D49213608FED657DABD22
-48BB600B34DFD978AB95782B7876E31DD639CFC09A29B226622D12E93BD6BAC8
-857525BEA6F072967808C0032A501D34B42230D915A6209240F58DFFCACE028E
-736D09FF9663FD014C90620695689D9FAAAB6333173089670193F85EA68F8A0B
-EDEB49D202379C510B1F6965C5656FAE1E236840FAEB87306C291F67AF589DB8
-B9A3B864441F9ABEDFB5E2FF38A9018C8C26BFFFCADCDBFA5CFA0CBBA02D50E3
-0DD7466DAC3C29629F5B9C7066967D61606F744D53C675DF1ED4573EAEE0532A
-A08D2686BCBC82455FF19C585697C7D39FD08E71B5C518051348ABE67611CF8A
-86E2FF7F6250425C036CDA20ECD0014D44E3CC946DF2D38F8D4BECDB3742463B
-1EB5E00F47FDF3770FCD6A8F143D2B1A015D514C22C55D5DDD82B1A52ADC89BA
-533448AB558D2C3F5A6B82BE896009DBD9F22F117EBEDAF848864FCF36BB9581
-D1BD608E0BB52B5AEDED8A888517B5FBB2CD8DE86DFFE2F96BC4338AB776413B
-7BC0403F5281A631CA1B1A6C64E5759744387D049975E6F94E86E175FFFAE8B6
-2A5298D0AF042667DEA120505B1DBE627748826E676727114D1890052E57C9E1
-110D8EBE9018BB33DE6107A9700E6B4C5CF62105675B2A23CB40EB9D1924A707
-209B4E469719F7F37F9ABB7FB89A418E75DAC9D457C537505DD69830615F857E
-2E8E08701B69FDE9C26B8C1D5A77E1BC65C0BE9B872C572464352FB4D7C9200B
-D160BD33327991718C3865F21E5668107ABE1FE888020E0D6AC9584348453352
-7100738D77DE5BE5DEE88CFDCB00C833B730A436FBC5D7B932DF41196111BC73
-DC7F839E1A34BD72D3278E257AB0BC71E284830CECAE28C129D1A70B2954A846
-407BDFDFCE7F7E548AD7D208DD88EA1558819F7875E3E23B527457E28C25E134
-9C2461C5362DB24B705FA00B5CA5417337785CDDFAED65BA193B9D55BC1EB29B
-17ACCABDD6204B126D5CF9F291FA29931EA55FEC69A9A79A87500875791EE36D
-3C5196A3C0D52572EF48C7CE18A2736280404D9E1FD6562FC97F2458D1511161
-E627A3D3E51A35DFF4619E96280787030B944F3E265DF324D8F12E907ABBAE28
-174BAEB1DAC1B7F7B898C4C408691C5ED405EDEDC5233A438B2165E86D4FE06C
-D6180D24C2162D74FA743CDB490D86807499DC6321A111A6F2AB13263BF1A22A
-12E331865DBEAED52BD1B51000AC133C7AD1592736A163D76FDB12F4E7699A5E
-2C1053B747F7B58AF0C4527837DBB865F60648002D18020B290EE4DFEA4D73AD
-18CDF7D6479CCE4313C69FEFCB2E5AC3017E420307C7DC26912032D2C30C9368
-E7CF998D4244062D85E2FE59A7B414D945402D36984919D5098A6070DF406CE9
-6F68DBE2B959A7ACEDF2A1F92BF725CE3A71848B32B9F4599EAA4BA0A796ED49
-8ADE5B0DA88E3D2E1E7B385972120E543DF0816833D12748EEF0CF388D8C41CA
-ECE2C65E1F8790FF18F61AC404159D90CF252A9F48BECFBC3566D1DBCAF2EEEB
-2E90B012B8D078449C4C47FE1BA9211863C4A1292428EC5BB2C45BF1C2272ACE
-E508A07FBDBECAAE35CFA84579525882FC928DA83E5968CC2198B70858ED9CA5
-09C09E3A975CD2D32720163CEEFA565DC53C8AAA97B937079039BC6C0E5CD7EB
-7D7E39CE93F4FDAFE37DD78E2C15811FF330B5E78E9125739AC1397F3524B65B
-99BEAF36F82E82D5753BCE45CCA46AAFFBAF896267898F80D596C6FA04257DDB
-C16D00626A9E7A8E9D1F73FFA7754F6681F80C17B20155BFA713460BC1A2ED83
-E728F4E8926E50E0A7FB2A49074348DB019FD8F0A5A285EA601462F1EC156EF6
-3592E84F08BBAB9E26F58B9897E0D9421889860AC6356EDF2B7A6EC8056D38AE
-B1CBBAAAE7C320CCADB9C89BDAAF5E837AA6D1333B777941CAB82327E71D96A0
-8E88C341D8F28EDA664FB6A497FB0D04529073A209CC8A1B372DDC604E8B204F
-C39BE591371AEBF5FC2BF2F98C50449E20ECC79417A6BE08599FADF54122E480
-66D925543904389039485DD94DB6AF85188FC254F3714D4FF61A9B44BBE8BF36
-6ADCBF0B2C72FB730B65172CCE433AE4A9039DA02BB3FE6A6C7646C4E2DDBA40
-AB008E3663A066476925825BA73DE3CB1C171E3FD9463B81DC3163608010545C
-7BC71432F17AC69F4E225FD19A963655BF676BAF0BF445499FB22D718E06E931
-5595733AB886CB555450E1D8FB5688ABB561F394B313ED1F58BFE51FEA6FE83A
-7E229857DB8DC88D0DDC442C49FB4299055E42AE4F15F51292E91EB56826D013
-EC3AAE90DBFE46414A726B4CC13AA8B3BBBE4B873C139C0D536776F75EAF51CA
-5FE4B49677D97126E03397C1836827ABFD9D98C94322B82D8ACEBA4445E9BAA2
-848A065A1560B16EEBF70844C3CF28B2C8A1C9FAD52B3A6F6D5F83A1F79C2C3F
-9C55F4D084BA8B89A58CD60B07760D1AD44A84EFA268CCA16BE8E77FBB70C1D9
-73E0AF44D42230CC54730844BE451A55187BEBEF420E11F547C05AFBCC5211D6
-5D6E1E9665521E05DFD24422D1C5C818541FA754C4EBA94F0ED136E44FE68DA2
-4CB091707F4031379D19CD5D955EB4923C97D7A80F7847E6B60F8942D93404E4
-0ED419D36838E6BCA782BC0328FD1158E8F39A41B187D27978F306F434F0EA02
-F48B7E065113B5DB42BF5E6AE5F7863738D7D3592C6C880AB13A31D5B87A2B10
-D707242CEA07F20E0F71580A7F63CFC2286818AD317BA59D47E3CD321570A99F
-AE289895309A7E5B7E1E05FDFC148C509F3BD2A9C35A0527C15B0417A35C959D
-5BA801C03846EB0416C59B28D48766631AB8FAB647094E795B6240CCDD04DFEF
-E238848B5970CC7BE66C9816B2D93420BD186C95D239A6F090B450F9F4E89368
-EF28F0691A4A9CCBEABA4EEDA5261FD53702220485BB3DDF572E07EA36FFFFD2
-30B7AEA9584C15BC4616A8FF30BDC971A9A7BB61AB918447AF07606AD10C5DF4
-DE1BE6A8AD5B0718AD90F7BBDA3DF6B13029A41A93DE6572B14B89B09B199D56
-5877D1B2E74FAB8216F3B5720825C34AAE5523DEB487019DBBB8450BD14159EA
-C4B89634E985FA1E3E174313B6BA3E6688CE2A86AD96DB5FA3E816CD11A32E4B
-199D9E48CF8687DFC19E9080EF09F73872A1D6E906BC4BB458F4F905D1B8667E
-429E286D10D994E2327451244E96952839D9F937CBA15B06163D648B18E45518
-F76F081F73EC03DCC069916D7584B26F0CE1F0ABE2B3576DC40B4C68DF81D798
-35B6326AA7FDD29F2B9AF4ACD153F102B37CA813D687821571790163422FECB8
-7ECDC97A4B1671642505DEA334666EC91F7138B04FF9443709BFC03B3C6A956E
-F25CE5635DE213F1DED0C6E5FE5D9F2FCE36D8C680300E03EBF5FF096C1F3A94
-00513AFA8D0330C6D282499ECEFF4967971034748E2FF34B6CFFCDB16A6BD8FC
-44E991F65428CE04A3691BC6312A069F1A937B92465DC86E0CBB08117FABA377
-DF85B7F83ABB937BCBDE037C1386638E34DC07D45D4E2A90DBF8A8A418EA9345
-8C7DE6CE6620E7BD173DC7FEE5973E4B42D8EA8BBBEC048174BC86B77E64716C
-AFF29B0154E9354ADF68BE019890356E69D5D7812FD59ECE7CBFC65CA8E77F1A
-D69C84673DFBB91C96786B70A6484767AD1CA5BAE4CE2D39DBA626EF2CF58E5A
-A08B9BAF117A1756698E4C24BCF71D266D4733F9BC961D7A7267E6703DC6446F
-B11C382759BC5771B50754CF6325FAED452F798871F059349CD33DBFE43D073A
-89A790AFED84163E3D7B15889ABFE2BFED5A9705E8D081454001C313F9A79A55
-158A102E8DD5A4971811F03D7A4C71EC7D97D74FB238DF6A8C9ACA0BF1911CE9
-5FF2912BD1555966CBBA6C433C7A6721277EE175E93F6526DCF8EC76144B3198
-7FCBE92DE5D4123836D6042B144A57B02CB140F6A20753C2D7ED2449EBF1BDB2
-28D077DD06EB6908CDDC1D9DC7EB8EAA3AF67CE6781E35D4BE1E89C22DDA1B48
-599754547362595D23B2A659F5540223B4ED28877CEDC9E463A80EEABC380BF5
-3F83F84D1B7B48D2F583D530A5DF646C6BBEC746F393164AB5D3C69A00214A59
-02EA5362FF07CE4F0BDC06F1252EF1AF16D16D57940CC1C3721A119E3580A4EB
-D8D8AE59625A078EA7F64CB7C88252B5779E7CF6954FF5305A6CC4BFFCBF2256
-DBBA7559FD51DB69868242DBBA909D472952EE59F59FD4B81DEA3F9C31D65CD9
-2E3D7674551C793F8BEE7418C5CC0B22BB516BCD037E7C06B3742B9ACCA739A1
-8B51AA1F260C93CE6F8780BB7630879C4EE216B5D185A59E6D42F77FED7F26E4
-43F14E90A752DF9D22A994C5B3B55544A0BBCAFE5BD5A812FD6297C1BFF1C258
-2BF06D93590B918ACBE661B6DE1A5A74C0489870D656000393CF2AA83D83BC96
-962231E52076EC7F4C5995D2D38FA840F4A87234DBB464E6E1761782CF9C1118
-76D5FC5E2C89D1A226DD2386FDA561F1816382C04F111014123DFD49608AF987
-2DD22EBE9C267D5F6D8DF516B9F4E2001F564A6DFFDF248F1FCA6F25D6241EF2
-CC57E0EC3D3A7293871BFB84D95E366AFE2131781F3906C0809855D25A56CD35
-D8346FE3D9E69C80455CDB72018A5D0BCA63BA569DA9EFEB69F8FC9715BAC136
-9A7B65429CF8DCC7B25C5326BFE47A42EBF15E5F48DE495E40CD240193506F7D
-A7EBAF871F3BC6174ED1DBF12A3EF450F834F9D3BDF1575DE0C5C5C7D68D7B73
-4BCF1396662ECF12C56D7EB7E516671CB4332CFE4D926B22EADE00BD78F26D37
-A477671E70BDD6D094217943BD58C1E5074143DA35FB83564348A65DCEC67B6F
-B084FF63B779DE5D7E56A42052C158F771B2CDCD69EA1F9CA8BA5EABC547A20B
-09E1BD76AC65FF3845569692AF62EA55A8999F1C1715AF207805CF9F6DF97A37
-4D17D0D8627D296241990D5C2F624EF53EB575BFFBB2E96103B00897415B4B0E
-DE3CD500CF667CB59425E0556F42C696730D0C76DB3AC4D91D596CA885719C0D
-CE895B16BA2A2B3CC11E9924CB17D81625A979F04442C4A00CD7900CECE8E4A9
-FE2009615B85FEB5630156FFE3397473984E7E748981E9327037CEF6DE119932
-B55ED057303CA48A59F270D7FB479D6FB45303091DECE506735B218EBC1CF14F
-9EC4BACE5778703533120CCBC42E57455E25DF2C931DB53ED9F3A53A5DF0BC6C
-277BDA971E09F57550B25F362A1B404F7F02825021F796E2C0ABFBD7F80E4D17
-E476FA5B10D85F125924203536CBA5C3D7871F44E83AE2B944268626EE7FC067
-5B6E56D0D068713D397D756FA9119B576EF0241E7EE1EFA9EAC62F3028AD8BE9
-5DB7865CDAFC7915FD4C34829BE0279EE3439AFB26FFA59DFF6D288F2E546690
-529161D76DCA67D3C03F55701FA773A8C30DFBC9F52F4E8C165D4DE48C8842AB
-B669AB69DA331903CE9B6C75B439495A5815334485B1ECE90BFF92A2DD48BDA5
-27A8309373293AA65D32F9426BB5D30364F3893346DBA26F6DAEBE8F5F04E4EA
-437C3CE25B0DB6855D08CBDC7E0C5668F1D6ACAE46531B92C7DB47CF69BF1112
-334F52032D4FD716E3581D309150CBFB9C8D6151254554A02DCACDD23CD9701E
-01841DF6D99BAA8F89D5B01C0A1CBD8A3B806185B0699FF8106E793C479166AF
-069356EC9D461AED4B8E6B445F282BCDFEA868A0671052DAEF6C839F74542470
-05678774EC90E0ECA5A3F64B7B856CAE487C26CB4395E510F2F0FEE7A58691BE
-A93285B21803FD1ED0516BF73A0AEFEA574E41FC72E293CDD4E91AC9E52DC1A3
-19DE629A1EAA3E2FEED5F89094F7A6EE5464496ED05618960B59A365CEBFCF0B
-325B51B43E6520AB43279F13E5B47134D97ABEBD82E734B008E3AD33EE4EEF18
-F91CD50DADE7A68F47873DD4B79FA9C2AFDEC3300DD8DB87C951A636F18A1052
-5BD277DF165E464460BEBCC7108E2CC9A503E76ABDA24C6A4981BD1B5EB493D7
-1A7E7E9D596095B6B6C22690A0E82F9EAA96F176E2E189CCCE4810D1CAD04652
-9CD05D5B7094852B90E94E9193D1045E7FD4059A0382AA6F3A68DB545A2B7E5D
-0310BED4244217F340CB9AC13DFF7330904746BE85958AEE2732E9C3B61925B5
-BEBB29BD8C0C1EE07A4EBE3486EE9B4D2B1052E368DBECBF71A960ABAC31E7FC
-99C171D55C46BF490C16573D2742BE7589A579D37CF938F9964D50DF54E9D2B3
-BD17A08AACF167C0B3E810CA115B4F6EA13A959E202DDA26A9825720153F42D4
-B2570B453EC57BAA64A9929383DEDEC3E35A2B3DA837A2B191F95705D1D0BE22
-5001F06A93141FFD90871FEDF481DA1742947243CA152034F716E9D223B25F16
-9BDC695E084BC1497C8EFC7811323BE99486EA1C341001A47F96CE521FA3C95E
-3513975D211DC3D985249ED81FC88226BEC3408B70E0085F9BDB3110AD9A8649
-D42EBE7C07727C2FCAE4C075DA6E5DE41FF7BC571ACE37DD587E736D6B211FAD
-3EF0ADDD425C4384D3081A1D803EBDCEE62EFE2329A19C702A7A52C2D3A55A87
-93963A0A5A6C3FC2D17A24EF41B0B106DE3B51499E88E46CB59C39F265BCB1F6
-3785B1394EADE83715A040162957AB41788BCCD990484CF14ECF85A62EA6D6C0
-DC30CA753BF8290B6BF5668D6B3D38D4B0A2B490FA5A6D12020FF6EBE50AE815
-51ECE7DD40D82C1DE63C09FA0703B872613431C198303546F87A1752CA50AE2A
-3AD1DB4E5B95CE5939E09DA6D1079008A273E42F9C92AF64DF4D361CE7C297B3
-03EC811065FD3893E8E4A8F991F0C5FC699847D0C81CD34FD059E72F056C522D
-770C4D591B4139F7FD2D8D2B06FC2DF233239382124A72B3605B221DEE67E51D
-5ECEB932D027C388747D7768A6011D53BF1E48376B33B94841E301E821E12771
-9D74F539FB83C5CA508A4DE101B369163919047A3C7200F74E61EE3AC309ECE6
-35DF24D6FB9923217BF2DA47508903CBAD039500A74BF8919F1DA10BD14F37D6
-8ED96790EB547B67627666C307852F48C9C409ECBBEC1B1DCD80A64BBE25307D
-1E453700303F5096ADF3C1AE83117A7A648F16782DA9251DAB5333DED0987B25
-C31FDD9A67106D6B27BEBDA09F31E348410693B4C692F16C9E3201A15CC63636
-AEA5AB14A8AEFC118C97760A6A43ED87B38B28871FAABB4D7DA11F32FB25EBCA
-10EF57C8FA807DB3CFBF7014DEED2C8ABF6423B383E80D60AAF9B78007298562
-2E2ECDB2CF5BFE3CB96C16626739C0D9EBA4AFF02DCCF2C2C58B16681E130CBE
-CCA230AE2C06F1BBA2F0A6DEC7FE5441593E15F76220ACD54533D77719E40952
-391E8D21C6F4BB4B37CE6AA3BE05C86F7C3D2E7FCA566304DC79FCD9481E5BE6
-83376E04115B52F43065993B716AB8C58197BD0E79372F1C709DEB48C2A615E8
-4201C481DAA12FC33E47FCE85CEED9DA5BED08879E7806E771F40CD9AC12662B
-B23F86E13F8C33810BF94BBBF251465C93127FE60148E637C82757CF4C4DE200
-6EEA6AF78E4E2AA934B3B1FDBCE185D511BF9DAFC93DF6D3C6B446B63EF630B6
-23BE65F11C018AEB98D6BD89C18CA5E197E546BB15DB82F0B1AD81126E768FFF
-1982BE285B7822DD1675C3C5E8455F74D54219654F5B39026A94AEE60C0E1D6A
-853A6D4B555FF13DC63F243CF818E771EBC78092A507728E39A9406AD123DDE6
-B2DC4307BC12C05E49E22D03BE60D375F5FA8C134C2852E287A08838B3843667
-DF3327361E49F1BFC9C60F99D266C864BD5AC7D433B2AB5AE3EB71171168A006
-FDEC465A57840942DAECA4AA90E559D639DA434AB01FDCC7AC7C55BB43724B99
-F2F4391DD3E8E900A2163EFC4BB8C35BC8DF0AB0E70D268CC58B70139E109A12
-7546BE35BCF0E2A51A65981D83145101CD7144BA158BF0B905D3720AA3A7B0DD
-785AA48D34E645A6466D86716AB76E708C233E68E06FD06D0E599875F3163281
-5085CCFC30692D1AAE31AE1BFDBBBBD11094DFF0DCB8B0E74220A954706D946D
-2355C4ECAFF1CE437D705C2D1446709BED5C06DDA5B537E15C190A2E7F21EBF9
-B99A98541E2959AE80F361526993A8FC7C6AF59E15CEE620FF16FA5D805A5CAE
-7EA1679DF550C0212515BE4F3A372BD3B3FFB6040F2524B824865606C0BF386D
-EB1107A15FBB9EE7853E517F06F8F8596FB5AF6BB94D8FD45771A426E08B6719
-5DE6ACF4C682FF6FD744B4E8FD0BE417BEB79028471E783334020327E4BD3D37
-1A2DA8D0FC688A1FFDC786F6052C8F925A8AF83130A35783AA018B580F4C9CD8
-5963467F7DBB30717A98A2FD744FBB26EA1556117A27D6E834D2EB0C2E13FB1D
-4372E9A3A95C2C8FD0F4D39E7FD9ACD6A38397D2EE4D505603652BE0B6D1D353
-E96CC49C0BD7ECA5CAADE2D522EA03250E807A3AED1EC6BF8CB82253A88EA733
-118E0FF10C19F78643118B81915764E22AFE9AE43F0D5003A99E5F0FA2BF4E0D
-DC23AC76B591F0A88E70979AFAF5ED180359B993234BC62BE0F61826597C4721
-D6375E21CF20AA5B0DC48B3B22A9EB5D0D09D3E4B54D3AC096AC3509E5A8DA60
-2A5A5B753A38F2AF0489B47375DC8897B06F5CD6163F37D0A1B9F894EB7397AD
-751F9A8677B0682D95BE4CC20A0FA0187C565DBFE2F295CA0818548BD6C434FD
-7F1718089CE574845F36CEB5791956E07DEB5D721231A9AFFEFC39DC18522EEC
-7237A9DA851A36432F578E03DD0911F90F85B0F3EA0D2B30621CC8E0B775991C
-2E6947A6B7783681864EE73C609F8DA0CC0F57E431B09E5B4BDA4465CEA86A4B
-9DD2A849FD621AE04240D719E54A07AEB2C53161DC3361460BEE4BD617AF9569
-7AFF56F5D87F72C52667252ECF93FDD2E1BBE075B364C28CD524BE083DB0434D
-D9C0673FADB2D4C62CAA5EDE3EDF1355B5A9EF384A9D9A090CFDA9A2F0A6717E
-CDB21A6F4D0B822E7F69E4DC23C28CC5FE083A1FD9294797AFB8D79DB9B56DCC
-F93BB7634BADD83EA29CE1AECA33B9619F47ADBE17CEF45F7DE702A3745AD232
-EDE706FEB7E2AFF7B1E6ED27FD3C043502B31C1EE703C54FB59B0BD0C7FBC0FA
-0B50B97A855649818C46756A764489E232C53D68BDDD197648288E484C3CEDAF
-72B2F1F91BCABFAC85DF4EA99E298D386975830F9AC1E01C2D828EE7051D5D29
-7A657213983073189E270933394A4C83B0290080804CD92A1A59AD4CD552FA02
-1BCC5C94226C9CA840ED4EE5FF449E71BD7A87C0EE8AA7F38749169BF787F43B
-B096BE4D0F25DD85F56DB4D45A16C05FDDBAB9C57A90FEAA7BA84337C589E941
-513AE4B76808F55FE2DE5748C333E497F26BF03CFA53DB0BA9541C93C0495B07
-F37DF6F494B6DC33680DCD036A1474E194F89C15BA2544D1DBF9300E2AF29721
-1C81D342FBB437E06661BDF26719E80F7A4D4B2171FCDCC8886F5BF0D8872D7D
-6CAF3C3E7536C47D74C96488235DFA6A71D40C8A52F0C687292D81A3EF22DE14
-AB6DDA63D7BF778EE1513F04D718544BAF29C652C78F42003E203A0C2A6C699C
-26F05DC0D862834E1B7973DFA37E900B1D8C02D2FAA466B55DB3AE15BFC242FD
-A8E91798051A69167C46447532F2C19E0B72CA676886C358D02084C59E900276
-3FB571207517301B829E4B8892AE9A1158037CB490FFC2A9E6D4A4BDFADF39CD
-A00965E73B86437ABE1B40BB3E57BF1CCDBBA674DD7A063277573A30DF184149
-94F616E3628CE274AD48C4BF0B3247121B3E6554CC25C6712407D54E4B1BEAFC
-0CEE4C2A0CCA73A2B95EEBEA627D98895AC198172931395C08846B5E27600FC2
-02139782D4363FB9C6F644C52E937DA41035C4545FCBCA1C44AEA6B389359F90
-6AFC1FF5D6B2DF418FC2FF5FE25FC51602B51B1A81B70B98F62A5C6777018824
-6D3216FA561119D8AA6BAB615F5A61F612FECC52590E7FB9D3663A881D47FEA3
-DAF2A103DF947BE55D89053CE5D371A69F9235617E0E751659F744225EC5EF8B
-2071FF985149DBF89A5ADDDAA8B4754F61279D966F14CCA82A67021D143316E8
-5D3765164DA95970F90CD8946B2F8665ED634E1FAADD71FCB980B36F5DA82317
-2809CFC5FDB477C5B8719194E3FDF85C754D519CE08EC517B0AF9F582831F479
-EF1FE865C65BDCB76378CF71D9964B7A4431D77C4681D5468D321C159433D0E6
-8FE9C3E459A1A42F26BE104201C6D4856595FB2F13C52F1FDB1AF5A5E46F13EB
-4B082425B5467127CC680658B7BE1391D8A41D2865DF4BBE7F39A41F08F7BB9A
-91F4A111F4D999C4E7848CEA93DC55037170A78EA15426B2FD210D683917F1AF
-63AD61B4FDF5D75B3AC9F25326BFD74CCBBAB667875F9F30FB2A3E24FF35FC26
-2B4365EE847153E7D5ADB51680A9EE5DBA9520E17F4EC6A6D6E22142CBC8E19E
-F0DF0EDF0AD5BB10692F58141AE0DD199CDB8058C85DFE80F72E47BFDF43185D
-C5AFFB77002F568E92B2604C4AD78DAA2AAF0FA395AAA138860D01D05D077DE3
-E37214109954286A218B6F636FEF3FCC5EA03B7C19C051F46DF5B5F345F5F344
-127D768A6E62B5014062337BB4A27B89B0F96EF1B7C90E72DB42AE784B647A05
-5439DC218CA4A60D90E8EE1CDF7538D962768D434CE9B1002931425A2EA15842
-2D99933A4242E7712833819AF98B10FC392F5101594FF94CFC8FD138A03772BC
-CFA4C0723A614E679701B5322691FD62E577CAB7E42B4B94E41DC0BD0BE5871F
-320D101D16B8FA56937B61BE183D113A9A3BFA8B439A73575330DBEF9B696517
-27B6FEC34B1A26C130729D175A2ECD8F490AEC82A0CB767E458C409222607431
-A95E0C86FE70C8EDFE443742C3B2A4B5859A2B7AB9659BA608A60DAB9D98E40B
-BEEEACF01CE236EA578B3FC5172E9379DDD744662E663250A0367363DC51CC42
-CEE635B183CF8E0EBA4CFB8873EDCD81CA6F4F35CB044A537DDB3D67BBF682D4
-4E70AB3EE4E8AA6760C9150E788933944BE9CD43FC7D0DE054B460ADA0DC197E
-303A7EAB17190BC91F1B3121E632C32EFFAB189D9F9ED4AEB6E0B73F5CBAB5AA
-8ACEF78486ABA8ECBAA81FC1D92A52738FBBF432718C9527145B227CB1AE681D
-04E7DFC79FFD36D138A49DAA8AEA6E8604BEC3E524CDB4F82F6E9904614E38F7
-892BF46301661CD162B5DB0701E4FD274C81E5174C57BC073D0768F003DB008B
-E98CE28AC2B3E650673DF6B6DF863ECA649D5B296F2F2C06A68F6059BDB0E285
-BBFEB2D301C89C04B995A65E0D21A1C1BDC712A94C613AD662E723468D0F2B8A
-88825606CE45C06DAF4CF57BA84BD8F8DEA9F4287EB9B782F1CDD9D7EECF5EDC
-635314BDEB9E562CC65D625AA81D00FA649BEEE01523A2C46D8BC09B71EA3B8A
-9E3E555BF1E07567078FB7F243BA068DF51FC2378E86F07A9E29DD38DC8B20BD
-218FCB3883FCA2BF5F8E7EB70F7866FAB5BC9394E8FA55EC3543A2FE67C22ED0
-3C4764189B97DB5F7F7667B255ED8CDB7018BEF24DA2A32116AA4AAD5E14647E
-18918243CB662330BDC5B2F4B7FCE449192D27254E0AC1E4358545A9207A133B
-E498FEFFA504ED7079989E2C4FD4A01623AA212820DB4F78EF9B80A9E1DD625B
-9402DB67CA0B2D18850538E513172FA398A418A6F2D11F7129693FCBC765DFF9
-B5930707E4B15F2BB476B23F6A457B8A61C2541709F4E57B8B14C59A76F8F4AA
-DC12834569A260F8DF688C3C19595218EF9F6E474023CE28A0BC2DF85E635660
-6DC5642726AA5F977EEF4D945FBB64815A79E4FBB5B201D0CBE8384248351999
-217420FDFD83AEE32E43F14ACBFDABBF1AECB00533DBA3D85072403F80571D0A
-B6715CDA3F5672DEB60DACE48669D5B4B0BAF50B01A32B344CE3950D217F4EDA
-821887CF9CF38717F497E3037AE59C665C77AC2AAEDB934098B78C8003AC2567
-2B1734796B0A41D6D795262C3FA664535FA150C21FD241C7E4EBF507978A0B44
-4576BD81E79AD01E4DCF78FC0E58708D6D1838C7A699AD9E990DFB6067925E33
-832B537FAD0E84A9EA7F79141685D6254416AA369E9379CEE9C5578B4D558683
-E0A2317CE41E73E8933249D531998F63588127A36816B84BD96CEA56D7AD2AD0
-F1C674B8EB17BE298CFA1C961B442A46BA8485DD4E3BC2AB1C99FC1063CDBDDD
-AFC2094B20EB5A774F0A73234B5DD2AD8E54305EDBC6C2F9689C22E2861059FE
-492E0B31F02FC8D05429332A2F6107FB20521C35916C72B14FD6BC320EC5E868
-2E3987FB1C885C38DD75C82789693317BC00EF4872F438FBC18BB6CC571D9A41
-9EA1ABE41CE832746926217121AE4F0E63E734BDBCD537C114D65FC4BE6AEDE0
-4FB1D26070EC3C10C27E5B31F05B19055F850091A4582EEDDA3842B619B9DBA0
-A58726F3A3DE4491D49CA49610AFCC9CB09412A1CCF53A99BB9496005FE9C496
-E1D5A085C4FAFC8299FCBFFC471DF46CA8741E4F53E9B24EBFBBA41C72A49820
-5385B8A16EA34163641ED8568C42E3D3916CAA40046899049124A44E933EC80C
-276E998B5CE81DE827CC902DF319FBC56F44B13D589737AF03BF1930E345F173
-9EF71EB5BA4DA28E34A661681F0F2B7A9088252D3D5509F7C2B1AAADA137F8F1
-5AC6C8B5ECFA3ECD6FBA5756D99EB5AAC13C6C38C7140DD51C1D3DEE1B0A7CBB
-46F9E73CC57B533D88A22847BE7C3BB7717543A4A1B96F7887CA400AF5C19CF7
-50C121CFF3507663ADA376E804FC477DA156BB96A519DE066A0EFBF233621D78
-FA52E7B9E3CF963F9433FDB31F925195D803533CD51ADFD4E354F380C064BC27
-8514A32D87B663A1E0A478ECF2DD3F415A8552E7F634327787473915EAB5F1E2
-BBDBF60F60AE733B742442A79DFC61598BCE4D54EB1AAC86ABF7D5DE012C5F5A
-D3A4B40CBB61259E7A0F7FF063D8E1D6593B46105B948B68C94D07EF26A17385
-DAF432918846645D3BC90898F07A50CCBC1E75AB103ABBF461D4ECF3C7C2A7FC
-3B8C2F401134AAC2630EDC580B8086E67747C517BD0F5C76386D18A52E9F85A3
-1C894AB0E05FE097418C8711D77634C76F8BAC3425DB3456CF5A59645D14E48C
-E1CDB1E1410B2B2E28E10F4BBF71AFAD3470C78E14BC2ED1D47178CA9E4F03D8
-7EFAF2417669ACDDBB6C51AE64F5CE755C89392E3293D9E96CDC08F9AB41CD06
-E983067118FE93E786C985B5D5F376AD6DFEAE835CB6C7B6E730C4EB92432C7E
-57EE24C8BBF064A15FADBB4D8BBE10F14628F7CEB4D466942D6B856BF639DD0D
-792E2D86797BE01ECAAF6EAE9727B818F4B013B7C54F5D4A81A4BD6174E5C522
-05FE90E3DD8ECAFBC5E24657C42A1CA7CF9781A32D5BEDC8ADEC8881865A778B
-795E212869B358A34F160AFF29C107F97F063C21B955F0154D06E827D57178CF
-6DC93EFBCBAB2E4472FBBBFED0BE3182E926DA981679BC87858DD515C08050F2
-4C6DE6E39C6674A5681744B2509544B30C0CF248EDB780C859E8F5328B46FD15
-DD8D3C7CAC2FFD0A34946DC70A3ECC3D7FEA8F092AA1CAED372FF1131081F782
-15DA7CAF3F2C15ABF66BB0C6D19714B1705929175C729360969FEA4CA76A1B01
-D55704A50120D54771DB1D51B7851BC504E9B6A1F9E9FFF3130F322DACA8E771
-DCECEC44237DBA9BAC1C0B1C81AB8B784A3744858E2C779E20951E31058132B4
-ECF62FE42B7618695C535076526ED0F96CC0DDBDFA181E81528ACE841E99E217
-37686B4C31D34A24E57236A20E243199AAF847E266B3497047D1D3E94989B0AA
-DE3589FF0AE4253523BE66AA1F81746B9D3AEDC4EC2C50CF409BB80CC7054957
-766AEBD32E697C14A734DFFFC8503E397564A9EC2A6A0280600584441A474D00
-A12C88E9BC60A0CCB9E0C06778F308B1D56B1DEF377887CE1A53E53B8AF0B877
-B5CD9E466B0A62469A7A8D6E2395F885B8A882CD684A64C6FAC9A5A05A707B3E
-EB3941CC153BB625DEF2239B76F86E06ED48D2A39BAF4CD1B1623883AD423720
-6D30BC5C7E4BC1F3C8CB283F005CB403A7922D65F90A8BD6AB9BF0AF90551CFF
-8C94947CBCD11962819F1E6741551075A429CF35959772DEE452F0726501163E
-DA22581ECEE4731F49085FB1222FD66318D9C05C1C3FD93E15B784D3DA96681A
-FB56CB33BD7B96B18909CF1821C395DD309E3B46F0FB7293A61F327C2B4962F2
-8BE38910F19687B5DD6ACDBC81F8A32104D37CC932F4B4D4FC15A01CBFA98B3A
-0D108008C002B7BDBC68E8FE79C07C7EC817CF610197D694A2E986AF0506A76E
-3EC3D8C066932899081757DBFF2C09BFD4B5CD5F24C53B6238B35ABA2C07B17C
-08B2A806681DFF59EB32FC9958
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-0000000000000000000000000000000000000000000000000000000000000000
-cleartomark
-%%EndFont
-TeXDict begin 39139632 55387786 1000 600 600 (sk-refcard.dvi)
-@start /Fa 197[23 58[{}1 83.022 /CMMI10 rf /Fb 242[66
-13[{}1 58.1154 /CMSY7 rf /Fc 134[35 1[47 35 37 26 26
-26 1[37 33 37 55 19 35 1[19 37 33 21 30 37 30 37 33 11[49
-1[37 2[45 1[49 60 3[24 1[51 43 45 1[47 46 49 9[33 33
-33 1[33 33 33 33 1[19 22 19 44[{}44 58.1154 /csr7 rf
-/Fd 133[34 40 3[45 28 34 35 1[42 42 47 68 21 38 1[25
-1[38 1[38 42 38 38 42 50[25 30 45[{}21 83.022 /csti10
-rf /Fe 2[50 2[53 10[53 1[27 3[44 42 3[46 2[46 34[42 2[37
-1[38 62[42 50 2[50 53 37 38 39 1[53 48 53 80 27 50 29
-27 53 1[29 44 53 42 53 46 85[56 11[{}34 83.022 /csbx10
-rf /Ff 130[44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44
-44 44 44 3[44 2[44 44 44 1[44 2[44 44 4[44 44 44 44 44
-44 44 44 44 44 1[44 1[44 4[44 44 44 44 44 44 44 44 44
-44 44 44 44 44 44 1[44 44 44 44 44 33[{}74 83.022 /cstt10
-rf /Fg 2[73 2[76 5[69 6[38 3[63 61 2[38 3[67 34[61 4[54
-3[38 58[61 73 2[73 76 53 54 57 1[76 69 76 115 38 73 1[38
-76 69 42 63 76 61 76 67 6[84 3[104 106 96 76 103 1[94
-103 1[131 83 108 71 52 2[87 90 2[98 54[80 11[{}50 119.552
-/csbx10 rf /Fh 42 42 44 2[46 5[42 42 3[46 1[23 3[37 37
-2[23 42 2[42 6[62 10[63 16[37 2[32 1[33 3[23 11[46 45[42
-37 44 44 1[44 46 32 33 33 44 46 42 46 69 23 44 25 23
-46 42 25 37 46 37 46 42 8[62 1[62 62 1[46 2[57 1[62 1[52
-2[30 1[65 1[57 63 2[62 6[23 42 2[42 42 42 42 42 42 2[23
-28 23 2[32 32 27[46 48 11[{}73 83.022 /csr10 rf /Fi 23[73
-6[80 101[82 6[64 65 68 3[92 137 1[87 4[50 76 1[73 1[80
-11[127 2[124 3[129 6[130 1[108 69[{}18 143.462 /csbx10
-rf end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: A4
- end
-%%EndSetup
-%%Page: 1 1
-TeXDict begin 1 0 bop 33 -320 a Fi(GNU)55 b(Emacs)h({)g
-(Referen\350n\341)e(k)-5 b(arta)932 -185 y Fh(\(pre)28
-b(v)n(erziu)e(21\))0 56 y Fg(Spustenie)48 b(Emacsu)0
-252 y Fh(Pre)27 b(spustenie)g(GNU)i(Emacsu)d(21)h(nap\355\271te)g(jeho)
-h(meno:)f Ff(emacs)0 385 y Fh(Ak)n(o)g(na\350\355ta\273)g(a)g(edito)n
-(v)n(a\273)g(s\372b)r(ory)g(sa)g(dozviete)g(ni\276\271ie)g(v)h(o)r
-(ddiele)f(S\372b)r(ory)-7 b(.)0 614 y Fg(Uk)l(on\350enie)46
-b(Emacsu)0 810 y Fh(p)r(ozasta)n(v)n(enie)26 b(\(zmen\271enie)i(do)f
-(ik)n(on)n(y)f(v)i(X11\))304 b Ff(C-z)0 909 y Fh(de\014nit\355vn)n(y)28
-b(o)r(dc)n(ho)r(d)f(z)h(Emacsu)750 b Ff(C-x)42 b(C-c)0
-1138 y Fg(S\372b)t(ory)0 1334 y Fe(na\350\355ta\273)29
-b Fh(s\372b)r(or)e(do)g(Emacsu)855 b Ff(C-x)42 b(C-f)0
-1434 y Fe(ulo\276i\273)27 b Fh(s\372b)r(or)g(sp\344\273)g(na)h(disk)868
-b Ff(C-x)42 b(C-s)0 1534 y Fh(ulo\276i\273)28 b Fe(v\271etky)g
-Fh(s\372b)r(ory)1026 b Ff(C-x)42 b(s)0 1633 y Fe(vlo\276i\273)27
-b Fh(obsah)g(in\351ho)g(s\372b)r(oru)h(do)f(bu\013eru)438
-b Ff(C-x)42 b(i)0 1733 y Fh(zameni\273)28 b(ten)n(to)f(s\372b)r(or)g
-(in)n(\375m)h(s\372b)r(orom)522 b Ff(C-x)42 b(C-v)0 1832
-y Fh(zap\355sa\273)27 b(bu\013er)h(do)f(zadan\351ho)f(s\372b)r(oru)553
-b Ff(C-x)42 b(C-w)0 1932 y Fh(vlo\276i\273)27 b(do)h(syst\351m)n(u)f
-(spr\341)n(vy)f(v)n(erzi\355)676 b Ff(C-x)42 b(C-q)0
-2171 y Fg(P)l(ou\276\355v)l(anie)47 b(n\341p)t(o)l(v)l(edy)0
-2367 y Fh(Syst\351m)29 b(n\341p)r(o)n(v)n(edy)e(je)j(jedno)r(duc)n(h)n
-(\375)-7 b(.)28 b(Stla\350te)h Ff(C-h)f Fh(\(aleb)r(o)h
-Ff(F1)p Fh(\))f(a)g(sledujte)0 2467 y(in\271truk)n(cie.)f(\332v)n(o)r
-(dn)n(\375)g Fe(t\372torial)g Fh(je)h(mo\276n\351)g(spusti\273)g(p)r
-(omo)r(cou)f Ff(C-h)42 b(t)p Fh(.)0 2599 y(o)r(dstr\341ni\273)27
-b(okno)g(s)g(n\341p)r(o)n(v)n(edou)792 b Ff(C-x)42 b(1)0
-2699 y Fh(rolo)n(v)n(a\273)25 b(okno)i(s)g(n\341p)r(o)n(v)n(edou)871
-b Ff(C-M-v)0 2832 y Fh(aprop)r(os:)26 b(pr\355k)n(azy)g(zo)r(dp)r(o)n
-(v)n(eda)5 b(j\372ce)26 b(re\273azcu)350 b Ff(C-h)42
-b(a)0 2931 y Fh(zobrazi\273)26 b(funk)n(ciu)i(danej)g(kl\341)n(v)n(esy)
-702 b Ff(C-h)42 b(c)0 3031 y Fh(zobrazi\273)26 b(p)r(opis)i(funk)n(cie)
-1006 b Ff(C-h)42 b(f)0 3130 y Fh(zobrazi\273)26 b(inform\341cie)h(o)g
-(aktu\341ln)n(yc)n(h)g(m\363)r(do)r(c)n(h)300 b Ff(C-h)42
-b(m)0 3359 y Fg(Opra)l(vy)j(c)l(h)l(\375b)0 3555 y Fe(preru\271i\273)27
-b Fh(vkladan)n(\375)g(aleb)r(o)g(vyk)n(on\341)n(v)n(an)n(\375)d
-(pr\355k)n(az)191 b Ff(C-g)0 3655 y Fe(obno)m(vi\273)28
-b Fh(s\372b)r(or)f(straten)n(\375)f(p\341dom)h(syst\351m)n(u)169
-b Ff(M-x)42 b(recover-file)0 3755 y Fe(zru\271i\273)28
-b Fh(nec)n(hcen)n(\372)f(zmen)n(u)948 b Ff(C-x)42 b(u)i
-Fd(n.)f Ff(C-_)0 3854 y Fh(vr\341ti\273)27 b(p\364)n(v)n(o)r(dn)n(\375)
-f(obsah)h(bu\013eru)569 b Ff(M-x)42 b(revert-buffer)0
-3954 y Fh(prekresli\273)27 b(\376rozpadn)n(ut\372\377)e(obrazo)n(vku)
-535 b Ff(C-l)0 4208 y Fg(Inkremen)l(t\341lne)47 b(vyh\265ad\341)l(v)l
-(anie)0 4404 y Fh(vyh\265ada\273)27 b(vpred)1248 b Ff(C-s)0
-4504 y Fh(vyh\265ada\273)27 b(vzad)1285 b Ff(C-r)0 4603
-y Fh(vyh\265ada\273)27 b(regul\341rn)n(y)e(v\375raz)885
-b Ff(C-M-s)0 4703 y Fh(vyh\265ada\273)27 b(regul\341rn)n(y)e(v\375raz)i
-(dozadu)599 b Ff(C-M-r)0 4803 y Fh(predc)n(h\341dza)5
-b(j\372ci)26 b(vyh\265ad\341)n(v)n(an)n(\375)f(re\273azec)491
-b Ff(M-p)0 4902 y Fh(nasleduj\372c\355)28 b(no)n(v\271\355)e
-(vyh\265ad\341)n(v)n(an)n(\375)f(re\273azec)419 b Ff(M-n)0
-5002 y Fh(uk)n(on\350i\273)27 b(inkremen)n(t\341lne)g(vyh\265ad\341)n
-(v)n(anie)490 b Ff(RET)0 5101 y Fh(zru\271i\273)27 b(efekt)h(p)r
-(osledn\351ho)f(zadan\351ho)g(znaku)359 b Ff(DEL)0 5201
-y Fh(preru\271i\273)27 b(prebieha)5 b(j\372ce)27 b(vyh\265ad\341)n(v)n
-(anie)528 b Ff(C-g)0 5334 y Fh(\317al\271ie)34 b Ff(C-s)f
-Fh(aleb)r(o)h Ff(C-r)f Fh(zopakuje)h(vyh\265ad\341)n(v)n(anie)e(v)i
-(danom)g(smere.)g(Ak)0 5433 y(Emacs)27 b(vyh\265ad\341)n(v)n(a,)e
-Ff(C-g)h Fh(zru\271\355)h(iba)h(nen\341)5 b(jden)n(\372)27
-b(\350as\273)g(re\273azca.)265 5567 y Fc(c)247 5569 y
-Fb(\015)22 b Fc(2007)h(F)-5 b(ree)21 b(Soft)n(w)n(are)h(F)-5
-b(oundation,)20 b(Inc.)h(P)n(ermissions)h(on)g(bac)n(k.)g(v2.2)3858
-5663 y Fh(1)p eop end
-%%Page: 2 2
-TeXDict begin 2 1 bop 0 -337 a Fg(P)l(oh)l(yb)0 -137
-y Fe(p)s(osuv)31 b(o)1452 b(vzad)110 b(vpred)0 -38 y
-Fh(znak)1607 b Ff(C-b)169 b(C-f)0 62 y Fh(slo)n(v)n(o)1596
-b Ff(M-b)169 b(M-f)0 162 y Fh(riadok)1546 b Ff(C-p)169
-b(C-n)0 261 y Fh(na)27 b(za\350iatok)f(aleb)r(o)i(k)n(oniec)e(riadku)
-629 b Ff(C-a)169 b(C-e)0 361 y Fh(v)n(etu)1619 b Ff(M-a)169
-b(M-e)0 461 y Fh(o)r(dsta)n(v)n(ec)1465 b Ff(M-{)169
-b(M-})0 560 y Fh(str\341nku)1500 b Ff(C-x)43 b([)82 b(C-x)43
-b(])0 660 y Fh(sym)n(b)r(olic)n(k\375)26 b(v\375raz)1147
-b Ff(C-M-b)81 b(C-M-f)0 759 y Fh(funk)n(ciu)1511 b Ff(C-M-a)81
-b(C-M-e)0 859 y Fh(na)27 b(za\350iatok)f(aleb)r(o)i(k)n(oniec)e
-(bu\013eru)607 b Ff(M-<)169 b(M->)0 993 y Fh(rolo)n(v)n(a\273)25
-b(na)j(\357al\271iu)f(obrazo)n(vku)791 b Ff(C-v)0 1092
-y Fh(rolo)n(v)n(a\273)25 b(na)j(predc)n(h\341dza)5 b(j\372cu)26
-b(obrazo)n(vku)436 b Ff(M-v)0 1192 y Fh(rolo)n(v)n(a\273)25
-b(v\265a)n(v)n(o)1330 b Ff(C-x)42 b(<)0 1292 y Fh(rolo)n(v)n(a\273)25
-b(vpra)n(v)n(o)1274 b Ff(C-x)42 b(>)0 1391 y Fh(aktu\341ln)n(y)27
-b(riadok)f(do)h(stredu)h(obrazo)n(vky)458 b Ff(C-u)42
-b(C-l)0 1625 y Fg(Ru\271enie)47 b(a)f(mazanie)0 1825
-y Fe(ru\271en)m(\375)32 b(ob)5 b(jekt)1030 b(vzad)284
-b(vpred)0 1924 y Fh(znak)27 b(\(mazanie,)g(nie)h(ru\271enie\))607
-b Ff(DEL)343 b(C-d)0 2024 y Fh(slo)n(v)n(o)1422 b Ff(M-DEL)255
-b(M-d)0 2124 y Fh(riadok)26 b(\(do)i(k)n(onca\))957 b
-Ff(M-0)42 b(C-k)169 b(C-k)0 2223 y Fh(v)n(eta)1449 b
-Ff(C-x)42 b(DEL)169 b(M-k)0 2323 y Fh(sym)n(b)r(olic)n(k\375)26
-b(v\375raz)973 b Ff(M--)42 b(C-M-k)81 b(C-M-k)0 2456
-y Fh(zru\271i\273)27 b Fe(oblas\273)1320 b Ff(C-w)0 2556
-y Fh(sk)n(op\355ro)n(v)n(a\273)25 b(oblas\273)i(do)g(sc)n(hr\341nky)717
-b Ff(M-w)0 2656 y Fh(zru\271i\273)27 b(a\276)g(p)r(o)h(na)5
-b(jbli\276\271\355)27 b(v\375skyt)g(znaku)g Fd(znak)344
-b Ff(M-z)42 b Fd(znak)0 2789 y Fh(vho)r(di\273)28 b(nap)r(osledy)f
-(zru\271en)n(\375)f(ob)5 b(jekt)618 b Ff(C-y)0 2889 y
-Fh(nahradi\273)28 b(vho)r(den)n(\375)h(ob)5 b(jekt)28
-b(predc)n(h\341dza)5 b(j\372cim)28 b(zru-)0 2988 y(\271en)n(\375m)1800
-2889 y Ff(M-y)0 3230 y Fg(Ozna\350o)l(v)l(anie)0 3430
-y Fh(vlo\276i\273)f(zna\350)n(ku)1322 b Ff(C-@)42 b Fd(n.)i
-Ff(C-SPC)0 3529 y Fh(preho)r(di\273)28 b(kurzor)e(a)h(zna\350)n(ku)885
-b Ff(C-x)42 b(C-x)0 3663 y Fh(ozna\350i\273)27 b(zadan)n(\375)f(p)r(o)r
-(\350et)i Fe(slo)m(v)847 b Ff(M-@)0 3763 y Fh(ozna\350i\273)27
-b Fe(o)s(dsta)m(v)m(ec)1159 b Ff(M-h)0 3862 y Fh(ozna\350i\273)27
-b Fe(str\341nku)1198 b Ff(C-x)42 b(C-p)0 3962 y Fh(ozna\350i\273)27
-b Fe(sym)m(b)s(olic)m(k\375)32 b(v\375raz)793 b Ff(C-M-@)0
-4062 y Fh(ozna\350i\273)27 b Fe(funk)m(ciu)1210 b Ff(C-M-h)0
-4161 y Fh(ozna\350i\273)27 b(cel\375)g Fe(bu\013er)1101
-b Ff(C-x)42 b(h)0 4395 y Fg(In)l(terakt\355vne)47 b(nahradzo)l(v)l
-(anie)0 4595 y Fh(in)n(terakt\355vne)27 b(nahradi\273)g(texto)n(v\375)g
-(re\273azec)444 b Ff(M-\045)0 4694 y Fh(s)27 b(p)r(ou\276it\355m)i
-(regul\341rneho)c(v\375razu)247 b Ff(M-x)42 b(query-replace-reg)o(ex)o
-(p)0 4828 y Fh(Platn\351)27 b(o)r(dp)r(o)n(v)n(ede)g(v)g(m\363)r(de)h
-(query-replace)d(s\372)0 4961 y Fe(nahradi\273)k Fh(a)e(\355s\273)h(na)
-f(\357al\271ie)913 b Ff(SPC)0 5061 y Fh(nahradi\273)27
-b(a)g(zosta\273)g(na)g(mieste)803 b Ff(,)0 5161 y Fe(sk)m(o)s
-(\350i\273)28 b Fh(na)f(\357al\271ie)g(b)r(ez)h(nahradenia)631
-b Ff(DEL)0 5260 y Fh(zameni\273)28 b(v\271etky)f(zost\341)n(v)n(a)5
-b(j\372ce)25 b(v\375skyt)n(y)499 b Ff(!)0 5360 y Fe(sp\344\273)28
-b Fh(na)f(predc)n(h\341dza)5 b(j\372ci)26 b(v\375skyt)h(re\273azca)383
-b Ff(^)0 5460 y Fe(k)m(oniec)28 b Fh(nahradzo)n(v)n(ania)984
-b Ff(RET)0 5559 y Fh(rekurz\355vne)26 b(edito)n(v)n(anie)h(\(uk)n
-(on\350\355)g(sa)g Ff(C-M-c)p Fh(\))350 b Ff(C-r)3858
-5663 y Fh(2)p eop end
-%%Page: 3 3
-TeXDict begin 3 2 bop 0 -337 a Fg(Okn\341)0 -164 y Fh(Ak)21
-b(s\372)g(zobrazen\351)e(dv)n(a)h(pr\355k)n(azy)-7 b(,)20
-b(p)r(otom)h(ten)g(druh)n(\375)g(plat\355)g(pre)f(Xo)n(v)n(\351)g
-(okno.)0 -38 y(zru\271i\273)27 b(v\271etky)g(ostatn\351)g(okn\341)843
-b Ff(C-x)42 b(1)0 89 y Fh(rozdeli\273)27 b(okno)g(na)g(horn\351)g(a)g
-(doln\351)427 b Ff(C-x)42 b(2)257 b(C-x)42 b(5)h(2)0
-189 y Fh(zru\271i\273)27 b(toto)h(okno)956 b Ff(C-x)42
-b(0)257 b(C-x)42 b(5)h(0)0 316 y Fh(rozdeli\273)27 b(okno)g(na)g(\265a)
-n(v)n(\351)f(a)i(pra)n(v)n(\351)748 b Ff(C-x)42 b(3)0
-443 y Fh(rolo)n(v)n(a\273)25 b(in\351)j(okno)1213 b Ff(C-M-v)0
-569 y Fh(prepn)n(\372\273)28 b(kurzor)e(do)h(in\351ho)g(okna)498
-b Ff(C-x)42 b(o)257 b(C-x)43 b(5)g(o)0 669 y Fh(vybra\273)27
-b(bu\013er)h(v)f(inom)h(okne)627 b Ff(C-x)42 b(4)h(b)170
-b(C-x)43 b(5)g(b)0 769 y Fh(zobrazi\273)26 b(bu\013er)i(v)g(inom)f
-(okne)577 b Ff(C-x)42 b(4)h(C-o)82 b(C-x)43 b(5)g(C-o)0
-868 y Fh(otv)n(ori\273)26 b(s\372b)r(or)h(v)h(inom)f(okne)632
-b Ff(C-x)42 b(4)h(f)170 b(C-x)43 b(5)g(f)0 968 y Fh(otv)n(ori\273)26
-b(s\372b)r(or)h(iba)h(pre)f(\350\355tanie)g(v)h(inom)g(okne)82
-b Ff(C-x)42 b(4)h(r)170 b(C-x)43 b(5)g(r)0 1068 y Fh(spusti\273)28
-b(Dired)g(v)f(inom)h(okne)630 b Ff(C-x)42 b(4)h(d)170
-b(C-x)43 b(5)g(d)0 1167 y Fh(n\341)5 b(js\273)27 b(tag)g(v)h(inom)f
-(okne)780 b Ff(C-x)42 b(4)h(.)170 b(C-x)43 b(5)g(.)0
-1294 y Fh(zv)n(\344\350\271i\273)27 b(okno)1353 b Ff(C-x)42
-b(^)0 1394 y Fh(z\372\276i\273)28 b(okno)1423 b Ff(C-x)42
-b({)0 1493 y Fh(roz\271\355ri\273)26 b(okno)1344 b Ff(C-x)42
-b(})0 1693 y Fg(F)-11 b(orm\341to)l(v)l(anie)0 1866 y
-Fh(o)r(dsadi\273)27 b(aktu\341ln)n(y)g Fe(riadok)h Fh(\(p)r(o)r(d\265a)
-g(m\363)r(du\))372 b Ff(TAB)0 1965 y Fh(o)r(dsadi\273)27
-b Fe(oblas\273)h Fh(\(p)r(o)r(d\265a)f(m\363)r(du\))731
-b Ff(C-M-\\)0 2065 y Fh(o)r(dsadi\273)27 b Fe(sym)m(b)s(olic)m(k\375)32
-b(v\375raz)e Fh(\(p)r(o)r(d\265a)e(m\363)r(du\))256 b
-Ff(C-M-q)0 2165 y Fh(o)r(dsadi\273)27 b(oblas\273)g(nap)r(evno)g(o)h
-Fd(ar)l(gument)34 b Fh(st\345p)r(co)n(v)232 b Ff(C-x)42
-b(TAB)0 2291 y Fh(vlo\276i\273)27 b(znak)g(no)n(v)n(\351ho)f(riadku)h
-(za)g(kurzor)495 b Ff(C-o)0 2391 y Fh(p)r(osun)n(\372\273)28
-b(zb)n(ytok)f(riadku)f(zvisle)i(dole)578 b Ff(C-M-o)0
-2491 y Fh(zmaza\273)27 b(pr\341zdne)g(riadky)f(ok)n(olo)g(kurzoru)444
-b Ff(C-x)42 b(C-o)0 2590 y Fh(sp)r(o)5 b(ji\273)28 b(riadok)e(s)h
-(predc)n(h\341dza)5 b(j\372cim)27 b(\(s)g(arg.)g(s)g(nasl.\))88
-b Ff(M-^)0 2690 y Fh(zmaza\273)27 b(pr\341zdne)g(miesto)g(ok)n(olo)f
-(kurzoru)439 b Ff(M-\\)0 2790 y Fh(nec)n(ha\273)27 b(presne)g(jedn)n(u)
-h(medzeru)g(ok)n(olo)d(kurzoru)220 b Ff(M-SPC)0 2916
-y Fh(zalomi\273)27 b(o)r(dsta)n(v)n(ec)1194 b Ff(M-q)0
-3016 y Fh(nasta)n(vi\273)27 b(st\345p)r(ec)h(pre)f(zalamo)n(v)n(anie)
-657 b Ff(C-x)42 b(f)0 3116 y Fh(nasta)n(vi\273)27 b(pre\014x,)g
-(ktor\375m)g(za\350\355na)5 b(j\372)27 b(riadky)372 b
-Ff(C-x)42 b(.)0 3215 y Fh(nasta)n(vi\273)27 b(fon)n(t)1338
-b Ff(M-g)0 3443 y Fg(Zmena)46 b(v)l(e\265k)l(osti)g(p\355smen)0
-3615 y Fh(zmeni\273)28 b(p\355smen\341)f(slo)n(v)n(a)f(na)h(v)n(e\265k)
-n(\351)703 b Ff(M-u)0 3715 y Fh(zmeni\273)28 b(p\355smen\341)f(slo)n(v)
-n(a)f(na)h(mal\351)713 b Ff(M-l)0 3815 y Fh(zmeni\273)28
-b(za\350iato)r(\350n\351)f(p\355smeno)g(slo)n(v)n(a)f(na)h(v)n(e\265k)n
-(\351)299 b Ff(M-c)0 3941 y Fh(zmeni\273)28 b(p\355smen\341)f(oblasti)g
-(na)h(v)n(e\265k)n(\351)640 b Ff(C-x)42 b(C-u)0 4041
-y Fh(zmeni\273)28 b(p\355smen\341)f(oblasti)g(na)h(mal\351)650
-b Ff(C-x)42 b(C-l)0 4241 y Fg(Minibu\013er)0 4414 y Fh(Nasleduj\372ce)
-28 b(kl\341)n(v)n(esy)d(s\372)j(platn\351)g(pre)f(minibu\013er.)0
-4540 y(doplni\273)h(z)g(p)r(on)n(uky)1181 b Ff(TAB)0
-4640 y Fh(doplni\273)28 b(do)f(na)5 b(jbli\276\271ieho)27
-b(slo)n(v)n(a)764 b Ff(SPC)0 4740 y Fh(doplni\273)28
-b(a)f(vyk)n(ona\273)1153 b Ff(RET)0 4839 y Fh(zobrazi\273)26
-b(mo\276n\351)i(doplnenia)872 b Ff(?)0 4939 y Fh(predc)n(h\341dza)5
-b(j\372ci)26 b(pr\355k)n(az)g(z)i(minibu\013eru)497 b
-Ff(M-p)0 5039 y Fh(no)n(v\271\355)27 b(aleb)r(o)g(implicitn)n(\375)h
-(pr\355k)n(az)e(z)i(minibu\013eru)245 b Ff(M-n)0 5138
-y Fh(vyh\265ada\273)27 b(regul\341rn)n(y)e(v\375raz)i(v)g(hist\363rii)g
-(vzad)336 b Ff(M-r)0 5238 y Fh(vyh\265ada\273)27 b(regul\341rn)n(y)e
-(v\375raz)i(v)g(hist\363rii)g(vpred)299 b Ff(M-s)0 5337
-y Fh(zru\271i\273)27 b(pr\355k)n(az)1346 b Ff(C-g)0 5464
-y Fh(Stla\350te)26 b Ff(C-x)43 b(ESC)f(ESC)25 b Fh(pre)h(edito)n(v)n
-(anie)e(a)i(zopak)n(o)n(v)n(anie)d(p)r(osledn\351ho)j(pr\355-)0
-5564 y(k)n(azu)h(z)g(minibu\013eru.)i(Stla\350te)e Ff(F10)g
-Fh(pre)g(aktiv)n(\341ciu)g(men)n(u)g(v)h(minibu\013eri.)3858
-5663 y(3)p eop end
-%%Page: 4 4
-TeXDict begin 4 3 bop 33 -320 a Fi(GNU)55 b(Emacs)h({)g
-(Referen\350n\341)e(k)-5 b(arta)0 -42 y Fg(Bu\013ery)0
-165 y Fh(vybra\273)27 b(in)n(\375)g(bu\013er)1184 b Ff(C-x)42
-b(b)0 264 y Fh(zoznam)27 b(v\271etk\375c)n(h)g(bu\013ero)n(v)864
-b Ff(C-x)42 b(C-b)0 364 y Fh(zru\271i\273)27 b(bu\013er)1359
-b Ff(C-x)42 b(k)0 607 y Fg(V\375men)l(y)0 814 y Fh(preho)r(di\273)28
-b Fe(znaky)1224 b Ff(C-t)0 913 y Fh(preho)r(di\273)28
-b Fe(slo)m(v)m(\341)1262 b Ff(M-t)0 1013 y Fh(preho)r(di\273)28
-b Fe(riadky)1200 b Ff(C-x)42 b(C-t)0 1112 y Fh(preho)r(di\273)28
-b Fe(sym)m(b)s(olic)m(k)m(\351)j(v\375razy)704 b Ff(C-M-t)0
-1355 y Fg(Kon)l(trola)46 b(pra)l(v)l(opisu)0 1562 y Fh(k)n(on)n(trola)
-25 b(pra)n(v)n(opisu)h(aktu\341lneho)h(slo)n(v)n(a)491
-b Ff(M-$)0 1662 y Fh(k)n(on)n(trola)25 b(pra)n(v)n(opisu)h
-(v\271etk\375c)n(h)h(slo)n(v)f(v)i(oblasti)103 b Ff(M-x)42
-b(ispell-region)0 1761 y Fh(k)n(on)n(trola)25 b(pra)n(v)n(opisu)h
-(cel\351ho)h(bu\013eru)419 b Ff(M-x)42 b(ispell-buffer)0
-2013 y Fg(T)-11 b(agy)0 2220 y Fh(n\341)5 b(js\273)27
-b(tag)g(\(de\014n\355ciu\))1079 b Ff(M-.)0 2319 y Fh(n\341)5
-b(js\273)27 b(\357al\271\355)h(v\375skyt)e(tagu)966 b
-Ff(C-u)42 b(M-.)0 2419 y Fh(zada\273)27 b(s\372b)r(or)g(s)g(no)n
-(v\375mi)g(tagmi)512 b Ff(M-x)43 b(visit-tags-tabl)o(e)0
-2554 y Fh(vyh\265ada\273)27 b(reg.)g(v\375raz)f(v)h(s\372b)r(oro)r(c)n
-(h)g(s)g(tagmi)199 b Ff(M-x)42 b(tags-search)0 2654 y
-Fh(spusti\273)28 b(nahradzo)n(v)n(anie)d(pre)i(dot)n(y\350n\351)g
-(s\372b)r(ory)-77 b Ff(M-x)42 b(tags-query-replac)o(e)0
-2754 y Fh(p)r(okra\350o)n(v)n(a\273)25 b(v)i(preh\265ad\341)n(v)n
-(an\355)f(aleb)r(o)h(nahradzo)n(v)n(an\355)106 b Ff(M-,)0
-2996 y Fg(Pr\355k)l(azo)l(v\375)44 b(in)l(terpr\351t)0
-3203 y Fh(vyk)n(ona\273)26 b(shello)n(vsk\375)g(pr\355k)n(az)866
-b Ff(M-!)0 3303 y Fh(vyk)n(ona\273)26 b(shello)n(vsk\375)g(pr\355k)n
-(az)h(nad)g(oblas\273ou)372 b Ff(M-|)0 3402 y Fh(pre\014ltro)n(v)n
-(a\273)26 b(oblas\273)h(shello)n(vsk\375m)f(pr\355k)n(azom)327
-b Ff(C-u)42 b(M-|)0 3502 y Fh(spusti\273)28 b(shell)g(v)f(okne)g
-Ff(*shell*)762 b(M-x)42 b(shell)0 3770 y Fg(Ob)t(d\345\276niky)0
-3977 y Fh(sk)n(op\355ro)n(v)n(a\273)25 b(ob)r(d\345\276nik)i(do)h
-(registra)673 b Ff(C-x)42 b(r)i(r)0 4077 y Fh(zru\271i\273)27
-b(ob)r(d\345\276nik)1260 b Ff(C-x)42 b(r)i(k)0 4176 y
-Fh(vho)r(di\273)28 b(ob)r(d\345\276nik)1228 b Ff(C-x)42
-b(r)i(y)0 4276 y Fh(vlo\276i\273)27 b(ob)r(d\345\276nik)h(medzier)953
-b Ff(C-x)42 b(r)i(o)0 4375 y Fh(nahradi\273)27 b(ob)r(d\345\276nik)h
-(ob)r(d\345\276nik)n(om)f(medzier)399 b Ff(C-x)42 b(r)i(c)0
-4475 y Fh(nahradi\273)27 b(riadky)f(ob)r(d\345\276niku)i(zadan)n(\375m)
-f(re\273azcom)142 b Ff(C-x)42 b(r)i(t)0 4718 y Fg(Skratky)0
-4925 y Fh(prida\273)27 b(glob\341ln)n(u)g(skratku)942
-b Ff(C-x)42 b(a)i(g)0 5024 y Fh(prida\273)27 b(lok)n(\341ln)n(u)g
-(skratku)988 b Ff(C-x)42 b(a)i(l)0 5124 y Fh(prida\273)27
-b(glob\341ln)n(u)g(expanziu)g(pre)g(skratku)451 b Ff(C-x)42
-b(a)i(i)f(g)0 5223 y Fh(prida\273)27 b(lok)n(\341ln)n(u)g(expanziu)g
-(pre)g(skratku)497 b Ff(C-x)42 b(a)i(i)f(l)0 5323 y Fh(expando)n(v)n
-(a\273)26 b(skratku)1083 b Ff(C-x)42 b(a)i(e)0 5458 y
-Fh(dynamic)n(k)n(\341)26 b(expanzia)h(predc)n(h\341dza)5
-b(j\372ceho)25 b(slo)n(v)n(a)188 b Ff(M-/)3858 5663 y
-Fh(4)p eop end
-%%Page: 5 5
-TeXDict begin 5 4 bop 0 -337 a Fg(Regul\341rne)46 b(v\375razy)0
--130 y Fh(\265ub)r(o)n(v)n(o\265n)n(\375)26 b(znak)h(okrem)g(no)n(v)n
-(\351ho)f(riadku)461 b Ff(.)43 b Fh(\(te\350)n(k)n(a\))0
--30 y(\276iadne)27 b(aleb)r(o)g(niek)n(o\265k)n(o)f(opak)n(o)n(v)n
-(an\355)635 b Ff(*)0 69 y Fh(jedno)28 b(aleb)r(o)f(viac)g(opak)n(o)n(v)
-n(an\355)819 b Ff(+)0 169 y Fh(\276iadne)27 b(aleb)r(o)g(jedno)h(opak)n
-(o)n(v)n(anie)697 b Ff(?)0 268 y Fh(zru\271i\273)27 b(zvl\341\271tn)n
-(y)g(v\375znam)g(znaku)g Fd(c)33 b Fh(v)n(o)26 b(v\375raze)274
-b Ff(\\)p Fd(c)0 368 y Fh(alternat\355v)n(a)26 b(\(\376aleb)r(o\377\))
-1040 b Ff(\\|)0 468 y Fh(skupina)1520 b Ff(\\\()43 b
-Fa(:)14 b(:)g(:)43 b Ff(\\\))0 567 y Fh(ro)n(vnak\375)25
-b(text)j(ak)n(o)f Fd(n)6 b Fh(-t\341)27 b(skupina)694
-b Ff(\\)p Fd(n)0 667 y Fh(hranice)27 b(slo)n(v)n(a)1329
-b Ff(\\b)0 767 y Fh(nie)28 b(hranice)f(slo)n(v)n(a)1195
-b Ff(\\B)0 902 y Fe(elemen)m(t)936 b(za\350iatok)183
-b(k)m(oniec)0 1002 y Fh(riadok)1032 b Ff(^)477 b($)0
-1101 y Fh(slo)n(v)n(o)1082 b Ff(\\<)433 b(\\>)0 1201
-y Fh(bu\013er)1052 b Ff(\\`)433 b(\\')0 1300 y Fe(trieda)32
-b(znak)m(o)m(v)701 b(zo)s(dp)s(o)m(v)m(ed\341)84 b(nezo)s(dp)s(o)m(v)m
-(ed\341)0 1400 y Fh(explicitn\341)28 b(mno\276ina)576
-b Ff([)43 b Fa(:)14 b(:)g(:)44 b Ff(])249 b([^)42 b Fa(:)14
-b(:)g(:)44 b Ff(])0 1500 y Fh(slo)n(v)n(otv)n(orn)n(\375)24
-b(znak)652 b Ff(\\w)433 b(\\W)0 1599 y Fh(znak)27 b(so)g(syn)n(taxou)f
-Fd(c)573 b Ff(\\s)p Fd(c)395 b Ff(\\S)p Fd(c)0 1842 y
-Fg(Medzin\341ro)t(dn\351)46 b(znak)l(o)l(v)l(\351)g(sady)0
-2049 y Fh(zada\273)27 b(hla)n(vn)n(\375)g(jazyk)494 b
-Ff(M-x)42 b(set-language-env)o(ir)o(onm)o(en)o(t)0 2148
-y Fh(zobrazi\273)26 b(v\271etky)i(vstupn\351)f(met\363)r(dy)278
-b Ff(M-x)42 b(list-input-method)o(s)0 2248 y Fh(zapn)n(\372\273)27
-b(aleb)r(o)h(vypn)n(\372\273)f(vstupn)n(\372)h(met\363)r(du)430
-b Ff(C-\\)0 2348 y Fh(zada\273)27 b(k)n(\363)r(do)n(v)n(anie)e(pre)j
-(nasleduj\372ci)f(pr\355k)n(az)389 b Ff(C-x)42 b(RET)h(c)0
-2447 y Fh(zobrazi\273)26 b(v\271etky)i(k)n(\363)r(do)n(v)n(ania)451
-b Ff(M-x)42 b(list-coding-syst)o(em)o(s)0 2547 y Fh(zmeni\273)28
-b(prefero)n(v)n(an\351)d(k)n(\363)r(do)n(v)n(anie)277
-b Ff(M-x)42 b(prefer-coding-sys)o(te)o(m)0 2800 y Fg(Info)0
-3007 y Fh(spusti\273)28 b(Info)1384 b Ff(C-h)42 b(i)0
-3106 y Fh(n\341)5 b(js\273)27 b(zadan)n(\372)g(funk)n(ciu)h(aleb)r(o)f
-(premenn)n(\372)g(v)h(Info)194 b Ff(C-h)42 b(C-i)0 3242
-y Fh(P)n(oh)n(yb)26 b(v)n(o)h(vn)n(\372tri)g(uzlo)n(v:)83
-3377 y(rolo)n(v)n(anie)e(vpred)1158 b Ff(SPC)83 3476
-y Fh(rolo)n(v)n(anie)25 b(vzad)1195 b Ff(DEL)83 3576
-y Fh(na)27 b(za\350iatok)g(uzla)1128 b Ff(.)43 b Fh(\(te\350)n(k)n(a\))
-0 3711 y(P)n(oh)n(yb)26 b(medzi)i(uzlami:)83 3847 y Fe(\357al\271\355)f
-Fh(uzol)1351 b Ff(n)83 3946 y Fe(predc)m(h\341dza)5 b(j\372ci)30
-b Fh(uzol)915 b Ff(p)83 4046 y Fe(nadraden)m(\375)30
-b Fh(uzol)1105 b Ff(u)83 4146 y Fh(vybra\273)27 b(z)g(men)n(u)h(p)r(o)r
-(d\265a)g(n\341zvu)715 b Ff(m)83 4245 y Fh(vybra\273)27
-b Fd(n)6 b Fh(-t\372)28 b(p)r(olo\276ku)f(men)n(u)g(\(1{9\))540
-b Fd(n)83 4345 y Fh(na)5 b(jbli\276\271\355)22 b(nasleduj\372ci)g
-(kr\355\276o)n(v\375)e(o)r(dk)n(az)h(\(n\341)n(vrat)g
-Ff(l)p Fh(\))83 b Ff(f)83 4445 y Fh(vr\341ti\273)27 b(sa)g(do)g(nap)r
-(osledy)g(prezeran\351ho)f(uzlu)265 b Ff(l)83 4544 y
-Fh(vr\341ti\273)27 b(sa)g(do)g(adres\341ra)e(uzlo)n(v)744
-b Ff(d)83 4644 y Fh(prejs\273)28 b(do)f(ktor\351hok)n(o\265v)n(ek)e
-(uzlu)i(p)r(o)r(d\265a)h(mena)233 b Ff(g)0 4779 y Fh(\317al\271ie:)83
-4915 y(spusti\273)28 b Fe(t\372torial)g Fh(k)f(Infu)884
-b Ff(h)83 5014 y Fh(vyh\265ada\273)27 b(re\273azec)g(v)g(uzlo)r(c)n(h)
-787 b Ff(M-s)83 5114 y Fe(sk)m(on\350i\273)28 b Fh(Info)1254
-b Ff(q)3858 5663 y Fh(5)p eop end
-%%Page: 6 6
-TeXDict begin 6 5 bop 0 -337 a Fg(Registre)0 -130 y Fh(ulo\276i\273)28
-b(oblas\273)f(do)g(registra)934 b Ff(C-x)42 b(r)i(s)0
--30 y Fh(vlo\276i\273)27 b(obsah)g(registra)f(do)h(bu\013era)668
-b Ff(C-x)42 b(r)i(i)0 105 y Fh(ulo\276i\273)28 b(p)r(oz\355ciu)f
-(kurzoru)f(do)i(registra)588 b Ff(C-x)42 b(r)i(SPC)0
-205 y Fh(sk)n(o)r(\350i\273)27 b(na)g(p)r(oz\355ciu)h(ulo\276en)n(\372)
-f(v)h(registri)533 b Ff(C-x)42 b(r)i(j)0 457 y Fg(Kl\341)l(v)l(eso)l(v)
-l(\351)h(makr\341)0 664 y Fe(za\350a\273)29 b Fh(de\014no)n(v)n(anie)e
-(kl\341)n(v)n(eso)n(v)n(\351ho)d(makra)446 b Ff(C-x)42
-b(\()0 764 y Fe(sk)m(on\350i\273)28 b Fh(de\014no)n(v)n(anie)e(kl\341)n
-(v)n(eso)n(v)n(\351ho)e(makra)369 b Ff(C-x)42 b(\))0
-863 y Fe(vyk)m(ona\273)30 b Fh(nap)r(osledy)c(de\014no)n(v)n(an\351)h
-(makro)413 b Ff(C-x)42 b(e)0 963 y Fh(prip)r(o)5 b(ji\273)28
-b(k)f(p)r(osledn\351m)n(u)h(kl\341)n(v)n(eso)n(v)n(\351m)n(u)c(makru)
-262 b Ff(C-u)42 b(C-x)h(\()0 1063 y Fh(p)r(omeno)n(v)n(a\273)26
-b(p)r(osledn\351)i(makro)404 b Ff(M-x)42 b(name-last-kbd-ma)o(cr)o(o)0
-1162 y Fh(vlo\276i\273)27 b(do)h(bu\013era)f(lisp)r(o)n(v\372)g
-(de\014n\355ciu)317 b Ff(M-x)43 b(insert-kbd-macr)o(o)0
-1405 y Fg(Pr\355k)l(azy)i(s\372visiace)h(s)g(Emacs)g(Lisp)t(om)0
-1612 y Fh(vyho)r(dnoti\273)28 b Fe(v\375raz)h Fh(pred)f(kurzorom)581
-b Ff(C-x)42 b(C-e)0 1711 y Fh(vyho)r(dnoti\273)28 b Fe(funk)m(ciu)g
-Fh(p)r(o)r(d)g(kurzorom)529 b Ff(C-M-x)0 1811 y Fh(vyho)r(dnoti\273)28
-b Fe(oblas\273)950 b Ff(M-x)42 b(eval-region)0 1911 y
-Fh(na\350\355ta\273)27 b(a)h(vyho)r(dnoti\273)f(v\375raz)f(v)i
-(minibu\013eri)331 b Ff(M-:)0 2010 y Fh(na\350\355ta\273)27
-b(s\372b)r(or)g(zo)g(syst\351mo)n(v)n(\351ho)f(adres\341ra)221
-b Ff(M-x)42 b(load-library)0 2263 y Fg(Jedno)t(duc)l(h\351)48
-b(prisp\364sob)t(enia)0 2470 y Fh(nasta)n(vi\273)27 b(premenn\351)g(a)g
-(faces)686 b Ff(M-x)42 b(customize)0 2605 y Fh(De\014n\355cia)28
-b(v\271eob)r(ecnej)f(kl\341)n(v)n(eso)n(v)n(ej)e(skratky)h(v)i(Emacs)e
-(Lisp)r(e)i(\(pr\355klad\):)0 2741 y Ff(\(global-set-key)37
-b("\\C-cg")k('goto-line\))0 2840 y(\(global-set-key)c("\\M-#")k
-('query-replace-re)o(gex)o(p\))0 3093 y Fg(Z\341pis)46
-b(pr\355k)l(azo)l(v)0 3300 y Ff(\(defun)41 b Fd(command-name)51
-b Ff(\()p Fd(ar)l(gs)7 b Ff(\))87 3399 y(")p Fd(documentation)f
-Ff(")44 b(\(interactive)38 b(")p Fd(template)6 b Ff("\))87
-3499 y Fd(body)h Ff(\))0 3634 y Fh(Pr\355klad:)0 3770
-y Ff(\(defun)41 b(this-line-to-top)o(-of)o(-w)o(ind)o(ow)c(\(line\))87
-3869 y("Reposition)i(line)j(point)g(is)g(on)h(to)g(top)f(of)h(window.)0
-3969 y(With)f(ARG,)g(put)g(point)g(on)g(line)g(ARG.")87
-4069 y(\(interactive)d("P"\))87 4168 y(\(recenter)h(\(if)i(\(null)g
-(line\))697 4268 y(0)610 4368 y(\(prefix-numeric-v)o(al)o(ue)37
-b(line\)\)\)\))0 4503 y Fh(\251p)r(eci\014k)n(\341cia)22
-b Ff(interactive)c Fh(vra)n(v\355,)k(ak)n(o)f(in)n(terakt\355vne)h
-(na\350\355ta\273)g(argumen-)0 4603 y(t)n(y)-7 b(.)28
-b(Viac)f(sa)g(dozviete)g(p)r(o)h(vyk)n(onan\355)e Ff(C-h)42
-b(f)h(interactive)p Fh(.)476 4919 y Fc(Cop)n(yrigh)n(t)805
-4917 y(c)787 4919 y Fb(\015)22 b Fc(2007)h(F)-5 b(ree)21
-b(Soft)n(w)n(are)h(F)-5 b(oundation,)20 b(Inc.)654 4998
-y(v2.2)i(for)g(GNU)h(Emacs)e(v)n(ersion)h(21,)h(2006)798
-5078 y(designed)e(b)n(y)h(Stephen)e(Gildea)0 5194 y(P)n(ermission)f(is)
-i(gran)n(ted)f(to)h(mak)n(e)e(and)i(distribute)d(copies)i(of)g(this)h
-(card)e(pro)n(vided)g(the)h(cop)n(y-)0 5273 y(righ)n(t)i(notice)f(and)h
-(this)g(p)r(ermission)f(notice)g(are)g(preserv)n(ed)g(on)h(all)g
-(copies.)0 5389 y(F)-5 b(or)20 b(copies)g(of)h(the)f(GNU)h(Emacs)f(man)
-n(ual,)g(write)g(to)h(the)f(F)-5 b(ree)20 b(Soft)n(w)n(are)g(F)-5
-b(oundation,)19 b(Inc.,)0 5468 y(51)k(F)-5 b(ranklin)20
-b(Street,)h(Fifth)g(Flo)r(or,)h(Boston,)h(MA)f(02110-1301)h(USA)3858
-5663 y Fh(6)p eop end
-%%Trailer
-
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/etc/TUTORIAL b/etc/tutorials/TUTORIAL
index eaa97619763..eaa97619763 100644
--- a/etc/TUTORIAL
+++ b/etc/tutorials/TUTORIAL
diff --git a/etc/TUTORIAL.bg b/etc/tutorials/TUTORIAL.bg
index cc8b2c5b2c5..cc8b2c5b2c5 100644
--- a/etc/TUTORIAL.bg
+++ b/etc/tutorials/TUTORIAL.bg
diff --git a/etc/TUTORIAL.cn b/etc/tutorials/TUTORIAL.cn
index 5e318e8ff90..5e318e8ff90 100644
--- a/etc/TUTORIAL.cn
+++ b/etc/tutorials/TUTORIAL.cn
diff --git a/etc/TUTORIAL.cs b/etc/tutorials/TUTORIAL.cs
index fc4650d0fa2..fc4650d0fa2 100644
--- a/etc/TUTORIAL.cs
+++ b/etc/tutorials/TUTORIAL.cs
diff --git a/etc/TUTORIAL.de b/etc/tutorials/TUTORIAL.de
index abdc1fec6ab..abdc1fec6ab 100644
--- a/etc/TUTORIAL.de
+++ b/etc/tutorials/TUTORIAL.de
diff --git a/etc/TUTORIAL.eo b/etc/tutorials/TUTORIAL.eo
index 1f6e2d87880..1f6e2d87880 100644
--- a/etc/TUTORIAL.eo
+++ b/etc/tutorials/TUTORIAL.eo
diff --git a/etc/TUTORIAL.es b/etc/tutorials/TUTORIAL.es
index 7fdd96811e5..7fdd96811e5 100644
--- a/etc/TUTORIAL.es
+++ b/etc/tutorials/TUTORIAL.es
diff --git a/etc/TUTORIAL.fr b/etc/tutorials/TUTORIAL.fr
index 88dc98a088c..88dc98a088c 100644
--- a/etc/TUTORIAL.fr
+++ b/etc/tutorials/TUTORIAL.fr
diff --git a/etc/TUTORIAL.it b/etc/tutorials/TUTORIAL.it
index 74beb63f018..74beb63f018 100644
--- a/etc/TUTORIAL.it
+++ b/etc/tutorials/TUTORIAL.it
diff --git a/etc/TUTORIAL.ja b/etc/tutorials/TUTORIAL.ja
index 3452c02f0f8..3452c02f0f8 100644
--- a/etc/TUTORIAL.ja
+++ b/etc/tutorials/TUTORIAL.ja
diff --git a/etc/TUTORIAL.ko b/etc/tutorials/TUTORIAL.ko
index 9f3d66a48af..9f3d66a48af 100644
--- a/etc/TUTORIAL.ko
+++ b/etc/tutorials/TUTORIAL.ko
diff --git a/etc/TUTORIAL.nl b/etc/tutorials/TUTORIAL.nl
index f86d0b40b69..f86d0b40b69 100644
--- a/etc/TUTORIAL.nl
+++ b/etc/tutorials/TUTORIAL.nl
diff --git a/etc/TUTORIAL.pl b/etc/tutorials/TUTORIAL.pl
index 352d92b46b4..352d92b46b4 100644
--- a/etc/TUTORIAL.pl
+++ b/etc/tutorials/TUTORIAL.pl
diff --git a/etc/TUTORIAL.pt_BR b/etc/tutorials/TUTORIAL.pt_BR
index f2ceb9a0e0a..f2ceb9a0e0a 100644
--- a/etc/TUTORIAL.pt_BR
+++ b/etc/tutorials/TUTORIAL.pt_BR
diff --git a/etc/TUTORIAL.ro b/etc/tutorials/TUTORIAL.ro
index 159796403d4..159796403d4 100644
--- a/etc/TUTORIAL.ro
+++ b/etc/tutorials/TUTORIAL.ro
diff --git a/etc/TUTORIAL.ru b/etc/tutorials/TUTORIAL.ru
index 9fc54ba121d..9fc54ba121d 100644
--- a/etc/TUTORIAL.ru
+++ b/etc/tutorials/TUTORIAL.ru
diff --git a/etc/TUTORIAL.sk b/etc/tutorials/TUTORIAL.sk
index 7194654736f..7194654736f 100644
--- a/etc/TUTORIAL.sk
+++ b/etc/tutorials/TUTORIAL.sk
diff --git a/etc/TUTORIAL.sl b/etc/tutorials/TUTORIAL.sl
index a682d9acbe0..a682d9acbe0 100644
--- a/etc/TUTORIAL.sl
+++ b/etc/tutorials/TUTORIAL.sl
diff --git a/etc/TUTORIAL.sv b/etc/tutorials/TUTORIAL.sv
index 2a54047e8dc..2a54047e8dc 100644
--- a/etc/TUTORIAL.sv
+++ b/etc/tutorials/TUTORIAL.sv
diff --git a/etc/TUTORIAL.th b/etc/tutorials/TUTORIAL.th
index 8e70bc4fc71..8e70bc4fc71 100644
--- a/etc/TUTORIAL.th
+++ b/etc/tutorials/TUTORIAL.th
diff --git a/etc/TUTORIAL.translators b/etc/tutorials/TUTORIAL.translators
index b9e1f4b6ad3..b9e1f4b6ad3 100644
--- a/etc/TUTORIAL.translators
+++ b/etc/tutorials/TUTORIAL.translators
diff --git a/etc/TUTORIAL.zh b/etc/tutorials/TUTORIAL.zh
index 2793312763b..2793312763b 100644
--- a/etc/TUTORIAL.zh
+++ b/etc/tutorials/TUTORIAL.zh
diff --git a/leim/ChangeLog b/leim/ChangeLog
index 2beefa938ee..69351db078b 100644
--- a/leim/ChangeLog
+++ b/leim/ChangeLog
@@ -1,7 +1,15 @@
+2007-11-17 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (check-declare): New target.
+
2007-10-31 Glenn Morris <rgm@gnu.org>
* Makefile.in (install): Change ownership of installed files.
+2007-10-20 Edward O'Connor <hober0@gmail.com> (tiny change)
+
+ * quail/latin-ltx.el ("\\qed"): Add this rule.
+
2007-10-24 Juanma Barranquero <lekktu@gmail.com>
* quail/indian.el (quail-indian-update-preceding-char):
@@ -13,7 +21,7 @@
* COPYING: Switch to GPLv3.
-2007-07-20 Eli Zaretskii <eliz@gnu.org>
+2007-07-16 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (extraclean): Don't delete *~.
diff --git a/leim/Makefile.in b/leim/Makefile.in
index d2dcd8bfa70..14bcffb26fe 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -251,7 +251,11 @@ install: all
done) \
else true; fi
-chmod -R a+r ${INSTALLDIR}
- -find ${INSTALLDIR} -exec chown $${LOGNAME:-$$USERNAME} '{}' ';'
+ for installuser in $${LOGNAME} $${USERNAME} $${USER} \
+ `id -un 2> /dev/null`; do \
+ [ -n "$${installuser}" ] && break ; \
+ done ; \
+ find ${INSTALLDIR} -exec chown $${installuser} '{}' ';'
clean mostlyclean:
rm -f ${TIT-MISC} ${TIT-MISC:.elc=.el} \
@@ -272,3 +276,9 @@ maintainer-clean: distclean
extraclean: maintainer-clean
-rm -f *~ \#* m/?*~ s/?*~
+
+.PHONY: check-declare
+
+check-declare:
+ $(RUN-EMACS) -l $(buildlisppath)/emacs-lisp/check-declare \
+ --eval '(check-declare-directory "$(srcdir)")'
diff --git a/leim/quail/latin-ltx.el b/leim/quail/latin-ltx.el
index 136499f55a4..8aaf31cad86 100644
--- a/leim/quail/latin-ltx.el
+++ b/leim/quail/latin-ltx.el
@@ -786,6 +786,7 @@ system, including many technical ones. Examples:
("\\prod" ?âˆ)
("\\propto" ?âˆ)
("\\psi" ?ψ)
+ ("\\qed" ?∎)
("\\quad" ?â€)
("\\rangle" ?〉)
("\\rbrace" ?})
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 2c22c70f501..a4d67b80eed 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,25 +1,40 @@
+2007-11-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * pop.c (socket_connection): Move realhost out of #ifdefs.
+ Set realhost both for HAVE_GETADDRINFO and !HAVE_GETADDRINFO.
+
+2007-11-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * pop.c (socket_connection): Use getaddrinfo if available.
+
2007-11-15 Francesco Potort,Al(B <pot@gnu.org>
- * etags.c: (C_entries): In case '}' decrement bracelev before testing it.
+ * etags.c: Make prototypes for extern definitions, and add all
+ that are needed to quench warnings on 64-bit.
+ (main): Use the same defaults for ctags as for etags: find
+ typedefs, structure tags, macro constants, enum constants, struct
+ members and global variables.
+ (make_C_tag) [DEBUG]: Add debugging printout.
+ (C_entries): In case '}' decrement bracelev before testing it.
2007-11-15 Masatake YAMATO <jet@gyve.org>
* etags.c (C_entries): In case '}', set fvdef to fvnone
unconditioned to (!ignoreindent && lp == newlb.buffer + 1).
-2007-11-15 Francesco Potort,Al(B <pot@gnu.org>
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
- * etags.c: (C_entries): Reset the fvdef machine when out of function.
- (C_entries): Parse start of C comment as a space == end of token.
- This is not necessary for C++ comment, already parsed as newline.
+ * makefile.w32-in (obj): Remove sunfns.o.
+
+2007-10-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (obj): Remove abbrev.o.
2007-10-26 Juanma Barranquero <lekktu@gmail.com>
* emacsclient.c: Add a wrapper for getenv so it also checks the
registry on Windows. Suggestion and algorithm by Eli Zaretskii.
Code partially based on w32_get_resource and init_environment (w32.c).
- (xmalloc): New function by K,Aa(Broly L$,1 q(Brentey (backported from the trunk).
- (quote_file_name): Use it.
(egetenv): New wrapper for getenv.
(get_current_dir_name, decode_options, get_server_config)
(set_local_socket, set_socket, main): Use egetenv, not getenv.
@@ -30,12 +45,106 @@
* emacsclient.c (sock_err_message): New function.
(set_tcp_socket): Use it.
+2007-10-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacsclient.c (print_help_and_exit): Fix space to improve
+ alignment in output messages.
+
2007-09-27 Jason Rumney <jasonr@gnu.org>
* makefile.w32-in (emacsclient, emacsclientw): Link to COMCTL32.
* emacsclient.c (w32_window_app): Init common controls when windowed.
+2007-09-21 Glenn Morris <rgm@gnu.org>
+
+ * emacstool.c: Remove file.
+ * Makefile.in (emacstool, nemacstool, xvetool, xveterm):
+ Delete targets built from emacstool.
+
+2007-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacsclient.c (decode_options): -t implies -c.
+
+2007-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacsclient.c (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP)
+ (IS_ANY_SEP): Only define if !defined(HAVE_GET_CURRENT_DIR_NAME).
+ (main_argc): Remove.
+ (strprefix): Use strncmp.
+
+2007-09-20 Jason Rumney <jasonr@gnu.org>
+
+ * emacsclient.c (main) [SIGSTOP]: Change conditional from WINDOWSNT.
+
+2007-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacsclient.c (current_frame): Change the default.
+ (longopts): Replace --current-frame by --create-frame.
+ (decode_options): Reverse the meaning of -c.
+ (print_help_and_exit): Update help text accordingly.
+ (main): Remove the -version and -good-version messages.
+
+2007-09-12 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (SOURCES, unlock, relock): Delete.
+
+2007-08-29 Glenn Morris <rgm@gnu.org>
+
+ * makefile.w32-in (VERSION): Increase to 23.0.50.
+
+2007-08-29 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * emacsclient.c (w32_execvp): Move definition before use.
+ (decode_options): Don't use a tty on mac carbon or windows.
+
+2007-08-29 Jason Rumney <jasonr@gnu.org>
+
+ * emacsclient.c (SEND_STRING, SEND_QUOTED): Remove obfuscation macros.
+ (quote_argument, set_tcp_socket, handle_sigcont, handle_sigtstp):
+ (main): Expand removed macros inline.
+ (main) [WINDOWSNT]: Don't call ttyname. Don't recognize -suspend
+ option.
+ (main) [NO_SOCKETS_IN_FILE_SYSTEM]: Don't call init_signals.
+
+2007-08-29 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * emacsclient.c (signal.h): New include.
+ (sys/stat.h, errno.h): Always include, even on WINDOWSNT.
+ (DIRECTORY_SEP, IS_DIRECTORY_SEP, IS_DEVICE_SEP, IS_ANY_SEP):
+ Copy definitions here from src/lisp.h.
+ (main_argc, main_argv, current_frame, window_system, tty): New vars.
+ (longopts): Add tty, current-frame.
+ (xmalloc, xstrdup): New functions.
+ (get_current_dir_name): New function, copied from src/sysdep.c.
+ (decode_options): Set display from environment. Add tty and
+ current_frame options. Make --no-wait imply --current-frame,
+ except when it is the only option given. Make sure no frame is
+ opened when --current-frame is set.
+ (print_help_and_exit): Document tty and current-frame options.
+ (fail): Change arguments to void.
+ (main): When sockets are not defined, set main_argc, main_argv,
+ and call fail() with no arguments.
+ (emacs_socket): New variable (moved out from main `s').
+ (quote_file_name): Rename to quote_argument.
+ (quote_argument): New name for old quote_file_name.
+ (unquote_argument, strprefix, pass_signal_to_emacs)
+ (handle_sigcont, handle_sigtstp, init_signals): New functions.
+ (set_local_socket): Initialize saved_errno to 0. If socket-name
+ is too long, call `fail' rather than `exit'.
+ (main): Doc update. Set main_argc, main_argv. New var `str'.
+ Don't need a filename or argument if tty or window_system set.
+ Call fail with no arguments. Use get_current_dir_name to send
+ over the current directory. Send version number to Emacs for
+ verification. If tty is set, check TERM, and pass name and type
+ to Emacs. Pass window_system to Emacs. Move sending of eval to
+ optind loop. Send -position, -file to Emacs. Call fsync after
+ fflush. Check for a client/server version match.
+ Handle -emacs-pid, -window-system-unsupported, -print, -error, and
+ -suspend commands. Don't exit prematurely on --no-wait, let Emacs
+ close the connection for us. When creating a new frame, send
+ environment and pwd to Emacs. Send current-frame to Emacs.
+
2007-08-25 Eli Zaretskii <eliz@gnu.org>
* Makefile.in (rcs2log, rcs-checkin, grep-changelog, vcdiff):
@@ -48,10 +157,34 @@
* COPYING: Switch to GPLv3.
-2007-07-20 Eli Zaretskii <eliz@gnu.org>
+2007-07-17 Francesco Potort,Al(B <pot@gnu.org>
+
+ * etags.c (C_entries): Reset the fvdef machine when out of function.
+ (PRINT_UNDOCUMENTED_OPTIONS_HELP): #define as FALSE if undefined.
+ (print_help): Use it in if() rather than #if.
+ (print_help): Conditionally print help about --no-line-directive.
+
+2007-07-16 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (clean): Don't delete *~.
+2007-06-07 Glenn Morris <rgm@gnu.org>
+
+ * etags.c (print_version): Add `emacs_copyright' string, for
+ easier automatic updating.
+
+2007-05-18 Francesco Potort,Al(B <pot@gnu.org>
+
+ * etags.c: Extern definitions of some more pointer functions for
+ standalone compilation, especially important for 64bit platforms.
+ (main, print_help): --members is now the default for etags.
+ (C_entries): Parse start of C comment as a space == end of token.
+ This is not necessary for C++ comment, already parsed as newline.
+
+2007-04-26 Glenn Morris <rgm@gnu.org>
+
+ * makefile.w32-in (VERSION): Increase to 22.1.50.
+
2007-06-02 Chong Yidong <cyd@stupidchicken.com>
* Version 22.1 released.
@@ -330,8 +463,7 @@
suggest using options to make them explicit.
(AUTH_KEY_LENGTH, SEND_BUFFER_SIZE): New constants.
(send_buffer, sblen): New variables.
- (send_to_emacs): New function to buffer output and send it with
- send().
+ (send_to_emacs): New function to buffer output and send it with `send'.
(quote_file_name): Use SEND_STRING.
(close_winsock, initialize_sockets): New functions to load and
unload Winsock.
@@ -437,8 +569,8 @@
2006-05-23 Francesco Potort,Al(B <pot@gnu.org>
- * pop.c (pop_open, socket_connection, KPOP_SERVICE): Added
- comments explaining why the "kpop" service is never used.
+ * pop.c (pop_open, socket_connection, KPOP_SERVICE):
+ Add comments explaining why the "kpop" service is never used.
2006-05-13 Eli Zaretskii <eliz@gnu.org>
@@ -546,7 +678,7 @@
* makefile.w32-in (../src/config.h): Don't overwrite. Print a
message instead.
- (../src/paths.h): Removed.
+ (../src/paths.h): Remove.
2005-07-27 Juanma Barranquero <lekktu@gmail.com>
@@ -924,7 +1056,7 @@
2003-01-06 Kim F. Storm <storm@cua.dk>
- * pop.c (__P): Renamed from _P to avoid problems on Cygwin.
+ * pop.c (__P): Rename from _P to avoid problems on Cygwin.
All uses changed.
2002-12-18 Andrew Innes <andrewi@gnu.org>
@@ -1903,7 +2035,7 @@
[WINDOWSNT]: #undef DOS_NT and #define it even if built with
HAVE_CONFIG_H. This change does nothing in Emacs, as DOS_NT is
always defined when HAVE_CONFIG_H and WINDOWS are both defined.
- [!HAVE_UNISTD_H]: use defined(WINDOWSNT) instead of the bare
+ [!HAVE_UNISTD_H]: Use defined(WINDOWSNT) instead of the bare
WINDOWSNT, as this is the correct way to use it.
2001-01-28 Francesco Potort,Al(B <pot@gnu.org>
@@ -3054,7 +3186,7 @@
1997-03-14 Francesco Potort,Al(B <F.Potorti@cnuce.cnr.it>
- * etags.c (add_regex): reset *putbuf before using it.
+ * etags.c (add_regex): Reset *putbuf before using it.
1997-02-23 Jonathan I. Kamens <jik@kamens.brookline.ma.us>
@@ -3618,7 +3750,7 @@
1995-12-04 Francesco Potort,Al(B <pot@cnuce.cnr.it>
- * Makefile.in (ctags): depend on etags only for simplicity;
+ * Makefile.in (ctags): Depend on etags only for simplicity;
compile with regexp support enabled.
1995-11-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -3743,13 +3875,13 @@
1995-06-27 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (plain_C_entries): new function.
- (lowcase): new macro.
- (tail, Fortran_functions, Pascal_functions): use new macro lowcase.
- (lang_suffixes): new suffix ".pc" for Pro*C files.
- (consider_token): don't tag all tokens beginning with DEFUN & Co..
- (tail): look for the end of the token when comparing.
- (takeprec): since now tail behaves differently, use strneq.
+ * etags.c (plain_C_entries): New function.
+ (lowcase): New macro.
+ (tail, Fortran_functions, Pascal_functions): Use new macro lowcase.
+ (lang_suffixes): New suffix ".pc" for Pro*C files.
+ (consider_token): Don't tag all tokens beginning with DEFUN & Co..
+ (tail): Look for the end of the token when comparing.
+ (takeprec): Since now tail behaves differently, use strneq.
1995-07-08 Paul Eggert <eggert@twinsun.com>
@@ -3781,13 +3913,13 @@
1995-06-27 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (plain_C_entries): new function.
- (lowcase): new macro.
- (tail, Fortran_functions, Pascal_functions): use new macro lowcase.
- (lang_suffixes): new suffix ".pc" for Pro*C files.
- (consider_token): don't tag all tokens beginning with DEFUN & Co..
- (tail): look for the end of the token when comparing.
- (takeprec): since now tail behaves differently, use strneq.
+ * etags.c (plain_C_entries): New function.
+ (lowcase): New macro.
+ (tail, Fortran_functions, Pascal_functions): Use new macro lowcase.
+ (lang_suffixes): New suffix ".pc" for Pro*C files.
+ (consider_token): Don't tag all tokens beginning with DEFUN & Co..
+ (tail): Look for the end of the token when comparing.
+ (takeprec): Since now tail behaves differently, use strneq.
1995-06-26 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -3964,7 +4096,7 @@
1995-03-13 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (process_file): free (filename) after using it.
+ * etags.c (process_file): Free (filename) after using it.
(readline_internal): Do not access the char before start of line.
1995-02-22 Francesco Potort,Al(B (pot@cnuce.cnr.it)
@@ -4097,8 +4229,8 @@
1994-11-22 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (print_help): print --regex usage for ctags also.
- (main): use -h in addition to -H as abbreviation for --help.
+ * etags.c (print_help): Print --regex usage for ctags also.
+ (main): Use -h in addition to -H as abbreviation for --help.
1994-11-16 Francesco Potort,Al(B (pot@cnuce.cnr.it)
@@ -4163,9 +4295,9 @@
1994-10-21 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (prestr, substr): return a logical type.
+ * etags.c (prestr, substr): Return a logical type.
(consider_token): Comment out "EXFUN". Use "DEFUN" instead of "DEF".
- (consider_token): set funcdef to fignore when a DEFUN is met.
+ (consider_token): Set funcdef to fignore when a DEFUN is met.
(C_entries): Now we can use Tom Hageman patch for extern "C".
1994-10-20 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4248,8 +4380,8 @@
1994-10-17 Francesco Potort,Al(B (pot@fly.cnuce.cnr.it)
- * Makefile.in.in (etags): add dependency on regex.o, link with it.
- (REGEXPOBJ, REGEXPDEPS, regex.o): target and macros added.
+ * Makefile.in.in (etags): Add dependency on regex.o, link with it.
+ (REGEXPOBJ, REGEXPDEPS, regex.o): Target and macros added.
1994-10-12 David J. MacKenzie (djm@duality.gnu.ai.mit.edu)
@@ -4399,7 +4531,7 @@
1994-07-08 Dave Love (d.love@dl.ac.uk)
- * etags.c (takeprec): recognise `character*(*) function'
+ * etags.c (takeprec): Recognise `character*(*) function'.
1994-07-08 Francesco Potort,Al(B (pot@cnuce.cnr.it)
@@ -4547,11 +4679,11 @@
1994-04-18 Francesco Potort,Al(B (pot@fly.cnuce.cnr.it)
- * etags.c (main, print_help): eliminate the -F option.
+ * etags.c (main, print_help): Eliminate the -F option.
1994-04-18 Francesco Potort,Al(B (pot@fly.cnuce.cnr.it)
- * etags.c (absolute_filename): compare against '\0' instead of NULL.
+ * etags.c (absolute_filename): Compare against '\0' instead of NULL.
1994-04-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -4585,21 +4717,21 @@
1994-04-08 Francesco Potort,Al(B (pot@fly.cnuce.cnr.it)
- * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
- (PF_funcs, Asm_funcs, L_funcs, PAS_funcs, TEX_funcs,
- Scheme_funcs, prolog_funcs): renamed to Fortran_functions,
+ * etags.c (outf, outfiledir): Renamed to tagf, tagfiledir.
+ (PF_funcs, Asm_funcs, L_funcs, PAS_funcs, TEX_funcs)
+ (Scheme_funcs, prolog_funcs): Renamed to Fortran_functions,
Asm_labels, Lisp_functions, Pascal_functions, Scheme_functions,
TeX_functions, Prolog_functions.
- (inf): no more a global variable.
- (C_entries): take 2nd parameter `inf' instead of using the global one.
- (find_entries): added the cp1 var for optimisation.
- (find_entries): added more suffixes for assembler files.
+ (inf): No more a global variable.
+ (C_entries): Take 2nd parameter `inf' instead of using the global one.
+ (find_entries): Added the cp1 var for optimisation.
+ (find_entries): Added more suffixes for assembler files.
(Asm_funcs): Now finds labels even without an ending colon.
1994-03-30 Francesco Potort,Al(B (pot@fly.cnuce.cnr.it)
- * etags.c (main): use etags_getcwd for compatibility.
- (etags_getcwd): new function.
+ * etags.c (main): Use etags_getcwd for compatibility.
+ (etags_getcwd): New function.
1994-03-25 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -4607,22 +4739,22 @@
1994-03-25 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
- (main): don't allow the use of -t and -T in etags mode.
- (print_help): don't show options enabled by default.
- (print_version): show the emacs version number if VERSION is #defined.
- (find_entries): add "ss" as suffix for Chez Scheme.
+ * etags.c (emacs_tags_format, ETAGS): Removed. Use CTAGS instead.
+ (main): Don't allow the use of -t and -T in etags mode.
+ (print_help): Don't show options enabled by default.
+ (print_version): Show the emacs version number if VERSION is #defined.
+ (find_entries): Add "ss" as suffix for Chez Scheme.
1994-03-23 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (cwd, outfiledir): vars added.
+ * etags.c (cwd, outfiledir): Vars added.
(relative_filename, absolute_filename, absolute_dirname):
functions added to compute filenames in tags files.
- (process_file): filenames in tags file are relative to the
+ (process_file): Filenames in tags file are relative to the
directory where the tags file is (useful with the -o option).
- (main): initialise the outfiledir var.
- (TYPEDST): added the `tignore' value.
- (C_entries): corrected various small bugs.
+ (main): Initialise the outfiledir var.
+ (TYPEDST): Added the `tignore' value.
+ (C_entries): Corrected various small bugs.
1994-03-19 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -4637,8 +4769,8 @@
1994-03-14 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (TYPEDST): added the `tignore' value.
- (C_entries): corrected various bugs, now correctly parses the
+ * etags.c (TYPEDST): Added the `tignore' value.
+ (C_entries): Corrected various bugs, now correctly parses the
`extern "C" {' construction (patch by Tom R.Hageman).
1994-03-05 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -4679,7 +4811,7 @@
1994-02-22 Karl Heuer (kwzh@gnu.ai.mit.edu)
* profile.c (get_time): Simplify; avoid calling index.
- (main): exit on EOF.
+ (main): Exit on EOF.
1994-02-17 Francesco Potort,Al(B (pot@cnuce.cnr.it)
@@ -4691,11 +4823,11 @@
1994-02-14 Francesco Potort,Al(B (pot@fly)
- * etags.c (absolute_pathnames, cwd): added global vars.
- (longopts, print_help, main, process_file): put absolute filenames
+ * etags.c (absolute_pathnames, cwd): Added global vars.
+ (longopts, print_help, main, process_file): Put absolute filenames
in the tag file if the -A --absolute-pathnames option is used.
- (print_help): alfabetically order the options.
- (malloc, realloc, strcpy, strncpy, strcmp): remove extern declar.
+ (print_help): Alfabetically order the options.
+ (malloc, realloc, strcpy, strncpy, strcmp): Remove extern declar.
1994-02-09 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -4724,15 +4856,15 @@
1994-01-14 Francesco Potort,Al(B (pot@cnuce.cnr.it)
* etags.c (stab_entry, stab_create, stab_find, stab_search,
- stab_type, add_keyword, C_reate_stab, C_create_stabs): deleted.
+ stab_type, add_keyword, C_reate_stab, C_create_stabs): Deleted.
Use gperf generated hash table instead of linked list.
- (C_stab_entry, hash, in_word_set, get_C_stab, C_symtype): added.
+ (C_stab_entry, hash, in_word_set, get_C_stab, C_symtype): Added.
Mostly code generated by gperf.
- (consider_token): removed unused parameter `lp'.
- (PF_funcs, getit): allow subroutine and similar declarations
+ (consider_token): Removed unused parameter `lp'.
+ (PF_funcs, getit): Allow subroutine and similar declarations
to span multiple lines.
- (C_entries): check for newline if inchar to avoid bus errors.
- (process_file, find_entries): distinguish among nonexistent
+ (C_entries): Check for newline if inchar to avoid bus errors.
+ (process_file, find_entries): Distinguish among nonexistent
and not regular file.
1994-01-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -4869,14 +5001,14 @@
functions returning a pointer to a function, a la `signal', can be
parsed. This also required new state `fstartlist' to `FUNCST'.
(SAVE_TOKEN, RESTORE_TOKEN, TOKEN_SAVED_P): 1-deep token save stack.
- (C_entries, CNL): use it to isolate preprocessor directive processing
+ (C_entries, CNL): Use it to isolate preprocessor directive processing
from the other state engines.
- (begtk): add '~', for C++ class destructors.
+ (begtk): Add '~', for C++ class destructors.
1993-11-02 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (consider_token): removed unused variable firsttok.
- (prolog_getit): call pfnote with the right number of arguments.
+ * etags.c (consider_token): Removed unused variable firsttok.
+ (prolog_getit): Call pfnote with the right number of arguments.
1993-10-19 Paul Eggert (eggert@twinsun.com)
@@ -4895,9 +5027,9 @@
1993-10-01 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (process_file): dead code removed.
+ * etags.c (process_file): Dead code removed.
(S_ISREG): #define it using S_IFREG if not defined.
- (process_file): regular files have nothing to do with symlinks.
+ (process_file): Regular files have nothing to do with symlinks.
1993-09-28 Brian Fox (bfox@ai.mit.edu)
@@ -4980,10 +5112,10 @@
1993-08-04 Francesco Potort,Al(B (pot@spiff.gnu.ai.mit.edu)
- * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
- (L_funcs): the (foo::defmumble stuff now should work.
- (consider_token): function returned random value--corrected.
- (C_entries): corrected == versus = typo.
+ * etags.c (L_isdef, L_isquote, L_getit): Small optimisations.
+ (L_funcs): The (foo::defmumble stuff now should work.
+ (consider_token): Function returned random value--corrected.
+ (C_entries): Corrected == versus = typo.
1993-08-01 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
@@ -4999,11 +5131,11 @@
* etags.c (FINCST): Added the fignore status. Means we are
after the parameter list and before the open curly brace.
Allows correct parsing of C++ constructors.
- (C_entries, consider_token): make use of fignore.
- (consider_token): reset funcdef when next_token_is_func: when in
+ (C_entries, consider_token): Make use of fignore.
+ (consider_token): Reset funcdef when next_token_is_func: when in
ctags mode makes DEFVAR and others work better.
- (L_isquote): function that recognises the "(quote" string.
- (L_getit): ignore quoting via "'" or "(quote". Useful for defalias.
+ (L_isquote): Function that recognises the "(quote" string.
+ (L_getit): Ignore quoting via "'" or "(quote". Useful for defalias.
1993-07-29 Paul Eggert (eggert@twinsun.com)
@@ -5035,20 +5167,20 @@
1993-07-08 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (alloca): removed all references to it.
- (main): now calls xnew instead of alloca for portability.
- (../src/config.h): included only if HAVE_CONFIG_H.
- (const): void definition removed--config.h takes care of it.
+ * etags.c (alloca): Removed all references to it.
+ (main): Now calls xnew instead of alloca for portability.
+ (../src/config.h): Included only if HAVE_CONFIG_H.
+ (const): Void definition removed--config.h takes care of it.
1993-07-08 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (consider_token): was `==', now is `='.
+ * etags.c (consider_token): Was `==', now is `='.
(consider_token): DEFUNs now treated like funcs in ctags mode.
- * etags.c (LEVEL_OK_FOR_FUNCDEF): removed.
- (C_entries): optimized the test that used LEVEL_OK_FOR_FUNCDEF.
- (C_entries): removed a piece of useless code.
- (C_entries): making typedef tags is delayed until a semicolon
+ * etags.c (LEVEL_OK_FOR_FUNCDEF): Removed.
+ (C_entries): Optimized the test that used LEVEL_OK_FOR_FUNCDEF.
+ (C_entries): Removed a piece of useless code.
+ (C_entries): Making typedef tags is delayed until a semicolon
is met. This handles "typedef int X, Y, Z;" correctly.
1993-07-06 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
@@ -5324,38 +5456,38 @@
1993-03-22 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (YACC): flag added to c_ext.
- (c_ext): no more a synonim for c_ext&C_PLPL because of YACC.
- (find_entries): consistently use streq when reasonable.
- (find_entries): a .y file is a yacc file.
+ * etags.c (YACC): Flag added to c_ext.
+ (c_ext): No more a synonim for c_ext&C_PLPL because of YACC.
+ (find_entries): Consistently use streq when reasonable.
+ (find_entries): A .y file is a yacc file.
(get_C_stab): c_ext becomes c_ext&C_PLPL.
- (C_entries): logical cplpl means c_ext&C_PLPL.
- (C_entries): logical yacc_rules means we are after the first %%.
- (C_entries): added logic for yacc files.
+ (C_entries): Logical cplpl means c_ext&C_PLPL.
+ (C_entries): Logical yacc_rules means we are after the first %%.
+ (C_entries): Added logic for yacc files.
1993-03-16 Francesco Potort,Al(B (pot@cnuce.cnr.it)
* etags.c (C_entries): ':' case moved to the second switch.
- (C_entries): do not examine token if structdef==scolonseen.
+ (C_entries): Do not examine token if structdef==scolonseen.
(consider_token): structtag set to null string for enum.
1993-03-12 Francesco Potort,Al(B (pot@cnuce.cnr.it)
- * etags.c (GET_COOKIE): and related macros removed.
- (logical): is now int, no more a char.
- (reg): define deleted.
- (isgood, _gd, notgd): deleted.
- (gotone): deleted.
- (TOKEN): member linestart removed.
- (linepos, prev_linepos, lb1): deleted.
- (main): call initbuffer on lbs array instead of lb1.
- (init): removed the initialisation of the logical _gd array;
- (find_entries): a .sa suffix means assembler file.
+ * etags.c (GET_COOKIE): And related macros removed.
+ (logical): Is now int, no more a char.
+ (reg): Define deleted.
+ (isgood, _gd, notgd): Deleted.
+ (gotone): Deleted.
+ (TOKEN): Member linestart removed.
+ (linepos, prev_linepos, lb1): Deleted.
+ (main): Call initbuffer on lbs array instead of lb1.
+ (init): Removed the initialisation of the logical _gd array;
+ (find_entries): A .sa suffix means assembler file.
(C_create_stab): "auto", "void", "extern", "static" are st_C_typespec.
All C state machines rewritten.
- (C_entries): complete rewrite.
- (condider_token): complete rewrite.
- (getline): deleted.
+ (C_entries): Complete rewrite.
+ (condider_token): Complete rewrite.
+ (getline): Deleted.
1993-03-01 Francesco Potort,Al(B (pot@fly.CNUCE.CNR.IT)
@@ -5369,7 +5501,7 @@
1993-03-19 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
- * Makefile.in (EXECUTABLES): added rcs-checkin.
+ * Makefile.in (EXECUTABLES): Added rcs-checkin.
* Makefile.in (unlock, relock): New productions.
@@ -5652,7 +5784,7 @@
1992-05-04 Jim Blandy (jimb@pogo.cs.oberlin.edu)
- * Makefile.in: flags in CC invocations rearranged for no reason.
+ * Makefile.in: Flags in CC invocations rearranged for no reason.
1992-04-20 Jim Blandy (jimb@pogo.cs.oberlin.edu)
@@ -6065,13 +6197,13 @@
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.
+ * emacsstool.1: Update to document environment variables.
1989-02-21 Richard Stallman (rms@sugar-bombs.ai.mit.edu)
@@ -6172,7 +6304,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)
@@ -6255,7 +6387,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)
@@ -6266,9 +6398,9 @@
1988-03-20 Richard M. Stallman (rms@wilson)
- * server.c [not BSD and not HAVE_SYSVIPC]: fix error message.
+ * server.c [not BSD and not HAVE_SYSVIPC]: Fix error message.
- * loadst.c (main) [XENIX]: use /usr/spool/mail, not /usr/mail.
+ * loadst.c (main) [XENIX]: Use /usr/spool/mail, not /usr/mail.
;; Local Variables:
;; coding: iso-2022-7bit
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 5d8da71dbdd..91074d3ccb1 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -122,9 +122,6 @@ SCRIPTS= rcs2log vcdiff
EXECUTABLES= ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}
-SOURCES = COPYING ChangeLog Makefile.in README emacs.csh \
- makedoc.com *.[chy] rcs2log vcdiff
-
# Additional -D flags for movemail (add to MOVE_FLAGS if desired):
# MAIL_USE_POP Support mail retrieval from a POP mailbox.
# MAIL_USE_MMDF Support MMDF mailboxes.
@@ -368,12 +365,6 @@ maintainer-clean: distclean
extraclean: maintainer-clean
-rm -f *~ \#*
-unlock:
- chmod u+w $(SOURCES)
-
-relock:
- chmod u-w $(SOURCES)
-
/* Test the contents of the directory. */
check:
@echo "We don't have any tests for GNU Emacs yet."
@@ -471,24 +462,3 @@ update-game-score${EXEEXT}: update-game-score.o $(GETOPTDEPS)
update-game-score.o: ${srcdir}/update-game-score.c ../src/config.h $(GETOPT_H)
$(CC) -c ${CPP_CFLAGS} ${srcdir}/update-game-score.c \
-DHAVE_SHARED_GAME_DIR="\"$(gamedir)\""
-
-/* These are NOT included in INSTALLABLES or UTILITIES.
- See ../src/Makefile.in. */
-emacstool${EXEEXT}: ${srcdir}/emacstool.c
- $(CC) ${srcdir}/emacstool.c -o emacstool ${ALL_CFLAGS} \
- -lsuntool -lsunwindow -lpixrect $(LOADLIBES)
-
-/* For SUN Japanese Language Environment. */
-nemacstool${EXEEXT}: ${srcdir}/emacstool.c
- $(CC) -o nemacstool -DJLE ${ALL_CFLAGS} ${srcdir}/emacstool.c \
- -lsuntool -lmle -lsunwindow -lpixrect $(LOADLIBES)
-
-xvetool${EXEEXT}: ${srcdir}/emacstool.c
- $(CC) -o xvetool -DXVIEW ${ALL_CFLAGS} ${srcdir}/emacstool.c \
- -lxview -lX -I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib \
- $(LOADLIBES)
-
-xveterm${EXEEXT}: ${srcdir}/emacstool.c
- $(CC) -o xveterm -DXVIEW -DTTERM ${ALL_CFLAGS} ${srcdir}/emacstool.c \
- -lxview -lolgx -lX -I$(OPENWINHOME)/include -L$(OPENWINHOME)/lib \
- $(LOADLIBES)
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index d51712c41c4..acc322d638a 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -77,7 +77,12 @@ Boston, MA 02110-1301, USA. */
# include <pwd.h>
#endif /* not WINDOWSNT */
#endif /* not VMS */
+#include <sys/stat.h>
+#include <signal.h>
+#include <errno.h>
+
+
char *getenv (), *getwd ();
char *(getcwd) ();
@@ -92,8 +97,6 @@ char *w32_getenv ();
#define VERSION "unspecified"
#endif
-#define SEND_STRING(data) (send_to_emacs (s, (data)))
-#define SEND_QUOTED(data) (quote_file_name (s, (data)))
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
@@ -118,15 +121,27 @@ char *w32_getenv ();
/* Name used to invoke this program. */
char *progname;
+/* The second argument to main. */
+char **main_argv;
+
/* Nonzero means don't wait for a response from Emacs. --no-wait. */
int nowait = 0;
/* Nonzero means args are expressions to be evaluated. --eval. */
int eval = 0;
+/* Nonzero means don't open a new frame. Inverse of --create-frame. */
+int current_frame = 1;
+
+/* Nonzero means open a new graphical frame. */
+int window_system = 0;
+
/* The display on which Emacs should work. --display. */
char *display = NULL;
+/* Nonzero means open a new Emacs frame on the current terminal. */
+int tty = 0;
+
/* If non-NULL, the name of an editor to fallback to if the server
is not running. --alternate-editor. */
const char *alternate_editor = NULL;
@@ -148,6 +163,8 @@ struct option longopts[] =
{ "eval", no_argument, NULL, 'e' },
{ "help", no_argument, NULL, 'H' },
{ "version", no_argument, NULL, 'V' },
+ { "tty", no_argument, NULL, 't' },
+ { "create-frame", no_argument, NULL, 'c' },
{ "alternate-editor", required_argument, NULL, 'a' },
#ifndef NO_SOCKETS_IN_FILE_SYSTEM
{ "socket-name", required_argument, NULL, 's' },
@@ -173,7 +190,113 @@ xmalloc (size)
return result;
}
-/* Message functions. */
+/* Like strdup but get a fatal error if memory is exhausted. */
+
+char *
+xstrdup (const char *s)
+{
+ char *result = strdup (s);
+ if (result == NULL)
+ {
+ perror ("strdup");
+ exit (EXIT_FAILURE);
+ }
+ return result;
+}
+
+/* From sysdep.c */
+#if !defined (HAVE_GET_CURRENT_DIR_NAME) || defined (BROKEN_GET_CURRENT_DIR_NAME)
+
+/* From lisp.h */
+#ifndef DIRECTORY_SEP
+#define DIRECTORY_SEP '/'
+#endif
+#ifndef IS_DIRECTORY_SEP
+#define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
+#endif
+#ifndef IS_DEVICE_SEP
+#ifndef DEVICE_SEP
+#define IS_DEVICE_SEP(_c_) 0
+#else
+#define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP)
+#endif
+#endif
+#ifndef IS_ANY_SEP
+#define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_))
+#endif
+
+
+/* Return the current working directory. Returns NULL on errors.
+ Any other returned value must be freed with free. This is used
+ only when get_current_dir_name is not defined on the system. */
+char*
+get_current_dir_name ()
+{
+ char *buf;
+ char *pwd;
+ struct stat dotstat, pwdstat;
+ /* If PWD is accurate, use it instead of calling getwd. PWD is
+ sometimes a nicer name, and using it may avoid a fatal error if a
+ parent directory is searchable but not readable. */
+ if ((pwd = egetenv ("PWD")) != 0
+ && (IS_DIRECTORY_SEP (*pwd) || (*pwd && IS_DEVICE_SEP (pwd[1])))
+ && stat (pwd, &pwdstat) == 0
+ && stat (".", &dotstat) == 0
+ && dotstat.st_ino == pwdstat.st_ino
+ && dotstat.st_dev == pwdstat.st_dev
+#ifdef MAXPATHLEN
+ && strlen (pwd) < MAXPATHLEN
+#endif
+ )
+ {
+ buf = (char *) xmalloc (strlen (pwd) + 1);
+ if (!buf)
+ return NULL;
+ strcpy (buf, pwd);
+ }
+#ifdef HAVE_GETCWD
+ else
+ {
+ size_t buf_size = 1024;
+ buf = (char *) xmalloc (buf_size);
+ if (!buf)
+ return NULL;
+ for (;;)
+ {
+ if (getcwd (buf, buf_size) == buf)
+ break;
+ if (errno != ERANGE)
+ {
+ int tmp_errno = errno;
+ free (buf);
+ errno = tmp_errno;
+ return NULL;
+ }
+ buf_size *= 2;
+ buf = (char *) realloc (buf, buf_size);
+ if (!buf)
+ return NULL;
+ }
+ }
+#else
+ else
+ {
+ /* We need MAXPATHLEN here. */
+ buf = (char *) xmalloc (MAXPATHLEN + 1);
+ if (!buf)
+ return NULL;
+ if (getwd (buf) == NULL)
+ {
+ int tmp_errno = errno;
+ free (buf);
+ errno = tmp_errno;
+ return NULL;
+ }
+ }
+#endif
+ return buf;
+}
+#endif
#ifdef WINDOWSNT
@@ -279,8 +402,44 @@ w32_window_app ()
return window_app;
}
-#endif
+/*
+ execvp wrapper for Windows. Quotes arguments with embedded spaces.
+
+ This is necessary due to the broken implementation of exec* routines in
+ the Microsoft libraries: they concatenate the arguments together without
+ quoting special characters, and pass the result to CreateProcess, with
+ predictably bad results. By contrast, Posix execvp passes the arguments
+ directly into the argv array of the child process.
+*/
+int
+w32_execvp (path, argv)
+ char *path;
+ char **argv;
+{
+ int i;
+
+ /* Required to allow a .BAT script as alternate editor. */
+ argv[0] = (char *) alternate_editor;
+
+ for (i = 0; argv[i]; i++)
+ if (strchr (argv[i], ' '))
+ {
+ char *quoted = alloca (strlen (argv[i]) + 3);
+ sprintf (quoted, "\"%s\"", argv[i]);
+ argv[i] = quoted;
+ }
+
+ return execvp (path, argv);
+}
+
+#undef execvp
+#define execvp w32_execvp
+
+#endif /* WINDOWSNT */
+
+/* Display a normal or error message.
+ On Windows, use a message box if compiled as a Windows app. */
void
message (int is_error, char *message, ...)
{
@@ -318,16 +477,19 @@ decode_options (argc, argv)
char **argv;
{
alternate_editor = egetenv ("ALTERNATE_EDITOR");
+ display = egetenv ("DISPLAY");
+ if (display && strlen (display) == 0)
+ display = NULL;
while (1)
{
int opt = getopt_long (argc, argv,
#ifndef NO_SOCKETS_IN_FILE_SYSTEM
- "VHnea:s:f:d:",
+ "VHnea:s:f:d:tc",
#else
- "VHnea:f:d:",
+ "VHnea:f:d:tc",
#endif
- longopts, 0);
+ longopts, 0);
if (opt == EOF)
break;
@@ -370,6 +532,15 @@ decode_options (argc, argv)
exit (EXIT_SUCCESS);
break;
+ case 't':
+ tty = 1;
+ current_frame = 0;
+ break;
+
+ case 'c':
+ current_frame = 0;
+ break;
+
case 'H':
print_help_and_exit ();
break;
@@ -380,21 +551,49 @@ decode_options (argc, argv)
break;
}
}
+
+ if (!tty && display)
+ window_system = 1;
+#if !defined (WINDOWSNT) && !defined (HAVE_CARBON)
+ else
+ tty = 1;
+#endif
+
+ /* --no-wait implies --current-frame on ttys when there are file
+ arguments or expressions given. */
+ if (nowait && tty && argc - optind > 0)
+ current_frame = 1;
+
+ if (current_frame)
+ {
+ tty = 0;
+ window_system = 0;
+ }
+
+ if (tty)
+ window_system = 0;
}
+
void
print_help_and_exit ()
{
+ /* Spaces and tabs are significant in this message; they're chosen so the
+ message aligns properly both in a tty and in a Windows message box.
+ Please try to preserve them; otherwise the output is very hard to read
+ when using emacsclientw. */
message (FALSE,
- "Usage: %s [OPTIONS] FILE...\n\
+ "Usage: %s [OPTIONS] FILE...\n\
Tell the Emacs server to visit the specified files.\n\
Every FILE can be either just a FILENAME or [+LINE[:COLUMN]] FILENAME.\n\
\n\
The following OPTIONS are accepted:\n\
-\n\
-V, --version Just print version info and return\n\
--H, --help Print this usage information message\n\
--e, --eval Evaluate FILE arguments as Lisp expressions\n\
+-H, --help Print this usage information message\n\
+-t, --tty Open a new Emacs frame on the current terminal\n\
+-c, --create-frame Create a new frame instead of trying to\n\
+ use the current Emacs frame\n\
+-e, --eval Evaluate the FILE arguments as ELisp expressions\n\
-n, --no-wait Don't wait for the server to return\n\
-d, --display=DISPLAY Visit the file in the given display\n"
#ifndef NO_SOCKETS_IN_FILE_SYSTEM
@@ -404,66 +603,27 @@ The following OPTIONS are accepted:\n\
"-f, --server-file=FILENAME\n\
Set filename of the TCP authentication file\n\
-a, --alternate-editor=EDITOR\n\
- Editor to fallback to if server is not running\n\
+ Editor to fallback to if the server is not running\n\
\n\
Report bugs to bug-gnu-emacs@gnu.org.\n", progname);
exit (EXIT_SUCCESS);
}
-
-#ifdef WINDOWSNT
-
-/*
- execvp wrapper for Windows. Quotes arguments with embedded spaces.
-
- This is necessary due to the broken implementation of exec* routines in
- the Microsoft libraries: they concatenate the arguments together without
- quoting special characters, and pass the result to CreateProcess, with
- predictably bad results. By contrast, Posix execvp passes the arguments
- directly into the argv array of the child process.
-*/
-int
-w32_execvp (path, argv)
- char *path;
- char **argv;
-{
- int i;
-
- /* Required to allow a .BAT script as alternate editor. */
- argv[0] = (char *) alternate_editor;
-
- for (i = 0; argv[i]; i++)
- if (strchr (argv[i], ' '))
- {
- char *quoted = alloca (strlen (argv[i]) + 3);
- sprintf (quoted, "\"%s\"", argv[i]);
- argv[i] = quoted;
- }
-
- return execvp (path, argv);
-}
-
-#undef execvp
-#define execvp w32_execvp
-
-#endif /* WINDOWSNT */
-
/*
Try to run a different command, or --if no alternate editor is
defined-- exit with an errorcode.
+ Uses argv, but gets it from the global variable main_argv.
*/
void
-fail (argc, argv)
- int argc;
- char **argv;
+fail (void)
{
if (alternate_editor)
{
int i = optind - 1;
- execvp (alternate_editor, argv + i);
+ execvp (alternate_editor, main_argv + i);
message (TRUE, "%s: error executing alternate editor \"%s\"\n",
- progname, alternate_editor);
+ progname, alternate_editor);
}
exit (EXIT_FAILURE);
}
@@ -476,10 +636,12 @@ main (argc, argv)
int argc;
char **argv;
{
- message (TRUE, "%s: Sorry, the Emacs server is supported only\non systems with Berkely sockets.\n",
+ main_argv = argv;
+ progname = argv[0];
+ message (TRUE, "%s: Sorry, the Emacs server is supported only\n"
+ "on systems with Berkeley sockets.\n",
argv[0]);
-
- fail (argc, argv);
+ fail ();
}
#else /* HAVE_SOCKETS && HAVE_INET_SOCKETS */
@@ -490,8 +652,6 @@ main (argc, argv)
# include <sys/types.h>
# include <sys/socket.h>
# include <sys/un.h>
-# include <sys/stat.h>
-# include <errno.h>
#endif
#define AUTH_KEY_LENGTH 64
@@ -503,6 +663,8 @@ extern int errno;
/* Buffer to accumulate data to send in TCP connections. */
char send_buffer[SEND_BUFFER_SIZE + 1];
int sblen = 0; /* Fill pointer for the send buffer. */
+/* Socket used to communicate with the Emacs server process. */
+HSOCKET emacs_socket = 0;
/* On Windows, the socket library was historically separate from the standard
C library, so errors are handled differently. */
@@ -566,18 +728,21 @@ send_to_emacs (s, data)
}
}
-/* In NAME, insert a & before each &, each space, each newline, and
+
+/* In STR, insert a & before each &, each space, each newline, and
any initial -. Change spaces to underscores, too, so that the
- return value never contains a space. */
+ return value never contains a space.
+
+ Does not change the string. Outputs the result to STREAM. */
void
-quote_file_name (s, name)
+quote_argument (s, str)
HSOCKET s;
- char *name;
+ char *str;
{
- char *copy = (char *) xmalloc (strlen (name) * 2 + 1);
+ char *copy = (char *) xmalloc (strlen (str) * 2 + 1);
char *p, *q;
- p = name;
+ p = str;
q = copy;
while (*p)
{
@@ -595,18 +760,54 @@ quote_file_name (s, name)
}
else
{
- if (*p == '&' || (*p == '-' && p == name))
+ if (*p == '&' || (*p == '-' && p == str))
*q++ = '&';
*q++ = *p++;
}
}
*q++ = 0;
- SEND_STRING (copy);
+ send_to_emacs (s, copy);
free (copy);
}
+
+/* The inverse of quote_argument. Removes quoting in string STR by
+ modifying the string in place. Returns STR. */
+
+char *
+unquote_argument (str)
+ char *str;
+{
+ char *p, *q;
+
+ if (! str)
+ return str;
+
+ p = str;
+ q = str;
+ while (*p)
+ {
+ if (*p == '&')
+ {
+ p++;
+ if (*p == '&')
+ *p = '&';
+ else if (*p == '_')
+ *p = ' ';
+ else if (*p == 'n')
+ *p = '\n';
+ else if (*p == '-')
+ *p = '-';
+ }
+ *q++ = *p++;
+ }
+ *q = 0;
+ return str;
+}
+
+
int
file_name_absolute_p (filename)
const unsigned char *filename;
@@ -688,6 +889,7 @@ initialize_sockets ()
atexit (close_winsock);
}
#endif /* WINDOWSNT */
+
/*
* Read the information needed to set up a TCP comm channel with
@@ -798,13 +1000,22 @@ set_tcp_socket ()
*/
auth_string[AUTH_KEY_LENGTH] = '\0';
- SEND_STRING ("-auth ");
- SEND_STRING (auth_string);
- SEND_STRING ("\n");
+ send_to_emacs (s, "-auth ");
+ send_to_emacs (s, auth_string);
+ send_to_emacs (s, "\n");
return s;
}
+
+/* Returns 1 if PREFIX is a prefix of STRING. */
+static int
+strprefix (char *prefix, char *string)
+{
+ return !strncmp (prefix, string, strlen (prefix));
+}
+
+
#if !defined (NO_SOCKETS_IN_FILE_SYSTEM)
/* Three possibilities:
@@ -827,6 +1038,93 @@ socket_status (socket_name)
return 0;
}
+
+/* A signal handler that passes the signal to the Emacs process.
+ Useful for SIGWINCH. */
+
+SIGTYPE
+pass_signal_to_emacs (int signalnum)
+{
+ int old_errno = errno;
+
+ if (emacs_pid)
+ kill (emacs_pid, signalnum);
+
+ signal (signalnum, pass_signal_to_emacs);
+ errno = old_errno;
+}
+
+/* Signal handler for SIGCONT; notify the Emacs process that it can
+ now resume our tty frame. */
+
+SIGTYPE
+handle_sigcont (int signalnum)
+{
+ int old_errno = errno;
+
+ if (tcgetpgrp (1) == getpgrp ())
+ {
+ /* We are in the foreground. */
+ send_to_emacs (emacs_socket, "-resume \n");
+ }
+ else
+ {
+ /* We are in the background; cancel the continue. */
+ kill (getpid (), SIGSTOP);
+ }
+
+ signal (signalnum, handle_sigcont);
+ errno = old_errno;
+}
+
+/* Signal handler for SIGTSTP; notify the Emacs process that we are
+ going to sleep. Normally the suspend is initiated by Emacs via
+ server-handle-suspend-tty, but if the server gets out of sync with
+ reality, we may get a SIGTSTP on C-z. Handling this signal and
+ notifying Emacs about it should get things under control again. */
+
+SIGTYPE
+handle_sigtstp (int signalnum)
+{
+ int old_errno = errno;
+ sigset_t set;
+
+ if (emacs_socket)
+ send_to_emacs (emacs_socket, "-suspend \n");
+
+ /* Unblock this signal and call the default handler by temprarily
+ changing the handler and resignalling. */
+ sigprocmask (SIG_BLOCK, NULL, &set);
+ sigdelset (&set, signalnum);
+ signal (signalnum, SIG_DFL);
+ kill (getpid (), signalnum);
+ sigprocmask (SIG_SETMASK, &set, NULL); /* Let's the above signal through. */
+ signal (signalnum, handle_sigtstp);
+
+ errno = old_errno;
+}
+/* Set up signal handlers before opening a frame on the current tty. */
+
+void
+init_signals (void)
+{
+ /* Set up signal handlers. */
+ signal (SIGWINCH, pass_signal_to_emacs);
+
+ /* Don't pass SIGINT and SIGQUIT to Emacs, because it has no way of
+ deciding which terminal the signal came from. C-g is now a
+ normal input event on secondary terminals. */
+#if 0
+ signal (SIGINT, pass_signal_to_emacs);
+ signal (SIGQUIT, pass_signal_to_emacs);
+#endif
+
+ signal (SIGCONT, handle_sigcont);
+ signal (SIGTSTP, handle_sigtstp);
+ signal (SIGTTOU, handle_sigtstp);
+}
+
+
HSOCKET
set_local_socket ()
{
@@ -848,30 +1146,30 @@ set_local_socket ()
{
int sock_status = 0;
int default_sock = !socket_name;
- int saved_errno;
+ int saved_errno = 0;
char *server_name = "server";
if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\'))
{ /* socket_name is a file name component. */
- server_name = socket_name;
- socket_name = NULL;
- default_sock = 1; /* Try both UIDs. */
+ server_name = socket_name;
+ socket_name = NULL;
+ default_sock = 1; /* Try both UIDs. */
}
if (default_sock)
{
- socket_name = alloca (100 + strlen (server_name));
- sprintf (socket_name, "/tmp/emacs%d/%s",
- (int) geteuid (), server_name);
+ socket_name = alloca (100 + strlen (server_name));
+ sprintf (socket_name, "/tmp/emacs%d/%s",
+ (int) geteuid (), server_name);
}
if (strlen (socket_name) < sizeof (server.sun_path))
strcpy (server.sun_path, socket_name);
else
{
- message (TRUE, "%s: socket-name %s too long",
- progname, socket_name);
- exit (EXIT_FAILURE);
+ message (TRUE, "%s: socket-name %s too long",
+ progname, socket_name);
+ fail ();
}
/* See if the socket exists, and if it's owned by us. */
@@ -910,7 +1208,7 @@ set_local_socket ()
}
sock_status = socket_status (server.sun_path);
- saved_errno = errno;
+ saved_errno = errno;
}
else
errno = saved_errno;
@@ -920,26 +1218,26 @@ set_local_socket ()
switch (sock_status)
{
case 1:
- /* There's a socket, but it isn't owned by us. This is OK if
- we are root. */
- if (0 != geteuid ())
- {
- message (TRUE, "%s: Invalid socket owner\n", progname);
+ /* There's a socket, but it isn't owned by us. This is OK if
+ we are root. */
+ if (0 != geteuid ())
+ {
+ message (TRUE, "%s: Invalid socket owner\n", progname);
return INVALID_SOCKET;
- }
- break;
+ }
+ break;
case 2:
- /* `stat' failed */
- if (saved_errno == ENOENT)
- message (TRUE,
- "%s: can't find socket; have you started the server?\n\
+ /* `stat' failed */
+ if (saved_errno == ENOENT)
+ message (TRUE,
+ "%s: can't find socket; have you started the server?\n\
To start the server in Emacs, type \"M-x server-start\".\n",
progname);
- else
- message (TRUE, "%s: can't stat %s: %s\n",
+ else
+ message (TRUE, "%s: can't stat %s: %s\n",
progname, server.sun_path, strerror (saved_errno));
- return INVALID_SOCKET;
+ return INVALID_SOCKET;
}
}
@@ -967,10 +1265,9 @@ set_socket ()
{
s = set_local_socket ();
if ((s != INVALID_SOCKET) || alternate_editor)
- return s;
-
+ return s;
message (TRUE, "%s: error accessing socket \"%s\"",
- progname, socket_name);
+ progname, socket_name);
exit (EXIT_FAILURE);
}
#endif
@@ -983,10 +1280,10 @@ set_socket ()
{
s = set_tcp_socket ();
if ((s != INVALID_SOCKET) || alternate_editor)
- return s;
+ return s;
message (TRUE, "%s: error accessing server file \"%s\"",
- progname, server_file);
+ progname, server_file);
exit (EXIT_FAILURE);
}
@@ -1075,129 +1372,264 @@ main (argc, argv)
int argc;
char **argv;
{
- HSOCKET s;
int i, rl, needlf = 0;
- char *cwd;
+ char *cwd, *str;
char string[BUFSIZ+1];
+ main_argv = argv;
progname = argv[0];
/* Process options. */
decode_options (argc, argv);
- if ((argc - optind < 1) && !eval)
+ if ((argc - optind < 1) && !eval && !tty && !window_system)
{
- message (TRUE, "%s: file name or argument required\nTry `%s --help' for more information\n",
- progname, progname);
+ message (TRUE, "%s: file name or argument required\n"
+ "Try `%s --help' for more information\n",
+ progname, progname);
exit (EXIT_FAILURE);
}
- if ((s = set_socket ()) == INVALID_SOCKET)
- fail (argc, argv);
+ if ((emacs_socket = set_socket ()) == INVALID_SOCKET)
+ fail ();
-#ifdef HAVE_GETCWD
- cwd = getcwd (string, sizeof string);
-#else
- cwd = getwd (string);
-#endif
+
+ cwd = get_current_dir_name ();
if (cwd == 0)
{
/* getwd puts message in STRING if it fails. */
- message (TRUE, "%s: %s (%s)\n", progname,
-#ifdef HAVE_GETCWD
- "Cannot get current working directory",
-#else
- string,
-#endif
- strerror (errno));
- fail (argc, argv);
+ message (TRUE, "%s: %s\n", progname,
+ "Cannot get current working directory");
+ fail ();
}
#ifdef WINDOWSNT
w32_give_focus ();
#endif
+ /* Send over our environment. */
+ if (!current_frame)
+ {
+ extern char **environ;
+ int i;
+ for (i = 0; environ[i]; i++)
+ {
+ char *name = xstrdup (environ[i]);
+ char *value = strchr (name, '=');
+ send_to_emacs (emacs_socket, "-env ");
+ quote_argument (emacs_socket, environ[i]);
+ send_to_emacs (emacs_socket, " ");
+ }
+ }
+
+ /* Send over our current directory. */
+ if (!current_frame)
+ {
+ send_to_emacs (emacs_socket, "-dir ");
+ quote_argument (emacs_socket, cwd);
+ send_to_emacs (emacs_socket, "/");
+ send_to_emacs (emacs_socket, " ");
+ }
+
+ retry:
if (nowait)
- SEND_STRING ("-nowait ");
+ send_to_emacs (emacs_socket, "-nowait ");
- if (eval)
- SEND_STRING ("-eval ");
+ if (current_frame)
+ send_to_emacs (emacs_socket, "-current-frame ");
if (display)
{
- SEND_STRING ("-display ");
- SEND_QUOTED (display);
- SEND_STRING (" ");
+ send_to_emacs (emacs_socket, "-display ");
+ quote_argument (emacs_socket, display);
+ send_to_emacs (emacs_socket, " ");
+ }
+
+ if (tty)
+ {
+ char *type = egetenv ("TERM");
+ char *tty_name = NULL;
+#ifndef WINDOWSNT
+ tty_name = ttyname (fileno (stdin));
+#endif
+
+ if (! tty_name)
+ {
+ message (TRUE, "%s: could not get terminal name\n", progname);
+ fail ();
+ }
+
+ if (! type)
+ {
+ message (TRUE, "%s: please set the TERM variable to your terminal type\n",
+ progname);
+ fail ();
+ }
+
+ if (! strcmp (type, "eterm"))
+ {
+ /* This causes nasty, MULTI_KBOARD-related input lockouts. */
+ message (TRUE, "%s: opening a frame in an Emacs term buffer"
+ " is not supported\n", progname);
+ fail ();
+ }
+#if !defined (NO_SOCKETS_IN_FILE_SYSTEM)
+ init_signals ();
+#endif
+
+ send_to_emacs (emacs_socket, "-tty ");
+ quote_argument (emacs_socket, tty_name);
+ send_to_emacs (emacs_socket, " ");
+ quote_argument (emacs_socket, type);
+ send_to_emacs (emacs_socket, " ");
}
+ if (window_system)
+ send_to_emacs (emacs_socket, "-window-system ");
+
if ((argc - optind > 0))
{
for (i = optind; i < argc; i++)
{
+ int relative = 0;
+
if (eval)
- ; /* Don't prepend any cwd or anything like that. */
- else if (*argv[i] == '+')
- {
+ {
+ /* Don't prepend cwd or anything like that. */
+ send_to_emacs (emacs_socket, "-eval ");
+ quote_argument (emacs_socket, argv[i]);
+ send_to_emacs (emacs_socket, " ");
+ continue;
+ }
+
+ if (*argv[i] == '+')
+ {
char *p = argv[i] + 1;
while (isdigit ((unsigned char) *p) || *p == ':') p++;
- if (*p != 0)
- {
- SEND_QUOTED (cwd);
- SEND_STRING ("/");
- }
- }
+ if (*p == 0)
+ {
+ send_to_emacs (emacs_socket, "-position ");
+ quote_argument (emacs_socket, argv[i]);
+ send_to_emacs (emacs_socket, " ");
+ continue;
+ }
+ else
+ relative = 1;
+ }
else if (! file_name_absolute_p (argv[i]))
- {
- SEND_QUOTED (cwd);
- SEND_STRING ("/");
- }
-
- SEND_QUOTED (argv[i]);
- SEND_STRING (" ");
- }
+ relative = 1;
+
+ send_to_emacs (emacs_socket, "-file ");
+ if (relative)
+ {
+ quote_argument (emacs_socket, cwd);
+ send_to_emacs (emacs_socket, "/");
+ }
+ quote_argument (emacs_socket, argv[i]);
+ send_to_emacs (emacs_socket, " ");
+ }
}
else
{
- while (fgets (string, BUFSIZ, stdin))
- {
- SEND_QUOTED (string);
- }
- SEND_STRING (" ");
+ if (!tty && !window_system)
+ {
+ while ((str = fgets (string, BUFSIZ, stdin)))
+ {
+ if (eval)
+ send_to_emacs (emacs_socket, "-eval ");
+ else
+ send_to_emacs (emacs_socket, "-file ");
+ quote_argument (emacs_socket, str);
+ }
+ send_to_emacs (emacs_socket, " ");
+ }
}
- SEND_STRING ("\n");
+ send_to_emacs (emacs_socket, "\n");
+
+ /* Wait for an answer. */
+ if (!eval && !tty && !nowait)
+ {
+ printf ("Waiting for Emacs...");
+ needlf = 2;
+ }
+ fflush (stdout);
+ fsync (1);
- /* Maybe wait for an answer. */
- if (!nowait)
+ /* Now, wait for an answer and print any messages. */
+ while ((rl = recv (emacs_socket, string, BUFSIZ, 0)) > 0)
{
- if (!eval)
+ char *p;
+ string[rl] = '\0';
+
+ p = string + strlen (string) - 1;
+ while (p > string && *p == '\n')
+ *p-- = 0;
+
+ if (strprefix ("-emacs-pid ", string))
{
- printf ("Waiting for Emacs...");
- needlf = 2;
+ /* -emacs-pid PID: The process id of the Emacs process. */
+ emacs_pid = strtol (string + strlen ("-emacs-pid"), NULL, 10);
}
- fflush (stdout);
-
- /* Now, wait for an answer and print any messages. */
- while ((rl = recv (s, string, BUFSIZ, 0)) > 0)
+ else if (strprefix ("-window-system-unsupported ", string))
{
- string[rl] = '\0';
- if (needlf == 2)
+ /* -window-system-unsupported: Emacs was compiled without X
+ support. Try again on the terminal. */
+ window_system = 0;
+ nowait = 0;
+ tty = 1;
+ goto retry;
+ }
+ else if (strprefix ("-print ", string))
+ {
+ /* -print STRING: Print STRING on the terminal. */
+ str = unquote_argument (string + strlen ("-print "));
+ if (needlf)
printf ("\n");
- printf ("%s", string);
- needlf = string[0] == '\0' ? needlf : string[strlen (string) - 1] != '\n';
+ printf ("%s", str);
+ needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
+ }
+ else if (strprefix ("-error ", string))
+ {
+ /* -error DESCRIPTION: Signal an error on the terminal. */
+ str = unquote_argument (string + strlen ("-error "));
+ if (needlf)
+ printf ("\n");
+ fprintf (stderr, "*ERROR*: %s", str);
+ needlf = str[0] == '\0' ? needlf : str[strlen (str) - 1] != '\n';
+ }
+#ifdef SIGSTOP
+ else if (strprefix ("-suspend ", string))
+ {
+ /* -suspend: Suspend this terminal, i.e., stop the process. */
+ if (needlf)
+ printf ("\n");
+ needlf = 0;
+ kill (0, SIGSTOP);
+ }
+#endif
+ else
+ {
+ /* Unknown command. */
+ if (needlf)
+ printf ("\n");
+ printf ("*ERROR*: Unknown message: %s", string);
+ needlf = string[0] == '\0' ? needlf : string[strlen (string) - 1] != '\n';
}
-
- if (needlf)
- printf ("\n");
- fflush (stdout);
}
- CLOSE_SOCKET (s);
+ if (needlf)
+ printf ("\n");
+ fflush (stdout);
+ fsync (1);
+
+ CLOSE_SOCKET (emacs_socket);
return EXIT_SUCCESS;
}
#endif /* HAVE_SOCKETS && HAVE_INET_SOCKETS */
+
#ifndef HAVE_STRERROR
char *
strerror (errnum)
diff --git a/lib-src/emacstool.c b/lib-src/emacstool.c
deleted file mode 100644
index 7b39d2ed8fd..00000000000
--- a/lib-src/emacstool.c
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- Copyright (C) 1986, 1988, 1990, 1991, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
-
-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 3, 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. */
-
-/*
- * For Emacs in SunView/Sun-Windows: (supported by Sun Unix v3.2 or greater)
- * Insert a notifier filter-function to convert all useful input
- * to "key" sequences that emacs can understand. See: Emacstool(1).
- *
- * Author: Jeff Peck, Sun Microsystems, Inc. <peck@eng.sun.com>
- *
- * Original Idea: Ian Batten
- * Updated 15-Mar-88, Jeff Peck: set IN_EMACSTOOL, TERM, TERMCAP
- * Updated 10-Sep-88, Jeff Peck: add XVIEW and JLE support
- * Updated 8-Oct-90, Jeff Peck: add Meta-bit for Xview
- * Updated 6-Mar-91, Jeff Peck: Hack to detect -Wt invocation
- * [note, TTYSW limitation means you must Click-To-Type in Openwin]
- * [fixed in OW3 or use local/tty.o]
- * for better results, this should move to using TERMSW.
- * Updated 10-Mar-91, Jeff Peck, et al: support for TERMSW (TTERM)
- * allows point-to-type even in OW2
- *
- * [note: xvetool should be started with the "-nw" flag for emacs!]
- */
-
-#ifdef XVIEW
-#include <xview/xview.h>
-#include <xview/panel.h>
-#include <xview/attr.h>
-#include <xview/tty.h>
-#include <xview/ttysw.h> /* private defines */
-#include <xview/termsw.h> /* -DTTERM */
-#include <xview/font.h> /* for testing */
-#else
-#include <suntool/sunview.h>
-#include <suntool/tty.h>
-#include <suntool/ttysw.h>
-#endif XVIEW
-
-#ifdef JLE
-# include <locale.h>
-#endif JLE
-
-#include <stdio.h>
-#include <sys/file.h>
-
-#define BUFFER_SIZE 128 /* Size of all the buffers */
-
-/* define WANT_CAPS_LOCK to make f-key T1 (aka F1) behave as CapsLock */
-#define WANT_CAPS_LOCK
-#ifdef WANT_CAPS_LOCK
-int caps_lock; /* toggle indicator for f-key T1 caps lock */
-static char *Caps = "[CAPS] "; /* Caps Lock prefix string */
-#define CAPS_LEN 7 /* strlen (Caps) */
-#endif
-
-static char *mouse_prefix = "\030\000"; /* C-x C-@ */
-static int m_prefix_length = 2; /* mouse_prefix length */
-
-static char *key_prefix = "\030*"; /* C-x * */
-static int k_prefix_length = 2; /* key_prefix length */
-
-#ifdef JLE
-static char *emacs_name = "nemacs"; /* default run command */
-static char *title = "NEmacstool - "; /* initial title */
-#else
-static char *emacs_name = "emacs"; /* default run command */
-static char *title = "Emacstool - "; /* initial title */
-#endif JLE
-
-static char buffer[BUFFER_SIZE]; /* send to ttysw_input */
-static char *bold_name = 0; /* for -bold option */
-
-Frame frame; /* Base frame for system */
-
-#ifndef TTERM
-#define SWTYPE TTY
-Tty tty_win; /* Where emacs is reading */
-#else
-#define SWTYPE TERMSW
-Termsw tty_win; /* Termsw does follow-mouse */
-#endif TTERM
-
-#ifdef XVIEW
-Xv_Window tty_view; /* Where the events are in Xview*/
-#else
-Tty tty_view; /* SunView place filler */
-#endif XVIEW
-
-int font_width, font_height; /* For translating pixels to chars */
-int left_margin = 0; /* default window -- frame offset */
-
-int console_fd = 0; /* for debugging: setenv DEBUGEMACSTOOL */
-FILE *console; /* for debugging: setenv DEBUGEMACSTOOL */
-
-Icon frame_icon;
-/* make an icon_image for the default frame_icon */
-static short default_image[258] =
-{
-#include <images/terminal.icon>
-};
-mpr_static(icon_image, 64, 64, 1, default_image);
-
-/*
- * Assign a value to a set of keys
- */
-int
-button_value (event)
- Event *event;
-{
- int retval = 0;
- /*
- * Code up the current situation:
- *
- * 1 = MS_LEFT;
- * 2 = MS_MIDDLE;
- * 4 = MS_RIGHT;
- * 8 = SHIFT;
- * 16 = CONTROL;
- * 32 = META;
- * 64 = DOUBLE;
- * 128 = UP;
- */
-
- if (MS_LEFT == (event_id (event))) retval = 1;
- if (MS_MIDDLE == (event_id (event))) retval = 2;
- if (MS_RIGHT == (event_id (event))) retval = 4;
-
- if (event_shift_is_down (event)) retval += 8;
- if (event_ctrl_is_down (event)) retval += 16;
- if (event_meta_is_down (event)) retval += 32;
- if (event_is_up (event)) retval += 128;
- return retval;
-}
-
-/*
- * Variables to store the time of the previous mouse event that was
- * sent to emacs.
- *
- * The theory is that to time double clicks while ignoring UP buttons,
- * we must keep track of the accumulated time.
- *
- * If someone writes a SUN-SET-INPUT-MASK for emacstool,
- * That could be used to selectively disable UP events,
- * and then this cruft wouldn't be necessary.
- */
-static long prev_event_sec = 0;
-static long prev_event_usec = 0;
-
-/*
- * Give the time difference in milliseconds, where one second
- * is considered infinite.
- */
-int
-time_delta (now_sec, now_usec, prev_sec, prev_usec)
- long now_sec, now_usec, prev_sec, prev_usec;
-{
- long sec_delta = now_sec - prev_sec;
- long usec_delta = now_usec - prev_usec;
-
- if (usec_delta < 0) { /* "borrow" a second */
- usec_delta += 1000000;
- --sec_delta;
- }
-
- if (sec_delta >= 10)
- return (9999); /* Infinity */
- else
- return ((sec_delta * 1000) + (usec_delta / 1000));
-}
-
-
-/*
- * Filter function to translate selected input events for emacs
- * Mouse button events become ^X^@(button x-col y-line time-delta) .
- * Function keys: ESC-*{c}{lrt} l,r,t for Left, Right, Top;
- * {c} encodes the keynumber as a character [a-o]
- */
-static Notify_value
-input_event_filter_function (window, event, arg, type)
-#ifdef XVIEW
- Xv_Window window;
-#else
- Window window;
-#endif XVIEW
- Event *event;
- Notify_arg arg;
- Notify_event_type type;
-{
- struct timeval time_stamp;
-
- if (console_fd) fprintf(console, "Event: %d\n", event_id(event));
-
- /* UP L1 is the STOP key */
- if (event_id(event) == WIN_STOP) {
- ttysw_input(tty_win, "\007\007\007\007\007\007\007", 7);
- return NOTIFY_IGNORED;
- }
-
- /* UP L5 & L7 is Expose & Open, let them pass to sunview */
- if (event_id(event) == KEY_LEFT(5) || event_id(event) == KEY_LEFT(7))
- if(event_is_up (event))
- return notify_next_event_func (window, event, arg, type);
- else return NOTIFY_IGNORED;
-
- if (event_is_button (event)) { /* do Mouse Button events */
-/* Commented out so that we send mouse up events too.
- if (event_is_up (event))
- return notify_next_event_func (window, event, arg, type);
-*/
- time_stamp = event_time (event);
- ttysw_input (tty_win, mouse_prefix, m_prefix_length);
- sprintf (buffer, "(%d %d %d %d)\015",
- button_value (event),
- (event_x (event) - left_margin) / font_width,
- event_y (event) / font_height,
- time_delta (time_stamp.tv_sec, time_stamp.tv_usec,
- prev_event_sec, prev_event_usec)
- );
- ttysw_input (tty_win, buffer, strlen(buffer));
- prev_event_sec = time_stamp.tv_sec;
- prev_event_usec = time_stamp.tv_usec;
- return NOTIFY_IGNORED;
- }
-
- { /* Do the function key events */
- int d;
- char c = (char) 0;
- if ((event_is_key_left (event)) ?
- ((d = event_id(event) - KEY_LEFT(1) + 'a'), c='l') :
- ((event_is_key_right (event)) ?
- ((d = event_id(event) - KEY_RIGHT(1) + 'a'), c='r') :
- ((event_is_key_top (event)) ?
- ((d = event_id(event) - KEY_TOP(1) + 'a'), c='t') : 0)))
- {
- if (event_is_up(event)) return NOTIFY_IGNORED;
- if (event_shift_is_down (event)) c = c - 32;
- /* this will give a non-{lrt} for unshifted keys */
- if (event_ctrl_is_down (event)) c = c - 64;
- if (event_meta_is_down (event)) c = c + 128;
-#ifdef WANT_CAPS_LOCK
-/* set a toggle and relabel window so T1 can act like caps-lock */
- if (event_id(event) == KEY_TOP(1))
- {
- /* make a frame label with and without CAPS */
- strcpy (buffer, Caps);
- title = &buffer[CAPS_LEN];
- strncpy (title, (char *)window_get (frame, FRAME_LABEL),
- BUFFER_SIZE - CAPS_LEN);
- buffer[BUFFER_SIZE] = (char) 0;
- if (strncmp (title, Caps, CAPS_LEN) == 0)
- title += CAPS_LEN; /* already Caps */
- caps_lock = (caps_lock ? 0 : CAPS_LEN);
- window_set(frame, FRAME_LABEL, (title -= caps_lock), 0);
- return NOTIFY_IGNORED;
- }
-#endif
- ttysw_input (tty_win, key_prefix, k_prefix_length);
- sprintf (buffer, "%c%c", d, c);
- ttysw_input(tty_win, buffer, strlen(buffer));
-
- return NOTIFY_IGNORED;
- }
- }
- if ((event_is_ascii(event) || event_is_meta(event))
- && event_is_up(event)) return NOTIFY_IGNORED;
-#ifdef WANT_CAPS_LOCK
-/* shift alpha chars to upper case if toggle is set */
- if ((caps_lock) && event_is_ascii(event)
- && (event_id(event) >= 'a') && (event_id(event) <= 'z'))
- event_set_id(event, (event_id(event) - 32));
-/* crufty, but it works for now. is there an UPCASE(event)? */
-#endif
-#ifndef NO_META_BIT
-/* under Openwindows/X, the meta bit is not set in the key event,
- * emacs expects this so we add it in here:
- */
- if (event_is_ascii(event) && event_meta_is_down(event))
- event_set_id(event, 128 | event_id(event));
-#endif
- return notify_next_event_func (window, event, arg, type);
-}
-
-main (argc, argv)
- int argc;
- char **argv;
-{
- int error_code; /* Error codes */
-
-#ifdef JLE
- setlocale(LC_ALL, "");
-#endif JLE
-
- if(getenv("DEBUGEMACSTOOL"))
- console = fdopen (console_fd = open("/dev/console",O_WRONLY), "w");
-
- putenv("IN_EMACSTOOL=t"); /* notify subprocess that it is in emacstool */
-
- if (putenv("TERM=sun") != 0) /* TTY_WIN will be a TERM=sun window */
- {fprintf (stderr, "%s: Could not set TERM=sun, using `%s'\n",
- argv[0], (char *)getenv("TERM")) ;};
- /*
- * If TERMCAP starts with a slash, it is the pathname of the
- * termcap file, not an entry extracted from it, so KEEP it!
- * Otherwise, it may not relate to the new TERM, so Nuke-It.
- * If there is no TERMCAP environment variable, don't make one.
- */
- {
- char *termcap ; /* Current TERMCAP value */
- termcap = (char *)getenv("TERMCAP") ;
- if (termcap && (*termcap != '/'))
- {
- if (putenv("TERMCAP=") != 0)
- {fprintf (stderr, "%s: Could not clear TERMCAP\n", argv[0]) ;} ;
- } ;
- } ;
-
- /* find command to run as subprocess in window */
- if (!(argv[0] = (char *)getenv("EMACSTOOL"))) /* Set emacs command name */
- argv[0] = emacs_name;
- /* Emacstool recognizes two special args: -rc <file> and -bold <bold-name> */
- for (argc = 1; argv[argc]; argc++) /* Use last one on line */
- {
- if(!(strcmp ("-rc", argv[argc]))) /* Override if -rc given */
- {int i = argc;
- argv[argc--]=0; /* kill the -rc argument */
- if (argv[i+1]) { /* move to argv[0] and squeeze the rest */
- argv[0]=argv[i+1];
- for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0));
- }
- }
-
- if (!(strcmp ("-bold", argv[argc])))
- {int i = argc;
- argv[argc--]=0; /* kill the -bold argument */
- if (argv[i+1]) { /* move to bold_name and squeeze the rest */
- bold_name = argv[i+1];
- for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0));
- }
- }
- };
-
- strcpy (buffer, title);
- strncat (buffer, argv[0], /* append run command name */
- (BUFFER_SIZE - (strlen (buffer)) - (strlen (argv[0]))) - 1);
-
- error_code = interpose_on_window(argc,argv);
- if (error_code != 0) { /* Barf */
- fprintf (stderr, "notify_interpose_event_func returns %d.\n", error_code);
- exit (1);
- }
-
-#ifdef XVIEW
- xv_main_loop (frame); /* And away we go */
-#else
- window_main_loop (frame);
-#endif XVIEW
-}
-
-#ifdef XVIEW
-int interpose_on_window(argc,argv)
- int argc;
- char **argv;
-{
-#ifndef TTERM
- int i, font_width_adjust = 1; /* hackery, and heuristics */
- /* if -Wt is not supplied, then font comes out as lucida-14 (width=8)
- * rather than the screen.r.12 (width=7) typically used
- * this hack attempts to workaround it.
- * could use a env var EMACSTOOL_DEFAULT_FONT_WIDTH instead */
- for (i = 1; argv[i]; i++) {
- if (!(strcmp ("-Wt", argv[i])))
- {font_width_adjust = 0;
- if (console_fd) fprintf(console, "-Wt = %d\n", font_width_adjust);
- break;}
- }
-#endif TTERM
- /* initialize Xview, and strip window args */
- xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0);
-
- /* do this first, so arglist can override it */
- frame_icon = icon_create (ICON_LABEL, "Emacstool",
- ICON_IMAGE, &icon_image,
- 0);
-
- /* Build a frame to run in */
- frame = xv_create ((Xv_Window)NULL, FRAME,
- FRAME_LABEL, buffer,
- FRAME_ICON, frame_icon,
- 0);
-
- /* Create a tty with emacs in it */
- tty_win = xv_create (frame, SWTYPE, WIN_IS_CLIENT_PANE,
- TTY_QUIT_ON_CHILD_DEATH, TRUE,
- TTY_BOLDSTYLE, TTYSW_BOLD_INVERT,
- TTY_ARGV, argv,
- 0);
-
- if (bold_name) {
- (void)xv_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0);
- }
-
- {
- Xv_font font; /* declare temp font variable */
- font = (Xv_font)xv_get (tty_win, XV_FONT);
- font_height = (int)xv_get (font, FONT_DEFAULT_CHAR_HEIGHT);
- font_width = (int)xv_get (font, FONT_DEFAULT_CHAR_WIDTH);
- }
- if (console_fd) fprintf(console, "Width = %d\n", font_width);
-
-#ifndef TTERM
- font_width -= font_width_adjust; /* A guess! font bug in ttysw*/
-#else
- /* make the termsw act as a tty */
- xv_set(tty_win, TERMSW_MODE, TTYSW_MODE_TYPE, 0);
- /* termsw has variable offset depending on scrollbar size/location */
- left_margin = (int)xv_get (tty_win, TEXTSW_LEFT_MARGIN);
-#endif TTERM
-
- tty_view = (Xv_Window) xv_get (tty_win, OPENWIN_NTH_VIEW, 0);
- xv_set(tty_view,
- WIN_CONSUME_EVENTS,
- WIN_MOUSE_BUTTONS, WIN_UP_EVENTS,
- ACTION_ADJUST, ACTION_MENU,
- WIN_ASCII_EVENTS,
- WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS,
- 0,
- 0);
- /* Interpose my event function */
- return (int) notify_interpose_event_func
- (tty_view, input_event_filter_function, NOTIFY_SAFE);
-}
-#else
-int interpose_on_window (argc, argv)
- int argc;
- char **argv;
-{
- /* do this first, so arglist can override it */
- frame_icon = icon_create (ICON_LABEL, "Emacstool",
- ICON_IMAGE, &icon_image,
- 0);
-
- /* Build a frame to run in */
- frame = window_create ((Window)NULL, FRAME,
- FRAME_LABEL, buffer,
- FRAME_ICON, frame_icon,
- FRAME_ARGC_PTR_ARGV, &argc, argv,
- 0);
-
- /* Create a tty with emacs in it */
- tty_win = window_create (frame, TTY,
- TTY_QUIT_ON_CHILD_DEATH, TRUE,
- TTY_BOLDSTYLE, TTYSW_BOLD_INVERT,
- TTY_ARGV, argv,
- 0);
-
- if (bold_name) {
- (void)window_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0);
- }
-
- /* ttysw uses pf_default, one must set WIN_FONT explicitly */
- window_set (tty_win, WIN_FONT, pf_default(), 0);
- font_height = (int)window_get (tty_win, WIN_ROW_HEIGHT);
- font_width = (int)window_get (tty_win, WIN_COLUMN_WIDTH);
-
- tty_view = tty_win;
- window_set(tty_view,
- WIN_CONSUME_PICK_EVENTS,
- WIN_STOP,
- WIN_MOUSE_BUTTONS, WIN_UP_EVENTS,
- /* LOC_WINENTER, LOC_WINEXIT, LOC_MOVE, */
- 0,
- WIN_CONSUME_KBD_EVENTS,
- WIN_STOP,
- WIN_ASCII_EVENTS,
- WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS,
- /* WIN_UP_ASCII_EVENTS, */
- 0,
- 0);
- /* Interpose my event function */
- return (int) notify_interpose_event_func
- (tty_view, input_event_filter_function, NOTIFY_SAFE);
-}
-#endif XVIEW
-
-/* arch-tag: 7a2e7105-c059-418a-b3d9-5b5de96abb4e
- (do not change this comment) */
diff --git a/lib-src/etags.c b/lib-src/etags.c
index 47db26a5dd7..280399868d1 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -81,7 +81,7 @@ University of California, as described above. */
* configuration file containing regexp definitions for etags.
*/
-char pot_etags_version[] = "@(#) pot revision number is 17.26";
+char pot_etags_version[] = "@(#) pot revision number is 17.38";
#define TRUE 1
#define FALSE 0
@@ -160,7 +160,20 @@ char pot_etags_version[] = "@(#) pot revision number is 17.26";
# include <stdlib.h>
# include <string.h>
# else /* no standard C headers */
- extern char *getenv ();
+ extern char *getenv __P((const char *));
+ extern char *strcpy __P((char *, const char *));
+ extern char *strncpy __P((char *, const char *, unsigned long));
+ extern char *strcat __P((char *, const char *));
+ extern char *strncat __P((char *, const char *, unsigned long));
+ extern int strcmp __P((const char *, const char *));
+ extern int strncmp __P((const char *, const char *, unsigned long));
+ extern int system __P((const char *));
+ extern unsigned long strlen __P((const char *));
+ extern void *malloc __P((unsigned long));
+ extern void *realloc __P((void *, unsigned long));
+ extern void exit __P((int));
+ extern void free __P((void *));
+ extern void *memmove __P((void *, const void *, unsigned long));
# ifdef VMS
# define EXIT_SUCCESS 1
# define EXIT_FAILURE 0
@@ -484,7 +497,7 @@ static char
*midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789";
static bool append_to_tagfile; /* -a: append to tags */
-/* The next four default to TRUE for etags, but to FALSE for ctags. */
+/* The next five default to TRUE in C and derived languages. */
static bool typedefs; /* -t: create tags for C and Ada typedefs */
static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */
/* 0 struct/enum/union decls, and C++ */
@@ -876,18 +889,25 @@ etags --help --lang=ada.");
# define EMACS_NAME "standalone"
#endif
#ifndef VERSION
-# define VERSION "17.26"
+# define VERSION "17.38"
#endif
static void
print_version ()
{
+ /* Makes it easier to update automatically. */
+ char emacs_copyright[] = "Copyright (C) 2007 Free Software Foundation, Inc.";
+
printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, VERSION);
- puts ("Copyright (C) 2007 Free Software Foundation, Inc.");
+ puts (emacs_copyright);
puts ("This program is distributed under the terms in ETAGS.README");
exit (EXIT_SUCCESS);
}
+#ifndef PRINT_UNDOCUMENTED_OPTIONS_HELP
+# define PRINT_UNDOCUMENTED_OPTIONS_HELP FALSE
+#endif
+
static void
print_help (argbuffer)
argument *argbuffer;
@@ -970,7 +990,16 @@ Relative ones are stored relative to the output file's directory.\n");
puts ("--no-globals\n\
Do not create tag entries for global variables in some\n\
languages. This makes the tags file smaller.");
- puts ("--no-members\n\
+
+ if (PRINT_UNDOCUMENTED_OPTIONS_HELP)
+ puts ("--no-line-directive\n\
+ Ignore #line preprocessor directives in C and derived languages.");
+
+ if (CTAGS)
+ puts ("--members\n\
+ Create tag entries for members of structures in some languages.");
+ else
+ puts ("--no-members\n\
Do not create tag entries for members of structures\n\
in some languages.");
@@ -986,13 +1015,17 @@ Relative ones are stored relative to the output file's directory.\n");
MODS are optional one-letter modifiers: `i' means to ignore case,\n\
`m' means to allow multi-line matches, `s' implies `m' and\n\
causes dot to match any character, including newline.");
+
puts ("-R, --no-regex\n\
Don't create tags from regexps for the following files.");
+
puts ("-I, --ignore-indentation\n\
In C and C++ do not assume that a closing brace in the first\n\
column is the final brace of a function or structure definition.");
+
puts ("-o FILE, --output=FILE\n\
Write the tags to FILE.");
+
puts ("--parse-stdin=NAME\n\
Read from standard input and record tags as belonging to file NAME.");
@@ -1020,13 +1053,16 @@ Relative ones are stored relative to the output file's directory.\n");
Print on the standard output an index of items intended for\n\
human consumption, similar to the output of vgrind. The index\n\
is sorted, and gives the page number of each item.");
-# if PRINT_UNDOCUMENTED_OPTIONS_HELP
- puts ("-w, --no-duplicates\n\
+
+ if (PRINT_UNDOCUMENTED_OPTIONS_HELP)
+ puts ("-w, --no-duplicates\n\
Do not create duplicate tag entries, for compatibility with\n\
traditional ctags.");
- puts ("-w, --no-warn\n\
+
+ if (PRINT_UNDOCUMENTED_OPTIONS_HELP)
+ puts ("-w, --no-warn\n\
Suppress warning messages about duplicate tag entries.");
-# endif /* PRINT_UNDOCUMENTED_OPTIONS_HELP */
+
puts ("-x, --cxref\n\
Like --vgrind, but in the style of cxref, rather than vgrind.\n\
The output uses line numbers instead of page numbers, but\n\
@@ -1209,15 +1245,12 @@ main (argc, argv)
argbuffer = xnew (argc, argument);
/*
- * If etags, always find typedefs and structure tags. Why not?
+ * Always find typedefs and structure tags.
* Also default to find macro constants, enum constants, struct
- * members and global variables.
+ * members and global variables. Do it for both etags and ctags.
*/
- if (!CTAGS)
- {
- typedefs = typedefs_or_cplusplus = constantypedefs = TRUE;
- globals = TRUE;
- }
+ typedefs = typedefs_or_cplusplus = constantypedefs = TRUE;
+ globals = members = TRUE;
/* When the optstring begins with a '-' getopt_long does not rearrange the
non-options arguments to be at the end, but leaves them alone. */
@@ -3212,16 +3245,16 @@ make_C_tag (isfun)
{
/* This function is never called when token.valid is FALSE, but
we must protect against invalid input or internal errors. */
- if (!DEBUG && !token.valid)
- return;
-
if (token.valid)
make_tag (token_name.buffer, token_name.len, isfun, token.line,
token.offset+token.length+1, token.lineno, token.linepos);
- else /* this case is optimised away if !DEBUG */
- make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""),
- token_name.len + 17, isfun, token.line,
- token.offset+token.length+1, token.lineno, token.linepos);
+ else if (DEBUG)
+ { /* this branch is optimised away if !DEBUG */
+ make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""),
+ token_name.len + 17, isfun, token.line,
+ token.offset+token.length+1, token.lineno, token.linepos);
+ error ("INVALID TOKEN", NULL);
+ }
token.valid = FALSE;
}
@@ -3402,7 +3435,7 @@ C_entries (c_ext, inf)
{
c = '\0';
}
- break;
+ break;
case '%':
if ((c_ext & YACC) && *lp == '%')
{
@@ -3968,7 +4001,7 @@ C_entries (c_ext, inf)
}
else if (bracelev < 0)
{
- token.valid = FALSE; /* something gone amiss, token unreliable */
+ token.valid = FALSE; /* something gone amiss, token unreliable */
bracelev = 0;
}
if (bracelev == 0 && fvdef == vignore)
diff --git a/lib-src/makefile.w32-in b/lib-src/makefile.w32-in
index eaebb2abfa6..9a611b8e3f9 100644
--- a/lib-src/makefile.w32-in
+++ b/lib-src/makefile.w32-in
@@ -24,7 +24,7 @@ ALL = make-docfile hexl ctags etags movemail ebrowse sorted-doc digest-doc emacs
.PHONY: $(ALL)
-VERSION = 22.1.50
+VERSION = 23.0.50
LOCAL_FLAGS = -DWINDOWSNT -DDOS_NT -DSTDC_HEADERS=1 -DNO_LDAV=1 \
-DNO_ARCHIVES=1 -DHAVE_CONFIG_H=1 -I../nt/inc \
@@ -142,7 +142,7 @@ $(BLD)/ctags.$(O): ctags.c
# make-docfile blindly replaces .o with .c anyway. Keep .o in this list
# as it is required by code in doc.c.
#
-obj= sunfns.o dosfns.o msdos.o \
+obj= dosfns.o msdos.o \
xterm.o xfns.o xmenu.o xselect.o xrdb.o fringe.o image.o \
mac.o macterm.o macfns.o macmenu.o fontset.o \
w32.o w32bdf.o w32console.o w32fns.o w32heap.o w32inevt.o \
@@ -156,7 +156,7 @@ obj= sunfns.o dosfns.o msdos.o \
cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
alloc.o data.o doc.o editfns.o callint.o \
eval.o floatfns.o fns.o print.o lread.o \
- abbrev.o syntax.o bytecode.o \
+ syntax.o bytecode.o \
process.o callproc.o \
region-cache.o sound.o atimer.o \
doprnt.o strftime.o intervals.o textprop.o composite.o md5.o
diff --git a/lib-src/pop.c b/lib-src/pop.c
index 9fcbe4b370c..ea057713234 100644
--- a/lib-src/pop.c
+++ b/lib-src/pop.c
@@ -1010,12 +1010,19 @@ socket_connection (host, flags)
char *host;
int flags;
{
+#ifdef HAVE_GETADDRINFO
+ struct addrinfo *res, *it;
+ struct addrinfo hints;
+ int ret;
+#else /* !HAVE_GETADDRINFO */
struct hostent *hostent;
+#endif
struct servent *servent;
struct sockaddr_in addr;
char found_port = 0;
char *service;
int sock;
+ char *realhost;
#ifdef KERBEROS
#ifdef KERBEROS5
krb5_error_code rem;
@@ -1031,11 +1038,11 @@ socket_connection (host, flags)
CREDENTIALS cred;
Key_schedule schedule;
int rem;
- char *realhost;
#endif /* KERBEROS5 */
#endif /* KERBEROS */
int try_count = 0;
+ int connect_ok;
#ifdef WINDOWSNT
{
@@ -1097,6 +1104,46 @@ socket_connection (host, flags)
}
+#ifdef HAVE_GETADDRINFO
+ memset (&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_ADDRCONFIG | AI_CANONNAME;
+ hints.ai_family = AF_INET;
+ do
+ {
+ ret = getaddrinfo (host, service, &hints, &res);
+ try_count++;
+ if (ret != 0 && (ret != EAI_AGAIN || try_count == 5))
+ {
+ strcpy (pop_error, "Could not determine POP server's address");
+ return (-1);
+ }
+ } while (ret != 0);
+
+ if (ret == 0)
+ {
+ it = res;
+ while (it)
+ {
+ if (it->ai_addrlen == sizeof (addr))
+ {
+ struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr;
+ bcopy (&in_a->sin_addr, (char *) &addr.sin_addr,
+ sizeof (addr.sin_addr));
+ if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
+ break;
+ }
+ it = it->ai_next;
+ }
+ connect_ok = it != NULL;
+ if (connect_ok)
+ {
+ realhost = alloca (strlen (it->ai_canonname) + 1);
+ strcpy (realhost, it->ai_canonname);
+ }
+ freeaddrinfo (res);
+ }
+#else /* !HAVE_GETADDRINFO */
do
{
hostent = gethostbyname (host);
@@ -1116,10 +1163,18 @@ socket_connection (host, flags)
break;
hostent->h_addr_list++;
}
+ connect_ok = *hostent->h_addr_list != NULL;
+ if (! connect_ok)
+ {
+ realhost = alloca (strlen (hostent->h_name) + 1);
+ strcpy (realhost, hostent->h_name);
+ }
+
+#endif /* !HAVE_GETADDRINFO */
#define CONNECT_ERROR "Could not connect to POP server: "
- if (! *hostent->h_addr_list)
+ if (! connect_ok)
{
CLOSESOCKET (sock);
strcpy (pop_error, CONNECT_ERROR);
@@ -1130,6 +1185,7 @@ socket_connection (host, flags)
}
#ifdef KERBEROS
+
#define KRB_ERROR "Kerberos error connecting to POP server: "
if (! (flags & POP_NO_KERBEROS))
{
@@ -1157,7 +1213,7 @@ socket_connection (host, flags)
if (rem = krb5_cc_get_principal (kcontext, ccdef, &client))
goto krb5error;
- for (cp = hostent->h_name; *cp; cp++)
+ for (cp = realhost; *cp; cp++)
{
if (isupper (*cp))
{
@@ -1165,7 +1221,7 @@ socket_connection (host, flags)
}
}
- if (rem = krb5_sname_to_principal (kcontext, hostent->h_name,
+ if (rem = krb5_sname_to_principal (kcontext, realhost,
POP_SERVICE, FALSE, &server))
goto krb5error;
@@ -1210,7 +1266,6 @@ socket_connection (host, flags)
}
#else /* ! KERBEROS5 */
ticket = (KTEXT) malloc (sizeof (KTEXT_ST));
- realhost = strdup (hostent->h_name);
rem = krb_sendauth (0L, sock, ticket, "pop", realhost,
(char *) krb_realmofhost (realhost),
(unsigned long) 0, &msg_data, &cred, schedule,
@@ -1218,7 +1273,6 @@ socket_connection (host, flags)
(struct sockaddr_in *) 0,
"KPOPV0.1");
free ((char *) ticket);
- free (realhost);
if (rem != KSUCCESS)
{
strcpy (pop_error, KRB_ERROR);
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b050d2a5faa..31437fb1a38 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,23 +1,4 @@
-2007-11-21 Juanma Barranquero <lekktu@gmail.com>
-
- * textmodes/paragraphs.el (forward-sentence): Doc fix.
- Reported by Drew Adams <drew.adams@oracle.com>.
-
-2007-11-20 Glenn Morris <rgm@gnu.org>
-
- * emacs-lisp/byte-run.el (declare-function): Define as a no-op,
- for compatibility with Emacs 23.
-
-2007-11-19 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (map-query-replace-regexp): Doc fix (revert part of
- 2000-05-21T17:04:47Z!fx@gnu.org made on 2000-05-21 with no ChangeLog entry).
-
-2007-11-19 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el: Update commentary.
-
-2007-11-16 Eli Zaretskii <eliz@gnu.org>
+2007-11-21 Eli Zaretskii <eliz@gnu.org>
* international/mule-cmds.el (set-locale-environment): Set
default-file-name-coding-system _after_ keyboard and terminal
@@ -26,40 +7,12 @@
* mail/rmail.el (rmail-current-subject-regexp): Allow more than
one space after "Subject:".
-2007-11-16 Juanma Barranquero <lekktu@gmail.com>
-
- * subr.el (make-variable-frame-local):
- Fix typo in obsolescence declaration.
-
-2007-11-16 Glenn Morris <rgm@gnu.org>
-
- * mail/mail-extr.el (mail-extr-all-top-level-domains): Update domains.
-
-2007-11-16 Rob Riepel <riepel@Stanford.EDU>
-
- * emulation/tpu-extras.el (tpu-next-line, tpu-previous-line)
- (tpu-forward-line, tpu-backward-line, tpu-scroll-window-down)
- (tpu-scroll-window-up): Replace next-line-internal -> line-move.
-
-2007-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
* pcvs-parse.el (cvs-parse-table): Ignore errors when looking up files
in order to determine if there's a conflict.
-2007-11-16 Juri Linkov <juri@jurta.org>
-
- * man.el (Man-heading-regexp): Add 0-9.
- (Man-first-heading-regexp): Remove leading space [ \t]* before NAME.
-
-2007-11-15 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/cc-engine.el (c-crosses-statement-barrier-p):
- Fix typo in docstring.
-
- * emulation/cua-base.el (cua-paste-pop): Fix typo in docstring.
- (cua-highlight-region-shift-only): Doc fix.
-
-2007-11-15 Richard Stallman <rms@gnu.org>
+2007-11-21 Richard Stallman <rms@gnu.org>
* bindings.el (esc-map): Bind C-M-l here; moved from reposition.el.
@@ -76,36034 +29,9974 @@
* filecache.el: Minibuffer map bindings moved to bindings.el.
-2007-11-14 Jason Rumney <jasonr@gnu.org>
+2007-11-21 Jason Rumney <jasonr@gnu.org>
* international/mule-cmds.el (set-locale-environment):
Set default-file-name-coding-system from system defaults on Windows.
-2007-11-14 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-parent-bptno-enabled): New variable.
- (gdb-breakpoint-regexp, gdb-mouse-toggle-breakpoint-margin)
- (gdb-mouse-toggle-breakpoint-fringe, gdb-delete-breakpoint)
- (gdb-goto-breakpoint): Generalise for breakpoints with multiple
- locations.
- (gdb-info-breakpoints-custom, gdb-assembler-custom)
- (gdb-toggle-breakpoint): Update for new gdb-breakpoint-regexp.
- (gdb-put-breakpoint-icon): Only display icon for parent breakpoint.
-
-2007-11-11 Juanma Barranquero <lekktu@gmail.com>
-
- * international/iso-cvt.el (iso-translate-conventions): Doc fix.
- (iso-aggressive-german-trans-tab, iso-conservative-german-trans-tab)
- (iso-tex2iso-trans-tab, iso-gtex2iso-trans-tab): Reflow docstring.
- (iso-spanish, iso-german, iso-iso2tex, iso-tex2iso, iso-gtex2iso)
- (iso-iso2gtex, iso-iso2duden, iso-iso2sgml, iso-sgml2iso):
- Rewrite in active voice.
-
-2007-11-10 Juri Linkov <juri@jurta.org>
+2007-11-21 Jason Rumney <jasonr@gnu.org>
+
+ * term/w32console.el: New term init file for w32 console.
+
+ * w32-fns.el (x-alternatives-map): Copy from term/x-win.el.
+ (x-setup-function-keys): Likewise, replacing top-level key definitions.
+ (w32-tty-standard-colors): Move to term/w32console.el.
+
+ * term/w32-win.el (x-setup-function-keys): Remove.
+
+ * term/tty-colors.el (tty-register-default-colors): Remove special
+ case for w32.
+
+2007-11-21 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * frame.el (msdos-mouse-p):
+ * generic-x.el (w32-shell-name):
+ * files.el (msdos-long-file-names, w32-long-file-name)
+ (msdos-long-file-names, dired-get-filename, dired-unmark)
+ (dired-do-flagged-delete, dos-8+3-filename, vms-read-directory)
+ (view-mode-disable):
+ * term/mac-win.el (mac-code-convert-string, mac-coerce-ae-data)
+ (mac-resume-apple-event, mac-font-panel-mode)
+ (mac-atsu-font-face-attributes, mac-ae-set-reply-parameter)
+ (mac-clear-font-name-table):
+ * term/pc-win.el (msdos-remember-default-colors)
+ (w16-set-clipboard-data, w16-get-clipboard-data):
+ * term/w32-win.el (w32-send-sys-command, w32-select-font)
+ (set-message-beep):
+ * w32-fns.el (set-message-beep, w32-get-clipboard-data)
+ (w32-get-locale-info, w32-get-valid-locale-ids)
+ (w32-set-clipboard-data):
+ * help-fns.el (ad-get-advice-info):
+ * font-lock.el (fast-lock-after-fontify-buffer)
+ (fast-lock-after-unfontify-buffer, fast-lock-mode)
+ (lazy-lock-after-fontify-buffer)
+ (lazy-lock-after-unfontify-buffer, lazy-lock-mode):
+ * net/browse-url.el (w32-shell-execute):
+ * dos-fns.el (int86, msdos-long-file-names):
+ * dos-w32.el (default-printer-name): Declare as functions.
- * startup.el: Backport startup screen related changes from the trunk.
- (initialization): Change group to `environment'.
- (inhibit-startup-screen): Rename from `inhibit-splash-screen'.
- (inhibit-splash-screen): Make alias to `inhibit-startup-screen'.
- (inhibit-startup-message): Change alias to `inhibit-startup-screen'.
- (initial-scratch-message): Fix docstring.
- (startup-screen-inhibit-startup-screen)
- (pure-space-overflow-message): New variables.
- (command-line): Rename `inhibit-startup-message' to
- `inhibit-startup-screen'.
- (initial-scratch-message): Doc fix.
- (fancy-splash-text): Remove variable.
- (fancy-startup-text, fancy-about-text, splash-screen-keymap):
- New variables.
- (fancy-splash-delay, fancy-splash-max-time)
- (fancy-current-text, fancy-splash-stop-time)
- (fancy-splash-outer-buffer, fancy-splash-last-input-event):
- Remove variables.
- (fancy-splash-insert): Use help-echo from the 3rd element of the
- link specification list, or "Follow this link" if it's nil. Doc fix.
- Allow functions for face and link specs.
- (fancy-splash-tail): Remove function.
- (fancy-startup-tail): New function.
- (fancy-splash-default-action, fancy-splash-special-event-action)
- (fancy-splash-screens): Remove functions.
- (fancy-about-screen): New function.
- (normal-splash-screen): Rename argument `hide-on-input' to `startup'.
- Fix docstring. Use argument `startup' to conditionally display
- different texts for Startup and About screens. Don't display Help
- commands on the About screen. Remove `unwind-protect' `sit-for'
- delay and `kill-buffer' after it.
- (normal-mouse-startup-screen, normal-splash-screen)
- (normal-no-mouse-startup-screen): New functions.
- (startup-echo-area-message): Change text of the echo area.
- (display-splash-screen): Remove function.
- (display-startup-screen, display-about-screen): New functions.
- (about-emacs): Make alias to `display-about-screen'.
- (display-splash-screen): Make alias to `display-startup-screen'.
- (command-line-1): Rename `inhibit-startup-message' to
- `inhibit-startup-screen'. Inhibit startup screen when Emacs is
- started with command line options "-f", "-funcall", "-e", "-eval",
- "-execute", "-insert", "-find-file", "-file", "-visit".
- Inhibit startup screen when Emacs is started with a file name only
- on tty (i.e. don't inhibit it when started with a file name like
- "emacs FILE..." on a window system).
- Comment out unused code for coping with the old sit-for behavior.
- If file-count > 0, then display the concise version in another
- window, otherwise display full version in the same window.
- * loadup.el: Add `button'. Move up `startup'.
- * help.el (help-map, help-for-help-internal): Add `C-h C-a'.
- * version.el (emacs-copyright): Add emacs-copyright.
- * menu-bar.el (menu-bar-help-menu):
- Move "About Emacs" and "About GNU" to the end of the Help menu.
- Move "Emacs Psychotherapist" after "Send Bug Report...".
- Move "External Packages" after "Find Emacs Packages".
-
-2007-11-10 Jason Rumney <jasonr@gnu.org>
-
- * w32-fns.el: Sync charset names with setup-default-fontset.
- Append "-1" where second part missing.
-
- * term/w32-win.el: Enable SJIS fonts before creating any fontsets.
-
-2007-11-10 Juanma Barranquero <lekktu@gmail.com>
-
- * ido.el (ido-save-history): Write the history file in UTF-8,
- and add `coding' file-local variable.
-
-2007-11-09 Juanma Barranquero <lekktu@gmail.com>
-
- * international/iso-cvt.el (iso-spanish, iso-german, iso-iso2tex)
- (iso-tex2iso, iso-gtex2iso, iso-iso2gtex, iso-iso2duden): Doc fixes.
- (iso-iso2duden-trans-tab): Add docstring.
-
-2007-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * faces.el (face-normalize-spec): Remove function.
- (frame-set-background-mode): Undo last change.
-
-2007-11-09 Juanma Barranquero <lekktu@gmail.com>
-
- * files.el (enable-local-variables): Doc fix.
-
-2007-11-08 David Hansen <david.hansen@gmx.net> (tiny change)
-
- * eshell/em-dirs.el (eshell-expand-multiple-dots): Change regexp to
- match dir like "a...b".
-
-2007-11-07 Johan Bockg,Ae(Brd <bojohan@gnu.org>
-
- * eshell/esh-mode.el (eshell-output-filter):
- * eshell/esh-proc.el (eshell-insertion-filter, eshell-sentinel):
- Use `with-current-buffer'.
-
-2007-11-05 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-gdb): Remove vestigial gdba doc and code.
-
-2007-11-04 Riccardo Murri <riccardo.murri@gmail.com>
-
- * net/tls.el: Require rx when compiling.
- (tls-end-of-info): New variable.
- (open-tls-stream): Keep reading input until `tls-end-of-info' is
- matched.
-
-2007-11-03 Ulrich Mueller <ulm@gentoo.org> (tiny change)
-
- * simple.el (bad-packages-alist): Anchor semantic regexp.
-
-2007-11-02 Drake Wilson <drake@begriffli.ch> (tiny change)
-
- * files.el (hack-local-variables): Fix membership tests to avoid
- treating all variables as safe if `enable-local-variables' is
- set to :safe (CVE-2007-5795).
-
-2007-11-02 Glenn Morris <rgm@gnu.org>
-
- * progmodes/etags.el (tags-table-mode): Disable undo.
-
- * simple.el (bad-packages-alist): Revert previous change.
-
-2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
-
- * printing.el (printing): Fix :version, printing.el was included
- in emacs-22.1.
- (pr-path-style, pr-path-alist, pr-txt-name)
- (pr-txt-printer-alist, pr-ps-name, pr-ps-printer-alist)
- (pr-temp-dir, pr-ps-temp-file, pr-file-modes, pr-gv-command)
- (pr-gs-command, pr-gs-switches, pr-gs-device, pr-gs-resolution)
- (pr-print-using-ghostscript, pr-file-tumble, pr-auto-region)
- (pr-auto-mode, pr-mode-alist, pr-ps-utility)
- (pr-ps-utility-alist, pr-menu-char-height, pr-menu-char-width)
- (pr-setting-database, pr-visible-entry-list)
- (pr-delete-temp-file, pr-list-directory, pr-buffer-name)
- (pr-buffer-name-ignore, pr-buffer-verbose): Remove incorrect
- :version.
-
-2007-11-01 Glenn Morris <rgm@gnu.org>
-
- * simple.el (bad-packages-alist): Add an entry for standalone vc-svn.
-
- * mail/footnote.el (footnote-numeric-regexp)
- (footnote-english-upper-regexp, footnote-english-lower-regexp)
- (footnote-roman-lower-regexp, footnote-roman-upper-regexp):
- Match multi-character footnotes.
-
- * textmodes/nroff-mode.el (nroff-mode): Set indent-line-function.
- (nroff-indent-line-function): New function.
- (nroff-count-text-lines): Use nroff-forward-text-line rather than
- obsolete alias.
-
-2007-10-31 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-open-connection-telnet)
- (tramp-open-connection-rsh, tramp-open-connection-su)
- (tramp-open-connection-multi): Set $LC_ALL to "C".
-
-2007-10-31 Sven Joachim <svenjoac@gmx.de>
-
- * dired-aux.el (dired-copy-file-recursive):
- Preserve directory permissions.
-
-2007-10-31 Juanma Barranquero <lekktu@gmail.com>
-
- * whitespace.el (whitespace-write-file-hook): Remove interactive spec.
- (whitespace-unload-function): New-style unload function. When run,
- unintern `whitespace-unload-hook' and call `unload-feature' recursively
- to stop the old hook from messing with the unloading.
-
- * strokes.el (strokes-alphabetic-lessp): Doc fix.
-
-2007-10-31 Sean O'Rourke <sorourke@cs.ucsd.edu>
-
- * emacs-lisp/find-func.el (find-library): Use library at
- point as default interactive argument.
-
-2007-10-31 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/elp.el (elp-report-limit, elp-restore-all)
- (elp-unset-master, elp-results): Fix typos.
- (elp-sort-by-function, elp-use-standard-output, elp-recycle-buffers-p):
- Doc fixes.
-
- * msb.el (msb--many-menus): Remove variable.
- (msb-max-menu-items, msb--add-to-menu): Doc fixes.
- (msb-menu-cond, msb-item-handling-function, msb--create-function-info)
- (msb--toggle-menu-type): Fix typos in docstrings.
-
- * shadowfile.el (shadow-inhibit-overload, shadow-remove-from-todo)
- (shadow-insert-var): Doc fixes.
- (shadow-file-match, shadow-define-cluster, shadow-define-regexp-group):
- Reflow docstrings.
- (shadow-parse-fullname, shadow-read-files): Fix typos in docstrings.
-
-2007-10-30 Juanma Barranquero <lekktu@gmail.com>
-
- * ediff-hook.el (ediff, ediff-files, ediff-buffers, ebuffers, ediff3)
- (ediff-files3, ediff-buffers3, ebuffers3, erevision, ediff-revision):
- Fix typos in autoload docstrings.
-
- * loadhist.el (unload-feature): Remove redundant check.
-
-2007-10-30 Richard Stallman <rms@gnu.org>
-
- * savehist.el (savehist-save): Obey savehist-ignored-variables.
-
-2007-10-30 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-delete-out-of-scope): New option.
- (gdb-var-update-handler-1): Use it.
-
-2007-10-30 Juanma Barranquero <lekktu@gmail.com>
-
- * loadhist.el (unload-feature): Remove erroneous check for the
- FEATURE-unload-function variable; check the existence of the
- function (that's what the docstring says, and it makes more sense).
-
- * follow.el (follow-unload-function): Add docstring.
- (follow-unload-function): Remove variable.
-
- * server.el (server-unload-function): Remove variable.
- (server-unload-function): Unbind `server-edit' from `C-x #'.
-
- * uniquify.el (uniquify-unload-function): Add docstring.
- (uniquify-unload-function): Remove variable.
-
- * ses.el (ses-unload-function): New function.
-
-2007-10-29 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/unsafep.el (unsafep, unsafep-function)
- (unsafep-progn, unsafep-let): Fix typos in docstrings.
-
- * uniquify.el (uniquify-maybe-rerationalize-w/o-cb): Define it
- before use to avoid a warning in packages that require uniquify.
- (uniquify-unload-function): New function and var.
-
-2007-10-29 Juanma Barranquero <lekktu@gmail.com>
-
- * loadhist.el (unload-feature-special-hooks):
- Add `delete-frame-functions'.
-
- * server.el (server-unload-function): Rename from `server-unload-hook'
- and adapt to new `unload-feature' functionality. Remove hook from
- `kill-buffer-hook' buffer-locally.
- (server-unload-hook): Remove.
- (server-unload-function): New var; replaces `server-unload-hook'.
-
-2007-10-27 Juanma Barranquero <lekktu@gmail.com>
-
- * desktop.el (uniquify-managed): Pacify byte compiler.
- (desktop-buffer-info): If the buffer name is managed by uniquify,
- save the base name, not the uniquified one.
- (desktop-create-buffer): Allow `rename-buffer' to generate a new
- name in case of conflict.
-
-2007-10-26 Glenn Morris <rgm@gnu.org>
-
- * emacs-lisp/bytecomp.el (byte-compile-warnings): Autoload the
- safe-local-variable property.
-
-2007-10-26 Gwern Branwen <gwern0@gmail.com> (tiny change)
-
- * net/browse-url.el (browse-url-browser-function): Delete grail.
- (browse-url-grail): Function and variable deleted.
- (browse-url-browser-function): Delete IXI Mosaic.
- (browse-url-default-browser): Don't try IXI Mosaic.
- (browse-url-iximosaic): Function deleted.
- (browse-url-browser-function): Delete MMM.
- (browse-url-default-browser): Don't try MMM.
- (browse-url-mmm): Function deleted.
-
-2007-10-25 Glenn Morris <rgm@gnu.org>
-
- * progmodes/f90.el (f90-indented-comment-re)
- (f90-directive-comment-re, f90-break-delimiters):
- * progmodes/fortran.el (fortran-comment-line-start-skip)
- (fortran-directive-re):
- * textmodes/conf-mode.el (conf-space-keywords): Mark these regexps
- as safe if they are strings.
-
-2007-10-25 Richard Stallman <rms@gnu.org>
-
- * progmodes/ps-mode.el (ps-mode-map): Delete C-c v binding.
-
-2007-10-24 Richard Stallman <rms@gnu.org>
-
- * savehist.el (savehist-save): Omit unreadable elements.
-
- * loadhist.el (unload-function-defs-list): Renamed from
- unload-function-features-list.
- (unload-feature-special-hooks, unload-feature): Doc fixes.
-
- * indent.el (indent-to-left-margin): If point's in the indentation,
- move to the end of the indentation.
-
- * cus-edit.el (customize-changed-options): Make arg optional.
-
-2007-10-24 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs-select, bs-select-other-window): Fix typos in docstrings.
-
-2007-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/css-mode.el: Require CL.
- (comment-continue): Declare.
-
- * subr.el (make-variable-frame-localizable): Remove.
- (make-variable-frame-local): Mark obsolete.
-
-2007-10-23 Juanma Barranquero <lekktu@gmail.com>
-
- * ibuf-ext.el (ibuffer-switch-to-saved-filters)
- (ibuffer-switch-to-saved-filter-groups): Doc fixes.
-
-2007-10-23 Chris Moore <christopher.ian.moore@gmail.com>
-
- * comint.el (comint-password-prompt-regexp):
- Handle `[sudo] password'-style prompt.
-
-2007-10-23 Glenn Morris <rgm@gnu.org>
-
- * progmodes/f90.el (f90-do-indent, f90-if-indent)
- (f90-type-indent, f90-program-indent)
- (f90-continuation-indent, f90-comment-region)
- (f90-beginning-ampersand, f90-smart-end)
- (f90-break-before-delimiters, f90-auto-keyword-case)
- (f90-leave-line-no, f90-mode-hook):
- Give an appropriate safe-local-variable property.
- (f90-font-lock-keywords-2): Fix `go to' regexp.
-
- * progmodes/fortran.el (fortran-tab-mode-default)
- (fortran-tab-mode-string, fortran-do-indent, fortran-if-indent)
- (fortran-structure-indent, fortran-continuation-indent)
- (fortran-comment-indent, fortran-comment-line-extra-indent)
- (fortran-comment-line-start)
- (fortran-minimum-statement-indent-fixed)
- (fortran-minimum-statement-indent-tab)
- (fortran-comment-indent-char, fortran-line-number-indent)
- (fortran-check-all-num-for-matching-do)
- (fortran-blink-matching-if, fortran-continuation-string)
- (fortran-comment-region, fortran-electric-line-number)
- (fortran-column-ruler-fixed, fortran-column-ruler-tab)
- (fortran-analyze-depth, fortran-break-before-delimiters):
- Give an appropriate safe-local-variable property.
-
-2007-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/tex-mode.el (tex-uptodate-p): Don't signal an error if one
- of the subdirs is unreadable.
-
-2007-10-22 Martin Rudalics <rudalics@gmx.at>
-
- * progmodes/fortran.el (fortran-mode-map, fortran-window-create):
- Use window-full-width-p.
-
-2007-10-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emulation/tpu-edt.el (tpu-edt-old-global-values): New var.
- (tpu-edt-off): Use it.
- (tpu-edt-on): Set it. Make sure the tpu-global-map is not already on
- the global-map before adding it to global-map.
-
- * menu-bar.el (global-buffers-menu-map): New var.
- (global-map, menu-bar-update-buffers): Use it.
- * msb.el (msb-menu-bar-update-buffers): Use it.
- (msb-sort-by-directory, msb--choose-menu, msb--mode-menu-cond)
- (msb--most-recently-used-menu, msb--create-buffer-menu-2):
- Use with-current-buffer.
-
-2007-10-21 Dan Nicolaescu <dann@ics.uci.edu>
-
- * hexl.el (hexl-menu): New major mode menu.
-
-2007-10-20 Glenn Morris <rgm@gnu.org>
-
- * progmodes/f90.el (f90-font-lock-keywords-2)
- (f90-looking-at-type-like): Fix regexp typos.
-
-2007-10-19 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs-mode): Add mode name (accidentally left out
- in the 2007-10-16 change).
-
-2007-10-19 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs--track-window-changes): Don't refresh the whole list.
- (bs-mode): Set mode-class property to special.
-
- * follow.el (follow-unload-function): New function.
-
- * loadhist.el (unload-function-features-list):
- Rename from `unload-hook-features-list'.
- (unload-hook-features-list): Add as obsolete alias.
- (unload-feature): Use `unload-function-features-list'
- and new FEATURE-unload-function.
-
-2007-10-18 Juanma Barranquero <lekktu@gmail.com>
-
- * loadhist.el (unload-feature-special-hooks):
- Update list of special hooks.
-
- * textmodes/fill.el (fill-individual-paragraphs): Doc fix.
- (adaptive-fill-function): Doc fix. Remove * from docstring.
-
-2007-10-18 Glenn Morris <rgm@gnu.org>
-
- * ibuf-ext.el (ibuffer-saved-filter-groups): Doc fix.
-
-2007-10-17 Aaron Hawley <aaronh@garden.org>
-
- * tutorial.el (tutorial--save-tutorial): Display message when tutorial
- position is not saved.
-
-2007-10-17 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-wrap-follows-window-size): Integer value
- specifies wrapping margin.
- (longlines-mode, longlines-window-change-function):
- Set window-specific wrapping margin based on the above.
+2007-11-21 Juanma Barranquero <lekktu@gmail.com>
-2007-10-17 John Wiegley <johnw@newartisans.com>
+ * textmodes/paragraphs.el (forward-sentence): Doc fix.
+ Reported by Drew Adams <drew.adams@oracle.com>.
- * eshell/esh-cmd.el (eshell-complex-commands): Add "ls".
+2007-11-20 Jason Rumney <jasonr@gnu.org>
-2007-10-17 Glenn Morris <rgm@gnu.org>
+ * term/w32-win.el (x-setup-function-keys): Protect against
+ multiple calls on the same terminal.
- * progmodes/cc-menus.el (cc-imenu-c++-generic-expression):
- Tweak regexp to avoid stack overflow.
+2007-11-20 Dan Nicolaescu <dann@ics.uci.edu>
-2007-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
+ * term/mac-win.el (x-setup-function-keys): Only setup
+ local-function-key-map if it has not been setup already for the
+ current frame. Move the suspend-emacs processing here.
- * simple.el (reindent-then-newline-and-indent): Don't assume that
- indent-according-to-mode preserves point.
+2007-11-20 Juanma Barranquero <lekktu@gmail.com>
-2007-10-16 Juanma Barranquero <lekktu@gmail.com>
+ * progmodes/grep.el (xargs-program): New variable.
+ (grep-compute-defaults): Use it.
+ (grep-default-command): Doc fix.
+ (grep, lgrep, rgrep): Reflow docstrings.
- * bs.el (bs--window-config-coming-from): Revert 2006-11-09 change.
- (bs--restore-window-config): Keep the selected frame.
- (bs--track-window-changes, bs--remove-hooks): New functions.
- (bs-mode): Use `define-derived-mode'. Set hook to track window changes.
- (bs--show-with-configuration): Revert 2006-11-09 change.
- Don't reuse window unless it is visible on the selected frame.
- Restore window configuration (possibly in a different frame)
- before creating any window.
+2007-11-20 Dan Nicolaescu <dann@ics.uci.edu>
-2007-10-16 Richard Stallman <rms@gnu.org>
+ * vc.el (vc-find-revision): Set the parent buffer.
+ Use when instead of if.
- * emacs-lisp/advice.el (ad-get-advice-info): Change to a function.
- (ad-get-advice-info-macro): New macro, like old ad-get-advice-info.
- (ad-is-advised, ad-get-advice-info-field)
- (ad-set-advice-info-field): Use ad-get-advice-info-macro.
+ * progmodes/python.el (info-lookup-maybe-add-help):
+ * progmodes/ps-mode.el (doc-view-minor-mode):
+ * mail/emacsbug.el (Info-menu, Info-goto-node):
+ * emulation/viper-keym.el (viper-ex)
+ (viper-normalize-minor-mode-map-alist, viper-set-mode-vars-for):
+ * emulation/viper-cmd.el (widget-type, widget-button-press)
+ (viper-set-hooks):
+ * emacs-lisp/tcover-unsafep.el (unsafep-function):
+ * emacs-lisp/tcover-ses.el (ses-set-curcell, ses-update-cells)
+ (ses-load, ses-vector-delete, ses-create-header-string)
+ (ses-read-cell, ses-read-symbol, ses-command-hook, ses-jump):
+ * emacs-lisp/gulp.el (mail-subject, mail-send): Declare as functions.
-2007-10-16 Glenn Morris <rgm@gnu.org>
+2007-11-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * simple.el (blink-matching-open): Don't report false errors with
- the `$' syntax class.
+ * pcvs.el (cvs-revert-if-needed): Fix copy&paste typo.
-2007-10-15 Juanma Barranquero <lekktu@gmail.com>
+2007-11-20 Glenn Morris <rgm@gnu.org>
- * filesets.el (filesets-alist-get): Use `let' rather than `let*'.
- (filesets-ormap, filesets-sort-case-sensitive-flag)
- (filesets-remake-shortcut, filesets-ingroup-collect-files):
- Fix typos in docstrings.
- (filesets-data-get-name, filesets-data-get-data)
- (filesets-data-set, filesets-cmd-query-replace-getargs)
- (filesets-ingroup-collect, filesets-find-or-display-file): Doc fixes.
+ * emacs-lisp/check-declare.el (check-declare-verify): Tweak regexp
+ for end of function-name. Handle define-derived-mode.
-2007-10-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-11-20 Dan Nicolaescu <dann@ics.uci.edu>
- * term/mac-win.el: Don't require url when compiling, as url-type is
- no longer a macro.
+ * progmodes/idlw-help.el: Require browse-url unconditionally, it
+ is available by default.
+ (idlwave-help-browse-url-available): Change default to t.
-2007-10-14 Glenn Morris <rgm@gnu.org>
+ * emulation/edt.el (defgroup, defcustom): Remove definition.
+ (eval-when-compile): Remove.
+ (c-mark-function):
+ * textmodes/reftex-dcr.el (bibtex-beginning-of-entry):
+ * textmodes/fill.el (comment-search-forward)
+ (comment-string-strip):
+ * progmodes/prolog.el (comint-mode, comint-send-string)
+ (comint-send-region, comint-send-eof):
+ * progmodes/dcl-mode.el (imenu-default-create-index-function):
+ * emulation/viper-util.el (viper-forward-Word):
+ * emulation/vi.el (c-mark-function):
+ * emulation/edt-vt100.el (vt100-wide-mode):
+ * emacs-lisp/timer.el (diary-entry-time): Declare as functions.
- * progmodes/etags.el (select-tags-table): Disable undo in the
- `*Tags Table List*' buffer.
+2007-11-19 Michael Albinus <michael.albinus@gmx.de>
-2007-10-13 Eli Zaretskii <eliz@gnu.org>
+ * net/tramp.el (tramp-open-connection-setup-interactive-shell):
+ Still some tuning in case of an echoing shell.
+ (tramp-send-command): Connection property "remote-echo" is not
+ persistent; cache key is the process therefore.
- * dired.el (dired-warn-writable): New face.
- (dired-warn-writable-face): New variable.
- (dired-font-lock-keywords): Use dired-warn-writable-face, instead
- of dired-warning-face, for group- and world-writable files.
+2007-11-19 Juanma Barranquero <lekktu@gmail.com>
-2007-10-13 Glenn Morris <rgm@gnu.org>
+ * replace.el (map-query-replace-regexp): Doc fix (revert part of
+ 2000-05-21T17:04:47Z!fx@gnu.org made on 2000-05-21 with no ChangeLog entry).
- * progmodes/octave-mod.el (octave-looking-at-kw): Add doc string.
- (octave-re-search-forward-kw, octave-re-search-backward-kw):
- Add doc string, and an explicit COUNT argument.
- (octave-scan-blocks, octave-beginning-of-defun): Explicitly pass
- `inc' to search functions.
+2007-11-19 Dan Nicolaescu <dann@ics.uci.edu>
-2007-10-13 John W. Eaton <jwe@octave.org>
+ * progmodes/octave-mod.el (inferior-octave-send-list-and-digest):
+ * play/yow.el (doctor-ret-or-read):
+ * vc-hooks.el (vc-dired-resynch-file):
+ * vc-hg.el (log-view-get-marked):
+ * smerge-mode.el (ediff-cleanup-mess):
+ * pcvs.el (vc-editable-p, vc-checkout):
+ * pcomplete.el (comint-bol):
+ * informat.el (texinfo-format-refill):
+ * ido.el (tramp-tramp-file-p):
+ * ibuffer.el (ibuffer-mark-on-buffer, ibuffer-format-qualifier)
+ (ibuffer-generate-filter-groups, ibuffer-format-filter-group-data):
+ * add-log.el (c-beginning-of-defun, c-end-of-defun): Declare as
+ functions.
- * progmodes/octave-mod.el (octave-looking-at-kw)
- (octave-re-search-forward-kw, octave-re-search-backward-kw):
- New functions.
- (octave-in-defun-p, calculate-octave-indent)
- (octave-blink-matching-block-open, octave-beginning-of-defun)
- (octave-auto-fill): Use octave-looking-at-kw instead of looking-at,
- to search for regexps that contain case-sensitive keywords.
- (octave-beginning-of-defun): Likewise, for octave-re-search-backward-kw.
- (octave-scan-blocks): Likewise, for octave-re-search-forward-kw.
+ * textmodes/ispell.el (ispell-int-char): Make it a defalias
+ instead of fset.
+ (ispell-message): Use with-no-warnings for sc-cite-regexp call.
-2007-10-13 Richard Stallman <rms@gnu.org>
+ * ido.el (ido-file-internal): Move with-no-warnings to include the
+ ffap-string-at-point call.
- * files.el (directory-abbrev-alist): Doc fix.
+ * pcomplete.el (pcomplete-executables): Move defsubst before first use.
-2007-10-13 Jari Aalto <jari.aalto@cante.net>
+ * vc-hg.el (vc-hg-revision-table): Fix last change.
- * comint.el (comint-password-prompt-regexp): Add 'LDAP'.
+2007-11-19 Martin Rudalics <rudalics@gmx.at>
-2007-10-12 Martin Rudalics <rudalics@gmx.at>
+ * menu-bar.el (top-level): Deactivate clipboard-kill-region and
+ clipboard-yank when the buffer is read-only.
- * frame.el (set-frame-configuration): Assign name parameter only
- if it has been set explicitly before.
+ * cus-edit.el (custom-field-keymap): Move to other Custom mode
+ keymaps such that it's before the definition of Custom-mode-menu.
+ (Custom-mode-menu): Show it for custom-field-keymap too.
- * window.el (handle-select-window): Revert part of 2007-10-06
- change setting the input focus.
+2007-11-19 Nick Roberts <nickrob@snap.net.nz>
-2007-10-12 Glenn Morris <rgm@gnu.org>
+ * progmodes/gdb-ui.el: Update commentary.
- * cus-edit.el (custom-variable-menu, custom-face-menu)
- (custom-group-menu): Check init-file-user rather than
- user-init-file, in case cus-edit is loaded by site-run-file.
+2007-11-18 Dan Nicolaescu <dann@ics.uci.edu>
-2007-10-11 Juanma Barranquero <lekktu@gmail.com>
+ * net/tramp.el (tramp-terminal-type): Remove duplicated definition.
- * follow.el (follow-stop-intercept-process-output):
- Use `follow-call-process-filter' rather than `process-filter'.
+2007-11-19 Glenn Morris <rgm@gnu.org>
-2007-10-11 Tom Tromey <tromey@redhat.com>
+ * emacs-lisp/check-declare.el (check-declare-verify): If fnfile
+ does not exist, try adding `.el' extension. Also search for defsubsts.
- * progmodes/gdb-ui.el (gdb-info-stack-custom): Ensure current
- frame is visible.
+ * cus-edit.el (recentf-expand-file-name):
+ * dired.el (dired-relist-entry):
+ * subr.el (w32-shell-dos-semantics):
+ * emacs-lisp/bytecomp.el (compilation-forget-errors):
+ Declare as functions.
-2007-10-10 Richard Stallman <rms@gnu.org>
+2007-11-18 Stefan Monnier <monnier@iro.umontreal.ca>
- * emacs-lisp/debug.el (debugger-setup-buffer): Disable undo
- in *Backtrace*.
+ * abbrev.el (kill-all-abbrevs, insert-abbrevs)
+ (prepare-abbrev-list-buffer): Use dolist.
+ (clear-abbrev-table): Preserve properties.
- * faces.el (face-font-selection-order): Doc fix.
+2007-11-18 Shigeru Fukaya <shigeru.fukaya@gmail.com> (tiny change)
- * loadhist.el (unload-feature): Doc fix.
+ * textmodes/texinfmt.el (texinfo-format-printindex):
+ Collect combined indexes using texinfo-short-index-format-cmds-alist.
+ Reported on <bug-texinfo@gnu.org>.
-2007-10-10 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+2007-11-18 Michael Albinus <michael.albinus@gmx.de>
- * ps-print.el: Fix the usage of :foreground and :background face
- attributes. Reported by Nikolaj Schumacher <n_schumacher@web.de>.
- (ps-print-version): New version 6.7.6.
- (ps-face-attributes, ps-face-attribute-list, ps-face-background):
- Fix code.
- (ps-face-foreground-color-p, ps-face-background-color-p)
- (ps-face-color-p): New inline funs.
+ * net/tramp.el (tramp-completion-reread-directory-timeout):
+ New defcustom.
+ (tramp-handle-file-name-all-completions): Flush directory contents
+ from cache regularly.
+ (tramp-set-auto-save-file-modes): Check also for `buffer-modified-p'.
+ (tramp-open-connection-setup-interactive-shell):
+ Call `tramp-cleanup-connection' via funcall.
-2007-10-10 Juanma Barranquero <lekktu@gmail.com>
+ * net/tramp-ftp.el (tramp-ftp-file-name-handler): Temp file is already
+ created when copying.
- * follow.el: Change all instances of "Follow Mode" to "Follow
- mode" in docstrings and messages.
+2007-11-17 Dan Nicolaescu <dann@ics.uci.edu>
-2007-10-09 Juanma Barranquero <lekktu@gmail.com>
+ * eshell/esh-util.el (eshell-under-xemacs-p): Remove.
+ * eshell/esh-mode.el (eshell-mode-syntax-table, command-running-p):
+ * eshell/esh-ext.el (eshell-external-command):
+ * eshell/esh-cmd.el (require):
+ * eshell/em-unix.el (eshell-plain-locate-behavior):
+ * eshell/em-cmpl.el (eshell-cmpl-initialize):
+ Replace eshell-under-xemacs-p with (featurep 'xemacs).
+ * eshell/esh-mode.el (characterp, char-int): Remove unused
+ conditional defaliases.
- * faces.el (face-font-selection-order): Doc fix.
+ * pcomplete.el (pcomplete-event-matches-key-specifier-p):
+ Rename from event-matches-key-specifier-p, define unconditionally.
+ (event-basic-type): Remove unused defalias.
+ (pcomplete-show-completions):
+ Use pcomplete-event-matches-key-specifier-p.
- * follow.el (follow-mode-hook, follow-mode): Doc fixes.
- (follow-mode-off-hook): Mark as obsolete.
+2007-11-17 Eli Zaretskii <eliz@gnu.org>
-2007-10-08 Richard Stallman <rms@gnu.org>
+ * eshell/esh-module.el (eshell-load-defgroups): Don't make backups
+ when saving esh-groups.el.
- * emacs-lisp/edebug.el (edebug-install-custom-print-funcs)
- (edebug-install-custom-print, edebug-reset-print-funcs)
- (edebug-uninstall-custom-print, edebug-uninstall-custom-print-funcs):
- Functions deleted.
- (edebug-prin1, edebug-print, edebug-prin1-to-string)
- (edebug-format, edebug-message): Define directly as aliases.
+2007-11-17 Martin Rudalics <rudalics@gmx.at>
-2007-10-08 Juanma Barranquero <lekktu@gmail.com>
+ * wid-edit.el (widget-default-complete):
+ * progmodes/flymake.el (flymake-goto-file-and-line):
+ Fix typo in (doc-)string.
- * follow.el (follow-mode): Don't run hooks twice. Use `when'.
+2007-11-17 Glenn Morris <rgm@gnu.org>
-2007-10-07 Glenn Morris <rgm@gnu.org>
+ * emacs-lisp/byte-run.el (declare-function): New macro.
+ * emacs-lisp/bytecomp.el (byte-compile-declare-function):
+ New function, byte-hunk-handler for declare-function.
+ (byte-compile-callargs-warn): Handle declared functions.
- * simple.el (bad-packages-alist): Clarify Semantic and CEDET
- version numbers.
+ * emacs-lisp/check-declare.el: New file.
+ * Makefile.in (check-declare): New target.
-2007-10-06 Michael Albinus <michael.albinus@gmx.de>
+ * progmodes/fortran.el (gud-find-c-expr): Declare as a function.
- * net/tramp.el (tramp-completion-mode): Extend doc-string.
- (tramp-completion-mode-p): Revert change from 2007-09-24.
- Checking for `return' etc as last character is not sufficient, for
- example in dired-mode when entering <g> (revert-buffer) or
- <s> (dired-sort).
+ * subr.el (process-lines): Move here from ../admin/admin.el.
+ * emacs-lisp/authors.el (authors-process-lines): Remove.
+ (authors): Use process-lines rather than authors-process-lines.
-2007-10-06 Martin Rudalics <rudalics@gmx.at>
+ * progmodes/compilation-perl.el, progmodes/compilation-weblint.el:
+ Remove these files.
- * window.el (mouse-autoselect-window-cancel): Don't cancel for
- select-window or select-frame events.
- (handle-select-window): When autoselecting window set input
- focus. Restructure.
+2007-11-17 Juanma Barranquero <lekktu@gmail.com>
- * frame.el (focus-follows-mouse): Moved to frame.c.
- * cus-start.el (all): Add focus-follows-mouse.
+ * emacs-lisp/backquote.el (backquote):
+ Improve argument/docstring consistency.
-2007-10-05 Chris Moore <dooglus@gmail.com>
+ * emacs-lisp/ring.el (ring-size, ring-p, ring-insert)
+ (ring-length, ring-empty-p): Use c[ad]dr.
+ (ring-plus1): Use `1+'.
+ (ring-minus1): Use `zerop'.
+ (ring-remove): Use c[ad]dr. Use `when'.
+ (ring-copy): Use c[ad]dr. Use `let', not `let*'.
+ (ring-ref): Use `let', not `let*'.
+ (ring-insert-at-beginning): Use c[ad]dr. Doc fix.
+ (ring-insert+extend): Use c[ad]dr. Fix typo in docstring.
+ (ring-member): Simplify. Doc fix.
+ (ring-convert-sequence-to-ring): Simplify.
- * server.el (server-kill-new-buffers): Doc fix.
+2007-11-17 Juri Linkov <juri@jurta.org>
-2007-10-05 Juanma Barranquero <lekktu@gmail.com>
+ * dired-aux.el (dired-create-directory): Allow creating
+ a directory of an arbitrary depth. Add a loop to find the topmost
+ nonexistent parent dir `new', and call `dired-add-file' on it.
+ Set the `PARENTS' arg of `make-directory' to t.
- * bs.el (bs-mode): Make sure global-font-lock-mode doesn't
- activate font-locking in the *buffer-selection* buffer.
- (bs-show-sorted): Doc fix.
+2007-11-16 Jay Belanger <jay.p.belanger@gmail.com>
- * bs.el (bs--get-marked-string, bs--get-modified-string)
- (bs--get-readonly-string, bs--get-size-string, bs--get-name)
- (bs--get-mode-name, bs-mode): Fix typos in docstrings.
- (bs--format-aux): Doc fix.
+ * calc/calc-aent.el (calc-last-user-lang-parse-table): New variable.
+ (math-build-parse-table): Get parse information from
+ `math-parse-table'.
-2007-10-04 Juanma Barranquero <lekktu@gmail.com>
+2007-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * image-dired.el (image-dired-image-at-point-p): Fix typo in docstring.
+ * window.el (recenter-last-op): New var.
+ (recenter-top-bottom): New command.
+ (global-map): Bind it to C-l.
-2007-10-04 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+ * abbrev.el (abbrev--write): Fix error in transcription from C.
- * progmodes/gud.el (gud-gud-gdb-command-name): Fix typo in docstring.
+ * emulation/pc-select.el (pc-select-shifted-mark): Remove.
+ (pc-select-ensure-mark): Set mark-active to a special value instead.
+ Rename from ensure-mark. Update call callers.
+ (pc-select-maybe-deactivate-mark): Rename from maybe-deactivate-mark.
+ Rewrite. Update all callers.
+ (pc-selection-mode): Remove redundant var declaration.
-2007-10-04 Nick Roberts <nickrob@snap.net.nz>
+2007-11-16 Tassilo Horn <tassilo@member.fsf.org>
- * progmodes/gud.el (gud-gud-gdb-command-name): New option.
- (gud-gdb): New function for old M-x gdb (text command mode).
- (gud-gdb-command-name, gdb): Move to...
+ * doc-view.el (doc-view-search-backward, doc-view-search):
+ Fix assignment to free variable bug.
- * progmodes/gdb-ui.el: ...here and adapt doc string.
- (gud-gdba-command-name, gdba): Delete.
+2007-11-16 Martin Pohlack <mp26@os.inf.tu-dresden.de> (tiny change)
-2007-10-03 Juanma Barranquero <lekktu@gmail.com>
+ * emulation/pc-select.el (pc-select-shifted-mark): New var.
+ (ensure-mark): Set it.
+ (maybe-deactivate-mark): New fun.
+ Use it everywhere instead of (setq mark-active nil).
- * bs.el: Don't defvar `font-lock-verbose'.
- (bs-config-clear, bs-kill, bs-string-show-normally, bs-sort-functions)
- (bs--get-file-name): Fix typos in docstrings.
- (bs--show-header): Use `dolist' instead of `mapcar'.
- (bs-mode): Set `show-trailing-whitespace' to nil.
- (bs-buffer-sort-function, bs-mouse-select-other-frame)
- (bs-visits-non-file, bs-sort-buffer-interns-are-last, bs-show):
- Doc fixes.
+2007-11-16 Dan Nicolaescu <dann@ics.uci.edu>
-2007-10-02 Adam Hupp <adam@hupp.org> (tiny change)
+ * textmodes/reftex-dcr.el (reftex-start-itimer-once):
+ Add check for XEmacs.
- * progmodes/gdb-ui.el (pdb): Specify file for gud-break.
+ * calc/calc-menu.el (calc-mode-map): Pacify byte compiler.
-2007-10-02 Nick Roberts <nickrob@snap.net.nz>
+ * doc-view.el (doc-view-resolution): Add missing :group.
- * progmodes/gud.el (gdb): Make graphical mode the default and
- switch to text command mode if appropriate, i.e., reverse previous
- arrangement.
- (gud-gdb-marker-filter): Adapt for above change.
+2007-11-16 Juanma Barranquero <lekktu@gmail.com>
- * progmodes/gdb-ui.el (gdb-init-1): Don't set the values
- gud-minor-mode and gud-marker-filter.
- (gdb-fullname-regexp): New variable.
- (gud-gdba-marker-filter): Use it to switch to text command
- mode if appropriate.
+ * subr.el (make-variable-frame-local):
+ Fix typo in obsolescence declaration.
-2007-10-02 Richard Stallman <rms@gnu.org>
+2007-11-16 Werner Lemberg <wl@gnu.org>
- * frame.el (cursor-in-non-selected-windows): Doc fix.
+ * files.el (set-auto-mode-1): Check second line for -*- if file
+ starts with '\" (which is used by man pages to identify needed
+ troff preprocessors).
-2007-10-01 Nick Roberts <nickrob@snap.net.nz>
+2007-11-16 Glenn Morris <rgm@gnu.org>
- * progmodes/gud.el (gud-display-line): Find source buffer even when
- GUD buffer has its own frame.
+ * mail/mail-extr.el (mail-extr-all-top-level-domains): Update domains.
-2007-10-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-11-16 Jay Belanger <jay.p.belanger@gmail.com>
- * term/x-win.el (icon-map-list): Set to nil for 22.1 compatibility.
+ * calc/calc-lang.el (math-oper-table): Fix typo.
+ Reduce precedence of "/" for TeX.
-2007-09-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * calc/calc-menu.el (calc-modes-menu): Add Languages submenu.
- * term/x-win.el (x-gtk-stock-map): Version is 22.2.
+2007-11-16 Juri Linkov <juri@jurta.org>
-2007-09-29 Martin Rudalics <rudalics@gmx.at>
+ * dired-aux.el (dired-read-shell-command-default): New function.
+ (dired-read-shell-command): Use its return value for DEFAULT arg.
- * allout.el (allout-before-change-handler): Replace got-char by
- goto-char.
+ * replace.el (keep-lines-read-args, occur-read-primary-args):
+ Use a list of default values for DEFAULT arg of read-from-minibuffer.
-2007-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * man.el (Man-heading-regexp): Add 0-9.
+ (Man-first-heading-regexp): Remove leading space [ \t]* before NAME.
- * vc-svn.el (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
- Used to try and automatically enabled smerge-mode in the presence of
- conflicts and to call `svn resolved' when the conflicts are gone.
- (vc-svn-parse-status): Remember the svn-specific status.
+2007-11-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * newcomment.el (comment-choose-indent): New function extracted
- from comment-indent. Improve the alignment algorithm.
- (comment-indent): Use it.
+ * doc-view.el (doc-view-ghostscript-options): Remove resolution arg.
+ (doc-view-resolution): New custom var.
+ (doc-view-pdf/ps->png): Use it.
+ (doc-view-shrink-factor): New var.
+ (doc-view-enlarge, doc-view-shrink): New commands.
+ (doc-view-mode-map): Use them.
-2007-09-27 Juanma Barranquero <lekktu@gmail.com>
+2007-11-15 Juanma Barranquero <lekktu@gmail.com>
- * emacs-lisp/eldoc.el (eldoc-message-commands-table-size)
- (eldoc-message-commands, eldoc-current-idle-delay):
+ * ediff-wind.el (ediff-window-setup-function):
+ * simple.el (normal-erase-is-backspace):
+ * eshell/em-unix.el (eshell/info):
+ * progmodes/cc-engine.el (c-crosses-statement-barrier-p):
Fix typos in docstrings.
- * progmodes/python.el (python-eldoc-function): Doc fix.
-
-2007-09-26 Eli Zaretskii <eliz@gnu.org>
-
- * menu-bar.el (menu-bar-search-documentation-menu): Rename from
- menu-bar-apropos-menu. All users changed.
- (menu-bar-help-menu): Change menu symbols to better match the text
- displayed by the menu.
-
-2007-09-25 Glenn Morris <rgm@gnu.org>
-
- * view.el (view-search-no-match-lines): Add a doc string.
- Rewrite to simplify and work better.
-
-2007-09-24 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-completion-mode-p): Rename from
- `tramp-completion-mode'. Revert logic, check `return', `newline'
- and such alike. Packages like Icicles tend to use other completion
- characters but `tab' and `space' only.
- (top): Require cl.el, when `copy-tree' is not available otherwise.
-
- * net/tramp-vc.el (tramp-vc-user-login-name): Get argument by
- `ad-get-arg'.
-
-2007-09-24 Ville Skytt,Ad(B <scop@xemacs.org> (tiny change)
-
- * net/tramp-vc.el (tramp-vc-user-login-name):
- Use `vc-find-version' instead of `process-file' to check whether we
- have a new enough vc that doesn't need the defadvice.
-
-2007-09-23 Dan Nicolaescu <dann@ics.uci.edu>
-
- * files.el (file-name-sans-versions): Use [:alnum:] and also allow
- #, @, : and ^.
-
-2007-09-23 Glenn Morris <rgm@gnu.org>
-
- * ses.el (ses-calculate-cell): Don't evaluate unsafe formulae.
-
-2007-09-22 Dan Nicolaescu <dann@ics.uci.edu>
-
- * pcvs-defs.el (cvs-mode-map): Bind TAB and backtab.
-
- * log-view.el (log-view-mode-map): Likewise.
-
- * diff-mode.el (diff-mode-shared-map): Likewise.
-
-2007-09-21 Francesco Potort,Al(B <pot@gnu.org>
-
- * progmodes/octave-inf.el (inferior-octave-mode): Use add-hook to
- add inferior-octave-directory-tracker to the buffer-local value
- of comint-input-filter-functions.
-
-2007-09-22 Dan Nicolaescu <dann@ics.uci.edu>
-
- * files.el (file-name-sans-versions): Also allow `A-Z'.
-
- * vc.el: Mention all supported VC backends.
-
-2007-09-22 Richard Stallman <rms@gnu.org>
-
- * wid-edit.el (widget-specify-button): Don't merge mouse-face with
- neighbouring buttons.
-
-2007-09-22 Andreas Schwab <schwab@suse.de>
-
- * files.el (file-name-sans-versions): Also allow `_'.
-
-2007-09-22 Glenn Morris <rgm@gnu.org>
-
- * eshell/esh-mode.el (eshell-output-filter-functions):
- Add eshell-postoutput-scroll-to-bottom.
-
-2007-09-21 Dan Nicolaescu <dann@ics.uci.edu>
-
- * files.el (file-name-sans-versions): Allow - and a-z in version names.
-
- * log-view.el (log-view-mode-map, log-view-mode-menu):
- Bind log-view-annotate-version.
- (log-view-beginning-of-defun, log-view-end-of-defun)
- (log-view-annotate-version): New functions.
- (log-view-mode): Use log-view-beginning-of-defun and
- log-view-end-of-defun.
-
-2007-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Fix staging.
-
-2007-09-21 Kevin Ryde <user42@zip.com.au>
-
- * international/mule.el (sgml-html-meta-auto-coding-function):
- Bind `case-fold-search' to t.
-
-2007-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * wid-edit.el (widget-image-insert): Don't merge mouse-face with
- neighbouring buttons.
-
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Recognize gcc's use of "note" for informational messages.
-
-2007-09-20 Glenn Morris <rgm@gnu.org>
-
- * textmodes/tex-mode.el (tex-validate-buffer): Use paragraph
- motion functions, rather than hard-coding "\n\n".
- (tex-validate-region): Check for eobp, to speed up.
- (tex-next-unmatched-end): Doc fix.
-
-2007-09-19 Glenn Morris <rgm@gnu.org>
-
- * textmodes/tex-mode.el (tex-terminate-paragraph):
- Use backward-paragraph.
-
-2007-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/css-mode.el (css-electric-keys): electrick->electric.
- (css-mode): Update correspondingly.
-
-2007-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
-
- * vc-hooks.el (vc-menu-entry): New var.
- (vc-mode-line-map): Use it so that this menu also uses the extra-menu.
- (menu-bar-tools-menu): Add the VC menu here rather than in menu-bar.el.
- (vc-menu-map): Declare and initialize in one step.
-
- * menu-bar.el (vc-menu-map): Don't setup any more.
- Instead, just create the proper spot in the menu.
-
-2007-09-18 Dan Nicolaescu <dann@ics.uci.edu>
- Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc.el: Document new VC operation `extra-menu'.
-
- * vc-hooks.el (vc-default-extra-menu, vc-menu-map-filter): New fun.
-
-2007-09-17 Dan Nicolaescu <dann@ics.uci.edu>
-
- * vc-git.el (vc-git-log-view-mode): Add font-lock patterns for
- Signed-off-by, Acked-by and Merge.
-
-2007-09-17 Glenn Morris <rgm@gnu.org>
-
- * textmodes/tex-mode.el (tex-compilation-parse-errors): Prefer the
- filename from `--file-line-error', if it is available.
-
-2007-09-17 Joe Wells <jbw@macs.hw.ac.uk> (tiny change)
-
- * textmodes/tex-mode.el (tex-compilation-parse-errors): Also match
- TeX `--file-line-error' format.
-
-2007-09-17 Glenn Morris <rgm@gnu.org>
-
- * textmodes/tex-mode.el (tex-region): Simplify previous change,
- handling the case where the region is not in `tex-main-file'.
- (tex-region-1): Delete.
- (tex-region-header): New function, doing the header part of the
- old tex-region-1.
-
-2007-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * ediff-init.el (ediff-verbose-p): This var is not a constant.
-
-2007-09-16 Drew Adams <drew.adams@oracle.com>
-
- * cus-edit.el (custom-face-edit-activate): Doc fix.
-
-2007-09-16 Glenn Morris <rgm@gnu.org>
-
- * textmodes/tex-mode.el (tex-region): Handle the case where the
- region is not in `tex-main-file'. Move the old code that applies
- to both cases...
- (tex-region-1): ...to this new function.
-
-2007-09-15 Martin Rudalics <rudalics@gmx.at>
-
- * simple.el (blink-matching-open): Don't display message when no
- paren is found within blink-matching-paren-distance characters.
- Don't search prompt in blink-matching-paren-distance nil case.
-
-2007-09-14 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (terminal-init-xterm): Add C-M- bindings.
-
-2007-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-mtn.el: New file.
-
- * vc-hooks.el (vc-handled-backends): Add Mtn.
-
-2007-09-13 Eli Zaretskii <eliz@gnu.org>
-
- * files.el (find-file, find-file-other-window)
- (find-file-other-frame, find-file-existing, find-file-read-only)
- (find-file-read-only-other-window)
- (find-file-read-only-other-frame)
- (find-alternate-file-other-window, find-alternate-file): Doc fixes.
-
-2007-09-13 Jari Aalto <jari.aalto@cante.net>
-
- * man.el (Man-default-man-entry): At end of line, continue looking
- to the next line for possible end of hyphenated command.
-
-2007-09-13 Chris Moore <dooglus@gmail.com>
-
- * shell.el (shell-resync-dirs): Don't move the cursor relative to
- the command being edited.
-
-2007-09-13 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb-ready): New variable.
- (gdb): Set it to nil. Set gud-running to nil here...
- (gud-common-init): ...instead of here.
-
- * progmodes/gdb-ui.el (gdba, gdb-send, gdb-source-info):
- Use gdb-ready. Discard input until GDB is ready to accept it.
-
-2007-09-12 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (terminal-init-xterm): Add bindings for M-S- and
- C-M-S- keys.
-
-2007-09-12 Martin Rudalics <rudalics@gmx.at>
-
- * dired.el (dired-warning): Inherit from font-lock-warning-face to
- make it show up with eight colors.
-
-2007-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * diff-mode.el (diff-sanity-check-hunk): Fix up the case when unified
- diffs are concatenated with no intervening line.
-
-2007-09-10 Dave Love <fx@gnu.org>
-
- * progmodes/python.el: Merge changes from Dave Love's v2007-Sep-10.
- (python-font-lock-keywords): Update to the 2.5 version of the language.
- (python-quote-syntax): Let-bind font-lock-syntactic-keywords to nil.
- (python-backspace): Only behave funny in code.
- (python-compilation-regexp-alist): Add PDB stack trace regexp.
- (inferior-python-mode): Add PDB prompt regexp.
- (python-fill-paragraph): Refine the fenced-string regexp.
- (python-find-imports): Handle imports spanning several lines.
- (python-mode): Add `class' to hideshow support.
-
-2007-09-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs.el (cvs-mode-add-change-log-entry-other-window): Use
- add-log-buffer-file-name-function rather than bind buffer-file-name,
- so we dont end up calling change-log-mode in *cvs* when `fi' is the
- ChangeLog file itself.
-
- * outline.el (outline-flag-region): Use front-advance.
-
-2007-09-07 Ilya Zakharevich <ilyaz@cpan.org>
-
- * progmodes/cperl-mode.el: Merge upstream 5.23.
- (cperl-where-am-i): Remove function.
- (cperl-backward-to-noncomment): Don't go too far when skipping POD/HEREs
- (cperl-sniff-for-indent): De-invert [string] and [comment].
- When looking for label, skip s:m:y:tr.
- (cperl-indent-line): Likewise.
- (cperl-mode): Don't assume `font-lock-multiline' is auto-local.
- (cperl-windowed-init): Wrong `ps-print' handling.
- Both thanks to Chong Yidong.
- (cperl-look-at-leading-count): Could fail with unfinished RExen.
- (cperl-find-pods-heres): If the second part of s()[] is missing,
- don't try to highlight delimiters...
-
-2007-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/compile.el (compilation-get-file-structure): Complete last
- change by also using spec-directory in the puthash.
-
-2007-09-07 Riccardo Murri <riccardo.murri@gmail.com>
-
- * vc-bzr.el (vc-bzr-admin-lastrev): New constant.
- (vc-bzr-file-name-relative): Use 'when' instead of 'and'.
- (vc-bzr-status): Fix shadowing of variable 'status'.
- (vc-bzr-workfile-version): Use correct path to 'last-revision' file.
- Use `expand-file-name' instead of `concat'.
- (vc-bzr-annotate-command): Use option name '--long' instead of '-l'.
- Update annotation line regexp. Fixes launchpad.net [Bug 137435].
-
-2007-09-05 Jason Rumney <jasonr@gnu.org>
-
- * frame.el (focus-follows-mouse): Doc-fix. Change default on w32.
-
-2007-09-02 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/lisp-mode.el (lisp-indent-offset): Make defcustom.
- Add `safe-local-variable' property.
- (lisp-body-indent): Likewise.
-
-2007-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * info.el (info-tool-bar-map): Add :rtl keyword to right/left-arrow and
- prev/next-node.
-
- * term/x-win.el (x-gtk-stock-map, icon-map-list): New variables.
- (x-gtk-map-stock): New function.
-
-2007-09-02 Glenn Morris <rgm@gnu.org>
-
- * comint.el (comint-mode): Don't set scroll-conservatively.
-
- * eshell/em-unix.el (eshell/time): Stringify and flatten the
- non-command arguments.
-
-2007-09-01 Thien-Thi Nguyen <ttn@gnuvola.org>
-
- * emacs-lisp/bytecomp.el (byte-recompile-directory):
- Fix bug: Don't expand top-level file name more than once.
- Reported by Dmitry Antipov <dmantipov@yandex.ru>.
-
-2007-09-01 Richard Stallman <rms@gnu.org>
-
- * files.el (hack-local-variables-confirm): Rename arg VARS to ALL-VARS.
- Add doc string.
-
-2007-08-30 Richard Stallman <rms@gnu.org>
-
- * speedbar.el (speedbar-frame-reposition-smartly)
- (speedbar-set-mode-line-format, speedbar-reconfigure-keymaps)
- (speedbar-check-vc): Don't use dframe-xemacsp.
-
-2007-08-30 Martin Rudalics <rudalics@gmx.at>
-
- * files.el (backup-buffer-copy): Try to overwrite old backup first.
-
-2007-08-29 Martin Rudalics <rudalics@gmx.at>
-
- * repeat.el (repeat): Use last-repeatable-command instead of
- real-last-command. Run pre- and post-command hooks for
- self-insertion. Update doc-string.
-
-2007-08-28 Glenn Morris <rgm@gnu.org>
-
- * progmodes/cc-langs.el (c-constant-kwds): Add java: true, false, null.
-
-2007-08-27 Alexandre Julliard <julliard@winehq.org>
-
- * vc-git.el (vc-git-state): Call git-add --refresh to update the
- state of the file.
- (vc-git-workfile-unchanged-p): Delegate implementation to vc-git-state.
- (vc-git-create-repo): Fix invalid command.
-
-2007-08-27 Richard Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-mode):
- Catch errors in flyspell-mode-on.
-
-2007-08-27 Thien-Thi Nguyen <ttn@gnuvola.org>
-
- * progmodes/modula2.el (m2-definition, m2-module):
- Don't use previous-line. Reported by T. V. Raman.
-
-2007-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-handle-toolbar-switch-mode): Add explicit
- argument to tool-bar-mode call.
-
-2007-08-27 Glenn Morris <rgm@gnu.org>
-
- * diff-mode.el (diff-find-file-name): Only accept regular files,
- to rule out /dev/null, directories, etc.
-
-2007-08-25 Dan Nicolaescu <dann@ics.uci.edu>
-
- * progmodes/cperl-mode.el (cperl-indent-level): Autoload the
- safe-local-variable setting.
- * progmodes/perl-mode.el (perl-indent-level): Likewise.
-
-2007-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * uniquify.el (uniquify-rationalize-file-buffer-names): Check liveness
- of buffers in uniquify-managed.
-
- * simple.el (invisible-p): Rename from text-invisible-p.
- Update callers.
-
-2007-08-25 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-langs.el (c-other-decl-block-key-in-symbols-alist):
- new language variable.
-
- * progmodes/cc-engine.el (c-brace-anchor-point): New function.
- (c-add-stmt-syntax): Give accurate anchor points for "namespace",
- "extern" etc., rather than BOI. Fix addition of spurious
- syntactic-symbol 'defun-block-intro, replacing it with
- 'innamespace, etc.
-
-2007-08-25 Reiner Steib <Reiner.Steib@gmx.de>
-
- * pcvs.el (cvs-query-directory): Only prompt when prefix is given.
- Don't behave differently when executed via M-x. Add doc string.
-
-2007-08-24 Ulrich Mueller <ulm@gentoo.org> (tiny change)
-
- * files.el (backup-buffer-copy): Don't wrap delete in
- condition-case, only try to delete if file exists.
-
-2007-08-24 Glenn Morris <rgm@gnu.org>
-
- * files.el (backup-buffer-copy): Revert 2007-08-22 change.
-
-2007-08-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cperl-mode.el (defcustom, x-color-defined-p, cperl-is-face)
- (cperl-is-face, cperl-force-face, cperl-etags-snarf-tag, cperl-mode)
- (cperl-etags-snarf-tag, cperl-etags-goto-tag-location, cperl-init-faces)
- (cperl-etags-goto-tag-location): Use new style backquotes.
-
- * subr.el (complete-with-action): Backport from trunk (for vc-arch.el).
- (dynamic-completion-table): Use it it.
-
- * net/browse-url.el: Remove spurious * in custom docstrings.
- (browse-url-filename-alist): Use new-style backquote.
-
- * emacs-lisp/backquote.el (backquote-unquote-symbol)
- (backquote-splice-symbol): Clarify they're not new-style unquotes.
-
- * emacs-lisp/edebug.el (edebug-list-form, edebug-match-symbol, \,)
- (\,@): Backslash the , and ,@ which are not new-style unquotes.
-
- * textmodes/texinfmt.el (\,): Clarify it's not a new-style unquote.
-
- * net/socks.el (socks-username/password-auth-filter):
- Remove unused vars `state' and `desired-len'.
- (socks-parse-services, socks-nslookup-host): Use with-current-buffer.
- (socks-wait-for-state-change): Use new-style backquotes.
-
- * pcvs.el (cvs-mode-status): Fix long-standing typo.
-
- * emacs-lisp/bytecomp.el (byte-compile-from-buffer): Check old-style
- backquotes after each `read' rather than once per buffer.
-
- * dframe.el: Remove spurious * in custom docstrings.
- (dframe-xemacsp): Remove, use (featurep 'xemacs) instead.
- (dframe-xemacs20p): Remove, inline at the sole use point.
- (defface): Don't defvar the face, don't use old-style backquote.
- (defcustom): Don't use old-style backquote.
- (dframe-frame-parameter, dframe-mouse-event-p):
- Make it obvious that it's always defined.
- (dframe-popup-kludge): New function to replace
- dframe-xemacs-popup-kludge and dframe-xemacs-popup-kludge.
- (dframe-frame-mode, dframe-set-timer-internal)
- (dframe-mouse-set-point): Remove use of with-no-warnings from
- XEmacs-specific code.
- (dframe-set-timer-internal): Fix very old bug with
- post-command-idle-hook.
-
- * emacs-lisp/byte-opt.el (byte-optimize-featurep): Handle `sxemacs'.
-
-2007-08-22 Chong Yidong <cyd@stupidchicken.com>
-
- * image-mode.el (image-minor-mode): Use image-mode-text-map.
-
-2007-08-22 Reiner Steib <Reiner.Steib@gmx.de>
-
- * sort.el (sort-fold-case, sort-numeric-base): Mark as
- safe-local-variable.
-
-2007-08-22 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * net/browse-url.el (browse-url-emacs): New function.
-
-2007-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/bytecomp.el (byte-compile-from-buffer): Display a big fat
- warning if the file uses old style backquotes.
-
- * emacs-lisp/bytecomp.el (byte-compile-log-file)
- (byte-recompile-directory, byte-compile-file)
- (byte-compile-from-buffer): Use with-current-buffer.
-
- * simple.el (text-invisible-p): Rename from line-move-invisible-p.
- (line-move-invisible-p): Keep as an obsolete alias, just to be safe.
- (line-move-1, line-move-finish, line-move-to-column)
- (move-end-of-line, move-beginning-of-line): Use new name.
-
-2007-08-22 Glenn Morris <rgm@gnu.org>
-
- * files.el (backup-buffer-copy): Check backup directory is
- writable, to avoid infloop deleting old backup.
-
- * mail/rmail.el (rmail-movemail-variant-p): Call on load to set
- movemail related variables.
- (rmail-insert-inbox-text): Use only rmail-movemail-program, which
- will now be set before this is called.
-
-2007-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/backquote.el (backquote-delay-process): Fix last change.
-
- * progmodes/ada-mode.el: Fix up comment style in header.
- (ada-check-emacs-version): Remove.
- (ada-mode): Set parse-sexp-* even if they don't exist: can't hurt.
- (ada-region-selected): Use (featurep 'xemacs) rather than contortions
- to try and quieten the byte-compiler.
- (ada-create-keymap): Use [(..)] keys, which work on both (X)Emacs.
-
- * vc.el (vc-annotate-warp-version): Don't use previous-line.
-
-2007-08-20 Johannes Weiner <hannes@saeurebad.de> (tiny change)
-
- * emacs-lisp/lisp-mode.el (preceding-sexp): New fun, the code was
- extracted from `eval-last-sexp-1'.
- (eval-last-sexp-1): Call `preceding-sexp'.
-
-2007-08-19 Glenn Morris <rgm@gnu.org>
-
- * Makefile.in (custom-deps, finder-data, autoloads, recompile)
- (progmodes/cc-mode.elc, mh-e/mh-loaddefs.el): Use $(emacs) rather
- than $(EMACS), so that EMACSLOADPATH is set. Prevents any system
- shadow files messing up the compilation.
-
-2007-08-18 Glenn Morris <rgm@gnu.org>
-
- * progmodes/scheme.el (scheme-mode-variables):
- Set font-lock-comment-start-skip.
-
-2007-08-18 Martin Rudalics <rudalics@gmx.at>
-
- * progmodes/ada-mode.el (ada-create-syntax-table):
- Move set-syntax-table from here to ...
- (ada-mode): ... here. Don't change global value of comment-multi-line.
- Call new function ada-initialize-syntax-table-properties.
- Add ada-handle-syntax-table-properties to font-lock-mode-hook.
- (ada-deactivate-properties, ada-initialize-properties):
- Replace by new functions ...
- (ada-handle-syntax-table-properties, ada-set-syntax-table-properties)
- (ada-initialize-syntax-table-properties): ... to set up syntax-table
- properties uniformly, independently from whether font-lock-mode
- is enabled or not. Handle read-only buffers and do not change
- undo-list when setting syntax-table properties.
- (ada-after-change-function): Use ada-set-syntax-table-properties.
-
-2007-08-17 Bob Rogers <rogers-emacs@rgrjr.dyndns.org> (tiny change)
-
- * progmodes/cperl-mode.el (cperl-look-at-leading-count)
- (cperl-find-pods-heres): Fix an error when typing expressions like
- `s{a}{b}'.
-
-2007-08-17 Glenn Morris <rgm@gnu.org>
-
- * progmodes/compile.el (compilation-get-file-structure): Make use
- of the directory part when checking for an existing entry, to
- handle files with same basename in different directories.
-
-2007-08-16 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el (ps-header-font-size, ps-header-title-font-size)
- (ps-footer-font-size, ps-line-number-font-size, ps-line-spacing)
- (ps-paragraph-spacing): Docstring fix.
-
-2007-08-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * smerge-mode.el (smerge-resolve): New arg `safe'.
- (smerge-resolve-all, smerge-batch-resolve): New function.
- (smerge-refine): Make sure `diff' returns the expected result.
- (smerge-parsep-re): New const.
- (smerge-mode): Use it to adjust paragraph-separate.
-
- * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords):
- Correctly match / regexp matchers as first char on a line when
- fontifying only that line.
-
- * emacs-lisp/cl-macs.el (cl-transform-lambda): Preserve the match-data.
-
-2007-08-16 Glenn Morris <rgm@gnu.org>
-
- * ps-print.el (ps-font-size): Doc fix.
-
-2007-08-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-bzr.el: Don't fiddle with vc-handled-backend.
- (vc-bzr-registered): Don't redundantly protect against
- file-error. Actually use the format-specific code.
- (vc-bzr-buffer-nonblank-p): Remove.
- (vc-bzr-status): Change `kindchange' -> `kindchanged'.
-
-2007-08-15 Glenn Morris <rgm@gnu.org>
-
- * mail/undigest.el (rmail-digest-parse-rfc1153sloppy): Be even
- sloppier, for the sake of GNU Mailman.
- (rmail-digest-rfc1153): Initialize `result' correctly.
-
-2007-08-14 Glenn Morris <rgm@gnu.org>
-
- * simple.el (bad-packages-alist): New constant.
- (bad-package-check): New function. Together, these two add
- elements to `after-load-alist' to check for problematic external
- packages.
- * emulation/cua-base.el: Move CUA-mode check to `bad-packages-alist'.
-
-2007-08-13 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * pcvs-parse.el (cvs-parse-table): Handle additional instance of
- optional quotes around files in NEED-UPDATE . REMOVED case.
-
- * progmodes/ada-xref.el (ada-gnatls-args): Fix docstring.
- (ada-treat-cmd-string): Improve error message.
- (ada-do-file-completion): Call `ada-require-project-file', so
- project variables are set properly.
- (ada-prj-find-prj-file): Delete Emacs 20.2 support.
- (ada-gnatfind-buffer-name): New constant.
- (ada-find-any-references): Use new constant. Set buffer name
- properly in compilation-start. Toggle read-only properly.
- (ada-find-in-src-path): Fix spelling error in docstring.
-
- * progmodes/vhdl-mode.el (vhdl-update-progress-info): Avoid divide
- by zero error.
-
-2007-08-13 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-send): Handle CTRL-D more carefully.
-
-2007-08-12 Richard Stallman <rms@gnu.org>
-
- * pcvs.el (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
- (cvs-execute-single-file): Use new name split-string-and-unquote.
- (cvs-header-msg): Use new name combine-and-quote-strings.
-
- * emulation/vi.el (vi-next-line): Ignore return value of line-move.
-
- * progmodes/gud.el (gud-common-init): Use new name
- split-string-and-unquote.
-
- * progmodes/flymake.el (flymake-err-line-patterns): Fix infloop
- in javac regexp.
-
- * pcvs-util.el (cvs-qtypedesc-strings): Use new names
- combine-and-quote-strings and split-string-and-unquote.
-
- * subr.el (combine-and-quote-strings): Rename from strings->string.
- (split-string-and-unquote): Rename from string->strings.
-
-2007-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * log-view.el (log-view-font-lock-keywords): Use `eval' so as to adapt
- to buffer-local settings.
-
- * emacs-lisp/backquote.el (backquote-delay-process): New function.
- (backquote-process): Add internal arg `level'. Use the two to
- correctly handle nested backquotes.
-
-2007-08-09 Riccardo Murri <riccardo.murri@gmail.com>
-
- * vc-bzr.el (vc-bzr-registered): Use \0 instead of literal NULs.
- (vc-bzr-state-words): Add "kind changed" state word.
- (vc-bzr-status): New function. Return Bzr idea of file status,
- which is different from VC's.
- (vc-bzr-state): Use vc-bzr-status.
- (vc-workfile-unchanged-p): Use vc-bzr-status.
- (vc-bzr-revert): Use synchronous process; expect exitcode 0.
- (vc-dired-state): Process "kind changed" state word.
-
-2007-08-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-hooks.el (vc-default-find-file-not-found-hook): Do nothing.
-
- * vc-rcs.el (vc-rcs-find-file-not-found-hook):
- Move from vc-default-find-file-not-found-hook.
-
-2007-08-09 Edward O'Connor <hober0@gmail.com> (tiny change)
-
- * url/url-auth.el (url-basic-auth): When prompting for username
- and password, default to the username and password in the URL.
-
-2007-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emulation/cua-base.el (cua--keymaps-initialized):
+ Rename from `cua--keymaps-initalized'. Callers changed.
+ (cua-highlight-region-shift-only): Doc fix.
+ (cua-paste-pop): Fix typo in docstring.
- * man.el: Remove spurious * in docstrings.
- Merge defvars and toplevel setq-defaults.
- (Man-highlight-references0): Limit=nil rather than point-max.
- (Man-mode-map): Move initialization into the declaration.
- (Man-strip-page-headers, Man-unindent): Use dolist & inhibit-read-only.
- (Man-view-header-file): Use expand-file-name rather than concat.
- (Man-notify-when-ready, Man-bgproc-sentinel): Use with-current-buffer.
+2007-11-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * man.el (Man-next-section): Make sure we do not move backward.
+ * emulation/cua-base.el (cua--pre-command-handler-1):
+ Use input-decode-map instead of function-key-map.
+ Use event-modifiers now that it works reliably.
-2007-08-08 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+ * vc.el (vc-diff-internal): Pop-to-buffer later.
- * ps-print.el (ps-default-fg, ps-default-bg): Docstring fix.
- (ps-begin-job): Use ps-default-fg and ps-default-bg only when
- ps-print-color-p is neither nil nor black-white. Reported by Christian
- Schlauer <cs-muelleimer-rubbish.bin@arcor.de>.
+ * subr.el (event-modifiers): Use internal-event-symbol-parse-modifiers.
-2007-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+ * pcvs.el (cvs-revert-if-needed): Ignore `unknown' files, since cvs
+ did not touch them.
- * files.el (auto-mode-alist): Use the purecopied text (duh!).
+2007-11-15 Jay Belanger <jay.p.belanger@gmail.com>
-2007-08-08 Andreas Schwab <schwab@suse.de>
+ * calc/calc-menu.el: New file.
+ * calc/calc.el (calc-mode): Require calc-menu.
- * mail/mailabbrev.el (sendmail-pre-abbrev-expand-hook): Check for
- self-insert-command, not self-insert.
+2007-11-14 Juanma Barranquero <lekktu@gmail.com>
-2007-08-08 Glenn Morris <rgm@gnu.org>
+ * isearch-multi.el (isearch-buffers-next-buffer-function): Doc fix.
- * emacs-lisp/checkdoc.el (checkdoc-ispell-lisp-words): Remove `iff'.
+2007-11-14 Nick Roberts <nickrob@snap.net.nz>
- * Replace `iff' in doc-strings and comments.
+ * progmodes/gdb-ui.el (gdb-parent-bptno-enabled): New variable.
+ (gdb-breakpoint-regexp, gdb-mouse-toggle-breakpoint-margin)
+ (gdb-mouse-toggle-breakpoint-fringe, gdb-delete-breakpoint)
+ (gdb-goto-breakpoint): Generalise for breakpoints with multiple
+ locations.
+ (gdb-info-breakpoints-custom, gdb-assembler-custom)
+ (gdb-toggle-breakpoint): Update for new gdb-breakpoint-regexp.
+ (gdb-put-breakpoint-icon): Only display icon for parent breakpoint.
- * help-mode.el (help-make-xrefs): Search for symbol constituents,
- rather than just `-'.
+2007-11-13 Noah Friedman <friedman@splode.com>
-2007-08-08 Martin Rudalics <rudalics@gmx.at>
+ * calc/calc.el: Add `backward-delete-char-untabify' to the list of
+ bindings to remap when `calc-scan-for-dels' is non-nil.
- * dired.el (dired-pop-to-buffer):
- * mouse-drag.el (mouse-drag-should-do-col-scrolling):
- * calendar/calendar.el (generate-calendar-window):
- * progmodes/compile.el (compilation-set-window-height):
- * textmodes/two-column.el (2C-two-columns, 2C-merge):
- Use window-full-width-p instead of comparing frame-width and
- window-width.
+2007-11-13 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/compile.el (compilation-find-buffer): Remove extra
- argument in call to compilation-buffer-internal-p.
+ * emacs-lisp/byte-opt.el (byte-compile-trueconstp): Handle more
+ constant forms.
+ (byte-compile-nilconstp): New function.
+ (byte-optimize-cond): Kill subsequent branches when a branch is
+ know to be taken or not taken.
+ (byte-optimize-if): Use byte-compile-nilconstp instead of hand coding.
-2007-08-07 Michael Albinus <michael.albinus@gmx.de>
+2007-11-13 Dan Nicolaescu <dann@ics.uci.edu>
- * net/tramp.el (tramp-handle-file-remote-p): Handle optional
- parameters IDENTIFICATION and CONNECTED.
- (tramp-handle-insert-file-contents): VISIT must be handled after
- insertion of the local copy. Reported by Peter Gordon
- <peter@pg-consultants.com>.
- (tramp-file-name-handler): No special handling for
- `expand-file-name'. But for `file-name-as-directory'.
- (tramp-find-shell, tramp-open-connection-telnet)
- (tramp-open-connection-rsh, tramp-open-connection-su)
- (tramp-open-connection-multi)
- (tramp-open-connection-setup-interactive-shell): Guard against
- $PROMPT_COMMAND shell var. Reported by Steve Youngs
- <steve@sxemacs.org>.
- (tramp-append-tramp-buffers): Replace "sensible" by "sensitive" in
- the hint.
+ * vc.el (vc-register): Allow registering a file passed as a
+ parameter instead of just the current buffer.
- * net/trampver.el: Update release number.
+2007-11-12 Michael Albinus <michael.albinus@gmx.de>
-2007-08-07 Tom Tromey <tromey@redhat.com>
+ * net/tramp.el (tramp-open-connection-setup-interactive-shell):
+ Check whether the output of "uname -sr" has been changed.
- * progmodes/tcl.el (tcl-indent-level, tcl-continued-indent-level):
- Add safe-local-variable property.
+2007-11-12 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2007-08-07 Chong Yidong <cyd@stupidchicken.com>
+ * progmodes/compile.el (compilation-error-regexp-alist-alist): Insert
+ patterns from compilation-perl.el and compilation-weblint.el files.
- * image-mode.el (image-toggle-display): Use image-refresh.
+2007-11-12 Dan Nicolaescu <dann@ics.uci.edu>
- * longlines.el (longlines-decoded): New variable.
- (longlines-mode): Avoid encoding or decoding the buffer twice.
+ * progmodes/compilation-perl.el:
+ * progmodes/compilation-weblint.el: Disable autoloads, they cause
+ a bootstrap failure.
-2007-08-07 Riccardo Murri <riccardo.murri@gmail.com>
+ * vc-cvs.el (vc-cvs-diff): If backup files exist, diff them
+ instead of doing "cvs diff" in order to avoid accessing the repository.
- * vc-bzr.el: Remove comments about vc-bzr.el being a modified
- unofficial version.
- (vc-bzr-command): Remove redundant setting of process-connection-type.
- (vc-bzr-admin-checkout-format-file): Add autoload.
- (vc-bzr-root-dir): Remove in favor of vc-bzr-root.
- (vc-bzr-root): Switch to implementation of vc-bzr-root-dir.
- (vc-bzr-registered): Compare dirstate format tag with known good
- value, abort parsing if match fails. Warn user in docstring.
- (vc-bzr-workfile-version): Case for different Bzr branch formats.
- See bzrlib/branch.py in Bzr sources.
- (vc-bzr-diff): First argument FILES may be a string rather than a list.
- (vc-bzr-shell-command): Remove in favor of
- vc-bzr-command-discarding-stderr.
- (vc-bzr-command-discarding-stderr): New function.
+2007-11-12 Kevin Ryde <user42@zip.com.au>
-2007-08-06 Riccardo Murri <riccardo.murri@gmail.com>
+ * progmodes/compilation-perl.el:
+ * progmodes/compilation-weblint.el: New files.
- * vc-bzr.el (vc-bzr-registered): Gracefully handle missing "bzr"
- program, and return nil
- (vc-bzr-state): Gracefully handle missing "bzr" program, and return nil.
- (vc-bzr-state): Look for path names relative to the repository
- root after status keyword.
- (vc-bzr-file-name-relative): New function.
- (vc-bzr-admin-dirname): Reinstate, as other vc-bzr-admin-... paths
- depend on it.
- (vc-bzr-admin-dirname, ...-checkout-format-file)
- (...-branch-format-file, ...-revhistory): Paths to some Bzr internal
- files that we now parse directly for speed.
- (vc-bzr-root-dir): Use `vc-bzr-admin-checkout-format-file' as witness.
- (vc-bzr-registered): Only parse vc-bzr-admin-dirstate file if it exists.
- (vc-bzr-state): "bzr status" successful only if exitcode is 0
- (vc-bzr-root): Use `vc-bzr-shell-command'. Stderr may contain
- Bzr warnings, so we must discard it.
- (vc-bzr-workfile-version): Speedup counting lines from
- `vc-bzr-admin-revhistory' file, but fallback to spawning "bzr revno"
- if that file doesn't exist.
- (vc-bzr-responsible-p): Use `vc-bzr-root' instead of
- `vc-bzr-root-dir' for speed. Add `vc-bzr-admin-dirname'
- (not ".bzr"!) to `vc-directory-exclusion-list'
- (vc-bzr-shell-command): New function.
+2007-11-11 Juanma Barranquero <lekktu@gmail.com>
-2007-08-06 Tom Tromey <tromey@redhat.com>
+ * international/iso-cvt.el (iso-translate-conventions): Doc fix.
+ (iso-aggressive-german-trans-tab, iso-conservative-german-trans-tab)
+ (iso-tex2iso-trans-tab, iso-gtex2iso-trans-tab): Reflow docstring.
+ (iso-spanish, iso-german, iso-iso2tex, iso-tex2iso, iso-gtex2iso)
+ (iso-iso2gtex, iso-iso2duden, iso-iso2sgml, iso-sgml2iso):
+ Rewrite in active voice.
- * diff-mode.el (diff-unified->context, diff-reverse-direction)
- (diff-fixup-modifs): Typo in docstring.
+2007-11-11 Tassilo Horn <tassilo@member.fsf.org>
-2007-08-06 Stefan Monnier <monnier@iro.umontreal.ca>
+ * doc-view.el: Add comments about isearch support.
- * emulation/tpu-edt.el (tpu-current-line): Use posn-at-point and
- count-screen-lines.
- (tpu-edt-off): Disable relevant pieces of advice.
+2007-11-11 Dan Nicolaescu <dann@ics.uci.edu>
- * emulation/tpu-extras.el (tpu-before-save-hook): Rename from
- tpu-write-file-hook. Activate it with add-hook on buffer-save-hook.
- (newline, newline-and-indent, do-auto-fill): Use advice instead of
- redefining the function.
- (tpu-set-scroll-margins): Activate the pieces of advice.
+ * vc.el (vc-start-entry): Fix setting the in the case the function
+ is called from vc-dired. Use when instead of if where appropriate.
-2007-08-06 Michael Albinus <michael.albinus@gmx.de>
+2007-11-11 Vinicius Jose Latorre <viniciusjl@ig.com.br>
- * net/ange-ftp.el (ange-ftp-hook-function): Catch also errors in
- process-filter.
+ * ps-print.el (ps-do-despool): Do not force ps-lpr-switches
+ to be a list.
+ (ps-begin-job): Error if ps-lpr-switches is not a list.
-2007-08-06 Martin Rudalics <rudalics@gmx.at>
+2007-11-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * help.el (resize-temp-buffer-window): Use window-full-width-p
- instead of comparing frame-width and window-width.
+ * faces.el (face-normalize-spec): Remove function.
+ (frame-set-background-mode): Undo last change.
-2007-08-05 Peter Povinec <ppovinec <at> yahoo.com> (tiny change)
+2007-11-10 Jason Rumney <jasonr@gnu.org>
- * term.el: Honor term-default-fg-color and term-default-bg-color
- settings when modifying term-current-face.
- (term-default-fg-color, term-default-bg-color): Initialize from
- default term-current-face.
- (term-mode, term-reset-terminal): Set term-current-face with
- term-default-fg-color and term-default-bg-color.
- (term-handle-colors-array): term-current-face has term-default-fg-color
- and term-default-bg-color after reset escape sequence.
- (term-handle-colors-array): Set term-current-color with
- term-default-fg/bg-color instead of ansi-term-color-vector when the
- index (term-ansi-current-color or term-ansi-current-bg-color) is zero.
+ * w32-fns.el: Sync charset names with setup-default-fontset.
+ Append "-1" where second part missing.
-2007-08-05 Michael Albinus <michael.albinus@gmx.de>
+2007-11-10 Juri Linkov <juri@jurta.org>
- * files.el (set-auto-mode): Handle also remote files wrt
- `auto-mode-alist'.
+ * isearch.el (isearch-mode-end-hook, isearch-mode-end-hook-quit):
+ Fix docstring. Reported by Leo <sdl.web@gmail.com>.
- * net/tramp.el (tramp-handle-file-remote-p): Return a string as
- remote identification.
+ * custom.el (custom-note-var-changed): Remove the `interactive'
+ spec from this new non-interactive function.
-2007-08-04 Glenn Morris <rgm@gnu.org>
+2007-11-10 Tassilo Horn <tassilo@member.fsf.org>
- * autorevert.el (auto-revert-tail-mode): auto-revert-tail-pos is
- zero, not nil, when the library is first loaded. Check for a file
- that has been modified on disk.
+ * doc-view.el (doc-view-mode-map, doc-view-menu)
+ (doc-view-pdf->txt-sentinel): Adapt to new search UI.
+ (doc-view-search-backward): New function.
+ (doc-view-search): Query new regexp if prefix arg is given, else
+ jump to next/previous match.
+ (doc-view-mode): Handle compressed files.
+ (jka-compr): Required for compressed files.
- * progmodes/cperl-mode.el (cperl-compilation-error-regexp-alist):
- Remove duplicate defvar preventing initialization.
- (cperl-mode): Fix compilation-error-regexp-alist-alist setting.
+2007-11-10 Paul Pogonyshev <pogonyshev@gmx.net>
-2007-08-03 Miles Bader <miles@gnu.org>
+ * replace.el (query-replace-show-replacement): New defcustom.
+ (perform-replace): Use `match-substitute-replacement' if
+ `query-replace-show-replacement' is non-nil.
- * vc-hooks.el (vc-handled-backends): Change capitalization of VC
- backend names for new backends to `Git', `Hg', and `Bzr'.
- * vc-hg.el (vc-hg-dired-state-info): Use `Hg' as VC backend name,
- not `HG'.
- * vc-git.el (vc-git-dired-state-info): Use `Git' as VC backend
- name, not `GIT'.
- * vc-bzr.el (vc-bzr-dir-state, vc-bzr-dired-state-info)
- (vc-bzr-unload-hook): Use `Bzr' as VC backend name, not `BZR'.
+2007-11-10 David Kastrup <dak@gnu.org>
-2007-08-03 Glenn Morris <rgm@gnu.org>
+ * subr.el (match-substitute-replacement): New function.
- * net/telnet.el (telnet-mode): Set comint-use-prompt-regexp to t.
+2007-11-10 Carsten Dominik <dominik@science.uva.nl>
-2007-08-02 Richard Stallman <rms@gnu.org>
+ * files.el (auto-mode-alist): Select org-mode for files with the
+ extension ".org".
- * mail/rmailsum.el (rmail-make-summary-line): Find end of msg number
- to update deleted flag.
+2007-11-10 Martin Rudalics <rudalics@gmx.at>
- * cus-edit.el (customize-apropos, customize-apropos-options)
- (customize-apropos-faces, customize-apropos-groups): Improve prompt.
+ * help.el (help-window, help-window-point-marker): New variables.
+ (help-window-select): New option.
+ (with-help-window): New macro for displaying help windows.
+ (help-window-display-message, help-window-setup-finish)
+ (help-window-setup): New functions used for setting up help windows.
+ (print-help-return-message): Reset help-window to nil.
+ (view-lossage): Use with-help-window instead of
+ with-output-to-temp-buffer and move help-window-point-marker after
+ inserted text.
+ (describe-bindings, describe-key, describe-mode): Use
+ with-help-window instead of with-output-to-temp-buffer.
- * menu-bar.el (menu-bar-help-menu): Add "About GNU" menu item.
+ * help-mode.el (help-mode): Set view-exit-action to bury the
+ buffer instead of fiddling with windows. Simplify code.
+ (help-mode-finish): When help-window eqs t set it to the selected
+ window and have with-help-window set up view-return-to-alist.
+ (help-buffer): Add autoload cookie.
- * startup.el (fancy-splash-head, startup-echo-area-message):
- Change message text.
+ * view.el (view-remove-frame-by-deleting): Change default value to t.
+ Add autoload cookie.
+ (view-exit-action, view-file, view-file-other-window)
+ (view-file-other-frame, view-buffer, view-buffer-other-window)
+ (view-buffer-other-frame): Rewrite doc strings.
+ (view-return-to-alist-update): New function to remove stale entries
+ from view-return-to-alist.
+ (view-mode-enter): Rewrite doc string and simplify code.
+ (view-mode-exit): Handle new case 'keep-frame. Don't reset
+ view-exit-action to nil. Simplify code and rewrite doc string.
+
+ * apropos.el (apropos-describe-plist):
+ * descr-text.el (describe-char):
+ * disp-table.el (describe-display-table):
+ * faces.el (list-faces-display, describe-face):
+ * facemenu.el (list-colors-display):
+ * help-fns.el (describe-function, describe-variable)
+ (describe-syntax, describe-categories):
+ Use with-help-window instead of with-output-to-temp-buffer.
+
+2007-11-10 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * emacs-lisp/byte-opt.el (byte-optimize-featurep):
+ Optimize (featurep 'emacs) to t.
+
+ * emacs-lisp/bytecomp.el (byte-compile-find-bound-condition):
+ New function.
+ (byte-compile-maybe-guarded): Use it to also look for bound
+ symbols inside `and' forms. Comment out non-working code that was
+ trying to avoid warnings for XEmacs code.
+
+ * vc.el (vc-diff-internal): Make the *vc-diff* buffer read only.
+
+ * vc-svn.el (vc-svn-print-log, vc-svn-diff):
+ * vc-mcvs.el (vc-mcvs-print-log, vc-mcvs-annotate-command):
+ * vc-cvs.el (vc-cvs-print-log, vc-cvs-diff)
+ (vc-cvs-annotate-command):
+ * vc-arch.el (vc-arch-diff): Remove test to check if start-process
+ is bound, it always is.
- * emulation/tpu-edt.el (next-line-internal): Setting deleted.
- All callers use line-move.
+2007-11-10 Jason Rumney <jasonr@gnu.org>
- * progmodes/compile.el (compilation-find-buffer): Return current
- buffer immediately if suitable.
- (compile, compilation-buffer-name, compilation-start): Doc fixes.
+ * term/w32-win.el (w32-initialize-window-system): Move SJIS font
+ setup here from global scope.
-2007-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-11-10 Juanma Barranquero <lekktu@gmail.com>
- * vc-bzr.el (vc-bzr-admin-dirstate): Rename from `...-dirname'.
- Make it more discriminating and more useful.
- (vc-bzr-root-dir): Use new name.
- (vc-bzr-registered): Use new name and look at the dirstate file to
- determine if it's registered or not without running `bzr'.
+ * ido.el (ido-save-history): Save the history file in UTF-8, not
+ the current filename coding system.
-2007-08-01 Eric Hanchrow <offby1@blarg.net> (tiny change)
+2007-11-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * ibuf-ext.el (ibuffer-mark-old-buffers): Docstring fix.
+ * simple.el (interprogram-cut-function, interprogram-paste-function):
+ Don't make them frame-local any more.
-2007-07-31 Drew Adams <drew.adams@oracle.com>
+ * faces.el (x-create-frame-with-faces, tty-create-frame-with-faces):
+ Don't set interprogram-(cut|paste)-function on each frame.
- * cus-edit.el (custom-group-value-create, custom-goto-parent):
- Fix parent groups link.
+ * term/x-win.el (x-select-text, x-cut-buffer-or-selection-value):
+ Make them work in tty frames.
+ (interprogram-cut-function, interprogram-paste-function):
+ Set them globally.
-2007-07-31 Daiki Ueno <ueno@unixuser.org>
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * faces.el (face-normalize-spec): New function.
- (frame-set-background-mode): Normalize face-spec before calling
- face-spec-match-p.
+ * international/iso-cvt.el (iso-spanish, iso-german, iso-iso2tex)
+ (iso-tex2iso, iso-gtex2iso, iso-iso2gtex, iso-iso2duden): Doc fixes.
+ (iso-iso2duden-trans-tab): Add docstring.
-2007-07-31 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-11-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * vc-bzr.el: New file (copied from the trunk).
+ * abbrev.el (define-abbrev-table): Record the variable definition.
- * vc-hooks.el (vc-handled-backends): Add BZR.
- (vc-find-file-hook): Failsafe if the backend's `registered'
- function burps.
+ * emacs-lisp/bytecomp.el (byte-compile-file-form-define-abbrev-table):
+ New function.
- * server.el (server-window): Add switch-to-buffer-other-frame option.
+2007-11-09 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2007-07-30 Dan Nicolaescu <dann@ics.uci.edu>
+ * ps-print.el: Clean the code for checking suitable Emacs version.
+ (ps-do-despool): If ps-lpr-switches is not a list, force it to be one.
+ (ps-print-version): New version 6.8.1.
- * vc-git.el (vc-directory-exclusion-list, vc-handled-backends): Remove.
- (vc-git-revision-completion-table): Enable.
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * vc-hooks.el (vc-handled-backends): Add GIT and HG.
+ * files.el (enable-local-variables): Doc fix.
- * vc.el (vc-directory-exclusion-list): Add .git and .hg.
+2007-11-09 Nick Roberts <nickrob@snap.net.nz>
- * vc-hg.el (vc-hg-revision-completion-table): Re-enable.
- (vc-hg-registered): Set the vc-state property.
+ * progmodes/gud.el (gud-gdb): Remove vestigial gdba doc and code.
- * diff-mode.el (diff-mode-menu): New entries.
+2007-11-09 Sven Joachim <svenjoac@gmx.de>
-2007-06-30 Stefan Monnier <monnier@iro.umontreal.ca>
+ * dired-aux.el (dired-copy-file-recursive):
+ Preserve directory permissions.
- * diff-mode.el (diff-beginning-of-file-and-junk): New function.
- (diff-file-kill): Use it.
- (diff-beginning-of-hunk): Add arg `try-harder' using it.
- (diff-restrict-view, diff-find-source-location, diff-refine-hunk):
- Use it so they find the hunk even when we're in the file header.
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * vc.el: Add new VC operation `revision-completion-table'.
- (vc-default-revision-completion-table): New function.
- (vc-version-diff, vc-version-other-window): Use it to provide
- completion of revision names if the backend provides it.
+ * whitespace.el (whitespace-write-file-hook): Remove interactive spec.
+ (whitespace-unload-function): New-style unload function. When run,
+ unintern `whitespace-unload-hook' and call `unload-feature' recursively
+ to stop the old hook from messing with the unloading.
- * vc-arch.el (vc-arch--version-completion-table)
- (vc-arch-revision-completion-table): New functions to provide
- completion of revision names.
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * vc-cvs.el: Require CL.
- (vc-cvs-revision-table, vc-cvs-revision-completion-table):
- New functions to provide completion of revision names.
+ * emacs-lisp/elp.el (elp-report-limit, elp-restore-all)
+ (elp-unset-master, elp-results): Fix typos.
+ (elp-sort-by-function, elp-use-standard-output, elp-recycle-buffers-p):
+ Doc fixes.
-2007-07-29 Kimit Yada <kimitto@gmail.com> (tiny change)
+ * msb.el (msb--many-menus): Remove variable.
+ (msb-max-menu-items, msb--add-to-menu): Doc fixes.
+ (msb-menu-cond, msb-item-handling-function, msb--create-function-info)
+ (msb--toggle-menu-type): Fix typos in docstrings.
- * emacs-lisp/copyright.el (copyright-update-year, copyright-update)
- (copyright-fix-years, copyright): Correctly handle the case where
- copyright-limit is nil.
+ * shadowfile.el (shadow-inhibit-overload, shadow-remove-from-todo)
+ (shadow-insert-var): Doc fixes.
+ (shadow-file-match, shadow-define-cluster, shadow-define-regexp-group):
+ Reflow docstrings.
+ (shadow-parse-fullname, shadow-read-files): Fix typos in docstrings.
-2007-07-28 Konstantin Novitsky <knovitsk@Bear.com> (tiny change)
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * progmodes/python.el (run-python): Fix path separator under w32.
+ * ediff-hook.el (ediff, ediff-files, ediff-buffers, ebuffers, ediff3)
+ (ediff-files3, ediff-buffers3, ebuffers3, erevision, ediff-revision):
+ Fix typos in autoload docstrings.
-2007-07-28 Dan Nicolaescu <dann@ics.uci.edu>
+2007-11-09 Richard Stallman <rms@gnu.org>
- * vc-git.el: New File.
+ * savehist.el (savehist-save): Obey savehist-ignored-variables.
-2007-07-28 Alan Mackenzie <acm@muc.de>
+2007-11-09 Nick Roberts <nickrob@snap.net.nz>
- Fix problem with modes derived from CC Mode:
- * progmodes/cc-mode.el (c-make-emacs-variables-local): Move this
- macro to cc-langs.
- (c-init-language-vars-for): Remove call to above macro.
- * progmodes/cc-langs.el (c-make-emacs-variables-local): Macro has
- been moved to here.
- (c-make-init-lang-vars-fun): Call c-make-emacs-variables-local.
+ * progmodes/gdb-ui.el (gdb-delete-out-of-scope): New option.
+ (gdb-var-update-handler-1): Use it.
-2007-07-28 Eli Zaretskii <eliz@gnu.org>
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * net/trampver.el: Fix the `coding' cookie.
+ * loadhist.el (unload-feature): Remove erroneous check for the
+ FEATURE-unload-function variable; check the existence of the
+ function (that's what the docstring says, and it makes more sense).
-2007-07-25 Nick Roberts <nickrob@snap.net.nz>
+ * follow.el (follow-unload-function): Add docstring.
+ (follow-unload-function): Remove variable.
- * add-log.el (change-log-redate): Remove (not needed anymore and
- doesn't appear to work).
+ * server.el (server-unload-function): Remove variable.
+ (server-unload-function): Unbind `server-edit' from `C-x #'.
-2007-07-25 Glenn Morris <rgm@gnu.org>
+ * ses.el (ses-unload-function): New function.
- * Relicense all FSF files to GPLv3 or later.
+2007-11-09 Juanma Barranquero <lekktu@gmail.com>
- * COPYING: Switch to GPLv3.
+ * emacs-lisp/unsafep.el (unsafep, unsafep-function)
+ (unsafep-progn, unsafep-let): Fix typos in docstrings.
-2007-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
+ * uniquify.el (uniquify-maybe-rerationalize-w/o-cb): Define it
+ before use to avoid a warning in packages that require uniquify.
+ (uniquify-unload-function): New function and var.
- * pcvs.el (cvs-temp-buffer): Undo last ill-conceived change.
- Replace it with another one which disables undo before calling
- erase-buffer and then turns it back on if needed.
+2007-11-09 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * ediff-init.el (ediff-xemacs-p, ediff-emacs-p): Remove.
+ (ediff-has-face-support-p, ediff-BAD-INFO, ediff-check-version)
+ (ediff-current-diff-A, ediff-current-diff-B)
+ (ediff-current-diff-C, ediff-fine-diff-C, ediff-fine-diff-A)
+ (ediff-fine-diff-B, ediff-fine-diff-Ancestor, ediff-even-diff-A)
+ (ediff-even-diff-B, ediff-even-diff-C, ediff-even-diff-Ancestor)
+ (ediff-odd-diff-A, ediff-odd-diff-B, ediff-odd-diff-C)
+ (ediff-odd-diff-Ancestor, ediff-reset-mouse):
+ * ediff-wind.el (ediff-narrow-control-frame-leftward-shift)
+ (ediff-setup-windows-plain-merge)
+ (ediff-setup-windows-plain-compare, ediff-setup-control-frame)
+ (ediff-refresh-control-frame, ediff-get-visible-buffer-window):
+ * ediff-util.el (ediff-setup-keymap, )
+ (ediff-toggle-wide-display, ediff-toggle-multiframe)
+ (ediff-toggle-use-toolbar, ediff-really-quit)
+ (ediff-good-frame-under-mouse)
+ (ediff-highlight-diff-in-one-buffer)
+ (ediff-remove-flags-from-buffer, ediff-place-flags-in-buffer1)
+ (ediff-make-bullet-proof-overlay):
+ * ediff-mult.el (ediff-setup-meta-map, ediff-emacs-p)
+ (ediff-set-meta-overlay):
+ * ediff-help.el (ediff-help-region-map, ediff-set-help-overlays):
+ * ediff.el (ediff-documentation): Replace ediff-xemacs-p and
+ ediff-emacs-p with their former definitions.
+
+ * emulation/viper-init.el (viper-xemacs-p, viper-emacs-p): Remove.
+ (viper-has-face-support-p, viper-inactivate-input-method)
+ (viper-activate-input-method)
+ (viper-use-replace-region-delimiters, viper-restore-cursor-type):
+ * emulation/viper-mous.el (viper-multiclick-timeout)
+ (viper-surrounding-word, viper-mouse-click-insert-word)
+ (viper-mouse-click-search-word, viper-parse-mouse-key):
+ * emulation/viper-macs.el (viper-char-array-to-macro):
+ * emulation/viper.el (viper-go-away, viper-set-hooks)
+ (viper-non-hook-settings):
+ * emulation/viper-util.el (viper-get-saved-cursor-color-in-replace-mode)
+ (viper-get-saved-cursor-color-in-insert-mode)
+ (viper-get-saved-cursor-color-in-emacs-mode)
+ (viper-check-version, viper-get-visible-buffer-window)
+ (viper-file-checked-in-p, viper-set-replace-overlay)
+ (viper-set-replace-overlay-glyphs, viper-set-minibuffer-overlay)
+ (viper-check-minibuffer-overlay, viper-read-key-sequence)
+ (viper-key-to-emacs-key): Replace viper-xemacs-p and viper-emacs-p
+ with their former definitions.
+ (viper-eventify-list-xemacs): Only do work for XEmacs.
+ (viper-set-unread-command-events): Only do work for Emacs.
+ (viper-overlay-p, viper-make-overlay, viper-overlay-live-p)
+ (viper-move-overlay, viper-overlay-start, viper-overlay-end)
+ (viper-overlay-get, viper-overlay-put, viper-read-event)
+ (viper-characterp, viper-int-to-char, viper-get-face)
+ (viper-color-defined-p, viper-iconify): New defaliases replacing
+ the old fsets.
+
+ * progmodes/fortran.el (comment-region-function)
+ (uncomment-region-function): Pacify byte compiler.
+
+ * vc.el (vc-diff-internal): Remove code for an old version of gnus.
+
+2007-11-08 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-maybe-open-connection): Use a local copy of
+ `process-environment'.
-2007-07-24 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+2007-11-08 David Hansen <david.hansen@gmx.net> (tiny change)
- * ps-print.el: Problem with foreground and background color when
- printing a buffer with and without faces. Reported by Christian
- Schlauer <cs-muelleimer-rubbish.bin@arcor.de>.
- (ps-print-version): New version 6.7.5.
- (ps-default-fg): Change default value to nil, so black color is used
- when a face does not specify a foreground color.
- (ps-default-bg): Change default value to nil, so white color is used
- for background color.
- (ps-begin-job): Fix code.
+ * eshell/em-dirs.el (eshell-expand-multiple-dots): Change regexp to
+ match dir like "a...b".
-2007-07-24 Dan Nicolaescu <dann@ics.uci.edu>
+2007-11-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * vc-hg.el (vc-hg-revision-completion-table): Temporarily comment out.
+ * smerge-mode.el (smerge-refine-subst): Pass "-d" to diff.
-2007-07-24 Alan Mackenzie <acm@muc.de>
+2007-11-07 Michael Albinus <michael.albinus@gmx.de>
- * emacs-lisp/bytecomp.el (byte-compile-from-buffer):
- Initialise byte-compile-unresolved-functions before rather than
- after a compilation.
- (byte-compile-unresolved-functions): Amplify doc string.
+ * net/tramp.el (tramp-handle-substitute-in-file-name):
+ Don't expand the remote connection identification.
+ (tramp-find-shell, tramp-open-connection-setup-interactive-shell):
+ Set also $PS2 and $PS3 when setting $PS1. Check for shell echoing
+ before calling stty.
-2007-07-24 Glenn Morris <rgm@gnu.org>
+ * net/tramp-cache.el (tramp-cache-print)
+ (tramp-dump-connection-properties): Fix docstring.
+ (tramp-list-connections): Rename from `tramp-cache-list-connections'.
- * calendar/cal-tex.el (cal-tex-holidays, cal-tex-diary)
- (cal-tex-rules, cal-tex-buffer, cal-tex-24)
- (cal-tex-cursor-month-landscape, cal-tex-cursor-month)
- (cal-tex-cursor-week, cal-tex-cursor-week2)
- (cal-tex-cursor-week-iso, cal-tex-week-hours)
- (cal-tex-cursor-week-monday, cal-tex-weekly4-box)
- (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week)
- (cal-tex-cursor-filofax-daily, cal-tex-daily-page): Doc fix.
+ * net/tramp-cmds.el (tramp-cleanup-connection): Apply it.
-2007-07-24 Stefan Monnier <monnier@iro.umontreal.ca>
+ * net/tramp-ftp.el (tramp-ftp-file-name-handler): Don't expand the
+ remote connection identification when setting connection property.
- * pcvs.el (cvs-temp-buffer): Disable undo in temp buffers.
+ * net/tramp-smb.el (tramp-smb-handle-substitute-in-file-name):
+ "//" substitutes only in the local filename part.
-2007-07-23 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-11-07 David Hansen <david.hansen@gmx.net>
- * ses.el (ses-cleanup): Prevent Emacs from spuriously checking if the
- underlying file is uptodate.
+ * eshell/em-glob.el (eshell-extended-glob): Sort matches.
-2007-07-23 Richard Stallman <rms@gnu.org>
+2007-11-07 Glenn Morris <rgm@gnu.org>
- * progmodes/octave-inf.el (inferior-octave-prompt): Accept .exe.
+ * emulation/tpu-mapper.el (tpu-map-key): Use unless rather than cond.
+ Remove superfluous concats. Move final set-buffer to
+ non-emacs-specific code.
-2007-07-23 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-11-07 Rob Riepel <riepel@networking.stanford.edu>
- * progmodes/sh-script.el (sh-font-lock-backslash-quote)
- (sh-font-lock-flush-syntax-ppss-cache): New funs.
- (sh-font-lock-syntactic-keywords): Use them to distinguish the
- different possible cases for \'.
- (sh-font-lock-paren): Mark the relevant text with font-lock-multiline.
+ * emulation/tpu-mapper.el (tpu-map-key): Remove un-needed cond branch.
- * vc-hooks.el (vc-find-root): Walk up the tree to find an existing
- `file' from which to start the search and fix case where `file' is the
- current directory and the root as well.
+2007-11-07 Johan Bockg,Ae(Brd <bojohan@gnu.org>
- * pcvs.el (cvs-mode-add-change-log-entry-other-window): Use a directory
- name for buffer-file-name if it refers to a directory.
+ * eshell/esh-mode.el (eshell-output-filter):
+ * eshell/esh-proc.el (eshell-insertion-filter, eshell-sentinel):
+ Use `with-current-buffer'.
-2007-07-22 Jason Rumney <jasonr@gnu.org>
+2007-11-07 Andreas Schwab <schwab@suse.de>
- * w32-fns.el (set-default-process-coding-system): Use dos line ends
- for input to cmdproxy on all versions of Windows.
- Use dos line ends for input to plink.
+ * server.el (server-start): Only register cleanup after server was
+ started.
- * comint.el (comint-simple-send): Concat newline before sending.
- (comint-password-prompt-regexp): Recognize plink's passphrase prompt.
+2007-11-06 Michael Albinus <michael.albinus@gmx.de>
-2007-07-22 Juri Linkov <juri@jurta.org>
+ * net/tramp.el (top): Don't autoload `tramp-cache-print'.
- * isearch.el (isearch-edit-string): Save old point and
- isearch-other-end to old-point and old-other-end before reading
- the search string from minibuffer. After exiting minibuffer set
- point to old-other-end if point and the search direction is the
- same as before reading the search string.
- (isearch-del-char): Don't set isearch-yank-flag to t. Put point
- to isearch-other-end. Instead of isearch-search-and-update call
- three functions isearch-search, isearch-push-state and isearch-update.
+ * net/tramp-cache (tramp-cache-print): Move down.
+ (tramp-cache-list-connections): New defun.
-2007-07-22 Ralf Angeli <angeli@caeruleus.net>
+ * net/tramp-cmds.el (tramp-cleanup-connection): Use it.
- * textmodes/reftex.el (reftex-access-parse-file): Do not risk
- destroying an existing buffer.
+2007-11-06 Juanma Barranquero <lekktu@gmail.com>
-2007-07-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * ido.el (ido-save-history): Write the history file in the current
+ filename coding system, and add `coding' file-local variable.
- * startup.el (command-line-x-option-alist): Use x-handle-no-bitmap-icon.
+2007-11-06 Carsten Dominik <dominik@science.uva.nl>
- * term/x-win.el (x-handle-no-bitmap-icon): New function.
+ * textmodes/org.el (org-table-formula-substitute-names):
+ Remove forgotten temporary debugging code.
-2007-07-22 Ralf Angeli <angeli@caeruleus.net>
+2007-11-05 Michael Albinus <michael.albinus@gmx.de>
- * textmodes/reftex.el (reftex-access-parse-file): Create parse
- file in a way that does not interfere with recentf.
+ * net/tramp.el (tramp-wait-for-output): Ignore escape sequences in
+ the prompt.
-2007-07-21 Thien-Thi Nguyen <ttn@gnuvola.org>
+2007-10-05 Chris Moore <christopher.ian.moore@gmail.com>
- * image-dired.el (image-dired-sane-db-file): New func.
- (image-dired-write-tags, image-dired-remove-tag)
- (image-dired-list-tags, image-dired-write-comments)
- (image-dired-get-comment, image-dired-mark-tagged-files)
- (image-dired-create-gallery-lists): Call new func.
- Reported by Dieter Wilhelm <dieter@duenenhof-wilhelm.de>.
+ * wdired.el (wdired-use-dired-vertical-movement): Doc fix.
-2007-07-21 Dan Nicolaescu <dann@ics.uci.edu>
+2007-11-05 Simon Josefsson <simon@josefsson.org>
- * vc-hg.el (vc-hg-diff): Use vc-hg-command.
- (vc-hg-dir-state): Fix loop.
- (vc-hg-print-log): Fix expected return value for vc-hg-command.
- (vc-hg-next-version, vc-hg-delete-file, vc-hg-rename-file)
- (vc-hg-register, vc-hg-create-repo, vc-hg-checkin)
- (vc-hg-revert): Likewise.
- (vc-hg-revision-table, vc-hg-revision-completion-table): New functions.
+ * net/tls.el (tls-end-of-info): Doc fix.
-2007-07-21 Thien-Thi Nguyen <ttn@gnuvola.org>
+2007-11-05 Kenichi Handa <handa@ni.aist.go.jp>
- * emacs-lisp/lisp-mode.el (calculate-lisp-indent): In the
- case of alignment under a constant symbol, find and consider
- the sexp actually at indentation to be the "last sexp".
+ * international/utf-7.el (utf-7-imap): New coding system.
+ (utf-7-imap-post-read-conversion): New function.
+ (utf-7-imap-pre-write-conversion): New function.
-2007-07-20 Eli Zaretskii <eliz@gnu.org>
+2007-11-05 Stefan Monnier <monnier@iro.umontreal.ca>
- * makefile.w32-in (install-lisp-SH, install-lisp-CMD): New targets.
- (install): Use them to copy all *.el files before *.elc.
- (clean): Don't delete *~.
+ * abbrev.el (abbrev--write): Fix up typo.
-2007-07-20 Dan Nicolaescu <dann@ics.uci.edu>
+2007-11-04 Juanma Barranquero <lekktu@gmail.com>
- * vc-hg.el (vc-hg-workfile-unchanged-p): New function.
+ * abbrev.el (define-abbrev-table): Doc fix.
-2007-07-19 Dan Nicolaescu <dann@ics.uci.edu>
+2007-11-04 Thien-Thi Nguyen <ttn@gnuvola.org>
- * vc-hg.el (vc-hg-registered): Replace if with when.
- (vc-hg-state): Deal with nonexistent files.
+ * info.el (Info-revert-buffer-function): New func.
+ (Info-mode): Arrange to use it for reverting.
+ (Info-copy-current-node-name): Add space between filename and nodename.
-2007-07-18 Juanma Barranquero <lekktu@gmail.com>
+2007-11-04 Stefan Monnier <monnier@iro.umontreal.ca>
- * follow.el (follow-mode-hook, follow-mode-off-hook, follow-mode)
- (follow-delete-other-windows-and-split, follow-recenter)
- (follow-windows-aligned-p, follow-point-visible-all-windows-p)
- (follow-redisplay, follow-estimate-first-window-start)
- (follow-xemacs-scrollbar-support, follow-intercept-process-output):
- Fix typos in docstrings.
+ * abbrev.el (expand-abbrev): Move point back to expansion's end.
-2007-07-17 Thien-Thi Nguyen <ttn@gnuvola.org>
+2007-11-04 Glenn Morris <rgm@gnu.org>
- * bookmark.el (bookmark-show-all-annotations):
- Make sure each inserted annotation ends with newline.
+ * net/tls.el: Don't require rx when compiling.
+ (tls-end-of-info): Rewrite without using rx.
+ (open-tls-stream): Use with-current-buffer.
- (bookmark-maybe-sort-alist): Don't modify
- bookmark-alist. Instead, if not sorting, simply return it.
- (bookmark-bmenu-list): Call bookmark-maybe-sort-alist
- for its return value, not for its side effect.
+2007-11-04 Riccardo Murri <riccardo.murri@gmail.com>
-2007-07-17 Dan Nicolaescu <dann@ics.uci.edu>
+ * net/tls.el: Require rx when compiling.
+ (tls-end-of-info): New variable.
+ (open-tls-stream): Keep reading input until `tls-end-of-info' is
+ matched.
- * vc.el: Add more info about the vc-registered function.
+2007-11-03 Sean O'Rourke <seano@cs.ucla.edu>
-2007-07-16 David Kastrup <dak@gnu.org>
+ * register.el (append-to-register, prepend-to-register):
+ Don't signal error on empty register; use the text, instead.
- * emacs-lisp/advice.el (defadvice): Doc fix.
+2007-11-03 Michael Olson <mwolson@gnu.org>
-2007-07-16 Juanma Barranquero <lekktu@gmail.com>
+ * textmodes/remember.el (remember-buffer):
+ Use define-obsolete-function-alias rather than defalias.
- * subr.el (when, unless): Doc fix.
+2007-11-03 Ulrich Mueller <ulm@gentoo.org> (tiny change)
-2007-07-16 Dan Nicolaescu <dann@ics.uci.edu>
+ * simple.el (bad-packages-alist): Anchor semantic regexp.
- * vc-hg.el (vc-hg-state): Handle removed files.
- (vc-hg-dir-state, vc-hg-dired-state-info): New functions.
- (vc-hg-checkout): Re-enable.
+2007-11-03 Glenn Morris <rgm@gnu.org>
-2007-07-15 Richard Stallman <rms@gnu.org>
+ * newcomment.el (comment-dwim): Call comment-insert-comment-function,
+ if defined, for blank lines. Doc fix.
- * kmacro.el (kmacro-bind-to-key): Avoid comparisons on function keys.
+ * progmodes/fortran.el (fortran-mode-map): Don't bind M-;.
+ (fortran-mode): Set values for comment-region-function,
+ uncomment-region-function and comment-insert-comment-function.
+ (fortran-uncomment-region): New function.
- * tutorial.el (tutorial--find-changed-keys):
- Handle C-x specially like ESC.
+ * textmodes/nroff-mode.el (nroff-mode):
+ Set comment-insert-comment-function rather than indent-line-function.
+ (nroff-indent-line-function): Remove.
+ (nroff-insert-comment-function): New function.
-2007-07-15 Roland McGrath <roland@frob.com>
+2007-11-02 Michael Kifer <kifer@cs.stonybrook.edu>
- * add-log.el (add-change-log-entry): Check add-log-full-name
- and add-log-mailing-address later, after change-log-mode-hook.
+ * ediff-vers.el (ediff-vc-working-revision): Add a quote.
-2007-07-15 Richard Stallman <rms@gnu.org>
+2007-11-02 Michael Kifer <kifer@cs.stonybrook.edu>
- * isearch.el (isearch-mode, isearch-done):
- Delete unintended code in previous change.
+ * emulation/viper-ex.el (viper-ex): Do not ignore the region.
- * ps-print.el (ps-default-bg): Change to White.
+ * emulation/viper-cmd.el (viper-prev-destructive-command)
+ (viper-insert-prev-from-insertion-ring): Use ring-copy instead of
+ copy-sequence.
-2007-07-15 Aaron Hawley <aaronh@garden.org>
+ * ediff-util.el (ediff-make-current-diff-overlay): Do not use face-name.
+ Got rid of ediff-copy-list.
- * tar-mode.el (tar-get-descriptor): No error for zero-length file.
+ * ediff-diff.el (ediff-set-fine-diff-properties-in-one-buffer): Do not
+ use face-name.
+ (ediff-test-utility, ediff-diff-mandatory-option)
+ (ediff-reset-diff-options): Remove to simplify the mandatory option
+ handling on Windows.
+ (ediff-set-diff-options): Add.
+ (ediff-diff-options): Set "--binary" option as default in some cases.
-2007-07-15 Martin Rudalics <rudalics@gmx.at>
+ * ediff-vers.el (ediff-vc-internal): Use ediff-vc-revision-other-window.
+ (ediff-vc-merge-internal): Use ediff-vc-revision-other-window and
+ ediff-vc-working-revision. Require vc-hooks.
- * mouse.el (mouse-drag-track): Reset transient-mark-mode to nil
- when handling the terminating event.
+2007-11-02 Drake Wilson <drake@begriffli.ch> (tiny change)
-2007-07-15 Jeff Miller <jmiller@cablespeed.com> (tiny change)
+ * files.el (hack-local-variables): Fix membership tests to avoid
+ treating all variables as safe if `enable-local-variables' is
+ set to :safe (CVE-2007-5795).
- * calendar/calendar.el (calendar-goto-bahai-date): Autoload it.
+2007-11-02 Glenn Morris <rgm@gnu.org>
-2007-07-13 Eli Zaretskii <eliz@gnu.org>
+ * newcomment.el (comment-indent): Let comment-insert-comment-function,
+ if defined, do all the work of inserting a new comment.
- * makefile.w32-in (install-lisp-SH, install-lisp-CMD): New targets.
- (install): Use them to copy all *.el files before *.elc.
+ * progmodes/etags.el (tags-table-mode): Disable undo.
-2007-07-13 Dan Nicolaescu <dann@ics.uci.edu>
+ * simple.el (bad-packages-alist): Revert previous change.
- * replace.el (match): Use yellow1 instead of yellow.
+2007-11-02 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/gdb-ui.el (breakpoint-enabled): Use red1 instead of red.
+ * emacs-lisp/lselect.el: Move to obsolete/lselect.el.
- * pcvs-info.el (cvs-unknown): Likewise.
+ * obsolete/lselect.el: Do not warn about unknown functions.
-2007-07-12 Davis Herring <herring@lanl.gov>
+2007-11-02 Michael Olson <mwolson@gnu.org>
- * desktop.el (desktop-buffer-info, desktop-save):
- Use `desktop-dirname' instead of `dirname'.
+ * textmodes/remember.el (remember-buffer): Make this an alias of
+ remember-finalize, because Org uses it.
-2007-07-10 Jim Meyering <jim@meyering.net> (tiny change)
+2007-11-01 Michael Olson <mwolson@gnu.org>
- * emacs-lisp/copyright.el (copyright-current-gpl-version): Set to 3.
+ * textmodes/remember.el: Improve documentation in heading.
+ (remember-before-remember-hook): Turn into a customizable option.
+ (remember): Document INITIAL argument.
+ (remember-region): Remove autoload cookie. Improve docstring to
+ mention that it is called from the *Remember* buffer, and does not
+ have any functional overlap with the `remember' function.
+ (remember-finalize): Remove autoload cookie. Rename from
+ remember-buffer to emphasize that this does not have any
+ functional overlap with the `remember' function.
+ (remember-destroy): Remove autoload cookie.
+ (remember-mode-map): Define and initialize in one step.
+ (remember-mode): Improve docstring.
+ (remember-annotation-functions): Default to just '(buffer-file-name),
+ and don't try to take the default value from Planner.
- * autoinsert.el (auto-insert-alist): s/2/3/ in the generated comment.
+2007-11-01 Glenn Morris <rgm@gnu.org>
-2007-07-10 Richard Stallman <rms@gnu.org>
+ * doc-view.el (doc-view-cache-directory): Remove superfluous concat.
- * emacs-lisp/lisp-mode.el (eval-defun):
- Explain special handling of `defface'.
+ * simple.el (bad-packages-alist): Add an entry for standalone vc-svn.
-2007-07-09 Richard Stallman <rms@gnu.org>
+ * emacs-lisp/authors.el (authors-scan-change-log)
+ (authors-scan-el): Don't enable local eval; enable only safe local
+ variables, without querying.
- * isearch.el (isearch-edit-string): Call to isearch-push-state
- after the search.
+ * mail/footnote.el (footnote-numeric-regexp)
+ (footnote-english-upper-regexp, footnote-english-lower-regexp)
+ (footnote-roman-lower-regexp, footnote-roman-upper-regexp):
+ Match multi-character footnotes.
-2007-07-08 Katsumi Yamaoka <yamaoka@jpl.org>
+ * textmodes/nroff-mode.el (nroff-mode): Set indent-line-function.
+ (nroff-indent-line-function): New function.
+ (nroff-count-text-lines): Use nroff-forward-text-line rather than
+ obsolete alias.
- * cus-start.el (file-coding-system-alist): Fix custom type.
+2007-11-01 Ryan Yeske <rcyeske@gmail.com>
-2007-07-08 Chong Yidong <cyd@stupidchicken.com>
+ * net/rcirc.el (rcirc-last-quit-line, rcirc-last-line)
+ (rcirc-elapsed-lines): New argument PROCESS. Update callers.
+ (rcirc-print): Only update the line count when not marking the
+ line as omittable.
+ (rcirc-log-write): Specify coding system when writing logfile.
+ (rcirc-markup-fill): Make sure ellipsis does not cause line to wrap.
- * longlines.el (longlines-wrap-region): Avoid marking buffer as
- modified.
- (longlines-auto-wrap, longlines-window-change-function):
- Remove unnecessary calls to set-buffer-modified-p.
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
-2007-06-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * printing.el (printing): Fix :version, printing.el was included
+ for in emacs-22.1.
+ (pr-path-style, pr-path-alist, pr-txt-name)
+ (pr-txt-printer-alist, pr-ps-name, pr-ps-printer-alist)
+ (pr-temp-dir, pr-ps-temp-file, pr-file-modes, pr-gv-command)
+ (pr-gs-command, pr-gs-switches, pr-gs-device, pr-gs-resolution)
+ (pr-print-using-ghostscript, pr-file-tumble, pr-auto-region)
+ (pr-auto-mode, pr-mode-alist, pr-ps-utility)
+ (pr-ps-utility-alist, pr-menu-char-height, pr-menu-char-width)
+ (pr-setting-database, pr-visible-entry-list)
+ (pr-delete-temp-file, pr-list-directory, pr-buffer-name)
+ (pr-buffer-name-ignore, pr-buffer-verbose): Remove incorrect :version.
- * vc.el (vc-default-log-view-mode): New function.
- (vc-print-log): Add new `log-view-mode' VC operation.
+ * ediff-util.el (ediff-nuke-selective-display): Move definition to
+ top level, make it dependent on the emacs flavor.
-2007-07-08 Nick Roberts <nickrob@snap.net.nz>
+ * play/gamegrid.el (gamegrid-kill-timer, gamegrid-start-timer):
+ Test for XEmacs not for itimer.
- * pcvs-util.el (cvs-strings->string, cvs-string->strings):
- Rename and move to...
+ * term/sun-mouse.el:
+ * obsolete/sun-fns.el:
+ * obsolete/sun-curs.el: Remove files.
- * subr.el (strings->string, string->strings): ...here.
+ * term/sun.el (select-previous-complex-command): Remove obsolete code.
- * pcvs.el (cvs-reread-cvsrc, cvs-header-msg, cvs-checkout)
- (cvs-mode-checkout, cvs-execute-single-file): Use new function names.
+2007-10-31 Tassilo Horn <tassilo@member.fsf.org>
- * progmodes/gud.el (gud-common-init): Call string->strings instead
- of split-string.
+ * doc-view.el (doc-view-cache-directory): Fix bug where an integer
+ was given to concat.
-2007-07-07 Eli Zaretskii <eliz@gnu.org>
+2007-10-31 Stefan Monnier <monnier@iro.umontreal.ca>
- * term/w32-win.el (menu-bar-open): New function.
- Bind <f10> to it.
+ * doc-view.el (doc-view-mode-map): Bind doc-view-goto-page to the keys
+ used normally for goto-line. Change `g' to revert the buffer.
+ Add redundant `r' binding for buffer-revert.
-2007-07-07 Dan Nicolaescu <dann@ics.uci.edu>
+ * mail/mailabbrev.el (mail-abbrevs-mode): Use define-minor-mode.
+ (mail-abbrevs-setup): Use abbrev-expand-functions.
+ (build-mail-abbrevs): Use with-temp-buffer.
+ (define-mail-abbrev): Simplify.
+ (mail-abbrev-expand-wrapper): Rename sendmail-pre-abbrev-expand-hook.
+ Change it for use on abbrev-expand-functions.
+ (mail-abbrev-complete-alias): Use with-syntax-table.
- * log-view.el (log-view-mode-menu): New menu.
+2007-10-31 Michael Albinus <michael.albinus@gmx.de>
-2007-07-06 Dan Nicolaescu <dann@ics.uci.edu>
+ * net/tramp.el (tramp-handle-shell-command): Call `start-file-process'
+ directly. Fix bug in deleting temp file.
- * vc-hg.el: New file.
+2007-10-31 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-07-06 Andreas Schwab <schwab@suse.de>
+ * progmodes/python.el (python-mode-abbrev-table): Use :regexp.
+ Merge defvar and define-abbrev-table.
+ (def-python-skeleton): Use :case-fixed and :enable-function.
+ (python-abbrev-pc-hook, python-abbrev-syntax-table, python-pea-hook):
+ Remove.
+ (python-mode): Don't modify pre-abbrev-expand-hook.
- * emacs-lisp/lisp-mode.el (eval-last-sexp): Avoid introducing any
- dynamic bindings around the evaluation of the expression.
- Reported by Jay Belanger <jay.p.belanger@gmail.com>.
+2007-10-31 Dan Nicolaescu <dann@ics.uci.edu>
-2007-07-03 Dan Nicolaescu <dann@ics.uci.edu>
+ * ediff-util.el (ediff-file-checked-out-p)
+ (ediff-file-checked-in-p): Only call vc-locking-user for XEmacs.
- * progmodes/gud.el (auto-mode-alist): Match more valid gdb init
- file names.
+2007-10-31 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-07-02 Martin Rudalics <rudalics@gmx.at>
+ * abbrev.el (abbrev-symbol): Correct let->let*.
+ (abbrev--before-point): Only use abbrev-start-location if before point.
- * help-mode.el (help-make-xrefs): Skip spaces too when skipping tabs.
+2007-10-31 Juanma Barranquero <lekktu@gmail.com>
- * mouse.el (mouse-drag-mode-line-1): Quit mouse tracking when
- event is not a cons cell. Do not unread drag-mouse-1 events.
- Select right window in check whether space was stolen from
- window above.
+ * strokes.el (strokes-alphabetic-lessp): Simplify. Doc fix.
+ (strokes-unload-hook): Remove function and variable.
+ (strokes-unload-function): New-style unload function, adapted
+ from `strokes-unload-hook'.
-2007-07-01 Richard Stallman <rms@gnu.org>
+ * emacs-lisp/cl.el (cl-cannot-unload): Remove function.
+ (cl-unload-hook): Remove variable.
+ (cl-unload-function): New-style unload function, adapted
+ from `cl-cannot-unload'.
- * files.el (find-file-visit-truename): Fix safe-local-variable value.
+ * emacs-lisp/elp.el (elp-unload-hook): Remove function and variable.
+ (elp-unload-function): New-style unload function, adapted
+ from `elp-unload-hook'.
-2007-06-29 Juanma Barranquero <lekktu@gmail.com>
+2007-10-31 Sean O'Rourke <sorourke@cs.ucsd.edu>
- * generic-x.el (generic-define-mswindows-modes)
- (generic-define-unix-modes, apache-log-generic-mode)
- (bat-generic-mode-keymap, java-manifest-generic-mode)
- (show-tabs-generic-mode): Fix typos in docstrings.
+ * emacs-lisp/find-func.el (find-library): Use library at
+ point as default interactive argument.
-2007-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-10-31 Juanma Barranquero <lekktu@gmail.com>
- * dnd.el (dnd-get-local-file-name): Set fixcase to t in call to
- replace-regexp-in-string.
+ * shadowfile.el (shadow-join): Remove.
+ (shadow-shadows): Use `mapconcat' instead of `shadow-join'.
+ (shadow-initialize): Use `write-file-functions', not `write-file-hooks'.
+ (shadowfile-unload-hook): Remove function and variable.
+ (shadowfile-unload-function): New-style unload function, adapted
+ from `shadowfile-unload-hook'.
-2007-06-28 Andreas Schwab <schwab@suse.de>
+2007-10-31 Dan Nicolaescu <dann@ics.uci.edu>
- * Makefile.in ($(lisp)/mh-e/mh-loaddefs.el): Depend on
- $(lisp)/subdirs.el.
+ * progmodes/mixal-mode.el (mixal-run, mixal-debug): Call mixvm
+ only if it is bound.
-2007-06-28 Juanma Barranquero <lekktu@gmail.com>
+ * textmodes/reftex.el: Move autoloads for before all uses.
+ (reftex-make-overlay, reftex-overlay-put, reftex-move-overlay)
+ (reftex-delete-overlay): Move to the top level with the condition
+ in the body.
- * speedbar.el (speedbar-handle-delete-frame): Don't try to delete
- the speedbar frame if nil; that deletes the current frame or
- causes an error if it is the only frame.
- Reported by Angelo Graziosi <Angelo.Graziosi@roma1.infn.it>.
+ * progmodes/simula.el: Use when instead of if.
-2007-06-24 Juanma Barranquero <lekktu@gmail.com>
+ * iimage.el (iimage-locate-file): Define unconditionally.
- * desktop.el (desktop-read): Run `desktop-not-loaded-hook' in the
- directory where the desktop file was found, as the docstring says.
- (desktop-kill): Use `read-directory-name'.
+ * mail/mailabbrev.el (mail-abbrev-next-line):
+ * emulation/vip.el (vip-enlarge-region, vip-line)
+ (vip-next-line-at-bol, vip-previous-line)
+ (vip-previous-line-at-bol, vip-find-char, vip-put-back, ex-read):
+ Wrap with-no-warnings around uses of next-line and previous-line.
- * desktop.el (desktop-load-locked-desktop): New option.
- (desktop-read): Use it.
- (desktop-truncate, desktop-outvar, desktop-restore-file-buffer):
- Use `when'.
+ * ediff.el (run-ediff-from-cvs-buffer):
+ * ediff-vers.el (cvs-run-ediff-on-file-descriptor):
+ Remove function not used by pcl-cvs anymore.
+ (noninteractive, generic-sc-get-latest-rev)
+ (ediff-generic-sc-internal, ediff-generic-sc-merge-internal):
+ Delete support for long obsolete generic-sc.el.
-2007-06-24 Davis Herring <herring@lanl.gov>
+2007-10-31 Glenn Morris <rgm@gnu.org>
- * desktop.el (desktop-save-mode-off): New function.
- (desktop-base-lock-name, desktop-not-loaded-hook): New variables.
- (desktop-full-lock-name, desktop-file-modtime, desktop-owner)
- (desktop-claim-lock, desktop-release-lock): New functions.
- (desktop-kill): Tell `desktop-save' that this is the last save.
- Release the lock afterwards.
- (desktop-buffer-info): New function.
- (desktop-save): Use it. Run `desktop-save-hook' where the doc
- says to. Detect conflicts, and manage the lock.
- (desktop-read): Detect conflicts. Manage the lock.
+ * cvs-status.el: No longer require pcvs when compiling.
-2007-06-23 Eli Zaretskii <eliz@gnu.org>
+ * doc-view.el (doc-view-conversion-refresh-interval)
+ (doc-view-dvi->pdf, doc-view-pdf/ps->png, doc-view-pdf->txt)
+ (doc-view-reset-slice): Doc fixes.
+ (doc-view-menu): Remove deleted function doc-view-edit-doc.
- * ls-lisp.el (insert-directory): If an invalid regexp error is
- thrown, try using FILE as a literal file name, not a wildcard.
- Check for FILE as an existing file, not just a directory.
+2007-10-31 Juanma Barranquero <lekktu@gmail.com>
-2007-06-23 Juanma Barranquero <lekktu@gmail.com>
+ * help-at-pt.el (help-at-pt-unload-hook): Remove.
+ Timers are automatically canceled by `unload-feature'.
- * ruler-mode.el (ruler-mode): Prevent clobbering the original
- `header-line-format' when reentering ruler mode.
+ * delsel.el (delsel-unload-hook): Remove function and variable.
+ (delsel-unload-function): New-style unload function, adapted
+ from `delsel-unload-hook'.
-2007-06-23 Eli Zaretskii <eliz@gnu.org>
+ * msb.el (msb-unload-hook): Remove function and variable.
+ (msb-unload-function): New-style unload function, adapted from
+ `msb-unload-hook'.
- * ls-lisp.el (insert-directory): Don't treat FILE as a wildcard if
- FILE exists as a directory.
+2007-10-30 Juanma Barranquero <lekktu@gmail.com>
-2007-06-21 Stefan Monnier <monnier@iro.umontreal.ca>
+ * desktop.el (uniquify-managed): Pacify byte compiler.
+ (desktop-buffer-info): If the buffer name is managed by uniquify,
+ save the base name, not the uniquified one.
+ (desktop-create-buffer): Allow `rename-buffer' to generate a new
+ name in case of conflict.
- * progmodes/vera-mode.el (vera-mode): Fix `commend-end-skip' setting.
- (vera-font-lock-match-item): Fix doc string.
- (vera-in-comment-p): Remove unused function.
- (vera-skip-forward-literal, vera-skip-backward-literal): Improve code,
- use `syntax-ppss'.
- (vera-forward-syntactic-ws): Fix argument order.
- (vera-prepare-search): Use `with-syntax-table'.
- (vera-indent-line): Fix doc string.
- (vera-electric-tab): Fix doc string.
- (vera-expand-abbrev): Define alias instead of using `fset'.
- (vera-comment-uncomment-region): Use `comment-start-skip'.
+2007-10-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * doc-view.el: Use expand-file-name rather than concat.
+ (doc-view-cache-directory): Add the UID so multiple users won't clash.
+ (doc-view-current-overlay, doc-view-pending-cache-flush): New vars.
+ (doc-view-goto-page, doc-view-insert-image, doc-view-buffer-message)
+ (doc-view-toggle-display): Use an overlay over the whole buffer so as
+ not to have to touch the buffer's content.
+ (doc-view-initiate-display): New function, extracted from doc-view-mode.
+ (doc-view-mode): Use it. Don't mark as a special mode.
+ Put the page numbers in the modeline.
+ Set up the overlay. Hide the cursor. Run the mode hook.
+ Use after-revert-hook rather than revert-buffer-function.
+ (doc-view-search-internal): Fix typo.
+ (doc-view-convert-current-doc, doc-view-insert-image): Delay the
+ image-cache flush.
+ (doc-view-reconvert-doc): Don't reset the whole mode.
+ (doc-view-make-safe-dir): New function.
+ (doc-view-current-cache-dir): Use it.
+
+2007-10-30 Jason Rumney <jasonr@gnu.org>
+
+ * time.el (display-time-world-list): Test for zoneinfo support.
+
+2007-10-30 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-maybe-open-connection): Set $LC_ALL to "C".
+
+ * net/tramp-cache.el (tramp-flush-file-function): Check also
+ `default-directory' if `buffer-file-name' does not return a
+ string. Added to `eshell-pre-command-hook'.
+
+2007-10-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * doc-view.el (doc-view-current-doc): Remove.
+ Replace all uses by buffer-file-name.
+ (doc-view-menu): New menu.
+ (doc-view-reconvert-doc): Don't bind inhibit-read-only and remove
+ unused var `doc'.
+ (doc-view-sort): Simplify.
+ (doc-view-buffer-message): Don't change buffer-modified-p.
+ (doc-view-mode): Change it here instead.
+ Tighten scoping of prev-major-mode. Don't re-insert the file's content.
+ Don't modify the global value of revert-buffer-function.
+
+ * image-mode.el (image-forward-hscroll, image-next-line, image-eol)
+ (image-eob, image-mode, image-minor-mode, image-toggle-display-text)
+ (image-toggle-display): Take overlays into account and don't assume
+ point-min==1.
+
+2007-10-30 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ * vc.el (vc-annotate): Fix omission bug:
+ Specify value for vc-sentinel-movepoint.
+
+2007-10-30 Michael Olson <mwolson@gnu.org>
+
+ * textmodes/remember.el (remember-mode-hook)
+ (remember-handler-functions, remember-annotation-functions):
+ Add additional items as options, including some Org functions.
+
+2007-10-30 Tassilo Horn <tassilo@member.fsf.org>
+
+ * doc-view.el: Remove cl-dependency.
+ (doc-view-buffer-message): Mention new binding K.
+ (doc-view-convert-current-doc): Use function d-v-current-cache-dir
+ instead of variable.
+ (doc-view-current-cache-dir): Better cache dir naming.
+ (doc-view-current-display): Remove variable.
+ (doc-view-edit-doc, doc-view-display-maybe): Remove functions.
+ (doc-view-kill-proc): Set converter process to nil.
+ (doc-view-minor-mode): New minor mode.
+ (doc-view-minor-mode-map): New keymap.
+ (doc-view-mode): Remove text/image switching code. Use plain defun.
+ (doc-view-mode-map): New binding K kills converter process.
+ Remove C-c C-e binding.
+ (doc-view-mode-text-map): Remove keymap.
+ (doc-view-pdf/ps->png): Timer calls d-v-display instead of
+ d-v-display-maybe.
+ (doc-view-previous-major-mode): New variable.
+ (doc-view-ps->pdf): Resort args to make ps2pdf happy.
+ (doc-view-remove-if): New function.
+ (doc-view-search-next-match, doc-view-search-previous-match): Use it.
+ (doc-view-toggle-display): Toggle modes instead of display styles.
+ (doc-view-reconvert-doc): Adapt to new way of doing things.
+
+ * progmodes/ps-mode.el (ps-mode-map): Enable doc-view-minor-mode.
+
+2007-10-30 Glenn Morris <rgm@gnu.org>
+
+ * dirtrack.el (dirtrack-mode): Doc fix.
+
+ * shell.el (shell-dirtrack-verbose, shell-mode)
+ (shell-directory-tracker, shell-dirtrack-mode): Doc fix.
+
+ * emacs-lisp/bytecomp.el (byte-compile-disable-warning)
+ (byte-compile-enable-warning): Doc fix.
+
+ * emulation/tpu-mapper.el (tpu-map-key): Use with-no-warnings to
+ suppress byte-opt warning.
+
+2007-10-30 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * emulation/edt.el (edt-emacs19-p, edt-x-emacs19-p)
+ (edt-gnu-emacs19-p): Remove.
+ (edt-emacs-variant, edt-window-system): Use feature 'emacs.
+ (edt-xserver, edt-page-backward, edt-beginning-of-line)
+ (edt-end-of-line-forward, edt-end-of-line-backward)
+ (edt-one-word-forward, edt-one-word-backward, edt-character)
+ (edt-line-forward, edt-next-line, edt-previous-line, edt-top)
+ (edt-find-forward, edt-find-backward, edt-find-next-forward)
+ (edt-find-next-backward, edt-reset, edt-advance, edt-backup)
+ (edt-define-key, edt-bottom-check, edt-sentence-forward)
+ (edt-sentence-backward, edt-paragraph-forward)
+ (edt-paragraph-backward, edt-restore-key, edt-window-top)
+ (edt-window-bottom, edt-scroll-window-forward-line)
+ (edt-scroll-window-backward-line, edt-line-to-bottom-of-window)
+ (edt-line-to-top-of-window, edt-paragraph-backward)
+ (edt-restore-key, edt-window-top, edt-window-bottom)
+ (edt-scroll-window-forward-line)
+ (edt-scroll-window-backward-line, edt-line-to-bottom-of-window)
+ (edt-line-to-middle-of-window, edt-goto-percentage)
+ (edt-display-the-time, edt-remember, edt-split-window)
+ (edt-emulation-on, edt-emulation-off)
+ (edt-default-emulation-setup, edt-user-emulation-setup)
+ (edt-select-default-global-map, edt-select-user-global-map):
+ Replace uses of edt-x-emacs19-p and edt-gnu-emacs19-p with feature
+ tests.
+
+ * textmodes/reftex-index.el (reftex-index-selection-or-word):
+ Use feature test instead of boundp test so it can be resolved at
+ compile time.
+
+ * net/newsticker.el (replace-regexp-in-string): Only define for XEmacs.
+
+2007-10-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * abbrev.el: Rename `count' and `system-flag' to :count and :system.
+ Update all users.
+ (abbrev-get, abbrev-put): Simplify.
+ (define-abbrev): Don't store the `force' value in the :system property.
+ (abbrev--before-point): Obey the :enable-function of the abbrev as well.
+
+2007-10-30 Michael Olson <mwolson@gnu.org>
+
+ * desktop.el (desktop-minor-mode-table): Add line for ERC.
+
+ * textmodes/remember.el: New file that implements a mode for
+ quickly jotting down things to remember.
+
+ * textmodes/remember-diary.el: A backend for remember.el that
+ implements saving notes to a Diary file.
+
+2007-10-29 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-command-prefix, allout-inhibit-auto-fill):
+ Relocate in file.
+ (allout-doublecheck-at-and-shallower): Increase to include
+ slightly greater depths, since yank interaction is now ok.
+ Also, elaborate the docstring to explain the situation.
+ (produce-allout-mode-map, allout-hotspot-key-handler): Use vconcat
+ instead of concat, so we accommodate key sequences expressed as
+ vectors as well as strings and lists.
+ (allout-flag-region, allout-hide-by-annotation): Make the
+ hidden-text overlays 'front-advance.
+ (allout-overlay-insert-in-front-handler): Correct docstring's grammar.
+ (allout-aberrant-container-p, allout-on-current-heading-p)
+ (allout-e-o-prefix-p, allout-next-heading)
+ (allout-previous-heading, allout-goto-prefix)
+ (allout-end-of-prefix, allout-next-sibling-leap)
+ (allout-next-visible-heading, allout-auto-fill)
+ (allout-rebullet-heading, allout-kill-line, allout-kill-topic)
+ (allout-yank-processing, allout-resolve-xref)
+ (allout-current-topic-collapsed-p, allout-hide-region-body)
+ (allout-latex-verbatim-quote-curr-line, allout-encrypt-string)
+ (allout-encrypted-topic-p, allout-next-topic-pending-encryption)
+ (count-trailing-whitespace-region): Preserve match data, so allout
+ outline navigation doesn't disrupt other Emacs operations.
+ (allout-beginning-of-line): Retreat to the beginning of the hidden
+ text, so fields are respected (for submodes that care).
+ (allout-end-of-line): Preserve mark activation status when jumping.
+ (allout-open-topic): Account for opening after a child that
+ contains a hidden trailing newline. Preserve match data.
+ Run allout-structure-added-hook
+ (allout-encrypt-decrypted): Preserve match data.
+ (allout-toggle-current-subtree-exposure): Add new interactive
+ function for toggle subtree exposure - suggested by tassilo.
+ (move-beginning-of-line, move-end-of-line): Don't use
+ line-move-invisible-p, it's obsolete - substitute the code, instead.
+
+2007-10-29 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * textmodes/flyspell.el (message-signature-separator):
+ * longlines.el (message-indent-citation-function): Pacify byte
+ compiler.
+
+ * emacs-lisp/cl-loaddefs.el:
+ * ldefs-boot.el: Regenerate.
-2007-06-20 Reto Zimmermann <reto@gnu.org>
+ * Makefile.in (BYTE_COMPILE_EXTRA_FLAGS): New variable.
+ (.el.elc, compile, compile-always, compile-calc)
+ ($(lisp)/progmodes/cc-mode.elc): Use it.
+
+ * ps-print.el (ps-xemacs-color-name, ps-xemacs-face-kind-p):
+ Only do work for XEmacs.
+ (ps-xemacs-mapper): Rename from ps-mapper, only work on XEmacs.
+ (ps-xemacs-extent-sorter): Rename from ps-extent-sorter, only work
+ on XEmacs.
+ (ps-x-color-instance-p, ps-x-color-instance-rgb-components)
+ (ps-x-color-name, ps-x-color-specifier-p)
+ (ps-x-copy-coding-system, ps-x-device-class)
+ (ps-x-extent-end-position, ps-x-extent-face)
+ (ps-x-extent-priority, ps-x-extent-start-position)
+ (ps-x-face-font-instance, ps-x-find-coding-system)
+ (ps-x-font-instance-properties, ps-x-make-color-instance)
+ (ps-x-map-extents, ps-e-face-bold-p, ps-e-face-italic-p)
+ (ps-e-next-overlay-change, ps-e-overlays-at, ps-e-overlay-get)
+ (ps-e-overlay-end, ps-e-x-color-values, ps-e-color-values):
+ (ps-generate-postscript-with-faces): Delete defaliases.
+ (ps-face-foreground-name, ps-face-background-name)
+ (ps-color-values, ps-face-bold-p, ps-face-italic-p):
+ Move definitions to top level, make the body conditional on the Emacs
+ flavor. Replace uses of deleted aliases and renamed functions.
+ (ps-generate-postscript-with-faces, ps-color-device): Replace uses
+ of deleted aliases and renamed functions.
+
+ * calc/calc.el (calc-emacs-type-lucid): Remove.
+ (calc-digit-map, calcDigit-start, calc-read-key)
+ (calc-clear-unread-commands):
+ * calc/calc-ext.el (calc-user-key-map): Replace uses of
+ calc-emacs-type-lucid with (featurep 'xemacs)
+
+ * emulation/tpu-mapper.el: Replace tpu-lucid-emacs19-p with
+ (featurep 'xemacs).
+ (tpu-lucid-emacs19-p): Remove.
+ (tpu-map-key): Make it a function instead of using fset. Inline
+ tpu-emacs-map-key and tpu-lucid-map-key. Use featurep 'xemacs.
+ (tpu-emacs-map-key, tpu-lucid-map-key): Remove.
+
+ * ielm.el: Use featurep 'xemacs.
+
+ * progmodes/cperl-mode.el (cperl-xemacs-p): Remove.
+ (condition-case, cperl-can-font-lock, cperl-singly-quote-face)
+ (cperl-define-key, cperl-mode-map, cperl-mode, cperl-init-faces)
+ (cperl-write-tags, cperl-tags-hier-init, cperl-perldoc): Replace
+ cperl-xemacs-p with (featurep 'xemacs).
+ (font-lock-cache-position): Pacify byte compiler.
+
+2007-10-29 Drew Adams <drew.adams@oracle.com>
+
+ * faces.el (read-color): New function.
+ (face-at-point, foreground-color-at-point)
+ (background-color-at-point): New functions.
+
+2007-10-28 Richard Stallman <rms@gnu.org>
+
+ * net/browse-url.el (browse-url-text-xterm): Rename from
+ browse-url-lynx-xterm and made generic.
+ (browse-url-text-emacs): Likewise.
+ (browse-url-text-browser): New variable.
+ (browse-url-text-emacs-args): Rename from browse-url-lynx-emacs-args.
+ (browse-url-text-input-field, browse-url-text-input-attempts)
+ (browse-url-kde-program): Likewise.
+
+2007-10-29 Glenn Morris <rgm@gnu.org>
+
+ * textmodes/org-publish.el (org-publish-get-plist-from-filename):
+ Use mapc rather than mapcar (reinstall change deleted without log
+ entry 2007-10-22).
+
+2007-10-29 Martin Rudalics <rudalics@gmx.at>
+
+ * wdired.el (wdired-next-line, wdired-previous-line):
+ Use next-line and previous-line wrapped in with-no-warnings.
+
+2007-10-29 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-server-alist): Use keywords for parameter names.
+ (rcirc-recent-quit-alist): New function.
+ (rcirc): Print a better message when there is only one connected server.
+ (rcirc-complete-nick): Do not update the nick table here.
+ (rcirc-mode-map): Add M-o.
+ (rcirc-current-line): Add variable.
+ (rcirc-mode): Setup variables for line based omit.
+ (rcirc-edit-multiline): Strip text properties.
+ (rcirc-omit-responses): Add NICK.
+ (rcirc-omit-threshold): Add variable.
+ (rcirc-last-quit-line, rcirc-last-line, rcirc-elapsed-lines):
+ Add functions.
+ (rcirc-print): Keep track of current line. Do not fill text if
+ `rcirc-fill-flag' is null. Only omit text if the last activity
+ from the sender is more than `rcirc-omit-threshold' lines ago.
+ (rcirc-put-nick-channel, rcirc-handler-PRIVMSG): Track line
+ numbers instead of time.
+ (rcirc-channel-nicks): Sort by line numbers instead of time.
+ (rcirc-omit-mode): Add `...' when omitting text and recenter.
+ (rcirc-handler-JOIN): Restore the joiners linestamp.
+ (rcirc-maybe-remember-nick-quit): Add function.
+ (rcirc-handler-QUIT): Record sender in table of recently quit nicks.
- * progmodes/vera-mode.el: New file.
+2007-10-29 Juanma Barranquero <lekktu@gmail.com>
-2007-06-20 Juanma Barranquero <lekktu@gmail.com>
+ * loadhist.el (unload-feature-special-hooks):
+ Add `delete-frame-functions' and `suspend-tty-functions'.
- * ido.el (ido-find-file-in-dir): Don't signal an error for
- empty directories.
+ * server.el (server-unload-function): Rename from `server-unload-hook'
+ and adapt to new `unload-feature' functionality. Remove hook from
+ `kill-buffer-hook' buffer-locally.
+ (server-unload-hook): Remove.
+ (server-unload-function): New var; replaces `server-unload-hook'.
-2007-06-18 Alan Mackenzie <acm@muc.de>
+2007-10-29 Glenn Morris <rgm@gnu.org>
+
+ * dirtrack.el (dirtrack-debug): Doc fix.
+ (dirtrack-mode, dirtrack-debug-mode): New names for
+ dirtrack-toggle and dirtrack-debug-toggle. Use define-minor-mode.
+ (dirtrack-toggle, dirtrack-debug-toggle, dirtrackp, dirtrack-debug):
+ Make obsolete.
+ (dirtrack-debug-message): Only print message if
+ dirtrack-debug-mode is non-nil. Use with-current-buffer.
+ (dirtrack): Doc fix. Use dirtrack-mode rather than dirtrackp.
+ Remove dirtrack-debug checks now that dirtrack-debug-message does this.
+
+2007-10-28 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-warnings): Document `not'.
+ (byte-compile-warnings-safe-p): Handle `not'.
+ (byte-compile-warning-enabled-p, byte-compile-disable-warning)
+ (byte-compile-enable-warning): New functions.
+ (byte-compile-eval-before-compile)
+ (byte-compile-file-form-require): Use byte-compile-disable-warning.
+ (byte-compile-close-variables): Locally bind byte-compile-warnings,
+ but do not modify it.
+ (byte-compile-eval, byte-compile-obsolete)
+ (byte-compile-warn-about-unresolved-functions)
+ (byte-compile-file-form-defvar)
+ (byte-compile-file-form-custom-declare-variable)
+ (byte-compile-file-form-require)
+ (byte-compile-file-form-defmumble, byte-compile-lambda)
+ (byte-compile-form, byte-compile-normal-call)
+ (byte-compile-variable-ref, byte-compile-defvar)
+ (byte-compile-make-variable-buffer-local):
+ Use byte-compile-warning-enabled-p.
+ * emacs-lisp/advice.el (ad-compile-function):
+ Use byte-compile-disable-warning.
+ * emacs-lisp/cl.el: Move local variables to end of file, and set
+ byte-compile-warnings to `(not cl-functions)'.
+ * emacs-lisp/cl-compat.el: Add a local variables section, and set
+ byte-compile-warnings to `(not cl-functions)'.
+ * emacs-lisp/cl-macs.el: Unify local variable section, and set
+ byte-compile-warnings to `(not cl-functions)'.
+ (cl-do-proclaim): Use byte-compile-disable-warning and
+ byte-compile-enable-warning.
+ * emacs-lisp/cl-seq.el: Unify local variable section, and set
+ byte-compile-warnings to `(not cl-functions)'.
+ * progmodes/cc-bytecomp.el (cc-bytecomp-ignore-obsolete):
+ Use byte-compile-disable-warning.
+
+2007-10-28 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * cus-edit.el (custom-browse-insert-prefix):
+ * emulation/edt.el (edt-x-emacs19-p): Use featurep 'xemacs.
+
+2007-10-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-process-filter): Fix typo in docstring.
+ (server-log): Reflow docstrings.
+ (server-delete-client, server-kill-emacs-query-function): Doc fixes.
+ (server-goto-line-column): Use `when'.
+
+2007-10-28 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-other-meta-char): Call `isearch-edit-string'
+ when mouse is clicked on the isearch message.
+ (isearch-resume): Call `isearch-update' at the end.
+ Rename argument `search' to `string' to conform to the
+ isearch terminology.
+
+2007-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Rewrite abbrev.c in Elisp.
+ * abbrev.el (abbrev-mode): Move custom group from cus-edit.el.
+ (abbrev-table-get, abbrev-table-put, abbrev-get)
+ (abbrev-put, make-abbrev-table, abbrev-table-p, clear-abbrev-table)
+ (define-abbrev, abbrev--check-chars, define-global-abbrev)
+ (define-mode-abbrev, abbrev--active-tables, abbrev-symbol)
+ (abbrev-expansion, abbrev--before-point, expand-abbrev)
+ (unexpand-abbrev, abbrev--write, abbrev--describe)
+ (insert-abbrev-table-description, define-abbrev-table):
+ New funs, largely transcribed from abbrev.c.
+ (abbrev-with-wrapper-hook): New macro.
+ (abbrev-table-name-list, global-abbrev-table)
+ (abbrev-minor-mode-table-alist, fundamental-mode-abbrev-table)
+ (abbrevs-changed, abbrev-all-caps, abbrev-start-location)
+ (abbrev-start-location-buffer, last-abbrev, last-abbrev-text)
+ (last-abbrev-location, pre-abbrev-expand-hook, abbrev-expand-function):
+ New vars, largely transcribed from abbrev.c.
+ * cus-edit.el (abbrev-mode): Remove. Move to abbrev.el.
+ * cus-start.el: Remove abbrev-all-caps and pre-abbrev-expand-hook.
+ * loadup.el: Load "abbrev.el" before "lisp-mode.el".
+
+2007-10-27 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el: Now detect if text foreground and background colors are
+ equal and replace the foreground color by another color, so the text
+ becomes visible. Doc fix.
+ (ps-print-version): New version 6.8.
+ (ps-default-fg, ps-default-bg): Docstring fix.
+ (ps-postscript-code-directory): Fix default value code.
+ (ps-fg-list, ps-fg-validate-p): New options.
+ (ps-foreground-list): New var.
+ (ps-setup, ps-begin-job, ps-plot-region): Fix code.
+
+2007-10-27 Glenn Morris <rgm@gnu.org>
+
+ * shell.el (shell-dirtrack-verbose, shell-directory-tracker): Doc fix.
+ (shell-dirtrack-toggle): Mark as obsolete.
+ (dirtrack-toggle, dirtrack-mode): No longer alias to
+ shell-dirtrack-mode.
+
+2007-10-27 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc.el (math-standard-opers): Lower the precedence
+ of negation.
+ * calc/calc-lang.el (math-oper-table): Lower precedence of
+ negation for C, TeX, and eqn.
+
+2007-10-27 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/cc-defs.el: Reorder conditions to avoid warnings.
- * progmodes/cc-mode.el (c-remove-any-local-eval-or-mode-variables):
- When removing lines, also remove the \n. Correction of patch of
- 2007-04-21.
+2007-10-27 Juanma Barranquero <lekktu@gmail.com>
-2007-06-17 Glenn Morris <rgm@gnu.org>
+ * desktop.el (desktop-load-locked-desktop, desktop-base-lock-name)
+ (desktop-not-loaded-hook): Fix :version tags.
+
+2007-10-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-wrong-passwd-regexp): Tune regexp.
+ (tramp-get-remote-tmpdir): New defun.
+ (tramp-make-tramp-temp-file): Use it.
+ (tramp-local-call-process): New defun. Replace all calls of
+ `call-process' by this when appropriate.
+ (tramp-handle-write-region): Replace calls of `file-attributes' by
+ `tramp-compat-file-attributes'.
+ (tramp-find-shell, tramp-open-connection-setup-interactive-shell):
+ Make the first command a `tramp-send-command' call, with let-bind
+ of `tramp-end-of-output'.
+ (tramp-version, tramp-bug, tramp-reporter-dump-variable)
+ (tramp-load-report-modules, tramp-append-tramp-buffers):
+ Move to tramp-cmds.el.
+
+ * net/tramp-fish.el (tramp-fish-handle-copy-file)
+ (tramp-fish-do-copy-or-rename-file)
+ (tramp-fish-do-copy-or-rename-file-directly):
+ * net/tramp-smb.el (tramp-smb-handle-copy-file):
+ Add parameter PRESERVE-UID-GID.
+
+2007-10-27 Eli Zaretskii <eliz@gnu.org>
+
+ * time.el (zoneinfo-style-world-list, legacy-style-world-list):
+ New defcustoms.
+ (display-time-world-list): Use them as appropriate for the current
+ value of `system-type'.
+
+2007-10-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * printing.el: Pacify byte compiler, that is, no compiler warnings.
+ Move (again) some variable definitions before use, define some fun
+ aliases, no code change.
+ (pr-version): New version 6.9.2.
+ (pr-path-style, pr-auto-region, pr-menu-char-height)
+ (pr-menu-char-width, pr-menu-lock, pr-ps-printer-alist)
+ (pr-txt-printer-alist, pr-ps-utility-alist): Options declaration
+ via (defvar VAR).
+ (pr-menu-lookup, pr-menu-lock, pr-menu-alist, pr-even-or-odd-pages)
+ (pr-menu-get-item, pr-menu-set-item-name, pr-menu-set-utility-title)
+ (pr-menu-set-ps-title, pr-menu-set-txt-title, pr-region-active-p)
+ (pr-do-update-menus, pr-update-mode-line, pr-f-read-string)
+ (pr-f-set-keymap-parents, pr-keep-region-active): Fun aliases.
+ (pr-menu-print-item, pr-ps-printer-menu-modified)
+ (pr-txt-printer-menu-modified, pr-ps-utility-menu-modified)
+ (pr-even-or-odd-alist): Vars definition moved.
+
+2007-10-26 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * emulation/pc-select.el (next-line-mark, next-line-nomark)
+ (previous-line-mark, previous-line-nomark): Wrap with-no-warnings
+ around uses of previous-line and next-line.
+
+ * diff.el (diff-old-file, diff-new-file, diff-extra-args):
+ New defvars.
+
+ * textmodes/css-mode.el (comment-continue):
+ * net/browse-url.el (url-handler-regexp):
+ * progmodes/idlw-help.el (idlwave-system-routines):
+ Pacify byte-compiler.
+
+ * textmodes/fill.el (fill-nobreak-p): Replace obsolete alias
+ line-move-invisible-p with its former definition: invisible-p.
+ line-move-invisible-p was removed on 2007-08-29.
+
+2007-10-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * files.el (kill-emacs-query-functions): Doc fix;
+ `save-buffers-kill-emacs' is no longer bound to a key.
+
+2007-10-26 Richard Stallman <rms@gnu.org>
+
+ * isearch-multi.el (isearch-buffers-multi): New option.
+ (isearch-buffers-search-fun): Test it.
- * lpr.el (lpr-page-header-switches): Move %s to separate element
- for correct quoting. Doc fix.
+ * progmodes/ps-mode.el (ps-mode-map): Delete C-c v binding.
+ Put ps-run-clear on C-c C-l.
-2007-06-13 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+ * newcomment.el (comment-styles): New style indent-or-triple.
+ (comment-style): Make that the default.
+ (comment-add defvar): Doc fix.
+ (comment-add): Delete arg EXTRA.
+ (comment-region-default): Open code call to comment-add.
+ Handle indent-or-triple style which uses `multi-char' for INDENT.
- * term/xterm.el (terminal-init-xterm): Escape parens in character
- constants.
+2007-10-26 Juanma Barranquero <lekktu@gmail.com>
-2007-06-12 Ralf Angeli <angeli@caeruleus.net>
+ * eshell/em-unix.el (nil-blank-string): Doc fix.
- * scroll-lock.el (scroll-lock-mode): Doc fix.
+2007-10-26 John Wiegley <johnw@newartisans.com>
-2007-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
+ * eshell/em-unix.el (eshell/diff): Before calling the `diff'
+ function, ensure that the third argument is turned into a nil if
+ the string is otherwise completely empty (either no characters, or
+ all tabs/spaces). This fixes a bug from a user who found himself
+ unable to customize `diff-switches' and still use Eshell's diff
+ command.
- * font-lock.el (font-lock-add-keywords): In case font-lock was only
- half-activated, forcefully activate it completely.
+2007-10-26 Glenn Morris <rgm@gnu.org>
-2007-06-11 Richard Stallman <rms@gnu.org>
+ * emacs-lisp/bytecomp.el (byte-compile-warnings): Autoload the
+ safe-local-variable property.
- * cus-edit.el (custom-variable-type): Doc fix.
+2007-10-26 Gwern Branwen <gwern0@gmail.com> (tiny change)
-2007-06-09 Alfred M. Szmidt <ams@gnu.org> (tiny change)
+ * net/browse-url.el (browse-url-browser-function): Delete grail.
+ (browse-url-grail): Function and variable deleted.
+ (browse-url-browser-function): Delete IXI Mosaic.
+ (browse-url-default-browser): Don't try IXI Mosaic.
+ (browse-url-iximosaic): Function deleted.
+ (browse-url-browser-function): Delete MMM.
+ (browse-url-default-browser): Don't try MMM.
+ (browse-url-mmm): Function deleted.
- * mail/rmail.el (rmail-movemail-variant-in-use): Fix doc typo.
+2007-10-26 Drew Adams <drew.adams@oracle.com>
-2007-06-09 Davis Herring <herring@lanl.gov>
+ * custom.el (custom-note-var-changed): New function.
- * desktop.el (desktop-minor-mode-table): Doc fix.
+2007-10-25 Dan Nicolaescu <dann@ics.uci.edu>
-2007-06-08 Chong Yidong <cyd@stupidchicken.com>
+ * emulation/edt-mapper.el (edt-emacs-variant): Replace the only
+ use with the definition. Remove.
- * image-mode.el (image-forward-hscroll, image-backward-hscroll)
- (image-next-line, image-previous-line, image-scroll-up)
- (image-scroll-down, image-bol, image-eol, image-bob, image-eob):
+ * add-log.el (change-log-start-entry-re): New defconst.
+ (change-log-sortable-date-at): Use it.
+ (change-log-beginning-of-defun, change-log-end-of-defun):
New functions.
- (image-mode-map): Remap motion commands.
- (image-mode-text-map): New keymap for viewing images as text.
- (image-mode): Use image-mode-map.
- (image-toggle-display): Toggle auto-hscroll-mode and mode keymaps.
-
-2007-06-07 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.56.
-
- * net/tramp.el:
- * net/tramp-ftp.el:
- * net/tramp-smb.el:
- * net/tramp-util.el:
- * net/tramp-vc.el:
- Don't load cl.el, because that pollutes the namespace. Replace cl
- macros by their implementations where necessary. Requested by
- Richard Stallman <rms@gnu.org>.
-
- * net/tramp.el (top): Make `set-buffer-multibyte' an alias if it
- doesn't exist.
- (with-parsed-tramp-file-name): Protect debug spec during compilation.
- (tramp-handle-insert-directory): Check (featurep 'ls-lisp).
- (tramp-file-name-p, tramp-file-name-multi-method)
- (tramp-file-name-method, tramp-file-name-user)
- (tramp-file-name-host, tramp-file-name-localname): New defuns,
- replacing defstruct `tramp-file-name'.
- (tramp-handle-file-remote-p, tramp-completion-dissect-file-name1)
- (tramp-dissect-file-name, tramp-dissect-multi-file-name):
- Apply `vector' instead of `make-tramp-file-name'.
- (tramp-handle-make-auto-save-file-name):
- Apply `tramp-temporary-file-directory' for compatibility reasons.
- (tramp-completion-mode): Use `natnump' instead of `wholenump'
- because of XEmacs.
- (tramp-completion-mode): `last-input-event' is nil when XEmacs is
- started.
-
-2007-06-07 David Kastrup <dak@gnu.org>
-
- * dired.el (dired-recursive-deletes, dired-recursive-copies):
- Change default to `top'.
-
-2007-06-07 Chong Yidong <cyd@stupidchicken.com>
-
- * dired.el (dired-mode-map): Remove spurious separator.
-
-2007-06-07 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/ebrowse.el (ebrowse-draw-file-member-info): Doc fix.
-
- * progmodes/mixal-mode.el (mixal-operation-codes-alist):
- * progmodes/idlwave.el (idlwave-one-key-select): Fix typo in docstring.
-
-2007-06-07 Alfred M. Szmidt <ams@gnu.org> (tiny change)
-
- * mail/rmailsum.el (rmail-summary-save-buffer): New command.
- (rmail-summary-mode-map): Add rmail-summary-save-buffer.
-
-2007-06-07 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/ebrowse.el (ebrowse-member-table):
- * textmodes/org.el (org-export-ascii-bullets): Fix typos in docstrings.
-
-2007-06-06 Juanma Barranquero <lekktu@gmail.com>
-
- * pgg.el (pgg-sign-region, pgg-sign):
- * ses.el (ses-call-printer):
- * calendar/icalendar.el (icalendar--diarytime-to-isotime):
- * textmodes/org.el (org-cycle): Fix typos in docstrings.
-
-2007-06-06 Eli Zaretskii <eliz@gnu.org>
-
- * tar-mode.el (tar-header-block-summarize, tar-summarize-buffer)
- (tar-get-descriptor): Handle type 55, an extended pax header.
-
-2007-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/css-mode.el: New file.
-
-2007-06-06 Michael Albinus <michael.albinus@gmx.de>
-
- * net/socks.el: New file, taken from w3 repository.
- (top): Update Copyright. Don't load cl.el.
- (all): Replace `case' by `cond', `string-to-int' by
- `string-to-number', and `process-kill-without-query' by
- `set-process-query-on-exit-flag'.
- (socks-char-int): Remove defalias and all occurrences.
-
-2007-06-06 Juanma Barranquero <lekktu@gmail.com>
-
- * international/mule-cmds.el (toggle-enable-multibyte-characters)
- (sort-coding-systems, search-unencodable-char): Doc fixes.
- (coding-system-change-eol-conversion, set-default-coding-systems)
- (prefer-coding-system, find-multibyte-characters, princ-list)
- (leim-list-entry-regexp, set-input-method, locale-language-names)
- (input-method-exit-on-first-char, exit-language-environment-hook)
- (locale-charset-language-names): Fix typos in docstrings.
-
-2007-06-05 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs-cycle-previous): Don't modify the cycle list until
- `switch-to-buffer' has returned succesfully.
- (bs-cycle-next): Ditto. Also, don't bury the buffer when the
- window is dedicated (it could iconify the frame).
-
-2007-06-05 Glenn Morris <rgm@gnu.org>
-
- * files.el (auto-mode-alist): Open `.asd' files in lisp-mode.
-
-2007-06-05 Chong Yidong <cyd@stupidchicken.com>
-
- * files.el (auto-mode-alist): Add lower-priority match for names
- like ChangeLog.old.
-
-2007-06-04 Andreas Schwab <schwab@suse.de>
-
- * emacs-lisp/sregex.el (sregexq): Fix doc string quoting.
-
-2007-06-04 Davis Herring <herring@lanl.gov>
-
- * calendar/timeclock.el: Update version number.
- (timeclock-modeline-display): Mention timeclock-use-display-time
- in explanatory message.
- (timeclock-log): Suppress warnings when finding the log.
- Don't check for a nil project twice. Run hooks after killing the
- buffer (if applicable).
- (timeclock-geometric-mean): Rename to `timeclock-mean' (it never
- was geometric). All uses changed.
- (timeclock-generate-report): Support prefix argument.
-
-2007-06-04 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-
- * man.el (Man-next-section): Don't consider the last line of the
- page as being part of any section.
-
-2007-06-04 Martin Rudalics <rudalics@gmx.at>
-
- * hilit-chg.el (highlight-changes-rotate-faces): Don't set
- modified flag of buffer. Use `inhibit-modification-hooks'.
-
-2007-06-04 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * mail/mail-extr.el (mail-extract-address-components):
- Recognize non-ASCII characters except for NBSP as words.
-
-2007-06-04 Ryan Yeske <rcyeske@gmail.com>
-
- * net/webjump.el (webjump-sample-sites): Add Wikipedia query.
-
-2007-06-04 Michael Olson <mwolson@gnu.org>
-
- * emacs-lisp/tq.el (tq-queue-pop): Stifle error when a process has
- died and we are trying to send a signal to it.
-
-2007-06-04 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode)
- (easy-mmode-define-navigation): Fix typos in docstrings.
-
- * progmodes/compile.el (compilation-find-file, compilation-handle-exit):
- Fix typos in docstrings.
- (compilation-search-path, compilation-buffer-name-function): Doc fixes.
- (compilation-finish-function): Fix typo in obsolescence declaration.
-
- * progmodes/idlwave.el (idlwave-routines): Fix typo in docstring.
-
-2007-06-04 Chong Yidong <cyd@stupidchicken.com>
-
- * files.el (magic-mode-alist): Remove image-type-auto-detected-p.
- (magic-fallback-mode-alist): Add image-type-auto-detected-p.
-
- * image.el (image-type-auto-detected-p): Don't scan auto-mode-alist.
-
- * longlines.el (longlines-mode): Make longlines-auto-wrap
- buffer-local. Add hooks unconditionally.
- (longlines-auto-wrap): Toggle wrapping.
- (longlines-after-change-function)
- (longlines-post-command-function): Check longlines-auto-wrap.
-
-2007-06-02 Chong Yidong <cyd@stupidchicken.com>
-
- * Version 22.1 released.
-
-2007-06-01 Chong Yidong <cyd@stupidchicken.com>
-
- * paren.el (show-paren-function): Undo 2007-04-19 and 2007-04-20
- changes.
-
-2007-05-31 Richard Stallman <rms@gnu.org>
-
- * dired.el (dired-do-delete, dired-do-flagged-delete): Doc fixes.
-
-2007-05-29 Martin Rudalics <rudalics@gmx.at>
-
- * textmodes/table.el (table--point-entered-cell-function)
- (table--point-left-cell-function):
- Bind `inhibit-point-motion-hooks' to t.
-
-2007-05-29 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
-
- * emacs-lisp/rx.el (rx): Doc fix.
-
-2007-05-28 Chong Yidong <cyd@stupidchicken.com>
-
- * textmodes/sgml-mode.el (sgml-point-entered): Use condition-case.
-
-2007-05-27 Tetsurou Okazaki <okazaki@be.to> (tiny change)
-
- * log-edit.el (log-edit-changelog-paragraph): Return point-max
- as the end of the ChangeLog paragraph when it ends without a line
- termination.
-
-2007-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/fill.el (canonically-space-region): Make the second arg
- a marker if it's not already the case.
-
- * xt-mouse.el (xterm-mouse-truncate-wrap): New function.
- (xterm-mouse-event): Use it.
-
-2007-05-25 Miles Bader <miles@fencepost.gnu.org>
-
- * vc-hooks.el (vc-find-root): Fix file attribute test.
-
-2007-05-24 Richard Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-correct-word-before-point):
- Don't let opoint be nil.
- (flyspell-emacs-popup): Explicit error if no dialogs.
+ (change-log-mode): Use them for beginning-of-defun-function and
+ end-of-defun-function.
-2007-05-23 Eli Zaretskii <eliz@gnu.org>
+2007-10-25 Jonathan Yavner <jyavner@member.fsf.org>
- * tar-mode.el (tar-file-name-handler): New function.
- (tar-extract): Bind file-name-handler-alist to it to force
- find-buffer-file-type-coding-system behave as if the file being
- extracted existed. Use last-coding-system-used to force
- buffer-file-coding-system to what decode-coding-region actually
- used to decode the file.
-
-2007-05-23 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
-
- * progmodes/compile.el (compilation-handle-exit):
- `compilation-finish-function' may change the current buffer.
+ * ses.el: Make `ses--symbolic-formulas' a safe local variable.
+ (ses-mode-print-map): Add `c' and `t' (suggested by Gareth Rees).
+ (ses-recalculate-cell): Deal with point being just beyond end of
+ data area (why does this happen?)
+ (ses-set-curcell): Ditto.
+ (ses-column-letter): Handle columns beyond 702. Code written by
+ Gareth Rees.
-2007-05-22 Richard Stallman <rms@gnu.org>
+2007-10-25 Carsten Dominik <dominik@science.uva.nl>
- * files.el (set-auto-mode): Doc fix.
+ * textmodes/org.el (org-agenda-get-restriction-and-command):
+ Use `mapc' instead of `mapcar'.
+ (org-agenda-list): Numeric prefix argument can specify the number
+ of days.
+ (remember-register, remember-buffer): Prevent byte compiler from
+ complaining.
+ (org-todo): Save and restore match data.
+ (org-no-warnings): New macro.
+ (org-columns-eval): Use `org-no-warnings'.
-2007-05-22 Eli Zaretskii <eliz@gnu.org>
+2007-10-25 Chris Moore <christopher.ian.moore@gmail.com>
- * dos-w32.el (find-buffer-file-type-coding-system): Doc fix.
+ * comint.el (comint-password-prompt-regexp):
+ Handle `[sudo] password'-style prompt.
-2007-05-21 Trent Buck <trentbuck@gmail.com> (tiny change)
+2007-10-25 Glenn Morris <rgm@gnu.org>
- * net/rcirc.el (rcirc-fill-column): Allow `window-width'.
- (rcirc-print): Handle `window-width'.
- (rcirc-buffer-maximum-lines): Doc fix.
+ * custom.el (custom-declare-variable): Add :risky and :safe keywords.
+ (defcustom): Doc fix.
+
+ * progmodes/f90.el (f90-keywords-re, f90-keywords-level-3-re):
+ Add `non_intrinsic'.
+ (f90-constants-re): Add ieee modules.
+ (f90-typedef-matcher, f90-typedec-matcher)
+ (f90-imenu-type-matcher): New functions.
+ (f90-font-lock-keywords-1): Give module procedures function-name face.
+ Use `f90-typedef-matcher' for derived types. Fix `abstract interface'.
+ Add `use, intrinsic'.
+ (f90-font-lock-keywords-2): Use `f90-typedec-matcher' for derived types.
+ Move start of `enum' blocks to separate entry.
+ (f90-start-block-re): Fix `type', `abstract interface'.
+ (f90-imenu-generic-expression): Use `f90-imenu-type-matcher' for
+ derived types.
+ (f90-mode-abbrev-table): Add `abstract interface', `asynchronous',
+ `elemental', change `enumerator'.
+ (f90-no-block-limit): Fix `abstract interface'.
-2007-05-19 Kevin Ryde <user42@zip.com.au>
+ * progmodes/f90.el (f90-indented-comment-re)
+ (f90-directive-comment-re, f90-break-delimiters):
+ * progmodes/fortran.el (fortran-comment-line-start-skip)
+ (fortran-directive-re):
+ * textmodes/conf-mode.el (conf-space-keywords): Mark these regexps
+ as safe if they are strings.
- * info.el (Info-fontify-node): Match https also.
+2007-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-05-18 Richard Stallman <rms@gnu.org>
+ * startup.el (window-system): Remove. Don't make it frame-local.
- * simple.el (push-mark): Doc fix.
+2007-10-24 Richard Stallman <rms@gnu.org>
-2007-05-18 Rob Riepel <riepel@Stanford.EDU>
+ * savehist.el (savehist-save): Omit unreadable elements.
- * emulation/tpu-edt.el (CSI-map, SS3-map): Move from global-map to
- tpu-global-map.
- (tpu-original-global-map): Delete variable.
- (tpu-control-keys-map): New keymap variable.
- (tpu-set-control-keys): Use tpu-reset-control-keys rather than
- setting keymapping directly.
- (tpu-reset-control-keys): Use tpu-control-keys-map instead of
- tpu-global-map.
- (tpu-edt-on): Activate the tpu-global-map.
- (tpu-edt-off): Deactivate the tpu-global-map.
+ * loadhist.el (unload-function-defs-list): Rename from
+ unload-function-features-list.
+ (unload-feature-special-hooks, unload-feature): Doc fixes.
-2007-05-18 Ryan Yeske <rcyeske@gmail.com>
+ * indent.el (indent-to-left-margin): If point's in the indentation,
+ move to the end of the indentation.
- * textmodes/ispell.el (ispell-get-word): Return markers
- for start and end positions.
- (ispell-word): Assume END is a marker.
+ * cus-edit.el (customize-changed-options): Make arg optional.
-2007-05-17 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+2007-10-24 Juanma Barranquero <lekktu@gmail.com>
- * ps-print.el: Use default color when foreground or background color
- are unspecified. Reported by Leo <sdl.web@gmail.com>.
- (ps-print-version): New version 6.7.4.
- (ps-rgb-color): New argument. Use default color when color is
- unspecified.
- (ps-begin-job): Fix code.
+ * bs.el (bs-select, bs-select-other-window): Fix typos in docstrings.
-2007-05-17 Martin Rudalics <rudalics@gmx.at>
+2007-10-24 Dan Nicolaescu <dann@ics.uci.edu>
- * textmodes/ispell.el (ispell-start-process): Defend against bad
- default-directory.
+ * textmodes/org-publish.el (org-publish-attachment): Re-install
+ accidentally deleted change.
-2007-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-10-24 Stefan Monnier <monnier@iro.umontreal.ca>
- * vc-hooks.el (vc-find-root): Stop searching when the user changes.
+ * term/iris-ansi.el (iris-function-map): Move init into declaration.
-2007-05-16 Richard Stallman <rms@gnu.org>
+2007-10-24 Juanma Barranquero <lekktu@gmail.com>
* buff-menu.el (Buffer-menu-sort-column): Doc fix.
+ (Buffer-menu-mode-map): Initialize in the declaration.
+ (Buffer-menu-mode): Define with `define-derived-mode'.
+
+2007-10-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-version): Change to 5.13e.
+ (org-agenda-file-regexp): Fix typo in docstring.
+ (org-add-planning-info): Fix bug in parenthesis settings.
+ (org-scan-tags): Catch the case of indirect buffers with no filename.
+ (org-fast-tag-selection, org-export-as-ascii, org-export-as-html):
+ Re-install switch to mapc, had been removed by accident.
+ (org-columns-map): New binding `C-c C-o'.
+ (org-columns-menu): Change menu text and added new entry.
+ (org-columns-eval): Document the use of `next-line'.
+ (org-columns-open-link): New function.
+ (org-columns-follow-link): Remove function.
+ (org-open-link-from-string): New function.
+ (org-read-date-get-relative): Fix typo in docstring.
+ (org-read-date-get-relative): Leading +/- is not optional.
+ (org-agenda-get-restriction-and-command): Always resize window on
+ first loop cycle.
+ (org-agenda-open-link): Make sure the link abbreviations are
+ present in the agenda buffer.
+ (org-agenda-copy-local-variable): New function.
+
+2007-10-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-update-changelog-rcs2log): Remove incorrect `backend' arg.
+
+2007-10-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (reindent-then-newline-and-indent): Use a `move after
+ insert' kind of marker in the save-excursion.
-2007-05-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el (magic-mode-alist, magic-fallback-mode-alist):
- Move the *ml, Postscript, and XmCD entries to the fallback part.
-
- * files.el (magic-fallback-mode-alist):
- Rename from file-start-mode-alist.
-
-2007-05-16 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
-
- * progmodes/compile.el (compilation-handle-exit): Quote first
- argument of `run-hook-with-args'.
-
-2007-05-16 Juanma Barranquero <lekktu@gmail.com>
-
- * buff-menu.el (Buffer-menu-sort-column):
- * dabbrev.el (dabbrev-upcase-means-case-search):
- * dired.el (dired-recursive-deletes, dired-recursive-copies):
- * info.el (Info-current-subfile):
- * ls-lisp.el (ls-lisp-verbosity):
- * msb.el (msb-menu-cond):
- * pcvs.el (cvs-dired-use-hook):
- * simple.el (set-mark-command-repeat-pop):
- * time.el (display-time-24hr-format, display-time-mail-file):
- Doc fixes.
-
- * tutorial.el (get-lang-string, tutorial--find-changed-keys):
- * printing.el (pr-ps-fast-fire): Fix typos in docstrings.
-
- * view.el (view-inhibit-help-message): Fix typo in docstring.
- (view-scroll-auto-exit, view-try-extend-at-buffer-end): Doc fixes.
-
-2007-05-14 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmail.el (rmail-convert-to-babyl-format):
- Check content-transfer-encoding _last_, because we need its position
- in base64-header-field-end.
-
-2007-05-14 Juanma Barranquero <lekktu@gmail.com>
-
- * files.el (mode-require-final-newline, require-final-newline)
- (enable-local-variables, enable-local-eval): Doc fixes.
-
-2007-05-10 Edward O'Connor <hober0@gmail.com> (tiny change)
-
- * progmodes/python.el (python-font-lock-keywords)
- (python-open-block-statement-p, python-mode): Add support for the new
- "with" keyword.
-
-2007-05-10 Richard Stallman <rms@gnu.org>
-
- * international/iso-cvt.el (iso-cvt-read-only): Ignore arguments.
- (iso-cvt-write-only): Likewise.
-
- * emacs-lisp/easy-mmode.el (define-minor-mode):
- Fix generated doc string.
-
- * startup.el (fancy-splash-text): Add URL of guided tour.
- Adjust horizontal and vertical whitespace.
-
- * progmodes/compile.el (compilation-handle-exit):
- Use run-hook-with-args to run compilation-finish-functions.
-
- * files.el (file-start-mode-alist): New variable.
- (magic-mode-regexp-match-limit): Doc fix.
- (set-auto-mode): Handle file-start-mode-alist.
- A little cleanup of structure.
-
-2007-05-10 Davis Herring <herring@lanl.gov>
-
- * calendar/timeclock.el (timeclock-in): Fix non-interactive
- workday specifications.
- (timeclock-log): Don't kill the log buffer if it already existed.
-
-2007-05-08 Richard Stallman <rms@gnu.org>
-
- * mail/mailabbrev.el (sendmail-pre-abbrev-expand-hook):
- Don't include non-self-insert commands in the exception for `-'.
-
-2007-05-08 David Reitter <david.reitter@gmail.com>
-
- * progmodes/python.el (python-guess-indent): Check non-nullness
- before comparing indent against the 2..8 interval.
-
-2007-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-ts-unicode-for-key-event): Check if text is
- available.
-
-2007-05-06 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/eldoc.el (turn-on-eldoc-mode): Doc fix.
-
-2007-05-03 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el (rcirc-timeout-seconds): Increase to prevent unwanted
- disconnections.
-
-2007-05-01 Romain Francoise <romain@orebokech.com>
-
- * dired-x.el: Revert 2007-04-06 change.
-
-2007-04-30 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Pdb can't handle SIGINT so
- don't put stop on toolbar.
-
-2007-04-29 Stephen Berman <Stephen.Berman@gmx.net>
-
- * find-dired.el (find-dired-filter): Propertize all text down to eob.
-
-2007-04-29 Richard Stallman <rms@gnu.org>
-
- * international/mule.el (auto-coding-alist): Add pdf => no-conversion.
-
-2007-04-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cc-mode.el (c-before-change): Use point-min rather
- than 1.
-
-2007-04-28 Richard Stallman <rms@gnu.org>
+2007-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/sh-script.el (sh-mode): Recognize .profile as sh style.
+ * textmodes/css-mode.el: Require CL.
+ (comment-continue): Declare.
-2007-04-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * subr.el (make-variable-frame-localizable): Remove.
+ (make-variable-frame-local): Mark obsolete.
- * vc-hooks.el (vc-ignore-dir-regexp): Add /.../ for the DFS filesystem.
+2007-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-04-28 Eli Zaretskii <eliz@gnu.org>
+ * textmodes/tex-mode.el (tex-uptodate-p): Don't signal an error if one
+ of the subdirs is unreadable.
- * makefile.w32-in ($(lisp)/mh-e/mh-loaddefs.el): Use ./mh-e
- instead of $(lisp)/mh-e.
+2007-10-23 Michael Albinus <michael.albinus@gmx.de>
- * textmodes/fill.el (fill-paragraph): Doc fix.
+ * net/tramp.el (tramp-set-file-uid-gid): Protect `call-process'
+ when we are local.
-2007-04-28 Glenn Morris <rgm@gnu.org>
+2007-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
- * image-dired.el (image-dired-cmd-create-thumbnail-options)
- (image-dired-cmd-create-temp-image-options): Replace option
- +profile "*" with -strip.
+ * progmodes/python.el (python-current-defun): Remove left-over
+ assignment to `start'.
-2007-04-27 Chong Yidong <cyd@stupidchicken.com>
+2007-10-23 Juanma Barranquero <lekktu@gmail.com>
- * textmodes/flyspell.el (flyspell-auto-correct-previous-word):
- Use window-start and window-end.
+ * ibuf-ext.el (ibuffer-auto-update-changed): Use `dolist' rather
+ than `mapcar'; return value is not used.
-2007-04-26 Glenn Morris <rgm@gnu.org>
+2007-10-23 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/python.el: Restore file pending consideration of legal
- status.
+ * progmodes/gud.el (gdb-source-window, gud-tooltip-mode)
+ (hl-line-mode, hl-line-sticky-flag): Pacify byte compiler.
-2007-04-26 Luc Teirlinck <teirllm@dms.auburn.edu>
+2007-10-23 Juanma Barranquero <lekktu@gmail.com>
- * locate.el (locate-in-alternate-database): Doc fix.
+ * ibuf-ext.el (ibuffer-switch-to-saved-filters)
+ (ibuffer-switch-to-saved-filter-groups): Doc fixes.
-2007-04-26 Glenn Morris <rgm@gnu.org>
+2007-10-23 Dan Nicolaescu <dann@ics.uci.edu>
- * button.el (button): Use underline if supported, else fall back
- to color.
+ * term/xterm.el (terminal-init-xterm): Experiment with a longer timeout.
-2007-04-25 Richard Stallman <rms@gnu.org>
+2007-10-23 Katsumi Yamaoka <yamaoka@jpl.org>
- * hi-lock.el (hi-lock-file-patterns-policy): Default to `ask'.
+ * emacs-lisp/advice.el (ad-make-advised-docstring):
+ Add ad-advice-info text property to doc string.
-2007-04-25 J.D. Smith <jdsmith@as.arizona.edu>
+2007-10-23 Glenn Morris <rgm@gnu.org>
- * progmodes/idlwave.el (idlwave-beginning-of-subprogram)
- (idlwave-end-of-subprogram): Take optional NOMARK arg to prevent
- pushing mark.
- (idlwave-current-routine): Don't push mark.
+ * progmodes/f90.el (f90-do-indent, f90-if-indent)
+ (f90-type-indent, f90-program-indent, f90-associate-indent)
+ (f90-continuation-indent, f90-comment-region)
+ (f90-beginning-ampersand, f90-smart-end)
+ (f90-break-before-delimiters, f90-auto-keyword-case)
+ (f90-leave-line-no, f90-mode-hook):
+ Give an appropriate safe-local-variable property.
-2007-04-25 Mathias Dahl <mathias.dahl@gmail.com>
+ * progmodes/fortran.el (fortran-tab-mode-default)
+ (fortran-tab-mode-string, fortran-do-indent, fortran-if-indent)
+ (fortran-structure-indent, fortran-continuation-indent)
+ (fortran-comment-indent, fortran-comment-line-extra-indent)
+ (fortran-comment-line-start)
+ (fortran-minimum-statement-indent-fixed)
+ (fortran-minimum-statement-indent-tab)
+ (fortran-comment-indent-char, fortran-line-number-indent)
+ (fortran-check-all-num-for-matching-do)
+ (fortran-blink-matching-if, fortran-continuation-string)
+ (fortran-comment-region, fortran-electric-line-number)
+ (fortran-column-ruler-fixed, fortran-column-ruler-tab)
+ (fortran-analyze-depth, fortran-break-before-delimiters):
+ Give an appropriate safe-local-variable property.
- * image-dired.el (image-dired-display-image): Derive image-type from
- filename rather than assuming jpeg, in case no resizing was needed.
+2007-10-23 Dan Nicolaescu <dann@ics.uci.edu>
-2007-04-25 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+ * printing.el: Move variable definitions before use.
+ (pr-menu-char-width, pr-menu-char-height): Pacify byte compiler.
- * custom.el (defface): Doc fix.
+2007-10-22 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-04-24 Chong Yidong <cyd@stupidchicken.com>
+ * emulation/tpu-edt.el (tpu-edt-old-global-values): New var.
+ (tpu-edt-off): Use it.
+ (tpu-edt-on): Set it. Make sure the tpu-global-map is not already on
+ the global-map before adding it to global-map.
- * progmodes/python.el: Remove due to unclear legal issues.
+ * menu-bar.el (global-buffers-menu-map): New var.
+ (global-map, menu-bar-update-buffers): Use it.
+ * msb.el (msb-menu-bar-update-buffers): Use it.
+ (msb-sort-by-directory, msb--choose-menu, msb--mode-menu-cond)
+ (msb--most-recently-used-menu, msb--create-buffer-menu-2):
+ Use with-current-buffer.
-2007-04-24 J.D. Smith <jdsmith@as.arizona.edu>
+2007-10-22 Juri Linkov <juri@jurta.org>
- * progmodes/idlw-shell.el (idlwave-shell-clear-all-bp):
- Don't re-query for each cleared BP.
- (idlwave-shell-clear-bp): Optionally skip BP query.
- (idlwave-shell-update-bp-overlays): Use set-window-margins instead
- of set-window-buffer, which incorrectly moves displayed region.
+ * isearch-multi.el: New file.
-2007-04-23 Jay Belanger <jay.p.belanger@gmail.com>
+ * isearch.el (isearch-search-string): After finding the next
+ occurrence switch to buffer isearch-buffers-current-buffer when
+ isearch-buffers-next-buffer-function is non-nil and
+ isearch-buffers-current-buffer is live.
- * calc/calc.el (calc-bug-address): Update maintainer's address.
- * calc/*: Update maintainer's address.
+ * add-log.el (change-log-mode): Make and set buffer-local variable
+ isearch-buffers-next-buffer-function to change-log-next-buffer.
+ Call isearch-buffers-minor-mode.
+ (change-log-next-buffer): New function.
-2007-04-23 Richard Stallman <rms@gnu.org>
+2007-10-22 Bastien Guerry <Bastien.Guerry@ens.fr>
- * simple.el (set-mark-command-repeat-pop): Doc fix.
- Put in `editing-basics' group.
+ * org-export-latex.el (org-export-latex-protect-string):
+ Renaming of `org-latex-protect'.
+ (org-export-latex-emphasis-alist): By default, don't protect
+ any emphasis formatter from further conversion.
+ (org-export-latex-tables): Honor column grouping for tables.
+ (org-export-latex-title-command): New option.
+ (org-export-latex-treat-backslash-char): Use \textbackslash{} to
+ export backslash character.
-2007-04-23 Chong Yidong <cyd@stupidchicken.com>
+2007-10-22 Carsten Dominik <dominik@science.uva.nl>
- * info.el (Info-mouse-scroll-up, Info-mouse-scroll-down):
+ * textmodes/org.el (org-read-date-get-relative): New function.
+ (org-agenda-file-regexp): New variable.
+ (org-agenda-files): Allow directories in the variable.
+ (org-agenda-get-restriction-and-command): New function.
+ (org-agenda): Use `org-agenda-get-restriction-and-command'.
+ (org-todo-blocker-hook, org-todo-trigger-hook): New hooks.
+ (org-entry-is-todo-p, org-entry-is-done-p, org-get-todo-state):
New functions.
- (Info-mode-line-node-keymap): Bind mouse commands to
- Info-mouse-scroll-up/down instead of Info-scroll-up/down.
-
-2007-04-23 Luc Teirlinck <teirllm@auburn.edu>
-
- * locate.el (locate-local-prompt): New var.
- (locate-prompt-for-command): Doc fix.
- (locate-prompt-for-search-string): New function.
- (locate): New optional arg. Make locate-local-prompt
- buffer-local. Use locate-prompt-for-search-string.
- (locate-with-filter): New optional arg.
- Use locate-prompt-for-search-string.
- (locate-update): Bind locate-prompt-for-command.
-
-2007-04-23 Glenn Morris <rgm@gnu.org>
-
- * files.el (magic-mode-alist): `<!DOCTYPE HTML' in html-mode.
-
-2007-04-23 Nick Roberts <nickrob@snap.net.nz>
-
- * button.el (button): Inherit from link face on a tty.
-
-2007-04-23 Glenn Morris <rgm@gnu.org>
-
- * button.el (button): Use color for this face on a tty.
-
- * files.el (magic-mode-alist): Allow for carriage-returns in
- html-mode and sgml-mode entries.
-
-2007-04-22 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
- Improve doc string of generated command.
-
- * subr.el (read-number): Catch errors.
-
- * hi-lock.el (hi-lock-file-patterns-policy): Doc fix.
-
-2007-04-22 Chong Yidong <cyd@stupidchicken.com>
-
- * image-dired.el: Rename from thumbnails.el. All instances of
- "thumbnails" replaced with "image-dired".
-
- * dired.el (dired-mode-map): Rename "thumbnails" again, to
- "image-dired".
-
-2007-04-22 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-kill-buffer-at-head, ido-delete-file-at-head):
- Don't use kill-line.
-
-2007-04-22 Nick Roberts <nickrob@snap.net.nz>
-
- * t-mouse.el (t-mouse-make-event): Pass on mev's more informative
- error message.
-
-2007-04-22 Chong Yidong <cyd@stupidchicken.com>
-
- * dired.el: Rename "tumme" to "thumbnails".
-
- * thumbnails.el: Rename from tumme.el. All instances of "tumme"
- replaced with "thumbnails".
-
-2007-04-22 Glenn Morris <rgm@gnu.org>
-
- * hi-lock.el (hi-lock-file-patterns-policy): Make it a defcustom,
- and give it the risky-local-variable property.
-
- * textmodes/flyspell.el (flyspell-define-abbrev): Downcase abbrev
- before defining it.
-
-2007-04-21 Martin Rudalics <rudalics@gmx.at>
-
- * progmodes/cc-mode.el (c-remove-any-local-eval-or-mode-variables):
- Use delete-region instead of kill-line.
-
-2007-04-21 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-electric-slash): Replace wrong use of
- `kill-region' by `delete-region'.
-
-2007-04-21 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/perl-mode.el (perl-indent-command): Use delete-region
- instead of kill-region.
-
- * progmodes/mantemp.el (mantemp-make-mantemps-region)
- (mantemp-insert-cxx-syntax, mantemp-sort-and-unique-lines)
- (mantemp-remove-memfuncs): Use delete-region instead of kill-word
- and kill-line.
-
- * progmodes/vhdl-mode.el (vhdl-template-type)
- (vhdl-template-record, vhdl-template-nature)
- (vhdl-template-configuration-spec, vhdl-template-component-inst)
- (vhdl-template-break, vhdl-regress-line, vhdl-electric-tab):
- Use delete-region instead of kill-word and kill-line.
-
-2007-04-21 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * dired-x.el (dired-virtual-mode): Doc fix.
-
-2007-04-21 Richard Stallman <rms@gnu.org>
-
- * font-lock.el (font-lock-keywords-alist): Mark as risky.
-
- * subr.el (read-number): Doc fix.
-
- * simple.el (pop-to-mark-command): Display message "mark popped"
- if point does not move.
- (set-mark-command): Doc fix.
-
-2007-04-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * locate.el: Revert 2006-09-09 and 2007-04-20 changes.
- (locate-local-filter, locate-local-search): New vars.
- (locate): Make variables local.
- (locate-update): Bind locate-buffer-name. Call locate using
- locate-local-filter and locate-local-search.
-
-2007-04-20 David Koppelman <koppel@ece.lsu.edu>
-
- * hi-lock.el (hi-lock-file-patterns-policy): New var.
- (hi-lock-find-patterns): Use hi-lock-file-patterns-policy.
- (hi-lock-mode): Update docstring.
-
-2007-04-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/fill.el (fill-move-to-break-point): Don't inhibit
- fill-nobreak-predicate when the break is past fill-column.
-
-2007-04-20 Francesco Potort,Al(B <pot@gnu.org>
-
- * locate.el (locate): Output from shell-command should go in the
- current buffer rather than *Shell Command Output*.
-
-2007-04-20 Chong Yidong <cyd@stupidchicken.com>
-
- * paren.el (show-paren-function): Fix last fix.
-
-2007-04-19 Kevin Ryde <user42@zip.com.au>
-
- * arc-mode.el (archive-find-type): lzh-exe for lzh self-extracting exe.
- (archive-lzh-summarize): Add optional start arg for where to start
- looking at the archive.
- (archive-lzh-exe-summarize, archive-lzh-exe-extract): New functions.
-
- * international/mule.el (auto-coding-alist): no-conversion for .exe
- and .EXE.
-
-2007-04-19 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-in-function-trailer-p): Fix this: when a
- function return type contains "struct", "union", etc.
- c-end-of-defun goes too far forward.
-
-2007-04-19 Chong Yidong <cyd@stupidchicken.com>
-
- * paren.el (show-paren-function): Reset window-start to avoid
- recentering.
-
-2007-04-19 Glenn Morris <rgm@gnu.org>
-
- * calendar/todo-mode.el: Fix typo: "threshhold" -> "threshold".
-
-2007-04-18 Glenn Morris <rgm@gnu.org>
-
- * calendar/diary-lib.el (diary-header-line-format): Add a custom
- :set function.
- (diary-list-entries): Only switch to diary-mode from
- default-major-mode (reverts 2007-03-21 change). Otherwise, if in
- diary-mode set header-line-format, in case of any customization.
-
-2007-04-18 Levin Du <zslevin@gmail.com> (tiny change)
-
- * calendar/parse-time.el (parse-time-string-chars): Check if CHAR
- is less than the length of parse-time-syntax.
-
-2007-04-17 David Kastrup <dak@gnu.org>
-
- * replace.el (query-replace-regexp-eval): Deprecate.
-
-2007-04-17 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-beginning-of-defun): With -ve arg and
- point too close to EOB, leave point at EOB rather than last `}'.
-
-2007-04-17 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-include-OPTkey)
- (bibtex-user-optional-fields, bibtex-entry-field-alist):
- Fix defcustom.
-
-2007-04-17 Glenn Morris <rgm@gnu.org>
-
- * calendar/cal-dst.el (calendar-dst-find-startend): If YEAR cannot
- be encoded, fall back to current year.
-
-2007-04-14 Kevin Ryde <user42@zip.com.au>
-
- * arc-mode.el (archive-lzh-summarize): Only apply the "downcase if
- all upcase" rule to OS-ID 0 "generic". Always downcase for OS-ID
- M "MSDOS".
-
-2007-04-16 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/python.el (python-end-of-block): Avoid looping forever
- if python-next-statement fails.
-
-2007-04-16 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-entry-field-alist): Use defcustom.
-
-2007-04-16 Dan Nicolaescu <dann@ics.uci.edu>
-
- * progmodes/perl-mode.el (perl-indent-level): Mark as safe local var.
- * progmodes/cperl-mode.el (cperl-indent-level): Likewise.
-
-2007-04-15 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-version): New function.
- (calc-trail-mode): Shorten the title.
-
-2007-04-15 Chong Yidong <cyd@stupidchicken.com>
-
- * mail/footnote.el (footnote-style): Clarify docstring to state
- that customizing this only applies to future footnotes.
-
-2007-04-15 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-field-list): Use functionp.
- (bibtex-make-field): Check that INIT is a string. Use functionp.
-
-2007-04-14 Glenn Morris <rgm@gnu.org>
-
- * complete.el (PC-goto-end): New buffer-local variable.
- (PC-do-completion-end): Make buffer-local.
- (partial-completion-mode) <choose-completion-string-functions>:
- Do not go to the end of the minibuffer if PC-goto-end is non-nil.
- (PC-do-completion): New optional fourth argument GOTO-END. Add a
- doc string. Set PC-goto-end for choose-completion.
- (PC-lisp-complete-symbol): Pass non-nil GOTO-END arg to
- PC-do-completion.
-
- * textmodes/bibtex.el (bibtex-insert-kill): Pass non-nil NODELIM
- arg to bibtex-make-field.
- (bibtex-make-field): Add optional fourth arg NODELIM.
- Insert delimiters around INIT unless this arg is non-nil.
-
-2007-04-14 Nick Roberts <nickrob@snap.net.nz>
-
- * tmm.el (tmm-get-keybind): Use copy-sequence to ensure that the
- global map isn't modified.
-
-2007-04-14 Glenn Morris <rgm@gnu.org>
-
- * calendar/appt.el (appt-disp-window): Do not split small windows.
- Suggested by Jeff Miller <jmiller@cablespeed.com>.
-
-2007-04-13 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/compile.el (compilation-start): Revert 2007-03-25 change.
-
- * files.el: Ditto.
-
-2007-04-13 Juanma Barranquero <lekktu@gmail.com>
-
- * cus-edit.el (minibuffer, auto-save): Fix typos in docstrings.
-
- * term.el (term-buffer-maximum-size, term-exec, term-escape-char)
- (term-set-escape-char, term-termcap-format, term-get-old-input-default)
- (term-skip-prompt, term-send-string, term-send-region, term-pager-page)
- (term-pager-help): Fix typos in docstrings.
-
- * wid-edit.el (widget-documentation): Fix typo in docstring.
-
- * progmodes/ebnf2ps.el (ebnf-insert-style, ebnf-merge-style):
- Fix typos in error messages.
-
-2007-04-13 Martin Rudalics <rudalics@gmx.at>
-
- * emacs-lisp/edebug.el (edebug-pop-to-buffer): Don't select
- window marked as dedicated.
-
- * mail/footnote.el (footnote-latin-string): New variable.
- (footnote-latin-regexp): Redefine as regexp alternative.
- (Footnote-latin): Use footnote-latin-string instead of
- footnote-latin-regexp.
-
-2007-04-13 Glenn Morris <rgm@gnu.org>
-
- * tmm.el (tmm-get-keybind): Use car-safe to avoid errors with
- inherited keymaps.
-
-2007-04-12 Chong Yidong <cyd@stupidchicken.com>
-
- * outline.el (outline-get-next-sibling): Clarify docstring.
- (outline-get-last-sibling): Handle case where we are at the first
- heading. Clarify docstring.
-
-2007-04-12 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-minor-mode-map): Make go button same
- length as stop button to lessen flicker.
- (jdb): Add gud-print.
- (gud-find-expr): Jdb prints the expression with the value, so
- don't insert it in the output.
-
-2007-04-11 Jason Rumney <jasonr@gnu.org>
-
- * dnd.el (dnd-get-local-file-name): Decode both upper and lower
- case hex. Do not try to decode non-hex letters.
-
-2007-04-11 Markus Triska <markus.triska@gmx.at>
-
- * emacs-lisp/byte-opt.el (byte-optimize-backward-char)
- (byte-optimize-backward-word): Remove (move to bytecomp.el).
- (byte-optimize-form-code-walker): Evaluate pure function calls if
- possible.
- (byte-optimize-all-constp): New function.
-
- * emacs-lisp/bytecomp.el (byte-compile-char-before):
- Improve numeric argument case.
- (byte-compile-backward-char, byte-compile-backward-word):
- New functions, performing rewriting previously done in byte-opt.el.
- Fix their "Fixme" item (restriction to numeric arguments).
-
-2007-04-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * desktop.el (desktop-save, desktop-create-buffer): Replace mapcar
- with dolist.
- (after-init-hook): Don't quote lambda.
- (desktop-first-buffer): Don't wrap it in eval-when-compile.
- (desktop-internal-v2s): Remove unused var `el'.
- (desktop-buffer-major-mode, desktop-buffer-locals): Move out of
- desktop-restore-file-buffer.
- (desktop-buffer-ok-count, desktop-buffer-fail-count): Move out of
- desktop-create-buffer.
-
-2007-04-10 Chong Yidong <cyd@stupidchicken.com>
-
- * woman.el (woman-decode-buffer): Postpone macro-set check...
- (woman-decode-region): ...to here.
-
-2007-04-10 Thien-Thi Nguyen <ttn@gnu.org>
-
- * startup.el (tty-handle-args): Use %S to log ARGS.
-
-2007-04-10 Glenn Morris <rgm@gnu.org>
-
- * dframe.el (dframe-frame-mode): Do not set auto-show-mode, since
- it is obsolete and has no effect.
-
- * dos-w32.el (default-buffer-file-type): Add defvar to quieten
- byte-compiler.
-
- * progmodes/cperl-mode.el (cperl-mode): Remove unnecessary call to
- obsolete function make-local-hook.
-
- * progmodes/dcl-mode.el (top-level): Move (require 'tempo) to
- start to quieten byte-compiler.
-
-2007-04-10 Markus Triska <markus.triska@gmx.at>
-
- * emacs-lisp/byte-opt.el (byte-optimize-char-before): Remove (move
- to bytecomp.el as byte-compile-char-before).
- * emacs-lisp/bytecomp.el (byte-compile-char-before):
- New function (modified replacement for byte-optimize-char-before in
- byte-opt.el).
-
-2007-04-09 Alan Mackenzie <acm@muc.de>
-
- * startup.el (inhibit-splash-screen): Emphatically state that it
- can't be set in site-start.el.
-
-2007-04-09 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/cc-subword.el (c-capitalize-subword): More closely
- mimic the behavior of `capitalize-word'. Do not move point with a
- negative argument. Based on tiny change by Paul Curry.
-
-2007-04-09 Paul Curry <dashteacup@gmail.com> (tiny change)
-
- * progmodes/cc-subword.el (c-downcase-subword, c-upcase-subword):
- Don't move point if ARG is negative.
-
-2007-04-09 Alan Mackenzie <acm@muc.de>
-
- Changes to make `narrow-to-defun' and `mark-defun' work properly
- in CC Mode:
-
- * progmodes/cc-defs.el (c-beginning-of-defun-1):
- * progmodes/cc-cmds.el (c-beginning-of-defun, c-end-of-defun):
- Bind beginning/end-of-defun-function to nil around calls to
- beginning/end-of-defun.
-
- * progmodes/cc-langs.el (beginning-of-defun-function)
- (end-of-defun-function): New c-lang-setvar's.
-
- * progmodes/cc-awk.el (c-awk-beginning-of-defun): Add "(or arg
- (setq arg 1))" to enable non-interactive call.
-
-2007-04-09 Eli Zaretskii <eliz@gnu.org>
-
- * simple.el (set-mark-command): Doc fix.
-
-2007-04-09 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb): Restore existing session if user
- tries to start a second one in graphical mode.
-
-2007-04-08 Martin Rudalics <rudalics@gmx.at>
-
- * cus-start.el <scroll-preserve-screen-position>: Add choices.
-
-2007-04-08 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * term/xterm.el (terminal-init-xterm): Fix key definitions.
- Add binding for C-M-SPC.
-
-2007-04-08 Richard Stallman <rms@gnu.org>
-
- * pcomplete.el (pcomplete-read-event): One single definition,
- and not a defsubst.
-
-2007-04-08 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/cc-cmds.el (c-end-of-defun): Tidy up, to eliminate
- byte-compiler warning "value unused".
-
-2007-04-08 Andreas Schwab <schwab@suse.de>
-
- * term/xterm.el (terminal-init-xterm): Add bindings for keypad keys.
-
-2007-04-07 Glenn Morris <rgm@gnu.org>
-
- * calendar/calendar.el (diary-font-lock-keywords, diary-live-p):
- Autoload these functions.
- (diary-date-forms): Add a custom :set form.
-
- * calendar/diary-lib.el (diary-set-maybe-redraw): Move definition
- before first use.
- (diary-font-lock-keywords): New function with old code for
- initialization of variable of same name.
-
-2007-04-07 David Hansen <david.hansen@gmx.net> (tiny change)
-
- * progmodes/cc-cmds.el (c-electric-paren): Fix space-before-funcall
- clean-up: only insert space when on identifier, etc.
-
-2007-04-07 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/grep.el (grep-find-use-xargs): Rewrite docstring.
-
- * net/tls.el (open-tls-stream): Properly handle case where there
- is no associated buffer.
-
-2007-04-07 Glenn Morris <rgm@gnu.org>
-
- * ffap.el (ffap-file-at-point): Lower the priority of the
- ffap-ftp-sans-slash-regexp check.
-
-2007-04-06 Alan Mackenzie <acm@muc.de>
-
- Fix fontification of labels, and other things with ":".
-
- * progmodes/cc-engine.el (c-forward-label): The function now
- returns 'goto-target, 'qt-2kwds-colon, 'qt-1kwd-colon, as well as
- the former t.
-
- * progmodes/cc-fonts.el (c-font-lock-declarations): Interpret the
- new return code from c-forward-label, fontifying tokens properly.
- Add some general comments throughout the file.
-
-2007-04-06 Chong Yidong <cyd@stupidchicken.com>
-
- * textmodes/flyspell.el (flyspell-duplicate, flyspell-incorrect):
- Revert 2006-01-27 change.
-
- * diff-mode.el (diff-mode): Revert 2007-03-04 change.
-
- * menu-bar.el (menu-bar-tools-menu): Revert 2003-07-25 change.
-
- * desktop.el (desktop-create-buffer, desktop-save):
- Revert 2004-11-12 change for lack of copyright papers.
-
- * dired-x.el (dired-guess-shell-case-fold-search): Delete var.
- (dired-guess-default): Respect case.
-
- * isearch.el (isearch-forward): Revert 1998-08-26 doc change.
-
- * emacs-lisp/byte-opt.el (byte-optimize-pure-func): Remove function;
- was originally checked in as byte-optimize-concat on 1997-11-02.
-
- * mail/sendmail.el (mail-text, mail-mode): Revert extant pieces of
- 1995-05-19 doc changes.
-
-2007-04-06 Kim F. Storm <storm@cua.dk>
-
- * loadhist.el (read-feature): Reimplement. New optional arg LOADED-P.
- (unload-feature): Update interactive spec accordingly.
-
- * progmodes/grep.el (grep-program): Remove commentary about zgrep.
-
-2007-04-06 John Paul Wallington <jpw@pobox.com>
-
- * subr.el (with-case-table): Use `make-symbol' to avoid variable
- capture. Restore the table in the same buffer.
-
- * font-lock.el (lisp-font-lock-keywords-2): Add `with-case-table'.
-
-2007-04-05 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
- Print entire form.
-
-2007-04-05 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (breakpoint-disabled): Tweak face (again)
- for low-color displays.
-
-2007-04-05 Glenn Morris <rgm@gnu.org>
-
- * play/5x5.el, play/animate.el, play/dissociate.el, play/doctor.el,
- * play/gomoku.el, play/landmark.el, play/tetris.el, play/zone.el:
- Seed random number generator on loading.
-
- * emacs-lisp/authors.el (top-level): Provide self.
-
- * play/animate.el (top-level): Provide self.
-
-2007-04-04 Alan Mackenzie <acm@muc.de>
+ (org-entry-add-to-multivalued-property)
+ (org-entry-remove-from-multivalued-property)
+ (org-entry-member-in-multivalued-property): New functions.
+ (org-remember-apply-template): Catch C-g and make sure window
+ configuration is restored.
+ (org-agenda-open-link): Make it work with several links in the line.
+ (org-drawers, org-set-regexps-and-options)
+ (org-get-current-options): Add support for a DRAWERS in-buffer option.
+ (org-agenda-window-frame-fractions): New option.
+ (org-fit-agenda-window): Use `org-agenda-window-frame-fractions'.
+ (org-columns-cleanup-item, org-find-entry-with-id)
+ (org-insert-columns-dblock, org-listtable-to-string)
+ (org-dblock-write:columnview, org-columns-capture-view)
+ (org-edit-headline): New functions.
+ (org-agenda-to-appt): Require calendar.
+ (org-entry-get-with-inheritance): Widen for search.
+ (org-columns-display-here): Don't mark buffer as modified when
+ adding space characters to accomodate column overlays.
+ (org-export-as-html): Better formatting of tags in the toc.
+ (org-columns-display-here): Make the ITEM column as compact as possible.
+ (org-remember-templates): Customization interface improved.
+ (org-export-with-property-drawer): Variable removed.
+ (org-export-with-drawers): New option.
+ (org-complex-heading-regexp): New variable.
+ (org-sort-entries): Rewrite using `sort-subr'.
+ (org-set-property): More appropriate completion during interactive use.
+ (org-sort-entries): Allow sorting by property.
+ (org-additional-option-like-keywords): Add more values.
+ (org-sort-entries-or-items): Rename from `org-sort-entries'.
+
+2007-10-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-get-date-from-calendar): New function.
+ (org-at-timestamp-p, org-timestamp-change)
+ (org-remember-templates): First element of each entry is now a
+ name for the template.
+ (org-store-log-note): Check for `org-note-abort'.
+ (org-kill-note-or-show-branches): New command.
+ (org-fontify-priorities): New option.
+ (org-fontify-priorities): New function.
+ (org-cut-subtree, org-copy-subtree): New argument N to
+ act on N sequential subtrees.
+ (org-paste-subtree): Fix the level at which a tree is pasted.
+ (org-fit-agenda-window): Limitations on window size removed.
+ (org-agenda-find-same-or-today-or-agenda): Rename from
+ `org-agenda-find-today-or-agenda'.
+ (org-scheduled-past-days): New option.
+ (org-agenda-scheduled-leaders)
+ (org-agenda-deadline-leaders): New options.
+ (org-agenda-get-deadlines): Use `org-agenda-deadline-leaders'.
+ (org-agenda-get-scheduled): Use `org-agenda-scheduled-leaders'.
+ (org-export-with-tags, org-export-plist-vars)
+ (org-infile-export-plist): New "tags" option.
+ (org-use-property-inheritance): New option.
+ (org-cached-entry-get): Use `org-use-property-inheritance'.
+ (org-remember-apply-template): Fix typo.
+
+2007-10-22 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-find-shell)
+ (tramp-open-connection-setup-interactive-shell): Improve sending
+ initial commands.
+ (tramp-action-terminal): Send debug message.
+ (tramp-wait-for-shell-prompt, tramp-send-command-internal): Remove.
+ (tramp-barf-if-no-shell-prompt): Insert code of
+ `tramp-wait-for-shell-prompt'.
- * progmodes/cc-vars.el (c-special-indent-hook): Amend doc-string
- to mention c-syntactic-indentation.
-
-2007-04-04 Chong Yidong <cyd@stupidchicken.com>
-
- * subr.el (with-case-table): New macro.
-
- * international/mule.el (ascii-case-table): New var.
-
- * mail/smtpmail.el (smtpmail-via-smtp): Use ascii-case-table when
- downcasing.
-
-2007-04-03 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-minor-mode-map): Simplify.
-
- * t-mouse.el (t-mouse-make-event-element): Don't use the left edge
- of the window if we're outside it e.g menu-bar.
-
- * xt-mouse.el (xterm-mouse-event): Don't use the left edge of the
- window if we're outside it e.g menu-bar.
-
-2007-04-03 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmail.el (rmail-convert-to-babyl-format): Don't try to
- decode base-64 encoded body if its content-type is something other
- than text/* or message/*.
-
-2007-04-03 Juanma Barranquero <lekktu@gmail.com>
-
- * simple.el (activate-mark-hook): Fix typo in docstring.
-
-2007-04-03 Nick Roberts <nickrob@snap.net.nz>
-
- * tmm.el (tmm-c-prompt): Initialize.
- (tmm-menubar): Deal with extended menu-items at top level.
- (tmm-get-keybind): Handle bindings redefined/undefined locally.
- (tmm-prompt): Handle visibility of top level menu-items.
-
- * progmodes/gud.el (gud-menu-map): Simplify.
- (gud-minor-mode-map): Add tool-bar like bindings to the text mode
- menubar.
-
-2007-04-02 Chong Yidong <cyd@stupidchicken.com>
-
- * mail/smtpmail.el (smtpmail-via-smtp): Revert last change.
-
- * comint.el (comint-send-input): Widen the buffer first.
-
- * info.el (Info-fontify-maximum-menu-size): Revert to 100000.
-
-2007-04-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/lisp-mode.el (lisp-fill-paragraph): Only obey
- emacs-lisp-docstring-fill-column in emacs-lisp-mode.
-
- * newcomment.el (comment-search-forward): Discard comment starters
- before point.
-
-2007-04-01 Guanpeng Xu <herberteuler@hotmail.com>
-
- * mouse.el (mouse-set-secondary): Update mouse-secondary-overlay.
-
-2007-04-01 Chong Yidong <cyd@stupidchicken.com>
-
- * mail/smtpmail.el (smtpmail-via-smtp): Use standard case table
- when downcasing.
-
- * button.el (previous-button): Rewrite to account for adjacent buttons.
-
-2007-04-01 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlwave.el (idlwave-auto-fill):
- Revert paragraph-separate change.
-
- * progmodes/idlw-shell.el (idlwave-shell-break-in):
- Simplify module calc.
- (idlwave-shell-set-bp-in-module): Compute module.
-
-2007-03-31 Glenn Morris <rgm@gnu.org>
-
- * emacs-lisp/timer.el (run-at-time): Doc fix.
-
- * emacs-lisp/warnings.el (display-warning): If we create the
- buffer displaying the warning, disable undo there.
-
-2007-03-31 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-register-file-name-handler)
- (tramp-register-completion-file-name-handler): New defsubst,
- derived from `tramp-register-file-name-handlers'. The split is
- necessary because Tramp's file name handlers must be registered at
- different startup places.
-
-2007-03-31 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/hideshow.el (turn-off-hideshow): New function.
- (hs-minor-mode): Use it instead of a lambda expression in
- change-major-mode-hook.
-
-2007-03-31 David Kastrup <dak@gnu.org>
-
- * woman.el (woman-Cyg-to-Win): Don't convert cons cells
- corresponding to MANPATH_MAP entries.
- (woman-man.conf-path, woman-parse-man.conf): Doc fix.
- (woman-parse-man.conf): Use more discriminating man.conf name.
- (woman-parse-man.conf): Parse MANPATH_MAP entries.
- (woman-manpath): Doc fix and type fix.
- (woman-cached-data): Check for MANPATH_MAP entries.
- (woman-expand-directory-path): Treat MANPATH_MAP entries.
-
-2007-03-31 Stuart Herring <herring@lanl.gov>
-
- * emacs-lisp/sregex.el (sregexq): Doc fix.
-
-2007-03-31 Markus Triska <markus.triska@gmx.at>
-
- * progmodes/flymake.el (flymake-err-line-patterns): Doc fix.
-
-2007-03-30 Reiner Steib <Reiner.Steib@gmx.de>
-
- * info.el (info-tool-bar-map): Use "exit" for Info-exit.
- Move to the right.
-
-2007-03-30 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-forward-to-nth-EOF-}): Fix EOB bug.
-
-2007-03-30 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc--insert-new-node): Take additional arg DLL.
- Use it, passed in explicitly, instead of from the dynamic binding.
- (ewoc-create, ewoc-enter-before): Update to use new call sequence.
-
-2007-03-30 Juanma Barranquero <lekktu@gmail.com>
-
- * simple.el (blink-matching-open): When in minibuffer, don't
- search for a match inside the prompt.
-
-2007-03-30 Nick Roberts <nickrob@snap.net.nz>
-
- * tmm.el (tmm-menubar): Select the right menu item with the mouse.
- (tmm-prompt): Don't make the mouse user select the first menu
- item twice.
-
-2007-03-30 Chong Yidong <cyd@stupidchicken.com>
-
- * eshell/esh-proc.el (eshell/kill): Tweak regexp to recognize
- SIGUSR1 and SIGUSR2.
-
-2007-03-29 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-read-internal): When reading file or dir, only override
- minibuffer-local-filename-completion-map, otherwise only override
- minibuffer-local-completion-map.
-
-2007-03-29 Glenn Morris <rgm@gnu.org>
-
- * complete.el (partial-completion-mode): Set PC-do-completion-end
- to nil after use.
- (PC-lisp-complete-symbol): Create and use a marker at `end',
- rather than using point-marker.
-
-2007-03-28 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (next-error-highlight): Doc fix.
- (compose-mail): Revert 2007-03-19 change.
-
-2007-03-28 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/edebug.el (edebug-display): Don't go to
- edebug-outside-buffer if it is dead.
-
-2007-03-28 Juanma Barranquero <lekktu@gmail.com>
-
- * view.el (view-mode): Fix typos in docstring.
-
-2007-03-28 Stephen Berman <Stephen.Berman@gmx.net>
-
- * recentf.el (recentf-save-file): Add a custom :set function.
-
-2007-03-28 Glenn Morris <rgm@gnu.org>
-
- * complete.el (PC-do-completion-end): New variable.
- (partial-completion-mode) <choose-completion-string-functions>:
- Use PC-do-completion-end in the non-minibuffer case to replace the
- correct amount of text.
- (PC-do-completion): Set PC-do-completion-end for c-c-s-f.
- (PC-lisp-complete-symbol): Give marker the after-insertion type,
- to deal with improvements inserted after point.
-
-2007-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * button.el (make-text-button): Add explicit `button' property.
- (default-button): Don't put a `button' property on it.
-
- * progmodes/python.el (python-mode): Skip comments when parsing.
-
- * vc-arch.el (vc-with-current-file-buffer): New macro.
- (vc-arch-file-source-p): Use it to avoid infloop.
-
-2007-03-28 David Hansen <david.hansen@gmx.net> (tiny change)
-
- * emacs-lisp/lisp.el (lisp-complete-symbol):
- Fix call to get-buffer-window to find windows in other frames.
-
-2007-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * comint.el (comint-proc-query, comint-dynamic-list-completions):
- Fix calls to get-buffer-window to find windows in other frames.
- Reported by David Hansen <david.hansen@gmx.net>.
-
-2007-03-27 Kevin Ryde <user42@zip.com.au>
-
- * info.el (Info-display-images-node): On a text-only terminal,
- show the "text" or "alt" parts of the image blobs.
-
-2007-03-27 Glenn Morris <rgm@gnu.org>
-
- * complete.el (PC-do-completion): Compute completion-base-size in
- the non-filename case, rather than setting to nil.
- (PC-lisp-complete-end): New variable.
- (PC-lisp-complete-symbol): Use PC-lisp-complete-end to store the
- original end in a series of consecutive invocations.
-
- * calendar/calendar.el (calendar-mode-hook): Declare it.
-
- * calendar/diary-lib.el (diary-live-p): Do not check for
- diary-selective-display.
-
-2007-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * replace.el (occur-next-error): *Occur* might not be displayed in the
- selected frame. Reported by David Hansen <david.hansen@gmx.net>.
-
-2007-03-26 Richard Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-large-region):
- Use ispell-call-process-region.
-
-2007-03-26 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * emacs-lisp/bytecomp.el (byte-compile-file-form-defmumble):
- Use prin1 instead of princ.
-
-2007-03-25 Chong Yidong <cyd@stupidchicken.com>
-
- * faces.el (face-set-after-frame-default): Revert 2007-03-10 change.
- Merge in X resources before global face.
-
- * progmodes/compile.el (compilation-start): Save compilation-directory
- rather than default-directory as local var.
- (compilation-directory): Mark as safe local var.
-
- * files.el: Don't mark default-directory as a safe local var.
-
-2007-03-25 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-mode.el (c-before-change): Fix BOB bug.
- * progmodes/cc-engine.el: Fix typo.
-
-2007-03-25 Juri Linkov <juri@jurta.org>
-
- * compare-w.el (compare-windows): Rename customization group
- `compare-w' to `compare-windows'.
- (compare-windows-whitespace, compare-ignore-whitespace)
- (compare-ignore-case, compare-windows-sync)
- (compare-windows-sync-string-size, compare-windows-recenter)
- (compare-windows-highlight, compare-windows): Change group name in
- the `group' tag from `compare-w' to `compare-windows'.
- (compare-windows-sync): Add option `nil' for no sync. Doc fix.
-
-2007-03-24 Markus Triska <markus.triska@gmx.at>
-
- * expand.el: Change example to always enable abbrev-mode,
- and remove redundant `function'.
- (expand-abbrev-hook): Add autoload cookie.
-
-2007-03-24 Ryan Yeske <rcyeske@gmail.com>
-
- * emacs-lisp/testcover.el (testcover-start, testcover-end)
- (testcover-mark-all, testcover-unmark-all): Add prompts to
- interactive specs.
-
-2007-03-24 Jason Rumney <jasonr@gnu.org>
-
- * autorevert.el (find-file-hook, auto-revert-tail-mode):
- Use file size in bytes for auto-revert-tail-pos not characters.
-
-2007-03-24 Thien-Thi Nguyen <ttn@gnu.org>
-
- * vc-rcs.el (vc-rcs-annotate-command):
- Set text property :vc-annotate-prefix on the annotation text.
- (vc-rcs-annotate-time): Instead of searching for ": ",
- search for end of text propertized with :vc-annotate-prefix.
-
-2007-03-24 Martin Rudalics <rudalics@gmx.at>
-
- * whitespace.el (top level): Remove calls putting
- permanent-local nil property since these are no-ops.
-
- * man.el (Man-support-local-filenames): Assure that
- default-directory exists when doing call-process.
-
-2007-03-23 David Vazquez <xeos00@gmail.com> (tiny change)
-
- * progmodes/m4-mode.el (m4-m4-buffer, m4-m4-region):
- Fix omission bug: Use m4-program-options to construct shell command.
-
-2007-03-23 David Kastrup <dak@gnu.org>
-
- * progmodes/cc-mode.el (c-make-emacs-variables-local):
- Use `mapcar' rather than `mapcan' to silence compiler warning.
-
-2007-03-22 Ralf Angeli <angeli@caeruleus.net>
-
- * textmodes/reftex.el, textmodes/reftex-vars.el,
- * textmodes/reftex-toc.el, textmodes/reftex-sel.el,
- * textmodes/reftex-ref.el, textmodes/reftex-parse.el,
- * textmodes/reftex-index.el, textmodes/reftex-global.el,
- * textmodes/reftex-dcr.el, textmodes/reftex-cite.el,
- * textmodes/reftex-auc.el: Add maintainer address.
-
-2007-03-22 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda-mode, org-table-edit-formulas):
- Make sure that `global-font-lock-mode' does not turn on font-lock
- in these buffers.
-
-2007-03-21 Kim F. Storm <storm@cua.dk>
-
- * xt-mouse.el (xt-mouse-epoch): New variable.
- (xterm-mouse-event): Use float-time.
-
-2007-03-21 Nick Roberts <nickrob@snap.net.nz>
-
- * xt-mouse.el (xterm-mouse-event): Compute a timestamp using
- current-time.
-
-2007-03-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * complete.el (read-file-name-internal): Don't add the final > if the
- completion is not finished (re-application of this patch, which was
- accidentally undone by Eli).
-
-2007-03-21 Chong Yidong <cyd@stupidchicken.com>
-
- * emulation/viper.el (viper-non-hook-settings): Handle mouse
- clicks in describe-key and describe-key-briefly advice a little better.
-
-2007-03-21 Juanma Barranquero <lekktu@gmail.com>
-
- * server.el (server-process-filter): Cancel any pending isearch.
-
-2007-03-21 Ulf Jasper <ulf.jasper@web.de>
-
- * calendar/icalendar.el (icalendar-version): Increase to 0.15.
- (icalendar--get-unfolded-buffer): Define actual arguments rather
- than just using &rest. Check replace-in-string is fbound.
- (icalendar-import-buffer): Doc fix.
- (icalendar--convert-ical-to-diary): Set diary-file.
- Check diary-file before inserting final newline.
- (icalendar--add-diary-entry): Return diary-file.
-
-2007-03-21 Glenn Morris <rgm@gnu.org>
-
- * calendar/calendar.el (diary-set-maybe-redraw): Autoload it.
- (diary-display-hook): Add custom :set function.
-
- * calendar/diary-lib.el (diary-header-line-flag): Doc fix.
- Add custom :set function.
- (diary-header-line-format): Doc fix.
- (diary-set-maybe-redraw): New function.
- (number-of-diary-entries): Change :set to use diary-set-maybe-redraw.
- (diary-list-entries): Always run diary-mode.
-
-2007-03-20 Kenichi Handa <handa@m17n.org>
-
- * international/quail.el (quail-setup-completion-buf): Make the
- completion buffer read-only.
- (quail-completion): Adjusted for the above change. Leave the
- modified flag nil.
-
-2007-03-20 David Kastrup <dak@gnu.org>
-
- * files.el (magic-mode-alist): Require literal "%!PS" string for
- magic postscript file detection.
-
-2007-03-20 Richard Stallman <rms@gnu.org>
-
- * textmodes/ispell.el (ispell-call-process): New function.
- Defends against bad `default-directory.'
- (ispell-check-version, ispell-find-aspell-dictionaries)
- (ispell-get-aspell-config-value, lookup-words): Call it.
- (ispell-call-process-region): New function.
- (ispell-send-string): Call it.
-
-2007-03-20 Andreas Schwab <schwab@suse.de>
-
- * Makefile.in (custom-deps): Depend on $(lisp)/subdirs.el.
- (finder-data): Likewise.
- (autoloads): Likewise.
-
-2007-03-20 Martin Rudalics <rudalics@gmx.at>
-
- * files.el (basic-save-buffer): Do not set visited filename when
- the corresponding directory does not exist or the specified
- filename is that of an existing directory.
-
-2007-03-20 Glenn Morris <rgm@gnu.org>
-
- * calendar/diary-lib.el (diary-live-p): New function.
- (number-of-diary-entries): Add a :set function to redisplay diary
- when necessary.
-
-2007-03-19 Nick Roberts <nickrob@snap.net.nz>
-
- * t-mouse.el (t-mouse-make-event-element): Use timestamp output
- from client program, mev, to compute mouse event.
-
-2007-03-19 Chong Yidong <cyd@stupidchicken.com>
-
- * faces.el (momentary): Face removed; unused due to reversion of
- 2007-01-04 changes by Kevin Rodgers.
-
- * mouse.el (mouse-drag-track): Remove spurious input-pending-p test.
- Suggested by Johan Bockg,Ae(Brd.
-
-2007-03-19 Martin Rudalics <rudalics@gmx.at>
-
- * font-lock.el (lisp-font-lock-keywords-1):
- Highlight define-globalized-minor-mode as a keyword.
-
-2007-03-19 Kim F. Storm <storm@cua.dk>
-
- * calc/calc-forms.el (math-std-daylight-savings)
- (math-std-daylight-savings-old): Doc fix.
-
-2007-03-19 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/python.el (python-default-template): Doc fix.
- (python-buffer): Fix typo in docstring.
-
- * isearchb.el (isearchb-follow-char):
- * subr.el (def-edebug-spec): Fix typo in docstring.
-
-2007-03-19 Richard Stallman <rms@gnu.org>
-
- * files.el (default-directory): Mark safe.
- (basic-save-buffer-2): Put proper dir name in error message.
-
- * simple.el (compose-mail): Run switch-function after
- setting up the mail buffer.
-
- * startup.el (inhibit-splash-screen, initial-major-mode): Doc fixes.
-
-2007-03-18 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-forms.el (math-parse-date): Fix a regular expression.
- (math-std-daylight-savings-new): Rename from
- `math-std-daylight-savings'.
- (math-std-daylight-savings-old): Rename from old value of
- `math-std-daylight-savings'.
- (math-std-daylight-savings): Use `math-std-daylight-savings-new' or
- `math-std-daylight-savings-old' depending on the year.
-
-2007-03-18 Detlev Zundel <dzu@gnu.org>
-
- * emacs-lisp/re-builder.el (reb-update-overlays): Do not mark
- zero-width regexps as invalid but rather at least count them correctly.
-
-2007-03-18 Thien-Thi Nguyen <ttn@gnu.org>
-
- * net/tls.el (open-tls-stream): In handshake-waiting loop,
- don't wait more if there is output available to process.
-
-2007-03-18 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/compile.el (compilation-find-file): Revert change
- from 2006-07-18 to allow completion of directory names.
- Reported by John Carter <john.carter@tait.co.nz>.
-
-2007-03-18 Kim F. Storm <storm@cua.dk>
-
- * subr.el (when, unless): Doc fix.
-
-2007-03-17 Thien-Thi Nguyen <ttn@gnu.org>
-
- * net/tls.el (tls-program): Doc fix.
-
-2007-03-17 Denis Bueno <dbueno@gmail.com> (tiny change)
-
- * autorevert.el (auto-revert-tail-handler):
- Call after-revert-hook.
-
-2007-03-17 Ryan Yeske <rcyeske@gmail.com>
-
- * simple.el (switch-to-completions): No error if search for \n\n fails.
-
-2007-03-17 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (line-move-1):
- Respect `inhibit-line-move-field-capture' property.
-
-2007-03-13 Chong Yidong <cyd@stupidchicken.com>
-
- * comint.el (comint-arguments): Mark backslash-escaped chars.
- (comint-delim-arg): Don't treat them as delimiters.
-
-2007-03-12 Kim F. Storm <storm@cua.dk>
- * ido.el (ido-init-completion-maps): Remap delete-backward-char.
-
-2007-03-12 Lawrence Mitchell <wence@gmx.li> (tiny change)
-
- * tempo.el (tempo-insert): Deal with 'r> if it appears
- specified with a prompt argument.
-
-2007-03-12 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-set-font-lock-defaults):
- Handle narrow table columns correctly.
-
-2007-03-12 Mark A. Hershberger <mah@everybody.org>
-
- * xml.el (xml-parse-tag, xml-parse-string, xml-parse-attlist)
- (xml-parse-dtd, xml-parse-elem-type, xml-substitute-special):
- Return to use of the -no-properties variants. There was
- consensus on emacs-devel that the speed of these variants was
- prefered since we are usually parsing files (from the internet
- or on disk) instead of XML created in Emacs.
-
- * eshell/esh-mode.el (eshell-handle-ansi-color): New function.
- Add customize option.
-
-2007-03-12 Glenn Morris <rgm@gnu.org>
-
- * calc/calc-forms.el (math-std-daylight-savings): Switch to new
- North American rule. Replace "daylight savings" with "daylight
- saving" in doc.
-
- * calendar/cal-china.el, cal-dst.el, calendar.el, diary-lib.el:
- * calendar/lunar.el, solar.el: Replace "daylight savings" with
- "daylight saving" in text.
-
- * woman.el (woman-change-fonts): Tweak previous change by using
- woman-request-regexp rather than "^\\.".
-
- * startup.el (command-line-1): Make insertion of
- initial-scratch-message not depend on scratch being selected.
-
-2007-03-11 Juri Linkov <juri@jurta.org>
-
- * replace.el (match): Use yellow background on light-bg terminals.
-
-2007-03-11 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/bytecomp.el (byte-compile-warning-prefix):
- Correctly compute line number.
-
-2007-03-11 Guanpeng Xu <herberteuler@hotmail.com>
-
- * type-break.el (type-break-get-previous-count):
- Repeat previous change here.
-
-2007-03-11 Dan Nicolaescu <dann@ics.uci.edu>
-
- * progmodes/grep.el (grep-find-ignored-directories):
- Add .git and .bzr to list.
-
-2007-03-11 Andreas Schwab <schwab@suse.de>
-
- * diff-mode.el (diff-apply-hunk): Use proper format string for error.
-
-2007-03-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mail/emacsbug.el (report-emacs-bug): Don't hard code the "X" name.
-
-2007-03-10 Chong Yidong <cyd@stupidchicken.com>
-
- * faces.el (face-set-after-frame-default): Recalculate face
- customizations after applying X resources.
-
-2007-03-10 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el (rcirc-timeout-seconds): New variable.
- (rcirc-keepalive-seconds): Remove variable.
- (rcirc-server-name, rcirc-timeout-timer, rcirc-connecting)
- (rcirc-process, rcirc-user-disconnect): New variables.
- (rcirc-connect): Initalize new variables.
- (rcirc-keepalive): Don't send keepalive pings before connection
- is completed.
- (rcirc-sentinel): Do mark all channels with activity when
- connection is dropped. Run hook with process buffer local.
- (rcirc-reschedule-timeout, rcirc-delete-process): New functions.
- (rcirc-buffer-process): Return value of rcirc-process if
- rcirc-server-buffer is nil.
- (rcirc-server-name): Return the reported server name.
- (rcirc-update-prompt): Simplify computation of the server name.
- (rcirc-format-response-string): Likewise.
- (rcirc-handler-001): Mark server as connected, record the reported
- server name, and schedule a timeout.
- (rcirc-track-nick): Add a spec for the tty class.
- (rcirc-user-non-nick): Remove function.
- (rcirc-nick-prefix-chars): Add variable.
- (rcirc-user-nick): Use above variable.
-
-2007-03-10 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * icomplete.el (icomplete-tidy, icomplete-exhibit):
- Bind deactivate-mark to nil.
-
-2007-03-10 Martin Rudalics <rudalics@gmx.at>
-
- * complete.el (PC-do-completion): Bind dirlength to nil to avoid
- that buffer contents get erased during completion.
-
-2007-03-10 Glenn Morris <rgm@gnu.org>
-
- * woman.el (woman-change-fonts): Add a hack to deal with
- font-escape followed by "." at start of a line.
- (woman2-IP): Add a hack to deal with consecutive requests.
- (woman2-tagged-paragraph): Extend existing hack to handle "sp".
-
-2007-03-10 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-mode.el (c-before-change): Wrap in save-match-data.
-
-2007-03-09 Richard Stallman <rms@gnu.org>
-
- * abbrev.el (abbrev): Add `provide'.
-
-2007-03-09 Thien-Thi Nguyen <ttn@gnu.org>
-
- * net/ange-ftp.el (ange-ftp-try-passive-mode): Doc fix.
-
-2007-03-09 Martin Rudalics <rudalics@gmx.at>
-
- * complete.el (PC-try-completion): New function.
- (PC-do-completion, read-file-name-internal): Use it instead of
- try-completion.
-
-2007-03-08 Alan Mackenzie <acm@muc.de>
-
- Remove stale tokens from `c-found-types' cache.
-
- * progmodes/cc-mode.el (c-unfind-enclosing-token)
- (c-unfind-coalesced-tokens, c-before-change): New functions.
- (c-maybe-stale-found-type): New variable.
-
- * progmodes/cc-engine.el (c-partial-ws-p, c-unfind-type)
- (c-trim-found-types): New functions.
-
-2007-03-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * smerge-mode.el (smerge-remove-props): Don't mark the buffer modified.
- (debug-ignored-errors): Add entry from smerge-match-conflict.
-
-2007-03-08 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlw-help.el (idlwave-do-context-help1): Don't visit
- special help topics for keywords.
- (idlwave-help-assistant-command): Include ".exe" for ms-dos
- etc. Assistant command.
-
-2007-03-08 Chong Yidong <cyd@stupidchicken.com>
-
- * replace.el (occur-engine): Move buffer-undo-list binding...
- (occur-1): ...to here.
-
- * complete.el (PC-bindings): Rebind M-TAB in read-expression-map.
-
- * simple.el (minibuffer-completing-symbol): New var.
- (eval-expression): Use it.
- (completion-setup-function): Don't bind completion-base-size when
- completing a symbol in the minibuffer.
-
-2007-03-08 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb): Pop up current GUD buffer if user
- tries to start a second session in graphical mode.
-
-2007-03-07 Miles Bader <miles@gnu.org>
-
- * international/isearch-x.el
- (isearch-process-search-multibyte-characters):
- Strip text-properties from PROMPT to avoid an error from read-string.
-
-2007-03-07 Kim F. Storm <storm@cua.dk>
-
- * complete.el (PC-bindings): Remap lisp-complete-symbol to
- PC-lisp-complete-symbol instead of binding M-TAB in global-map.
-
-2007-03-07 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-
- * complete.el (PC-do-completion): Delete duplicates in the list of
- possible completions.
-
-2007-03-07 Glenn Morris <rgm@gnu.org>
-
- * ses.el (ses-mode): Doc fix.
-
-2007-03-06 Kim F. Storm <storm@cua.dk>
-
- * isearch.el (isearch-message-prefix): Undo 2007-03-01 change.
-
-2007-03-06 Kenichi Handa <handa@m17n.org>
-
- * term/x-win.el (x-select-utf8-or-ctext): Improve the strategy.
-
-2007-03-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * simple.el (completion-setup-function): Improve last fix so it doesn't
- set it to a relative directory name either.
-
-2007-03-05 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el: Replace some (defvar VAR) by (defvar VAR nil).
-
-2007-03-05 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/re-builder.el (reb-re-syntax): Fix custom type.
-
- * files.el (find-file-noselect): No error if file no longer exists.
- Display a message and avoid other questions.
-
-2007-03-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcomplete.el (pcomplete-show-completions): Improve last change, so
- as not to use an invisible window and to create a window if none exist.
-
- * progmodes/python.el (python-send-command): Restart proc if necessary.
- (python-proc): Simplify.
-
-2007-03-05 David Hansen <david.hansen@gmx.net> (tiny change)
-
- * pcomplete.el (pcomplete-show-completions): Search all frames for
- completions buffer.
-
-2007-03-05 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (customize-save-variable): Clear customized-value
- property (saved values are now put in theme-value property).
- (customize-set-variable): Doc fix.
-
- * complete.el (PC-do-completion): If completion-ignore-case is
- non-nil, replace field with completion string before exiting.
-
-2007-03-05 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-make-temp-file): New parameter FILENAME.
- Append its extension to the resulting temporary file name.
- (tramp-handle-file-local-copy, tramp-handle-write-region): Apply it.
-
- * net/tramp-smb.el (tramp-smb-handle-file-local-copy)
- (tramp-smb-handle-write-region): Apply it.
-
-2007-03-05 Alin C. Soare <alinsoar@voila.fr> (tiny change)
-
- * emacs-lisp/lisp-mode.el (calculate-lisp-indent):
- Redo previous change.
-
-2007-03-04 Kevin Rodgers <kevin.d.rodgers@gmail.com> (tiny change)
-
- * diff-mode.el (diff-mode): Doc fix.
-
-2007-03-05 Kenichi Handa <handa@m17n.org>
-
- * international/characters.el: Set category `l' (latin)
- for more characters.
-
-2007-03-04 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/authors.el (authors-aliases): Add alias.
-
-2007-03-04 Glenn Morris <rgm@gnu.org>
-
- * progmodes/hideshow.el (hs-minor-mode): Turn mode off and show
- all when switching major mode.
- (hs-minor-mode, hs-c-start-regexp, hs-block-start-regexp)
- (hs-block-start-mdata-select, hs-block-end-regexp)
- (hs-forward-sexp-func, hs-adjust-block-beginning):
- Do not make these variables permanent-local.
-
-2007-03-04 Richard Stallman <rms@gnu.org>
-
- * progmodes/cperl-mode.el (cperl-mode):
- Modify cperl-compilation-error-regexp-alist by appending.
-
- * emacs-lisp/edebug.el (edebug-kill-buffer): New function.
- (edebug-mode): Add the hook.
- (edebug-recursive-edit): Remove the hook on exiting.
-
- * type-break.el (type-break-get-previous-time):
- Handle end-of-file errors specially
- so they don't get reported wrong in .emacs.
-
- * startup.el (fancy-splash-text): Clarify text.
-
- * simple.el (beginning-of-buffer, end-of-buffer):
- Avoid treating plain C-u like numeric arg.
-
- * simple.el (completion-setup-function): Don't set
- default-directory to nil.
-
- * shell.el (shell-dirstack-query): Doc fix.
-
- * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line):
- Don't select the window -- pass it to primitives instead.
-
- * faces.el (minibuffer-prompt): Use medium blue by default.
-
-2007-03-04 David Kastrup <dak@gnu.org>
-
- * jit-lock.el (jit-lock-stealth-time): Change default to nil.
- Preserve 16 as default value for "seconds" when customizing.
-
-2007-03-04 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-self-insert-command)
- (orgtbl-self-insert-command, org-delete-char)
- (org-delete-backward-char): Set the `flyspell-delayed' property.
-
-2007-03-03 Chong Yidong <cyd@stupidchicken.com>
-
- * international/mule.el (find-auto-coding): Don't search for
- line-ending characters past the end of the tail.
-
-2007-03-03 Christopher Allan Webber <cwebber@dustycloud.org> (tiny change)
-
- * play/gamegrid.el (gamegrid-add-score-with-update-game-score-1):
- Jump to the line where new score has been uploaded.
-
- * play/tetris.el (tetris-move-bottom, tetris-move-left)
- (tetris-move-right, tetris-rotate-prev, tetris-rotate-next):
- Do nothing when the game is paused.
-
-2007-03-03 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-set-tags): Prevent slipping of point
- during completion.
-
-2007-03-01 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * isearch.el (isearch-message-prefix):
- Use minibuffer-prompt-properties.
-
-2007-03-01 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el: Replace (defvar VAR nil) by (defvar VAR).
- (ps-setup): Print which Emacsen is running ps-print package.
-
-2007-03-01 Stuart Herring <herring@lanl.gov>
-
- * files.el (set-auto-mode-0): Use `indirect-function'.
- (hack-one-local-variable): Don't reapply current major mode.
-
-2007-03-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/python.el (python-quote-syntax): Don't bother with
- syntax-ppss-context.
- (python-fill-paragraph): Make sure that fenced-string delimiters that
- stand on their own line stay there.
-
-2007-03-01 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * replace.el (perform-replace): Propertize message.
-
-2007-03-01 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-prepare-agenda-buffers): Also check for
- invisible heading.
-
-2007-02-28 Chong Yidong <cyd@stupidchicken.com>
-
- * net/tramp.el (tramp-file-name-handler): Revert last change.
-
-2007-02-28 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-mouse-until, gdb-mouse-jump):
- Correct doc strings.
-
-2007-02-28 Chong Yidong <cyd@stupidchicken.com>
-
- * replace.el (perform-replace): Undo forward-char immediately if
- non-adjacent search fails.
-
-2007-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * version.el (emacs-major-version, emacs-minor-version):
- string-to-int -> string-to-number.
-
-2007-02-28 Juanma Barranquero <lekktu@gmail.com>
-
- * help.el (where-is): Fail gracefully when not passed a command.
-
-2007-02-28 Stuart Herring <herring@lanl.gov>
-
- * find-lisp.el (find-lisp-default-directory-predicate):
- Fix bug: Do symlink check on expanded filename.
-
-2007-02-28 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-set-tags, org-table-get-field): Avoid case
- changes during replacement.
- (org-agenda-mode-map): Add default binding for `org-agenda-archive'.
-
-2007-02-28 Lars Hansen <larsh@soem.dk>
-
- * desktop.el: Delete header line listing me as maintainer.
-
-2007-02-28 Glenn Morris <rgm@gnu.org>
-
- * tutorial.el (tutorial--describe-nonstandard-key): Tweak text in
- the menus case.
-
-2007-02-28 Chong Yidong <cyd@stupidchicken.com>
-
- * net/tramp.el (tramp-file-name-handler): Inhibit modification
- hooks to avoid confusion when combining after-change calls.
-
-2007-02-27 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-encrypt-string): Remove inhibition of gpg-agent,
- now that pgg-gpg-process-region correctly honors passed-in passphrase.
- (allout-distinctive-bullets-string): Add info about bullet conventions.
- (allout-mode): Add info about distinctive vs plain bullets.
-
-2007-02-27 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-archive-subtree): Quote variable name.
- (org-agenda-get-todos): Make sure skip properties are checked correctly.
-
-2007-02-26 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-bashdb-history, gud-bashdb-marker-filter)
- (gud-bashdb-command-name, bashdb): Remove.
- (gud, gud-menu-map): Remove references to bash/bashdb.
-
-2007-02-26 Andrey Zhdanov <susuman@hotmail.com> (tiny change)
-
- * progmodes/gud.el (gud-pdb-marker-regexp): Add optional <module>
- keyword for Python 2.5.
-
-2007-02-26 Romain Francoise <romain@orebokech.com>
-
- * net/net-utils.el (whois-server-tld): Update server for .org.
- (whois-server-list): Add whois.publicinterestregistry.net.
- (whois-guess-server): Fix formatting in docstring.
-
-2007-02-26 Kim F. Storm <storm@cua.dk>
-
- * mouse.el (mouse-show-mark): Run hooks and perform command
- remapping for mouse-region-delete-keys.
-
-2007-02-26 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * font-core.el (font-lock-mode): Doc fix.
-
-2007-02-25 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-buffer-internal): Set this-command to fallback command.
- Add selected buffer to buffer-name-history.
- (ido-file-internal): Set this-command to fallback command.
- Add file names to file-name-history.
-
- * emacs-lisp/map-ynp.el (map-y-or-n-p):
- Apply minibuffer-prompt-properties.
-
-2007-02-25 Andreas Schwab <schwab@suse.de>
-
- * files.el (hack-one-local-variable-eval-safep): Correct handling
- of edebug-form-spec property value. Reported by Johan Bockg,Ae(Brd.
-
-2007-02-25 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-table-overlay-coordinates)
- (org-table-toggle-coordinate-overlays): New functions.
- (org-table-overlay-coordinates, org-table-coordinate-overlays):
- New variables.
- (org-startup-with-deadline-check): Remove option.
- (org-mode): Remove deadline check on startup.
- (org-table-limit-column-width): Remove option.
- (org-table-formula-numbers-only): Remove option.
- (org-link-style, org-link-format): Remove options.
- (org-select-agenda-window, org-fit-agenda-window): Remove options.
- (org-export-ascii-show-new-buffer)
- (org-export-html-show-new-buffer): Remove options.
- (org-activate-links): Remove camel option.
- (org-file-link-context-use-camel-case): Remove option.
- (org-camel-regexp): Remove variable.
- (org-activate-camels): Remove function.
- (org-store-link): Remove Camel stuff.
- (org-make-org-heading-camel): Remove function.
- (org-open-at-point): Remove camel stuff.
- (org-link-search): Remove camel stuff.
- (org-camel-to-words): Function removed.
- (org-get-agenda-file-buffer): Make sure we prepare the base
- buffers, not any indirect buffers.
- (org-sort-entries): Sort top-level when not on a headline, and no
- active region.
- (org-in-regexp): New function.
- (org-search-not-self): Rename from `org-search-not-link'.
- (org-open-link-marker): New variable.
- (org-open-at-point): Set `org-open-link-marker'.
- (org-print-icalendar-entries): Fixe bug with excluding DONE
- entries from the exported list.
- (org-edit-formula-lisp-indent): New command.
- (orgtbl-to-texinfo, orgtbl-to-html): New functions.
- (orgtbl-to-latex, orgtbl-insert-radio-table)
- (orgtbl-toggle-comment, orgtbl-send-table): New functions.
- (orgtbl-radio-table-templates): New option.
- (org-store-link-props):
- (org-remember-templates): More possibilities to insert info
- into templates.
- (org-remember-apply-template): Make use of the extended
- template capabilities.
- (org-remember-redo-template): New command.
- (org-upgrade-old-links)
- (org-table-modify-formulas, org-table-replace-in-formulas)
- (org-table-find-dataline)
- (org-table-get-vertical-vector): Remove functions.
- (org-table-remove-rectangle-highlight)
- (org-time-stamp-format, org-toggle-log-option)
- (org-table-highlight-rectangle)
- (org-table-iterate, org-table-make-reference):
- (org-translate-time, org-tree-to-indirect-buffer)
- (org-table-field-info, org-table-fix-formulas)
- (org-table-force-dataline, org-table-get-descriptor-line)
- (org-table-get-range)
- (org-skip-comments, org-sort)
- (org-sort-entries, org-sublist, org-table-add-rectangle-overlay)
- (org-table-current-dline, org-table-current-field-formula)
- (org-table-edit-backward-field)
- (org-table-edit-formulas-post-command)
- (org-table-edit-line-down, org-table-edit-line-up)
- (org-agenda-archive)
- (org-agenda-clock-cancel)
- (org-agenda-clock-out, org-agenda-list-stuck-projects)
- (org-agenda-open-link, org-agenda-show-new-time)
- (org-agenda-skip-subtree-when-regexp-matches)
- (org-agenda-tree-to-indirect-buffer, org-agenda-undo)
- (org-at-regexp-p, org-auto-repeat-maybe, org-check-log-option)
- (org-do-sort, org-file-image-p, org-find-overlays)
- (org-find-row-type, org-get-indirect-buffer, org-get-repeat)
- (org-highlight-until-next-command, org-isearch-end)
- (org-match-any-p, org-next-link, org-previous-link):
- (org-remove-subtree-entries-from-agenda, org-replace-escapes)
- (org-rewrite-old-row-references)
- (org-isearch-post-command)
- (org-table-edit-move, org-table-edit-next-field)
- (org-table-edit-scroll, org-table-edit-scroll-down)
- (org-set-frame-title, org-show-reference)
- (org-unhighlight-once, org-verify-change-for-undo): New functions.
- (org-show-variable): Remove command.
- (org-add-log-maybe): New arguments STATE, FINDPOS
- (org-table-sort-lines): Rewrite from scratch.
- (org-link-search): New argument AVOID-POS.
- (org-print-icalendar-entries): Remove argument CATEGORY.
- (org-run-agenda-series): Remove argument WONDOW.
- (org-next-link, org-previous-link): New commands.
- (org-agenda-date-format): New option.
- (org-table-iterate): New command.
- (org-table-modify-formulas)
- (org-table-replace-in-formulas): Remove functions.
- (org-table-fix-formulas): New function.
- (org-table-insert-column, org-table-delete-column)
- (org-table-move-column): Use `org-table-fix-formulas'.
- (org-follow-gnus-link): Patch from Bastien/Leo.
- (org-table-current-field-formula): New function.
- (org-file-image-p): New function.
- (org-agenda-show-new-time): New function.
- (org-agenda-date-later): Call `org-agenda-show-new-time'.
- (org-with-remote-undo): New macro.
- (org-agenda-undo): New command.
- (org-verify-change-for-undo): New function.
- (org-time-stamp-format): New function.
- (org-agenda-get-timestamps): Skip scheduled if DONE and requested
- by user.
- (org-match-any-p): New function.
- (org-make-tags-matcher): Handle regular expressions for tag and
- todo matches.
- (org-read-date): Accept "+N" as input for a date relative to the
- current date.
- (org-remove-subtree-entries-from-agenda): New function.
- (org-agenda-archive, org-agenda-kill):
- Use `org-remove-subtree-entries-from-agenda'.
- (org-do-sort, org-sort-entries): New functions.
- (org-sort): New command.
- (org-table-sort-lines): Use `org-do-sort'.
- (org-fix-decoded-time): New function.
- (org-table-number-regexp): Require 0x... to identify as number
- in tables.
- (org-startup-options): New keywords for note taking.
- (org-upgrade-old-links): Remove function.
- (org-get-repeat): New function.
- (org-show-context): Also show siblings on current level.
- (org-show-siblings): New function.
- (org-isearch-end, org-isearch-post-command): New functions.
- (org-show-siblings): New option.
- (org-show-context): Use `org-show-siblings'.
- (org-table-maybe-recalculate-line): No longer require `calc-eval'
- to be bound, because user may just use elisp.
-
-2007-02-24 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-paste): Handle x-clipboard-yank.
- (cua--init-keymaps): Remap x-clipboard-yank to cua-paste.
-
-2007-02-24 Dan Nicolaescu <dann@ics.uci.edu>
-
- * startup.el (command-line): Also check if the abbrev file is readable.
-
-2007-02-24 John Paul Wallington <jpw@pobox.com>
-
- * net/tls.el (tls-certtool-program): Fix custom type.
-
- * mail/feedmail.el (feedmail-message-id-generator)
- (feedmail-date-generator): Fix custom types.
-
- * mail/rmail.el (rmail-message-filter): Fix custom type.
-
-2007-02-24 Eli Zaretskii <eliz@gnu.org>
-
- * startup.el (command-line): If simple.el cannot be found, proceed
- with a warning message.
-
-2007-02-24 Kenichi Handa <handa@m17n.org>
-
- * international/utf-8.el (utf-8-pre-write-conversion): Handle the
- case that BEG is a string.
-
-2007-02-24 Chris Moore <dooglus@gmail.com>
-
- * pgg-pgp5.el (pgg-pgp5-encrypt-region):
- * pgg-pgp.el (pgg-pgp-encrypt-region):
- * pgg-gpg.el (pgg-gpg-encrypt-region):
- Check pgg-encrypt-for-me if no other recipients.
-
-2007-02-23 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmailedit.el (rmail-cease-edit): Restore the Rmail toolbar.
-
- * textmodes/sgml-mode.el (sgml-validate): Quote the file name with
- shell-quote-argument.
-
-2007-02-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * comint.el (comint-read-input-ring): Use comint-input-ring-size
- from the comint buffer instead of the temporary one.
-
-2007-02-23 David Reitter <david.reitter@gmail.com>
-
- * cus-edit.el (custom-save-all): Canonicalize custom-file before
- storing it in recentf-exclude.
-
-2007-02-23 Chong Yidong <cyd@stupidchicken.com>
-
- * startup.el (fancy-splash-screens): Make cursor-type buffer-local
- in splash screen.
-
-2007-02-22 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlw-shell.el (idlwave-shell-mode): Clean up pending
- commands, for restart.
- (idlwave-shell-current-module): Fix handling of module name by type.
- (idlwave-shell-break-in): Update type handling.
- (idlwave-shell-bp-get): Encode type in BP structure.
- (idlwave-shell-set-bp): Fix setting condition/count on disabled BPs.
- (idlwave-shell-module-source-query): Query routine info based on type.
- Fix path parsing for non-compiled files.
- (idlwave-shell-module-source-filter): Don't signal error in filter
- if no source found.
- (idlwave-shell-set-bp-in-module): Use fallback source to prevent
- filter race.
-
-2007-02-22 Kim F. Storm <storm@cua.dk>
-
- * wid-edit.el (widget-default-create): Undo 2007-02-04 change.
- (editable-field): Document need to put some text before the %v
- escape in :format string.
-
-2007-02-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-svn.el: Remove the code inherited from CVSREAD and `cvs edit'.
- (vc-svn-use-edit): Remove unused config var.
- (vc-svn-update, vc-svn-revert): Checkout is always implicit.
-
- * outline.el (hide-sublevels): Keep empty last line, if available.
-
- * buff-menu.el (list-buffers-noselect): Use explicit unicode code
- rather than the corresponding unicode char, to make the code
- more readable.
-
-2007-02-19 Juanma Barranquero <lekktu@gmail.com>
-
- * speedbar.el (speedbar-frame-mode, speedbar-frame-width)
- (speedbar-show-unknown-files, speedbar-item-info-file-helper)
- (speedbar-item-info-tag-helper): Doc fixes.
-
-2007-02-19 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (locale-language-names):
- Map "eo" to "Esperanto".
-
- * language/european.el ("Esperanto"): New language environment.
-
-2007-02-17 Sven Joachim <svenjoac@gmx.de> (tiny change)
-
- * simple.el (kill-line): Doc fix.
-
-2007-02-17 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/bindat.el (bindat--unpack-u*): Optimize.
- (bindat--unpack-item, bindat--length-group, bindat--pack-item)
- (bindat--unpack-group, bindat--pack-group):
- Handle vectors with optional element type.
-
-2007-02-17 Daiki Ueno <ueno@unixuser.org>
-
- * pgg-gpg.el (pgg-gpg-process-region): Make USE-AGENT nil
- if PASSPHRASE is given.
-
-2007-02-17 Chris Moore <dooglus@gmail.com>
-
- * jka-cmpr-hook.el (jka-compr-compression-info-list):
- Recognize backups of bz2 compressed files.
-
-2007-02-17 Eli Zaretskii <eliz@gnu.org>
-
- * info-look.el (info-lookup): Bind Info-fontify-maximum-menu-size
- to nil to speed up lookup of the symbol in index nodes.
-
-2007-02-17 Alin C. Soare <alinsoar@voila.fr> (tiny change)
-
- * emacs-lisp/lisp-mode.el (calculate-lisp-indent):
- Add indentation for the constants of Lisp.
-
-2007-02-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * ps-print.el: Use (defvar <foo>) where applicable.
- (ps-print-emacs-type): Remove.
- (ps-x-frame-property, ps-e-frame-parameter): Remove.
- (ps-frame-parameter): Align its call-convention with frame-parameter.
- (ps-begin-job): Adjust calls to it appropriately.
- (ps-setup): Don't print ps-print-emacs-type.
- (ps-e-find-composition, ps-mark-active-p, ps-color-device):
- Define in such a way that it's obvious that it's defined.
- (ps-prsc, ps-c-prsc, ps-s-prsc): Remove.
- (ps-rmail-mode-hook, ps-vm-mode-hook, ps-gnus-summary-setup)
- (ps-jts-ps-setup): Use flavor-neutral syntax instead.
-
-2007-02-15 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-indent-new-comment-line): When splitting
- an empty one-line C-style comment, post-position point properly.
-
-2007-02-15 Chris Moore <dooglus@gmail.com>
-
- * isearch.el (isearch-lazy-highlight-space-regexp): New variable.
- (isearch-lazy-highlight-new-loop): Bind it.
- (isearch-lazy-highlight-search): Use it.
-
- * replace.el (replace-highlight): Bind search-whitespace-regexp to nil.
-
-2007-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-extend-region-wholelines):
- Only return non-nil if the region has really been changed.
- Reported by David Hansen <david.hansen@physik.fu-berlin.de>
-
-2007-02-15 Juanma Barranquero <lekktu@gmail.com>
-
- * play/5x5.el (5x5-crack-xor-mutate): Doc fix.
- (5x5-draw-grid-end, 5x5-make-xor-with-mutation, 5x5-mode, 5x5-crack)
- (5x5-play-solution, 5x5-y-or-n-p): Fix typos in docstrings.
-
-2007-02-14 Juanma Barranquero <lekktu@gmail.com>
-
- * faces.el (color-values): Revert changes to docstring from
- 2007-01-31 and 2000-09-07.
-
- * textmodes/ispell.el (ispell-keep-choices-win, ispell-word)
- (ispell-begin-skip-region-regexp): Fix typos in docstrings.
- (ispell-dictionary-alist, ispell-process-line): Doc fixes.
- (ispell-help): Fix typos in docstring and output message.
-
-2007-02-14 Kim F. Storm <storm@cua.dk>
-
- * progmodes/grep.el (grep-files-aliases): Add tex and texi aliases.
- (lgrep): Add DIR arg to start grep in specific directory, like rgrep.
- (grep): Fix lgrep reference.
-
- * disp-table.el (make-glyph-code, glyph-char, glyph-face): New defuns.
- (standard-display-underline): Use make-glyph-code.
-
- * descr-text.el (describe-char): Use glyph-char and glyph-face.
-
- * international/latin1-disp.el (latin1-display-char):
- Use make-glyph-code.
-
-2007-02-13 Juanma Barranquero <lekktu@gmail.com>
-
- * ehelp.el (with-electric-help, electric-help-exit)
- (electric-help-retain): Doc fixes.
-
- * emacs-lisp/bytecomp.el (byte-compile-dest-file)
- (byte-compile-file): Doc fixes.
-
-2007-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Change all uses of
- mac-set-font-panel-visibility to mac-set-font-panel-visible-p.
- (mac-ae-number): Return integer 0 if coerced result is float 0.0.
- (mac-ae-get-url): Call select-frame-set-input-focus.
- (mac-dnd-handle-drag-n-drop-event): Don't call
- select-frame-set-input-focus.
-
-2007-02-13 Kenichi Handa <handa@m17n.org>
-
- * international/characters.el: Fix documentation of category `a'.
-
-2007-02-11 Dan Nicolaescu <dann@ics.uci.edu>
-
- * progmodes/grep.el (grep): Mention lgrep and rgrep in the docstring.
-
-2007-02-12 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-get-ls-command, tramp-get-file-exists-command)
- (tramp-get-remote-ln): Handle error case.
- Reported by Chris Moore <dooglus@gmail.com>.
-
-2007-02-11 Kim F. Storm <storm@cua.dk>
-
- * bindings.el (ctl-x-map): Remove register compatibility bindings
- C-x /, C-x j, C-x x, and C-x g (deprecated since Emacs 19).
-
-2007-02-11 Richard Stallman <rms@gnu.org>
-
- * loadhist.el (unload-feature): Handle (t . SYMBOL) entries
- in load history.
-
- * emacs-lisp/lisp-mode.el (indent-sexp): Clean up termination
- condition -- don't fail to stop at endpos.
-
-2007-02-11 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda-get-todos)
- (org-agenda-get-timestamps, org-agenda-get-closed)
- (org-agenda-get-deadlines, org-agenda-get-scheduled)
- (org-agenda-get-blocks, org-format-agenda-item)
- (org-agenda-change-all-lines, org-scan-tags): Rename text property
- from `category' to `org-category'.
-
-2007-02-11 Kenichi Handa <handa@m17n.org>
-
- * international/titdic-cnv.el (titdic-convert): Force files be written
- with Unix-like eol format. Read files under CXTERM-DIC by raw-text.
- (miscdic-convert): Force files be written with Unix-like eol format.
-
-2007-02-11 Juanma Barranquero <lekktu@gmail.com>
-
- * files.el (change-major-mode-with-file-name): Fix typo in docstring.
-
- * calculator.el (calculator-prompt): Doc fix.
- (calculator-mode-map): Fix typo in menu entry.
-
-2007-02-10 Jay Belanger <belanger@truman.edu>
-
- * calculator.el (calculator): Do more extensive checking for when
- 3 lines should be used for the calculator.
-
-2007-02-10 Eli Zaretskii <eliz@gnu.org>
-
- * info-look.el (info-lookup-make-completions):
- Bind Info-fontify-maximum-menu-size to nil to speed up lookup of
- index nodes.
-
- * info.el (Info-fontify-maximum-menu-size): Document the effect
- of a nil value.
- (Info-fontify-node): Make sure Info-fontify-maximum-menu-size is
- non-nil before using it as size.
-
-2007-02-09 Chong Yidong <cyd@stupidchicken.com>
-
- * subr.el (insert-for-yank-1): Prevent read-only properties from
- interfering with text property operations.
-
- * image-mode.el (image-mode): Revert 2007-01-30 changes.
-
- * image.el (image-type-auto-detectable): Don't autodetect x[pb]m.
- (image-type-auto-detected-p): Fail if another match is found in
- auto-mode-alist.
-
- * files.el (magic-mode-alist): Call image-mode instead of
- image-mode-maybe for autodetected images.
-
-2007-02-09 Juanma Barranquero <lekktu@gmail.com>
-
- * mail/smtpmail.el (smtpmail-smtp-service, smtpmail-queue-index-file):
- Fix typos in docstrings.
- (smtpmail-local-domain, smtpmail-queue-mail): Doc fixes.
-
-2007-02-09 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/float-sup.el: Remove obsolete comment.
-
-2007-02-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * diff-mode.el (diff-sanity-check-hunk): Fix last fix.
-
-2007-02-08 Karl Fogel <kfogel@red-bean.com>
-
- * simple.el: Revert previous change, at request of RMS:
- (fundamental-mode-hook): Remove.
- (fundamental-mode): Run after-change-major-mode-hooks manually,
- and don't run the now-nonexistent fundamental-mode-hook.
-
-2007-02-08 Karl Fogel <kfogel@red-bean.com>
-
- * simple.el (fundamental-mode-hook): Declare new hook.
- (fundamental-mode): Run the new dedicated hook, and don't run
- after-change-major-mode-hooks manually anymore.
-
-2007-02-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-svn.el (vc-svn-merge-news): Understand the new format with two
- added columns of chars. Remove support for the "no-meta-info" format.
- Prompted by Romain Francoise <romain@orebokech.com>.
-
-2007-02-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-if-arrow): New macro.
- (gdb-mouse-until, gdb-mouse-jump): Use it.
-
-2007-02-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-mouse-until, gdb-mouse-jump): Make them
- work when there is just an assembler buffer (no source buffer).
-
-2007-02-07 Per Cederqvist <ceder@lysator.liu.se> (tiny change)
-
- * diff-mode.el (diff-sanity-check-hunk): Don't reject the hunk
- just because the diff was produced using "-p" (--show-c-function).
-
-2007-02-07 Juanma Barranquero <lekktu@gmail.com>
-
- * faces.el (frame-set-background-mode): Use `color-values' and
- `display-color-p', not `x-color-values' and `x-display-color-p'.
- (face-valid-attribute-values): Use `defined-colors' instead of
- `x-defined-colors'.
-
-2007-02-07 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el: The ps-print commands without face printing should not
- print background color. Reported by Leo <sdl.web@gmail.com>.
- (ps-print-version): New version 6.7.3.
- (ps-begin-job): New arg. Fix ps-default-background and
- ps-default-foreground initialization.
- (ps-face-attributes): Fix doc string.
- (ps-face-background, ps-generate-postscript, ps-generate): Fix code.
-
- * printing.el: Fix ps-print link.
-
-2007-02-06 Chong Yidong <cyd@stupidchicken.com>
-
- * faces.el (face-set-after-frame-default): Compile attributes to
- be set by frame parameters before merging in X resources.
-
-2007-02-06 Juanma Barranquero <lekktu@gmail.com>
-
- * simple.el (blink-matching-paren-dont-ignore-comments):
- (blink-matching-paren-on-screen): Doc fixes.
-
-2007-02-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-frames-mode): Truncate lines in stack buffer.
-
-2007-02-05 Juanma Barranquero <lekktu@gmail.com>
-
- * loadhist.el (unload-feature): Silently ignore `load-history' entries
- of the form `(defface . SYMBOL)', and treat `(autoload . SYMBOL)'
- entries like `defun'. Return nil.
-
-2007-02-05 Kim F. Storm <storm@cua.dk>
-
- * ido.el: Doc fixes.
-
-2007-02-04 David Kastrup <dak@gnu.org>
-
- * play/mpuz.el (mpuz-random-puzzle): Fix potential lockup when
- `mpuz-allow-double-multiplicator' is non-zero, and correct
- calculation of `min'.
-
-2007-02-04 Per Abrahamsen <abraham@dina.kvl.dk>
-
- * wid-edit.el (widget-default-create): Insert new text at the
- :from marker _after_ the marker, not before it.
-
-2007-02-04 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-indent-line): Don't erase ^L when a line
- containing it is re-indented.
-
-2007-02-03 Chong Yidong <cyd@stupidchicken.com>
-
- * net/newsticker.el (newsticker--insert-image): Update docstring,
- and insert the image directly.
- (newsticker--buffer-redraw): Update docstring.
-
- * emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
- Rename from define-global-minor-mode.
-
- * progmodes/cwarn.el (global-cwarn-mode):
- * emacs-lisp/autoload.el (make-autoload):
- * hi-lock.el (global-hi-lock-mode):
- * font-core.el (global-font-lock-mode): All callers changed.
-
-2007-02-03 Eli Zaretskii <eliz@gnu.org>
-
- * textmodes/texnfo-upd.el (texinfo-menu-copy-old-description):
- Don't copy @ignore lines into menu descriptions.
- (texinfo-multi-file-update): Goto the @node line before attempting
- to pluck the node name.
- (texinfo-multiple-files-update): Reverse the optional arguments'
- order, as per the doc string and the `interactive' form.
-
-2007-02-03 Chong Yidong <cyd@stupidchicken.com>
-
- * image-mode.el: Use autoload to avoid overriding disabled setting
- applied in .emacs.
-
-2007-02-03 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-engine.el (c-in-knr-argdecl): Slight correction
- for, e.g. "void (*hdone)();" in a k&r list. (No WS between
- adjacent paren groups).
-
-2007-02-02 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * progmodes/ebnf2ps.el: Doc fixes.
- (ebnf-eps-buffer, ebnf-eps-region, ebnf-syntax-alist): Doc fixes.
-
-2007-02-02 Eli Zaretskii <eliz@gnu.org>
-
- * dired-x.el (dired-do-relsymlink): Add reference to
- dired-do-symlink. Add an autoload cookie.
-
- * dired-aux.el (dired-do-symlink): Add reference to
- dired-do-relsymlink.
-
-2007-02-02 Doug Maxey <dwm@enoyolf.org> (tiny change)
-
- * mouse.el <left-fringe mouse-2, right-fringe mouse-3>:
- <left-fringe mouse-3>: New bindings.
-
-2007-02-02 Ulf Jasper <ulf.jasper@web.de>
-
- * net/newsticker.el (newsticker-version): Changed to "1.10".
- (newsticker--set-customvar): Doc string.
- (newsticker-new-item-face): Doc string.
- (newsticker-mode): Initialize `invisibility-spec' with t.
- (newsticker-mode-map): Added
- `newsticker-mark-all-items-at-point-as-read'.
- (newsticker-menu): Added narrow-to-item and narrow-to-feed.
- (newsticker-w3m-show-inline-images): Do not call
- `w3m-remove-image'.
- (newsticker--buffer-after-w3m-insert-image): New advice for
- w3m-insert-image to cache images.
- (newsticker-next-item-same-feed): New.
- (newsticker-mark-all-items-at-point-as-read-and-redraw): New.
- (newsticker-mark-all-items-of-feed-as-read): New.
- (newsticker-mark-all-items-at-point-as-read): Use new functions.
- (newsticker-mark-item-at-point-as-read): Doc string.
- (newsticker-mark-item-at-point-as-read): Use new functions.
- (newsticker--do-mark-item-at-point-as-read): New, extracted from
- `newsticker-mark-item-at-point-as-read'.
- (newsticker-hide-entry): Use (t) instead of t for invisibility.
- (newsticker--sentinel): Yet another xml-parser workaround.
- (newsticker--decode-iso8601-date): Bugfix for datestrings without
- days.
- (newsticker--buffer-do-insert-text): Fix.
- (newsticker--buffer-insert-enclosure): Fix. length might be missing.
- (newsticker--buffer-make-item-completely-visible):
- `switch-to-buffer' not necessary.
-
-2007-02-02 Eli Zaretskii <eliz@gnu.org>
-
- * progmodes/ebnf2ps.el (ebnf-eps-buffer, ebnf-eps-region)
- (ebnf-syntax-directory, ebnf-syntax-file, ebnf-syntax-region)
- (ebnf-style-database, ebnf-apply-style, ebnf-reset-style)
- (ebnf-push-style, ebnf-pop-style, ebnf-eps-production-list)
- (ebnf-directory, ebnf-file, ebnf-syntax-alist): Doc fixes.
-
-2007-02-02 Kenichi Handa <handa@m17n.org>
-
- * international/quail.el (quail-show-key): Fix an error message.
-
-2007-02-01 Juanma Barranquero <lekktu@gmail.com>
-
- * faces.el (set-face-underline-p, modify-face): Rename arg
- UNDERLINE-P to UNDERLINE (it is not a flag).
-
-2007-02-01 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-speedbar-update): Avoid duplication
- when adding gdb-speedbar-update to gdb-input-queue.
+2007-10-22 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-02-01 Kenichi Handa <handa@m17n.org>
+ * term/AT386.el (terminal-init-AT386): Use input-decode-map.
- * international/quail.el (quail-show-key): Signal an error if the
- current input method is not using Quail.
+ * term/vt200.el (terminal-init-vt200):
+ * term/vt201.el (terminal-init-vt201):
+ * term/vt220.el (terminal-init-vt220):
+ * term/vt240.el (terminal-init-vt240):
+ * term/vt300.el (terminal-init-vt300):
+ * term/vt320.el (terminal-init-vt320):
+ * term/vt400.el (terminal-init-vt400):
+ * term/vt420.el (terminal-init-vt420): Use input-decode-map.
-2007-02-01 J.D. Smith <jdsmith@as.arizona.edu>
+ * term/wyse50.el (wyse50-terminal-map): New var.
+ (terminal-init-wyse50): Use it and input-decode-map.
+ (enable-arrow-keys): Emasculate.
- * progmodes/idlwave.el (idlwave-xml-create-sysvar-alist):
- Trim leading whitespace in sysvar names.
+ * term/tvi970.el (tvi970-terminal-map): New var.
+ (terminal-init-tvi970): Use it and input-decode-map.
+ (tvi970-keypad-numeric): Remove.
+ (tvi970-set-keypad-mode): Use a terminal-parameter rather than var.
-2007-02-01 Juanma Barranquero <lekktu@gmail.com>
+ * term/sun.el (sun-raw-prefix): Fill as part of declaration.
+ (terminal-init-sun): Use it and input-decode-map.
- * faces.el (internal-find-face, internal-get-face): Doc fixes.
+ * term/news.el (terminal-init-news):
+ * term/lk201.el (terminal-init-lk201):
+ * term/iris-ansi.el (terminal-init-iris-ansi): Use input-decode-map.
+
+2007-10-22 Sean O'Rourke <sorourke@cs.ucsd.edu>
+
+ * complete.el (PC-expand-many-files): Remove.
+ (PC-do-completion): Call file-expand-wildcards instead of
+ PC-expand-many-files.
+
+ * net/tramp.el (tramp-handle-expand-many-files): Remove.
+ (PC-expand-many-files): Remove advice.
+
+2007-10-22 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/f90.el: Remove leading "*" from defcustom doc-strings.
+ Add some support for Fortran 2003 syntax:
+ (f90-type-indent): Now also applies to `enum'.
+ (f90-associate-indent): New user option.
+ (f90-keywords-re, f90-keywords-level-3-re, f90-procedures-re):
+ Add some F2003 keywords.
+ (f90-constants-re): New constant.
+ (f90-font-lock-keywords-1): Add `associate' blocks, and `abstract
+ Interface'.
+ (f90-font-lock-keywords-2): Add `enumerator', `generic', `procedure',
+ `class'. Arguments for `type'/`class' may have spaces. Add a new
+ element for functions with specified types. Add `end enum' and
+ `select type'. Add `implicit enumerator' and `procedure'.
+ Add `class default' and `type is', `class is'. Fix `go to' regexp.
+ (f90-font-lock-keywords-3): Add `asynchronous' attribute.
+ (f90-font-lock-keywords-4): Add `f90-constants-re'.
+ (f90-blocks-re): Add `enum' and `associate'.
+ (f90-else-like-re): Add `class is', `type is', and `class default'.
+ (f90-end-type-re): Add `enum'.
+ (f90-end-associate-re, f90-typeis-re): New constants.
+ (f90-end-block-re): Add `enum' and `associate'. Change from
+ optional whitespace to end-of-word, to avoid `enumerator'.
+ (f90-start-block-re): Add `select type', `abstract interface', and
+ `enum'. Avoid `type is', and `type (sometype)'.
+ (f90-mode-abbrev-table): Add `enumerator', `protected', and `volatile'.
+ (f90-mode): Doc fix.
+ (f90-looking-at-select-case): Doc fix. Add `select type'.
+ (f90-looking-at-associate): New function.
+ (f90-looking-at-type-like): Avoid `type is' and `type (sometype)'.
+ Add `enum' and `abstract interface'.
+ (f90-no-block-limit): Add `select type' and `abstract interface'.
+ (f90-get-correct-indent, f90-calculate-indent)
+ (f90-end-of-block, f90-beginning-of-block, f90-next-block)
+ (f90-indent-region, f90-match-end): Handle `associate' blocks.
-2007-01-31 Juanma Barranquero <lekktu@gmail.com>
+2007-10-22 Martin Rudalics <rudalics@gmx.at>
- * ido.el (ido-set-common-completion): Use `let', not `let*'.
+ * progmodes/fortran.el (fortran-mode-map, fortran-window-create):
+ Use window-full-width-p.
-2007-01-31 Romain Francoise <romain@orebokech.com>
+2007-10-22 Dan Nicolaescu <dann@ics.uci.edu>
- * comint.el: Delete extra copy of `comint-copy-old-input' added in
- previous change to this file.
+ * mail/vms-pmail.el (insert-signature): Don't use end-of-buffer.
-2007-01-31 Jason Rumney <jasonr@gnu.org>
+ * tooltip.el: Use featurep 'xemacs.
- * files.el (magic-mode-alist): Use image-mode-maybe rather than
- image-mode.
+ * printing.el: Move variable definitions before use, no code change.
- * image-mode.el (image-mode-maybe): Prevent magic-mode-alist from
- interfering with attempt to set major mode from modified
- auto-mode-alist.
+2007-10-22 Juri Linkov <juri@jurta.org>
-2007-01-31 Juanma Barranquero <lekktu@gmail.com>
+ * simple.el (goto-history-element): Allow minibuffer-default to be
+ a list of default values accessible by typing M-n in the minibuffer.
- * faces.el (color-values): Doc fix.
- (face-differs-from-default-p): Don't check :foreground twice.
+ * dired-x.el (dired-guess-shell-command): Put all guesses to the
+ minibuffer default value list instead of pushing them temporarily
+ to the history list.
-2007-01-31 J.D. Smith <jdsmith@as.arizona.edu>
+2007-10-21 Dan Nicolaescu <dann@ics.uci.edu>
- * comint.el (comint-mode): Prevent non-keyword fontification by default.
+ * hexl.el (hexl-menu): New major mode menu.
-2007-01-31 Kenichi Handa <handa@m17n.org>
+2007-10-21 Stefan Monnier <monnier@iro.umontreal.ca>
- * international/quail.el (quail-store-decode-map-key): Store a
- translated character too.
- (quail-char-equal-p): New function.
- (quail-find-key1): Check character equality by quail-char-equal-p.
- (quail-decode-map-generated): New variable.
- (quail-find-key): Check quail-decode-map-generated and re-generate
- a decode map if necessary.
+ * emacs-lisp/byte-opt.el (byte-optimize-featurep): Fix paren typo.
-2007-01-30 Richard Stallman <rms@gnu.org>
+2007-10-21 Dan Nicolaescu <dann@ics.uci.edu>
- * tutorial.el (tutorial--detailed-help): Make the list of
- changed keys look nicer.
+ * w32-fns.el (w32-quote-process-args):
+ * dos-w32.el (print-region-function, lpr-headers-switches)
+ (ps-print-region-function): Pacify byte-compiler.
+
+ * emulation/edt-mapper.el (function-key-map):
+ (edt-map-key): Make it a function instead of using fset.
+ Inline edt-gnu-map-key and edt-lucid-map-key. Use featurep 'xemacs.
+ (edt-gnu-map-key, edt-lucid-map-key): Remove.
+ (edt-x-emacs-p): Remove.
+ (edt-emacs-variant, edt-window-system, edt-xserver):
+ Use featurep 'xemacs.
+
+ * net/eudc.el: Use (featurep 'xemacs) instead of the string test.
+ Replace eudc-xemacs-p with its definition.
+ (eudc-xemacs-p, eudc-emacs-p, eudc-xemacs-mule-p)
+ (eudc-emacs-mule-p): Remove.
+ (eudc-install-menu, eudc-mode): Replace eudc-emacs-p and
+ eudc-xemacs-p with feature tests.
+
+ * net/eudc-bob.el (eudc-bob-generic-menu, eudc-bob-mail-keymap)
+ (eudc-bob-url-keymap, eudc-bob-sound-keymap)
+ (eudc-bob-generic-keymap, eudc-bob-popup-menu)
+ (eudc-bob-toggle-inline-display):
+ * net/eudc-hotlist.el (eudc-hotlist-emacs-menu):
+ Replace eudc-emacs-p and eudc-xemacs-p with feature tests.
-2007-01-30 Nick Roberts <nickrob@snap.net.nz>
+ * net/eudcb-ph.el (eudc-ph-open-session):
+ Replace eudc-xemacs-mule-p with its former definition.
+
+ * progmodes/octave-mod.el (octave-xemacs-p): Remove.
+ (octave-abbrev-start): Replace octave-xemacs-p with (featurep 'xemacs).
+
+ * progmodes/vera-mode.el (vera-xemacs): Remove.
+ (vera-mode-syntax-table): Replace vera-xemacs with (featurep 'xemacs).
+
+ * progmodes/vhdl-mode.el (vhdl-xemacs): Remove.
+ (vhdl-doc-mode, vhdl-doc-variable, vhdl-compile-init)
+ (vhdl-speedbar-initialize, vhdl-ps-print-init)
+ (vhdl-forward-comment, vhdl-mode-map-init, vhdl-show-messages)
+ (vhdl-emacs-22, vhdl-emacs-21): Replace vhdl-xemacs
+ with (featurep 'xemacs).
+
+ * progmodes/antlr-mode.el (cond-emacs-xemacs-macfn, defunx)
+ (save-buffer-state-x):
+ * obsolete/fast-lock.el (fast-lock-verbose):
+ * emulation/viper-init.el (viper-xemacs-p)
+ (viper-cond-compile-for-xemacs-or-emacs):
+ * emacs-lisp/checkdoc.el (checkdoc-minor-mode-map):
+ * ps-print.el (case-fold-search):
+ * ediff-hook.el (ediff-cond-compile-for-xemacs-or-emacs):
+ * calculator.el (calculator-help): Use featurep 'xemacs.
+
+ * progmodes/prolog.el: Undo previous change.
+ (comint-prompt-regexp, comint-process-echoes): Pacify byte-compiler.
+
+ * progmodes/dcl-mode.el:
+ * play/yow.el:
+ * calendar/todo-mode.el:
+ * calendar/cal-hebrew.el:
+ * vc-hg.el: Undo previous change.
+
+ * vms-patch.el: Likewise.
+ (print-region-function): Pacify byte-compiler.
+
+2007-10-21 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.el (backup-buffer-copy): Call `copy-file' with non-nil
+ preserve-uid-gid.
+
+ * net/ange-ftp.el (ange-ftp-copy-file): Add PRESERVE-UID-GID for
+ compatibility. It is not used, though.
+
+ * net/tramp.el (top): Put load of all tramp-* files into a dolist.
+ Require tramp-cmds.el.
+ (tramp-make-tramp-temp-file): We can get rid of DONT-CREATE.
+ (tramp-handle-file-name-all-completions): Expand DIRECTORY.
+ (tramp-do-copy-or-rename-file-directly): Make more rigid checks.
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-maybe-open-connection): Use `make-temp-name'. This is
+ possible, because we don't need to create the temporary file, but
+ we need a prefix for ssh, which has its own temporary file handling.
+ (tramp-handle-delete-directory): Add "-f" to rmdir.
+ (tramp-handle-dired-recursive-delete-directory): Call "rm -rf".
+ (tramp-handle-insert-file-contents): Don't raise a tramp-error but
+ a signal, in order to give the callee a chance to suppress.
+ (tramp-handle-write-region): Set owner also in case of short
+ track. Don't use compatibility calls for `write-region' anymore.
+ (tramp-clear-passwd): Add parameter VEC. Adapt all callees.
+ (tramp-append-tramp-buffers): Apply `tramp-list-tramp-buffers'.
+
+ * net/tramp-cmds.el: New file.
+
+ * net/tramp-gw.el (tramp-gw-basic-authentication): Apply VEC to
+ `tramp-clear-passwd'.
- * progmodes/gdb-ui.el (gdb-var-delete-1): New function.
- (gdb-var-delete): Use it.
- (gdb-var-update-handler-1): Handle value "invalid" for MI field
- `in_scope'.
+ * net/trampver.el: Update release number.
-2007-01-30 Michael Albinus <michael.albinus@gmx.de>
+2007-10-21 Dan Nicolaescu <dann@ics.uci.edu>
- * files.el (get-free-disk-space): Return nil for remote directories.
+ * progmodes/gud.el (gud-target-name): Move definition before use.
- * net/ange-ftp.el (ange-ftp-ls): In case of wildcards, use "ls"
- instead of "dir".
+ * progmodes/dcl-mode.el: Require imenu at compile time.
-2007-01-30 Chong Yidong <cyd@stupidchicken.com>
+ * progmodes/cc-engine.el (c-maybe-stale-found-type):
+ Pacify byte-compiler.
- * type-break.el (type-break-catch-up-event): New function.
- (type-break-demo-hanoi, type-break-demo-life)
- (type-break-demo-boring): Use it.
+ * obsolete/fast-lock.el: Use featurep test instead of string-match.
- * image-mode.el (image-mode): Don't automatically view as image.
- (image-toggle-display): Add `disabled' property.
+ * eshell/esh-mode.el (eshell-handle-ansi-color):
+ Require ansi-color at compile time too.
-2007-01-29 Juanma Barranquero <lekktu@gmail.com>
+ * eshell/em-unix.el (eshell/info): Require info at compile time too.
- * isearchb.el (isearchb-iswitchb):
- * ps-print.el (ps-build-face-reference):
- * emacs-lisp/shadow.el (list-load-path-shadows):
- * eshell/esh-cmd.el (eshell-rewrite-for-command):
- * international/mule.el (find-auto-coding):
- * mail/supercite.el (sc-attrib-selection-list):
- * progmodes/cc-defs.el (c-emacs-features):
- * progmodes/cc-vars.el (c-offsets-alist):
- * progmodes/flymake.el
- (flymake-init-create-temp-source-and-master-buffer-copy):
- Fix typos in docstrings (some suggested by Chris Moore).
+ * w32-fns.el: Require w32-vars.
- * progmodes/vhdl-mode.el (vhdl-components-package-name)
- (vhdl-get-library-unit, vhdl-corresponding-begin)
- (vhdl-skip-case-alternative, vhdl-backward-skip-label)
- (vhdl-align-region-2, vhdl-electric-dash, vhdl-case-word)
- (vhdl-hooked-abbrev, vhdl-hs-forward-sexp-func)
- (vhdl-font-lock-match-item): Fix typos in docstrings.
- (vhdl-get-library-unit, vhdl-get-block-state, vhdl-sort-alist)
- (vhdl-set-offset, vhdl-fix-case-region-1, vhdl-scan-directory-contents)
- (vhdl-speedbar-insert-project-hierarchy):
- Improve argument/docstring consistency.
+ * diff-mode.el (diff-refine-hunk): Require smerge-mode at compile
+ time too.
-2007-01-29 Kenichi Handa <handa@m17n.org>
+2007-10-21 Stefan Monnier <monnier@iro.umontreal.ca>
- * international/titdic-cnv.el (py-converter): Fix previous change.
+ * double.el ([ignore]): Use `ignore'.
+ (double-setup): Inline into double-mode.
+ (double-mode): Use define-minor-mode.
-2007-01-29 Chong Yidong <cyd@stupidchicken.com>
+2007-10-21 Dan Nicolaescu <dann@ics.uci.edu>
- * jka-compr.el (jka-compr-partial-uncompress)
- (jka-compr-call-process): Rebind default-directory if it is
- invalid. Suggested by Chris Moore.
+ * textmodes/reftex.el: Move require easymenu before first use.
+ (reftex-info): Require info at compile too.
- * comint.el (comint-insert-input): Handle situation where the
- selected buffer is not the clicked buffer.
+ * textmodes/org-publish.el (org-publish-org-to-html)
+ (org-publish-org-to): Require org at compile time too.
+ (org-publish-attachment): Require at compile time too.
-2007-01-29 Kenichi Handa <handa@m17n.org>
+ * term/tty-colors.el (w32-tty-standard-colors):
+ Pacify byte-compiler.
- * international/ja-dic-cnv.el (skkdic-convert):
- Add byte-compile-disable-print-circle:t at the head.
+ * term/pc-win.el (frame-creation-function-alist): Add to this
+ instead of setting frame-creation-function.
- * international/titdic-cnv.el (tit-process-header):
- Add byte-compile-disable-print-circle:t at the head.
- (miscdic-convert): Likewise.
- (py-converter): Skip the header comments.
+ * play/blackbox.el (bb-up, bb-down): Use forward-line.
- * emacs-lisp/bytecomp.el (byte-compile-disable-print-circle):
- New variable.
- (byte-compile-output-file-form): Bing print-circle to nil if
- byte-compile-output-file-form is not nil.
- (byte-compile-output-docform): Likewise.
+ * net/rcirc.el (rcirc-markup-text-functions): Move definition earlier.
-2007-01-28 Kim F. Storm <storm@cua.dk>
+ * calendar/todo-mode.el: Require calendar at compile time.
- * emulation/cua-base.el (cua-global-keymap, cua--region-keymap):
- Declare earlier to avoid byte compiler warnings.
+ * calendar/cal-hebrew.el: Require holidays at compile time.
-2007-01-28 Markus Triska <markus.triska@gmx.at>
+ * w32-vars.el: Provide w32-vars.
- * speedbar.el (speedbar-make-specialized-keymap): Doc fix.
+ * term/w32-win.el: Require w32-vars.
+ (w32-color-map): Pacify byte-compiler.
-2007-01-28 Chong Yidong <cyd@stupidchicken.com>
+ * loadup.el: Load w32-vars before term/w32-win.
- * play/gamegrid.el (gamegrid-kill-timer): Cancel timer directly.
- (gamegrid-add-score-with-update-game-score-1): Allow local quits
- when calling update-game-score program. Remove unnecessary
- save-excursion.
+2007-10-20 Juri Linkov <juri@jurta.org>
- * play/tetris.el (tetris-new-shape): Stop drawing if game is over.
+ * textmodes/fill.el (fill-paragraph): When the region is active,
+ don't try other `or' branches regardless of the value returned by
+ fill-region; just return t.
-2007-01-28 Nick Roberts <nickrob@snap.net.nz>
+2007-10-20 Eric S. Raymond <esr@snark.thyrsus.com>
- * progmodes/gdb-ui.el (gdb-breakpoint-regexp): Declare earlier to
- avoid compiler warning.
- (gdb-var-update-handler-1): Consider that the MI field `in_scope'
- might have values other than "true" or "false".
+ * vc.el (vc-do-command): Condition out a misleading message when
+ running asynchronously.
+ (vc-deduce-fileset): New argument enables using an unregistered
+ visited file as a singleton fileset if nothing else is available.
+ (vc-next-action): Restore file-registering behavior.
-2007-01-28 Richard Stallman <rms@gnu.org>
+2007-10-20 Jay Belanger <jay.p.belanger@gmail.com>
- * textmodes/fill.el (fill-paragraph-function): Doc fix.
- (fill-paragraph): Bind fill-paragraph-function to t to avoid recursion.
+ * calc/README: Add recent news.
- * emacs-lisp/pp.el (pp-eval-last-sexp): Don't eval here.
+2007-10-20 Dan Nicolaescu <dann@ics.uci.edu>
- * image.el (image-type-header-regexps): Make GIF regex more specific.
+ * term/x-win.el (x-gtk-stock-map, icon-map-list)
+ (x-gtk-map-stock): Delete duplicated definitions from merge.
- * tutorial.el (tutorial--default-keys): Check M-DEL, not `M-backspace'.
- Don't check `backspace'.
- (tutorial--find-changed-keys): Look up bindings in a temp buffer
- in Fundamental mode.
+ * progmodes/compile.el (compilation-skip-to-next-location)
+ (compilation-skip-threshold, compilation-skip-visited):
+ Move definitions earlier.
- * startup.el (fancy-splash-text, normal-splash-screen):
- Mention C-g.
+ * play/decipher.el (decipher-keypress):
+ * play/zone.el (zone-fall-through-ws):
+ * play/landmark.el (lm-move-down, lm-move-up):
+ * play/handwrite.el (handwrite):
+ * mail/mspools.el (mspools-visit-spool):
+ * wdired.el (wdired-next-line, wdired-previous-line):
+ * tar-mode.el (tar-subfile-save-buffer):
+ * scroll-lock.el (scroll-lock-next-line)
+ (scroll-lock-previous-line):
+ * image-dired.el (image-dired-next-line)
+ (image-dired-previous-line):
+ * ediff-help.el (ediff-help-message-line-length):
+ Use forward-line.
- * simple.el (eval-expression): Don't use eval-last-sexp-print-value
- when inserting in buffer.
+ * smerge-mode.el (smerge-auto-refine):
+ * diff-mode.el (diff-auto-refine): Add :group.
- * vc-arch.el (vc-arch-file-id): Move with-current-buffer
- inside the if.
+ * play/yow.el: Require doctor at compile time.
-2007-01-27 Richard Stallman <rms@gnu.org>
+ * vmsproc.el: Provide vmsproc.
+ (command-send-input): Use forward-line.
- * obsolete/awk-mode.el (awk-font-lock-keywords): Add "do".
+ * vms-patch.el: Require ps-print and vmsproc at compile time.
-2007-01-27 Guanpeng Xu <herberteuler@hotmail.com>
+ * vc-mtn.el (log-view-message-re, log-view-file-re)
+ (log-view-font-lock-keywords): Pacify byte-compiler.
- * add-log.el (add-log-current-defun): Skip the semicolon ``;'' for
- enum/union/struct/class definition.
- Revert change to call `forward-sexp' multiple times.
+ * vc-hg.el: Require log-view at compile time.
-2007-01-27 Chong Yidong <cyd@stupidchicken.com>
+2007-10-20 Eric S. Raymond <esr@snark.thyrsus.com>
- * files.el (hack-local-variables-confirm): Don't keep trying to
- read an event from an empty kbd macro.
+ * log-view.el (log-view-diff): Adapt log-view-diff for new VC API.
-2007-01-27 Eli Zaretskii <eliz@gnu.org>
+2007-10-20 Glenn Morris <rgm@gnu.org>
- * server.el (server-start): Mention LEAVE-DEAD arg in the doc string.
+ * progmodes/f90.el (f90-font-lock-keywords-2)
+ (f90-looking-at-type-like): Fix regexp typos.
-2007-01-27 Ben North <ben@redfrontdoor.org>
+2007-10-19 Juanma Barranquero <lekktu@gmail.com>
- * outline.el (outline-promote, outline-demote): Doc fix. Rename
- the arg CHILDREN -> WHICH.
+ * bs.el (bs--track-window-changes): Don't refresh the whole list.
+ (bs-mode): Set mode-class property to special.
-2007-01-27 Michael Albinus <michael.albinus@gmx.de>
+2007-10-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Set
- default-directory to a sane value when calling start-process.
+ * diff-mode.el (diff-auto-refine): New var.
+ (diff-hunk): Use it.
+ (diff-ignore-whitespace-hunk): Rename diff-refine-ignore-spaces-hunk.
+ (diff-refine-change): Rename from diff-fine-change. Change it.
+ (diff-refine-preproc): Rename from diff-fine-highlight-preproc.
+ (diff-refine-hunk): Rename from diff-fine-highlight.
-2007-01-27 Eli Zaretskii <eliz@gnu.org>
+2007-10-20 John Paul Wallington <jpw@pobox.com>
- * ls-lisp.el (ls-lisp-use-localized-time-format): New defcustom.
- (ls-lisp-format-time-list): Doc fix. Mention
- ls-lisp-use-localized-time-format.
- (ls-lisp-format-time): Use ls-lisp-format-time-list if
- ls-lisp-use-localized-time-format is non-nil, even if a valid
- locale is defined.
+ * help-fns.el (describe-variable-custom-version-info): New function
+ to return variable's version or package version note.
+ (describe-variable): Use it, display result.
-2007-01-27 Juanma Barranquero <lekktu@gmail.com>
+2007-10-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * jka-compr.el (jka-compr-shell): Doc fix.
+ * smerge-mode.el (smerge-auto-refine): New var.
+ (smerge-next, smerge-prev): Use it.
+ (smerge-batch-resolve): Ad-hoc trick for Arch's .rej files.
- * jka-cmpr-hook.el (jka-compr-compression-info-list): Doc fix.
+ * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation):
+ Add `body' arg. Cleanup the check-narrow-maybe/re-narrow-maybe mess.
+
+ * vc-bzr.el (vc-bzr-diff-tree):
+ * vc-git.el (vc-git-diff-tree):
+ * vc-hg.el (vc-hg-diff-tree):
+ * vc-mcvs.el (vc-mcvs-diff-tree):
+ * vc-mtn.el (vc-mtn-diff-tree):
+ * vc-svn.el (vc-svn-diff-tree): Remove.
+
+ * vc-mtn.el (vc-mtn-revision-completion-table):
+ * vc-cvs.el (vc-cvs-revision-completion-table):
+ * vc-arch.el (vc-arch-revision-completion-table):
+ * vc-hg.el (vc-hg-revision-completion-table, vc-hg-revision-table):
+ * vc-git.el (vc-git-revision-completion-table, vc-git-revision-table):
+ Make it work when the arg is a list of files.
+
+2007-10-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el: Remove `diff-tree' operation, now subsumed by `diff'.
+ Also `revision-completion-table' now takes a list of files.
+ (vc-deduce-fileset): Remove unused var `regexp'.
+ Only obey allow-directory-wildcard in dired buffers.
+ (vc-default-diff-tree): Remove.
+ (vc-diff-added-files): New var.
+ (vc-diff-internal): Use it. Remove arg `backend'. Update callers.
+ (vc-version-diff): Revert from `vc-history-diff' to the original name.
+ Remove the `backend' arg.
+ (vc-contains-version-controlled-file): Remove.
+ (vc-diff): Bring it closer to the version in Emacs-22.
+ (vc-revert): Fix typo in let-binding.
+ (vc-default-unregister): Remove.
+ (vc-dired-buffers-for-dir): Remove N^2 behavior.
+
+2007-10-19 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * textmodes/two-column.el (2C-split, 2C-merge):
+ * textmodes/bib-mode.el (bib-find-key, mark-bib):
+ * progmodes/idlw-shell.el (idlwave-shell-move-or-history):
+ * progmodes/etags.el (find-tag-in-order, etags-tags-apropos)
+ * progmodes/ada-xref.el (ada-get-all-references):
+ * obsolete/mlsupport.el (ml-next-line, ml-previous-line):
+ * emulation/vi.el (vi-previous-line-first-nonwhite)
+ (vi-effective-range, vi-put-before):
+ * emulation/edt.el (edt-next-line, edt-previous-line)
+ (edt-paragraph-forward): Use forward-line.
-2007-01-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+ * progmodes/etags.el (tags-apropos): Require apropos at compile
+ time too.
- * ps-print.ps: Fix background height.
- (ps-print-version): New version 6.7.2.
+ * progmodes/prolog.el: Require comint when compiling.
+ (inferior-prolog-flavor): Move defvar before use.
-2007-01-26 Eli Zaretskii <eliz@gnu.org>
+2007-10-19 Richard Stallman <rms@gnu.org>
- * makefile.w32-in (finder-data, custom-deps): Depend on
- $(lisp)/loaddefs.el.
+ * font-core.el (turn-on-font-lock-if-desired):
+ Rename from `turn-on-font-lock-if-enabled'.
+ Fully obey `font-lock-global-modes'.
-2007-01-24 Dan Nicolaescu <dann@ics.uci.edu>
+2007-10-19 Stefan Monnier <monnier@iro.umontreal.ca>
- * Makefile.in (custom-deps, finder-data): Add dependency to loaddefs.el.
+ * diff-mode.el (diff-fine-highlight-preproc): Stick to minimal changes
+ which will not affect the behavior of things like forward-word.
+ (diff-fine-highlight): Preserve point.
-2007-01-24 Miles Bader <miles@gnu.org>
+ * doc-view.el (doc-view-mode-map): Use remapping.
+ Don't rebind C-v, M-v to their default value.
+ Don't bind mouse-4 and mouse-5: it's mwheel.el's job.
- * emacs-lisp/bytecomp.el (byte-compile-output-file-form)
- (byte-compile-output-docform): Bind `print-circle' to t.
+ * smerge-mode.el: Add word-granularity refinement.
+ (smerge-refine-forward-function, smerge-refine-ignore-whitespace)
+ (smerge-refine-weight-hack): New vars.
+ (smerge-refine-forward): New fun.
+ (smerge-refine-chopup-region, smerge-refine-highlight-change): Use them.
+ (smerge-refine-subst): Use them as well. Preserve point.
-2007-01-24 Kenichi Handa <handa@m17n.org>
+2007-10-19 Juanma Barranquero <lekktu@gmail.com>
- * international/ja-dic-cnv.el (skkdic-convert): Insert a related
- file name of the original SKK dictionary file.
+ * follow.el (follow-unload-function): New function.
-2007-01-24 Kim F. Storm <storm@cua.dk>
+ * loadhist.el (unload-function-features-list):
+ Rename from `unload-hook-features-list'.
+ (unload-hook-features-list): Add as obsolete alias.
+ (unload-feature): Use `unload-function-features-list'
+ and new FEATURE-unload-function.
- * ido.el (ido-initial-position): New variable.
- (ido-read-internal): Set it if default item is specified.
- (ido-minibuffer-setup): Position cursor accordingly if set.
- (ido-edit-input): C-e moves to end of input if not already there.
- (ido-magic-backward-char): C-b does like M-b if prev char is /.
- Don't switch to buffer mode if repeating C-b at start of input.
- (ido-toggle-ignore): C-a only toggles ignore at start or end of
- input; else it moves to start of input.
- (ido-kill-buffer-at-head, ido-delete-file-at-head): If cursor is
- not at end of input, delete rest of input, rather than normal op.
+2007-10-19 Glenn Morris <rgm@gnu.org>
-2007-01-23 Michael Kifer <kifer@cs.stonybrook.edu>
+ * bindings.el (mouse-minor-mode-menu)
+ (minor-mode-menu-from-indicator): Move to mouse.el.
+ * mouse.el (mouse-minor-mode-menu, minor-mode-menu-from-indicator):
+ Move here from bindings.el.
- * emulation/viper-keym.el (viper-insert-basic-map):
- Delete binding for S-TAB.
+2007-10-19 Richard Stallman <rms@gnu.org>
- * ediff-util.el (ediff-clone-buffer-for-region-comparison): Change text
- of message. Activate mark.
- (ediff-activate-mark): Set transient-mark-mode to t.
+ * help-fns.el (describe-function-1): Don't use the advice origname
+ if it has no function definition.
- * ediff.el (ediff-regions-wordwise, ediff-regions-linewise): Doc fix.
+2007-10-18 Johan Bockg,Ae(Brd <bojohan@gnu.org>
-2007-01-23 Martin Rudalics <rudalics@gmx.at>
+ * net/tramp.el (tramp-rfn-eshadow-update-overlay): Save excursion.
+ Use `save-restriction' rather than `widen'.
- * help-fns.el (describe-variable): Don't suppress display of
- buffer local value when the value is "large".
+2007-10-18 Richard Stallman <rms@gnu.org>
-2007-01-22 Kim F. Storm <storm@cua.dk>
+ * time.el (display-time-world-time-format): Display day # not month #.
- * ido.el (ido-active): Add XEmacs test from ido-minibuffer-setup.
- (ido-initiate-auto-merge, ido-exhibit, ido-minibuffer-setup)
- (ido-tidy): Use ido-active.
+2007-10-18 Reiner Steib <Reiner.Steib@gmx.de>
-2007-01-22 Chris Moore <christopher.ian.moore@gmail.com>
+ * files.el (auto-mode-alist): Don't use doc-view for PS and EPS.
- * hexl.el (hexl-mode-exit): Add missing quote.
+ * doc-view.el: Remove version keyword.
+ (doc-view-ghostscript-program, doc-view-dvipdfm-program)
+ (doc-view-ps2pdf-program): Use executable-find. Simplify custom type.
+ (doc-view-ghostscript-options): Improve custom type.
+ (doc-view-cache-directory, doc-view-conversion-buffer)
+ (doc-view-conversion-refresh-interval): Simplify custom type.
-2007-01-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-10-18 Tassilo Horn <tassilo@member.fsf.org>
- * term/mac-win.el (mac-keyboard-modifier-mask-alist): New constant.
- (mac-ae-keyboard-modifiers): New function.
- (mac-handle-toolbar-switch-mode): Use it.
- (mac-dnd-handle-drag-n-drop-event): Likewise. Set action to `copy'
- if keyboard modifiers on drop contain option key.
- (mac-dnd-drop-data): Add optional argument `action'.
- (special-event-map): Remove binding for M-drag-n-drop.
+ * doc-view.el (doc-view-dvi->pdf-sentinel, doc-view-dvi->pdf)
+ (doc-view-pdf/ps->png-sentinel, doc-view-pdf/ps->png)
+ (doc-view-pdf->txt-sentinel, doc-view-pdf->txt)
+ (doc-view-ps->pdf-sentinel, doc-view-ps->pdf):
+ Remove superfluous messages.
+ (doc-view-mode-map): Use the image-mode scrolling commands.
+ Don't rebind C-x k.
-2007-01-21 Guanpeng Xu <herberteuler@hotmail.com>
+2007-10-18 Reiner Steib <Reiner.Steib@gmx.de>
- * add-log.el (add-log-current-defun): Use CC Mode functions to
- find the beginning and end of a defun.
+ * doc-view.el (doc-view-ghostscript-options, doc-view-ps->pdf):
+ Add comment about "-dSAFER".
-2007-01-21 Nick Roberts <nickrob@snap.net.nz>
+2007-10-18 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/gdb-ui.el (gdb-var-create-regexp)
- (gdb-var-create-handler): Handle value field in GDB output of
- -var-create.
- (gdb-max-frames): New variable.
- (gdb-stack-buffer, gdb-frames-select): Use it.
- (gdb-info-stack-custom): Help user customize gdb-max-frames,
- if necessary.
- (gdb-get-frame-number): Simplify.
+ * term/xterm.el: Don't require xt-mouse.
+ (terminal-init-xterm): Run terminal-init-xterm-hook rather than
+ calling turn-on-xterm-mouse-tracking-on-terminal directly.
-2007-01-21 Glenn Morris <rgm@gnu.org>
+ * xt-mouse.el: Don't change the global function-key-map anny more.
+ (xterm-mouse-mode): Use terminal-init-xterm-hook.
+ Don't use after-make-frame-functions now that term/xterm.el calls
+ us directly.
+ (turn-on-xterm-mouse-tracking, turn-off-xterm-mouse-tracking):
+ Use turn-*-xterm-mouse-tracking-on-terminal. Only once per terminal.
+ (turn-on-xterm-mouse-tracking-on-terminal): Make param optional.
+ Setup input-decode-map and remember that xterm-mouse-mode was
+ enabled in this terminal.
+ (turn-off-xterm-mouse-tracking-on-terminal): Only disable on those
+ terminals where it has been enabled.
- * net/tramp.el (tramp-perl-encode, tramp-perl-decode):
- Update copyrights.
+ * faces.el (tty-create-frame-with-faces): Make sure not only
+ tty-run-terminal-initialization but also set-locale-environment
+ are run only once per terminal.
+ (tty-run-terminal-initialization): Don't check if the terminal was
+ already initted.
-2007-01-21 Alan Mackenzie <acm@muc.de>
+ * international/encoded-kb.el (encoded-kbd-setup-display): Be careful
+ not to remove keymaps that just happen to inherit from one of ours.
+ When setting up our keymap, make sure it won't be accidentally
+ modified by someone else.
- * progmodes/cc-cmds.el (c-where-wrt-brace-construct): Correct the
- handling of K&R stuff.
+2007-10-18 Thien-Thi Nguyen <ttn@gnuvola.org>
-2007-01-21 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+ * textmodes/artist.el (artist-previous-line, artist-next-line):
+ * dired.el (dired-next-line, dired-previous-line):
+ * progmodes/delphi.el (delphi-newline):
+ * textmodes/org.el (org-columns-eval):
+ Use forward-line.
- * textmodes/bibtex.el (bibtex-files): Fix customization type.
+ * emerge.el (emerge-setup): Use insert-buffer-substring.
+ (emerge-prepare-error-list, emerge-setup-with-ancestor): Likewise.
-2007-01-21 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+2007-10-18 Juanma Barranquero <lekktu@gmail.com>
- * ps-print.el: Handle frame parameters (background and/or foreground
- colors) changing dynamically. Reported by Leo <sdl.web@gmail.com>.
- (ps-print-version): New version 6.7.1.
- (ps-x-frame-property, ps-e-frame-parameter): New aliases.
- (ps-frame-parameter): New fun.
- (ps-default-fg, ps-default-bg): New default value ('frame-parameter).
- Fix doc and customization.
- (ps-begin-job): Get frame parameters (background and/or foreground
- colors).
- (ps-do-despool): Ensure ps-printer-name has a valid value.
+ * textmodes/fill.el (fill-individual-paragraphs): Doc fix.
+ (adaptive-fill-function): Doc fix. Remove * from docstring.
-2007-01-21 Nick Roberts <nickrob@snap.net.nz>
+2007-10-18 Tom Horsley <tom.horsley@att.net>
- * progmodes/gdb-ui.el (gdb-debug-log): Rename from gdb-debug-ring.
- (gdb-debug-log-max): Rename from gdb-debug-ring-max.
- (gud-gdba-marker-filter): Make a value of nil for gdb-debug-ring-max
- mean unlimited.
+ * simple.el (interprogram-paste-function): Doc fix.
+ (current-kill): Accept list of strings as well
+ as single string from `interprogram-paste-function'.
-2007-01-20 Alan Mackenzie <acm@muc.de>
+2007-10-18 Glenn Morris <rgm@gnu.org>
- * progmodes/cc-engine.el (c-in-knr-argdecl): Reformulate to do
- much more rigorous analysis of putative K&R regions.
+ * ibuf-ext.el (ibuffer-saved-filter-groups): Doc fix.
-2007-01-20 Alan Mackenzie <acm@muc.de>
+2007-10-18 Drew Adams <drew.adams@oracle.com>
- * progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward):
+ * bindings.el (mode-line-minor-mode-keymap):
+ Add mouse-minor-mode-menu on mouse-1.
+ (mode-line-modes): Add mouse-1 to help-echo text.
+ (mouse-minor-mode-menu, minor-mode-menu-from-indicator):
New functions.
+ (mode-line-minor-mode-help): Doc fix.
-2007-01-20 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-align.el, progmodes/cc-cmds.el,
- * progmodes/cc-defs.el, progmodes/cc-engine.el,
- * progmodes/cc-langs.el, progmodes/cc-styles.el,
- * progmodes/cc-vars.el: Add my name.
-
-2007-01-20 Chong Yidong <cyd@stupidchicken.com>
-
- * files.el (find-alternate-file): Revert query message to Emacs 21
- version.
-
-2007-01-20 Eric Hanchrow <offby1@blarg.net> (tiny change)
-
- * progmodes/cperl-mode.el (cperl-electric-keywords): Document in
- the doc string how to use personal abbrevs without electric
- keywords.
-
-2007-01-20 Alin C. Soare <alinsoar@voila.fr> (tiny change)
-
- * emacs-lisp/lisp-mode.el (last-sexp-toggle-display):
- Fixed cursor position when toggle abbreviated display.
-
-2007-01-20 Nick Roberts <nickrob@snap.net.nz>
-
- * t-mouse.el: Update copyright following assignment by
- Alessandro Rubini.
-
-2007-01-20 Chong Yidong <cyd@stupidchicken.com>
-
- * type-break.el (type-break-demo-hanoi, type-break-demo-life)
- (type-break-demo-boring): Call read-event instead of read-char.
-
-2007-01-19 Daniel Pfeiffer <occitan@esperanto.org> (tiny change)
-
- * progmodes/compile.el: Add handling for makepplog.
-
-2007-01-19 Reiner Steib <Reiner.Steib@gmx.de>
-
- * textmodes/ispell.el (ispell-change-dictionary): Ensure that
- aspell dictionaries are initialized when called non-interactively.
-
-2007-01-19 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/compile.el (compilation-loop): New arg limit.
- Handle case where the first error is at point-min.
- (compilation-next-error): New arg to compilation-loop call.
-
-2007-01-18 Bruno Haible <bruno@clisp.org> (tiny change)
-
- * info.el (Info-default-dirs): Change default info dir to
- share/info.
-
- * paths.el (Info-default-directory-list): Ditto.
-
-2007-01-18 Chris Moore <christopher.ian.moore@gmail.com>
-
- * hexl.el (hexl-before-revert-hook): New function.
- (hexl-mode): Use it.
- (hexl-after-revert-hook): Just call hexl-mode.
- (hexl-mode-exit): Remove before-revert-hook.
-
-2007-01-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * isearch.el (isearch-no-upper-case-p): Look for [:upper:] as well.
-
-2007-01-16 Martin Rudalics <rudalics@gmx.at>
-
- * textmodes/ispell.el (ispell-dictionary-alist-3): Replace "---"
- by "-" in francais7 otherchars entry.
- (ispell-dictionary-alist-5): Replace "." by "[.]" for polish
- otherchars entry.
-
-2007-01-15 Karl Fogel <kfogel@red-bean.com>
-
- * bookmark.el (bookmark-buffer-file-name): Abbreviate the bookmark
- path. Rewrite function in `cond' style for readability.
-
- Suggested by: Stephen Eglen <S.J.Eglen{_AT_}damtp.cam.ac.uk>.
- (The path shortening, that is, not the rearrarangement.)
-
-2007-01-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-ae-quit-application): New function.
- (mac-apple-event-map): Bind "quit application" Apple event to it.
-
-2007-01-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-svn.el (vc-svn-parse-status): Trust the filename argument more
- than the program's output.
-
-2007-01-14 Juanma Barranquero <lekktu@gmail.com>
-
- * kmacro.el (kmacro-insert-counter, kmacro-set-counter)
- (kmacro-start-macro-or-insert-counter)
- (kmacro-step-edit-prefix-commands): Fix typos in docstrings.
- (kmacro-call-ring-2nd, kmacro-call-ring-2nd-repeat): Doc fixes.
-
- * longlines.el (longlines-show-hard-newlines):
- * ruler-mode.el (ruler-mode-ruler):
- * emulation/keypad.el (keypad-setup):
- * progmodes/antlr-mode.el (antlr-indent-at-bol-alist):
- Fix typo in docstring.
-
-2007-01-13 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el (tumme-cmd-rotate-original-options): Add -outfile option.
- Remove redirect character ">".
-
-2007-01-13 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (perform-replace): Remove leftover code.
-
-2007-01-12 Richard Stallman <rms@gnu.org>
-
- * replace.el (perform-replace): Don't clear NODENT when computing
- the replacement string.
-
-2007-01-11 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-handle-file-local-copy):
- Set `enable-multibyte-characters' to nil. Reported by Chris Moore
- <christopher.ian.moore@gmail.com>.
-
-2007-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * diff-mode.el (diff-sanity-check-context-hunk-half)
- (diff-sanity-check-hunk): New functions.
- (diff-find-source-location): Use'em to check the hunks are well-formed.
-
- * hexl.el (hexlify-buffer, dehexlify-buffer): Don't complain and don't
- activate undo when undo is not active.
- Reported by Chris Moore <christopher.ian.moore@gmail.com>.
-
-2007-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * ffap.el (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
- (ffap-newsgroup-p, ffap-alist, ffap-string-at-point-mode-alist)
- (ffap-url-at-point): Use char-classes rather than "a-z".
-
-2007-01-10 Juanma Barranquero <lekktu@gmail.com>
-
- * ediff-init.el (ediff-autostore-merges):
- * textmodes/fill.el (fill-region): Doc fix.
-
-2007-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * server.el (server-ensure-safe-dir): UIDs may be floats.
-
-2007-01-10 Richard Stallman <rms@gnu.org>
-
- * battery.el (battery-linux-proc-acpi): Use ignore-errors
- around calls to directory-files.
-
- * subr.el (momentary-string-display): Use save-excursion.
-
- * emacs-lisp/pp.el (pp-eval-expression): Once again eval the
- argument, but read it as `X' does.
+2007-10-17 Juri Linkov <juri@jurta.org>
-2007-01-09 Juri Linkov <juri@jurta.org>
+ * textmodes/fill.el (fill-paragraph-or-region): Remove function
+ at the request of RMS.
+ (fill-paragraph): Change `arg' to optional `justify'. Add interactive
+ arg `region'. Fix docstring. At the first `or' branch add call to
+ `fill-region' if it the region is active in transient-mark-mode.
- * info.el (Info-fontify-node): Don't hide node names of index entries.
+ * bindings.el (esc-map): Bind M-q to fill-paragraph
+ instead of fill-paragraph-or-region.
- * faces.el (momentary): Change :group to basic-faces where all
- basic faces belong to. Add :version.
+ * tutorial.el (tutorial--default-keys): Replace fill-paragraph-or-region
+ with fill-paragraph.
-2007-01-09 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * tutorial.el (tutorial--display-changes): Show M-x sequence if no
- keybinding is found.
- (tutorial--find-changed-keys): Never treat null keybinding as a
- remapping.
-
-2007-01-09 Martin Rudalics <rudalics@gmx.at>
-
- * wdired.el (wdired-xcase-word): Skip non-word read-only characters.
-
-2007-01-09 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el
- (select-safe-coding-system-interactively): Fix message.
-
-2007-01-09 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-process-one-action): Remove `with-timeout'.
- (tramp-process-actions): Add optional parameter TIMEOUT.
- (tramp-open-connection-telnet, tramp-open-connection-rsh)
- (tramp-open-connection-su): Add timeout of 60".
-
-2007-01-09 Richard Stallman <rms@gnu.org>
-
- * progmodes/compile.el (compile): Doc fix.
-
-2007-01-09 Markus Triska <markus.triska@gmx.at>
+ * textmodes/ispell.el (ispell-word): Add interactive arg `region'.
+ Fix docstring.
- * tumme.el (tumme-display-thumb): Doc fix.
+ * indent.el (indent-for-tab-command): Change interactive spec from
+ "P" to "p". Add check for interactive arg before indenting the
+ active region.
-2007-01-08 Juanma Barranquero <lekktu@gmail.com>
+ * files.el (auto-mode-alist): Add \\. before PDF/PS/DVI extensions.
+ Regroup.
- * battery.el (battery-search-for-one-match-in-files):
- * bindings.el (mode-line-minor-mode-help):
- * x-dnd.el (x-dnd-types-alist):
- * calendar/icalendar.el (icalendar-import-buffer):
- * term/mac-win.el (mac-dnd-types-alist): Fix typo in docstring.
+2007-10-17 Juanma Barranquero <lekktu@gmail.com>
- * progmodes/vhdl-mode.el (vhdl-save-caches): Fix typo in error message.
+ * emacs-lisp/find-func.el: Don't require loadhist.
-2007-01-07 Chris Moore <christopher.ian.moore@gmail.com>
+ * loadhist.el (feature-symbols, file-provides, file-requires)
+ (file-set-intersect, file-dependents): Simplify.
+ (unload-feature-special-hooks): Update list of special hooks.
- * replace.el (replace-regexp): Fix typo in docstring.
+2007-10-17 Tassilo Horn <tassilo@member.fsf.org>
-2007-01-07 Alan Mackenzie <acm@muc.de>
+ * bindings.el (completion-ignored-extensions): Remove pdf and dvi
+ extensions since they can be viewed with doc-view.
- * progmodes/cc-langs.el (c-operators, c-filter-ops):
- Amend doc-string and comments.
+ * files.el (auto-mode-alist): Make doc-view-mode the default mode
+ for pdf, ps and dvi files.
-2007-01-06 Eli Zaretskii <eliz@gnu.org>
+ * doc-view.el: Make doc-view-mode the standard mode for viewing
+ pdf, [e]ps and dvi files and add binding C-c C-c to toggle between
+ text and image display. Add binding C-c C-e to switch to an
+ editing mode.
+ (doc-view-ghostscript-options, doc-view-ps->pdf): Add "-dSAFER" to
+ avoid security problems when rendering files from untrusted sources.
- * files.el (abbreviate-file-name): Doc fix.
+2007-10-17 Aaron Hawley <aaronh@garden.org>
-2007-01-06 Markus Triska <triska@gmx.at>
+ * tutorial.el (tutorial--save-tutorial): Display message when tutorial
+ position is not saved.
- * subr.el (split-string): Remove spurious ")" from doc string.
+2007-10-17 Reiner Steib <Reiner.Steib@gmx.de>
-2007-01-05 Takaaki Ota <Takaaki.Ota@am.sony.com>
+ * doc-view.el: Mention xpdf. Fix spelling of Ghostscript.
+ (doc-view-ghostscript-options): Fix typo in doc string.
- * textmodes/table.el (table--warn-incompatibility):
- Use display-warning instead of momentary-string-display.
+2007-10-17 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-01-05 Richard Stallman <rms@gnu.org>
+ * progmodes/compile.el (compilation-next-error-function): Fix timestamp
+ handling, so compilation-fake-loc works again.
- * image.el (image-type-header-regexps): Recognize xbm more strictly.
+ * server.el (server-select-display): Nop if we do not support m-f-o-d.
+ (server-process-filter): Revert last change.
- * simple.el (backward-kill-word): Doc fix.
+ * vc.el (vc-diff-sentinel, vc-diff-internal): Revert some change in the
+ behavior unrelated to filesets.
-2007-01-05 Romain Francoise <romain@orebokech.com>
+2007-10-17 Chong Yidong <cyd@stupidchicken.com>
- * international/mule.el (sgml-html-meta-auto-coding-function):
- Ensure that the buffer contains a HTML document.
+ * longlines.el (longlines-wrap-follows-window-size): Integer value
+ specifies wrapping margin.
+ (longlines-mode, longlines-window-change-function):
+ Set window-specific wrapping margin based on the above.
-2007-01-05 Dan Nicolaescu <dann@ics.uci.edu>
+2007-10-17 John Wiegley <johnw@newartisans.com>
- * faces.el (momentary): Move here ...
- * subr.el (momentary): ... from here.
+ * eshell/esh-cmd.el (eshell-complex-commands): Add "ls".
-2007-01-05 Nick Roberts <nickrob@snap.net.nz>
+2007-10-17 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/gdb-ui.el (gdb-max-children): New customizable variable.
- (gdb-speedbar-expand-node): Ask user for confirmation before expanding
- large structures/arrays.
+ * server.el (server-process-filter): Only set display if X11 is
+ supported.
-2007-01-04 Juanma Barranquero <lekktu@gmail.com>
+2007-10-17 Glenn Morris <rgm@gnu.org>
- * files.el (find-file-noselect-1, set-visited-file-name):
- Allow backup-enable-predicate to be nil.
+ * progmodes/cc-menus.el (cc-imenu-c++-generic-expression):
+ Tweak regexp to avoid stack overflow.
-2007-01-04 Andreas Schwab <schwab@suse.de>
+2007-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/ebrowse.el (ebrowse-global-prefix-key): Fix typo in
- last change.
+ * simple.el (reindent-then-newline-and-indent): Don't assume that
+ indent-according-to-mode preserves point.
-2007-01-03 Richard Stallman <rms@gnu.org>
+2007-10-16 Juanma Barranquero <lekktu@gmail.com>
- * woman.el (woman-decode-buffer): Clarify error message.
+ * bs.el (bs--make-header-match-string, bs-show-in-buffer)
+ (bs--nth-wrapper): Simplify.
+ (bs-select, bs--insert-one-entry): Simplify. Use `when'.
+ (bs-buffer-list): Simplify. Use `when'. Use `string-match-p'.
+ (bs-sort-buffer-interns-are-last): Use `string-match-p'.
+ (bs-attributes-list, bs-max-window-height, bs-must-always-show-regexp)
+ (bs-maximal-buffer-name-column, bs-minimal-buffer-name-column)
+ (bs-configurations, bs-default-configuration)
+ (bs-alternative-configuration, bs-cycle-configuration-name)
+ (bs-string-show-always, bs-string-show-never, bs-string-current)
+ (bs-string-current-marked, bs-string-marked, bs-string-show-normally)
+ (bs-sort-functions, bs-default-sort-name): Remove * in docstrings.
+ (bs--redisplay, bs--goto-current-buffer, bs--current-buffer, bs-delete)
+ (bs-apply-sort-faces, bs-next-config-aux): Use `when'.
+ (bs--window-config-coming-from): Revert 2006-11-09 change.
+ (bs--restore-window-config): Keep the selected frame.
+ (bs--track-window-changes, bs--remove-hooks): New functions.
+ (bs-mode): Use `define-derived-mode'. Set hook to track window changes.
+ (bs--create-header): Remove.
+ (bs--create-header-line): New function, based on `bs--create-header'.
+ (bs--show-header): Use `bs--create-header-line'.
+ (bs--show-with-configuration): Revert 2006-11-09 change.
+ Don't reuse window unless it is visible on the selected frame.
+ Restore window configuration (possibly in a different frame)
+ before creating any window.
-2007-01-03 Alan Mackenzie <acm@muc.de>
+2007-10-16 Glenn Morris <rgm@gnu.org>
- * progmodes/cc-cmds.el (c-mask-paragraph): Fix yesterday's buggy patch.
+ * simple.el (blink-matching-open): Don't report false errors with
+ the `$' syntax class.
-2007-01-03 Chris Moore <christopher.ian.moore@gmail.com>
+2007-10-16 Richard Stallman <rms@gnu.org>
- * tutorial.el (tutorial--describe-nonstandard-key): Fix typo.
+ * emacs-lisp/advice.el (ad-get-advice-info): Change to a function.
+ (ad-get-advice-info-macro): New macro, like old ad-get-advice-info.
+ (ad-is-advised, ad-get-advice-info-field)
+ (ad-set-advice-info-field): Use ad-get-advice-info-macro.
-2007-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-10-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * iswitchb.el (iswitchb-global-map): Use command-remapping if available.
+ * vc-hooks.el (vc-workfile-version): Compatibility alias.
+ (vc-default-working-revision): Compatibility for backends.
-2007-01-02 Juanma Barranquero <lekktu@gmail.com>
+2007-10-15 Juanma Barranquero <lekktu@gmail.com>
- * emulation/viper.el (viper-custom-file-name, viper-mode):
+ * filesets.el (filesets-alist-get): Use `let' rather than `let*'.
+ (filesets-ormap, filesets-sort-case-sensitive-flag)
+ (filesets-remake-shortcut, filesets-ingroup-collect-files):
Fix typos in docstrings.
+ (filesets-conditional-sort, filesets-find-or-display-file)
+ (filesets-data-get-name, filesets-data-get-data)
+ (filesets-data-set, filesets-cmd-query-replace-getargs)
+ (filesets-ingroup-collect): Doc fixes.
- * subr.el (momentary-string-display): After moving point, set POS
- variable to it to avoid later errors once the buffer is modified.
- Doc fix.
-
-2007-01-02 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-cmds.el (c-mask-paragraph): In a block comment,
- check that the "*/" is present before trying to manipulate it.
-
-2007-01-02 Richard Stallman <rms@gnu.org>
-
- * wid-edit.el (widget-choose): Avoid ugly error for function keys.
-
- * progmodes/cfengine.el (cfengine-font-lock-syntactic-keywords):
- Fix format of value.
-
- * cus-edit.el (customize-unsaved): Rename from customize-customized.
- Change messages accordingly.
- (customize-customized): Now alias.
-
-2007-01-02 Juanma Barranquero <lekktu@gmail.com>
-
- * files.el (version-control): Doc fix.
-
-2007-01-01 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-engine.el (c-guess-basic-syntax, case 5N):
- Check the format of c-state-cache is valid for an optimisation before
- using it.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): New case 5Q "we
- are at a statement within a macro". Other changes so that only
- the first continuation line in a macro gets the symbol
- `cpp-define-intro', the others getting `statement', or whatever.
-
- * progmodes/cc-cmds.el (c-context-line-break): When invoked within
- a string, preserve whitespace. Add a backslash only when also in
- a macro.
-
- * progmodes/cc-defs.el: Correct typos.
-
- * progmodes/cc-cmds.el (c-context-line-break): Don't indent the
- new line after an escaped EOL in a string.
-
- * progmodes/cc-engine.el (c-forward-label): Recognise "foo:" as a
- label when it directly follows "else", "do", ....
-
- * progmodes/cc-engine.el (c-backward-<>-arglist): Tolerate empty
- angle brackets (as seen in "explicit specialisations" of C++
- templates).
-
- * progmodes/cc-vars.el (c-indentation-style): Mention c-file-style
- in the doc-string.
-
- * progmodes/cc-cmds.el (c-mask-paragraph): Fix for C comments,
- when the comment ender looks like "=========*/" and is alone on
- its line.
-
- * progmodes/cc-langs.el, progmodes/cc-engine.el: Correct the
- spelling of c-opt-op-identiTier-prefix, t -> f. Leave an alias
- for the old name.
-
- * progmodes/cc-mode.el: Bind C-M-a and C-M-e to
- c-\(beginning\|end\)-of-defun by default.
-
- * progmodes/cc-align.el (c-lineup-gnu-DEFUN-intro-cont):
- New line-up function, for the DEFUN macro in the Emacs C sources.
- Only used in "gnu" style.
-
- * progmodes/cc-styles.el (c-style-alist): Use this new function in
- the "gnu" style.
-
- * progmodes/cc-cmds.el (c-electric-slash): Extend the handling of
- clean-up comment-close-slash also to work when there's a comment
- terminator on the line.
- (c-beginning-of-defun, c-end-of-defun): Refactor and optimise
- these for large arg - only take account of top level {..}, except
- for initial and final adjustments. M-- C-M-[ae] now go to the
- right defuns when the starting point is between defuns. They use
- the four new functions:
- (c-in-function-trailer-p, c-where-wrt-brace-construct)
- (c-backward-to-nth-BOF-{, c-forward-to-nth-EOF-}): New functions to
- support c-\(beginning\|end\)-of-defun.
-
- * progmodes/cc-engine.el (c-forward-label): Analyze ":"
- expressions more rigorously, to exclude bit-field specifiers from
- being classed as labels.
- (c-forward-label): When analyzing a ":" within a macro, be careful
- about using c-forward-syntactic-ws at the macro beginning.
- (c-beginning-of-decl-1): Whilst searching for "=" as evidence of a
- stmt boundary, check for "operator=", etc.
-
- * progmodes/cc-mode.el (c-postprocess-file-styles):
- Bind inhibit-read-only to t, around the call to
- c-remove-any-local-eval-or-mode-variables, so that it works on a
- RO file.
-
- * progmodes/cc-defs.el (c-version): Update the version number to
- "5.31.4".
-
-2007-01-01 Richard Stallman <rms@gnu.org>
-
- * isearch.el (isearch-done): Use FOUND-POINT or FOUND-START
- only if we restored isearch-window-configuration.
-
-2006-12-31 Romain Francoise <romain@orebokech.com>
-
- * net/tramp.el (tramp-default-method): Don't use `symbol-function'.
-
-2006-12-31 Kim F. Storm <storm@cua.dk>
-
- * files.el (auto-mode-case-fold): New defcustom.
- (set-auto-mode): If non-nil, perform second case-sensitive pass
- through auto-mode-alist if first pass failed.
-
-2006-12-30 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/easy-mmode.el (define-global-minor-mode): Doc fix.
-
-2006-12-30 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-encrypt-string): Handle symmetric-key
- passphrase caching but leave keypair caching to pgg.
-
-2006-12-30 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.55.
-
- * net/tramp.el (tramp-completion-mode): Use `wholenump' instead of
- `integerp'. `char-equal' could fail else in case of negative
- numbers. Reported by Toby Speight <T.M.Speight.90@cantab.net>.
- (top): Check for `font-lock-add-keywords' before calling; it
- doesn't exist under XEmacs.
- (tramp-yn-prompt-regexp): Fix regexp. Add question from plink.
- (tramp-completion-mode): Remove clause (not
- tramp-unified-filenames), because the function is called in other
- context too, where this check results in wrong results in the
- XEmacs case on Windows.
- (tramp-touch): UTC handling is not possible for XEmacs.
-
-2006-12-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * scroll-bar.el (previous-scroll-bar-mode): New variable
- (set-scroll-bar-mode): Set previous-scroll-bar-mode.
- (scroll-bar-mode): Use previous-scroll-bar-mode if set.
-
- * term/x-win.el: Set scroll bar mode to right if set by X resources.
-
-2006-12-30 Richard Stallman <rms@gnu.org>
-
- * files.el (make-backup-file-name-1): Precompute abs name
- but don't lose the relative name.
-
- * international/mule-cmds.el (select-safe-coding-system-interactively):
- Fix message.
-
-2006-12-30 Kevin Rodgers <kevin.d.rodgers@gmail.com> (tiny change)
-
- * files.el (backup-buffer): Show entire backup file name in msg.
-
-2006-12-30 Juanma Barranquero <lekktu@gmail.com>
-
- * image.el (image-type-header-regexps, image-type-from-data)
- (image-type-from-buffer, image-type-from-file-header):
- Revert changes from 2006-12-26.
- (image-type-auto-detectable): New variable.
- (image-type-auto-detected-p): New function.
-
- * files.el (magic-mode-alist): Detect image files with
- `image-type-auto-detected-p' instead of `image-type-from-buffer'.
-
-2006-12-29 Nick Roberts <nickrob@snap.net.nz>
-
- * dired.el (dired-sort-other): Move test for dired-mode...
- (dired-sort-set-modeline): ...to here.
-
-2006-12-29 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * textmodes/fill.el (fill-comment-paragraph): Document 2006-12-24
- change. Suggested by Stefan Monnier.
-
-2006-12-29 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/bindat.el (bindat--unpack-group, bindat--length-group)
- (bindat--pack-group): Let-bind COUNT during repeat block evaluation.
+2007-10-15 Sam Steingold <sds@gnu.org>
-2006-12-27 Kim F. Storm <storm@cua.dk>
+ * mail/sendmail.el (sendmail-error-reporting-interactive)
+ (sendmail-error-reporting-non-interactive): New variables for
+ sendmail error reporting options to simplify support for imperfect
+ sendmail emulators.
+ (sendmail-send-it): Use them instead of list literals.
- * emacs-lisp/authors.el (authors-aliases): Anchor FSF alias regexp,
- so it doesn't accidentally match an fsf.org mail address.
- (authors-renamed-files-alist): Add tcover-*.el.
+2007-10-15 Juanma Barranquero <lekktu@gmail.com>
-2006-12-27 Stefan Monnier <monnier@iro.umontreal.ca>
+ * help-fns.el: Revert previous change; it creates a
+ dependency loop between advice.el and help-fns.el.
- * vc-arch.el (vc-arch-find-version): New function.
+2007-10-15 Juanma Barranquero <lekktu@gmail.com>
- * vc-hooks.el (vc-version-backup-file-name): Revision names may be
- composed of arbitrary characters (even /) in some systems.
+ * help-fns.el: Require advice when compiling.
-2006-12-27 Eli Zaretskii <eliz@gnu.org>
+2007-10-14 Drew Adams <drew.adams@oracle.com>
- * international/mule-cmds.el (select-safe-coding-system-interactively):
- Improve the message in the *Warning* buffer.
+ * emacs-lisp/ring.el (ring-convert-sequence-to-ring)
+ (ring-insert+extend, ring-remove+insert+extend, ring-member)
+ (ring-next, ring-previous): New functions.
-2006-12-27 Kim F. Storm <storm@cua.dk>
+2007-10-14 Richard Stallman <rms@gnu.org>
- * ido.el (ido-set-matches-1): Fix last change. If default item is
- current buffer, it is ok to be first.
+ * emacs-lisp/advice.el (documentation): Advice deleted.
+ Doc for advised functions is now handled at C level.
+ (ad-stop-advice, ad-start-advice): Don't enable or disable
+ advice for `documentation'.
+ (ad-advised-definition-docstring-regexp): Var deleted.
+ (ad-make-advised-definition-docstring): Store orig name
+ as text property of string.
+ (ad-advised-definition-p): Check for text property of docstring.
-2006-12-27 Kenichi Handa <handa@m17n.org>
+ * help-fns.el (describe-function-1): Find source of advised functions.
- * international/mule-cmds.el (select-safe-coding-system-interactively):
- Use face `link' for problematic chars.
+2007-10-14 Juri Linkov <juri@jurta.org>
-2006-12-27 Kenichi Handa <handa@m17n.org>
+ * faces.el (describe-face): Allow handling a string as the face name.
- * international/mule-cmds.el (select-safe-coding-system-interactively):
- Improve the message in *Warning* buffer.
+ * textmodes/ispell.el (ispell-word): Call `ispell-region' on the
+ active region in transient-mark-mode.
+ (ispell-region): Change messages displayed at the start and end of
+ the spell-checking to be the same.
-2006-12-27 Kim F. Storm <storm@cua.dk>
+ * startup.el (fancy-startup-tail): Say exactly what does the button
+ dismiss ("Dismiss this startup screen"). Use text "Never show
+ it again" for the checkbox after this button.
+ (fancy-startup-screen, fancy-about-screen): Put point before the
+ first link, so the user can quickly select links with the keyboard.
+ (normal-mouse-startup-screen): Add more useful text describing how
+ to follow a link.
- * ido.el (ido-set-matches-1): Never put current buffer first if
- there are other matches.
+2007-10-14 Glenn Morris <rgm@gnu.org>
-2006-12-26 Nick Roberts <nickrob@snap.net.nz>
+ * progmodes/etags.el (select-tags-table): Disable undo in the
+ `*Tags Table List*' buffer.
- * progmodes/gdb-ui.el (gud-watch): Allow duplicate names for watch
- expressions.
- (gdb-var-delete): Handle duplicate names. Print message for non
- root expressions.
- (gdb-partial-output-name): Start buffer name with a space.
- (gdb-info-breakpoints-custom, gdb-reset): Handle space in above
- buffer name.
+2007-10-13 Eli Zaretskii <eliz@gnu.org>
-2006-12-26 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * dired.el (dired-warn-writable): New face.
+ (dired-warn-writable-face): New variable.
+ (dired-font-lock-keywords): Use dired-warn-writable-face, instead
+ of dired-warning-face, for group- and world-writable files.
- * mail/footnote.el (Footnote-insert-footnote): Fix the search of the
- last footnote when `footnote-spaced-footnotes' is nil.
+2007-10-13 Richard Stallman <rms@gnu.org>
-2006-12-26 Richard Stallman <rms@gnu.org>
+ * files.el (directory-abbrev-alist): Doc fix.
- * cus-edit.el (custom-browse-sort-alphabetically)
- (custom-buffer-sort-alphabetically)
- (custom-menu-sort-alphabetically): Doc fixes. Add autoloads.
+2007-10-13 Jari Aalto <jari.aalto@cante.net>
- * image.el (image-type-header-regexps): Change element format
- to include third item NOT-ALWAYS.
- (image-type-from-data): Handle new format.
- (image-type-from-buffer): Handle new format. New arg INCLUDE-MAYBES.
- (image-type-from-file-header): Pass t for INCLUDE-MAYBES.
+ * comint.el (comint-password-prompt-regexp): Add 'LDAP'.
-2006-12-26 Guanpeng Xu <herberteuler@hotmail.com>
+2007-10-12 Martin Rudalics <rudalics@gmx.at>
- * add-log.el (add-log-current-defun): Call `forward-sexp'
- multiple times to pick a member function name defined as
- part of nested classes/namespaces.
+ * frame.el (set-frame-configuration): Assign name parameter only
+ if it has been set explicitly before.
-2006-12-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+2007-10-11 Tom Tromey <tromey@redhat.com>
- * emacs-lisp/easymenu.el (easy-menu-change): New arg MAP to indicate
- which keymap should be used to change menu. It does not affect any
- existent code.
+ * progmodes/gdb-ui.el (gdb-info-stack-custom): Ensure current
+ frame is visible.
-2006-12-26 Richard Stallman <rms@gnu.org>
+2007-10-10 Richard Stallman <rms@gnu.org>
- * textmodes/fill.el (fill-paragraph): Check for a minibuffer
- rather than for being in a minibuffer window.
+ * emacs-lisp/debug.el (debugger-setup-buffer): Disable undo
+ in *Backtrace*.
-2006-12-25 Daiki Ueno <ueno@unixuser.org>
+ * faces.el (face-font-selection-order): Doc fix.
- * pgg-def.el (pgg-passphrase-coding-system): Default to nil instead of
- locale-coding-system.
- * pgg-gpg.el (pgg-gpg-process-region): Encode passphrase with eol-type
- LF.
+ * loadhist.el (unload-feature): Doc fix.
-2006-12-25 Michael R. Mauger <mmaug@yahoo.com>
+2007-10-13 Glenn Morris <rgm@gnu.org>
- * progmodes/sql.el (sql-mode-abbrev-table): Correct initialization.
- (sql-mode-syntax-table): Disable double quoted strings.
- (sql-mode-font-lock-object-name): Add TYPE and TYPE BODY.
+ * progmodes/octave-mod.el (octave-looking-at-kw): Add doc string.
+ (octave-re-search-forward-kw, octave-re-search-backward-kw):
+ Add doc string, and an explicit COUNT argument.
+ (octave-scan-blocks, octave-beginning-of-defun): Explicitly pass
+ `inc' to search functions.
-2006-12-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * faces.el (face-spec-set): When FRAME is nil, set the default for
+ new frames (restores pre-2007-09-17 behavior). Doc fix.
- * startup.el (fancy-splash-last-input-event): New variable.
- (fancy-splash-special-event-action): New function.
- (fancy-splash-screens): Temporarily bind special events to it.
- Execute command for saved special event before exiting from
- recursive editing.
+2007-10-13 John W. Eaton <jwe@octave.org>
- * term/mac-win.el (mac-keyboard-translate-char, mac-unread-string):
+ * progmodes/octave-mod.el (octave-looking-at-kw)
+ (octave-re-search-forward-kw, octave-re-search-backward-kw):
New functions.
- (mac-ts-update-active-input-area, mac-ts-unicode-for-key-event):
- Use mac-unread-string.
-
-2006-12-24 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * textmodes/fill.el (fill-comment-paragraph): Prevent the use of
- an optimized comment regexp if `comment-start-skip' uses a ^.
- * bs.el (bs--up): Remove interactive spec.
-
-2006-12-24 Chong Yidong <cyd@stupidchicken.com>
-
- * woman.el (woman-decode-buffer): Signal error for alien macro sets.
- Suggested by James Cloos.
-
-2006-12-24 Kevin Ryde <user42@zip.com.au>
-
- * calendar/cal-dst.el (calendar-dst-starts): Default to second Sunday
- in March.
- (calendar-dst-ends): Default to first Sunday in November.
-
-2006-12-24 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-encrypt-string): Inhibit use of agent within
- body of let form where encryption happens. Acknowledge non-use of
- gpg-agent in docstring.
- (allout-toggle-subtree-encryption): Acknowledge non-use of
- gpg-agent in docstring.
-
-2006-12-24 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (custom-add-frequent-value): Alias for custom-add-option.
-
-2006-12-23 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-diff.el (ediff-diff-options): Clarify docstring.
- (ediff-setup-diff-regions): Disallow -u in ediff-diff-options.
-
- * emulation/viper-cmd.el (viper-post-command-sentinel):
- Protect against errors in hooks.
- (viper-add-newline-at-eob-if-necessary): Add newline only if we
- actually modify buffer; ignore errors if occur.
-
-2006-12-23 Chong Yidong <cyd@stupidchicken.com>
-
- * calendar/calendar.el (calendar-mode-map): Switch < and >.
- (calendar-mode-line-format): Use mouse-1 bindings, and tweak
- formatting.
-
-2006-12-23 Richard Stallman <rms@gnu.org>
-
- * simple.el (delete-horizontal-space): Doc fix.
-
-2006-12-23 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (bootstrap-clean): Run bootstrap-clean-$(SHELLTYPE)
- explicitly in a recursive Make, not implicitly through prerequisites,
- since the latter is wrong under parallel builds.
-
-2006-12-22 Eli Zaretskii <eliz@gnu.org>
-
- * w32-fns.el (convert-standard-filename): Wrap in save-match-data.
-
-2006-12-22 Kevin Rodgers <kevin.d.rodgers@gmail.com> (tiny change)
-
- * progmodes/sh-script.el (sh-make-vars-local): Fix a typo in
- message string.
-
-2006-12-22 Ben North <ben@redfrontdoor.org> (tiny change)
-
- * outline.el (outline-next-visible-heading): Fix the case with a
- header at end-of-file with no final newline.
-
-2006-12-22 Robert Thorpe <rthorpe@realworldtech.com> (tiny change)
-
- * indent.el (tab-always-indent): Doc fix.
-
-2006-12-22 Chong Yidong <cyd@stupidchicken.com>
-
- * info.el (Info-fontify-maximum-menu-size): Bump to 1000000.
- (Info-fontify-node): Do fontify indices.
-
- * tutorial.el (tutorial--detailed-help): Remove unnecessary link
- to the Emacs Lisp reference manual.
- (tutorial--tab-map): Remove. All callers changed.
- (tutorial--find-changed-keys): New elt QUIET, used to...
- (tutorial--display-changes): ...ensure that warning messages are
- only issued once per changed key.
- (tutorial--remove-remarks): Delete unused code-path.
- (lang-strings): Remove extraneous formatting.
- (tutorial--save-tutorial): Prompt before saving tutorial state.
-
-2006-12-21 Chong Yidong <cyd@stupidchicken.com>
-
- * tutorial.el: Remove `cl' requirement. Clean up whitespace.
- Replace '?\ ' by '?\s' throughout.
- (tutorial-warning-face): Inherit font-lock-warning-face. Move to
- `help' custom group.
- (tutorial--key-description): New function.
- (tutorial--display-changes): Remove redundant arg. Scan for all
- key sequences to avoid false matches. Cleanup.
- (tutorial--saved-dir): Save to a subdirectory in .emacs.d to
- reduce homedir pollution.
- (help-with-tutorial): Call tutorial--display-changes with no arg.
-
-2006-12-21 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode-map): Bind org-complete also to M-\t.
-
-2006-12-20 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-default-method): We still need to check for
- `executable-find', because it is not bound under Emacs 20.
- (tramp-handle-file-name-completion)
- (tramp-completion-handle-file-name-completion): Handle optional
- parameter PREDICATE.
- (tramp-find-default-method): Add code for default values.
-
-2006-12-20 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-stopped): After attaching to a process
- make gud-go send "continue".
-
-2006-12-19 Juanma Barranquero <lekktu@gmail.com>
-
- * image.el (image-type-header-regexps): Be more specific detecting `pbm'
- and `png' files. Use non-capturing parenthesis for `tiff' regexp.
-
-2006-12-19 Kim F. Storm <storm@cua.dk>
-
- * bindings.el: Bind sigusr1 and sigusr2 in special-event-map
- instead of global-map.
-
- * files.el (magic-mode-alist): Allow matching file type by
- calling a function at bob. Check for image types by calling
- image-type-from-buffer. Suggested by Juanma Barranquero.
- (set-auto-mode): Do it.
-
-2006-12-19 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-methods): Introduce new method `scpc'.
- Remove "ControlMaster" option from the other `scp*' methods.
- (tramp-default-method): Check for ssh-agent before setting to `scp'.
-
-2006-12-18 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode): Show context after isearch.
- (org-show-siblings): New function.
- (org-show-context): Use `org-show-siblings'.
-
-2006-12-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/syntax.el (syntax-ppss-flush-cache, syntax-ppss):
- Use syntax-ppss-toplevel-pos.
-
-2006-12-18 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-current-line): Make sure that lines are
- counted from beginning of buffer.
- (org-table-copy-region, org-table-paste-rectangle): Make sure that
- lines are counted from beginning of buffer.
-
-2006-12-17 Chong Yidong <cyd@stupidchicken.com>
-
- * info.el (Info-build-node-completions): Signal error if tag-table
- marker is not found.
-
- * pgg-gpg.el (pgg-gpg-use-agent): Default to t.
-
-2006-12-17 Alan Mackenzie <acm@muc.de>
-
- * emacs-lisp/lisp.el (beginning-of-defun-raw): Optimise (for
- speed) the case when open-paren-in-column-0-is-defun-start is nil.
- Based on code by Martin Rudalics.
-
- * progmodes/cc-mode.el (c-basic-common-init): Don't set
- open-paren-in-column-0-is-defun-start to nil any more.
-
-2006-12-17 Richard Stallman <rms@gnu.org>
-
- * simple.el (delete-horizontal-space): Use prefix arg.
-
- * help-fns.el (describe-variable): Improve blank separator lines.
-
- * files.el (magic-mode-alist): Mark as risky.
-
- * files.el (make-backup-file-name-1):
- Expand backup-directory explicitly.
-
-2006-12-17 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-default-method): Before setting to "pscp",
- check whether package password.el is loaded, or Pageant is running.
-
-2006-12-17 Ulf Jasper <ulf.jasper@web.de>
-
- * calendar/icalendar.el (icalendar-version): Increase to "0.14".
- (icalendar--rris): First try Emacs, then XEmacs.
- (icalendar--convert-ical-to-diary): Doc fix.
- Insert newline at end of target file.
-
-2006-12-17 Kim F. Storm <storm@cua.dk>
-
- * outline.el (outline-isearch-open-invisible-function): New defvar.
- (outline-flag-region): Use it if non-nil for isearch-open-invisible
- overlay property instead of outline-isearch-open-invisible.
-
-2006-12-16 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-completion-help): Build ido-cur-list and ido-matches
- if ido-directory-too-big is set on entry.
- (ido-toggle-ignore, ido-completion-help): Print message while
- reading big directory.
-
-2006-12-15 Richard Stallman <rms@gnu.org>
-
- * shell.el (shell): Doc fix.
-
-2006-12-15 Kevin Gallagher <Kevin.Gallagher@boeing.com>
-
- * emulation/edt.el (edt-xserver):
- * emulation/edt-mapper.el (edt-xserver): Replace `/' with a `-',
- to fix a problem on Cygwin.
-
- * emulation/edt.el
- * emulation/edt-mapper.el
- * emulation/edt-lk201.el
- * emulation/edt-pc.el
- * emulation/edt-vt100.el: Update maintainer's email address.
-
-2006-12-15 Simon Marshall <simon@gnu.org>
-
- * progmodes/cc-fonts.el (c-font-lock-declarations): Fix previous change.
-
-2006-12-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-atsu-font-table): Remove defvar.
- (mac-handle-font-selection): Use mac-atsu-font-face-attributes
- instead of mac-atsu-font-table.
- (fontset-default): Specify argument MAXIMUM in x-list-fonts calls.
-
-2006-12-14 Stephen Leake <stephen_leake@member.fsf.org>
-
- * align.el (align-match-tex-pattern): Fix a rare bug which
- hanged Emacs.
-
-2006-12-14 Richard Stallman <rms@gnu.org>
-
- * startup.el (use-fancy-splash-screens-p): Use frame-height
- instead of window-height. Pass frame to image-size.
-
-2006-12-13 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (set-locale-environment):
- Set default-sendmail-coding-system too.
-
-2006-12-12 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlw-help.el: Fix copyright notice.
-
-2006-12-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/syntax.el (syntax-ppss-toplevel-pos): New fun.
-
-2006-12-11 Juanma Barranquero <lekktu@gmail.com>
-
- * subr.el (unread-command-char): Reformat obsolescence info.
-
-2006-12-11 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/cl-macs.el (defstruct): Suppress warnings
- about calls to cl-struct-setf-expander.
-
-2006-12-11 Juanma Barranquero <lekktu@gmail.com>
-
- * ediff-merg.el (ediff-show-clashes-only): Doc fix.
- (ediff-combination-pattern): Fix typo in docstring.
-
- * textmodes/refer.el (refer-find-entry): Doc fix.
- (refer-bib-files-regexp, refer-bib-directory, refer-bib-files)
- (refer-cache-bib-files, refer-find-next-entry, refer-yank-key):
- Fix tipos in docstrings.
-
- * progmodes/idlwave.el (idlwave-library-path): Fix typos in docstring.
-
-2006-12-10 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-init-completion-maps): Remap backward-kill-word
- instead of binding M-backspace.
-
-2006-12-10 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (replace-match-data, replace-match-maybe-edit):
- * calc/calc-aent.el (calc-eval-error):
- * emulation/vi.el (vi-char-argument):
- * progmodes/cc-langs.el (c-at-vsemi-p-fn)
- (c-vsemi-status-unknown-p-fn): Doc fixes.
-
-2006-12-10 Chong Yidong <cyd@stupidchicken.com>
-
- * menu-bar.el (menu-bar-showhide-menu, menu-bar-tools-menu)
- (menu-bar-help-menu): Tooltip fixes. Suggested by Francis Wright.
-
-2006-12-10 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/ld-script.el (ld-script-keywords): Fix a typo.
-
-2006-12-09 Chong Yidong <cyd@stupidchicken.com>
-
- * mouse-sel.el (mouse-sel-mode): Register mouse-2 as a click type.
-
- * man.el (Man-xref-button-action): New function. If the
- `Man-target-string' button property is a function, assume it
- accepts a position argument.
- (Man-abstract-xref-man-page): Use it.
- (Man-default-man-entry): New optional arg POS.
-
- * wdired.el (wdired-preprocess-symlinks): Make the spaces after
- symlink arrows read-only and non-rear-sticky.
-
-2006-12-09 Martin Rudalics <rudalics@gmx.at>
-
- * wdired.el (wdired-change-to-wdired-mode, wdired-finish-edit)
- (wdired-search-and-rename): Simplify code.
- (wdired-preprocess-files, wdired-preprocess-perms): Make
- read-only property of preceding character rear-nonsticky to
- avoid that it can be modified. Put old-name and old-link
- properties on character preceding name and replace
- put-text-property by add-text-properties.
- (wdired-get-filename, wdired-get-previous-link): Get old-name
- and old-link properties from character preceding name and
- simplify code.
- (wdired-preprocess-perms, wdired-set-bit, wdired-toggle-bit)
- (wdired-perms-to-number): Make local-map property
- rear-nonsticky to avoid that text following permissions may be
- modified. Use add-text-properties instead of put-text-property
- when changing a permission bit.
- (wdired-change-to-dired-mode): Remove stickiness properties.
-
-2006-12-09 Juanma Barranquero <lekktu@gmail.com>
-
- * international/mule-cmds.el (register-input-method): Doc fix.
-
-2006-12-09 Masayuki Ataka <masayuki.ataka@gmail.com> (tiny change)
-
- * cmuscheme.el (scheme-start-file): Use `let*', not `let'.
-
-2006-12-09 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * textmodes/flyspell.el (flyspell-hack-local-variables-hook): New.
- Force buffer local defs evaluation on local variables loading.
- (flyspell-mode-on, flyspell-mode-off): Use it in
- `hack-local-variables-hook'.
-
-2006-12-09 Eli Zaretskii <eliz@gnu.org>
-
- * emacs-lisp/find-func.el (find-variable): Doc fix.
-
- * help-fns.el (variable-at-point): Doc fix.
-
- * w32-fns.el (w32-append-code-lines): New function.
-
-2006-12-09 Romain Francoise <romain@orebokech.com>
-
- * comint.el (comint-insert-input): Delete obsolete comment.
-
-2006-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/browse-url.el (browse-url): Set DISPLAY to the one of the
- current frame, in case we're connected to several displays.
-
-2006-12-08 Juanma Barranquero <lekktu@gmail.com>
-
- * frame.el (other-frame): Doc fix.
- (set-frame-parameter): Fix typo in docstring.
-
-2006-12-07 Kim F. Storm <storm@cua.dk>
-
- * info.el (Info-index): Strip leading colon from topic.
-
-2006-12-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-buttons): Deal with references
- to pointers.
+ (octave-in-defun-p, calculate-octave-indent)
+ (octave-blink-matching-block-open, octave-beginning-of-defun)
+ (octave-auto-fill): Use octave-looking-at-kw instead of looking-at,
+ to search for regexps that contain case-sensitive keywords.
+ (octave-beginning-of-defun): Likewise, for octave-re-search-backward-kw.
+ (octave-scan-blocks): Likewise, for octave-re-search-forward-kw.
-2006-12-05 J.D. Smith <jdsmith@as.arizona.edu>
+2007-10-13 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/idlwave.el (idlwave-xml-create-class-method-lists):
- Trim out spurious class inheritance "None" entries.
+ * frame.el (select-frame-set-input-focus): Fix typo "max" -> "mac".
+ Do not use a single clause cond.
-2006-12-05 Kim F. Storm <storm@cua.dk>
+ * cus-start.el (all): Use test that does not match the X11 version
+ for mac.
- * emulation/cua-base.el (cua-paste-pop-rotate-temporarily): Doc fix.
- (cua-paste-pop): Rework last change for
- cua-paste-pop-rotate-temporarily, so first M-y and C-y works alike,
- pasting the head of the kill-ring, and prefix arg C-u M-y inserts the
- text inserted by the last M-y command.
+2007-10-13 Markus Gritsch <m.gritsch@gmail.com> (tiny change)
-2006-12-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * progmodes/ebrowse.el (ebrowse-tree-mode): Disable undo in the
+ BROWSE buffer.
- * cmuscheme.el (run-scheme, scheme-start-file): Search the start
- file in ~/.emacs.d as `init_SCHEMENAME.scm' instead.
+2007-10-13 Dan Nicolaescu <dann@ics.uci.edu>
- * shell.el (shell): Search the start file in ~/.emacs.d as
- `init_SHELLNAME.sh' instead.
+ * cus-start.el (all): Undo previous change.
-2006-12-05 Glenn Morris <rgm@gnu.org>
+2007-10-13 Glenn Morris <rgm@gnu.org>
- * progmodes/cperl-mode.el (cperl-mode)
- * progmodes/f90.el (f90-mode-abbrev-table)
- * progmodes/fortran.el (fortran-mode-abbrev-table)
- * progmodes/octave-mod.el (octave-abbrev-table)
- * progmodes/sql.el (sql-mode-abbrev-table): Define abbrevs even
- if abbrev-table is non-nil (saved user abbrevs may have been restored).
+ * woman.el (woman0-rename): Fix paren typo.
+
+ * mail/feedmail.el (feedmail-run-the-queue)
+ (feedmail-look-at-queue-directory):
+ * mail/reporter.el (reporter-dump-state):
+ * net/eudc-hotlist.el (eudc-edit-hotlist):
+ * net/eudc.el (eudc-display-records)
+ (eudc-filter-duplicate-attributes)
+ (eudc-distribute-field-on-records, eudc-query-form, eudc-process-form):
+ * net/eudcb-bbdb.el (eudc-bbdb-filter-non-matching-record)
+ (eudc-bbdb-query-internal):
+ * net/eudcb-ldap.el (eudc-ldap-simple-query-internal):
+ * net/socks.el (socks-build-auth-list):
+ * progmodes/cc-cmds.el (top level):
+ * progmodes/cc-styles.el (c-make-styles-buffer-local, c-set-style):
+ * progmodes/cperl-mode.el (top level, cperl-imenu-addback)
+ (cperl-write-tags, cperl-tags-treeify):
+ * progmodes/ebnf-yac.el (ebnf-yac-token-table):
+ * progmodes/ebnf2ps.el (ebnf-map-name, ebnf-dimensions):
+ * progmodes/idlw-shell.el (idlwave-shell-filter-bp, top level):
+ * progmodes/idlw-toolbar.el (idlwave-toolbar-add-everywhere)
+ (idlwave-toolbar-remove-everywhere):
+ * progmodes/idlwave.el (idlwave-indent-line)
+ (idlwave-sintern-keyword-list, idlwave-scan-user-lib-files)
+ (idlwave-write-paths, idlwave-all-method-classes)
+ (idlwave-all-method-keyword-classes, idlwave-entry-keywords)
+ (idlwave-fix-keywords, idlwave-display-calling-sequence)
+ (idlwave-complete-in-buffer):
+ * textmodes/org.el (org-export-as-html, org-export-as-ascii)
+ (org-fast-tag-selection):
+ * textmodes/reftex-sel.el (reftex-select-item): Use mapc rather
+ than mapcar.
+
+2007-10-13 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * diff-mode.el (diff-fine-change): Add :group.
+
+2007-10-12 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * cus-start.el (all): Use the same test as the 22.2 branch.
+
+2007-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-current-defun): Force recomputation of
+ change-log-default-name.
+
+2007-10-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (fancy-startup-screen): Remove an unnecessary newline
+ and some leftover logic regarding dedicated frames. If showing
+ concise startup screen, fit window to buffer.
+ (command-line-1): If we will be using the splash screen, use
+ find-file instead of find-file-other-window to find additional files.
+ Comment out unused code for coping with the old sit-for behavior.
- * progmodes/vhdl-mode.el (vhdl-mode-abbrev-table-init): Do not
- clear abbrev table, else saved abbrevs will not be restored.
+2007-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-12-04 Juanma Barranquero <lekktu@gmail.com>
+ * term/xterm.el (xterm-function-map, xterm-alternatives-map): Use the
+ `meta' modifier consistently, rather than using sometimes meta
+ sometimes alt.
- * facemenu.el (facemenu-unlisted-faces): Put obsolescence info in
- the call to `make-obsolete-variable', not in the docstring.
+2007-10-12 Martin Rudalics <rudalics@gmx.at>
-2006-12-04 Chong Yidong <cyd@stupidchicken.com>
+ * window.el (handle-select-window): Revert part of 2007-10-08
+ change setting the input focus.
- * facemenu.el (facemenu-unlisted-faces): Define as obsolete variable.
+2007-10-12 Glenn Morris <rgm@gnu.org>
-2006-12-04 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+ * startup.el (command-line): Do not read abbrev file in batch mode.
+
+ * emacs-lisp/byte-opt.el (top level):
+ * mail/rmail.el (rmail-list-to-menu):
+ * obsolete/hilit19.el (hilit-mode):
+ * progmodes/cc-mode.el (c-postprocess-file-styles)
+ (c-submit-bug-report):
+ * textmodes/org-publish.el (org-publish-get-plist-from-filename):
+ * textmodes/reftex.el (reftex-erase-all-selection-and-index-buffers)
+ (reftex-access-parse-file):
+ * textmodes/reftex-cite.el (reftex-do-citation)
+ (reftex-insert-bib-matches):
+ * textmodes/reftex-ref.el (reftex-offer-label-menu):
+ * textmodes/reftex-sel.el (reftex-select-unmark):
+ * textmodes/reftex-toc.el (reftex-toc-do-promote):
+ * vc-mcvs.el (vc-mcvs-checkin): Use mapc rather than mapcar.
- * progmodes/ebnf-abn.el:
- * progmodes/ebnf-bnf.el:
- * progmodes/ebnf-dtd.el:
- * progmodes/ebnf-ebx.el:
- * progmodes/ebnf-iso.el:
- * progmodes/ebnf-otz.el:
- * progmodes/ebnf-yac.el:
- * progmodes/ebnf2ps.el:
- * delim-col.el:
- * printing.el:
- * ps-bdf.el:
- * ps-mule.el:
- * ps-print.el: Remove 'Time-stamp' comment mark.
+ * cus-edit.el (custom-variable-menu, custom-face-menu)
+ (custom-group-menu): Check init-file-user rather than
+ user-init-file, in case cus-edit is loaded by site-run-file.
- * printing.el (pr-menu-bind): Replace 'easy-menu-change' by
- 'easy-menu-add-item' when called in Emacs 21 or higher.
+2007-10-11 Dan Nicolaescu <dann@ics.uci.edu>
-2006-12-04 Stephen Leake <stephen_leake@stephe-leake.org>
+ * vc.el (vc-deduce-fileset): Delete unused code.
+ (vc-next-action): Fix typos.
- * progmodes/ada-xref.el (ada-check-current): Doc fix.
- (ada-make-body-gnatstub): Doc fix. Remove redundant `progn'.
+2007-10-11 Juanma Barranquero <lekktu@gmail.com>
-2006-12-04 Kim F. Storm <storm@cua.dk>
+ * bs.el (bs--mark-unmark): New function.
+ (bs-mark-current, bs-unmark-current): Use it.
- * bindings.el (global-map): Bind [signal t] to ignore, to have
- user signals ignored by default.
+2007-10-11 Eric S. Raymond <esr@snark.thyrsus.com>
-2006-12-04 Juanma Barranquero <lekktu@gmail.com>
+ * vc.el (vc-diff):
+ (vc-diff-internal): Merge a patch by Juanma Barranquero. Also,
+ temporarily disable the check for his edge case of
+ vc-diff (stopping it from grinding when called from $HOME), as
+ it's calling some brittle code in vc-hooks.el.
+ (with-vc-properties): Fix evaluation time of a macro argument.
+ * ediff-vers.el (ediff-vc-internal):
+ * vc-hooks.el:
+ * loaddefs.el: Follow up on VC terminology change.
- * descr-text.el (describe-char-unicode-data): Use a hidden buffer for
- Unicode data file pointed to by `describe-char-unicodedata-file'.
+2007-10-11 Juanma Barranquero <lekktu@gmail.com>
-2006-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+ * follow.el (follow-stop-intercept-process-output):
+ Use `follow-call-process-filter' rather than `process-filter'.
+ Simplify.
- * textmodes/sgml-mode.el (sgml-font-lock-keywords-1): Fix pathological
- O(n^2) regexp-search by anchoring the search.
+2007-10-11 Eric S. Raymond <esr@snark.thyrsus.com>
-2006-12-04 Dan Nicolaescu <dann@ics.uci.edu>
+ * vc-hooks.el (vc-registered): Robustify this function a bit
+ against filenames with no directory component.
- * whitespace.el (whitespace-cleanup-internal): Use current
- argument for recursive call.
+2007-10-11 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-12-04 Michael Albinus <michael.albinus@gmx.de>
+ * international/characters.el: Undo unwanted and unexplained change.
- * net/tramp.el (tramp-methods): Add "ControlPath" and
- "ControlMaster" to scp, scp1 and scp2 methods. Suggested by
- Andreas Schwab <schwab@suse.de>.
- (tramp-do-copy-or-rename-file-out-of-band)
- (tramp-open-connection-rsh): Compute format spec for ?t.
- (tramp-process-actions): Trace command parameters.
-
-2006-12-04 Nick Roberts <nickrob@snap.net.nz>
-
- * simple.el (toggle-truncate-lines): Clarify doc string.
-
- * progmodes/gdb-ui.el (gdb-var-delete-children): New function.
- (gdb-speedbar-expand-node): Use it.
-
-2006-12-04 Richard Stallman <rms@gnu.org>
-
- * progmodes/python.el (python-indent): Add safe-local-variable prop.
-
- * dired.el (dired-revert): Turn off dired-after-readin-hook
- around call to dired-readin.
-
- * menu-bar.el (menu-bar-make-toggle): Add "globally"
- to echo area messages.
- <indicate-empty-lines, case-fold-search>:
- Add "globally" to Help string.
- <case-fold-search>: MESSAGE arg need not say "globally".
- (menu-bar-edit-menu <paste-from-menu>): Rename from select-and-paste.
-
-2006-12-03 Liam Healy <lnp@healy.washington.dc.us> (tiny change)
-
- * outline.el (outline-end-of-subtree): Don't leave an empty
- line hidden as we would a real next heading.
-
-2006-12-03 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-ascend): Add an optional argument to preserve
- original position of point when unsuccessful. Also, fix a
- docstring error.
- (allout-yank-processing): Fix depth shift of multiple-topic so yanks
- work again, using allout-ascend's new option.
- (allout-setup-mode-map): Extract from allout-mode to initialize
- allout-mode-map. Call it on file load, so the mode docstring
- substitutions work even if allout mode has not yet been invoked.
- (allout-mode): Use new allout-setup-mode-map to track any keybinding
- customizations since the map was last processed. Also, refine the
- docstring so it's ship-shape for release.
- (allout-default-layout, allout-beginning-of-line-cycles)
- (allout-distinctive-bullets-string, allout-use-mode-specific-leader)
- (allout-encrypt-unencrypted-on-saves, allout-inhibit-auto-fill)
- (allout-version, allout-layout, allout-infer-body-reindent)
- (allout-infer-header-lead-and-primary-bullet, allout-view-change-hook)
- (allout-init, allout-mode, allout-next-heading, allout-chart-subtree)
- (allout-previous-heading, allout-goto-prefix-doublechecked)
- (allout-current-bullet-pos, allout-next-sibling-leap)
- (allout-pre-command-business, allout-encrypted-type-prefix)
- (allout-make-topic-prefix, allout-open-topic, allout-rebullet-heading)
- (allout-rebullet-topic, allout-rebullet-topic-grunt)
- (allout-flag-region, allout-expose-topic, allout-expose-topic)
- (allout-old-expose-topic, allout-listify-exposed)
- (allout-process-exposed, allout-latex-verb-quote)
- (allout-latex-verbatim-quote-curr-line, allout-adjust-file-variable)
- (allout-toggle-current-subtree-encryption)
- (allout-toggle-subtree-encryption, allout-bullet-isearch):
- Remove extraneous open-paren and close paren string escapes.
-
-2006-12-03 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/ada-xref.el (is-windows, ada-find-in-src-path): Doc fixes.
- (ada-xref-pos-ring-max, ada-xref-project-files, ada-xref-initialize)
- (ada-prj-default-comp-cmd, ada-quote-cmd, ada-compile-current):
- Fix typos in docstrings.
+2007-10-10 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2006-12-03 Glenn Morris <rgm@gnu.org>
+ * ps-print.el: Fix the usage of :foreground and :background face
+ attributes. Reported by Nikolaj Schumacher <n_schumacher@web.de>.
+ (ps-print-version): New version 6.7.6.
+ (ps-face-attributes, ps-face-attribute-list, ps-face-background):
+ Fix code.
+ (ps-face-foreground-color-p, ps-face-background-color-p)
+ (ps-face-color-p): New inline funs.
- * progmodes/cc-align.el
- * progmodes/cc-awk.el
- * progmodes/cc-cmds.el
- * progmodes/cc-compat.el
- * progmodes/cc-defs.el
- * progmodes/cc-engine.el
- * progmodes/cc-langs.el
- * progmodes/cc-menus.el
- * progmodes/cc-mode.el
- * progmodes/cc-styles.el
- * progmodes/cc-vars.el
- * progmodes/vhdl-mode.el: Fix Copyright format.
+2007-10-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-additional-option-like-keywords): New constant.
+ (org-complete): Use `org-additional-option-like-keywords'.
+ (org-parse-local-options): New function.
+
+2007-10-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-in-clocktable-p): New function.
+ (org-clock-report): Only update the table at point, or insert a new one.
+ (org-clock-goto): New function.
+ (org-open-file): Use `start-process-shell-command' instead of
+ `shell-command' with an ampersand.
+ (org-deadline, org-schedule): New argument REMOVE to remove the
+ date from the entry.
+ (org-agenda-schedule, org-agenda-deadline): Pass the prefix
+ argument to `org-schedule' and `org-deadline'.
+ (org-trim): Use the correct expressions for beginning and end of
+ the string.
+ (org-get-cleaned-entry): Trim the string before returning it.
+ (org-clock-find-position): New function.
+ (org-clock-into-drawer): New option.
+ (org-agenda-tags-column): Rename from
+ `org-agenda-align-tags-to-column'.
+ (org-agenda-align-tags): Allow negative values for
+ `org-agenda-tags-column'.
+ (org-insert-labeled-timestamps-before-properties-drawer): Remove var.
+ (org-agenda-to-appt): New optional argument FILTER.
+ (org-completion-fallback-command): New variable.
+ (org-complete): Use `org-completion-fallback-command'.
+ (org-find-base-buffer-visiting): Catch the case that there is no
+ buffer visiting the file.
+ (org-property-or-variable-value): New function.
+ (org-todo): Use `org-property-or-variable-value'
+ (org-agenda-compact-blocks): New option.
+ (org-prepare-agenda, org-agenda-list): Use `org-agenda-compact-blocks'.
+ (org-agenda-schedule, org-agenda-deadline):
+ Call `org-agenda-show-new-time'.
+ (org-agenda-show-new-time): New argument PREFIX.
+ (org-colgroup-info-to-vline-list): Fix but that cause a
+ shift in the vertical lines.
+ (org-buffer-property-keys): New argument INCLUDE-DEFAULTS.
+ (org-maybe-renumber-ordered-list, org-cycle-list-bullet)
+ (org-indent-item): No arg in call to `org-fix-bullet-type'.
+ (org-fix-bullet-type): Remove argument.
+ (org-read-date): Check for am/pm twice, to catch the end time.
+ (org-goto-map): Use `suppress-keymap'.
+ (org-remember-apply-template): Respect the dynamically scoped
+ selection character.
+
+2007-10-10 Bastien Guerry <Bastien.Guerry@ens.fr>
+
+ * textmodes/org-export-latex.el (org-export-latex-protect-string):
+ Renaming of `org-latex-protect'.
+ (org-export-latex-emphasis-alist): By default, don't protect
+ any emphasis formatter from further conversion.
+ (org-export-latex-tables): Honor column grouping for tables.
+ (org-export-latex-title-command): New option.
+ (org-export-latex-treat-backslash-char): Use \textbackslash{} to
+ export backslash character.
+
+2007-10-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * frame.el (frame-inherited-parameters): Remove unused `environment'
+ parameter, and let server.el add `client' when needed.
+
+ * server.el (server-create-tty-frame)
+ (server-create-window-system-frame): Set frame-inherited-parameters.
+
+ * frame.el (frame-inherited-parameters): New var.
+ (make-frame): Use it.
+
+ * font-lock.el (lisp-font-lock-keywords-2): Remove let-environment.
+
+ * env.el (let-environment): Remove. Unused.
+ (read-envvar-name): Simplify.
+ (setenv): Remove unused arg `frame'.
+
+ * help-fns.el (describe-variable): Add missing " " for multiline
+ obsolescence info and missing EOL after global value.
+
+2007-10-10 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * add-log.el:
+ * ediff-vers.el:
+ * log-view.el:
+ * pcvs.el:
+ * vc-arch.el:
+ * vc-bzr.el:
+ * vc-cvs.el:
+ * vc.el:
+ * vc-git.el:
+ * vc-hg.el:
+ * vc-hooks.el:
+ * vc-mcvs.el:
+ * vc-mtn.el:
+ * vc-rcs.el:
+ * vc-sccs.el:
+ * vc-svn.el: Terminology cleanup: workfile-version -> working-revision,
+ {find,init,next,previous,annotate-*,log}-version ->
+ {find,init,next,previous,annotate-*,log}-revision,
+ annotate-focus-version -> annotate-working-revision, The term
+ 'focus' is gone. The term 'revision' is now used consistently
+ everywhere that reference to a revision ID is intended, replacing
+ older use of 'version'.
-2006-12-02 Chong Yidong <cyd@stupidchicken.com>
+2007-10-10 Juanma Barranquero <lekktu@gmail.com>
- * mouse.el (mouse-drag-track): Suppress automatic hscrolling for
- initial down event.
+ * follow.el: Change all instances of "Follow Mode" to "Follow
+ mode" in docstrings and messages.
+ (follow-menu-filter): Fix arg passed to `bound-and-true-p'.
+
+2007-10-10 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * vc.el (vc-next-action): Rewrite completely; this principal
+ entry point now operates on a current fileset selected either
+ explicitly via VC-Dired or implicitly by visiting a file buffer,
+ rather than always operating on the file of the current buffer as
+ in older versions. Rewrite the rest of the mode to match.
+ (with-vc-properties): Rewrite to operate on a file list.
+ (with-vc-file): vc-checkin takes a file list argument now.
+ (vc-post-command-functions): This hook now receives a file list.
+ (vc-do-command): Take a either a file or a file list as argument.
+ (vc-deduce-fileset): New function for deducing a file list to
+ operate on.
+ (vc-next-action-on-file, vc-next-action-dired): Remove.
+ Merge into vc-next-action.
+ (vc-register): Adapt to the fact that vc-start-entry now takes a
+ file list.
+ (vc-register-with): New function.
+ (vc-start-entry): Take a file list argument rather than a
+ file argument.
+ (vc-checkout): Cope with vc-start-entry taking a file list.
+ (vc-steal-lock): Cope with with-vc-properties taking a
+ file list.
+ (vc-checkin): Take a file list argument rather than a file argument.
+ (vc-finish-logentry): Use the filelist passed by vc-start-entry.
+ (vc-diff-internal): Rewrite for filesets.
+ (vc-diff-sentinel): New function, tests whether changes were
+ written into a diff buffer.
+ (vc-diff): Rewrite for filesets.
+ (vc-version-diff): Rewrite for filesets.
+ (vc-print-log): Take a fileset argument.
+ (vc-revert): Revert the entire selected fileset, not just the
+ current buffer.
+ (vc-rollback): Roll back the entire selected fileset, if
+ possible. No longer accepts a prefix argument.
+ (vc-update): Merge new changes for the entire selected
+ fileset, not just the current buffer.
+ (vc-revert-file): Cope with with-vc-properties taking a file list.
+ (vc-default-dired-state-info): Add + status suffix if the file is
+ modified.
+ (vc-annotate-warp-version): Use the new diff machinery.
+ (vc-log-edit): Take a file list argument rather than a file argument.
-2006-12-02 Kim F. Storm <storm@cua.dk>
+2007-10-10 Michael Albinus <michael.albinus@gmx.de>
- * emulation/cua-base.el (cua-toggle-set-mark): Doc fix.
- (cua-repeat-replace-region): Make M-v more robust.
- (cua-paste-pop-rotate-temporarily): New defcustom.
- (cua-paste-pop): Use it.
- (cua-auto-mark-last-change): New defcustom.
- (cua-pop-to-last-change): New helper function.
- (cua-set-mark): Use them.
+ Sync with Tramp 2.1.11.
-2006-12-01 Nick Roberts <nickrob@snap.net.nz>
+ * net/tramp.el (tramp-open-connection-setup-interactive-shell):
+ Pacify byte compiler.
- * menu-bar.el (toggle-case-fold-search): Clarify doc/help string and
- mini-buffer message.
+ * net/trampver.el: Update release number.
-2006-12-01 Juanma Barranquero <lekktu@gmail.com>
+2007-10-09 Richard Stallman <rms@gnu.org>
- * descr-text.el (describe-char-unicodedata-file): Fix typo in docstring.
+ * play/gamegrid.el (gamegrid-setup-default-font): Use face-spec-set.
-2006-12-01 Ben North <ben@redfrontdoor.org>
+2007-10-09 Juanma Barranquero <lekktu@gmail.com>
- * paren.el: Fix the highlight overlay extension when the user types a
- sequence of char very fast just before the open parenthesis.
+ * follow.el: Require easymenu.
+ (follow-mode-hook, follow-mode): Doc fixes.
+ (follow-mode-off-hook): Mark as obsolete.
-2006-12-01 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
- * ps-mule.el: Eliminate Emacs 20 compatibility.
+ * window.el (mouse-autoselect-window-cancel): Don't cancel for
+ select-window or select-frame events.
+ (handle-select-window): When autoselecting window set input
+ focus. Restructure.
- * ps-print.el: Eliminate Emacs 20 & 21 compatibility.
- (ps-print-version): New version 6.7.
- (ps-print-quote): Replace '?\ ' by '?\s'.
+ * frame.el (focus-follows-mouse): Move to frame.c.
+ * cus-start.el (all): Add focus-follows-mouse.
-2006-11-30 Juanma Barranquero <lekktu@gmail.com>
+2007-10-08 Juanma Barranquero <lekktu@gmail.com>
- * hexl.el (hexl-goto-address, hexl-forward-char, hexl-forward-short)
- (hexl-forward-word, hexl-previous-line, hexl-beginning-of-1k-page)
- (hexl-end-of-1k-page): Doc fixes.
- (hexl-address-region, hexl-ascii-region, hexl-highlight-line-range):
- Fix typos in docstrings.
+ * bs.el (bs-mode): Make sure global-font-lock-mode doesn't
+ activate font-locking in the *buffer-selection* buffer.
+ (bs-show-sorted): Doc fix.
-2006-11-30 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * bs.el (bs--get-marked-string, bs--get-modified-string)
+ (bs--get-readonly-string, bs--get-size-string, bs--get-name)
+ (bs--get-mode-name, bs-mode): Fix typos in docstrings.
+ (bs--format-aux): Doc fix.
- * ido.el (ido-local-file-exists-p): New. Tell if a file exists
- locally, i.e. without using file name handlers.
- (ido-read-internal): Allow mono letter host names, avoiding the
- `c:' problem by testing if the file exists locally.
- (ido-complete, ido-make-file-list, ido-exhibit): Ditto.
+2007-10-08 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-11-30 Masatake YAMATO <jet@gyve.org>
+ * progmodes/gud.el (gud-gud-gdb-command-name): Fix typo in docstring.
- * hexl.el (hl-line-range-function, hl-line-face): Declare variables
- to avoid bytecomp warnings.
- (hexl-mode-old-ruler-function): New variable.
- (hexl-follow-line): Bind `hexl-mode-old-hl-line-range-function'
- and `hl-line-range-function' after `require' hl-line.
- Then bind `hl-line-range-function' and `hl-line-face'.
- Don't require frame. Don't use `with-no-warnings'.
- (hexl-activate-ruler): Store the original value of
- `ruler-mode-ruler-function' to `hexl-mode-old-ruler-function'.
- (hexl-mode-exit): Restore the original value of
- `ruler-mode-ruler-function'.
+2007-10-08 Nick Roberts <nickrob@snap.net.nz>
-2006-11-30 Alin C. Soare <alinsoar@voila.fr> (tiny change)
+ * progmodes/gud.el (gud-gud-gdb-command-name): New option.
+ (gud-gdb): New function for old M-x gdb (text command mode).
+ (gud-gdb-command-name, gdb): Move to...
- * hexl.el (hexl-mode-old-hl-line-range-function): New variable.
- (hexl-mode-old-hl-line-face): New variable.
- (hexl-mode, hexl-mode-exit): Fix the highlighting of the current
- line when exit from the hexl-mode.
+ * progmodes/gdb-ui.el: ...here and adapt doc string.
+ (gud-gdba-command-name, gdba): Delete.
-2006-11-30 Juanma Barranquero <lekktu@gmail.com>
+2007-10-08 Juanma Barranquero <lekktu@gmail.com>
- * emacs-lisp/bytecomp.el (byte-optimize, byte-compile-warnings):
+ * bs.el: Don't defvar `font-lock-verbose'.
+ (bs-config-clear, bs-kill, bs-string-show-normally, bs-sort-functions)
+ (bs--get-file-name): Fix typos in docstrings.
+ (bs--show-header): Use `dolist' instead of `mapcar'.
+ (bs-mode): Set `show-trailing-whitespace' to nil.
+ (bs-buffer-sort-function, bs-mouse-select-other-frame)
+ (bs-visits-non-file, bs-sort-buffer-interns-are-last, bs-show):
Doc fixes.
- * international/fontset.el (create-fontset-from-ascii-font)
- (create-fontset-from-fontset-spec, x-compose-font-name): Doc fixes.
- (fontset-name-p): Fix typo in docstring.
-
- * progmodes/cc-cmds.el (c-indent-exp): Fix typo in docstring.
-
-2006-11-30 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-bdf.el: Fix maintainer email.
-
- * ps-mule.el: Fix maintainer email. Define functions for Emacs 20
- compatibility.
-
- * ps-print.el: Fix maintainer email. Define functions for Emacs 20 &
- 21 compatibility.
- (ps-print-quote): Replace '?\s' by '?\ ' to keep compatibility with
- Emacs 20 & 21.
-
-2006-11-29 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlwave.el (idlwave-auto-fill):
- Remove paragraph-start let to prevent auto-fill giving up.
-
-2006-11-28 Juanma Barranquero <lekktu@gmail.com>
-
- * vt100-led.el (led-state): Fix typo in previous change.
-
-2006-11-27 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation):
- Fix interactive spec of the functions getting defined to make them
- work as documented.
-
-2006-11-28 Chong Yidong <cyd@stupidchicken.com>
-
- * startup.el (fancy-splash-screens): Hide initial splash buffer.
-
-2006-11-28 Kim F. Storm <storm@cua.dk>
-
- * icomplete.el (icomplete-tidy, icomplete-exhibit): Check that
- icomplete-mode is enabled.
-
-2006-11-28 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (require): Require gnus-sum during compilation
- to avoid problem with a macro call.
-
-2006-11-28 Glenn Morris <rgm@gnu.org>
-
- * emacs-lisp/authors.el (authors-aliases): Add new alias.
-
- * progmodes/fortran.el (fortran-font-lock-keywords-4): Add `min'.
- (fortran-window-create-momentarily): Do not need string-to-char.
-
-2006-11-28 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/bytecomp.el (byte-compile-get-constant):
- Replace incorrect use of assoc-default with a loop.
-
- * term.el (term-exec-1): Set envvar INSIDE_EMACS.
-
- * simple.el (next-error-find-buffer): Improve messages.
-
- * files.el (revert-buffer): Special error message if file
- is now not readable.
-
- * facemenu.el (facemenu-add-new-face): Improve doc strings of
- constructed commands.
-
- * comint.el (comint-exec-1): Provide Emacs version and `comint'
- in INSIDE_EMACS.
-
-2006-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * diff-mode.el (diff-mode-map): Add a binding for unified->context.
-
- * server.el: Remove spurious * in docstrings.
- (server-process-filter): Exit from recursive editing before processing
- a new request.
-
-2006-11-27 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/hideshow.el (hs-already-hidden-p): Move to end of
- line so hidden blocks will be correctly identified.
-
-2006-11-27 Juanma Barranquero <lekktu@gmail.com>
-
- * ledit.el (ledit-save-defun, ledit-mode):
- * resume.el (resume-emacs-args-buffer):
- * rot13.el (rot13-display-table, rot13-translate-table, rot13)
- (rot13-string, rot13-region, rot13-other-window, toggle-rot13-mode):
- * vmsproc.el (subprocess-input, start-subprocess, subprocess-command)
- (command-send-input, command-kill-line):
- * vt100-led.el (led-state, led-on): Fix typos in docstrings.
-
- * autoarg.el (autoarg-kp-mode): Doc fix.
-
- * emacs-lock.el (toggle-emacs-lock): Doc fix. Simplify.
- (emacs-lock-check-buffer-lock): Doc fix. Use `when'.
- (check-emacs-lock): Doc fix. Simplify.
-
- * iimage.el (iimage-mode-image-regex-alist): Doc fix.
- (iimage-mode-buffer): Fix typos in docstring.
-
- * misc.el (zap-up-to-char): Doc fix.
-
- * time-stamp.el: Fix comment and obsolescence string for old
- functions. Use `dolist' instead of `while'.
-
- * userlock.el (ask-user-about-lock-help): Fix typos in output message.
-
- * disp-table.el (standard-display-8bit, standard-display-default):
- * ebuff-menu.el (electric-buffer-list):
- * ehelp.el (electric-help-command-loop):
- * font-core.el (font-lock-mode):
- * help-macro.el (make-help-screen):
- * help.el (describe-minor-mode-completion-table-for-indicator)
- (lookup-minor-mode-from-indicator):
- * indent.el (tab-to-tab-stop, move-to-tab-stop):
- * info-look.el (info-lookup-guess-custom-symbol):
- * locate.el (locate-main-listing-line-p, locate-mode, locate-do-setup):
- * longlines.el (longlines-wrap-line):
- * macros.el (insert-kbd-macro):
- * menu-bar.el (menu-bar-update-buffers):
- * misc.el (copy-from-above-command):
- * mouse.el (mouse-popup-menubar, mouse-buffer-menu-alist):
- * newcomment.el (comment-indent):
- * novice.el (disabled-command-function):
- * sort.el (sort-fields-syntax-table):
- * subr.el (momentary-string-display):
- * tar-mode.el (tar-header-block-summarize)
- (tar-clear-modification-flags):
- * terminal.el (terminal-cease-edit, te-more-break-unwind, te-newline)
- (te-clear-rest-of-line, te-clear-rest-of-screen, te-clear-screen)
- (te-insert-lines, te-delete-lines, te-delete, te-insert-spaces)
- (te-delete-char, te-down-vertically-or-scroll):
- * time-stamp.el (time-stamp-string-preprocess):
- * tmm.el (tmm-add-one-shortcut): "?\ " -> "?\s".
-
-2006-11-26 Nick Roberts <nickrob@snap.net.nz>
-
- * speedbar.el (speedbar-timer-fn): Revert to old behaviour when not
- in GUD mode.
-
- * progmodes/gud.el (gud-install-speedbar-variables): Remove bindings:
- speedbar-expand-line-descendants, speedbar-contract-line-descendants.
-
-2006-11-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * progmodes/cc-vars.el (c-backslash-column): Add . at end of sentence.
-
-2006-11-26 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-mode.el (ada-which-compiler): Fix typo in docstring.
- (ada-compile-goto-error): Adapt to new argument profile of
- compilation-goto-locus in Emacs 22. Don't check if the various
- compile functions are defined; we already do "(require 'compile)".
-
-2006-11-26 Kim F. Storm <storm@cua.dk>
-
- * kmacro.el: Fix commentary.
-
-2006-11-26 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb): Explain how to run in text command mode
- more clearly. Say in error message that multiple debugging
- requires restarting GDB.
-
-2006-11-25 Juanma Barranquero <lekktu@gmail.com>
-
- * international/fontset.el (create-fontset-from-fontset-spec): Doc fix.
-
-2006-11-25 Pavel Kobiakov <pk_at_work@yahoo.com>
-
- * progmodes/flymake.el (flymake-posn-at-point-as-event): New function.
- (flymake-popup-menu): Use it instead of posn-at-point.
-
-2006-11-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * progmodes/cc-vars.el (c-backslash-column):
- Mention c-backslash-max-column in documentation for c-backslash-column.
-
-2006-11-24 Lars Hansen <larsh@soem.dk>
-
- * net/tramp.el (tramp-default-method): Under Windows, change from
- plink to pscp.
- (tramp-copy-failed-regexp, tramp-action-copy-failed): Add.
- (tramp-actions-copy-out-of-band):
- Add pair (tramp-copy-failed-regexp tramp-action-copy-failed).
- (tramp-action-out-of-band): Move "Permission denied" handling to
- tramp-action-copy-failed.
- (tramp-do-copy-or-rename-file-out-of-band): unwind-protect killing of
- process buffer.
-
-2006-11-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pgg-pgp.el (pgg-pgp-process-region): Change `args' from a list of
- strings to a single string. Quote `errors-file-name'.
- (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region, pgg-pgp-sign-region)
- (pgg-pgp-verify-region, pgg-pgp-insert-key, pgg-pgp-snarf-keys-region):
- Adjust calls. Use `shell-quote-argument'.
-
- * international/mule.el (load-with-code-conversion)
- (with-category-table): Use with-current-buffer.
- (after-insert-file-set-coding): Use restore-buffer-modified-p.
-
-2006-11-24 Eli Zaretskii <eliz@gnu.org>
-
- * mail/smtpmail.el (smtpmail-send-it):
- Copy buffer-file-coding-system from the mail buffer. Possibly add a
- MIME header for the message encoding.
- Bind coding-system-for-write around the call to mail-do-fcc.
- Use smtpmail-code-conv-from to encode queued mail messages.
-
-2006-11-24 Juanma Barranquero <lekktu@gmail.com>
-
- * tabify.el (tabify-regexp): Doc fix.
-
- * net/rcirc.el (rcirc-buffer-maximum-lines):
- * progmodes/gud.el (jdb): Fix space/tab mixup in docstrings.
-
- * play/gomoku.el (gomoku-terminate-game, gomoku-human-takes-back)
- (gomoku-prompt-for-move, gomoku-human-plays, gomoku-offer-a-draw):
- Fix typos in output messages.
- (gomoku-vector-length, gomoku-init-board): Fix typos in docstrings.
-
-2006-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * hexl.el (hexl-mode): Don't try to guess the max-address: get it from
- the horse's mouth.
- (hexlify-buffer): Don't re-encode an arg that's already encoded.
-
-2006-11-23 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-diff.el (ediff-exec-process, ediff-same-file-contents):
- Remove condition-case.
-
-2006-11-23 Glenn Morris <rgm@gnu.org>
-
- * progmodes/f90.el (f90-comment-indent): Do not move point in
- default case.
-
-2006-11-21 Romain Francoise <romain@orebokech.com>
-
- * emacs-lisp/find-func.el (find-library-name): Don't strip ".el"
- from library name (reverts change of 2005-10-25).
-
-2006-11-21 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * tutorial.el (tutorial--default-keys): Add newline and
- delete-backward-char bindings.
- (tutorial--detailed-help): Save excursion when finding keys.
- Correct warning string for M-x FOO case.
- (tutorial--display-changes): Print special keys in tutorial style.
- Tweak search regexp for changed keys.
-
-2006-11-21 Bob Rogers <rogers-emacs@rgrjr.dyndns.org> (tiny change)
-
- * thingatpt.el (thing-at-point-url-at-point): Don't add a
- redundant scheme.
-
-2006-11-21 Diane Murray <disumu@x3y2z1.net> (tiny change)
-
- * thingatpt.el (thing-at-point-uri-schemes): Add schemes that
- are new to the list at IANA. Also added irc, mms, mmsh.
-
-2006-11-20 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlw-help.el (idlwave-html-help-location):
- Fail gracefully for missing help packages.
- (idlwave-help-assistant-open-link): Open full links.
- (idlwave-help-assistant-help-with-topic): Direct help link.
-
- * progmodes/idlwave.el (idlwave-mode):
- Set add-log-current-defun-function.
- (idlwave-current-routine-fullname): Add, to support add-log.
- (idlwave-convert-xml-system-routine-info): Simplify XML parsing
- to reflect improvements to xml-parse-file.
- (idlwave-mode-menu-def): New binding for help-with-topic.
-
- * progmodes/idlw-shell.el (idlwave-shell-filter-directory):
- Handle extra newlines and spaces.
- (idlwave-shell-mode-map): Add help-with-topic.
-
-2006-11-20 Chong Yidong <cyd@stupidchicken.com>
-
- * tutorial.el (tutorial-warning-face): New face.
- (tutorial--detailed-help, tutorial--display-changes): Use it.
- (tutorial--find-changed-keys): Check ESC-prefix binding specially.
- Improve search pattern for occurrences of changed keys.
-
-2006-11-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * term/x-win.el (x-last-cut-buffer-coding): New variable.
- (x-select-text): Set it.
- (x-cut-buffer-or-selection-value): Check also x-last-cut-buffer-coding
- when checking for newness.
-
-2006-11-19 Juanma Barranquero <lekktu@gmail.com>
-
- * subr.el (posn-image):
- * progmodes/ebnf2ps.el (ebnf-stop-on-error): Fix typos in docstrings.
-
- * emacs-lisp/regexp-opt.el (regexp-opt): Doc fix.
-
-2006-11-19 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * progmodes/glasses.el (glasses-separate-parentheses-exceptions): New.
- Exceptions to the rule "add a space between an identifier and an
- opening parenthesis". Defaulted to the `#define' problem of cpp.
- (glasses-parenthesis-exception-p): New. Check if the region is an
- exception regarding to that.
- (glasses-make-readable): Use it.
- (glasses-convert-to-unreadable): Ditto. Modify the file also if
- `glasses-convert-on-write-p' and `glasses-separate-parentheses-p' are t.
-
-2006-11-19 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/bytecomp.el (byte-compile-if): Revert last change.
-
-2006-11-19 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-mode.el (ada-make-body): Fix typo.
-
- * progmodes/ada-xref.el (ada-make-body-gnatstub): Fix typo.
- (ada-xref-initialize): Fix typo. Use add-hook and remove-hook.
-
-2006-11-18 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/bytecomp.el (byte-compile-maybe-guarded): Check `and'
- conditions for function or variable bindings.
-
- * comint.el (comint-exec-1): Set EMACS and INSIDE_EMACS to t.
-
- * progmodes/compile.el (compilation-start): Ditto.
-
-2006-11-18 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (top): cl and custom are always required.
-
-2006-11-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * term/x-win.el (x-cut-buffer-or-selection-value): Decode text from
- cut-buffers with next-selection-coding-system if not nil.
-
-2006-11-17 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-fix-decoded-time): New function.
- (org-display-custom-time): Use `org-fix-decoded-time'.
-
-2006-11-17 Chong Yidong <cyd@stupidchicken.com>
-
- * menu-bar.el (menu-bar-games-menu): Remove yow.
-
-2006-11-17 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-scan-tags): Re-align code fixed.
- (org-detach-overlay): Rename from `org-detatch-overlay'.
- (org-table-convert-region): Insert space after column separator.
- (org-agenda-kill): New command.
- (org-metaleft): Call `org-outdent-item' on bullets.
- (org-metaright): Call `org-indent-item' on bullets.
- (org-timestamp-change): Set `org-last-changed-timestamp'.
- (org-current-line): Make sure (bolp) returns correct result.
- (org-agenda-change-all-lines): Make sure TODO are highlighted.
-
-2006-11-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs.el (cvs-retrieve-revision): Set buffer-file-coding-system.
+2007-10-08 Adam Hupp <adam@hupp.org> (tiny change)
-2006-11-16 Chong Yidong <cyd@stupidchicken.com>
+ * progmodes/gud.el (pdb): Specify file for gud-break.
- * mouse.el (global-map): Change 2006-08-16 fix to call
- mouse-yank-at-click explicitly, since mouse events are not carried
- over into keyboard macros.
+2007-10-08 Nick Roberts <nickrob@snap.net.nz>
-2006-11-16 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-file-internal): Use current buffer's file name as default
- choice for ido-find-alternate-file. Suggested by Matt Hodges.
-
-2006-11-15 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-doublecheck-at-and-shallower): Clarify docstring.
- (allout-inhibit-aberrance-doublecheck): Rename from
- allout-during-yank-processing. All callers changed.
- (allout-ascend): Provide for unusual case where some topic after
- the first in file is at lower depth than the first.
- (allout-shift-in): Ensure the offspring of the new containing
- topic are exposed.
- (allout-encrypt-string): Preserve the coding-system of the text,
- according to that of the containing buffer.
- (allout-toggle-subtree-encryption): When the text being encrypted
- requires a different coding system, offer to preserve the coding
- system using a file local var.
-
-2006-11-15 Simon Marshall <simon@gnu.org>
-
- * progmodes/cc-fonts.el (c-font-lock-declarators): Use c-at-toplevel-p
- to recognise "T t()" as a function declaration, rather than a
- variable instantiation, iff at the top-level or inside a class
- declaration. Suggested by Feng Li <fengli@gmail.com>.
-
-2006-11-14 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-xref.el (ada-parse-prj-file):
- Don't delete project buffer; user may want to edit it.
- (ada-xref-set-project-field, ada-xref-current-project-file)
- (ada-xref-current-project, ada-show-current-project)
- (ada-set-main-compile-application): New functions.
- (ada-xref-get-project-field, ada-require-project-file):
- Normalize use of ada-prj-default-project-file.
- (ada-gdb-application, ada-get-ada-file-name, ada-make-body-gnatstub):
- Normalize use of ada-require-project-file.
- (ada-prj-find-prj-file): Improve doc string, comments.
-
- * progmodes/ada-mode.el (ada-mode-version): Bump version.
- (ada-create-keymap): Add \C-c\C-m 'ada-set-main-compile-application.
- (ada-create-menu): Add ada-set-main-compile-application,
- ada-show-current-main, ada-show-current-project.
-
-2006-11-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/python.el (inferior-python-mode-syntax-table): New var.
- (inferior-python-mode): Use it.
-
-2006-11-14 Andreas Schwab <schwab@suse.de>
-
- * term/xterm.el (terminal-init-xterm): Add more key bindings.
-
-2006-11-13 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-copy-current-word): C-o copies region if active.
-
-2006-11-13 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-emph-face): Fix typo in variable name.
-
-2006-11-13 Juanma Barranquero <lekktu@gmail.com>
-
- * ediff.el (ediff-revision):
- * files.el (set-visited-file-name):
- * mail/rmailout.el (rmail-output-body-to-file):
- Use `format', not `message', in `y-or-n-p' call.
-
-2006-11-13 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-metaleft): Call `org-outdent-item' on bullets.
- (org-metaright): Call `org-indent-item' on bullets.
- (org-timestamp-change): Set `org-last-changed-timestamp'.
- (org-current-line): Make sure (bolp) returns correct result.
- (org-agenda-change-all-lines): Make sure highlighting TODO always works.
-
-2006-11-12 Richard Stallman <rms@gnu.org>
-
- * language/european.el (turkish-case-conversion-enable)
- (turkish-case-conversion-disable): New functions.
- ("Turkish" lang env): Use them.
-
- * international/characters.el (case table):
- Do nothing special for i and I.
-
- * subr.el (remove-overlays): Fix last change.
-
- * cus-edit.el (custom-save-all): Use find-file-visit-truename
- for visiting the custom file.
-
-2006-11-12 Markus Triska <triska@gmx.at>
-
- * play/handwrite.el (handwrite): Also process lines not ending
- with newline. Replace some position-fiddling with different
- logic. Improve performance.
-
-2006-11-12 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-xref.el (ada-prj-default-check-cmd): New variable,
- replacing deleted variable `ada-check-switch'.
- (ada-project-file-extension): Rename to `ada-prj-file-extension'.
- (ada-xref-project-files): Improve doc string.
- (ada-find-executable): New function.
- (ada-initialize-runtime-library): Use `ada-find-executable'.
- (ada-xref-set-default-prj-values): In compile commands, don't need
- `ada-cd-command'; `compile' does that more portably.
- Use ada-prj-default-check-cmd.
- (ada-parse-prj-file): Don't set 'debug_post_cmd, 'debug_pre_cmd
- properties if not specified in project file.
- (ada-goto-declaration): Display useful message for new error
- 'error-file-not-found.
- (ada-get-ada-file-name, ada-find-in-src-path): Signal new error
- 'error-file-not-found.
- (ada-get-all-references): Match latest ali syntax. Signal new
- error 'error-file-not-found.
- (ada-find-in-ali): Match latest ali syntax.
- (ada-make-filename-from-adaname): Handle different semantics of
- gnatkr in GNAT 3.15p vs later.
-
- * progmodes/ada-stmt.el (ada-func-or-proc-name): Match changes to
- ada-procedure-start-regexp.
- (ada-or-accept, ada-or-delay, ada-or-terminate): Improve doc string.
-
- * progmodes/ada-mode.el: Replace conditional (require 'ispell)
- with defvar.
- (ada-language-version): Rename ada05 -> ada2005.
- (ada-align-region-separate): Add `eval-when-compile'.
- (ada-name-regexp): Remove unneeded escapes in regexp character
- alternative.
- (ada-compile-goto-error-file-linenr-re): New constant.
- (ada-matching-start-re): Handle additional cases `declare',
- `procedure', `function'.
- (ada-compile-goto-error): Handle "... at line nn".
- (ada-mode): Clearer syntax, comments for ff-special-constructs.
- Delete support for old versions of `align'.
- (ada-search-prev-end-stmt): Handle additional keyword `private'.
- (ada-check-defun-name): Simplify handling of `declare'.
- (ada-goto-matching-start): Handle nested `begin ... end'.
- Handle `declare', `protected', `procedure', `function'.
- (ada-create-menu): Presence of arm95 is not conditional on using
- GNAT compiler.
-
-2006-11-12 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/re-builder.el (reb-mode): Set `blink-matching-paren' to
- nil in the *RE-Builder* buffer (it causes spurious error messages).
-
- * server.el (server-visit-files): If `minibuffer-auto-raise' has
- been set to t, respect it.
-
-2006-11-11 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-mode.el: Delete `eval-and-compile' around `require'.
- Delete commented out code for old Emacs versions. Autoloading of
- "ada-xref", "ada-prj" is useful even if compiler is not GNAT.
- (ada-mode-version): Bump version number.
- (ada-95-string-keywords, ada-2005-string-keywords)
- (ada-2005-keywords, ada-name-regexp): New constant.
- (ada-language-version, ada-procedure-start-regexp, ada-mode)
- (ada-font-lock-keywords): Add support for Ada 2005 keywords.
- (ada-package-start-regexp): Support private packages, include package
- name (for ada-set-point-accordingly).
- (ada-next-procedure, ada-previous-procedure)
- (ada-which-function-are-we-in): Match changes to
- ada-procedure-start-regexp.
- (ada-make-body): Make non-interactive; not a user function.
- (ada-make-subprogram-body): Improve doc string.
-
-2006-11-11 Romain Francoise <romain@orebokech.com>
-
- * progmodes/cperl-mode.el (cperl-mode): Before adding to it, make
- `compilation-error-regexp-alist' buffer-local, since we changed
- `compilation-error-regexp-alist-alist' locally.
-
-2006-11-11 Juanma Barranquero <lekktu@gmail.com>
-
- * server.el (server-visit-files): Bind `minibuffer-auto-raise'
- to the value of `server-raise-frame'.
-
-2006-11-11 Glenn Morris <rgm@gnu.org>
-
- * ido.el (ido-enable-prefix)
- * ses.el (ses-call-printer-return)
- * net/tramp.el (tramp-unified-filenames)
- * progmodes/cc-align.el (c-lineup-string-cont)
- * progmodes/compile.el (compilation-directory-matcher)
- * progmodes/ebnf2ps.el (ebnf-stop-on-error)
- * progmodes/vhdl-mode.el (vhdl-reset-active-high)
- (vhdl-clock-rising-edge)
- * textmodes/org.el (org-export-with-timestamps)
- (org-export-remove-timestamps-from-toc)
- (org-export-with-tags): Improve previous doc fixes.
-
-2006-11-11 Richard Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-mode-map):
- Bind C-c $ instead of M-RET.
-
-2006-11-10 Simon Marshall <simon@gnu.org>
-
- * progmodes/cc-fonts.el (c-font-lock-declarations): Don't overwrite
- fontification for "case" and "default" keywords.
-
-2006-11-10 Andreas Schwab <schwab@suse.de>
-
- * calendar/cal-dst.el (calendar-dst-check-each-year-flag):
- Avoid starting sentence with "nil".
-
-2006-11-10 Juanma Barranquero <lekktu@gmail.com>
-
- * server.el (server-raise-frame): New option.
- (server-switch-buffer): Use it.
-
-2006-11-10 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-many-windows): Start doc string
- with a capital.
-
-2006-11-10 Carsten Dominik <carsten.dominik@gmail.com>
-
- * textmodes/org.el (org-show-hierarchy-above)
- (org-show-following-heading): Fix typo in default value.
- (org-scan-tags): Make the search case-sensitive.
- (org-tags-sparse-tree): Don't overrule
- `org-show-following-heading' and `org-show-hierarchy-above'.
- (org-reveal): New command.
- (org-show-context): Rename from `org-show-hierarchy-above'.
- (org-fast-tag-selection-single-key): New option.
- (org-fast-tag-show-exit, org-set-current-tags-overlay): New functions.
- (org-tags-overlay): New variable.
- (org-agenda-todo-ignore-deadlines): New option.
- ("session"): Add circular data structure `org-mark-ring' to
- exceptions list in session.el.
- (org-agenda-window-setup, org-agenda-restore-windows-after-quit):
- New options.
- (org-agenda-quit): Use `org-agenda-restore-windows-after-quit'.
- (org-prepare-agenda, org-agenda-quit): Use `org-agenda-window-setup'.
- (org-pre-agenda-window-conf, org-blank-before-new-entry): New vars.
- (org-finalize-agenda): Activate bracket links in agenda.
- (org-at-timestamp-p, org-at-date-range-p): Additional argument
- INACTIVE-OK.
- (org-show-hierarchy-above, org-show-following-heading):
- List values allowed for fine-tuned configuration.
- (org-show-hierarchy-above): New argument CONTEXT, use the
- fine-tuned settings in `org-show-hierarchy-above' and
- `org-show-following-heading'.
- (org-display-custom-time): New function.
- (org-toggle-time-stamp-overlays, org-insert-time-stamp): New function.
- (org-display-custom-times, org-time-stamp-custom-formats):
- (org-maybe-intangible): New macro.
- (org-activate-bracket-links, org-hide-wide-columns):
- Use `org-maybe-intangible'.
- (org-open-file): Use `shell-quote-argument'.
- (org-display-internal-link-with-indirect-buffer): New option.
- (org-file-remote-p): Get regexp from list.
- (org-link-expand-abbrev): New function.
- (org-link-abbrev-alist): New option.
- (org-open-at-point, org-cleaned-string-for-export):
- Call `org-link-expand-abbrev'.
- (org-timeline, org-agenda-list, org-todo-list)
- (org-tags-view): Remove the KEEP-MODES argument.
- (org-finalize-agenda-hook): New hook.
- (org-get-alist-option): New function.
- (org-follow-timestamp-link): New function.
- (org-open-at-point): Call `org-follow-timestamp-link'.
- (org-log-note-marker, org-log-note-purpose)
- (org-log-note-window-configuration): New variables.
- (org-add-log-maybe, org-add-log-note, org-store-log-note): New funs.
- (org-log-note-headings): New option.
- (org-dblock-write:clocktable): Bug fix, removed infinite loop.
- (org-store-link): Support for dired-mode.
- (org-open-file): Substitute environment variables into filename.
- (org-last): New defsubst.
- (org-agenda-re-align-tags): New function.
- (org-agenda-align-tags-to-column): New option.
- (org-agenda-timeline): Group removed.
- (org-prepare-agenda, org-prepare-agenda-buffers)
- (org-run-agenda-series, org-timeline, org-agenda-list)
- (org-todo-list, org-tags-view): Call `org-agenda-prepare' and set
- the text property inticating the agenda type.
- (org-agenda-post-command-hook): Get agenda type from text property
- at point.
- (org-agenda): Handle command sets. Set `org-agenda-last-arguments'
- and obey `org-agenda-overriding-arguments'.
- (org-agenda-overriding-arguments, org-agenda-last-arguments): New vars.
- (org-agenda-goto-today, org-agenda-later, org-agenda-earlier)
- (org-agenda-week-view, org-agenda-day-view):
- Use `org-agenda-overriding-arguments' to make updating work with
- multi-block agendas.
- (org-agenda-prefix-format): Allow different formats for the
- different agenda entry types.
- (org-timeline-prefix-format): Option removed, use
- `org-agenda-prefix-format' instead.
- (org-prepare-agenda): New function.
- (org-select-timeline-window): Option removed, use
- `org-select-agenda-window' instead.
- (org-respect-restriction): Variable removed.
- (org-cmp-tag): New function.
- (org-agenda-sorting-strategy, org-entries-lessp):
- Implement sorting by last tag.
- (org-complete): Better completion in in-buffer option lines.
- (org-in-item-p): New function.
- (org-org-menu): Add entries for checkboxes.
- (org-cycle): Extra brouping in outline-regexp, because it is used
- in a search with "^" prepended.
- (org-provide-checkbox-statistics): New option.
- (org-set-font-lock-defaults): Highlight checkbox statistics.
- (org-update-checkbox-count-maybe)
- (org-get-checkbox-statistics-face): New functions.
- (org-update-checkbox-count): New command.
- (org-insert-item, org-toggle-checkbox):
- Call `org-update-checkbox-count-maybe'.
- (org-export-as-html): XEmacs compatibility for coding system.
- (org-force-cycle-archived): New command.
- (org-cycle-hide-archived-subtrees): Display message when ARCHIVE
- overrules cycling.
- (org-fix-position-after-promote): If the line contains only a todo
- keyword, add a final space.
- (org-promote-subtree, org-demote-subtree):
- Call `org-fix-position-after-promote'.
-
-2006-11-10 Glenn Morris <rgm@gnu.org>
-
- * calendar/cal-dst.el: Do not assume DST starts/ends on the same
- date in every year.
- (calendar-dst-check-each-year-flag): New customizable variable.
- (calendar-dst-find-data): New function, extracted from
- calendar-current-time-zone.
- (calendar-current-time-zone): Use calendar-dst-find-data.
- (calendar-dst-transition-cache): New variable.
- (calendar-dst-find-startend, calendar-dst-starts)
- (calendar-dst-ends): New functions.
- (calendar-daylight-savings-starts)
- (calendar-daylight-savings-ends): Change value to use
- calendar-dst-starts, calendar-dst-ends; respectively.
-
- * progmodes/f90.el (f90-indent-region): Bind case-fold-search to t.
-
- * ido.el (ido-enable-prefix)
- * ses.el (ses-call-printer-return)
- * net/tramp.el (tramp-unified-filenames)
- * progmodes/cc-align.el (c-lineup-string-cont)
- * progmodes/compile.el (compilation-directory-matcher)
- * progmodes/ebnf2ps.el (ebnf-stop-on-error)
- * progmodes/gdb-ui.el (gdb-many-windows)
- * progmodes/vhdl-mode.el (vhdl-reset-active-high)
- (vhdl-clock-rising-edge)
- * textmodes/org.el (org-export-with-timestamps)
- (org-export-remove-timestamps-from-toc, org-export-with-tags)
- (org-read-date): Doc fix (Nil -> nil).
-
-2006-11-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * term/x-win.el (x-select-text, x-cut-buffer-or-selection-value):
- Encode/decode text to/from cut buffers to/from iso-latin-1 only.
-
-2006-11-10 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs--window-for-buffer): Remove.
- (bs--show-with-configuration): Use `get-window-with-predicate'
- instead of `bs--window-for-buffer'.
-
-2006-11-10 Kenichi Handa <handa@m17n.org>
-
- * files.el (revert-buffer): Fix previous change.
-
-2006-11-09 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs--redisplay): Fix typo in docstring.
- (bs--window-config-coming-from): Make frame-local.
- (bs--restore-window-config): New function.
- (bs-kill, bs-select, bs-select-other-window)
- (bs-select-other-frame): Use it.
- (bs--window-for-buffer): Return as soon as a matching buffer is found.
- (bs--show-with-configuration): Save the window configuration as a
- frame local var, and only if *buffer-selection* is not already
- visible on this frame.
-
-2006-11-08 Chong Yidong <cyd@stupidchicken.com>
-
- * vc-svn.el (vc-svn-admin-directory): New var.
- (vc-svn-registered, vc-svn-responsible-p)
- (vc-svn-repository-hostname): Use it.
- Suggested by arit93@yahoo.com.
-
-2006-11-08 Juanma Barranquero <lekktu@gmail.com>
-
- * ldefs-boot.el: Regenerate.
-
-2006-11-08 Alan Mackenzie <acm@muc.de>
-
- * emacs-lisp/lisp.el (beginning-of-defun-raw): Code up the
- case (eq open-paren-in-column-0-is-defun-start nil) by searching
- for least nested open-paren.
-
-2006-11-08 Romain Francoise <romain@orebokech.com>
-
- * subr.el (remove-overlays): Fix typo in last change.
-
-2006-11-08 Richard Stallman <rms@gnu.org>
-
- * subr.el (remove-overlays): Call overlay-recenter.
-
-2006-11-08 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * printing.el (pr-alist-custom-set, pr-ps-utility-custom-set)
- (pr-ps-name-custom-set, pr-txt-name-custom-set): Return back the old
- behaviour.
- (pr-menu-bind): Act on global-map instead of menu-bar-file-menu
- directly.
-
-2006-11-08 Juanma Barranquero <lekktu@gmail.com>
-
- * ido.el (ido-ignore-extensions, ido-show-dot-for-dired)
- (ido-max-dir-file-cache, ido-decorations)
- (ido-rewrite-file-prompt-functions, ido-use-mycompletion-depth)
- (ido-magic-backward-char, ido-enter-dired)
- (ido-enter-insert-buffer, ido-enter-insert-file, ido-dired)
- (ido-list-directory, ido-first-match, ido-only-match)
- (ido-subdir, ido-indicator): Fix typos in docstrings.
- (ido-buffer-internal, ido-completion-help): Fix typos in messages.
- (ido-read-internal): Fix typo in error message.
-
-2006-11-08 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (set-default-coding-systems):
- Always set default-file-name-coding-system to utf-8 for Mac Darwin.
-
-2006-11-08 Juanma Barranquero <lekktu@gmail.com>
-
- * makefile.w32-in (setwins): Remove.
- (WINS_ALMOST): New macro.
- (WINS): Use it.
- (autoloads): Don't extract autoloads from files in obsolete/.
-
-2006-11-07 Chong Yidong <cyd@stupidchicken.com>
-
- * whitespace.el (whitespace-buffer): Call remove-overlays after
- overlay-recenter for performance. Suggested by Martin Rudalics.
-
-2006-11-07 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-default-method): scp is the default method.
-
-2006-11-07 Juanma Barranquero <lekktu@gmail.com>
-
- * server.el (server-start): Save also the Emacs pid in the server file.
-
-2006-11-07 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex-cite.el (reftex-pop-to-bibtex-entry): Preserve
- point when displaying a bibtex cross reference in the echo area.
-
-2006-11-06 Juanma Barranquero <lekktu@gmail.com>
-
- * international/mule.el (make-char): Fix typo in docstring.
- (load-with-code-conversion, charsetp): Doc fixes.
-
- * international/ja-dic-cnv.el (skkdic-convert):
- * cus-edit.el (hook): Fix typo in docstring.
-
-2006-11-06 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (custom-mode-map): Move defvar above code using it.
- (custom-mode-link-map): New variable.
- (custom-group-link, custom-manual): Use follow-link.
-
-2006-11-06 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el: Fix typo in name of author of bibtex.el,
- "Mark Shapiro" -> "Marc Shapiro". Update his email address.
-
-2006-11-06 Richard Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-correct-word-before-point):
- New function broken out of flyspell-correct-word.
- (flyspell-mode-map): Bind it to M-RET.
- (flyspell-correct-word): Call it.
-
- * textmodes/fill.el (fill-minibuffer-function): New function.
- (fill-paragraph): Bind fill-paragraph-function to
- fill-minibuffer-function.
-
- * ruler-mode.el (ruler-mode-map): Add bindings for up-events
- so that they aren't undefined.
-
- * dired.el (dired-readin): Locally bind file-name-coding-system.
-
- * bindings.el: Shorten and clarify usual mode line mouse help string.
-
- * Makefile.in (autoloads): Don't include `obsolete'.
-
-2006-11-06 Chong Yidong <cyd@stupidchicken.com>
-
- * printing.el (pr-alist-custom-set, pr-ps-utility-custom-set)
- (pr-ps-name-custom-set, pr-txt-name-custom-set): Don't update the
- Printing menu if it's not initialized.
- (pr-menu-bind): Act on menu-bar-file-menu directly.
-
-2006-11-06 Juanma Barranquero <lekktu@gmail.com>
-
- * help.el (view-emacs-news): Fix typo in error message.
-
- * menu-bar.el (menu-bar-update-buffers): Fix typo in menu entry.
-
- * shadowfile.el (shadow-define-regexp-group)
- (shadow-literal-groups, shadow-insert-var): Doc fixes.
- (shadow-read-files): Fix typo in message.
- (shadow-inhibit-overload, shadow-find, shadow-suffix)
- (shadow-site-match, shadow-write-todo-file, shadow-insert-var)
- (shadow-suffix, shadow-site-match, shadow-expand-file-name)
- (shadow-file-match): Fix typos in docstrings.
-
- * terminal.el (terminal-emulator): Fix typo in message.
-
- * emacs-lisp/authors.el (authors-fixed-entries): Fix typo.
-
- * emacs-lisp/lselect.el (x-kill-primary-selection)
- (x-delete-primary-selection, x-copy-primary-selection):
- Fix typos in error messages.
-
- * emulation/edt-mapper.el: Fix typo in interactive message.
-
- * mail/emacsbug.el (report-emacs-bug): Fix typos in output message.
-
- * textmodes/ispell.el (ispell, ispell-local-dictionary-alist)
- (ispell-help): Fix typos in docstrings.
- (ispell-help): Fix typo in output message.
-
- * allout.el (allout-adjust-file-variable)
- (allout-passphrase-verifier-string)
- (allout-passphrase-hint-string)
- (allout-toggle-current-subtree-encryption):
- * apropos.el (apropos-synonyms):
- * cus-edit.el (hook):
- * emacs-lock.el (emacs-lock-from-exiting):
- * follow.el (follow-avoid-tail-recenter-p):
- * hexl.el (hexl-mode):
- * mouse-copy.el (mouse-copy-work-around-drag-bug):
- * mouse.el (mouse-set-font):
- * resume.el (resume-emacs-args-file):
- * rfn-eshadow.el (file-name-shadow-tty-properties):
- * t-mouse.el (t-mouse-process, t-mouse-mode):
- * emacs-lisp/cust-print.el (custom-print-install)
- (custom-print-uninstall, custom-format):
- * emacs-lisp/shadow.el (list-load-path-shadows):
- * emulation/tpu-edt.el (tpu-help-text)
- (tpu-save-all-buffers-kill-emacs, tpu-emacs-replace)
- (tpu-reset-control-keys):
- * emulation/vip.el (vip-emacs-local-map)
- (vip-change-mode-to-emacs):
- * emulation/viper.el (viper-mode, viper-set-hooks)
- (viper-major-mode-modifier-list):
- * emulation/viper-init.el (viper-emacs-state-cursor-color):
- * emulation/viper-keym.el (viper-emacs-kbd-map)
- (viper-toggle-key):
- * mail/feedmail.el (feedmail-queue-reminder)
- (feedmail-queue-reminder-alist, feedmail-confirm-outgoing)
- (feedmail-confirm-outgoing-timeout, feedmail-nuke-bcc)
- (feedmail-nuke-resent-bcc, feedmail-fill-to-cc-fill-column)
- (feedmail-sender-line, feedmail-force-binary-write)
- (feedmail-from-line, feedmail-deduce-envelope-from)
- (feedmail-x-mailer-line, feedmail-message-id-generator)
- (feedmail-date-generator, feedmail-fiddle-plex-user-list)
- (feedmail-enable-spray, feedmail-spray-this-address)
- (feedmail-spray-address-fiddle-plex-list, feedmail-enable-queue)
- (feedmail-queue-runner-confirm-global)
- (feedmail-ask-before-queue-prompt)
- (feedmail-ask-before-queue-reprompt)
- (feedmail-prompt-before-queue-standard-alist)
- (feedmail-prompt-before-queue-user-alist)
- (feedmail-prompt-before-queue-help-supplement)
- (feedmail-queue-use-send-time-for-message-id)
- (feedmail-queue-default-file-slug, feedmail-queue-fqm-suffix)
- (feedmail-mail-send-hook-splitter, feedmail-mail-send-hook)
- (feedmail-mail-send-hook-queued)
- (feedmail-confirm-addresses-hook-example)
- (feedmail-last-chance-hook, feedmail-before-fcc-hook)
- (feedmail-queue-runner-mode-setter)
- (feedmail-queue-alternative-mail-header-separator)
- (feedmail-queue-runner-message-sender)
- (feedmail-buffer-eating-function, feedmail-binmail-template)
- (feedmail-run-the-queue-no-prompts)
- (feedmail-run-the-queue-global-prompt)
- (feedmail-queue-subject-slug-maker, feedmail-fiddle-header)
- (feedmail-envelope-deducer, feedmail-fiddle-date)
- (feedmail-default-message-id-generator)
- (feedmail-fiddle-message-id, feedmail-fiddle-x-mailer)
- (feedmail-fiddle-spray-address, feedmail-deduce-address-list):
- * mail/vms-pmail.el (vms-pmail-save-and-exit, vms-pmail-abort)
- (vms-pmail-setup):
- * play/dunnet.el (dun-help):
- * play/handwrite.el (handwrite):
- * play/hanoi.el (hanoi-unix-64):
- * progmodes/idlwave.el (idlwave-rescan-asynchronously):
- * textmodes/enriched.el (fixed):
- * textmodes/org.el (org-file-apps)
- (org-emphasis-regexp-components, org-emphasis-alist):
- * textmodes/texinfmt.el (batch-texinfo-format):
- Fix typos in docstrings.
-
-2006-11-05 Juanma Barranquero <lekktu@gmail.com>
-
- * loadhist.el (read-feature): Don't complete features not loaded
- from a file (which make `unload-feature' to fail).
-
-2006-11-05 Reiner Steib <Reiner.Steib@gmx.de>
-
- * add-log.el (add-log-time-zone-rule): Mark as safe-local-variable.
-
-2006-11-05 Chong Yidong <cyd@stupidchicken.com>
-
- * startup.el (command-line-1): Kill emacs if the last frame is
- deleted while evaluating the command-line arguments.
-
-2006-11-05 Richard Stallman <rms@gnu.org>
-
- * startup.el (init-file-had-error): Add doc string.
- (fancy-splash-text, fancy-splash-head, fancy-splash-tail):
- Use fixed-width font for keyboard key descriptions.
-
- * cus-edit.el (custom-save-all): Error if saving in .emacs
- and it had an error when loaded.
-
- * dired-aux.el (dired-copy-file-recursive): Catch errors
- from recursive copies in the loop, around the recursive call.
-
-2006-11-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * battery.el (battery-linux-proc-acpi): Search an ac_adapter in
- `/proc/acpi/ac_adapter/*'. Ditto for the thermometers in
- `/proc/acpi/thermal_zone/*'.
- (battery-search-for-one-match-in-files): New. Search a regexp in
- the content of some files.
-
-2006-11-05 Martin Rudalics <rudalics@gmx.at>
-
- * window.el (mouse-autoselect-window-now): Remove variable.
- (mouse-autoselect-window-state): New variable.
- (mouse-autoselect-window-start, mouse-autoselect-window-cancel)
- (mouse-autoselect-window-select, handle-select-window):
- Rewritten to make mouse-autoselect-window-timer a one-shot timer.
- Suspend delayed autoselection during menu or popup dialog.
-
- * info-look.el (info-lookup-guess-custom-symbol): New function
- for retrieving symbol at point in custom buffers.
- (top level) <info-lookup-maybe-add-help>: Add backquote and
- comma to ignored characters in regexps of help specifications
- for emacs-lisp-mode and lisp-interaction-mode. This permits
- looking up symbols in `...' and after a comma. Add help
- specifications for custom-mode and help-mode.
-
-2006-11-04 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmail.el (rmail-redecode-body): New optional argument RAW.
- Don't encode body if RAW is non-nil, or if the old encoding is
- identical to the new encoding, or if the body contains only
- eight-bit-* characters.
-
-2006-11-04 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
-
- * faces.el (faces-sample-overlay, describe-face): Revert last changes.
- (faces-sample-overlay): Remove variable.
- (describe-face): Insert sample text in the face being described.
-
-2006-11-04 Martin Rudalics <rudalics@gmx.at>
-
- * whitespace.el (whitespace-indent-regexp): Make this match any
- multiples of eight spaces near the beginning of a line.
- (whitespace-buffer): Use `remove-overlays' instead of
- `whitespace-unhighlight-the-space' and `overlay-recenter' to
- speed up overlay handling.
- (whitespace-buffer-leading, whitespace-buffer-trailing):
- Make these functions highlight the text removed by
- `whitespace-buffer-leading-cleanup' and
- `whitespace-buffer-trailing-cleanup' respectively.
- (whitespace-buffer-search): Use `with-local-quit'.
- Move `format' out of loop to speed up scanning larger buffers.
- (whitespace-unhighlight-the-space): Remove `remove-hook' since
- that function is never added to a hook.
- (whitespace-spacetab-regexp, whitespace-ateol-regexp)
- (whitespace-buffer-leading-cleanup)
- (whitespace-refresh-rescan-list): Fix docstrings.
-
-2006-11-03 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-during-yank-processing): Cue for inhibiting
- aberrance processing during yanks.
- (allout-doublecheck-at-and-shallower): Reduce the limit to reduce
- the amount of yanked topics that can be aberrant.
- (allout-do-doublecheck): Encapsulate this multiply-used recipe in
- a function, and supplement with inihibition of doublechecking
- during yanks.
- (allout-beginning-of-line, allout-next-heading)
- (allout-previous-heading, allout-goto-prefix-doublechecked)
- (allout-back-to-current-heading, allout-next-visible-heading)
- (allout-next-sibling): Use new allout-do-doublecheck function.
- (allout-next-sibling): Ensure we made progress when returning
- other than nil.
- (allout-rebullet-heading): Preserve text property annotations
- indicating the text was hidden, if it was.
- (allout-kill-line): Remove any added was-hidden annotations.
- (allout-kill-topic): Remove any added was-hidden annotations.
- (allout-annotate-hidden): Inhibit adding was-hidden text
- properties to the undo list.
- (allout-deannotate-hidden): New function to remove was-hidden
- annotation.
- (allout-hide-by-annotation): Use new allout-deannotate-hidden.
- (allout-remove-exposure-annotation): Replace by
- allout-deannotate-hidden.
- (allout-yank-processing): Signal that yank processing is happening
- with allout-during-yank-processing. Also, wrap
- allout-unprotected's closer to the text changes, for easier
- debugging. We need to inhibit-field-text-motion explicitly, in
- lieu of the encompassing allout-unprotected.
- (outlineify-sticky): Adjust criteria for triggering new outline
- decorations to presence or absence of any topics, not just a topic
- at the beginning of the buffer.
-
-2006-11-03 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs--show-all, bs--redisplay):
- * cus-edit.el (custom-unlispify-menu-entries)
- (custom-unlispify-tag-names, custom-prompt-variable):
- * expand.el (expand-pos):
- * speedbar.el (speedbar-generic-list-tag-p):
- * wid-edit.el (widget-image-enable):
- * emacs-lisp/checkdoc.el (checkdoc-rogue-space-check-engine):
- * emacs-lisp/find-func.el (find-function-noselect)
- (find-function, find-variable-noselect, find-variable)
- (find-definition-noselect, find-face-definition):
- * mail/rmail-spam-filter.el (rsf-scanning-messages-now):
- * net/eudc-vars.el (eudc-expansion-overwrites-query):
- * progmodes/ada-xref.el (ada-find-in-ali):
- * textmodes/flyspell.el (flyspell-check-tex-math-command):
- * textmodes/org.el (org-copy-subtree):
- * textmodes/table.el (table--row-column-insertion-point-p):
- Use "non-nil" in docstrings.
-
-2006-11-03 Mark Davies <mark@mcs.vuw.ac.nz>
-
- * sort.el (sort-columns): Set the field separator to tab; on
- NetBSD, sort complains if "\n" is used as field separator.
-
-2006-11-03 NIIMI Satoshi <sa2c@sa2c.net>
-
- * emacs-lisp/pp.el (pp-eval-last-sexp): Evaluate target sexp.
-
-2006-11-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * server.el (server-auth-key): Remove. Replace by a process-property.
- (server-start): Don't remove the file of the previous process, but
- instead clear out the place for the new file.
- (server-start): Set the :auth-key property.
- (server-process-filter): Use the :auth-key property.
-
-2006-11-02 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode-map): No longer copy
- `outline-mode-map' explicitly - this is already done by
- `define-derived-mode'.
-
-2006-11-02 Juanma Barranquero <lekktu@gmail.com>
-
- * server.el (server-visit-files): Use `when'.
- (server-process-filter): When authentication fails, send error
- message to client. Wrap `process-send-region' in `ignore-errors'
- instead of `condition-case', and remove misleading comment.
-
-2006-11-01 Juri Linkov <juri@jurta.org>
-
- * simple.el (yank): Doc fix.
-
-2006-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * server.el: Try and fit within 80 columns.
- (server-start): Make the auth file unreadable by other users.
-
-2006-10-31 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * battery.el (battery-linux-proc-acpi): Prevent range error when
- `full-capacity' is 0.
-
-2006-10-31 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
-
- * faces.el (faces-sample-overlay): New defvar.
- (faces-sample-overlay): New function to show face sample text.
- (describe-face): Use it.
-
-2006-10-31 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-stmt.el: Change maintainer, apply
- whitespace-cleanup, checkdoc.
- (ada-func-or-proc-name): Add doc string.
-
- * progmodes/ada-prj.el (ada-prj-new): Change maintainer, apply
- whitespace-cleanup, checkdoc. Minor improvements to many doc
- strings and comments.
- (ada-prj-display-page): Change buffer name to more accurately
- reflect function.
-
- * progmodes/ada-xref.el: Change maintainer, apply
- whitespace-cleanup, checkdoc. Minor improvements to many doc
- strings and comments. Don't look for `gvd' or `ddd' debuggers.
- (ada-compile-current): Don't add newlines to commands.
-
-2006-10-31 Juanma Barranquero <lekktu@gmail.com>
-
- * server.el: Add support for TCP sockets.
- (server-use-tcp, server-host, server-auth-dir): New options.
- (server-auth-key): New variable.
- (server-ensure-safe-dir): Create nonexistent parent dirs.
- Ignore Unix-style file modes on Windows.
- (server-start): Crete a TCP or Unix socket according to the value
- of `server-use-tcp'. For TCP sockets, create the id/auth file in
- `server-auth-dir' directory.
- (server-process-filter): Delete process if authentication
- fails (which never happens for Unix sockets).
-
-2006-10-30 David Kastrup <dak@gnu.org>
-
- * subr.el (add-to-list): Don't continue checking if a match has
- been found.
-
-2006-10-30 Chong Yidong <cyd@stupidchicken.com>
-
- * tutorial.el: Move defvars to avoid bytecomp warnings.
- (tutorial--find-changed-keys): Check if viper-current-state is
- bound before using it.
- (help-with-tutorial): Check if viper-tutorial is defined before
- using it.
-
-2006-10-30 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * help-fns.el (help-with-tutorial): Move to tutorial.el.
-
- * tutorial.el: New file.
- (help-with-tutorial): Move here from help-fns.el. Add help for
- rebound keys. Fix resume of tutorial.
- (tutorial--describe-nonstandard-key, tutorial--sort-keys)
- (tutorial--find-changed-keys, tutorial--display-changes)
- (tutorial--saved-dir, tutorial--saved-file)
- (tutorial--save-tutorial): New functions to support the changes in
- help-with-tutorial.
-
-2006-10-30 Kenichi Handa <handa@m17n.org>
-
- * files.el (revert-buffer): If a unibyte buffer is being reverted
- with a coding system for multibyte, set buffer multibyte before
- calling insert-file-contents.
-
-2006-10-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * server.el (server-select-display): Use a dummy buffer to detect when
- the frame is later used.
- (server-select-display): New function.
- (server-process-filter): Use it to detect unused temp frames.
-
-2006-10-29 Stephen Leake <stephen_leake@stephe-leake.org>
-
- * progmodes/ada-mode.el: Change maintainer, apply
- whitespace-clean, checkdoc. Minor improvements to many doc strings.
- (ada-mode-version): New function.
- (ada-create-menu): Menu operations are available for all supported
- compilers.
-
-2006-10-29 Lars Hansen <larsh@soem.dk>
-
- * net/tramp.el (with-parsed-tramp-file-name): Correct debug spec.
- Highlight as keyword.
- (tramp-do-copy-or-rename-file): Correct data for 'file-already-exists.
- Don't call tramp-method-out-of-band-p for local files.
- (tramp-touch): Quote file name.
-
-2006-10-28 Glenn Morris <rgm@gnu.org>
-
- * calendar/calendar.el (cal-html-cursor-month)
- (cal-html-cursor-year): Add autoloads for this new package.
- (calendar-mode-map): Bind cal-html-cursor-month, cal-html-cursor-year.
-
-2006-10-28 Anna M. Bigatti <bigatti@dima.unige.it>
-
- * calendar/cal-html.el: New file.
-
-2006-10-28 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/authors.el (authors-aliases): Update.
-
-2006-10-27 Chong Yidong <cyd@stupidchicken.com>
-
- * version.el (emacs-version): Bump version number to 22.0.90.
-
-2006-10-26 John W. Eaton <jwe@octave.org>
-
- * progmodes/octave-inf.el (inferior-octave-has-built-in-variables):
- New defvar.
- (inferior-octave-resync-dirs): Check to see whether Octave has
- built-in variables and set inferior-octave-has-built-in-variables.
- Check inferior-octave-has-built-in-variables to decide whether to
- send commands that set built-in variables or call functions to
- change Octave's behavior.
- Send "disp (pwd ())" to Octave instead of just "pwd".
- (inferior-octave-startup): Send "more off" to Octave instead of
- "page_screen_output = 0".
-
-2006-10-26 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/cl-indent.el (lisp-indent-259): Indent nil's in the
- pattern normally.
-
-2006-10-26 Nick Roberts <nickrob@snap.net.nz>
-
- * bindings.el (mode-line-mode-menu): Remove bindings for global
- minor modes (line/column number) as they are on the menubar.
-
-2006-10-25 Juanma Barranquero <lekktu@gmail.com>
-
- * term/w32-win.el (x-handle-name-switch): Doc fix.
- (w32-standard-fontset-spec): Fix typo in docstring.
-
- * midnight.el (midnight-buffer-display-time): Doc fix.
- (clean-buffer-list-kill-never-buffer-names): Add "*server*".
-
-2006-10-23 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-cmd.el (viper-prefix-arg-com): Define gg as G0.
-
- * emulation/viper-ex.el (ex-read): Quote file argument.
-
- * ediff-diff.el (ediff-same-file-contents): Expand file names.
-
- * ediff-mult.el (ediff-append-custom-diff): Quote shell file arguments.
-
-2006-10-22 Martin Rudalics <rudalics@gmx.at>
-
- * textmodes/flyspell.el (flyspell-check-region-doublons):
- Fix last fix.
-
-2006-10-23 Nick Roberts <nickrob@snap.net.nz>
-
- * bindings.el (mode-line-mode-menu): List global minor modes
- before local ones.
-
-2006-10-23 Kim F. Storm <storm@cua.dk>
-
- * subr.el (add-to-list): Optimize if compare-fn is `eq' or `eql'.
- (sit-for): If last command was a prefix arg, add the read-ahead
- event to unread-command-events as (t . EVENT) so it will be added
- to this-command-keys by read-key-sequence.
-
-2006-10-22 Martin Rudalics <rudalics@gmx.at>
-
- * textmodes/flyspell.el (flyspell-word): Skip past all previous
- whitespace when checking doublons.
- (flyspell-check-region-doublons): Fix doublon regexp.
- (flyspell-highlight-incorrect-region): Highlight doublons using
- flyspell-duplicate face.
-
- * progmodes/cperl-mode.el (cperl-invalid-face): Fix defcustom.
-
-2006-10-22 John Wiegley <johnw@newartisans.com>
-
- * progmodes/python.el (python-use-skeletons): python-mode was
- auto-inserting templates (for those with abbrev-mode on), not only
- by default -- *but without a configuration variable to disable
- it*. This rendered python-mode completely useless for me, so I
- have added `python-use-skeletons', which is now off by default.
-
-2006-10-22 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/cperl-mode.el (cperl-mode): Don't assume
- font-lock-multiline is auto-local (it's not).
- (cperl-windowed-init): Ensure that cperl-font-lock-multiline is
- initialized before calling cperl-init-faces.
-
-2006-10-22 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-info-stack-custom): Don't try to give
- gdb-stack-position a value when there is no fringe.
-
- * bindings.el (mode-line-mode-menu): Disable auto-revert-tail-mode
- indicator if not visiting a file.
+ * progmodes/gud.el (gdb): Make graphical mode the default and
+ switch to text command mode if appropriate, i.e., reverse previous
+ arrangement.
+ (gud-gdb-marker-filter): Adapt for above change.
-2006-10-20 David Kastrup <dak@gnu.org>
+ * progmodes/gdb-ui.el (gdb-init-1): Don't set the values
+ gud-minor-mode and gud-marker-filter.
+ (gdb-fullname-regexp): New variable.
+ (gud-gdba-marker-filter): Use it to switch to text command
+ mode if appropriate.
- * window.el (kill-buffer-and-window): Fix a bug where an aborted
- operation would still cause some window to collapse later.
+2007-10-08 Nick Roberts <nickrob@snap.net.nz>
-2006-10-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * progmodes/gud.el (gud-display-line): Find source buffer even when
+ GUD buffer has its own frame.
- * vc.el (vc-switch-backend): Try to be more careful with unwanted
- side-effect due to mixing various backends's file properties.
+2007-10-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * vc-svn.el (vc-svn-parse-status): Remove unused arg `localp'.
- Add arg `filename' instead. Don't set vc-backend if `filename' is set.
- Return `filename's status if applicable. Update callers.
+ * term/x-win.el (icon-map-list): Set to nil for 22.1 compatibility.
-2006-10-19 Kenichi Handa <handa@m17n.org>
+2007-10-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * international/kkc.el (kkc-region): When a key sequence is not
- defined, append (this-single-command-raw-keys) to
- unread-input-method-events.
+ * term/x-win.el (x-gtk-stock-map): Version is 22.2.
-2006-10-19 Juanma Barranquero <lekktu@gmail.com>
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
- * progmodes/ada-mode.el (ada-in-string-p): Doc fix.
+ * allout.el (allout-before-change-handler): Replace got-char by
+ goto-char.
-2006-10-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * version.el (emacs-version): Use mac-carbon-version-string.
+ * vc-svn.el (vc-svn-resolve-when-done, vc-svn-find-file-hook): New funs.
+ Used to try and automatically enabled smerge-mode in the presence of
+ conflicts and to call `svn resolved' when the conflicts are gone.
+ (vc-svn-parse-status): Remember the svn-specific status.
- * term/macterm.el (res-geometry): Apply 2006-10-18 change for x-win.el.
+2007-10-08 Eli Zaretskii <eliz@gnu.org>
-2006-10-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * menu-bar.el (menu-bar-search-documentation-menu): Rename from
+ menu-bar-apropos-menu. All users changed.
+ (menu-bar-help-menu): Change menu symbols to better match the text
+ displayed by the menu.
- * select.el (ccl-check-utf-8, string-utf-8-p): New functions (by
- Kenichi Handa).
- (xselect-convert-to-string): Decline requests for UTF8_STRING if
- the selection is not UTF-8.
+2007-10-08 Dan Nicolaescu <dann@ics.uci.edu>
-2006-10-18 Juanma Barranquero <lekktu@gmail.com>
+ * files.el (file-name-sans-versions): Use [:alnum:] and also allow
+ #, @, : and ^.
- * progmodes/ada-mode.el (ada-83-string-keywords)
- (ada-last-which-function-line ada-no-auto-case, ada-indent-region)
- (ada-which-compiler, ada-align-modes, ada-adjust-case-buffer)
- (ada-looking-at-semi-private, ada-get-body-name):
- Fix typos in docstrings.
- (ada-create-case-exception, ada-create-case-exception-substring):
- Fix typos in error messages.
- (ada-goto-matching-end, ada-narrow-to-defun): Doc fixes.
+2007-10-08 Dan Nicolaescu <dann@ics.uci.edu>
-2006-10-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * pcvs-defs.el (cvs-mode-map): Bind TAB and backtab.
- * term/x-win.el (res-geometry): Don't set geometry from Xresources
- to default-frame-alist if default-frame-alist already contains
- width/height.
+ * log-view.el (log-view-mode-map): Likewise.
-2006-10-18 Richard Stallman <rms@gnu.org>
+ * diff-mode.el (diff-mode-shared-map): Likewise.
- * emacs-lisp/pp.el (pp-eval-expression): Use `X' to read value.
- Non-interactive arg is the value, not the expression.
+2007-10-08 Dan Nicolaescu <dann@ics.uci.edu>
- * simple.el (read-expression-map): Just set it, no defvar.
+ * files.el (file-name-sans-versions): Also allow `A-Z'.
- * subr.el (insert-for-yank-1): If last inserted char has
- properties, mark them as rear-nonsticky.
+ * vc.el: Mention all supported VC backends.
- * recentf.el (recentf-mode): Doc fix.
+2007-10-08 Richard Stallman <rms@gnu.org>
- * facemenu.el (facemenu-add-new-face): Defend against symbol
- that isn't a face name.
+ * wid-edit.el (widget-specify-button): Don't merge mouse-face with
+ neighbouring buttons.
- * dired-aux.el (dired-do-copy): Doc fix.
+2007-10-08 Andreas Schwab <schwab@suse.de>
-2006-10-18 Chong Yidong <cyd@stupidchicken.com>
+ * files.el (file-name-sans-versions): Also allow `_'.
- * simple.el (line-move-1): Ignore fields when moving to the
- beginning of line to avoid getting point stuck.
+2007-10-08 Dan Nicolaescu <dann@ics.uci.edu>
-2006-10-18 Martin Rudalics <rudalics@gmx.at>
+ * files.el (file-name-sans-versions): Allow - and a-z in version names.
- * textmodes/flyspell.el (flyspell-word-search-backward):
- Set inhibit-point-motion-hooks to avoid looping due to intangibile
- text.
+ * log-view.el (log-view-mode-map, log-view-mode-menu):
+ Bind log-view-annotate-version.
+ (log-view-beginning-of-defun, log-view-end-of-defun)
+ (log-view-annotate-version): New functions.
+ (log-view-mode): Use log-view-beginning-of-defun and
+ log-view-end-of-defun.
-2006-10-16 Richard Stallman <rms@gnu.org>
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * help-fns.el (describe-function-1): Special case optimization
- for self-insert-command.
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Fix staging.
-2006-10-16 Kim F. Storm <storm@cua.dk>
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * ido.el (ido-reread-directory): Work in `dir' mode too.
+ * wid-edit.el (widget-image-insert): Don't merge mouse-face with
+ neighbouring buttons.
-2006-10-15 Martin Rudalics <rudalics@gmx.at>
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Recognize gcc's use of "note" for informational messages.
- * textmodes/table.el: Require 'regexp-opt.
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-10-15 Lennart Borgman <lennart.borgman.073@student.lu.se>
+ * textmodes/css-mode.el (css-electric-keys): electrick->electric.
+ (css-mode): Update correspondingly.
- * progmodes/flymake.el (flymake-get-project-include-dirs-imp):
- Use shell-quote-argument.
+2007-10-08 Dan Nicolaescu <dann@ics.uci.edu>
- * shell.el (explicit-bash-args): Likewise.
+ * vc-git.el (vc-git-log-view-mode): Add font-lock patterns for
+ Signed-off-by, Acked-by and Merge.
- * progmodes/ada-xref.el (ada-find-in-src-path): Likewise.
- Use grep -E rather than egrep.
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-10-15 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * ediff-init.el (ediff-verbose-p): This var is not a constant.
- * ido.el (ido-exhibit): Allow `-', `_', and trailing `$' in user id.
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-10-15 Kim F. Storm <storm@cua.dk>
+ * vc-mtn.el: New file.
- * filesets.el (filesets-run-cmd--repl-fn): Use shell-quote-argument.
+ * vc-hooks.el (vc-handled-backends): Add Mtn.
-2006-10-14 Lennart Borgman <lennart.borgman.073@student.lu.se>
+2007-10-08 Eli Zaretskii <eliz@gnu.org>
- * filesets.el (filesets-cmd-shell-command): Quote buffer-file-name
- to protect whitespace and metacharacters from the shell.
+ * files.el (find-file, find-file-other-window)
+ (find-file-other-frame, find-file-existing, find-file-read-only)
+ (find-file-read-only-other-window)
+ (find-file-read-only-other-frame)
+ (find-alternate-file-other-window, find-alternate-file): Doc fixes.
-2006-10-13 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+2007-10-08 Nick Roberts <nickrob@snap.net.nz>
- * apropos.el (apropos-pattern-quoted): Fix a typo in a doc string.
+ * progmodes/gud.el (gdb-ready): New variable.
+ (gdb): Set it to nil. Set gud-running to nil here...
+ (gud-common-init): ...instead of here.
-2006-10-13 Eli Zaretskii <eliz@gnu.org>
+ * progmodes/gdb-ui.el (gdba, gdb-send, gdb-source-info):
+ Use gdb-ready. Discard input until GDB is ready to accept it.
- * subr.el (start-process-shell-command): Doc fix.
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
-2006-10-13 Andrea Russo <rastandy@salug.it> (tiny change)
+ * dired.el (dired-warning): Inherit from font-lock-warning-face to
+ make it show up with eight colors.
- * info-look.el <maxima-mode, inferior-maxima-mode>: Allow [0-9] in
- the regexp for Maxima symbols.
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+ * diff-mode.el (diff-sanity-check-hunk): Fix up the case when unified
+ diffs are concatenated with no intervening line.
- * vc-hooks.el (vc-ignore-dir-regexp): Make it into a defcustom.
- (vc-find-root): Don't walk higher up than ~.
+2007-10-08 Dave Love <fx@gnu.org>
-2006-10-12 Chong Yidong <cyd@stupidchicken.com>
+ * progmodes/python.el: Merge changes from Dave Love's v2007-Sep-10.
+ (python-font-lock-keywords): Update to the 2.5 version of the language.
+ (python-quote-syntax): Let-bind font-lock-syntactic-keywords to nil.
+ (python-backspace): Only behave funny in code.
+ (python-compilation-regexp-alist): Add PDB stack trace regexp.
+ (inferior-python-mode): Add PDB prompt regexp.
+ (python-fill-paragraph): Refine the fenced-string regexp.
+ (python-find-imports): Handle imports spanning several lines.
+ (python-mode): Add `class' to hideshow support.
- * international/utf-8.el (utf-translate-cjk-load-tables):
- Avoid clobbering last-coding-system-used during load.
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-10-12 Carsten Dominik <dominik@science.uva.nl>
+ * pcvs.el (cvs-mode-add-change-log-entry-other-window):
+ Use add-log-buffer-file-name-function rather than binding
+ buffer-file-name, so we don't end up calling change-log-mode in *cvs*
+ when `fi' is the ChangeLog file itself.
- * textmodes/reftex-global.el (reftex-create-tags-file):
- Quote file arguments.
+ * outline.el (outline-flag-region): Use front-advance.
-2006-10-12 Richard Stallman <rms@gnu.org>
+2007-10-08 Ilya Zakharevich <ilyaz@cpan.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, updated for attributes.
- (cperl-calculate-indent): Try to allow '_' be non-word char
- Support subs with attributes.
- (cperl-where-am-i): Quiet (?) 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'.
+ * progmodes/cperl-mode.el: Merge upstream 5.23.
+ (cperl-where-am-i): Remove function.
+ (cperl-backward-to-noncomment): Don't go too far when skipping POD/HEREs
+ (cperl-sniff-for-indent): De-invert [string] and [comment].
+ When looking for label, skip s:m:y:tr.
(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 at 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 occurrences 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,Ae(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>:
- Use the interactive spec of `eval-expression'.
-
-2006-10-02 Michael Welsh Duggan <md5i@cs.cmu.edu>
-
- * progmodes/sh-script.el (sh-prev-thing): Fix last 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.
-
-2006-10-02 Kenichi Handa <handa@m17n.org>
-
- * international/code-pages.el (iso-8859-6): Table fixed.
-
-2006-10-01 Chris Moore <christopher.ian.moore@gmail.com>
-
- * dired.el (dired-build-subdir-alist): Fix previous change.
-
-2006-10-01 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * simple.el (undo-elt-crosses-region): Fix the inequalities.
-
-2006-10-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/find-func.el (find-function-regexp): Don't match
- "define-button-type".
-
- * pcvs.el (cvs-update-header): Fix handling of extra newlines so that
- they don't keep accumulating.
-
-2006-10-01 Bob Rogers <rogers-emacs@rgrjr.dyndns.org> (tiny change)
-
- * ffap.el (ffap-rfc-path): Change the address of the RFC
- repository to ftp.rfc-editor.org, as ds.internic.net seems to be gone.
-
-2006-10-01 Stephen Berman <Stephen.Berman@gmx.net>
-
- * allout.el (allout-expose-topic): Rectify implementation of "+"
- spec, so that bodies are not exposed with headlines.
-
-2006-10-01 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-current-depth): Do aberrent check only at or
- below doublecheck depth.
- (allout-chart-subtree): Make it explicit that LEVELS being nil
- means unlimited depth. Drop undocumented support for LEVELS value
- t meaning unlimited depth. (This is consistent with
- allout-chart-to-reveal, but contrary to allout-show-children,
- which needs to use nil to default to depth of 1.)
- (allout-goto-prefix-doublechecked): Wrap long docstring line.
- (allout-chart-to-reveal): Be explicit in docstring about meaning
- of nil LEVELS, and drop support for LEVELS value t.
- (allout-show-children): Translate the level spec used by this
- routine to that used by allout-chart-subtree and
- allout-chart-to-reveal.
- (allout-show-to-offshoot): Retry once when stuck, after opening
- subtree - improvements in discontinuity handling likely will
- enable progress.
-
-2006-09-30 Chong Yidong <cyd@stupidchicken.com>
-
- * wid-edit.el (widget-button-click-moves-point): New variable.
- (widget-button-click): If widget-button-click-moves-point is
- non-nil, set point after performing the button action.
-
- * cus-edit.el (custom-mode): Set widget-button-click-moves-point.
-
-2006-09-30 Martin Rudalics <rudalics@gmx.at>
-
- * files.el (find-file-existing): Modify to not allow wildcards.
-
-2006-09-30 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * simple.el (undo-more): When undo information for the region is
- exhausted, say "No further undo information FOR REGION".
-
-2006-09-30 Michael Welsh Duggan <md5i@cs.cmu.edu>
-
- * progmodes/sh-script.el (sh-prev-thing):
- Take `sh-leading-keywords' into account.
-
-2006-09-29 Glenn Morris <rgm@gnu.org>
-
- * custom.el (defcustom): Doc fix.
-
- * calendar/calendar.el (european-calendar-style):
- Call european-calendar or american-calendar as needed when set.
- (diary-view-entries, list-calendar-holidays): Move autoloads
- before use.
-
-2006-09-29 Juri Linkov <juri@jurta.org>
-
- * progmodes/cperl-mode.el (cperl-after-expr-p): Don't move point
- to nil if there is no previous property change.
-
-2006-09-29 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * cus-edit.el (custom-save-all): Switch to emacs-lisp mode before
- saving anything to be sure that `forward-sexp' behaves correctly.
-
-2006-09-29 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (line-move-finish): Ignore field boundaries if the
- initial and final points have the same `field' property.
-
-2006-09-29 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-file-internal): Only bind minibuffer-completing-file-name
- to t while calling ido-read-internal.
-
-2006-09-29 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-file-remote-p): Get regexp from list.
- (org-archive-subtree): Remove erraneous `]' from character list.
-
-2006-09-28 Jonathan Yavner <jyavner@member.fsf.org>
-
- * ses.el (ses-in-print-area, ses-goto-data, ses-load)
- (ses-reconstruct-all): Make undo of "insert row" work by keeping
- markers for data-area and parameters-area.
-
-2006-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/make-mode.el (makefile-mode): Don't disable jit-lock.
-
- * font-lock.el (font-lock-after-change-function): Refontify next line
- as well if end is at BOL.
- (font-lock-extend-jit-lock-region-after-change): Be more careful to
- only extend the region as much as needed.
-
-2006-09-28 Richard Stallman <rms@gnu.org>
-
- * comint.el (comint-mode): Bind font-lock-defaults non-nil.
-
- * subr.el (insert-for-yank-1): Handle `font-lock-face' specially.
-
- * 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)
-
- * mail/smtpmail.el (smtpmail-try-auth-methods): Do not break long
- lines in base64-encoded authentication response.
-
-2006-09-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * progmodes/ebnf2ps.el: Doc fix. Implement arrow spacing and scaling.
- (ebnf-version): New version 4.3.
- (ebnf-arrow-extra-width, ebnf-arrow-scale): New options.
- (ebnf-prologue): Adjust PostScript programming.
- (ebnf-begin-file, ebnf-insert-ebnf-prologue, ebnf-terminal-dimension1)
- (ebnf-repeat-dimension, ebnf-except-dimension): Adjust code.
-
-2006-09-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * jit-lock.el (jit-lock-force-redisplay): Rename from
- jit-lock-fontify-again, and undo the mistaken change I've just done.
-
- * jit-lock.el (jit-lock-fontify-now): Don't fontify the empty text.
- (jit-lock-fontify-again): Don't refontify text that's not displayed.
-
-2006-09-26 Kenichi Handa <handa@m17n.org>
-
- * startup.el (display-splash-screen): Allow a prefix argument.
-
-2006-09-25 Jason Rumney <jasonr@gnu.org>
-
- * subr.el (shell-quote-argument): Use DOS logic for Windows
- shells with DOS semantics.
-
-2006-09-24 Richard Stallman <rms@gnu.org>
-
- * progmodes/compile.el (compilation-goto-locus-delete-o): New fn.
- (compilation-goto-locus): Use compilation-goto-locus-delete-o
- to delete the overlay. Put it on pre-command-hook.
-
- * emacs-lisp/timer.el (timer-max-repeats): Doc fix.
-
- * startup.el (fancy-splash-screens, normal-splash-screen):
- Call the splash buffer *About GNU Emacs*.
-
- * simple.el (next-error-highlight, next-error-highlight-no-select):
- Default to 0.5.
- (yank-excluded-properties): Add `fontified'.
-
- * font-lock.el (font-lock-compile-keywords): Allow value of
- syntax-begin-function to enable paren-column-0 highlighting.
-
-2006-09-24 Chris Moore <christopher.ian.moore@gmail.com>
-
- * dired.el (dired-build-subdir-alist): When file ends in colon,
- don't exit the loop, just disregard that file.
-
-2006-09-24 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (line-move-finish): Handle corner case for fields in
- continued lines.
- (line-move-1): Remove flawed test for that case.
-
-2006-09-24 Ken Manheimer <ken.manheimer@gmail.com>
-
- * icomplete.el (icomplete-simple-completing-p): Use the correct
- name for the new variable, `icomplete-with-completion-tables'.
- (file local variables): Remove superfluous setting.
-
-2006-09-23 Jeff Miller <jmiller@cablespeed.com> (tiny change)
-
- * calendar/appt.el (appt-check): Fix typo for appointments just
- after midnight.
-
-2006-09-23 Chong Yidong <cyd@stupidchicken.com>
-
- * 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)
-
- * textmodes/ispell.el (ispell-change-dictionary): Don't check the
- local dictionary when changing the global dictionary.
-
-2006-09-23 Ken Manheimer <ken.manheimer@gmail.com>
-
- * icomplete.el (icomplete-with-completion-tables): List of
- specialized completion tables with which icomplete should
- operate. Include the new `internal-complete-buffer', so icomplete
- works with interactive buffer-selection.
- (icomplete-simple-completing-p): Add acceptance of specialized
- completion tables listed in icomplete-with-completion-tables.
-
-2006-09-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * frame.el (focus-follows-mouse): Set default to nil on Mac.
-
- * startup.el (command-line): Use `custom-reevaluate-setting' for
- `focus-follows-mouse'.
-
-2006-09-22 Richard Stallman <rms@gnu.org>
-
- * cus-edit.el (custom-buffer-create-internal): In `emacs -q',
- explain why Save is not available.
-
-2006-09-22 Juanma Barranquero <lekktu@gmail.com>
-
- * woman.el (woman0-so): Use `let*', not `let'.
- (woman-horizontal-line): Remove unbalanced parenthesis.
-
-2006-09-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * woman.el: Make sure all the end-of-region markers we use have
- a non-nil insertion-type.
- (woman0-so): Move things around so we can use copy-marker.
- (woman0-roff-buffer, woman2-process-escapes-to-eol, woman2-roff-buffer):
- Adjust marker type.
- (woman2-process-escapes): Check marker type.
- (woman-horizontal-line): Dispense with the use of a marker.
-
-2006-09-22 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-lang.el: Add Greek letters to math-variable-table
- property of tex.
-
-2006-09-22 Chong Yidong <cyd@stupidchicken.com>
-
- * files.el (save-some-buffers-action-alist): Display diff in view-mode.
+ (cperl-mode): Don't assume `font-lock-multiline' is auto-local.
+ (cperl-windowed-init): Wrong `ps-print' handling.
+ Both thanks to Chong Yidong.
+ (cperl-look-at-leading-count): Could fail with unfinished RExen.
+ (cperl-find-pods-heres): If the second part of s()[] is missing,
+ don't try to highlight delimiters...
-2006-09-22 Masatake YAMATO <jet@gyve.org>
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * add-log.el (add-log-current-defun): Use `forward-sexp'
- instead of `forward-word' to pick c++::symbol.
- Reported by Guanpeng Xu <herberteuler@hotmail.com>.
+ * progmodes/compile.el (compilation-get-file-structure): Complete last
+ change by also using spec-directory in the puthash.
-2006-09-22 Kenichi Handa <handa@m17n.org>
+2007-10-08 Riccardo Murri <riccardo.murri@gmail.com>
- * bindings.el: Fix setting self-insert-command for multibyte
- characters in global-map.
+ * vc-bzr.el (vc-bzr-file-name-relative): Use 'when' instead of 'and'.
+ (vc-bzr-status): Fix shadowing of variable 'status'.
+ (vc-bzr-workfile-version): Use correct path to 'last-revision' file.
+ Use `expand-file-name' instead of `concat'.
+ (vc-bzr-annotate-command): Use option name '--long' instead of '-l'.
+ Update annotation line regexp. Fixes launchpad.net [Bug 137435].
-2006-09-21 David Kastrup <dak@gnu.org>
+2007-10-08 Jason Rumney <jasonr@gnu.org>
- * mouse.el (mouse-posn-property): Fix typo for `event-start' in
- doc string.
+ * frame.el (focus-follows-mouse): Doc-fix. Change default on w32.
-2006-09-21 Kenichi Handa <handa@m17n.org>
+2007-10-08 Richard Stallman <rms@gnu.org>
- * language/european.el ("Latin-1"): Add windows-1252 to
- coding-priority.
- ("German"): Likewise.
+ * emacs-lisp/lisp-mode.el (lisp-indent-offset): Make defcustom.
+ Add `safe-local-variable' property.
+ (lisp-body-indent): Likewise.
-2006-09-21 Kim F. Storm <storm@cua.dk>
+2007-10-08 Richard Stallman <rms@gnu.org>
- * emacs-lisp/cl-macs.el (member*): Use memql instead of complex code.
- Suggested by Miles Bader.
+ * files.el (hack-local-variables-confirm): Rename arg VARS to ALL-VARS.
+ Add doc string.
- * emacs-lisp/cl.el (pushnew): Rework 2006-09-10 change. Use memql
- instead of add-to-list in the simple case.
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
-2006-09-20 Kenichi Handa <handa@m17n.org>
+ * files.el (backup-buffer-copy): Try to overwrite old backup first.
- * 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.
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
-2006-09-20 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+ * repeat.el (repeat): Use last-repeatable-command instead of
+ real-last-command. Run pre- and post-command hooks for
+ self-insertion. Update doc-string.
- * lpr.el (lpr-page-header-switches): Insert `*' at beginning of doc
- string to become an option.
+2007-10-08 Alexandre Julliard <julliard@winehq.org>
-2006-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-git.el (vc-git-state): Call git-add --refresh to update the
+ state of the file.
+ (vc-git-workfile-unchanged-p): Delegate implementation to vc-git-state.
+ (vc-git-create-repo): Fix invalid command.
- * files.el (find-buffer-visiting): Don't get fooled by a nil inode.
+2007-10-08 Richard Stallman <rms@gnu.org>
-2006-09-20 Kim F. Storm <storm@cua.dk>
+ * textmodes/flyspell.el (flyspell-mode):
+ Catch errors in flyspell-mode-on.
- * simple.el (line-move-partial): Call pos-visible-in-window-p with
- position t instead of trying both window-end and window-end - 1.
+2007-10-09 Juanma Barranquero <lekktu@gmail.com>
-2006-09-20 Carsten Dominik <dominik@science.uva.nl>
+ * term/x-win.el (x-alternatives-map): Remove spurious parenthesis.
- * textmodes/org.el (org-scan-tags): Find end of subtrees also in
- hidden trees.
+2007-10-09 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-09-20 David Kastrup <dak@gnu.org>
+ * international/encoded-kb.el (encoded-kbd-setup-display):
+ Use input-decode-map rather than local-key-translation-map.
- * mouse.el (mouse-posn-property): Improve doc string.
- (mouse-on-link-p): Change buffers for function calls on links.
+ * term/rxvt.el (rxvt-alternatives-map): New map.
+ (terminal-init-rxvt): Use it.
+ Bind rxvt-function-map in input-decode-map.
- * menu-bar.el (clipboard-yank): Bomb out in interactive use if
- buffer is read-only.
+ * term/xterm.el (xterm-alternatives-map): New map.
+ (terminal-init-xterm): Use it.
+ Bind xterm-function-map in input-decode-map.
-2006-09-20 Ken Manheimer <ken.manheimer@gmail.com>
+ * term/x-win.el (x-alternatives-map): New var.
+ (x-setup-function-keys): Use it.
- * allout.el (allout-unprotected): Let inhibit-read-only only when
- buffer-read-only isn't set.
- (allout-annotate-hidden): Enable topic annotation during copies even
- when the buffer is read-only, eg for topic copies. Ensure that the loop
- advances, even when the span extends beyond the deletion region.
- (allout-toggle-subtree-encryption): Use allout-structure-added-hook
- rather than allout-exposure-changed-hook, as a stronger assertion.
- (allout-keybindings-list): Add bindings for
- allout-copy-line-as-kill and allout-copy-topic-as-kill.
- (allout-copy-line-as-kill, allout-copy-topic-as-kill):
- Copy wrappers for allout-kill-line and allout-kill-topic.
- (allout-listify-exposed): Position correctly to accumulate lines.
+ * help-fns.el (describe-variable): Slightly change the layout of
+ meta-info to separate it better from the docstring.
+ Standardize insertion of extra empty lines in various circumstances.
-2006-09-19 Chong Yidong <cyd@stupidchicken.com>
+ * diff-mode.el (diff-hunk-style): New fun.
+ (diff-end-of-hunk): Use it.
+ (diff-context->unified): Use the new `apply' undo element,
+ if applicable, so as to save undo-log space.
+ (diff-fine-change): New face.
+ (diff-fine-highlight-preproc): New function.
+ (diff-fine-highlight): New command.
+ (diff-mode-map, diff-mode-menu): Add diff-fine-highlight.
- * simple.el (line-move-1): Escape field boundaries occurring
- exactly at point. Update goal column if constrained to a field.
- (line-move-finish): Escape field boundaries occurring exactly at point.
+ * smerge-mode.el (smerge-refine-chopup-region): Add `preproc' argument.
+ (smerge-refine-highlight-change): Add `props' argument.
+ (smerge-refine-subst): New function holding most of smerge-refine.
+ (smerge-refine): Use it.
-2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-10-08 Eric S. Raymond <esr@snark.thyrsus.com>
- * mouse.el (mouse-on-link-p): Tentatively fix last change.
- (mouse-drag-vertical-line): Remove unused var `wconfig'.
+ * vc.el (vc-default-wash-log): Remove unused code, the
+ log washers all live in the backends now.
+ (vc-default-comment-history): Correct for the fact
+ that wash-log is argumentless in the new API.
-2006-09-19 Kim F. Storm <storm@cua.dk>
+2007-10-08 Michael Albinus <michael.albinus@gmx.de>
- * help.el (describe-key-briefly, describe-key): Simplify printing
- of descriptions by using format and %S. Fix "is undefined"
- messages to say "at that spot" for mouse events.
+ * net/tramp.el (tramp-find-foreign-file-name-handler): Check also host.
+ (tramp-maybe-send-script): Apply `member' but `memq'.
+ (tramp-advice-file-expand-wildcards): Simplify implementation.
- * simple.el (line-move-partial): Optimize. Try window-line-height
- before posn-at-point to get vpos of current line.
+2007-10-08 Juanma Barranquero <lekktu@gmail.com>
-2006-09-18 Michael Kifer <kifer@cs.stonybrook.edu>
+ * follow.el (follow-mode): Don't run hooks twice. Use `when'.
- * emulation/viper.el: Bump up version/date of update to reflect the
- substantial changes done in August 2006.
+ * mb-depth.el (minibuf-depth-indicator-function): New variable.
+ (minibuf-depth-setup-minibuffer): Use it.
- * emulation/viper-cmd (viper-next-line-at-bol): Make sure button-at,
- push-button are defined.
+2007-10-07 Glenn Morris <rgm@gnu.org>
- * ediff-util.el (ediff-add-to-history): New function.
+ * simple.el (bad-packages-alist): Clarify Semantic and CEDET
+ version numbers.
- * ediff.el: Use ediff-add-to-history instead of add-to-history.
+2007-10-06 Juri Linkov <juri@jurta.org>
-2006-09-18 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
+ * textmodes/fill.el (fill-paragraph-or-region): New function.
- * textmodes/conf-mode.el (conf-space-mode): Doc fix.
- Delete duplicate make-local-variable form.
- (conf-space-keywords): Add autoload cookie.
- Fix typo (`keywords', not `keyword').
+ * bindings.el (esc-map): Bind M-q to fill-paragraph-or-region
+ instead of fill-paragraph.
-2006-09-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * tutorial.el (tutorial--default-keys): Replace fill-paragraph
+ with fill-paragraph-or-region. Suspend command is now the same
+ `suspend-frame' on window systems and on tty.
- * cus-start.el (all): Rename x-gtk-show-chooser-help-text to
- x-gtk-file-dialog-help-text. Rename x-use-old-gtk-file-dialog
- to x-gtk-use-old-file-dialog.
+ * image.el (image-type): Check if image-types is bound to not fail
+ on tty.
-2006-09-18 Richard Stallman <rms@gnu.org>
+ * delsel.el (delete-selection-pre-hook):
+ * emulation/cua-base.el (cua-paste): Check if mouse-region-match
+ is fbound to not fail on mouseless tty.
- * wid-edit.el (widget-button-click): Handle non-mouse-motion events
- that might come in during mouse tracking.
+2007-10-06 Michael Albinus <michael.albinus@gmx.de>
-2006-09-18 Kim F. Storm <storm@cua.dk>
+ * net/tramp.el (top): Move loading of tramp-util.el and
+ tramp-vc.el to tramp-compat.el.
+ (tramp-make-tramp-temp-file): Complete rewrite. Create remote
+ temporary file if possible, in order to avoid a security hole.
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-maybe-open-connection): Call `tramp-make-tramp-temp-file'
+ with DONT-CREATE, because the connection is not setup yet.
+ (tramp-handle-process-file): Rewrite temporary file handling.
+ (tramp-completion-mode): New defvar.
+ (tramp-completion-mode-p): Use it.
- * simple.el (line-move-partial): Rework 2006-09-15 change to use
- new window-line-height function. Further optimize by not calling
- pos-visible-in-window-p for window-end when window-line-height
- returns useful information.
+ * net/tramp-compat.el (top): Load tramp-util.el and tramp-vc.el.
-2006-09-16 Richard Stallman <rms@gnu.org>
+ * net/tramp-fish.el (tramp-fish-handle-process-file):
+ Rewrite temporary file handling.
- * textmodes/conf-mode.el (conf-mode-map): Use conf-space-keywords cmd.
- (conf-space-mode): Don't handle prefix arg.
- Delete conf-space-keywords-override code.
- Use add-hook.
- (conf-space-keywords): New command.
- (conf-space-mode-internal): Be careful with imenu-generic-expression.
- Delete conf-space-keywords-override code.
- (conf-space-keywords-alist): Doc fix.
- (conf-space-font-lock-keywords): Doc fix.
- (conf-space-keywords-override): Var deleted.
-
-2006-09-16 Chong Yidong <cyd@stupidchicken.com>
-
- * startup.el (fancy-splash-screens): Don't switch to the scratch
- buffer; it may not be the next buffer.
-
-2006-09-16 Romain Francoise <romain@orebokech.com>
-
- * saveplace.el (load-save-place-alist-from-file): Use expanded name
- in both messages.
-
-2006-09-16 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se>
-
- * progmodes/python.el (python-preoutput-filter):
- Fix arg order to string-match.
-
-2006-09-16 Richard Stallman <rms@gnu.org>
-
- * obsolete/fast-lock.el (fast-lock-cache-data): Provide 2nd arg to
- font-lock-compile-keywords.
-
- * font-lock.el (font-lock-compile-keywords): Rename optional arg
- to SYNTACTIC-KEYWORDS and reverse the sense. All callers changed.
-
-2006-09-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * cus-start.el (all): Add x-gtk-show-chooser-help-text.
-
- * select.el (xselect-convert-to-string): If UTF8_STRING is requested
- and the data doesn't look like UTF8, send STRING instead.
-
-2006-09-16 Agust,Am(Bn Mart,Am(Bn <agustin.martin@hispalinux.es>
-
- * textmodes/flyspell.el (flyspell-check-region-doublons):
- New function to detect duplicated words.
- (flyspell-large-region): Use it.
-
-2006-09-16 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (line-move-to-column): Revert 2006-08-03 change.
-
-2006-09-16 Eli Zaretskii <eliz@gnu.org>
-
- * help.el (describe-prefix-bindings): Use let, not let*.
-
-2006-09-16 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-regexp, allout-line-boundary-regexp)
- (allout-bob-regexp): Correct grouping and boundaries to fix
- backwards traversal.
- (allout-depth-specific-regexp, allout-depth-one-regexp):
- New versions that exploit \\{M\\} regexp syntax, to avoid geometric or
- worse time in allout-ascend.
- (allout-doublecheck-at-and-shallower): Identify depth threshold
- below which topics are checked for and disqualified by containment
- discontinuities.
- (allout-hotspot-key-handler): Correctly handle multiple-key
- strokes. Remove some unused variables.
- (allout-mode-leaders): Clarify that mode-specific comment-start
- will be used.
- (set-allout-regexp): Correctly regexp-quote allout regexps to
- properly accept alternative header-leads and primary bullets with
- regexp-specific characters (eg, C "/*", mathematica "(*").
- Include new regular expressions among those configured.
- (allout-infer-header-lead-and-primary-bullet):
- Rename allout-infer-header-lead.
- (allout-recent-depth): Manifest as a variable as well as a function.
- (allout-prefix-data): Simplify into an inline instead of a macro,
- assuming current match data rather than being explicitly passed
- it. Establish allout-recent-depth value as well as
- allout-recent-prefix-beginning and allout-recent-prefix-end.
- (allout-aberrant-container-p): True when an item's immediate
- offspring discontinuously contained. Useful for disqualifying
- unintended topic prefixes, likely at low depths.
- (allout-goto-prefix-doublechecked): Elaborate version of
- allout-goto-prefix which disqualifies aberrant pseudo-items.
- (allout-pre-next-prefix): Layer on top of lower-level routines, to
- get disqualification of aberrant containers.
- (allout-end-of-prefix, allout-end-of-subtree): Disqualify aberrant
- containers.
- (allout-beginning-of-current-entry): Position at start of buffer
- when in container (depth 0) entry.
- (nullify-allout-prefix-data): Invalidate allout-recent-* prefix data.
- (allout-current-bullet): Strip text properties.
- (allout-get-prefix-bullet): Use right match groups.
- (allout-beginning-of-line, allout-next-heading):
- Disqualify aberrant containers.
- (allout-previous-heading): Disqualify aberrant containers, and
- change to regular (rather than inline) function, to allow
- self-recursion.
- (allout-get-invisibility-overlay): Increment so progress is made
- when the first overlay is not the sought one.
- (allout-end-of-prefix): Disqualify aberrant containers.
- (allout-end-of-line): Cycle something like allout-beginning-of-line.
- (allout-mode): Make allout-old-style-prefixes (ie, enabling use with
- outline.el outlines) functional again. Change the primary bullet
- along with the header-lead - level 1 new-style bullets now work.
- Engage allout-before-change-handler in mainline Emacs, not just
- XEmacs, to do undo handling.
- (allout-before-change-handler): Expose undo changes occurring in
- hidden regions. Use allout-get-invisibility-overlay instead of
- reimplementing it inline.
- (allout-chart-subtree): Use start rather than end of prefix in
- charts. Use allout-recent-depth variable.
- (allout-chart-siblings): Disqualify aberrant topics.
- (allout-beginning-of-current-entry): Position correctly.
- (allout-ascend): Use new allout-depth-specific-regexp and
- allout-depth-one-regexp for linear instead of O(N^2) or worse
- behavior.
- (allout-ascend-to-depth): Depend on allout-ascend, rather than
- reimplementing an algorithm.
- (allout-up-current-level): Depend on allout-ascend, rather than
- reimplementing an algorithm. Return to start-point if we fail.
- (allout-descend-to-depth): Use allout-recent-depth variable
- instead of function.
- (allout-next-sibling): On traversal of numerous intervening
- topics, resort to economical allout-next-sibling-leap.
- (allout-next-sibling-leap): Specialized version of
- allout-next-sibling that uses allout-ascend cleverly, to depend on
- a regexp search to leap large numbers of contained topics, rather
- than arbitrarily many one-by-one traversals.
- (allout-next-visible-heading): Disqualify aberrant topics.
- (allout-previous-visible-heading): Position consistently when
- interactive.
- (allout-forward-current-level): Base on allout-previous-sibling
- rather than (differently) reimplmenting the algorithm. Remove some
- unused variables.
- (allout-solicit-alternate-bullet): Present default choice stripped
- of text properties.
- (allout-rebullet-heading): Use bullet stripped of text properties.
- Register changes using allout-exposure-change-hook.
- Disregard aberrant topics.
- (allout-shift-in): With universal-argument, make topic a peer of
- it's former offspring. Simplify the code by separating out
- allout-shift-out functionality.
- (allout-shift-out): With universal-argument, make offspring peers
- of their former container, and its siblings. Implement the
- functionality here, rather than inappropriately muddling the
- implementation of allout-shift-in.
- (allout-rebullet-topic): Respect additional argument for new
- parent-child separation function.
- (allout-yank-processing): Use allout-ascend directly.
- (allout-show-entry): Disqualify aberrant topics.
- (allout-show-children): Handle discontinuous children gracefully,
- extending the depth being revealed to expose them and posting a
- message indicating the situation.
- (allout-show-to-offshoot): Remove obsolete and incorrect comment.
- Leave cursor in correct position.
- (allout-hide-current-subtree): Use allout-ascend directly.
- Disqualify aberrant topics.
- (allout-kill-line, allout-kill-topic): Preserve exposure layout in
- a way that the yanks can restore it, as used to happen.
- (allout-yank-processing): Restore exposure layout as recorded by
- allout-kill-*, as used to happen.
- (allout-annotate-hidden, allout-hide-by-annotation): New routines
- for preseving and restoring exposure layout across kills.
- (allout-toggle-subtree-encryption): Run allout-exposure-change-hook.
- (allout-encrypt-string): Strip text properties.
- Rearranged order and outline-headings for some of the
- miscellaneous functions.
- (allout-resolve-xref): No need to quote the error name in the
- condition-case handler section.
- (allout-flatten): Classic recursive (and recursively intensive,
- without tail-recursion) list-flattener, needed by allout-shift-out
- when confronted with discontinuous children.
-
-2006-09-16 Jason Rumney <jasonr@gnu.org>
-
- * dnd.el (dnd-open-remote-file-function): Use dnd-open-local-file
- on ms-windows.
- (dnd-open-unc-file): Remove.
- (dnd-open-local-file): Mention in doc string that it also handles
- remote files if the system natively supports unc file-names.
-
-2006-09-15 Kim F. Storm <storm@cua.dk>
-
- * help.el (describe-key): Handle C-h k in *Help* buffer; collect
- all necessary information about the event before erasing *Help*.
-
- * simple.el (line-move-partial): Use window-line-visiblity to
- quickly check whether last line is partially visible, and only do
- the hard (and slow) part in that case.
-
-2006-09-15 Jay Belanger <belanger@truman.edu>
-
- * COPYING: Replace "Library Public License" by "Lesser Public
- License" throughout.
-
-2006-09-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * term/x-win.el (x-menu-bar-open): New function for F10.
-
-2006-09-15 Chong Yidong <cyd@stupidchicken.com>
+2007-10-06 Eric S. Raymond <esr@snark.thyrsus.com>
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Disallow filenames containing " -" to avoid confusion with libtool
- compilation messages. Suggested by Stefan Monnier.
+ * vc.el: Workfile version -> focus version change. Port various
+ comments from new VC to reduce the noise in the diff.
+ Patch in the new vc-create-repo function to go with the
+ header comment about it already present.
+ There are no changes to existing logic in this patch.
+ (vc-revert-buffer1): Rename to vc-revert-buffer-internal.
-2006-09-15 David Kastrup <dak@gnu.org>
+2007-10-06 Aaron Hawley <aaronh@garden.org>
- * mouse-sel.el (mouse-sel-follow-link-p): Use event position
- instead of buffer position for `mouse-on-link-p'.
+ * autoinsert.el (auto-insert-alist): Add a Texinfo entry.
- * mouse.el (mouse-posn-property): New function looking up the
- properties at a click position in overlays and text properties in
- either buffer or strings.
- (mouse-on-link-p): Use `mouse-posn-property' to streamline lookup
- of both `follow-link' as well as `mouse-face' properties.
- (mouse-drag-track): Check `mouse-on-link-p' on event position, not
- buffer position.
+2007-10-05 Chris Moore <dooglus@gmail.com>
- * help.el (describe-key-briefly): When reading a down-event on
- mode lines or scroll bar, swallow the following up event, too.
- Use the new mouse sensitity of `key-binding' for lookup.
- (describe-key): The same here.
+ * server.el (server-kill-new-buffers): Doc fix.
-2006-09-15 Juanma Barranquero <lekktu@gmail.com>
+2007-10-05 John W. Eaton <jwe@octave.org>
+
+ * progmodes/octave-mod.el (octave-abbrev-table): Add "until".
+ (octave-begin-keywords): Add "do".
+ (octave-end-keywords): Remove "end".
+ (octave-reserved-words): Add "end". Remove "all_va_args",
+ "gplot", and 'gsplot".
+ (octave-text-functions): Remove "gset", "gshow", "set", and "show".
+ (octave-variables): Remove "IMAGEPATH", "INFO_FILE",
+ "INFO_PROGRAM", "LOADPATH", "__error_text__", "automatic_replot",
+ "default_return_value", "define_all_return_values",
+ "do_fortran_indexing", "empty_list_elements_ok",
+ "gnuplot_has_multiplot", "implicit_str_to_num_ok",
+ "ok_to_lose_imaginary_part", "prefer_column_vectors",
+ "prefer_zero_one_indexing", "propagate_empty_matrices",
+ "resize_on_range_error", "treat_neg_dim_as_zero",
+ "warn_assign_as_truth_value", "warn_comma_in_global_decl",
+ "warn_divide_by_zero", "warn_function_name_clash",
+ "warn_missing_semicolon", "whitespace_in_literal_matrix".
+ Add "DEFAULT_EXEC_PATH", "DEFAULT_LOADPATH", "IMAGE_PATH",
+ "crash_dumps_octave_core", "sighup_dumps_octave_core",
+ "sigterm_dumps_octave_core".
+ (octave-block-match-alist): Remove "end" from block-end keywords.
+ (octave-mode): Update ftp site address.
+
+2007-10-05 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc.el: Reorder functions, no code changes.
+
+2007-10-04 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-make-temp-file): Move to tramp-compat.el.
+ (tramp-do-copy-or-rename-file-directly): Handle tmpfile only in
+ the cond clauses where needed.
+ (tramp-handle-write-region): Rearrange code for proper handling of
+ tmpfile.
+
+ * net/tramp-compat.el (tramp-compat-make-temp-file): New defsubst.
- * play/life.el (life-patterns): Add a few more interesting patterns.
- (life-setup): Force `show-trailing-whitespace' to nil.
+ * net/tramp.el:
+ * net/tramp-fish.el:
+ * net/tramp-ftp.el:
+ * net/tramp-smb.el: Rename `tramp-make-temp-file' to
+ `tramp-compat-make-temp-file'.
-2006-09-14 Richard Stallman <rms@gnu.org>
+2007-10-04 Juanma Barranquero <lekktu@gmail.com>
- * startup.el (fancy-splash-text): Change text to improve alignment.
- (fancy-splash-screens): Don't set non-standard tab width.
- Bind cursor-type temporarily, and make it easy to patch to
- preserve the splash buffer.
- (normal-splash-screen, fancy-splash-tail): Spell out "Meta-x".
- (fancy-splash-screens): Display echo-area message explicitly.
- Don't set fancy-splash-help-echo.
+ * image-dired.el (image-dired-image-at-point-p): Fix typo in docstring.
- * simple.el (line-number-mode): Group mode-line instead of
- editing-basics.
- (column-number-mode, size-indication-mode): Likewise.
+2007-10-03 Stefan Monnier <monnier@iro.umontreal.ca>
- * faces.el (mode-line-faces): Group mode-line instead of modeline.
+ * emacs-lisp/copyright.el (copyright-update): Don't update if the file
+ already uses a more recent copyright version than the "current" one.
- * time.el (display-time): Group mode-line instead of modeline.
+2007-10-03 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * cus-edit.el (mode-line): Rename from modeline. All uses changed.
+ * doc-view.el (doc-view-dvi->pdf-sentinel, doc-view-reset-slice)
+ (doc-view-insert-image): Minor aesthetical docstring changes.
-2006-09-14 Chong Yidong <cyd@stupidchicken.com>
+2007-10-03 Tassilo Horn <tassilo@member.fsf.org>
- * startup.el (fancy-splash-text): Move editing instructions to
- fancy-splash-head.
- (fancy-splash-head): Issue editing instructions.
- (fancy-splash-screens): Fixup whitespace.
+ * doc-view.el (doc-view): Don't ignore pdf and dvi files when
+ completing filename.
+ (doc-view-search-internal): Docstring change.
-2006-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-10-03 Michael Albinus <michael.albinus@gmx.de>
- * bindings.el (mode-line-buffer-identification-keymap):
- Remove duplicate line.
+ * net/tramp.el (top): Add tramp-compat to `tramp-unload-hook'.
+ (tramp-file-name-handler-alist):
+ Add `tramp-handle-insert-file-contents-literally'. Needed for XEmacs.
+ (tramp-make-temp-file): Use `make-temp-name'. `make-temp-file',
+ used before, creates the file already, which is not desired.
+ (tramp-do-copy-or-rename-file-directly): Simplify handling of
+ temporary file.
+ (tramp-handle-insert-file-contents): Assign the result in the
+ short track case.
+ (tramp-handle-insert-file-contents-literally): New defun.
+ (tramp-completion-mode-p): Revert change from 2007-09-24.
+ Checking for `return' etc as last character is not sufficient, for
+ example in dired-mode when entering <g> (revert-buffer) or
+ <s> (dired-sort).
-2006-09-14 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * net/tramp-compat.el (top): Add also compatibility code for loading
+ appropriate timer package.
+ (tramp-compat-copy-tree): Check for `subrp' and `symbol-file' in
+ order to avoid autoloading problems.
- * ido.el (ido-ignore-item-p): Allow any kind of functions in
- ignore lists.
+ * net/tramp-fish.el:
+ * net/tramp-smb.el: Move further compatibility code to tramp-compat.el.
-2006-09-14 Kim F. Storm <storm@cua.dk>
+ * net/tramp-ftp.el (tramp-ftp-file-name-handler): Handle the case
+ where the second parameter of `copy-file' or `rename-file' is a
+ remote file but not via ftp.
- * jit-lock.el (jit-lock-fontify-again): New function.
- (jit-lock-fontify-now): Use it instead of lambda form.
+2007-10-02 Richard Stallman <rms@gnu.org>
-2006-09-13 Agustin Martin <agustin.martin@hispalinux.es>
+ * frame.el (cursor-in-non-selected-windows): Doc fix.
- * textmodes/flyspell.el (flyspell-word, flyspell-correct-word)
- (flyspell-auto-correct-word): Make ispell-filter local to these
- functions. Check that ispell-filter has new stuff before calling
- ispell-parse-output.
+2007-10-01 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-09-13 Kim F. Storm <storm@cua.dk>
+ * play/zone.el (zone): Let-bind show-trailing-whitespace to nil.
+ Suggested by Chris Moore <christopher.ian.moore@gmail.com>.
- * simple.el (line-move-partial): Optimize.
+2007-10-01 Jay Belanger <jay.p.belanger@gmail.com>
-2006-09-13 Richard Stallman <rms@gnu.org>
+ * calc/calc-math.el (math-largest-emacs-expt): Handle the cases
+ when `expt' doesn't give range errors.
- * thingatpt.el (thing-at-point-bounds-of-url-at-point):
- Delete spurious backquote.
+2007-10-01 Markus Triska <markus.triska@gmx.at>
-2006-09-07 Ryan Yeske <rcyeske@gmail.com>
+ * calc/calc-math.el (math-smallest-emacs-expt):
+ Make the computation more robust.
- * net/rcirc.el (rcirc-print): Fix last change.
+2007-09-30 David Kastrup <dak@gnu.org>
-2006-09-12 Jay Belanger <belanger@truman.edu>
+ * startup.el (argv): Alias for `command-line-args-left' to use as
+ `(pop argv)' inside of --eval command sequences. Allows for
+ passing shell commands into Emacs verbatim without need for Lisp
+ quoting.
- * calc/calc.el (calc-dispatch): Remove unnecessary `sit-for'.
+ * autorevert.el (auto-revert-handler): In `auto-revert-tail-mode',
+ check only for changed size.
+ (auto-revert-tail-handler): Get size from caller. If the file has
+ shrunk, tail the whole file again (the file presumably has been
+ rewritten).
-2006-09-07 Ryan Yeske <rcyeske@gmail.com>
+ * woman.el (woman-topic-all-completions, woman-mini-help):
+ Fix fallout from 2007-09-07 introduction of `dolist' when the list
+ actually was being manipulated in the loop.
+ (woman-Cyg-to-Win, woman-pre-process-region)
+ (woman-horizontal-escapes, woman-if-body, woman-unescape)
+ (woman-strings, woman-special-characters, woman1-hc)
+ (woman-change-fonts, woman-find-next-control-line):
+ Use `match-beginning' rather than `match-string' when the result is
+ just used as a flag.
- * net/rcirc.el (rcirc-scroll-show-maximum-output): Rename from
- rcirc-show-maximum-output.
- (rcirc-mode): Remove window-scroll-function hook.
- (rcirc-scroll-to-bottom): Remove function.
- (rcirc-print): Recenter so point stays at the bottom of the window
- if point was already there.
+2007-09-30 Michael Albinus <michael.albinus@gmx.de>
-2006-09-12 Paul Eggert <eggert@cs.ucla.edu>
+ * net/tramp-compat.el: New file.
- * comint.el (comint-exec-1): Set EMACS to the full name of Emacs,
- not to "t".
- * progmodes/compile.el (compilation-start): Likewise.
- * progmodes/idlwave.el (idlwave-rescan-asynchronously):
- Don't use expand-file-name on invocation-directory, since this
- might mishandle special characters in invocation-directory.
+ * net/tramp.el:
+ * net/tramp-fish.el:
+ * net/tramp-smb.el:
+ * net/tramp-uu.el:
+ * net/trampver.el: Move compatibility code to tramp-compat.el.
+ Apply `mapc' instead of `mapcar' when the code needs side effects
+ only. Move utf-8 coding cookie to the second line.
-2006-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-30 Reiner Steib <Reiner.Steib@gmx.de>
- * pcvs-defs.el: Remove * in defcustom's docstrings.
+ * term/x-win.el (x-gtk-stock-map): Add Gnus and MH-E icons.
+ Improve custom type.
+ (icon-map-list): Make it customizable. Document how to disable
+ stock icons.
-2006-09-12 Nick Roberts <nickrob@snap.net.nz>
+2007-09-30 Richard Stallman <rms@gnu.org>
- * progmodes/compile.el (compilation-directory-properties):
- Doc fix for help-echo.
+ * play/zone.el (zone-hiding-modeline): Use mode-line-format.
-2006-09-12 Lars Hansen <larsh@soem.dk>
+2007-09-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * desktop.el (desktop-read): Add comment.
+ * term/x-win.el (x-gtk-stock-map): Version is 22.2.
-2006-09-12 Kim F. Storm <storm@cua.dk>
+2007-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
- * simple.el (next-error-highlight, next-error-highlight-no-select):
- Fix spelling error.
+ * t-mouse.el (gpm-mouse-mode): Rename from t-mouse-mode. Rewrite.
+ (t-mouse-mode): New compatibility alias.
- * subr.el (sit-for): Rework to use input-pending-p and cond.
- Return nil input is pending on entry also for SECONDS <= 0.
- (while-no-input): Use input-pending-p instead of sit-for.
+2007-09-28 Dan Nicolaescu <dann@ics.uci.edu>
-2006-09-11 Richard Stallman <rms@gnu.org>
+ * server.el (server-delete-client): Only delete the terminal if it
+ is non-nil.
- * simple.el (next-error-highlight, next-error-highlight-no-select):
- Fix custom type and doc strings.
+2007-09-28 Michael Albinus <michael.albinus@gmx.de>
-2006-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+ * net/tramp.el (with-file-property, with-connection-property):
+ Highlight as keyword.
+ (tramp-rfn-eshadow-setup-minibuffer)
+ (tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
+ (tramp-set-file-uid-gid, tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-directly)
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-handle-shell-command, tramp-get-debug-buffer)
+ (tramp-send-command-and-read, tramp-equal-remote)
+ (tramp-get-local-gid): Pacify byte-compiler.
+ (tramp-handle-file-name-directory): Result shall not be expanded.
+ (tramp-find-foreign-file-name-handler): Rewrite.
+ (tramp-dissect-file-name): Add optional parameter NODEFAULT.
- * diff-mode.el (diff-apply-hunk-to-backup-file): New var.
- (diff-apply-hunk): Use it to ask for confirmation.
+ * net/tramp-cache.el (tramp-cache-print): Pacify byte-compiler.
-2006-09-11 Reiner Steib <Reiner.Steib@gmx.de>
+ * net/tramp-fish.el (tramp-fish-handle-expand-file-name):
+ Apply `tramp-completion-mode-p'.
+ (tramp-fish-handle-set-file-times)
+ (tramp-fish-handle-executable-find)
+ (tramp-fish-handle-process-file, tramp-fish-get-file-entries)
+ (tramp-fish-retrieve-data): Pacify byte-compiler.
- * emacs-lisp/cl.el (pushnew): Add missing `,'.
+ * net/tramp-gw.el (tramp-gw-basic-authentication):
+ Call `tramp-read-passwd' with first parameter `nil'.
-2006-09-11 David Kastrup <dak@gnu.org>
+2007-09-28 Glenn Morris <rgm@gnu.org>
- * help.el (string-key-binding, describe-key-briefly)
- (describe-key): Remove `string-key-binding' and its callers since
- `key-binding' already caters for the proper lookup now.
+ * mail/supercite.el (sc-attribs-filter-namelist): Use mapc rather
+ than mapcar.
-2006-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+ * textmodes/tex-mode.el (tex-suscript-height-ratio)
+ (tex-suscript-height-minimum): New customizable variables.
+ (tex-suscript-height): New function.
+ (superscript, subscript): Set height using tex-suscript-height
+ rather than fixing at 0.8.
+ (tex-fontify-script, tex-font-script-display): Add :version tag.
- * progmodes/cfengine.el (cfengine-font-lock-syntactic-keywords): Newvar.
- (cfengine-mode): Use it. Fix \ syntax to be like /.
+2007-09-27 Juanma Barranquero <lekktu@gmail.com>
- * bindings.el (mode-line-buffer-identification-keymap):
- Move initialization into declaration.
+ * progmodes/python.el (python-eldoc-function): Doc fix.
-2006-09-10 Kim F. Storm <storm@cua.dk>
+2007-09-27 Glenn Morris <rgm@gnu.org>
- * ido.el (ido-edit-input, ido-complete, ido-take-first-match)
- (ido-push-dir-first, ido-kill-buffer-at-head, ido-exhibit)
- (ido-delete-file-at-head): Pass head of ido-matches through ido-name
- in case of merged directories. Reported by Micha,Ak(Bl Cadilhac.
+ * image.el (image-type-auto-detected-p): Doc fix. Don't detect an
+ image if it is not in image-type-auto-detectable, or is there with
+ a nil value.
-2006-09-10 Richard Stallman <rms@gnu.org>
+2007-09-27 Michael Albinus <michael.albinus@gmx.de>
- * dired-aux.el: Handle errors in recursive copy usefully.
- (dired-create-files-failures): New variable.
- (dired-copy-file): Remove condition-case.
- (dired-copy-file-recursive): Check for errors on all file
- operations, and add them to dired-create-files-failures.
- Check file file-date-erorr here too.
- (dired-create-files): Check dired-create-files-failures
- and report those errors too.
+ * net/tramp.el (tramp-maybe-open-connection): Make test for alive
+ connection more robust.
- * emacs-lisp/cl.el (pushnew): Use add-to-list when convenient.
+2007-09-26 Juanma Barranquero <lekktu@gmail.com>
- * subr.el (add-to-list): New argument COMPARE-FN.
+ * emacs-lisp/eldoc.el (eldoc-function-argstring-format):
+ Deal with the case that special &keywords are at the beginning or
+ end of the argument list. Also add some (incomplete) support for
+ non-standard arglists.
-2006-09-10 Reiner Steib <Reiner.Steib@gmx.de>
+2007-09-26 Juanma Barranquero <lekktu@gmail.com>
+ * emacs-lisp/eldoc.el (eldoc-message-commands-table-size)
+ (eldoc-message-commands, eldoc-current-idle-delay)
+ (eldoc-function-argstring-format): Fix typos in docstrings.
+
+2007-09-26 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-units.el (calc-convert-units)
+ (calc-convert-temperature): Remove unnecessary colons.
+
+2007-09-26 Bastien Guerry <bzg@altern.org>
+
+ * textmodes/org-export-latex.el (org-export-latex-tables-verbatim):
+ New function.
+ (org-export-latex-remove-from-headlines): Name changed because of typo.
+ (org-export-latex-quotation-marks-convention): Option removed.
+ (org-export-latex-make-preamble): Handle the DATE option.
+ (org-export-latex-cleaned-string): Now the only cleaning function,
+ synched up with org.el.
+ (org-export-latex-lists, org-export-latex-parse-list)
+ (org-export-list-to-latex): New functions.
+
+2007-09-26 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-kill-is-subtree-p): Use `org-outline-regexp'.
+ (org-outline-regexp): New constant.
+ (org-remember-handler): Throw error when the target file is not in
+ org-mode.
+ (org-cleaned-string-for-export): No longer call
+ `org-export-latex-cleaned-string' with an argument.
+ (org-get-tags): Returns now a list, not a string.
+ (org-get-tags-string): New function.
+ (org-archive-subtree): No need to split return of `org-get-tags'.
+ (org-set-tags, org-entry-properties): Call `org-get-tags-string'
+ instead of `org-get-tags'.
+ (org-agenda-format-date): Rename from `org-agenda-date-format'.
+ (org-time-from-absolute, org-agenda-format-date-aligned): New funs.
+ (org-compatible-face): New argument INHERITS. Inherit from this
+ face if possible.
+ (org-level-1, org-level-2, org-level-3, org-level-4)
+ (org-level-5, org-level-6, org-level-7, org-level-8)
+ (org-special-keyword, org-drawer, org-column, org-warning)
+ (org-archived, org-todo, org-done, org-headline-done, org-table)
+ (org-formula, org-code, org-agenda-structure)
+ (org-scheduled-today, org-scheduled-previously)
+ (org-upcoming-deadline, org-time-grid): Call `org-compatible-face'
+ in the new way.
+ (org-get-heading): New argument NO-TAGS.
+ (org-fast-tag-selection-include-todo): Made defvar instead of
+ defcustom, feature is not deprecated.
+ (org-remember-store-without-prompt): New default value t.
+ (org-todo-log-states): New variable.
+ (org-set-regexps-and-options): #+TODO is an alias for SEQ_TODO.
+ Compute the log states.
+ (org-goto-map): More commands copied from global map. Also bind
+ `org-occur'.
+ (org-goto): Made into a general lookup command.
+ (org-get-location): Complete rewrite.
+ (org-goto-exit-command): New variable.
+ (org-goto-selected-point): New variable.
+ (org-goto-ret, org-goto-left, org-goto-right, org-goto-quit):
+ Set the new variables.
+ (org-paste-subtree): Whitespace insertion strategy revised.
+ (org-remember-apply-template): Protect v-A from the possibility
+ that v-a might be nil.
+ (org-remember-handler): Insertion rules revised.
+ (org-todo): Respect org-todo-log-states.
+ (org-up-heading-safe): New function.
+ (org-entry-get-with-inheritance): Use `org-up-heading-safe'.
+
+2007-09-26 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/cc-cmds.el (c-indent-line-or-region): Only indent the
+ region if in transient-mark-mode.
+
+2007-09-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * calc/calc-ext.el (calc-init-extensions, calc-reset):
+ * calc/calc-help.el (calc-full-help):
+ * calc/calc-misc.el (another-calc):
+ * calc/calc-store.el (calc-var-name-map):
+ * calc/calc-stuff.el (calc-flush-caches):
+ * calc/calc-units.el (math-build-units-table):
+ * calc/calc.el (calc-digit-map, calc-dispatch-map, calc-mode)
+ (calc-quit):
+ * calendar/icalendar.el (icalendar--format-ical-event)
+ (icalendar--convert-ical-to-diary):
+ * emacs-lisp/authors.el (authors):
+ * emacs-lisp/cust-print.el (custom-print-install)
+ (custom-print-uninstall):
+ * emacs-lisp/disass.el (disassemble-1):
+ * emacs-lisp/easy-mmode.el (easy-mmode-define-syntax):
+ * emacs-lisp/edebug.el (byte-compile-resolve-functions):
+ * emacs-lisp/elint.el (elint-current-buffer, elint-check-defun-form)
+ (elint-check-let-form, elint-check-condition-case-form)
+ (elint-initialize):
+ * emacs-lisp/elp.el (elp-results):
+ * emacs-lisp/generic.el (generic-mode-internal):
+ * emacs-lisp/re-builder.el (reb-delete-overlays):
+ * emacs-lisp/regi.el (regi-interpret):
+ * emacs-lisp/sregex.el (sregex--char-aux):
+ * emulation/cua-rect.el (cua--deactivate-rectangle)
+ (cua--highlight-rectangle, cua--rectangle-post-command):
+ * emulation/viper-keym.el (viper-toggle-key, viper-ESC-key):
+ * emulation/viper-macs.el (viper-describe-kbd-macros)
+ (viper-describe-one-macro):
+ * emulation/viper-util.el (viper-setup-master-buffer):
+ * emulation/viper.el (set-viper-state-in-major-mode):
+ * international/mule-diag.el (describe-current-coding-system):
+ * language/ethio-util.el (ethio-fidel-to-sera-buffer):
+ * mail/emacsbug.el (report-emacs-bug):
+ * net/ange-ftp.el (ange-ftp-call-chmod, ange-ftp-parse-bs2000-listing):
+ * obsolete/hilit19.el (hilit-unhighlight-region)
+ (hilit-set-mode-patterns):
+ * play/solitaire.el (solitaire-check, solitaire-solve):
+ * play/zone.el (zone-pgm-rotate):
+ * progmodes/ada-mode.el (ada-save-exceptions-to-file):
+ * progmodes/ada-prj.el (ada-prj-display-page):
+ * progmodes/delphi.el (delphi-search-directory, delphi-find-unit-file)
+ (delphi-debug-mode-map, delphi-mode-map, delphi-mode):
+ * progmodes/ebrowse.el (ebrowse-tree-mode, ebrowse-view-exit-fn)
+ (ebrowse-member-mode, ebrowse-save-tree-as, ebrowse-save-class):
+ * progmodes/sh-script.el (sh-make-vars-local)
+ (sh-reset-indent-vars-to-global-values):
+ * progmodes/sql.el (top):
+ * progmodes/vhdl-mode.el (vhdl-set-style, vhdl-regress-line):
+ * progmodes/xscheme.el (top):
+ * textmodes/artist.el (artist-mt-get-symbol-from-keyword-sub)
+ (artist-go-retrieve-from-symbol-sub, artist-go-get-symbol-shift-sub)
+ (artist-fc-retrieve-from-symbol-sub, artist-vaporize-line)
+ (artist-vaporize-lines, artist-ellipse-compute-fill-info)
+ (artist-submit-bug-report):
+ * textmodes/flyspell.el (flyspell-delay-commands)
+ (flyspell-deplacement-commands):
+ * textmodes/table.el (table--generate-source-epilogue, table-insert)
+ (table--generate-source-cells-in-a-row, table--make-cell-map)
+ (*table--cell-describe-bindings): Use `mapc' rather than `mapcar'.
+
+2007-09-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * allout.el (produce-allout-mode-map, allout-process-exposed):
+ * ansi-color.el (ansi-color-make-color-map):
+ * autoinsert.el (auto-insert):
+ * bookmark.el (bookmark-bmenu-list, bookmark-show-all-annotations):
+ * dired-aux.el (dired-create-files):
+ * dired.el (dired-restore-desktop-buffer):
+ * ediff-diff.el (ediff-setup-fine-diff-regions):
+ * ediff-mult.el (ediff-intersect-directories)
+ (ediff-redraw-directory-group-buffer, ediff-dir-diff-copy-file)
+ (ediff-redraw-registry-buffer):
+ * ediff-ptch.el (ediff-fixup-patch-map):
+ * ediff-util.el (ediff-toggle-multiframe, ediff-toggle-use-toolbar)
+ (ediff-really-quit, ediff-clear-diff-vector):
+ * emerge.el (emerge-really-quit):
+ * ffap.el (ffap-replace-file-component):
* filecache.el (file-cache-add-directory)
- (file-cache-add-directory-list, file-cache-add-file)
- (file-cache-add-directory-using-find)
- (file-cache-add-directory-using-locate)
- (file-cache-add-directory-recursively): Add autoloads.
-
-2006-09-09 Richard Stallman <rms@gnu.org>
-
- * textmodes/conf-mode.el (conf-space-mode):
- Use hack-local-variables-hook instead of calling hack-local-variables.
- (conf-space-keywords-override): New variable.
- (conf-space-mode-internal): New subroutine. Reinit Font Lock mode.
- (conf-space-mode): Always make conf-space-keywords and
- conf-space-keywords-override local.
- Call conf-space-mode-internal directly as well as via hook.
-
-2006-09-09 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
-
- * progmodes/python.el (python-font-lock-keywords): Add `self' and other
- quasi-keywords.
-
-2006-09-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/python.el: Quieten the compiler about hippie-expand vars.
- (python-send-string): Be slightly more careful about adding \n.
-
- * startup.el (normal-splash-screen): Don't display the buffer if we'll
- kill it right away anyway.
-
-2006-09-09 Eli Zaretskii <eliz@gnu.org>
-
- * international/codepage.el (cp850-decode-table): Fix a few codes.
- (cp858-decode-table): New variable.
-
-2006-09-09 Toby Allsopp <Toby.Allsopp@navman.com> (tiny change)
-
- * net/ldap.el (ldap-search-internal): Doc fix.
-
-2006-09-09 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * play/life.el (life-display-generation): Test for input manually if
- `sleeptime' is negative or null.
-
- * lpr.el (lpr-page-header-switches): Page title switch is one of them.
- (print-region-1): Substitute `%s' with the page title.
-
-2006-09-09 Matt Hodges <MPHodges@member.fsf.org>
-
- * locate.el (locate-current-search): New variable.
- (locate): Set buffer local value. Use current buffer if it is
- in Locate mode.
- (locate-mode): Disable undo here.
- (locate-do-setup): Use locate-current-filter from buffer to be killed.
- (locate-update): Use locate-current-search and locate-current-filter.
-
-2006-09-08 David Kastrup <dak@gnu.org>
-
- * desktop.el (desktop-read): When loading a desktop, disable
- saving it while the load progresses, and switch off a pending lazy
- load by calling `desktop-lazy-abort'.
-
-2006-08-27 Martin Rudalics <rudalics@gmx.at>
-
- * window.el (mouse-autoselect-window-timer)
- (mouse-autoselect-window-position)
- (mouse-autoselect-window-window)
- (mouse-autoselect-window-now): New vars.
- (mouse-autoselect-window-cancel)
- (mouse-autoselect-window-select)
- (mouse-autoselect-window-start): New functions.
- (handle-select-window): Call `mouse-autoselect-window-start' when
- delayed window autoselection is enabled.
-
- * cus-start.el (mouse-autoselect-window): Handle delayed window
- autoselection.
-
- * emacs-lisp/eldoc.el: Add `handle-select-window' to the set of
- commands after which it is allowed to print in the echo area.
-
-2006-09-08 Richard Stallman <rms@gnu.org>
-
- * textmodes/fill.el (adaptive-fill-regexp): Don't match `(1)' or `1.'
-
- * mail/rmail.el (rmail-get-new-mail): Say whether all msgs are spam.
- (rmail-convert-to-babyl-format): Don't record undo, leave list empty.
-
- * emacs-lisp/timer.el (timer-create, timer-activate): Doc fixes.
- (cancel-timer-internal): Add doc string.
- (cancel-function-timers): Doc fix.
- (with-timeout-handler, timer-event-last*): Add doc strings.
-
- * emacs-lisp/bindat.el (bindat-unpack): Doc fix.
-
- * files.el (risky-local-variable-p): Match ...-bindat-spec.
-
- * dired.el (dired-log-summary): Add doc string.
-
- * cus-edit.el (custom-menu-create): Bind deactivate-mark here.
- (custom-group-menu-create): Not here.
-
-2006-09-08 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-dblock-write:clocktable): Avoid infinite loop.
-
-2006-09-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (show-hide-font-panel): New HI command ID symbol.
- (mac-apple-event-map): Define its handler.
-
-2006-09-07 Toby Allsopp <Toby.Allsopp@navman.com> (tiny change)
-
- * net/ldap.el (ldap-search-internal): Handle `auth' key.
-
-2006-09-07 Magnus Henoch <mange@freemail.hu>
-
- * net/rcirc.el (rcirc-activity-string): Don't quote value in case
- clause.
-
-2006-09-07 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * info.el (Info-index): Bind completion-ignore-case.
-
-2006-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/prolog.el (inferior-prolog-flavor): New var left out of
- previous commit.
- (inferior-prolog-guess-flavor): New fun left out of previous commit.
- (prolog-consult-region-and-go): Don't hard code "*prolog*" and don't
- burp in dedicated windows.
- (inferior-prolog-self-insert-command): New command.
- (inferior-prolog-mode-map): Use it.
-
-2006-09-07 Reiner Steib <Reiner.Steib@gmx.de>
-
- * international/latexenc.el (latex-inputenc-coding-alist): Add cp858.
-
- * international/code-pages.el: Add cp858.
-
-2006-09-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * dnd.el: Fix bootstrapping.
-
-2006-09-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
- (dnd-open-remote-url): New function.
- (dnd-open-remote-file-function): Set to dnd-open-remote-url if
- not windows-nt.
-
-2006-09-07 Jason Rumney <jasonr@gnu.org>
-
- * dnd.el (dnd-open-remote-file-function): New variable.
- (dnd-open-unc-file): New function.
- (dnd-open-file): Call dnd-open-remote-file-function if set.
-
-2006-09-06 Daiki Ueno <ueno@unixuser.org>
-
- * pgg-gpg.el (pgg-gpg-process-region): Encode passphrase with
- pgg-passphrase-coding-system rather than locale-coding-system.
- * pgg-def.el (pgg-passphrase-coding-system): New user option.
-
-2006-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/prolog.el: Remove * in docstrings.
- (prolog-program-name): Add SWI prolog.
- (prolog-mode-menu): New menu.
- (prolog-mode): Set comment-add.
- (prolog-indent-line): Simplify. Use indent-line-to.
- (inferior-prolog-buffer): New var.
- (inferior-prolog-run, inferior-prolog-process): New funs.
- (run-prolog, switch-to-prolog): Rewrite, using them.
- (prolog-consult-region): Use inferior-prolog-buffer.
- (inferior-prolog-load-file): New function.
- (prolog-mode-map): Add bindings for load-file and switch-to-prolog.
-
- * textmodes/fill.el (fill-single-word-nobreak-p): Allow breaking before
- last word, if it's not the end of the paragraph.
-
- * files.el (abbreviate-file-name): Don't mistakenly match newlines in
- file name.
-
-2006-09-06 Ralf Angeli <angeli@caeruleus.net>
-
- * frame.el (display-mm-dimensions-alist): New defcustom.
- (display-mm-height, display-mm-width): Use it.
-
-2006-09-06 Simon Josefsson <jas@extundo.com>
-
- * mail/smtpmail.el (smtpmail-starttls-credentials): Doc fix.
-
-2006-09-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-list-children-regexp)
- (gdb-var-list-children-regexp-1): Tweak regexps to catch full
- string values.
-
-2006-09-06 Kim F. Storm <storm@cua.dk>
-
- * simple.el (line-move-partial): New function to do vscrolling for
- partially visible images / tall lines. Rewrite based on code
- previously in line-move. Simplify backwards vscrolling.
- (line-move): Use it. Simplify.
+ (file-cache-add-directory-recursively)
+ (file-cache-add-from-file-cache-buffer, file-cache-delete-file-regexp)
+ (file-cache-delete-directory, file-cache-files-matching-internal)
+ (file-cache-display):
+ * files.el (cd):
+ * find-lisp.el (find-lisp-insert-directory):
+ * finder.el (finder-compile-keywords):
+ * help.el (view-emacs-news):
+ * hi-lock.el (hi-lock-write-interactive-patterns):
+ * ido.el (ido-to-end, ido-set-matches-1):
+ * image-dired.el (image-dired-display-thumbs, image-dired-remove-tag)
+ (image-dired-mark-tagged-files):
+ * jka-cmpr-hook.el (jka-compr-get-compression-info):
+ * printing.el (pr-eval-local-alist, pr-eval-setting-alist):
+ * ps-print.el (ps-background, ps-begin-file)
+ (ps-build-reference-face-lists):
+ * simple.el (clone-buffer):
+ * startup.el (command-line):
+ * tempo.el (tempo-insert-template, tempo-is-user-element)
+ (tempo-forward-mark, tempo-backward-mark):
+ * woman.el (woman-dired-define-keys): Use `mapc' rather than `mapcar'.
-2006-09-05 Kim F. Storm <storm@cua.dk>
+2007-09-25 Glenn Morris <rgm@gnu.org>
- * emulation/cua-base.el (cua--pre-command-handler-1): Rewrite.
+ * textmodes/tex-mode.el (tex-font-script-display): Doc fix.
-2006-09-05 Chong Yidong <cyd@stupidchicken.com>
+ * view.el (view-search-no-match-lines): Add a doc string.
+ Rewrite to simplify and work better.
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Process the `gcc-include' after the `gnu' rule.
+2007-09-24 Dan Nicolaescu <dann@ics.uci.edu>
-2006-09-05 Kim F. Storm <storm@cua.dk>
+ * progmodes/cc-mode.el (c-mode-base-map):
+ Use c-indent-line-or-region instead of c-indent-line.
- * ido.el (ido-visit-buffer): Use buffer name if buffer arg is a buffer.
+ * indent.el (indent-for-tab-command): First check if the region is
+ active.
-2006-09-05 Daiki Ueno <ueno@unixuser.org>
+2007-09-24 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * pgg.el (pgg-clear-string): Alias to clear-string for backward
- compatibility.
+ * whitespace.el (whitespace-tickle-timer): Don't install the timer if
+ whitespace-rescan-timer-time is 0.
- * pgg-gpg.el (pgg-gpg-process-region): Avoid display blinking with
- inhibit-redisplay; encode passphrase with locale-coding-system.
+2007-09-24 Karl Berry <karl@gnu.org>
-2006-09-04 Dan Nicolaescu <dann@ics.uci.edu>
+ * international/mule.el (coding-system-base): Fix doc string grammar.
- * term/xterm.el (terminal-init-xterm): Add more C-M- bindings.
+2007-09-24 Michael Albinus <michael.albinus@gmx.de>
-2006-09-05 Nick Roberts <nickrob@snap.net.nz>
+ * net/tramp.el (tramp-completion-mode-p): Rename from
+ `tramp-completion-mode'. Revert logic, check `return', `newline'
+ and such alike. Packages like Icicles tend to use other completion
+ characters but `tab' and `space' only.
- * progmodes/gdb-ui.el (gdb-var-list-children-regexp)
- (gdb-var-list-children-regexp): Make type field optional.
+2007-09-24 Adam Hupp <adam@hupp.org>
- * progmodes/gud.el (gud-speedbar-buttons): Allow for no type
- e.g public, protected in C++.
+ * progmodes/python.el (run-python): Import emacs module without
+ waiting; prevents lockup on error.
-2006-09-04 John Paul Wallington <jpw@pobox.com>
+2007-09-23 Richard Stallman <rms@gnu.org>
- * simple.el (completion-show-help): New defcustom.
- (completion-setup-function): Heed it.
+ * mail/sendmail.el (mail-bury): Delete the frame
+ if this frame looks like it was made for this message.
-2006-09-04 Dan Nicolaescu <dann@ics.uci.edu>
+ * completion.el (completion-separator-self-insert-command)
+ (completion-separator-self-insert-autofilling):
+ If `self-insert-command' has been remapped, use the substitute.
- * term/xterm.el (terminal-init-xterm): Add C-M- bindings.
+ * simple.el (copy-region-as-kill): Doc fix.
-2006-09-04 Richard Stallman <rms@gnu.org>
+ * textmodes/org.el (org-confirm-shell-link-function)
+ (org-confirm-elisp-link-function): Doc fixes.
- * mail/rmail-spam-filter.el (rsf-scanning-messages-now): Doc fix.
- (rsf-min-region-to-spam-list): Doc fix.
- (rsf-add-content-type-field): Doc fix.
+2007-09-23 Glenn Morris <rgm@gnu.org>
- * simple.el (kill-region): Explicitly test there is a region.
+ * ses.el (ses-calculate-cell): Don't evaluate unsafe formulae.
-2006-09-04 Chong Yidong <cyd@stupidchicken.com>
+2007-09-23 Dan Nicolaescu <dann@ics.uci.edu>
- * mail/feedmail.el (feedmail-buffer-to-sendmail): Look for
- sendmail in several common directories.
+ * term/w32-win.el (w32-drag-n-drop): Use mapc instead of mapcar.
- * mail/sendmail.el (sendmail-program): Moved here from paths.el.
+ * term/tvi970.el (terminal-init-tvi970): Likewise.
- * paths.el (sendmail-program): Removed.
+ * term/sun-mouse.el (print-mouse-format): Likewise.
-2006-09-04 Daiki Ueno <ueno@unixuser.org>
+ * term/sun.el (scroll-down-in-place, scroll-up-in-place):
+ Use forward-line instead of previous-line and next-line.
- * pgg-gpg.el (pgg-gpg-process-region): Revert two patches from Satyaki
- Das. http://article.gmane.org/gmane.emacs.gnus.general/49947
- http://article.gmane.org/gmane.emacs.gnus.general/50457
+2007-09-22 Juri Linkov <juri@jurta.org>
-2006-09-03 Chong Yidong <cyd@stupidchicken.com>
+ * textmodes/org.el (org-confirm-shell-link-function): Doc fix.
- * cus-edit.el (custom-group-menu-create): Avoid deactivating the
- mark after running the menu filter.
+ * tutorial.el (tutorial--default-keys): Update standard bindings:
+ rename `iconify-or-deiconify-frame' to `suspend-frame',
+ and `save-buffers-kill-emacs' to `save-buffers-kill-terminal'.
-2006-09-03 Juri Linkov <juri@jurta.org>
+2007-09-22 Juri Linkov <juri@jurta.org>
- * international/quail.el (quail-defrule-internal): Add a check
- if a key is a vector.
+ * startup.el (fancy-startup-text, fancy-about-text, fancy-startup-tail):
+ Add help-echo to external links and to links without description.
+ (fancy-splash-insert): Use help-echo from the 3rd element of the
+ link specification list, or "Follow this link" if it's nil. Doc fix.
-2006-09-02 Juri Linkov <juri@jurta.org>
+2007-09-22 Juri Linkov <juri@jurta.org>
- * man.el (Man-topic-history): New variable.
- (man): Use it.
+ * startup.el (command-line): Rename `inhibit-startup-message' to
+ `inhibit-startup-screen'.
+ (fancy-about-text): Use shorter label for "Ordering Manuals".
+ (fancy-startup-tail): Add optional arg `concise'. When `concise'
+ is nil, display a line with "To start..." and 3 links to useful
+ tasks. Display the "Dismiss" button and "Don't show this message
+ again" only when concise is non-nil.
+ (fancy-startup-screen): Call `fancy-startup-tail' with optional
+ arg `concise'. If CONCISE is non-nil, display a concise version
+ of the splash screen in another window. Otherwise, switch to the
+ startup buffer in the same window.
+ (startup-echo-area-message): Change displayed binding from
+ C-h C-p (describe-project) to C-h C-a (about-emacs), and change
+ text "about the GNU system and GNU/Linux" to "about GNU Emacs and
+ the GNU system".
+ (display-startup-screen): Fix buffer name from "*About GNU Emacs*"
+ to "*GNU Emacs*".
+ (display-about-screen): Don't check the existence of the buffer
+ "*About GNU Emacs*".
+ (display-splash-screen): Make alias to `display-startup-screen'.
+ (command-line-1): Rename `inhibit-startup-message' to
+ `inhibit-startup-screen'. Inhibit startup screen when Emacs is
+ started with command line options "-f", "-funcall", "-e", "-eval",
+ "-execute", "-insert", "-find-file", "-file", "-visit".
+ Inhibit startup screen when Emacs is started with a file name only
+ on tty (i.e. don't inhibit it when started with a file name like
+ "emacs FILE..." on a window system).
+ (command-line-1): Simplify logic of displaying the startup screen:
+ if file-count > 0, then display the concise version in another
+ window, otherwise display full version in the same window.
- * woman.el (woman-topic-history): Change defvar to defvaralias
- for symbol `Man-topic-history'.
+ * help.el (help-map): Bind C-h C-a to about-emacs.
+ (help-for-help-internal): Add C-a description to C-h help text.
- * shell.el (shell-filter-ctrl-a-ctrl-b): Check if
- `comint-last-output-start' is a marker by using `markerp' and
- check if it has a position by using `marker-position', and use
- this position for `goto-char'.
+2007-09-22 Dan Nicolaescu <dann@ics.uci.edu>
- * international/quail.el (quail-defrule-internal): Add missing
- `error' call for null key.
+ * emacs-lisp/checkdoc.el (checkdoc-force-docstrings-flag)
+ (checkdoc-permit-comma-termination-flag): Autoload the
+ safe-local-variable setting.
-2006-09-02 Ryan Yeske <rcyeske@gmail.com>
+ * bookmark.el (bookmark-xemacsp): Remove.
+ (bookmark-make): Don't use bookmark-xemacsp,
+ use (featurep 'xemacs) instead.
- * net/rcirc.el (rcirc-keywords): New variable.
- (rcirc-bright-nicks, rcirc-dim-nicks): New variables.
- (rcirc-bright-nick-regexp, rcirc-dim-nick-regexp): Remove
- variables.
- (rcirc-responses-no-activity): New function.
- (rcirc-handler-generic): Check for responses in above.
- (rcirc-process-command): Add ?: character to arguments of raw
- server commands.
- (rcirc-format-response-string): Use `rcirc-bright-nicks' and
- `rcirc-dim-nicks'.
- (rcirc-gray-toggle): Remove unused variable.
- (rcirc-print): Remove some tracking logic, which is moved into
- markup functions.
- (rcirc-activity-types): Was `rcirc-activity-type', now a list of
- types.
- (rcirc-activity-string): Look for 'keyword in activity-types.
- (rcirc-window-configuration-change): Don't erase overlay-arrow
- unnecessarily.
- (rcirc-add-or-remove): New function.
- (rcirc-cmd-ignore): Use it.
- (rcirc-message-leader): Remove unused function.
- (rcicr-cmd-bright, rcirc-cmd-dim, rcirc-cmd-keyword): New commands.
- (rcirc-add-face): New function.
- (rcirc-facify): Use rcirc-add-face.
- (rcirc-url-regexp): Add parens.
- (rcirc-map-regexp): Remove function.
- (rcirc-mangle-regexp): Remove function.
- (rcirc-markup-text-functions): New variable.
- (rcirc-markup-text): New function (replaces `rcirc-mangle-text').
- (rcirc-markup-body-text, rcirc-markup-attributes)
- (rcirc-markup-my-nick, rcirc-markup-urls, rcirc-markup-keywords)
- (rcirc-markup-bright-nicks): New markup handler functions.
- (rcirc-nick-in-message-full-line): New face.
- (rcirc-track-nick): Rename from `rcirc-mode-line-nick'.
- (rcirc-track-keyword, rcirc-url, rcirc-keyword): New faces.
+ * speedbar.el (speedbar-frame-mode)
+ (speedbar-frame-reposition-smartly)
+ (speedbar-set-mode-line-format, speedbar-reconfigure-keymaps)
+ (speedbar-check-vc): Remove use of non-existent variable
+ dframe-xemacsp, use (featurep 'xemacs) instead.
-2006-09-02 Martin Rudalics <rudalics@gmx.at>
+ * indent.el (indent-for-tab-command): Indent the region if
+ transient-mark-mode and the region is active.
- * cus-start.el (hscroll-margin, hscroll-step)
- (mode-line-in-non-selected-windows, mouse-autoselect-window)
- (x-use-underline-position-properties): Change version to "22.1"
- since they will appear there for the first time.
+2007-09-21 Francesco Potort,Al(B <pot@gnu.org>
-2006-09-01 Chong Yidong <cyd@stupidchicken.com>
+ * progmodes/octave-inf.el (inferior-octave-mode): Use add-hook to
+ add inferior-octave-directory-tracker to the buffer-local value
+ of comint-input-filter-functions.
- * imenu.el (imenu-update-menubar): Use buffer-chars-modified-tick.
+2007-09-21 Dan Nicolaescu <dann@ics.uci.edu>
-2006-08-31 Richard Stallman <rms@gnu.org>
+ * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
- * cus-edit.el (custom-save-variables): Slight cleanup.
- (Custom-no-edit): Renamed from custom-no-edit.
- (Custom-newline): Renamed from custom-newline.
- (custom-mode-map): Use new names.
+2007-09-21 Juanma Barranquero <lekktu@gmail.com>
- * emacs-lisp/easy-mmode.el (define-minor-mode): Reference manual
- about customization, rather than M-x customize, in the doc string
- made for the defcustom.
+ * frame.el (suspend-frame): Call `iconify-or-deiconify-frame' also
+ on w32 frames.
- * emacs-lisp/trace.el (trace-function-background): Doc fix.
+2007-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-08-31 Romain Francoise <romain@orebokech.com>
+ * startup.el (normal-top-level): Remove DISPLAY from
+ process-environment to let it be computed dynamically in callproc.c.
- * dired-x.el (dired-guess-shell-alist-default): Update.
+ * frame.el (frame-initialize, make-frame):
+ * faces.el (tty-set-up-initial-frame-faces):
+ * env.el (setenv): Don't set display-environment-variable.
-2006-08-31 Michael Mauger <mmaug@yahoo.com>
+ * server.el (server-getenv-from): Remove. Use getenv-internal instead.
+ (server-create-tty-frame): Don't set unused `tty' property.
+ Set `display' instead of display-environment-variable.
+ (server-create-window-system-frame): No display-environment-variable.
- * custom.el (custom-theme-set-variables): Autoload packages before
- sorting the variables.
+2007-09-21 Michael Albinus <michael.albinus@gmx.de>
-2006-08-30 Michael Kifer <kifer@cs.stonybrook.edu>
+ * rfn-eshadow.el (rfn-eshadow-setup-minibuffer-hook)
+ (rfn-eshadow-update-overlay-hook): New defvars.
+ (rfn-eshadow-setup-minibuffer, rfn-eshadow-update-overlay):
+ Run the hooks.
- * emulation/viper-cmd.el (viper-special-read-and-insert-char):
- Convert events to chars if XEmacs.
- (viper-after-change-undo-hook): Check if undo-in-progress is bound.
+ * net/tramp.el (tramp-rfn-eshadow-overlay): New defvar.
+ (tramp-rfn-eshadow-setup-minibuffer)
+ (tramp-rfn-eshadow-update-overlay): New defuns. Hook into
+ rfn-eshadow.el.
-2006-08-30 Stefan Monnier <monnier@iro.umontreal.ca>
+ * net/tramp-smb.el (tramp-smb-errors): Add error message for call
+ timeout.
- * progmodes/python.el (python-eldoc-function): Re-enable quit while
- waiting for process.
+2007-09-21 Glenn Morris <rgm@gnu.org>
-2006-08-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * obsolete/sun-fns.el (emacs-quit-menu): Remove emacstool-related code.
+ * term/sun-mouse.el (suspend-emacstool): Remove.
+ * term/sun.el: Remove emacstool-related code.
- * term/mac-win.el (mac-string-to-utxt): If adjustment for MacJapanese
- results in ASCII-only string, encode original one directly.
+ * emacs-lisp/bytecomp.el (byte-compile-warnings)
+ (byte-compile-warnings-safe-p): Add `mapcar'.
+ (byte-compile-warning-types): Add mapcar and make-local.
+ (byte-compile-normal-call): Add option to suppress mapcar warning.
+ (top-level): Use mapc rather than mapcar in eval-when-compile.
-2006-08-29 Romain Francoise <romain@orebokech.com>
+ * textmodes/tex-mode.el (tex-validate-region): Handle escaped parens.
+ (tex-next-unmatched-eparen, tex-last-unended-eparen): New functions.
+ (latex-forward-sexp-1, latex-backward-sexp-1): Doc fix.
+ Handle escaped parens.
+ (latex-forward-sexp): Doc fix.
- * startup.el (normal-splash-screen, fancy-splash-screens):
- Make buffer read-only and arrange to enter view mode if necessary.
+ * eshell/esh-mode.el (eshell-output-filter-functions):
+ Add eshell-postoutput-scroll-to-bottom.
-2006-08-29 Chong Yidong <cyd@stupidchicken.com>
+ * loadup.el: Remove termdev.
- * hl-line.el (hl-line): New face.
- (hl-line-face): Use it.
+ * progmodes/fortran.el (fortran-mode-abbrev-table, fortran-line-length):
+ * progmodes/f90.el (f90-mode-abbrev-table): Use mapc rather than mapcar.
- * image-mode.el (image-mode): Fix last fix.
- Suggested by Kim F. Storm.
+2007-09-21 Markus Triska <markus.triska@gmx.at>
-2006-08-29 Michael Albinus <michael.albinus@gmx.de>
+ * emacs-lisp/bytecomp.el (byte-compile-normal-call): Warn when
+ `mapcar' is called for effect.
- Sync with Tramp 2.0.54.
+2007-09-21 Kevin Ryde <user42@zip.com.au>
- * net/tramp.el (tramp-convert-file-attributes): Call `eql' instead
- of `=', because `tramp-get-remote-gid' might not always return an
- integer when expected.
- (tramp-register-file-name-handlers): `partial-completion-mode' is
- unknown to XEmacs.
- (tramp-time-diff): Don't use `floor', it might fail for large
- differences.
- (tramp-handle-make-auto-save-file-name): For Emacs 21, set
- `tramp-auto-save-directory' if unset in order to guarantee unique
- auto-save file names.
+ * international/mule.el (sgml-html-meta-auto-coding-function):
+ Bind `case-fold-search' to t.
-2006-08-28 Chong Yidong <cyd@stupidchicken.com>
+2007-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * image-mode.el (image-mode): Display image as text on a terminal.
+ * termdev.el: Remove.
-2006-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * frame.el (get-device-terminal): New function. Moved from termdev.el.
+ (frames-on-display-list): Use it.
- * progmodes/python.el (python-send-command): Simplify.
- (run-python): Don't generate a new buffer unless `new' was specified.
- Make sure we send `import emacs' to the proper process.
+ * bindings.el: Bind C-z to suspend-frame instead of suspend-emacs.
- * progmodes/python.el (python-send-command): Don't wait for the command
- to terminate. Don't fiddle with compilation-parsing-end.
+ * termdev.el (terminal-id): Ask terminal-live-p before giving up.
-2006-08-28 Chong Yidong <cyd@stupidchicken.com>
+2007-09-20 Richard Stallman <rms@gnu.org>
- * emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
- Insert commentary after first line summary.
+ * newcomment.el (comment-add): If EXTRA, double `comment-add' value.
- * woman.el (woman-follow): New function, based on `man-follow'.
- (woman-mode-map): Use it.
+2007-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * ibuffer.el (ibuffer-do-sort-by-recency): Perform full update
- since ibuffer-do-sort-by-recency does not define a sorter.
+ * add-log.el (add-log-current-defun): Fix thinko w.r.t derived-mode-p.
-2006-08-28 Kim F. Storm <storm@cua.dk>
+2007-09-20 Glenn Morris <rgm@gnu.org>
- * find-dired.el (find-dired): Use shell-quote-argument to properly
- escape ( and ) args. Also use it on {} and ; args in default
- value of find-ls-option string.
- (find-grep-dired): Use shell-quote-argument on {} and ; args.
+ * textmodes/tex-mode.el (tex-validate-buffer): Use paragraph
+ motion functions, rather than hard-coding "\n\n".
+ (tex-validate-region): Check for eobp, to speed up.
+ (tex-next-unmatched-end): Doc fix.
-2006-08-27 Michael Olson <mwolson@gnu.org>
+2007-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
- * emacs-lisp/tq.el: Small grammar fix in comments.
- (tq-enqueue): Check for existence of queue rather than the
- head queue item's question, which was a no-op.
- (tq-filter, tq-process-buffer): Make sure the process buffer
- exists before making it the current buffer.
+ * files.el (auto-mode-alist): Use archive-mode for .rar files.
-2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * international/mule.el (auto-coding-alist): Rar archives are binary.
- * term/mac-win.el (mac-apple-event-map): Rename hicommand to hi-command.
- (mac-dnd-drop-data): Apply 2006-08-22 change for x-dnd-drop-data.
- (special-event-map): Apply 2006-08-16 change for x-win.el.
+ * arc-mode.el: Add basic support for Rar.
+ (archive-find-type): Recognize Rar's signature.
+ (archive-desummarize): New fun.
+ (archive-summarize): Use it to restore the buffer's data in case
+ someone wants to switch to some other major mode.
+ (archive-resummarize): Use it as well.
+ (archive-rar-summarize, archive-rar-extract): New functions.
-2006-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
+ * filesets.el: Remove spurious * in docstrings.
+ (filesets-running-xemacs): Remove. Use (featurep 'xemacs) instead.
+ (filesets-conditional-sort): Remove unused arg `simply-do-it'.
+ (filesets-ingroup-collect): Remove unused arg `depth'.
+ (filesets-update): Remove unused arg `version'.
- * progmodes/python.el (python-send-receive): Wait in the
- process's buffer so as to check the right buffer-local variables.
+ * finder.el (finder-compile-keywords): Fix up comment style.
+ (finder-mouse-face-on-line): previous-line -> forward-line.
-2006-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
+ * recentf.el: Remove spurious * in docstrings.
+ (recentf-save-list): Fix up comment style.
- * emacs-lisp/checkdoc.el: Remove * in defcustoms.
- (defgroup checkdoc): Move to beginning.
+ * progmodes/octave-mod.el: Remove spurious * in docstrings.
+ (octave-mode-map): Move init into declaration and remove \t binding.
+ (octave-mode-startup-message): Remove unused var.
+ (octave-scan-blocks): Remove unused arg `from'.
+ (octave-forward-block, octave-down-block, octave-up-block):
+ Update callers.
- * progmodes/python.el (python-preoutput-skip-next-prompt): New var.
- (python-preoutput-continuation): Remove.
- (python-preoutput-filter): Simplify correspondingly.
- Remove handling of _emacs_ok. Make sure we skip _emacs_out's prompts.
- Loop around to catch embedded _emacs_out output.
- (run-python): Send the import&print command on a single line.
- (python-send-command): Send command&print on a single line.
- (python-send-string): Only add double \n if needed.
- (python-send-receive): Loop until the result comes.
- (python-mode-running): Defvar it.
- (python-setup-brm): Remove unused var `menu'.
- Only bind py-mode-map and `features' around brm-init.
- (python-calculate-indentation): Remove unused var `point'.
- (python-beginning-of-defun): Remove unused var `def-line'.
+ * progmodes/meta-mode.el (meta-mode-syntax-table): Move init into decl.
+ (meta-mode-map): Likewise and remove \t binding.
-2006-08-25 Richard Stallman <rms@gnu.org>
+ * net/snmp-mode.el: Remove spurious * in docstrings.
+ (snmp-rfc1155-types, snmp-rfc1213-types, snmp-rfc1902-types)
+ (snmp-rfc1903-types, snmp-rfc1155-access, snmp-rfc1902-access)
+ (snmp-rfc1212-status, snmp-rfc1902-status): Remove list wrappers now
+ that completion accepts lists of strings.
+ (snmp-mode-syntax-table): Move initialization into declaration.
+ (snmp-mode-map): Likewise and remove \t binding.
+ (snmp-common-mode): Set tab-always-indent according to snmp-t-a-i.
+ (snmp-indent-line, snmp-mode-imenu-create-index): Remove unused var.
+ (snmp-indent-command): Remove.
- * kmacro.el (kmacro-repeat-on-last-key): Doc fix.
+ * emacs-lisp/lisp-mode.el (lisp-mode-shared-map): Use the default TAB
+ binding, so tab-always-indent works right.
-2006-08-25 Michael Kifer <kifer@cs.stonybrook.edu>
+2007-09-19 Johannes Weiner <hannes@saeurebad.de>
- * emulation/viper.el (viper-set-hooks): Use frame bindings for
- viper-vi-state-cursor-color.
- (viper-non-hook-settings): Don't set default
- mode-line-buffer-identification.
+ * net/browse-url.el (browse-url-elinks-new-window): New function.
+ (browse-url-elinks): Use browse-url-elinks-new-window.
+ Accept optional second argument `new-window'. Fix typo in doc-string.
+ (browse-url-elinks-sentinel): Use browse-url-elinks-new-window.
+ Improve error message.
- * emulation/viper-util.el (viper-set-cursor-color-according-to-state):
- New fun.
- (viper-set-cursor-color-according-to-state)
- (viper-get-saved-cursor-color-in-replace-mode)
- (viper-get-saved-cursor-color-in-insert-mode): Make conditional on
- viper-emacs-state-cursor-color.
-
- * emulation/viper-cmd.el (viper-envelop-ESC-key): Bug fix.
- (viper-undo): Use point if undo-beg-posn is nil.
- (viper-insert-state-post-command-sentinel, viper-change-state-to-emacs)
- (viper-after-change-undo-hook): Don't use
- viper-emacs-state-cursor-color by default.
- (viper-undo): More sensible positioning after undo.
-
- * emulation/viper-ex.el (ex-splice-args-in-1-letr-cmd): Get rid of caddr.
- (viper-emacs-state-cursor-color): Default to nil, since this feature
- doesn't work well yet.
+2007-09-19 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * ediff-mult.el (ediff-intersect-directories)
- (ediff-get-directory-files-under-revision, ediff-dir-diff-copy-file):
- always expand filenames.
+ * net/browse-url.el (browse-url-url-encode-chars): Use the right
+ parameter name in the function body.
+ Reported by Johannes Weiner.
-2006-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-19 Glenn Morris <rgm@gnu.org>
- * tumme.el: Remove * in defcustoms's docstrings.
+ * net/socks.el (socks-open-network-stream): Signal an explicit
+ error if the port associated with a service string can't be found.
-2006-08-24 Chong Yidong <cyd@stupidchicken.com>
+ * textmodes/tex-mode.el (tex-terminate-paragraph):
+ Use backward-paragraph.
- * emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
- Accept internal time format for SECS arg.
- (timer-relative-time): Doc fix.
+2007-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
- * jit-lock.el: "Stealth fontification by requeuing timers" patch,
- adapted from Martin Rudalics.
- (jit-lock-stealth-repeat-timer, jit-lock-stealth-buffers): New vars.
- (jit-lock-mode): Create jit-lock-stealth-repeat-timer.
- (jit-lock-stealth-fontify): Reschedule as a idle timer instead of
- using sit-for.
+ * server.el (server-running-p): New function.
-2006-08-24 Francesc Rocher <francesc.rocher@gmail.com>
+2007-09-18 Jason Rumney <jasonr@gnu.org>
- * cus-start.el (all): Add `overline-margin' and
- `x-underline-at-descent-line'.
+ * term/w32-win.el (w32-focus-frame): Make obsolete alias for
+ x-focus-frame.
-2006-08-24 Kim F. Storm <storm@cua.dk>
+ * frame.el (select-frame-set-input-focus, select-frame-by-name):
+ Use x-focus-frame for w32.
- * progmodes/grep.el (grep-find-use-xargs): Use explicit value `exec'
- to mean "use find -exec"; nil now unambiguously means auto-detect.
- (grep-compute-defaults): Set grep-find-use-xargs to `exec' if not `gnu'.
- Use shell-quote-argument to build grep-find-command and
- grep-find-template.
- (rgrep): Use shell-quote-argument to properly quote arguments to find.
- Reported by Tom Seddon.
-
-2006-08-23 Chong Yidong <cyd@stupidchicken.com>
-
- * startup.el (fancy-splash-head): Give instructions for dismissing
- the splash screen for default startup too.
- (display-startup-echo-area-message, fancy-splash-screens)
- (use-fancy-splash-screens-p): New arg hide-on-input. If nil, show
- all splash text at once and keep the splash buffer around.
- (command-line-1): Give display-startup-echo-area-message a t arg.
-
-2006-08-23 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-follow-gnus-link): Make sure the dedicated
- gnus frame is selected.
-
-2006-08-23 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-starting): Reset gdb-signalled to nil.
-
-2006-08-22 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-set-matches-1): Fix full matching for subdirs.
- Add suffix matching for subdirs.
-
-2006-08-22 Jorgen Schaefer <forcer@forcix.cx> (tiny change)
-
- * x-dnd.el (x-dnd-drop-data): Don't call goto-char if
- mouse-yank-at-point is non-nil.
-
-2006-08-22 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-frame-memory-buffer): Make frame
- a bit wider and remove fringes to fit initial output on line.
-
-2006-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * frame.el (blink-cursor-end): Only ignore the error we care about.
- (blink-cursor-mode): Use blink-cursor-end to simplify the code.
-
-2006-08-21 Richard Stallman <rms@gnu.org>
-
- * whitespace.el (whitespace-cleanup): Doc fix.
-
-2006-08-20 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el (rcirc-show-maximum-output): New var.
- (rcirc-buffer-process): If no buffer argument is supplied, use
- current-buffer.
- (rcirc-complete-nick): Complete to the last completed nick first.
- (rcirc-mode): Preserve the value of `rcirc-urls' across
- connections. Setup scroll function.
- (rcirc-scroll-to-bottom): New function.
- (rcirc-print): Use nick syntax around regexp work.
- Notice dim-nicks speaking only if they say our nick.
- (rcirc-update-activity-string): Do not show the modeline indicator
- if there are no live rcirc processes.
- (rcirc-cmd-ignore): Ignore case.
- (rcirc-browse-url-at-point): Fix off-by-one error.
-
-2006-08-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/python.el: Remove * in defcustom docstrings.
- (run-python, python-proc, python-try-complete): Use derived-mode-p.
- (python-mode): Set tab-width and indent-tabs-mode.
-
-2006-08-20 Dave Love <fx@gnu.org>
-
- * progmodes/python.el: Update to Dave Love's latest version.
- (python-font-lock-keywords, python-mode): Don't use
- font-lock-syntax-table, but match symbol elements explicitly instead.
- (python-mode-map): Add help, and a few more key bindings.
- (python-skip-comments/blanks): Move out of comments as well.
- (python-continuation-line-p): Behave better with unbalanced parens.
- (python-blank-line-p): New fun.
- (python-open-block-statement-p): Don't use a heuristic.
- (python-outdent-p): Better handle blocks-in-the-same-line.
- (python-calculate-indentation): Misc improvements.
- (python-comment-indent): Remove.
- (python-block-pairs): New var.
- (python-first-word): New fun.
- (python-indentation-levels): Handle more common cases.
- (python-indent-line-1): Add `leave' argument.
- (python-indent-region): New fun.
- (python-skip-out): New fun.
- (python-beginning-of-statement, python-end-of-statement): Use it.
- (python-next-statement): Return correct count even at eob.
- (python-end-of-block): Fix paren-typo.
- (python-imenu-create-index): Add module variables.
- (run-python): Add `new' arg.
- Check we're at a prompt before returning.
- (python-send-command): Move to end of buffer.
- Wait for prompt to return.
- (python-set-proc): New fun.
- (python-imports): New var.
- (python-describe-symbol): Use it. Adjust to new interface of `ehelp'.
- (python-eldoc-function): Try to move out of arg list.
- (python-outline-level): Offset by 1.
- (python-find-imports): New fun.
- (python-symbol-completions): Use python-imports.
- (python-module-path, ffap-alist): Add support for ffap.
- (python-skeletons, python-mode-abbrev-table, def-python-skeleton)
- (python-insert-*, python-default-template, python-expand-template):
- Add templates/skeletons.
- (python-setup-brm): Support for Bicycle Repair Man.
- (python-abbrev-syntax-table): New var.
- (python-abbrev-pc-hook, python-pea-hook): New funs.
-
-2006-08-20 Chong Yidong <cyd@stupidchicken.com>
-
- * frame.el (blink-cursor-start): Set timer first.
- (blink-cursor-end): Ignore timer cancelling errors.
- Suggested by Ken Manheimer.
-
-2006-08-20 Juanma Barranquero <lekktu@gmail.com>
-
- * newcomment.el (comment-box): Call `comment-normalize-vars'.
- Add autoload cookie.
+2007-09-17 David Kastrup <dak@gnu.org>
-2006-08-20 Richard Stallman <rms@gnu.org>
+ * textmodes/tex-mode.el (tex-verbatim-environments):
+ Eliminate CL dependency.
- * simple.el (line-number-at-pos): Doc fix.
+2007-09-17 Richard Stallman <rms@gnu.org>
- * emacs-lisp/timer.el (run-with-idle-timer): Pass t to
- timer-activate-when-idle, so timer can run before Emacs becomes
- non-idle again.
+ * newcomment.el (comment-add): New arg EXTRA.
+ (comment-region-default): Pass EXTRA if not indenting lines.
-2006-08-18 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
+2007-09-17 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * whitespace.el (whitespace-cleanup-internal): New optional arg
- REGION-ONLY. If it's non-nil, modify the message to the user
- accordingly.
- (whitespace-cleanup-region): Call whitespace-cleanup-internal with
- a non-nil argument.
+ * net/browse-url.el (browse-url-url-encode-chars): New function.
+ URL-encode some chars in a string.
+ (browse-url-encode-url): Rewrite using the previous function.
+ (browse-url-file-url): Use `browse-url-url-encode-chars'.
+ (browse-url-elinks-sentinel): Fix typo.
+ (browse-url-new-window-flag): Doc change.
-2006-08-18 Gustav H,Ae(Bllberg <gustav@gmail.com> (tiny change)
+2007-09-17 Glenn Morris <rgm@gnu.org>
- * rect.el (spaces-string): Simplify and add doc string.
+ * textmodes/tex-mode.el (tex-compilation-parse-errors): Prefer the
+ filename from `--file-line-error', if it is available.
-2006-08-17 Romain Francoise <romain@orebokech.com>
+2007-09-17 Joe Wells <jbw@macs.hw.ac.uk> (tiny change)
- * progmodes/gdb-ui.el (gdb-edit-locals-value): Balance parens.
+ * textmodes/tex-mode.el (tex-compilation-parse-errors): Also match
+ TeX `--file-line-error' format.
-2006-08-17 Richard Stallman <rms@gnu.org>
+2007-09-17 Dan Nicolaescu <dann@ics.uci.edu>
- * compare-w.el (compare-windows): lambda's take an arg and pass
- it to compare-windows-skip-whitespace.
+ * xt-mouse.el: Delete add-hook calls that were moved to
+ xterm-mouse-mode.
+ (xterm-mouse-mode): Disable resume-tty-functions, explain why it
+ does not work.
-2006-08-17 Martin Rudalics <rudalics@gmx.at>
+2007-09-17 Richard Stallman <rms@gnu.org>
- * jit-lock.el (jit-lock-fontify-now): Protect the modified status of
- the right buffer.
+ * cus-face.el (custom-theme-set-faces): Undo previous change.
-2006-08-17 Stefan Monnier <monnier@iro.umontreal.ca>
+ * faces.el (face-spec-set): When FRAME nil, look up each frame in SPEC.
- * pcvs-parse.el (cvs-parse-table): Accept the new `...' format for
- removed files.
+2007-09-17 Glenn Morris <rgm@gnu.org>
-2006-08-17 Nick Roberts <nickrob@snap.net.nz>
+ * textmodes/tex-mode.el (tex-region): Simplify previous change,
+ handling the case where the region is not in `tex-main-file'.
+ (tex-region-1): Delete.
+ (tex-region-header): New function, doing the header part of the
+ old tex-region-1.
- * progmodes/gdb-ui.el (gdb-locals-watch-map)
- (gdb-locals-watch-map-1): Suppress keymap first.
- (gdb-edit-locals-map-1): New variable.
- (gdb-edit-locals-value): New function.
- (gdb-stack-list-locals-handler): Use them.
+2007-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-08-16 Stefan Monnier <monnier@iro.umontreal.ca>
+ * simple.el (newline): Simplify use of prefix-numeric-value.
+ (line-move-partial): Remove unused var `ppos'.
+ (line-move-1): Replace 9999 with most-positive-fixnum.
+ (move-end-of-line): Use more efficient single-property search.
+ (move-beginning-of-line): Remove unused var `start'.
+ (blink-matching-open): Restructure in a more functional style.
- * mouse.el (global-map): Allow yanking with mouse-2 at a spot whose
- cursor would normally be drawn in the fringe.
+2007-09-16 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * font-lock.el (font-lock-extend-region-wholelines): Fix up typo.
- Reported by Martin Rudalics <rudalics@gmx.at>.
+ * calendar/holidays.el (list-holidays): Remove the cyclic alias.
-2006-08-16 Richard Stallman <rms@gnu.org>
+2007-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * term/x-win.el (x-clipboard-yank): Specify * in interactive spec.
- (special-event-map): Process drag-n-drop events this way.
+ * server.el (server-clients): Only keep procs, no properties any more.
+ (server-client): Remove.
+ (server-client-get, server-client-set): Remove, replace all callers by
+ process-get and process-put resp.
+ (server-clients-with, server-add-client, server-delete-client)
+ (server-create-tty-frame, server-create-window-system-frame)
+ (server-process-filter, server-execute, server-visit-files)
+ (server-buffer-done, server-kill-buffer-query-function)
+ (server-kill-emacs-query-function, server-switch-buffer)
+ (server-save-buffers-kill-terminal): Update accordingly.
+
+ * server.el (server-with-environment): Simplify.
+ (server-select-display, server-unselect-display): Re-add functions that
+ seem to have been lost in the multi-tty merge.
+ (server-eval-and-print, server-create-tty-frame)
+ (server-create-window-system-frame, server-goto-toplevel)
+ (server-execute, server-return-error): New functions extracted from
+ server-process-filter.
+ (server-execute-continuation): New functions.
+ (server-process-filter): Restructure so that all arguments are analysed
+ first and then acted upon in a subsequent stage. This way
+ server-goto-toplevel can be executed later, when we know if
+ it's necessary.
+ Remove the "-version" and "-version-good" support.
- * simple.el (move-beginning-of-line): Test whether fields
- would prevent motion back to line's first visible character.
- If so, stop where the fields would stop the motion.
+2007-09-16 Drew Adams <drew.adams@oracle.com>
- * newcomment.el (comment-indent): Fully update INDENT
- before checking to see if it will change the text.
+ * cus-edit.el (custom-face-edit-activate): Doc fix.
- * cus-edit.el (custom-newline): New function.
- (custom-mode-map): Bind newline to custom-newline.
+2007-09-16 Glenn Morris <rgm@gnu.org>
- * compare-w.el (compare-windows): Factor compare-ignore-whitespace
- into ignore-whitespace.
- Check each buffer for its skip-function.
- Handle compare-windows-skip-whitespace special-case test
- by returning t from default skip function.
-
-2006-08-15 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-clock-special-range)
- (org-clock-update-time-maybe): New functions.
- (org-stamp-time-of-day-regexp): Allow weekday to be of word chars,
- not only a-z.
- (org-agenda-get-blocks): Allow multiple blocks per headline.
- (org-timestamp-change): Call `org-clock-update-time-maybe'.
- (org-export-html-title-format)
- (org-export-html-toplevel-hlevel): New options.
- (org-export-language-setup): Add support for Czech.
- (org-mode, org-insert-todo-heading, org-find-visible)
- (org-find-invisible, org-invisible-p, org-invisible-p2)
- (org-back-to-heading, org-on-heading-p, org-up-heading-all)
- (org-show-subtree, org-show-entry, org-make-options-regexp):
- Remove compatibility support for old outline-mode.
- (org-check-occur-regexp): Funtion removed.
- (org-on-heading-p, org-back-to-heading): Made defalias.
- (org-set-local): New defsubst.
- (org-set-regexps-and-options, org-mode)
- (org-set-font-lock-defaults, org-edit-agenda-file-list)
- (org-timeline, org-agenda-list, org-todo-list, org-tags-view)
- (org-remember-apply-template, org-table-edit-field)
- (org-table-edit-formulas, orgtbl-mode, org-export-as-ascii)
- (org-set-autofill-regexps): Use `org-set-local'.
- (org-table-eval-formula): Fix bug with parsing of display flags.
-
-2006-08-15 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-info-stack-custom): Indicate selected
- frame with fringe arrow. Suggested by Simon Marshall
- <simon.marshall@misys.com>.
- (gdb-stack-position): New variable.
- (gdb-starting, gdb-exited): Reset gdb-stack-position to nil.
- (gdb-frames-mode): Set gdb-stack-position to nil.
- Add to overlay-arrow-variable-list
- (gdb-reset): Delete gdb-stack-position from above list.
-
-2006-08-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * term/x-win.el (menu-bar-edit-menu): Disable paste if buffer is
- read only.
-
-2006-08-13 Romain Francoise <romain@orebokech.com>
-
- * cus-theme.el (customize-create-theme)
- (custom-theme-visit-theme): End `y-or-n-p' prompt with a space.
-
- * filesets.el (filesets-add-buffer): Ditto.
-
- * pcvs.el (cvs-change-cvsroot): Ditto.
-
-2006-08-13 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-frame-separate-io-buffer)
- (gdb-use-separate-io-buffer, menu): Avoid using `inferior' in text.
- (gdb-memory-mode, gdb-locals-watch-map): Don't quote lambda
- expressions.
- (gdb-info-breakpoints-custom): Use gdb-breakpoint-regexp.
- Only search till end of line.
- Add face to function names in case of no filename.
- Add face to variable names of watchpoints.
-
-2006-08-12 Robert Thorpe <rthorpe@realworldtech.com> (tiny change)
-
- * cus-start.el <indent-tabs-mode>: Move to the `indent'
- customization group.
-
-2006-08-12 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-prior-bindings, allout-added-bindings):
- Remove, after long deprecation.
- (allout-beginning-of-line-cycles, allout-end-of-line-cycles):
- Add customization vars controlling allout-beginning-of-line and
- allout-end-of-line conveniences.
- (allout-header-prefix, allout-use-mode-specific-leader)
- (allout-use-mode-specific-leader, allout-mode-leaders):
- Revise docstrings.
- (allout-infer-header-lead): Change to be an alias for
- allout-infer-header-lead-and-primary-bullet.
- (allout-infer-header-lead-and-primary-bullet): New version of
- allout-infer-header-lead which assigns the primary bullet to the
- same as the header lead, when its being changed.
- (allout-infer-body-reindent): Apply regexp-quote instead of
- unconditionally prepending "\\", so that all literal
- allout-header-prefix and allout-primary-bullet strings are
- properly handled.
- (allout-add-resumptions): Add optional qualifier for extending or
- appending to existing values, rather than replacing them.
- (allout-view-change-hook): Clarify docstring.
- (allout-exposure-change-hook): Take explicit arguments, via
- run-hook-with-args.
- (allout-structure-added-hook)
- (allout-structure-deleted-hook)
- (allout-structure-shifted-hook): New hooks analogous to
- allout-exposure-change-hook for other kinds of structural outline
- edits.
- (allout-encryption-plaintext-sanitization-regexps): New encryption
- customization variable, by which cooperating modes can provde
- massage of the plaintext without actually being passed it.
- (allout-encryption-ciphertext-rejection-regexps)
- (allout-encryption-ciphertext-rejection-ceiling): New encryption
- customization variables, by which cooperating modes can prohibit
- rare but possible ciphertext patterns from fouling their
- operation, with actually being passed the ciphertext.
- (allout-mode): Run activation and deactivation hooks after the
- minor-mode variable has been toggled, to clarify the mode
- disposition. The new encryption ciphertext rejection variable is
- used to ensure that the ciphertext does not contain text that
- would be recognized as outline structural elements by allout.
- Substite allout-beginning-of-line and allout-end-of-line for
- conventionall beginning-of-line and end-of-line bindings.
- If allout-old-style-prefixes is non-nil, don't nullify it on mode
- activation!
- (allout-beginning-of-line): Respect `allout-beginning-of-line-cycles'.
- (allout-end-of-line): Respect `allout-end-of-line-cycles'.
- (allout-chart-subtree): Implement new mode, charting only the
- visible items in the subtree, when new 'visible' parameter is non-nil.
- (allout-end-of-subtree): Properly handle the last item in the buffer.
- (allout-pre-command-business, allout-command-counter):
- Increment an advertised counter so that cooperating enhancements can
- track revisions of items.
- (allout-open-topic): Run allout-structure-added-hook with suitable
- arguments.
- (allout-shift-in): Run allout-structure-shifted-hook with suitable
- arguments.
- (allout-shift-out): Fix doubling for negative args and ensure call
- of allout-structure-shifted-hook by solely using allout-shift-in.
- (allout-kill-line, allout-kill-topic):
- Run allout-structure-deleted-hook with suitable arguments.
- (allout-yank-processing): Run allout-structure-added-hook with
- proper arguments.
- (allout-yank): Enclose activity in allout-unprotected.
- (allout-flag-region): Run allout-exposure-change-hook with
- suitable arguments, instead of making the callee infer the arguments.
- (allout-encrypt-string):
- Support allout-encryption-plaintext-sanitization-regexps,
- allout-encryption-ciphertext-rejection-regexps, and
- allout-encryption-ciphertext-rejection-ceiling. Indicate correct
- en/de cryption mode in symmetric encryption failure message.
- (allout-obtain-passphrase): Use copy-sequence to get a distinct
- copy of the passphrase, and don't zero it or we'll corrupt the
- stashed copy.
- (allout-create-encryption-passphrase-verifier)
- (allout-verify-passphrase): Respect the new signature for
- allout-encrypt-string.
- (allout-get-configvar-values): Convenience for getting a
- configuration variable value and handling its absence gracefully.
-
-2006-08-11 Romain Francoise <romain@orebokech.com>
-
- * obsolete/zone-mode.el: Delete.
-
-2006-08-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/dns-mode.el (dns-mode): Use before-save-hook.
-
-2006-08-11 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/bindat.el (bindat-ip-to-string):
- Use `format-network-address' if possible.
-
-2006-08-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * x-dnd.el (x-dnd-init-frame): Call x-register-dnd-atom.
-
-2006-08-10 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
- restore unread-command-events here.
- (edebug-display): Do it here, to detect sit-for interruptions.
-
-2006-08-10 Romain Francoise <romain@orebokech.com>
-
- * textmodes/dns-mode.el: Alias `zone-mode' to `dns-mode'.
- (dns-mode-soa-auto-increment-serial): New user option.
- (dns-mode-soa-maybe-increment-serial): New function.
- (dns-mode): Add the latter to `write-contents-functions'.
-
- * obsolete/zone-mode.el: Move to obsolete/ from net/.
- Delete autoload cookies.
-
-2006-08-10 John Wiegley <johnw@newartisans.com>
-
- * eshell/em-glob.el (eshell-glob-chars-list)
- (eshell-glob-translate-alist): Add support for [^g] in character globs.
-
-2006-08-10 Richard Stallman <rms@gnu.org>
+ * calendar/cal-menu.el, calendar/calendar.el, calendar/diary-lib.el:
+ Following cal-bahai renaming, update all instances of
+ list-bahai-diary-entries to diary-bahai-list-entries,
+ mark-bahai-diary-entries to diary-bahai-mark-entries,
+ calendar-goto-bahai-date to calendar-bahai-goto-date,
+ insert-bahai-diary-entry to diary-bahai-insert-entry,
+ insert-monthly-bahai-diary-entry to diary-bahai-insert-monthly-entry,
+ insert-yearly-bahai-diary-entry to diary-bahai-insert-yearly-entry, and
+ calendar-print-bahai-date to calendar-bahai-print-date.
- * facemenu.el (facemenu-add-face): Pass frame to facemenu-active-faces.
- (facemenu-set-face): Doc fix.
- (facemenu-listed-faces): Doc fix.
+ * textmodes/tex-mode.el (tex-region): Handle the case where the
+ region is not in `tex-main-file'. Move the old code that applies
+ to both cases...
+ (tex-region-1): ...to this new function.
-2006-08-09 Chong Yidong <cyd@stupidchicken.com>
+2007-09-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * avoid.el (mouse-avoidance-animating-pointer): New var.
- (mouse-avoidance-nudge-mouse): Use it.
- (mouse-avoidance-banish): Rename from mouse-avoidance-banish-hook.
- (mouse-avoidance-exile): Rename from mouse-avoidance-exile-hook
- (mouse-avoidance-fancy): Rename from mouse-avoidance-fancy-hook.
- Don't activate if currently animating. All callers changed.
+ * vc.el (vc-process-sentinel): New function.
+ (vc-exec-after): Use it instead of using ugly hackish analysis and
+ construction of Elisp code.
+ (vc-sentinel-movepoint): New dynamically scoped var.
+ (vc-print-log, vc-annotate): Set it to move the user's point.
-2006-08-09 John Wiegley <johnw@newartisans.com>
+ * vc-cvs.el (vc-cvs-annotate-time): Use inhibit-read-only and
+ inhibit-modification-hooks.
- * calendar/timeclock.el (timeclock-use-elapsed): Added a new
- variable, which causes timeclock to report elapsed time worked,
- instead of just work remaining.
+ * calendar/cal-bahai.el (mark-bahai-diary-entries): Fix up typo.
+ (calendar-bahai-print-date, calendar-bahai-goto-date)
+ (diary-bahai-list-entries, diary-bahai-insert-entry):
+ New names to clean up the namespace a bit more.
+ (calendar-goto-bahai-date, calendar-print-bahai-date): Compat aliases.
-2006-08-09 Kenichi Handa <handa@m17n.org>
+2007-09-15 Glenn Morris <rgm@gnu.org>
- * international/latexenc.el (latexenc-find-file-coding-system):
- Fix for the case that the 2nd element of arg-list is a cons.
+ * calendar/holidays.el (holiday-list): Rename it back to
+ `list-holidays', but leave `holiday-list' as an alias.
-2006-08-08 Chong Yidong <cyd@stupidchicken.com>
+ * textmodes/bibtex-style.el (bibtex-style-indent-basic): Specify a
+ custom group.
- * info.el (Info-fontify-node): Handle preceding `in' for note
- reference hiding rules.
+ * textmodes/css-mode.el (css): New custom group.
+ (css-electrick-keys, css-selector, css-property)
+ (css-indent-offset): Specify custom group.
-2006-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-15 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/sh-script.el (sh-quoted-subshell): Make sure we don't
- mistake a closing " for an opening one.
+ * pcvs.el (cvs-tags-list, cvs-retrieve-revision, cvs-find-modif)
+ (cvs-execute-single-file): Use process-file.
+ (cvs-run-process): Use start-file-process.
-2006-08-07 Dan Nicolaescu <dann@ics.uci.edu>
+2007-09-15 Dan Nicolaescu <dann@ics.uci.edu>
- * term/xterm.el (terminal-init-xterm): Add more key bindings.
+ * xt-mouse.el (xterm-mouse-mode): Add hooks here not at the top
+ level. Remove the hooks when turning off the mode.
-2006-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
+ * term/xterm.el: Require xt-mouse at compile time.
+ (terminal-init-xterm): Turn on xterm mouse tracking for this
+ terminal if xterm-mouse-mode is enabled.
- * complete.el (PC-do-completion): Filter out completions matching
- completion-ignored-extensions before checking whether there are
- multiple completions.
- Don't use `list' unnecessarily when building completion tables.
+2007-09-14 Dan Nicolaescu <dann@ics.uci.edu>
-2006-08-06 Richard Stallman <rms@gnu.org>
+ * term/xterm.el (xterm-function-map): Replace bindings that were
+ deleted by the merge.
- * help.el (describe-mode): Make minor mode list more concise.
+2007-09-14 Ulf Jasper <ulf.jasper@web.de>
-2006-08-05 Chong Yidong <cyd@stupidchicken.com>
+ * play/bubbles.el (bubbles-version): Bump value to "0.5".
+ (bubbles-mode-map): Move define-key statements here.
+ (bubbles-game-theme-menu): Ditto.
+ (bubbles-graphics-theme-menu): Ditto.
+ (bubbles-menu): Ditto.
+ (bubbles-mode): Initialize buffer-undo-list, redisplay.
+ (bubbles--initialize): Reset buffer-undo-list, redisplay.
+ (bubbles-plop): Set buffer-undo-list, redisplay.
+ (bubbles-undo): Reset buffer-undo-list, redisplay.
+ (bubbles--show-images): Take care of missing text properties.
- * bindings.el: Give mode-line-format, mode-line-modes, and
- mode-line-position `standard-value' properties.
+2007-09-14 Glenn Morris <rgm@gnu.org>
-2006-08-05 Eli Zaretskii <eliz@gnu.org>
+ * startup.el (fancy-startup-text, fancy-about-text): Fix face
+ quoting.
- * buff-menu.el (list-buffers-noselect): For Info buffers, use
- "(file)node" instead of the file name.
+ * calendar/cal-hebrew.el, calendar/cal-menu.el
+ * calendar/calendar.el, calendar/diary-lib.el
+ * calendar/holidays.el: Rename all instances of
+ list-calendar-holidays callers to calendar-list-holidays,
+ list-holidays to holiday-list, check-calendar-holidays to
+ calendar-check-holidays, mark-calendar-holidays to
+ calendar-mark-holidays, and filter-visible-calendar-holidays to
+ holiday-filter-visible-calendar.
-2006-08-05 Richard Stallman <rms@gnu.org>
+2007-09-14 Dan Nicolaescu <dann@ics.uci.edu>
- * faces.el (escape-glyph): Doc fix.
+ * term/xterm.el (xterm-function-map): Add C-M- bindings.
-2006-08-04 Kenichi Handa <handa@m17n.org>
+2007-09-13 Sascha Wilde <wilde@sha-bang.de> (tiny change)
- * international/mule-diag.el (describe-font): Improve docstring
- and error message. Use frame-parameter (not frame-parameters).
+ * play/bubbles.el (bubbles--initialize-images): Fix bug:
+ Use transparent background for empty cells in graphics mode.
-2006-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-13 Jari Aalto <jari.aalto@cante.net>
- * progmodes/gud.el (gdb-script-font-lock-syntactic-keywords):
- Correctly mark the end-of-docstring char.
+ * man.el (Man-default-man-entry): At end of line, continue looking
+ to the next line for possible end of hyphenated command.
-2006-08-03 Chong Yidong <cyd@stupidchicken.com>
+2007-09-13 Chris Moore <dooglus@gmail.com>
- * simple.el (line-move-to-column): Constrain move-to-column to
- current field.
+ * shell.el (shell-resync-dirs): Don't move the cursor relative to
+ the command being edited.
-2006-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-12 Jim Meyering <jim@meyering.net> (tiny change)
- * font-lock.el (font-lock-beg, font-lock-end)
- (font-lock-extend-region-functions): New vars.
- (font-lock-extend-region-multiline)
- (font-lock-extend-region-wholelines): New functions.
- (font-lock-default-fontify-region): Use them.
- (font-lock-extend-jit-lock-region-after-change): Only round up
- if font-lock-default-fontify-region will do it as well.
+ * emacs-lisp/copyright.el (copyright-names-regexp): Doc fix: typo.
- * font-lock.el (font-lock-extend-after-change-region-function):
- Rename from font-lock-extend-region-function.
- (font-lock-extend-region): Remove by inlining at call sites.
- (font-lock-after-change-function): Don't needlessly round up to a whole
- number of lines.
- (font-lock-extend-jit-lock-region-after-change): Be more careful about
- the boundary conditions and the interactions between the various ways
- to extend the region.
+2007-09-12 Dan Nicolaescu <dann@ics.uci.edu>
-2006-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
+ * term/xterm.el (xterm-function-map): Add bindings for M-S- and
+ C-M-S- keys.
- * jit-lock.el (jit-lock-fontify-now): Preserve the buffer's
- modification status when forcing the second redisplay.
+ * term/rxvt.el (rxvt-function-map): Initialize in the declaration.
-2006-08-03 Kim F. Storm <storm@cua.dk>
+2007-09-12 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * edmacro.el (edmacro-fix-menu-commands): Ignore switch-frame.
+ * net/browse-url.el (browse-url-encode-url): Fix an infinite loop.
+ New argument `filename-p' to use one set of confusing chars or another.
+ (browse-url-file-url): Use the argument.
+ Suggested by Johannes Weiner.
-2006-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-12 Romain Francoise <romain@orebokech.com>
- * pcvs-util.el (cvs-get-buffer-create): Obey `noreuse' even if `name'
- doesn't look like a file name.
+ * cus-start.el (all): Revert 2007-09-08 change.
- * complete.el (PC-expand-many-files): Avoid signalling an error when
- the current directory doesn't exist. Reported by Micha,Ak(Bl Cadilhac.
+2007-09-12 Aaron Hawley <aaronh@garden.org>
-2006-08-02 Andreas Schwab <schwab@suse.de>
+ * jka-cmpr-hook.el (jka-compr-compression-info-list): Use gzip to
+ extract .Z files, since it is more common than uncompress.
- * bindings.el (mode-line-format): Simplify reference to vc-mode.
+2007-09-12 Glenn Morris <rgm@gnu.org>
-2006-08-02 Nick Roberts <nickrob@snap.net.nz>
+ * textmodes/org-publish.el (org-publish-org-to-html): Remove
+ duplicate function definition.
- * bindings.el (map): Make mode-line-buffer-identification-keymap
- before defining propertized-buffer-identification.
+2007-09-10 Chris Moore <dooglus@gmail.com>
-2006-08-01 Richard Stallman <rms@gnu.org>
+ * diff-mode.el (diff-sanity-check-hunk):
+ Also accept single-line hunks.
- * bindings.el (mode-line-format): Adjust spacing around vc-mode.
+2007-09-10 Chong Yidong <cyd@stupidchicken.com>
-2006-08-02 Nick Roberts <nickrob@snap.net.nz>
+ * startup.el (startup-screen-inhibit-startup-screen)
+ (pure-space-overflow-message): New vars.
+ (fancy-splash-insert): Allow functions for face and link specs.
+ (fancy-splash-head): Remove unused arg. Move splash text...
+ (fancy-startup-text, fancy-about-text): ...here.
+ (fancy-startup-tail): Rename from fancy-splash-tail.
+ (fancy-startup-screen, fancy-about-screen): Split off from
+ fancy-splash-screens.
+ (display-startup-screen): New function.
+ (display-about-screen): Rename from display-splash-screen.
+ (command-line-1): Use concise startup screen if necessary.
- * progmodes/gdb-ui.el (gdb-find-source-frame): Make nil the
- default value.
- (gdb-find-source-frame): New function.
- (menu): Add to menu bar.
+2007-09-10 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-08-01 Stefan Monnier <monnier@iro.umontreal.ca>
+ * net/browse-url.el (browse-url-encode-url): Use copy-sequence.
+ Reported by Jan Dj,Ad(Brv <jan.h.d@swipnet.se>.
- * font-core.el (font-lock-extend-region-function)
- (font-lock-extend-region): Move to font-lock.el.
+2007-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * font-lock.el (font-lock-extend-region-function)
- (font-lock-extend-region): Move from font-core.el. Simplify.
+ * progmodes/python.el: Merge changes from Dave Love's v2007-Sep-10.
+ (python-font-lock-keywords): Update to the 2.5 version of the language.
+ (python-quote-syntax): Let-bind font-lock-syntactic-keywords to nil.
+ (python-backspace): Only behave funny in code.
+ (python-compilation-regexp-alist): Add PDB stack trace regexp.
+ (inferior-python-mode): Add PDB prompt regexp.
+ (python-fill-paragraph): Refine the fenced-string regexp.
+ (python-find-imports): Handle imports spanning several lines.
+ (python-mode): Add `class' to hideshow support.
- * jit-lock.el (jit-lock-fontify-now): Cause a second redisplay
- if needed.
- (jit-lock-start, jit-lock-end): New dynamic scoped vars.
- (jit-lock-after-change-extend-region-functions): New hook.
- (jit-lock-after-change): Use it instead of hard-coding font-lock code.
+2007-09-10 Dave Love <fx@gnu.org>
- * font-lock.el (font-lock-extend-jit-lock-region-after-change): New fun.
- (font-lock-turn-on-thing-lock): Use it.
+ * outline.el (outline-4, outline-5, outline-7):
+ Move font-lock-builtin-face down from 4 to 7 to better keep the
+ progression of color brightness, and to better match Org-mode's faces.
- * longlines.el (longlines-show-region): Make it work on read-only
- buffers as well.
+2007-09-10 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-08-01 Nick Roberts <nickrob@snap.net.nz>
+ * progmodes/meta-mode.el (meta-font-lock-keywords)
+ (font-lock-match-meta-declaration-item-and-skip-to-next)
+ (meta-comment-indent, meta-indent-previous-line)
+ (meta-indent-unfinished-line, meta-beginning-of-defun)
+ (meta-end-of-defun, meta-common-initialization): Handle \f.
+ (meta-indent-unfinished-line): Do not handle a `%' in a string as
+ a comment-start.
- * progmodes/gdb-ui.el (gdb-set-hollow): Check for gud-last-last-frame.
+ * files.el (file-modes-char-to-who, file-modes-char-to-right)
+ (file-modes-rights-to-number): Auxiliary functions for symbolic to
+ numeric notation of file modes.
+ (file-modes-symbolic-to-number): New. Convert symbolic modes to its
+ numeric value.
+ (read-file-modes): New. Read either an octal value of a file mode or a
+ symbolic value, and return its numeric value.
-2006-07-31 Richard Stallman <rms@gnu.org>
+ * dired-aux.el (dired-do-chmod): Change to use the built-in
+ `set-file-modes' and the previous symbolic mode parsing functions.
- * progmodes/vhdl-mode.el (vhdl-speedbar-display-directory)
- (vhdl-speedbar-display-projects): Update old obsolete
- speedbar variable names.
+2007-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-07-31 Nick Roberts <nickrob@snap.net.nz>
+ * textmodes/texinfo.el: Remove spurious * in docstrings.
+ (texinfo-mode-syntax-table, texinfo-mode-map):
+ Initialize in the declaration.
- * progmodes/gdb-ui.el (gdb-find-source-frame): New option.
- (gdb-stopped): Use it.
+ * tmm.el: Remove spurious * in docstrings.
+ (tmm-prompt): Use with-current-buffer.
- * t-mouse.el (t-mouse-mode): Use set-process-query-on-exit-flag.
+ * vcursor.el: Remove spurious * in docstrings.
+ (vcursor-map): Initialize in the declaration.
+ (vcursor-use-vcursor-map): Use define-minor-mode.
+ (vcursor-toggle-vcursor-map): Keep as an obsolete alias.
-2006-07-29 Chong Yidong <cyd@stupidchicken.com>
+ * wid-browse.el (widget-browse-mode-map, widget-minor-mode-map):
+ Initialize in the declaration.
+ (widget-minor-mode): Use define-minor-mode.
- * loadhist.el (unload-feature): Handle new `(t . SYMBOL)' format
- for load-history elements.
+ * woman.el (woman-mode-map, woman-syntax-table):
+ Initialize in the declaration.
-2006-07-29 Eli Zaretskii <eliz@gnu.org>
+2007-09-09 Tassilo Horn <tassilo@member.fsf.org>
- * files.el (convert-standard-filename): For Cygwin, replace
- characters not allowed in Windows file names.
- (make-auto-save-file-name): Add Cygwin to the list of systems
- where the auto-save file name needs to be run through
- convert-standard-filename.
+ * doc-view.el: New file.
-2006-07-29 Lennart Borgman <lennart.borgman.073@student.lu.se>
+2007-09-09 Juri Linkov <juri@jurta.org>
- * window.el (bw-get-tree): Don't integerp subtree if it's nil.
+ * Makefile.in (update-authors): Add etc/ to AUTHORS.
-2006-07-28 Richard Stallman <rms@gnu.org>
+ * makefile.w32-in (update-authors): Add etc/ to AUTHORS.
- * bindings.el (mode-line-frame-identification)
- (propertized-buffer-identification): Centralize the code
- to initialize the variable.
+ * startup.el (initial-buffer-choice): Rename choice "Splash screen"
+ to "Startup screen". Fix docstring.
+ (inhibit-startup-screen): Rename from `inhibit-splash-screen'.
+ (inhibit-splash-screen): Make alias to `inhibit-startup-screen'.
+ (inhibit-startup-message): Change alias to `inhibit-startup-screen'.
+ (initial-scratch-message): Fix docstring.
+ (fancy-startup-text): Move link to Emacs Manual below Emacs Guided
+ Tour (which is a kind of tutorial and will be next to Emacs Tutorial).
+ Add link to "Customize Startup" and set interval between links to
+ 5 spaces.
+ (fancy-about-text): Add links "Authors" and "Contributing".
+ (fancy-splash-head): Add text "Welcome to " on the startup screen,
+ and "This is " on the about screen. Add link to
+ "http://www.gnu.org/software/emacs/" for "GNU Emacs".
+ For the about screen move emacs version to the header from
+ `fancy-splash-tail' (as it's done already for normal about screen).
+ (fancy-splash-tail): Insert emacs version only for startup screen.
+ (normal-splash-screen): Remove duplicate empty lines.
+ (normal-about-screen): Add links "Authors" and "Contributing".
- * progmodes/grep.el (grep-default-command): Catch errors from
- wildcard-to-regexp.
+ * menu-bar.el (menu-bar-help-menu):
+ Move "About Emacs" and "About GNU" to the end of the Help menu.
+ Move "Emacs Psychotherapist" after "Send Bug Report...".
+ Move "External Packages" after "Find Emacs Packages".
-2006-07-29 Kim F. Storm <storm@cua.dk>
+2007-09-09 Michael Albinus <michael.albinus@gmx.de>
- * progmodes/grep.el (grep-tag-default): New function.
- (grep-default-command, grep-read-regexp): Use it.
- (grep-read-files): Use car of grep-files-history or grep-files-aliases
- as default if nothing else applies.
+ * net/tramp.el (top): Remove declarations of `tramp-gw-*' symbols,
+ they are useless with the byte compiler.
+ (tramp-make-temp-file, tramp-make-tramp-temp-file): Move up.
+ (tramp-do-copy-or-rename-file-directly): Rearrange let-bindings.
+ (tramp-compute-multi-hops): Mask `tramp-gw-*' symbols.
+ (tramp-file-name-real-host, tramp-file-name-port)
+ (tramp-find-method, tramp-find-user, tramp-find-host): Make them
+ defuns.
-2006-07-28 Bill Atkins <atkinw@rpi.edu> (tiny change)
+ * net/tramp-cache.el (top): Improve error message when
+ `tramp-persistency-file-name' is corrupted.
+
+2007-09-09 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-re): Also replace the :alpha: class.
+ (org-todo-tag-alist): Variable removed.
+ (org-todo-key-alist, org-todo-key-trigger): New variables.
+ (org-use-fast-todo-selection): New option.
+ (org-log-done): Docstring fixed.
+ (org-deadline-warning-days): New default value 14.
+ (org-edit-timestamp-down-means-later): New option.
+ (org-tag-alist): Docstring fixed.
+ (org-fast-tag-selection-include-todo): New option.
+ (org-export-language-setup): New languages added.
+ (org-set-regexps-and-options): Compute the new variables.
+ (org-paste-subtree): Cleaning up.
+ (org-remember-apply-template): New escape %A.
+ (org-todo): Call fast TODO selection.
+ (org-fast-todo-selection): New function.
+ (org-add-log-note): Allow prefix for abort exit.
+ (org-at-property-p, org-entry-properties)
+ (org-columns-get-autowidth-alist): Use :alpha: class.
+ (org-get-wdays): New function.
+ (org-agenda-remove-date): New variable.
+ (org-agenda-get-deadlines): Use `org-get-wdays'.
+ (org-agenda-get-deadlines): Reverse ee before returning.
+ (org-format-agenda-item): New argument REMOVE-RE.
+ (org-agenda-convert-date): Baha'i calendar added.
+ (org-infile-export-plist): Also find DATE line.
+ (org-get-min-level): New function.
+ (org-export-as-html, org-export-as-ascii): Use the date format.
+ (org-shiftup, org-shiftdown): Use.
+ `org-edit-timestamp-down-means-later'.
+ (org-assign-fast-keys): New function.
+
+2007-09-08 Fredrik Axelsson <f.axelsson@gmail.com>
+
+ * cus-start.el (all): Add prefer-window-split-horizontally from
+ window.c.
+
+2007-09-08 Eli Zaretskii <eliz@gnu.org>
+
+ * net/browse-url.el (browse-url-galeon): Fix last change.
+ (top-level): Require cl when compiling.
+
+2007-09-08 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org-export-latex.el: arch-tag restored.
+
+ * textmodes/org-publish.el: arch-tag restored.
+
+2007-09-08 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/which-func.el (which-func-modes): Add diff-mode.
+
+ * progmodes/cc-langs.el: Support new keywords added to
+ objective-c frontend of gcc.
+ (c-simple-stmt-kwds): Add @throw.
+ (c-block-stmt-2-kwds): Add @synchronized.
+ (c-block-stmt-1-kwds): Add @finally and @try.
+
+2007-09-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-edit-timestamp-down-means-later): New option.
+ (org-agenda-after-show-hook): New variable.
+ (org-columns-compile-format)
+ (org-columns-get-autowidth-alist, org-buffer-property-keys)
+ (org-entry-properties, org-at-property-p): Allow [:alnum:] in
+ property names.
+ (org-get-wdays): New function.
- * wdired.el (wdired-change-to-wdired-mode, wdired-change-to-dired-mode):
- Throw error if buffer is not in Dired and Wdired mode, respectively.
+2007-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-07-28 Chong Yidong <cyd@stupidchicken.com>
+ * simple.el (normal-erase-is-backspace-setup-frame): Massage.
- * cus-edit.el (custom-no-edit): Revert 2006-07-27 change, so that
- self-insert-command keys don't activate buttons.
- (custom-mode-map): Just don't bind "\C-m" to `custom-no-edit'.
+ * term/xterm.el (xterm-function-map): Initialize in the declaration.
-2006-07-29 Nick Roberts <nickrob@snap.net.nz>
+ * vc-arch.el (vc-arch-checkin): Fix typo.
- * progmodes/gdb-ui.el (gdb-info-breakpoints-custom): Use different
- faces for enable character.
+2007-09-07 Johan Bockg,Ae(Brd <bojohan@gnu.org>
-2006-07-28 Nick Roberts <nickrob@snap.net.nz>
+ * cus-face.el (custom-theme-set-faces): Set face attributes
+ locally for each frame.
- * Makefile.in (recompile): Update comment to reflect change
- on 2004-04-21.
+2007-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-07-27 Richard Stallman <rms@gnu.org>
+ * progmodes/fortran.el (fortran-mode): Set font-lock-syntactic-keywords
+ via font-lock-defaults.
- * cus-edit.el (customize-package-emacs-version-alist): Doc fix.
- (customize-package-emacs-version): Change msg when pkg has no entry.
- (custom-no-edit): On a button, do like widget-button-press.
+ * emacs-lisp/bytecomp.el (byte-compile-log-file): Check major-mode via
+ derived-mode-p.
-2006-07-27 Dan Nicolaescu <dann@ics.uci.edu>
+2007-09-07 Thien-Thi Nguyen <ttn@gnuvola.org>
- * term/xterm.el (terminal-init-xterm): Fix bindings for C-tab,
- S-tab and C-S-tab.
+ * progmodes/autoconf.el (autoconf-definition-regexp):
+ Handle optional square brackets around definition name.
-2006-07-28 Nick Roberts <nickrob@snap.net.nz>
+2007-09-07 Johannes Weiner <hannes@saeurebad.de>
- * progmodes/which-func.el (which-function): Fix documentation/
- comment typo.
+ * net/browse-url.el (browse-url-browser-function): Add elinks.
+ (browse-url-elinks-wrapper): New option.
+ (browse-url-encode-url, browse-url-elinks)
+ (browse-url-elinks-sentinel): New functions.
+ (browse-url-file-url, browse-url-netscape, browse-url-mozilla)
+ (browse-url-firefox, browse-url-galeon, browse-url-epiphany):
+ Use new function browse-url-encode-url.
-2006-07-26 Richard Stallman <rms@gnu.org>
+2007-09-07 Glenn Morris <rgm@gnu.org>
- * textmodes/ispell.el (ispell-word): If we replace the word,
- move point to the end. Insert before deleting.
+ * version.el (emacs-version): Revert 2007-08-29 change: no need to
+ say if multi-tty is present.
-2006-07-26 Chong Yidong <cyd@stupidchicken.com>
+2007-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
- * subr.el (sit-for): Use new SECONDS arg of read-event instead of
- a timer.
+ * cus-start.el (split-window-preferred-function): Add custom info.
-2006-07-26 Mathias Dahl <mathias.dahl@gmail.com>
+ * calendar/holidays.el (holiday-list, calendar-check-holidays)
+ (calendar-mark-holidays, calendar-list-holidays)
+ (holiday-filter-visible-calendar): New names to clean up namespace.
+ (filter-visible-calendar-holidays, list-calendar-holidays)
+ (mark-calendar-holidays, check-calendar-holidays, list-holidays):
+ Add compatibility aliases.
+ (calendar-check-holidays, calendar-mark-holidays)
+ (calendar-holiday-list, holiday-filter-visible-calendar): Use dolist.
+ (holiday-sexp): Replace append with list.
+ (holiday-filter-visible-calendar): Replace append with push.
- * tumme.el (tumme-backward-image): Add prefix argument. Add error
- when at first image.
- (tumme-forward-image): Add prefix argument. Add error when at last
- image.
+ * woman.el: Remove spurious * in docstrings.
+ (woman-mini-help, woman-non-underline-faces, woman0-rename)
+ (woman-topic-all-completions-merge, woman-file-name-all-completions)
+ (woman-select-symbol-fonts, woman-expand-directory-path): Use dolist.
+ (woman-write-directory-cache, woman-display-extended-fonts)
+ (WoMan-log-begin, WoMan-log-1): Use with-current-buffer.
+ (woman-really-find-file): Use pop-to-buffer if switch-to-buffer fails.
+ (woman-mode): Use inhibit-read-only.
+ (woman-negative-vertical-space): Use dotimes.
+ (woman2-tagged-paragraph, woman-tab-to-tab-stop): Use insert-char.
-2006-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-09-06 Romain Francoise <romain@orebokech.com>
- * tabify.el (tabify-regexp): Use more specific regexps.
- (tabify): Avoid modifying the buffer unnecessarily.
+ * vc-bzr.el (vc-bzr-admin-lastrev): New defconst.
+ (vc-bzr-workfile-version): Use it.
-2006-07-25 Mathias Dahl <mathias.dahl@gmail.com>
+2007-09-06 Sean O'Rourke <sorourke@cs.ucsd.edu>
- * tumme.el (tumme-track-original-file): Add `buffer-live-p' check.
- (tumme-format-properties-string): Handle empty `buf'.
- (tumme-get-comment): Change variable names inside `let'.
- Add missing `let' variable that cause font-lock problems.
- (tumme-write-comments): Change variable names inside `let'.
- Add missing `let' variable that cause font-lock problems.
- (tumme-forward-image): Rename from `tumme-forward-char'.
- (tumme-backward-image): Rename from `tumme-backward-char'.
+ * complete.el (PC-do-completion): Don't try to treat
+ empty string as an abbreviation.
-2006-07-25 Masatake YAMATO <jet@gyve.org>
+2007-09-06 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
- * progmodes/ld-script.el (ld-script-keywords)
- (ld-script-font-lock-keywords, ld-script-builtins): Update keywords
- and add comments.
+ * help-fns.el (describe-variable): Keep doc's text properties.
-2006-07-25 Nick Roberts <nickrob@snap.net.nz>
+2007-09-06 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers)
- (gdb-resync, gdb-prompt, gdb-starting, gdb-exited, gdb-stopped)
- (gdb-set-gud-minor-mode-existing-buffers-1): Use different faces
- for status indicator.
+ * vc.el (vc-default-diff-tree): Pass a list to the diff vc command
+ instead of a file.
-2006-07-24 Richard Stallman <rms@gnu.org>
+2007-09-06 Glenn Morris <rgm@gnu.org>
- * xml.el (xml-parse-file): Clean up, and use with-temp-buffer.
+ * emacs-lisp/checkdoc.el (checkdoc-minor-mode-string): New.
+ (checkdoc-minor-mode): Allow user to specify lighter via
+ checkdoc-minor-mode-string.
- * subr.el (dolist, dotimes): Use interned symbols for locals.
- (--dotimes-limit--, --dolist-tail--): New defvars.
- (looking-back): Doc fix.
+2007-09-05 Richard Stallman <rms@gnu.org>
- * replace.el (replace-match-string-symbols): Handle dotted lists.
+ * startup.el (fancy-startup-text): Rename from fancy-splash-text.
+ Several items removed, simplified, or put on one line.
+ (fancy-about-text): Add substantial contents, part of startup text.
+ (fancy-splash-head): Make "GNU" or "GNU/Linux" a link.
+ (normal-splash-screen): Call normal-mouse-startup-screen,
+ normal-no-mouse-startup-screen, or normal-about-screen.
+ (normal-mouse-startup-screen): New fn, broken out, shortened.
+ (normal-no-mouse-startup-screen): New fn, broken out.
+ (normal-about-screen): New function, contents all new.
-2006-07-24 Mathias Dahl <mathias.dahl@gmail.com>
+2007-09-05 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * tumme.el (tumme-write-tags): Add.
- (tumme-write-comments): Add.
- (tumme-tag-files): Change to use `tumme-write-tags'.
- (tumme-tag-thumbnail): Change to use `tumme-write-tags'.
- (tumme-dired-comment-files): Change to use `tumme-write-comments'.
- (tumme-save-information-from-widgets): Change to use
- `tumme-write-comments' and `tumme-write-tags'.
- (tumme-comment-thumbnail): Change to use `tumme-write-comments'.
- (tumme-write-tag): Remove.
- (tumme-write-comment): Remove.
- (tumme-display-previous-thumbnail-original): Remove empty line.
- (tumme-widget-list): Add punctuation.
+ * emacs-lisp/rx.el (rx): Fix typo in docstring.
-2006-07-24 Mathias Dahl <mathias.dahl@gmail.com>
+2007-09-05 Glenn Morris <rgm@gnu.org>
- * tumme.el (tumme-line-up): Add an extra check for end of buffer.
+ * cus-edit.el (custom-buffer-create-internal): Check tool-bar-mode
+ is bound.
-2006-07-24 Daiki Ueno <ueno@unixuser.org>
+2007-09-05 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
- * pgg-def.el (pgg-truncate-key-identifier): Truncate the key ID to 8
- letters from the end. Thanks to "David Smith" <davidsmith@acm.org>
- and andreas@altroot.de (Andreas V,Av(Bgele).
+ * emacs-lisp/advice.el (ad-make-advised-docstring): Highlight note
+ in doc string.
-2006-07-23 Thien-Thi Nguyen <ttn@gnu.org>
+2007-09-04 Dan Nicolaescu <dann@ics.uci.edu>
- * mouse.el (mouse-on-link-p): Doc fix.
+ * server.el (server-start, server-unload-hook): Undo previous change.
-2006-07-23 Nick Roberts <nickrob@snap.net.nz>
+ * xt-mouse.el: Undo previous change.
- * emacs-lisp/find-func.el (find-function-search-for-symbol):
- Handle "C-h f `".
+2007-09-04 Juri Linkov <juri@jurta.org>
-2006-07-22 Dan Nicolaescu <dann@ics.uci.edu>
+ * startup.el (fancy-about-text): New variable.
+ (fancy-splash-delay, fancy-splash-max-time): Remove user options.
+ (fancy-current-text, fancy-splash-stop-time)
+ (fancy-splash-outer-buffer): Remove variables.
+ (fancy-splash-head, fancy-splash-tail): Add new optional argument
+ `startup' and use it to conditionally display different texts for
+ Startup and About screens. Don't display Help commands on the About
+ screen.
+ (fancy-splash-screens-1): Remove function and move its content to
+ `fancy-splash-screens' to the part that dislpays the About screen.
+ (exit-splash-screen): Don't treat specially exiting from
+ alternating screens.
+ (fancy-splash-screens): Rename argument `static' to `startup'.
+ Fix docstring. Remove code for displaying alternating screens.
+ Use arg `startup' in calls to `fancy-splash-head', `fancy-splash-tail'.
+ Remove let-bind for `fancy-splash-outer-buffer' and add let-bind
+ for `inhibit-read-only'.
+ (normal-splash-screen): Rename argument `static' to `startup'.
+ Fix docstring. Use argument `startup' to conditionally display
+ different texts for Startup and About screens. Don't display Help
+ commands on the About screen. Remove `unwind-protect' `sit-for'
+ delay and `kill-buffer' after it.
+ (display-startup-echo-area-message): Remove call to
+ `use-fancy-splash-screens-p' because image.el is preloaded and
+ doesn't display "Loading image... done".
+ (display-splash-screen): Rename argument `static' to `startup'.
+ Fix docstring.
- * ibuffer.el (ibuffer-formats): Use left alignment for the mode
- column.
+2007-09-04 Dan Nicolaescu <dann@ics.uci.edu>
-2006-07-22 Matt Hodges <MPHodges@member.fsf.org>
+ * server.el (server-start, server-unload-hook):
+ suspend-tty-functions has been renamed to suspend-tty-hook.
- * textmodes/table.el: Add move-beginning-of-line and
- move-end-of-line to Point Motion Only Group.
+ * xt-mouse.el: Likewise. resume-tty-functions has been renamed to
+ resume-tty-hook.
-2006-07-22 Eric Hanchrow <offby1@blarg.net> (tiny change)
+2007-09-03 Emanuele Giaquinta <e.giaquinta@glauco.it> (tiny change)
- * progmodes/delphi.el (delphi-fill-comment): Use save-restriction.
+ * loadup.el: Fix merge problem, only load "button" once.
-2006-07-22 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+2007-09-03 Glenn Morris <rgm@gnu.org>
- * startup.el (user-mail-address): Initialize from the `EMAIL'
- environment variable first. Document this.
- (command-line): Ditto.
+ * vc-svn.el (vc-svn-print-log): If there is only one file, use
+ "Working file:" as the prefix, for the sake of
+ log-view-current-file.
-2006-07-22 Nick Roberts <nickrob@snap.net.nz>
+2007-09-02 Dan Nicolaescu <dann@ics.uci.edu>
- * help-mode.el (help-function-def, help-variable-def)
- (help-face-def): Print a message in the minibuffer.
+ * term/xterm.el (xterm-modify-other-keys-terminal-list): New variable.
+ (xterm-turn-on-modify-other-keys): Only turn on modify-other-keys
+ if the selected frames is in
+ xterm-modify-other-keys-terminal-list.
+ (xterm-turn-off-modify-other-keys): Add an optional frame
+ parameter. Only turn off modify-other-keys if FRAME is in
+ xterm-modify-other-keys-terminal-list.
+ (xterm-remove-modify-other-keys): New function.
+ (terminal-init-xterm): Use it. Deal with delete-frame hook.
+ Add the selected frame to xterm-modify-other-keys-terminal-list.
-2006-07-21 Dan Nicolaescu <dann@ics.uci.edu>
+2007-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * term/xterm.el (terminal-init-xterm): Fix key bindings
- syntax. Bind S-return, C-M-., C-TAB, S-TAB and C-S-TAB.
+ * term/x-win.el (x-gtk-stock-map): Map diropen to system-file-manager.
+ (icon-map-list): New variable.
+ (x-gtk-map-stock): Use icon-map-list.
-2006-07-21 Eli Zaretskii <eliz@gnu.org>
+2007-09-02 Romain Francoise <romain@orebokech.com>
- * dos-w32.el (find-buffer-file-type-coding-system): Support calls
- where `(nth 1 command)' is a cons cell. Doc fix.
+ * log-view.el (log-view-current-file): Balance parens.
- * textmodes/po.el (po-find-charset): Doc fix.
+2007-09-02 Glenn Morris <rgm@gnu.org>
-2006-07-21 Ken Manheimer <ken.manheimer@gmail.com>
+ * comint.el (comint-mode): Don't set scroll-conservatively.
- * allout.el (allout-unprotected, allout-e-o-prefix-p)
- (allout-beginning-of-current-line, allout-end-of-current-line)
- (allout-next-visible-heading, allout-open-topic)
- (allout-kill-topic, allout-yank-processing, allout-resolve-xref)
- (allout-flag-current-subtree, allout-show-to-offshoot)
- (allout-hide-current-entry, allout-show-current-branches)
- (allout-hide-region-body, allout-old-expose-topic)
- (allout-listify-exposed, allout-latex-verbatim-quote-curr-line)
- (allout-mark-topic, allout-adjust-file-variable): Enclose scopes
- containing `beginning-of-line' and `end-of-line' with
- `inhibit-field-text-motion' t.
+ * eshell/em-unix.el (eshell/time): Stringify and flatten the
+ non-command arguments.
-2006-07-21 Eli Zaretskii <eliz@gnu.org>
+ * log-view.el (log-view-current-file): Give a more explicit error
+ if log-view-file-re fails to find a match.
- * frame.el (focus-follows-mouse): Document that it doesn't have
- any effect on MS-Windows.
+2007-09-01 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-07-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emacs-lisp/bytecomp.el (byte-recompile-directory):
+ Fix bug: Don't expand top-level file name more than once.
+ Reported by Dmitry Antipov <dmantipov@yandex.ru>.
- * progmodes/sh-script.el (sh-quoted-subshell): Further fix last change.
+2007-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-07-20 Jay Belanger <belanger@truman.edu>
+ * server.el (server-process-filter): Don't display the splash screen.
+ It's annoying enough on the initial screen and becomes positively
+ obnoxious here.
- * calc/calc.el (calc-previous-alg-entry): Remove variable.
+2007-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
- * calc/calc-aent.el (calc-alg-entry-history, calc-quick-calc-history):
- New variables.
- (calc-alg-entry): Use `calc-alg-entry-history'.
- (calc-do-quick-calc): Use `calc-quick-calc-history'.
- Remove reference to `calc-previous-alg-entry'.
- (calcAlg-edit, calcAlg-enter): Remove reference to
- `calc-previous-alg-entry'.
- (calcAlg-previous): Use `previous-history-element' instead of
- `calc-previous-alg-entry'.
- (calc-do-alg-entry): Use history when calling `read-from-minibuffer'.
- Change keybinding for `calcAlg-plus-minus', add keybindings for
- `previous-history-element' and `next-history-element'.
+ * emacs-lisp/avl-tree.el: Use defstruct rather than macros.
+ Change naming to use "avl-tree--" for internal functions.
- * calc/calc-rewr.el (calc-match): Remove reference to
- `calc-previous-alg-entry'.
+2007-08-31 Dan Nicolaescu <dann@ics.uci.edu>
- * calc/calc-sel.el (calc-selection-history): New variable.
- (calc-enter-selection, calc-sel-mult-both-sides)
- (calc-sel-add-both-sides): Use `calc-selection-history'.
+ * term/x-win.el (x-menu-bar-open): Delete duplicated function from
+ the merge.
+ (global-set-key): Delete f10 mapping, now done in menu-bar.el.
+ (provide): Move to the end of file.
- * calc/calc-map.el (calc-get-operator-history): New variable.
- (calc-get-operator): Use `calc-get-operator-history'.
+ * vc-svn.el (vc-svn-diff-tree): Pass a list to vc-svn-diff.
- * calc/calcalg3.el (calc-curve-fit-history): New variable.
- (calc-curve-fit): Use `calc-curve-fit-history'.
+2007-08-31 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-07-20 Kenichi Handa <handa@m17n.org>
+ * textmodes/flyspell.el (flyspell-mark-duplications-exceptions):
+ New variable. List of exceptions for the duplicated word rule.
+ (flyspell-mark-duplications-flag): Mention it.
+ (flyspell-word): Treat it.
- * international/mule-cmds.el (select-safe-coding-system): Fix the
- way of deciding eol-type of the coding system.
+ * files.el (create-file-buffer): If the filename sans directory starts
+ with spaces, remove them.
-2006-07-20 Alan Mackenzie <acm@muc.de>
+2007-08-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * progmodes/cc-langs.el (c-emacs-variable-inits): New variable.
- (c-lang-setvar): New macro.
- (c-make-init-lang-vars-fun): Use the initialization forms in
- c-emacs-variable-inits in addition to those in c-lang-variable-inits.
- (comment-start, comment-end, comment-start-skip): Change these from
- c-lang-defvar's to c-lang-setvar's.
+ * term/x-win.el (x-gtk-stock-map): Add etc/images to keys.
+ (x-gtk-map-stock): Use two directory elements when matching
+ file name.
- * progmodes/cc-mode.el (c-make-emacs-variables-local): New macro,
- which calls make-local-variable on the elements of
- c-emacs-variable-inits.
- (c-init-language-vars-for): Call this new macro.
+2007-08-31 James Wright <james@chumsley.org>
-2006-07-19 Stefan Monnier <monnier@iro.umontreal.ca>
+ * eshell/em-unix.el (eshell/info): New function.
- * progmodes/compile.el (compilation-error-regexp-alist-alist) <gnu>:
- Try to rule out false positives due to time stamps.
- (compilation-mode-font-lock-keywords): Remove rules made redundant
- because of the above change. Add `segmentation fault' to the known and
- highlighted compilation termination messages.
+2007-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-07-19 Kim F. Storm <storm@cua.dk>
+ * frame.el (frame-initialize, make-frame):
+ * server.el (server-process-filter):
+ * faces.el (tty-set-up-initial-frame-faces): Don't set
+ term-environment-variable since it's not used any more.
+
+ * env.el (setenv): Don't treat $TERM specially.
+
+ * startup.el (normal-top-level): Set $TERM to `dumb' so that unless
+ stated otherwise, subprocesses do not send back escape sequences
+ corresponding to the terminal from which Emacs was started.
+
+2007-08-31 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ * calculator.el: Require cl for compilation.
+
+2007-08-30 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * outline.el (outline-font-lock-levels): Comment out unused var.
+ (outline-font-lock-face): Wrap around face list to handle any
+ nesting depth gracefully.
+
+2007-08-30 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/ange-ftp.el: Add ange-ftp property to `set-file-modes' and
+ `set-file-times'.
+
+2007-08-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-export-visible): Fix drawers before export.
+ (org-do-sort): Allow sorting by priority.
+ (org-agenda-files): Ignore non-existing files.
+ (org-agenda-skip-unavailable-files): New variable.
+ (org-ellipsis): All a face as value.
+ (org-mode): Interprete the face value of `org-ellipsis'.
+ (org-archive-save-context-info): New option.
+ (org-archive-subtree): Store context info in archived entry.
+ (org-fast-tag-selection-can-set-todo-state): New variable.
+ (org-fast-tag-selection): Allow setting TODO states through this
+ interface.
+ (org-cycle): Docstring updated.
+ (org-todo-keyword-faces): New option.
+ (org-get-todo-face): New function.
+ (org-set-font-lock-defaults, org-agenda-highlight-todo):
+ Use `org-get-todo-face'.
+ (org-switch-to-buffer-other-window): New function.
+ (org-table-edit-field, org-table-show-reference)
+ (org-table-edit-formulas, org-add-log-note)
+ (org-fast-tag-selection, org-agenda, org-prepare-agenda)
+ (org-timeline): Use `org-switch-to-buffer-other-window' instead of
+ `switch-to-buffer-other-window' to make sure that the temporary
+ windows show up on the current frame.
+ (org-mhe-get-message-real-folder, org-batch-store-agenda-views)
+ (org-get-entries-from-diary, org-replace-region-by-html):
+ Don't allow pop-up frames.
+ (org-agenda-get-deadlines, org-agenda-get-scheduled):
+ Fix problems with time-of-day.
+ (org-export-get-title-from-subtree): New function.
+ (org-agenda-get-scheduled, org-agenda-get-deadlines): Fix problems
+ with listing items that are DONE.
+ (org-change-tag-in-region): New command.
+ (org-agenda-skip-scheduled-if-done)
+ (org-agenda-skip-deadline-if-done): Docstring clarified.
+ (org-mode): Hide drawers on startup.
+ (org-get-todo-face): New function.
+ (org-todo-keyword-faces): New option.
+ (org-set-regexps-and-options): Use `org-remove-keyword-keys'.
+ (org-remove-keyword-keys): New function.
+
+2007-08-30 Jari Aalto <jari.aalto@cante.net> (tiny change)
* progmodes/grep.el (grep-find-ignored-directories):
- Add .svn and _darcs to list.
-
-2006-07-19 Mathias Dahl <mathias.dahl@gmail.com>
-
- * dired.el (dired-mode-map): Add key binding `C-te' for
- `tumme-dired-edit-comment-and-tags'.
-
- * tumme.el (tumme-display-thumbnail-original-image): Make sure
- image display buffer is displayed before call to
- `tumme-display-image.
- (tumme-dired-display-image): Make sure image display buffer is
- displayed before call to `tumme-display-image.
- (tumme-mouse-display-image): Make sure image display buffer is
- displayed before call to `tumme-display-image.
- (tumme-widget-list): Add.
- (tumme-dired-edit-comment-and-tags): Add.
- (tumme-save-information-from-widgets): Add.
-
-2006-07-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/sh-script.el (sh-quoted-subshell): Fix last change.
-
-2006-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/sh-script.el (sh-font-lock-keywords-1):
- Revert inadvertently installed patch hunk.
-
- * progmodes/compile.el (compilation-find-file): Handle the
- cases where the user selects a non-existent file.
-
-2006-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * bindings.el (minibuffer-local-map): Rebind TAB so it inserts a \t.
-
-2006-07-17 Chong Yidong <cyd@stupidchicken.com>
-
- * subr.el (sit-for): Just sleep-for if noninteractive.
-
-2006-07-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/autoload.el (make-autoload): Use new arg.
-
- * custom.el (custom-autoload): Add `noset' argument.
- (custom-push-theme): Don't autoload the variable, let callers do it.
- (custom-theme-set-variables): Autoload the variable if necessary.
-
- * cus-edit.el (custom-variable-state-set): If the variable was
- originally set outside custom, but to the same value as the default,
- consider it to be standard.
-
- * Makefile.in (mh-loaddefs.el): Finish setting up the default empty
- file *before* telling Emacs to add the autoloads, in case it fails.
-
- * progmodes/sh-script.el (sh-quoted-subshell): Don't match escaped `.
- Use `cond', push', and `dolist'.
-
-2006-07-17 Richard Stallman <rms@gnu.org>
-
- * image-mode.el (tar-superior-buffer, archive-superior-buffer):
- Add defvars to silence warnings.
-
-2006-07-17 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Don't highlight "Compiling file" messages as error.
-
- * dired-aux.el (dired-compress-file): Confirm again if gzipped
- file already exists.
-
-2006-07-16 Thien-Thi Nguyen <ttn@gnu.org>
-
- * find-file.el (ff-special-constructs): Doc fix. Also, for C/C++
- entry, don't assign to free var; simply return the extracted filename.
- (ff-treat-as-special): Incorporate common preamble from callers.
- (ff-other-file-name, ff-find-the-other-file):
- Update call to ff-treat-as-special.
-
- * progmodes/ada-mode.el (ada-mode): Rewrite ff-special-constructs init.
-
-2006-07-16 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el (tumme-get-comment): Fix bug.
-
-2006-07-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el: Remove spurious * in docstrings.
-
-2006-07-14 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-run-unit-tests-on-load): Rectify docstring
- grammar.
- (allout-beginning-of-current-line): Beware beginning of buffer.
- Also, a comment is simplified.
- (allout-hotspot-key-handler): Only set allout-post-goto-bullet
- when appropriate. (This fix enables use for other than
- bullet-hotspot operation.)
- (allout-hide-current-subtree): While escalating to sibling-close,
- make sure to situate on a topic.
-
-2006-07-14 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-delete-selection)
- (cua-toggle-set-mark): New defcustoms.
- (cua-rectangle-modifier-key): Add `alt' modifier.
- (cua-replace-region): Don't delete if cua-delete-selection is nil.
- (cua-set-mark): Don't clear mark if cua-toggle-set-mark is nil.
- Suggested by Klaus Zeitler <kzeitler@lucent.com>.
-
- * emulation/cua-rect.el (cua-help-for-rectangle): Add `alt' modifier.
-
-2006-07-14 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el: Require 'cl during byte-compilation/interactive load,
- for the `assert' macro.
- (allout-mode-deactivate-hook): New hook, run when allout mode
- deactivates.
- (allout-developer): New allout customization subgroup.
- (allout-run-unit-tests-on-load): New allout-developer
- customization variable, when true allout unit tests are run towards
- end of file load/eval.
- (allout-inhibit-auto-fill): Disable auto-fill activity even during
- auto-fill-mode.
- (allout-resumptions): Remove, to be replaced by...
- (allout-add-resumptions): Register variable settings to be
- reinstated by `allout-do-resumptions'. The settings are made
- buffer-local, but the locality/globality of the suspended setting
- is restored on resumption.
- (allout-do-resumptions): Reinstate all settings suspended using
- `allout-add-resumptions'.
- (allout-test-resumptions): Unit tests (and intermediate variables)
- for resumptions.
- (allout-tests-globally-unbound, allout-tests-globally-true)
- (allout-tests-locally-true): Intermediate variables for
- resumptions unit tests.
- (allout-overlay-preparations): Replaces `allout-set-overlay-category'.
- (allout-exposure-category): Replaces 'allout-overlay-category variable.
- (allout-mode): Use `allout-add-resumptions' and `allout-do-resumptions'
- instead of retired `allout-resumptions'. For hook functions, use
- `local' parameter so hook settings are created and removed as
- buffer-local settings. Revise (resumptions) setting
- auto-fill-function so it is set only if already active. (The
- related fill-function settings are all made in either case, so
- that activating auto-fill-mode activity will have the custom
- allout-mode behaviors (hanging indent on topics, if configured for it).
- Remove all allout-exposure-category overlays on mode deactivation.
- (allout-hotspot-key-handler): New function extracted from
- `allout-pre-command-business', so the functionality can be used
- for other purposes, eg as a binding in an overlay.
- (allout-pre-command-business): Use new `allout-hotspot-key-handler'.
- (allout-auto-fill): Respect new `allout-inhibit-auto-fill'
- customization variable.
- (allout-run-unit-tests): Run the (currently quite small)
- repertoire of unit tests. Called just before the provide iff user
- has customized `allout-run-unit-tests-on-load' non-nil.
-
-2006-07-14 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * emacs-lisp/authors.el (authors-aliases): Update.
-
-2006-07-14 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-display-buffer): Check for
- gdb-source-window. Add dedicated argument.
- (gdb-display-separate-io-buffer, gdb-append-to-inferior-io)
- (gdb-display-breakpoints-buffer, gdb-display-stack-buffer)
- (gdb-display-threads-buffer, gdb-display-memory-buffer)
- (gdb-display-locals-buffer): Use it.
-
- * progmodes/gud.el (gud-display-line): Use gdb-display-buffer.
- Set gdb-source-window.
-
-2006-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/autoload.el (make-autoload): Remove special handling of
- minor modes, redundant with the custom-autoload line above.
-
-2006-07-12 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-post-command-function): Handle open-line too.
-
-2006-07-12 Richard Stallman <rms@gnu.org>
-
- * progmodes/grep.el (grep-last-buffer): Doc fix.
-
- * info.el (Info-try-follow-nearest-node): Doc fix.
-
- * emacs-lisp/edebug.el (edebug-instrument-function):
- Err if find-function-noselect gives no position.
-
- * emacs-lisp/find-func.el (find-function-search-for-symbol):
- If can't find definition, return nil for position.
- (find-function-do-it): Handle new return value
- of find-definition-noselect.
- (find-definition-noselect, find-variable-noselect): Doc fix.
- (find-function-noselect): Doc fix.
-
- * help-mode.el (help-variable-def): Handle find-variable-noselect
- returning no position.
- (help-function-def): Likewise for find-function-search-for-symbol.
- (help-face-def): Likewise.
-
- * help-fns.el (describe-variable): Handle find-variable-noselect
- returning no position.
-
- * files.el (locate-file-completion): Avoid duplicates in result.
-
- * cus-edit.el (custom-no-edit): New command.
- (custom-mode-map): Remap to custom-no-edit instead of
- using suppress-keymap.
-
-2006-07-12 Nick Roberts <nickrob@snap.net.nz>
-
- * tumme.el (tumme-create-thumb, tumme-thumbnail-display-external)
- (tumme-display-image, tumme-rotate-thumbnail, tumme-rotate-original)
- (tumme-set-exif-data, tumme-get-exif-data): Use shell-command-switch.
-
- * thumbs.el (thumbs-call-convert): Use shell-command-switch.
-
-2006-07-11 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-copy-current-file-name): Use buffer-name if
- buffer-file-name is nil.
-
-2006-07-11 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (undo-ask-before-discard): Set to nil.
+ Add monotone _MTN bookkeeping directory in workspaces.
+ Add RCS control directory. List items in alphabetical order.
- * vc.el (vc-exec-after): Don't delete process manually.
- (vc-print-log): Run log-view-mode in process sentinel inside
- inhibit-read-only. Don't shrink window due to timing issues.
+ * progmodes/grep.el (grep-files-aliases): Add cc alias.
+ Sort items in alphabetical order. Fix parens.
- * progmodes/ebrowse.el (ebrowse-display-member-buffer):
- Avoid using with-output-to-temp-buffer, which clobbers local vars.
+2007-08-29 Dan Nicolaescu <dann@ics.uci.edu>
-2006-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-hg.el (vc-hg-extra-menu-map): New variable.
+ (vc-hg-extra-menu, vc-hg-outgoing, vc-hg-incoming, vc-hg-push)
+ (vc-hg-pull): New functions.
+ (vc-hg-outgoing-mode, vc-hg-incoming-mode): New derived modes.
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Fix ambiguity introduced by last change.
- (compilation-find-file): Move save-excursion to where it may
- make sense. Fix a left over `find-file'.
-
-2006-07-11 Robert J. Chassell <bob@rattlesnake.com>
-
- * textmodes/texinfmt.el (texinfo-format-separate-node):
- Insert a string before point, which fits documentation, not after.
- (texinfo-multitable-item): In a multitable row, insert any
- additional needed @tabs and spaces.
-
-2006-07-11 Nick Roberts <nickrob@snap.net.nz>
-
- * tumme.el (tumme-create-thumb, tumme-thumbnail-display-external)
- (tumme-display-image, tumme-rotate-thumbnail, tumme-rotate-original)
- (tumme-set-exif-data, tumme-get-exif-data): Use call-process
- instead of shell-command.
- (tumme-create-thumbnail-buffer, tumme-create-display-image-buffer)
- (tumme-display-thumbs, tumme-modify-mark-on-thumb-original-file)
- (tumme-display-image, tumme-get-exif-data): Use with-current-buffer.
- (tumme-display-properties-format, tumme-dired-insert-marked-thumbs)
- (tumme-thumbnail-set-image-description, tumme-gallery-generate)
- (tumme-rotate-original, tumme-get-exif-file-name): Fit to 80 columns.
-
-2006-07-11 Kim F. Storm <storm@cua.dk>
-
- * subr.el (sit-for): Doc fix. Specify normal arg list using fn-form.
- Remove special case for seconds < 0. Use (redisplay t) instead.
-
-2006-07-10 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/cc-awk.el (c-awk-escaped-nls*): Use eval-and-compile to
- avoid compilation error.
-
- * subr.el (sit-for): New function.
-
- * play/hanoi.el (hanoi-sit-for): Check sit-for return value.
-
-2006-07-10 Richard Stallman <rms@gnu.org>
-
- * ldefs-boot.el (edebug): Update page.
-
-2006-07-10 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/authors.el (authors-ignored-files): Ignore changes
- to FOR-RELEASE and TODO.
-
-2006-07-10 Romain Francoise <romain@orebokech.com>
-
- * emacs-lisp/authors.el (authors-aliases): Update.
-
-2006-07-10 Alan Mackenzie <acm@muc.de>
-
- * progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el:
- * cc-mode.el: Changes to eradicate eval-after-load.
+ * term/mac-win.el: Don't require url, only autoloaded url
+ functions are used in this file.
-2006-07-09 Chong Yidong <cyd@stupidchicken.com>
+2007-08-29 Andreas Schwab <schwab@suse.de>
- * emacs-lisp/helper.el (Helper-help-scroller): Don't signal error
- on non-char events.
+ * shell.el (shell): Return correct value from interactive spec.
-2006-07-09 Romain Francoise <romain@orebokech.com>
+2007-08-29 Glenn Morris <rgm@gnu.org>
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Don't highlight start/end markers as compilation messages.
+ * version.el (emacs-version): Increase to 23.0.50.
- * isearch.el (isearch-yank-line): Let-bind `inhibit-field-text-motion'
- to t.
+2007-08-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2006-07-09 Stefan Monnier <monnier@iro.umontreal.ca>
+ * term/x-win.el (x-gtk-stock-map): :version changed to 23.1.
- * textmodes/fill.el (fill-region-as-paragraph): Refine last change.
+2007-08-29 Juri Linkov <juri@jurta.org>
-2006-07-08 Richard Stallman <rms@gnu.org>
+ * loadup.el: Add "button" loading after "faces" and move "startup"
+ to load after "button".
- * term/x-win.el (x-handle-display): Add doc string.
+2007-08-29 Dan Nicolaescu <dann@ics.uci.edu>
- * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix.
+ * loadup.el: Load term/mac-win on a Mac using Carbon.
- * subr.el (def-edebug-spec): Move here.
- * emacs-lisp/edebug.el (def-edebug-spec): Move to subr.el.
+ * term/mac-win.el: Provide mac-win.
+ (mac-initialized): New variable.
+ (mac-initialize-window-system): New function. Move global setup here.
+ (handle-args-function-alist, frame-creation-function-alist):
+ (window-system-initialization-alist): Add mac entries.
+ (x-setup-function-keys): New function containing all the
+ top level function key definitions.
- * imenu.el (imenu-choose-buffer-index): Doc fix.
+ * term/x-win.el (x-menu-bar-open): Use accelerate-menu.
-2006-07-08 Romain Francoise <romain@orebokech.com>
+ * env.el (read-envvar-name): Don't consider the environment frame param.
- * term/x-win.el (x-display-name): Fix typo.
-
-2006-07-08 Eli Zaretskii <eliz@gnu.org>
-
- * hexl.el (hexl-find-file): Doc fix.
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix.
-
-2006-07-07 Chong Yidong <cyd@stupidchicken.com>
-
- * term/x-win.el (x-display-name): Doc fix.
-
-2006-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
+ * env.el (setenv):
+ * frame.el (frame-initialize, make-frame):
+ * faces.el (tty-set-up-initial-frame-faces):
+ * server.el (server-process-filter): Set
+ display-environment-variable and term-environment-variable.
- * textmodes/fill.el (fill-delete-prefix): Don't ignore excessively
- long prefixes.
- (fill-region-as-paragraph): Don't round up to a whole line.
- (fill-comment-paragraph): Don't include the code-before-the-comment
- when calling fill-region-as-paragraph.
+ * server.el (server-process-filter): Set COLORFGBG and COLORTERM.
- * international/mule.el (make-char): Remove redundancy.
+2007-08-29 Jason Rumney <jasonr@gnu.org>
- * emacs-lisp/bytecomp.el (byte-compile-form): The `byte-compile'
- property may contain an anonymous function rather than a symbol.
+ * loadup.el: Only load term/x-win when X is compiled in.
+ Load term/w32-win and dependencies on windows-nt.
- * pcvs-defs.el (cvs-temp-buffer-name): Fix non-hiddenness.
+ * term/w32-win.el: Reorder to match x-win.el more closely.
+ Provide w32-win. Don't throw error when global window-system not w32.
+ (internal-face-interactive): Remove obsolete function.
+ (x-setup-function-keys): Use local-function-key-map.
+ (w32-initialized): New variable.
+ (w32-initialize-window-system): Set it.
+ Move more global setup here.
+ (x-setup-function-keys): New function.
+ (w32-initialize-window-system): Move non function key global setup here.
+ (x-cut-buffer-max): Remove.
+ (w32-initialize-window-system): New function.
+ (handle-args-function-alist, frame-creation-function-alist):
+ (window-system-initialization-alist): Add w32 entries.
- * progmodes/compile.el (compilation-error-regexp-alist-alist) <gnu>:
- Use shy regexp. Fix incorrect backref to potentially unmatched group.
+2007-08-29 David Kastrup <dak@gnu.org>
- * dirtrack.el (dirtrack-default-directory-function): Remove.
- (dirtrack-directory-function): Use file-name-as-directory.
- (dirtrack-windows-directory-function): Simplify.
- (dirtrack-forward-slash, dirtrack-backward-slash)
- (dirtrack-replace-slash): Remove.
- (dirtrack-toggle): Adjust comint-preoutput-filter-functions as well.
- (dirtrack): Fix wrong parenthesizing; use match-string.
+ * env.el (getenv): Pass frame to getenv-internal.
- * progmodes/octave-inf.el: Remove spurious * in docstrings.
- (inferior-octave-mode): Only change the buffer-local value of
- comint-dynamic-complete-functions.
- (inferior-octave-mode-map, inferior-octave-mode-syntax-table):
- Move the initialization to the declaration.
- (inferior-octave-complete): Remove unused var `filter'.
+2007-08-29 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
- * shell.el (shell-mode): Only change the buffer-local value of
- comint-dynamic-complete-functions.
+ * version.el (emacs-version): Show if multi-tty is present.
-2006-07-07 Carsten Dominik <dominik@science.uva.nl>
+ * loadup.el: Delay loading env; mule-conf gets confused by cl
+ during bootstrap. Also load termdev and term/x-win.
- * textmodes/org.el (org-agenda-get-todos): Skip subtree also if
- entry is skipped because it has been scheduled.
- (org-prepare-agenda-buffers): Don't mark buffers as modified when
- changing `:org-archived' and `:org-comment' properties.
+ * bindings.el (mode-line-client): New variable.
+ (help-echo): Add it to the default mode-line format.
-2006-07-06 Chong Yidong <cyd@stupidchicken.com>
+ * cus-start.el: Remove bogus window-system reference from GTK test.
- * server.el (server-select-display): Don't make the temp frame
- minibuffer-only, in case it's not a temp frame.
- (server-process-filter): Don't delete the temp frame if it's the
- only one we have on that display.
+ * progmodes/ebrowse.el (ebrowse-electric-list-mode-map)
+ (ebrowse-electric-position-mode-map):
+ * ebuff-menu.el (electric-buffer-menu-mode-map):
+ * echistory.el (electric-history-map): Bind C-z to `suspend-frame',
+ not `suspend-emacs'.
- * files.el (find-alternate-file): Doc fix.
+ * ediff-wind.el (ediff-setup-windows-automatic): New function.
+ (ediff-window-setup-function): Use it as default.
-2006-07-05 Richard Stallman <rms@gnu.org>
+ * files.el (save-buffers-kill-terminal): New function.
+ (ctl-x-map): Change binding of C-x C-c to save-buffers-kill-terminal.
- * files.el (abbreviate-file-name): Add save-match-data.
+ * font-lock.el (lisp-font-lock-keywords-2): Add `let-environment'
+ and `with-selected-frame'.
-2006-07-03 Richard Stallman <rms@gnu.org>
+ * help-fns.el (describe-variable): Describe frame-local variables
+ correctly.
- * faces.el (read-face-name): Doc fix.
+ * simple.el (normal-erase-is-backspace-mode): Rewrite for multiple
+ display support.
+ (normal-erase-is-backspace-setup-frame): New function.
+
+ * subr.el (with-selected-frame): New function.
+ (read-quoted-char): Use terminal-local binding of
+ local-function-key-map instead of function-key-map.
+
+ * talk.el (talk): New function.
+ (talk-handle-delete-frame): New function.
+ (talk-add-display): Open a new frame only if FRAME was not a frame.
+
+ * termdev.el: New file.
+
+ * menu-bar.el (menu-bar-open): New function. Bind it to f10.
+ * term/x-win.el: Don't bind f10.
+ * tmm.el: Remove autoload binding for f10.
+
+ * international/encoded-kb.el (encoded-kbd-setup-display): Use
+ `set-input-meta-mode'. Fix broken condition before set-input-mode.
+ Store the saved input method as a terminal parameter. Add keymap
+ parameter. Use it instead of changing key-translation-map directly.
+ (saved-key-translation-map, encoded-kbd-mode, saved-input-mode):
+ Remove.
+ (encoded-kbd-setup-display): New function.
+
+ * international/mule-cmds.el (set-locale-environment): Fix getenv
+ call. Use save-buffers-kill-terminal. Ignore window-system; always
+ set the keyboard coding system. Add DISPLAY parameter.
+ (set-display-table-and-terminal-coding-system): Add DISPLAY
+ parameter. Pass it to set-terminal-coding-system.
+
+ * international/mule.el (keyboard-coding-system): Test for
+ encoded-kbd-setup-display, not encoded-kbd-mode.
+ (set-terminal-coding-system, set-keyboard-coding-system): Add
+ DISPLAY parameter.
+ (set-keyboard-coding-system): Use encoded-kbd-setup-display.
+
+ * term/README: Update.
+
+ * term/linux.el (terminal-init-linux): Use `set-input-meta-mode'.
+
+ * term/x-win.el (x-setup-function-keys): New function. Move
+ function-key-map tweaks here. Protect against multiple calls on
+ the same terminal. Use terminal-local binding of
+ local-function-key-map instead of function-key-map.
+ (x-initialize-window-system): Make a copy of pure list. Pass a
+ frame getenv.
+
+ * term/vt200.el, term/vt201.el, term/vt220.el, term/vt240.el:
+ * term/vt300.el, term/vt320.el, term/vt400.el, term/vt420.el:
+ * term/AT386.el, term/internal.el, term/iris-ansi.el, term/lk201.el:
+ * term/mac-win.el, term/news.el, term/rxvt.el, term/sun.el:
+ * term/tvi970.el, term/wyse50.el: Use terminal-local binding of
+ local-function-key-map instead of function-key-map.
+
+ * term/rxvt.el, term/xterm.el: Speed up load time by protecting
+ `substitute-key-definition' and `define-key' calls against
+ multiple execution. Use terminal-local binding of
+ local-function-key-map instead of function-key-map. Pass a frame
+ to getenv.
+
+ * edmacro.el (edmacro-format-keys):
+ * emulation/cua-base.el (cua--pre-command-handler):
+ * isearch.el (isearch-other-meta-char):
+ * xt-mouse.el: Use terminal-local binding of
+ local-function-key-map instead of function-key-map.
+
+ * fringe.el (set-fringe-mode): Simplify and fix using
+ `modify-all-frames-parameters'.
+ * scroll-bar.el (set-scroll-bar-mode): Ditto.
+ * tool-bar.el (tool-bar-mode): Ditto. Remove 'tool-bar-map length
+ check before calling `tool-bar-setup'.
+ (tool-bar-setup): New variable.
+ (tool-bar-setup): Use it to guard against multiple calls. Add
+ optional frame parameter, and select that frame before adding items.
+ (toggle-tool-bar-mode-from-frame): New function.
+
+ * menu-bar.el (toggle-menu-bar-mode-from-frame): New function.
+ (menu-bar-showhide-menu): Use toggle-menu-bar-mode-from-frame and
+ toggle-tool-bar-mode-from-frame to change "Menu-bar" and
+ "Tool-bar" toggles to reflect the state of the current frame.
+ (menu-bar-mode): Simplify and fix using `modify-all-frames-parameters'.
+
+ * env.el: Require cl for byte compilation (for `block' and `return').
+ (environment, setenv-internal): New functions.
+ (let-environment): New macro.
+ (setenv, getenv): Add optional terminal parameter. Update docs.
+ (setenv): Use setenv-internal. Always set process-environment.
+ Handle `local-environment-variables'.
+ (read-envvar-name, setenv, getenv): Use frame parameters
+ to store the local environment, not terminal parameters. Include
+ `process-environment' as well.
+
+ * faces.el (tty-run-terminal-initialization): New function.
+ (tty-create-frame-with-faces): Use it. Set up faces and
+ background mode only after the terminal has been initialized.
+ Call terminal-init-*. Don't load the initialization file more
+ than once. Call set-locale-environment.
+ (frame-set-background-mode): Handle the 'background-mode terminal
+ parameter.
+ (tty-find-type): New function.
+ (x-create-frame-with-faces): Remove bogus check for
+ first frame. Call `tool-bar-setup'. Don't make frame visible
+ until we are done setting up all its parameters. Call
+ x-setup-function-keys.
+
+ * frame.el (make-frame): Always inherit 'environment and 'client
+ parameters. Set up the 'environment frame parameter, when needed.
+ Also inherit 'client parameter. Don't override explicitly
+ specified values with inherited ones. Add 'terminal frame
+ parameter. Append window-system-default-frame-alist to parameters
+ before calling frame-creation-function.
+ (frame-initialize): Copy the environment from the initial frame.
+ (window-system-default-frame-alist): Enhance doc string.
+ (frame-notice-user-settings): Don't put 'tool-bar-lines in
+ `default-frame-alist' when initial frame is on a tty.
+ (modify-all-frames-parameters): Simplify using `assq-delete-all'.
+ Remove specified parameters from `window-system-default-frame-alist'.
+ (make-frame-on-tty, framep-on-display, suspend-frame):
+ Extend doc string, update parameter names.
+ (frames-on-display-list): Use terminal-id to get the display id.
+ (frame-notice-user-settings): Extend to apply
+ settings in `window-system-default-frame-alist' as well.
+ (terminal-id, terminal-parameters, terminal-parameter)
+ (set-terminal-parameter, terminal-handle-delete-frame): New functions.
+ (delete-frame-functions): Add to `delete-frame-functions' hook.
+ (blink-cursor-mode): Adapt blink-cursor-mode default
+ value from startup.el.
+ (make-frame-on-display): Protect condition on x-initialized when
+ x-win.el is not loaded. Update doc.
+ (suspend-frame): Use display-controlling-tty-p to decide between
+ suspend-emacs and suspend-tty.
+ (frames-on-display-list): Update for display ids.
+ (framep-on-display): Ditto.
+ (suspend-frame): Use display-name, not frame-tty-name.
+ (selected-terminal): New function.
+
+ * server.el: Use `device' instead of `display' or `display-id' in
+ variable and client parameter names.
+ (server-select-display): Remove (unused).
+ (server-tty-live-p, server-handle-delete-tty): Remove.
+ (server-unquote-arg, server-quote-arg, server-buffer-clients):
+ Update docs.
+ (server-getenv-from, server-with-environment, server-send-string)
+ (server-save-buffers-kill-terminal): New functions.
+ (server-delete-client): Handle quits in kill-buffer. Don't kill
+ modified buffers. Add extra logging. Delete frames after
+ deleting the tty. Clear 'client parameter before deleting a frame.
+ Use delete-display, not delete-tty.
+ (server-visit-files): Don't set `server-existing-buffer' if the
+ buffer already has other clients. Return list of buffers
+ created. Update doc. Don't set client-record when nowait.
+ (server-handle-delete-frame): Delete the client if this was its
+ last frame. Check that the frame is alive. Remove bogus comment.
+ Add note on possible race condition. Delete tty clients, if needed.
+ (server-handle-suspend-tty): Use server-send-string. Kill the
+ client in case of errors from process-send-string. Use the display
+ parameter.
+ (server-unload-hook): Remove obsolete delete-tty hook.
+ (server-start): Ask before restarting if the old server still has
+ clients. Add feedback messages. Remove obsolete delete-tty hook.
+ (server-process-filter): Use server-send-string. Accept `-dir'
+ command. Switch to *scratch* immediately after creating the frame,
+ before evaluating any -evals. Protect `display-splash-screen'
+ call in a condition-case. Explain why. Call
+ `display-startup-echo-area-message' before
+ `display-splash-screen'. Don't display the splash screen when no
+ frame was created. Show the Emacs splash screen and startup echo
+ area message. Display the *scratch* buffer by default. Store the
+ local environment in a frame (not terminal) parameter. Do not try
+ to decode environment strings. Fix reference to the 'display
+ frame parameter. Change syntax of environment variables. Put
+ environment into terminal parameters, not client parameters. Use
+ a dummy client with --no-wait's X frames. In `-position LINE'
+ handler, don't ruin the request string until the line number is
+ extracted. Log opened files. Handle -current-frame command.
+ Don't create frames when it is given. Don't bind X frames to the
+ client when we are in -no-wait mode. Set locale environment
+ variables from client while creating tty frames. Disable call to
+ configure-display-for-locale. When processing -position command,
+ don't change the request string until the parameters are
+ extracted. Don't try to create an X frame when Emacs does not
+ support it. Improve logging. Temporarily set ncurses-related
+ environment variables to those of the client while creating a new
+ tty frame. Select buffers opened by nowait clients, don't leave
+ them buried under others. Set the display parameter, and use it
+ when appropriate.
-2006-07-05 Chong Yidong <cyd@stupidchicken.com>
+ * startup.el (display-startup-echo-area-message): Handle
+ `inhibit-startup-echo-area-message' here.
+ (command-line-1): Moved from here.
+ (fancy-splash-screens): Use `overriding-local-map' instead of
+ `overriding-terminal-local-map' for now; the latter doesn't work
+ right, it looses keypresses to another terminal. Use
+ `overriding-terminal-local-map' to set up keymap. Install a
+ `delete-frame-functions' hook to catch `delete-frame' events.
+ Ignore `select-window' events to cope better with
+ `focus-follows-mouse'. Don't switch back to the original buffer
+ if the splash frame has been killed. Restore previous buffer, even
+ if it's *scratch*.
+ (normal-splash-screen): Don't let-bind `mode-line-format'; it
+ changes the global binding - setq it instead. Use
+ `save-buffers-kill-terminal'.
+ (display-splash-screen): Don't do anything if the splash screen is
+ already displayed elsewhere.
+ (fancy-splash-exit, fancy-splash-delete-frame): New functions.
+ (command-line): Replace duplicated code with a call to
+ tty-run-terminal-initialization. Don't load the terminal
+ initialization file more than once. Remove call to nonexistent
+ function `set-locale-translation-file-name'.
+
+ * xt-mouse.el (xterm-mouse-x, xterm-mouse-y): Convert to terminal
+ parameters.
+ (xterm-mouse-position-function, xterm-mouse-event): Update.
+ (xterm-mouse-mode): Don't depend on current value of window-system.
+ (turn-on-xterm-mouse-tracking, turn-off-xterm-mouse-tracking):
+ Update for multi-tty.
+ (turn-on-xterm-mouse-tracking-on-terminal)
+ (turn-off-xterm-mouse-tracking-on-terminal)
+ (xterm-mouse-handle-delete-frame): New functions.
+ (delete-frame-functions, after-make-frame-functions)
+ (suspend-tty-functions, resume-tty-functions): Install extra hooks
+ for multi-tty.
+
+2007-08-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (invisible-p): Remove: implemented in C now.
+ (line-move-invisible-p): Remove obsolete alias.
+
+2007-08-28 Juri Linkov <juri@jurta.org>
+
+ * image-mode.el (image-type): New variable.
+ (image-mode): Set default major mode name to "Image[text]".
+ (image-minor-mode): Change LIGHTER to display image-type in the
+ mode line.
+ (image-minor-mode): Set default image-type to "text".
+ (image-toggle-display): After switching to text mode, set
+ image-type to "text" and major mode name to "Image[text]".
+ After switching to image mode, set image-type to actual image
+ type, and add image type to major mode name. Let-bind the same
+ variable names as arguments of `image-type' and `create-image'.
+ Bind `type' to the result of `image-type' and use it as arg
+ of `create-image' to not determine the image type twice.
+
+2007-08-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-set-file-times): Flush the file properties.
+ (tramp-set-file-uid-gid, tramp-get-local-uid)
+ (tramp-get-local-gid): New defuns.
+ (tramp-handle-copy-file): Handle new parameter PRESERVE-UID-GID.
+ (tramp-do-copy-or-rename-file): New parameter PRESERVE-UID-GID.
+ Improve fast track.
+ (tramp-do-copy-or-rename-file-directly): Sync parameter list with
+ the other tramp-do-copy-or-rename-file-* functions. Major rewrite.
+ (tramp-handle-file-local-copy, tramp-handle-insert-file-contents)
+ (tramp-handle-write-region): Improve fast track.
+ (tramp-handle-file-remote-p): IDENTIFICATION can also be `localname'.
+ (tramp-maybe-open-connection): Let `process-adaptive-read-buffering'
+ be nil.
+
+2007-08-28 Ivan Kanis <apple@kanis.eu>
+
+ * time.el: New feature to display several time zones in a buffer.
+ (display-time-world-mode, display-time-world-display)
+ (display-time-world, display-time-world-timer): New functions.
+ (display-time-world-list, display-time-world-time-format)
+ (display-time-world-buffer-name, display-time-world-timer-enable)
+ (display-time-world-timer-second, display-time-world-mode-map):
+ New variables.
- * net/goto-addr.el (goto-address): Mark as safe for local evals.
+2007-08-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2006-07-05 Andre Spiegel <spiegel@gnu.org>
+ * term/x-win.el (x-gtk-stock-map): New variable.
+ (x-gtk-map-stock): New function.
- * vc.el (vc-diff-internal): Fix prev change.
+ * info.el (info-tool-bar-map): Add :rtl keyword to right/left-arrow and
+ prev/next-node.
-2006-07-05 Thien-Thi Nguyen <ttn@gnu.org>
+2007-08-28 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se> (tiny change)
- * emacs-lisp/lisp-mode.el (emacs-lisp-mode-map): Use eval-buffer.
- * play/dunnet.el (dun-load-d, dun-eval): Likewise.
+ * play/gamegrid.el (gamegrid-init): Set line-spacing to 0.
-2006-07-04 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-08-28 Glenn Morris <rgm@gnu.org>
- * thingatpt.el (symbol-at-point): Don't use `form-at-point' which
- fails if the symbol contains chars like ( or '.
- (bounds-of-thing-at-point): Remove unused vars `end' and `beg'.
- (thing-at-point-bounds-of-url-at-point): Remove unused vars `url' and
- `short'.
+ * progmodes/cc-langs.el (c-constant-kwds): Add java: null, true, false.
-2006-07-04 Kenichi Handa <handa@m17n.org>
+2007-08-27 Thien-Thi Nguyen <ttn@gnuvola.org>
- * international/mule-cmds.el (set-language-info): If LANG-ENV is
- the current one, don't call set-language-environment, but call one
- of set-language-environment-XXX to make INFO effective now.
- (set-language-environment): Call set-language-environment-XXX
- functions instead of doing the various setups directly.
- (set-language-environment-coding-systems): Delete argument eol-type.
- (set-language-environment-input-method)
- (set-language-environment-nonascii-translation)
- (set-language-environment-charset)
- (set-language-environment-fontset)
- (set-language-environment-unibyte): New functions.
+ * progmodes/modula2.el (m2-definition, m2-module):
+ Don't use previous-line. Reported by T. V. Raman.
-2006-07-03 Luc Teirlinck <teirllm@auburn.edu>
+2007-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * locate.el (locate-update-when-revert): New option.
- (locate-update-path): New option (suggested by Michael Albinus).
- (locate-prompt-for-command): Whitespace change.
- (locate-update): No longer offer to update the locate database by
- default. Implement the two new options.
+ * term/mac-win.el (mac-handle-toolbar-switch-mode): Add explicit
+ argument to tool-bar-mode call.
-2006-07-04 Nick Roberts <nickrob@snap.net.nz>
+2007-08-27 Glenn Morris <rgm@gnu.org>
- * tooltip.el: Move comment about track-mouse...
+ * diff-mode.el (diff-find-file-name): Only accept regular files,
+ to rule out /dev/null, directories, etc.
- * progmodes/gud.el: ...to here.
+ * vc-svn.el (vc-svn-diff): If the repository version of all the
+ files is the same as the specified OLDVERS, do a local diff.
-2006-07-03 Chong Yidong <cyd@stupidchicken.com>
+2007-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * facemenu.el (facemenu-listed-faces): New var.
- (facemenu-unlisted-faces): Variable deleted.
- (facemenu-add-new-face): Use facemenu-listed-faces.
+ * uniquify.el (uniquify-rationalize-file-buffer-names): Check liveness
+ of buffers in uniquify-managed.
- * emulation/viper-init.el, calendar/calendar.el:
- * progmodes/make-mode.el: Delete calls to facemenu-unlisted-faces.
+ * simple.el (invisible-p): Rename from text-invisible-p.
+ Update callers.
-2006-07-03 Carsten Dominik <dominik@science.uva.nl>
+2007-08-23 Stefan Monnier <monnier@iro.umontreal.ca>
- * textmodes/org.el (org-mode): Remove no invalid settings for
- calc embedded mode.
- (org-mode-p): New defsubst.
- (org-save-all-org-buffers): New function.
- (org-first-headline-recenter): Enclose outline-regexp in group
- delimiters.
- (org-set-tags): Keep single space after stars.
+ * progmodes/cperl-mode.el (defcustom, x-color-defined-p, cperl-is-face)
+ (cperl-is-face, cperl-force-face, cperl-etags-snarf-tag, cperl-mode)
+ (cperl-etags-snarf-tag, cperl-etags-goto-tag-location, cperl-init-faces)
+ (cperl-etags-goto-tag-location): Use new style backquotes.
-2006-07-02 Stefan Monnier <monnier@iro.umontreal.ca>
+ * net/browse-url.el: Remove spurious * in custom docstrings.
+ (browse-url-filename-alist): Use new-style backquote.
- * window.el (set-window-text-height): Only set window-min-height to
- 1 if that's the requested size.
+ * emacs-lisp/backquote.el (backquote-unquote-symbol)
+ (backquote-splice-symbol): Clarify they're not new-style unquotes.
- * diff-mode.el (diff-find-file-name): Obey cvs-pcl-cvs-dirchange-re.
- (diff-unified->context, diff-context->unified)
- (diff-reverse-direction): Make sure the end marker stays at the end.
- (diff-mode): Add the keymap table at the end of docstring.
- Use lexical-let rather than constructing a closure manually.
+ * emacs-lisp/edebug.el (edebug-list-form, edebug-match-symbol, \,)
+ (\,@): Backslash the , and ,@ which are not new-style unquotes.
- * files.el (find-file-noselect-1): Remove unused var assignment.
- (hack-local-variables-confirm): Print lists of strings as lists of
- strings rather than lists of symbols.
- (abbreviate-file-name, hack-local-variables-prop-line):
- Use match-string.
- (hack-one-local-variable): Move `make-local-variable' nearer its use.
- (recover-session-finish): Use line-end-position.
+ * textmodes/texinfmt.el (\,): Clarify it's not a new-style unquote.
-2006-07-02 Michael Albinus <michael.albinus@gmx.de>
+ * net/socks.el (socks-username/password-auth-filter):
+ Remove unused vars `state' and `desired-len'.
+ (socks-parse-services, socks-nslookup-host): Use with-current-buffer.
+ (socks-wait-for-state-change): Use new-style backquotes.
- * net/tramp.el (tramp-handle-shell-command): Preserve current-buffer.
+ * pcvs.el (cvs-mode-status): Fix long-standing typo.
-2006-07-02 Daniel Pfeiffer <occitan@esperanto.org>
+ * emacs-lisp/bytecomp.el (byte-compile-from-buffer): Check old-style
+ backquotes after each `read' rather than once per buffer.
- * progmodes/make-mode.el (makefile-macroassign-regex):
- Accept preceding keyword.
- (makefile-gmake-statements): Reorganize, now that makepp has
- "override" and also handle forgotten "override define".
- (makefile-makepp-statements): Add new "global", "override export"
- and "override global".
+ * dframe.el: Remove spurious * in custom docstrings.
+ (dframe-xemacsp): Remove, use (featurep 'xemacs) instead.
+ (dframe-xemacs20p): Remove, inline at the sole use point.
+ (defface): Don't defvar the face, don't use old-style backquote.
+ (defcustom): Don't use old-style backquote.
+ (dframe-frame-parameter, dframe-mouse-event-p):
+ Make it obvious that it's always defined.
+ (dframe-popup-kludge): New function to replace
+ dframe-xemacs-popup-kludge and dframe-xemacs-popup-kludge.
+ (dframe-frame-mode, dframe-set-timer-internal)
+ (dframe-mouse-set-point): Remove use of with-no-warnings from
+ XEmacs-specific code.
+ (dframe-set-timer-internal): Fix very old bug with
+ post-command-idle-hook.
-2006-06-30 Juanma Barranquero <lekktu@gmail.com>
+ * emacs-lisp/byte-opt.el (byte-optimize-featurep): Handle `sxemacs'.
- * progmodes/ada-mode.el (ada-which-compiler, ada-mode-menu)
- (ada-compile-mouse-goto-error, ada-deactivate-properties)
- (ada-no-auto-case): Fix typos in docstrings.
+2007-08-27 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-06-30 Nick Roberts <nickrob@snap.net.nz>
+ * emacs-lisp/avl-tree.el: New file.
- * info.el (Info-find-node-2): Search for makeinfo version more
- carefully.
+2007-08-26 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-06-29 Carsten Dominik <dominik@science.uva.nl>
+ * hi-lock.el (hi-lock-unface-buffer): Show a x-menu only if the mouse
+ was used.
- * textmodes/org.el (org-prepare-agenda-buffers):
- Use `invisible-OK' argument for `org-end-of-subtree'.
- (org-export-cleanup-toc-line): Rename from `org-html-cleanup-toc-line'.
- (org-beginning-of-item): Fix bug in regular expression for white line.
- (org-export-as-html): Enforce space after bullet in plain list items.
- (org-set-autofill-regexps): Require space after plain list bullet
- for paragraph-start.
- (org-ts-regexp3): New constant.
- (org-at-timestamp-p): New optional argument ALSO-INACTIVE.
- (org-timestamp-up-day, org-timestamp-down-day)
- (org-timestamp-change): Work with inactive timestamps.
- (org-ts-regexp1): Don't allow brackets in time stamps.
+2007-08-26 Sean O'Rourke <seano@cs.ucsd.edu>
-2006-06-29 Nick Roberts <nickrob@snap.net.nz>
+ * complete.el (PC-do-completion): Make RET accept a non-unique but
+ complete expansion again.
- * help-mode.el (help-xref-symbol-regexp): Add property as a keyword
- for ignoring links.
+2007-08-26 Thien-Thi Nguyen <ttn@gnuvola.org>
- * faces.el (read-face-name): Use it.
+ * eshell/esh-opt.el (eshell-eval-using-options):
+ Add debug declaration.
-2006-06-28 Juri Linkov <juri@jurta.org>
+2007-08-26 Dan Nicolaescu <dann@ics.uci.edu>
- * buff-menu.el (list-buffers-noselect): Compare Info file
- with the string "dir" to detect Info directory.
+ * log-view.el (log-view-toggle-mark-entry): Add docstring.
+ (log-view-get-marked): Likewise.
- * complete.el (partial-completion-mode): In lambda for
- `choose-completion-string-functions' use full function signature
- with 4 args, and move point to the end of the minibuffer only if arg
- `mini-p' is non-nil.
+ * vc-hooks.el (vc-registered): Use mapc instead of mapcar.
+ (vc-delete-automatic-version-backups): Likewise.
-2006-06-28 John Paul Wallington <jpw@pobox.com>
+ * vc.el (vc-dired-buffers-for-dir): Likewise.
- * ibuffer.el (ibuffer-mode): Doc fix.
+2007-08-25 Dan Nicolaescu <dann@ics.uci.edu>
-2006-06-28 Carsten Dominik <dominik@science.uva.nl>
+ * progmodes/cperl-mode.el (cperl-indent-level): Autoload the
+ safe-local-variable setting.
+ * progmodes/perl-mode.el (perl-indent-level): Likewise.
- * textmodes/org.el (org-context): New contexts :item-bullet,
- :latex-fragment, :latex-preview.
- (org-overlays-at, org-overlay-start, org-overlay-end):
- New compatibility functions.
- (org-inside-LaTeX-fragment-p): More accurate matching, using the
- exact regexp that will be used during export.
- (org-latex-regexps): New variable.
- (org-cdlatex-mode): Improve advice for `texmathp'.
- (turn-on-org-cdlatex): New function.
+ * log-view.el (log-view-marked-list): Delete variable.
+ (log-view-mode): Don't use it.
+ (log-view-toggle-mark-entry): Likewise, simplify.
+ (log-view-current-tag): Don't return properties.
+ (log-view-get-marked): New function.
-2006-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-08-25 Alexandre Julliard <julliard@winehq.org>
- * term/mac-win.el (mac-handle-font-selection): Change keys of
- mac-atsu-font-table from strings to numbers.
- (mac-ts-caret-position): Use also when cursor-type is nil.
- (mac-ts-update-active-input-area): Add Mac OS Classic support.
- Relax condition for using overlay strings.
- Use mac-ts-caret-position face when cursor-type is nil.
+ * vc-git.el (vc-git-mode-line-string): New function.
-2006-06-26 Kim F. Storm <storm@cua.dk>
+2007-08-25 Alan Mackenzie <acm@muc.de>
- * help.el (view-emacs-news): Declare `res' in the right let* form.
+ * progmodes/cc-langs.el (c-other-decl-block-key-in-symbols-alist):
+ new language variable.
-2006-06-25 Michael Albinus <michael.albinus@gmx.de>
+ * progmodes/cc-engine.el (c-brace-anchor-point): new function.
+ (c-add-stmt-syntax): Give accurate anchor points for "namespace",
+ "extern" etc., rather than BOI. Fix addition of spurious
+ syntactic-symbol 'defun-block-intro, replacing it with
+ 'innamespace, etc.
- * net/rcompile.el (remote-compile): Replace ange-ftp based
- implementation by Tramp functions.
- Suggested by Marc Abramowitz <msabramo@gmail.com>.
+2007-08-25 Juri Linkov <juri@jurta.org>
- * net/tramp.el (tramp-unload-tramp): Provide a doc string.
+ * files.el (auto-mode-alist): Move "\\.x[bp]m\\'" to image-mode.el.
-2006-06-24 Yoshinori Koseki <kose@meadowy.org>
+ * image-mode.el: Add autoloads to put associations in auto-mode-alist:
+ associate "\\.x[bp]m\\'" with c-mode and image-mode-maybe, and
+ "\\.svgz?\\'" with xml-mode and image-mode-maybe.
- * international/fontset.el (setup-default-fontset): Fix a typo in
- the "Oriya-Akruti" registry name.
+ * image.el (image-type-header-regexps): Use more complex regexp for svg.
+ (image-type-file-name-regexps): Add ("\\.svgz?\\'" . svg).
+ (image-type-auto-detectable): Add (svg . maybe).
-2006-06-23 Lars Hansen <larsh@soem.dk>
+ * jka-cmpr-hook.el (jka-compr-compression-info-list): Add .svgz
+ to treat it like .tgz.
- * desktop.el (desktop-full-file-name): New function.
- (desktop-kill, desktop-save, desktop-remove, desktop-read)
- (desktop-revert): Use it.
- (desktop-clear, desktop-save, desktop-remove): Add autoload cookie.
- (desktop-after-read-hook): Add option list-buffers.
- (desktop-locals-to-save): Add tab-width.
- (desktop-save-mode, desktop-no-desktop-file-hook, desktop-save-hook):
- Fix docstring.
+ * calendar/cal-bahai.el: Add file coding cookie.
-2006-06-23 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-cdlatex-mode-map)
- (org-cdlatex-texmathp-advice-is-done): New variables.
- (org-cdlatex-mode): New minor mode.
- (org-inside-LaTeX-fragment-p, org-try-cdlatex-tab): New functions.
- (org-cdlatex-underscore-caret, org-cdlatex-math-modify): New commands.
- (org-export-with-archived-trees): New option.
- (org-open-file): Remove the call to `convert-standard-filename'.
- (org-archive-tag, org-agenda-skip-archived-trees)
- (org-cycle-open-archived-trees)
- (org-sparse-tree-open-archived-trees): New options.
- (org-cycle-hide-archived-subtrees, org-hide-archived-subtrees)
- (org-toggle-tag, org-prepare-agenda-buffers, org-agenda-skip):
- New functions.
- (org-agenda-toggle-archive-tag, org-toggle-archive-tag): New commands.
- (org-agenda-mode-map): Add binding of `org-agenda-toggle-archive-tag'.
- (org-mode-map): Add binding for `org-toggle-archive-tag'.
- (org-timeline, org-agenda-list, org-todo-list, org-tags-view):
- Call `org-prepare-agenda-buffers'.
- (org-occur, org-scan-tags): Call `org-hide-archived-subtrees'.
- (org-file-apps, org-file-apps-defaults-gnu)
- (org-file-apps-defaults-macosx, org-file-apps-defaults-windowsnt):
- Handle remote files by forcing them to be opened in Emacs.
+2007-08-25 Reiner Steib <Reiner.Steib@gmx.de>
-2006-06-23 Andre Spiegel <spiegel@gnu.org>
+ * pcvs.el (cvs-query-directory): Only prompt when prefix is given.
+ Don't behave differently when executed via M-x. Add doc string.
- * vc.el (vc-diff-knows-L): New variable.
- (vc-diff-internal): Use it to handle "diff" programs that don't
- understand -L. This works automatically, no user action is necessary.
+ * sort.el (sort-fold-case, sort-numeric-base): Mark as
+ safe-local-variable.
-2006-06-23 Daniel Brockman <daniel@brockman.se>
+2007-08-25 Jay Belanger <jay.p.belanger@gmail.com>
- * net/rcirc.el (rcirc-default-user-full-name): Default to
- `rcirc-default-user-name' instead of `rcirc-user-name' (which no
- longer exists).
- (rcirc-process-list): Check `buffer-live-p' before attempting to
- switch to a buffer.
+ * calc/calc-forms.el (var-TimeZone): Make nil explicitly
+ the default value.
+ (math-calendar-tzinfo): New variable.
+ (math-get-calendar-tzinfo): New function.
+ (calcFunc-tzone, calcFunc-dst): Use Emacs's calendar
+ to get information when zone is nil.
-2006-06-23 Ryan Yeske <rcyeske@gmail.com>
+2007-08-24 Dan Nicolaescu <dann@ics.uci.edu>
- * net/rcirc.el (rcirc-mode): Fix initialization of coding systems
- based on rcirc-coding-system-alist.
+ * log-view.el (log-view-toggle-mark-entry): New function.
+ (log-view-mode-map): Bind it.
+ (log-view-marked-list): New variable.
+ (log-view-mode): Make it local.
-2006-06-23 Martin Rudalics <rudalics@gmx.at>
+2007-08-24 Thien-Thi Nguyen <ttn@gnuvola.org>
- * cus-edit.el (customize-apropos): A better error message.
- (top level) <debug-ignored-errors>: Extend and update the list of
- ignored error messages.
+ * play/zone.el (zone-pgm-rat-race): New func.
+ (zone-programs): Add `zone-pgm-rat-race'.
-2006-06-23 Michael Ernst <mernst@alum.mit.edu>
+2007-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
- * complete.el (PC-do-completion): Retain capitalization of user
- input, when possible, even if completion-ignore-case is set.
+ * emacs-lisp/byte-opt.el (byte-optimize-if): Don't presume `clause' is
+ a list.
-2006-06-23 Eli Zaretskii <eliz@gnu.org>
+2007-08-24 Thien-Thi Nguyen <ttn@gnuvola.org>
- * generic-x.el (bat-generic-mode): Support .cmd files.
+ * progmodes/hideshow.el (hs-match-data): Delete alias.
+ (hs-hide-block-at-point, hs-find-block-beginning)
+ (hs-show-block): Use `match-data' directly.
- * dos-w32.el (top level): Use find-file-not-found-functions
- instead of the obsolete find-file-not-found-hooks.
+2007-08-24 Martin Rudalics <rudalics@gmx.at>
-2006-06-22 Kim F. Storm <storm@cua.dk>
+ * format.el (format-alist): Fix typo in doc-string.
- * progmodes/grep.el (grep-mode-font-lock-keywords): Correct regexps
- to recognize mode name containing submodes, such as Grep/lw.
+2007-08-24 Michael Albinus <michael.albinus@gmx.de>
-2006-06-21 Kim F. Storm <storm@cua.dk>
+ * net/tramp.el (tramp-local-host-p): New defun.
+ (tramp-handle-file-local-copy, tramp-handle-write-region):
+ Implement fast track when being on the local host.
+ (tramp-file-name-handler): Don't set "started" property. It shall
+ be reserved for the "ftp" method.
+ (tramp-make-copy-program-file-name): Use `tramp-file-name-real-host'.
- * simple.el (line-move-1): Check for move-end-of-line instead of
- end-of-line when setting temporary-goal-column.
+ * net/tramp-ftp.el (top): Autoload `tramp-set-connection-property'.
+ (tramp-ftp-file-name-handler): Set "started" property.
-2006-06-21 Miles Bader <miles@gnu.org>
+2007-08-24 Ulrich Mueller <ulm@gentoo.org> (tiny change)
- * play/cookie1.el (cookie): Work properly when there's only one entry.
+ * files.el (backup-buffer-copy): Don't wrap delete in
+ condition-case, only try to delete if file exists.
-2006-06-21 Nick Roberts <nickrob@snap.net.nz>
+2007-08-24 Glenn Morris <rgm@gnu.org>
- * progmodes/gdb-ui.el (gdb-exited): Ensure overlay arrow gets killed.
- (gdb-frame-handler): Generalize frame regexp for templates.
+ * files.el (backup-buffer-copy): Revert 2007-08-22 change.
-2006-06-20 Glenn Morris <rgm@gnu.org>
+ * startup.el (tutorial-directory): Set with eval-at-startup so it
+ gets the right value in an installed Emacs.
- * calendar/appt.el (appt-display-format): Default value must be
- one of the customize options.
+2007-08-24 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
-2006-06-20 Dan Nicolaescu <dann@ics.uci.edu>
+ * emacs-lisp/eldoc.el (eldoc-highlight-function-argument): New face.
+ (eldoc-highlight-function-argument): Use it.
- * term/xterm.el (terminal-init-xterm): Update key availability info.
- Bind C-return.
+2007-08-23 Masatake YAMATO <jet@gyve.org>
- * term.el (term-delete-lines, term-insert-lines): Clarify comments.
+ * progmodes/cc-fonts.el (gtkdoc-font-lock-doc-comments): Highlight
+ name of parameters in document body.
-2006-06-20 Chong Yidong <cyd@stupidchicken.com>
+2007-08-23 Stefan Monnier <monnier@iro.umontreal.ca>
- * files.el (hack-local-variables): Run `hack-local-variables-hook'
- whether or not a local variables list is defined.
+ * emacs-lisp/bytecomp.el (byte-compile-output-docform)
+ (byte-compile-output-as-comment): Use with-current-buffer rather than
+ a weird set-buffer&prog1 combination.
- * msb.el (msb): Move `sit-for' hack here to handle both
- "mouse-down and drag" and "mouse-up and select" situations.
- (mouse-select-buffer): Move `sit-for' hack to `msb'.
+ * emacs-lisp/byte-opt.el (byte-optimize-if): Move `progn' out of the
+ test so as to optimise cases where the `progn's result is constant.
-2006-06-20 Kenichi Handa <handa@m17n.org>
+2007-08-23 Thien-Thi Nguyen <ttn@gnuvola.org>
- * international/characters.el (word-combining-categories):
- Add entries for 2-byte Han characters.
+ * locate.el (locate-get-file-positions):
+ Use line-beginning-position and line-end-position.
-2006-06-19 Richard Stallman <rms@gnu.org>
+2007-08-23 John Wiegley <johnw@newartisans.com>
- * bindings.el (mode-line-format): Save some mode line space.
+ * calendar/cal-bahai.el: Added in the diacriticals that were
+ missing for many of the month names.
- * files.el (find-file-noselect): Improve the question wording.
- (basic-save-buffer-2): Mask UMASK against 666.
+2007-08-22 Jason Rumney <jasonr@gnu.org>
- * mouse.el (mouse-drag-vertical-line-rightward-window): New function.
- (mouse-drag-vertical-line): Call it.
+ * vc-hooks.el (vc-menu-map-filter): Reapply 2007-08-06 bugfix.
- * cus-edit.el (customize-option, customize-option-other-window):
- Error if SYMBOL is nil.
+2007-08-22 Chong Yidong <cyd@stupidchicken.com>
-2006-06-19 Carsten Dominik <dominik@science.uva.nl>
+ * image-mode.el (image-minor-mode): Use image-mode-text-map.
- * textmodes/org.el: Require noutline, also on XEmacs.
- (org-end-of-subtree): Return point.
- (org-dblock-start-re, org-dblock-end-re): New constants.
- (org-create-dblock, org-prepare-dblock, org-map-dblocks)
- (org-dblock-update, org-update-dblock, org-beginning-of-dblock)
- (org-update-all-dblocks, org-find-dblock): New functions.
- (org-collect-clock-time-entries): New function.
- (org-html-handle-time-stamps): Never export CLOCK timeranges.
- (org-fixup-indentation): Modify to deal correctly with lines
- starting with TAB. Only one argument DIFF now.
- (org-demote, org-promote): Call `org-fixup-indentation' with just
- one argument, DIFF.
- (org-mode): Don't mark buffer as modified when aligning tables.
- (org-clock-sum): Don't mark buffer modified when adding time sum
+2007-08-22 Sean O'Rourke <sorourke@cs.ucsd.edu>
+
+ * dabbrev.el (dabbrev--progress-reporter): New variable.
+ (dabbrev--scanning-message): Delete func.
+ (dabbrev--find-expansion): Use a progress reporter
+ instead of dabbrev--scanning-message.
+
+2007-08-22 Michael Albinus <michael.albinus@gmx.de>
+
+ * comint.el (comint-exec-1): Raise an error if
+ `start-file-process' does not return a process object.
+
+ * shell.el (shell): Prompt for `default-directory' if it is a
+ remote file name, and if called with a prefix arg.
+
+2007-08-22 Sam Steingold <sds@gnu.org>
+
+ * pcvs.el (cvs-vc-command-advice): Fix a typo in code (file->files).
+
+2007-08-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org-export-latex.el: New file.
+
+ * textmodes/org-publish.el (org-publish-org-to-latex): New function.
+
+ * textmodes/org.el (org-agenda-skip): Allow a form for
+ `org-agenda-skip-function'.
+ (org-agenda-redo): Re-use local settings.
+ (org-agenda): Store local settings.
+ (org-agenda-deadline-faces): New option.
+ (org-agenda-deadline-face): New function.
+ (org-agenda-get-deadlines, org-agenda-get-scheduled): Also handle
+ entries on their due date.
+ (org-agenda-get-timestamps): No longer handle the due dates of
+ schedules and deadline items.
+ (org-insert-link-global, org-open-at-point-global): New commands.
+ (org-export-as-ascii): Call `org-cleaned-string-for-export' with a
+ :for-ascii parameter.
+ (org-skip-comments): Function removed.
+ (org-cleaned-string-for-export): Handle special table lines.
+ (org-global-properties): New option.
+ (org-entry-get-with-inheritance): Check global properties.
+ (org-local-properties): New variable.
+ (org-set-regexps-and-options): Find the #+PROPERTY line.
+ (org-link-types): Change type into variable (was constant).
+ (org-make-link-regexps): New function.
+ (org-link-re-with-space, org-link-re-with-space2)
+ (org-angle-link-re, org-plain-link-re, org-bracket-link-regexp)
+ (org-bracket-link-analytic-regexp, org-any-link-re): Creation of
+ these regular expressions happens now in the function
+ `org-make-link-regexps'.
+ (org-store-link): Call the functions in
+ `org-store-link-functions'.
+ (org-add-link-type): New function.
+ (org-store-link-functions): New variable.
+ (org-activate-tags): Force matches to be in headlines.
+ (org-batch-store-agenda-views): Fix bug with killing agenda buffer.
+ (org-columns-display-here): Make sure this works in a narrowed
+ buffer by checking for point-min.
+ (org-columns-display-here): Make the rest of the line intangible,
+ so that point never can be there.
+ (org-cleaned-string-for-export): Use `with-current-buffer'.
+ (org-replace-region-by-html): Use `with-current-buffer'.
+ (org-unfontify-region, org-do-occur, org-columns-display-here)
+ (org-columns-remove-overlays, org-columns-quit)
+ (org-columns-edit-value, org-columns-next-allowed-value)
+ (org-eval-in-calendar, org-agenda-undo, org-no-read-only)
+ (org-finalize-agenda, org-remove-subtree-entries-from-agenda)
+ (org-agenda-todo, org-agenda-change-all-lines)
+ (org-agenda-align-tags, org-agenda-priority)
+ (org-agenda-set-tags, org-agenda-toggle-archive-tag)
+ (org-agenda-show-new-time, org-cleaned-string-for-export)
+ (org-export-grab-title-from-buffer)
+ (org-export-as-ascii, org-export-as-html): Use `inhibit-read-only'
+ instead of `buffer-read-only'.
+ (org-export-as-html): Set `coding-system-for-write'.
+ (org-remember-store-without-prompt): New option.
+ (org-archive-subtree): Fixed bug with modifying TODO keyword.
+ (org-beginning-of-line): Also treat C-a special in items.
+ (org-table-convert-refs-to-rc): Fixed problem with column
+ reference after "..".
+ (org-columns-compute): Don't mark buffer modified because of text
properties.
- (org-export-as-html): Add support for a link validation function.
- (org-archive-all-done): New function.
- (org-archive-subtree): New prefix argument. When set, archive all
- done subtrees in this buffer.
- (org-remove-clock-overlays)
- (org-remove-occur-highlights): Use `org-inhibit-highlight-removal'.
- (org-inhibit-highlight-removal): New variable, for dynamic scoping.
- (org-put-clock-overlay): Don't swallow last headline character
- when displaying overlay.
- (org-store-link): Link to `image-mode' with just the file name.
-
-2006-06-18 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-cmd.el (viper-special-read-and-insert-char):
- Use read-key-sequence.
- (viper-after-change-undo-hook): Misc enhancements.
- (viper-after-change-undo-hook): New hook.
- (viper-undo): Use viper-after-change-undo-hook.
- (viper-add-newline-at-eob-if-necessary): Widen before making changes.
- (viper-next-line-at-bol): If point is on a widget or a button, simulate
- clicking on that widget/button.
-
- * emulation/viper.el (viper-mode): Allow a separate cursor color
- in Emacs state.
-
- * ediff-diff.el (ediff-test-patch-utility): Catch errors.
- (ediff-actual-diff-options, ediff-actual-diff3-options): New variables.
- (ediff-set-actual-diff-options): New function.
- (ediff-reset-diff-options, ediff-toggle-ignore-case):
- Use ediff-set-actual-diff-options.
- (ediff-extract-diffs): Catch errors.
- (ediff-whitespace): Add non-breakable space.
- (ediff-same-file-contents): Catch errors.
+ (org-batch-store-agenda-views): Use the variable
+ `default-directory', not the function.
+ (org-clock-out-if-current): Respect `org-clock-out-when-done'.
+ (org-clock-out-when-done): New option.
+ (org-html-entities): Added HTML entities for smileys.
- * ediff-mult.el (ediff-collect-custom-diffs):
- Save coding-system-for-read.
-
- * ediff-vers.el (ediff-keep-tmp-versions): New variable.
- (ediff-vc-internal, ediff-vc-merge-internal):
- Use ediff-delete-version-file.
- (ediff-delete-version-file): New function.
-
- * ediff-wind.el (ediff-control-frame-parameters): Set frame fringes.
-
- * ediff.el (ediff-directories, ediff-directory-revisions)
- (ediff-merge-directories, ediff-merge-directories-with-ancestor)
- (ediff-directories-internal, ediff-merge-directory-revisions)
- (ediff-merge-directory-revisions-with-ancestor)
- (ediff-directories3): Use read-directory-name.
-
-2006-06-18 Ralf Angeli <angeli@caeruleus.net>
-
- * textmodes/tex-mode.el (tex-font-lock-match-suscript):
- Remove superfluous part of regexp for brace matching which is handled
- by `scan-lists' call.
-
-2006-06-16 Richard Stallman <rms@gnu.org>
-
- * obsolete/options.el (list-options): Put "obsolete" msg in buffer.
-
- * files.el (basic-save-buffer-2): For a new precious file,
- use the default modes in the return value.
-
- * facemenu.el (facemenu-color-alist): Doc fix.
-
- * cus-edit.el (custom-guess-name-alist): Recognize `-flag'.
+2007-08-22 Glenn Morris <rgm@gnu.org>
-2006-06-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * image.el (create-image): Doc fix.
- * cus-start.el (all): Add mac-ts-script-language-on-focus.
+ * startup.el (tutorial-directory): New constant.
+ (fancy-splash-text): Tutorials now in tutorial-directory.
+ * tutorial.el (help-with-tutorial): Tutorials now in
+ tutorial-directory.
- * term/mac-win.el (mac-text-encoding-ascii): New constant.
- (mac-utxt-to-string): Use it.
- (mac-ts-update-active-input-area): Use mac-ae-number.
+2007-08-22 Michael Albinus <michael.albinus@gmx.de>
-2006-06-15 Dan Nicolaescu <dann@ics.uci.edu>
+ * net/tramp.el (top): Require cl.el, when `copy-tree' is not available
+ otherwise.
+ (tramp-get-remote-path): New defun. Replace occurrences of
+ `tramp-default-remote-path' by this function.
+ (tramp-set-remote-path): Move most of the code to
+ `tramp-get-remote-path'.
+ (tramp-get-ls-command, tramp-get-remote-id): Don't check for not
+ existing directories, this is done already in
+ `tramp-get-remote-path'.
- * term.el (term-handle-scroll, term-delete-lines)
- (term-insert-lines): Fix off by one errors.
+2007-08-22 Paul Pogonyshev <pogonyshev@gmx.net>
-2006-06-15 Katsumi Yamaoka <yamaoka@jpl.org>
+ * image-file.el (image-file-name-extensions): Add "svg".
+ * image.el (image-type-header-regexps): Add svg entry.
- * net/tramp.el (tramp-touch): Use UTC to express time.
+2007-08-22 Glenn Morris <rgm@gnu.org>
-2006-06-15 Chong Yidong <cyd@stupidchicken.com>
+ * files.el (backup-buffer-copy): Check backup directory is
+ writable, to avoid infloop deleting old backup.
- * mail/sendmail.el (mail-send): Search explicitly for
- mail-header-separator when checking for corrupted header lines.
+ * mail/rmail.el (rmail-movemail-variant-p): Call on load to set
+ movemail related variables.
+ (rmail-insert-inbox-text): Use only rmail-movemail-program, which
+ will now be set before this is called.
-2006-06-15 Nick Roberts <nickrob@snap.net.nz>
+2007-08-21 Juri Linkov <juri@jurta.org>
- * progmodes/gdb-ui.el (gdb-same-frame): New option.
- (gud-old-arrow, gdb-frame-begin, gdb-printing): New variables.
- (gdb-init-1): Initialise them.
- (gdb-starting): Reset gdb-printing
- (gdb-starting): Save value of gud-overlay-arrow-position.
- (gdb-frame-begin): Set gdb-frame-begin, gdb-printing.
- (gdb-stopped): Don't look for source if calling procedure e.g "p a ()".
- Use gdb-*-gdb-buffer conditionally on gdb-same-frame.
- (gdb-frame-gdb-buffer): Keep menu bar, tool bar for GUD buffer.
+ * delsel.el (delete-selection-pre-hook):
+ * emulation/cua-base.el (cua-paste): Use `mouse-region-match'
+ instead of checking last-command.
-2006-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-08-21 Juri Linkov <juri@jurta.org>
- * pcvs.el (cvs-retrieve-revision): Use decode-coding-inserted-region.
+ * loadup.el: Preload "button".
-2006-06-13 Martin J. Reed <mjreed@essex.ac.uk> (tiny change)
+2007-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
- * net/ldap.el (ldap-ldapsearch-args): Default to SASL search.
- (ldap-search-internal): Keep error messages, and a regexp fix.
+ * emacs-lisp/bytecomp.el (byte-compile-interactive-only-functions):
+ Add previous-line and next-line.
-2006-06-12 Thien-Thi Nguyen <ttn@gnu.org>
+ * vc-arch.el (vc-arch-extra-menu-map): New var and fun.
+ (vc-arch-find-file-not-found-hook): Remove, it's now the default.
- * files.el (hack-local-variables-confirm):
- Display string value using its printed representation.
+ * vc-hooks.el (vc-menu-entry): New var.
+ (vc-mode-line-map): Use it so that this menu also uses the extra-menu.
+ (menu-bar-tools-menu): Add the VC menu here rather than in menu-bar.el.
+ (vc-menu-map): Declare and initialize in one step.
+ (vc-menu-map-filter): Move&rename from menu-bar.el:menu-bar-vc-filter.
-2006-06-11 Chong Yidong <cyd@stupidchicken.com>
+ * menu-bar.el (vc-menu-map): Don't setup any more.
+ Instead, just create the proper spot in the menu.
- * server.el (server-edit): No-op if no server buffers exist.
+2007-08-20 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-06-11 Robert J. Chassell <bob@rattlesnake.com>
+ * smerge-mode.el (smerge-resolve): New arg `safe'.
+ (smerge-resolve-all, smerge-batch-resolve): New function.
+ (smerge-refine): Make sure `diff' returns the expected result.
+ (smerge-parsep-re): New const.
+ (smerge-mode): Use it to adjust paragraph-separate.
- * textmodes/page-ext.el (pages-directory-for-addresses):
- Including `pages-directory-address-mode' in the function results
- in the message "Buffer in which pages were found is deleted".
+ * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords):
+ Correctly match / regexp matchers as first char on a line when
+ fontifying only that line.
-2006-06-10 Carsten Dominik <dominik@science.uva.nl>
+ * emacs-lisp/cl-macs.el (cl-transform-lambda): Preserve the match-data.
- * textmodes/org.el (org-agenda-mode-map): Add bindings for
- clocking functions.
+2007-08-20 Stefan Monnier <monnier@iro.umontreal.ca>
- (org-agenda-clock-in, org-check-running-clock)
- (org-clock-out-if-current, org-remove-clock-overlays)
- (org-put-clock-overlay): New functions.
- (org-clock-marker, org-clock-file-total-minutes)
- (org-clock-overlays): New variables.
- (org-clock-display, org-clock-sum, org-clock-cancel)
- (org-clock-out, org-clock-in): New commands.
- (org-export): New function.
- (org-emph-re): New constant.
- (org-set-emph-re, org-do-emphasis-faces): New functions.
- (org-emphasis-regexp-components, org-emphasis-alist): New options.
- (org-set-font-lock-defaults): Call `org-do-emphasis-faces'.
- (org-export-html-convert-emphasize): Use the configurable emphasis.
- (org-cleaned-string-for-export): Make multiline emphasis visible
- to the exporter. New optional argument PARAMETERS.
- (org-export-as-html): Specify :emph-multiline parameter to
- `org-cleaned-string-for-export'.
+ * vc-bzr.el: Don't fiddle with vc-handled-backend.
+ (vc-bzr-registered): Don't redundantly protect against
+ file-error. Actually use the format-specific code.
+ (vc-bzr-buffer-nonblank-p): Remove.
+ (vc-bzr-status): Change `kindchange' -> `kindchanged'.
-2006-06-10 Richard Stallman <rms@gnu.org>
+2007-08-20 Juri Linkov <juri@jurta.org>
- * help.el (help-for-help-internal): Clean up help text.
+ * startup.el (fancy-splash-text): Change multiple tabs into one
+ tab. Remove "Useful File menu items" section (with "Exit Emacs"
+ and "Recover Crashed Session").
+ (fancy-splash-screens): Set tab-width to 22.
+ (normal-splash-screen): Replace literal tabs with \t and
+ fix whitespace. Remove "Useful File menu items" section (with
+ "Exit Emacs" and "Recover Crashed Session").
-2006-06-10 Andreas Schwab <schwab@suse.de>
+2007-08-20 Johannes Weiner <hannes@saeurebad.de> (tiny change)
- * language/ethio-util.el (ethio-fidel-to-java-buffer): Fix quoting
- in doc string.
+ * emacs-lisp/lisp-mode.el (preceding-sexp): New fun, the code was
+ extracted from `eval-last-sexp-1'.
+ (eval-last-sexp-1): Call `preceding-sexp'.
- * progmodes/cperl-mode.el (cperl-short-docs): Likewise.
+2007-08-20 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-06-09 Karl Chen <quarl@cs.berkeley.edu>
+ * vc-rcs.el (vc-rcs-annotate-command):
+ Fix bug introduced 2007-07-18T16:32:40Z!esr@snark.thyrsus.com:
+ Add back :vc-annotate-prefix propertization.
- * progmodes/make-mode.el (makefile-fill-paragraph): Don't remove
- spaces after the comment start.
+2007-08-20 Andreas Schwab <schwab@suse.de>
-2006-06-09 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * mail/rmail.el (rmail-autodetect): Doc fix.
- * play/pong.el (pong-init-buffer):
- Fill buffer with spaces instead of ^A.
+2007-08-19 Juri Linkov <juri@jurta.org>
- * textmodes/ispell.el (ispell-kill-ispell): If ispell has been
- launched asynchronously, delete its process instead of being cool.
- (ispell-async-processp): Check for `delete-process' existence
- instead of `kill-process' one for consistency.
+ * startup.el (normal-splash-screen): Add more links.
-2006-06-09 Nick Roberts <nickrob@snap.net.nz>
+2007-08-19 Juri Linkov <juri@jurta.org>
- * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers-1)
- (gdb-prompt, gdb-set-gud-minor-mode-existing-buffers): Show status
- in mode line at startup.
+ * startup.el (splash-screen-keymap): Rename from `fancy-splash-keymap'
+ because it's common to both types of splash screen: fancy and normal.
+ Bind SPC to scroll-up, DEL to scroll-down and `q' to exit-splash-screen.
+ (exit-splash-screen): Rename from `fancy-splash-quit'.
+ Use `quit-window' instead of `kill-buffer'.
+ (fancy-splash-head): Use make-button to insert GNU image link.
+ (fancy-splash-screens, normal-splash-screen): Rename " About GNU
+ Emacs" to "*About GNU Emacs*", and " GNU Emacs" to "*GNU Emacs*".
+ (normal-splash-screen): Put "Browse manuals" on the same line with
+ "Emacs manual". Remove descriptions from "Useful tasks" and put
+ all links in two columns on two lines.
-2006-06-08 Kim F. Storm <storm@cua.dk>
+2007-08-19 Michael Kifer <kifer@cs.stonybrook.edu>
- * ido.el (ido-take-first-match, ido-push-dir-first): New commands.
- (ido-init-completion-maps): Bind them to M-SPC and M-v.
- (ido-copy-current-file-name): Repeating C-w inserts whole file name.
- (ido-file-internal): Pass full file name to write-file.
- (ido-read-internal): Only pop stack elements automatically if they
- actually match an existing directory or file name.
+ * emulation/viper.el (viper-remove-hooks): Remove some additional
+ viper hooks when the user calls viper-go-away.
+ (viper-go-away): Restore the default of default-major-mode.
+ Save the value of default-major-mode before vaperization.
-2006-06-07 Kenichi Handa <handa@m17n.org>
+ * emulation/viper-cmd.el: Replace error "" with "Viper bell".
- * international/mule.el (find-auto-coding): Don't handle the short
- name `char-trans'.
+ * emulation/viper-ex.el: Replace error "" with "Viper bell".
- * files.el (hack-local-variables-prop-line)
- (hack-local-variables): Cancel the previous change.
+ * ediff-util.el (ediff-make-temp-file): Use the coding system of the
+ buffer for which file is created.
-2006-06-06 Jesper Harder <harder@phys.au.dk>
+2007-08-19 Glenn Morris <rgm@gnu.org>
- * ediff-diff.el (ediff-test-utility): Protect against file-error.
+ * Makefile.in (custom-deps, finder-data, autoloads, recompile)
+ (progmodes/cc-mode.elc, mh-e/mh-loaddefs.el): Use $(emacs) rather
+ than $(EMACS), so that EMACSLOADPATH is set. Prevents any system
+ shadow files messing up the compilation.
-2006-06-06 Chong Yidong <cyd@stupidchicken.com>
+2007-08-18 Glenn Morris <rgm@gnu.org>
- * diff-mode.el (diff-mode): Set buffer-read-only to t when
- diff-default-read-only is non-nil.
- (diff-hunk-kill, diff-file-kill, diff-split-hunk)
- (diff-refine-hunk): Set inhibit-read-only to t.
+ * emacs-lisp/eldoc.el (eldoc-get-fnsym-args-string): Add doc
+ string. Also apply eldoc-argument-case in the help-split-fundoc
+ case. Adapt for changed behavior of eldoc-function-argstring,
+ eldoc-function-argstring-format, and
+ eldoc-highlight-function-argument.
+ (eldoc-highlight-function-argument): Handle nil INDEX argument,
+ just call eldoc-docstring-format-sym-doc in that case.
+ (eldoc-function-argstring): Change the behavior. Now it converts
+ an argument list to a string.
+ (eldoc-function-argstring-format): Change the behavior. Now it
+ applies `eldoc-argument-case' to a string.
+
+ * progmodes/scheme.el (scheme-mode-variables): Set
+ font-lock-comment-start-skip.
- * diff.el (diff-sentinel, diff): Set inhibit-read-only to t when
- modifying the *Diff* buffer.
- (diff-process-filter): New filter function for diff process that
- sets inhibit-read-only to t when modifying the *Diff* buffer.
+2007-08-18 Martin Rudalics <rudalics@gmx.at>
-2006-06-06 Carsten Dominik <dominik@science.uva.nl>
+ * progmodes/ada-mode.el (ada-create-syntax-table): Move
+ set-syntax-table from here to ...
+ (ada-mode): ... here. Do not change global value of
+ comment-multi-line. Call new function
+ ada-initialize-syntax-table-properties and add new function
+ ada-handle-syntax-table-properties to font-lock-mode-hook.
+ (ada-deactivate-properties, ada-initialize-properties): Replace
+ by new functions ...
+ (ada-handle-syntax-table-properties)
+ (ada-initialize-syntax-table-properties)
+ (ada-set-syntax-table-properties): ... to set up syntax-table
+ properties uniformly, independently from whether font-lock-mode
+ is enabled or not. Handle read-only buffers and do not change
+ undo-list when setting syntax-table properties.
+ (ada-after-change-function): Use ada-set-syntax-table-properties.
- * textmodes/org.el (org-archive-subtree): Use end-of-subtree as
- insertion point and control the number of empty lines.
- (org-paste-subtree): Limit the number of empty lines at the end of
- the inserted tree.
- (org-agenda): Use buffer name of current file for narrowing.
- (org-export-as-xml): Command removed.
- (org-export-xml-type): Option removed.
- (org-mode-map): Call `org-export-as-xoxo' directly.
- (org-get-indentation): New optional argument LINE.
- (org-fix-indentation, org-remove-tabs): New functions.
- (org-export-as-ascii, org-ascii-level-start): Determine and apply
- correct indentation for headlines that are converted it items.
- (org-skip-comments): Remove table lines that contain narrowing
- cookies but no other non-empty fields.
- (org-set-tags): Allow groups of mutually exclusive tags.
- (org-cmp-time): Sort 24:21 before items without time.
- (org-get-time-of-day): Fix the interpretation of 12pm and 12am.
- (org-open-at-point): Require double colon also for numbers.
+2007-08-18 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-06-06 Kim F. Storm <storm@cua.dk>
+ * progmodes/meta-mode.el (meta-indent-calculate-last): Remove.
+ (meta-indent-current-nesting): Use a computation of the nesting
+ instead.
+ (meta-indent-current-indentation): Indentation is given according
+ to nesting and if the previous line was finished or not.
+ (meta-indent-unfinished-line): Tell if the current line ends with
+ a finished expression.
+ (meta-indent-looking-at-code): Like `looking-at', but checks if
+ the point is in a string before.
+ (meta-indent-level-count): Use it. Don't count parenthesis as it's
+ done in the nesting function.
+ (meta-indent-in-string-p): Tell if the current point is in a
+ string.
+ (meta-indent-calculate): Treat b-o-b as a special case. Use the
+ previous functions.
+
+2007-08-17 Thien-Thi Nguyen <ttn@gnuvola.org>
+
+ * emacs-lisp/copyright.el (copyright-limit): New defsubst.
+ (copyright-update-year, copyright-update)
+ (copyright-fix-years): Use it.
+
+2007-08-17 Kimit Yada <kimitto@gmail.com> (tiny change)
+
+ * emacs-lisp/copyright.el (copyright-update-year):
+ Fix bug: Handle nil copyright-limit.
+
+2007-08-17 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-units.el (math-standard-units): Give exact
+ conversion for tsp.
+
+ * calc/calc.el (math-bignum-digit-length): Compute the
+ appropriate value.
+
+ * calc/calc-bin.el (math-bignum-logb-digit-size)
+ (math-bignum-digit-power-of-two):
+ * calc/calc-comb.el (math-small-factorial-table):
+ * calc/calc-ext.el (math-approx-pi, math-approx-sqrt-e)
+ (math-approx-gamma-const):
+ * calc/calc-funcs.el (math-besJ0, math-besJ1, math-besY0)
+ (math-besY1, math-bernoulli-b-cache):
+ * calc/calc-math.el (math-approx-ln-10, math-approx-ln-2):
+ Remove `eval-when-compile's.
- * ido.el (ido-default-file-method, ido-default-buffer-method):
- Make choice values consistent with corresponding command names.
- (ido-visit-buffer): Update accordingly. Default to selected-window.
+2007-08-17 Bob Rogers <rogers-emacs@rgrjr.dyndns.org> (tiny change)
-2006-06-06 Nick Roberts <nickrob@snap.net.nz>
+ * progmodes/cperl-mode.el (cperl-look-at-leading-count)
+ (cperl-find-pods-heres): Fix an error when typing expressions like
+ `s{a}{b}'.
- * progmodes/gud.el (gud-running): Fix doc string.
- (gud-menu-map): Use :visible instead fo :enable for debugger test.
- (gud-tooltip-modes): Add python-mode.
- (gud-tooltip-print-command): Add pdb. Remove perldb.
+2007-08-17 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-06-05 Eli Zaretskii <eliz@gnu.org>
+ * mail/emacsbug.el (report-emacs-bug): Remove the last number of
+ `emacs-version', use the topic prefix ``version; ''. Make MS-DOS
+ a special case (there's no build number).
- * makefile.w32-in (bootstrap, $(lisp)/mh-e/mh-loaddefs.el):
- Quote $(EMACS).
+2007-08-17 T. V. Raman <raman@users.sf.net> (tiny change)
-2006-06-05 Richard Stallman <rms@gnu.org>
+ * completion.el (symbol-under-point, symbol-before-point)
+ (symbol-before-point-for-complete): Use buffer-substring-no-properties.
- * faces.el (defined-colors): Doc fix.
+2007-08-17 Glenn Morris <rgm@gnu.org>
-2006-06-05 Thien-Thi Nguyen <ttn@gnu.org>
+ * progmodes/compile.el (compilation-get-file-structure): Make use
+ of the directory part when checking for an existing entry, to
+ handle files with same basename in different directories.
- * vc.el (vc-process-filter): Inhibit undo info collection around
- call to insert.
- (vc-setup-buffer): Likewise for call to erase-buffer.
- (vc-do-command): Likewise for call to process-file.
+2007-08-17 Jay Belanger <jay.p.belanger@gmail.com>
-2006-06-05 Nick Roberts <nickrob@snap.net.nz>
+ * calc/calc.el (calc-language-alist): Add texinfo-mode.
- * progmodes/gud.el (gud-menu-map): Use a conditional help echo
- for gud-go.
- (gud-common-init): Other debuggers may trigger error.
+2007-08-16 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2006-06-05 Kenichi Handa <handa@m17n.org>
+ * ps-print.el (ps-header-font-size, ps-header-title-font-size)
+ (ps-footer-font-size, ps-line-number-font-size, ps-line-spacing)
+ (ps-paragraph-spacing): Docstring fix.
- * international/mule.el (find-auto-coding):
- Handle enable-character-translation in file header.
+2007-08-16 Glenn Morris <rgm@gnu.org>
-2006-06-04 Kim F. Storm <storm@cua.dk>
+ * ps-print.el (ps-font-size): Doc fix.
- * emacs-lisp/authors.el (authors-aliases): Add mode aliases.
- (authors-fixed-entries): Fix spelling.
- (authors-canonical-file-name): Don't report error for wildcards.
+2007-08-16 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/copyright.el (copyright-names-regexp): Add custom group.
+
+2007-08-15 Juri Linkov <juri@jurta.org>
+
+ * startup.el (initialization): Change parent group from `internal'
+ to `environment'.
+ (initial-buffer-choice): New variable.
+ (command-line): Revert 2007-07-02 change that sets
+ buffer-offer-save in *scratch* and enables auto-save in it.
+ (fancy-splash-text): Add links to existing items. Add new items
+ with links for useful tasks. Move information about Control-g to
+ fancy-splash-head. Move "Emacs Guided Tour" to the end.
+ (fancy-splash-keymap): New variable.
+ (fancy-splash-last-input-event): Remove variable.
+ (fancy-splash-insert): Add processing of `:link' element.
+ (fancy-splash-head): Replace "Type Control-l to begin editing"
+ with "Type `q' to exit".
+ (fancy-splash-screens-1): Let-bind inhibit-read-only to t.
+ (fancy-splash-default-action, fancy-splash-special-event-action):
+ Remove functions.
+ (fancy-splash-quit): New function.
+ (fancy-splash-screens): Rename input arg from `hide-on-input' to
+ `static' and reverse the condition of its usage. Don't preserve
+ original values of `minor-mode-map-alist',
+ `emulation-mode-map-alists', `special-event-map'.
+ Rename startup-buffer from "*About GNU Emacs*" to " GNU Emacs".
+ Rename about-buffer from " GNU Emacs" to " About GNU Emacs".
+ Remove processing of special events. Use local key map
+ `fancy-splash-keymap'. Set buffer to read-only.
+ (normal-splash-screen): Rename input arg from `hide-on-input' to
+ `static' and reverse the condition of its usage.
+ Rename startup-buffer from "*About GNU Emacs*" to " GNU Emacs".
+ Rename about-buffer from " GNU Emacs" to " About GNU Emacs".
+ Add links to existing items. Add new items with links for useful
+ tasks. Use local key map `fancy-splash-keymap'.
+ (display-splash-screen): Rename input arg from `hide-on-input' to
+ `static'.
+ (about-emacs): Add alias to display-splash-screen.
+ (command-line-1): Use `initial-buffer-choice'.
- * help.el (view-emacs-news): Rewrite to support new NEWS,
- NEWS.major, and NEWS.1-17 file naming. Add more intelligence,
- e.g. version 10 matches 1.10, and don't be confused by version 1.1
- being a prefix of 1.12 (etc). A numeric prefix arg also works.
+ * menu-bar.el (menu-bar-help-menu):
+ * term/mac-win.el (mac-apple-event-map): Bind About Emacs menu
+ item to about-emacs instead of display-splash-screen.
-2006-06-03 Vivek Dasmohapatra <vivek@etla.org>
+2007-08-15 Jay Belanger <jay.p.belanger@gmail.com>
- * progmodes/sh-script.el (sh-quoted-exec): New face for quoted
- exec constructs like `foo bar`.
- (sh-quoted-subshell): New helper function to search for a possibly
- nested subshell (like `` or $()) within a "" quoted string.
- (sh-font-lock-keywords-var): Add sh-quoted-exec for Bash.
- (sh-apply-quoted-subshell): Flag quote characters inside a
- subshell, which is itself already in a quoted region, as
- punctuation, since this is the closest to what they actually are.
- (sh-font-lock-syntactic-keywords): Add sh-quoted-subshell and
- sh-apply-quoted-subshell.
- (sh-font-lock-syntactic-face-function): Apply the new face for
- text inside `` instead of the old font-lock-string-face.
-
-2006-06-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-ts-active-input-overlay): Add defvar.
- (mac-ae-number, mac-ae-frame, mac-ae-script-language)
- (mac-bytes-to-text-range, mac-ae-text-range-array)
- (mac-ts-update-active-input-buf, mac-split-string-by-property-change)
- (mac-replace-untranslated-utf-8-chars, mac-ts-update-active-input-area)
- (mac-ts-unicode-for-key-event): New functions.
- (mac-handle-toolbar-switch-mode): Use mac-ae-frame.
- (mac-handle-font-selection): Use mac-ae-number.
- (mac-ts-active-input-buf, mac-ts-update-active-input-area-seqno):
- New variables.
- (mac-ts-caret-position, mac-ts-raw-text, mac-ts-selected-raw-text)
- (mac-ts-converted-text, mac-ts-selected-converted-text)
- (mac-ts-block-fill-text, mac-ts-outline-text)
- (mac-ts-selected-text, mac-ts-no-hilite): New faces.
- (mac-ts-hilite-style-faces): New constant.
- (mac-apple-event-map): Bind text input events.
- (mac-dispatch-apple-event): Use command-execute instead of
- call-interactively.
- (global-map): Don't bind mac-apple-event.
- (special-event-map): Bind mac-apple-event.
-
-2006-06-02 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (EMACS): Remove quotes from the Emacs executable
- file name.
- (emacs): Enclose the value of $(EMACS) in quotes.
+ * calc/calc-units.el (math-standard-units): Update values.
+ Put in exact, rational values when possible.
+ (math-unit-prefixes): Replace floats with powers of ten.
+ (math-standard-units-systems): Replace floats with integers.
+ (math-make-unit-string): Remove extra spaces in output.
-2006-06-02 Juri Linkov <juri@jurta.org>
+2007-08-15 Glenn Morris <rgm@gnu.org>
- * international/mule.el (sgml-html-meta-auto-coding-function):
- Remove the condition `(search-forward "<html" size t)'.
- Replace `\"' with `[\"']?' in `re-search-forward'.
+ * mail/undigest.el (rmail-digest-parse-rfc1153sloppy): Be even
+ sloppier, for the sake of GNU Mailman.
+ (rmail-digest-rfc1153): Initialize `result' correctly.
-2006-06-02 Kenichi Handa <handa@m17n.org>
+2007-08-15 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * files.el (hack-local-variables-prop-line): Ignore `char-trans'
- as well as `coding'.
- (hack-local-variables): Likewise.
+ * mail/emacsbug.el (report-emacs-bug): Put `Bug: emacs-version; '
+ in the mail title. Suggested by Reiner Steib.
- * international/mule.el (enable-character-translation):
- Put permanent-local and safe-local-variable properties.
- (find-auto-coding): Handle char-trans: tag.
+2007-08-14 Chris Hecker <checker@d6.com> (tiny change)
-2006-06-02 Juri Linkov <juri@jurta.org>
+ * calc/calc-aent.el (calc-do-quick-calc): Add binary
+ representation of integers to the list of outputs.
- * international/mule.el (sgml-html-meta-auto-coding-function):
- Limit the search by the end of the HTML header (if any).
+2007-08-14 Glenn Morris <rgm@gnu.org>
-2006-06-01 Richard Stallman <rms@gnu.org>
+ * simple.el (bad-packages-alist): New constant.
+ (bad-package-check): New function. Together, these two add elements
+ to `after-load-alist' to check for problematic external packages.
+ * emulation/cua-base.el: Move CUA-mode check to `bad-packages-alist'.
- * subr.el (with-current-buffer): Doc fix.
+2007-08-14 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc-units.el (math-get-standard-units)
+ (math-get-units, math-make-unit-string)
+ (math-get-default-units, math-put-default-units): New functions.
+ (math-default-units-table): New variable.
+ (calc-convert-units, calc-convert-temperature): Add machinery
+ to supply default values.
+
+2007-08-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emulation/tpu-edt.el: Add tpu-extras's autoloads.
+ (tpu-gold-map, tpu-global-map): Comment-out the bindings to nil.
+ (tpu-gold-map): Bind F to tpu-cursor-free-mode.
+ (minibuffer-local-map): Use funkey symbols rather than esc-sequence.
+
+ * emulation/tpu-extras.el: Remove spurious * in docstrings.
+ Put its autoloads into tpu-edt.el rather than loaddefs.el.
+ (tpu-cursor-free-mode): Rename from tpu-cursor-free.
+ Make into a proper minor-mode.
+ (tpu-backward-char, tpu-next-line, tpu-previous-line)
+ (tpu-next-end-of-line, tpu-current-end-of-line): Use new name.
+ (tpu-trim-line-ends-if-needed): Rename from tpu-before-save-hook.
+ (tpu-set-cursor-free, tpu-set-cursor-bound):
+ Delegate to tpu-cursor-free-mode.
+ (tpu-next-line, tpu-previous-line, tpu-forward-line)
+ (tpu-backward-line, tpu-scroll-window-down, tpu-scroll-window-up):
+ Use line-move or forward-line instead of next-line-internal.
-2006-06-02 Masatake YAMATO <jet@gyve.org>
+2007-08-13 Nick Roberts <nickrob@snap.net.nz>
- * progmodes/compile.el (compilation-error-regexp-alist-alist::gcov-*):
- Almost rewrite. Underlines over all lines of gcov output are too
- uncomfortable to read. Suggested by Dan Nicolaescu.
+ * progmodes/gdb-ui.el (gdb-send): Handle CTRL-D more carefully.
-2006-06-01 Luc Teirlinck <teirllm@auburn.edu>
+2007-08-12 Richard Stallman <rms@gnu.org>
- * progmodes/inf-lisp.el (inferior-lisp-mode): Doc fixes.
+ * pcvs.el (cvs-reread-cvsrc, cvs-checkout, cvs-mode-checkout)
+ (cvs-execute-single-file): Use new name split-string-and-unquote.
+ (cvs-header-msg): Use new name combine-and-quote-strings.
- * shell.el (shell-mode): Use shell-mode-map in docstring.
+ * emulation/vi.el (vi-next-line): Ignore return value of line-move.
- * comint.el (comint-send-input): Do not add help-echo and
- mouse-face to input if `comint-use-prompt-regexp' is non-nil.
+ * progmodes/gud.el (gud-common-init): Use new name
+ split-string-and-unquote.
-2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * progmodes/flymake.el (flymake-err-line-patterns): Fix infloop
+ in javac regexp.
- * term/x-win.el: Change x-menu-bar-start to menu-bar-open.
+ * pcvs-util.el (cvs-qtypedesc-strings): Use new names
+ combine-and-quote-strings and split-string-and-unquote.
-2006-06-01 Nick Roberts <nickrob@snap.net.nz>
+ * subr.el (combine-and-quote-strings): Rename from strings->string.
+ (split-string-and-unquote): Rename from string->strings.
- * progmodes/gdb-ui.el (gdb-look-up-stack): New variable.
- (gdb-stopped, gdb-info-stack-custom): If there is no source info
- look up the stack and pop up GUD buffer if necessary.
- (gdb-frames-select): Remove redundant call to gud-display-frame.
- (gdb-info-threads-custom): Keep point at start of buffer.
- (gdb-find-file-hook): Make it work for pre-GDB 6.4.
+2007-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-31 Juri Linkov <juri@jurta.org>
+ * log-view.el (log-view-font-lock-keywords): Use `eval' so as to adapt
+ to buffer-local settings.
- * replace.el (query-replace-read-from, query-replace-read-to):
- Bind `history-add-new-input' to nil. Call `add-to-history'.
+ * emacs-lisp/backquote.el (backquote-delay-process): New function.
+ (backquote-process): Add internal arg `level'. Use the two to
+ correctly handle nested backquotes.
-2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
+2007-08-09 Riccardo Murri <riccardo.murri@gmail.com>
- * textmodes/table.el: Convert all HTML tags to lower case for
- XHTML compatibility.
+ * vc-bzr.el (vc-bzr-registered): Use \0 instead of literal NULs.
+ (vc-bzr-state-words): Add "kind changed" state word.
+ (vc-bzr-status): New function. Return Bzr idea of file status,
+ which is different from VC's.
+ (vc-bzr-state): Use vc-bzr-status.
+ (vc-workfile-unchanged-p): Use vc-bzr-status.
+ (vc-bzr-revert): Use synchronous process; expect exitcode 0.
+ (vc-dired-state): Process "kind changed" state word.
-2006-05-31 Masatake YAMATO <jet@gyve.org>
+2007-08-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/compile.el:
- (compilation-error-regexp-alist-alist::gcov-called-line):
- Don't put face on `-' lines in gcov file. Suggested by Dan Nicolaescu.
+ * vc-hooks.el (vc-default-find-file-not-found-hook): Do nothing.
-2006-05-31 Nick Roberts <nickrob@snap.net.nz>
+ * vc-rcs.el (vc-rcs-find-file-not-found-hook):
+ Move from vc-default-find-file-not-found-hook.
- * progmodes/gud.el (gud-query-cmdline, gud-common-init):
- Revert inadvertent changes made with last commit.
+2007-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-30 Reiner Steib <Reiner.Steib@gmx.de>
+ * man.el: Remove spurious * in docstrings.
+ Merge defvars and toplevel setq-defaults.
+ (Man-highlight-references0): Limit=nil rather than point-max.
+ (Man-mode-map): Move initialization into the declaration.
+ (Man-strip-page-headers, Man-unindent): Use dolist & inhibit-read-only.
+ (Man-view-header-file): Use expand-file-name rather than concat.
+ (Man-notify-when-ready, Man-bgproc-sentinel): Use with-current-buffer.
- * textmodes/flyspell.el (turn-on-flyspell, turn-off-flyspell):
- New functions.
+ * man.el (Man-next-section): Make sure we do not move backward.
- * textmodes/text-mode.el (text-mode-hook): Use turn-on-flyspell.
+2007-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-30 Carsten Dominik <dominik@science.uva.nl>
+ * files.el (auto-mode-alist): Use the purecopied text (duh!).
- * textmodes/org.el (org-agenda-highlight-todo): Make sure regexp
- only matches in the right place.
- (org-upcoming-deadline): New face.
- (org-agenda-get-deadlines): Use new face `org-upcoming-deadline'.
- (org-export-ascii-underline): Rename constant `org-ascii-underline'
- and make it an option.
- (org-export-ascii-bullets): New option.
- (org-export-as-html): Many changes to emit valid XHTML.
- (org-par-open): New variable.
- (org-open-par, org-close-par-maybe, org-close-li-maybe): New functions.
- (org-html-do-expand, org-section-number): Fix case in `replace-match'.
- (org-timeline): Pass `org-timeline-show-empty-dates' to
- `org-get-all-dates'. Interpret empty dates returned by
- `org-get-all-dates'.
- (org-get-all-dates): New argument EMPTY. Add dates without
- entries to the list, mark large ranges of empty dates.
- (org-point-in-group, org-context): New functions.
+2007-08-08 Glenn Morris <rgm@gnu.org>
-2006-05-30 Nick Roberts <nickrob@snap.net.nz>
+ * Replace `iff' in doc-strings and comments.
- * progmodes/gud.el (gud-stop-subjob): Make it work in all buffers.
+2007-08-08 Martin Rudalics <rudalics@gmx.at>
- * progmodes/gdb-ui.el: Move gdb-mouse-toggle-breakpoint-* to
- C-mouse-1. Move gdb-mouse-until to mouse-3, gdb-mouse-jump
- to C-mouse-3 (for 2 button mice).
- (gdb-send): Do the right thing for C-d.
+ * dired.el (dired-pop-to-buffer):
+ * mouse-drag.el (mouse-drag-should-do-col-scrolling):
+ * calendar/calendar.el (generate-calendar-window):
+ * progmodes/compile.el (compilation-set-window-height):
+ * textmodes/two-column.el (2C-two-columns, 2C-merge):
+ Use window-full-width-p instead of comparing frame-width and
+ window-width.
- * speedbar.el (speedbar-detach): Delete.
- (speedbar-easymenu-definition-trailer): Remove speedbar-detach as
- it breaks things.
- (speedbar-reconfigure-keymaps): Always add extra items to pop up menu.
+ * progmodes/compile.el (compilation-find-buffer): Remove extra
+ argument in call to compilation-buffer-internal-p.
-2006-05-30 Daniel Pfeiffer <occitan@esperanto.org>
+2007-08-07 Tom Tromey <tromey@redhat.com>
- * files.el (auto-mode-alist): Add makepp suffix and optional mk on
- Makeppfile.
+ * progmodes/tcl.el (tcl-indent-level, tcl-continued-indent-level):
+ Add safe-local-variable property.
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Add makepp diagnostic.
+2007-08-07 Chong Yidong <cyd@stupidchicken.com>
-2006-05-29 Richard Stallman <rms@gnu.org>
+ * image-mode.el (image-toggle-display): Use image-refresh.
- * window.el (fit-window-to-buffer): Doc fix.
+2007-08-07 Riccardo Murri <riccardo.murri@gmail.com>
- * help.el (temp-buffer-max-height): Doc fix.
+ * vc-bzr.el: Remove comments about vc-bzr.el being a modified
+ unofficial version.
+ (vc-bzr-command): Remove redundant setting of process-connection-type.
+ (vc-bzr-admin-checkout-format-file): Add autoload.
+ (vc-bzr-root-dir): Remove in favor of vc-bzr-root.
+ (vc-bzr-root): Switch to implementation of vc-bzr-root-dir.
+ (vc-bzr-registered): Compare dirstate format tag with known good
+ value, abort parsing if match fails. Warn user in docstring.
+ (vc-bzr-workfile-version): Case for different Bzr branch formats.
+ See bzrlib/branch.py in Bzr sources.
+ (vc-bzr-diff): First argument FILES may be a string rather than a list.
+ (vc-bzr-shell-command): Remove in favor of
+ vc-bzr-command-discarding-stderr.
+ (vc-bzr-command-discarding-stderr): New function.
- * subr.el (with-current-buffer): Doc fix.
+2007-08-06 Riccardo Murri <riccardo.murri@gmail.com>
-2006-05-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * vc-bzr.el (vc-bzr-registered): Gracefully handle missing "bzr"
+ program, and return nil.
+ (vc-bzr-state): Gracefully handle missing "bzr" program, and return nil.
+ (vc-bzr-state): Look for path names relative to the repository
+ root after status keyword.
+ (vc-bzr-file-name-relative): New function.
+ (vc-bzr-admin-dirname): Reinstate, as other vc-bzr-admin-... paths
+ depend on it.
+ (vc-bzr-admin-dirname, ...-checkout-format-file)
+ (...-branch-format-file, ...-revhistory): Paths to some Bzr internal
+ files that we now parse directly for speed.
+ (vc-bzr-root-dir): Use `vc-bzr-admin-checkout-format-file' as witness.
+ (vc-bzr-registered): Only parse vc-bzr-admin-dirstate file if it exists.
+ (vc-bzr-state): "bzr status" successful only if exitcode is 0.
+ (vc-bzr-root): Use `vc-bzr-shell-command'. Stderr may contain
+ Bzr warnings, so we must discard it.
+ (vc-bzr-workfile-version): Speedup counting lines from
+ `vc-bzr-admin-revhistory' file, but fallback to spawning "bzr revno"
+ if that file doesn't exist.
+ (vc-bzr-responsible-p): Use `vc-bzr-root' instead of
+ `vc-bzr-root-dir' for speed. Add `vc-bzr-admin-dirname' (not ".bzr"!)
+ to `vc-directory-exclusion-list'.
+ (vc-bzr-shell-command): New function.
- * term/x-win.el: Bind F10 to menu-bar-start if available.
+2007-08-06 Tom Tromey <tromey@redhat.com>
-2006-05-28 Dan Nicolaescu <dann@ics.uci.edu>
+ * diff-mode.el (diff-unified->context, diff-reverse-direction)
+ (diff-fixup-modifs): Typo in docstring.
- * term.el (term-if-xemacs, term-ifnot-xemacs): Delete, replace
- uses with a simple test.
- (term-set-escape-char, term-mode, term-check-kill-echo-list)
- (term-send-raw-string, term-send-raw, term-mouse-paste)
- (term-char-mode, term-line-mode, term-exec, term-sentinel)
- (term-handle-exit, term-read-input-ring)
- (term-previous-matching-input-string)
- (term-previous-matching-input-string-position)
- (term-previous-matching-input-from-input)
- (term-replace-by-expanded-history, term-send-input)
- (term-skip-prompt, term-bol, term-send-invisible)
- (term-kill-input, term-delchar-or-maybe-eof)
- (term-backward-matching-input, term-check-source)
- (term-proc-query, term-emulate-terminal)
- (term-handle-colors-array, term-process-pager, term-pager-line)
- (term-pager-bob, term-unwrap-line, term-word)
- (term-dynamic-complete-filename)
- (term-dynamic-complete-as-filename)
- (term-dynamic-simple-complete): Replace one arm ifs with whens or
- unlesses.
+2007-08-06 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emulation/tpu-edt.el (tpu-current-line): Use posn-at-point and
+ count-screen-lines.
+ (tpu-edt-off): Disable relevant pieces of advice.
- * files.el (hack-one-local-variable-eval-safep): Don't burp if used
- during bootstrapping.
+ * emulation/tpu-extras.el (tpu-before-save-hook): Rename from
+ tpu-write-file-hook. Activate it with add-hook on buffer-save-hook.
+ (newline, newline-and-indent, do-auto-fill): Use advice instead of
+ redefining the function.
+ (tpu-set-scroll-margins): Activate the pieces of advice.
- * emacs-lisp/ewoc.el (ewoc--current-dll): Remove.
- Basically undo the change of 2006-05-26: use extra arguments instead of
- dynamic scoping.
- (ewoc-locate): Remove unused var `footer'.
+2007-08-06 Martin Rudalics <rudalics@gmx.at>
-2006-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * help.el (resize-temp-buffer-window): Use window-full-width-p
+ instead of comparing frame-width and window-width.
- * emacs-lisp/ewoc.el (ewoc--insert-new-node): Use ewoc--refresh-node.
+2007-08-13 Stephen Leake <stephen_leake@stephe-leake.org>
- * emacs-lisp/autoload.el (no-update-autoloads): Declare.
- (generate-file-autoloads): Obey it. Return whether autoloads were
- added at point or not.
- (update-file-autoloads): Use this new return value.
- Remove redundant test for the presence of an autoload cookie.
+ * pcvs-parse.el (cvs-parse-table): Handle additional instance of
+ optional quotes around files in NEED-UPDATE . REMOVED case.
- * emacs-lisp/autoload.el (autoload-find-file): New fun.
- This one calls hack-local-variables.
- (generate-file-autoloads, update-file-autoloads): Use it.
+ * progmodes/ada-xref.el (ada-gnatls-args): Fix docstring.
+ (ada-treat-cmd-string): Improve error message.
+ (ada-do-file-completion): Call `ada-require-project-file', so
+ project variables are set properly.
+ (ada-prj-find-prj-file): Delete Emacs 20.2 support.
+ (ada-gnatfind-buffer-name): New constant.
+ (ada-find-any-references): Use new constant. Set buffer name
+ properly in compilation-start. Toggle read-only properly.
+ (ada-find-in-src-path): Fix spelling error in docstring.
- * textmodes/bibtex.el (bibtex-autokey-name-case-convert-function)
- (bibtex-sort-entry-class): Add safe-local-variable predicate.
- (bibtex-sort-entry-class-alist): Don't set the global value.
- (bibtex-init-sort-entry-class-alist): New fun.
- (bibtex-sort-buffer, bibtex-prepare-new-entry): Call it to compute
- bibtex-init-sort-entry-class-alist from the buffer-local value (if any)
- of bibtex-init-sort-entry-class.
+ * progmodes/vhdl-mode.el (vhdl-update-progress-info): Avoid divide
+ by zero error.
-2006-05-28 Richard Stallman <rms@gnu.org>
+2007-08-13 Stefan Monnier <monnier@iro.umontreal.ca>
- * subr.el (load-history-regexp): If FILE is relative, insist
- entire last name component must match it.
- (load-history-filename-element, load-history-regexp): Doc fixes.
+ * emacs-lisp/autoload.el (autoload-print-form): Use print-quoted.
-2006-05-29 Kim F. Storm <storm@cua.dk>
+2007-08-12 Richard Stallman <rms@gnu.org>
- * emacs-lisp/bindat.el (bindat-idx, bindat-raw): Rename dynamic vars
- `pos' and `raw-data' for clarity, as eval forms may access these.
+ * progmodes/sh-script.el (sh): Delete group `unix'.
-2006-05-28 Kim F. Storm <storm@cua.dk>
+ * progmodes/gud.el (gud): Change to group `processes'.
- * emacs-lisp/bindat.el (bindat--unpack-u8): Use aref also for strings.
+2007-08-11 Glenn Morris <rgm@gnu.org>
-2006-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * progmodes/compile.el (compilation-buffer-name): Don't check
+ compilation-arguments. It is superfluous, and the variable isn't
+ even set when this function is called.
- * progmodes/make-mode.el (makefile-browser-map)
- (makefile-mode-syntax-table): Move initialization inside declaration.
- (makefile-fill-paragraph): Use the default comment-filling code.
+2007-08-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2006-05-28 Chong Yidong <cyd@stupidchicken.com>
+ * term/mac-win.el (mac-ae-reopen-application): New function.
+ (mac-apple-event-map): Bind "reopen application" Apple event to it.
- * replace.el (query-replace-defaults): New variable.
- (query-replace-read-from): Use `query-replace-defaults' for
- default value, instead of history list.
- (query-replace-read-to): Update `query-replace-defaults'.
+2007-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-27 Chong Yidong <cyd@stupidchicken.com>
+ * textmodes/tex-mode.el (tex-font-lock-unfontify-region): Fix to
+ take tex-font-script-display into account.
+ (tex-font-script-display, tex-font-lock-suscript): Change from a cons
+ cell to a list of 2 elements to simplify the unfontify code.
- * msb.el (mouse-select-buffer): Minor fix to make popup menu work
- with no X toolkit.
+2007-08-08 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2006-05-28 Nick Roberts <nickrob@snap.net.nz>
+ * ps-print.el (ps-default-fg, ps-default-bg): Docstring fix.
+ (ps-begin-job): Use ps-default-fg and ps-default-bg only when
+ ps-print-color-p is neither nil nor black-white. Reported by Christian
+ Schlauer <cs-muelleimer-rubbish.bin@arcor.de>.
- * tumme.el (tumme-show-all-from-dir-max-files): Fix typo.
- (tumme-show-all-from-dir): Add autoload.
+2007-08-08 Andreas Schwab <schwab@suse.de>
-2006-05-27 Mathias Dahl <mathias.dahl@gmail.com>
+ * mail/mailabbrev.el (sendmail-pre-abbrev-expand-hook): Check for
+ self-insert-command, not self-insert.
- * tumme.el: Change a lot of `(if .. (progn ..)' to `(when ..)'.
- (tumme-remove-tag): Fix bug.
+2007-08-08 Glenn Morris <rgm@gnu.org>
-2006-05-27 Thien-Thi Nguyen <ttn@gnu.org>
+ * emacs-lisp/eldoc.el (eldoc-get-fnsym-args-string): Make second
+ argument optional, for backwards compatibility, and only highlight
+ args when present. Fix symbol name typo (doc/args).
- * emacs-lisp/ewoc.el (ewoc--create): No longer take HEADER and
- FOOTER args. Update unique caller.
- (ewoc-delete): Compute last node once before looping.
- (ewoc--node-branch): Merge into unique caller.
- (ewoc--node): Don't define constructor make-ewoc--node for this
- structure.
- (ewoc): Add member `hf-pp' to this structure.
- (ewoc--wrap): New func.
- (ewoc-create): Take additional arg NOSEP. If nil, wrap node and
- header/footer pretty-printers. Save header/footer pretty-printer.
- (ewoc-set-hf): Use ewoc's header/footer pretty-printer.
+ * help-mode.el (help-make-xrefs): Search for symbol constituents,
+ rather than just `-'.
- * pcvs.el (cvs-make-cvs-buffer): Specify NOSEP to `ewoc-create'.
+2007-08-07 Jay Belanger <jay.p.belanger@gmail.com>
-2006-05-27 Mathias Dahl <mathias.dahl@gmail.com>
+ * calc/calc-units.el (calc-convert-temperature):
+ Use `/' to create fractions.
- * dired.el (dired-mode-map): Change `tumme-tag-remove' to
- `tumme-delete-tag'. Rename `Remove Image Tag' to `Delete Image
- Tag'. Change "Compare directories..." to "Change Directories...".
- Move tumme commands to Operate, Regexp and Immediate menus.
- Change "Add Comment" to "Add Image Comment". Change "Add Image
- Tag" to "Add Image Tags".
+2007-08-07 Michael Albinus <michael.albinus@gmx.de>
- * tumme.el (tumme-delete-tag): Rename from `tumme-tag-remove'.
- (tumme-setup-dired-keybindings): Change `tumme-add-remove' to
- `tumme-delete-tag'.
+ * net/tramp.el (tramp-wrong-passwd-regexp): Make the regexp more
+ global matching.
+ (tramp-handle-shell-command): Handle OUTPUT-BUFFER and
+ ERROR-BUFFER more robust. Display output.
+ (tramp-file-name-handler): Add a connection property when we found
+ a foreign file name handler. This allows backends like ftp to
+ profit also from usr/host name completion based on connection
+ cache.
+ (tramp-send-command-and-read): Search for trash after the regexp
+ until eol only. In XEmacs, there is a problem with \n.
-2006-05-26 Luc Teirlinck <teirllm@auburn.edu>
+ * net/tramp-cache.el (top): Read persistent connection history
+ when cache is empty.
- * shell.el (shell-mode): Call shell-dirtrack-mode after
- list-buffers-directory is made a local variable, to avoid setting
- the default value.
+2007-08-07 Nic Ferrier <nferrier@tapsellferrier.co.uk> (tiny change)
-2006-05-26 Kevin Ryde <user42@zip.com.au>
+ * net/tramp.el (tramp-handle-process-file): Fix bug inserting
+ resulting output.
- * info.el (Info-index-next): Use where-is-internal to report
- actual binding of Info-index-next, rather than hard-coded `,'.
+2007-08-07 Sam Steingold <sds@gnu.org>
-2006-05-26 Eli Zaretskii <eliz@gnu.org>
+ * progmodes/compile.el (compilation-start): Pass nil as startfile
+ to comint-exec.
- * menu-bar.el (menu-bar-apropos-menu): Move "Find Key in Manual"
- and "Find Command in Manual" to here.
+2007-08-07 Chong Yidong <cyd@stupidchicken.com>
- * buff-menu.el (list-buffers-noselect): For Info buffers, use
- Info-current-file as the file name.
+ * longlines.el (longlines-decoded): New variable.
+ (longlines-mode): Avoid encoding or decoding the buffer twice.
-2006-05-26 Jonathan Yavner <jyavner@member.fsf.org>
+2007-08-07 Martin Rudalics <rudalics@gmx.at>
- * ses.el (defadvice undo-more): Delete this defadvice. The undo
- overrides will now be done a different way.
- (ses-set-parameter): Reapply this function for undo.
- (ses-set-header-row): Reconstruct header row during undo.
- (ses-widen): New function.
- (ses-goto-data, ses-reconstruct-all): Use new function.
- (ses-command-hook): Widen buffer during undo, before unupdating
- the cells.
- (ses-insert-row, ses-delete-row): Widen buffer during undo.
- (ses-load, ses-header-row): Permit empty (zero-row) spreadsheets.
- (ses-read-cell): Avoid stupid warning for RET RET on a cell whose
- formula hasn't been executed yet.
+ * format.el (format-insert-file): Make sure that at most one undo
+ entry is recorded for the insertion. Inhibit point-motion and
+ modification hooks around call to insert-file-contents.
-2006-05-26 Reiner Steib <Reiner.Steib@gmx.de>
+2007-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
- * comint.el (comint-kill-whole-line): Rename arg to count.
- Fix doc string.
+ * vc.el (vc-annotate): Select temp-buffer before running vc-exec-after.
+ Select the buffer's window before moving point.
-2006-05-26 Chong Yidong <cyd@stupidchicken.com>
+2007-08-07 Richard Stallman <rms@gnu.org>
- * files.el (backup-buffer-copy): Remove deleted MUSTBENEW argument
- to copy-file.
+ * term.el (term): Remove parent group `unix'.
-2006-05-26 Reiner Steib <Reiner.Steib@gmx.de>
+ * simple.el (default-indent-new-line): New function.
+ It calls comment-line-break-function if there are comments.
+ (do-auto-fill): Use that.
- * simple.el (toggle-truncate-lines): Make arg optional for
- backward compatibility.
+2007-08-07 Sean O'Rourke <sorourke@cs.ucsd.edu>
-2006-05-26 Thien-Thi Nguyen <ttn@gnu.org>
+ * complete.el (PC-lisp-complete-symbol): Complete symbol around point.
+ (PC-do-completion): Add "acronym completion" for symbols and
+ filenames, so e.g. "mvbl" expands to "make-variable-buffer-local".
- * emacs-lisp/ewoc.el (ewoc--current-dll): New var.
- (ewoc--node-next, ewoc--node-prev, ewoc--node-nth): Don't take
- DLL arg. Instead, use ewoc--current-dll. Update all callers.
- (ewoc--set-buffer-bind-dll-let*): Bind ewoc--current-dll, not `dll'.
- (ewoc--adjust): Use ewoc--current-dll.
- (ewoc-next, ewoc-prev, ewoc-nth): Bind ewoc--current-dll.
+2007-08-06 Sam Steingold <sds@gnu.org>
-2006-05-26 Carsten Dominik <dominik@science.uva.nl>
+ * mouse.el (mouse-buffer-menu): Pass mode-name through
+ format-mode-line because it may be a list,
+ e.g., (sgml-xml-mode "XML" "SGML"), and not a string.
- * textmodes/org.el (org-next-item, org-previous-item): Emit more
- compact error message.
- (org-tags-view): Refresh category table in each file.
- (org-table-justify-field-maybe): Remove superfluous arguments to
- `format'.
- (org-export-as-html): Insert "<p>" before postamble.
- (org-paste-subtree, org-kill-is-subtree-p): Check for empty kill ring.
+2007-08-06 Vinicius Jose Latorre <viniciusig@ig.com.br>
-2006-05-26 Kenichi Handa <handa@m17n.org>
+ * printing.el (pr-update-menus): Docstring fix.
- * textmodes/po.el (po-find-charset): Pay attention to the case
- FILENAME is a cons (NAME . BUFFER).
- (po-find-file-coding-system-guts): Likewise.
+2007-08-06 Jason Rumney <jasonr@gnu.org>
- * arc-mode.el (archive-set-buffer-as-visiting-file):
- Call find-operation-coding-system with (FILENAME . BUFFER).
+ * menu-bar.el (menu-bar-vc-filter): Use vc-call-backend.
- * tar-mode.el (tar-extract): Call find-operation-coding-system
- with (FILENAME . BUFFER).
+ * vc-hooks.el (vc-call): Add doc string.
- * international/mule.el (decode-coding-inserted-region):
- Call find-operation-coding-system with (FILENAME . BUFFER).
+2007-08-06 Michael Albinus <michael.albinus@gmx.de>
-2006-05-25 Chong Yidong <cyd@stupidchicken.com>
+ * net/ange-ftp.el (ange-ftp-hook-function): Catch also errors in
+ process-filter.
- * image-mode.el (image-toggle-display): Use buffer contents to
- generate image for a remote file.
+2007-08-06 Kenichi Handa <handa@m17n.org>
-2006-05-25 Juri Linkov <juri@jurta.org>
+ * international/quail.el: Wrap (require 'help-mode) by
+ eval-when-compile.
+ (quail-help-init): New function.
+ (quail-help): Call quail-help-init.
+ (quail-store-decode-map-key): Change it to a function.
- * replace.el (query-replace-read-from, query-replace-read-to):
- Remove 8th arg KEEP-ALL in read-from-minibuffer.
+2007-08-05 Jason Rumney <jasonr@gnu.org>
-2006-05-25 Rajesh Vaidheeswarran <rv@gnu.org>
+ * vc.el (vc-rollback): Add norevert argument back.
+ (vc-revert-buffer): Add back as obsolete alias.
- * whitespace.el (whitespace-cleanup): Change to cleanup
- region if one is active.
- * whitespace.el (whitespace-cleanup-internal): New internal method.
+2007-08-05 Peter Povinec <ppovinec@yahoo.com> (tiny change)
-2006-05-25 Mathias Dahl <mathias.dahl@gmail.com>
+ * term.el: Honor term-default-fg-color and term-default-bg-color
+ settings when modifying term-current-face.
+ (term-default-fg-color, term-default-bg-color): Initialize from
+ default term-current-face.
+ (term-mode, term-reset-terminal): Set term-current-face with
+ term-default-fg-color and term-default-bg-color.
+ (term-handle-colors-array): term-current-face has term-default-fg-color
+ and term-default-bg-color after reset escape sequence.
+ (term-handle-colors-array): Set term-current-color with
+ term-default-fg/bg-color instead of ansi-term-color-vector when the
+ index (term-ansi-current-color or term-ansi-current-bg-color) is zero.
- * dired.el (dired-mode-map): Add help-echo strings to tumme
- commands. Bind `tumme-dired-display-image' to C-t i.
+2007-08-05 Jay Belanger <jay.p.belanger@gmail.com>
- * tumme.el (tumme-display-image): Change documentation string slightly.
- (tumme-dired-display-image): Add call to `display-buffer'.
+ * calc/calc-nlfit.el (math-nlfit-curve): Remove unnecessary variables.
+ (math-nlfit-givens): Let bind free variables.
-2006-05-25 Thien-Thi Nguyen <ttn@gnu.org>
+2007-08-05 Vinicius Jose Latorre <viniciusig@ig.com.br>
- * emacs-lisp/bindat.el (bindat-unpack, bindat-pack):
- Signal error if RAW-DATA is a multibyte string.
+ * printing.el: Require lpr and ps-print when loading printing package.
+ Reported by Glenn Morris <rgm@gnu.org>.
-2006-05-24 Richard Stallman <rms@gnu.org>
+2007-08-05 Michael Albinus <michael.albinus@gmx.de>
- * subr.el (with-local-quit): When handling `quit' signal,
- make a chance for quit-flag to cause a quit.
+ * files.el (set-auto-mode): Handle also remote files wrt
+ `auto-mode-alist'.
- * emacs-lisp/advice.el (ad-enable-advice, ad-activate)
- (ad-disable-advice): Add autoloads.
+2007-08-04 Jay Belanger <jay.p.belanger@gmail.com>
- * subr.el (read-passwd): Copy PROMPT before changing its properties.
+ * calc/calcalg3.el (calc-curve-fit): Add support for nonlinear
+ curves and plotting.
-2006-05-25 Mathias Dahl <mathias.dahl@gmail.com>
+ * calc/calc-nlfit.el: New file.
- * dired.el (dired-mode-map): Change menu items for tumme as per
- suggestions in emacs-devel.
+2007-08-04 Glenn Morris <rgm@gnu.org>
-2006-05-25 Nick Roberts <nickrob@snap.net.nz>
+ * autorevert.el (auto-revert-tail-mode): auto-revert-tail-pos is
+ zero, not nil, when the library is first loaded. Check for a file
+ that has been modified on disk.
- * dired.el (dired-mode-map): Fix breakage.
+ * progmodes/cperl-mode.el (cperl-compilation-error-regexp-alist):
+ Remove duplicate defvar preventing initialization.
+ (cperl-mode): Fix compilation-error-regexp-alist-alist setting.
-2006-05-25 Mathias Dahl <mathias.dahl@gmail.com>
+2007-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
- * tumme.el (tumme-display-dired-image): Rename to...
- (tumme-dired-display-image): ...this.
- (tumme-track-movement): Change default value to t.
- (tumme-display-thumbs): Add new optional parameter DO-NOT-POP,
- used from `tumme-next-line-and-display' and similar commands.
+ * diff-mode.el (diff-font-lock-keywords): Fix up false positives.
+ (diff-beginning-of-file): Adjust to the fact that diff-file-header-re
+ may match up to 4 lines.
+ (diff-beginning-of-file-and-junk): Rewrite.
- * dired.el (dired-mode-map): Add Thumbnail submenu under the
- Immediate menu. Add some tumme commands there.
+2007-08-03 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2006-05-24 Luc Teirlinck <teirllm@auburn.edu>
+ * printing.el: Evaluate require only during compilation.
+ (pr-version): New version 6.9.1.
+ (deactivate-mark): Replace (defvar VAR nil) by (defvar VAR).
+ (pr-global-menubar): Fix code.
- * loadup.el ("jka-cmpr-hook"): Load it before it is needed.
+2007-08-03 Dan Nicolaescu <dann@ics.uci.edu>
-2006-05-24 Chong Yidong <cyd@mit.edu>
+ * term.el (term-erase-in-display): Fix case when point is not at
+ the beginning of the line.
- * menu-bar.el, international/mule-cmds.el: Remove tooltips for
- menu entries that open submenus.
+2007-08-03 Jay Belanger <jay.p.belanger@gmail.com>
-2006-05-24 Alan Mackenzie <acm@muc.de>
+ * calc/calc-ext.el (math-get-value, math-get-sdev)
+ (math-contains-sdev): New functions.
- * startup.el (command-line): For names of preloaded files, don't
- append ".elc" (now done in Fload), and call file-truename on the
- lisp directory.
+ * calc/calc-graph.el (calc-graph-format-data)
+ (calc-graph-add-curve): Check for error forms.
+ (calc-graph-set-styles): Add option for error forms.
- * subr.el (eval-after-load): Fix the doc-string. Allow FILE to
- match ANY loaded file with the right name, not just those in
- load-path. Put a regexp matching the file name into
- after-load-alist, rather than the name itself.
+2007-08-03 Miles Bader <miles@gnu.org>
- * subr.el (load-history-regexp, load-history-filename-element)
- (do-after-load-evaluation): New functions.
+ * vc-hooks.el (vc-handled-backends): Change capitalization of VC
+ backend names for new backends to `Git', `Hg', and `Bzr'.
+ * vc-hg.el (vc-hg-dired-state-info): Use `Hg' as VC backend name,
+ not `HG'.
+ * vc-git.el (vc-git-dired-state-info): Use `Git' as VC backend
+ name, not `GIT'.
+ * vc-bzr.el (vc-bzr-dir-state, vc-bzr-dired-state-info)
+ (vc-bzr-unload-hook): Use `Bzr' as VC backend name, not `BZR'.
- * international/mule.el (load-with-code-conversion): Do the
- eval-after-load stuff by calling do-after-load-evaluation.
+2007-08-03 Richard Stallman <rms@gnu.org>
-2006-05-25 Nick Roberts <nickrob@snap.net.nz>
+ * mail/rmailsum.el (rmail-make-summary-line): Find end of msg number
+ to update deleted flag.
- * progmodes/gud.el (gud-sentinel): Condition on GUD buffer if it
- has not been killed.
+ * cus-edit.el (customize-apropos, customize-apropos-options)
+ (customize-apropos-faces, customize-apropos-groups): Improve prompt.
-2006-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * menu-bar.el (menu-bar-help-menu): Add "About GNU" menu item.
- * term/mac-win.el: Set idle timer to clean up expired Apple events.
- (mac-ae-get-url): Redispatch Apple event on unknown scheme.
- (mac-dispatch-apple-event): Resume Apple event if it is suspended.
- Optionally set error message in reply.
+ * startup.el (fancy-splash-head, startup-echo-area-message):
+ Change message text.
-2006-05-24 Carsten Dominik <dominik@science.uva.nl>
+ * emulation/tpu-edt.el (next-line-internal): Setting deleted.
+ All callers use line-move.
- * textmodes/org.el (org-open-at-point): Use renamed variable
- `org-confirm-shell-link-function'.
- (org-confirm-shell-link-function): Rename from
- `org-confirm-shell-links'.
- (org-export-directory): New function.
- (org-export-as-ascii, org-export-as-html, org-export-as-xoxo)
- (org-export-icalendar): Use `org-export-directory'.
- (org-indent-item): Keep cursor position.
- (org-link-file-path-type): New option.
- (org-export-as-html): Fix bug with plain lists starting in
- column 0.
- (org-export-as-html): Remove deadline formatting, this happens
- now already in `org-html-handle-time-stamps'.
- (org-export-html-style): Deadline class removed.
- (org-insert-labeled-timestamps-at-point): New option.
- (org-cycle, org-occur, org-scan-tags): Use `org-overview' instead
- of `hide-sublevels 1', in case the first headline is not level 1.
- (org-overview, org-content): New fuction.
- (org-cycle-global-status, org-cycle-subtree-status): Make these
- variables buffer-local.
- (org-global-cycle): New command.
- (org-shifttab): Use `org-global-cycle'.
- (org-insert-heading, org-insert-item): Go to end of new
- headline/item after creating it.
- (org-export-visible): Rename from `org-export-copy-visible'.
- Now creates a temporary org-file and applies an exporting command
- to it.
- (org-table-eval-formula): Support for lisp forms.
- (org-agenda-todo-ignore-scheduled): New option.
- (org-agenda-get-todos): Use new option
- `org-agenda-todo-ignore-scheduled'.
- (org-export-html-inline-images): New value `maybe'.
- (org-export-as-html): Inlining of images dependent on link description.
- (org-archive-subtree): Check for end-of-buffer before trying
- `kill-line'.
- (org-agenda-follow-mode): New option.
- (org-export-with-tags, org-export-with-timestamps): New options.
- (org-html-handle-time-stamps): New function.
- (org-keyword-time-regexp): New variable.
- (org-agenda-get-todos): Use `org-agenda-todo-list-sublevels'.
- (org-agenda-todo-list-sublevels): New option.
- (org-html-level-start): When TITLE is nil, just close all levels.
- (org-parse-key-lines, org-parse-export-options): Remove functions,
- replaced by `org-infile-export-plist'.
- (org-combine-plists, org-infile-export-plist)
- (org-default-export-plist): New functions.
- (org-export-html-preamble, org-export-html-postamble)
- (org-export-html-auto-preamble, org-export-html-auto-postamble):
- New variables.
- (org-export-publishing-directory): New option.
- (org-export-as-html, org-export-as-ascii): Use the new property
- lists for settings.
- (org-export-copy-visible, org-export-as-xoxo):
- Respect `org-export-publishing-directory'.
- (org-link-search, org-store-link, org-file-apps): Support for
- links to BibTeX database entries..
- (org-get-current-options, org-set-regexps-and-options):
- Implement logging as a startup option.
- (org-store-link): Make sure context string is never empty
- (org-insert-link): Use relative path when possible.
- (org-at-item-checklet-p): New function.
- (org-shifttab, org-shiftmetaleft, org-shiftmetaright)
- (org-shiftmetaup, org-shiftmetadown, org-metaleft)
- (org-metaright, org-metaup, org-metadown, org-shiftup)
- (org-shiftdown, org-shiftright, org-shiftleft)
- (org-ctrl-c-ctrl-c, org-cycle, org-return, org-meta-return):
- Dispatch using `call-interactively'.
- (org-call-with-arg): New defsubst.
- (org-tag-alist, org-use-fast-tag-selection): New options.
- (org-complete): Use `org-tag-alist'.
- (org-fast-tag-insert, org-fast-tag-selection): New functions.
- (org-next-item, org-previous-item): New commands.
- (org-beginning-of-item, org-end-of-item): Add (interactive) to
- make command.
- (org-shiftup, org-shiftdown): Accommodate the item-navigation commands.
+ * progmodes/compile.el (compilation-find-buffer): Return current
+ buffer immediately if suitable.
+ (compile, compilation-buffer-name, compilation-start): Doc fixes.
-2006-05-23 Thien-Thi Nguyen <ttn@gnu.org>
+2007-08-03 Daiki Ueno <ueno@unixuser.org>
- * emacs-lisp/ewoc.el (ewoc-delete): New function.
- (ewoc-filter): Use `ewoc-delete'.
+ * faces.el (face-normalize-spec): New function.
+ (frame-set-background-mode): Normalize face-spec before calling
+ face-spec-match-p.
- * emacs-lisp/bindat.el (bindat-pack): Doc fix.
+2007-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-22 Stefan Monnier <monnier@iro.umontreal.ca>
+ * server.el (server-window): Add switch-to-buffer-other-frame option.
- * textmodes/bibtex.el (bibtex-format-entry, bibtex-clean-entry):
- Signal more user-friendly error messages.
+2007-08-03 Glenn Morris <rgm@gnu.org>
- * complete.el (PC-do-completion): Undo the addition of implicit
- wildcards if they did not lead to finding any match.
- (read-file-name-internal): Don't add the final > if the completion is
- not finished.
+ * cus-edit.el (customize-apropos): Make the error message indicate
+ what kind of thing the user was trying to customize.
-2006-05-22 Reiner Steib <Reiner.Steib@gmx.de>
+ * net/telnet.el (telnet-mode): Set comint-use-prompt-regexp to t.
- * textmodes/bibtex.el (bibtex-maintain-sorted-entries):
- Quote safe-local-variable predicate.
+ * progmodes/fortran.el (fortran-font-lock-syntactic-keywords):
+ Fix off-by-one error in previous change.
-2006-05-22 Thien-Thi Nguyen <ttn@gnu.org>
+2007-08-03 Drew Adams <drew.adams@oracle.com>
- * emacs-lisp/ewoc.el (ewoc-set-data): New function.
+ * emacs-lisp/pp.el (pp-eval-expression): Add progress message.
+ Make buffer writable.
-2006-05-21 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+2007-08-01 Jay Belanger <jay.p.belanger@gmail.com>
- * textmodes/bibtex.el (bibtex-maintain-sorted-entries): Mark as safe.
+ * calc/calc-math.el (math-sqrt-raw, math-sin-raw-2)
+ (math-cos-raw-2, math-arctan-raw, math-ln-raw):
+ Use native Emacs functions, when appropriate.
- * progmodes/make-mode.el (makefile-special-targets-list)
- (makefile-macro-table, makefile-target-table): Mark as risky.
- (makefile-query-one-target-method): Make this the alias for the
- following variable.
- (makefile-query-one-target-method-function): Make this the real name.
+2007-08-01 Dan Nicolaescu <dann@ics.uci.edu>
+ Stefan Monnier <monnier@iro.umontreal.ca>
- * textmodes/artist.el (artist-text-renderer): Make this the alias
- for the following variable.
- (artist-text-renderer-function): Make this the real name.
+ * vc.el: Document new VC operation `extra-menu'.
- * textmodes/flyspell.el (flyspell-generic-check-word-p): Make this
- the alias for the following variable.
- (flyspell-generic-check-word-predicate): Make this the real name.
+ * vc-hooks.el (vc-default-extra-menu): New function.
- * textmodes/ispell.el (ispell-format-word): Make this the alias
- for the following variable.
- (ispell-format-word-function): Make this the real name.
- (ispell-message-text-end): Mark as risky.
+ * menu-bar.el (menu-bar-vc-filter): New function.
+ (menu-bar-tools-menu): Use it as a filter.
- * skeleton.el (skeleton-transformation, skeleton-filter)
- (skeleton-pair-filter): Make these the aliases for the following
- variables.
- (skeleton-transformation-function, skeleton-filter-function)
- (skeleton-pair-filter-function): Make these the real names.
+2007-08-01 Eric Hanchrow <offby1@blarg.net> (tiny change)
- * progmodes/sh-script.el (sh-mode): Use skeleton-filter-function
- and skeleton-pair-filter-function.
+ * ibuf-ext.el (ibuffer-mark-old-buffers): Docstring fix.
- * textmodes/sgml-mode.el (sgml-transformation): Make this the
- alias for the following variable.
- (sgml-transformation-function): Make this the real name.
- (sgml-tag-alist): Mark as risky.
+2007-08-01 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/fortran.el: Remove leading `*' from all defcustom doc
+ strings.
+ (fortran-tab-mode-default): Remove needless autoload.
+ (fortran-tab-mode-string): Add help-echo and mouse properties, and
+ mark as risky.
+ (fortran-line-length): New buffer-local variable, safe if integer.
+ (fortran-if-start-re, fortran-end-prog-re1, fortran-end-prog-re):
+ Change from variables to constants.
+ (fortran-font-lock-syntactic-keywords): Delete as a variable,
+ replace with a new function definition.
+ (fortran-mode): Use fortran-line-length, and
+ fortran-font-lock-syntactic-keywords as a function. Add a
+ hack-local-variables-hook function.
+ (fortran-line-length, fortran-hack-local-variables): New functions.
+ (fortran-window-create, fortran-strip-sequence-nos): Doc fix.
+ Use fortran-line-length rather than 72.
+ (fortran-window-create-momentarily): Doc fix.
+
+2007-07-31 Drew Adams <drew.adams@oracle.com> (tiny change)
-2006-05-21 Richard Stallman <rms@gnu.org>
+ * cus-edit.el (custom-group-value-create, custom-goto-parent):
+ Fix parent groups link.
- * simple.el (kill-region): Interactively, pass point, then mark.
+2007-07-31 Paul Pogonyshev <pogonyshev@gmx.net>
-2006-05-22 Thien-Thi Nguyen <ttn@gnu.org>
+ * progmodes/python.el (python-current-defun): Adjust to never fall
+ into infinite loop.
- * emacs-lisp/ewoc.el (ewoc-create): Add autoload cookie.
+2007-07-31 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-21 Romain Francoise <romain@orebokech.com>
+ * pcvs.el (cvs-vc-command-advice): Handle the new fileset case.
- * dired-x.el (dired-mode-map): Don't bind M-g.
+2007-07-29 Kimit Yada <kimitto@gmail.com> (tiny change)
-2006-05-20 Richard Stallman <rms@gnu.org>
+ * emacs-lisp/copyright.el (copyright-update-year, copyright-update)
+ (copyright-fix-years, copyright): Correctly handle the case where
+ copyright-limit is nil.
- * dired.el (dired-mode-map): Put dired-goto-file on j, not M-g.
- (dired-goto-file): Doc fix.
+2007-07-28 Konstantin Novitsky <knovitsk@Bear.com> (tiny change)
-2006-05-21 Kim F. Storm <storm@cua.dk>
+ * progmodes/python.el (run-python): Fix path separator under w32.
- * emulation/cua-base.el: Mention customizing cua-mode as alternative
- way to enable built-in cua-mode if user loads older CUA-mode package.
+2007-07-30 Richard Stallman <rms@gnu.org>
- * ido.el (ido-read-file-name): Bind ido-show-dot-for-dired to nil
- if default-filename is specified.
+ * emacs-lisp/lisp-mode.el (emacs-lisp-mode-syntax-table):
+ Treat non-break space as whitespace in Lisp.
-2006-05-20 Eli Zaretskii <eliz@gnu.org>
+2007-07-30 Stefan Monnier <monnier@iro.umontreal.ca>
- * menu-bar.el (menu-bar-manuals-menu) <info-apropos>: New menu item.
+ * vc.el (vc-dired-hook): Use inhibit-read-only.
- * info.el (info-apropos): Make sure current-file and current-node
- have non-nil values. Speed up by using add-to-list instead of
- manual consing.
+ * progmodes/compile.el (compilation-forget-errors):
+ Reset compilation-auto-jump-to-next.
-2006-05-20 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+2007-07-30 Michael Olson <mwolson@gnu.org>
- * progmodes/make-mode.el (makefile-mode): Doc fix.
+ * cus-edit.el (custom-group-save): Fix void function definition
+ error. Thanks to Zhang Wei for the report.
-2006-05-20 Eli Zaretskii <eliz@gnu.org>
+ * ps-print.el: Check in trivial changes to the autoloads section
+ caused by the build process. These autoloads really ought to be
+ placed in a separate file, methinks.
- * dired-aux.el (dired-do-shell-command): Doc fix.
+2007-07-29 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-20 Kevin Ryde <user42@zip.com.au>
+ * calendar/calendar.el (calendar-mode): Make sure
+ displayed-(month|year) are set.
+ (calendar-basic-setup): Display buffer before adjusting window sizes.
+ (generate-calendar-window): Use inhibit-read-only. Simplify.
+ Generate buffer and set displayed-month and displayed-year before
+ calling update-calendar-mode-line.
- * info-xref.el (info-xref-check-all-custom): Skip :tag part of
- ``(custom-manual :tag "Foo" "(foo)Node")''.
+2007-07-29 Michael Albinus <michael.albinus@gmx.de>
-2006-05-20 Karl Chen <quarl@cs.berkeley.edu>
+ * net/tramp.el:
+ * net/tramp-uu.el:
+ * net/trampver.el: Use utf-8 encoding with coding cookie.
- * progmodes/cc-vars.el (c-backslash-column): Mark as safe if its
- value is an integer.
+ * net/tramp-cache.el:
+ * net/tramp-fish.el:
+ * net/tramp-ftp.el:
+ * net/tramp-gw.el:
+ * net/tramp-smb.el: Remove coding cookie.
-2006-05-20 Eli Zaretskii <eliz@gnu.org>
+ * net/tramp.el (tramp-handle-verify-visited-file-modtime):
+ Flush buffer file-name's file property.
+ (tramp-handle-file-remote-p): The first parameter is FILENAME.
- * mail/rmail.el (rmail-mime-charset-pattern): Add "?:" before
- "format".
- (rmail-convert-to-babyl-format): Undo the change from 2006-04-19.
+ * net/trampver.el: Update release number.
-2006-05-20 Martin Rudalics <rudalics@gmx.at>
+2007-07-29 Juri Linkov <juri@jurta.org>
- * progmodes/hideif.el (show-ifdef-block): Fix bug where parts of
- a hidden block remained hidden if `hide-ifdef-lines' is non-nil.
+ * dired.el (dired-mode-map): Bind C-x C-q to dired-toggle-read-only.
+ Filter out menu item "Edit File Names" `wdired-change-to-wdired-mode'
+ when major-mode is not dired-mode.
+ (dired-toggle-read-only): New function.
+ (dired-recursive-deletes): Remove obsolete comments about old
+ default value.
+ (dired-do-flagged-delete, dired-do-delete): Refill docstring.
-2006-05-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * wdired.el (wdired-exit): New function.
+ (wdired-mode-map): Bind C-x C-q to wdired-exit.
- * progmodes/gud.el (gdb-script-font-lock-keywords): Use a stricter
- regexp for keywords.
+2007-07-28 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-05-20 Masayuki FUJII <boochang@m4.kcn.ne.jp> (tiny change)
+ * cus-edit.el (customize-read-group): New fun.
+ (customize-group-other-window, customize-face-other-window):
+ Prompt before delegating to customize-(group|face).
+ Bind pop-up-windows rather than use the other-window argument.
+ (customize-group, customize-face): Prompt from the interactive spec.
+ Remove args `prompt-for-group' and `other-window'.
- * dnd.el (dnd-get-local-file-name): Specify LITERAL in
- replace-regexp-in-string.
+ * emacs-lisp/advice.el (ad-interactive-form): Re-introduce.
+ (ad-body-forms, ad-advised-interactive-form): Revert this part of
+ last change.
- * term/w32-win.el (w32-drag-n-drop): Substitute '/' for '\',
- encode, and escape file name on conversion to URL.
+2007-07-28 Masatake YAMATO <jet@gyve.org>
-2006-05-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * vc.el (vc-dired-mode): Add a menu for VC related operation.
+ Use backend name as the menu label. Suggested by David Kastrup.
- * dnd.el (dnd-handle-one-url): Change 3rd arg ARG to URL.
- Don't unescape URL.
- (dnd-get-local-file-name): Unescape URL on conversion to file name.
+2007-07-28 Alan Mackenzie <acm@muc.de>
- * x-dnd.el (x-dnd-handle-file-name): Encode and escape file names
- on conversion to URLs.
+ Fix problem with modes derived from CC Mode:
+ * progmodes/cc-mode.el (c-make-emacs-variables-local): Move this
+ macro to cc-langs.
+ (c-init-language-vars-for): Remove call to above macro.
+ * progmodes/cc-langs.el (c-make-emacs-variables-local): Macro has
+ been moved to here.
+ (c-make-init-lang-vars-fun): Call c-make-emacs-variables-local.
- * net/browse-url.el (browse-url-file-url): Encode file name on
- conversion to URL.
+2007-07-28 Eli Zaretskii <eliz@gnu.org>
- * term/mac-win.el (mac-ae-open-documents): Escape file name on
- conversion to URL.
+ * net/trampver.el: Fix the `coding' cookie.
-2006-05-19 Eli Zaretskii <eliz@gnu.org>
+2007-07-28 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/cc-styles.el (c-style-alist): Doc fix.
+ * vc-git.el (vc-git-print-log): Support both the old single file
+ interface and the new one.
-2006-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-07-28 Nick Roberts <nickrob@snap.net.nz>
- * term/mac-win.el (mac-bytes-to-digits): Remove function.
- (mac-handle-toolbar-switch-mode): Use coercion instead of it.
+ * bindings.el (mode-line-remote): Use updated %@ construct.
-2006-05-19 Glenn Morris <rgm@gnu.org>
+2007-07-27 Stefan Monnier <monnier@iro.umontreal.ca>
- * calendar/diary-lib.el (diary-bahai-date)
+ * calendar/cal-bahai.el (calendar-bahai-month-name-array)
+ (calendar-bahai-epoch, calendar-bahai-leap-year-p)
+ (calendar-bahai-leap-base, calendar-bahai-prompt-for-date)
+ (diary-list-bahai-entries, diary-bahai-mark-entries)
+ (calendar-bahai-mark-date-pattern, diary-insert-bahai-entry)
+ (diary-bahai-insert-monthly-entry, diary-bahai-insert-yearly-entry):
+ New names to clean up namespace.
(list-bahai-diary-entries, mark-bahai-diary-entries)
- (mark-bahai-calendar-date-pattern): Not interactive.
- (add-to-diary-list): New optional arg LITERAL. Doc fix.
- (diary-entries-list): Change format of 4th element in each entry.
- (diary-list-entries): Use add-to-diary-list.
- (diary-goto-entry): Handle the case where the buffer visiting the
- diary has been killed.
- (fancy-diary-display): Add 'locator to button rather than 'marker.
- Only generate temp-face when there are marks to apply.
- (list-sexp-diary-entries): Pass literal to add-to-diary-list.
- (diary-fancy-date-pattern): New variable.
- (diary-time-regexp): Doc fix.
- (diary-anniversary, diary-time): New faces.
- (fancy-diary-font-lock-keywords): Use diary-fancy-date-pattern and
- diary-time-regexp. Add font-lock-multiline property where needed.
- Use new faces diary-anniversary and diary-time.
- (diary-fancy-font-lock-fontify-region-function): New function, to
- handle multiline font-lock pattern in fancy diary.
- (fancy-diary-display-mode): Set font-lock-fontify-region-function.
- (diary-font-lock-keywords): Tweak time regexp. Use new face
- diary-time.
-
-2006-05-19 Alexander Shopov <ash@contact.bg> (tiny change)
-
- * international/code-pages.el (mik): Table corrected.
-
-2006-05-18 Kim F. Storm <storm@cua.dk>
-
- * progmodes/grep.el (grep-find): Don't check grep-find-command
- before running command (breaks non-interactive usage).
-
-2006-05-18 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc--adjust): New func.
- (ewoc--insert-new-node): Don't insert trailing newline.
- Instead, adjust successor nodes's start markers.
- (ewoc--refresh-node): Delete all text from current node's start
- marker to the next one's; adjust successor nodes's start markers.
- (ewoc--create): Doc fixes.
- (ewoc--refresh): Don't insert newline.
- (ewoc--set-hf): Use `ewoc--set-buffer-bind-dll-let*'.
- * pcvs.el (cvs-make-cvs-buffer):
- Specify extra newline for ewoc's header and footer.
- (cvs-update-header): Update initial header recognition.
- Append newline to final header and footer values.
- * pcvs-info.el (cvs-fileinfo-pp): Insert trailing newline.
-
-2006-05-17 Richard Stallman <rms@gnu.org>
-
- * files.el (file-name-extension): Doc fix.
-
-2006-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * shell.el (shell-dirtrack-mode): Make it into a proper minor mode, so
- we can explicitly enable/disable rather than toggle.
- (shell-mode): Use it.
- (shell-cd): Don't try to reproduce what `cd' does.
-
-2006-05-17 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-read-internal): Use only nondirectory part of
- default item.
-
-2006-05-17 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc-data): Add docstring.
- (ewoc-nth): Doc fix.
-
- (ewoc-map, ewoc-invalidate): Compute PP before looping.
-
-2006-05-16 Eli Zaretskii <eliz@gnu.org>
-
- * international/mule.el (auto-coding-alist): Add .lha to files
- read with no-conversion.
-
- * files.el (auto-mode-alist): Add .lha files to archive file
- extensions.
-
- * arc-mode.el (archive-arc-summarize, archive-lzh-summarize):
- Convert csize to integer when computing offsets within the
- compressed archive file.
-
-2006-05-16 Kim F. Storm <storm@cua.dk>
-
- * subr.el (add-to-history): Add KEEP-ALL arg and align functionality
- with read-from-minibuffer.
-
-2006-05-16 Reiner Steib <Reiner.Steib@gmx.de>
-
- * emacs-lisp/bytecomp.el (byte-compile-warnings-safe-p): New function.
- (byte-compile-warnings): Fix safe-local-variable property.
-
-2006-05-16 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-show-bodies, allout-old-style-prefixes)
- (allout-stylish-prefixes, allout-numbered-bullet)
- (allout-file-xref-bullet, allout-use-hanging-indents): Use simple
- predicates to qualify `safe-local-variable' property, when
- available, else use equivalent lambda.
- (allout-current-topic-collapsed-p): Do the right thing regarding
- trailing blank lines.
-
-2006-05-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * server.el (server-start): Only create a directory if needed.
- (server-edit, server-unload-hook): server-start => server-mode.
- (kill-emacs-hook): Cleanup upon exit.
+ (insert-bahai-diary-entry, insert-monthly-bahai-diary-entry)
+ (insert-yearly-bahai-diary-entry, mark-bahai-calendar-date-pattern):
+ Add compatibility aliases.
-2006-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
+ * calendar/appt.el: Don't wrap defvar within eval-when-compile.
- * hexl.el (hexlify-buffer): Encode process arguments manually.
+ * calendar/cal-move.el (calendar-scroll-left, calendar-scroll-right)
+ (calendar-scroll-left-three-months)
+ (calendar-scroll-right-three-months): Clean up namespace.
+ (scroll-calendar-left, scroll-calendar-right)
+ (scroll-calendar-left-three-months)
+ (scroll-calendar-right-three-months): Add compatibility aliases.
-2006-05-16 Nick Roberts <nickrob@snap.net.nz>
+ * calendar/cal-move.el (calendar-scroll-left, calendar-scroll-right):
+ Behave like mouse-scroll-calendar-* when used from the mouse.
- * progmodes/gud.el (gud-tooltip-tips): Add missing argument to
- call to gdb-tooltip-print.
-
-2006-05-15 Romain Francoise <romain@orebokech.com>
-
- * dired-x.el (dired-guess-shell-gnutar): On GNU and GNU/Linux
- systems, default to "tar" since those systems probably have GNU tar.
-
-2006-05-14 Lars Hansen <larsh@soem.dk>
-
- * desktop.el (desktop-missing-file-warning): Fix docstring.
- (desktop-restore-file-buffer): Correct question asked on missing file.
-
-2006-05-14 Kim F. Storm <storm@cua.dk>
-
- * progmodes/cc-subword.el (c-forward-subword, c-backward-subword):
- Add CUA move property.
-
-2006-05-13 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (custom-push-theme): Load the variable before checking
- its `standard-value'.
-
-2006-05-13 Lars Hansen <larsh@soem.dk>
-
- * desktop.el (desktop-save): Use with-temp-buffer.
-
-2006-05-12 Glenn Morris <rgm@gnu.org>
-
- * calendar/cal-menu.el (calendar-mode-map, calendar-mouse-3-map):
+ * calendar/cal-menu.el (cal-menu-scroll-menu)
+ (cal-menu-global-mouse-menu):
* calendar/calendar.el (calendar-mode-map):
- * calendar/diary-lib.el (include-other-diary-files, diary-mail-entries):
- * calendar/appt.el (appt-check, appt-make-list): Refer to
- diary-view-entries, diary-list-entries, diary-show-all-entries
- rather than obsolete aliases.
-
-2006-05-12 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (line-move-finish): Avoid calling point motion hooks
- while processing intangibility.
-
-2006-05-12 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (terminal-init-xterm): Fix typo.
-
-2006-05-12 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (allout-view-change-hook): Mark as being deprecated,
- to be replaced by `allout-exposure-change-hook'.
- (allout-exposure-change-hook): New, replacing
- `allout-view-change-hook'.
- (allout-flag-region): Run new hook `allout-exposure-change-hook',
- in addition to `allout-view-change-hook'.
- (allout-show-bodies, allout-old-style-prefixes)
- (allout-stylish-prefixes, allout-use-hanging-indents): Quote the
- lambda forms to prevent their showing up in variable help
- presentations as inscrutable byte-compiled code.
- (allout-numbered-bullet, allout-file-xref-bullet, allout-layout):
- Use string-or-null-p to qualify safe-local-variable values.
- (allout-reindent-bodies): Use memq to qualify matches against
- valid safe-local-variable values. Also, quote the lambda as above.
- (allout-use-mode-specific-leader): Add missing candidate-value
- symbols, use memq, and quote the lambda.
- (allout-overlay-interior-modification-handler): Remove unused
- variables `msg' and 'opened'.
- (allout-hidden-p): Constrain invisibility consideration to allout's
- invisibility spec, disregarding invisibility for other reasons.
-
-2006-05-12 Reiner Steib <Reiner.Steib@gmx.de>
-
- * files.el (version-control): Correct safe values.
-
-2006-05-12 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc-refresh): Compute PP once before looping.
-
- (ewoc--node-enter-before, ewoc--create-node): Delete funcs.
- (ewoc--insert-new-node): New func.
- Update callers of deleted funcs to use it, instead.
-
-2006-05-11 Glenn Morris <rgm@gnu.org>
-
- * calendar/calendar.el (diary-show-all-entries): Do not refer to
- obsolete alias `show-all-diary-entries'.
- (make-diary-entry): Not interactive.
- (cal-tex-cursor-month, cal-tex-cursor-month-landscape)
- (cal-tex-cursor-day, cal-tex-cursor-week, cal-tex-cursor-week2)
- (cal-tex-cursor-week-iso, cal-tex-cursor-week-monday)
- (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week)
- (cal-tex-cursor-year-landscape, cal-tex-cursor-filofax-year)
- (cal-tex-cursor-filofax-daily, cal-tex-cursor-year): Interactive.
-
-2006-05-11 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * calendar/calendar.el (calendar-french-date-string)
- (calendar-mayan-date-string, calendar-chinese-date-string)
- (calendar-astro-date-string, calendar-iso-date-string)
- (calendar-islamic-date-string, calendar-bahai-date-string)
- (calendar-hebrew-date-string, calendar-coptic-date-string)
- (calendar-ethiopic-date-string, calendar-persian-date-string):
- These functions are not interactive.
-
-2006-05-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * files.el: Balance parentheses.
-
-2006-05-11 Reiner Steib <Reiner.Steib@gmx.de>
-
- * files.el, newcomment.el, outline.el, simple.el,
- * emacs-lisp/bytecomp.el, progmodes/cc-compat.el,
- * progmodes/cc-vars.el, progmodes/compile.el:
- Move `safe-local-variable' declarations to the respective files.
-
- * help-fns.el (describe-variable): Don't print safe-var if it is
- byte-code. Improve wording as suggested by Luc Teirlinck.
-
-2006-05-11 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-reset): Update speedbar if necessary.
- (gdb-var-evaluate-expression-handler, gdb-var-update-handler):
- Use a token for pending-triggers to ensure gdb-var-update
- gets called once per user input again for pre-GDB 6.4.
- (gdb-var-delete): Match on more complex expressions.
- (gdb-var-list-children-handler, gdb-var-create-handler):
- Use a token for consistency.
-
-2006-05-11 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-read-date, org-goto-calendar)
- (org-agenda-goto-calendar):
- Bind `view-calendar-holidays-initially' to nil.
-
-2006-05-11 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc--refresh-node): No longer save-excursion.
- Update all callers to do it there, instead.
-
-2006-05-10 Glenn Morris <rgm@gnu.org>
-
- * calendar/calendar.el (calendar-basic-setup): Set day to 1 in
- prefix arg case, to avoid view-diary-entries-initially error.
- Reported by Stephen Berman <Stephen.Berman at gmx.net>.
- (calendar-date-is-legal-p): Handle dates with no day part.
-
-2006-05-11 Nick Roberts <nickrob@snap.net.nz>
-
- * comint.el (comint-insert-input): Just make it when
- comint-use-prompt regexp is nil (default) and with the mouse.
- (comint-copy-old-input): Reinstate from 2004-06-23.
- (comint-mode-map): Bind C-c C-m to it.
-
-2006-05-10 J.D. Smith <jdsmith@as.arizona.edu>
-
- * progmodes/idlw-shell.el (idlwave-shell-move-or-history):
- Remove spurious move to point-max (new comint behavior fixes).
-
- * progmodes/idlwave.el (idlwave-push-mark): Removed obsolete
- 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.
- (idlwave-font-lock-fontify-region): Written, use as
- font-lock-fontify-region-function, to fix continued keyword
- fontification issues.
-
-2006-05-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-font-panel-mode): Doc fix.
- (mac-service-selection, mac-service-open-file)
- (mac-service-open-selection, mac-service-mail-selection)
- (mac-service-mail-to, mac-service-insert-text): Rename from
- mac-services-*. All uses changed.
- (mac-apple-event-map): Rename event symbol `services' to `service'.
-
-2006-05-10 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc--dll-create, ewoc--node-delete)
- (ewoc--node-enter-first, ewoc--node-enter-last)
- (ewoc--delete-node-internal): Merge funcs into unique callers.
-
-2006-05-09 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/crm.el (completing-read-multiple): Properly handle
- return value of read-from-minibuffer for empty input.
-
-2006-05-09 Miles Bader <miles@gnu.org>
-
- * comint.el (comint-insert-input): Remove redundant calls to setq
- and goto-char.
-
-2006-05-10 Nick Roberts <nickrob@snap.net.nz>
-
- * comint.el (comint-insert-input): Make it work when
- comint-use-prompt-regexp is t.
-
-2006-05-10 Miles Bader <miles@gnu.org>
-
- * subr.el (field-at-pos): New function.
-
- * comint.el (comint-insert-input): Use it.
-
-2006-05-09 Juri Linkov <juri@jurta.org>
-
- * battery.el (battery-linux-proc-acpi): Also try
- `/proc/acpi/thermal_zone/THR2/temperature'.
-
- * files.el <safe-local-variable>: Remove `eval' and `let' binding
- for now unused lambda `string-or-null'.
-
- * add-log.el (change-log-default-name): Put `string-or-null-p'
- instead of lambda on `safe-local-variable' property.
-
- * diff-mode.el (diff-context->unified): Use `region-beginning' and
- `region-end' instead of `mark' and `point'.
- (diff-unified->context, diff-reverse-direction, diff-fixup-modifs):
- Operate on region in Transient Mark mode when the mark is active.
- Use `region-beginning' and `region-end' instead of `mark' and
- `point'.
- (diff-hunk-text, diff-goto-source): Doc fix.
-
- * startup.el (fancy-splash-screens, normal-splash-screen): Use
- face `mode-line-buffer-id' for mode-line buffer face instead of
- hard-coded `(:weight bold)'.
-
- * arc-mode.el (archive-set-buffer-as-visiting-file): Bind
- buffer-undo-list to t (undo-ask is reproducible by visiting
- nested archives).
-
-2006-05-09 Kim F. Storm <storm@cua.dk>
-
- * progmodes/grep.el (rgrep): Set default directory of *grep*
- buffer if we start M-x rgrep in the *grep* buffer and choose
- a different base directory.
-
-2006-05-09 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-register-file-name-handlers): Enable Tramp
- completion also when ido is loaded.
-
-2006-05-09 Masatake YAMATO <jet@gyve.org>
-
- * font-lock.el (cpp-font-lock-keywords-source-directives): Addded
- "warning" and "import".
- (cpp-font-lock-keywords): Added "warning".
-
-2006-05-08 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (terminal-init-xterm): Add more key bindings.
-
-2006-05-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mwheel.el (mwheel-scroll): Make sure that when scrolling multiple
- pages at a time, if we signal the end, we should indeed reach that end.
-
-2006-05-08 David Reitter <david.reitter@gmail.com>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Only preserve messages
- output during execution of the body.
-
-2006-05-08 Kim F. Storm <storm@cua.dk>
-
- * progmodes/grep.el (lgrep, rgrep): Doc fixes.
-
-2006-05-08 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc--set-buffer-bind-dll-let*):
- Use with-current-buffer.
-
-2006-05-07 Kim F. Storm <storm@cua.dk>
-
- * subr.el (add-to-history): Remove keep-dups arg.
-
- * kmacro.el (kmacro-push-ring): Let-bind history-delete-duplicates
- to nil around call to add-to-history.
-
-2006-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
+ Use new calendar-scroll-* names.
+ (mouse-scroll-calendar-left, mouse-scroll-calendar-right):
+ Remove. Use calendar-scroll-* directly instead.
+
+2007-07-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/advice.el (ad-interactive-p, ad-interactive-form): Remove.
+ (ad-body-forms, ad-advised-interactive-form, ad-make-cache-id)
+ (ad-make-advised-definition, ad-cache-id-verification-code):
+ Use commandp and interactive-form instead.
+
+2007-07-26 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc-git.el: Relicense to GPLv3 or later.
+ (vc-directory-exclusion-list, vc-handled-backends): Remove.
+
+ * vc-hooks.el (vc-handled-backends): Add GIT.
+
+ * vc.el (vc-directory-exclusion-list): Add .git.
+
+2007-07-26 Alexandre Julliard <julliard@winehq.org>
+
+ * vc-git.el (vc-git-revision-table)
+ (vc-git-revision-completion-table): New functions.
+
+2007-07-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * progmodes/ebnf-abn.el (ebnf-abn-skip-comment):
+ * progmodes/ebnf-bnf.el (ebnf-bnf-skip-comment):
+ * progmodes/ebnf-dtd.el (ebnf-dtd-skip-comment):
+ * progmodes/ebnf-ebx.el (ebnf-ebx-skip-comment):
+ * progmodes/ebnf-iso.el (ebnf-iso-skip-comment):
+ * progmodes/ebnf-yac.el (ebnf-yac-skip-comment): New version.
+ New command actions for EPS header and EPS footer.
+
+ * progmodes/ebnf2ps.el: New command actions for EPS header and EPS
+ footer. Fix some problems with one-or-more, zero-or-more and
+ alternative constructions generation. Some log messages
+ implementation. Doc fix.
+ (ebnf-version): New version 4.4.
+ (ebnf-eps-header-font, ebnf-eps-header, ebnf-eps-footer-font)
+ (ebnf-eps-footer, ebnf-log): New options.
+ (ebnf-find-style, ebnf-eps-header-footer, ebnf-eps-header)
+ (ebnf-eps-footer, ebnf-eps-string, ebnf-eps-header-footer-comment)
+ (ebnf-eps-header-footer-p, ebnf-eps-header-comment)
+ (ebnf-eps-footer-comment, ebnf-eps-header-footer-file)
+ (ebnf-eps-header-footer-set, ebnf-log-header, ebnf-log): New funs.
+ (ebnf-style-custom-list, ebnf-style-database): Put new values.
+ (ebnf-print-directory, ebnf-print-file, ebnf-print-buffer)
+ (ebnf-print-region, ebnf-spool-directory, ebnf-spool-file)
+ (ebnf-spool-buffer, ebnf-spool-region, ebnf-eps-directory)
+ (ebnf-eps-file, ebnf-eps-buffer, ebnf-eps-region)
+ (ebnf-syntax-directory, ebnf-syntax-file, ebnf-syntax-buffer)
+ (ebnf-syntax-region, ebnf-parse-and-sort, ebnf-begin-job)
+ (ebnf-dimensions, ebnf-production-dimension, ebnf-terminal-dimension)
+ (ebnf-non-terminal-dimension, ebnf-special-dimension)
+ (ebnf-terminal-dimension1, ebnf-repeat-dimension)
+ (ebnf-except-dimension, ebnf-alternative-dimension)
+ (ebnf-optional-dimension, ebnf-one-or-more-dimension)
+ (ebnf-zero-or-more-dimension, ebnf-sequence-dimension): Insert log
+ message fun.
+ (ebnf-setup, ebnf-generate-one-or-more, ebnf-generate-zero-or-more)
+ (ebnf-begin-job, ebnf-begin-file, ebnf-eps-finish-and-write)
+ (ebnf-insert-ebnf-prologue, ebnf-production-dimension)
+ (ebnf-terminal-dimension1, ebnf-alternative-dimension)
+ (ebnf-one-or-more-dimension, ebnf-zero-or-more-dimension)
+ (ebnf-eps-add-context, ebnf-eps-add-production): Fix code.
+ (ebnf-eps-filename, ebnf-trim-right): Replace `?\s' by `?\ ' to keep
+ compatibility with Emacs 20 & 21.
+ (ebnf-eps-header-comment, ebnf-eps-footer-comment)
+ (ebnf-eps-file-alist, ebnf-basic-width-extra)
+ (ebnf-basic-empty-height): New vars.
+ (ebnf-prologue): Fix PostScript code.
+ (ebnf-make-empty, ebnf-make-terminal1, ebnf-make-or-more1)
+ (ebnf-make-production, ebnf-make-alternative, ebnf-make-optional)
+ (ebnf-make-except, ebnf-make-repeat, ebnf-make-sequence)
+ (ebnf-make-dup-sequence, ebnf-token-alternative): Add comments.
- * emacs-lisp/syntax.el (syntax-ppss): Flush the cache before rather
- than after a buffer modification.
-
-2006-05-08 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-handler): Move speedbar
- call to...
- (gud-watch): ...here so speedbar is raised for already watched
- expressions.
- (gdb-speedbar-refresh): Delete function.
- (gdb-speedbar-update, gdb-speedbar-timer-fn): New functions.
- Use speedbar-timer-fn instead of speedbar-refresh (reverting
- earlier change).
- (gdb-var-evaluate-expression-handler)
- (gdb-var-list-children-handler-1, gdb-var-update-handler-1): Use it.
-
- * speedbar.el (speedbar-timer-fn): Remove save-window-excursion.
- Update localized contents for all buffers except ignored modes.
-
-2006-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-utxt-to-string): Use `eq' instead of `='.
- (mac-atsu-font-table, mac-font-panel-mode): Add defvars.
- (mac-bytes-to-digits, mac-handle-toolbar-switch-mode)
- (mac-handle-font-panel-closed, mac-handle-font-selection):
- New functions.
- (mac-font-panel-mode): New minor mode.
- (mac-apple-event-map): Add bindings for toolbar toggle button and
- font panel.
- (menu-bar-showhide-menu): Add mac-font-panel-mode.
-
-2006-05-07 John Paul Wallington <jpw@pobox.com>
-
- * ibuffer.el (ibuffer-compressed-file-name-regexp):
- Avoid `regexp-opt'; simplify regexp for readability.
-
-2006-05-06 Eli Zaretskii <eliz@gnu.org>
-
- * ldefs-boot.el (dired-do-redisplay, dired-maybe-insert-subdir):
- * files.el (buffer-stale-function):
- * dired-aux.el (dired-do-redisplay, dired-maybe-insert-subdir):
- * autorevert.el (global-auto-revert-non-file-buffers): Point Info
- links to the main manual, not to emacs-xtra.
-
-2006-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-utxt-to-string): Don't make adjustment for
- MacJapanese if text is ASCII-only.
-
-2006-05-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-goto-breakpoint): Use or instead of
- unless so nil isn't returned.
- (gdb-setup-windows, gdb-restore-windows): Reset gdb-source-window.
-
-2006-05-06 Kim F. Storm <storm@cua.dk>
-
- * subr.el (add-to-history): New function.
-
- * ediff.el (ediff-files, ediff-files3, ediff-merge-files)
- (ediff-merge-files-with-ancestor):
- * env.el (setenv):
- * isearch.el (isearch-update-ring):
- * server.el (server-visit-files):
- * progmodes/grep.el (lgrep, rgrep):
- * progmodes/vhdl-mode.el (vhdl-generate-makefile-1):
- * progmodes/xscheme.el (xscheme-insert-expression):
- Use add-to-history.
-
- * kmacro.el (kmacro-push-ring): Use add-to-history.
- (kmacro-ring-length): Remove unused defun.
- (kmacro-start-macro): Use kmacro-push-ring.
-
-2006-05-06 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el (ewoc-create, ewoc-set-hf): Use `insert'
- directly instead of a lambda expression that calls it.
-
-2006-05-06 Kim F. Storm <storm@cua.dk>
-
- * avoid.el (mouse-avoidance-point-position): Use posn-at-point
- instead of compute-motion.
-
-2006-05-05 Dan Nicolaescu <dann@ics.uci.edu>
-
- * ibuffer.el (ibuffer-compressed-file-name-regexp): Undo previous
- change.
-
-2006-05-05 Reiner Steib <Reiner.Steib@gmx.de>
-
- * startup.el (command-line-1): Refer to "Pure Storage" on
- pure-space-overflow.
-
-2006-05-05 Martin Rudalics <rudalics@gmx.at>
-
- * emacs-lisp/re-builder.el (reb-update-overlays): Cycle through
- provided faces once they all have been used up.
-
-2006-05-05 Eli Zaretskii <eliz@gnu.org>
-
- * startup.el (normal-splash-screen, fancy-splash-screens-1): Add a
- reference to the Lisp manual to the warning about pure space
- overflow.
-
-2006-05-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * textmodes/ispell.el (ispell-buffer-local-dict): Add a `no-reload'
- argument to avoid the call to `ispell-internal-change-dictionary'
- when not needed.
- (ispell-change-dictionary): Use this argument and call
- `ispell-internal-change-dictionary' after the possible change
- to `ispell-local-dictionary'.
- (ispell-internal-change-dictionary): Check for a change in
- personal dictionary use too.
-
-2006-05-05 Eli Zaretskii <eliz@gnu.org>
-
- * startup.el (command-line): On MS-Windows, probe "~", not
- "~USER", for warning about non-existent home directory.
-
- * arc-mode.el (archive-l-e): New optional argument `float' means
- generate a float value.
- (archive-arc-summarize, archive-lzh-summarize)
- (archive-zip-summarize, archive-zoo-summarize): Invoke archive-l-e
- with 3rd argument non-nil when file's size is being computed.
- Format the file sizes with %8.0f instead of %8d.
-
-2006-05-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * cus-start.el (all): Add mac-dnd-known-types.
-
- * term/mac-win.el (mac-utxt-to-string, mac-string-to-utxt)
- (mac-TEXT-to-string, mac-string-to-TEXT, mac-furl-to-string)
- (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-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)
- (mac-dnd-handle-drag-n-drop-event): New functions.
- (mac-drag-n-drop): Remove function.
- (global-map): Bind drag-n-drop and M-drag-n-drop to
- mac-dnd-handle-drag-n-drop-event.
-
-2006-05-04 Karl Chen <quarl@NOSPAM.quarl.org>
-
- * progmodes/perl-mode.el (perl-beginning-of-function):
- Skip anonymous subs.
-
-2006-05-04 Dan Nicolaescu <dann@ics.uci.edu>
-
- * ibuffer.el (ibuffer-compressed-file-name-regexp): Avoid loading
- regexp-opt at run time.
-
- * term.el (term-handle-ansi-escape): Fix off by one error.
-
-2006-05-04 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-force-update): Delete variable...
- (gdb-init-1, gdb-post-prompt): ...and references to it.
- (gdb-frame-handler): Strip directory name from filename if present.
-
- * progmodes/gud.el (gdb-force-update): Delete defvar
- (gud-speedbar-buttons): ...and references to it. Use window-start
- to try to keep positon in watch expression.
-
-2006-05-03 Richard Stallman <rms@gnu.org>
-
- * simple.el (next-history-element, previous-history-element): Doc fix.
-
- * isearch.el (isearch-update-ring): Doc fix.
-
-2006-05-03 Dan Nicolaescu <dann@ics.uci.edu>
-
- * isearch.el (isearch-update-ring): Take history-delete-duplicates
- into consideration. Replace one arm ifs with whens.
-
-2006-05-03 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gud-watch): Let user select an expression.
- (menu): Fix typo.
-
-2006-05-02 Miles Bader <miles@gnu.org>
-
- * replace.el (occur-engine): Bind `inhibit-field-text-motion' to t.
-
-2006-05-02 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-override-minor-modes-map)
- (calc-override-minor-modes): New variables.
- (calc-do-embedded): Make sure that Calc keystrokes aren't
- overwritten by minor modes.
-
-2006-05-02 Chong Yidong <cyd@mit.edu>
-
- * msb.el (msb): If EVENT is a down event, read and discard the up event.
-
-2006-05-02 Reiner Steib <Reiner.Steib@gmx.de>
-
- * startup.el (command-line-1): Refer to Lisp manual when
- pure-space-overflow occurs.
-
- * files.el (byte-compile-dynamic, byte-compile-dynamic-docstrings)
- (byte-compile-warnings, find-file-visit-truename, indent-tabs-mode)
- (left-margin, no-byte-compile, no-update-autoloads, truncate-lines)
- (version-control): Don't use `t' for safe-local-variable declarations.
-
-2006-05-01 Richard Stallman <rms@gnu.org>
-
- * diff-mode.el (diff-mode-shared-map): Don't bind M-W, M-U, M-C,
- M-r, M-R, M-A, M-SPC or M-DEL.
- (diff-mode-map): diff-refine-hunk now on C-c C-w
- (diff-mode-map): Bind C-c C-e, C-c C-n, C-c C-r, C-c C-u.
-
- * help-mode.el (help-mode): view-exit-action calls delete-window
- only when it is safe and possible.
-
- * simple.el (undo-outer-limit-truncate): Put quotes around buffer name
- in messages.
-
- * emacs-lisp/warnings.el (display-warning, lwarn): Doc fixes.
-
- * tool-bar.el (tool-bar-setup): Put Help and Preferences items
- in the default tool-bar-map.
-
-2006-05-01 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-completion-file-name-handler-alist)
- (tramp-run-real-handler, tramp-completion-run-real-handler)
- (tramp-completion-handle-file-name-all-completions)
- (tramp-completion-handle-file-name-completion): Autoload them.
- (tramp-completion-handle-file-exists-p)
- (tramp-completion-handle-file-name-directory)
- (tramp-completion-handle-file-name-nondirectory)
- (tramp-completion-handle-expand-file-name): Remove them.
- (tramp-handle-file-name-directory): Return the real directory name.
- Returning "/" only doesn't need to be necessary any longer.
- (tramp-file-name-handler): Make special attention when in hostname
- completion mode.
- (tramp-completion-file-name-handler): Revert patch from 2006-04-28.
- (tramp-register-file-name-handlers):
- Register `tramp-completion-file-name-handler' only when
- `partial-completion-mode' is enabled.
- (tramp-completion-handle-file-name-all-completions):
- Delete directory part from results.
- (tramp-get-completion-methods, tramp-get-completion-user-host):
- Discard deleting "/", it doesn't work after the change of
- `tramp-handle-file-name-directory' above.
-
-2006-05-01 Kim F. Storm <storm@cua.dk>
-
- * progmodes/grep.el (grep-expand-template): Use save-match-data
- and symbol-value.
-
-2006-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-ae-open-documents, mac-drag-n-drop):
- Use select-frame-set-input-focus instead of raise-frame.
- (global-map): Bind M-drag-n-drop to mac-drag-n-drop.
-
-2006-05-01 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-def): Add %c case.
- (gud-speedbar-buttons): Don't bind case-fold-search unnecessarily.
- (gud-format-command): Make match case sensitive. Match on %F.
-
-2006-04-30 Glenn Morris <rgm@gnu.org>
-
- * calendar/cal-tex.el (cal-tex-preamble-extra): New variable.
- (cal-tex-preamble): Use cal-tex-preamble-extra.
- (cal-tex-list-diary-entries): Refer to `diary-list-entries' rather
- than alias `list-diary-entries'.
-
-2006-04-29 Dan Nicolaescu <dann@ics.uci.edu>
-
- * help-fns.el (describe-variable): Add info about safe local variables.
-
-2006-04-29 Richard Stallman <rms@gnu.org>
-
- * bindings.el (mode-line-format): help-echo doc fixes.
-
- * net/tramp.el (tramp-file-name-handler-alist): Delete
- expand-file-name and other operations that can cause spurious loading.
-
-2006-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el (safe-local-variable-p): Remove support for the special
- value t.
-
- * textmodes/paragraphs.el (sentence-end-without-space):
- Fix safety predicate.
- (sentence-end-double-space, sentence-end-without-period)
- (paragraph-ignore-fill-prefix):
- * textmodes/fill.el (colon-double-space):
- * abbrev.el (abbrev-mode): Tighten the safety predicate.
-
- * subr.el (booleanp): New fun.
-
- * textmodes/reftex-vars.el (reftex-guess-label-type):
- Tighten the safety predicate.
-
-2006-04-28 Kim F. Storm <storm@cua.dk>
-
- * progmodes/grep.el (defgroup grep): Doc fix.
- (grep-auto-highlight): Remove.
- (grep-template): New defcustom.
- (grep-find-template): Rename from grep-tree-template.
- (grep-files-aliases): Rename from grep-tree-files-aliases.
- Remove "all" alias, add "l" alias.
- (grep-tree-ignore-case, grep-tree-ignore-CVS-directories): Remove.
- (grep-find-ignored-directories): New defcustom to replace
- grep-tree-ignore-CVS-directories, to facilitate ignoring
- subdirectories for multiple version control systems.
- (grep-mode-map): Add Recursive grep item to GREP menu.
- (grep-regexp-history, grep-files-history): New defvars.
- (grep-probe): New helper function.
- (grep-compute-defaults): Use it to simplify code.
- Adapt to name changes.
- Use `.' as base in grep-find-template rather than <D>.
- (grep): Remove superfluous highlight-regexp arg. Fix doc.
- Call grep-compute-defaults unconditionally.
- (grep-expand-keywords): New defconst.
- (grep-expand-template): Rename from grep-expand-command-macros.
- Simplify via grep-expand-keywords. Look at case-fold-search instead
- of grep-tree-ignore-case to add -i option.
- Bind case-fold-search to nil while matching keywords.
- (grep-tree-last-regexp, grep-tree-last-files): Remove.
- (grep-read-regexp, grep-read-files): New helper functions.
- (rgrep): Rename from grep-tree. Rework to use proper histories.
- Adapt to changes in defcustoms and functions above.
- (lgrep): New command, as grep, but using same interactive UI as rgrep.
-
-2006-04-28 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-completion-file-name-handler):
- Disable Tramp's functionality while loading Tramp itself.
- (tramp-register-file-name-handlers): That's a defsubst now.
- Code from `tramp-repair-jka-compr' moved here. Apply it via
- `after-init-hook'.
- (tramp-repair-jka-compr): Remove.
-
-2006-04-27 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-embedded-make-info): Use `math-read-expr' to
- read expression when `math-read-big-expr' doesn't work.
-
-2006-04-27 Reiner Steib <Reiner.Steib@gmx.de>
-
- * startup.el (command-line-1): Display warning when
- pure-space-overflow is non-nil.
-
-2006-04-26 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-user-optional-fields): Mark as
- risky.
-
-2006-04-26 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-url): New optional arg no-browse.
- Return the URL or nil if none can be generated.
-
-2006-04-27 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-comint-buffer): Move forward to stop
- byte compiler warnings.
- (gud-basic-call, gud-find-expr): Let user select an expression
- for printing. Print expression as well as value in GUD buffer.
-
-2006-04-17 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el: Remove local autoload declaration for
- pgg-gpg-symmetric-key-p, since that's now done in pgg-gpg.el.
- (allout-show-bodies, allout-header-prefix, allout-primary-bullet)
- (allout-plain-bullets-string, allout-distinctive-bullets-string)
- (allout-use-mode-specific-leader, allout-old-style-prefixes)
- (allout-stylish-prefixes, allout-numbered-bullet)
- (allout-file-xref-bullet, allout-presentation-padding)
- (allout-use-hanging-indents, allout-reindent-bodies): Mark as
- safe-local-variable with suitable value spec, and add autoload
- cookie for loaddefs inclusion. We now use an explicit spec everywhere.
- (move-beginning-of-line, move-end-of-line): Repair so these compat
- functions now actually resituate the point, when appropriate.
-
-2006-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cc-subword.el (c-subword-mode-map): Use command remapping.
-
- * add-log.el (add-log-iso8601-time-zone): Make parameter optional.
- (add-log-iso8601-time-string): Fix call to format-time-string.
-
-2006-04-26 Kim F. Storm <storm@cua.dk>
-
- * subr.el (posn-string, posn-image, posn-object): Doc fix.
-
-2006-04-26 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/asm-mode.el (asm-mode, asm-mode-syntax-table):
- Add support for "//" style comments. Remove `b' flag
- from ?* in `asm-mode-syntax-table'.
-
-2006-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * follow.el: Use (featurep 'xemacs) everywhere.
- (follow-mode): Use define-minor-mode.
- (follow-mode-map): Move initialization into the declaration.
- Use command remapping.
- (follow-emacs-version-xemacs-p): Remove.
- (follow-submit-feedback): Remove.
-
- * allout.el (allout-layout, allout-passphrase-verifier-string)
- (allout-passphrase-hint-string): Tighten up a bit the safety predicate.
-
- * textmodes/reftex-vars.el (reftex-vref-is-default)
- (reftex-fref-is-default, reftex-guess-label-type):
- Tighten up a bit the safety predicate.
-
- * textmodes/paragraphs.el (sentence-end-double-space)
- (sentence-end-without-period, sentence-end-without-space)
- (page-delimiter, paragraph-ignore-fill-prefix):
- Tighten up a bit the safety predicate.
-
- * textmodes/fill.el (colon-double-space): Tighten up the safety pred.
-
- * progmodes/python.el (python-continuation-line-p)
- (python-beginning-of-statement): syntax-ppss may return
- a negative depth.
- (python-mode): Don't forcefully enable font-lock.
-
- * time-stamp.el (time-stamp-start, time-stamp-end)
- (time-stamp-inserts-lines): Tighten up a bit the safety predicate.
-
- * add-log.el: Remove spurious * in docstrings.
- (add-log-time-zone-rule): Rename from change-log-time-zone-rule.
- (add-change-log-entry): Use it here, since it's not specific
- to iso8601.
- (add-log-iso8601-time-string): Don't use it here any more.
- (change-log-indent-text, change-log-indent): Rename from add-log-*.
-
- * abbrev.el (abbrev-mode): Tighten up a bit the safety predicate.
-
-2006-04-25 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el (rcirc-print): Revert last change with ignored nicks.
- (rcirc-toggle-low-priority): Doc fix.
- (rcirc-handler-NOTICE): Remove beginning of line anchor in
- ChanServ regexp.
- (rcirc-startup-channels-alist): Connect to #rcirc by default, not
- #emacs.
- (rcirc-bright-nick-regexp, rcirc-dim-nick-regexp): Add variables.
- (rcirc-decode-coding-system): Use utf-8 as the default.
- (rcirc-multiline-minor-mode): Set the fill-column.
- (rcirc-format-response-string): Display bright and dim nicks.
- (rcirc-browse-url): Update interactive spec to fill ARG.
- (rcirc-bright-nick, rcirc-dim-nick): Add faces.
- (rcirc-print): Ignore dim-nick messages wrt modeline-activity.
-
-2006-04-24 J.D. Smith <jdsmith@as.arizona.edu>
-
- * textmodes/bibtex.el (bibtex-find-entry): Don't demand matching
- case for @Article, etc.
-
-2006-04-23 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-register-file-name-handlers): New defun.
- Added with autoload cookie.
- (tramp-unload-file-name-handlers): Rename from
- `tramp-unload-file-name-handler-alist'.
-
-2006-04-23 Romain Francoise <romain@orebokech.com>
-
- * comint.el (comint-match-partial-filename): Doc fix.
-
-2006-04-21 Glenn Morris <rgm@gnu.org>
-
- * calendar/cal-menu.el (calendar-mode-map): Refer to
- `diary-view-entries' rather than alias `view-diary-entries'.
- * calendar/diary-lib.el (view-other-diary-entries): Ditto.
-
-2006-04-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * progmodes/antlr-mode.el (antlr-default):
- * cus-edit.el (custom-documentation):
- * faces.el (scroll-bar, border, cursor, mouse): Avoid nil spec
- in defface.
-
-2006-04-21 Kim F. Storm <storm@cua.dk>
-
- * image.el (image-type): New defun split out of create-image.
- (create-image): Use it.
-
-2006-04-21 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode-map): Catch conflict with old allout.el.
- (org-open-at-point): Remove the "...done" message to keep output
- in the echo area visible.
- (org-export-as-xoxo): Fix call to `indent-region'.
-
-2006-04-21 Kevin Ryde <user42@zip.com.au>
-
- * international/mule.el (keyboard-coding-system): defcustom
- info-link fixes: "Specify Coding" has been split, keyboard now in
- "Terminal Coding", and "Single-Byte Character Support" is now
- "Unibyte Mode".
-
-2006-04-21 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-data-list-register-values-handler):
- Use font-lock-warning-face for any errors e.g. no stack.
- (gdb-stack-list-locals-handler): Display any errors e.g. no stack.
-
-2006-04-20 Dan Nicolaescu <dann@ics.uci.edu>
+2007-07-25 Glenn Morris <rgm@gnu.org>
- * progmodes/sh-script.el (sh-shell): Mark as safe.
+ * Relicense all FSF files to GPLv3 or later.
- * newcomment.el (comment-start, comment-start-skip)
- (comment-end-skip, comment-end): Mark as safe.
+ * COPYING: Switch to GPLv3.
-2006-04-20 Carsten Dominik <dominik@science.uva.nl>
+2007-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * textmodes/org.el (org-deadline-announce): Face removed.
- (org-level-faces, org-n-levels): Convert to constant.
- (org-compatible-face): New function.
- (org-hide, org-level-1, org-level-2, org-level-3, org-level-4)
- (org-level-5, org-level-6, org-level-7, org-level-8)
- (org-special-keyword, org-warning, org-headline-done, org-link)
- (org-date, org-tag, org-todo, org-done, org-table, org-formula)
- (org-scheduled-today, org-scheduled-previously, org-time-grid):
- Face definition revised for better color tty support.
- (org-bold-re, org-italic-re, org-underline-re): New constants.
- (org-set-font-lock-defaults): Use the new constants.
- (org-agenda-highlight-todo): New function.
- (org-agenda-todo): Fix bug with point at end of line.
- (org-agenda-change-all-lines, org-finalize-agenda-entries):
- Fontify TODO keywords.
- (org-insert-link): Preserve relative path in ../ links.
- (org-export-as-html): Convert links pointing to .org files into
- links that will work beteen the exported HTML files.
- (org-todo-list): Fix bug when arg=0.
- (org-insert-heading): More fine-tuning.
+ * pcvs.el (cvs-temp-buffer): Undo last ill-conceived change.
+ Replace it with another one which disables undo before calling
+ erase-buffer and then turns it back on if needed.
-2006-04-19 Romain Francoise <romain@orebokech.com>
+2007-07-24 Dan Nicolaescu <dann@ics.uci.edu>
- * mail/rmail.el (rmail-convert-to-babyl-format): Use second group
- from `rmail-mime-charset-pattern'.
+ * vc-hg.el (vc-hg-revision-completion-table): Temporarily comment out.
-2006-04-18 Dan Nicolaescu <dann@ics.uci.edu>
+2007-07-24 Glenn Morris <rgm@gnu.org>
- * progmodes/python.el (python-mode): Fix typo.
+ * calendar/cal-tex.el (cal-tex-holidays, cal-tex-diary)
+ (cal-tex-rules, cal-tex-buffer, cal-tex-24)
+ (cal-tex-cursor-month-landscape, cal-tex-cursor-month)
+ (cal-tex-cursor-week, cal-tex-cursor-week2)
+ (cal-tex-cursor-week-iso, cal-tex-week-hours)
+ (cal-tex-cursor-week-monday, cal-tex-weekly4-box)
+ (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week)
+ (cal-tex-cursor-filofax-daily, cal-tex-daily-page): Doc fix.
-2006-04-18 J.D. Smith <jdsmith@as.arizona.edu>
+2007-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * comint.el (comint-previous-input): Don't clobber input line
- when moving off either end of the input history ring.
- (comint-delete-input): New function, used by
- `comint-previous-input' and others.
- (comint-previous-matching-input):
- Use `coming-delete-input'. Save the partial input if leaving the
- edit line. Goto point-max before deleting input to avoid
- partial input fragments hanging around.
- (comint-restore-input): New function, used by `comint-previous-input'.
+ * calendar/calendar.el (calendar-mode-map): Move initialization
+ into declaration. Add menu bindings (used to be done in cal-menu).
+ (calendar-mode): Don't add an activate-menubar-hook.
+
+ * calendar/cal-menu.el: Break dependency on calendar.el (i.e. do not
+ modify calendar-mode-map), use easy-menu, and make sure that C-h k
+ can be used on the menu entries.
+ (cal-menu-holiday-window-suffix, cal-menu-set-date-title): New funs.
+ (cal-menu-moon-menu, cal-menu-diary-menu, cal-menu-holidays-menu)
+ (cal-menu-goto-menu, cal-menu-scroll-menu): New consts.
+ (cal-menu-context-mouse-menu, cal-menu-global-mouse-menu): New menus.
+ (calendar-flatten, cal-menu-update): Remove.
+ (calendar-mouse-insert-hebrew-diary-entry)
+ (calendar-mouse-insert-islamic-diary-entry)
+ (calendar-mouse-insert-bahai-diary-entry):
+ Remove (fold into cal-menu-diary-menu).
+ (calendar-mouse-2-date-menu, calendar-mouse-cal-tex-menu)
+ (cal-tex-mouse-filofax): Remove (fold into cal-menu-context-mouse-menu).
+ (calendar-mouse-3-map): Remove (turn into cal-menu-global-mouse-menu).
+ (calendar-mouse-view-diary-entries): Minor simplifications.
+ (calendar-event-to-date): Use with-current-buffer.
-2006-04-18 Luc Teirlinck <teirllm@auburn.edu>
+2007-07-25 Nick Roberts <nickrob@snap.net.nz>
- * imenu.el (imenu--index-alist): Balance parentheses.
+ * add-log.el (change-log-redate): Remove (not needed anymore and
+ doesn't appear to work).
-2006-04-18 Dan Nicolaescu <dann@ics.uci.edu>
+2007-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/python.el (python-mode): Add support for hs-minor-mode.
+ * frame.el: Use mapc and dolist instead of mapcar where possible.
+ (close-display-connection): New command.
-2006-04-19 Reiner Steib <Reiner.Steib@gmx.de>
+2007-07-25 Alexandre Julliard <julliard@winehq.org>
- * abbrev.el (read-abbrev-file): Use abbrev-file-name if optional
- file is nil.
+ * vc-git.el (vc-git-log-view-mode): Port to the multi-file vc interface.
+ (vc-git-create-snapshot, vc-git-retrieve-snapshot): New functions.
-2006-04-18 Richard Stallman <rms@gnu.org>
+2007-07-25 Vinicius Jose Latorre <viniciusjl@ig.com.br>
- * tooltip.el (tooltip-mode, tooltip-use-echo-area): Doc fixes.
+ * ps-print.el (ps-multibyte-buffer): Docstring fix.
- * imenu.el (imenu-create-index-function, imenu--index-alist)
- (imenu--last-menubar-index-alist, imenu--make-index-alist)
- (imenu-default-create-index-function, imenu--generic-function):
- Doc fixes.
+ * ps-mule.el: Doc fix.
+ (ps-multibyte-buffer, ps-mule-font-info-database-default)
+ (ps-mule-external-libraries, ps-mule-begin-job): Docstring fix.
- * image-mode.el (image-toggle-display): Handle tar and arc subfiles.
+2007-07-25 Glenn Morris <rgm@gnu.org>
- * help-mode.el (help-mode): Set view-exit-action to delete window.
+ * calendar/cal-tex.el (cal-tex-which-days, cal-tex-holidays)
+ (cal-tex-diary, cal-tex-daily-string, cal-tex-daily-start)
+ (cal-tex-daily-end, cal-tex-hook)
+ (cal-tex-cal-one-month, cal-tex-cal-multi-month)
+ (cal-tex-year, cal-tex-cursor-week, cal-tex-cursor-week2)
+ (cal-tex-cursor-week-iso, cal-tex-week-hours)
+ (cal-tex-cursor-week-monday, cal-tex-weekly4-box)
+ (cal-tex-cursor-day, cal-tex-insert-preamble): Doc fix.
+ (cal-tex-day-prefix, cal-tex-day-name-format)
+ (cal-tex-cal-one-month, cal-tex-cal-multi-month, cal-tex-myday)
+ (cal-tex-caldate, cal-tex-LaTeX-hourbox)
+ (cal-tex-LaTeX-subst-list): Change from variables to constants.
+ (cal-tex-preamble, cal-tex-arg, cal-tex-nl): Simplify with `format'.
+ (cal-tex-cursor-filofax-year, cal-tex-weekly4-box): Use \textbf,
+ etc, rather than \bf.
+ (cal-tex-mini-calendar): Fix typos in previous change.
+ (cal-tex-latexify-list): Remove inner let binding.
+ (cal-tex-end-document, cal-tex-banner): Use multi-line
+ cal-tex-comment.
+ (cal-tex-comment): Handle embedded newlines.
+ (cal-tex-LaTeXify-string): Use substring-no-properties.
+
+2007-07-25 Joakim Verona <joakim@verona.se> (tiny change)
- * env.el (setenv): Get rid of arg UNSET. Interactive unsetting
- now works by passing nil as arg.
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Add support for the Maden build tool.
- * apropos.el (apropos-print): Don't do where-is on self-insert-command.
+2007-07-25 William Xu <william.xwl@gmail.com> (tiny change)
- * abbrev.el (edit-abbrevs-redefine): Temporarily widen.
- (read-abbrev-file): Provide default when reading filename.
+ * net/webjump.el (webjump-url-encode): Fix for non-ASCII characters.
- * files.el (enable-local-variables): Allow :all as value.
- (hack-local-variables): Implement that value.
- (safe-local-variable-values, safe-local-eval-forms)
- (enable-local-variables): Mark as risky.
- (find-file-visit-truename, kept-old-versions): Mark safe.
+2007-07-24 Stefan Monnier <monnier@iro.umontreal.ca>
- * time-stamp.el (time-stamp-format, time-stamp-line-limit)
- (time-stamp-start, time-stamp-end, time-stamp-inserts-lines)
- (time-stamp-count, time-stamp-pattern): Add safe-local-variable prop.
+ * pcvs.el (cvs-temp-buffer): Disable undo in temp buffers.
-2006-04-18 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-07-24 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/tcl.el (tcl-send-string, tcl-send-region):
- Use forward-line so as to get to BOL even in the presence of fields.
- (tcl-eval-region): Strip surrounding space to avoid multiple prompts
- in return.
- (inferior-tcl): Tell tclsh to work in interactive mode.
+ * dired.el (dired-mode-map): Bind wdired-change-to-wdired-mode to
+ C-x C-q.
- * complete.el (partial-completion-mode):
- Use 'choose-completion-string-functions to make sure that
- choose-completion fills the minibuffer properly.
+ * vc-git.el (vc-git-print-log): Fix previous change.
- * complete.el (PC-old-read-file-name-internal): Remove.
- (PC-read-include-file-name-internal): Remove. Turn it into an advice
- of read-file-name-internal.
- (partial-completion-mode): Enable/disable this advice.
+2007-07-24 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-18 Juanma Barranquero <lekktu@gmail.com>
+ * window.el (save-selected-window): Minor optimization.
+ (bw-adjust-window): If operation failed, try with a smaller delta.
+ (window-fixed-size-p): New function.
+ (window-area-factor): New var.
+ (balance-windows-area): New command.
- * net/tramp.el (tramp-completion-file-name-handler): Revert change
- of 2006-04-17.
+ * ps-mule.el (ps-multibyte-buffer): Docstring fixes.
+ (ps-mule-encode-ethiopic): Make it clear that it's always defined.
+ (ps-mule-prepare-font-for-components, ps-mule-encode-header-string)
+ (ps-mule-encode-bit, ps-mule-encode-ucs2): Use dotimes.
+ (ps-mule-begin-job): Use dolist.
-2006-04-18 Carsten Dominik <dominik@science.uva.nl>
+2007-07-24 Michael Albinus <michael.albinus@gmx.de>
- * textmodes/org.el (org-insert-heading): Insert heading before
- current if at beginning of line.
- (org-todo, org-date): New faces.
- (org-table-align): Make sure tooltip window contains full text.
- (org-no-properties): New defsubst.
- (org-set-font-lock-defaults): Use new faces.
+ * subr.el (start-file-process-shell-command)
+ (process-file-shell-command): New defuns.
-2006-04-18 Nick Roberts <nickrob@snap.net.nz>
+ * progmodes/compile.el (compilation-start):
+ Apply `start-file-process-shell-command'.
- * progmodes/gud.el (gud-speedbar-item-info): Display frame address
- for root variables.
+2007-07-24 Alexandre Julliard <julliard@winehq.org>
- * progmodes/gdb-ui.el (gdb-pc-address): Rename from gdb-frame-address.
- (gdb-frame-address): Re-use to identify frame for watch expression.
- (gdb-var-list, gdb-var-create-handler): Add frame address for root
- variables.
- (gdb-init-1, gdb-source, gdb-post-prompt)
- (gdb-assembler-custom, gdb-invalidate-assembler): Use gdb-pc-address.
- (gdb-frame-handler): Get gdb-frame-address.
+ * vc-git.el (vc-git-checkout, vc-directory-exclusion-list): Fix typos.
-2006-04-17 Michael Albinus <michael.albinus@gmx.de>
+2007-07-24 Alan Mackenzie <acm@muc.de>
- Sync with Tramp 2.0.53.
+ * emacs-lisp/bytecomp.el (byte-compile-from-buffer):
+ Initialise byte-compile-unresolved-functions before rather than
+ after a compilation.
+ (byte-compile-unresolved-functions): Amplify doc string.
- * net/tramp.el (tramp-completion-mode): ?\t has event-modifier
- 'control. Reported by Matthias F,Av(Brste <slashdevslashnull@gmx.net>.
- (tramp-completion-file-name-handler): Add autoload cookie for
- adding to `file-name-handler-alist'.
+2007-07-24 Glenn Morris <rgm@gnu.org>
- * net/tramp-smb.el (tramp-smb-wait-for-output): Wait always for
- the prompt. If it returns earlier (when detecting an error
- message), the rest of the output will merge accidently with the
- output of the next command. Reported by M Jared Finder
- <jared@hpalace.com>.
+ * startup.el (normal-splash-screen): Use `emacs-copyright'.
- * net/tramp-vc.el (vc-user-login-name): Wrap defadvice with a test
- for `process-file', in order to let it work for older Emacsen too.
+ * calendar/cal-tex.el (cal-tex-holidays, cal-tex-diary)
+ (cal-tex-rules, cal-tex-buffer, cal-tex-24)
+ (cal-tex-cursor-month-landscape, cal-tex-cursor-month)
+ (cal-tex-cursor-week, cal-tex-cursor-week2)
+ (cal-tex-cursor-week-iso, cal-tex-week-hours)
+ (cal-tex-cursor-week-monday, cal-tex-weekly4-box)
+ (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week)
+ (cal-tex-cursor-filofax-daily, cal-tex-daily-page): Doc fix.
-2006-04-17 Ralf Angeli <angeli@iwi.uni-sb.de>
+ * calendar/cal-tex.el: Remove leading `*' from defcustom docs.
+ (cal-tex-daily-string, cal-tex-daily-start, cal-tex-daily-end)
+ (cal-tex-day-name-format, cal-tex-cal-one-month)
+ (cal-tex-cal-multi-month, cal-tex-myday, cal-tex-preamble)
+ (cal-tex-comment, cal-tex-nl, cal-tex-cmd, cal-tex-e-parbox)
+ (cal-tex-mini-calendar, cal-tex-em): Doc fix.
+ (cal-tex-list-holidays, cal-tex-cursor-year)
+ (cal-tex-cursor-year-landscape, cal-tex-year)
+ (cal-tex-cursor-filofax-year, cal-tex-cursor-month-landscape)
+ (cal-tex-cursor-month, cal-tex-insert-days)
+ (cal-tex-insert-day-names, cal-tex-insert-blank-days)
+ (cal-tex-first-blank-p, cal-tex-cursor-week)
+ (cal-tex-cursor-week2, cal-tex-cursor-week-iso)
+ (cal-tex-week-hours, cal-tex-cursor-week-monday)
+ (cal-tex-weekly4-box, cal-tex-cursor-filofax-2week)
+ (cal-tex-cursor-filofax-week, cal-tex-cursor-filofax-daily)
+ (cal-tex-cursor-day, cal-tex-daily-page, cal-tex-mini-calendar)
+ (cal-tex-latexify-list, cal-tex-previous-month)
+ (cal-tex-next-month, cal-tex-insert-preamble): General tidy-up and
+ modernization, including using dotimes rather than
+ calendar-for-loop.
+ (cal-tex-LaTeX-subst-list): Remove `@'.
+ (cal-tex-em, cal-tex-bf, cal-tex-Huge-bf, cal-tex-large-bf):
+ Use \textit and \textbf rather than \em and \it.
+
+ * calendar/cal-bahai.el (list-bahai-diary-entries)
+ * calendar/cal-hebrew.el (list-hebrew-diary-entries)
+ * calendar/cal-islam.el (list-islamic-diary-entries)
+ * calendar/calendar.el (generate-calendar, generate-calendar-month)
+ * calendar/diary-lib.el (diary-list-entries)
+ (mark-calendar-date-pattern): Use `dotimes' rather than
+ `calendar-for-loop'.
+
+ * calendar/calendar.el (calendar-for-loop): Doc fix.
- * textmodes/tex-mode.el (tex-font-lock-match-suscript): New function.
- (tex-font-lock-keywords-3): Use it.
+2007-07-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-16 Stefan Monnier <monnier@iro.umontreal.ca>
+ * ses.el (ses-cleanup): Prevent Emacs from spuriously checking if the
+ underlying file is uptodate.
- * newcomment.el (comment-add): New function.
- (comment-region-default, comment-dwim): Use it.
+2007-07-23 Christopher J. Madsen <cjm@cjmweb.net>
-2006-04-15 Michael Olson <mwolson@gnu.org>
+ * replace.el (perform-replace): Use isearch-no-upper-case-p.
- * emacs-lisp/tq.el: Improve comments.
- (tq-queue-head-question): New accessor function.
- (tq-queue-head-regexp, tq-queue-head-closure, tq-queue-head-fn):
- Update for modified queue structure.
- (tq-queue-add): Accept `question' argument.
- (tq-queue-pop): If a question is pending, send it.
- (tq-enqueue): Accept new optional argument `delay-question'.
- If this is non-nil, and at least one other question is pending a
- response, queue the question rather than sending it immediately.
+2007-07-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-15 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+ * vc-hooks.el (vc-mode-line-map): New const.
+ (vc-mode-line): Use it.
- * calendar/appt.el (appt-add): Check whether an appointment is
- already present in appt-time-msg-list. Simplify code.
+2007-07-23 Alexandre Julliard <julliard@winehq.org>
-2006-04-14 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-git.el (vc-git-delete-file, vc-git-rename-file)
+ (vc-git-unregister): New functions.
+ (vc-git-find-version): Use the result of ls-files as a parameter
+ for cat-file.
- * progmodes/cc-langs.el (c-mode-menu):
- Don't presume c-subword-mode is bound.
+2007-07-23 Michael Albinus <michael.albinus@gmx.de>
-2006-04-13 Bill Wohler <wohler@newt.com>
+ * net/tramp.el (tramp-perl-file-attributes)
+ (tramp-perl-directory-files-and-attributes)
+ (tramp-handle-file-attributes-with-stat)
+ (tramp-handle-directory-files-and-attributes-with-stat)
+ (tramp-convert-file-attributes): Handle huge file sizes.
- * cus-edit.el (customize-package-emacs-version-alist): Update docstring.
- (customize-package-emacs-version): Use cdr instead of cadr now
- that alists use dotted pairs.
+2007-07-23 Juri Linkov <juri@jurta.org>
- * custom.el (defcustom): Fix docstring for :package-version.
+ * isearch.el (isearch-message-function): New variable.
+ (isearch-update, isearch-search): Use it.
-2006-04-13 Michael Albinus <michael.albinus@gmx.de>
+ * simple.el (goto-history-element): New function created from
+ next-history-element.
+ (next-history-element): Most code moved to goto-history-element.
+ Call goto-history-element with (- minibuffer-history-position n).
+ (previous-history-element): Call goto-history-element with (+
+ minibuffer-history-position n).
+ (minibuffer-setup-hook): Add minibuffer-history-isearch-setup.
+ (minibuffer-history-isearch-message-overlay): New buffer-local variable.
+ (minibuffer-history-isearch-setup, minibuffer-history-isearch-end)
+ (minibuffer-history-isearch-search, minibuffer-history-isearch-message)
+ (minibuffer-history-isearch-wrap, minibuffer-history-isearch-push-state)
+ (minibuffer-history-isearch-pop-state): New functions.
- * net/tramp.el (tramp-display-shell-command-buffer): New defvar.
- (tramp-handle-shell-command): Display output buffer only when
- `tramp-display-shell-command-buffer' is true.
- (tramp-handle-process-file): Set `tramp-display-shell-command-buffer'.
+2007-07-23 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+ * vc-hooks.el (vc-stay-local-p): Fix bug: Avoid remove-if-not.
+ Also, if FILE is a list, return non-nil if any of its elements
+ should stay local. Update docstring.
- * textmodes/org.el (org-set-autofill-regexps): Set only the local
- values of `adaptive-fill-regexp' and `adaptive-fill-function'.
+2007-07-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-13 Romain Francoise <romain@orebokech.com>
+ * emacs-lisp/copyright.el (copyright-update-year): Fix 2007-05-25
+ change by reverting a small part.
- * pcvs-parse.el (cvs-parse-table): Use `with-temp-buffer' to avoid
- leaving temporary .cvsignore buffers behind.
+2007-07-23 Richard Stallman <rms@gnu.org>
-2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+ * progmodes/octave-inf.el (inferior-octave-prompt): Accept .exe.
- * textmodes/org.el (org-set-regexps-and-options)
- (org-get-current-options): Better names for the startup folding
- options.
+2007-07-23 Dan Nicolaescu <dann@ics.uci.edu>
-2006-04-13 Thien-Thi Nguyen <ttn@gnu.org>
+ * vc-git.el (vc-git-checkin): Delete unused parameter and the code
+ handling it. Use vc-git-command.
+ (vc-git-find-version, vc-git-diff-tree): New functions.
+ (vc-git-revert): Use vc-git-command.
+ (vc-git--run-command): Delete.
- * vc.el (vc-annotate): Arrange for point to end up at the same
- line number as in the original, but only when using a new buffer.
+2007-07-23 Alexandre Julliard <julliard@winehq.org>
-2006-04-12 Stuart Herring <herring@lanl.gov> (tiny change)
+ * vc-git.el (vc-git-workfile-unchanged-p): Update comment.
- * files.el (hack-one-local-variable-eval-safep):
- Recognize `edebug-form-spec' for `put', but only if it passes
- `edebug-basic-spec'. Generalize `put' handling.
+2007-07-20 Kenichi Handa <handa@m17n.org>
- * emacs-lisp/edebug.el (edebug-basic-spec): New function for
- vetting file-local form specs.
+ * international/utf-8.el (utf-8-post-read-conversion):
+ Temporarily bind utf-8-compose-scripts to nil while running
+ *-compose-region functions.
- * allout.el (allout-layout): Autoload its `safe-local-variable'
- property.
+2007-07-23 Dan Nicolaescu <dann@ics.uci.edu>
-2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+ * vc-git.el: Update status.
+ (vc-directory-exclusion-list): Use eval-after-load.
- * textmodes/org.el (org-ctrl-c-ctrl-c): Improve documentation string.
- (org-agenda-mouse-1-follows-link)
- (org-mouse-1-follows-link): New options.
- (org-format-agenda-item): Fix bug if TAGS is nil.
- (org-agenda-get-scheduled): Quote `priority' symbol in plist.
+2007-07-22 Nick Roberts <nickrob@snap.net.nz>
-2006-04-13 Nick Roberts <nickrob@snap.net.nz>
+ * bindings.el (mode-line-remote): New variable.
+ (help-echo): Add to default values of mode-line-format.
- * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers):
- GDB 6.1+ gives full filename for "info sources" so use
- file-name-nondirectory.
+ * files.el: Mark mode-line-remote as risky.
-2006-04-12 Romain Francoise <romain@orebokech.com>
+2007-07-22 Juri Linkov <juri@jurta.org>
- * subr.el (read-passwd): Bind `message-log-max' to nil.
+ * isearch.el (isearch-edit-string): Save old point and
+ isearch-other-end to old-point and old-other-end before reading
+ the search string from minibuffer. After exiting minibuffer set
+ point to old-other-end if point and the search direction is the
+ same as before reading the search string.
+ (isearch-del-char): Don't set isearch-yank-flag to t. Put point
+ to isearch-other-end. Instead of isearch-search-and-update call
+ three functions isearch-search, isearch-push-state and isearch-update.
-2006-04-12 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-07-22 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/perl-mode.el (perl-indent-new-calculate):
- Recompute parse-start after jumping backward by a whole sexp.
-
-2006-04-11 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-git.el (vc-git-register, vc-git-checkin): Use vc-git-command,
+ deal with multiple file arguments.
+ (vc-git-print-log): Deal with multiple file arguments.
- * vc.el (vc-ensure-vc-buffer): Only change current-buffer, not the
- window configuration.
- (vc-annotate-display-select): Select the buffer so that current-buffer
- (and selected-window) is the output buffer at the end of vc-annotate.
-
-2006-04-11 J.D. Smith <jdsmith@as.arizona.edu>
-
- * vc.el (vc-annotate-color-map): Add custom TTY color map for
- 8-color terminals, to use all of the colors in a sensible order.
- 256-color terminals work well with the standard map.
- (vc-annotate-lines): Only strip the first color character if it
- is "#", to allow for terminal-style named colors.
- (vc-annotate-warp-version): Pass buf to `goto-line' to ensure
- the correct buffer is scrolled.
-
-2006-04-11 Richard Stallman <rms@gnu.org>
-
- * emacs-lisp/bytecomp.el (byte-compile-file):
- Bind enable-local-variables to :safe, and make normal-mode obey it.
-
- * files.el (enable-local-variables): Allow value :safe.
- (normal-mode): Doc fix.
- (hack-local-variables): Implement enable-local-variables = :safe.
- (hack-local-variables-confirm): Don't prevent quitting.
-
-2006-04-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * loadhist.el (unload-feature): A bit of sanity check of
- load-history entries. Cancel timer-vars before unbinding them.
-
- * hexl.el (hexl-isearch-search-function): Fix regexp-building code to
- quote special chars, and make the trick work on the hex part of the
- buffer as well.
- (hexl-mode, hexl-save-buffer, hexl-mode-exit)
- (hexl-maybe-dehexlify-buffer): Use restore-buffer-modified-p.
-
- * startup.el (normal-splash-screen): Fix last change so we don't wait
- 2 minutes if we don't show the splash screen.
-
-2006-04-11 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-export-plain-list-max-depth)
- (org-table-spaces-around-separators)
- (org-radio-targets, org-activate-camels)
- (org-table-spaces-around-invisible-separators): Options removed.
- (org-time-stamp-rounding-minutes, org-remember-templates)
- (org-ellipsis, org-activate-links, org-descriptive-links):
- New options.
- (org-remember-apply-template, org-current-time)
- (org-finish-edit-table-field)
- (org-link-unescape, org-link-escape)
- (org-string-width, org-table-clean-line, org-html-do-expand)
- (org-edit-agenda-file-list, org-store-new-agenda-file-list)
- (org-read-agenda-file-list): New functions.
- (org-table-edit-field)
- (org-table-create-or-convert-from-region): New commands
- (org-table-toggle-vline-visibility): Command removed.
- (org-table-convert-region): Made a command.
- (orgtbl-deleta-backward-char, orgtbl-delete-char): Remove commands.
- Replace with the normal org- functions.
- (org-self-insert-command): Don't trigger realign unnecessarily
- when blanking a field that is not full.
- (org-mode): `Set buffer-invisibility-spec' for links.
- (org-activate-links2): Hide link part and only show descriptive
- part of the link.
- (org-insert-link): Modify for new linking system.
- (org-store-link): Store description separately, for use by
- `org-insert-link'.
- (org-table-align): Use `org-string-width'.
- (defgroup): Completely new group structure for custom variables.
- (org-agenda-files): Option: Single file name allowed. Function:
- Optional argument unrestrited means ignore any restricitons.
- (org-install-agenda-files-menu): Find a buffer in Org-mode before
- trying to modify the menu. Use generalized access to
- `org-agenda-files.'
- (org-agenda-list, org-todo-list, org-cycle-agenda-files)
- (org-agenda-file-to-front, org-remove-file, org-diary)
- (org-tags-view, org-export-icalendar-all-agenda-files)
- (org-export-icalendar-combine-agenda-files): Use generalized
- access to `org-agenda-files'.
- (org-remember-handler): Correctly preserve heading if present.
- (org-table-insert-row, org-table-insert-hline): Deal with
- invisible characters.
-
-2006-04-10 J.D. Smith <jdsmith@as.arizona.edu>
-
- * vc.el (vc-annotate-display-mode): Made default 'fullscale.
- (vc-annotate-color-map): New 18 element constant
- value/saturation, rotating hue colormap, from red->blue.
- (vc-annotate-mode-menu): "Default" -> "By Color Map Range".
- (vc-annotate-display-select): Switch to annotate-mode elsewhere.
- (vc-annotate): To avoid killing the required local variables,
- set them before the end of `with-output-to-temp-buffer', and
- after first switching to annotate-mode.
- (vc-annotate-warp-version): Add buffer argument in goto-line to
- ensure annotation, not source, is scrolled.
-
-2006-04-10 Bill Wohler <wohler@newt.com>
-
- * custom.el (defcustom, custom-handle-keyword):
- Add :package-version keyword.
- (custom-add-package-version): New function. Sets value of new
- property 'custom-package-version from :package-version keyword.
- (defcustom): Create Common Keywords section in docstring.
- (defface, defgroup): Replace definitions of a select few keywords
- with a reference to the Common Keywords in defcustom.
- (defcustom, defface, defgroup): Replace reference to Customization
- chapter in manual with hyperlink.
-
- * cus-edit.el (customize-package-emacs-version-alist): New variable.
- (customize-changed-options): Add check for custom-package-version.
- (customize-package-emacs-version): New function to look up Emacs
- version corresponding to the given package version.
-
- * emacs-lisp/find-func.el (find-function-regexp): Allow dashes in
- defun name, in similar fashion to find-variable-regexp.
-
-2006-04-10 Eli Zaretskii <eliz@gnu.org>
-
- * international/mule-cmds.el (set-locale-environment): Fix last
- change for when the locale's preferences don't specify any encoding.
-
-2006-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/find-func.el (find-function-search-for-symbol): Fix regexp
- so the defined var/fun doesn't need to be quoted.
-
-2006-04-10 Richard Stallman <rms@gnu.org>
-
- * finder.el (finder-mode-map): Add n and p bindings.
-
-2006-04-10 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-init-1): Re-initialise gdb-main-file to nil.
- (gdb-get-version): Make it work for pre "interpreter mi" (GDB 5.3?).
- (gdb-setup-windows): Put something in source window if we can't find
- the source file.
- (gdb-frame-handler): Make it work again with just assembly.
- (gdb-data-list-register-values-handler): Make it work when there is
- no stack.
-
-2006-04-09 Richard Stallman <rms@gnu.org>
-
- * mail/rmail.el (rmail-mime-charset-pattern): Ignore format and delsp
- specs while looking for charset.
-
- * textmodes/picture.el (picture-mode-exit): Run picture-mode-exit-hook.
-
- * play/landmark.el (lm-font-lock-face-O, lm-font-lock-face-X):
- Make them faces.
- (lm-font-lock-keywords): Update appropriately.
-
-2006-04-10 Kim F. Storm <storm@cua.dk>
-
- * simple.el (filter-buffer-substring): Add NOPROPS arg, so
- it can also replace buffer-substring-no-properties.
-
- * emulation/cua-base.el (cua-delete-region, cua-paste)
- (cua-repeat-replace-region): Use filter-buffer-substring.
-
- * emulation/cua-gmrk.el (cua-copy-region-to-global-mark)
- (cua-cut-region-to-global-mark): Likewise.
-
- * emulation/cua-rect.el (cua--extract-rectangle)
- (cua-incr-rectangle, cua--rectangle-aux-replace): Likewise.
-
-2006-04-09 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-entry-update): New optional arg
- entry-type. Add field delimiters to numerical fields if they are
- not present.
-
-2006-04-09 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-find-text-internal): Add new element
- string-const to return value.
- (bibtex-remove-delimiters): Use it.
-
-2006-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/bytecomp.el (byte-compile-form): Don't call
- cl-byte-compile-compiler-macro unless it exists.
-
-2006-04-08 Eli Zaretskii <eliz@gnu.org>
-
- * files.el (hack-local-variables-confirm) <offer-save>:
- Clarify message text. Suggested by Ralf Angeli.
-
-2006-04-08 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * rect.el (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
- (delete-extract-rectangle-line): Use `filter-buffer-substring'
- instead of `buffer-substring' and `delete-region'. (Most of the
- code actually copied from `kill-region'.)
+2007-07-22 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-08 Ryan Yeske <rcyeske@gmail.com>
+ * diff-mode.el (diff-refine-ignore-spaces-hunk): Rename from
+ diff-refine-hunk. Adjust users.
+ (diff-unified-hunk-p, diff-splittable-p): New functions.
+ (diff-mode-menu): Use it to disable Split when it doesn't work.
- * net/rcirc.el (rcirc-default-server): Rename from rcirc-server.
- (rcirc-default-port): Rename from rcirc-port.
- (rcirc-default-nick): Rename from rcirc-nick.
- (rcirc-default-user-name): Rename from rcirc-user-name.
- (rcirc-default-user-full-name): Rename from rcirc-user-full-name.
- (rcirc-low-priority-flag): New variable.
- (rcirc-decode-coding-system): New defcustom.
- (rcirc-encode-coding-system): New defcustom.
- (rcirc-coding-system-alist): New defcustom.
- (rcirc-multiline-major-mode): New defcustom.
- (rcirc-nick): New internal variable.
- (rcirc-process): Remove variable.
- (rcirc-server-buffer): New variable.
- (rcirc): Update to use rcirc-default-* variables above.
- (rcirc-connect): Do not add window-configuration-hook-here.
- (rcirc-server): New internal variable.
- (rcirc-connect): Do not send keepalive pings if
- rcirc-keepalive-seconds is nil.
- (with-rcirc-server-buffer): New macro.
- (rcirc-send-string): Encode with rcirc-encode-coding-system.
- (rcirc-server-name): Rename from rcirc-server.
- (rcirc-buffer-process): New function.
- (rcirc-buffer-nick): New function.
- (rcirc-buffer-target): Remove function.
- (set-rcirc-decode-coding-system, set-rcirc-encode-coding-system):
- New commands.
- (rcirc-mode-map): Change binding of C-c C-l to
- rcirc-toggle-low-priority.
- (rcirc-mode): Initialize coding system based on
- rcirc-coding-system-alist. New change-major-mode-hook to part the
- channel on a mode change. Make kill-buffer-hook buffer-local.
- (rcirc-change-major-mode-hook): New function.
- (rcirc-clean-up-buffer): Rename from rcirc-kill-buffer-hook-1.
- (rcirc-last-post-time): New variable.
- (rcirc-process-message): Store the last time user posted a message
- to this target.
- (rcirc-multiline-minor-mode): New mode.
- (rcirc-multiline-minor-mode-map): New mode map.
- (rcirc-edit-multiline): Put multiline-edit buffer in
- rcirc-multiline-major-mode along with rcirc-multiline-minor-mode.
- (rcirc-print): Ignore any line starting with an ignored nick.
- (rcirc-print): Decode using rcirc-decode-coding-system.
- (rcirc-track-minor-mode): Update global-mode-string when disabling
- this mode.
- (minor-mode-alist): Add LowPri indicator.
- (rcirc-toggle-low-priority): New function.
- (rcirc-last-non-irc-buffer): Prefix arg now no means switch to
- next lowpriority buffer with activity.
- (rcirc-record-activity): Sort buffers in rcirc-activity by the
- last time the user posted a message in to the target.
- (rcirc-update-activity-string): New formatting for low priority
- buffers.
- (rcirc-split-activity): New function.
- (rcirc-handler-PART, rcirc-handler-KICK)
- (rcirc-handler-PART-or-KICK): Kick responses are printed properly.
- (rcirc-nick-away-alist): New variable.
- (rcirc-handler-301): New handler. Away messages are printed once
- per change.
+2007-07-22 Dan Nicolaescu <dann@ics.uci.edu>
-2006-04-08 Eli Zaretskii <eliz@gnu.org>
+ * diff-mode.el (diff-mode-menu): New entries.
- * info.el (Info-follow-nearest-node): Doc fix.
+2007-07-22 Stefan Monnier <monnier@iro.umontreal.ca>
- * international/mule-cmds.el (set-locale-environment): Make sure
- the coding-system preferred by the locale's language has the same
- EOL conversion type as the original buffer-file-coding-system.
- (locale-language-names): Add a few MS Windows language codes.
+ * diff-mode.el (diff-unified->context): Use the new `apply' undo entry
+ if applicable, so as to save undo-log space.
-2006-04-07 Richard Stallman <rms@gnu.org>
+ * diff-mode.el (diff-find-file-name): Add arg `batch'.
- * simple.el (eval-expression): Doc fix.
+ * diff-mode.el (diff-beginning-of-file-and-junk): New function.
+ (diff-file-kill): Use it.
+ (diff-beginning-of-hunk): Add arg `try-harder' using it.
+ (diff-restrict-view, diff-find-source-location, diff-refine-hunk):
+ Use it so they find the hunk even when we're in the file header.
- * emacs-lisp/lisp-mode.el (eval-print-last-sexp, eval-last-sexp)
- (eval-defun): Doc fixes.
+2007-07-22 Dan Nicolaescu <dann@ics.uci.edu>
-2006-04-07 Reiner Steib <Reiner.Steib@gmx.de>
+ * vc-git.el (vc-git-revision-granularity, vc-git-root)
+ (vc-git-command, vc-git-dir-state, vc-git-dired-state-info)
+ (vc-git-create-repo): New functions.
+ (vc-git-registered): New autoloaded function definition.
+ (vc-git-registered): Use vc-git-root.
+ (vc-git-responsible-p): New defalias.
+ (vc-git-annotate-extract-revision-at-line): Uncomment.
+ (vc-git-print-log): Add the file name to the log.
+ (vc-git-log-view-mode): New derived mode.
+ (vc-git-diff, vc-git-annotate-command): Use vc-git-command.
- * pgg-gpg.el: Revert to revision 1.8 to allow the use of gpg-agent.
+2007-07-22 Michael Albinus <michael.albinus@gmx.de>
-2006-04-07 Nick Roberts <nickrob@snap.net.nz>
+ * progmodes/grep.el (grep-compute-defaults): Keep default values.
- * progmodes/gdb-ui.el (gdb-init-2): Set current filename using
- GDB list command without argument for greater generality.
+2007-07-22 Ralf Angeli <angeli@caeruleus.net>
-2006-04-06 Reiner Steib <Reiner.Steib@gmx.de>
+ * textmodes/reftex.el (reftex-access-parse-file): Create parse
+ file in a way that does not interfere with recentf mode.
+ (reftex-access-parse-file): Do not risk destroying an existing
+ buffer.
- * subr.el (string-or-null-p): New function.
+2007-07-22 Alexandre Julliard <julliard@winehq.org>
- * textmodes/paragraphs.el (sentence-end): Use string-or-null-p.
+ * vc-git.el: New file.
- * textmodes/ispell.el (ispell-local-dictionary): Use string-or-null-p.
+2007-07-22 Stefan Monnier <monnier@iro.umontreal.ca>
- * files.el: Update comment about safe-local-variable declarations.
+ * textmodes/tex-mode.el (tex-font-script-display): Change default.
-2006-04-06 J.D. Smith <jdsmith@as.arizona.edu>
+2007-07-22 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/idlwave.el: Updated to IDLWAVE version 6.0.
- See idlwave.org.
+ * vc-cvs.el (vc-cvs-mode-line-string): Add support for tooltips
+ for branches and new files.
- * progmodes/idlw-shell.el: Updated to IDLWAVE version 6.0.
- See idlwave.org. Includes code to obsolete idlw-rinfo.el.
+ * vc-hooks.el (vc-default-mode-line-string): Move mouse-face and
+ local-map handling ...
+ (vc-mode-line): ... here. Improve handling of help-echo.
- * progmodes/idlw-help.el: Updated to IDLWAVE version 6.0.
- See idlwave.org.
+ * vc.el (mode-line-string): Document help-echo usage.
- * progmodes/idlw-complete-structtag.el: Updated to IDLWAVE
- version 6.0 (minimal changes). See idlwave.org.
+2007-07-22 Michael Albinus <michael.albinus@gmx.de>
- * progmodes/idlw-toolbar.el: Updated to IDLWAVE version
- 6.0 (minimal changes). See idlwave.org.
+ Sync with Tramp 2.1.10.
- * progmodes/idlw-rinfo.el: File obsoleted and removed.
+ * net/tramp.el (tramp-get-ls-command): Fix typo.
-2006-04-06 Romain Francoise <romain@orebokech.com>
+ * net/trampver.el: Update release number.
- * pgg-gpg.el: Sync back with Gnus 5.10, reverting changes that add
- symmetric encryption features and a new asynchronous interface to
- GnuPG. This new version is version 1.4, plus whitespace changes.
+2007-07-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2006-04-06 Reiner Steib <Reiner.Steib@gmx.de>
+ * startup.el (command-line-x-option-alist): Use x-handle-no-bitmap-icon.
- * files.el: Move some `safe-local-variable' declarations to the
- respective files.
+ * term/x-win.el (x-handle-no-bitmap-icon): New function.
- * textmodes/ispell.el (ispell-check-comments)
- (ispell-local-dictionary): Mark as safe.
+2007-07-22 Martin Rudalics <rudalics@gmx.at>
- * abbrev.el (abbrev-mode): Mark as safe.
+ * add-log.el (change-log-fill-parenthesized-list): New function.
+ (change-log-indent): Call change-log-fill-parenthesized-list.
+ (change-log-fill-paragraph): Bind fill-indent-according-to-mode to t.
+ Have lines with leading asterisk start a paragraph.
- * add-log.el (change-log-default-name): Mark as safe.
+2007-07-21 Jay Belanger <jay.p.belanger@gmail.com>
- * textmodes/reftex-vars.el (reftex-vref-is-default)
- (reftex-fref-is-default, reftex-level-indent)
- (reftex-guess-label-type): Mark as safe.
+ * calc/calc-math.el (math-emacs-precision)
+ (math-largest-emacs-expt, math-smallest-emacs-expt):
+ New variables.
+ (math-use-emacs-fn): New function.
+ (math-exp-raw): Evaluate with `math-use-emacs-fn', when
+ appropriate.
- * textmodes/fill.el (colon-double-space): Mark as safe.
+2007-07-21 Thien-Thi Nguyen <ttn@gnuvola.org>
- * textmodes/paragraphs.el (paragraph-start, paragraph-separate)
- (sentence-end-double-space, sentence-end-without-period)
- (sentence-end-without-space, sentence-end, sentence-end-base)
- (page-delimiter, paragraph-ignore-fill-prefix): Mark as safe.
+ * image-dired.el (image-dired-sane-db-file): New func.
+ (image-dired-write-tags, image-dired-remove-tag)
+ (image-dired-list-tags, image-dired-write-comments)
+ (image-dired-get-comment, image-dired-mark-tagged-files)
+ (image-dired-create-gallery-lists): Call new func.
+ Reported by Dieter Wilhelm <dieter@duenenhof-wilhelm.de>.
-2006-04-06 Kim F. Storm <storm@cua.dk>
+2007-07-21 Dan Nicolaescu <dann@ics.uci.edu>
- * ido.el (ido-mode): Remove ido-ignore-unc-host-regexps from
- the :set-after list.
- (ido-downcase-unc-hosts): New user option. Default on.
- (ido-ignore-unc-host-regexps): Don't reset ido-unc-hosts-cache
- when it is set, as regexps are now applied on the fly.
- (ido-unc-hosts): Keep all known hosts in ido-unc-hosts-cache.
- Make C-a DTRT--filter hosts through ido-ignore-unc-host-regexps
- on the fly, but only when ido-process-ignore-lists is set.
- Do case insensitive filtering if ido-downcase-unc-hosts is set.
- Only downcase names if ido-downcase-unc-hosts is set.
+ * vc-hg.el (vc-hg-dir-state): Fix loop.
+ (vc-hg-print-log): Fix expected return value for vc-hg-command.
+ (vc-hg-next-version, vc-hg-delete-file, vc-hg-rename-file)
+ (vc-hg-register, vc-hg-create-repo, vc-hg-checkin)
+ (vc-hg-revert): Likewise.
+ (vc-hg-revision-table, vc-hg-revision-completion-table): New
+ functions.
-2006-04-06 Juanma Barranquero <lekktu@gmail.com>
+2007-07-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * ido.el (ido-unc-hosts-cache): Fix typo in docstring.
+ * add-log.el (change-log-resolve-conflict): Don't lose data if the
+ merge fails.
- * woman.el (WoMan-xref-man-page): Fix call to `substring'.
+2007-07-20 Dan Nicolaescu <dann@ics.uci.edu>
-2006-04-05 Kim F. Storm <storm@cua.dk>
+ * progmodes/compile.el (compilation-auto-jump-to-first-error):
+ Add group and version.
- * ido.el (ido-mode): Set after ido-unc-hosts and
- ido-ignore-unc-host-regexps.
- (ido-save-history): Save ido-unc-hosts-cache.
- (ido-load-history): Load ido-unc-hosts-cache.
- (ido-reread-directory): Refresh unc hosts cache in // dir.
+2007-07-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * startup.el (fancy-splash-screens): Set emulation-mode-map-alists
- to nil while displaying slash screen.
+ * add-log.el (add-log-file-name): Use file-relative-name.
+ (add-change-log-entry): Delay reading
+ add-log-(full-name|mailing-address) to after we've switched to the
+ ChangeLog buffer so we get the right value.
+ (add-change-log-entry, add-log-current-defun, change-log-merge):
+ Use derived-mode-p rather than checking major-mode directly.
-2006-04-05 Daiki Ueno <ueno@unixuser.org>
+ * pcvs.el (cvs-mode-add-change-log-entry-other-window): Use a directory
+ name for buffer-file-name if it refers to a directory.
- * pgg-gpg.el (pgg-gpg-encrypt-region, pgg-gpg-sign-region):
- Wait for BEGIN_SIGNING too, new in GnuPG 1.4.3.
+ * vc-arch.el (vc-arch-diff): Fix last change.
-2006-04-05 Kenichi Handa <handa@m17n.org>
+ * progmodes/compile.el (compilation-start): Remember the original
+ directory in a buffer-local compilation-directory.
+ (compile): Set the global value of compilation-directory.
+ (recompile): Use compilation-directory even in the compilation buffer.
- * international/characters.el: Setup cases of Latin, Greek, and
- Cyrillic characters in CJK charsets.
+2007-07-20 Dan Nicolaescu <dann@ics.uci.edu>
-2006-03-29 Daiki Ueno <ueno@unixuser.org>
+ * vc-hg.el (vc-hg-diff): Use vc-hg-command.
- * pgg-gpg.el (pgg-gpg-start-process): Don't bind
- default-enable-multibyte-characters. This reverts the change from
- revision 6.17 which is no longer necessary because the passphrase
- is sent separately now. GnuPG messages are unreadable under
- multibyte locales with default-enable-multibyte-characters set to nil.
+2007-07-20 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2006-04-04 Andreas Schwab <schwab@suse.de>
+ * ps-print.el: Problem with foreground and background color when
+ printing a buffer with and without faces. Reported by Christian
+ Schlauer <cs-muelleimer-rubbish.bin@arcor.de>.
+ (ps-print-version): New version 6.7.5.
+ (ps-default-fg): Change default value to nil, so black color is used
+ when a face does not specify a foreground color.
+ (ps-default-bg): Change default value to nil, so white color is used
+ for background color.
+ (ps-begin-job): Fix code.
- * files.el: Mark `left-margin', `byte-compile-dynamic-docstrings'
- and `byte-compile-warnings' as `safe-local-variable'.
+2007-07-20 Eli Zaretskii <eliz@gnu.org>
-2006-04-04 Dan Nicolaescu <dann@ics.uci.edu>
+ * makefile.w32-in (install-lisp-SH): Don't create subdirectories
+ in $(INSTALL_DIR)/lisp/ if they already exist.
- * man.el (Man-mode-map): Restore the \r binding.
- (Man-abstract-xref-man-page): If Man-target-string is a function,
- call it.
- (Man-highlight-references): Use Man-default-man-entry to get the
- target. Deal with xrefs too.
- (Man-highlight-references0): Don't call the target function.
+2007-07-20 Dhruva Krishnamurthy <dhruvakm@gmail.com> (tiny change)
- * woman.el (WoMan-xref-man-page): Strip the section number, woman
- cannot deal with it.
+ * makefile.w32-in (install-lisp-CMD): Don't create subdirectories
+ in $(INSTALL_DIR)/lisp/ if they already exist.
-2006-04-04 Daiki Ueno <ueno@unixuser.org>
+2007-07-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * pgg-gpg.el: Clean up process buffers every time gpg processes
- complete.
+ * progmodes/vera-mode.el (vera-re-search-forward)
+ (vera-re-search-backward): Remove use of store-match-data.
+ (vera-mode-map): Move initialization into declaration.
-2006-04-04 Kenichi Handa <handa@m17n.org>
+ * progmodes/flymake.el (flymake-buildfile-dirs): Remove.
+ (flymake-find-buildfile): Use locate-dominating-file.
- * sort.el (sort-build-lists): Don't bind inhibit-field-text-motion
- here.
- (sort-lines, sort-numeric-fields, sort-fields, sort-columns):
- Temporarily bind inhibit-field-text-motion to t.
+ * vc.el (vc-delistify): Use mapconcat.
+ (vc-do-command): Minor simplification.
+ (vc-expand-dirs): Use push.
-2006-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-mcvs.el (vc-mcvs-create-repo):
+ * vc-cvs.el (vc-cvs-create-repo): Remove.
- * startup.el (normal-splash-screen): Only set mode-line-format in the
- splash buffer, so as not to interfere when debugging the code.
- Ignore errors when switching buffer.
+ * vc-hooks.el (vc-find-root): Fix case where `file' is the current
+ directory and the root as well.
-2006-04-03 Romain Francoise <romain@orebokech.com>
+2007-07-20 Dan Nicolaescu <dann@ics.uci.edu>
- * dired.el (dired-dnd-protocol-alist): Fix typo.
+ * vc-hooks.el (vc-default-workfile-unchanged-p): Pass a list
+ instead of a file.
-2006-04-03 Reiner Steib <Reiner.Steib@gmx.de>
+ * vc-hg.el (vc-hg-print-log): Deal with multiple file arguments.
+ (vc-hg-registered): Replace if with when.
+ (vc-hg-state): Deal with nonexistent files and handle removed files.
+ (vc-hg-dir-state, vc-hg-dired-state-info): New functions.
+ (vc-hg-checkout): Re-enable.
+ (vc-hg-create-repo): Fix typos.
+ (vc-hg-print-log): Fix for multiple files.
+ (vc-hg-workfile-unchanged-p): New function.
- * savehist.el (savehist): Add :version.
- (savehist-ignored-variables): New variable.
- (savehist-minibuffer-hook): Don't save variables listed in
- `savehist-ignored-variables'.
+ * vc.el: Fix typo.
+ (vc-print-log): Fix call to print-log.
+ (vc-default-comment-history): Likewise.
+ (vc-directory-exclusion-list): Add .hg and .bzr.
+ (vc-diff-internal): Pass a list instead of a file.
- * dired.el (dired-dnd-protocol-alist): Mention that change does
- only apply to new buffers in doc string.
+ * vc-mcvs.el (vc-mcvs-create-repo): Fix typos.
-2006-04-03 Lennart Borgman <lennart.borgman.073@student.lu.se> (tiny change)
+ * vc-bzr.el (vc-bzr-create-repo): New function.
- * recentf.el (recentf-open-files-item): Include newline in button
- field, so opening a file will work, when the point is at the end
- of the file name. Allow, for example, to [i]search a file by
- extension and just push RET to open it.
+2007-07-19 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-03 Daiki Ueno <ueno@unixuser.org>
+ * vc-hooks.el (vc-find-root): Walk up the tree to find an existing
+ `file' from which to start the search.
- * pgg-gpg.el (pgg-gpg-process-filter)
- (pgg-gpg-wait-for-completion): Check if buffer is alive.
+2007-07-19 Eric S. Raymond <esr@snark.thyrsus.com>
- * pgg-gpg.el (pgg-gpg-process-sentinel): Don't remove GNUPG:
- lines, temporary fix.
+ * vc-cvs.el (vc-cvs-checkin, vc-cvs-diff): Finish transition from
+ having a single file argument to having a list of files as the
+ first argument.
-2006-04-02 Dan Nicolaescu <dann@ics.uci.edu>
+2007-07-19 Stefan Monnier <monnier@iro.umontreal.ca>
- * ibuf-macs.el (define-ibuffer-column): Document the new parameter.
+ * files.el (locate-dominating-file): New function.
-2006-04-02 Richard Stallman <rms@gnu.org>
+2007-07-18 Michael Albinus <michael.albinus@gmx.de>
- * progmodes/compile.el (compilation-message-face): Make it defcustom.
+ * progmodes/grep.el (grep-host-defaults-alist): New defvar.
+ (grep-compute-defaults): Use it.
-2006-04-02 Dan Nicolaescu <dann@ics.uci.edu>
+2007-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
- * ibuf-macs.el (define-ibuffer-column): Add a new key:
- header-mouse-map.
+ * uniquify.el: Docstring fixes.
- * ibuffer.el (ibuffer-name-header-map, ibuffer-size-header-map)
- (ibuffer-mode-header-map): New keymaps.
- (ibuffer-update-title-and-summary): Enable mouse face highlighting
- and keybindings for column headers.
- (name, size, mode) <define-ibuffer-column>: Add a header-mouse-map
- property.
+2007-07-18 Eric S. Raymond <esr@snark.thyrsus.com>
-2006-04-02 Drew Adams <drew.adams@oracle.com>
+ * vc.el (revision-granularity, create-repo): Document new vc
+ backend properties.
+ (vc-rollback): Renamed from vc-cancel-version. Update
+ references. Pass a list instead of a file.
+ (vc-revert): Renamed from vc-revert-buffer. Update references.
+ (vc-delistify, vc-expand-dirs): New functions.
+ (vc-do-command): Rename FILE to FILE-OR-LIST and deal with a list
+ of files instead of a single file.
+ (vc-position-context, vc-resync-window, vc-diff-internal)
+ (vc-print-log): Pass a list instead of a file.
- * speedbar.el (speedbar-after-create-hook): Doc fix.
+ * vc-hooks.el (vc-stay-local-p, vc-backend)
+ (vc-backend-subdirectory-name): Work on a file list, not a single
+ file.
+ (vc-workfile-version): Update docstring.
+ (vc-menu-map): Use vc-rollback instead of vc-cancel-version and
+ vc-revert instead of vc-revert-buffer.
+ (vc-prefix-map): Likewise. Bind vc-update.
-2006-04-02 Michael Ernst <mernst@alum.mit.edu>
+ * vc-svn.el (vc-svn-revision-granularity, vc-svn-create-repo)
+ (vc-svn-wash-log): New functions.
+ (vc-svn-register, vc-svn-checkin, vc-svn-print-log)
+ (vc-svn-command): Deal with a list of files, not a single file.
- * shell.el (shell-directory-tracker)
- (shell-dynamic-complete-command): Doc fixes.
+ * vc-rcs.el (vc-rcs-revision-granularity, vc-rcs-create-repo)
+ (vc-rcs-wash-log): New functions.
+ (vc-rcs-register, vc-rcs-checkin, vc-rcs-diff, vc-rcs-print-log):
+ Deal with a list of files, not a single file.
+ (vc-rcs-rollback): Likewise. Rename from vc-rcs-cancel-version.
-2006-04-01 Matt Hodges <MPHodges@member.fsf.org>
+ * vc-sccs.el (vc-sccs-revision-granularity, vc-sccs-wash-log): New
+ functions.
+ (vc-sccs-register, vc-sccs-checkin, vc-sccs-diff): Deal with a
+ list of files, not a single file.
- * pcomplete.el (pcomplete-show-completions): Recognize TAB on text
- terminals.
+ * vc-mcvs.el (vc-mcvs-revision-granularity, vc-mcvs-create-repo):
+ New functions.
+ (vc-mcvs-register, vc-mcvs-checkin, vc-mcvs-print-log)
+ (vc-mcvs-diff): Deal with a list of files, not a single file.
-2006-04-01 Kim F. Storm <storm@cua.dk>
+ * vc-hg.el (vc-hg-revision-granularity, vc-hg-create-repo): New
+ functions.
+ (vc-hg-print-log): Deal with a list of files, not a single file.
+ (vc-hg-diff-tree): New function, replace defalias with the same
+ name.
+ (vc-hg-register, vc-hg-checkin, vc-hg-command): Rename FILE to
+ FILES to denote that it is a file list, not a single file.
- * ido.el (ido-unc-hosts-cache): New defvar.
- (ido-unc-hosts): If value of defcustom is a function, call it to
- get list of UNC hosts. Add function-item choices to specify
- ido-unc-hosts-net-view or user function.
- (ido-ignore-unc-host-regexps): New defcustom.
- (ido-unc-hosts-net-view, ido-unc-hosts): New functions.
- (ido-is-unc-root, ido-is-unc-host, ido-file-name-all-completions)
- (ido-exhibit): Call ido-unc-hosts to get list of UNC hosts.
+ * vc-cvs.el (vc-cvs-create-repo, vc-cvs-wash-log): New functions.
+ (vc-cvs-register, vc-cvs-checkin): Deal with a list of files, not
+ a single file.
+ (vc-cvs-print-log, vc-cvs-command): Rename FILE to FILES to denote
+ that it is a file list, not a single file.
+ (vc-cvs-diff): Likewise. Simplify.
-2006-03-13 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-arch.el (vc-arch-register, vc-arch-checkin, vc-arch-diff):
+ Deal with a list of files, not a single file.
- * pcvs-util.el (cvs-insert-strings): Fix bug with strings longer than
- wwidth.
+ * vc-bzr.el (vc-bzr-register, vc-bzr-command, vc-bzr-checkin)
+ (vc-bzr-print-log): Update FILE parameter name to denote that it
+ is a file list, not a single file.
+ (vc-bzr-diff): Likewise. Use the car of files.
-2006-03-31 Juanma Barranquero <lekktu@gmail.com>
+2007-07-18 Juanma Barranquero <lekktu@gmail.com>
- * ido.el (ido-cache-unc-host-shares-time, ido-report-no-match)
- (ido-max-work-file-list, ido-switch-buffer)
- (ido-read-file-name-as-directory-commands):
+ * follow.el (follow-mode-hook, follow-mode-off-hook, follow-mode)
+ (follow-delete-other-windows-and-split, follow-recenter)
+ (follow-windows-aligned-p, follow-point-visible-all-windows-p)
+ (follow-redisplay, follow-estimate-first-window-start)
+ (follow-xemacs-scrollbar-support, follow-intercept-process-output):
Fix typos in docstrings.
-2006-03-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-system-coding-system): Define and use after
- Mac-specific coding systems are ready.
-
-2006-03-27 Romain Francoise <romain@orebokech.com>
-
- * net/rcirc.el (rcirc-connect): Add autoload cookie.
-
- * ldefs-boot.el: Update.
-
-2006-03-27 Daiki Ueno <ueno@unixuser.org>
-
- * pgg-gpg.el: Invoke gpg asynchronous, to avoid querying for
- passphrases when it is not needed.
- (pgg-gpg-use-agent): Add, to hard code that pgg shouldn't wait for
- passphrase stuff from gpg, should only be necessary when you use
- gpg with a smartcard.
-
-2006-03-27 Nick Roberts <nickrob@snap.net.nz>
-
- * comint.el (comint-dynamic-list-completions): Allow user to
- select *Completions* buffer.
-
-2006-03-27 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-get-level-face): Fix bug with level counting.
-
-2006-03-26 Andreas Schwab <schwab@suse.de>
-
- * progmodes/gud.el (gdb): Only complain about multiple debugging
- when the gdb process is still running.
-
-2006-03-25 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmail.el (tool-bar-map): Defvar it.
- (rmail-tool-bar-map): Tool-bar buttons for Rmail.
- (rmail-perm-variables): Make rmail-tool-bar-map a local variable.
-
-2006-03-25 Sven Joachim <svenjoac@gmx.de> (tiny change)
-
- * help.el (print-help-return-message): Suggest to use
- display-buffer instead of switch-to-buffer-other-window to restore
- the previous window without selecting it.
-
-2006-03-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * frame.el (select-frame-by-name): Call x-focus-frame also when
- window-system is mac.
-
- * term/mac-win.el: Adjust Courier font specifications in
- x-fixed-font-alist.
- (mac-select-convert-to-string): Use utf-16be-mac or utf-16le-mac
- when directly encoding to UTF-16 in native byte order, no BOM.
-
-2006-03-25 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-rectangle-mark-key): New defcustom.
- (cua--init-keymaps): Use it instead of fixed C-return.
- (cua-mode): Set after it.
-
- * emulation/cua-rect.el (cua--init-rectangles):
- Use cua-rectangle-mark-key instead of fixed C-return.
-
-2006-03-25 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdba): Revert 2006-03-10 change for case of
- "run" in .gdbinit.
- (gdb-var-create-regexp): Remove "^done" prefix for gdb-mi.el.
-
-2006-03-24 Romain Francoise <romain@orebokech.com>
-
- * files.el (ctl-x-5-map): Really bind C-x 5 C-o to
- `display-buffer-other-frame'.
-
-2006-03-24 Kim F. Storm <storm@cua.dk>
-
- * apropos.el (apropos-synonyms): Add selection => region.
-
-2006-03-24 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-regexp)
- (gdb-var-list-children-regexp, gdb-var-update-regexp)
- (gdb-var-list-children-regexp-1, gdb-var-update-regexp-1)
- (gdb-data-list-register-values-regexp)
- (gdb-stack-list-locals-regexp, gdb-stack-list-locals-handler):
- Future proof against new fields being added to MI output.
- (gdb-send): Don't treat backslashes for program input as
- continuations.
- (gdb-assembler-handler): Don't use window-start for this handler.
- (gdb-frame-handler): Don't change to hollow arrow if overlay
- arrow doesn't move to new frame.
-
-2006-03-24 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-continuation): Declare earlier to
- prevent compiler warnings.
- (gdb-stopped): Check for gud-last-last-frame (case: signal).
- (breakpoint-disabled): Make lighter for contrast with overlay arrow.
- (gdb-assembler-custom): Use hollow-right-triangle for assembler
- buffer too.
-
-2006-03-23 Reiner Steib <reinersteib+gmane@imap.cc>
-
- * pgg-gpg.el (pgg-gpg-update-agent): Check for
- make-network-process, so we can use the same code in Gnus v5-10
- too and have this file fully synchronized with that release.
-
-2006-03-23 Romain Francoise <romain@orebokech.com>
-
- * ibuf-ext.el (ibuffer-read-filter-group-name):
- Use `ibuffer-generate-filter-groups' to make completion list match
- the filter groups that are really displayed in the Ibuffer buffer.
- (ibuffer-generate-filter-groups): Add new args noempty, nodefault.
-
-2006-03-23 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (sort-coding-systems): Describe that
- the argument is modified in docstring.
-
-2006-03-22 Sascha Wilde <wilde@sha-bang.de>
-
- * pgg-gpg.el (pgg-gpg-use-agent): Disable by default.
- (pgg-gpg-update-agent): New function.
- (pgg-gpg-use-agent-p): New function.
- (pgg-gpg-process-region, pgg-gpg-encrypt-region)
- (pgg-gpg-encrypt-symmetric-region, pgg-gpg-decrypt-region)
- (pgg-gpg-sign-region): Use it.
-
-2006-03-21 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (custom-face-set): Call custom-push-theme before
- face-spec set so that `changed' theme is correctly saved.
- (custom-face-reset-standard): Reset to recalculated face rather
- than defface spec.
-
- * custom.el (custom-push-theme): Only save `changed' theme if the
- current face does not match the defface specs.
-
-2006-03-21 Simon Josefsson <jas@extundo.com>
-
- * pgg-gpg.el: Ideas below based on patch from Sascha Wilde
- <wilde@sha-bang.de>.
- (pgg-gpg-use-agent): New variable.
- (pgg-gpg-process-region): Use it.
- (pgg-gpg-encrypt-region): Likewise.
- (pgg-gpg-encrypt-symmetric-region): Likewise.
- (pgg-gpg-decrypt-region): Likewise.
- (pgg-gpg-sign-region): Likewise.
- (pgg-gpg-possibly-cache-passphrase): Don't cache a nil password.
+2007-07-18 Martin Rudalics <rudalics@gmx.at>
-2006-03-21 Carsten Dominik <dominik@science.uva.nl>
+ * add-log.el (change-log-mode): Use fill-nobreak-predicate to
+ avoid that filling introduces lines with a single asterisk.
- * textmodes/org.el (org-open-at-point): Fix bug in wiki-style
- bracket links.
+ * kmacro.el (kmacro-end-macro): When ignoring empty macro
+ avoid incorrect kmacro-ring-empty-p messages.
+ Reported by Michael Schierl <schierlm@gmx.de>.
-2006-03-21 Kim F. Storm <storm@cua.dk>
-
- * progmodes/gdb-ui.el (gdb-reset): Set buffer local value of
- fringe-indicator-alist instead of modifying global value.
- (gdb-frame-handler): Likewise.
-
-2006-03-21 Nick Roberts <nickrob@snap.net.nz>
-
- * diff-mode.el (diff-function): Make it inherit from diff-header
- instead of diff-context.
-
- * progmodes/gdb-ui.el (hollow-right-triangle): Define as fringe
- bitmap.
- (gdb-info-stack-custom): Rename from gdb-info-frames-custom and
- change names in macro above for consistency.
- (gdb-frame-handler): Use hollow-right-triangle for all selected
- frames which except the innermost (where execution has stopped).
- (gdb-reset): Reset buffer-local values of overlay-arrow.
-
-2006-03-20 Richard Stallman <rms@gnu.org>
-
- * simple.el (set-mark-command): Doc fix.
-
- * files.el (display-buffer-other-frame): New command.
- (ctl-x-4-map): Bind C-x 5 C-o to it.
-
-2006-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * jit-lock.el (jit-lock-function): Check for the actual defer-timer
- rather than just defer-time, in case defer-time has been changed but
- the timer isn't running yet.
- (jit-lock-deferred-fontify): Correspondingly let-bind defer-timer.
-
-2006-03-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * help-mode.el (help-follow-symbol): New function.
- Essentially identical to the old `help-follow', but do not let
- `push-button' do the work when on an xref.
- (help-mode-map): Bind `help-follow-symbol' to "C-c C-c".
-
-2006-03-19 Richard Stallman <rms@gnu.org>
-
- * help-mode.el (help-xref-symbol-regexp): Make no xref for symbol
- preceded by the word `program'.
- (help-follow-mouse, help-follow): Throw error if not on xref.
- Delete no longer used args.
-
-2006-03-20 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-stopped): Even when there is no source
- annotation ensure gud-overlay-arrow-position is redisplayed.
-
-2006-03-19 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-include-OPTkey)
- (bibtex-entry-field-alist, bibtex-generate-url-list): Mark as risky.
- (bibtex-autokey-name-case-convert)
- (bibtex-autokey-titleword-case-convert): Make these the aliases
- for the following two variables.
- (bibtex-autokey-name-case-convert-function)
- (bibtex-autokey-titleword-case-convert-function): Make these the
- real names.
- (bibtex-font-lock-keywords): Make bibtex-font-lock-url and
- bibtex-font-lock-crossref sublists.
- (bibtex-mode): Revert 2005-12-30 change (which made
- completion-ignore-case buffer-local).
- (bibtex-url): Simplify.
-
-2006-03-19 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-rect.el (cua--highlight-rectangle): Set overlay
- cursor property value to 2 (to align with C level change).
-
-2006-03-19 Bill Wohler <wohler@newt.com>
-
- * image.el (image-load-path-for-library): Shorten first line in
- docstring.
-
-2006-03-18 Richard Stallman <rms@gnu.org>
-
- * mail/rmail.el (rmail-reply-regexp): Undo previous change.
-
-2006-03-18 Ben North <ben@redfrontdoor.org> (tiny change)
-
- * isearch.el (isearch-other-meta-char): Handle user bindings for
- shifted control characters.
-
-2006-03-18 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/ispell.el (ispell-skip-region-alist): Add "_+" to the
- part that matches email addresses, file names, etc.
-
-2006-03-18 Eli Zaretskii <eliz@gnu.org>
-
- * term/w32-win.el (mouse-set-font):
- Mention w32-list-proportional-fonts in the doc string.
-
-2006-03-18 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-cache-ftp-work-directory-time): Doc fix.
- (ido-unc-hosts): New user option to explicitly define list of know
- UNC-style hosts for completion.
- (ido-cache-unc-host-shares-time): New user option.
- (ido-is-unc-root, ido-is-unc-host, ido-cache-unc-valid):
- New helper functions for UNC file-name support.
- (ido-may-cache-directory): Check for UNC host. Simplify.
- (ido-wash-history): Clean out old UNC hosts.
- (ido-nonreadable-directory-p): UNC hosts are always readable.
- (ido-directory-too-big-p): UNC hosts are never too big.
- (ido-set-current-directory): Handle UNC root path.
- (ido-file-name-all-completions): Complete UNC host names from
- ido-unc-hosts list. Cache UNC host shares.
- (ido-make-file-list-1): Don't filter UNC root.
- (ido-exhibit): Check for // in root directory, and switch to UNC
- mode by setting ido-current-directory to //.
-
-2006-03-17 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (customize-changed-options): Mention explicit
- version number as default in prompt.
-
-2006-03-17 Bill Wohler <wohler@newt.com>
-
- * image.el (image-load-path-for-library): Minor docstring fix.
-
-2006-03-17 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-read-date): Include subgroup 5 into
- replacement text.
- (org-popup-calendar-for-date-prompt): Fix customization type.
-
-2006-03-17 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gud-watch): Provide completion.
- (gdb-continuation): New variable.
- (gdb-send): Deal with continuation lines.
-
- * progmodes/gud.el (gud-gdb-complete-command)
- (gud-gdb-run-command-fetch-lines): Adapt for use with watch
- expressions.
- (gud-tooltip-mode): Use buffer-local value.
-
-2006-03-16 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-edit-input): Use selected match, if any.
-
-2006-03-16 Bill Wohler <wohler@newt.com>
-
- * image.el (image-load-path-for-library): Prefer user's images in
- image-load-path.
-
-2006-03-16 Martin Rudalics <rudalics@gmx.at>
-
- * mouse.el (mouse-drag-vertical-line): Use window-inside-edges
- when checking for attempt to drag leftmost or rightmost scrollbar.
-
-2006-03-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-inferior-status): New variable.
- (gdb-force-mode-line-update): New function.
- (gdb-resync, gdb-starting, gdb-signal, gdb-exited, gdb-stopped)
- (gdb-exited): Use them.
- (gdb-signal): New function.
- (gdb-annotation-rules): Provide a rule for it.
-
-2006-03-16 Kenichi Handa <handa@m17n.org>
-
- * international/mule.el (auto-coding-regexp-alist): Add entries
- for Unicode BOM.
-
- * sort.el (sort-build-lists): Temporarily bind
- inhibit-field-text-motion to t.
-
-2006-03-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * locate.el (locate-command, locate-make-command-line)
- (locate-fcodes-file, locate-update-command)
- (locate-prompt-for-command, locate, locate-with-filter)
- (locate-get-file-positions): Doc fixes.
- (locate-buffer-name, locate-header-face): Remove leading `*' in
- defcustom.
- (locate-filter-output): Use `keep-lines' instead of its alias
- `delete-non-matching-lines'.
- (locate-get-filename, locate-get-dirname): Add introductory comment.
- (locate-find-directory-other-window): Give appropriate error
- message if used outside main listing.
-
-2006-03-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-lines-before): Delete variable, subsumed by
- the new extend-region feature.
- (font-lock-after-change-function): Update correspondingly.
- * jit-lock.el (jit-lock-after-change): Update correspondingly.
- * progmodes/grep.el (font-lock-lines-before): Don't disable.
-
-2006-03-15 Bill Wohler <wohler@newt.com>
-
- * image.el (image-load-path-for-library): Fix example by not
- recommending that one binds image-load-path. Just defvar it to
- placate compiler and only use it if previously defined.
-
-2006-03-15 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-insert-centered): Use `string-width' to
- make underlining work for wide characters.
- (org-goto-map, org-agenda-mode-map, org-mode-map): Explicitly bind
- TAB to `org-cycle', to make sure that no binding in
- `outline-mode-map' can supercede it.
-
-2006-03-14 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el: Increment version to 2.2.1 in file commentary.
-
- (allout-version): Increment to 2.2.1.
+2007-07-17 Dan Nicolaescu <dann@ics.uci.edu>
- (allout-default-layout): New customization variable, used when the
- file lacks a specific allout-layout. Uses allout-layout-type for
- recursively nested definition.
+ * vc.el: Add more info about the vc-registered function.
- (allout-layout-type): Widget defining allout layouts, necessary for
- self-recursive definition.
+2007-07-17 Michael Albinus <michael.albinus@gmx.de>
- (allout-mode): Incorporate allout-default-layout as fallback for
- allout-layout.
+ * files.el (file-remote-p): Introduce optional parameter
+ IDENTIFICATION.
- (allout-layout): Mark as 'safe-local-variable', and refer mention
- fallback to `allout-default-layout' in absence of a specified value.
- (allout-passphrase-verifier-string)
- (allout-passphrase-hint-string): Mark as 'safe-local-variable'.
+ * recentf.el (recentf-keep-default-predicate): Adapt call of
+ `file-remote-p'.
- (allout-file-passphrase-verifier-string): Obsolete variable, removed.
+ * progmodes/grep.el (grep-probe): Use `process-file'.
+ (grep-compute-defaults): Handle variables host specific.
- (allout-get-encryption-passphrase-verifier): Use correct name of
- passphrase verifier in docstring.
+ * net/ange-ftp.el (ange-ftp-file-remote-p): Handle optional
+ parameter IDENTIFICATION.
-2006-03-15 Nick Roberts <nickrob@snap.net.nz>
+ * net/tramp.el (tramp-handle-file-remote-p): Handle optional
+ parameter IDENTIFICATION.
+ (tramp-handle-set-file-times): New defun. Replaces `tramp-touch'.
+ (tramp-file-name-handler-alist, tramp-file-name-for-operation):
+ Add entry for `set-file-times'.
+ (tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-out-of-band): Use `set-file-times'.
+ (tramp-handle-unhandled-file-name-directory): Rewrite.
+ (tramp-convert-file-attributes): Add error handling when inode is
+ extraordinary big.
+ (tramp-get-inode): Change parameter from FILE to VEC.
+ (tramp-handle-start-file-process): Use (current-buffer) if BUFFER
+ is nil. This is according to the specification. Goto (point-max)
+ when ready.
+ (tramp-handle-shell-command): Rewrite completely, using
+ `process-file' and `start-file-process'.
+ (tramp-methods, tramp-find-shell)
+ (tramp-open-connection-setup-interactive-shell)
+ (tramp-maybe-open-connection): Guard against $PROMPT_COMMAND shell
+ var. Reported by Steve Youngs <steve@sxemacs.org>.
+
+ * net/tramp-fish.el (tramp-fish-file-name-handler-alist): Add
+ entry for `set-file-times'. Rename `start-process' into
+ `start-file-process'. Remove `call-process' entry.
+ (tramp-fish-handle-set-file-times): New defun.
+ (tramp-fish-handle-executable-find): Use `process-file'.
+ (tramp-fish-handle-process-file): New defun. Replaces
+ `tramp-fish-handle-call-process'.
+ (tramp-fish-do-copy-or-rename-file-directly): Use
+ `set-file-times'.
+ (tramp-fish-get-file-entries): Change `tramp-get-inode' parameter.
+
+ * net/tramp-smb.el (tramp-smb-handle-file-attributes): Change
+ `tramp-get-inode' parameter.
+
+2007-07-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-bzr.el (vc-bzr-version, vc-bzr-at-least-version)
+ (vc-bzr-post-command-function): Remove. Version 0.8 is already old
+ nowadays, and by the time Emacs-23 comes out, nobody will even remember
+ it has ever existed.
- * progmodes/gdb-ui.el (gdb-var-list): Change order of first two
- elements.
- (gdb-find-watch-expression): Make it work for arrays too.
- Follow change to gdb-var-list.
- (gud-watch): Allow the user to enter variable name with a prexix
- arg. Create keybindings.
- (gdb-var-create-handler, gdb-var-evaluate-expression-handler)
- (gdb-var-list-children-handler, gdb-var-update-handler)
- (gdb-var-delete, gdb-edit-value, gdb-speedbar-expand-node)
- (gdb-var-list-children-handler-1, gdb-var-update-handler-1):
- Follow change to gdb-var-list.
- (gdb-starting): Don't show the overlay arrows when program is running.
+2007-07-17 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/gud.el (gud-speedbar-buttons): Follow change to
- gdb-var-list.
+ * vc.el: Undo previous change.
-2006-03-14 Bill Wohler <wohler@newt.com>
+2007-07-16 Eli Zaretskii <eliz@gnu.org>
- * image.el (image-load-path-for-library): Pass value of path
- rather than symbol. Always return list of directories.
- Guarantee that image directory comes first.
+ * makefile.w32-in (clean): Don't delete *~.
-2006-03-14 Alan Mackenzie <acm@muc.de>
+2007-07-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * font-core.el (font-lock-extend-region\(-function\)?.):
- New function/variable.
+ * textmodes/tex-mode.el (tex-verbatim-environments):
+ Add safe-local-variable property.
+ (tex-font-lock-syntactic-keywords): Lookup tex-verbatim-environments
+ when starting font-lock rather than when loading tex-mode.el.
- * font-lock.el (font-lock-after-change-function):
- Call font-lock-extend-region. Obey font-lock-lines-before.
- (font-lock-default-fontify-region): Remove reference to
- font-lock-lines-before.
+ * progmodes/sh-script.el (sh-font-lock-quoted-subshell): Skip over the
+ whole $( rather than just the $. Rename from sh-quoted-subshell.
+ (sh-font-lock-syntactic-keywords): Adjust call accordingly.
- * jit-lock.el (jit-lock-after-change):
- Call font-lock-extend-region. Obey font-lock-lines-before.
+2007-07-16 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-03-14 David Ponce <david@dponce.com>
+ * bookmark.el (bookmark-maybe-sort-alist): Don't modify
+ bookmark-alist. Instead, if not sorting, simply return it.
+ (bookmark-bmenu-list): Call bookmark-maybe-sort-alist
+ for its return value, not for its side effect.
- * tree-widget.el (tree-widget-themes-load-path)
- (tree-widget-themes-directory, tree-widget-theme): Doc fix.
+ * emacs-lisp/lisp-mode.el (calculate-lisp-indent): In the
+ case of alignment under a constant symbol, find and consider
+ the sexp actually at indentation to be the "last sexp".
-2006-03-13 Ryan Yeske <rcyeske@gmail.com>
+2007-07-16 Drew Adams <drew.adams@oracle.com>
- * net/rcirc.el (rcirc) <defgroup>: Add link to manual.
- (rcirc-print): Mark the start of text at the end of the prompt.
- (rcirc-track-minor-mode): Add autoload cookie.
- (rcirc-update-activity-string): Add space to front of mode-line
- indicator.
+ * mouse.el (mouse-yank-secondary): Better error message if no
+ secondary selection.
-2006-03-13 Miles Bader <miles@gnu.org>
+2007-07-16 Dan Nicolaescu <dann@ics.uci.edu>
- * net/rcirc.el (rcirc-nick-abbrevs): Remove variable.
- (rcirc-abbrev-nick): Remove function.
- (rcirc-format-response-string): Don't call `rcirc-abbrev-nick'.
+ * vc-hooks.el (vc-handled-backends): Move BZR later in the list.
-2006-03-13 David Ponce <david@dponce.com>
+ * term/xterm.el (xterm-turn-on-modify-other-keys)
+ (xterm-turn-off-modify-other-keys): New functions.
+ (terminal-init-xterm): Enable the modifyOtherKeys feature if the
+ terminal supports it.
- * tree-widget.el: Handle themes across all occurrences of the main
- themes sub-directory found in tree-widget-themes-load-path.
- (tree-widget-themes-directory, tree-widget-theme): Doc fix.
- (tree-widget--locate-sub-directory): Return all occurrences.
- (tree-widget-themes-path): New function.
- Replace tree-widget-themes-directory, and return a list of directories.
- (tree-widget-set-parent-theme)
- (tree-widget-lookup-image): Use it.
+2007-07-16 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-03-13 Carsten Dominik <dominik@science.uva.nl>
+ * bookmark.el (bookmark-show-all-annotations):
+ Make sure each inserted annotation ends with newline.
- * textmodes/org.el (org-link-search): Avoid self-matching of
- links, allow target text to be distributed over several lines.
- (org-search-not-link): New function.
- (org-set-regexps-and-options, org-get-current-options):
- New startup options.
- (org-export-as-html): Take odd-level setting from local variable.
- (org-fontify-emphasized-text): New option.
- (org-set-font-lock-defaults): Include emphasized text.
- (org-follow-mhe-link): Allow folder-only links, fix folder name.
- (org-font-lock): Customize group renamed from `org-faces'.
+2007-07-15 Richard Stallman <rms@gnu.org>
-2006-03-13 John Paul Wallington <jpw@pobox.com>
+ * kmacro.el (kmacro-bind-to-key): Avoid comparisons on function keys.
- * ibuf-ext.el (ibuffer-never-show-predicates): Add `require'
- keyword; require `ibuf-ext' feature. Thanks to Zhang Wei.
+ * tutorial.el (tutorial--find-changed-keys):
+ Handle C-x specially like ESC.
-2006-03-12 Luc Teirlinck <teirllm@auburn.edu>
+2007-07-15 Aaron Hawley <aaronh@garden.org>
- * cus-start.el (all): Delete :version keyword for members of the
- fringe group, since the entire group is new in 22.1.
+ * tar-mode.el (tar-get-descriptor): No error for zero-length file.
-2006-03-13 Nick Roberts <nickrob@snap.net.nz>
+2007-07-15 Juri Linkov <juri@jurta.org>
- * progmodes/gdb-ui.el (gdb-stack-list-locals-handler): Add local
- map if value is hexadecimal (an address).
- (gud-watch): Only search roots for existing watch expressions.
- (gdb-speedbar-refresh): Bind speedbar-shown-directories to nil to
- prevent caching problems with speedbar-update-directory-contents.
+ * delsel.el (delete-selection-pre-hook):
+ * emulation/cua-base.el (cua-paste): Before a yank command,
+ check also whether last-command is one of mouse-save-then-kill,
+ mouse-secondary-save-then-kill, mouse-set-region, mouse-drag-region.
-2006-03-12 Juri Linkov <juri@jurta.org>
+2007-07-15 Michael Albinus <michael.albinus@gmx.de>
- * battery.el (battery-linux-proc-acpi): Check `capacity' for non-nil
- before comparing with `low' and `warn'.
+ * recentf.el (recentf-keep-default-predicate): New defun.
+ (recentf-keep): Use it as initial value.
- * info.el (Info-dir-remove-duplicates): Move point to the
- beginning of the current line after deleting the entries from
- redundant heading. Use marker for `limit' and compare it with
- point before calling `re-search-forward'.
+2007-07-15 Karl Fogel <kfogel@red-bean.com>
-2006-03-11 Luc Teirlinck <teirllm@auburn.edu>
+ * bookmark.el: Revert 2007-07-13T18:16:17Z!kfogel@red-bean.com,
+ thus restoring bookmark bindings to three slots under C-x r. See
+ http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg00705.html.
- * simple.el (yank): Fix typo in docstring.
+2007-07-15 Jeff Miller <jmiller@cablespeed.com> (tiny change)
-2006-03-11 Ryan Yeske <rcyeske@gmail.com>
+ * calendar/calendar.el (calendar-goto-bahai-date): Autoload it.
- * mail/rmailsum.el (rmail-summary-next-msg): Skip deleted
- messages, where "D" is the 6th character.
+2007-07-15 Jason Rumney <jasonr@gnu.org>
-2006-03-11 Eli Zaretskii <eliz@gnu.org>
+ * w32-fns.el (set-default-process-coding-system): Use dos line ends
+ for input to cmdproxy on all versions of Windows.
+ Use dos line ends for input to plink.
- * simple.el (yank): Fix last change.
+ * comint.el (comint-simple-send): Concat newline before sending.
+ (comint-password-prompt-regexp): Recognize plink's passphrase prompt.
-2006-03-11 David Ponce <david@dponce.com>
+2007-07-14 Stefan Monnier <monnier@iro.umontreal.ca>
- * textmodes/ispell.el (ispell-find-aspell-dictionaries): Add aliases
- before merging elements from the standard ispell-dictionary-alist.
- (ispell-aspell-add-aliases): Add aliases to the passed dictionary
- alist, and return the new alist.
+ * emacs-lisp/autoload.el (generated-autoload-file): Autoload the
+ safe-local-variable setting.
-2006-03-11 Richard Stallman <rms@gnu.org>
+2007-07-14 David Kastrup <dak@gnu.org>
- * mail/rmail.el (rmail-ignored-headers): Discard DomainKey-Signature.
+ * emacs-lisp/advice.el (defadvice): Doc fix.
- * eshell/eshell.el (eshell-prefer-to-shell): Variable deleted;
- the way it is implemented is too unclean.
+2007-07-14 Juanma Barranquero <lekktu@gmail.com>
- * simple.el (kill-region, yank): Doc fix.
+ * subr.el (when, unless): Doc fix.
- * battery.el (battery-echo-area-format): Doc fix.
- (battery-mode-line-format): Likewise.
- (battery-linux-proc-apm, battery-linux-proc-acpi): Likewise.
- (battery-linux-proc-acpi): Ignore batteries that say "charged".
+2007-07-13 Dan Nicolaescu <dann@ics.uci.edu>
-2006-03-11 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
+ * replace.el (match): Use yellow1 instead of yellow.
- * progmodes/octave-mod.el (octave-indent-for-comment):
- Behave according to do string.
+ * progmodes/gdb-ui.el (breakpoint-enabled): Use red1 instead of
+ red.
-2006-03-11 Agustin Martin <agustin.martin@hispalinux.es>
+ * pcvs-info.el (cvs-unknown): Likewise.
- * textmodes/ispell.el (ispell-menu-map-needed) [ispell-message]:
- Be visible only if major mode is Mail Mode.
+2007-07-13 Eli Zaretskii <eliz@gnu.org>
- * textmodes/flyspell.el (flyspell-external-point-words)
- (flyspell-process-localwords): Fix last changes.
+ * makefile.w32-in (install-lisp-SH, install-lisp-CMD): New targets.
+ (install): Use them to copy all *.el files before *.elc.
-2006-03-11 Eli Zaretskii <eliz@gnu.org>
+2007-07-13 Drew Adams <drew.adams@oracle.com>
- * calendar/holidays.el (list-holidays): Doc fix.
+ * bookmark.el (bookmark-jump-other-window): New function.
+ (bookmark-map): Bind it to "o".
- * international/mule.el (auto-coding-alist): Add .odt
- (OpenOffice's open document) files.
+ http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg00633.html
+ and its thread contains discussion about this change.
+ The original patch was slightly tweaked by Karl Fogel
+ <kfogel@red-bean.com> before committing.
- * files.el (auto-mode-alist): Add .odt (OpenOffice's open
- document) files. Mention in the doc string the need to sync with
- auto-coding-alist.
+2007-07-13 Karl Fogel <kfogel@red-bean.com>
-2006-03-10 Chong Yidong <cyd@stupidchicken.com>
+ * bookmark.el: Shorten some comments to fit within 80 lines.
- * files.el (hack-local-variables-confirm): Don't prompt for ! if
- enable-local-variables is set to always query, or there is no
- savable variable.
+2007-07-13 Karl Fogel <kfogel@red-bean.com>
-2006-03-10 Bill Wohler <wohler@newt.com>
+ * bookmark.el: Don't define bookmark keys under the "C-xr" map;
+ instead, make "C-xp" a prefix for bookmark-map. Patch by Drew
+ Adams <drew.adams@oracle.com>, mildly tweaked by me. See
+ http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg00633.html.
- * image.el (image-load-path-for-library): Merge at least three
- functions from Gnus and MH-E into this one function that can now
- be shared.
+2007-07-13 Carsten Dominik <dominik@science.uva.nl>
-2006-03-11 Nick Roberts <nickrob@snap.net.nz>
+ * textmodes/org.el: Bug fixes.
+ (org-end-of-line): Move to end of line if in headline without tags.
- * progmodes/gdb-ui.el (gdb-remove-text-properties): Rename from
- gdb-remove-mouse-face and remove help-echo too.
- (gdb-enqueue-input): Correct conditional clause.
+2007-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-03-10 Glenn Morris <rgm@gnu.org>
+ * vc-hooks.el: Remove spurious * in docstrings.
+ (vc-handled-backends): Add BZR.
- * calendar/calendar.el (calendar-holidays): Doc fix.
- * calendar/holidays.el (list-holidays): Doc fix.
+ * vc-hooks.el (vc-find-file-hook): Use with-demoted-errors.
-2006-03-10 Nick Roberts <nickrob@snap.net.nz>
+2007-07-12 Davis Herring <herring@lanl.gov>
- * progmodes/gdb-ui.el (gdba): Don't call gdb-init-1 explicitly as
- it gets called in gdb-prompt anyway.
- (gdb-use-separate-io-buffer): Only restore window arrangement for
- gdb-many-windows.
- (gdb-enqueue-input): Make it harder to send GDB input when program
- is running.
- (gdb-buffer-list): New variable.
- (gdb-remove-mouse-face): New function.
- (gdb-starting): Use it when GDB input won't get sent.
+ * desktop.el (desktop-buffer-info, desktop-save):
+ Use `desktop-dirname' instead of `dirname'.
-2006-03-08 Juanma Barranquero <lekktu@gmail.com>
+2007-07-12 Paul Pogonyshev <pogonyshev@gmx.net>
- * help.el (view-lossage): Remove trailing whitespace before
- inserting "\n".
+ * progmodes/which-func.el (which-func-modes): Add `python-mode'.
-2006-03-07 Chong Yidong <cyd@stupidchicken.com>
+ * progmodes/python.el (python-which-func-length-limit): New var.
+ (python-which-func): New function.
+ (python-current-defun): Add optional `length-limit' and try to fit
+ computed function name to that length.
+ (python-mode): Hook `python-which-func' up.
- * files.el (hack-local-variables-confirm):
- Set coding-system-for-read to nil before writing to .emacs.
+2007-07-12 Sean O'Rourke <sorourke@cs.ucsd.edu> (tiny change)
- * arc-mode.el (archive-extract): Check if an existing buffer name
- comes from a different archive.
+ * pcomplete.el (pcomplete-entries): Obey pcomplete-ignore-case.
- * help.el (describe-key-briefly): If KEY is a down event, read and
- discard the up event.
+ * comint.el (comint-dynamic-complete-as-filename):
+ Use read-file-name-completion-ignore-case.
-2006-03-07 Nick Roberts <nickrob@snap.net.nz>
+2007-07-12 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/gud.el (gud-speedbar-buttons): Allow pointers to
- be edited and use font-lock-warning-face for any changes.
+ * comint.el (comint-dynamic-list-filename-completions):
+ Use read-file-name-completion-ignore-case.
- * progmodes/gdb-ui.el (gdb-edit-value-handler): New function.
- (gdb-edit-value): Use it to report any errors.
+ * vc-cvs.el: Require CL.
+ (vc-cvs-revision-table, vc-cvs-revision-completion-table):
+ New functions to provide completion of revision names.
-2006-03-07 Juanma Barranquero <lekktu@gmail.com>
+ * vc-cvs.el (vc-functions): Clear up the cache when reloading the file.
+ (vc-cvs-annotate-first-line-re): New const.
+ (vc-cvs-annotate-process-filter): New fun.
+ (vc-cvs-annotate-command): Use them and run the command asynchronously.
- * help.el (describe-key): Remove leftover test code.
+2007-07-12 Paul Pogonyshev <pogonyshev@gmx.net>
-2006-03-07 Carsten Dominik <dominik@science.uva.nl>
+ * emacs-lisp/eldoc.el (eldoc-last-data): Revise documentation.
+ (eldoc-print-current-symbol-info): Adjust for changed helper
+ function signatures.
+ (eldoc-get-fnsym-args-string): Add `args' argument. Use new
+ `eldoc-highlight-function-argument'.
+ (eldoc-highlight-function-argument): New function.
+ (eldoc-get-var-docstring): Format documentation with
+ `font-lock-variable-name-face'.
+ (eldoc-docstring-format-sym-doc): Add `face' argument and apply it
+ where suited.
+ (eldoc-fnsym-in-current-sexp): Return a list with argument index.
+ (eldoc-beginning-of-sexp): Return number of skipped sexps.
- * textmodes/org.el: Move defvars out of eval-when-compile.
- Use buffer-file-name variable.
- (org-agenda-file-to-end, org-agenda-file-to-front): Remove unused
- arg `file'.
- (org-level-faces): Remove startup dependency.
- (org-cycle, org-map-tree, org-scan-tags)
- (org-remember-handler): Don't call `outline-level' directly.
- (org-mhe-search-all-folders): New option.
- (org-mhe-get-message-folder-from-index)
- (org-mhe-get-message-folder): Fix indexing search.
- (org-format-agenda-item): Handle nil TAGS argument.
- (org-cleaned-string-for-export, org-activate-target-links)
- (org-make-target-link-regexp): Deal with empty radio target list.
- (org-tag): New face.
- (org-get-level-face): New function.
- (org-set-font-lock-defaults): Simplify setup for headlines.
- (org-complete): Pass common substring to `display-completion-list'.
+2007-07-11 Michael Albinus <michael.albinus@gmx.de>
-2006-03-06 David Ponce <david@dponce.com>
+ * progmodes/compile.el (compilation-start): `start-process' must
+ still be redefined when calling `start-process-shell-command'.
- * tree-widget.el: Update Commentary header.
- (tree-widget-theme-name): Ignore parent themes.
- (tree-widget-set-parent-theme): New function.
- (tree-widget-set-theme): Use it.
- (tree-widget-set-image-properties): Move definition. Does nothing
- if image properties have already been set.
- (tree-widget-image-properties): Move definition. Receive an image
- name. Set the :pointer property.
- (tree-widget-lookup-image): Doc fix. Search in parent themes.
- Don't set the :pointer image property.
- (tree-widget-convert-widget): New function. Handle :dynargs
- compatibility here.
- (tree-widget): Use it to :convert-widget. Add the :expander-p
- predicate to control when the :expander function is entered.
- Thanks to Ken Manheimer <ken.manheimer@gmail.com> for the idea.
- (tree-widget-value-create): Handle :expander-p. widget-apply
- :expander.
- (tree-widget-expander-p): New function. Default value of the
- :expander-p property.
+ * progmodes/gud.el (gud-file-name): When `default-directory' is a
+ remote file name, prepend its remote part to the filename.
+ (gud-common-init): When `default-directory' is a remote file name,
+ make the filename relative to it.
+ Based on a patch by Nick Roberts <nickrob@snap.net.nz>.
-2006-03-06 Chong Yidong <cyd@stupidchicken.com>
+2007-07-11 Dan Nicolaescu <dann@ics.uci.edu>
- * help.el (describe-key): Properly handle the return value of
- read-key-sequence when grabbing an up-event. Cleanup mouse-1
- remaps. Handle string and vector `follow-link' values.
+ * vc-hooks.el (vc-default-mode-line-string): Add a mouse face,
+ mouse binding and a tooltip.
-2006-03-06 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
- * complete.el (PC-expand-many-files): Try be more careful when parsing
- the shell's output.
+ * menu-bar.el (vc-menu-map): New defalias.
-2006-03-05 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-07-10 Richard Stallman <rms@gnu.org>
- * outline.el (hide-sublevels): Provide better interactive default.
+ * emacs-lisp/lisp-mode.el (eval-defun):
+ Explain special handling of `defface'.
-2006-03-06 Kenichi Handa <handa@m17n.org>
+2007-07-10 Jim Meyering <jim@meyering.net> (tiny change)
- * international/fontset.el (create-fontset-from-fontset-spec):
- Fix regexp for paring FONTSET-SPEC (allow spaces after `:').
+ * emacs-lisp/copyright.el (copyright-current-gpl-version): Set to 3.
-2006-03-05 Luc Teirlinck <teirllm@auburn.edu>
+ * autoinsert.el (auto-insert-alist): s/2/3/ in the generated comment.
- * progmodes/gud.el (gud-jdb-marker-filter): Quote `[' with two
- backslashes instead of one in regexp.
- (gud-tooltip-dereference): Add missing optional argument.
+2007-07-10 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-03-04 John Paul Wallington <jpw@pobox.com>
+ * emacs-lisp/cl.el: Load cl-loaddefs.el quietly.
- * wdired.el (toplevel): Require `cl' at compile-time.
+ * vc-arch.el (vc-arch-complete): Remove.
+ (vc-arch-revision-completion-table): Use complete-with-action.
-2006-03-04 Andreas Schwab <schwab@suse.de>
+ * subr.el (condition-case-no-debug, with-demoted-errors): New macros.
+ (complete-with-action): New function.
+ (dynamic-completion-table): Use it.
- * server.el (server-process-filter): Handle errors during
- evaluation of the argument.
+2007-07-10 Michael Albinus <michael.albinus@gmx.de>
-2006-03-03 John Paul Wallington <jpw@pobox.com>
+ * comint.el (make-comint, make-comint-in-buffer)
+ (comint-exec-1): Replace `start-process' by `start-file-process'.
- * t-mouse.el (t-mouse-drag-start, t-mouse-swap-alt-keys): Doc fix;
- escape parentheses at beginning of line.
- (t-mouse-tty, t-mouse-make-event): Doc fix; use imperative.
- (t-mouse-mode): Remove period from end of error message.
+ * progmodes/compile.el (compilation-start): Revert redefining
+ `start-process'.
-2006-03-03 Agustin Martin <agustin.martin@hispalinux.es>
+2007-07-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * textmodes/flyspell.el (flyspell-process-localwords):
- Be case-sensitive.
+ * emacs-lisp/autoload.el (autoload-generate-file-autoloads): Be careful
+ with EOLs when generating MD5 checksums.
-2006-03-03 Martin Rudalics <rudalics@gmx.at>
+ * follow.el: Don't change the global map from the follow-mode-map
+ defvar, but from the toplevel. Use easy-menu to unify the Emacs and
+ XEmacs code.
+ (turn-on-follow-mode, turn-off-follow-mode): Remove interactive spec
+ since `follow-mode' should be used instead for that.
+
+ * emacs-lisp/easymenu.el (easy-menu-binding): New function.
+ (easy-menu-do-define): Use it.
+ (easy-menu-do-add-item): Inline into easy-menu-add-item and then remove.
+
+ * progmodes/compile.el (compilation-auto-jump-to-first-error)
+ (compilation-auto-jump-to-next): New vars.
+ (compilation-auto-jump): New function.
+ (compilation-error-properties): Use them to jump to first error.
+ (compilation-start): Set the var if requested.
+
+ * emacs-lisp/autoload.el (update-directory-autoloads): Remove
+ duplicates without also removing entries from other directories.
+
+2007-07-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-day-view, org-agenda-week-view):
+ Remember span as default.
+ (org-columns-edit-value): Rename from `org-column-edit'.
+ (org-columns-display-here-title): Rename from
+ `org-overlay-columns-title'.
+ (org-columns-remove-overlays): Rename from org-remove-column-overlays.
+ (org-columns-get-autowidth-alist): Rename from
+ `org-get-columns-autowidth-alist'.
+ (org-columns-display-here): Rename from `org-overlay-columns'.
+ (org-columns-new-overlay): Rename from `org-new-column-overlay'.
+ (org-columns-quit): Rename from `org-column-quit'.
+ (org-columns-show-value): Rename from `org-column-show-value'.
+ (org-columns-content, org-columns-widen)
+ (org-columns-next-allowed-value)
+ (org-columns-edit-allowed, org-columns-store-format)
+ (org-columns-uncompile-format, org-columns-redo)
+ (org-columns-edit-attributes, org-delete-property)
+ (org-set-property, org-columns-update)
+ (org-columns-compute, org-columns-eval)
+ (org-columns-not-in-agenda, org-columns-compute-all)
+ (org-property-next-allowed-value)
+ (org-columns-compile-format)
+ (org-fill-paragraph-experimental)
+ (org-string-to-number, org-property-action)
+ (org-columns-move-left, org-columns-new)
+ (org-column-number-to-string)
+ (org-property-previous-allowed-value)
+ (org-at-property-p, org-columns-delete)
+ (org-columns-previous-allowed-value)
+ (org-columns-move-right, org-columns-narrow)
+ (org-property-get-allowed-values)
+ (org-verify-version, org-column-string-to-number)
+ (org-delete-property-globally): New functions.
+ (org-columns-current-fmt): Rename from `org-current-columns-fmt'.
+ (org-columns-overlays): Rename from `org-column-overlays'.
+ (org-columns-map): Rename from `org-column-map'.
+ (org-columns-current-maxwidths): Rename from
+ `org-current-columns-maxwidths'.
+ (org-columns-begin-marker, org-columns-current-fmt-compiled)
+ (org-previous-header-line-format)
+ (org-columns-inhibit-recalculation)
+ (org-columns-top-level-marker): New variables.
+ (org-columns-default-format): Rename from `org-default-columns-format'.
+ (org-property-re): New constant.
+
+2007-07-10 Guanpeng Xu <herberteuler@hotmail.com>
+
+ * subr.el (looking-at-p, string-match-p): New functions.
+
+2007-07-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * textmodes/tex-mode.el (tex-fontify-script)
+ (tex-font-script-display): New variables to make display of
+ superscripts and subscripts customizable.
+ (tex-font-lock-suscript, tex-font-lock-match-suscript): Use them.
- * cus-edit.el (custom-quote): Remove function, since it has been
- moved to custom.el.
+2007-07-09 Richard Stallman <rms@gnu.org>
- * font-lock.el (lisp-font-lock-keywords-2)
- * emacs-lisp/rx.el (rx-check-any, rx-check-not)
- * generic-x.el (reg-generic-mode): Quote "]"s in regexps when
- they have no special meaning.
+ * isearch.el (isearch-edit-string): Call to isearch-push-state
+ after the search.
- * midnight.el (clean-buffer-list): Handle case where base-buffer of
- indirect buffer gets killed before indirect buffer. Use dolist.
+2007-07-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2006-03-03 Ken Manheimer <ken.manheimer@gmail.com>
+ * window.el (fit-window-to-buffer): Remove setting of window-min-height
+ to 1 as enlarge-window uses the value to resize/shrink windows other
+ than WINDOW if needed.
- * emacs-lisp/edebug.el (edebug-display): Use `edebug-sit-for-seconds'
- value instead of a literal constant (1) on more pauses.
+2007-07-08 Katsumi Yamaoka <yamaoka@jpl.org>
-2006-03-03 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
+ * cus-start.el (file-coding-system-alist): Fix custom type.
- * textmodes/flyspell.el (flyspell-external-point-words):
- Be case-sensitive.
+2007-07-08 Chong Yidong <cyd@stupidchicken.com>
-2006-03-03 Ryan Yeske <rcyeske@gmail.com>
+ * longlines.el (longlines-wrap-region): Avoid marking buffer as
+ modified.
+ (longlines-auto-wrap, longlines-window-change-function):
+ Remove unnecessary calls to set-buffer-modified-p.
- * net/rcirc.el (rcirc-url-regexp): Match entire url when it starts
- with "www".
+2007-07-08 Katsumi Yamaoka <yamaoka@jpl.org>
-2006-03-03 Ken Manheimer <ken.manheimer@gmail.com>
+ * cus-start.el (file-coding-system-alist): Fix custom type.
- * allout.el: Restablish intermediate missing comment header to
- preserve outline structure.
- (allout-beginning-of-current-entry): Skip invisible text.
- (allout-open-topic): Fix opening a topic at end-of-buffer.
- (allout-minor-mode): Move nearer to allout-mode function.
+2007-07-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-03-02 Carsten Dominik <dominik@science.uva.nl>
+ * vc-cvs.el (vc-cvs-revert): Use vc-default-revert.
+ (vc-cvs-checkout): Remove last arg now unused; simplify.
- * textmodes/org.el (org-paste-subtree): Remove (debug) form.
+2007-07-08 Michael Albinus <michael.albinus@gmx.de>
-2006-03-02 Nick Roberts <nickrob@snap.net.nz>
+ * files.el (file-remote-p): Introduce optional parameter CONNECTED.
- * dframe.el (dframe-frame-mode): Don't burp when menu-bar-lines
- is nil.
+ * net/tramp.el:
+ * net/tramp-ftp.el:
+ * net/tramp-smb.el:
+ * net/tramp-uu.el:
+ * net/trampver.el: Migrate to Tramp 2.1.
- * progmodes/gud.el (gud-speedbar-menu-items):
- Use buffer-local-value and add missing :visible keyword.
+ * net/tramp-cache.el:
+ * net/tramp-fish.el:
+ * net/tramp-gw.el: New Tramp packages.
- * progmodes/gdb-ui.el (gdb-speedbar-refresh): Quieten speedbar-refresh.
+ * net/tramp-util.el:
+ * net/tramp-vc.el: Removed.
-2006-03-01 Carsten Dominik <dominik@science.uva.nl>
+ * net/ange-ftp.el: Add ange-ftp property to 'start-file-process.
+ (ange-ftp-file-remote-p): Handle optional parameter CONNECTED.
- * textmodes/reftex-index.el (reftex-index-map): `follow-mouse'
- must be `follow-link'.
+ * net/rcompile.el (remote-compile): Handle Tramp 2.1 arguments.
- * textmodes/reftex-toc.el (reftex-toc-map): Likewise.
+ * progmodes/compile.el (compilation-start): Redefine
+ `start-process' temporarily when `default-directory' is remote.
+ Remove case of synchronous compilation, this won't happen ever.
+ (compilation-setup): Make local variable `comint-file-name-prefix'
+ for remote compilation.
- * textmodes/org.el (org-export-as-html): Fix bugs in HTML
- formatting: No nested anchors.
- (org-all-targets): Fix bug with XEmacs compatibility.
- (org-read-date): Add (require 'parse-time).
- (org-set-tags): Fix bug with extra inserted space.
- (org-export-html-style): Define a style class for targets.
- (org-agenda-keymap, org-mouse-map): Add a binding for `follow-link'.
- (org-hide-leading-stars): New option.
- (org-hide): New face.
- (org-set-font-lock-defaults): Allow to hide leading stars.
- (org-get-legal-level, org-tr-level): New functions.
- (org-odd-levels-only): New option.
- (org-level-faces, org-paste-subtree, org-convert-to-odd-levels)
- (org-demote, org-promote): Deal with double-star levels.
- (org-convert-to-odd-levels): New command.
+2007-07-08 Martin Rudalics <rudalics@gmx.at>
-2006-03-01 Nick Roberts <nickrob@snap.net.nz>
+ * novice.el (disabled-command-function): Fit window to buffer to
+ make last line visible.
+ Reported by Stephen Berman <Stephen.Berman at gmx.net>.
- * speedbar.el (speedbar-update-localized-contents): Try to
- preserve window-start.
- (speedbar-update-directory-contents): Try to preserve window-start
- and window-point.
- (speedbar-update-special-contents): Don't move back to start of window.
+ * mouse.el (mouse-drag-track): Reset transient-mark-mode to nil
+ when handling the terminating event.
- * progmodes/gdb-ui.el (gdb-speedbar-refresh): Rename from
- gdb-speedbar-timer-fn. Use speedbar-refresh instead of
- speedbar-timer-fn.
- (gdb-var-update-handler, gdb-var-update-handler-1): Use it.
- (gdb-speedbar-expand-node): Use speedbar-delete-subblock
- instead of gdb-speedbar-timer-fn.
+2007-07-07 Jay Belanger <jay.p.belanger@gmail.com>
-2006-02-28 Jay Belanger <belanger@truman.edu>
+ * calc/calc.el (math-read-number-simple): Remove leading 0s.
+ (math-bignum-digit-length): Change to optimal value.
- * calc/calccomp.el (math-compose-tex-matrix): Add a latex option.
- (math-compose-expr): Use latex option when calling
- `math-compose-tex-matrix' for latex mode.
+ * calc/calc-bin.el (math-bignum-logb-digit-size)
+ (math-bignum-digit-power-of-two): Evaluate when compiled.
-2006-02-28 Nick Roberts <nickrob@snap.net.nz>
+ * calc/calc-comb.el (math-small-factorial-table)
+ (math-init-random-base, math-prime-test): Remove unnecessary calls
+ to `math-read-number-simple'.
- * speedbar.el: Re-instate comments about developing for speedbar
- [this is what info and gdb-ui use even if better methods exist now].
+ * calc/calc-ext.el (math-approx-pi, math-approx-sqrt-e)
+ (math-approx-gamma-const): Add docstrings.
- * t-mouse.el: New file.
- (t-mouse-tty): Use with-temp-buffer. Add more terminal types.
- (t-mouse-lispy-buffer-posn-from-coords): Remove.
- (t-mouse-make-event-element): Use posn-at-x-y instead.
- (t-mouse-make-event): Deal with Fedora Core 3.
- (t-mouse-make-event): Don't sink the `stupid text mode menubar'.
- (t-mouse-mouse-position-function): New function. Use it instead
- of advising mouse-position.
- (t-mouse-mode): New minor mode.
- (t-mouse-stop, t-mouse-run): Remove. Use t-mouse-mode instead.
+ * calc/calc-forms.el (math-julian-date-beginning)
+ (math-julian-date-beginning-int): New constants.
+ (math-format-date-part, math-parse-standard-date, calcFunc-julian):
+ Use the new constants.
-2006-02-27 Glenn Morris <rgm@gnu.org>
+ * calc/calc-funcs.el (math-gammap1-raw): Add docstring.
- * calendar/calendar.el (calendar-holidays): Doc fix.
+ * calc/calc-math.el (math-approx-ln-10, math-approx-ln-2):
+ Add docstrings.
-2006-02-27 Nick Roberts <nickrob@snap.net.nz>
+2007-07-07 Tom Tromey <tromey@redhat.com>
- * progmodes/gdb-ui.el (gdb-source-window): New variable.
- Re-introduce the concept of a source window.
- (gdb-get-buffer-create): Rename from gdb-get-create-buffer for
- consistency with get-buffer-create.
- (def-gdb-auto-update-handler, gdb-info-locals-handler)
- (gdb-data-list-register-values-handler)
- (gdb-stack-list-locals-handler): Try to preserve window-start as
- well as window-point.
- (gdb-display-source-buffer): New function (old concept).
- (gdb-goto-breakpoint): Use it.
-
- * progmodes/gud.el (gud-display-line): Use gdb-display-source-buffer
- for gdb-ui/gdb-mi (old concept).
-
-2006-02-27 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex-index.el (reftex-index-map): Add `follow-mouse'
- binding.
-
- * textmodes/reftex-toc.el (reftex-toc-map): Add `follow-mouse' binding.
-
- * textmodes/reftex-sel.el (reftex-select-label-map)
- (reftex-select-bib-map): Add `follow-mouse' binding.
-
-2006-02-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * jka-cmpr-hook.el (jka-compr-compression-info-list)
- (jka-compr-mode-alist-additions, jka-compr-load-suffixes):
- Give :set functions to provide automatic updating.
- Update docstring. Give compiler defvars early in the file
- and move the defcustoms to a later spot where all called functions
- are defined.
- (jka-compr-file-name-handler-entry): Doc fix.
- (jka-compr-compression-info-list--internal)
- (jka-compr-mode-alist-additions--internal)
- (jka-compr-load-suffixes--internal): New variables.
- (jka-compr-install): Set the three above variables.
- Update `load-file-rep-suffixes' instead of `load-suffixes'.
- (jka-compr-update, jka-compr-set): New functions.
- (auto-compression-mode): Doc fix.
-
- * jka-compr.el (jka-compr-uninstall): Replace `mapcar' with `mapc'.
- Update `load-file-rep-suffixes' instead of `load-suffixes'.
- Use jka-compr-compression-info-list--internal,
- jka-compr-mode-alist-additions--internal and
- jka-compr-load-suffixes--internal.
-
- * files.el (load-library):
- * loadhist.el (file-loadhist-lookup):
- * startup.el (command-line):
- * subr.el (locate-library):
- * emacs-lisp/autoload.el (update-directory-autoloads):
- * emacs-lisp/find-func.el (find-library-suffixes):
- Use `get-load-suffixes' instead of `load-suffixes'.
+ * vc.el (vc-annotate): Jump to line and output message only after the
+ process is really all done.
- * subr.el (locate-library):
- * emacs-lisp/find-func.el (find-library-name):
- Use `load-file-rep-suffixes' instead of '("").
+2007-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-02-26 Kim F. Storm <storm@cua.dk>
+ * vc.el (vc-exec-after): Don't move point from the sentinel.
+ Forcefully read all the remaining text in the pipe upon process exit.
+ (vc-annotate-display-autoscale, vc-annotate-lines):
+ Don't stop at the first unrecognized line.
+ (vc-annotate-display-select): Run autoscale after the process is done
+ since it depends on the whole result.
- * ido.el (ido-save-history, ido-load-history): Simplify.
- Don't use find-file-noselect to avoid interference from other modes.
+2007-07-07 Eli Zaretskii <eliz@gnu.org>
-2006-02-25 Thien-Thi Nguyen <ttn@gnu.org>
+ * term/w32-win.el (menu-bar-open): New function.
+ Bind <f10> to it.
- * progmodes/sh-script.el (sh-mode): Fix bug: Arrange
- to use the default shell if filename is not available.
- Reported by Giorgos Keramidas.
+2007-07-07 Michael Albinus <michael.albinus@gmx.de>
-2006-02-25 John Williams <jrw@pobox.com> (tiny change)
+ * simple.el (start-file-process): New defun.
- * progmodes/etags.el (tags-completion-table): Do completion from
- all the tables in the current list, as documented in the manual.
+2007-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+ * files.el (find-file-confirm-nonexistent-file): Rename from
+ find-file-confirm-inexistent-file. Update users.
- * CC Mode Update to 5.31.3.
+ * emacs-lisp/autoload.el (autoload-find-destination): Understand a new
+ format of autoload block where the file's time-stamp is replaced by its
+ MD5 checksum.
+ (autoload-generate-file-autoloads): Use MD5 checksum instead of
+ time-stamp for secondary autoloads files.
+ (update-directory-autoloads): Remove duplicate entries.
+ Use time-less-p for time-stamps, as done in autoload-find-destination.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-07 Jay Belanger <jay.p.belanger@gmail.com>
- * progmodes/cc-mode.el (c-postprocess-file-styles):
- Bind inhibit-read-only to t, around the call to
- c-remove-any-local-eval-or-mode-variables, so that it works on a
- RO file.
+ * calc/calc.el (math-read-number): Replace number by variable.
+ (math-read-number-simple): Properly parse small integers.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-07 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/cc-awk.el: Correct a typo.
+ * vc.el: Fix doc for the checkout function.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-06 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/cc-cmds.el, cc-mode.el: Rename c-hungry-backspace to
- c-hungry-delete-backwards, at the request of RMS. Leave the old
- name as an alias.
+ * vc-hg.el (vc-hg-root): New function.
+ (vc-hg-registered): Use it.
+ (vc-hg-diff-tree): New defalias.
+ (vc-hg-responsible-p): Likewise.
+ (vc-hg-checkout): Comment out, not needed.
+ (vc-hg-delete-file, vc-hg-rename-file, vc-hg-could-register)
+ (vc-hg-find-version, vc-hg-next-version): New functions.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-06 Andreas Schwab <schwab@suse.de>
- * progmodes/cc-mode.el: Correct a typo.
+ * emacs-lisp/lisp-mode.el (eval-last-sexp): Avoid introducing any
+ dynamic bindings around the evaluation of the expression.
+ Reported by Jay Belanger <jay.p.belanger@gmail.com>.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-06 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/cc-defs.el: Update the version number to 5.31.3.
+ * autorevert.el (auto-revert-tail-handler): Use inhibit-read-only.
+ Run before-revert-hook. Suggested by Denis Bueno <denbuen@sandia.gov>.
+ Use run-hooks rather than run-mode-hooks.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-05 Jay Belanger <jay.p.belanger@gmail.com>
- * progmodes/cc-cmds.el (c-electric-brace): Fix clean-up
- brace-else-brace (error due to mbeg, mend being undefined).
+ * calc/calc-comb.el (math-random-digit): Rename to
+ `math-random-three-digit-number'.
+ (math-random-digits): Don't depend on representation of integer.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+ * calc/calc-bin.el (math-bignum-logb-digit-size)
+ (math-bignum-digit-power-of-two): New constants.
+ (math-and-bignum, math-or-bignum, math-xor-bignum, math-diff-bignum)
+ (math-not-bignum, math-clip-bignum): Use the constants
+ `math-bignum-digit-power-of-two' and `math-bignum-logb-digit-size'
+ instead of their values.
+ (math-clip): Use math-small-integer-size instead of its value.
- * progmodes/cc-mode.el: File Local variables: Solve the problem
- where both `mode' and c-file-offsets are specified: `mode' will
- overwrite c-f-o's settings:
- (c-remove-any-local-eval-or-mode-variables): New function.
- (c-postprocess-file-styles): Call the above new function, within
- c-tentative-buffer-change, to splat `mode' and `eval' before the
- second hack-local-variables.
+ * calc/calc.el (math-add-bignum): Replace number by constant.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-05 Chong Yidong <cyd@stupidchicken.com>
- * progmodes/cc-mode.el:
- [Supersedes patch to cc-engine.el 2005-12-16T20:07:49Z!monnier@iro.umontreal.ca]
- (c-after-change): Protect the match data with save-match-data.
- It was getting corrupted by c-after-change-check-<>-operators.
+ * wid-edit.el (widget-documentation-string-value-create):
+ Insert indentation spaces.
- * progmodes/cc-defs.el: [Supersedes patch V1.38]:
- (top level): Check for a buggy font-lock-compile-keywords ONLY in
- XEmacs. GNU Emacs 22 now has a check which would throw an error here.
+2007-07-05 Thien-Thi Nguyen <ttn@gnuvola.org>
- * progmodes/cc-awk.el (c-awk-after-change): Protect the match data
- with save-match-data. It was being corrupted when Font Lock was
- not enabled.
+ * emacs-lisp/byte-opt.el: Revert last change.
-2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+2007-07-05 Dan Nicolaescu <dann@ics.uci.edu>
- * progmodes/cc-langs.el (c-mode-menu): Add menu items for Electric
- Mode and Subword Mode.
+ * vc-hooks.el (vc-handled-backends): Add HG.
- * progmodes/cc-engine.el (c-beginning-of-statment-1): Distinguish
- real labels ("case 1:" or "foo:") from non-labels ("public:").
- (c-forward-objc-directive): Replace c-forward-token-2 with crude
- coding; c-f-t-2 doesn't move over a token at EOB.
+ * vc-hg.el (vc-handled-backends): Remove, done in vc-hooks.el now.
- * progmodes/cc-defs.el (c-version): Update version number to 5.31.2.
+2007-07-05 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/cc-cmds.el, cc-mode.el, cc-engine.el
- (c-update-modeline): Concatenate the minor mode indicators
- directly onto mode-name, removing c-submode-indicators.
- Sometimes, c-s-i got separated from the mode name on the mode line.
+ * complete.el (PC-do-complete-and-exit): Add support for the new
+ `confirm-only' confirmation mode.
- * progmodes/cc-cmds.el (c-electric-brace, c-electric-semi&comma)
- (c-electric-colon): Correct doc-strings: "/ln" -> "/la".
+2007-07-05 Chong Yidong <cyd@stupidchicken.com>
-2006-02-24 Martin Stjernholm <bug-cc-mode@gnu.org>
+ * cus-edit.el (custom-commands): New variable.
+ (custom-tool-bar-map): New variable. Initialize using
+ `custom-commands'.
+ (custom-mode): Use `custom-tool-bar-map'.
+ (custom-buffer-create-internal): Insert action buttons only if
+ tool bar is not used. Use `custom-commands'.
+ (Custom-help, custom-command-apply): New function.
+ (custom-command-apply, Custom-set, Custom-save)
+ (Custom-reset-current, Custom-reset-saved, Custom-reset-standard):
+ Use `custom-command-apply' instead of duplicating code.
+ (customize-group-other-window): Call `customize-group' instead of
+ duplicating code.
+ (customize-face-other-window): Call `customize-face' instead of
+ duplicating code.
+ (customize-group, customize-face): Add optional args for opening
+ in another window.
+ (custom-variable-tag): Don't inherit `variable-pitch' face.
+ (custom-group-tag): Inherit `variable-pitch' face.
+ (custom-variable-value-create): Set documentation indentation.
+ (custom-group-value-create): Make group name a link, instead of
+ using an extra "go to group" button.
+ (custom-prompt-variable, custom-group-set, custom-group-save)
+ (custom-group-reset-current, custom-group-reset-saved)
+ (custom-group-reset-standard): Minor cleanup.
- * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Improve the
- error message when there's an evaluation error to show whether
- it's loaded from source or not.
- (c-filter-ops): Make it available at runtime too to work when
- `c-make-init-lang-vars-fun' needs to evaluate from source.
+2007-07-05 Thien-Thi Nguyen <ttn@gnuvola.org>
-2006-02-24 Juanma Barranquero <lekktu@gmail.com>
+ * Makefile.in (bootstrap-prepare): When copying from
+ ldefs-boot.el, make sure loaddefs.el is writeable.
- * help.el (help): Revert last part of 2006-02-23 change (deletion
- of the `provide' call).
+ (bootstrap-prepare): Make $(lisp)/ps-print.el
+ and $(lisp)/emacs-lisp/cl-loaddefs.el writable, as well.
-2006-02-23 Juri Linkov <juri@jurta.org>
+2007-07-05 Dan Nicolaescu <dann@ics.uci.edu>
- * compare-w.el (compare-windows-highlight): Add new value
- `persistent' and change :type from `boolean' to `choice'.
- (compare-windows-overlays1, compare-windows-overlays2):
- New internal variables.
- (compare-windows-highlight): If compare-windows-highlight is
- `persistent', add current overlays to compare-windows-overlays[12]
- instead of adding compare-windows-dehighlight to pre-command-hook.
- (compare-windows-dehighlight): Delete all overlays from
- compare-windows-overlays[12].
+ * vc-hg.el (vc-hg-internal-status): Inline in `vc-hg-state', the
+ only caller, and delete.
+ (vc-hg-state): Deal with exceptions and only parse the output on
+ successful return.
+ (vc-hg-internal-log): Inline in `vc-hg-workfile-version', the only
+ caller, and delete.
+ (vc-hg-workfile-version): Deal with exceptions and only parse the
+ output on successful return.
+ (vc-hg-revert): New function.
- * info.el (Info-search): Don't bind search-spaces-regexp to
- Info-search-whitespace-regexp in non-regexp isearch mode.
+2007-07-04 Jay Belanger <jay.p.belanger@gmail.com>
-2006-02-23 Stefan Monnier <monnier@iro.umontreal.ca>
+ * calculator.el (calculator-expt): Use more cases to determine
+ the value.
- * help.el (describe-mode): Pass `mode-name' to format-mode-line.
+2007-07-03 Dan Nicolaescu <dann@ics.uci.edu>
-2006-02-23 Juanma Barranquero <lekktu@gmail.com>
+ * progmodes/gud.el (auto-mode-alist): Match more valid gdb init
+ file names.
- * textmodes/org.el (org-xemacs-p)
- (org-export-html-show-new-buffer, org-table-may-need-update)
- (org-insert-item, org-mhe-get-message-real-folder)
- (org-mhe-get-message-folder-from-index)
- (org-mhe-get-message-folder, org-mhe-get-message-num)
- (org-mhe-get-header, org-make-org-heading-search-string)
- (org-make-org-heading-camel, org-table-sort-lines)
- (org-format-org-table-html, org-format-table-table-html):
- Fix typos in docstrings.
+2007-07-03 Jay Belanger <jay.p.belanger@gmail.com>
-2006-02-23 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-cleaned-string-for-export)
- (org-solidify-link-text): New function.
- (org-add-hook): Use `add-local-hook' instead of `make-local-hook' for
- XEmacs, just to silence the compiler.
- (org-export-as-ascii, org-export-as-html-and-open):
- Use `org-cleaned-string-for-export' and create internal links.
- (org-follow-mhe-link): Require mh-e, use folder.
-
-2006-02-23 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-buttons): Use shadow face properly.
-
- * progmodes/gdb-ui.el (gdb-debug-ring-max): Rename from
- gdb-debug-log-length.
- (gdb-debug-ring): Rename from gdb-debug-log-ring. Don't make
- it a real ring but...
- (gud-gdba-marker-filter): ...make it work like mark-ring.
- (gdb-enable-debug): Rename from gdb-enable-debug-log.
- (gdb-mouse-jump): New function. Add bindings.
-
-2006-02-23 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-signalled): New variable and function.
- (gdb-debug-log-ring): Rename from gdb-debug-log and make a ring.
- (gdb-send, gdb-send-item, gud-gdba-marker-filter): Use it.
- (gdb-debug-log-length): Customize it's length.
- (gud-watch, gdb-var-create-handler): Display function::var format
- but don't use to create variable object.
- (gdb-var-create-handler): Use message-box in place of message.
- (gdb-stopped): Call gdb-exited if signalled.
-
-2006-02-22 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex.el (reftex-locate-file): Remove duplicate function.
-
- * textmodes/reftex-vars.el (reftex-try-all-extensions): New option.
-
- * textmodes/reftex.el (reftex-locate-file): Search all extensions
- if `reftex-try-all-extensions' is set.
-
- * textmodes/reftex-dcr.el (reftex-view-crossref): New argument to
- fail silently when there is no valid argument at point.
- (reftex-view-crossref-when-idle): Call `reftex-view-crossref' with
- `fail-silently' argument. From a patch by David Reiter.
-
- * textmodes/org.el (org-mark-ring-push, org-mark-ring-goto):
- New commands.
- (org-mark-ring): New variable.
- (org-mark-ring-length): New option.
- (org-open-at-point, org-goto, org-open-file): Push old position
- onto the mark ring.
- (org-add-hook): New function.
- (org-export-table-remove-special-lines): New option.
- (org-skip-comments, org-format-org-table-html): Respect new
- option `org-export-table-remove-special-lines'.
- (org-open-file): Allow special command configuration for
- directory link.
- (org-file-apps): Fix bugs in customize type, added setting
- for directories.
- (org-activate-tags, org-format-agenda-item, org-complete)
- (org-get-tags-at, org-scan-tags, org-make-tags-matcher)
- (org-get-tags, org-get-buffer-tags, org-open-at-point)
- (org-link-search, org-make-org-heading-search-string)
- (org-make-org-heading-camel): Allow @ and 0-9 as tags characters.
- (org-radio-targets, org-file-link-context-use-camel-case)
- (org-activate-camels): New options.
- (org-update-radio-target-regexp, org-all-targets)
- (org-make-target-link-regexp, org-activate-target-links):
+ * calculator.el (calculator-expt, calculator-integer-p):
New functions.
- (org-make-org-heading-search-string): New function.
- (org-store-link, org-insert-link): Use new option
- `org-file-link-context-use-camel-case'.
- (org-activate-camels): Use new option `org-activate-camels'.
- (org-link-regexp): Add mhe prefix.
- (org-open-at-point, org-store-link): Support for mhe links.
- (org-mhe-get-message-real-folder, org-mhe-get-message-folder)
- (org-mhe-get-message-folder-from-index, org-mhe-get-message-num)
- (org-mhe-get-header, org-follow-mhe-link): New functions.
- (org-remove-angle-brackets, org-add-angle-brackets):
+ (calculator-fact): Check to see if the factorial will be too
+ large before computing it.
+ (calculator-initial-operators): Use `calculator-expt' to
+ compute "^".
+ (calculator-mode): Mention that results which are too large
+ will return inf.
+ * calc/calc-comb.el (math-small-factorial-table): Replace list
+ by vector.
+
+2007-07-03 David Kastrup <dak@gnu.org>
+
+ * shell.el: On request of the authors, remove their addresses for
+ the sake of bug reports, and add the developer list address as
+ maintainer information.
+
+2007-07-03 Richard Stallman <rms@gnu.org>
+
+ * files.el (make-directory): Doc fix.
+ (find-file-confirm-inexistent-file): Make it a defcustom.
+ Make nil the default.
+
+2007-07-02 Richard Stallman <rms@gnu.org>
+
+ * startup.el (command-line): Set buffer-offer-save in *scratch*
+ and enable auto-save in it.
+
+2007-07-02 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (orgstruct-mode-map): New variable.
+ (orgstruct-mode): New minor mode.
+ (turn-on-orgstruct, orgstruct-error, orgstruct-setup)
+ (orgstruct-make-binding, org-context-p, org-get-local-variables)
+ (org-run-like-in-org-mode): New functions.
+ (org-cycle-list-bullet): New command.
+ (org-special-properties, org-property-start-re)
+ (org-property-end-re): New constants.
+ (org-with-point-at): New macro.
+ (org-get-property-block, org-entry-properties, org-entry-get)
+ (org-entry-delete, org-entry-get-with-inheritance)
+ (org-entry-put, org-buffer-property-keys): New functions.
+ (org-insert-property-drawer): New command.
+ (org-entry-property-inherited-from): New variable.
+ (org-column): New face.
+ (org-column-overlays, org-current-columns-fmt)
+ (org-current-columns-maxwidths, org-column-map): New variables.
+ (org-column-menu): New menu.
+ (org-new-column-overlay, org-overlay-columns)
+ (org-overlay-columns-title, org-remove-column-overlays)
+ (org-column-show-value, org-column-quit, org-column-edit):
New functions.
- (org-bracket-link-regexp): New constant.
- (org-read-date): Fix bug that was rejecting all typed dates.
- (org-link-search): Make hierarchy above visible after a match.
- (org-follow-bbdb-link): Inhibit electric mode for BBDB.
- (org-store-link): Fix bug with link creation when cursor is in
- an empty line.
- (org-open-at-point): Fix bug with matching a link.
- Fixed buggy argument sequence in call to `org-view-tags'.
- (org-compile-prefix-format): Set `org-prefix-has-tag'.
- (org-prefix-has-tag): New variable.
- (org-format-agenda-item): Remove tags from headline
- if appropriate.
- (org-agenda-remove-tags-when-in-prefix): New option.
-
-2006-02-21 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-diff.el (ediff-setup-diff-regions, ediff-setup-diff-regions3):
- Fix the regular expressions.
-
-2006-02-21 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/sh-script.el (sh-mode): Set shell type based on file name
- if there's no other specific basis.
-
- * emacs-lisp/unsafep.el (unsafep): Don't treat &rest or &optional
- as variables at all.
- (unsafep-variable): Rename arg; doc fix.
-
- * abbrevlist.el (list-one-abbrev-table): Add autoload.
-
- * calendar/appt.el (diary-selective-display): Add defvar.
-
- * sort.el (sort-columns): Use Posix arg syntax for `sort'.
-
- * isearch.el (search-whitespace-regexp): Fix custom type.
-
- * help.el (describe-key-briefly): Compute interactive args
- in same was as before previous change.
-
- * files.el (enable-local-variables): Doc fix.
-
-2006-02-21 Kim F. Storm <storm@cua.dk>
-
- * fringe.el: Cleanup as file is now pre-loaded.
- (fringe-bitmaps): Initialize unconditionally.
- (fringe-mode, set-fringe-style): Remove autoload cookies.
-
-2006-02-21 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
-
- * fringe.el (fringe-bitmaps): Rename `horisontal-bar' to
- `horizontal-bar'.
- (fringe-cursor-alist): Use `horizontal-bar'.
-
-2006-02-20 Kim F. Storm <storm@cua.dk>
-
- * fringe.el (fringe-bitmaps): Update to new bitmap names.
- (fringe-indicator-alist, fringe-cursor-alist): Initialize.
-
- * loadup.el: Load "fringe" on window systems.
-
-2006-02-20 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-buttons): Use shadow face for all
- out of scope components.
-
- * progmodes/gdb-ui.el (gdb-speedbar-auto-raise): Don't enable by
- default.
-
-2006-02-20 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (customize-mark-to-save, customize-mark-as-set):
- Load the symbol first.
-
-2006-02-20 Juanma Barranquero <lekktu@gmail.com>
-
- * buff-menu.el (list-buffers-noselect): Turn also "\n" into a
- strech spec so it doesn't display as "^J" on the header line
- when `Buffer-menu-use-header-line' is t.
-
-2006-02-20 Nick Roberts <nickrob@snap.net.nz>
-
- * speedbar.el (speedbar-make-button): Keep text properties
- of string arguments if desired.
-
- * progmodes/gud.el (gud-speedbar-buttons): Fontify watch
- expessions.
-
- * progmodes/gdb-ui.el (gdb-speedbar-expand-node): Force update
- of speedbar.
-
-2006-02-19 Ryan Yeske <rcyeske@gmail.com>
-
- * ffap.el (ffap-read-file-or-url): Bind `completion-ignore-case'
- to value of `read-file-name-completion-ignore-case'.
-
-2006-02-19 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (customize-mark-as-set): Push to `user' theme.
-
- * cus-edit.el (custom-save-variables): Allow unthemed values.
- (customize-set-variable): Push setting to `user' theme.
-
-2006-02-19 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el: Don't require font-lock as it's now
- automatically loaded.
- (gud-speedbar-buttons): Replace gdb-var-changed with
- gdb-force-update.
-
- * progmodes/gdb-ui.el (gdb-force-update): Rename from
- gdb-var-changed.
- (gdb-post-prompt): Use it.
- (gdb-var-create-handler, gdb-var-evaluate-expression-handler)
- (gdb-var-update-handler, gdb-var-delete)
- (gdb-speedbar-expand-node, gdb-var-list-children-handler-1)
- (gdb-var-update-handler-1): Don't set gdb-var-changed, just set
- gdb-force-update in gdb-post-prompt.
- (gdb-reset): Clear watch expressions from speedbar when quitting.
-
-2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-cmd.el (viper-insert-state-post-command-sentinel)
- (viper-change-state-to-vi, viper-change-state-to-emacs):
- Make aware of cursor coloring in the Emacs state.
- (viper-special-read-and-insert-char): Use read-char-exclusive.
- (viper-minibuffer-trim-tail): Workaround for fields in minibuffer.
-
- * emulation/viper-init.el (viper-emacs-state-cursor-color):
- New variable.
-
- * emulation/viper-util.el (viper-save-cursor-color)
- (viper-get-saved-cursor-color-in-replace-mode)
- (viper-get-saved-cursor-color-in-insert-mode)
- (viper-restore-cursor-color): Make aware of the cursor color
- in Emacs state.
- (viper-get-saved-cursor-color-in-emacs-mode): New function.
-
- * ediff-diff.el (ediff-ignore-case, ediff-ignore-case-option)
- (ediff-ignore-case-option3, ediff-actual-diff-options)
- (ediff-actual-diff3-options): New variables to control case sensitivity.
- (ediff-make-diff2-buffer, ediff-setup-fine-diff-regions)
- (ediff-setup-diff-regions3): Make aware of case-sensitivity.
- (ediff-toggle-ignore-case): New function.
- (ediff-extract-diffs, ediff-extract-diffs3): Preserve point in buffers.
-
- * ediff-help.el (ediff-long-help-message-narrow2)
- (ediff-long-help-message-compare2, ediff-long-help-message-compare3)
- (ediff-long-help-message-word-mode): Add ignore-case command.
- (ediff-help-for-quick-help): Add ignore-case command.
-
- * ediff-merg.el: Move provide to the end.
-
- * ediff-ptch.el: Move provide to the end.
-
- * ediff-wind.el: Move provide to the end.
-
- * ediff-mult.el: Move provide to the end.
- (ediff-set-meta-overlay): Enable follow-link.
-
- * ediff.el: Move provide to the end.
- Break recursive load cycle in eval-when-compile.
- (ediff-patch-buffer): Better heuristics.
-
- * ediff-util.el: Move provide to the end.
- Break recursive load cycle in eval-when-compile.
- (ediff-setup-keymap): Add binding for #c. Replace some defsubsts with
- defuns.
- (ediff-submit-report): Pass the values of ediff-diff3-program,
- ediff-diff3-options.
-
-2006-02-19 Juanma Barranquero <lekktu@gmail.com>
-
- * help-fns.el (help-do-arg-highlight): Recognize also ARG- followed by
- the opening bracket of the following bracketing pairs: {}, [], (), <>,
- `' (for example, in the docstring of `windmove-default-keybindings').
-
-2006-02-19 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-buttons): Update properly for
- shadow face. Don't provide binding to edit variable when it is
- out of scope.
-
- * progmodes/gdb-ui.el (gdb-var-evaluate-expression-handler)
- (gdb-var-update-handler): Detect out of scope variables with pre
- GDB 6.4 too.
- (gdb-post-prompt): Revert change from 2006-02-17 (force update).
- Reset status of variable objects to nil in update handlers.
- (gdb-var-update-handler-1): Detect when a variable object comes
- in scope. setcar on var changes gdb-var-list directly.
-
-2006-02-17 Juri Linkov <juri@jurta.org>
-
- * ffap.el (ffap) <defface>: Add explicit face declaration.
- (ffap-highlight): Use face `ffap' directly instead of checking
- for its existence.
-
- * icomplete.el (icomplete-get-keys): Use `t' for the second arg
- `visible-ok' of `other-buffer' to find the right original buffer.
-
- * info.el (Info-search): Skip `Local Variables' node.
-
-2006-02-17 Juri Linkov <juri@jurta.org>
-
- * info.el (Info-find-file): Check for symbols `apropos', `history',
- `toc' in the input filename, and return these symbols as is.
- (Info-find-node-2): Set Info-current-file to symbols `apropos',
- `history', `toc' instead of strings.
- (Info-set-mode-line): For non-string Info-current-file use the
- symbol's name inside **.
- (Info-isearch-push-state): Add quote before Info-current-file and
- Info-current-node.
- (Info-isearch-pop-state): Use `equal' instead of `string='.
- (Info-extract-pointer, Info-following-node-name): Use
- `match-string-no-properties' instead of `match-string'.
- (Info-up): Check `old-file' for `stringp'.
- (Info-history): Use `equal' instead of `string-equal'.
- Check `file' for `stringp'.
- (Info-history): Use symbol `history' instead of string as first arg
- of `Info-find-node'.
- (Info-toc): Check `Info-current-file' for `stringp'. Use symbol
- `toc' instead of string.
- (Info-extract-menu-node-name): Use `buffer-substring-no-properties'
- instead of `buffer-substring', and `match-string-no-properties'
- instead of `match-string'.
- (Info-index-nodes): Check for symbols `apropos', `history', `toc'
- instead of strings.
- (info-apropos): Use `Info-find-node' instead of `Info-goto-node'.
- Use symbol `apropos' instead of string.
- (Info-copy-current-node-name): Check `Info-current-file' for
- `stringp' and construct a command with `Info-find-node' from it.
- (Info-fontify-node): Use `match-string-no-properties' instead of
- `match-string' and check file names for `stringp'.
- (Info-desktop-buffer-misc-data): Check for symbols `apropos',
- `history', `toc' instead of strings.
-
-2006-02-17 Chong Yidong <cyd@stupidchicken.com>
-
- * files.el: Rearrange functions and variables in the file local
- variables section.
-
-2006-02-17 Reiner Steib <Reiner.Steib@gmx.de>
-
- * files.el: Add truncate-lines, ispell-check-comments and
- ispell-local-dictionary as safe local variables.
-
-2006-02-18 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-buttons): Use shadow face for
- out of scope variables.
- (gud-speedbar-buttons): Use unless.
-
- * progmodes/gdb-ui.el (gdb-var-list): Update doc string.
- (gdb-init-1, gdb-var-changed): Set gdb-var-changed to t initially.
- (gdb-show-changed-values): Also use for out of scope variables.
- (gdb-var-update-handler-1): Note if variable goes out of scope.
-
-2006-02-17 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el (rcirc-connect): Make all arguments optional, and
- default to global variable values for unsupplied args.
- (rcirc-get-buffer-create): Fix bug with setting the target.
- (rcirc-any-buffer): Rename from rcirc-get-any-buffer, and include
- test for rcirc-always-use-server-buffer-flag here.
- (rcirc-response-formats): Add %N, which is a facified nick. %n
- uses the default face. Change the ACTION format string. If the
- "nick" is the server, don't print anything for that field.
- Comment fixes.
- (rcirc-target-buffer): Don't test
- rcirc-always-use-server-buffer-flag here.
- (rcirc-print): Squeeze extra spaces out of the text before message.
- (rcirc-put-nick-channel): Strip potential "@" char from nick
- before adding them to nick table.
- (rcirc-url-regexp): Improve to match address like "foo.com".
-
-2006-02-17 Eli Zaretskii <eliz@gnu.org>
-
- * allout.el (allout-hidden-p): Move this defsubst before
- allout-overlay-interior-modification-handler, where it is first
- used.
-
-2006-02-17 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el: Use allout invisible-text overlays instead of
- selective display for concealed text. Also, lots of general
- cleanup, and improved compatibility code.
-
- (allout-version): Incremented, corrected, revised, and refined
- module commentary.
-
- (provide 'allout): Moved to the bottom, added a require of overlay.
-
- (allout-encrypt-unencrypted-on-saves): Defaults to t instead of
- `except-current'.
- (allout-write-file-hook-handler): Minimize delay.
- (count-trailing-whitespace-region): New function so
- auto-encryption of current topic can resituate cursor exactly.
- PGP/GPG encryption trims trailing whitespace from lines, which
- must be accounted for across encryption then decryption.
-
- (allout-command-prefix): Now defaults to "\C-c<space>" rather than
- just plain "\C-c", to avoid intruding on user's keybinding space.
-
- (allout-toggle-current-subtree-encryption): Pass along fetch-pass
- parameter, so user request to provide a new password is done.
-
- (allout-outside-normal-auto-fill-function, allout-auto-fill):
- Refined mechanism for auto-filling behavior while in allout mode.
-
- (allout-mode): Explicitly specify the mode map in the docstring.
- Clarify provision for various write-file hook var names.
- Adjusted for invisible-text overlays instead of selective-display.
-
- (allout-depth): Really return 0 if not within any topic. This
- rectifies `allout-beginning-of-level' and sequence numbering
- errors that occur when cutting and pasting numbered topics.
- Changed from a in-line subst to a regular function, as well.
-
- (allout-pre-next-prefix): Renamed from allout-pre-next-preface.
-
- (allout-end-of-subtree, allout-end-of-subtree)
- (allout-end-of-entry, allout-end-of-current-heading)
- (allout-next-visible-heading, allout-open-topic, allout-show-entry)
- (allout-show-children, allout-show-to-offshoot)
- (allout-hide-current-entry, allout-show-current-entry): Rectified
- handling of trailing blank lines between items.
-
- (allout-line-boundary-regexp, set-allout-regexp, allout-depth)
- (allout-current-depth, allout-unprotected, allout-hidden-p)
- (allout-on-current-heading-p, allout-listify-exposed)
- (allout-chart-subtree, allout-goto-prefix)
- (allout-back-to-current-heading, allout-get-body-text)
- (allout-snug-back, allout-flag-current-subtree, allout-show-all)
- (allout-hide-region-body, allout-toggle-subtree-encryption)
- (allout-encrypt-string, allout-encrypted-key-info)
- (allout-next-topic-pending-encryption, allout-encrypt-decrypted)
- (allout-file-vars-section-data): Adjusted for use with
- invisible-text overlays instead of selective-display.
-
- (allout-kill-line, allout-kill-topic, allout-yank-processing):
- Reworked for use with invisible text overlays.
-
- (allout-current-topic-collapsed-p): New function.
-
- (allout-hide-current-subtree): Use allout-current-topic-collapsed-p
- to know when to close the containing topic.
-
- (allout-pre-command-business, allout-post-command-business):
- Simplify undo-batching and dynamic isearch exposure.
-
- (allout-set-overlay-category): New for invisible-text overlays.
- Sets properties of allout-overlay-category, used by
- allout-flag-region to set invisible-text overlay properties.
- (allout-get-invisibility-overlay): Get the first qualifying
- invisibility overlay, so we can find the extent of it.
- (allout-back-to-visible-text): Get to just before the beginnining
- of the current invisibility overlay, if any.
-
- (allout-overlay-insert-in-front-handler)
- (allout-overlay-interior-modification-handler)
- (allout-before-change-handler, allout-isearch-end-handler): New
- functions to handle extraordinary actions affecting concealed
- text.
-
- (allout-flag-region): Use overlays instead of selective-display
- for invisible text - by inheritence from the properties of
- allout-overlay-category in mainline Emacs, and applied
- property-by-property in XEmacs, some recent versions of which
- don't inherit the properties from the category. Provisions to
- respond to concealed-text edits simplified drastically.
-
- (allout-isearch-rectification, allout-isearch-was-font-lock)
- (allout-isearch-expose, allout-enwrap-isearch)
- (allout-isearch-abort, allout-pre-was-isearching)
- (allout-isearch-prior-pos, allout-isearch-did-quit)
- (allout-isearch-dynamic-expose)
- (allout-hide-current-entry-completely): Functions deleted.
-
- (allout-undo-aggregation): Explicit undo aggregation no longer
- necessary due to transition away from selective-display.
-
- (set-allout-regexp, allout-up-current-level)
- (allout-next-visible-heading, allout-forward-current-level)
- (allout-open-topic, allout-reindent-body, allout-rebullet-topic)
- (allout-kill-line, allout-yank-processing, allout-show-children)
- (allout-expose-topic, allout-old-expose-topic)
- (allout-listify-exposed, allout-insert-latex-header)
- (allout-toggle-subtree-encryption, allout-encrypt-string)
- (remove-from-invisibility-spec, allout-hide-current-subtree):
- Ditched unused variables.
-
-2006-02-17 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/ispell.el (ispell-change-dictionary): Call
- ispell-buffer-local-dict instead of
- ispell-accept-buffer-local-defs.
- (ispell-local-dictionary-alist): Accept as valid any coding-system
- supported by Emacs.
- (ispell-dictionary-alist-3): Esperanto dictionary's coding system
- changed to iso-8859-3.
-
-2006-02-17 Nick Roberts <nickrob@snap.net.nz>
-
- * speedbar.el (speedbar-frame-width): Make an inline function
- instead of a macro. Use frame-width.
- (speedbar-try-completion, speedbar-update-contents)
- (speedbar-timer-fn): Use consp.
- (speedbar-update-localized-contents): Try to preserve point.
-
- * progmodes/gdb-ui.el (gdba, gdb-var-list): Improve doc strings.
- (menu): Re-order menu items.
- (gdb-var-update-regexp, gdb-var-update-regexp-1): Match "in_scope"
- field.
- (gdb-var-update-handler-1): Use it for GDB 6.4+.
- (gdb-post-prompt): Speed things by not forcing update.
-
-2006-02-16 Chong Yidong <cyd@stupidchicken.com>
-
- * wid-edit.el (widget-button-click): For mouse-1, cancel button
- press and perform default action if we get a mouse movement event.
-
-2006-02-16 Juanma Barranquero <lekktu@gmail.com>
-
- * calendar/icalendar.el (icalendar--get-event-property)
- (icalendar--get-event-property-attributes): Fix typos in
- docstrings.
-
- * progmodes/flymake.el (flymake-fix-file-name): Fix typo in
- docstring.
-
-2006-02-15 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs-mode): Use `buffer-disable-undo'.
- (bs--get-file-name): Simplify.
- (bs-show-in-buffer): Mark the buffer as not modified.
-
-2006-02-14 Chong Yidong <cyd@stupidchicken.com>
-
- * wid-edit.el (widget-keymap): Bind down-mouse-1 to
- widget-button-click.
-
- * cus-edit.el (custom-mode-map): Remove mouse-1 binding.
- (custom-mode): Update docstring.
-
- * cus-theme.el (custom-new-theme-mode-map): Remove mouse-1
- binding.
-
- * files.el (hack-local-variables-confirm): Allow scrolling if the
- file variable list is too long. Kill temp buffer after use.
-
-2006-02-15 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb): Improve doc string.
- (gdb-script-font-lock-keywords): Expand allowed character set.
-
- * progmodes/gdb-ui.el (gdb-use-separate-io-buffer)
- (gdb-display-separate-io-buffer, gdb-frame-separate-io-buffer)
- (gdb-separate-io-interrupt, gdb-separate-io-quit)
- (gdb-separate-io-stop, gdb-separate-io-eof):
- Rename from gdb-inferior-* to gdb-separate-*.
- (gdb-set-gud-minor-mode-existing-buffers-1): Improve doc string.
-
-2006-02-14 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-arith.el (math-check-known-scalarp): Make sure
- expression is a symbol before checking that it is bound.
-
- * calc/calcalg2.el (math-integrate-by-parts): Do a more careful
- test to see if equation can be solved.
-
-2006-02-14 Chong Yidong <cyd@stupidchicken.com>
-
- * wid-edit.el (widget-button-click): Use :pressed-face property
- for overlay face, if it exists.
-
- * cus-edit.el (custom-manual, custom-add-see-also)
- (custom-add-parent-links, custom-group-link): Add :pressed-face
- property to links.
-
- * files.el (hack-local-variables): Remove ignored variables before
- checking if any variables need setting.
-
-2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * cus-start.el (all): Add x-gtk-whole-detached-tool-bar.
-
-2006-02-14 Juanma Barranquero <lekktu@gmail.com>
-
- * help.el (where-is): Fix message for remapped commands.
-
- * mwheel.el (mouse-wheel-click-event, mouse-wheel-mode):
- Fix typos in docstrings.
-
-2006-02-13 Chong Yidong <cyd@stupidchicken.com>
-
- * files.el (safe-local-variable-values): New option.
- (hack-local-variables-prop-line): Return a list of variable-value
- pairs if MODE-ONLY is non-nil.
- (hack-local-variables): Construct list of variable-value pairs,
- and apply or reject them in one go. Ask for confirmation if
- variables are not known safe.
- (hack-local-variables-confirm): Complete rewrite. Support
- `safe-local-variable-values'.
- (enable-local-variables): Update docstring to reflect new
- behavior.
- (ignored-local-variables): Ignore ignored-local-variables and
- safe-local-variable-values.
- (safe-local-variable-p): New function.
- (risky-local-variable-p): `safe-local-variable' property check
- moved to safe-local-variable-p.
- (hack-one-local-variable): Checks moved to hack-local-variables.
-
- (byte-compile-dynamic, c-basic-offset, c-file-style)
- (c-indent-level, comment-column, fill-column, fill-prefix)
- (indent-tabs-mode, kept-new-versions, no-byte-compile)
- (no-update-autoloads, outline-regexp, page-delimiter)
- (paragraph-start, paragraph-separate, sentence-end)
- (sentence-end-double-space tab-width, version-control):
- Add `safe-local-variable' property.
-
- * find-lisp.el: Delete nonexistent `autocompile' file variable.
-
- * icomplete.el, play/landmark.el: Change nonexistent
- `outline-layout' file variable to `allout-layout'.
-
-2006-02-14 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gud-watch, gdb-invalidate-registers-1)
- (gdb-get-changed-registers): Test value of gud-minor-mode relative
- to gud-comint-buffer.
- (gdb-speedbar-expand-node, gdb-locals-mode): Use functions in
- gdb-ui.el for gdb-mi.el.
- (gdb-post-prompt, gdb-get-changed-registers): Move test for
- registers buffer to gdb-get-changed-registers.
- (gdb-breakpoint-regexp): New regexp. Allow toggling and
- deletion of catchpoints (throw and catch).
- (gdb-toggle-breakpoint, gdb-delete-breakpoint)
- (gdb-goto-breakpoint): Use it for both gdb-ui and gdb-mi.
- (gdb-find-file-hook, gdb-set-gud-minor-mode-existing-buffers-1)
- (gdb-var-list-children-1, gdb-info-breakpoints-custom)
- (gdb-var-update-1, gdb-invalidate-locals-1): Use also for gdb-mi.
-
-2006-02-13 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-arith.el (math-check-known-matrixp): Make sure
- expression is a symbol before checking that it is bound.
-
-2006-02-13 Richard M. Stallman <rms@gnu.org>
-
- * mouse.el (mouse-drag-mode-line-1): Use mouse-drag-move-window-bottom
- for the minibuffer too, but not if resize-mini-windows will interfere.
-
- * help.el (describe-key-briefly, describe-key): Do all arg-reading
- inside `interactive' spec.
- (describe-key-briefly-internal, describe-key-internal):
- Functions merged back into their callers.
-
-2006-02-13 Martin Rudalics <rudalics@gmx.at>
-
- * info.el (info-xref-visited): Inherit from info-xref too.
- (Info-set-mode-line): Replace occurrences of `%' by `%%'
- when propertizing Info-current-file and Info-current-node.
-
-2006-02-13 Juri Linkov <juri@jurta.org>
-
- * tumme.el (tumme-thumbnail-storage): Fix docstring.
- (tumme-thumb-name): Fix per-directory format.
-
-2006-02-13 Juanma Barranquero <lekktu@gmail.com>
-
- * subr.el (substitute-key-definition): Doc fix (hide internal arg).
-
-2006-02-12 Miles Bader <miles@gnu.org>
-
- * net/rcirc.el (rcirc-format-response-string): Fix small bugs.
-
-2006-02-13 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el: Remove history section. If someone needs the it, it
- can always be found in CVS.
-
-2006-02-12 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el (tumme-thumbnail-storage): Update docstring. Add info
- about the Thumbnail Managing Standard option.
-
-2006-02-12 Richard M. Stallman <rms@gnu.org>
-
- * subr.el (substitute-key-definition): Doc fix.
-
- * simple.el (blink-matching-paren-dont-ignore-comments): Doc fix.
-
- * files.el (magic-mode-alist): Don't use `\\s ' in regexps.
-
- * info.el (Info-mode): Doc fix.
-
- * progmodes/ebrowse.el (ebrowse-global-prefix-key): Change to C-c C-m.
-
-2006-02-12 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-remote-path): Add "/usr/xpg4/bin" on top,
- because on Solaris a POSIX compatible "id" is needed. Reported by
- Magnus Henoch <mange@freemail.hu>.
-
-2006-02-12 Juri Linkov <juri@jurta.org>
-
- * tumme.el: Remove todo item about Thumbnail Managing Standard.
- (tumme) <defgroup>: Change :group to `multimedia'.
- (tumme-thumbnail-storage): Add choice `standard' for Thumbnail
- Managing Standard.
- (tumme-cmd-create-thumbnail-options): Use %w and %h instead of %s.
- Fix dostring.
- (tumme-cmd-create-temp-image-options): Use %w and %h instead of %x
- and %y. Fix docstring.
- (tumme-cmd-pngnq-program, tumme-cmd-pngcrush-program)
- (tumme-cmd-create-standard-thumbnail-command): New user options.
- (tumme-thumb-size): Set default to 128 if tumme-thumbnail-storage
- is `standard'. Fix docstring.
- (tumme-thumb-width, tumme-thumb-height): New user options.
- (tumme-external-viewer): Try to find various viewers.
- (tumme-get-thumbnail-image): Use `create-image' instead of
- constructing the `image' structure.
- (tumme-insert-thumbnail): Use `png' if tumme-thumbnail-storage is
- `standard'.
- (tumme-thumb-name): Add file name generation for standard storage.
- Simplify code for other storages.
- (tumme-thumb-name): Use width %w and height %h instead of size %s.
- Add modification time %m and thumbnail-nq8 %q.
- Use `tumme-cmd-create-standard-thumbnail-command' if
- tumme-thumbnail-storage is `standard'.
- (tumme-dired-insert-marked-thumbs): New autoload command.
- (tumme-dired-after-readin-hook): New function.
- (tumme-line-up-dynamic): Use `tumme-thumb-width' instead of
- `tumme-thumb-size'.
- (tumme-display-image): Replace size-x %x and size-y %y with
- width %w and height %h.
-
- * dired.el (dired-mode-map): Bind `\C-t\C-t' to
- `tumme-dired-insert-marked-thumbs'.
-
-2006-02-12 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el (tumme-write-tag): Fix small bug (file name did not
- include path).
- (tumme-mark-tagged-files): Fix bug in regexp used to find rows
- matching tag.
-
-2006-02-12 Miles Bader <miles@gnu.org>
-
- * net/rcirc.el (rcirc-nick-abbrevs, rcirc-response-formats):
- New variables.
- (rcirc-abbrev-nick): New function.
- (rcirc-format-response-string): Rewrite to use the formats in
- `rcirc-response-formats' and expand escape sequences therein.
- A text-property `rcirc-text' is added over the actual response
- text to make easy to find inside the returned string.
- (rcirc-print): When filling, just look for the `rcirc-text'
- text-property to find the appropriate fill prefix, instead of
- using hardwired patterns.
-
-2006-02-11 Mathias Dahl <brakjoller@hotmail.com>
-
- * tumme.el: Enhance some docstrings. Add todo item about Thumbnail
- Managing Standard.
-
-2006-02-11 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-buffer-internal): Set mark for ido-insert-buffer.
- Don't use insert-buffer; do insert-buffer-substring directly.
- (ido-file-internal): Set mark for ido-insert-file. Use insert-file-1.
-
-2006-02-11 Martin Rudalics <rudalics@gmx.at>
-
- * files.el (revert-buffer, recover-file): Replace buffer-read-only
- with inhibit-read-only. Suggested by Stefan Monnier.
- (revert-buffer): Let insert-file-contents discard
- buffer-undo-list. Simplify code.
- (find-file, find-file-existing, revert-buffer): Doc-string fixes.
-
-2006-02-11 Eli Zaretskii <eliz@gnu.org>
-
- * menu-bar.el (menu-bar-select-yank): Add a doc string.
-
- * help.el (describe-key-briefly): Now a wrapper for
- describe-key-briefly-internal. Bind enable-disabled-menus-and-buttons
- to t. Populate yank-menu if empty.
- (describe-key-briefly-internal): Renamed from describe-key-briefly.
- (describe-key): Now a wrapper for describe-key-internal. Bind
- enable-disabled-menus-and-buttons to t. Populate yank-menu if empty.
- (describe-key-internal): Renamed from describe-key.
-
-2006-02-11 Milan Zamazal <pdm@zamazal.org>
-
- * progmodes/glasses.el (glasses-separator): Doc fix.
- (glasses-original-separator): New defcustom.
- (glasses-make-readable, glasses-convert-to-unreadable): Use it.
-
-2006-02-11 Martin Rudalics <rudalics@gmx.at>
-
- * mwheel.el (mouse-wheel-up-event): Doc fix.
-
-2006-02-11 Mathias Dahl <brakjoller@hotmail.com>
-
- * tumme.el (tumme-dir): Change default value to "~/.emacs.d/tumme/".
- (tumme-dir): New function. Copied from thumbs.el.
-
-2006-02-10 Juanma Barranquero <lekktu@gmail.com>
-
- * desktop.el (desktop-outvar): Fix typo.
- (desktop-save-buffer-p): Doc fix.
-
- * subr.el (substitute-key-definition): Fix typo.
-
-2006-02-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * frame.el (select-frame-set-input-focus): Call x-focus-frame also
- when window-system is mac.
-
- * term/mac-win.el (fontset-standard): Rename from "fontset-mac".
-
-2006-02-10 Kim F. Storm <storm@cua.dk>
-
- * subr.el (substitute-key-definition-key): Pass t for NOERROR to
- indirect-function instead of using condition-case.
-
-2006-02-10 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el (tumme-copy-with-exif-file-name): Try to make docstring
- less `colloquial'...
-
-2006-02-09 Mathias Dahl <mathias.dahl@gmail.com>
-
- * tumme.el: Add a couple of todo items.
-
-2006-02-09 Lars Hansen <larsh@soem.dk>
-
- * hilit-chg.el: Add highlight-changes-mode to desktop-locals-to-save.
- (highlight-changes-mode): Don't change desktop-locals-to-save.
-
-2006-02-09 Chong Yidong <cyd@stupidchicken.com>
-
- * image-mode.el (image-toggle-display): Clear image cache if using
- filename.
-
-2006-02-09 Masatake YAMATO <jet@gyve.org>
-
- * dired-x.el (dired-guess-shell-alist-default): Add .man as
- a `dired-man' target.
-
- * progmodes/autoconf.el (autoconf-font-lock-keywords): Check start
- boundary of symbols.
-
-2006-02-08 Peter Doornbosch <peter.doornbosch@luminis.nl> (tiny change)
-
- * vc-svn.el (vc-svn-print-log): Show recent commits as well.
-
-2006-02-09 Juanma Barranquero <lekktu@gmail.com>
-
- * hilit-chg.el (hilit-chg-update-all-buffers): Use `mapc' instead of
- `mapcar'; return nil.
-
-2006-02-08 Chong Yidong <cyd@stupidchicken.com>
-
- * mouse.el (mouse-drag-track): Don't change window if we rebind to
- some other event.
-
-2006-02-08 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el (rcirc-startup-channels-alist):
- Add irc.freenode.net and #emacs as defaults.
- (rcirc-ignore-all-activity-flag): Remove variable.
- (rcirc-authinfo): New variable.
- (rcirc-authinfo-filename): Remove variable.
- (rcirc-always-use-server-buffer-flag): New flag.
- (rcirc): M-x rcirc will automatically connect without prompting.
- C-u M-x rcirc will prompt. Use rcirc-connect to create a
- connection in lisp.
- (rcirc-process-server-response-1): Remove everything but the nick
- portion of the sender so it doesn't need to be done everywhere
- else. Update related code.
- (global-map): Remove global keybindings.
- (rcirc-get-buffer-create): Make sure rcirc-topic is set.
- (rcirc-send-input): Split into several functions.
- (rcirc-process-input-line, rcirc-process-message)
- (rcirc-process-command): New functions.
- (rcirc-target-buffer): New function to determine where to route
- messages.
- (rcirc-user-nick): Save match data.
- (rcirc-toggle-ignore-buffer-activity)
- (rcirc-update-activity-string): Remove global ignore functionality,
- which can be done now by toggling rcirc-track-minor-mode.
- (rcirc-track-minor-mode-map): New keymap.
- (rcirc-track-minor-mode): New minor-mode.
- (ignore): Make the ignore output nicer. Always print it when
- adding or removing nicks.
- (rcirc-url-regexp): Improve.
- (rcirc-mangle-text): Remove properties before using text in the
- modeline.
- (rcirc-authenticate): Authentication data comes from
- rcirc-authinfo, not the file pointed to by rcirc-authinfo-file.
- (rcirc-server-prefix): Inherit from rcirc-server.
-
-2006-02-08 Mathias Megyei <Mathias.Megyei@micronas.com> (tiny change)
-
- * Makefile.in (compile): Append "|| true" to the end of the `find'
- command, like compile-always does.
-
-2006-02-08 Sam Steingold <sds@gnu.org>
-
- * net/tramp.el (tramp-maybe-open-connection): Do not wait for
- output from a dead connection.
-
-2006-02-07 Mathias Dahl <brakjoller@hotmail.com>
-
- * dired.el (dired-mode-map): Add more bindings for tumme.
-
-2006-02-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * wdired.el (wdired-mode-map): Use remap.
- (wdired-get-filename): Massage.
- (wdired-perm-mode-map): Don't copy bindings from wdired-mode-map.
- (wdired-preprocess-perms, wdired-set-bit, wdired-toggle-bit): Use the
- `keymap' property rather than `local-map'.
-
-2006-02-07 Mathias Dahl <brakjoller@hotmail.com>
-
- * tumme.el (tumme-get-thumbnail-image): New utility function.
- Suggested by from Chong Yidong.
- (tumme-dired-with-window-configuration): Rename from
- `tumme-dired'. Add code to save window configuration.
- (tumme-restore-window-configuration): New command to restore the
- window configuration that `tumme-dired-with-window-configuration'
- saves before it changes the window configuration.
- (tumme-show-all-from-dir): New command to display thumbnails for
- all files in a directory entered by the user, like M-x thumbs.
- (tumme-display-thumbs): Call `pop-to-buffer' after all thumbnails
- have been created.
- (tumme-display-thumbnail-original-image): Call `display-buffer'.
- (obsolete-tumme-display-thumbnail-original-image-and-buffer):
- Remove obsolete test function.
-
-2006-02-07 Juanma Barranquero <lekktu@gmail.com>
-
- * vc.el (small-temporary-file-directory): Remove defvar; there's
- a defcustom for it in files.el.
-
- * tumme.el (tumme-get-thumbnail-image): Add missing arg to `error'.
- Fix typo in message.
- (tumme-gallery-generate): Fix typo in `error' message.
- (tumme-display-window-height-correction)
- (tumme-display-window-width-correction, tumme-line-up-dynamic)
- (tumme-line-up-interactive): Dox fixes.
- (tumme-cmd-rotate-original-options, tumme-display-properties-format)
- (tumme-restore-window-configuration, tumme-format-properties-string)
- (tumme-create-thumbs, tumme-display-previous-thumbnail-original):
- Fix typos in docstrings.
-
-2006-02-07 Chris Moore <christopher.ian.moore@gmail.com>
-
- * wdired.el (wdired-get-filename): Fix bug: Don't re-normalize OLD.
-
-2006-02-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-tooltip-mode): Remove autoload cookie.
- User should use hook if desired.
-
- * progmodes/gdb-ui.el (gdb-post-prompt): Regenerate breakpoints
- buffer if necessary.
- (gdb-delete-frame-or-window): New function.
- (gdb-breakpoints-mode-map): Bind "q" to it.
-
-2006-02-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/nroff-mode.el: Clean up name space.
- (nroff-mode-syntax-table): Remove spurious `1' in the syntax of \n.
- (nroff-mode): Obey the global setting of nroff-electric-mode.
- (nroff-electric-mode): Use define-minor-mode and derived-mode-p.
-
- * calendar/calendar.el (calendar-increment-month): Typo in last change.
-
-2006-02-06 Thien-Thi Nguyen <ttn@gnu.org>
-
- * vc-svn.el (vc-svn-previous-version, vc-svn-next-version): New funcs.
-
-2006-02-06 Lars Hansen <larsh@soem.dk>
-
- * generic-x.el (etc-fstab-generic-mode): Add file system types
- cifs and usbdevfs. Allow special chars in file names.
-
-2006-02-05 Jay Belanger <belanger@truman.edu>
-
- Update copyright notices of the files in lisp/calc.
-
-2006-02-05 Romain Francoise <romain@orebokech.com>
-
- Update copyright notices of all files in the lisp/play directory.
-
-2006-02-04 Luc Teirlinck <teirllm@auburn.edu>
-
- * ldefs-boot.el: Regenerate.
-
- * emacs-lisp/find-func.el (find-definition-noselect): Minor doc fix.
-
-2006-02-05 Kim F. Storm <storm@cua.dk>
-
- * files.el (magic-mode-regexp-match-limit): New defvar.
- (set-auto-mode): Use it to limit magic-mode-alist matching.
-
-2006-02-04 Eli Zaretskii <eliz@gnu.org>
-
- * info.el (Info-index, Info-mode): Improve the description of the
- `i' command.
-
- * ldefs-boot.el: Regenerate.
-
-2006-02-03 Werner Lemberg <wl@gnu.org>
-
- * textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
- greedy to find the closing bracket in \*[...] and similar
- expressions. This is a first rough fix -- many additional
- refinements are necessary to make nroff mode really usable with groff.
-
-2006-02-03 Jens Petersen <petersen@redhat.com> (tiny change)
-
- * international/mule-cmds.el (set-locale-environment):
- Add "/usr/share/X11/locale/locale.alias" to search list for xorg-x11
- libX11.
-
-2006-02-03 Joe Wells <jbw@macs.hw.ac.uk> (tiny change)
-
- * arc-mode.el (archive-maybe-copy): Fix the way directories in the
- archive are created in archive-tmpdir.
-
-2006-02-02 John Paul Wallington <jpw@pobox.com>
-
- * ibuffer.el (ibuffer-compressed-file-name-regexp): New defcustom.
- (ibuffer-fontification-alist): Use it.
- (ibuffer-mode-map): Bind `ibuffer-mark-compressed-file-buffers'
- to "* z" and the Ibuffer Mark menu.
-
- * ibuf-ext.el (ibuffer-mark-compressed-file-buffers): New command.
-
-2006-02-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/table.el (*table--cell-describe-mode)
- (*table--cell-describe-bindings): Undo last change since
- print-help-return-message is not obsoleted by anything at all.
-
-2006-02-02 Luc Teirlinck <teirllm@auburn.edu>
-
- * emulation/cua-base.el (cua-mode): Doc fix.
-
-2006-02-02 Juanma Barranquero <lekktu@gmail.com>
-
- * dframe.el (dframe-handle-make-frame-visible)
- (dframe-handle-iconify-frame, dframe-get-focus)
- (dframe-select-attached-frame, dframe-power-click)
- (dframe-frame-mode): Fix typos in docstrings.
-
- * ezimage.el (ezimage-mail, ezimage-object-out-of-date)
- (ezimage-insert-image-button-maybe, ezimage-insert-over-text):
- Fix typos in docstrings.
-
- * hi-lock.el (hi-lock-mode, hi-lock-line-face-buffer)
- (hi-lock-face-buffer, hi-lock-font-lock-hook)
- (hi-lock-archaic-interface-message-used)
- (hi-lock-file-patterns-range): Fix typos in docstrings.
-
- * savehist.el (savehist-loaded, savehist-load, savehist-install)
- (savehist-autosave, savehist-trim-history): Fix typos in docstrings.
-
- * mail/mailclient.el (mailclient-place-body-on-clipboard-flag):
- Fix typo in docstring.
-
- * net/newsticker.el (newsticker--decode-iso8601-date)
- (newsticker--set-customvar, newsticker--buffer-insert-item)
- (newsticker--do-run-auto-mark-filter)
- (newsticker--parse-generic-feed): Doc fixes.
- (newsticker--retrieval-timer-list, newsticker-url-list)
- (newsticker-hide-immortal-items-in-echo-area)
- (newsticker-hide-obsolete-items-in-echo-area)
- (newsticker-new-item-face, newsticker--enclosure)
- (newsticker-buffer-update, newsticker-w3m-show-inline-images)
- (newsticker--parse-atom-0.3, newsticker--parse-rss-1.0)
- (newsticker--parse-generic-feed, newsticker--cache-contains)
- (newsticker--stat-num-items, newsticker-download-enclosures):
- Fix typos in docstrings.
-
- * net/rcirc.el (rcirc-debug): Doc fix.
- (rcirc-fill-column, rcirc-receive-message-hooks)
- (rcirc-browse-url-map, rcirc-read-only-flag, rcirc-prompt)
- (rcirc-mode, rcirc-generate-new-buffer-name)
- (rcirc-startup-channels, rcirc-ignore-update-automatic)
- (rcirc-cmd-ignore, rcirc-browse-url, rcirc-url-regexp):
- Fix typos in docstrings.
- (rcirc-print): "?\ " -> "?\s".
- (rcirc-cmd-join): Improve argument/docstring consistency.
-
-2006-02-01 Mark A. Hershberger <mah@everybody.org>
-
- * xml.el (xml-parse-region): Move save-excursion and set-buffer up
- before narrow-to-region.
-
-2006-02-01 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (move-beginning-of-line): Scan properly for invis change.
-
- * replace.el (multi-occur-in-matching-buffers): Fix prev change.
-
-2006-02-01 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-convert-file-attributes): Set file's gid
- change bit only when id-format is 'integer. Reported by Matt
- Hodges <M.P.Hodges@rl.ac.uk>.
-
-2006-02-01 Juanma Barranquero <lekktu@gmail.com>
-
- * hilit-chg.el (highlight-changes-initial-state)
- (highlight-changes-global-initial-state): Doc fixes.
- (highlight-changes-global-modes, global-highlight-changes):
- Fix typos in docstrings.
-
-2006-02-01 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-mode): Mention that CUA enables
- transient-mark-mode in doc string.
-
-2006-01-31 Richard M. Stallman <rms@gnu.org>
-
- * replace.el (multi-occur): Doc fix.
- (multi-occur-in-matching-buffers): Rename from
- multi-occur-by-filename-regexp. Prefix arg says match
- buffer names instead of file names.
-
-2006-01-31 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el: Allow non-default values of `bs-header-lines-length'.
- (bs--running-in-xemacs): Remove (not needed anymore).
- (bs--set-window-height): Simplify by using `fit-window-to-buffer'
- instead of `shrink-window', thus avoiding having to compute the
- height of the window.
- (bs--up): Wrap around even when there's no header.
- (bs--down): Use `forward-line' instead of `next-line'.
-
-2006-01-30 Chong Yidong <cyd@stupidchicken.com>
-
- * image-mode.el (image-toggle-display): Use file name if possible,
- instead of unnecessarily allocating a (possibly huge) lisp string.
-
-2006-01-30 John Paul Wallington <jpw@pobox.com>
-
- * subr.el (toplevel): Define `cl-assertion-failed' condition here
- because the `assert' macro signals it at runtime.
-
- * emacs-lisp/cl.el (toplevel): Remove definition of
- `cl-assertion-failed' condition.
-
-2006-01-30 Nick Roberts <nickrob@snap.net.nz>
-
- * thumbs.el (thumbs-marked-list): Make buffer-local and
- permanent-local.
- (thumbs-insert-thumb): Make help-echo non-sticky.
- (thumbs-file-alist): Use eolp as check for (non)-image.
-
-2006-01-30 Juanma Barranquero <lekktu@gmail.com>
-
- * ediff-mult.el (ediff-meta-buffer-keymap-setup-hook)
- (ediff-before-session-group-setup-hooks)
- (ediff-default-filtering-regexp, ediff-meta-mark-equal-files):
- Fix typos in docstrings.
-
- * window.el (bw-dir, bw-eqdir, balance-windows)
- (split-window-keep-point): Fix typos in docstrings.
-
- * textmodes/org.el (org-allow-space-in-links, org-closed-string)
- (org-quote-string, org-calendar-to-agenda-key)
- (org-agenda-sorting-strategy, org-agenda-use-time-grid)
- (org-show-following-heading, org-tags-column)
- (org-use-tag-inheritance, org, org-allow-space-in-links)
- (org-usenet-links-prefer-google, org-file-apps-defaults-gnu)
- (org-enable-table-editor, org-calc-default-modes)
- (org-table-allow-automatic-line-recalculation)
- (org-export-html-style, org-export-with-fixed-width)
- (org-export-with-sub-superscripts, org-special-keyword)
- (org-formula, org-time-grid, org-table-may-need-update)
- (org-mode, org-goto-ret, org-goto-left, org-goto-right)
- (org-goto-quit, org-get-indentation, org-end-of-item)
- (org-move-item-down, org-move-item-up)
- (org-renumber-ordered-list, org-todo, org-log-done, org-occur)
- (org-remove-occur-highlights, org-read-date, org-goto-calendar)
- (org-agenda, org-agenda-day-view, org-agenda-previous-date-line)
- (org-agenda-log-mode, org-agenda-toggle-diary)
- (org-agenda-toggle-time-grid, org-agenda-cleanup-fancy-diary)
- (org-agenda-file-to-end, org-agenda-no-heading-message)
- (org-agenda-get-closed, org-format-agenda-item)
- (org-cmp-priority, org-cmp-category, org-cmp-time)
- (org-agenda-change-all-lines, org-agenda-diary-entry)
- (org-scan-tags, org-after-todo-state-change-hook, org-tags-view)
- (org-link-search, org-camel-to-words, org-open-file)
- (org-remember-handler, org-table-convert-region)
- (org-table-move-row-down, org-table-move-row-up)
- (org-table-copy-region, org-table-wrap-region)
- (org-table-toggle-vline-visibility)
- (org-table-get-vertical-vector, org-table-modify-formulas)
- (org-table-get-specials, org-recalc-commands)
- (org-table-rotate-recalc-marks, org-table-eval-formula)
- (orgtbl-make-binding, org-in-invisibility-spec-p, org-cycle)
- (org-level-color-stars-only, org-insert-heading):
- Fix typos in docstrings.
- (last-arg): Add defvar.
-
- * makefile.w32-in (WINS): Add erc.
- (MH_E_SRC): Update (copied from lisp/Makefile.in).
-
-2006-01-29 Bill Wohler <wohler@newt.com>
-
- * Makefile.in (MH_E_SRC): Add mh-compat.el, mh-folder.el,
- mh-letter.el, mh-limit.el, mh-scan.el, mh-show.el, mh-thread.el,
- mh-tool-bar.el, mh-xface.el. Remove mh-customize.el, mh-init.el.
- (mh-autoloads): Don't use comments on otherwise empty lines.
-
-2006-01-29 Edward O'Connor <ted@oconnor.cx>
-
- * emulation/viper.el (viper-major-mode-modifier-list):
- Add insert-state and vi-state entries for erc-mode.
- (viper-go-away, viper-set-hooks): Add and remove
- viper-comint-mode-hook from erc-mode-hook as appropriate.
-
- * emulation/viper.el (viper-insert-state-mode-list): Add erc-mode.
-
-2006-01-29 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs--format-aux): Implement `middle' alignment as
- described in the docstring for `bs-attributes-list'.
- (bs--get-name): Simplify. Don't pad the buffer name.
-
-2006-01-27 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/ispell.el (ispell-find-aspell-dictionaries): If no
- English aspell dictionary is installed, use the first entry of
- ispell-dictionary-alist-1.
-
-2006-01-27 Kevin Rodgers <ihs_4664@yahoo.com> (tiny change)
-
- * textmodes/flyspell.el (flyspell-incorrect, flyspell-duplicate):
- Doc fix.
-
-2006-01-27 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp-vc.el (vc-user-login-name): Wrap defadvice with a test
- for `process-file', in order to let it work for older Emacsen too.
-
-2006-01-27 Eli Zaretskii <eliz@gnu.org>
-
- * international/latexenc.el: Add a suitable `coding:' tag.
- (latexenc-find-file-coding-system): Undo last change.
-
-2006-01-27 Arne J,Ax(Brgensen <arne@arnested.dk>
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Make sure latexenc-main-file is a regular file and is readable.
-
-2006-01-27 Andre Spiegel <spiegel@gnu.org>
-
- * vc-rcs.el (vc-rcs-fetch-master-state, vc-rcs-consult-headers):
- Pass FILE to vc-user-login-name.
-
- * vc-sccs.el (vc-sccs-state): Pass FILE to vc-user-login-name.
-
-2006-01-27 Nick Roberts <nickrob@snap.net.nz>
-
- * thumbs.el (thumbs-do-thumbs-insertion): Suppress message when
- there are no more images to display.
- (thumbs-mark, thumbs-unmark): Revert change so that they move to
- the next image.
-
-2006-01-26 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (custom-mode): Doc: Use advertised-widget-backward.
-
- * wid-edit.el (advertised-widget-backward): New alias.
- (widget-keymap): Use advertised-widget-backward for S-TAB.
-
- * tumme.el: Correct the keywords.
- (tumme-dir-max-size): Use defvar.
- (tumme-setup-dired-keybindings, tumme-dired): Add autoload cookie.
-
- * simple.el (move-beginning-of-line): Take account of fields.
- (clone-indirect-buffer-other-window): Take args like
- clone-indirect-buffer, and work like it.
-
- * help-fns.el (describe-function): Don't pass `nil' as default.
-
- * files.el (risky-local-variable-p): Follow var aliases.
-
- * subr.el (lazy-completion-table): Doc fix.
-
- * mail/rmailsum.el (rmail-make-summary-line-1): Don't set
- global binding of `line'.
-
-2006-01-25 Andre Spiegel <spiegel@gnu.org>
-
- * vc-hooks.el (vc-user-login-name): Rewritten to handle access via
- Tramp.
-
- * vc.el (vc-default-dired-state-info): Pass FILE to
- vc-user-login-name.
- (vc-default-update-changelog): Don't use vc-user-login-name, we
- don't need it here.
-
- * net/tramp-vc.el (vc-user-login-name): Comment out defadvice, it is
- no longer necessary.
-
-2006-01-25 Kenichi Handa <handa@m17n.org>
-
- * international/mule.el (decode-char): Avoid the overhead of
- calling utf-lookup-subst-table-for-decode if
- utf-translate-cjk-mode is nil.
- (encode-char): Avoid the overhead of calling
- utf-lookup-subst-table-for-encode if utf-translate-cjk-mode is
- nil.
-
-2006-01-22 Kenichi Handa <handa@m17n.org>
-
- * international/mule.el (make-subsidiary-coding-system): Reset
- `coding-system-define-form' property of subsidiaries to nil.
- Avoid duplicated entry in coding-system-alist.
- (make-coding-system): Avoid duplicated entry in
- coding-system-alist.
- (define-coding-system-alias): Likewise.
-
-2006-01-24 Luc Teirlinck <teirllm@auburn.edu>
-
- * completion.el: Minor fixes in introductory comment.
- (completion-def-wrapper): Fix alist.
-
-2006-01-25 Nick Roberts <nickrob@snap.net.nz>
-
- * thumbs.el (thumbs-new-image-size): New function.
- (thumbs-increment-image-size-element)
- (thumbs-decrement-image-size-element, thumbs-increment-image-size)
- (thumbs-decrement-image-size): Delete.
- (thumbs-resize-image-1): Rename from thumbs-resize-image. Keep old
- temp files and use to resize.
- (thumbs-resize-image): Rename from thumbs-resize-image-interactive.
- Use increment argument to enlarge/shrink. Preserve point.
- (thumbs-shrink-image): Rename from thumbs-resize-image-size-down.
- (thumbs-enlarge-image): Rename from thumbs-resize-image-size-up
- (thumbs-show-thumbs-list): Set thumbs-buffer to current-buffer.
- (thumbs-mark, thumbs-unmark): Preserve point.
- (thumbs-modify-image): Keep old temp files and use to modify.
- Cleanup old temp files at load time. Preserve point.
- (thumbs-view-image-mode-map): Use new command names.
-
-2006-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * log-view.el (log-view-minor-wrap): First rev is the one at point.
-
- * calendar/cal-menu.el: Avoid macros from calendar.el so as to break
- the nastiest part of the cyclic dependency.
- (cal-menu-update): Use dotimes and calendar-increment-month.
-
- * calendar/calendar.el: Remove unnecessary leading stars in docstrings.
- (calendar-week-start-day): Add an :initializer.
- (calendar-mode-map): Use suppress-keymap, and command remapping.
- (describe-calendar-mode): Setup xref-stack info for the back button.
- (calendar-star-date): Insert before delete.
- (calendar-set-mode-line): Add file-modified info if applicable.
- (calendar-increment-month): New function.
-
-2006-01-24 Tobias C. Rittweiler <tcr@freebits.de> (tiny change)
-
- * font-lock.el (lisp-font-lock-keywords-2):
- Recognize "& keywords" only at word boundaries.
-
-2006-01-24 Nick Roberts <nickrob@snap.net.nz>
-
- * thumbs.el (thumbs-extra-images): New variable. Make it buffer-local
- and permanent-local.
- (thumbs-max-image-number): New variable.
- (thumbs-do-thumbs-insertion): Use them.
- (thumbs-per-line): Change default to 4.
- (thumbs-marked-list): Rename from thumbs-markedL.
- (thumbs-cleanup-thumbsdir, thumbs-delete-images)
- (thumbs-rename-images): Use -list instead of L for internal variables.
- (thumbs-call-convert): Use call-process instead of shell-command.
- (thumbs-insert-thumb): Add filename as help-echo to each image.
- (thumbs-show-from-dir): Rename from thumbs-show-all-from-dir.
- Give dir to thumbs-show-thumbs-list.
- (thumbs-show-thumbs-list): Set default-directory to that of images.
- (thumbs-dired-show): Rename from thumbs-dired-show-all.
- (thumbs-display-thumbs-buffer, thumbs-show-more-images): New functions.
- (thumbs-mode-map): Bind "+" to thumbs-show-more-images.
- (thumbs-view-image-mode-map): Bind "^" to thumbs-display-thumbs-buffer.
-
-2006-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * ses.el (ses-read-cell): Provide a default value.
-
-2006-01-23 Juanma Barranquero <lekktu@gmail.com>
-
- * term/w32-win.el (image-library-alist): Add additional names for
- GIF library.
-
-2006-01-23 Arne J,Ax(Brgensen <arne@arnested.dk>
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Add file-regular-p check.
-
-2006-01-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * simple.el (clone-buffer): Don't show the new buffer in the same
- window.
-
-2006-01-23 Juri Linkov <juri@jurta.org>
-
- * faces.el (link, link-visited): New faces based on default values
- of `info-xref' and `info-xref-visited'.
-
- * info.el (info-xref): Inherit from `link'.
- (info-xref-visited): Inherit from `link-visited'.
-
- * cus-edit.el (custom-buffer-create-internal): Use widget type
- `custom-manual' instead of `info-link' and don't set properties
- `button-face' and `mouse-face' explicitly.
- (custom-browse-group-tag, custom-browse-variable-tag)
- (custom-browse-face-tag): Inherit from widget class
- `custom-group-link' instead of `push-button'.
- (custom-button-unraised): Inherit from `underline' face.
- (custom-link): Inherit from `link' face. Fix doc and group.
- (custom-add-parent-links, custom-group-value-create): Don't set
- properties `button-face' and `mouse-face' explicitly for
- `custom-group-link' widget.
- (custom-group-link): Add properties `button-face' and `mouse-face'
- to widget definition.
- (custom-field-keymap): New variable. Put `custom-field-keymap' to
- editable-field's :keymap property.
- (custom-mode): Fix docstring: substitute keybindings for
- `widget-forward' and `widget-backward' from `widget-keymap',
- `widget-complete' from `custom-field-keymap', replace old
- `Custom-move-and-invoke' with `widget-move-and-invoke'. Untabify.
-
- * desktop.el (desktop-load-file): Check for `fboundp' before
- calling `symbol-function'.
-
- * simple.el (clone-buffer, clone-indirect-buffer)
- (clone-indirect-buffer-other-window): Use `read-buffer' instead of
- `read-string'. Fix prompts.
-
- * play/doctor.el (doctor-mode-map): Rename from `doc-mode-map'.
-
-2006-01-23 Nick Roberts <nickrob@snap.net.nz>
-
- * thumbs.el (thumbs-file-alist): Avoid creating duplicate entries.
-
-2006-01-22 Luc Teirlinck <teirllm@auburn.edu>
-
- * startup.el (inhibit-splash-screen, initial-scratch-message):
- Doc fixes.
-
-2006-01-22 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.52.
-
- * net/tramp.el, net/tramp-ftp.el, net/tramp-util.el,
- * net/tramp-vc.el: Add code for unloading Tramp. See comment before
- `tramp-unload-tramp' for checklist.
-
- * net/tramp.el: Require `timer-funcs' instead of `timer' if in
- XEmacs. Contributed by Steve Youngs <steve@sxemacs.org>.
- (tramp-unload-file-name-handler-alist)
- (tramp-unload-tramp): New defuns.
- (tramp-advice-PC-expand-many-files): New defadvice.
- (tramp-save-PC-expand-many-files, tramp-setup-complete): Defuns
- removed.
- (tramp-handle-expand-file-name): Remove double slash.
- (tramp-handle-file-attributes-with-ls): Return t as 9th attribute.
- It doesn't matter, because it will be converted later on.
- (tramp-handle-file-ownership-preserved-p): Rewritten. The old
- implementation was just heuristic.
- (tramp-post-connection): Set uid and gid properties.
- (tramp-convert-file-attributes): Set file's gid change bit.
- (tramp-get-remote-uid, tramp-get-remote-gid): New defuns.
- (tramp-handle-expand-file-name): Use "~root" for tilde expansion
- in case of su(do)? methods. The home directory of the local user
- will be taken else.
- (tramp-open-connection-telnet)
- (tramp-open-connection-rsh, tramp-open-connection-su)
- (tramp-open-connection-multi): Set PS1 to "$ ". Otherwise, a
- local shell prompt could hurt. Reported by Romain Francoise
- <romain@orebokech.com>.
- (tramp-let-maybe): Add `edebug-form-spec' property.
- (tramp-handle-expand-file-name): Bind `default-directory' locally
- to "/" in order to avoid problems with UNC shares or Cygwin
- mounts.
- (tramp-md5-function): Fix typo in error message.
-
- * net/tramp-ftp.el (tramp-ftp-enable-ange-ftp): New defun.
-
- * net/tramp-util.el (top): Apply `ignore' instead of `identity'
- for byte-compiler pacification.
-
-2006-01-22 Andre Spiegel <spiegel@gnu.org>
-
- * vc-rcs.el (vc-rcs-state-heuristic): Use file-attributes with
- ID-FORMAT `string'. This allows us to get rid of
- `vc-user-login-name UID'.
-
- * vc-sccs.el (vc-sccs-state-heuristic): Likewise.
-
-2006-01-22 John Paul Wallington <jpw@pobox.com>
-
- * hl-line.el (hl-line-highlight, hl-line-move): Doc fixes.
-
-2006-01-21 Martin Rudalics <rudalics@gmx.at>
-
- * emacs-lisp/find-func.el (find-definition-noselect)
- (find-variable-noselect): Search variables in C source code too.
- (find-function-C-source, find-function-noselect, find-function)
- (find-function-other-frame, find-variable-noselect, find-variable)
- (find-variable-other-frame, find-variable-at-point):
- Fix docstrings.
-
-2006-01-21 Francesco Potort,Al(B <pot@gnu.org>
-
- * mail/rmailout.el (rmail-output): Don't use content-type if it is nil.
-
-2006-01-21 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/flyspell.el (flyspell-emacs-popup, flypell-xemacs-popup):
- Default to disabling the "Save affix" question.
-
-2006-01-21 Marien Zwart <marienz@gentoo.org> (tiny change)
-
- * progmodes/python.el (python-mode) <eldoc-mode-hook>: Pass nil as
- the first arg to run-python.
-
-2006-01-21 Eli Zaretskii <eliz@gnu.org>
-
- * startup.el (command-line-1): Handle --no-desktop if desktop.el
- is not loaded.
-
-2006-01-20 Jay Belanger <belanger@truman.edu>
-
- * calc/calcalg2.el (calc-sum-rec): Fix the sum when the lower
- limit is 0.
-
- * calc/calc-arith.el (math-add-symb-fancy): Check the length of
- the correct variable.
-
-2006-01-20 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-open-at-point): Fixed bug with matching a
- link. Fixed buggy argument sequence in call to `org-view-tags'.
- (org-compile-prefix-format): Set `org-prefix-has-tag'.
- (org-prefix-has-tag): New variable.
- (org-format-agenda-item): Remove tags from headline if
- appropriate.
- (org-agenda-remove-tags-when-in-prefix): New option.
- (org-get-tags-at): New function.
-
-2006-01-20 Nick Roberts <nickrob@snap.net.nz>
-
- * thumbs.el (thumbs-buffer): New variable. Make it buffer local.
- (thumbs-find-image): Move image name and number from buffer name
- to mode name. Set thumbs-buffer. Preserve point so that large
- images remain visible.
- (thumbs-file-alist): Construct list in thumbs-buffer and reverse
- order.
- (thumbs-show-image-num): Get image from thumbs-file-alist. Set
- mode name.
- (thumbs-next-image, thumbs-previous-image): Make them work.
-
-2006-01-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (custom-buffer-create-internal): State in the text above
- the whole buffer buttons that they do not operate on hidden items.
- (custom-face-menu): Use `custom-face-save' instead of
- `custom-face-save-command'.
- (custom-face-save-command): Make it an alias for `custom-face-save'
- and declare it obsolete.
- (custom-face-save): Doc fix.
-
- * dired.el (dired-no-confirm): Add quote.
- (dired-subdir-alist-pre-R): Add quote in
- `make-variable-buffer-local' form and remove unbalanced parenthesis.
-
-2006-01-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/table.el (table-mode-indicator): Typo in last change.
-
-2006-01-19 Richard M. Stallman <rms@gnu.org>
-
- * outline.el (hide-leaves): Don't call outline-end-of-heading.
- Fixes bug reported in Nov 2005.
-
- * isearch.el (isearch-forward): Doc fix.
-
- * dired.el (dired-move-to-filename-regexp): Define as alias.
- (dired-no-confirm): Use defcustom.
- (dired-subdir-alist-pre-R): Put defvar at top level.
-
- * battery.el (battery-linux-proc-acpi): Handle "last full capacity".
-
- * textmodes/bibtex.el (bibtex-strings, bibtex-reference-keys):
- Mark as risky.
-
- * simple.el (set-mark-command): Doc fix.
- (clone-indirect-buffer-other-window):
- Read arg like clone-indirect-buffer.
- (move-beginning-of-line): Skip invisible newlines.
-
-2006-01-19 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/cpp.el (cpp-edit-load): Make the order of
- listed conditions in a base C code buffer and its associate
- CPP Edit buffer the same.
-
-2006-01-19 Kenichi Handa <handa@m17n.org>
-
- * mail/rmail.el (rmail-enable-mime): Docstring fixed.
- (rmail-mime-feature): Likewise.
- (rmail-require-mime-maybe): Use display-warning to show a warning
- message.
-
- * international/mule.el (auto-coding-regexp-alist-lookup): New fun.
- (find-auto-coding): Use auto-coding-regexp-alist-lookup.
-
-2006-01-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * array.el: Move defvars out of eval-when-compile.
- (array-make-template): Replace undeclared global var with a local one.
- (array-mode): Inline initialization functions.
- (array-init-local-variables, array-init-max-row)
- (array-init-max-column, array-init-columns-per-line)
- (array-init-field-width, array-init-rows-numbered)
- (array-init-line-length, array-init-lines-per-row): Remove.
-
- * play/doctor.el: Move defvars out of eval-when-compile. Use dolist.
- (doc-mode-map): Define explicitly.
- (doctor-txtype): Use mapc.
-
- * textmodes/table.el: Move defvars out of eval-when-compile.
- Remove harmful code meant to avoid byte-compiler warnings.
- (table-fixed-mode-indicator): Remove. Use a more complex mode-line
- specification that checks table-fixed-width-mode directly.
- (table-recognize-region, table-recognize-cell):
- Use restore-buffer-modified-p.
- (table-fixed-width-mode): Remove code that refreshes
- table-fixed-mode-indicator.
- (*table--cell-describe-bindings, *table--cell-describe-mode):
- Avoid obsolete name print-help-return-message.
- (table--test-cell-list): Don't use replace-regexp from elisp.
- (table--point-entered-cell-function, table--point-left-cell-function):
- Don't set table-fixed-mode-indicator, use force-mode-line-update.
-
- * textmodes/org.el: Move defvars out of eval-when-compile. Move code
- that was after the end of file. Use buffer-file-name variable.
- (org-timestamp-change): Use with-current-buffer.
- (org-todo-list): Don't unnecessarily define a new buffer-local var.
- (org-agenda-file-to-end, org-agenda-file-to-front): Remove unused arg
- `file'.
-
- * progmodes/fortran.el: Move defvars out of eval-when-compile.
- (fortran-break-line): Remove unused var `opoint'.
- (fortran-abbrev-start): Obey help-event-list.
-
-2006-01-18 Jesper Harder <harder@phys.au.dk>
-
- * mail/smtpmail.el (smtpmail-send-it): Use insert-buffer-substring.
-
-2006-01-18 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/make-mode.el (makefile-imake-mode): New mode
- derived from makefile-mode.
- (makefile-imake-mode-syntax-table): New syntax table
- derived from makefile-mode-syntax-table.
- (makefile-mode): Write about makefile-imake-mode in doc string.
- (makefile-mode-map): Bind "\C-c\C-m\C-i" to makefile-imake-mode.
- (makefile-imake-font-lock-keywords): New font lock keywords.
-
- * files.el (auto-mode-alist): Add Imakefile.
-
-2006-01-17 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/flyspell.el (ispell-kill-ispell-hook): Add to the hook when
- loading the file rather than when turning on flyspell-mode.
-
-2006-01-16 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (customize-rogue): Minor doc fix.
-
-2006-01-17 Juri Linkov <juri@jurta.org>
-
- * dired-aux.el (dired-diff): Use dired-dwim-target-directory
- instead of the file at the mark as default if the file at the mark
- is the same as the file at point or if dired-dwim-target-directory
- is not the same as the current directory and the mark is not active.
-
- * log-view.el (log-view-minor-wrap): Use the same logic to get
- revisions as `log-view-diff'.
-
- * info.el (Info-revert-find-node): Check for Info-current-file
- before preserving new-history.
-
- * man.el (Man-heading-regexp): Add `/'.
-
- * textmodes/sgml-mode.el: Add `coding: iso-2022-7bit' cookie.
- (html-mode): Set `sentence-end-base' instead of `sentence-end'.
-
-2006-01-16 Juri Linkov <juri@jurta.org>
-
- * faces.el (mode-line-faces): New defgroup.
- (mode-line-highlight): Move definition after new defgroup.
- (mode-line, mode-line-inactive, mode-line-highlight):
- Replace :group `modeline' with `mode-line-faces'.
- (mode-line-buffer-id): New face.
- (modeline-buffer-id): New face alias.
- (vertical-border): Remove :group `modeline'.
-
- * bindings.el (propertized-buffer-identification): Use face
- `mode-line-buffer-id' instead of `Buffer-menu-buffer'.
- (mode-line-next-buffer, mode-line-previous-buffer): New functions.
- (mode-line-buffer-identification-keymap): For mouse-1 replace
- `mode-line-unbury-buffer' with `mode-line-previous-buffer'.
- Replace `mode-line-bury-buffer' with `mode-line-next-buffer' for
- mouse-3.
-
- * buff-menu.el (buffer-menu-buffer) <defface>: Renamed from
- Buffer-menu-buffer. Doc fix.
- (Buffer-menu-buffer): Face alias to buffer-menu-buffer.
- (list-buffers-noselect): Use `buffer-menu-buffer' face instead of
- `Buffer-menu-buffer'.
-
- * info.el (Info-mode-line-node-keymap): New defvar.
- (Info-set-mode-line): Use `stringp' to check Info-current-file.
- Propertize Info-current-node with `mode-line-buffer-id' and
- `mode-line-highlight' faces and `Info-mode-line-node-keymap'.
-
- * time.el (display-time-mail-face): Replace :group `faces' with
- `mode-line-faces'.
-
-2006-01-16 Kenichi Handa <handa@m17n.org>
-
- * international/code-pages.el: Add autoload cookies for cp125[0345678].
-
- * language/european.el (cp1252): New alias for windows-1252.
-
- * international/mule.el (autoload-coding-system): Prepare for EOL
- variants.
-
-2006-01-15 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (term-raw-map): Add mapping for insert.
- (term-send-insert): New.
- (term-mode): Make variables local here instead of doing it in
- `term-emulate-terminal'.
- (term-emulate-terminal): Delete incorrect optimization for cr+lf.
- Scroll reverse needs to take into account the scroll region.
- Saving and restoring the cursor should save the color attributes too.
- (term-reset-terminal): Reset the scroll region.
- (term-handle-ansi-escape): Cursor up and down should take into
- account the scroll region.
- (term-set-scroll-region): Rename from `term-scroll-region'.
- Move to 0,0 after setting the region.
- (term-handle-scroll): Handle scroll up.
- (term-down): Fix off by one error.
- (term-delete-lines): Do not delete outside the scroll region.
- (term-insert-lines): Take into account the scroll region.
-
-2006-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/ispell.el (ispell-internal-change-dictionary)
- (ispell-change-dictionary): Undo most of last change of 2006-01-13.
- (start, end): Move declaration outside of eval-when-compile.
-
- * textmodes/flyspell.el (flyspell-kill-ispell-hook): New fun.
- (flyspell-mode-on): Use it.
-
- * textmodes/ispell.el (ispell-kill-ispell): Run new hook
- ispell-kill-ispell-hook.
-
-2006-01-14 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (Custom-set, Custom-save, Custom-reset-current)
- (Custom-reset-saved): Do not ask for confirmation in single option
- buffers.
-
-2006-01-13 Richard M. Stallman <rms@gnu.org>
-
- * font-lock.el (lisp-font-lock-keywords-1): Minor rearrangement.
-
-2006-01-13 Romain Francoise <romain@orebokech.com>
-
- * add-log.el (add-change-log-entry, change-log-merge):
- Conditionally use `hard-newline'.
-
-2006-01-13 Martin Rudalics <rudalics@gmx.at>
-
- * wid-edit.el (widget-field-end): If the overlay is no longer
- associated with a buffer, behave as if the overlay didn't exist.
-
- * cus-edit.el (custom-add-see-also, custom-add-parent-links):
- Make sure the links use the `custom-link' face.
-
-2006-01-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/ld-script.el (auto-mode-alist): Use \' rather than $.
- (ld-script-mode): Don't set indent-line-function since we don't
- have one.
-
-2006-01-13 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-open-file): Use mailcap for selecting an
- application.
- (org-file-apps-defaults-gnu): Use mailcap as the default for
- selecting an application on a UNIX system.
- (org-agenda-show-tags): New command.
- (org-table-insert-hline): Keep cursor in current table line.
- (org-table-convert): Offset effect of modifying
- `org-table-insert-hline'.
- (org-format-agenda-item): New optional argument TAG.
- (org-compile-prefix-format): Handle %T format for the tag.
- (org-expand-wide-chars): New function.
- (org-table-insert-row, org-table-insert-hline):
- Use `org-expand-wide-chars'.
- (org-open-file): Fix bug in program launch.
- (org-get-time-of-day): Fix bug with times before 1am.
- (org-agenda-menu): Add tags commands.
-
-2006-01-13 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/ispell.el (ispell-init-process): Include the used
- dictionary in ispell process start message.
- (ispell-internal-change-dictionary): When flyspell-mode is active
- and dictionary is changed, make sure ispell process is restarted
- and flyspell word cache cleared out for the current buffer.
- (ispell-change-dictionary): Make sure flyspell word cache is
- cleared out in all buffers with active flyspell mode when
- dictionary is globally changed.
- Call ispell-internal-change-dictionary after dictionary change.
-
-2006-01-13 Eli Zaretskii <eliz@gnu.org>
-
- * emacs-lisp/bytecomp.el (batch-byte-recompile-directory): Doc fix.
-
- * makefile.w32-in (MH_E_SRC): Synchronize with Makefile.in.
- (pre-mh-loaddefs.el-SH, pre-mh-loaddefs.el-CMD): Update Copyright
- years. Fix small differences wrt Makefile.in.
- (recompile): Use --eval '(batch-byte-recompile-directory 0)', like
- Makefile.in does.
-
-2006-01-12 Bill Wohler <wohler@newt.com>
-
- * Makefile.in (MH_E_SRC): Replace mh-index.el and mh-pick.el with
- mh-search.el.
-
-2006-01-12 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/ld-script.el: Update copyright year.
-
-2006-01-12 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-theme.el (custom-theme-add-variable, custom-theme-add-face):
- Don't add widget if setting undefined.
-
-2006-01-12 John Paul Wallington <jpw@pobox.com>
-
- * help-fns.el (describe-variable): Remove newlines from void
- variable output.
-
-2006-01-13 Nick Roberts <nickrob@snap.net.nz>
-
- * wdired.el (wdired-mode-map): Add help echo for
- wdired-abort-changes.
-
- * man.el (Man-file-name-regexp): Adjust for a list of files.
-
-2006-01-12 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/ld-script.el (auto-mode-alist): Support
- suffix conventions used in netbsd and eCos.
-
-2006-01-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (custom-reset-menu, custom-buffer-create-internal)
- (custom-variable-menu, custom-face-menu, custom-group-menu)
- (Custom-mode-menu): Change names of menu items. (As discussed on
- emacs-devel.)
- (custom-face-menu): Add "Undo Edits" item.
-
- * startup.el (init-file-user): defcustom -> defvar.
-
- * tooltip.el (tooltip-mode): Doc fix.
-
-2006-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * reveal.el (reveal-post-command): window-buffer signals an error on
- dead windows rather than returning nil.
- (reveal-open-new-overlays): An overlay might die while we open others.
-
-2006-01-11 Bill Wohler <wohler@newt.com>
-
- * cus-dep.el (generated-custom-dependencies-file): Fix typo and
- phrasing in docstring.
-
- * Makefile.in (MH_E_SRC): Rename from MH-E-SRC since the dashes
- can give some systems gas. Add new file mh-buffers.el.
-
-2006-01-06 Masatake YAMATO <jet@gyve.org>
-
- * font-lock.el (cpp-font-lock-keywords): Font lock keywords for
- C preprocessor forward ported from GNU Emacs 21.2.
-
- * progmodes/asm-mode.el (asm-font-lock-keywords):
- Use `cpp-font-lock-keywords'.
-
- * progmodes/ld-script.el (ld-script-font-lock-keywords): Ditto.
-
- * progmodes/ld-script.el (auto-mode-alist): Use \\> instead
- of $ for "\\.ld[s]?".
-
-2006-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/tcl.el (tcl-indent-command): Use indent-for-tab-command.
- (tcl-indent-line): Return `noindent' if inside a string.
-
- * progmodes/flymake.el (flymake-split-string): Remove more than one
- empty string at beg/end of the result.
- (flymake-find-buildfile, flymake-find-possible-master-files):
- Use expand-file-name.
- (flymake-fix-file-name): Don't replace \ with / and don't remove ./
- since expand-file-name does it for us. Use directory-file-name.
- (flymake-ler-get-full-file, flymake-ler-get-file, flymake-ler-get-line)
- (flymake-ler-get-type, flymake-ler-get-text)
- (flymake-ler-make-ler): Remove. Replace by defstruct. Update callers.
- (flymake-current-line-no): Remove spurious interactive spec.
- (flymake-delete-temp-directory): Remove unused var `slash-pos'.
- (flymake-check-include): Remove arg inc-path merged into inc-name.
- (flymake-check-patch-master-file-buffer): Fit in 80 columns.
- Arg regexp-list replaced by a simple regexp.
- (flymake-master-make-header-init, flymake-master-tex-init):
- Correspondingly replace regexp-list with a regexp. Fix regexp.
-
-2006-01-10 Simon Josefsson <jas@extundo.com>
-
- * mail/smtpmail.el (smtpmail-try-auth-methods): Add comment
- describing AUTH PLAIN fix.
-
-2006-01-10 Thien-Thi Nguyen <ttn@gnu.org>
-
- * mail/emacsbug.el (report-emacs-bug-text-prompt): Delete var.
- (report-emacs-bug): Don't record initial prompt text.
- Instead, add text properties to prompting text.
- (report-emacs-bug-hook): Delete prompting text.
-
-2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/flymake.el (flymake-find-buildfile): Remove invariant arg
- `dirs'. Adjust callers.
-
-2006-01-09 John Paul Wallington <jpw@gnu.org>
-
- * cus-edit.el (custom-comment) <defface>: Add TTY definitions.
-
-2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * reveal.el (reveal-open-new-overlays): New extracted fun.
- (reveal-close-old-overlays): Idem. Check overlays's liveness before
- using them. Simplify the code.
- (reveal-post-command): Use them. Fix up obsolete windows in
- reveal-open-spots.
-
- * progmodes/flymake.el: Use `require' rather than autoload for
- XEmacs's overlays.
- (flymake-get-common-file-prefix, flymake-build-relative-filename):
- Delete. Use file-relative-name instead.
- (flymake-get-syntax-check-program-args, flymake-perl-init):
- Simplify the resulting code.
-
- * log-view.el (log-view-file-re, log-view-message-re): Add support
- for DaRCS output.
-
-2006-01-09 Alex Schroeder <alex@gnu.org>
-
- * mail/rmail.el (rmail-reply-regexp): Also ignore mailing list
- identifiers sometimes added in square brackets at the beginning of
- subject lines.
-
-2006-01-07 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (Custom-set, Custom-save): Doc fix.
- (Custom-reset-current, Custom-reset-saved): Change question text.
- (Custom-reset-standard): Likewise.
- (custom-variable-reset-saved): Doc fix.
-
-2006-01-07 Eli Zaretskii <eliz@gnu.org>
-
- * startup.el (init-file-user): Doc fix.
-
-2006-01-07 Alex Schroeder <alex@gnu.org>
-
- * mail/rmail.el (rmail-current-subject): New function.
- (rmail-current-subject-regexp): New function.
- (rmail-next-same-subject): Use it.
-
- * mail/rmailsum.el (rmail-summary-by-topic):
- Use rmail-current-subject and rmail-current-subject-regexp.
- (rmail-summary-next-same-subject): Ditto.
-
- * net/rcirc.el (rcirc-send-input): No longer check whether the
- process is open, since not all commands need an open process.
- (rcirc-send-string): Check whether the process is open before
- sending anything.
- (rcirc-ignore-list): New option.
- (rcirc-ignore-list-automatic): New variable.
- (rcirc-print): Take rcirc-ignore-list into account.
- (rcirc-cmd-ignore): New command.
- (rcirc-ignore-update-automatic): New function.
- (rcirc-handler-PART, rcirc-handler-QUIT): Use it to maintain the
- list if ignored nicks.
- (rcirc-handler-NICK): Ditto, and also ignore the new nick.
-
-2006-01-06 David Reitter <david.reitter@gmail.com>
-
- * mail/emacsbug.el (report-emacs-bug): Let explanations correctly
- reflect the address to which the report will be sent.
-
-2006-01-06 Eli Zaretskii <eliz@gnu.org>
-
- * progmodes/ld-script.el (auto-mode-alist): Recognize linker
- scripts whose file-name extensions are "\.x[bdsru]?[cn]?$".
-
-2006-01-01 Michael Ernst <mernst@alum.mit.edu> (tiny changes)
-
- * textmodes/tildify.el: Fix typos (misspellings) in the commentary.
-
- * emacs-lisp/find-func.el (find-definition-noselect): Fix typo in
- the doc string: "functoin" => "function".
- * ldefs-boot.el: Likewise.
-
- * textmodes/bibtex.el (bibtex-validate-globally): Fix typo in a
- message text: "Duplicat" => "Duplicate".
-
-2006-01-06 Sven Joachim <svenjoac@gmx.de> (tiny change)
-
- * files.el (basic-save-buffer-2): If backing-up failed, reset
- buffer-backed-up to nil.
-
-2006-01-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb-script-skip-to-head)
- (gdb-script-calculate-indentation): Indent for breakpoint command
- lists also.
-
-2006-01-05 Bill Wohler <wohler@newt.com>
-
- * Makefile.in (compile-always): Add mh-autoloads dependency.
- (bootstrap): Remove mh-autoloads dependency, as compile dependency
- provides it.
- (updates): Remove mh-autoloads dependency, since it probably has
- already run recently (via recompile).
-
-2006-01-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/flyspell.el (flyspell-accept-buffer-local-defs): Add an
- argument `force' to disable the flyspell-last-buffer optimization.
- (flyspell-mode-on): Use it.
-
- * progmodes/flymake.el (flymake-get-cleanup-function): Default to
- flymake-simple-cleanup.
- (flymake-allowed-file-name-masks): Use this new default.
- All the functions are now called in the right buffer rather than
- passing the buffer as argument.
- (flymake-process-sentinel): Switch to buffer before calling cleanup.
- (flymake-parse-err-lines): Remove redundant buffer arg.
- (flymake-get-program-dir): Comment out unused function.
- (flymake-start-syntax-check, flymake-start-syntax-check-process):
- Remove redundant buffer argument.
- (flymake-get-real-file-name, flymake-simple-java-cleanup)
- (flymake-simple-cleanup, flymake-master-cleanup): Remove buffer arg.
-
-2006-01-05 Richard M. Stallman <rms@gnu.org>
-
- * info.el (Info-find-node): Don't record previous node if have none.
- (info): Go to directory only if history is empty.
-
- * simple.el (mark): Doc fix.
-
-2006-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-ae-parameter): Don't coerce data if it is
- already of desired type.
- (mac-ae-list): Coerce parameter to "list" type.
- (mac-dispatch-apple-event): Replace cadr part of event with a
- dummy position so that event-start returns it.
-
-2006-01-05 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-end-of-subtree): New function.
- (org-cycle, org-subtree-end-visible-p, org-scan-tags):
- Use `org-end-of-subtree'.
- (org-agenda, org-agenda-convert-date): Protect calls to
- `fit-window-to-buffer'.
- (org-tags-view): Force matching of sublevels when doing a
- todo-only search. Define the correct redo command, including the
- arguments.
- (org-agenda-redo): Display message.
- (org-check-for-org-mode): New function.
- (org-agenda-type): New variable.
- (org-timeline, org-agenda-list, org-todo-list, org-tags-view):
- Set `org-agenda-type'.
- (org-agenda-check-type): New function.
- (org-agenda-goto-today, org-agenda-later, org-agenda-earlier)
- (org-agenda-week-view, org-agenda-day-view)
- (org-agenda-next-date-line, org-agenda-previous-date-line)
- (org-agenda-log-mode, org-agenda-toggle-diary)
- (org-agenda-toggle-time-grid, org-agenda-date-later)
- (org-agenda-date-prompt, org-agenda-diary-entry)
- (org-agenda-execute-calendar-command, org-agenda-goto-calendar)
- (org-agenda-convert-date, org-agenda-menu):
- Use `org-agenda-check-type'.
- (org-make-overlay, org-delete-overlay)
- (org-detatch-overlay, org-move-overlay, org-overlay-put):
- New compatibility functions.
- (org-calendar-select-mouse): New command.
-
-2006-01-04 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (Custom-reset-current, Custom-reset-saved)
- (Custom-reset-standard): Fix y-or-n-p messages.
- (custom-link): New face for links.
- (custom-buffer-create-internal, custom-manual): Use it.
- (custom-face-save): Push to theme-face before setting face spec.
-
- * wid-edit.el (widget-default-mouse-face-get): New function.
- (widget-specify-button): Handle mouse-face like button-face.
-
- * custom.el (load-theme): Clear old theme settings if reloading.
-
-2006-01-03 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (custom-buffer-create-internal): Move whole buffer
- "Erase Customization" button back to same position it occupies in
- the individual State menus.
-
-2006-01-04 Kim F. Storm <storm@cua.dk>
-
- * wid-edit.el (key-sequence): Rework widget to read key binding
- using `kbd' syntax. Use C-q to insert literal key, event, or code.
- (widget-key-sequence-default-value): Default value for empty sequence.
- (widget-key-sequence-map): New map for reading key binding. Bind C-q.
- (widget-key-sequence-read-event): New command for C-q.
- (widget-key-sequence-validate, widget-key-sequence-value-to-internal)
- (widget-key-sequence-value-to-external): New functions.
-
-2006-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/flymake.el (flymake-create-temp-with-folder-structure):
- Use expand-file-name.
- (flymake-delete-temp-directory): Use expand-file-name,
- file-name-directory, and directory-file-name.
- (flymake-strrchr): Delete.
- (flymake-start-syntax-check): Don't pass the redundant buffer argument
- to the init-f function.
- (flymake-save-buffer-in-file, flymake-init-create-temp-buffer-copy)
- (flymake-init-find-buildfile-dir)
- (flymake-init-create-temp-source-and-master-buffer-copy)
- (flymake-simple-make-init-impl, flymake-simple-make-init)
- (flymake-master-make-init, flymake-master-make-header-init)
- (flymake-simple-make-java-init, flymake-simple-ant-java-init)
- (flymake-perl-init, flymake-simple-tex-init, flymake-master-tex-init)
- (flymake-xml-init): Remove corresponding redundant buffer argument.
- (flymake-allowed-file-name-masks): Remove last elems that are equal to
- the default anyway. Clean up regexps.
-
- * progmodes/flymake.el (flymake-temp-source-file-name)
- (flymake-master-file-name, flymake-temp-master-file-name)
- (flymake-base-dir): New buffer-local vars.
- (flymake-buffer-data, flymake-get-buffer-value)
- (flymake-set-buffer-value): Replace those hash-tables by the new
- buffer-local vars. Update callers.
-
- * progmodes/flymake.el (flymake-check-start-time)
- (flymake-check-was-interrupted, flymake-err-info, flymake-is-running)
- (flymake-last-change-time, flymake-new-err-info, flymake-timer):
- Move definition, so we can remove redundant earlier declaration.
- (flymake-replace-regexp-in-string, flymake-split-string)
- (flymake-get-temp-dir): Use defalias.
- (flymake-popup-menu): Remove `pos' argument. Use posn-at-point.
- (flymake-xemacs-window-edges): Remove unused function.
- (flymake-get-point-pixel-pos): Move.
- (flymake-pid-to-names, flymake-reg-names)
- (flymake-get-source-buffer-name, flymake-unreg-names): Remove.
- Replace by a simple list flymake-processes and by process-buffer.
- Update callers. Other than simplify the code, it uses buffers rather
- than buffer-names so it doesn't get confused by uniquify.
- (flymake-buffer-data): The global value should just be nil.
-
- * emacs-lisp/bytecomp.el (byte-compile-file-form-defalias):
- Optimize the body of a defalias like any other code.
-
- * font-lock.el (font-lock-fontify-buffer, font-lock-fontify-region):
- Make sure we've setup font-lock's vars. It may influence which
- function we then call.
- (font-lock-default-fontify-buffer): Don't bother calling set-defaults
- here since it's too late anyway.
-
-2006-01-03 Romain Francoise <romain@orebokech.com>
-
- * startup.el (fancy-splash-tail, normal-splash-screen):
- Update copyright year.
-
-2006-01-02 J.D. Smith <jdsmith@as.arizona.edu>
-
- * mouse.el (mouse-drag-track): Rename, from
- `mouse-drag-region-1'. Includes optional argument required to
- enable post-drag event processing (e.g. delete region keys).
- Can be used without this argument to track a mouse region and operate
- on it as soon as the drag completes.
- (mouse-drag-region): Use `mouse-drag-track'.
-
-2006-01-02 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (custom-guess-name-alist, custom-guess-doc-alist):
- Move to `custom-buffer' group.
-
- * cus-theme.el: Rewrite the Custom New Theme Mode interface.
- (custom-new-theme-mode-map, custom-theme-insert-variable-marker)
- (custom-theme-insert-face-marker, custom-theme-variable-menu)
- (custom-theme-face-menu): New variables.
- (custom-theme-add-variable, custom-theme-variable-action)
- (custom-variable-reset-theme, custom-theme-delete-variable)
- (custom-face-reset-theme, custom-theme-face-action)
- (custom-theme-delete-face, custom-theme-merge-theme)
- (custom-theme-add-face, custom-theme-visit-theme): New functions.
-
-2006-01-01 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el: Move Custom Themes commentary to start of theme code.
- (custom-known-themes): Rename `standard' theme to `changed'.
- (custom-push-theme): Caller no longer specifies what theme to use
- when doing `reset'---the setting is simply removed from the theme.
- Delete MODE from `theme-value' and `theme-settings' properties.
- (custom-declare-theme): Ignore &rest args since we don't use them.
-
- (custom-loaded-themes): Delete variable.
- (custom-theme-load-themes, custom-theme-loaded-p)
- (custom-theme-value): Delete functions.
-
- (custom-declare-theme): Signal error on invalid theme names.
- (provide-theme): custom-loaded-themes was deleted.
- (load-theme): Load the file unconditionally.
- (enable-theme): Call `load-theme' if theme is undefined.
- (custom-enabled-themes): Only update value for successful loads.
- (disable-theme): Complete from enabled themes when interactive.
- (custom-variable-theme-value): Calculate theme value directly.
-
- (custom-theme-reset-variables, custom-reset-variables): Mark as
- XEmacs compatibility functions. We don't actually use these.
-
- * cus-edit.el (custom-variable-state-set):
- Use custom-variable-theme-value instead of custom-theme-value.
- (custom-face-state-set): Rename `standard' theme to `changed'.
- (custom-save-variables, custom-save-faces): Delete unneeded
- references to custom-reset-variables.
- (custom-save-resets): Delete function.
- (custom-save-variables, custom-save-faces): MODE argument deleted.
- (custom-save-variables, custom-save-faces): Ignore theme values.
-
- * cus-face.el (custom-theme-reset-faces): Mark as XEmacs
- compatibility function.
-
-2006-01-01 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (Custom-set, Custom-save): Ask for confirmation.
- (Custom-reset-current, Custom-reset-saved): Likewise.
- (Custom-reset-standard): Show message if aborted.
- (custom-mode): Doc fix, describing those commands.
-
- * mouse.el (mouse-drag-region-1): When following link via mouse-2,
- put on event-kind property.
-
-2005-12-31 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (provide-theme): Ban `user' theme name.
- (custom-enabling-themes): New variable.
- (enable-theme): Don't enable user if custom-enabling-themes is t.
- (custom-enabled-themes): Make it a defcustom.
- (custom-theme-recalc-face): No-op if face is undefined.
-
- * cus-edit.el (custom-button-mouse): New variable.
- (custom-button-mouse): New face.
- (custom-raised-buttons, custom-mode): Use it.
-
- * cus-theme.el (custom-new-theme-mode): Use custom-button-mouse.
-
-2005-12-31 Eli Zaretskii <eliz@gnu.org>
-
- * progmodes/gud.el (gud-display-line): Support hl-line in the
- source buffer.
-
-2005-12-31 Lennart Borgman <lennart.borgman.073@student.lu.se> (tiny change)
-
- * mouse.el (mouse-drag-window-above): Verify that the found window
- overlaps with the given window in the horizontal dimension.
-
-2005-12-31 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (cvs-update): New target.
-
- * makefile.w32-in (cvs-update): Ditto.
-
-2005-12-30 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-theme.el (custom-new-theme-mode): Use cus-edit faces.
- (custom-new-theme-mode-map): New variable.
-
-2005-12-30 Richard M. Stallman <rms@gnu.org>
-
- * custom.el (custom-load-themes): Function deleted.
-
- * cus-edit.el (custom-save-loaded-themes): Function deleted.
- (custom-save-variables): Don't delete or add custom-load-themes call.
-
-2005-12-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * cus-start.el: Add `visible-cursor'.
-
- * progmodes/flymake.el (flymake-copy-buffer-to-temp-buffer): Simplify.
- (flymake-parse-output-and-residual): Remove `source-buffer' argument.
- (flymake-process-filter): Switch to buffer before calling it instead.
- (flymake-post-syntax-check, flymake-highlight-err-lines)
- (flymake-delete-own-overlays, flymake-parse-err-lines)
- (flymake-start-syntax-check, flymake-start-syntax-check-process)
- (flymake-count-lines, flymake-parse-residual):
- Remove constant buffer argument.
- (flymake-start-syntax-check-for-current-buffer): Remove.
- Update callers to use flymake-start-syntax-check instead.
- (flymake-display-err-menu-for-current-line):
- Remove unused var `mouse-pos'.
- (flymake-restore-formatting): Comment out unused function.
- (flymake-report-status, flymake-report-fatal-status): Remove buffer
- argument, use current-buffer instead. Update callers.
-
-2005-12-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-mode): Make completion-ignore-case
- buffer-local because choose-completion-delete-max-match requires
- that we set completion-ignore-case (i.e., binding via let is not
- sufficient).
- (bibtex-complete): Always set completion-ignore-case and
- choose-completion-string-functions. The latter is needed because
- choose-completion-string-functions keeps its value if we quit the
- *Completions* buffer without requesting a completion.
-
-2005-12-30 Andreas Schwab <schwab@suse.de>
-
- * progmodes/cc-defs.el: Ignore errors from font-lock-compile-keywords.
-
-2005-12-30 Eli Zaretskii <eliz@gnu.org>
-
- * jit-lock.el (jit-lock-chunk-size): Doc fix.
-
-2005-12-30 Juri Linkov <juri@jurta.org>
-
- * locate.el (locate-fcodes-file, locate-header-face)
- * progmodes/delphi.el (delphi-other-face)
- * progmodes/glasses.el (glasses-face): Add tag "None" to const nil.
-
- * paren.el (show-paren-match, show-paren-mismatch): Use existing
- group `paren-showing-faces'.
-
- * net/goto-addr.el (goto-address-highlight-keymap): Fix docstring.
- (goto-address): Fix docstring.
-
- * net/webjump.el (webjump-sample-sites): Update URLs.
-
- * textmodes/fill.el (fill-single-word-nobreak-p): Use `sentence-end'.
-
- * subr.el (cancel-change-group): Add listp around pending-undo-list.
-
-2005-12-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-compile-keywords): Signal an error when
- font-lock-set-defaults hasn't been called.
-
-2005-12-29 Luc Teirlinck <teirllm@auburn.edu>
-
- * subr.el (noreturn, 1value): Doc fixes.
-
-2005-12-29 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-text-in-field-bounds): Handle case
- that assoc-string returns nil.
-
-2005-12-29 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-entry-type-whitespace)
- (bibtex-entry-type-str, bibtex-empty-field-re)
- (bibtex-search-backward-string, bibtex-preamble-prefix)
- (bibtex-search-entry, bibtex-enclosing-entry-maybe-empty-head): Remove.
- (bibtex-any-valid-entry-type): New variable.
- (bibtex-parse-field-name): Simplify.
- (bibtex-parse-string, bibtex-search-forward-string): New arg empty-key.
- (bibtex-preamble-prefix): Include left delimiter.
- (bibtex-search-forward-field, bibtex-search-backward-field):
- Allow unbounded search past entry boundaries (required by bibtex-pop).
- (bibtex-text-in-field-bounds): Use push.
- (bibtex-text-in-field): Do not use bibtex-narrow-to-entry.
- (bibtex-parse-preamble, bibtex-valid-entry)
- (bibtex-beginning-first-field): New functions.
- (bibtex-skip-to-valid-entry): Use bibtex-valid-entry. Fix regexp.
- (bibtex-map-entries): Fix docstring.
- (bibtex-flash-head): New arg prompt. Simplify.
- (bibtex-enclosing-field): Include code of bibtex-inside-field.
- (bibtex-insert-kill): Simplify. Always insert text past the
- current field or entry.
- (bibtex-format-entry): Use bibtex-parse-field.
- (bibtex-pop): Use bibtex-beginning-of-entry and
- bibtex-end-of-entry to initiate the search. Insert empty field if
- we found ourselves.
- (bibtex-print-help-message): New args field and comma.
- Handle entry keys.
- (bibtex-make-field): Use bibtex-beginning-of-entry.
- (bibtex-end-of-entry): Use bibtex-valid-entry. Recognize any
- invalid entry.
- (bibtex-validate): Use bibtex-valid-entry and bibtex-parse-string.
- Handle preambles. Simplify code for thorough test.
- (bibtex-next-field, bibtex-find-text, bibtex-find-text-internal):
- New arg comma. Handle entry heads.
- (bibtex-remove-OPT-or-ALT, bibtex-remove-delimiters)
- (bibtex-kill-field, bibtex-copy-field-as-kil, bibtex-empty-field):
- New arg comma.
- (bibtex-kill-entry): Use bibtex-any-entry-maybe-empty-head.
- (bibtex-fill-field): Simplify.
- (bibtex-fill-entry): Use bibtex-beginning-first-field and
- bibtex-parse-field.
- (bibtex-convert-alien): Do not wait before calling bibtex-validate.
- (bibtex-complete): Use bibtex-parse-preamble.
-
-2005-12-29 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-tooltip-print, gdb-tooltip-print-1):
- Display name of expression instead of convenience variable.
- (gdb-post-prompt): Only call gdb-get-changed-registers if needed.
-
- * progmodes/gud.el (gud-tooltip-dereference): Rename from
- toggle-gud-tooltip-dereference.
- (gud-tooltip-print-command): Move concatenation of "*" to expr to...
- (gud-tooltip-tips): ...here when dereferencing.
-
-2005-12-28 Bill Wohler <wohler@newt.com>
-
- * simple.el (mh-e-user-agent): Move to mh-e/mh-comp.el and autoload.
-
-2005-12-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc.el (vc-annotate-display): Replace optional arg `color-map' with
- compulsory arg `ratio'. Inline body of vc-annotate-time-span.
- (vc-annotate-display-autoscale): Adjust call.
- (vc-annotate-display-default): Adjust call. Make arg compulsory.
- Fix interactive spec.
- (vc-annotate-time-span): Remove.
- (vc-annotate-oldest-in-map): Rename from vc-annotate-car-last-cons.
- (vc-annotate-mode-menu, vc-annotate-display-autoscale)
- (vc-annotate-display-select): Use new name.
-
- * vc.el (vc-annotate-mode-map): Remove obsolete binding.
- (vc-annotate-mode-menu): Remove left-over redundant declaration.
- Correct the construction of span entries. Simplify.
- (vc-annotate-display-select): Fix the nil case.
- (vc-annotate): Remove obsolete (and now broken) code.
- (vc-annotate-extract-revision-at-line): Remove obsolete code.
- (vc-annotate-time-span): Remove unused arg `quantize'. Simplify.
-
-2005-12-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * subr.el (lazy-completion-table): Correct typo in docstring.
-
- * startup.el (command-line): Use `custom-reevaluate-setting' for
- `send-mail-function'.
-
- * mail/sendmail.el (send-mail-function): Autoload the standard-value.
-
-2005-12-05 Ralf Angeli <angeli@iwi.uni-sb.de>
-
- * mail/smtpmail.el (smtpmail-try-auth-methods):
- Send credentials together with "AUTH PLAIN" command.
-
-2005-12-27 Richard M. Stallman <rms@gnu.org>
-
- * mouse.el (mouse-drag-region-1): When remapping mouse-1 to
- mouse-2, go back to previously selected window, so it's selected
- when mouse-2 command runs.
-
-2005-12-27 Juri Linkov <juri@jurta.org>
-
- * descr-text.el (describe-text-sexp): Use square brackets for
- button [Show] to distinguish it from the property value `show'.
- (describe-property-list): Use `insert-text-button' with
- `help-face' type instead of putting face in quotes, because button
- is not created automatically for a list of faces.
- (describe-text-properties-1): Put button-type value in quotes to
- distinguish from plain text "button".
- (describe-char): Display code point values in hex. Don't use
- `symbol-name' for `current-input-method' because it is a string.
- Use `insert-text-button' with `help-face' type instead of putting
- hardcoded face in quotes, because button is not created automatically.
-
-2005-12-27 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/glasses.el (glasses-face): More specific custom type.
-
- * files.el (set-visited-file-name): Doc fix.
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- Use local var buffer-scan-pos to advance scan for next misspelling.
- Advance it only after we find the misspelling.
-
-2005-12-27 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- New criteria for finding the misspelling in the buffer.
-
-2005-12-27 Nick Roberts <nickrob@snap.net.nz>
-
- * help-mode.el (help-insert-string): Set help-xref-stack-item
- rather than call help-setup-xref.
-
- * descr-text.el (describe-char): Revert previous changes for
- optional buffer argument.
-
-2005-12-27 Juri Linkov <juri@jurta.org>
-
- * help-mode.el (help-insert-string): New function. Save buffer
- contents in cases where it is impossible to recompute the old contents.
-
- * descr-text.el (describe-char): Set help-xref-stack-item
- explicitly after buffer has been generated.
-
-2005-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * cus-start.el (all): Add x-gtk-show-hidden-files.
-
-2005-12-26 Richard M. Stallman <rms@gnu.org>
-
- * replace.el (perform-replace): Calculate match-again
- before skipping read-only matches.
-
- * paren.el (paren-showing-faces): New group.
- (show-paren-match, show-paren-mismatch): Move to that group.
-
- * button.el (button): Put into group `basic-faces'.
-
- * progmodes/make-mode.el: Remove faces from group `faces'.
-
- * apropos.el (apropos, apropos-value): Doc fix.
- (apropos-documentation): Doc fix.
-
-2005-12-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * subr.el (lazy-completion-table): Remove argument `args'.
-
- * textmodes/bibtex.el (bibtex-strings, bibtex-reference-keys):
- Don't use the `args' argument of lazy-completion-table.
-
-2005-12-26 Nick Roberts <nickrob@snap.net.nz>
-
- * descr-text.el (describe-char): Add optional argument for buffer.
- Set buffer appropriately. Call help-setup-xref.
- Suggested by Stefan Monnier.
-
-2005-12-26 Juri Linkov <juri@jurta.org>
-
- * descr-text.el: Require `help-fns' at runtime. Don't require
- `button' for byte compilation.
- (describe-text-widget): Add `help-echo' for first button.
- Use `help-info' for second.
- (describe-property-list): Use `help-argument-name' instead of `italic'.
- (describe-text-category): Add prompt to interactive spec.
- Call `help-setup-xref'.
- (describe-char): Use `help-character-set'. Add `help-echo' for
- code point. Use `help-input-method'. Remove superfluous insert.
-
-2005-12-25 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/cc-defs.el (c-emacs-features): Do parse-partial-sexp
- at point, in case of narrowing.
-
- * progmodes/delphi.el (delphi-other-face): Allow nil in type.
-
- * locate.el (locate-header-face): Allow nil in type.
-
- * progmodes/cpp.el (cpp-face-none-list): Use cpp-face instead of face.
-
-2005-12-25 Romain Francoise <romain@orebokech.com>
-
- * battery.el (battery-linux-proc-acpi): Also try
- `/proc/acpi/thermal_zone/THM0/temperature'.
-
-2005-12-24 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (custom-push-theme): Fix docstring.
-
- * cus-edit.el (custom-variable-set, custom-variable-save)
- (custom-variable-save): Custom-quote widget values.
- (customize-save-variable): Fix custom-push-theme call.
-
-2005-12-24 Eli Zaretskii <eliz@gnu.org>
-
- * w32-fns.el (w32-batch-update-autoloads): New function.
-
- * makefile.w32-in (autoloads, $(lisp)/mh-e/mh-loaddefs.el):
- Use w32-batch-update-autoloads, and don't setq generated-autoload-file
- from the command line.
-
-2005-12-23 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (custom-push-theme): Clarify docstring. VALUE nil for
- reset means to remove setting from theme entirely. Don't keep
- expanding theme-settings list; delete old entries if necessary.
-
- * cus-edit.el (custom-buffer-create-internal): Move "Erase
- customization" button one line up.
- (custom-themed): New face.
- (custom-magic-alist): New value, THEMED, for theme settings.
- (custom-variable-state-set, custom-face-state-set):
- Check theme-value instead of saved-value.
- (custom-variable-reset-standard, custom-face-reset-standard):
- Remove theme setting entirely. Recalculate new values.
- (custom-variable-set, custom-variable-set)
- (custom-variable-reset-saved, custom-variable-reset-backup)
- (custom-face-set, custom-face-reset-saved): Update `user' theme.
- (custom-variable-save): Fix typos.
-
-2005-12-23 Juri Linkov <juri@jurta.org>
-
- * emacs-lisp/edebug.el (edebug-all-defs, edebug-all-forms):
- Add autoload cookies.
- (edebug-outside-d-c-i-n-s-w): New variable.
- (edebug-display, edebug-outside-excursion): Use it to save the
- original value of default-cursor-in-non-selected-windows.
- Set default-cursor-in-non-selected-windows to t while Edebug
- is active.
- (edebug-mode, edebug-eval-mode): Doc fix.
-
- * mouse.el (mouse-choose-completion): Replace `buffer-substring'
- with `buffer-substring-no-properties' to remove common substring
- highlighting.
-
- * info.el (info-other-window, info): Rename function argument
- `file' to `file-or-node'.
- (Info-complete-menu-item): Use local variable `complete-nodes' to
- keep the global value of `Info-complete-nodes' unchanged for
- subsequent completions.
- (info-tool-bar-map): Put `Info-index' icon just before `Info-search'.
-
- * simple.el (get-next-valid-buffer, last-buffer)
- (next-error-buffer-p, next-error-find-buffer)
- (minibuffer-history-sexp-flag): Doc fix.
-
- * savehist.el (savehist-mode-hook): Add `:group'.
-
- * log-view.el: Call autoload for vc-find-version.
- (log-view-current-file): Adjust subgroup numbers.
- (log-view-current-tag): Add `length'.
-
-2005-12-23 Richard M. Stallman <rms@gnu.org>
-
- * vc.el (vc-annotate-car-last-cons): Defn moved up.
-
-2005-12-23 Juri Linkov <juri@jurta.org>
-
- * hi-lock.el (hi-lock-archaic-interface-message-used)
- (hi-lock-archaic-interface-deduce, hi-lock-mode): Doc fix.
- (hi-lock-mode): Display "Hi" in the mode line only when
- hi-lock-interactive-patterns or hi-lock-file-patterns is non-nil.
- (hi-lock-write-interactive-patterns):
- Use hi-lock-file-patterns-prefix instead of hard-coded "Hi-lock".
- (hi-lock-set-pattern, hi-lock-set-file-patterns)
- (hi-lock-font-lock-hook): Set 3rd arg `how' of
- font-lock-add-keywords to t.
-
-2005-12-23 David Koppelman <koppel@ece.lsu.edu>
-
- * hi-lock.el (hi-lock-highlight-range): New variable.
- (hi-lock-mode, hi-lock-unface-buffer): Call font-lock-fontify-buffer
- only if font-lock-fontified is non-nil. Remove overlays.
- (hi-lock-set-pattern): Call font-lock-fontify-buffer if
- font-lock-fontified is non-nil, otherwise use overlays (instead of
- text properties).
- (hi-lock-string-serialize-hash, hi-lock-string-serialize-serial):
- New variables.
- (hi-lock-string-serialize): New function.
-
-2005-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * menu-bar.el (menu-find-file-existing): New function.
- (menu-bar-file-menu): Use menu-find-file-existing for Open.
-
- * tool-bar.el (tool-bar-setup): Open changed to menu-find-file-existing.
-
-2005-12-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc.el: Remove unnecessary leading * in docstrings.
- (vc-annotate-mode-map): Move initialization into declaration.
- (vc-static-header-alist): Nitpick on the regexp.
- (vc-default-init-version): New fun.
- (vc-register): Use it.
- (vc-insert-headers): Use dolist.
- (vc-annotate-get-backend): Remove unused function.
- (vc-annotate-add-menu): Remove. Build the menu directly at toplevel.
- (vc-annotate-mode): Remove corresponding call.
- (vc-annotate-car-last-cons): Simplify.
- (vc-annotate-buffers): Remove var.
- (vc-annotate-backend): Make it buffer-local.
- (vc-annotate): Move the interaction to the interactive spec.
- Add a `buf' argument.
- (vc-annotate-warp-version): Use this new `buf' argument to avoid
- killing&creating a vc-annotate buffer, which is very disruptive when
- the buffers are shown in dedicated frames.
-
-2005-12-23 Nick Roberts <nickrob@snap.net.nz>
-
- * descr-text.el: Add FSF as maintainer.
- (describe-text-mode, describe-text-mode-map)
- (describe-text-mode-hook, describe-text-done): Delete. Use normal
- help-mode.
- (describe-text-widget, describe-text-sexp)
- (describe-property-list, describe-text-category)
- (describe-text-properties, describe-text-properties-1)
- (describe-char): Use help buttons instead of widgets.
- (describe-char-unicodedata-file): Make URL link in doc string.
-
-2005-12-22 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (custom-variable-prompt): Say "variable" in prompt.
- (custom-buffer-create-internal): Reword the top-of-buffer help intro.
- Don't include buttons that write a file when there's no file.
- (custom-variable-menu, custom-face-menu, custom-group-menu):
- Don't include commands that write a file when there's no file.
- (customize-browse): Reword the top-of-buffer help intro.
- (custom-buffer-create-internal): Fix previous change.
- (customize-changed-options-previous-release): Prev release is 21.1.
- (customize-changed-options): Doc fix.
- (customize-changed): New alias.
- (custom-reset-menu, custom-magic-alist, Custom-mode-menu):
- Say "standard values".
- (Custom-reset-standard): Doc fix.
- (custom-face-reset-standard): Doc fix.
-
-2005-12-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-default-fontify-buffer): Try and set-defaults
- even if font-lock-mode is non-nil since it may be t without having
- turned on font-lock-mode-internal.
- (font-lock-choose-keywords): Minor optimization.
- (font-lock-add-keywords, font-lock-remove-keywords)
- (font-lock-set-defaults): Don't call make-local-variable on a variable
- that we know to already be local.
-
-2005-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * emacs-lisp/lisp.el (lisp-complete-symbol): Don't print progress
- messages if in the minibuffer.
-
-2005-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/flyspell.el (flyspell-check-word-p): Don't quote - in a RE.
- (tex-mode-flyspell-verify, flyspell-get-word)
- (flyspell-external-point-words): Don't use point-min/max uselessly.
-
- * emacs-lisp/lisp.el (lisp-complete-symbol): Mostly undo the change
- by Kevin Rodgers. Instead, just hide the completions buffer if we
- don't need to show it.
-
-2005-12-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * wid-edit.el (file, directory): Doc fixes for the `define-widget's.
-
-2005-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/lisp.el (lisp-complete-symbol): Don't call
- delete-windows-on with an inexistent buffer.
-
-2005-12-22 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-tooltip-modes, gud-tooltip-display):
- Delete defcustom variable :tag names.
-
-2005-12-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * log-view.el (log-view-file-re, log-view-message-re): Use shy groups.
- (log-view-font-lock-keywords): Ajust subgroup numbers.
- (log-view-current-tag): Don't hard code the number of subgroups.
-
-2005-12-20 Juri Linkov <juri@jurta.org>
-
- * tooltip.el (tooltip): Move defgroup before define-minor-mode.
- (tooltip-x-offset, tooltip-y-offset): Doc fix.
-
- * menu-bar.el (menu-bar-menu-frame-live-and-visible-p)
- (menu-bar-non-minibuffer-window-p): Instead of checking
- display-multi-frame-p, use selected-frame when menu-updating-frame
- is nil.
-
-2005-12-20 Stuart Herring <herring@lanl.gov> (tiny change)
-
- * align.el (align-rules-list): Use [ \t] instead of \s-
- for column separators in text mode.
-
-2005-12-20 Nick Roberts <nickrob@snap.net.nz>
-
- * help-mode.el (help-customize-variable, help-customize-face):
- Don't pop help-xref-stack as help-follow no longer pushes
- anything on to it.
-
-2005-12-20 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda-custom-commands): New option.
- (org-agenda): Offer custom commands on splash screen.
- (org-make-tags-matcher): Parser for Boolean logic added.
- (org-agenda-set-tags): New command.
- (org-agenda-menu, org-agenda-mode-map): Add `org-agenda-set-tags'.
- (org-set-tags): Efficiency improvements.
- (org-auto-align-tags): New option.
- (org-todo, org-demote, org-promote): Realign tags.
- (org-tags-completion-function): Use also "&" and "|" as separators.
- (org-org-menu): Agenda commands simplified.
-
-2005-12-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (customize-apropos, customize-apropos-options):
- Docstring changes.
-
- * font-lock.el (font-lock): Add tags to the links in the defgroup.
-
-2005-12-19 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-mode): Wrap while widened.
- (longlines-decode-region, longlines-encode-region): Compute max
- just once.
-
-2005-12-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * cus-edit.el (mac): New group.
-
- * cus-start.el (all): Add user options in macterm.c. Add test for
- Mac-related built-ins. Fix test for GTK-related built-ins.
-
- * term/mac-win.el (mac-handle-language-change)
- (mac-ae-open-documents, mac-ae-get-url, mac-services-open-file)
- (mac-services-open-selection, mac-services-mail-selection)
- (mac-services-mail-to, mac-services-insert-text)
- (mac-dispatch-apple-event): Add docstrings.
- (x-get-selection, mac-select-convert-to-string): Select coding
- system from `utf-16be' and `utf-16le' using `byteorder'.
-
-2005-12-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * subr.el (lazy-completion-table): Don't be fooled if the var holds
- a "list" (lambda ...) rather than a real completion list.
-
- * emacs-lisp/cl-extra.el (cl-macroexpand-all): Fix code-walk for
- lexical-let when encountering ((lambda (...) ...) ...).
-
-2005-12-17 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/sh-script.el (sh-mode):
- * language/ethio-util.el (ethio-fidel-to-sera-mail-or-marker):
- * textmodes/picture.el (picture-mode): Update docstrings.
-
-2005-12-17 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (autoloads, custom-deps): Warn that parts of
- commands enclosed in $(ARGQUOTE)s should not be split between two
- lines, as that will break with GNU Make >3.80, when sh.exe is used
- and arg quoting is with '..'.
- (autoloads): Don't break the quoted --eval expression between
- several lines.
-
-2005-12-17 Chong Yidong <cyd@stupidchicken.com>
-
- * emacs-lisp/edebug.el (edebug-safe-prin1-to-string):
- Capture error from printing circular structures.
-
-2005-12-17 Martin Rudalics <rudalics@gmx.at>
-
- * wid-edit.el (widget-checkbox-action): Clear undo info.
-
-2005-12-16 Bill Wohler <wohler@newt.com>
-
- * menu-bar.el (kill-this-buffer): Set a good example by using menu
- bar, not menubar in comment.
-
-2005-12-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cc-engine.el (c-after-change-check-<>-operators):
- After-change-functions should not clobber the match data.
-
-2005-12-16 Juri Linkov <juri@jurta.org>
-
- * simple.el (choose-completion): Use `buffer-substring-no-properties'
- instead of `buffer-substring'.
- (completion-common-substring): Doc fix.
- (completion-setup-function): Use minibuffer-completion-contents
- instead of minibuffer-contents. Don't set common-string-length
- initially. Remove special handling of partial-completion-mode.
- Move computation of completion-base-size into one cond.
- Call completion-base-size-function in mainbuf. In computation of
- completion-base-size for file name completion don't move point to
- the end of the minibuffer. Move computation of common-string-length
- into one cond. Start putting faces only when common-string-length>=0.
- Add condition to put completions-common-part when
- common-string-length>0.
-
- * complete.el (PC-do-completion): Remove `(equal (point) beg)' to
- place point at the first different character in the minibuffer
- even if this position is at the beginning of the minibuffer.
-
- * info.el (Info-read-node-name-1): In completion-base-size-function's
- lambda return 1 if common-substring or minibuffer-completion-contents
- starts with (, and 0 otherwise.
-
- * emacs-lisp/crm.el (crm-minibuffer-completion-help):
- Use `crm-current-element' for second arg of `display-completion-list'.
-
-2005-12-16 Klaus Zeitler <kzeitler@lucent.com>
-
- * files.el (set-auto-mode): Look for an interpreter specified on
- the first line also if search for mode specification succeeded,
- but the mode is not known.
-
-2005-12-16 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-tags-match-list-sublevels): New option.
- (org-open-at-point): Implement tag searches as links.
- (org-fit-agenda-window, org-get-buffer-tags, org-get-tags)
- (org-make-tags-matcher, org-scan-tags, org-activate-tags): New funs.
- (org-tags-sparse-tree, org-tags-view, org-set-tags)
- (org-agenda-dispatch): New commands.
- (org-use-tag-inheritance, org-tags-column): New options.
- (org-tab-follows-link, org-return-follows-link): New options.
- (org-tags): New customize group.
- (org-start-icalendar-file): Get local time zone.
- (org-tags-completion-function): New function.
- (org-set-font-lock-defaults): Make sure links will also be
- highlighted inside headlines.
-
-2005-12-16 Mark Plaksin <happy@usg.edu> (tiny change)
-
- * term.el (term-emulate-terminal):
- Let term-handle-ansi-terminal-messages override what Bash says about
- its current directory.
-
-2005-12-16 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * bindings.el (last-buffer): Move to simple.el.
- * simple.el (last-buffer): Move here.
- (get-next-valid-buffer): New function.
- (next-buffer): Use frame-local buffer list, maintain buried buffer list.
- (prev-buffer): Ditto. Rename to `previous-buffer'.
-
- * menu-bar.el (menu-bar-update-buffers): Update uses of `prev-buffer'.
- * bindings.el (global-map): Ditto.
-
-2005-12-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el: Introductory comment change.
- (custom-magic-alist): Change message string for the `rogue' state.
-
-2005-12-15 Richard M. Stallman <rms@gnu.org>
-
- * tooltip.el: Delete defcustom variable :tag names.
-
- * complete.el (partial-completion-mode): Doc fix.
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- Use save-excursion to ensure we don't move backward in the
- search loop, not even one character.
- (flyspell-delete-all-overlays): Use remove-overlays directly.
-
- * textmodes/ispell.el (ispell-current-personal-dictionary): New var.
- (ispell-start-process): Set that variable.
- Clear ispell-buffer-local-name.
- (ispell-internal-change-dictionary):
- Set ispell-current-dictionary after killing process.
- (ispell-buffer-local-dict):
- Don't set spell-personal-dictionary after killing process.
- (ispell-buffer-local-words): Don't clear out ispell-buffer-local-name.
- (ispell-tex-skip-alists, ispell-html-skip-alists)
- (ispell-skip-region-alist): Mark as risky.
-
- * net/newsticker.el (newsticker--retrieval-timer-list)
- (newsticker--display-timer, newsticker-running-p)
- (newsticker-ticker-running-p): Definitions moved up.
-
-2005-12-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-many-windows): Echo new state in minibuffer.
-
-2005-12-15 David Ponce <david@dponce.com>
-
- * recentf.el (recentf-dialog-goto-first): Fix missing error condition.
- (recentf-edit-list, recentf-open-files): Signal an error when
- there is no recent file.
-
-2005-12-14 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * textmodes/texinfmt.el (texinfo-format-region): Set buffer to
- read-only except for texinfo-format-region evaluation.
-
-2005-12-14 Richard M. Stallman <rms@gnu.org>
-
- * vc.el (vc-default-previous-version, vc-default-next-version)
- (vc-do-command): Doc fixes.
-
-2005-12-14 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-expand-strings)
- (bibtex-autokey-expand-string, bibtex-name-part)
- (bibtex-entry-type-whitespace, bibtex-entry-type-str)
- (bibtex-any-entry-maybe-empty-head, bibtex-string-type)
- (bibtex-preamble-prefix, bibtex-string-empty-key): New variables.
- (bibtex-entry-type, bibtex-entry-head): Match only valid entries.
- (bibtex-entry-postfix, bibtex-known-entry-type-re)
- (bibtex-valid-entry-re, bibtex-any-valid-entry-re)
- (bibtex-valid-entry-whitespace-re, bibtex-empty-field-re)
- (bibtex-field-name-for-parsing, bibtex-remove-delimiters-string)
- (bibtex-beginning-of-last-entry): Remove.
- (bibtex-parse-field-name): Use bibtex-field-name. Issue error
- message if comma is missing but buffer is read-only.
- (bibtex-parse-field-text): Handle whitespaces at the end of field
- text. Return 3-element list with beginning and end of field text
- and end of field.
- (bibtex-end-of-text-in-field, bibtex-end-of-field): Change accordingly.
- (bibtex-parse-field): Remove arg name. Use bibtex-field-name.
- (bibtex-search-forward-field, bibtex-search-backward-field):
- Search always delimited by limits of entry. Use more efficient
- search algorithms.
- (bibtex-name-in-field): Use bibtex-start-of-name-in-field and
- bibtex-end-of-name-in-field.
- (bibtex-text-in-field-bounds): Handle BibTeX strings when
- extracting the content of a field.
- (bibtex-text-in-field): Use search limits.
- (bibtex-parse-string-prefix): Handle empty string keys based on
- bibtex-string-empty-key.
- (bibtex-parse-string): Fix docstring.
- (bibtex-text-in-string): Use bibtex-text-in-field-bounds.
- (bibtex-preamble-prefix, bibtex-strings): New functions.
- (bibtex-skip-to-valid-entry): Include preceding whitespace in
- BibTeX entries (consistent with other BibTeX functions).
- (bibtex-map-entries): Use bibtex-skip-to-valid-entry.
- (bibtex-search-entry): Fix docstring. Simplify.
- (bibtex-flash-head, bibtex-complete-string-cleanup)
- (bibtex-count-entries, bibtex-sort-buffer): Simplify.
- (bibtex-beginning-of-first-entry): Use bibtex-skip-to-valid-entry.
- (bibtex-parse-entry): New optional arg content.
- (bibtex-format-entry, bibtex-autofill-entry, bibtex-url): Use it.
- Use bibtex-text-in-field-bounds.
- (bibtex-print-help-message): Handle BibTeX strings and preambles.
- (bibtex-end-of-entry): Use bibtex-preamble-prefix and
- bibtex-parse-string-postfix.
- (bibtex-find-text-internal): New function.
- (bibtex-remove-delimiters): Use it.
- (bibtex-find-text): Use it. New optional arg help.
- (bibtex-complete): Handle BibTeX string and preamble entries.
- (bibtex-Preamble): Fix order of closing delimiters.
-
-2005-12-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc.el (vc-default-revert): New fun.
-
- * vc-mcvs.el (vc-mcvs-revert): Fix call to vc-default-revert.
-
-2005-12-14 Romain Francoise <romain@orebokech.com>
-
- * font-lock.el (font-lock-keywords-alist): Rename `append' to `how'.
- (font-lock-add-keywords, font-lock-update-removed-keyword-alist):
- (font-lock-remove-keywords): Likewise.
-
-2005-12-14 Juri Linkov <juri@jurta.org>
-
- * log-view.el (log-view-diff): Doc fix.
-
- * isearch.el (isearch-query-replace): Use (mark) instead of
- isearch-opoint if mark is active in transient-mark-mode.
-
-2005-12-14 Aaron S. Hawley <Aaron.Hawley@uvm.edu>
-
- * isearch.el (isearch-query-replace): Check for isearch-other-end.
-
-2005-12-14 Per Abrahamsen <abraham@dina.kvl.dk>
-
- * progmodes/cpp.el (cpp-face): New widget.
- (cpp-known-face, cpp-unknown-face, cpp-edit-list): Use it.
-
-2005-12-14 Juri Linkov <juri@jurta.org>
-
- * help-macro.el (make-help-screen): Bind `inhibit-read-only' to t
- around `erase-buffer' and `insert'.
-
- * descr-text.el (describe-text-properties): Replace buffer name
- "*Help-2*" with "*Help*<2>".
- (describe-char): Add functions print-help-return-message,
- toggle-read-only. Use help-setup-xref with nil to not store
- describe-char in help-xref-stack. Use help-make-xrefs to
- make [back] button.
-
- * desktop.el (desktop-minor-mode-table): Add vc-dired-mode with nil.
-
- * wdired.el (wdired-old-point): New internal variable.
- (wdired-change-to-wdired-mode): Set it buffer-locally.
- (wdired-abort-changes): Restore point after aborting changes.
-
-2005-12-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc.el (vc-do-command): Add a new value t for okstatus.
-
- * vc-svn.el (vc-svn-registered): Use it to avoid popping up a spurious
- frame in case of errors.
-
-2005-12-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * menu-bar.el (menu-bar-showhide-fringe-menu): Move "On the Right"
- so it comes after "On the Left" in the menu.
-
-2005-12-12 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (customize-apropos, customize-apropos-options)
- (customize-apropos-faces, customize-apropos-groups): Doc fixes.
-
-2005-12-12 Bill Wohler <wohler@newt.com>
-
- * vc-svn.el (vc-svn-registered): Fix problem of visiting
- non-writable Subversion-controlled files by saving window
- configuration before calling vc-do-command. vc-do-command calls
- pop-to-buffer on error which is unexpected during registration.
-
-2005-12-12 Jay Belanger <belanger@truman.edu>
-
- * calc/README: Update the summary of changes.
-
-2005-12-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * descr-text.el (describe-char): Rework last fix to solve the problem
- is the same way it's solved for everything else in that function
- (i.e. by extracting the info before setting up the *Help* buffer).
-
-2005-12-12 Kim F. Storm <storm@cua.dk>
-
- * subr.el (version-regexp-alist): Allow space as separator before
- non-numeric part, e.g. "1.0 alpha".
- (version-to-list): Interpret .X.Y version as 0.X.Y version.
-
-2005-12-12 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda, org-timeline, org-todo):
- Implement Logging and the keep-modes setting.
- (org-get-category): Make sure a string is returned.
- (org-log-done): New function.
- (org-log-done, org-closed-string): New options.
-
-2005-12-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * tooltip.el (tooltip-y-offset): Change default to 20.
-
-2005-12-12 Richard M. Stallman <rms@gnu.org>
-
- * mouse.el (mouse-drag-vertical-line): Use adjust-window-trailing-edge.
-
- * frame.el (display-hourglass): Doc fix.
-
- * help.el (help-for-help-internal): Simplify entry for `a'.
-
- * info.el (Info-on-current-buffer): Doc fix.
- (info-insert-file-contents): Don't test (featurep 'jka-compr).
-
- * startup.el (inhibit-splash-screen): Make this the real name.
- (inhibit-startup-message): Make this the alias.
- (command-line): Find only simple.el, and use its directory
- to fill in other preloaded files' names.
- (command-line): Deactivate the mark if deactivate-mark is set.
-
- * international/mule.el (load-with-code-conversion):
- Bind deactivate-mark.
-
- * progmodes/compile.el (compilation-error-regexp-alist): Doc fix.
-
-2005-12-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (customize-apropos): Avoid listing an option more
- than once under different aliases. No longer list user options
- that are not defined with defcustom (unless a prefix arg is given).
- Doc fix.
- (customize-apropos-options): Doc fix.
-
-2005-12-11 Juri Linkov <juri@jurta.org>
-
- * frame.el (set-background-color, set-foreground-color)
- (set-cursor-color, set-mouse-color, set-border-color):
- Add explicit prompts to read colors by `facemenu-read-color'.
- (show-trailing-whitespace, blink-cursor-delay)
- (blink-cursor-interval, display-hourglass, hourglass-delay):
- Remove tags.
- (display-hourglass, hourglass-delay): Doc fix.
- (cursor-in-non-selected-windows): Capitalize words in tag.
-
- * faces.el (frame-background-mode): Replace `choice-item' keywords
- with `const' to not make [default] button. Change default value tag
- from `default' to `automatic'. Doc fix.
- (trailing-whitespace) <defface>: Change group `whitespace' to
- `whitespace-faces'.
-
-2005-12-11 Richard M. Stallman <rms@gnu.org>
-
- * buff-menu.el (Buffer-menu-sort-column): Not a user variable.
-
-2005-12-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Create keymap for mac-apple-event-map.
-
-2005-12-11 Nick Roberts <nickrob@snap.net.nz>
-
- * tooltip.el (tooltip-mode): Move to start of file so that it
- appears at top of customize buffer.
-
- * progmodes/gud.el (gud-tooltip-modes, gud-tooltip-display):
- Add the gud groupname.
- (gud-tooltip-mode): Add the tooltip groupname.
- (gud-tooltip-echo-area): Add the gud groupname. Remove tag to
- avoid conflict with tooltip-use-echo-area.
-
-2005-12-10 Romain Francoise <romain@orebokech.com>
-
- * help.el (help-for-help-internal): Add `r' in doc string.
-
-2005-12-10 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * align.el (align-regexp, align-highlight-rule):
- Use region-beginning and region-end instead of point and mark, so that
- repetition (with `repeat-complex-command') recomputes the region
- bounds.
-
-2005-12-10 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * window.el (bw-get-tree, bw-get-tree-1, bw-find-tree-sub)
- (bw-find-tree-sub-1, bw-l, bw-t, bw-r, bw-b, bw-dir, bw-eqdir)
- (bw-refresh-edges, bw-adjust-window, bw-balance-sub): New functions.
- (balance-windows): Rewrite using the above new functions.
-
-2005-12-10 David Koppelman <koppel@ece.lsu.edu>
-
- * hi-lock.el (hi-lock-mode): Rename from hi-lock-buffer-mode;
- react if global-hi-lock-mode seems intended.
- (global-hi-lock-mode): Renamed from hi-lock-mode.
- (hi-lock-archaic-interface-message-used)
- (hi-lock-archaic-interface-deduce): New variables.
- (turn-on-hi-lock-if-enabled, hi-lock-line-face-buffer)
- (hi-lock-face-buffer, hi-lock-face-phrase-buffer)
- (hi-lock-find-patterns, hi-lock-font-lock-hook):
- Replace hi-lock-buffer-mode with hi-lock-mode.
-
-2005-12-10 Kevin Rodgers <ihs_4664@yahoo.com> (tiny change)
-
- * emacs-lisp/lisp.el (lisp-complete-symbol): Regenerate the
- completion list, even after a partial completion has been
- inserted in the current buffer. If there are more than 1
- completion, redisplay the *Completions* buffer; if the
- completion is unique, delete the *Completions* window.
-
-2005-12-10 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmail.el (rmail-next-same-subject): Handle multiple "Re: "
- strings and long subject lines that were broken into multiple
- lines at arbitrary places. Handle subjects that have "Re: " in
- the middle.
-
-2005-12-10 John W. Eaton <jwe@octave.org>
-
- * progmodes/octave-mod.el (octave-electric-space): Don't indent
- comments or strings if octave-auto-indent is nil.
-
-2005-12-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Require url when compiling.
- Call mac-process-deferred-apple-events after loading init files.
- (mac-apple-event-map): New defvar. Define event handlers in it.
- (core-event, internet-event): New Apple event class symbols.
- (open-application, reopen-application, open-documents)
- (print-documents, open-contents, quit-application)
- (application-died, show-preferences, autosave-now, get-url):
- New Apple event ID symbols.
- (about): New HICommand ID symbol.
- (mac-event-spec, mac-event-ae): New macros.
- (mac-ae-parameter, mac-ae-list, mac-bytes-to-integer)
- (mac-ae-selection-range, mac-ae-text-for-search)
- (mac-ae-open-documents, mac-ae-text, mac-ae-get-url): New functions.
- (mac-application-menu-map): Remove keymap. Handlers for HICommand
- and Services menu events are now defined in mac-apple-event-map.
- (mac-drag-n-drop): Remove selection range handling.
-
-2005-12-10 Kenichi Handa <handa@m17n.org>
-
- * simple.el (zap-to-char):
- * isearch.el (isearch-process-search-char): Translate CHAR by
- translation-table-for-input.
-
-2005-12-09 Chong Yidong <cyd@stupidchicken.com>
-
- * foldout.el (foldout-exit-fold): Properly hide subtree.
-
-2005-12-09 Reiner Steib <Reiner.Steib@gmx.de>
-
- * files.el (save-buffer):
- * international/ucs-tables.el (ucs-set-table-for-input):
- * mail/mail-extr.el (mail-extract-address-components):
- * mail/sendmail.el (mail-mode): Reformat doc string.
-
-2005-12-09 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-highlight): Change main overlay priority
- from 1 to 1001. Simplify.
- (isearch-lazy-highlight-update): Change lazy overlay priority
- from 0 to 1000.
-
- * replace.el (replace-highlight): Change overlay priority from
- 1 to 1001.
-
- * textmodes/ispell.el (ispell-highlight-spelling-error-overlay):
- Change overlay priority from 1 to 1001. Reuse existing overlay.
-
- * compare-w.el (compare-windows-highlight): Change overlay
- priority from 1 to 1000.
-
- * menu-bar.el (menu-bar-edit-menu): Add listp around
- pending-undo-list to disable menu item "undo" when pending
- undo list is empty.
-
- * locate.el (locate): Disable undo in *Locate* buffer.
-
-2005-12-09 Kim F. Storm <storm@cua.dk>
-
- * mail/smtpmail.el (smtpmail-via-smtp): Disable undo in SMTP buffer.
-
-2005-12-09 David Ponce <david@dponce.com>
-
- * recentf.el: Improvement of the menu code.
- (recentf-enabled-p): Move before first use. Use `kill-emacs-hook'
- instead of menu hook.
- (recentf-show-menu, recentf-hide-menu): New functions.
- (recentf-menu-customization-changed, recentf-mode): Use them.
- (recentf-menu-action, recentf-max-menu-items)
- (recentf-menu-open-all-flag, recentf-menu-append-commands-flag)
- (recentf-arrange-by-rule-others)
- (recentf-arrange-by-rules-min-items)
- (recentf-arrange-by-rule-subfilter): Don't use
- `recentf-menu-customization-changed'.
- (recentf-arrange-rules): Likewise. Accept functions to compute
- sub-menu titles.
- (recentf-menu-filter): Likewise. Doc fix.
- (recentf-menu-value-shortcut): Doc fix.
- (recentf-dump-variable): Quote atom value.
- (recentf-make-menu-items): Update to use it as a menu filter.
- (recentf-match-rule): New function.
- (recentf-arrange-by-rule): Use it.
- (recentf-indirect-mode-rule): New function.
- (recentf-build-mode-rules): Use it.
- (recentf-dir-rule): New function.
- (recentf-arrange-by-dir): Use it.
- (recentf-filter-changer-current): Rename from
- `recentf-filter-changer-state'. All references updated.
- (recentf-filter-changer-alist): Update filter names.
- (recentf-filter-changer-select): New function.
- (recentf-filter-changer): Use it. Make a sub-menu from filters
- available in `recentf-filter-changer-alist'.
- (recentf-data-cache, recentf-clear-data)
- (recentf-update-menu): Remove. All references updated.
- (recentf-match-rule-p, recentf-build-dir-rules)
- (recentf-filter-changer-goto-next)
- (recentf-filter-changer-get-current)
- (recentf-filter-changer-get-next): Remove.
-
-2005-12-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (custom-buffer-create-internal): Relabel the whole
- buffer "Reset" button to "Reset to Current" for consistency with
- the State buttons.
-
-2005-12-08 John Paul Wallington <jpw@pobox.com>
-
- * ibuf-ext.el (define-ibuffer-filter filename):
- If `dired-directory' is a list then really use its car.
-
-2005-12-08 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-rect.el (cua--rectangle-aux-replace):
- Fix indention of text on right side of replaced rectangle.
-
-2005-12-09 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-buttons, gud-tooltip-tips):
- No need to check gud-comint-buffer is bound.
- (gdb): Prevent multiple debugging when first session uses gdba.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- CC Mode update to 5.31.
-
- * progmodes/cc-subword.el: Add a dummy `c-subword-mode' for
- Emacsen which lack `define-minor-mode'. (Currently Emacs <21.
- We might do this function properly in the future).
-
- * progmodes/cc-cmds.el, cc-defs.el, cc-styles.el, cc-vars.el:
- New macros c-sentence-end and c-default-value-sentence end, to cope
- with Emacs 22's new function `sentence-end'.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el (c-show-syntactic-information): Solve the
- compat issue using `c-put-overlay' and `c-delete-overlay'.
-
- * progmodes/cc-defs.el (c-put-overlay, c-delete-overlay):
- New compat macros to handle overlays/extents.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fix.el: Add definitions of the macros push and pop
- (for GNU Emacs 20.4).
-
- * progmodes/cc-defs.el
- (i): Load cc-fix.elc for `push' and `pop' (for GNU Emacs 20.4).
-
- * progmodes/cc-cmds.el (c-show-syntactic-information): Change the
- highlighting mechanism so it will work in XEmacs too.
-
- * progmodes/cc-defs.el: Insert c-int-to-char.
-
- * progmodes/cc-langs.el (c-nonsymbol-token-char-list): Insert a
- call to the new macro c-int-to-char. This solves XEmacs's
- regarding characters as different from integers.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fonts.el (c-make-syntactic-matcher):
- New internal helper.
-
- (c-cpp-matchers, c-basic-matchers-before): Use the `eval'
- construct to make the indirect face lookup work in XEmacs.
-
- (c-cpp-matchers): Append the negation char face to the existing
- fontification, so that the cpp face doesn't disappear.
- Use `c-make-syntactic-matcher' to avoid negation chars in comments
- and strings.
-
- * progmodes/cc-fonts.el (c-negation-char-face-name): New variable
- to map to `font-lock-negation-char-face' in emacsen where it exists.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-mode.el: Bind c-subword-mode to C-c C-w.
-
- * progmodes/cc-subword.el, cc-cmds.el, cc-mode.el:
- Rename "c-subword-move-mode" as "c-subword-mode".
-
- * progmodes/cc-mode.el: Added tty suitable bindings for C-c
- <delete> and C-c C-<delete>. (To the c-hungry- delete functions).
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-mode.el: Added autoload directive for
- `c-subword-move-mode' for use in older emacsen.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-mode.el:
- (i): Insert a binding for C-c C-backspace into
- c-bind-special-erase-keys which works in TTYs.
- (ii): Make sure that when file styles are used, any explicitly
- given style variables take priority over those in the style.
- Do this by calling `hack-local-variables' a second time.
-
- * progmodes/cc-vars.el: Add language specific customization
- widgets for AWK to c-doc-comment-style, c-require-final-newline
- and c-default-style. Add a defcustom for awk-mode-hook.
- Give c-syntactic-element and c-syntactic-context doc-strings by
- directly setting their `variable-documentation' propery.
- This allows Emacs 22.1 to read these with C-h v.
-
- * progmodes/cc-awk.el: Apply a tidy-up patch (from Stefan Monnier).
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fonts.el, cc-vars.el
- (gtkdoc-font-lock-doc-comments, gtkdoc-font-lock-doc-protection)
- (gtkdoc-font-lock-keywords): GtkDoc patterns contributed by
- Masatake YAMATO.
-
- (c-doc-comment-style): Made GtkDoc default in C mode.
-
- * progmodes/cc-mode.el: Fixed key bindings for C-c C-<backspace>
- and C-c C-<delete>.
-
- (c-bind-special-erase-keys): New function for use on
- `normal-erase-is-backspace-hook' to bind C-c C-<delete> correctly.
-
- * progmodes/cc-cmds.el (c-hungry-delete): New function to fix
- <delete> key behavior in XEmacs according to `delete-forward-p'.
- C.f. `c-electric-delete'.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-mode.el: Give c-hungry-backspace and
- c-hungry-delete-forward permanent key bindings.
-
- * progmodes/cc-cmds.el (c-electric-semi&comma):
- Bind c-syntactic-context for calls to "criteria functions", for
- consistency with other calls to user functions.
-
- * progmodes/cc-cmds.el (c-indent-command): Expunge use of
- `current-prefix-arg', since this might be the prefix arg to a
- command which calls c-indent-command as a function. Change the
- interactive spec from "p" to "P".
-
- * progmodes/cc-styles.el: Amend the doc-string of c-set-style, in
- reponse to a report from Joseph Kiniry <kiniry@acm.org> that it
- was difficult to understand.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-engine.el (c-on-identifier): Fix bug when at the
- first char of an identifier.
-
- * progmodes/cc-engine.el (c-on-identifier): Handle the "operator
- +" syntax in C++.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el (c-mask-paragraph): Correct, so that
- auto-fill doesn't split a c-comment's last word from a hanging
- "*/" when a space is typed between them after fill-column.
-
- * progmodes/cc-defs.el: New macro c-delete-and-extract-region.
-
- * progmodes/cc-styles.el (c-set-style)
- (c-setup-paragraph-variables): Abort the command if we're not in a
- CC Mode buffer.
-
- * progmodes/cc-align.el (c-lineup-C-comments): Correct indentation
- with blank comment-prefix, and a blank line as the comment's
- second line.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fonts.el (c-cpp-matchers, c-basic-matchers-before):
- Incorporate the patterns added in the Emacs development branch
- for the new Emacs 22 face `font-lock-negation-char-face'.
-
- * progmodes/cc-fonts.el (c-invalid-face-name): Use "red1" instead
- of "red" since it stands out better in xterms and DOS terminals.
-
- * progmodes/cc-engine.el (c-literal-faces):
- Add `font-lock-comment-delimiter-face' which is new in Emacs 22.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el: Make C-c C-a (`c-toggle-auto-newline')
- forcibly enable c-electric-flag.
-
- * progmodes/cc-vars.el, cc-cmds.el: New clean-up
- `comment-close-slash' on c-electric-slash: if enabled, typing `/' just
- after the comment-prefix of a C-style comment will close that comment.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fonts.el (c-basic-matchers-before)
- (c-complex-decl-matchers): Fix the "not-arrow-prefix" regexp used
- in Pike.
-
- * progmodes/cc-langs.el (c-other-op-syntax-tokens): Only C++ has
- digraphs.
-
- * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el
- (c-cpp-message-directives, c-cpp-include-directives)
- (c-opt-cpp-macro-define, c-opt-cpp-macro-define-start)
- (c-cpp-expr-directives): Introduce new language constants to
- control cpp syntax in a cleaner way.
-
- (c-cpp-expr-functions): Rename from c-cpp-defined-fns.
-
- (c-cpp-matchers, c-forward-to-cpp-define-body): Use them.
-
- * progmodes/cc-langs.el, cc-fonts.el (c-string-escaped-newlines)
- (c-multiline-string-start-char): New language constants and
- variables to specify how newlines in string literals work.
-
- (c-font-lock-invalid-string): Use them.
-
- * progmodes/cc-cmds.el (c-try-one-liner): Robustness fix if an
- unbalanced close brace is entered. Optimization by avoiding going
- back over arbitrarily large blocks. Removed hints that this
- function only would be relevant/useful in AWK.
-
- (c-electric-brace): Indent syntactically after the cleanups since
- lineup functions might do it differently then.
-
- * progmodes/cc-engine.el, cc-langs.el
- (c-opt-op-identifier-prefix): New language constant and variable.
-
- (c-just-after-func-arglist-p, c-after-special-operator-id)
- (c-search-decl-header-end, c-inside-bracelist-p): Use it.
-
- * progmodes/cc-align.el, cc-engine.el
- (c-after-special-operator-id): New helper to handle C++ operator
- identifiers.
-
- (c-lineup-topmost-intro-cont, c-just-after-func-arglist-p)
- (c-guess-basic-syntax): Handle C++ operator identifiers in
- declarations.
-
- * progmodes/cc-langs.el (c-assignment-operators): Add the
- trigraph version of ^= too.
-
- * progmodes/cc-langs.el (c-assignment-operators): Add the
- trigraph version of |= in C++.
-
- * progmodes/cc-fonts.el (c-font-lock-declarators):
- Handle `c-decl-hangon-kwds' after the identifier name.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): When deciding
- whether an arglist is "nonempty", ignore a comment after the open
- paren if it isn't followed by a non-comment token on the same line.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Case 4:
- Enable heuristics below the point to cope with classes inside special
- brace lists in Pike.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el: Amend c-point-syntax to handle macros.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-guess.el (cc-guess-install): New function to
- install an already guessed style in another buffer.
-
- * progmodes/cc-defs.el (c-tentative-buffer-changes): No longer
- sets `inhibit-read-only' - `c-save-buffer-state' should be used
- anyway if the change always is undone.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- Implement togglable electricity:
-
- * progmodes/cc-defs.el: Enhance c-save-buffer-state's doc-string,
- saying when it should be used.
-
- * progmodes/cc-engine.el: Add the new buffer-local variable,
- c-electric-flag.
-
- * progmodes/cc-langs.el: Change the name of c-toggle-auto-state to
- c-toggle-auto-newline.
-
- * progmodes/cc-mode.el: Rename c-toggle-auto-state to
- c-toggle-auto-newline. Remove the binding for
- c-toggle-auto-hungry-state. Add the binding C-c C-l for the new
- c-toggle-electric-state.
-
- * progmodes/cc-vars.el: Make c-syntactic-indentation buffer local.
-
- * progmodes/cc-cmds.el: Add `c-bytecomp-defun's for
- c-\(forward\|backward\)-subword.
- (c-update-modeline): Add the new modeline flag `l' for
- `c-electric-flag'. Make the auto-newline flag `a' dependent on `l'.
- (c-toggle-auto-state): Rename it to `c-toggle-auto-newline'.
- Make the old name an alias of the new name.
- (c-toggle-electric-state): New function.
- (c-electric-\(pound\|brace\|slash\|star\|semi&comma\|colon\|lt-gt\|paren\|continued-statement\)):
- Adapt these functions to do electric things only when
- c-electric-flag is non-nil.
- (c-point-syntax, c-brace-newlines, c-try-oneliner): Extract these
- new functions from c-electric-brace.
- (c-point-syntax): Add a check for "virtual semicolons" in AWK
- mode, so that the tentative extra newline doesn't change the
- syntax of the following brace.
- (c-electric-brace): Restructure by extracting the above functions.
- Tidy up the coding somewhat.
- (c-electric-semi&comma, c-electric-colon, c-electric-paren):
- restructure a bit.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el (c-show-syntactic-information): Show the
- anchor position(s) using faces. Thanks to Masatake YAMATO for the idea.
-
- * progmodes/cc-mode.el, cc-cmds.el, cc-defs.el, cc-engine.el
- (c-submode-indicators): Change name from `c-auto-hungry-string'
- since it's now used to track another submode.
-
- (c-update-modeline): Convert to function and extended to check
- `c-subword-move-mode'.
-
- (c-forward-into-nomenclature, c-backward-into-nomenclature):
- Convert to compat aliases for `c-forward-subword' and
- `c-backward-subword'.
-
- * progmodes/cc-subword.el: New functions and minor mode to handle
- SillyCapsedStyleIndentifiers, contributed by Masatake YAMATO:
-
- (c-forward-subword, c-backward-subword, c-mark-subword)
- (c-kill-subword, c-backward-kill-subword, c-transpose-subwords)
- (c-capitalize-subword, c-downcase-subword, c-upcase-subword):
- Functions corresponding to the standard word handling functions.
-
- (c-subword-move-mode): Minor mode that replaces all the standard
- word handling functions with their subword equivalences.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-vars.el (c-cleanup-list): Insert a customization
- entry for one-liner-defun.
-
- * progmodes/cc-defs.el: Give c-tentative-buffer-changes its own
- name in its def-edebug-spec.
-
- * progmodes/cc-cmds.el (c-electric-brace): Make the
- one-liner-defun clean-up work with empty-defun-braces. o-l-d now
- compacts space before a comment, if this will make things fit on
- one line.
-
- Introduce an "awk" style, mainly for auto-newline and clean-ups.
-
- * progmodes/cc-align.el: New function c-snug-1line-defun-close.
-
- * progmodes/cc-cmds.el: In c-electric-brace, add code for new
- clean-up one-liner-defun.
-
- * progmodes/cc-styles.el: Add the new "awk" style.
-
- * progmodes/cc-vars.el: Add description of one-liner-defun to
- c-cleanup-list's doc-string. New user options,
- c-max-one-liner-length. In c-default-style, set the default style
- for AWK to "awk".
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-engine.el (c-forward-label): Fix fontification of
- macros inside labels.
-
- * progmodes/cc-engine.el (c-looking-at-bos): Obsolete in favor of
- `c-at-statement-start-p' and `c-at-expression-start-p'.
-
- * progmodes/cc-defs.el (c-tnt-chng-record-state): Don't signal an
- error if the mark isn't set.
-
- * progmodes/cc-engine.el (c-guess-continued-construct)
- (c-guess-basic-syntax): Use `c-forward-decl-or-cast-1' to more
- accurately detect functions inside functions.
-
- * progmodes/cc-engine.el (c-at-expression-start-p): New function
- like `c-at-statement-start-p' that additionally recognizes commas
- and expression parentheses as delimiters.
-
- * progmodes/cc-engine.el (c-looking-at-inexpr-block): Add flag
- to avoid heuristics that doesn't work for unclosed blocks.
- (c-at-statement-start-p): New function.
-
- * progmodes/cc-engine.el, cc-fonts.el: Fixes in handling of
- Objective-C directives, e.g. directives spanning lines should work
- reasonably well now.
-
- (c-put-c-type-property, c-clear-c-type-property): New helpers.
-
- (c-forward-objc-directive): New function to move over any ObjC
- directive.
-
- (c-just-after-func-arglist-p, c-guess-basic-syntax)
- (c-basic-matchers-before): Use it.
-
- (c-font-lock-objc-iip-decl): Remove.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Some improvement
- in the template arglist recognition.
-
- * progmodes/cc-styles.el (c-style-alist): Fix several
- inconsistencies in the Whitesmith style.
-
- * progmodes/cc-align.el (c-lineup-after-whitesmith-blocks):
- New lineup function to get lines after Whitesmith style blocks
- correctly indented.
-
- (c-lineup-whitesmith-in-block): Back out the compensation for
- opening parens since it's done using `add' lists in the style
- definition instead. Don't use the anchor position since it varies
- too much between the syntactic symbols. :P
-
- * progmodes/cc-vars.el (c-valid-offset): Update.
-
- * progmodes/cc-engine.el (c-evaluate-offset): Extend to handle
- lists where the offsets are combined according to several
- different methods: `first', `min', `max', and `add'.
- Report offset evaluation errors with `c-benign-error' so that some kind
- of reindentation still is done.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax):
- Anchor `arglist-intro' the same way as `arglist-cont-nonempty' and
- `arglist-close'.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Fix similar
- situations for `arglist-cont-nonempty' and `arglist-close'.
-
- * progmodes/cc-langs.el (c-opt-identifier-concat-key-depth): New const.
-
- * progmodes/cc-defs.el: Use `cc-bytecomp-fboundp' and
- cc-bytecomp-boundp' in a number of places.
-
- * progmodes/cc-engine.el (c-beginning-of-statement-1): Fix a
- macro related issue.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-awk.el: Change the terminology of regexps: A char
- list is now [asdf], a char class [:alpha:].
- Include code for char classes.
- Set c-awk-NL-prop on lines ending in open strings. (Bug fix.)
- Add character classes (e.g. "[:alpha:]") into AWK Mode's regexps.
-
- Remove (nearly all of) the cruft associated with AWK Mode's former
- concept of "virtual semicolons":
-
- Adapt c-beginning-of-statement, c-end-of-statement (together with
- subfunctions) to use the new notion of "virtual semicolon" in
- place of the old awkward special handling for AWK. There remains
- much cruft in cc-awk.el, cc-cmds.el and cc-engine.el to clear out.
- * progmodes/cc-cmds.el:
- (c-ascertain-adjacent-literal): In the backwards direction, now
- recognises AWK regexp delimiters as string delimiters.
- (c-after-statement-terminator-p): Adapt for virtual semicolons;
- check more rigorously for "end of macro".
- (c-back-over-illiterals, c-forward-over-illiterals): Adapt for
- virtual semicolons;
- (c-beginning-of-statement): Adapt for virtual semicolons; Separate
- out the code for forward movement into ...
- (c-end-of-statement): Now contains the code for forward movement,
- adapted for virtual semicolons.
-
- * progmodes/cc-engine.el:
- (c-ws*-string-limit-regexp): New regexp.
- (c-forward-single-comment, c-backward-single-comment): Comment out
- the (now redundant) "special" AWK stuff.
-
- * progmodes/cc-styles.el, cc-vars.el: Change the settings of
- c-string-par-start, c-string-par-separate to be more like Text
- Mode than Fundamental Mode.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fonts.el (c-font-lock-declarations): Always narrow
- to the fontified region so that fontification doesn't occur
- outside it (could happen e.g. when fontifying a line with an
- unfinished declaration).
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-awk.el: Move regexps for analysing AWK code to near the
- start of the file. ^L now separate sections of the file.
- (c-awk-non-eol-esc-pair-re, c-awk-blank-or-comment-line-re)
- (c-awk-one-line-possibly-open-string-re)
- (c-awk-regexp-one-line-possibly-open-char-class-re)
- (c-awk-one-line-possibly-open-regexp-re)
- (c-awk-one-line-non-syn-ws*-re): New defonsts.
- (c-awk-at-vsemi-p, c-awk-vsemi-status-unknown-p): New functions.
-
- Amend the concept of "virtual semicolons" (in the indentation
- engine) for languages like AWK, such that they are now
- conceptually attached to end of the last token of a statement, not
- the end of the line. (In AWK Mode, however, the pertinent text
- property is still physically set on the EOL.) Remove the specific
- tests for awk-mode, thus facilitating the introduction of other
- language modes where EOLs can end statements.
- (Note: The funtionality in cc-cmds.el, specifically
- c-beginning/end-of-statement has yet to be amended.)
-
- * progmodes/cc-defs.el (c-at-vsemi-p, c-vsemi-status-unknown-p):
- New macros.
-
- * progmodes/cc-langs.el: Added `#' into AWK Mode's value of
- c-stmt-delim-chars. New c-lang-defvars: c-at-vsemi-p-fn,
- c-vsemi-status-unknown-p-fn (in a new page).
-
- * progmodes/cc-engine.el: In c-beginning-of-statement-1,
- c-crosses-statement-barrier-p, c-guess-basic-syntax, replace
- numerous awkward forms like
- (if (c-major-mode-is 'awk-mode) (c-awk-prev-line-incomplete-p))
- with (c-at-vsemi-p). Fix a few typos. In c-guess-basic-syntax, new
- variable before-ws-ip, the place just after char-before-ip appears.
-
- * progmodes/cc-mode.el: Fix what's almost a semantic ambiguity in
- a comment.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el (c-electric-brace): Clean up using
- `c-tentative-buffer-changes'.
-
- * progmodes/cc-defs.el (c-region-is-active-p): Simplify and
- convert to macro to choose between Emacs and XEmacs at compile time.
-
- (c-set-region-active): New set counterpart to `c-region-is-active-p'.
-
- (c-tentative-buffer-changes): New macro to handle temporary buffer
- changes in a convenient way.
-
- (c-tnt-chng-record-state, c-tnt-chng-cleanup): Internal helpers
- for `c-tentative-buffer-changes'.
-
- * progmodes/cc-engine.el (c-looking-at-inexpr-block): Tighten up
- the checks for paren sexps between the point and the keyword, to
- avoid some false alarms.
-
- * progmodes/cc-engine.el, cc-langs.el (c-looking-at-inexpr-block):
- Fixed a situation where an error could be thrown for unbalanced
- parens. Changed to make use of c-keyword-member' to avoid some
- repeated regexp matches.
-
- (c-opt-lambda-key, c-opt-inexpr-block-key, c-opt-inexpr-class-key):
- These language variable are no longer necessary.
-
- (c-block-stmt-kwds): New language constant used by
- c-looking-at-inexpr-block'.
-
- (c-guess-basic-syntax): Remove an optional check that looked at
- the existence of the now removed language variables.
-
- * progmodes/cc-engine.el (c-fdoc-shift-type-backward)
- (c-forward-decl-or-cast-1): Fix invalid recognition of C++ style
- object instantiation expressions as declarations in some contexts.
- This bug only affected languages where the declarator can't be
- enclosed in parentheses.
-
- * progmodes/cc-styles.el (c-style-alist): Fix the GNU style to
- insert newlines before and after substatement braces.
-
- * progmodes/cc-engine.el: Improved the heuristics for recognizing
- function declaration headers and the handling of C++ style member
- init lists.
-
- (c-just-after-func-arglist-p): Rewritten to use
- `c-forward-decl-or-cast-1'. Now behaves a bit differently too.
-
- (c-beginning-of-member-init-list): Remove since it isn't used anymore.
-
- (c-guess-basic-syntax): Adapt case 5B for the new
- `c-just-after-func-arglist-p'. Merge cases 5B.1 and 5B.3.
- Remove cases 5D.1 and 5D.2 since they aren't trigged anymore (case 5B.1
- covers all cases now).
-
- * progmodes/cc-defs.el (c-point): Add `bosws' and `eosws'.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el, cc-styles.el, cc-vars.el: New variables
- c-string-par-start/separate c-sentence-end-with-esc-eol,
- initialised in c-setup-paragraph-variables, used in string
- scanning subroutines of c-beginning-of-statement.
-
- * progmodes/cc-cmds.el (c-electric-brace): Don't delete a comment
- which precedes the newly inserted `{'.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-engine.el, cc-langs.el: Rewrote the recognition
- function for declaration level blocks. It should now cope with
- templates better and also be a lot more comprehensible.
-
- (c-looking-at-decl-block): The new function.
-
- (c-search-uplist-for-classkey): The old one. It's now a wrapper
- for compatibility.
-
- (c-add-class-syntax, c-guess-continued-construct)
- (c-guess-basic-syntax): Adapt for `c-looking-at-decl-block'.
-
- (c-decl-block-key): Change to tell apart ambiguous and
- unambiguous keywords. Pike specials are now handled directly in
- the code instead.
-
- (c-block-prefix-disallowed-chars, c-block-prefix-charset):
- New language constants and variables to make the backward skip in
- `c-looking-at-decl-block' as tight as possible.
-
- (c-nonsymbol-token-char-list): New language constant.
-
- * progmodes/cc-engine.el (c-backward-<>-arglist): New function to
- find balanced template arglists backwards.
-
- * progmodes/cc-defs.el (c-make-bare-char-alt): New helper for
- making char classes for `c-syntactic-skip-backward'.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Simplify case
- 16D - can't be a class-close at that point.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax)
- (c-add-class-syntax): Don't narrow out the enclosing declaration
- level. This makes everything a lot easier, and it was actually
- only four small places that needed it to work. Some places that
- previously did `widen' are removed now, which has the effect that
- `c-guess-basic-syntax' never will look at things outside the
- current narrowment now. The anchor position for `topmost-intro'
- is affected by this, but it was so bogus it was basically useless
- before, and now it's equally bogus but in a slightly different way.
-
- (c-narrow-out-enclosing-class): Gone.
-
- (c-most-enclosing-brace, c-least-enclosing-brace): Don't filter to
- the narrowed region.
-
- (c-least-enclosing-brace): Remove silly optional argument.
-
- * progmodes/cc-engine.el (c-beginning-of-decl-1): Fix bug where
- the point could be left directly after an open paren when finding
- the beginning of the first decl in the block.
-
- * progmodes/cc-engine.el, cc-fonts.el (c-forward-keyword-clause):
- Specify which submatch to use.
-
- * progmodes/cc-langs.el (c-symbol-start): Include `@' in ObjC.
-
- (c-decl-start-re): No longer any need for special treatment of
- ObjC due to the above.
-
- (c-other-block-decl-kwds): Handle "extern" in ObjC too since it
- presumably follows C in that regard.
+ (org-columns, org-agenda-columns): New commands.
+ (org-get-columns-autowidth-alist): New functions.
+ (org-properties): New customize group.
+ (org-default-columns-format): New option.
+ (org-priority): Realign tags after changing priority.
+ (org-preserve-lc): New macro.
+ (org-update-checkbox-count): Catch case when there is no headline.
+ (org-agenda-quit): Remove any column overlays.
+ (org-beginning-of-item-list): Fixed bug when non-item line is
+ indented too deep.
+ (org-cached-props): New variable.
+ (org-cached-entry-get): New function.
+ (org-make-tags-matcher): Handle property matches.
+ (org-table-recalculate): Swap evaluation order: Field formula
+ first, then column formulas, but don't allow them to overwrite the
+ field formulas.
+ (org-table-eval-formula): New argument untouchable.
+ (org-table-put-field-property): New function.
- * progmodes/cc-langs.el (c-identifier-ops, c-after-id-concat-ops):
- New language constants to specify operator tokens inside
- identifiers in a more high level way.
-
- (c-opt-identifier-prefix-key): New internal language constant.
-
- (c-opt-identifier-concat-key, c-opt-after-id-concat-key)
- (c-identifier-start, c-identifier-key): Now completely calculated
- from other constants.
-
- (c-identifier-last-sym-match): Decommission since it's no longer used.
-
- (c-operators): Use `c-identifier-ops'. Document `postfix-if-paren'.
-
- * progmodes/cc-engine.el (c-forward-name): Remove the
- optimization when c-identifier-key is equal to c-symbol-key since
- it doesn't work in byte compiled files. Don't record empty
- regions as identifiers.
-
- * progmodes/cc-langs.el (c-filter-ops): New helper function to
- simplify access to `c-operators' and its likes.
-
- (c-operator-list, c-all-op-syntax-tokens)
- (c-nonsymbol-token-regexp, c-<>-multichar-token-regexp)
- (c-<-op-cont-regexp, c->-op-cont-regexp, c-expr-kwds)
- (c-primary-expr-regexp, c-cast-parens): Use it.
-
- * progmodes/cc-defs.el (c-lang-const): Fixes to allow use without
- an explicit language in functions.
-
- * progmodes/cc-defs.el (c-make-keywords-re): Add an appendable
- variant of adornment.
-
- * progmodes/cc-langs.el (c-any-class-key): Remove unused language
- variable.
-
- (c-type-decl-prefix-key): Remove some now unnecessary cruft from
- the Pike value.
-
- * progmodes/cc-engine.el (c-on-identifier)
- (c-simple-skip-symbol-backward): Small fix for handling "-"
- correctly in `skip-chars-backward'. Affected the operator lfun
- syntax in Pike.
-
- * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Disable the
- diagnostic message about precompiled language vars not being used.
-
- * progmodes/cc-langs.el (c-paren-nontype-kwds): The GCC keyword
- "__attribute__" is followed by a parenthesis.
-
- (c-type-start-kwds, c-prefix-spec-kwds, c-prefix-spec-kwds-re)
- (c-specifier-key, c-not-decl-init-keywords): Some cleanup using new
- language constants `c-type-start-kwds' and `c-prefix-spec-kwds'.
-
- * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el:
- Internal cleanups to properly detect the declared identifiers in
- various declarations.
-
- (c-decl-start-kwds): New language constant to recognize
- declarations that can start anywhere. Used for class declarations
- in Pike.
-
- (c-specifier-key, c-not-decl-init-keywords)
- (c-decl-prefix-or-start-re, c-find-decl-prefix-search)
- (c-find-decl-spots): Implement `c-decl-start-kwds'.
-
- (c-other-decl-kwds, c-postfix-decl-spec-kwds, c-decl-hangon-kwds)
- (c-decl-hangon-key, c-forward-decl-or-cast-1): Separate the
- handling of the compiler specific extension keywords into a new
- language constant `c-decl-hangon-kwds' that defines keyword
- clauses to be ignored in declarations.
-
- (c-forward-id-comma-list, c-forward-keyword-clause): Don't skip
- past unrecognized tokens when handling `c-colon-type-list-kwds'.
- Necessary to stop at the declared identifier in e.g. IDL valuetype
- declarations.
-
- (c-typedef-decl-kwds, c-typeless-decl-kwds, c-type-list-kwds)
- (c-prefix-spec-kwds-re, c-postfix-spec-kwds)
- (c-after-suffixed-type-decl-key, c-opt-postfix-decl-spec-key)
- (c-forward-decl-or-cast-1): Recognize the declared identifier in
- class and enum declarations as such and not as part of the type.
-
- (c-forward-decl-or-cast-1, c-forward-label): Relax the
- interpretation of PRECEDING-TOKEN-END when there's no preceding token.
-
- (c-forward-decl-or-cast-1): Don't disregard sure signs of
- declarations when there's some syntax error later on.
-
- (c-complex-decl-matchers): Did away with a reference to
- `c-specifier-key'.
-
- * progmodes/cc-engine.el (c-maybe-labelp): Provide no default
- value - this variable is always dynamically bound.
-
- * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el, cc-menus.el
- * cc-mode.el, cc-styles.el, cc-vars.el, cc-align.el, cc-awk.el
- * cc-cmds.el, cc-defs.el: Change the policy for marking up
- functions that might do hidden buffer changes: All such internal
- functions are now marked instead of those that don't.
-
- (c-beginning-of-macro, c-end-of-macro, c-(forward|backward)-comments)
- (c-(forward|backward)-single-comment, c-parse-state, c-on-identifier)
- (c-(fast-|slow-|)in-literal, c-literal-limits, c-collect-line-comments)
- (c-literal-type): Allow these functions to make hidden buffer changes,
- so that they are free to use text property caching later on.
-
- (c-electric-backspace, c-electric-delete-forward, c-electric-pound)
- (c-electric-brace, c-electric-slash, c-electric-star)
- (c-electric-semi&comma, c-electric-colon, c-electric-lt-gt)
- (c-electric-paren, c-electric-continued-statement, c-indent-command)
- (c-indent-region, c-mask-paragraph, c-indent-new-comment-line)
- (c-context-line-break): Add `c-save-buffer-state' calls to comply
- with the changed semantics of the functions above.
-
- * progmodes/cc-engine.el (c-beginning-of-statement-1): Fix a bug
- when macros occur in obscure places. Optimized the sexp movement
- a bit.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- Enhancements for c-beginning-of-statement to work in AWK Mode:
-
- * progmodes/cc-awk.el: Supersede c-awk-NL-prop value `;'
- (completed statement) with `}' (statement completed by closing
- brace or semicolon) and `$' (statement completed by EOL).
-
- (c-awk-virtual-semicolon-ends-prev-line-p)
- (c-awk-virtual-semicolon-ends-line-p)
- (c-awk-skip-semantic-ws-forward, c-awk-skip-semantic-ws-backward)
- (c-awk-at-statement-end-p): New functions.
-
- * progmodes/cc-cmds.el: Simplify the structure of functions
- c-forward-over-illiterals, c-back-over-illiterals. Enhance these
- two functions and c-beginning-of-statement to handle AWK Mode.
-
- * progmodes/cc-engine.el: Enhance c-forward-single-comment,
- c-backward-single-comment for AWK mode. Attempt to clarify their
- doc-strings.
-
- * progmodes/cc-mode.el: Put M-a and M-e into awk-mode-map.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el: Cleaned up the
- label handling. Labels are now recognized in a uniform and more
- robust way, regardless of context. Text properties are put on all
- labels to recognize the following declarations better.
- Multiword labels are handled both in indentation and fontification for
- the benefit of language extensions like Qt. For consistency, keywords
- in labels are now fontified with the label face instead.
- That also applies to "case" and "default".
-
- (c-beginning-of-statement-1): Fix some bugs in the label
- handling. Disregard `c-nonlabel-token-key' in labels that begin
- with `c-label-kwds'.
-
- (c-find-decl-spots): Support that the callback adds more
- `c-decl-end' spots to find.
-
- (c-forward-decl-or-cast-1): Don't treat a list of plain
- identifiers followed by a colon as a declaration.
-
- (c-forward-label): New function to recognize labels.
-
- (c-guess-basic-syntax): Replace uses of `c-label-key' with
- `c-forward-label'. Moved the label recognition cases (14 and 15)
- earlier since they aren't so context sensitive now. Handle labels
- on the top level gracefully. Moved access label recognition to
- the generic label case (CASE 15) - removed CASE 5E.
-
- (c-font-lock-declarations): Add recognition of labels in the
- same round since we need to handle labels in parallell with other
- declarations to recognize both accurately. It should also improve
- speed.
-
- (c-simple-decl-matchers, c-basic-matchers-after):
- Move `c-font-lock-labels' so that it only is used on decoration level 2
- since `c-font-lock-declarations' handles it otherwise.
-
- (c-complex-decl-matchers): Remove the simplistic recognition of
- access labels.
-
- (c-decl-prefix-re): Remove the kludges that was necessary to cope
- with labels earlier.
-
- (c-decl-start-re): New language variable to make
- `c-font-lock-declarations' stop for the special protection labels
- in Objective-C that start with `@'.
-
- (c-label-key): Remove since it's no longer used.
-
- (c-recognize-colon-labels, c-label-prefix-re): New language
- constants to support recognition of generic colon-terminated labels.
-
- (c-type-decl-end-used): `c-decl-end' is now used whenever there
- are colon terminated labels.
-
- * progmodes/cc-align.el (c-lineup-arglist): Fix bug when the
- first argument starts with a special brace list.
-
- * progmodes/cc-engine.el, cc-fonts.el (c-forward-decl-or-cast-1)
- (c-font-lock-declarations): Break out the declaration and cast
- recognition from `c-font-lock-declarations' to a new function, so
- that it can be used in the indentation engine.
-
- * progmodes/cc-engine.el (c-find-decl-spots): Fix bug in backing
- up to the start of the literal. Fixed bug with the point on the
- wrong side of the search limit that could happen when the start
- position is inside a literal.
-
- * progmodes/cc-engine.el (c-parse-state)
- (c-invalidate-state-cache): Modify the use of `c-state-cache-end'
- so that it's kept a little bit back to increase the hit rate.
-
- (c-parse-state): Change the macro handling and fixed some
- glitches. Macro context is checked more often than necessary now,
- but otoh less garbage conses are generated.
-
- * progmodes/cc-engine.el (c-parse-state)
- (c-invalidate-state-cache): Cache the last position where
- `c-state-cache' applies. This can speed up refontification quite
- a bit in blocks where there are many non-brace parens before the point.
-
- (c-state-cache-end): New variable for this.
-
- (c-guess-basic-syntax, c-debug-parse-state): Adapt for the new
- cache variable.
-
- * progmodes/cc-engine.el (c-find-decl-spots): Take more care to
- get close initial continue positions when the start position is
- inside a literal or macro. Do not call the callback for spots
- before the start position (which can happen e.g. for `c-decl-end'
- spots inside comments). Optimize better in special cases when the
- region is a single line inside a literal or macro (typically when
- the current line is refontified).
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Simplify calls
- to `c-add-stmt-syntax' - there's no need to explicitly whack off
- entries from the paren state.
-
- * progmodes/cc-engine.el (c-add-stmt-syntax): Narrow down the
- special case for "else if" clauses.
-
- * progmodes/cc-engine.el (c-looking-at-inexpr-block)
- (c-add-stmt-syntax): Use `c-recognize-paren-inexpr-blocks'.
-
- * progmodes/cc-langs.el (c-recognize-paren-inexpr-blocks):
- New language variable to recognize the gcc extension with statement
- blocks inside expressions.
-
- * progmodes/cc-engine.el (c-add-stmt-syntax): Restructure to make
- it somewhat more comprehensible. The argument AT-BLOCK-START is
- no longer used and hence removed.
-
- (c-guess-continued-construct, c-guess-basic-syntax): Update calls
- to `c-add-stmt-syntax'.
-
- * progmodes/cc-engine.el (c-backward-to-decl-anchor):
- Use `c-beginning-of-statement-1' instead of duplicating parts of it.
- This fixes bogus label recognition.
-
- * progmodes/cc-engine.el (c-add-type, c-check-type)
- (c-forward-name, c-forward-type): Improve storage of template
- types in `c-found-types' so that they can be recognized better.
-
- (c-syntactic-content): Add option to skip past nested parens.
-
- * progmodes/cc-engine.el (c-forward-name):
- Set `c-last-identifier-range' all the time. It's less work that way.
- Handle that there might not be an identifier to store in
- `c-last-identifier-range'.
-
- (c-forward-type): Handle that `c-last-identifier-range' might be
- nil from `c-forward-name'.
-
- * progmodes/cc-defs.el (c-safe-scan-lists)
- (c-(go-)?(up|down)-list-(forward|backward)): Add limit arguments.
-
- * progmodes/cc-defs.el (c-save-buffer-state): Use `unwind-protect'
- to work even if the form fails.
-
- * progmodes/cc-engine.el (c-parse-state): Speedup when moving far
- down in a large file in one go.
-
- (c-get-fallback-start-pos): New helper function for `c-parse-state'.
-
- * progmodes/cc-align.el (c-lineup-assignments): New lineup
- function which is like `c-lineup-math' but returns nil instead of
- `c-basic-offset' when it doesn't match.
-
- (c-lineup-math): Change to use `c-lineup-assignments'.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el: Fix some bugs in subfunctions of
- c-beginning-of-statement. New subfunctions
- c-in-comment-line-prefix-p, c-narrow-to-comment-innards.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-fonts.el, cc-langs.el: Use `c-simple-ws' instead of
- hardcoded char classes whereever possible. Changed a couple of
- places to use skip by syntax instead of skip by char class.
-
- * progmodes/cc-langs.el (c-unterminated-block-comment-regexp):
- Fix a bug in the regexp that caused extreme backtracking.
-
- * progmodes/cc-langs.el (c-block-comment-starter)
- (c-block-comment-ender): New language constants to specify in a
- single place how block comments look.
-
- (c-comment-start-regexp, c-block-comment-start-regexp)
- (comment-start, comment-end, comment-start-skip)
- (c-syntactic-ws-start, c-syntactic-ws-end, c-nonwhite-syntactic-ws)
- (c-syntactic-ws, c-nonempty-syntactic-ws)
- (c-single-line-syntactic-ws, c-syntactic-eol): Now built from
- `c-line-comment-starter', `c-block-comment-starter' and
- `c-block-comment-ender'.
-
- (c-block-comment-regexp, c-unterminated-block-comment-regexp):
- New language constants to break up things a bit.
-
- (c-simple-ws): New language constant for simple whitespace.
-
- * progmodes/cc-defs.el (c-concat-separated): New convenience function.
-
- * progmodes/cc-defs.el (c-make-keywords-re): Add kludge for bug
- in `regexp-opt' in Emacs 20 and XEmacs when strings contain
- newlines. Allow and ignore nil elements in the list.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el: Comment out a (n almost certainly
- superfluous) check, (eq here (point-max)) in c-beginning-of-statement.
-
- * progmodes/cc-cmds.el: Tidy up the comments in
- c-beginning-of-statement and subfunctions.
-
- * progmodes/cc-awk.el: Replace calls to put-text-property to the
- more flexible c-put-char-property and c-clear-char-properties.
- Add the author's email address.
-
- * progmodes/cc-langs.el (c-block-comment-start-regexp): New variable.
-
- * progmodes/cc-cmds.el: Fix bug with M-e, when point is inside the
- closing "*/" of a block comment.
-
- * progmodes/cc-cmds.el: Tidy c-beginning-of-sentence (and
- subfunctions) so that it works at BOB and EOB.
-
- * progmodes/cc-cmds.el, cc-vars.el: More updating of
- c-beginning-of-statement, including new variable
- c-block-comment-start-regexp.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-langs.el (c-known-type-key): Optimize simple
- symbols from `*-font-lock-extra-types' so that there's no need to
- use `regexp-opt' on those lists.
-
- * progmodes/cc-langs.el (c-type-decl-suffix-key): Fix when
- `c-type-modifier-kwds' is empty.
-
- * progmodes/cc-fonts.el (c-font-lock-invalid-string): Fix when
- there are several strings on the same line.
-
- * progmodes/cc-engine.el (c-literal-limits): Remove the
- compatibility function for older emacsen. `c-literal-limits-fast'
- has now taken the place of this function.
-
- * progmodes/cc-vars.el (c-emacs-features): Remove compatibility
- with older emacsen: We now require `pps-extended-state'.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el: New function c-beginning-of-sentence,
- which obviates the need to hack sentence-end. This now handles
- escaped newlines in strings correctly. Correct minor bugs in
- c-move-over-sentence and in c-beginning-of-statement.
-
- * progmodes/cc-cmds.el (c-beginning-of-statement (and
- subfunctions)): Adapt c-\(back\|forward\)-over-illiterals such
- that movement over macros and code are rigorously separated from
- eachother. Correct a few incidental bugs.
-
- * progmodes/cc-cmds.el: Restructure c-beginning-of-statement:
- Improve its doc-string. Improve the handling of certain specific cases.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el
- (c-guess-basic-syntax): Change the way class-level labels are
- recognized; they can now contain essentially any symbols.
-
- (c-opt-extra-label-key): New language variable to cope with the
- special protection label syntax in Objective-C.
-
- (c-opt-access-key): Remove; this is now handled better by
- `c-nonlabel-token-key' and `c-opt-extra-label-key'.
-
- (c-complex-decl-matchers): Update to handle that
- `c-opt-access-key' no longer exists.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Make use of the
- improved label recognition in `c-beginning-of-statement-1'.
-
- * progmodes/cc-engine.el (c-beginning-of-member-init-list):
- Recognize bitfields better.
-
- * progmodes/cc-engine.el (c-beginning-of-inheritance-list):
- Remove some cruft and fixed a bug that could cause it to go to a
- position further down.
-
- * progmodes/cc-langs.el, cc-engine.el
- (c-beginning-of-statement-1): Improve detection of labels in
- declaration contexts.
-
- (c-beginning-of-decl-1): Use it.
-
- (c-nonlabel-token-key): New language constant and variable needed
- by `c-beginning-of-statement-1'.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Fix bug that
- manifested itself due to the correction in `c-forward-sexp'.
-
- * progmodes/cc-defs.el (c-forward-sexp, c-backward-sexp):
- Make these behave as documented when used at the buffer limits.
-
- * progmodes/cc-mode.el, cc-engine.el, cc-langs.el
- (c-type-decl-end-used): Made this a language variable.
-
- * progmodes/cc-mode.el (c-after-change): Widen the buffer to work
- correctly when `combine-after-change-calls' is used together with
- temporary narrowings.
-
- * progmodes/cc-engine.el (c-beginning-of-statement-1):
- Report labels correctly when the start point is immediately after the
- colon.
-
- * progmodes/cc-defs.el (c-parse-sexp-lookup-properties):
- Remove since it isn't used anymore.
-
- * progmodes/cc-cmds.el (c-electric-lt-gt): Detect and mark angle
- bracket arglists such as template parens in C++.
-
- * progmodes/cc-engine.el (c-syntactic-skip-backward): Fix a bug
- in the last check-in. Some optimization.
-
- * progmodes/cc-engine.el (c-syntactic-skip-backward): Fix bug
- where it could stop at the same level in a preceding sexp when
- PAREN-LEVEL is set.
-
- * progmodes/cc-mode.el (c-basic-common-init): Turn on syntax-table
- text property lookup only when it's needed.
-
- * progmodes/cc-langs.el, cc-engine.el, cc-fonts.el, cc-mode.el:
- Change the policy for paren marked angle brackets to be more
- persistent; once marked they remain marked even when they're found
- to be unbalanced in the searched region. This should keep the
- paren syntax around even when individual lines are refontified in
- multiline template arglists.
-
- (c-parse-and-markup-<>-arglists): New dynamically bound variable
- to control markup so that incorrect angle bracket arglists aren't
- marked in contexts where the correct value for
- `c-disallow-comma-in-<>-arglists' isn't known.
-
- (c-forward-<>-arglist, c-forward-<>-arglist-recur): The reparse
- argument has become `c-parse-and-markup-<>-arglists'.
-
- (c-remove-<>-arglist-properties): Remove - no longer used.
-
- (c-after-change-check-<>-operators): New function used on
- `after-change-functions' to avoid that "<" and ">" characters that
- are part of longer operators have paren syntax.
-
- (c-<>-multichar-token-regexp): New language variable used by
- `c-after-change-check-<>-operators'.
-
- (c-after-change): Call `c-after-change-check-<>-operators'.
-
- (c-font-lock-<>-arglists): Use the context properties set by
- `c-font-lock-declarations' to set `c-disallow-comma-in-<>-arglists'
- correctly to avoid doing invalid markup.
-
- (c-font-lock-declarations): Remove code that undoes the invalid
- markup done by `c-font-lock-<>-arglists'.
-
- (c-complex-decl-matchers): `c-font-lock-<>-arglists' now runs
- after `c-font-lock-declarations'.
-
- * progmodes/cc-engine.el (c-syntactic-skip-backward):
- Add paren-level feature.
-
- (c-guess-basic-syntax): Improve the anchor position for
- `template-args-cont' in nested template arglists. There's still
- much to be desired in this area, though.
-
-2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- * progmodes/cc-cmds.el, cc-engine.el, cc-langs.el, cc-vars.el:
- Make the "Text Filling and Line Breaking" commands work for AWK buffers.
-
-2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- * progmodes/cc-defs.el, cc-engine.el (c-mode-is-new-awk-p):
- Removed; (c-major-mode-is 'awk-mode) can be used instead now.
-
- * progmodes/cc-mode.el: Always set up AWK mode since emacsen where
- it doesn't work no longer are supported.
-
- * progmodes/cc-mode.el, cc-styles.el, cc-vars.el, cc-defs.el
- * cc-engine.el, cc-fonts.el, cc-langs.el, cc-cmds.el: CC Mode now
- requires support for the syntax-table' text property, which rules
- out Emacs 19 and XEmacs < 21.4. Removed various compatibility
- cruft associated with those versions.
-
- * progmodes/cc-defs.el, cc-fix.el: CC Mode now requires support
- for the `syntax-table' text property, which rules out Emacs 19 and
- XEmacs < 21.4. Removed various compatibility cruft associated
- with those versions.
-
- * progmodes/cc-vars.el (c-emacs-features): CC Mode now requires
- support for the `syntax-table' text property.
-
- * progmodes/cc-fonts.el (c-nonbreakable-space-face): Remove the
- variable and use an extra quoted face name instead. All the
- emacsen flavors handle that correctly.
-
- * progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare)
- (c-font-lock-declarators, c-font-lock-declarations)
- (c-complex-decl-matchers, c-basic-matchers-after): Use a text
- property to mark the items in in declarator lists to handle
- refontification inside multiline declarations better.
-
- * progmodes/cc-fonts.el (c-font-lock-declarations): Recognize a
- construct like "a * b = c;" as a declaration.
-
-2005-12-08 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-use-hyper-key): Replace by ...
- (cua-rectangle-modifier-key): ... this. New defcustom. Can now
- select either meta, hyper, or super modifier for rectangle commands.
- (cua--rectangle-modifier-key): New defvar.
- (cua--M/H-key): Use it. Remove special case for `space'.
- (cua--init-keymaps): Initialize it from cua-rectangle-modifier-key
- on X, to meta otherwise. Always bind C-return to toggle
- rectangle. Pass ?\s instead of `space' to cua--M/H-key.
-
- * emulation/cua-rect.el (cua-help-for-rectangle):
- Use cua--rectangle-modifier-key. Handle super modifier too.
- (cua--init-rectangles): Always bind C-return to toggle rectangle.
- Pass ?\s instead of `space' to cua--M/H-key and cua--rect-M/H-key.
-
- * ido.el: Move Acknowledgements and History after Commentary.
- Minor changes to Commentary.
-
- * emulation/cua-base.el (cua--select-keymaps): Enable repeat
- keymap if cua--prefix-override-timer is `shift'.
- (cua--shift-control-prefix): New function; emulate "type prefix
- key twice" functionality to handle shifted prefix key override.
- (cua--shift-control-c-prefix, cua--shift-control-x-prefix):
- New commands.
- (cua--init-keymaps): Bind them to S-C-c and S-C-x.
-
-2005-12-08 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-insert-heading): Try to do items before
- headings.
- (org-agenda-mode): Quote `org-agenda-mode-hook'.
- (org-insert-item): New function.
- (org-renumber-ordered-list): Don't skip to higher level lists.
-
-2005-12-08 Juri Linkov <juri@jurta.org>
-
- * info.el (Info-mode-map): Bind M-TAB to `Info-prev-reference'.
-
- * button.el (button-buffer-map): Bind M-TAB to `backward-button'.
-
- * wid-edit.el (widget-keymap): Bind M-TAB to `widget-backward'.
-
- * pcvs.el (defun-cvs-mode): Put `definition-name' property on
- the constructed function name fun-1.
-
- * cus-edit.el (custom-add-parent-links): Filter out custom-group-link,
- because such links don't lead to parent documentation.
-
-2005-12-08 Kenichi Handa <handa@m17n.org>
-
- * descr-text.el (describe-char): Use *Help-2* buffer if the
- current buffer is *Help*. Call describe-text-properties while
- setting the original buffer.
-
-2005-12-07 Bill Wohler <wohler@newt.com>
-
- * files.el (auto-mode-alist): Remove mh-letter-mode. Unnecessary,
- and causes problems with non-MH users (such as Gnus users).
-
-2005-12-08 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-find-file-unhook): Delete variable.
- (gdb-set-gud-minor-mode, gdb-set-gud-minor-mode): Delete functions.
- (gdb-set-gud-minor-mode-existing-buffers, gdb-init-2): Use GDB
- command "info sources". Move calls to GDB command "list".
- (gdb-find-file-hook): Just use gdb-source-file-list.
- (gdb-source-file-regexp): Use regexp for pre-GDB 6.4.
- (gdb-source-file-regexp-1): New regexp for GDB 6.4+ only.
- (gdb-set-gud-minor-mode-existing-buffers-1): Use it.
- (gdb-data-list-register-values-handler): Use correct trigger name.
-
-2005-12-07 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-completion-map): Rename from ido-mode-map.
- (ido-common-completion-map, ido-file-completion-map)
- (ido-file-dir-completion-map, ido-buffer-completion-map):
- Rename from ido-mode-....-map.
- (ido-init-completion-maps): Rename from ido-init-mode-maps.
- (ido-setup-completion-map): Rename from ido-define-mode-map.
- (ido-read-internal): Bind minibuffer-local-filename-completion-map
- to ido-completion-map.
-
-2005-12-07 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el
- (set-display-table-and-terminal-coding-system): If the coding
- system specified in `unibyte-display' property is different from
- the arg coding-system, don't setup standard-display-table.
-
-2005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/edebug.el (edebug-skip-whitespace): read1:lread.c says
- that comments end at \n, regardless of selective-display.
-
-2005-12-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-error-regexp, gdb-first-post-prompt)
- (gdb-version): New variables.
- (gdb-source-file-list, gdb-register-names)
- (gdb-changed-registers): New variables for use with GDB 6.4+.
- (gdb-ann3): Replace with...
- (gdb-init-1, gdb-init-2): ...two new functions.
- (gdba, gdb-prompt): Call gdb-init-1.
- (gdb-get-version): New function. Call gdb-init-2 from here.
- (gud-watch): Make it work with mouse events too.
- (gdb-post-prompt): Don't add to queue until GDB version is known.
- (gdb-speedbar-expand-node, gdb-post-prompt, gdb-registers-mode)
- (gdb-locals-mode): Use gdb-version.
- (gdb-memory-format-map, gdb-memory-unit-map)
- (gdb-locals-watch-map): Rename from gdb-*-*-keymap.
- (gdb-locals-font-lock-keywords-1)
- (gdb-locals-font-lock-keywords-2): New variables.
- (gdb-find-file-hook): Make it work with GDB 6.4+ too.
- (gdb-set-gud-minor-mode-existing-buffers-1)
- (gdb-var-list-children-1, gdb-var-list-children-handler-1)
- (gdb-var-update-1, gdb-var-update-handler-1)
- (gdb-data-list-register-values-handler)
- (gdb-data-list-register-values-custom)
- (gdb-get-changed-registers, gdb-get-changed-registers-handler)
- (gdb-stack-list-locals-handler, gdb-get-register-names):
- New functions for use with GDB 6.4+.
- (gdb-locals-watch-map-1): New variable for use with GDB 6.4+.
- (gdb-source-file-regexp, gdb-var-list-children-regexp-1)
- (gdb-var-update-regexp-1, gdb-data-list-register-values-regexp)
- (gdb-stack-list-locals-regexp)
- (gdb-data-list-register-names-regexp): New regexps for use with
- GDB 6.4+.
-
-2005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cc-defs.el (c-emacs-features): Don't assume point-min==1.
-
-2005-12-06 Nozomu Ando <nand@mac.com>
-
- * mail/smtpmail.el (smtpmail-try-auth-methods): Make password
- prompts work for AUTH PLAIN. Also reported by Steve Allan
- <seallan@verizon.net>.
-
-2005-12-06 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * frame.el (set-frame-parameter): Add doc string.
-
-2005-12-06 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-occur-highlights): New variable.
- (org-highlight-new-match, org-remove-occur-highlights): New functions.
- (org-highlight-sparse-tree-matches): New option.
- (org-do-occur): New function.
- (org-get-heading): Make it work also at beginning of line.
- (org-category-table): New variable.
- (org-get-category-table, org-get-category)
- (org-camel-to-words, org-link-search): New functions.
- (org-select-this-todo-keyword): New variable.
- (org-todo-list): New command.
- (org-shiftright, org-shiftleft): New commands.
- (org-agenda-todo): Add prefix argument.
- (org-show-hierarchy-above): New option.
- (org-show-todo-tree): Numerical prefix creates tree for specific
- TODO keyword.
- (org-outline-level): New function, to assign a level to plain
- lists items.
- (org-cycle-include-plain-lists): New option.
- (org-mode): Use `org-outline-level' as value of `outline-level'.
- (org-cycle): Temporarily switch `outline-regexp' if
- `org-cycle-include-plain-lists' is non-nil.
- (org-start-icalendar-file): Fix format bug.
- (org-agenda-get-day-entries): Create category table.
- (org-agenda-get-todos, org-agenda-get-timestamps)
- (org-agenda-get-deadlines, org-agenda-get-scheduled)
- (org-agenda-get-blocks): Use `org-get-category'.
- (org-context-in-file-links): Rename from
- `org-line-numbers-in-file-links'.
-
-2005-12-06 Romain Francoise <romain@orebokech.com>
-
- * window.el (balance-windows): Delete extraneous third arg in call
- to `enlarge-window'.
-
-2005-12-06 Kenichi Handa <handa@m17n.org>
-
- * international/kinsoku.el (kinsoku-longer): Check eolp, not eobp.
-
-2005-12-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-handler)
- (gdb-var-evaluate-expression-handler, gdb-frame-handler)
- (gdb-var-list-children-handler, gdb-var-update-handler):
- Current buffer is already gdb-partial-output-buffer, don't
- make it current again.
-
-2005-12-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * buff-menu.el (Buffer-menu-use-frame-buffer-list): New user option.
- (list-buffers-noselect): Use it.
-
-2005-12-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mail/sendmail.el: Remove unnecessary leading-star in docstrings.
- (mail-yank-ignored-headers): Use regexp-opt.
- (mail-mode-map): Move initialization into declaration.
- (mail-sent-via): Remove unused shadowed var `to-line'.
- (mail-mailer-swallows-blank-line): Use with-temp-buffer.
- (mail-bury, sendmail-send-it, mail-do-fcc): Use with-current-buffer.
- (mail-do-fcc): Use dolist and push.
- (mail-mode-fill-paragraph): Pass the arg to fill-region-as-paragraph.
- (mail-yank-ignored-headers): Don't autoload.
-
-2005-12-05 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (set-language-info-internal): New fun.
- (set-language-info): Call set-language-info-internal to update
- language-info-alist. If LANG-ENV is the current one, call
- set-language-environment to make INFO effective now.
- (set-language-info-alist): Likewise.
- (locale-language-names): With locale "en", use English
- lang. env. but set the default codings to iso-8859-1.
-
-2005-12-04 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-use-inferior-io-buffer)
- (gdb-speedbar-auto-raise): Echo new state in minibuffer.
- (gdb-var-create-handler, gdb-assembler-custom): Use search-forward
- for plain strings.
- (gdb-frames-mode): Remove redundant call to font-lock-mode.
- (gdb-all-registers): Rename from toggle-gdb-all-registers.
- Create registers buffer if necessary. Echo new state in minibuffer.
- (gdb-registers-mode-map, gdb-registers-mode): Use gdb-all-registers.
-
-2005-12-03 Chong Yidong <cyd@stupidchicken.com>
-
- * info.el (Info-fontify-node): Match external links using
- non-directory part of filename.
-
-2005-12-04 Juri Linkov <juri@jurta.org>
-
- * font-core.el (global-font-lock-mode): Use define-global-minor-mode
- instead of easy-mmode-define-global-mode. Add `:group font-lock'.
- (font-lock-mode): Replace `:group font-lock' with `nil nil nil'
- because there is no customization option for it.
-
- * font-lock.el (lisp-font-lock-keywords-1):
- Add define-global-minor-mode.
-
- * emacs-lisp/autoload.el (make-autoload): Add define-global-minor-mode.
-
- * emacs-lisp/derived.el (define-derived-mode): Put `definition-name'
- properties on the constructed variable names.
-
- * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation):
- Put `definition-name' properties on the constructed function names
- next-sym and prev-sym.
-
- * emacs-lisp/find-func.el (find-function-regexp):
- Add define-global-minor-mode. Replace `easy-mmode-define-global-mode'
- with `easy-mmode-define-[a-z-]+'. Add easy-menu-define.
- (find-variable-regexp): Add easy-mmode-defmap, easy-mmode-defsyntax
- and easy-menu-define.
-
- * emacs-lisp/lisp-mode.el: Put `doc-string-elt' property on
- easy-mmode-define-global-mode and define-global-minor-mode.
- (lisp-imenu-generic-expression): Add define-global-minor-mode.
-
- * progmodes/cwarn.el (global-cwarn-mode): Use define-global-minor-mode
- instead of easy-mmode-define-global-mode.
-
- * progmodes/idlw-shell.el (idlwave-shell-electric-debug-mode):
- Use define-minor-mode instead of easy-mmode-define-minor-mode.
-
- * cus-edit.el (customize-group, customize-group-other-window):
- Filter out autoloaded options from the group completion list by
- using heuristics that autoloaded groups don't have `custom-autoload'
- property on their symbols (they have only `custom-loads').
-
- * simple.el (completion-setup-function): Put completions-common-part
- face on complete completion string too (i.e. completion string
- without completions-first-difference face).
-
- * man.el (Man-section-regexp): Add 0-9 to support "3X11" sections.
-
-2005-12-03 Eli Zaretskii <eliz@gnu.org>
-
- * view.el (view-mode): Doc fix.
-
- * disp-table.el (standard-display-european): Add to the warning
- message a reference to the doc string.
-
- * play/yow.el (apropos-zippy): Call print-help-return-message,
- similar to other Help and Apropos commands.
-
- * help.el (print-help-return-message): If pop-up-frames is
- non-nil, set up help-return-method to delete the help window and,
- possibly, its frame as well, and don't display message about
- scrolling the help window. Doc fix.
- (help-return-method): Doc fix.
-
-2005-12-03 Martin Rudalics <rudalics@gmx.at>
-
- * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Fix bug
- whereby names of length one or names starting with a
- symbol-constituent character would not be returned.
-
-2005-12-03 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * subr.el (atomic-change-group): Add edebug and indentation spec.
-
-2005-12-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * completion.el (save-completions-file-name): Fix typo in last change.
-
-2005-12-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * info.el: Move back/forward history to the beginning of the tool bar.
-
-2005-12-02 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el (eval-when-compile): Remove unnecessary load of cl.
- Add fset of allout-real-isearch-abort during compile to fix
- byte-compilation warnings.
- (allout-mode-p): Move definition of this macro above all uses, or
- byte compilation in barren Emacs (eg, during Emacs build) will
- lack the definition.
- (allout-mode): Move this variable above any uses, or byte
- compilation will fail.
- (allout-resolve-xref): Remove use of personal file-reference function.
- (allout-toggle-current-subtree-encryption): Do the current (ie,
- visible containing) topic, rather than nearest around point. Doc fix.
- (allout-toggle-subtree-encryption): New function, workhorse that
- works on nearest topic containing point.
- (allout-encrypt-string): Signal requirement for newer version of pgg.
- (allout-resumptions): Doc fix.
-
-2005-12-02 Eli Zaretskii <eliz@gnu.org>
-
- * international/latexenc.el (latex-inputenc-coding-alist): Doc fix.
-
-2005-12-02 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- Consider a misspelling as found in the string search if: (a) misspelling
- and found string lengths match, or (b) misspelling is found as
- element in a boundary-chars separated longer string, or (c)
- ispell-program-name is really ispell and misspelling is found as
- part of a TeX string. After successful match move beginning of
- search region to end of match. Warn about not found misspellings
- once the process is done.
- (flyspell-large-region): Do not set ispell-parser to tex if in TeX mode.
-
-2005-12-02 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Put gud-finish back on the
- tool bar (removed inadvertently).
-
-2005-12-02 Juri Linkov <juri@jurta.org>
-
- * log-view.el (log-view-diff): Clarify doc string.
-
-2005-12-01 Bill Wohler <wohler@newt.com>
-
- * Makefile.in (mh-loaddefs.el): Reinsert Change Log as its absence
- triggers lm-verify errors.
-
-2005-12-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * simple.el (transient-mark-mode, line-number-mode)
- (column-number-mode, size-indication-mode): Remove `:require nil'.
-
-2005-12-01 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-ann3): Bind mouse-2 to gdb-mouse-until
- in the margin also.
- (gdb-breakpoints-mode-map): Use D instead of d for
- gdb-delete-breakpoint.
- (gdb-get-frame-number): Require a number to match on.
- (gdb-threads-mode-map): Add follow-link binding.
-
-2005-11-30 Jason Rumney <jasonr@gnu.org>
-
- * isearch.el (isearch-mode-map): Avoid exiting search on
- language-change event.
-
-2005-11-30 Romain Francoise <romain@orebokech.com>
-
- * speedbar.el (speedbar-default-position): New defcustom.
- (speedbar-frame-reposition-smartly): Use it.
-
- * dframe.el (dframe-reposition-frame-emacs): Fix position
- computation for `left' location.
- Update copyright year.
-
-2005-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * help.el (help-map): Move initialization into declaration.
-
- * emacs-lisp/autoload.el (make-autoload): Handle defgroup specially.
-
- * help-fns.el (help-argument-name): Don't autoload.
- It's useless and triggers a bug in cus-dep.el causing ldefs-boot
- to be re-loaded when customizing the `help' group.
-
-2005-11-30 John Paul Wallington <jpw@gnu.org>
-
- * help-fns.el (describe-function-1): Fill arglist output.
-
-2005-11-30 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-rect.el (cua--rectangle-overlays): Make permanent-local.
- (cua--rectangle-post-command): Cleanup overlays and deactivate mark
- after revert-buffer (or anything else which kills all local variables).
-
- * apropos.el (apropos-parse-pattern): Doc fix.
- Set apropos-regexp directly, rather than expecting callers to do so.
- (apropos-command, apropos, apropos-value, apropos-documentation):
- Simplify calls to apropos-parse-pattern.
-
-2005-11-29 Chong Yidong <cyd@stupidchicken.com>
-
- * hi-lock.el (hi-lock-line-face-buffer, hi-lock-face-buffer)
- (hi-lock-face-phrase-buffer): Use hi-yellow face.
- (hi-lock-write-interactive-patterns): Use comment-region.
-
- * longlines.el (longlines-mode): Add mail-setup-hook.
-
- * mail/mailheader.el, mail/sendmail.el: Revert 2005-11-17 changes.
-
- * simple.el (sendmail-user-agent-compose, next-line):
- Conditionally use hard-newline.
-
-2005-11-29 Reiner Steib <Reiner.Steib@gmx.de>
-
- * international/latexenc.el (latex-inputenc-coding-alist):
- Reword doc string.
-
-2005-11-29 Chong Yidong <cyd@stupidchicken.com>
-
- * help.el (describe-key-briefly, describe-key): Recognize default
- bindings.
-
-2005-11-29 Romain Francoise <romain@orebokech.com>
-
- * view.el (view-inhibit-help-message): New defcustom.
- (view-mode-enter): Use it.
-
-2005-11-29 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-wind.el (ediff-setup-control-frame, ediff-make-wide-display):
- Preserve user position.
-
-2005-11-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * font-lock.el: Throw error if facemenu is not loaded to prevent
- accidental change of loading order in loadup.el. (Suggested by RMS.)
-
- * loadup.el: Add comment explaining why facemenu must be loaded
- before font-lock.
-
-2005-11-28 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el: Change global keybinding for calc-dispatch to "\C-x*".
- (calc-dispatch-map): Add more keys for `calc-same-interface'.
-
- * calc/calc-misc.el (calc-dispatch-help): Update docstring.
-
- * calc/calc-embed.el (calc-do-embedded): Update help message.
-
- * calc/calc-prog.el (calc-user-define-invokation): Update help message.
-
-2005-11-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * log-edit.el (log-edit-insert-cvs-rcstemplate): Ignore stderr.
-
- * emacs-lisp/elp.el (elp-not-profilable): Replace interactive-p with
- called-interactively-p.
- (elp-profilable-p): Rename from elp-not-profilable-p.
- Invert result and take into account macros and autoloaded functions.
- (elp-instrument-function): Update call.
- (elp-instrument-package): Update call. Add completion.
- (elp-pack-number): Use match-string.
- (elp-results-jump-to-definition-by-mouse): Merge into
- elp-results-jump-to-definition and then remove.
- (elp-output-insert-symname): Make help echo text single-line.
-
- * replace.el (query-replace-map): Move initialization into declaration.
- (occur-engine): Use with-current-buffer.
- (occur-mode-goto-occurrence): Make it work for mouse-clicks as well.
- (occur-mode-mouse-goto): Replace with an alias.
-
-2005-11-28 Juri Linkov <juri@jurta.org>
-
- * simple.el (quoted-insert): Let-bind input-method-function to nil.
-
- * term/w32-win.el: Bind [S-tab] to [backtab].
-
- * info.el (Info-fontify-node): Set 2nd arg `noerror' of
- `Info-find-file' to t.
+2007-07-02 Martin Rudalics <rudalics@gmx.at>
- * replace.el (occur-mode-mouse-goto): Pop, don't switch.
- (occur-mode-goto-occurrence): Let-bind same-window-buffer-names
- and same-window-regexps.
- (occur-next-error): Don't move point for arg 0.
+ * help-mode.el (help-make-xrefs): Skip spaces too when
+ skipping tabs.
-2005-11-28 Chong Yidong <cyd@stupidchicken.com>
+ * ffap.el (dired-at-point-prompter): Improve prompt in
+ list-directory case.
- * replace.el (occur-mode-goto-occurrence): Pop, don't switch.
+2007-07-01 Richard Stallman <rms@gnu.org>
-2005-11-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * files.el (find-file-visit-truename): Fix safe-local-variable value.
- * log-edit.el (log-edit-changelog-use-first): New var.
- (log-edit-changelog-ours-p): Use it.
- (log-edit-insert-changelog): Set it with new arg `use-first'.
- (log-edit-insert-cvs-rcstemplate, log-edit-insert-filenames): New funs.
- (log-edit-hook): Add them to the list of suggested options.
+2007-07-01 Richard Stallman <rms@gnu.org>
- * textmodes/flyspell.el (flyspell-last-buffer): New var.
- (flyspell-accept-buffer-local-defs): Use it to avoid doing silly
- redundant work.
- (flyspell-mode-on): Use add-hook for after-change-functions.
- (flyspell-mode-off): Use remove-hook for after-change-functions.
- (flyspell-changes): Make it buffer-local.
- (flyspell-after-change-function): Make it non-interactive. Use push.
- (flyspell-post-command-hook): Check input-pending-p while processing
- the potentially long list of buffer changes.
+ * cus-start.el (max-mini-window-height): Added.
-2005-11-28 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+2007-07-01 Sean O'Rourke <sorourke@cs.ucsd.edu> (tiny change)
- * buff-menu.el (list-buffers-noselect): Display the selected
- frame's buffer list, not the global one.
+ * complete.el (partial-completion-mode): Remove advice of
+ read-file-name-internal.
+ (PC-do-completion): Rebind minibuffer-completion-table.
+ (PC-read-file-name-internal): New function doing what
+ read-file-name-internal advice did.
-2005-11-28 Nick Roberts <nickrob@snap.net.nz>
+2007-07-01 Paul Pogonyshev <pogonyshev@gmx.net>
- * xt-mouse.el (xterm-mouse-event): Set last-input-event so
- that (list last-input-event) works as in interactive spec.
+ * emacs-lisp/byte-opt.el: Set `binding-is-magic'
+ property on a few symbols.
+ (byte-compile-side-effect-free-dynamically-safe-ops): New defconst.
+ (byte-optimize-lapcode): Remove bindings that are not referenced
+ and certainly will not effect through dynamic scoping.
-2005-11-27 Luc Teirlinck <teirllm@auburn.edu>
+2007-07-01 Stefan Monnier <monnier@iro.umontreal.ca>
- * loadup.el ("facemenu"): Load facemenu before font-lock, because
- `facemenu-keymap' needs to be defined when font-lock is loaded.
- Otherwise, `M-o M-o' is not bound to `font-lock-fontify-block'.
+ * files.el (find-file-confirm-inexistent-file): New var.
+ (find-file, find-file-other-window, find-file-other-frame)
+ (find-file-read-only, find-file-read-only-other-window)
+ (find-file-read-only-other-frame): Use it.
-2005-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-06-30 Stefan Monnier <monnier@iro.umontreal.ca>
- * completion.el: Remove useless leading * in defcustom docstrings.
- (save-completions-file-name): Use ~/.emacs.d if available.
- (completion-standard-syntax-table): Rename from
- cmpl-standard-syntax-table and fold initialization into declaration,
- thus removing cmpl-make-standard-completion-syntax-table.
- (completion-lisp-syntax-table, completion-c-syntax-table)
- (completion-fortran-syntax-table, completion-c-def-syntax-table): Idem.
- (cmpl-saved-syntax, cmpl-saved-point): Remove.
- (symbol-under-point, symbol-before-point)
- (symbol-under-or-before-point, symbol-before-point-for-complete)
- (add-completions-from-c-buffer): Use with-syntax-table.
- (make-completion): Don't return a list of completion entries.
- Update callers.
- (cmpl-prefix-entry-head, cmpl-prefix-entry-tail): Use defalias.
- (completion-initialize): Rename from initialize-completions.
- (completion-find-file-hook): Rename from cmpl-find-file-hook.
- (kill-emacs-save-completions): Collect stats here.
- (save-completions-to-file, load-completions-from-file):
- Use with-current-buffer.
- (completion-def-wrapper): Rename from def-completion-wrapper. Make it
- into a function. Move all calls to toplevel.
- (completion-lisp-mode-hook): New fun.
- (completion-c-mode-hook, completion-setup-fortran-mode):
- Set the syntax-table here. Use local-set-key.
- (completion-saved-bindings): New var.
- (dynamic-completion-mode): Make it into a proper minor mode.
- (load-completions-from-file): Remove unused var `num-uses'.
+ * emacs-lisp/rx.el (rx-constituents): Fix up `anything'.
- * emacs-lisp/cl-macs.el (defstruct): Don't define the default
- constructor if it is explicitly overridden.
+2007-06-29 Juanma Barranquero <lekktu@gmail.com>
- * complete.el (PC-completion-as-file-name-predicate):
- Use minibuffer-completing-file-name.
- (partial-completion-mode): Use find-file-not-found-functions.
- (PC-lisp-complete-symbol): Use with-syntax-table.
- (PC-look-for-include-file): Remove dead setq.
- (PC-look-for-include-file, PC-expand-many-files, PC-do-completion)
- (PC-complete): Use with-current-buffer.
+ * generic-x.el (generic-define-mswindows-modes)
+ (generic-define-unix-modes, apache-log-generic-mode)
+ (bat-generic-mode-keymap, java-manifest-generic-mode)
+ (show-tabs-generic-mode): Fix typos in docstrings.
- * progmodes/sh-script.el (sh-font-lock-syntactic-keywords): \ doesn't
- escape single quotes.
+2007-06-29 Ryan Yeske <rcyeske@gmail.com>
-2005-11-27 Luc Teirlinck <teirllm@auburn.edu>
+ * net/rcirc.el (rcirc-server-alist): Rename from rcirc-connections.
+ (rcirc-default-full-name): Rename from rcirc-default-user-full-name.
+ (rcirc-clear-activity): Make sure RCIRC-ACTIVITY isn't modified.
+ (rcirc-print): Never ignore messages from ourself.
- * dabbrev.el (dabbrev-completion): Simplify code, by getting rid
- of `if' whose condition always returned nil. Doc fix.
+2007-06-29 Stefan Monnier <monnier@iro.umontreal.ca>
- * buff-menu.el (Buffer-menu-revert-function): Make the selected
- window's buffer the current buffer around the call to
- `list-buffers-noselect'. This is necessary to mark that buffer
- with a `.' in the Buffer Menu when called from Lisp, for instance
- by Auto Revert Mode.
+ * font-lock.el (lisp-font-lock-keywords-2): Recognize the new \(?1:..\)
+ syntax as well. Reported by Juri Linkov <juri@jurta.org>.
-2005-11-28 Nick Roberts <nickrob@snap.net.nz>
+2007-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * progmodes/gdb-ui.el (gdb-stopped): Detect child process when
- attaching to it.
- (gdb-pre-prompt): Make sure gdb-error is reset.
+ * dnd.el (dnd-get-local-file-name): Set fixcase to t in call to
+ replace-regexp-in-string.
- * progmodes/gud.el (gud-gdb-marker-filter): When GDB is invoked
- with a child process, detect it.
- (gud-speedbar-buttons): Match regexp more carefully.
+2007-06-28 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-11-27 Richard M. Stallman <rms@gnu.org>
+ * emacs-lisp/cl.el: Set edebug and indentation before loading
+ cl-loaddefs.el so that its use of dolist doesn't load cl-macs.
- * mouse.el (mouse-drag-move-window-bottom):
- Use adjust-window-trailing-edge.
+2007-06-28 Andreas Schwab <schwab@suse.de>
-2005-11-27 Luc Teirlinck <teirllm@auburn.edu>
+ * Makefile.in ($(lisp)/mh-e/mh-loaddefs.el): Depend on
+ $(lisp)/subdirs.el.
- * simple.el (blink-matching-open): Ignore
- `blink-matching-paren-on-screen' if `show-paren-mode' is enabled.
- (blink-matching-paren-on-screen): Update docstring.
+2007-06-28 Juanma Barranquero <lekktu@gmail.com>
- * paren.el (show-paren-mode): No longer change
- `blink-matching-paren-on-screen'.
+ * speedbar.el (speedbar-handle-delete-frame): Don't try to delete
+ the speedbar frame if nil; that deletes the current frame or
+ causes an error if it is the only frame.
+ Reported by Angelo Graziosi <Angelo.Graziosi@roma1.infn.it>.
-2005-11-27 John Paul Wallington <jpw@pobox.com>
+2007-06-28 Kevin Ryde <user42@zip.com.au>
- * progmodes/gdb-ui.el (gdb-goto-breakpoint, gdb-frames-select)
- (gdb-threads-select, gdb-edit-register-value):
- Use `posn-set-point' instead of `mouse-set-point' because the
- latter is not fbound when configured without X.
+ * textmodes/nroff-mode.el: Groff \# comments.
+ (nroff-mode-syntax-table): \# comment intro,
+ plain # as punct per global table.
+ (nroff-font-lock-keywords): Add # as a single char escape.
+ (nroff-mode): In comment-start-skip, match \#.
-2005-11-27 Kim F. Storm <storm@cua.dk>
+2007-06-28 Stefan Monnier <monnier@iro.umontreal.ca>
- * emulation/cua-rect.el (cua--highlight-rectangle): Preserve
- existing face when partially highlighting a TAB in a rectangle.
+ * vc-bzr.el (vc-functions): Clear up the cache when reloading the file.
+ (vc-bzr-workfile-version, vc-bzr-could-register): Don't hardcode
+ point-min == 1.
-2005-11-26 Kim F. Storm <storm@cua.dk>
+2007-06-28 Nick Roberts <nickrob@snap.net.nz>
- * ido.el (ido-mode-map): Doc fix.
- (ido-mode-common-map, ido-mode-file-map)
- (ido-mode-file-dir-map, ido-mode-buffer-map): New keymaps.
- (ido-define-mode-map): Rewrite. Select one of the new maps as
- parent for ido-mode-map instead of building from scratch.
- (ido-init-mode-maps): New defun to initialize new maps.
- (ido-mode): Call it.
- (ido-switch-buffer): Doc fix -- use \<ido-mode-buffer-map>.
- (ido-find-file): Doc fix -- use \<ido-mode-file-map>.
+ * pcvs-util.el (cvs-strings->string, cvs-string->strings):
+ Rename and move to...
-2005-11-26 John Paul Wallington <jpw@pobox.com>
+ * subr.el (strings->string, string->strings): ...here.
- * arc-mode.el (archive-extract): Use `posn-set-point' instead of
- `mouse-set-point' because the latter is not fbound when configured
- without X.
+ * pcvs.el (cvs-reread-cvsrc, cvs-header-msg, cvs-checkout)
+ (cvs-mode-checkout, cvs-execute-single-file): Use new function names.
-2005-11-26 Thien-Thi Nguyen <ttn@gnu.org>
+ * progmodes/gud.el (gud-common-init): Call string->strings instead
+ of split-string.
- * files.el (file-relative-name): Doc fix.
+2007-06-27 Michael Albinus <michael.albinus@gmx.de>
-2005-11-26 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
+ * dired-aux.el: Remove `dired-call-process'.
+ (dired-check-process): Call `process-file'.
- * progmodes/octave-inf.el (inferior-octave-startup): Force a
- non-empty string for secondary prompt PS2.
+ * wdired.el (wdired-do-perm-changes): Call `process-file'.
-2005-11-25 Chong Yidong <cyd@stupidchicken.com>
+ * net/ange-ftp.el (ange-ftp-dired-call-process): Reimplement it as
+ `ange-ftp-process-file'.
- * progmodes/compile.el (compilation-setup): Fix last change.
+2007-06-27 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-11-26 Nick Roberts <nickrob@snap.net.nz>
+ * emacs-lisp/cl.el: Use cl-loaddefs.el rather than manual autoloads.
- * progmodes/gdb-ui.el (gdb-info-breakpoints-custom)
- (gdb-mouse-toggle-breakpoint-margin)
- (gdb-mouse-toggle-breakpoint-fringe, gdb-threads-select):
- Add gdb-server-prefix to keep out of command history.
- (gdb-edit-register-value): New function.
- (gdb-registers-mode-map): Bind mouse-2 and RET to it.
- (gdb-info-registers-custom): Use above map.
+ * emacs-lisp/cl-extra.el:
+ * emacs-lisp/cl-seq.el:
+ * emacs-lisp/cl-macs.el: Set generated-autoload-file to cl-loaddefs.el.
+ Add autoload cookies on all defs autoloaded manually in cl.el.
-2005-11-25 Chong Yidong <cyd@stupidchicken.com>
+ * emacs-lisp/cl-loaddefs.el: New file.
- * custom.el (enable-theme): Signal error if argument is not a
- theme. Don't recalculate a face if it's not loaded yet.
+ * textmodes/texinfmt.el (texinfo-raisesections-alist)
+ (texinfo-lowersections-alist): Merge definition and declaration.
+ (texinfo-start-of-header, texinfo-end-of-header): Remove.
+ (texinfo-format-syntax-table): Merge init into declaration.
+ (texinfo-format-parse-line-args, texinfo-format-parse-args)
+ (texinfo-format-parse-defun-args, texinfo-format-node)
+ (texinfo-push-stack, texinfo-multitable-widths)
+ (texinfo-define-info-enclosure, texinfo-alias)
+ (texinfo-format-defindex, batch-texinfo-format): Use push.
+ (texinfo-footnote-number): Remove duplicate declaration.
- * cus-face.el (custom-theme-set-faces): Don't change saved-face if
- the `user' theme is in effect.
+ * ps-print.el: Update with auto-generated autoloads.
- * info.el (Info-on-current-buffer): Record actual filename in
- Info-current-file, instead of t, or a fake filename if a non-file
- buffer. Make autoload.
- (Info-find-node, Info-revert-find-node): No need to check for
- Info-current-file nil.
- (Info-set-mode-line, Info-up, Info-copy-current-node-name):
- Info-current-file is now never `t'.
- (Info-fontify-node): Many simplifications due to Info-current-file
- always being valid. Use Info-find-file to find node filename.
+ * ps-mule.el: Set generated-autoload-file to "ps-print.el".
-2005-11-25 David Kastrup <dak@gnu.org>
+2007-06-26 Stefan Monnier <monnier@iro.umontreal.ca>
- * longlines.el (longlines-wrap-line): Reorder wrapping to "insert
- new character, then delete" in order to preserve markers.
+ * emacs-lisp/autoload.el (autoload-generated-file): Interpret names
+ relative to current dir for file-local settings.
+ (autoload-generate-file-autoloads): Add `outfile' arg.
+ (update-directory-autoloads): Use it to directly call
+ autoload-generate-file-autoloads instead of going through
+ update-file-autoloads so we avoid redundant searches and so we can know
+ the set of buffers changed so we can save them all.
-2005-11-25 David Ponce <david@dponce.com>
+ * emacs-lisp/autoload.el (autoload-find-destination): Return nil
+ rather than throwing `up-to-date'.
+ (autoload-generate-file-autoloads): Adjust correspondingly.
+ (update-file-autoloads): Be careful to let-bind
+ autoload-modified-buffers and adjust to new calling conventions.
+ (autoload-modified-buffers): Make it a dynamically scoped var.
+ (update-directory-autoloads): Use file-relative-name instead of
+ autoload-trim-file-name.
+ (autoload-insert-section-header): Don't use autoload-trim-file-name
+ since the file is already relative now.
+ (autoload-trim-file-name): Remove.
- * recentf.el (recentf-arrange-by-rule): Handle a special
- `auto-mode-alist'-like "strip suffix" rule.
- (recentf-build-mode-rules): Handle second level auto-mode entries.
+ * vc-arch.el (vc-arch-add-tagline): Do a slightly cleaner job.
+ (vc-arch-complete, vc-arch--version-completion-table)
+ (vc-arch-revision-completion-table): New functions to provide
+ completion of revision names.
+ (vc-arch-trim-find-least-useful-rev, vc-arch-trim-make-sentinel)
+ (vc-arch-trim-one-revlib, vc-arch-trim-revlib): New functions
+ to let the user trim the revlib.
-2005-11-25 Michael Kifer <kifer@cs.stonybrook.edu>
+ * vc.el: Add new VC operation `revision-completion-table'.
+ (vc-default-revision-completion-table): New function.
+ (vc-version-diff, vc-version-other-window): Use it to provide
+ completion of revision names if the backend provides it.
- * emulation/viper-keym.el (viper-ESC-key): Use different values
- in terminal and window modes.
+ * log-edit.el (log-edit-changelog-entries): Use with-current-buffer.
- * emulation/viper.el (viper-emacs-state-mode-list): Delete mail-mode,
- add jde-javadoc-checker-report-mode.
+ * vc-svn.el (vc-svn-repository-hostname): Adjust to non-XML format
+ of newer .svn/entries.
- * ediff-wind.el (ediff-make-wide-display): Slight simplification.
+2007-06-25 David Kastrup <dak@gnu.org>
- * ediff.el (ediff-date): Change the date of last update.
+ * calc/calc-poly.el (math-padded-polynomial)
+ (math-partial-fractions): Add some function comments.
-2005-11-24 Chong Yidong <cyd@stupidchicken.com>
+2007-06-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * hi-lock.el (hi-lock-buffer-mode): Renamed from `hi-lock-mode'.
- Use define-minor-mode, and make it a local mode. Turn on font-lock.
- (hi-lock-mode): New global minor mode.
- (turn-on-hi-lock-if-enabled): New function.
- (hi-lock-line-face-buffer, hi-lock-face-buffer, hi-lock-set-pattern):
- Change arguments to regexp and face instead of a font-lock pattern.
- Directly set face property, instead of refontifying.
- (hi-lock-font-lock-hook): Check if font-lock is being turned on.
- (hi-lock-find-patterns): Use line-number-at-pos.
+ * emacs-lisp/autoload.el (autoload-generate-file-autoloads):
+ Make `outbuf' optional.
+ (update-file-autoloads): Use it.
- (hi-lock-face-phrase-buffer): Call hi-lock-buffer-mode. Use new
- arguments for hi-lock-set-pattern.
- (hi-lock-unface-buffer, hi-lock-set-file-patterns):
- Call font-lock-fontify-buffer.
- (hi-lock-find-file-hook, hi-lock-current-line)
- (hi-lock-refontify, hi-lock-set-patterns): Delete unused functions.
+2007-06-25 Stefan Monnier <monnier@iro.umontreal.ca>
- (hi-lock-font-lock-hook): Turn off hi-lock when font lock is
- turned off.
+ * emacs-lisp/autoload.el (autoload-modified-buffers): New var.
+ (autoload-find-destination): Keep it uptodate.
+ (autoload-save-buffers): New fun.
+ (update-file-autoloads): Use it. Re-add the "up to date" message.
- * progmodes/compile.el (compilation-setup): Don't fiddle with
- font-lock-defaults.
+ * emacs-lisp/autoload.el: Refactor for upcoming changes.
+ (autoload-find-destination): New function extracted from
+ update-file-autoloads.
+ (update-file-autoloads): Use it.
+ (autoload-generate-file-autoloads): New function extracted from
+ generate-file-autoloads. Use file-relative-name. Delay computation of
+ output-start to the first cookie. Remove done-any, replaced by
+ output-start.
+ (generate-file-autoloads): Use it.
-2005-11-25 Nick Roberts <nickrob@snap.net.nz>
+2007-06-24 Jay Belanger <jay.p.belanger@gmail.com>
- * progmodes/gdb-ui.el (gdb-var-create-handler)
- (gdb-var-list-children-handler): Find values for all variable
- objects. gud-speedbar-buttons decides whether to display them.
+ * calc/calc-comb.el (math-init-random-base, math-prime-test):
+ Use math-read-number-simple to insert constants.
+ (math-prime-test): Redo calculation of sum.
-2005-11-24 Romain Francoise <romain@orebokech.com>
+ * calc/calc-misc.el (math-div2-bignum): Use math-bignum-digit-size.
- * info.el (Info-speedbar-fetch-file-nodes): Prefix temporary
- buffer name with a space.
+ * calc/calc-math.el (math-scale-bignum-digit-size): Rename from
+ math-scale-bignum-3.
+ (math-isqrt-bignum): Use math-scale-bignum-digit-size and
+ math-bignum-digit-size.
+ (math-isqrt-small): Add another possible initial guess.
-2005-11-24 Carsten Dominik <dominik@science.uva.nl>
+2007-06-23 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
- * textmodes/org.el (org-export-plain-list-max-depth): Rename from
- `org-export-local-list-max-depth'. Change default value to 3.
- (org-auto-renumber-ordered-lists)
- (org-plain-list-ordered-item-terminator): New options.
- (org-at-item-p, org-beginning-of-item, org-end-of-item)
- (org-get-indentation, org-get-string-indentation)
- (org-maybe-renumber-ordered-list, org-renumber-ordered-list):
+ * textmodes/bibtex.el (bibtex-entry-format): New options
+ `whitespace', `braces', and `string'.
+ (bibtex-field-braces-alist, bibtex-field-strings-alist)
+ (bibtex-field-braces-opt, bibtex-field-strings-opt)
+ (bibtex-cite-matcher-alist): New variables.
+ (bibtex-font-lock-keywords): Use bibtex-cite-matcher-alist.
+ (bibtex-flash-head): Use blink-matching-delay.
+ (bibtex-insert-kill, bibtex-mark-entry): Use push-mark.
+ (bibtex-format-entry, bibtex-reformat): Handle new options of
+ bibtex-entry-format.
+ (bibtex-field-re-init, bibtex-font-lock-cite, bibtex-dist):
New functions.
- (org-move-item-down, org-move-item-up): New commands.
- (org-export-as-html): New classes for CSS support. Bug fix in
- regular expression detecting fixed-width regions. Respect
- `org-local-list-ordered-item-terminator'.
- (org-set-autofill-regexps, org-adaptive-fill-function): "1)" is
- also a list item.
- (org-metaup, org-metadown, org-shiftmetaup, org-shiftmetadown):
- New item moving functions.
-
-2005-11-24 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-repeat): With empty search ring set
- `isearch-error' to the error string instead of signaling error
- with the function `error'.
-
-2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Make modifier `ctrl' an alias for `control'.
+ (bibtex-complete-internal): Do not display messages while
+ minibuffer is used. Do not leave around a completions buffer
+ that is out of date.
+ (bibtex-copy-summary-as-kill): New optional arg.
+ (bibtex-font-lock-url): New optional arg no-button.
+ (bibtex-find-crossref): Use `bibtex-cite-matcher-alist'.
+ (bibtex-url): Allow multiple URLs per entry.
+
+2007-06-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/autoload.el (autoload-generated-file): New function.
+ (update-file-autoloads, update-directory-autoloads): Use it.
+ (autoload-file-load-name): New function.
+ (generate-file-autoloads, update-file-autoloads): Use it.
+ (autoload-find-file): Accept non-absolute argument. Set default-dir.
+ (generate-file-autoloads): If the autoloaded form is malformed,
+ indicate the problem with a warning instead of aborting.
-2005-11-24 Nick Roberts <nickrob@snap.net.nz>
+2007-06-23 Thien-Thi Nguyen <ttn@gnuvola.org>
- * progmodes/gdb-ui.el (gdb-speedbar-auto-raise): New function
- and variable.
- (gdb-var-create-handler, gdb-var-list-children-handler):
- Don't match on "char **...".
- (gdb-var-update-handler): Find values for all variable objects.
- (gdb-info-frames-custom): Identify frames by leading "#".
+ * simple.el (next-error-recenter): Accept `(4)' as well;
+ also, specify `integer' instead of `number'.
- * progmodes/gud.el (gud-speedbar-menu-items): Add
- gdb-speedbar-auto-raise as radio button.
- (gud-speedbar-buttons): Raise speedbar if requested.
- Don't match on "char **...".
- (gud-speedbar-buttons): Add (pointer) value for non-leaves.
- Make it editable.
+2007-06-23 Eli Zaretskii <eliz@gnu.org>
-2005-11-23 Chong Yidong <cyd@stupidchicken.com>
+ * ls-lisp.el (insert-directory): If an invalid regexp error is
+ thrown, try using FILE as a literal file name, not a wildcard.
- * info.el (Info-fontify-node): Handle the case where
- Info-current-file is t.
+2007-06-23 Juanma Barranquero <lekktu@gmail.com>
-2005-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
+ * ruler-mode.el (ruler-mode): Prevent clobbering the original
+ `header-line-format' when reentering ruler mode.
- * simple.el (blink-matching-open): Fix off-by-one in last change.
+2007-06-23 Eli Zaretskii <eliz@gnu.org>
-2005-11-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * ls-lisp.el (insert-directory): Don't treat FILE as a wildcard if
+ FILE exists as a file.
- * term/mac-win.el: Don't change default directory.
+2007-06-22 Jay Belanger <jay.p.belanger@gmail.com>
-2005-11-22 Luc Teirlinck <teirllm@auburn.edu>
+ * calc/calc.el (math-bignum-digit-length)
+ (math-bignum-digit-size, math-small-integer-size):
+ New constants.
+ (math-normalize, math-bignum-big, math-make-float)
+ (math-div10-bignum, math-scale-left, math-scale-left-bignum)
+ (math-scale-right, math-scale-right-bignum, math-scale-rounding)
+ (math-add, math-add-bignum, math-sub-bignum, math-sub, math-mul)
+ (math-mul-bignum, math-mul-bignum-digit, math-idivmod)
+ (math-quotient, math-div-bignum, math-div-bignum-digit)
+ (math-div-bignum-part, math-format-bignum-decimal)
+ (math-read-bignum): Use math-bignum-digit-length,
+ math-bignum-digit-size and math-small-integer-size.
- * cus-edit.el (Custom-reset-standard): Make it handle Custom group
- buffers correctly. (It used to throw an error in such buffers.)
- Make it ask for confirmation in group buffers and other Custom
- buffers containing more than one customization item.
+ * calc/calc-ext.el (math-fixnum-big): Use the variable
+ math-bignum-digit-size.
-2005-11-22 John Paul Wallington <jpw@gnu.org>
+2007-06-23 Dan Nicolaescu <dann@ics.uci.edu>
- * net/goto-addr.el (goto-address-fontify): Put `follow-link'
- property on mail and url overlays.
- (goto-address-at-point): Use `posn-set-point' instead of
- `mouse-set-point' because the latter is not fbound when configured
- without X.
+ * log-view.el (log-view-mode-menu): New menu.
-2005-11-22 Lars Hansen <larsh@soem.dk>
+2007-06-22 Stefan Monnier <monnier@iro.umontreal.ca>
- * ls-lisp.el (ls-lisp-parse-symlink): Delete.
- (ls-lisp-classify, ls-lisp-format): Delete call to
- ls-lisp-parse-symlink.
- (ls-lisp-handle-switches): Handle symlinks to directories as
- directories when ls-lisp-dirs-first in non-nil.
+ * diff-mode.el (diff-font-lock-keywords): Fix M. Kifer's last change
+ differently.
-2005-11-21 Luc Teirlinck <teirllm@auburn.edu>
+ * vc-hg.el (vc-hg-registered): Add an autoloaded version.
+ (vc-hg-log-view-mode): Use log-view-font-lock-keywords.
- * startup.el (command-line): Make sure that loaddefs.el is handled
- correctly in load-history.
+2007-06-22 Dan Nicolaescu <dann@ics.uci.edu>
-2005-11-22 Nick Roberts <nickrob@snap.net.nz>
+ * vc-hg.el (vc-hg-print-log): Insert the file name.
+ (vc-hg-log-view-mode): Fontify the file name.
- * progmodes/gdb-ui.el (gdb-locals-watch-keymap): New local map.
- (gdb-struct-string, gdb-array-string): New constants.
- (gdb-info-locals-handler): Use them.
- (gdb-reset): Reset gdb-var-list to nil.
+2007-06-22 Jay Belanger <jay.p.belanger@gmail.com>
-2005-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
+ * calc/calc-forms.el (math-format-date-part, calc-parse-standard-date)
+ (calcFunc-julian): Fix incorrect number used in calculations.
- * progmodes/sh-script.el (sh-font-lock-paren): Handle continued lines
- in patterns.
+2007-06-22 Thien-Thi Nguyen <ttn@gnuvola.org>
-2005-11-21 Juri Linkov <juri@jurta.org>
+ * simple.el (next-error-recenter): New defcustom.
+ (next-error, next-error-internal): Recenter if specified,
+ immediately prior to running `next-error-hook'.
- * custom.el (defcustom): Update link types in docstring.
+ * progmodes/hideshow.el (hs-show-block): Use line-end-position.
+ (hs-hide-block-at-point, hs-hide-comment-region): Likewise.
-2005-11-20 Martin Rudalics <rudalics@gmx.at>
+ * progmodes/hideshow.el (hs-hide-all): Use progress reporter.
- * custom.el (defgroup): Add doc-string-elt info.
+2007-06-22 Jay Belanger <jay.p.belanger@gmail.com>
- * widget.el (define-widget): Don't use declare for the doc-string-elt.
+ * calc/calc-comb.el (math-small-factorial-table): New variable.
+ (calcFunc-fact): Use `math-small-factorial-table'.
-2005-11-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * calc/calc-ext.el (math-defcache): Allow forms to evaluate
+ initial values.
+ (math-approx-pi, math-approx-sqrt-e, math-approx-gamma-const):
+ New variables to use in caches.
- * newcomment.el (comment-enter-backward): Fix last fix.
+ * calc/calc-forms.el (math-format-date-part, math-parse-standard-date)
+ (calcFunc-julian): Use `math-read-number-simple' to insert bignums.
- * simple.el (blink-matching-open):
- * paren.el (show-paren-function): Allow new paren-class info.
+ * calc/calc-func.el (math-besJ0, math-besJ1, math-besY0, math-besY1)
+ (math-bernoulli-b-cache): Use math-read-number-simple to insert
+ bignums.
-2005-11-20 Chong Yidong <cyd@stupidchicken.com>
+ * calc/calc-math.el (math-approx-ln-10, math-approx-ln-2):
+ New variables to use in caches.
- * faces.el: Revert 2005-11-17 change. :ignore-defface is now
- handled automagically.
+2007-06-22 Dan Nicolaescu <dann@ics.uci.edu>
-2005-11-20 Andreas Schwab <schwab@suse.de>
+ * vc-bzr.el (vc-bzr-log-view-mode): Add + to the email address regexp.
- * descr-text.el (describe-char): When copying overlays put them
- over the full char description instead of just the first character
- of it.
+ * vc-hg.el (vc-hg-log-view-mode): New mode.
-2005-11-20 Juri Linkov <juri@jurta.org>
+2007-06-21 Jay Belanger <jay.p.belanger@gmail.com>
- * simple.el (what-cursor-position):
- * descr-text.el (describe-char): Use Lisp-readable syntax
- for octal and hex. Reorder decimal, octal and hex values.
- Remove excess whitespace in the output. Use `=' in `column='
- like in `point=' and `Hscroll='.
+ * calc/calc.el (math-read-number-simple): New function.
- * international/mule-cmds.el (encoded-string-description):
- Use Lisp-readable syntax for hex.
+2007-06-21 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-11-19 Stefan Monnier <monnier@iro.umontreal.ca>
+ * progmodes/vera-mode.el (vera-mode): Fix `commend-end-skip' setting.
+ (vera-font-lock-match-item): Fix doc string.
+ (vera-in-comment-p): Remove unused function.
+ (vera-skip-forward-literal, vera-skip-backward-literal): Improve code,
+ use `syntax-ppss'.
+ (vera-forward-syntactic-ws): Fix argument order.
+ (vera-prepare-search): Use `with-syntax-table'.
+ (vera-indent-line): Fix doc string.
+ (vera-electric-tab): Fix doc string.
+ (vera-expand-abbrev): Define alias instead of using `fset'.
+ (vera-comment-uncomment-region): Use `comment-start-skip'.
- * newcomment.el (comment-enter-backward): Handle the case where the
- comment is closed by EOB.
+2007-06-21 Carsten Dominik <dominik@science.uva.nl>
-2005-11-19 Chong Yidong <cyd@stupidchicken.com>
+ * textmodes/org.el (org-export-with-footnotes): New option.
+ (org-export-as-html): Fix replacement bug for XEmacs.
+ (org-agenda-default-appointment-duration): New option.
- * longlines.el (longlines-before-revert-hook)
- (longlines-after-revert-hook): New functions.
- (longlines-mode): Turn off longlines temporarily when reverting.
- Add a message-setup-hook.
- (longlines-decode-buffer): New function.
- (longlines-wrap-line): Preserve marker positions.
+2007-06-21 Dan Nicolaescu <dann@ics.uci.edu>
-2005-11-19 Andreas Schwab <schwab@suse.de>
+ * vc-hg.el: Add to do items.
+ (vc-hg-diff): Add support for comparing different revisions.
+ (vc-hg-diff, vc-hg-annotate-command, vc-hg-annotate-time)
+ (vc-hg-annotate-extract-revision-at-line)
+ (vc-hg-previous-version, vc-hg-checkin): New functions.
+ (vc-hg-annotate-re): New constant.
- * emacs-lisp/shadow.el: Handle compressed files.
+2007-06-20 Jay Belanger <jay.p.belanger@gmail.com>
-2005-11-19 Romain Francoise <romain@orebokech.com>
+ * calc/calc.el (math-standard-ops): Fix precedence of multiplication.
- * net/browse-url.el (browse-url-default-browser): Signal an error
- if no usable browser can be found, rather than try to load w3.
+2007-06-20 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-11-16 Ryan Yeske <rcyeske@gmail.com>
+ * log-view.el (log-view-font-lock-keywords): Use `eval' to consult the
+ buffer-local value of log-view-*-re if applicable.
+
+ * vc-bzr.el (vc-bzr-dir-state): Use setq rather than set.
+ Use vc-bzr-command rather than the ill defined vc-bzr-command*.
+ (vc-bzr-command*): Remove both (incompatible) versions.
+ (vc-bzr-do-command*): Remove.
+ (vc-bzr-with-process-environment, vc-bzr-std-process-invocation):
+ Remove by folding into its only caller vc-bzr-command.
+ (vc-bzr-command): Always set the environment, even when ineffective.
+ (vc-bzr-version): Minor fix up.
+ (vc-bzr-admin-dirname): New var.
+ (vc-bzr-bzr-dir): Remove.
+ (vc-bzr-root-dir): New fun.
+ (vc-bzr-registered): Use it. Add an autoloaded version.
+ (vc-bzr-responsible-p): Use vc-bzr-root-dir as well.
+ (vc-bzr-view-log-function): Remove.
+ (vc-bzr-log-view-mode): New major mode to replace it.
+ (vc-bzr-print-log): Only activate the old hack if needed.
- * net/rcirc.el (rcirc-mangle-text): Add bold face property without
- replacing existing properties.
- (rcirc-my-nick, rcirc-other-nick, rcirc-server)
- (rcirc-nick-in-message, rcirc-prompt): Use min-colors and remove
- tty specs.
- (rcirc-server-prefix, rcirc-server): New faces.
- (rcirc-url-regexp): Generate with rx macro.
- (rcirc-last-server-message-time): New variable.
- (rcirc-filter): Record time of last message.
- (rcirc-keepalive): Kill processes that did not send a message
- since the last ping.
- (rcirc-mode): Give rcirc-topic a local binding here.
+ * vc.el (vc-default-log-view-mode): New function.
+ (vc-print-log): Add new `log-view-mode' VC operation.
-2005-11-19 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+2007-06-20 Juanma Barranquero <lekktu@gmail.com>
- * subr.el (read-passwd): Fontify the prompt as we do with other
- prompts.
+ * ido.el (ido-find-file-in-dir): Don't signal an error for
+ empty directories.
-2005-11-19 Ryan Yeske <rcyeske@gmail.com>
+ * add-log.el (change-log-mode): Set `show-trailing-whitespace'.
- * ffap.el (ffap-menu-rescan): Use inhibit-read-only instead of
- binding buffer-read-only to nil.
+ * desktop.el (desktop-read): Run `desktop-not-loaded-hook' in the
+ directory where the desktop file was found, as the docstring says.
+ (desktop-kill): Use `read-directory-name'.
-2005-11-19 Eli Zaretskii <eliz@gnu.org>
+2007-06-20 Alan Mackenzie <acm@muc.de>
- * complete.el (partial-completion-mode):
- Mention completion-auto-help in the doc string.
+ * progmodes/cc-mode.el (c-remove-any-local-eval-or-mode-variables):
+ When removing lines, also remove the \n. Correction of patch of
+ 2007-04-21.
- * man.el (Man-highlight-references): Doc fix. Reformat code in a
- more Lisp-ish way.
+2007-06-20 Martin Rudalics <rudalics@gmx.at>
-2005-11-19 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
+ * mouse.el (mouse-drag-mode-line-1): Quit mouse tracking when
+ event is not a cons cell. Do not unread drag-mouse-1 events.
+ Select right window in check whether space was stolen from
+ window above.
- * ls-lisp.el (ls-lisp-format-file-size): Format file size with 9
- digits, not 8, to avoid misalignment for files larger than 100MB.
+ * help-mode.el (help-make-xrefs): Adjust position of new forward
+ button.
-2005-11-19 Eli Zaretskii <eliz@gnu.org>
+2007-06-20 Riccardo Murri <riccardo.murri@gmail.com>
- * menu-bar.el (menu-bar-describe-menu) <list-keybindings>:
- Mention "keyboard shortcuts" in the help text.
+ * vc-bzr.el (vc-bzr-with-process-environment)
+ (vc-bzr-std-process-invocation): New macros.
+ (vc-bzr-command, vc-bzr-command*): Use them.
+ (vc-bzr-with-c-locale): Remove.
+ (vc-bzr-dir-state): Replace its use with vc-bzr-command.
+ (vc-bzr-buffer-nonblank-p): New function.
+ (vc-bzr-state-words): New const.
+ (vc-bzr-state): Look for `bzr status' keywords in output.
+ Display everything else as a warning message to the user.
+ Fix status report with bzr >= 0.15.
-2005-11-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-06-20 Dan Nicolaescu <dann@ics.uci.edu>
- * startup.el (fancy-splash-default-action): Discard only
- mouse-down and succeeding mouse-up events in the splash screen
- window so that drag-n-drop event can be processed.
+ * vc-hg.el (vc-hg-global-switches): Simplify.
+ (vc-hg-state): Handle more states.
+ (vc-hg-diff): Fix doc-string.
+ (vc-hg-register): New function.
+ (vc-hg-checkout): Likewise.
-2005-11-18 Chong Yidong <cyd@stupidchicken.com>
+2007-06-20 Reto Zimmermann <reto@gnu.org>
- * longlines.el (longlines-mode): Add hacks for mail-mode and
- message-mode.
+ * progmodes/vera-mode.el: New file.
-2005-11-18 Carsten Dominik <dominik@science.uva.nl>
+2007-06-19 Jay Belanger <jay.p.belanger@gmail.com>
- * textmodes/org.el (org-table-sort-lines): New command.
- (org-tbl-menu): Add entry for `org-table-sort-lines'.
- (org-add-file): Command removed, use `org-agenda-file-to-front'
- instead.
- (org-export-icalendar): Use `org-icalendar-combined-name'.
- (org-cycle-agenda-files, org-agenda-file-to-end)
- (org-agenda-file-to-front): New commands.
- (org-table-tab-jumps-over-hlines, org-export-html-style):
- New options.
- (org-table-next-field): Use `org-table-tab-jumps-over-hlines'.
- (org-at-table.el-p, org-set-autofill-regexps, org-html-protect):
+ * calc/calc.el (calc-multiplication-has-precendence):
+ New variable.
+ (math-standard-ops, math-standard-ops-p, math-expr-ops):
New functions.
- (org-fill-paragraph): Call `org-table-align' in tables.
- (org-mode): Call `org-set-autofill-regexps'.
- (org-export-as-html): Support for local handformatted lists.
- Modified to produce valid HTML 4.0. Use `org-export-html-style'.
- (org-export-local-list-max-depth): New option.
- (org-html-expand): Use `org-html-protect'.
-
-2005-11-18 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-install-speedbar-variables): Bind gud-pp
- to "p".
- (gdb): Move definition of gud-pp to...
-
- * progmodes/gdb-ui.el (gdb-ann3): ...here. Make it work in the
- speedbar.
- (gdb-find-watch-expression): New function.
-
-2005-11-17 Chong Yidong <cyd@stupidchicken.com>
-
- * faces.el (face-attribute, set-face-attribute): Mention existence
- of `:ignore-defface' setting in docstring.
-
-2005-11-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * simple.el (completion-setup-function): Fix last change.
-
-2005-11-17 John Paul Wallington <jpw@pobox.com>
-
- * ibuf-ext.el (ibuffer-interactive-filter-by-mode):
- Use `posn-set-point' instead of `mouse-set-point' because the
- latter is not fbound when configured without X.
-
- * comint.el (comint-insert-input): Likewise.
-
-2005-11-17 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (hard-newline): New variable.
- (sendmail-user-agent-compose, next-line): Use it.
-
- * mail/sendmail.el (mail-setup, mail-send, mail-insert-from-field)
- (sendmail-send-it, mail-do-fcc, mail-cc, mail-bcc, mail-fcc)
- (mail-mail-reply-to, mail-mail-followup-to)
- (mail-position-on-field, mail-signature, mail-yank-original)
- (mail-attach-file): Likewise.
-
- * mail/mailheader.el (mail-header-format)
- (mail-header-format-function): Likewise.
-
- * add-log.el (add-change-log-entry, change-log-merge): Likewise.
-
-2005-11-17 Juri Linkov <juri@jurta.org>
-
- * font-lock.el (font-lock-faces): Rename this defgroup from
- `font-lock-highlighting-faces'.
- (font-lock-comment-face, font-lock-comment-delimiter-face)
- (font-lock-string-face, font-lock-doc-face)
- (font-lock-keyword-face, font-lock-builtin-face)
- (font-lock-function-name-face, font-lock-variable-name-face)
- (font-lock-type-face, font-lock-constant-face)
- (font-lock-warning-face, font-lock-negation-char-face)
- (font-lock-preprocessor-face)
- (font-lock-regexp-grouping-backslash)
- (font-lock-regexp-grouping-construct): Rename :group from
- `font-lock-highlighting-faces' to `font-lock-faces'.
-
- * cus-edit.el (lisp, c, tex):
- * progmodes/ada-mode.el (ada):
- * progmodes/asm-mode.el (asm):
- * progmodes/cperl-mode.el (cperl-faces):
- * progmodes/cpp.el (cpp):
- * progmodes/dcl-mode.el (dcl):
- * progmodes/f90.el (f90):
- * progmodes/fortran.el (fortran):
- * progmodes/icon.el (icon):
- * progmodes/idlwave.el (idlwave-misc):
- * progmodes/m4-mode.el (m4):
- * progmodes/make-mode.el (makefile):
- * progmodes/meta-mode.el (meta-font):
- * progmodes/modula2.el (modula2):
- * progmodes/octave-mod.el (octave):
- * progmodes/pascal.el (pascal):
- * progmodes/perl-mode.el (perl):
- * progmodes/prolog.el (prolog):
- * progmodes/ps-mode.el (PostScript-edit):
- * progmodes/scheme.el (scheme):
- * progmodes/sh-script.el (sh-script):
- * progmodes/simula.el (simula):
- * progmodes/tcl.el (tcl):
- * textmodes/nroff-mode.el (nroff):
- * textmodes/reftex-vars.el (reftex-fontification-configurations):
- * textmodes/sgml-mode.el (sgml):
- * textmodes/texinfo.el (texinfo):
- Add :link (custom-group-link font-lock-faces) to defgroup.
-
- * hi-lock.el (hi-lock): Rename this defgroup from
- `hi-lock-interactive-text-highlighting'. Change parent group from
- `faces' to `font-lock'. Add link to the manual.
- (hi-lock-mode, hi-lock-file-patterns-range)
- (hi-lock-exclude-modes, hi-lock-faces): Rename :group from
- `hi-lock-interactive-text-highlighting' to `hi-lock'.
- (hi-lock-faces): Add :group `faces'.
-
- * cus-edit.el (custom-variable-prompt): Clarify the code.
-
- * faces.el (face-read-string): Set the default value arg of
- completing-read.
-
-2005-11-16 Luc Teirlinck <teirllm@auburn.edu>
-
- * rfn-eshadow.el (file-name-shadow-properties)
- (file-name-shadow-tty-properties, file-name-shadow-mode):
- Remove autoloads, because the file is now preloaded.
-
-2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * printing.el (easy-menu-intern): Don't define.
- (pr-get-symbol): Use easy-menu-intern only if defined.
-
- * simple.el (blink-matching-open): Simplify a bit.
- (completion-setup-function): Fix the case of partial-completion-mode
- when the minibuffer's contents start with "-".
- Obey completion-base-size-function even when
- minibuffer-completing-file-name is non-nil.
-
-2005-11-16 Richard M. Stallman <rms@gnu.org>
-
- * net/eudcb-ph.el (eudc-ph-open-session):
- Use set-process-query-on-exit-flag.
-
- * mail/smtpmail.el (smtpmail-send-it): Use insert-buffer-contents.
-
- * international/ucs-tables.el (ucs-set-table-for-input):
- Use make-local-variable, not make-variable-buffer-local.
-
- * emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
- Improve warning message text.
-
- * savehist.el (savehist-save-hook): Add :group.
-
- * menu-bar.el (menu-bar-help-menu):
- Rename Find Extra Packages to External Packages.
-
- * cus-edit.el (Custom-reset-standard): Verify that
- :custom-standard-value prop exists before calling it.
-
- * apropos.el (apropos-calc-scores): Use apropos-pattern.
-
-2005-11-16 Martin Rudalics <rudalics@gmx.at>
-
- * wid-edit.el (color): Enclose %t in %{...%}.
-
- * cus-edit.el (face): Enclose %t in %{...%}.
-
-2005-11-16 Hrvoje Niksic <hniksic@xemacs.org>
-
- * savehist.el (savehist-mode-hook): Re-add the var.
- (savehist-mode): Use it.
-
-2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/flyspell.el: Fix commenting convention.
- Remove unnecessary leading * in custom docstrings.
- (flyspell-emacs): Remove unused var.
- (flyspell-delete-region-overlays): Use remove-overlays.
- (flyspell-accept-buffer-local-defs): Use save-current-buffer.
- (flyspell-debug-signal-no-check, flyspell-debug-signal-changed-checked)
- (flyspell-debug-signal-pre-word-checked, flyspell-post-command-hook)
- (flyspell-debug-signal-word-checked): Use with-current-buffer.
- (make-flyspell-overlay): Don't locally reuse a global name.
- (flyspell-highlight-incorrect-region)
- (flyspell-highlight-duplicate-region): Use flyspell-unhighlight-at.
- (flyspell-check-previous-highlighted-word): Use flyspell-overlay-p.
- (flyspell-notify-misspell): Remove unused args `start' and `end'.
- (flyspell-word): Adjust call accordingly. Use ispell-send-string.
- Wrap calls to accept-process-output inside with-local-quit since it's
- often called from a post-command-hook.
- (flyspell-correct-word, flyspell-auto-correct-word):
- Use ispell-send-string.
- (flyspell-xemacs-popup): Remove unused arg `event'. Update call.
-
- * calendar/diary-lib.el (diary-list-entries): Also hide the
- terminating newline.
-
-2005-11-16 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex.el (reftex-use-fonts): Remove the check for
- window-system, to allow fonts on tty.
-
-2005-11-17 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-item-info): New function.
- (gud-install-speedbar-variables): Use it to display data type
- of watch expression as a tooltip in speedbar.
-
-2005-11-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * font-core.el (global-font-lock-mode): Add :version keyword,
- because default was changed.
-
- * jka-cmpr-hook.el (auto-compression-mode): Ditto.
-
- * startup.el (command-line): Use `custom-reevaluate-setting' for
- `file-name-shadow-mode'.
-
- * loadup.el: Preload rfn-eshadow.
-
- * rfn-eshadow.el (file-name-shadow-mode): Set :init-value to t.
- Add :version keyword.
- (file-name-shadow-properties, file-name-shadow-tty-properties)
- (file-name-shadow): Add :version keyword.
-
- * cus-edit.el (custom-add-parent-links): Fix bug whereby, for
- instance, `(fringe custom-face)' shadowed `(fringe custom-group)'
- in the custom-group property of the symbol frames and the fringe
- group got no link to its parent group frames.
- Doc fix.
-
-2005-11-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-stop-subjob): New function.
- (gud-menu-map, gud-tool-bar-map): Use it.
-
-2005-11-16 Kim F. Storm <storm@cua.dk>
-
- * progmodes/gud.el (gud-menu-map): Let [stop] stop program rather
- than kill it.
- (gud-tool-bar-map): Likewise. Move cont/until/finish buttons
- to a more useful/logical place.
-
-2005-11-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Make visibility of stop and
- go buttons complementary.
-
-2005-11-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * rfn-eshadow.el (rfn-eshadow-regexp): Remove.
- (rfn-eshadow-sifn-equal): New function.
- (rfn-eshadow-update-overlay): Rewrite to use substitute-in-file-name.
-
-2005-11-15 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-utils.el (viper-non-word-characters-reformed-vi):
- Quote `-' in string.
-
- * emulation/viper.el (viper-emacs-state-mode-list): Ensure that
- rcirc-mode buffers come up in Emacs state.
-
- * ediff-util.el (ediff-make-temp-file): Use proper file-name-handler
- operation.
-
-2005-11-15 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (term-termcap-format): Fix typos.
- (term-down): Fix the negative argument case.
-
-2005-11-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el: Remove face-alias left over from change on
- 2005-08-15.
- (gdb-ann3): New command gud-go.
- (menu): Accomodate gdb-mi.el.
- (gdb-assembler-custom): Make buffer of selected window current
- so that set-window-point works.
-
- * progmodes/gud.el (gud-menu-map, gud-tool-bar-map): Re-define
- buttons and include new ones.
-
-2005-11-16 Kim F. Storm <storm@cua.dk>
-
- * progmodes/gud.el (gud-tool-bar-item-visible-no-fringe): New function.
- (gud-menu-map): Use it.
-
-2005-11-14 Luc Teirlinck <teirllm@auburn.edu>
-
- * jka-cmpr-hook.el (auto-compression-mode): Enable it in a way
- that works correctly for Custom and that does not override a user
- who disables it.
-
- * help-mode.el (help-make-xrefs, help-xref-on-pp)
- (help-xref-interned, help-follow): Make hyperlinks for variables
- that are unbound, but have a non-nil variable-documentation property.
-
- * emacs-lisp/derived.el (define-derived-mode): Remove defvar for
- mode hook. (It conflicted with defcustoms for some mode hooks.)
- Use the `variable-documentation' property to give the mode hook a
- docstring and expand that docstring.
-
-2005-11-14 Hrvoje Niksic <hniksic@xemacs.org>
-
- * savehist.el (savehist-mode): Don't bother with
- `custom-set-minor-mode'.
- (savehist-coding-system): Check XEmacs version.
- (history-length): Declare also at run time.
- (savehist-mode): Don't emit a message. Don't run the minor mode hook.
- Don't set the customize state.
- (savehist-minibuffer-hook): Special case for when
- minibuffer-history-variable is equal to t.
-
-2005-11-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el (write-file): Refresh VC status.
-
- * calendar/diary-lib.el (diary-list-entries, diary-show-all-entries)
- (mark-diary-entries, make-diary-entry): Check default-major-mode rather
- than fundamental-mode to see if the mode was set.
-
-2005-11-14 Romain Francoise <romain@orebokech.com>
-
- * dired-x.el: If `vm-visit-folder' doesn't exist, define it as a
- dummy function in `eval-when-compile' to avoid compiler warning.
- Require `man' at compile time.
-
-2005-11-14 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-alg.el (calcFunc-write-out-power): Rename it to
- calcFunc-powerexpand.
- (math-write-out-power): Rename it to math-powerexpand; have it
- handle negative exponents.
- (calc-writeoutpower): Rename it to calc-powerexpand.
-
- * calc/calc-ext.el: Change calcFunc-writeoutpower and
- calc-writeoutpower to calcFunc-powerexpand and calc-powerexpand in
- autoloads.
- Add calcFunc-ldiv to autoloads.
-
- * calc/calc-arith.el (calcFunc-ldiv): New function.
-
- * calc/calc.el (calc-left-divide): New function.
-
-2005-11-14 Juri Linkov <juri@jurta.org>
-
- * cus-edit.el (custom-variable-prompt): Set the default value arg
- of completing-read.
-
- * cus-dep.el (custom-make-dependencies): Reverse the list of
- found dependencies.
-
-2005-11-14 Dan Nicolaescu <dann@ics.uci.edu>
-
- * menu-bar.el (menu-bar-options-menu): Delete "Syntax
- Highlighting" entry, it is on by default now.
- (menu-bar-options-save): Do not save global-font-lock-mode.
-
-2005-11-13 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-large-region):
- Call flyspell-accept-buffer-local-defs.
-
-2005-11-13 Agustin Martin <agustin.martin@hispalinux.es>
-
- * textmodes/flyspell.el (flyspell-notify-misspell):
- Fix misspelling of "Misspelling".
- (flyspell-process-localwords): New function.
- (flyspell-large-region): Call flyspell-process-localwords and
- flyspell-delete-region-overlays.
- (flyspell-delete-region-overlays): New function.
- (flyspell-delete-all-overlays): Call that.
-
-2005-11-13 Richard M. Stallman <rms@gnu.org>
-
- * help.el (help-for-help-internal): Improve doc of C-h a.
- (describe-key): Improve prompt; doc fix.
-
-2005-11-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-svn.el (vc-svn-registered): Catch all errors.
-
- * cus-dep.el (custom-make-dependencies): Typo.
-
-2005-11-13 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp-util.el (top): Fix compilation warning.
-
-2005-11-13 Kim F. Storm <storm@cua.dk>
-
- * help.el (help-for-help-internal): Fix `a' entry. Add `d' entry.
-
-2005-11-13 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Move parentheses (again).
- (gud-speedbar-buttons): Match on "const char *" too.
-
- * progmodes/gdb-ui.el (gdb-var-create-handler)
- (gdb-var-list-children-handler): Match on "const char *" too.
- (gdb-var-evaluate-expression-handler): Match on empty string.
- (gdb-var-update-handler): Only call
- gdb-var-evaluate-expression-handler when required.
-
-2005-11-13 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Revert to window-fringes for
- selected window. This still doesn't work for speedbar.
- (gud-speedbar-buttons): Handle string expressions properly.
-
- * progmodes/gdb-ui.el (gdb-var-evaluate-expression-handler)
- (gdb-var-create-handler): Handle string expressions properly.
- (gdb-var-list-children-regexp, gdb-var-list-children-handler):
- Handle string expressions properly. Move "type" field into regexp.
-
-2005-11-12 Karl Fogel <kfogel@red-bean.com>
-
- * bookmark.el (bookmark-maybe-message): New function to reduce
- code duplication: invokes `message' iff baud-rate is high enough.
- (bookmark-write-file): Use above instead of an inline conditional.
- (bookmark-load): Same.
-
-2005-11-12 Karl Fogel <kfogel@red-bean.com>
-
- * bookmark.el (bookmark-write-file): Don't visit the destination
- file, just write the data to it using write-region. This is
- similar to saveplace.el at 2005-05-29T08:36:26Z!rms@gnu.org, but with an additional
- change to avoid visiting the file in the first place.
-
-2005-11-12 Chong Yidong <cyd@stupidchicken.com>
-
- * hi-lock.el (hi-lock-mode): Set the default value of
- font-lock-defaults.
-
-2005-11-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * find-lisp.el (find-lisp-find-dired-insert-file): Pass `string'
- arg to `file-attributes'.
- (find-lisp-format): The UID and GID can now be strings.
-
-2005-11-12 Kim F. Storm <storm@cua.dk>
-
- * help.el (help-map): Bind C-h d to apropos-documentation.
-
- * simple.el (what-cursor-position): Print (EOB) instead of (100%)
- when point is at end-of-buffer.
-
- * apropos.el (apropos-match-face): Doc fix.
- (apropos-sort-by-scores): Add new choice `verbose'.
- (apropos-documentation-sort-by-scores): New defcustom.
- (apropos-pattern): Now contains the pattern entered by the user.
- (apropos-pattern-quoted): New defvar.
- (apropos-regexp): New defvar, containing the regexp corresponding
- to apropos-pattern.
- (apropos-all-words-regexp): Rename from apropos-all-regexp.
- (apropos-read-pattern): New defun. Use it to read pattern arg in
- interactive calls; returns list of words for a word list, and
- string for a regexp.
- (apropos-parse-pattern): Rename from apropos-rewrite-regexp. Now
- parses a list of words or regexp as returned by apropos-read-pattern.
- (apropos-calc-scores): Return nil if apropos-regexp doesn't match.
- (apropos-score-doc): Return a very high score if the string
- entered by the user matches literally.
- (apropos-variable): Doc fix. Use apropos-read-pattern.
- (apropos-command): Doc fix. Use apropos-read-pattern and
- apropos-parse-pattern. Call apropos-print with nosubst=t.
- (apropos, apropos-value): Doc fix. Use apropos-read-pattern and
- apropos-parse-pattern.
- (apropos-documentation): Doc fix. Use apropos-read-pattern and
- apropos-parse-pattern. Locally bind apropos-sort-by-scores to
- apropos-documentation-sort-by-scores. Call apropos-print with
- nosubst=t.
- (apropos-documentation-internal): Pass doc string through
- substitute-key-definition before adding text properties.
- Highlight substring matching literal user input if possible.
- (apropos-documentation-check-doc-file): Remove locals beg and end.
- Fix calculation of score (as added twice). Pass doc string through
- substitute-key-definition before adding text properties.
- (apropos-documentation-check-elc-file): Pass doc string through
- substitute-key-definition before adding text properties.
- Highlight substring matching literal user input if possible.
- (apropos-print): Add new arg NOSUBST; if set, command and variable
- doc strings have already been passed through substitute-key-definition.
- Add code to handle apropos-accumulator items without score element
- for backwards compatibility (e.g. with woman package).
- Only show scores if apropos-sort-by-scores is `verbose'.
-
-2005-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * jka-cmpr-hook.el (jka-compr-install): Use push and dolist.
- Add jka-compr-load-suffixes to load-suffixes.
-
- * jka-compr.el: Require jka-cmpr-hook.
- (jka-compr-info-compress-message, jka-compr-info-compress-program)
- (jka-compr-info-compress-args, jka-compr-info-uncompress-message)
- (jka-compr-info-uncompress-program, jka-compr-info-uncompress-args)
- (jka-compr-info-can-append, jka-compr-info-strip-extension)
- (jka-compr-info-file-magic-bytes, jka-compr-get-compression-info)
- (jka-compr-info-regexp): Remove. Provided by jka-cmpr-hook.
- (jka-compr-uninstall): Remove entries from
- jka-compr-added-to-file-coding-system-alist after they are used.
- (jka-compr-error): Remove unused var `curbuf'.
- (jka-compr-file-local-copy): Remove unused var `notfound'.
-
-2005-11-10 Romain Francoise <romain@orebokech.com>
-
- * apropos.el (apropos-calc-scores): Use `apropos-pattern'.
-
-2005-11-11 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Move parentheses.
- (gdb): New command gud-pv.
-
-2005-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * tar-mode.el: Remove spurious or unnecessary leading stars
- in docstrings.
- (tar-header-block-tokenize): Also obey default-file-name-coding-system.
- (tar-parse-octal-integer-safe): Use mapc.
- (tar-header-block-summarize): Remove unused var `ck'.
- (tar-summarize-buffer): Don't clear the modified-p bit if it wasn't
- cleared before. Obey default-enable-multibyte-characters.
- Use mapconcat. Simplify setting of tar-header-offset.
- (tar-mode-map): Move initialization inside delcaration.
- (tar-flag-deleted): Use `abs'.
- (tar-expunge-internal): Remove unused var `line'.
- (tar-expunge-internal): Don't hardcode point-min==1.
- (tar-expunge): Widen while doing set-buffer-multibyte.
- (tar-rename-entry): Use file-name-coding-system.
- (tar-alter-one-field): Don't hardcode point-min==1.
- (tar-subfile-save-buffer): string-as-unibyte works on unibyte strings.
- (tar-pad-to-blocksize): Don't hardcode point-min==1. Clarify the code.
-
-2005-11-10 Masatake YAMATO <jet@gyve.org>
-
- * add-log.el (add-log-current-defun): Handle class::method
- notation of c++. Fix incorrect comment.
-
-2005-11-10 Alan Mackenzie <acm@muc.de>
-
- * help-fns.el (describe-variable): Make C-h v work when a variable
- has variable documentation yet is unbound.
-
-2005-11-10 Masatake YAMATO <jet@gyve.org>
-
- * man.el (Man-highlight-references): Set an empty
- string to `Man-arguments' if it is nil.
- Suggested by Reiner Steib <Reiner.Steib@gmx.de>.
-
-2005-11-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * Makefile.in (mh-loaddefs.el, loaddefs.el): Better follow the
- commenting conventions.
-
- * cus-dep.el (custom-make-dependencies): Simplify.
- Better follow the commenting conventions.
-
-2005-11-09 Richard M. Stallman <rms@gnu.org>
-
- * apropos.el (apropos-pattern): Rename from apropos-regexp.
- (apropos-orig-pattern): Rename from apropos-orig-regexp.
- All uses changed.
- (apropos-rewrite-regexp): Doc fix.
- (apropos-variable, apropos-command, apropos, apropos-value):
- Change prompt; carry through the argument renaming.
-
-2005-11-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * find-lisp.el: Require dired.
- (find-lisp-find-dired-internal): Do not call
- `abbreviate-file-name' on DIR.
-
-2005-11-10 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb): Make gud-pp use user-defined command pp1.
-
-2005-11-09 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Ensure tool-bar is constant
- when using the speedbar.
- (gdb): New command gud-pp.
- (gud-menu-map, gud-tool-bar-map): Put it on the tool bar.
-
-2005-11-09 Juri Linkov <juri@jurta.org>
-
- * replace.el (occur-excluded-properties): New defcustom.
- (occur-1, occur-engine, occur-accumulate-lines): Use it.
-
-2005-11-08 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-units.el (math-convert-units): Replace any composite
- unit by its definition.
-
-2005-11-08 Lars Hansen <larsh@soem.dk>
-
- * emacs-lisp/autoload.el (update-directory-autoloads):
- Add obsolete function alias.
-
-2005-11-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/lisp-mode.el (lisp-mode-variables): Don't set
- comment-indent-function.
- (lisp-comment-indent): Replace by an alias for comment-indent-default.
-
- * reveal.el (reveal-post-command): Rework the handling of
- reveal-open-spots, so as to be more reliable. There were several
- tricky corner cases where an open spot might be lost, or where
- a closed spot might end up on the list of open spots.
- Only reveal text that's ellipsised.
-
-2005-11-07 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-export-as-html): Remove bogus (debug) form.
-
-2005-11-07 John Paul Wallington <jpw@gnu.org>
-
- * ibuffer.el (ibuffer): Search iconified frames too when
- getting Ibuffer buffer's window.
-
-2005-11-06 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/compile.el (compilation-internal-error-properties):
- save-excursion around the computation of MARKER.
-
-2005-11-06 Piet van Oostrum <piet@cs.uu.nl>
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- flyspell-get-word returns a list, not just a string.
-
-2005-11-06 John Paul Wallington <jpw@pobox.com>
-
- * ibuffer.el (ibuffer): Search all visible frames when getting
- Ibuffer buffer's window.
-
-2005-11-07 Masatake YAMATO <jet@gyve.org>
-
- * man.el (Man-reference-regexp): Accept spaces between
- `Man-name-regexp' and `Man-section-regexp'.
- (Man-apropos-regexp): New variable.
- (Man-abstract-xref-man-page): Use value for `Man-target-string'
- if available.
- (Man-highlight-references, Man-highlight-references0):
- Handle the case when `Man-arguments' includes "-k".
- (Man-highlight-references0): Rename the argument `TARGET-POS' to
- `TARGET'. `TARGET' can be a number, function or nil.
-
-2005-11-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-handler, gdb-var-delete)
- (gdb-edit-value, gdb-speedbar-expand-node, gdb-get-create-buffer)
- (gdb-breakpoints-mode, gdb-toggle-breakpoint, gdb-delete-breakpoint)
- (gdb-goto-breakpoint, gdb-frames-mode, gdb-registers-mode)
- (gdb-locals-mode, gdb-find-file-hook): Use buffer-local-value.
- (gdb-send-item): Use buffer-local-value and simplify.
-
-2005-11-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * startup.el (command-line): Use `custom-reevaluate-setting' for
- `global-font-lock-mode'.
-
- * font-core.el (global-font-lock-mode): Enable `global-font-lock-mode'
- by default, except in batch mode or when the -D option is given.
-
- * emacs-lisp/easy-mmode.el (define-global-minor-mode): Pass all
- specified keyword args on to `define-minor-mode'. Update docstring.
-
-2005-11-05 Romain Francoise <romain@orebokech.com>
-
- * replace.el (occur-engine): Add marker at end of line, too.
-
-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)
- (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
- (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
- (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for
- pgg-add-passphrase-to-cache function.
-
- * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region)
- (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric)
- (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt)
- (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional PASSPHRASE
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
- (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache
- function.
-
-2005-11-04 Dan Nicolaescu <dann@ics.uci.edu>
-
- * font-lock.el: Don't deal with font-lock-face-attributes here,
- move the code ...
-
- * startup.el (command-line): ... here. Use face-spec-set instead
- of custom-declare-face.
-
- * faces.el (face-spec-set): Reset the face if spec is not nil.
-
-2005-11-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * newcomment.el (comment-region-internal): Box more tightly in the
- common case where there's no TAB in the boxed text.
-
-2005-11-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * info.el (info-tool-bar-map): Use images prev-node, next-node and
- up-node.
-
-2005-11-04 Ulf Jasper <ulf.jasper@web.de>
-
- * net/newsticker.el: Commentary updated. Code formatting changed.
- (newsticker-version): Change to "1.9".
- (newsticker, newsticker-feed): Doc fix.
- (newsticker-url-list): Doc fix. Add option "Weekly".
- (newsticker-retrieval-interval): Add option "Weekly".
- (newsticker-headline-processing): Doc fix.
- (newsticker-auto-mark-filter): Remove.
- (newsticker-auto-mark-filter-list): New.
- (newsticker-layout, newsticker-sort-method): Doc fix.
- (newsticker-hide-old-items-in-newsticker-buffer)
- (newsticker-heading-format, newsticker-item-format)
- (newsticker-desc-format): Doc fix.
- (newsticker-show-all-rss-elements): Remove.
- (newsticker-show-all-news-elements): New.
- (newsticker-faces, newsticker-ticker): Doc fix.
- (remove-from-invisibility-spec): Code formatting.
- (newsticker--process-ids): New.
- (newsticker-mode): Doc fix.
- (newsticker-mode): Change mode-line-format.
- (newsticker-start): Remove debug output.
- (newsticker-start-ticker): Doc fix. Add autoload cookie.
- (newsticker-w3m-show-inline-images): Code formatting.
- (newsticker-next-item): Call `force-mode-line-update'.
- (newsticker-previous-item): Call `force-mode-line-update'.
- (newsticker-next-feed): Call `force-mode-line-update'.
- (newsticker-previous-feed): Call `force-mode-line-update'.
- (newsticker-mark-all-items-at-point-as-read): Code formatting.
- (newsticker-show-old-items): Do not show descs.
- (newsticker-hide-entry): Hide too much.
- (newsticker-hide-entry, newsticker-show-entry)
- (newsticker-toggle-auto-narrow-to-feed): Code formatting.
- (newsticker-set-auto-narrow-to-feed): Update buffer immediately.
- (newsticker-toggle-auto-narrow-to-item): Code formatting.
- (newsticker-set-auto-narrow-to-item): Update buffer immediately.
- (newsticker-running-p, newsticker-ticker-running-p): Autoload cookie.
- (newsticker-get-news): Call `force-mode-line-update'.
- Collect process ids.
- (newsticker--sentinel): Change coding system handling.
- Move image retrieval to new functions newsticker--get-logo-url-*.
- Move feed parsing to new functions newsticker--parse-*.
- Update list of process ids.
- (newsticker--get-logo-url-atom-1.0, newsticker--get-logo-url-atom-0.3)
- (newsticker--get-logo-url-rss-2.0, newsticker--get-logo-url-rss-1.0)
- (newsticker--get-logo-url-rss-0.92, newsticker--get-logo-url-rss-0.91)
- (newsticker--parse-atom-0.3, newsticker--parse-atom-1.0)
- (newsticker--parse-rss-0.91, newsticker--parse-rss-0.92)
- (newsticker--parse-rss-1.0, newsticker--parse-rss-2.0)
- (newsticker--parse-generic-feed, newsticker--parse-generic-items): New.
- (newsticker--decode-coding-string): Remove.
- (newsticker--decode-numeric-entities): Check input. Format code.
- (newsticker--remove-whitespace): Check input.
- (newsticker--do-forget-preformatted): Doc fix.
- (newsticker--decode-rfc822-date): Allow for missing time.
- (newsticker--update-process-ids): New.
- (newsticker--image-sentinel): Change comment.
- (newsticker--image-read): Change error message.
- (newsticker--imenu-goto): Doc fix. Show headline title.
- (newsticker--buffer-set-uptodate): Call `force-mode-line-update'.
- (newsticker--buffer-do-insert-text): Clean whitespace in
- html-rendered headline title. Code formatting.
- Call `newsticker--buffer-print-extra-elements'.
- (newsticker--buffer-print-extra-element): Remove.
- (newsticker--buffer-print-extra-elements): New.
- (newsticker--buffer-do-print-extra-element): New.
- (newsticker--buffer-insert-enclosure): Doc fix. Use MBytes for
- large sizes.
- (newsticker--run-auto-mark-filter)
- (newsticker--do-run-auto-mark-filter):
- Use `newsticker-auto-mark-filter-list'.
-
-2005-11-04 Ryan Yeske <rcyeske@gmail.com>
-
- * net/rcirc.el: Use split-string OMIT-NULLS argument.
- (rcirc-print): Force redisplay before running hooks. Do long
- buffer truncation after making new text read-only. Deal with nil
- text when decoding strings. If TARGET is nil, use either the
- currently selected buffer, if it is an rcirc buffer and of the
- same process or the process buffer.
- (rcirc-mode): Remove header-line. Recompute short buffer names.
- Initialize rcirc-buffer-alist here instead of rcirc-get-buffer-create.
- (rcirc-short-buffer-name): Add variable.
- (rcirc-kill-buffer-hook): Recompute short buffer names.
- Remove nick from private channel.
- (rcirc-send-input): Send command text to current-buffer.
- Don't clear overlay arrow here.
- (rcirc-short-buffer-name): Return a short buffer name.
- (rcirc-update-short-buffer-names, rcirc-abbreviate)
- (rcirc-rebuild-tree, rcirc-make-trees): Add functions to generate
- buffer-name abbreviations.
- (rcirc-kill-buffer-hook-1): Split to make debugging easier.
- Do not touch nick-table when killing a parted channel.
- (rcirc-window-configuration-change): Rename from rcirc-update-activity.
- Clear arrow from current buffer if it is now hidden.
- (rcirc-current-buffer): Add variable.
- (rcirc-my-nick, rcirc-other-nick, rcirc-server)
- (rcirc-nick-in-message, rcirc-prompt, rcirc-mode-line-nick):
- Remove -face from names.
- (rcirc-update-activity-string): Print "DND" when globally ignoring
- activity.
- (rcirc-ignore-buffer-activity-flag): Rename from
- rcirc-ignore-channel-activity.
- (rcirc-ignore-all-activity-flag): Doc fix.
- (rcirc-channels): Remove variable.
- (rcirc-kill-buffer-hook):
- (rcirc-get-buffer-create): Add nick to private channel.
- (rcirc-multiline-edit-submit): Remove tabs.
- (rcirc-put-nick-channel, rcirc-channel-nicks): Look up nicks case
- folded.
- (rcirc-remove-nick-channel): Bug fix.
- (rcirc-toggle-ignore-buffer-activity): Rename from
- rcirc-toggle-ignore-channel-activity.
- (rcirc-record-activity): Add buffers to the front of the list.
- (rcirc-update-activity): Remove killed buffers from list.
- (rcirc-process-server-response-1): Remove last argument if it is
- null before calling handler.
- (rcirc): Add "rcirc" defcustom prefix.
- (rcirc-prompt): Simplify default prompt.
- Use custom-initialize-default.
- (rcirc-private-chats): Remove variable.
- (rcirc-prompt): Change initialization.
- (rcirc-version): Remove function.
- (rcirc-id-string): Add constant.
- (rcirc-last-buffer): Remove variable.
- (rcirc-buffer-alist): Add variable.
- (rcirc-connect): Update variable setup.
- (rcirc-sentinel, rcirc-update-prompt): Use `rcirc-buffer-alist'.
- (rcirc-trap-errors-flag): Rename from `rcirc-trap-errors' change
- default.
- (rcirc-handler-generic): Trigger activity.
- (rcirc-send-message): Create the buffor of the target.
- (rcirc-generate-new-buffer-name): Rename from `rcirc-get-buffer-name'.
- (rcirc-get-buffer): Just return nil if there is no matching buffer.
- (rcirc-multiline-edit-cancel): Remove function.
- (rcirc-set-last-buffer): Remove function.
- (rcirc-get-any-buffer): Add function.
- (rcirc-join-channels): Don't print /join text.
- (rcirc-toggle-ignore-channel-activity): Add and update echo area
- messages.
- (rcirc-cmd-ctcp): Use rcirc-send-string to send request.
- (rcirc-handler-NOTICE): Recognize CTCP responses.
- (rcirc-handler-332, rcirc-handler-332): Use a temp buffer for
- constructing TOPIC string for buffers we are not JOINed.
- (rcirc-handler-CTCP-response): Add handler.
- (rcirc-multiline-edit-submit): Restore the window-configuration
- before adjusting point.
- (rcirc): Add customization group.
- (rcirc-server, rcirc-port, rcirc-nick, rcirc-user-name)
- (rcirc-user-full-name, rcirc-startup-channels-alist)
- (rcirc-fill-flag, rcirc-fill-column, rcirc-fill-prefix)
- (rcirc-ignore-all-activity-flag, rcirc-time-format)
- (rcirc-input-ring-size, rcirc-read-only-flag)
- (rcirc-buffer-maximum-lines, rcirc-authinfo-file-name)
- (rcirc-auto-authenticate-flag, rcirc-prompt, rcirc-print-hooks):
- Change defvar to defcustom.
- (rcirc-update-prompt): Add optional ALL arg, which will update
- prompts in all rcirc buffers. Regexp quote replacement text.
- (rcirc-fill-column): Accept frame-width as a value.
- (rcirc-set-changed): Add function.
- (rcirc-next-active-buffer): Write more meaningful messages.
- (rcirc-faces): Add customization group.
- (rcirc-my-nick-face, rcirc-other-nick-face, rcirc-server-face)
- (rcirc-nick-in-message-face, rcirc-prompt-face)
- (rcirc-mode-line-nick-face): Move into rcirc-faces group.
- (with-rcirc-process-buffer): Move before first usage.
- (rcirc-debug-buffer): Rename from `rcirc-log-buffer'.
- (rcirc-debug-flag): Rename from `rcirc-log-p'.
- (rcirc-debug): Rename from `rcirc-log'.
- (rcirc-format-response-string): Do not print `-' chars for a
- NOTICE with no sender. Simplify output of server responses.
-
-2005-11-04 Henrik Enberg <henrik.enberg@telia.com>
-
- (rcirc-browse-url-map, rcirc-browse-url-at-point)
- (rcirc-browse-url-at-mouse, rcirc-mangle-text):
- Make urls mouse and RET clickable.
-
-2005-11-04 Henrik Enberg <henrik.enberg@telia.com>
-
- * mail/rmailout.el (rmail-output-to-rmail-file, rmail-output): Doc fix.
-
-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)
- (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
- (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
- (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for
- pgg-add-passphrase-to-cache function.
-
- * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region)
- (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric)
- (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt)
- (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional PASSPHRASE
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
- (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache
- function.
-
-2005-11-04 Edward O'Connor <hober0@gmail.com> (tiny change)
-
- * net/goto-addr.el (goto-address-url-regexp): Remove `data:' URLs
- from goto-address-url-regexp.
-
-2005-11-04 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-read-date, org-goto-calendar)
- (org-recenter-calendar, org-agenda-goto-calendar):
- Temporarily clear `calendar-move-hook'.
-
-2005-11-04 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-merg.el (ediff-merge-region-is-non-clash):
- Return t, if not merging.
-
- * ediff-util.el (ediff-previous-difference): Don't skip regions that
- have merge clashes.
-
-2005-11-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event):
- Undo previous change.
-
- * startup.el (command-line): Use `custom-reevaluate-setting' for
- mouse-wheel-down-event and mouse-wheel-up-event. Don't call
- tty-register-default-colors on Mac.
-
-2005-11-04 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-buffer-type): Remove duplicate declaration.
- (gdb-buffer-type): Make it automatically buffer local...
- (gdb-get-create-buffer): ...and set it accordingly.
- (gdb-frame-gdb-buffer, gdb-display-gdb-buffer): Make these
- actually work.
-
-2005-11-03 Dan Nicolaescu <dann@ics.uci.edu>
-
- * font-lock.el (font-lock-warning-face): Use the more vivid red1,
- not red.
-
-2005-11-04 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gud-watch): Use save-selected-window in
- case GUD buffer is not visible.
- (gdb-goto-breakpoint): Try to force display in source buffer.
- (gdb-frame-gdb-buffer): Copy other similar functions.
- (gdb-restore-windows): Don't display source if not asked for.
- (gdb-assembler-buffer-name): Don't capitalise.
-
-2005-11-03 Richard M. Stallman <rms@gnu.org>
-
- * wid-edit.el (key-sequence): New widget type.
-
- * simple.el (set-mark-command-repeat-pop): New variable.
- (set-mark-command): Only interpret plan C-@ after a pop as a pop
- if set-mark-command-repeat-pop is true.
-
- * info.el (Info-fontify-node): Don't display extra "see" if there
- already is one here.
-
- * mouse.el: Fix special handling of DEL after dragging a region:
- (mouse-drag-region-1): Treat mouse-set-region like mouse-set-point.
- (mouse-region-delete-keys): Change to defcustom. Add [backspace].
-
- * mail/feedmail.el: Use insert-buffer-substring, not insert-buffer.
-
- * textmodes/ispell.el (ispell-command-loop): Change `i' description
- not to assume it pertains to an affix.
-
- * textmodes/flyspell.el (flyspell-post-command-hook):
- Bind deactivate-mark to prevent deactivation.
-
-2005-11-03 Lars Hansen <larsh@soem.dk>
-
- * dired-x.el: Add menu bindings for dired-do-find-marked-files,
- dired-do-relsymlink, dired-flag-extension, dired-mark-extension,
- dired-mark-omitted, dired-do-relsymlink-regexp, dired-omit-mode.
-
-2005-11-03 Romain Francoise <romain@orebokech.com>
-
- * net/eudcb-mab.el: Now part of GNU Emacs. Update FSF's address.
- Update copyright years.
-
-2005-11-03 Sam Steingold <sds@gnu.org>
-
- * mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event):
- Use system-type instead of window-system because window-system is not
- correctly defined during loadup.
-
-2005-11-02 Mark A. Hershberger <mah@everybody.org>
-
- * xml.el (xml-syntax-table): Allow xml.el to compile in XEmacs.
- (xml-parse-tag): Join strings separated by a comment properly.
-
-2005-11-02 Andreas Schwab <schwab@suse.de>
-
- * emacs-lisp/byte-opt.el (byte-optimize-pure-func): Fix last fix.
-
-2005-11-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/byte-opt.el (string-to-syntax): Mark it as pure.
- (byte-optimize-pure-func): Quote the eval'd value.
-
- * progmodes/perl-mode.el (perl-font-lock-special-syntactic-constructs):
- Rename from perl-font-lock-syntactic-face-function.
- Change the calling convention so it can be used as a font-lock MATCHER.
- Do the parse-partial-sexp loop outselves.
- (perl-font-lock-syntactic-keywords): Use it.
- (perl-mode): Don't set font-lock-syntactic-face-function any more.
-
-2005-11-02 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-mouse-until): Make it work in the
- disassembly buffer too.
- (gdb-exited): Remove overlay arrows when execution has finished.
- (gdb-info-frames-custom, gdb-info-threads-custom)
- (gdb-info-registers-custom): Don't add inappropriate text
- properties if inferior is not active.
-
-2005-11-02 Glenn Morris <rgm@gnu.org>
-
- * progmodes/fortran.el (fortran-blink-match):
- Use `blink-matching-delay'.
-
-2005-11-02 John Mongan <jmongan@mccammon.ucsd.edu> (tiny change)
-
- * progmodes/f90.el (f90-match-end): Use `blink-matching-delay'.
-
-2005-11-02 Lars Hansen <larsh@soem.dk>
-
- * net/tramp.el (tramp-action-out-of-band): Handle scp message
- "Permission denied".
-
-2005-11-01 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- Pass nil to flyspell-get-word.
-
-2005-11-02 Kim F. Storm <storm@cua.dk>
-
- * menu-bar.el (menu-bar-options-menu): Show "Shift Movement (CUA)"
- item instead of "C-x/C-c/C-v (CUA)" if cua-enable-cua-keys is nil.
-
-2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * calendar/cal-menu.el (date, event): Don't declare as dynamic-var.
- (calendar-mouse-holidays, calendar-mouse-view-diary-entries)
- (calendar-mouse-print-dates): Add optional `event' argument.
- Update interactive-spec.
- (calendar-mouse-cal-tex-menu, cal-tex-mouse-filofax):
- Use `calendar-event-to-date' instead of `event'.
-
-2005-11-02 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/ld-script.el (ld-script-builtins):
- Add more words: "DATA_SEGMENT_ALIGN", "DATA_SEGMENT_END",
- "DATA_SEGMENT_RELRO_END", "LENGTH", "ORIGIN", and "SEGMENT_START".
- (auto-mode-alist): Accept .ld, .lds, ld.in and .lds.in.
-
-2005-11-01 Romain Francoise <romain@orebokech.com>
-
- * vc-sccs.el: Update copyright year.
- * ezimage.el: Likewise.
-
-2005-11-01 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp> (tiny change)
-
- * info.el (Info-fontify-node): Use `string-width' for fontifying
- underlined titles.
-
-2005-11-01 Juri Linkov <juri@jurta.org>
-
- * info.el (Info-fontify-node): Downcase node header keywords Node,
- Prev, Next, Up before comparison.
- (Info-history): Insert absolute directory name, and put invisible
- property on it.
-
-2005-11-01 Juri Linkov <juri@jurta.org>
-
- * info.el (Info-file-supports-index-cookies): New variable.
- (Info-find-node-2): Check makeinfo version for index cookie support.
- (Info-index-nodes): Search for nodes with index cookies only when
- Info-file-supports-index-cookies is t. Otherwise, search nodes
- with "Index" in the node name.
- (Info-index-node): Search index cookie in the current node only when
- Info-file-supports-index-cookies is t. Otherwise, check the word
- "Index" in the node name.
- (Info-find-emacs-command-nodes): Remove code that searches nodes
- with "Index" node name in the top menu.
-
-2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/scheme.el (scheme-mode-variables): Use the default
- comment-indent-function.
-
- * faces.el (face-attribute): Handle the case where a face inherits from
- a non-existent face.
-
- * simple.el (eval-expression-print-format): Use lisp-readable syntax
- for octal and hexa output, and merge the char into the paren.
- (kill-new): Use push.
- (copy-to-buffer): Use with-current-buffer.
- (completion-setup-function): Move code in loop to remove redundancy.
- (minibuffer-local-must-match-map): Don't add bindings that duplicate
- those inherited from minibuffer-local-completion-map.
-
- * savehist.el (savehist-mode) <defcustom>:
- Use custom-set-minor-mode if available.
- (savehist-mode) <defun>: Run the minor mode hook, set the custom state
- and emit a message if applicable.
-
-2005-11-01 Hrvoje Niksic <hniksic@xemacs.org>
-
- * savehist.el: Sync up to version 19.
- (savehist-mode): New minor mode.
- (savehist-file): Use ~/.emacs.d or ~/.xemacs if available.
- (savehist-length): Remove (use history-length instead).
- (savehist-file-modes): Rename from savehist-modes.
- (savehist-save-hook, savehist-loaded): New vars.
- (savehist-load): Use savehist-mode. Try to smooth up transition from
- old format to new format.
- (savehist-install): Allow savehist-autosave-interval to be nil.
- (savehist-save): Run the new hook. Be more careful to only trim the
- history variables.
- (savehist-trim-history): New fun. Replaces savehist-process-for-saving.
- (savehist-printable): Print into a buffer rather than char-by-char.
-
-2005-11-01 John Wiegley <johnw@newartisans.com>
-
- * iswitchb.el (iswitchb-define-mode-map): Re-enable the
- toggle-ignore keybinding (C-a). The author said it had been
- disabled much earlier due to a possible incompatibility, but after
- many months of usage I have encountered no problems (and it is a
- rather useful option, especially for switching to " *temp*").
-
- * net/eudcb-mab.el (eudc-mab-query-internal): Add backend
- support for OS/X's AddressBook, by calling out to the open source
- program "contacts" (installable through Fink).
-
- * net/eudc.el (eudc-expand-inline): If the
- `eudc-multiple-match-handling-method' is set to `all', delete the
- query string before inserting the query result.
-
- * eshell/em-ls.el (eshell-do-ls): Add no-op support for --dired
- flag, to prevent Eshell from using the system ls when
- `eshell-ls-insert-directory' is in used.
- (eshell-ls-insert-directory): Disable font-lock in directory
- buffer so that Eshell's own fontification is seen. This broke
- recently due to changes in font-lock, so this goes back to version
- 21 behavior.
-
-2005-11-01 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-use-inferior-io-buffer): New function.
- (menu, toggle-gdb-use-inferior-io-buffer): Get rid of defadvice.
- (gdb-many-windows): Doc fix.
-
-2005-10-31 Romain Francoise <romain@orebokech.com>
-
- * help-fns.el (describe-simplify-lib-file-name): Add autoload cookie.
-
-2005-10-31 Dan Nicolaescu <dann@ics.uci.edu>
-
- * loadup.el: Load emacs-lisp/syntax, font-lock and jit-lock so
- that global-font-lock-mode can be enabled by default.
-
- * font-lock.el (font-lock-keywords, font-lock-mode-internal)
- (font-lock-add-keywords, font-lock-remove-keywords)
- (font-lock-fontify-buffer): Remove autoload cookies.
-
- * jit-lock.el (jit-lock-register): Likewise.
-
- * emacs-lisp/syntax.el (syntax-ppss): Likewise.
-
-2005-10-31 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-many-windows): Leave window configuration
- intact if there is no gud-comint-buffer.
-
-2005-10-31 Luc Teirlinck <teirllm@auburn.edu>
-
- * progmodes/gud.el (gud-filter): Use comint-update-fence to delete
- old prompt comint-prompt-read-only is t and GDB commands are
- issued from tool bar etc.
-
-2005-10-31 Masatake YAMATO <jet@gyve.org>
-
- * vc.el (vc-directory-exclusion-list): Add "{arch}".
-
-2005-10-30 Chong Yidong <cyd@stupidchicken.com>
-
- * thumbs.el (thumbs-thumbsdir): Default to ~/.emacs.d/thumbs.
- (thumbs-thumbsdir): Make .emacs.d if it does not exist.
-
-2005-10-30 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-chunksize): Escape parentheses in docstring
- starting at beginning of line. Fontification is messed up when
- `open-paren-in-column-0-is-defun-start' set to t.
- Reported by John Paul Wallington <jpw@pobox.com>.
-
-2005-10-30 Luc Teirlinck <teirllm@auburn.edu>
-
- * comint.el (comint-send-input): Call `comint-update-fence' when
- `comint-process-echoes' and `comint-prompt-read-only' are both
- non-nil, to avoid leftover read-only newline.
-
-2005-10-30 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- Detect when WORD can't be checked properly because
- flyspell-get-word finds just part of it, and move on.
-
- * textmodes/ispell.el (ispell-dictionary-alist-5): Add . as
- boundarychar for Polish.
- (ispell-dictionary-alist-4): Add . as boundarychar for Italian.
- (ispell-dictionary-alist-3): Add . and @ as boundarychars for French.
-
-2005-10-31 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-tooltip-print-1): Fix regexp.
- (gdb-registers-font-lock-keywords): Delete.
- (gdb-registers-mode): Don't fontify.
- (gdb-info-registers-custom): Use text properties instead as, in
- future, changed register values will use font-lock-warning-face.
- (gdb-local-font-lock-keywords): Rename to...
- (gdb-locals-font-lock-keywords): ...for consistency.
-
-2005-10-30 Andre Spiegel <spiegel@gnu.org>
-
- * vc.el (vc-switch-backend): Better error message if the buffer is
- not visiting a file under version control.
-
- * vc-cvs.el (vc-cvs-delete-file): Commit the file after removing it.
-
-2005-10-29 Chong Yidong <cyd@stupidchicken.com>
-
- * startup.el (command-line): Use ~/.emacs.d/init.el instead of
- ~/.emacs.d/.emacs.
-
-2005-10-29 Richard M. Stallman <rms@gnu.org>
-
- * replace.el (occur-mode-mouse-goto): Always go to other window.
- (occur-mode-goto-occurrence): Always switch in same window.
-
- * simple.el (undo): Display message at end, not at start.
-
- * emacs-lisp/timer.el (timer-activate, timer-activate-when-idle):
- New arg REUSE-CELL.
- (cancel-timer-internal): New function.
- (timer-event-handler): Use cancel-timer-internal,
- and pass the cell it returns to timer-activate...
-
- * jit-lock.el (jit-lock-function, jit-lock-stealth-fontify)
- (jit-lock-deferred-fontify, jit-lock-context-fontify)
- (jit-lock-after-change): Test memory-full.
-
-2005-10-29 Ken Manheimer <ken.manheimer@gmail.com>
-
- * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right
- part of the decoded armor to find the key-identifier.
- (pgg-gpg-lookup-key-owner): New function to return the
- human-readable identifier of a key owner.
- (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the
- key itself.
- (pgg-gpg-decrypt-region): Prompt with the key owner (rather than
- the key value) if we have a key and can match it against a secret
- key. Also, added a note pointing out fact that the prompt only
- indicates the first matching key.
-
- * pgg.el (pgg-decrypt): Passing along PASSPHRASE in call to
- pgg-decrypt-region.
- (pgg-pending-timers): A new hash for tracking the passphrase cache
- timers, so that new ones supercede old ones.
- (pgg-add-passphrase-to-cache): Rename from
- `pgg-add-passphrase-cache' to reduce confusion (all callers
- changed). Modified to cancel old timers when new ones are added.
- (pgg-remove-passphrase-from-cache): Rename from
- `pgg-remove-passphrase-cache' to reduce confusion (all callers
- changed). Modified to cancel old timers when their keys are
- removed from the cache.
- (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in
- XEmacs, an indirection to delete-itimer.
- (pgg-read-passphrase-from-cache, pgg-read-passphrase):
- Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so
- users can only check cache without risk of prompting. Correct bug in
- notruncate behavior.
- (pgg-read-passphrase-from-cache, pgg-read-passphrase)
- (pgg-add-passphrase-cache, pgg-remove-passphrase-cache):
- Add informative docstrings.
- (pgg-decrypt): Convey provided passphrase in subordinate call to
- pgg-decrypt-region.
-
- * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region)
- (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region)
- (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional
- `passphrase' argument, so the passphrase can be managed externally
- and then passed in to the system.
-
- * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache)
- (pgg-remove-passphrase-cache): Add optional NOTRUNCATE argument,
- so the passphrase cache can be used reliably with identifiers
- besides a pgp packet's key id.
-
- * pgg-gpg.el (pgg-pgp-encrypt-region)
- (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
- (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
- (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
-
- * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional
- `notruncate' argument, so the passphrase cache can be used
- reliably with identifiers besides a pgp packet's key id.
-
-2005-10-29 Sascha Wilde <swilde@sha-bang.de>
-
- * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for
- symmetric encryption.
- (pgg-gpg-symmetric-key-p): New function to check for an symmetric
- encrypted session key.
- (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted
- message ask for the passphrase in a proper way.
-
- * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region):
- New user commands for symmetric encryption.
-
-2005-10-29 Roland Winkler <roland.winkler@physik.uni-erlangen.de>
-
- * textmodes/conf-mode.el (conf-assignment-sign)
- (conf-assignment-regexp): Fix docstrings.
- (conf-mode-initialize): New function.
- (conf-mode): Remove optional args. Use delay-mode-hooks to
- recognize recursive calls.
- (conf-unix-mode, conf-windows-mode, conf-javaprop-mode)
- (conf-space-mode, conf-colon-mode, conf-ppd-mode)
- (conf-xdefaults-mode): Use define-derived-mode and
- conf-mode-initialize.
-
-2005-10-29 Romain Francoise <romain@orebokech.com>
-
- * help-fns.el (describe-simplify-lib-file-name): Fix regexp.
-
-2005-10-29 Ken Manheimer <ken.manheimer@gmail.com>
-
- * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right
- part of the decoded armor to find the key-identifier.
- (pgg-gpg-lookup-key-owner): New function to return the
- human-readable identifier of a key owner.
- (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the
- key itself.
- (pgg-gpg-decrypt-region): Prompt with the key owner (rather than
- the key value) if we have a key and can match it against a secret
- key. Also, added a note pointing out fact that the prompt only
- indicates the first matching key.
-
- * pgg.el (pgg-decrypt): Passing along PASSPHRASE in call to
- pgg-decrypt-region.
- (pgg-pending-timers): A new hash for tracking the passphrase cache
- timers, so that new ones supercede old ones.
- (pgg-add-passphrase-to-cache): Rename from
- `pgg-add-passphrase-cache' to reduce confusion (all callers
- changed). Modified to cancel old timers when new ones are added.
- (pgg-remove-passphrase-from-cache): Rename from
- `pgg-remove-passphrase-cache' to reduce confusion (all callers
- changed). Modified to cancel old timers when their keys are
- removed from the cache.
- (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in
- XEmacs, an indirection to delete-itimer.
- (pgg-read-passphrase-from-cache, pgg-read-passphrase):
- Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so
- users can only check cache without risk of prompting. Correct bug in
- notruncate behavior.
- (pgg-read-passphrase-from-cache, pgg-read-passphrase)
- (pgg-add-passphrase-cache, pgg-remove-passphrase-cache):
- Add informative docstrings.
- (pgg-decrypt): Convey provided passphrase in subordinate call to
- pgg-decrypt-region.
-
-2005-10-20 Ken Manheimer <ken.manheimer+emacs@gmail.com>
-
- * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region)
- (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region)
- (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional
- `passphrase' argument, so the passphrase can be managed externally
- and then passed in to the system.
-
- * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache)
- (pgg-remove-passphrase-cache): Add optional NOTRUNCATE argument,
- so the passphrase cache can be used reliably with identifiers
- besides a pgp packet's key id.
-
- * pgg-gpg.el (pgg-pgp-encrypt-region)
- (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
- (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
- (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
-
- * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional
- `notruncate' argument, so the passphrase cache can be used
- reliably with identifiers besides a pgp packet's key id.
-
-2005-10-29 Sascha Wilde <swilde@sha-bang.de>
-
- * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for
- symmetric encryption.
- (pgg-gpg-symmetric-key-p): New function to check for an symmetric
- encrypted session key.
- (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted
- message ask for the passphrase in a proper way.
-
- * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region):
- New user commands for symmetric encryption.
-
-2005-10-28 Bill Wohler <wohler@newt.com>
-
- * help-mode.el (help-url): New button type. Calls browse-url.
- (help-xref-url-regexp): New regexp to recognize URLs in docstring.
- Similar to Info nodes: URL `url'.
- (help-make-xrefs): Create help-url buttons for
- help-xref-url-regexp matches.
-
-2005-10-29 Nick Roberts <nickrob@snap.net.nz>
-
- * tool-bar.el (tool-bar-add-item-from-menu)
- (tool-bar-local-item-from-menu): Fix doc strings.
-
-2005-10-28 Romain Francoise <romain@orebokech.com>
-
- * ldefs-boot.el: Update.
-
- * subr.el (locate-library): Move from help-fns.el.
- * help-fns.el (locate-library): Move to subr.el.
-
-2005-10-28 Richard M. Stallman <rms@gnu.org>
-
- * net/tramp.el (tramp-completion-mode): defvar moved up.
-
- * emacs-lisp/easymenu.el (easy-menu-change): Doc fix.
-
- * tool-bar.el (tool-bar-mode): Delete autoload cookie.
-
- * files.el (find-file-noselect): Use %d to format large file size.
-
- * bindings.el (mode-line-format): Add %e.
-
- * loadup.el ("facemenu"): Load unconditionally.
- ("image", "international/fontset", "dnd", "mwheel", "tool-bar"):
- ("x-dnd"): Load, when appropriate.
-
- * startup.el (command-line): Call before-init-hook earlier.
- Warn about some bad characters in -u user name.
-
- * textmodes/flyspell.el (flyspell-large-region): Pass -t if Tex file.
- (flyspell-external-point-words): Error if misspelled word is not found.
- Set flyspell-large-region-beg at end of word.
-
-2005-10-28 Andreas Schwab <schwab@suse.de>
-
- * view.el (View-revert-buffer-scroll-page-forward):
- Use view-page-size-default.
-
-2005-10-28 Juri Linkov <juri@jurta.org>
-
- * international/quail.el (quail-get-current-str): Translate last
- raw character for deterministic input methods.
-
-2005-10-27 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-ext.el: Add functions to autoloads.
- (math-identity-matrix-p, math-ident-row-p): New functions.
-
- * calc/calc-arith.el (calc-mul-symb-fancy): Add checks for
- multiplication by an identity matrix; don't turn multiplication by
- an inverse matrix into division.
- (math-div-symbol-fancy): Replace division by matrices with
- multiplication by inverse.
-
- * calc/calc-misc.el (calcFunc-inv): Check for symbolic matrices.
-
- * calc/calc-alg.el (calcFunc-writeoutpower, math-write-out-power)
- (calc-writeoutpower): New functions.
-
-2005-10-27 Romain Francoise <romain@orebokech.com>
-
- * replace.el (occur-engine): Include colon in mouse-face highlight.
-
- * dired-x.el: Change Maintainer field.
-
-2005-10-26 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-mode): Bind after-change-functions to
- nil during initial decoding and final encoding.
-
-2005-10-26 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (term-emulate-terminal, term-handle-colors-array)
- (term-handle-ansi-escape): Specify the terminfo capabilities
- implemented.
-
-2005-10-26 Richard M. Stallman <rms@gnu.org>
-
- * info.el (Info-fontify-node): Fix detection of sentence-break
- before *Note.
-
-2005-10-26 Romain Francoise <romain@orebokech.com>
-
- * smerge-mode.el: Add `tools' to file keywords.
-
-2005-10-26 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Only display gud-until icon
- when the fringe is not available.
-
- * progmodes/gdb-ui.el (def-gdb-auto-updated-buffer)
- (def-gdb-auto-update-trigger): Simplify construction.
- (gdb-locals-buffer): Use def-gdb-auto-update-trigger instead of
- def-gdb-auto-updated-buffer as gdb-info-locals-handler is
- defined explicitly.
- (gdb-assembler-buffer): Use def-gdb-auto-update-handler instead of
- def-gdb-auto-updated-buffer as gdb-invalidate-assembler is
- defined explicitly.
- (gdb-info-locals-custom): Remove as it's a no-op.
-
-2005-10-25 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-mode): Remove narrowing before
- performing the initial decoding or final encoding.
-
-2005-10-25 Romain Francoise <romain@orebokech.com>
-
- * emacs-lisp/find-func.el (find-library-name): Also strip
- extension if library name ends in .el, to take advantage of
- `find-library-suffixes'.
-
-2005-10-25 Richard M. Stallman <rms@gnu.org>
-
- * menu-bar.el (menu-bar-help-menu): Say which kind of therapist.
-
-2005-10-25 Juri Linkov <juri@jurta.org>
-
- * textmodes/texinfo.el (texinfo-mode): Change charset of one
- quotation mark from [mule-unicode-0100-24ff] to [japanese-jisx0208].
-
-2005-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * play/blackbox.el (blackbox-mode-map): Move init into declaration.
- (blackbox-redefine-key): Add argument `map'.
-
- * jit-lock.el (jit-lock-fontify-now): Be careful not to skip multiline
- regions when moving the jit-lock-context-unfontify-pos boundary.
-
-2005-10-25 Reiner Steib <Reiner.Steib@gmx.de>
-
- * net/browse-url.el (browse-url-of-buffer): Add ".html" to filename.
-
-2005-10-25 Masatake YAMATO <jet@gyve.org>
-
- * dired-x.el (dired-virtual): Don't use `dired-insert-headerline'.
+ (math-expr-opers): Define using math-standard-ops rather than
+ math-standard-opers.
+ * calc/calc-aent.el (calc-do-calc-eval): Let math-expr-opers
+ equal the function math-standard-ops rather than the variable
+ math-standard-opers.
+ (calc-algebraic-entry): Let math-expr-opers equal
+ math-standard-ops or math-expr-ops, as appropriate.
+ (math-expr-read-level, math-read-factor): Let math-expr-opers
+ equal math-expr-ops.
+ * calc/calc-embed.el (calc-embedded-finish-edit):
+ Let math-expr-opers equal the function math-standard-ops
+ rather than the variable math-standard-opers.
+ * calc/calc-ext.el (math-read-plain-expr)
+ (math-format-flat-expr-fancy): Let math-expr-opers equal the
+ function math-standard-ops rather than the variable
+ math-standard-opers.
+ * calc/calc-lang.el (calc-set-language, math-read-big-rec):
+ Let math-expr-opers equal the function math-standard-ops rather
+ than the variable math-standard-opers.
+ * calc/calc-prog.el (calc-read-parse-table): Let math-expr-opers
+ equal the function math-standard-ops rather than the variable
+ math-standard-opers.
+ * calc/calc-yank.el (calc-finish-stack-edit): Let math-expr-opers
+ equal the function math-standard-ops rather than the variable
+ math-standard-opers.
+ * calc/calccomp.el (math-compose-expr): Let math-expr-opers equal
+ math-expr-ops.
+
+2007-06-19 Ivan Kanis <apple@kanis.eu>
-2005-10-25 Micha,Ak(Bl Cadilhac <michael.cadilhac-@t-lrde.epita.fr>
-
- * play/blackbox.el (blackbox-redefine-key): New function.
- (blackbox-mode-map): Use it to remap existing bindings for cursor
- motion instead of binding literal keys.
-
-2005-10-25 Glenn Morris <rgm@gnu.org>
-
- * calendar/diary-lib.el (diary-list-entries): Prevent infloop when
- diary does not end in a newline. Do not assume a blank line at
- the start of the diary file.
-
-2005-10-25 Kenichi Handa <handa@m17n.org>
-
- * international/quail.el (quail-translate-key): If the input
- method is deterministic and failed to handle the last key, restart
- the key handling loop from an appropriate key.
-
-2005-10-25 Michael Albinus <michael.albinus@gmx.de>
-
- * vc.el (vc-dired-mode): Extend comment for binding of
- `directory-listing-before-filename-regexp'.
-
-2005-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/texinfo.el (texinfo-mode):
- * textmodes/paragraphs.el (sentence-end-base): Use real chars, so as
- not to unnecessarily expose emacs-mule's internal char codes.
-
-2005-10-25 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Correct help-echo.
- Display hand pointer and help-echo on disabled icon too.
- (gdb-mouse-until): New function.
- (gdb-ann3): Bind it to mouse-2 and drag-mouse-1 in left fringe.
-
-2005-10-24 Chong Yidong <cyd@stupidchicken.com>
-
- * menu-bar.el (menu-bar-help-menu): Rename "psychiatrist", in line
- with 2005-10-23 change to doctor.el.
-
- * finder.el (finder-mode-map): Add follow-link binding.
-
-2005-10-25 Kim F. Storm <storm@cua.dk>
-
- * progmodes/gdb-ui.el (gdb-ann3): Bind mouse-3 in left fringe
- to gdb-mouse-toggle-breakpoint-fringe.
- (gdb-mouse-toggle-breakpoint-margin): Rename from
- gdb-mouse-toggle-breakpoint. Fix doc.
- (gdb-mouse-toggle-breakpoint-fringe): New defun.
- (gdb-put-string): Add optional SPROPS arg. Add props to string.
- (gdb-put-breakpoint-icon): Add gdb-bptno and gdb-enabled
- string properties also for fringe breakpoint bitmaps.
-
-2005-10-24 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-start-icalendar-file): Fix format form.
-
-2005-10-25 Masatake YAMATO <jet@gyve.org>
-
- * simple.el (completion-common-substring):
- Use `completion-common-substring' prior to `completion-base-size'.
-
-2005-10-24 Hrvoje Niksic <hniksic@xemacs.org>
-
- * savehist.el: Require CL while compiling.
- (savehist-history-variables): Remove.
- (savehist-save-minibuffer-history, savehist-additional-variables)
- (savehist-minibuffer-history-variables): New vars.
- (savehist-save): Use them.
- (savehist-uninstall, savehist-minibuffer-hook): New funs.
- (savehist-install): New fun, extracted from savehist-load.
- (savehist-load): Use them.
-
-2005-10-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/lisp-mode.el (easy-mmode-define-global-mode): Don't add
- a dummy doc-string-elt property.
- (defalias, defvaralias, define-category): Add a docstring property.
-
- * image.el (defimage):
- * widget.el (define-widget):
- * custom.el (defface, defcustom): Add `doc-string' declaration.
-
- * emacs-lisp/advice.el (ad-make-advised-definition): Fix arg-order.
- (defadvice): Add `doc-string' declaration.
-
- * emacs-lisp/byte-run.el (macro-declaration-function):
- Handle `doc-string' declarations.
- (define-obsolete-function-alias, define-obsolete-variable-alias):
- Add `doc-string' declaration.
-
-2005-10-24 Kenichi Handa <handa@m17n.org>
-
- * international/utf-7.el (utf-7): Add autoload cookie.
-
- * term/x-win.el: Register more Cyrillic characters in x-keysym-table.
-
-2005-10-24 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (autoloads): Use "." instead of $(lisp) in the
- list of directories passed to batch-update-autoloads. Add "." to
- the list of the echoed directories.
-
- * pgg-def.el:
- * pgg-gpg.el:
- * pgg-parse.el:
- * pgg-pgp.el:
- * pgg-pgp5.el:
- * pgg.el: Moved here from the gnus subdirectory.
-
-2005-10-24 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-filter): Bind inhibit-read-only to t
- in case comint-prompt-read-only is set to t.
-
- * progmodes/gdb-ui.el (gdb-send): Bind inhibit-read-only to t
- in case comint-prompt-read-only is set to t.
-
-2005-10-24 Ulf Jasper <ulf.jasper@web.de>
-
- * calendar/icalendar.el (icalendar-version): Increase to 0.13.
- Now a string.
- (icalendar-import-format): Handle CLASS, STATUS, URL.
- Rename `subject' to `summary'.
- (icalendar-import-format-summary): Rename from
- `icalendar-import-format-subject'.
- (icalendar-import-format-url, icalendar-import-format-status)
- (icalendar-import-format-class): New variables.
- (icalendar--rris): Take variable argument list.
- (icalendar--datestring-to-isodate): Remove unnecessary
- calendar-style check when converting dates with explicit month names.
- (icalendar-export-region): Change return type of conversion
- subroutines. Bury current buffer unless error occurred.
- (icalendar--convert-to-ical)
- (icalendar--parse-summary-and-rest): New functions.
- (icalendar--convert-ordinary-to-ical)
- (icalendar--convert-weekly-to-ical)
- (icalendar--convert-yearly-to-ical)
- (icalendar--convert-block-to-ical)
- (icalendar--convert-cyclic-to-ical)
- (icalendar--convert-anniversary-to-ical): Change return type.
- Strip trailing blanks from subject.
- (icalendar--convert-sexp-to-ical): Change return type.
- Strip trailing blanks from subject. Handle simple sexp
- entries as generated by icalendar.el.
- (icalendar--convert-float-to-ical)
- (icalendar--convert-date-to-ical): Strip trailing blanks from subject.
- (icalendar-import-file): Doc fix.
- (icalendar--format-ical-event): Handle CLASS, STATUS, URL.
- Correct call to icalendar--rris.
- (icalendar--convert-ical-to-diary): Doc fix. Rename `subject' to
- `summary'.
- (icalendar--add-diary-entry): Rename `subject' to `summary'.
-
-2005-10-24 Romain Francoise <romain@orebokech.com>
-
- * server.el (server-sentinel): Set query-on-exit flag to nil on
- new client processes (it isn't inherited from the server process).
-
- * replace.el (occur-engine): Rearrange text properties.
-
-2005-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/debug.el (debugger-make-xrefs): Don't assume
- case-fold-search is nil.
- (debug-help-follow): Use help-xref-interned directly.
-
-2005-10-23 Chong Yidong <cyd@stupidchicken.com>
-
- * thumbs.el (thumbs-image-type): Add .pbm.
-
-2005-10-23 Richard M. Stallman <rms@gnu.org>
-
- * faces.el (inhibit-face-set-after-frame-default): New variable.
- (set-face-attribute): Bind it.
- (face-set-after-frame-default): Test it.
-
- * help-fns.el (describe-simplify-lib-file-name): New function.
- (describe-function-1, describe-variable): Use it.
-
- * faces.el (describe-face): Use describe-simplify-lib-file-name.
-
- * tooltip.el (tooltip-x-offset, tooltip-y-offset): Change defaults.
- Eliminate nil as possible value.
- (tooltip-hide-delay): Reduce internal-border-width.
-
- * menu-bar.el (menu-bar-file-menu) <dired>: Change help-echo string.
- (menu-bar-file-menu) <new-file>: Likewise.
-
- * simple.el (line-move-finish): Ignore fields computing LINE-END.
-
- * international/mule.el (load-with-code-conversion):
- Pass full file name to `eval-buffer' unless preloading.
-
- * textmodes/flyspell.el (flyspell-large-region):
- Call ispell-check-version.
-
- * textmodes/ispell.el (ispell-local-dictionary-overridden):
- Fix the make-variable-buffer-local call that was supposed
- to be for this variable.
- (ispell-aspell-supports-utf8): Doc fix.
- (ispell-find-aspell-dictionaries): Preserve elements of
- ispell-dictionary-alist for dictionaries that aspell doesn't report.
- (ispell-aspell-find-dictionary): Return nil on error.
-
- * play/doctor.el (doctor-doc): Don't say "psychiatrist".
- (doctor-symptoms): Likewise.
-
- * add-log.el (add-log-current-defun): Clean up handling of DEFUNs.
-
-2005-10-23 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (custom-button, custom-button-pressed): New vars.
- (custom-raised-buttons): Add :set spec.
- (custom-button-unraised, custom-button-pressed-unraised):
- New faces, so that custom-raised-buttons actually does something.
- (custom-mode): Use custom-button and custom-button-pressed.
-
- * wid-edit.el (widget-specify-button): Don't ignore
- widget-mouse-face on graphic terminals.
- (widget-move-and-invoke): Cleanup.
-
-2005-10-23 Thien-Thi Nguyen <ttn@gnu.org>
-
- * whitespace.el (whitespace-cleanup): Doc fix.
-
-2005-10-23 Romain Francoise <romain@orebokech.com>
-
- * emulation/viper.el (viper-set-hooks): Quote forms passed to
- `eval-after-load' to avoid evaluating their result.
-
-2005-10-23 Michael Albinus <michael.albinus@gmx.de>
-
- * files.el (directory-listing-before-filename-regexp):
- New defvar. Replaces `dired-move-to-filename-regexp' from dired.el.
-
- * dired.el (dired-move-to-filename-regexp): Remove.
- All occurrences replaced by `directory-listing-before-filename-regexp'.
-
- * dired-x.el, locate.el, vc.el:
- Replace `dired-move-to-filename-regexp' by
- `directory-listing-before-filename-regexp'. In vc.el it is
- overwritten locally; maybe this can be handled in files.el too.
-
- * net/ange-ftp.el (ange-ftp-date-regexp): Remove. All occurrences
- replaced by `directory-listing-before-filename-regexp'.
-
-2005-10-23 Andreas Schwab <schwab@suse.de>
-
- * font-lock.el (lisp-font-lock-keywords-2): Add eval-at-startup
- and eval-next-after-load.
-
-2005-10-23 MIYOSHI Masanori <miyoshi@meadowy.org> (tiny change)
-
- * mouse.el (mouse-drag-region): If the *Messages* buffer doesn't
- exist, create it.
-
-2005-10-23 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el: Remove autoloads for mailcrypt and crypt++.
- Require pgg, pgg-gpg during compilation.
- (allout-version): Increment version number to 2.1, and use a literal
- rather than RCS Id.
- (allout-default-encryption-scheme): Remove.
- (allout-passphrase-verifier-handling)
- (allout-passphrase-verifier-string)
- (allout-file-passphrase-verifier-string)
- (allout-passphrase-hint-string): Rename -key- to -passphrase-.
- (allout-passphrase-hint-handling): Rename and simplify.
- (allout-init): Use `find-file-hook' if available, otherwise
- `find-file-hooks'.
- (allout-mode): Use `write-file-functions' if available, otherwise
- `local-write-file-hooks' and, instead of making auto-save-hook
- buffer local, make the write-file-hook activity contingent to
- allout-mode.
- (allout-mode): Use key-binding substitution in the docstring.
- (allout-kill-line): Spell-out kill ring data structure mutation
- instead of using byte-compiler-complaint-provoking `pop'.
- (allout-insert-listified): Use `insert' rather than `insert-string'
- (allout-toggle-current-subtree-encryption): Update docstring, adjust
- to new gpp-based encryption, use new `allout-encrypted-topic-p'.
- (allout-encrypt-string): Totally revamped vis new underlying
- encryption facilities.
- (allout-mc-activate-passwd): Remove.
- (allout-obtain-passphrase): New, more or less replaces
- allout-mc-activate-passwd.
- (allout-encrypted-key-info): More or less replaces
- allout-encrypted-text-type.
- (outlineify-sticky, outlinify-sticky): Add autoload cookie.
- (my-mark-marker): Use `(featurep 'xemacs)'.
-
-2005-10-23 Lars Hansen <larsh@soem.dk>
-
- * emacs-lisp/bytecomp.el (byte-compile-lambda): New arg add-lambda.
- (byte-compile-file-form-defmumble, byte-compile-defun)
- (byte-compile-defmacro): Use it.
- (byte-compile-form): Don't call byte-compile-set-symbol-position
- when a byte-compile handler is called.
-
-2005-10-22 Romain Francoise <romain@orebokech.com>
-
- * savehist.el (savehist-history-variables): Add `grep-find-history'.
-
- * subr.el (eval-after-load): Convert library name to an absolute
- file name using locate-library, since load-history no longer has
- library names in it.
-
-2005-10-22 Richard M. Stallman <rms@gnu.org>
-
- * files.el (make-temp-file): Move from subr.el.
- * subr.el (make-temp-file): Move to files.el.
-
- * window.el (get-buffer-window-list): Move from subr.el.
- * subr.el (get-buffer-window-list): Move to window.el.
-
- * image.el (image-load-path): Use eval-at-startup to initialize.
-
- * subr.el (eval-at-startup): New macro.
-
- * subr.el: Much rearrangement of functions and division
- into pages. No code changes.
-
-2005-10-22 Kenichi Handa <handa@m17n.org>
-
- * tar-mode.el (tar-extract): Be sure to call
- find-operation-coding-system if set-auto-coding doesn't find a
- coding system.
-
-2005-10-22 Kim F. Storm <storm@cua.dk>
-
- * image.el (image-type-header-regexps): Rename from image-type-regexps.
- Change users.
- (image-type-file-name-regexps): New defconst.
- (image-type-from-data): Simplify loop.
- (image-type-from-buffer): New defun.
- (image-type-from-file-header): Use it instead of image-type-from-data.
- Use image-search-load-path instead of only looking in data-directory.
- (image-type-from-file-name): New defun.
- (image-search-load-path): Change `pathname' to `filename'.
- Make PATH arg optional, default to image-load-path.
-
-2005-10-21 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/texinfo.el (texinfo-mode): Set sentence-end-base.
-
- * textmodes/paragraphs.el (sentence-end-base): New variable.
- (sentence-end): Use sentence-end-base.
-
-2005-10-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-default-fontify-region): Check the multiline
- property independently from the font-lock-multiline variable.
-
-2005-10-21 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/find-func.el (find-library-name): Doc fix.
-
- * startup.el (command-line): Convert library names
- in `load-history' to absolute file names.
-
- * subr.el (symbol-file): Doc fix.
-
- * loadhist.el (file-loadhist-lookup): Call locate-library
- instead of find-library-name. Don't try converting
- abs file names to library names, since load-history no longer
- has library names in it.
- (file-dependents, file-provides, file-requires): Doc fixes.
-
-2005-10-21 Juri Linkov <juri@jurta.org>
-
- * progmodes/etags.el (tags-table-mode): New function.
- (tags-verify-table): Replace initialize-new-tags-table with
- tags-table-mode.
-
- * desktop.el (desktop-buffers-not-to-save): Remove TAGS from the
- default value.
- (desktop-modes-not-to-save): Add tags-table-mode to the
- default value.
-
- * info.el (Info-index-next): Add total number of index
- alternatives to the message.
-
- * textmodes/fill.el (fill-nobreak-p): Fix first two rules to skip
- backward only space (instead of space and period) before looking
- at sentence end.
-
- * simple.el (set-variable): Use user-variable-p instead of symbolp.
- Add the old variable value as 4th default-value arg of read-string.
-
-2005-10-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * cus-face.el (custom-declare-face): Make face from X resources
- also on Mac.
-
- * disp-table.el (standard-display-g1, standard-display-graphic):
- Refuse to use string glyphs also on Mac.
- (standard-display-european): Don't set terminal coding system also
- on Mac.
-
- * frame.el (display-screens): Use x-display-screens also on Mac.
-
-2005-10-21 Romain Francoise <romain@orebokech.com>
-
- * net/rcirc.el: Now part of GNU Emacs. Update FSF's address.
-
-2005-10-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/sh-script.el (sh-font-lock-syntactic-keywords): Make $@
- and $? into sexps.
-
- * font-lock.el (font-lock-compile-keywords): Add a help-echo to the
- warning face on open-paren-in-column-0.
-
- * emacs-lisp/syntax.el (syntax-ppss-flush-cache): Fix corner
- boundary case. Fix typo.
- Suggested by Martin Rudalics <rudalics@gmx.at>.
-
-2005-10-21 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-combined-agenda-icalendar-file)
- (org-icalendar-include-todo, org-icalendar-combined-name): New options.
- (org-export-icalendar-this-file)
- (org-export-icalendar-all-agenda-files)
- (org-export-icalendar-combine-agenda-files): New commands.
- (org-export-icalendar, org-print-icalendar-entries)
- (org-start-icalendar-file, org-finish-icalendar-file)
- (org-ical-ts-to-string): New functions.
- (org-read-date, org-goto-calendar)
- (org-agenda-goto-calendar): Inhibit displaying diary entries by
- call to `calendar'.
- (orgtbl-setup): Remove the :keys arguments from the menu description.
- (org-after-save-iCalendar-file-hook): New variable.
-
-2005-10-21 Kenichi Handa <handa@m17n.org>
-
- * language/vietnamese.el (tcvn-5712): Make it an alias of
- vietnamese-tcvn coding-system.
-
-2005-10-20 Michael Albinus <michael.albinus@gmx.de>
-
- * net/ange-ftp.el (ange-ftp-date-regexp): Handle also the case no
- group id is given.
-
-2005-10-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/sh-script.el (sh-escaped-line-re): New var.
- (sh-here-doc-open-re, sh-font-lock-close-heredoc): Use it.
- (sh-font-lock-open-heredoc): Try to properly handle heredoc starters
- whose line is either continued or ends with a comment.
-
-2005-10-20 Romain Francoise <romain@orebokech.com>
-
- * net/rcirc.el (with-rcirc-process-buffer): Move above its first user.
-
- * replace.el (occur-engine): Add follow-link property.
-
- * font-core.el (font-lock-mode): Doc fix.
-
-2005-10-20 Richard M. Stallman <rms@gnu.org>
-
- * net/rcirc.el: New file.
-
-2005-10-20 Bryan Henderson <bryanh@giraffe-data.com> (tiny change)
-
- * term.el (term-term-name): Initialize to "eterm-color".
-
-2005-10-20 Ken Manheimer <ken.manheimer@gmail.com>
-
- * allout.el: Add autoloads of crypt++ and mailcrypt routines, all
- for encryption functionality.
- Move allout customization subgroup from `editing' to `outlines' group.
- Fix commentary keywords to legitimate ones.
- Update author info (using my current email address, obscurified).
- (allout-encrypt-string, allout-encryption-produce-work-buffer)
- (allout-encrypted-topic-p, allout-encrypted-text-type)
- (allout-mc-activate-passwd, allout-create-encryption-key-verifier)
- (allout-situate-encryption-key-verifier)
- (allout-get-encryption-key-verifier, allout-verify-key)
- (allout-next-topic-pending-encryption)
- (allout-encrypt-decrypted, allout-encrypted-type-prefix): New funcs.
- (outline-topic-encryption-bullet, outline-default-encryption-scheme)
- (outline-key-verifier-handling, outline-key-hint-handling)
- (outline-encrypt-unencrypted-on-saves): New defcustoms.
- (allout-file-key-verifier-string, allout-encryption-scheme)
- (allout-key-verifier-string, allout-key-hint-string)
- (allout-after-save-decrypt): New variables.
- (allout-write-file-hook-handler, allout-auto-save-hook-handler)
- (allout-after-saves-handler): New hook functions.
- (allout-post-command-business): Do allout-after-save-decrypt.
- (allout-enable-file-variable-adjustment): Custom var to enable
- mechanism for adding and adjusting settings of Emacs file variables.
- (allout-adjust-file-variable, allout-file-vars-section-data):
- New functions, implement the mechanism.
- (outlineify-sticky): Use the file vars mechanism.
- (allout-inhibit-protection, allout-during-write-cue)
- (allout-override-protect, allout-before-change-protect): Remove.
- (allout-flag-region, allout-open-topic): Adjust read-only text.
- (allout-open-line-not-read-only): Add to facilitate read-only
- text based protection.
- (allout-kill-line): Revise to adjust read-only text, clue the
- user about the inhibition.
- (allout-unprotected): Use unwind-protect.
- (allout-shift-in, allout-shift-out): Disallow manually shifting a
- topic deeper than the offspring depth of the previous topic -
- avoiding confusing "containment discontinuities".
- (allout-reindent-bodies): Fix retention of body relative hanging
- indent during promotion of collapsed bodies.
- (allout-open-topic): Make it easy to open new topic with same
- bullet as current topic - topic creation functions provided with
- any universal argument provokes now prompt for bullet, defaulting
- to the bullet of the previous topic.
- (allout-plain-bullets-string, allout-distinctive-bullets-string):
- Plain bullet alternates `.' period and `,' comma only. All other
- bullets are relegated to special status (but customizable).
- (allout-end-of-entry): Rename from allout-end-of-current-entry
- since it actually operates w.r.t. most immediately containing
- entry, visible or not.
- (allout-hide-current-entry, allout-show-current-entry): Use the
- revised version.
- (allout-old-expose-topic): Solidify deprecation.
- (allout-end-of-subtree): Add so we can span concealed as well
- as visible topics.
- (allout-end-of-current-subtree): Use `allout-end-of-subtree'.
- (allout-end-of-current-heading): Tweak to just respect the first line.
- (allout-get-body-text): Add.
- (allout-ascend-to-depth, allout-ascend): Position at end of prefix
- when invoked interactively.
- (allout-up-current-level): Use `interactive-p'.
- (allout-mode, allout-init): Miscellaneous docstring and
- operational refinements, as well as hookups of new encryption stuff.
- (allout-beginning-of-current-entry): Now works as advertised.
- (allout-end-of-current-entry): Remove of superfluous allout-show-entry.
- (allout-isearch-rectification): Refine condition for isearching.
- (allout-isearch-abort, allout-enwrap-isearch)
- (allout-flag-region, my-region-active-p): Relocate some macros.
- (allout-title): Fallback title is (buffer-name), not
- non-existing (current-buffer-name).
- (subst-char-in-string): Define if absent (for some XEmacs versions).
-
-2005-10-20 Jari Aalto <jari.aalto@cante.net>
-
- * mail/sendmail.el (mail-setup-hook, mail-aliases)
- (mail-yank-prefix, mail-indentation-spaces, mail-yank-hooks)
- (mail-citation-prefix-regexp, mail-signature-file)
- (mail-default-headers, mail-bury-selects-summary)
- (mail-send-nonascii): Add autoload cookies.
-
-2005-10-20 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
-
- * frame.el (blink-cursor-mode): Add `mac' to the list of
- window-system's that support blinking cursor.
-
-2005-10-20 Reiner Steib <Reiner.Steib@gmx.de>
-
- * textmodes/org.el (org-level-color-stars-only): Fix typo in docstring.
-
-2005-10-20 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in ($(lisp)/mh-e/mh-loaddefs.el):
- Bind find-file-suppress-same-file-warnings to t, to avoid warnings due
- to different drive letter case in D:/foo/bar.el vs d:/foo/bar.el.
-
-2005-10-20 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-is-tramp-root): Simplify regexp matching tramp root.
- (ido-set-current-directory): Don't add / after final @.
- (ido-file-name-all-completions-1): Adapt to fixed tramp completion.
- Explicitly handle ange-ftp completion oddities.
- (ido-make-file-list): Don't rotate list at tramp root to avoid
- triggering tramp file handler for expand-file-name via get-file-buffer.
-
-2005-10-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * savehist.el (savehist-coding-system): Revert to checking XEmacs.
-
-2005-10-19 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-units.el (math-standard-units): Add units, adjust
- symbols and update values.
- (math-unit-prefixes): Add more prefixes.
-
-2005-10-19 Romain Francoise <romain@orebokech.com>
-
- * bookmark.el (bookmark-menu-heading): New face.
- (bookmark-bmenu-list): Use it.
- Don't fiddle with `baud-rate' at top-level.
-
-2005-10-18 Chong Yidong <cyd@stupidchicken.com>
-
- * image.el (create-image, find-image): Mention max-image-size in
- docstring.
-
-2005-10-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * savehist.el (savehist-load): Revert to checking XEmacs.
-
- * textmodes/conf-mode.el: Don't use font-lock-defaults-alist.
- Various docstring and line-width fixups.
- (conf-mode): Use cond.
- Set font-lock-defaults. Don't set comment-use-syntax.
-
-2005-10-18 David Ponce <david@dponce.com>
-
- * tree-widget.el (tree-widget-button-click): New function.
- (tree-widget-button-keymap): Use it.
-
-2005-10-18 Romain Francoise <romain@orebokech.com>
-
- * bookmark.el (bookmark-insert-location, bookmark-bmenu-list)
- (bookmark-bmenu-hide-filenames): Add follow-link property.
- Improve help-echo text.
-
- * ffap.el (find-file-at-point): Doc fix.
-
-2005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mouse.el (mouse-set-region): Don't do sit-for on a mac frame.
-
-2005-10-18 Masatake YAMATO <jet@gyve.org>
-
- Install to the CVS repository what I forgot to install in my
- 2005-10-16 changes.
-
- * progmodes/python.el (python-complete-symbol): Pass the common
- prefix substring of completion to `display-completion-list'.
-
- * textmodes/org.el (org-complete): Ditto.
-
-2005-10-18 Masatake YAMATO <jet@gyve.org>
-
- Fix a bug reported by Sven Joachim <sven_joachim@web.de>.
-
- * woman.el (WoMan-xref-man-page): New button type derived
- from `Man-abstract-xref-man-page'.
- (woman-mode): Pass `WoMan-xref-man-page' to `Man-highlight-references'.
-
- * man.el (Man-abstract-xref-man-page): New button type.
- (Man-xref-man-page): Make it derived from `Man-abstract-xref-man-page'.
- (Man-highlight-references): Add new optional argument `xref-man-type'.
-
-2005-10-18 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Correct condition for fringe.
-
-2005-10-17 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-edit.el (Custom-move-and-invoke): Delete.
- (custom-mode-map): Bind mouse-1 to widget-move-and-invoke.
-
- * wid-edit.el (widget-move-and-invoke): New function, from
- Custom-move-and-invoke.
-
-2005-10-17 Bill Wohler <wohler@newt.com>
-
- Move all remaining images from lisp/toolbar to etc/images, move
- lisp/toolbar/tool-bar to lisp and "delete" lisp/toolbar. Place
- the low resolution images in their own directory (low-color).
-
- * toolbar/attach.*, toolbar/cancel.*, toolbar/close.*
- * toolbar/copy.*, toolbar/cut.*, toolbar/diropen.*, toolbar/exit.*
- * toolbar/help.*, toolbar/home.*, toolbar/index.*, toolbar/info.*
- * toolbar/mail.*, toolbar/new.*, toolbar/open.*, toolbar/paste.*
- * toolbar/preferences.*, toolbar/print.*, toolbar/save.*
- * toolbar/saveas.*, toolbar/search.*, toolbar/search-replace.*
- * toolbar/spell.*, toolbar/undo.*: Move to etc/images.
-
- * toolbar/lc-copy.*: Move to etc/images/low-color/copy.*.
- * toolbar/lc-cut.*: Move to etc/images/low-color/cut.*.
- * toolbar/lc-help.*: Move to etc/images/low-color/help.*.
- * toolbar/lc-home.*: Move to etc/images/low-color/home.*.
- * toolbar/lc-index.*: Move to etc/images/low-color/index.*.
- * toolbar/lc-new.*: Move to etc/images/low-color/new.*.
- * toolbar/lc-open.*: Move to etc/images/low-color/open.*.
- * toolbar/lc-paste.*: Move to etc/images/low-color/paste.*.
- * toolbar/lc-preferences.*: Move to etc/images/low-color/preferences.*.
- * toolbar/lc-print.*: Move to etc/images/low-color/print.*.
- * toolbar/lc-save.*: Move to etc/images/low-color/save.*.
- * toolbar/lc-saveas.*: Move to etc/images/low-color/saveas.*.
- * toolbar/lc-search.*: Move to etc/images/low-color/search.*.
- * toolbar/lc-spell.*: Move to etc/images/low-color/spell.*.
- * toolbar/lc-undo.*: Move to etc/images/low-color/undo.*.
-
- To conform with convention, replace the underscore (_) in the
- following image names with dash (-) or (/) as appropriate.
-
- * toolbar/back_arrow.*: Move to etc/images/back-arrow.*.
- * toolbar/fld_open.*: Move to etc/images/fld-open.*.
- * toolbar/fwd_arrow.*: Move to etc/images/fwd-arrow.*.
- * toolbar/jump_to.*: Move to etc/images/jump-to.*.
- * toolbar/left_arrow.*: Move to etc/images/left-arrow.*.
- * toolbar/right_arrow.*: Move to etc/images/right-arrow.*.
- * toolbar/up_arrow.*: Move to etc/images/up-arrow.*.
- * toolbar/lc-back_arrow.*: Move to etc/images/low-color/back-arrow.*.
- * toolbar/lc-fwd_arrow.*: Move to etc/images/low-color/fwd-arrow.*.
- * toolbar/lc-jump_to.*: Move to etc/images/low-color/jump-to.*.
- * toolbar/lc-left_arrow.*: Move to etc/images/low-color/left-arrow.*.
- * toolbar/lc-right_arrow.*: Move to etc/images/low-color/right-arrow.*.
- * toolbar/lc-up_arrow.*: Move to etc/images/low-color/up-arrow.*.
- * toolbar/mail_compose.*: Move to etc/images/mail/compose.*.
- * toolbar/mail_send.*: Move to etc/images/mail/send.*.
-
- * info.el (info-tool-bar-map): Replace underscores in image names
- with dashes.
-
- * makefile.w32-in (WINS): Remove toolbar.
-
- * menu-bar.el: Replace toolbar/tool-bar.el with tool-bar.el in comment.
-
- * tool-bar.el: Move to lisp from toolbar. Now that
- toolbar is empty, it should be deleted when folks run "cvs up -P".
-
-2005-10-18 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-store.el (calc-store-into): Get the proper variable name
- to display in message.
-
-2005-10-18 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-handler): Make watch
- expressions display in speedbar for all buffers when debugging.
- (gdb-speedbar-expand-node): Ensure node contraction is always updated.
-
- * speedbar.el (speedbar-set-mode-line-format): Indent properly.
- (speedbar-insert-button, speedbar-make-button):
- Use add-text-properties.
- (speedbar-update-localized-contents)
- (speedbar-update-directory-contents)
- (speedbar-update-special-contents): Use dolist.
- (speedbar-buffer-easymenu-definition): Add a menu separator.
-
-2005-10-17 Jason Rumney <jasonr@gnu.org>
-
- * makefile.w32-in: Use $(lisp) consistently.
- (pre-mh-loaddefs.el-SH, pre-mh-loaddefs.el-CMD): New targets
- for shell specific generation of mh-autoloads.
-
-2005-10-17 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/tex-mode.el (tex-font-lock-keywords-2): Undo prev change.
-
-2005-10-17 Stefan Monnier <monnier@iro.umontreal.ca>
+ * vc-hg.el: New file.
- * jit-lock.el (jit-lock-fontify-now):
- Move jit-lock-context-unfontify-pos to avoid wasted work.
+2007-06-18 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-10-17 Michael Albinus <michael.albinus@gmx.de>
+ * progmodes/sh-script.el (sh-font-lock-paren): Mark the relevant text
+ with font-lock-multiline.
- * net/tramp.el (tramp-completion-mode): New defvar. Used in
- `tramp-completion-mode' for checking if we are in completion mode.
- (tramp-completion-handle-file-name-all-completions): Reorder code
- in order to complete for file names only in case there are no
- method/user/host completions. This is necessary for cooperation
- with ido. Reported by Kim F. Storm <storm@cua.dk>.
+2007-06-17 Glenn Morris <rgm@gnu.org>
-2005-10-16 Chong Yidong <cyd@stupidchicken.com>
+ * lpr.el (lpr-page-header-switches): Move %s to separate element
+ for correct quoting. Doc fix.
- * longlines.el (longlines-search-forward)
- (longlines-search-backward): Match any number of spaces.
+2007-06-17 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-10-16 Thien-Thi Nguyen <ttn@gnu.org>
+ * textmodes/sgml-mode.el (sgml-xml-guess): Return the result rather
+ than setting sgml-xml-mode.
+ (sgml-mode, html-mode): Set sgml-xml-mode.
+ (sgml-skip-tag-backward): Tell if we skipped over matched tags.
+ (sgml-skip-tag-backward, sgml-electric-tag-pair-overlays): New var.
+ (sgml-electric-tag-pair-before-change-function)
+ (sgml-electric-tag-pair-flush-overlays): New functions.
+ (sgml-electric-tag-pair-mode): New minor mode.
+ (sgml-font-lock-keywords-2, sgml-get-context, sgml-unclosed-tag-p)
+ (sgml-calculate-indent): Use assoc-string.
+
+2007-06-16 Karl Fogel <kfogel@red-bean.com>
+
+ * thingatpt.el (thing-at-point-email-regexp): Don't require two
+ chars before the "@" in an email address. Andreas Roehler noticed
+ this problem.
+
+2007-06-15 Karl Fogel <kfogel@red-bean.com>
+
+ * thingatpt.el: Add support for email addresses (`email').
+ (thing-at-point, bounds-of-thing-at-point): Document `email' support.
+ (thing-at-point-email-regexp): New variable.
+ (`email'): Put `bounds-of-thing-at-point' and `thing-at-point'
+ properties on this symbol, with lambda forms for values.
+
+2007-06-15 Masatake YAMATO <jet@gyve.org>
+
+ * vc-bzr.el (vc-bzr-root): Cache the output of shell command execution.
+
+ * vc.el (vc-dired-hook): Check the backend returned from
+ `vc-responsible-backend' can really handle `subdir'.
+
+2007-06-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-add-documentation-string-button):
+ Fix handling of documentation indent.
+
+2007-06-15 Miles Bader <miles@fencepost.gnu.org>
+
+ * mb-depth.el: New file.
+
+2007-06-15 Masatake YAMATO <jet@gyve.org>
+
+ * vc.el (vc-dired-mode): Show backend name as part of mode name.
+
+2007-06-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-default-create): Move ?h handling here...
+ (widget-default-format-handler): ...from here.
+ (widget-docstring, widget-add-documentation-string-button): New funs.
+ (documentation-string): Add :visibility-widget property.
+ (widget-documentation-string-value-create): Use it.
+
+ * cus-edit.el (custom-split-regexp-maybe): Simplify.
+ (custom-buffer-create-internal): Simplify message.
+ (custom-variable-tag): Reduce height to normal.
+ (custom-variable-value-create, custom-face-value-create)
+ (custom-visibility): New widget.
+ (custom-visibility): New face.
+ (custom-group-value-create):
+ Call widget-add-documentation-string-button, using `custom-visibility'.
+
+2007-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/bytecomp.el (byte-compile-current-group)
+ (byte-compile-nogroup-warn, byte-compile-file): Revert part of last
+ change. Apparently the "warning even if the group is implicit" is
+ a feature rather than a bug.
+
+2007-06-14 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper.el (viper-describe-key-ad)
+ (viper-describe-key-briefly-ad): Different advices for Emacs and XEmacs.
+ Compile them conditionally.
+ (viper-version): Belated version change.
+
+2007-06-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * follow.el (follow-all-followers, follow-generic-filter):
+ * pcomplete.el (pcomplete-restore-windows):
+ * x-dnd.el (x-dnd-maybe-call-test-function, x-dnd-save-state)
+ (x-dnd-drop-data):
+ * emacs-lisp/edebug.el (edebug-pop-to-buffer, edebug-display):
+ * progmodes/python.el (python-complete-symbol):
+ * term/mac-win.el (mac-dnd-drop-data): Remove redundant check.
+
+2007-06-13 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-format-response-string): Use rcirc-nick-syntax
+ around bright and dim regexps. Make sure bright and dim matches
+ use word anchors. Send text through rcirc-markup functions.
+ (rcirc-url-regexp): Add single quote character.
+ (rcirc-connect): Write logs to disk on auto-save-hook.
+ Make server a non-optional argument.
+ (rcirc-log-alist): New variable.
+ (rcirc-log-directory): Make customizable.
+ (rcirc-log-flag): New customizable variable.
+ (rcirc-log): New function.
+ (rcirc-print): Use above function.
+ (rcirc-log-write): New function.
+ (rcirc-generate-new-buffer-name): Strip text properties.
+ (rcirc-switch-to-buffer-function): Remove variable.
+ (rcirc-last-non-irc-buffer): Remove variable.
+ (rcirc-non-irc-buffer): Add function.
+ (rcirc-next-active-buffer): Use above function.
+ (rcirc-keepalive): Send KEEPALIVE ctcp instead of a PING.
+ (rcirc-handler-ctcp-KEEPALIVE): Add handler.
+ (rcirc-handler-CTCP): Don't print KEEPALIVE responses.
+ (rcirc-omit-mode): Add minor-mode.
+ (rcirc-mode-map): Change C-c C-o binding.
+ (rcirc-mode): Clear mode-line-process. Use a custom
+ fill-paragraph-function. Set up buffer-invisibility-spec.
+ (rcirc-response-formats): Remove timestamp code.
+ (rcirc-omit-responses): Add variable.
+ (rcirc-print): Don't put the overlay arrow on potentially omitted
+ lines. Log line to disk. Record activity for private messages
+ from /dim nicks. Facify the fill-prefix with rcirc-timestamp face.
+ (rcirc-jump-to-first-unread-line): Print message if there is no
+ unread text.
+ (rcirc-clear-unread): New function.
+ (rcirc-markup-text-functions): Add variable.
+ (rcirc-markup-timestamp, rcirc-markup-fill): Add functions.
+ (rcirc-debug): Don't mess with window configuration.
+ (rcirc-send-message): Send message before printing locally.
+ Add SILENT argument, do not print message if non-nil.
+ (rcirc-visible-buffers): New function and variable.
+ (rcirc-window-configuration-change-1): Add function.
+ (rcirc-target-buffer): Make sure ACTIONs don't get sent to the
+ server buffer.
+ (rcirc-clean-up-buffer): Set rcirc-target to nil when finished.
+ (rcirc-fill-paragraph): Add function.
+ (rcirc-record-activity, rcirc-window-configuration-change-1):
+ Only update the activity string if it has actually changed.
+ (rcirc-update-activity-string): Remove padding characters from the
+ mode-line string.
+ (rcirc-disconnect-buffer): New function to be called when a
+ channel is parted or the user quits.
+ (rcirc-server-name): Warn when the server-name hasn't been set.
+ (rcirc-window-configuration-change): Postpone work until
+ post-command-hook.
+ (rcirc-window-configuration-change-1): Update mode-line and
+ overlay arrows here.
+ (rcirc-authenticate): Fixc hanserv identification.
+ (rcirc-default-server): Remove variable.
+ (rcirc): Connect according to rcirc-connections.
+ (rcirc-connections): Add variable.
+ (rcirc-startup-channels-alist): Remove variable.
+ (rcirc-startup-channels): Remove function.
+
+2007-06-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-font-lock-keywords): Fix M. Kifer's last change.
+
+2007-06-13 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se> (tiny change)
- * diff-mode.el (diff-mode): Doc fix.
+ * term/xterm.el (terminal-init-xterm): Escape parens in character
+ constants.
-2005-10-16 David Reitter <david.reitter@gmail.com>
+2007-06-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el: Remove unneeded * from docstrings.
+ Use [:alpha:] and [:alnum:] where applicable.
+ (sh-quoted-subshell): Rewrite to correctly
+ handle nested mixes of `...' and $(...).
+ (sh-apply-quoted-subshell): Remove.
+ (sh-font-lock-syntactic-keywords): Adjust call to sh-quoted-subshell.
+
+ * vc-arch.el (vc-arch-command): Remove bzr. It's a different program.
+
+2007-06-13 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-ptch.el (ediff-context-diff-label-regexp): Partially undo
+ previous change.
+
+2007-06-12 Tom Tromey <tromey@redhat.com>
+
+ * subr.el (user-emacs-directory): New defconst.
+ * cmuscheme.el (scheme-start-file):
+ * shell.el (shell):
+ * completion.el (save-completions-file-name):
+ * custom.el (custom-theme-directory):
+ * term/x-win.el (emacs-session-filename):
+ * filesets.el (filesets-menu-cache-file):
+ * thumbs.el (thumbs-thumbsdir):
+ * server.el (server-auth-dir):
+ * image-dired.el (image-dired-dir):
+ (image-dired-db-file):
+ (image-dired-temp-image-file):
+ (image-dired-gallery-dir):
+ (image-dired-temp-rotate-image-file):
+ * play/gamegrid.el (gamegrid-user-score-file-directory):
+ * savehist.el (savehist-file):
+ * tutorial.el (tutorial--saved-dir):
+ * startup.el (auto-save-list-file-prefix): Use user-emacs-directory.
- * mail/sendmail.el (send-mail-function): Use mailclient-send-it
- as default on darwin and windows systems.
+2007-06-12 Ralf Angeli <angeli@caeruleus.net>
-2005-10-16 Sven Joachim <svenjoac@gmx.de> (tiny change)
+ * scroll-lock.el (scroll-lock-mode): Doc fix.
- * arc-mode.el (archive-zip-extract): Doc fix.
+2007-06-12 Michael Kifer <kifer@cs.stonybrook.edu>
-2005-10-16 Romain Francoise <romain@orebokech.com>
+ * ediff-ptch.el (ediff-context-diff-label-regexp): Spurious parenthesis.
- * mouse.el (mouse-1-click-follows-link): Doc fix.
+ * ediff-init.el: Doc strings.
-2005-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-06-12 Stefan Monnier <monnier@iro.umontreal.ca>
- * savehist.el: Don't require CL at runtime.
- (savehist-xemacs): Remove.
- (savehist-coding-system): Use utf-8 if present, regardless of religion.
- (savehist-no-conversion): Use (featurep 'xemacs).
- (savehist-load): Check existence of start-itimer rather than XEmacs.
- Use an idle timer.
- (savehist-process-for-saving): Replace use of CL funs `subseq' and
- `delete-if-not'.
+ * emacs-lisp/bytecomp.el (byte-compile-current-group): New var.
+ (byte-compile-file): Bind it.
+ (byte-compile-nogroup-warn): Use it to avoid spurious warnings when the
+ group argument is provided implicitly.
+ (byte-compile-format-warn, byte-compile-from-buffer)
+ (byte-compile-insert-header): Don't hardcode point-min==1.
+ (byte-compile-file-form-require): Remove unused var old-load-list.
+ (byte-compile-eval): Remove unused vars old-autoloads and hist-nil-new.
-2005-10-16 Hrvoje Niksic <hniksic@xemacs.org>
+2007-06-12 Michael Kifer <kifer@cs.stonybrook.edu>
- * savehist.el: Newer version.
- (savehist-autosave-interval, savehist-coding-system, savehist-timer)
- (savehist-last-checksum, savehist-no-conversion): New vars.
- (savehist-autosave, savehist-process-for-saving, savehist-printable):
- New functions.
- (savehist-load, savehist-save): Use them.
- (savehist-delimit): Remove.
+ * emulation/viper-cmd.el (viper-prefix-arg-com, viper-prefix-arg-value):
+ Display error messages.
+ (viper-prev-destructive-command, viper-insert-prev-from-insertion-ring):
+ Get rid of cl.el dependencies.
-2005-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emulation/viper-init.el (viper-suppress-input-method-change-message):
+ New variable.
+ (viper-activate-input-method-action)
+ (viper-inactivate-input-method-action):
+ Use viper-suppress-input-method-change-message.
- * progmodes/compile.el (compilation-goto-locus): Display the
- compilation buffer first and the source buffer second, in case they're
- in overlapping frames. Don't raise the compilation frame if it was the
- selected window upon entry. Pass the `other-window' arg to
- pop-to-buffer.
+ * emulation/viper-kem.el (viper-vi-basic-map): Disable the bindings
+ for C-s, C-r.
- * info.el (Info-fontify-node): Use dolist.
- Change add-text-properties to put-text-property.
+ * emulation/viper-util.el (viper-set-cursor-color-according-to-state):
+ Use viper-replace-overlay-cursor-color instead of
+ viper-replace-overlay-cursor-color.
+ (viper-sit-for-short): Use sit-for with 3 arguments.
-2005-10-16 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+ * emulation/viper.el (viper-insert-state-mode-list): Add gud-mode.
+ (viper-major-mode-modifier-list): Add viper-comint-mode-modifier-map
+ to gud-mode.
- * textmodes/bibtex.el (bibtex-font-lock-url): Catch when point past
- bound of search.
+ * ediff-mult.el (ediff-meta-buffer-brief-message)
+ (ediff-meta-buffer-verbose-message): New variables.
+ (ediff-meta-buffer-message): Variable deleted.
+ (ediff-verbose-help-enabled): New variable.
+ (ediff-toggle-verbose-help-meta-buffer): New function.
+ (ediff-redraw-directory-group-buffer): Made aware of short/verbose
+ message options.
-2005-10-16 Masatake YAMATO <jet@gyve.org>
+ * ediff-ptch.el (ediff-context-diff-label-regexp): Better regexp.
+ (ediff-fixup-patch-map): Improve heuristic.
- * dabbrev.el (dabbrev-completion): Pass the common
- prefix substring of completion to `display-completion-list'.
+2007-06-12 Stefan Monnier <monnier@iro.umontreal.ca>
- * filecache.el (file-cache-minibuffer-complete)
- (file-cache-complete): Ditto.
+ * log-view.el (log-view-file-re, log-view-message-re): Use \(?1:...\).
+ (log-view-font-lock-keywords): Simplify.
+ (log-view-current-file, log-view-current-tag): Simplify.
- * tempo.el (tempo-display-completions): Ditto.
+2007-06-12 Sam Steingold <sds@gnu.org>
- * wid-edit.el (widget-file-complete, widget-color-complete): Ditto.
+ * vc-arch.el (vc-arch-command): Also try "baz" and "bzr".
- * emacs-lisp/lisp.el (lisp-complete-symbol): Ditto.
+2007-06-12 Juanma Barranquero <lekktu@gmail.com>
- * eshell/em-hist.el (eshell-list-history): Ditto.
+ * desktop.el (desktop-load-locked-desktop): New option.
+ (desktop-read): Use it.
+ (desktop-truncate, desktop-outvar, desktop-restore-file-buffer):
+ Use `when'.
- * mail/mailabbrev.el (mail-abbrev-complete-alias): Ditto.
+2007-06-12 Davis Herring <herring@lanl.gov>
- * mail/mailalias.el (mail-complete): Ditto.
+ * desktop.el (desktop-save-mode-off): New function.
+ (desktop-base-lock-name, desktop-not-loaded-hook): New variables.
+ (desktop-full-lock-name, desktop-file-modtime, desktop-owner)
+ (desktop-claim-lock, desktop-release-lock): New functions.
+ (desktop-kill): Tell `desktop-save' that this is the last save.
+ Release the lock afterwards.
+ (desktop-buffer-info): New function.
+ (desktop-save): Use it. Run `desktop-save-hook' where the doc
+ says to. Detect conflicts, and manage the lock.
+ (desktop-read): Detect conflicts. Manage the lock.
- * progmodes/etags.el (complete-tag): Ditto.
+2007-06-12 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/make-mode.el (makefile-complete): Ditto.
+ * emulation/tpu-mapper.el (tpu-emacs-map-key): Use new keymap names.
- * progmodes/meta-mode.el (meta-complete-symbol): Ditto.
+ * emulation/tpu-edt.el (tpu-gold-map): Rename from GOLD-map.
+ (tpu-lucid-emacs-p): Remove. Use (featurep 'xemacs) instead.
+ (CSI-map, GOLD-CSI-map, GOLD-SS3-map, SS3-map): Delete vars.
+ (tpu-gold-map, tpu-global-map): Add all the SS3 and CSI bindings, using
+ keysyms rather than byte sequences.
+ (tpu-copy-keyfile): Don't force the user to use tpu-mapper.el.
- * progmodes/octave-mod.el (octave-complete-symbol): Ditto.
+2007-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/pascal.el (pascal-complete-word)
- (pascal-show-completions): Ditto.
+ * font-lock.el (font-lock-add-keywords): In case font-lock was only
+ half-activated, forcefully activate it completely.
- * textmodes/bibtex.el (bibtex-complete-internal): Ditto.
+2007-06-11 Richard Stallman <rms@gnu.org>
- * simple.el (completion-common-substring): New variable.
- (completion-setup-function): Use `completion-common-substring'
- to put faces.
+ * cus-edit.el (custom-variable-type): Doc fix.
-2005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
- * term/mac-win.el: Apply 2005-10-09 change for term/x-win.el.
- (x-get-selection, mac-select-convert-to-string): Convert from/to
- UTF-16 clipboard data as in native byte order, no BOM.
+ * progmodes/sh-script.el (sh-font-lock-backslash-quote)
+ (sh-font-lock-flush-syntax-ppss-cache): New functions.
+ (sh-font-lock-syntactic-keywords): Use them to distinguish the
+ different possible cases for \'.
-2005-10-16 Nick Roberts <nickrob@snap.net.nz>
+ * complete.el (PC-bindings): Don't bind things already bound in the
+ parent keymap.
- * progmodes/gud.el (gud-tool-bar-map): Rename the images
- appropriately (gud/next, gud/nexti, gud/step, gud/stepi).
- (gud-sentinel): Use speedbar-frame to check for speedbar.
+ * textmodes/bibtex-style.el: New file.
-2005-10-15 Richard M. Stallman <rms@gnu.org>
+2007-06-11 Riccardo Murri <riccardo.murri@gmail.com>
- * savehist.el: New file.
+ * vc-bzr.el: New file.
-2005-10-14 Karl Chen <quarl@cs.berkeley.edu>
+2007-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
- * textmodes/tex-mode.el (tex-font-lock-keywords-2):
- Fix bug in \bf fontification.
+ * vc-svn.el (vc-svn-program): New var.
+ (vc-svn-command): Use it.
-2005-10-15 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-06-11 Juanma Barranquero <lekktu@gmail.com>
- * pcvs.el (cvs-edit-log-files): New var.
- (cvs-mode-edit-log): New arg `file'.
- (cvs-edit-log-minor-wrap): Don't set the ignore-marks property.
- Instead force the use of the original file and nothing else.
- (cvs-edit-log-filelist): Don't use the cvs-mode-* function unless
- the cvs-minor-wrap-function is set.
- (cvs-do-edit-log): Obey the vars set in cvs-edit-log-minor-wrap.
+ * server.el (server-switch-buffer): Remove redundant check.
-2005-10-14 Bill Wohler <wohler@newt.com>
+2007-06-10 Martin Rudalics <rudalics@gmx.at>
- * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
- * toolbar/gud-cont.*: Moved to etc/images/gud/cont.*.
- * toolbar/gud-down.*: Moved to etc/images/gud/down.*.
- * toolbar/gud-finish.*: Moved to etc/images/gud/finish.*.
- * toolbar/gud-ni.*: Moved to etc/images/gud/ni.*.
- * toolbar/gud-n.*: Moved to etc/images/gud/n.*.
- * toolbar/gud-print.*: Moved to etc/images/gud/print.*.
- * toolbar/gud-pstar.*: Moved to etc/images/gud/pstar.*.
- * toolbar/gud-remove.*: Moved to etc/images/gud/remove.*.
- * toolbar/gud-run.*: Moved to etc/images/gud/run.*.
- * toolbar/gud-si.*: Moved to etc/images/gud/si.*.
- * toolbar/gud-s.*: Moved to etc/images/gud/s.*.
- * toolbar/gud-until.*: Moved to etc/images/gud/until.*.
- * toolbar/gud-up.*: Moved to etc/images/gud/up.*.
- * toolbar/gud-watch.*: Moved to etc/images/gud/watch.*.
+ * emacs-lisp/bytecomp.el (byte-compile-find-cl-functions):
+ Match against file-name-nondirectory.
+ Fix text on user customization variables.
+ Reported by Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>.
- * progmodes/gud.el (gud-tool-bar-map): Rename the images
- appropriately (for example, gud-break to gud/break).
+2007-06-09 Alfred M. Szmidt <ams@gnu.org> (tiny change)
-2005-10-14 Chong Yidong <cyd@stupidchicken.com>
+ * mail/rmail.el (rmail-movemail-variant-in-use): Fix doc typo.
- * longlines.el (longlinges-search-function)
- (longlines-search-forward, longlines-search-backward): New functions.
- (longlines-mode): Set isearch-search-fun-function to
- longlinges-search-function.
+2007-06-09 Davis Herring <herring@lanl.gov>
- * mouse.el (mouse-drag-region-1): Handle the case where a
- double-click event is bound to an arbitrary function.
+ * desktop.el (desktop-minor-mode-table): Doc fix.
-2005-10-14 David Ponce <david@dponce.com>
+2007-06-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * recentf.el (recentf-track-opened-file)
- (recentf-track-closed-file, recentf-update-menu)
- (recentf-used-hooks, recentf-enabled-p): Move before dialog stuff.
- (recentf-dialog-mode-map): Map follow-link to RET, so dialogs obey
- mouse-1-click-follows-link.
+ * textmodes/css-mode.el (css-navigation-syntax-table):
+ Use set-char-table-range so it also works in the unicode branch.
-2005-10-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-06-08 Nick Roberts <nickrob@snap.net.nz>
- * toolbar/diropen.xpm, toolbar/diropen.pbm: New versions made from
- Gnome file-manager.png. Suggested by
- Joachim Nilsson <joachim.nilsson@vmlinux.org>.
+ * help-mode.el (help-xref-forward-stack)
+ (help-xref-stack-forward-item, help-forward-label): New variables.
+ (help-forward): New button type.
+ (help-setup-xref): Initialise help-xref-forward-stack.
+ (help-make-xrefs): Add forward button, if appropriate.
+ (help-xref-go-back): Push item on forward stack.
+ (help-xref-go-forward, help-go-forward): New functions.
- * toolbar/README: Add diropen.xpm.
+2007-06-07 Chong Yidong <cyd@stupidchicken.com>
-2005-10-13 Bill Wohler <wohler@newt.com>
+ * dired.el (dired-mode-map): Remove spurious separator.
- * makefile.w32-in (MH_E_SRC): Rename from MH-E-SRC per NMAKE
- restrictions. Suggested by David Robinow <drobinow@gmail.com>.
+2007-06-07 Juanma Barranquero <lekktu@gmail.com>
-2005-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+ * progmodes/ebrowse.el (ebrowse-draw-file-member-info): Doc fix.
* progmodes/mixal-mode.el (mixal-operation-codes-alist):
- Don't waste the byte-compiler's time on constant data.
-
-2005-10-13 Kenichi Handa <handa@m17n.org>
-
- * international/utf-8.el (utf-8-compose): Display an invalid UTF-8
- byte with `escape-glyph' face.
-
- * international/fontset.el (ccl-encode-unicode-font):
- Lookup utf-subst-table-for-encode, not ucs-mule-cjk-to-unicode.
- Handle the case that ucs-mule-to-mule-unicode translates a character to
- ASCII (usually for IPA characters).
-
-2005-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * info.el (Info-fontify-node): Don't be fooled by a lone "...".
- Don't hide the underline of titles if font-lock-mode is disabled.
-
-2005-10-12 Bill Wohler <wohler@newt.com>
-
- * makefile.w32-in (MH-E-SRC): New. Used by mh-autoloads.
- (mh-autoloads): New. Builds mh-e/mh-loaddefs.el. Rebuilds if any
- files in MH-E-SRC have been updated.
- (updates, compile, recompile, bootstrap): Depend on mh-autoloads.
-
-2005-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/mixal-mode.el (mixal-operation-codes): Remove.
- (mixal-mode-syntax-table): Add \n as end-comment.
- (mixal-operation-codes-alist): Immediately initialize to full value.
- (mixal-add-operation-code): Remove.
- (mixal-describe-operation-code): Make the arg non-optional.
- Use the interactive spec instead.
- Use mixal-operation-codes-alist rather than mixal-operation-codes.
- (mixal-font-lock-keywords): Don't highlight comments here any more.
- (mixal-font-lock-syntactic-keywords): New var.
- (mixal-mode): Use it. Fix comment-start-skip.
-
-2005-10-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * startup.el (command-line-x-option-alist): -nb => -nbi.
-
-2005-10-12 Kim F. Storm <storm@cua.dk>
-
- * startup.el (fancy-splash-default-action): Discard mouse click in
- the splash screen window, as it has no sensible meaning in the
- next window to be selected. Fixes error reported by Jan D.
-
-2005-10-12 Reiner Steib <Reiner.Steib@gmx.de>
-
- * desktop.el (desktop-load-file): Do nothing when FUNCTION is nil.
-
-2005-10-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/mixal-mode.el: Sync with version in the GNU MDK project.
- Try to fix up minor layout issues like indentation, line break, etc...
- (mixal-mode-syntax-table): Don't try to specify comment syntax,
- because it doesn't work.
- (mixal-operation-codes): Add some more codes.
- (mixal-font-lock-keywords): Process comments here.
- (mixal-mode): mixasm no longer needs -g option.
-
-2005-10-11 Sven Joachim <svenjoac@gmx.de> (tiny change)
-
- * progmodes/sh-script.el (sh-tmp-file):
- Use mktemp -t. Finish support for es and rc shells.
-
-2005-10-11 Jay Belanger <belanger@truman.edu>
-
- * calc/calcalg2.el (calc-integral): With an argument, compute the
- definite integral.
-
-2005-10-11 Chong Yidong <cyd@stupidchicken.com>
-
- * mouse.el (mouse-drag-region-1): Don't try to catch a
- double-click when doing follow-link (it's overridden anyway).
-
-2005-10-11 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/autoload.el (update-directory-autoloads): Doc fix.
- (autoload-print-form-outbuf): Add docstring.
-
-2005-10-11 Juri Linkov <juri@jurta.org>
-
- * info.el (Info-mode-menu): Delete menu item "Edit".
- (Info-mode): Delete description of Info-edit from docstring,
- and rearrange descriptions of Info commands in the order
- they are documented in the Info manual.
-
-2005-10-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * calendar/appt.el (appt-check): Use diary-selective-display var.
-
-2005-10-10 Richard M. Stallman <rms@gnu.org>
-
- * net/newsticker.el (newsticker-start, newsticker-show-news):
- Add autoload cookies.
-
-2005-10-10 Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
-
- * progmodes/sh-script.el (sh-tmp-file): Use mktemp.
-
-2005-10-10 Karl Chen <quarl@cs.berkeley.edu>
-
- * jka-cmpr-hook.el (jka-compr-handler): Fix typo in `operations' prop.
-
-2005-10-10 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-arith.el (math-check-known-scalarp)
- (math-check-known-matrixp): Check the values of arguments that are
- variables.
- (math-check-known-square-matrixp): New function.
- (math-known-square-matrixp): Use math-check-known-square-matrixp.
- (math-super-types): Add sqmatrix type.
-
- * calc/calc-mode.el (calc-matrix-mode, math-get-modes-vec): Change the
- mode name `square' to `sqmatrix'.
-
- * calc/calc.el (calc-matrix-mode, calc-set-mode-line): Change the
- mode name `square' to `sqmatrix'.
-
-2005-10-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/etags.el (select-tags-table-mode): Don't use
- selective-display.
- (tags-select-tags-table): Pass `button' to the action function.
- (select-tags-table): Place the side-info on button properties rather
- than in hidden text. Abbreviate file names.
- (select-tags-table-mode-map): Inherit rather than copy buttom-map.
- (select-tags-table-select): Add `button' argument.
- Get side-info from the button property rather than from hidden text.
-
-2005-10-11 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-install-speedbar-variables): Add more bindings.
- (gud-speedbar-buttons): Preserve point if possible.
- (gud-sentinel): Restore previous speedbar display type.
-
- * progmodes/gdb-ui.el (gdba): Improve diagram.
- (def-gdb-auto-update-handler, gdb-info-locals-handler)
- (gdb-put-breakpoint-icon, gdb-remove-breakpoint-icons):
- Call get-buffer-window once.
-
-2005-10-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/pascal.el (pascal-mode-map): Move init into declaration.
- (pascal-mode-syntax-table): Make (* *) markers same class as { ... }.
- (pascal-indent-command): Remove unused var `ind'.
- (pascal-indent-case): Remove unused var `oldpos'.
- (pascal-outline-map): Don't inherit from pascal-mode-map anymore,
- since it's now used as a proper minor mode map.
- (pascal-outline): Rename to pascal-outline-mode.
- (pascal-outline-mode): Use define-minor-mode.
- (pascal-outline-mode, pascal-outline-change): Use overlays rather than
- selective-display.
-
-2005-10-10 Andreas Schwab <schwab@suse.de>
-
- * textmodes/tex-mode.el (tex-font-lock-keywords-2): Adjust match
- number. Reported by Karl Chen <quarl@cs.berkeley.edu>.
-
- * Makefile.in ($(lisp)/mh-e/mh-loaddefs.el): Fix for building
- outside source directory.
-
-2005-10-10 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode-map): Explicit definition of `C-c
- C-x' as a prefix.
- (orgtbl-mode-map): Full keymap instead of sparse, because all
- `self-insert-command' keys are redefined in this map.
- (org-export-as-html): Specify charset for HTML file, by taking it
- from the coding system.
-
-2005-10-10 Kenichi Handa <handa@m17n.org>
-
- * textmodes/flyspell.el (flyspell-check-word-p):
- If unread-command-events is non-empty, don't call sit-for.
-
-2005-10-09 Richard M. Stallman <rms@gnu.org>
-
- * font-lock.el (font-lock-syntactic-keywords)
- (font-lock-keywords): Doc fixes.
-
- * textmodes/flyspell.el (flyspell-external-point-words):
- Simplify logic, and don't try to check for consecutive appearances
- of one incorrect word.
-
-2005-10-10 Nick Roberts <nickrob@snap.net.nz>
-
- * speedbar.el (speedbar-buffer-easymenu-definition): Add menu
- separator.
-
- * progmodes/gud.el (gud-last-speedbar-buffer): Remove.
- (gud-install-speedbar-variables): Add GUD to speedbar "Displays" list.
- (gud-expansion-speedbar-buttons): New function.
- (gud-speedbar-buttons): Check for gud-comint-buffer.
-
-2005-10-09 Bill Wohler <wohler@newt.com>
-
- * Makefile.in (updates): Add mh-loaddefs dependency.
-
-2005-10-09 Chong Yidong <cyd@stupidchicken.com>
-
- * speedbar.el (speedbar-file-key-map): Fix typo.
-
-2005-10-09 Daniel Brockman <daniel@brockman.se>
-
- * cus-start.el (line-spacing): Add custom spec.
-
-2005-10-09 Romain Francoise <romain@orebokech.com>
-
- * textmodes/ispell.el (ispell-check-version): Fix last change.
-
-2005-10-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * term/x-win.el: Remove -i, --icon-type from comment.
-
- * startup.el (command-line-x-option-alist): Remove options -i,
- -itype, --icon-type, added -nb, --no-bitmap-icon.
-
-2005-10-09 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-speedbar-menu-items): Use :visible
- instead of :active.
-
-2005-10-08 Eric Hanchrow <offby1@blarg.net> (tiny change)
-
- * textmodes/ispell.el (ispell-check-version):
- Ignore hyphen, and all that follows, in aspell's version text.
-
-2005-10-08 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-arith.el (math-known-square-matrixp): New function.
- (math-pow-fancy): Check for matrices before distributing exponent
- across products.
-
- * calc/calc-keypd.el (calc-do-keypad): Widen keypad window for
- fullscreen keypad. Suggested by Luc Teirlinck.
- (calc-keypad-show-input): Add space for formatting.
-
- * calc/calc-mode.el (calc-matrix-mode, math-get-modes-vec):
- Add square matrix option.
-
- * calc/calc-poly.el (math-expand-term): Check for matrices instead
- of checking calc-matrix-mode when deciding how to expand.
-
- * calc/calc.el (calc-set-mode-line): Add square matrix option.
-
-2005-10-08 Lars Hansen <larsh@soem.dk>
-
- * net/tramp.el (tramp-perl-directory-files-and-attributes):
- Add error handling.
- (tramp-handle-directory-files-and-attributes): Handle perl error msg.
-
-2005-10-08 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.51.
-
- * net/tramp.el (tramp-handle-set-visited-file-modtime)
- (tramp-handle-insert-file-contents, tramp-handle-write-region):
- Insert special handling for `last-coding-system-used', again
- it still seems to be necessary (unlike stated before).
- Reported by Toshinori Sugita <sugita@d-pad.co.jp>.
- (tramp-password-prompt-regexp): There might be other words before
- trailing ":". Reported by Kurt Steinkraus <kurt@steinkraus.us>.
- (tramp-chunksize): Improve docstring.
- (tramp-set-auto-save-file-modes): Octal integer code #o600 breaks
- Emacs 20. Use `tramp-octal-to-decimal' therefore. Reported by
- Christian Joergensen <bugs@razor.dk>.
-
-2005-10-07 Glenn Morris <rgm@gnu.org>
-
- * progmodes/f90.el (f90-keywords-re, f90-mode): Doc fix.
- (f90-font-lock-keywords-2, f90-mode-abbrev-table): Add `double
- precision'.
-
-2005-10-07 Romain Francoise <romain@orebokech.com>
-
- * ibuf-ext.el (ibuffer-do-shell-command-pipe)
- (ibuffer-do-shell-command-pipe-replace)
- (ibuffer-do-shell-command-file, ibuffer-do-eval)
- (ibuffer-do-view-and-eval, ibuffer-do-rename-uniquely)
- (ibuffer-do-revert, ibuffer-do-replace-regexp)
- (ibuffer-do-query-replace, ibuffer-do-query-replace-regexp)
- (ibuffer-do-print, ibuffer-filter-by-mode, ibuffer-filter-by-used-mode)
- (ibuffer-filter-by-name, ibuffer-filter-by-filename)
- (ibuffer-filter-by-size-gt, ibuffer-filter-by-size-lt)
- (ibuffer-filter-by-content, ibuffer-filter-by-predicate
- (ibuffer-do-sort-by-major-mode, ibuffer-do-sort-by-mode-name)
- (ibuffer-do-sort-by-alphabetic, ibuffer-do-sort-by-size):
- Autoload file sans suffix.
-
- * emulation/cua-base.el (cua-toggle-global-mark): Likewise.
-
-2005-10-07 David Ponce <david@dponce.com>
-
- * recentf.el (recentf-menu-open-all-flag): New option.
- (recentf-digit-shortcut-command-name): New function.
- (recentf--shortcuts-keymap): New variable.
- (recentf-menu-shortcuts): New variable.
- (recentf-make-menu-items): Initialize it. Replace the "More..."
- menu item by "All...", if `recentf-menu-open-all-flag' is non-nil.
- (recentf-menu-value-shortcut): New function.
- (recentf-make-menu-item): Use it. No more in-lined.
- (recentf-dialog-mode-map): Base on `recentf--shortcuts-keymap'.
- (recentf-open-most-recent-file): Rename from
- `recentf-open-file-with-key'. Don't depend on key binding.
- (recentf-mode-map): New variable.
- (recentf-mode): Use it.
-
-2005-10-06 Bill Wohler <wohler@newt.com>
-
- * mh-e/mh-loaddefs.el: Remove. Now generated automatically.
-
- * Makefile.in (AUTOGENEL): Add mh-e/mh-loaddefs.el.
- (MH-E-SRC): New. Used by mh-autoloads.
- (mh-autoloads): New. Builds mh-e/mh-loaddefs.el. Rebuilds if any
- files in MH-E-SRC have been updated.
- (compile, recompile, bootstrap): Depend on mh-autoloads.
-
-2005-10-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Only display un-intuitive
- gud-break and gud-remove icons when the fringe is not available.
-
- * progmodes/gdb-ui.el (gdb-fringe-width -> gdb-buffer-fringe-width):
- Typo.
-
-2005-10-06 Micha,Ak(Bl Cadilhac <michael.cadilhac-@t-lrde.epita.fr>
-
- * play/zone.el (zone): Wrap body with save-window-excursion.
-
-2005-10-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * calendar/cal-menu.el (calendar-mouse-view-diary-entries):
- Use the new `list-only' arg to diary-list-entries.
-
- * calendar/diary-lib.el: Use overlays rather than selective-display.
- (diary-selective-display): New var.
- (diary-header-line-format): Use it.
- (diary-list-entries): Add argument `list-only'.
- Put the buffer in diary-mode. Don't add \^M at beg and end.
- Replace \^M by invisible overlays.
- (diary-unhide-everything): Replace \^M by invisible overlays.
- (print-diary-entries): Look for overlays rather than \^M.
- Add a space to the temp buffer name.
- (diary-show-all-entries, mark-diary-entries, make-diary-entry):
- Put the buffer in diary-mode.
- (list-sexp-diary-entries): Replace \^M by invisible overlays.
- (diary-anniversary): Make the year arg optional.
- (diary-time-regexp): New const.
- (diary-font-lock-keywords): Use it to accept a few more time formats.
-
- * pcvs.el (cvs-sentinel): Make sure we do re-enable undo.
-
-2005-10-06 Thien-Thi Nguyen <ttn@gnu.org>
-
- * textmodes/artist.el (artist-ellipse-mirror-quadrant):
- Fix bug introduced 2005-07-03: Use (car (last ...))
- to faithfully reproduce replaced artist-last.
- (artist-set-arrow-points-for-poly): Likewise.
- Suggested by Johan Bockg,Ae(Brd.
-
-2005-10-06 Juanma Barranquero <lekktu@gmail.com>
-
- * dframe.el (x-pointer-hand2, x-pointer-top-left-arrow):
- * wid-edit.el (widget):
- * progmodes/gdb-ui.el (gdb-buffer-fringe-width):
- * progmodes/vhdl-mode.el (speedbar-attached-frame): Add defvars.
-
-2005-10-06 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (set-language-environment):
- Fix setting up of case-table for unibyte mode.
-
- * simple.el (what-cursor-position): If the character is displayed
- by some `display' text property, show that. Don't use
- single-key-description for eight-bit characters in multibyte mode.
-
-2005-10-06 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-fringe-width): New variable.
- (gdb-ann3): Set it.
- (gdb-put-breakpoint-icon): Don't take fringe-width from speedbar frame.
- (gdb-info-frames-custom): Use inverse-video for first five
- characters of selected frame only.
- (gdb-get-frame-number): Select frame even when point is on frame
- number.
-
-2005-10-06 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/gdb-ui.el (gdb-info-breakpoints-custom):
- Put `font-lock-function-name-face'.
- (gdb-info-frames-custom): Put `font-lock-function-name-face'
- and `font-lock-variable-name-face'
- (gdb-registers-font-lock-keywords): New font lock keywords definition.
- (gdb-registers-mode): Use `gdb-registers-font-lock-keywords`.
- (gdb-memory-font-lock-keywords): New font lock keywords definition.
- (gdb-memory-mode): Use `gdb-memory-font-lock-keywords'.
- (gdb-local-font-lock-keywords): New font lock keywords definition.
- (gdb-locals-mode): Use `gdb-local-font-lock-keywords'
- (gdb-threads-font-lock-keywords): New font lock keywords definition.
- (gdb-threads-mode): Use `gdb-threads-font-lock-keywords'.
-
-2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-merge.el (ediff-merge-region-is-non-clash): New defsubst.
- (ediff-merge-region-is-non-clash-to-skip): Previously called
- ediff-merge-region-is-non-clash.
-
- * ediff-mult.el (ediff-append-custom-diff, ediff-meta-show-patch):
- Use insert-buffer-substring.
-
- * ediff-ptch.el (ediff-fixup-patch-map): Use better heuristics for
- selecting files to patch. Also bug fixes.
-
- * ediff-util.el (ediff-setup): Bug fix.
- (ediff-next-difference): Never skip clashes that differ in white
- space only.
-
- * ediff-wind.el (ediff-setup-control-frame)
- (ediff-destroy-control-frame): Check the menubar feature.
-
- * emulation/viper-cmd.el (viper-normalize-minor-mode-map-alist)
- (viper-refresh-mode-line): Use make-local-variable to localize
- some vars instead of make-variable-buffer-local. Suggested by
- Stefan Monnier.
-
- * emulation/viper-init.el (viper-make-variable-buffer-local):
- Delete alias.
- (viper-restore-cursor-type, viper-set-insert-cursor-type):
- Use make-local-variable instead of make-variable-buffer-local.
- Suggested by Stefan Monnier.
-
- * emulation/viper.el (viper-mode): Don't use
- viper-make-variable-buffer-local.
- (viper-comint-mode-hook): Use make-local-variable on
- require-final-newline.
- (viper-non-hook-settings): Don't use make-variable-buffer-local.
-
-2005-10-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/scheme.el (scheme-mode-syntax-table): Mark ; as being
- also the second char of a comment-start sequence.
- (scheme-sexp-comment-syntax-table): New var.
- (lambda, define): Set their scheme-doc-string-elt property.
- (scheme-font-lock-syntactic-face-function): Handle sexp-comments.
- Use lisp-font-lock-syntactic-face-function now that it properly
- handles |...| symbols.
- (scheme-mode-variables): Set lisp-doc-string-elt-property,
- parse-sexp-lookup-properties and font-lock-extra-managed-props.
-
- * emacs-lisp/lisp-mode.el (lisp-mode-syntax-table): Move the nesting
- bit from # to |.
- (lisp-font-lock-syntactic-face-function): Distinguish |...| symbols.
-
- * emacs-lisp/lisp-mode.el (lambda): Add its doc-string-elt property.
- (lisp-doc-string-elt-property): New var.
- (lisp-font-lock-syntactic-face-function): Use it.
- Rewrite to recognize docstrings even for forms not at toplevel.
-
- * progmodes/scheme.el (scheme-mode-syntax-table): Put the nested
- annotation on the | part of #| rather than on the # part.
- (scheme-font-lock-syntactic-face-function): New function, to
- distinguish strings from |...| symbols.
- (scheme-mode-variables): Use it. Also fix up the font-lock-time
- syntax-table so that #|...|# is properly highlighted.
-
- * emacs-lisp/lisp-mode.el (lisp-font-lock-syntactic-face-function):
- Don't mark as docstring the 3rd elem of an unknown toplevel form.
-
-2005-10-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * bindings.el (global-map): Resync [home] and [end] bindings with C-a
- and C-e.
-
- * emacs-lisp/eldoc.el: Move comments into docstrings.
- (eldoc-message-commands): Initialize in its declaration.
- Add move-beginning-of-line and move-end-of-line.
- (eldoc-add-command, eldoc-add-command-completions)
- (eldoc-remove-command, eldoc-remove-command-completions): Simplify.
-
- * outline.el (outline-mark-subtree): Activate the mark.
-
- * calendar/appt.el (appt-time-regexp): New var.
- (appt-add, appt-make-list): Use it.
- (appt-convert-time): Clean up.
-
- * textmodes/tex-mode.el (tex-font-lock-syntactic-face-function):
- Don't set any syntax-table property here.
- (tex-font-lock-verb): New function. Do it here.
- (tex-font-lock-syntactic-keywords): Use it.
-
-2005-10-04 Richard M. Stallman <rms@gnu.org>
-
- * wid-edit.el (widget-file-complete): Get the widget start point
- the right way. Default directory to `/' if file has none.
-
- * x-dnd.el (x-dnd-drop-data): Check for dedicated windows.
-
- * textmodes/flyspell.el (flyspell-mode-on):
- Call ispell-maybe-find-aspell-dictionaries.
-
- * textmodes/ispell.el (ispell-word, ispell-region):
- Call ispell-maybe-find-aspell-dictionaries.
- (ispell-accept-buffer-local-defs):
- Don't call ispell-maybe-find-aspell-dictionaries.
-
-2005-10-04 Richard M. Stallman <rms@gnu.org>
-
- * iswitchb.el (iswitchb-buffer-ignore): Label it risky.
-
-2005-10-04 Emilio C. Lopes <eclig@gmx.net>
-
- * iswitchb.el (iswitchb-ignore-buffername-p): Use `functionp'
- instead of `fboundp' in order to allow for anonymous functions.
-
-2005-10-04 Chong Yidong <cyd@stupidchicken.com>
-
- * info.el (Info-next, Info-prev, Info-up): Select info buffer, in
- case the user clicks on the link while another window is selected.
- (Info-speedbar-hierarchy-buttons): Use speedbar-current-frame.
-
- * dframe.el (dframe-update-keymap): Use mouse-1-click-follows-link
- functionality.
- (dframe-help-echo): Save point in case mouse tracking is off.
-
-2005-10-04 Thien-Thi Nguyen <ttn@gnu.org>
-
- * net/ange-ftp.el (ange-ftp-ls): Fix typo introduced in last change.
-
-2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cc-styles.el (c-setup-paragraph-variables): Make sure we do
- not change the global value of those vars.
-
- * progmodes/cc-mode.el (c-basic-common-init): Remove calls to
- make-local-variable which we do not need any more.
-
-2005-10-03 Chong Yidong <cyd@stupidchicken.com>
-
- * speedbar.el (speedbar-ignored-path-regexp, speedbar-line-path)
- (speedbar-ignored-path-expressions, speedbar-buffers-line-path)
- (speedbar-add-ignored-path-regexp, speedbar-buffers-line-path)
- (speedbar-path-line): Define obsolete aliases.
- (speedbar-line-directory): Doc fix.
-
- * progmodes/vhdl-mode.el (vhdl-speedbar-initialize)
- (vhdl-speedbar-rescan-hierarchy): Call speedbar-line-directory
- instead of speedbar-line-path.
-
-2005-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * x-dnd.el (x-dnd-drop-data): Don't set dnd-open-file-other-window
- to nil if dropping on a window. Handle dropping on a minibuffer window
- like dropping on a non-window part of Emacs.
-
-2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/ange-ftp.el: Use with-current-buffer.
- (ange-ftp-insert-directory): Do not follow symlinks any more.
-
- * textmodes/ispell.el (ispell-find-aspell-dictionaries):
- Remove interactive spec.
-
-2005-10-03 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-mode): Use custom-initialize-set.
-
-2005-10-02 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/ebnf2ps.el (ebnf-eps-production-list):
- Use insert-buffer-substring.
-
- * net/tramp.el: Pacify byte compiler warnings in pacification code.
- (tramp-handle-file-local-copy): Use insert-buffer-substring.
-
-2005-10-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/ange-ftp.el (ange-ftp-insert-directory): Undo unintended part
- in last change.
- (ange-ftp-insert-directory): Fix up the search for the case where
- `file' is absolute.
-
-2005-10-02 Romain Francoise <romain@orebokech.com>
-
- * progmodes/compile.el (compile-goto-error): Delete extra paren.
-
-2005-10-02 Andreas Schwab <schwab@suse.de>
-
- * ediff-ptch.el (ediff-fixup-patch-map): Handle file names without
- directory component in the session info.
-
-2005-10-01 Richard M. Stallman <rms@gnu.org>
-
- * comint.el (comint-redirect-subvert-readonly): Doc fix.
-
- * simple.el (next-error-internal): New function.
-
- * progmodes/compile.el (compilation-buffer-name): New arg MODE-COMMAND.
- (compilation-start): Pass new arg to compilation-buffer-name.
- (compile-goto-error): Use next-error-internal.
-
-2005-10-01 Chong Yidong <cyd@stupidchicken.com>
-
- * speedbar.el: Remove RCS tag.
- (speedbar-check-read-only): Handle non-existent files.
-
- * dframe.el, ezimage.el, sb-image.el: Remove RCS tags.
-
- * info.el (Info-speedbar-hierarchy-buttons)
- (Info-speedbar-goto-node): Call speedbar-select-attached-frame.
-
-2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-valid-entry-whitespace-re):
- Do not match newline.
- (bibtex-realign): Do not use bibtex-valid-entry-whitespace-re.
- (bibtex-summary): Remove unnecessary save-excursion.
- (bibtex-fill-field-bounds): Use fill-region-as-paragraph.
-
-2005-10-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Add charset info for "iso10646-1".
- Modify default fontset to use ATSUI-compatible fonts for some charsets
- if available.
-
-2005-10-01 Chong Yidong <cyd@stupidchicken.com>
-
- * speedbar.el: Re-apply arch tag.
- (speedbar-version): Rename to version 1.0. Suggested by Eric
- M. Ludlam.
- Reapply two changes from Emacs CVS' version of speedbar lost
- during the merge:
- (speedbar-use-imenu-flag): Avoid unnecessary use of locate-library.
- (speedbar-frame-parameters): Improve customize type.
-
-2005-09-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/ange-ftp.el (ange-ftp-gwp-start): Use with-current-buffer.
- (ange-ftp-file-directory-p): Fix the symlink case.
- (ange-ftp-insert-directory): When listing a single file, get a list of
- the parent buffer and extract the relevant line. Inspired from a patch
- by Katsumi Yamaoka <yamaoka@jpl.org>.
- (ange-ftp-file-name-sans-versions): Simplify.
-
-2005-09-30 Bill Wohler <wohler@newt.com>
-
- Move MH-E image files from toolbar and mail directories into
- etc/images.
-
- * mail/reply2.*: Move to etc/images/mail/reply*.
-
- * toolbar/execute.*, toolbar/highlight.*, toolbar/mh-logo.xpm:
- * toolbar/page-down.*, toolbar/show.*, toolbar/widen.*: Move to
- etc/images.
-
- * toolbar/alias.*, toolbar/refile.*, toolbar/repack.*:
- * toolbar/reply*: Move to etc/images/mail.
-
- * toolbar/rescan.*: Move and rename to etc/images/refresh.*.
-
-2005-09-30 Eric M. Ludlam <zappo@gnu.org>
-
- * speedbar.el: New version 1.0pre3.
-
- Frame management code (including timer, and mouse click specifics)
- moved to dframe.el:
- (speedbar-attached-frame): Removed. Use dframe-attached-frame.
- (speedbar-timer): Removed. Use dframe-timer.
- (speedbar-close-frame): Removed. Use dframe-close-frame.
- (speedbar-activity-change-focus-flag): Removed. Use
- dframe-activity-change-focus-flag.
- (speedbar-update-speed, speedbar-navigating-speed): Obsolete. Use
- dframe-update-speed.
-
- (speedbar-current-frame): New macro. Use this instead of the
- variable speedbar-frame.
-
- (speedbar-use-images, speedbar-expand-image-button-alist)
- (speedbar-insert-image-button-maybe): Moved to sb-image.el.
-
- (speedbar-find-image-on-load-path): Removed. Replaced by
- defezimage in ezimage.el.
- (speedbar-expand-image-button-alist): Removed. Replaced by
- ezimage-expand-image-button-alist in ezimage.el.
-
- (speedbar-ignored-directory-regexp)
- (speedbar-add-ignored-directory-regexp)
- (speedbar-ignored-directory-expressions)
- (speedbar-line-directory, speedbar-buffers-line-directory)
- (speedbar-directory-line, speedbar-buffers-line-directory):
- Renamed, replacing `path' with `directory'.
-
- (speedbar-create-directory, speedbar-expand-line-descendants)
- (speedbar-toggle-line-expansion)
- (speedbar-contract-line-descendants): New commands.
-
- (speedbar-query-confirmation-method, speedbar-select-frame-method)
- (speedbar-use-tool-tips-flag): New options.
-
- (speedbar-check-read-only, speedbar-require-version)
- (speedbar-insert-separator, speedbar-buffers-tail-notes)
- (speedbar-handle-delete-frame, speedbar-try-completion)
- (speedbar-update-localized-contents): New functions.
-
- (speedbar-incompatible-version, speedbar-ro-to-do-point)
- (speedbar-object-read-only-indicator): New variables.
-
- (speedbar-visiting-tag-hook, speedbar-before-visiting-file-hook):
- New hooks.
-
- (speedbar-separator-face): New face.
-
- (speedbar-supported-extension-expressions): Add `.g' and `.ma?k'.
- (speedbar-ignored-modes): Add fundamental-mode.
- (speedbar-directory-unshown-regexp): Add . directories.
-
- (speedbar-key-map): Remove old SPC and DEL page up/down keys.
- (speedbar-file-key-map): Add SPC to toggle node expansion, `[' and
- `]' for full expand/close.
- (speedbar-buffers-key-map): Add SPC to toggle node expansion.
-
- (speedbar-check-vc): Support hidden files.
- (speedbar-vc-check-dir-p): Use vc-state if available for CVS.
- (speedbar-this-file-in-vc): Use vc-state if available. If VC
- state is nil, it is not checked out.
-
- (speedbar-line-text, speedbar-line-token): Support expand buttons
- with no text.
- (speedbar-refresh): Universal argument acts as power-click.
- (speedbar-fetch-dynamic-tags): If a buffer is in Emacs, switch to
- that buffer to get variable values.
-
- And many other bugfixes.
-
- * dframe.el, ezimage.el, sb-image.el: New files.
-
- * sb-*.xpm: Remove files. New image files installed into
- etc/images/ezimage.
-
-2005-09-30 Kenichi Handa <handa@m17n.org>
-
- * ps-mule.el (ps-mule-show-warning): If a character is in
- ps-print-translation-table, don't treat it as non-printable.
-
-2005-09-30 David Ponce <david@dponce.com>
-
- * tree-widget.el (tree-widget-themes-load-path): New variable.
- (tree-widget-themes-directory): Doc fix.
- (tree-widget-image-formats) [Emacs]: Doc fix.
- (tree-widget--locate-sub-directory): New function.
- (tree-widget-themes-directory): Use it.
-
- * recentf.el (recentf-filename-handlers): Rename from
- `recentf-filename-handler'. Allow a list of functions.
- (recentf-menu-items-for-commands): Fix :help strings.
- (recentf-apply-filename-handlers): New function.
- (recentf-expand-file-name): Use it.
- (recentf-cleanup): Remove duplicates too.
-
-2005-09-29 Juri Linkov <juri@jurta.org>
-
- * faces.el: Rearrange face definitions to be in the same order as
- their face descriptions in "(emacs)Standard Faces".
-
- * isearch.el (isearch, lazy-highlight): Add group `basic-faces'.
-
- * tooltip.el (tooltip): Add group `basic-faces'.
-
- * buff-menu.el (Buffer-menu-buffer): Remove group
- `font-lock-highlighting-faces'.
-
- * progmodes/compile.el (compilation-error, compilation-warning)
- (compilation-info, compilation-line-number, compilation-column-number):
- Change group from `font-lock-highlighting-faces' to `compilation'.
-
- * progmodes/vhdl-mode.el (vhdl-font-lock-prompt-face)
- (vhdl-font-lock-attribute-face, vhdl-font-lock-enumvalue-face)
- (vhdl-font-lock-function-face, vhdl-font-lock-directive-face)
- (vhdl-font-lock-reserved-words-face)
- (vhdl-font-lock-translate-off-face, syntax-alist): Remove group
- `font-lock-highlighting-faces'.
-
- * cus-edit.el (custom-buffer-sort-alphabetically): Default to nil.
-
-2005-09-28 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el: Set CUA move property on additional commands:
- up-list, down-list, backward-up-list, end-of-defun beginning-of-defun,
- forward-sexp, backward-sexp, forward-list, backward-list.
-
-2005-09-28 Romain Francoise <romain@orebokech.com>
-
- * comint.el (comint-show-output): Really set point at the
- beginning of the output when not using `comint-use-prompt-regexp'.
-
-2005-09-27 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-lang.el (math-oper-table): Raise the precedence of "/"
- in TeX mode.
-
-2005-09-26 Juanma Barranquero <lekktu@gmail.com>
-
- * textmodes/org.el (org-table-sum): Fix format string.
-
- * textmodes/tex-mode.el (tex-insert-quote, latex-indent):
- Quote face names.
-
-2005-09-26 Romain Francoise <romain@orebokech.com>
-
- * isearch.el (isearch-forward-regexp): Close doc string.
-
-2005-09-25 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (blink-matching-open): Don't no-op when point is BEGV+1.
-
- * isearch.el (isearch-forward, isearch-forward-regexp): Doc fixes.
-
- * progmodes/compile.el (compilation-error-properties):
- When getting the file from the previous error message,
- correctly decode the new data format.
-
- * progmodes/cc-cmds.el (c-electric-paren):
- Call old-blink-paren only for close-paren.
-
-2005-09-24 Andreas Schwab <schwab@suse.de>
-
- * term/rxvt.el (rxvt-register-default-colors): Delete redundant
- condition.
-
-2005-09-25 Romain Francoise <romain@orebokech.com>
-
- * dired-aux.el (dired-copy-file-recursive):
- * dired.el (dired-delete-file):
- * ediff-mult.el (ediff-dir-diff-copy-file):
- * ediff-util.el (ediff-test-save-region):
- * forms.el (forms-mode):
- * ido.el (ido-file-internal, ido-delete-file-at-head):
- * log-edit.el (log-edit-done):
- * ses.el (ses-yank-resize):
- * play/gomoku.el (gomoku-human-plays, gomoku)
- (gomoku-human-resigns, gomoku-prompt-for-other-game)
- (gomoku-offer-a-draw):
- * play/landmark.el (lm-human-resigns, lm):
- * net/eudcb-ldap.el (eudc-ldap-check-base):
- * play/mpuz.el (mpuz-offer-abort, mpuz-try-letter, mpuz-close-game):
- * progmodes/ebrowse.el (ebrowse-find-pattern):
- * progmodes/idlw-shell.el (idlwave-shell-set-bp-check):
- * textmodes/reftex-index.el (reftex-index-initialize-phrases-buffer):
- End `yes-or-no-p' and `y-or-n-p' prompts with question mark and space.
-
- * vc.el (vc-delete-file):
- * play/gomoku.el (gomoku-terminate-game, gomoku)
- (gomoku-prompt-for-move, gomoku-human-takes-back):
- * play/landmark.el (lm-human-takes-back, lm-prompt-for-move)
- (lm-start-robot, lm-human-plays): Remove extraneous spaces in messages.
-
-2005-09-24 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/rxvt.el (rxvt-register-default-colors): Add support for 255
- color rxvt terminals by using the code xterm.el used to use before
- 2005-04-09 in order to match the colors used by rxvt.
-
-2005-09-24 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
-
- * term/rxvt.el (rxvt-register-default-colors): Add support for 88
- colors rxvt-unicode terminals by using the same code as xterm.el.
-
-2005-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/tex-mode.el (tex-font-lock-append-prop)
- (tex-font-lock-suscript, tex-insert-quote, latex-indent): Adjust to the
- new symbol used for the tex-verbatim face.
-
-2005-09-24 Emilio C. Lopes <eclig@gmx.net>
-
- * woman.el (woman-file-name):
- * wid-edit.el (widget-file-prompt-value)
- (widget-coding-system-prompt-value):
- * w32-fns.el (set-w32-system-coding-system):
- * vc.el (vc-version-diff, vc-annotate):
- * textmodes/reftex-auc.el (reftex-arg-cite)
- (reftex-arg-index-tag):
- * textmodes/refer.el (refer-get-bib-files):
- * textmodes/artist.el (artist-figlet-choose-font):
- * terminal.el (terminal-emulator):
- * replace.el (occur-read-primary-args):
- * rect.el (string-rectangle, string-insert-rectangle):
- * ps-print.el (ps-print-preprint):
- * progmodes/pascal.el (pascal-goto-defun):
- * progmodes/etags.el (visit-tags-table, visit-tags-table-buffer):
- * progmodes/compile.el (compilation-find-file):
- * printing.el (pr-interactive-n-up):
- * play/animate.el (animate-birthday-present):
- * net/rcompile.el (remote-compile):
- * man.el (man, Man-goto-section, Man-follow-manual-reference):
- * mail/rmailsum.el (rmail-summary-search-backward)
- (rmail-summary-search):
- * mail/rmailout.el (rmail-output-read-rmail-file-name)
- (rmail-output-read-file-name):
- * mail/rmail.el (rmail-search, rmail-search-backwards):
- * mail/mailabbrev.el (merge-mail-abbrevs, rebuild-mail-abbrevs):
- * locate.el (locate):
- * international/quail.el (quail-show-keyboard-layout):
- * international/mule.el (set-buffer-file-coding-system)
- (revert-buffer-with-coding-system, set-file-name-coding-system)
- (set-terminal-coding-system, set-keyboard-coding-system)
- (set-next-selection-coding-system):
- * international/mule-diag.el (describe-coding-system)
- (describe-font, describe-fontset):
- * international/mule-cmds.el (universal-coding-system-argument)
- (search-unencodable-char, describe-input-method)
- (set-language-environment, describe-language-environment):
- * international/codepage.el (codepage-setup):
- * international/code-pages.el (codepage-setup):
- * info.el (Info-search, Info-follow-reference)
- (Info-search-backward):
- * emacs-lisp/advice.el (ad-read-advised-function)
- (ad-read-advice-class, ad-clear-cache, ad-activate)
- (ad-deactivate, ad-update, ad-unadvise, ad-read-advice-name)
- (ad-enable-advice, ad-disable-advice, ad-remove-advice)
- (ad-read-regexp):
- * ediff-util.el (ediff-toggle-regexp-match):
- * ediff-ptch.el (ediff-prompt-for-patch-file):
- * dired-aux.el (dired-diff):
- * diff.el (diff):
- * cus-edit.el (custom-variable-prompt):
- * calendar/timeclock.el (timeclock-ask-for-project):
- * calc/calcalg3.el (calc-get-fit-variables):
- * calc/calc-store.el (calc-edit-variable)
- (calc-permanent-variable):
- * vc-mcvs.el (vc-mcvs-register):
- * shadowfile.el (shadow-define-literal-group):
- * woman.el (woman-file-name):
- * vc.el (vc-version-diff, vc-merge):
- * textmodes/reftex-index.el (reftex-index-complete-tag):
- * format.el (format-decode-buffer, format-decode-region):
- * emulation/viper-cmd.el (viper-read-string-with-history):
- * emacs-lisp/debug.el (cancel-debug-on-entry):
- * emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
- * ediff.el (ediff-merge-revisions)
- (ediff-merge-revisions-with-ancestor, ediff-revision):
- * completion.el (interactive-completion-string-reader):
- * calc/calc-prog.el (calc-user-define-formula):
- Follow convention for reading with the minibuffer.
-
-2005-09-24 Steven Huwig <steven_h@acm.org> (tiny change)
-
- * progmodes/python.el (python-describe-symbol): Add globals() and
- locals() to the arguments of emacs.ehelp.
-
-2005-09-24 Magnus Henoch <mange@freemail.hu>
-
- * textmodes/ispell.el (ispell-maybe-find-aspell-dictionaries):
- New function, code extracted from ispell-valid-dictionary-list.
- (ispell-valid-dictionary-list, ispell-accept-buffer-local-defs):
- Call it.
-
-2005-09-24 Eli Zaretskii <eliz@gnu.org>
-
- * subr.el (version-regexp-alist): Extend valid syntax for version
- strings: allow any of the characters -,_,+ to separate the
- alpha/beta/rc part from the version part. Doc fix.
- (version-to-list): Doc fix. Bind case-fold-search to t, as advertised.
-
-2005-09-23 David Reitter <david.reitter@gmail.com>
-
- * mail/mailclient.el: New file.
-
-2005-09-23 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-highlight-incorrect-region)
- (flyspell-incorrect-hook, flyspell-highlight-duplicate-region):
- Doc fixes.
-
- * progmodes/cc-mode.el (c-font-lock-init):
- Specify font-lock-lines-before.
-
-2005-09-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * smerge-mode.el (smerge-remove-props): Cause re-highlighting of the
- whole conflict.
-
-2005-09-23 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode-map, orgtbl-mode-map):
- Move keybindings with `C-c C-h' prefix to `C-c C-x' prefix. Make use
- of `remap' feature when available. Additional key bindings for
- better tty support.
- (org-mode-restart, org-force-self-insert): New commands.
- (org-time-stamp-inactive): New command.
- (org-remap): New function.
- (org-table-auto-blank-field, org-level-color-stars-only): New options.
- (org-enable-fixed-width-editor): Move to `org-structure'
- customization group.
- (org-self-insert-command, orgtbl-self-insert-command): Modify to
- blank field after field motion commands.
-
-2005-09-23 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (set-language-environment):
- Don't check utf-translate-cjk-lang-env is nil or not on deciding if we
- have to call utf-translate-cjk-load-tables.
-
-2005-09-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mouse.el (mouse-move-drag-overlay): Fix last change.
-
-2005-09-22 David Ponce <david@dponce.com>
-
- * tree-widget.el (tree-widget-value-create): Fix previous change.
-
-2005-09-21 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (terminal-init-xterm): Fix loading rxvt at run time.
-
-2005-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mouse.el (mouse-move-drag-overlay): New function.
- (mouse-drag-region-1): Use it.
- Try to simplify a bit the state handling. Handle clicks on links
- inside intangible areas.
- (mouse-save-then-kill): Minor simplification.
- (mouse-secondary-overlay): Make it always non-nil instead of
- recreating it each time.
- (mouse-start-secondary, mouse-set-secondary, mouse-drag-secondary)
- (mouse-kill-secondary, mouse-secondary-save-then-kill):
- Simplify accordingly.
-
-2005-09-21 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/rxvt.el (rxvt-standard-colors): Fix some colors.
-
-2005-09-20 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-ptch.el (ediff-prompt-for-patch-file): More intuitive prompt.
- (ediff-file-name-sans-prefix): Treat nil as an empty string.
- (ediff-fixup-patch-map): Better heuristic for intuiting the file names
- to patch.
-
- * ediff-util.el: Use insert-buffer-substring.
-
- * ediff-vers.el (cvs-run-ediff-on-file-descriptor): Bug fix.
-
- * emulation/viper-cmd.el (viper-change-state): Don't move over the
- field boundaries in the minibuffer.
- (viper-set-minibuffer-style): Add viper-minibuffer-post-command-hook.
- (viper-minibuffer-post-command-hook): New hook.
- (viper-line): Don't move cursor at bolp.
-
- * emulation/viper-ex.el (ex-pwd, viper-info-on-file): Fix message.
-
- * emulation/viper-init.el: Add alias to make-variable-buffer-local to
- avoid compiler warnings.
-
- * emulation/viper-macs.el (ex-map): Better messages.
-
- * emulation/viper-utils.el (viper-beginning-of-field): New function.
-
- * emulation/viper.el: Replace make-variable-buffer-local with
- viper-make-variable-buffer-local everywhere, to avoid warnings.
-
-2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line):
- Delete unused var `old-selected-window'.
- (mouse-drag-region-1): Delete unused vars `start-frame', `end-of-range'.
- (mouse-drag-secondary): Delete unused var `start-frame'.
-
-2005-09-19 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
-
- * term/rxvt.el (terminal-init-rxvt): Add entry for [end].
-
-2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * calendar/calendar.el (mark-visible-calendar-date): Save excursion.
- Re-indent within 80 columns. Use inhibit-read-only.
-
-2005-09-19 Romain Francoise <romain@orebokech.com>
-
- * calendar/diary-lib.el (mark-diary-entries): Revert last change.
-
-2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-default-fontify-region): Don't add a line
- unconditionally, since the after-change-function already did it.
-
-2005-09-19 Miles Bader <miles@gnu.org>
-
- * net/newsticker.el: Get rid of CVS keyword.
-
-2005-09-19 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * dired-aux.el (dired-handle-overwrite): Don't use `format' here.
- The prompt is formatted later.
-
-2005-09-19 David Ponce <david@dponce.com>
-
- * tree-widget.el (tree-widget-value-create): Save the converted
- tree :node widget.
-
-2005-09-19 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/sh-script.el (sh-blink): Fix spurious reference to
- variable `message'.
-
-2005-09-18 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-login-prompt-regexp): Expand regexp in order
- to cover prompts like "login as:". Reported by Slawomir Nowaczyk
- <slawomir.nowaczyk.847@student.lu.se>.
-
-2005-09-18 Chong Yidong <cyd@stupidchicken.com>
-
- * image.el (image-load-path): Use symbol `data-directory' instead
- of its value, for backward compatibility with packages that bind
- it during `find-image'. Suggested by Katsumi Yamaoka.
- (image-search-load-path): Handle symbols whose values are strings.
-
-2005-09-18 Romain Francoise <romain@orebokech.com>
-
- * calendar/diary-lib.el (mark-diary-entries): Rearrange to wrap
- with-current-buffer form in save-excursion.
-
-2005-09-18 Deepak Goel <deego@gnufans.org>
-
- * apropos.el (apropos-command): Fix `message' call: first arg
- should be a format spec. In this and all other cases that appear
- below and elsewhere in the source code, I made a change only when
- two conditions were satisfied: [1] I can think of a possibility
- that the arguments would cause an error, for example, the code in
- question relies on external variables such as filenames. [2] I
- was sure that the arg to `message' could not have been nil in the code.
-
- * textmodes/tildify.el (tildify-region): Ditto.
-
- * textmodes/reftex-index.el (reftex-index-change-entry)
- (reftex-index-phrase-selection-or-word, reftex-query-index-phrase):
- * textmodes/reftex-dcr.el (reftex-echo-ref, reftex-echo-cite):
- * textmodes/org.el (org-complete, org-deadline, org-schedule)
- (org-priority, org-table-sum):
- * textmodes/ispell.el (ispell-check-version, ispell-parse-output):
- * textmodes/flyspell.el (flyspell-mode-on, flyspell-notify-misspell)
- (flyspell-word, flyspell-display-next-corrections):
- * textmodes/bibtex.el (bibtex-print-help-message):
- * textmodes/artist.el (artist-key-set-point-poly):
- * term/mac-win.el (mac-services-insert-text):
- * progmodes/vhdl-mode.el (vhdl-warning, vhdl-print-warnings)
- (vhdl-hooked-abbrev, vhdl-template-insert-fun)
- (vhdl-port-paste-testbench, vhdl-compose-new-component)
- (vhdl-compose-configuration):
- * progmodes/sh-script.el (sh-blink, sh-show-indent)
- (sh-set-indent, sh-learn-line-indent):
- * progmodes/ps-mode.el (ps-mode-target-column):
- * progmodes/idlwave.el (idlwave-make-tags)
- (idlwave-scan-library-catalogs):
- * progmodes/idlw-shell.el (idlwave-shell-parse-stack-and-display):
- * progmodes/gud.el (gud-jdb-analyze-source):
- * progmodes/flymake.el (flymake-log):
- * progmodes/ebnf2ps.el (ebnf-generate-region):
- * progmodes/cmacexp.el (c-macro-expansion):
- * progmodes/ada-xref.el (ada-treat-cmd-string):
- * progmodes/ada-mode.el (ada-create-case-exception-substring)
- (ada-justified-indent-current, ada-batch-reformat):
- * play/zone.el (zone):
- * play/landmark.el (lm-move):
- * play/decipher.el (decipher-show-alphabet):
- * net/newsticker.el (newsticker--display-jump)
- (newsticker--display-scroll):
- * mail/rmail-spam-filter.el (rsf-add-subject-to-spam-list)
- (rsf-add-sender-to-spam-list, rsf-add-region-to-spam-list):
- * mail/feedmail.el (feedmail-dump-message-to-queue):
- * eshell/esh-proc.el (eshell-remove-process-entry):
- * emulation/ws-mode.el (ws-last-error):
- * emulation/viper-macs.el (ex-map-read-args, ex-unmap-read-args)
- (viper-record-kbd-macro):
- * emulation/viper-ex.el (ex-pwd, viper-info-on-file):
- * emacs-lisp/lisp-mnt.el (lm-report-bug):
- * emacs-lisp/find-func.el (find-function-noselect):
- * calendar/timeclock.el (timeclock-status-string)
- (timeclock-workday-remaining-string, timeclock-workday-elapsed-string)
- (timeclock-when-to-leave-string):
- * calendar/icalendar.el (icalendar--convert-ical-to-diary):
- * calc/calc-units.el (calc-enter-units-table):
- * calc/calc-mode.el (calc-mode-record-mode):
- * woman.el (woman-mini-help):
- * wdired.el (wdired-change-to-wdired-mode):
- * vc.el (vc-retrieve-snapshot):
- * strokes.el (strokes-read-stroke, strokes-read-complex-stroke):
- * startup.el (display-startup-echo-area-message):
- * simple.el (set-goal-column):
- * ses.el (ses-command-hook, ses-recalculate-cell):
- * server.el (server-process-filter):
- * printing.el (pr-interface-txt-print, pr-interface-printify)
- (pr-interface-ps):
- * pcvs.el (cvs-help):
- * log-edit.el (log-edit, log-edit-mode-help):
- * iswitchb.el (iswitchb-possible-new-buffer):
- * isearch.el (isearch-edit-string):
- * image-mode.el (image-mode, image-minor-mode):
- * ibuf-macs.el (define-ibuffer-filter):
- * hi-lock.el (hi-lock-find-patterns):
- * files.el (toggle-read-only):
- * ediff-util.el (ediff-copy-diff)
- (ediff-write-merge-buffer-and-maybe-kill):
- * echistory.el (Electric-history-undefined):
- * dnd.el (dnd-insert-text):
- * dired-aux.el (dired-query):
- * desktop.el (desktop-restore-file-buffer, desktop-lazy-create-buffer):
- * bookmark.el (bookmark-bmenu-locate):
- * obsolete/fast-lock.el (@top-level) <with-temp-message macro>:
- Fix `message' calls to ensure first arg is a format string.
- The change was made only when these two conditions were satisfied:
- [1] when there is a possibility that the arguments would cause an error
- for example, if the code in question relies on external variables
- such as filenames, and
- [2] if the arg to `message' could not have been nil in the code.
-
- * pcomplete.el (pcomplete--help): Fix `message' format spec.
- Not having a %s would be weird, though not technically wrong.
-
-2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-add-charset-info): Doc fix.
-
-2005-09-17 Romain Francoise <romain@orebokech.com>
-
- * shell.el (shell-resync-dirs): Handle echoing processes more
- reliably. Don't insert resync command if `comint-process-echoes'
- is non-nil.
-
-2005-09-17 Magnus Henoch <mange@freemail.hu>
-
- * textmodes/ispell.el (ispell-aspell-supports-utf8): New variable.
- (ispell-check-version): Set ispell-aspell-supports-utf8 to t for
- aspell versions >= 0.60.
- (ispell-valid-dictionary-list): Call ispell-find-aspell-dictionaries
- only if ispell-aspell-supports-utf8 is non-nil.
-
-2005-09-17 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * progmodes/scheme.el (scheme-mode-variables): Use setq to assign
- buffer-local value to lisp-indent-function.
-
-2005-09-17 Milan Zamazal <pdm@zamazal.org>
-
- * progmodes/glasses.el (glasses-make-readable): If
- glasses-separator differs from underscore, put appropriate
- overlays over underscore characters.
- (glasses-convert-to-unreadable): If glasses-separator differs from
- underscore, try to convert glasses-separator characters to
- underscores.
-
-2005-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * calendar/diary-lib.el (mark-diary-entries): Don't move point.
- Use with-syntax-table and dolist.
-
-2005-09-16 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex-auc.el:
- * textmodes/reftex-cite.el:
- * textmodes/reftex-dcr.el:
- * textmodes/reftex-global.el:
- * textmodes/reftex-parse.el:
- * textmodes/reftex-ref.el:
- * textmodes/reftex-sel.el:
- * textmodes/reftex-toc.el:
- * textmodes/reftex-vars.el:
- * textmodes/reftex.el: Small changes to remove compiler warnings.
-
- * textmodes/reftex-index.el: Likewise.
- (reftex-query-index-phrase): More efficient use of markers.
-
-2005-09-15 Chong Yidong <cyd@stupidchicken.com>
-
- * image.el (image-load-path): New variable.
- (image-search-load-path): New function.
- (find-image): Search for images in `image-load-path'.
-
-2005-09-15 Richard M. Stallman <rms@gnu.org>
-
- * follow.el: Change Maintainer field.
-
-2005-09-15 David Ponce <david@dponce.com>
-
- * recentf.el (recentf-save-file-modes): New option.
- (recentf-save-list): Use it.
-
-2005-09-15 Nick Roberts <nickrob@snap.net.nz>
-
- * bindings.el (mode-line-eol-desc, mode-line-coding-system-map)
- (mode-line-mule-info, mode-line-modified): Move bindings from
- mouse-3 to mouse-1.
-
-2005-09-15 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (sendmail-user-agent-compose): Revert last change.
-
-2005-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/ange-ftp.el (ange-ftp-process-filter): Revert to ^#+$.
- Use with-current-buffer.
- (ange-ftp-gwp-start): Remove unused var `gw-user'.
- (ange-ftp-guess-hash-mark-size): Remove unused var `result'.
- (ange-ftp-insert-directory): Remove unused var `short'.
- (ange-ftp-file-name-sans-versions): Remove unused var `host-type'.
-
- * pcvs-defs.el (cvs-version): Recognize CVSNT version string.
- (cvs-execute-single-dir): Change default: cvs-1.9 is ancient.
-
- * calendar/cal-menu.el: Don't require easymenu, since we don't use it.
- (check-calendar-holidays, diary-list-entries): Autoload.
- Otherwise `emacs -q' followed by "mouse-2 -> diary entries" burps.
- (calendar-mouse-holidays, calendar-mouse-view-diary-entries): Simplify.
-
- * calendar/diary-lib.el (diary-show-all-entries): Fix last change,
- which mistakenly removed a call to display-buffer.
-
-2005-09-14 Juanma Barranquero <lekktu@gmail.com>
-
- * obsolete/iso-insert.el: Move to obsolete/ from international/.
-
-2005-09-14 Thien-Thi Nguyen <ttn@gnu.org>
-
- * progmodes/hideshow.el
- (hs-hide-comments-when-hiding-all): Remove autoload cookie.
- (hs-allow-nesting): New user var.
- (hs-discard-overlays): Skip "internal" overlays if nesting allowed.
- (hs-hide-block-at-point): When nesting allowed,
- if there is already an overlay in place, delete it.
- (hs-safety-is-job-n): Delete func; remove call sites.
- (hs-hide-level-recursive): Don't pre-clean if nesting allowed.
- (hs-overlay-at): New func.
- (hs-already-hidden-p, hs-show-block): Use it.
- (hs-hide-all): Don't pre-clean if nesting allowed.
- (hs-show-all): Temporarily disallow
- nesting around call to `hs-discard-overlays'.
-
-2005-09-14 Chong Yidong <cyd@stupidchicken.com>
-
- * mouse.el (mouse-major-mode-menu): Make `prefix' optional.
- Delete unused local var.
-
-2005-09-13 Juanma Barranquero <lekktu@gmail.com>
-
- * help-fns.el (describe-categories): "?\ " -> "?\s".
- (help-do-arg-highlight): Recognize also ARG-n, as in
- `move-to-left-margin' (ARG+n is already recognized). Simplify.
-
- * international/codepage.el (dos-unsupported-char-glyph):
- * net/newsticker.el (tool-bar-map, w3-mode-map)
- (w3m-minor-mode-map):
- * progmodes/vhdl-mode.el (conf-alist, conf-entry, conf-key)
- (ent-alist):
- * textmodes/reftex-vars.el (reftex-tables-dirty): Add defvars.
-
-2005-09-13 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (custom-push-theme): Handle the case where a symbol is
- bound but face properties have not yet been assigned.
-
- * mail/sendmail.el (mail): Use new buffer if `noerase' is `new'.
- Fix behavior if noerase is `t' and there is no mail buffer.
-
- * simple.el (sendmail-user-agent-compose): Use a new mail buffer
- if `continue' is nil, rather than signal an error.
-
-2005-09-12 Richard M. Stallman <rms@gnu.org>
-
- * font-lock.el (font-lock-keywords): Add autoload.
-
- * help-fns.el (describe-variable): Rearrange to put source link
- in a predictable place.
-
- * net/newsticker.el: New file.
-
-2005-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * calendar/calendar.el (calendar-for-loop): Add edebug info.
- (calendar-basic-setup): Use the new nil arg.
- (number-of-diary-entries): Move to diary-lib.el.
-
- * calendar/diary-lib.el: Use with-current-buffer, match-string.
- (diary-list-entries): Use with-syntax-table and dolist.
- Rename from list-diary-entries.
- Use number-of-diary-entries if `number' is nil.
- (diary, diary-view-entries): Use this new name and new nil arg value.
- (number-of-diary-entries): Move from calendar.el.
- (diary-unhide-everything): New function.
- (include-other-diary-files, fancy-diary-display)
- (diary-show-all-entries, make-diary-entry): Use it.
- (diary-mail-entries): Use buffer-string.
- (mark-diary-entries): Fix long standing paren typo.
- (diary-sexp-entry): Use count-lines.
- (make-diary-entry): Avoid `previous-line'.
- (diary-mode-map): New var.
- (diary-mode): Redraw cal after saving. Setup header-line.
- (fancy-diary-display-mode): Use local-set-key.
-
- * startup.el (command-line): Try calling various terminal-init-foo-bar
- functions by stripping hyphenated suffixes from $TERM.
-
- * files.el (normal-mode): Check boundness of font-lock-keywords.
-
-2005-09-12 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/compile.el: Don't decide a file's directory
- until the user actually tries to go there.
- (compilation-next-error-function):
- Pass compilation-find-file the directory from the file-struct.
- (compilation-internal-error-properties): Separate local FILE-STRUCT
- from FILE. Doc the args better. Rename arg FMT to FMTS.
- (compilation-find-file): Arg DIR renamed to DIRECTORY.
- Expand it, and if nil, use default-directory.
- (compilation-get-file-structure): Don't mix specified directory
- with default directory. Put specified directory into
- file-struct. Don't make the file name absolute.
-
- * progmodes/compile.el (compilation-error-regexp-alist): Doc fix.
- (compile-command): Add autoload.
- (compilation-disable-input): Add autoload.
-
-2005-09-11 Stephen Gildea <gildea@stop.mail-abuse.org>
-
- * time-stamp.el: Mention variable `time-stamp-pattern' in doc
- strings of the variables it can override.
- (time-stamp): New (as yet undocumented) time-stamp-format escapes
- %Q and %q, for fully-qualified domain name and unqualified host name.
-
-2005-09-11 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/authors.el (authors-aliases): Update list.
- (authors-fixed-entries): Update mldrag.el entry.
-
-2005-09-10 Alan Mackenzie <acm@muc.de>
-
- * textmodes/page.el (narrow-to-page): Exclude _entire_ multi-line
- delimiter from the region narrowed to.
-
-2005-09-10 Magnus Henoch <mange@freemail.hu>
-
- * textmodes/ispell.el (ispell-check-version): Signal an error if
- aspell version is less than 0.60.
-
-2005-09-10 Pascal Dupuis <Pascal.Dupuis@esat.kuleuven.be> (tiny change)
-
- * progmodes/octave-inf.el (inferior-octave-startup):
- Resync current dir at the end.
-
-2005-09-10 Emilio C. Lopes <eclig@gmx.net>
-
- * woman.el (woman-topic-at-point-default):
- Rename to woman-use-topic-at-point-default.
- (woman-topic-at-point): Rename to woman-use-topic-at-point.
- (woman-file-name): Reflect renames above. Automatically use the
- word at point as topic if woman-use-topic-at-point is non-nil.
- Otherwise offer it as default but don't insert it in the
- minibuffer. Also use `test-completion' instead of `assoc' as
- suggested by Stefan Monnier.
-
-2005-09-10 Andre Spiegel <spiegel@gnu.org>
-
- * vc.el (vc-directory, vc-update-change-log): Throw an error on
- the attempt to do it over Tramp. This is not yet supported.
-
-2005-09-10 Eli Zaretskii <eliz@gnu.org>
-
- * menu-bar.el (menu-bar-menu-frame-live-and-visible-p)
- (menu-bar-non-minibuffer-window-p): New functions.
- ("Split Window", "Save As..."): Use them.
- ("Postscript Print Buffer (B+W)", "Postscript Print Buffer")
- ("Print Buffer", "Truncate Long Lines in this Buffer"):
- Use menu-bar-menu-frame-live-and-visible-p.
- ("Save Buffer", "Insert File", "Open Directory...")
- ("Open File...", "Visit New File..."):
- Use menu-bar-non-minibuffer-window-p.
- (kill-this-buffer-enabled-p, dired <menu-enable>):
- Use menu-bar-non-minibuffer-window-p.
-
-2005-09-09 Eli Zaretskii <eliz@gnu.org>
-
- * cus-start.el (all): Don't complain about fringe-related
- built-ins if fringes are not supported. Ditto about
- selection-related built-ins. Fix the test for GTK-related built-ins.
-
- * menu-bar.el ("Split Window", "Postscript Print Buffer (B+W)")
- ("Postscript Print Buffer", "Print Region", "Save As...")
- ("Save", "Insert File...", "Open Directory...")
- ("Open File...", "Visit New File..."")
- ("Truncate Long Lines in this Buffer"): Don't look at
- menu-updating-frame if this display does not support multiple frames.
-
-2005-09-09 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
-
- * mail/sendmail.el (default-sendmail-coding-system): Doc fix.
-
-2005-09-09 Emilio C. Lopes <eclig@gmx.net>
-
- * woman.el: Format- and whitespace-related changes.
-
-2005-09-09 Eli Zaretskii <eliz@gnu.org>
-
- * woman.el: Fix my email address.
-
-2005-09-08 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/sh-script.el (sh-skeleton-pair-default-alist): New var.
- (sh-mode): Locally set skeleton-pair-default-alist.
-
- * progmodes/make-mode.el (makefile-add-log-defun): Trim the result.
-
- * progmodes/flymake.el: Require `compile' unconditionally.
-
- * mail/sendmail.el (send-mail-function): Add Mailclient alternative.
-
- * woman.el (woman-file-name): Provide a default, not initial input.
-
- * smerge-mode.el (smerge-resolve): Pass args to smerge-remove-props.
-
- * font-lock.el (font-lock-support-mode): Doc fix.
-
- * descr-text.el (describe-property-list): Handle non-symbol prop names.
-
-2005-09-08 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (blink-matching-open): Get rid of text props from
- the string shown in echo area. Don't permanently set point.
- Some rearrangements.
-
-2005-09-08 Reiner Steib <Reiner.Steib@gmx.de>
-
- * recentf.el (recentf-filename-handler): Add custom choice
- `abbreviate-file-name'.
-
- * msb.el (msb--very-many-menus): Fix typo.
-
- * disp-table.el (standard-display-european): Don't set
- enable-multibyte-characters to nil.
-
-2005-09-08 David Ponce <david@dponce.com>
-
- * recentf.el (recentf-show-file-shortcuts-flag): New option.
- (recentf-expand-file-name): Doc fix.
- (recentf-dialog-mode-map): Define digit shortcuts.
- (recentf--files-with-key): New variable.
- (recentf-show-digit-shortcut-filter): New function.
- (recentf-open-files-items): New function.
- (recentf-open-files): Use it.
- (recentf-open-file-with-key): New command.
-
-2005-09-08 Chong Yidong <cyd@stupidchicken.com>
-
- * buff-menu.el (Buffer-menu-sort-by-column): New function.
- Suggested by Kim F. Storm.
- (Buffer-menu-sort-button-map): Global keymap for sort buttons.
- (Buffer-menu-make-sort-button): Use global keymap.
-
-2005-09-07 Michael Albinus <michael.albinus@gmx.de>
-
- * woman.el (top): Remap `man' command by `woman' in `woman-mode-map'.
- (Man-getpage-in-background-advice): Remove defadvice; it isn't
- necessary any longer with the remapped command.
- (Man-bgproc-sentinel-advice): Remove defadvice which counts
- formatting time only.
-
- * net/tramp.el (tramp-action-password)
- (tramp-multi-action-password): Compile the password prompt from
- `method', `user' and `host'. Sometimes it isn't obvious which
- password to enter, for example with remote files offered by
- recentf.el, or with multiple steps. Suggested by Robert Marshall
- <robert@chezmarshall.freeserve.co.uk>.
-
-2005-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords):
- Fix regexp for when "s///" is at the beginning of line.
-
-2005-09-07 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-poly.el (math-expand-term): Multiply out any powers
- when in matrix mode.
-
-2005-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * buff-menu.el (Buffer-menu-make-sort-button): Add docstrings, use
- non-anonymous functions.
-
-2005-09-06 Chong Yidong <cyd@stupidchicken.com>
-
- * buff-menu.el (Buffer-menu-make-sort-button): Allow mouse-1 clicks
- when using a header line. Otherwise, use mouse-1-click-follows-link.
-
- * mouse.el (mouse-drag-header-line): Do nothing if the header-line
- can't be moved; don't signal an error.
-
-2005-09-05 Chong Yidong <cyd@stupidchicken.com>
-
- * cus-theme.el (custom-theme-write-faces): Save the current face
- spec, not the defface spec.
-
- * custom.el (custom-known-themes): Clarify meaning of "standard".
- (custom-push-theme): Save old values in the standard theme.
- (disable-theme): Correct typo.
- (custom-face-theme-value): Deleted unused function.
- (custom-theme-recalc-face): Rewritten to treat enable/disable properly.
-
-2005-09-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/compile.el (compilation-goto-locus): Take into account
- iconified frames when determining whether the buffer is
- already visible.
- Don't reset window height if the window already existed.
-
-2005-09-04 Chong Yidong <cyd@stupidchicken.com>
-
- * custom.el (load-theme): Rename from require-theme.
- Add interactive spec.
- (enable-theme): Rename from custom-enable-theme.
- Add interactive spec.
- (disable-theme): Rename from custom-disable-theme.
- Add interactive spec.
- (custom-make-theme-feature): Doc fix.
- (custom-theme-directory): Doc fix.
- (provide-theme): Call enable-theme.
-
-2005-09-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * obsolete/lazy-lock.el (lazy-lock-mode):
- * obsolete/fast-lock.el (fast-lock-mode): Don't try to turn on
- font-lock-mode if it's off. Print a warning instead.
-
- * progmodes/compile.el (compilation-start): Ignore errors if the
- process died before we get to send-eof.
-
- * textmodes/tex-mode.el (tex-send-tex-command, tex-bibtex-file):
- Undo last change. Enclosing the result in quotes broke things on Unix
- since tex-send-command passes it through shell-quote-argument.
- (tex-send-command): Pass `file' through convert-standard-filename
- when possible.
- (tex-uptodate-p): Handle the case where TeX hasn't put additional
- info in a transcript.
-
-2005-09-02 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (terminal-init-xterm): Add eval-when-compile to
- fix compilation warning. Reorder the key definitions to group
- together keys emitted by the current version of xterm.
-
- * progmodes/vhdl-mode.el (vhdl-highlight-faces)
- (vhdl-speedbar-entity-face, vhdl-speedbar-entity-selected-face):
- Reorder predicates to correct min-color usage.
-
-2005-09-01 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-mode): Inhibit read-only when encoding.
- Kill local variables when longlines-mode is turned off.
-
-2005-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/mule-cmds.el (set-locale-environment): Soothe compiler.
-
- * obsolete/lazy-lock.el (lazy-lock) <defgroup>: Move from font-lock.el.
-
- * obsolete/fast-lock.el (fast-lock) <defgroup>: Move from font-lock.el.
-
- * font-lock.el (fast-lock, lazy-lock) <defgroup>: Remove.
- (font-lock-lines-before): Change default to being inactive.
- (font-lock-default-fontify-region): Obey font-lock-lines-before.
- (font-lock-after-change-function): Don't handle f-l-lines-before here.
-
-2005-08-31 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp.el (tramp-handle-make-auto-save-file-name):
- Deactivate temporarily advice if active (not needed for Emacs 22,
- but for backwards compatibility).
- (tramp-exists-file-name-handler): Rewrite. First implementation
- was too simple.
- (tramp-advice-make-auto-save-file-name):
- Call `tramp-handle-make-auto-save-file-name' (again, just for
- backwards compatibility).
-
-2005-08-31 Reto Zimmermann <reto@gnu.org>
-
- * progmodes/vhdl-mode.el
- (vhdl-update-sensitivity-list): Handle multi-dimensional array access.
- (vhdl-end-p): Fix indentation bug "else" after "-- when".
- (vhdl-set-default-project): New function (easier setting of default).
- (vhdl-port-copy): Handle extended identifiers for generics.
- (vhdl-compiler-alist): Better description for error message regexp.
- (vhdl-make): Query for target, use previous as default.
- (vhdl-port-copy): Fix port copy for port names starting with "signal".
- (vhdl-font-lock-keywords-2): Fix fontification for record
- el. assign.
- (vhdl-speedbar-make-subpack-line): Add package body link.
- (vhdl-generate-makefile-1): Not include itself as dependency.
- (vhdl-font-lock-init): Highlight c-preprocessor directives.
- (vhdl-*ward-syntactic-ws): Skip c-preprocessor directives.
- (vhdl-get-syntactic-context): Handle c-preprocessor directives.
- (vhdl-update-sensitivity-list): Start scan at opening parenthesis.
- (vhdl-fixup-whitespace-region): Fix jumping point (infinite loop).
- (vhdl-update-sensitivity-list-buffer): Add string argument for `error'.
- (vhdl-import-project): Add string argument for `error'.
- (vhdl-compose-configuration)
- (vhdl-compose-configuration-architecture): Add configuration
- declaration generation.
- (vhdl-scan-directory-contents): Scan for block/generate hierarchy.
- (vhdl-trailer-re): Add "record" keyword (better indentation).
- (vhdl-fixup-whitespace-region): "[^ \t\"-]+" instead of
- "[^ \t-\"]+".
- (vhdl-font-lock-keywords-2): Not highlight formal parameter after `|'.
- (vhdl-testbench-entity-file-name)
- (vhdl-testbench-architecture-file-name): Allow separate
- customization of testbench file names.
- (vhdl-beginning-of-block): Handle optional subprogram parameter list.
- (vhdl-get-visible-signals): Allow newline within alias declaration.
- (vhdl-update-sensitivity-list): Signal read only on certain attributes.
- (vhdl-fixup-whitespace-region): Fix bug with strings (double quotes).
- (member-ignore-case): Alias for missing function in XEmacs.
- (vhdl-compiler-alist): Add unit-to-file name mapping for Cadence NC.
- (vhdl-update-sensitivity-list): Ignore case on read signals.
- (vhdl-replace-string): Adjust case only for file names.
- (vhdl-update-sensitivity-list): Fix search for read signals.
- (vhdl-update-sensitivity-list): Exclude formal parameters.
- (vhdl-get-visible-signals): Include aliases of signals.
- (vhdl-get-visible-signals): Fix signal name searching.
- (vhdl-port-flatten, vhdl-port-reverse-direction): Better message.
- (vhdl-fixup-whitespace-region): Fix for character
- literals (e.g. `:').
-
-2005-08-31 Juanma Barranquero <lekktu@gmail.com>
-
- * ansi-color.el (comint-last-output-start):
- * bs.el (font-lock-verbose):
- * diff-mode.el (add-log-buffer-file-name-function):
- * dired-x.el (vm-folder-directory):
- * faces.el (help-xref-stack-item):
- * files.el (font-lock-keywords):
- * find-lisp.el (dired-buffers, dired-subdir-alist):
- * ido.el (cua-inhibit-cua-keys):
- * log-view.el (cvs-minor-wrap-function):
- * outline.el (font-lock-warning-face):
- * simple.el (compilation-current-error):
- * speedbar.el (ange-ftp-path-format, efs-path-regexp)
- (font-lock-keywords, x-pointer-hand2, x-pointer-top-left-arrow):
- * tooltip.el (comint-prompt-regexp):
- * w32-fns.el (explicit-shell-file-name):
- * term/mac-win.el (mac-charset-info-alist)
- (mac-services-selection, mac-system-script-code):
- * term/tty-colors.el (msdos-color-values):
- * term/w32-win.el (xlfd-regexp-registry-subnum):
- * term/x-win.el (x-keysym-table, x-selection-timeout)
- (x-session-id, x-session-previous-id):
- * textmodes/ispell.el (mail-yank-prefix):
- * textmodes/makeinfo.el (tex-end-of-header, tex-start-of-header):
- * textmodes/org.el (calc-embedded-close-formula)
- (calc-embedded-open-formula)
- (font-lock-unfontify-region-function):
- * textmodes/reftex-global.el (isearch-next-buffer-function)
- (TeX-master):
- * textmodes/reftex.el (font-lock-keywords):
- * textmodes/tex-mode.el (font-lock-comment-face)
- (font-lock-doc-face):
- * textmodes/texinfo.el (outline-heading-alist):
- Add defvars.
-
- * textmodes/artist.el (x-pointer-crosshair): Add defvar.
- (artist-spray-chars, artist-mode-init, artist-replace-string)
- (artist-select-erase-char, artist-vap-find-endpoints-horiz)
- (artist-vap-find-endpoints-vert, artist-vap-find-endpoints-swne)
- (artist-vap-find-endpoints-nwse): "?\ " -> "?\s".
-
- * textmodes/conf-mode.el (outline-heading-end-regexp): Add defvar.
- (conf-align-assignments): "?\ " -> "?\s".
-
- * textmodes/reftex-index.el (TeX-master): Add defvar.
- (reftex-index-phrases-marker): Move up defvar.
-
- * textmodes/reftex-toc.el (zmacs-regions): Add defvar.
- (reftex-toc-include-labels-indicator)
- (reftex-toc-include-index-indicator)
- (reftex-toc-max-level-indicator): Move up declarations.
-
- * net/tramp.el (tramp-handle-make-auto-save-file-name): Pass list
- of args to `tramp-run-real-handler', even if it's empty in this case.
-
-2005-08-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * dired.el (dired-move-to-filename-regexp): Add date format for
- Mac OS X 10.3 in East Asian locales.
-
-2005-08-31 Michael Albinus <michael.albinus@gmx.de>
-
- * files.el (make-auto-save-file-name): Add file name handler call
- if applicable.
-
- * net/tramp.el (tramp-file-name-handler-alist)
- (tramp-file-name-for-operation): Add `make-auto-save-file-name'.
- (tramp-handle-make-auto-save-file-name): Rename from
- `tramp-make-auto-save-file-name'.
- (tramp-exists-file-name-handler): New defun.
- (tramp-advice-make-auto-save-file-name): Make defadvice only when
- `make-auto-save-file-name' is not a magic file name operation.
-
-2005-08-30 Richard M. Stallman <rms@gnu.org>
-
- * files.el (risky-local-variable-p):
- Match `-predicates' and `-commands.
-
- * cus-edit.el (custom-buffer-sort-alphabetically): Default to t.
- (custom-save-all): Visit the file if necessary;
- kill the buffer if we created it.
- (custom-save-delete): Don't visit file or kill buffer here.
-
-2005-08-30 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-special-keyword): New face.
- (org-table-copy-down, org-table-eval-formula)
- (org-table-recalculate, org-init-section-numbers):
- Use `string-to-number' instead of `string-to-int'.
- (org-get-location): Use `insert-buffer-substring' instead of
- `insert-buffer'.
- (org-modify-diary-entry-string): New function.
- (org-get-entries-from-diary): Set the hook for `add-to-diary-list'.
- (org-disable-agenda-to-diary): Rename from `org-disable-diary'.
- (org-toggle-fixed-width-section): Use QUOTE keyword if there is no
- active region.
- (org-export-as-html): Handle QUOTE keyword.
- (org-quote-string): New option.
- (org-bookmark-jump-unhide): New function, used for
- `bookmark-after-jump-hook'.
- (org-diary-default-entry): Apply only when not called through
- `org-agenda'.
-
-2005-08-30 Juanma Barranquero <lekktu@gmail.com>
-
- * net/eudc.el (mode-popup-menu):
- * play/handwrite.el (ps-printer-name, ps-lpr-command):
- * progmodes/ada-mode.el (compile-auto-highlight)
- (skeleton-further-elements):
- * progmodes/autoconf.el (font-lock-syntactic-keywords):
- * progmodes/cmacexp.el (msdos-shells):
- * progmodes/compile.el (font-lock-extra-managed-props)
- (font-lock-keywords, font-lock-maximum-size)
- (font-lock-support-mode):
- * progmodes/grep.el (font-lock-lines-before):
- * progmodes/idlw-complete-structtag.el (idlwave-completion-help-info):
- * progmodes/mixal-mode.el (compile-command):
- * progmodes/perl-mode.el (font-lock-comment-face)
- (font-lock-doc-face, font-lock-string-face):
- * progmodes/prolog.el (comint-prompt-regexp):
- * progmodes/sh-script.el (font-lock-comment-face)
- (font-lock-set-defaults, font-lock-string-face):
- * progmodes/sql.el (font-lock-keyword-face)
- (font-lock-set-defaults, font-lock-string-face):
- * progmodes/vhdl-mode.el (compilation-file-regexp-alist)
- (itimer-version, lazy-lock-defer-contextually)
- (lazy-lock-defer-on-scrolling, lazy-lock-defer-on-the-fly):
- Add defvars.
-
- * progmodes/cperl-mode.el (cperl-electric-lbrace)
- (cperl-electric-keyword, cperl-electric-pod)
- (cperl-electric-backspace, cperl-forward-re)
- (cperl-fix-line-spacing, cperl-fill-paragraph): "?\ " -> "?\s".
- (vc-rcs-header, vc-sccs-header): Add defvars.
-
- * progmodes/fortran.el (fortran-indent-to-column): "?\ " -> "?\s".
- (font-lock-syntactic-keywords, gud-find-expr-function):
- Add defvars.
-
- * progmodes/gdb-ui.el (tool-bar-map): Add defvar.
- (gdb-frame-parameters): Declare before use.
-
- * progmodes/gud.el (gdb-active-process, gdb-define-alist)
- (gdb-macro-info, gdb-server-prefix, gdb-show-changed-values)
- (gdb-var-changed, gdb-var-list, tool-bar-map): Add defvars.
- (gud-expr-compound-sep, gud-expr-compound): "?\ " -> "?\s".
-
- * progmodes/idlw-help.el (browse-url-generic-args): Add defvar.
- (idlwave-help-with-source): Use `insert-buffer-substring', not
- `insert-buffer'.
-
-2005-08-29 Juri Linkov <juri@jurta.org>
-
- * outline.el (hide-entry, hide-leaves, outline-toggle-children):
- Put outline-back-to-heading function call inside save-excursion.
-
-2005-08-29 Juanma Barranquero <lekktu@gmail.com>
-
- * man.el (Man-init-defvars, Man-translate-references)
- (Man-support-local-filenames, Man-highlight-references):
- * progmodes/sql.el (sql-interactive-mode):
- * shell.el (shell-mode, shell-resync-dirs): Fix typos in docstrings.
-
- * emacs-lisp/checkdoc.el (compilation-error-regexp-alist)
- (compilation-mode-font-lock-keywords): Add defvars.
- (checkdoc-interactive-loop): "?\ " -> "?\s".
-
- * emacs-lisp/lisp-mode.el (font-lock-comment-face)
- (font-lock-doc-face, font-lock-string-face)
- (font-lock-keywords-case-fold-search): Add defvars.
- (emacs-lisp-mode-syntax-table): "?\ " -> "?\s".
-
- * obsolete/sun-fns.el (mouse-select-or-drag-move-point):
- Don't pass X and Y (they are ignored anyway).
- (mouse-set-mark, mouse-select-window, mouse-delete-other-windows)
- (mouse-delete-window): Make arguments optional.
-
- * obsolete/rnews.el (news-add-news-group): Don't use `end-of-line'.
- (caesar-translate-table, minor-modes, news-buffer-save)
- (news-group-name, news-minor-modes): Add defvars.
-
- * emacs-lisp/lselect.el (mouse-highlight-priority)
- (x-lost-selection-functions, zmacs-regions):
- * emacs-lisp/pp.el (font-lock-verbose):
- * emacs-lisp/syntax.el (font-lock-beginning-of-syntax-function):
- * emacs-lisp/tcover-ses.el (ses-initial-global-parameters)
- (ses-mode-map):
- * emacs-lisp/tcover-unsafep.el (safe-functions):
- * international/mule-cmds.el (mac-system-coding-system)
- (mac-system-locale):
- * language/ethio-util.el (rmail-current-message)
- (rmail-message-vector):
- * language/thai-util.el (thai-auto-composition-mode):
- * mail/metamail.el (rmail-current-message, rmail-message-vector):
- * mail/mspools.el (rmail-inbox-list, vm-crash-box)
- (vm-folder-directory, vm-init-file, vm-init-file-loaded)
- (vm-primary-inbox, vm-spool-files):
- * mail/rmail.el (deleted-head, font-lock-fontified)
- (mail-abbrev-syntax-table, mail-abbrevs, messages-head)
- (rmail-use-spam-filter, rsf-beep, rsf-sleep-after-message)
- (total-messages):
- * mail/rmail-spam-filter.el (bbdb/mail_auto_create_p)
- (rmail-summary-mode-map):
- * mail/rmailkwd.el (rmail-buffer, rmail-current-message)
- (rmail-last-label, rmail-last-multi-labels)
- (rmail-summary-vector, rmail-total-messages):
- * mail/rmailmsc.el (rmail-current-message, rmail-inbox-list):
- * mail/rmailsum.el (msgnum):
- * mail/uce.el (gnus-original-article-buffer, mail-reply-buffer)
- (rmail-current-message):
- * obsolete/fast-lock.el (font-lock-face-list):
- * obsolete/rnewspost.el (mail-reply-buffer):
- * obsolete/scribe.el (compile-command):
- * obsolete/x-menu.el (x-process-mouse-hook): Add defvars.
-
-2005-08-28 John Paul Wallington <jpw@gnu.org>
-
- * ibuf-ext.el (ibuffer-auto-update-changed):
- Use `frame-or-buffer-changed-p' to check whether we need to update.
- (ibuffer-auto-mode): Don't advise `get-buffer-create' and
- `kill-buffer'. Initialise `ibuffer-auto-buffers-changed'
- as a `frame-or-buffer-changed-p' state vector instead.
-
-2005-08-27 Romain Francoise <romain@orebokech.com>
-
- * textmodes/makeinfo.el (makeinfo-compile):
- Use `compilation-start'. Set `next-error-function' according to
- `disable-errors'.
- (makeinfo-next-error): New function.
- (makeinfo-region): Adjust to new `makeinfo-compile' prototype.
- (makeinfo-buffer): Likewise.
-
- * progmodes/compile.el (compilation-start): Add autoload cookie.
-
- * progmodes/antlr-mode.el: Don't autoload `compilation-start'.
- * textmodes/sgml-mode.el: Likewise.
- * progmodes/python.el: Likewise.
-
-2005-08-27 Eli Zaretskii <eliz@gnu.org>
-
- * simple.el (blink-matching-paren-distance): Document the meaning
- of nil value, and allow to customize to nil.
-
- * eshell/esh-ext.el (eshell-windows-shell-file): Look for
- command.com, not command.exe.
-
-2005-08-26 John Wiegley <johnw@newartisans.com>
-
- * eshell/esh-cmd.el (eshell-rewrite-named-command): Change the
- code around a bit so that an extraneous nil argument is not added
- to a command when no args are given.
-
- * eshell/esh-arg.el (eshell-parse-double-quote): If a
- double-quoted argument resolves to nil, return it as an empty
- string rather than as nil. This made it impossible to pass "" to
- a shell script as a null string argument.
-
-2005-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * outline.el (outline-invent-heading): New fun.
- (outline-promote, outline-demote): Use it.
- (outline-move-subtree-down): Remove unused vars `re' and `txt'.
- (outline-end-of-subtree): Remove unused var `opoint'.
-
-2005-08-26 David Reitter <david.reitter@gmail.com>
-
- * menu-bar.el (truncate-lines, write-file, print-buffer)
- (ps-print-buffer-faces, ps-print-buffer, split-window):
- Disable menu items when the frame they refer to is invisible, or when
- they refer to a buffer and the minibuffer is selected.
-
-2005-08-26 Pavel Kobiakov <pk_at_work@yahoo.com>
-
- * progmodes/flymake.el (flymake-highlight-err-lines):
- Use save-excursion around flymake-highlight-line to preserve point.
-
-2005-08-26 Eli Zaretskii <eliz@gnu.org>
-
- * progmodes/octave-mod.el: Change Author and Maintainer address.
- (octave-maintainer-address): Change Kurt's email address.
- * progmodes/octave-inf.el: Change Author and Maintainer address.
- * progmodes/octave-hlp.el: Change Author and Maintainer address.
-
-2005-08-26 Kim F. Storm <storm@cua.dk>
-
- * subr.el (version-list-<, version-list-<=, version-list-=):
- Rename from integer-list-*.
- (version-list-not-zero): Likewise. Fix while loop.
- (version=): Use version-list-= instead of string-equal.
-
-2005-08-26 Richard M. Stallman <rms@gnu.org>
-
- * outline.el (outline-promote): Try shortening the heading.
- As last resort, read the heading to use.
- (outline-demote): As last resort, read the heading to use.
-
-2005-08-26 Romain Francoise <romain@orebokech.com>
-
- * progmodes/compile.el (compilation-start): Doc fix.
-
- * progmodes/antlr-mode.el (antlr-default): Fix defface form.
- (antlr-font-lock-additional-keywords): Fix reference to
- `antlr-font-lock-literal-regexp' erroneously changed during the
- mass face rename.
- (antlr-run-tool): Use `compilation-start'.
-
- * textmodes/sgml-mode.el (sgml-validate): Use `compilation-start'
- instead of the obsolete `compile-internal'.
-
-2005-08-26 Juanma Barranquero <lekktu@gmail.com>
-
- * calendar/cal-bahai.el (date, displayed-month, displayed-year)
- (number, original-date):
- * calendar/cal-china.el (date):
- * calendar/cal-coptic.el (date):
- * calendar/cal-french.el (date):
- * calendar/cal-hebrew.el (date, entry, number, original-date):
- * calendar/cal-islam.el (date, number, original-date):
- * calendar/cal-iso.el (date):
- * calendar/cal-julian.el (date):
- * calendar/cal-mayan.el (date):
- * calendar/cal-menu.el (date, event):
- * calendar/cal-persia.el (date):
- * calendar/lunar.el (date):
- * calendar/solar.el (date): Add defvars.
-
- * emerge.el:
- * ibuffer.el:
- * info-xref.el:
- * obsolete/bg-mouse.el:
- * obsolete/sun-curs.el:
- * obsolete/swedish.el: Move the `defvar's to the top level.
-
- * smerge-mode.el (smerge-refined-change): Add :group.
-
-2005-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * smerge-mode.el (smerge-remove-props): Make the args non-optional.
- (smerge-keep-n): Remove props.
- (smerge-keep-base, smerge-keep-other, smerge-keep-mine)
- (smerge-keep-current, smerge-kill-current): Don't remove props anymore
- now that it's done in smerge-keep-n.
- (smerge-refined-change): New face.
- (smerge-refine-chopup-region, smerge-refine-highlight-change)
- (smerge-refine): New funs.
- (smerge-basic-map): Bind smerge-refine.
-
-2005-08-25 Juri Linkov <juri@jurta.org>
-
- * progmodes/grep.el (grep, grep-mode): Make buffer-local variables
- compilation-process-setup-function and compilation-disable-input
- in grep-mode instead of let-bindings in grep.
-
- * menu-bar.el (menu-bar-options-menu, menu-bar-options-save):
- Delete "Automatic File De/compression" (auto-compression-mode).
-
-2005-08-25 Juanma Barranquero <lekktu@gmail.com>
-
- * obsolete/bg-mouse.el: Move to obsolete/ from term/.
- Silence warning about non-existent variable.
-
-2005-08-25 Richard M. Stallman <rms@gnu.org>
-
- * menu-bar.el (menu-bar-describe-menu): Delete "What's New".
- Rename "Describe Key" to "Describe Key or Mouse Operation".
-
- * mail/mailalias.el (build-mail-aliases): Delete comments
- from the contents before processing them.
-
- * isearch.el (isearch-edit-string): Erase the Search prompt
- if user enters an empty string and there is no default.
-
- * comint.el (comint-file-name-prefix): Add autoload.
-
-2005-08-25 Joe Corneli <jcorneli@math.utexas.edu>
-
- * subr.el (play-sound): Rearrange to avoid warning.
-
-2005-08-25 Carsten Dominik <dominik@science.uva.nl>
-
- * calendar/diary-lib.el (diary-modify-entry-list-string-function):
- New hook.
- (add-to-diary-list): Call `diary-modify-entry-list-string-function'.
-
-2005-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Simplify.
-
- * custom.el (custom-theme-set-variables): Sort minor modes last.
-
-2005-08-24 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * subr.el (version-separator, version-regexp-alist): New vars used by
- version comparison funs.
- (integer-list-<, integer-list-=, integer-list-<=)
- (integer-list-not-zero): New funs for integer list comparison.
- (version-to-list, version=, version<, version<=): New funs for version
- comparison.
-
-2005-08-24 Juanma Barranquero <lekktu@gmail.com>
-
- * emerge.el (merge-begin, merge-end, template, A-begin, A-end)
- (B-begin, B-end, diff, diff-vector, valid-diff): Defvar at compile
- time to silence the byte-compiler.
-
- * ibuffer.el (ibuffer-compile-make-eliding-form)
- (ibuffer-check-formats): Use `with-no-warnings' to hide references
- to `ibuffer-elide-long-columns' (which is defined on ibuffer.el,
- so it's silly to get warnings for it).
- (ibuffer-auto-mode, ibuffer-cached-filter-formats)
- (ibuffer-compiled-filter-formats, ibuffer-filter-format-alist)
- (ibuffer-filter-group-kill-ring, ibuffer-filter-groups)
- (ibuffer-filtering-qualifiers, ibuffer-hidden-filter-groups)
- (ibuffer-inline-columns, ibuffer-show-empty-filter-groups)
- (ibuffer-tmp-hide-regexps, ibuffer-tmp-show-regexps):
- Defvar at compile time.
- (ibuffer-compiled-formats, ibuffer-cached-eliding-string)
- (ibuffer-cached-formats, ibuffer-cached-elide-long-columns):
- Declare them before use.
-
- * info-xref.el (info-xref-xfile-alist, info-xref-filename-heading)
- (info-xref-good, info-xref-bad): Defvar at compile time.
-
- * obsolete/mlsupport.el (filter-region, execute-monitor-command):
- Use `let*' instead of `let'.
-
- * obsolete/sun-curs.el (icon-edit, *mouse-window*, *mouse-x*)
- (*mouse-y*, menu, char): Defvar at compile time.
- (sc::menu): Declare it before use.
- (sc::pack-one-line): Use `let', not `let*'.
-
- * obsolete/swedish.el (news-inews-hook, news-group-hook-alist)
- (mail-send-hook): Defvar at compile time.
-
- * term/bg-mouse.el (bg-mouse-x, bg-mouse-y, bg-cursor-window):
- Defvar at compile time.
-
- * term/sun-mouse.el (current-global-mousemap)
- (current-local-mousemap): Declare them before use.
-
-2005-08-24 Carsten Dominik <dominik@science.uva.nl>
-
- * bookmark.el (bookmark-after-jump-hook): New hook.
- (bookmark-jump): Run `bookmark-after-jump-hook'.
-
-2005-08-23 Juri Linkov <juri@jurta.org>
-
- * faces.el (minibuffer-prompt): Doc fix.
-
-2005-08-23 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/xscheme.el: Trivial changes to silence warnings.
- (xscheme-previous-mode, xscheme-previous-process-state):
- Add defvars.
- (xscheme-last-input-end, xscheme-process-command-line)
- (xscheme-process-name, xscheme-buffer-name)
- (xscheme-expressions-ring-max, xscheme-expressions-ring)
- (xscheme-expressions-ring-yank-pointer, xscheme-running-p)
- (xscheme-control-g-synchronization-p)
- (xscheme-control-g-disabled-p, xscheme-string-receiver)
- (default-xscheme-runlight, xscheme-runlight)
- (xscheme-runlight-string, xscheme-process-filter-state)
- (xscheme-allow-output-p, xscheme-prompt, xscheme-mode-string):
- Move to beginning of file.
- (scheme-interaction-mode-commands-alist)
- (scheme-interaction-mode-map, scheme-debugger-mode-map):
- Declare them before use. Note: the initialization code for the
- variables has not been moved because it uses functions that reference
- the variables.
- (xscheme-control-g-message-string, xscheme-process-filter-alist)
- (xscheme-prompt-for-expression-map): Declare them before use.
- (scheme-debugger-mode-commands): "?\ " -> "?\s".
-
-2005-08-23 Ed Swarthout <ed.swarthout@gmail.com> (tiny change)
-
- * hexl.el (hexl-print-current-point-info): Fix simple spelling error.
-
-2005-08-22 Juri Linkov <juri@jurta.org>
-
- * faces.el (set-face-underline): Delete this duplicate function
- and make an obsolete alias to set-face-underline-p.
- (set-face-underline-p): Use docstring of set-face-underline.
- (describe-face): Create hyperlink to parent face.
-
- * info.el (Info-insert-dir): Use save-excursion around
- insert-buffer-substring.
- (Info-isearch-search): Use LITERAL arg of replace-regexp-in-string.
- (Info-escape-percent): Delete function.
- (Info-fontify-node): Replace Info-escape-percent by
- replace-regexp-in-string with REP arg set to lambda that
- duplicates `%' and preserves text properties.
-
- * progmodes/compile.el (compilation-disable-input): Doc fix.
- (define-compilation-mode): Doc fix and refill.
- (kill-compilation): Use `mode-name' in the error message.
- (compilation-find-file): Use `compilation-error' in the
- read-file-name's prompt.
-
-2005-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * smerge-mode.el (smerge-basic-map): Bind smerge-combine-with-next.
- (smerge-auto-leave): Make undo re-enable the mode.
- (debug-ignored-errors): Add the user-error of impossible resolution.
- (smerge-resolve): Move things around a bit, in preparation for later.
- (smerge-diff): Don't fail if the buffer has no associated file.
- (ediff-ancestor-buffer, ediff-quit-hook): Quieten byte-compiler.
- (smerge-conflict-overlay): New function.
- (smerge-match-conflict): Don't add text properties here.
- (smerge-find-conflict): Instead, add an overlay here.
- Also check for the case where we're inside a conflict already, so as to
- obviate the need for font-lock-multiline, which is unbearably slow with
- large conflicts and ciomplex font-lock patterns.
- (smerge-remove-props): Remove overlay rather than text-properties.
- (smerge-mode): Don't set font-lock-multiline.
- Remove overlays when turned off.
-
-2005-08-21 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-ignore-item-p): Use save-match-data.
- Bind case-fold-search to ido-case-fold locally.
-
-2005-08-20 Richard M. Stallman <rms@gnu.org>
-
- * files.el (normal-mode): If font lock is on, turn it off and on.
-
- * subr.el (replace-regexp-in-string): Doc fix.
-
- * startup.el (command-line-1): Don't suppress startup screen
- due to existing processes.
-
- * progmodes/grep.el (grep): Bind compilation-disable-input to t.
-
- * progmodes/compile.el (compilation-disable-input): Default to nil.
-
-2005-08-20 Kevin Rodgers <ihs_4664@yahoo.com> (tiny change)
-
- * progmodes/compile.el (compilation-disable-input): New defcustom.
- (compilation-start): If compilation-disable-input is non-nil, send
- EOF to the compilation process.
-
-2005-08-20 Eli Zaretskii <eliz@gnu.org>
-
- * textmodes/tex-mode.el (tex-bibtex-file, tex-send-tex-command):
- Run the argument of tex-shell-cd-command through
- convert-standard-filename, to get the correct style of slashes on
- Windows, and enclose the result in quotes, in case the file name
- includes whitespace or other special characters.
-
-2005-08-19 Andreas Schwab <schwab@suse.de>
-
- * progmodes/gud.el (gud-kill-buffer-hook): Don't kill unrelated
- process.
-
-2005-08-18 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-start.el (minibuffer-prompt-properties): Correct typo.
-
-2005-08-18 Kim F. Storm <storm@cua.dk>
-
- * scroll-lock.el: Fix errors due to incorrect line wrapping.
-
-2005-08-18 Richard M. Stallman <rms@gnu.org>
-
- * scroll-lock.el: New file.
-
-2005-08-18 Thien-Thi Nguyen <ttn@gnu.org>
-
- * dired.el (dired-move-to-end-of-filename):
- Handle fifo as rendered by "ls -lF": Don't include trailing "|".
-
-2005-08-18 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-everywhere): Fix defcustom :set function to disable
- rather than toggle mode when custom value is nil.
- (ido-everywhere): Fix defun doc string.
-
-2005-08-17 Richard M. Stallman <rms@gnu.org>
-
- * cus-start.el (minibuffer-prompt-properties): Use "Don't Enter"
- as tag instead of "Inviolable".
-
-2005-08-17 Kim F. Storm <storm@cua.dk>
-
- * windmove.el (windmove-coordinates-of-position): Remove.
- (windmove-coordinates-of-window-position): Remove.
- (windmove-reference-loc): Use posn-at-point instead.
-
- * subr.el (insert-for-yank-1): Doc fix.
-
- * ido.el (ido-enter-matching-directory): Rename from
- ido-enter-single-matching-directory. Change `slash' choice to
- `only'. Add `first' choice.
- (ido-exhibit): Adapt to above changes.
-
-2005-08-16 Luc Teirlinck <teirllm@auburn.edu>
-
- * Makefile.in: Expand comment about building loaddefs.el.
-
-2005-08-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (toggle-gdb-use-inferior-io-buffer):
- Comment use of defadvice.
-
- * progmodes/gud.el (gud-jump): Rework for gdb-ui.
-
-2005-08-15 Dan Nicolaescu <dann@ics.uci.edu>
-
- * buff-menu.el, compare-w.el, emacs-lisp/testcover.el,
- * play/gomoku.el, play/mpuz.el, progmodes/flymake.el,
- * progmodes/gdb-ui.el, progmodes/idlw-help.el,
- * progmodes/idlw-shell.el, progmodes/ld-script.el,
- * progmodes/which-func.el, ruler-mode.el, strokes.el,
- * textmodes/sgml-mode.el, textmodes/table.el: Do not use face-alias
- for backward compatibility for faces that did not appear in the
- previous Emacs release.
-
- * simple.el (next-error-follow-minor-mode): Fix init value and lighter.
-
-2005-08-15 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-delete-region): Return t if
- deleted region was non-empty.
- (cua-replace-region): Inhibit overwrite-mode for
- self-insert-command if replaced region was non-empty.
- (cua--explicit-region-start, cua--status-string): Make them
- buffer-local at top-level...
- (cua-mode): ...rather than when mode is enabled.
-
-2005-08-15 Thien-Thi Nguyen <ttn@gnu.org>
-
- * progmodes/vhdl-mode.el (vhdl-emacs-21):
- Set t for Emacs 21, 22, and so on.
-
-2005-08-15 David Ponce <david@dponce.com>
-
- * tree-widget.el: Update Commentary header.
- (tree-widget-theme): Doc fix.
- (tree-widget-space-width): New option.
- (tree-widget-image-properties): Look up in the default theme too.
- (tree-widget--cursors): Only for images with arrow pointer shape.
- (tree-widget-lookup-image): Pointer shape is hand by default.
- (tree-widget-icon): Rename generic icon widget from
- `tree-widget-control'.
- (tree-widget-*-icon): Rename from `tree-widget-*-control' and
- derive from `tree-widget-icon'.
- (tree-widget-handle): Improve default look and feel of the text
- representation.
- (tree-widget): Rename :*-control properties to :*-icon properties.
- Add :action and :help-echo properties.
- (tree-widget-after-toggle-functions): Move.
- (tree-widget-close-node, tree-widget-open-node): Remove.
- (tree-widget-before-create-icon-functions): New hook.
- (tree-widget-value-create): Update to allow customization of icons
- and nodes at run-time via that new hook.
- (tree-widget-icon-create, tree-widget-leaf-node-icon-p)
- (tree-widget-icon-action, tree-widget-icon-help-echo)
- (tree-widget-action, tree-widget-help-echo): New functions.
-
-2005-08-15 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-buffer-internal): Use with-no-warnings.
- (ido-make-merged-file-list): Use while-no-input.
-
-2005-08-15 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-mark-duplications-flag): Doc fix.
- (flyspell-large-region): Fix doc and custom type.
-
-2005-08-14 Richard M. Stallman <rms@gnu.org>
-
- * files.el (interpreter-mode-alist): Doc fix.
-
- * mail/rmail.el (rmail-nonignored-headers): New variable.
- (rmail-clear-headers): Use it.
- (rmail-reply): Better handling of mail-followup-to header.
-
- * progmodes/sh-script.el (sh-font-lock-keywords-var):
- Rename variable from sh-font-lock-keywords. In the `shell' entry,
- don't try to refer to executable-font-lock-keywords.
- (sh-font-lock-keywords-var-1): Rename from sh-font-lock-keywords-1.
- (sh-font-lock-keywords-var-2): Rename from sh-font-lock-keywords-2.
- (sh-font-lock-keywords): Append executable-font-lock-keywords here.
- (sh-mode): Set comment-start-skip, local-abbrev-table,
- imenu-case-fold-search.
- (sh-set-shell): Don't set them here.
- (sh-feature): Simplify. Get rid of the eval-a-variable feature.
- Don't cache the results in the original alist; don't ever modify
- that alist.
-
- * textmodes/flyspell.el (flyspell-mode): Autoload a defvar.
-
- * textmodes/ispell.el (lookup-words): Cope with case where ARGS is
- empty.
-
-2005-08-15 Andreas Schwab <schwab@suse.de>
-
- * desktop.el: Put autoload cookie at risky-local-variable declarations.
-
- * dired.el, info.el, mail/rmail.el: Revert last change.
-
-2005-08-14 Thien-Thi Nguyen <ttn@gnu.org>
-
- * dired.el: Fix dependency bug: Wrap `desktop-buffer-mode-handlers'
- modification in `eval-after-load' form.
- * info.el: Likewise.
- * mail/rmail.el: Likewise.
-
-2005-08-14 Juri Linkov <juri@jurta.org>
-
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Remove highlighting of "Compilation started". Highlight only
- the word "finished" in "Compilation finished". Add highlighting
- of "interrupt", "killed", "terminated" and the exit code.
- (compilation-start): Add newline after header. Use exactly the
- same time stamp format as the finishing message.
- (compilation-mode-map): Add ellipsis to "Search Files (grep)".
-
- * progmodes/grep.el (grep-mode-map): Add ellipsis to "Another grep".
- (grep-mode-font-lock-keywords): Don't highlight "Grep started".
- Add highlighting of "interrupt", "killed", "terminated".
-
- * delsel.el (delete-selection-pre-hook): If overwrite-mode is
- enabled and the current command is self-insert-command, call it
- explicitly with overwrite-mode bound to nil, to not allow it
- to delete the character after the selected region.
-
-2005-08-12 Matt Hodges <MPHodges@member.fsf.org>
-
- * emacs-lisp/eldoc.el: Add move-beginning-of-line,
- move-end-of-line, end-of-line, and beginning-of-line to the list
- of commands after which the echo area is updated.
-
-2005-08-12 Eli Zaretskii <eliz@gnu.org>
-
- * cus-edit.el (custom-save-all, custom-save-delete):
- Bind recentf-exclude to exclude custom-file.
-
-2005-08-12 Ehud Karni <ehud@unix.mvs.co.il>
-
- * mail/rmailsum.el (rmail-summary-end-of-message): New command
- to go to the bottom of the mail message. Added to
- `rmail-summary-mode-map' with key "/".
- (rmail-summary-show-message): New (internal) function for use by
- both `rmail-summary-beginning/end-of-message'.
- (rmail-summary-beginning-of-message): Change to use
- rmail-summary-show-message.
-
- * mail/rmail.el (rmail-end-of-message): New command to go to the
- end of the current message. Added to `rmail-mode-map' with key "/".
- (rmail-beginning-of-message): Fix to work as documented.
- (rmail-mode): Change documentation.
-
- * progmodes/compile.el (compilation-start): Add the line
- "Compilation started" with compilation start time.
- (compilation-mode-font-lock-keywords): Add `started' to keywords.
-
-2005-08-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * menu-bar.el (menu-bar-options-menu): Standardize capitalization
- of menu items.
-
-2005-08-11 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (pop-global-mark): Reverse test of widen-automatically.
-
- * battery.el (battery-status-function): Don't use ignore-errors.
-
-2005-08-11 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/generic.el (generic-font-lock-defaults): Declare with
- define-obsolete-variable-alias.
-
-2005-08-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/ange-ftp.el: Use \\` and \\' instead of ^ and $ in regexps.
- (ange-ftp-send-cmd): Revert last change, and expand
- the comment explaining the problem.
-
-2005-08-10 Luc Teirlinck <teirllm@auburn.edu>
-
- * ldefs-boot.el: Update.
-
- * menu-bar.el (menu-bar-showhide-menu): Rename "Date, Time and Mail"
- item to "Time, Load and Mail". Change help echo text.
-
- * time.el (display-time-use-mail-icon, display-time-format)
- (display-time-string-forms): Shorten first line of docstrings.
-
-2005-08-10 Lars Hansen <larsh@soem.dk>
-
- * desktop.el (desktop-buffer-mode-handlers):
- Make non-customizable. Add autoload cookie. Change initial value to
- nil; add elements in respective modules instead. Fix doc string.
- (desktop-load-file): New function.
- (desktop-minor-mode-handlers): New autoloaded variable.
- (desktop-create-buffer): Call minor mode handlers.
- Use desktop-load-file to load major and minor mode modules prior to
- checking for a handler.
- (desktop-save): Don't add nil to desktop-minor-modes for minor
- modes with nil function in desktop-minor-mode-table. Don't delete
- desktop file before rewriting it.
- (desktop-locals-to-save): Add autoload cookie. Don't make
- automatically buffer-local. Add variables column-number-mode,
- size-indication-mode, indent-tabs-mode,
- indicate-buffer-boundaries, indicate-empty-lines and
- show-trailing-whitespace.
- (desktop-clear): Allow desktop-clear-preserve-buffers to contain
- regexps. Don't use desktop-clear-preserve-buffers-regexp.
- (desktop-clear-preserve-buffers-regexp): Delete.
- (desktop-clear-preserve-buffers): Update initial value and docstring.
- (desktop-save-buffer): Fix doc string.
-
- * hilit-chg.el: Add handler to desktop-minor-mode-handlers.
- (hilit-chg-desktop-restore): New function.
- (highlight-changes-mode): Add highlight-changes-mode to
- desktop-locals-to-save.
-
- * dired.el: Add handler to desktop-buffer-mode-handlers.
- (dired-restore-desktop-buffer): Remove autoload cookie.
- (dired-mode): Add autoload cookie.
-
- * info.el: Add handler to desktop-buffer-mode-handlers.
- (Info-restore-desktop-buffer): Remove autoload cookie.
- (Info-mode): Add autoload cookie.
-
- * mh-e/mh-e.el: Add handler to desktop-buffer-mode-handlers.
- (mh-restore-desktop-buffer): Remove autoload cookie.
- (mh-folder-mode): Add autoload cookie.
-
- * mail/rmail.el: Add handler to desktop-buffer-mode-handlers.
- (rmail-restore-desktop-buffer): Remove autoload cookie.
-
-2005-08-11 Masatake YAMATO <jet@gyve.org>
-
- * hexl.el (hexl-address-region):
- (hexl-ascii-region, hexl-font-lock-keywords):
- (hexl-highlight-line-range): Use the term "region"
- instead of "area" for consistency with the other symbols
- defined in hexl.el.
-
-2005-08-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * menu-bar.el (menu-bar-options-save): Move `display-time-mode' to
- correct group: it is set with `menu-bar-make-mm-toggle' (pointed
- out by Juri Linkov). Add `display-battery-mode'.
-
-2005-08-09 Juri Linkov <juri@jurta.org>
-
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Remove `-text' from face variable names.
- (compilation-error-file-name, compilation-warning-file-name)
- (compilation-info-file-name): Delete faces.
- (compilation-line-number, compilation-column-number):
- Remove face underlining.
- (compilation-message-face): Set to `underline' value by default.
- (compilation-error-face, compilation-warning-face)
- (compilation-info-face): Remove `-file-name' from face names.
- (compilation-error-text-face, compilation-warning-text-face)
- (compilation-info-text-face): Delete face variables.
- (compilation-text-face): Delete function.
-
- * progmodes/grep.el (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
- (grep-mode-font-lock-keywords): Use `.+?' instead of `[^\n-]+'.
- (grep-error-face): Set to `compilation-error' instead of
- `compilation-error-face' (which is redefined to `grep-hit-face' in
- grep buffers).
- (grep-mode-font-lock-keywords): Remove `-text' from face variable
- names. Use `grep-error-face' instead of `compilation-error-text-face'.
-
- * dired-aux.el (dired-do-query-replace-regexp):
- Use `query-replace-read-args'.
-
- * replace.el (query-replace-read-from, query-replace-read-to)
- (query-replace-read-args): Rename arg `string' to `prompt'.
-
- * menu-bar.el (menu-bar-showhide-menu): Add `showhide-battery'.
-
-2005-08-09 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * net/ange-ftp.el (ange-ftp-send-cmd): Make it work properly with
- uploading files.
- (ange-ftp-canonize-filename): Handle file names beginning with ~
- correctly.
-
-2005-08-09 Juanma Barranquero <lekktu@gmail.com>
-
- * textmodes/fill.el (canonically-space-region)
- (fill-context-prefix, fill-french-nobreak-p)
- (fill-delete-newlines, fill-comment-paragraph)
- (justify-current-line): "?\ " -> "?\s".
-
-2005-08-09 Ben North <ben@redfrontdoor.org> (tiny change)
-
- * textmodes/fill.el (fill-nonuniform-paragraphs):
- Improve argument/docstring consistency.
-
-2005-08-09 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/ispell.el (ispell-word): More fboundp checks.
-
- * files.el (find-file-noselect): Don't call set-buffer-major-mode.
- (find-file-noselect-1): Call it here, only if RAWFILE.
- (normal-mode): Always set some major mode.
- (save-some-buffers-action-alist): Change some explanation strings.
- (file-name-non-special): In the `quote' method, use unwind-protect.
-
-2005-08-09 Magnus Henoch <mange@freemail.hu>
-
- * textmodes/ispell.el (ispell-find-aspell-dictionaries): New command.
- (ispell-have-aspell-dictionaries): New variable.
- (ispell-aspell-data-dir, ispell-aspell-dict-dir): New variables.
- (ispell-get-aspell-config-value): New function.
- (ispell-aspell-find-dictionary): New function.
- (ispell-aspell-add-aliases): New function.
- (ispell-valid-dictionary-list): Call ispell-find-aspell-dictionaries if
- appropriate. Don't look for ispell dictionaries if we use aspell.
- (ispell-menu-map): Don't build a submenu of dictionaries.
-
-2005-08-09 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/sql.el (sql-interactive-mode-map): Use fboundp.
- (sql-read-passwd): Use read-passwd.
-
- * progmodes/idlw-toolbar.el (idlwave-toolbar)
- (idlwave-toolbar-is-possible): Add defvars.
-
- * progmodes/idlw-shell.el (idlwave-xemacs-hack-mouse-track):
- Avoid warnings.
-
- * progmodes/idlw-rinfo.el (idlwave-system-variables-alist)
- (idlwave-system-class-info, idlwave-executive-commands-alist):
- Use defvar.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Add autoload.
-
- * mail/supercite.el (sc-ask, sc-no-blank-line-or-header):
- Avoid warnings.
-
- * mail/rmail.el (rmail-ignored-headers): Don't hide mime-version:
- and content-type: headers.
-
- * eshell/eshell.el (eshell): Avoid warnings about eshell-mode.
-
- * emacs-lisp/map-ynp.el (map-y-or-n-p): Reorder the options
- and rename some of them to be more self-explanatory.
-
- * calendar/calendar.el (calendar-mode-map): Bind < and > usefully.
-
- * startup.el (command-line-1): Implement -scriptload.
-
- * replace.el (occur-engine): Initial *Occur* output not undoable.
-
- * menu-bar.el (menu-bar-file-menu): Rename some menu items
- and improve help strings.
-
- * isearch.el (isearch-repeat): When changing direction,
- mark search successful.
-
- * ediff-init.el: Use (featurep 'xemacs).
-
- * comint.el (send-invisible): Identify buffer, if not selected.
-
- * align.el: Delete autoload for c-guess-basic-syntax.
-
-2005-08-09 Juanma Barranquero <lekktu@gmail.com>
-
- * textmodes/refbib.el (r2b-convert-record, r2b-convert-buffer):
- Improve argument/docstring consistency. Doc fixes.
- (r2b-variables, r2bv-address, r2bv-annote, r2bv-author)
- (r2bv-booktitle, r2bv-date, r2bv-decade, r2bv-editor)
- (r2bv-entry-kind, r2bv-institution, r2bv-journal, r2bv-keywords)
- (r2bv-kn, r2bv-month, r2bv-note, r2bv-number, r2bv-ordering)
- (r2bv-organization, r2bv-pages, r2bv-primary-author)
- (r2bv-publisher, r2bv-school, r2bv-title, r2bv-title-first-word)
- (r2bv-tr, r2bv-type, r2bv-volume, r2bv-where, r2bv-year):
- Defvar at compile time.
-
-2005-08-09 Juri Linkov <juri@jurta.org>
-
- * info.el: Replace `info' with upper-case `Info' where appropriate.
- (info-title-1, info-title-2, info-title-3, info-title-4)
- (info-menu-header): Move up face definitions.
- (info-menu-star): Rename from `info-menu-5'.
- (Info-fontify-node): Replace `info-menu-5' with `info-menu-star'.
- (Info-fontify-visited-nodes): Fix docstring.
- (Info-hide-note-references): Fix docstring.
- (Info-up, Info-next-reference, Info-prev-reference): Put cursor on
- menu items in the same way as on cross-references.
- (info-apropos): Fix sorting order and formatting to be like in the
- stand-alone Info browser. Display error messages for 1 sec.
- (Info-mode-map): Move down `c' key binding. Bind `^' to `Info-up'.
- (Info-mode-menu): Remove item for `Info-search-case-sensitively'
- from the menu bar.
- (Info-insert-dir): Restore point after calling
- `insert-buffer-substring'.
-
-2005-08-08 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/lmenu.el (lucid-menubar-map, lucid-failing-menubar)
- (recompute-lucid-menubar): Add defvars.
-
- * mail/sendmail.el (mail-yank-original): Use with-no-warnings.
-
- * mail/reporter.el (reporter-dump-state): Use insert-buffer-substring.
-
- * net/net-utils.el (run-dig): Rename from `dig'.
-
- * play/gametree.el (gametree-mode): Use make-local-variable,
- not make-variable-buffer-local.
-
- * progmodes/ada-prj.el (ada-prj-display-page): Use with-no-warnings.
-
- * ansi-color.el (ansi-color-make-extent)
- (ansi-color-set-extent-face): Use fboundp, not functionp.
-
- * autorevert.el (auto-revert-tail-mode): Use make-local-variable,
- not make-variable-buffer-local.
-
- * bookmark.el (Info-current-file): Add defvar.
- (bookmark-jump-noselect): Use with-no-warnings.
-
- * completion.el (c-mode-map, fortran-mode-map): Add defvars.
-
- * ebuff-menu.el (Helper-return-blurb): Add defvar.
-
- * ffap.el (gnus-summary-buffer, gnus-article-buffer): Add defvars.
-
- * find-file.el (ada-procedure-start-regexp)
- (ada-package-start-regexp): Add defvars.
-
- * info.el (Info-insert-dir): Use insert-buffer-substring.
-
- * xml.el (xml-att-def-re): Add defvar.
-
- * icomplete.el (icomplete-exhibit): Adapt to new while-no-input
- calling convention.
-
- * subr.el (while-no-input): Return t if there is input.
-
-2005-08-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-start.el (all): Add `overflow-newline-into-fringe'.
-
-2005-08-08 Juanma Barranquero <lekktu@gmail.com>
-
- * cmuscheme.el (inferior-scheme-mode-hook, inferior-scheme-mode)
- (scheme-prev-l/c-dir/file): Fix typos in docstrings.
-
-2005-08-08 Emilio C. Lopes <eclig@gmx.net>
-
- * cmuscheme.el (scheme-start-file): Replace reference to
- `user-emacs-directory' by "~/.emacs.d/".
-
-2005-08-08 Thien-Thi Nguyen <ttn@gnu.org>
-
- * info.el (Info-dir-remove-duplicates): Avoid case folding
- in loop; instead, keep downcased strings for comparison.
- Suggested by Helmut Eller.
-
-2005-08-07 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.50.
-
- * net/tramp.el: Remove defvar of `last-coding-system-used' in the
- XEmacs case; not necessary anymore.
- (tramp-user-regexp): Allow "@" as part of user name.
- (tramp-handle-set-visited-file-modtime)
- (tramp-handle-insert-file-contents)
- (tramp-handle-write-region): No special handling for
- `last-coding-system-used, because this is done in
- `tramp-accept-process-output' now.
- (tramp-accept-process-output): New defun.
- (tramp-process-one-action, tramp-process-one-multi-action)
- (tramp-wait-for-regexp, tramp-wait-for-output)
- (tramp-discard-garbage-erase-buffer): Call it. Reported by David
- Howells <dhowells@redhat.com>.
- (clear-visited-file-modtime): Defadvice removed. The check for
- unset buffer's modtime does not need to be based on
- `tramp-buffer-file-attributes'. Suggested by RMS.
- (tramp-message): Insert "\n" if not being at beginning of line.
- (tramp-find-shell): Use `tramp-barf-if-no-shell-prompt' for code
- sequence with same logic.
- (tramp-completion-handle-expand-file-name): Discard call of
- `tramp-drop-volume-letter'. It is not necessary, and there have
- been problems with (expand-file-name "~/.netrc" "/") in ange-ftp.
- Reported by Richard G. Bielawski <Richard.G.Bielawski@wellsfargo.com>.
- (tramp-do-copy-or-rename-file-out-of-band): Transfer message
- should always be visible.
- (tramp-handle-insert-directory, tramp-setup-complete)
- (tramp-set-process-query-on-exit-flag)
- (tramp-append-tramp-buffers): Pacify byte-compiler.
- (tramp-bug): Delete non-existing variables from list.
- Apply `tramp-load-report-modules' as pre-hook.
- Mask `tramp-password-prompt-regexp', `tramp-shell-prompt-pattern' and
- `shell-prompt-pattern' because of non-7bit characters.
- Reported by Sebastian Luque <sluque@mun.ca>.
- (tramp-reporter-dump-variable, tramp-load-report-modules): New defuns.
- (tramp-match-string-list): Remove function.
- (tramp-wait-for-regexp): Remove call of that function.
- Suggested by Kim F. Storm <storm@cua.dk>.
- (tramp-set-auto-save-file-modes): Use octal integer code #o600
- instead of octal character code ?\600. The latter resulted in a
- syntax error with XEmacs.
-
- * net/tramp-smb.el: Remove defvar of `last-coding-system-used' in the
- XEmacs case; not necessary anymore.
- (tramp-smb-handle-write-region): No special handling for
- `last-coding-system-used, because this is done in
- `tramp-accept-process-output' now.
- (tramp-smb-wait-for-output): Call `tramp-accept-process-output'.
-
-2005-08-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * wid-edit.el (widget-choice-value-create):
- Unconditionally respect user choice. Set :explicit-choice back to nil
- when no longer needed.
- (widget-choice-action): Unconditionally respect user choice.
- Eliminate :explicit-choice-value.
-
- * fringe.el (set-fringe-indicators-1, fringe-indicators): Delete.
-
- * menu-bar.el (menu-bar-options-save): Replace `fringe-indicators'
- with `indicate-empty-lines' and `indicate-buffer-boundaries'.
- (menu-bar-showhide-fringe-menu): Add new item "Empty line indicators"
- running new function `toggle-indicate-empty-lines'.
- Rename "Customize" item to "Customize fringe".
- Rename "Indicators" item to "Buffer boundaries" and change help echo.
- (menu-bar-showhide-fringe-ind-menu): Change several help echos.
- Add `menu-bar-showhide-fringe-ind-customize' as "Other (customize)".
- Delete "Empty lines only" item.
- (menu-bar-showhide-fringe-ind-customize): New function.
- (menu-bar-showhide-fringe-ind-mixed)
- (menu-bar-showhide-fringe-ind-box)
- (menu-bar-showhide-fringe-ind-right)
- (menu-bar-showhide-fringe-ind-left)
- (menu-bar-showhide-fringe-ind-none): Use `indicate-buffer-boundaries'
- instead of `fringe-indicators'.
-
-2005-08-06 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper.el (viper-emacs-state-mode-list):
- Add recentf-dialog-mode. Change the date of last update.
-
-2005-08-06 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-cmd.el (viper-harness-minor-mode, viper-exec-delete)
- (viper-exec-yank, viper-put-back): Don't display modification msg
- if in the minibuffer.
-
- * emulation/viper-init.el (viper-replace-overlay-cursor-color)
- (viper-insert-state-cursor-color, viper-vi-state-cursor-color):
- Make variables frame local.
-
- * emulation/viper-util.el (viper-append-filter-alist):
- Use append instead of nconc.
-
- * emulation/viper.el (viper-vi-state-mode-list)
- (viper-emacs-state-mode-list): Move help-mode and
- completion-list-mode from the first list to the second.
- (viper-mode): Docstring.
- (viper-go-away, viper-non-hook-settings): Don't localize
- minor-mode-alist in newer Emacsen. Add advice to
- set-cursor-color. Don't bind "\C-c\\".
-
-2005-08-06 Emilio C. Lopes <eclig@gmx.net>
-
- * cmuscheme.el (scheme-trace-command, scheme-untrace-command)
- (scheme-macro-expand-command): New user options.
- (scheme-trace-procedure, scheme-expand-current-form): New commands.
- (scheme-form-at-point, scheme-start-file)
- (scheme-interactively-start-process): New functions.
- (scheme-get-process): New function, extracted from `scheme-proc'.
- (run-scheme): Call `scheme-start-file' to get start file, and pass
- it to `make-comint'.
- (switch-to-scheme, scheme-proc):
- Call `scheme-interactively-start-process' if no Scheme buffer/process
- is available.
-
-2005-08-06 Juri Linkov <juri@jurta.org>
-
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Use `compilation-text-face', `compilation-info-text-face' and
- `compilation-error-text-face' instead of `font-lock-keyword-face'.
- (compilation-error): New face.
- (compilation-error-file-name): Inherit from
- `compilation-error' instead of `font-lock-warning-face'.
- (compilation-warning-file-name): Inherit from
- `compilation-warning' instead of `font-lock-warning-face'.
- (compilation-info, compilation-error-file-name)
- (compilation-warning-file-name, compilation-info-file-name)
- (compilation-line-number, compilation-column-number): Doc fix.
- (compilation-error-text-face, compilation-warning-text-face)
- (compilation-info-text-face): New face variables.
- (compilation-line-face, compilation-column-face)
- (compilation-enter-directory-face)
- (compilation-leave-directory-face): Doc fix.
- (compilation-text-face): New function.
-
- * progmodes/grep.el (grep-regexp-alist): Set 5th arg `TYPE' to 0
- instead of 1 to display binary file names as info file links.
- (grep-error-face): Use `compilation-error-face' instead of
- `font-lock-keyword-face'.
- (grep-mode-font-lock-keywords): Use `compilation-info-text-face'
- and `compilation-warning-text-face' instead of
- `font-lock-keyword-face'. Use `compilation-error-text-face'
- instead of `grep-error-face'.
-
-2005-08-05 Kenichi Handa <handa@m17n.org>
-
- * international/code-pages.el: Add autoload cookies for all coding
- systems.
-
-2005-08-04 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-start.el (all): Put undo.c where it alphabetically belongs.
-
-2005-08-04 Juri Linkov <juri@jurta.org>
-
- * progmodes/compile.el (compilation-mode-map):
- * progmodes/grep.el (grep-mode-map):
- Bind TAB to `compilation-next-error' and [backtab] to
- `compilation-previous-error'.
-
- * progmodes/grep.el (grep-regexp-alist): Replace complex regexp
- matching line numbers, column numbers and their ranges with regexp
- matching only line numbers.
- (grep-context-face): New face variable.
- (grep-mode-font-lock-keywords): Use it.
-
- * faces.el (read-face-name): Delete duplicate faces.
-
-2005-08-02 Juanma Barranquero <lekktu@gmail.com>
-
- * thumbs.el (thumbs-find-image): Don't make variables
- automatically buffer local.
- (thumbs-current-tmp-filename, thumbs-current-image-filename)
- (thumbs-image-num): Make automatically buffer local.
- (thumbs-show-thumbs-list): Use `make-local-variable', not
- `make-variable-buffer-local'.
- (thumbs-insert-image): Make `thumbs-current-image-size' buffer-local.
-
- * play/doctor.el (doctor-type-symbol): "?\ " -> "?\s".
- (**mad**, *debug*, *print-space*, *print-upcase*, abuselst)
- (abusewords, account, afraidof, arerelated, areyou, bak, beclst)
- (bother, bye, canyou, chatlst, continue, deathlst, describe)
- (drnk, drugs, eliza-flag, elizalst, famlst, feared, fears)
- (feelings-about, foullst, found, hello, history, howareyoulst)
- (howdyflag, huhlst, ibelieve, improve, inter, isee, isrelated)
- (lincount, longhuhlst, lover, machlst, mathlst, maybe, moods)
- (neglst, obj, object, owner, please, problems, qlist)
- (random-adjective, relation, remlst, repetitive-shortness)
- (replist, rms-flag, schoollst, sent, sexlst, shortbeclst)
- (shortlst, something, sportslst, stallmanlst, states, subj)
- (suicide-flag, sure, things, thlst, toklst, typos, verb, want)
- (whatwhen, whereoutp, whysay, whywant, zippy-flag, zippylst):
- Defvar at compile time.
-
- * progmodes/ada-mode.el (ada-mode): Use `make-local-variable',
- not `make-variable-buffer-local'.
-
-2005-08-02 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-rect.el (cua--highlight-rectangle): Only show
- rectangle overlay in selected window.
-
-2005-08-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-start.el (all): Put `indicate-empty-lines' in fringe group
- instead of display group. Make `indicate-buffer-boundaries'
- customizable through Custom.
-
-2005-08-01 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/gdb-ui.el (gdb-frame-address, gdb-var-changed)
- (gdb-output-sink, gdba, gdb-cpp-define-alist-program)
- (gdb-set-gud-minor-mode, gdb-exited, gdb-setup-windows)
- (gdb-put-string): Fix typos in docstrings.
-
-2005-08-01 Nick Roberts <nickrob@snap.net.nz>
-
- Update copyright notices of files in progmodes directory for
- release of Emacs 22.1.
-
- * progmodes/gdb-ui.el (gdb-enable-debug-log): Add autoload cookie.
-
- * progmodes/gud.el (gud-tooltip-mode): Add autoload cookie.
- Don't barf if the GUD buffer has been killed.
-
-2005-08-01 Kim F. Storm <storm@cua.dk>
-
- * textmodes/table.el (table-yank-handler): Change defcustom to defvar.
-
-2005-07-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * simple.el (next-error-follow-minor-mode):
- make-variable-buffer-local -> make-local-variable.
-
- * emacs-lisp/cl-extra.el: Require CL also when compiling.
-
- * emacs-lisp/bytecomp.el (byte-compile-make-variable-buffer-local)
- (byte-compile-form-make-variable-buffer-local): New functions to warn
- about misuses of make-variable-buffer-local where make-local-variable
- was meant.
-
-2005-07-29 Juanma Barranquero <lekktu@gmail.com>
-
- * bs.el (bs-attributes-list): Doc fix.
- (bs): Update url-link.
-
- * desktop.el (desktop-save-buffer): Fix typos in docstring.
- (desktop-load-default): Simplify.
-
- * ibuffer.el (ibuffer-columnize-and-insert-list)
- (ibuffer-mouse-toggle-mark, ibuffer-count-marked-lines)
- (ibuffer-unmark-all, ibuffer-toggle-marks)
- (ibuffer-unmark-forward, ibuffer-unmark-backward)
- (ibuffer-compile-make-format-form, ibuffer-format-column)
- (ibuffer-current-buffers-with-marks)
- (ibuffer-update-title-and-summary): "?\ " -> "?\s".
- (ibuffer): Doc fix.
- (ibuffer-mode): Fix typo in docstring.
- (ibuffer-hooks, ibuffer-mode-hooks): Make obsolete and declare
- with `define-obsolete-variable-alias'.
- (ibuffer-elide-long-columns): Mark as obsolete. Doc fix.
-
-2005-07-29 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (select-message-coding-system):
- Be sure to use LF for end-of-line. If no coding system is decided,
- return iso-8859-1-unix.
-
-2005-07-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/ange-ftp.el (ange-ftp-gateway-fatal-msgs)
- (ange-ftp-pending-error-line): New vars.
- (ange-ftp-process-handle-line, ange-ftp-process-filter): Use them
- to handle the non-fatal no-route-to-host messages.
- (internal-ange-ftp-mode): Make the no-match regexp more efficient.
-
-2005-07-28 Juanma Barranquero <lekktu@gmail.com>
-
- * isearch.el (isearch-mode-map, isearch-other-meta-char)
- (isearch-quote-char, isearch-printing-char)
- (isearch-text-char-description): "?\ " -> "?\s".
- (isearch-lazy-highlight-cleanup)
- (isearch-lazy-highlight-initial-delay)
- (isearch-lazy-highlight-interval)
- (isearch-lazy-highlight-max-at-a-time)
- (isearch-lazy-highlight-face, isearch-lazy-highlight-cleanup):
- Declare with define-obsolete-*-alias macros.
- (isearch-forward): Fix typo in docstring.
- (search-invisible, search-ring-yank-pointer)
- (regexp-search-ring-yank-pointer): Doc fixes.
-
- * recentf.el (recentf-menu-append-commands-p): Declare with
- `define-obsolete-variable-alias'.
- (recentf-max-saved-items, recentf-menu-filter)
- (recentf-arrange-by-rule-subfilter): Doc fixes.
- (recentf-menu-append-commands-flag)
- (recentf-initialize-file-name-history, recentf-expand-file-name)
- (recentf-clear-data): Fix typos in docstrings.
-
-2005-07-28 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el: Smarten comments.
- (gdb-info-breakpoints-custom): Use nowarn when finding file.
-
-2005-07-27 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/apollo.el (terminal-init-apollo): New function containing
- all former top level forms in the file.
- * term/bobcat.el (terminal-init-bobcat):
- * term/cygwin.el (terminal-init-cygwin):
- * term/iris-ansi.el (terminal-init-iris-ansi):
- * term/linux.el (terminal-init-linux):
- * term/news.el (terminal-init-news):
- * term/rxvt.el (terminal-init-rxvt):
- * term/sun.el (terminal-init-sun):
- * term/tvi970.el (terminal-init-tvi970):
- * term/vt100.el (terminal-init-vt100):
- * term/vt102.el (terminal-init-vt102):
- * term/vt125.el (terminal-init-vt125):
- * term/vt200.el (terminal-init-vt200):
- * term/vt201.el (terminal-init-vt201):
- * term/vt220.el (terminal-init-vt220):
- * term/vt240.el (terminal-init-vt240):
- * term/vt300.el (terminal-init-vt300):
- * term/vt320.el (terminal-init-vt320):
- * term/vt400.el (terminal-init-vt400):
- * term/vt420.el (terminal-init-vt420):
- * term/wyse50.el (terminal-init-wyse50):
- * term/xterm.el (terminal-init-xterm): Likewise.
-
- * term/README: Describe the terminal-init-* functionality.
-
- * startup.el (command-line): After loading the terminal initialization
- file call the corresponding terminal initialization function.
-
-2005-07-27 Kenichi Handa <handa@m17n.org>
-
- * ps-bdf.el (bdf-read-font-info): Ignore glyphs whose ENCODING is
- negative.
-
- * ps-mule.el (ps-mule-bitmap-prologue): Fix arguments to setcharwidth.
- (ps-mule-composition-prologue): Fix for the case that
- RelativeCompose is false.
-
-2005-07-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * smerge-mode.el (smerge-ediff): Use insert-buffer-substring.
-
- * descr-text.el (describe-char): Handle the case where the list of
- chars is displayed in a separate frame.
- Be a bit more discriminating when looking for the char.
-
-2005-07-26 Juanma Barranquero <lekktu@gmail.com>
-
- * bookmark.el (bookmark-automatically-show-annotations)
- (bookmark-read-annotation-text-func): Doc fixes.
- (bookmark-save): Improve argument/docstring consistency.
- (bookmark-get-bookmark, bookmark-get-bookmark-record)
- (bookmark-alist-from-buffer)
- (bookmark-upgrade-file-format-from-0)
- (bookmark-grok-file-format-version)
- (bookmark-maybe-upgrade-file-format, bookmark-kill-line)
- (bookmark-read-annotation-mode)
- (bookmark-insert-current-bookmark, bookmark-jump)
- (bookmark-exit-hook): Fix typos in docstrings.
- (bookmark-exit-hooks): Define as obsolete alias.
- (bookmark-exit-hook-internal): Run `bookmark-exit-hook',
- not `bookmark-exit-hooks'. Fix docstring.
- (bookmark-bmenu-select): "?\ " -> "?\s".
-
-2005-07-25 Ari Roponen <arjuropo@cc.jyu.fi> (tiny change)
-
- * startup.el (command-line): Fix typo.
-
-2005-07-24 Richard M. Stallman <rms@gnu.org>
-
- * tooltip.el (tooltip-mode): Test emacs-basic-display,
- not emacs-quick-startup.
-
-2005-07-24 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/re-builder.el (reb-with-current-window): Delete.
- (reb-next-match, reb-show-subexp): Use `with-selected-window'
- instead of `reb-with-current-window'.
- (reb-prev-match): Likewise. Also, don't move left if the search
- was unsuccessful.
- (reb-initialize-buffer): New function.
- (re-builder, reb-change-syntax): Use it.
-
- * man.el (Man-goto-page): Make second argument NOERROR optional.
-
-2005-07-23 Richard M. Stallman <rms@gnu.org>
-
- * man.el (Man-bgproc-sentinel): Check here for failure to find
- any man page in the output, and report the error here.
- (Man-arguments): Make it permanent local.
- (Man-goto-page): New arg NOERROR. Never kill the current buffer.
- (Man-mode): Pass t for NOERROR.
-
- * progmodes/grep.el (grep-error-face): Use font-lock-keyword-face.
- (grep-mode-font-lock-keywords):
- Don't use compilation-...-face for messages that are not file names.
-
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Don't use compilation-...-face for messages that are not file names.
-
-2005-07-22 Juri Linkov <juri@jurta.org>
-
- * startup.el (normal-splash-screen): Update menu name.
-
- * tempo.el (tempo-insert-template): Fix 2005-07-16 change.
-
-2005-07-22 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el: Load term/rxvt if the terminal is actually an
- rxvt terminal.
- (xterm-rxvt-set-background-mode): Remove, not used anymore.
-
- * term/rxvt.el (function-key-map): Use substitute-key-definition
- to bind {C,S,C-S}-{f1-f10}. Add a few missing key bindings.
-
- * term/cygwin.el: New file.
-
-2005-07-22 Kim F. Storm <storm@cua.dk>
-
- * image-file.el (insert-image-file, image-file-yank-handler):
- Fix last change to maintain a (unique) yank-handler on yanked images.
-
-2005-07-22 Eduardo Mu,Aq(Boz <emufer@terra.es> (tiny change)
-
- * dired.el (dired-move-to-filename-regexp): Recognize the B suffix
- of the file size (as in "177B" for 177 bytes). This happens with
- "ls -lh" on FreeBSD.
-
-2005-07-22 Juanma Barranquero <lekktu@gmail.com>
-
- * hilit-chg.el (highlight-changes-global-initial-state)
- (highlight-compare-buffers, hilit-chg-turn-on-maybe)
- (hilit-chg-fixup, highlight-changes-mode):
- Fix typos in docstrings.
- (highlight-changes-global-modes, highlight-changes-rotate-faces):
- Doc fixes.
-
-2005-07-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Never call the
- mode function using `eval-after-load'.
-
-2005-07-21 Kim F. Storm <storm@cua.dk>
-
- * mail/emacsbug.el (report-emacs-bug): Request that backtraces are
- included when reporting an Emacs crash, and tell about the DEBUG file.
-
- * image-file.el (insert-image-file): Add yank-handler.
- (image-file-yank-handler): Yank handler to make unique copies of
- images when they are yanked into a buffer next to each other.
-
-2005-07-21 Juanma Barranquero <lekktu@gmail.com>
-
- * comint.el (comint-use-prompt-regexp, comint-send-input)
- (comint-source-default, comint-extract-string)
- (comint-get-source, comint-word, comint-completion)
- (comint-source, comint-prompt-read-only, comint-update-fence):
- Fix typos in docstrings.
- (comint-use-prompt-regexp-instead-of-fields, comint-kill-output):
- Declare with define-obsolete-*-alias macros.
- (comint-previous-matching-input-from-input)
- (comint-next-matching-input-from-input)
- (comint-previous-matching-input, comint-next-matching-input)
- (comint-forward-matching-input):
- Improve argument/docstring consistency.
-
- * desktop.el (desktop-clear-preserve-buffers-regexp):
- Also preserve the *server* buffer.
-
- * simple.el (clone-indirect-buffer): Doc fix.
- (fixup-whitespace, just-one-space)
- (backward-delete-char-untabify, lambda): "?\ " -> "?\s".
- (next-error, next-error-highlight)
- (next-error-highlight-no-select, next-error-last-buffer)
- (next-error-buffer-p, next-error-find-buffer, next-error)
- (previous-error, next-error-no-select, previous-error-no-select)
- (open-line, split-line, minibuffer-prompt-width, kill-new)
- (binary-overwrite-mode): Fix typos in docstrings.
- (set-fill-column): Fix typo in message.
-
- * skeleton.el (skeleton-proxy-new): Doc fix.
-
- * strokes.el (strokes-load-hook): Doc fix.
- (strokes-grid-resolution, strokes-get-grid-position)
- (strokes-renormalize-to-grid, strokes-read-stroke)
- (strokes-read-complex-stroke, strokes-file, strokes-last-stroke)
- (strokes-global-map): Fix typos in docstrings.
- (strokes-help): Doc fix. Fix help message and pass it through
- `substitute-command-keys'.
-
- * tempo.el (tempo-insert-prompt, tempo-interactive)
- (tempo-show-completion-buffer, tempo-tags, tempo-match-finder)
- (tempo-insert-string-functions, tempo-local-tags)
- (tempo-define-template, tempo-insert-template)
- (tempo-insert-prompt-compat, tempo-is-user-element)
- (tempo-insert-mark, tempo-find-match-string, tempo-complete-tag):
- Fix typos in docstrings.
-
- * vcursor.el (vcursor-other-window, vcursor-bind-keys)
- (vcursor-key-bindings, vcursor-use-vcursor-map)
- (vcursor-find-window, vcursor-scroll-down)
- (vcursor-disable, vcursor-beginning-of-buffer)
- (vcursor-end-of-buffer): Fix typos in docstrings.
- (vcursor-relative-move, vcursor-get-char-count):
- Improve argument/docstring consistency.
-
- * version.el: "?\ " -> "?\s".
-
- * wid-edit.el (widget-default-create, widget-after-change)
- (widget-default-format-handler, widget-checklist-add-item)
- (widget-radio-add-item, widget-choose, widget-specify-secret)
- (widget-field-value-create, widget-field-value-get)
- (widget-editable-list-format-handler)
- (widget-editable-list-entry-create, widget-group-value-create)
- (widget-documentation-link-add)
- (widget-documentation-string-value-create): "?\ " -> "?\s".
- (widget-convert-text): Doc fix.
- (widget-narrow-to-field, widget-field-find)
- (widget-url-link-action, widget-emacs-library-link-action)
- (widget-color-notify): Fix typos in docstrings.
-
- * w32-fns.el (w32-shell-name): Use `bound-and-true-p'.
- (x-select-text, set-w32-system-coding-system)
- (w32-add-charset-info): Fix typos in docstrings.
-
- * emulation/cua-base.el (cua-mode, cua-enable-register-prefix)
- (cua-enable-cua-keys, cua-use-hyper-key)
- (cua-virtual-rectangle-edges): Fix typos in docstrings.
- (cua--M/H-key, cua--init-keymaps): "?\ " -> "?\s".
-
- * net/tramp.el (tramp-handle-load): Fix typo in error message.
-
- * emacs-lisp/re-builder.el (regexp-builder): Declare with
- `defalias' instead of faking it.
-
- * eshell/em-ls.el (eshell-ls-decorated-name): Doc fix.
- (eshell-ls-missing, eshell-ls-dired-initial-args)
- (eshell-ls-use-in-dired): Fix typos in docstrings.
-
-2005-07-20 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-mode): Improve doc string.
-
-2005-07-20 Juanma Barranquero <lekktu@gmail.com>
-
- * abbrev.el (expand-region-abbrevs): Doc fix.
- (inverse-add-mode-abbrev, inverse-add-global-abbrev):
- Improve argument/docstring consistency.
-
- * arc-mode.el (archive-get-descr, archive-alternate-display):
- Doc fixes.
- (archive-l-e): Improve argument/docstring consistency.
- (archive-tmpdir, archive-unixdate, archive-unixtime)
- (archive-chmod-entry): Fix typos in docstrings.
- (archive-unflag, archive-unflag-backwards)
- (archive-unmark-all-files): "?\ " -> "?\s".
-
- * buff-menu.el (Buffer-menu-unmark): Doc fix.
- (Buffer-menu-not-modified, Buffer-menu-execute)
- (Buffer-menu-toggle-read-only, Buffer-menu-buffer+size)
- (list-buffers-noselect, Buffer-menu-select): "?\ " -> "?\s".
-
- * composite.el (compose-string, encode-composition-rule)
- (compose-last-chars): Fix typos in docstrings.
-
- * desktop.el (desktop-enable, desktop-basefilename):
- Declare with `define-obsolete-variable-alias'.
- (desktop-internal-v2s): Don't quote keywords.
- (desktop-clear): "?\ " -> "?\s".
-
- * dired.el (dired-align-file, dired-flag-backup-files)
- (dired-change-marks, dired-unmark-all-files): "?\ " -> "?\s".
- (dired-listing-switches, dired-ls-F-marks-symlinks)
- (dired-dwim-target, dired-load-hook, dired-mode-hook)
- (dired-directory, dired-faces, dired, dired-revert)
- (dired-mode, dired-summary, dired-view-file)
- (dired-copy-filename-as-kill, dired-delete-file)
- (dired-no-confirm, dired-unmark-all-marks)
- (dired-sort-by-date-regexp, dired-sort-by-name-regexp)
- (dired-sort-inhibit, dired-sort-other): Fix typos in docstrings.
- (dired-undo, dired-get-file-for-visit, dired-sort-toggle-or-edit):
- Fix typos in message strings.
-
- * dired-x.el (virtual-dired): Declare with `defalias'.
- (dired-mark-unmarked-files, dired-local-variables-file)
- (dired-omit-here-always): Doc fix.
- (dired-omit-mode, dired-find-subdir)
- (dired-enable-local-variables, dired-clean-up-buffers-too)
- (dired-extra-startup, dired-mark-extension, dired-jump)
- (dired-jump-other-window, dired-omit-localp, dired-virtual-mode)
- (dired-smart-shell-command, dired-guess-shell-alist-user)
- (dired-man, dired-initial-position, dired-x-hands-off-my-keys)
- (dired-x-bind-find-file, dired-x-submit-report):
- Fix typos in docstrings.
- (dired-mark-unmarked-files): "?\ " -> "?\s".
-
- * dirtrack.el (dirtrack-list): Fix typos in docstring.
-
- * faces.el (describe-face): "?\ " -> "?\s".
- (read-all-face-attributes, read-face-font, modify-face)
- (face-attr-construct, italic): Fix typos in docstrings.
- (frame-update-face-colors): Declare with
- `define-obsolete-function-alias'.
-
- * files.el (find-file-noselect, recode-file-name): Doc fixes.
- (insert-directory, kill-some-buffers): "?\ " -> "?\s".
- (magic-mode-alist, buffer-file-numbers-unique)
- (write-file-functions, get-free-disk-space):
- Fix typos in docstrings.
- (find-file-not-found-hooks, find-file-hooks, write-file-hooks)
- (write-contents-hooks, write-file-hooks):
- Declare with `define-obsolete-variable-alias'.
-
- * forms-d2.el (arch-rj): Fix typo in docstrings.
- (arch-tocol): Likewise. "?\ " -> "?\s".
-
- * frame.el (set-frame-font, cursor-in-non-selected-windows):
- Fix typo in docstring.
- (set-screen-width, set-screen-height): Delete redundant info in
- doctrings.
- (new-frame, screen-height, screen-width): Declare with
- `define-obsolete-function-alias'.
- (delete-frame-hook, blink-cursor): Declare with
- `define-obsolete-variable-alias'.
-
- * paths.el (prune-directory-list): Fix typos in docstring.
-
- * pcvs-util.el (cvs-flags-query, cvs-strings->string)
- (cvs-prefix-get): Fix typos in docstrings.
-
- * ps-print.el (ps-extend-face-list, ps-extend-face)
- (ps-print-background-image): Fix typos in docstrings.
- (ps-default-fg, ps-default-bg): Doc fixes.
-
- * s-region.el (s-region-bind): Doc fix.
- (s-region-move-p1, s-region-move-p2): Fix typos in docstrings.
-
- * textmodes/org.el (org-table-formula-substitute-names)
- (org-table-get-vertical-vector): Doc fixes.
- (org-table-recalculate): Remove unused argument to `message'.
-
-2005-07-19 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-table-column-names)
- (org-table-column-name-regexp)
- (org-table-named-field-locations): New variables.
- (org-archive-subtree): Protect `this-command' when calling
- `org-copy-subtree' and `org-cut-subtree', to avoid appending to
- the kill buffer.
- (org-complete): Remove fixed-formula completion.
- (org-edit-formulas-map): New variable.
- (org-table-edit-formulas): New command.
- (org-finish-edit-formulas, org-abort-edit-formulas)
- (org-show-variable, org-table-get-vertical-vector): New functions.
- (org-table-maybe-eval-formula): Handle `:=' fields.
- (org-table-get-stored-formulas, org-table-store-formulas)
- (org-table-get-formula, org-table-modify-formulas)
- (org-table-replace-in-formulas): Handle named field formulas.
- (org-table-get-specials): Store locations of named fields.
-
-2005-07-19 Juri Linkov <juri@jurta.org>
-
- * progmodes/grep.el (grep-regexp-alist)
- (grep-mode-font-lock-keywords, grep-process-setup):
- Use default GNU grep match color "01;31m" instead of "01;41m".
- (grep-regexp-alist, grep-mode-font-lock-keywords):
- Use `\\[[0-9]*m' instead of `\\[00m'.
- (grep-regexp-alist): Move `\\(?:\033\\[K\\)?' from sgr_end to
- sgr_start where its handling is more important. Use the real
- length of sgr_start instead of constant 8.
- (grep-mode-font-lock-keywords): Don't delete `\\(?:\033\\[K\\)?'
- specially. Delete all remaining escape sequences.
- (grep-process-setup): Set "GREP_COLORS" for GNU grep 2.5.1-cvs.
- (grep-regexp-alist): Make hyperlink only for binary file name
- instead of the whole line.
- (grep-mode-map): Bind `backtab' to `compilation-previous-file'.
- (grep-mode): Add autoload.
-
- * emacs-lisp/find-func.el (find-function-regexp):
- Add `define-compilation-mode'.
-
-2005-07-19 Juri Linkov <juri@jurta.org>
-
- * compare-w.el (compare-ignore-whitespace, compare-windows-sync)
- (compare-windows-sync-string-size, compare-windows-recenter)
- (compare-windows-highlight, compare-windows): Add version 22.1.
- (compare-windows) <defface>: Inherit from lazy-highlight instead
- of duplicating its default value.
-
- * cus-edit.el (custom-mode-map): Bind `C-c C-c' to `Custom-set'.
- (Custom-mode-menu): Use `info' instead of `Info-goto-node'.
-
- * descr-text.el (describe-char): Create link buttons for `charset'
- and `code point'. Add the current input method name with a link
- button to `to input' field. Print face names of display table
- characters in `The display table entry is displayed by' section
- instead of printing face-id in the `display' field.
- Guess hardcoded faces and create a link button for them.
- Skip empty fields when calculating max-width.
- Treat `widget-create' specially while inserting strings from the
- collected field list.
- (describe-char-after): Made obsolete in version 22.1, not 21.5.
-
- * diff-mode.el (diff-file-header): Change foreground color from
- yellow to green on light backgrounds.
- (diff-context): Inherit from `shadow' only for color/grayscale
- with more than 88 colors.
- (diff-indicator-removed, diff-indicator-added)
- (diff-indicator-changed): New faces.
- (diff-font-lock-keywords): Use new faces. Regroup rules.
- Add "^---$" for `normal' diff format. Fontify `#' lines with
- font-lock-comment-delimiter-face and font-lock-comment-face.
- Add `#' to ^[^...] in the rule for `diff-context-face'.
-
- * faces.el (mode-line-highlight): Replace RoyalBlue4 with
- a button-like box. Inherit from `highlight' on low colors.
- (shadow): Use shades of gray only for color/grayscale with
- more than 88 colors. Use green for light backgrounds with
- 8 colors, and yellow for dark backgrounds with 8 colors.
-
- * font-lock.el (font-lock-regexp-grouping-backslash):
- Don't inherit from escape-glyph (use bold for all cases).
-
- * info.el (info-xref-visited): Use light foreground color `violet'
- for dark backgrounds instead of dark color `magenta3'.
- (info-title-1): Use `yellow' color for dark backgrounds.
-
- * isearch.el (isearch): Use not-too-dark magenta3 instead of
- too-light magenta2.
-
- * replace.el (match): Use slightly more light RoyalBlue3 instead
- of dark RoyalBlue4.
-
- * wid-edit.el (widget-inactive): Inherit from `shadow'.
-
-2005-07-19 Juanma Barranquero <lekktu@gmail.com>
-
- * novice.el (disabled-command-hook): Declare it with
- `define-obsolete-variable-alias'.
-
- * desktop.el (desktop-enable, desktop-buffer-modes-to-save)
- (desktop-buffer-misc-functions, desktop-buffer-handlers)
- (desktop-load-default): Add release to obsolescence info.
- (desktop-globals-to-clear, desktop-buffer-mode-handlers)
- (desktop-append-buffer-args, desktop-read):
- Fix typos in docstrings.
- (desktop-kill): Fix typo in message.
- (desktop-save): Doc fix.
-
-2005-07-19 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-cmd.el (viper-escape-to-state): Bug fix.
- (viper-envelop-ESC-key): Change the definition of fast
- keysequence so it'll work with keyboard macros.
-
- * ediff.el (ediff-patch-buffer): Change the docstring.
-
-2005-07-19 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (select-safe-coding-system): Try to
- use an auto-coding (if any) before anything else. If the found
- auto-coding is invalid, show a warning message.
-
- * international/mule.el (find-auto-coding): New function created
- by modifying the body of set-auto-coding.
- (set-auto-coding): Use find-auto-coding to find a coding.
-
-2005-07-18 Richard M. Stallman <rms@gnu.org>
-
- * allout.el (allout-isearch-expose): Use isearch-mode-end-hook-quit,
- not isearch-mode-end-hook-error.
- (allout-before-change-protect): Fix error message.
-
-2005-07-18 Juri Linkov <juri@jurta.org>
-
- * allout.el (allout-mode):
- * calculator.el (calculator-copy):
- * custom.el (custom-known-themes):
- * dired.el (dired-desktop-buffer-misc-data)
- (dired-restore-desktop-buffer):
- * dired-x.el (dired-omit-marker-char):
- * files.el (basic-save-buffer):
- * font-core.el (font-lock-mode):
- * calendar/calendar.el (calendar-goto-hebrew-date)
- (calendar-goto-coptic-date, calendar-goto-ethiopic-date)
- (calendar-goto-persian-date):
- * language/ethio-util.el (ethio-sera-to-fidel-region):
- * textmodes/picture.el (picture-mode):
- Delete duplicate duplicate words.
-
-2005-07-18 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-mode-map): Remove key bindings for regexp
- chars * ? } |.
- (isearch-fallback): Don't call `isearch-process-search-char'.
- (isearch-*-char, isearch-}-char, isearch-|-char): Remove functions.
- (isearch-process-search-char): Call `isearch-fallback' for regexp
- chars * ? } |.
- (isearch-return-char): Make obsolete with `make-obsolete' instead
- of simply documenting it as obsolete in the docstring.
- (isearch-fallback): Refill docstring.
-
- * international/isearch-x.el
- (isearch-process-search-multibyte-characters): Remove unneeded
- `concat'. Add intermediate values to `junk-hist' instead of
- `minibuffer-history'. Test the length of `str'.
-
-2005-07-18 Juanma Barranquero <lekktu@gmail.com>
-
- * allout.el (allout-resolve-xref): Fix typos in error strings.
- (allout-before-change-protect): Remove unneeded `concat'.
-
- * array.el (array-mode, array-reconfigure-rows)
- (untabify-backward): Fix typos in docstrings.
- (array-reconfigure-rows): Use `insert-buffer-substring', not
- `insert-buffer'.
-
- * calendar/icalendar.el (icalendar--get-unfolded-buffer):
- * progmodes/ada-mode.el (ada-make-body):
- Use `insert-buffer-substring' and `goto-char', not `insert-buffer'.
-
- * dired.el (dired-log):
- * tar-mode.el (tar-subfile-save-buffer):
- * play/zone.el (zone-pgm-stress-destress):
- Use `insert-buffer-substring', not `insert-buffer'.
-
-2005-07-17 Simon Josefsson <jas@extundo.com>
-
- * mail/smtpmail.el (smtpmail-auth-supported): Prefer PLAIN over LOGIN.
-
-2005-07-16 Jose E. Marchesi <jemarch@gnu.org>
-
- * mail/smtpmail.el (smtpmail-auth-supported): Add plain auth method.
- (smtpmail-try-auth-methods): Add AUTH PLAIN dialog.
-
-2005-07-17 Kim F. Storm <storm@cua.dk>
-
- * ido.el (dired-other-window): Add ido property.
-
-2005-07-16 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/bytecomp.el (byte-compile-maybe-guarded):
- Fix typo in docstring.
- (byte-compile-interactive-only-functions): Add `insert-buffer' and
- `insert-file-literally'.
-
- * emacs-lisp/edebug.el (def-edebug-form-spec): Add obsolescence
- info and delete redundant message. Doc fix.
- (edebug-install-custom-print-funcs, edebug-reset-print-funcs)
- (edebug-uninstall-custom-print-funcs): Define as obsolete aliases.
-
-2005-07-16 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/bytecomp.el (byte-compile-and-recursion): New function.
- (byte-compile-and): Use byte-compile-and-recursion.
- (byte-compile-or-recursion): New function.
- (byte-compile-or): Use that.
- (byte-compile-if): Guard the else-clause too.
- (byte-compile-maybe-guarded): Handle (not (featurep 'emacs)).
-
- * isearch.el (isearch-mode-end-hook-quit): New variable.
- (isearch-done): Bind it.
- (isearch-mode-end-hook): Doc fix.
-
- * allout.el (allout-isearch-did-quit): Variable deleted.
- (allout-real-isearch-abort): Function name no longer used.
- (allout-mode): Do allout-enwrap-isearch whenever feature is wanted.
- (allout-isearch-rectification): isearch-mode always exists.
- Don't set allout-isearch-did-quit.
- (allout-isearch-expose): Check isearch-mode-end-hook-error, not
- allout-isearch-did-quit.
- (allout-enwrap-isearch): Just add the hook.
- (allout-isearch-abort): Function deleted.
- (allout-pre-command-business): Avoid warning.
-
- * progmodes/pascal.el (pascal-outline-map): Use fboundp, not boundp.
- Correctly avoid warnings.
- (pascal-outline): Likewise.
-
- * progmodes/f90.el (f90-abbrev-start): Avoid warning.
-
- * progmodes/asm-mode.el (asm-comment): Use with-no-warnings.
-
- * play/tetris.el (tetris-mode): Avoid warning.
-
- * play/snake.el (snake-mode): Avoid warning.
-
- * play/gamegrid.el (gamegrid-shared-game-dir): Add defvar.
- (gamegrid-set-display-table): Avoid warning.
- (gamegrid-set-timer): Likewise.
- (gamegrid-make-mono-tty-face): Use set-face-inverse-video-p.
- (gamegrid-add-score-with-update-game-score-1): Take FILE
- as argument.
- (gamegrid-add-score-with-update-game-score): Pass that argument.
- Rename have-shared-game-dir to gamegrid-shared-game-dir.
-
- * net/eudc-hotlist.el (eudc-hotlist-mode): Avoid warnings.
-
- * net/eudc-bob.el (eudc-jump-to-event): Avoid warning.
- (eudc-bob-display-jpeg, eudc-bob-can-display-inline-images): Likewise.
-
- * mail/uce.el (uce-reply-to-uce): Replace beginning-of-buffer
- and insert-file.
-
- * mail/supercite.el (sc-no-blank-line-or-header): Avoid warning.
- (sc-ask): Avoid warnings.
-
- * eshell/em-hist.el (eshell-rebind-keys-alist): Add defvar.
- (eshell-hist-initialize): Use that var the natural way.
-
- * emulation/viper-init.el (viper-activate-input-method): Avoid warning.
-
- * emacs-lisp/re-builder.el (reb-cook-regexp):
- Avoid warning calling lre-compile-string.
- (reb-color-display-p): Avoid warning.
-
- * calculator.el (calculator-last-input): Guard uses
- of event-key and key-press-event-p.
- (event-key, key-press-event-p): Delete definitions.
-
- * emacs-lisp/find-gc.el (find-gc-unsafe-list)
- (find-gc-source-directory, find-gc-subrs-callers)
- (find-gc-noreturn-list, find-gc-source-files)
- (find-gc-subrs-called): Vars renamed and defvar'd.
-
- * emacs-lisp/checkdoc.el (checkdoc-make-overlay)
- (checkdoc-overlay-put, checkdoc-delete-overlay)
- (checkdoc-overlay-start, checkdoc-overlay-end)
- (checkdoc-mode-line-update, checkdoc-char=):
- Define such that compiler knows they are defined.
- (checkdoc-call-eval-buffer): Delete. Use eval-buffer directly.
- (checkdoc-read-event): Delete. Use read-event directly.
-
- * whitespace.el (whitespace-make-overlay)
- (whitespace-overlay-put, whitespace-delete-overlay)
- (whitespace-overlay-start, whitespace-overlay-end):
- Define such that compiler knows they are defined.
- (whitespace): Move conditional inside.
-
- * tempo.el (tempo-insert-template): Suppress warning.
-
- * ediff-diff.el (longlines-mode): Add defvar.
-
-2005-07-16 Gary Howell <g1howell-list@yahoo.com> (tiny change)
-
- * server.el: Bind "C-x #" in a way that works even if C-x is
- redefined to a command key, not a prefix key.
-
-2005-07-16 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net> (tiny change)
-
- * emacs-lisp/cl-macs.el (cl-make-type-test): Defer evaluation of
- cl-make-type-test till execution time.
-
-2005-07-16 Markus Rost <rost@math.uni-bielefeld.de>
-
- * dired-x.el (dired-do-relsymlink-regexp): Add missing optional
- arg ARG and use it.
-
-2005-07-16 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net> (tiny change)
-
- * emacs-lisp/cl-macs.el (cl-make-type-test): Add `atom' type.
-
-2005-07-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Avoid constructing
- a defcustom with two :set or :type keywords.
-
-2005-07-15 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/lisp-mode.el (emacs-lisp-mode-syntax-table):
- Don't give ^M comment-end syntax.
-
-2005-07-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-update, gdb-var-update-handler):
- Don't consider gdbmi (gdb-mi.el has its own update functions).
- (gdb-var-delete): Make it work for gdbmi as well.
- (gdb-speedbar-expand-node): Move var-update here for gdbmi.
-
- * progmodes/gud.el (etags, sdb): Only require etags when needed.
- (gud-speedbar-menu-items): Correct logic for enabling items.
-
-2005-07-15 Kim F. Storm <storm@cua.dk>
-
- * ido.el: Fix commentary.
- (ido-define-mode-map): Move ido-next-work-file to C-M-o.
- Use with-no-warnings around ffap-guesser.
- (ido-file-internal, ido-read-file-name, ido-read-directory-name):
- Let bind minibuffer-completing-file-name to t.
-
-2005-07-15 Juanma Barranquero <lekktu@gmail.com>
-
- * startup.el (site-run-file, keyboard-type): Doc fixes.
- (command-line): Check for "--basic-display" argument; also for
- "--quick", not "--bare-bones" (which was renamed).
- (fancy-splash-text): Add missing item "Getting New Versions".
- (normal-splash-screen): Fix typos and improve consistency with
- `fancy-splash-text'. Update copyright year.
-
- * hexl.el (hexl-mode-map): Recognize also `ehelp-command' as a
- valid binding for `help-char'.
-
- * emacs-lisp/derived.el (derived-mode-hook-name): Doc fix.
-
-2005-07-14 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (term-mode): Disable cua-mode for term buffers.
-
-2005-07-14 Juanma Barranquero <lekktu@gmail.com>
-
- * add-log.el (add-log-mailing-address, change-log-merge):
- Doc fixes.
- (change-log-get-method-definition): Fix typo in docstring.
-
-2005-07-14 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el:
- (cua--pre-command-handler-1, cua--pre-command-handler)
- (cua--post-command-handler-1, cua--post-command-handler):
- Split in two. Check (buffer local) value of cua-mode.
- (cua-selection-mode): New command.
-
-2005-07-13 Luc Teirlinck <teirllm@auburn.edu>
-
- * custom.el (custom-initialize-safe-set)
- (custom-initialize-safe-default): Doc fixes.
-
- * frame.el (blink-cursor-mode): Use `custom-initialize-safe-default'
- and simplify :init-value again.
-
- * tooltip.el (tooltip-mode): Use `custom-initialize-safe-default'
- and simplify :init-value again. Delete autoload.
-
- * startup.el (command-line): Use `custom-reevaluate-setting' again
- for tooltip-mode.
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Avoid constructing
- a defcustom with two :initialize keywords.
-
-2005-07-13 Juanma Barranquero <lekktu@gmail.com>
-
- * allout.el (my-mark-marker, allout-isearch-prior-pos)
- (allout-unprotected, allout-undo-aggregation, allout-snug-back)
- (allout-post-command-business, allout-flag-region)
- (isearch-reenable-font-lock, allout-yank)
- (allout-insert-latex-header, allout-insert-latex-trailer)
- (allout-latex-verbatim-quote-curr-line, allout-latexify-exposed)
- (allout-latex-verb-quote): Fix typos in docstrings.
- (allout-enwrap-isearch, regexp-sans-escapes): Doc fixes.
- (allout-unprotected, allout-prefix-data):
- Improve argument/docstring consistency.
- (allout-chart-subtree): Fix argument spec.
- (allout-open-topic): Rename `use_sib_bullet' argument to
- `use-sib-bullet'. Doc fix.
-
- * whitespace.el (whitespace-check-buffer-leading)
- (whitespace-check-buffer-trailing)
- (whitespace-check-buffer-indent)
- (whitespace-check-buffer-spacetab)
- (whitespace-check-buffer-ateol, whitespace-highlighted-space)
- (whitespace-check-leading-whitespace)
- (whitespace-check-trailing-whitespace)
- (whitespace-check-spacetab-whitespace)
- (whitespace-check-indent-whitespace)
- (whitespace-check-ateol-whitespace, whitespace-abort-on-error)
- (whitespace-modes): Fix typos in docstrings.
- (defgroup, defcustom): Doc fixes.
-
- * winner.el (winner-mode, winner-boring-buffers)
- (winner-pending-undo-ring): Doc fixes.
- (winner-ring): Remove unneeded `progn'.
- (winner-equal): `defsubst' it.
- (winner-redo): Fix message.
-
-2005-07-13 Kim F. Storm <storm@cua.dk>
-
- * simple.el (line-move-1): Always use vertical-motion to
- do the last (or only) line move to ensure some movement.
- Undo 2005-06-23 change--don't check for overlays.
-
-2005-07-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (ccl-encode-mac-roman-font)
- (ccl-encode-mac-centraleurroman-font)
- (ccl-encode-mac-cyrillic-font, ccl-encode-mac-symbol-font):
- (ccl-encode-mac-dingbats-font): Remove check for ASCII.
- Change charset-id boundary of dimension to ?\xef.
- (mac-char-fontspec-list): New constant.
- (fontset-add-mac-fonts): Use it. Accept non-string `base-family'
- argument. Nil uses itself as family in font-spec. Previous
- behavior for nil is now provided by non-nil non-string argument.
- All callers changed. Add font-specs for Mac fonts to
- "fontset-default" unless iso8859-1 fonts are installed.
-
-2005-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/sh-script.el (sh-get-indent-info): Only indent
- a continuation line if the \ is preceded by SPC or TAB.
- (sh-get-indent-info): Simplify.
- (sh-mark-init, sh-learn-buffer-indent, sh-add-completer):
- Use with-current-buffer.
-
- * font-lock.el (font-lock-fontify-keywords-region): Avoid inf-loops
- when the matched text is empty.
-
-2005-07-12 Luc Teirlinck <teirllm@auburn.edu>
-
- * startup.el (command-line): Revert to previous handling of
- tooltip-mode. Explain in comment why the complexity is needed.
-
- * tooltip.el (tooltip-mode): Revert to previous implementation of
- its defcustom.
-
- * frame.el (blink-cursor-mode): Revert to previous implementation
- of its defcustom. Update comment.
-
-2005-07-12 Lars Hansen <larsh@soem.dk>
-
- * desktop.el: Update e-mail address.
-
-2005-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-services-mail-selection)
- (mac-services-mail-to): New functions.
- (mac-application-menu-map): Bind them.
-
-2005-07-12 wulei <milton@wulei.net> (tiny change)
-
- * progmodes/gdb-ui.el: Add note about buffering with Windows.
-
-2005-07-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * custom.el (custom-reevaluate-setting): Doc fix.
-
-2005-07-11 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-embedded-announce-formula-alist)
- (calc-embedded-open-close-plain-alist)
- (calc-embedded-open-close-mode-alist): Add checks for additional
- major modes (due to Robert J. Chassell <bob@rattlesnake.com>).
-
-2005-07-11 Juanma Barranquero <lekktu@gmail.com>
-
- * custom.el (custom-enable-theme): Don't add theme to
- `custom-enabled-themes' with `push' because there is no
- setf-method for `delq'.
-
-2005-07-11 Richard M. Stallman <rms@gnu.org>
-
- * custom.el (custom-declare-variable): Doc fix.
-
- * dired-aux.el (dired-compare-directories): Remove "." and ".."
- from the alists.
-
- * emacs-lisp/edebug.el (edebug-slow-after, edebug-slow-before):
- Do nothing if edebug-active.
-
- * emacs-lisp/edebug.el (edebug-enter): Don't with-timeout-suspend here.
- (edebug-display): Do it here instead.
-
-2005-07-10 Richard M. Stallman <rms@gnu.org>
-
- * cus-face.el (custom-theme-set-faces): Make it work.
- (custom-reset-faces): Doc fix.
- (custom-theme-reset-internal-face, custom-theme-face-value):
- Functions deleted.
-
- * custom.el (custom-push-theme): Maintain list of the settings
- of a given theme in its theme-settings property.
- Maintain position of old settings in the theme-value
- or theme-face property.
- (custom-enabled-themes): New variable.
- (custom-theme-enabled-p): New function.
- (provide-theme): Update custom-enabled-themes.
- Disable and reenable the `user' theme.
- (require-theme): Doc fix.
- (custom-do-theme-reset, custom-remove-theme): Functions deleted.
- (custom-theme-value, custom-theme-variable-value): Likewise.
- (custom-theme-reset-internal): Likewise.
- (custom-theme-load-themes): Fix bugs and use custom-disable-theme.
- (custom-enable-theme, custom-disable-theme): New functions.
- (custom-variable-theme-value, custom-face-theme-value): Likewise.
- (custom-theme-recalc-variable, custom-theme-recalc-face): Likewise.
- (custom-theme-reset-variables): Simplify.
- (deftheme, custom-declare-theme, custom-make-theme-feature):
- Definitions moved.
-
-2005-07-10 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el (longlines-show-region)
- (longlines-unshow-hard-newlines): Recognize hard newlines by
- non-nil hard property, instead of t.
-
-2005-07-10 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * emulation/viper-cmd.el (viper--key-maps): New variable.
- (viper-normalize-minor-mode-map-alist): Use viper--key-maps and
- emulation-mode-map-alists.
- (viper-envelop-ESC-key): Use viper-subseq.
- (viper-search-forward/backward/next): Disable debug-on-error.
-
- * emulation/viper-keym.el (viper-toggle-key, viper-quoted-insert-key)
- (viper-ESC-key): New defcustoms.
-
- * emulation/viper-macs.el (ex-map-read-args): Use viper-subseq.
-
- * emulation/viper-util.el (viper-key-to-emacs-key): Use viper-subseq.
- (viper-subseq): Copy of subseq from cl.el.
-
- * emulation/viper.el (viper-go-away, viper-set-hooks): Use
- emulation-mode-map-alists, advise self-insert-command, add-minor-mode.
-
- * emulation/viper-mous.el (viper-current-frame-saved): Use defvar.
-
- * emulation/viper-init.el: Get rid of -face in face names.
-
- * ediff-diff.el (ediff-extract-diffs, ediff-extract-diffs3):
- Make it work with longlines mode.
-
- * ediff-mult.el (ediff-meta-mode-hook): New variable.
-
- * ediff-ptch.el (ediff-file-name-sans-prefix): Quote regexp.
-
- * ediff-init.el: Get rid of -face in face names.
-
-2005-07-10 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/edebug.el (edebug-enter): Call with-timeout-suspend
- and with-timeout-unsuspend.
-
- * emacs-lisp/debug.el (debug): Call with-timeout-suspend
- and with-timeout-unsuspend.
-
- * emacs-lisp/timer.el (with-timeout-timers): New variable.
- (with-timeout): Bind that variable to record timers.
- (with-timeout-suspend, with-timeout-unsuspend): New functions.
-
- * emacs-lisp/debug.el (debug-help-follow): New function.
- (debugger-mode-map): Use that instead of help-follow.
- (debugger-setup-buffer): Use eval-buffer-list
- to handle eval-buffer frames.
-
-2005-07-10 N. Raghavendra <raghu@mri.ernet.in> (tiny change)
-
- * timezone.el (timezone-parse-date): Change first regexp
- so it will not mistakenly match dates with no time zone.
-
-2005-07-10 Jeff Dwork <jeff.dwork@amd.com> (tiny change)
-
- * facemenu.el (facemenu-read-color): Do case-insensitive matching.
-
-2005-07-10 Luc Teirlinck <teirllm@auburn.edu>
-
- * custom.el (custom-initialize-safe-set)
- (custom-initialize-safe-default): New functions.
-
- * frame.el (blink-cursor-mode): Use `custom-initialize-safe-default'
- and simplify :init-value.
-
- * tooltip.el (tooltip-mode): Use `custom-initialize-safe-default'
- and simplify :init-value. Delete obsolete comment.
-
- * startup.el (command-line): Use `custom-reevaluate-setting' to
- handle `tooltip-mode'. Delete obsolete comment.
-
- * files.el (set-visited-file-name): Avoid calling
- `file-name-nondirectory' with a nil argument.
-
-2005-07-09 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/debug.el (debugger-setup-buffer): When eval-buffer
- was called with nil for the buffer, handle the read position right.
- Handle read position for eval-region, too.
-
-2005-07-09 Juri Linkov <juri@jurta.org>
-
- * fringe.el (fringe-mode): Add period in docstring.
- (fringe-query-style): Build prompt depending on `all-frames' arg.
-
- * dired.el (dired-marker-char): Avoid quotations for `do' and `mark'
- to not create links to unrelated functions in the Help buffer.
-
- * progmodes/compile.el (compilation-mode-hook, compilation-mode):
- Doc fix.
-
- * simple.el (next-error-hook): New variable.
- (next-error): Use it. Doc fix.
-
- * textmodes/ispell.el (ispell-command-loop): Add current
- dictionary name and program name to mode-line-format.
- (ispell-region, ispell-process-line): Add current dictionary name
- and program name to messages.
-
-2005-07-08 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-embedded-announce-formula-alist)
- (calc-embedded-open-close-formula-alist)
- (calc-embedded-open-close-word-alist)
- (calc-embedded-open-close-plain-alist)
- (calc-embedded-open-close-new-formula-alist)
- (calc-embedded-open-close-mode-alist)
- (calc-embedded-new-buffer-hook, calc-embedded-new-formula-hook)
- (calc-embedded-mode-hook): New variables.
-
- * calc/calc-embed.el (calc-embedded-firsttime)
- (calc-embedded-firsttime-buf, calc-embedded-firsttime-formula):
- New variables.
- (calc-do-embedded): Use calc-embedded-firsttime,
- calc-embedded-firsttime-buf and calc-embedded-firsttime-formula to
- determine whether or not to run hooks.
- (calc-embedded-make-info): Set calc-embedded-firsttime-buf and
- calc-embedded-firsttime-formula appropriately.
- Set calc-embedded delimiter variables according to mode.
-
-2005-07-08 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/checkdoc.el (checkdoc-proper-noun-list):
- Check for "emacs", etc., as entire symbol, not just as word.
- (checkdoc-file-comments-engine): Use regexp-quote on FN.
-
- * files.el (set-visited-file-name): Report the error
- for "empty filename" earlier.
- (kill-some-buffers): Ignore buffers already dead.
-
- * fringe.el (fringe-mode): Doc fix.
-
- * emacs-lisp/bytecomp.el (byte-compile-maybe-guarded):
- Check for (featurep 'xemacs) and turn off warnings in what it guards.
- Use unwind-protect to ensure byte-compile-unresolved-functions
- is updated.
-
- * whitespace.el (whitespace-buffer-leading-cleanup):
- Simplify w/ skip-chars-forward.
- (whitespace-buffer-trailing-cleanup): Simplify w/ skip-chars-backward.
-
- * mail/rmail.el (rmail-only-expunge): Fix paren error.
- Unconditionally try to leave point at the same old place.
-
-2005-07-08 Ralf Angeli <angeli@iwi.uni-sb.de> (tiny change)
-
- * comint.el (comint-postoutput-scroll-to-bottom)
- (comint-show-maximum-output): Take scroll-margin into consideration.
-
-2005-07-08 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-use-filename-at-point): New choice `guess'.
- (ido-file-internal): Try ffap-guesser if selected.
-
- * ido.el (ido-before-fallback-functions): New hook.
- (ido-buffer-internal, ido-file-internal, ido-read-buffer)
- (ido-read-file-name): Run it.
-
-2005-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/hideif.el (hide-ifdef-use-define-alist): Pass a list of
- strings rather than a list of symbols to the completion function.
-
-2005-07-07 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-units.el (math-apply-units): Change the places in
- which units are simplified.
-
-2005-07-07 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (customize-option, customize-option-other-window):
- Make them handle aliases.
-
- * custom.el (custom-variable-p): Make it recursively follow
- aliases. Mention that in the docstring.
-
-2005-07-07 Richard M. Stallman <rms@gnu.org>
-
- * cus-start.el (exec-path): Use `directory' instead of `file'.
- Fix tag for nil.
-
-2005-07-07 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (occur-rename-buffer): Use `generate-new-buffer' also
- when called non-interactively. Doc fix.
-
-2005-07-07 Lute Kamstra <lute@gnu.org>
-
- * elide-head.el (elide-head-headers-to-hide): Recognize the FSF's
- new address as well.
-
-2005-07-07 Kenichi Handa <handa@m17n.org>
-
- * international/mule.el (make-coding-system):
- Describe `ascii-incompatible' property in the docstring.
- (set-file-name-coding-system): Signal an error if coding-system is
- ascii-incompatible.
- (set-keyboard-coding-system): Likewise.
-
- * international/mule-cmds.el (set-default-coding-systems):
- Don't set default-file-name-coding-system and
- default-keyboard-coding-system if coding-system is ASCII-incompatible.
-
- * international/utf-16.el: Declare that all UTF-16-based coding
- systems are ASCII-incompatible.
-
-2005-07-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el: Require font-lock for displaying errors.
- Used by gdb-ui.el.
-
-2005-07-07 Juanma Barranquero <lekktu@gmail.com>
-
- * hi-lock.el (hi-lock-find-patterns): Protect also against invalid
- values for the pattern lists which are `read'able but not
- `append'able (like symbols).
-
-2005-07-06 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/flymake.el (flymake-float-time): Instead of
- with-no-warnings, test for XEmacs.
- (flymake-replace-regexp-in-string): Test fboundp of replace-in-string
- to avoid warning.
-
-2005-07-06 Juanma Barranquero <lekktu@gmail.com>
-
- * w32-vars.el (w32-fixed-font-alist): Fix typo in `defcustom' tag.
-
-2005-07-05 Lute Kamstra <lute@gnu.org>
-
- * battery.el: Add support for Darwin (with much debugging help
- from Samuel Lauber <sam124@operamail.com>).
- (battery-status-function, battery-echo-area-format)
- (battery-mode-line-format): Add support for pmset on Darwin.
- (battery-load-low, battery-load-critical): New user options.
- (battery-pmset): New function.
-
-2005-07-05 Lute Kamstra <lute@gnu.org>
-
- Update FSF's address in GPL notices.
-
- * textmodes/page-ext.el: Update FSF's address.
-
-2005-07-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/lisp-mode.el (lisp-mode-variables): Prevent adaptive
- filling from using prefix when filling a single-line docstring.
-
- * progmodes/flymake.el: Remove useless eval-when-compile.
-
- * arc-mode.el (archive-lzh-ogm): Reorder save excursion/restriction.
-
-2005-07-04 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/org.el (org-file-apps-defaults-gnu):
- Rename from org-file-apps-defaults-linux.
- (org-default-apps): Don't test system-type for `linux'.
- (org-file-apps): Doc fix.
-
-2005-07-04 David Ponce <david@dponce.com>
-
- * tree-widget.el: Improve header Commentary section.
- (tree-widget) [defgroup]
- (tree-widget-image-enable, tree-widget-themes-directory)
- (tree-widget-theme, tree-widget-image-properties-emacs)
- (tree-widget-image-properties-xemacs, tree-widget-create-image)
- (tree-widget-image-formats, tree-widget-control)
- (tree-widget-empty-control, tree-widget-leaf-control
- (tree-widget-guide, tree-widget-end-guide, tree-widget-no-guide)
- (tree-widget-handle, tree-widget-no-handle, tree-widget-p)
- (tree-widget-keep, tree-widget-after-toggle-functions)
- (tree-widget-open-node, tree-widget-close-node): Doc fix.
- (tree-widget-open-control, tree-widget-close-control): Fix doc and
- :help-echo message.
- (tree-widget-set-theme): Doc fix. Use `string-equal'.
- (tree-widget-image-properties): Doc fix. Clearer implementation.
- (tree-widget--cursors): New constant.
- (tree-widget-lookup-image): New function split from
- `tree-widget-find-image'. Clearer implementation.
- (tree-widget-find-image): Use it.
- (tree-widget-button-keymap): Use `set-keymap-parent'.
- (tree-widget) [define-widget]: Use `widget-children-value-delete'.
- Define the sub-widgets here.
- (tree-widget-node): Check that :node is not a tree-widget.
- (tree-widget-get-super, tree-widget-open-control)
- (tree-widget-close-control, tree-widget-empty-control)
- (tree-widget-leaf-control, tree-widget-guide)
- (tree-widget-end-guide, tree-widget-no-guide, tree-widget-handle)
- (tree-widget-no-handle, tree-widget-value-delete)
- (tree-widget-map): Remove.
- (tree-widget-children-value-save): Doc fix. Simplified.
- (tree-widget-value-create): Update according to previous changes.
-
-2005-07-04 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el: Leading space replaced by TABS.
- (org-recalc-marks, org-table-rotate-recalc-marks)
- (org-table-get-specials): Treat "^" and "_" marks.
- (org-table-justify-field-maybe): Optional argument NEW.
- (org-table-eval-formula): Parsing of the format simplified.
- New modes C,I. Honor the %= parameter in the current table.
- Avoid unnecessary re-align by using the NEW argument to
- `org-table-justify-field-maybe'.
- (org-calc-default-modes): Default for date-format mimicks org-mode.
- (org-agenda, org-timeline): Quote argument in org-agenda-redo-command.
-
-2005-07-03 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-face.el (custom-theme-set-faces): Make it handle face
- aliases whose alias declarations are pre- or autoloaded.
-
-2005-07-04 Juri Linkov <juri@jurta.org>
-
- * faces.el (read-face-name): Put the code for getting a face name
- from the buffer before adding the faces from the `face' property.
- Use `completing-read-multiple' instead of `completing-read'.
- Require `crm'. Add default value and post-process the returned
- list of faces.
-
- * emacs-lisp/crm.el (crm-find-current-element)
- (crm-minibuffer-complete-and-exit): Handle minibuffer prompt.
-
- * emacs-lisp/lisp-mode.el (eval-defun-1):
- * emacs-lisp/edebug.el (edebug-eval-defun):
- Remove unnecessary quotes.
-
-2005-07-04 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/prolog.el (prolog-eof-string): Doc fixes.
- (prolog-indent-level): Fix typo in docstring.
-
- * info.el (Info-history, Info-history-forward)
- (Info-history-list, Info-speedbar-fetch-file-nodes): Doc fixes.
-
- * add-log.el (add-change-log-entry):
- * comint.el (comint-dynamic-list-input-ring)
- (comint-dynamic-list-completions):
- * dabbrev.el (dabbrev-expand):
- * delim-col.el (delimit-columns-rectangle-line):
- * diff-mode.el (diff-context->unified, diff-reverse-direction)
- (diff-unified->context):
- * ediff-init.el (ediff-abbrev-jobname):
- * ediff-mult.el (ediff-replace-session-status-in-meta-buffer)
- (ediff-replace-session-activity-marker-in-meta-buffer):
- * info.el (Info-summary):
- * lpr.el (printify-region):
- * printing.el (pr-create-interface):
- * ps-print.el (ps-print-quote):
- * ses.el (ses-column-widths, ses-print-cell)
- (ses-adjust-print-width, ses-center):
- * shell.el (shell-file-name-quote-list):
- * strokes.el (strokes-read-stroke, strokes-read-complex-stroke)
- (strokes-fill-current-buffer-with-whitespace)
- (strokes-xpm-for-stroke, strokes-list-strokes)
- (strokes-xpm-char-bit-p, strokes-xpm-for-compressed-string):
- * term.el (term-dynamic-list-input-ring)
- (term-dynamic-list-completions):
- * calc/calc.el (math-format-stack-value):
- * emacs-lisp/edebug.el (edebug-display-freq-count):
- * progmodes/delphi.el (delphi-indent-line, delphi-fill-comment)
- (delphi-new-comment-line):
- * progmodes/ebnf2ps.el (ebnf-eps-filename, ebnf-trim-right):
- * progmodes/executable.el (executable-set-magic):
- * progmodes/python.el (inferior-python-mode):
- * progmodes/scheme.el (scheme-mode-syntax-table):
- * progmodes/sh-script.el (sh-maybe-here-document):
- * progmodes/sql.el (sql-copy-column):
- * progmodes/tcl.el (tcl-comment-indent, tcl-quote):
- * textmodes/bibtex.el (bibtex-mode):
- * textmodes/sgml-mode.el (html-imenu-index, sgml-attributes)
- (sgml-auto-attributes):
- * textmodes/table.el (table-insert, table-shorten-cell)
- (table--generate-source-scan-lines, table-delete-row)
- (*table--cell-delete-char, table--spacify-frame)
- (table--horizontally-shift-above-and-below)
- (table--cell-insert-char, table--cell-blank-str)
- (table--fill-region-strictly):
- * textmodes/tex-mode.el (tex-insert-quote, latex-find-indent):
- * textmodes/texinfo.el (texinfo-insert-quote): "?\ " -> "?\s".
-
- * add-log.el (change-log):
- * apropos.el (apropos):
- * comint.el (comint-completion, comint-source):
- * dabbrev.el (dabbrev):
- * delim-col.el (columns):
- * diff-mode.el (diff-mode):
- * ediff.el (ediff):
- * ediff-diff.el (ediff-diff):
- * ediff-init.el (ediff-highlighting, ediff-merge, ediff-hook):
- * ediff-mult.el (ediff-mult):
- * ediff-ptch.el (ediff-ptch):
- * ediff-wind.el (ediff-window):
- * facemenu.el (facemenu):
- * indent.el (indent):
- * info.el (info):
- * jka-cmpr-hook.el (compression, jka-compr):
- * lpr.el (lpr):
- * outline.el (outlines):
- * pcmpl-cvs.el (pcmpl-cvs):
- * pcmpl-rpm.el (pcmpl-rpm):
- * printing.el (printing):
- * ps-print.el (postscript, ps-print, ps-print-horizontal)
- (ps-print-vertical, ps-print-headers, ps-print-font)
- (ps-print-color, ps-print-face, ps-print-n-up, ps-print-zebra)
- (ps-print-background, ps-print-printer, ps-print-page)
- (ps-print-miscellany):
- * ses.el (ses):
- * shell.el (shell, shell-directories, shell-faces):
- * startup.el (initialization):
- * strokes.el (strokes):
- * term.el (term):
- * uniquify.el (uniquify):
- * w32-vars.el (w32):
- * calc/calc.el (calc):
- * emacs-lisp/bytecomp.el (bytecomp):
- * emacs-lisp/cl-indent.el (lisp-indent):
- * emacs-lisp/edebug.el (edebug):
- * emacs-lisp/elp.el (elp):
- * emacs-lisp/testcover.el (testcover):
- * emacs-lisp/trace.el (trace):
- * emulation/viper-ex.el (viper-ex):
- * emulation/viper-mous.el (viper-mouse):
- * mail/mailalias.el (mailalias):
- * mail/supercite.el (supercite, supercite-frames)
- (supercite-attr, supercite-cite, supercite-hooks):
- * net/rcompile.el (remote-compile):
- * net/rlogin.el (rlogin):
- * obsolete/ooutline.el (outlines):
- * progmodes/delphi.el (delphi):
- * progmodes/ebnf2ps.el (postscript, ebnf2ps, ebnf-special)
- (ebnf-except, ebnf-repeat, ebnf-terminal, ebnf-non-terminal)
- (ebnf-production, ebnf-shape, ebnf-displacement, ebnf-syntactic)
- (ebnf-optimization):
- * progmodes/etags.el (etags):
- * progmodes/executable.el (executable):
- * progmodes/idlwave.el (idlwave):
- * progmodes/pascal.el (pascal):
- * progmodes/prolog.el (prolog):
- * progmodes/python.el (python):
- * progmodes/scheme.el (scheme):
- * progmodes/sh-script.el (sh, sh-script):
- * progmodes/sql.el (SQL):
- * progmodes/tcl.el (tcl):
- * textmodes/bibtex.el (bibtex, bibtex-autokey):
- * textmodes/enriched.el (enriched):
- * textmodes/makeinfo.el (makeinfo):
- * textmodes/sgml-mode.el (sgml):
- * textmodes/table.el (table-hooks):
- * textmodes/tex-mode.el (tex-file, tex-run, tex-view):
- * textmodes/texinfo.el (texinfo):
- * textmodes/two-column.el (two-column):
- Finish `defgroup' description with period.
-
- * emacs-lisp/cl-indent.el (lisp-indent-maximum-backtracking):
- * eshell/esh-var.el (eshell-var):
- * progmodes/vhdl-mode.el (vhdl-testbench):
- * textmodes/org.el (org): Fix typos in docstrings.
-
- * emacs-lisp/timer.el (with-timeout): Improve argument/docstring
- consistency.
-
- * progmodes/flymake.el (flymake-find-file): Remove.
- (flymake-float-time): Use `with-no-warnings'.
- (flymake-check-start-time, flymake-check-was-interrupted)
- (flymake-err-info, flymake-is-running, flymake-last-change-time)
- (flymake-new-err-info): `defvar' at compile time.
-
-2005-07-03 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (occur-hook): Doc fix.
- (occur-1): Don't call `occur-hook' if there are no matches.
-
-2005-07-03 Richard M. Stallman <rms@gnu.org>
-
- * emulation/tpu-edt.el (tpu-original-global-map): Don't copy
- global-map, save the same map.
- (global-map): Don't alter it at top level.
- (tpu-edt-on): Save global map in tpu-original-global-map, then copy.
- Then alter it here instead.
- (tpu-edt-off): Set global-map to the saved one.
-
- * emulation/tpu-edt.el (tpu-emacs19-p): Var deleted.
- All references simplified.
- (tpu-lucid-emacs-p): Rename from tpu-lucid-emacs19-p. Uses changed.
- (zmacs-regions): Add defvar.
- (repeat-complex-command-map): Everything about that deleted.
-
- * textmodes/artist.el (artist-key-is-drawing)
- (artist-key-endpoint1, artist-key-poly-point-list)
- (artist-key-shape, artist-key-draw-how, artist-popup-menu-table)
- (artist-key-compl-table, artist-rb-save-data)
- (artist-arrow-point-1, artist-arrow-point-2): Move defvars up.
- Don't put them in eval-when-compile.
- (artist-set-arrow-points-for-poly): Use `last', not `artist-last'.
-
- * progmodes/ebrowse.el (ebrowse-revert-tree-buffer-from-file):
- Use with-no-warnings.
-
- * net/browse-url.el (dos-windows-version): Add defvar.
-
- * mail/supercite.el (filladapt-prefix-table): Add defvar.
-
- * mail/rmailsum.el (rmail-summary-redo): Add defvar.
- (rmail-summary-mode-map, rmail-summary-overlay): Defvars moved up.
- (rmail-new-summary-line-count): Rename from new-summary-line-count.
- Add defvar.
- (rmail-summary-beginning-of-message): Use with-no-warnings.
- (rmail-summary-first-message, rmail-summary-last-message): Likewise.
-
- * emulation/vip.el (vip-replace-string, ex-map, ex-read):
- Use with-no-warnings.
-
- * emulation/vi.el (vi-mark-region): Use c-mark-function.
- (c-mark-function): Add point-moving-unit property.
- (vi-goto-line): Use with-no-warnings.
-
- * emulation/edt.el (edt-last-copied-word): Add defvar.
- (zmacs-region-stays): Likewise.
- (edt-mark-section-wisely): Use c-mark-function for C.
- Use makr-defun for Fortran.
- (time-string): defvar deleted.
- (edt-display-the-time): Don't set time-string.
-
- * emacs-lisp/macroexp.el (macroexp-accumulate): Rename arg to var+list.
-
- * emacs-lisp/bytecomp.el (byte-compile-nogroup-warn):
- Don't warn when name is not constant
- or for defining the group `emacs'.
-
- * tooltip.el (gud-tooltip-mode): Add defvar.
-
- * startup.el (default-frame-background-mode): Add defvar.
-
- * smerge-mode.el (smerge-mode): Add duplicate defvar near top.
-
- * info.el (tool-bar-map): Add defvar.
-
- * dired.el (dnd-protocol-alist): Add defvar.
-
- * dired-aux.el (dired-query): Display question with answer, when
- the user answers.
-
- * custom.el (custom-add-option): Doc fix.
-
- * bookmark.el (Info-current-node, Info-suffix-list): Add defvars.
-
-2005-07-03 Eli Zaretskii <eliz@gnu.org>
-
- * font-lock.el (font-lock-regexp-grouping-construct): Fix the
- bogus name from the last change.
-
-2005-07-02 Luc Teirlinck <teirllm@auburn.edu>
-
- * custom.el (custom-declare-variable): Fix typos in comment.
- (custom-known-themes): Doc fix.
- (custom-theme-directory): New defcustom.
- (require-theme): Make it check `custom-theme-directory'.
-
- * cus-theme.el (custom-new-theme-mode): New function.
- (custom-theme-name, custom-theme-variables, custom-theme-faces)
- (custom-theme-description): Add compiler defvars.
- (customize-create-theme): Add doc to the "*New Custom Theme*"
- buffer. Use `custom-new-theme-mode'.
- (custom-theme-write): Put the created buffer in emacs-lisp-mode
- and save it to the `custom-theme-directory'. Make this the
- default directory of the buffer.
-
-2005-07-02 David Hunter <hunterd_42@comcast.net> (tiny change)
-
- * progmodes/flymake.el (flymake-mode, flymake-mode-off):
- Fix unbalanced parentheses.
-
-2005-07-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/flymake.el (flymake-mode-on, flymake-mode-off): Move body
- into flymake-mode and delegate to flymake-mode.
-
- * find-file.el (ff-which-function-are-we-in): Clean up.
-
-2005-07-02 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (occur-rename-buffer): Fix docstring.
-
- * emulation/edt.el (*EDT-keys*, edt-default-global-map)
- (edt-last-copied-word, edt-learn-macro-count)
- (edt-orig-page-delimiter, edt-orig-transient-mark-mode)
- (edt-rect-start-point, edt-user-global-map, rect-start-point)
- (time-string, zmacs-region-stays):
- * emulation/edt-mapper.el (edt-save-function-key-map)
- (EDT-key-name): `defvar' to silence the byte-compiler.
-
-2005-07-02 Martin Rudalics <rudalics@gmx.at>
-
- * font-lock.el (font-lock-regexp-grouping-backslash): Rename from
- font-lock-regexp-backslash. Doc fix.
- (font-lock-regexp-backslash-grouping-construct): Rename from
- font-lock-regexp-backslash-construct. Doc fix.
- (lisp-font-lock-keywords-2): Fix highlighting of Elisp regexp
- grouping constructs.
-
-2005-07-02 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (bootstrap): Remove the $(EMACS) binary after
- updating all the prerequisites.
-
-2005-07-01 Juanma Barranquero <lekktu@gmail.com>
-
- * textmodes/org.el (org-agenda-start-on-weekday)
- (org-calendar-to-agenda-key, org-agenda-sorting-strategy)
- (org-agenda-use-time-grid, org-archive-location)
- (org-allow-space-in-links, org-usenet-links-prefer-google)
- (org-enable-table-editor, org-export-default-language)
- (org-export-html-show-new-buffer, org-fill-paragraph)
- (org-cycle, org-goto-ret, org-goto-left, org-goto-right)
- (org-goto-quit, org-occur, org-eval-in-calendar)
- (org-agenda-cleanup-fancy-diary, org-agenda-no-heading-message)
- (org-agenda-diary-entry, org-remember-help)
- (org-table-convert-region, org-at-table-p)
- (org-table-move-row-down, org-table-move-row-up)
- (org-table-copy-region, org-table-toggle-vline-visibility)
- (org-table-get-stored-formulas, org-table-get-specials)
- (org-recalc-commands, org-table-eval-formula)
- (org-table-formula-substitute-names, orgtbl-make-binding)
- (org-format-org-table-html, org-format-table-table-html)
- (org-format-table-table-html-using-table-generate-source)
- (org-customize): Fix typos in docstrings.
- (org-level-2, org-at-timestamp-p, org-agenda-day-view)
- (org-agenda-toggle-diary, org-agenda-toggle-time-grid)
- (org-back-to-heading): Doc fixes.
- (org-agenda-toggle-time-grid, org-cmp-category, org-cmp-time)
- (org-agenda-change-all-lines, org-get-header):
- Improve argument/docstring consistency.
- (orgtbl-error): Fix error message.
-
- * progmodes/flymake.el (flymake-find-possible-master-files)
- (flymake-master-file-compare, flymake-get-line-err-count)
- (flymake-highlight-line, flymake-gui-warnings-enabled):
- Fix typos in docstrings.
- (flymake-parse-line, flymake-get-project-include-dirs-function)
- (flymake-get-prev-err-line-no, flymake-goto-prev-error):
- Doc fixes.
- (flymake-get-project-include-dirs-function)
- (flymake-make-err-menu-data):
- Improve argument/docstring consistency.
-
-2005-07-01 Lute Kamstra <lute@gnu.org>
-
- * battery.el (battery-linux-proc-apm): Fix typo in docstring.
- Catch errors with ignore-errors. Use temporary buffer.
- (battery-linux-proc-acpi): Fix typo in docstring. Document `%r'.
-
- * facemenu.el (facemenu-unlisted-faces): Delete foreground and
- background color faces.
- (facemenu-set-foreground, facemenu-set-background):
- Use facemenu-set-face-from-menu.
- (facemenu-set-face-from-menu): Treat face names that start with
- "fg:" or "bg:" as special.
- (facemenu-add-new-color): Don't create faces. Simplify.
-
-2005-06-30 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/crm.el (crm-do-completion): Handle minibuffer prompt.
- (crm-find-current-element): Likewise.
-
-2005-06-30 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net>
-
- * help-fns.el (help-do-arg-highlight): Regexp-quote argument names.
-
-2005-06-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * arc-mode.el (archive-extract): Make it work as a mouse binding.
- (archive-mouse-extract): Make it an obsolete alias.
- (archive-mode-map): Don't use archive-mouse-extract any more.
- (archive-mode, archive-extract): write-contents-hooks ->
- write-contents-functions.
- (archive-arc-rename-entry, archive-lzh-rename-entry): Remove unused
- first arg.
- (archive-rename-entry): Update the call.
- (archive-zip-summarize): Remove unused var `method'.
- (archive-lzh-summarize): Remove unused var `creator'.
-
- * emacs-lisp/debug.el (debug): Quieten Drew Adams by killing the
- dedicated frame upon exit.
-
- * arc-mode.el: Bind inhibit-read-only rather than buffer-read-only.
- (archive-zip-extract, archive-zip-expunge)
- (archive-zip-update, archive-zip-update-case): Use executable-find.
- (archive-resummarize, archive-flag-deleted, archive-unmark-all-files):
- Use restore-buffer-modified-p.
- (archive-extract, archive-add-new-member, archive-write-file-member):
- Use with-current-buffer.
- (archive-lzh-ogm, archive-zip-chmod-entry): Use dolist.
-
-2005-06-30 Andreas Schwab <schwab@suse.de>
-
- * progmodes/gud.el (gud-filter): Remove unneeded progn.
-
-2005-06-30 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * progmodes/sh-script.el (sh-get-kw): `&' also separates words.
-
-2005-06-30 Juri Linkov <juri@jurta.org>
-
- * faces.el (vertical-border): Inherit from mode-line-inactive
- only on tty.
-
-2005-06-30 Juanma Barranquero <lekktu@gmail.com>
-
- * help-fns.el (help-do-arg-highlight): Highlight also -ARG (for
- example, -NLINES in the `occur' docstring).
-
- * replace.el (occur-1): When no matches are found, do not set the
- `buffer-read-only' and modified flags for the occur buffer,
- because it is deleted.
-
- * emulation/cua-base.el (cua-check-pending-input)
- (cua-repeat-replace-region, cua-mode, cua-debug)
- (cua-auto-tabify-rectangles, cua-inhibit-cua-keys):
- Fix typos in docstrings.
-
- * emulation/cua-gmrk.el (cua-toggle-global-mark)
- (cua-cut-region-to-global-mark)
- (cua--cut-rectangle-to-global-mark):
- Remove period from end of messages.
-
- * emulation/cua-rect.el (cua-do-rectangle-padding):
- Remove period from end of messages.
- (cua--rectangle-seq-format): Fix typo in docstring.
- (cua-sequence-rectangle, cua-fill-char-rectangle):
- Improve argument/docstring consistency.
-
-2005-06-29 Juri Linkov <juri@jurta.org>
-
- * faces.el (default-frame-background-mode): New internal variable.
- (frame-set-background-mode): Use it.
-
- * startup.el (normal-top-level): Set default-frame-background-mode
- instead of frame-background-mode. Before setting it, test for its
- nil value. Remove tests for frame-background-mode and frame
- parameter `reverse'. Add test for "unspecified-fg".
-
- * term/xterm.el (xterm-rxvt-set-background-mode):
- * term/rxvt.el (rxvt-set-background-mode):
- Set default-frame-background-mode instead of frame-background-mode.
-
-2005-06-29 Juanma Barranquero <lekktu@gmail.com>
-
- * simple.el (set-variable): Warn about obsolete user variables.
-
- * imenu.el (imenu--completion-buffer):
- * mouse.el (mouse-buffer-menu-alist):
- * msb.el (msb-invisible-buffer-p):
- * calendar/diary-lib.el (diary-header-line-format):
- * emacs-lisp/pp.el (pp-buffer):
- * progmodes/cperl-mode.el (cperl-do-auto-fill):
- * textmodes/picture.el (picture-replace-match):
- Change space constants followed by a sexp to "?\s ".
-
- * play/decipher.el (decipher-loop-with-breaks):
- * textmodes/texinfo.el (texinfo-insert-@item): Change space
- constants "protected" from end of line by a comment to "?\s".
-
-2005-06-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (save-buffer-state): Use `declare'.
-
- * progmodes/cperl-mode.el (cperl-find-pods-heres): Don't gratuitously
- reset the syntax-table to cperl-mode-syntax-table.
- (cperl-mode): Make _ into word-syntax during font-locking so "print" in
- "foo_print_bar" is not matched as a reserved keyword.
-
-2005-06-29 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (orgtbl-setup): New function, for delayed
- setup for the orgtbl commands.
- (org-calc-default-modes): New option.
- (orgtbl-make-binding): Use `defun' to get better help display.
- (org-diary): Call `org-compile-prefix-format'.
- (org-table-formula-substitute-names): New function.
- (org-agenda-day-view, org-agenda-week-view): New commands.
- (org-agenda-toggle-week-view): Command removed.
- (org-tbl-menu): Split off from org-org-menu.
- (org-mode): Move removal of outline-mode menus to here.
- (org-table-formula-debug): New option.
- (org-table-insert-row): Keep first field if just "#" or "*".
- (org-mode): Paragraph regexps fixed.
- (org-table-recalculate-regexp): New constant.
- (org-table-justify-field-maybe): Avoid replace if not necessary.
- (org-copy-special, org-cut-special): Use `call-interactively'.
- (org-table-copy-region): Take region from `interactive' call.
- (org-trim): Return string even if no match.
- (org-formula): New face.
- (org-set-font-lock-defaults): No longer highlight "FIXME".
- But highlight formula-related fields in table.
- (org-table-p): Use regexp, not fontification.
- (org-table-align): Handle white space at end of line.
- (org-table-formula-evaluate-inline): New option.
- (org-mode): Auto-wrapping in comment lines turned off.
- (org-table-copy-down): Evaluate only in copied field, not in
- destination.
- (org-table-current-formula): Variable removed.
- (org-table-store-formulas, org-table-get-stored-formulas)
- (org-table-modify-formulas, org-table-replace-in-formulas)
- (org-table-maybe-eval-formula): New functions.
- (org-table-get-formula): Modify to use stored formulas.
- (org-table-insert-column, org-table-delete-column)
- (org-table-move-column): Call `org-table-modify-formulas'.
- (org-complete): Add completion for keyword formulas.
- (orgtbl-mode): Pull orgtbl-mode-map to start of
- minor-mode-map-alist.
-
-2005-06-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/python.el (python-check): Require `compile' before
- modifying its variables.
-
- * newcomment.el (comment-indent-default): Don't get fooled by an early
- end of buffer.
-
-2005-06-28 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el (ps-print-version): Fix version number.
-
-2005-06-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * textmodes/ispell.el (ispell-word): Remove stray parenthesis.
-
-2005-06-28 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-use-local-map): Variable deleted.
- (flyspell-local-mouse-map): Declaration deleted.
- (flyspell-mouse-map): Bind only mouse-2.
- (flyspell-mode-map): Don't test flyspell-use-local-map.
- (flyspell-overlay-keymap-property-name): Var deleted.
- (flyspell-mode-on): Don't make local bindings for
- flyspell-mouse-map and flyspell-mode-map.
- (make-flyspell-overlay): Unconditionally put on `keymap' text prop.
-
- * textmodes/ispell.el (ispell-word): Do not ignore short words.
-
- * progmodes/compile.el (compilation-next-error-function):
- Don't switch buffers; operate on the current buffer.
-
- * progmodes/compile.el (compilation-error-file-name)
- (compilation-warning-file-name, compilation-info-file-name)
- (compilation-line-number, compilation-column-number): New faces.
- (compilation-error-face, compilation-warning-face)
- (compilation-info-face, compilation-line-face)
- (compilation-column-face): Use them.
-
- * facemenu.el (facemenu-add-face): Warn when font-lock is active.
-
- * comint.el (comint-password-prompt-regexp): Accept ", try again".
-
- * bindings.el (global-map): Bind insertchar and its variants.
-
-2005-06-27 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/artist.el (artist-text-overwrite)
- (artist-figlet-get-extra-args, artist-text-see-thru): Use read-string.
-
-2005-06-27 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el: It was not working the page selection for printing.
- Reported by Sebastian Tennant <sebyte@smolny.plus.com>.
- (ps-print-version): New version 6.6.7.
- (ps-end-sheet): New fun.
- (ps-header-sheet, ps-end-job): Call it.
-
-2005-06-27 Luc Teirlinck <teirllm@auburn.edu>
-
- * subr.el (add-to-list, add-to-ordered-list): Doc fixes.
-
-2005-06-27 Lute Kamstra <lute@gnu.org>
-
- * facemenu.el (facemenu-unlisted-faces): Add foreground and
- background color faces.
- (facemenu-get-face): Delete function.
- (facemenu-set-face-from-menu): Don't call facemenu-get-face.
- (facemenu-add-new-color): Make second argument mandatory.
- Create the appropriate face and return it. Simplify.
- (facemenu-set-foreground, facemenu-set-background): Don't check if
- color is defined. Use return value of facemenu-add-new-color.
-
-2005-06-26 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-filter): Add missing argument to
- with-selected-window.
-
-2005-06-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Don't automatically add
- a :require to the defcustom.
-
- * emacs-lisp/autoload.el (make-autoload): Add the :setter for
- defcustoms corresponding to minor modes.
-
-2005-06-26 David Ponce <david@dponce.com>
-
- * recentf.el: Require tree-widget instead of wid-edit.
- (recentf-filename-handler): Fix widget :type.
- (recentf-cancel-dialog, recentf-open-more-files)
- (recentf-open-files-action): Doc fix.
- (recentf-dialog-goto-first): New function.
- (recentf-dialog-mode-map): Set parent keymap first.
- (recentf-dialog-mode): Define with define-derived-mode.
- Don't display continuation lines in dialogs.
- (recentf-edit-list): Rename from recentf-edit-selected-items.
- (recentf-edit-list-select): Rename from recentf-edit-list-action.
- Simplify.
- (recentf-edit-list-validate): New function.
- (recentf-edit-list): Update accordingly.
- (recentf-open-files-item-shift): Remove.
- (recentf-open-files-item): Convert menu elements into tree and
- link widgets. Don't create the widgets.
- (recentf-open-files): Update accordingly.
- (recentf-save-list): Untabify.
-
-2005-06-25 Luc Teirlinck <teirllm@auburn.edu>
-
- * replace.el (keep-lines-read-args): Add INTERACTIVE arg.
- (keep-lines): Add INTERACTIVE arg. Never delete lines only
- partially contained in the active region. Do not take active
- region into account when called from Lisp, unless INTERACTIVE arg
- is non-nil. Use `forward-line' instead of `beginning-of-line' to
- avoid trouble with fields. Make marker point nowhere when no
- longer used. Always return nil. Doc fix.
- (flush-lines): Add INTERACTIVE arg. Do not take active region
- into account when called from Lisp, unless INTERACTIVE arg is
- non-nil. Use `forward-line' instead of `beginning-of-line' to
- avoid trouble with fields. Make marker point nowhere when no
- longer used. Always return nil. Doc fix.
- (how-many): Add INTERACTIVE arg. Make RSTART and REND args
- interchangeable. Do not take active region into account when
- called from Lisp, unless INTERACTIVE arg is non-nil. Do not print
- message in echo area when called from Lisp, unless INTERACTIVE arg
- is non-nil. Avoid saying "1 occurrences". Do not use markers.
- Return the number of matches. Doc fix.
- (occur): Doc fix.
- (perform-replace): Make comment follow double space convention for
- the sake of `outline-minor-mode'.
-
- * faces.el (facep): Doc fix.
-
-2005-06-25 Richard M. Stallman <rms@gnu.org>
-
- * facemenu.el (facemenu-enable-faces-p): New function.
- (facemenu-background-menu, facemenu-foreground-menu)
- (facemenu-face-menu): Add menu-enable property.
-
- * jka-compr.el (jka-compr-insert-file-contents):
- Special handling if cannot find the uncompression program.
-
- * cus-face.el (custom-face-attributes): Add autoload.
-
- * emacs-lisp/lisp-mode.el (lisp-mode-variables):
- Bind comment-indent-function locally.
-
- * window.el (save-selected-window): Use save-current-buffer.
-
- * subr.el (with-selected-window): Use save-current-buffer.
-
- * progmodes/gud.el (gud-filter): Simplify using with-selected-window
- and with-current-buffer.
-
-2005-06-24 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (line-move-1): Fix previous change.
-
-2005-06-24 Juanma Barranquero <lekktu@gmail.com>
-
- * replace.el (occur-1): Set `buffer-read-only' and the
- buffer-modified flag before running `occur-hook' to protect
- against unintentional buffer switches that can lead to data loss.
-
-2005-06-24 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-tooltip-print-command): Indent properly.
- (gud-gdb-marker-filter): Use font-lock-warning-face for any
- initial error.
-
- * progmodes/gdb-ui.el (gdb-send): Remove warning face from errors
- after fresh input.
- (gdb-var-create-handler): Put name of expression in quotes.
-
-2005-06-23 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/ring.el (ring-elements): Make it return a list of the
- elements of RING in order, and without bogus nil elements.
-
-2005-06-23 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (set-variable): Args renamed; doc fix.
- (line-move-1): When there are overlays around, use vertical-motion.
-
- * faces.el (escape-glyph): Use brown against light background.
- (nobreak-space): Rename from no-break-space.
- Fix previous change.
-
- * dired-aux.el (dired-do-copy): Fix arg prompt.
-
- * mail/sendmail.el (mail-setup-with-from): Fix custom type.
-
-2005-06-23 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * mail/emacsbug.el (report-emacs-bug): Use "X server distributor"
- rather than "Distributor".
-
-2005-06-23 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debugger-special-form-p): New defun.
- (debug-on-entry): Use it. New interactive declaration that uses
- function-called-at-point.
-
-2005-06-23 Kim F. Storm <storm@cua.dk>
-
- * subr.el (save-match-data): Add comment about using evaporate arg
- to set-match-data.
-
-2005-06-22 Glenn Morris <gmorris@ast.cam.ac.uk>
+ * progmodes/idlwave.el (idlwave-one-key-select): Fix typo in docstring.
- * cus-edit.el (customize-face)
- (customize-face-other-window): Handle face aliases.
+2007-06-07 Carsten Dominik <dominik@science.uva.nl>
- * faces.el (face-documentation, set-face-attribute)
- (face-spec-set): Handle face aliases.
+ * textmodes/org.el: Version number fixed.
-2005-06-22 Juanma Barranquero <lekktu@gmail.com>
+2007-06-07 Glenn Morris <rgm@gnu.org>
- * help-mode.el (help-make-xrefs): If a symbol representing a face
- name is not followed by the word "face", it could still be a
- function or variable name, so don't bypass other checks.
+ * version.el (emacs-copyright): New constant.
+ * startup.el (fancy-splash-tail): Use emacs-copyright.
+ * calc/calc-help.el (calc-full-help): Use emacs-copyright.
-2005-06-22 Juri Linkov <juri@jurta.org>
+ * emacs-lisp/bytecomp.el (byte-compile-warnings): Add new option
+ `make-local'.
+ (byte-compile-warnings-safe-p): Add `make-local'.
+ (byte-compile-make-variable-buffer-local):
+ Allow byte-compile-warnings to suppress this warning.
- * ps-print.el (ps-face-foreground-name, ps-face-background-name):
- Replace aliased functions with calls where second arg `inherit' is t.
+ * tutorial.el (tutorial--describe-nonstandard-key): Adjust for new
+ format of "menu" description.
+ (tutorial--find-changed-keys): Describe the specific menu a
+ command is in.
-2005-06-22 Nick Roberts <nickrob@snap.net.nz>
+ * dframe.el (dframe-frame-parameter, dframe-mouse-event-p):
+ Rewrite compatibility functions to silence byte-compiler.
- * progmodes/gdb-ui.el (gdb-error): New variable.
- (gdb-error): New function.
- (gdb-annotation-rules): Act on error-begin and error annotations.
- (gdb-concat-output): Use font-lock-warning-face for errors.
+2007-06-07 Alfred M. Szmidt <ams@gnu.org> (tiny change)
-2005-06-22 Miles Bader <miles@gnu.org>
+ * mail/rmailsum.el (rmail-summary-save-buffer): New command.
+ (rmail-summary-mode-map): Add rmail-summary-save-buffer.
- * bindings.el (propertized-buffer-identification): Use renamed
- `Buffer-menu-buffer' face.
+2007-06-07 Eric M. Ludlam <eric@siege-engine.com>
- * faces.el (vertical-border): Rename from `vertical-divider'.
- (escape-glyph): Change dark-background color back to `cyan'.
+ * emacs-lisp/checkdoc.el (checkdoc-ispell-lisp-words): Remove "iff".
-2005-06-21 Juri Linkov <juri@jurta.org>
+2007-06-07 Juanma Barranquero <lekktu@gmail.com>
- * faces.el (face-user-default-spec): Try getting `customized-face'
- prior to `saved-face'.
- (frame-background-mode): Refill docstring.
+ * progmodes/ebrowse.el (ebrowse-member-table):
+ * textmodes/org.el (org-export-ascii-bullets, org-batch-agenda)
+ (org-batch-agenda-csv): Fix typos in docstrings.
- * emacs-lisp/lisp-mode.el (eval-defun-1):
- * emacs-lisp/edebug.el (edebug-eval-defun):
- Set `saved-face' temporarily to nil before calling form.
- Set `customized-face' to the new spec after that.
+2007-06-06 Juanma Barranquero <lekktu@gmail.com>
-2005-06-21 Juanma Barranquero <lekktu@gmail.com>
+ * international/mule-cmds.el (toggle-enable-multibyte-characters)
+ (sort-coding-systems, search-unencodable-char): Doc fixes.
+ (coding-system-change-eol-conversion, set-default-coding-systems)
+ (prefer-coding-system, find-multibyte-characters, princ-list)
+ (leim-list-entry-regexp, set-input-method, locale-language-names)
+ (input-method-exit-on-first-char, exit-language-environment-hook)
+ (locale-charset-language-names): Fix typos in docstrings.
- * subr.el (1value, lambda, key-substitution-in-progress):
- Doc fixes.
+2007-06-06 Juanma Barranquero <lekktu@gmail.com>
- * autoinsert.el (auto-insert-alist):
+ * pgg.el (pgg-sign-region, pgg-sign):
* ses.el (ses-call-printer):
- * subr.el (noreturn):
- * emacs-lisp/lisp.el (check-parens):
- * emacs-lisp/byte-opt.el (byte-optimize-pure-func):
- * net/browse-url.el (browse-url-mosaic):
- * progmodes/cc-defs.el (c-safe-scan-lists):
- * progmodes/ebnf-abn.el (ebnf-abn-lex):
- * progmodes/ebnf-bnf.el (ebnf-bnf-lex):
- * progmodes/ebnf-dtd.el (ebnf-dtd-lex):
- * progmodes/ebnf-ebx.el (ebnf-ebx-lex):
- * progmodes/ebnf-iso.el (ebnf-iso-lex):
- * progmodes/ebnf-yac.el (ebnf-yac-lex): Fix spellings.
-
-2005-06-21 Reiner Steib <Reiner.Steib@gmx.de>
-
- * pcvs-defs.el (cvs-menu): Add cvs-mode-mark and cvs-mode-unmark.
-
-2005-06-21 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/appt.el (appt-make-list): Activate the package, if
- not already active (for backwards compatibility).
-
-2005-06-20 Kim F. Storm <storm@cua.dk>
-
- * subr.el (add-to-ordered-list): Test membership with eq. Simplify.
-
-2005-06-20 Miles Bader <miles@gnu.org>
-
- * faces.el (vertical-divider): New face.
-
-2005-06-20 Juanma Barranquero <lekktu@gmail.com>
-
- * simple.el (kill-whole-line): Doc fix.
- (next-error-buffer-p, next-error-find-buffer)
- (clone-indirect-buffer): Fix typos in docstrings.
- (comment-line-break-function): Doc fix: don't say variable
- is automatically buffer-local (it isn't).
-
-2005-06-19 Michael Albinus <michael.albinus@gmx.de>
-
- * net/tramp-ftp.el (top):
- * net/tramp-smb.el (top):
- * net/tramp-util.el (top):
- * net/tramp-uu.el (top):
- * net/tramp-vc.el (top):
- * net/tramp.el (top): Revert copyright years back to original
- ones. Tramp has a life outside GNU Emacs.
-
-2005-06-19 Nick Roberts <nickrob@snap.net.nz>
-
- * tooltip.el (tooltip-use-echo-area): Don't make it obsolete.
-
-2005-06-18 Juri Linkov <juri@jurta.org>
-
- * progmodes/grep.el (grep-regexp-alist): Use backreference at the
- end of first regexp to limit the match to the position between
- line number and source line with same separator character as used
- between file name and line number. In the second regexp limit
- mouse-face area to file name and line number by adding new group
- for them and referring it in HYPERLINK arg.
- (grep-regexp-alist, grep-mode-font-lock-keywords): Use shy group.
- (grep-mode): Set font-lock-lines-before to 0 to not refontify the
- previous line where grep markers may be already removed.
-
-2005-06-18 Peter Kleiweg <p.c.j.kleiweg@rug.nl>
-
- * progmodes/ps-mode.el: Update version and maintainer's email address.
-
-2005-06-18 Steve Youngs <steve@xemacs.org>
-
- * net/browse-url.el (browse-url-browser-function)
- (browse-url-default-browser): Add firefox.
- (browse-url-firefox-program, browse-url-firefox-arguments)
- (browse-url-firefox-startup-arguments)
- (browse-url-firefox-new-window-is-tab): New defcustoms.
- (browse-url-firefox, browse-url-firefox-sentinel): New functions.
-
-2005-06-17 Richard M. Stallman <rms@gnu.org>
-
- * startup.el (command-line): Warn if specified user name has
- no home directory.
-
- * term.el (term-get-old-input, term-input-filter, term-input-sender)
- (term-mode-hook, term-exec-hook, term-escape-char): Doc fixes.
-
- * longlines.el (longlines-mode, longlines-show-hard-newlines):
- Doc fixes.
-
- * faces.el (underline): Try bold if terminal doesn't support underline.
-
- * mail/sendmail.el (mail-setup-with-from): New variable.
- (mail-insert-from-field): New function.
- (sendmail-send-it): Call it.
- (mail-setup): Optionally call it here.
-
- * term/linux.el: Call tty-no-underline.
-
-2005-06-17 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/edebug.el (edebug-goto-here): Doc fix.
-
-2005-06-17 Miles Bader <miles@gnu.org>
-
- * ediff-init.el (ediff-current-diff-A, ediff-current-diff-B)
- (ediff-current-diff-C, ediff-current-diff-Ancestor)
- (ediff-fine-diff-A, ediff-fine-diff-B, ediff-fine-diff-C)
- (ediff-fine-diff-Ancestor, ediff-even-diff-A, ediff-even-diff-B)
- (ediff-even-diff-C, ediff-even-diff-Ancestor, ediff-odd-diff-A)
- (ediff-odd-diff-B, ediff-odd-diff-C, ediff-odd-diff-Ancestor):
- Remove "-face" suffix from face names.
- (ediff-current-diff-face-A, ediff-current-diff-face-B)
- (ediff-current-diff-face-C, ediff-current-diff-face-Ancestor)
- (ediff-fine-diff-face-A, ediff-fine-diff-face-B)
- (ediff-fine-diff-face-C, ediff-fine-diff-face-Ancestor)
- (ediff-even-diff-face-A, ediff-even-diff-face-B)
- (ediff-even-diff-face-C, ediff-even-diff-face-Ancestor)
- (ediff-odd-diff-face-A, ediff-odd-diff-face-B)
- (ediff-odd-diff-face-C, ediff-odd-diff-face-Ancestor):
- New backward-compatibility aliases for renamed faces.
- (ediff-current-diff-face-A, ediff-current-diff-face-B)
- (ediff-current-diff-face-C, ediff-current-diff-face-Ancestor)
- (ediff-fine-diff-face-A, ediff-fine-diff-face-B)
- (ediff-fine-diff-face-C, ediff-fine-diff-face-Ancestor)
- (ediff-even-diff-face-A, ediff-even-diff-face-B)
- (ediff-even-diff-face-C, ediff-even-diff-face-Ancestor)
- (ediff-odd-diff-face-A, ediff-odd-diff-face-B)
- (ediff-odd-diff-face-C, ediff-odd-diff-face-Ancestor):
- Use renamed ediff faces.
-
- * eshell/esh-test.el (eshell-test-ok, eshell-test-failed):
- Remove "-face" suffix from face names.
- (eshell-test-ok-face, eshell-test-failed-face):
- New backward-compatibility aliases for renamed faces.
- (eshell-run-test): Use renamed eshell-test faces.
-
- * eshell/em-prompt.el (eshell-prompt): Remove "-face" suffix from
- face name.
- (eshell-prompt-face): New backward-compatibility alias for renamed
- face.
- (eshell-emit-prompt): Use renamed eshell-prompt face.
-
- * eshell/em-ls.el (eshell-ls-directory, eshell-ls-symlink)
- (eshell-ls-executable, eshell-ls-readonly, eshell-ls-unreadable)
- (eshell-ls-special, eshell-ls-missing, eshell-ls-archive)
- (eshell-ls-backup, eshell-ls-product, eshell-ls-clutter):
- Remove "-face" suffix from face names.
- (eshell-ls-directory-face, eshell-ls-symlink-face)
- (eshell-ls-executable-face, eshell-ls-readonly-face)
- (eshell-ls-unreadable-face, eshell-ls-special-face)
- (eshell-ls-missing-face, eshell-ls-archive-face)
- (eshell-ls-backup-face, eshell-ls-product-face)
- (eshell-ls-clutter-face):
- New backward-compatibility aliases for renamed faces.
- (eshell-ls-decorated-name): Use renamed eshell-ls faces.
-
- * progmodes/cc-fonts.el (c-nonbreakable-space-face):
- Remove "-face" suffix from face name.
- (c-cpp-matchers): Use the variable `c-nonbreakable-space-face'
- instead of literal face.
-
-2005-06-17 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/warnings.el (display-warning, lwarn)
- (warning-minimum-log-level): Doc fixes.
- (warning-minimum-level, warning-minimum-log-level):
- Add :debug to :type choices.
-
- * progmodes/ada-mode.el (ada-format-paramlist)
- (ada-get-indent-case, ada-check-matching-start)
- (ada-check-defun-name, ada-goto-matching-decl-start)
- (ada-goto-matching-start, ada-goto-matching-end, ada-tab)
- (ada-untab, ada-move-to-start, ada-fill-comment-paragraph)
- (ada-make-subprogram-body): Follow error conventions.
- (ada-case-exception-file, ada-indent-comment-as-code)
- (ada-indent-handle-comment-special, ada-indent-renames)
- (ada-indent-return, ada-search-directories-internal)
- (ada-tab-policy, ada-case-exception-substring)
- (ada-other-file-alist, ada-matching-start-re)
- (ada-matching-decl-start-re, ada-contextual-menu-last-point)
- (ada-imenu-generic-expression, ada-compile-goto-error)
- (ada-in-comment-p, ada-in-string-p, ada-in-string-or-comment-p)
- (ada-popup-menu, ada-add-extensions, ada-mode)
- (ada-region-selected, ada-create-case-exception)
- (ada-create-case-exception-substring, ada-after-keyword-p)
- (ada-activate-keys-for-case, ada-adjust-case-region)
- (ada-adjust-case-buffer, ada-format-paramlist)
- (ada-scan-paramlist, ada-insert-paramlist)
- (ada-indent-newline-indent)
- (ada-indent-newline-indent-conditional)
- (ada-justified-indent-current, ada-goto-previous-word)
- (ada-indent-current, ada-get-indent-open-paren)
- (ada-get-indent-paramlist, ada-get-indent-end)
- (ada-get-indent-case, ada-get-indent-when, ada-get-indent-if)
- (ada-get-indent-block-start, ada-get-indent-subprog)
- (ada-get-indent-noindent, ada-get-indent-label)
- (ada-get-indent-loop, ada-get-indent-type, ada-goto-stmt-start)
- (ada-search-prev-end-stmt, ada-goto-next-non-ws)
- (ada-goto-stmt-end, ada-goto-next-word)
- (ada-check-matching-start, ada-check-defun-name)
- (ada-goto-matching-decl-start, ada-goto-matching-start)
- (ada-goto-matching-end, ada-search-ignore-string-comment)
- (ada-in-decl-p, ada-looking-at-semi-or)
- (ada-looking-at-semi-private, ada-in-paramlist-p)
- (ada-in-open-paren-p, ada-tab, ada-indent-current-function)
- (ada-untab-hard, ada-move-to-start, ada-move-to-end)
- (ada-next-procedure, ada-previous-procedure, ada-next-package)
- (ada-previous-package, ada-create-menu)
- (ada-fill-comment-paragraph-justify)
- (ada-fill-comment-paragraph-postfix, ada-fill-comment-paragraph)
- (ada-other-file-name, ada-last-which-function-line)
- (ada-last-which-function-subprog, ada-which-function)
- (ada-get-body-name, ada-outline-level, ada-narrow-to-defun)
- (ada-gen-treat-proc, ada-check-emacs-version)
- (ada-continuation-indent, ada-align-region-separate):
- Fix typos in docstrings.
- (ada-adjust-case, ada-adjust-case-interactive): Doc fixes.
-
-2005-06-16 Lute Kamstra <lute@gnu.org>
-
- * simple.el (fundamental-mode): Run after-change-major-mode-hook
- conditionally.
-
-2005-06-16 Juanma Barranquero <lekktu@gmail.com>
-
- * comint.el (comint-replace-by-expanded-filename)
- (comint-prompt-regexp, comint-delimiter-argument-list)
- (comint-preinput-scroll-to-bottom):
- * info.el (Info-hide-cookies-node):
- * ls-lisp.el (ls-lisp-classify):
- * find-file.el (ff-search-directories, ff-special-constructs)
- (ff-find-other-file):
- * font-lock.el (font-lock-keywords):
- * shell.el (shell-prompt-pattern)
- (shell-dynamic-complete-functions, shell-mode)
- (shell-delimiter-argument-list):
- * term.el (term-replace-by-expanded-filename)
- (term-prompt-regexp, term-delimiter-argument-list):
- * woman.el (woman-ignore, woman0-if):
- * emacs-lisp/derived.el (derived-mode-init-mode-variables):
- * emacs-lisp/elint.el (elint-init-env):
- * emacs-lisp/regexp-opt.el (regexp-opt-depth):
- * eshell/esh-mode.el (eshell-preinput-scroll-to-bottom):
- * language/ethio-util.el (ethio-tilde-escape)
- (ethio-use-three-dot-question):
- * net/zone-mode.el (zone-mode-load-time-setup):
- * progmodes/cc-align.el (c-lineup-argcont):
- * progmodes/cc-awk.el (c-awk-beginning-of-defun):
- * progmodes/cperl-mode.el (cperl-set-style-back):
- * progmodes/inf-lisp.el (inferior-lisp-prompt):
- * progmodes/vhdl-mode.el (vhdl-beginning-of-libunit):
- Fix spellings in docstrings.
-
- * textmodes/sgml-mode.el (sgml-calculate-indent, html-tag-help):
- * progmodes/modula2.el (m2-for): Fix spellings.
-
- * menu-bar.el (menu-bar-games-menu): Fix typo in menu help string.
-
- * simple.el (undo-more): Don't use `format' on `error' arguments.
- Improve argument/docstring consistency.
- (pending-undo-list): Doc fix.
-
- * smerge-mode.el (smerge-ensure-match):
- * emulation/vip.el (vip-ex):
- * net/zone-mode.el (zone-mode-update-serial):
- * progmodes/idlwave.el (idlwave-complete):
- * progmodes/vhdl-mode.el (vhdl-visit-file)
- (vhdl-compose-wire-components):
- Don't use `format' on `error' arguments.
-
- * tooltip.el (tooltip-start-delayed-tip, tooltip-timeout)
- (tooltip-use-echo-area, tooltip-process-prompt-regexp)
- (tooltip-help-tips): Fix typos in docstrings.
-
-2005-06-16 David Ponce <david@dponce.com>
-
- * tree-widget.el (tree-widget-value-create): Simplify last change.
-
-2005-06-15 Matt Hodges <MPHodges@member.fsf.org>
-
- * ido.el (ido-incomplete-regexp): New variable.
- (ido-set-matches-1): Handle invalid-regexp error and set
- ido-incomplete-regexp.
- (ido-incomplete-regexp): New face.
- (ido-completions): Use it.
- (ido-complete, ido-exit-minibuffer, ido-completions):
- Handle incomplete regexps.
- (ido-completions): Add check for complete match when entering a regexp.
-
-2005-06-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * subr.el (add-to-ordered-list): Use a weak hash-table to avoid leaks.
-
-2005-06-15 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-Preamble): Enclose BibTeX preamble
- by field delimiters.
-
-2005-06-15 David Ponce <david@dponce.com>
-
- * tree-widget.el: eval-and-compile inlined functions so they will
- be available at run-time too.
- (tree-widget-super-format-handler)
- (tree-widget-format-handler): Remove.
- (tree-widget-value-create): Handle the :indent property.
-
-2005-06-15 Miles Bader <miles@gnu.org>
-
- * progmodes/which-func.el (which-func): Only inherit
- `font-lock-function-name-face' when that makes sense against the
- default mode-line face, otherwise set the face color explicitly.
-
- * progmodes/cperl-mode.el (cperl-init-faces): Use literal cperl
- faces instead of (non-existent) variables.
-
-2005-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * iswitchb.el (iswitchb-to-end): Replace mapcar with dolist.
- (iswitchb-get-matched-buffers): Likewise. Simplify.
-
-2005-06-14 Miles Bader <miles@gnu.org>
-
- * progmodes/ld-script.el (ld-script-location-counter):
- Remove "-face" suffix from face name.
- (ld-script-location-counter-face):
- New backward-compatibility alias for renamed face.
- (ld-script-location-counter-face): Use renamed face.
-
- * progmodes/cperl-mode.el (cperl-nonoverridable, cperl-array)
- (cperl-hash): Remove "-face" suffix from face names.
- (cperl-nonoverridable-face, cperl-array-face, cperl-hash-face):
- New backward-compatibility aliases for renamed faces.
- (cperl-find-pods-heres, cperl-init-faces, cperl-ps-print-init)
- (cperl-ps-print-face-properties): Use renamed cperl-mode faces.
-
- * progmodes/which-func.el (which-func): Remove "-face" suffix from face
- name.
- (which-func-face): New backward-compatibility alias for renamed face.
- (which-func-format): Use renamed which-func face.
-
- * progmodes/vhdl-mode.el (vhdl-prompt, vhdl-attribute, vhdl-enumvalue)
- (vhdl-function, vhdl-directive, vhdl-reserved-word)
- (vhdl-translate-off): Remove "-face" suffix and "font-lock-" from face
- names.
- (vhdl-speedbar-entity, vhdl-speedbar-architecture)
- (vhdl-speedbar-configuration, vhdl-speedbar-package)
- (vhdl-speedbar-library, vhdl-speedbar-instantiation)
- (vhdl-speedbar-subprogram, vhdl-speedbar-entity-selected)
- (vhdl-speedbar-architecture-selected)
- (vhdl-speedbar-configuration-selected)
- (vhdl-speedbar-package-selected)
- (vhdl-speedbar-instantiation-selected): Remove "-face" suffix from face
- names.
- (vhdl-font-lock-keywords-2, vhdl-font-lock-keywords-5):
- Use renamed faces.
- (vhdl-prompt-face, vhdl-attribute-face, vhdl-enumvalue-face)
- (vhdl-function-face, vhdl-directive-face, vhdl-reserved-words-face)
- (vhdl-translate-off-face): Variables renamed to remove "font-lock-".
- Use renamed faces.
- (syntax-alist): Don't use "font-lock-" or "-face" in generated face
- names.
- (vhdl-font-lock-init, vhdl-ps-print-settings): Use renamed faces.
- (vhdl-speedbar-insert-hierarchy, vhdl-speedbar-expand-entity)
- (vhdl-speedbar-expand-package, vhdl-speedbar-update-current-unit)
- (vhdl-speedbar-make-inst-line, vhdl-speedbar-make-pack-line)
- (vhdl-speedbar-make-subpack-line, vhdl-speedbar-make-subprogram-line)
- (vhdl-speedbar-item-info, vhdl-speedbar-check-unit): Use renamed faces.
-
- * progmodes/sh-script.el (sh-heredoc): Remove "-face" suffix from
- face name.
- (sh-heredoc-face): New backward-compatibility alias for renamed face.
- (sh-heredoc-face): Use renamed sh-heredoc face.
-
- * progmodes/idlw-help.el (idlwave-help-link):
- Remove "-face" suffix from face name.
- (idlwave-help-link-face):
- New backward-compatibility alias for renamed face.
- (idlwave-highlight-linked-completions): Use renamed idlwave-help faces.
-
- * progmodes/idlw-shell.el (idlwave-shell-bp-face)
- (idlwave-shell-disabled-bp): Remove "-face" suffix from face names.
- (idlwave-shell-bp-face, idlwave-shell-disabled-bp):
- New backward-compatibility aliases for renamed faces.
- (idlwave-shell-disabled-breakpoint-face)
- (idlwave-shell-breakpoint-face): Use renamed idlwave-shell faces.
-
- * progmodes/flymake.el (flymake-errline, flymake-warnline):
- Remove "-face" suffix from face names.
- (flymake-errline-face, flymake-warnline-face):
- New backward-compatibility aliases for renamed faces.
- (flymake-highlight-line): Use renamed flymake faces.
-
- * progmodes/ebrowse.el (ebrowse-tree-mark, ebrowse-root-class)
- (ebrowse-file-name, ebrowse-default, ebrowse-member-attribute)
- (ebrowse-member-class, ebrowse-progress):
- Remove "-face" suffix from face names.
- (ebrowse-tree-mark-face, ebrowse-root-class-face)
- (ebrowse-file-name-face, ebrowse-default-face)
- (ebrowse-member-attribute-face, ebrowse-member-class-face)
- (ebrowse-progress-face):
- New backward-compatibility aliases for renamed faces.
- (ebrowse-show-progress, ebrowse-show-file-name-at-point)
- (ebrowse-set-mark-props, ebrowse-draw-tree-fn)
- (ebrowse-draw-member-buffer-class-line, ebrowse-draw-member-long-fn)
- (ebrowse-draw-member-short-fn): Use renamed ebrowse faces.
-
- * progmodes/antlr-mode.el (antlr-default, antlr-keyword,
- antlr-syntax)
- (antlr-ruledef, antlr-tokendef, antlr-ruleref, antlr-tokenref)
- (antlr-literal): Remove "-face" suffix and "font-lock-" from face
- names.
- (antlr-font-lock-default-face, antlr-font-lock-keyword-face)
- (antlr-font-lock-syntax-face, antlr-font-lock-ruledef-face)
- (antlr-font-lock-tokendef-face, antlr-font-lock-ruleref-face)
- (antlr-font-lock-tokenref-face, antlr-font-lock-literal-face): New
- backward-compatibility aliases for renamed faces.
- (antlr-default-face, antlr-keyword-face, antlr-syntax-face)
- (antlr-ruledef-face, antlr-tokendef-face, antlr-ruleref-face)
- (antlr-tokenref-face, antlr-literal-face): Variables renamed to
- remove "font-lock-". Use renamed antlr-mode faces.
- (antlr-font-lock-additional-keywords): Use renamed faces. Replace
- literal face-names with face variable references.
-
- * buff-menu.el (Buffer-menu-buffer): Remove "-face" suffix from
- face name.
- (Buffer-menu-buffer-face): New backward-compatibility alias for
- renamed face.
- (list-buffers-noselect): Use renamed Buffer-menu-buffer face.
-
-2005-06-15 Daniel Pfeiffer <occitan@esperanto.org>
-
- * progmodes/make-mode.el (makefile-space, makefile-makepp-perl):
- Eliminate "-face" suffix.
- (makefile-targets): Inherit from font-lock-function-name-face and
- eliminate "-face" suffix.
- (makefile-shell): Remove attributes and eliminate "-face" suffix.
- (makefile-*-font-lock-keywords): Append makefile-targets in rule
- actions, instead of prepending, to make it less visible.
- (makefile-previous-dependency, makefile-match-dependency):
- Don't match a target on a continuation line.
-
- * files.el (auto-mode-alist): Put Makefile in gmake mode.
-
-2005-06-15 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (menu): Re-order menu items.
- (gdb-tooltip-print): Respect tooltip-use-echo-area.
-
- * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
- Define in tooltip.el.
- (gud-tooltip-process-output): Respect tooltip-use-echo-area.
- (gud-tooltip-tips): Respect tooltip-use-echo-area and
- gud-tooltip-echo-area.
-
- * tooltip.el (tooltip-use-echo-area): Restore from gud.el for
- backward compatibility and make obsolete.
- (tooltip-help-tips): Use tooltip-use-echo-area.
- (tooltip-show-help-function): Rename to...
- (tooltip-show-help): ...this, because it is a function.
- (tooltip-mode, tooltip-help-message): Call tooltip-show-help.
-
-2005-06-14 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/edebug.el (edebug-all-defs, edebug-initial-mode)
- (edebug-print-length, edebug-print-level, edebug-print-circle)
- (edebug-modify-breakpoint, edebug-eval-last-sexp)
- (edebug-eval-print-last-sexp): Doc fixes.
-
-2005-06-14 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-mode): Make a new keymap every time we enable ido,
- as the coverage buffer/file/both may change.
-
-2005-06-14 Lute Kamstra <lute@gnu.org>
-
- * net/ange-ftp.el (internal-ange-ftp-mode): Use delay-mode-hooks
- and run-mode-hooks. Simplify.
-
- * mail/rmailedit.el (rmail-edit-mode):
- * progmodes/octave-inf.el (inferior-octave-mode):
- * progmodes/sql.el (sql-interactive-mode): Use delay-mode-hooks.
-
- * recentf.el (recentf-dialog-mode): Use kill-all-local-variables
- and run-mode-hooks.
- (recentf-edit-list, recentf-open-files): Don't call
- kill-all-local-variables directly.
-
- * emacs-lisp/debug.el (debug-on-entry): Fix docstring.
-
-2005-06-14 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/byte-run.el (make-obsolete)
- (define-obsolete-function-alias): Rename arguments FUNCTION and
- NEW to OBSOLETE-NAME and CURRENT-NAME respectively.
- (make-obsolete-variable, define-obsolete-variable-alias):
- Rename arguments VARIABLE and NEW to OBSOLETE-NAME and CURRENT-NAME
- respectively.
-
- * isearchb.el (isearchb-activate):
- * pcvs.el (cvs-mode):
- * ses.el (ses-load):
- * vc-arch.el (vc-arch-checkin, vc-arch-diff):
- * net/tramp.el (tramp-find-file-exists-command)
- (tramp-find-shell):
- * progmodes/ada-mode.el (ada-create-case-exception)
- (ada-create-case-exception-substring, ada-make-subprogram-body):
- * progmodes/idlw-shell.el (idlwave-shell-move-to-bp):
- * progmodes/idlwave.el (idlwave-complete-class-structure-tag-help):
- * progmodes/vhdl-mode.el (vhdl-speedbar-place-component):
- * textmodes/org.el (org-promote, org-evaluate-time-range)
- (org-agenda-next-date-line, org-agenda-previous-date-line)
- (org-agenda-error, org-open-at-point, org-table-move-row)
- (org-format-table-table-html-using-table-generate-source)
- (org-shiftcursor-error, org-ctrl-c-ctrl-c):
- * textmodes/reftex.el (reftex-access-scan-info):
- * textmodes/reftex-toc.el (reftex-toc-dframe-p)
- (reftex-toc-promote-prepare): Follow error conventions.
-
- * diff-mode.el (diff-mode): Fix typo in docstring.
-
- * forms.el (forms--intuit-from-file): Fix reference to
- `forms-number-of-fields' in error message.
- (forms-print): Fix quoting in error message.
-
- * forms.el (forms-mode):
- * emulation/vi.el (vi-goto-insert-state):
- * progmodes/flymake.el (flymake-new-err-info)
- (flymake-start-syntax-check-for-current-buffer)
- (flymake-simple-cleanup):
- * eshell/esh-var.el (eshell/export):
- * progmodes/gud.el (xdb):
- * textmodes/flyspell.el (flyspell-incorrect-hook)
- (flyspell-maybe-correct-transposition)
- (flyspell-maybe-correct-doubling): Fix quoting in docstring.
-
-2005-06-13 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/debug.el (cancel-debug-on-entry): Mention default in
- minibuffer prompt.
-
-2005-06-13 Kim F. Storm <storm@cua.dk>
-
- * subr.el (add-to-ordered-list): New defun.
-
- * emulation/cua-base.el (cua-mode): Use add-to-ordered-list to
- add cua--keymap-alist to emulation-mode-map-alists.
-
-2005-06-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * subr.el (complete-in-turn): New macro.
- (dynamic-completion-table, lazy-completion-table): Add debug info.
-
- * faces.el (read-face-name): Use complete-in-turn complete non-aliases
- in preference to face aliases.
-
- * textmodes/fill.el (fill-match-adaptive-prefix): New function.
- (fill-context-prefix): Use it to avoid guessing absurdly long prefixes.
- Remove unused vars `start' and `firstline'.
- (fill-nobreak-p): Fix line-move-invisible -> line-move-invisible-p.
- (justify-current-line, fill-individual-paragraphs): Remove unused vars.
-
-2005-06-13 Eli Zaretskii <eliz@gnu.org>
-
- * cus-start.el (all): Don't complain about missing GTK-related
- variables, unless either `gtk' is boundp or this isn't a
- `windows-nt' build.
-
-2005-06-13 Lute Kamstra <lute@gnu.org>
-
- * abbrev.el (edit-abbrevs-mode): Use kill-all-local-variables and
- run-mode-hooks.
-
- * ediff-mult.el (ediff-meta-mode):
- * ediff-util.el (ediff-mode): Use run-mode-hooks.
-
- * ledit.el (ledit-mode): Use delay-mode-hooks.
-
- * woman.el (woman-mode-line-format): Delete constant.
- (woman-mode-map): Initialize it properly.
- (woman-mode): Set mode-class property to special.
- Use delay-mode-hooks and run-mode-hooks. Use the right keymap.
- Set major-mode and mode-name. Don't set mode-line-format directly.
- (Man-getpage-in-background): Don't reference woman-mode-line-format.
-
- * emacs-lisp/debug.el (cancel-debug-on-entry): Make the empty
- string argument obsolete.
-
-2005-06-13 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-CUA-compatible): New option.
- (org-disputed-keys): New variable.
- (org-key): New function.
- (orgtbl-make-binding): Add docstring to the created function.
- (org-mode): Set paragraph start/separate regexps.
- (orgtbl-mode): Don't start `orgtbl-mode' in `org-mode' buffers.
- (org-archive-location, org-archive-mark-done)
- (org-archive-stamp-time): New options.
- (org-archive-subtree): New command.
- (org-fill-paragraph): New function.
- (org-mode): Set `fill-paragraph-function' to `org-fill-paragraph'.
- (org-fake-empty-table-line): Function removed.
- (org-format-org-table-html): Do not create empty table lines at
- separator lines. Improved table header treatment.
- (org-link-format): New option.
- (org-make-link): New function.
- (org-insert-link, org-store-link): Use org-make-link.
- (org-open-file): Quote file name for shell command, to allow
- spaces in file names.
- (org-link-regexp): Fix bug with mailto link.
- (org-link-maybe-angles-regexp, org-protected-link-regexp):
- New constants.
- (org-export-as-html): Deal with the optional angles around a link.
- Better treatment of file: links.
- (org-open-at-point): Replace @{ and @} with < and >.
- (org-run-mode-hooks): Function removed.
- (org-agenda-mode): No longer use `org-run-mode-hooks'.
-
-2005-06-13 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-registers-mode): Let gdbmi use
- MI command -data-list-register-values.
- (gdb-post-prompt): Indent properly.
-
-2005-06-13 Juanma Barranquero <lekktu@gmail.com>
-
- * hilit-chg.el (highlight-changes-colors): Rename from
- `highlight-changes-colours'.
- (highlight-changes-colours): Keep as obsolete alias.
- (highlight-changes-face-list): Doc fix.
- (hilit-chg-make-list): Use `highlight-changes-colors'.
-
-2005-06-12 Mark A. Hershberger <mah@everybody.org>
-
- * progmodes/cperl-mode.el (cperl-mode): Remove stray paren in
- defun-prompt-regexp.
-
-2005-06-12 Eli Zaretskii <eliz@gnu.org>
-
- * loadup.el: Don't say we are dumping under 2 names on windows-nt
- and cygwin.
-
- * makefile.w32-in (bootstrap-clean-CMD, bootstrap-clean-SH):
- Don't use an old loaddefs.el, as in Makefile.in.
-
-2005-06-12 Lute Kamstra <lute@gnu.org>
-
- * Makefile.in (bootstrap-prepare): Don't use an old loaddefs.el.
-
- * man.el (Man-mode-map): Initialize it properly.
- (Man-mode): Set mode-class property to special.
-
- * calendar/calendar.el (calendar-mode): Use run-mode-hooks.
-
-2005-06-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * menu-bar.el (menu-bar-make-toggle): Remove stray backslash.
- A newline is needed in the docstring there.
-
- * emacs-lisp/debug.el (debug-on-entry, cancel-debug-on-entry):
- Doc fixes.
-
-2005-06-11 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * printing.el: Doc fix. The menubar is no more changed when printing
- is loaded, it only changes when pr-menu-bind or pr-update-menus is
- called. Now, the menubar changing will work in Emacs 20, 21 and 22.
- (pr-version): New version number (6.8.4).
- (pr-menu-bind): New command.
- (pr-update-menus): Docstring and code fix.
- (pr-menu-print-item): Now is a global var in Emacs and XEmacs.
- Docstring fix.
- (pr-txt-printer-alist, pr-ps-printer-alist, pr-gv-command)
- (pr-gs-command, pr-gs-switches, pr-ps-utility-alist): Docstring fix.
-
-2005-06-11 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/ewoc.el: Doc fixes for public funcs:
- "Returns" to "return", document useful return values, etc.
-
-2005-06-11 Alan Mackenzie <acm@muc.de>
-
- * textmodes/fill.el (fill-context-prefix): Try `adaptive-fill-function'
- BEFORE `adaptive-fill-regexp' when determining a fill prefix.
- (adaptive-file-function): Minor amendment to doc-string.
-
-2005-06-11 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
-
- * thumbs.el (thumbs-per-line, thumbs-thumbsdir-max-size)
- (thumbs-relief, thumbs-margin, thumbs-image-resizing-step):
- Fix :type--it is `integer', not `string'.
-
- * faces.el (modeline-highlight): Rename from (the erroneous)
- `modeline-higilight'.
-
-2005-06-11 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/edebug.el (edebug-eval-mode-map): Don't copy
- lisp-interaction-mode-map but make it the parent.
- (edebug-eval-mode): Use define-derived-mode.
-
-2005-06-11 Andreas Schwab <schwab@suse.de>
-
- * bindings.el: Add binding of `ESC functionkey' for every
- `M-functionkey'.
- * hexl.el (hexl-mode-map): Likewise.
-
-2005-06-10 Michael Hotchin <michael@hotchin.net> (tiny change)
-
- * progmodes/compile.el (compilation-error-regexp-alist-alist)
- [msft]: update regexp for newer msft compilers.
-
-2005-06-10 Mark A. Hershberger <mah@everybody.org>
-
- * xml.el (start-chars, xml-parse-dtd): Add the ability to skip
- ATTLIST portions of included DTDs.
- (xml-parse-dtd): Eliminate use of inefficient match-data.
-
-2005-06-10 Miles Bader <miles@gnu.org>
-
- * play/mpuz.el (mpuz-unsolved, mpuz-solved, mpuz-trivial)
- (mpuz-text): Remove "-face" suffix from face names.
- (mpuz-unsolved-face, mpuz-solved-face, mpuz-trivial-face)
- (mpuz-text-face): New backward-compatibility aliases for renamed faces.
- (mpuz-create-buffer, mpuz-paint-digit): Use renamed mpuz faces.
-
- * play/gomoku.el (gomoku-O, gomoku-X):
- Remove "-face" suffix from face names.
- (gomoku-font-lock-O-face, gomoku-font-lock-X-face):
- New backward-compatibility aliases for renamed faces.
- (gomoku-font-lock-keywords): Use renamed gomoku faces.
-
-2005-06-10 Juanma Barranquero <lekktu@gmail.com>
-
- * thumbs.el: Fixes for changes of 2005-06-09.
- (thumbs-thumbsdir): Force `thumbs-thumbsdir' to be interpretable
- as a directory.
- (thumbs-thumbname): Remove directory separator from format string;
- `thumbs-thumbsdir' now returns a valid directory name.
- (thumbs-temp-dir): New defsubst.
- (thumbs-temp-file, thumbs-resize-image, thumbs-modify-image):
- Use it.
-
- * cus-edit.el (minibuffer):
- * files.el (make-backup-file-name-function):
- * filesets.el (filesets-external-viewers):
- * hilit-chg.el (highlight-changes-colours)
- (highlight-changes-face-list, highlight-changes-rotate-faces):
- * ielm.el (ielm-dynamic-return, inferior-emacs-lisp-mode):
- * kmacro.el (kmacro-call-macro):
- * log-edit.el (log-edit-changelog-full-paragraphs):
- * mouse.el (mouse-1-click-follows-link):
- * skeleton.el (skeleton-autowrap):
- * subr.el (insert-for-yank-1):
- * tempo.el (tempo-insert-region):
- * terminal.el (terminal-emulator):
- * time.el (display-time-mail-face):
- * vc.el (vc-annotate):
- * vcursor.el (vcursor-copy-line):
- * woman.el (woman-bold-headings, woman-ignore)
- (woman-default-faces, woman-monochrome-faces):
- * calendar/todo-mode.el (todo-insert-threshold):
- * emulation/pc-select.el (pc-select-selection-keys-only)
- (pc-selection-mode):
- * emulation/vip.el (vip-find-char-forward):
- * emulation/viper-cmd.el (viper-find-char-forward):
- * international/mule-cmds.el
- (select-safe-coding-system-accept-default-p)
- (input-method-exit-on-invalid-key):
- * international/mule-diag.el (describe-coding-system):
- * international/ucs-tables.el (unify-8859-on-encoding-mode):
- * net/browse-url.el (browse-url-xterm-program):
- * obsolete/lazy-lock.el (lazy-lock-mode):
- * progmodes/cperl-mode.el (cperl-info-on-command-no-prompt)
- (cperl-mode):
- * progmodes/cpp.el (cpp-face-light-name-list)
- (cpp-face-dark-name-list):
- * progmodes/delphi.el (delphi-newline-always-indents):
- Fix spellings in docstrings.
-
- * ido.el (ido-mode, ido-file-extensions-order)
- (ido-default-file-method, ido-default-buffer-method)
- (ido-max-prospects, ido-slow-ftp-hosts, ido-setup-hook)
- (ido-decorations, ido-read-file-name-as-directory-commands)
- (ido-read-file-name-non-ido, ido-work-directory-list)
- (ido-ignore-item-temp-list, ido-current-directory)
- (ido-magic-forward-char, ido-enter-find-file)
- (ido-enter-switch-buffer, ido-visit-buffer, ido-switch-buffer)
- (ido-find-file, ido-read-buffer): Fix typos in docstrings.
-
-2005-06-10 Lute Kamstra <lute@gnu.org>
-
- * play/dunnet.el (dun-mode): Use define-derived-mode.
- (dungeon-mode-map): Rename to dun-mode-map. Keep old name as an
- obsolete alias.
-
- * play/doctor.el (doctor-mode-map): Remove defvar.
- (doctor-mode): Use define-derived-mode.
-
- * mail/mspools.el (mspools-mode):
- * net/eudc-hotlist.el (eudc-hotlist-mode):
- * play/blackbox.el (blackbox-mode): Use run-mode-hooks.
-
-2005-06-10 Miles Bader <miles@gnu.org>
-
- * textmodes/flyspell.el (flyspell-incorrect, flyspell-duplicate):
- Remove "-face" suffix from face names.
- (flyspell-incorrect-face, flyspell-duplicate-face):
- New backward-compatibility aliases for renamed faces.
- (flyspell-mode-on, make-flyspell-overlay)
- (flyspell-highlight-incorrect-region)
- (flyspell-highlight-duplicate-region)
- (flyspell-display-next-corrections)
- (flyspell-auto-correct-previous-word): Use renamed flyspell faces.
-
- * textmodes/texinfo.el (texinfo-heading): Remove "-face" suffix
- from face name.
- (texinfo-heading-face): New backward-compatibility alias for
- renamed face.
- (texinfo-heading-face): Use renamed texinfo-heading face.
-
- * textmodes/tex-mode.el (tex-math, tex-verbatim): Remove "-face"
- suffix from face names.
- (tex-math-face, tex-verbatim-face):
- New backward-compatibility aliases for renamed faces.
- (tex-math-face, tex-verbatim-face): Use renamed tex-mode faces.
- (tex-insert-quote): Use `tex-verbatim-face' variable instead of
- literal face name.
-
- * textmodes/table.el (table-cell): Remove "-face" suffix from face
- name.
- (table-cell-face): New backward-compatibility alias for renamed face.
- (table--put-cell-face-property, table--update-cell-face):
- Use renamed table-cell face.
-
- * textmodes/sgml-mode.el (sgml-namespace): Remove "-face" suffix
- from face name.
- (sgml-namespace-face): New backward-compatibility alias for
- renamed face.
- (sgml-namespace-face): Use renamed sgml-namespace face.
-
- * textmodes/org.el (org-level-1, org-level-2, org-level-3)
- (org-level-4, org-level-5, org-level-6, org-level-7)
- (org-level-8, org-warning, org-headline-done)
- (org-deadline-announce, org-scheduled-today)
- (org-scheduled-previously, org-link, org-done, org-table)
- (org-time-grid): Remove "-face" suffix from face names.
- (org-level-1-face, org-level-2-face, org-level-3-face)
- (org-level-4-face, org-level-5-face, org-level-6-face)
- (org-level-7-face, org-level-8-face, org-warning-face)
- (org-headline-done-face, org-deadline-announce-face)
- (org-scheduled-today-face, org-scheduled-previously-face)
- (org-link-face, org-done-face, org-table-face)
- (org-time-grid-face):
- New backward-compatibility aliases for renamed faces.
- (org-level-faces, org-set-font-lock-defaults, org-timeline)
- (org-agenda, org-agenda-get-todos, org-agenda-get-deadlines)
- (org-agenda-get-timestamps, org-agenda-get-scheduled)
- (org-agenda-add-time-grid-maybe, org-table-p): Use renamed org faces.
-
- * emulation/viper-init.el (viper-search, viper-replace-overlay)
- (viper-minibuffer-emacs, viper-minibuffer-insert)
- (viper-minibuffer-vi): Remove "-face" suffix from face names.
- (viper-search-face, viper-replace-overlay-face)
- (viper-minibuffer-emacs-face, viper-minibuffer-insert-face)
- (viper-minibuffer-vi-face):
- New backward-compatibility aliases for renamed faces.
- (viper-search-face, viper-replace-overlay-face)
- (viper-minibuffer-emacs-face, viper-minibuffer-insert-face)
- (viper-minibuffer-vi-face): Use renamed viper faces.
-
- * emacs-lisp/testcover.el (testcover-nohits, testcover-1value):
- Remove "-face" suffix from face names.
- (testcover-nohits-face, testcover-1value-face):
- New backward-compatibility aliases for renamed faces.
- (testcover-mark): Use renamed testcover faces.
-
- * calendar/diary-lib.el (diary-button): Remove "-face" suffix from
- face name.
- (diary-button-face): New backward-compatibility alias for renamed face.
- (diary-entry): Use renamed diary-button face.
-
- * calendar/calendar.el (diary, calendar-today, holiday)
- (mark-visible-calendar-date): Remove "-face" suffix from face names.
- (diary-face, calendar-today-face, holiday-face):
- New backward-compatibility aliases for renamed faces.
- (eval-after-load "facemenu", diary-entry-marker)
- (calendar-today-marker, calendar-holiday-marker, diary-face):
- Use renamed calendar faces.
-
- * compare-w.el (compare-windows): Remove "-face" suffix from face name.
- (compare-windows-face): New backward-compatibility alias for
- renamed face.
- (compare-windows-highlight): Use renamed compare-windows face.
-
- * strokes.el (strokes-char): Remove "-face" suffix from face name.
- (strokes-char-face): New backward-compatibility alias for renamed face.
- (strokes-encode-buffer): Use renamed strokes-char face.
-
- * pcvs-info.el (cvs-header, cvs-filename, cvs-unknown)
- (cvs-handled, cvs-need-action, cvs-marked, cvs-msg):
- Remove "-face" suffix from face names.
- (cvs-header-face, cvs-filename-face, cvs-unknown-face)
- (cvs-handled-face, cvs-need-action-face, cvs-marked-face)
- (cvs-msg-face): New backward-compatibility aliases for renamed faces.
- (cvs-fi-up-to-date-face, cvs-fi-unknown-face, cvs-fileinfo-pp):
- Use renamed pcvs faces.
- * pcvs.el (cvs-mode-find-file): Use renamed pcvs faces.
- * pcvs-defs.el (cvs-mode-map): Likewise.
- * cvs-status.el (cvs-status-font-lock-keywords): Likewise.
-
- * info.el (info-title-1, info-title-2, info-title-3)
- (info-title-4): Remove "-face" suffix from and downcase face names.
- (Info-title-1-face, Info-title-2-face, Info-title-3-face)
- (Info-title-4-face):
- New backward-compatibility aliases for renamed faces.
- (Info-fontify-node): Use renamed info faces.
-
- * hilit-chg.el (highlight-changes, highlight-changes-delete):
- Remove "-face" suffix from face names.
- (highlight-changes-face, highlight-changes-delete-face):
- New backward-compatibility aliases for renamed faces.
- (hilit-chg-cust-fix-changes-face-list, hilit-chg-make-ov)
- (hilit-chg-make-list): Use renamed highlight-changes faces.
-
- * generic-x.el (show-tabs-tab, show-tabs-space):
- Remove "-face" suffix from face names.
- (show-tabs-tab-face, show-tabs-space-face):
- New backward-compatibility aliases for renamed faces.
- (show-tabs-generic-mode-font-lock-defaults-1)
- (show-tabs-generic-mode-font-lock-defaults-2):
- Use renamed show-tabs faces.
-
- * smerge-mode.el (smerge-mine, smerge-other, smerge-base)
- (smerge-markers): Remove "-face" suffix from face names.
- (smerge-mine-face, smerge-other-face, smerge-base-face)
- (smerge-markers-face):
- New backward-compatibility aliases for renamed faces.
- (smerge-mine-face, smerge-other-face, smerge-base-face)
- (smerge-markers-face): Use renamed smerge faces.
-
- * log-view.el (log-view-file, log-view-message): Remove "-face"
- suffix from face names.
- (log-view-file-face, log-view-message-face):
- New backward-compatibility aliases for renamed faces.
- (log-view-file-face, log-view-message-face): Use renamed log-view
- faces.
-
- * paren.el (show-paren-match, show-paren-mismatch):
- Remove "-face" suffix from face names.
- (show-paren-match-face, show-paren-mismatch-face):
- New backward-compatibility aliases for renamed faces.
- (show-paren-function): Use renamed show-paren faces.
-
- * ruler-mode.el (ruler-mode-default, ruler-mode-pad)
- (ruler-mode-margins, ruler-mode-fringes)
- (ruler-mode-column-number, ruler-mode-fill-column)
- (ruler-mode-comment-column, ruler-mode-goal-column)
- (ruler-mode-tab-stop, ruler-mode-current-column): Remove "-face"
- suffix from face names.
- (ruler-mode-default-face, ruler-mode-pad-face)
- (ruler-mode-margins-face, ruler-mode-fringes-face)
- (ruler-mode-column-number-face, ruler-mode-fill-column-face)
- (ruler-mode-comment-column-face, ruler-mode-goal-column-face)
- (ruler-mode-tab-stop-face, ruler-mode-current-column-face):
- New backward-compatibility aliases for renamed faces.
- (ruler-mode-pad, ruler-mode-margins, ruler-mode-fringes)
- (ruler-mode-column-number, ruler-mode-fill-column)
- (ruler-mode-comment-column, ruler-mode-goal-column)
- (ruler-mode-tab-stop, ruler-mode-current-column)
- (ruler-mode-mouse-grab-any-column, ruler-mode-ruler): Use renamed
- faces.
-
- * whitespace.el (whitespace-highlight): Remove "-face" suffix from
- face name.
- (whitespace-highlight-the-space): Use renamed face.
- (whitespace-highlight-face): New backward-compatibility alias for
- renamed face.
-
- * woman.el (woman-italic, woman-bold, woman-unknown)
- (woman-addition, woman-symbol-face):
- Remove "-face" suffix from face names.
- (woman-italic-face, woman-bold-face, woman-unknown-face)
- (woman-addition-face):
- New backward-compatibility aliases for renamed faces.
- (woman-default-faces, woman-monochrome-faces, woman-man-buffer)
- (woman-decode-region, woman-replace-match)
- (woman-display-extended-fonts, woman-special-characters)
- (woman-font-alist, woman-change-fonts, woman2-TH, woman2-SH):
- Use renamed woman faces.
-
- * longlines.el (longlines-visible-face): Face removed.
-
- * diff-mode.el (diff-header, diff-file-header, diff-index)
- (diff-hunk-header, diff-removed, diff-added, diff-changed)
- (diff-function, diff-context, diff-nonexistent): Remove "-face"
- suffix from face names.
- (diff-header-face, diff-file-header-face, diff-index-face)
- (diff-hunk-header-face, diff-removed-face, diff-added-face)
- (diff-changed-face, diff-function-face, diff-context-face)
- (diff-nonexistent-face): New backward-compatibility aliases for
- renamed faces.
- (diff-header-face, diff-file-header-face)
- (diff-index, diff-index-face, diff-hunk-header)
- (diff-hunk-header-face, diff-removed, diff-removed-face)
- (diff-added, diff-added-face, diff-changed-face, diff-function)
- (diff-function-face, diff-context-face, diff-nonexistent)
- (diff-nonexistent-face): Use renamed diff-mode faces.
-
- * progmodes/compile.el (compilation-warning-face)
- (compilation-info-face): Remove "-face" suffix from face names.
- (compilation-warning-face, compilation-info-face):
- New backward-compatibility aliases for renamed faces.
- (compilation-warning-face, compilation-info-face):
- Use renamed compilation faces.
-
- * add-log.el (change-log-date, change-log-name)
- (change-log-email, change-log-file, change-log-list)
- (change-log-conditionals, change-log-function)
- (change-log-acknowledgement): Remove "-face" suffix from face names.
- (change-log-date-face, change-log-name-face)
- (change-log-email-face, change-log-file-face)
- (change-log-list-face, change-log-conditionals-face)
- (change-log-function-face, change-log-acknowledgement-face):
- New backward-compatibility aliases for renamed faces.
- (change-log-font-lock-keywords): Use renamed change-log faces.
-
- * cus-edit.el (custom-invalid, custom-rogue, custom-modified)
- (custom-set, custom-changed, custom-saved, custom-button)
- (custom-button-pressed, custom-documentation, custom-state)
- (custom-comment, custom-comment-tag, custom-variable-tag)
- (custom-variable-button, custom-face-tag, custom-group-tag-1)
- (custom-group-tag): Remove "-face" suffix from face names.
- (custom-magic-alist, custom-magic-value-create)
- (custom-group-sample-face-get, custom-mode): Use renamed custom faces.
- (custom-invalid-face, custom-rogue-face, custom-modified-face)
- (custom-set-face, custom-changed-face, custom-saved-face)
- (custom-button-face, custom-button-pressed-face)
- (custom-documentation-face, custom-state-face)
- (custom-comment-face, custom-comment-tag-face)
- (custom-variable-tag-face, custom-variable-button-face)
- (custom-face-tag-face, custom-group-tag-face-1)
- (custom-group-tag-face):
- New backward-compatibility aliases for renamed faces.
-
- * wid-edit.el (widget-documentation, widget-button)
- (widget-field, widget-single-line-field, widget-inactive)
- (widget-button-pressed): "-face" suffix removed from face names.
- (widget-documentation-face, widget-button-face)
- (widget-field-face, widget-single-line-field-face)
- (widget-inactive-face, widget-button-pressed-face):
- New backward-compatibility aliases for renamed faces.
- (widget-documentation-face, widget-button-face)
- (widget-button-pressed-face, widget-specify-field)
- (widget-specify-inactive): Use renamed widget faces.
-
-2005-06-10 Kenichi Handa <handa@m17n.org>
-
- * term/x-win.el (x-clipboard-yank): Remove condition-case
- wrapping.
-
-2005-06-11 Kenichi Handa <handa@m17n.org>
-
- * add-log.el (change-log-font-lock-keywords): Make the regexp for
- date lines stricter.
-
-2005-06-10 Zhang Wei <id.brep@gmail.com>
-
- * term/x-win.el (x-clipboard-yank): Use x-selection-value instead
- of x-get-selection.
-
-2005-06-10 Juanma Barranquero <lekktu@gmail.com>
-
- * comint.el (comint-mode, comint-snapshot-last-prompt):
- * frame.el (frame-current-scroll-bars):
- * term.el (term-mode, term-check-proc, term-input-sender)
- (term-simple-send, term-extract-string, term-word)
- (term-match-partial-filename):
- * window.el (window-current-scroll-bars):
- * emulation/cua-base.el (cua-normal-cursor-color)
- (cua-read-only-cursor-color, cua-overwrite-cursor-color)
- (cua-global-mark-cursor-color):
- * mail/undigest.el (rmail-forward-separator-regex):
- Fix typos in docstrings.
-
- * comint.el (comint-check-proc, make-comint-in-buffer)
- (comint-source-default): Doc fixes.
-
- * term.el (term-send-string): Improve argument/docstring consistency.
-
-2005-06-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * comint.el (comint-send-input): Bind `inhibit-read-only' around
- call to `delete-region'.
- (comint-mode-hook): Do not enable Font Lock by default.
-
-2005-06-09 Lute Kamstra <lute@gnu.org>
-
- * textmodes/ispell.el (ispell-menu-map-needed): flyspell-mode
- could be void.
-
-2005-06-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/debug.el (debugger-will-be-back): New var.
- (debug): Use it.
- (debugger-step-through, debugger-continue, debugger-jump)
- (debugger-return-value): Set it when needed.
- (debugger-make-xrefs, debugger-frame, debugger-frame-clear):
- Use inhibit-read-only.
-
-2005-06-09 Juanma Barranquero <lekktu@gmail.com>
-
- * window.el (shrink-window-if-larger-than-buffer)
- (window-size-fixed): Fix typo in docstring.
-
- * thumbs.el: Don't set `auto-image-file-mode'. Do not create the
- thumbnails directory on loading.
- (thumbs-conversion-program): Use `eq' to check the system type,
- not `equal'.
- (thumbs-temp-dir): Initialize to `temporary-file-directory',
- not "/tmp". Fix docstring.
- (thumbs-thumbsdir): New function to return the thumbnails
- directory, creating it if needed.
- (thumbs-cleanup-thumbsdir, thumbs-thumbname): Use it.
- (thumbs-temp-file): Delete variable and make it into a function.
- (thumbs-resize-image, thumbs-modify-image): Use it.
- (thumbs-kill-buffer): Simplify.
- (thumbs-gensym): Defalias or duplicate CL `gensym'.
- (thumbs-resize-image, thumbs-resize-interactive): Fix typos in
- docstrings.
-
-2005-06-09 Kim F. Storm <storm@cua.dk>
-
- * subr.el (save-match-data): Add RESEAT arg `evaporate' to
- set-match-data to free markers in match-data.
-
- * replace.el (replace-match-data): Pass RESEAT arg `t' to
- match-data to unchain markers in match-data.
-
-2005-06-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/debug.el (debug): Don't iconify if we know we'll re-enter
- the debugger immediately anyway. Undo the 2005-06-06 change, rendered
- unnecessary now.
-
-2005-06-08 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): If BODY is empty,
- give the variable a doc string that doesn't say don't set it directly.
-
- * textmodes/ispell.el (ispell-check-version):
- Use match-string-no-properties.
- (ispell-region, ispell-buffer-local-parsing, ispell-buffer-local-dict)
- (ispell-buffer-local-words): Likewise.
-
- * progmodes/make-mode.el (makefile-shell-face): Make this a no-op
- except on terminals with enough colors to really display it.
- (makefile-dependency-regex): Delete spurious `bb'.
-
- * faces.el (escape-glyph): Use blue once again in last case.
- (no-break-space): Redefine so that it isn't invisible on a tty.
-
-2005-06-08 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-read-file-name): Fallback to read-file-name on C-f
- also when reading directory name.
-
-2005-06-08 Lute Kamstra <lute@gnu.org>
-
- * textmodes/flyspell.el (flyspell-mode): Use define-minor-mode.
- (flyspell-mode-line-string): Remove autoload cookie.
- (flyspell-mode): Remove defvar.
-
-2005-06-07 Lute Kamstra <lute@gnu.org>
-
- * textmodes/org.el (org-run-mode-hooks): New function.
- (org-agenda-mode): Use it.
-
-2005-06-07 David McCabe <davemccabe@gmail.com> (tiny change)
-
- * emacs-lisp/lisp-mode.el (defstruct): Set `doc-string-elt' property.
-
-2005-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/iso-cvt.el (iso-sgml2iso-trans-tab): Add NBSP.
-
-2005-06-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * font-lock.el (font-lock-add-keywords): Doc fix.
-
-2005-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/tex-mode.el (tex-guess-mode): Add RequirePackage.
- (tex-compile-default): In the absence of any history, use the order in
- tex-compile-alist to choose the preferred command.
- (tex-compile-commands): Reorder a bit.
-
- * textmodes/flyspell.el (flyspell-auto-correct-binding)
- (flyspell-incorrect-face, flyspell-duplicate-face):
- Use (X)Emacs-agnostic code.
- (flyspell-mode-map): Don't overwrite at each load. Remove code
- redundant with the subsequent add-minor-mode. Merge Emacs and
- XEmacs code.
- (flyspell-word): Minor simplification.
- (flyspell-math-tex-command-p): Quieten the byte-compiler.
- (flyspell-external-point-words): Remove unused vars `size' and `start'.
- (flyspell-do-correct): Rename from flyspell-xemacs-correct.
- Merge the corresponding Emacs code.
- (flyspell-correct-word, flyspell-xemacs-popup):
- Use flyspell-do-correct.
-
- * emacs-lisp/debug.el (debug): Don't bury the buffer unless it's in
- a dedicated window.
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Undo part of last patch, to turn off a compiler warning.
-
-2005-06-06 Juri Linkov <juri@jurta.org>
-
- * tmm.el (tmm-inactive, tmm-remove-inactive-mouse-face):
- Rename `tmm-inactive-face' to `tmm-inactive'.
-
-2005-06-06 Matt Hodges <MPHodges@member.fsf.org>
-
- * iswitchb.el: Rename faces.
-
-2005-06-06 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-rectangle, cua-rectangle-noselect)
- (cua-global-mark): Remove -face suffix from face names.
-
- * emulation/cua-gmrk.el (cua--init-global-mark):
- Remove cua-global-mark face setup.
-
-2005-06-06 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/make-mode.el (makefile-dependency-regex): Handle whitespace
- just like other allowed characters.
- (makefile-match-dependency): Exclude leading and training whitespace
- from the range of regexp subexp 1.
- (makefile-macroassign-regex): Don't try to match the body,
- just the name of the macro being defined.
-
- * info.el (Info-read-node-name-2): New function.
- (Info-read-node-name-1): Use that.
- Add a completion-base-size-function property.
-
- * simple.el (completion-setup-function): Look for
- completion-base-size-function property of minibuffer-completion-table.
-
- * files.el (locate-file-completion): Doc fix.
-
- * printing.el: Don't call pr-update-menus; user must do that.
-
- * emacs-lisp/debug.el (debugger-window): New variable.
- (debug): Use debugger-window if it is set and still alive.
- Record debugger-window for next entry.
-
- * mail/supercite.el (sc-mail-glom-frame): Mark as risky.
-
-2005-06-06 Matthias F,Av(Brste <slashdevslashnull@gmx.net>
-
- * files.el (hack-local-variables-confirm): New arg FLAG-TO-CHECK.
- (hack-one-local-variable, hack-local-variables)
- (hack-local-variables-prop-line): Pass that arg.
-
-2005-06-06 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-first-match, ido-only-match, ido-subdir)
- (ido-indicator): Remove -face suffix from face names.
-
-2005-06-06 Juri Linkov <juri@jurta.org>
-
- * font-lock.el (font-lock-regexp-backslash)
- (font-lock-regexp-backslash-construct): New faces.
- (lisp-font-lock-keywords-2): Use new faces. Match `?:' only
- after `('. Add `while-no-input' to control structures.
-
- * faces.el (no-break-space, shadow): New faces.
- (escape-glyph): Use less loud colors pink2 and red4.
-
- * diff-mode.el (diff-context-face)
- * dired.el (dired-ignored)
- * rfn-eshadow.el (file-name-shadow)
- * tmm.el (tmm-inactive-face): Inherit from `shadow' face.
-
- * info.el (Info-title-1-face): Use green instead of yellow because
- bold yellow is not readable on light backgrounds.
-
- * progmodes/compile.el (compilation-start): Move `erase-buffer' up
- before selecting the desired mode to not spend time fontifying
- old contents.
-
-2005-06-06 Juanma Barranquero <lekktu@gmail.com>
-
- * thumbs.el (thumbs-thumbsdir-max-size, thumbs-image-resizing-step)
- (thumbs-thumbsdir-auto-clean): Fix typos in docstrings.
-
- * ps-print.el (ps-default-fg, ps-default-bg):
- Fix typos in docstrings.
-
- * isearchb.el (isearchb): Don't pass a spurious second argument to
- `iswitchb-completions'.
-
-2005-06-05 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-info-locals-handler): Use window point
- to preserve point.
- (gdb-find-file-hook): Add doc string.
-
- * progmodes/gud.el (gdb, gud-menu-map): Add command to evaluate
- C dereferenced pointer expression.
- (gud-tool-bar-map): Put it on the tool bar. Re-order icons.
-
- * toolbar/gud-pstar.xpm, toolbar/gud-pstar.pbm: New files.
-
- * toolbar/gud-break.xpm, toolbar/gud-cont.xpm, toolbar/gud-down.xpm
- * toolbar/gud-finish.xpm, toolbar/gud-ni.xpm, toolbar/gud-n.xpm
- * toolbar/gud-print.xpm, toolbar/gud-remove.xpm, toolbar/gud-run.xpm
- * toolbar/gud-si.xpm, toolbar/gud-s.xpm, toolbar/gud-until.xpm
- * toolbar/gud-up.xpm, toolbar/gud-watch.xpm:
- Make background transparent.
-
-2005-06-04 Luc Teirlinck <teirllm@auburn.edu>
-
- * font-lock.el (font-lock-add-keywords): Doc fix. Comment change.
- (font-lock-remove-keywords): Doc fix.
- (font-lock-mode-major-mode): Compiler defvar.
- (font-lock-set-defaults): Use `font-lock-mode-major-mode'.
-
- * font-core.el (font-lock-mode-major-mode): Compiler defvar.
- (font-lock-mode): Update `font-lock-mode-major-mode'.
- (font-lock-set-defaults): Compiler defvar.
- (font-lock-default-function): Take `font-lock-mode-major-mode'
- into account.
-
- * emacs-lisp/easy-mmode.el (define-global-minor-mode): Make it
- keep track of which major mode it enabled the minor mode for.
- Use find-file-hook again. Update docstring.
-
- * simple.el (eval-expression-print-level)
- (eval-expression-print-length, eval-expression-debug-on-error):
- Doc fixes.
-
-2005-06-04 Matt Hodges <MPHodges@member.fsf.org>
-
- * iswitchb.el (iswitchb-single-match-face)
- (iswitchb-current-match-face, iswitchb-virtual-matches-face)
- (iswitchb-invalid-regexp-face): New faces.
- (iswitchb-completions): Use them.
- (iswitchb-use-faces): Rename from iswitchb-use-fonts, which is
- now marked as an obsolete alias.
- (iswitchb-read-buffer): Remove check for bound font variables.
- (iswitchb-invalid-regexp): New free variable.
- (iswitchb-get-matched-buffers): Catch invalid-regexp errors and
- set iswitchb-invalid-regexp.
- (iswitchb, iswitchb-complete, iswitchb-completions): Deal with
- invalid regexps.
- (iswitchb-completions): Add check for complete match when entering
- a regexp.
- (iswitchb-completions): Remove require-match argument.
- (iswitchb-exhibit): Fix caller.
- (iswitchb-common-match-inserted): New variable.
- (iswitchb-complete, iswitchb-completion-help): Use it.
-
-2005-06-04 David Reitter <david.reitter@gmail.com> (tiny change)
-
- * url/url-http.el (url-http-chunked-encoding-after-change-function):
- Use `url-http-debug' instead of `message'.
-
-2005-06-04 Thierry Emery <thierry.emery@free.fr> (tiny change)
-
- * url/url-http.el (url-http-parse-headers): Pass redirected URL
- as a callback argument.
-
-2005-06-04 Kim F. Storm <storm@cua.dk>
-
- * simple.el (line-move): Only call sit-for when moving backwards.
-
- * ido.el (ido-make-merged-file-list-1): New defun split from
- ido-make-merged-file-list.
- (ido-make-merged-file-list): Bind throw-on-input around call to
- ido-make-merged-file-list-1. Return input-pending-p if
- interrupted by more input available.
- (ido-read-internal): Handle input-pending-p return value from
- ido-make-merged-file-list.
-
-2005-06-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/flyspell.el (flyspell-check-word-p): Simplify silly
- compatibility code.
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Don't inherit the EOL part of the coding-system from the
- tex-main buffer. Fit within 80 columns.
-
-2005-06-03 Matt Hodges <MPHodges@member.fsf.org>
-
- * tmm.el (tmm-inactive-face): New face.
- (tmm-remove-inactive-mouse-face): New function.
- (tmm-prompt, tmm-add-one-shortcut)
- (tmm-add-prompt, tmm-get-keymap): Make active menu items visible
- but not selectable.
-
-2005-06-03 Juanma Barranquero <lekktu@gmail.com>
-
- * faces.el (face-equal): Improve argument/docstring consistency.
-
-2005-06-03 Daniel Pfeiffer <occitan@esperanto.org>
-
- * progmodes/make-mode.el (makefile-targets-face)
- (makefile-shell-face, makefile-makepp-perl-face): Add :version.
- (makefile-bsdmake-dependency-regex)
- (makefile-makepp-rule-action-regex)
- (makefile-bsdmake-rule-action-regex): New constants.
- (makefile-makepp-mode, makefile-bsdmake-mode): Use them.
-
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Allow (...) within `...' for makepp messages.
-
-2005-06-03 Michael Kifer <kifer@cs.stonybrook.edu>
-
- * ediff-diff.el (ediff-same-contents): Eliminate CL-type functions.
-
- * ediff-mult.el (ediff-intersect-directories): Make sure that ".." and
- "." files are deleted from all file lists before comparison.
-
- * emulation/viper-keym.el (viper-toggle-key, viper-quoted-insert-key)
- (viper-ESC-key): Made them customizable.
-
- * emulation/viper.el (viper-non-hook-settings):
- Fix the names of defadvices.
-
-2005-06-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * autorevert.el (auto-revert-buffers): Use save-match-data.
-
-2005-06-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/easymenu.el (easy-menu-return-item): Quick fix to find
- menu items with a nil command binding.
-
-2005-06-01 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/cl-macs.el (defsetf):
- Improve argument/docstring consistency.
-
- * faces.el (list-faces-display): Improve the formatting by
- computing the maximum length required for any face-name (reworked
- patch of 1999-01-11, accidentally deleted on 1999-07-21).
- (internal-find-face): Remove redundant info in docstring.
-
-2005-06-01 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-1)
- (gdb-info-breakpoints-custom, gdb-delete-breakpoint)
- (gdb-goto-breakpoint, gdb-source-info, gdb-get-location)
- (gdb-assembler-custom): Improve regexps.
- (def-gdb-auto-update-handler): Use window point to preserve point.
-
-2005-05-31 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * thumbs.el (thumbs-mode): Fix misuse of make-variable-buffer-local.
-
-2005-05-31 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-embedded-word): Change argument passed
- to calc-embedded.
- (calc-embedded-make-info): Have plain prefix argument select
- entire line.
-
-2005-05-31 Juanma Barranquero <lekktu@gmail.com>
-
- * faces.el (list-faces-display): Signal error if passed a regexp
- that matches no face name.
-
- * simple.el (filter-buffer-substring): Fix typo in docstring.
-
-2005-05-31 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/vhdl-mode.el (vhdl-fill-region): Test ARG, not INTERACTIVE.
- (vhdl-emacs-21): Doc fix.
- (vhdl-mode): Unconditionally set comment-padding.
- (vhdl-fixup-whitespace-region): Insert spaces only where
- there are none.
- (vhdl-statistics-buffer): Make the Emacs 21 behavior universal.
-
-2005-05-30 John Wiegley <johnw@newartisans.com>
-
- * eshell/em-cmpl.el, eshell/em-dirs.el, eshell/em-glob.el
- * eshell/em-unix.el, eshell/esh-ext.el, eshell/esh-io.el
- * eshell/esh-util.el, eshell/esh-var.el: Change all uses of
- `directory-sep-char' to ?/, and all uses of `string-to-int' to
- `string-to-number'.
-
-2005-05-30 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-bug-address): Fix docstring.
- (calc-window-hook, calc-trail-window-hook): New variables.
- (calc-trail-display): Restore use of calc-trail-window-hook.
- (calc): Restore use of calc-window-hook.
-
-2005-05-31 Masatake YAMATO <jet@gyve.org>
-
- * emacs-lisp/find-func.el (find-function-noselect): Handle subroutines.
-
- * help-fns.el (help-C-file-name): Add autoload mark for
- `find-function-noselect'.
-
-2005-05-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/tex-mode.el (tex-compile-commands, tex-compile)
- (tex-start-tex): Undo all but the last part of the 2005-05-28 change.
-
-2005-05-30 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/diary-lib.el (mark-included-diary-files): Only kill
- included diary buffer if it was not already being visited.
- Reported by Stephen Berman <Stephen.Berman@gmx.net>.
-
- * calendar/icalendar.el (top-level): Do not require appt.
-
- * mail/supercite.el (sc-select-attribution): Only use a list
- element from sc-attrib-selection-list if it returns a string.
- Reported by Davide G. M. Salvetti <salve@debian.org>.
-
-2005-05-30 Juanma Barranquero <lekktu@gmail.com>
-
- * thumbs.el (thumbs-thumbname): The resulting thumbname now
- includes a hash value to improve its uniqueness, and has a ".jpg"
- extension. Also, it is now a valid filename on all systems.
- (thumbs-make-thumb): Use `let', not `let*'.
- (thumbs-show-thumbs-list): Check for JPEG availability.
-
-2005-05-30 Richard M. Stallman <rms@gnu.org>
-
- * filesets.el (filesets-menu-ensure-use-cached):
- Prevent warning when emacs-version>= is undefined.
-
- * printing.el (pr-interactive-n-up): Use string-to-number.
-
- * emulation/tpu-mapper.el: Use eval-buffer, not eval-current-buffer.
-
- * emacs-lisp/bytecomp.el (byte-compile-nogroup-warn):
- Warn only when name to be defined is quoted.
-
-2005-05-30 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-toggle-breakpoint):
- Make regexp more robust.
- (gdb-display-assembler-buffer, gdb-frame-assembler-buffer):
- Force regeneration of disassembly.
-
-2005-05-29 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-user-invocation): Check if
- calc-invocation-macro is non-nil.
-
-2005-05-29 Juri Linkov <juri@jurta.org>
-
- * add-log.el (change-log-font-lock-keywords):
- Add `+' to e-mail regexp to accept mail address with keywords.
-
- * man.el (Man-name-regexp): Add `:' to accept qualified names.
-
-2005-05-29 Luc Teirlinck <teirllm@auburn.edu>
-
- * progmodes/inf-lisp.el (inferior-lisp-mode): Use delay-mode-hooks.
-
- * ielm.el (inferior-emacs-lisp-mode): Ditto.
-
-2005-05-29 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/flyspell.el (flyspell-auto-correct-previous-word):
- Undo the change that moves to end of the current word.
-
-2005-05-29 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-memory-set-repeat-count):
- Throw error when count <= 0 to ensure input is a number.
- (gdb-read-memory-custom): Pick up address from buffer.
- (gdb-memory-mode): Allow user to increment and decrement
- memory address from header line.
-
-2005-05-29 Richard M. Stallman <rms@gnu.org>
-
- * textmoddes/flyspell.el (flyspell-version): Function deleted.
- (flyspell-auto-correct-previous-hook): Doc fix.
-
- * jit-lock.el (jit-lock-function, jit-lock-after-change):
- Do nothing if memory is full.
-
- * font-lock.el (font-lock-fontify-syntactically-region):
- Pass t for GREEDY to looking-back.
-
- * saveplace.el (save-place-alist-to-file): Write the file
- using write-region.
-
- * subr.el (looking-back): New argument GREEDY.
-
- * progmodes/compile.el (compilation-start): Set the mode
- before inserting the initial text.
-
- * progmodes/which-func.el (which-func-update-1): Turn the mode
- off in case of error by setting which-func-mode.
-
-2005-05-29 Peter Heslin <p.j.heslin@durham.ac.uk> (tiny change)
+ * calendar/icalendar.el (icalendar--diarytime-to-isotime):
+ * textmodes/org.el (org-cycle): Fix typos in docstrings.
- * textmodes/flyspell.el (flyspell-auto-correct-previous-word):
- Narrow down to what's on the screen, and recenter overlays
- at the end of the next word.
-
-2005-05-29 Manuel Serrano <Manuel.Serrano@sophia.inria.fr>
-
- * textmodes/flyspell.el (flyspell-emacs, flyspell-use-local-map):
- 8Vars moved up.
- (flyspell-default-delayed-commands): Add backward-delete-char-untabify.
- (flyspell-abbrev-p): Default to nil.
- (flyspell-use-global-abbrev-table-p): Doc fix.
- (flyspell-large-region): Allow nil as value.
- (flyspell-use-meta-tab, flyspell-auto-correct-binding): New variables.
-
- (mail-mode-flyspell-verify): More robust handling
- of `mail-header-separator'. More efficient signature detection.
- Allow for regexp metacharacters in message-header-separator.
- Adding `To' not to be checked in mail-mode-flyspell-verify.
-
- (flyspell-prog-mode): Run flyspell-prog-mode-hook.
- (flyspell-mouse-map): Bind M-TAB only if flyspell-use-meta-tab.
- Bind flyspell-auto-correct-binding.
- Bind C-. and C-, .
- (flyspell-mode-map): Likewise.
- (flyspell-mode): Doc fix.
- (flyspell-accept-buffer-local-defs): Preserve current buffer.
- (flyspell-mode-on): Bind flyspell-mouse-map and flyspell-mode-map.
- (flyspell-word-cache-result): New var, always local.
- (flyspell-check-pre-word-p): Doc fix.
- (flyspell-check-changed-word-p): Handle spc like newline.
- (flyspell-post-command-hook): Set flyspell-word-cache-result.
- (flyspell-word-search-backward, flyspell-word-search-forward):
+2007-06-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-export-region-as-html)
+ (org-replace-region-by-html, org-number-to-letters)
+ (org-table-fedit-finish, org-normalize-color)
+ (org-table-fedit-ref-right, org-date-to-gregorian)
+ (org-table-fedit-move, org-table-convert-refs-to-rc)
+ (org-calendar-holiday, org-table-fedit-toggle-ref-type)
+ (org-write-agenda, org-colgroup-info-to-vline-list)
+ (org-agenda-todo-previousset, org-defkey, org-encode-for-stdout)
+ (org-indent-line-function, org-export-as-html-to-buffer)
+ (org-store-agenda-views, org-update-mode-line)
+ (org-find-if, org-delete-all)
+ (org-table-fedit-convert-buffer, org-emphasize)
+ (org-uniquify, org-table-fedit-lisp-indent)
+ (org-table-fedit-scroll, org-get-todo-sequence-head)
+ (org-table-fedit-scroll-down, org-table-fedit-line-down)
+ (org-table-fedit-ref-left, org-agenda-export-csv-mapper)
+ (org-table-fedit-toggle-coordinates, org-dvipng-color)
+ (org-table-fedit-line-up, org-table-fedit-ref-down)
+ (org-table-formula-from-user, org-mode-flyspell-verify)
+ (org-cycle-show-empty-lines, org-ctrl-c-ret)
+ (org-table-formula-to-user, org-diary-to-ical-string)
+ (orgtbl-export, org-table-fedit-post-command)
+ (org-closed-in-range, org-shiftcontrolright)
+ (org-table-convert-refs-to-an, org-table-hline-and-move)
+ (org-table-formula-less-p, org-format-table-ascii)
+ (org-agenda-get-sexps, org-shift-refpart)
+ (org-diary-sexp-entry, org-time-string-to-absolute)
+ (org-table-show-reference, org-letters-to-number)
+ (org-fix-agenda-info, org-table-fedit-ref-up)
+ (org-table-fedit-shift-reference, org-table-fedit-abort)
+ (org-closest-date, org-shiftcontrolleft)
+ (org-at-heading-or-item-p, org-rematch-and-replace)
+ (org-agenda-todo-nextset, org-export-grab-title-from-buffer):
New functions.
- (flyspell-word): Return t if nothing to check.
- When parsing TeX code, check for after } or \.
- Use flyspell-word-search-backward to find previous word.
- Return nil if duplicated word.
- For word already checked, return same value as last time.
- Set flyspell-word-cache-result after checking.
- Don't clobber the return value.
- (flyspell-get-word): Major rewrite.
- (flyspell-external-point-words): New locals pword, pcount.
- Fix size used in progress message.
- Find the proper corresponding word in flyspell-large-region-buffer.
- (flyspell-region): Check for flyspell-large-region = nil.
- (flyspell-highlight-incorrect-region): Clean up overlays in region.
- (flyspell-auto-correct-word): Check that WORD is a cons.
- (flyspell-correct-word): Likewise.
-
-2005-05-29 Daniel Pfeiffer <occitan@esperanto.org>
-
- * progmodes/make-mode.el (makefile-rule-action-regex)
- (makefile-macroassign-regex, makefile-makepp-mode)
- (makefile-bsdmake-mode): Continuation lines may be empty.
- Reported by Joshua Varner.
- (makefile-makepp-font-lock-keywords): Add $(stem).
-
-2005-05-28 Karl Berry <karl@gnu.org>
-
- * textmodes/tex-mode.el: Now that tex-send-command calls
- shell-quote-argument (2005-03-31 change), remove all calls to
- shell-quote-argument; they all end up invoking tex-send-command.
- The double quoting loses on filenames with non-safe characters,
- such as "@". Reported by Frederik Fouvry.
+ (org-table-edit-scroll-down, org-finish-edit-formulas)
+ (org-table-edit-next-field, org-abort-edit-formulas)
+ (org-font-lock-level, org-export-find-first-heading-line)
+ (org-table-edit-line-down, org-table-edit-backward-field)
+ (org-edit-formula-lisp-indent, org-table-edit-move)
+ (org-check-log-option, org-this-word)
+ (org-table-edit-line-up, org-table-edit-formulas-post-command)
+ (org-agenda-file-to-end, org-expand-file-name)
+ (org-fake-empty-table-line, org-table-edit-scroll)
+ (org-toggle-log-option, org-show-reference): Function removed.
+ (org-inhibit-invisibility, org-table-formula-make-cmp-string):
+ New defsubsts.
+ (org-unmodified, org-batch-store-agenda-views)
+ (org-batch-agenda-csv): New macro.
+ (org-agenda-export): New customization group.
+ (org-agenda-skip-deadline-if-done, org-agenda-remove-tags)
+ (org-highest-priority, org-agenda-exporter-settings)
+ (org-log-done-with-time, org-replace-disputed-keys)
+ (org-format-latex-header, org-export-table-header-tags)
+ (org-cycle-separator-lines, org-export-table-data-tags)
+ (org-icalendar-include-sexps)
+ (org-empty-line-terminates-plain-lists)
+ (org-log-repeat, org-special-ctrl-a)
+ (org-table-use-standard-references, org-disputed-keys)
+ (org-export-skip-text-before-1st-heading, org-agenda-with-colors)
+ (org-agenda-export-html-style): New option.
+ (org-allow-auto-repeat, org-agenda-remove-tags-when-in-prefix)
+ (org-CUA-compatible): Option removed.
+ (org-agenda-structure, org-sexp-date): New face.
+ (org-todo-keywords-for-agenda, org-not-done-keywords)
+ (org-planning-or-clock-line-re, org-agenda-name)
+ (org-table-colgroup-info, org-todo-sets)
+ (constants-unit-system, org-clock-mode-line-entry)
+ (org-mode-line-timer, org-table-current-begin-pos)
+ (org-todo-keywords-1, org-mode-line-string)
+ (org-table-clean-did-remove-column, org-table-fedit-map)
+ (org-clock-heading, org-table-buffer-is-an)
+ (org-agenda-info, org-done-keywords)
+ (org-done-keywords-for-agenda, org-todo-heads)
+ (org-todo-kwd-alist, org-clock-start-time): New variable.
+ (org-todo-kwd-priority-p, org-edit-formulas-map)
+ (org-repeat-re, org-todo-kwd-max-priority)
+ (org-version, org-done-string)
+ (org-table-clean-did-remove-column-1, org-disputed-keys):
+ Remove variables.
+ (org-table-translate-regexp, org-repeat-re, org-version): New consts.
+ (org-ts-lengths): Constant removed.
+ (org-follow-gnus-link): Don't ask how many articles to read.
+ (org-export-find-first-export-line): Rename from
+ `org-export-find-first-heading'.
+ Use `org-export-skip-text-before-1st-heading'.
+ (org-table-fedit-post-command): Rename from
+ `org-table-edit-formulas-post-command'.
+ (org-table-fedit-finish): Rename from `org-finish-edit-formulas'.
+ (org-table-fedit-abort): Rename from `org-abort-edit-formulas'.
+ (org-table-fedit-lisp-indent): Rename from
+ `org-edit-formula-lisp-indent'.
+ (org-table-show-reference): Rename from `org-show-reference'.
+ (org-table-store-formulas): Use `org-table-formula-less-p'.
+ (org-table-edit-formulas): Position cursor to current field equation.
+ (org-update-checkbox-count, org-hide-archived-subtrees)
+ (org-timestamp-up-day, org-timestamp-down-day)
+ (org-shiftmetaleft, org-shiftmetaright, org-shiftmetaup)
+ (org-shiftmetadown, org-metaleft, org-metaright, org-metaup)
+ (org-metadown, org-shiftup, org-shiftdown, org-shiftright)
+ (org-shiftleft, org-ctrl-c-ctrl-c, org-context):
+ Let `org-on-heading-p' also check for invisible heading.
+ (org-read-date): Match am/pm times.
+ (org-eval-in-calendar): Fix default date in prompt.
-2005-05-29 Nick Roberts <nickrob@snap.net.nz>
+2007-06-05 Chong Yidong <cyd@stupidchicken.com>
- * progmodes/gdb-ui.el (gdb-assembler-custom): Be more careful
- about preserving point.
+ * files.el (auto-mode-alist): Separate "ChangeLog.1" and
+ "ChangeLog.a" entries, giving the latter lower priority.
-2005-05-27 Jay Belanger <belanger@truman.edu>
+2007-06-05 Juanma Barranquero <lekktu@gmail.com>
- * calc/calc-misc.el (calc-info-goto-node): Use info instead of
- Info-goto-node.
+ * faces.el (face-id): If the argument is a face alias,
+ return the ID of the target face.
- * calc/calc-embed.el (calc-embed-arg): New variable.
- (calc-do-embedded-activate, calc-embedded-activate-formula)
- (calc-embedded-edit, calc-do-embedded-activate): Replace undeclared
- variable by new variable.
- (calc-embedded-make-info): Replace undeclared variable by new
- variable. When selecting region with positive prefix
- argument, use end of previous line instead of beginning of line.
+2007-06-05 Michael Albinus <michael.albinus@gmx.de>
- * calc/calc-aent.el (calc-arg-values): Declare it.
+ * net/socks.el (top): Remove unnecessary copyright line.
- * calc/calc-ext.el (calc-help-map, calc-alg-map, calc-alg-esc-map):
- Declare them.
+2007-06-04 Chong Yidong <cyd@stupidchicken.com>
- * calc/calc-stuff.el (math-decls-cache-tag): Declare it.
+ * longlines.el (longlines-auto-wrap): Handle argument correctly.
- * calc/calc.el (calc-alg-map): Declare it.
+2007-06-04 Michael Albinus <michael.albinus@gmx.de>
- * calc/calcalg2.el (math-decls-cache, math-decls-all): Declare them.
+ * net/socks.el: New file, taken from w3 repository.
+ (top): Update Copyright. Don't load cl.el.
+ (all): Replace `case' by `cond', `string-to-int' by
+ `string-to-number', and `process-kill-without-query' by
+ `set-process-query-on-exit-flag'.
+ (socks-char-int): Remove defalias and all occurrences.
-2005-05-28 Nick Roberts <nickrob@snap.net.nz>
+2007-06-04 Juanma Barranquero <lekktu@gmail.com>
- * progmodes/gdb-ui.el (gdb-all-registers): New variable.
- (gdb-registers-buffer, toggle-gdb-all-registers):
- Toggle display of floating point registers.
- (gdb-registers-mode-map): Bind SPC to toggle-gdb-all-registers.
-
- * progmodes/gud.el (gud-goto-info): Use info. Don't use require.
- (toggle-gud-tooltip-dereference):
- Rename from gud-toggle-tooltip-dereference.
-
-2005-05-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * info.el (Info-goto-node): Revert autoload addition (2004-06-12).
-
-2005-05-27 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-prog.el (calc-kbd-report): Remove.
- (calc-kbd-query): Rewrite.
-
-2005-05-27 Juanma Barranquero <lekktu@gmail.com>
-
- * image.el (image-library-alist): Move to image.c.
- (image-type-available-p): Doc fix.
-
-2005-05-27 Lute Kamstra <lute@gnu.org>
-
- * calc/calc.el (calc):
- * outline.el (outline-1, outline-2, outline-3, outline-4)
- (outline-5, outline-6, outline-7, outline-8):
- * textmodes/dns-mode.el (dns-mode):
- * textmodes/sgml-mode.el (sgml-namespace-face):
- * textmodes/tex-mode.el (superscript, subscript, tex-math-face)
- (tex-verbatim-face, tex-use-reftex):
- * textmodes/texinfo.el (texinfo-heading-face):
- Specify customization group.
-
- * longlines.el: Don't require easy-mmode.
- (longlines-visible-face): Specify customization group.
-
-2005-05-27 Kenichi Handa <handa@m17n.org>
-
- * language/cyrillic.el: Add cyrillic-iso8859-5 characters in the
- encoding table of windows-1251.
-
- * international/ucs-tables.el (ucs-set-table-for-input):
- If translation-table-for-input of a coding system is a symbol, get
- its translation-table property.
-
- * international/code-pages.el: Don't register a coding system into
- non-iso-charset-alist more than once.
- (cp-make-coding-system): Likewise.
-
-2005-05-26 John Wiegley <johnw@newartisans.com>
-
- * eshell/esh-cmd.el (eshell-eval-command): If the return value of
- `eshell-resume-eval' is wrapped in a list, it indicates that the
- command was run asynchronously. In that case, unwrap the value
- before checking the delimiter value.
-
- * eshell/em-cmpl.el (eshell-complete-parse-arguments): If the
- character before a space at the end of a line is \, assume the space
- is part of the last argument rather than a final argument separator.
-
- * eshell/esh-io.el (eshell-get-target): If `eshell-buffer-shorthand'
- is in use, and the target is `t' or `nil' (which are the most common
- values), don't assume that the symbol target is a buffer.
-
-2005-05-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * calendar/calendar.el (calendar-mode-line-format):
- Use mode-line-highlight as mouse-face.
-
- * time.el (display-time-string-forms, display-time-update):
- Use mode-line-highlight as mouse-face.
-
-2005-05-26 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-language-alist): Remove extra defvar.
-
-2005-05-26 Lute Kamstra <lute@gnu.org>
-
- * arc-mode.el (archive-mode):
- * bookmark.el (bookmark-read-annotation-mode)
- (bookmark-edit-annotation-mode, bookmark-bmenu-mode):
- * bs.el (bs-mode):
- * calc/calc-yank.el (calc-edit-mode):
- * calc/calc.el (calc-mode, calc-trail-mode):
- * calculator.el (calculator-mode):
- * chistory.el (command-history-mode):
- * comint.el:
- * cus-edit.el (custom-mode):
- * descr-text.el (describe-text-mode):
- * ebuff-menu.el (Electric-buffer-menu-mode):
- * ediff-util.el (ediff-mode):
- * emacs-lisp/re-builder.el (reb-mode):
- * emulation/vi.el (vi-mode-setup):
- * emulation/ws-mode.el (wordstar-mode):
- * eshell/esh-mode.el (eshell-mode):
- * forms.el (forms-mode):
- * help-mode.el (help-mode):
- * hexl.el (hexl-mode):
- * ibuffer.el (ibuffer-mode):
- * ielm.el (inferior-emacs-lisp-mode):
- * info.el (Info-mode, Info-edit-mode):
- * international/swedish.el:
- * ledit.el (ledit-from-lisp-mode):
- * locate.el (locate-mode):
- * mail/rmail.el (rmail-mode):
- * mail/rmailedit.el (rmail-edit-mode):
- * mail/rmailsum.el (rmail-summary-mode):
- * mail/supercite.el (sc-electric-mode):
- * net/eudc.el (eudc-mode):
- * net/quickurl.el (quickurl-list-mode):
- * net/snmp-mode.el (snmp-mode, snmpv2-mode):
- * obsolete/ooutline.el (outline-mode):
- * obsolete/options.el (Edit-options-mode):
- * obsolete/rnews.el (news-mode):
- * obsolete/rnewspost.el (news-reply-mode):
- * play/5x5.el (5x5-mode):
- * play/decipher.el (decipher-mode, decipher-stats-mode):
- * play/gomoku.el (gomoku-mode):
- * play/snake.el (snake-mode):
- * play/solitaire.el (solitaire-mode):
- * play/tetris.el (tetris-mode):
- * progmodes/ada-mode.el (ada-mode):
- * progmodes/antlr-mode.el (antlr-mode):
- * progmodes/autoconf.el (autoconf-mode):
- * progmodes/dcl-mode.el (dcl-mode):
- * progmodes/delphi.el (delphi-mode):
- * progmodes/ebrowse.el (ebrowse-tree-mode)
- (ebrowse-electric-list-mode, ebrowse-member-mode)
- (ebrowse-electric-position-mode):
- * progmodes/f90.el (f90-mode):
- * progmodes/fortran.el (fortran-mode):
- * progmodes/icon.el (icon-mode):
- * progmodes/idlw-help.el (idlwave-help-mode):
- * progmodes/idlw-shell.el (idlwave-shell-mode):
- * progmodes/idlwave.el (idlwave-mode):
- * progmodes/inf-lisp.el (inferior-lisp-mode):
- * progmodes/m4-mode.el (m4-mode):
- * progmodes/meta-mode.el (metafont-mode, metapost-mode):
- * progmodes/modula2.el (modula-2-mode):
- * progmodes/octave-inf.el (inferior-octave-mode):
- * progmodes/octave-mod.el (octave-mode):
- * progmodes/pascal.el (pascal-mode):
- * progmodes/sh-script.el (sh-mode):
- * progmodes/sql.el (sql-mode, sql-interactive-mode):
- * progmodes/vhdl-mode.el (vhdl-mode):
- * progmodes/xscheme.el (scheme-interaction-mode):
- * replace.el (occur-mode):
- * ses.el (ses-mode):
- * simple.el (completion-list-mode):
- * skeleton.el:
- * speedbar.el (speedbar-mode):
- * term.el (term-mode):
- * terminal.el (terminal-edit-mode):
- * textmodes/reftex-index.el (reftex-index-mode)
- (reftex-index-phrases-mode):
- * textmodes/reftex-sel.el (reftex-select-label-mode)
- (reftex-select-bib-mode):
- * textmodes/reftex-toc.el (reftex-toc-mode):
- * wdired.el (wdired-change-to-wdired-mode):
- * wid-browse.el (widget-browse-mode):
- Use run-mode-hooks.
-
- * array.el (array-mode):
- * calendar/todo-mode.el (todo-mode):
- * man.el (Man-mode):
- * play/landmark.el (lm-mode):
- * play/mpuz.el (mpuz-mode):
- Use kill-all-local-variables and run-mode-hooks.
-
- * subr.el (delay-mode-hooks): Specify indentation.
-
-2005-05-26 Mark A. Hershberger <mah@everybody.org>
-
- * xml.el (xml-substitute-special): Don't die for undefined xml
- entities.
-
-2005-05-26 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-prog.el (calc-user-define-edit): Don't find substring
- of nil.
-
-2005-05-27 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-frame-address):
- Rename from gdb-current-address.
- (gdb-previous-frame-address): Rename from gdb-previous-address.
- (gdb-selected-frame): Rename from gdb-current-frame.
- (gdb-get-selected-frame): Rename from gdb-get-current-frame.
- (gdb-frame-number): Rename from gdb-current-stack-level.
- (gdb-ann3): Match new mode-name for disassembly buffer.
- Extend initialization of variables.
- (gdb-post-prompt): Update disassembly from gdb-frame-handler.
- (gdb-memory-mode): Use mouse-face in header line.
- (gdb-assembler-buffer-name): Call it disassembly and give frame
- in mode line.
- (gdb-source-spec-regexp, gdb-assembler-custom)
- (gdb-invalidate-assembler, gdb-frame-handler):
- Make robust to leading zeroes in address format.
-
-2005-05-26 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-mode): Use `define-derived-mode' to
- define `org-mode'.
- (org-agenda-mode): Use `run-mode-hooks' instead of `run-hooks'.
-
-2005-05-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * log-edit.el (log-edit-changelog-entries): Distinguish between
- filenames like xfns.c and fns.c.
-
-2005-05-25 Luc Teirlinck <teirllm@auburn.edu>
-
- * buff-menu.el (Buffer-menu-revert-function): Improve handling of
- point after reverting.
- (Buffer-menu-make-sort-button): Handle the case where
- `Buffer-menu-use-header-line' is nil.
-
-2005-05-25 Thien-Thi Nguyen <ttn@gnu.org>
-
- * vms-patch.el (vms-magic-right-square-brace, vms-magic-colon):
- New funcs. In minibuffer-local-completion-map bind `]', `/'
- and `:' to them.
-
-2005-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * startup.el (normal-top-level): Allow modification of load-path while
- we're iterating over it.
-
-2005-05-25 Juanma Barranquero <lekktu@gmail.com>
-
- * thumbs.el (thumbs-thumbsdir-max-size, thumbs-temp-file)
- (thumbs-cleanup-thumbsdir, thumbs-call-convert)
- (thumbs-resize-interactive, thumbs-insert-image)
- (thumbs-insert-thumb, thumbs-dired-show-marked)
- (thumbs-find-image-at-point, thumbs-delete-images)
- (thumbs-rename-images, thumbs-next-image, thumbs-dired-setroot)
- (thumbs-increment-image-size, thumbs-decrement-image-size):
+ * progmodes/compile.el (compilation-find-file, compilation-handle-exit):
Fix typos in docstrings.
+ (compilation-search-path, compilation-buffer-name-function): Doc fixes.
+ (compilation-finish-function): Fix typo in obsolescence declaration.
-2005-05-24 Andre Spiegel <spiegel@gnu.org>
-
- * progmodes/cperl-mode.el (cperl-vc-header-alist): Obsolete.
- (cperl-vc-rcs-header, cperl-vc-sccs-header): New user options.
- (cperl-mode): Use them.
-
-2005-05-24 Juanma Barranquero <lekktu@gmail.com>
-
- * window.el (quit-window, shrink-window-if-larger-than-buffer):
- Doc fixes.
-
-2005-05-24 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-inferior-io-mode-map):
- Bind C-d to gdb-inferior-io-eof.
-
- * dired.el (dired-dnd-popup-notice): Use message-box.
-
-2005-05-23 Masatake YAMATO <jet@gyve.org>
-
- * bindings.el (mode-line-major-mode-keymap):
- Bind [mode-line down-mouse-1] to `mouse-major-mode-menu'.
-
- * faces.el (mode-line-highlight): New face.
-
- * ruler-mode.el (ruler-mode-ruler): Use mode-line-highlight
- as mouse-face.
-
- * bindings.el (top-level, help-echo, mode-line-modified)
- (mode-line-mule-info, mode-line-eol-desc): Use mode-line-highlight
- as mouse-face.
-
-2005-05-23 Juanma Barranquero <lekktu@gmail.com>
-
- * progmodes/cc-engine.el (c-guess-basic-syntax):
- Remove spurious call to `zerop'.
-
- * emacs-lisp/cl.el (acons, pairlis): Add docstring.
-
-2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
-
- CC Mode update to 5.30.10:
-
- * progmodes/cc-fonts.el (c-font-lock-declarators): Fix bug where
- the point could go past the limit in decoration level 2, thereby
- causing errors during interactive fontification.
-
- * progmodes/cc-mode.el (c-make-inherited-keymap): Fix cc-bytecomp
- bug when the file is evaluated interactively.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Handle operator
- declarations somewhat better in C++.
-
- * progmodes/cc-styles.el, cc-mode.el (c-run-mode-hooks):
- New helper macro to make use of `run-mode-hooks'
- which has been added in Emacs 21.1.
- (c-mode, c++-mode, objc-mode, java-mode, idl-mode, pike-mode)
- (awk-mode): Use it.
- (make-local-hook): Suppress warning about obsoleteness.
-
- * progmodes/cc-engine.el, cc-align.el, cc-cmds.el
- (c-append-backslashes-forward, c-delete-backslashes-forward)
- (c-find-decl-spots, c-semi&comma-no-newlines-before-nonblanks):
- Compensate for return value from `forward-line' when it has moved
- but not to a different line due to eob.
-
- * progmodes/cc-engine.el (c-guess-basic-syntax): Fix anchoring in
- `objc-method-intro' and `objc-method-args-cont'.
-
-2005-05-23 Alan Mackenzie <bug-cc-mode@gnu.org>
-
- CC Mode update to 5.30.10:
-
- * progmodes/cc-mode.el, cc-engine.el, cc-align.el: Change the FSF's
- address in the copyright statement. Incidentally, change "along with
- GNU Emacs" to "along with this program" where it occurs.
-
- * progmodes/cc-mode.el: Add a fourth parameter `t' to the awk-mode
- autoload, so that it is interactive, hence can be found by M-x awk-mode
- whilst cc-mode is yet to be loaded. Reported by Glenn Morris
- <gmorris+emacs@ast.cam.ac.uk>.
-
- * progmodes/cc-awk.el: Add character classes (e.g. "[:alpha:]") into AWK
- Mode's regexps.
-
-2005-05-23 Kevin Ryde <user42@zip.com.au>
-
- * progmodes/cc-align.el (c-lineup-argcont): Ignore conses for {} pairs
- from c-parse-state, to avoid a lisp error (on bad code).
-
-2005-05-23 Lute Kamstra <lute@gnu.org>
-
- * subr.el (font-lock-defaults): Remove defvar as it's already
- defined in font-core.el.
-
- * font-lock.el (font-lock-beginning-of-syntax-function): Fix docstring.
-
-2005-05-23 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-info-locals-handler): Make regexps
- more general and work when GDB variable "print pretty" is on,
- as with Emacs, for example.
-
-2005-05-22 Luc Teirlinck <teirllm@auburn.edu>
-
- * font-core.el: Update comment.
+2007-06-03 Sam Steingold <sds@gnu.org>
- * emacs-lisp/easy-mmode.el (define-global-minor-mode):
- Use `after-change-major-mode-hook' instead of `find-file-hook'.
+ * progmodes/compile.el: Add TIMESTAMP to the LOC data structure, to
+ handle unending automatic recompilation of changed files (`omake -P').
+ (compilation-loop): VISITED is now 5th CDR.
+ (compilation-next-error-function): Set TIMESTAMP.
- * buff-menu.el (Buffer-menu-mode): Use `run-mode-hooks'.
+2007-06-03 Sam Steingold <sds@gnu.org>
-2005-05-22 Eli Zaretskii <eliz@gnu.org>
+ * files.el (kill-buffer-ask): New function.
+ (kill-some-buffers): Use it.
+ (kill-matching-buffers): New user command.
- * simple.el (yank, yank-pop): Mention `yank-excluded-properties'
- and `yank-handler' in the doc strings.
+2007-06-01 David Kastrup <dak@gnu.org>
-2005-05-22 Stefan Monnier <monnier@iro.umontreal.ca>
+ * dired.el (dired-recursive-deletes, dired-recursive-copies):
+ Change default to `top'.
- * emacs-lisp/cl.el (eql): Remove. It's a builtin already.
+2007-05-31 Richard Stallman <rms@gnu.org>
-2005-05-22 Richard M. Stallman <rms@gnu.org>
+ * dired.el (dired-do-flagged-delete, dired-do-delete): Doc fix.
- * help.el (describe-key): Move print-help-return-message call
- out of conditional.
+2007-05-31 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/etags.el (list-tags): Use with-no-warnings.
+ * textmodes/css-mode.el: New file.
- * mail/smtpmail.el (smtpmail-open-stream): Use with-no-warnings.
- (smtpmail-send-queued-mail): Avoid beginning-of-buffer.
- (starttls-extra-args, starttls-extra-arguments): Add defvars.
+2007-05-30 Michael Olson <mwolson@gnu.org>
- * mail/mailalias.el (mail-get-names): Avoid beginning-of-buffer.
+ * emacs-lisp/tq.el (tq-queue-pop): Stifle error when a process has
+ died and we are trying to send a signal to it. The program using
+ tq.el should periodically check to see whether the process has
+ died and react appropriately -- this is not the responsibility of
+ tq.el, and is consistent with the rest of the tq.el source code.
- * language/viet-util.el (viet-viscii-nonascii-translation-table):
- Add defvar.
+2007-05-29 Martin Rudalics <rudalics@gmx.at>
- * emulation/viper-ex.el (viper-ex-work-buf, viper-ex-print-buf):
- Use defvar, not defconst.
+ * textmodes/table.el (table--point-entered-cell-function)
+ (table--point-left-cell-function):
+ Bind `inhibit-point-motion-hooks' to t.
- * hexl.el (hexl-follow-line): Use with-no-warnings.
+2007-05-29 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
- * emulation/tpu-extras.el: Use write-file-functions instead of
- write-file-hooks.
+ * emacs-lisp/rx.el (rx): Doc fix.
- * dired.el (dired-font-lock-keywords): Fontify files with junk
- extensions even if marked by -F.
+2007-05-28 Juanma Barranquero <lekktu@gmail.com>
-2005-05-22 Juanma Barranquero <lekktu@gmail.com>
+ * progmodes/idlwave.el (idlwave-routines): Fix typo in docstring.
- * emacs-lisp/cl.el (pushnew, cl-macroexpand, floatp-safe, plusp)
- (minusp, oddp, evenp, mapcar*, list*, copy-list, adjoin, subst):
- * emacs-lisp/cl-extra.el (coerce, map, maplist, cl-mapc, mapl)
- (mapcan, mapcon, some, every, notany, notevery, signum, isqrt)
- (concatenate, list-length, get*, getf, cl-remprop):
- * emacs-lisp/cl-macs.el (function*, case, ecase, typecase)
- (etypecase, progv, lexical-let, lexical-let*)
- (multiple-value-bind, multiple-value-setq, shiftf):
- Improve argument/docstring consistency.
+2007-05-28 Michael Albinus <michael.albinus@gmx.de>
- * subr.el (focus-frame, unfocus-frame): Revert deletion on 2005-05-01.
+ Sync with Tramp 2.0.56.
-2005-05-22 Andre Spiegel <spiegel@gnu.org>
+ * net/tramp.el:
+ * net/tramp-ftp.el:
+ * net/tramp-smb.el:
+ * net/tramp-util.el:
+ * net/tramp-vc.el:
+ Don't load cl.el, because that pollutes the namespace. Replace cl
+ macros by their implementations where necessary. Requested by
+ Richard Stallman <rms@gnu.org>.
- * vc-cvs.el (vc-cvs-checkout-model): Handle the case where FILE
+ * net/tramp.el (top): Make `set-buffer-multibyte' an alias if it
doesn't exist.
+ (with-parsed-tramp-file-name): Protect debug spec during compilation.
+ (tramp-handle-insert-directory): Check (featurep 'ls-lisp).
+ (tramp-file-name-p, tramp-file-name-multi-method)
+ (tramp-file-name-method, tramp-file-name-user)
+ (tramp-file-name-host, tramp-file-name-localname): New defuns,
+ replacing defstruct `tramp-file-name'.
+ (tramp-handle-file-remote-p, tramp-completion-dissect-file-name1)
+ (tramp-dissect-file-name, tramp-dissect-multi-file-name):
+ Apply `vector' instead of `make-tramp-file-name'.
+ (tramp-handle-make-auto-save-file-name):
+ Apply `tramp-temporary-file-directory' for compatibility reasons.
+ (tramp-completion-mode): Use `natnump' instead of `wholenump'
+ because of XEmacs.
+ (tramp-completion-mode): `last-input-event' is nil when XEmacs is
+ started.
- * vc.el (vc-trunk-p): Add autoload cookie. The function is used in
- vc-rcs.el when vc-mistrust-permissions is t, which is not the default.
-
-2005-05-22 Nick Roberts <nickrob@snap.net.nz>
-
- * emacs-lisp/bytecomp.el: Remove make-obsolete-variable for
- already deleted variables: auto-fill-hook, blink-paren-hook,
- lisp-indent-hook, inhibit-local-variables, unread-command-event,
- suspend-hooks, comment-indent-hook, meta-flag,
- before-change-function, after-change-function,
- font-lock-doc-string-face.
-
-2005-05-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/derived.el (define-derived-mode): Doc fix.
-
-2005-05-21 Eli Zaretskii <eliz@gnu.org>
-
- * mail/rmail.el (rmail-reply): Filter the list in reply-to through
- rmail-dont-reply-to.
-
-2005-05-21 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
-
- * mail/sendmail.el (mail-send): Use [[:space:]] instead of a
- literal blank when splitting new-header-values.
-
-2005-05-21 Matt Hodges <MPHodges@member.fsf.org>
-
- * calendar/cal-menu.el (cal-menu-update): Add separator as a
- string so that tmm doesn't create a completion entry for it.
-
- * textmodes/table.el (table-disable-menu): Ditto.
-
-2005-05-21 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/idlwave.el (idlwave-doc-header): Use insert-file-contents.
-
- * progmodes/flymake.el (flymake-makehash): Use with-no-warnings.
-
- * net/rcompile.el (remote-compile): Use compilation-start.
-
- * tmm.el (tmm-shortcut): Avoid using beginning-of-buffer.
-
-2005-05-21 Daniel Pfeiffer <occitan@esperanto.org>
-
- * files.el (auto-mode-alist): Check GNUmakefile before makefile.
- Default to makefile-bsdmake-mode on BSD systems.
-
- * imenu.el (imenu-generic-expression, imenu--generic-function'):
- REGEXP may also be a search function now. The part of doc-string
- for describing the structure was 95% identical to that of
- `imenu--generic-function'. Unify it there.
-
- * progmodes/make-mode.el (makefile-imenu-generic-expression):
- Use function to find dependencies, because regexp alone is so complex,
- it easily goes into an endless loop.
- (makefile-makepp-mode): Also add submenu for Perl functions
- defined in the makefile.
- (makefile-bsdmake-mode): Special imenu-generic-expression no
- longer needed, due to function call.
- (makefile-match-dependency): Take BOUND into account when checking
- if we're through.
-
-2005-05-20 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-units.el (calc-invalidate-units-table):
- Use inhibit-read-only.
- (math-build-units-table-buffer): Use view-mode.
-
-2005-05-20 David Kastrup <dak@gnu.org>
-
- * emacs-lisp/easymenu.el (easy-menu-add): Correct docstring since
- easy-menu-add is not a nop on Emacs; and clarify when to call it.
-
-2005-05-20 Lute Kamstra <lute@gnu.org>
-
- * diff-mode.el (diff-header-face, diff-file-header-face)
- (diff-index-face, diff-hunk-header-face, diff-removed-face)
- (diff-added-face, diff-changed-face, diff-function-face)
- (diff-context-face, diff-nonexistent-face): Put them in the
- diff-mode customization group.
-
-2005-05-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/vhdl-mode.el (vhdl-font-lock-match-item): Simplify regexp.
-
- * progmodes/sh-script.el (sh-mode, sh-get-word): Minor regexp fixes.
-
- * font-lock.el (lisp-font-lock-keywords-2): Don't error.
- Minor regexp-optimization.
-
-2005-05-20 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda-toggle-time-grid): New command.
- (org-agenda-use-time-grid, org-agenda-time-grid): New options.
- (org-agenda-add-time-grid-maybe): New function.
- (org-agenda): Call `org-agenda-add-time-grid-maybe'.
- (org-table-create): `dotimes' instead of `mapcar'.
- (org-xor): Simplify implementation.
- (org-agenda): `inhibit-redisplay' turned on.
- (org-agenda-change-all-lines): Use `org-format-agenda-item' to get
- a consistent line after a state change.
- (org-agenda-remove-times-when-in-prefix): New option.
- (org-prefix-has-time): New variable.
- (org-parse-time-string): Optional argument NODEFAULT.
- (org-format-agenda-item): Parse items for time-of-day
- specifications and move these into the prefix if possible.
- (org-agenda-priority): Get current heading, not previous heading
- during agenda remote editing.
-
-2005-05-20 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/cl-seq.el (reduce, fill, replace, remove*)
- (remove-if, remove-if-not, delete*, delete-if, delete-if-not)
- (remove-duplicates, delete-duplicates, substitute)
- (substitute-if, substitute-if-not, nsubstitute, nsubstitute-if)
- (nsubstitute-if-not, find, find-if, find-if-not, position)
- (position-if, position-if-not, count, count-if, count-if-not)
- (mismatch, search, sort*, stable-sort, merge, member*)
- (member-if, member-if-not, assoc*, assoc-if, assoc-if-not)
- (rassoc*, rassoc-if, rassoc-if-not, union, nunion)
- (intersection, nintersection, set-difference, nset-difference)
- (set-exclusive-or, nset-exclusive-or, subsetp, subst-if)
- (subst-if-not, nsubst, nsubst-if, nsubst-if-not, sublis)
- (nsublis, tree-equal): Improve argument/docstring consistency.
-
- * subr.el (send-string, send-region): Remove obsolescence declaration.
- (window-dot, set-window-dot, read-input, show-buffer)
- (eval-current-buffer, string-to-int):
- Add release number to obsolescence declarations.
-
-2005-05-19 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-magic-forward-char): Enter ido-find-file at end of input.
- (ido-magic-backward-char): Enter ido-switch-buffer at start of input.
-
-2005-05-20 Matt Hodges <MPHodges@member.fsf.org>
-
- * faces.el (list-faces-display): Make back button respect optional
- regexp arg.
-
-2005-05-19 Juanma Barranquero <lekktu@gmail.com>
-
- * calculator.el (calculator-radix-grouping-mode)
- (calculator-radix-grouping-digits, calculator-displayer)
- (calculator-radix-grouping-separator, calculator-copy-displayer):
- * dabbrev.el (dabbrev-search-these-buffers-only):
- * diff-mode.el (diff-jump-to-old-file, diff-update-on-the-fly)
- (diff-advance-after-apply-hunk, diff-mode-hook)
- (diff-minor-mode-prefix):
- * imenu.el (imenu-use-popup-menu):
- * jit-lock.el (jit-lock-context-time):
- * newcomment.el (comment-fill-column, comment-column)
- (comment-style, comment-padding, comment-multi-line)
- (comment-empty-lines, comment-auto-fill-only-comments):
- * reveal.el (reveal-around-mark):
- * uniquify.el (uniquify-buffer-name-style)
- (uniquify-after-kill-buffer-p)
- (uniquify-ask-about-buffer-names-p, uniquify-ignore-buffers-re)
- (uniquify-min-dir-content, uniquify-separator)
- (uniquify-trailing-separator-p, uniquify-strip-common-suffix):
- * w32-vars.el (w32-fixed-font-alist):
- * emacs-lisp/testcover.el (testcover-potentially-1value-functions):
- * obsolete/rsz-mini.el (resize-minibuffer-frame-max-height):
- * progmodes/antlr-mode.el (antlr-font-lock-maximum-decoration):
- * progmodes/perl-mode.el (perl-indent-level)
- (perl-continued-statement-offset, perl-continued-brace-offset)
- (perl-brace-offset, perl-brace-imaginary-offset)
- (perl-label-offset, perl-indent-continued-arguments)
- (perl-tab-always-indent, perl-tab-to-comment, perl-nochange):
- * progmodes/tcl.el (tcl-indent-level)
- (tcl-continued-indent-level, tcl-auto-newline)
- (tcl-tab-always-indent, tcl-electric-hash-style)
- (tcl-help-directory-list, tcl-use-smart-word-finder)
- (tcl-application, tcl-command-switches, tcl-prompt-regexp)
- (inferior-tcl-source-command):
- * textmodes/fill.el (enable-kinsoku):
- * textmodes/reftex-vars.el (reftex-index-phrases-wrap-long-lines):
- * textmodes/table.el (table-yank-handler):
- Specify missing group (and type, if simple) in defcustom.
-
-2005-05-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * progmodes/compile.el (compilation-finish-function): Fix defvar.
-
-2005-05-19 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/make-mode.el (makefile-mode): Use run-mode-hooks.
-
- * subr.el (event-basic-type): Don't get an error.
- (left-fringe-p): Function deleted.
-
- * buff-menu.el (Buffer-menu-buffer-face): In group Buffer-menu.
- (list-buffers-noselect): Set `font-lock-face' property, not `face'.
-
- * dired-aux.el (dired-copy-file-recursive): Handle symlinks
- in recursive copy.
-
- * frame.el (show-trailing-whitespace): In group `whitespace-faces'.
-
- * emacs-lisp/byte-run.el (eval-when-compile): Doc fix.
-
- * emacs-lisp/bytecomp.el
- (byte-compile-file-form-custom-declare-variable):
- Call byte-compile-nogroup-warn if appropriate.
-
- * progmodes/compile.el (compilation-finish-function): Mark obsolete.
- (compilation-set-window): Don't call left-fringe-p; do it directly.
-
-2005-05-19 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-graph.el (calc-graph-format-data): Make sure
- var-PlotRejects is bound before trying to check its value.
-
-2005-05-19 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex.el (reftex-isearch-minor-mode): Move the
- definition of this variable from reftex-global.el to reftex.el,
- because it is needed in the menu.
-
-2005-05-19 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/copyright.el (copyright-fix-years): Make sure all
- years are fixed. Don't insert a space after a dash.
-
-2005-05-19 Kim F. Storm <storm@cua.dk>
-
- * emulation/crisp.el (crisp-home, crisp-end): Put CUA property.
-
-2005-05-19 Daniel Pfeiffer <occitan@esperanto.org>
-
- * font-lock.el (lisp-font-lock-keywords-2): Do \\) only in
- strings, because (eq ... ?\\) is fairly frequent.
-
- * progmodes/make-mode.el (makefile-add-this-line-targets):
- Simplify and integrate into `makefile-pickup-targets'.
- (makefile-add-this-line-macro): Simplify and integrate into
- `makefile-pickup-macros.
- (makefile-pickup-filenames-as-targets): Simplify.
- (makefile-previous-dependency, makefile-match-dependency):
- Don't stumble over `::'.
-
-2005-05-19 Nick Roberts <nickrob@snap.net.nz>
-
- * subr.el (post-command-idle-hook, post-command-idle-delay):
- Remove obsoletion of post-command-idle-hook and
- post-command-idle-delay.
-
- * faces.el (list-faces-display): Provide button when describe-face
- is called to take user back to the list of faces.
-
- * help-fns.el (describe-variable): Remove hyperlinks in a
- variable's value as these are quite frequently inappropriate.
-
- * follow.el (follow-submit-feedback, follow-mode):
- Remove references to post-command-idle-hook.
-
-2005-05-18 Daniel Pfeiffer <occitan@esperanto.org>
-
- * progmodes/make-mode.el (makefile-previous-dependency)
- (makefile-match-dependency): Check for := (and in bsd mode also
- !=) to give a better result, even when font-lock is not on.
-
-2005-05-18 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-help.el (calc-s-prefix-help):
- Add `calc-copy-special-constant' to help string.
-
-2005-05-18 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/eldoc.el (eldoc-mode): Doc fix.
-
-2005-05-18 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-poly.el (math-factor-poly-coefs): Make sure the terms
- in linear factors are in proper order.
-
-2005-05-18 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex-vars.el (reftex-cite-format-builtin):
- Support for jurabib.
-
- * textmodes/reftex.el (featurep): Define aliases for overlay
- commands, for XEmacs compatibility, and use these aliases in
- overlay initializations.
- (reftex-highlight): Use `reftex-move-overlay'.
- (reftex-unhighlight): Use `reftex-delete-overlay'.
- (reftex-uniq): Function removed. Use `reftex-uniquify' instead.
- (reftex-access-search-path): Use `reftex-uniquify' instead of
- `reftex-uniq'.
-
- * textmodes/reftex-sel.el (reftex-select-unmark): Overlay
- `before-string' property modification enables for Emacs as well.
- (reftex-select-item): Use `reftex-delete-overlay'.
- (reftex-select-mark): Use `reftex-make-overlay' and
- `reftex-overlay-put'.
- (reftex-select-unmark): Use `reftex-delete-overlay' and
- `reftex-overlay-put'.
-
-2005-05-18 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/lisp.el (check-parens): Fix docstring.
-
-2005-05-18 Juanma Barranquero <lekktu@gmail.com>
-
- * add-log.el (add-change-log-entry):
- * array.el (array-make-template, array-reconfigure-rows)
- (array-init-max-row, array-init-max-column)
- (array-init-columns-per-line, array-init-field-width):
- * replace.el (replace-match-maybe-edit, perform-replace):
- * textmodes/spell.el (spell-region):
- Replace `read-input' by `read-string'.
-
- * forms.el (forms-mode):
- * finder.el (finder-compile-keywords):
- * shadowfile.el (shadow-read-files):
- Replace `eval-current-buffer' by `eval-buffer'.
-
- * terminal.el (te-pass-through):
- * net/ange-ftp.el (ange-ftp-process-filter, ange-ftp-gwp-filter)
- (ange-ftp-raw-send-cmd):
- * net/telnet.el (telnet-interrupt-subjob, telnet-c-z)
- (send-process-next-char, telnet-initial-filter, telnet):
- Replace `send-string' by `process-send-string'.
-
- * progmodes/prolog.el (inferior-prolog-mode): Doc fix.
- (prolog-consult-region): Replace `send-string' by
- `process-send-string'; replace `send-region' by `process-send-region'.
-
- * progmodes/delphi.el (delphi-log-msg):
- Replace `set-window-dot' by `set-window-point'.
-
- * subr.el (window-dot, set-window-dot, read-input, send-string)
- (send-region, show-buffer, eval-current-buffer):
- Make really obsolete, as the comment says.
-
-2005-05-17 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-use-hyper-key): Doc fix.
- (cua--init-keymaps): Bind C-return instead of S-return to set
- rectangle mark.
-
- * emulation/cua-rect.el (cua--init-rectangles): Bind C-return
- instead of S-return to toggle/clear rectangle mark.
-
-2005-05-17 Daniel Pfeiffer <occitan@esperanto.org>
-
- * progmodes/make-mode.el (makefile-dependency-skip): New variable.
- (makefile-macroassign-regex, makefile-make-font-lock-keywords):
- Also fontify plain strings assigned to variables, mostly so that a
- colon has a face and is thus not taken as a dependency separator.
- (makefile-previous-dependency): Inline the new matcher, because it
- is too complex to work in both directions.
- (makefile-match-dependency): Eliminate `backward' arg (see above).
- Completely reimplemented so as to not sometimes go into an endless
- loop. It should also be more efficient, because first it only
- searches for `:', instead of applying the very complex regexp.
- (makefile-mode): Cancel `font-lock-support-mode', because blocks
- to be fontified in one piece can be too long for JIT.
- Makefiles are never *that* big.
-
-2005-05-17 Reiner Steib <Reiner.Steib@gmx.de>
-
- * dired.el (dired-mode): Simplify.
-
-2005-05-17 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Don't generate a
- defcustom for the mode hook variable.
-
- * emacs-lisp/authors.el (authors): Do parse the ChangeLogs of the
- Emacs Lisp Reference Manual.
-
-2005-05-17 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/cl.el (eql, floatp-safe, plusp, minusp, oddp)
- (evenp, list*):
- * emacs-lisp/cl-macs.el (macrolet, symbol-macrolet):
- * emacs-lisp/cl-seq.el (subsetp, tree-equal): Doc fixes.
-
- * net/tramp-smb.el (tramp-smb-open-connection):
- Pass `tramp-chunksize' as fifth (required) argument.
-
-2005-05-16 Daniel Pfeiffer <occitan@esperanto.org>
-
- * font-lock.el (lisp-font-lock-keywords-1):
- Set `font-lock-negation-char-face' for [^...] char group.
- (lisp-font-lock-keywords-2): Highlight regexp's \\( \\| \\).
-
- * progmodes/make-mode.el (makefile-dependency-regex): Turn it into
- a var, and refine it to mask one more level of nested vars.
- (makefile-rule-action-regex): Turn it into a var, and refine it so
- it recognizes backslashed continuation lines as belonging to the
- same command.
- (makefile-macroassign-regex): Refine it so it recognizes
- backslashed continuation lines as belonging to the same command.
- (makefile-var-use-regex): Don't look at the next char, because it
- might be the same one to be skipped by the initial [^$], leading
- to an overlooked variable use.
- (makefile-make-font-lock-keywords): Remove two parameters, which
- are now variables that some of the modes set locally.
- Handle dependency and rule action matching through functions, because
- regexps alone match too often. Dependency matching now comes
- last, so it can check, whether a colon already matched something else.
- (makefile-mode): Inform that font-lock improves makefile parsing
- capabilities.
- (makefile-match-dependency, makefile-match-action): New functions.
-
-2005-05-16 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/cl-extra.el (equalp): Doc fix.
-
- * align.el (align-regexp):
- * ansi-color.el (ansi-color-get-face):
- * array.el (array-reconfigure-rows, array-init-max-row)
- (array-init-max-column, array-init-columns-per-line)
- (array-init-field-width):
- * dired-aux.el (dired-trample-file-versions):
- * dired-x.el (dired-mark-sexp):
- * ediff-diff.el (ediff-extract-diffs, ediff-get-diff3-group):
- * edmacro.el (edmacro-finish-edit, edmacro-parse-keys):
- * emerge.el (emerge-extract-diffs, emerge-get-diff3-group):
- * faces.el (face-read-integer):
- * files.el (backup-extract-version, insert-directory):
- * hexl.el (hexl-insert-decimal-char):
- * server.el (server-process-filter):
- * shell.el (shell-extract-num):
- * startup.el (command-line-1):
- * term.el (term-command-hook):
- * time-stamp.el (time-stamp, time-stamp-string-preprocess)
- (time-stamp-do-number):
- * time.el (display-time-update):
- * timezone.el (timezone-parse-date, timezone-zone-to-minute)
- (timezone-fix-time):
- * vms-patch.el (vms-suspend-resume-hook):
- * calendar/appt.el (appt-convert-time):
- * calendar/cal-bahai.el (mark-bahai-diary-entries):
- * calendar/cal-hebrew.el (mark-hebrew-diary-entries):
- * calendar/cal-islam.el (mark-islamic-diary-entries):
- * calendar/calendar.el (calendar-cursor-to-date)
- (calendar-star-date):
- * calendar/diary-lib.el (diary-attrtype-convert)
- (mark-diary-entries, diary-entry-time):
- * calendar/solar.el (solar-get-number):
- * emacs-lisp/lisp-mnt.el (lm-last-modified-date):
- * emacs-lisp/re-builder.el (reb-display-subexp):
- * emulation/edt.el (edt-set-scroll-margins):
- * emulation/tpu-extras.el (tpu-set-scroll-margins):
- * emulation/vip.el (vip-get-ex-token, vip-get-ex-buffer)
- (vip-get-ex-count):
- * emulation/viper-ex.el (viper-get-ex-token)
- (viper-get-ex-buffer, viper-get-ex-count, ex-next):
- * international/fontset.el (fontset-plain-name):
- * mail/feedmail.el (feedmail-look-at-queue-directory):
- * mail/mailalias.el (mail-get-names):
- * mail/rmail.el (rmail-convert-to-babyl-format):
- * mail/rmailsum.el (rmail-make-basic-summary-line)
- (rmail-summary-next-same-subject, rmail-summary-rmail-update)
- (rmail-summary-goto-msg):
- * mail/smtpmail.el (smtpmail-read-response):
- * net/ange-ftp.el (ange-ftp-guess-hash-mark-size)
- (ange-ftp-vms-add-file-entry):
- * play/gametree.el (gametree-looking-at-ply)
- (gametree-current-branch-score):
- * progmodes/ada-xref.el (ada-prj-find-prj-file)
- (ada-xref-find-in-modified-ali, ada-find-in-src-path):
- * progmodes/cperl-mode.el (condition-case):
- * progmodes/ebrowse.el (ebrowse-set-tree-indentation)
- (ebrowse-set-member-buffer-column-width)
- (ebrowse-select-1st-to-9nth):
- * progmodes/etags.el (etags-snarf-tag):
- * progmodes/flymake.el (flymake-parse-line):
- * progmodes/idlw-shell.el (idlwave-shell-parse-line)
- (idlwave-shell-filter-bp, idlwave-shell-goto-next-error)
- (idlwave-shell-menu-def):
- * progmodes/ps-mode.el (ps-run-goto-error):
- * progmodes/vhdl-mode.el (vhdl-read-offset, vhdl-load-cache)
- (vhdl-speedbar-contract-level):
- * term/mac-win.el (x-handle-numeric-switch):
- * term/sun-mouse.el (sun-get-frame-data):
- * term/w32-win.el (x-handle-numeric-switch):
- * term/x-win.el (x-handle-numeric-switch):
- * textmodes/ispell.el (ispell-parse-output):
- * textmodes/nroff-mode.el (nroff-outline-level):
- * textmodes/reftex-cite.el (reftex-bib-sort-year)
- (reftex-bib-sort-year-reverse, reftex-format-citation):
- * textmodes/reftex-parse.el (reftex-init-section-numbers)
- (reftex-section-number):
- * textmodes/texinfmt.el (texinfo-paragraphindent):
- Replace `string-to-int' by `string-to-number'.
-
- * international/latexenc.el: Add page marker to force the "Local
- Variables:" string out of the last page.
-
-2005-05-16 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-tooltip-mode): Add gud prefix to
- tooltip-change-major-mode.
- (gud-tooltip-print-command): Remove case where gud-minor-mode
- is gdb ("--fullname").
- (gud-tooltip-tips): Turn GUD tooltips off for this case and
- explain to user.
-
-2005-05-16 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-store.el (calc-copy-special-constant): New function.
-
- * calc/calc-ext.el (calc-init-extensions): Add binding for
- `calc-copy-special-constant'.
-
- * calc/calc-prog.el (calc-edit-format-macro-buffer): Add a case
- for the `calc-copy-special-constant' command.
-
-2005-05-16 Nick Roberts <nickrob@snap.net.nz>
-
- * subr.el (left-fringe-p): New function.
-
- * progmodes/compile.el (compilation-setup): Set local value of
- overlay-arrow-string to "" always.
- (compilation-set-window): Left fringe then don't scroll.
- No left fringe then no arrow and scroll message to top.
- (compilation-context-lines): Adjust doc string accordingly.
-
-2005-05-16 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-magic-forward-char, ido-magic-backward-char)
- (ido-magic-delete-char): New commands for C-f, C-b, C-d.
- (ido-wide-find-dir-or-delete-dir): New command for M-d.
- (ido-define-mode-map): Bind them. Add C-x prefix to fallback commands.
- (ido-read-file-name): Handle commands with ido property value
- equal to find-file as reading a file name, to allow C-d to enter dired.
- (ibuffer-find-file): Add ido property with value find-file.
-
-2005-05-15 Kim F. Storm <storm@cua.dk>
-
- * subr.el (open-network-stream-nowait): Remove.
- (open-network-stream-server): Remove.
-
-2005-05-15 Richard M. Stallman <rms@gnu.org>
-
- * faces.el (describe-face): Output a definition link button.
-
- * help-mode.el (help-face-def): New button type.
-
- * emacs-lisp/copyright.el (copyright-fix-years):
- Match properly if the first year is 2-digit.
- Don't mess up the whitespace after the years by filling.
-
- * dired-aux.el (dired-mark-confirm):
- Pass t to dired-get-marked-files for DISTINGUISH-ONE-MARKED.
-
- * dired.el (dired-map-over-marks): New arg DISTINGUISH-ONE-MARKED.
- (dired-get-marked-files): New arg DISTINGUISH-ONE-MARKED.
- (dired-mark-pop-up): Handle FILES = (t FILE) specially.
-
- * emacs-lisp/lisp-mode.el (lisp-mode-variables):
- Set font-lock-comment-start-skip.
-
- * font-lock.el (font-lock-comment-start-skip): New variable.
- (font-lock-comment-end-skip): New variable.
- (font-lock-fontify-syntactically-region): Use them if non-nil.
-
-2005-05-15 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-store.el (calc-store-value): Return a string rather
- than display it as a message.
- Use calc-var-name for variable name.
- (calc-store-into): Add the result of calc-store-value to message.
- (calc-copy-variable): Add a message.
- (calc-store-exchange): Improve error messages.
- (calc-store-binary, calc-store-map): Don't reset the values of
- special constants.
-
-2005-05-14 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/derived.el (define-derived-mode): Add link to Elisp
- manual to docstring.
-
- * files.el (hack-local-variables-confirm): Add STRING argument.
- Make the function handle non file visiting buffers correctly.
- (hack-local-variables-prop-line, hack-local-variables)
- (hack-one-local-variable): Use STRING arg of
- `hack-local-variables-confirm'.
-
-2005-05-14 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.49.
-
- * net/tramp.el (tramp-handle-dired-call-process)
- (tramp-handle-insert-directory):`insert-buffer' cannot be used
- because the contents of the Tramp buffer is changed before
- insertion (`expand-file' and alike).
- (tramp-handle-insert-directory): If `localname' has an empty
- nondirectory name, it must not be quoted.
- (tramp-pre-connection): Add parameter CHUNKSIZE. Make local
- variable `tramp-chunksize'. Change callees.
- (tramp-open-connection-setup-interactive-shell): Check remote host
- for buggy `send-process-string' implementation.
- Set `tramp-chunksize' if found. Reported by Michael Kifer
- <kifer@cs.sunysb.edu> (and a lot of other people all the years).
- (tramp-handle-shell-command): `insert-buffer' cannot be used
- because the contents of the Tramp buffer is changed before
- insertion (`expand-file' and alike). Reported by Fr,Ai(Bd,Ai(Bric Bothamy
- <frederic.bothamy@free.fr>.
- (tramp-set-auto-save): Actions should be done for Tramp file name
- handler only. Ange-FTP has its own auto-save mechanism.
- Reported by Richard G. Bielawski <Richard.G.Bielawski@wellsfargo.com>.
- (tramp-set-auto-save-file-modes): Set file modes of
- `buffer-auto-save-file-name' to ?\600 as fallback solution.
- Reported by Ferenc Wagner <wferi@tba.elte.hu>.
- (tramp-bug): Remove obsolete variable.
- (tramp-append-tramp-buffers): Rewrite partly. More suitable check
- for presence of `mml-mode'. Make it running for older Emacsen as well.
-
-2005-05-14 John Paul Wallington <jpw@pobox.com>
-
- * ibuf-ext.el (define-ibuffer-filter filename):
- If `dired-directory' is a list, use its car.
-
-2005-05-14 Daniel Brockman <daniel@brockman.se> (tiny change)
-
- * ibuffer.el (define-ibuffer-column filename):
- If `dired-directory' is a list, use its car.
-
-2005-05-14 Richard M. Stallman <rms@gnu.org>
-
- * subr.el (symbol-file): Doc fix.
-
- * emacs-lisp/bytecomp.el (byte-compile-nogroup-warn): New function.
- (byte-compile-form): Call byte-compile-nogroup-warn.
- (byte-compile-warning-types): Doc fix.
-
- * eshell/esh-mode.el (eshell-find-tag): Use with-no-warnings.
-
- * progmodes/cc-engine.el (c-literal-faces):
- Add font-lock-comment-delimiter-face.
-
- * net/net-utils.el (dig): Use with-no-warnings.
-
- * mail/supercite.el (sc-cite-frame-alist, sc-uncite-frame-alist)
- (sc-recite-frame-alist, sc-default-cite-frame)
- (sc-default-uncite-frame, sc-default-recite-frame)
- (sc-attrib-selection-list, sc-rewrite-header-list):
- Mark as risky-local-variable.
-
- * international/ogonek.el (ogonek-jak, ogonek-how):
- Don't use beginning-of-buffer.
-
- * emacs-lisp/eldoc.el (eldoc-documentation-function): Add autoload.
-
- * calendar/solar.el (solar-data-list): Move definition up.
-
- * dnd.el (dnd-protocol-alist): Add autoload.
-
- * progmodes/sh-script.el: Many doc usage fixes.
- (sh-indent-after-do): Change default to match common styles.
-
-2005-05-13 Luc Teirlinck <teirllm@auburn.edu>
-
- * files.el (interpreter-mode-alist)
- (auto-mode-interpreter-regexp): Doc fixes.
-
-2005-05-13 Matt Hodges <MPHodges@member.fsf.org>
-
- * tmm.el (tmm-get-keymap): Include only active menus and menu items.
-
- * emacs-lisp/easymenu.el (easy-menu-define): Doc fixes.
-
-2005-05-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * dired.el (dired-mode): make-variable-buffer-local =>
- make-local-variable.
-
-2005-05-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-select-convert-to-string): Try coding
- systems in mac-script-code-coding-systems if specified one cannot
- encode string for `com.apple.traditional-mac-plain-text'.
-
-2005-05-13 Daniel Pfeiffer <occitan@esperanto.org>
-
- * progmodes/make-mode.el (makefile-targets-face)
- (makefile-shell-face, makefile-makepp-perl-face): New faces.
- (makefile-dependency-regex): Fix it to not make the colon in
- $(var:a=b) special.
- (makefile-rule-action-regex): New regexp for highlighting embedded
- Shell strings.
- (makefile-macroassign-regex): Handle != for highlighting as
- embedded Shell strings.
- (makefile-var-use-regex): New const.
- (makefile-statements, makefile-automake-statements)
- (makefile-gmake-statements, makefile-makepp-statements)
- (makefile-bsdmake-statements): New consts.
- (makefile-make-font-lock-keywords): New function.
- (makefile-automake-font-lock-keywords)
- (makefile-gmake-font-lock-keywords)
- (makefile-makepp-font-lock-keywords)
- (makefile-bsdmake-font-lock-keywords): New consts.
- (makefile-mode-map): Add switchers between the various submodes.
- (makefile-mode): Document the availability of the variants.
- (makefile-automake-mode, makefile-gmake-mode)
- (makefile-makepp-mode, makefile-bsdmake-mode): New derived modes.
-
- * files.el (auto-mode-alist, interpreter-mode-alist): Set up the
- new variants of makefile-mode.
-
-2005-05-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-comment-delimiter-face): Fix up
- the inheritance.
-
-2005-05-12 Luc Teirlinck <teirllm@auburn.edu>
-
- * progmodes/inf-lisp.el (inferior-lisp-mode-hook)
- (inferior-lisp-load-hook): Convert defcustoms back to defvars.
-
- * files.el (normal-mode): Extend the scope of the
- `enable-local-variables' binding to include the `set-auto-mode' call.
- (magic-mode-alist): Doc fix.
-
-2005-05-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-comment-delimiter-face): Inherit from
- font-lock-comment-face rather than copying its setting.
-
-2005-05-12 Andreas Schwab <schwab@suse.de>
-
- * eshell/esh-mode.el (eshell-send-input): Doc fix.
-
-2005-05-12 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/generic.el (define-generic-mode): Don't generate a
- defcustom for the mode hook variable. Delete the last argument.
- * generic-x.el: Fix callers of define-generic-mode.
- (generic-x-modes): Delete group.
- (show-tabs-tab-face, show-tabs-space-face): Put them in the
- generic-x customization group.
-
-2005-05-12 Kim F. Storm <storm@cua.dk>
-
- * font-lock.el (font-lock-negation-char-face): Default to "off".
-
- * progmodes/cc-fonts.el (c-basic-matchers-before): Don't apply
- font-lock-negation-char-face to ! in !=.
-
-2005-05-12 Masatake YAMATO <jet@gyve.org>
-
- * add-log.el (find-change-log): Fix typos in the docstring
- of function.
-
-2005-05-11 Arne J,Ax(Brgensen <arne@arnested.dk>
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Avoid `re-search-forward' when looking for input encoding because
- of speed and safety. Better regular expressions for recognizing
- input encoding. Limit a search for TeX-master/tex-main-file to
- the local variable section.
-
-2005-05-11 Dan Nicolaescu <dann@ics.uci.edu>
-
- * progmodes/sh-script.el (sh-mode-default-syntax-table): Set the
- syntax of $ to "'" (quote).
-
-2005-05-11 Reiner Steib <Reiner.Steib@gmx.de>
-
- * dnd.el (dnd-protocol-alist): Improve custom type.
-
- * dired.el (dired-dnd-protocol-alist): New variable.
- (dired-mode): Use `dired-dnd-protocol-alist'. Move call of
- `dired-mode-hook' to the end.
-
-2005-05-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-lock.el (font-lock-fontify-syntactically-region): Don't use
- comment-end if comment-start-skip is not set.
- Obey the font-lock-comment-delimiter-face variables.
-
-2005-05-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el (executable-find): Move from executable.el. Use
- locate-file.
- * progmodes/executable.el (executable-find): Move to files.el.
-
- * font-lock.el (font-lock-fontify-keywords-region): Use a marker
- when trying to ensure forward progress.
-
-2005-05-11 Chong Yidong <cyd@stupidchicken.com>
-
- * mouse-sel.el (mouse-sel-follow-link-p): New function.
- (mouse-select, mouse-select-internal, mouse-extend-internal):
- Use it to implement mouse-1-click-follows-link functionality.
-
-2005-05-11 Richard M. Stallman <rms@gnu.org>
-
- * font-lock.el (font-lock-fontify-syntactically-region):
- Use font-lock-comment-delimiter-face for comment delimiters.
-
-2005-05-10 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-help.el (calc-m-prefix-help): Add mention of
- preserving embedded modes.
-
-2005-05-10 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/sh-script.el (sh-indent-for-do): Default to 0.
-
- * progmodes/ada-mode.el (ada-adjust-case-skeleton):
- Move from ada-stmt.el.
- (ada-mode): Add ada-adjust-case-skeleton to skeleton-end-hook.
-
- * progmodes/ada-stmt.el (ada-adjust-case-skeleton):
- Move to ada-mode.el.
- (ada-stmt-mode-hook): Delete; do the work in ada-mode.
-
- * cus-edit.el (custom-file): Call file-chase-links.
-
- * files.el (read-directory-name): Fix previous change.
- (hack-local-variables-confirm): New function.
- (hack-local-variables-prop-line, hack-local-variables)
- (hack-one-local-variable): Use it.
-
-2005-05-10 Lute Kamstra <lute@gnu.org>
-
- * font-lock.el (font-lock-keywords-alist)
- (font-lock-removed-keywords-alist): Clarify docstrings.
-
-2005-05-10 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-macro-info): New variable.
- (gdb-source-info): Check for preprocessor info.
- (gdb-tooltip-print-1): New function. Don't print tooltip if it is
- a macro for a function.
- (gdb-info-breakpoints-custom): Try to find file again if not already
- found (user might have used GDB dir command).
- (gdb-get-location): Update gdb-location-alist correctly for change
- to gdb-info-breakpoints-custom.
-
- * progmodes/gud.el (gud-tooltip-mode): Require tooltip to be safe.
- (gud-tooltip-print-command): Add gdbmi case.
- (gud-tooltip-tips): Call gdb-tooltip-print-1 first if there is
- preprocessor info.
-
-2005-05-09 Reiner Steib <Reiner.Steib@gmx.de>
-
- * startup.el (fancy-splash-insert): Fix typo in doc string.
-
-2005-05-09 Juanma Barranquero <lekktu@gmail.com>
-
- * obsolete/float.el (string-to-float):
- * obsolete/hilit19.el (hilit-add-pattern):
- * obsolete/rnews.el (news-parse-range, news-select-message)
- (news-get-pruned-list-of-files): Replace `string-to-int' by
- `string-to-number'.
-
- * obsolete/uncompress.el: Set `find-file-not-found-functions', not
- `find-file-not-found-hooks'; use `add-hook'.
- (uncompress-while-visiting): Set `write-file-functions', not
- `write-file-hooks'; use `add-hook'.
-
-2005-05-09 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-copy-region, cua-cut-region)
- (cua-paste): Handle clipboard action.
- (cua--init-keymaps): Remap clipboard-kill-region and
- clipboard-kill-ring-save.
-
-2005-05-08 Eli Zaretskii <eliz@gnu.org>
-
- * emacs-lisp/easy-mmode.el (easy-mmode-pretty-mode-name):
- Improve commentary.
-
- * simple.el (next-error-overlay-arrow-position): Revert the change
- made on 2005-04-30.
-
-2005-05-07 Jay Belanger <belanger@truman.edu>
-
- * calc/calcsel2.el (calc-commute-left, calc-commute-right)
- (calc-sel-unpack, calc-sel-isolate): Rename variable `reselect' to
- `calc-sel-reselect'.
-
- * calc/calc-mode.el (calc-save-modes): Reset the modes list if
- Calc is in embedded mode.
-
-2005-05-07 Eli Zaretskii <eliz@gnu.org>
-
- * progmodes/compile.el (compilation-setup):
- Set overlay-arrow-string to an empty string on text terminals.
-
- * textmodes/ispell.el (ispell-program-name): Try looking for
- "aspell" along exec-path, and if found, use it as the default
- speller program.
-
-2005-05-07 Jirka Kosek <jirka@kosek.cz> (tiny change)
-
- * international/mule.el (sgml-xml-auto-coding-function):
- Recognize encoding='FOO' in single quotes as well as in double quotes.
-
-2005-05-07 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
-
- * emacs-lisp/cl-macs.el (cl-transform-lambda): Recognize `declare'
- as well as `interactive', so that defmacro* would recognize
- `declare' forms.
-
-2005-05-07 Eli Zaretskii <eliz@gnu.org>
-
- * emacs-lisp/easy-mmode.el (easy-mmode-pretty-mode-name):
- Explain more about the LIGHTER arg's usage in the doc string.
- Add commentary to clarify what the code does. Fix the regexp that
- strips whitespace from LIGHTER. Quote LIGHTER before using it,
- since it could have characters special to regular expressions.
-
-2005-05-07 Matt Hodges <MPHodges@member.fsf.org> (tiny change)
-
- * replace.el (occur-1): Bind inhibit-read-only so that
- erase-buffer doesn't barf on read-only text properties (likewise
- for add-text-properties in occur-engine). Mark buffer as unmodified.
- (occur-engine): Don't set buffer-read-only here.
-
-2005-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs.el (cvs-mode-commit, cvs-mode-edit-log): Don't fiddle with
- list-buffers-directory. This caused the *cvs-commit* buffer to be
- sometimes mistakenly reused as a *cvs* buffer.
-
-2005-05-07 Nick Roberts <nickrob@snap.net.nz>
-
- * tooltip.el: Move code for GUD tooltips into gud.el.
- (require): CL no longer needed to compile case.
- (tooltip-mode): Do not toggle functions for GUD tooltips.
- (tooltip-gud-tips-p): Remove. Replace with minor mode
- gud-tooltip-mode in gud.el.
- (tooltip-gud-modes, tooltip-gud-display, tooltip-gud-echo-area)
- (tooltip-gud-toggle-dereference): Rename in gud.el by replacing
- tooltip-gud prefix with gud-tooltip and obsolete.
- (tooltip-change-major-mode, tooltip-activate-mouse-motions-if-enabled)
- (tooltip-mouse-motions-active, tooltip-activate-mouse-motions)
- (tooltip-mouse-motion): Mouse movement functions/variable.
- Rename in gud.el by adding gud prefix.
- (tooltip-gud-original-filter, tooltip-gud-dereference)
- (tooltip-gud-event, tooltip-toggle-gud-tips)
- (tooltip-gud-process-output, tooltip-gud-print-command)
- (tooltip-gud-tips): GUD tooltip functions/variables. Rename in
- gud.el by replacing tooltip-gud prefix with gud-tooltip.
- (gdb-tooltip-print): Move to gdb-ui.el.
-
- * progmodes/gud.el: Move code for GUD tooltips from tooltip.el.
- (require): CL needed to compile case.
- (gud-tooltip-mode): Use to toggle GUD tooltips instead of
- tooltip-gud-tips-p. Make it a minor-mode.
- (gud-find-file): Only prepare GUD tooltips if gud-tooltip-mode is t.
- (gud-menu-map): GUD tooltips use gud-tooltip-mode now.
- (gud-tooltip-modes, gud-tooltip-display, gud-tooltip-echo-area)
- (gud-tooltip-change-major-mode)
- (gud-tooltip-activate-mouse-motions-if-enabled)
- (gud-tooltip-mouse-motions-active, gud-tooltip-activate-mouse-motions)
- (gud-tooltip-mouse-motion, gud-tooltip-toggle-dereference)
- (gud-tooltip-original-filter, gud-tooltip-dereference)
- (gud-tooltip-event, tooltip-toggle-gud-tips)
- (gud-tooltip-process-output, gud-tooltip-print-command)
- (gud-tooltip-tips): Move from tooltip.el.
-
- * progmodes/gdb-ui.el (gdb-tooltip-print): Move from tooltip.el.
- (gdb-cpp-define-alist-flags): Doc fix.
- (gdb-set-gud-minor-mode-1): Only prepare GUD tooltips if
- gud-tooltip-mode is t.
-
-2005-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * net/goto-addr.el (goto-address-fontify): Make sure the overlays
- evaporate if their text is deleted.
- (goto-address-at-point): Make it work as a mouse binding as well.
- (goto-address-at-mouse): Obsolete it. Update users.
-
-2005-05-06 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/appt.el (top-level): No longer activate on load.
-
-2005-05-06 Juanma Barranquero <lekktu@gmail.com>
-
- * calendar/cal-bahai.el (mark-bahai-diary-entries):
- * net/webjump.el (webjump):
- * progmodes/idlw-help.el (idlwave-do-context-help1)
- (idlwave-highlight-linked-completions):
- * textmodes/po.el (po-find-file-coding-system-guts):
- Replace `assoc-ignore-case' by `assoc-string'.
-
-2005-05-06 Eli Zaretskii <eliz@gnu.org>
-
- * files.el (locate-file): Doc fix.
-
- * progmodes/gdb-ui.el (gdb-cpp-define-alist-program): Doc fix.
- Remove the redundant test for ms-dos.
-
- * progmodes/cmacexp.el (c-macro-preprocessor): Use locate-file to
- look for the preprocessor with exec-suffixes. If not found in
- standard places, look in exec-path. Remove most of the tests that
- used system-type.
-
- * loadup.el: Load jka-cmpr-hook instead of jka-comp-hook.
-
- * jka-compr.el (jka-compr-uninstall): Add autoload cookie.
-
- * jka-cmpr-hook.el: Renamed from jka-comp-hook.el, to avoid
- file-name clash with jka-compr.el on 8+3 filesystems.
-
-2005-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Don't define or bind scroll bar functions if
- x-toolkit-scroll-bars is t.
- (x-select-text, x-get-selection-value): Clear
- x-last-selected-text-clipboard if x-select-enable-clipboard is
- nil.
- (PRIMARY): Put mac-scrap-name property.
- (mac-select-convert-to-file-url): New function.
- (public.file-url): New selection target type. Add to
- selection-converter-alist.
- (x-get-selection, x-selection-value): Handle it.
- (x-cut-buffer-or-selection-value): New alias.
-
-2005-05-05 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-summary): Use current BibTeX
- entry to avoid calling bibtex-find-entry with arg global
- being t. Remove arg key.
- (bibtex-summary-function, bibtex-complete-crossref-cleanup)
- (bibtex-copy-summary-as-kill): Change accordingly.
-
-2005-05-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/org.el (org-get-entries-from-diary): Remove unused vars.
- (org-agenda-date-later): Use with-current-buffer.
-
-2005-05-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/byte-run.el (define-obsolete-function-alias)
- (define-obsolete-variable-alias): Doc Fixes.
-
-2005-05-06 Kim F. Storm <storm@cua.dk>
-
- * simple.el (line-move-1): Fix 2005-04-26 change. Must still use
- vertical-motion when selective-display is active.
-
- * ido.el (ido-setup-hook): New hook.
- (ido-define-mode-map-hook): Remove hook; use ido-setup-hook instead.
- (ido-input-stack): New var.
- (ido-define-mode-map): Bind M-b to ido-push-dir. Move old
- ido-next-work-file binding to M-O.
- Bind M-f to ido-wide-find-file-or-pop-dir.
- (ido-define-mode-map): Don't run ido-define-mode-map-hook.
- (ido-read-internal): Run ido-setup-hook.
- Catch quit in read-file-name and read-string to cancel edit.
- Handle new push, pop, and pop-all exit codes (for M-b/M-f).
- Automatically pop-all when completing a directory name (RET).
- (ido-file-internal): Add with-no-warnings around ffap and dired code.
- (ido-exit-minibuffer): Use exit-minibuffer instead of throw.
- (ido-wide-find-file, ido-wide-find-dir): Catch quit to cancel find.
- (ido-push-dir, ido-pop-dir, ido-wide-find-file-or-pop-dir):
- New functions for M-b/M-f to move among the directory components.
- (ido-make-merged-file-list): Catch quit to cancel merge.
- (ido-make-dir-list): Delete "." when ido-input-stack is non-empty.
- (ido-completion-help): No warnings for ido-completion-buffer-full.
-
-2005-05-05 Daniel Pfeiffer <occitan@esperanto.org>
-
- * font-lock.el (font-lock-negation-char-face): New face and variable.
- * progmodes/cc-fonts.el (c-cpp-matchers): Use it.
- * progmodes/sh-script.el (sh-font-lock-keywords): Use it.
- * progmodes/cperl-mode.el (cperl-init-faces): Use it.
- * progmodes/make-mode.el (makefile-font-lock-keywords): Use it.
-
-2005-05-05 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs-lisp/byte-run.el (define-obsolete-function-alias):
- Fix typo in docstring.
-
- * progmodes/ebrowse.el (ebrowse-install-1-to-9-keys)
- (ebrowse-print-statistics-line)
- (ebrowse-electric-position-mode-hook): Fix typo in docstring.
-
- * term/w32-win.el (image-library-alist): Add additional name for
- Xpm library.
-
-2005-05-05 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cmacexp.el (c-macro-preprocessor): Update for BSD and
- use gcc instead of cpp.
-
- * progmodes/gdb-ui.el (gdb-cpp-define-alist-flags): New variable.
- (gdb-create-define-alist): Use it.
- (gdb-cpp-define-alist-program): Update for MS-DOS.
-
-2005-05-04 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cmacexp.el (c-macro-preprocessor): Update for Mac OS X.
-
-2005-05-04 Richard M. Stallman <rms@gnu.org>
-
- * help.el (describe-key): No error when UNTRANSLATED is nil.
-
- * simple.el (line-move-1): Fix previous change to signal errors
- appropriately.
-
-2005-05-03 Ulf Jasper <ulf.jasper@web.de>
-
- * calendar/icalendar.el (icalendar-version): Now at 0.12.
- (icalendar-duration-correction): Remove.
- (icalendar--get-event-properties): Split result at commas.
- (icalendar--decode-isoduration): New optional argument
- DURATION-CORRECTION.
- (icalendar--convert-ordinary-to-ical, icalendar--convert-sexp-to-ical)
- (icalendar--convert-yearly-to-ical, icalendar--convert-weekly-to-ical)
- (icalendar--convert-block-to-ical, icalendar--convert-float-to-ical)
- (icalendar--convert-date-to-ical, icalendar--convert-cyclic-to-ical)
- (icalendar--convert-anniversary-to-ical): New functions, extracted
- from icalendar-export-region, with bug fixes.
- (icalendar-export-region): Use the above functions.
- (icalendar-import-buffer): Check before saving diary file.
- (icalendar--convert-recurring-to-diary)
- (icalendar--convert-non-recurring-all-day-to-diary)
- (icalendar--convert-non-recurring-not-all-day-to-diary): New functions,
- extracted from icalendar--convert-ical-to-diary, with bug fixes.
- (icalendar--convert-ical-to-diary): Use the above functions.
-
-2005-05-03 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cc-mode.el (cc-define-alist, cc-create-define-alist):
- Remove these recent additions.
- (c-mode): Restore to before 2005-04-28.
-
- * progmodes/cc-vars.el (cc-define-list-program): Remove this
- recent addition.
-
- * progmodes/gdb-ui.el (gdb-cpp-define-alist-program)
- (gdb-define-alist): New variables.
- (gdb-create-define-alist): New function.
- (gdb-set-gud-minor-mode-1): Handle gdb-define-alist.
- (gdb-source, gdb-memory-set-repeat-count): Replace string-to-int
- with string-to-number.
- (gdb-reset): Kill gdb-define-alist. Move assignments outside loop.
-
- * progmodes/gud.el: Replace string-to-int with string-to-number.
- (gud-find-file): Handle gdb-define-alist.
-
- * tooltip.el (tooltip-gud-tips): Use gdb-define-alist.
-
-2005-05-02 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-aent.el (math-read-token):
- * calc/calc-bin.el (calc-word-size):
- * calc/calc-ext.el (calc-read-number-fancy):
- * calc/calc-forms.el (calc-time, calc-date-notation, math-this-year)
- (math-parse-date, math-parse-standard-date, calcFunc-tzone):
- * calc/calc-frac.el (calc-over-notation):
- * calc/calc-graph.el (calc-graph-plot, calc-graph-set-styles)
- (calc-graph-num-points, calc-graph-init):
- * calc/calc-prog.el (calc-read-parse-table-part)
- (calc-edit-macro-repeats):
- * calc/calc-yank.el (calc-do-grab-rectangle):
- * calc/calc.el (calcDigit-key, math-read-number, math-read-bignum):
- Replace `string-to-int' by `string-to-number'.
-
-2005-05-02 Kim F. Storm <storm@cua.dk>
-
- * kmacro.el: Use executing-kbd-macro-index variable.
-
-2005-05-02 Thien-Thi Nguyen <ttn@gnu.org>
-
- * net/rlogin.el (rlogin-parse-words): Delete func.
- (rlogin): Use split-string, not rlogin-parse-words.
- Also, if there are option-like elements in the parsed args,
- take the host to be the first arg immediately following them.
- Suggested by Michael Mauger.
-
-2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * subr.el (executing-macro): Use `define-obsolete-variable-alias'.
-
-2005-05-02 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cc-mode.el (cc-create-define-alist): Use a shell.
- (cc-mode-cpp-program): Rename to cc-define-list-program and
- move to cc-vars.el.
-
- * progmodes/cc-vars.el (cc-define-list-program):
- Change to "gcc -E -dM -". Make customizable.
-
-2005-05-02 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el: Fix check for CUA-mode if no init file.
-
-2005-05-02 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cc-mode.el (cc-mode-cpp-program): Change to "gcc -E".
-
- * international/mule-util.el (truncate-string): Remove alias and
- obsolete declaration.
-
- * international/mule-cmds.el (update-iso-coding-systems):
- Remove alias and obsolete declaration.
-
- * international/mule.el (coding-system-parent): Remove alias and
- obsolete declaration.
-
- * subr.el (define-function, sref): Remove aliases and obsolete
- declarations.
- (chars-in-region): Remove obsolete declaration.
-
-2005-05-01 Richard M. Stallman <rms@gnu.org>
-
- * info.el (Info-mode): Set widen-automatically to nil, locally.
-
- * simple.el (widen-automatically): New variable.
- (pop-global-mark): Obey widen-automatically.
-
-2005-05-01 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (function-key-map): Call substitute-key-definition
- before the keymap size is increased by a lot of define-key calls.
-
-2005-05-01 Richard M. Stallman <rms@gnu.org>
-
- * subr.el (add-to-invisibility-spec, remove-from-invisibility-spec):
- Rename ARG to ELEMENT. Doc fix.
-
-2005-05-01 Nick Roberts <nickrob@snap.net.nz>
-
- * allout.el (allout-exposure): Remove macro and obsolete declaration.
- Remove references to allout-exposure/change to allout-new-exposure.
-
- * emacs-lisp/bytecomp.el (dot, dot-min, dot-max): Don't create
- bytecode symbols.
-
- * subr.el (dot, dot-marker, dot-min, dot-max, buffer-flush-undo)
- (compiled-function-p, focus-frame, unfocus-frame):
- Remove aliases and obsolete declarations.
- Back out inadvertent changes from previous commit.
-
-2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * files.el (require-final-newline): Make Custom tags consistent
- with mode-require-final-newline.
- (mode-require-final-newline): Doc fix.
-
-2005-05-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Fix regular expressions.
-
-2005-05-01 David Kastrup <dak@gnu.org>
-
- * international/latexenc.el (latexenc-find-file-coding-system):
- Fix regular expressions.
-
-2005-05-01 Nick Roberts <nickrob@snap.net.nz>
-
- * subr.el (string-to-int): Make obsolete.
-
-2005-04-30 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (next-error-overlay-arrow-position): Turn off, for ttys.
-
- * loadup.el: Load jka-comp-hook.
-
- * jka-compr.el: Many functions and vars moved to jka-comp-hook.el.
- (jka-compr-handler): Add autoload. `put' calls moved
- to jka-comp-hook.el.
- (compression, jka-compr): defgroups moved to jka-comp-hook.el.
- (jka-compr-inhibit): Autoload.
-
- * jka-comp-hook.el: New file.
- Enable the mode by default.
-
- * files.el (backup-buffer-copy): Use copy-file instead
- of write-region, and put back the 'excl.
-
-2005-04-30 Chong Yidong <cyd@stupidchicken.com>
-
- * progmodes/flymake.el (flymake-split-string)
- (flymake-split-string, flymake-log, flymake-pid-to-names)
- (flymake-reg-names, flymake-get-source-buffer-name)
- (flymake-unreg-names, flymake-add-line-err-info)
- (flymake-add-err-info): Clarify docstrings.
- (flymake-popup-menu, flymake-make-emacs-menu)
- (flymake-make-xemacs-menu): Add docstrings.
- (flymake-get-buffer-*, flymake-set-buffer-*): Functions deleted.
- Set variables directly throughout.
-
-2005-04-30 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cc-mode.el (cc-create-define-alist): Check that file
- exists. Initialize cc-define-alist.
- (c-mode): Add cc-create-define-alist locally to after-save-hook.
- If there is no file (Macroexpansion) don't create an alist.
-
-2005-04-29 Sam Steingold <sds@gnu.org>
-
- * progmodes/cc-mode.el (cc-mode-cpp-program): New user variable.
- (cc-create-define-alist): Use it instead of the hard-coded string.
-
-2005-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/mule-conf.el (file-coding-system-alist): Fix regexp
- for latexenc.
-
-2005-04-29 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/generic.el: Improve commentary section.
- (define-generic-mode): Improve docstring.
-
-2005-04-29 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (many places): Change to quiet the byte compiler.
- (org-prefix-format-compiled): New variable.
- (org-compile-prefix-format): New function.
- (org-timeline, org-agenda, org-diary): Call org-compile-prefix-format.
- (org-agenda-prefix-format, org-timeline-prefix-format): New options.
- (org-agenda-get-scheduled): Check if file is opened in `org-mode'.
- (org-get-entries-from-diary): Use `org-get-time-of-day' for
- consistency with entries from `org-mode' files.
- (org-get-time-of-day): Fix bug with partial matches early in a line.
- (org-non-link-chars): New constant.
- (org-link-regexp): Respect `org-non-link-chars'.
- (org-agenda-day-view): Remove command.
- (org-agenda-toggle-week-view): Rename from `org-agenda-week-view'.
- (org-follow-bbdb-link, org-store-link): Search also company field.
- (org-highlight-overlay): New variable.
- (org-highlight, org-unhighlight): New functions.
- (org-agenda-mode): Add pre-command-hook to remove highlight.
- (org-evaluate-time-range): Behavior depends upon whether time stamp
- contains a time or not.
- (org-show-subtree, org-show-entry): New functions.
- (org-agenda-cleanup-fancy-diary): Remove empty lines.
-
-2005-04-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * comint.el (comint-output-filter-functions): Add autoload cookie.
-
-2005-04-28 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-everywhere): Fix last change.
-
-2005-04-28 Arne J,Ax(Brgensen <arne@arnested.dk>
-
- * international/latexenc.el: New file.
- * international/mule-conf.el (file-coding-system-alist): For .tex,
- .ltx, .dtx and .drv extensions, use `latexenc-find-file-coding-system'.
-
-2005-04-28 Lute Kamstra <lute@gnu.org>
-
- * font-lock.el (font-lock-add-keywords)
- (font-lock-remove-keywords): Clarify docstring.
- (font-lock-keywords-alist, font-lock-removed-keywords-alist):
- Don't start docstrings with a `*'.
- (font-lock-update-removed-keyword-alist): Give it a docstring.
-
- * generic-x.el: Update commentary section.
- Only require font-lock when compiling.
- Define all modes conditionally.
- Place all generic modes in the generic-x-modes customization group.
- (generic-x-modes): New customization group.
- (generic-default-modes, generic-mswindows-modes)
- (generic-unix-modes, generic-other-modes): New constants.
- (generic-define-mswindows-modes, generic-define-unix-modes):
- Update docstrings. Make them obsolete.
- (generic-extras-enable-list): New default value. Update docstring.
- Improve :type. Change :set function.
- (bat-generic-mode-syntax-table, rul-generic-mode-syntax-table):
- Fix docstring.
-
- * emacs-lisp/generic.el (generic-mode-internal):
- Simplify font-lock-defaults.
- (define-generic-mode): Fix docstring.
-
-2005-04-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/grep.el (grep-mode-font-lock-keywords): Use the
- font-lock-face property to highlight matches.
-
-2005-04-28 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/cc-mode.el (cc-create-define-alist): New function.
- (cc-define-alist): New variable.
- (c-mode): Make it local and initialize it.
-
- * progmodes/gdb-ui.el (gdb-active-process): New variable.
- (gdb-exited): New function.
- (gdb-annotation-rules): Use it.
- (gdb-starting): Set gdb-active-process to t.
- (gdb-stopping): Amend doc string.
- (gdb-reset): Set gdb-active-process to nil.
-
- * tooltip.el (tooltip-gud-tips): Show the associated #define
- directives when a C program under GDB is not executing.
-
-2005-04-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/cperl-mode.el (cperl-mode): Don't precompile the
- font-lock-fontify-syntactic-keywords.
-
- * font-lock.el (font-lock-default-fontify-region): Don't force
- parse-sexp-lookup-properties to nil.
-
-2005-04-27 Alexander Klimov <alserkli@inbox.ru> (tiny change)
-
- * man.el (man-mode-syntax-table): Set up `:' to have
- word-constituent syntax.
-
-2005-04-27 Lute Kamstra <lute@gnu.org>
-
- * novice.el (disable-command): Don't add spurious newlines to the
- init file. Reported by Dan Jacobson <jidanni@jidanni.org>.
-
-2005-04-26 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-yank.el (calc-edit-finish): Make sure there is more
- than one window before deleting window.
-
-2005-04-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * shell.el (shell-prompt-pattern): Doc fix.
- (shell-mode): Set paragraph-separate buffer locally to "\\'".
-
- * comint.el (comint-prompt-regexp, comint-get-old-input)
- (comint-use-prompt-regexp)
- (comint-use-prompt-regexp-instead-of-fields)
- (comint-replace-by-expanded-history, comint-send-input)
- (comint-output-filter, comint-get-old-input-default)
- (comint-line-beginning-position, comint-bol, comint-show-output)
- (comint-backward-matching-input, comint-forward-matching-input)
- (comint-next-prompt, comint-previous-prompt):
- Rename `comint-use-prompt-regexp-instead-of-fields' to
- `comint-use-prompt-regexp'. Keep old name as alias and declare
- obsolete.
- (comint-use-prompt-regexp): Shorten first line of doc string.
-
- * ielm.el (inferior-emacs-lisp-mode): Adapt to above name change.
- Set paragraph-separate buffer locally to "\\'".
-
- * hippie-exp.el (try-expand-line, try-expand-line-all-buffers):
- Adapt to above name change.
-
- * net/net-utils.el (nslookup-prompt-regexp, ftp-prompt-regexp)
- (smbclient-prompt-regexp): Ditto.
-
- * progmodes/inf-lisp.el (inferior-lisp-prompt): Ditto.
-
-2005-04-27 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-location-alist): Rename from
- gdb-location-list.
- Break lines that are over 80 characters wide.
-
-2005-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs-info.el (cvs-fileinfo->full-path, cvs-display-full-path):
- New fun and var, to preserve compatibility.
-
- * pcvs.el, pcvs-info.el: Rename "full-path" -> "full-name".
-
-2005-04-26 Dominique de Waleffe <ddw@missioncriticalit.com> (tiny change)
-
- * pcvs-info.el (cvs-fileinfo->backup-file): Don't pass the full file
- name to file-newer-than-file-p.
-
-2005-04-26 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (line-move-1): Avoid using vertical-motion in easy cases.
-
- * progmodes/python.el (python-mode):
- Use new name eldoc-documentation-function.
-
- * hexl.el (hexl-mode): Use new name eldoc-documentation-function.
-
- * emacs-lisp/eldoc.el (eldoc-mode): Doc fix.
- (eldoc-documentation-function):
- Rename from eldoc-print-current-symbol-info-function. Calls changed.
-
-2005-04-26 Nick Roberts <nickrob@snap.net.nz>
-
- * emacs-lisp/byte-run.el (define-obsolete-function-alias): New macro.
-
-2005-04-25 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (function-key-map): Fix strings for
- {C,S,A,C-S}-f[1-4]. Use substitute-key-definition to bind
- {C,S,A,C-S}-{f1-f12}.
-
-2005-04-26 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (select-safe-coding-system):
- Fix previous change.
-
-2005-04-26 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/easy-mmode.el (define-minor-mode): Fix docstring.
-
- * font-lock.el (font-lock-fontify-region-function): Fix docstring.
- (font-lock-comment-delimiter-face): Ditto.
-
- * calc/calc.el (calc-trail-mode): Don't set font-lock-defaults.
-
-2005-04-25 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-help.el (calc-view-news): Let-bind inhibit-read-only
- to t while inserting information; use help-mode.
-
-2005-04-25 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (ansi-term-color-vector): Use the xterm colors.
- (term-raw-map): Don't add mappings for \eO and \e[. Map deletechar.
-
-2005-04-25 Lute Kamstra <lute@gnu.org>
-
- * font-core.el (font-lock-defaults): Fix docstring.
-
- * font-lock.el (font-lock-syntactic-face-function): Fix docstring.
-
-2005-04-25 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (select-safe-coding-system):
- Don't check consistency with coding: spec, etc if raw-text or
- no-conversion was found to be safe.
-
-2005-04-24 Richard M. Stallman <rms@gnu.org>
-
- * mail/sendmail.el (mail-font-lock-keywords): Match any number of
- citation markers at start of each line.
-
- * mail/rmail.el (rmail-font-lock-keywords): Match any number of
- citation markers at start of each line.
-
- * font-lock.el (font-lock-comment-delimiter-face): Doc fix.
-
- * files.el (mode-require-final-newline): Fix previous change.
- (require-final-newline): Fix type label.
-
-2005-04-24 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * progmodes/f90.el (f90-calculate-indent): Fix treatment of first
- statement in buffer (broken by 2004-11-24 change).
-
-2005-04-24 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-everywhere): Save and restore old read-buffer-function
- and read-file-name-function values. Don't overwrite existing
- non-nil values if ido-mode is enabled without ido-everywhere.
-
-2005-04-24 Luc Teirlinck <teirllm@auburn.edu>
-
- * files.el (mode-require-final-newline): Minor doc fix.
-
-2005-04-24 Eli Zaretskii <eliz@gnu.org>
-
- * subr.el (syntax-after): Doc fix.
- (syntax-class): If argument is nil, return nil. Mask off upper 16
- bits, not 8 bits.
-
- * files.el (mode-require-final-newline): Doc fix.
- (backup-buffer-copy): Fix last change.
-
-2005-04-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Require select. Set selection-coding-system to
- mac-system-coding-system. Call menu-bar-enable-clipboard.
- (x-last-selected-text-clipboard, x-last-selected-text-primary)
- (x-select-enable-clipboard): New variables.
- (x-select-text, x-get-selection, x-selection-value)
- (x-get-selection-value, mac-select-convert-to-string)
- (mac-services-open-file, mac-services-open-selection)
- (mac-services-insert-text): New functions.
- (CLIPBOARD, FIND): Put mac-scrap-name property.
- (com.apple.traditional-mac-plain-text, public.utf16-plain-text)
- (public.tiff): Put mac-ostype property.
- (selection-converter-alist): Add entries for them.
- (mac-application-menu-map): New keymap.
- (interprogram-cut-function, interprogram-paste-function): Set to
- x-select-text and x-get-selection-value, respectively.
- (split-window-keep-point): Set to t.
-
-2005-04-23 Richard M. Stallman <rms@gnu.org>
-
- * files.el (read-directory-name): Always pass non-nil
- DEFAULT-FILENAME arg to read-file-name.
- (backup-buffer-copy, basic-save-buffer-2): Take care against
- writing thru an unexpected existing symlink.
- (revert-buffer): In indirect buffer, revert the base buffer.
- (magic-mode-alist): Doc fix.
- (buffer-stale-function): Doc fix.
- (minibuffer-with-setup-hook): Avoid warning.
- (mode-require-final-newline): Doc and custom fix.
-
- * follow.el (follow-end-of-buffer): Use with-no-warnings.
-
- * font-lock.el (font-lock-comment-face): On terminals with few colors,
- use the default appearance.
- (font-lock-comment-delimiter-face): New face, new variable.
-
- * imenu.el (imenu--generic-function): The official position of a
- definition is the start of the line that BEG is in.
-
- * midnight.el (midnight-timer): Move defvar up.
-
- * mouse.el (mouse-drag-region-1): Delete some debugging code.
-
- * saveplace.el (save-place-to-alist): Use with-no-warnings.
-
- * startup.el (command-line): Use with-no-warnings.
-
- * window.el (window-size-fixed): New defvar.
-
- * emacs-lisp/easymenu.el (easy-menu-do-define): Use defalias, not fset.
-
- * mail/rmail.el (rmail-font-lock-keywords):
- Use font-lock-comment-delimiter-face.
-
- * mail/sendmail.el (mail-font-lock-keywords):
- Use font-lock-comment-delimiter-face.
-
- * progmodes/compile.el (next-error-highlight-timer): New defvar.
-
-2005-04-23 SAITO Takuya <tabmore@rivo.mediatti.net> (tiny change)
-
- * progmodes/compile.el (compilation-mode-font-lock-keywords):
- Specify t for LAXMATCH when matching directories.
- Save match data around compilation-compat-error-properties form.
-
-2005-04-23 David Kastrup <dak@gnu.org>
-
- * textmodes/tex-mode.el (TeX-mode, plain-TeX-mode, LaTeX-mode):
- Mention that the autoloaded aliases should be kept for AUCTeX.
-
-2005-04-23 Andreas Schwab <schwab@suse.de>
-
- * isearch.el (isearch-forward): Doc fix.
-
-2005-04-23 Eli Zaretskii <eliz@gnu.org>
-
- * jit-lock.el (jit-lock-stealth-time): Change default value to 16.
- (jit-lock-stealth-nice): Change default value to 0.5.
-
-2005-04-23 Eric Hanchrow <offby1@blarg.net> (tiny change)
-
- * abbrev.el (write-abbrev-file): Write table entries in
- alphabetical order by table name.
-
-2005-04-22 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-read-internal): Fix `list' completion.
-
-2005-04-22 Kenichi Handa <handa@m17n.org>
-
- * recentf.el (recentf-save-file-coding-system): New variable.
- (recentf-save-list): Encode the file by
- recentf-save-file-coding-system and add coding: tag.
-
-2005-04-22 Nick Roberts <nickrob@snap.net.nz>
-
- * emacs-lisp/byte-run.el (define-obsolete-variable-alias): New macro.
-
-2005-04-21 Lute Kamstra <lute@gnu.org>
-
- * loadhist.el (unload-feature): Don't remove a function from hooks
- if it is about to be restored to an autoload . Remove functions
- that will become unbound from auto-mode-alist. Simplify the code.
-
- * subr.el (assq-delete-all): New implementation that is linear,
- not quadratic. Suggested by David Kastrup <dak@gnu.org>.
- (rassq-delete-all): New function.
-
- * menu-bar.el (menu-bar-options-save, menu-bar-showhide-menu):
- Add size-indication-mode.
-
-2005-04-21 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el: Add autoload for widget-value in
- eval-when-compile.
-
-2005-04-21 Nick Roberts <nickrob@snap.net.nz>
-
- * menu-bar.el (menu-bar-options-save, menu-bar-showhide-menu):
- Add tooltip-mode.
-
- * bindings.el (mode-line-mode-menu): Remove tooltip-mode.
-
-2005-04-20 Luc Teirlinck <teirllm@auburn.edu>
-
- * progmodes/inf-lisp.el (inferior-lisp): New defgroup.
- (inferior-lisp-filter-regexp, inferior-lisp-program)
- (inferior-lisp-load-command, inferior-lisp-prompt)
- (inferior-lisp-mode-hook, lisp-source-modes)
- (inferior-lisp-load-hook): defvar->defcustom.
- (inferior-lisp-program, inferior-lisp-prompt)
- (inferior-lisp-load-hook): Doc fixes.
- (inferior-lisp-install-letter-bindings): Small change in
- introductory comment.
-
-2005-04-20 Dan Nicolaescu <dann@ics.uci.edu>
-
- * vc.el (vc-annotate-color-map): Change some colors so that text
- using them as foreground is readable on both white and black
- backgrounds.
-
-2005-04-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/mule-conf.el (translation-table-for-input):
- Remove redundant declaration.
-
-2005-04-20 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-menu-map): Add tooltip-toggle-gud-tips.
-
- * tooltip.el (tooltip-gud-tips-p): Expand documentation.
- (tooltip-toggle-gud-tips): New function.
-
-2005-04-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (mac-symbol-encoder): Fix mappings of left and
- right angle brackets.
-
-2005-04-20 Nick Roberts <nickrob@snap.net.nz>
-
- * tooltip.el (tooltip-use-echo-area): Replace as alias and deprecate.
-
-2005-04-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/flymake.el (flymake-get-absolute-file-name-basedir):
- Remove. Update callers to use expand-file-name instead.
-
- * subr.el (syntax-class): New function.
-
- * simple.el (blink-matching-open): Use it.
-
- * paren.el (show-paren-function): Use it to recognize parens that are
- also used in 2-char comment markers.
-
-2005-04-19 Lute Kamstra <lute@gnu.org>
-
- * loadhist.el (unload-feature): Update for new format of
- load-history. Simplify the code.
-
-2005-04-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Add coding: tag and set it to iso-2022-7bit.
- (mac-add-charset-info): New function. Initialize variable
- mac-charset-info-alist using it.
- (mac-centraleurroman, mac-cyrillic): Do not use UCS in table data
- for translation.
- (mac-symbol-encoder, mac-dingbats-encoder): New translation table.
- (mac-font-encoder-list): Add entries for mac-symbol and mac-dingbats.
- (ccl-encode-mac-symbol-font, ccl-encode-mac-dingbats-font):
- New CCL programs.
-
-2005-04-19 Kim F. Storm <storm@cua.dk>
-
- * simple.el (next-buffer, prev-buffer, next-error)
- (scroll-other-window, keyboard-quit, keyboard-escape-quit)
- (clone-indirect-buffer-other-window): Move bindings to bindings.el.
-
- * bindings.el (next-buffer, prev-buffer, next-error)
- (scroll-other-window, keyboard-quit, keyboard-escape-quit)
- (clone-indirect-buffer-other-window): Move bindings from simple.el.
- (next-buffer, prev-buffer): Add C-x C-right and C-x C-left bindings.
- (next-error, previous-error): Add M-g M-n/n and M-g M-p/p bindings.
-
-2005-04-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * isearch.el (isearch-edit-string): Make the search-ring available for
- minibuffer history commands.
- (minibuffer-local-isearch-map): Remove bindings for M-p and M-n,
- the default history commands now work just as well.
- (isearch-ring-retreat-edit, isearch-ring-advance-edit): Remove.
-
-2005-04-18 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua--pre-command-handler): Add more
- elaborate check for shift modifier on non-window systems.
-
-2005-04-18 Lars Hansen <larsh@math.ku.dk>
-
- * desktop.el: Make "--no-desktop" turn off `desktop-save-mode'.
-
-2005-04-18 Kim F. Storm <storm@cua.dk>
-
- * tooltip.el (tooltip-show): Change second arg to USE-ECHO-AREA
- and make it optional. Don't test tooltip-gud-echo-area here.
- (tooltip-gud-process-output, gdb-tooltip-print):
- Pass tooltip-gud-echo-area to tooltip-show.
- (tooltip-help-tips): Remove second optional arg to tooltip-show.
-
-2005-04-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * tooltip.el (tooltip-mode): `emacs-quick-startup' and
- `display-graphic-p' may not be bound yet.
-
-2005-04-17 Luc Teirlinck <teirllm@auburn.edu>
-
- * startup.el (command-line): No longer enable Xterm Mouse mode by
- default in terminals compatible with xterm.
-
- * xt-mouse.el (xterm-mouse-mode): Set init value back to nil.
-
-2005-04-18 Nick Roberts <nickrob@snap.net.nz>
-
- * tooltip.el (tooltip-gud-echo-area): Rename from
- tooltip-use-echo-area.
- (tooltip-show, tooltip-gud-process-output, gdb-tooltip-print)
- (tooltip-help-tips): Allow GUD tooltips to be displayed in echo
- area independently of where help tooltips are displayed.
-
-2005-04-17 David Kastrup <dak@gnu.org>
-
- * cus-theme.el (custom-theme-write-variables): Quote variables
- where necessary.
-
-2005-04-17 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (yank-excluded-properties): Add follow-link to value.
-
- * jka-compr.el (jka-compr-compression-info-list): Fix custom type.
-
- * startup.el (fancy-splash-max-time): Just 30 seconds.
- (fancy-splash-delay): Just 7.
- (fancy-splash-screens): No time limit other than fancy-splash-max-time.
-
- * loadhist.el (unload-feature): Update for new format of load-history.
- Simplify the code.
-
- * mail/rmail.el (rmail-ignored-headers): Ignore more headers
- (rmail-font-lock-keywords): Don't fontify the text of a citation.
-
- * mail/sendmail.el (mail-font-lock-keywords):
- Don't fontify subject text.
- Don't fontify the text of a citation.
-
-2005-04-17 Mark H. Weaver <mhw@netris.org> (tiny change)
-
- * comint.el (comint-output-filter): Run comint-output-filter-functions
- with point where the user had it.
-
-2005-04-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/ucs-tables.el (ucs-set-table-for-input):
- Disable when using unify-on-decoding.
-
-2005-04-16 Dan Nicolaescu <dann@ics.uci.edu>
-
- * emulation/cua-base.el (cua-global-mark-face): Add special case
- for displays supporting a high number of colors.
-
-2005-04-16 Matt Hodges <MPHodges@member.fsf.org> (tiny change)
-
- * repeat.el (repeat): Invoke pre-command-hook and post-command-hook.
-
-2005-04-16 Chong Yidong <cyd@stupidchicken.com>
-
- * filesets.el (filesets-add-buffer): If user supplies a name of a
- non-existing fileset, create a new fileset.
-
-2005-04-16 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-up-heading-all): Fix bug with
- `outline-up-heading-all'.
-
-2005-04-16 Andreas Schwab <schwab@suse.de>
-
- * files.el (auto-mode-alist): Handle /etc/sysconfig/*,
- /etc/permissions.d/* and /etc/aliases.d/*.
-
-2005-04-16 Kenichi Handa <handa@m17n.org>
-
- * international/code-pages.el (cp-make-coding-system):
- Set `translation-table-for-input' property value to the symbol
- ucs-mule-to-mule-unicode, not to that value.
- (pt154): Escape guillemet by `\'.
-
-2005-04-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * loadup.el: Load tooltip if x-show-tip is fboundp.
-
- * startup.el (command-line): Add comment.
-
- * tooltip.el (tooltip-mode): Specify correct standard value for
- Custom in init-value.
-
-2005-04-15 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-goto-info): Use existing Info buffer, if
- possible.
-
-2005-04-15 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda-date-prompt): Rename from
- `org-agenda-date-today'.
- (org-evaluate-time-range): Insert at point instead of directly
- after time range.
- (org-first-headline-recenter, org-subtree-end-visible-p)
- (org-optimize-window-after-visibility-change): New functions
- (org-agenda-post-command-hook): Don't allow point at end of line,
- to make sure it always hits the text properties.
- (org-agenda-next-date-line, org-agenda-previous-date-line):
- New commands.
- (org-set-regexps-and-options): Category may contain white space.
- (org-agenda-get-deadlines, org-agenda-get-scheduled):
- Improve marker positions.
- (org-agenda-new-marker): Argument POS made optional.
- (org-agenda-get-timestamps): Deadlines which are done are listed
- in org-done-face now.
- (org-agenda-get-todos, org-agenda-get-timestamps)
- (org-agenda-get-deadlines, org-agenda-get-scheduled):
- Set `undone-face' and `done-face' properties.
- (org-last-todo-state-is-todo): New variable.
- (org-todo): Set `org-last-todo-state-is-todo'.
- (org-agenda-todo): Change face according to
- `org-last-todo-state-is-todo'. And change other lines referring to
- the same entry.
- (org-calendar-goto-agenda): New command.
- (org-calendar-to-agenda-key): New option.
- (org-startup-folded): New allowed value `content'.
- (org-set-regexps-and-options): Accept new value `content' for
- `org-startup-folded'.
- (org-get-current-options): Handle new value `content' for
- `org-startup-folded'.
- (org-insert-todo-heading): New command.
- (org-mode): Insert first line "*-* mode: org-mode -*-" when called
- interactively in empty file and option
- `org-insert-mode-line-in-empty-file' has been set.
- (org-agenda-todo, org-agenda-priority): Modify to use
- `org-agenda-change-all-lines'.
- (org-warning-face): Change color on dark background.
-
-2005-04-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * international/mule-cmds.el (set-locale-environment): On Mac OS,
- use preferences AppleLocale and AppleLanguages, and variable
- mac-system-locale for default locale. On Mac OS Classic, use
- mac-system-coding-system for default coding systems.
-
- * term/mac-win.el: Don't set file-name-coding-system.
- Decode variables system-name, emacs-build-system, user-login-name, and
- user-full-name by mac-system-coding-system on Mac OS Classic.
- (mac-system-coding-system): New variable.
-
-2005-04-13 Luc Teirlinck <teirllm@auburn.edu>
-
- * startup.el (command-line): Handle `xterm-mouse-mode' before
- reading init file.
-
- * xt-mouse.el (xterm-mouse-mode): Adapt to above change.
-
-2005-04-13 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * progmodes/sh-script.el (sh-here-document-word): Make it a
- defcustom. Doc fix.
- (sh-add): Bash uses $(( )) for arithmetic.
- (sh-while-getopts) <sh>: Set OPTIND back to 1 at end.
- (sh-maybe-here-document): Remove quotes and leading whitespace
- from heredoc word when closing. Indent heredoc with tabs if word
- starts with "-".
-
-2005-04-13 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (undo): Fix previous change.
-
- * custom.el (defface): Doc fix.
-
-2005-04-13 Lute Kamstra <lute@gnu.org>
-
- * Makefile.in (DONTCOMPILE): Remove list.
- (compile, compile-always): Don't use DONTCOMPILE.
- (update-authors): Load the library in which batch-update-authors
- is defined.
- * makefile.w32-in (DONTCOMPILE): Remove list.
- (compile, compile-always): Fix comments.
- (update-authors): Load the library in which batch-update-authors
- is defined.
-
- * generic-x.el (generic-mode-ini-file-find-file-hook):
- Rename to ini-generic-mode-find-file-hook.
- Keep generic-mode-ini-file-find-file-hook as an alias.
- (ini-generic-mode-find-file-hook): Rename from
- generic-mode-ini-file-find-file-hook. Fix docstring.
- (ini-generic-mode): Docstring change.
- (bat-generic-mode-run-as-comint): Silence the byte compiler.
-
- * help.el (describe-key-briefly): UNTRANSLATED can be nil when
- called from lisp.
-
- * generic.el: Move to the emacs-lisp subdir.
-
-2005-04-12 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (function-key-map): Add mappings for A-, C-, S-
- and C-S- function and cursor motion keys.
-
-2005-04-12 Luc Teirlinck <teirllm@auburn.edu>
-
- * startup.el (command-line): Enable Xterm Mouse mode by default.
- * xt-mouse.el (xterm-mouse-mode): Provide correct standard value
- for Custom. No longer show "Mouse" in mode line when enabled.
- Doc fix.
-
-2005-04-12 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-rectangle-face)
- (cua-rectangle-noselect-face): Define face attributes here.
-
- * emulation/cua-rect.el (cua--init-rectangles): Remove face setup.
-
-2005-04-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * startup.el (command-line): Turn off blinking cursor if
- cursorBlink in resources is off or false.
-
-2005-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el (dnd): Require dnd.
- (mac-drag-n-drop): Call dnd-handle-one-url.
- (kTextEncodingMacRoman, kTextEncodingISOLatin1)
- (kTextEncodingISOLatin2): Remove constants.
- (mac-script-code-coding-systems): New constant.
- (mac-handle-language-change): New function.
- (special-event-map): Bind it to `language-change' event.
- (mac-centraleurroman, mac-cyrillic): New coding systems.
- (mac-font-encoder-list, ccl-encode-mac-centraleurroman-font)
- (ccl-encode-mac-cyrillic-font): Rename mac-centraleurroman-encoder
- and mac-cyrillic-encoder to encode-mac-centraleurroman and
- encode-mac-cyrillic, respectively.
-
-2005-04-12 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el, progmodes/gdb-ui.el (gdb-assembler-mode):
- Don't set overlay-arrow-string to "=>" as this is done
- globally in C now.
-
-2005-04-12 Lute Kamstra <lute@gnu.org>
-
- * generic-x.el (rc-generic-mode, rul-generic-mode):
- Fix auto-mode-alist entries.
- (etc-fstab-generic-mode): Tweak fontification.
-
- * generic.el (generic-make-keywords-list): Fix docstring.
- (generic-mode-internal): Simplify generic-font-lock-keywords.
-
-2005-04-11 Rajesh Vaidheeswarran <rv@gnu.org>
-
- * whitespace.el (whitespace-buffer-leading)
- (whitespace-buffer-trailing): Revert the incorrect test inversion.
- However, fix the highlight area for the leading and
- trailing whitespaces to show space.
-
-2005-04-11 Rajesh Vaidheeswarran <rv@gnu.org>
-
- * whitespace.el (whitespace-version): Bump to 3.5.
-
- (whitespace-buffer-leading, whitespace-buffer-trailing):
- Invert sense of the test to highlight the whitespace.
-
-2005-04-12 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gud-display-line): GUD uses its own
- overlay arrow now so don't set overlay-arrow-string.
- (gud-pdb-command-name): Revert back to "pdb" (2004-04-26).
-
-2005-04-11 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (term-ansi-current-bold, term-ansi-current-underline)
- (term-ansi-current-reverse, term-ansi-current-invisible)
- (term-ansi-face-already-done): Change to boolean.
- (term-reset-terminal, term-handle-colors-array): Handle the above
- vars accordingly.
- (term-buffer-vertical-motion): Rename from buffer-vertical-motion.
- (term-emulate-terminal): Use the new name.
-
- * faces.el (secondary-selection): Use yellow1, not yellow.
- (trailing-whitespace): Use red1, not red.
-
-2005-04-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * dired.el (dired-mode): Use dnd-* instead of x-dnd-*
- (dired-dnd-handle-local-file): Call dnd-get-local-file-name.
- (dired-dnd-handle-file): Call dnd-get-local-file-uri.
-
- * cus-edit.el (dnd): New group.
-
- * term/w32-win.el (dnd): Require dnd
- (w32-drag-n-drop): Call dnd-handle-one-url.
-
- * x-dnd.el: Require dnd.
- (x-dnd-handle-uri-list, x-dnd-handle-file-name):
- Call dnd-handle-one-url.
- (x-dnd-types-alist, x-dnd-insert-utf8-text)
- (x-dnd-insert-utf16-text, x-dnd-insert-ctext): Change x-dnd-insert-text
- to dnd-insert-text.
- (x-dnd-protocol-alist, x-dnd-open-file-other-window)
- (x-dnd-handle-one-url, x-dnd-get-local-file-uri)
- (x-dnd-get-local-file-name, x-dnd-open-local-file)
- (x-dnd-open-file, x-dnd-insert-text): Move to dnd.el (without x-).
-
- * dnd.el (dnd-protocol-alist): New file with generic DND functions.
-
-2005-04-11 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
-
- * wdired.el: Doc fixes.
- (wdired-confirm-overwrite): Rename from wdired-is-ok-overwrite.
- (wdired-use-dired-vertical-movement): Rename from
- wdired-always-move-to-filename-beginning.
- (wdired-mode-map): Use `ignore' instead of `wdired-newline'.
- (wdired-change-to-wdired-mode): Change mode name.
- (wdired-newline): Delete.
-
-2005-04-11 Richard M. Stallman <rms@gnu.org>
-
- * whitespace.el (whitespace-highlight-the-space):
- Don't call whitespace-unhighlight-the-space here.
-
- * simple.el (undo): Record t in undo-equiv-table
- for the redo record made by an undo-in-region.
-
-2005-04-12 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-display-inferior-io-buffer)
- (gdb-frame-inferior-io-buffer): New Functions to control
- display of separate IO buffer.
- (menu): Add them to menu-bar.
- (gdb-display-buffer): Check for buffer another frame.
- Protect GUD buffer.
- (gdb-setup-windows): Create IO buffer if not already there.
- (gdb-memory-mode): Remove purecopy noops.
-
-2005-04-11 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * progmodes/f90.el (f90-electric-insert): Add optional prefix arg,
- and pass to self-insert-command.
-
-2005-04-11 Lute Kamstra <lute@gnu.org>
-
- * generic.el: Commentary section cleanup.
- (generic): Delete.
- (generic-use-find-file-hook, generic-lines-to-scan)
- (generic-find-file-regexp, generic-ignore-files-regexp)
- (default-generic-mode, generic-mode-find-file-hook)
- (generic-mode-ini-file-find-file-hook): Move to generic-x.el.
- * generic-x.el (generic-x): Docstring fix. Put it in the data group.
- (generic-use-find-file-hook, generic-lines-to-scan)
- (generic-find-file-regexp, generic-ignore-files-regexp)
- (default-generic-mode, generic-mode-find-file-hook)
- (generic-mode-ini-file-find-file-hook): Move from generic.el.
-
-2005-04-10 Karl Fogel <kfogel@red-bean.com>
-
- * bookmark.el (bookmark-write-file): Catch errors writing file.
- This is the same change as saveplace.el at 2005-04-10T23:32:00Z!rms@gnu.org.
-
-2005-04-10 Richard M. Stallman <rms@gnu.org>
-
- * startup.el (fancy-splash-tail): Update copyright year.
- (command-line): Split part of -Q into -D.
- (emacs-basic-display): New defvar.
- (fancy-splash-text): Correct name of menu item.
-
- * saveplace.el (save-place-alist-to-file): Catch errors writing file.
-
- * info.el (Info-fontify-node): Handle fontification of multiple * Menu
- lines in one node.
-
- * comint.el (comint-send-input): New arg ARTIFICIAL.
- Callers in this file changed.
-
- * abbrev.el (define-abbrevs): Read system abbrevs properly.
-
- * emacs-lisp/map-ynp.el (map-y-or-n-p): Clarify RET/q in help message.
-
-2005-04-10 Chong Yidong <cyd@stupidchicken.com>
-
- * url/url-ldap.el (url-ldap): Add docstring. Fix call to
- `ldap-search-internal'.
-
-2005-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el (set-auto-mode-1): Use line-end-position.
-
- * international/latin-1.el:
- * international/latin-2.el:
- * international/latin-3.el:
- * international/latin-4.el:
- * international/latin-5.el:
- * international/latin-8.el:
- * international/latin-9.el: Give punctuation syntax to NBSP.
-
- * textmodes/bibtex.el (bibtex-autokey-titleword-ignore)
- (bibtex-reference-key, bibtex-autokey-demangle-name, bibtex-mode):
- Use char-classes to accept non-ascii letters, accepted in some recent
- bibtex implementations.
-
-2005-04-10 Luc Teirlinck <teirllm@auburn.edu>
-
- * custom.el (custom-set-minor-mode): Any non-nil value for the
- variable should enable the mode when set through Custom.
-
-2005-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/vhdl-mode.el (vhdl-mode-map-init): Don't override default
- TAB binding so tab-always-indent is obeyed.
- (vhdl-minibuffer-local-map): Move initialization into declaration.
- (vhdl-mode-abbrev-table-init): Mark the abbrevs as `system'.
- (vhdl-run-when-idle, vhdl-create-mode-menu, vhdl-character-to-event)
- (vhdl-hooked-abbrev): Avoid test for XEmacs.
- (vhdl-current-line): Use line-beginning-position.
- (vhdl-doc-variable, vhdl-doc-mode): Call help-setup-xref before
- with-output-to-temp-buffer, so the current position can be recorded.
-
-2005-04-10 Masatake YAMATO <jet@gyve.org>
-
- * progmodes/compile.el (compilation-error-regexp-alist-alist):
- Add regexp for gcov.
-
-2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * calendar/time-date.el (time-to-seconds, seconds-to-time)
- (days-to-time, time-subtract, time-add): Don't use the #xhhhh
- syntax which Emacs 20 doesn't support.
-
-2005-04-09 Richard M. Stallman <rms@gnu.org>
-
- * help.el (describe-key-briefly, describe-key):
- Replace strings as event types with "(any string)".
-
-2005-04-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * arc-mode.el (archive-mode-map): Move initialization into
- the declaration. Override *all* bindings of `undo'.
- (archive-lemacs): Remove, use (featurep 'xemacs) instead.
-
-2005-04-09 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-units.el (math-standard-units): Redefine Watt hour as W*hr.
-
-2005-04-09 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (xterm-rgb-convert-to-16bit): Simplify.
- (xterm-register-default-colors): Update color values computation
- to match xterm-200.
-
-2005-04-09 Kenichi Handa <handa@m17n.org>
-
- * international/code-pages.el (iso-latin-7): Fix the map.
-
-2005-04-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * emacs-lisp/lisp.el (defun-prompt-regexp)
- (parens-require-spaces, buffer-end, end-of-defun)
- (insert-parentheses): Doc fixes.
-
-2005-04-08 Kim F. Storm <storm@cua.dk>
-
- * comint.el (comint-highlight-prompt): Fix face spec.
- * hi-lock.el (hi-green): Likewise.
-
-2005-04-08 Dan Nicolaescu <dann@ics.uci.edu>
-
- * cus-edit.el (custom-modified-face):
- * comint.el (comint-highlight-input): Fix previous changes.
- * term.el (term-handle-ansi-escape): Add a comment.
-
-2005-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * whitespace.el (whitespace-highlight-the-space): Put the same overlay
- in the buffer and in whitespace-highlighted-space.
- (whitespace-unhighlight-the-space): Simplify.
- (whitespace-buffer): Simplify.
-
-2005-04-08 Dan Nicolaescu <dann@ics.uci.edu>
-
- * textmodes/table.el (table-cell-face): Add special case for
- displays supporting a high number of colors.
- * progmodes/vhdl-mode.el (vhdl-font-lock-prompt-face)
- (vhdl-font-lock-reserved-words-face)
- (vhdl-speedbar-architecture-face)
- (vhdl-speedbar-instantiation-face)
- (vhdl-speedbar-architecture-selected-face)
- (vhdl-speedbar-instantiation-selected-face): Likewise.
- * progmodes/sh-script.el (sh-heredoc-face): Likewise.
- * progmodes/idlw-help.el (idlwave-help-link-face): Likewise.
- * progmodes/ebrowse.el (ebrowse-tree-mark-face)
- (ebrowse-root-class-face, ebrowse-member-attribute-face)
- (ebrowse-progress-face): Likewise.
- * progmodes/compile.el (compilation-info-face): Likewise.
- * progmodes/cc-fonts.el (c-invalid-face): Likewise.
- * emacs-lisp/re-builder.el (reb-match-3): Likewise.
- * calendar/calendar.el (diary-face): Likewise.
- * woman.el (woman-italic-face, woman-bold-face)
- (woman-unknown-face): Likewise.
- * wid-edit.el (widget-button-pressed-face): Likewise.
- * whitespace.el (whitespace-highlight-face): Likewise.
- * smerge-mode.el (smerge-mine-face, smerge-base-face): Likewise.
- * pcvs-info.el (cvs-marked-face): Likewise.
- * info.el (info-xref): Likewise.
- * ido.el (ido-subdir-face, ido-indicator-face): Likewise.
- * hilit-chg.el (highlight-changes-face)
- (highlight-changes-delete-face): Likewise.
- * hi-lock.el (hi-yellow, hi-green, hi-blue-b, hi-green-b)
- (hi-red-b): Likewise.
- * generic-x.el (show-tabs-tab-face, show-tabs-space-face): Likewise.
- * font-lock.el (font-lock-keyword-face)
- (font-lock-function-name-face, font-lock-warning-face): Likewise.
- * cus-edit.el (custom-invalid-face, custom-modified-face)
- (custom-set-face, custom-changed-face, custom-variable-tag-face)
- (custom-group-tag-face-1, custom-group-tag-face): Likewise.
- * comint.el (comint-highlight-prompt): Likewise.
-
-2005-04-08 Lute Kamstra <lute@gnu.org>
-
- * font-lock.el (font-lock-keywords): Docstring fixes.
-
-2005-04-08 Kenichi Handa <handa@m17n.org>
-
- * ps-mule.el (ps-mule-show-warning): If the number of unprintable
- chars are more than a limit, print " and more..." at the tail.
-
-2005-04-08 Kim F. Storm <storm@cua.dk>
-
- * emacs-lisp/authors.el (authors-aliases): Update list.
- (authors-ignored-files): New list.
- (authors-fixed-entries): Fix typo.
- (authors-renamed-files-alist): Update list.
- (authors-add): Check authors-ignored-files.
-
-2005-04-08 Carsten Dominik <dominik@science.uva.nl>
-
- * calendar/diary-lib.el (add-to-diary-list): MARKER argument made
- optional, to ensure backward compatibility.
-
-2005-04-08 Stephen Eglen <stephen@gnu.org>
-
- * textmodes/flyspell.el (flyspell-large-region): Doc fix.
-
-2005-04-08 Kim F. Storm <storm@cua.dk>
-
- * buff-menu.el (Buffer-menu-mode-map): Map follow-link to mouse-face.
-
- * mouse.el (mouse-on-link-p): Doc fix.
-
-2005-04-07 Luc Teirlinck <teirllm@auburn.edu>
-
- * ielm.el (ielm-prompt-read-only): Doc fix.
-
- * comint.el (comint-prompt-read-only): Doc fix.
-
-2005-04-07 Benjamin Rutt <brutt@bloomington.in.us>
-
- * ffap.el (ffap-pass-wildcards-to-dired): New user option to
- ensure dired always handles wildcards passed to ffap.
- (find-file-at-point): Use it.
- (ffap-dired-wildcards): Doc fix.
-
-2005-04-07 Juri Linkov <juri@jurta.org>
-
- * simple.el (next-error-overlay-arrow-position): New defvar.
- Put "=>" on its property `overlay-arrow-string'. Add it to
- `overlay-arrow-variable-list'.
-
- * progmodes/compile.el (compilation-setup):
- Set `next-error-overlay-arrow-position' to nil. Also set it to
- nil in the local hook `kill-buffer-hook'. Make local variable
- `overlay-arrow-string' and set it to "=>".
- (compilation-goto-locus): Set BOL position to
- `next-error-overlay-arrow-position' instead of
- `overlay-arrow-position'.
-
- * info.el (Info-mode): Add `Info-kill-buffer' to `kill-buffer-hook'
- locally instead of adding it to the global hook.
- (Info-kill-buffer): Move up.
-
-2005-04-06 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term/xterm.el (xterm-standard-colors): Update color values from
- xterm-200.
-
-2005-04-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/tex-mode.el (tex-font-lock-keywords-2): Add \bfseries.
-
- * fast-lock.el:
- * lazy-lock.el: Move them to the obsolete subdir.
-
-2005-04-06 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
-
- * wdired.el (wdired-advise-functions, wdired-add-skip-in-replace)
- (wdired-add-replace-advice): Remove.
- (wdired-change-to-wdired-mode): Use query-replace-skip-read-only.
-
-2005-04-06 Kim F. Storm <storm@cua.dk>
-
- * startup.el (command-line): Add --bare-bones alias for -Q.
-
-2005-04-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Use create-fontset-from-mac-roman-font to
- create the startup fontset if a font specification ends with
- `mac-roman'.
-
-2005-04-06 Lute Kamstra <lute@gnu.org>
-
- * add-log.el (change-log-font-lock-keywords): Complete 2005-04-03
- change.
-
- * emacs-lisp/copyright.el (copyright-update-year): Replace the
- right subexpression. Suggested by Jay Bingham <jay.bingham@hp.com>.
-
-2005-04-05 Lute Kamstra <lute@gnu.org>
-
- * generic.el (generic-mode-internal): Fix 2005-03-31 change.
- (define-generic-mode): Ditto. Fix debug declaration.
-
- * generic-x.el (show-tabs-tab-face, show-tabs-space-face):
- Put them in the generic-x group.
-
- * calendar/timeclock.el (timeclock): Doc fix.
-
- * generic.el (define-generic-mode): Don't use custom-current-group.
- Document default :group value.
- * emacs-lisp/easy-mmode.el (define-minor-mode): Ditto.
- (define-global-minor-mode): Don't use custom-current-group.
-
-2005-04-05 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * startup.el (command-line-1): Display startup-echo-area-message
- when fancy splash screen is in use.
-
- * progmodes/sh-script.el (sh-builtins) <bash>: Add `caller'.
- (sh-escaped-newline): New face.
- (sh-font-lock-keywords) <shell>: Improve regexp for escaped
- newline, and use sh-escaped-newline face.
-
- * progmodes/tcl.el (tcl-escaped-newline): New face.
- (tcl-builtin-list): New variable.
- (tcl-set-font-lock-keywords): Add builtins, variables, and escaped
- newlines. Fix keywords subexpression number.
-
-2005-04-05 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-diary-default-entry): Fix call to
- `add-to-diary-entry'.
-
-2005-04-05 Kim F. Storm <storm@cua.dk>
-
- * ediff-init.el: Use (featurep 'xemacs).
-
-2005-04-05 David Ponce <david@dponce.com>
-
- * cus-edit.el (face): Derive from symbol widget. Display sample
- of the current face on the fly.
- (widget-face-sample-face-get, widget-face-notify): New functions.
- (widget-face-value-create): Remove.
-
- * wid-edit.el (widget-field-end): Temporarily remove field
- narrowing before to call `get-char-property'.
-
-2005-04-04 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-aent.el (math-read-replacement-list): Add subscripts.
- (math-read-subscripts): New variable.
- (math-read-preprocess-string): Process subscripts.
-
-2005-04-04 Luc Teirlinck <teirllm@auburn.edu>
-
- * comint.el (comint-prompt-read-only): Doc fix.
-
- * dired.el (dired-copy-filename-as-kill): Make `-' arg behave like
- `-1'. Doc fix.
-
-2005-04-04 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-insert-mode-line-in-empty-file):
- Change default value to nil.
-
-2005-04-04 Lute Kamstra <lute@gnu.org>
-
- * autorevert.el (auto-revert-mode): Specify :group.
- * battery.el (display-battery-mode): Specify :group.
- * diff-mode.el (diff-minor-mode): Specify :group.
- * font-core.el (font-lock-mode): Specify :group.
- * hl-line.el (hl-line-mode): Specify :group.
- * iimage.el (iimage): New customization group.
- (iimage-mode): Specify :group.
- * longlines.el (longlines-mode): Specify :group.
- * master.el: Don't require easy-mmode.
- (master): New customization group.
- (master-mode): Specify :group.
- * msb.el (msb-mode): Specify :group.
- * reveal.el (reveal-mode): Specify :group.
- * simple.el (next-error-follow-minor-mode): Specify :group.
- * smerge-mode.el (smerge-mode): Specify :group.
- * emacs-lisp/eldoc.el (eldoc-mode): Specify :group.
- * emulation/cua-base.el (cua-mode): Specify :group.
- * international/encoded-kb.el (encoded-kbd-mode): Specify :group.
- * language/thai-util.el (thai-auto-composition-mode)
- (thai-word-mode): Specify :group.
- * mail/supercite.el (sc-minor-mode): Specify :group.
- * progmodes/cwarn.el (cwarn-mode): Specify :group.
- * progmodes/flymake.el (flymake-mode): Specify :group.
- * progmodes/glasses.el (glasses-mode): Specify :group.
- * progmodes/hideif.el (hide-ifdef-mode): Specify :group.
- * textmodes/enriched.el (enriched-mode): Specify :group.
- * textmodes/refill.el (refill-mode): Specify :group.
-
- * add-log.el (change-log-font-lock-keywords): Names in
- parenthesized lists can contain spaces.
-
-2005-04-04 Thien-Thi Nguyen <ttn@gnu.org>
-
- * startup.el (fancy-splash-text): Shorten default text of
- "Emacs Tutorial" line. Also, if the current language env
- indicates an available tutorial file other than TUTORIAL,
- extract its title and append it to the line in parentheses.
- (fancy-splash-insert): If arg is a thunk, funcall it.
-
-2005-04-04 Jay Belanger <belanger@truman.edu>
-
- * calc.el (calc-language-alist): Add tags to customization type.
-
-2005-04-03 Luc Teirlinck <teirllm@auburn.edu>
-
- * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group, mouse.
- Doc fix.
-
-2005-04-03 Marcelo Toledo <marcelo@gnu.org>
-
- * add-log.el (change-log-font-lock-keywords): The manual
- describing a Change Log entry, says: (...) "Aside from these
- header lines, every line in the change log starts with a space or
- a tab.". The font-lock was not highlighting lines started with
- spaces, added support for it.
-
-2005-04-03 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-url): Use format to generate the url.
- (bibtex-generate-url-list): Update docstring accordingly. Put the
- complex example in the docstring.
- (bibtex-font-lock-url): Use pop.
-
-2005-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/tcl.el (tcl-set-font-lock-keywords): Use new \_< ops.
-
- * pcvs.el (cvs-checkout): Prompt for cvsroot as well.
-
-2005-04-03 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * filesets.el (filesets-set-default): Doc fix.
-
-2005-04-03 Lute Kamstra <lute@gnu.org>
-
- * generic.el (define-generic-mode): Add argument to specify
- keywords for defcustom.
- (default-generic-mode): Specify :group.
-
- * generic-x.el: Specify :group for all generic modes.
-
- * desktop.el (desktop-no-desktop-file-hook)
- (desktop-after-read-hook): Doc fix.
-
-2005-04-02 Luc Teirlinck <teirllm@auburn.edu>
-
- * simple.el (visible-mode): Use explicit :group keyword.
- This changes the group of `visible-mode-hook' from paren-blinking
- to editing-basics.
-
-2005-04-02 Sergey Poznyakoff <gray@Mirddin.farlep.net> (tiny change)
-
- * mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional
- mailbox specifications as well as URLs.
- (rmail-insert-inbox-text): Remove unused conditional branches.
-
-2005-04-01 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command)
- (calc-gnuplot-print-command): Move definitions to calc.el.
-
- * calc/calc-embed.el (calc-embedded-announce-formula)
- (calc-embedded-open-formula, calc-embedded-close-formula)
- (calc-embedded-open-word, calc-embedded-close-word)
- (calc-embedded-open-plain, calc-embedded-close-plain)
- (calc-embedded-open-new-formula, calc-embedded-close-new-formula)
- (calc-embedded-open-mode, calc-embedded-close-mode):
- Move definitions to calc.el.
-
- * calc/calc.el (calc-settings-file, calc-language-alist):
- Make customizable.
- (calc-embedded-announce-formula, calc-embedded-open-formula)
- (calc-embedded-close-formula, calc-embedded-open-word)
- (calc-embedded-close-word, calc-embedded-open-plain)
- (calc-embedded-close-plain, calc-embedded-open-new-formula)
- (calc-embedded-close-new-formula, calc-embedded-open-mode)
- (calc-embedded-close-mode, calc-gnuplot-name)
- (calc-gnuplot-plot-command, calc-gnuplot-print-command): Move here
- from other files and make customizable.
-
-2005-04-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
- Use buffer-live-p.
- (cvs-mode-run): Don't call cvs-update-header here.
- (cvs-run-process): Call cvs-update-header.
- Use process properties for cvs-postprocess and cvs-buffer so that
- the sentinel can behave better if the temp buffer is killed.
- Use a pipe rather than a tty, to better handle unexpected prompts.
- (cvs-sentinel): Rewrite. Call cvs-update-header.
-
-2005-04-01 Andre Spiegel <spiegel@gnu.org>
-
- * vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when
- we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann.
-
-2005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * generic.el (define-generic-mode): Add indentation rule.
-
-2005-03-31 Luc Teirlinck <teirllm@auburn.edu>
-
- * files.el (mode-require-final-newline): Make Custom correctly
- report a nil value and allow to set it to nil via Custom.
- Doc fix.
-
-2005-04-01 Kenichi Handa <handa@m17n.org>
-
- * international/characters.el: Enable the correct case setting for
- dotless-i and dotted-I.
-
-2005-04-01 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-file-internal): Fall back to non-ido command if
- initial directory is on slow ftp (or tramp) host.
-
-2005-03-31 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/autoload.el (make-autoload):
- Handle define-global-minor-mode.
-
- * emacs-lisp/easy-mmode.el (define-global-minor-mode):
- Rename from easy-mmode-define-global-mode.
- (easy-mmode-define-global-mode): Alias for define-global-minor-mode.
-
- * progmodes/scheme.el (scheme-mode-syntax-table):
- Update syntax of | and # for two-character comment syntax.
-
-2005-03-31 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode)
- (define-minor-mode): Call custom-current-group at load-time.
-
- * generic.el (define-generic-mode): Add debug declaration.
- Add defcustom for the mode hook.
- (generic-mode-internal): Use run-mode-hooks.
-
-2005-03-31 Kim F. Storm <storm@cua.dk>
-
- * mouse.el (mouse-1-click-follows-link): Increase to 450 ms.
- (mouse-fixup-help-message): New defun called by show_help_echo
- to fixup mouse-2 prefix in help messages when applicable.
-
- * tooltip.el (tooltip-show-help-function): Don't fixup message here.
-
-2005-03-31 Kenichi Handa <handa@m17n.org>
-
- * language/thai-word.el (thai-find-word-ends): Pay attention to
- the case that we reach the end of buffer.
-
- * textmodes/fill.el (fill-text-properties-at): New function.
- (fill-newline): Use fill-text-properties-at instead of
- text-properties-at.
-
-2005-03-31 Olive Lin <olive.lin@versateladsl.be> (tiny change)
-
- * textmodes/tex-mode.el (tex-start-tex): Use shell-quote-argument,
- not comint-quote-filename.
-
-2005-03-31 Thien-Thi Nguyen <ttn@gnu.org>
-
- * help-fns.el (help-with-tutorial): Revert last change.
-
-2005-03-31 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-scroll-down): Add CUA property.
-
-2005-03-30 Paul Eggert <eggert@cs.ucla.edu>
-
- * calendar/cal-china.el: Update reference to "Calendrical
- Calculations" book; there's a new edition.
- * calendar/cal-coptic.el: Likewise.
- * calendar/cal-french.el: Likewise.
- * calendar/cal-hebrew.el: Likewise.
- * calendar/cal-islam.el: Likewise.
- * calendar/cal-iso.el: Likewise.
- * calendar/cal-julian.el: Likewise.
- * calendar/cal-mayan.el: Likewise.
- * calendar/cal-persia.el: Likewise.
- * calendar/calendar.el: Likewise.
- * calendar/holidays.el: Likewise.
- * calendar/lunar.el: Likewise.
- * calendar/solar.el: Likewise.
-
- * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing
- white space from doc string.
-
-2005-03-30 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-help.el (calc-full-help): Remove email address.
-
-2005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
-
- * help-fns.el (help-with-tutorial): Delete title line.
-
-2005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/cal-x.el (calendar-one-frame-setup)
- (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t
- rather than `symbol' for set-window-dedicated-p.
-
- * calendar/appt.el (appt-buffer-name): Make it a constant.
- (appt-add): Doc fix.
-
- * filesets.el (filesets-menu-path, filesets-menu-before)
- (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs.
- (filesets-menu-cache-file): Use directory ~/.emacs.d.
- (filesets-add-submenu): Delete and use add-submenu instead.
-
-2005-03-30 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-agenda-phases-of-moon)
- (org-agenda-sunrise-sunset, org-agenda-convert-date)
- (org-agenda-goto-calendar): New commands.
- (org-diary-default-entry): New function.
- (org-get-entries-from-diary): Better parsing of diary entries.
- (org-agenda-check-no-diary): New function.
- ("diary-lib"): Advice to function `add-to-diary-list', to allow
- linking to diary entries.
- (org-agenda-execute-calendar-command): New function.
- (org-agenda): Improve visible section in window.
- Use `org-fit-agenda-window'.
- (org-fit-agenda-window): New option.
- (org-move-subtree-down): Better handling of empty lines
- at end of subtree.
- (org-cycle): Numeric prefix is interpreted now as show-subtree N
- levels up.
- (org-fontify-done-headline): New option.
- (org-headline-done-face): New face.
- (org-set-font-lock-defaults): Use `org-headline-done-face'.
- (org-table-copy-down): Rename from `org-table-copy-from-above'.
- When current field is non-empty, it is copied to next row.
- (org-table-copy-from-above): Fix bug which made it
- impossible to copy fields containing only a single non-white character.
-
-2005-03-30 Kim F. Storm <storm@cua.dk>
-
- * kmacro.el (kmacro-end-macro): Isearch may store this command
- into the macro -- so ignore it when executing keyboard macro.
-
-2005-03-30 Nick Roberts <nickrob@snap.net.nz>
-
- * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position.
-
-2005-03-29 Kenichi Handa <handa@m17n.org>
-
- * language/thai.el ("Thai"): Set setup-function and exit-function
- for Thai language environment.
-
- * language/thai-util.el: Require thai-word.
- (thai-word-mode-map): New variable.
- (thai-word-mode): New minor mode.
- (setup-thai-language-environment-internal): New function.
- (exit-thai-language-environment-internal): New function.
-
- * language/thai-word.el (thai-word-table): Declare it by defvar,
- use dolist to initialize it.
- (thai-kill-word, thai-backward-kill-word, thai-transpose-words)
- (thai-fill-find-break-point): New functions.
-
-2005-03-29 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (idle-update-delay): Move definition up.
- (set-mark): Doc fix.
-
-2005-03-29 Chong Yidong <cyd@stupidchicken.com>
-
- * longlines.el: New file.
-
- * simple.el (buffer-substring-filters): New variable.
- (filter-buffer-substring): New function.
- (kill-region, copy-region-as-kill): Use it.
-
- * register.el (copy-to-register, append-to-register)
- (prepend-to-register): Use filter-buffer-substring.
-
-2005-03-30 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el (gdb): (Re)-initialize gud-filter-pending-text.
- (gud-filter-pending-text): Move in front of gdb.
- (gud-overlay-arrow-position): New variable.
- (gud-sentinel, gud-display-line): Use it in place of
- overlay-arrow-position.
-
-2005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * progmodes/fortran.el (fortran-if-indent): Doc fix.
- (fortran-font-lock-keywords-2): Add "where", "elsewhere".
- (fortran-font-lock-keywords-4): New variable.
- (fortran-blocks-re, fortran-end-block-re)
- (fortran-start-block-re): New constants, for hideshow.
- (hs-special-modes-alist): Add a Fortran entry.
- (fortran-mode-map): Bind fortran-end-of-block,
- fortran-beginning-of-block to \M-\C-n, \M-\C-p.
- (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4.
- (fortran-looking-at-if-then, fortran-end-of-block)
- (fortran-beginning-of-block): New functions, for hideshow.
-
- * progmodes/f90.el (f90-end-block-re, f90-start-block-re):
- Doc fix. Tweak regexp.
- (f90-beginning-of-block): Push mark first.
-
-2005-03-29 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el: Update copyright date.
- (calc-version): Increase to 2.1.
- (calc-version-date): Remove.
-
- * calc/calc-help.el: Update copyright date.
- (calc-full-help): Remove reference to calc-version-date.
- Update copyright date.
-
-2005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc.el (vc-do-command): Use a pipe for async processes, so password
- prompts don't show up at places where the user can't reply.
-
-2005-03-29 Olive Lin <olive.lin@versateladsl.be> (tiny change)
-
- * textmodes/tex-mode.el (tex-send-command): shell-quote-argument
- on the file name we pass to the inferior shell.
-
-2005-03-29 Stephan Stahl <stahl@eos.franken.de> (tiny change)
-
- * progmodes/which-func.el (which-function): Be robust in the face of an
- imenu--make-index-alist failure.
-
-2005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * reveal.el (reveal-mode-map): Don't override C-a and C-e.
-
- * progmodes/python.el (python-preoutput-filter): Fix last change.
-
-2005-03-29 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded
- functions and compiled macros.
- (debug-convert-byte-code): Handle macros too.
- (debug-on-entry-1): Don't signal an error when trying to clear a
- function that is not set to debug on entry.
-
-2005-03-29 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-lang.el: Add functions to math-function-table
- properties of tex and math.
-
-2005-03-29 Kenichi Handa <handa@m17n.org>
-
- * ps-mule.el (ps-mule-plot-string): Translate characters by
- ps-print-translation-table.
- (ps-mule-begin-job): Call find-charset-region/string with
- ps-print-translation-table.
- (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1.
-
- * ps-print.el (ps-print-translation-table): New variable.
- (ps-plot-region): Translate characters by ps-print-translation-table.
-
-2005-03-29 Juri Linkov <juri@jurta.org>
-
- * simple.el (next-error-highlight-timer): New variable.
-
- * progmodes/compile.el (compilation-goto-locus):
- Use `next-error-highlight-timer' instead of `sit-for'.
-
-2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mail/supercite.el (sc-mail-field): Use assoc-string.
- (sc-get-address): Simplify regexps.
-
- * files.el (minibuffer-with-setup-hook): New macro.
- (find-file-read-args): Use it to avoid let-binding
- minibuffer-with-setup-hook (which breaks turning on/off
- file-name-shadow-mode while in the prompt).
-
- * complete.el (PC-read-include-file-name-internal):
- Use test-completion.
-
-2005-03-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o.
-
-2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.el (window-buffer-height): Use count-screen-lines.
-
- * progmodes/python.el (python-preoutput-leftover): New var.
- (python-preoutput-filter): Use it.
- (python-send-receive): Loop until all the result has been received.
-
-2005-03-28 Juri Linkov <juri@jurta.org>
-
- * dired.el (dired-mode-map): Add ellipsis to "Compare directories".
-
- * menu-bar.el (menu-bar-file-menu): Remove ellipsis from
- "Recover Crashed Session".
- (menu-bar-search-menu): Add ellipsis to "Search tagged files".
- (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files".
- (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name".
- (menu-bar-goto-menu): Add ellipsis to "Tags Apropos".
- (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset".
- (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual".
- (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual".
- (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages".
-
- * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu):
- Remove ellipsis from "Ediff Manual", "Customize Ediff", "List
- Ediff Sessions", "Toggle use of separate control buffer frame",
- "Use separate frame for Ediff control buffer".
-
- * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to
- Bookmark", "Set Bookmark", "Insert Contents", "Insert Location",
- "Rename Bookmark", "Delete Bookmark".
-
- * info.el (Info-mode-menu): Remove ellipsis from "Index".
- Add ellipsis to "Lookup a String", "Lookup a string in all indices".
- Add `:active Info-index-alternatives' to "Next Matching Item".
-
- * wdired.el (wdired-change-to-wdired-mode):
- Mention `wdired-abort-changes' key in the initial message.
-
- * international/mule.el (auto-coding-alist): Associate non-ascii
- image filename extensions with `no-conversion'.
-
-2005-03-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/iso-acc.el:
- * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir.
-
-2005-03-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * textmodes/sgml-mode.el (html-mode): Doc update.
-
- * autorevert.el (auto-revert-check-vc-info): Minor doc fix.
-
-2005-03-26 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.el (term-move-columns): Fix face after extending a line.
- (term-insert-spaces): Likewise.
- (term-reset-terminal): Fix off by one error.
-
-2005-03-26 Eli Zaretskii <eliz@gnu.org>
-
- * international/mule.el (auto-coding-alist): Add .xpi files.
-
- * files.el (auto-mode-alist): Add .xpi files.
-
-2005-03-26 Jure Cuhalev <gandalf@owca.info> (tiny change)
-
- * textmodes/ispell.el (ispell-dictionary-alist-6): Add slovenian.
-
-2005-03-26 Eli Zaretskii <eliz@gnu.org>
-
- * term/bobcat.el: Don't use keyswap.el, since it is now obsolete.
-
-2005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/cal-menu.el (top level): Delete local C-down-mouse-3
- binding. Suggested by Stephan Stahl <stahl@eos.franken.de>.
-
- * calendar/cal-move.el (calendar-beginning-of-year): Move the
- cursor to Jan 1 when needed.
- (calendar-end-of-year): Fix -/+ typo.
- Reported by Chong Yidong <cyd@stupidchicken.com>.
-
-2005-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/flymake.el (flymake-mode): Add autoload cookie.
-
- * emacs-lisp/debug.el (debugger-record-expression): Add a missing
- format to `message'. Inspired by Deepak Goel <deego@gnufans.org>.
-
-2005-03-25 Richard M. Stallman <rms@gnu.org>
-
- * filesets.el (filesets-init): Add autoload.
-
- * mail/mailalias.el (mail-directory): Doc fix.
-
-2005-03-25 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
-
- * mail/mailalias.el (mail-directory-process): Do nothing if
- mail-directory-process is an atom.
- (mail-get-names): Ignore mail-directory-names if it is an atom.
- (mail-directory-process defvar): Doc fix.
- (mail-names): Doc fix.
-
-2005-03-25 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se> (tiny change)
-
- * textmodes/flyspell.el (mail-mode-flyspell-verify): Fix regexp syntax.
-
-2005-03-26 Kenichi Handa <handa@m17n.org>
-
- * international/mule-util.el (detect-coding-with-priority):
- Call update-coding-systems-internal before detect-coding-region.
-
-2005-03-26 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-breakpoints-mode-map)
- (gdb-frames-mode-map): Add follow-link property.
-
-2005-03-25 Jay Belanger <belanger@truman.edu>
-
- * calc/calcalg2.el (calc-solve-for): Use "Variable(s)" to prompt
- for variables.
-
-2005-03-25 Juri Linkov <juri@jurta.org>
-
- * image-mode.el: Optimize image filename extension regexps in
- autoload cookies. Associate .x[bp]m with `image-mode-maybe'
- in `auto-mode-alist'.
- (image-mode): Add `image-toggle-display-text' to local hook
- `change-major-mode-hook'. Display the image as an image by
- default. Set `cursor-type' and `truncate-lines' if the image
- is already displayed. Take into account the current mode (image
- or text) in message.
- (image-minor-mode): New minor mode.
- (image-mode-maybe, image-toggle-display-text): New functions.
- (image-toggle-display): Use called-interactively-p.
- Let-bind `inhibit-read-only' to t.
-
- * image-mode.el (image-minor-mode): Set `cursor-type' and
- `truncate-lines' if the image is already displayed. Add turning
- image-minor-mode off to `change-major-mode-hook'. Add message.
- Call `image-toggle-display-text' after turning image-minor-mode off.
-
-2005-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * international/mule-cmds.el (set-locale-environment): For Mac OS X's
- Terminal.app, use utf-8.
- (set-display-table-and-terminal-coding-system): Add coding-system arg.
- (set-locale-environment): Use it.
-
- * term/xterm.el: Undo last change, better done in mule-cmds.el.
-
- * emacs-lisp/rx.el (rx-constituents): Add symbol-start and symbol-end.
-
- * progmodes/python.el (python-close-block-statement-p)
- (python-outdent-p, python-current-defun): Use symbol-end.
-
-2005-03-25 Karl Chen <quarl@cs.berkeley.edu>
-
- * files.el (save-some-buffers): Doc fix.
-
-2005-03-25 Werner Lemberg <wl@gnu.org>
-
- * complete.el, thumbs.el: Replace `legal' with `valid'.
- * calendar/calendar.el: Replace `legal' with `valid'.
- * emacs-lisp/advice.el: Replace `legal' with `valid'.
- * mail/supercite.el: Replace `legal' with `valid'.
- * progmodes/cperl-mode.el, progmodes/idlw-shell.el
- * progmodes/idlwave.el, progmodes/vhdl-mode.el:
- Replace `legal' with `valid'.
- * textmodes/reftex-vars.el, textmodes/reftex.el:
- Replace `legal' with `valid'.
-
-2005-03-25 Werner Lemberg <wl@gnu.org>
-
- * calc/calc-forms.el, calc/calc-sel.el
- * midnight.el, vc-cvs.el
- * emacs-lisp/cl-macs.el
- * emulation/vip.el
- * eshell/esh-io.el, eshell/esh-var.el
- * mail/supercite.el
- * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el
- * progmodes/ebnf-ebx.el, progmodes/ebnf-dtd.el, progmodes/ebnf-iso.el
- * progmodes/ebnf-yac.el, progmodes/ebnf2ps.el, progmodes/idlwave.el
- * progmodes/sh-script.el, progmodes/xscheme.el
- * textmodes/refbib.el, textmodes/refer.el, textmodes/reftex-cite.el
- * textmodes/reftex-index.el, textmodes/reftex-parse.el
- * textmodes/reftex-ref.el, textmodes/reftex-vars.el
- * textmodes/reftex.el, textmodes/org.el:
- Replace `illegal' with `invalid'.
-
-2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/flymake.el (flymake-get-file-name-mode-and-masks)
- (flymake-find-buildfile, flymake-find-possible-master-files)
- (flymake-check-include, flymake-parse-line): Replace loops over the
- length of lists, by loops over lists, to remove silly O(n,A2(B) behavior.
-
- * progmodes/flymake.el (flymake-ensure-ends-with-slash): Remove.
- Substitute file-name-as-directory in the rest of the file.
- (flymake-get-common-file-prefix): Rewrite, using compare-strings.
- (flymake-replace-region): Remove unused arg `buffer'.
- (flymake-check-patch-master-file-buffer): Update calls to it.
- (flymake-add-err-info): Remove unused var `count'.
- (flymake-mode): Use define-minor-mode.
-
- * progmodes/flymake.el: Use with-current-buffer.
- (flymake-float-time, flymake-get-temp-dir, flymake-line-end-position)
- flymake-replace-regexp-in-string, flymake-line-beginning-position)
- (flymake-popup-menu, flymake-current-row, flymake-selected-frame):
- Avoid testing for `xemacs'.
- (flymake-nop): Move.
- (flymake-region-has-flymake-overlays): Return the computed value.
- (flymake-reformat-err-line-patterns-from-compile-el): Use dolist.
- Remove unused var `endline'.
- (flymake-get-line-count): Remove unused function.
- (flymake-display-err-menu-for-current-line): Unused var move-mouse-pos.
-
- * emulation/vi.el:
- * generic.el:
- * hilit-chg.el (global-highlight-changes):
- * hi-lock.el (hi-lock-mode):
- * follow.el: find-file-hooks -> find-file-hook.
-
- * comint.el (comint-insert-input): Obey mouse-yank-at-point.
-
-2005-03-24 Juri Linkov <juri@jurta.org>
-
- * dired.el (dired-mode-map): Add menu item "Compare directories"
- for dired-compare-directories.
-
- * dired-aux.el (dired-compare-directories): Add autoload cookie.
- Doc fix. Replace `read-file-name' with `read-directory-name'.
-
-2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * term/xterm.el: If running in Terminal.app set coding-system to utf-8.
-
-2005-03-24 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-embedded-mode-change): Save all
- relevant mode settings in calc-embedded-original-modes when modes
- are permanently changed.
-
-2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * autoinsert.el: find-file-hooks -> find-file-hook.
-
-2005-03-24 Lute Kamstra <lute@gnu.org>
-
- * generic.el (generic-font-lock-defaults): Make it obsolete.
- (generic-font-lock-keywords): New variable to replace
- generic-font-lock-defaults.
- (generic-mode-set-font-lock): Delete it.
- (generic-mode-internal): Don't call generic-mode-set-font-lock.
- (generic-bracket-support): Add docstring.
-
- * generic-x.el: Rename generic-font-lock-defaults to
- generic-font-lock-keywords throughout.
- (mailagent-rules-setup-function): Delete it.
- (mailagent-rules-generic-mode): Use anonymous function instead.
- (show-tabs-generic-mode-font-lock-defaults-1)
- (show-tabs-generic-mode-font-lock-defaults-2): Make them constants.
- Quote faces.
- (show-tabs-tab-face, show-tabs-space-face): Specify background,
- not foreground.
-
- * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression):
- Recognize define-generic-mode.
-
-2005-03-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * icomplete.el (icomplete-simple-completing-p): Don't turn on icomplete
- if there's no completion table.
-
-2005-03-23 Miles Bader <miles@gnu.org>
-
- * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
- Remove tty-specific variants, as they're no longer needed.
-
-2005-03-23 Lute Kamstra <lute@gnu.org>
-
- * generic-x.el: Code cleanup: make args constant whenever possible.
- (installshield-statement-keyword-list)
- (installshield-system-functions-list)
- (installshield-system-variables-list, installshield-types-list)
- (installshield-funarg-constants-list): Make them constants.
-
- * generic.el (generic-make-keywords-list): Add autoload cookie.
-
- * calendar/time-date.el: Add comment on time value formats.
- Don't require parse-time.
- (with-decoded-time-value): New macro.
- (encode-time-value): New function.
- (time-to-seconds, time-less-p, time-subtract, time-add): Use them.
- (days-to-time): Return a valid time value when arg is huge.
- (time-since): Use time-subtract.
- (time-to-number-of-days): Use time-to-seconds.
-
-2005-03-23 David Ponce <david@dponce.com>
-
- * recentf.el (recentf-keep): New option.
- (recentf-menu-action): Default to `find-file'.
- (recentf-keep-non-readable-files-flag)
- (recentf-keep-non-readable-files-p)
- (recentf-file-readable-p, recentf-find-file)
- (recentf-cleanup-remote): Remove.
- (recentf-include-p): More robust.
- (recentf-keep-p): New function.
- (recentf-remove-if-non-kept): Rename from
- `recentf-remove-if-non-readable'. Use `recentf-keep-p'.
- All callers updated.
- (recentf-menu-items-for-commands): Fix help string.
- (recentf-track-closed-file): Update. Doc fix.
- (recentf-cleanup): Update. Count removed files. Doc fix.
-
-2005-03-23 Kim F. Storm <storm@cua.dk>
-
- * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
- Don't inherit from fringe face (now happens automatically).
-
-2005-03-22 Kim F. Storm <storm@cua.dk>
-
- * tooltip.el (tooltip-show-help-function): Ignore negative mouse
- position values.
-
-2005-03-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * menu-bar.el (showhide-date-time): Remove.
- (menu-bar-showhide-menu): Use menu-bar-make-mm-toggle.
- (menu-bar-make-mm-toggle): Simplify.
-
-2005-03-22 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
-
- * progmodes/perl-mode.el (perl-font-lock-keywords-2):
- Accept qualified variable and function names.
-
-2005-03-22 Thien-Thi Nguyen <ttn@gnu.org>
-
- * bindings.el (completion-ignored-extensions):
- Remove ".lis" for `vax-vms'.
-
-2005-03-22 Andreas Schwab <schwab@suse.de>
-
- * generic-x.el: Revert last change.
- * ldefs-boot.el: Update.
-
-2005-03-22 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-embedded-original-modes): New variable.
- (calc-embedded-save-original-modes)
- (calc-embedded-restore-original-modes): New functions.
- (calc-do-embedded): Save original modes when entering embedded mode
- and restore when leaving embedded mode.
- (calc-embedded-modes-change): Change the value of
- calc-embedded-original-modes to reflect permanent changes.
-
-2005-03-22 Lute Kamstra <lute@gnu.org>
-
- * generic-x.el: Require generic again.
-
-2005-03-22 Miles Bader <miles@gnu.org>
-
- * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
- Tweak details to look good on both ttys and bitmap displays, light
- or dark background, etc.
-
-2005-03-21 Kim F. Storm <storm@cua.dk>
-
- * tooltip.el (tooltip-show-help-function): Check car and cdr of
- mouse position.
-
-2005-03-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * icomplete.el: Don't forcibly turn on the mode upon load.
- (icomplete-mode): Use define-minor-mode.
- (icomplete-eoinput): Default to nil.
- (icomplete-minibuffer-setup): Remove autoload.
- (icomplete-tidy): Simplify.
- (icomplete-exhibit): Use buffer-undo-list to determine if we're still
- in the initial state or if the user has modified the field.
- Fix handling of icomplete-max-delay-chars.
- Remove code that handles the oddball case where
- minibuffer-completion-table is an integer.
- Wrap icomplete-completions in while-no-input in case building
- completions takes more time than expected.
- (icomplete-completions): Simplify.
-
-2005-03-21 Richard M. Stallman <rms@gnu.org>
-
- * jka-compr.el (jka-compr-really-do-compress):
- Make variable buffer-local.
-
- * image-mode.el: Handle .xpm files too.
- (image-toggle-display): Preserve modification flag.
-
- * help.el (where-is): Don't mention aliases with no key bindings.
-
-2005-03-21 Lute Kamstra <lute@gnu.org>
-
- * generic.el: Fix commentary section. Don't require cl for
- compilation.
- (generic-mode-list): Add autoload cookie.
- (generic-use-find-file-hook, generic-lines-to-scan)
- (generic-find-file-regexp, generic-ignore-files-regexp)
- (generic-mode, generic-mode-find-file-hook)
- (generic-mode-ini-file-find-file-hook): Fix docstrings.
- (define-generic-mode): Make it a defmacro. Fix docstring.
- (generic-mode-internal): Code cleanup. Add autoload cookie.
- (generic-mode-set-comments): Code cleanup.
- * generic-x.el: Don't prevent compilation. Don't require generic.
- Follow coding conventions. Minor code cleanup.
- (etc-fstab-generic-mode): Add some keywords.
- * font-lock.el (lisp-font-lock-keywords-1): Font lock a call to
- define-generic-mode like a function declaration.
-
-2005-03-21 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-do-embedded): Put data on stack before
- changing modes.
-
-2005-03-21 Sam Steingold <sds@gnu.org>
-
- * add-log.el (add-log-current-defun): Support more C DEFUN forms.
-
-2005-03-21 Thien-Thi Nguyen <ttn@gnu.org>
-
- * progmodes/dcl-mode.el (dcl-font-lock-keywords):
- Add underscore to "f$ lexicals" regexp.
-
-2005-03-20 Juri Linkov <juri@jurta.org>
-
- * subr.el (progress-reporter-do-update): When `min-value' is equal
- to `max-value', set `percentage' to 0 and prevent division by zero.
-
-2005-03-20 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.48.
-
- * net/tramp.el (all): Change all addresses to .gnu.org.
- (tramp-append-tramp-buffers): New defun.
- (tramp-bug): Apply `tramp-append-tramp-buffers' as post-hook.
- Catch `dont-send' signal.
- (tramp-set-auto-save-file-modes): Set always permissions, because
- there might be an old auto-saved file belonging to another
- original file. This could be a security threat. Reported by
- Kjetil Kjernsmo <kjetil@kjernsmo.net>.
- Check for Emacs 21.3.50 removed.
-
- * net/tramp-smb.el (all): Remove debug construct for
- `with-parsed-tramp-file-name'.
- (tramp-smb-prompt): Prompt can contain spaces inside directory names.
- (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file):
- No error message if DIRECTORY or FILENAME doesn't exist.
- (tramp-smb-open-connection): Check existence of
- `tramp-smb-program'.
-
-2005-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function):
- Properly handle the case where the `m' or `s' command's argument is not
- yet terminated.
- (perl-indent-new-calculate): New function.
- (perl-indent-line): Use it.
-
-2005-03-20 Miles Bader <miles@gnu.org>
-
- * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces
- in text-mode too. Change to new face names.
- (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'.
- Add `:weight bold' attribute.
- (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'.
-
-2005-03-19 Juri Linkov <juri@jurta.org>
-
- * files.el (auto-mode-alist): Add comment. Optimize jar/ear/war.
-
- * international/mule.el (auto-coding-alist): Sync with
- `auto-mode-alist' by adding upper case archive file extensions
- and adding ear/war to jar extension.
-
-2005-03-19 David Casperson <casper@unbc.ca> (tiny change)
-
- * textmodes/tex-mode.el (tex-view): If tex-shell process is not
- running, restart it.
-
-2005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes)
-
- * finder.el (finder-current-item): Throw an error on an empty line.
-
- * man.el (Man-follow-manual-reference): If current-word returns
- nil, use "".
-
-2005-03-19 Matt Hodges <MPHodges@member.fsf.org>
-
- * simple.el (goto-line): Doc fix.
-
-2005-03-19 Aaron S. Hawley <Aaron.Hawley@uvm.edu>
-
- * files.el (save-buffer): Doc fix.
-
-2005-03-19 Michael R. Mauger <mmaug@yahoo.com>
-
- * recentf.el (recentf-cleanup-remote): New variable.
- (recentf-cleanup): Use it to conditionally check availability of
- remote files.
-
-2005-03-19 Joe Edmonds <joe-bugs-debian-org@elem.com> (tiny change)
-
- * emacs-lisp/lisp-mode.el (lisp-mode-variables): Recognize `@' in
- function names.
-
-2005-03-19 Eli Zaretskii <eliz@gnu.org>
-
- * language/thai-word.el: New file.
-
-2005-03-19 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
-
- * files.el (backup-buffer): If the file's directory is not
- writable, use copy instead of move to backup the file.
-
-2005-03-19 Eli Zaretskii <eliz@gnu.org>
-
- * obsolete/keyswap.el: Moved to obsolete/ from term/.
-
-2005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-
- * ps-print.el (ps-generate-string-list, ps-generate-header-line):
- Use functionp instead of symbolp and fboundp. Reported by Drkm
- <darkman_spam@yahoo.fr>.
- (ps-print-version): New version 6.6.6.
-
-2005-03-18 Tak Ota <Takaaki.Ota@am.sony.com>
-
- * textmodes/table.el (table--line-column-position): New idiom.
- (table--row-column-insertion-point-p): New function to test
- validity of row and column insertion operation at a location.
- (table-global-menu, table-cell-menu): Use above functions for
- deterministic test operation.
- (table--editable-cell-p): Behave in deterministic fashion.
-
-2005-03-18 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-lazy-highlight-new-loop):
- Make arguments beg and end optional.
- (isearch-update): Remove optional arguments nil from
- isearch-lazy-highlight-new-loop.
- (isearch-lazy-highlight-search): Let-bind case-fold-search to
- isearch-lazy-highlight-case-fold-search instead of
- isearch-case-fold-search, and let-bind isearch-regexp to
- isearch-lazy-highlight-regexp.
- Use isearch-lazy-highlight-last-string instead of isearch-string.
-
- * replace.el (perform-replace): Remove bindings of global
- variables isearch-string, isearch-regexp, isearch-case-fold-search.
- Add three new arguments to `replace-highlight'.
- (replace-highlight): Add arguments string, regexp, case-fold.
- Let-bind isearch-string, isearch-regexp, isearch-case-fold-search
- to allow isearch-lazy-highlight-new-loop to use these values
- to set corresponding isearch-lazy-highlight-* internal
- variables whose values lazy highlighting will use regardless of
- changes to global variables isearch-string, isearch-regexp,
- isearch-case-fold-search during lazy highlighting loop.
- (replace-dehighlight): Rename `isearch-lazy-highlight-cleanup'
- to `lazy-highlight-cleanup'.
-
- * textmodes/ispell.el (ispell-lazy-highlight): New defcustom.
- (ispell-highlight-face): Set default face to `isearch' when
- lazy highlighting is enabled.
- (ispell-highlight-spelling-error-overlay): Set `ispell-overlay'
- priority to 1. Add lazy highlighting.
- (ispell-highlight-spelling-error-xemacs): Remove obsolete arg
- from `isearch-dehighlight'.
-
-2005-03-18 David Ponce <david@dponce.com>
-
- * files.el (hack-local-variables): Do a case-insensitive search
- for End.
-
-2005-03-18 Juri Linkov <juri@jurta.org>
-
- * isearch.el (lazy-highlight-cleanup) <command>: Rename from
- `isearch-lazy-highlight-cleanup', add alias to old name and
- declare obsolete. Add release numbers to other obsolete vars.
- (isearch-done, isearch-lazy-highlight-new-loop):
- Rename `isearch-lazy-highlight-cleanup' to `lazy-highlight-cleanup'.
- (lazy-highlight-cleanup) <variable>: Doc fix.
- (isearch-lazy-highlight-update): Rename obsolete
- `isearch-lazy-highlight-face' to `lazy-highlight-face'.
-
-2005-03-18 Kenichi Handa <handa@m17n.org>
-
- * language/thai-util.el: Fix categorization of Thai characters in
- thai-category-table.
- (thai-composition-pattern): Adjust it for the above change.
- (thai-self-insert-command, thai-compose-syllable): New functions.
- (thai-compose-region): Use thai-compose-syllable.
- (thai-compose-string): Likewise.
- (thai-composition-function): Likewise.
- (thai-auto-composition): New function.
- (thai-auto-composition-mode): New minor mode.
-
- * language/thai.el: Fix patterns to be registered in
- composition-function-table.
-
- * international/quail.el (quail-input-method): Locally bind
- inhibit-modification-hooks to t.
-
-2005-03-17 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/perl-mode.el (perl-mode-hook): Defvar it.
- (perl-mode): Use run-mode-hooks.
-
- * mail/rmail.el (rmail-movemail-program, rmail-pop-password)
- (rmail-pop-password-required, rmail-remote-password): Doc fixes.
- (rmail-preserve-inbox, rmail-probe, rmail-autodetect): Doc fix.
-
- * mail/sendmail.el (sendmail-send-it): Reenable the code
- to compute resend-to-address and use it.
-
- * tar-mode.el (tar-mode): Turn off undo unconditionally.
-
- * image-mode.el: New file.
-
- * image.el (insert-sliced-image): Add autoload cookie.
-
- * font-lock.el (font-lock-lines-before): New user option.
- (font-lock-after-change-function): Obey it.
-
- * bindings.el (esc-map): Make M-g a prefix.
- Bind M-g g and M-g M-g to goto-line.
-
- * faces.el (face-id): Doc fix.
-
-2005-03-17 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
-
- * mail/rmail.el (rmail-unknown-mail-followup-to): New function.
- (rmail-show-message): Use rmail-unknown-mail-followup-to.
- (rmail-reply): Recognize Mail-Followup-To and Mail-Reply-To headers.
-
- * mail/sendmail.el (mail-yank-ignored-headers)
- (mail-font-lock-keywords, mail-mode-fill-paragraph):
- Add Mail-Followup-To and Mail-Reply-To headers.
- (mail-citation-hook): Add autoload cookie.
- (mail-mode): Doc fix.
- (mail-mode-map): Bind mail-mail-followup-to and mail-mail-reply-to.
- (mail-send): Compute Mail-Followup-To and Mail-Reply-To headers.
- (mail-mode-fill-paragraph): Handle those headers.
- (mail-mailing-lists): New variable.
- (mail-mail-reply-to, mail-mail-followup-to): New functions.
-
-2005-03-17 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-fallback): Check for `(car previous)'
- before calling `isearch-other-end-state'.
-
-2005-03-17 Kim F. Storm <storm@cua.dk>
-
- * simple.el (move-beginning-of-line): Move to beginning of buffer
- line, as well as beginning of screen line.
-
-2005-03-16 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/diary-lib.el (mark-diary-entries): Use new optional
- argument REDRAW rather than calendar-redrawing variable.
- * calendar/calendar.el (calendar-redrawing): Delete.
- (redraw-calendar): Do not bind calendar-redrawing.
-
-2005-03-16 Matt Hodges <MPHodges@member.fsf.org>
-
- * calendar/diary-lib.el (diary-redraw-calendar): Preserve point in
- diary-file buffer.
-
-2005-03-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * help.el (describe-mode): Allow a :minor-mode-function property to
- specify a different minor mode toggle function than the variable.
- * simple.el (auto-fill-function):
- * subr.el (add-minor-mode): Use it.
-
-2005-03-16 Kenichi Handa <handa@m17n.org>
-
- * language/ethio-util.el (sera-being-called-by-w3): New variable.
- (ethio-sera-to-fidel-ethio): Check also sera-being-called-by-w3.
- (ethio-fidel-to-sera-buffer): Likewise.
-
-2005-03-16 Juri Linkov <juri@jurta.org>
-
- * emacs-lisp/find-func.el (find-function-regexp):
- Add defun-emitting macro `menu-bar-make-toggle'.
-
- * isearch.el: Put `isearch-scroll' property to
- `split-window-horizontally'.
-
- * info.el: Update error messages for `debug-ignored-errors'.
- (Info-isearch-search): Doc fix.
- (Info-find-node): Move up code to go into info buffer before
- recording the node to the history.
- (Info-fontify-node): Fontify titles only if the next line
- has two or more `*', `=', `-', `.'.
- Display "go to this node" for empty (match-string 3).
-
-2005-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * term/mac-win.el: Add mouse pointer shape constants.
-
-2005-03-15 Kim F. Storm <storm@cua.dk>
-
- * simple.el (move-beginning-of-line): Use vertical-motion.
-
-2005-03-15 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-error): New variable.
- (isearch-invalid-regexp, isearch-within-brackets): Remove.
- (isearch-error-state): Rename from `isearch-invalid-regexp-state'.
- (isearch-within-brackets-state): Remove.
- (isearch-case-fold-search-state, isearch-pop-fun-state):
- Decrease frame index.
- (isearch-mode, isearch-top-state, isearch-push-state)
- (isearch-edit-string, isearch-abort, isearch-search-and-update)
- (isearch-fallback, isearch-message-prefix, isearch-message-suffix)
- (isearch-search, isearch-lazy-highlight-new-loop):
- Replace `isearch-invalid-regexp' with `isearch-error'.
- Remove `isearch-within-brackets'.
- (isearch-search): Add `search-failed' handler to `condition-case'.
- (isearch-lazy-highlight-search): Add `condition-case' to catch
- errors and allow `isearch-lazy-highlight-update' to try
- highlighting from the beginning of the window.
- (isearch-repeat): Move up code to set isearch-wrapped to t
- before calling isearch-wrap-function.
-
- * info.el (Info-isearch-initial-node): New internal variable.
- (Info-search): Signal an error in isearch mode when search leaves
- the initial node. Signal an error when `bound' is non-nil and
- nothing was found in the current subfile.
- (Info-isearch-search): Remove `condition-case'.
- (Info-isearch-wrap): Don't wrap when search failed during leaving
- the initial node. If `Info-isearch-search' is nil, wrap around
- the current node.
- (Info-isearch-start): New fun.
- (Info-mode): Add buffer-local hook `Info-isearch-start' to
- `isearch-mode-hook'.
-
-2005-03-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * simple.el (normal-erase-is-backspace): Set default to t if
- running on Mac.
-
- * term/mac-win.el (function-key-map): Sync with x-win.el.
-
-2005-03-15 Kenichi Handa <handa@m17n.org>
-
- * international/mule-cmds.el (locale-language-names): Modify the
- format of elements and add more entries.
- (locale-preferred-coding-systems): Add more entries.
- (set-locale-environment): Adjust for the change of
- locale-language-names.
-
-2005-03-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs.el (smerge-ediff): Remove bogus autoload.
-
-2005-03-14 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debugger-make-xrefs): Docstring fix.
- Ignore a `*' at the beginning of a line.
-
- * subr.el (macro-declaration-function): Move to emacs-lisp/byte-run.el.
- * emacs-lisp/byte-run.el (macro-declaration-function): Move from
- subr.el.
- (dont-compile, eval-when-compile, eval-and-compile): Use declare
- to specify indentation.
-
- * generic.el (define-generic-mode): Let generic-mode-list be a
- list of strings; test membership with equal.
-
-2005-03-14 Kim F. Storm <storm@cua.dk>
-
- * simple.el (next-line, previous-line): Add optional try-vscroll
- arg to recognize interactive use. Pass it on to line-move.
- (line-move): Don't perform auto-window-vscroll when defining or
- executing keyboard macro to ensure consistent behavior.
-
-2005-03-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * pcvs-util.el (cvs-string->strings): Strip trailing whitespace.
-
-2005-03-13 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debug): Set debug-on-exit before calling
- debugger-setup-buffer so that backtrace marks the frames set to
- debug-on-exit and we don't have to do it manually. Set an extra
- debug-on-exit for macro's.
- (debugger-setup-buffer): Don't mark the top frame manually.
-
-2005-03-12 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/byte-run.el: Replace lisp-indent-hook with
- lisp-indent-function throughout.
- (with-no-warnings): Set lisp-indent-function property.
-
-2005-03-12 Thien-Thi Nguyen <ttn@gnu.org>
-
- * progmodes/dcl-mode.el (dcl-mode-syntax-table):
- Add entry for backslash.
-
-2005-03-12 Juri Linkov <juri@jurta.org>
-
- * info.el (Info-search): Four fixes for backward search.
-
-2005-03-11 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-language-alist): New variable.
- * calc/calc-embed.el (calc-embedded-language-alist): Remove.
- (calc-embedded-find-modes): Use calc-language-alist instead of
- calc-embedded-language-alist.
-
-2005-03-11 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/calendar.el (calendar-redrawing): New internal
- variable.
- (redraw-calendar): Remove bogus save-excursion from previous
- change. Bind calendar-redrawing to t for mark-diary-entries.
- * calendar/diary-lib.el (mark-diary-entries): No need to redraw
- calendar if that is why we were called.
-
-2005-03-11 Kenichi Handa <handa@m17n.org>
-
- * international/mule.el (make-coding-system): Set property
- coding-system-define-form to nil.
- (define-coding-system-alias): Likewise.
-
-2005-03-11 Kenichi Handa <handa@m17n.org>
-
- These changes are suggested by Dave Love <fx@gnu.org>.
-
- * textmodes/fill.el: Change encoding to iso-2022-7bit and add
- coding: tag.
- (adaptive-fill-regexp): Add more bullets.
- (fill-french-nobreak-p): Add Latin-1 and Latin-9 guillemets in
- regexps.
-
-2005-03-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * help.el (describe-mode): Properly handle non-trivial lighters.
- Don't ignore minor modes that are not listed in minor-mode-list.
-
- * tooltip.el (tooltip-mode): Don't complain that you can't turn the
- feature ON when the user requests to turn it OFF.
-
-2005-03-10 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debug-entry-code): Delete it.
- (implement-debug-on-entry): New function to replace debug-entry-code.
- (debug-on-entry-1): Use implement-debug-on-entry. Delete the
- second argument as the 2005-03-07 change makes it obsolete.
- (debug-on-entry, cancel-debug-on-entry): Update call to
- debug-on-entry-1.
- (debug, debugger-setup-buffer): Comment update.
- (debugger-frame-number): Update to work with implement-debug-on-entry.
-
-2005-03-10 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (math-ms-args): Declare it.
- (calc-embedded-eval-expr, calc-embedded-eval-get-var): Use variable
- math-ms-args.
- (calc-embedded-subst): Use math-multi-subst-rec to substitute
- variables.
-
-2005-03-10 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-handler, gdb-get-location):
- Use message-box.
-
- * tooltip.el (tooltip-mode): Use define-minor-mode and simplify.
- (tooltip-activate-mouse-motions-if-enabled): Use dolist.
- (tooltip-gud-tips): Simplify.
- (tooltip-gud-tips-p): Remove superfluous :set.
- (tooltip-gud-modes): Add fortran-mode.
- (gdb-tooltip-print): Remove newline for tooltip-use-echo-area.
-
- * bindings.el (mode-line-mode-menu): Add tooltip-mode to mode-line.
-
-2005-03-09 Kim F. Storm <storm@cua.dk>
-
- * play/animate.el (animate-place-char): Use forward-line instead
- of next-line to improve performance.
-
-2005-03-09 Simon Josefsson <jas@extundo.com>
-
- * net/browse-url.el (browse-url-default-browser): Doc fix.
-
-2005-03-09 Miles Bader <miles@gnu.org>
-
- * emacs-lisp/bytecomp.el (byte-compile-variable-ref)
- (byte-compile-obsolete): Change " since VER" to " (as of Emacs VER)".
-
-2005-03-09 Kenichi Handa <handa@m17n.org>
-
- * international/latin-1.el: Set case and syntax for 255 only if
- set-case-syntax-set-multibyte is nil.
-
- * textmodes/ispell.el (ispell-insert-word): New function.
- (ispell-word): Use ispell-insert-word to insert a new word.
- (ispell-process-line): Likewise.
- (ispell-complete-word): Likewise.
-
-2005-03-09 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/calendar.el (redraw-calendar): Preserve point.
- Reported by Matt Hodges <MPHodges@member.fsf.org>.
- (calendar-week-start-day): Move after definition of
- redraw-calendar. Delete buffer test, since redraw-calendar has
- that now.
-
- * calendar/diary-lib.el (mark-diary-entries): Only call
- redraw-calendar in the first of any recursive calls.
- Reported by Alan Shutko <ats@acm.org>.
-
-2005-03-08 Juri Linkov <juri@jurta.org>
-
- * textmodes/sgml-mode.el (sgml-tag, html-tag-alist)
- (html-horizontal-rule, html-line, html-image, html-checkboxes)
- (html-radio-buttons): Add a space before the trailing `/>' where
- sgml-xml-mode is non-nil.
- (sgml-delete-tag): Check if the tag ends with `/>' to not delete
- the subsequent tag of the empty XML tag.
- (html-href-anchor): Don't set initial input to "http:".
- (html-image): Ask for the image URL and set point inside alt="".
- (html-name-anchor): Duplicate the name in the `id' attribute when
- sgml-xml-mode is non-nil.
- (html-paragraph): Remove \n before <p>.
- (html-checkboxes, html-radio-buttons): Insert `checked="checked"'
- instead of `checked' when sgml-xml-mode is non-nil.
-
- * facemenu.el (list-colors-print): Print #RRGGBB in default face.
- Remove 1 space before #RRGGBB to not truncate it on terminal
- windows w/o fringes. Remove 1 space between bg and fg examples
- to get more space.
- (list-colors-duplicates): Replace `and' with `if' for `boundp' to
- avoid byte-compile warnings.
-
- * image-file.el (image-file-handler): Put `safe-magic' property to
- `image-file-handler'.
-
- * info.el (Info-isearch-search): Emulate word search in
- isearching through multiple Info nodes with Info-search.
- (Info-isearch-wrap): Allow isearch-word.
-
-2005-03-08 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debugger-step-through): Make sure that
- stepping into the debugger's code is not possible.
- (debugger-jumping-flag): Docstring update.
-
-2005-03-08 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-do-embedded): Reset mode line when
- embedded mode begins.
- (calc-embedded-language-alist): New variable.
- (calc-embedded-find-modes): Use calc-embedded-language-alist to
- set default language mode.
-
-2005-03-08 Kenichi Handa <handa@m17n.org>
-
- * international/ccl.el (define-ccl-program): Fix docstring about
- extra 256 bytes assured for the output buffer.
-
- * international/utf-16.el (ccl-encode-mule-utf-16le-with-signature):
- Fix BUFFER_MAGNIFICATION to 2.
- (ccl-encode-mule-utf-16be-with-signature): Likewise.
-
-2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
-
- * align.el (align-rules-list): Added an alignment rule for CSS
- declarations (applies to css-mode and html-mode buffers).
-
-2005-03-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/debug.el (debug-on-entry-1): Fix handling of macros.
-
-2005-03-07 Kim F. Storm <storm@cua.dk>
-
- * simple.el (move-beginning-of-line): New command.
-
- * bindings.el (global-map): Bind C-a to move-beginning-of-line.
-
- * reveal.el (reveal-mode-map): Bind C-a to beginning-of-line.
-
- * emulation/cua-base.el: Put CUA move property on move-end-of-line
- and move-beginning-of-line.
-
- * apropos.el (apropos-print): Omit command from M-x ... RET.
-
-2005-03-07 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-var-create-handler): Handle just MI case.
- (gdb-send, gdb-send-item): Log items sent from gdb-send too.
-
-2005-03-06 Richard M. Stallman <rms@gnu.org>
-
- * bindings.el (esc-map): Bind M-g to goto-line.
-
- * facemenu.el (global-map): Bind M-o, not M-g.
-
-2005-03-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * menu-bar.el (menu-bar-file-menu): Add the same :enable to
- "Open Directory" as for "Open File".
-
-2005-03-06 Chong Yidong <cyd@stupidchicken.com>
-
- * simple.el (activate-mark-hook, deactivate-mark-hook): Add defvars.
- (push-mark-command): Run activate-mark-hook.
-
-2005-03-06 Richard M. Stallman <rms@gnu.org>
-
- * help-mode.el (help-mode-finish): Don't alter the element
- in view-return-to-alist if there already is one.
-
- * jit-lock.el (jit-lock-stealth-fontify): When calling sit-for,
- make sure the current buffer is the expected one.
-
- * novice.el (disabled-command-function): Output in *Disabled Command*.
- Explicitly ignore non-keyboard events, and explicitly handle C-g.
-
- * textmodes/flyspell.el (flyspell-large-region):
- Pass args differently for aspell.
-
- * files.el (mode-require-final-newline): Doc fix.
-
-2005-03-03 Stephan Stahl <stahl@eos.franken.de> (tiny change)
-
- * progmodes/which-func.el (which-function):
- Specify NOERROR when calling imenu--make-index-alist.
-
-2005-03-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * simple.el (normal-erase-is-backspace): Define default value.
-
- * custom.el (custom-theme-set-variables): Remove unused var
- `immediate'.
- (custom-reevaluate-setting): Simple function to handle variables
- that are defined before their default value can really be
- computed.
-
- * startup.el (command-line): Use it for temporary-file-directory,
- small-emporary-file-directory, auto-save-file-name-transforms,
- blink-cursor-mode, and normal-erase-is-backspace.
-
- * font-lock.el (font-lock-fontify-keywords-region): Ensure forward
- progress, even with buggy anchored keywords.
-
-2005-03-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * simple.el (goto-line): Remove unbalanced final parenthesis.
-
-2005-03-05 Richard M. Stallman <rms@gnu.org>
-
- * simple.el (goto-line): Use a number at point as the default.
- With C-u as arg, switch buffers.
-
-2005-03-05 Juri Linkov <juri@jurta.org>
-
- * frame.el (blink-cursor-mode): Replace `emacs-quick-startup'
- with `no-blinking-cursor'.
-
- * startup.el (no-blinking-cursor): New defvar.
- (command-line): Add `--no-blinking-cursor' to longopts.
- Set `no-blinking-cursor' to t for command line arguments
- -Q, -nbc, --no-blinking-cursor. Replace `emacs-quick-startup'
- with `no-blinking-cursor' in the condition for calling
- `blink-cursor-mode'.
-
-2005-03-04 Luc Teirlinck <teirllm@auburn.edu>
-
- * menu-bar.el (menu-bar-make-mm-toggle): Doc fix.
- (menu-bar-options-save): Add blink-cursor-mode.
- (menu-bar-options-menu): Add blink-cursor-mode.
-
-2005-03-04 Ulf Jasper <ulf.jasper@web.de>
-
- * calendar/icalendar.el (icalendar-version): Increase to 0.11.
- (icalendar-export-file, icalendar-export-region)
- (icalendar-import-file, icalendar-import-buffer): Add autoload cookies.
- (icalendar--convert-ical-to-diary): Fix problem with DURATION.
-
-2005-03-04 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (debugger-step-after-exit): Make it a defvar.
- (debug-function-list): Ditto.
-
-2005-03-04 Robert J. Chassell <bob@rattlesnake.com>
-
- * textmodes/texinfmt.el (texinfo-append-refill):
- Redefine the types of line to which @refill
- is not appended by replacing a search for `@refill\\|@bye' with
- `@refill\\|^[ \t]*@'. The intent is to solve both the `@end
- itemize@refill' bug and the unfilled long lines bug.
- (texinfmt-version): Update number and date.
-
-2005-03-04 Reiner Steib <Reiner.Steib@gmx.de>
-
- * international/code-pages.el (windows-1250, windows-125[2-8])
- (iso-8859-10, -13, -16, georgian-ps): Add autoload cookies.
-
-2005-03-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * frame.el (blink-cursor-mode): `emacs-quick-startup' may not be
- bound yet.
-
-2005-03-02 Romain Francoise <romain@orebokech.com>
-
- * ibuf-ext.el (ibuffer-filter-disable): Move back to the current
- buffer after removing limits.
- (ibuffer-pop-filter): Ditto.
- Update copyright.
-
-2005-03-02 Miles Bader <miles@gnu.org>
-
- * button.el (make-text-button): If the user doesn't specify a
- type, use the default. Rewrite to use `add-text-properties' and
- plist functions.
-
-2005-03-01 Lute Kamstra <lute@gnu.org>
-
- * emacs-lisp/debug.el (inhibit-debug-on-entry): Add docstring.
- (debugger-jumping-flag): New var.
- (debug-entry-code): Use it.
- (debugger-jump): Use debugger-jumping-flag and add
- debugger-reenable to post-command-hook.
- (debugger-reenable): Use debugger-jumping-flag and remove itself
- from post-command-hook.
- (debug, debug-on-entry, cancel-debug-on-entry): Remove call to
- debugger-reenable.
-
-2005-03-01 Robert J. Chassell <bob@rattlesnake.com>
-
- * textmodes/texinfmt.el (texinfo-no-refill-regexp): Comment out
- inclusion of "itemize\\|", which may be unnecessary, is certainly
- inelegant, and stops refilling in itemize lists when formatting
- Japanese Texinfo files to Info.
- Update copyright to 2005.
-
-2005-03-01 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-get-location): Use a warning instead
- of an error if GDB can't find the source file.
-
-2005-03-01 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * calendar/calendar.el (redraw-calendar): Work from any buffer,
- not just the calendar.
-
- * calendar/diary-lib.el (mark-diary-entries): Remove any old marks
- first.
- (diary-redraw-calendar): New function.
- (make-diary-entry): Add diary-redraw-calendar to local
- write-contents-functions. Turn off selective display before
- inserting in diary.
+2007-05-28 Chong Yidong <cyd@stupidchicken.com>
-2005-03-01 Kim F. Storm <storm@cua.dk>
+ * textmodes/sgml-mode.el (sgml-point-entered): Use condition-case.
- * emacs-lisp/copyright.el (copyright-fix-years): New command.
+2007-05-27 Tetsurou Okazaki <okazaki@be.to> (tiny change)
-2005-03-01 Lute Kamstra <lute@gnu.org>
+ * log-edit.el (log-edit-changelog-paragraph): Return point-max
+ as the end of the ChangeLog paragraph when it ends without a line
+ termination.
- * emacs-lisp/debug.el (debug-on-entry-1): Reimplement to make sure
- that debug-entry-code can be safely removed from a function while
- this code is being evaluated. Revert the 2005-02-27 change as the
- new implementation no longer requires it. Make sure that a
- function body containing just a string is not mistaken for a docstring.
- (debug): Skip one more frame in case of debug on entry.
- (debugger-setup-buffer): Delete one more frame line in case of
- debug on entry.
- (debugger-frame-number): Update to use the new text introduced by
- the 1999-11-03 change. Skip one more frame in case of debug on entry.
+2007-05-27 Ryan Yeske <rcyeske@gmail.com>
-2005-02-28 Kim F. Storm <storm@cua.dk>
+ * net/webjump.el (webjump-sample-sites):
+ Add simple Wikipedia query.
- * double.el (double-translate-key): Call force-window-update after
- read-event to avoid crash in redisplay.
+2007-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
+ * emacs-lisp/derived.el (define-derived-mode): Remove bogus
+ compatibility code.
- * emacs-lisp/debug.el (inhibit-debug-on-entry): New var.
- (debug): Use it. Move the inhibit-trace earlier.
- (debug-entry-code): New const.
- (debug-on-entry-1): Use it.
+ * emacs-lisp/copyright.el (copyright-names-regexp): New var.
+ (copyright-update-year): Use it.
-2005-02-28 Chong Yidong <cyd@stupidchicken.com>
+ * edmacro.el (edmacro-format-keys): Use current-active-maps.
- * international/utf-16.el (ccl-encode-mule-utf-16le):
- Fix BUFFER_MAGNIFICATION to 2.
- (ccl-encode-mule-utf-16be): Likewise.
+ * ediff-init.el (ediff-defvar-local, ediff-with-current-buffer):
+ Add indentation and debugging info. Fix up comment convention.
-2005-02-28 Kenichi Handa <handa@m17n.org>
+ * cus-dep.el (custom-make-dependencies): Simplify.
- * international/utf-16.el (ccl-encode-mule-utf-16le-with-signature):
- Fix BUFFER_MAGNIFICATION to 4.
- (ccl-encode-mule-utf-16be-with-signature): Likewise.
+ * composite.el (compose-region, decompose-region):
+ Use inhibit-read-only and restore-buffer-modified-p.
-2005-02-28 Nick Roberts <nickrob@snap.net.nz>
+ * xt-mouse.el (xterm-mouse-truncate-wrap): New function.
+ (xterm-mouse-event): Use it.
- * speedbar.el (speedbar-update-flag): Doc fix.
- (speedbar-show-info-under-mouse): Give set-mouse-position the right
- argument.
+2007-05-25 Juanma Barranquero <lekktu@gmail.com>
-2005-02-27 Stefan Monnier <monnier@iro.umontreal.ca>
+ * bs.el (bs-cycle-previous): Don't modify the cycle list until
+ `switch-to-buffer' has returned succesfully.
+ (bs-cycle-next): Ditto. Also, don't bury the buffer when the
+ window is dedicated (it could iconify the frame).
- * reveal.el (reveal-post-command): Don't try to reveal overlays which
- have a non-nil `invisible' property but are actually visible.
+2007-05-25 Miles Bader <miles@fencepost.gnu.org>
- * progmodes/perl-mode.el (perl-imenu-generic-expression): Add entries
- for perldoc sections.
- (perl-outline-regexp, perl-outline-level): New var and function.
- (perl-mode): Use them.
+ * vc-hooks.el (vc-find-root): Fix file attribute test.
-2005-02-27 Glenn Morris <gmorris@ast.cam.ac.uk>
+2007-05-24 Richard Stallman <rms@gnu.org>
- * calendar/diary-lib.el (diary-remind): Discard any mark portion
- from diary-entry. Reported by Andrew Kemp <ajwk@pell.uklinux.net>.
+ * textmodes/flyspell.el (flyspell-correct-word-before-point):
+ Don't let opoint be nil.
+ (flyspell-emacs-popup): Explicit error if no dialogs.
-2005-02-27 Luc Teirlinck <teirllm@auburn.edu>
+2007-05-24 Chong Yidong <cyd@stupidchicken.com>
- * cus-edit.el: Comment change.
- (custom-buffer-create-internal): Slightly reword text at top of
- Custom buffers. Mention there that saving an option edits the
- init file. Add link to Emacs manual node on `custom-file'.
- (custom-magic-alist): Rewrite individual State messages to use
- capitalized keywords. Doc fix.
+ * image-mode.el (image-forward-hscroll, image-backward-hscroll)
+ (image-next-line, image-previous-line, image-scroll-up)
+ (image-scroll-down, image-bol, image-eol, image-bob, image-eob):
+ New functions.
+ (image-mode-map): Remap motion commands.
+ (image-mode-text-map): New keymap for viewing images as text.
+ (image-mode): Use image-mode-map.
+ (image-toggle-display): Toggle auto-hscroll-mode and mode keymaps.
-2005-02-27 Matt Hodges <MPHodges@member.fsf.org>
+2007-05-24 Stefan Monnier <monnier@iro.umontreal.ca>
- * calendar/calendar.el (calendar-buffer): Move above
- calendar-week-start-day.
- (calendar-week-start-day): Doc fix. Add :set function.
- (calendar-minimum-window-height): New variable.
- (generate-calendar-window): Only resize window if selected-window
- is displaying the calendar buffer. Use new variable
- calendar-minimum-window-height.
- (generate-calendar): Reword error message.
- (calendar-mode-map): Bind DEL to scroll-other-window-down.
+ * textmodes/fill.el (canonically-space-region): Make the second arg
+ a marker if it's not already the case.
-2005-02-27 Andreas Schwab <schwab@suse.de>
+2007-05-23 Eli Zaretskii <eliz@gnu.org>
- * vc.el (vc-do-command): Don't run command asynchronously when
- operating in a remote directory.
+ * tar-mode.el (tar-header-block-summarize, tar-summarize-buffer)
+ (tar-get-descriptor): Handle type 55, an extended pax header.
- * net/tramp.el (tramp-file-name-for-operation): Fix misapplied
- change from sync with Tramp 2.0.47.
+2007-05-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-02-27 Richard M. Stallman <rms@gnu.org>
+ * autoinsert.el (auto-insert-alist): Quote elisp sample code so as not
+ to confuse outline-minor-mode.
- * textmodes/ispell.el (ispell-change-dictionary): Doc fix.
+2007-05-23 Eli Zaretskii <eliz@gnu.org>
- * textmodes/flyspell.el (flyspell-mode-on):
- Call ispell-change-dictionary only if necessary.
+ * tar-mode.el (tar-file-name-handler): New function.
+ (tar-extract): Bind file-name-handler-alist to it to force
+ find-buffer-file-type-coding-system behave as if the file being
+ extracted existed. Use last-coding-system-used to force
+ buffer-file-coding-system to what decode-coding-region actually
+ used to decode the file.
- * emacs-lisp/re-builder.el (regexp-builder): New function.
+2007-05-23 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
- * register.el (describe-register-1): Explicitly handle
- yank-excluded-properties = t.
+ * progmodes/compile.el (compilation-handle-exit):
+ `compilation-finish-function' may change the current buffer.
- * cus-edit.el (custom-buffer-create-internal): Improve progress msgs.
- (custom-magic-alist): Change the status descriptions again.
- (face widget-type): Total rewrite based on `restricted-sexp'
- to eliminate the confusing double hiding levels.
+2007-05-22 Richard Stallman <rms@gnu.org>
- * emacs-lisp/debug.el (debug-on-entry-1):
- If function body is empty, add nil as body form.
+ * files.el (set-auto-mode): Doc fix.
-2005-02-26 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-05-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * emacs-lisp/trace.el (inhibit-trace): New var.
- (trace-make-advice): Use it.
+ * help-fns.el (find-source-lisp-file): New function.
+ (describe-function-1): Use find-source-lisp-file to find source
+ file in compile tree.
- * emacs-lisp/debug.el (debug): Put back the inhibit-trace.
+2007-05-22 Eli Zaretskii <eliz@gnu.org>
-2005-02-26 Kim F. Storm <storm@cua.dk>
+ * dos-w32.el (find-buffer-file-type-coding-system): Doc fix.
- * mouse.el (mouse-1-click-in-non-selected-windows): New defcustom.
- (mouse-on-link-p, mouse-drag-region-1): Use it.
+2007-05-22 Juanma Barranquero <lekktu@gmail.com>
-2005-02-25 Lute Kamstra <lute@gnu.org>
+ * emacs-lisp/easy-mmode.el (define-minor-mode)
+ (easy-mmode-define-navigation): Fix typos in docstrings.
- * replace.el (query-replace-read-from): Fix 2005-02-19 change.
+2007-05-22 Glenn Morris <rgm@gnu.org>
-2005-02-24 Luc Teirlinck <teirllm@auburn.edu>
+ * files.el (auto-mode-alist): Open `.asd' files in lisp-mode.
- * frame.el (blink-cursor-mode): Add :group keyword.
+2007-05-22 Katsumi Yamaoka <yamaoka@jpl.org>
-2005-02-24 Ulf Jasper <ulf.jasper@web.de>
+ * mail/mail-extr.el (mail-extract-address-components):
+ Recognize non-ASCII characters except for NBSP as words.
- * calendar/icalendar.el (icalendar--decode-isodatetime):
- New optional argument DAY-SHIFT.
- (icalendar-export-region): Fix coding-system-for-write.
- (icalendar--convert-ical-to-diary): Shift end-day of all-day
- events by one.
+2007-05-21 Trent Buck <trentbuck@gmail.com> (tiny change)
-2005-02-24 Stefan Monnier <monnier@iro.umontreal.ca>
+ * net/rcirc.el (rcirc-fill-column): Allow `window-width'.
+ (rcirc-print): Handle `window-width'.
+ (rcirc-buffer-maximum-lines): Doc fix.
- * textmodes/tex-mode.el (tex-font-lock-keywords-3): #n is atomic.
+2007-05-21 Chong Yidong <cyd@stupidchicken.com>
-2005-02-24 Kim F. Storm <storm@cua.dk>
+ * image-mode.el (image-toggle-display): Don't clear image cache.
+ Only use filename in image spec if the file is readable.
+ Call image-refresh.
- * international/iso-acc.el (iso-accents-compose): Fix crash
- during redisplay. Call force-window-update after read-event
- and delete-region to signal that window is not accurate.
+ * image.el (image-type-from-file-name, image-type): Simplify.
+ (image-type-auto-detected-p): Don't scan auto-mode-alist.
-2005-02-23 Stefan Monnier <monnier@iro.umontreal.ca>
+ * files.el (magic-mode-alist): Remove image-type-auto-detected-p.
+ (magic-fallback-mode-alist): Add image-type-auto-detected-p.
- * emacs-lisp/debug.el (debug): Hide the buffer if it's not killed.
- Remove unused and inexistent var `inhibit-trace'.
- (debugger-mode): Use run-mode-hooks.
- (debugger-list-functions): Add buttons; setup xref stack.
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
-2005-02-23 Richard M. Stallman <rms@gnu.org>
+ * t-mouse.el (t-mouse-mode): Reset t-mouse-mode to nil if there
+ is an error.
- * calendar/appt.el (appt-time-msg-list): 3rd elt of each
- appointment says it was explicitly made.
- (appt-add): Set the 3rd element.
- (appt-make-list): Preserve explicit appointments.
+ * term/linux.el (terminal-init-linux): Don't signal an error
+ if gpm isn't running.
- * subr.el (find-tag-default): Catch errors in forward-sexp.
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
-2005-02-23 Juri Linkov <juri@jurta.org>
+ * t-mouse.el: Reduce to a minor-mode macro call.
+ (t-mouse-mode): Remove the lighter.
- * info.el (Info-isearch-search): New defcustom.
- (Info-isearch-search): Call the default isearch function
- when Info-isearch-search is nil.
- (Info-isearch-wrap): Use variable Info-isearch-search.
+ * term/linux.el (terminal-init-linux): Enable t-mouse by default.
-2005-02-22 Luc Teirlinck <teirllm@auburn.edu>
+2007-05-19 Dan Nicolaescu <dann@ics.uci.edu>
- * cus-edit.el: Comment change.
+ * files.el (auto-mode-alist): Change the regexp so that
+ ChangeLog.unicode and ChangeLog.multi-tty use change-log-mode.
-2005-02-22 Kim F. Storm <storm@cua.dk>
+2007-06-02 Chong Yidong <cyd@stupidchicken.com>
- * progmodes/hideif.el (hide-ifdef-use-define-alist):
- Use completing-read. Suggested by Juan-Leon Lahoz Garcia.
+ * Version 22.1 released.
-2005-02-22 Simon Josefsson <jas@extundo.com>
+2007-05-19 Chong Yidong <cyd@stupidchicken.com>
- * net/browse-url.el (browse-url-netscape-new-window-is-tab):
- New variable.
- (browse-url-netscape): Use it. Suggested by "Johann 'Myrkraverk'
- Oskarsson" <myrkraverk@users.sourceforget.net>.
+ * paren.el (show-paren-function): Undo 2007-04-19 and 2007-04-20
+ changes.
-2005-02-22 Kim F. Storm <storm@cua.dk>
+2007-05-19 Kevin Ryde <user42@zip.com.au>
- * mouse.el (mouse-on-link-p): If arg POS is a mouse event,
- check that window of that event is the selected window.
- (mouse-drag-region-1): Compare mouse event window to selected
- window before setting point.
+ * info.el (Info-fontify-node): Fontify https as well as http and ftp.
- * tooltip.el (tooltip-show-help-function): Pass event to
- mouse-on-link-p so it can check selected window.
+2007-05-18 Thien-Thi Nguyen <ttn@gnuvola.org>
-2005-02-22 Kenichi Handa <handa@m17n.org>
+ * textmodes/sgml-mode.el: Revert last change.
- * ps-mule.el (ps-mule-header-string-charsets): Delete it.
- (ps-mule-show-warning): New function.
- (ps-mule-begin-job): Use ps-mule-show-warning if unprintable
- characters are found.
+2007-05-18 Richard Stallman <rms@gnu.org>
- * ps-print.el (ps-header-footer-string): Return a list of header
- and footer strings.
+ * simple.el (push-mark): Doc fix.
-2005-02-21 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
+2007-05-18 Rob Riepel <riepel@Stanford.EDU>
- * pcvs.el (cvs-retrieve-revision): Fix thinko.
+ * emulation/tpu-edt.el (CSI-map, SS3-map): Move from global-map to
+ tpu-global-map.
+ (tpu-original-global-map): Variable deleted.
+ (tpu-control-keys-map): New keymap variable.
+ (tpu-set-control-keys): Use tpu-reset-control-keys rather than
+ setting keymapping directly.
+ (tpu-reset-control-keys): Use tpu-control-keys-map instead of
+ tpu-global-map.
+ (tpu-edt-on): Activate the tpu-global-map.
+ (tpu-edt-off): Deactivate the tpu-global-map.
-2005-02-21 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-05-18 Ryan Yeske <rcyeske@gmail.com>
- * frame.el (blink-cursor-mode): Use define-minor-mode.
+ * textmodes/ispell.el (ispell-get-word): Return markers
+ for start and end positions.
+ (ispell-word): Assume END is a marker.
- * term/mac-win.el (function-key-map): Use char-names more consistently.
- (file-name-coding-system): Only set it for MacOS-9. The other case is
- already handled in mule-cmds.el (where it also works when mac-win.el
- is not used).
+2007-05-17 Vinicius Jose Latorre <viniciusjl@ig.com.br>
-2005-02-21 Kenichi Handa <handa@m17n.org>
+ * printing.el: Group together all XEmacs/Emacs definitions.
+ (pr-version): New version 6.9.
+ (pr-global-menubar, pr-menu-char-height, pr-menu-char-width): New funs.
+ (pr-menu-char-height, pr-menu-char-width): Fix initialization code.
+ (pr-menu-bind): Fix code.
+ (pr-e-frame-char-height, pr-e-frame-char-width)
+ (pr-e-mouse-pixel-position, pr-x-add-submenu, pr-x-event-function)
+ (pr-x-event-object, pr-x-find-menu-item, pr-x-font-height)
+ (pr-x-font-width, pr-x-get-popup-menu-response, pr-x-make-event)
+ (pr-x-misc-user-event-p, pr-x-relabel-menu-item, pr-x-event-x-pixel)
+ (pr-x-event-y-pixel): Aliases eliminated.
+ (pr-xemacs-global-menubar): Macro moved.
+ (current-menubar, current-mouse-event, zmacs-region-stays)
+ (deactivate-mark, pr-menu-position, pr-menu-state, pr-ps-name-old)
+ (pr-txt-name-old, pr-ps-utility-old, pr-even-or-odd-old, pr-temp-menu):
+ Vars moved.
+ (pr-region-active-p, pr-menu-position, pr-menu-lookup, pr-menu-lock)
+ (pr-update-mode-line, pr-do-update-menus, pr-menu-alist)
+ (pr-relabel-menu-item, pr-menu-set-ps-title, pr-menu-set-txt-title)
+ (pr-menu-set-utility-title, pr-even-or-odd-pages)
+ (pr-f-set-keymap-parents, pr-f-set-keymap-name, pr-f-read-string)
+ (pr-keep-region-active, pr-menu-get-item, pr-menu-set-item-name): Funs
+ moved.
+
+2007-05-17 Christian Plate <cplate@web.de> (tiny change)
+
+ * textmodes/sgml-mode.el (sgml-tag):
+ Fix bug: Call sgml-transformation-function.
- * international/mule.el (ctext-pre-write-conversion): Always use
- " *code-converting-work*" buffer for work.
+2007-05-17 Martin Rudalics <rudalics@gmx.at>
- * textmodes/ispell.el (ispell-dictionary-alist): Fix docstring.
+ * hilit-chg.el (highlight-changes-rotate-faces): Don't set
+ modified flag of buffer. Use `inhibit-modification-hooks'.
-2005-02-20 Thien-Thi Nguyen <ttn@gnu.org>
+2007-05-16 Richard Stallman <rms@gnu.org>
- * progmodes/scheme.el (scheme-font-lock-keywords-2): Handle named-let.
+ * buff-menu.el (Buffer-menu-sort-column): Doc fix.
-2005-02-20 Jonathan Yavner <jyavner@member.fsf.org>
+2007-05-16 Stefan Monnier <monnier@iro.umontreal.ca>
- * ses.el (undo-more): Restore defadvice, but only the part that
- allows changes outside the restricted area of the buffer.
+ * files.el (magic-mode-alist, magic-fallback-mode-alist):
+ Move the *ml, Postscript, and XmCD entries to the fallback part.
-2005-02-20 Kim F. Storm <storm@cua.dk>
+ * files.el (magic-fallback-mode-alist):
+ Rename from file-start-mode-alist.
- * simple.el (line-move): Add fourth optional arg try-vscroll which
- must be set to perform auto-window-vscroll.
- When moving backwards and doing auto-window-vscroll, automatically
- vscroll to the last part of lines which are taller than the window.
- (next-line, previous-line): Set try-vscroll arg on line-move.
+2007-05-16 Nikolaj Schumacher <n_schumacher@web.de> (tiny change)
-2005-02-19 Dan Nicolaescu <dann@ics.uci.edu>
+ * progmodes/compile.el (compilation-handle-exit): Quote first
+ argument of `run-hook-with-args'.
- * replace.el (query-replace, query-replace-regexp)
- (replace-string, replace-regexp): When operating on region, make
- the minibuffer prompt say so.
+2007-05-16 Juanma Barranquero <lekktu@gmail.com>
- * isearch.el (isearch-forward): Document isearch-query-replace and
- isearch-query-replace-regexp keybindings.
+ * buff-menu.el (Buffer-menu-sort-column):
+ * dabbrev.el (dabbrev-upcase-means-case-search):
+ * dired.el (dired-recursive-deletes, dired-recursive-copies):
+ * info.el (Info-current-subfile):
+ * ls-lisp.el (ls-lisp-verbosity):
+ * msb.el (msb-menu-cond):
+ * pcvs.el (cvs-dired-use-hook):
+ * simple.el (set-mark-command-repeat-pop):
+ * time.el (display-time-24hr-format, display-time-mail-file):
+ Doc fixes.
-2005-02-19 Jay Belanger <belanger@truman.edu>
+ * tutorial.el (get-lang-string, tutorial--find-changed-keys):
+ * printing.el (pr-ps-fast-fire): Fix typos in docstrings.
- * calc/calc-aent.el (math-read-token): Add local variable.
+ * view.el (view-inhibit-help-message): Fix typo in docstring.
+ (view-scroll-auto-exit, view-try-extend-at-buffer-end): Doc fixes.
- * calc/calc-prog.el (calc-user-define-edit): Add local variable.
- (calc-edit-top): Move declaration to earlier in file.
- (calc-edit-macro-repeats): Add local variables.
+2007-05-16 Martin Rudalics <rudalics@gmx.at>
- * calc/calcalg2.el: Add differentiation rule for calcFunc-coth.
- Adjust differentiation rules for calcFunc-tan, calcFunc-cot,
- calcFunc-tanh.
- Adjust integration rule for calcFunc-tan.
+ * textmodes/ispell.el (ispell-start-process): Defend against bad
+ default-directory.
-2005-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
+2007-05-14 Eli Zaretskii <eliz@gnu.org>
- * emulation/viper-cmd.el (viper-prefix-commands): Make into a defconst.
- (viper-exec-buffer-search): Use regexp-quote to quote buffer string.
- (viper-minibuffer-setup-sentinel): Make some variables buffer-local.
- (viper-skip-separators): Bug fix.
- (viper-set-searchstyle-toggling-macros): Allow to unset macros in a
- particular major mode.
- (viper-del-backward-char-in-replace): Don't put deleted char on the
- kill ring.
+ * mail/rmail.el (rmail-convert-to-babyl-format): Check
+ content-transfer-encoding _last_, because it's its position that
+ we need as value of base64-header-field-end.
- * emulation/viper-ex.el (viper-color-display-p): New function.
- (viper-has-face-support-p): Use viper-color-display-p.
+2007-05-14 Juanma Barranquero <lekktu@gmail.com>
- * emulation/viper-keym.el (viper-gnus-modifier-map): New keymap.
+ * files.el (mode-require-final-newline, require-final-newline)
+ (enable-local-variables, enable-local-eval): Doc fixes.
- * emulation/viper-macs.el (viper-unrecord-kbd-macro): Bug fix.
+2007-05-13 Vinicius Jose Latorre <viniciusjl@ig.com.br>
- * emulation/viper-util.el (viper-glob-unix-files):
- Fix shell status check.
- (viper-file-remote-p): Make equivalent to file-remote-p.
+ * ps-print.el: Use default color when foreground or background color
+ are unspecified. Reported by Leo <sdl.web@gmail.com>.
+ (ps-print-version): New version 6.7.4.
+ (ps-rgb-color): New argument. Use default color when color is
+ unspecified.
+ (ps-begin-job): Fix code.
- * emulation/viper.el (viper-major-mode-modifier-list):
- Use viper-gnus-modifier-map.
+2007-05-12 Chong Yidong <cyd@stupidchicken.com>
-2005-02-19 David Kastrup <dak@gnu.org>
+ * longlines.el (longlines-mode): Make longlines-auto-wrap
+ buffer-local. Add hooks unconditionally.
+ (longlines-auto-wrap): Toggle wrapping.
+ (longlines-after-change-function)
+ (longlines-post-command-function): Check longlines-auto-wrap.
- * subr.el (subregexp-context-p): Fix garbled doc string by adding
- quoting.
+2007-05-12 Nick Roberts <nickrob@snap.net.nz>
-2005-02-19 Jay Belanger <belanger@truman.edu>
+ * xt-mouse.el (xterm-mouse-debug-buffer): New variable.
+ (xterm-mouse-translate): Use it.
- * calc/calc-math.el (calc-arctan, calc-tanh, calc-arctanh):
- Remove extra definitions.
- (calc-coth): New function.
- (calcFunc-cot): Fix `let'.
+2007-05-10 Richard Stallman <rms@gnu.org>
-2005-02-19 Eli Zaretskii <eliz@gnu.org>
+ * international/iso-cvt.el (iso-cvt-read-only): Ignore arguments.
+ (iso-cvt-write-only): Likewise.
- * faces.el (escape-glyph, minibuffer-prompt): Add commentary for
- the reasons we use "type pc" in these faces.
+ * emacs-lisp/easy-mmode.el (define-minor-mode):
+ Fix generated doc string.
- * button.el (button): Ditto.
+ * startup.el (fancy-splash-text): Add URL of guided tour.
+ Adjust horizontal and vertical whitespace.
-2005-02-19 Michael Mauger <mmaug@yahoo.com>
+ * progmodes/compile.el (compilation-handle-exit):
+ Use run-hook-with-args to run compilation-finish-functions.
- * replace.el (query-replace-read-from): Set the value of
- query-replace-from-history-variable to handle the case of an empty
- string entered to accept the suggested default.
+ * files.el (file-start-mode-alist): New variable.
+ (magic-mode-regexp-match-limit): Doc fix.
+ (set-auto-mode): Handle file-start-mode-alist.
+ A little cleanup of structure.
- * net/tramp.el (tramp-file-name-for-operation):
- Use dired-call-process instead of dired-call-process-command.
+ * dabbrev.el (dabbrev-eliminate-newlines):
+ Renamed from dabbrev--eliminate-newlines. All uses changed.
-2005-02-19 Jay Belanger <belanger@truman.edu>
+2007-05-10 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * calc/calc-arith.el (math-trig-inverses, math-div-trig)
- (math-div-non-trig): New variables.
- (math-combine-prod-trig, math-div-new-trig, math-div-new-non-trig)
- (math-div-isolate-trig, math-div-isolate-trig-term): New functions.
- (math-combine-prod, math-div-symb-fancy): Add simplifications for
- trig expressions.
+ * man.el (Man-next-section): Don't consider the last line of the page
+ as being part of any section.
-2005-02-19 Nick Roberts <nickrob@snap.net.nz>
+2007-05-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * progmodes/gdb-ui.el (gdb-var-update-handler)
- (gdb-speedbar-timer-fn): Ensure speedbar updates with new values
- for watch expressions,
- (gdb-var-create-handler): Don't set speedbar-update-flag.
- (gdb-post-prompt): Simplify test for speedbar.
+ * textmodes/sgml-mode.el (sgml-value): Fix handling of attributes which
+ can take any number of values.
-2005-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
+2007-05-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * ediff.el (ediff-set-diff-overlays-in-one-buffer)
- (ediff-set-fine-overlays-in-one-buffer, ediff-goto-word): Make sure
- we use the syntax table of the correct buffer.
- (ediff-same-file-contents, ediff-same-contents): Enhancements thanks to
- Felix Gatzemeier.
+ * textmodes/tex-mode.el (tex-font-lock-keywords-2): Add citet and citep
+ to the list of citation commands.
- * ediff-init.el (ediff-hide-face): Check for definedness of functions.
- (ediff-file-remote-p): Make synonymous with file-remote-p.
- In all deffaces ediff-*-face-*, use min-colors.
+2007-05-09 Stefan Monnier <monnier@iro.umontreal.ca>
- * ediff-mult.el (ediff-meta-mark-equal-files): Make use of
- ediff-recurse-to-subdirectories.
- (ediff-mark-if-equal): Check that the arguments are strings, use
- ediff-same-contents (after to Felix Gatzemeier).
+ * vc-hooks.el (vc-find-root): Stop searching when the user changes.
- * ediff.el (ediff-merge-on-startup): Don't set buffer-modified-p to
- nil.
+2007-05-09 Edward O'Connor <hober0@gmail.com> (tiny change)
-2005-02-18 Stefan Monnier <monnier@iro.umontreal.ca>
+ * progmodes/python.el (python-font-lock-keywords)
+ (python-open-block-statement-p, python-mode): Add support for the new
+ "with" keyword.
- * log-view.el (log-view-message-re): Fix up Subversion regexp.
+2007-05-08 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-02-18 David Kastrup <dak@gnu.org>
+ * diff-mode.el (diff-apply-hunk, diff-test-hunk): Don't do by default
+ the exact opposite of diff-goto-source.
- * progmodes/meta-mode.el (meta-mark-active): Fix condition to just
- use `mark-active' when defined.
+ * emacs-lisp/advice.el (ad-special-forms): Remove.
+ (ad-special-form-p): Use subr-arity.
-2005-02-18 Kenichi Handa <handa@m17n.org>
+ * newcomment.el (comment-search-forward): Make sure we search forward.
+ (comment-enter-backward): Try and distinguish the non-matching case at
+ EOB from the non-matching case with a missing comment-end-skip for
+ a 2-char comment ender.
+ (comment-choose-indent): New function extracted from comment-indent.
+ Improve the alignment algorithm.
+ (comment-indent): Use it.
- * ps-print.el (ps-font-info-database): New entry
- ZapfChancery-MediumItalic with correct font name. Fix font name
- of the entry Zapf-Chancery-MediumItalic.
+ * textmodes/sgml-mode.el (sgml-lexical-context): Add handling of
+ XML style Processing Instructions.
+ (sgml-parse-tag-backward): Handle XML-style PIs. Also ensure progress.
+ (sgml-calculate-indent): Handle `pi' context.
-2005-02-16 Luc Teirlinck <teirllm@auburn.edu>
+ * vc.el: Ensure that update-changelog issues an error when used with
+ a backend that does not implement it.
+ (vc-update-changelog-rcs2log): Rename from vc-default-update-changelog.
+ Remove `backend' argument. Use expand-file-name.
+ (vc-cvs-update-changelog, vc-rcs-update-changelog): New aliases.
- * autorevert.el (auto-revert-stop-on-user-input): Further doc fix.
+ * progmodes/python.el (python-end-of-block): Revert last change.
+ (python-end-of-statement): Make sure we move *forward*.
-2005-02-16 Kim F. Storm <storm@cua.dk>
+2007-05-08 Richard Stallman <rms@gnu.org>
- * ido.el (ido-fallback-command): Pass user input to fallback command.
+ * mail/mailabbrev.el (sendmail-pre-abbrev-expand-hook):
+ Don't include non-self-insert commands in the exception for `-'.
-2005-02-16 Nick Roberts <nickrob@snap.net.nz>
+2007-05-08 David Reitter <david.reitter@gmail.com>
- * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers)
- (gdb-find-file-hook): Add server prefix.
+ * progmodes/python.el (python-guess-indent): Check non-nullness
+ before comparing indent against the 2..8 interval.
-2005-02-16 Richard M. Stallman <rms@gnu.org>
+2007-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * replace.el (perform-replace): Pass new args to replace-highlight.
- (replace-highlight): Take region args,
- and pass them to isearch-lazy-highlight-new-loop.
+ * term/mac-win.el (mac-ts-unicode-for-key-event): Check if text is
+ available.
- * novice.el (disabled-command-hook): Autoload the defalias
- and the make-obsolete-variable call.
+2007-05-06 Richard Stallman <rms@gnu.org>
- * menu-bar.el (menu-bar-select-frame): FRAME defaults to selected.
+ * emacs-lisp/eldoc.el (turn-on-eldoc-mode): Doc fix.
- * isearch.el (isearch-lazy-highlight-start-limit)
- (isearch-lazy-highlight-end-limit): New variables limit
- the region for highlighting.
- (isearch-lazy-highlight-new-loop): New args BEG and END.
- (isearch-lazy-highlight-search): Use the new vars.
- (isearch-lazy-highlight-update): Likewise.
+2007-05-05 Stefan Monnier <monnier@iro.umontreal.ca>
- * dired.el (dired-build-subdir-alist): Bind buffer-undo-list to t.
+ * diff.el (diff): Use buffer-local vars diff-old-file and diff-new-file
+ rather than storing their value in the revert-buffer function.
- * cus-start.el (all): Use default-boundp.
+2007-05-04 Nick Roberts <nickrob@snap.net.nz>
-2005-02-15 David Casperson <casper@unbc.ca> (tiny change)
+ * t-mouse.el (t-mouse-mode): Do nothing on a graphical display
+ when disabling t-mouse-mode.
- * menu-bar.el (menu-bar-select-frame): Handle current frame.
+2007-05-01 Davis Herring <herring@lanl.gov>
-2005-02-15 Luc Teirlinck <teirllm@auburn.edu>
+ * calendar/timeclock.el: Update version number.
+ (timeclock-modeline-display): Mention timeclock-use-display-time
+ in explanatory message.
+ (timeclock-in): Fix non-interactive workday specifications.
+ (timeclock-log): Don't kill the log buffer if it already existed.
+ Suppress warnings when finding the log. Don't check for a nil
+ project twice. Run hooks after killing the buffer (if applicable).
+ (timeclock-geometric-mean): Rename to `timeclock-mean' (it never
+ was geometric). All uses changed.
+ (timeclock-generate-report): Support prefix argument.
- * autorevert.el (auto-revert-stop-on-user-input)
- (auto-revert-verbose): Doc fixes.
+2007-05-03 Ryan Yeske <rcyeske@gmail.com>
-2005-02-15 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
+ * net/rcirc.el (rcirc-timeout-seconds): Increase to prevent unwanted
+ disconnections.
- * international/mule-cmds.el (set-locale-environment): Remove call
- to set-selection-coding-system on Windows.
+2007-05-01 Romain Francoise <romain@orebokech.com>
-2005-02-15 Jay Belanger <belanger@truman.edu>
+ * dired-x.el: Revert 2007-04-06 change.
- * calc/calc-alg.el: Add simplification rules for calcFunc-sec,
- calcFunc-csc, calcFunc-cot, calcFunc-sech, calcFunc-csch, and
- calcFunc-coth.
- (math-simplify-sqrt): Add simplifications.
+2007-04-29 Stephen Berman <Stephen.Berman@gmx.net>
- * calc/calc-arith.el (math-real-if-arg-functions): Add functions
- to list.
+ * find-dired.el (find-dired-filter): Propertize all text down to eob.
- * calc/calc-ext.el: Add functions to autoloads.
+2007-04-29 Richard Stallman <rms@gnu.org>
- * calc/calc-math.el (calc-sec, calc-csc, calc-cot, calc-sech)
- (calc-csch, calc-coth, calcFunc-sec, calcFunc-csc, calcFunc-cot)
- (calcFunc-sech, calcFunc-csch, calcFunc-coth, math-sec-raw)
- (math-csc-raw, math-cot-raw): New functions.
+ * international/mule.el (auto-coding-alist): Add pdf => no-conversion.
- * calc/calc-rules.el (calc-DistribRules, calc-NegateRules): Add rules.
+2007-04-28 Stefan Monnier <monnier@iro.umontreal.ca>
- * calc/calc-undo.el (calc-handle-undo): Remove prefix from
- the variable name in a message.
+ * progmodes/cc-mode.el (c-before-change): Use point-min rather
+ than 1.
- * calc/calc-units.el: Add simplification rules for calcFunc-sec,
- calcFunc-csc, calcFunc-cot.
+2007-04-28 Richard Stallman <rms@gnu.org>
- * calc/calcalg2.el: Add derivative and integration rules for
- calcFunc-sec, calcFunc-csc, calcFunc-cot, calcFunc-sech,
- calcFunc-csch, calcFunc-coth.
- (math-do-integral-methods): Add to checks for when to use
- substitutions.
+ * progmodes/sh-script.el (sh-mode): Recognize .profile as sh style.
- * calc/calccomp.el (math-eqn-special-funcs): Add functions to list.
+2007-04-28 Nick Roberts <nickrob@snap.net.nz>
-2005-02-15 Lute Kamstra <lute@gnu.org>
+ * progmodes/gud.el (gud-menu-map): Pdb can't handle SIGINT so
+ don't put stop on toolbar.
- * emacs-lisp/lisp-mode.el (lisp-mode-variables):
- Add ;;;###autoload to `outline-regexp'. Suggested by Stefan Monnier
- <monnier@iro.umontreal.ca>.
- (lisp-outline-level): Improve efficiency. Suggested by David
- Kastrup <dak@gnu.org>.
+2007-04-28 Stefan Monnier <monnier@iro.umontreal.ca>
-2005-02-15 Nick Roberts <nickrob@snap.net.nz>
+ * vc-hooks.el (vc-ignore-dir-regexp): Add /.../ for the DFS filesystem.
- * progmodes/gdb-ui.el (gdb-find-file-unhook): New variable.
- (gdb-set-gud-minor-mode, gdb-set-gud-minor-mode-1)
- (gdb-set-gud-minor-mode-existing-buffers): New functions.
- (gdb-find-file-hook): New hook. Add it to find-file-hook.
- (gdb-info-breakpoints-custom, gdb-source-info): Simplify.
+2007-04-28 Eli Zaretskii <eliz@gnu.org>
-2005-02-14 Luc Teirlinck <teirllm@auburn.edu>
+ * makefile.w32-in ($(lisp)/mh-e/mh-loaddefs.el): Use ./mh-e
+ instead of $(lisp)/mh-e.
- * cus-start.el (all): Comment change.
+2007-04-28 Glenn Morris <rgm@gnu.org>
-2005-02-14 Lute Kamstra <lute@gnu.org>
+ * image-dired.el (image-dired-cmd-create-thumbnail-options)
+ (image-dired-cmd-create-temp-image-options): Replace option
+ +profile "*" with -strip.
- * cus-start.el (all): Check if symbol is void.
+2007-04-27 Chong Yidong <cyd@stupidchicken.com>
-2005-02-14 Carsten Dominik <dominik@science.uva.nl>
+ * textmodes/flyspell.el (flyspell-auto-correct-previous-word):
+ Use window-start and window-end.
- * textmodes/reftex-cite.el (reftex-do-citation): Cleanup single
- optional argument to \cite.
+2007-04-27 Andreas Schwab <schwab@suse.de>
-2005-02-14 Richard M. Stallman <rms@gnu.org>
+ * emacs-lisp/sregex.el (sregexq): Fix doc string quoting.
- * cus-edit.el (custom-buffer-create-internal): Update help message.
- (custom-magic-alist): Update help messages.
+2007-04-27 Eli Zaretskii <eliz@gnu.org>
- * cus-start.el (all): Allow a var to specify a standard value.
+ * textmodes/fill.el (fill-paragraph): Doc fix.
-2005-02-12 Luc Teirlinck <teirllm@auburn.edu>
+2007-04-26 Luc Teirlinck <teirllm@dms.auburn.edu>
- * custom.el (custom-theme-set-variables): Handle variable aliases.
+ * locate.el (locate-in-alternate-database): Doc fix.
- * frame.el (blink-cursor-timer): Doc fix.
- (blink-cursor): Make it an alias for `blink-cursor-mode' and
- declare obsolete.
- (blink-cursor-mode): Define with defcustom and use correct
- standard expression in that defcustom.
- * startup.el (command-line): Adapt to above changes in frame.el.
+2007-04-26 Glenn Morris <rgm@gnu.org>
-2005-02-11 Lute Kamstra <lute@gnu.org>
+ * button.el (button): Use underline if supported, else fall back
+ to color.
- * apropos.el (apropos-score-doc): Prevent division by zero.
+ * version.el (emacs-version): Increase to 22.1.50.
-2005-02-11 Ulf Jasper <ulf.jasper@web.de>
+2007-04-25 Richard Stallman <rms@gnu.org>
- * calendar/icalendar.el (icalendar--get-event-property): Doc fix.
- (icalendar--get-event-property-attributes)
- (icalendar--get-event-properties)
- (icalendar--datetime-to-diary-date): New functions.
- (icalendar--split-value): Doc fix.
- (icalendar--datetime-to-noneuropean-date)
- (icalendar--datetime-to-european-date): New optional argument
- SEPARATOR. Return result as a string instead of a list.
- (icalendar--get-weekday-number): Check if ABBREVWEEKDAY is nil.
- (icalendar--convert-string-for-export): Rename arg S to STRING.
- (icalendar-export-region): Doc fix. Change name of error buffer.
- Save output buffer.
- (icalendar-import-file): Add blank at end of prompt.
- (icalendar-import-buffer): Doc fix. Do not switch to error
- buffer. Indicate status in return value.
- (icalendar--convert-ical-to-diary): Doc fix. Change name of error
- buffer. Save output buffer. Handle exception from recurrence
- rules (EXDATE, EXRULE). Handle start- and end-date of recurring
- events. Fix problems with weekly all-day events.
+ * hi-lock.el (hi-lock-file-patterns-policy): Default to `ask'.
-2005-02-10 Richard M. Stallman <rms@gnu.org>
+2007-04-25 J.D. Smith <jdsmith@as.arizona.edu>
- * simple.el (eval-expression-print-format):
- Avoid warning about edebug-active.
+ * progmodes/idlwave.el (idlwave-beginning-of-subprogram)
+ (idlwave-end-of-subprogram): Take optional NOMARK arg to prevent
+ pushing mark.
+ (idlwave-current-routine): Don't push mark.
- * help.el (help-for-help-internal): Rename from help-for-help.
- (help-for-help): Define with defalias.
+2007-04-25 Mathias Dahl <mathias.dahl@gmail.com>
- * font-core.el (font-lock-default-function): Use with-no-warnings.
+ * image-dired.el (image-dired-display-image): Derive image-type from
+ filename rather than assuming jpeg, in case no resizing was needed.
- * cus-edit.el (custom-buffer-create-internal): Improve help-echo.
+2007-04-25 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
* custom.el (defface): Doc fix.
-2005-02-10 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-ann3): Re-instate GDB command "set
- width 0" to prevent word wrapping problems.
-
-2005-02-09 Kim F. Storm <storm@cua.dk>
-
- * ido.el (ido-file-extensions-order): New defcustom.
- (ido-file-extension-lessp, ido-file-extension-aux)
- (ido-file-extension-order): New advanced file ordering.
- (ido-file-lessp): New simple file ordering.
- (ido-sort-list): Remove.
- (ido-make-file-list): Use ido-file-lessp or ido-file-extension-lessp.
- (ido-make-dir-list, ido-completion-help): Use ido-file-lessp.
-
-2005-02-08 Dan Nicolaescu <dann@ics.uci.edu>
-
- * progmodes/grep.el (grep-regexp-alist): Match an optional ^[[K
- that some versions of grep produce.
- (grep-mode-font-lock-keywords): Likewise.
-
-2005-02-09 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-location-list): New variable.
- (gdb-cdir): Delete.
- (gdb-info-breakpoints-custom, gdb-goto-breakpoint)
- (gdb-source-info): Treat case when source file is in another
- directory properly.
- (gdb-get-location): New function.
-
-2005-02-07 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-prog.el (calc-write-parse-table-part)
- (calc-fix-token-name): Fix a check for language type.
-
- * calc/calccomp.el (math-compose-expr): Fix a check for language type.
-
-2005-02-07 Andre Spiegel <spiegel@gnu.org>
-
- * vc-hooks.el (vc-make-version-backup): Ignore file-errors such
- as directory not writable.
-
-2005-02-07 Kim F. Storm <storm@cua.dk>
-
- * emulation/cua-base.el (cua-max-undo, cua-undo): Remove.
- (cua--standard-movement-commands): Remove list.
- Instead, set CUA property value to move for movement commands.
- (cua-movement-commands): Remove. Users must set CUA prop instead.
- (cua--pre-command-handler): Check CUA property.
- (cua--init-keymaps): Don't remap undo commands.
- (cua-mode): Don't call cua--rectangle-on-off.
-
- * emulation/cua-rect.el (cua--undo-list, cua--tidy-undo-counter)
- (cua--rect-undo, cua--tidy-undo-lists, cua--rectangle-on-off): Remove.
- (cua--rect-undo-set-point): New var.
- (cua--rectangle-undo-boundary): Setup undo apply entry.
- (cua--rect-undo-handler): New function for rectangle undo.
- (cua--rect-start-position, cua--rect-end-position): Add.
- (cua--rectangle-post-command): Call cua--rectangle-set-corners
- for restored rectangle. Set point if cua--rect-undo-set-point.
-
-2005-02-06 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-lang.el (calc-tex-language): Display more information
- in messages.
-
- * calc/calccomp.el (math-compose-expr): Allow multiline matrices
- in TeX mode.
-
-2005-02-06 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/lisp.el (buffer-end): Doc fix.
-
-2005-02-05 Arne J,Ax(Brgensen <arne@arnested.dk> (tiny change)
-
- * net/ldap.el (ldap-search-internal): Support attributes with
- optional descriptions separated by a semi-colon, as in
- "userCertificate;binary".
-
-2005-02-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
- isn't a cons (i.e. the version is 0).
-
-2005-02-05 Eli Zaretskii <eliz@gnu.org>
-
- * help.el (help-for-help): Doc fix.
-
-2005-02-05 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el: Update copyright. Put GDB-Frames before
- GDB-Windows on the menu-bar as this works better.
-
-2005-02-04 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-embedded-update): Don't put in
- unnecessary newlines. Adjust the end of formula marker.
-
- * calc/calc-lang.el (math-latex-parse-frac): Don't use arguments.
- (math-latex-parse-two-args): New function.
-
-2005-02-03 Lute Kamstra <lute@gnu.org>
-
- * help-fns.el (help-with-tutorial): Make sure that users cannot
- remove the entire text of the tutorial by means of `undo'.
-
-2005-02-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/ispell.el (ispell-internal-change-dictionary): Fix problem
- in recent changes, where the ispell process was repeatedly
- killed & restarted.
-
- * international/mule-cmds.el (set-locale-environment): Set file-name
- coding system to utf-8 on Darwin systems.
- (set-default-coding-systems): Don't set default-file-name-coding-system
- on Darwin systems.
-
-2005-02-03 Richard M. Stallman <rms@gnu.org>
-
- * hi-lock.el (hi-lock-mode): Turning on Hi-Lock turns on Font-Lock.
-
-2005-02-03 Matt Hodges <MPHodges@member.fsf.org>
-
- * faces.el (list-faces-display): Add optional argument.
-
-2005-02-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * font-core.el (font-lock-default-function): Handle the rare case where
- only font-lock-keywords is set.
-
-2005-02-02 Kenichi Handa <handa@m17n.org>
-
- * international/characters.el: Cancel previous change for
- I-WITH-DOT-ABOVE and DOTLESS-i.
-
- * international/latin-5.el: Cancel previous change.
-
-2005-02-02 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gud.el: Correction to syntax in gud-menu-map.
-
-2005-02-02 Kenichi Handa <handa@m17n.org>
-
- * international/latin-5.el (tbl): Setup cases of I-WITH-DOT-ABOVE,
- DOTLESS-i.
-
- * international/characters.el: Setup cases of GREEK-FINAL-SIGMA,
- Y-WITH-DIAERESIS, I-WITH-DOT-ABOVE, DOTLESS-i.
-
- * case-table.el (get-upcase-table): New function.
- (copy-case-table): Copy upcaes table too if non-nil.
- (set-case-syntax-delims): Maintain upcase table too.
- (set-case-syntax-pair): Likewise.
- (set-upcase-syntax, set-downcase-syntax): New functions.
- (set-case-syntax): Maintain upcase table too.
-
-2005-02-02 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-goto-info): Delete.
-
- * progmodes/gud.el (gud-goto-info): New function.
- (gud-tool-bar-map): Use correct icon.
-
-2005-02-01 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/lisp-mode.el (lisp-indent-function): Fix bug:
- When delegating, order args in the funcall correctly.
-
-2005-02-01 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs-lisp/lisp-mode.el (lisp-indent-function): Doc fix.
-
-2005-02-01 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex.el (reftex-access-scan-info): Error out in a
- buffer not visiting a file.
-
-2005-01-31 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-embed.el (calc-embedded-find-bounds): Set the formula
- bound on the line with the formula.
-
-2005-01-31 Kim F. Storm <storm@cua.dk>
-
- * ses.el (ses-create-cell-variable-range)
- (ses-destroy-cell-variable-range, ses-reset-header-string)
- (ses-set-with-undo, ses-unset-with-undo, ses-aset-with-undo)
- (ses-insert-row): Fix format of apply undo entries.
-
-2005-01-31 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-aent.el (math-read-token): Separate the TeX and LaTeX
- parts.
-
- * calc/calc-embed.el (calc-embedded-open-formula)
- (calc-embedded-close-formula): Ignore matrix environments.
-
- * calc/calc-ext.el (math-read-big-expr): Make LaTeX the default
- TeX mode.
-
- * calc/calc-lang.el (math-function-table, math-oper-table)
- (math-variable-table): Adjust the LaTeX portions.
-
- * calc/calc.el (math-tex-ignore-words): Remove LaTeX portion.
- (math-latex-ignore-words): New constant.
-
-2005-01-31 Richard M. Stallman <rms@gnu.org>
-
- * textmodes/ispell.el (ispell-local-dictionary-overridden): New var.
- (ispell-local-dictionary): Doc fix.
- (ispell-dictionary-alist): Don't include ispell-local-dictionary-alist.
- Don't reinitialize at run time. Don't defcustom.
- All uses changed to append ispell-local-dictionary-alist,
- or check it first.
- (ispell-current-dictionary): New variable for dictionary in use.
- (ispell-dictionary): Now used only for global default.
- (ispell-start-process): Set ispell-current-dictionary,
- not ispell-dictionary.
- (ispell-change-dictionary): Use this only for setting
- user preferences.
- (ispell-internal-change-dictionary): New function
- to change the current dictionary in use.
- (ispell-region, ispell-process-line, ispell-buffer-local-dict):
- Use ispell-current-dictionary.
- Handle ispell-local-dictionary-overridden.
- (ispell-buffer-local-dict): Call ispell-internal-change-dictionary.
-
-2005-01-31 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-aent.el (math-read-token): Add support for LaTeX.
-
- * calc/calc-ext.el: Add calc-latex-language to autoloads.
- (calc-mode-map): Add calc-latex-language.
-
- * calc/calc-lang.el (calc-latex-language, math-latex-parse-frac)
- (math-latex-print-frac): New functions.
- (math-oper-table, math-function-table, math-variable-table)
- (math-complex-format, math-input-filter): Add latex properties.
- (calc-set-language): Set math-expr-special-function-mapping.
-
- * calc/calc-prog.el (calc-edit-user-syntax, calc-fix-token-name)
- (calc-write-parse-table-part): Add LaTeX support.
-
- * calc/calc.el (calc-language): Adjust docstring.
- (calc-set-mode-line): Add LaTeX support.
- (math-expr-special-function-mapping): New variable.
- (math-tex-ignore-words): Add to list.
-
- * calc/calccomp.el (math-compose-expr, math-compose-rows):
- Add LaTeX support.
- (math-compose-expr): Add support for special functions.
-
- * calc/calc-help.el (calc-d-prefix-help): Add LaTeX.
-
-2005-01-31 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-memory-address)
- (gdb-memory-repeat-count, gdb-memory-format, gdb-memory-unit)
- (gdb-memory-mode-map, gdb-memory-format-keymap)
- (gdb-memory-format-menu, gdb-memory-unit-keymap)
- (gdb-memory-unit-menu): New variables for a buffer
- that lets the user examine program memory.
- (gdb-memory-set-address, gdb-memory-set-repeat-count)
- (gdb-memory-format-binary, gdb-memory-format-octal)
- (gdb-memory-format-unsigned, gdb-memory-format-signed)
- (gdb-memory-format-hexadecimal, gdb-memory-format-menu)
- (gdb-memory-format-menu-1, gdb-memory-unit-giant)
- (gdb-memory-unit-word, gdb-memory-unit-halfword)
- (gdb-memory-unit-byte, gdb-memory-unit-menu)
- (gdb-memory-unit-menu-1, gdb-make-header-line-mouse-map)
- (gdb-memory-mode, gdb-memory-buffer-name)
- (gdb-display-memory-buffer, gdb-frame-memory-buffer):
- New functions for above buffer.
-
-2005-01-30 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (custom-bury-buffer): Function deleted.
- (custom-buffer-done-function): Option deleted.
- (custom-buffer-done-kill): New replacement option.
- (Custom-buffer-done): Call quit-window.
- (custom-buffer-create-internal): Update for above changes.
-
-2005-01-29 Luc Teirlinck <teirllm@auburn.edu>
-
- * simple.el (undo-ask-before-discard): New var.
- (undo-outer-limit-truncate): Implement it.
- (undo-extra-outer-limit): Doc update.
-
-2005-01-29 Richard M. Stallman <rms@gnu.org>
-
- * ses.el (undo-more): Delete defadvice.
- (ses-begin-change): Doc fix.
-
- * dired.el (dired-mode-map): Remap `undo' and `advertised-undo'
- instead of rebinding C-x u and C-_.
-
- * files.el (normal-backup-enable-predicate): Return nil for files
- in /tmp, regardless of temporary-file-directory.
-
- * man.el (Man-getpage-in-background): Disable undo in Man buffer.
-
- * rect.el (delete-rectangle-line, delete-extract-rectangle-line)
- (open-rectangle, delete-whitespace-rectangle-line)
- (clear-rectangle-line): If FILL, pass t instead of FILL
- for move-to-column's 2nd arg.
-
- * simple.el (undo): Fix the test for continuing a series of undos.
- (undo-more): Set pending-undo-list to t when we reach end.
- (pending-undo-list): Move up defvar.
-
- * wid-edit.el (widget-button-click):
- Shorten the range of the track-mouse binding.
-
- * comint.el (comint-insert-input): Undo previous changes;
- use last-input-event in interactive spec.
-
-2005-01-29 Eli Zaretskii <eliz@gnu.org>
-
- * progmodes/compile.el (compilation-start): Bind buffer-read-only
- to nil before invoking call-process. Reset buffer's modified flag
- after fontifying it in the no-async branch.
-
- * wid-edit.el (widget-specify-button): If mouse pointer shape
- cannot be changed, use mouse face instead.
-
-2005-01-29 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-info-breakpoints-custom)
- (gdb-goto-breakpoint): Make breakpoint handling work on template
- functions in C++. Reported by Martin Reed <mjreed@essex.ac.uk>.
- (gdb-assembler-custom): Update to recognize breakpoint information
- added on 2005-01-19.
-
-2005-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * progmodes/scheme.el (scheme-mode-variables): Set comment-add.
- (dsssl-mode): Use define-derived-mode.
- (scheme-mode-initialize): Remove.
- (scheme-mode): Use run-mode-hooks.
-
- * cus-edit.el (customize-group-other-window)
- (custom-buffer-create-other-window): Don't override special-display-*.
- (custom-mode-map): Make it dense.
-
- * emacs-lisp/lisp-mode.el (eval-defun-1): Make sure `defvar' always
- sets the default value.
-
-2005-01-28 Eli Zaretskii <eliz@gnu.org>
-
- * descr-text.el: Add more keywords.
-
-2005-01-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * speedbar.el: Avoid unnecessary use of locate-library.
-
- * international/mule-cmds.el (standard-display-european-internal):
- Don't fiddle with latin-1 non-break space any more since it's now
- special cased in the C code.
- Don't "do&undo" setting for 160 (especially, don't undo incorrectly).
-
-2005-01-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-start.el (all): Add `undo-outer-limit'.
-
-2005-01-25 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
-
- * textmodes/bibtex.el (bibtex-format-entry):
- Use `bibtex-empty-field-re' only on the text of fields, not on entire
- field lines.
- (bibtex-autofill-entry): Use `bibtex-empty-field-re' on a string,
- not on part of a buffer.
-
-2005-01-25 Lute Kamstra <lute@gnu.org>
-
- * textmodes/bibtex.el (bibtex-empty-field-re): Don't match
- nonempty field text strings like "{letters\\macro{}more letters}".
- Clarify docstring.
- (bibtex-sort-entry-class, bibtex-autokey-titleword-ignore)
- (bibtex-entry-offset, bibtex-parse-association)
- (bibtex-parse-field-name): Fix typos in docstrings.
- (bibtex-field-list, bibtex-find-crossref): Fix typos in error messages.
-
-2005-01-24 Dan Nicolaescu <dann@ics.uci.edu>
- Juri Linkov <juri@jurta.org>
-
- * textmodes/reftex-global.el (reftex-isearch-push-state-function)
- (reftex-isearch-pop-state-function, reftex-isearch-isearch-search)
- (reftex-isearch-switch-to-next-file, reftex-isearch-turn-off)
- (reftex-isearch-turn-on, reftex-isearch-minor-mode): New functions.
-
- * textmodes/reftex.el (reftex-mode-menu): Add entry for reftex
- isearch minor mode.
-
-2005-01-24 Luc Teirlinck <teirllm@auburn.edu>
-
- * help-at-pt.el (help-at-pt-display-when-idle): Add autoload cookie.
-
-2005-01-24 Lute Kamstra <lute@gnu.org>
-
- * textmodes/ispell.el (ispell-dictionary-alist-4): Rewrite the
- CASECHARS and NOT-CASECHARS regular expressions of the
- "nederlands" and "nederlands8" dictionaries to prevent a "Range
- striding over charsets" error.
-
-2005-01-24 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-store.el (calc-declare-variable): Use calc-var-name to
- display variable name.
-
-2005-01-24 Kenichi Handa <handa@m17n.org>
-
- * international/encoded-kb.el (encoded-kbd-iso2022-single-shift):
- Fix setting of the element of encoded-kbd-iso2022-invocations.
-
-2005-01-24 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-goto-breakpoint, gdb-frames-select)
- (gdb-threads-select): Change to also accept mouse events.
- (gdb-mouse-goto-breakpoint, gdb-frames-mouse-select)
- (gdb-threads-mouse-select): Delete.
-
-2005-01-23 Luc Teirlinck <teirllm@auburn.edu>
-
- * files.el (insert-directory): Take care of empty directory,
- listed without -a switch.
-
-2005-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/refill.el (refill-post-command-function):
- Add `indent-new-comment-line' and `reindent-then-newline-and-indent'
- to the list of functions that we should be careful not to undo.
- (refill-late-fill-paragraph-function): Remove.
- (refill-saved-state): New var.
- (refill-mode): Use it to save fill-paragraph-function.
- Save also the value of auto-fill-function.
-
- * term/w32-win.el: Simplify code.
-
-2005-01-23 Kim F. Storm <storm@cua.dk>
-
- * simple.el (line-move): Adapt to new return value from
- pos-visible-in-window-p.
-
- * simple.el (line-move): Fix last change. Check partial
- visibility at point rather than at window-start.
-
-2005-01-22 Jason Rumney <jasonr@gnu.org>
-
- * term/w32-win.el (xw-defined-colors): Remove debug-message.
-
-2005-01-22 David Kastrup <dak@gnu.org>
-
- * progmodes/grep.el: Add alias `find-grep' for `grep-find'.
-
-2005-01-22 Eli Zaretskii <eliz@gnu.org>
-
- * type-break.el (type-break-mode): Add a test for
- type-break-file-name being non-nil.
-
-2005-01-22 Toby Allsopp <Toby.Allsopp@navman.com> (tiny change)
-
- * net/eudc.el (top level): Call (message "") via progn, so that
- eudc-options-file is loaded.
-
-2005-01-22 Kim F. Storm <storm@cua.dk>
-
- * simple.el (line-move-1): Rename from line-move.
- (line-move): New function that adjusts vscroll for partially
- visible rows, and calls line-move-1 otherwise.
-
-2005-01-21 Ren,Ai(B Kyllingstad <listmailxemacs@kyllingstad.com>
-
- * pcomplete.el: Define pcomplete-read-event instead of read-event,
- since it's not a complete read-event implementation.
-
-2005-01-20 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-ext.el (calc-fancy-prefix-other-key): Set prefix arg
- for called function.
-
-2005-01-20 Steven Tamm <steventamm@mac.com>
-
- * term/mac-win.el (process-connection-type): Remove.
- Controlled now by s/darwin.h:PTY_ITERATION.
-
-2005-01-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.el (handle-select-window): Don't switch window when we're
- in the minibuffer.
-
-2005-01-10 Paul Pogonyshev <pogonyshev@gmx.net>
-
- * subr.el (dotimes-with-progress-reporter): New macro.
-
- * ses.el (ses-dotimes-msg): Remove macro.
- Use `dotimes-with-progress-reporter' instead.
-
-2005-01-19 Steven Tamm <steventamm@mac.com>
-
- * term/mac-win.el (process-connection-type): Use new
- operating-system-release variable to use ptys on Darwin 7 (OS X
- 10.3) when using carbon build.
-
-2005-01-19 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-ext.el (calc-fancy-prefix-other-key): Don't clear
- flags if the last command was a tab or M-tab.
-
- * calc/calc-prog.el (calc-user-define-edit): Put original formula
- in formula editing buffer.
-
-2005-01-19 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Add help-echo for
- breakpoint image symbol in margin.
-
-2005-01-19 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-prog.el (calc-execute-kbd-macro):
- Ignore calc-keep-arg-flag.
-
-2005-01-19 Kenichi Handa <handa@m17n.org>
-
- * textmodes/ispell.el (ispell-looking-at): New function.
- (ispell-process-line): Use ispell-looking-at to compare the ispell
- output and the buffer contents.
-
-2005-01-18 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-display-raw): Fix docstring.
-
-2005-01-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * simple.el (blink-matching-open): Strip extra info from syntax.
-
- * progmodes/sh-script.el (sh-here-doc-open-re): Don't allow | or other
- funny chars in the end-of-here-doc marker.
-
-2005-01-19 Nick Roberts <nickrob@snap.net.nz>
-
- * progmodes/gdb-ui.el (gdb-put-string): Copy/create strings so
- that enable/disabled state of breakpoints is shown correctly in
- fringe and on ttys.
- (gdb-put-breakpoint-icon, gdb-info-breakpoints-custom):
- Add breakpoint information as text properties.
- (gdb-mouse-toggle-breakpoint):
- Rename to gdb-mouse-set-clear-breakpoint.
- (gdb-mouse-toggle-breakpoint): New function. Enable/disable
- breakpoints in the margin.
- (gdb-remove-strings): Simplify.
-
-2005-01-17 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-yank.el (calc-edit-mode): Inhibit read-only when
- erasing buffer.
-
-2005-01-17 Richard M. Stallman <rms@gnu.org>
-
- * progmodes/grep.el (grep-find): Copy from `grep' the condition
- for calling grep-compute-defaults.
-
- * play/decipher.el (decipher-mode): Don't call decipher-read-alphabet
- if buffer is empty.
-
- * emacs-lisp/lisp.el (backward-kill-sexp, kill-sexp): Doc fixes.
-
-2005-01-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * hilit-chg.el (highlight-changes-mode): Don't autoload.
-
- * bindings.el (mode-line-mode-menu): Use bound-and-true-p for all the
- non-preloaded variables.
-
-2005-01-17 Steven Tamm <steventamm@mac.com>
-
- * textmodes/tex-mode.el (tex-start-shell): Adding -i to the
- tex-shell cause to force interactivity when using pipes.
-
-2005-01-17 Kim F. Storm <storm@cua.dk>
-
- * simple.el (just-one-space): Make arg optional.
-
-2005-01-17 Nick Roberts <nickrob@snap.net.nz>
-
- * xt-mouse.el (xterm-mouse-event): Set new optional fourth arg in
- posn-at-x-y to t to access left-margin.
-
-2005-01-16 Michael Albinus <michael.albinus@gmx.de>
-
- Sync with Tramp 2.0.47.
-
- * net/tramp.el (tramp-operation-not-permitted-regexp): New defcustom,
- catching keep-date problems in cp/scp operations.
- (tramp-handle-copy-file): Don't call `set-file-modes'
- unconditionally. Specialized functions should know better what is
- necessary. This improves performance a little bit, and the
- functions could catch errors with `cp -p' and `scp -p'.
- (tramp-do-copy-or-rename-file-via-buffer)
- (tramp-do-copy-or-rename-file-out-of-band): Call `set-file-modes'
- when appropriate.
- (tramp-do-copy-or-rename-file-directly): Mask `cp -p' error.
- Call `set-file-modes' when appropriate.
- (tramp-action-out-of-band): Mask `scp -p' error. Reported by Isak
- Johnsson <isak@hypergene.com>.
- (tramp-get-buffer, tramp-get-debug-buffer): Discard the undo list
- of both Tramp buffer and debug buffer. Reported by Joakim Verona
- <joakim@verona.se>.
- (tramp-file-name-for-operation): Mark `shell-command' as magic for
- Emacs only.
-
- * net/tramp-util.el (tramp-minor-mode): New minor mode. Add it to
- `find-file-hooks' and `dired-mode-hook'.
- (tramp-minor-mode-map): Respective map. Add remapping for
- `compile' and `recompile'.
- (tramp-remap-command, tramp-recompile): New defuns.
- (tramp-compile): Enable `tramp-minor-mode' and `compilation-mode'
- in buffer "*Compilation*". Call the commands asynchronously.
-
- * net/tramp-vc.el (tramp-vc-do-command, tramp-vc-do-command-new)
- (tramp-vc-simple-command): Call `tramp-handle-shell-command' but
- `shell-command', because it isn't magic in XEmacs. Reported by
- Adrian Aichner <adrian@xemacs.org>.
-
- * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add entry for
- `substitute-in-file-name.
- (tramp-smb-handle-substitute-in-file-name): New defun.
- (tramp-smb-advice-PC-do-completion): Delete advice.
-
-2005-01-16 Kai Grossjohann <kgrossjo@eu.uu.net>
-
- * net/tramp.el (tramp-wait-for-output): Fix typo in echo processing.
- Fix error in deleting region.
-
-2005-01-15 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/lisp-mnt.el (lm-with-file): Use Lisp mode in temp buffer.
- In non-temp buffer, switch syntax table temporarily.
-
- * emacs-lisp/lisp-mode.el (indent-pp-sexp): Doc fix.
-
- * replace.el (occur-accumulate-lines, occur-engine): Avoid warnings.
-
- * tar-mode.el (tar-extract): Bind buffer-undo-list to t.
-
- * imenu.el (imenu--split-menu): Copy menulist before sorting.
- (imenu--generic-function): Use START, not BEG, as pos of definition.
-
- * simple.el (just-one-space): Argument specifies number of spaces.
-
- * simple.el (eval-expression-print-format): Avoid warning
- about edebug-active.
-
-2005-01-15 James R. Van Zandt <jrvz@comcast.net> (tiny change)
-
- * progmodes/sh-script.el: Code copied from make-mode.el
- with small changes,
- (sh-mode-map): Bind C-c C-\.
- (sh-backslash-column, sh-backslash-align): New variables.
- (sh-backslash-region, sh-append-backslash): New functions.
-
-2005-01-15 Sergey Poznyakoff <gray@Mirddin.farlep.net>
-
- * mail/rmail.el: Updated to work with movemail from GNU Mailutils
- (rmail-pop-password, rmail-pop-password-required): Move to
- rmail-obsolete group.
- (rmail-set-pop-password): Rename to rmail-set-remote-password.
- All callers updated.
- (rmail-get-pop-password): Rename to rmail-get-remote-password.
- Take an argument specifying whether it is POP or IMAP mailbox we
- are using. All callers updated.
- (rmail-pop-password-error): Rename to
- rmail-remote-password-error. Added mailutils-specific error message.
- (rmail-movemail-search-path)
- (rmail-movemail-variant-in-use): New variables.
- (rmail-remote-password, rmail-remote-password-required):
- New customization variables.
- (rmail-probe, rmail-autodetect, rmail-movemail-variant-p): New funs.
- (rmail-parse-url): New function.
- (rmail-get-new-mail, rmail-insert-inbox-text): Update for use
- with GNU mailutils movemail.
-
-2005-01-15 Kevin Ryde <user42@zip.com.au>
-
- * info-look.el (c-mode/symbol): Add ^` to prefix, and change
- suffix to space, $ or '$, to correctly position point when going
- to @table style constants like DBL_MAX.
-
-2005-01-15 Jorgen Schaefer <forcer@forcix.cx> (tiny change)
-
- * type-break.el (type-break-mode, type-break-file-time)
- (type-break-file-keystroke-count, type-break-choose-file):
- Don't store data in or load data from the file if type-break-file-name
- is nil.
- (type-break-file-name): Doc update as per the above.
-
-2005-01-15 Stephen Eglen <S.J.Eglen@damtp.cam.ac.uk> (tiny change)
-
- * woman.el (woman-dired-define-key-maybe): If KEY is undefined,
- lookup-key might return nil; handle that.
-
-2005-01-15 Alan Mackenzie <acm@muc.de>
-
- * progmodes/ebrowse.el (ebrowse-class-in-tree):
- Return the tail of the tree rather than the element found,
- thus enabling the tree to be setcar'd.
-
-2005-01-14 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/org.el (org-show-following-heading): New option.
- (org-show-hierarchy-above): Use `org-show-following-heading'.
- (org-cycle): Documentation fix.
-
- * textmodes/org.el (orgtbl-optimized): New option.
- (orgtbl-mode): New command, a minor mode.
- (orgtbl-mode-map): New variable.
- (turn-on-orgtbl, orgtbl-mode, orgtbl-make-binding)
- (orgtbl-error, orgtbl-self-insert-command)
- (orgtbl-delete-backward-char, orgtbl-delete-char): New functions.
-
- * textmodes/org.el (org-mode): `org-table-may-need-update' is now
- a local variable in each org-mode buffer.
-
- * textmodes/org.el (org-set-regexps-and-options): Rename from
- `org-set-regexps'. Added checking for STARTUP keyword.
- (org-get-current-options): Add STARTUP options.
- (org-table-insert-row): Make mode intelligent about when
- realignment is needed.
- (org-self-insert-command, org-delete-backward-char, org-delete-char):
- New commands.
- (org-enable-table-editor): New default value `optimized'.
- (org-table-blank-field): Support blanking regions if active.
-
-2005-01-14 Carsten Dominik <dominik@science.uva.nl>
-
- * textmodes/reftex-cite.el (reftex-bib-sort-year): Catch the case
- if the year is not given.
-
- * textmodes/reftex-ref.el (reftex-replace-prefix-escapes):
- Add new escapes %m and %M, fixed bug with %F by adding
- save-match-data.
- (reftex-reference): Remove ?. from list of spaces.
- (reftex-label-info): Add automatic label prefix recognition.
-
- * textmodes/reftex-index.el (reftex-index-next-phrase):
- Add slave parameter to call of `reftex-index-this-phrase'.
- (reftex-index-this-phrase): New optional argument.
- (reftex-index-region-phrases): Add slave parameter to call of
- `reftex-index-this-phrase'.
- (reftex-display-index): New argument redo.
- (reftex-index-rescan): Add `redo' to arguments of
- `reftex-display-index'.
- (reftex-index-Rescan, reftex-index-revert)
- (reftex-index-switch-index-tag): Add `redo' to arguments of
- `reftex-display-index'.
- (reftex-index-make-phrase-regexp): Fix bug with case-sensitive
- indexing. Fix bug with matching is there is a quote before or
- after the word.
-
- * textmodes/reftex-cite.el (reftex-all-used-citation-keys):
- Fix bug when collecting citation keys in lines with comments.
- (reftex-citation): Prefix argument no longer rescans the document,
- but forces prompting for optional arguments of cite macros.
- (reftex-do-citation): Prompting for optional arguments implemented.
-
- * textmodes/reftex-vars.el (reftex-cite-format-builtin):
- Add optional arguments to most cite commands.
- (reftex-cite-cleanup-optional-args): New option
- (reftex-cite-prompt-optional-args): New option.
- (reftex-trust-label-prefix): New option.
-
- * textmodes/reftex-toc.el (reftex-toc-find-section):
- Add push-mark before changing the position in the buffer.
-
- * textmodes/reftex.el (reftex-prefix-to-typekey-alist): New variable.
- (reftex-compile-variables): Compute reftex-prefix-to-typekey-alist.
-
-2005-01-14 Nick Roberts <nickrob@snap.net.nz>
-
- * xt-mouse.el (xterm-mouse-event): Compute window co-ordinates
- more carefully.
-
-2005-01-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * textmodes/sgml-mode.el (sgml-fill-nobreak): New fun.
- (sgml-mode): Use it.
- (sgml-get-context): Better keep track of implicitly closed tags.
-
-2005-01-13 Kenichi Handa <handa@m17n.org>
-
- * textmodes/ispell.el: These changes are to fix misalignment error
- caused by equivalent characters of different Emacs charsets.
- (ispell-unified-chars-table): New variable.
- (ispell-get-decoded-string): New function.
- (ispell-get-casechars, ispell-get-not-casechars)
- (ispell-get-otherchars): Call ispell-get-decoded-string.
-
-2005-01-12 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net>
-
- * custom.el (custom-declare-variable): Just put symbol instead
- of (defvar . symbol) in `current-load-list'.
-
-2005-01-12 Reiner Steib <Reiner.Steib@gmx.de>
-
- * emacs-lisp/elint.el: Fixed typo in Commentary section.
-
-2005-01-12 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-help.el (calc-describe-key): Use temporary info buffer
- to create a Calc summary.
-
-2005-01-12 Kim F. Storm <storm@cua.dk>
-
- * mouse.el (mouse-on-link-p): Change functionality and doc
- string to comply with latest description in lisp ref.
-
-2005-01-12 Nick Roberts <nickrob@snap.net.nz>
-
- * xt-mouse.el (xterm-mouse-translate, xterm-mouse-event):
- Enable mouse clicks on mode-line, header-line and margin.
- (event-type): Give mouse event symbols an `event-kind' property
- with value `mouse-click'.
-
-2005-01-12 Juri Linkov <juri@jurta.org>
-
- * facemenu.el (list-colors-display): Add new arg buffer-name.
- Use it. Fix docstring. Replace code for identifying duplicate
- colors by the name with call to `list-colors-duplicates' which
- identifies duplicate colors by the value unless the color
- is one of special Windows colors. Set truncate-lines to t.
- Print sorted duplicate color names on each line. Indent to 22
- \(the longest color name in rgb.txt) instead of 20. Optimize.
- (list-colors-duplicates): New function.
- (facemenu-color-name-equal): Delete function.
-
- * facemenu.el (list-colors-print): New function created from code
- in list-colors-display. Print #RRGGBB at the window right edge.
- (list-colors-display): When temp-buffer-show-function is not
- defined, call list-colors-print from temp-buffer-show-hook
- to get the right value of window-width in list-colors-print
- after the buffer is displayed.
-
- * simple.el (pop-mark): Move deactivate-mark out of conditional
- part to deactivate the active mark regardless of the state of the
- mark ring.
-
- * desktop.el (desktop-save): Add `mode: emacs-lisp' to the local
- variables line in desktop files.
-
-2005-01-12 Juri Linkov <juri@jurta.org>
-
- * isearch.el (search-highlight, isearch, isearch-lazy-highlight):
- Bring together isearch highlight related options.
- (lazy-highlight): Replace group `replace' by `matching'.
- (lazy-highlight-cleanup, lazy-highlight-initial-delay)
- (lazy-highlight-interval, lazy-highlight-max-at-a-time)
- (lazy-highlight): Add aliases to old names isearch-lazy-highlight-...
- and declare them obsolete.
- (lazy-highlight-face): Rename from isearch-lazy-highlight-face.
- (isearch-faces): Remove defgroup.
- (isearch-overlay, isearch-highlight, isearch-dehighlight):
- Move isearch highlighting code closer to lazy highlighting code.
-
- * replace.el (query-replace-lazy-highlight): Add lazy-highlight group.
- (query-replace-highlight, query-replace-lazy-highlight)
- (query-replace): Move definitions to the beginning of the file.
-
-2005-01-11 Juri Linkov <juri@jurta.org>
-
- * toolbar/back_arrow.xpm, toolbar/back_arrow.pbm
- * toolbar/lc-back_arrow.xpm, toolbar/lc-fwd_arrow.xpm
- * toolbar/fwd_arrow.xpm, toolbar/fwd_arrow.pbm: New icons.
-
- * info.el (Info-history-forward): New variable.
- (Info-select-node): Reset Info-history-forward to nil.
- (Info-last): Turn into defalias.
- (Info-history-back): Rename from Info-last.
- Add current node to Info-history-forward.
- (Info-history-forward): New fun.
- (Info-mode-map): Replace Info-last by Info-history-back.
- Bind Info-history-forward to "r".
- (Info-mode-menu): Replace Info-last by Info-history-back.
- Fix menu item text. Add menu item for Info-history-forward.
- (info-tool-bar-map): Replace Info-last by Info-history-back.
- Replace its icon "undo" by "back_arrow". Add icon "fwd_arrow"
- for Info-history-forward.
- (Info-mode): Replace Info-last by Info-history-back in docstring.
- Add local variable Info-history-forward.
- (Info-goto-emacs-command-node): Replace Info-last by Info-history-back.
-
-2005-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line)
- (mouse-drag-region, mouse-drag-region-1, mouse-drag-secondary):
- Ignore select-window events rather than fiddle with
- mouse-autoselect-window.
-
-2005-01-11 Matthew Mundell <matt@mundell.ukfsn.org>
-
- * type-break.el (type-break-mode): Fix previous change.
-
-2005-01-10 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-ext.el (calc-reset): Reset when inside embedded
- calculator; only reset when point is inside a calculator.
- Don't adjust the window height if the window takes up the whole height
- of the frame.
-
-2005-01-10 Thien-Thi Nguyen <ttn@gnu.org>
-
- * ebuff-menu.el (Electric-buffer-menu-mode):
- Preserve value of buffer-local var header-line-format.
-
-2005-01-09 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-mode-var-list-restore-saved-values):
- Make sure settings file exists before accessing it.
-
- * calc/calc-embed.el (calc-embedded-subst):
- Replace math-multi-subst-rec, which is only supposed to be called
- by math-multi-subst, by math-multi-subst.
-
-2005-01-09 Andre Spiegel <spiegel@gnu.org>
-
- * vc.el (vc-allow-async-revert): New user option.
- (vc-disable-async-diff): New internal variable.
- (vc-revert-buffer): Use them to disable asynchronous diff.
-
- * vc-cvs.el, vc-arch.el, vc-svn.el, vc-mcvs.el (vc-cvs-diff)
- (vc-arch-diff, vc-svn-diff, vc-mcvs-diff): Don't diff
- asynchronously if vc-disable-async-diff is t.
-
-2005-01-09 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (defcalcmodevar): New macro.
- (calc-mode-var-list-restore-default-values)
- (calc-mode-var-list-restore-saved-values): New functions.
- (calc-mode-var-list): Use defcalcmodevar to define it.
- (calc-always-load-extensions, calc-line-numbering)
- (calc-line-breaking, calc-display-just, calc-display-origin)
- (calc-number-radix, calc-leading-zeros, calc-group-digits)
- (calc-group-char, calc-point-char, calc-frac-format)
- (calc-prefer-frac, calc-hms-format, calc-date-format)
- (calc-float-format, calc-full-float-format, calc-complex-format)
- (calc-complex-mode, calc-infinite-mode, calc-display-strings)
- (calc-matrix-just, calc-break-vectors, calc-full-vectors)
- (calc-full-trail-vectors, calc-vector-commas, calc-vector-brackets)
- (calc-matrix-brackets, calc-language, calc-language-option)
- (calc-left-label, calc-right-label, calc-word-size)
- (calc-previous-modulo, calc-simplify-mode, calc-auto-recompute)
- (calc-display-raw, calc-internal-prec, calc-angle-mode)
- (calc-algebraic-mode, calc-incomplete-algebraic-mode)
- (calc-symbolic-mode, calc-matrix-mode, calc-shift-prefix)
- (calc-window-height, calc-display-trail, calc-show-selections)
- (calc-use-selections, calc-assoc-selections)
- (calc-display-working-message, calc-auto-why, calc-timing)
- (calc-mode-save-mode, calc-standard-date-formats, calc-autorange-units)
- (calc-was-keypad-mode, calc-full-mode, calc-user-parse-tables)
- (calc-gnuplot-default-device, calc-gnuplot-default-output)
- (calc-gnuplot-print-device, calc-gnuplot-print-output)
- (calc-gnuplot-geometry, calc-graph-default-resolution)
- (calc-graph-default-resolution-3d, calc-invocation-macro)
- (calc-show-banner): Use defcalcmodevar to declare them and set
- their default values.
-
- * calc/calc-ext.el (calc-reset): Restore saved values of variables
- instead of default values (but restore default values if there is
- an argument of 0).
-
-2005-01-09 David Kastrup <dak@gnu.org>
-
- * desktop.el (desktop-restore-eager): Fix typo in type.
-
-2005-01-08 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (customize): Delete :link.
-
-2005-01-08 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-mode): Remove the extension from the
- `calc-settings-file' file name when loading it.
-
-2005-01-08 Kim F. Storm <storm@cua.dk>
-
- * info.el (Info-mode-map, Info-next-link-keymap)
- (Info-prev-link-keymap, Info-up-link-keymap):
- Map follow-link to mouse-face.
- (Info-fontify-node): Add "mouse-2: " prefix to tooltip.
-
-2005-01-08 Jay Belanger <belanger@truman.edu>
-
- * calc/calc.el (calc-settings-file): Change default value.
- Suggested by cgw in a comment in calc-mode.el.
-
- * calc/calc-mode.el (calc-settings-file-name):
- Compare calc-settings-file to user-init-file instead of ~/.emacs.
- Replace ~/.emacs in a prompt by calc-settings-file.
-
-2005-01-07 Lars Hansen <larsh@math.ku.dk>
-
- * desktop.el (desktop-restore-eager, desktop-lazy-verbose)
- (desktop-lazy-idle-delay): New customizable variables.
- (desktop-buffer-args-list): New variable.
- (desktop-append-buffer-args): New function.
- (desktop-save): Call desktop-append-buffer-args for some buffers.
- (desktop-lazy-create-buffer): New function.
- (desktop-idle-create-buffers): New function.
- (desktop-read): Add message about buffers to restore lazily.
- (desktop-lazy-abort): New command.
- (desktop-clear): Call desktop-lazy-abort.
- (desktop-lazy-complete): New command.
-
-2005-01-06 Richard M. Stallman <rms@gnu.org>
-
- * emacs-lisp/find-func.el (find-face-definition):
- Rename from find-face.
-
-2005-01-06 Kim F. Storm <storm@cua.dk>
-
- * simple.el (completion-list-mode-map): Map follow-link to mouse-face.
-
- * man.el (Man-xref-man-page, Man-xref-header-file)
- (Man-xref-normal-file): Add follow-link property.
-
-2005-01-06 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-units.el: Make sure the proper macro definitions are
- available when compiling.
-
-2005-01-06 Juri Linkov <juri@jurta.org>
-
- * isearch.el (isearch-lazy-highlight-update):
- Rename `isearch-lazy-highlight-interval' to `lazy-highlight-interval'.
-
-2005-01-06 Miles Bader <miles@gnu.org>
-
- * isearch.el (lazy-highlight): Rename from `lazy-highlight-face'.
- (isearch-lazy-highlight-face): Use new name.
-
-2005-01-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * uniquify.el (uniquify-rationalize-file-buffer-names):
- Re-add an interactive spec.
- (uniquify-rationalize-file-buffer-names): Fix corner case when renaming
- to the same name.
-
- * isearch.el (isearch-dehighlight): Remove unused arg `totally'.
- (isearch-update, isearch-done): Adjust calls accordingly.
-
-2005-01-05 Richard M. Stallman <rms@gnu.org>
-
- * custom.el (custom-set-variables, custom-theme-set-variables):
- Clarify documentation.
-
- * emacs-lisp/find-func.el (find-variable)
- (find-variable-other-window, find-variable-other-frame):
- Fix the TYPE args to find-function-read and find-function-do-it.
- (find-function): Doc fix.
- (find-function-at-point): Replace function-at-point alias.
-
-2005-01-04 Richard M. Stallman <rms@gnu.org>
-
- * cus-face.el (custom-declare-face):
- Record defface in current-load-list.
-
- * help-fns.el (variable-at-point): New arg ANY-SYMBOL.
-
- * emacs-lisp/find-func.el: Doc fixes.
- (find-face-regexp): New variable.
- (find-function-regexp-alist): New variable.
- (find-function-C-source): Third arg is now TYPE.
- (find-function-search-for-symbol): Handle general TYPE.
- (find-function-read, find-function-do-it): Handle general TYPE.
- (find-definition-noselect, find-face): New functions.
- (function-at-point): Alias deleted.
-
-2005-01-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * battery.el (display-battery-mode): Rename from display-battery.
- Handle the case where it gets turned off.
-
-2005-01-04 Richard M. Stallman <rms@gnu.org>
-
- * cus-edit.el (customize): Make :link point to user doc.
-
- * man.el (Man-fontify-manpage): Turn off undo generation.
-
- * add-log.el (change-log-font-lock-keywords): Don't match just "From".
-
-2005-01-04 Andreas Schwab <schwab@suse.de>
-
- * files.el (insert-directory): Only look for error lines in
- inserted text. Don't move too far after processing --dired markers.
-
-2005-01-04 Richard M. Stallman <rms@gnu.org>
-
- * mail/mailabbrev.el (sendmail-pre-abbrev-expand-hook):
- Don't expand if the character is @, period, dash, etc.
- (define-mail-abbrev): Quote names that contain problem characters.
-
-2005-01-04 Thien-Thi Nguyen <ttn@gnu.org>
-
- * progmodes/hideshow.el: No longer require `cl'; `dolist' is standard.
-
-2005-01-03 Richard M. Stallman <rms@gnu.org>
-
- * replace.el (replace-dehighlight): Use lazy-highlight-cleanup.
- (query-replace-highlight, query-replace-lazy-highlight)
- (query-replace): Definitions moved up. Doc fix.
-
-2005-01-03 Richard M. Stallman <rms@gnu.org>
-
- * isearch.el (lazy-highlight): Group renamed from isearch-lazy-...
- (lazy-highlight-cleanup, lazy-highlight-initial-delay)
- (lazy-highlight-interval, lazy-highlight-max-at-a-time)
- (lazy-highlight-face): Rename from isearch-lazy-...
- Change all references to them.
-
-2005-01-03 Luc Teirlinck <teirllm@auburn.edu>
-
- * cus-edit.el (custom-file): Doc fix for defcustom.
- (custom-file): The function no longer sets the variable
- `custom-file' to its return value.
-
- * startup.el (command-line): No longer load `custom-file'.
-
-2005-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * emacs-lisp/find-func.el (find-variable-regexp): Avoid defface.
-
- * progmodes/perl-mode.el (perl-nochange, perl-calculate-indent):
- Don't confuse module-prefixed identifiers for labels.
- Reported by Juan-Leon Lahoz Garcia <juanleon1@gmail.com>.
-
-2005-01-02 Richard M. Stallman <rms@gnu.org>
-
- * files.el (basic-save-buffer-1): Fix previous change.
-
- * loadhist.el (file-loadhist-lookup): New function.
- (file-provides, file-requires): Use it.
-
- * electric.el (Electric-pop-up-window): Use fit-window-to-buffer
- instead of calculating the right size.
-
-2005-01-02 Karl Chen <quarl@cs.berkeley.edu>
-
- * vc-svn.el (vc-svn-diff): Stay local if possible.
-
-2005-01-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * vc-arch.el (vc-arch-workfile-version): Handle the empty-branch case.
-
- * files.el (hack-local-variables): Fix last change.
-
-2005-01-02 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-yank.el (calc-edit-top): New variable.
- (calc-edit-mode): Set calc-edit-top to be the beginning of the edited
- object. Change header properties.
- (calc-edit-finish, calc-edit-finish-stack-object)
- (calc-edit-show-buffer): Use calc-edit-top to find the beginning of the
- edited object.
- * calc/calc-sel.el (calc-finish-selection-edit): Use calc-edit-top
- for the beginning of the edited object.
- * calc/calc-embed.el (calc-embedded-finish-edit): Use calc-edit-top
- for the beginning of the edited object.
- * calc/calc-prog.el (calc-edit-macro-finish-edit)
- (calc-finish-formula-edit, calc-macro-repeats)
- (calc-edit-macro-adjust-buffer, calc-edit-format-macro-buffer)
- (calc-edit-macro-pre-finish-edit): Use calc-edit-top for the
- beginning of the edited object.
- (calc-user-define-edit): Change the header for editing macros.
- Remove unnecessary variable.
-
-2005-01-01 Jay Belanger <belanger@truman.edu>
-
- * calc/calc-yank.el (calc-edit-mode): Change default header.
- (calc-edit-finish, calc-show-edit-buffer): Adjust to handle new header.
- * calc/calc-store.el (calc-edit-variable): Change title to match new
- header.
- * calc/calc-prog.el (calc-edit-user-syntax): Change title in edit
- mode to match new header.
- (calc-user-define-edit): Change titles to include names of commands.
- (calc-finish-formula-edit): Adjust to handle new header.
- (calc-finish-macro-edit): Remove.
- (calc-edit-macro-repeats, calc-edit-macro-adjust-buffer)
- (calc-edit-macro-command, calc-edit-macro-command-type)
- (calc-edit-macro-combine-alg-ent, calc-edit-macro-combine-ext-command)
- (calc-edit-macro-combine-var-name, calc-edit-macro-combine-digits)
- (calc-edit-format-macro-buffer, calc-edit-macro-pre-finish-edit)
- (calc-edit-macro-finish-edit): New functions.
- (calc-user-define-edit): Use new functions to edit named calc macros.
-
-2005-01-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * files.el (hack-local-variables): Cleanup prefix/suffix matching.
-
- * ses.el (copy-region-as-kill): Deactivate mark.
-
-2005-01-01 Richard M. Stallman <rms@gnu.org>
-
- * replace.el (occur-1): If the output buffer is also an input,
- don't kill it, rename it.
-
- * faces.el (set-face-background, set-face-foreground): Doc fix.
-
- * cus-face.el (custom-face-attributes): Fix :help-echo strings
- for :foreground and :background.
-
- * dired.el (dired-view-command-alist): Variable deleted.
- (dired-view-file, dired-mouse-find-file-other-window):
- Delete the code to use it.
-
-2005-01-01 Kim F. Storm <storm@cua.dk>
-
- * image.el (insert-sliced-image): Use t for line-height property.
-
-See ChangeLog.11 for earlier changes.
+See ChangeLog.12 for earlier changes.
;; Local Variables:
;; coding: iso-2022-7bit
;; add-log-time-zone-rule: t
;; End:
- Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -36122,4 +10015,4 @@ See ChangeLog.11 for earlier changes.
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
-;;; arch-tag: e39939be-dab3-400e-86f5-0e2701a883c1
+;; arch-tag: 1e8aa93a-fc6c-4ac3-9b10-1f445e1840af
diff --git a/lisp/ChangeLog.12 b/lisp/ChangeLog.12
new file mode 100644
index 00000000000..fa7dc5589af
--- /dev/null
+++ b/lisp/ChangeLog.12
@@ -0,0 +1,33386 @@
+2007-04-24 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlw-shell.el (idlwave-shell-clear-all-bp):
+ Don't re-query for each cleared BP.
+ (idlwave-shell-clear-bp): Optionally skip BP query.
+ (idlwave-shell-update-bp-overlays): Use set-window-margins instead
+ of set-window-buffer, which incorrectly moves displayed region.
+
+2007-04-23 Jay Belanger <jay.p.belanger@gmail.com>
+
+ * calc/calc.el (calc-bug-address): Update maintainer's address.
+ * calc/*: Update maintainer's address.
+
+2007-04-23 Richard Stallman <rms@gnu.org>
+
+ * simple.el (set-mark-command-repeat-pop): Doc fix.
+ Put in `editing-basics' group.
+
+2007-04-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-mouse-scroll-up, Info-mouse-scroll-down):
+ New functions.
+ (Info-mode-line-node-keymap): Bind mouse commands to
+ Info-mouse-scroll-up/down instead of Info-scroll-up/down.
+
+2007-04-23 Luc Teirlinck <teirllm@auburn.edu>
+
+ * locate.el (locate-local-prompt): New var.
+ (locate-prompt-for-command): Doc fix.
+ (locate-prompt-for-search-string): New function.
+ (locate): New optional arg. Make locate-local-prompt
+ buffer-local. Use locate-prompt-for-search-string.
+ (locate-with-filter): New optional arg.
+ Use locate-prompt-for-search-string.
+ (locate-update): Bind locate-prompt-for-command.
+
+2007-04-23 Glenn Morris <rgm@gnu.org>
+
+ * files.el (magic-mode-alist): `<!DOCTYPE HTML' in html-mode.
+
+2007-04-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * button.el (button): Inherit from link face on a tty.
+
+2007-04-23 Glenn Morris <rgm@gnu.org>
+
+ * button.el (button): Use color for this face on a tty.
+
+ * files.el (magic-mode-alist): Allow for carriage-returns in
+ html-mode and sgml-mode entries.
+
+2007-04-22 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+ Improve doc string of generated command.
+
+ * subr.el (read-number): Catch errors.
+
+ * hi-lock.el (hi-lock-file-patterns-policy): Doc fix.
+
+2007-04-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-dired.el: Rename from thumbnails.el. All instances of
+ "thumbnails" replaced with "image-dired".
+
+ * dired.el (dired-mode-map): Rename "thumbnails" again, to
+ "image-dired".
+
+2007-04-22 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-kill-buffer-at-head, ido-delete-file-at-head):
+ Don't use kill-line.
+
+2007-04-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * t-mouse.el (t-mouse-make-event): Pass on mev's more informative
+ error message.
+
+2007-04-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * dired.el: Rename "tumme" to "thumbnails".
+
+ * thumbnails.el: Rename from tumme.el. All instances of "tumme"
+ replaced with "thumbnails".
+
+2007-04-22 Glenn Morris <rgm@gnu.org>
+
+ * hi-lock.el (hi-lock-file-patterns-policy): Make it a defcustom,
+ and give it the risky-local-variable property.
+
+ * textmodes/flyspell.el (flyspell-define-abbrev): Downcase abbrev
+ before defining it.
+
+2007-04-21 Martin Rudalics <rudalics@gmx.at>
+
+ * progmodes/cc-mode.el (c-remove-any-local-eval-or-mode-variables):
+ Use delete-region instead of kill-line.
+
+2007-04-21 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-electric-slash): Replace wrong use of
+ `kill-region' by `delete-region'.
+
+2007-04-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/perl-mode.el (perl-indent-command): Use delete-region
+ instead of kill-region.
+
+ * progmodes/mantemp.el (mantemp-make-mantemps-region)
+ (mantemp-insert-cxx-syntax, mantemp-sort-and-unique-lines)
+ (mantemp-remove-memfuncs): Use delete-region instead of kill-word
+ and kill-line.
+
+ * progmodes/vhdl-mode.el (vhdl-template-type)
+ (vhdl-template-record, vhdl-template-nature)
+ (vhdl-template-configuration-spec, vhdl-template-component-inst)
+ (vhdl-template-break, vhdl-regress-line, vhdl-electric-tab):
+ Use delete-region instead of kill-word and kill-line.
+
+2007-04-21 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * dired-x.el (dired-virtual-mode): Doc fix.
+
+2007-04-21 Richard Stallman <rms@gnu.org>
+
+ * font-lock.el (font-lock-keywords-alist): Mark as risky.
+
+ * subr.el (read-number): Doc fix.
+
+ * simple.el (pop-to-mark-command): Display message "mark popped"
+ if point does not move.
+ (set-mark-command): Doc fix.
+
+2007-04-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * locate.el: Revert 2006-09-09 and 2007-04-20 changes.
+ (locate-local-filter, locate-local-search): New vars.
+ (locate): Make variables local.
+ (locate-update): Bind locate-buffer-name. Call locate using
+ locate-local-filter and locate-local-search.
+
+2007-04-20 David Koppelman <koppel@ece.lsu.edu>
+
+ * hi-lock.el (hi-lock-file-patterns-policy): New var.
+ (hi-lock-find-patterns): Use hi-lock-file-patterns-policy.
+ (hi-lock-mode): Update docstring.
+
+2007-04-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/fill.el (fill-move-to-break-point): Don't inhibit
+ fill-nobreak-predicate when the break is past fill-column.
+
+2007-04-20 Francesco Potort,Al(B <pot@gnu.org>
+
+ * locate.el (locate): Output from shell-command should go in the
+ current buffer rather than *Shell Command Output*.
+
+2007-04-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * paren.el (show-paren-function): Fix last fix.
+
+2007-04-19 Kevin Ryde <user42@zip.com.au>
+
+ * arc-mode.el (archive-find-type): lzh-exe for lzh self-extracting exe.
+ (archive-lzh-summarize): Add optional start arg for where to start
+ looking at the archive.
+ (archive-lzh-exe-summarize, archive-lzh-exe-extract): New functions.
+
+ * international/mule.el (auto-coding-alist): no-conversion for .exe
+ and .EXE.
+
+2007-04-19 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-in-function-trailer-p): Fix this: when a
+ function return type contains "struct", "union", etc.
+ c-end-of-defun goes too far forward.
+
+2007-04-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * paren.el (show-paren-function): Reset window-start to avoid
+ recentering.
+
+2007-04-19 Glenn Morris <rgm@gnu.org>
+
+ * calendar/todo-mode.el: Fix typo: "threshhold" -> "threshold".
+
+2007-04-18 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-header-line-format): Add a custom
+ :set function.
+ (diary-list-entries): Only switch to diary-mode from
+ default-major-mode (reverts 2007-03-21 change). Otherwise, if in
+ diary-mode set header-line-format, in case of any customization.
+
+2007-04-18 Levin Du <zslevin@gmail.com> (tiny change)
+
+ * calendar/parse-time.el (parse-time-string-chars): Check if CHAR
+ is less than the length of parse-time-syntax.
+
+2007-04-17 David Kastrup <dak@gnu.org>
+
+ * replace.el (query-replace-regexp-eval): Deprecate.
+
+2007-04-17 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-beginning-of-defun): With -ve arg and
+ point too close to EOB, leave point at EOB rather than last `}'.
+
+2007-04-17 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-include-OPTkey)
+ (bibtex-user-optional-fields, bibtex-entry-field-alist):
+ Fix defcustom.
+
+2007-04-17 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-dst.el (calendar-dst-find-startend): If YEAR cannot
+ be encoded, fall back to current year.
+
+2007-04-14 Kevin Ryde <user42@zip.com.au>
+
+ * arc-mode.el (archive-lzh-summarize): Only apply the "downcase if
+ all upcase" rule to OS-ID 0 "generic". Always downcase for OS-ID
+ M "MSDOS".
+
+2007-04-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/python.el (python-end-of-block): Avoid looping forever
+ if python-next-statement fails.
+
+2007-04-16 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-entry-field-alist): Use defcustom.
+
+2007-04-16 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/perl-mode.el (perl-indent-level): Mark as safe local var.
+ * progmodes/cperl-mode.el (cperl-indent-level): Likewise.
+
+2007-04-15 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-version): New function.
+ (calc-trail-mode): Shorten the title.
+
+2007-04-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * mail/footnote.el (footnote-style): Clarify docstring to state
+ that customizing this only applies to future footnotes.
+
+2007-04-15 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-field-list): Use functionp.
+ (bibtex-make-field): Check that INIT is a string. Use functionp.
+
+2007-04-14 Glenn Morris <rgm@gnu.org>
+
+ * complete.el (PC-goto-end): New buffer-local variable.
+ (PC-do-completion-end): Make buffer-local.
+ (partial-completion-mode) <choose-completion-string-functions>:
+ Do not go to the end of the minibuffer if PC-goto-end is non-nil.
+ (PC-do-completion): New optional fourth argument GOTO-END. Add a
+ doc string. Set PC-goto-end for choose-completion.
+ (PC-lisp-complete-symbol): Pass non-nil GOTO-END arg to
+ PC-do-completion.
+
+ * textmodes/bibtex.el (bibtex-insert-kill): Pass non-nil NODELIM
+ arg to bibtex-make-field.
+ (bibtex-make-field): Add optional fourth arg NODELIM.
+ Insert delimiters around INIT unless this arg is non-nil.
+
+2007-04-14 Nick Roberts <nickrob@snap.net.nz>
+
+ * tmm.el (tmm-get-keybind): Use copy-sequence to ensure that the
+ global map isn't modified.
+
+2007-04-14 Glenn Morris <rgm@gnu.org>
+
+ * calendar/appt.el (appt-disp-window): Do not split small windows.
+ Suggested by Jeff Miller <jmiller@cablespeed.com>.
+
+2007-04-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-start): Revert 2007-03-25 change.
+
+ * files.el: Ditto.
+
+2007-04-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * cus-edit.el (minibuffer, auto-save): Fix typos in docstrings.
+
+ * term.el (term-buffer-maximum-size, term-exec, term-escape-char)
+ (term-set-escape-char, term-termcap-format, term-get-old-input-default)
+ (term-skip-prompt, term-send-string, term-send-region, term-pager-page)
+ (term-pager-help): Fix typos in docstrings.
+
+ * wid-edit.el (widget-documentation): Fix typo in docstring.
+
+ * progmodes/ebnf2ps.el (ebnf-insert-style, ebnf-merge-style):
+ Fix typos in error messages.
+
+2007-04-13 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/edebug.el (edebug-pop-to-buffer): Don't select
+ window marked as dedicated.
+
+ * mail/footnote.el (footnote-latin-string): New variable.
+ (footnote-latin-regexp): Redefine as regexp alternative.
+ (Footnote-latin): Use footnote-latin-string instead of
+ footnote-latin-regexp.
+
+2007-04-13 Glenn Morris <rgm@gnu.org>
+
+ * tmm.el (tmm-get-keybind): Use car-safe to avoid errors with
+ inherited keymaps.
+
+2007-04-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * outline.el (outline-get-next-sibling): Clarify docstring.
+ (outline-get-last-sibling): Handle case where we are at the first
+ heading. Clarify docstring.
+
+2007-04-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-minor-mode-map): Make go button same
+ length as stop button to lessen flicker.
+ (jdb): Add gud-print.
+ (gud-find-expr): Jdb prints the expression with the value, so
+ don't insert it in the output.
+
+2007-04-11 Jason Rumney <jasonr@gnu.org>
+
+ * dnd.el (dnd-get-local-file-name): Decode both upper and lower
+ case hex. Do not try to decode non-hex letters.
+
+2007-04-11 Markus Triska <markus.triska@gmx.at>
+
+ * emacs-lisp/byte-opt.el (byte-optimize-backward-char)
+ (byte-optimize-backward-word): Remove (move to bytecomp.el).
+ (byte-optimize-form-code-walker): Evaluate pure function calls if
+ possible.
+ (byte-optimize-all-constp): New function.
+
+ * emacs-lisp/bytecomp.el (byte-compile-char-before):
+ Improve numeric argument case.
+ (byte-compile-backward-char, byte-compile-backward-word):
+ New functions, performing rewriting previously done in byte-opt.el.
+ Fix their "Fixme" item (restriction to numeric arguments).
+
+2007-04-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * desktop.el (desktop-save, desktop-create-buffer): Replace mapcar
+ with dolist.
+ (after-init-hook): Don't quote lambda.
+ (desktop-first-buffer): Don't wrap it in eval-when-compile.
+ (desktop-internal-v2s): Remove unused var `el'.
+ (desktop-buffer-major-mode, desktop-buffer-locals): Move out of
+ desktop-restore-file-buffer.
+ (desktop-buffer-ok-count, desktop-buffer-fail-count): Move out of
+ desktop-create-buffer.
+
+2007-04-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * woman.el (woman-decode-buffer): Postpone macro-set check...
+ (woman-decode-region): ...to here.
+
+2007-04-10 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * startup.el (tty-handle-args): Use %S to log ARGS.
+
+2007-04-10 Glenn Morris <rgm@gnu.org>
+
+ * dframe.el (dframe-frame-mode): Do not set auto-show-mode, since
+ it is obsolete and has no effect.
+
+ * dos-w32.el (default-buffer-file-type): Add defvar to quieten
+ byte-compiler.
+
+ * progmodes/cperl-mode.el (cperl-mode): Remove unnecessary call to
+ obsolete function make-local-hook.
+
+ * progmodes/dcl-mode.el (top-level): Move (require 'tempo) to
+ start to quieten byte-compiler.
+
+2007-04-10 Markus Triska <markus.triska@gmx.at>
+
+ * emacs-lisp/byte-opt.el (byte-optimize-char-before): Remove (move
+ to bytecomp.el as byte-compile-char-before).
+ * emacs-lisp/bytecomp.el (byte-compile-char-before):
+ New function (modified replacement for byte-optimize-char-before in
+ byte-opt.el).
+
+2007-04-09 Alan Mackenzie <acm@muc.de>
+
+ * startup.el (inhibit-splash-screen): Emphatically state that it
+ can't be set in site-start.el.
+
+2007-04-09 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/cc-subword.el (c-capitalize-subword): More closely
+ mimic the behavior of `capitalize-word'. Do not move point with a
+ negative argument. Based on tiny change by Paul Curry.
+
+2007-04-09 Paul Curry <dashteacup@gmail.com> (tiny change)
+
+ * progmodes/cc-subword.el (c-downcase-subword, c-upcase-subword):
+ Don't move point if ARG is negative.
+
+2007-04-09 Alan Mackenzie <acm@muc.de>
+
+ Changes to make `narrow-to-defun' and `mark-defun' work properly
+ in CC Mode:
+
+ * progmodes/cc-defs.el (c-beginning-of-defun-1):
+ * progmodes/cc-cmds.el (c-beginning-of-defun, c-end-of-defun):
+ Bind beginning/end-of-defun-function to nil around calls to
+ beginning/end-of-defun.
+
+ * progmodes/cc-langs.el (beginning-of-defun-function)
+ (end-of-defun-function): New c-lang-setvar's.
+
+ * progmodes/cc-awk.el (c-awk-beginning-of-defun): Add "(or arg
+ (setq arg 1))" to enable non-interactive call.
+
+2007-04-09 Eli Zaretskii <eliz@gnu.org>
+
+ * simple.el (set-mark-command): Doc fix.
+
+2007-04-09 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): Restore existing session if user
+ tries to start a second one in graphical mode.
+
+2007-04-08 Martin Rudalics <rudalics@gmx.at>
+
+ * cus-start.el <scroll-preserve-screen-position>: Add choices.
+
+2007-04-08 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * term/xterm.el (terminal-init-xterm): Fix key definitions.
+ Add binding for C-M-SPC.
+
+2007-04-08 Richard Stallman <rms@gnu.org>
+
+ * pcomplete.el (pcomplete-read-event): One single definition,
+ and not a defsubst.
+
+2007-04-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/cc-cmds.el (c-end-of-defun): Tidy up, to eliminate
+ byte-compiler warning "value unused".
+
+2007-04-08 Andreas Schwab <schwab@suse.de>
+
+ * term/xterm.el (terminal-init-xterm): Add bindings for keypad keys.
+
+2007-04-07 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (diary-font-lock-keywords, diary-live-p):
+ Autoload these functions.
+ (diary-date-forms): Add a custom :set form.
+
+ * calendar/diary-lib.el (diary-set-maybe-redraw): Move definition
+ before first use.
+ (diary-font-lock-keywords): New function with old code for
+ initialization of variable of same name.
+
+2007-04-07 David Hansen <david.hansen@gmx.net> (tiny change)
+
+ * progmodes/cc-cmds.el (c-electric-paren): Fix space-before-funcall
+ clean-up: only insert space when on identifier, etc.
+
+2007-04-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/grep.el (grep-find-use-xargs): Rewrite docstring.
+
+ * net/tls.el (open-tls-stream): Properly handle case where there
+ is no associated buffer.
+
+2007-04-07 Glenn Morris <rgm@gnu.org>
+
+ * ffap.el (ffap-file-at-point): Lower the priority of the
+ ffap-ftp-sans-slash-regexp check.
+
+2007-04-06 Alan Mackenzie <acm@muc.de>
+
+ Fix fontification of labels, and other things with ":".
+
+ * progmodes/cc-engine.el (c-forward-label): The function now
+ returns 'goto-target, 'qt-2kwds-colon, 'qt-1kwd-colon, as well as
+ the former t.
+
+ * progmodes/cc-fonts.el (c-font-lock-declarations): Interpret the
+ new return code from c-forward-label, fontifying tokens properly.
+ Add some general comments throughout the file.
+
+2007-04-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * textmodes/flyspell.el (flyspell-duplicate, flyspell-incorrect):
+ Revert 2006-01-27 change.
+
+ * diff-mode.el (diff-mode): Revert 2007-03-04 change.
+
+ * menu-bar.el (menu-bar-tools-menu): Revert 2003-07-25 change.
+
+ * desktop.el (desktop-create-buffer, desktop-save):
+ Revert 2004-11-12 change for lack of copyright papers.
+
+ * dired-x.el (dired-guess-shell-case-fold-search): Delete var.
+ (dired-guess-default): Respect case.
+
+ * isearch.el (isearch-forward): Revert 1998-08-26 doc change.
+
+ * emacs-lisp/byte-opt.el (byte-optimize-pure-func): Remove function;
+ was originally checked in as byte-optimize-concat on 1997-11-02.
+
+ * mail/sendmail.el (mail-text, mail-mode): Revert extant pieces of
+ 1995-05-19 doc changes.
+
+2007-04-06 Kim F. Storm <storm@cua.dk>
+
+ * loadhist.el (read-feature): Reimplement. New optional arg LOADED-P.
+ (unload-feature): Update interactive spec accordingly.
+
+ * progmodes/grep.el (grep-program): Remove commentary about zgrep.
+
+2007-04-06 John Paul Wallington <jpw@pobox.com>
+
+ * subr.el (with-case-table): Use `make-symbol' to avoid variable
+ capture. Restore the table in the same buffer.
+
+ * font-lock.el (lisp-font-lock-keywords-2): Add `with-case-table'.
+
+2007-04-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+ Print entire form.
+
+2007-04-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (breakpoint-disabled): Tweak face (again)
+ for low-color displays.
+
+2007-04-05 Glenn Morris <rgm@gnu.org>
+
+ * play/5x5.el, play/animate.el, play/dissociate.el, play/doctor.el,
+ * play/gomoku.el, play/landmark.el, play/tetris.el, play/zone.el:
+ Seed random number generator on loading.
+
+ * emacs-lisp/authors.el (top-level): Provide self.
+
+ * play/animate.el (top-level): Provide self.
+
+2007-04-04 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-vars.el (c-special-indent-hook): Amend doc-string
+ to mention c-syntactic-indentation.
+
+2007-04-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * subr.el (with-case-table): New macro.
+
+ * international/mule.el (ascii-case-table): New var.
+
+ * mail/smtpmail.el (smtpmail-via-smtp): Use ascii-case-table when
+ downcasing.
+
+2007-04-03 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-minor-mode-map): Simplify.
+
+ * t-mouse.el (t-mouse-make-event-element): Don't use the left edge
+ of the window if we're outside it e.g menu-bar.
+
+ * xt-mouse.el (xterm-mouse-event): Don't use the left edge of the
+ window if we're outside it e.g menu-bar.
+
+2007-04-03 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmail.el (rmail-convert-to-babyl-format): Don't try to
+ decode base-64 encoded body if its content-type is something other
+ than text/* or message/*.
+
+2007-04-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * simple.el (activate-mark-hook): Fix typo in docstring.
+
+2007-04-03 Nick Roberts <nickrob@snap.net.nz>
+
+ * tmm.el (tmm-c-prompt): Initialize.
+ (tmm-menubar): Deal with extended menu-items at top level.
+ (tmm-get-keybind): Handle bindings redefined/undefined locally.
+ (tmm-prompt): Handle visibility of top level menu-items.
+
+ * progmodes/gud.el (gud-menu-map): Simplify.
+ (gud-minor-mode-map): Add tool-bar like bindings to the text mode
+ menubar.
+
+2007-04-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * mail/smtpmail.el (smtpmail-via-smtp): Revert last change.
+
+ * comint.el (comint-send-input): Widen the buffer first.
+
+ * info.el (Info-fontify-maximum-menu-size): Revert to 100000.
+
+2007-04-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp-mode.el (lisp-fill-paragraph): Only obey
+ emacs-lisp-docstring-fill-column in emacs-lisp-mode.
+
+ * newcomment.el (comment-search-forward): Discard comment starters
+ before point.
+
+2007-04-01 Guanpeng Xu <herberteuler@hotmail.com>
+
+ * mouse.el (mouse-set-secondary): Update mouse-secondary-overlay.
+
+2007-04-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * mail/smtpmail.el (smtpmail-via-smtp): Use standard case table
+ when downcasing.
+
+ * button.el (previous-button): Rewrite to account for adjacent buttons.
+
+2007-04-01 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlwave.el (idlwave-auto-fill):
+ Revert paragraph-separate change.
+
+ * progmodes/idlw-shell.el (idlwave-shell-break-in):
+ Simplify module calc.
+ (idlwave-shell-set-bp-in-module): Compute module.
+
+2007-03-31 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/timer.el (run-at-time): Doc fix.
+
+ * emacs-lisp/warnings.el (display-warning): If we create the
+ buffer displaying the warning, disable undo there.
+
+2007-03-31 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-register-file-name-handler)
+ (tramp-register-completion-file-name-handler): New defsubst,
+ derived from `tramp-register-file-name-handlers'. The split is
+ necessary because Tramp's file name handlers must be registered at
+ different startup places.
+
+2007-03-31 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/hideshow.el (turn-off-hideshow): New function.
+ (hs-minor-mode): Use it instead of a lambda expression in
+ change-major-mode-hook.
+
+2007-03-31 David Kastrup <dak@gnu.org>
+
+ * woman.el (woman-Cyg-to-Win): Don't convert cons cells
+ corresponding to MANPATH_MAP entries.
+ (woman-man.conf-path, woman-parse-man.conf): Doc fix.
+ (woman-parse-man.conf): Use more discriminating man.conf name.
+ (woman-parse-man.conf): Parse MANPATH_MAP entries.
+ (woman-manpath): Doc fix and type fix.
+ (woman-cached-data): Check for MANPATH_MAP entries.
+ (woman-expand-directory-path): Treat MANPATH_MAP entries.
+
+2007-03-31 Stuart Herring <herring@lanl.gov>
+
+ * emacs-lisp/sregex.el (sregexq): Doc fix.
+
+2007-03-31 Markus Triska <markus.triska@gmx.at>
+
+ * progmodes/flymake.el (flymake-err-line-patterns): Doc fix.
+
+2007-03-30 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * info.el (info-tool-bar-map): Use "exit" for Info-exit.
+ Move to the right.
+
+2007-03-30 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-forward-to-nth-EOF-}): Fix EOB bug.
+
+2007-03-30 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--insert-new-node): Take additional arg DLL.
+ Use it, passed in explicitly, instead of from the dynamic binding.
+ (ewoc-create, ewoc-enter-before): Update to use new call sequence.
+
+2007-03-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * simple.el (blink-matching-open): When in minibuffer, don't
+ search for a match inside the prompt.
+
+2007-03-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * tmm.el (tmm-menubar): Select the right menu item with the mouse.
+ (tmm-prompt): Don't make the mouse user select the first menu
+ item twice.
+
+2007-03-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * eshell/esh-proc.el (eshell/kill): Tweak regexp to recognize
+ SIGUSR1 and SIGUSR2.
+
+2007-03-29 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-read-internal): When reading file or dir, only override
+ minibuffer-local-filename-completion-map, otherwise only override
+ minibuffer-local-completion-map.
+
+2007-03-29 Glenn Morris <rgm@gnu.org>
+
+ * complete.el (partial-completion-mode): Set PC-do-completion-end
+ to nil after use.
+ (PC-lisp-complete-symbol): Create and use a marker at `end',
+ rather than using point-marker.
+
+2007-03-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (next-error-highlight): Doc fix.
+ (compose-mail): Revert 2007-03-19 change.
+
+2007-03-28 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/edebug.el (edebug-display): Don't go to
+ edebug-outside-buffer if it is dead.
+
+2007-03-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * view.el (view-mode): Fix typos in docstring.
+
+2007-03-28 Stephen Berman <Stephen.Berman@gmx.net>
+
+ * recentf.el (recentf-save-file): Add a custom :set function.
+
+2007-03-28 Glenn Morris <rgm@gnu.org>
+
+ * complete.el (PC-do-completion-end): New variable.
+ (partial-completion-mode) <choose-completion-string-functions>:
+ Use PC-do-completion-end in the non-minibuffer case to replace the
+ correct amount of text.
+ (PC-do-completion): Set PC-do-completion-end for c-c-s-f.
+ (PC-lisp-complete-symbol): Give marker the after-insertion type,
+ to deal with improvements inserted after point.
+
+2007-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * button.el (make-text-button): Add explicit `button' property.
+ (default-button): Don't put a `button' property on it.
+
+ * progmodes/python.el (python-mode): Skip comments when parsing.
+
+ * vc-arch.el (vc-with-current-file-buffer): New macro.
+ (vc-arch-file-source-p): Use it to avoid infloop.
+
+2007-03-28 David Hansen <david.hansen@gmx.net> (tiny change)
+
+ * emacs-lisp/lisp.el (lisp-complete-symbol):
+ Fix call to get-buffer-window to find windows in other frames.
+
+2007-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * comint.el (comint-proc-query, comint-dynamic-list-completions):
+ Fix calls to get-buffer-window to find windows in other frames.
+ Reported by David Hansen <david.hansen@gmx.net>.
+
+2007-03-27 Kevin Ryde <user42@zip.com.au>
+
+ * info.el (Info-display-images-node): On a text-only terminal,
+ show the "text" or "alt" parts of the image blobs.
+
+2007-03-27 Glenn Morris <rgm@gnu.org>
+
+ * complete.el (PC-do-completion): Compute completion-base-size in
+ the non-filename case, rather than setting to nil.
+ (PC-lisp-complete-end): New variable.
+ (PC-lisp-complete-symbol): Use PC-lisp-complete-end to store the
+ original end in a series of consecutive invocations.
+
+ * calendar/calendar.el (calendar-mode-hook): Declare it.
+
+ * calendar/diary-lib.el (diary-live-p): Do not check for
+ diary-selective-display.
+
+2007-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * replace.el (occur-next-error): *Occur* might not be displayed in the
+ selected frame. Reported by David Hansen <david.hansen@gmx.net>.
+
+2007-03-26 Richard Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-large-region):
+ Use ispell-call-process-region.
+
+2007-03-26 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * emacs-lisp/bytecomp.el (byte-compile-file-form-defmumble):
+ Use prin1 instead of princ.
+
+2007-03-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * faces.el (face-set-after-frame-default): Revert 2007-03-10 change.
+ Merge in X resources before global face.
+
+ * progmodes/compile.el (compilation-start): Save compilation-directory
+ rather than default-directory as local var.
+ (compilation-directory): Mark as safe local var.
+
+ * files.el: Don't mark default-directory as a safe local var.
+
+2007-03-25 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-mode.el (c-before-change): Fix BOB bug.
+ * progmodes/cc-engine.el: Fix typo.
+
+2007-03-25 Juri Linkov <juri@jurta.org>
+
+ * compare-w.el (compare-windows): Rename customization group
+ `compare-w' to `compare-windows'.
+ (compare-windows-whitespace, compare-ignore-whitespace)
+ (compare-ignore-case, compare-windows-sync)
+ (compare-windows-sync-string-size, compare-windows-recenter)
+ (compare-windows-highlight, compare-windows): Change group name in
+ the `group' tag from `compare-w' to `compare-windows'.
+ (compare-windows-sync): Add option `nil' for no sync. Doc fix.
+
+2007-03-24 Markus Triska <markus.triska@gmx.at>
+
+ * expand.el: Change example to always enable abbrev-mode,
+ and remove redundant `function'.
+ (expand-abbrev-hook): Add autoload cookie.
+
+2007-03-24 Ryan Yeske <rcyeske@gmail.com>
+
+ * emacs-lisp/testcover.el (testcover-start, testcover-end)
+ (testcover-mark-all, testcover-unmark-all): Add prompts to
+ interactive specs.
+
+2007-03-24 Jason Rumney <jasonr@gnu.org>
+
+ * autorevert.el (find-file-hook, auto-revert-tail-mode):
+ Use file size in bytes for auto-revert-tail-pos not characters.
+
+2007-03-24 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * vc-rcs.el (vc-rcs-annotate-command):
+ Set text property :vc-annotate-prefix on the annotation text.
+ (vc-rcs-annotate-time): Instead of searching for ": ",
+ search for end of text propertized with :vc-annotate-prefix.
+
+2007-03-24 Martin Rudalics <rudalics@gmx.at>
+
+ * whitespace.el (top level): Remove calls putting
+ permanent-local nil property since these are no-ops.
+
+ * man.el (Man-support-local-filenames): Assure that
+ default-directory exists when doing call-process.
+
+2007-03-23 David Vazquez <xeos00@gmail.com> (tiny change)
+
+ * progmodes/m4-mode.el (m4-m4-buffer, m4-m4-region):
+ Fix omission bug: Use m4-program-options to construct shell command.
+
+2007-03-23 David Kastrup <dak@gnu.org>
+
+ * progmodes/cc-mode.el (c-make-emacs-variables-local):
+ Use `mapcar' rather than `mapcan' to silence compiler warning.
+
+2007-03-22 Ralf Angeli <angeli@caeruleus.net>
+
+ * textmodes/reftex.el, textmodes/reftex-vars.el,
+ * textmodes/reftex-toc.el, textmodes/reftex-sel.el,
+ * textmodes/reftex-ref.el, textmodes/reftex-parse.el,
+ * textmodes/reftex-index.el, textmodes/reftex-global.el,
+ * textmodes/reftex-dcr.el, textmodes/reftex-cite.el,
+ * textmodes/reftex-auc.el: Add maintainer address.
+
+2007-03-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-mode, org-table-edit-formulas):
+ Make sure that `global-font-lock-mode' does not turn on font-lock
+ in these buffers.
+
+2007-03-21 Kim F. Storm <storm@cua.dk>
+
+ * xt-mouse.el (xt-mouse-epoch): New variable.
+ (xterm-mouse-event): Use float-time.
+
+2007-03-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * xt-mouse.el (xterm-mouse-event): Compute a timestamp using
+ current-time.
+
+2007-03-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * complete.el (read-file-name-internal): Don't add the final > if the
+ completion is not finished (re-application of this patch, which was
+ accidentally undone by Eli).
+
+2007-03-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * emulation/viper.el (viper-non-hook-settings): Handle mouse
+ clicks in describe-key and describe-key-briefly advice a little better.
+
+2007-03-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-process-filter): Cancel any pending isearch.
+
+2007-03-21 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar-version): Increase to 0.15.
+ (icalendar--get-unfolded-buffer): Define actual arguments rather
+ than just using &rest. Check replace-in-string is fbound.
+ (icalendar-import-buffer): Doc fix.
+ (icalendar--convert-ical-to-diary): Set diary-file.
+ Check diary-file before inserting final newline.
+ (icalendar--add-diary-entry): Return diary-file.
+
+2007-03-21 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (diary-set-maybe-redraw): Autoload it.
+ (diary-display-hook): Add custom :set function.
+
+ * calendar/diary-lib.el (diary-header-line-flag): Doc fix.
+ Add custom :set function.
+ (diary-header-line-format): Doc fix.
+ (diary-set-maybe-redraw): New function.
+ (number-of-diary-entries): Change :set to use diary-set-maybe-redraw.
+ (diary-list-entries): Always run diary-mode.
+
+2007-03-20 Kenichi Handa <handa@m17n.org>
+
+ * international/quail.el (quail-setup-completion-buf): Make the
+ completion buffer read-only.
+ (quail-completion): Adjusted for the above change. Leave the
+ modified flag nil.
+
+2007-03-20 David Kastrup <dak@gnu.org>
+
+ * files.el (magic-mode-alist): Require literal "%!PS" string for
+ magic postscript file detection.
+
+2007-03-20 Richard Stallman <rms@gnu.org>
+
+ * textmodes/ispell.el (ispell-call-process): New function.
+ Defends against bad `default-directory.'
+ (ispell-check-version, ispell-find-aspell-dictionaries)
+ (ispell-get-aspell-config-value, lookup-words): Call it.
+ (ispell-call-process-region): New function.
+ (ispell-send-string): Call it.
+
+2007-03-20 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.in (custom-deps): Depend on $(lisp)/subdirs.el.
+ (finder-data): Likewise.
+ (autoloads): Likewise.
+
+2007-03-20 Martin Rudalics <rudalics@gmx.at>
+
+ * files.el (basic-save-buffer): Do not set visited filename when
+ the corresponding directory does not exist or the specified
+ filename is that of an existing directory.
+
+2007-03-20 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-live-p): New function.
+ (number-of-diary-entries): Add a :set function to redisplay diary
+ when necessary.
+
+2007-03-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * t-mouse.el (t-mouse-make-event-element): Use timestamp output
+ from client program, mev, to compute mouse event.
+
+2007-03-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * faces.el (momentary): Face removed; unused due to reversion of
+ 2007-01-04 changes by Kevin Rodgers.
+
+ * mouse.el (mouse-drag-track): Remove spurious input-pending-p test.
+ Suggested by Johan Bockg,Ae(Brd.
+
+2007-03-19 Martin Rudalics <rudalics@gmx.at>
+
+ * font-lock.el (lisp-font-lock-keywords-1):
+ Highlight define-globalized-minor-mode as a keyword.
+
+2007-03-19 Kim F. Storm <storm@cua.dk>
+
+ * calc/calc-forms.el (math-std-daylight-savings)
+ (math-std-daylight-savings-old): Doc fix.
+
+2007-03-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/python.el (python-default-template): Doc fix.
+ (python-buffer): Fix typo in docstring.
+
+ * isearchb.el (isearchb-follow-char):
+ * subr.el (def-edebug-spec): Fix typo in docstring.
+
+2007-03-19 Richard Stallman <rms@gnu.org>
+
+ * files.el (default-directory): Mark safe.
+ (basic-save-buffer-2): Put proper dir name in error message.
+
+ * simple.el (compose-mail): Run switch-function after
+ setting up the mail buffer.
+
+ * startup.el (inhibit-splash-screen, initial-major-mode): Doc fixes.
+
+2007-03-18 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-forms.el (math-parse-date): Fix a regular expression.
+ (math-std-daylight-savings-new): Rename from
+ `math-std-daylight-savings'.
+ (math-std-daylight-savings-old): Rename from old value of
+ `math-std-daylight-savings'.
+ (math-std-daylight-savings): Use `math-std-daylight-savings-new' or
+ `math-std-daylight-savings-old' depending on the year.
+
+2007-03-18 Detlev Zundel <dzu@gnu.org>
+
+ * emacs-lisp/re-builder.el (reb-update-overlays): Do not mark
+ zero-width regexps as invalid but rather at least count them correctly.
+
+2007-03-18 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * net/tls.el (open-tls-stream): In handshake-waiting loop,
+ don't wait more if there is output available to process.
+
+2007-03-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/compile.el (compilation-find-file): Revert change
+ from 2006-07-18 to allow completion of directory names.
+ Reported by John Carter <john.carter@tait.co.nz>.
+
+2007-03-18 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (when, unless): Doc fix.
+
+2007-03-17 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * net/tls.el (tls-program): Doc fix.
+
+2007-03-17 Denis Bueno <dbueno@gmail.com> (tiny change)
+
+ * autorevert.el (auto-revert-tail-handler):
+ Call after-revert-hook.
+
+2007-03-17 Ryan Yeske <rcyeske@gmail.com>
+
+ * simple.el (switch-to-completions): No error if search for \n\n fails.
+
+2007-03-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-1):
+ Respect `inhibit-line-move-field-capture' property.
+
+2007-03-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * comint.el (comint-arguments): Mark backslash-escaped chars.
+ (comint-delim-arg): Don't treat them as delimiters.
+
+2007-03-12 Kim F. Storm <storm@cua.dk>
+ * ido.el (ido-init-completion-maps): Remap delete-backward-char.
+
+2007-03-12 Lawrence Mitchell <wence@gmx.li> (tiny change)
+
+ * tempo.el (tempo-insert): Deal with 'r> if it appears
+ specified with a prompt argument.
+
+2007-03-12 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-set-font-lock-defaults):
+ Handle narrow table columns correctly.
+
+2007-03-12 Mark A. Hershberger <mah@everybody.org>
+
+ * xml.el (xml-parse-tag, xml-parse-string, xml-parse-attlist)
+ (xml-parse-dtd, xml-parse-elem-type, xml-substitute-special):
+ Return to use of the -no-properties variants. There was
+ consensus on emacs-devel that the speed of these variants was
+ prefered since we are usually parsing files (from the internet
+ or on disk) instead of XML created in Emacs.
+
+ * eshell/esh-mode.el (eshell-handle-ansi-color): New function.
+ Add customize option.
+
+2007-03-12 Glenn Morris <rgm@gnu.org>
+
+ * calc/calc-forms.el (math-std-daylight-savings): Switch to new
+ North American rule. Replace "daylight savings" with "daylight
+ saving" in doc.
+
+ * calendar/cal-china.el, cal-dst.el, calendar.el, diary-lib.el:
+ * calendar/lunar.el, solar.el: Replace "daylight savings" with
+ "daylight saving" in text.
+
+ * woman.el (woman-change-fonts): Tweak previous change by using
+ woman-request-regexp rather than "^\\.".
+
+ * startup.el (command-line-1): Make insertion of
+ initial-scratch-message not depend on scratch being selected.
+
+2007-03-11 Juri Linkov <juri@jurta.org>
+
+ * replace.el (match): Use yellow background on light-bg terminals.
+
+2007-03-11 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-warning-prefix):
+ Correctly compute line number.
+
+2007-03-11 Guanpeng Xu <herberteuler@hotmail.com>
+
+ * type-break.el (type-break-get-previous-count):
+ Repeat previous change here.
+
+2007-03-11 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/grep.el (grep-find-ignored-directories):
+ Add .git and .bzr to list.
+
+2007-03-11 Andreas Schwab <schwab@suse.de>
+
+ * diff-mode.el (diff-apply-hunk): Use proper format string for error.
+
+2007-03-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mail/emacsbug.el (report-emacs-bug): Don't hard code the "X" name.
+
+2007-03-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * faces.el (face-set-after-frame-default): Recalculate face
+ customizations after applying X resources.
+
+2007-03-10 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-timeout-seconds): New variable.
+ (rcirc-keepalive-seconds): Remove variable.
+ (rcirc-server-name, rcirc-timeout-timer, rcirc-connecting)
+ (rcirc-process, rcirc-user-disconnect): New variables.
+ (rcirc-connect): Initalize new variables.
+ (rcirc-keepalive): Don't send keepalive pings before connection
+ is completed.
+ (rcirc-sentinel): Do mark all channels with activity when
+ connection is dropped. Run hook with process buffer local.
+ (rcirc-reschedule-timeout, rcirc-delete-process): New functions.
+ (rcirc-buffer-process): Return value of rcirc-process if
+ rcirc-server-buffer is nil.
+ (rcirc-server-name): Return the reported server name.
+ (rcirc-update-prompt): Simplify computation of the server name.
+ (rcirc-format-response-string): Likewise.
+ (rcirc-handler-001): Mark server as connected, record the reported
+ server name, and schedule a timeout.
+ (rcirc-track-nick): Add a spec for the tty class.
+ (rcirc-user-non-nick): Remove function.
+ (rcirc-nick-prefix-chars): Add variable.
+ (rcirc-user-nick): Use above variable.
+
+2007-03-10 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * icomplete.el (icomplete-tidy, icomplete-exhibit):
+ Bind deactivate-mark to nil.
+
+2007-03-10 Martin Rudalics <rudalics@gmx.at>
+
+ * complete.el (PC-do-completion): Bind dirlength to nil to avoid
+ that buffer contents get erased during completion.
+
+2007-03-10 Glenn Morris <rgm@gnu.org>
+
+ * woman.el (woman-change-fonts): Add a hack to deal with
+ font-escape followed by "." at start of a line.
+ (woman2-IP): Add a hack to deal with consecutive requests.
+ (woman2-tagged-paragraph): Extend existing hack to handle "sp".
+
+2007-03-10 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-mode.el (c-before-change): Wrap in save-match-data.
+
+2007-03-09 Richard Stallman <rms@gnu.org>
+
+ * abbrev.el (abbrev): Add `provide'.
+
+2007-03-09 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * net/ange-ftp.el (ange-ftp-try-passive-mode): Doc fix.
+
+2007-03-09 Martin Rudalics <rudalics@gmx.at>
+
+ * complete.el (PC-try-completion): New function.
+ (PC-do-completion, read-file-name-internal): Use it instead of
+ try-completion.
+
+2007-03-08 Alan Mackenzie <acm@muc.de>
+
+ Remove stale tokens from `c-found-types' cache.
+
+ * progmodes/cc-mode.el (c-unfind-enclosing-token)
+ (c-unfind-coalesced-tokens, c-before-change): New functions.
+ (c-maybe-stale-found-type): New variable.
+
+ * progmodes/cc-engine.el (c-partial-ws-p, c-unfind-type)
+ (c-trim-found-types): New functions.
+
+2007-03-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * smerge-mode.el (smerge-remove-props): Don't mark the buffer modified.
+ (debug-ignored-errors): Add entry from smerge-match-conflict.
+
+2007-03-08 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlw-help.el (idlwave-do-context-help1): Don't visit
+ special help topics for keywords.
+ (idlwave-help-assistant-command): Include ".exe" for ms-dos
+ etc. Assistant command.
+
+2007-03-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * replace.el (occur-engine): Move buffer-undo-list binding...
+ (occur-1): ...to here.
+
+ * complete.el (PC-bindings): Rebind M-TAB in read-expression-map.
+
+ * simple.el (minibuffer-completing-symbol): New var.
+ (eval-expression): Use it.
+ (completion-setup-function): Don't bind completion-base-size when
+ completing a symbol in the minibuffer.
+
+2007-03-08 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): Pop up current GUD buffer if user
+ tries to start a second session in graphical mode.
+
+2007-03-07 Miles Bader <miles@gnu.org>
+
+ * international/isearch-x.el
+ (isearch-process-search-multibyte-characters):
+ Strip text-properties from PROMPT to avoid an error from read-string.
+
+2007-03-07 Kim F. Storm <storm@cua.dk>
+
+ * complete.el (PC-bindings): Remap lisp-complete-symbol to
+ PC-lisp-complete-symbol instead of binding M-TAB in global-map.
+
+2007-03-07 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * complete.el (PC-do-completion): Delete duplicates in the list of
+ possible completions.
+
+2007-03-07 Glenn Morris <rgm@gnu.org>
+
+ * ses.el (ses-mode): Doc fix.
+
+2007-03-06 Kim F. Storm <storm@cua.dk>
+
+ * isearch.el (isearch-message-prefix): Undo 2007-03-01 change.
+
+2007-03-06 Kenichi Handa <handa@m17n.org>
+
+ * term/x-win.el (x-select-utf8-or-ctext): Improve the strategy.
+
+2007-03-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (completion-setup-function): Improve last fix so it doesn't
+ set it to a relative directory name either.
+
+2007-03-05 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el: Replace some (defvar VAR) by (defvar VAR nil).
+
+2007-03-05 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/re-builder.el (reb-re-syntax): Fix custom type.
+
+ * files.el (find-file-noselect): No error if file no longer exists.
+ Display a message and avoid other questions.
+
+2007-03-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcomplete.el (pcomplete-show-completions): Improve last change, so
+ as not to use an invisible window and to create a window if none exist.
+
+ * progmodes/python.el (python-send-command): Restart proc if necessary.
+ (python-proc): Simplify.
+
+2007-03-05 David Hansen <david.hansen@gmx.net> (tiny change)
+
+ * pcomplete.el (pcomplete-show-completions): Search all frames for
+ completions buffer.
+
+2007-03-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (customize-save-variable): Clear customized-value
+ property (saved values are now put in theme-value property).
+ (customize-set-variable): Doc fix.
+
+ * complete.el (PC-do-completion): If completion-ignore-case is
+ non-nil, replace field with completion string before exiting.
+
+2007-03-05 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-make-temp-file): New parameter FILENAME.
+ Append its extension to the resulting temporary file name.
+ (tramp-handle-file-local-copy, tramp-handle-write-region): Apply it.
+
+ * net/tramp-smb.el (tramp-smb-handle-file-local-copy)
+ (tramp-smb-handle-write-region): Apply it.
+
+2007-03-05 Alin C. Soare <alinsoar@voila.fr> (tiny change)
+
+ * emacs-lisp/lisp-mode.el (calculate-lisp-indent):
+ Redo previous change.
+
+2007-03-04 Kevin Rodgers <kevin.d.rodgers@gmail.com> (tiny change)
+
+ * diff-mode.el (diff-mode): Doc fix.
+
+2007-03-05 Kenichi Handa <handa@m17n.org>
+
+ * international/characters.el: Set category `l' (latin)
+ for more characters.
+
+2007-03-04 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/authors.el (authors-aliases): Add alias.
+
+2007-03-04 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/hideshow.el (hs-minor-mode): Turn mode off and show
+ all when switching major mode.
+ (hs-minor-mode, hs-c-start-regexp, hs-block-start-regexp)
+ (hs-block-start-mdata-select, hs-block-end-regexp)
+ (hs-forward-sexp-func, hs-adjust-block-beginning):
+ Do not make these variables permanent-local.
+
+2007-03-04 Richard Stallman <rms@gnu.org>
+
+ * progmodes/cperl-mode.el (cperl-mode):
+ Modify cperl-compilation-error-regexp-alist by appending.
+
+ * emacs-lisp/edebug.el (edebug-kill-buffer): New function.
+ (edebug-mode): Add the hook.
+ (edebug-recursive-edit): Remove the hook on exiting.
+
+ * type-break.el (type-break-get-previous-time):
+ Handle end-of-file errors specially
+ so they don't get reported wrong in .emacs.
+
+ * startup.el (fancy-splash-text): Clarify text.
+
+ * simple.el (beginning-of-buffer, end-of-buffer):
+ Avoid treating plain C-u like numeric arg.
+
+ * simple.el (completion-setup-function): Don't set
+ default-directory to nil.
+
+ * shell.el (shell-dirstack-query): Doc fix.
+
+ * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line):
+ Don't select the window -- pass it to primitives instead.
+
+ * faces.el (minibuffer-prompt): Use medium blue by default.
+
+2007-03-04 David Kastrup <dak@gnu.org>
+
+ * jit-lock.el (jit-lock-stealth-time): Change default to nil.
+ Preserve 16 as default value for "seconds" when customizing.
+
+2007-03-04 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-self-insert-command)
+ (orgtbl-self-insert-command, org-delete-char)
+ (org-delete-backward-char): Set the `flyspell-delayed' property.
+
+2007-03-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * international/mule.el (find-auto-coding): Don't search for
+ line-ending characters past the end of the tail.
+
+2007-03-03 Christopher Allan Webber <cwebber@dustycloud.org> (tiny change)
+
+ * play/gamegrid.el (gamegrid-add-score-with-update-game-score-1):
+ Jump to the line where new score has been uploaded.
+
+ * play/tetris.el (tetris-move-bottom, tetris-move-left)
+ (tetris-move-right, tetris-rotate-prev, tetris-rotate-next):
+ Do nothing when the game is paused.
+
+2007-03-03 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-set-tags): Prevent slipping of point
+ during completion.
+
+2007-03-01 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * isearch.el (isearch-message-prefix):
+ Use minibuffer-prompt-properties.
+
+2007-03-01 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el: Replace (defvar VAR nil) by (defvar VAR).
+ (ps-setup): Print which Emacsen is running ps-print package.
+
+2007-03-01 Stuart Herring <herring@lanl.gov>
+
+ * files.el (set-auto-mode-0): Use `indirect-function'.
+ (hack-one-local-variable): Don't reapply current major mode.
+
+2007-03-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el (python-quote-syntax): Don't bother with
+ syntax-ppss-context.
+ (python-fill-paragraph): Make sure that fenced-string delimiters that
+ stand on their own line stay there.
+
+2007-03-01 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * replace.el (perform-replace): Propertize message.
+
+2007-03-01 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-prepare-agenda-buffers): Also check for
+ invisible heading.
+
+2007-02-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/tramp.el (tramp-file-name-handler): Revert last change.
+
+2007-02-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-mouse-until, gdb-mouse-jump):
+ Correct doc strings.
+
+2007-02-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * replace.el (perform-replace): Undo forward-char immediately if
+ non-adjacent search fails.
+
+2007-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * version.el (emacs-major-version, emacs-minor-version):
+ string-to-int -> string-to-number.
+
+2007-02-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (where-is): Fail gracefully when not passed a command.
+
+2007-02-28 Stuart Herring <herring@lanl.gov>
+
+ * find-lisp.el (find-lisp-default-directory-predicate):
+ Fix bug: Do symlink check on expanded filename.
+
+2007-02-28 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-set-tags, org-table-get-field): Avoid case
+ changes during replacement.
+ (org-agenda-mode-map): Add default binding for `org-agenda-archive'.
+
+2007-02-28 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el: Delete header line listing me as maintainer.
+
+2007-02-28 Glenn Morris <rgm@gnu.org>
+
+ * tutorial.el (tutorial--describe-nonstandard-key): Tweak text in
+ the menus case.
+
+2007-02-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/tramp.el (tramp-file-name-handler): Inhibit modification
+ hooks to avoid confusion when combining after-change calls.
+
+2007-02-27 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-encrypt-string): Remove inhibition of gpg-agent,
+ now that pgg-gpg-process-region correctly honors passed-in passphrase.
+ (allout-distinctive-bullets-string): Add info about bullet conventions.
+ (allout-mode): Add info about distinctive vs plain bullets.
+
+2007-02-27 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-archive-subtree): Quote variable name.
+ (org-agenda-get-todos): Make sure skip properties are checked correctly.
+
+2007-02-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-bashdb-history, gud-bashdb-marker-filter)
+ (gud-bashdb-command-name, bashdb): Remove.
+ (gud, gud-menu-map): Remove references to bash/bashdb.
+
+2007-02-26 Andrey Zhdanov <susuman@hotmail.com> (tiny change)
+
+ * progmodes/gud.el (gud-pdb-marker-regexp): Add optional <module>
+ keyword for Python 2.5.
+
+2007-02-26 Romain Francoise <romain@orebokech.com>
+
+ * net/net-utils.el (whois-server-tld): Update server for .org.
+ (whois-server-list): Add whois.publicinterestregistry.net.
+ (whois-guess-server): Fix formatting in docstring.
+
+2007-02-26 Kim F. Storm <storm@cua.dk>
+
+ * mouse.el (mouse-show-mark): Run hooks and perform command
+ remapping for mouse-region-delete-keys.
+
+2007-02-26 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * font-core.el (font-lock-mode): Doc fix.
+
+2007-02-25 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-buffer-internal): Set this-command to fallback command.
+ Add selected buffer to buffer-name-history.
+ (ido-file-internal): Set this-command to fallback command.
+ Add file names to file-name-history.
+
+ * emacs-lisp/map-ynp.el (map-y-or-n-p):
+ Apply minibuffer-prompt-properties.
+
+2007-02-25 Andreas Schwab <schwab@suse.de>
+
+ * files.el (hack-one-local-variable-eval-safep): Correct handling
+ of edebug-form-spec property value. Reported by Johan Bockg,Ae(Brd.
+
+2007-02-25 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-table-overlay-coordinates)
+ (org-table-toggle-coordinate-overlays): New functions.
+ (org-table-overlay-coordinates, org-table-coordinate-overlays):
+ New variables.
+ (org-startup-with-deadline-check): Remove option.
+ (org-mode): Remove deadline check on startup.
+ (org-table-limit-column-width): Remove option.
+ (org-table-formula-numbers-only): Remove option.
+ (org-link-style, org-link-format): Remove options.
+ (org-select-agenda-window, org-fit-agenda-window): Remove options.
+ (org-export-ascii-show-new-buffer)
+ (org-export-html-show-new-buffer): Remove options.
+ (org-activate-links): Remove camel option.
+ (org-file-link-context-use-camel-case): Remove option.
+ (org-camel-regexp): Remove variable.
+ (org-activate-camels): Remove function.
+ (org-store-link): Remove Camel stuff.
+ (org-make-org-heading-camel): Remove function.
+ (org-open-at-point): Remove camel stuff.
+ (org-link-search): Remove camel stuff.
+ (org-camel-to-words): Function removed.
+ (org-get-agenda-file-buffer): Make sure we prepare the base
+ buffers, not any indirect buffers.
+ (org-sort-entries): Sort top-level when not on a headline, and no
+ active region.
+ (org-in-regexp): New function.
+ (org-search-not-self): Rename from `org-search-not-link'.
+ (org-open-link-marker): New variable.
+ (org-open-at-point): Set `org-open-link-marker'.
+ (org-print-icalendar-entries): Fixe bug with excluding DONE
+ entries from the exported list.
+ (org-edit-formula-lisp-indent): New command.
+ (orgtbl-to-texinfo, orgtbl-to-html): New functions.
+ (orgtbl-to-latex, orgtbl-insert-radio-table)
+ (orgtbl-toggle-comment, orgtbl-send-table): New functions.
+ (orgtbl-radio-table-templates): New option.
+ (org-store-link-props):
+ (org-remember-templates): More possibilities to insert info
+ into templates.
+ (org-remember-apply-template): Make use of the extended
+ template capabilities.
+ (org-remember-redo-template): New command.
+ (org-upgrade-old-links)
+ (org-table-modify-formulas, org-table-replace-in-formulas)
+ (org-table-find-dataline)
+ (org-table-get-vertical-vector): Remove functions.
+ (org-table-remove-rectangle-highlight)
+ (org-time-stamp-format, org-toggle-log-option)
+ (org-table-highlight-rectangle)
+ (org-table-iterate, org-table-make-reference):
+ (org-translate-time, org-tree-to-indirect-buffer)
+ (org-table-field-info, org-table-fix-formulas)
+ (org-table-force-dataline, org-table-get-descriptor-line)
+ (org-table-get-range)
+ (org-skip-comments, org-sort)
+ (org-sort-entries, org-sublist, org-table-add-rectangle-overlay)
+ (org-table-current-dline, org-table-current-field-formula)
+ (org-table-edit-backward-field)
+ (org-table-edit-formulas-post-command)
+ (org-table-edit-line-down, org-table-edit-line-up)
+ (org-agenda-archive)
+ (org-agenda-clock-cancel)
+ (org-agenda-clock-out, org-agenda-list-stuck-projects)
+ (org-agenda-open-link, org-agenda-show-new-time)
+ (org-agenda-skip-subtree-when-regexp-matches)
+ (org-agenda-tree-to-indirect-buffer, org-agenda-undo)
+ (org-at-regexp-p, org-auto-repeat-maybe, org-check-log-option)
+ (org-do-sort, org-file-image-p, org-find-overlays)
+ (org-find-row-type, org-get-indirect-buffer, org-get-repeat)
+ (org-highlight-until-next-command, org-isearch-end)
+ (org-match-any-p, org-next-link, org-previous-link):
+ (org-remove-subtree-entries-from-agenda, org-replace-escapes)
+ (org-rewrite-old-row-references)
+ (org-isearch-post-command)
+ (org-table-edit-move, org-table-edit-next-field)
+ (org-table-edit-scroll, org-table-edit-scroll-down)
+ (org-set-frame-title, org-show-reference)
+ (org-unhighlight-once, org-verify-change-for-undo): New functions.
+ (org-show-variable): Remove command.
+ (org-add-log-maybe): New arguments STATE, FINDPOS
+ (org-table-sort-lines): Rewrite from scratch.
+ (org-link-search): New argument AVOID-POS.
+ (org-print-icalendar-entries): Remove argument CATEGORY.
+ (org-run-agenda-series): Remove argument WONDOW.
+ (org-next-link, org-previous-link): New commands.
+ (org-agenda-date-format): New option.
+ (org-table-iterate): New command.
+ (org-table-modify-formulas)
+ (org-table-replace-in-formulas): Remove functions.
+ (org-table-fix-formulas): New function.
+ (org-table-insert-column, org-table-delete-column)
+ (org-table-move-column): Use `org-table-fix-formulas'.
+ (org-follow-gnus-link): Patch from Bastien/Leo.
+ (org-table-current-field-formula): New function.
+ (org-file-image-p): New function.
+ (org-agenda-show-new-time): New function.
+ (org-agenda-date-later): Call `org-agenda-show-new-time'.
+ (org-with-remote-undo): New macro.
+ (org-agenda-undo): New command.
+ (org-verify-change-for-undo): New function.
+ (org-time-stamp-format): New function.
+ (org-agenda-get-timestamps): Skip scheduled if DONE and requested
+ by user.
+ (org-match-any-p): New function.
+ (org-make-tags-matcher): Handle regular expressions for tag and
+ todo matches.
+ (org-read-date): Accept "+N" as input for a date relative to the
+ current date.
+ (org-remove-subtree-entries-from-agenda): New function.
+ (org-agenda-archive, org-agenda-kill):
+ Use `org-remove-subtree-entries-from-agenda'.
+ (org-do-sort, org-sort-entries): New functions.
+ (org-sort): New command.
+ (org-table-sort-lines): Use `org-do-sort'.
+ (org-fix-decoded-time): New function.
+ (org-table-number-regexp): Require 0x... to identify as number
+ in tables.
+ (org-startup-options): New keywords for note taking.
+ (org-upgrade-old-links): Remove function.
+ (org-get-repeat): New function.
+ (org-show-context): Also show siblings on current level.
+ (org-show-siblings): New function.
+ (org-isearch-end, org-isearch-post-command): New functions.
+ (org-show-siblings): New option.
+ (org-show-context): Use `org-show-siblings'.
+ (org-table-maybe-recalculate-line): No longer require `calc-eval'
+ to be bound, because user may just use elisp.
+
+2007-02-24 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-paste): Handle x-clipboard-yank.
+ (cua--init-keymaps): Remap x-clipboard-yank to cua-paste.
+
+2007-02-24 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * startup.el (command-line): Also check if the abbrev file is readable.
+
+2007-02-24 John Paul Wallington <jpw@pobox.com>
+
+ * net/tls.el (tls-certtool-program): Fix custom type.
+
+ * mail/feedmail.el (feedmail-message-id-generator)
+ (feedmail-date-generator): Fix custom types.
+
+ * mail/rmail.el (rmail-message-filter): Fix custom type.
+
+2007-02-24 Eli Zaretskii <eliz@gnu.org>
+
+ * startup.el (command-line): If simple.el cannot be found, proceed
+ with a warning message.
+
+2007-02-24 Kenichi Handa <handa@m17n.org>
+
+ * international/utf-8.el (utf-8-pre-write-conversion): Handle the
+ case that BEG is a string.
+
+2007-02-24 Chris Moore <dooglus@gmail.com>
+
+ * pgg-pgp5.el (pgg-pgp5-encrypt-region):
+ * pgg-pgp.el (pgg-pgp-encrypt-region):
+ * pgg-gpg.el (pgg-gpg-encrypt-region):
+ Check pgg-encrypt-for-me if no other recipients.
+
+2007-02-23 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmailedit.el (rmail-cease-edit): Restore the Rmail toolbar.
+
+ * textmodes/sgml-mode.el (sgml-validate): Quote the file name with
+ shell-quote-argument.
+
+2007-02-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * comint.el (comint-read-input-ring): Use comint-input-ring-size
+ from the comint buffer instead of the temporary one.
+
+2007-02-23 David Reitter <david.reitter@gmail.com>
+
+ * cus-edit.el (custom-save-all): Canonicalize custom-file before
+ storing it in recentf-exclude.
+
+2007-02-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (fancy-splash-screens): Make cursor-type buffer-local
+ in splash screen.
+
+2007-02-22 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlw-shell.el (idlwave-shell-mode): Clean up pending
+ commands, for restart.
+ (idlwave-shell-current-module): Fix handling of module name by type.
+ (idlwave-shell-break-in): Update type handling.
+ (idlwave-shell-bp-get): Encode type in BP structure.
+ (idlwave-shell-set-bp): Fix setting condition/count on disabled BPs.
+ (idlwave-shell-module-source-query): Query routine info based on type.
+ Fix path parsing for non-compiled files.
+ (idlwave-shell-module-source-filter): Don't signal error in filter
+ if no source found.
+ (idlwave-shell-set-bp-in-module): Use fallback source to prevent
+ filter race.
+
+2007-02-22 Kim F. Storm <storm@cua.dk>
+
+ * wid-edit.el (widget-default-create): Undo 2007-02-04 change.
+ (editable-field): Document need to put some text before the %v
+ escape in :format string.
+
+2007-02-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-svn.el: Remove the code inherited from CVSREAD and `cvs edit'.
+ (vc-svn-use-edit): Remove unused config var.
+ (vc-svn-update, vc-svn-revert): Checkout is always implicit.
+
+ * outline.el (hide-sublevels): Keep empty last line, if available.
+
+ * buff-menu.el (list-buffers-noselect): Use explicit unicode code
+ rather than the corresponding unicode char, to make the code
+ more readable.
+
+2007-02-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * speedbar.el (speedbar-frame-mode, speedbar-frame-width)
+ (speedbar-show-unknown-files, speedbar-item-info-file-helper)
+ (speedbar-item-info-tag-helper): Doc fixes.
+
+2007-02-19 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (locale-language-names):
+ Map "eo" to "Esperanto".
+
+ * language/european.el ("Esperanto"): New language environment.
+
+2007-02-17 Sven Joachim <svenjoac@gmx.de> (tiny change)
+
+ * simple.el (kill-line): Doc fix.
+
+2007-02-17 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/bindat.el (bindat--unpack-u*): Optimize.
+ (bindat--unpack-item, bindat--length-group, bindat--pack-item)
+ (bindat--unpack-group, bindat--pack-group):
+ Handle vectors with optional element type.
+
+2007-02-17 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-process-region): Make USE-AGENT nil
+ if PASSPHRASE is given.
+
+2007-02-17 Chris Moore <dooglus@gmail.com>
+
+ * jka-cmpr-hook.el (jka-compr-compression-info-list):
+ Recognize backups of bz2 compressed files.
+
+2007-02-17 Eli Zaretskii <eliz@gnu.org>
+
+ * info-look.el (info-lookup): Bind Info-fontify-maximum-menu-size
+ to nil to speed up lookup of the symbol in index nodes.
+
+2007-02-17 Alin C. Soare <alinsoar@voila.fr> (tiny change)
+
+ * emacs-lisp/lisp-mode.el (calculate-lisp-indent):
+ Add indentation for the constants of Lisp.
+
+2007-02-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * ps-print.el: Use (defvar <foo>) where applicable.
+ (ps-print-emacs-type): Remove.
+ (ps-x-frame-property, ps-e-frame-parameter): Remove.
+ (ps-frame-parameter): Align its call-convention with frame-parameter.
+ (ps-begin-job): Adjust calls to it appropriately.
+ (ps-setup): Don't print ps-print-emacs-type.
+ (ps-e-find-composition, ps-mark-active-p, ps-color-device):
+ Define in such a way that it's obvious that it's defined.
+ (ps-prsc, ps-c-prsc, ps-s-prsc): Remove.
+ (ps-rmail-mode-hook, ps-vm-mode-hook, ps-gnus-summary-setup)
+ (ps-jts-ps-setup): Use flavor-neutral syntax instead.
+
+2007-02-15 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-indent-new-comment-line): When splitting
+ an empty one-line C-style comment, post-position point properly.
+
+2007-02-15 Chris Moore <dooglus@gmail.com>
+
+ * isearch.el (isearch-lazy-highlight-space-regexp): New variable.
+ (isearch-lazy-highlight-new-loop): Bind it.
+ (isearch-lazy-highlight-search): Use it.
+
+ * replace.el (replace-highlight): Bind search-whitespace-regexp to nil.
+
+2007-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-extend-region-wholelines):
+ Only return non-nil if the region has really been changed.
+ Reported by David Hansen <david.hansen@physik.fu-berlin.de>
+
+2007-02-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * play/5x5.el (5x5-crack-xor-mutate): Doc fix.
+ (5x5-draw-grid-end, 5x5-make-xor-with-mutation, 5x5-mode, 5x5-crack)
+ (5x5-play-solution, 5x5-y-or-n-p): Fix typos in docstrings.
+
+2007-02-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (color-values): Revert changes to docstring from
+ 2007-01-31 and 2000-09-07.
+
+ * textmodes/ispell.el (ispell-keep-choices-win, ispell-word)
+ (ispell-begin-skip-region-regexp): Fix typos in docstrings.
+ (ispell-dictionary-alist, ispell-process-line): Doc fixes.
+ (ispell-help): Fix typos in docstring and output message.
+
+2007-02-14 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-files-aliases): Add tex and texi aliases.
+ (lgrep): Add DIR arg to start grep in specific directory, like rgrep.
+ (grep): Fix lgrep reference.
+
+ * disp-table.el (make-glyph-code, glyph-char, glyph-face): New defuns.
+ (standard-display-underline): Use make-glyph-code.
+
+ * descr-text.el (describe-char): Use glyph-char and glyph-face.
+
+ * international/latin1-disp.el (latin1-display-char):
+ Use make-glyph-code.
+
+2007-02-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * ehelp.el (with-electric-help, electric-help-exit)
+ (electric-help-retain): Doc fixes.
+
+ * emacs-lisp/bytecomp.el (byte-compile-dest-file)
+ (byte-compile-file): Doc fixes.
+
+2007-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Change all uses of
+ mac-set-font-panel-visibility to mac-set-font-panel-visible-p.
+ (mac-ae-number): Return integer 0 if coerced result is float 0.0.
+ (mac-ae-get-url): Call select-frame-set-input-focus.
+ (mac-dnd-handle-drag-n-drop-event): Don't call
+ select-frame-set-input-focus.
+
+2007-02-13 Kenichi Handa <handa@m17n.org>
+
+ * international/characters.el: Fix documentation of category `a'.
+
+2007-02-11 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/grep.el (grep): Mention lgrep and rgrep in the docstring.
+
+2007-02-12 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-get-ls-command, tramp-get-file-exists-command)
+ (tramp-get-remote-ln): Handle error case.
+ Reported by Chris Moore <dooglus@gmail.com>.
+
+2007-02-11 Kim F. Storm <storm@cua.dk>
+
+ * bindings.el (ctl-x-map): Remove register compatibility bindings
+ C-x /, C-x j, C-x x, and C-x g (deprecated since Emacs 19).
+
+2007-02-11 Richard Stallman <rms@gnu.org>
+
+ * loadhist.el (unload-feature): Handle (t . SYMBOL) entries
+ in load history.
+
+ * emacs-lisp/lisp-mode.el (indent-sexp): Clean up termination
+ condition -- don't fail to stop at endpos.
+
+2007-02-11 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-get-todos)
+ (org-agenda-get-timestamps, org-agenda-get-closed)
+ (org-agenda-get-deadlines, org-agenda-get-scheduled)
+ (org-agenda-get-blocks, org-format-agenda-item)
+ (org-agenda-change-all-lines, org-scan-tags): Rename text property
+ from `category' to `org-category'.
+
+2007-02-11 Kenichi Handa <handa@m17n.org>
+
+ * international/titdic-cnv.el (titdic-convert): Force files be written
+ with Unix-like eol format. Read files under CXTERM-DIC by raw-text.
+ (miscdic-convert): Force files be written with Unix-like eol format.
+
+2007-02-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * files.el (change-major-mode-with-file-name): Fix typo in docstring.
+
+ * calculator.el (calculator-prompt): Doc fix.
+ (calculator-mode-map): Fix typo in menu entry.
+
+2007-02-10 Jay Belanger <belanger@truman.edu>
+
+ * calculator.el (calculator): Do more extensive checking for when
+ 3 lines should be used for the calculator.
+
+2007-02-10 Eli Zaretskii <eliz@gnu.org>
+
+ * info-look.el (info-lookup-make-completions):
+ Bind Info-fontify-maximum-menu-size to nil to speed up lookup of
+ index nodes.
+
+ * info.el (Info-fontify-maximum-menu-size): Document the effect
+ of a nil value.
+ (Info-fontify-node): Make sure Info-fontify-maximum-menu-size is
+ non-nil before using it as size.
+
+2007-02-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * subr.el (insert-for-yank-1): Prevent read-only properties from
+ interfering with text property operations.
+
+ * image-mode.el (image-mode): Revert 2007-01-30 changes.
+
+ * image.el (image-type-auto-detectable): Don't autodetect x[pb]m.
+ (image-type-auto-detected-p): Fail if another match is found in
+ auto-mode-alist.
+
+ * files.el (magic-mode-alist): Call image-mode instead of
+ image-mode-maybe for autodetected images.
+
+2007-02-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * mail/smtpmail.el (smtpmail-smtp-service, smtpmail-queue-index-file):
+ Fix typos in docstrings.
+ (smtpmail-local-domain, smtpmail-queue-mail): Doc fixes.
+
+2007-02-09 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/float-sup.el: Remove obsolete comment.
+
+2007-02-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-sanity-check-hunk): Fix last fix.
+
+2007-02-08 Karl Fogel <kfogel@red-bean.com>
+
+ * simple.el: Revert previous change, at request of RMS:
+ (fundamental-mode-hook): Remove.
+ (fundamental-mode): Run after-change-major-mode-hooks manually,
+ and don't run the now-nonexistent fundamental-mode-hook.
+
+2007-02-08 Karl Fogel <kfogel@red-bean.com>
+
+ * simple.el (fundamental-mode-hook): Declare new hook.
+ (fundamental-mode): Run the new dedicated hook, and don't run
+ after-change-major-mode-hooks manually anymore.
+
+2007-02-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-svn.el (vc-svn-merge-news): Understand the new format with two
+ added columns of chars. Remove support for the "no-meta-info" format.
+ Prompted by Romain Francoise <romain@orebokech.com>.
+
+2007-02-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-if-arrow): New macro.
+ (gdb-mouse-until, gdb-mouse-jump): Use it.
+
+2007-02-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-mouse-until, gdb-mouse-jump): Make them
+ work when there is just an assembler buffer (no source buffer).
+
+2007-02-07 Per Cederqvist <ceder@lysator.liu.se> (tiny change)
+
+ * diff-mode.el (diff-sanity-check-hunk): Don't reject the hunk
+ just because the diff was produced using "-p" (--show-c-function).
+
+2007-02-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (frame-set-background-mode): Use `color-values' and
+ `display-color-p', not `x-color-values' and `x-display-color-p'.
+ (face-valid-attribute-values): Use `defined-colors' instead of
+ `x-defined-colors'.
+
+2007-02-07 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el: The ps-print commands without face printing should not
+ print background color. Reported by Leo <sdl.web@gmail.com>.
+ (ps-print-version): New version 6.7.3.
+ (ps-begin-job): New arg. Fix ps-default-background and
+ ps-default-foreground initialization.
+ (ps-face-attributes): Fix doc string.
+ (ps-face-background, ps-generate-postscript, ps-generate): Fix code.
+
+ * printing.el: Fix ps-print link.
+
+2007-02-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * faces.el (face-set-after-frame-default): Compile attributes to
+ be set by frame parameters before merging in X resources.
+
+2007-02-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * simple.el (blink-matching-paren-dont-ignore-comments):
+ (blink-matching-paren-on-screen): Doc fixes.
+
+2007-02-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-frames-mode): Truncate lines in stack buffer.
+
+2007-02-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * loadhist.el (unload-feature): Silently ignore `load-history' entries
+ of the form `(defface . SYMBOL)', and treat `(autoload . SYMBOL)'
+ entries like `defun'. Return nil.
+
+2007-02-05 Kim F. Storm <storm@cua.dk>
+
+ * ido.el: Doc fixes.
+
+2007-02-04 David Kastrup <dak@gnu.org>
+
+ * play/mpuz.el (mpuz-random-puzzle): Fix potential lockup when
+ `mpuz-allow-double-multiplicator' is non-zero, and correct
+ calculation of `min'.
+
+2007-02-04 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * wid-edit.el (widget-default-create): Insert new text at the
+ :from marker _after_ the marker, not before it.
+
+2007-02-04 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-indent-line): Don't erase ^L when a line
+ containing it is re-indented.
+
+2007-02-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/newsticker.el (newsticker--insert-image): Update docstring,
+ and insert the image directly.
+ (newsticker--buffer-redraw): Update docstring.
+
+ * emacs-lisp/easy-mmode.el (define-globalized-minor-mode):
+ Rename from define-global-minor-mode.
+
+ * progmodes/cwarn.el (global-cwarn-mode):
+ * emacs-lisp/autoload.el (make-autoload):
+ * hi-lock.el (global-hi-lock-mode):
+ * font-core.el (global-font-lock-mode): All callers changed.
+
+2007-02-03 Eli Zaretskii <eliz@gnu.org>
+
+ * textmodes/texnfo-upd.el (texinfo-menu-copy-old-description):
+ Don't copy @ignore lines into menu descriptions.
+ (texinfo-multi-file-update): Goto the @node line before attempting
+ to pluck the node name.
+ (texinfo-multiple-files-update): Reverse the optional arguments'
+ order, as per the doc string and the `interactive' form.
+
+2007-02-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-mode.el: Use autoload to avoid overriding disabled setting
+ applied in .emacs.
+
+2007-02-03 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-in-knr-argdecl): Slight correction
+ for, e.g. "void (*hdone)();" in a k&r list. (No WS between
+ adjacent paren groups).
+
+2007-02-02 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * progmodes/ebnf2ps.el: Doc fixes.
+ (ebnf-eps-buffer, ebnf-eps-region, ebnf-syntax-alist): Doc fixes.
+
+2007-02-02 Eli Zaretskii <eliz@gnu.org>
+
+ * dired-x.el (dired-do-relsymlink): Add reference to
+ dired-do-symlink. Add an autoload cookie.
+
+ * dired-aux.el (dired-do-symlink): Add reference to
+ dired-do-relsymlink.
+
+2007-02-02 Doug Maxey <dwm@enoyolf.org> (tiny change)
+
+ * mouse.el <left-fringe mouse-2, right-fringe mouse-3>:
+ <left-fringe mouse-3>: New bindings.
+
+2007-02-02 Ulf Jasper <ulf.jasper@web.de>
+
+ * net/newsticker.el (newsticker-version): Changed to "1.10".
+ (newsticker--set-customvar): Doc string.
+ (newsticker-new-item-face): Doc string.
+ (newsticker-mode): Initialize `invisibility-spec' with t.
+ (newsticker-mode-map): Added
+ `newsticker-mark-all-items-at-point-as-read'.
+ (newsticker-menu): Added narrow-to-item and narrow-to-feed.
+ (newsticker-w3m-show-inline-images): Do not call
+ `w3m-remove-image'.
+ (newsticker--buffer-after-w3m-insert-image): New advice for
+ w3m-insert-image to cache images.
+ (newsticker-next-item-same-feed): New.
+ (newsticker-mark-all-items-at-point-as-read-and-redraw): New.
+ (newsticker-mark-all-items-of-feed-as-read): New.
+ (newsticker-mark-all-items-at-point-as-read): Use new functions.
+ (newsticker-mark-item-at-point-as-read): Doc string.
+ (newsticker-mark-item-at-point-as-read): Use new functions.
+ (newsticker--do-mark-item-at-point-as-read): New, extracted from
+ `newsticker-mark-item-at-point-as-read'.
+ (newsticker-hide-entry): Use (t) instead of t for invisibility.
+ (newsticker--sentinel): Yet another xml-parser workaround.
+ (newsticker--decode-iso8601-date): Bugfix for datestrings without
+ days.
+ (newsticker--buffer-do-insert-text): Fix.
+ (newsticker--buffer-insert-enclosure): Fix. length might be missing.
+ (newsticker--buffer-make-item-completely-visible):
+ `switch-to-buffer' not necessary.
+
+2007-02-02 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/ebnf2ps.el (ebnf-eps-buffer, ebnf-eps-region)
+ (ebnf-syntax-directory, ebnf-syntax-file, ebnf-syntax-region)
+ (ebnf-style-database, ebnf-apply-style, ebnf-reset-style)
+ (ebnf-push-style, ebnf-pop-style, ebnf-eps-production-list)
+ (ebnf-directory, ebnf-file, ebnf-syntax-alist): Doc fixes.
+
+2007-02-02 Kenichi Handa <handa@m17n.org>
+
+ * international/quail.el (quail-show-key): Fix an error message.
+
+2007-02-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (set-face-underline-p, modify-face): Rename arg
+ UNDERLINE-P to UNDERLINE (it is not a flag).
+
+2007-02-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-speedbar-update): Avoid duplication
+ when adding gdb-speedbar-update to gdb-input-queue.
+
+2007-02-01 Kenichi Handa <handa@m17n.org>
+
+ * international/quail.el (quail-show-key): Signal an error if the
+ current input method is not using Quail.
+
+2007-02-01 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlwave.el (idlwave-xml-create-sysvar-alist):
+ Trim leading whitespace in sysvar names.
+
+2007-02-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (internal-find-face, internal-get-face): Doc fixes.
+
+2007-01-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * ido.el (ido-set-common-completion): Use `let', not `let*'.
+
+2007-01-31 Romain Francoise <romain@orebokech.com>
+
+ * comint.el: Delete extra copy of `comint-copy-old-input' added in
+ previous change to this file.
+
+2007-01-31 Jason Rumney <jasonr@gnu.org>
+
+ * files.el (magic-mode-alist): Use image-mode-maybe rather than
+ image-mode.
+
+ * image-mode.el (image-mode-maybe): Prevent magic-mode-alist from
+ interfering with attempt to set major mode from modified
+ auto-mode-alist.
+
+2007-01-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (color-values): Doc fix.
+ (face-differs-from-default-p): Don't check :foreground twice.
+
+2007-01-31 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * comint.el (comint-mode): Prevent non-keyword fontification by default.
+
+2007-01-31 Kenichi Handa <handa@m17n.org>
+
+ * international/quail.el (quail-store-decode-map-key): Store a
+ translated character too.
+ (quail-char-equal-p): New function.
+ (quail-find-key1): Check character equality by quail-char-equal-p.
+ (quail-decode-map-generated): New variable.
+ (quail-find-key): Check quail-decode-map-generated and re-generate
+ a decode map if necessary.
+
+2007-01-30 Richard Stallman <rms@gnu.org>
+
+ * tutorial.el (tutorial--detailed-help): Make the list of
+ changed keys look nicer.
+
+2007-01-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-delete-1): New function.
+ (gdb-var-delete): Use it.
+ (gdb-var-update-handler-1): Handle value "invalid" for MI field
+ `in_scope'.
+
+2007-01-30 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.el (get-free-disk-space): Return nil for remote directories.
+
+ * net/ange-ftp.el (ange-ftp-ls): In case of wildcards, use "ls"
+ instead of "dir".
+
+2007-01-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * type-break.el (type-break-catch-up-event): New function.
+ (type-break-demo-hanoi, type-break-demo-life)
+ (type-break-demo-boring): Use it.
+
+ * image-mode.el (image-mode): Don't automatically view as image.
+ (image-toggle-display): Add `disabled' property.
+
+2007-01-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * isearchb.el (isearchb-iswitchb):
+ * ps-print.el (ps-build-face-reference):
+ * emacs-lisp/shadow.el (list-load-path-shadows):
+ * eshell/esh-cmd.el (eshell-rewrite-for-command):
+ * international/mule.el (find-auto-coding):
+ * mail/supercite.el (sc-attrib-selection-list):
+ * progmodes/cc-defs.el (c-emacs-features):
+ * progmodes/cc-vars.el (c-offsets-alist):
+ * progmodes/flymake.el
+ (flymake-init-create-temp-source-and-master-buffer-copy):
+ Fix typos in docstrings (some suggested by Chris Moore).
+
+ * progmodes/vhdl-mode.el (vhdl-components-package-name)
+ (vhdl-get-library-unit, vhdl-corresponding-begin)
+ (vhdl-skip-case-alternative, vhdl-backward-skip-label)
+ (vhdl-align-region-2, vhdl-electric-dash, vhdl-case-word)
+ (vhdl-hooked-abbrev, vhdl-hs-forward-sexp-func)
+ (vhdl-font-lock-match-item): Fix typos in docstrings.
+ (vhdl-get-library-unit, vhdl-get-block-state, vhdl-sort-alist)
+ (vhdl-set-offset, vhdl-fix-case-region-1, vhdl-scan-directory-contents)
+ (vhdl-speedbar-insert-project-hierarchy):
+ Improve argument/docstring consistency.
+
+2007-01-29 Kenichi Handa <handa@m17n.org>
+
+ * international/titdic-cnv.el (py-converter): Fix previous change.
+
+2007-01-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * jka-compr.el (jka-compr-partial-uncompress)
+ (jka-compr-call-process): Rebind default-directory if it is
+ invalid. Suggested by Chris Moore.
+
+ * comint.el (comint-insert-input): Handle situation where the
+ selected buffer is not the clicked buffer.
+
+2007-01-29 Kenichi Handa <handa@m17n.org>
+
+ * international/ja-dic-cnv.el (skkdic-convert):
+ Add byte-compile-disable-print-circle:t at the head.
+
+ * international/titdic-cnv.el (tit-process-header):
+ Add byte-compile-disable-print-circle:t at the head.
+ (miscdic-convert): Likewise.
+ (py-converter): Skip the header comments.
+
+ * emacs-lisp/bytecomp.el (byte-compile-disable-print-circle):
+ New variable.
+ (byte-compile-output-file-form): Bing print-circle to nil if
+ byte-compile-output-file-form is not nil.
+ (byte-compile-output-docform): Likewise.
+
+2007-01-28 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-global-keymap, cua--region-keymap):
+ Declare earlier to avoid byte compiler warnings.
+
+2007-01-28 Markus Triska <markus.triska@gmx.at>
+
+ * speedbar.el (speedbar-make-specialized-keymap): Doc fix.
+
+2007-01-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * play/gamegrid.el (gamegrid-kill-timer): Cancel timer directly.
+ (gamegrid-add-score-with-update-game-score-1): Allow local quits
+ when calling update-game-score program. Remove unnecessary
+ save-excursion.
+
+ * play/tetris.el (tetris-new-shape): Stop drawing if game is over.
+
+2007-01-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-breakpoint-regexp): Declare earlier to
+ avoid compiler warning.
+ (gdb-var-update-handler-1): Consider that the MI field `in_scope'
+ might have values other than "true" or "false".
+
+2007-01-28 Richard Stallman <rms@gnu.org>
+
+ * textmodes/fill.el (fill-paragraph-function): Doc fix.
+ (fill-paragraph): Bind fill-paragraph-function to t to avoid recursion.
+
+ * emacs-lisp/pp.el (pp-eval-last-sexp): Don't eval here.
+
+ * image.el (image-type-header-regexps): Make GIF regex more specific.
+
+ * tutorial.el (tutorial--default-keys): Check M-DEL, not `M-backspace'.
+ Don't check `backspace'.
+ (tutorial--find-changed-keys): Look up bindings in a temp buffer
+ in Fundamental mode.
+
+ * startup.el (fancy-splash-text, normal-splash-screen):
+ Mention C-g.
+
+ * simple.el (eval-expression): Don't use eval-last-sexp-print-value
+ when inserting in buffer.
+
+ * vc-arch.el (vc-arch-file-id): Move with-current-buffer
+ inside the if.
+
+2007-01-27 Richard Stallman <rms@gnu.org>
+
+ * obsolete/awk-mode.el (awk-font-lock-keywords): Add "do".
+
+2007-01-27 Guanpeng Xu <herberteuler@hotmail.com>
+
+ * add-log.el (add-log-current-defun): Skip the semicolon ``;'' for
+ enum/union/struct/class definition.
+ Revert change to call `forward-sexp' multiple times.
+
+2007-01-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (hack-local-variables-confirm): Don't keep trying to
+ read an event from an empty kbd macro.
+
+2007-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * server.el (server-start): Mention LEAVE-DEAD arg in the doc string.
+
+2007-01-27 Ben North <ben@redfrontdoor.org>
+
+ * outline.el (outline-promote, outline-demote): Doc fix. Rename
+ the arg CHILDREN -> WHICH.
+
+2007-01-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Set
+ default-directory to a sane value when calling start-process.
+
+2007-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * ls-lisp.el (ls-lisp-use-localized-time-format): New defcustom.
+ (ls-lisp-format-time-list): Doc fix. Mention
+ ls-lisp-use-localized-time-format.
+ (ls-lisp-format-time): Use ls-lisp-format-time-list if
+ ls-lisp-use-localized-time-format is non-nil, even if a valid
+ locale is defined.
+
+2007-01-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * jka-compr.el (jka-compr-shell): Doc fix.
+
+ * jka-cmpr-hook.el (jka-compr-compression-info-list): Doc fix.
+
+2007-01-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.ps: Fix background height.
+ (ps-print-version): New version 6.7.2.
+
+2007-01-26 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (finder-data, custom-deps): Depend on
+ $(lisp)/loaddefs.el.
+
+2007-01-24 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * Makefile.in (custom-deps, finder-data): Add dependency to loaddefs.el.
+
+2007-01-24 Miles Bader <miles@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-output-file-form)
+ (byte-compile-output-docform): Bind `print-circle' to t.
+
+2007-01-24 Kenichi Handa <handa@m17n.org>
+
+ * international/ja-dic-cnv.el (skkdic-convert): Insert a related
+ file name of the original SKK dictionary file.
+
+2007-01-24 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-initial-position): New variable.
+ (ido-read-internal): Set it if default item is specified.
+ (ido-minibuffer-setup): Position cursor accordingly if set.
+ (ido-edit-input): C-e moves to end of input if not already there.
+ (ido-magic-backward-char): C-b does like M-b if prev char is /.
+ Don't switch to buffer mode if repeating C-b at start of input.
+ (ido-toggle-ignore): C-a only toggles ignore at start or end of
+ input; else it moves to start of input.
+ (ido-kill-buffer-at-head, ido-delete-file-at-head): If cursor is
+ not at end of input, delete rest of input, rather than normal op.
+
+2007-01-23 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-keym.el (viper-insert-basic-map):
+ Delete binding for S-TAB.
+
+ * ediff-util.el (ediff-clone-buffer-for-region-comparison): Change text
+ of message. Activate mark.
+ (ediff-activate-mark): Set transient-mark-mode to t.
+
+ * ediff.el (ediff-regions-wordwise, ediff-regions-linewise): Doc fix.
+
+2007-01-23 Martin Rudalics <rudalics@gmx.at>
+
+ * help-fns.el (describe-variable): Don't suppress display of
+ buffer local value when the value is "large".
+
+2007-01-22 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-active): Add XEmacs test from ido-minibuffer-setup.
+ (ido-initiate-auto-merge, ido-exhibit, ido-minibuffer-setup)
+ (ido-tidy): Use ido-active.
+
+2007-01-22 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * hexl.el (hexl-mode-exit): Add missing quote.
+
+2007-01-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-keyboard-modifier-mask-alist): New constant.
+ (mac-ae-keyboard-modifiers): New function.
+ (mac-handle-toolbar-switch-mode): Use it.
+ (mac-dnd-handle-drag-n-drop-event): Likewise. Set action to `copy'
+ if keyboard modifiers on drop contain option key.
+ (mac-dnd-drop-data): Add optional argument `action'.
+ (special-event-map): Remove binding for M-drag-n-drop.
+
+2007-01-21 Guanpeng Xu <herberteuler@hotmail.com>
+
+ * add-log.el (add-log-current-defun): Use CC Mode functions to
+ find the beginning and end of a defun.
+
+2007-01-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-regexp)
+ (gdb-var-create-handler): Handle value field in GDB output of
+ -var-create.
+ (gdb-max-frames): New variable.
+ (gdb-stack-buffer, gdb-frames-select): Use it.
+ (gdb-info-stack-custom): Help user customize gdb-max-frames,
+ if necessary.
+ (gdb-get-frame-number): Simplify.
+
+2007-01-21 Glenn Morris <rgm@gnu.org>
+
+ * net/tramp.el (tramp-perl-encode, tramp-perl-decode):
+ Update copyrights.
+
+2007-01-21 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-where-wrt-brace-construct): Correct the
+ handling of K&R stuff.
+
+2007-01-21 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-files): Fix customization type.
+
+2007-01-21 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el: Handle frame parameters (background and/or foreground
+ colors) changing dynamically. Reported by Leo <sdl.web@gmail.com>.
+ (ps-print-version): New version 6.7.1.
+ (ps-x-frame-property, ps-e-frame-parameter): New aliases.
+ (ps-frame-parameter): New fun.
+ (ps-default-fg, ps-default-bg): New default value ('frame-parameter).
+ Fix doc and customization.
+ (ps-begin-job): Get frame parameters (background and/or foreground
+ colors).
+ (ps-do-despool): Ensure ps-printer-name has a valid value.
+
+2007-01-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-debug-log): Rename from gdb-debug-ring.
+ (gdb-debug-log-max): Rename from gdb-debug-ring-max.
+ (gud-gdba-marker-filter): Make a value of nil for gdb-debug-ring-max
+ mean unlimited.
+
+2007-01-20 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-in-knr-argdecl): Reformulate to do
+ much more rigorous analysis of putative K&R regions.
+
+2007-01-20 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-defs.el (c-go-list-forward, c-go-list-backward):
+ New functions.
+
+2007-01-20 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-align.el, progmodes/cc-cmds.el,
+ * progmodes/cc-defs.el, progmodes/cc-engine.el,
+ * progmodes/cc-langs.el, progmodes/cc-styles.el,
+ * progmodes/cc-vars.el: Add my name.
+
+2007-01-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (find-alternate-file): Revert query message to Emacs 21
+ version.
+
+2007-01-20 Eric Hanchrow <offby1@blarg.net> (tiny change)
+
+ * progmodes/cperl-mode.el (cperl-electric-keywords): Document in
+ the doc string how to use personal abbrevs without electric
+ keywords.
+
+2007-01-20 Alin C. Soare <alinsoar@voila.fr> (tiny change)
+
+ * emacs-lisp/lisp-mode.el (last-sexp-toggle-display):
+ Fixed cursor position when toggle abbreviated display.
+
+2007-01-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * t-mouse.el: Update copyright following assignment by
+ Alessandro Rubini.
+
+2007-01-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * type-break.el (type-break-demo-hanoi, type-break-demo-life)
+ (type-break-demo-boring): Call read-event instead of read-char.
+
+2007-01-19 Daniel Pfeiffer <occitan@esperanto.org> (tiny change)
+
+ * progmodes/compile.el: Add handling for makepplog.
+
+2007-01-19 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * textmodes/ispell.el (ispell-change-dictionary): Ensure that
+ aspell dictionaries are initialized when called non-interactively.
+
+2007-01-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-loop): New arg limit.
+ Handle case where the first error is at point-min.
+ (compilation-next-error): New arg to compilation-loop call.
+
+2007-01-18 Bruno Haible <bruno@clisp.org> (tiny change)
+
+ * info.el (Info-default-dirs): Change default info dir to
+ share/info.
+
+ * paths.el (Info-default-directory-list): Ditto.
+
+2007-01-18 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * hexl.el (hexl-before-revert-hook): New function.
+ (hexl-mode): Use it.
+ (hexl-after-revert-hook): Just call hexl-mode.
+ (hexl-mode-exit): Remove before-revert-hook.
+
+2007-01-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * isearch.el (isearch-no-upper-case-p): Look for [:upper:] as well.
+
+2007-01-16 Martin Rudalics <rudalics@gmx.at>
+
+ * textmodes/ispell.el (ispell-dictionary-alist-3): Replace "---"
+ by "-" in francais7 otherchars entry.
+ (ispell-dictionary-alist-5): Replace "." by "[.]" for polish
+ otherchars entry.
+
+2007-01-15 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-buffer-file-name): Abbreviate the bookmark
+ path. Rewrite function in `cond' style for readability.
+
+ Suggested by: Stephen Eglen <S.J.Eglen{_AT_}damtp.cam.ac.uk>.
+ (The path shortening, that is, not the rearrangement.)
+
+2007-01-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-ae-quit-application): New function.
+ (mac-apple-event-map): Bind "quit application" Apple event to it.
+
+2007-01-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-svn.el (vc-svn-parse-status): Trust the filename argument more
+ than the program's output.
+
+2007-01-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * kmacro.el (kmacro-insert-counter, kmacro-set-counter)
+ (kmacro-start-macro-or-insert-counter)
+ (kmacro-step-edit-prefix-commands): Fix typos in docstrings.
+ (kmacro-call-ring-2nd, kmacro-call-ring-2nd-repeat): Doc fixes.
+
+ * longlines.el (longlines-show-hard-newlines):
+ * ruler-mode.el (ruler-mode-ruler):
+ * emulation/keypad.el (keypad-setup):
+ * progmodes/antlr-mode.el (antlr-indent-at-bol-alist):
+ Fix typo in docstring.
+
+2007-01-13 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-cmd-rotate-original-options): Add -outfile option.
+ Remove redirect character ">".
+
+2007-01-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * replace.el (perform-replace): Remove leftover code.
+
+2007-01-12 Richard Stallman <rms@gnu.org>
+
+ * replace.el (perform-replace): Don't clear NODENT when computing
+ the replacement string.
+
+2007-01-11 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-file-local-copy):
+ Set `enable-multibyte-characters' to nil. Reported by Chris Moore
+ <christopher.ian.moore@gmail.com>.
+
+2007-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-sanity-check-context-hunk-half)
+ (diff-sanity-check-hunk): New functions.
+ (diff-find-source-location): Use'em to check the hunks are well-formed.
+
+ * hexl.el (hexlify-buffer, dehexlify-buffer): Don't complain and don't
+ activate undo when undo is not active.
+ Reported by Chris Moore <christopher.ian.moore@gmail.com>.
+
+2007-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * ffap.el (ffap-next-regexp, ffap-machine-p, ffap-newsgroup-regexp)
+ (ffap-newsgroup-p, ffap-alist, ffap-string-at-point-mode-alist)
+ (ffap-url-at-point): Use char-classes rather than "a-z".
+
+2007-01-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * ediff-init.el (ediff-autostore-merges):
+ * textmodes/fill.el (fill-region): Doc fix.
+
+2007-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * server.el (server-ensure-safe-dir): UIDs may be floats.
+
+2007-01-10 Richard Stallman <rms@gnu.org>
+
+ * battery.el (battery-linux-proc-acpi): Use ignore-errors
+ around calls to directory-files.
+
+ * subr.el (momentary-string-display): Use save-excursion.
+
+ * emacs-lisp/pp.el (pp-eval-expression): Once again eval the
+ argument, but read it as `X' does.
+
+2007-01-09 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-fontify-node): Don't hide node names of index entries.
+
+ * faces.el (momentary): Change :group to basic-faces where all
+ basic faces belong to. Add :version.
+
+2007-01-09 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * tutorial.el (tutorial--display-changes): Show M-x sequence if no
+ keybinding is found.
+ (tutorial--find-changed-keys): Never treat null keybinding as a
+ remapping.
+
+2007-01-09 Martin Rudalics <rudalics@gmx.at>
+
+ * wdired.el (wdired-xcase-word): Skip non-word read-only characters.
+
+2007-01-09 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el
+ (select-safe-coding-system-interactively): Fix message.
+
+2007-01-09 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-process-one-action): Remove `with-timeout'.
+ (tramp-process-actions): Add optional parameter TIMEOUT.
+ (tramp-open-connection-telnet, tramp-open-connection-rsh)
+ (tramp-open-connection-su): Add timeout of 60".
+
+2007-01-09 Richard Stallman <rms@gnu.org>
+
+ * progmodes/compile.el (compile): Doc fix.
+
+2007-01-09 Markus Triska <markus.triska@gmx.at>
+
+ * tumme.el (tumme-display-thumb): Doc fix.
+
+2007-01-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * battery.el (battery-search-for-one-match-in-files):
+ * bindings.el (mode-line-minor-mode-help):
+ * x-dnd.el (x-dnd-types-alist):
+ * calendar/icalendar.el (icalendar-import-buffer):
+ * term/mac-win.el (mac-dnd-types-alist): Fix typo in docstring.
+
+ * progmodes/vhdl-mode.el (vhdl-save-caches): Fix typo in error message.
+
+2007-01-07 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * replace.el (replace-regexp): Fix typo in docstring.
+
+2007-01-07 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-langs.el (c-operators, c-filter-ops):
+ Amend doc-string and comments.
+
+2007-01-06 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (abbreviate-file-name): Doc fix.
+
+2007-01-06 Markus Triska <triska@gmx.at>
+
+ * subr.el (split-string): Remove spurious ")" from doc string.
+
+2007-01-05 Takaaki Ota <Takaaki.Ota@am.sony.com>
+
+ * textmodes/table.el (table--warn-incompatibility):
+ Use display-warning instead of momentary-string-display.
+
+2007-01-05 Richard Stallman <rms@gnu.org>
+
+ * image.el (image-type-header-regexps): Recognize xbm more strictly.
+
+ * simple.el (backward-kill-word): Doc fix.
+
+2007-01-05 Romain Francoise <romain@orebokech.com>
+
+ * international/mule.el (sgml-html-meta-auto-coding-function):
+ Ensure that the buffer contains a HTML document.
+
+2007-01-05 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * faces.el (momentary): Move here ...
+ * subr.el (momentary): ... from here.
+
+2007-01-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-max-children): New customizable variable.
+ (gdb-speedbar-expand-node): Ask user for confirmation before expanding
+ large structures/arrays.
+
+2007-01-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * files.el (find-file-noselect-1, set-visited-file-name):
+ Allow backup-enable-predicate to be nil.
+
+2007-01-04 Andreas Schwab <schwab@suse.de>
+
+ * progmodes/ebrowse.el (ebrowse-global-prefix-key): Fix typo in
+ last change.
+
+2007-01-03 Richard Stallman <rms@gnu.org>
+
+ * woman.el (woman-decode-buffer): Clarify error message.
+
+2007-01-03 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-mask-paragraph): Fix yesterday's buggy patch.
+
+2007-01-03 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * tutorial.el (tutorial--describe-nonstandard-key): Fix typo.
+
+2007-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * iswitchb.el (iswitchb-global-map): Use command-remapping if available.
+
+2007-01-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * emulation/viper.el (viper-custom-file-name, viper-mode):
+ Fix typos in docstrings.
+
+ * subr.el (momentary-string-display): After moving point, set POS
+ variable to it to avoid later errors once the buffer is modified.
+ Doc fix.
+
+2007-01-02 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-cmds.el (c-mask-paragraph): In a block comment,
+ check that the "*/" is present before trying to manipulate it.
+
+2007-01-02 Richard Stallman <rms@gnu.org>
+
+ * wid-edit.el (widget-choose): Avoid ugly error for function keys.
+
+ * progmodes/cfengine.el (cfengine-font-lock-syntactic-keywords):
+ Fix format of value.
+
+ * cus-edit.el (customize-unsaved): Rename from customize-customized.
+ Change messages accordingly.
+ (customize-customized): Now alias.
+
+2007-01-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * files.el (version-control): Doc fix.
+
+2007-01-01 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax, case 5N):
+ Check the format of c-state-cache is valid for an optimisation before
+ using it.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): New case 5Q "we
+ are at a statement within a macro". Other changes so that only
+ the first continuation line in a macro gets the symbol
+ `cpp-define-intro', the others getting `statement', or whatever.
+
+ * progmodes/cc-cmds.el (c-context-line-break): When invoked within
+ a string, preserve whitespace. Add a backslash only when also in
+ a macro.
+
+ * progmodes/cc-defs.el: Correct typos.
+
+ * progmodes/cc-cmds.el (c-context-line-break): Don't indent the
+ new line after an escaped EOL in a string.
+
+ * progmodes/cc-engine.el (c-forward-label): Recognise "foo:" as a
+ label when it directly follows "else", "do", ....
+
+ * progmodes/cc-engine.el (c-backward-<>-arglist): Tolerate empty
+ angle brackets (as seen in "explicit specialisations" of C++
+ templates).
+
+ * progmodes/cc-vars.el (c-indentation-style): Mention c-file-style
+ in the doc-string.
+
+ * progmodes/cc-cmds.el (c-mask-paragraph): Fix for C comments,
+ when the comment ender looks like "=========*/" and is alone on
+ its line.
+
+ * progmodes/cc-langs.el, progmodes/cc-engine.el: Correct the
+ spelling of c-opt-op-identiTier-prefix, t -> f. Leave an alias
+ for the old name.
+
+ * progmodes/cc-mode.el: Bind C-M-a and C-M-e to
+ c-\(beginning\|end\)-of-defun by default.
+
+ * progmodes/cc-align.el (c-lineup-gnu-DEFUN-intro-cont):
+ New line-up function, for the DEFUN macro in the Emacs C sources.
+ Only used in "gnu" style.
+
+ * progmodes/cc-styles.el (c-style-alist): Use this new function in
+ the "gnu" style.
+
+ * progmodes/cc-cmds.el (c-electric-slash): Extend the handling of
+ clean-up comment-close-slash also to work when there's a comment
+ terminator on the line.
+ (c-beginning-of-defun, c-end-of-defun): Refactor and optimise
+ these for large arg - only take account of top level {..}, except
+ for initial and final adjustments. M-- C-M-[ae] now go to the
+ right defuns when the starting point is between defuns. They use
+ the four new functions:
+ (c-in-function-trailer-p, c-where-wrt-brace-construct)
+ (c-backward-to-nth-BOF-{, c-forward-to-nth-EOF-}): New functions to
+ support c-\(beginning\|end\)-of-defun.
+
+ * progmodes/cc-engine.el (c-forward-label): Analyze ":"
+ expressions more rigorously, to exclude bit-field specifiers from
+ being classed as labels.
+ (c-forward-label): When analyzing a ":" within a macro, be careful
+ about using c-forward-syntactic-ws at the macro beginning.
+ (c-beginning-of-decl-1): Whilst searching for "=" as evidence of a
+ stmt boundary, check for "operator=", etc.
+
+ * progmodes/cc-mode.el (c-postprocess-file-styles):
+ Bind inhibit-read-only to t, around the call to
+ c-remove-any-local-eval-or-mode-variables, so that it works on a
+ RO file.
+
+ * progmodes/cc-defs.el (c-version): Update the version number to
+ "5.31.4".
+
+2007-01-01 Richard Stallman <rms@gnu.org>
+
+ * isearch.el (isearch-done): Use FOUND-POINT or FOUND-START
+ only if we restored isearch-window-configuration.
+
+2006-12-31 Romain Francoise <romain@orebokech.com>
+
+ * net/tramp.el (tramp-default-method): Don't use `symbol-function'.
+
+2006-12-31 Kim F. Storm <storm@cua.dk>
+
+ * files.el (auto-mode-case-fold): New defcustom.
+ (set-auto-mode): If non-nil, perform second case-sensitive pass
+ through auto-mode-alist if first pass failed.
+
+2006-12-30 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (define-global-minor-mode): Doc fix.
+
+2006-12-30 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-encrypt-string): Handle symmetric-key
+ passphrase caching but leave keypair caching to pgg.
+
+2006-12-30 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.55.
+
+ * net/tramp.el (tramp-completion-mode): Use `wholenump' instead of
+ `integerp'. `char-equal' could fail else in case of negative
+ numbers. Reported by Toby Speight <T.M.Speight.90@cantab.net>.
+ (top): Check for `font-lock-add-keywords' before calling; it
+ doesn't exist under XEmacs.
+ (tramp-yn-prompt-regexp): Fix regexp. Add question from plink.
+ (tramp-completion-mode): Remove clause (not
+ tramp-unified-filenames), because the function is called in other
+ context too, where this check results in wrong results in the
+ XEmacs case on Windows.
+ (tramp-touch): UTC handling is not possible for XEmacs.
+
+2006-12-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * scroll-bar.el (previous-scroll-bar-mode): New variable
+ (set-scroll-bar-mode): Set previous-scroll-bar-mode.
+ (scroll-bar-mode): Use previous-scroll-bar-mode if set.
+
+ * term/x-win.el: Set scroll bar mode to right if set by X resources.
+
+2006-12-30 Richard Stallman <rms@gnu.org>
+
+ * files.el (make-backup-file-name-1): Precompute abs name
+ but don't lose the relative name.
+
+ * international/mule-cmds.el (select-safe-coding-system-interactively):
+ Fix message.
+
+2006-12-30 Kevin Rodgers <kevin.d.rodgers@gmail.com> (tiny change)
+
+ * files.el (backup-buffer): Show entire backup file name in msg.
+
+2006-12-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * image.el (image-type-header-regexps, image-type-from-data)
+ (image-type-from-buffer, image-type-from-file-header):
+ Revert changes from 2006-12-26.
+ (image-type-auto-detectable): New variable.
+ (image-type-auto-detected-p): New function.
+
+ * files.el (magic-mode-alist): Detect image files with
+ `image-type-auto-detected-p' instead of `image-type-from-buffer'.
+
+2006-12-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * dired.el (dired-sort-other): Move test for dired-mode...
+ (dired-sort-set-modeline): ...to here.
+
+2006-12-29 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * textmodes/fill.el (fill-comment-paragraph): Document 2006-12-24
+ change. Suggested by Stefan Monnier.
+
+2006-12-29 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/bindat.el (bindat--unpack-group, bindat--length-group)
+ (bindat--pack-group): Let-bind COUNT during repeat block evaluation.
+
+2006-12-27 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/authors.el (authors-aliases): Anchor FSF alias regexp,
+ so it doesn't accidentally match an fsf.org mail address.
+ (authors-renamed-files-alist): Add tcover-*.el.
+
+2006-12-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-arch.el (vc-arch-find-version): New function.
+
+ * vc-hooks.el (vc-version-backup-file-name): Revision names may be
+ composed of arbitrary characters (even /) in some systems.
+
+2006-12-27 Eli Zaretskii <eliz@gnu.org>
+
+ * international/mule-cmds.el (select-safe-coding-system-interactively):
+ Improve the message in the *Warning* buffer.
+
+2006-12-27 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-set-matches-1): Fix last change. If default item is
+ current buffer, it is ok to be first.
+
+2006-12-27 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-safe-coding-system-interactively):
+ Use face `link' for problematic chars.
+
+2006-12-27 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-safe-coding-system-interactively):
+ Improve the message in *Warning* buffer.
+
+2006-12-27 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-set-matches-1): Never put current buffer first if
+ there are other matches.
+
+2006-12-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gud-watch): Allow duplicate names for watch
+ expressions.
+ (gdb-var-delete): Handle duplicate names. Print message for non
+ root expressions.
+ (gdb-partial-output-name): Start buffer name with a space.
+ (gdb-info-breakpoints-custom, gdb-reset): Handle space in above
+ buffer name.
+
+2006-12-26 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * mail/footnote.el (Footnote-insert-footnote): Fix the search of the
+ last footnote when `footnote-spaced-footnotes' is nil.
+
+2006-12-26 Richard Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-browse-sort-alphabetically)
+ (custom-buffer-sort-alphabetically)
+ (custom-menu-sort-alphabetically): Doc fixes. Add autoloads.
+
+ * image.el (image-type-header-regexps): Change element format
+ to include third item NOT-ALWAYS.
+ (image-type-from-data): Handle new format.
+ (image-type-from-buffer): Handle new format. New arg INCLUDE-MAYBES.
+ (image-type-from-file-header): Pass t for INCLUDE-MAYBES.
+
+2006-12-26 Guanpeng Xu <herberteuler@hotmail.com>
+
+ * add-log.el (add-log-current-defun): Call `forward-sexp'
+ multiple times to pick a member function name defined as
+ part of nested classes/namespaces.
+
+2006-12-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * emacs-lisp/easymenu.el (easy-menu-change): New arg MAP to indicate
+ which keymap should be used to change menu. It does not affect any
+ existent code.
+
+2006-12-26 Richard Stallman <rms@gnu.org>
+
+ * textmodes/fill.el (fill-paragraph): Check for a minibuffer
+ rather than for being in a minibuffer window.
+
+2006-12-25 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-def.el (pgg-passphrase-coding-system): Default to nil instead of
+ locale-coding-system.
+ * pgg-gpg.el (pgg-gpg-process-region): Encode passphrase with eol-type
+ LF.
+
+2006-12-25 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el (sql-mode-abbrev-table): Correct initialization.
+ (sql-mode-syntax-table): Disable double quoted strings.
+ (sql-mode-font-lock-object-name): Add TYPE and TYPE BODY.
+
+2006-12-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * startup.el (fancy-splash-last-input-event): New variable.
+ (fancy-splash-special-event-action): New function.
+ (fancy-splash-screens): Temporarily bind special events to it.
+ Execute command for saved special event before exiting from
+ recursive editing.
+
+ * term/mac-win.el (mac-keyboard-translate-char, mac-unread-string):
+ New functions.
+ (mac-ts-update-active-input-area, mac-ts-unicode-for-key-event):
+ Use mac-unread-string.
+
+2006-12-24 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * textmodes/fill.el (fill-comment-paragraph): Prevent the use of
+ an optimized comment regexp if `comment-start-skip' uses a ^.
+ * bs.el (bs--up): Remove interactive spec.
+
+2006-12-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * woman.el (woman-decode-buffer): Signal error for alien macro sets.
+ Suggested by James Cloos.
+
+2006-12-24 Kevin Ryde <user42@zip.com.au>
+
+ * calendar/cal-dst.el (calendar-dst-starts): Default to second Sunday
+ in March.
+ (calendar-dst-ends): Default to first Sunday in November.
+
+2006-12-24 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-encrypt-string): Inhibit use of agent within
+ body of let form where encryption happens. Acknowledge non-use of
+ gpg-agent in docstring.
+ (allout-toggle-subtree-encryption): Acknowledge non-use of
+ gpg-agent in docstring.
+
+2006-12-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (custom-add-frequent-value): Alias for custom-add-option.
+
+2006-12-23 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-diff.el (ediff-diff-options): Clarify docstring.
+ (ediff-setup-diff-regions): Disallow -u in ediff-diff-options.
+
+ * emulation/viper-cmd.el (viper-post-command-sentinel):
+ Protect against errors in hooks.
+ (viper-add-newline-at-eob-if-necessary): Add newline only if we
+ actually modify buffer; ignore errors if occur.
+
+2006-12-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * calendar/calendar.el (calendar-mode-map): Switch < and >.
+ (calendar-mode-line-format): Use mouse-1 bindings, and tweak
+ formatting.
+
+2006-12-23 Richard Stallman <rms@gnu.org>
+
+ * simple.el (delete-horizontal-space): Doc fix.
+
+2006-12-23 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (bootstrap-clean): Run bootstrap-clean-$(SHELLTYPE)
+ explicitly in a recursive Make, not implicitly through prerequisites,
+ since the latter is wrong under parallel builds.
+
+2006-12-22 Eli Zaretskii <eliz@gnu.org>
+
+ * w32-fns.el (convert-standard-filename): Wrap in save-match-data.
+
+2006-12-22 Kevin Rodgers <kevin.d.rodgers@gmail.com> (tiny change)
+
+ * progmodes/sh-script.el (sh-make-vars-local): Fix a typo in
+ message string.
+
+2006-12-22 Ben North <ben@redfrontdoor.org> (tiny change)
+
+ * outline.el (outline-next-visible-heading): Fix the case with a
+ header at end-of-file with no final newline.
+
+2006-12-22 Robert Thorpe <rthorpe@realworldtech.com> (tiny change)
+
+ * indent.el (tab-always-indent): Doc fix.
+
+2006-12-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-fontify-maximum-menu-size): Bump to 1000000.
+ (Info-fontify-node): Do fontify indices.
+
+ * tutorial.el (tutorial--detailed-help): Remove unnecessary link
+ to the Emacs Lisp reference manual.
+ (tutorial--tab-map): Remove. All callers changed.
+ (tutorial--find-changed-keys): New elt QUIET, used to...
+ (tutorial--display-changes): ...ensure that warning messages are
+ only issued once per changed key.
+ (tutorial--remove-remarks): Delete unused code-path.
+ (lang-strings): Remove extraneous formatting.
+ (tutorial--save-tutorial): Prompt before saving tutorial state.
+
+2006-12-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * tutorial.el: Remove `cl' requirement. Clean up whitespace.
+ Replace '?\ ' by '?\s' throughout.
+ (tutorial-warning-face): Inherit font-lock-warning-face. Move to
+ `help' custom group.
+ (tutorial--key-description): New function.
+ (tutorial--display-changes): Remove redundant arg. Scan for all
+ key sequences to avoid false matches. Cleanup.
+ (tutorial--saved-dir): Save to a subdirectory in .emacs.d to
+ reduce homedir pollution.
+ (help-with-tutorial): Call tutorial--display-changes with no arg.
+
+2006-12-21 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode-map): Bind org-complete also to M-\t.
+
+2006-12-20 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-default-method): We still need to check for
+ `executable-find', because it is not bound under Emacs 20.
+ (tramp-handle-file-name-completion)
+ (tramp-completion-handle-file-name-completion): Handle optional
+ parameter PREDICATE.
+ (tramp-find-default-method): Add code for default values.
+
+2006-12-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-stopped): After attaching to a process
+ make gud-go send "continue".
+
+2006-12-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * image.el (image-type-header-regexps): Be more specific detecting `pbm'
+ and `png' files. Use non-capturing parenthesis for `tiff' regexp.
+
+2006-12-19 Kim F. Storm <storm@cua.dk>
+
+ * bindings.el: Bind sigusr1 and sigusr2 in special-event-map
+ instead of global-map.
+
+ * files.el (magic-mode-alist): Allow matching file type by
+ calling a function at bob. Check for image types by calling
+ image-type-from-buffer. Suggested by Juanma Barranquero.
+ (set-auto-mode): Do it.
+
+2006-12-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-methods): Introduce new method `scpc'.
+ Remove "ControlMaster" option from the other `scp*' methods.
+ (tramp-default-method): Check for ssh-agent before setting to `scp'.
+
+2006-12-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode): Show context after isearch.
+ (org-show-siblings): New function.
+ (org-show-context): Use `org-show-siblings'.
+
+2006-12-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/syntax.el (syntax-ppss-flush-cache, syntax-ppss):
+ Use syntax-ppss-toplevel-pos.
+
+2006-12-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-current-line): Make sure that lines are
+ counted from beginning of buffer.
+ (org-table-copy-region, org-table-paste-rectangle): Make sure that
+ lines are counted from beginning of buffer.
+
+2006-12-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-build-node-completions): Signal error if tag-table
+ marker is not found.
+
+ * pgg-gpg.el (pgg-gpg-use-agent): Default to t.
+
+2006-12-17 Alan Mackenzie <acm@muc.de>
+
+ * emacs-lisp/lisp.el (beginning-of-defun-raw): Optimise (for
+ speed) the case when open-paren-in-column-0-is-defun-start is nil.
+ Based on code by Martin Rudalics.
+
+ * progmodes/cc-mode.el (c-basic-common-init): Don't set
+ open-paren-in-column-0-is-defun-start to nil any more.
+
+2006-12-17 Richard Stallman <rms@gnu.org>
+
+ * simple.el (delete-horizontal-space): Use prefix arg.
+
+ * help-fns.el (describe-variable): Improve blank separator lines.
+
+ * files.el (magic-mode-alist): Mark as risky.
+
+ * files.el (make-backup-file-name-1):
+ Expand backup-directory explicitly.
+
+2006-12-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-default-method): Before setting to "pscp",
+ check whether package password.el is loaded, or Pageant is running.
+
+2006-12-17 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar-version): Increase to "0.14".
+ (icalendar--rris): First try Emacs, then XEmacs.
+ (icalendar--convert-ical-to-diary): Doc fix.
+ Insert newline at end of target file.
+
+2006-12-17 Kim F. Storm <storm@cua.dk>
+
+ * outline.el (outline-isearch-open-invisible-function): New defvar.
+ (outline-flag-region): Use it if non-nil for isearch-open-invisible
+ overlay property instead of outline-isearch-open-invisible.
+
+2006-12-16 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-completion-help): Build ido-cur-list and ido-matches
+ if ido-directory-too-big is set on entry.
+ (ido-toggle-ignore, ido-completion-help): Print message while
+ reading big directory.
+
+2006-12-15 Richard Stallman <rms@gnu.org>
+
+ * shell.el (shell): Doc fix.
+
+2006-12-15 Kevin Gallagher <Kevin.Gallagher@boeing.com>
+
+ * emulation/edt.el (edt-xserver):
+ * emulation/edt-mapper.el (edt-xserver): Replace `/' with a `-',
+ to fix a problem on Cygwin.
+
+ * emulation/edt.el
+ * emulation/edt-mapper.el
+ * emulation/edt-lk201.el
+ * emulation/edt-pc.el
+ * emulation/edt-vt100.el: Update maintainer's email address.
+
+2006-12-15 Simon Marshall <simon@gnu.org>
+
+ * progmodes/cc-fonts.el (c-font-lock-declarations): Fix previous change.
+
+2006-12-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-atsu-font-table): Remove defvar.
+ (mac-handle-font-selection): Use mac-atsu-font-face-attributes
+ instead of mac-atsu-font-table.
+ (fontset-default): Specify argument MAXIMUM in x-list-fonts calls.
+
+2006-12-14 Stephen Leake <stephen_leake@member.fsf.org>
+
+ * align.el (align-match-tex-pattern): Fix a rare bug which
+ hanged Emacs.
+
+2006-12-14 Richard Stallman <rms@gnu.org>
+
+ * startup.el (use-fancy-splash-screens-p): Use frame-height
+ instead of window-height. Pass frame to image-size.
+
+2006-12-13 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (set-locale-environment):
+ Set default-sendmail-coding-system too.
+
+2006-12-12 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlw-help.el: Fix copyright notice.
+
+2006-12-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/syntax.el (syntax-ppss-toplevel-pos): New fun.
+
+2006-12-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (unread-command-char): Reformat obsolescence info.
+
+2006-12-11 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/cl-macs.el (defstruct): Suppress warnings
+ about calls to cl-struct-setf-expander.
+
+2006-12-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * ediff-merg.el (ediff-show-clashes-only): Doc fix.
+ (ediff-combination-pattern): Fix typo in docstring.
+
+ * textmodes/refer.el (refer-find-entry): Doc fix.
+ (refer-bib-files-regexp, refer-bib-directory, refer-bib-files)
+ (refer-cache-bib-files, refer-find-next-entry, refer-yank-key):
+ Fix tipos in docstrings.
+
+ * progmodes/idlwave.el (idlwave-library-path): Fix typos in docstring.
+
+2006-12-10 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-init-completion-maps): Remap backward-kill-word
+ instead of binding M-backspace.
+
+2006-12-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * replace.el (replace-match-data, replace-match-maybe-edit):
+ * calc/calc-aent.el (calc-eval-error):
+ * emulation/vi.el (vi-char-argument):
+ * progmodes/cc-langs.el (c-at-vsemi-p-fn)
+ (c-vsemi-status-unknown-p-fn): Doc fixes.
+
+2006-12-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * menu-bar.el (menu-bar-showhide-menu, menu-bar-tools-menu)
+ (menu-bar-help-menu): Tooltip fixes. Suggested by Francis Wright.
+
+2006-12-10 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/ld-script.el (ld-script-keywords): Fix a typo.
+
+2006-12-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse-sel.el (mouse-sel-mode): Register mouse-2 as a click type.
+
+ * man.el (Man-xref-button-action): New function. If the
+ `Man-target-string' button property is a function, assume it
+ accepts a position argument.
+ (Man-abstract-xref-man-page): Use it.
+ (Man-default-man-entry): New optional arg POS.
+
+ * wdired.el (wdired-preprocess-symlinks): Make the spaces after
+ symlink arrows read-only and non-rear-sticky.
+
+2006-12-09 Martin Rudalics <rudalics@gmx.at>
+
+ * wdired.el (wdired-change-to-wdired-mode, wdired-finish-edit)
+ (wdired-search-and-rename): Simplify code.
+ (wdired-preprocess-files, wdired-preprocess-perms): Make
+ read-only property of preceding character rear-nonsticky to
+ avoid that it can be modified. Put old-name and old-link
+ properties on character preceding name and replace
+ put-text-property by add-text-properties.
+ (wdired-get-filename, wdired-get-previous-link): Get old-name
+ and old-link properties from character preceding name and
+ simplify code.
+ (wdired-preprocess-perms, wdired-set-bit, wdired-toggle-bit)
+ (wdired-perms-to-number): Make local-map property
+ rear-nonsticky to avoid that text following permissions may be
+ modified. Use add-text-properties instead of put-text-property
+ when changing a permission bit.
+ (wdired-change-to-dired-mode): Remove stickiness properties.
+
+2006-12-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * international/mule-cmds.el (register-input-method): Doc fix.
+
+2006-12-09 Masayuki Ataka <masayuki.ataka@gmail.com> (tiny change)
+
+ * cmuscheme.el (scheme-start-file): Use `let*', not `let'.
+
+2006-12-09 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * textmodes/flyspell.el (flyspell-hack-local-variables-hook): New.
+ Force buffer local defs evaluation on local variables loading.
+ (flyspell-mode-on, flyspell-mode-off): Use it in
+ `hack-local-variables-hook'.
+
+2006-12-09 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-lisp/find-func.el (find-variable): Doc fix.
+
+ * help-fns.el (variable-at-point): Doc fix.
+
+ * w32-fns.el (w32-append-code-lines): New function.
+
+2006-12-09 Romain Francoise <romain@orebokech.com>
+
+ * comint.el (comint-insert-input): Delete obsolete comment.
+
+2006-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/browse-url.el (browse-url): Set DISPLAY to the one of the
+ current frame, in case we're connected to several displays.
+
+2006-12-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * frame.el (other-frame): Doc fix.
+ (set-frame-parameter): Fix typo in docstring.
+
+2006-12-07 Kim F. Storm <storm@cua.dk>
+
+ * info.el (Info-index): Strip leading colon from topic.
+
+2006-12-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons): Deal with references
+ to pointers.
+
+2006-12-05 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlwave.el (idlwave-xml-create-class-method-lists):
+ Trim out spurious class inheritance "None" entries.
+
+2006-12-05 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-paste-pop-rotate-temporarily): Doc fix.
+ (cua-paste-pop): Rework last change for
+ cua-paste-pop-rotate-temporarily, so first M-y and C-y works alike,
+ pasting the head of the kill-ring, and prefix arg C-u M-y inserts the
+ text inserted by the last M-y command.
+
+2006-12-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * cmuscheme.el (run-scheme, scheme-start-file): Search the start
+ file in ~/.emacs.d as `init_SCHEMENAME.scm' instead.
+
+ * shell.el (shell): Search the start file in ~/.emacs.d as
+ `init_SHELLNAME.sh' instead.
+
+2006-12-05 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/cperl-mode.el (cperl-mode)
+ * progmodes/f90.el (f90-mode-abbrev-table)
+ * progmodes/fortran.el (fortran-mode-abbrev-table)
+ * progmodes/octave-mod.el (octave-abbrev-table)
+ * progmodes/sql.el (sql-mode-abbrev-table): Define abbrevs even
+ if abbrev-table is non-nil (saved user abbrevs may have been restored).
+
+ * progmodes/vhdl-mode.el (vhdl-mode-abbrev-table-init): Do not
+ clear abbrev table, else saved abbrevs will not be restored.
+
+2006-12-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * facemenu.el (facemenu-unlisted-faces): Put obsolescence info in
+ the call to `make-obsolete-variable', not in the docstring.
+
+2006-12-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * facemenu.el (facemenu-unlisted-faces): Define as obsolete variable.
+
+2006-12-04 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * progmodes/ebnf-abn.el:
+ * progmodes/ebnf-bnf.el:
+ * progmodes/ebnf-dtd.el:
+ * progmodes/ebnf-ebx.el:
+ * progmodes/ebnf-iso.el:
+ * progmodes/ebnf-otz.el:
+ * progmodes/ebnf-yac.el:
+ * progmodes/ebnf2ps.el:
+ * delim-col.el:
+ * printing.el:
+ * ps-bdf.el:
+ * ps-mule.el:
+ * ps-print.el: Remove 'Time-stamp' comment mark.
+
+ * printing.el (pr-menu-bind): Replace 'easy-menu-change' by
+ 'easy-menu-add-item' when called in Emacs 21 or higher.
+
+2006-12-04 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-xref.el (ada-check-current): Doc fix.
+ (ada-make-body-gnatstub): Doc fix. Remove redundant `progn'.
+
+2006-12-04 Kim F. Storm <storm@cua.dk>
+
+ * bindings.el (global-map): Bind [signal t] to ignore, to have
+ user signals ignored by default.
+
+2006-12-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * descr-text.el (describe-char-unicode-data): Use a hidden buffer for
+ Unicode data file pointed to by `describe-char-unicodedata-file'.
+
+2006-12-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/sgml-mode.el (sgml-font-lock-keywords-1): Fix pathological
+ O(n^2) regexp-search by anchoring the search.
+
+2006-12-04 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * whitespace.el (whitespace-cleanup-internal): Use current
+ argument for recursive call.
+
+2006-12-04 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-methods): Add "ControlPath" and
+ "ControlMaster" to scp, scp1 and scp2 methods. Suggested by
+ Andreas Schwab <schwab@suse.de>.
+ (tramp-do-copy-or-rename-file-out-of-band)
+ (tramp-open-connection-rsh): Compute format spec for ?t.
+ (tramp-process-actions): Trace command parameters.
+
+2006-12-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * simple.el (toggle-truncate-lines): Clarify doc string.
+
+ * progmodes/gdb-ui.el (gdb-var-delete-children): New function.
+ (gdb-speedbar-expand-node): Use it.
+
+2006-12-04 Richard Stallman <rms@gnu.org>
+
+ * progmodes/python.el (python-indent): Add safe-local-variable prop.
+
+ * dired.el (dired-revert): Turn off dired-after-readin-hook
+ around call to dired-readin.
+
+ * menu-bar.el (menu-bar-make-toggle): Add "globally"
+ to echo area messages.
+ <indicate-empty-lines, case-fold-search>:
+ Add "globally" to Help string.
+ <case-fold-search>: MESSAGE arg need not say "globally".
+ (menu-bar-edit-menu <paste-from-menu>): Rename from select-and-paste.
+
+2006-12-03 Liam Healy <lnp@healy.washington.dc.us> (tiny change)
+
+ * outline.el (outline-end-of-subtree): Don't leave an empty
+ line hidden as we would a real next heading.
+
+2006-12-03 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-ascend): Add an optional argument to preserve
+ original position of point when unsuccessful. Also, fix a
+ docstring error.
+ (allout-yank-processing): Fix depth shift of multiple-topic so yanks
+ work again, using allout-ascend's new option.
+ (allout-setup-mode-map): Extract from allout-mode to initialize
+ allout-mode-map. Call it on file load, so the mode docstring
+ substitutions work even if allout mode has not yet been invoked.
+ (allout-mode): Use new allout-setup-mode-map to track any keybinding
+ customizations since the map was last processed. Also, refine the
+ docstring so it's ship-shape for release.
+ (allout-default-layout, allout-beginning-of-line-cycles)
+ (allout-distinctive-bullets-string, allout-use-mode-specific-leader)
+ (allout-encrypt-unencrypted-on-saves, allout-inhibit-auto-fill)
+ (allout-version, allout-layout, allout-infer-body-reindent)
+ (allout-infer-header-lead-and-primary-bullet, allout-view-change-hook)
+ (allout-init, allout-mode, allout-next-heading, allout-chart-subtree)
+ (allout-previous-heading, allout-goto-prefix-doublechecked)
+ (allout-current-bullet-pos, allout-next-sibling-leap)
+ (allout-pre-command-business, allout-encrypted-type-prefix)
+ (allout-make-topic-prefix, allout-open-topic, allout-rebullet-heading)
+ (allout-rebullet-topic, allout-rebullet-topic-grunt)
+ (allout-flag-region, allout-expose-topic, allout-expose-topic)
+ (allout-old-expose-topic, allout-listify-exposed)
+ (allout-process-exposed, allout-latex-verb-quote)
+ (allout-latex-verbatim-quote-curr-line, allout-adjust-file-variable)
+ (allout-toggle-current-subtree-encryption)
+ (allout-toggle-subtree-encryption, allout-bullet-isearch):
+ Remove extraneous open-paren and close paren string escapes.
+
+2006-12-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/ada-xref.el (is-windows, ada-find-in-src-path): Doc fixes.
+ (ada-xref-pos-ring-max, ada-xref-project-files, ada-xref-initialize)
+ (ada-prj-default-comp-cmd, ada-quote-cmd, ada-compile-current):
+ Fix typos in docstrings.
+
+2006-12-03 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/cc-align.el
+ * progmodes/cc-awk.el
+ * progmodes/cc-cmds.el
+ * progmodes/cc-compat.el
+ * progmodes/cc-defs.el
+ * progmodes/cc-engine.el
+ * progmodes/cc-langs.el
+ * progmodes/cc-menus.el
+ * progmodes/cc-mode.el
+ * progmodes/cc-styles.el
+ * progmodes/cc-vars.el
+ * progmodes/vhdl-mode.el: Fix Copyright format.
+
+2006-12-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-drag-track): Suppress automatic hscrolling for
+ initial down event.
+
+2006-12-02 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-toggle-set-mark): Doc fix.
+ (cua-repeat-replace-region): Make M-v more robust.
+ (cua-paste-pop-rotate-temporarily): New defcustom.
+ (cua-paste-pop): Use it.
+ (cua-auto-mark-last-change): New defcustom.
+ (cua-pop-to-last-change): New helper function.
+ (cua-set-mark): Use them.
+
+2006-12-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * menu-bar.el (toggle-case-fold-search): Clarify doc/help string and
+ mini-buffer message.
+
+2006-12-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * descr-text.el (describe-char-unicodedata-file): Fix typo in docstring.
+
+2006-12-01 Ben North <ben@redfrontdoor.org>
+
+ * paren.el: Fix the highlight overlay extension when the user types a
+ sequence of char very fast just before the open parenthesis.
+
+2006-12-01 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-mule.el: Eliminate Emacs 20 compatibility.
+
+ * ps-print.el: Eliminate Emacs 20 & 21 compatibility.
+ (ps-print-version): New version 6.7.
+ (ps-print-quote): Replace '?\ ' by '?\s'.
+
+2006-11-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * hexl.el (hexl-goto-address, hexl-forward-char, hexl-forward-short)
+ (hexl-forward-word, hexl-previous-line, hexl-beginning-of-1k-page)
+ (hexl-end-of-1k-page): Doc fixes.
+ (hexl-address-region, hexl-ascii-region, hexl-highlight-line-range):
+ Fix typos in docstrings.
+
+2006-11-30 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * ido.el (ido-local-file-exists-p): New. Tell if a file exists
+ locally, i.e. without using file name handlers.
+ (ido-read-internal): Allow mono letter host names, avoiding the
+ `c:' problem by testing if the file exists locally.
+ (ido-complete, ido-make-file-list, ido-exhibit): Ditto.
+
+2006-11-30 Masatake YAMATO <jet@gyve.org>
+
+ * hexl.el (hl-line-range-function, hl-line-face): Declare variables
+ to avoid bytecomp warnings.
+ (hexl-mode-old-ruler-function): New variable.
+ (hexl-follow-line): Bind `hexl-mode-old-hl-line-range-function'
+ and `hl-line-range-function' after `require' hl-line.
+ Then bind `hl-line-range-function' and `hl-line-face'.
+ Don't require frame. Don't use `with-no-warnings'.
+ (hexl-activate-ruler): Store the original value of
+ `ruler-mode-ruler-function' to `hexl-mode-old-ruler-function'.
+ (hexl-mode-exit): Restore the original value of
+ `ruler-mode-ruler-function'.
+
+2006-11-30 Alin C. Soare <alinsoar@voila.fr> (tiny change)
+
+ * hexl.el (hexl-mode-old-hl-line-range-function): New variable.
+ (hexl-mode-old-hl-line-face): New variable.
+ (hexl-mode, hexl-mode-exit): Fix the highlighting of the current
+ line when exit from the hexl-mode.
+
+2006-11-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/bytecomp.el (byte-optimize, byte-compile-warnings):
+ Doc fixes.
+
+ * international/fontset.el (create-fontset-from-ascii-font)
+ (create-fontset-from-fontset-spec, x-compose-font-name): Doc fixes.
+ (fontset-name-p): Fix typo in docstring.
+
+ * progmodes/cc-cmds.el (c-indent-exp): Fix typo in docstring.
+
+2006-11-30 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-bdf.el: Fix maintainer email.
+
+ * ps-mule.el: Fix maintainer email. Define functions for Emacs 20
+ compatibility.
+
+ * ps-print.el: Fix maintainer email. Define functions for Emacs 20 &
+ 21 compatibility.
+ (ps-print-quote): Replace '?\s' by '?\ ' to keep compatibility with
+ Emacs 20 & 21.
+
+2006-11-29 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlwave.el (idlwave-auto-fill):
+ Remove paragraph-start let to prevent auto-fill giving up.
+
+2006-11-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * vt100-led.el (led-state): Fix typo in previous change.
+
+2006-11-27 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation):
+ Fix interactive spec of the functions getting defined to make them
+ work as documented.
+
+2006-11-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (fancy-splash-screens): Hide initial splash buffer.
+
+2006-11-28 Kim F. Storm <storm@cua.dk>
+
+ * icomplete.el (icomplete-tidy, icomplete-exhibit): Check that
+ icomplete-mode is enabled.
+
+2006-11-28 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (require): Require gnus-sum during compilation
+ to avoid problem with a macro call.
+
+2006-11-28 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/authors.el (authors-aliases): Add new alias.
+
+ * progmodes/fortran.el (fortran-font-lock-keywords-4): Add `min'.
+ (fortran-window-create-momentarily): Do not need string-to-char.
+
+2006-11-28 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-get-constant):
+ Replace incorrect use of assoc-default with a loop.
+
+ * term.el (term-exec-1): Set envvar INSIDE_EMACS.
+
+ * simple.el (next-error-find-buffer): Improve messages.
+
+ * files.el (revert-buffer): Special error message if file
+ is now not readable.
+
+ * facemenu.el (facemenu-add-new-face): Improve doc strings of
+ constructed commands.
+
+ * comint.el (comint-exec-1): Provide Emacs version and `comint'
+ in INSIDE_EMACS.
+
+2006-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-mode-map): Add a binding for unified->context.
+
+ * server.el: Remove spurious * in docstrings.
+ (server-process-filter): Exit from recursive editing before processing
+ a new request.
+
+2006-11-27 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/hideshow.el (hs-already-hidden-p): Move to end of
+ line so hidden blocks will be correctly identified.
+
+2006-11-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * ledit.el (ledit-save-defun, ledit-mode):
+ * resume.el (resume-emacs-args-buffer):
+ * rot13.el (rot13-display-table, rot13-translate-table, rot13)
+ (rot13-string, rot13-region, rot13-other-window, toggle-rot13-mode):
+ * vmsproc.el (subprocess-input, start-subprocess, subprocess-command)
+ (command-send-input, command-kill-line):
+ * vt100-led.el (led-state, led-on): Fix typos in docstrings.
+
+ * autoarg.el (autoarg-kp-mode): Doc fix.
+
+ * emacs-lock.el (toggle-emacs-lock): Doc fix. Simplify.
+ (emacs-lock-check-buffer-lock): Doc fix. Use `when'.
+ (check-emacs-lock): Doc fix. Simplify.
+
+ * iimage.el (iimage-mode-image-regex-alist): Doc fix.
+ (iimage-mode-buffer): Fix typos in docstring.
+
+ * misc.el (zap-up-to-char): Doc fix.
+
+ * time-stamp.el: Fix comment and obsolescence string for old
+ functions. Use `dolist' instead of `while'.
+
+ * userlock.el (ask-user-about-lock-help): Fix typos in output message.
+
+ * disp-table.el (standard-display-8bit, standard-display-default):
+ * ebuff-menu.el (electric-buffer-list):
+ * ehelp.el (electric-help-command-loop):
+ * font-core.el (font-lock-mode):
+ * help-macro.el (make-help-screen):
+ * help.el (describe-minor-mode-completion-table-for-indicator)
+ (lookup-minor-mode-from-indicator):
+ * indent.el (tab-to-tab-stop, move-to-tab-stop):
+ * info-look.el (info-lookup-guess-custom-symbol):
+ * locate.el (locate-main-listing-line-p, locate-mode, locate-do-setup):
+ * longlines.el (longlines-wrap-line):
+ * macros.el (insert-kbd-macro):
+ * menu-bar.el (menu-bar-update-buffers):
+ * misc.el (copy-from-above-command):
+ * mouse.el (mouse-popup-menubar, mouse-buffer-menu-alist):
+ * newcomment.el (comment-indent):
+ * novice.el (disabled-command-function):
+ * sort.el (sort-fields-syntax-table):
+ * subr.el (momentary-string-display):
+ * tar-mode.el (tar-header-block-summarize)
+ (tar-clear-modification-flags):
+ * terminal.el (terminal-cease-edit, te-more-break-unwind, te-newline)
+ (te-clear-rest-of-line, te-clear-rest-of-screen, te-clear-screen)
+ (te-insert-lines, te-delete-lines, te-delete, te-insert-spaces)
+ (te-delete-char, te-down-vertically-or-scroll):
+ * time-stamp.el (time-stamp-string-preprocess):
+ * tmm.el (tmm-add-one-shortcut): "?\ " -> "?\s".
+
+2006-11-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-timer-fn): Revert to old behaviour when not
+ in GUD mode.
+
+ * progmodes/gud.el (gud-install-speedbar-variables): Remove bindings:
+ speedbar-expand-line-descendants, speedbar-contract-line-descendants.
+
+2006-11-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * progmodes/cc-vars.el (c-backslash-column): Add . at end of sentence.
+
+2006-11-26 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-mode.el (ada-which-compiler): Fix typo in docstring.
+ (ada-compile-goto-error): Adapt to new argument profile of
+ compilation-goto-locus in Emacs 22. Don't check if the various
+ compile functions are defined; we already do "(require 'compile)".
+
+2006-11-26 Kim F. Storm <storm@cua.dk>
+
+ * kmacro.el: Fix commentary.
+
+2006-11-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): Explain how to run in text command mode
+ more clearly. Say in error message that multiple debugging
+ requires restarting GDB.
+
+2006-11-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * international/fontset.el (create-fontset-from-fontset-spec): Doc fix.
+
+2006-11-25 Pavel Kobiakov <pk_at_work@yahoo.com>
+
+ * progmodes/flymake.el (flymake-posn-at-point-as-event): New function.
+ (flymake-popup-menu): Use it instead of posn-at-point.
+
+2006-11-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * progmodes/cc-vars.el (c-backslash-column):
+ Mention c-backslash-max-column in documentation for c-backslash-column.
+
+2006-11-24 Lars Hansen <larsh@soem.dk>
+
+ * net/tramp.el (tramp-default-method): Under Windows, change from
+ plink to pscp.
+ (tramp-copy-failed-regexp, tramp-action-copy-failed): Add.
+ (tramp-actions-copy-out-of-band):
+ Add pair (tramp-copy-failed-regexp tramp-action-copy-failed).
+ (tramp-action-out-of-band): Move "Permission denied" handling to
+ tramp-action-copy-failed.
+ (tramp-do-copy-or-rename-file-out-of-band): unwind-protect killing of
+ process buffer.
+
+2006-11-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pgg-pgp.el (pgg-pgp-process-region): Change `args' from a list of
+ strings to a single string. Quote `errors-file-name'.
+ (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region, pgg-pgp-sign-region)
+ (pgg-pgp-verify-region, pgg-pgp-insert-key, pgg-pgp-snarf-keys-region):
+ Adjust calls. Use `shell-quote-argument'.
+
+ * international/mule.el (load-with-code-conversion)
+ (with-category-table): Use with-current-buffer.
+ (after-insert-file-set-coding): Use restore-buffer-modified-p.
+
+2006-11-24 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/smtpmail.el (smtpmail-send-it):
+ Copy buffer-file-coding-system from the mail buffer. Possibly add a
+ MIME header for the message encoding.
+ Bind coding-system-for-write around the call to mail-do-fcc.
+ Use smtpmail-code-conv-from to encode queued mail messages.
+
+2006-11-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * tabify.el (tabify-regexp): Doc fix.
+
+ * net/rcirc.el (rcirc-buffer-maximum-lines):
+ * progmodes/gud.el (jdb): Fix space/tab mixup in docstrings.
+
+ * play/gomoku.el (gomoku-terminate-game, gomoku-human-takes-back)
+ (gomoku-prompt-for-move, gomoku-human-plays, gomoku-offer-a-draw):
+ Fix typos in output messages.
+ (gomoku-vector-length, gomoku-init-board): Fix typos in docstrings.
+
+2006-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * hexl.el (hexl-mode): Don't try to guess the max-address: get it from
+ the horse's mouth.
+ (hexlify-buffer): Don't re-encode an arg that's already encoded.
+
+2006-11-23 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-diff.el (ediff-exec-process, ediff-same-file-contents):
+ Remove condition-case.
+
+2006-11-23 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/f90.el (f90-comment-indent): Do not move point in
+ default case.
+
+2006-11-21 Romain Francoise <romain@orebokech.com>
+
+ * emacs-lisp/find-func.el (find-library-name): Don't strip ".el"
+ from library name (reverts change of 2005-10-25).
+
+2006-11-21 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * tutorial.el (tutorial--default-keys): Add newline and
+ delete-backward-char bindings.
+ (tutorial--detailed-help): Save excursion when finding keys.
+ Correct warning string for M-x FOO case.
+ (tutorial--display-changes): Print special keys in tutorial style.
+ Tweak search regexp for changed keys.
+
+2006-11-21 Bob Rogers <rogers-emacs@rgrjr.dyndns.org> (tiny change)
+
+ * thingatpt.el (thing-at-point-url-at-point): Don't add a
+ redundant scheme.
+
+2006-11-21 Diane Murray <disumu@x3y2z1.net> (tiny change)
+
+ * thingatpt.el (thing-at-point-uri-schemes): Add schemes that
+ are new to the list at IANA. Also added irc, mms, mmsh.
+
+2006-11-20 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlw-help.el (idlwave-html-help-location):
+ Fail gracefully for missing help packages.
+ (idlwave-help-assistant-open-link): Open full links.
+ (idlwave-help-assistant-help-with-topic): Direct help link.
+
+ * progmodes/idlwave.el (idlwave-mode):
+ Set add-log-current-defun-function.
+ (idlwave-current-routine-fullname): Add, to support add-log.
+ (idlwave-convert-xml-system-routine-info): Simplify XML parsing
+ to reflect improvements to xml-parse-file.
+ (idlwave-mode-menu-def): New binding for help-with-topic.
+
+ * progmodes/idlw-shell.el (idlwave-shell-filter-directory):
+ Handle extra newlines and spaces.
+ (idlwave-shell-mode-map): Add help-with-topic.
+
+2006-11-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * tutorial.el (tutorial-warning-face): New face.
+ (tutorial--detailed-help, tutorial--display-changes): Use it.
+ (tutorial--find-changed-keys): Check ESC-prefix binding specially.
+ Improve search pattern for occurrences of changed keys.
+
+2006-11-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el (x-last-cut-buffer-coding): New variable.
+ (x-select-text): Set it.
+ (x-cut-buffer-or-selection-value): Check also x-last-cut-buffer-coding
+ when checking for newness.
+
+2006-11-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (posn-image):
+ * progmodes/ebnf2ps.el (ebnf-stop-on-error): Fix typos in docstrings.
+
+ * emacs-lisp/regexp-opt.el (regexp-opt): Doc fix.
+
+2006-11-19 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * progmodes/glasses.el (glasses-separate-parentheses-exceptions): New.
+ Exceptions to the rule "add a space between an identifier and an
+ opening parenthesis". Defaulted to the `#define' problem of cpp.
+ (glasses-parenthesis-exception-p): New. Check if the region is an
+ exception regarding to that.
+ (glasses-make-readable): Use it.
+ (glasses-convert-to-unreadable): Ditto. Modify the file also if
+ `glasses-convert-on-write-p' and `glasses-separate-parentheses-p' are t.
+
+2006-11-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/bytecomp.el (byte-compile-if): Revert last change.
+
+2006-11-19 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-mode.el (ada-make-body): Fix typo.
+
+ * progmodes/ada-xref.el (ada-make-body-gnatstub): Fix typo.
+ (ada-xref-initialize): Fix typo. Use add-hook and remove-hook.
+
+2006-11-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/bytecomp.el (byte-compile-maybe-guarded): Check `and'
+ conditions for function or variable bindings.
+
+ * comint.el (comint-exec-1): Set EMACS and INSIDE_EMACS to t.
+
+ * progmodes/compile.el (compilation-start): Ditto.
+
+2006-11-18 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (top): cl and custom are always required.
+
+2006-11-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el (x-cut-buffer-or-selection-value): Decode text from
+ cut-buffers with next-selection-coding-system if not nil.
+
+2006-11-17 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-fix-decoded-time): New function.
+ (org-display-custom-time): Use `org-fix-decoded-time'.
+
+2006-11-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * menu-bar.el (menu-bar-games-menu): Remove yow.
+
+2006-11-17 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-scan-tags): Re-align code fixed.
+ (org-detach-overlay): Rename from `org-detatch-overlay'.
+ (org-table-convert-region): Insert space after column separator.
+ (org-agenda-kill): New command.
+ (org-metaleft): Call `org-outdent-item' on bullets.
+ (org-metaright): Call `org-indent-item' on bullets.
+ (org-timestamp-change): Set `org-last-changed-timestamp'.
+ (org-current-line): Make sure (bolp) returns correct result.
+ (org-agenda-change-all-lines): Make sure TODO are highlighted.
+
+2006-11-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs.el (cvs-retrieve-revision): Set buffer-file-coding-system.
+
+2006-11-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (global-map): Change 2006-08-16 fix to call
+ mouse-yank-at-click explicitly, since mouse events are not carried
+ over into keyboard macros.
+
+2006-11-16 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-file-internal): Use current buffer's file name as default
+ choice for ido-find-alternate-file. Suggested by Matt Hodges.
+
+2006-11-15 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-doublecheck-at-and-shallower): Clarify docstring.
+ (allout-inhibit-aberrance-doublecheck): Rename from
+ allout-during-yank-processing. All callers changed.
+ (allout-ascend): Provide for unusual case where some topic after
+ the first in file is at lower depth than the first.
+ (allout-shift-in): Ensure the offspring of the new containing
+ topic are exposed.
+ (allout-encrypt-string): Preserve the coding-system of the text,
+ according to that of the containing buffer.
+ (allout-toggle-subtree-encryption): When the text being encrypted
+ requires a different coding system, offer to preserve the coding
+ system using a file local var.
+
+2006-11-15 Simon Marshall <simon@gnu.org>
+
+ * progmodes/cc-fonts.el (c-font-lock-declarators): Use c-at-toplevel-p
+ to recognise "T t()" as a function declaration, rather than a
+ variable instantiation, iff at the top-level or inside a class
+ declaration. Suggested by Feng Li <fengli@gmail.com>.
+
+2006-11-14 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-xref.el (ada-parse-prj-file):
+ Don't delete project buffer; user may want to edit it.
+ (ada-xref-set-project-field, ada-xref-current-project-file)
+ (ada-xref-current-project, ada-show-current-project)
+ (ada-set-main-compile-application): New functions.
+ (ada-xref-get-project-field, ada-require-project-file):
+ Normalize use of ada-prj-default-project-file.
+ (ada-gdb-application, ada-get-ada-file-name, ada-make-body-gnatstub):
+ Normalize use of ada-require-project-file.
+ (ada-prj-find-prj-file): Improve doc string, comments.
+
+ * progmodes/ada-mode.el (ada-mode-version): Bump version.
+ (ada-create-keymap): Add \C-c\C-m 'ada-set-main-compile-application.
+ (ada-create-menu): Add ada-set-main-compile-application,
+ ada-show-current-main, ada-show-current-project.
+
+2006-11-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el (inferior-python-mode-syntax-table): New var.
+ (inferior-python-mode): Use it.
+
+2006-11-14 Andreas Schwab <schwab@suse.de>
+
+ * term/xterm.el (terminal-init-xterm): Add more key bindings.
+
+2006-11-13 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-copy-current-word): C-o copies region if active.
+
+2006-11-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-emph-face): Fix typo in variable name.
+
+2006-11-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * ediff.el (ediff-revision):
+ * files.el (set-visited-file-name):
+ * mail/rmailout.el (rmail-output-body-to-file):
+ Use `format', not `message', in `y-or-n-p' call.
+
+2006-11-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-metaleft): Call `org-outdent-item' on bullets.
+ (org-metaright): Call `org-indent-item' on bullets.
+ (org-timestamp-change): Set `org-last-changed-timestamp'.
+ (org-current-line): Make sure (bolp) returns correct result.
+ (org-agenda-change-all-lines): Make sure highlighting TODO always works.
+
+2006-11-12 Richard Stallman <rms@gnu.org>
+
+ * language/european.el (turkish-case-conversion-enable)
+ (turkish-case-conversion-disable): New functions.
+ ("Turkish" lang env): Use them.
+
+ * international/characters.el (case table):
+ Do nothing special for i and I.
+
+ * subr.el (remove-overlays): Fix last change.
+
+ * cus-edit.el (custom-save-all): Use find-file-visit-truename
+ for visiting the custom file.
+
+2006-11-12 Markus Triska <triska@gmx.at>
+
+ * play/handwrite.el (handwrite): Also process lines not ending
+ with newline. Replace some position-fiddling with different
+ logic. Improve performance.
+
+2006-11-12 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-xref.el (ada-prj-default-check-cmd): New variable,
+ replacing deleted variable `ada-check-switch'.
+ (ada-project-file-extension): Rename to `ada-prj-file-extension'.
+ (ada-xref-project-files): Improve doc string.
+ (ada-find-executable): New function.
+ (ada-initialize-runtime-library): Use `ada-find-executable'.
+ (ada-xref-set-default-prj-values): In compile commands, don't need
+ `ada-cd-command'; `compile' does that more portably.
+ Use ada-prj-default-check-cmd.
+ (ada-parse-prj-file): Don't set 'debug_post_cmd, 'debug_pre_cmd
+ properties if not specified in project file.
+ (ada-goto-declaration): Display useful message for new error
+ 'error-file-not-found.
+ (ada-get-ada-file-name, ada-find-in-src-path): Signal new error
+ 'error-file-not-found.
+ (ada-get-all-references): Match latest ali syntax. Signal new
+ error 'error-file-not-found.
+ (ada-find-in-ali): Match latest ali syntax.
+ (ada-make-filename-from-adaname): Handle different semantics of
+ gnatkr in GNAT 3.15p vs later.
+
+ * progmodes/ada-stmt.el (ada-func-or-proc-name): Match changes to
+ ada-procedure-start-regexp.
+ (ada-or-accept, ada-or-delay, ada-or-terminate): Improve doc string.
+
+ * progmodes/ada-mode.el: Replace conditional (require 'ispell)
+ with defvar.
+ (ada-language-version): Rename ada05 -> ada2005.
+ (ada-align-region-separate): Add `eval-when-compile'.
+ (ada-name-regexp): Remove unneeded escapes in regexp character
+ alternative.
+ (ada-compile-goto-error-file-linenr-re): New constant.
+ (ada-matching-start-re): Handle additional cases `declare',
+ `procedure', `function'.
+ (ada-compile-goto-error): Handle "... at line nn".
+ (ada-mode): Clearer syntax, comments for ff-special-constructs.
+ Delete support for old versions of `align'.
+ (ada-search-prev-end-stmt): Handle additional keyword `private'.
+ (ada-check-defun-name): Simplify handling of `declare'.
+ (ada-goto-matching-start): Handle nested `begin ... end'.
+ Handle `declare', `protected', `procedure', `function'.
+ (ada-create-menu): Presence of arm95 is not conditional on using
+ GNAT compiler.
+
+2006-11-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/re-builder.el (reb-mode): Set `blink-matching-paren' to
+ nil in the *RE-Builder* buffer (it causes spurious error messages).
+
+ * server.el (server-visit-files): If `minibuffer-auto-raise' has
+ been set to t, respect it.
+
+2006-11-11 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-mode.el: Delete `eval-and-compile' around `require'.
+ Delete commented out code for old Emacs versions. Autoloading of
+ "ada-xref", "ada-prj" is useful even if compiler is not GNAT.
+ (ada-mode-version): Bump version number.
+ (ada-95-string-keywords, ada-2005-string-keywords)
+ (ada-2005-keywords, ada-name-regexp): New constant.
+ (ada-language-version, ada-procedure-start-regexp, ada-mode)
+ (ada-font-lock-keywords): Add support for Ada 2005 keywords.
+ (ada-package-start-regexp): Support private packages, include package
+ name (for ada-set-point-accordingly).
+ (ada-next-procedure, ada-previous-procedure)
+ (ada-which-function-are-we-in): Match changes to
+ ada-procedure-start-regexp.
+ (ada-make-body): Make non-interactive; not a user function.
+ (ada-make-subprogram-body): Improve doc string.
+
+2006-11-11 Romain Francoise <romain@orebokech.com>
+
+ * progmodes/cperl-mode.el (cperl-mode): Before adding to it, make
+ `compilation-error-regexp-alist' buffer-local, since we changed
+ `compilation-error-regexp-alist-alist' locally.
+
+2006-11-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-visit-files): Bind `minibuffer-auto-raise'
+ to the value of `server-raise-frame'.
+
+2006-11-11 Glenn Morris <rgm@gnu.org>
+
+ * ido.el (ido-enable-prefix)
+ * ses.el (ses-call-printer-return)
+ * net/tramp.el (tramp-unified-filenames)
+ * progmodes/cc-align.el (c-lineup-string-cont)
+ * progmodes/compile.el (compilation-directory-matcher)
+ * progmodes/ebnf2ps.el (ebnf-stop-on-error)
+ * progmodes/vhdl-mode.el (vhdl-reset-active-high)
+ (vhdl-clock-rising-edge)
+ * textmodes/org.el (org-export-with-timestamps)
+ (org-export-remove-timestamps-from-toc)
+ (org-export-with-tags): Improve previous doc fixes.
+
+2006-11-11 Richard Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-mode-map):
+ Bind C-c $ instead of M-RET.
+
+2006-11-10 Simon Marshall <simon@gnu.org>
+
+ * progmodes/cc-fonts.el (c-font-lock-declarations): Don't overwrite
+ fontification for "case" and "default" keywords.
+
+2006-11-10 Andreas Schwab <schwab@suse.de>
+
+ * calendar/cal-dst.el (calendar-dst-check-each-year-flag):
+ Avoid starting sentence with "nil".
+
+2006-11-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-raise-frame): New option.
+ (server-switch-buffer): Use it.
+
+2006-11-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-many-windows): Start doc string
+ with a capital.
+
+2006-11-10 Carsten Dominik <carsten.dominik@gmail.com>
+
+ * textmodes/org.el (org-show-hierarchy-above)
+ (org-show-following-heading): Fix typo in default value.
+ (org-scan-tags): Make the search case-sensitive.
+ (org-tags-sparse-tree): Don't overrule
+ `org-show-following-heading' and `org-show-hierarchy-above'.
+ (org-reveal): New command.
+ (org-show-context): Rename from `org-show-hierarchy-above'.
+ (org-fast-tag-selection-single-key): New option.
+ (org-fast-tag-show-exit, org-set-current-tags-overlay): New functions.
+ (org-tags-overlay): New variable.
+ (org-agenda-todo-ignore-deadlines): New option.
+ ("session"): Add circular data structure `org-mark-ring' to
+ exceptions list in session.el.
+ (org-agenda-window-setup, org-agenda-restore-windows-after-quit):
+ New options.
+ (org-agenda-quit): Use `org-agenda-restore-windows-after-quit'.
+ (org-prepare-agenda, org-agenda-quit): Use `org-agenda-window-setup'.
+ (org-pre-agenda-window-conf, org-blank-before-new-entry): New vars.
+ (org-finalize-agenda): Activate bracket links in agenda.
+ (org-at-timestamp-p, org-at-date-range-p): Additional argument
+ INACTIVE-OK.
+ (org-show-hierarchy-above, org-show-following-heading):
+ List values allowed for fine-tuned configuration.
+ (org-show-hierarchy-above): New argument CONTEXT, use the
+ fine-tuned settings in `org-show-hierarchy-above' and
+ `org-show-following-heading'.
+ (org-display-custom-time): New function.
+ (org-toggle-time-stamp-overlays, org-insert-time-stamp): New function.
+ (org-display-custom-times, org-time-stamp-custom-formats):
+ (org-maybe-intangible): New macro.
+ (org-activate-bracket-links, org-hide-wide-columns):
+ Use `org-maybe-intangible'.
+ (org-open-file): Use `shell-quote-argument'.
+ (org-display-internal-link-with-indirect-buffer): New option.
+ (org-file-remote-p): Get regexp from list.
+ (org-link-expand-abbrev): New function.
+ (org-link-abbrev-alist): New option.
+ (org-open-at-point, org-cleaned-string-for-export):
+ Call `org-link-expand-abbrev'.
+ (org-timeline, org-agenda-list, org-todo-list)
+ (org-tags-view): Remove the KEEP-MODES argument.
+ (org-finalize-agenda-hook): New hook.
+ (org-get-alist-option): New function.
+ (org-follow-timestamp-link): New function.
+ (org-open-at-point): Call `org-follow-timestamp-link'.
+ (org-log-note-marker, org-log-note-purpose)
+ (org-log-note-window-configuration): New variables.
+ (org-add-log-maybe, org-add-log-note, org-store-log-note): New funs.
+ (org-log-note-headings): New option.
+ (org-dblock-write:clocktable): Bug fix, removed infinite loop.
+ (org-store-link): Support for dired-mode.
+ (org-open-file): Substitute environment variables into filename.
+ (org-last): New defsubst.
+ (org-agenda-re-align-tags): New function.
+ (org-agenda-align-tags-to-column): New option.
+ (org-agenda-timeline): Group removed.
+ (org-prepare-agenda, org-prepare-agenda-buffers)
+ (org-run-agenda-series, org-timeline, org-agenda-list)
+ (org-todo-list, org-tags-view): Call `org-agenda-prepare' and set
+ the text property inticating the agenda type.
+ (org-agenda-post-command-hook): Get agenda type from text property
+ at point.
+ (org-agenda): Handle command sets. Set `org-agenda-last-arguments'
+ and obey `org-agenda-overriding-arguments'.
+ (org-agenda-overriding-arguments, org-agenda-last-arguments): New vars.
+ (org-agenda-goto-today, org-agenda-later, org-agenda-earlier)
+ (org-agenda-week-view, org-agenda-day-view):
+ Use `org-agenda-overriding-arguments' to make updating work with
+ multi-block agendas.
+ (org-agenda-prefix-format): Allow different formats for the
+ different agenda entry types.
+ (org-timeline-prefix-format): Option removed, use
+ `org-agenda-prefix-format' instead.
+ (org-prepare-agenda): New function.
+ (org-select-timeline-window): Option removed, use
+ `org-select-agenda-window' instead.
+ (org-respect-restriction): Variable removed.
+ (org-cmp-tag): New function.
+ (org-agenda-sorting-strategy, org-entries-lessp):
+ Implement sorting by last tag.
+ (org-complete): Better completion in in-buffer option lines.
+ (org-in-item-p): New function.
+ (org-org-menu): Add entries for checkboxes.
+ (org-cycle): Extra brouping in outline-regexp, because it is used
+ in a search with "^" prepended.
+ (org-provide-checkbox-statistics): New option.
+ (org-set-font-lock-defaults): Highlight checkbox statistics.
+ (org-update-checkbox-count-maybe)
+ (org-get-checkbox-statistics-face): New functions.
+ (org-update-checkbox-count): New command.
+ (org-insert-item, org-toggle-checkbox):
+ Call `org-update-checkbox-count-maybe'.
+ (org-export-as-html): XEmacs compatibility for coding system.
+ (org-force-cycle-archived): New command.
+ (org-cycle-hide-archived-subtrees): Display message when ARCHIVE
+ overrules cycling.
+ (org-fix-position-after-promote): If the line contains only a todo
+ keyword, add a final space.
+ (org-promote-subtree, org-demote-subtree):
+ Call `org-fix-position-after-promote'.
+
+2006-11-10 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-dst.el: Do not assume DST starts/ends on the same
+ date in every year.
+ (calendar-dst-check-each-year-flag): New customizable variable.
+ (calendar-dst-find-data): New function, extracted from
+ calendar-current-time-zone.
+ (calendar-current-time-zone): Use calendar-dst-find-data.
+ (calendar-dst-transition-cache): New variable.
+ (calendar-dst-find-startend, calendar-dst-starts)
+ (calendar-dst-ends): New functions.
+ (calendar-daylight-savings-starts)
+ (calendar-daylight-savings-ends): Change value to use
+ calendar-dst-starts, calendar-dst-ends; respectively.
+
+ * progmodes/f90.el (f90-indent-region): Bind case-fold-search to t.
+
+ * ido.el (ido-enable-prefix)
+ * ses.el (ses-call-printer-return)
+ * net/tramp.el (tramp-unified-filenames)
+ * progmodes/cc-align.el (c-lineup-string-cont)
+ * progmodes/compile.el (compilation-directory-matcher)
+ * progmodes/ebnf2ps.el (ebnf-stop-on-error)
+ * progmodes/gdb-ui.el (gdb-many-windows)
+ * progmodes/vhdl-mode.el (vhdl-reset-active-high)
+ (vhdl-clock-rising-edge)
+ * textmodes/org.el (org-export-with-timestamps)
+ (org-export-remove-timestamps-from-toc, org-export-with-tags)
+ (org-read-date): Doc fix (Nil -> nil).
+
+2006-11-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el (x-select-text, x-cut-buffer-or-selection-value):
+ Encode/decode text to/from cut buffers to/from iso-latin-1 only.
+
+2006-11-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs--window-for-buffer): Remove.
+ (bs--show-with-configuration): Use `get-window-with-predicate'
+ instead of `bs--window-for-buffer'.
+
+2006-11-10 Kenichi Handa <handa@m17n.org>
+
+ * files.el (revert-buffer): Fix previous change.
+
+2006-11-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs--redisplay): Fix typo in docstring.
+ (bs--window-config-coming-from): Make frame-local.
+ (bs--restore-window-config): New function.
+ (bs-kill, bs-select, bs-select-other-window)
+ (bs-select-other-frame): Use it.
+ (bs--window-for-buffer): Return as soon as a matching buffer is found.
+ (bs--show-with-configuration): Save the window configuration as a
+ frame local var, and only if *buffer-selection* is not already
+ visible on this frame.
+
+2006-11-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * vc-svn.el (vc-svn-admin-directory): New var.
+ (vc-svn-registered, vc-svn-responsible-p)
+ (vc-svn-repository-hostname): Use it.
+ Suggested by arit93@yahoo.com.
+
+2006-11-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * ldefs-boot.el: Regenerate.
+
+2006-11-08 Alan Mackenzie <acm@muc.de>
+
+ * emacs-lisp/lisp.el (beginning-of-defun-raw): Code up the
+ case (eq open-paren-in-column-0-is-defun-start nil) by searching
+ for least nested open-paren.
+
+2006-11-08 Romain Francoise <romain@orebokech.com>
+
+ * subr.el (remove-overlays): Fix typo in last change.
+
+2006-11-08 Richard Stallman <rms@gnu.org>
+
+ * subr.el (remove-overlays): Call overlay-recenter.
+
+2006-11-08 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * printing.el (pr-alist-custom-set, pr-ps-utility-custom-set)
+ (pr-ps-name-custom-set, pr-txt-name-custom-set): Return back the old
+ behaviour.
+ (pr-menu-bind): Act on global-map instead of menu-bar-file-menu
+ directly.
+
+2006-11-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * ido.el (ido-ignore-extensions, ido-show-dot-for-dired)
+ (ido-max-dir-file-cache, ido-decorations)
+ (ido-rewrite-file-prompt-functions, ido-use-mycompletion-depth)
+ (ido-magic-backward-char, ido-enter-dired)
+ (ido-enter-insert-buffer, ido-enter-insert-file, ido-dired)
+ (ido-list-directory, ido-first-match, ido-only-match)
+ (ido-subdir, ido-indicator): Fix typos in docstrings.
+ (ido-buffer-internal, ido-completion-help): Fix typos in messages.
+ (ido-read-internal): Fix typo in error message.
+
+2006-11-08 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (set-default-coding-systems):
+ Always set default-file-name-coding-system to utf-8 for Mac Darwin.
+
+2006-11-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (setwins): Remove.
+ (WINS_ALMOST): New macro.
+ (WINS): Use it.
+ (autoloads): Don't extract autoloads from files in obsolete/.
+
+2006-11-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * whitespace.el (whitespace-buffer): Call remove-overlays after
+ overlay-recenter for performance. Suggested by Martin Rudalics.
+
+2006-11-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-default-method): scp is the default method.
+
+2006-11-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-start): Save also the Emacs pid in the server file.
+
+2006-11-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-cite.el (reftex-pop-to-bibtex-entry): Preserve
+ point when displaying a bibtex cross reference in the echo area.
+
+2006-11-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * international/mule.el (make-char): Fix typo in docstring.
+ (load-with-code-conversion, charsetp): Doc fixes.
+
+ * international/ja-dic-cnv.el (skkdic-convert):
+ * cus-edit.el (hook): Fix typo in docstring.
+
+2006-11-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-mode-map): Move defvar above code using it.
+ (custom-mode-link-map): New variable.
+ (custom-group-link, custom-manual): Use follow-link.
+
+2006-11-06 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el: Fix typo in name of author of bibtex.el,
+ "Mark Shapiro" -> "Marc Shapiro". Update his email address.
+
+2006-11-06 Richard Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-correct-word-before-point):
+ New function broken out of flyspell-correct-word.
+ (flyspell-mode-map): Bind it to M-RET.
+ (flyspell-correct-word): Call it.
+
+ * textmodes/fill.el (fill-minibuffer-function): New function.
+ (fill-paragraph): Bind fill-paragraph-function to
+ fill-minibuffer-function.
+
+ * ruler-mode.el (ruler-mode-map): Add bindings for up-events
+ so that they aren't undefined.
+
+ * dired.el (dired-readin): Locally bind file-name-coding-system.
+
+ * bindings.el: Shorten and clarify usual mode line mouse help string.
+
+ * Makefile.in (autoloads): Don't include `obsolete'.
+
+2006-11-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * printing.el (pr-alist-custom-set, pr-ps-utility-custom-set)
+ (pr-ps-name-custom-set, pr-txt-name-custom-set): Don't update the
+ Printing menu if it's not initialized.
+ (pr-menu-bind): Act on menu-bar-file-menu directly.
+
+2006-11-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (view-emacs-news): Fix typo in error message.
+
+ * menu-bar.el (menu-bar-update-buffers): Fix typo in menu entry.
+
+ * shadowfile.el (shadow-define-regexp-group)
+ (shadow-literal-groups, shadow-insert-var): Doc fixes.
+ (shadow-read-files): Fix typo in message.
+ (shadow-inhibit-overload, shadow-find, shadow-suffix)
+ (shadow-site-match, shadow-write-todo-file, shadow-insert-var)
+ (shadow-suffix, shadow-site-match, shadow-expand-file-name)
+ (shadow-file-match): Fix typos in docstrings.
+
+ * terminal.el (terminal-emulator): Fix typo in message.
+
+ * emacs-lisp/authors.el (authors-fixed-entries): Fix typo.
+
+ * emacs-lisp/lselect.el (x-kill-primary-selection)
+ (x-delete-primary-selection, x-copy-primary-selection):
+ Fix typos in error messages.
+
+ * emulation/edt-mapper.el: Fix typo in interactive message.
+
+ * mail/emacsbug.el (report-emacs-bug): Fix typos in output message.
+
+ * textmodes/ispell.el (ispell, ispell-local-dictionary-alist)
+ (ispell-help): Fix typos in docstrings.
+ (ispell-help): Fix typo in output message.
+
+ * allout.el (allout-adjust-file-variable)
+ (allout-passphrase-verifier-string)
+ (allout-passphrase-hint-string)
+ (allout-toggle-current-subtree-encryption):
+ * apropos.el (apropos-synonyms):
+ * cus-edit.el (hook):
+ * emacs-lock.el (emacs-lock-from-exiting):
+ * follow.el (follow-avoid-tail-recenter-p):
+ * hexl.el (hexl-mode):
+ * mouse-copy.el (mouse-copy-work-around-drag-bug):
+ * mouse.el (mouse-set-font):
+ * resume.el (resume-emacs-args-file):
+ * rfn-eshadow.el (file-name-shadow-tty-properties):
+ * t-mouse.el (t-mouse-process, t-mouse-mode):
+ * emacs-lisp/cust-print.el (custom-print-install)
+ (custom-print-uninstall, custom-format):
+ * emacs-lisp/shadow.el (list-load-path-shadows):
+ * emulation/tpu-edt.el (tpu-help-text)
+ (tpu-save-all-buffers-kill-emacs, tpu-emacs-replace)
+ (tpu-reset-control-keys):
+ * emulation/vip.el (vip-emacs-local-map)
+ (vip-change-mode-to-emacs):
+ * emulation/viper.el (viper-mode, viper-set-hooks)
+ (viper-major-mode-modifier-list):
+ * emulation/viper-init.el (viper-emacs-state-cursor-color):
+ * emulation/viper-keym.el (viper-emacs-kbd-map)
+ (viper-toggle-key):
+ * mail/feedmail.el (feedmail-queue-reminder)
+ (feedmail-queue-reminder-alist, feedmail-confirm-outgoing)
+ (feedmail-confirm-outgoing-timeout, feedmail-nuke-bcc)
+ (feedmail-nuke-resent-bcc, feedmail-fill-to-cc-fill-column)
+ (feedmail-sender-line, feedmail-force-binary-write)
+ (feedmail-from-line, feedmail-deduce-envelope-from)
+ (feedmail-x-mailer-line, feedmail-message-id-generator)
+ (feedmail-date-generator, feedmail-fiddle-plex-user-list)
+ (feedmail-enable-spray, feedmail-spray-this-address)
+ (feedmail-spray-address-fiddle-plex-list, feedmail-enable-queue)
+ (feedmail-queue-runner-confirm-global)
+ (feedmail-ask-before-queue-prompt)
+ (feedmail-ask-before-queue-reprompt)
+ (feedmail-prompt-before-queue-standard-alist)
+ (feedmail-prompt-before-queue-user-alist)
+ (feedmail-prompt-before-queue-help-supplement)
+ (feedmail-queue-use-send-time-for-message-id)
+ (feedmail-queue-default-file-slug, feedmail-queue-fqm-suffix)
+ (feedmail-mail-send-hook-splitter, feedmail-mail-send-hook)
+ (feedmail-mail-send-hook-queued)
+ (feedmail-confirm-addresses-hook-example)
+ (feedmail-last-chance-hook, feedmail-before-fcc-hook)
+ (feedmail-queue-runner-mode-setter)
+ (feedmail-queue-alternative-mail-header-separator)
+ (feedmail-queue-runner-message-sender)
+ (feedmail-buffer-eating-function, feedmail-binmail-template)
+ (feedmail-run-the-queue-no-prompts)
+ (feedmail-run-the-queue-global-prompt)
+ (feedmail-queue-subject-slug-maker, feedmail-fiddle-header)
+ (feedmail-envelope-deducer, feedmail-fiddle-date)
+ (feedmail-default-message-id-generator)
+ (feedmail-fiddle-message-id, feedmail-fiddle-x-mailer)
+ (feedmail-fiddle-spray-address, feedmail-deduce-address-list):
+ * mail/vms-pmail.el (vms-pmail-save-and-exit, vms-pmail-abort)
+ (vms-pmail-setup):
+ * play/dunnet.el (dun-help):
+ * play/handwrite.el (handwrite):
+ * play/hanoi.el (hanoi-unix-64):
+ * progmodes/idlwave.el (idlwave-rescan-asynchronously):
+ * textmodes/enriched.el (fixed):
+ * textmodes/org.el (org-file-apps)
+ (org-emphasis-regexp-components, org-emphasis-alist):
+ * textmodes/texinfmt.el (batch-texinfo-format):
+ Fix typos in docstrings.
+
+2006-11-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * loadhist.el (read-feature): Don't complete features not loaded
+ from a file (which make `unload-feature' to fail).
+
+2006-11-05 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * add-log.el (add-log-time-zone-rule): Mark as safe-local-variable.
+
+2006-11-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (command-line-1): Kill emacs if the last frame is
+ deleted while evaluating the command-line arguments.
+
+2006-11-05 Richard Stallman <rms@gnu.org>
+
+ * startup.el (init-file-had-error): Add doc string.
+ (fancy-splash-text, fancy-splash-head, fancy-splash-tail):
+ Use fixed-width font for keyboard key descriptions.
+
+ * cus-edit.el (custom-save-all): Error if saving in .emacs
+ and it had an error when loaded.
+
+ * dired-aux.el (dired-copy-file-recursive): Catch errors
+ from recursive copies in the loop, around the recursive call.
+
+2006-11-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * battery.el (battery-linux-proc-acpi): Search an ac_adapter in
+ `/proc/acpi/ac_adapter/*'. Ditto for the thermometers in
+ `/proc/acpi/thermal_zone/*'.
+ (battery-search-for-one-match-in-files): New. Search a regexp in
+ the content of some files.
+
+2006-11-05 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (mouse-autoselect-window-now): Remove variable.
+ (mouse-autoselect-window-state): New variable.
+ (mouse-autoselect-window-start, mouse-autoselect-window-cancel)
+ (mouse-autoselect-window-select, handle-select-window):
+ Rewritten to make mouse-autoselect-window-timer a one-shot timer.
+ Suspend delayed autoselection during menu or popup dialog.
+
+ * info-look.el (info-lookup-guess-custom-symbol): New function
+ for retrieving symbol at point in custom buffers.
+ (top level) <info-lookup-maybe-add-help>: Add backquote and
+ comma to ignored characters in regexps of help specifications
+ for emacs-lisp-mode and lisp-interaction-mode. This permits
+ looking up symbols in `...' and after a comma. Add help
+ specifications for custom-mode and help-mode.
+
+2006-11-04 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmail.el (rmail-redecode-body): New optional argument RAW.
+ Don't encode body if RAW is non-nil, or if the old encoding is
+ identical to the new encoding, or if the body contains only
+ eight-bit-* characters.
+
+2006-11-04 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
+
+ * faces.el (faces-sample-overlay, describe-face): Revert last changes.
+ (faces-sample-overlay): Remove variable.
+ (describe-face): Insert sample text in the face being described.
+
+2006-11-04 Martin Rudalics <rudalics@gmx.at>
+
+ * whitespace.el (whitespace-indent-regexp): Make this match any
+ multiples of eight spaces near the beginning of a line.
+ (whitespace-buffer): Use `remove-overlays' instead of
+ `whitespace-unhighlight-the-space' and `overlay-recenter' to
+ speed up overlay handling.
+ (whitespace-buffer-leading, whitespace-buffer-trailing):
+ Make these functions highlight the text removed by
+ `whitespace-buffer-leading-cleanup' and
+ `whitespace-buffer-trailing-cleanup' respectively.
+ (whitespace-buffer-search): Use `with-local-quit'.
+ Move `format' out of loop to speed up scanning larger buffers.
+ (whitespace-unhighlight-the-space): Remove `remove-hook' since
+ that function is never added to a hook.
+ (whitespace-spacetab-regexp, whitespace-ateol-regexp)
+ (whitespace-buffer-leading-cleanup)
+ (whitespace-refresh-rescan-list): Fix docstrings.
+
+2006-11-03 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-during-yank-processing): Cue for inhibiting
+ aberrance processing during yanks.
+ (allout-doublecheck-at-and-shallower): Reduce the limit to reduce
+ the amount of yanked topics that can be aberrant.
+ (allout-do-doublecheck): Encapsulate this multiply-used recipe in
+ a function, and supplement with inihibition of doublechecking
+ during yanks.
+ (allout-beginning-of-line, allout-next-heading)
+ (allout-previous-heading, allout-goto-prefix-doublechecked)
+ (allout-back-to-current-heading, allout-next-visible-heading)
+ (allout-next-sibling): Use new allout-do-doublecheck function.
+ (allout-next-sibling): Ensure we made progress when returning
+ other than nil.
+ (allout-rebullet-heading): Preserve text property annotations
+ indicating the text was hidden, if it was.
+ (allout-kill-line): Remove any added was-hidden annotations.
+ (allout-kill-topic): Remove any added was-hidden annotations.
+ (allout-annotate-hidden): Inhibit adding was-hidden text
+ properties to the undo list.
+ (allout-deannotate-hidden): New function to remove was-hidden
+ annotation.
+ (allout-hide-by-annotation): Use new allout-deannotate-hidden.
+ (allout-remove-exposure-annotation): Replace by
+ allout-deannotate-hidden.
+ (allout-yank-processing): Signal that yank processing is happening
+ with allout-during-yank-processing. Also, wrap
+ allout-unprotected's closer to the text changes, for easier
+ debugging. We need to inhibit-field-text-motion explicitly, in
+ lieu of the encompassing allout-unprotected.
+ (outlineify-sticky): Adjust criteria for triggering new outline
+ decorations to presence or absence of any topics, not just a topic
+ at the beginning of the buffer.
+
+2006-11-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs--show-all, bs--redisplay):
+ * cus-edit.el (custom-unlispify-menu-entries)
+ (custom-unlispify-tag-names, custom-prompt-variable):
+ * expand.el (expand-pos):
+ * speedbar.el (speedbar-generic-list-tag-p):
+ * wid-edit.el (widget-image-enable):
+ * emacs-lisp/checkdoc.el (checkdoc-rogue-space-check-engine):
+ * emacs-lisp/find-func.el (find-function-noselect)
+ (find-function, find-variable-noselect, find-variable)
+ (find-definition-noselect, find-face-definition):
+ * mail/rmail-spam-filter.el (rsf-scanning-messages-now):
+ * net/eudc-vars.el (eudc-expansion-overwrites-query):
+ * progmodes/ada-xref.el (ada-find-in-ali):
+ * textmodes/flyspell.el (flyspell-check-tex-math-command):
+ * textmodes/org.el (org-copy-subtree):
+ * textmodes/table.el (table--row-column-insertion-point-p):
+ Use "non-nil" in docstrings.
+
+2006-11-03 Mark Davies <mark@mcs.vuw.ac.nz>
+
+ * sort.el (sort-columns): Set the field separator to tab; on
+ NetBSD, sort complains if "\n" is used as field separator.
+
+2006-11-03 NIIMI Satoshi <sa2c@sa2c.net>
+
+ * emacs-lisp/pp.el (pp-eval-last-sexp): Evaluate target sexp.
+
+2006-11-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * server.el (server-auth-key): Remove. Replace by a process-property.
+ (server-start): Don't remove the file of the previous process, but
+ instead clear out the place for the new file.
+ (server-start): Set the :auth-key property.
+ (server-process-filter): Use the :auth-key property.
+
+2006-11-02 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode-map): No longer copy
+ `outline-mode-map' explicitly - this is already done by
+ `define-derived-mode'.
+
+2006-11-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el (server-visit-files): Use `when'.
+ (server-process-filter): When authentication fails, send error
+ message to client. Wrap `process-send-region' in `ignore-errors'
+ instead of `condition-case', and remove misleading comment.
+
+2006-11-01 Juri Linkov <juri@jurta.org>
+
+ * simple.el (yank): Doc fix.
+
+2006-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * server.el: Try and fit within 80 columns.
+ (server-start): Make the auth file unreadable by other users.
+
+2006-10-31 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * battery.el (battery-linux-proc-acpi): Prevent range error when
+ `full-capacity' is 0.
+
+2006-10-31 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
+
+ * faces.el (faces-sample-overlay): New defvar.
+ (faces-sample-overlay): New function to show face sample text.
+ (describe-face): Use it.
+
+2006-10-31 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-stmt.el: Change maintainer, apply
+ whitespace-cleanup, checkdoc.
+ (ada-func-or-proc-name): Add doc string.
+
+ * progmodes/ada-prj.el (ada-prj-new): Change maintainer, apply
+ whitespace-cleanup, checkdoc. Minor improvements to many doc
+ strings and comments.
+ (ada-prj-display-page): Change buffer name to more accurately
+ reflect function.
+
+ * progmodes/ada-xref.el: Change maintainer, apply
+ whitespace-cleanup, checkdoc. Minor improvements to many doc
+ strings and comments. Don't look for `gvd' or `ddd' debuggers.
+ (ada-compile-current): Don't add newlines to commands.
+
+2006-10-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * server.el: Add support for TCP sockets.
+ (server-use-tcp, server-host, server-auth-dir): New options.
+ (server-auth-key): New variable.
+ (server-ensure-safe-dir): Create nonexistent parent dirs.
+ Ignore Unix-style file modes on Windows.
+ (server-start): Crete a TCP or Unix socket according to the value
+ of `server-use-tcp'. For TCP sockets, create the id/auth file in
+ `server-auth-dir' directory.
+ (server-process-filter): Delete process if authentication
+ fails (which never happens for Unix sockets).
+
+2006-10-30 David Kastrup <dak@gnu.org>
+
+ * subr.el (add-to-list): Don't continue checking if a match has
+ been found.
+
+2006-10-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * tutorial.el: Move defvars to avoid bytecomp warnings.
+ (tutorial--find-changed-keys): Check if viper-current-state is
+ bound before using it.
+ (help-with-tutorial): Check if viper-tutorial is defined before
+ using it.
+
+2006-10-30 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * help-fns.el (help-with-tutorial): Move to tutorial.el.
+
+ * tutorial.el: New file.
+ (help-with-tutorial): Move here from help-fns.el. Add help for
+ rebound keys. Fix resume of tutorial.
+ (tutorial--describe-nonstandard-key, tutorial--sort-keys)
+ (tutorial--find-changed-keys, tutorial--display-changes)
+ (tutorial--saved-dir, tutorial--saved-file)
+ (tutorial--save-tutorial): New functions to support the changes in
+ help-with-tutorial.
+
+2006-10-30 Kenichi Handa <handa@m17n.org>
+
+ * files.el (revert-buffer): If a unibyte buffer is being reverted
+ with a coding system for multibyte, set buffer multibyte before
+ calling insert-file-contents.
+
+2006-10-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * server.el (server-select-display): Use a dummy buffer to detect when
+ the frame is later used.
+ (server-select-display): New function.
+ (server-process-filter): Use it to detect unused temp frames.
+
+2006-10-29 Stephen Leake <stephen_leake@stephe-leake.org>
+
+ * progmodes/ada-mode.el: Change maintainer, apply
+ whitespace-clean, checkdoc. Minor improvements to many doc strings.
+ (ada-mode-version): New function.
+ (ada-create-menu): Menu operations are available for all supported
+ compilers.
+
+2006-10-29 Lars Hansen <larsh@soem.dk>
+
+ * net/tramp.el (with-parsed-tramp-file-name): Correct debug spec.
+ Highlight as keyword.
+ (tramp-do-copy-or-rename-file): Correct data for 'file-already-exists.
+ Don't call tramp-method-out-of-band-p for local files.
+ (tramp-touch): Quote file name.
+
+2006-10-28 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (cal-html-cursor-month)
+ (cal-html-cursor-year): Add autoloads for this new package.
+ (calendar-mode-map): Bind cal-html-cursor-month, cal-html-cursor-year.
+
+2006-10-28 Anna M. Bigatti <bigatti@dima.unige.it>
+
+ * calendar/cal-html.el: New file.
+
+2006-10-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/authors.el (authors-aliases): Update.
+
+2006-10-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * version.el (emacs-version): Bump version number to 22.0.90.
+
+2006-10-26 John W. Eaton <jwe@octave.org>
+
+ * progmodes/octave-inf.el (inferior-octave-has-built-in-variables):
+ New defvar.
+ (inferior-octave-resync-dirs): Check to see whether Octave has
+ built-in variables and set inferior-octave-has-built-in-variables.
+ Check inferior-octave-has-built-in-variables to decide whether to
+ send commands that set built-in variables or call functions to
+ change Octave's behavior.
+ Send "disp (pwd ())" to Octave instead of just "pwd".
+ (inferior-octave-startup): Send "more off" to Octave instead of
+ "page_screen_output = 0".
+
+2006-10-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/cl-indent.el (lisp-indent-259): Indent nil's in the
+ pattern normally.
+
+2006-10-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * bindings.el (mode-line-mode-menu): Remove bindings for global
+ minor modes (line/column number) as they are on the menubar.
+
+2006-10-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * term/w32-win.el (x-handle-name-switch): Doc fix.
+ (w32-standard-fontset-spec): Fix typo in docstring.
+
+ * midnight.el (midnight-buffer-display-time): Doc fix.
+ (clean-buffer-list-kill-never-buffer-names): Add "*server*".
+
+2006-10-23 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-prefix-arg-com): Define gg as G0.
+
+ * emulation/viper-ex.el (ex-read): Quote file argument.
+
+ * ediff-diff.el (ediff-same-file-contents): Expand file names.
+
+ * ediff-mult.el (ediff-append-custom-diff): Quote shell file arguments.
+
+2006-10-22 Martin Rudalics <rudalics@gmx.at>
+
+ * textmodes/flyspell.el (flyspell-check-region-doublons):
+ Fix last fix.
+
+2006-10-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * bindings.el (mode-line-mode-menu): List global minor modes
+ before local ones.
+
+2006-10-23 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (add-to-list): Optimize if compare-fn is `eq' or `eql'.
+ (sit-for): If last command was a prefix arg, add the read-ahead
+ event to unread-command-events as (t . EVENT) so it will be added
+ to this-command-keys by read-key-sequence.
+
+2006-10-22 Martin Rudalics <rudalics@gmx.at>
+
+ * textmodes/flyspell.el (flyspell-word): Skip past all previous
+ whitespace when checking doublons.
+ (flyspell-check-region-doublons): Fix doublon regexp.
+ (flyspell-highlight-incorrect-region): Highlight doublons using
+ flyspell-duplicate face.
+
+ * progmodes/cperl-mode.el (cperl-invalid-face): Fix defcustom.
+
+2006-10-22 John Wiegley <johnw@newartisans.com>
+
+ * progmodes/python.el (python-use-skeletons): python-mode was
+ auto-inserting templates (for those with abbrev-mode on), not only
+ by default -- *but without a configuration variable to disable
+ it*. This rendered python-mode completely useless for me, so I
+ have added `python-use-skeletons', which is now off by default.
+
+2006-10-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/cperl-mode.el (cperl-mode): Don't assume
+ font-lock-multiline is auto-local (it's not).
+ (cperl-windowed-init): Ensure that cperl-font-lock-multiline is
+ initialized before calling cperl-init-faces.
+
+2006-10-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-stack-custom): Don't try to give
+ gdb-stack-position a value when there is no fringe.
+
+ * bindings.el (mode-line-mode-menu): Disable auto-revert-tail-mode
+ indicator if not visiting a file.
+
+2006-10-20 David Kastrup <dak@gnu.org>
+
+ * window.el (kill-buffer-and-window): Fix a bug where an aborted
+ operation would still cause some window to collapse later.
+
+2006-10-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-switch-backend): Try to be more careful with unwanted
+ side-effect due to mixing various backends's file properties.
+
+ * vc-svn.el (vc-svn-parse-status): Remove unused arg `localp'.
+ Add arg `filename' instead. Don't set vc-backend if `filename' is set.
+ Return `filename's status if applicable. Update callers.
+
+2006-10-19 Kenichi Handa <handa@m17n.org>
+
+ * international/kkc.el (kkc-region): When a key sequence is not
+ defined, append (this-single-command-raw-keys) to
+ unread-input-method-events.
+
+2006-10-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/ada-mode.el (ada-in-string-p): Doc fix.
+
+2006-10-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * version.el (emacs-version): Use mac-carbon-version-string.
+
+ * term/macterm.el (res-geometry): Apply 2006-10-18 change for x-win.el.
+
+2006-10-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * select.el (ccl-check-utf-8, string-utf-8-p): New functions (by
+ Kenichi Handa).
+ (xselect-convert-to-string): Decline requests for UTF8_STRING if
+ the selection is not UTF-8.
+
+2006-10-18 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/ada-mode.el (ada-83-string-keywords)
+ (ada-last-which-function-line ada-no-auto-case, ada-indent-region)
+ (ada-which-compiler, ada-align-modes, ada-adjust-case-buffer)
+ (ada-looking-at-semi-private, ada-get-body-name):
+ Fix typos in docstrings.
+ (ada-create-case-exception, ada-create-case-exception-substring):
+ Fix typos in error messages.
+ (ada-goto-matching-end, ada-narrow-to-defun): Doc fixes.
+
+2006-10-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el (res-geometry): Don't set geometry from Xresources
+ to default-frame-alist if default-frame-alist already contains
+ width/height.
+
+2006-10-18 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/pp.el (pp-eval-expression): Use `X' to read value.
+ Non-interactive arg is the value, not the expression.
+
+ * simple.el (read-expression-map): Just set it, no defvar.
+
+ * subr.el (insert-for-yank-1): If last inserted char has
+ properties, mark them as rear-nonsticky.
+
+ * recentf.el (recentf-mode): Doc fix.
+
+ * facemenu.el (facemenu-add-new-face): Defend against symbol
+ that isn't a face name.
+
+ * dired-aux.el (dired-do-copy): Doc fix.
+
+2006-10-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-1): Ignore fields when moving to the
+ beginning of line to avoid getting point stuck.
+
+2006-10-18 Martin Rudalics <rudalics@gmx.at>
+
+ * textmodes/flyspell.el (flyspell-word-search-backward):
+ Set inhibit-point-motion-hooks to avoid looping due to intangibile
+ text.
+
+2006-10-16 Richard Stallman <rms@gnu.org>
+
+ * help-fns.el (describe-function-1): Special case optimization
+ for self-insert-command.
+
+2006-10-16 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-reread-directory): Work in `dir' mode too.
+
+2006-10-15 Martin Rudalics <rudalics@gmx.at>
+
+ * textmodes/table.el: Require 'regexp-opt.
+
+2006-10-15 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * progmodes/flymake.el (flymake-get-project-include-dirs-imp):
+ Use shell-quote-argument.
+
+ * shell.el (explicit-bash-args): Likewise.
+
+ * progmodes/ada-xref.el (ada-find-in-src-path): Likewise.
+ Use grep -E rather than egrep.
+
+2006-10-15 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * ido.el (ido-exhibit): Allow `-', `_', and trailing `$' in user id.
+
+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, updated for attributes.
+ (cperl-calculate-indent): Try to allow '_' be non-word char
+ Support subs with attributes.
+ (cperl-where-am-i): Quiet (?) 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 at 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 occurrences 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,Ae(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>:
+ Use the interactive spec of `eval-expression'.
+
+2006-10-02 Michael Welsh Duggan <md5i@cs.cmu.edu>
+
+ * progmodes/sh-script.el (sh-prev-thing): Fix last 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.
+
+2006-10-02 Kenichi Handa <handa@m17n.org>
+
+ * international/code-pages.el (iso-8859-6): Table fixed.
+
+2006-10-01 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * dired.el (dired-build-subdir-alist): Fix previous change.
+
+2006-10-01 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * simple.el (undo-elt-crosses-region): Fix the inequalities.
+
+2006-10-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/find-func.el (find-function-regexp): Don't match
+ "define-button-type".
+
+ * pcvs.el (cvs-update-header): Fix handling of extra newlines so that
+ they don't keep accumulating.
+
+2006-10-01 Bob Rogers <rogers-emacs@rgrjr.dyndns.org> (tiny change)
+
+ * ffap.el (ffap-rfc-path): Change the address of the RFC
+ repository to ftp.rfc-editor.org, as ds.internic.net seems to be gone.
+
+2006-10-01 Stephen Berman <Stephen.Berman@gmx.net>
+
+ * allout.el (allout-expose-topic): Rectify implementation of "+"
+ spec, so that bodies are not exposed with headlines.
+
+2006-10-01 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-current-depth): Do aberrent check only at or
+ below doublecheck depth.
+ (allout-chart-subtree): Make it explicit that LEVELS being nil
+ means unlimited depth. Drop undocumented support for LEVELS value
+ t meaning unlimited depth. (This is consistent with
+ allout-chart-to-reveal, but contrary to allout-show-children,
+ which needs to use nil to default to depth of 1.)
+ (allout-goto-prefix-doublechecked): Wrap long docstring line.
+ (allout-chart-to-reveal): Be explicit in docstring about meaning
+ of nil LEVELS, and drop support for LEVELS value t.
+ (allout-show-children): Translate the level spec used by this
+ routine to that used by allout-chart-subtree and
+ allout-chart-to-reveal.
+ (allout-show-to-offshoot): Retry once when stuck, after opening
+ subtree - improvements in discontinuity handling likely will
+ enable progress.
+
+2006-09-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-button-click-moves-point): New variable.
+ (widget-button-click): If widget-button-click-moves-point is
+ non-nil, set point after performing the button action.
+
+ * cus-edit.el (custom-mode): Set widget-button-click-moves-point.
+
+2006-09-30 Martin Rudalics <rudalics@gmx.at>
+
+ * files.el (find-file-existing): Modify to not allow wildcards.
+
+2006-09-30 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * simple.el (undo-more): When undo information for the region is
+ exhausted, say "No further undo information FOR REGION".
+
+2006-09-30 Michael Welsh Duggan <md5i@cs.cmu.edu>
+
+ * progmodes/sh-script.el (sh-prev-thing):
+ Take `sh-leading-keywords' into account.
+
+2006-09-29 Glenn Morris <rgm@gnu.org>
+
+ * custom.el (defcustom): Doc fix.
+
+ * calendar/calendar.el (european-calendar-style):
+ Call european-calendar or american-calendar as needed when set.
+ (diary-view-entries, list-calendar-holidays): Move autoloads
+ before use.
+
+2006-09-29 Juri Linkov <juri@jurta.org>
+
+ * progmodes/cperl-mode.el (cperl-after-expr-p): Don't move point
+ to nil if there is no previous property change.
+
+2006-09-29 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * cus-edit.el (custom-save-all): Switch to emacs-lisp mode before
+ saving anything to be sure that `forward-sexp' behaves correctly.
+
+2006-09-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-finish): Ignore field boundaries if the
+ initial and final points have the same `field' property.
+
+2006-09-29 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-file-internal): Only bind minibuffer-completing-file-name
+ to t while calling ido-read-internal.
+
+2006-09-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-file-remote-p): Get regexp from list.
+ (org-archive-subtree): Remove erraneous `]' from character list.
+
+2006-09-28 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses.el (ses-in-print-area, ses-goto-data, ses-load)
+ (ses-reconstruct-all): Make undo of "insert row" work by keeping
+ markers for data-area and parameters-area.
+
+2006-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/make-mode.el (makefile-mode): Don't disable jit-lock.
+
+ * font-lock.el (font-lock-after-change-function): Refontify next line
+ as well if end is at BOL.
+ (font-lock-extend-jit-lock-region-after-change): Be more careful to
+ only extend the region as much as needed.
+
+2006-09-28 Richard Stallman <rms@gnu.org>
+
+ * comint.el (comint-mode): Bind font-lock-defaults non-nil.
+
+ * subr.el (insert-for-yank-1): Handle `font-lock-face' specially.
+
+ * 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)
+
+ * mail/smtpmail.el (smtpmail-try-auth-methods): Do not break long
+ lines in base64-encoded authentication response.
+
+2006-09-26 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * progmodes/ebnf2ps.el: Doc fix. Implement arrow spacing and scaling.
+ (ebnf-version): New version 4.3.
+ (ebnf-arrow-extra-width, ebnf-arrow-scale): New options.
+ (ebnf-prologue): Adjust PostScript programming.
+ (ebnf-begin-file, ebnf-insert-ebnf-prologue, ebnf-terminal-dimension1)
+ (ebnf-repeat-dimension, ebnf-except-dimension): Adjust code.
+
+2006-09-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * jit-lock.el (jit-lock-force-redisplay): Rename from
+ jit-lock-fontify-again, and undo the mistaken change I've just done.
+
+ * jit-lock.el (jit-lock-fontify-now): Don't fontify the empty text.
+ (jit-lock-fontify-again): Don't refontify text that's not displayed.
+
+2006-09-26 Kenichi Handa <handa@m17n.org>
+
+ * startup.el (display-splash-screen): Allow a prefix argument.
+
+2006-09-25 Jason Rumney <jasonr@gnu.org>
+
+ * subr.el (shell-quote-argument): Use DOS logic for Windows
+ shells with DOS semantics.
+
+2006-09-24 Richard Stallman <rms@gnu.org>
+
+ * progmodes/compile.el (compilation-goto-locus-delete-o): New fn.
+ (compilation-goto-locus): Use compilation-goto-locus-delete-o
+ to delete the overlay. Put it on pre-command-hook.
+
+ * emacs-lisp/timer.el (timer-max-repeats): Doc fix.
+
+ * startup.el (fancy-splash-screens, normal-splash-screen):
+ Call the splash buffer *About GNU Emacs*.
+
+ * simple.el (next-error-highlight, next-error-highlight-no-select):
+ Default to 0.5.
+ (yank-excluded-properties): Add `fontified'.
+
+ * font-lock.el (font-lock-compile-keywords): Allow value of
+ syntax-begin-function to enable paren-column-0 highlighting.
+
+2006-09-24 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * dired.el (dired-build-subdir-alist): When file ends in colon,
+ don't exit the loop, just disregard that file.
+
+2006-09-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-finish): Handle corner case for fields in
+ continued lines.
+ (line-move-1): Remove flawed test for that case.
+
+2006-09-24 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * icomplete.el (icomplete-simple-completing-p): Use the correct
+ name for the new variable, `icomplete-with-completion-tables'.
+ (file local variables): Remove superfluous setting.
+
+2006-09-23 Jeff Miller <jmiller@cablespeed.com> (tiny change)
+
+ * calendar/appt.el (appt-check): Fix typo for appointments just
+ after midnight.
+
+2006-09-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * 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)
+
+ * textmodes/ispell.el (ispell-change-dictionary): Don't check the
+ local dictionary when changing the global dictionary.
+
+2006-09-23 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * icomplete.el (icomplete-with-completion-tables): List of
+ specialized completion tables with which icomplete should
+ operate. Include the new `internal-complete-buffer', so icomplete
+ works with interactive buffer-selection.
+ (icomplete-simple-completing-p): Add acceptance of specialized
+ completion tables listed in icomplete-with-completion-tables.
+
+2006-09-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * frame.el (focus-follows-mouse): Set default to nil on Mac.
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' for
+ `focus-follows-mouse'.
+
+2006-09-22 Richard Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-buffer-create-internal): In `emacs -q',
+ explain why Save is not available.
+
+2006-09-22 Juanma Barranquero <lekktu@gmail.com>
+
+ * woman.el (woman0-so): Use `let*', not `let'.
+ (woman-horizontal-line): Remove unbalanced parenthesis.
+
+2006-09-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * woman.el: Make sure all the end-of-region markers we use have
+ a non-nil insertion-type.
+ (woman0-so): Move things around so we can use copy-marker.
+ (woman0-roff-buffer, woman2-process-escapes-to-eol, woman2-roff-buffer):
+ Adjust marker type.
+ (woman2-process-escapes): Check marker type.
+ (woman-horizontal-line): Dispense with the use of a marker.
+
+2006-09-22 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-lang.el: Add Greek letters to math-variable-table
+ property of tex.
+
+2006-09-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (save-some-buffers-action-alist): Display diff in view-mode.
+
+2006-09-22 Masatake YAMATO <jet@gyve.org>
+
+ * add-log.el (add-log-current-defun): Use `forward-sexp'
+ instead of `forward-word' to pick c++::symbol.
+ Reported by Guanpeng Xu <herberteuler@hotmail.com>.
+
+2006-09-22 Kenichi Handa <handa@m17n.org>
+
+ * bindings.el: Fix setting self-insert-command for multibyte
+ characters in global-map.
+
+2006-09-21 David Kastrup <dak@gnu.org>
+
+ * mouse.el (mouse-posn-property): Fix typo for `event-start' in
+ doc string.
+
+2006-09-21 Kenichi Handa <handa@m17n.org>
+
+ * language/european.el ("Latin-1"): Add windows-1252 to
+ coding-priority.
+ ("German"): Likewise.
+
+2006-09-21 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/cl-macs.el (member*): Use memql instead of complex code.
+ Suggested by Miles Bader.
+
+ * emacs-lisp/cl.el (pushnew): Rework 2006-09-10 change. Use memql
+ instead of add-to-list in the simple case.
+
+2006-09-20 Kenichi Handa <handa@m17n.org>
+
+ * 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.
+
+2006-09-20 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * lpr.el (lpr-page-header-switches): Insert `*' at beginning of doc
+ string to become an option.
+
+2006-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (find-buffer-visiting): Don't get fooled by a nil inode.
+
+2006-09-20 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-partial): Call pos-visible-in-window-p with
+ position t instead of trying both window-end and window-end - 1.
+
+2006-09-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-scan-tags): Find end of subtrees also in
+ hidden trees.
+
+2006-09-20 David Kastrup <dak@gnu.org>
+
+ * mouse.el (mouse-posn-property): Improve doc string.
+ (mouse-on-link-p): Change buffers for function calls on links.
+
+ * menu-bar.el (clipboard-yank): Bomb out in interactive use if
+ buffer is read-only.
+
+2006-09-20 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-unprotected): Let inhibit-read-only only when
+ buffer-read-only isn't set.
+ (allout-annotate-hidden): Enable topic annotation during copies even
+ when the buffer is read-only, eg for topic copies. Ensure that the loop
+ advances, even when the span extends beyond the deletion region.
+ (allout-toggle-subtree-encryption): Use allout-structure-added-hook
+ rather than allout-exposure-changed-hook, as a stronger assertion.
+ (allout-keybindings-list): Add bindings for
+ allout-copy-line-as-kill and allout-copy-topic-as-kill.
+ (allout-copy-line-as-kill, allout-copy-topic-as-kill):
+ Copy wrappers for allout-kill-line and allout-kill-topic.
+ (allout-listify-exposed): Position correctly to accumulate lines.
+
+2006-09-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-1): Escape field boundaries occurring
+ exactly at point. Update goal column if constrained to a field.
+ (line-move-finish): Escape field boundaries occurring exactly at point.
+
+2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (mouse-on-link-p): Tentatively fix last change.
+ (mouse-drag-vertical-line): Remove unused var `wconfig'.
+
+2006-09-19 Kim F. Storm <storm@cua.dk>
+
+ * help.el (describe-key-briefly, describe-key): Simplify printing
+ of descriptions by using format and %S. Fix "is undefined"
+ messages to say "at that spot" for mouse events.
+
+ * simple.el (line-move-partial): Optimize. Try window-line-height
+ before posn-at-point to get vpos of current line.
+
+2006-09-18 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper.el: Bump up version/date of update to reflect the
+ substantial changes done in August 2006.
+
+ * emulation/viper-cmd (viper-next-line-at-bol): Make sure button-at,
+ push-button are defined.
+
+ * ediff-util.el (ediff-add-to-history): New function.
+
+ * ediff.el: Use ediff-add-to-history instead of add-to-history.
+
+2006-09-18 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
+
+ * textmodes/conf-mode.el (conf-space-mode): Doc fix.
+ Delete duplicate make-local-variable form.
+ (conf-space-keywords): Add autoload cookie.
+ Fix typo (`keywords', not `keyword').
+
+2006-09-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * cus-start.el (all): Rename x-gtk-show-chooser-help-text to
+ x-gtk-file-dialog-help-text. Rename x-use-old-gtk-file-dialog
+ to x-gtk-use-old-file-dialog.
+
+2006-09-18 Richard Stallman <rms@gnu.org>
+
+ * wid-edit.el (widget-button-click): Handle non-mouse-motion events
+ that might come in during mouse tracking.
+
+2006-09-18 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-partial): Rework 2006-09-15 change to use
+ new window-line-height function. Further optimize by not calling
+ pos-visible-in-window-p for window-end when window-line-height
+ returns useful information.
+
+2006-09-16 Richard Stallman <rms@gnu.org>
+
+ * textmodes/conf-mode.el (conf-mode-map): Use conf-space-keywords cmd.
+ (conf-space-mode): Don't handle prefix arg.
+ Delete conf-space-keywords-override code.
+ Use add-hook.
+ (conf-space-keywords): New command.
+ (conf-space-mode-internal): Be careful with imenu-generic-expression.
+ Delete conf-space-keywords-override code.
+ (conf-space-keywords-alist): Doc fix.
+ (conf-space-font-lock-keywords): Doc fix.
+ (conf-space-keywords-override): Var deleted.
+
+2006-09-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (fancy-splash-screens): Don't switch to the scratch
+ buffer; it may not be the next buffer.
+
+2006-09-16 Romain Francoise <romain@orebokech.com>
+
+ * saveplace.el (load-save-place-alist-from-file): Use expanded name
+ in both messages.
+
+2006-09-16 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se>
+
+ * progmodes/python.el (python-preoutput-filter):
+ Fix arg order to string-match.
+
+2006-09-16 Richard Stallman <rms@gnu.org>
+
+ * obsolete/fast-lock.el (fast-lock-cache-data): Provide 2nd arg to
+ font-lock-compile-keywords.
+
+ * font-lock.el (font-lock-compile-keywords): Rename optional arg
+ to SYNTACTIC-KEYWORDS and reverse the sense. All callers changed.
+
+2006-09-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * cus-start.el (all): Add x-gtk-show-chooser-help-text.
+
+ * select.el (xselect-convert-to-string): If UTF8_STRING is requested
+ and the data doesn't look like UTF8, send STRING instead.
+
+2006-09-16 Agust,Am(Bn Mart,Am(Bn <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-check-region-doublons):
+ New function to detect duplicated words.
+ (flyspell-large-region): Use it.
+
+2006-09-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-to-column): Revert 2006-08-03 change.
+
+2006-09-16 Eli Zaretskii <eliz@gnu.org>
+
+ * help.el (describe-prefix-bindings): Use let, not let*.
+
+2006-09-16 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-regexp, allout-line-boundary-regexp)
+ (allout-bob-regexp): Correct grouping and boundaries to fix
+ backwards traversal.
+ (allout-depth-specific-regexp, allout-depth-one-regexp):
+ New versions that exploit \\{M\\} regexp syntax, to avoid geometric or
+ worse time in allout-ascend.
+ (allout-doublecheck-at-and-shallower): Identify depth threshold
+ below which topics are checked for and disqualified by containment
+ discontinuities.
+ (allout-hotspot-key-handler): Correctly handle multiple-key
+ strokes. Remove some unused variables.
+ (allout-mode-leaders): Clarify that mode-specific comment-start
+ will be used.
+ (set-allout-regexp): Correctly regexp-quote allout regexps to
+ properly accept alternative header-leads and primary bullets with
+ regexp-specific characters (eg, C "/*", mathematica "(*").
+ Include new regular expressions among those configured.
+ (allout-infer-header-lead-and-primary-bullet):
+ Rename allout-infer-header-lead.
+ (allout-recent-depth): Manifest as a variable as well as a function.
+ (allout-prefix-data): Simplify into an inline instead of a macro,
+ assuming current match data rather than being explicitly passed
+ it. Establish allout-recent-depth value as well as
+ allout-recent-prefix-beginning and allout-recent-prefix-end.
+ (allout-aberrant-container-p): True when an item's immediate
+ offspring discontinuously contained. Useful for disqualifying
+ unintended topic prefixes, likely at low depths.
+ (allout-goto-prefix-doublechecked): Elaborate version of
+ allout-goto-prefix which disqualifies aberrant pseudo-items.
+ (allout-pre-next-prefix): Layer on top of lower-level routines, to
+ get disqualification of aberrant containers.
+ (allout-end-of-prefix, allout-end-of-subtree): Disqualify aberrant
+ containers.
+ (allout-beginning-of-current-entry): Position at start of buffer
+ when in container (depth 0) entry.
+ (nullify-allout-prefix-data): Invalidate allout-recent-* prefix data.
+ (allout-current-bullet): Strip text properties.
+ (allout-get-prefix-bullet): Use right match groups.
+ (allout-beginning-of-line, allout-next-heading):
+ Disqualify aberrant containers.
+ (allout-previous-heading): Disqualify aberrant containers, and
+ change to regular (rather than inline) function, to allow
+ self-recursion.
+ (allout-get-invisibility-overlay): Increment so progress is made
+ when the first overlay is not the sought one.
+ (allout-end-of-prefix): Disqualify aberrant containers.
+ (allout-end-of-line): Cycle something like allout-beginning-of-line.
+ (allout-mode): Make allout-old-style-prefixes (ie, enabling use with
+ outline.el outlines) functional again. Change the primary bullet
+ along with the header-lead - level 1 new-style bullets now work.
+ Engage allout-before-change-handler in mainline Emacs, not just
+ XEmacs, to do undo handling.
+ (allout-before-change-handler): Expose undo changes occurring in
+ hidden regions. Use allout-get-invisibility-overlay instead of
+ reimplementing it inline.
+ (allout-chart-subtree): Use start rather than end of prefix in
+ charts. Use allout-recent-depth variable.
+ (allout-chart-siblings): Disqualify aberrant topics.
+ (allout-beginning-of-current-entry): Position correctly.
+ (allout-ascend): Use new allout-depth-specific-regexp and
+ allout-depth-one-regexp for linear instead of O(N^2) or worse
+ behavior.
+ (allout-ascend-to-depth): Depend on allout-ascend, rather than
+ reimplementing an algorithm.
+ (allout-up-current-level): Depend on allout-ascend, rather than
+ reimplementing an algorithm. Return to start-point if we fail.
+ (allout-descend-to-depth): Use allout-recent-depth variable
+ instead of function.
+ (allout-next-sibling): On traversal of numerous intervening
+ topics, resort to economical allout-next-sibling-leap.
+ (allout-next-sibling-leap): Specialized version of
+ allout-next-sibling that uses allout-ascend cleverly, to depend on
+ a regexp search to leap large numbers of contained topics, rather
+ than arbitrarily many one-by-one traversals.
+ (allout-next-visible-heading): Disqualify aberrant topics.
+ (allout-previous-visible-heading): Position consistently when
+ interactive.
+ (allout-forward-current-level): Base on allout-previous-sibling
+ rather than (differently) reimplmenting the algorithm. Remove some
+ unused variables.
+ (allout-solicit-alternate-bullet): Present default choice stripped
+ of text properties.
+ (allout-rebullet-heading): Use bullet stripped of text properties.
+ Register changes using allout-exposure-change-hook.
+ Disregard aberrant topics.
+ (allout-shift-in): With universal-argument, make topic a peer of
+ it's former offspring. Simplify the code by separating out
+ allout-shift-out functionality.
+ (allout-shift-out): With universal-argument, make offspring peers
+ of their former container, and its siblings. Implement the
+ functionality here, rather than inappropriately muddling the
+ implementation of allout-shift-in.
+ (allout-rebullet-topic): Respect additional argument for new
+ parent-child separation function.
+ (allout-yank-processing): Use allout-ascend directly.
+ (allout-show-entry): Disqualify aberrant topics.
+ (allout-show-children): Handle discontinuous children gracefully,
+ extending the depth being revealed to expose them and posting a
+ message indicating the situation.
+ (allout-show-to-offshoot): Remove obsolete and incorrect comment.
+ Leave cursor in correct position.
+ (allout-hide-current-subtree): Use allout-ascend directly.
+ Disqualify aberrant topics.
+ (allout-kill-line, allout-kill-topic): Preserve exposure layout in
+ a way that the yanks can restore it, as used to happen.
+ (allout-yank-processing): Restore exposure layout as recorded by
+ allout-kill-*, as used to happen.
+ (allout-annotate-hidden, allout-hide-by-annotation): New routines
+ for preseving and restoring exposure layout across kills.
+ (allout-toggle-subtree-encryption): Run allout-exposure-change-hook.
+ (allout-encrypt-string): Strip text properties.
+ Rearranged order and outline-headings for some of the
+ miscellaneous functions.
+ (allout-resolve-xref): No need to quote the error name in the
+ condition-case handler section.
+ (allout-flatten): Classic recursive (and recursively intensive,
+ without tail-recursion) list-flattener, needed by allout-shift-out
+ when confronted with discontinuous children.
+
+2006-09-16 Jason Rumney <jasonr@gnu.org>
+
+ * dnd.el (dnd-open-remote-file-function): Use dnd-open-local-file
+ on ms-windows.
+ (dnd-open-unc-file): Remove.
+ (dnd-open-local-file): Mention in doc string that it also handles
+ remote files if the system natively supports unc file-names.
+
+2006-09-15 Kim F. Storm <storm@cua.dk>
+
+ * help.el (describe-key): Handle C-h k in *Help* buffer; collect
+ all necessary information about the event before erasing *Help*.
+
+ * simple.el (line-move-partial): Use window-line-visiblity to
+ quickly check whether last line is partially visible, and only do
+ the hard (and slow) part in that case.
+
+2006-09-15 Jay Belanger <belanger@truman.edu>
+
+ * COPYING: Replace "Library Public License" by "Lesser Public
+ License" throughout.
+
+2006-09-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el (x-menu-bar-open): New function for F10.
+
+2006-09-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Disallow filenames containing " -" to avoid confusion with libtool
+ compilation messages. Suggested by Stefan Monnier.
+
+2006-09-15 David Kastrup <dak@gnu.org>
+
+ * mouse-sel.el (mouse-sel-follow-link-p): Use event position
+ instead of buffer position for `mouse-on-link-p'.
+
+ * mouse.el (mouse-posn-property): New function looking up the
+ properties at a click position in overlays and text properties in
+ either buffer or strings.
+ (mouse-on-link-p): Use `mouse-posn-property' to streamline lookup
+ of both `follow-link' as well as `mouse-face' properties.
+ (mouse-drag-track): Check `mouse-on-link-p' on event position, not
+ buffer position.
+
+ * help.el (describe-key-briefly): When reading a down-event on
+ mode lines or scroll bar, swallow the following up event, too.
+ Use the new mouse sensitivity of `key-binding' for lookup.
+ (describe-key): The same here.
+
+2006-09-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * play/life.el (life-patterns): Add a few more interesting patterns.
+ (life-setup): Force `show-trailing-whitespace' to nil.
+
+2006-09-14 Richard Stallman <rms@gnu.org>
+
+ * startup.el (fancy-splash-text): Change text to improve alignment.
+ (fancy-splash-screens): Don't set non-standard tab width.
+ Bind cursor-type temporarily, and make it easy to patch to
+ preserve the splash buffer.
+ (normal-splash-screen, fancy-splash-tail): Spell out "Meta-x".
+ (fancy-splash-screens): Display echo-area message explicitly.
+ Don't set fancy-splash-help-echo.
+
+ * simple.el (line-number-mode): Group mode-line instead of
+ editing-basics.
+ (column-number-mode, size-indication-mode): Likewise.
+
+ * faces.el (mode-line-faces): Group mode-line instead of modeline.
+
+ * time.el (display-time): Group mode-line instead of modeline.
+
+ * cus-edit.el (mode-line): Rename from modeline. All uses changed.
+
+2006-09-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (fancy-splash-text): Move editing instructions to
+ fancy-splash-head.
+ (fancy-splash-head): Issue editing instructions.
+ (fancy-splash-screens): Fixup whitespace.
+
+2006-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bindings.el (mode-line-buffer-identification-keymap):
+ Remove duplicate line.
+
+2006-09-14 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * ido.el (ido-ignore-item-p): Allow any kind of functions in
+ ignore lists.
+
+2006-09-14 Kim F. Storm <storm@cua.dk>
+
+ * jit-lock.el (jit-lock-fontify-again): New function.
+ (jit-lock-fontify-now): Use it instead of lambda form.
+
+2006-09-13 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-word, flyspell-correct-word)
+ (flyspell-auto-correct-word): Make ispell-filter local to these
+ functions. Check that ispell-filter has new stuff before calling
+ ispell-parse-output.
+
+2006-09-13 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-partial): Optimize.
+
+2006-09-13 Richard Stallman <rms@gnu.org>
+
+ * thingatpt.el (thing-at-point-bounds-of-url-at-point):
+ Delete spurious backquote.
+
+2006-09-07 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-print): Fix last change.
+
+2006-09-12 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-dispatch): Remove unnecessary `sit-for'.
+
+2006-09-07 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-scroll-show-maximum-output): Rename from
+ rcirc-show-maximum-output.
+ (rcirc-mode): Remove window-scroll-function hook.
+ (rcirc-scroll-to-bottom): Remove function.
+ (rcirc-print): Recenter so point stays at the bottom of the window
+ if point was already there.
+
+2006-09-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * comint.el (comint-exec-1): Set EMACS to the full name of Emacs,
+ not to "t".
+ * progmodes/compile.el (compilation-start): Likewise.
+ * progmodes/idlwave.el (idlwave-rescan-asynchronously):
+ Don't use expand-file-name on invocation-directory, since this
+ might mishandle special characters in invocation-directory.
+
+2006-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs-defs.el: Remove * in defcustom's docstrings.
+
+2006-09-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/compile.el (compilation-directory-properties):
+ Doc fix for help-echo.
+
+2006-09-12 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el (desktop-read): Add comment.
+
+2006-09-12 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (next-error-highlight, next-error-highlight-no-select):
+ Fix spelling error.
+
+ * subr.el (sit-for): Rework to use input-pending-p and cond.
+ Return nil input is pending on entry also for SECONDS <= 0.
+ (while-no-input): Use input-pending-p instead of sit-for.
+
+2006-09-11 Richard Stallman <rms@gnu.org>
+
+ * simple.el (next-error-highlight, next-error-highlight-no-select):
+ Fix custom type and doc strings.
+
+2006-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * diff-mode.el (diff-apply-hunk-to-backup-file): New var.
+ (diff-apply-hunk): Use it to ask for confirmation.
+
+2006-09-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-lisp/cl.el (pushnew): Add missing `,'.
+
+2006-09-11 David Kastrup <dak@gnu.org>
+
+ * help.el (string-key-binding, describe-key-briefly)
+ (describe-key): Remove `string-key-binding' and its callers since
+ `key-binding' already caters for the proper lookup now.
+
+2006-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cfengine.el (cfengine-font-lock-syntactic-keywords): Newvar.
+ (cfengine-mode): Use it. Fix \ syntax to be like /.
+
+ * bindings.el (mode-line-buffer-identification-keymap):
+ Move initialization into declaration.
+
+2006-09-10 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-edit-input, ido-complete, ido-take-first-match)
+ (ido-push-dir-first, ido-kill-buffer-at-head, ido-exhibit)
+ (ido-delete-file-at-head): Pass head of ido-matches through ido-name
+ in case of merged directories. Reported by Micha,Ak(Bl Cadilhac.
+
+2006-09-10 Richard Stallman <rms@gnu.org>
+
+ * dired-aux.el: Handle errors in recursive copy usefully.
+ (dired-create-files-failures): New variable.
+ (dired-copy-file): Remove condition-case.
+ (dired-copy-file-recursive): Check for errors on all file
+ operations, and add them to dired-create-files-failures.
+ Check file file-date-erorr here too.
+ (dired-create-files): Check dired-create-files-failures
+ and report those errors too.
+
+ * emacs-lisp/cl.el (pushnew): Use add-to-list when convenient.
+
+ * subr.el (add-to-list): New argument COMPARE-FN.
+
+2006-09-10 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * filecache.el (file-cache-add-directory)
+ (file-cache-add-directory-list, file-cache-add-file)
+ (file-cache-add-directory-using-find)
+ (file-cache-add-directory-using-locate)
+ (file-cache-add-directory-recursively): Add autoloads.
+
+2006-09-09 Richard Stallman <rms@gnu.org>
+
+ * textmodes/conf-mode.el (conf-space-mode):
+ Use hack-local-variables-hook instead of calling hack-local-variables.
+ (conf-space-keywords-override): New variable.
+ (conf-space-mode-internal): New subroutine. Reinit Font Lock mode.
+ (conf-space-mode): Always make conf-space-keywords and
+ conf-space-keywords-override local.
+ Call conf-space-mode-internal directly as well as via hook.
+
+2006-09-09 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
+
+ * progmodes/python.el (python-font-lock-keywords): Add `self' and other
+ quasi-keywords.
+
+2006-09-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el: Quieten the compiler about hippie-expand vars.
+ (python-send-string): Be slightly more careful about adding \n.
+
+ * startup.el (normal-splash-screen): Don't display the buffer if we'll
+ kill it right away anyway.
+
+2006-09-09 Eli Zaretskii <eliz@gnu.org>
+
+ * international/codepage.el (cp850-decode-table): Fix a few codes.
+ (cp858-decode-table): New variable.
+
+2006-09-09 Toby Allsopp <Toby.Allsopp@navman.com> (tiny change)
+
+ * net/ldap.el (ldap-search-internal): Doc fix.
+
+2006-09-09 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * play/life.el (life-display-generation): Test for input manually if
+ `sleeptime' is negative or null.
+
+ * lpr.el (lpr-page-header-switches): Page title switch is one of them.
+ (print-region-1): Substitute `%s' with the page title.
+
+2006-09-09 Matt Hodges <MPHodges@member.fsf.org>
+
+ * locate.el (locate-current-search): New variable.
+ (locate): Set buffer local value. Use current buffer if it is
+ in Locate mode.
+ (locate-mode): Disable undo here.
+ (locate-do-setup): Use locate-current-filter from buffer to be killed.
+ (locate-update): Use locate-current-search and locate-current-filter.
+
+2006-09-08 David Kastrup <dak@gnu.org>
+
+ * desktop.el (desktop-read): When loading a desktop, disable
+ saving it while the load progresses, and switch off a pending lazy
+ load by calling `desktop-lazy-abort'.
+
+2006-08-27 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (mouse-autoselect-window-timer)
+ (mouse-autoselect-window-position)
+ (mouse-autoselect-window-window)
+ (mouse-autoselect-window-now): New vars.
+ (mouse-autoselect-window-cancel)
+ (mouse-autoselect-window-select)
+ (mouse-autoselect-window-start): New functions.
+ (handle-select-window): Call `mouse-autoselect-window-start' when
+ delayed window autoselection is enabled.
+
+ * cus-start.el (mouse-autoselect-window): Handle delayed window
+ autoselection.
+
+ * emacs-lisp/eldoc.el: Add `handle-select-window' to the set of
+ commands after which it is allowed to print in the echo area.
+
+2006-09-08 Richard Stallman <rms@gnu.org>
+
+ * textmodes/fill.el (adaptive-fill-regexp): Don't match `(1)' or `1.'
+
+ * mail/rmail.el (rmail-get-new-mail): Say whether all msgs are spam.
+ (rmail-convert-to-babyl-format): Don't record undo, leave list empty.
+
+ * emacs-lisp/timer.el (timer-create, timer-activate): Doc fixes.
+ (cancel-timer-internal): Add doc string.
+ (cancel-function-timers): Doc fix.
+ (with-timeout-handler, timer-event-last*): Add doc strings.
+
+ * emacs-lisp/bindat.el (bindat-unpack): Doc fix.
+
+ * files.el (risky-local-variable-p): Match ...-bindat-spec.
+
+ * dired.el (dired-log-summary): Add doc string.
+
+ * cus-edit.el (custom-menu-create): Bind deactivate-mark here.
+ (custom-group-menu-create): Not here.
+
+2006-09-08 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-dblock-write:clocktable): Avoid infinite loop.
+
+2006-09-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (show-hide-font-panel): New HI command ID symbol.
+ (mac-apple-event-map): Define its handler.
+
+2006-09-07 Toby Allsopp <Toby.Allsopp@navman.com> (tiny change)
+
+ * net/ldap.el (ldap-search-internal): Handle `auth' key.
+
+2006-09-07 Magnus Henoch <mange@freemail.hu>
+
+ * net/rcirc.el (rcirc-activity-string): Don't quote value in case
+ clause.
+
+2006-09-07 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * info.el (Info-index): Bind completion-ignore-case.
+
+2006-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/prolog.el (inferior-prolog-flavor): New var left out of
+ previous commit.
+ (inferior-prolog-guess-flavor): New fun left out of previous commit.
+ (prolog-consult-region-and-go): Don't hard code "*prolog*" and don't
+ burp in dedicated windows.
+ (inferior-prolog-self-insert-command): New command.
+ (inferior-prolog-mode-map): Use it.
+
+2006-09-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * international/latexenc.el (latex-inputenc-coding-alist): Add cp858.
+
+ * international/code-pages.el: Add cp858.
+
+2006-09-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * dnd.el: Fix bootstrapping.
+
+2006-09-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * dnd.el (dnd-protocol-alist): Add what url-handler-mode can handle.
+ (dnd-open-remote-url): New function.
+ (dnd-open-remote-file-function): Set to dnd-open-remote-url if
+ not windows-nt.
+
+2006-09-07 Jason Rumney <jasonr@gnu.org>
+
+ * dnd.el (dnd-open-remote-file-function): New variable.
+ (dnd-open-unc-file): New function.
+ (dnd-open-file): Call dnd-open-remote-file-function if set.
+
+2006-09-06 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-process-region): Encode passphrase with
+ pgg-passphrase-coding-system rather than locale-coding-system.
+ * pgg-def.el (pgg-passphrase-coding-system): New user option.
+
+2006-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/prolog.el: Remove * in docstrings.
+ (prolog-program-name): Add SWI prolog.
+ (prolog-mode-menu): New menu.
+ (prolog-mode): Set comment-add.
+ (prolog-indent-line): Simplify. Use indent-line-to.
+ (inferior-prolog-buffer): New var.
+ (inferior-prolog-run, inferior-prolog-process): New funs.
+ (run-prolog, switch-to-prolog): Rewrite, using them.
+ (prolog-consult-region): Use inferior-prolog-buffer.
+ (inferior-prolog-load-file): New function.
+ (prolog-mode-map): Add bindings for load-file and switch-to-prolog.
+
+ * textmodes/fill.el (fill-single-word-nobreak-p): Allow breaking before
+ last word, if it's not the end of the paragraph.
+
+ * files.el (abbreviate-file-name): Don't mistakenly match newlines in
+ file name.
+
+2006-09-06 Ralf Angeli <angeli@caeruleus.net>
+
+ * frame.el (display-mm-dimensions-alist): New defcustom.
+ (display-mm-height, display-mm-width): Use it.
+
+2006-09-06 Simon Josefsson <jas@extundo.com>
+
+ * mail/smtpmail.el (smtpmail-starttls-credentials): Doc fix.
+
+2006-09-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-list-children-regexp)
+ (gdb-var-list-children-regexp-1): Tweak regexps to catch full
+ string values.
+
+2006-09-06 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-partial): New function to do vscrolling for
+ partially visible images / tall lines. Rewrite based on code
+ previously in line-move. Simplify backwards vscrolling.
+ (line-move): Use it. Simplify.
+
+2006-09-05 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua--pre-command-handler-1): Rewrite.
+
+2006-09-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Process the `gcc-include' after the `gnu' rule.
+
+2006-09-05 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-visit-buffer): Use buffer name if buffer arg is a buffer.
+
+2006-09-05 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg.el (pgg-clear-string): Alias to clear-string for backward
+ compatibility.
+
+ * pgg-gpg.el (pgg-gpg-process-region): Avoid display blinking with
+ inhibit-redisplay; encode passphrase with locale-coding-system.
+
+2006-09-04 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Add more C-M- bindings.
+
+2006-09-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-list-children-regexp)
+ (gdb-var-list-children-regexp): Make type field optional.
+
+ * progmodes/gud.el (gud-speedbar-buttons): Allow for no type
+ e.g public, protected in C++.
+
+2006-09-04 John Paul Wallington <jpw@pobox.com>
+
+ * simple.el (completion-show-help): New defcustom.
+ (completion-setup-function): Heed it.
+
+2006-09-04 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Add C-M- bindings.
+
+2006-09-04 Richard Stallman <rms@gnu.org>
+
+ * mail/rmail-spam-filter.el (rsf-scanning-messages-now): Doc fix.
+ (rsf-min-region-to-spam-list): Doc fix.
+ (rsf-add-content-type-field): Doc fix.
+
+ * simple.el (kill-region): Explicitly test there is a region.
+
+2006-09-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * mail/feedmail.el (feedmail-buffer-to-sendmail): Look for
+ sendmail in several common directories.
+
+ * mail/sendmail.el (sendmail-program): Moved here from paths.el.
+
+ * paths.el (sendmail-program): Removed.
+
+2006-09-04 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-process-region): Revert two patches from Satyaki
+ Das. http://article.gmane.org/gmane.emacs.gnus.general/49947
+ http://article.gmane.org/gmane.emacs.gnus.general/50457
+
+2006-09-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-group-menu-create): Avoid deactivating the
+ mark after running the menu filter.
+
+2006-09-03 Juri Linkov <juri@jurta.org>
+
+ * international/quail.el (quail-defrule-internal): Add a check
+ if a key is a vector.
+
+2006-09-02 Juri Linkov <juri@jurta.org>
+
+ * man.el (Man-topic-history): New variable.
+ (man): Use it.
+
+ * woman.el (woman-topic-history): Change defvar to defvaralias
+ for symbol `Man-topic-history'.
+
+ * shell.el (shell-filter-ctrl-a-ctrl-b): Check if
+ `comint-last-output-start' is a marker by using `markerp' and
+ check if it has a position by using `marker-position', and use
+ this position for `goto-char'.
+
+ * international/quail.el (quail-defrule-internal): Add missing
+ `error' call for null key.
+
+2006-09-02 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-keywords): New variable.
+ (rcirc-bright-nicks, rcirc-dim-nicks): New variables.
+ (rcirc-bright-nick-regexp, rcirc-dim-nick-regexp): Remove
+ variables.
+ (rcirc-responses-no-activity): New function.
+ (rcirc-handler-generic): Check for responses in above.
+ (rcirc-process-command): Add ?: character to arguments of raw
+ server commands.
+ (rcirc-format-response-string): Use `rcirc-bright-nicks' and
+ `rcirc-dim-nicks'.
+ (rcirc-gray-toggle): Remove unused variable.
+ (rcirc-print): Remove some tracking logic, which is moved into
+ markup functions.
+ (rcirc-activity-types): Was `rcirc-activity-type', now a list of
+ types.
+ (rcirc-activity-string): Look for 'keyword in activity-types.
+ (rcirc-window-configuration-change): Don't erase overlay-arrow
+ unnecessarily.
+ (rcirc-add-or-remove): New function.
+ (rcirc-cmd-ignore): Use it.
+ (rcirc-message-leader): Remove unused function.
+ (rcicr-cmd-bright, rcirc-cmd-dim, rcirc-cmd-keyword): New commands.
+ (rcirc-add-face): New function.
+ (rcirc-facify): Use rcirc-add-face.
+ (rcirc-url-regexp): Add parens.
+ (rcirc-map-regexp): Remove function.
+ (rcirc-mangle-regexp): Remove function.
+ (rcirc-markup-text-functions): New variable.
+ (rcirc-markup-text): New function (replaces `rcirc-mangle-text').
+ (rcirc-markup-body-text, rcirc-markup-attributes)
+ (rcirc-markup-my-nick, rcirc-markup-urls, rcirc-markup-keywords)
+ (rcirc-markup-bright-nicks): New markup handler functions.
+ (rcirc-nick-in-message-full-line): New face.
+ (rcirc-track-nick): Rename from `rcirc-mode-line-nick'.
+ (rcirc-track-keyword, rcirc-url, rcirc-keyword): New faces.
+
+2006-09-02 Martin Rudalics <rudalics@gmx.at>
+
+ * cus-start.el (hscroll-margin, hscroll-step)
+ (mode-line-in-non-selected-windows, mouse-autoselect-window)
+ (x-use-underline-position-properties): Change version to "22.1"
+ since they will appear there for the first time.
+
+2006-09-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * imenu.el (imenu-update-menubar): Use buffer-chars-modified-tick.
+
+2006-08-31 Richard Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-save-variables): Slight cleanup.
+ (Custom-no-edit): Renamed from custom-no-edit.
+ (Custom-newline): Renamed from custom-newline.
+ (custom-mode-map): Use new names.
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Reference manual
+ about customization, rather than M-x customize, in the doc string
+ made for the defcustom.
+
+ * emacs-lisp/trace.el (trace-function-background): Doc fix.
+
+2006-08-31 Romain Francoise <romain@orebokech.com>
+
+ * dired-x.el (dired-guess-shell-alist-default): Update.
+
+2006-08-31 Michael Mauger <mmaug@yahoo.com>
+
+ * custom.el (custom-theme-set-variables): Autoload packages before
+ sorting the variables.
+
+2006-08-30 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-special-read-and-insert-char):
+ Convert events to chars if XEmacs.
+ (viper-after-change-undo-hook): Check if undo-in-progress is bound.
+
+2006-08-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el (python-eldoc-function): Re-enable quit while
+ waiting for process.
+
+2006-08-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-string-to-utxt): If adjustment for MacJapanese
+ results in ASCII-only string, encode original one directly.
+
+2006-08-29 Romain Francoise <romain@orebokech.com>
+
+ * startup.el (normal-splash-screen, fancy-splash-screens):
+ Make buffer read-only and arrange to enter view mode if necessary.
+
+2006-08-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * hl-line.el (hl-line): New face.
+ (hl-line-face): Use it.
+
+ * image-mode.el (image-mode): Fix last fix.
+ Suggested by Kim F. Storm.
+
+2006-08-29 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.54.
+
+ * net/tramp.el (tramp-convert-file-attributes): Call `eql' instead
+ of `=', because `tramp-get-remote-gid' might not always return an
+ integer when expected.
+ (tramp-register-file-name-handlers): `partial-completion-mode' is
+ unknown to XEmacs.
+ (tramp-time-diff): Don't use `floor', it might fail for large
+ differences.
+ (tramp-handle-make-auto-save-file-name): For Emacs 21, set
+ `tramp-auto-save-directory' if unset in order to guarantee unique
+ auto-save file names.
+
+2006-08-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-mode.el (image-mode): Display image as text on a terminal.
+
+2006-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el (python-send-command): Simplify.
+ (run-python): Don't generate a new buffer unless `new' was specified.
+ Make sure we send `import emacs' to the proper process.
+
+ * progmodes/python.el (python-send-command): Don't wait for the command
+ to terminate. Don't fiddle with compilation-parsing-end.
+
+2006-08-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/checkdoc.el (checkdoc-file-comments-engine):
+ Insert commentary after first line summary.
+
+ * woman.el (woman-follow): New function, based on `man-follow'.
+ (woman-mode-map): Use it.
+
+ * ibuffer.el (ibuffer-do-sort-by-recency): Perform full update
+ since ibuffer-do-sort-by-recency does not define a sorter.
+
+2006-08-28 Kim F. Storm <storm@cua.dk>
+
+ * find-dired.el (find-dired): Use shell-quote-argument to properly
+ escape ( and ) args. Also use it on {} and ; args in default
+ value of find-ls-option string.
+ (find-grep-dired): Use shell-quote-argument on {} and ; args.
+
+2006-08-27 Michael Olson <mwolson@gnu.org>
+
+ * emacs-lisp/tq.el: Small grammar fix in comments.
+ (tq-enqueue): Check for existence of queue rather than the
+ head queue item's question, which was a no-op.
+ (tq-filter, tq-process-buffer): Make sure the process buffer
+ exists before making it the current buffer.
+
+2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-apple-event-map): Rename hicommand to hi-command.
+ (mac-dnd-drop-data): Apply 2006-08-22 change for x-dnd-drop-data.
+ (special-event-map): Apply 2006-08-16 change for x-win.el.
+
+2006-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el (python-send-receive): Wait in the
+ process's buffer so as to check the right buffer-local variables.
+
+2006-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/checkdoc.el: Remove * in defcustoms.
+ (defgroup checkdoc): Move to beginning.
+
+ * progmodes/python.el (python-preoutput-skip-next-prompt): New var.
+ (python-preoutput-continuation): Remove.
+ (python-preoutput-filter): Simplify correspondingly.
+ Remove handling of _emacs_ok. Make sure we skip _emacs_out's prompts.
+ Loop around to catch embedded _emacs_out output.
+ (run-python): Send the import&print command on a single line.
+ (python-send-command): Send command&print on a single line.
+ (python-send-string): Only add double \n if needed.
+ (python-send-receive): Loop until the result comes.
+ (python-mode-running): Defvar it.
+ (python-setup-brm): Remove unused var `menu'.
+ Only bind py-mode-map and `features' around brm-init.
+ (python-calculate-indentation): Remove unused var `point'.
+ (python-beginning-of-defun): Remove unused var `def-line'.
+
+2006-08-25 Richard Stallman <rms@gnu.org>
+
+ * kmacro.el (kmacro-repeat-on-last-key): Doc fix.
+
+2006-08-25 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper.el (viper-set-hooks): Use frame bindings for
+ viper-vi-state-cursor-color.
+ (viper-non-hook-settings): Don't set default
+ mode-line-buffer-identification.
+
+ * emulation/viper-util.el (viper-set-cursor-color-according-to-state):
+ New fun.
+ (viper-set-cursor-color-according-to-state)
+ (viper-get-saved-cursor-color-in-replace-mode)
+ (viper-get-saved-cursor-color-in-insert-mode): Make conditional on
+ viper-emacs-state-cursor-color.
+
+ * emulation/viper-cmd.el (viper-envelop-ESC-key): Bug fix.
+ (viper-undo): Use point if undo-beg-posn is nil.
+ (viper-insert-state-post-command-sentinel, viper-change-state-to-emacs)
+ (viper-after-change-undo-hook): Don't use
+ viper-emacs-state-cursor-color by default.
+ (viper-undo): More sensible positioning after undo.
+
+ * emulation/viper-ex.el (ex-splice-args-in-1-letr-cmd): Get rid of caddr.
+ (viper-emacs-state-cursor-color): Default to nil, since this feature
+ doesn't work well yet.
+
+ * ediff-mult.el (ediff-intersect-directories)
+ (ediff-get-directory-files-under-revision, ediff-dir-diff-copy-file):
+ always expand filenames.
+
+2006-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * tumme.el: Remove * in defcustoms's docstrings.
+
+2006-08-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
+ Accept internal time format for SECS arg.
+ (timer-relative-time): Doc fix.
+
+ * jit-lock.el: "Stealth fontification by requeuing timers" patch,
+ adapted from Martin Rudalics.
+ (jit-lock-stealth-repeat-timer, jit-lock-stealth-buffers): New vars.
+ (jit-lock-mode): Create jit-lock-stealth-repeat-timer.
+ (jit-lock-stealth-fontify): Reschedule as a idle timer instead of
+ using sit-for.
+
+2006-08-24 Francesc Rocher <francesc.rocher@gmail.com>
+
+ * cus-start.el (all): Add `overline-margin' and
+ `x-underline-at-descent-line'.
+
+2006-08-24 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-find-use-xargs): Use explicit value `exec'
+ to mean "use find -exec"; nil now unambiguously means auto-detect.
+ (grep-compute-defaults): Set grep-find-use-xargs to `exec' if not `gnu'.
+ Use shell-quote-argument to build grep-find-command and
+ grep-find-template.
+ (rgrep): Use shell-quote-argument to properly quote arguments to find.
+ Reported by Tom Seddon.
+
+2006-08-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (fancy-splash-head): Give instructions for dismissing
+ the splash screen for default startup too.
+ (display-startup-echo-area-message, fancy-splash-screens)
+ (use-fancy-splash-screens-p): New arg hide-on-input. If nil, show
+ all splash text at once and keep the splash buffer around.
+ (command-line-1): Give display-startup-echo-area-message a t arg.
+
+2006-08-23 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-follow-gnus-link): Make sure the dedicated
+ gnus frame is selected.
+
+2006-08-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-starting): Reset gdb-signalled to nil.
+
+2006-08-22 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-set-matches-1): Fix full matching for subdirs.
+ Add suffix matching for subdirs.
+
+2006-08-22 Jorgen Schaefer <forcer@forcix.cx> (tiny change)
+
+ * x-dnd.el (x-dnd-drop-data): Don't call goto-char if
+ mouse-yank-at-point is non-nil.
+
+2006-08-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-frame-memory-buffer): Make frame
+ a bit wider and remove fringes to fit initial output on line.
+
+2006-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * frame.el (blink-cursor-end): Only ignore the error we care about.
+ (blink-cursor-mode): Use blink-cursor-end to simplify the code.
+
+2006-08-21 Richard Stallman <rms@gnu.org>
+
+ * whitespace.el (whitespace-cleanup): Doc fix.
+
+2006-08-20 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-show-maximum-output): New var.
+ (rcirc-buffer-process): If no buffer argument is supplied, use
+ current-buffer.
+ (rcirc-complete-nick): Complete to the last completed nick first.
+ (rcirc-mode): Preserve the value of `rcirc-urls' across
+ connections. Setup scroll function.
+ (rcirc-scroll-to-bottom): New function.
+ (rcirc-print): Use nick syntax around regexp work.
+ Notice dim-nicks speaking only if they say our nick.
+ (rcirc-update-activity-string): Do not show the modeline indicator
+ if there are no live rcirc processes.
+ (rcirc-cmd-ignore): Ignore case.
+ (rcirc-browse-url-at-point): Fix off-by-one error.
+
+2006-08-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el: Remove * in defcustom docstrings.
+ (run-python, python-proc, python-try-complete): Use derived-mode-p.
+ (python-mode): Set tab-width and indent-tabs-mode.
+
+2006-08-20 Dave Love <fx@gnu.org>
+
+ * progmodes/python.el: Update to Dave Love's latest version.
+ (python-font-lock-keywords, python-mode): Don't use
+ font-lock-syntax-table, but match symbol elements explicitly instead.
+ (python-mode-map): Add help, and a few more key bindings.
+ (python-skip-comments/blanks): Move out of comments as well.
+ (python-continuation-line-p): Behave better with unbalanced parens.
+ (python-blank-line-p): New fun.
+ (python-open-block-statement-p): Don't use a heuristic.
+ (python-outdent-p): Better handle blocks-in-the-same-line.
+ (python-calculate-indentation): Misc improvements.
+ (python-comment-indent): Remove.
+ (python-block-pairs): New var.
+ (python-first-word): New fun.
+ (python-indentation-levels): Handle more common cases.
+ (python-indent-line-1): Add `leave' argument.
+ (python-indent-region): New fun.
+ (python-skip-out): New fun.
+ (python-beginning-of-statement, python-end-of-statement): Use it.
+ (python-next-statement): Return correct count even at eob.
+ (python-end-of-block): Fix paren-typo.
+ (python-imenu-create-index): Add module variables.
+ (run-python): Add `new' arg.
+ Check we're at a prompt before returning.
+ (python-send-command): Move to end of buffer.
+ Wait for prompt to return.
+ (python-set-proc): New fun.
+ (python-imports): New var.
+ (python-describe-symbol): Use it. Adjust to new interface of `ehelp'.
+ (python-eldoc-function): Try to move out of arg list.
+ (python-outline-level): Offset by 1.
+ (python-find-imports): New fun.
+ (python-symbol-completions): Use python-imports.
+ (python-module-path, ffap-alist): Add support for ffap.
+ (python-skeletons, python-mode-abbrev-table, def-python-skeleton)
+ (python-insert-*, python-default-template, python-expand-template):
+ Add templates/skeletons.
+ (python-setup-brm): Support for Bicycle Repair Man.
+ (python-abbrev-syntax-table): New var.
+ (python-abbrev-pc-hook, python-pea-hook): New funs.
+
+2006-08-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * frame.el (blink-cursor-start): Set timer first.
+ (blink-cursor-end): Ignore timer cancelling errors.
+ Suggested by Ken Manheimer.
+
+2006-08-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * newcomment.el (comment-box): Call `comment-normalize-vars'.
+ Add autoload cookie.
+
+2006-08-20 Richard Stallman <rms@gnu.org>
+
+ * simple.el (line-number-at-pos): Doc fix.
+
+ * emacs-lisp/timer.el (run-with-idle-timer): Pass t to
+ timer-activate-when-idle, so timer can run before Emacs becomes
+ non-idle again.
+
+2006-08-18 Yoni Rabkin Katzenell <yoni-r@actcom.com> (tiny change)
+
+ * whitespace.el (whitespace-cleanup-internal): New optional arg
+ REGION-ONLY. If it's non-nil, modify the message to the user
+ accordingly.
+ (whitespace-cleanup-region): Call whitespace-cleanup-internal with
+ a non-nil argument.
+
+2006-08-18 Gustav H,Ae(Bllberg <gustav@gmail.com> (tiny change)
+
+ * rect.el (spaces-string): Simplify and add doc string.
+
+2006-08-17 Romain Francoise <romain@orebokech.com>
+
+ * progmodes/gdb-ui.el (gdb-edit-locals-value): Balance parens.
+
+2006-08-17 Richard Stallman <rms@gnu.org>
+
+ * compare-w.el (compare-windows): lambda's take an arg and pass
+ it to compare-windows-skip-whitespace.
+
+2006-08-17 Martin Rudalics <rudalics@gmx.at>
+
+ * jit-lock.el (jit-lock-fontify-now): Protect the modified status of
+ the right buffer.
+
+2006-08-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs-parse.el (cvs-parse-table): Accept the new `...' format for
+ removed files.
+
+2006-08-17 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-locals-watch-map)
+ (gdb-locals-watch-map-1): Suppress keymap first.
+ (gdb-edit-locals-map-1): New variable.
+ (gdb-edit-locals-value): New function.
+ (gdb-stack-list-locals-handler): Use them.
+
+2006-08-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (global-map): Allow yanking with mouse-2 at a spot whose
+ cursor would normally be drawn in the fringe.
+
+ * font-lock.el (font-lock-extend-region-wholelines): Fix up typo.
+ Reported by Martin Rudalics <rudalics@gmx.at>.
+
+2006-08-16 Richard Stallman <rms@gnu.org>
+
+ * term/x-win.el (x-clipboard-yank): Specify * in interactive spec.
+ (special-event-map): Process drag-n-drop events this way.
+
+ * simple.el (move-beginning-of-line): Test whether fields
+ would prevent motion back to line's first visible character.
+ If so, stop where the fields would stop the motion.
+
+ * newcomment.el (comment-indent): Fully update INDENT
+ before checking to see if it will change the text.
+
+ * cus-edit.el (custom-newline): New function.
+ (custom-mode-map): Bind newline to custom-newline.
+
+ * compare-w.el (compare-windows): Factor compare-ignore-whitespace
+ into ignore-whitespace.
+ Check each buffer for its skip-function.
+ Handle compare-windows-skip-whitespace special-case test
+ by returning t from default skip function.
+
+2006-08-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-clock-special-range)
+ (org-clock-update-time-maybe): New functions.
+ (org-stamp-time-of-day-regexp): Allow weekday to be of word chars,
+ not only a-z.
+ (org-agenda-get-blocks): Allow multiple blocks per headline.
+ (org-timestamp-change): Call `org-clock-update-time-maybe'.
+ (org-export-html-title-format)
+ (org-export-html-toplevel-hlevel): New options.
+ (org-export-language-setup): Add support for Czech.
+ (org-mode, org-insert-todo-heading, org-find-visible)
+ (org-find-invisible, org-invisible-p, org-invisible-p2)
+ (org-back-to-heading, org-on-heading-p, org-up-heading-all)
+ (org-show-subtree, org-show-entry, org-make-options-regexp):
+ Remove compatibility support for old outline-mode.
+ (org-check-occur-regexp): Funtion removed.
+ (org-on-heading-p, org-back-to-heading): Made defalias.
+ (org-set-local): New defsubst.
+ (org-set-regexps-and-options, org-mode)
+ (org-set-font-lock-defaults, org-edit-agenda-file-list)
+ (org-timeline, org-agenda-list, org-todo-list, org-tags-view)
+ (org-remember-apply-template, org-table-edit-field)
+ (org-table-edit-formulas, orgtbl-mode, org-export-as-ascii)
+ (org-set-autofill-regexps): Use `org-set-local'.
+ (org-table-eval-formula): Fix bug with parsing of display flags.
+
+2006-08-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-stack-custom): Indicate selected
+ frame with fringe arrow. Suggested by Simon Marshall
+ <simon.marshall@misys.com>.
+ (gdb-stack-position): New variable.
+ (gdb-starting, gdb-exited): Reset gdb-stack-position to nil.
+ (gdb-frames-mode): Set gdb-stack-position to nil.
+ Add to overlay-arrow-variable-list
+ (gdb-reset): Delete gdb-stack-position from above list.
+
+2006-08-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el (menu-bar-edit-menu): Disable paste if buffer is
+ read only.
+
+2006-08-13 Romain Francoise <romain@orebokech.com>
+
+ * cus-theme.el (customize-create-theme)
+ (custom-theme-visit-theme): End `y-or-n-p' prompt with a space.
+
+ * filesets.el (filesets-add-buffer): Ditto.
+
+ * pcvs.el (cvs-change-cvsroot): Ditto.
+
+2006-08-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-frame-separate-io-buffer)
+ (gdb-use-separate-io-buffer, menu): Avoid using `inferior' in text.
+ (gdb-memory-mode, gdb-locals-watch-map): Don't quote lambda
+ expressions.
+ (gdb-info-breakpoints-custom): Use gdb-breakpoint-regexp.
+ Only search till end of line.
+ Add face to function names in case of no filename.
+ Add face to variable names of watchpoints.
+
+2006-08-12 Robert Thorpe <rthorpe@realworldtech.com> (tiny change)
+
+ * cus-start.el <indent-tabs-mode>: Move to the `indent'
+ customization group.
+
+2006-08-12 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-prior-bindings, allout-added-bindings):
+ Remove, after long deprecation.
+ (allout-beginning-of-line-cycles, allout-end-of-line-cycles):
+ Add customization vars controlling allout-beginning-of-line and
+ allout-end-of-line conveniences.
+ (allout-header-prefix, allout-use-mode-specific-leader)
+ (allout-use-mode-specific-leader, allout-mode-leaders):
+ Revise docstrings.
+ (allout-infer-header-lead): Change to be an alias for
+ allout-infer-header-lead-and-primary-bullet.
+ (allout-infer-header-lead-and-primary-bullet): New version of
+ allout-infer-header-lead which assigns the primary bullet to the
+ same as the header lead, when its being changed.
+ (allout-infer-body-reindent): Apply regexp-quote instead of
+ unconditionally prepending "\\", so that all literal
+ allout-header-prefix and allout-primary-bullet strings are
+ properly handled.
+ (allout-add-resumptions): Add optional qualifier for extending or
+ appending to existing values, rather than replacing them.
+ (allout-view-change-hook): Clarify docstring.
+ (allout-exposure-change-hook): Take explicit arguments, via
+ run-hook-with-args.
+ (allout-structure-added-hook)
+ (allout-structure-deleted-hook)
+ (allout-structure-shifted-hook): New hooks analogous to
+ allout-exposure-change-hook for other kinds of structural outline
+ edits.
+ (allout-encryption-plaintext-sanitization-regexps): New encryption
+ customization variable, by which cooperating modes can provde
+ massage of the plaintext without actually being passed it.
+ (allout-encryption-ciphertext-rejection-regexps)
+ (allout-encryption-ciphertext-rejection-ceiling): New encryption
+ customization variables, by which cooperating modes can prohibit
+ rare but possible ciphertext patterns from fouling their
+ operation, with actually being passed the ciphertext.
+ (allout-mode): Run activation and deactivation hooks after the
+ minor-mode variable has been toggled, to clarify the mode
+ disposition. The new encryption ciphertext rejection variable is
+ used to ensure that the ciphertext does not contain text that
+ would be recognized as outline structural elements by allout.
+ Substite allout-beginning-of-line and allout-end-of-line for
+ conventionall beginning-of-line and end-of-line bindings.
+ If allout-old-style-prefixes is non-nil, don't nullify it on mode
+ activation!
+ (allout-beginning-of-line): Respect `allout-beginning-of-line-cycles'.
+ (allout-end-of-line): Respect `allout-end-of-line-cycles'.
+ (allout-chart-subtree): Implement new mode, charting only the
+ visible items in the subtree, when new 'visible' parameter is non-nil.
+ (allout-end-of-subtree): Properly handle the last item in the buffer.
+ (allout-pre-command-business, allout-command-counter):
+ Increment an advertised counter so that cooperating enhancements can
+ track revisions of items.
+ (allout-open-topic): Run allout-structure-added-hook with suitable
+ arguments.
+ (allout-shift-in): Run allout-structure-shifted-hook with suitable
+ arguments.
+ (allout-shift-out): Fix doubling for negative args and ensure call
+ of allout-structure-shifted-hook by solely using allout-shift-in.
+ (allout-kill-line, allout-kill-topic):
+ Run allout-structure-deleted-hook with suitable arguments.
+ (allout-yank-processing): Run allout-structure-added-hook with
+ proper arguments.
+ (allout-yank): Enclose activity in allout-unprotected.
+ (allout-flag-region): Run allout-exposure-change-hook with
+ suitable arguments, instead of making the callee infer the arguments.
+ (allout-encrypt-string):
+ Support allout-encryption-plaintext-sanitization-regexps,
+ allout-encryption-ciphertext-rejection-regexps, and
+ allout-encryption-ciphertext-rejection-ceiling. Indicate correct
+ en/de cryption mode in symmetric encryption failure message.
+ (allout-obtain-passphrase): Use copy-sequence to get a distinct
+ copy of the passphrase, and don't zero it or we'll corrupt the
+ stashed copy.
+ (allout-create-encryption-passphrase-verifier)
+ (allout-verify-passphrase): Respect the new signature for
+ allout-encrypt-string.
+ (allout-get-configvar-values): Convenience for getting a
+ configuration variable value and handling its absence gracefully.
+
+2006-08-11 Romain Francoise <romain@orebokech.com>
+
+ * obsolete/zone-mode.el: Delete.
+
+2006-08-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/dns-mode.el (dns-mode): Use before-save-hook.
+
+2006-08-11 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/bindat.el (bindat-ip-to-string):
+ Use `format-network-address' if possible.
+
+2006-08-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * x-dnd.el (x-dnd-init-frame): Call x-register-dnd-atom.
+
+2006-08-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/edebug.el (edebug-recursive-edit): Don't save and
+ restore unread-command-events here.
+ (edebug-display): Do it here, to detect sit-for interruptions.
+
+2006-08-10 Romain Francoise <romain@orebokech.com>
+
+ * textmodes/dns-mode.el: Alias `zone-mode' to `dns-mode'.
+ (dns-mode-soa-auto-increment-serial): New user option.
+ (dns-mode-soa-maybe-increment-serial): New function.
+ (dns-mode): Add the latter to `write-contents-functions'.
+
+ * obsolete/zone-mode.el: Move to obsolete/ from net/.
+ Delete autoload cookies.
+
+2006-08-10 John Wiegley <johnw@newartisans.com>
+
+ * eshell/em-glob.el (eshell-glob-chars-list)
+ (eshell-glob-translate-alist): Add support for [^g] in character globs.
+
+2006-08-10 Richard Stallman <rms@gnu.org>
+
+ * facemenu.el (facemenu-add-face): Pass frame to facemenu-active-faces.
+ (facemenu-set-face): Doc fix.
+ (facemenu-listed-faces): Doc fix.
+
+2006-08-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * avoid.el (mouse-avoidance-animating-pointer): New var.
+ (mouse-avoidance-nudge-mouse): Use it.
+ (mouse-avoidance-banish): Rename from mouse-avoidance-banish-hook.
+ (mouse-avoidance-exile): Rename from mouse-avoidance-exile-hook
+ (mouse-avoidance-fancy): Rename from mouse-avoidance-fancy-hook.
+ Don't activate if currently animating. All callers changed.
+
+2006-08-09 John Wiegley <johnw@newartisans.com>
+
+ * calendar/timeclock.el (timeclock-use-elapsed): Added a new
+ variable, which causes timeclock to report elapsed time worked,
+ instead of just work remaining.
+
+2006-08-09 Kenichi Handa <handa@m17n.org>
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Fix for the case that the 2nd element of arg-list is a cons.
+
+2006-08-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-fontify-node): Handle preceding `in' for note
+ reference hiding rules.
+
+2006-08-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-quoted-subshell): Make sure we don't
+ mistake a closing " for an opening one.
+
+2006-08-07 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Add more key bindings.
+
+2006-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * complete.el (PC-do-completion): Filter out completions matching
+ completion-ignored-extensions before checking whether there are
+ multiple completions.
+ Don't use `list' unnecessarily when building completion tables.
+
+2006-08-06 Richard Stallman <rms@gnu.org>
+
+ * help.el (describe-mode): Make minor mode list more concise.
+
+2006-08-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * bindings.el: Give mode-line-format, mode-line-modes, and
+ mode-line-position `standard-value' properties.
+
+2006-08-05 Eli Zaretskii <eliz@gnu.org>
+
+ * buff-menu.el (list-buffers-noselect): For Info buffers, use
+ "(file)node" instead of the file name.
+
+2006-08-05 Richard Stallman <rms@gnu.org>
+
+ * faces.el (escape-glyph): Doc fix.
+
+2006-08-04 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-diag.el (describe-font): Improve docstring
+ and error message. Use frame-parameter (not frame-parameters).
+
+2006-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/gud.el (gdb-script-font-lock-syntactic-keywords):
+ Correctly mark the end-of-docstring char.
+
+2006-08-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-to-column): Constrain move-to-column to
+ current field.
+
+2006-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-beg, font-lock-end)
+ (font-lock-extend-region-functions): New vars.
+ (font-lock-extend-region-multiline)
+ (font-lock-extend-region-wholelines): New functions.
+ (font-lock-default-fontify-region): Use them.
+ (font-lock-extend-jit-lock-region-after-change): Only round up
+ if font-lock-default-fontify-region will do it as well.
+
+ * font-lock.el (font-lock-extend-after-change-region-function):
+ Rename from font-lock-extend-region-function.
+ (font-lock-extend-region): Remove by inlining at call sites.
+ (font-lock-after-change-function): Don't needlessly round up to a whole
+ number of lines.
+ (font-lock-extend-jit-lock-region-after-change): Be more careful about
+ the boundary conditions and the interactions between the various ways
+ to extend the region.
+
+2006-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * jit-lock.el (jit-lock-fontify-now): Preserve the buffer's
+ modification status when forcing the second redisplay.
+
+2006-08-03 Kim F. Storm <storm@cua.dk>
+
+ * edmacro.el (edmacro-fix-menu-commands): Ignore switch-frame.
+
+2006-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs-util.el (cvs-get-buffer-create): Obey `noreuse' even if `name'
+ doesn't look like a file name.
+
+ * complete.el (PC-expand-many-files): Avoid signalling an error when
+ the current directory doesn't exist. Reported by Micha,Ak(Bl Cadilhac.
+
+2006-08-02 Andreas Schwab <schwab@suse.de>
+
+ * bindings.el (mode-line-format): Simplify reference to vc-mode.
+
+2006-08-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * bindings.el (map): Make mode-line-buffer-identification-keymap
+ before defining propertized-buffer-identification.
+
+2006-08-01 Richard Stallman <rms@gnu.org>
+
+ * bindings.el (mode-line-format): Adjust spacing around vc-mode.
+
+2006-08-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-find-source-frame): Make nil the
+ default value.
+ (gdb-find-source-frame): New function.
+ (menu): Add to menu bar.
+
+2006-08-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-core.el (font-lock-extend-region-function)
+ (font-lock-extend-region): Move to font-lock.el.
+
+ * font-lock.el (font-lock-extend-region-function)
+ (font-lock-extend-region): Move from font-core.el. Simplify.
+
+ * jit-lock.el (jit-lock-fontify-now): Cause a second redisplay
+ if needed.
+ (jit-lock-start, jit-lock-end): New dynamic scoped vars.
+ (jit-lock-after-change-extend-region-functions): New hook.
+ (jit-lock-after-change): Use it instead of hard-coding font-lock code.
+
+ * font-lock.el (font-lock-extend-jit-lock-region-after-change): New fun.
+ (font-lock-turn-on-thing-lock): Use it.
+
+ * longlines.el (longlines-show-region): Make it work on read-only
+ buffers as well.
+
+2006-08-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-set-hollow): Check for gud-last-last-frame.
+
+2006-07-31 Richard Stallman <rms@gnu.org>
+
+ * progmodes/vhdl-mode.el (vhdl-speedbar-display-directory)
+ (vhdl-speedbar-display-projects): Update old obsolete
+ speedbar variable names.
+
+2006-07-31 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-find-source-frame): New option.
+ (gdb-stopped): Use it.
+
+ * t-mouse.el (t-mouse-mode): Use set-process-query-on-exit-flag.
+
+2006-07-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * loadhist.el (unload-feature): Handle new `(t . SYMBOL)' format
+ for load-history elements.
+
+2006-07-29 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (convert-standard-filename): For Cygwin, replace
+ characters not allowed in Windows file names.
+ (make-auto-save-file-name): Add Cygwin to the list of systems
+ where the auto-save file name needs to be run through
+ convert-standard-filename.
+
+2006-07-29 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * window.el (bw-get-tree): Don't integerp subtree if it's nil.
+
+2006-07-28 Richard Stallman <rms@gnu.org>
+
+ * bindings.el (mode-line-frame-identification)
+ (propertized-buffer-identification): Centralize the code
+ to initialize the variable.
+
+ * progmodes/grep.el (grep-default-command): Catch errors from
+ wildcard-to-regexp.
+
+2006-07-29 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-tag-default): New function.
+ (grep-default-command, grep-read-regexp): Use it.
+ (grep-read-files): Use car of grep-files-history or grep-files-aliases
+ as default if nothing else applies.
+
+2006-07-28 Bill Atkins <atkinw@rpi.edu> (tiny change)
+
+ * wdired.el (wdired-change-to-wdired-mode, wdired-change-to-dired-mode):
+ Throw error if buffer is not in Dired and Wdired mode, respectively.
+
+2006-07-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-no-edit): Revert 2006-07-27 change, so that
+ self-insert-command keys don't activate buttons.
+ (custom-mode-map): Just don't bind "\C-m" to `custom-no-edit'.
+
+2006-07-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-breakpoints-custom): Use different
+ faces for enable character.
+
+2006-07-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * Makefile.in (recompile): Update comment to reflect change
+ on 2004-04-21.
+
+2006-07-27 Richard Stallman <rms@gnu.org>
+
+ * cus-edit.el (customize-package-emacs-version-alist): Doc fix.
+ (customize-package-emacs-version): Change msg when pkg has no entry.
+ (custom-no-edit): On a button, do like widget-button-press.
+
+2006-07-27 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Fix bindings for C-tab,
+ S-tab and C-S-tab.
+
+2006-07-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/which-func.el (which-function): Fix documentation/
+ comment typo.
+
+2006-07-26 Richard Stallman <rms@gnu.org>
+
+ * textmodes/ispell.el (ispell-word): If we replace the word,
+ move point to the end. Insert before deleting.
+
+2006-07-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * subr.el (sit-for): Use new SECONDS arg of read-event instead of
+ a timer.
+
+2006-07-26 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-backward-image): Add prefix argument. Add error
+ when at first image.
+ (tumme-forward-image): Add prefix argument. Add error when at last
+ image.
+
+2006-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * tabify.el (tabify-regexp): Use more specific regexps.
+ (tabify): Avoid modifying the buffer unnecessarily.
+
+2006-07-25 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-track-original-file): Add `buffer-live-p' check.
+ (tumme-format-properties-string): Handle empty `buf'.
+ (tumme-get-comment): Change variable names inside `let'.
+ Add missing `let' variable that cause font-lock problems.
+ (tumme-write-comments): Change variable names inside `let'.
+ Add missing `let' variable that cause font-lock problems.
+ (tumme-forward-image): Rename from `tumme-forward-char'.
+ (tumme-backward-image): Rename from `tumme-backward-char'.
+
+2006-07-25 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/ld-script.el (ld-script-keywords)
+ (ld-script-font-lock-keywords, ld-script-builtins): Update keywords
+ and add comments.
+
+2006-07-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers)
+ (gdb-resync, gdb-prompt, gdb-starting, gdb-exited, gdb-stopped)
+ (gdb-set-gud-minor-mode-existing-buffers-1): Use different faces
+ for status indicator.
+
+2006-07-24 Richard Stallman <rms@gnu.org>
+
+ * xml.el (xml-parse-file): Clean up, and use with-temp-buffer.
+
+ * subr.el (dolist, dotimes): Use interned symbols for locals.
+ (--dotimes-limit--, --dolist-tail--): New defvars.
+ (looking-back): Doc fix.
+
+ * replace.el (replace-match-string-symbols): Handle dotted lists.
+
+2006-07-24 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-write-tags): Add.
+ (tumme-write-comments): Add.
+ (tumme-tag-files): Change to use `tumme-write-tags'.
+ (tumme-tag-thumbnail): Change to use `tumme-write-tags'.
+ (tumme-dired-comment-files): Change to use `tumme-write-comments'.
+ (tumme-save-information-from-widgets): Change to use
+ `tumme-write-comments' and `tumme-write-tags'.
+ (tumme-comment-thumbnail): Change to use `tumme-write-comments'.
+ (tumme-write-tag): Remove.
+ (tumme-write-comment): Remove.
+ (tumme-display-previous-thumbnail-original): Remove empty line.
+ (tumme-widget-list): Add punctuation.
+
+2006-07-24 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-line-up): Add an extra check for end of buffer.
+
+2006-07-24 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-def.el (pgg-truncate-key-identifier): Truncate the key ID to 8
+ letters from the end. Thanks to "David Smith" <davidsmith@acm.org>
+ and andreas@altroot.de (Andreas V,Av(Bgele).
+
+2006-07-23 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * mouse.el (mouse-on-link-p): Doc fix.
+
+2006-07-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * emacs-lisp/find-func.el (find-function-search-for-symbol):
+ Handle "C-h f `".
+
+2006-07-22 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * ibuffer.el (ibuffer-formats): Use left alignment for the mode
+ column.
+
+2006-07-22 Matt Hodges <MPHodges@member.fsf.org>
+
+ * textmodes/table.el: Add move-beginning-of-line and
+ move-end-of-line to Point Motion Only Group.
+
+2006-07-22 Eric Hanchrow <offby1@blarg.net> (tiny change)
+
+ * progmodes/delphi.el (delphi-fill-comment): Use save-restriction.
+
+2006-07-22 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * startup.el (user-mail-address): Initialize from the `EMAIL'
+ environment variable first. Document this.
+ (command-line): Ditto.
+
+2006-07-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * help-mode.el (help-function-def, help-variable-def)
+ (help-face-def): Print a message in the minibuffer.
+
+2006-07-21 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Fix key bindings
+ syntax. Bind S-return, C-M-., C-TAB, S-TAB and C-S-TAB.
+
+2006-07-21 Eli Zaretskii <eliz@gnu.org>
+
+ * dos-w32.el (find-buffer-file-type-coding-system): Support calls
+ where `(nth 1 command)' is a cons cell. Doc fix.
+
+ * textmodes/po.el (po-find-charset): Doc fix.
+
+2006-07-21 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-unprotected, allout-e-o-prefix-p)
+ (allout-beginning-of-current-line, allout-end-of-current-line)
+ (allout-next-visible-heading, allout-open-topic)
+ (allout-kill-topic, allout-yank-processing, allout-resolve-xref)
+ (allout-flag-current-subtree, allout-show-to-offshoot)
+ (allout-hide-current-entry, allout-show-current-branches)
+ (allout-hide-region-body, allout-old-expose-topic)
+ (allout-listify-exposed, allout-latex-verbatim-quote-curr-line)
+ (allout-mark-topic, allout-adjust-file-variable): Enclose scopes
+ containing `beginning-of-line' and `end-of-line' with
+ `inhibit-field-text-motion' t.
+
+2006-07-21 Eli Zaretskii <eliz@gnu.org>
+
+ * frame.el (focus-follows-mouse): Document that it doesn't have
+ any effect on MS-Windows.
+
+2006-07-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-quoted-subshell): Further fix last change.
+
+2006-07-20 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-previous-alg-entry): Remove variable.
+
+ * calc/calc-aent.el (calc-alg-entry-history, calc-quick-calc-history):
+ New variables.
+ (calc-alg-entry): Use `calc-alg-entry-history'.
+ (calc-do-quick-calc): Use `calc-quick-calc-history'.
+ Remove reference to `calc-previous-alg-entry'.
+ (calcAlg-edit, calcAlg-enter): Remove reference to
+ `calc-previous-alg-entry'.
+ (calcAlg-previous): Use `previous-history-element' instead of
+ `calc-previous-alg-entry'.
+ (calc-do-alg-entry): Use history when calling `read-from-minibuffer'.
+ Change keybinding for `calcAlg-plus-minus', add keybindings for
+ `previous-history-element' and `next-history-element'.
+
+ * calc/calc-rewr.el (calc-match): Remove reference to
+ `calc-previous-alg-entry'.
+
+ * calc/calc-sel.el (calc-selection-history): New variable.
+ (calc-enter-selection, calc-sel-mult-both-sides)
+ (calc-sel-add-both-sides): Use `calc-selection-history'.
+
+ * calc/calc-map.el (calc-get-operator-history): New variable.
+ (calc-get-operator): Use `calc-get-operator-history'.
+
+ * calc/calcalg3.el (calc-curve-fit-history): New variable.
+ (calc-curve-fit): Use `calc-curve-fit-history'.
+
+2006-07-20 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-safe-coding-system): Fix the
+ way of deciding eol-type of the coding system.
+
+2006-07-20 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-langs.el (c-emacs-variable-inits): New variable.
+ (c-lang-setvar): New macro.
+ (c-make-init-lang-vars-fun): Use the initialization forms in
+ c-emacs-variable-inits in addition to those in c-lang-variable-inits.
+ (comment-start, comment-end, comment-start-skip): Change these from
+ c-lang-defvar's to c-lang-setvar's.
+
+ * progmodes/cc-mode.el (c-make-emacs-variables-local): New macro,
+ which calls make-local-variable on the elements of
+ c-emacs-variable-inits.
+ (c-init-language-vars-for): Call this new macro.
+
+2006-07-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist) <gnu>:
+ Try to rule out false positives due to time stamps.
+ (compilation-mode-font-lock-keywords): Remove rules made redundant
+ because of the above change. Add `segmentation fault' to the known and
+ highlighted compilation termination messages.
+
+2006-07-19 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-find-ignored-directories):
+ Add .svn and _darcs to list.
+
+2006-07-19 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * dired.el (dired-mode-map): Add key binding `C-te' for
+ `tumme-dired-edit-comment-and-tags'.
+
+ * tumme.el (tumme-display-thumbnail-original-image): Make sure
+ image display buffer is displayed before call to
+ `tumme-display-image'.
+ (tumme-dired-display-image): Make sure image display buffer is
+ displayed before call to `tumme-display-image'.
+ (tumme-mouse-display-image): Make sure image display buffer is
+ displayed before call to `tumme-display-image'.
+ (tumme-widget-list): Add.
+ (tumme-dired-edit-comment-and-tags): Add.
+ (tumme-save-information-from-widgets): Add.
+
+2006-07-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-quoted-subshell): Fix last change.
+
+2006-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-font-lock-keywords-1):
+ Revert inadvertently installed patch hunk.
+
+ * progmodes/compile.el (compilation-find-file): Handle the
+ cases where the user selects a non-existent file.
+
+2006-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bindings.el (minibuffer-local-map): Rebind TAB so it inserts a \t.
+
+2006-07-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * subr.el (sit-for): Just sleep-for if noninteractive.
+
+2006-07-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/autoload.el (make-autoload): Use new arg.
+
+ * custom.el (custom-autoload): Add `noset' argument.
+ (custom-push-theme): Don't autoload the variable, let callers do it.
+ (custom-theme-set-variables): Autoload the variable if necessary.
+
+ * cus-edit.el (custom-variable-state-set): If the variable was
+ originally set outside custom, but to the same value as the default,
+ consider it to be standard.
+
+ * Makefile.in (mh-loaddefs.el): Finish setting up the default empty
+ file *before* telling Emacs to add the autoloads, in case it fails.
+
+ * progmodes/sh-script.el (sh-quoted-subshell): Don't match escaped `.
+ Use `cond', push', and `dolist'.
+
+2006-07-17 Richard Stallman <rms@gnu.org>
+
+ * image-mode.el (tar-superior-buffer, archive-superior-buffer):
+ Add defvars to silence warnings.
+
+2006-07-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Don't highlight "Compiling file" messages as error.
+
+ * dired-aux.el (dired-compress-file): Confirm again if gzipped
+ file already exists.
+
+2006-07-16 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * find-file.el (ff-special-constructs): Doc fix. Also, for C/C++
+ entry, don't assign to free var; simply return the extracted filename.
+ (ff-treat-as-special): Incorporate common preamble from callers.
+ (ff-other-file-name, ff-find-the-other-file):
+ Update call to ff-treat-as-special.
+
+ * progmodes/ada-mode.el (ada-mode): Rewrite ff-special-constructs init.
+
+2006-07-16 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-get-comment): Fix bug.
+
+2006-07-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el: Remove spurious * in docstrings.
+
+2006-07-14 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-run-unit-tests-on-load): Rectify docstring
+ grammar.
+ (allout-beginning-of-current-line): Beware beginning of buffer.
+ Also, a comment is simplified.
+ (allout-hotspot-key-handler): Only set allout-post-goto-bullet
+ when appropriate. (This fix enables use for other than
+ bullet-hotspot operation.)
+ (allout-hide-current-subtree): While escalating to sibling-close,
+ make sure to situate on a topic.
+
+2006-07-14 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-delete-selection)
+ (cua-toggle-set-mark): New defcustoms.
+ (cua-rectangle-modifier-key): Add `alt' modifier.
+ (cua-replace-region): Don't delete if cua-delete-selection is nil.
+ (cua-set-mark): Don't clear mark if cua-toggle-set-mark is nil.
+ Suggested by Klaus Zeitler <kzeitler@lucent.com>.
+
+ * emulation/cua-rect.el (cua-help-for-rectangle): Add `alt' modifier.
+
+2006-07-14 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Require 'cl during byte-compilation/interactive load,
+ for the `assert' macro.
+ (allout-mode-deactivate-hook): New hook, run when allout mode
+ deactivates.
+ (allout-developer): New allout customization subgroup.
+ (allout-run-unit-tests-on-load): New allout-developer
+ customization variable, when true allout unit tests are run towards
+ end of file load/eval.
+ (allout-inhibit-auto-fill): Disable auto-fill activity even during
+ auto-fill-mode.
+ (allout-resumptions): Remove, to be replaced by...
+ (allout-add-resumptions): Register variable settings to be
+ reinstated by `allout-do-resumptions'. The settings are made
+ buffer-local, but the locality/globality of the suspended setting
+ is restored on resumption.
+ (allout-do-resumptions): Reinstate all settings suspended using
+ `allout-add-resumptions'.
+ (allout-test-resumptions): Unit tests (and intermediate variables)
+ for resumptions.
+ (allout-tests-globally-unbound, allout-tests-globally-true)
+ (allout-tests-locally-true): Intermediate variables for
+ resumptions unit tests.
+ (allout-overlay-preparations): Replaces `allout-set-overlay-category'.
+ (allout-exposure-category): Replaces 'allout-overlay-category variable.
+ (allout-mode): Use `allout-add-resumptions' and `allout-do-resumptions'
+ instead of retired `allout-resumptions'. For hook functions, use
+ `local' parameter so hook settings are created and removed as
+ buffer-local settings. Revise (resumptions) setting
+ auto-fill-function so it is set only if already active. The
+ related fill-function settings are all made in either case, so
+ that activating auto-fill-mode activity will have the custom
+ allout-mode behaviors (hanging indent on topics, if configured for it).
+ Remove all allout-exposure-category overlays on mode deactivation.
+ (allout-hotspot-key-handler): New function extracted from
+ `allout-pre-command-business', so the functionality can be used
+ for other purposes, eg as a binding in an overlay.
+ (allout-pre-command-business): Use new `allout-hotspot-key-handler'.
+ (allout-auto-fill): Respect new `allout-inhibit-auto-fill'
+ customization variable.
+ (allout-run-unit-tests): Run the (currently quite small)
+ repertoire of unit tests. Called just before the provide iff user
+ has customized `allout-run-unit-tests-on-load' non-nil.
+
+2006-07-14 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * emacs-lisp/authors.el (authors-aliases): Update.
+
+2006-07-14 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-display-buffer): Check for
+ gdb-source-window. Add dedicated argument.
+ (gdb-display-separate-io-buffer, gdb-append-to-inferior-io)
+ (gdb-display-breakpoints-buffer, gdb-display-stack-buffer)
+ (gdb-display-threads-buffer, gdb-display-memory-buffer)
+ (gdb-display-locals-buffer): Use it.
+
+ * progmodes/gud.el (gud-display-line): Use gdb-display-buffer.
+ Set gdb-source-window.
+
+2006-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/autoload.el (make-autoload): Remove special handling of
+ minor modes, redundant with the custom-autoload line above.
+
+2006-07-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-post-command-function): Handle open-line too.
+
+2006-07-12 Richard Stallman <rms@gnu.org>
+
+ * progmodes/grep.el (grep-last-buffer): Doc fix.
+
+ * info.el (Info-try-follow-nearest-node): Doc fix.
+
+ * emacs-lisp/edebug.el (edebug-instrument-function):
+ Err if find-function-noselect gives no position.
+
+ * emacs-lisp/find-func.el (find-function-search-for-symbol):
+ If can't find definition, return nil for position.
+ (find-function-do-it): Handle new return value
+ of find-definition-noselect.
+ (find-definition-noselect, find-variable-noselect): Doc fix.
+ (find-function-noselect): Doc fix.
+
+ * help-mode.el (help-variable-def): Handle find-variable-noselect
+ returning no position.
+ (help-function-def): Likewise for find-function-search-for-symbol.
+ (help-face-def): Likewise.
+
+ * help-fns.el (describe-variable): Handle find-variable-noselect
+ returning no position.
+
+ * files.el (locate-file-completion): Avoid duplicates in result.
+
+ * cus-edit.el (custom-no-edit): New command.
+ (custom-mode-map): Remap to custom-no-edit instead of
+ using suppress-keymap.
+
+2006-07-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * tumme.el (tumme-create-thumb, tumme-thumbnail-display-external)
+ (tumme-display-image, tumme-rotate-thumbnail, tumme-rotate-original)
+ (tumme-set-exif-data, tumme-get-exif-data): Use shell-command-switch.
+
+ * thumbs.el (thumbs-call-convert): Use shell-command-switch.
+
+2006-07-11 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-copy-current-file-name): Use buffer-name if
+ buffer-file-name is nil.
+
+2006-07-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (undo-ask-before-discard): Set to nil.
+
+ * vc.el (vc-exec-after): Don't delete process manually.
+ (vc-print-log): Run log-view-mode in process sentinel inside
+ inhibit-read-only. Don't shrink window due to timing issues.
+
+ * progmodes/ebrowse.el (ebrowse-display-member-buffer):
+ Avoid using with-output-to-temp-buffer, which clobbers local vars.
+
+2006-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Fix ambiguity introduced by last change.
+ (compilation-find-file): Move save-excursion to where it may
+ make sense. Fix a left over `find-file'.
+
+2006-07-11 Robert J. Chassell <bob@rattlesnake.com>
+
+ * textmodes/texinfmt.el (texinfo-format-separate-node):
+ Insert a string before point, which fits documentation, not after.
+ (texinfo-multitable-item): In a multitable row, insert any
+ additional needed @tabs and spaces.
+
+2006-07-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * tumme.el (tumme-create-thumb, tumme-thumbnail-display-external)
+ (tumme-display-image, tumme-rotate-thumbnail, tumme-rotate-original)
+ (tumme-set-exif-data, tumme-get-exif-data): Use call-process
+ instead of shell-command.
+ (tumme-create-thumbnail-buffer, tumme-create-display-image-buffer)
+ (tumme-display-thumbs, tumme-modify-mark-on-thumb-original-file)
+ (tumme-display-image, tumme-get-exif-data): Use with-current-buffer.
+ (tumme-display-properties-format, tumme-dired-insert-marked-thumbs)
+ (tumme-thumbnail-set-image-description, tumme-gallery-generate)
+ (tumme-rotate-original, tumme-get-exif-file-name): Fit to 80 columns.
+
+2006-07-11 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (sit-for): Doc fix. Specify normal arg list using fn-form.
+ Remove special case for seconds < 0. Use (redisplay t) instead.
+
+2006-07-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/cc-awk.el (c-awk-escaped-nls*): Use eval-and-compile to
+ avoid compilation error.
+
+ * subr.el (sit-for): New function.
+
+ * play/hanoi.el (hanoi-sit-for): Check sit-for return value.
+
+2006-07-10 Richard Stallman <rms@gnu.org>
+
+ * ldefs-boot.el (edebug): Update page.
+
+2006-07-10 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/authors.el (authors-ignored-files): Ignore changes
+ to FOR-RELEASE and TODO.
+
+2006-07-10 Romain Francoise <romain@orebokech.com>
+
+ * emacs-lisp/authors.el (authors-aliases): Update.
+
+2006-07-10 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-awk.el, cc-defs.el, cc-fonts.el, cc-langs.el:
+ * cc-mode.el: Changes to eradicate eval-after-load.
+
+2006-07-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/helper.el (Helper-help-scroller): Don't signal error
+ on non-char events.
+
+2006-07-09 Romain Francoise <romain@orebokech.com>
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Don't highlight start/end markers as compilation messages.
+
+ * isearch.el (isearch-yank-line): Let-bind `inhibit-field-text-motion'
+ to t.
+
+2006-07-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/fill.el (fill-region-as-paragraph): Refine last change.
+
+2006-07-08 Richard Stallman <rms@gnu.org>
+
+ * term/x-win.el (x-handle-display): Add doc string.
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix.
+
+ * subr.el (def-edebug-spec): Move here.
+ * emacs-lisp/edebug.el (def-edebug-spec): Move to subr.el.
+
+ * imenu.el (imenu-choose-buffer-index): Doc fix.
+
+2006-07-08 Romain Francoise <romain@orebokech.com>
+
+ * term/x-win.el (x-display-name): Fix typo.
+
+2006-07-08 Eli Zaretskii <eliz@gnu.org>
+
+ * hexl.el (hexl-find-file): Doc fix.
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix.
+
+2006-07-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * term/x-win.el (x-display-name): Doc fix.
+
+2006-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/fill.el (fill-delete-prefix): Don't ignore excessively
+ long prefixes.
+ (fill-region-as-paragraph): Don't round up to a whole line.
+ (fill-comment-paragraph): Don't include the code-before-the-comment
+ when calling fill-region-as-paragraph.
+
+ * international/mule.el (make-char): Remove redundancy.
+
+ * emacs-lisp/bytecomp.el (byte-compile-form): The `byte-compile'
+ property may contain an anonymous function rather than a symbol.
+
+ * pcvs-defs.el (cvs-temp-buffer-name): Fix non-hiddenness.
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist) <gnu>:
+ Use shy regexp. Fix incorrect backref to potentially unmatched group.
+
+ * dirtrack.el (dirtrack-default-directory-function): Remove.
+ (dirtrack-directory-function): Use file-name-as-directory.
+ (dirtrack-windows-directory-function): Simplify.
+ (dirtrack-forward-slash, dirtrack-backward-slash)
+ (dirtrack-replace-slash): Remove.
+ (dirtrack-toggle): Adjust comint-preoutput-filter-functions as well.
+ (dirtrack): Fix wrong parenthesizing; use match-string.
+
+ * progmodes/octave-inf.el: Remove spurious * in docstrings.
+ (inferior-octave-mode): Only change the buffer-local value of
+ comint-dynamic-complete-functions.
+ (inferior-octave-mode-map, inferior-octave-mode-syntax-table):
+ Move the initialization to the declaration.
+ (inferior-octave-complete): Remove unused var `filter'.
+
+ * shell.el (shell-mode): Only change the buffer-local value of
+ comint-dynamic-complete-functions.
+
+2006-07-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-get-todos): Skip subtree also if
+ entry is skipped because it has been scheduled.
+ (org-prepare-agenda-buffers): Don't mark buffers as modified when
+ changing `:org-archived' and `:org-comment' properties.
+
+2006-07-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * server.el (server-select-display): Don't make the temp frame
+ minibuffer-only, in case it's not a temp frame.
+ (server-process-filter): Don't delete the temp frame if it's the
+ only one we have on that display.
+
+ * files.el (find-alternate-file): Doc fix.
+
+2006-07-05 Richard Stallman <rms@gnu.org>
+
+ * files.el (abbreviate-file-name): Add save-match-data.
+
+2006-07-03 Richard Stallman <rms@gnu.org>
+
+ * faces.el (read-face-name): Doc fix.
+
+2006-07-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * net/goto-addr.el (goto-address): Mark as safe for local evals.
+
+2006-07-05 Andre Spiegel <spiegel@gnu.org>
+
+ * vc.el (vc-diff-internal): Fix prev change.
+
+2006-07-05 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/lisp-mode.el (emacs-lisp-mode-map): Use eval-buffer.
+ * play/dunnet.el (dun-load-d, dun-eval): Likewise.
+
+2006-07-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * thingatpt.el (symbol-at-point): Don't use `form-at-point' which
+ fails if the symbol contains chars like ( or '.
+ (bounds-of-thing-at-point): Remove unused vars `end' and `beg'.
+ (thing-at-point-bounds-of-url-at-point): Remove unused vars `url' and
+ `short'.
+
+2006-07-04 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (set-language-info): If LANG-ENV is
+ the current one, don't call set-language-environment, but call one
+ of set-language-environment-XXX to make INFO effective now.
+ (set-language-environment): Call set-language-environment-XXX
+ functions instead of doing the various setups directly.
+ (set-language-environment-coding-systems): Delete argument eol-type.
+ (set-language-environment-input-method)
+ (set-language-environment-nonascii-translation)
+ (set-language-environment-charset)
+ (set-language-environment-fontset)
+ (set-language-environment-unibyte): New functions.
+
+2006-07-03 Luc Teirlinck <teirllm@auburn.edu>
+
+ * locate.el (locate-update-when-revert): New option.
+ (locate-update-path): New option (suggested by Michael Albinus).
+ (locate-prompt-for-command): Whitespace change.
+ (locate-update): No longer offer to update the locate database by
+ default. Implement the two new options.
+
+2006-07-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el: Move comment about track-mouse...
+
+ * progmodes/gud.el: ...to here.
+
+2006-07-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * facemenu.el (facemenu-listed-faces): New var.
+ (facemenu-unlisted-faces): Variable deleted.
+ (facemenu-add-new-face): Use facemenu-listed-faces.
+
+ * emulation/viper-init.el, calendar/calendar.el:
+ * progmodes/make-mode.el: Delete calls to facemenu-unlisted-faces.
+
+2006-07-03 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode): Remove no invalid settings for
+ calc embedded mode.
+ (org-mode-p): New defsubst.
+ (org-save-all-org-buffers): New function.
+ (org-first-headline-recenter): Enclose outline-regexp in group
+ delimiters.
+ (org-set-tags): Keep single space after stars.
+
+2006-07-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.el (set-window-text-height): Only set window-min-height to
+ 1 if that's the requested size.
+
+ * diff-mode.el (diff-find-file-name): Obey cvs-pcl-cvs-dirchange-re.
+ (diff-unified->context, diff-context->unified)
+ (diff-reverse-direction): Make sure the end marker stays at the end.
+ (diff-mode): Add the keymap table at the end of docstring.
+ Use lexical-let rather than constructing a closure manually.
+
+ * files.el (find-file-noselect-1): Remove unused var assignment.
+ (hack-local-variables-confirm): Print lists of strings as lists of
+ strings rather than lists of symbols.
+ (abbreviate-file-name, hack-local-variables-prop-line):
+ Use match-string.
+ (hack-one-local-variable): Move `make-local-variable' nearer its use.
+ (recover-session-finish): Use line-end-position.
+
+2006-07-02 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-shell-command): Preserve current-buffer.
+
+2006-07-02 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-macroassign-regex):
+ Accept preceding keyword.
+ (makefile-gmake-statements): Reorganize, now that makepp has
+ "override" and also handle forgotten "override define".
+ (makefile-makepp-statements): Add new "global", "override export"
+ and "override global".
+
+2006-06-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/ada-mode.el (ada-which-compiler, ada-mode-menu)
+ (ada-compile-mouse-goto-error, ada-deactivate-properties)
+ (ada-no-auto-case): Fix typos in docstrings.
+
+2006-06-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * info.el (Info-find-node-2): Search for makeinfo version more
+ carefully.
+
+2006-06-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-prepare-agenda-buffers):
+ Use `invisible-OK' argument for `org-end-of-subtree'.
+ (org-export-cleanup-toc-line): Rename from `org-html-cleanup-toc-line'.
+ (org-beginning-of-item): Fix bug in regular expression for white line.
+ (org-export-as-html): Enforce space after bullet in plain list items.
+ (org-set-autofill-regexps): Require space after plain list bullet
+ for paragraph-start.
+ (org-ts-regexp3): New constant.
+ (org-at-timestamp-p): New optional argument ALSO-INACTIVE.
+ (org-timestamp-up-day, org-timestamp-down-day)
+ (org-timestamp-change): Work with inactive timestamps.
+ (org-ts-regexp1): Don't allow brackets in time stamps.
+
+2006-06-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * help-mode.el (help-xref-symbol-regexp): Add property as a keyword
+ for ignoring links.
+
+ * faces.el (read-face-name): Use it.
+
+2006-06-28 Juri Linkov <juri@jurta.org>
+
+ * buff-menu.el (list-buffers-noselect): Compare Info file
+ with the string "dir" to detect Info directory.
+
+ * complete.el (partial-completion-mode): In lambda for
+ `choose-completion-string-functions' use full function signature
+ with 4 args, and move point to the end of the minibuffer only if arg
+ `mini-p' is non-nil.
+
+2006-06-28 John Paul Wallington <jpw@pobox.com>
+
+ * ibuffer.el (ibuffer-mode): Doc fix.
+
+2006-06-28 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-context): New contexts :item-bullet,
+ :latex-fragment, :latex-preview.
+ (org-overlays-at, org-overlay-start, org-overlay-end):
+ New compatibility functions.
+ (org-inside-LaTeX-fragment-p): More accurate matching, using the
+ exact regexp that will be used during export.
+ (org-latex-regexps): New variable.
+ (org-cdlatex-mode): Improve advice for `texmathp'.
+ (turn-on-org-cdlatex): New function.
+
+2006-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-handle-font-selection): Change keys of
+ mac-atsu-font-table from strings to numbers.
+ (mac-ts-caret-position): Use also when cursor-type is nil.
+ (mac-ts-update-active-input-area): Add Mac OS Classic support.
+ Relax condition for using overlay strings.
+ Use mac-ts-caret-position face when cursor-type is nil.
+
+2006-06-26 Kim F. Storm <storm@cua.dk>
+
+ * help.el (view-emacs-news): Declare `res' in the right let* form.
+
+2006-06-25 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/rcompile.el (remote-compile): Replace ange-ftp based
+ implementation by Tramp functions.
+ Suggested by Marc Abramowitz <msabramo@gmail.com>.
+
+ * net/tramp.el (tramp-unload-tramp): Provide a doc string.
+
+2006-06-24 Yoshinori Koseki <kose@meadowy.org>
+
+ * international/fontset.el (setup-default-fontset): Fix a typo in
+ the "Oriya-Akruti" registry name.
+
+2006-06-23 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el (desktop-full-file-name): New function.
+ (desktop-kill, desktop-save, desktop-remove, desktop-read)
+ (desktop-revert): Use it.
+ (desktop-clear, desktop-save, desktop-remove): Add autoload cookie.
+ (desktop-after-read-hook): Add option list-buffers.
+ (desktop-locals-to-save): Add tab-width.
+ (desktop-save-mode, desktop-no-desktop-file-hook, desktop-save-hook):
+ Fix docstring.
+
+2006-06-23 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-cdlatex-mode-map)
+ (org-cdlatex-texmathp-advice-is-done): New variables.
+ (org-cdlatex-mode): New minor mode.
+ (org-inside-LaTeX-fragment-p, org-try-cdlatex-tab): New functions.
+ (org-cdlatex-underscore-caret, org-cdlatex-math-modify): New commands.
+ (org-export-with-archived-trees): New option.
+ (org-open-file): Remove the call to `convert-standard-filename'.
+ (org-archive-tag, org-agenda-skip-archived-trees)
+ (org-cycle-open-archived-trees)
+ (org-sparse-tree-open-archived-trees): New options.
+ (org-cycle-hide-archived-subtrees, org-hide-archived-subtrees)
+ (org-toggle-tag, org-prepare-agenda-buffers, org-agenda-skip):
+ New functions.
+ (org-agenda-toggle-archive-tag, org-toggle-archive-tag): New commands.
+ (org-agenda-mode-map): Add binding of `org-agenda-toggle-archive-tag'.
+ (org-mode-map): Add binding for `org-toggle-archive-tag'.
+ (org-timeline, org-agenda-list, org-todo-list, org-tags-view):
+ Call `org-prepare-agenda-buffers'.
+ (org-occur, org-scan-tags): Call `org-hide-archived-subtrees'.
+ (org-file-apps, org-file-apps-defaults-gnu)
+ (org-file-apps-defaults-macosx, org-file-apps-defaults-windowsnt):
+ Handle remote files by forcing them to be opened in Emacs.
+
+2006-06-23 Andre Spiegel <spiegel@gnu.org>
+
+ * vc.el (vc-diff-knows-L): New variable.
+ (vc-diff-internal): Use it to handle "diff" programs that don't
+ understand -L. This works automatically, no user action is necessary.
+
+2006-06-23 Daniel Brockman <daniel@brockman.se>
+
+ * net/rcirc.el (rcirc-default-user-full-name): Default to
+ `rcirc-default-user-name' instead of `rcirc-user-name' (which no
+ longer exists).
+ (rcirc-process-list): Check `buffer-live-p' before attempting to
+ switch to a buffer.
+
+2006-06-23 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-mode): Fix initialization of coding systems
+ based on rcirc-coding-system-alist.
+
+2006-06-23 Martin Rudalics <rudalics@gmx.at>
+
+ * cus-edit.el (customize-apropos): A better error message.
+ (top level) <debug-ignored-errors>: Extend and update the list of
+ ignored error messages.
+
+2006-06-23 Michael Ernst <mernst@alum.mit.edu>
+
+ * complete.el (PC-do-completion): Retain capitalization of user
+ input, when possible, even if completion-ignore-case is set.
+
+2006-06-23 Eli Zaretskii <eliz@gnu.org>
+
+ * generic-x.el (bat-generic-mode): Support .cmd files.
+
+ * dos-w32.el (top level): Use find-file-not-found-functions
+ instead of the obsolete find-file-not-found-hooks.
+
+2006-06-22 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-mode-font-lock-keywords): Correct regexps
+ to recognize mode name containing submodes, such as Grep/lw.
+
+2006-06-21 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-1): Check for move-end-of-line instead of
+ end-of-line when setting temporary-goal-column.
+
+2006-06-21 Miles Bader <miles@gnu.org>
+
+ * play/cookie1.el (cookie): Work properly when there's only one entry.
+
+2006-06-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-exited): Ensure overlay arrow gets killed.
+ (gdb-frame-handler): Generalize frame regexp for templates.
+
+2006-06-20 Glenn Morris <rgm@gnu.org>
+
+ * calendar/appt.el (appt-display-format): Default value must be
+ one of the customize options.
+
+2006-06-20 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Update key availability info.
+ Bind C-return.
+
+ * term.el (term-delete-lines, term-insert-lines): Clarify comments.
+
+2006-06-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (hack-local-variables): Run `hack-local-variables-hook'
+ whether or not a local variables list is defined.
+
+ * msb.el (msb): Move `sit-for' hack here to handle both
+ "mouse-down and drag" and "mouse-up and select" situations.
+ (mouse-select-buffer): Move `sit-for' hack to `msb'.
+
+2006-06-20 Kenichi Handa <handa@m17n.org>
+
+ * international/characters.el (word-combining-categories):
+ Add entries for 2-byte Han characters.
+
+2006-06-19 Richard Stallman <rms@gnu.org>
+
+ * bindings.el (mode-line-format): Save some mode line space.
+
+ * files.el (find-file-noselect): Improve the question wording.
+ (basic-save-buffer-2): Mask UMASK against 666.
+
+ * mouse.el (mouse-drag-vertical-line-rightward-window): New function.
+ (mouse-drag-vertical-line): Call it.
+
+ * cus-edit.el (customize-option, customize-option-other-window):
+ Error if SYMBOL is nil.
+
+2006-06-19 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el: Require noutline, also on XEmacs.
+ (org-end-of-subtree): Return point.
+ (org-dblock-start-re, org-dblock-end-re): New constants.
+ (org-create-dblock, org-prepare-dblock, org-map-dblocks)
+ (org-dblock-update, org-update-dblock, org-beginning-of-dblock)
+ (org-update-all-dblocks, org-find-dblock): New functions.
+ (org-collect-clock-time-entries): New function.
+ (org-html-handle-time-stamps): Never export CLOCK timeranges.
+ (org-fixup-indentation): Modify to deal correctly with lines
+ starting with TAB. Only one argument DIFF now.
+ (org-demote, org-promote): Call `org-fixup-indentation' with just
+ one argument, DIFF.
+ (org-mode): Don't mark buffer as modified when aligning tables.
+ (org-clock-sum): Don't mark buffer modified when adding time sum
+ properties.
+ (org-export-as-html): Add support for a link validation function.
+ (org-archive-all-done): New function.
+ (org-archive-subtree): New prefix argument. When set, archive all
+ done subtrees in this buffer.
+ (org-remove-clock-overlays)
+ (org-remove-occur-highlights): Use `org-inhibit-highlight-removal'.
+ (org-inhibit-highlight-removal): New variable, for dynamic scoping.
+ (org-put-clock-overlay): Don't swallow last headline character
+ when displaying overlay.
+ (org-store-link): Link to `image-mode' with just the file name.
+
+2006-06-18 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-special-read-and-insert-char):
+ Use read-key-sequence.
+ (viper-after-change-undo-hook): Misc enhancements.
+ (viper-after-change-undo-hook): New hook.
+ (viper-undo): Use viper-after-change-undo-hook.
+ (viper-add-newline-at-eob-if-necessary): Widen before making changes.
+ (viper-next-line-at-bol): If point is on a widget or a button, simulate
+ clicking on that widget/button.
+
+ * emulation/viper.el (viper-mode): Allow a separate cursor color
+ in Emacs state.
+
+ * ediff-diff.el (ediff-test-patch-utility): Catch errors.
+ (ediff-actual-diff-options, ediff-actual-diff3-options): New variables.
+ (ediff-set-actual-diff-options): New function.
+ (ediff-reset-diff-options, ediff-toggle-ignore-case):
+ Use ediff-set-actual-diff-options.
+ (ediff-extract-diffs): Catch errors.
+ (ediff-whitespace): Add non-breakable space.
+ (ediff-same-file-contents): Catch errors.
+
+ * ediff-mult.el (ediff-collect-custom-diffs):
+ Save coding-system-for-read.
+
+ * ediff-vers.el (ediff-keep-tmp-versions): New variable.
+ (ediff-vc-internal, ediff-vc-merge-internal):
+ Use ediff-delete-version-file.
+ (ediff-delete-version-file): New function.
+
+ * ediff-wind.el (ediff-control-frame-parameters): Set frame fringes.
+
+ * ediff.el (ediff-directories, ediff-directory-revisions)
+ (ediff-merge-directories, ediff-merge-directories-with-ancestor)
+ (ediff-directories-internal, ediff-merge-directory-revisions)
+ (ediff-merge-directory-revisions-with-ancestor)
+ (ediff-directories3): Use read-directory-name.
+
+2006-06-18 Ralf Angeli <angeli@caeruleus.net>
+
+ * textmodes/tex-mode.el (tex-font-lock-match-suscript):
+ Remove superfluous part of regexp for brace matching which is handled
+ by `scan-lists' call.
+
+2006-06-16 Richard Stallman <rms@gnu.org>
+
+ * obsolete/options.el (list-options): Put "obsolete" msg in buffer.
+
+ * files.el (basic-save-buffer-2): For a new precious file,
+ use the default modes in the return value.
+
+ * facemenu.el (facemenu-color-alist): Doc fix.
+
+ * cus-edit.el (custom-guess-name-alist): Recognize `-flag'.
+
+2006-06-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * cus-start.el (all): Add mac-ts-script-language-on-focus.
+
+ * term/mac-win.el (mac-text-encoding-ascii): New constant.
+ (mac-utxt-to-string): Use it.
+ (mac-ts-update-active-input-area): Use mac-ae-number.
+
+2006-06-15 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-handle-scroll, term-delete-lines)
+ (term-insert-lines): Fix off by one errors.
+
+2006-06-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * net/tramp.el (tramp-touch): Use UTC to express time.
+
+2006-06-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * mail/sendmail.el (mail-send): Search explicitly for
+ mail-header-separator when checking for corrupted header lines.
+
+2006-06-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-same-frame): New option.
+ (gud-old-arrow, gdb-frame-begin, gdb-printing): New variables.
+ (gdb-init-1): Initialise them.
+ (gdb-starting): Reset gdb-printing
+ (gdb-starting): Save value of gud-overlay-arrow-position.
+ (gdb-frame-begin): Set gdb-frame-begin, gdb-printing.
+ (gdb-stopped): Don't look for source if calling procedure e.g "p a ()".
+ Use gdb-*-gdb-buffer conditionally on gdb-same-frame.
+ (gdb-frame-gdb-buffer): Keep menu bar, tool bar for GUD buffer.
+
+2006-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs.el (cvs-retrieve-revision): Use decode-coding-inserted-region.
+
+2006-06-13 Martin J. Reed <mjreed@essex.ac.uk> (tiny change)
+
+ * net/ldap.el (ldap-ldapsearch-args): Default to SASL search.
+ (ldap-search-internal): Keep error messages, and a regexp fix.
+
+2006-06-12 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * files.el (hack-local-variables-confirm):
+ Display string value using its printed representation.
+
+2006-06-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * server.el (server-edit): No-op if no server buffers exist.
+
+2006-06-11 Robert J. Chassell <bob@rattlesnake.com>
+
+ * textmodes/page-ext.el (pages-directory-for-addresses):
+ Including `pages-directory-address-mode' in the function results
+ in the message "Buffer in which pages were found is deleted".
+
+2006-06-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-mode-map): Add bindings for
+ clocking functions.
+
+ (org-agenda-clock-in, org-check-running-clock)
+ (org-clock-out-if-current, org-remove-clock-overlays)
+ (org-put-clock-overlay): New functions.
+ (org-clock-marker, org-clock-file-total-minutes)
+ (org-clock-overlays): New variables.
+ (org-clock-display, org-clock-sum, org-clock-cancel)
+ (org-clock-out, org-clock-in): New commands.
+ (org-export): New function.
+ (org-emph-re): New constant.
+ (org-set-emph-re, org-do-emphasis-faces): New functions.
+ (org-emphasis-regexp-components, org-emphasis-alist): New options.
+ (org-set-font-lock-defaults): Call `org-do-emphasis-faces'.
+ (org-export-html-convert-emphasize): Use the configurable emphasis.
+ (org-cleaned-string-for-export): Make multiline emphasis visible
+ to the exporter. New optional argument PARAMETERS.
+ (org-export-as-html): Specify :emph-multiline parameter to
+ `org-cleaned-string-for-export'.
+
+2006-06-10 Richard Stallman <rms@gnu.org>
+
+ * help.el (help-for-help-internal): Clean up help text.
+
+2006-06-10 Andreas Schwab <schwab@suse.de>
+
+ * language/ethio-util.el (ethio-fidel-to-java-buffer): Fix quoting
+ in doc string.
+
+ * progmodes/cperl-mode.el (cperl-short-docs): Likewise.
+
+2006-06-09 Karl Chen <quarl@cs.berkeley.edu>
+
+ * progmodes/make-mode.el (makefile-fill-paragraph): Don't remove
+ spaces after the comment start.
+
+2006-06-09 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * play/pong.el (pong-init-buffer):
+ Fill buffer with spaces instead of ^A.
+
+ * textmodes/ispell.el (ispell-kill-ispell): If ispell has been
+ launched asynchronously, delete its process instead of being cool.
+ (ispell-async-processp): Check for `delete-process' existence
+ instead of `kill-process' one for consistency.
+
+2006-06-09 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers-1)
+ (gdb-prompt, gdb-set-gud-minor-mode-existing-buffers): Show status
+ in mode line at startup.
+
+2006-06-08 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-take-first-match, ido-push-dir-first): New commands.
+ (ido-init-completion-maps): Bind them to M-SPC and M-v.
+ (ido-copy-current-file-name): Repeating C-w inserts whole file name.
+ (ido-file-internal): Pass full file name to write-file.
+ (ido-read-internal): Only pop stack elements automatically if they
+ actually match an existing directory or file name.
+
+2006-06-07 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (find-auto-coding): Don't handle the short
+ name `char-trans'.
+
+ * files.el (hack-local-variables-prop-line)
+ (hack-local-variables): Cancel the previous change.
+
+2006-06-06 Jesper Harder <harder@phys.au.dk>
+
+ * ediff-diff.el (ediff-test-utility): Protect against file-error.
+
+2006-06-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * diff-mode.el (diff-mode): Set buffer-read-only to t when
+ diff-default-read-only is non-nil.
+ (diff-hunk-kill, diff-file-kill, diff-split-hunk)
+ (diff-refine-hunk): Set inhibit-read-only to t.
+
+ * diff.el (diff-sentinel, diff): Set inhibit-read-only to t when
+ modifying the *Diff* buffer.
+ (diff-process-filter): New filter function for diff process that
+ sets inhibit-read-only to t when modifying the *Diff* buffer.
+
+2006-06-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-archive-subtree): Use end-of-subtree as
+ insertion point and control the number of empty lines.
+ (org-paste-subtree): Limit the number of empty lines at the end of
+ the inserted tree.
+ (org-agenda): Use buffer name of current file for narrowing.
+ (org-export-as-xml): Command removed.
+ (org-export-xml-type): Option removed.
+ (org-mode-map): Call `org-export-as-xoxo' directly.
+ (org-get-indentation): New optional argument LINE.
+ (org-fix-indentation, org-remove-tabs): New functions.
+ (org-export-as-ascii, org-ascii-level-start): Determine and apply
+ correct indentation for headlines that are converted it items.
+ (org-skip-comments): Remove table lines that contain narrowing
+ cookies but no other non-empty fields.
+ (org-set-tags): Allow groups of mutually exclusive tags.
+ (org-cmp-time): Sort 24:21 before items without time.
+ (org-get-time-of-day): Fix the interpretation of 12pm and 12am.
+ (org-open-at-point): Require double colon also for numbers.
+
+2006-06-06 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-default-file-method, ido-default-buffer-method):
+ Make choice values consistent with corresponding command names.
+ (ido-visit-buffer): Update accordingly. Default to selected-window.
+
+2006-06-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-running): Fix doc string.
+ (gud-menu-map): Use :visible instead fo :enable for debugger test.
+ (gud-tooltip-modes): Add python-mode.
+ (gud-tooltip-print-command): Add pdb. Remove perldb.
+
+2006-06-05 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (bootstrap, $(lisp)/mh-e/mh-loaddefs.el):
+ Quote $(EMACS).
+
+2006-06-05 Richard Stallman <rms@gnu.org>
+
+ * faces.el (defined-colors): Doc fix.
+
+2006-06-05 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * vc.el (vc-process-filter): Inhibit undo info collection around
+ call to insert.
+ (vc-setup-buffer): Likewise for call to erase-buffer.
+ (vc-do-command): Likewise for call to process-file.
+
+2006-06-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Use a conditional help echo
+ for gud-go.
+ (gud-common-init): Other debuggers may trigger error.
+
+2006-06-05 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (find-auto-coding):
+ Handle enable-character-translation in file header.
+
+2006-06-04 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/authors.el (authors-aliases): Add mode aliases.
+ (authors-fixed-entries): Fix spelling.
+ (authors-canonical-file-name): Don't report error for wildcards.
+
+ * help.el (view-emacs-news): Rewrite to support new NEWS,
+ NEWS.major, and NEWS.1-17 file naming. Add more intelligence,
+ e.g. version 10 matches 1.10, and don't be confused by version 1.1
+ being a prefix of 1.12 (etc). A numeric prefix arg also works.
+
+2006-06-03 Vivek Dasmohapatra <vivek@etla.org>
+
+ * progmodes/sh-script.el (sh-quoted-exec): New face for quoted
+ exec constructs like `foo bar`.
+ (sh-quoted-subshell): New helper function to search for a possibly
+ nested subshell (like `` or $()) within a "" quoted string.
+ (sh-font-lock-keywords-var): Add sh-quoted-exec for Bash.
+ (sh-apply-quoted-subshell): Flag quote characters inside a
+ subshell, which is itself already in a quoted region, as
+ punctuation, since this is the closest to what they actually are.
+ (sh-font-lock-syntactic-keywords): Add sh-quoted-subshell and
+ sh-apply-quoted-subshell.
+ (sh-font-lock-syntactic-face-function): Apply the new face for
+ text inside `` instead of the old font-lock-string-face.
+
+2006-06-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-ts-active-input-overlay): Add defvar.
+ (mac-ae-number, mac-ae-frame, mac-ae-script-language)
+ (mac-bytes-to-text-range, mac-ae-text-range-array)
+ (mac-ts-update-active-input-buf, mac-split-string-by-property-change)
+ (mac-replace-untranslated-utf-8-chars, mac-ts-update-active-input-area)
+ (mac-ts-unicode-for-key-event): New functions.
+ (mac-handle-toolbar-switch-mode): Use mac-ae-frame.
+ (mac-handle-font-selection): Use mac-ae-number.
+ (mac-ts-active-input-buf, mac-ts-update-active-input-area-seqno):
+ New variables.
+ (mac-ts-caret-position, mac-ts-raw-text, mac-ts-selected-raw-text)
+ (mac-ts-converted-text, mac-ts-selected-converted-text)
+ (mac-ts-block-fill-text, mac-ts-outline-text)
+ (mac-ts-selected-text, mac-ts-no-hilite): New faces.
+ (mac-ts-hilite-style-faces): New constant.
+ (mac-apple-event-map): Bind text input events.
+ (mac-dispatch-apple-event): Use command-execute instead of
+ call-interactively.
+ (global-map): Don't bind mac-apple-event.
+ (special-event-map): Bind mac-apple-event.
+
+2006-06-02 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (EMACS): Remove quotes from the Emacs executable
+ file name.
+ (emacs): Enclose the value of $(EMACS) in quotes.
+
+2006-06-02 Juri Linkov <juri@jurta.org>
+
+ * international/mule.el (sgml-html-meta-auto-coding-function):
+ Remove the condition `(search-forward "<html" size t)'.
+ Replace `\"' with `[\"']?' in `re-search-forward'.
+
+2006-06-02 Kenichi Handa <handa@m17n.org>
+
+ * files.el (hack-local-variables-prop-line): Ignore `char-trans'
+ as well as `coding'.
+ (hack-local-variables): Likewise.
+
+ * international/mule.el (enable-character-translation):
+ Put permanent-local and safe-local-variable properties.
+ (find-auto-coding): Handle char-trans: tag.
+
+2006-06-02 Juri Linkov <juri@jurta.org>
+
+ * international/mule.el (sgml-html-meta-auto-coding-function):
+ Limit the search by the end of the HTML header (if any).
+
+2006-06-01 Richard Stallman <rms@gnu.org>
+
+ * subr.el (with-current-buffer): Doc fix.
+
+2006-06-02 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist::gcov-*):
+ Almost rewrite. Underlines over all lines of gcov output are too
+ uncomfortable to read. Suggested by Dan Nicolaescu.
+
+2006-06-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/inf-lisp.el (inferior-lisp-mode): Doc fixes.
+
+ * shell.el (shell-mode): Use shell-mode-map in docstring.
+
+ * comint.el (comint-send-input): Do not add help-echo and
+ mouse-face to input if `comint-use-prompt-regexp' is non-nil.
+
+2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el: Change x-menu-bar-start to menu-bar-open.
+
+2006-06-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-look-up-stack): New variable.
+ (gdb-stopped, gdb-info-stack-custom): If there is no source info
+ look up the stack and pop up GUD buffer if necessary.
+ (gdb-frames-select): Remove redundant call to gud-display-frame.
+ (gdb-info-threads-custom): Keep point at start of buffer.
+ (gdb-find-file-hook): Make it work for pre-GDB 6.4.
+
+2006-05-31 Juri Linkov <juri@jurta.org>
+
+ * replace.el (query-replace-read-from, query-replace-read-to):
+ Bind `history-add-new-input' to nil. Call `add-to-history'.
+
+2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
+
+ * textmodes/table.el: Convert all HTML tags to lower case for
+ XHTML compatibility.
+
+2006-05-31 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/compile.el:
+ (compilation-error-regexp-alist-alist::gcov-called-line):
+ Don't put face on `-' lines in gcov file. Suggested by Dan Nicolaescu.
+
+2006-05-31 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-query-cmdline, gud-common-init):
+ Revert inadvertent changes made with last commit.
+
+2006-05-30 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * textmodes/flyspell.el (turn-on-flyspell, turn-off-flyspell):
+ New functions.
+
+ * textmodes/text-mode.el (text-mode-hook): Use turn-on-flyspell.
+
+2006-05-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-highlight-todo): Make sure regexp
+ only matches in the right place.
+ (org-upcoming-deadline): New face.
+ (org-agenda-get-deadlines): Use new face `org-upcoming-deadline'.
+ (org-export-ascii-underline): Rename constant `org-ascii-underline'
+ and make it an option.
+ (org-export-ascii-bullets): New option.
+ (org-export-as-html): Many changes to emit valid XHTML.
+ (org-par-open): New variable.
+ (org-open-par, org-close-par-maybe, org-close-li-maybe): New functions.
+ (org-html-do-expand, org-section-number): Fix case in `replace-match'.
+ (org-timeline): Pass `org-timeline-show-empty-dates' to
+ `org-get-all-dates'. Interpret empty dates returned by
+ `org-get-all-dates'.
+ (org-get-all-dates): New argument EMPTY. Add dates without
+ entries to the list, mark large ranges of empty dates.
+ (org-point-in-group, org-context): New functions.
+
+2006-05-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-stop-subjob): Make it work in all buffers.
+
+ * progmodes/gdb-ui.el: Move gdb-mouse-toggle-breakpoint-* to
+ C-mouse-1. Move gdb-mouse-until to mouse-3, gdb-mouse-jump
+ to C-mouse-3 (for 2 button mice).
+ (gdb-send): Do the right thing for C-d.
+
+ * speedbar.el (speedbar-detach): Delete.
+ (speedbar-easymenu-definition-trailer): Remove speedbar-detach as
+ it breaks things.
+ (speedbar-reconfigure-keymaps): Always add extra items to pop up menu.
+
+2006-05-30 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * files.el (auto-mode-alist): Add makepp suffix and optional mk on
+ Makeppfile.
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Add makepp diagnostic.
+
+2006-05-29 Richard Stallman <rms@gnu.org>
+
+ * window.el (fit-window-to-buffer): Doc fix.
+
+ * help.el (temp-buffer-max-height): Doc fix.
+
+ * subr.el (with-current-buffer): Doc fix.
+
+2006-05-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el: Bind F10 to menu-bar-start if available.
+
+2006-05-28 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-if-xemacs, term-ifnot-xemacs): Delete, replace
+ uses with a simple test.
+ (term-set-escape-char, term-mode, term-check-kill-echo-list)
+ (term-send-raw-string, term-send-raw, term-mouse-paste)
+ (term-char-mode, term-line-mode, term-exec, term-sentinel)
+ (term-handle-exit, term-read-input-ring)
+ (term-previous-matching-input-string)
+ (term-previous-matching-input-string-position)
+ (term-previous-matching-input-from-input)
+ (term-replace-by-expanded-history, term-send-input)
+ (term-skip-prompt, term-bol, term-send-invisible)
+ (term-kill-input, term-delchar-or-maybe-eof)
+ (term-backward-matching-input, term-check-source)
+ (term-proc-query, term-emulate-terminal)
+ (term-handle-colors-array, term-process-pager, term-pager-line)
+ (term-pager-bob, term-unwrap-line, term-word)
+ (term-dynamic-complete-filename)
+ (term-dynamic-complete-as-filename)
+ (term-dynamic-simple-complete): Replace one arm ifs with whens or
+ unlesses.
+
+2006-05-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (hack-one-local-variable-eval-safep): Don't burp if used
+ during bootstrapping.
+
+ * emacs-lisp/ewoc.el (ewoc--current-dll): Remove.
+ Basically undo the change of 2006-05-26: use extra arguments instead of
+ dynamic scoping.
+ (ewoc-locate): Remove unused var `footer'.
+
+2006-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/ewoc.el (ewoc--insert-new-node): Use ewoc--refresh-node.
+
+ * emacs-lisp/autoload.el (no-update-autoloads): Declare.
+ (generate-file-autoloads): Obey it. Return whether autoloads were
+ added at point or not.
+ (update-file-autoloads): Use this new return value.
+ Remove redundant test for the presence of an autoload cookie.
+
+ * emacs-lisp/autoload.el (autoload-find-file): New fun.
+ This one calls hack-local-variables.
+ (generate-file-autoloads, update-file-autoloads): Use it.
+
+ * textmodes/bibtex.el (bibtex-autokey-name-case-convert-function)
+ (bibtex-sort-entry-class): Add safe-local-variable predicate.
+ (bibtex-sort-entry-class-alist): Don't set the global value.
+ (bibtex-init-sort-entry-class-alist): New fun.
+ (bibtex-sort-buffer, bibtex-prepare-new-entry): Call it to compute
+ bibtex-init-sort-entry-class-alist from the buffer-local value (if any)
+ of bibtex-init-sort-entry-class.
+
+2006-05-28 Richard Stallman <rms@gnu.org>
+
+ * subr.el (load-history-regexp): If FILE is relative, insist
+ entire last name component must match it.
+ (load-history-filename-element, load-history-regexp): Doc fixes.
+
+2006-05-29 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/bindat.el (bindat-idx, bindat-raw): Rename dynamic vars
+ `pos' and `raw-data' for clarity, as eval forms may access these.
+
+2006-05-28 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/bindat.el (bindat--unpack-u8): Use aref also for strings.
+
+2006-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/make-mode.el (makefile-browser-map)
+ (makefile-mode-syntax-table): Move initialization inside declaration.
+ (makefile-fill-paragraph): Use the default comment-filling code.
+
+2006-05-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * replace.el (query-replace-defaults): New variable.
+ (query-replace-read-from): Use `query-replace-defaults' for
+ default value, instead of history list.
+ (query-replace-read-to): Update `query-replace-defaults'.
+
+2006-05-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * msb.el (mouse-select-buffer): Minor fix to make popup menu work
+ with no X toolkit.
+
+2006-05-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * tumme.el (tumme-show-all-from-dir-max-files): Fix typo.
+ (tumme-show-all-from-dir): Add autoload.
+
+2006-05-27 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el: Change a lot of `(if .. (progn ..)' to `(when ..)'.
+ (tumme-remove-tag): Fix bug.
+
+2006-05-27 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--create): No longer take HEADER and
+ FOOTER args. Update unique caller.
+ (ewoc-delete): Compute last node once before looping.
+ (ewoc--node-branch): Merge into unique caller.
+ (ewoc--node): Don't define constructor make-ewoc--node for this
+ structure.
+ (ewoc): Add member `hf-pp' to this structure.
+ (ewoc--wrap): New func.
+ (ewoc-create): Take additional arg NOSEP. If nil, wrap node and
+ header/footer pretty-printers. Save header/footer pretty-printer.
+ (ewoc-set-hf): Use ewoc's header/footer pretty-printer.
+
+ * pcvs.el (cvs-make-cvs-buffer): Specify NOSEP to `ewoc-create'.
+
+2006-05-27 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * dired.el (dired-mode-map): Change `tumme-tag-remove' to
+ `tumme-delete-tag'. Rename `Remove Image Tag' to `Delete Image
+ Tag'. Change "Compare directories..." to "Change Directories...".
+ Move tumme commands to Operate, Regexp and Immediate menus.
+ Change "Add Comment" to "Add Image Comment". Change "Add Image
+ Tag" to "Add Image Tags".
+
+ * tumme.el (tumme-delete-tag): Rename from `tumme-tag-remove'.
+ (tumme-setup-dired-keybindings): Change `tumme-add-remove' to
+ `tumme-delete-tag'.
+
+2006-05-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * shell.el (shell-mode): Call shell-dirtrack-mode after
+ list-buffers-directory is made a local variable, to avoid setting
+ the default value.
+
+2006-05-26 Kevin Ryde <user42@zip.com.au>
+
+ * info.el (Info-index-next): Use where-is-internal to report
+ actual binding of Info-index-next, rather than hard-coded `,'.
+
+2006-05-26 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-apropos-menu): Move "Find Key in Manual"
+ and "Find Command in Manual" to here.
+
+ * buff-menu.el (list-buffers-noselect): For Info buffers, use
+ Info-current-file as the file name.
+
+2006-05-26 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses.el (defadvice undo-more): Delete this defadvice. The undo
+ overrides will now be done a different way.
+ (ses-set-parameter): Reapply this function for undo.
+ (ses-set-header-row): Reconstruct header row during undo.
+ (ses-widen): New function.
+ (ses-goto-data, ses-reconstruct-all): Use new function.
+ (ses-command-hook): Widen buffer during undo, before unupdating
+ the cells.
+ (ses-insert-row, ses-delete-row): Widen buffer during undo.
+ (ses-load, ses-header-row): Permit empty (zero-row) spreadsheets.
+ (ses-read-cell): Avoid stupid warning for RET RET on a cell whose
+ formula hasn't been executed yet.
+
+2006-05-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * comint.el (comint-kill-whole-line): Rename arg to count.
+ Fix doc string.
+
+2006-05-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (backup-buffer-copy): Remove deleted MUSTBENEW argument
+ to copy-file.
+
+2006-05-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * simple.el (toggle-truncate-lines): Make arg optional for
+ backward compatibility.
+
+2006-05-26 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--current-dll): New var.
+ (ewoc--node-next, ewoc--node-prev, ewoc--node-nth): Don't take
+ DLL arg. Instead, use ewoc--current-dll. Update all callers.
+ (ewoc--set-buffer-bind-dll-let*): Bind ewoc--current-dll, not `dll'.
+ (ewoc--adjust): Use ewoc--current-dll.
+ (ewoc-next, ewoc-prev, ewoc-nth): Bind ewoc--current-dll.
+
+2006-05-26 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-next-item, org-previous-item): Emit more
+ compact error message.
+ (org-tags-view): Refresh category table in each file.
+ (org-table-justify-field-maybe): Remove superfluous arguments to
+ `format'.
+ (org-export-as-html): Insert "<p>" before postamble.
+ (org-paste-subtree, org-kill-is-subtree-p): Check for empty kill ring.
+
+2006-05-26 Kenichi Handa <handa@m17n.org>
+
+ * textmodes/po.el (po-find-charset): Pay attention to the case
+ FILENAME is a cons (NAME . BUFFER).
+ (po-find-file-coding-system-guts): Likewise.
+
+ * arc-mode.el (archive-set-buffer-as-visiting-file):
+ Call find-operation-coding-system with (FILENAME . BUFFER).
+
+ * tar-mode.el (tar-extract): Call find-operation-coding-system
+ with (FILENAME . BUFFER).
+
+ * international/mule.el (decode-coding-inserted-region):
+ Call find-operation-coding-system with (FILENAME . BUFFER).
+
+2006-05-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-mode.el (image-toggle-display): Use buffer contents to
+ generate image for a remote file.
+
+2006-05-25 Juri Linkov <juri@jurta.org>
+
+ * replace.el (query-replace-read-from, query-replace-read-to):
+ Remove 8th arg KEEP-ALL in read-from-minibuffer.
+
+2006-05-25 Rajesh Vaidheeswarran <rv@gnu.org>
+
+ * whitespace.el (whitespace-cleanup): Change to cleanup
+ region if one is active.
+ * whitespace.el (whitespace-cleanup-internal): New internal method.
+
+2006-05-25 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * dired.el (dired-mode-map): Add help-echo strings to tumme
+ commands. Bind `tumme-dired-display-image' to C-t i.
+
+ * tumme.el (tumme-display-image): Change documentation string slightly.
+ (tumme-dired-display-image): Add call to `display-buffer'.
+
+2006-05-25 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/bindat.el (bindat-unpack, bindat-pack):
+ Signal error if RAW-DATA is a multibyte string.
+
+2006-05-24 Richard Stallman <rms@gnu.org>
+
+ * subr.el (with-local-quit): When handling `quit' signal,
+ make a chance for quit-flag to cause a quit.
+
+ * emacs-lisp/advice.el (ad-enable-advice, ad-activate)
+ (ad-disable-advice): Add autoloads.
+
+ * subr.el (read-passwd): Copy PROMPT before changing its properties.
+
+2006-05-25 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * dired.el (dired-mode-map): Change menu items for tumme as per
+ suggestions in emacs-devel.
+
+2006-05-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * dired.el (dired-mode-map): Fix breakage.
+
+2006-05-25 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-display-dired-image): Rename to...
+ (tumme-dired-display-image): ...this.
+ (tumme-track-movement): Change default value to t.
+ (tumme-display-thumbs): Add new optional parameter DO-NOT-POP,
+ used from `tumme-next-line-and-display' and similar commands.
+
+ * dired.el (dired-mode-map): Add Thumbnail submenu under the
+ Immediate menu. Add some tumme commands there.
+
+2006-05-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * loadup.el ("jka-cmpr-hook"): Load it before it is needed.
+
+2006-05-24 Chong Yidong <cyd@mit.edu>
+
+ * menu-bar.el, international/mule-cmds.el: Remove tooltips for
+ menu entries that open submenus.
+
+2006-05-24 Alan Mackenzie <acm@muc.de>
+
+ * startup.el (command-line): For names of preloaded files, don't
+ append ".elc" (now done in Fload), and call file-truename on the
+ lisp directory.
+
+ * subr.el (eval-after-load): Fix the doc-string. Allow FILE to
+ match ANY loaded file with the right name, not just those in
+ load-path. Put a regexp matching the file name into
+ after-load-alist, rather than the name itself.
+
+ * subr.el (load-history-regexp, load-history-filename-element)
+ (do-after-load-evaluation): New functions.
+
+ * international/mule.el (load-with-code-conversion): Do the
+ eval-after-load stuff by calling do-after-load-evaluation.
+
+2006-05-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-sentinel): Condition on GUD buffer if it
+ has not been killed.
+
+2006-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Set idle timer to clean up expired Apple events.
+ (mac-ae-get-url): Redispatch Apple event on unknown scheme.
+ (mac-dispatch-apple-event): Resume Apple event if it is suspended.
+ Optionally set error message in reply.
+
+2006-05-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-open-at-point): Use renamed variable
+ `org-confirm-shell-link-function'.
+ (org-confirm-shell-link-function): Rename from
+ `org-confirm-shell-links'.
+ (org-export-directory): New function.
+ (org-export-as-ascii, org-export-as-html, org-export-as-xoxo)
+ (org-export-icalendar): Use `org-export-directory'.
+ (org-indent-item): Keep cursor position.
+ (org-link-file-path-type): New option.
+ (org-export-as-html): Fix bug with plain lists starting in
+ column 0.
+ (org-export-as-html): Remove deadline formatting, this happens
+ now already in `org-html-handle-time-stamps'.
+ (org-export-html-style): Deadline class removed.
+ (org-insert-labeled-timestamps-at-point): New option.
+ (org-cycle, org-occur, org-scan-tags): Use `org-overview' instead
+ of `hide-sublevels 1', in case the first headline is not level 1.
+ (org-overview, org-content): New fuction.
+ (org-cycle-global-status, org-cycle-subtree-status): Make these
+ variables buffer-local.
+ (org-global-cycle): New command.
+ (org-shifttab): Use `org-global-cycle'.
+ (org-insert-heading, org-insert-item): Go to end of new
+ headline/item after creating it.
+ (org-export-visible): Rename from `org-export-copy-visible'.
+ Now creates a temporary org-file and applies an exporting command
+ to it.
+ (org-table-eval-formula): Support for lisp forms.
+ (org-agenda-todo-ignore-scheduled): New option.
+ (org-agenda-get-todos): Use new option
+ `org-agenda-todo-ignore-scheduled'.
+ (org-export-html-inline-images): New value `maybe'.
+ (org-export-as-html): Inlining of images dependent on link description.
+ (org-archive-subtree): Check for end-of-buffer before trying
+ `kill-line'.
+ (org-agenda-follow-mode): New option.
+ (org-export-with-tags, org-export-with-timestamps): New options.
+ (org-html-handle-time-stamps): New function.
+ (org-keyword-time-regexp): New variable.
+ (org-agenda-get-todos): Use `org-agenda-todo-list-sublevels'.
+ (org-agenda-todo-list-sublevels): New option.
+ (org-html-level-start): When TITLE is nil, just close all levels.
+ (org-parse-key-lines, org-parse-export-options): Remove functions,
+ replaced by `org-infile-export-plist'.
+ (org-combine-plists, org-infile-export-plist)
+ (org-default-export-plist): New functions.
+ (org-export-html-preamble, org-export-html-postamble)
+ (org-export-html-auto-preamble, org-export-html-auto-postamble):
+ New variables.
+ (org-export-publishing-directory): New option.
+ (org-export-as-html, org-export-as-ascii): Use the new property
+ lists for settings.
+ (org-export-copy-visible, org-export-as-xoxo):
+ Respect `org-export-publishing-directory'.
+ (org-link-search, org-store-link, org-file-apps): Support for
+ links to BibTeX database entries..
+ (org-get-current-options, org-set-regexps-and-options):
+ Implement logging as a startup option.
+ (org-store-link): Make sure context string is never empty
+ (org-insert-link): Use relative path when possible.
+ (org-at-item-checklet-p): New function.
+ (org-shifttab, org-shiftmetaleft, org-shiftmetaright)
+ (org-shiftmetaup, org-shiftmetadown, org-metaleft)
+ (org-metaright, org-metaup, org-metadown, org-shiftup)
+ (org-shiftdown, org-shiftright, org-shiftleft)
+ (org-ctrl-c-ctrl-c, org-cycle, org-return, org-meta-return):
+ Dispatch using `call-interactively'.
+ (org-call-with-arg): New defsubst.
+ (org-tag-alist, org-use-fast-tag-selection): New options.
+ (org-complete): Use `org-tag-alist'.
+ (org-fast-tag-insert, org-fast-tag-selection): New functions.
+ (org-next-item, org-previous-item): New commands.
+ (org-beginning-of-item, org-end-of-item): Add (interactive) to
+ make command.
+ (org-shiftup, org-shiftdown): Accommodate the item-navigation commands.
+
+2006-05-23 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc-delete): New function.
+ (ewoc-filter): Use `ewoc-delete'.
+
+ * emacs-lisp/bindat.el (bindat-pack): Doc fix.
+
+2006-05-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/bibtex.el (bibtex-format-entry, bibtex-clean-entry):
+ Signal more user-friendly error messages.
+
+ * complete.el (PC-do-completion): Undo the addition of implicit
+ wildcards if they did not lead to finding any match.
+ (read-file-name-internal): Don't add the final > if the completion is
+ not finished.
+
+2006-05-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * textmodes/bibtex.el (bibtex-maintain-sorted-entries):
+ Quote safe-local-variable predicate.
+
+2006-05-22 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc-set-data): New function.
+
+2006-05-21 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-maintain-sorted-entries): Mark as safe.
+
+ * progmodes/make-mode.el (makefile-special-targets-list)
+ (makefile-macro-table, makefile-target-table): Mark as risky.
+ (makefile-query-one-target-method): Make this the alias for the
+ following variable.
+ (makefile-query-one-target-method-function): Make this the real name.
+
+ * textmodes/artist.el (artist-text-renderer): Make this the alias
+ for the following variable.
+ (artist-text-renderer-function): Make this the real name.
+
+ * textmodes/flyspell.el (flyspell-generic-check-word-p): Make this
+ the alias for the following variable.
+ (flyspell-generic-check-word-predicate): Make this the real name.
+
+ * textmodes/ispell.el (ispell-format-word): Make this the alias
+ for the following variable.
+ (ispell-format-word-function): Make this the real name.
+ (ispell-message-text-end): Mark as risky.
+
+ * skeleton.el (skeleton-transformation, skeleton-filter)
+ (skeleton-pair-filter): Make these the aliases for the following
+ variables.
+ (skeleton-transformation-function, skeleton-filter-function)
+ (skeleton-pair-filter-function): Make these the real names.
+
+ * progmodes/sh-script.el (sh-mode): Use skeleton-filter-function
+ and skeleton-pair-filter-function.
+
+ * textmodes/sgml-mode.el (sgml-transformation): Make this the
+ alias for the following variable.
+ (sgml-transformation-function): Make this the real name.
+ (sgml-tag-alist): Mark as risky.
+
+2006-05-21 Richard Stallman <rms@gnu.org>
+
+ * simple.el (kill-region): Interactively, pass point, then mark.
+
+2006-05-22 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc-create): Add autoload cookie.
+
+2006-05-21 Romain Francoise <romain@orebokech.com>
+
+ * dired-x.el (dired-mode-map): Don't bind M-g.
+
+2006-05-20 Richard Stallman <rms@gnu.org>
+
+ * dired.el (dired-mode-map): Put dired-goto-file on j, not M-g.
+ (dired-goto-file): Doc fix.
+
+2006-05-21 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el: Mention customizing cua-mode as alternative
+ way to enable built-in cua-mode if user loads older CUA-mode package.
+
+ * ido.el (ido-read-file-name): Bind ido-show-dot-for-dired to nil
+ if default-filename is specified.
+
+2006-05-20 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-manuals-menu) <info-apropos>: New menu item.
+
+ * info.el (info-apropos): Make sure current-file and current-node
+ have non-nil values. Speed up by using add-to-list instead of
+ manual consing.
+
+2006-05-20 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * progmodes/make-mode.el (makefile-mode): Doc fix.
+
+2006-05-20 Eli Zaretskii <eliz@gnu.org>
+
+ * dired-aux.el (dired-do-shell-command): Doc fix.
+
+2006-05-20 Kevin Ryde <user42@zip.com.au>
+
+ * info-xref.el (info-xref-check-all-custom): Skip :tag part of
+ ``(custom-manual :tag "Foo" "(foo)Node")''.
+
+2006-05-20 Karl Chen <quarl@cs.berkeley.edu>
+
+ * progmodes/cc-vars.el (c-backslash-column): Mark as safe if its
+ value is an integer.
+
+2006-05-20 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmail.el (rmail-mime-charset-pattern): Add "?:" before
+ "format".
+ (rmail-convert-to-babyl-format): Undo the change from 2006-04-19.
+
+2006-05-20 Martin Rudalics <rudalics@gmx.at>
+
+ * progmodes/hideif.el (show-ifdef-block): Fix bug where parts of
+ a hidden block remained hidden if `hide-ifdef-lines' is non-nil.
+
+2006-05-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/gud.el (gdb-script-font-lock-keywords): Use a stricter
+ regexp for keywords.
+
+2006-05-20 Masayuki FUJII <boochang@m4.kcn.ne.jp> (tiny change)
+
+ * dnd.el (dnd-get-local-file-name): Specify LITERAL in
+ replace-regexp-in-string.
+
+ * term/w32-win.el (w32-drag-n-drop): Substitute '/' for '\',
+ encode, and escape file name on conversion to URL.
+
+2006-05-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dnd.el (dnd-handle-one-url): Change 3rd arg ARG to URL.
+ Don't unescape URL.
+ (dnd-get-local-file-name): Unescape URL on conversion to file name.
+
+ * x-dnd.el (x-dnd-handle-file-name): Encode and escape file names
+ on conversion to URLs.
+
+ * net/browse-url.el (browse-url-file-url): Encode file name on
+ conversion to URL.
+
+ * term/mac-win.el (mac-ae-open-documents): Escape file name on
+ conversion to URL.
+
+2006-05-19 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/cc-styles.el (c-style-alist): Doc fix.
+
+2006-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-bytes-to-digits): Remove function.
+ (mac-handle-toolbar-switch-mode): Use coercion instead of it.
+
+2006-05-19 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-bahai-date)
+ (list-bahai-diary-entries, mark-bahai-diary-entries)
+ (mark-bahai-calendar-date-pattern): Not interactive.
+ (add-to-diary-list): New optional arg LITERAL. Doc fix.
+ (diary-entries-list): Change format of 4th element in each entry.
+ (diary-list-entries): Use add-to-diary-list.
+ (diary-goto-entry): Handle the case where the buffer visiting the
+ diary has been killed.
+ (fancy-diary-display): Add 'locator to button rather than 'marker.
+ Only generate temp-face when there are marks to apply.
+ (list-sexp-diary-entries): Pass literal to add-to-diary-list.
+ (diary-fancy-date-pattern): New variable.
+ (diary-time-regexp): Doc fix.
+ (diary-anniversary, diary-time): New faces.
+ (fancy-diary-font-lock-keywords): Use diary-fancy-date-pattern and
+ diary-time-regexp. Add font-lock-multiline property where needed.
+ Use new faces diary-anniversary and diary-time.
+ (diary-fancy-font-lock-fontify-region-function): New function, to
+ handle multiline font-lock pattern in fancy diary.
+ (fancy-diary-display-mode): Set font-lock-fontify-region-function.
+ (diary-font-lock-keywords): Tweak time regexp. Use new face
+ diary-time.
+
+2006-05-19 Alexander Shopov <ash@contact.bg> (tiny change)
+
+ * international/code-pages.el (mik): Table corrected.
+
+2006-05-18 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-find): Don't check grep-find-command
+ before running command (breaks non-interactive usage).
+
+2006-05-18 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--adjust): New func.
+ (ewoc--insert-new-node): Don't insert trailing newline.
+ Instead, adjust successor nodes's start markers.
+ (ewoc--refresh-node): Delete all text from current node's start
+ marker to the next one's; adjust successor nodes's start markers.
+ (ewoc--create): Doc fixes.
+ (ewoc--refresh): Don't insert newline.
+ (ewoc--set-hf): Use `ewoc--set-buffer-bind-dll-let*'.
+ * pcvs.el (cvs-make-cvs-buffer):
+ Specify extra newline for ewoc's header and footer.
+ (cvs-update-header): Update initial header recognition.
+ Append newline to final header and footer values.
+ * pcvs-info.el (cvs-fileinfo-pp): Insert trailing newline.
+
+2006-05-17 Richard Stallman <rms@gnu.org>
+
+ * files.el (file-name-extension): Doc fix.
+
+2006-05-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * shell.el (shell-dirtrack-mode): Make it into a proper minor mode, so
+ we can explicitly enable/disable rather than toggle.
+ (shell-mode): Use it.
+ (shell-cd): Don't try to reproduce what `cd' does.
+
+2006-05-17 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-read-internal): Use only nondirectory part of
+ default item.
+
+2006-05-17 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc-data): Add docstring.
+ (ewoc-nth): Doc fix.
+
+ (ewoc-map, ewoc-invalidate): Compute PP before looping.
+
+2006-05-16 Eli Zaretskii <eliz@gnu.org>
+
+ * international/mule.el (auto-coding-alist): Add .lha to files
+ read with no-conversion.
+
+ * files.el (auto-mode-alist): Add .lha files to archive file
+ extensions.
+
+ * arc-mode.el (archive-arc-summarize, archive-lzh-summarize):
+ Convert csize to integer when computing offsets within the
+ compressed archive file.
+
+2006-05-16 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (add-to-history): Add KEEP-ALL arg and align functionality
+ with read-from-minibuffer.
+
+2006-05-16 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-lisp/bytecomp.el (byte-compile-warnings-safe-p): New function.
+ (byte-compile-warnings): Fix safe-local-variable property.
+
+2006-05-16 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-show-bodies, allout-old-style-prefixes)
+ (allout-stylish-prefixes, allout-numbered-bullet)
+ (allout-file-xref-bullet, allout-use-hanging-indents): Use simple
+ predicates to qualify `safe-local-variable' property, when
+ available, else use equivalent lambda.
+ (allout-current-topic-collapsed-p): Do the right thing regarding
+ trailing blank lines.
+
+2006-05-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * server.el (server-start): Only create a directory if needed.
+ (server-edit, server-unload-hook): server-start => server-mode.
+ (kill-emacs-hook): Cleanup upon exit.
+
+2006-05-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * hexl.el (hexlify-buffer): Encode process arguments manually.
+
+2006-05-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-tooltip-tips): Add missing argument to
+ call to gdb-tooltip-print.
+
+2006-05-15 Romain Francoise <romain@orebokech.com>
+
+ * dired-x.el (dired-guess-shell-gnutar): On GNU and GNU/Linux
+ systems, default to "tar" since those systems probably have GNU tar.
+
+2006-05-14 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el (desktop-missing-file-warning): Fix docstring.
+ (desktop-restore-file-buffer): Correct question asked on missing file.
+
+2006-05-14 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/cc-subword.el (c-forward-subword, c-backward-subword):
+ Add CUA move property.
+
+2006-05-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (custom-push-theme): Load the variable before checking
+ its `standard-value'.
+
+2006-05-13 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el (desktop-save): Use with-temp-buffer.
+
+2006-05-12 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-menu.el (calendar-mode-map, calendar-mouse-3-map):
+ * calendar/calendar.el (calendar-mode-map):
+ * calendar/diary-lib.el (include-other-diary-files, diary-mail-entries):
+ * calendar/appt.el (appt-check, appt-make-list): Refer to
+ diary-view-entries, diary-list-entries, diary-show-all-entries
+ rather than obsolete aliases.
+
+2006-05-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (line-move-finish): Avoid calling point motion hooks
+ while processing intangibility.
+
+2006-05-12 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Fix typo.
+
+2006-05-12 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (allout-view-change-hook): Mark as being deprecated,
+ to be replaced by `allout-exposure-change-hook'.
+ (allout-exposure-change-hook): New, replacing
+ `allout-view-change-hook'.
+ (allout-flag-region): Run new hook `allout-exposure-change-hook',
+ in addition to `allout-view-change-hook'.
+ (allout-show-bodies, allout-old-style-prefixes)
+ (allout-stylish-prefixes, allout-use-hanging-indents): Quote the
+ lambda forms to prevent their showing up in variable help
+ presentations as inscrutable byte-compiled code.
+ (allout-numbered-bullet, allout-file-xref-bullet, allout-layout):
+ Use string-or-null-p to qualify safe-local-variable values.
+ (allout-reindent-bodies): Use memq to qualify matches against
+ valid safe-local-variable values. Also, quote the lambda as above.
+ (allout-use-mode-specific-leader): Add missing candidate-value
+ symbols, use memq, and quote the lambda.
+ (allout-overlay-interior-modification-handler): Remove unused
+ variables `msg' and 'opened'.
+ (allout-hidden-p): Constrain invisibility consideration to allout's
+ invisibility spec, disregarding invisibility for other reasons.
+
+2006-05-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * files.el (version-control): Correct safe values.
+
+2006-05-12 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc-refresh): Compute PP once before looping.
+
+ (ewoc--node-enter-before, ewoc--create-node): Delete funcs.
+ (ewoc--insert-new-node): New func.
+ Update callers of deleted funcs to use it, instead.
+
+2006-05-11 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (diary-show-all-entries): Do not refer to
+ obsolete alias `show-all-diary-entries'.
+ (make-diary-entry): Not interactive.
+ (cal-tex-cursor-month, cal-tex-cursor-month-landscape)
+ (cal-tex-cursor-day, cal-tex-cursor-week, cal-tex-cursor-week2)
+ (cal-tex-cursor-week-iso, cal-tex-cursor-week-monday)
+ (cal-tex-cursor-filofax-2week, cal-tex-cursor-filofax-week)
+ (cal-tex-cursor-year-landscape, cal-tex-cursor-filofax-year)
+ (cal-tex-cursor-filofax-daily, cal-tex-cursor-year): Interactive.
+
+2006-05-11 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * calendar/calendar.el (calendar-french-date-string)
+ (calendar-mayan-date-string, calendar-chinese-date-string)
+ (calendar-astro-date-string, calendar-iso-date-string)
+ (calendar-islamic-date-string, calendar-bahai-date-string)
+ (calendar-hebrew-date-string, calendar-coptic-date-string)
+ (calendar-ethiopic-date-string, calendar-persian-date-string):
+ These functions are not interactive.
+
+2006-05-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * files.el: Balance parentheses.
+
+2006-05-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * files.el, newcomment.el, outline.el, simple.el,
+ * emacs-lisp/bytecomp.el, progmodes/cc-compat.el,
+ * progmodes/cc-vars.el, progmodes/compile.el:
+ Move `safe-local-variable' declarations to the respective files.
+
+ * help-fns.el (describe-variable): Don't print safe-var if it is
+ byte-code. Improve wording as suggested by Luc Teirlinck.
+
+2006-05-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-reset): Update speedbar if necessary.
+ (gdb-var-evaluate-expression-handler, gdb-var-update-handler):
+ Use a token for pending-triggers to ensure gdb-var-update
+ gets called once per user input again for pre-GDB 6.4.
+ (gdb-var-delete): Match on more complex expressions.
+ (gdb-var-list-children-handler, gdb-var-create-handler):
+ Use a token for consistency.
+
+2006-05-11 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-read-date, org-goto-calendar)
+ (org-agenda-goto-calendar):
+ Bind `view-calendar-holidays-initially' to nil.
+
+2006-05-11 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--refresh-node): No longer save-excursion.
+ Update all callers to do it there, instead.
+
+2006-05-10 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (calendar-basic-setup): Set day to 1 in
+ prefix arg case, to avoid view-diary-entries-initially error.
+ Reported by Stephen Berman <Stephen.Berman at gmx.net>.
+ (calendar-date-is-legal-p): Handle dates with no day part.
+
+2006-05-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * comint.el (comint-insert-input): Just make it when
+ comint-use-prompt regexp is nil (default) and with the mouse.
+ (comint-copy-old-input): Reinstate from 2004-06-23.
+ (comint-mode-map): Bind C-c C-m to it.
+
+2006-05-10 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlw-shell.el (idlwave-shell-move-or-history):
+ Remove spurious move to point-max (new comint behavior fixes).
+
+ * progmodes/idlwave.el (idlwave-push-mark): Removed obsolete
+ 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.
+ (idlwave-font-lock-fontify-region): Written, use as
+ font-lock-fontify-region-function, to fix continued keyword
+ fontification issues.
+
+2006-05-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-font-panel-mode): Doc fix.
+ (mac-service-selection, mac-service-open-file)
+ (mac-service-open-selection, mac-service-mail-selection)
+ (mac-service-mail-to, mac-service-insert-text): Rename from
+ mac-services-*. All uses changed.
+ (mac-apple-event-map): Rename event symbol `services' to `service'.
+
+2006-05-10 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--dll-create, ewoc--node-delete)
+ (ewoc--node-enter-first, ewoc--node-enter-last)
+ (ewoc--delete-node-internal): Merge funcs into unique callers.
+
+2006-05-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/crm.el (completing-read-multiple): Properly handle
+ return value of read-from-minibuffer for empty input.
+
+2006-05-09 Miles Bader <miles@gnu.org>
+
+ * comint.el (comint-insert-input): Remove redundant calls to setq
+ and goto-char.
+
+2006-05-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * comint.el (comint-insert-input): Make it work when
+ comint-use-prompt-regexp is t.
+
+2006-05-10 Miles Bader <miles@gnu.org>
+
+ * subr.el (field-at-pos): New function.
+
+ * comint.el (comint-insert-input): Use it.
+
+2006-05-09 Juri Linkov <juri@jurta.org>
+
+ * battery.el (battery-linux-proc-acpi): Also try
+ `/proc/acpi/thermal_zone/THR2/temperature'.
+
+ * files.el <safe-local-variable>: Remove `eval' and `let' binding
+ for now unused lambda `string-or-null'.
+
+ * add-log.el (change-log-default-name): Put `string-or-null-p'
+ instead of lambda on `safe-local-variable' property.
+
+ * diff-mode.el (diff-context->unified): Use `region-beginning' and
+ `region-end' instead of `mark' and `point'.
+ (diff-unified->context, diff-reverse-direction, diff-fixup-modifs):
+ Operate on region in Transient Mark mode when the mark is active.
+ Use `region-beginning' and `region-end' instead of `mark' and
+ `point'.
+ (diff-hunk-text, diff-goto-source): Doc fix.
+
+ * startup.el (fancy-splash-screens, normal-splash-screen): Use
+ face `mode-line-buffer-id' for mode-line buffer face instead of
+ hard-coded `(:weight bold)'.
+
+ * arc-mode.el (archive-set-buffer-as-visiting-file): Bind
+ buffer-undo-list to t (undo-ask is reproducible by visiting
+ nested archives).
+
+2006-05-09 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (rgrep): Set default directory of *grep*
+ buffer if we start M-x rgrep in the *grep* buffer and choose
+ a different base directory.
+
+2006-05-09 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-register-file-name-handlers): Enable Tramp
+ completion also when ido is loaded.
+
+2006-05-09 Masatake YAMATO <jet@gyve.org>
+
+ * font-lock.el (cpp-font-lock-keywords-source-directives): Added
+ "warning" and "import".
+ (cpp-font-lock-keywords): Added "warning".
+
+2006-05-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Add more key bindings.
+
+2006-05-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mwheel.el (mwheel-scroll): Make sure that when scrolling multiple
+ pages at a time, if we signal the end, we should indeed reach that end.
+
+2006-05-08 David Reitter <david.reitter@gmail.com>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Only preserve messages
+ output during execution of the body.
+
+2006-05-08 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (lgrep, rgrep): Doc fixes.
+
+2006-05-08 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc--set-buffer-bind-dll-let*):
+ Use with-current-buffer.
+
+2006-05-07 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (add-to-history): Remove keep-dups arg.
+
+ * kmacro.el (kmacro-push-ring): Let-bind history-delete-duplicates
+ to nil around call to add-to-history.
+
+2006-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/syntax.el (syntax-ppss): Flush the cache before rather
+ than after a buffer modification.
+
+2006-05-08 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler): Move speedbar
+ call to...
+ (gud-watch): ...here so speedbar is raised for already watched
+ expressions.
+ (gdb-speedbar-refresh): Delete function.
+ (gdb-speedbar-update, gdb-speedbar-timer-fn): New functions.
+ Use speedbar-timer-fn instead of speedbar-refresh (reverting
+ earlier change).
+ (gdb-var-evaluate-expression-handler)
+ (gdb-var-list-children-handler-1, gdb-var-update-handler-1): Use it.
+
+ * speedbar.el (speedbar-timer-fn): Remove save-window-excursion.
+ Update localized contents for all buffers except ignored modes.
+
+2006-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-utxt-to-string): Use `eq' instead of `='.
+ (mac-atsu-font-table, mac-font-panel-mode): Add defvars.
+ (mac-bytes-to-digits, mac-handle-toolbar-switch-mode)
+ (mac-handle-font-panel-closed, mac-handle-font-selection):
+ New functions.
+ (mac-font-panel-mode): New minor mode.
+ (mac-apple-event-map): Add bindings for toolbar toggle button and
+ font panel.
+ (menu-bar-showhide-menu): Add mac-font-panel-mode.
+
+2006-05-07 John Paul Wallington <jpw@pobox.com>
+
+ * ibuffer.el (ibuffer-compressed-file-name-regexp):
+ Avoid `regexp-opt'; simplify regexp for readability.
+
+2006-05-06 Eli Zaretskii <eliz@gnu.org>
+
+ * ldefs-boot.el (dired-do-redisplay, dired-maybe-insert-subdir):
+ * files.el (buffer-stale-function):
+ * dired-aux.el (dired-do-redisplay, dired-maybe-insert-subdir):
+ * autorevert.el (global-auto-revert-non-file-buffers): Point Info
+ links to the main manual, not to emacs-xtra.
+
+2006-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-utxt-to-string): Don't make adjustment for
+ MacJapanese if text is ASCII-only.
+
+2006-05-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-goto-breakpoint): Use or instead of
+ unless so nil isn't returned.
+ (gdb-setup-windows, gdb-restore-windows): Reset gdb-source-window.
+
+2006-05-06 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (add-to-history): New function.
+
+ * ediff.el (ediff-files, ediff-files3, ediff-merge-files)
+ (ediff-merge-files-with-ancestor):
+ * env.el (setenv):
+ * isearch.el (isearch-update-ring):
+ * server.el (server-visit-files):
+ * progmodes/grep.el (lgrep, rgrep):
+ * progmodes/vhdl-mode.el (vhdl-generate-makefile-1):
+ * progmodes/xscheme.el (xscheme-insert-expression):
+ Use add-to-history.
+
+ * kmacro.el (kmacro-push-ring): Use add-to-history.
+ (kmacro-ring-length): Remove unused defun.
+ (kmacro-start-macro): Use kmacro-push-ring.
+
+2006-05-06 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el (ewoc-create, ewoc-set-hf): Use `insert'
+ directly instead of a lambda expression that calls it.
+
+2006-05-06 Kim F. Storm <storm@cua.dk>
+
+ * avoid.el (mouse-avoidance-point-position): Use posn-at-point
+ instead of compute-motion.
+
+2006-05-05 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * ibuffer.el (ibuffer-compressed-file-name-regexp): Undo previous
+ change.
+
+2006-05-05 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * startup.el (command-line-1): Refer to "Pure Storage" on
+ pure-space-overflow.
+
+2006-05-05 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/re-builder.el (reb-update-overlays): Cycle through
+ provided faces once they all have been used up.
+
+2006-05-05 Eli Zaretskii <eliz@gnu.org>
+
+ * startup.el (normal-splash-screen, fancy-splash-screens-1): Add a
+ reference to the Lisp manual to the warning about pure space
+ overflow.
+
+2006-05-05 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * textmodes/ispell.el (ispell-buffer-local-dict): Add a `no-reload'
+ argument to avoid the call to `ispell-internal-change-dictionary'
+ when not needed.
+ (ispell-change-dictionary): Use this argument and call
+ `ispell-internal-change-dictionary' after the possible change
+ to `ispell-local-dictionary'.
+ (ispell-internal-change-dictionary): Check for a change in
+ personal dictionary use too.
+
+2006-05-05 Eli Zaretskii <eliz@gnu.org>
+
+ * startup.el (command-line): On MS-Windows, probe "~", not
+ "~USER", for warning about non-existent home directory.
+
+ * arc-mode.el (archive-l-e): New optional argument `float' means
+ generate a float value.
+ (archive-arc-summarize, archive-lzh-summarize)
+ (archive-zip-summarize, archive-zoo-summarize): Invoke archive-l-e
+ with 3rd argument non-nil when file's size is being computed.
+ Format the file sizes with %8.0f instead of %8d.
+
+2006-05-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * cus-start.el (all): Add mac-dnd-known-types.
+
+ * term/mac-win.el (mac-utxt-to-string, mac-string-to-utxt)
+ (mac-TEXT-to-string, mac-string-to-TEXT, mac-furl-to-string)
+ (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-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)
+ (mac-dnd-handle-drag-n-drop-event): New functions.
+ (mac-drag-n-drop): Remove function.
+ (global-map): Bind drag-n-drop and M-drag-n-drop to
+ mac-dnd-handle-drag-n-drop-event.
+
+2006-05-04 Karl Chen <quarl@NOSPAM.quarl.org>
+
+ * progmodes/perl-mode.el (perl-beginning-of-function):
+ Skip anonymous subs.
+
+2006-05-04 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * ibuffer.el (ibuffer-compressed-file-name-regexp): Avoid loading
+ regexp-opt at run time.
+
+ * term.el (term-handle-ansi-escape): Fix off by one error.
+
+2006-05-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-force-update): Delete variable...
+ (gdb-init-1, gdb-post-prompt): ...and references to it.
+ (gdb-frame-handler): Strip directory name from filename if present.
+
+ * progmodes/gud.el (gdb-force-update): Delete defvar
+ (gud-speedbar-buttons): ...and references to it. Use window-start
+ to try to keep positon in watch expression.
+
+2006-05-03 Richard Stallman <rms@gnu.org>
+
+ * simple.el (next-history-element, previous-history-element): Doc fix.
+
+ * isearch.el (isearch-update-ring): Doc fix.
+
+2006-05-03 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * isearch.el (isearch-update-ring): Take history-delete-duplicates
+ into consideration. Replace one arm ifs with whens.
+
+2006-05-03 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gud-watch): Let user select an expression.
+ (menu): Fix typo.
+
+2006-05-02 Miles Bader <miles@gnu.org>
+
+ * replace.el (occur-engine): Bind `inhibit-field-text-motion' to t.
+
+2006-05-02 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-override-minor-modes-map)
+ (calc-override-minor-modes): New variables.
+ (calc-do-embedded): Make sure that Calc keystrokes aren't
+ overwritten by minor modes.
+
+2006-05-02 Chong Yidong <cyd@mit.edu>
+
+ * msb.el (msb): If EVENT is a down event, read and discard the up event.
+
+2006-05-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * startup.el (command-line-1): Refer to Lisp manual when
+ pure-space-overflow occurs.
+
+ * files.el (byte-compile-dynamic, byte-compile-dynamic-docstrings)
+ (byte-compile-warnings, find-file-visit-truename, indent-tabs-mode)
+ (left-margin, no-byte-compile, no-update-autoloads, truncate-lines)
+ (version-control): Don't use `t' for safe-local-variable declarations.
+
+2006-05-01 Richard Stallman <rms@gnu.org>
+
+ * diff-mode.el (diff-mode-shared-map): Don't bind M-W, M-U, M-C,
+ M-r, M-R, M-A, M-SPC or M-DEL.
+ (diff-mode-map): diff-refine-hunk now on C-c C-w
+ (diff-mode-map): Bind C-c C-e, C-c C-n, C-c C-r, C-c C-u.
+
+ * help-mode.el (help-mode): view-exit-action calls delete-window
+ only when it is safe and possible.
+
+ * simple.el (undo-outer-limit-truncate): Put quotes around buffer name
+ in messages.
+
+ * emacs-lisp/warnings.el (display-warning, lwarn): Doc fixes.
+
+ * tool-bar.el (tool-bar-setup): Put Help and Preferences items
+ in the default tool-bar-map.
+
+2006-05-01 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-completion-file-name-handler-alist)
+ (tramp-run-real-handler, tramp-completion-run-real-handler)
+ (tramp-completion-handle-file-name-all-completions)
+ (tramp-completion-handle-file-name-completion): Autoload them.
+ (tramp-completion-handle-file-exists-p)
+ (tramp-completion-handle-file-name-directory)
+ (tramp-completion-handle-file-name-nondirectory)
+ (tramp-completion-handle-expand-file-name): Remove them.
+ (tramp-handle-file-name-directory): Return the real directory name.
+ Returning "/" only doesn't need to be necessary any longer.
+ (tramp-file-name-handler): Make special attention when in hostname
+ completion mode.
+ (tramp-completion-file-name-handler): Revert patch from 2006-04-28.
+ (tramp-register-file-name-handlers):
+ Register `tramp-completion-file-name-handler' only when
+ `partial-completion-mode' is enabled.
+ (tramp-completion-handle-file-name-all-completions):
+ Delete directory part from results.
+ (tramp-get-completion-methods, tramp-get-completion-user-host):
+ Discard deleting "/", it doesn't work after the change of
+ `tramp-handle-file-name-directory' above.
+
+2006-05-01 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (grep-expand-template): Use save-match-data
+ and symbol-value.
+
+2006-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-ae-open-documents, mac-drag-n-drop):
+ Use select-frame-set-input-focus instead of raise-frame.
+ (global-map): Bind M-drag-n-drop to mac-drag-n-drop.
+
+2006-05-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-def): Add %c case.
+ (gud-speedbar-buttons): Don't bind case-fold-search unnecessarily.
+ (gud-format-command): Make match case sensitive. Match on %F.
+
+2006-04-30 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-tex.el (cal-tex-preamble-extra): New variable.
+ (cal-tex-preamble): Use cal-tex-preamble-extra.
+ (cal-tex-list-diary-entries): Refer to `diary-list-entries' rather
+ than alias `list-diary-entries'.
+
+2006-04-29 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * help-fns.el (describe-variable): Add info about safe local variables.
+
+2006-04-29 Richard Stallman <rms@gnu.org>
+
+ * bindings.el (mode-line-format): help-echo doc fixes.
+
+ * net/tramp.el (tramp-file-name-handler-alist): Delete
+ expand-file-name and other operations that can cause spurious loading.
+
+2006-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (safe-local-variable-p): Remove support for the special
+ value t.
+
+ * textmodes/paragraphs.el (sentence-end-without-space):
+ Fix safety predicate.
+ (sentence-end-double-space, sentence-end-without-period)
+ (paragraph-ignore-fill-prefix):
+ * textmodes/fill.el (colon-double-space):
+ * abbrev.el (abbrev-mode): Tighten the safety predicate.
+
+ * subr.el (booleanp): New fun.
+
+ * textmodes/reftex-vars.el (reftex-guess-label-type):
+ Tighten the safety predicate.
+
+2006-04-28 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/grep.el (defgroup grep): Doc fix.
+ (grep-auto-highlight): Remove.
+ (grep-template): New defcustom.
+ (grep-find-template): Rename from grep-tree-template.
+ (grep-files-aliases): Rename from grep-tree-files-aliases.
+ Remove "all" alias, add "l" alias.
+ (grep-tree-ignore-case, grep-tree-ignore-CVS-directories): Remove.
+ (grep-find-ignored-directories): New defcustom to replace
+ grep-tree-ignore-CVS-directories, to facilitate ignoring
+ subdirectories for multiple version control systems.
+ (grep-mode-map): Add Recursive grep item to GREP menu.
+ (grep-regexp-history, grep-files-history): New defvars.
+ (grep-probe): New helper function.
+ (grep-compute-defaults): Use it to simplify code.
+ Adapt to name changes.
+ Use `.' as base in grep-find-template rather than <D>.
+ (grep): Remove superfluous highlight-regexp arg. Fix doc.
+ Call grep-compute-defaults unconditionally.
+ (grep-expand-keywords): New defconst.
+ (grep-expand-template): Rename from grep-expand-command-macros.
+ Simplify via grep-expand-keywords. Look at case-fold-search instead
+ of grep-tree-ignore-case to add -i option.
+ Bind case-fold-search to nil while matching keywords.
+ (grep-tree-last-regexp, grep-tree-last-files): Remove.
+ (grep-read-regexp, grep-read-files): New helper functions.
+ (rgrep): Rename from grep-tree. Rework to use proper histories.
+ Adapt to changes in defcustoms and functions above.
+ (lgrep): New command, as grep, but using same interactive UI as rgrep.
+
+2006-04-28 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-completion-file-name-handler):
+ Disable Tramp's functionality while loading Tramp itself.
+ (tramp-register-file-name-handlers): That's a defsubst now.
+ Code from `tramp-repair-jka-compr' moved here. Apply it via
+ `after-init-hook'.
+ (tramp-repair-jka-compr): Remove.
+
+2006-04-27 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-embedded-make-info): Use `math-read-expr' to
+ read expression when `math-read-big-expr' doesn't work.
+
+2006-04-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * startup.el (command-line-1): Display warning when
+ pure-space-overflow is non-nil.
+
+2006-04-26 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-user-optional-fields): Mark as
+ risky.
+
+2006-04-26 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-url): New optional arg no-browse.
+ Return the URL or nil if none can be generated.
+
+2006-04-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-comint-buffer): Move forward to stop
+ byte compiler warnings.
+ (gud-basic-call, gud-find-expr): Let user select an expression
+ for printing. Print expression as well as value in GUD buffer.
+
+2006-04-17 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Remove local autoload declaration for
+ pgg-gpg-symmetric-key-p, since that's now done in pgg-gpg.el.
+ (allout-show-bodies, allout-header-prefix, allout-primary-bullet)
+ (allout-plain-bullets-string, allout-distinctive-bullets-string)
+ (allout-use-mode-specific-leader, allout-old-style-prefixes)
+ (allout-stylish-prefixes, allout-numbered-bullet)
+ (allout-file-xref-bullet, allout-presentation-padding)
+ (allout-use-hanging-indents, allout-reindent-bodies): Mark as
+ safe-local-variable with suitable value spec, and add autoload
+ cookie for loaddefs inclusion. We now use an explicit spec everywhere.
+ (move-beginning-of-line, move-end-of-line): Repair so these compat
+ functions now actually resituate the point, when appropriate.
+
+2006-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cc-subword.el (c-subword-mode-map): Use command remapping.
+
+ * add-log.el (add-log-iso8601-time-zone): Make parameter optional.
+ (add-log-iso8601-time-string): Fix call to format-time-string.
+
+2006-04-26 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (posn-string, posn-image, posn-object): Doc fix.
+
+2006-04-26 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/asm-mode.el (asm-mode, asm-mode-syntax-table):
+ Add support for "//" style comments. Remove `b' flag
+ from ?* in `asm-mode-syntax-table'.
+
+2006-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * follow.el: Use (featurep 'xemacs) everywhere.
+ (follow-mode): Use define-minor-mode.
+ (follow-mode-map): Move initialization into the declaration.
+ Use command remapping.
+ (follow-emacs-version-xemacs-p): Remove.
+ (follow-submit-feedback): Remove.
+
+ * allout.el (allout-layout, allout-passphrase-verifier-string)
+ (allout-passphrase-hint-string): Tighten up a bit the safety predicate.
+
+ * textmodes/reftex-vars.el (reftex-vref-is-default)
+ (reftex-fref-is-default, reftex-guess-label-type):
+ Tighten up a bit the safety predicate.
+
+ * textmodes/paragraphs.el (sentence-end-double-space)
+ (sentence-end-without-period, sentence-end-without-space)
+ (page-delimiter, paragraph-ignore-fill-prefix):
+ Tighten up a bit the safety predicate.
+
+ * textmodes/fill.el (colon-double-space): Tighten up the safety pred.
+
+ * progmodes/python.el (python-continuation-line-p)
+ (python-beginning-of-statement): syntax-ppss may return
+ a negative depth.
+ (python-mode): Don't forcefully enable font-lock.
+
+ * time-stamp.el (time-stamp-start, time-stamp-end)
+ (time-stamp-inserts-lines): Tighten up a bit the safety predicate.
+
+ * add-log.el: Remove spurious * in docstrings.
+ (add-log-time-zone-rule): Rename from change-log-time-zone-rule.
+ (add-change-log-entry): Use it here, since it's not specific
+ to iso8601.
+ (add-log-iso8601-time-string): Don't use it here any more.
+ (change-log-indent-text, change-log-indent): Rename from add-log-*.
+
+ * abbrev.el (abbrev-mode): Tighten up a bit the safety predicate.
+
+2006-04-25 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-print): Revert last change with ignored nicks.
+ (rcirc-toggle-low-priority): Doc fix.
+ (rcirc-handler-NOTICE): Remove beginning of line anchor in
+ ChanServ regexp.
+ (rcirc-startup-channels-alist): Connect to #rcirc by default, not
+ #emacs.
+ (rcirc-bright-nick-regexp, rcirc-dim-nick-regexp): Add variables.
+ (rcirc-decode-coding-system): Use utf-8 as the default.
+ (rcirc-multiline-minor-mode): Set the fill-column.
+ (rcirc-format-response-string): Display bright and dim nicks.
+ (rcirc-browse-url): Update interactive spec to fill ARG.
+ (rcirc-bright-nick, rcirc-dim-nick): Add faces.
+ (rcirc-print): Ignore dim-nick messages wrt modeline-activity.
+
+2006-04-24 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * textmodes/bibtex.el (bibtex-find-entry): Don't demand matching
+ case for @Article, etc.
+
+2006-04-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-register-file-name-handlers): New defun.
+ Added with autoload cookie.
+ (tramp-unload-file-name-handlers): Rename from
+ `tramp-unload-file-name-handler-alist'.
+
+2006-04-23 Romain Francoise <romain@orebokech.com>
+
+ * comint.el (comint-match-partial-filename): Doc fix.
+
+2006-04-21 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-menu.el (calendar-mode-map): Refer to
+ `diary-view-entries' rather than alias `view-diary-entries'.
+ * calendar/diary-lib.el (view-other-diary-entries): Ditto.
+
+2006-04-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/antlr-mode.el (antlr-default):
+ * cus-edit.el (custom-documentation):
+ * faces.el (scroll-bar, border, cursor, mouse): Avoid nil spec
+ in defface.
+
+2006-04-21 Kim F. Storm <storm@cua.dk>
+
+ * image.el (image-type): New defun split out of create-image.
+ (create-image): Use it.
+
+2006-04-21 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode-map): Catch conflict with old allout.el.
+ (org-open-at-point): Remove the "...done" message to keep output
+ in the echo area visible.
+ (org-export-as-xoxo): Fix call to `indent-region'.
+
+2006-04-21 Kevin Ryde <user42@zip.com.au>
+
+ * international/mule.el (keyboard-coding-system): defcustom
+ info-link fixes: "Specify Coding" has been split, keyboard now in
+ "Terminal Coding", and "Single-Byte Character Support" is now
+ "Unibyte Mode".
+
+2006-04-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-data-list-register-values-handler):
+ Use font-lock-warning-face for any errors e.g. no stack.
+ (gdb-stack-list-locals-handler): Display any errors e.g. no stack.
+
+2006-04-20 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/sh-script.el (sh-shell): Mark as safe.
+
+ * newcomment.el (comment-start, comment-start-skip)
+ (comment-end-skip, comment-end): Mark as safe.
+
+2006-04-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-deadline-announce): Face removed.
+ (org-level-faces, org-n-levels): Convert to constant.
+ (org-compatible-face): New function.
+ (org-hide, org-level-1, org-level-2, org-level-3, org-level-4)
+ (org-level-5, org-level-6, org-level-7, org-level-8)
+ (org-special-keyword, org-warning, org-headline-done, org-link)
+ (org-date, org-tag, org-todo, org-done, org-table, org-formula)
+ (org-scheduled-today, org-scheduled-previously, org-time-grid):
+ Face definition revised for better color tty support.
+ (org-bold-re, org-italic-re, org-underline-re): New constants.
+ (org-set-font-lock-defaults): Use the new constants.
+ (org-agenda-highlight-todo): New function.
+ (org-agenda-todo): Fix bug with point at end of line.
+ (org-agenda-change-all-lines, org-finalize-agenda-entries):
+ Fontify TODO keywords.
+ (org-insert-link): Preserve relative path in ../ links.
+ (org-export-as-html): Convert links pointing to .org files into
+ links that will work beteen the exported HTML files.
+ (org-todo-list): Fix bug when arg=0.
+ (org-insert-heading): More fine-tuning.
+
+2006-04-19 Romain Francoise <romain@orebokech.com>
+
+ * mail/rmail.el (rmail-convert-to-babyl-format): Use second group
+ from `rmail-mime-charset-pattern'.
+
+2006-04-18 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/python.el (python-mode): Fix typo.
+
+2006-04-18 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * comint.el (comint-previous-input): Don't clobber input line
+ when moving off either end of the input history ring.
+ (comint-delete-input): New function, used by
+ `comint-previous-input' and others.
+ (comint-previous-matching-input):
+ Use `coming-delete-input'. Save the partial input if leaving the
+ edit line. Goto point-max before deleting input to avoid
+ partial input fragments hanging around.
+ (comint-restore-input): New function, used by `comint-previous-input'.
+
+2006-04-18 Luc Teirlinck <teirllm@auburn.edu>
+
+ * imenu.el (imenu--index-alist): Balance parentheses.
+
+2006-04-18 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/python.el (python-mode): Add support for hs-minor-mode.
+
+2006-04-19 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * abbrev.el (read-abbrev-file): Use abbrev-file-name if optional
+ file is nil.
+
+2006-04-18 Richard Stallman <rms@gnu.org>
+
+ * tooltip.el (tooltip-mode, tooltip-use-echo-area): Doc fixes.
+
+ * imenu.el (imenu-create-index-function, imenu--index-alist)
+ (imenu--last-menubar-index-alist, imenu--make-index-alist)
+ (imenu-default-create-index-function, imenu--generic-function):
+ Doc fixes.
+
+ * image-mode.el (image-toggle-display): Handle tar and arc subfiles.
+
+ * help-mode.el (help-mode): Set view-exit-action to delete window.
+
+ * env.el (setenv): Get rid of arg UNSET. Interactive unsetting
+ now works by passing nil as arg.
+
+ * apropos.el (apropos-print): Don't do where-is on self-insert-command.
+
+ * abbrev.el (edit-abbrevs-redefine): Temporarily widen.
+ (read-abbrev-file): Provide default when reading filename.
+
+ * files.el (enable-local-variables): Allow :all as value.
+ (hack-local-variables): Implement that value.
+ (safe-local-variable-values, safe-local-eval-forms)
+ (enable-local-variables): Mark as risky.
+ (find-file-visit-truename, kept-old-versions): Mark safe.
+
+ * time-stamp.el (time-stamp-format, time-stamp-line-limit)
+ (time-stamp-start, time-stamp-end, time-stamp-inserts-lines)
+ (time-stamp-count, time-stamp-pattern): Add safe-local-variable prop.
+
+2006-04-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/tcl.el (tcl-send-string, tcl-send-region):
+ Use forward-line so as to get to BOL even in the presence of fields.
+ (tcl-eval-region): Strip surrounding space to avoid multiple prompts
+ in return.
+ (inferior-tcl): Tell tclsh to work in interactive mode.
+
+ * complete.el (partial-completion-mode):
+ Use 'choose-completion-string-functions to make sure that
+ choose-completion fills the minibuffer properly.
+
+ * complete.el (PC-old-read-file-name-internal): Remove.
+ (PC-read-include-file-name-internal): Remove. Turn it into an advice
+ of read-file-name-internal.
+ (partial-completion-mode): Enable/disable this advice.
+
+2006-04-18 Juanma Barranquero <lekktu@gmail.com>
+
+ * net/tramp.el (tramp-completion-file-name-handler): Revert change
+ of 2006-04-17.
+
+2006-04-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-insert-heading): Insert heading before
+ current if at beginning of line.
+ (org-todo, org-date): New faces.
+ (org-table-align): Make sure tooltip window contains full text.
+ (org-no-properties): New defsubst.
+ (org-set-font-lock-defaults): Use new faces.
+
+2006-04-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-item-info): Display frame address
+ for root variables.
+
+ * progmodes/gdb-ui.el (gdb-pc-address): Rename from gdb-frame-address.
+ (gdb-frame-address): Re-use to identify frame for watch expression.
+ (gdb-var-list, gdb-var-create-handler): Add frame address for root
+ variables.
+ (gdb-init-1, gdb-source, gdb-post-prompt)
+ (gdb-assembler-custom, gdb-invalidate-assembler): Use gdb-pc-address.
+ (gdb-frame-handler): Get gdb-frame-address.
+
+2006-04-17 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.53.
+
+ * net/tramp.el (tramp-completion-mode): ?\t has event-modifier
+ 'control. Reported by Matthias F,Av(Brste <slashdevslashnull@gmx.net>.
+ (tramp-completion-file-name-handler): Add autoload cookie for
+ adding to `file-name-handler-alist'.
+
+ * net/tramp-smb.el (tramp-smb-wait-for-output): Wait always for
+ the prompt. If it returns earlier (when detecting an error
+ message), the rest of the output will merge accidently with the
+ output of the next command. Reported by M Jared Finder
+ <jared@hpalace.com>.
+
+ * net/tramp-vc.el (vc-user-login-name): Wrap defadvice with a test
+ for `process-file', in order to let it work for older Emacsen too.
+
+2006-04-17 Ralf Angeli <angeli@iwi.uni-sb.de>
+
+ * textmodes/tex-mode.el (tex-font-lock-match-suscript): New function.
+ (tex-font-lock-keywords-3): Use it.
+
+2006-04-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * newcomment.el (comment-add): New function.
+ (comment-region-default, comment-dwim): Use it.
+
+2006-04-15 Michael Olson <mwolson@gnu.org>
+
+ * emacs-lisp/tq.el: Improve comments.
+ (tq-queue-head-question): New accessor function.
+ (tq-queue-head-regexp, tq-queue-head-closure, tq-queue-head-fn):
+ Update for modified queue structure.
+ (tq-queue-add): Accept `question' argument.
+ (tq-queue-pop): If a question is pending, send it.
+ (tq-enqueue): Accept new optional argument `delay-question'.
+ If this is non-nil, and at least one other question is pending a
+ response, queue the question rather than sending it immediately.
+
+2006-04-15 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * calendar/appt.el (appt-add): Check whether an appointment is
+ already present in appt-time-msg-list. Simplify code.
+
+2006-04-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cc-langs.el (c-mode-menu):
+ Don't presume c-subword-mode is bound.
+
+2006-04-13 Bill Wohler <wohler@newt.com>
+
+ * cus-edit.el (customize-package-emacs-version-alist): Update docstring.
+ (customize-package-emacs-version): Use cdr instead of cadr now
+ that alists use dotted pairs.
+
+ * custom.el (defcustom): Fix docstring for :package-version.
+
+2006-04-13 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-display-shell-command-buffer): New defvar.
+ (tramp-handle-shell-command): Display output buffer only when
+ `tramp-display-shell-command-buffer' is true.
+ (tramp-handle-process-file): Set `tramp-display-shell-command-buffer'.
+
+2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-set-autofill-regexps): Set only the local
+ values of `adaptive-fill-regexp' and `adaptive-fill-function'.
+
+2006-04-13 Romain Francoise <romain@orebokech.com>
+
+ * pcvs-parse.el (cvs-parse-table): Use `with-temp-buffer' to avoid
+ leaving temporary .cvsignore buffers behind.
+
+2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-set-regexps-and-options)
+ (org-get-current-options): Better names for the startup folding
+ options.
+
+2006-04-13 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * vc.el (vc-annotate): Arrange for point to end up at the same
+ line number as in the original, but only when using a new buffer.
+
+2006-04-12 Stuart Herring <herring@lanl.gov> (tiny change)
+
+ * files.el (hack-one-local-variable-eval-safep):
+ Recognize `edebug-form-spec' for `put', but only if it passes
+ `edebug-basic-spec'. Generalize `put' handling.
+
+ * emacs-lisp/edebug.el (edebug-basic-spec): New function for
+ vetting file-local form specs.
+
+ * allout.el (allout-layout): Autoload its `safe-local-variable'
+ property.
+
+2006-04-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-ctrl-c-ctrl-c): Improve documentation string.
+ (org-agenda-mouse-1-follows-link)
+ (org-mouse-1-follows-link): New options.
+ (org-format-agenda-item): Fix bug if TAGS is nil.
+ (org-agenda-get-scheduled): Quote `priority' symbol in plist.
+
+2006-04-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers):
+ GDB 6.1+ gives full filename for "info sources" so use
+ file-name-nondirectory.
+
+2006-04-12 Romain Francoise <romain@orebokech.com>
+
+ * subr.el (read-passwd): Bind `message-log-max' to nil.
+
+2006-04-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/perl-mode.el (perl-indent-new-calculate):
+ Recompute parse-start after jumping backward by a whole sexp.
+
+2006-04-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-ensure-vc-buffer): Only change current-buffer, not the
+ window configuration.
+ (vc-annotate-display-select): Select the buffer so that current-buffer
+ (and selected-window) is the output buffer at the end of vc-annotate.
+
+2006-04-11 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * vc.el (vc-annotate-color-map): Add custom TTY color map for
+ 8-color terminals, to use all of the colors in a sensible order.
+ 256-color terminals work well with the standard map.
+ (vc-annotate-lines): Only strip the first color character if it
+ is "#", to allow for terminal-style named colors.
+ (vc-annotate-warp-version): Pass buf to `goto-line' to ensure
+ the correct buffer is scrolled.
+
+2006-04-11 Richard Stallman <rms@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-file):
+ Bind enable-local-variables to :safe, and make normal-mode obey it.
+
+ * files.el (enable-local-variables): Allow value :safe.
+ (normal-mode): Doc fix.
+ (hack-local-variables): Implement enable-local-variables = :safe.
+ (hack-local-variables-confirm): Don't prevent quitting.
+
+2006-04-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * loadhist.el (unload-feature): A bit of sanity check of
+ load-history entries. Cancel timer-vars before unbinding them.
+
+ * hexl.el (hexl-isearch-search-function): Fix regexp-building code to
+ quote special chars, and make the trick work on the hex part of the
+ buffer as well.
+ (hexl-mode, hexl-save-buffer, hexl-mode-exit)
+ (hexl-maybe-dehexlify-buffer): Use restore-buffer-modified-p.
+
+ * startup.el (normal-splash-screen): Fix last change so we don't wait
+ 2 minutes if we don't show the splash screen.
+
+2006-04-11 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-export-plain-list-max-depth)
+ (org-table-spaces-around-separators)
+ (org-radio-targets, org-activate-camels)
+ (org-table-spaces-around-invisible-separators): Options removed.
+ (org-time-stamp-rounding-minutes, org-remember-templates)
+ (org-ellipsis, org-activate-links, org-descriptive-links):
+ New options.
+ (org-remember-apply-template, org-current-time)
+ (org-finish-edit-table-field)
+ (org-link-unescape, org-link-escape)
+ (org-string-width, org-table-clean-line, org-html-do-expand)
+ (org-edit-agenda-file-list, org-store-new-agenda-file-list)
+ (org-read-agenda-file-list): New functions.
+ (org-table-edit-field)
+ (org-table-create-or-convert-from-region): New commands
+ (org-table-toggle-vline-visibility): Command removed.
+ (org-table-convert-region): Made a command.
+ (orgtbl-deleta-backward-char, orgtbl-delete-char): Remove commands.
+ Replace with the normal org- functions.
+ (org-self-insert-command): Don't trigger realign unnecessarily
+ when blanking a field that is not full.
+ (org-mode): `Set buffer-invisibility-spec' for links.
+ (org-activate-links2): Hide link part and only show descriptive
+ part of the link.
+ (org-insert-link): Modify for new linking system.
+ (org-store-link): Store description separately, for use by
+ `org-insert-link'.
+ (org-table-align): Use `org-string-width'.
+ (defgroup): Completely new group structure for custom variables.
+ (org-agenda-files): Option: Single file name allowed. Function:
+ Optional argument unrestrited means ignore any restricitons.
+ (org-install-agenda-files-menu): Find a buffer in Org-mode before
+ trying to modify the menu. Use generalized access to
+ `org-agenda-files.'
+ (org-agenda-list, org-todo-list, org-cycle-agenda-files)
+ (org-agenda-file-to-front, org-remove-file, org-diary)
+ (org-tags-view, org-export-icalendar-all-agenda-files)
+ (org-export-icalendar-combine-agenda-files): Use generalized
+ access to `org-agenda-files'.
+ (org-remember-handler): Correctly preserve heading if present.
+ (org-table-insert-row, org-table-insert-hline): Deal with
+ invisible characters.
+
+2006-04-10 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * vc.el (vc-annotate-display-mode): Made default 'fullscale.
+ (vc-annotate-color-map): New 18 element constant
+ value/saturation, rotating hue colormap, from red->blue.
+ (vc-annotate-mode-menu): "Default" -> "By Color Map Range".
+ (vc-annotate-display-select): Switch to annotate-mode elsewhere.
+ (vc-annotate): To avoid killing the required local variables,
+ set them before the end of `with-output-to-temp-buffer', and
+ after first switching to annotate-mode.
+ (vc-annotate-warp-version): Add buffer argument in goto-line to
+ ensure annotation, not source, is scrolled.
+
+2006-04-10 Bill Wohler <wohler@newt.com>
+
+ * custom.el (defcustom, custom-handle-keyword):
+ Add :package-version keyword.
+ (custom-add-package-version): New function. Sets value of new
+ property 'custom-package-version from :package-version keyword.
+ (defcustom): Create Common Keywords section in docstring.
+ (defface, defgroup): Replace definitions of a select few keywords
+ with a reference to the Common Keywords in defcustom.
+ (defcustom, defface, defgroup): Replace reference to Customization
+ chapter in manual with hyperlink.
+
+ * cus-edit.el (customize-package-emacs-version-alist): New variable.
+ (customize-changed-options): Add check for custom-package-version.
+ (customize-package-emacs-version): New function to look up Emacs
+ version corresponding to the given package version.
+
+ * emacs-lisp/find-func.el (find-function-regexp): Allow dashes in
+ defun name, in similar fashion to find-variable-regexp.
+
+2006-04-10 Eli Zaretskii <eliz@gnu.org>
+
+ * international/mule-cmds.el (set-locale-environment): Fix last
+ change for when the locale's preferences don't specify any encoding.
+
+2006-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/find-func.el (find-function-search-for-symbol): Fix regexp
+ so the defined var/fun doesn't need to be quoted.
+
+2006-04-10 Richard Stallman <rms@gnu.org>
+
+ * finder.el (finder-mode-map): Add n and p bindings.
+
+2006-04-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-init-1): Re-initialise gdb-main-file to nil.
+ (gdb-get-version): Make it work for pre "interpreter mi" (GDB 5.3?).
+ (gdb-setup-windows): Put something in source window if we can't find
+ the source file.
+ (gdb-frame-handler): Make it work again with just assembly.
+ (gdb-data-list-register-values-handler): Make it work when there is
+ no stack.
+
+2006-04-09 Richard Stallman <rms@gnu.org>
+
+ * mail/rmail.el (rmail-mime-charset-pattern): Ignore format and delsp
+ specs while looking for charset.
+
+ * textmodes/picture.el (picture-mode-exit): Run picture-mode-exit-hook.
+
+ * play/landmark.el (lm-font-lock-face-O, lm-font-lock-face-X):
+ Make them faces.
+ (lm-font-lock-keywords): Update appropriately.
+
+2006-04-10 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (filter-buffer-substring): Add NOPROPS arg, so
+ it can also replace buffer-substring-no-properties.
+
+ * emulation/cua-base.el (cua-delete-region, cua-paste)
+ (cua-repeat-replace-region): Use filter-buffer-substring.
+
+ * emulation/cua-gmrk.el (cua-copy-region-to-global-mark)
+ (cua-cut-region-to-global-mark): Likewise.
+
+ * emulation/cua-rect.el (cua--extract-rectangle)
+ (cua-incr-rectangle, cua--rectangle-aux-replace): Likewise.
+
+2006-04-09 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-entry-update): New optional arg
+ entry-type. Add field delimiters to numerical fields if they are
+ not present.
+
+2006-04-09 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-find-text-internal): Add new element
+ string-const to return value.
+ (bibtex-remove-delimiters): Use it.
+
+2006-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/bytecomp.el (byte-compile-form): Don't call
+ cl-byte-compile-compiler-macro unless it exists.
+
+2006-04-08 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (hack-local-variables-confirm) <offer-save>:
+ Clarify message text. Suggested by Ralf Angeli.
+
+2006-04-08 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * rect.el (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
+ (delete-extract-rectangle-line): Use `filter-buffer-substring'
+ instead of `buffer-substring' and `delete-region'. (Most of the
+ code actually copied from `kill-region'.)
+
+2006-04-08 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-default-server): Rename from rcirc-server.
+ (rcirc-default-port): Rename from rcirc-port.
+ (rcirc-default-nick): Rename from rcirc-nick.
+ (rcirc-default-user-name): Rename from rcirc-user-name.
+ (rcirc-default-user-full-name): Rename from rcirc-user-full-name.
+ (rcirc-low-priority-flag): New variable.
+ (rcirc-decode-coding-system): New defcustom.
+ (rcirc-encode-coding-system): New defcustom.
+ (rcirc-coding-system-alist): New defcustom.
+ (rcirc-multiline-major-mode): New defcustom.
+ (rcirc-nick): New internal variable.
+ (rcirc-process): Remove variable.
+ (rcirc-server-buffer): New variable.
+ (rcirc): Update to use rcirc-default-* variables above.
+ (rcirc-connect): Do not add window-configuration-hook-here.
+ (rcirc-server): New internal variable.
+ (rcirc-connect): Do not send keepalive pings if
+ rcirc-keepalive-seconds is nil.
+ (with-rcirc-server-buffer): New macro.
+ (rcirc-send-string): Encode with rcirc-encode-coding-system.
+ (rcirc-server-name): Rename from rcirc-server.
+ (rcirc-buffer-process): New function.
+ (rcirc-buffer-nick): New function.
+ (rcirc-buffer-target): Remove function.
+ (set-rcirc-decode-coding-system, set-rcirc-encode-coding-system):
+ New commands.
+ (rcirc-mode-map): Change binding of C-c C-l to
+ rcirc-toggle-low-priority.
+ (rcirc-mode): Initialize coding system based on
+ rcirc-coding-system-alist. New change-major-mode-hook to part the
+ channel on a mode change. Make kill-buffer-hook buffer-local.
+ (rcirc-change-major-mode-hook): New function.
+ (rcirc-clean-up-buffer): Rename from rcirc-kill-buffer-hook-1.
+ (rcirc-last-post-time): New variable.
+ (rcirc-process-message): Store the last time user posted a message
+ to this target.
+ (rcirc-multiline-minor-mode): New mode.
+ (rcirc-multiline-minor-mode-map): New mode map.
+ (rcirc-edit-multiline): Put multiline-edit buffer in
+ rcirc-multiline-major-mode along with rcirc-multiline-minor-mode.
+ (rcirc-print): Ignore any line starting with an ignored nick.
+ (rcirc-print): Decode using rcirc-decode-coding-system.
+ (rcirc-track-minor-mode): Update global-mode-string when disabling
+ this mode.
+ (minor-mode-alist): Add LowPri indicator.
+ (rcirc-toggle-low-priority): New function.
+ (rcirc-last-non-irc-buffer): Prefix arg now no means switch to
+ next lowpriority buffer with activity.
+ (rcirc-record-activity): Sort buffers in rcirc-activity by the
+ last time the user posted a message in to the target.
+ (rcirc-update-activity-string): New formatting for low priority
+ buffers.
+ (rcirc-split-activity): New function.
+ (rcirc-handler-PART, rcirc-handler-KICK)
+ (rcirc-handler-PART-or-KICK): Kick responses are printed properly.
+ (rcirc-nick-away-alist): New variable.
+ (rcirc-handler-301): New handler. Away messages are printed once
+ per change.
+
+2006-04-08 Eli Zaretskii <eliz@gnu.org>
+
+ * info.el (Info-follow-nearest-node): Doc fix.
+
+ * international/mule-cmds.el (set-locale-environment): Make sure
+ the coding-system preferred by the locale's language has the same
+ EOL conversion type as the original buffer-file-coding-system.
+ (locale-language-names): Add a few MS Windows language codes.
+
+2006-04-07 Richard Stallman <rms@gnu.org>
+
+ * simple.el (eval-expression): Doc fix.
+
+ * emacs-lisp/lisp-mode.el (eval-print-last-sexp, eval-last-sexp)
+ (eval-defun): Doc fixes.
+
+2006-04-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * pgg-gpg.el: Revert to revision 1.8 to allow the use of gpg-agent.
+
+2006-04-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-init-2): Set current filename using
+ GDB list command without argument for greater generality.
+
+2006-04-06 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * subr.el (string-or-null-p): New function.
+
+ * textmodes/paragraphs.el (sentence-end): Use string-or-null-p.
+
+ * textmodes/ispell.el (ispell-local-dictionary): Use string-or-null-p.
+
+ * files.el: Update comment about safe-local-variable declarations.
+
+2006-04-06 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * progmodes/idlwave.el: Updated to IDLWAVE version 6.0.
+ See idlwave.org.
+
+ * progmodes/idlw-shell.el: Updated to IDLWAVE version 6.0.
+ See idlwave.org. Includes code to obsolete idlw-rinfo.el.
+
+ * progmodes/idlw-help.el: Updated to IDLWAVE version 6.0.
+ See idlwave.org.
+
+ * progmodes/idlw-complete-structtag.el: Updated to IDLWAVE
+ version 6.0 (minimal changes). See idlwave.org.
+
+ * progmodes/idlw-toolbar.el: Updated to IDLWAVE version
+ 6.0 (minimal changes). See idlwave.org.
+
+ * progmodes/idlw-rinfo.el: File obsoleted and removed.
+
+2006-04-06 Romain Francoise <romain@orebokech.com>
+
+ * pgg-gpg.el: Sync back with Gnus 5.10, reverting changes that add
+ symmetric encryption features and a new asynchronous interface to
+ GnuPG. This new version is version 1.4, plus whitespace changes.
+
+2006-04-06 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * files.el: Move some `safe-local-variable' declarations to the
+ respective files.
+
+ * textmodes/ispell.el (ispell-check-comments)
+ (ispell-local-dictionary): Mark as safe.
+
+ * abbrev.el (abbrev-mode): Mark as safe.
+
+ * add-log.el (change-log-default-name): Mark as safe.
+
+ * textmodes/reftex-vars.el (reftex-vref-is-default)
+ (reftex-fref-is-default, reftex-level-indent)
+ (reftex-guess-label-type): Mark as safe.
+
+ * textmodes/fill.el (colon-double-space): Mark as safe.
+
+ * textmodes/paragraphs.el (paragraph-start, paragraph-separate)
+ (sentence-end-double-space, sentence-end-without-period)
+ (sentence-end-without-space, sentence-end, sentence-end-base)
+ (page-delimiter, paragraph-ignore-fill-prefix): Mark as safe.
+
+2006-04-06 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-mode): Remove ido-ignore-unc-host-regexps from
+ the :set-after list.
+ (ido-downcase-unc-hosts): New user option. Default on.
+ (ido-ignore-unc-host-regexps): Don't reset ido-unc-hosts-cache
+ when it is set, as regexps are now applied on the fly.
+ (ido-unc-hosts): Keep all known hosts in ido-unc-hosts-cache.
+ Make C-a DTRT--filter hosts through ido-ignore-unc-host-regexps
+ on the fly, but only when ido-process-ignore-lists is set.
+ Do case insensitive filtering if ido-downcase-unc-hosts is set.
+ Only downcase names if ido-downcase-unc-hosts is set.
+
+2006-04-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * ido.el (ido-unc-hosts-cache): Fix typo in docstring.
+
+ * woman.el (WoMan-xref-man-page): Fix call to `substring'.
+
+2006-04-05 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-mode): Set after ido-unc-hosts and
+ ido-ignore-unc-host-regexps.
+ (ido-save-history): Save ido-unc-hosts-cache.
+ (ido-load-history): Load ido-unc-hosts-cache.
+ (ido-reread-directory): Refresh unc hosts cache in // dir.
+
+ * startup.el (fancy-splash-screens): Set emulation-mode-map-alists
+ to nil while displaying slash screen.
+
+2006-04-05 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-encrypt-region, pgg-gpg-sign-region):
+ Wait for BEGIN_SIGNING too, new in GnuPG 1.4.3.
+
+2006-04-05 Kenichi Handa <handa@m17n.org>
+
+ * international/characters.el: Setup cases of Latin, Greek, and
+ Cyrillic characters in CJK charsets.
+
+2006-03-29 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-start-process): Don't bind
+ default-enable-multibyte-characters. This reverts the change from
+ revision 6.17 which is no longer necessary because the passphrase
+ is sent separately now. GnuPG messages are unreadable under
+ multibyte locales with default-enable-multibyte-characters set to nil.
+
+2006-04-04 Andreas Schwab <schwab@suse.de>
+
+ * files.el: Mark `left-margin', `byte-compile-dynamic-docstrings'
+ and `byte-compile-warnings' as `safe-local-variable'.
+
+2006-04-04 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * man.el (Man-mode-map): Restore the \r binding.
+ (Man-abstract-xref-man-page): If Man-target-string is a function,
+ call it.
+ (Man-highlight-references): Use Man-default-man-entry to get the
+ target. Deal with xrefs too.
+ (Man-highlight-references0): Don't call the target function.
+
+ * woman.el (WoMan-xref-man-page): Strip the section number, woman
+ cannot deal with it.
+
+2006-04-04 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el: Clean up process buffers every time gpg processes
+ complete.
+
+2006-04-04 Kenichi Handa <handa@m17n.org>
+
+ * sort.el (sort-build-lists): Don't bind inhibit-field-text-motion
+ here.
+ (sort-lines, sort-numeric-fields, sort-fields, sort-columns):
+ Temporarily bind inhibit-field-text-motion to t.
+
+2006-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * startup.el (normal-splash-screen): Only set mode-line-format in the
+ splash buffer, so as not to interfere when debugging the code.
+ Ignore errors when switching buffer.
+
+2006-04-03 Romain Francoise <romain@orebokech.com>
+
+ * dired.el (dired-dnd-protocol-alist): Fix typo.
+
+2006-04-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * savehist.el (savehist): Add :version.
+ (savehist-ignored-variables): New variable.
+ (savehist-minibuffer-hook): Don't save variables listed in
+ `savehist-ignored-variables'.
+
+ * dired.el (dired-dnd-protocol-alist): Mention that change does
+ only apply to new buffers in doc string.
+
+2006-04-03 Lennart Borgman <lennart.borgman.073@student.lu.se> (tiny change)
+
+ * recentf.el (recentf-open-files-item): Include newline in button
+ field, so opening a file will work, when the point is at the end
+ of the file name. Allow, for example, to [i]search a file by
+ extension and just push RET to open it.
+
+2006-04-03 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-process-filter)
+ (pgg-gpg-wait-for-completion): Check if buffer is alive.
+
+ * pgg-gpg.el (pgg-gpg-process-sentinel): Don't remove GNUPG:
+ lines, temporary fix.
+
+2006-04-02 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * ibuf-macs.el (define-ibuffer-column): Document the new parameter.
+
+2006-04-02 Richard Stallman <rms@gnu.org>
+
+ * progmodes/compile.el (compilation-message-face): Make it defcustom.
+
+2006-04-02 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * ibuf-macs.el (define-ibuffer-column): Add a new key:
+ header-mouse-map.
+
+ * ibuffer.el (ibuffer-name-header-map, ibuffer-size-header-map)
+ (ibuffer-mode-header-map): New keymaps.
+ (ibuffer-update-title-and-summary): Enable mouse face highlighting
+ and keybindings for column headers.
+ (name, size, mode) <define-ibuffer-column>: Add a header-mouse-map
+ property.
+
+2006-04-02 Drew Adams <drew.adams@oracle.com>
+
+ * speedbar.el (speedbar-after-create-hook): Doc fix.
+
+2006-04-02 Michael Ernst <mernst@alum.mit.edu>
+
+ * shell.el (shell-directory-tracker)
+ (shell-dynamic-complete-command): Doc fixes.
+
+2006-04-01 Matt Hodges <MPHodges@member.fsf.org>
+
+ * pcomplete.el (pcomplete-show-completions): Recognize TAB on text
+ terminals.
+
+2006-04-01 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-unc-hosts-cache): New defvar.
+ (ido-unc-hosts): If value of defcustom is a function, call it to
+ get list of UNC hosts. Add function-item choices to specify
+ ido-unc-hosts-net-view or user function.
+ (ido-ignore-unc-host-regexps): New defcustom.
+ (ido-unc-hosts-net-view, ido-unc-hosts): New functions.
+ (ido-is-unc-root, ido-is-unc-host, ido-file-name-all-completions)
+ (ido-exhibit): Call ido-unc-hosts to get list of UNC hosts.
+
+2006-03-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs-util.el (cvs-insert-strings): Fix bug with strings longer than
+ wwidth.
+
+2006-03-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * ido.el (ido-cache-unc-host-shares-time, ido-report-no-match)
+ (ido-max-work-file-list, ido-switch-buffer)
+ (ido-read-file-name-as-directory-commands):
+ Fix typos in docstrings.
+
+2006-03-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-system-coding-system): Define and use after
+ Mac-specific coding systems are ready.
+
+2006-03-27 Romain Francoise <romain@orebokech.com>
+
+ * net/rcirc.el (rcirc-connect): Add autoload cookie.
+
+ * ldefs-boot.el: Update.
+
+2006-03-27 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el: Invoke gpg asynchronous, to avoid querying for
+ passphrases when it is not needed.
+ (pgg-gpg-use-agent): Add, to hard code that pgg shouldn't wait for
+ passphrase stuff from gpg, should only be necessary when you use
+ gpg with a smartcard.
+
+2006-03-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * comint.el (comint-dynamic-list-completions): Allow user to
+ select *Completions* buffer.
+
+2006-03-27 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-get-level-face): Fix bug with level counting.
+
+2006-03-26 Andreas Schwab <schwab@suse.de>
+
+ * progmodes/gud.el (gdb): Only complain about multiple debugging
+ when the gdb process is still running.
+
+2006-03-25 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmail.el (tool-bar-map): Defvar it.
+ (rmail-tool-bar-map): Tool-bar buttons for Rmail.
+ (rmail-perm-variables): Make rmail-tool-bar-map a local variable.
+
+2006-03-25 Sven Joachim <svenjoac@gmx.de> (tiny change)
+
+ * help.el (print-help-return-message): Suggest to use
+ display-buffer instead of switch-to-buffer-other-window to restore
+ the previous window without selecting it.
+
+2006-03-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * frame.el (select-frame-by-name): Call x-focus-frame also when
+ window-system is mac.
+
+ * term/mac-win.el: Adjust Courier font specifications in
+ x-fixed-font-alist.
+ (mac-select-convert-to-string): Use utf-16be-mac or utf-16le-mac
+ when directly encoding to UTF-16 in native byte order, no BOM.
+
+2006-03-25 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-rectangle-mark-key): New defcustom.
+ (cua--init-keymaps): Use it instead of fixed C-return.
+ (cua-mode): Set after it.
+
+ * emulation/cua-rect.el (cua--init-rectangles):
+ Use cua-rectangle-mark-key instead of fixed C-return.
+
+2006-03-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdba): Revert 2006-03-10 change for case of
+ "run" in .gdbinit.
+ (gdb-var-create-regexp): Remove "^done" prefix for gdb-mi.el.
+
+2006-03-24 Romain Francoise <romain@orebokech.com>
+
+ * files.el (ctl-x-5-map): Really bind C-x 5 C-o to
+ `display-buffer-other-frame'.
+
+2006-03-24 Kim F. Storm <storm@cua.dk>
+
+ * apropos.el (apropos-synonyms): Add selection => region.
+
+2006-03-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-regexp)
+ (gdb-var-list-children-regexp, gdb-var-update-regexp)
+ (gdb-var-list-children-regexp-1, gdb-var-update-regexp-1)
+ (gdb-data-list-register-values-regexp)
+ (gdb-stack-list-locals-regexp, gdb-stack-list-locals-handler):
+ Future proof against new fields being added to MI output.
+ (gdb-send): Don't treat backslashes for program input as
+ continuations.
+ (gdb-assembler-handler): Don't use window-start for this handler.
+ (gdb-frame-handler): Don't change to hollow arrow if overlay
+ arrow doesn't move to new frame.
+
+2006-03-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-continuation): Declare earlier to
+ prevent compiler warnings.
+ (gdb-stopped): Check for gud-last-last-frame (case: signal).
+ (breakpoint-disabled): Make lighter for contrast with overlay arrow.
+ (gdb-assembler-custom): Use hollow-right-triangle for assembler
+ buffer too.
+
+2006-03-23 Reiner Steib <reinersteib+gmane@imap.cc>
+
+ * pgg-gpg.el (pgg-gpg-update-agent): Check for
+ make-network-process, so we can use the same code in Gnus v5-10
+ too and have this file fully synchronized with that release.
+
+2006-03-23 Romain Francoise <romain@orebokech.com>
+
+ * ibuf-ext.el (ibuffer-read-filter-group-name):
+ Use `ibuffer-generate-filter-groups' to make completion list match
+ the filter groups that are really displayed in the Ibuffer buffer.
+ (ibuffer-generate-filter-groups): Add new args noempty, nodefault.
+
+2006-03-23 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (sort-coding-systems): Describe that
+ the argument is modified in docstring.
+
+2006-03-22 Sascha Wilde <wilde@sha-bang.de>
+
+ * pgg-gpg.el (pgg-gpg-use-agent): Disable by default.
+ (pgg-gpg-update-agent): New function.
+ (pgg-gpg-use-agent-p): New function.
+ (pgg-gpg-process-region, pgg-gpg-encrypt-region)
+ (pgg-gpg-encrypt-symmetric-region, pgg-gpg-decrypt-region)
+ (pgg-gpg-sign-region): Use it.
+
+2006-03-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-face-set): Call custom-push-theme before
+ face-spec set so that `changed' theme is correctly saved.
+ (custom-face-reset-standard): Reset to recalculated face rather
+ than defface spec.
+
+ * custom.el (custom-push-theme): Only save `changed' theme if the
+ current face does not match the defface specs.
+
+2006-03-21 Simon Josefsson <jas@extundo.com>
+
+ * pgg-gpg.el: Ideas below based on patch from Sascha Wilde
+ <wilde@sha-bang.de>.
+ (pgg-gpg-use-agent): New variable.
+ (pgg-gpg-process-region): Use it.
+ (pgg-gpg-encrypt-region): Likewise.
+ (pgg-gpg-encrypt-symmetric-region): Likewise.
+ (pgg-gpg-decrypt-region): Likewise.
+ (pgg-gpg-sign-region): Likewise.
+ (pgg-gpg-possibly-cache-passphrase): Don't cache a nil password.
+
+2006-03-21 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-open-at-point): Fix bug in wiki-style
+ bracket links.
+
+2006-03-21 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/gdb-ui.el (gdb-reset): Set buffer local value of
+ fringe-indicator-alist instead of modifying global value.
+ (gdb-frame-handler): Likewise.
+
+2006-03-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * diff-mode.el (diff-function): Make it inherit from diff-header
+ instead of diff-context.
+
+ * progmodes/gdb-ui.el (hollow-right-triangle): Define as fringe
+ bitmap.
+ (gdb-info-stack-custom): Rename from gdb-info-frames-custom and
+ change names in macro above for consistency.
+ (gdb-frame-handler): Use hollow-right-triangle for all selected
+ frames which except the innermost (where execution has stopped).
+ (gdb-reset): Reset buffer-local values of overlay-arrow.
+
+2006-03-20 Richard Stallman <rms@gnu.org>
+
+ * simple.el (set-mark-command): Doc fix.
+
+ * files.el (display-buffer-other-frame): New command.
+ (ctl-x-4-map): Bind C-x 5 C-o to it.
+
+2006-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * jit-lock.el (jit-lock-function): Check for the actual defer-timer
+ rather than just defer-time, in case defer-time has been changed but
+ the timer isn't running yet.
+ (jit-lock-deferred-fontify): Correspondingly let-bind defer-timer.
+
+2006-03-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * help-mode.el (help-follow-symbol): New function.
+ Essentially identical to the old `help-follow', but do not let
+ `push-button' do the work when on an xref.
+ (help-mode-map): Bind `help-follow-symbol' to "C-c C-c".
+
+2006-03-19 Richard Stallman <rms@gnu.org>
+
+ * help-mode.el (help-xref-symbol-regexp): Make no xref for symbol
+ preceded by the word `program'.
+ (help-follow-mouse, help-follow): Throw error if not on xref.
+ Delete no longer used args.
+
+2006-03-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-stopped): Even when there is no source
+ annotation ensure gud-overlay-arrow-position is redisplayed.
+
+2006-03-19 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-include-OPTkey)
+ (bibtex-entry-field-alist, bibtex-generate-url-list): Mark as risky.
+ (bibtex-autokey-name-case-convert)
+ (bibtex-autokey-titleword-case-convert): Make these the aliases
+ for the following two variables.
+ (bibtex-autokey-name-case-convert-function)
+ (bibtex-autokey-titleword-case-convert-function): Make these the
+ real names.
+ (bibtex-font-lock-keywords): Make bibtex-font-lock-url and
+ bibtex-font-lock-crossref sublists.
+ (bibtex-mode): Revert 2005-12-30 change (which made
+ completion-ignore-case buffer-local).
+ (bibtex-url): Simplify.
+
+2006-03-19 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-rect.el (cua--highlight-rectangle): Set overlay
+ cursor property value to 2 (to align with C level change).
+
+2006-03-19 Bill Wohler <wohler@newt.com>
+
+ * image.el (image-load-path-for-library): Shorten first line in
+ docstring.
+
+2006-03-18 Richard Stallman <rms@gnu.org>
+
+ * mail/rmail.el (rmail-reply-regexp): Undo previous change.
+
+2006-03-18 Ben North <ben@redfrontdoor.org> (tiny change)
+
+ * isearch.el (isearch-other-meta-char): Handle user bindings for
+ shifted control characters.
+
+2006-03-18 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-skip-region-alist): Add "_+" to the
+ part that matches email addresses, file names, etc.
+
+2006-03-18 Eli Zaretskii <eliz@gnu.org>
+
+ * term/w32-win.el (mouse-set-font):
+ Mention w32-list-proportional-fonts in the doc string.
+
+2006-03-18 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-cache-ftp-work-directory-time): Doc fix.
+ (ido-unc-hosts): New user option to explicitly define list of know
+ UNC-style hosts for completion.
+ (ido-cache-unc-host-shares-time): New user option.
+ (ido-is-unc-root, ido-is-unc-host, ido-cache-unc-valid):
+ New helper functions for UNC file-name support.
+ (ido-may-cache-directory): Check for UNC host. Simplify.
+ (ido-wash-history): Clean out old UNC hosts.
+ (ido-nonreadable-directory-p): UNC hosts are always readable.
+ (ido-directory-too-big-p): UNC hosts are never too big.
+ (ido-set-current-directory): Handle UNC root path.
+ (ido-file-name-all-completions): Complete UNC host names from
+ ido-unc-hosts list. Cache UNC host shares.
+ (ido-make-file-list-1): Don't filter UNC root.
+ (ido-exhibit): Check for // in root directory, and switch to UNC
+ mode by setting ido-current-directory to //.
+
+2006-03-17 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (customize-changed-options): Mention explicit
+ version number as default in prompt.
+
+2006-03-17 Bill Wohler <wohler@newt.com>
+
+ * image.el (image-load-path-for-library): Minor docstring fix.
+
+2006-03-17 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-read-date): Include subgroup 5 into
+ replacement text.
+ (org-popup-calendar-for-date-prompt): Fix customization type.
+
+2006-03-17 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gud-watch): Provide completion.
+ (gdb-continuation): New variable.
+ (gdb-send): Deal with continuation lines.
+
+ * progmodes/gud.el (gud-gdb-complete-command)
+ (gud-gdb-run-command-fetch-lines): Adapt for use with watch
+ expressions.
+ (gud-tooltip-mode): Use buffer-local value.
+
+2006-03-16 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-edit-input): Use selected match, if any.
+
+2006-03-16 Bill Wohler <wohler@newt.com>
+
+ * image.el (image-load-path-for-library): Prefer user's images in
+ image-load-path.
+
+2006-03-16 Martin Rudalics <rudalics@gmx.at>
+
+ * mouse.el (mouse-drag-vertical-line): Use window-inside-edges
+ when checking for attempt to drag leftmost or rightmost scrollbar.
+
+2006-03-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-inferior-status): New variable.
+ (gdb-force-mode-line-update): New function.
+ (gdb-resync, gdb-starting, gdb-signal, gdb-exited, gdb-stopped)
+ (gdb-exited): Use them.
+ (gdb-signal): New function.
+ (gdb-annotation-rules): Provide a rule for it.
+
+2006-03-16 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (auto-coding-regexp-alist): Add entries
+ for Unicode BOM.
+
+ * sort.el (sort-build-lists): Temporarily bind
+ inhibit-field-text-motion to t.
+
+2006-03-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * locate.el (locate-command, locate-make-command-line)
+ (locate-fcodes-file, locate-update-command)
+ (locate-prompt-for-command, locate, locate-with-filter)
+ (locate-get-file-positions): Doc fixes.
+ (locate-buffer-name, locate-header-face): Remove leading `*' in
+ defcustom.
+ (locate-filter-output): Use `keep-lines' instead of its alias
+ `delete-non-matching-lines'.
+ (locate-get-filename, locate-get-dirname): Add introductory comment.
+ (locate-find-directory-other-window): Give appropriate error
+ message if used outside main listing.
+
+2006-03-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-lines-before): Delete variable, subsumed by
+ the new extend-region feature.
+ (font-lock-after-change-function): Update correspondingly.
+ * jit-lock.el (jit-lock-after-change): Update correspondingly.
+ * progmodes/grep.el (font-lock-lines-before): Don't disable.
+
+2006-03-15 Bill Wohler <wohler@newt.com>
+
+ * image.el (image-load-path-for-library): Fix example by not
+ recommending that one binds image-load-path. Just defvar it to
+ placate compiler and only use it if previously defined.
+
+2006-03-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-insert-centered): Use `string-width' to
+ make underlining work for wide characters.
+ (org-goto-map, org-agenda-mode-map, org-mode-map): Explicitly bind
+ TAB to `org-cycle', to make sure that no binding in
+ `outline-mode-map' can supercede it.
+
+2006-03-14 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Increment version to 2.2.1 in file commentary.
+
+ (allout-version): Increment to 2.2.1.
+
+ (allout-default-layout): New customization variable, used when the
+ file lacks a specific allout-layout. Uses allout-layout-type for
+ recursively nested definition.
+
+ (allout-layout-type): Widget defining allout layouts, necessary for
+ self-recursive definition.
+
+ (allout-mode): Incorporate allout-default-layout as fallback for
+ allout-layout.
+
+ (allout-layout): Mark as 'safe-local-variable', and refer mention
+ fallback to `allout-default-layout' in absence of a specified value.
+ (allout-passphrase-verifier-string)
+ (allout-passphrase-hint-string): Mark as 'safe-local-variable'.
+
+ (allout-file-passphrase-verifier-string): Obsolete variable, removed.
+
+ (allout-get-encryption-passphrase-verifier): Use correct name of
+ passphrase verifier in docstring.
+
+2006-03-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-list): Change order of first two
+ elements.
+ (gdb-find-watch-expression): Make it work for arrays too.
+ Follow change to gdb-var-list.
+ (gud-watch): Allow the user to enter variable name with a prexix
+ arg. Create keybindings.
+ (gdb-var-create-handler, gdb-var-evaluate-expression-handler)
+ (gdb-var-list-children-handler, gdb-var-update-handler)
+ (gdb-var-delete, gdb-edit-value, gdb-speedbar-expand-node)
+ (gdb-var-list-children-handler-1, gdb-var-update-handler-1):
+ Follow change to gdb-var-list.
+ (gdb-starting): Don't show the overlay arrows when program is running.
+
+ * progmodes/gud.el (gud-speedbar-buttons): Follow change to
+ gdb-var-list.
+
+2006-03-14 Bill Wohler <wohler@newt.com>
+
+ * image.el (image-load-path-for-library): Pass value of path
+ rather than symbol. Always return list of directories.
+ Guarantee that image directory comes first.
+
+2006-03-14 Alan Mackenzie <acm@muc.de>
+
+ * font-core.el (font-lock-extend-region\(-function\)?.):
+ New function/variable.
+
+ * font-lock.el (font-lock-after-change-function):
+ Call font-lock-extend-region. Obey font-lock-lines-before.
+ (font-lock-default-fontify-region): Remove reference to
+ font-lock-lines-before.
+
+ * jit-lock.el (jit-lock-after-change):
+ Call font-lock-extend-region. Obey font-lock-lines-before.
+
+2006-03-14 David Ponce <david@dponce.com>
+
+ * tree-widget.el (tree-widget-themes-load-path)
+ (tree-widget-themes-directory, tree-widget-theme): Doc fix.
+
+2006-03-13 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc) <defgroup>: Add link to manual.
+ (rcirc-print): Mark the start of text at the end of the prompt.
+ (rcirc-track-minor-mode): Add autoload cookie.
+ (rcirc-update-activity-string): Add space to front of mode-line
+ indicator.
+
+2006-03-13 Miles Bader <miles@gnu.org>
+
+ * net/rcirc.el (rcirc-nick-abbrevs): Remove variable.
+ (rcirc-abbrev-nick): Remove function.
+ (rcirc-format-response-string): Don't call `rcirc-abbrev-nick'.
+
+2006-03-13 David Ponce <david@dponce.com>
+
+ * tree-widget.el: Handle themes across all occurrences of the main
+ themes sub-directory found in tree-widget-themes-load-path.
+ (tree-widget-themes-directory, tree-widget-theme): Doc fix.
+ (tree-widget--locate-sub-directory): Return all occurrences.
+ (tree-widget-themes-path): New function.
+ Replace tree-widget-themes-directory, and return a list of directories.
+ (tree-widget-set-parent-theme)
+ (tree-widget-lookup-image): Use it.
+
+2006-03-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-link-search): Avoid self-matching of
+ links, allow target text to be distributed over several lines.
+ (org-search-not-link): New function.
+ (org-set-regexps-and-options, org-get-current-options):
+ New startup options.
+ (org-export-as-html): Take odd-level setting from local variable.
+ (org-fontify-emphasized-text): New option.
+ (org-set-font-lock-defaults): Include emphasized text.
+ (org-follow-mhe-link): Allow folder-only links, fix folder name.
+ (org-font-lock): Customize group renamed from `org-faces'.
+
+2006-03-13 John Paul Wallington <jpw@pobox.com>
+
+ * ibuf-ext.el (ibuffer-never-show-predicates): Add `require'
+ keyword; require `ibuf-ext' feature. Thanks to Zhang Wei.
+
+2006-03-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (all): Delete :version keyword for members of the
+ fringe group, since the entire group is new in 22.1.
+
+2006-03-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-stack-list-locals-handler): Add local
+ map if value is hexadecimal (an address).
+ (gud-watch): Only search roots for existing watch expressions.
+ (gdb-speedbar-refresh): Bind speedbar-shown-directories to nil to
+ prevent caching problems with speedbar-update-directory-contents.
+
+2006-03-12 Juri Linkov <juri@jurta.org>
+
+ * battery.el (battery-linux-proc-acpi): Check `capacity' for non-nil
+ before comparing with `low' and `warn'.
+
+ * info.el (Info-dir-remove-duplicates): Move point to the
+ beginning of the current line after deleting the entries from
+ redundant heading. Use marker for `limit' and compare it with
+ point before calling `re-search-forward'.
+
+2006-03-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * simple.el (yank): Fix typo in docstring.
+
+2006-03-11 Ryan Yeske <rcyeske@gmail.com>
+
+ * mail/rmailsum.el (rmail-summary-next-msg): Skip deleted
+ messages, where "D" is the 6th character.
+
+2006-03-11 Eli Zaretskii <eliz@gnu.org>
+
+ * simple.el (yank): Fix last change.
+
+2006-03-11 David Ponce <david@dponce.com>
+
+ * textmodes/ispell.el (ispell-find-aspell-dictionaries): Add aliases
+ before merging elements from the standard ispell-dictionary-alist.
+ (ispell-aspell-add-aliases): Add aliases to the passed dictionary
+ alist, and return the new alist.
+
+2006-03-11 Richard Stallman <rms@gnu.org>
+
+ * mail/rmail.el (rmail-ignored-headers): Discard DomainKey-Signature.
+
+ * eshell/eshell.el (eshell-prefer-to-shell): Variable deleted;
+ the way it is implemented is too unclean.
+
+ * simple.el (kill-region, yank): Doc fix.
+
+ * battery.el (battery-echo-area-format): Doc fix.
+ (battery-mode-line-format): Likewise.
+ (battery-linux-proc-apm, battery-linux-proc-acpi): Likewise.
+ (battery-linux-proc-acpi): Ignore batteries that say "charged".
+
+2006-03-11 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
+
+ * progmodes/octave-mod.el (octave-indent-for-comment):
+ Behave according to do string.
+
+2006-03-11 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-menu-map-needed) [ispell-message]:
+ Be visible only if major mode is Mail Mode.
+
+ * textmodes/flyspell.el (flyspell-external-point-words)
+ (flyspell-process-localwords): Fix last changes.
+
+2006-03-11 Eli Zaretskii <eliz@gnu.org>
+
+ * calendar/holidays.el (list-holidays): Doc fix.
+
+ * international/mule.el (auto-coding-alist): Add .odt
+ (OpenOffice's open document) files.
+
+ * files.el (auto-mode-alist): Add .odt (OpenOffice's open
+ document) files. Mention in the doc string the need to sync with
+ auto-coding-alist.
+
+2006-03-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (hack-local-variables-confirm): Don't prompt for ! if
+ enable-local-variables is set to always query, or there is no
+ savable variable.
+
+2006-03-10 Bill Wohler <wohler@newt.com>
+
+ * image.el (image-load-path-for-library): Merge at least three
+ functions from Gnus and MH-E into this one function that can now
+ be shared.
+
+2006-03-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-remove-text-properties): Rename from
+ gdb-remove-mouse-face and remove help-echo too.
+ (gdb-enqueue-input): Correct conditional clause.
+
+2006-03-10 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (calendar-holidays): Doc fix.
+ * calendar/holidays.el (list-holidays): Doc fix.
+
+2006-03-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdba): Don't call gdb-init-1 explicitly as
+ it gets called in gdb-prompt anyway.
+ (gdb-use-separate-io-buffer): Only restore window arrangement for
+ gdb-many-windows.
+ (gdb-enqueue-input): Make it harder to send GDB input when program
+ is running.
+ (gdb-buffer-list): New variable.
+ (gdb-remove-mouse-face): New function.
+ (gdb-starting): Use it when GDB input won't get sent.
+
+2006-03-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (view-lossage): Remove trailing whitespace before
+ inserting "\n".
+
+2006-03-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (hack-local-variables-confirm):
+ Set coding-system-for-read to nil before writing to .emacs.
+
+ * arc-mode.el (archive-extract): Check if an existing buffer name
+ comes from a different archive.
+
+ * help.el (describe-key-briefly): If KEY is a down event, read and
+ discard the up event.
+
+2006-03-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons): Allow pointers to
+ be edited and use font-lock-warning-face for any changes.
+
+ * progmodes/gdb-ui.el (gdb-edit-value-handler): New function.
+ (gdb-edit-value): Use it to report any errors.
+
+2006-03-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (describe-key): Remove leftover test code.
+
+2006-03-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el: Move defvars out of eval-when-compile.
+ Use buffer-file-name variable.
+ (org-agenda-file-to-end, org-agenda-file-to-front): Remove unused
+ arg `file'.
+ (org-level-faces): Remove startup dependency.
+ (org-cycle, org-map-tree, org-scan-tags)
+ (org-remember-handler): Don't call `outline-level' directly.
+ (org-mhe-search-all-folders): New option.
+ (org-mhe-get-message-folder-from-index)
+ (org-mhe-get-message-folder): Fix indexing search.
+ (org-format-agenda-item): Handle nil TAGS argument.
+ (org-cleaned-string-for-export, org-activate-target-links)
+ (org-make-target-link-regexp): Deal with empty radio target list.
+ (org-tag): New face.
+ (org-get-level-face): New function.
+ (org-set-font-lock-defaults): Simplify setup for headlines.
+ (org-complete): Pass common substring to `display-completion-list'.
+
+2006-03-06 David Ponce <david@dponce.com>
+
+ * tree-widget.el: Update Commentary header.
+ (tree-widget-theme-name): Ignore parent themes.
+ (tree-widget-set-parent-theme): New function.
+ (tree-widget-set-theme): Use it.
+ (tree-widget-set-image-properties): Move definition. Does nothing
+ if image properties have already been set.
+ (tree-widget-image-properties): Move definition. Receive an image
+ name. Set the :pointer property.
+ (tree-widget-lookup-image): Doc fix. Search in parent themes.
+ Don't set the :pointer image property.
+ (tree-widget-convert-widget): New function. Handle :dynargs
+ compatibility here.
+ (tree-widget): Use it to :convert-widget. Add the :expander-p
+ predicate to control when the :expander function is entered.
+ Thanks to Ken Manheimer <ken.manheimer@gmail.com> for the idea.
+ (tree-widget-value-create): Handle :expander-p. widget-apply
+ :expander.
+ (tree-widget-expander-p): New function. Default value of the
+ :expander-p property.
+
+2006-03-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * help.el (describe-key): Properly handle the return value of
+ read-key-sequence when grabbing an up-event. Cleanup mouse-1
+ remaps. Handle string and vector `follow-link' values.
+
+2006-03-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * complete.el (PC-expand-many-files): Try be more careful when parsing
+ the shell's output.
+
+2006-03-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * outline.el (hide-sublevels): Provide better interactive default.
+
+2006-03-06 Kenichi Handa <handa@m17n.org>
+
+ * international/fontset.el (create-fontset-from-fontset-spec):
+ Fix regexp for paring FONTSET-SPEC (allow spaces after `:').
+
+2006-03-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/gud.el (gud-jdb-marker-filter): Quote `[' with two
+ backslashes instead of one in regexp.
+ (gud-tooltip-dereference): Add missing optional argument.
+
+2006-03-04 John Paul Wallington <jpw@pobox.com>
+
+ * wdired.el (toplevel): Require `cl' at compile-time.
+
+2006-03-04 Andreas Schwab <schwab@suse.de>
+
+ * server.el (server-process-filter): Handle errors during
+ evaluation of the argument.
+
+2006-03-03 John Paul Wallington <jpw@pobox.com>
+
+ * t-mouse.el (t-mouse-drag-start, t-mouse-swap-alt-keys): Doc fix;
+ escape parentheses at beginning of line.
+ (t-mouse-tty, t-mouse-make-event): Doc fix; use imperative.
+ (t-mouse-mode): Remove period from end of error message.
+
+2006-03-03 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-process-localwords):
+ Be case-sensitive.
+
+2006-03-03 Martin Rudalics <rudalics@gmx.at>
+
+ * cus-edit.el (custom-quote): Remove function, since it has been
+ moved to custom.el.
+
+ * font-lock.el (lisp-font-lock-keywords-2)
+ * emacs-lisp/rx.el (rx-check-any, rx-check-not)
+ * generic-x.el (reg-generic-mode): Quote "]"s in regexps when
+ they have no special meaning.
+
+ * midnight.el (clean-buffer-list): Handle case where base-buffer of
+ indirect buffer gets killed before indirect buffer. Use dolist.
+
+2006-03-03 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * emacs-lisp/edebug.el (edebug-display): Use `edebug-sit-for-seconds'
+ value instead of a literal constant (1) on more pauses.
+
+2006-03-03 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Be case-sensitive.
+
+2006-03-03 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-url-regexp): Match entire url when it starts
+ with "www".
+
+2006-03-03 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Restablish intermediate missing comment header to
+ preserve outline structure.
+ (allout-beginning-of-current-entry): Skip invisible text.
+ (allout-open-topic): Fix opening a topic at end-of-buffer.
+ (allout-minor-mode): Move nearer to allout-mode function.
+
+2006-03-02 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-paste-subtree): Remove (debug) form.
+
+2006-03-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * dframe.el (dframe-frame-mode): Don't burp when menu-bar-lines
+ is nil.
+
+ * progmodes/gud.el (gud-speedbar-menu-items):
+ Use buffer-local-value and add missing :visible keyword.
+
+ * progmodes/gdb-ui.el (gdb-speedbar-refresh): Quieten speedbar-refresh.
+
+2006-03-01 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-index.el (reftex-index-map): `follow-mouse'
+ must be `follow-link'.
+
+ * textmodes/reftex-toc.el (reftex-toc-map): Likewise.
+
+ * textmodes/org.el (org-export-as-html): Fix bugs in HTML
+ formatting: No nested anchors.
+ (org-all-targets): Fix bug with XEmacs compatibility.
+ (org-read-date): Add (require 'parse-time).
+ (org-set-tags): Fix bug with extra inserted space.
+ (org-export-html-style): Define a style class for targets.
+ (org-agenda-keymap, org-mouse-map): Add a binding for `follow-link'.
+ (org-hide-leading-stars): New option.
+ (org-hide): New face.
+ (org-set-font-lock-defaults): Allow to hide leading stars.
+ (org-get-legal-level, org-tr-level): New functions.
+ (org-odd-levels-only): New option.
+ (org-level-faces, org-paste-subtree, org-convert-to-odd-levels)
+ (org-demote, org-promote): Deal with double-star levels.
+ (org-convert-to-odd-levels): New command.
+
+2006-03-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-update-localized-contents): Try to
+ preserve window-start.
+ (speedbar-update-directory-contents): Try to preserve window-start
+ and window-point.
+ (speedbar-update-special-contents): Don't move back to start of window.
+
+ * progmodes/gdb-ui.el (gdb-speedbar-refresh): Rename from
+ gdb-speedbar-timer-fn. Use speedbar-refresh instead of
+ speedbar-timer-fn.
+ (gdb-var-update-handler, gdb-var-update-handler-1): Use it.
+ (gdb-speedbar-expand-node): Use speedbar-delete-subblock
+ instead of gdb-speedbar-timer-fn.
+
+2006-02-28 Jay Belanger <belanger@truman.edu>
+
+ * calc/calccomp.el (math-compose-tex-matrix): Add a latex option.
+ (math-compose-expr): Use latex option when calling
+ `math-compose-tex-matrix' for latex mode.
+
+2006-02-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el: Re-instate comments about developing for speedbar
+ [this is what info and gdb-ui use even if better methods exist now].
+
+ * t-mouse.el: New file.
+ (t-mouse-tty): Use with-temp-buffer. Add more terminal types.
+ (t-mouse-lispy-buffer-posn-from-coords): Remove.
+ (t-mouse-make-event-element): Use posn-at-x-y instead.
+ (t-mouse-make-event): Deal with Fedora Core 3.
+ (t-mouse-make-event): Don't sink the `stupid text mode menubar'.
+ (t-mouse-mouse-position-function): New function. Use it instead
+ of advising mouse-position.
+ (t-mouse-mode): New minor mode.
+ (t-mouse-stop, t-mouse-run): Remove. Use t-mouse-mode instead.
+
+2006-02-27 Glenn Morris <rgm@gnu.org>
+
+ * calendar/calendar.el (calendar-holidays): Doc fix.
+
+2006-02-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-source-window): New variable.
+ Re-introduce the concept of a source window.
+ (gdb-get-buffer-create): Rename from gdb-get-create-buffer for
+ consistency with get-buffer-create.
+ (def-gdb-auto-update-handler, gdb-info-locals-handler)
+ (gdb-data-list-register-values-handler)
+ (gdb-stack-list-locals-handler): Try to preserve window-start as
+ well as window-point.
+ (gdb-display-source-buffer): New function (old concept).
+ (gdb-goto-breakpoint): Use it.
+
+ * progmodes/gud.el (gud-display-line): Use gdb-display-source-buffer
+ for gdb-ui/gdb-mi (old concept).
+
+2006-02-27 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-index.el (reftex-index-map): Add `follow-mouse'
+ binding.
+
+ * textmodes/reftex-toc.el (reftex-toc-map): Add `follow-mouse' binding.
+
+ * textmodes/reftex-sel.el (reftex-select-label-map)
+ (reftex-select-bib-map): Add `follow-mouse' binding.
+
+2006-02-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * jka-cmpr-hook.el (jka-compr-compression-info-list)
+ (jka-compr-mode-alist-additions, jka-compr-load-suffixes):
+ Give :set functions to provide automatic updating.
+ Update docstring. Give compiler defvars early in the file
+ and move the defcustoms to a later spot where all called functions
+ are defined.
+ (jka-compr-file-name-handler-entry): Doc fix.
+ (jka-compr-compression-info-list--internal)
+ (jka-compr-mode-alist-additions--internal)
+ (jka-compr-load-suffixes--internal): New variables.
+ (jka-compr-install): Set the three above variables.
+ Update `load-file-rep-suffixes' instead of `load-suffixes'.
+ (jka-compr-update, jka-compr-set): New functions.
+ (auto-compression-mode): Doc fix.
+
+ * jka-compr.el (jka-compr-uninstall): Replace `mapcar' with `mapc'.
+ Update `load-file-rep-suffixes' instead of `load-suffixes'.
+ Use jka-compr-compression-info-list--internal,
+ jka-compr-mode-alist-additions--internal and
+ jka-compr-load-suffixes--internal.
+
+ * files.el (load-library):
+ * loadhist.el (file-loadhist-lookup):
+ * startup.el (command-line):
+ * subr.el (locate-library):
+ * emacs-lisp/autoload.el (update-directory-autoloads):
+ * emacs-lisp/find-func.el (find-library-suffixes):
+ Use `get-load-suffixes' instead of `load-suffixes'.
+
+ * subr.el (locate-library):
+ * emacs-lisp/find-func.el (find-library-name):
+ Use `load-file-rep-suffixes' instead of '("").
+
+2006-02-26 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-save-history, ido-load-history): Simplify.
+ Don't use find-file-noselect to avoid interference from other modes.
+
+2006-02-25 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/sh-script.el (sh-mode): Fix bug: Arrange
+ to use the default shell if filename is not available.
+ Reported by Giorgos Keramidas.
+
+2006-02-25 John Williams <jrw@pobox.com> (tiny change)
+
+ * progmodes/etags.el (tags-completion-table): Do completion from
+ all the tables in the current list, as documented in the manual.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * CC Mode Update to 5.31.3.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el (c-postprocess-file-styles):
+ Bind inhibit-read-only to t, around the call to
+ c-remove-any-local-eval-or-mode-variables, so that it works on a
+ RO file.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-awk.el: Correct a typo.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el, cc-mode.el: Rename c-hungry-backspace to
+ c-hungry-delete-backwards, at the request of RMS. Leave the old
+ name as an alias.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el: Correct a typo.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-defs.el: Update the version number to 5.31.3.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el (c-electric-brace): Fix clean-up
+ brace-else-brace (error due to mbeg, mend being undefined).
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el: File Local variables: Solve the problem
+ where both `mode' and c-file-offsets are specified: `mode' will
+ overwrite c-f-o's settings:
+ (c-remove-any-local-eval-or-mode-variables): New function.
+ (c-postprocess-file-styles): Call the above new function, within
+ c-tentative-buffer-change, to splat `mode' and `eval' before the
+ second hack-local-variables.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el:
+ [Supersedes patch to cc-engine.el 2005-12-16T20:07:49Z!monnier@iro.umontreal.ca]
+ (c-after-change): Protect the match data with save-match-data.
+ It was getting corrupted by c-after-change-check-<>-operators.
+
+ * progmodes/cc-defs.el: [Supersedes patch V1.38]:
+ (top level): Check for a buggy font-lock-compile-keywords ONLY in
+ XEmacs. GNU Emacs 22 now has a check which would throw an error here.
+
+ * progmodes/cc-awk.el (c-awk-after-change): Protect the match data
+ with save-match-data. It was being corrupted when Font Lock was
+ not enabled.
+
+2006-02-24 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-langs.el (c-mode-menu): Add menu items for Electric
+ Mode and Subword Mode.
+
+ * progmodes/cc-engine.el (c-beginning-of-statment-1): Distinguish
+ real labels ("case 1:" or "foo:") from non-labels ("public:").
+ (c-forward-objc-directive): Replace c-forward-token-2 with crude
+ coding; c-f-t-2 doesn't move over a token at EOB.
+
+ * progmodes/cc-defs.el (c-version): Update version number to 5.31.2.
+
+ * progmodes/cc-cmds.el, cc-mode.el, cc-engine.el
+ (c-update-modeline): Concatenate the minor mode indicators
+ directly onto mode-name, removing c-submode-indicators.
+ Sometimes, c-s-i got separated from the mode name on the mode line.
+
+ * progmodes/cc-cmds.el (c-electric-brace, c-electric-semi&comma)
+ (c-electric-colon): Correct doc-strings: "/ln" -> "/la".
+
+2006-02-24 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Improve the
+ error message when there's an evaluation error to show whether
+ it's loaded from source or not.
+ (c-filter-ops): Make it available at runtime too to work when
+ `c-make-init-lang-vars-fun' needs to evaluate from source.
+
+2006-02-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (help): Revert last part of 2006-02-23 change (deletion
+ of the `provide' call).
+
+2006-02-23 Juri Linkov <juri@jurta.org>
+
+ * compare-w.el (compare-windows-highlight): Add new value
+ `persistent' and change :type from `boolean' to `choice'.
+ (compare-windows-overlays1, compare-windows-overlays2):
+ New internal variables.
+ (compare-windows-highlight): If compare-windows-highlight is
+ `persistent', add current overlays to compare-windows-overlays[12]
+ instead of adding compare-windows-dehighlight to pre-command-hook.
+ (compare-windows-dehighlight): Delete all overlays from
+ compare-windows-overlays[12].
+
+ * info.el (Info-search): Don't bind search-spaces-regexp to
+ Info-search-whitespace-regexp in non-regexp isearch mode.
+
+2006-02-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * help.el (describe-mode): Pass `mode-name' to format-mode-line.
+
+2006-02-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * textmodes/org.el (org-xemacs-p)
+ (org-export-html-show-new-buffer, org-table-may-need-update)
+ (org-insert-item, org-mhe-get-message-real-folder)
+ (org-mhe-get-message-folder-from-index)
+ (org-mhe-get-message-folder, org-mhe-get-message-num)
+ (org-mhe-get-header, org-make-org-heading-search-string)
+ (org-make-org-heading-camel, org-table-sort-lines)
+ (org-format-org-table-html, org-format-table-table-html):
+ Fix typos in docstrings.
+
+2006-02-23 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-cleaned-string-for-export)
+ (org-solidify-link-text): New function.
+ (org-add-hook): Use `add-local-hook' instead of `make-local-hook' for
+ XEmacs, just to silence the compiler.
+ (org-export-as-ascii, org-export-as-html-and-open):
+ Use `org-cleaned-string-for-export' and create internal links.
+ (org-follow-mhe-link): Require mh-e, use folder.
+
+2006-02-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons): Use shadow face properly.
+
+ * progmodes/gdb-ui.el (gdb-debug-ring-max): Rename from
+ gdb-debug-log-length.
+ (gdb-debug-ring): Rename from gdb-debug-log-ring. Don't make
+ it a real ring but...
+ (gud-gdba-marker-filter): ...make it work like mark-ring.
+ (gdb-enable-debug): Rename from gdb-enable-debug-log.
+ (gdb-mouse-jump): New function. Add bindings.
+
+2006-02-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-signalled): New variable and function.
+ (gdb-debug-log-ring): Rename from gdb-debug-log and make a ring.
+ (gdb-send, gdb-send-item, gud-gdba-marker-filter): Use it.
+ (gdb-debug-log-length): Customize it's length.
+ (gud-watch, gdb-var-create-handler): Display function::var format
+ but don't use to create variable object.
+ (gdb-var-create-handler): Use message-box in place of message.
+ (gdb-stopped): Call gdb-exited if signalled.
+
+2006-02-22 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex.el (reftex-locate-file): Remove duplicate function.
+
+ * textmodes/reftex-vars.el (reftex-try-all-extensions): New option.
+
+ * textmodes/reftex.el (reftex-locate-file): Search all extensions
+ if `reftex-try-all-extensions' is set.
+
+ * textmodes/reftex-dcr.el (reftex-view-crossref): New argument to
+ fail silently when there is no valid argument at point.
+ (reftex-view-crossref-when-idle): Call `reftex-view-crossref' with
+ `fail-silently' argument. From a patch by David Reiter.
+
+ * textmodes/org.el (org-mark-ring-push, org-mark-ring-goto):
+ New commands.
+ (org-mark-ring): New variable.
+ (org-mark-ring-length): New option.
+ (org-open-at-point, org-goto, org-open-file): Push old position
+ onto the mark ring.
+ (org-add-hook): New function.
+ (org-export-table-remove-special-lines): New option.
+ (org-skip-comments, org-format-org-table-html): Respect new
+ option `org-export-table-remove-special-lines'.
+ (org-open-file): Allow special command configuration for
+ directory link.
+ (org-file-apps): Fix bugs in customize type, added setting
+ for directories.
+ (org-activate-tags, org-format-agenda-item, org-complete)
+ (org-get-tags-at, org-scan-tags, org-make-tags-matcher)
+ (org-get-tags, org-get-buffer-tags, org-open-at-point)
+ (org-link-search, org-make-org-heading-search-string)
+ (org-make-org-heading-camel): Allow @ and 0-9 as tags characters.
+ (org-radio-targets, org-file-link-context-use-camel-case)
+ (org-activate-camels): New options.
+ (org-update-radio-target-regexp, org-all-targets)
+ (org-make-target-link-regexp, org-activate-target-links):
+ New functions.
+ (org-make-org-heading-search-string): New function.
+ (org-store-link, org-insert-link): Use new option
+ `org-file-link-context-use-camel-case'.
+ (org-activate-camels): Use new option `org-activate-camels'.
+ (org-link-regexp): Add mhe prefix.
+ (org-open-at-point, org-store-link): Support for mhe links.
+ (org-mhe-get-message-real-folder, org-mhe-get-message-folder)
+ (org-mhe-get-message-folder-from-index, org-mhe-get-message-num)
+ (org-mhe-get-header, org-follow-mhe-link): New functions.
+ (org-remove-angle-brackets, org-add-angle-brackets):
+ New functions.
+ (org-bracket-link-regexp): New constant.
+ (org-read-date): Fix bug that was rejecting all typed dates.
+ (org-link-search): Make hierarchy above visible after a match.
+ (org-follow-bbdb-link): Inhibit electric mode for BBDB.
+ (org-store-link): Fix bug with link creation when cursor is in
+ an empty line.
+ (org-open-at-point): Fix bug with matching a link.
+ Fixed buggy argument sequence in call to `org-view-tags'.
+ (org-compile-prefix-format): Set `org-prefix-has-tag'.
+ (org-prefix-has-tag): New variable.
+ (org-format-agenda-item): Remove tags from headline
+ if appropriate.
+ (org-agenda-remove-tags-when-in-prefix): New option.
+
+2006-02-21 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-diff.el (ediff-setup-diff-regions, ediff-setup-diff-regions3):
+ Fix the regular expressions.
+
+2006-02-21 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/sh-script.el (sh-mode): Set shell type based on file name
+ if there's no other specific basis.
+
+ * emacs-lisp/unsafep.el (unsafep): Don't treat &rest or &optional
+ as variables at all.
+ (unsafep-variable): Rename arg; doc fix.
+
+ * abbrevlist.el (list-one-abbrev-table): Add autoload.
+
+ * calendar/appt.el (diary-selective-display): Add defvar.
+
+ * sort.el (sort-columns): Use Posix arg syntax for `sort'.
+
+ * isearch.el (search-whitespace-regexp): Fix custom type.
+
+ * help.el (describe-key-briefly): Compute interactive args
+ in same was as before previous change.
+
+ * files.el (enable-local-variables): Doc fix.
+
+2006-02-21 Kim F. Storm <storm@cua.dk>
+
+ * fringe.el: Cleanup as file is now pre-loaded.
+ (fringe-bitmaps): Initialize unconditionally.
+ (fringe-mode, set-fringe-style): Remove autoload cookies.
+
+2006-02-21 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+
+ * fringe.el (fringe-bitmaps): Rename `horisontal-bar' to
+ `horizontal-bar'.
+ (fringe-cursor-alist): Use `horizontal-bar'.
+
+2006-02-20 Kim F. Storm <storm@cua.dk>
+
+ * fringe.el (fringe-bitmaps): Update to new bitmap names.
+ (fringe-indicator-alist, fringe-cursor-alist): Initialize.
+
+ * loadup.el: Load "fringe" on window systems.
+
+2006-02-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons): Use shadow face for all
+ out of scope components.
+
+ * progmodes/gdb-ui.el (gdb-speedbar-auto-raise): Don't enable by
+ default.
+
+2006-02-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (customize-mark-to-save, customize-mark-as-set):
+ Load the symbol first.
+
+2006-02-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * buff-menu.el (list-buffers-noselect): Turn also "\n" into a
+ strech spec so it doesn't display as "^J" on the header line
+ when `Buffer-menu-use-header-line' is t.
+
+2006-02-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-make-button): Keep text properties
+ of string arguments if desired.
+
+ * progmodes/gud.el (gud-speedbar-buttons): Fontify watch
+ expessions.
+
+ * progmodes/gdb-ui.el (gdb-speedbar-expand-node): Force update
+ of speedbar.
+
+2006-02-19 Ryan Yeske <rcyeske@gmail.com>
+
+ * ffap.el (ffap-read-file-or-url): Bind `completion-ignore-case'
+ to value of `read-file-name-completion-ignore-case'.
+
+2006-02-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (customize-mark-as-set): Push to `user' theme.
+
+ * cus-edit.el (custom-save-variables): Allow unthemed values.
+ (customize-set-variable): Push setting to `user' theme.
+
+2006-02-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el: Don't require font-lock as it's now
+ automatically loaded.
+ (gud-speedbar-buttons): Replace gdb-var-changed with
+ gdb-force-update.
+
+ * progmodes/gdb-ui.el (gdb-force-update): Rename from
+ gdb-var-changed.
+ (gdb-post-prompt): Use it.
+ (gdb-var-create-handler, gdb-var-evaluate-expression-handler)
+ (gdb-var-update-handler, gdb-var-delete)
+ (gdb-speedbar-expand-node, gdb-var-list-children-handler-1)
+ (gdb-var-update-handler-1): Don't set gdb-var-changed, just set
+ gdb-force-update in gdb-post-prompt.
+ (gdb-reset): Clear watch expressions from speedbar when quitting.
+
+2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-insert-state-post-command-sentinel)
+ (viper-change-state-to-vi, viper-change-state-to-emacs):
+ Make aware of cursor coloring in the Emacs state.
+ (viper-special-read-and-insert-char): Use read-char-exclusive.
+ (viper-minibuffer-trim-tail): Workaround for fields in minibuffer.
+
+ * emulation/viper-init.el (viper-emacs-state-cursor-color):
+ New variable.
+
+ * emulation/viper-util.el (viper-save-cursor-color)
+ (viper-get-saved-cursor-color-in-replace-mode)
+ (viper-get-saved-cursor-color-in-insert-mode)
+ (viper-restore-cursor-color): Make aware of the cursor color
+ in Emacs state.
+ (viper-get-saved-cursor-color-in-emacs-mode): New function.
+
+ * ediff-diff.el (ediff-ignore-case, ediff-ignore-case-option)
+ (ediff-ignore-case-option3, ediff-actual-diff-options)
+ (ediff-actual-diff3-options): New variables to control case sensitivity.
+ (ediff-make-diff2-buffer, ediff-setup-fine-diff-regions)
+ (ediff-setup-diff-regions3): Make aware of case-sensitivity.
+ (ediff-toggle-ignore-case): New function.
+ (ediff-extract-diffs, ediff-extract-diffs3): Preserve point in buffers.
+
+ * ediff-help.el (ediff-long-help-message-narrow2)
+ (ediff-long-help-message-compare2, ediff-long-help-message-compare3)
+ (ediff-long-help-message-word-mode): Add ignore-case command.
+ (ediff-help-for-quick-help): Add ignore-case command.
+
+ * ediff-merg.el: Move provide to the end.
+
+ * ediff-ptch.el: Move provide to the end.
+
+ * ediff-wind.el: Move provide to the end.
+
+ * ediff-mult.el: Move provide to the end.
+ (ediff-set-meta-overlay): Enable follow-link.
+
+ * ediff.el: Move provide to the end.
+ Break recursive load cycle in eval-when-compile.
+ (ediff-patch-buffer): Better heuristics.
+
+ * ediff-util.el: Move provide to the end.
+ Break recursive load cycle in eval-when-compile.
+ (ediff-setup-keymap): Add binding for #c. Replace some defsubsts with
+ defuns.
+ (ediff-submit-report): Pass the values of ediff-diff3-program,
+ ediff-diff3-options.
+
+2006-02-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * help-fns.el (help-do-arg-highlight): Recognize also ARG- followed by
+ the opening bracket of the following bracketing pairs: {}, [], (), <>,
+ `' (for example, in the docstring of `windmove-default-keybindings').
+
+2006-02-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons): Update properly for
+ shadow face. Don't provide binding to edit variable when it is
+ out of scope.
+
+ * progmodes/gdb-ui.el (gdb-var-evaluate-expression-handler)
+ (gdb-var-update-handler): Detect out of scope variables with pre
+ GDB 6.4 too.
+ (gdb-post-prompt): Revert change from 2006-02-17 (force update).
+ Reset status of variable objects to nil in update handlers.
+ (gdb-var-update-handler-1): Detect when a variable object comes
+ in scope. setcar on var changes gdb-var-list directly.
+
+2006-02-17 Juri Linkov <juri@jurta.org>
+
+ * ffap.el (ffap) <defface>: Add explicit face declaration.
+ (ffap-highlight): Use face `ffap' directly instead of checking
+ for its existence.
+
+ * icomplete.el (icomplete-get-keys): Use `t' for the second arg
+ `visible-ok' of `other-buffer' to find the right original buffer.
+
+ * info.el (Info-search): Skip `Local Variables' node.
+
+2006-02-17 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-find-file): Check for symbols `apropos', `history',
+ `toc' in the input filename, and return these symbols as is.
+ (Info-find-node-2): Set Info-current-file to symbols `apropos',
+ `history', `toc' instead of strings.
+ (Info-set-mode-line): For non-string Info-current-file use the
+ symbol's name inside **.
+ (Info-isearch-push-state): Add quote before Info-current-file and
+ Info-current-node.
+ (Info-isearch-pop-state): Use `equal' instead of `string='.
+ (Info-extract-pointer, Info-following-node-name): Use
+ `match-string-no-properties' instead of `match-string'.
+ (Info-up): Check `old-file' for `stringp'.
+ (Info-history): Use `equal' instead of `string-equal'.
+ Check `file' for `stringp'.
+ (Info-history): Use symbol `history' instead of string as first arg
+ of `Info-find-node'.
+ (Info-toc): Check `Info-current-file' for `stringp'. Use symbol
+ `toc' instead of string.
+ (Info-extract-menu-node-name): Use `buffer-substring-no-properties'
+ instead of `buffer-substring', and `match-string-no-properties'
+ instead of `match-string'.
+ (Info-index-nodes): Check for symbols `apropos', `history', `toc'
+ instead of strings.
+ (info-apropos): Use `Info-find-node' instead of `Info-goto-node'.
+ Use symbol `apropos' instead of string.
+ (Info-copy-current-node-name): Check `Info-current-file' for
+ `stringp' and construct a command with `Info-find-node' from it.
+ (Info-fontify-node): Use `match-string-no-properties' instead of
+ `match-string' and check file names for `stringp'.
+ (Info-desktop-buffer-misc-data): Check for symbols `apropos',
+ `history', `toc' instead of strings.
+
+2006-02-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el: Rearrange functions and variables in the file local
+ variables section.
+
+2006-02-17 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * files.el: Add truncate-lines, ispell-check-comments and
+ ispell-local-dictionary as safe local variables.
+
+2006-02-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons): Use shadow face for
+ out of scope variables.
+ (gud-speedbar-buttons): Use unless.
+
+ * progmodes/gdb-ui.el (gdb-var-list): Update doc string.
+ (gdb-init-1, gdb-var-changed): Set gdb-var-changed to t initially.
+ (gdb-show-changed-values): Also use for out of scope variables.
+ (gdb-var-update-handler-1): Note if variable goes out of scope.
+
+2006-02-17 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-connect): Make all arguments optional, and
+ default to global variable values for unsupplied args.
+ (rcirc-get-buffer-create): Fix bug with setting the target.
+ (rcirc-any-buffer): Rename from rcirc-get-any-buffer, and include
+ test for rcirc-always-use-server-buffer-flag here.
+ (rcirc-response-formats): Add %N, which is a facified nick. %n
+ uses the default face. Change the ACTION format string. If the
+ "nick" is the server, don't print anything for that field.
+ Comment fixes.
+ (rcirc-target-buffer): Don't test
+ rcirc-always-use-server-buffer-flag here.
+ (rcirc-print): Squeeze extra spaces out of the text before message.
+ (rcirc-put-nick-channel): Strip potential "@" char from nick
+ before adding them to nick table.
+ (rcirc-url-regexp): Improve to match address like "foo.com".
+
+2006-02-17 Eli Zaretskii <eliz@gnu.org>
+
+ * allout.el (allout-hidden-p): Move this defsubst before
+ allout-overlay-interior-modification-handler, where it is first
+ used.
+
+2006-02-17 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Use allout invisible-text overlays instead of
+ selective display for concealed text. Also, lots of general
+ cleanup, and improved compatibility code.
+
+ (allout-version): Incremented, corrected, revised, and refined
+ module commentary.
+
+ (provide 'allout): Moved to the bottom, added a require of overlay.
+
+ (allout-encrypt-unencrypted-on-saves): Defaults to t instead of
+ `except-current'.
+ (allout-write-file-hook-handler): Minimize delay.
+ (count-trailing-whitespace-region): New function so
+ auto-encryption of current topic can resituate cursor exactly.
+ PGP/GPG encryption trims trailing whitespace from lines, which
+ must be accounted for across encryption then decryption.
+
+ (allout-command-prefix): Now defaults to "\C-c<space>" rather than
+ just plain "\C-c", to avoid intruding on user's keybinding space.
+
+ (allout-toggle-current-subtree-encryption): Pass along fetch-pass
+ parameter, so user request to provide a new password is done.
+
+ (allout-outside-normal-auto-fill-function, allout-auto-fill):
+ Refined mechanism for auto-filling behavior while in allout mode.
+
+ (allout-mode): Explicitly specify the mode map in the docstring.
+ Clarify provision for various write-file hook var names.
+ Adjusted for invisible-text overlays instead of selective-display.
+
+ (allout-depth): Really return 0 if not within any topic. This
+ rectifies `allout-beginning-of-level' and sequence numbering
+ errors that occur when cutting and pasting numbered topics.
+ Changed from a in-line subst to a regular function, as well.
+
+ (allout-pre-next-prefix): Renamed from allout-pre-next-preface.
+
+ (allout-end-of-subtree, allout-end-of-subtree)
+ (allout-end-of-entry, allout-end-of-current-heading)
+ (allout-next-visible-heading, allout-open-topic, allout-show-entry)
+ (allout-show-children, allout-show-to-offshoot)
+ (allout-hide-current-entry, allout-show-current-entry): Rectified
+ handling of trailing blank lines between items.
+
+ (allout-line-boundary-regexp, set-allout-regexp, allout-depth)
+ (allout-current-depth, allout-unprotected, allout-hidden-p)
+ (allout-on-current-heading-p, allout-listify-exposed)
+ (allout-chart-subtree, allout-goto-prefix)
+ (allout-back-to-current-heading, allout-get-body-text)
+ (allout-snug-back, allout-flag-current-subtree, allout-show-all)
+ (allout-hide-region-body, allout-toggle-subtree-encryption)
+ (allout-encrypt-string, allout-encrypted-key-info)
+ (allout-next-topic-pending-encryption, allout-encrypt-decrypted)
+ (allout-file-vars-section-data): Adjusted for use with
+ invisible-text overlays instead of selective-display.
+
+ (allout-kill-line, allout-kill-topic, allout-yank-processing):
+ Reworked for use with invisible text overlays.
+
+ (allout-current-topic-collapsed-p): New function.
+
+ (allout-hide-current-subtree): Use allout-current-topic-collapsed-p
+ to know when to close the containing topic.
+
+ (allout-pre-command-business, allout-post-command-business):
+ Simplify undo-batching and dynamic isearch exposure.
+
+ (allout-set-overlay-category): New for invisible-text overlays.
+ Sets properties of allout-overlay-category, used by
+ allout-flag-region to set invisible-text overlay properties.
+ (allout-get-invisibility-overlay): Get the first qualifying
+ invisibility overlay, so we can find the extent of it.
+ (allout-back-to-visible-text): Get to just before the beginnining
+ of the current invisibility overlay, if any.
+
+ (allout-overlay-insert-in-front-handler)
+ (allout-overlay-interior-modification-handler)
+ (allout-before-change-handler, allout-isearch-end-handler): New
+ functions to handle extraordinary actions affecting concealed
+ text.
+
+ (allout-flag-region): Use overlays instead of selective-display
+ for invisible text - by inheritence from the properties of
+ allout-overlay-category in mainline Emacs, and applied
+ property-by-property in XEmacs, some recent versions of which
+ don't inherit the properties from the category. Provisions to
+ respond to concealed-text edits simplified drastically.
+
+ (allout-isearch-rectification, allout-isearch-was-font-lock)
+ (allout-isearch-expose, allout-enwrap-isearch)
+ (allout-isearch-abort, allout-pre-was-isearching)
+ (allout-isearch-prior-pos, allout-isearch-did-quit)
+ (allout-isearch-dynamic-expose)
+ (allout-hide-current-entry-completely): Functions deleted.
+
+ (allout-undo-aggregation): Explicit undo aggregation no longer
+ necessary due to transition away from selective-display.
+
+ (set-allout-regexp, allout-up-current-level)
+ (allout-next-visible-heading, allout-forward-current-level)
+ (allout-open-topic, allout-reindent-body, allout-rebullet-topic)
+ (allout-kill-line, allout-yank-processing, allout-show-children)
+ (allout-expose-topic, allout-old-expose-topic)
+ (allout-listify-exposed, allout-insert-latex-header)
+ (allout-toggle-subtree-encryption, allout-encrypt-string)
+ (remove-from-invisibility-spec, allout-hide-current-subtree):
+ Ditched unused variables.
+
+2006-02-17 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-change-dictionary): Call
+ ispell-buffer-local-dict instead of
+ ispell-accept-buffer-local-defs.
+ (ispell-local-dictionary-alist): Accept as valid any coding-system
+ supported by Emacs.
+ (ispell-dictionary-alist-3): Esperanto dictionary's coding system
+ changed to iso-8859-3.
+
+2006-02-17 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-frame-width): Make an inline function
+ instead of a macro. Use frame-width.
+ (speedbar-try-completion, speedbar-update-contents)
+ (speedbar-timer-fn): Use consp.
+ (speedbar-update-localized-contents): Try to preserve point.
+
+ * progmodes/gdb-ui.el (gdba, gdb-var-list): Improve doc strings.
+ (menu): Re-order menu items.
+ (gdb-var-update-regexp, gdb-var-update-regexp-1): Match "in_scope"
+ field.
+ (gdb-var-update-handler-1): Use it for GDB 6.4+.
+ (gdb-post-prompt): Speed things by not forcing update.
+
+2006-02-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-button-click): For mouse-1, cancel button
+ press and perform default action if we get a mouse movement event.
+
+2006-02-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * calendar/icalendar.el (icalendar--get-event-property)
+ (icalendar--get-event-property-attributes): Fix typos in
+ docstrings.
+
+ * progmodes/flymake.el (flymake-fix-file-name): Fix typo in
+ docstring.
+
+2006-02-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs-mode): Use `buffer-disable-undo'.
+ (bs--get-file-name): Simplify.
+ (bs-show-in-buffer): Mark the buffer as not modified.
+
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-keymap): Bind down-mouse-1 to
+ widget-button-click.
+
+ * cus-edit.el (custom-mode-map): Remove mouse-1 binding.
+ (custom-mode): Update docstring.
+
+ * cus-theme.el (custom-new-theme-mode-map): Remove mouse-1
+ binding.
+
+ * files.el (hack-local-variables-confirm): Allow scrolling if the
+ file variable list is too long. Kill temp buffer after use.
+
+2006-02-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): Improve doc string.
+ (gdb-script-font-lock-keywords): Expand allowed character set.
+
+ * progmodes/gdb-ui.el (gdb-use-separate-io-buffer)
+ (gdb-display-separate-io-buffer, gdb-frame-separate-io-buffer)
+ (gdb-separate-io-interrupt, gdb-separate-io-quit)
+ (gdb-separate-io-stop, gdb-separate-io-eof):
+ Rename from gdb-inferior-* to gdb-separate-*.
+ (gdb-set-gud-minor-mode-existing-buffers-1): Improve doc string.
+
+2006-02-14 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-arith.el (math-check-known-scalarp): Make sure
+ expression is a symbol before checking that it is bound.
+
+ * calc/calcalg2.el (math-integrate-by-parts): Do a more careful
+ test to see if equation can be solved.
+
+2006-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * wid-edit.el (widget-button-click): Use :pressed-face property
+ for overlay face, if it exists.
+
+ * cus-edit.el (custom-manual, custom-add-see-also)
+ (custom-add-parent-links, custom-group-link): Add :pressed-face
+ property to links.
+
+ * files.el (hack-local-variables): Remove ignored variables before
+ checking if any variables need setting.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * cus-start.el (all): Add x-gtk-whole-detached-tool-bar.
+
+2006-02-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * help.el (where-is): Fix message for remapped commands.
+
+ * mwheel.el (mouse-wheel-click-event, mouse-wheel-mode):
+ Fix typos in docstrings.
+
+2006-02-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * files.el (safe-local-variable-values): New option.
+ (hack-local-variables-prop-line): Return a list of variable-value
+ pairs if MODE-ONLY is non-nil.
+ (hack-local-variables): Construct list of variable-value pairs,
+ and apply or reject them in one go. Ask for confirmation if
+ variables are not known safe.
+ (hack-local-variables-confirm): Complete rewrite. Support
+ `safe-local-variable-values'.
+ (enable-local-variables): Update docstring to reflect new
+ behavior.
+ (ignored-local-variables): Ignore ignored-local-variables and
+ safe-local-variable-values.
+ (safe-local-variable-p): New function.
+ (risky-local-variable-p): `safe-local-variable' property check
+ moved to safe-local-variable-p.
+ (hack-one-local-variable): Checks moved to hack-local-variables.
+
+ (byte-compile-dynamic, c-basic-offset, c-file-style)
+ (c-indent-level, comment-column, fill-column, fill-prefix)
+ (indent-tabs-mode, kept-new-versions, no-byte-compile)
+ (no-update-autoloads, outline-regexp, page-delimiter)
+ (paragraph-start, paragraph-separate, sentence-end)
+ (sentence-end-double-space tab-width, version-control):
+ Add `safe-local-variable' property.
+
+ * find-lisp.el: Delete nonexistent `autocompile' file variable.
+
+ * icomplete.el, play/landmark.el: Change nonexistent
+ `outline-layout' file variable to `allout-layout'.
+
+2006-02-14 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gud-watch, gdb-invalidate-registers-1)
+ (gdb-get-changed-registers): Test value of gud-minor-mode relative
+ to gud-comint-buffer.
+ (gdb-speedbar-expand-node, gdb-locals-mode): Use functions in
+ gdb-ui.el for gdb-mi.el.
+ (gdb-post-prompt, gdb-get-changed-registers): Move test for
+ registers buffer to gdb-get-changed-registers.
+ (gdb-breakpoint-regexp): New regexp. Allow toggling and
+ deletion of catchpoints (throw and catch).
+ (gdb-toggle-breakpoint, gdb-delete-breakpoint)
+ (gdb-goto-breakpoint): Use it for both gdb-ui and gdb-mi.
+ (gdb-find-file-hook, gdb-set-gud-minor-mode-existing-buffers-1)
+ (gdb-var-list-children-1, gdb-info-breakpoints-custom)
+ (gdb-var-update-1, gdb-invalidate-locals-1): Use also for gdb-mi.
+
+2006-02-13 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-arith.el (math-check-known-matrixp): Make sure
+ expression is a symbol before checking that it is bound.
+
+2006-02-13 Richard M. Stallman <rms@gnu.org>
+
+ * mouse.el (mouse-drag-mode-line-1): Use mouse-drag-move-window-bottom
+ for the minibuffer too, but not if resize-mini-windows will interfere.
+
+ * help.el (describe-key-briefly, describe-key): Do all arg-reading
+ inside `interactive' spec.
+ (describe-key-briefly-internal, describe-key-internal):
+ Functions merged back into their callers.
+
+2006-02-13 Martin Rudalics <rudalics@gmx.at>
+
+ * info.el (info-xref-visited): Inherit from info-xref too.
+ (Info-set-mode-line): Replace occurrences of `%' by `%%'
+ when propertizing Info-current-file and Info-current-node.
+
+2006-02-13 Juri Linkov <juri@jurta.org>
+
+ * tumme.el (tumme-thumbnail-storage): Fix docstring.
+ (tumme-thumb-name): Fix per-directory format.
+
+2006-02-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (substitute-key-definition): Doc fix (hide internal arg).
+
+2006-02-12 Miles Bader <miles@gnu.org>
+
+ * net/rcirc.el (rcirc-format-response-string): Fix small bugs.
+
+2006-02-13 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el: Remove history section. If someone needs the it, it
+ can always be found in CVS.
+
+2006-02-12 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-thumbnail-storage): Update docstring. Add info
+ about the Thumbnail Managing Standard option.
+
+2006-02-12 Richard M. Stallman <rms@gnu.org>
+
+ * subr.el (substitute-key-definition): Doc fix.
+
+ * simple.el (blink-matching-paren-dont-ignore-comments): Doc fix.
+
+ * files.el (magic-mode-alist): Don't use `\\s ' in regexps.
+
+ * info.el (Info-mode): Doc fix.
+
+ * progmodes/ebrowse.el (ebrowse-global-prefix-key): Change to C-c C-m.
+
+2006-02-12 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-remote-path): Add "/usr/xpg4/bin" on top,
+ because on Solaris a POSIX compatible "id" is needed. Reported by
+ Magnus Henoch <mange@freemail.hu>.
+
+2006-02-12 Juri Linkov <juri@jurta.org>
+
+ * tumme.el: Remove todo item about Thumbnail Managing Standard.
+ (tumme) <defgroup>: Change :group to `multimedia'.
+ (tumme-thumbnail-storage): Add choice `standard' for Thumbnail
+ Managing Standard.
+ (tumme-cmd-create-thumbnail-options): Use %w and %h instead of %s.
+ Fix dostring.
+ (tumme-cmd-create-temp-image-options): Use %w and %h instead of %x
+ and %y. Fix docstring.
+ (tumme-cmd-pngnq-program, tumme-cmd-pngcrush-program)
+ (tumme-cmd-create-standard-thumbnail-command): New user options.
+ (tumme-thumb-size): Set default to 128 if tumme-thumbnail-storage
+ is `standard'. Fix docstring.
+ (tumme-thumb-width, tumme-thumb-height): New user options.
+ (tumme-external-viewer): Try to find various viewers.
+ (tumme-get-thumbnail-image): Use `create-image' instead of
+ constructing the `image' structure.
+ (tumme-insert-thumbnail): Use `png' if tumme-thumbnail-storage is
+ `standard'.
+ (tumme-thumb-name): Add file name generation for standard storage.
+ Simplify code for other storages.
+ (tumme-thumb-name): Use width %w and height %h instead of size %s.
+ Add modification time %m and thumbnail-nq8 %q.
+ Use `tumme-cmd-create-standard-thumbnail-command' if
+ tumme-thumbnail-storage is `standard'.
+ (tumme-dired-insert-marked-thumbs): New autoload command.
+ (tumme-dired-after-readin-hook): New function.
+ (tumme-line-up-dynamic): Use `tumme-thumb-width' instead of
+ `tumme-thumb-size'.
+ (tumme-display-image): Replace size-x %x and size-y %y with
+ width %w and height %h.
+
+ * dired.el (dired-mode-map): Bind `\C-t\C-t' to
+ `tumme-dired-insert-marked-thumbs'.
+
+2006-02-12 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-write-tag): Fix small bug (file name did not
+ include path).
+ (tumme-mark-tagged-files): Fix bug in regexp used to find rows
+ matching tag.
+
+2006-02-12 Miles Bader <miles@gnu.org>
+
+ * net/rcirc.el (rcirc-nick-abbrevs, rcirc-response-formats):
+ New variables.
+ (rcirc-abbrev-nick): New function.
+ (rcirc-format-response-string): Rewrite to use the formats in
+ `rcirc-response-formats' and expand escape sequences therein.
+ A text-property `rcirc-text' is added over the actual response
+ text to make easy to find inside the returned string.
+ (rcirc-print): When filling, just look for the `rcirc-text'
+ text-property to find the appropriate fill prefix, instead of
+ using hardwired patterns.
+
+2006-02-11 Mathias Dahl <brakjoller@hotmail.com>
+
+ * tumme.el: Enhance some docstrings. Add todo item about Thumbnail
+ Managing Standard.
+
+2006-02-11 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-buffer-internal): Set mark for ido-insert-buffer.
+ Don't use insert-buffer; do insert-buffer-substring directly.
+ (ido-file-internal): Set mark for ido-insert-file. Use insert-file-1.
+
+2006-02-11 Martin Rudalics <rudalics@gmx.at>
+
+ * files.el (revert-buffer, recover-file): Replace buffer-read-only
+ with inhibit-read-only. Suggested by Stefan Monnier.
+ (revert-buffer): Let insert-file-contents discard
+ buffer-undo-list. Simplify code.
+ (find-file, find-file-existing, revert-buffer): Doc-string fixes.
+
+2006-02-11 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-select-yank): Add a doc string.
+
+ * help.el (describe-key-briefly): Now a wrapper for
+ describe-key-briefly-internal. Bind enable-disabled-menus-and-buttons
+ to t. Populate yank-menu if empty.
+ (describe-key-briefly-internal): Renamed from describe-key-briefly.
+ (describe-key): Now a wrapper for describe-key-internal. Bind
+ enable-disabled-menus-and-buttons to t. Populate yank-menu if empty.
+ (describe-key-internal): Renamed from describe-key.
+
+2006-02-11 Milan Zamazal <pdm@zamazal.org>
+
+ * progmodes/glasses.el (glasses-separator): Doc fix.
+ (glasses-original-separator): New defcustom.
+ (glasses-make-readable, glasses-convert-to-unreadable): Use it.
+
+2006-02-11 Martin Rudalics <rudalics@gmx.at>
+
+ * mwheel.el (mouse-wheel-up-event): Doc fix.
+
+2006-02-11 Mathias Dahl <brakjoller@hotmail.com>
+
+ * tumme.el (tumme-dir): Change default value to "~/.emacs.d/tumme/".
+ (tumme-dir): New function. Copied from thumbs.el.
+
+2006-02-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * desktop.el (desktop-outvar): Fix typo.
+ (desktop-save-buffer-p): Doc fix.
+
+ * subr.el (substitute-key-definition): Fix typo.
+
+2006-02-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * frame.el (select-frame-set-input-focus): Call x-focus-frame also
+ when window-system is mac.
+
+ * term/mac-win.el (fontset-standard): Rename from "fontset-mac".
+
+2006-02-10 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (substitute-key-definition-key): Pass t for NOERROR to
+ indirect-function instead of using condition-case.
+
+2006-02-10 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el (tumme-copy-with-exif-file-name): Try to make docstring
+ less `colloquial'...
+
+2006-02-09 Mathias Dahl <mathias.dahl@gmail.com>
+
+ * tumme.el: Add a couple of todo items.
+
+2006-02-09 Lars Hansen <larsh@soem.dk>
+
+ * hilit-chg.el: Add highlight-changes-mode to desktop-locals-to-save.
+ (highlight-changes-mode): Don't change desktop-locals-to-save.
+
+2006-02-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-mode.el (image-toggle-display): Clear image cache if using
+ filename.
+
+2006-02-09 Masatake YAMATO <jet@gyve.org>
+
+ * dired-x.el (dired-guess-shell-alist-default): Add .man as
+ a `dired-man' target.
+
+ * progmodes/autoconf.el (autoconf-font-lock-keywords): Check start
+ boundary of symbols.
+
+2006-02-08 Peter Doornbosch <peter.doornbosch@luminis.nl> (tiny change)
+
+ * vc-svn.el (vc-svn-print-log): Show recent commits as well.
+
+2006-02-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * hilit-chg.el (hilit-chg-update-all-buffers): Use `mapc' instead of
+ `mapcar'; return nil.
+
+2006-02-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-drag-track): Don't change window if we rebind to
+ some other event.
+
+2006-02-08 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-startup-channels-alist):
+ Add irc.freenode.net and #emacs as defaults.
+ (rcirc-ignore-all-activity-flag): Remove variable.
+ (rcirc-authinfo): New variable.
+ (rcirc-authinfo-filename): Remove variable.
+ (rcirc-always-use-server-buffer-flag): New flag.
+ (rcirc): M-x rcirc will automatically connect without prompting.
+ C-u M-x rcirc will prompt. Use rcirc-connect to create a
+ connection in lisp.
+ (rcirc-process-server-response-1): Remove everything but the nick
+ portion of the sender so it doesn't need to be done everywhere
+ else. Update related code.
+ (global-map): Remove global keybindings.
+ (rcirc-get-buffer-create): Make sure rcirc-topic is set.
+ (rcirc-send-input): Split into several functions.
+ (rcirc-process-input-line, rcirc-process-message)
+ (rcirc-process-command): New functions.
+ (rcirc-target-buffer): New function to determine where to route
+ messages.
+ (rcirc-user-nick): Save match data.
+ (rcirc-toggle-ignore-buffer-activity)
+ (rcirc-update-activity-string): Remove global ignore functionality,
+ which can be done now by toggling rcirc-track-minor-mode.
+ (rcirc-track-minor-mode-map): New keymap.
+ (rcirc-track-minor-mode): New minor-mode.
+ (ignore): Make the ignore output nicer. Always print it when
+ adding or removing nicks.
+ (rcirc-url-regexp): Improve.
+ (rcirc-mangle-text): Remove properties before using text in the
+ modeline.
+ (rcirc-authenticate): Authentication data comes from
+ rcirc-authinfo, not the file pointed to by rcirc-authinfo-file.
+ (rcirc-server-prefix): Inherit from rcirc-server.
+
+2006-02-08 Mathias Megyei <Mathias.Megyei@micronas.com> (tiny change)
+
+ * Makefile.in (compile): Append "|| true" to the end of the `find'
+ command, like compile-always does.
+
+2006-02-08 Sam Steingold <sds@gnu.org>
+
+ * net/tramp.el (tramp-maybe-open-connection): Do not wait for
+ output from a dead connection.
+
+2006-02-07 Mathias Dahl <brakjoller@hotmail.com>
+
+ * dired.el (dired-mode-map): Add more bindings for tumme.
+
+2006-02-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * wdired.el (wdired-mode-map): Use remap.
+ (wdired-get-filename): Massage.
+ (wdired-perm-mode-map): Don't copy bindings from wdired-mode-map.
+ (wdired-preprocess-perms, wdired-set-bit, wdired-toggle-bit): Use the
+ `keymap' property rather than `local-map'.
+
+2006-02-07 Mathias Dahl <brakjoller@hotmail.com>
+
+ * tumme.el (tumme-get-thumbnail-image): New utility function.
+ Suggested by from Chong Yidong.
+ (tumme-dired-with-window-configuration): Rename from
+ `tumme-dired'. Add code to save window configuration.
+ (tumme-restore-window-configuration): New command to restore the
+ window configuration that `tumme-dired-with-window-configuration'
+ saves before it changes the window configuration.
+ (tumme-show-all-from-dir): New command to display thumbnails for
+ all files in a directory entered by the user, like M-x thumbs.
+ (tumme-display-thumbs): Call `pop-to-buffer' after all thumbnails
+ have been created.
+ (tumme-display-thumbnail-original-image): Call `display-buffer'.
+ (obsolete-tumme-display-thumbnail-original-image-and-buffer):
+ Remove obsolete test function.
+
+2006-02-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * vc.el (small-temporary-file-directory): Remove defvar; there's
+ a defcustom for it in files.el.
+
+ * tumme.el (tumme-get-thumbnail-image): Add missing arg to `error'.
+ Fix typo in message.
+ (tumme-gallery-generate): Fix typo in `error' message.
+ (tumme-display-window-height-correction)
+ (tumme-display-window-width-correction, tumme-line-up-dynamic)
+ (tumme-line-up-interactive): Dox fixes.
+ (tumme-cmd-rotate-original-options, tumme-display-properties-format)
+ (tumme-restore-window-configuration, tumme-format-properties-string)
+ (tumme-create-thumbs, tumme-display-previous-thumbnail-original):
+ Fix typos in docstrings.
+
+2006-02-07 Chris Moore <christopher.ian.moore@gmail.com>
+
+ * wdired.el (wdired-get-filename): Fix bug: Don't re-normalize OLD.
+
+2006-02-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-tooltip-mode): Remove autoload cookie.
+ User should use hook if desired.
+
+ * progmodes/gdb-ui.el (gdb-post-prompt): Regenerate breakpoints
+ buffer if necessary.
+ (gdb-delete-frame-or-window): New function.
+ (gdb-breakpoints-mode-map): Bind "q" to it.
+
+2006-02-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/nroff-mode.el: Clean up name space.
+ (nroff-mode-syntax-table): Remove spurious `1' in the syntax of \n.
+ (nroff-mode): Obey the global setting of nroff-electric-mode.
+ (nroff-electric-mode): Use define-minor-mode and derived-mode-p.
+
+ * calendar/calendar.el (calendar-increment-month): Typo in last change.
+
+2006-02-06 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * vc-svn.el (vc-svn-previous-version, vc-svn-next-version): New funcs.
+
+2006-02-06 Lars Hansen <larsh@soem.dk>
+
+ * generic-x.el (etc-fstab-generic-mode): Add file system types
+ cifs and usbdevfs. Allow special chars in file names.
+
+2006-02-05 Jay Belanger <belanger@truman.edu>
+
+ Update copyright notices of the files in lisp/calc.
+
+2006-02-05 Romain Francoise <romain@orebokech.com>
+
+ Update copyright notices of all files in the lisp/play directory.
+
+2006-02-04 Luc Teirlinck <teirllm@auburn.edu>
+
+ * ldefs-boot.el: Regenerate.
+
+ * emacs-lisp/find-func.el (find-definition-noselect): Minor doc fix.
+
+2006-02-05 Kim F. Storm <storm@cua.dk>
+
+ * files.el (magic-mode-regexp-match-limit): New defvar.
+ (set-auto-mode): Use it to limit magic-mode-alist matching.
+
+2006-02-04 Eli Zaretskii <eliz@gnu.org>
+
+ * info.el (Info-index, Info-mode): Improve the description of the
+ `i' command.
+
+ * ldefs-boot.el: Regenerate.
+
+2006-02-03 Werner Lemberg <wl@gnu.org>
+
+ * textmodes/nroff-mode.el (nroff-font-lock-keywords): Don't be
+ greedy to find the closing bracket in \*[...] and similar
+ expressions. This is a first rough fix -- many additional
+ refinements are necessary to make nroff mode really usable with groff.
+
+2006-02-03 Jens Petersen <petersen@redhat.com> (tiny change)
+
+ * international/mule-cmds.el (set-locale-environment):
+ Add "/usr/share/X11/locale/locale.alias" to search list for xorg-x11
+ libX11.
+
+2006-02-03 Joe Wells <jbw@macs.hw.ac.uk> (tiny change)
+
+ * arc-mode.el (archive-maybe-copy): Fix the way directories in the
+ archive are created in archive-tmpdir.
+
+2006-02-02 John Paul Wallington <jpw@pobox.com>
+
+ * ibuffer.el (ibuffer-compressed-file-name-regexp): New defcustom.
+ (ibuffer-fontification-alist): Use it.
+ (ibuffer-mode-map): Bind `ibuffer-mark-compressed-file-buffers'
+ to "* z" and the Ibuffer Mark menu.
+
+ * ibuf-ext.el (ibuffer-mark-compressed-file-buffers): New command.
+
+2006-02-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/table.el (*table--cell-describe-mode)
+ (*table--cell-describe-bindings): Undo last change since
+ print-help-return-message is not obsoleted by anything at all.
+
+2006-02-02 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emulation/cua-base.el (cua-mode): Doc fix.
+
+2006-02-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * dframe.el (dframe-handle-make-frame-visible)
+ (dframe-handle-iconify-frame, dframe-get-focus)
+ (dframe-select-attached-frame, dframe-power-click)
+ (dframe-frame-mode): Fix typos in docstrings.
+
+ * ezimage.el (ezimage-mail, ezimage-object-out-of-date)
+ (ezimage-insert-image-button-maybe, ezimage-insert-over-text):
+ Fix typos in docstrings.
+
+ * hi-lock.el (hi-lock-mode, hi-lock-line-face-buffer)
+ (hi-lock-face-buffer, hi-lock-font-lock-hook)
+ (hi-lock-archaic-interface-message-used)
+ (hi-lock-file-patterns-range): Fix typos in docstrings.
+
+ * savehist.el (savehist-loaded, savehist-load, savehist-install)
+ (savehist-autosave, savehist-trim-history): Fix typos in docstrings.
+
+ * mail/mailclient.el (mailclient-place-body-on-clipboard-flag):
+ Fix typo in docstring.
+
+ * net/newsticker.el (newsticker--decode-iso8601-date)
+ (newsticker--set-customvar, newsticker--buffer-insert-item)
+ (newsticker--do-run-auto-mark-filter)
+ (newsticker--parse-generic-feed): Doc fixes.
+ (newsticker--retrieval-timer-list, newsticker-url-list)
+ (newsticker-hide-immortal-items-in-echo-area)
+ (newsticker-hide-obsolete-items-in-echo-area)
+ (newsticker-new-item-face, newsticker--enclosure)
+ (newsticker-buffer-update, newsticker-w3m-show-inline-images)
+ (newsticker--parse-atom-0.3, newsticker--parse-rss-1.0)
+ (newsticker--parse-generic-feed, newsticker--cache-contains)
+ (newsticker--stat-num-items, newsticker-download-enclosures):
+ Fix typos in docstrings.
+
+ * net/rcirc.el (rcirc-debug): Doc fix.
+ (rcirc-fill-column, rcirc-receive-message-hooks)
+ (rcirc-browse-url-map, rcirc-read-only-flag, rcirc-prompt)
+ (rcirc-mode, rcirc-generate-new-buffer-name)
+ (rcirc-startup-channels, rcirc-ignore-update-automatic)
+ (rcirc-cmd-ignore, rcirc-browse-url, rcirc-url-regexp):
+ Fix typos in docstrings.
+ (rcirc-print): "?\ " -> "?\s".
+ (rcirc-cmd-join): Improve argument/docstring consistency.
+
+2006-02-01 Mark A. Hershberger <mah@everybody.org>
+
+ * xml.el (xml-parse-region): Move save-excursion and set-buffer up
+ before narrow-to-region.
+
+2006-02-01 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (move-beginning-of-line): Scan properly for invis change.
+
+ * replace.el (multi-occur-in-matching-buffers): Fix prev change.
+
+2006-02-01 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-convert-file-attributes): Set file's gid
+ change bit only when id-format is 'integer. Reported by Matt
+ Hodges <M.P.Hodges@rl.ac.uk>.
+
+2006-02-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * hilit-chg.el (highlight-changes-initial-state)
+ (highlight-changes-global-initial-state): Doc fixes.
+ (highlight-changes-global-modes, global-highlight-changes):
+ Fix typos in docstrings.
+
+2006-02-01 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-mode): Mention that CUA enables
+ transient-mark-mode in doc string.
+
+2006-01-31 Richard M. Stallman <rms@gnu.org>
+
+ * replace.el (multi-occur): Doc fix.
+ (multi-occur-in-matching-buffers): Rename from
+ multi-occur-by-filename-regexp. Prefix arg says match
+ buffer names instead of file names.
+
+2006-01-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el: Allow non-default values of `bs-header-lines-length'.
+ (bs--running-in-xemacs): Remove (not needed anymore).
+ (bs--set-window-height): Simplify by using `fit-window-to-buffer'
+ instead of `shrink-window', thus avoiding having to compute the
+ height of the window.
+ (bs--up): Wrap around even when there's no header.
+ (bs--down): Use `forward-line' instead of `next-line'.
+
+2006-01-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * image-mode.el (image-toggle-display): Use file name if possible,
+ instead of unnecessarily allocating a (possibly huge) lisp string.
+
+2006-01-30 John Paul Wallington <jpw@pobox.com>
+
+ * subr.el (toplevel): Define `cl-assertion-failed' condition here
+ because the `assert' macro signals it at runtime.
+
+ * emacs-lisp/cl.el (toplevel): Remove definition of
+ `cl-assertion-failed' condition.
+
+2006-01-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * thumbs.el (thumbs-marked-list): Make buffer-local and
+ permanent-local.
+ (thumbs-insert-thumb): Make help-echo non-sticky.
+ (thumbs-file-alist): Use eolp as check for (non)-image.
+
+2006-01-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * ediff-mult.el (ediff-meta-buffer-keymap-setup-hook)
+ (ediff-before-session-group-setup-hooks)
+ (ediff-default-filtering-regexp, ediff-meta-mark-equal-files):
+ Fix typos in docstrings.
+
+ * window.el (bw-dir, bw-eqdir, balance-windows)
+ (split-window-keep-point): Fix typos in docstrings.
+
+ * textmodes/org.el (org-allow-space-in-links, org-closed-string)
+ (org-quote-string, org-calendar-to-agenda-key)
+ (org-agenda-sorting-strategy, org-agenda-use-time-grid)
+ (org-show-following-heading, org-tags-column)
+ (org-use-tag-inheritance, org, org-allow-space-in-links)
+ (org-usenet-links-prefer-google, org-file-apps-defaults-gnu)
+ (org-enable-table-editor, org-calc-default-modes)
+ (org-table-allow-automatic-line-recalculation)
+ (org-export-html-style, org-export-with-fixed-width)
+ (org-export-with-sub-superscripts, org-special-keyword)
+ (org-formula, org-time-grid, org-table-may-need-update)
+ (org-mode, org-goto-ret, org-goto-left, org-goto-right)
+ (org-goto-quit, org-get-indentation, org-end-of-item)
+ (org-move-item-down, org-move-item-up)
+ (org-renumber-ordered-list, org-todo, org-log-done, org-occur)
+ (org-remove-occur-highlights, org-read-date, org-goto-calendar)
+ (org-agenda, org-agenda-day-view, org-agenda-previous-date-line)
+ (org-agenda-log-mode, org-agenda-toggle-diary)
+ (org-agenda-toggle-time-grid, org-agenda-cleanup-fancy-diary)
+ (org-agenda-file-to-end, org-agenda-no-heading-message)
+ (org-agenda-get-closed, org-format-agenda-item)
+ (org-cmp-priority, org-cmp-category, org-cmp-time)
+ (org-agenda-change-all-lines, org-agenda-diary-entry)
+ (org-scan-tags, org-after-todo-state-change-hook, org-tags-view)
+ (org-link-search, org-camel-to-words, org-open-file)
+ (org-remember-handler, org-table-convert-region)
+ (org-table-move-row-down, org-table-move-row-up)
+ (org-table-copy-region, org-table-wrap-region)
+ (org-table-toggle-vline-visibility)
+ (org-table-get-vertical-vector, org-table-modify-formulas)
+ (org-table-get-specials, org-recalc-commands)
+ (org-table-rotate-recalc-marks, org-table-eval-formula)
+ (orgtbl-make-binding, org-in-invisibility-spec-p, org-cycle)
+ (org-level-color-stars-only, org-insert-heading):
+ Fix typos in docstrings.
+ (last-arg): Add defvar.
+
+ * makefile.w32-in (WINS): Add erc.
+ (MH_E_SRC): Update (copied from lisp/Makefile.in).
+
+2006-01-29 Bill Wohler <wohler@newt.com>
+
+ * Makefile.in (MH_E_SRC): Add mh-compat.el, mh-folder.el,
+ mh-letter.el, mh-limit.el, mh-scan.el, mh-show.el, mh-thread.el,
+ mh-tool-bar.el, mh-xface.el. Remove mh-customize.el, mh-init.el.
+ (mh-autoloads): Don't use comments on otherwise empty lines.
+
+2006-01-29 Edward O'Connor <ted@oconnor.cx>
+
+ * emulation/viper.el (viper-major-mode-modifier-list):
+ Add insert-state and vi-state entries for erc-mode.
+ (viper-go-away, viper-set-hooks): Add and remove
+ viper-comint-mode-hook from erc-mode-hook as appropriate.
+
+ * emulation/viper.el (viper-insert-state-mode-list): Add erc-mode.
+
+2006-01-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs--format-aux): Implement `middle' alignment as
+ described in the docstring for `bs-attributes-list'.
+ (bs--get-name): Simplify. Don't pad the buffer name.
+
+2006-01-27 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-find-aspell-dictionaries): If no
+ English aspell dictionary is installed, use the first entry of
+ ispell-dictionary-alist-1.
+
+2006-01-27 Kevin Rodgers <ihs_4664@yahoo.com> (tiny change)
+
+ * textmodes/flyspell.el (flyspell-incorrect, flyspell-duplicate):
+ Doc fix.
+
+2006-01-27 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-vc.el (vc-user-login-name): Wrap defadvice with a test
+ for `process-file', in order to let it work for older Emacsen too.
+
+2006-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * international/latexenc.el: Add a suitable `coding:' tag.
+ (latexenc-find-file-coding-system): Undo last change.
+
+2006-01-27 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Make sure latexenc-main-file is a regular file and is readable.
+
+2006-01-27 Andre Spiegel <spiegel@gnu.org>
+
+ * vc-rcs.el (vc-rcs-fetch-master-state, vc-rcs-consult-headers):
+ Pass FILE to vc-user-login-name.
+
+ * vc-sccs.el (vc-sccs-state): Pass FILE to vc-user-login-name.
+
+2006-01-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * thumbs.el (thumbs-do-thumbs-insertion): Suppress message when
+ there are no more images to display.
+ (thumbs-mark, thumbs-unmark): Revert change so that they move to
+ the next image.
+
+2006-01-26 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-mode): Doc: Use advertised-widget-backward.
+
+ * wid-edit.el (advertised-widget-backward): New alias.
+ (widget-keymap): Use advertised-widget-backward for S-TAB.
+
+ * tumme.el: Correct the keywords.
+ (tumme-dir-max-size): Use defvar.
+ (tumme-setup-dired-keybindings, tumme-dired): Add autoload cookie.
+
+ * simple.el (move-beginning-of-line): Take account of fields.
+ (clone-indirect-buffer-other-window): Take args like
+ clone-indirect-buffer, and work like it.
+
+ * help-fns.el (describe-function): Don't pass `nil' as default.
+
+ * files.el (risky-local-variable-p): Follow var aliases.
+
+ * subr.el (lazy-completion-table): Doc fix.
+
+ * mail/rmailsum.el (rmail-make-summary-line-1): Don't set
+ global binding of `line'.
+
+2006-01-25 Andre Spiegel <spiegel@gnu.org>
+
+ * vc-hooks.el (vc-user-login-name): Rewritten to handle access via
+ Tramp.
+
+ * vc.el (vc-default-dired-state-info): Pass FILE to
+ vc-user-login-name.
+ (vc-default-update-changelog): Don't use vc-user-login-name, we
+ don't need it here.
+
+ * net/tramp-vc.el (vc-user-login-name): Comment out defadvice, it is
+ no longer necessary.
+
+2006-01-25 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (decode-char): Avoid the overhead of
+ calling utf-lookup-subst-table-for-decode if
+ utf-translate-cjk-mode is nil.
+ (encode-char): Avoid the overhead of calling
+ utf-lookup-subst-table-for-encode if utf-translate-cjk-mode is
+ nil.
+
+2006-01-22 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (make-subsidiary-coding-system): Reset
+ `coding-system-define-form' property of subsidiaries to nil.
+ Avoid duplicated entry in coding-system-alist.
+ (make-coding-system): Avoid duplicated entry in
+ coding-system-alist.
+ (define-coding-system-alias): Likewise.
+
+2006-01-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * completion.el: Minor fixes in introductory comment.
+ (completion-def-wrapper): Fix alist.
+
+2006-01-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * thumbs.el (thumbs-new-image-size): New function.
+ (thumbs-increment-image-size-element)
+ (thumbs-decrement-image-size-element, thumbs-increment-image-size)
+ (thumbs-decrement-image-size): Delete.
+ (thumbs-resize-image-1): Rename from thumbs-resize-image. Keep old
+ temp files and use to resize.
+ (thumbs-resize-image): Rename from thumbs-resize-image-interactive.
+ Use increment argument to enlarge/shrink. Preserve point.
+ (thumbs-shrink-image): Rename from thumbs-resize-image-size-down.
+ (thumbs-enlarge-image): Rename from thumbs-resize-image-size-up
+ (thumbs-show-thumbs-list): Set thumbs-buffer to current-buffer.
+ (thumbs-mark, thumbs-unmark): Preserve point.
+ (thumbs-modify-image): Keep old temp files and use to modify.
+ Cleanup old temp files at load time. Preserve point.
+ (thumbs-view-image-mode-map): Use new command names.
+
+2006-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * log-view.el (log-view-minor-wrap): First rev is the one at point.
+
+ * calendar/cal-menu.el: Avoid macros from calendar.el so as to break
+ the nastiest part of the cyclic dependency.
+ (cal-menu-update): Use dotimes and calendar-increment-month.
+
+ * calendar/calendar.el: Remove unnecessary leading stars in docstrings.
+ (calendar-week-start-day): Add an :initializer.
+ (calendar-mode-map): Use suppress-keymap, and command remapping.
+ (describe-calendar-mode): Setup xref-stack info for the back button.
+ (calendar-star-date): Insert before delete.
+ (calendar-set-mode-line): Add file-modified info if applicable.
+ (calendar-increment-month): New function.
+
+2006-01-24 Tobias C. Rittweiler <tcr@freebits.de> (tiny change)
+
+ * font-lock.el (lisp-font-lock-keywords-2):
+ Recognize "& keywords" only at word boundaries.
+
+2006-01-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * thumbs.el (thumbs-extra-images): New variable. Make it buffer-local
+ and permanent-local.
+ (thumbs-max-image-number): New variable.
+ (thumbs-do-thumbs-insertion): Use them.
+ (thumbs-per-line): Change default to 4.
+ (thumbs-marked-list): Rename from thumbs-markedL.
+ (thumbs-cleanup-thumbsdir, thumbs-delete-images)
+ (thumbs-rename-images): Use -list instead of L for internal variables.
+ (thumbs-call-convert): Use call-process instead of shell-command.
+ (thumbs-insert-thumb): Add filename as help-echo to each image.
+ (thumbs-show-from-dir): Rename from thumbs-show-all-from-dir.
+ Give dir to thumbs-show-thumbs-list.
+ (thumbs-show-thumbs-list): Set default-directory to that of images.
+ (thumbs-dired-show): Rename from thumbs-dired-show-all.
+ (thumbs-display-thumbs-buffer, thumbs-show-more-images): New functions.
+ (thumbs-mode-map): Bind "+" to thumbs-show-more-images.
+ (thumbs-view-image-mode-map): Bind "^" to thumbs-display-thumbs-buffer.
+
+2006-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * ses.el (ses-read-cell): Provide a default value.
+
+2006-01-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * term/w32-win.el (image-library-alist): Add additional names for
+ GIF library.
+
+2006-01-23 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Add file-regular-p check.
+
+2006-01-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (clone-buffer): Don't show the new buffer in the same
+ window.
+
+2006-01-23 Juri Linkov <juri@jurta.org>
+
+ * faces.el (link, link-visited): New faces based on default values
+ of `info-xref' and `info-xref-visited'.
+
+ * info.el (info-xref): Inherit from `link'.
+ (info-xref-visited): Inherit from `link-visited'.
+
+ * cus-edit.el (custom-buffer-create-internal): Use widget type
+ `custom-manual' instead of `info-link' and don't set properties
+ `button-face' and `mouse-face' explicitly.
+ (custom-browse-group-tag, custom-browse-variable-tag)
+ (custom-browse-face-tag): Inherit from widget class
+ `custom-group-link' instead of `push-button'.
+ (custom-button-unraised): Inherit from `underline' face.
+ (custom-link): Inherit from `link' face. Fix doc and group.
+ (custom-add-parent-links, custom-group-value-create): Don't set
+ properties `button-face' and `mouse-face' explicitly for
+ `custom-group-link' widget.
+ (custom-group-link): Add properties `button-face' and `mouse-face'
+ to widget definition.
+ (custom-field-keymap): New variable. Put `custom-field-keymap' to
+ editable-field's :keymap property.
+ (custom-mode): Fix docstring: substitute keybindings for
+ `widget-forward' and `widget-backward' from `widget-keymap',
+ `widget-complete' from `custom-field-keymap', replace old
+ `Custom-move-and-invoke' with `widget-move-and-invoke'. Untabify.
+
+ * desktop.el (desktop-load-file): Check for `fboundp' before
+ calling `symbol-function'.
+
+ * simple.el (clone-buffer, clone-indirect-buffer)
+ (clone-indirect-buffer-other-window): Use `read-buffer' instead of
+ `read-string'. Fix prompts.
+
+ * play/doctor.el (doctor-mode-map): Rename from `doc-mode-map'.
+
+2006-01-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * thumbs.el (thumbs-file-alist): Avoid creating duplicate entries.
+
+2006-01-22 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (inhibit-splash-screen, initial-scratch-message):
+ Doc fixes.
+
+2006-01-22 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.52.
+
+ * net/tramp.el, net/tramp-ftp.el, net/tramp-util.el,
+ * net/tramp-vc.el: Add code for unloading Tramp. See comment before
+ `tramp-unload-tramp' for checklist.
+
+ * net/tramp.el: Require `timer-funcs' instead of `timer' if in
+ XEmacs. Contributed by Steve Youngs <steve@sxemacs.org>.
+ (tramp-unload-file-name-handler-alist)
+ (tramp-unload-tramp): New defuns.
+ (tramp-advice-PC-expand-many-files): New defadvice.
+ (tramp-save-PC-expand-many-files, tramp-setup-complete): Defuns
+ removed.
+ (tramp-handle-expand-file-name): Remove double slash.
+ (tramp-handle-file-attributes-with-ls): Return t as 9th attribute.
+ It doesn't matter, because it will be converted later on.
+ (tramp-handle-file-ownership-preserved-p): Rewritten. The old
+ implementation was just heuristic.
+ (tramp-post-connection): Set uid and gid properties.
+ (tramp-convert-file-attributes): Set file's gid change bit.
+ (tramp-get-remote-uid, tramp-get-remote-gid): New defuns.
+ (tramp-handle-expand-file-name): Use "~root" for tilde expansion
+ in case of su(do)? methods. The home directory of the local user
+ will be taken else.
+ (tramp-open-connection-telnet)
+ (tramp-open-connection-rsh, tramp-open-connection-su)
+ (tramp-open-connection-multi): Set PS1 to "$ ". Otherwise, a
+ local shell prompt could hurt. Reported by Romain Francoise
+ <romain@orebokech.com>.
+ (tramp-let-maybe): Add `edebug-form-spec' property.
+ (tramp-handle-expand-file-name): Bind `default-directory' locally
+ to "/" in order to avoid problems with UNC shares or Cygwin
+ mounts.
+ (tramp-md5-function): Fix typo in error message.
+
+ * net/tramp-ftp.el (tramp-ftp-enable-ange-ftp): New defun.
+
+ * net/tramp-util.el (top): Apply `ignore' instead of `identity'
+ for byte-compiler pacification.
+
+2006-01-22 Andre Spiegel <spiegel@gnu.org>
+
+ * vc-rcs.el (vc-rcs-state-heuristic): Use file-attributes with
+ ID-FORMAT `string'. This allows us to get rid of
+ `vc-user-login-name UID'.
+
+ * vc-sccs.el (vc-sccs-state-heuristic): Likewise.
+
+2006-01-22 John Paul Wallington <jpw@pobox.com>
+
+ * hl-line.el (hl-line-highlight, hl-line-move): Doc fixes.
+
+2006-01-21 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/find-func.el (find-definition-noselect)
+ (find-variable-noselect): Search variables in C source code too.
+ (find-function-C-source, find-function-noselect, find-function)
+ (find-function-other-frame, find-variable-noselect, find-variable)
+ (find-variable-other-frame, find-variable-at-point):
+ Fix docstrings.
+
+2006-01-21 Francesco Potort,Al(B <pot@gnu.org>
+
+ * mail/rmailout.el (rmail-output): Don't use content-type if it is nil.
+
+2006-01-21 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-emacs-popup, flypell-xemacs-popup):
+ Default to disabling the "Save affix" question.
+
+2006-01-21 Marien Zwart <marienz@gentoo.org> (tiny change)
+
+ * progmodes/python.el (python-mode) <eldoc-mode-hook>: Pass nil as
+ the first arg to run-python.
+
+2006-01-21 Eli Zaretskii <eliz@gnu.org>
+
+ * startup.el (command-line-1): Handle --no-desktop if desktop.el
+ is not loaded.
+
+2006-01-20 Jay Belanger <belanger@truman.edu>
+
+ * calc/calcalg2.el (calc-sum-rec): Fix the sum when the lower
+ limit is 0.
+
+ * calc/calc-arith.el (math-add-symb-fancy): Check the length of
+ the correct variable.
+
+2006-01-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-open-at-point): Fixed bug with matching a
+ link. Fixed buggy argument sequence in call to `org-view-tags'.
+ (org-compile-prefix-format): Set `org-prefix-has-tag'.
+ (org-prefix-has-tag): New variable.
+ (org-format-agenda-item): Remove tags from headline if
+ appropriate.
+ (org-agenda-remove-tags-when-in-prefix): New option.
+ (org-get-tags-at): New function.
+
+2006-01-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * thumbs.el (thumbs-buffer): New variable. Make it buffer local.
+ (thumbs-find-image): Move image name and number from buffer name
+ to mode name. Set thumbs-buffer. Preserve point so that large
+ images remain visible.
+ (thumbs-file-alist): Construct list in thumbs-buffer and reverse
+ order.
+ (thumbs-show-image-num): Get image from thumbs-file-alist. Set
+ mode name.
+ (thumbs-next-image, thumbs-previous-image): Make them work.
+
+2006-01-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (custom-buffer-create-internal): State in the text above
+ the whole buffer buttons that they do not operate on hidden items.
+ (custom-face-menu): Use `custom-face-save' instead of
+ `custom-face-save-command'.
+ (custom-face-save-command): Make it an alias for `custom-face-save'
+ and declare it obsolete.
+ (custom-face-save): Doc fix.
+
+ * dired.el (dired-no-confirm): Add quote.
+ (dired-subdir-alist-pre-R): Add quote in
+ `make-variable-buffer-local' form and remove unbalanced parenthesis.
+
+2006-01-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/table.el (table-mode-indicator): Typo in last change.
+
+2006-01-19 Richard M. Stallman <rms@gnu.org>
+
+ * outline.el (hide-leaves): Don't call outline-end-of-heading.
+ Fixes bug reported in Nov 2005.
+
+ * isearch.el (isearch-forward): Doc fix.
+
+ * dired.el (dired-move-to-filename-regexp): Define as alias.
+ (dired-no-confirm): Use defcustom.
+ (dired-subdir-alist-pre-R): Put defvar at top level.
+
+ * battery.el (battery-linux-proc-acpi): Handle "last full capacity".
+
+ * textmodes/bibtex.el (bibtex-strings, bibtex-reference-keys):
+ Mark as risky.
+
+ * simple.el (set-mark-command): Doc fix.
+ (clone-indirect-buffer-other-window):
+ Read arg like clone-indirect-buffer.
+ (move-beginning-of-line): Skip invisible newlines.
+
+2006-01-19 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/cpp.el (cpp-edit-load): Make the order of
+ listed conditions in a base C code buffer and its associate
+ CPP Edit buffer the same.
+
+2006-01-19 Kenichi Handa <handa@m17n.org>
+
+ * mail/rmail.el (rmail-enable-mime): Docstring fixed.
+ (rmail-mime-feature): Likewise.
+ (rmail-require-mime-maybe): Use display-warning to show a warning
+ message.
+
+ * international/mule.el (auto-coding-regexp-alist-lookup): New fun.
+ (find-auto-coding): Use auto-coding-regexp-alist-lookup.
+
+2006-01-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * array.el: Move defvars out of eval-when-compile.
+ (array-make-template): Replace undeclared global var with a local one.
+ (array-mode): Inline initialization functions.
+ (array-init-local-variables, array-init-max-row)
+ (array-init-max-column, array-init-columns-per-line)
+ (array-init-field-width, array-init-rows-numbered)
+ (array-init-line-length, array-init-lines-per-row): Remove.
+
+ * play/doctor.el: Move defvars out of eval-when-compile. Use dolist.
+ (doc-mode-map): Define explicitly.
+ (doctor-txtype): Use mapc.
+
+ * textmodes/table.el: Move defvars out of eval-when-compile.
+ Remove harmful code meant to avoid byte-compiler warnings.
+ (table-fixed-mode-indicator): Remove. Use a more complex mode-line
+ specification that checks table-fixed-width-mode directly.
+ (table-recognize-region, table-recognize-cell):
+ Use restore-buffer-modified-p.
+ (table-fixed-width-mode): Remove code that refreshes
+ table-fixed-mode-indicator.
+ (*table--cell-describe-bindings, *table--cell-describe-mode):
+ Avoid obsolete name print-help-return-message.
+ (table--test-cell-list): Don't use replace-regexp from elisp.
+ (table--point-entered-cell-function, table--point-left-cell-function):
+ Don't set table-fixed-mode-indicator, use force-mode-line-update.
+
+ * textmodes/org.el: Move defvars out of eval-when-compile. Move code
+ that was after the end of file. Use buffer-file-name variable.
+ (org-timestamp-change): Use with-current-buffer.
+ (org-todo-list): Don't unnecessarily define a new buffer-local var.
+ (org-agenda-file-to-end, org-agenda-file-to-front): Remove unused arg
+ `file'.
+
+ * progmodes/fortran.el: Move defvars out of eval-when-compile.
+ (fortran-break-line): Remove unused var `opoint'.
+ (fortran-abbrev-start): Obey help-event-list.
+
+2006-01-18 Jesper Harder <harder@phys.au.dk>
+
+ * mail/smtpmail.el (smtpmail-send-it): Use insert-buffer-substring.
+
+2006-01-18 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/make-mode.el (makefile-imake-mode): New mode
+ derived from makefile-mode.
+ (makefile-imake-mode-syntax-table): New syntax table
+ derived from makefile-mode-syntax-table.
+ (makefile-mode): Write about makefile-imake-mode in doc string.
+ (makefile-mode-map): Bind "\C-c\C-m\C-i" to makefile-imake-mode.
+ (makefile-imake-font-lock-keywords): New font lock keywords.
+
+ * files.el (auto-mode-alist): Add Imakefile.
+
+2006-01-17 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (ispell-kill-ispell-hook): Add to the hook when
+ loading the file rather than when turning on flyspell-mode.
+
+2006-01-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (customize-rogue): Minor doc fix.
+
+2006-01-17 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-diff): Use dired-dwim-target-directory
+ instead of the file at the mark as default if the file at the mark
+ is the same as the file at point or if dired-dwim-target-directory
+ is not the same as the current directory and the mark is not active.
+
+ * log-view.el (log-view-minor-wrap): Use the same logic to get
+ revisions as `log-view-diff'.
+
+ * info.el (Info-revert-find-node): Check for Info-current-file
+ before preserving new-history.
+
+ * man.el (Man-heading-regexp): Add `/'.
+
+ * textmodes/sgml-mode.el: Add `coding: iso-2022-7bit' cookie.
+ (html-mode): Set `sentence-end-base' instead of `sentence-end'.
+
+2006-01-16 Juri Linkov <juri@jurta.org>
+
+ * faces.el (mode-line-faces): New defgroup.
+ (mode-line-highlight): Move definition after new defgroup.
+ (mode-line, mode-line-inactive, mode-line-highlight):
+ Replace :group `modeline' with `mode-line-faces'.
+ (mode-line-buffer-id): New face.
+ (modeline-buffer-id): New face alias.
+ (vertical-border): Remove :group `modeline'.
+
+ * bindings.el (propertized-buffer-identification): Use face
+ `mode-line-buffer-id' instead of `Buffer-menu-buffer'.
+ (mode-line-next-buffer, mode-line-previous-buffer): New functions.
+ (mode-line-buffer-identification-keymap): For mouse-1 replace
+ `mode-line-unbury-buffer' with `mode-line-previous-buffer'.
+ Replace `mode-line-bury-buffer' with `mode-line-next-buffer' for
+ mouse-3.
+
+ * buff-menu.el (buffer-menu-buffer) <defface>: Renamed from
+ Buffer-menu-buffer. Doc fix.
+ (Buffer-menu-buffer): Face alias to buffer-menu-buffer.
+ (list-buffers-noselect): Use `buffer-menu-buffer' face instead of
+ `Buffer-menu-buffer'.
+
+ * info.el (Info-mode-line-node-keymap): New defvar.
+ (Info-set-mode-line): Use `stringp' to check Info-current-file.
+ Propertize Info-current-node with `mode-line-buffer-id' and
+ `mode-line-highlight' faces and `Info-mode-line-node-keymap'.
+
+ * time.el (display-time-mail-face): Replace :group `faces' with
+ `mode-line-faces'.
+
+2006-01-16 Kenichi Handa <handa@m17n.org>
+
+ * international/code-pages.el: Add autoload cookies for cp125[0345678].
+
+ * language/european.el (cp1252): New alias for windows-1252.
+
+ * international/mule.el (autoload-coding-system): Prepare for EOL
+ variants.
+
+2006-01-15 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-raw-map): Add mapping for insert.
+ (term-send-insert): New.
+ (term-mode): Make variables local here instead of doing it in
+ `term-emulate-terminal'.
+ (term-emulate-terminal): Delete incorrect optimization for cr+lf.
+ Scroll reverse needs to take into account the scroll region.
+ Saving and restoring the cursor should save the color attributes too.
+ (term-reset-terminal): Reset the scroll region.
+ (term-handle-ansi-escape): Cursor up and down should take into
+ account the scroll region.
+ (term-set-scroll-region): Rename from `term-scroll-region'.
+ Move to 0,0 after setting the region.
+ (term-handle-scroll): Handle scroll up.
+ (term-down): Fix off by one error.
+ (term-delete-lines): Do not delete outside the scroll region.
+ (term-insert-lines): Take into account the scroll region.
+
+2006-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/ispell.el (ispell-internal-change-dictionary)
+ (ispell-change-dictionary): Undo most of last change of 2006-01-13.
+ (start, end): Move declaration outside of eval-when-compile.
+
+ * textmodes/flyspell.el (flyspell-kill-ispell-hook): New fun.
+ (flyspell-mode-on): Use it.
+
+ * textmodes/ispell.el (ispell-kill-ispell): Run new hook
+ ispell-kill-ispell-hook.
+
+2006-01-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (Custom-set, Custom-save, Custom-reset-current)
+ (Custom-reset-saved): Do not ask for confirmation in single option
+ buffers.
+
+2006-01-13 Richard M. Stallman <rms@gnu.org>
+
+ * font-lock.el (lisp-font-lock-keywords-1): Minor rearrangement.
+
+2006-01-13 Romain Francoise <romain@orebokech.com>
+
+ * add-log.el (add-change-log-entry, change-log-merge):
+ Conditionally use `hard-newline'.
+
+2006-01-13 Martin Rudalics <rudalics@gmx.at>
+
+ * wid-edit.el (widget-field-end): If the overlay is no longer
+ associated with a buffer, behave as if the overlay didn't exist.
+
+ * cus-edit.el (custom-add-see-also, custom-add-parent-links):
+ Make sure the links use the `custom-link' face.
+
+2006-01-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/ld-script.el (auto-mode-alist): Use \' rather than $.
+ (ld-script-mode): Don't set indent-line-function since we don't
+ have one.
+
+2006-01-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-open-file): Use mailcap for selecting an
+ application.
+ (org-file-apps-defaults-gnu): Use mailcap as the default for
+ selecting an application on a UNIX system.
+ (org-agenda-show-tags): New command.
+ (org-table-insert-hline): Keep cursor in current table line.
+ (org-table-convert): Offset effect of modifying
+ `org-table-insert-hline'.
+ (org-format-agenda-item): New optional argument TAG.
+ (org-compile-prefix-format): Handle %T format for the tag.
+ (org-expand-wide-chars): New function.
+ (org-table-insert-row, org-table-insert-hline):
+ Use `org-expand-wide-chars'.
+ (org-open-file): Fix bug in program launch.
+ (org-get-time-of-day): Fix bug with times before 1am.
+ (org-agenda-menu): Add tags commands.
+
+2006-01-13 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/ispell.el (ispell-init-process): Include the used
+ dictionary in ispell process start message.
+ (ispell-internal-change-dictionary): When flyspell-mode is active
+ and dictionary is changed, make sure ispell process is restarted
+ and flyspell word cache cleared out for the current buffer.
+ (ispell-change-dictionary): Make sure flyspell word cache is
+ cleared out in all buffers with active flyspell mode when
+ dictionary is globally changed.
+ Call ispell-internal-change-dictionary after dictionary change.
+
+2006-01-13 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-lisp/bytecomp.el (batch-byte-recompile-directory): Doc fix.
+
+ * makefile.w32-in (MH_E_SRC): Synchronize with Makefile.in.
+ (pre-mh-loaddefs.el-SH, pre-mh-loaddefs.el-CMD): Update Copyright
+ years. Fix small differences wrt Makefile.in.
+ (recompile): Use --eval '(batch-byte-recompile-directory 0)', like
+ Makefile.in does.
+
+2006-01-12 Bill Wohler <wohler@newt.com>
+
+ * Makefile.in (MH_E_SRC): Replace mh-index.el and mh-pick.el with
+ mh-search.el.
+
+2006-01-12 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/ld-script.el: Update copyright year.
+
+2006-01-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-theme.el (custom-theme-add-variable, custom-theme-add-face):
+ Don't add widget if setting undefined.
+
+2006-01-12 John Paul Wallington <jpw@pobox.com>
+
+ * help-fns.el (describe-variable): Remove newlines from void
+ variable output.
+
+2006-01-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * wdired.el (wdired-mode-map): Add help echo for
+ wdired-abort-changes.
+
+ * man.el (Man-file-name-regexp): Adjust for a list of files.
+
+2006-01-12 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/ld-script.el (auto-mode-alist): Support
+ suffix conventions used in netbsd and eCos.
+
+2006-01-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (custom-reset-menu, custom-buffer-create-internal)
+ (custom-variable-menu, custom-face-menu, custom-group-menu)
+ (Custom-mode-menu): Change names of menu items. (As discussed on
+ emacs-devel.)
+ (custom-face-menu): Add "Undo Edits" item.
+
+ * startup.el (init-file-user): defcustom -> defvar.
+
+ * tooltip.el (tooltip-mode): Doc fix.
+
+2006-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * reveal.el (reveal-post-command): window-buffer signals an error on
+ dead windows rather than returning nil.
+ (reveal-open-new-overlays): An overlay might die while we open others.
+
+2006-01-11 Bill Wohler <wohler@newt.com>
+
+ * cus-dep.el (generated-custom-dependencies-file): Fix typo and
+ phrasing in docstring.
+
+ * Makefile.in (MH_E_SRC): Rename from MH-E-SRC since the dashes
+ can give some systems gas. Add new file mh-buffers.el.
+
+2006-01-06 Masatake YAMATO <jet@gyve.org>
+
+ * font-lock.el (cpp-font-lock-keywords): Font lock keywords for
+ C preprocessor forward ported from GNU Emacs 21.2.
+
+ * progmodes/asm-mode.el (asm-font-lock-keywords):
+ Use `cpp-font-lock-keywords'.
+
+ * progmodes/ld-script.el (ld-script-font-lock-keywords): Ditto.
+
+ * progmodes/ld-script.el (auto-mode-alist): Use \\> instead
+ of $ for "\\.ld[s]?".
+
+2006-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/tcl.el (tcl-indent-command): Use indent-for-tab-command.
+ (tcl-indent-line): Return `noindent' if inside a string.
+
+ * progmodes/flymake.el (flymake-split-string): Remove more than one
+ empty string at beg/end of the result.
+ (flymake-find-buildfile, flymake-find-possible-master-files):
+ Use expand-file-name.
+ (flymake-fix-file-name): Don't replace \ with / and don't remove ./
+ since expand-file-name does it for us. Use directory-file-name.
+ (flymake-ler-get-full-file, flymake-ler-get-file, flymake-ler-get-line)
+ (flymake-ler-get-type, flymake-ler-get-text)
+ (flymake-ler-make-ler): Remove. Replace by defstruct. Update callers.
+ (flymake-current-line-no): Remove spurious interactive spec.
+ (flymake-delete-temp-directory): Remove unused var `slash-pos'.
+ (flymake-check-include): Remove arg inc-path merged into inc-name.
+ (flymake-check-patch-master-file-buffer): Fit in 80 columns.
+ Arg regexp-list replaced by a simple regexp.
+ (flymake-master-make-header-init, flymake-master-tex-init):
+ Correspondingly replace regexp-list with a regexp. Fix regexp.
+
+2006-01-10 Simon Josefsson <jas@extundo.com>
+
+ * mail/smtpmail.el (smtpmail-try-auth-methods): Add comment
+ describing AUTH PLAIN fix.
+
+2006-01-10 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * mail/emacsbug.el (report-emacs-bug-text-prompt): Delete var.
+ (report-emacs-bug): Don't record initial prompt text.
+ Instead, add text properties to prompting text.
+ (report-emacs-bug-hook): Delete prompting text.
+
+2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/flymake.el (flymake-find-buildfile): Remove invariant arg
+ `dirs'. Adjust callers.
+
+2006-01-09 John Paul Wallington <jpw@gnu.org>
+
+ * cus-edit.el (custom-comment) <defface>: Add TTY definitions.
+
+2006-01-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * reveal.el (reveal-open-new-overlays): New extracted fun.
+ (reveal-close-old-overlays): Idem. Check overlays's liveness before
+ using them. Simplify the code.
+ (reveal-post-command): Use them. Fix up obsolete windows in
+ reveal-open-spots.
+
+ * progmodes/flymake.el: Use `require' rather than autoload for
+ XEmacs's overlays.
+ (flymake-get-common-file-prefix, flymake-build-relative-filename):
+ Delete. Use file-relative-name instead.
+ (flymake-get-syntax-check-program-args, flymake-perl-init):
+ Simplify the resulting code.
+
+ * log-view.el (log-view-file-re, log-view-message-re): Add support
+ for DaRCS output.
+
+2006-01-09 Alex Schroeder <alex@gnu.org>
+
+ * mail/rmail.el (rmail-reply-regexp): Also ignore mailing list
+ identifiers sometimes added in square brackets at the beginning of
+ subject lines.
+
+2006-01-07 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (Custom-set, Custom-save): Doc fix.
+ (Custom-reset-current, Custom-reset-saved): Change question text.
+ (Custom-reset-standard): Likewise.
+ (custom-variable-reset-saved): Doc fix.
+
+2006-01-07 Eli Zaretskii <eliz@gnu.org>
+
+ * startup.el (init-file-user): Doc fix.
+
+2006-01-07 Alex Schroeder <alex@gnu.org>
+
+ * mail/rmail.el (rmail-current-subject): New function.
+ (rmail-current-subject-regexp): New function.
+ (rmail-next-same-subject): Use it.
+
+ * mail/rmailsum.el (rmail-summary-by-topic):
+ Use rmail-current-subject and rmail-current-subject-regexp.
+ (rmail-summary-next-same-subject): Ditto.
+
+ * net/rcirc.el (rcirc-send-input): No longer check whether the
+ process is open, since not all commands need an open process.
+ (rcirc-send-string): Check whether the process is open before
+ sending anything.
+ (rcirc-ignore-list): New option.
+ (rcirc-ignore-list-automatic): New variable.
+ (rcirc-print): Take rcirc-ignore-list into account.
+ (rcirc-cmd-ignore): New command.
+ (rcirc-ignore-update-automatic): New function.
+ (rcirc-handler-PART, rcirc-handler-QUIT): Use it to maintain the
+ list if ignored nicks.
+ (rcirc-handler-NICK): Ditto, and also ignore the new nick.
+
+2006-01-06 David Reitter <david.reitter@gmail.com>
+
+ * mail/emacsbug.el (report-emacs-bug): Let explanations correctly
+ reflect the address to which the report will be sent.
+
+2006-01-06 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/ld-script.el (auto-mode-alist): Recognize linker
+ scripts whose file-name extensions are "\.x[bdsru]?[cn]?$".
+
+2006-01-01 Michael Ernst <mernst@alum.mit.edu> (tiny changes)
+
+ * textmodes/tildify.el: Fix typos (misspellings) in the commentary.
+
+ * emacs-lisp/find-func.el (find-definition-noselect): Fix typo in
+ the doc string: "functoin" => "function".
+ * ldefs-boot.el: Likewise.
+
+ * textmodes/bibtex.el (bibtex-validate-globally): Fix typo in a
+ message text: "Duplicat" => "Duplicate".
+
+2006-01-06 Sven Joachim <svenjoac@gmx.de> (tiny change)
+
+ * files.el (basic-save-buffer-2): If backing-up failed, reset
+ buffer-backed-up to nil.
+
+2006-01-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb-script-skip-to-head)
+ (gdb-script-calculate-indentation): Indent for breakpoint command
+ lists also.
+
+2006-01-05 Bill Wohler <wohler@newt.com>
+
+ * Makefile.in (compile-always): Add mh-autoloads dependency.
+ (bootstrap): Remove mh-autoloads dependency, as compile dependency
+ provides it.
+ (updates): Remove mh-autoloads dependency, since it probably has
+ already run recently (via recompile).
+
+2006-01-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/flyspell.el (flyspell-accept-buffer-local-defs): Add an
+ argument `force' to disable the flyspell-last-buffer optimization.
+ (flyspell-mode-on): Use it.
+
+ * progmodes/flymake.el (flymake-get-cleanup-function): Default to
+ flymake-simple-cleanup.
+ (flymake-allowed-file-name-masks): Use this new default.
+ All the functions are now called in the right buffer rather than
+ passing the buffer as argument.
+ (flymake-process-sentinel): Switch to buffer before calling cleanup.
+ (flymake-parse-err-lines): Remove redundant buffer arg.
+ (flymake-get-program-dir): Comment out unused function.
+ (flymake-start-syntax-check, flymake-start-syntax-check-process):
+ Remove redundant buffer argument.
+ (flymake-get-real-file-name, flymake-simple-java-cleanup)
+ (flymake-simple-cleanup, flymake-master-cleanup): Remove buffer arg.
+
+2006-01-05 Richard M. Stallman <rms@gnu.org>
+
+ * info.el (Info-find-node): Don't record previous node if have none.
+ (info): Go to directory only if history is empty.
+
+ * simple.el (mark): Doc fix.
+
+2006-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-ae-parameter): Don't coerce data if it is
+ already of desired type.
+ (mac-ae-list): Coerce parameter to "list" type.
+ (mac-dispatch-apple-event): Replace cadr part of event with a
+ dummy position so that event-start returns it.
+
+2006-01-05 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-end-of-subtree): New function.
+ (org-cycle, org-subtree-end-visible-p, org-scan-tags):
+ Use `org-end-of-subtree'.
+ (org-agenda, org-agenda-convert-date): Protect calls to
+ `fit-window-to-buffer'.
+ (org-tags-view): Force matching of sublevels when doing a
+ todo-only search. Define the correct redo command, including the
+ arguments.
+ (org-agenda-redo): Display message.
+ (org-check-for-org-mode): New function.
+ (org-agenda-type): New variable.
+ (org-timeline, org-agenda-list, org-todo-list, org-tags-view):
+ Set `org-agenda-type'.
+ (org-agenda-check-type): New function.
+ (org-agenda-goto-today, org-agenda-later, org-agenda-earlier)
+ (org-agenda-week-view, org-agenda-day-view)
+ (org-agenda-next-date-line, org-agenda-previous-date-line)
+ (org-agenda-log-mode, org-agenda-toggle-diary)
+ (org-agenda-toggle-time-grid, org-agenda-date-later)
+ (org-agenda-date-prompt, org-agenda-diary-entry)
+ (org-agenda-execute-calendar-command, org-agenda-goto-calendar)
+ (org-agenda-convert-date, org-agenda-menu):
+ Use `org-agenda-check-type'.
+ (org-make-overlay, org-delete-overlay)
+ (org-detatch-overlay, org-move-overlay, org-overlay-put):
+ New compatibility functions.
+ (org-calendar-select-mouse): New command.
+
+2006-01-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (Custom-reset-current, Custom-reset-saved)
+ (Custom-reset-standard): Fix y-or-n-p messages.
+ (custom-link): New face for links.
+ (custom-buffer-create-internal, custom-manual): Use it.
+ (custom-face-save): Push to theme-face before setting face spec.
+
+ * wid-edit.el (widget-default-mouse-face-get): New function.
+ (widget-specify-button): Handle mouse-face like button-face.
+
+ * custom.el (load-theme): Clear old theme settings if reloading.
+
+2006-01-03 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (custom-buffer-create-internal): Move whole buffer
+ "Erase Customization" button back to same position it occupies in
+ the individual State menus.
+
+2006-01-04 Kim F. Storm <storm@cua.dk>
+
+ * wid-edit.el (key-sequence): Rework widget to read key binding
+ using `kbd' syntax. Use C-q to insert literal key, event, or code.
+ (widget-key-sequence-default-value): Default value for empty sequence.
+ (widget-key-sequence-map): New map for reading key binding. Bind C-q.
+ (widget-key-sequence-read-event): New command for C-q.
+ (widget-key-sequence-validate, widget-key-sequence-value-to-internal)
+ (widget-key-sequence-value-to-external): New functions.
+
+2006-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/flymake.el (flymake-create-temp-with-folder-structure):
+ Use expand-file-name.
+ (flymake-delete-temp-directory): Use expand-file-name,
+ file-name-directory, and directory-file-name.
+ (flymake-strrchr): Delete.
+ (flymake-start-syntax-check): Don't pass the redundant buffer argument
+ to the init-f function.
+ (flymake-save-buffer-in-file, flymake-init-create-temp-buffer-copy)
+ (flymake-init-find-buildfile-dir)
+ (flymake-init-create-temp-source-and-master-buffer-copy)
+ (flymake-simple-make-init-impl, flymake-simple-make-init)
+ (flymake-master-make-init, flymake-master-make-header-init)
+ (flymake-simple-make-java-init, flymake-simple-ant-java-init)
+ (flymake-perl-init, flymake-simple-tex-init, flymake-master-tex-init)
+ (flymake-xml-init): Remove corresponding redundant buffer argument.
+ (flymake-allowed-file-name-masks): Remove last elems that are equal to
+ the default anyway. Clean up regexps.
+
+ * progmodes/flymake.el (flymake-temp-source-file-name)
+ (flymake-master-file-name, flymake-temp-master-file-name)
+ (flymake-base-dir): New buffer-local vars.
+ (flymake-buffer-data, flymake-get-buffer-value)
+ (flymake-set-buffer-value): Replace those hash-tables by the new
+ buffer-local vars. Update callers.
+
+ * progmodes/flymake.el (flymake-check-start-time)
+ (flymake-check-was-interrupted, flymake-err-info, flymake-is-running)
+ (flymake-last-change-time, flymake-new-err-info, flymake-timer):
+ Move definition, so we can remove redundant earlier declaration.
+ (flymake-replace-regexp-in-string, flymake-split-string)
+ (flymake-get-temp-dir): Use defalias.
+ (flymake-popup-menu): Remove `pos' argument. Use posn-at-point.
+ (flymake-xemacs-window-edges): Remove unused function.
+ (flymake-get-point-pixel-pos): Move.
+ (flymake-pid-to-names, flymake-reg-names)
+ (flymake-get-source-buffer-name, flymake-unreg-names): Remove.
+ Replace by a simple list flymake-processes and by process-buffer.
+ Update callers. Other than simplify the code, it uses buffers rather
+ than buffer-names so it doesn't get confused by uniquify.
+ (flymake-buffer-data): The global value should just be nil.
+
+ * emacs-lisp/bytecomp.el (byte-compile-file-form-defalias):
+ Optimize the body of a defalias like any other code.
+
+ * font-lock.el (font-lock-fontify-buffer, font-lock-fontify-region):
+ Make sure we've setup font-lock's vars. It may influence which
+ function we then call.
+ (font-lock-default-fontify-buffer): Don't bother calling set-defaults
+ here since it's too late anyway.
+
+2006-01-03 Romain Francoise <romain@orebokech.com>
+
+ * startup.el (fancy-splash-tail, normal-splash-screen):
+ Update copyright year.
+
+2006-01-02 J.D. Smith <jdsmith@as.arizona.edu>
+
+ * mouse.el (mouse-drag-track): Rename, from
+ `mouse-drag-region-1'. Includes optional argument required to
+ enable post-drag event processing (e.g. delete region keys).
+ Can be used without this argument to track a mouse region and operate
+ on it as soon as the drag completes.
+ (mouse-drag-region): Use `mouse-drag-track'.
+
+2006-01-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-guess-name-alist, custom-guess-doc-alist):
+ Move to `custom-buffer' group.
+
+ * cus-theme.el: Rewrite the Custom New Theme Mode interface.
+ (custom-new-theme-mode-map, custom-theme-insert-variable-marker)
+ (custom-theme-insert-face-marker, custom-theme-variable-menu)
+ (custom-theme-face-menu): New variables.
+ (custom-theme-add-variable, custom-theme-variable-action)
+ (custom-variable-reset-theme, custom-theme-delete-variable)
+ (custom-face-reset-theme, custom-theme-face-action)
+ (custom-theme-delete-face, custom-theme-merge-theme)
+ (custom-theme-add-face, custom-theme-visit-theme): New functions.
+
+2006-01-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el: Move Custom Themes commentary to start of theme code.
+ (custom-known-themes): Rename `standard' theme to `changed'.
+ (custom-push-theme): Caller no longer specifies what theme to use
+ when doing `reset'---the setting is simply removed from the theme.
+ Delete MODE from `theme-value' and `theme-settings' properties.
+ (custom-declare-theme): Ignore &rest args since we don't use them.
+
+ (custom-loaded-themes): Delete variable.
+ (custom-theme-load-themes, custom-theme-loaded-p)
+ (custom-theme-value): Delete functions.
+
+ (custom-declare-theme): Signal error on invalid theme names.
+ (provide-theme): custom-loaded-themes was deleted.
+ (load-theme): Load the file unconditionally.
+ (enable-theme): Call `load-theme' if theme is undefined.
+ (custom-enabled-themes): Only update value for successful loads.
+ (disable-theme): Complete from enabled themes when interactive.
+ (custom-variable-theme-value): Calculate theme value directly.
+
+ (custom-theme-reset-variables, custom-reset-variables): Mark as
+ XEmacs compatibility functions. We don't actually use these.
+
+ * cus-edit.el (custom-variable-state-set):
+ Use custom-variable-theme-value instead of custom-theme-value.
+ (custom-face-state-set): Rename `standard' theme to `changed'.
+ (custom-save-variables, custom-save-faces): Delete unneeded
+ references to custom-reset-variables.
+ (custom-save-resets): Delete function.
+ (custom-save-variables, custom-save-faces): MODE argument deleted.
+ (custom-save-variables, custom-save-faces): Ignore theme values.
+
+ * cus-face.el (custom-theme-reset-faces): Mark as XEmacs
+ compatibility function.
+
+2006-01-01 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (Custom-set, Custom-save): Ask for confirmation.
+ (Custom-reset-current, Custom-reset-saved): Likewise.
+ (Custom-reset-standard): Show message if aborted.
+ (custom-mode): Doc fix, describing those commands.
+
+ * mouse.el (mouse-drag-region-1): When following link via mouse-2,
+ put on event-kind property.
+
+2005-12-31 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (provide-theme): Ban `user' theme name.
+ (custom-enabling-themes): New variable.
+ (enable-theme): Don't enable user if custom-enabling-themes is t.
+ (custom-enabled-themes): Make it a defcustom.
+ (custom-theme-recalc-face): No-op if face is undefined.
+
+ * cus-edit.el (custom-button-mouse): New variable.
+ (custom-button-mouse): New face.
+ (custom-raised-buttons, custom-mode): Use it.
+
+ * cus-theme.el (custom-new-theme-mode): Use custom-button-mouse.
+
+2005-12-31 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/gud.el (gud-display-line): Support hl-line in the
+ source buffer.
+
+2005-12-31 Lennart Borgman <lennart.borgman.073@student.lu.se> (tiny change)
+
+ * mouse.el (mouse-drag-window-above): Verify that the found window
+ overlaps with the given window in the horizontal dimension.
+
+2005-12-31 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (cvs-update): New target.
+
+ * makefile.w32-in (cvs-update): Ditto.
+
+2005-12-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-theme.el (custom-new-theme-mode): Use cus-edit faces.
+ (custom-new-theme-mode-map): New variable.
+
+2005-12-30 Richard M. Stallman <rms@gnu.org>
+
+ * custom.el (custom-load-themes): Function deleted.
+
+ * cus-edit.el (custom-save-loaded-themes): Function deleted.
+ (custom-save-variables): Don't delete or add custom-load-themes call.
+
+2005-12-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * cus-start.el: Add `visible-cursor'.
+
+ * progmodes/flymake.el (flymake-copy-buffer-to-temp-buffer): Simplify.
+ (flymake-parse-output-and-residual): Remove `source-buffer' argument.
+ (flymake-process-filter): Switch to buffer before calling it instead.
+ (flymake-post-syntax-check, flymake-highlight-err-lines)
+ (flymake-delete-own-overlays, flymake-parse-err-lines)
+ (flymake-start-syntax-check, flymake-start-syntax-check-process)
+ (flymake-count-lines, flymake-parse-residual):
+ Remove constant buffer argument.
+ (flymake-start-syntax-check-for-current-buffer): Remove.
+ Update callers to use flymake-start-syntax-check instead.
+ (flymake-display-err-menu-for-current-line):
+ Remove unused var `mouse-pos'.
+ (flymake-restore-formatting): Comment out unused function.
+ (flymake-report-status, flymake-report-fatal-status): Remove buffer
+ argument, use current-buffer instead. Update callers.
+
+2005-12-30 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-mode): Make completion-ignore-case
+ buffer-local because choose-completion-delete-max-match requires
+ that we set completion-ignore-case (i.e., binding via let is not
+ sufficient).
+ (bibtex-complete): Always set completion-ignore-case and
+ choose-completion-string-functions. The latter is needed because
+ choose-completion-string-functions keeps its value if we quit the
+ *Completions* buffer without requesting a completion.
+
+2005-12-30 Andreas Schwab <schwab@suse.de>
+
+ * progmodes/cc-defs.el: Ignore errors from font-lock-compile-keywords.
+
+2005-12-30 Eli Zaretskii <eliz@gnu.org>
+
+ * jit-lock.el (jit-lock-chunk-size): Doc fix.
+
+2005-12-30 Juri Linkov <juri@jurta.org>
+
+ * locate.el (locate-fcodes-file, locate-header-face)
+ * progmodes/delphi.el (delphi-other-face)
+ * progmodes/glasses.el (glasses-face): Add tag "None" to const nil.
+
+ * paren.el (show-paren-match, show-paren-mismatch): Use existing
+ group `paren-showing-faces'.
+
+ * net/goto-addr.el (goto-address-highlight-keymap): Fix docstring.
+ (goto-address): Fix docstring.
+
+ * net/webjump.el (webjump-sample-sites): Update URLs.
+
+ * textmodes/fill.el (fill-single-word-nobreak-p): Use `sentence-end'.
+
+ * subr.el (cancel-change-group): Add listp around pending-undo-list.
+
+2005-12-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-compile-keywords): Signal an error when
+ font-lock-set-defaults hasn't been called.
+
+2005-12-29 Luc Teirlinck <teirllm@auburn.edu>
+
+ * subr.el (noreturn, 1value): Doc fixes.
+
+2005-12-29 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-text-in-field-bounds): Handle case
+ that assoc-string returns nil.
+
+2005-12-29 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-entry-type-whitespace)
+ (bibtex-entry-type-str, bibtex-empty-field-re)
+ (bibtex-search-backward-string, bibtex-preamble-prefix)
+ (bibtex-search-entry, bibtex-enclosing-entry-maybe-empty-head): Remove.
+ (bibtex-any-valid-entry-type): New variable.
+ (bibtex-parse-field-name): Simplify.
+ (bibtex-parse-string, bibtex-search-forward-string): New arg empty-key.
+ (bibtex-preamble-prefix): Include left delimiter.
+ (bibtex-search-forward-field, bibtex-search-backward-field):
+ Allow unbounded search past entry boundaries (required by bibtex-pop).
+ (bibtex-text-in-field-bounds): Use push.
+ (bibtex-text-in-field): Do not use bibtex-narrow-to-entry.
+ (bibtex-parse-preamble, bibtex-valid-entry)
+ (bibtex-beginning-first-field): New functions.
+ (bibtex-skip-to-valid-entry): Use bibtex-valid-entry. Fix regexp.
+ (bibtex-map-entries): Fix docstring.
+ (bibtex-flash-head): New arg prompt. Simplify.
+ (bibtex-enclosing-field): Include code of bibtex-inside-field.
+ (bibtex-insert-kill): Simplify. Always insert text past the
+ current field or entry.
+ (bibtex-format-entry): Use bibtex-parse-field.
+ (bibtex-pop): Use bibtex-beginning-of-entry and
+ bibtex-end-of-entry to initiate the search. Insert empty field if
+ we found ourselves.
+ (bibtex-print-help-message): New args field and comma.
+ Handle entry keys.
+ (bibtex-make-field): Use bibtex-beginning-of-entry.
+ (bibtex-end-of-entry): Use bibtex-valid-entry. Recognize any
+ invalid entry.
+ (bibtex-validate): Use bibtex-valid-entry and bibtex-parse-string.
+ Handle preambles. Simplify code for thorough test.
+ (bibtex-next-field, bibtex-find-text, bibtex-find-text-internal):
+ New arg comma. Handle entry heads.
+ (bibtex-remove-OPT-or-ALT, bibtex-remove-delimiters)
+ (bibtex-kill-field, bibtex-copy-field-as-kil, bibtex-empty-field):
+ New arg comma.
+ (bibtex-kill-entry): Use bibtex-any-entry-maybe-empty-head.
+ (bibtex-fill-field): Simplify.
+ (bibtex-fill-entry): Use bibtex-beginning-first-field and
+ bibtex-parse-field.
+ (bibtex-convert-alien): Do not wait before calling bibtex-validate.
+ (bibtex-complete): Use bibtex-parse-preamble.
+
+2005-12-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-tooltip-print, gdb-tooltip-print-1):
+ Display name of expression instead of convenience variable.
+ (gdb-post-prompt): Only call gdb-get-changed-registers if needed.
+
+ * progmodes/gud.el (gud-tooltip-dereference): Rename from
+ toggle-gud-tooltip-dereference.
+ (gud-tooltip-print-command): Move concatenation of "*" to expr to...
+ (gud-tooltip-tips): ...here when dereferencing.
+
+2005-12-28 Bill Wohler <wohler@newt.com>
+
+ * simple.el (mh-e-user-agent): Move to mh-e/mh-comp.el and autoload.
+
+2005-12-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-annotate-display): Replace optional arg `color-map' with
+ compulsory arg `ratio'. Inline body of vc-annotate-time-span.
+ (vc-annotate-display-autoscale): Adjust call.
+ (vc-annotate-display-default): Adjust call. Make arg compulsory.
+ Fix interactive spec.
+ (vc-annotate-time-span): Remove.
+ (vc-annotate-oldest-in-map): Rename from vc-annotate-car-last-cons.
+ (vc-annotate-mode-menu, vc-annotate-display-autoscale)
+ (vc-annotate-display-select): Use new name.
+
+ * vc.el (vc-annotate-mode-map): Remove obsolete binding.
+ (vc-annotate-mode-menu): Remove left-over redundant declaration.
+ Correct the construction of span entries. Simplify.
+ (vc-annotate-display-select): Fix the nil case.
+ (vc-annotate): Remove obsolete (and now broken) code.
+ (vc-annotate-extract-revision-at-line): Remove obsolete code.
+ (vc-annotate-time-span): Remove unused arg `quantize'. Simplify.
+
+2005-12-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * subr.el (lazy-completion-table): Correct typo in docstring.
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' for
+ `send-mail-function'.
+
+ * mail/sendmail.el (send-mail-function): Autoload the standard-value.
+
+2005-12-05 Ralf Angeli <angeli@iwi.uni-sb.de>
+
+ * mail/smtpmail.el (smtpmail-try-auth-methods):
+ Send credentials together with "AUTH PLAIN" command.
+
+2005-12-27 Richard M. Stallman <rms@gnu.org>
+
+ * mouse.el (mouse-drag-region-1): When remapping mouse-1 to
+ mouse-2, go back to previously selected window, so it's selected
+ when mouse-2 command runs.
+
+2005-12-27 Juri Linkov <juri@jurta.org>
+
+ * descr-text.el (describe-text-sexp): Use square brackets for
+ button [Show] to distinguish it from the property value `show'.
+ (describe-property-list): Use `insert-text-button' with
+ `help-face' type instead of putting face in quotes, because button
+ is not created automatically for a list of faces.
+ (describe-text-properties-1): Put button-type value in quotes to
+ distinguish from plain text "button".
+ (describe-char): Display code point values in hex. Don't use
+ `symbol-name' for `current-input-method' because it is a string.
+ Use `insert-text-button' with `help-face' type instead of putting
+ hardcoded face in quotes, because button is not created automatically.
+
+2005-12-27 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/glasses.el (glasses-face): More specific custom type.
+
+ * files.el (set-visited-file-name): Doc fix.
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Use local var buffer-scan-pos to advance scan for next misspelling.
+ Advance it only after we find the misspelling.
+
+2005-12-27 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ New criteria for finding the misspelling in the buffer.
+
+2005-12-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * help-mode.el (help-insert-string): Set help-xref-stack-item
+ rather than call help-setup-xref.
+
+ * descr-text.el (describe-char): Revert previous changes for
+ optional buffer argument.
+
+2005-12-27 Juri Linkov <juri@jurta.org>
+
+ * help-mode.el (help-insert-string): New function. Save buffer
+ contents in cases where it is impossible to recompute the old contents.
+
+ * descr-text.el (describe-char): Set help-xref-stack-item
+ explicitly after buffer has been generated.
+
+2005-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * cus-start.el (all): Add x-gtk-show-hidden-files.
+
+2005-12-26 Richard M. Stallman <rms@gnu.org>
+
+ * replace.el (perform-replace): Calculate match-again
+ before skipping read-only matches.
+
+ * paren.el (paren-showing-faces): New group.
+ (show-paren-match, show-paren-mismatch): Move to that group.
+
+ * button.el (button): Put into group `basic-faces'.
+
+ * progmodes/make-mode.el: Remove faces from group `faces'.
+
+ * apropos.el (apropos, apropos-value): Doc fix.
+ (apropos-documentation): Doc fix.
+
+2005-12-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (lazy-completion-table): Remove argument `args'.
+
+ * textmodes/bibtex.el (bibtex-strings, bibtex-reference-keys):
+ Don't use the `args' argument of lazy-completion-table.
+
+2005-12-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * descr-text.el (describe-char): Add optional argument for buffer.
+ Set buffer appropriately. Call help-setup-xref.
+ Suggested by Stefan Monnier.
+
+2005-12-26 Juri Linkov <juri@jurta.org>
+
+ * descr-text.el: Require `help-fns' at runtime. Don't require
+ `button' for byte compilation.
+ (describe-text-widget): Add `help-echo' for first button.
+ Use `help-info' for second.
+ (describe-property-list): Use `help-argument-name' instead of `italic'.
+ (describe-text-category): Add prompt to interactive spec.
+ Call `help-setup-xref'.
+ (describe-char): Use `help-character-set'. Add `help-echo' for
+ code point. Use `help-input-method'. Remove superfluous insert.
+
+2005-12-25 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/cc-defs.el (c-emacs-features): Do parse-partial-sexp
+ at point, in case of narrowing.
+
+ * progmodes/delphi.el (delphi-other-face): Allow nil in type.
+
+ * locate.el (locate-header-face): Allow nil in type.
+
+ * progmodes/cpp.el (cpp-face-none-list): Use cpp-face instead of face.
+
+2005-12-25 Romain Francoise <romain@orebokech.com>
+
+ * battery.el (battery-linux-proc-acpi): Also try
+ `/proc/acpi/thermal_zone/THM0/temperature'.
+
+2005-12-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (custom-push-theme): Fix docstring.
+
+ * cus-edit.el (custom-variable-set, custom-variable-save)
+ (custom-variable-save): Custom-quote widget values.
+ (customize-save-variable): Fix custom-push-theme call.
+
+2005-12-24 Eli Zaretskii <eliz@gnu.org>
+
+ * w32-fns.el (w32-batch-update-autoloads): New function.
+
+ * makefile.w32-in (autoloads, $(lisp)/mh-e/mh-loaddefs.el):
+ Use w32-batch-update-autoloads, and don't setq generated-autoload-file
+ from the command line.
+
+2005-12-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (custom-push-theme): Clarify docstring. VALUE nil for
+ reset means to remove setting from theme entirely. Don't keep
+ expanding theme-settings list; delete old entries if necessary.
+
+ * cus-edit.el (custom-buffer-create-internal): Move "Erase
+ customization" button one line up.
+ (custom-themed): New face.
+ (custom-magic-alist): New value, THEMED, for theme settings.
+ (custom-variable-state-set, custom-face-state-set):
+ Check theme-value instead of saved-value.
+ (custom-variable-reset-standard, custom-face-reset-standard):
+ Remove theme setting entirely. Recalculate new values.
+ (custom-variable-set, custom-variable-set)
+ (custom-variable-reset-saved, custom-variable-reset-backup)
+ (custom-face-set, custom-face-reset-saved): Update `user' theme.
+ (custom-variable-save): Fix typos.
+
+2005-12-23 Juri Linkov <juri@jurta.org>
+
+ * emacs-lisp/edebug.el (edebug-all-defs, edebug-all-forms):
+ Add autoload cookies.
+ (edebug-outside-d-c-i-n-s-w): New variable.
+ (edebug-display, edebug-outside-excursion): Use it to save the
+ original value of default-cursor-in-non-selected-windows.
+ Set default-cursor-in-non-selected-windows to t while Edebug
+ is active.
+ (edebug-mode, edebug-eval-mode): Doc fix.
+
+ * mouse.el (mouse-choose-completion): Replace `buffer-substring'
+ with `buffer-substring-no-properties' to remove common substring
+ highlighting.
+
+ * info.el (info-other-window, info): Rename function argument
+ `file' to `file-or-node'.
+ (Info-complete-menu-item): Use local variable `complete-nodes' to
+ keep the global value of `Info-complete-nodes' unchanged for
+ subsequent completions.
+ (info-tool-bar-map): Put `Info-index' icon just before `Info-search'.
+
+ * simple.el (get-next-valid-buffer, last-buffer)
+ (next-error-buffer-p, next-error-find-buffer)
+ (minibuffer-history-sexp-flag): Doc fix.
+
+ * savehist.el (savehist-mode-hook): Add `:group'.
+
+ * log-view.el: Call autoload for vc-find-version.
+ (log-view-current-file): Adjust subgroup numbers.
+ (log-view-current-tag): Add `length'.
+
+2005-12-23 Richard M. Stallman <rms@gnu.org>
+
+ * vc.el (vc-annotate-car-last-cons): Defn moved up.
+
+2005-12-23 Juri Linkov <juri@jurta.org>
+
+ * hi-lock.el (hi-lock-archaic-interface-message-used)
+ (hi-lock-archaic-interface-deduce, hi-lock-mode): Doc fix.
+ (hi-lock-mode): Display "Hi" in the mode line only when
+ hi-lock-interactive-patterns or hi-lock-file-patterns is non-nil.
+ (hi-lock-write-interactive-patterns):
+ Use hi-lock-file-patterns-prefix instead of hard-coded "Hi-lock".
+ (hi-lock-set-pattern, hi-lock-set-file-patterns)
+ (hi-lock-font-lock-hook): Set 3rd arg `how' of
+ font-lock-add-keywords to t.
+
+2005-12-23 David Koppelman <koppel@ece.lsu.edu>
+
+ * hi-lock.el (hi-lock-highlight-range): New variable.
+ (hi-lock-mode, hi-lock-unface-buffer): Call font-lock-fontify-buffer
+ only if font-lock-fontified is non-nil. Remove overlays.
+ (hi-lock-set-pattern): Call font-lock-fontify-buffer if
+ font-lock-fontified is non-nil, otherwise use overlays (instead of
+ text properties).
+ (hi-lock-string-serialize-hash, hi-lock-string-serialize-serial):
+ New variables.
+ (hi-lock-string-serialize): New function.
+
+2005-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-find-file-existing): New function.
+ (menu-bar-file-menu): Use menu-find-file-existing for Open.
+
+ * tool-bar.el (tool-bar-setup): Open changed to menu-find-file-existing.
+
+2005-12-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el: Remove unnecessary leading * in docstrings.
+ (vc-annotate-mode-map): Move initialization into declaration.
+ (vc-static-header-alist): Nitpick on the regexp.
+ (vc-default-init-version): New fun.
+ (vc-register): Use it.
+ (vc-insert-headers): Use dolist.
+ (vc-annotate-get-backend): Remove unused function.
+ (vc-annotate-add-menu): Remove. Build the menu directly at toplevel.
+ (vc-annotate-mode): Remove corresponding call.
+ (vc-annotate-car-last-cons): Simplify.
+ (vc-annotate-buffers): Remove var.
+ (vc-annotate-backend): Make it buffer-local.
+ (vc-annotate): Move the interaction to the interactive spec.
+ Add a `buf' argument.
+ (vc-annotate-warp-version): Use this new `buf' argument to avoid
+ killing&creating a vc-annotate buffer, which is very disruptive when
+ the buffers are shown in dedicated frames.
+
+2005-12-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * descr-text.el: Add FSF as maintainer.
+ (describe-text-mode, describe-text-mode-map)
+ (describe-text-mode-hook, describe-text-done): Delete. Use normal
+ help-mode.
+ (describe-text-widget, describe-text-sexp)
+ (describe-property-list, describe-text-category)
+ (describe-text-properties, describe-text-properties-1)
+ (describe-char): Use help buttons instead of widgets.
+ (describe-char-unicodedata-file): Make URL link in doc string.
+
+2005-12-22 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-variable-prompt): Say "variable" in prompt.
+ (custom-buffer-create-internal): Reword the top-of-buffer help intro.
+ Don't include buttons that write a file when there's no file.
+ (custom-variable-menu, custom-face-menu, custom-group-menu):
+ Don't include commands that write a file when there's no file.
+ (customize-browse): Reword the top-of-buffer help intro.
+ (custom-buffer-create-internal): Fix previous change.
+ (customize-changed-options-previous-release): Prev release is 21.1.
+ (customize-changed-options): Doc fix.
+ (customize-changed): New alias.
+ (custom-reset-menu, custom-magic-alist, Custom-mode-menu):
+ Say "standard values".
+ (Custom-reset-standard): Doc fix.
+ (custom-face-reset-standard): Doc fix.
+
+2005-12-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-default-fontify-buffer): Try and set-defaults
+ even if font-lock-mode is non-nil since it may be t without having
+ turned on font-lock-mode-internal.
+ (font-lock-choose-keywords): Minor optimization.
+ (font-lock-add-keywords, font-lock-remove-keywords)
+ (font-lock-set-defaults): Don't call make-local-variable on a variable
+ that we know to already be local.
+
+2005-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * emacs-lisp/lisp.el (lisp-complete-symbol): Don't print progress
+ messages if in the minibuffer.
+
+2005-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/flyspell.el (flyspell-check-word-p): Don't quote - in a RE.
+ (tex-mode-flyspell-verify, flyspell-get-word)
+ (flyspell-external-point-words): Don't use point-min/max uselessly.
+
+ * emacs-lisp/lisp.el (lisp-complete-symbol): Mostly undo the change
+ by Kevin Rodgers. Instead, just hide the completions buffer if we
+ don't need to show it.
+
+2005-12-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * wid-edit.el (file, directory): Doc fixes for the `define-widget's.
+
+2005-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp.el (lisp-complete-symbol): Don't call
+ delete-windows-on with an inexistent buffer.
+
+2005-12-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-tooltip-modes, gud-tooltip-display):
+ Delete defcustom variable :tag names.
+
+2005-12-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * log-view.el (log-view-file-re, log-view-message-re): Use shy groups.
+ (log-view-font-lock-keywords): Ajust subgroup numbers.
+ (log-view-current-tag): Don't hard code the number of subgroups.
+
+2005-12-20 Juri Linkov <juri@jurta.org>
+
+ * tooltip.el (tooltip): Move defgroup before define-minor-mode.
+ (tooltip-x-offset, tooltip-y-offset): Doc fix.
+
+ * menu-bar.el (menu-bar-menu-frame-live-and-visible-p)
+ (menu-bar-non-minibuffer-window-p): Instead of checking
+ display-multi-frame-p, use selected-frame when menu-updating-frame
+ is nil.
+
+2005-12-20 Stuart Herring <herring@lanl.gov> (tiny change)
+
+ * align.el (align-rules-list): Use [ \t] instead of \s-
+ for column separators in text mode.
+
+2005-12-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * help-mode.el (help-customize-variable, help-customize-face):
+ Don't pop help-xref-stack as help-follow no longer pushes
+ anything on to it.
+
+2005-12-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-custom-commands): New option.
+ (org-agenda): Offer custom commands on splash screen.
+ (org-make-tags-matcher): Parser for Boolean logic added.
+ (org-agenda-set-tags): New command.
+ (org-agenda-menu, org-agenda-mode-map): Add `org-agenda-set-tags'.
+ (org-set-tags): Efficiency improvements.
+ (org-auto-align-tags): New option.
+ (org-todo, org-demote, org-promote): Realign tags.
+ (org-tags-completion-function): Use also "&" and "|" as separators.
+ (org-org-menu): Agenda commands simplified.
+
+2005-12-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (customize-apropos, customize-apropos-options):
+ Docstring changes.
+
+ * font-lock.el (font-lock): Add tags to the links in the defgroup.
+
+2005-12-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-mode): Wrap while widened.
+ (longlines-decode-region, longlines-encode-region): Compute max
+ just once.
+
+2005-12-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * cus-edit.el (mac): New group.
+
+ * cus-start.el (all): Add user options in macterm.c. Add test for
+ Mac-related built-ins. Fix test for GTK-related built-ins.
+
+ * term/mac-win.el (mac-handle-language-change)
+ (mac-ae-open-documents, mac-ae-get-url, mac-services-open-file)
+ (mac-services-open-selection, mac-services-mail-selection)
+ (mac-services-mail-to, mac-services-insert-text)
+ (mac-dispatch-apple-event): Add docstrings.
+ (x-get-selection, mac-select-convert-to-string): Select coding
+ system from `utf-16be' and `utf-16le' using `byteorder'.
+
+2005-12-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (lazy-completion-table): Don't be fooled if the var holds
+ a "list" (lambda ...) rather than a real completion list.
+
+ * emacs-lisp/cl-extra.el (cl-macroexpand-all): Fix code-walk for
+ lexical-let when encountering ((lambda (...) ...) ...).
+
+2005-12-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/sh-script.el (sh-mode):
+ * language/ethio-util.el (ethio-fidel-to-sera-mail-or-marker):
+ * textmodes/picture.el (picture-mode): Update docstrings.
+
+2005-12-17 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (autoloads, custom-deps): Warn that parts of
+ commands enclosed in $(ARGQUOTE)s should not be split between two
+ lines, as that will break with GNU Make >3.80, when sh.exe is used
+ and arg quoting is with '..'.
+ (autoloads): Don't break the quoted --eval expression between
+ several lines.
+
+2005-12-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * emacs-lisp/edebug.el (edebug-safe-prin1-to-string):
+ Capture error from printing circular structures.
+
+2005-12-17 Martin Rudalics <rudalics@gmx.at>
+
+ * wid-edit.el (widget-checkbox-action): Clear undo info.
+
+2005-12-16 Bill Wohler <wohler@newt.com>
+
+ * menu-bar.el (kill-this-buffer): Set a good example by using menu
+ bar, not menubar in comment.
+
+2005-12-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cc-engine.el (c-after-change-check-<>-operators):
+ After-change-functions should not clobber the match data.
+
+2005-12-16 Juri Linkov <juri@jurta.org>
+
+ * simple.el (choose-completion): Use `buffer-substring-no-properties'
+ instead of `buffer-substring'.
+ (completion-common-substring): Doc fix.
+ (completion-setup-function): Use minibuffer-completion-contents
+ instead of minibuffer-contents. Don't set common-string-length
+ initially. Remove special handling of partial-completion-mode.
+ Move computation of completion-base-size into one cond.
+ Call completion-base-size-function in mainbuf. In computation of
+ completion-base-size for file name completion don't move point to
+ the end of the minibuffer. Move computation of common-string-length
+ into one cond. Start putting faces only when common-string-length>=0.
+ Add condition to put completions-common-part when
+ common-string-length>0.
+
+ * complete.el (PC-do-completion): Remove `(equal (point) beg)' to
+ place point at the first different character in the minibuffer
+ even if this position is at the beginning of the minibuffer.
+
+ * info.el (Info-read-node-name-1): In completion-base-size-function's
+ lambda return 1 if common-substring or minibuffer-completion-contents
+ starts with (, and 0 otherwise.
+
+ * emacs-lisp/crm.el (crm-minibuffer-completion-help):
+ Use `crm-current-element' for second arg of `display-completion-list'.
+
+2005-12-16 Klaus Zeitler <kzeitler@lucent.com>
+
+ * files.el (set-auto-mode): Look for an interpreter specified on
+ the first line also if search for mode specification succeeded,
+ but the mode is not known.
+
+2005-12-16 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-tags-match-list-sublevels): New option.
+ (org-open-at-point): Implement tag searches as links.
+ (org-fit-agenda-window, org-get-buffer-tags, org-get-tags)
+ (org-make-tags-matcher, org-scan-tags, org-activate-tags): New funs.
+ (org-tags-sparse-tree, org-tags-view, org-set-tags)
+ (org-agenda-dispatch): New commands.
+ (org-use-tag-inheritance, org-tags-column): New options.
+ (org-tab-follows-link, org-return-follows-link): New options.
+ (org-tags): New customize group.
+ (org-start-icalendar-file): Get local time zone.
+ (org-tags-completion-function): New function.
+ (org-set-font-lock-defaults): Make sure links will also be
+ highlighted inside headlines.
+
+2005-12-16 Mark Plaksin <happy@usg.edu> (tiny change)
+
+ * term.el (term-emulate-terminal):
+ Let term-handle-ansi-terminal-messages override what Bash says about
+ its current directory.
+
+2005-12-16 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * bindings.el (last-buffer): Move to simple.el.
+ * simple.el (last-buffer): Move here.
+ (get-next-valid-buffer): New function.
+ (next-buffer): Use frame-local buffer list, maintain buried buffer list.
+ (prev-buffer): Ditto. Rename to `previous-buffer'.
+
+ * menu-bar.el (menu-bar-update-buffers): Update uses of `prev-buffer'.
+ * bindings.el (global-map): Ditto.
+
+2005-12-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el: Introductory comment change.
+ (custom-magic-alist): Change message string for the `rogue' state.
+
+2005-12-15 Richard M. Stallman <rms@gnu.org>
+
+ * tooltip.el: Delete defcustom variable :tag names.
+
+ * complete.el (partial-completion-mode): Doc fix.
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Use save-excursion to ensure we don't move backward in the
+ search loop, not even one character.
+ (flyspell-delete-all-overlays): Use remove-overlays directly.
+
+ * textmodes/ispell.el (ispell-current-personal-dictionary): New var.
+ (ispell-start-process): Set that variable.
+ Clear ispell-buffer-local-name.
+ (ispell-internal-change-dictionary):
+ Set ispell-current-dictionary after killing process.
+ (ispell-buffer-local-dict):
+ Don't set spell-personal-dictionary after killing process.
+ (ispell-buffer-local-words): Don't clear out ispell-buffer-local-name.
+ (ispell-tex-skip-alists, ispell-html-skip-alists)
+ (ispell-skip-region-alist): Mark as risky.
+
+ * net/newsticker.el (newsticker--retrieval-timer-list)
+ (newsticker--display-timer, newsticker-running-p)
+ (newsticker-ticker-running-p): Definitions moved up.
+
+2005-12-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-many-windows): Echo new state in minibuffer.
+
+2005-12-15 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-dialog-goto-first): Fix missing error condition.
+ (recentf-edit-list, recentf-open-files): Signal an error when
+ there is no recent file.
+
+2005-12-14 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * textmodes/texinfmt.el (texinfo-format-region): Set buffer to
+ read-only except for texinfo-format-region evaluation.
+
+2005-12-14 Richard M. Stallman <rms@gnu.org>
+
+ * vc.el (vc-default-previous-version, vc-default-next-version)
+ (vc-do-command): Doc fixes.
+
+2005-12-14 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-expand-strings)
+ (bibtex-autokey-expand-string, bibtex-name-part)
+ (bibtex-entry-type-whitespace, bibtex-entry-type-str)
+ (bibtex-any-entry-maybe-empty-head, bibtex-string-type)
+ (bibtex-preamble-prefix, bibtex-string-empty-key): New variables.
+ (bibtex-entry-type, bibtex-entry-head): Match only valid entries.
+ (bibtex-entry-postfix, bibtex-known-entry-type-re)
+ (bibtex-valid-entry-re, bibtex-any-valid-entry-re)
+ (bibtex-valid-entry-whitespace-re, bibtex-empty-field-re)
+ (bibtex-field-name-for-parsing, bibtex-remove-delimiters-string)
+ (bibtex-beginning-of-last-entry): Remove.
+ (bibtex-parse-field-name): Use bibtex-field-name. Issue error
+ message if comma is missing but buffer is read-only.
+ (bibtex-parse-field-text): Handle whitespaces at the end of field
+ text. Return 3-element list with beginning and end of field text
+ and end of field.
+ (bibtex-end-of-text-in-field, bibtex-end-of-field): Change accordingly.
+ (bibtex-parse-field): Remove arg name. Use bibtex-field-name.
+ (bibtex-search-forward-field, bibtex-search-backward-field):
+ Search always delimited by limits of entry. Use more efficient
+ search algorithms.
+ (bibtex-name-in-field): Use bibtex-start-of-name-in-field and
+ bibtex-end-of-name-in-field.
+ (bibtex-text-in-field-bounds): Handle BibTeX strings when
+ extracting the content of a field.
+ (bibtex-text-in-field): Use search limits.
+ (bibtex-parse-string-prefix): Handle empty string keys based on
+ bibtex-string-empty-key.
+ (bibtex-parse-string): Fix docstring.
+ (bibtex-text-in-string): Use bibtex-text-in-field-bounds.
+ (bibtex-preamble-prefix, bibtex-strings): New functions.
+ (bibtex-skip-to-valid-entry): Include preceding whitespace in
+ BibTeX entries (consistent with other BibTeX functions).
+ (bibtex-map-entries): Use bibtex-skip-to-valid-entry.
+ (bibtex-search-entry): Fix docstring. Simplify.
+ (bibtex-flash-head, bibtex-complete-string-cleanup)
+ (bibtex-count-entries, bibtex-sort-buffer): Simplify.
+ (bibtex-beginning-of-first-entry): Use bibtex-skip-to-valid-entry.
+ (bibtex-parse-entry): New optional arg content.
+ (bibtex-format-entry, bibtex-autofill-entry, bibtex-url): Use it.
+ Use bibtex-text-in-field-bounds.
+ (bibtex-print-help-message): Handle BibTeX strings and preambles.
+ (bibtex-end-of-entry): Use bibtex-preamble-prefix and
+ bibtex-parse-string-postfix.
+ (bibtex-find-text-internal): New function.
+ (bibtex-remove-delimiters): Use it.
+ (bibtex-find-text): Use it. New optional arg help.
+ (bibtex-complete): Handle BibTeX string and preamble entries.
+ (bibtex-Preamble): Fix order of closing delimiters.
+
+2005-12-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-default-revert): New fun.
+
+ * vc-mcvs.el (vc-mcvs-revert): Fix call to vc-default-revert.
+
+2005-12-14 Romain Francoise <romain@orebokech.com>
+
+ * font-lock.el (font-lock-keywords-alist): Rename `append' to `how'.
+ (font-lock-add-keywords, font-lock-update-removed-keyword-alist):
+ (font-lock-remove-keywords): Likewise.
+
+2005-12-14 Juri Linkov <juri@jurta.org>
+
+ * log-view.el (log-view-diff): Doc fix.
+
+ * isearch.el (isearch-query-replace): Use (mark) instead of
+ isearch-opoint if mark is active in transient-mark-mode.
+
+2005-12-14 Aaron S. Hawley <Aaron.Hawley@uvm.edu>
+
+ * isearch.el (isearch-query-replace): Check for isearch-other-end.
+
+2005-12-14 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * progmodes/cpp.el (cpp-face): New widget.
+ (cpp-known-face, cpp-unknown-face, cpp-edit-list): Use it.
+
+2005-12-14 Juri Linkov <juri@jurta.org>
+
+ * help-macro.el (make-help-screen): Bind `inhibit-read-only' to t
+ around `erase-buffer' and `insert'.
+
+ * descr-text.el (describe-text-properties): Replace buffer name
+ "*Help-2*" with "*Help*<2>".
+ (describe-char): Add functions print-help-return-message,
+ toggle-read-only. Use help-setup-xref with nil to not store
+ describe-char in help-xref-stack. Use help-make-xrefs to
+ make [back] button.
+
+ * desktop.el (desktop-minor-mode-table): Add vc-dired-mode with nil.
+
+ * wdired.el (wdired-old-point): New internal variable.
+ (wdired-change-to-wdired-mode): Set it buffer-locally.
+ (wdired-abort-changes): Restore point after aborting changes.
+
+2005-12-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-do-command): Add a new value t for okstatus.
+
+ * vc-svn.el (vc-svn-registered): Use it to avoid popping up a spurious
+ frame in case of errors.
+
+2005-12-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-bar-showhide-fringe-menu): Move "On the Right"
+ so it comes after "On the Left" in the menu.
+
+2005-12-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (customize-apropos, customize-apropos-options)
+ (customize-apropos-faces, customize-apropos-groups): Doc fixes.
+
+2005-12-12 Bill Wohler <wohler@newt.com>
+
+ * vc-svn.el (vc-svn-registered): Fix problem of visiting
+ non-writable Subversion-controlled files by saving window
+ configuration before calling vc-do-command. vc-do-command calls
+ pop-to-buffer on error which is unexpected during registration.
+
+2005-12-12 Jay Belanger <belanger@truman.edu>
+
+ * calc/README: Update the summary of changes.
+
+2005-12-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * descr-text.el (describe-char): Rework last fix to solve the problem
+ is the same way it's solved for everything else in that function
+ (i.e. by extracting the info before setting up the *Help* buffer).
+
+2005-12-12 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (version-regexp-alist): Allow space as separator before
+ non-numeric part, e.g. "1.0 alpha".
+ (version-to-list): Interpret .X.Y version as 0.X.Y version.
+
+2005-12-12 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda, org-timeline, org-todo):
+ Implement Logging and the keep-modes setting.
+ (org-get-category): Make sure a string is returned.
+ (org-log-done): New function.
+ (org-log-done, org-closed-string): New options.
+
+2005-12-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * tooltip.el (tooltip-y-offset): Change default to 20.
+
+2005-12-12 Richard M. Stallman <rms@gnu.org>
+
+ * mouse.el (mouse-drag-vertical-line): Use adjust-window-trailing-edge.
+
+ * frame.el (display-hourglass): Doc fix.
+
+ * help.el (help-for-help-internal): Simplify entry for `a'.
+
+ * info.el (Info-on-current-buffer): Doc fix.
+ (info-insert-file-contents): Don't test (featurep 'jka-compr).
+
+ * startup.el (inhibit-splash-screen): Make this the real name.
+ (inhibit-startup-message): Make this the alias.
+ (command-line): Find only simple.el, and use its directory
+ to fill in other preloaded files' names.
+ (command-line): Deactivate the mark if deactivate-mark is set.
+
+ * international/mule.el (load-with-code-conversion):
+ Bind deactivate-mark.
+
+ * progmodes/compile.el (compilation-error-regexp-alist): Doc fix.
+
+2005-12-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (customize-apropos): Avoid listing an option more
+ than once under different aliases. No longer list user options
+ that are not defined with defcustom (unless a prefix arg is given).
+ Doc fix.
+ (customize-apropos-options): Doc fix.
+
+2005-12-11 Juri Linkov <juri@jurta.org>
+
+ * frame.el (set-background-color, set-foreground-color)
+ (set-cursor-color, set-mouse-color, set-border-color):
+ Add explicit prompts to read colors by `facemenu-read-color'.
+ (show-trailing-whitespace, blink-cursor-delay)
+ (blink-cursor-interval, display-hourglass, hourglass-delay):
+ Remove tags.
+ (display-hourglass, hourglass-delay): Doc fix.
+ (cursor-in-non-selected-windows): Capitalize words in tag.
+
+ * faces.el (frame-background-mode): Replace `choice-item' keywords
+ with `const' to not make [default] button. Change default value tag
+ from `default' to `automatic'. Doc fix.
+ (trailing-whitespace) <defface>: Change group `whitespace' to
+ `whitespace-faces'.
+
+2005-12-11 Richard M. Stallman <rms@gnu.org>
+
+ * buff-menu.el (Buffer-menu-sort-column): Not a user variable.
+
+2005-12-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Create keymap for mac-apple-event-map.
+
+2005-12-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el (tooltip-mode): Move to start of file so that it
+ appears at top of customize buffer.
+
+ * progmodes/gud.el (gud-tooltip-modes, gud-tooltip-display):
+ Add the gud groupname.
+ (gud-tooltip-mode): Add the tooltip groupname.
+ (gud-tooltip-echo-area): Add the gud groupname. Remove tag to
+ avoid conflict with tooltip-use-echo-area.
+
+2005-12-10 Romain Francoise <romain@orebokech.com>
+
+ * help.el (help-for-help-internal): Add `r' in doc string.
+
+2005-12-10 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * align.el (align-regexp, align-highlight-rule):
+ Use region-beginning and region-end instead of point and mark, so that
+ repetition (with `repeat-complex-command') recomputes the region
+ bounds.
+
+2005-12-10 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * window.el (bw-get-tree, bw-get-tree-1, bw-find-tree-sub)
+ (bw-find-tree-sub-1, bw-l, bw-t, bw-r, bw-b, bw-dir, bw-eqdir)
+ (bw-refresh-edges, bw-adjust-window, bw-balance-sub): New functions.
+ (balance-windows): Rewrite using the above new functions.
+
+2005-12-10 David Koppelman <koppel@ece.lsu.edu>
+
+ * hi-lock.el (hi-lock-mode): Rename from hi-lock-buffer-mode;
+ react if global-hi-lock-mode seems intended.
+ (global-hi-lock-mode): Renamed from hi-lock-mode.
+ (hi-lock-archaic-interface-message-used)
+ (hi-lock-archaic-interface-deduce): New variables.
+ (turn-on-hi-lock-if-enabled, hi-lock-line-face-buffer)
+ (hi-lock-face-buffer, hi-lock-face-phrase-buffer)
+ (hi-lock-find-patterns, hi-lock-font-lock-hook):
+ Replace hi-lock-buffer-mode with hi-lock-mode.
+
+2005-12-10 Kevin Rodgers <ihs_4664@yahoo.com> (tiny change)
+
+ * emacs-lisp/lisp.el (lisp-complete-symbol): Regenerate the
+ completion list, even after a partial completion has been
+ inserted in the current buffer. If there are more than 1
+ completion, redisplay the *Completions* buffer; if the
+ completion is unique, delete the *Completions* window.
+
+2005-12-10 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmail.el (rmail-next-same-subject): Handle multiple "Re: "
+ strings and long subject lines that were broken into multiple
+ lines at arbitrary places. Handle subjects that have "Re: " in
+ the middle.
+
+2005-12-10 John W. Eaton <jwe@octave.org>
+
+ * progmodes/octave-mod.el (octave-electric-space): Don't indent
+ comments or strings if octave-auto-indent is nil.
+
+2005-12-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Require url when compiling.
+ Call mac-process-deferred-apple-events after loading init files.
+ (mac-apple-event-map): New defvar. Define event handlers in it.
+ (core-event, internet-event): New Apple event class symbols.
+ (open-application, reopen-application, open-documents)
+ (print-documents, open-contents, quit-application)
+ (application-died, show-preferences, autosave-now, get-url):
+ New Apple event ID symbols.
+ (about): New HICommand ID symbol.
+ (mac-event-spec, mac-event-ae): New macros.
+ (mac-ae-parameter, mac-ae-list, mac-bytes-to-integer)
+ (mac-ae-selection-range, mac-ae-text-for-search)
+ (mac-ae-open-documents, mac-ae-text, mac-ae-get-url): New functions.
+ (mac-application-menu-map): Remove keymap. Handlers for HICommand
+ and Services menu events are now defined in mac-apple-event-map.
+ (mac-drag-n-drop): Remove selection range handling.
+
+2005-12-10 Kenichi Handa <handa@m17n.org>
+
+ * simple.el (zap-to-char):
+ * isearch.el (isearch-process-search-char): Translate CHAR by
+ translation-table-for-input.
+
+2005-12-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * foldout.el (foldout-exit-fold): Properly hide subtree.
+
+2005-12-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * files.el (save-buffer):
+ * international/ucs-tables.el (ucs-set-table-for-input):
+ * mail/mail-extr.el (mail-extract-address-components):
+ * mail/sendmail.el (mail-mode): Reformat doc string.
+
+2005-12-09 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-highlight): Change main overlay priority
+ from 1 to 1001. Simplify.
+ (isearch-lazy-highlight-update): Change lazy overlay priority
+ from 0 to 1000.
+
+ * replace.el (replace-highlight): Change overlay priority from
+ 1 to 1001.
+
+ * textmodes/ispell.el (ispell-highlight-spelling-error-overlay):
+ Change overlay priority from 1 to 1001. Reuse existing overlay.
+
+ * compare-w.el (compare-windows-highlight): Change overlay
+ priority from 1 to 1000.
+
+ * menu-bar.el (menu-bar-edit-menu): Add listp around
+ pending-undo-list to disable menu item "undo" when pending
+ undo list is empty.
+
+ * locate.el (locate): Disable undo in *Locate* buffer.
+
+2005-12-09 Kim F. Storm <storm@cua.dk>
+
+ * mail/smtpmail.el (smtpmail-via-smtp): Disable undo in SMTP buffer.
+
+2005-12-09 David Ponce <david@dponce.com>
+
+ * recentf.el: Improvement of the menu code.
+ (recentf-enabled-p): Move before first use. Use `kill-emacs-hook'
+ instead of menu hook.
+ (recentf-show-menu, recentf-hide-menu): New functions.
+ (recentf-menu-customization-changed, recentf-mode): Use them.
+ (recentf-menu-action, recentf-max-menu-items)
+ (recentf-menu-open-all-flag, recentf-menu-append-commands-flag)
+ (recentf-arrange-by-rule-others)
+ (recentf-arrange-by-rules-min-items)
+ (recentf-arrange-by-rule-subfilter): Don't use
+ `recentf-menu-customization-changed'.
+ (recentf-arrange-rules): Likewise. Accept functions to compute
+ sub-menu titles.
+ (recentf-menu-filter): Likewise. Doc fix.
+ (recentf-menu-value-shortcut): Doc fix.
+ (recentf-dump-variable): Quote atom value.
+ (recentf-make-menu-items): Update to use it as a menu filter.
+ (recentf-match-rule): New function.
+ (recentf-arrange-by-rule): Use it.
+ (recentf-indirect-mode-rule): New function.
+ (recentf-build-mode-rules): Use it.
+ (recentf-dir-rule): New function.
+ (recentf-arrange-by-dir): Use it.
+ (recentf-filter-changer-current): Rename from
+ `recentf-filter-changer-state'. All references updated.
+ (recentf-filter-changer-alist): Update filter names.
+ (recentf-filter-changer-select): New function.
+ (recentf-filter-changer): Use it. Make a sub-menu from filters
+ available in `recentf-filter-changer-alist'.
+ (recentf-data-cache, recentf-clear-data)
+ (recentf-update-menu): Remove. All references updated.
+ (recentf-match-rule-p, recentf-build-dir-rules)
+ (recentf-filter-changer-goto-next)
+ (recentf-filter-changer-get-current)
+ (recentf-filter-changer-get-next): Remove.
+
+2005-12-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (custom-buffer-create-internal): Relabel the whole
+ buffer "Reset" button to "Reset to Current" for consistency with
+ the State buttons.
+
+2005-12-08 John Paul Wallington <jpw@pobox.com>
+
+ * ibuf-ext.el (define-ibuffer-filter filename):
+ If `dired-directory' is a list then really use its car.
+
+2005-12-08 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-rect.el (cua--rectangle-aux-replace):
+ Fix indention of text on right side of replaced rectangle.
+
+2005-12-09 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-buttons, gud-tooltip-tips):
+ No need to check gud-comint-buffer is bound.
+ (gdb): Prevent multiple debugging when first session uses gdba.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ CC Mode update to 5.31.
+
+ * progmodes/cc-subword.el: Add a dummy `c-subword-mode' for
+ Emacsen which lack `define-minor-mode'. (Currently Emacs <21.
+ We might do this function properly in the future).
+
+ * progmodes/cc-cmds.el, cc-defs.el, cc-styles.el, cc-vars.el:
+ New macros c-sentence-end and c-default-value-sentence end, to cope
+ with Emacs 22's new function `sentence-end'.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el (c-show-syntactic-information): Solve the
+ compat issue using `c-put-overlay' and `c-delete-overlay'.
+
+ * progmodes/cc-defs.el (c-put-overlay, c-delete-overlay):
+ New compat macros to handle overlays/extents.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fix.el: Add definitions of the macros push and pop
+ (for GNU Emacs 20.4).
+
+ * progmodes/cc-defs.el
+ (i): Load cc-fix.elc for `push' and `pop' (for GNU Emacs 20.4).
+
+ * progmodes/cc-cmds.el (c-show-syntactic-information): Change the
+ highlighting mechanism so it will work in XEmacs too.
+
+ * progmodes/cc-defs.el: Insert c-int-to-char.
+
+ * progmodes/cc-langs.el (c-nonsymbol-token-char-list): Insert a
+ call to the new macro c-int-to-char. This solves XEmacs's
+ regarding characters as different from integers.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fonts.el (c-make-syntactic-matcher):
+ New internal helper.
+
+ (c-cpp-matchers, c-basic-matchers-before): Use the `eval'
+ construct to make the indirect face lookup work in XEmacs.
+
+ (c-cpp-matchers): Append the negation char face to the existing
+ fontification, so that the cpp face doesn't disappear.
+ Use `c-make-syntactic-matcher' to avoid negation chars in comments
+ and strings.
+
+ * progmodes/cc-fonts.el (c-negation-char-face-name): New variable
+ to map to `font-lock-negation-char-face' in emacsen where it exists.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el: Bind c-subword-mode to C-c C-w.
+
+ * progmodes/cc-subword.el, cc-cmds.el, cc-mode.el:
+ Rename "c-subword-move-mode" as "c-subword-mode".
+
+ * progmodes/cc-mode.el: Added tty suitable bindings for C-c
+ <delete> and C-c C-<delete>. (To the c-hungry- delete functions).
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el: Added autoload directive for
+ `c-subword-move-mode' for use in older emacsen.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el:
+ (i): Insert a binding for C-c C-backspace into
+ c-bind-special-erase-keys which works in TTYs.
+ (ii): Make sure that when file styles are used, any explicitly
+ given style variables take priority over those in the style.
+ Do this by calling `hack-local-variables' a second time.
+
+ * progmodes/cc-vars.el: Add language specific customization
+ widgets for AWK to c-doc-comment-style, c-require-final-newline
+ and c-default-style. Add a defcustom for awk-mode-hook.
+ Give c-syntactic-element and c-syntactic-context doc-strings by
+ directly setting their `variable-documentation' propery.
+ This allows Emacs 22.1 to read these with C-h v.
+
+ * progmodes/cc-awk.el: Apply a tidy-up patch (from Stefan Monnier).
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fonts.el, cc-vars.el
+ (gtkdoc-font-lock-doc-comments, gtkdoc-font-lock-doc-protection)
+ (gtkdoc-font-lock-keywords): GtkDoc patterns contributed by
+ Masatake YAMATO.
+
+ (c-doc-comment-style): Made GtkDoc default in C mode.
+
+ * progmodes/cc-mode.el: Fixed key bindings for C-c C-<backspace>
+ and C-c C-<delete>.
+
+ (c-bind-special-erase-keys): New function for use on
+ `normal-erase-is-backspace-hook' to bind C-c C-<delete> correctly.
+
+ * progmodes/cc-cmds.el (c-hungry-delete): New function to fix
+ <delete> key behavior in XEmacs according to `delete-forward-p'.
+ C.f. `c-electric-delete'.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-mode.el: Give c-hungry-backspace and
+ c-hungry-delete-forward permanent key bindings.
+
+ * progmodes/cc-cmds.el (c-electric-semi&comma):
+ Bind c-syntactic-context for calls to "criteria functions", for
+ consistency with other calls to user functions.
+
+ * progmodes/cc-cmds.el (c-indent-command): Expunge use of
+ `current-prefix-arg', since this might be the prefix arg to a
+ command which calls c-indent-command as a function. Change the
+ interactive spec from "p" to "P".
+
+ * progmodes/cc-styles.el: Amend the doc-string of c-set-style, in
+ reponse to a report from Joseph Kiniry <kiniry@acm.org> that it
+ was difficult to understand.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-engine.el (c-on-identifier): Fix bug when at the
+ first char of an identifier.
+
+ * progmodes/cc-engine.el (c-on-identifier): Handle the "operator
+ +" syntax in C++.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el (c-mask-paragraph): Correct, so that
+ auto-fill doesn't split a c-comment's last word from a hanging
+ "*/" when a space is typed between them after fill-column.
+
+ * progmodes/cc-defs.el: New macro c-delete-and-extract-region.
+
+ * progmodes/cc-styles.el (c-set-style)
+ (c-setup-paragraph-variables): Abort the command if we're not in a
+ CC Mode buffer.
+
+ * progmodes/cc-align.el (c-lineup-C-comments): Correct indentation
+ with blank comment-prefix, and a blank line as the comment's
+ second line.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fonts.el (c-cpp-matchers, c-basic-matchers-before):
+ Incorporate the patterns added in the Emacs development branch
+ for the new Emacs 22 face `font-lock-negation-char-face'.
+
+ * progmodes/cc-fonts.el (c-invalid-face-name): Use "red1" instead
+ of "red" since it stands out better in xterms and DOS terminals.
+
+ * progmodes/cc-engine.el (c-literal-faces):
+ Add `font-lock-comment-delimiter-face' which is new in Emacs 22.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el: Make C-c C-a (`c-toggle-auto-newline')
+ forcibly enable c-electric-flag.
+
+ * progmodes/cc-vars.el, cc-cmds.el: New clean-up
+ `comment-close-slash' on c-electric-slash: if enabled, typing `/' just
+ after the comment-prefix of a C-style comment will close that comment.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fonts.el (c-basic-matchers-before)
+ (c-complex-decl-matchers): Fix the "not-arrow-prefix" regexp used
+ in Pike.
+
+ * progmodes/cc-langs.el (c-other-op-syntax-tokens): Only C++ has
+ digraphs.
+
+ * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el
+ (c-cpp-message-directives, c-cpp-include-directives)
+ (c-opt-cpp-macro-define, c-opt-cpp-macro-define-start)
+ (c-cpp-expr-directives): Introduce new language constants to
+ control cpp syntax in a cleaner way.
+
+ (c-cpp-expr-functions): Rename from c-cpp-defined-fns.
+
+ (c-cpp-matchers, c-forward-to-cpp-define-body): Use them.
+
+ * progmodes/cc-langs.el, cc-fonts.el (c-string-escaped-newlines)
+ (c-multiline-string-start-char): New language constants and
+ variables to specify how newlines in string literals work.
+
+ (c-font-lock-invalid-string): Use them.
+
+ * progmodes/cc-cmds.el (c-try-one-liner): Robustness fix if an
+ unbalanced close brace is entered. Optimization by avoiding going
+ back over arbitrarily large blocks. Removed hints that this
+ function only would be relevant/useful in AWK.
+
+ (c-electric-brace): Indent syntactically after the cleanups since
+ lineup functions might do it differently then.
+
+ * progmodes/cc-engine.el, cc-langs.el
+ (c-opt-op-identifier-prefix): New language constant and variable.
+
+ (c-just-after-func-arglist-p, c-after-special-operator-id)
+ (c-search-decl-header-end, c-inside-bracelist-p): Use it.
+
+ * progmodes/cc-align.el, cc-engine.el
+ (c-after-special-operator-id): New helper to handle C++ operator
+ identifiers.
+
+ (c-lineup-topmost-intro-cont, c-just-after-func-arglist-p)
+ (c-guess-basic-syntax): Handle C++ operator identifiers in
+ declarations.
+
+ * progmodes/cc-langs.el (c-assignment-operators): Add the
+ trigraph version of ^= too.
+
+ * progmodes/cc-langs.el (c-assignment-operators): Add the
+ trigraph version of |= in C++.
+
+ * progmodes/cc-fonts.el (c-font-lock-declarators):
+ Handle `c-decl-hangon-kwds' after the identifier name.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): When deciding
+ whether an arglist is "nonempty", ignore a comment after the open
+ paren if it isn't followed by a non-comment token on the same line.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Case 4:
+ Enable heuristics below the point to cope with classes inside special
+ brace lists in Pike.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el: Amend c-point-syntax to handle macros.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-guess.el (cc-guess-install): New function to
+ install an already guessed style in another buffer.
+
+ * progmodes/cc-defs.el (c-tentative-buffer-changes): No longer
+ sets `inhibit-read-only' - `c-save-buffer-state' should be used
+ anyway if the change always is undone.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ Implement togglable electricity:
+
+ * progmodes/cc-defs.el: Enhance c-save-buffer-state's doc-string,
+ saying when it should be used.
+
+ * progmodes/cc-engine.el: Add the new buffer-local variable,
+ c-electric-flag.
+
+ * progmodes/cc-langs.el: Change the name of c-toggle-auto-state to
+ c-toggle-auto-newline.
+
+ * progmodes/cc-mode.el: Rename c-toggle-auto-state to
+ c-toggle-auto-newline. Remove the binding for
+ c-toggle-auto-hungry-state. Add the binding C-c C-l for the new
+ c-toggle-electric-state.
+
+ * progmodes/cc-vars.el: Make c-syntactic-indentation buffer local.
+
+ * progmodes/cc-cmds.el: Add `c-bytecomp-defun's for
+ c-\(forward\|backward\)-subword.
+ (c-update-modeline): Add the new modeline flag `l' for
+ `c-electric-flag'. Make the auto-newline flag `a' dependent on `l'.
+ (c-toggle-auto-state): Rename it to `c-toggle-auto-newline'.
+ Make the old name an alias of the new name.
+ (c-toggle-electric-state): New function.
+ (c-electric-\(pound\|brace\|slash\|star\|semi&comma\|colon\|lt-gt\|paren\|continued-statement\)):
+ Adapt these functions to do electric things only when
+ c-electric-flag is non-nil.
+ (c-point-syntax, c-brace-newlines, c-try-oneliner): Extract these
+ new functions from c-electric-brace.
+ (c-point-syntax): Add a check for "virtual semicolons" in AWK
+ mode, so that the tentative extra newline doesn't change the
+ syntax of the following brace.
+ (c-electric-brace): Restructure by extracting the above functions.
+ Tidy up the coding somewhat.
+ (c-electric-semi&comma, c-electric-colon, c-electric-paren):
+ restructure a bit.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el (c-show-syntactic-information): Show the
+ anchor position(s) using faces. Thanks to Masatake YAMATO for the idea.
+
+ * progmodes/cc-mode.el, cc-cmds.el, cc-defs.el, cc-engine.el
+ (c-submode-indicators): Change name from `c-auto-hungry-string'
+ since it's now used to track another submode.
+
+ (c-update-modeline): Convert to function and extended to check
+ `c-subword-move-mode'.
+
+ (c-forward-into-nomenclature, c-backward-into-nomenclature):
+ Convert to compat aliases for `c-forward-subword' and
+ `c-backward-subword'.
+
+ * progmodes/cc-subword.el: New functions and minor mode to handle
+ SillyCapsedStyleIndentifiers, contributed by Masatake YAMATO:
+
+ (c-forward-subword, c-backward-subword, c-mark-subword)
+ (c-kill-subword, c-backward-kill-subword, c-transpose-subwords)
+ (c-capitalize-subword, c-downcase-subword, c-upcase-subword):
+ Functions corresponding to the standard word handling functions.
+
+ (c-subword-move-mode): Minor mode that replaces all the standard
+ word handling functions with their subword equivalences.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-vars.el (c-cleanup-list): Insert a customization
+ entry for one-liner-defun.
+
+ * progmodes/cc-defs.el: Give c-tentative-buffer-changes its own
+ name in its def-edebug-spec.
+
+ * progmodes/cc-cmds.el (c-electric-brace): Make the
+ one-liner-defun clean-up work with empty-defun-braces. o-l-d now
+ compacts space before a comment, if this will make things fit on
+ one line.
+
+ Introduce an "awk" style, mainly for auto-newline and clean-ups.
+
+ * progmodes/cc-align.el: New function c-snug-1line-defun-close.
+
+ * progmodes/cc-cmds.el: In c-electric-brace, add code for new
+ clean-up one-liner-defun.
+
+ * progmodes/cc-styles.el: Add the new "awk" style.
+
+ * progmodes/cc-vars.el: Add description of one-liner-defun to
+ c-cleanup-list's doc-string. New user options,
+ c-max-one-liner-length. In c-default-style, set the default style
+ for AWK to "awk".
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-engine.el (c-forward-label): Fix fontification of
+ macros inside labels.
+
+ * progmodes/cc-engine.el (c-looking-at-bos): Obsolete in favor of
+ `c-at-statement-start-p' and `c-at-expression-start-p'.
+
+ * progmodes/cc-defs.el (c-tnt-chng-record-state): Don't signal an
+ error if the mark isn't set.
+
+ * progmodes/cc-engine.el (c-guess-continued-construct)
+ (c-guess-basic-syntax): Use `c-forward-decl-or-cast-1' to more
+ accurately detect functions inside functions.
+
+ * progmodes/cc-engine.el (c-at-expression-start-p): New function
+ like `c-at-statement-start-p' that additionally recognizes commas
+ and expression parentheses as delimiters.
+
+ * progmodes/cc-engine.el (c-looking-at-inexpr-block): Add flag
+ to avoid heuristics that doesn't work for unclosed blocks.
+ (c-at-statement-start-p): New function.
+
+ * progmodes/cc-engine.el, cc-fonts.el: Fixes in handling of
+ Objective-C directives, e.g. directives spanning lines should work
+ reasonably well now.
+
+ (c-put-c-type-property, c-clear-c-type-property): New helpers.
+
+ (c-forward-objc-directive): New function to move over any ObjC
+ directive.
+
+ (c-just-after-func-arglist-p, c-guess-basic-syntax)
+ (c-basic-matchers-before): Use it.
+
+ (c-font-lock-objc-iip-decl): Remove.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Some improvement
+ in the template arglist recognition.
+
+ * progmodes/cc-styles.el (c-style-alist): Fix several
+ inconsistencies in the Whitesmith style.
+
+ * progmodes/cc-align.el (c-lineup-after-whitesmith-blocks):
+ New lineup function to get lines after Whitesmith style blocks
+ correctly indented.
+
+ (c-lineup-whitesmith-in-block): Back out the compensation for
+ opening parens since it's done using `add' lists in the style
+ definition instead. Don't use the anchor position since it varies
+ too much between the syntactic symbols. :P
+
+ * progmodes/cc-vars.el (c-valid-offset): Update.
+
+ * progmodes/cc-engine.el (c-evaluate-offset): Extend to handle
+ lists where the offsets are combined according to several
+ different methods: `first', `min', `max', and `add'.
+ Report offset evaluation errors with `c-benign-error' so that some kind
+ of reindentation still is done.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax):
+ Anchor `arglist-intro' the same way as `arglist-cont-nonempty' and
+ `arglist-close'.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Fix similar
+ situations for `arglist-cont-nonempty' and `arglist-close'.
+
+ * progmodes/cc-langs.el (c-opt-identifier-concat-key-depth): New const.
+
+ * progmodes/cc-defs.el: Use `cc-bytecomp-fboundp' and
+ cc-bytecomp-boundp' in a number of places.
+
+ * progmodes/cc-engine.el (c-beginning-of-statement-1): Fix a
+ macro related issue.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-awk.el: Change the terminology of regexps: A char
+ list is now [asdf], a char class [:alpha:].
+ Include code for char classes.
+ Set c-awk-NL-prop on lines ending in open strings. (Bug fix.)
+ Add character classes (e.g. "[:alpha:]") into AWK Mode's regexps.
+
+ Remove (nearly all of) the cruft associated with AWK Mode's former
+ concept of "virtual semicolons":
+
+ Adapt c-beginning-of-statement, c-end-of-statement (together with
+ subfunctions) to use the new notion of "virtual semicolon" in
+ place of the old awkward special handling for AWK. There remains
+ much cruft in cc-awk.el, cc-cmds.el and cc-engine.el to clear out.
+ * progmodes/cc-cmds.el:
+ (c-ascertain-adjacent-literal): In the backwards direction, now
+ recognises AWK regexp delimiters as string delimiters.
+ (c-after-statement-terminator-p): Adapt for virtual semicolons;
+ check more rigorously for "end of macro".
+ (c-back-over-illiterals, c-forward-over-illiterals): Adapt for
+ virtual semicolons;
+ (c-beginning-of-statement): Adapt for virtual semicolons; Separate
+ out the code for forward movement into ...
+ (c-end-of-statement): Now contains the code for forward movement,
+ adapted for virtual semicolons.
+
+ * progmodes/cc-engine.el:
+ (c-ws*-string-limit-regexp): New regexp.
+ (c-forward-single-comment, c-backward-single-comment): Comment out
+ the (now redundant) "special" AWK stuff.
+
+ * progmodes/cc-styles.el, cc-vars.el: Change the settings of
+ c-string-par-start, c-string-par-separate to be more like Text
+ Mode than Fundamental Mode.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fonts.el (c-font-lock-declarations): Always narrow
+ to the fontified region so that fontification doesn't occur
+ outside it (could happen e.g. when fontifying a line with an
+ unfinished declaration).
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-awk.el: Move regexps for analysing AWK code to near the
+ start of the file. ^L now separate sections of the file.
+ (c-awk-non-eol-esc-pair-re, c-awk-blank-or-comment-line-re)
+ (c-awk-one-line-possibly-open-string-re)
+ (c-awk-regexp-one-line-possibly-open-char-class-re)
+ (c-awk-one-line-possibly-open-regexp-re)
+ (c-awk-one-line-non-syn-ws*-re): New defonsts.
+ (c-awk-at-vsemi-p, c-awk-vsemi-status-unknown-p): New functions.
+
+ Amend the concept of "virtual semicolons" (in the indentation
+ engine) for languages like AWK, such that they are now
+ conceptually attached to end of the last token of a statement, not
+ the end of the line. (In AWK Mode, however, the pertinent text
+ property is still physically set on the EOL.) Remove the specific
+ tests for awk-mode, thus facilitating the introduction of other
+ language modes where EOLs can end statements.
+ (Note: The funtionality in cc-cmds.el, specifically
+ c-beginning/end-of-statement has yet to be amended.)
+
+ * progmodes/cc-defs.el (c-at-vsemi-p, c-vsemi-status-unknown-p):
+ New macros.
+
+ * progmodes/cc-langs.el: Added `#' into AWK Mode's value of
+ c-stmt-delim-chars. New c-lang-defvars: c-at-vsemi-p-fn,
+ c-vsemi-status-unknown-p-fn (in a new page).
+
+ * progmodes/cc-engine.el: In c-beginning-of-statement-1,
+ c-crosses-statement-barrier-p, c-guess-basic-syntax, replace
+ numerous awkward forms like
+ (if (c-major-mode-is 'awk-mode) (c-awk-prev-line-incomplete-p))
+ with (c-at-vsemi-p). Fix a few typos. In c-guess-basic-syntax, new
+ variable before-ws-ip, the place just after char-before-ip appears.
+
+ * progmodes/cc-mode.el: Fix what's almost a semantic ambiguity in
+ a comment.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el (c-electric-brace): Clean up using
+ `c-tentative-buffer-changes'.
+
+ * progmodes/cc-defs.el (c-region-is-active-p): Simplify and
+ convert to macro to choose between Emacs and XEmacs at compile time.
+
+ (c-set-region-active): New set counterpart to `c-region-is-active-p'.
+
+ (c-tentative-buffer-changes): New macro to handle temporary buffer
+ changes in a convenient way.
+
+ (c-tnt-chng-record-state, c-tnt-chng-cleanup): Internal helpers
+ for `c-tentative-buffer-changes'.
+
+ * progmodes/cc-engine.el (c-looking-at-inexpr-block): Tighten up
+ the checks for paren sexps between the point and the keyword, to
+ avoid some false alarms.
+
+ * progmodes/cc-engine.el, cc-langs.el (c-looking-at-inexpr-block):
+ Fixed a situation where an error could be thrown for unbalanced
+ parens. Changed to make use of c-keyword-member' to avoid some
+ repeated regexp matches.
+
+ (c-opt-lambda-key, c-opt-inexpr-block-key, c-opt-inexpr-class-key):
+ These language variable are no longer necessary.
+
+ (c-block-stmt-kwds): New language constant used by
+ c-looking-at-inexpr-block'.
+
+ (c-guess-basic-syntax): Remove an optional check that looked at
+ the existence of the now removed language variables.
+
+ * progmodes/cc-engine.el (c-fdoc-shift-type-backward)
+ (c-forward-decl-or-cast-1): Fix invalid recognition of C++ style
+ object instantiation expressions as declarations in some contexts.
+ This bug only affected languages where the declarator can't be
+ enclosed in parentheses.
+
+ * progmodes/cc-styles.el (c-style-alist): Fix the GNU style to
+ insert newlines before and after substatement braces.
+
+ * progmodes/cc-engine.el: Improved the heuristics for recognizing
+ function declaration headers and the handling of C++ style member
+ init lists.
+
+ (c-just-after-func-arglist-p): Rewritten to use
+ `c-forward-decl-or-cast-1'. Now behaves a bit differently too.
+
+ (c-beginning-of-member-init-list): Remove since it isn't used anymore.
+
+ (c-guess-basic-syntax): Adapt case 5B for the new
+ `c-just-after-func-arglist-p'. Merge cases 5B.1 and 5B.3.
+ Remove cases 5D.1 and 5D.2 since they aren't trigged anymore (case 5B.1
+ covers all cases now).
+
+ * progmodes/cc-defs.el (c-point): Add `bosws' and `eosws'.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el, cc-styles.el, cc-vars.el: New variables
+ c-string-par-start/separate c-sentence-end-with-esc-eol,
+ initialised in c-setup-paragraph-variables, used in string
+ scanning subroutines of c-beginning-of-statement.
+
+ * progmodes/cc-cmds.el (c-electric-brace): Don't delete a comment
+ which precedes the newly inserted `{'.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-engine.el, cc-langs.el: Rewrote the recognition
+ function for declaration level blocks. It should now cope with
+ templates better and also be a lot more comprehensible.
+
+ (c-looking-at-decl-block): The new function.
+
+ (c-search-uplist-for-classkey): The old one. It's now a wrapper
+ for compatibility.
+
+ (c-add-class-syntax, c-guess-continued-construct)
+ (c-guess-basic-syntax): Adapt for `c-looking-at-decl-block'.
+
+ (c-decl-block-key): Change to tell apart ambiguous and
+ unambiguous keywords. Pike specials are now handled directly in
+ the code instead.
+
+ (c-block-prefix-disallowed-chars, c-block-prefix-charset):
+ New language constants and variables to make the backward skip in
+ `c-looking-at-decl-block' as tight as possible.
+
+ (c-nonsymbol-token-char-list): New language constant.
+
+ * progmodes/cc-engine.el (c-backward-<>-arglist): New function to
+ find balanced template arglists backwards.
+
+ * progmodes/cc-defs.el (c-make-bare-char-alt): New helper for
+ making char classes for `c-syntactic-skip-backward'.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Simplify case
+ 16D - can't be a class-close at that point.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax)
+ (c-add-class-syntax): Don't narrow out the enclosing declaration
+ level. This makes everything a lot easier, and it was actually
+ only four small places that needed it to work. Some places that
+ previously did `widen' are removed now, which has the effect that
+ `c-guess-basic-syntax' never will look at things outside the
+ current narrowment now. The anchor position for `topmost-intro'
+ is affected by this, but it was so bogus it was basically useless
+ before, and now it's equally bogus but in a slightly different way.
+
+ (c-narrow-out-enclosing-class): Gone.
+
+ (c-most-enclosing-brace, c-least-enclosing-brace): Don't filter to
+ the narrowed region.
+
+ (c-least-enclosing-brace): Remove silly optional argument.
+
+ * progmodes/cc-engine.el (c-beginning-of-decl-1): Fix bug where
+ the point could be left directly after an open paren when finding
+ the beginning of the first decl in the block.
+
+ * progmodes/cc-engine.el, cc-fonts.el (c-forward-keyword-clause):
+ Specify which submatch to use.
+
+ * progmodes/cc-langs.el (c-symbol-start): Include `@' in ObjC.
+
+ (c-decl-start-re): No longer any need for special treatment of
+ ObjC due to the above.
+
+ (c-other-block-decl-kwds): Handle "extern" in ObjC too since it
+ presumably follows C in that regard.
+
+ * progmodes/cc-langs.el (c-identifier-ops, c-after-id-concat-ops):
+ New language constants to specify operator tokens inside
+ identifiers in a more high level way.
+
+ (c-opt-identifier-prefix-key): New internal language constant.
+
+ (c-opt-identifier-concat-key, c-opt-after-id-concat-key)
+ (c-identifier-start, c-identifier-key): Now completely calculated
+ from other constants.
+
+ (c-identifier-last-sym-match): Decommission since it's no longer used.
+
+ (c-operators): Use `c-identifier-ops'. Document `postfix-if-paren'.
+
+ * progmodes/cc-engine.el (c-forward-name): Remove the
+ optimization when c-identifier-key is equal to c-symbol-key since
+ it doesn't work in byte compiled files. Don't record empty
+ regions as identifiers.
+
+ * progmodes/cc-langs.el (c-filter-ops): New helper function to
+ simplify access to `c-operators' and its likes.
+
+ (c-operator-list, c-all-op-syntax-tokens)
+ (c-nonsymbol-token-regexp, c-<>-multichar-token-regexp)
+ (c-<-op-cont-regexp, c->-op-cont-regexp, c-expr-kwds)
+ (c-primary-expr-regexp, c-cast-parens): Use it.
+
+ * progmodes/cc-defs.el (c-lang-const): Fixes to allow use without
+ an explicit language in functions.
+
+ * progmodes/cc-defs.el (c-make-keywords-re): Add an appendable
+ variant of adornment.
+
+ * progmodes/cc-langs.el (c-any-class-key): Remove unused language
+ variable.
+
+ (c-type-decl-prefix-key): Remove some now unnecessary cruft from
+ the Pike value.
+
+ * progmodes/cc-engine.el (c-on-identifier)
+ (c-simple-skip-symbol-backward): Small fix for handling "-"
+ correctly in `skip-chars-backward'. Affected the operator lfun
+ syntax in Pike.
+
+ * progmodes/cc-langs.el (c-make-init-lang-vars-fun): Disable the
+ diagnostic message about precompiled language vars not being used.
+
+ * progmodes/cc-langs.el (c-paren-nontype-kwds): The GCC keyword
+ "__attribute__" is followed by a parenthesis.
+
+ (c-type-start-kwds, c-prefix-spec-kwds, c-prefix-spec-kwds-re)
+ (c-specifier-key, c-not-decl-init-keywords): Some cleanup using new
+ language constants `c-type-start-kwds' and `c-prefix-spec-kwds'.
+
+ * progmodes/cc-fonts.el, cc-langs.el, cc-engine.el:
+ Internal cleanups to properly detect the declared identifiers in
+ various declarations.
+
+ (c-decl-start-kwds): New language constant to recognize
+ declarations that can start anywhere. Used for class declarations
+ in Pike.
+
+ (c-specifier-key, c-not-decl-init-keywords)
+ (c-decl-prefix-or-start-re, c-find-decl-prefix-search)
+ (c-find-decl-spots): Implement `c-decl-start-kwds'.
+
+ (c-other-decl-kwds, c-postfix-decl-spec-kwds, c-decl-hangon-kwds)
+ (c-decl-hangon-key, c-forward-decl-or-cast-1): Separate the
+ handling of the compiler specific extension keywords into a new
+ language constant `c-decl-hangon-kwds' that defines keyword
+ clauses to be ignored in declarations.
+
+ (c-forward-id-comma-list, c-forward-keyword-clause): Don't skip
+ past unrecognized tokens when handling `c-colon-type-list-kwds'.
+ Necessary to stop at the declared identifier in e.g. IDL valuetype
+ declarations.
+
+ (c-typedef-decl-kwds, c-typeless-decl-kwds, c-type-list-kwds)
+ (c-prefix-spec-kwds-re, c-postfix-spec-kwds)
+ (c-after-suffixed-type-decl-key, c-opt-postfix-decl-spec-key)
+ (c-forward-decl-or-cast-1): Recognize the declared identifier in
+ class and enum declarations as such and not as part of the type.
+
+ (c-forward-decl-or-cast-1, c-forward-label): Relax the
+ interpretation of PRECEDING-TOKEN-END when there's no preceding token.
+
+ (c-forward-decl-or-cast-1): Don't disregard sure signs of
+ declarations when there's some syntax error later on.
+
+ (c-complex-decl-matchers): Did away with a reference to
+ `c-specifier-key'.
+
+ * progmodes/cc-engine.el (c-maybe-labelp): Provide no default
+ value - this variable is always dynamically bound.
+
+ * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el, cc-menus.el
+ * cc-mode.el, cc-styles.el, cc-vars.el, cc-align.el, cc-awk.el
+ * cc-cmds.el, cc-defs.el: Change the policy for marking up
+ functions that might do hidden buffer changes: All such internal
+ functions are now marked instead of those that don't.
+
+ (c-beginning-of-macro, c-end-of-macro, c-(forward|backward)-comments)
+ (c-(forward|backward)-single-comment, c-parse-state, c-on-identifier)
+ (c-(fast-|slow-|)in-literal, c-literal-limits, c-collect-line-comments)
+ (c-literal-type): Allow these functions to make hidden buffer changes,
+ so that they are free to use text property caching later on.
+
+ (c-electric-backspace, c-electric-delete-forward, c-electric-pound)
+ (c-electric-brace, c-electric-slash, c-electric-star)
+ (c-electric-semi&comma, c-electric-colon, c-electric-lt-gt)
+ (c-electric-paren, c-electric-continued-statement, c-indent-command)
+ (c-indent-region, c-mask-paragraph, c-indent-new-comment-line)
+ (c-context-line-break): Add `c-save-buffer-state' calls to comply
+ with the changed semantics of the functions above.
+
+ * progmodes/cc-engine.el (c-beginning-of-statement-1): Fix a bug
+ when macros occur in obscure places. Optimized the sexp movement
+ a bit.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ Enhancements for c-beginning-of-statement to work in AWK Mode:
+
+ * progmodes/cc-awk.el: Supersede c-awk-NL-prop value `;'
+ (completed statement) with `}' (statement completed by closing
+ brace or semicolon) and `$' (statement completed by EOL).
+
+ (c-awk-virtual-semicolon-ends-prev-line-p)
+ (c-awk-virtual-semicolon-ends-line-p)
+ (c-awk-skip-semantic-ws-forward, c-awk-skip-semantic-ws-backward)
+ (c-awk-at-statement-end-p): New functions.
+
+ * progmodes/cc-cmds.el: Simplify the structure of functions
+ c-forward-over-illiterals, c-back-over-illiterals. Enhance these
+ two functions and c-beginning-of-statement to handle AWK Mode.
+
+ * progmodes/cc-engine.el: Enhance c-forward-single-comment,
+ c-backward-single-comment for AWK mode. Attempt to clarify their
+ doc-strings.
+
+ * progmodes/cc-mode.el: Put M-a and M-e into awk-mode-map.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el: Cleaned up the
+ label handling. Labels are now recognized in a uniform and more
+ robust way, regardless of context. Text properties are put on all
+ labels to recognize the following declarations better.
+ Multiword labels are handled both in indentation and fontification for
+ the benefit of language extensions like Qt. For consistency, keywords
+ in labels are now fontified with the label face instead.
+ That also applies to "case" and "default".
+
+ (c-beginning-of-statement-1): Fix some bugs in the label
+ handling. Disregard `c-nonlabel-token-key' in labels that begin
+ with `c-label-kwds'.
+
+ (c-find-decl-spots): Support that the callback adds more
+ `c-decl-end' spots to find.
+
+ (c-forward-decl-or-cast-1): Don't treat a list of plain
+ identifiers followed by a colon as a declaration.
+
+ (c-forward-label): New function to recognize labels.
+
+ (c-guess-basic-syntax): Replace uses of `c-label-key' with
+ `c-forward-label'. Moved the label recognition cases (14 and 15)
+ earlier since they aren't so context sensitive now. Handle labels
+ on the top level gracefully. Moved access label recognition to
+ the generic label case (CASE 15) - removed CASE 5E.
+
+ (c-font-lock-declarations): Add recognition of labels in the
+ same round since we need to handle labels in parallell with other
+ declarations to recognize both accurately. It should also improve
+ speed.
+
+ (c-simple-decl-matchers, c-basic-matchers-after):
+ Move `c-font-lock-labels' so that it only is used on decoration level 2
+ since `c-font-lock-declarations' handles it otherwise.
+
+ (c-complex-decl-matchers): Remove the simplistic recognition of
+ access labels.
+
+ (c-decl-prefix-re): Remove the kludges that was necessary to cope
+ with labels earlier.
+
+ (c-decl-start-re): New language variable to make
+ `c-font-lock-declarations' stop for the special protection labels
+ in Objective-C that start with `@'.
+
+ (c-label-key): Remove since it's no longer used.
+
+ (c-recognize-colon-labels, c-label-prefix-re): New language
+ constants to support recognition of generic colon-terminated labels.
+
+ (c-type-decl-end-used): `c-decl-end' is now used whenever there
+ are colon terminated labels.
+
+ * progmodes/cc-align.el (c-lineup-arglist): Fix bug when the
+ first argument starts with a special brace list.
+
+ * progmodes/cc-engine.el, cc-fonts.el (c-forward-decl-or-cast-1)
+ (c-font-lock-declarations): Break out the declaration and cast
+ recognition from `c-font-lock-declarations' to a new function, so
+ that it can be used in the indentation engine.
+
+ * progmodes/cc-engine.el (c-find-decl-spots): Fix bug in backing
+ up to the start of the literal. Fixed bug with the point on the
+ wrong side of the search limit that could happen when the start
+ position is inside a literal.
+
+ * progmodes/cc-engine.el (c-parse-state)
+ (c-invalidate-state-cache): Modify the use of `c-state-cache-end'
+ so that it's kept a little bit back to increase the hit rate.
+
+ (c-parse-state): Change the macro handling and fixed some
+ glitches. Macro context is checked more often than necessary now,
+ but otoh less garbage conses are generated.
+
+ * progmodes/cc-engine.el (c-parse-state)
+ (c-invalidate-state-cache): Cache the last position where
+ `c-state-cache' applies. This can speed up refontification quite
+ a bit in blocks where there are many non-brace parens before the point.
+
+ (c-state-cache-end): New variable for this.
+
+ (c-guess-basic-syntax, c-debug-parse-state): Adapt for the new
+ cache variable.
+
+ * progmodes/cc-engine.el (c-find-decl-spots): Take more care to
+ get close initial continue positions when the start position is
+ inside a literal or macro. Do not call the callback for spots
+ before the start position (which can happen e.g. for `c-decl-end'
+ spots inside comments). Optimize better in special cases when the
+ region is a single line inside a literal or macro (typically when
+ the current line is refontified).
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Simplify calls
+ to `c-add-stmt-syntax' - there's no need to explicitly whack off
+ entries from the paren state.
+
+ * progmodes/cc-engine.el (c-add-stmt-syntax): Narrow down the
+ special case for "else if" clauses.
+
+ * progmodes/cc-engine.el (c-looking-at-inexpr-block)
+ (c-add-stmt-syntax): Use `c-recognize-paren-inexpr-blocks'.
+
+ * progmodes/cc-langs.el (c-recognize-paren-inexpr-blocks):
+ New language variable to recognize the gcc extension with statement
+ blocks inside expressions.
+
+ * progmodes/cc-engine.el (c-add-stmt-syntax): Restructure to make
+ it somewhat more comprehensible. The argument AT-BLOCK-START is
+ no longer used and hence removed.
+
+ (c-guess-continued-construct, c-guess-basic-syntax): Update calls
+ to `c-add-stmt-syntax'.
+
+ * progmodes/cc-engine.el (c-backward-to-decl-anchor):
+ Use `c-beginning-of-statement-1' instead of duplicating parts of it.
+ This fixes bogus label recognition.
+
+ * progmodes/cc-engine.el (c-add-type, c-check-type)
+ (c-forward-name, c-forward-type): Improve storage of template
+ types in `c-found-types' so that they can be recognized better.
+
+ (c-syntactic-content): Add option to skip past nested parens.
+
+ * progmodes/cc-engine.el (c-forward-name):
+ Set `c-last-identifier-range' all the time. It's less work that way.
+ Handle that there might not be an identifier to store in
+ `c-last-identifier-range'.
+
+ (c-forward-type): Handle that `c-last-identifier-range' might be
+ nil from `c-forward-name'.
+
+ * progmodes/cc-defs.el (c-safe-scan-lists)
+ (c-(go-)?(up|down)-list-(forward|backward)): Add limit arguments.
+
+ * progmodes/cc-defs.el (c-save-buffer-state): Use `unwind-protect'
+ to work even if the form fails.
+
+ * progmodes/cc-engine.el (c-parse-state): Speedup when moving far
+ down in a large file in one go.
+
+ (c-get-fallback-start-pos): New helper function for `c-parse-state'.
+
+ * progmodes/cc-align.el (c-lineup-assignments): New lineup
+ function which is like `c-lineup-math' but returns nil instead of
+ `c-basic-offset' when it doesn't match.
+
+ (c-lineup-math): Change to use `c-lineup-assignments'.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el: Fix some bugs in subfunctions of
+ c-beginning-of-statement. New subfunctions
+ c-in-comment-line-prefix-p, c-narrow-to-comment-innards.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-fonts.el, cc-langs.el: Use `c-simple-ws' instead of
+ hardcoded char classes whereever possible. Changed a couple of
+ places to use skip by syntax instead of skip by char class.
+
+ * progmodes/cc-langs.el (c-unterminated-block-comment-regexp):
+ Fix a bug in the regexp that caused extreme backtracking.
+
+ * progmodes/cc-langs.el (c-block-comment-starter)
+ (c-block-comment-ender): New language constants to specify in a
+ single place how block comments look.
+
+ (c-comment-start-regexp, c-block-comment-start-regexp)
+ (comment-start, comment-end, comment-start-skip)
+ (c-syntactic-ws-start, c-syntactic-ws-end, c-nonwhite-syntactic-ws)
+ (c-syntactic-ws, c-nonempty-syntactic-ws)
+ (c-single-line-syntactic-ws, c-syntactic-eol): Now built from
+ `c-line-comment-starter', `c-block-comment-starter' and
+ `c-block-comment-ender'.
+
+ (c-block-comment-regexp, c-unterminated-block-comment-regexp):
+ New language constants to break up things a bit.
+
+ (c-simple-ws): New language constant for simple whitespace.
+
+ * progmodes/cc-defs.el (c-concat-separated): New convenience function.
+
+ * progmodes/cc-defs.el (c-make-keywords-re): Add kludge for bug
+ in `regexp-opt' in Emacs 20 and XEmacs when strings contain
+ newlines. Allow and ignore nil elements in the list.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el: Comment out a (n almost certainly
+ superfluous) check, (eq here (point-max)) in c-beginning-of-statement.
+
+ * progmodes/cc-cmds.el: Tidy up the comments in
+ c-beginning-of-statement and subfunctions.
+
+ * progmodes/cc-awk.el: Replace calls to put-text-property to the
+ more flexible c-put-char-property and c-clear-char-properties.
+ Add the author's email address.
+
+ * progmodes/cc-langs.el (c-block-comment-start-regexp): New variable.
+
+ * progmodes/cc-cmds.el: Fix bug with M-e, when point is inside the
+ closing "*/" of a block comment.
+
+ * progmodes/cc-cmds.el: Tidy c-beginning-of-sentence (and
+ subfunctions) so that it works at BOB and EOB.
+
+ * progmodes/cc-cmds.el, cc-vars.el: More updating of
+ c-beginning-of-statement, including new variable
+ c-block-comment-start-regexp.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-langs.el (c-known-type-key): Optimize simple
+ symbols from `*-font-lock-extra-types' so that there's no need to
+ use `regexp-opt' on those lists.
+
+ * progmodes/cc-langs.el (c-type-decl-suffix-key): Fix when
+ `c-type-modifier-kwds' is empty.
+
+ * progmodes/cc-fonts.el (c-font-lock-invalid-string): Fix when
+ there are several strings on the same line.
+
+ * progmodes/cc-engine.el (c-literal-limits): Remove the
+ compatibility function for older emacsen. `c-literal-limits-fast'
+ has now taken the place of this function.
+
+ * progmodes/cc-vars.el (c-emacs-features): Remove compatibility
+ with older emacsen: We now require `pps-extended-state'.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el: New function c-beginning-of-sentence,
+ which obviates the need to hack sentence-end. This now handles
+ escaped newlines in strings correctly. Correct minor bugs in
+ c-move-over-sentence and in c-beginning-of-statement.
+
+ * progmodes/cc-cmds.el (c-beginning-of-statement (and
+ subfunctions)): Adapt c-\(back\|forward\)-over-illiterals such
+ that movement over macros and code are rigorously separated from
+ eachother. Correct a few incidental bugs.
+
+ * progmodes/cc-cmds.el: Restructure c-beginning-of-statement:
+ Improve its doc-string. Improve the handling of certain specific cases.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-engine.el, cc-fonts.el, cc-langs.el
+ (c-guess-basic-syntax): Change the way class-level labels are
+ recognized; they can now contain essentially any symbols.
+
+ (c-opt-extra-label-key): New language variable to cope with the
+ special protection label syntax in Objective-C.
+
+ (c-opt-access-key): Remove; this is now handled better by
+ `c-nonlabel-token-key' and `c-opt-extra-label-key'.
+
+ (c-complex-decl-matchers): Update to handle that
+ `c-opt-access-key' no longer exists.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Make use of the
+ improved label recognition in `c-beginning-of-statement-1'.
+
+ * progmodes/cc-engine.el (c-beginning-of-member-init-list):
+ Recognize bitfields better.
+
+ * progmodes/cc-engine.el (c-beginning-of-inheritance-list):
+ Remove some cruft and fixed a bug that could cause it to go to a
+ position further down.
+
+ * progmodes/cc-langs.el, cc-engine.el
+ (c-beginning-of-statement-1): Improve detection of labels in
+ declaration contexts.
+
+ (c-beginning-of-decl-1): Use it.
+
+ (c-nonlabel-token-key): New language constant and variable needed
+ by `c-beginning-of-statement-1'.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Fix bug that
+ manifested itself due to the correction in `c-forward-sexp'.
+
+ * progmodes/cc-defs.el (c-forward-sexp, c-backward-sexp):
+ Make these behave as documented when used at the buffer limits.
+
+ * progmodes/cc-mode.el, cc-engine.el, cc-langs.el
+ (c-type-decl-end-used): Made this a language variable.
+
+ * progmodes/cc-mode.el (c-after-change): Widen the buffer to work
+ correctly when `combine-after-change-calls' is used together with
+ temporary narrowings.
+
+ * progmodes/cc-engine.el (c-beginning-of-statement-1):
+ Report labels correctly when the start point is immediately after the
+ colon.
+
+ * progmodes/cc-defs.el (c-parse-sexp-lookup-properties):
+ Remove since it isn't used anymore.
+
+ * progmodes/cc-cmds.el (c-electric-lt-gt): Detect and mark angle
+ bracket arglists such as template parens in C++.
+
+ * progmodes/cc-engine.el (c-syntactic-skip-backward): Fix a bug
+ in the last check-in. Some optimization.
+
+ * progmodes/cc-engine.el (c-syntactic-skip-backward): Fix bug
+ where it could stop at the same level in a preceding sexp when
+ PAREN-LEVEL is set.
+
+ * progmodes/cc-mode.el (c-basic-common-init): Turn on syntax-table
+ text property lookup only when it's needed.
+
+ * progmodes/cc-langs.el, cc-engine.el, cc-fonts.el, cc-mode.el:
+ Change the policy for paren marked angle brackets to be more
+ persistent; once marked they remain marked even when they're found
+ to be unbalanced in the searched region. This should keep the
+ paren syntax around even when individual lines are refontified in
+ multiline template arglists.
+
+ (c-parse-and-markup-<>-arglists): New dynamically bound variable
+ to control markup so that incorrect angle bracket arglists aren't
+ marked in contexts where the correct value for
+ `c-disallow-comma-in-<>-arglists' isn't known.
+
+ (c-forward-<>-arglist, c-forward-<>-arglist-recur): The reparse
+ argument has become `c-parse-and-markup-<>-arglists'.
+
+ (c-remove-<>-arglist-properties): Remove - no longer used.
+
+ (c-after-change-check-<>-operators): New function used on
+ `after-change-functions' to avoid that "<" and ">" characters that
+ are part of longer operators have paren syntax.
+
+ (c-<>-multichar-token-regexp): New language variable used by
+ `c-after-change-check-<>-operators'.
+
+ (c-after-change): Call `c-after-change-check-<>-operators'.
+
+ (c-font-lock-<>-arglists): Use the context properties set by
+ `c-font-lock-declarations' to set `c-disallow-comma-in-<>-arglists'
+ correctly to avoid doing invalid markup.
+
+ (c-font-lock-declarations): Remove code that undoes the invalid
+ markup done by `c-font-lock-<>-arglists'.
+
+ (c-complex-decl-matchers): `c-font-lock-<>-arglists' now runs
+ after `c-font-lock-declarations'.
+
+ * progmodes/cc-engine.el (c-syntactic-skip-backward):
+ Add paren-level feature.
+
+ (c-guess-basic-syntax): Improve the anchor position for
+ `template-args-cont' in nested template arglists. There's still
+ much to be desired in this area, though.
+
+2005-12-08 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-cmds.el, cc-engine.el, cc-langs.el, cc-vars.el:
+ Make the "Text Filling and Line Breaking" commands work for AWK buffers.
+
+2005-12-08 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ * progmodes/cc-defs.el, cc-engine.el (c-mode-is-new-awk-p):
+ Removed; (c-major-mode-is 'awk-mode) can be used instead now.
+
+ * progmodes/cc-mode.el: Always set up AWK mode since emacsen where
+ it doesn't work no longer are supported.
+
+ * progmodes/cc-mode.el, cc-styles.el, cc-vars.el, cc-defs.el
+ * cc-engine.el, cc-fonts.el, cc-langs.el, cc-cmds.el: CC Mode now
+ requires support for the syntax-table' text property, which rules
+ out Emacs 19 and XEmacs < 21.4. Removed various compatibility
+ cruft associated with those versions.
+
+ * progmodes/cc-defs.el, cc-fix.el: CC Mode now requires support
+ for the `syntax-table' text property, which rules out Emacs 19 and
+ XEmacs < 21.4. Removed various compatibility cruft associated
+ with those versions.
+
+ * progmodes/cc-vars.el (c-emacs-features): CC Mode now requires
+ support for the `syntax-table' text property.
+
+ * progmodes/cc-fonts.el (c-nonbreakable-space-face): Remove the
+ variable and use an extra quoted face name instead. All the
+ emacsen flavors handle that correctly.
+
+ * progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare)
+ (c-font-lock-declarators, c-font-lock-declarations)
+ (c-complex-decl-matchers, c-basic-matchers-after): Use a text
+ property to mark the items in in declarator lists to handle
+ refontification inside multiline declarations better.
+
+ * progmodes/cc-fonts.el (c-font-lock-declarations): Recognize a
+ construct like "a * b = c;" as a declaration.
+
+2005-12-08 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-use-hyper-key): Replace by ...
+ (cua-rectangle-modifier-key): ... this. New defcustom. Can now
+ select either meta, hyper, or super modifier for rectangle commands.
+ (cua--rectangle-modifier-key): New defvar.
+ (cua--M/H-key): Use it. Remove special case for `space'.
+ (cua--init-keymaps): Initialize it from cua-rectangle-modifier-key
+ on X, to meta otherwise. Always bind C-return to toggle
+ rectangle. Pass ?\s instead of `space' to cua--M/H-key.
+
+ * emulation/cua-rect.el (cua-help-for-rectangle):
+ Use cua--rectangle-modifier-key. Handle super modifier too.
+ (cua--init-rectangles): Always bind C-return to toggle rectangle.
+ Pass ?\s instead of `space' to cua--M/H-key and cua--rect-M/H-key.
+
+ * ido.el: Move Acknowledgements and History after Commentary.
+ Minor changes to Commentary.
+
+ * emulation/cua-base.el (cua--select-keymaps): Enable repeat
+ keymap if cua--prefix-override-timer is `shift'.
+ (cua--shift-control-prefix): New function; emulate "type prefix
+ key twice" functionality to handle shifted prefix key override.
+ (cua--shift-control-c-prefix, cua--shift-control-x-prefix):
+ New commands.
+ (cua--init-keymaps): Bind them to S-C-c and S-C-x.
+
+2005-12-08 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-insert-heading): Try to do items before
+ headings.
+ (org-agenda-mode): Quote `org-agenda-mode-hook'.
+ (org-insert-item): New function.
+ (org-renumber-ordered-list): Don't skip to higher level lists.
+
+2005-12-08 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-mode-map): Bind M-TAB to `Info-prev-reference'.
+
+ * button.el (button-buffer-map): Bind M-TAB to `backward-button'.
+
+ * wid-edit.el (widget-keymap): Bind M-TAB to `widget-backward'.
+
+ * pcvs.el (defun-cvs-mode): Put `definition-name' property on
+ the constructed function name fun-1.
+
+ * cus-edit.el (custom-add-parent-links): Filter out custom-group-link,
+ because such links don't lead to parent documentation.
+
+2005-12-08 Kenichi Handa <handa@m17n.org>
+
+ * descr-text.el (describe-char): Use *Help-2* buffer if the
+ current buffer is *Help*. Call describe-text-properties while
+ setting the original buffer.
+
+2005-12-07 Bill Wohler <wohler@newt.com>
+
+ * files.el (auto-mode-alist): Remove mh-letter-mode. Unnecessary,
+ and causes problems with non-MH users (such as Gnus users).
+
+2005-12-08 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-find-file-unhook): Delete variable.
+ (gdb-set-gud-minor-mode, gdb-set-gud-minor-mode): Delete functions.
+ (gdb-set-gud-minor-mode-existing-buffers, gdb-init-2): Use GDB
+ command "info sources". Move calls to GDB command "list".
+ (gdb-find-file-hook): Just use gdb-source-file-list.
+ (gdb-source-file-regexp): Use regexp for pre-GDB 6.4.
+ (gdb-source-file-regexp-1): New regexp for GDB 6.4+ only.
+ (gdb-set-gud-minor-mode-existing-buffers-1): Use it.
+ (gdb-data-list-register-values-handler): Use correct trigger name.
+
+2005-12-07 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-completion-map): Rename from ido-mode-map.
+ (ido-common-completion-map, ido-file-completion-map)
+ (ido-file-dir-completion-map, ido-buffer-completion-map):
+ Rename from ido-mode-....-map.
+ (ido-init-completion-maps): Rename from ido-init-mode-maps.
+ (ido-setup-completion-map): Rename from ido-define-mode-map.
+ (ido-read-internal): Bind minibuffer-local-filename-completion-map
+ to ido-completion-map.
+
+2005-12-07 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el
+ (set-display-table-and-terminal-coding-system): If the coding
+ system specified in `unibyte-display' property is different from
+ the arg coding-system, don't setup standard-display-table.
+
+2005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/edebug.el (edebug-skip-whitespace): read1:lread.c says
+ that comments end at \n, regardless of selective-display.
+
+2005-12-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-error-regexp, gdb-first-post-prompt)
+ (gdb-version): New variables.
+ (gdb-source-file-list, gdb-register-names)
+ (gdb-changed-registers): New variables for use with GDB 6.4+.
+ (gdb-ann3): Replace with...
+ (gdb-init-1, gdb-init-2): ...two new functions.
+ (gdba, gdb-prompt): Call gdb-init-1.
+ (gdb-get-version): New function. Call gdb-init-2 from here.
+ (gud-watch): Make it work with mouse events too.
+ (gdb-post-prompt): Don't add to queue until GDB version is known.
+ (gdb-speedbar-expand-node, gdb-post-prompt, gdb-registers-mode)
+ (gdb-locals-mode): Use gdb-version.
+ (gdb-memory-format-map, gdb-memory-unit-map)
+ (gdb-locals-watch-map): Rename from gdb-*-*-keymap.
+ (gdb-locals-font-lock-keywords-1)
+ (gdb-locals-font-lock-keywords-2): New variables.
+ (gdb-find-file-hook): Make it work with GDB 6.4+ too.
+ (gdb-set-gud-minor-mode-existing-buffers-1)
+ (gdb-var-list-children-1, gdb-var-list-children-handler-1)
+ (gdb-var-update-1, gdb-var-update-handler-1)
+ (gdb-data-list-register-values-handler)
+ (gdb-data-list-register-values-custom)
+ (gdb-get-changed-registers, gdb-get-changed-registers-handler)
+ (gdb-stack-list-locals-handler, gdb-get-register-names):
+ New functions for use with GDB 6.4+.
+ (gdb-locals-watch-map-1): New variable for use with GDB 6.4+.
+ (gdb-source-file-regexp, gdb-var-list-children-regexp-1)
+ (gdb-var-update-regexp-1, gdb-data-list-register-values-regexp)
+ (gdb-stack-list-locals-regexp)
+ (gdb-data-list-register-names-regexp): New regexps for use with
+ GDB 6.4+.
+
+2005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cc-defs.el (c-emacs-features): Don't assume point-min==1.
+
+2005-12-06 Nozomu Ando <nand@mac.com>
+
+ * mail/smtpmail.el (smtpmail-try-auth-methods): Make password
+ prompts work for AUTH PLAIN. Also reported by Steve Allan
+ <seallan@verizon.net>.
+
+2005-12-06 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * frame.el (set-frame-parameter): Add doc string.
+
+2005-12-06 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-occur-highlights): New variable.
+ (org-highlight-new-match, org-remove-occur-highlights): New functions.
+ (org-highlight-sparse-tree-matches): New option.
+ (org-do-occur): New function.
+ (org-get-heading): Make it work also at beginning of line.
+ (org-category-table): New variable.
+ (org-get-category-table, org-get-category)
+ (org-camel-to-words, org-link-search): New functions.
+ (org-select-this-todo-keyword): New variable.
+ (org-todo-list): New command.
+ (org-shiftright, org-shiftleft): New commands.
+ (org-agenda-todo): Add prefix argument.
+ (org-show-hierarchy-above): New option.
+ (org-show-todo-tree): Numerical prefix creates tree for specific
+ TODO keyword.
+ (org-outline-level): New function, to assign a level to plain
+ lists items.
+ (org-cycle-include-plain-lists): New option.
+ (org-mode): Use `org-outline-level' as value of `outline-level'.
+ (org-cycle): Temporarily switch `outline-regexp' if
+ `org-cycle-include-plain-lists' is non-nil.
+ (org-start-icalendar-file): Fix format bug.
+ (org-agenda-get-day-entries): Create category table.
+ (org-agenda-get-todos, org-agenda-get-timestamps)
+ (org-agenda-get-deadlines, org-agenda-get-scheduled)
+ (org-agenda-get-blocks): Use `org-get-category'.
+ (org-context-in-file-links): Rename from
+ `org-line-numbers-in-file-links'.
+
+2005-12-06 Romain Francoise <romain@orebokech.com>
+
+ * window.el (balance-windows): Delete extraneous third arg in call
+ to `enlarge-window'.
+
+2005-12-06 Kenichi Handa <handa@m17n.org>
+
+ * international/kinsoku.el (kinsoku-longer): Check eolp, not eobp.
+
+2005-12-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler)
+ (gdb-var-evaluate-expression-handler, gdb-frame-handler)
+ (gdb-var-list-children-handler, gdb-var-update-handler):
+ Current buffer is already gdb-partial-output-buffer, don't
+ make it current again.
+
+2005-12-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buff-menu.el (Buffer-menu-use-frame-buffer-list): New user option.
+ (list-buffers-noselect): Use it.
+
+2005-12-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mail/sendmail.el: Remove unnecessary leading-star in docstrings.
+ (mail-yank-ignored-headers): Use regexp-opt.
+ (mail-mode-map): Move initialization into declaration.
+ (mail-sent-via): Remove unused shadowed var `to-line'.
+ (mail-mailer-swallows-blank-line): Use with-temp-buffer.
+ (mail-bury, sendmail-send-it, mail-do-fcc): Use with-current-buffer.
+ (mail-do-fcc): Use dolist and push.
+ (mail-mode-fill-paragraph): Pass the arg to fill-region-as-paragraph.
+ (mail-yank-ignored-headers): Don't autoload.
+
+2005-12-05 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (set-language-info-internal): New fun.
+ (set-language-info): Call set-language-info-internal to update
+ language-info-alist. If LANG-ENV is the current one, call
+ set-language-environment to make INFO effective now.
+ (set-language-info-alist): Likewise.
+ (locale-language-names): With locale "en", use English
+ lang. env. but set the default codings to iso-8859-1.
+
+2005-12-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-use-inferior-io-buffer)
+ (gdb-speedbar-auto-raise): Echo new state in minibuffer.
+ (gdb-var-create-handler, gdb-assembler-custom): Use search-forward
+ for plain strings.
+ (gdb-frames-mode): Remove redundant call to font-lock-mode.
+ (gdb-all-registers): Rename from toggle-gdb-all-registers.
+ Create registers buffer if necessary. Echo new state in minibuffer.
+ (gdb-registers-mode-map, gdb-registers-mode): Use gdb-all-registers.
+
+2005-12-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-fontify-node): Match external links using
+ non-directory part of filename.
+
+2005-12-04 Juri Linkov <juri@jurta.org>
+
+ * font-core.el (global-font-lock-mode): Use define-global-minor-mode
+ instead of easy-mmode-define-global-mode. Add `:group font-lock'.
+ (font-lock-mode): Replace `:group font-lock' with `nil nil nil'
+ because there is no customization option for it.
+
+ * font-lock.el (lisp-font-lock-keywords-1):
+ Add define-global-minor-mode.
+
+ * emacs-lisp/autoload.el (make-autoload): Add define-global-minor-mode.
+
+ * emacs-lisp/derived.el (define-derived-mode): Put `definition-name'
+ properties on the constructed variable names.
+
+ * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation):
+ Put `definition-name' properties on the constructed function names
+ next-sym and prev-sym.
+
+ * emacs-lisp/find-func.el (find-function-regexp):
+ Add define-global-minor-mode. Replace `easy-mmode-define-global-mode'
+ with `easy-mmode-define-[a-z-]+'. Add easy-menu-define.
+ (find-variable-regexp): Add easy-mmode-defmap, easy-mmode-defsyntax
+ and easy-menu-define.
+
+ * emacs-lisp/lisp-mode.el: Put `doc-string-elt' property on
+ easy-mmode-define-global-mode and define-global-minor-mode.
+ (lisp-imenu-generic-expression): Add define-global-minor-mode.
+
+ * progmodes/cwarn.el (global-cwarn-mode): Use define-global-minor-mode
+ instead of easy-mmode-define-global-mode.
+
+ * progmodes/idlw-shell.el (idlwave-shell-electric-debug-mode):
+ Use define-minor-mode instead of easy-mmode-define-minor-mode.
+
+ * cus-edit.el (customize-group, customize-group-other-window):
+ Filter out autoloaded options from the group completion list by
+ using heuristics that autoloaded groups don't have `custom-autoload'
+ property on their symbols (they have only `custom-loads').
+
+ * simple.el (completion-setup-function): Put completions-common-part
+ face on complete completion string too (i.e. completion string
+ without completions-first-difference face).
+
+ * man.el (Man-section-regexp): Add 0-9 to support "3X11" sections.
+
+2005-12-03 Eli Zaretskii <eliz@gnu.org>
+
+ * view.el (view-mode): Doc fix.
+
+ * disp-table.el (standard-display-european): Add to the warning
+ message a reference to the doc string.
+
+ * play/yow.el (apropos-zippy): Call print-help-return-message,
+ similar to other Help and Apropos commands.
+
+ * help.el (print-help-return-message): If pop-up-frames is
+ non-nil, set up help-return-method to delete the help window and,
+ possibly, its frame as well, and don't display message about
+ scrolling the help window. Doc fix.
+ (help-return-method): Doc fix.
+
+2005-12-03 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression): Fix bug
+ whereby names of length one or names starting with a
+ symbol-constituent character would not be returned.
+
+2005-12-03 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * subr.el (atomic-change-group): Add edebug and indentation spec.
+
+2005-12-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * completion.el (save-completions-file-name): Fix typo in last change.
+
+2005-12-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * info.el: Move back/forward history to the beginning of the tool bar.
+
+2005-12-02 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el (eval-when-compile): Remove unnecessary load of cl.
+ Add fset of allout-real-isearch-abort during compile to fix
+ byte-compilation warnings.
+ (allout-mode-p): Move definition of this macro above all uses, or
+ byte compilation in barren Emacs (eg, during Emacs build) will
+ lack the definition.
+ (allout-mode): Move this variable above any uses, or byte
+ compilation will fail.
+ (allout-resolve-xref): Remove use of personal file-reference function.
+ (allout-toggle-current-subtree-encryption): Do the current (ie,
+ visible containing) topic, rather than nearest around point. Doc fix.
+ (allout-toggle-subtree-encryption): New function, workhorse that
+ works on nearest topic containing point.
+ (allout-encrypt-string): Signal requirement for newer version of pgg.
+ (allout-resumptions): Doc fix.
+
+2005-12-02 Eli Zaretskii <eliz@gnu.org>
+
+ * international/latexenc.el (latex-inputenc-coding-alist): Doc fix.
+
+2005-12-02 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Consider a misspelling as found in the string search if: (a) misspelling
+ and found string lengths match, or (b) misspelling is found as
+ element in a boundary-chars separated longer string, or (c)
+ ispell-program-name is really ispell and misspelling is found as
+ part of a TeX string. After successful match move beginning of
+ search region to end of match. Warn about not found misspellings
+ once the process is done.
+ (flyspell-large-region): Do not set ispell-parser to tex if in TeX mode.
+
+2005-12-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Put gud-finish back on the
+ tool bar (removed inadvertently).
+
+2005-12-02 Juri Linkov <juri@jurta.org>
+
+ * log-view.el (log-view-diff): Clarify doc string.
+
+2005-12-01 Bill Wohler <wohler@newt.com>
+
+ * Makefile.in (mh-loaddefs.el): Reinsert Change Log as its absence
+ triggers lm-verify errors.
+
+2005-12-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * simple.el (transient-mark-mode, line-number-mode)
+ (column-number-mode, size-indication-mode): Remove `:require nil'.
+
+2005-12-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-ann3): Bind mouse-2 to gdb-mouse-until
+ in the margin also.
+ (gdb-breakpoints-mode-map): Use D instead of d for
+ gdb-delete-breakpoint.
+ (gdb-get-frame-number): Require a number to match on.
+ (gdb-threads-mode-map): Add follow-link binding.
+
+2005-11-30 Jason Rumney <jasonr@gnu.org>
+
+ * isearch.el (isearch-mode-map): Avoid exiting search on
+ language-change event.
+
+2005-11-30 Romain Francoise <romain@orebokech.com>
+
+ * speedbar.el (speedbar-default-position): New defcustom.
+ (speedbar-frame-reposition-smartly): Use it.
+
+ * dframe.el (dframe-reposition-frame-emacs): Fix position
+ computation for `left' location.
+ Update copyright year.
+
+2005-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * help.el (help-map): Move initialization into declaration.
+
+ * emacs-lisp/autoload.el (make-autoload): Handle defgroup specially.
+
+ * help-fns.el (help-argument-name): Don't autoload.
+ It's useless and triggers a bug in cus-dep.el causing ldefs-boot
+ to be re-loaded when customizing the `help' group.
+
+2005-11-30 John Paul Wallington <jpw@gnu.org>
+
+ * help-fns.el (describe-function-1): Fill arglist output.
+
+2005-11-30 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-rect.el (cua--rectangle-overlays): Make permanent-local.
+ (cua--rectangle-post-command): Cleanup overlays and deactivate mark
+ after revert-buffer (or anything else which kills all local variables).
+
+ * apropos.el (apropos-parse-pattern): Doc fix.
+ Set apropos-regexp directly, rather than expecting callers to do so.
+ (apropos-command, apropos, apropos-value, apropos-documentation):
+ Simplify calls to apropos-parse-pattern.
+
+2005-11-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * hi-lock.el (hi-lock-line-face-buffer, hi-lock-face-buffer)
+ (hi-lock-face-phrase-buffer): Use hi-yellow face.
+ (hi-lock-write-interactive-patterns): Use comment-region.
+
+ * longlines.el (longlines-mode): Add mail-setup-hook.
+
+ * mail/mailheader.el, mail/sendmail.el: Revert 2005-11-17 changes.
+
+ * simple.el (sendmail-user-agent-compose, next-line):
+ Conditionally use hard-newline.
+
+2005-11-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * international/latexenc.el (latex-inputenc-coding-alist):
+ Reword doc string.
+
+2005-11-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * help.el (describe-key-briefly, describe-key): Recognize default
+ bindings.
+
+2005-11-29 Romain Francoise <romain@orebokech.com>
+
+ * view.el (view-inhibit-help-message): New defcustom.
+ (view-mode-enter): Use it.
+
+2005-11-29 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-wind.el (ediff-setup-control-frame, ediff-make-wide-display):
+ Preserve user position.
+
+2005-11-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * font-lock.el: Throw error if facemenu is not loaded to prevent
+ accidental change of loading order in loadup.el. (Suggested by RMS.)
+
+ * loadup.el: Add comment explaining why facemenu must be loaded
+ before font-lock.
+
+2005-11-28 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el: Change global keybinding for calc-dispatch to "\C-x*".
+ (calc-dispatch-map): Add more keys for `calc-same-interface'.
+
+ * calc/calc-misc.el (calc-dispatch-help): Update docstring.
+
+ * calc/calc-embed.el (calc-do-embedded): Update help message.
+
+ * calc/calc-prog.el (calc-user-define-invokation): Update help message.
+
+2005-11-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * log-edit.el (log-edit-insert-cvs-rcstemplate): Ignore stderr.
+
+ * emacs-lisp/elp.el (elp-not-profilable): Replace interactive-p with
+ called-interactively-p.
+ (elp-profilable-p): Rename from elp-not-profilable-p.
+ Invert result and take into account macros and autoloaded functions.
+ (elp-instrument-function): Update call.
+ (elp-instrument-package): Update call. Add completion.
+ (elp-pack-number): Use match-string.
+ (elp-results-jump-to-definition-by-mouse): Merge into
+ elp-results-jump-to-definition and then remove.
+ (elp-output-insert-symname): Make help echo text single-line.
+
+ * replace.el (query-replace-map): Move initialization into declaration.
+ (occur-engine): Use with-current-buffer.
+ (occur-mode-goto-occurrence): Make it work for mouse-clicks as well.
+ (occur-mode-mouse-goto): Replace with an alias.
+
+2005-11-28 Juri Linkov <juri@jurta.org>
+
+ * simple.el (quoted-insert): Let-bind input-method-function to nil.
+
+ * term/w32-win.el: Bind [S-tab] to [backtab].
+
+ * info.el (Info-fontify-node): Set 2nd arg `noerror' of
+ `Info-find-file' to t.
+
+ * replace.el (occur-mode-mouse-goto): Pop, don't switch.
+ (occur-mode-goto-occurrence): Let-bind same-window-buffer-names
+ and same-window-regexps.
+ (occur-next-error): Don't move point for arg 0.
+
+2005-11-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * replace.el (occur-mode-goto-occurrence): Pop, don't switch.
+
+2005-11-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * log-edit.el (log-edit-changelog-use-first): New var.
+ (log-edit-changelog-ours-p): Use it.
+ (log-edit-insert-changelog): Set it with new arg `use-first'.
+ (log-edit-insert-cvs-rcstemplate, log-edit-insert-filenames): New funs.
+ (log-edit-hook): Add them to the list of suggested options.
+
+ * textmodes/flyspell.el (flyspell-last-buffer): New var.
+ (flyspell-accept-buffer-local-defs): Use it to avoid doing silly
+ redundant work.
+ (flyspell-mode-on): Use add-hook for after-change-functions.
+ (flyspell-mode-off): Use remove-hook for after-change-functions.
+ (flyspell-changes): Make it buffer-local.
+ (flyspell-after-change-function): Make it non-interactive. Use push.
+ (flyspell-post-command-hook): Check input-pending-p while processing
+ the potentially long list of buffer changes.
+
+2005-11-28 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * buff-menu.el (list-buffers-noselect): Display the selected
+ frame's buffer list, not the global one.
+
+2005-11-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * xt-mouse.el (xterm-mouse-event): Set last-input-event so
+ that (list last-input-event) works as in interactive spec.
+
+2005-11-27 Luc Teirlinck <teirllm@auburn.edu>
+
+ * loadup.el ("facemenu"): Load facemenu before font-lock, because
+ `facemenu-keymap' needs to be defined when font-lock is loaded.
+ Otherwise, `M-o M-o' is not bound to `font-lock-fontify-block'.
+
+2005-11-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * completion.el: Remove useless leading * in defcustom docstrings.
+ (save-completions-file-name): Use ~/.emacs.d if available.
+ (completion-standard-syntax-table): Rename from
+ cmpl-standard-syntax-table and fold initialization into declaration,
+ thus removing cmpl-make-standard-completion-syntax-table.
+ (completion-lisp-syntax-table, completion-c-syntax-table)
+ (completion-fortran-syntax-table, completion-c-def-syntax-table): Idem.
+ (cmpl-saved-syntax, cmpl-saved-point): Remove.
+ (symbol-under-point, symbol-before-point)
+ (symbol-under-or-before-point, symbol-before-point-for-complete)
+ (add-completions-from-c-buffer): Use with-syntax-table.
+ (make-completion): Don't return a list of completion entries.
+ Update callers.
+ (cmpl-prefix-entry-head, cmpl-prefix-entry-tail): Use defalias.
+ (completion-initialize): Rename from initialize-completions.
+ (completion-find-file-hook): Rename from cmpl-find-file-hook.
+ (kill-emacs-save-completions): Collect stats here.
+ (save-completions-to-file, load-completions-from-file):
+ Use with-current-buffer.
+ (completion-def-wrapper): Rename from def-completion-wrapper. Make it
+ into a function. Move all calls to toplevel.
+ (completion-lisp-mode-hook): New fun.
+ (completion-c-mode-hook, completion-setup-fortran-mode):
+ Set the syntax-table here. Use local-set-key.
+ (completion-saved-bindings): New var.
+ (dynamic-completion-mode): Make it into a proper minor mode.
+ (load-completions-from-file): Remove unused var `num-uses'.
+
+ * emacs-lisp/cl-macs.el (defstruct): Don't define the default
+ constructor if it is explicitly overridden.
+
+ * complete.el (PC-completion-as-file-name-predicate):
+ Use minibuffer-completing-file-name.
+ (partial-completion-mode): Use find-file-not-found-functions.
+ (PC-lisp-complete-symbol): Use with-syntax-table.
+ (PC-look-for-include-file): Remove dead setq.
+ (PC-look-for-include-file, PC-expand-many-files, PC-do-completion)
+ (PC-complete): Use with-current-buffer.
+
+ * progmodes/sh-script.el (sh-font-lock-syntactic-keywords): \ doesn't
+ escape single quotes.
+
+2005-11-27 Luc Teirlinck <teirllm@auburn.edu>
+
+ * dabbrev.el (dabbrev-completion): Simplify code, by getting rid
+ of `if' whose condition always returned nil. Doc fix.
+
+ * buff-menu.el (Buffer-menu-revert-function): Make the selected
+ window's buffer the current buffer around the call to
+ `list-buffers-noselect'. This is necessary to mark that buffer
+ with a `.' in the Buffer Menu when called from Lisp, for instance
+ by Auto Revert Mode.
+
+2005-11-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-stopped): Detect child process when
+ attaching to it.
+ (gdb-pre-prompt): Make sure gdb-error is reset.
+
+ * progmodes/gud.el (gud-gdb-marker-filter): When GDB is invoked
+ with a child process, detect it.
+ (gud-speedbar-buttons): Match regexp more carefully.
+
+2005-11-27 Richard M. Stallman <rms@gnu.org>
+
+ * mouse.el (mouse-drag-move-window-bottom):
+ Use adjust-window-trailing-edge.
+
+2005-11-27 Luc Teirlinck <teirllm@auburn.edu>
+
+ * simple.el (blink-matching-open): Ignore
+ `blink-matching-paren-on-screen' if `show-paren-mode' is enabled.
+ (blink-matching-paren-on-screen): Update docstring.
+
+ * paren.el (show-paren-mode): No longer change
+ `blink-matching-paren-on-screen'.
+
+2005-11-27 John Paul Wallington <jpw@pobox.com>
+
+ * progmodes/gdb-ui.el (gdb-goto-breakpoint, gdb-frames-select)
+ (gdb-threads-select, gdb-edit-register-value):
+ Use `posn-set-point' instead of `mouse-set-point' because the
+ latter is not fbound when configured without X.
+
+2005-11-27 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-rect.el (cua--highlight-rectangle): Preserve
+ existing face when partially highlighting a TAB in a rectangle.
+
+2005-11-26 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-mode-map): Doc fix.
+ (ido-mode-common-map, ido-mode-file-map)
+ (ido-mode-file-dir-map, ido-mode-buffer-map): New keymaps.
+ (ido-define-mode-map): Rewrite. Select one of the new maps as
+ parent for ido-mode-map instead of building from scratch.
+ (ido-init-mode-maps): New defun to initialize new maps.
+ (ido-mode): Call it.
+ (ido-switch-buffer): Doc fix -- use \<ido-mode-buffer-map>.
+ (ido-find-file): Doc fix -- use \<ido-mode-file-map>.
+
+2005-11-26 John Paul Wallington <jpw@pobox.com>
+
+ * arc-mode.el (archive-extract): Use `posn-set-point' instead of
+ `mouse-set-point' because the latter is not fbound when configured
+ without X.
+
+2005-11-26 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * files.el (file-relative-name): Doc fix.
+
+2005-11-26 Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>
+
+ * progmodes/octave-inf.el (inferior-octave-startup): Force a
+ non-empty string for secondary prompt PS2.
+
+2005-11-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/compile.el (compilation-setup): Fix last change.
+
+2005-11-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-breakpoints-custom)
+ (gdb-mouse-toggle-breakpoint-margin)
+ (gdb-mouse-toggle-breakpoint-fringe, gdb-threads-select):
+ Add gdb-server-prefix to keep out of command history.
+ (gdb-edit-register-value): New function.
+ (gdb-registers-mode-map): Bind mouse-2 and RET to it.
+ (gdb-info-registers-custom): Use above map.
+
+2005-11-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (enable-theme): Signal error if argument is not a
+ theme. Don't recalculate a face if it's not loaded yet.
+
+ * cus-face.el (custom-theme-set-faces): Don't change saved-face if
+ the `user' theme is in effect.
+
+ * info.el (Info-on-current-buffer): Record actual filename in
+ Info-current-file, instead of t, or a fake filename if a non-file
+ buffer. Make autoload.
+ (Info-find-node, Info-revert-find-node): No need to check for
+ Info-current-file nil.
+ (Info-set-mode-line, Info-up, Info-copy-current-node-name):
+ Info-current-file is now never `t'.
+ (Info-fontify-node): Many simplifications due to Info-current-file
+ always being valid. Use Info-find-file to find node filename.
+
+2005-11-25 David Kastrup <dak@gnu.org>
+
+ * longlines.el (longlines-wrap-line): Reorder wrapping to "insert
+ new character, then delete" in order to preserve markers.
+
+2005-11-25 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-arrange-by-rule): Handle a special
+ `auto-mode-alist'-like "strip suffix" rule.
+ (recentf-build-mode-rules): Handle second level auto-mode entries.
+
+2005-11-25 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-keym.el (viper-ESC-key): Use different values
+ in terminal and window modes.
+
+ * emulation/viper.el (viper-emacs-state-mode-list): Delete mail-mode,
+ add jde-javadoc-checker-report-mode.
+
+ * ediff-wind.el (ediff-make-wide-display): Slight simplification.
+
+ * ediff.el (ediff-date): Change the date of last update.
+
+2005-11-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * hi-lock.el (hi-lock-buffer-mode): Renamed from `hi-lock-mode'.
+ Use define-minor-mode, and make it a local mode. Turn on font-lock.
+ (hi-lock-mode): New global minor mode.
+ (turn-on-hi-lock-if-enabled): New function.
+ (hi-lock-line-face-buffer, hi-lock-face-buffer, hi-lock-set-pattern):
+ Change arguments to regexp and face instead of a font-lock pattern.
+ Directly set face property, instead of refontifying.
+ (hi-lock-font-lock-hook): Check if font-lock is being turned on.
+ (hi-lock-find-patterns): Use line-number-at-pos.
+
+ (hi-lock-face-phrase-buffer): Call hi-lock-buffer-mode. Use new
+ arguments for hi-lock-set-pattern.
+ (hi-lock-unface-buffer, hi-lock-set-file-patterns):
+ Call font-lock-fontify-buffer.
+ (hi-lock-find-file-hook, hi-lock-current-line)
+ (hi-lock-refontify, hi-lock-set-patterns): Delete unused functions.
+
+ (hi-lock-font-lock-hook): Turn off hi-lock when font lock is
+ turned off.
+
+ * progmodes/compile.el (compilation-setup): Don't fiddle with
+ font-lock-defaults.
+
+2005-11-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler)
+ (gdb-var-list-children-handler): Find values for all variable
+ objects. gud-speedbar-buttons decides whether to display them.
+
+2005-11-24 Romain Francoise <romain@orebokech.com>
+
+ * info.el (Info-speedbar-fetch-file-nodes): Prefix temporary
+ buffer name with a space.
+
+2005-11-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-export-plain-list-max-depth): Rename from
+ `org-export-local-list-max-depth'. Change default value to 3.
+ (org-auto-renumber-ordered-lists)
+ (org-plain-list-ordered-item-terminator): New options.
+ (org-at-item-p, org-beginning-of-item, org-end-of-item)
+ (org-get-indentation, org-get-string-indentation)
+ (org-maybe-renumber-ordered-list, org-renumber-ordered-list):
+ New functions.
+ (org-move-item-down, org-move-item-up): New commands.
+ (org-export-as-html): New classes for CSS support. Bug fix in
+ regular expression detecting fixed-width regions. Respect
+ `org-local-list-ordered-item-terminator'.
+ (org-set-autofill-regexps, org-adaptive-fill-function): "1)" is
+ also a list item.
+ (org-metaup, org-metadown, org-shiftmetaup, org-shiftmetadown):
+ New item moving functions.
+
+2005-11-24 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-repeat): With empty search ring set
+ `isearch-error' to the error string instead of signaling error
+ with the function `error'.
+
+2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Make modifier `ctrl' an alias for `control'.
+
+2005-11-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-speedbar-auto-raise): New function
+ and variable.
+ (gdb-var-create-handler, gdb-var-list-children-handler):
+ Don't match on "char **...".
+ (gdb-var-update-handler): Find values for all variable objects.
+ (gdb-info-frames-custom): Identify frames by leading "#".
+
+ * progmodes/gud.el (gud-speedbar-menu-items): Add
+ gdb-speedbar-auto-raise as radio button.
+ (gud-speedbar-buttons): Raise speedbar if requested.
+ Don't match on "char **...".
+ (gud-speedbar-buttons): Add (pointer) value for non-leaves.
+ Make it editable.
+
+2005-11-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-fontify-node): Handle the case where
+ Info-current-file is t.
+
+2005-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (blink-matching-open): Fix off-by-one in last change.
+
+2005-11-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Don't change default directory.
+
+2005-11-22 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (Custom-reset-standard): Make it handle Custom group
+ buffers correctly. (It used to throw an error in such buffers.)
+ Make it ask for confirmation in group buffers and other Custom
+ buffers containing more than one customization item.
+
+2005-11-22 John Paul Wallington <jpw@gnu.org>
+
+ * net/goto-addr.el (goto-address-fontify): Put `follow-link'
+ property on mail and url overlays.
+ (goto-address-at-point): Use `posn-set-point' instead of
+ `mouse-set-point' because the latter is not fbound when configured
+ without X.
+
+2005-11-22 Lars Hansen <larsh@soem.dk>
+
+ * ls-lisp.el (ls-lisp-parse-symlink): Delete.
+ (ls-lisp-classify, ls-lisp-format): Delete call to
+ ls-lisp-parse-symlink.
+ (ls-lisp-handle-switches): Handle symlinks to directories as
+ directories when ls-lisp-dirs-first in non-nil.
+
+2005-11-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (command-line): Make sure that loaddefs.el is handled
+ correctly in load-history.
+
+2005-11-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-locals-watch-keymap): New local map.
+ (gdb-struct-string, gdb-array-string): New constants.
+ (gdb-info-locals-handler): Use them.
+ (gdb-reset): Reset gdb-var-list to nil.
+
+2005-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-font-lock-paren): Handle continued lines
+ in patterns.
+
+2005-11-21 Juri Linkov <juri@jurta.org>
+
+ * custom.el (defcustom): Update link types in docstring.
+
+2005-11-20 Martin Rudalics <rudalics@gmx.at>
+
+ * custom.el (defgroup): Add doc-string-elt info.
+
+ * widget.el (define-widget): Don't use declare for the doc-string-elt.
+
+2005-11-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * newcomment.el (comment-enter-backward): Fix last fix.
+
+ * simple.el (blink-matching-open):
+ * paren.el (show-paren-function): Allow new paren-class info.
+
+2005-11-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * faces.el: Revert 2005-11-17 change. :ignore-defface is now
+ handled automagically.
+
+2005-11-20 Andreas Schwab <schwab@suse.de>
+
+ * descr-text.el (describe-char): When copying overlays put them
+ over the full char description instead of just the first character
+ of it.
+
+2005-11-20 Juri Linkov <juri@jurta.org>
+
+ * simple.el (what-cursor-position):
+ * descr-text.el (describe-char): Use Lisp-readable syntax
+ for octal and hex. Reorder decimal, octal and hex values.
+ Remove excess whitespace in the output. Use `=' in `column='
+ like in `point=' and `Hscroll='.
+
+ * international/mule-cmds.el (encoded-string-description):
+ Use Lisp-readable syntax for hex.
+
+2005-11-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * newcomment.el (comment-enter-backward): Handle the case where the
+ comment is closed by EOB.
+
+2005-11-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-before-revert-hook)
+ (longlines-after-revert-hook): New functions.
+ (longlines-mode): Turn off longlines temporarily when reverting.
+ Add a message-setup-hook.
+ (longlines-decode-buffer): New function.
+ (longlines-wrap-line): Preserve marker positions.
+
+2005-11-19 Andreas Schwab <schwab@suse.de>
+
+ * emacs-lisp/shadow.el: Handle compressed files.
+
+2005-11-19 Romain Francoise <romain@orebokech.com>
+
+ * net/browse-url.el (browse-url-default-browser): Signal an error
+ if no usable browser can be found, rather than try to load w3.
+
+2005-11-16 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el (rcirc-mangle-text): Add bold face property without
+ replacing existing properties.
+ (rcirc-my-nick, rcirc-other-nick, rcirc-server)
+ (rcirc-nick-in-message, rcirc-prompt): Use min-colors and remove
+ tty specs.
+ (rcirc-server-prefix, rcirc-server): New faces.
+ (rcirc-url-regexp): Generate with rx macro.
+ (rcirc-last-server-message-time): New variable.
+ (rcirc-filter): Record time of last message.
+ (rcirc-keepalive): Kill processes that did not send a message
+ since the last ping.
+ (rcirc-mode): Give rcirc-topic a local binding here.
+
+2005-11-19 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * subr.el (read-passwd): Fontify the prompt as we do with other
+ prompts.
+
+2005-11-19 Ryan Yeske <rcyeske@gmail.com>
+
+ * ffap.el (ffap-menu-rescan): Use inhibit-read-only instead of
+ binding buffer-read-only to nil.
+
+2005-11-19 Eli Zaretskii <eliz@gnu.org>
+
+ * complete.el (partial-completion-mode):
+ Mention completion-auto-help in the doc string.
+
+ * man.el (Man-highlight-references): Doc fix. Reformat code in a
+ more Lisp-ish way.
+
+2005-11-19 Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se> (tiny change)
+
+ * ls-lisp.el (ls-lisp-format-file-size): Format file size with 9
+ digits, not 8, to avoid misalignment for files larger than 100MB.
+
+2005-11-19 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-describe-menu) <list-keybindings>:
+ Mention "keyboard shortcuts" in the help text.
+
+2005-11-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * startup.el (fancy-splash-default-action): Discard only
+ mouse-down and succeeding mouse-up events in the splash screen
+ window so that drag-n-drop event can be processed.
+
+2005-11-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-mode): Add hacks for mail-mode and
+ message-mode.
+
+2005-11-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-table-sort-lines): New command.
+ (org-tbl-menu): Add entry for `org-table-sort-lines'.
+ (org-add-file): Command removed, use `org-agenda-file-to-front'
+ instead.
+ (org-export-icalendar): Use `org-icalendar-combined-name'.
+ (org-cycle-agenda-files, org-agenda-file-to-end)
+ (org-agenda-file-to-front): New commands.
+ (org-table-tab-jumps-over-hlines, org-export-html-style):
+ New options.
+ (org-table-next-field): Use `org-table-tab-jumps-over-hlines'.
+ (org-at-table.el-p, org-set-autofill-regexps, org-html-protect):
+ New functions.
+ (org-fill-paragraph): Call `org-table-align' in tables.
+ (org-mode): Call `org-set-autofill-regexps'.
+ (org-export-as-html): Support for local handformatted lists.
+ Modified to produce valid HTML 4.0. Use `org-export-html-style'.
+ (org-export-local-list-max-depth): New option.
+ (org-html-expand): Use `org-html-protect'.
+
+2005-11-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-install-speedbar-variables): Bind gud-pp
+ to "p".
+ (gdb): Move definition of gud-pp to...
+
+ * progmodes/gdb-ui.el (gdb-ann3): ...here. Make it work in the
+ speedbar.
+ (gdb-find-watch-expression): New function.
+
+2005-11-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * faces.el (face-attribute, set-face-attribute): Mention existence
+ of `:ignore-defface' setting in docstring.
+
+2005-11-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (completion-setup-function): Fix last change.
+
+2005-11-17 John Paul Wallington <jpw@pobox.com>
+
+ * ibuf-ext.el (ibuffer-interactive-filter-by-mode):
+ Use `posn-set-point' instead of `mouse-set-point' because the
+ latter is not fbound when configured without X.
+
+ * comint.el (comint-insert-input): Likewise.
+
+2005-11-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (hard-newline): New variable.
+ (sendmail-user-agent-compose, next-line): Use it.
+
+ * mail/sendmail.el (mail-setup, mail-send, mail-insert-from-field)
+ (sendmail-send-it, mail-do-fcc, mail-cc, mail-bcc, mail-fcc)
+ (mail-mail-reply-to, mail-mail-followup-to)
+ (mail-position-on-field, mail-signature, mail-yank-original)
+ (mail-attach-file): Likewise.
+
+ * mail/mailheader.el (mail-header-format)
+ (mail-header-format-function): Likewise.
+
+ * add-log.el (add-change-log-entry, change-log-merge): Likewise.
+
+2005-11-17 Juri Linkov <juri@jurta.org>
+
+ * font-lock.el (font-lock-faces): Rename this defgroup from
+ `font-lock-highlighting-faces'.
+ (font-lock-comment-face, font-lock-comment-delimiter-face)
+ (font-lock-string-face, font-lock-doc-face)
+ (font-lock-keyword-face, font-lock-builtin-face)
+ (font-lock-function-name-face, font-lock-variable-name-face)
+ (font-lock-type-face, font-lock-constant-face)
+ (font-lock-warning-face, font-lock-negation-char-face)
+ (font-lock-preprocessor-face)
+ (font-lock-regexp-grouping-backslash)
+ (font-lock-regexp-grouping-construct): Rename :group from
+ `font-lock-highlighting-faces' to `font-lock-faces'.
+
+ * cus-edit.el (lisp, c, tex):
+ * progmodes/ada-mode.el (ada):
+ * progmodes/asm-mode.el (asm):
+ * progmodes/cperl-mode.el (cperl-faces):
+ * progmodes/cpp.el (cpp):
+ * progmodes/dcl-mode.el (dcl):
+ * progmodes/f90.el (f90):
+ * progmodes/fortran.el (fortran):
+ * progmodes/icon.el (icon):
+ * progmodes/idlwave.el (idlwave-misc):
+ * progmodes/m4-mode.el (m4):
+ * progmodes/make-mode.el (makefile):
+ * progmodes/meta-mode.el (meta-font):
+ * progmodes/modula2.el (modula2):
+ * progmodes/octave-mod.el (octave):
+ * progmodes/pascal.el (pascal):
+ * progmodes/perl-mode.el (perl):
+ * progmodes/prolog.el (prolog):
+ * progmodes/ps-mode.el (PostScript-edit):
+ * progmodes/scheme.el (scheme):
+ * progmodes/sh-script.el (sh-script):
+ * progmodes/simula.el (simula):
+ * progmodes/tcl.el (tcl):
+ * textmodes/nroff-mode.el (nroff):
+ * textmodes/reftex-vars.el (reftex-fontification-configurations):
+ * textmodes/sgml-mode.el (sgml):
+ * textmodes/texinfo.el (texinfo):
+ Add :link (custom-group-link font-lock-faces) to defgroup.
+
+ * hi-lock.el (hi-lock): Rename this defgroup from
+ `hi-lock-interactive-text-highlighting'. Change parent group from
+ `faces' to `font-lock'. Add link to the manual.
+ (hi-lock-mode, hi-lock-file-patterns-range)
+ (hi-lock-exclude-modes, hi-lock-faces): Rename :group from
+ `hi-lock-interactive-text-highlighting' to `hi-lock'.
+ (hi-lock-faces): Add :group `faces'.
+
+ * cus-edit.el (custom-variable-prompt): Clarify the code.
+
+ * faces.el (face-read-string): Set the default value arg of
+ completing-read.
+
+2005-11-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * rfn-eshadow.el (file-name-shadow-properties)
+ (file-name-shadow-tty-properties, file-name-shadow-mode):
+ Remove autoloads, because the file is now preloaded.
+
+2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * printing.el (easy-menu-intern): Don't define.
+ (pr-get-symbol): Use easy-menu-intern only if defined.
+
+ * simple.el (blink-matching-open): Simplify a bit.
+ (completion-setup-function): Fix the case of partial-completion-mode
+ when the minibuffer's contents start with "-".
+ Obey completion-base-size-function even when
+ minibuffer-completing-file-name is non-nil.
+
+2005-11-16 Richard M. Stallman <rms@gnu.org>
+
+ * net/eudcb-ph.el (eudc-ph-open-session):
+ Use set-process-query-on-exit-flag.
+
+ * mail/smtpmail.el (smtpmail-send-it): Use insert-buffer-contents.
+
+ * international/ucs-tables.el (ucs-set-table-for-input):
+ Use make-local-variable, not make-variable-buffer-local.
+
+ * emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
+ Improve warning message text.
+
+ * savehist.el (savehist-save-hook): Add :group.
+
+ * menu-bar.el (menu-bar-help-menu):
+ Rename Find Extra Packages to External Packages.
+
+ * cus-edit.el (Custom-reset-standard): Verify that
+ :custom-standard-value prop exists before calling it.
+
+ * apropos.el (apropos-calc-scores): Use apropos-pattern.
+
+2005-11-16 Martin Rudalics <rudalics@gmx.at>
+
+ * wid-edit.el (color): Enclose %t in %{...%}.
+
+ * cus-edit.el (face): Enclose %t in %{...%}.
+
+2005-11-16 Hrvoje Niksic <hniksic@xemacs.org>
+
+ * savehist.el (savehist-mode-hook): Re-add the var.
+ (savehist-mode): Use it.
+
+2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/flyspell.el: Fix commenting convention.
+ Remove unnecessary leading * in custom docstrings.
+ (flyspell-emacs): Remove unused var.
+ (flyspell-delete-region-overlays): Use remove-overlays.
+ (flyspell-accept-buffer-local-defs): Use save-current-buffer.
+ (flyspell-debug-signal-no-check, flyspell-debug-signal-changed-checked)
+ (flyspell-debug-signal-pre-word-checked, flyspell-post-command-hook)
+ (flyspell-debug-signal-word-checked): Use with-current-buffer.
+ (make-flyspell-overlay): Don't locally reuse a global name.
+ (flyspell-highlight-incorrect-region)
+ (flyspell-highlight-duplicate-region): Use flyspell-unhighlight-at.
+ (flyspell-check-previous-highlighted-word): Use flyspell-overlay-p.
+ (flyspell-notify-misspell): Remove unused args `start' and `end'.
+ (flyspell-word): Adjust call accordingly. Use ispell-send-string.
+ Wrap calls to accept-process-output inside with-local-quit since it's
+ often called from a post-command-hook.
+ (flyspell-correct-word, flyspell-auto-correct-word):
+ Use ispell-send-string.
+ (flyspell-xemacs-popup): Remove unused arg `event'. Update call.
+
+ * calendar/diary-lib.el (diary-list-entries): Also hide the
+ terminating newline.
+
+2005-11-16 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex.el (reftex-use-fonts): Remove the check for
+ window-system, to allow fonts on tty.
+
+2005-11-17 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-item-info): New function.
+ (gud-install-speedbar-variables): Use it to display data type
+ of watch expression as a tooltip in speedbar.
+
+2005-11-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * font-core.el (global-font-lock-mode): Add :version keyword,
+ because default was changed.
+
+ * jka-cmpr-hook.el (auto-compression-mode): Ditto.
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' for
+ `file-name-shadow-mode'.
+
+ * loadup.el: Preload rfn-eshadow.
+
+ * rfn-eshadow.el (file-name-shadow-mode): Set :init-value to t.
+ Add :version keyword.
+ (file-name-shadow-properties, file-name-shadow-tty-properties)
+ (file-name-shadow): Add :version keyword.
+
+ * cus-edit.el (custom-add-parent-links): Fix bug whereby, for
+ instance, `(fringe custom-face)' shadowed `(fringe custom-group)'
+ in the custom-group property of the symbol frames and the fringe
+ group got no link to its parent group frames.
+ Doc fix.
+
+2005-11-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-stop-subjob): New function.
+ (gud-menu-map, gud-tool-bar-map): Use it.
+
+2005-11-16 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/gud.el (gud-menu-map): Let [stop] stop program rather
+ than kill it.
+ (gud-tool-bar-map): Likewise. Move cont/until/finish buttons
+ to a more useful/logical place.
+
+2005-11-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Make visibility of stop and
+ go buttons complementary.
+
+2005-11-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * rfn-eshadow.el (rfn-eshadow-regexp): Remove.
+ (rfn-eshadow-sifn-equal): New function.
+ (rfn-eshadow-update-overlay): Rewrite to use substitute-in-file-name.
+
+2005-11-15 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-utils.el (viper-non-word-characters-reformed-vi):
+ Quote `-' in string.
+
+ * emulation/viper.el (viper-emacs-state-mode-list): Ensure that
+ rcirc-mode buffers come up in Emacs state.
+
+ * ediff-util.el (ediff-make-temp-file): Use proper file-name-handler
+ operation.
+
+2005-11-15 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-termcap-format): Fix typos.
+ (term-down): Fix the negative argument case.
+
+2005-11-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el: Remove face-alias left over from change on
+ 2005-08-15.
+ (gdb-ann3): New command gud-go.
+ (menu): Accomodate gdb-mi.el.
+ (gdb-assembler-custom): Make buffer of selected window current
+ so that set-window-point works.
+
+ * progmodes/gud.el (gud-menu-map, gud-tool-bar-map): Re-define
+ buttons and include new ones.
+
+2005-11-16 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/gud.el (gud-tool-bar-item-visible-no-fringe): New function.
+ (gud-menu-map): Use it.
+
+2005-11-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * jka-cmpr-hook.el (auto-compression-mode): Enable it in a way
+ that works correctly for Custom and that does not override a user
+ who disables it.
+
+ * help-mode.el (help-make-xrefs, help-xref-on-pp)
+ (help-xref-interned, help-follow): Make hyperlinks for variables
+ that are unbound, but have a non-nil variable-documentation property.
+
+ * emacs-lisp/derived.el (define-derived-mode): Remove defvar for
+ mode hook. (It conflicted with defcustoms for some mode hooks.)
+ Use the `variable-documentation' property to give the mode hook a
+ docstring and expand that docstring.
+
+2005-11-14 Hrvoje Niksic <hniksic@xemacs.org>
+
+ * savehist.el (savehist-mode): Don't bother with
+ `custom-set-minor-mode'.
+ (savehist-coding-system): Check XEmacs version.
+ (history-length): Declare also at run time.
+ (savehist-mode): Don't emit a message. Don't run the minor mode hook.
+ Don't set the customize state.
+ (savehist-minibuffer-hook): Special case for when
+ minibuffer-history-variable is equal to t.
+
+2005-11-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (write-file): Refresh VC status.
+
+ * calendar/diary-lib.el (diary-list-entries, diary-show-all-entries)
+ (mark-diary-entries, make-diary-entry): Check default-major-mode rather
+ than fundamental-mode to see if the mode was set.
+
+2005-11-14 Romain Francoise <romain@orebokech.com>
+
+ * dired-x.el: If `vm-visit-folder' doesn't exist, define it as a
+ dummy function in `eval-when-compile' to avoid compiler warning.
+ Require `man' at compile time.
+
+2005-11-14 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-alg.el (calcFunc-write-out-power): Rename it to
+ calcFunc-powerexpand.
+ (math-write-out-power): Rename it to math-powerexpand; have it
+ handle negative exponents.
+ (calc-writeoutpower): Rename it to calc-powerexpand.
+
+ * calc/calc-ext.el: Change calcFunc-writeoutpower and
+ calc-writeoutpower to calcFunc-powerexpand and calc-powerexpand in
+ autoloads.
+ Add calcFunc-ldiv to autoloads.
+
+ * calc/calc-arith.el (calcFunc-ldiv): New function.
+
+ * calc/calc.el (calc-left-divide): New function.
+
+2005-11-14 Juri Linkov <juri@jurta.org>
+
+ * cus-edit.el (custom-variable-prompt): Set the default value arg
+ of completing-read.
+
+ * cus-dep.el (custom-make-dependencies): Reverse the list of
+ found dependencies.
+
+2005-11-14 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * menu-bar.el (menu-bar-options-menu): Delete "Syntax
+ Highlighting" entry, it is on by default now.
+ (menu-bar-options-save): Do not save global-font-lock-mode.
+
+2005-11-13 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-large-region):
+ Call flyspell-accept-buffer-local-defs.
+
+2005-11-13 Agustin Martin <agustin.martin@hispalinux.es>
+
+ * textmodes/flyspell.el (flyspell-notify-misspell):
+ Fix misspelling of "Misspelling".
+ (flyspell-process-localwords): New function.
+ (flyspell-large-region): Call flyspell-process-localwords and
+ flyspell-delete-region-overlays.
+ (flyspell-delete-region-overlays): New function.
+ (flyspell-delete-all-overlays): Call that.
+
+2005-11-13 Richard M. Stallman <rms@gnu.org>
+
+ * help.el (help-for-help-internal): Improve doc of C-h a.
+ (describe-key): Improve prompt; doc fix.
+
+2005-11-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-svn.el (vc-svn-registered): Catch all errors.
+
+ * cus-dep.el (custom-make-dependencies): Typo.
+
+2005-11-13 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-util.el (top): Fix compilation warning.
+
+2005-11-13 Kim F. Storm <storm@cua.dk>
+
+ * help.el (help-for-help-internal): Fix `a' entry. Add `d' entry.
+
+2005-11-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Move parentheses (again).
+ (gud-speedbar-buttons): Match on "const char *" too.
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler)
+ (gdb-var-list-children-handler): Match on "const char *" too.
+ (gdb-var-evaluate-expression-handler): Match on empty string.
+ (gdb-var-update-handler): Only call
+ gdb-var-evaluate-expression-handler when required.
+
+2005-11-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Revert to window-fringes for
+ selected window. This still doesn't work for speedbar.
+ (gud-speedbar-buttons): Handle string expressions properly.
+
+ * progmodes/gdb-ui.el (gdb-var-evaluate-expression-handler)
+ (gdb-var-create-handler): Handle string expressions properly.
+ (gdb-var-list-children-regexp, gdb-var-list-children-handler):
+ Handle string expressions properly. Move "type" field into regexp.
+
+2005-11-12 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-maybe-message): New function to reduce
+ code duplication: invokes `message' iff baud-rate is high enough.
+ (bookmark-write-file): Use above instead of an inline conditional.
+ (bookmark-load): Same.
+
+2005-11-12 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-write-file): Don't visit the destination
+ file, just write the data to it using write-region. This is
+ similar to saveplace.el at 2005-05-29T08:36:26Z!rms@gnu.org, but with an additional
+ change to avoid visiting the file in the first place.
+
+2005-11-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * hi-lock.el (hi-lock-mode): Set the default value of
+ font-lock-defaults.
+
+2005-11-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * find-lisp.el (find-lisp-find-dired-insert-file): Pass `string'
+ arg to `file-attributes'.
+ (find-lisp-format): The UID and GID can now be strings.
+
+2005-11-12 Kim F. Storm <storm@cua.dk>
+
+ * help.el (help-map): Bind C-h d to apropos-documentation.
+
+ * simple.el (what-cursor-position): Print (EOB) instead of (100%)
+ when point is at end-of-buffer.
+
+ * apropos.el (apropos-match-face): Doc fix.
+ (apropos-sort-by-scores): Add new choice `verbose'.
+ (apropos-documentation-sort-by-scores): New defcustom.
+ (apropos-pattern): Now contains the pattern entered by the user.
+ (apropos-pattern-quoted): New defvar.
+ (apropos-regexp): New defvar, containing the regexp corresponding
+ to apropos-pattern.
+ (apropos-all-words-regexp): Rename from apropos-all-regexp.
+ (apropos-read-pattern): New defun. Use it to read pattern arg in
+ interactive calls; returns list of words for a word list, and
+ string for a regexp.
+ (apropos-parse-pattern): Rename from apropos-rewrite-regexp. Now
+ parses a list of words or regexp as returned by apropos-read-pattern.
+ (apropos-calc-scores): Return nil if apropos-regexp doesn't match.
+ (apropos-score-doc): Return a very high score if the string
+ entered by the user matches literally.
+ (apropos-variable): Doc fix. Use apropos-read-pattern.
+ (apropos-command): Doc fix. Use apropos-read-pattern and
+ apropos-parse-pattern. Call apropos-print with nosubst=t.
+ (apropos, apropos-value): Doc fix. Use apropos-read-pattern and
+ apropos-parse-pattern.
+ (apropos-documentation): Doc fix. Use apropos-read-pattern and
+ apropos-parse-pattern. Locally bind apropos-sort-by-scores to
+ apropos-documentation-sort-by-scores. Call apropos-print with
+ nosubst=t.
+ (apropos-documentation-internal): Pass doc string through
+ substitute-key-definition before adding text properties.
+ Highlight substring matching literal user input if possible.
+ (apropos-documentation-check-doc-file): Remove locals beg and end.
+ Fix calculation of score (as added twice). Pass doc string through
+ substitute-key-definition before adding text properties.
+ (apropos-documentation-check-elc-file): Pass doc string through
+ substitute-key-definition before adding text properties.
+ Highlight substring matching literal user input if possible.
+ (apropos-print): Add new arg NOSUBST; if set, command and variable
+ doc strings have already been passed through substitute-key-definition.
+ Add code to handle apropos-accumulator items without score element
+ for backwards compatibility (e.g. with woman package).
+ Only show scores if apropos-sort-by-scores is `verbose'.
+
+2005-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * jka-cmpr-hook.el (jka-compr-install): Use push and dolist.
+ Add jka-compr-load-suffixes to load-suffixes.
+
+ * jka-compr.el: Require jka-cmpr-hook.
+ (jka-compr-info-compress-message, jka-compr-info-compress-program)
+ (jka-compr-info-compress-args, jka-compr-info-uncompress-message)
+ (jka-compr-info-uncompress-program, jka-compr-info-uncompress-args)
+ (jka-compr-info-can-append, jka-compr-info-strip-extension)
+ (jka-compr-info-file-magic-bytes, jka-compr-get-compression-info)
+ (jka-compr-info-regexp): Remove. Provided by jka-cmpr-hook.
+ (jka-compr-uninstall): Remove entries from
+ jka-compr-added-to-file-coding-system-alist after they are used.
+ (jka-compr-error): Remove unused var `curbuf'.
+ (jka-compr-file-local-copy): Remove unused var `notfound'.
+
+2005-11-10 Romain Francoise <romain@orebokech.com>
+
+ * apropos.el (apropos-calc-scores): Use `apropos-pattern'.
+
+2005-11-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Move parentheses.
+ (gdb): New command gud-pv.
+
+2005-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * tar-mode.el: Remove spurious or unnecessary leading stars
+ in docstrings.
+ (tar-header-block-tokenize): Also obey default-file-name-coding-system.
+ (tar-parse-octal-integer-safe): Use mapc.
+ (tar-header-block-summarize): Remove unused var `ck'.
+ (tar-summarize-buffer): Don't clear the modified-p bit if it wasn't
+ cleared before. Obey default-enable-multibyte-characters.
+ Use mapconcat. Simplify setting of tar-header-offset.
+ (tar-mode-map): Move initialization inside delcaration.
+ (tar-flag-deleted): Use `abs'.
+ (tar-expunge-internal): Remove unused var `line'.
+ (tar-expunge-internal): Don't hardcode point-min==1.
+ (tar-expunge): Widen while doing set-buffer-multibyte.
+ (tar-rename-entry): Use file-name-coding-system.
+ (tar-alter-one-field): Don't hardcode point-min==1.
+ (tar-subfile-save-buffer): string-as-unibyte works on unibyte strings.
+ (tar-pad-to-blocksize): Don't hardcode point-min==1. Clarify the code.
+
+2005-11-10 Masatake YAMATO <jet@gyve.org>
+
+ * add-log.el (add-log-current-defun): Handle class::method
+ notation of c++. Fix incorrect comment.
+
+2005-11-10 Alan Mackenzie <acm@muc.de>
+
+ * help-fns.el (describe-variable): Make C-h v work when a variable
+ has variable documentation yet is unbound.
+
+2005-11-10 Masatake YAMATO <jet@gyve.org>
+
+ * man.el (Man-highlight-references): Set an empty
+ string to `Man-arguments' if it is nil.
+ Suggested by Reiner Steib <Reiner.Steib@gmx.de>.
+
+2005-11-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * Makefile.in (mh-loaddefs.el, loaddefs.el): Better follow the
+ commenting conventions.
+
+ * cus-dep.el (custom-make-dependencies): Simplify.
+ Better follow the commenting conventions.
+
+2005-11-09 Richard M. Stallman <rms@gnu.org>
+
+ * apropos.el (apropos-pattern): Rename from apropos-regexp.
+ (apropos-orig-pattern): Rename from apropos-orig-regexp.
+ All uses changed.
+ (apropos-rewrite-regexp): Doc fix.
+ (apropos-variable, apropos-command, apropos, apropos-value):
+ Change prompt; carry through the argument renaming.
+
+2005-11-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * find-lisp.el: Require dired.
+ (find-lisp-find-dired-internal): Do not call
+ `abbreviate-file-name' on DIR.
+
+2005-11-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): Make gud-pp use user-defined command pp1.
+
+2005-11-09 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Ensure tool-bar is constant
+ when using the speedbar.
+ (gdb): New command gud-pp.
+ (gud-menu-map, gud-tool-bar-map): Put it on the tool bar.
+
+2005-11-09 Juri Linkov <juri@jurta.org>
+
+ * replace.el (occur-excluded-properties): New defcustom.
+ (occur-1, occur-engine, occur-accumulate-lines): Use it.
+
+2005-11-08 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-units.el (math-convert-units): Replace any composite
+ unit by its definition.
+
+2005-11-08 Lars Hansen <larsh@soem.dk>
+
+ * emacs-lisp/autoload.el (update-directory-autoloads):
+ Add obsolete function alias.
+
+2005-11-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-variables): Don't set
+ comment-indent-function.
+ (lisp-comment-indent): Replace by an alias for comment-indent-default.
+
+ * reveal.el (reveal-post-command): Rework the handling of
+ reveal-open-spots, so as to be more reliable. There were several
+ tricky corner cases where an open spot might be lost, or where
+ a closed spot might end up on the list of open spots.
+ Only reveal text that's ellipsised.
+
+2005-11-07 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-export-as-html): Remove bogus (debug) form.
+
+2005-11-07 John Paul Wallington <jpw@gnu.org>
+
+ * ibuffer.el (ibuffer): Search iconified frames too when
+ getting Ibuffer buffer's window.
+
+2005-11-06 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/compile.el (compilation-internal-error-properties):
+ save-excursion around the computation of MARKER.
+
+2005-11-06 Piet van Oostrum <piet@cs.uu.nl>
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ flyspell-get-word returns a list, not just a string.
+
+2005-11-06 John Paul Wallington <jpw@pobox.com>
+
+ * ibuffer.el (ibuffer): Search all visible frames when getting
+ Ibuffer buffer's window.
+
+2005-11-07 Masatake YAMATO <jet@gyve.org>
+
+ * man.el (Man-reference-regexp): Accept spaces between
+ `Man-name-regexp' and `Man-section-regexp'.
+ (Man-apropos-regexp): New variable.
+ (Man-abstract-xref-man-page): Use value for `Man-target-string'
+ if available.
+ (Man-highlight-references, Man-highlight-references0):
+ Handle the case when `Man-arguments' includes "-k".
+ (Man-highlight-references0): Rename the argument `TARGET-POS' to
+ `TARGET'. `TARGET' can be a number, function or nil.
+
+2005-11-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler, gdb-var-delete)
+ (gdb-edit-value, gdb-speedbar-expand-node, gdb-get-create-buffer)
+ (gdb-breakpoints-mode, gdb-toggle-breakpoint, gdb-delete-breakpoint)
+ (gdb-goto-breakpoint, gdb-frames-mode, gdb-registers-mode)
+ (gdb-locals-mode, gdb-find-file-hook): Use buffer-local-value.
+ (gdb-send-item): Use buffer-local-value and simplify.
+
+2005-11-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' for
+ `global-font-lock-mode'.
+
+ * font-core.el (global-font-lock-mode): Enable `global-font-lock-mode'
+ by default, except in batch mode or when the -D option is given.
+
+ * emacs-lisp/easy-mmode.el (define-global-minor-mode): Pass all
+ specified keyword args on to `define-minor-mode'. Update docstring.
+
+2005-11-05 Romain Francoise <romain@orebokech.com>
+
+ * replace.el (occur-engine): Add marker at end of line, too.
+
+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)
+ (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
+ (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+ (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for
+ pgg-add-passphrase-to-cache function.
+
+ * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region)
+ (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric)
+ (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt)
+ (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional PASSPHRASE
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+ (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache
+ function.
+
+2005-11-04 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * font-lock.el: Don't deal with font-lock-face-attributes here,
+ move the code ...
+
+ * startup.el (command-line): ... here. Use face-spec-set instead
+ of custom-declare-face.
+
+ * faces.el (face-spec-set): Reset the face if spec is not nil.
+
+2005-11-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * newcomment.el (comment-region-internal): Box more tightly in the
+ common case where there's no TAB in the boxed text.
+
+2005-11-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * info.el (info-tool-bar-map): Use images prev-node, next-node and
+ up-node.
+
+2005-11-04 Ulf Jasper <ulf.jasper@web.de>
+
+ * net/newsticker.el: Commentary updated. Code formatting changed.
+ (newsticker-version): Change to "1.9".
+ (newsticker, newsticker-feed): Doc fix.
+ (newsticker-url-list): Doc fix. Add option "Weekly".
+ (newsticker-retrieval-interval): Add option "Weekly".
+ (newsticker-headline-processing): Doc fix.
+ (newsticker-auto-mark-filter): Remove.
+ (newsticker-auto-mark-filter-list): New.
+ (newsticker-layout, newsticker-sort-method): Doc fix.
+ (newsticker-hide-old-items-in-newsticker-buffer)
+ (newsticker-heading-format, newsticker-item-format)
+ (newsticker-desc-format): Doc fix.
+ (newsticker-show-all-rss-elements): Remove.
+ (newsticker-show-all-news-elements): New.
+ (newsticker-faces, newsticker-ticker): Doc fix.
+ (remove-from-invisibility-spec): Code formatting.
+ (newsticker--process-ids): New.
+ (newsticker-mode): Doc fix.
+ (newsticker-mode): Change mode-line-format.
+ (newsticker-start): Remove debug output.
+ (newsticker-start-ticker): Doc fix. Add autoload cookie.
+ (newsticker-w3m-show-inline-images): Code formatting.
+ (newsticker-next-item): Call `force-mode-line-update'.
+ (newsticker-previous-item): Call `force-mode-line-update'.
+ (newsticker-next-feed): Call `force-mode-line-update'.
+ (newsticker-previous-feed): Call `force-mode-line-update'.
+ (newsticker-mark-all-items-at-point-as-read): Code formatting.
+ (newsticker-show-old-items): Do not show descs.
+ (newsticker-hide-entry): Hide too much.
+ (newsticker-hide-entry, newsticker-show-entry)
+ (newsticker-toggle-auto-narrow-to-feed): Code formatting.
+ (newsticker-set-auto-narrow-to-feed): Update buffer immediately.
+ (newsticker-toggle-auto-narrow-to-item): Code formatting.
+ (newsticker-set-auto-narrow-to-item): Update buffer immediately.
+ (newsticker-running-p, newsticker-ticker-running-p): Autoload cookie.
+ (newsticker-get-news): Call `force-mode-line-update'.
+ Collect process ids.
+ (newsticker--sentinel): Change coding system handling.
+ Move image retrieval to new functions newsticker--get-logo-url-*.
+ Move feed parsing to new functions newsticker--parse-*.
+ Update list of process ids.
+ (newsticker--get-logo-url-atom-1.0, newsticker--get-logo-url-atom-0.3)
+ (newsticker--get-logo-url-rss-2.0, newsticker--get-logo-url-rss-1.0)
+ (newsticker--get-logo-url-rss-0.92, newsticker--get-logo-url-rss-0.91)
+ (newsticker--parse-atom-0.3, newsticker--parse-atom-1.0)
+ (newsticker--parse-rss-0.91, newsticker--parse-rss-0.92)
+ (newsticker--parse-rss-1.0, newsticker--parse-rss-2.0)
+ (newsticker--parse-generic-feed, newsticker--parse-generic-items): New.
+ (newsticker--decode-coding-string): Remove.
+ (newsticker--decode-numeric-entities): Check input. Format code.
+ (newsticker--remove-whitespace): Check input.
+ (newsticker--do-forget-preformatted): Doc fix.
+ (newsticker--decode-rfc822-date): Allow for missing time.
+ (newsticker--update-process-ids): New.
+ (newsticker--image-sentinel): Change comment.
+ (newsticker--image-read): Change error message.
+ (newsticker--imenu-goto): Doc fix. Show headline title.
+ (newsticker--buffer-set-uptodate): Call `force-mode-line-update'.
+ (newsticker--buffer-do-insert-text): Clean whitespace in
+ html-rendered headline title. Code formatting.
+ Call `newsticker--buffer-print-extra-elements'.
+ (newsticker--buffer-print-extra-element): Remove.
+ (newsticker--buffer-print-extra-elements): New.
+ (newsticker--buffer-do-print-extra-element): New.
+ (newsticker--buffer-insert-enclosure): Doc fix. Use MBytes for
+ large sizes.
+ (newsticker--run-auto-mark-filter)
+ (newsticker--do-run-auto-mark-filter):
+ Use `newsticker-auto-mark-filter-list'.
+
+2005-11-04 Ryan Yeske <rcyeske@gmail.com>
+
+ * net/rcirc.el: Use split-string OMIT-NULLS argument.
+ (rcirc-print): Force redisplay before running hooks. Do long
+ buffer truncation after making new text read-only. Deal with nil
+ text when decoding strings. If TARGET is nil, use either the
+ currently selected buffer, if it is an rcirc buffer and of the
+ same process or the process buffer.
+ (rcirc-mode): Remove header-line. Recompute short buffer names.
+ Initialize rcirc-buffer-alist here instead of rcirc-get-buffer-create.
+ (rcirc-short-buffer-name): Add variable.
+ (rcirc-kill-buffer-hook): Recompute short buffer names.
+ Remove nick from private channel.
+ (rcirc-send-input): Send command text to current-buffer.
+ Don't clear overlay arrow here.
+ (rcirc-short-buffer-name): Return a short buffer name.
+ (rcirc-update-short-buffer-names, rcirc-abbreviate)
+ (rcirc-rebuild-tree, rcirc-make-trees): Add functions to generate
+ buffer-name abbreviations.
+ (rcirc-kill-buffer-hook-1): Split to make debugging easier.
+ Do not touch nick-table when killing a parted channel.
+ (rcirc-window-configuration-change): Rename from rcirc-update-activity.
+ Clear arrow from current buffer if it is now hidden.
+ (rcirc-current-buffer): Add variable.
+ (rcirc-my-nick, rcirc-other-nick, rcirc-server)
+ (rcirc-nick-in-message, rcirc-prompt, rcirc-mode-line-nick):
+ Remove -face from names.
+ (rcirc-update-activity-string): Print "DND" when globally ignoring
+ activity.
+ (rcirc-ignore-buffer-activity-flag): Rename from
+ rcirc-ignore-channel-activity.
+ (rcirc-ignore-all-activity-flag): Doc fix.
+ (rcirc-channels): Remove variable.
+ (rcirc-kill-buffer-hook):
+ (rcirc-get-buffer-create): Add nick to private channel.
+ (rcirc-multiline-edit-submit): Remove tabs.
+ (rcirc-put-nick-channel, rcirc-channel-nicks): Look up nicks case
+ folded.
+ (rcirc-remove-nick-channel): Bug fix.
+ (rcirc-toggle-ignore-buffer-activity): Rename from
+ rcirc-toggle-ignore-channel-activity.
+ (rcirc-record-activity): Add buffers to the front of the list.
+ (rcirc-update-activity): Remove killed buffers from list.
+ (rcirc-process-server-response-1): Remove last argument if it is
+ null before calling handler.
+ (rcirc): Add "rcirc" defcustom prefix.
+ (rcirc-prompt): Simplify default prompt.
+ Use custom-initialize-default.
+ (rcirc-private-chats): Remove variable.
+ (rcirc-prompt): Change initialization.
+ (rcirc-version): Remove function.
+ (rcirc-id-string): Add constant.
+ (rcirc-last-buffer): Remove variable.
+ (rcirc-buffer-alist): Add variable.
+ (rcirc-connect): Update variable setup.
+ (rcirc-sentinel, rcirc-update-prompt): Use `rcirc-buffer-alist'.
+ (rcirc-trap-errors-flag): Rename from `rcirc-trap-errors' change
+ default.
+ (rcirc-handler-generic): Trigger activity.
+ (rcirc-send-message): Create the buffor of the target.
+ (rcirc-generate-new-buffer-name): Rename from `rcirc-get-buffer-name'.
+ (rcirc-get-buffer): Just return nil if there is no matching buffer.
+ (rcirc-multiline-edit-cancel): Remove function.
+ (rcirc-set-last-buffer): Remove function.
+ (rcirc-get-any-buffer): Add function.
+ (rcirc-join-channels): Don't print /join text.
+ (rcirc-toggle-ignore-channel-activity): Add and update echo area
+ messages.
+ (rcirc-cmd-ctcp): Use rcirc-send-string to send request.
+ (rcirc-handler-NOTICE): Recognize CTCP responses.
+ (rcirc-handler-332, rcirc-handler-332): Use a temp buffer for
+ constructing TOPIC string for buffers we are not JOINed.
+ (rcirc-handler-CTCP-response): Add handler.
+ (rcirc-multiline-edit-submit): Restore the window-configuration
+ before adjusting point.
+ (rcirc): Add customization group.
+ (rcirc-server, rcirc-port, rcirc-nick, rcirc-user-name)
+ (rcirc-user-full-name, rcirc-startup-channels-alist)
+ (rcirc-fill-flag, rcirc-fill-column, rcirc-fill-prefix)
+ (rcirc-ignore-all-activity-flag, rcirc-time-format)
+ (rcirc-input-ring-size, rcirc-read-only-flag)
+ (rcirc-buffer-maximum-lines, rcirc-authinfo-file-name)
+ (rcirc-auto-authenticate-flag, rcirc-prompt, rcirc-print-hooks):
+ Change defvar to defcustom.
+ (rcirc-update-prompt): Add optional ALL arg, which will update
+ prompts in all rcirc buffers. Regexp quote replacement text.
+ (rcirc-fill-column): Accept frame-width as a value.
+ (rcirc-set-changed): Add function.
+ (rcirc-next-active-buffer): Write more meaningful messages.
+ (rcirc-faces): Add customization group.
+ (rcirc-my-nick-face, rcirc-other-nick-face, rcirc-server-face)
+ (rcirc-nick-in-message-face, rcirc-prompt-face)
+ (rcirc-mode-line-nick-face): Move into rcirc-faces group.
+ (with-rcirc-process-buffer): Move before first usage.
+ (rcirc-debug-buffer): Rename from `rcirc-log-buffer'.
+ (rcirc-debug-flag): Rename from `rcirc-log-p'.
+ (rcirc-debug): Rename from `rcirc-log'.
+ (rcirc-format-response-string): Do not print `-' chars for a
+ NOTICE with no sender. Simplify output of server responses.
+
+2005-11-04 Henrik Enberg <henrik.enberg@telia.com>
+
+ (rcirc-browse-url-map, rcirc-browse-url-at-point)
+ (rcirc-browse-url-at-mouse, rcirc-mangle-text):
+ Make urls mouse and RET clickable.
+
+2005-11-04 Henrik Enberg <henrik.enberg@telia.com>
+
+ * mail/rmailout.el (rmail-output-to-rmail-file, rmail-output): Doc fix.
+
+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)
+ (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
+ (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+ (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for
+ pgg-add-passphrase-to-cache function.
+
+ * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region)
+ (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric)
+ (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt)
+ (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional PASSPHRASE
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+ (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache
+ function.
+
+2005-11-04 Edward O'Connor <hober0@gmail.com> (tiny change)
+
+ * net/goto-addr.el (goto-address-url-regexp): Remove `data:' URLs
+ from goto-address-url-regexp.
+
+2005-11-04 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-read-date, org-goto-calendar)
+ (org-recenter-calendar, org-agenda-goto-calendar):
+ Temporarily clear `calendar-move-hook'.
+
+2005-11-04 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-merg.el (ediff-merge-region-is-non-clash):
+ Return t, if not merging.
+
+ * ediff-util.el (ediff-previous-difference): Don't skip regions that
+ have merge clashes.
+
+2005-11-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event):
+ Undo previous change.
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' for
+ mouse-wheel-down-event and mouse-wheel-up-event. Don't call
+ tty-register-default-colors on Mac.
+
+2005-11-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-buffer-type): Remove duplicate declaration.
+ (gdb-buffer-type): Make it automatically buffer local...
+ (gdb-get-create-buffer): ...and set it accordingly.
+ (gdb-frame-gdb-buffer, gdb-display-gdb-buffer): Make these
+ actually work.
+
+2005-11-03 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * font-lock.el (font-lock-warning-face): Use the more vivid red1,
+ not red.
+
+2005-11-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gud-watch): Use save-selected-window in
+ case GUD buffer is not visible.
+ (gdb-goto-breakpoint): Try to force display in source buffer.
+ (gdb-frame-gdb-buffer): Copy other similar functions.
+ (gdb-restore-windows): Don't display source if not asked for.
+ (gdb-assembler-buffer-name): Don't capitalise.
+
+2005-11-03 Richard M. Stallman <rms@gnu.org>
+
+ * wid-edit.el (key-sequence): New widget type.
+
+ * simple.el (set-mark-command-repeat-pop): New variable.
+ (set-mark-command): Only interpret plan C-@ after a pop as a pop
+ if set-mark-command-repeat-pop is true.
+
+ * info.el (Info-fontify-node): Don't display extra "see" if there
+ already is one here.
+
+ * mouse.el: Fix special handling of DEL after dragging a region:
+ (mouse-drag-region-1): Treat mouse-set-region like mouse-set-point.
+ (mouse-region-delete-keys): Change to defcustom. Add [backspace].
+
+ * mail/feedmail.el: Use insert-buffer-substring, not insert-buffer.
+
+ * textmodes/ispell.el (ispell-command-loop): Change `i' description
+ not to assume it pertains to an affix.
+
+ * textmodes/flyspell.el (flyspell-post-command-hook):
+ Bind deactivate-mark to prevent deactivation.
+
+2005-11-03 Lars Hansen <larsh@soem.dk>
+
+ * dired-x.el: Add menu bindings for dired-do-find-marked-files,
+ dired-do-relsymlink, dired-flag-extension, dired-mark-extension,
+ dired-mark-omitted, dired-do-relsymlink-regexp, dired-omit-mode.
+
+2005-11-03 Romain Francoise <romain@orebokech.com>
+
+ * net/eudcb-mab.el: Now part of GNU Emacs. Update FSF's address.
+ Update copyright years.
+
+2005-11-03 Sam Steingold <sds@gnu.org>
+
+ * mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event):
+ Use system-type instead of window-system because window-system is not
+ correctly defined during loadup.
+
+2005-11-02 Mark A. Hershberger <mah@everybody.org>
+
+ * xml.el (xml-syntax-table): Allow xml.el to compile in XEmacs.
+ (xml-parse-tag): Join strings separated by a comment properly.
+
+2005-11-02 Andreas Schwab <schwab@suse.de>
+
+ * emacs-lisp/byte-opt.el (byte-optimize-pure-func): Fix last fix.
+
+2005-11-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/byte-opt.el (string-to-syntax): Mark it as pure.
+ (byte-optimize-pure-func): Quote the eval'd value.
+
+ * progmodes/perl-mode.el (perl-font-lock-special-syntactic-constructs):
+ Rename from perl-font-lock-syntactic-face-function.
+ Change the calling convention so it can be used as a font-lock MATCHER.
+ Do the parse-partial-sexp loop outselves.
+ (perl-font-lock-syntactic-keywords): Use it.
+ (perl-mode): Don't set font-lock-syntactic-face-function any more.
+
+2005-11-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-mouse-until): Make it work in the
+ disassembly buffer too.
+ (gdb-exited): Remove overlay arrows when execution has finished.
+ (gdb-info-frames-custom, gdb-info-threads-custom)
+ (gdb-info-registers-custom): Don't add inappropriate text
+ properties if inferior is not active.
+
+2005-11-02 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/fortran.el (fortran-blink-match):
+ Use `blink-matching-delay'.
+
+2005-11-02 John Mongan <jmongan@mccammon.ucsd.edu> (tiny change)
+
+ * progmodes/f90.el (f90-match-end): Use `blink-matching-delay'.
+
+2005-11-02 Lars Hansen <larsh@soem.dk>
+
+ * net/tramp.el (tramp-action-out-of-band): Handle scp message
+ "Permission denied".
+
+2005-11-01 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Pass nil to flyspell-get-word.
+
+2005-11-02 Kim F. Storm <storm@cua.dk>
+
+ * menu-bar.el (menu-bar-options-menu): Show "Shift Movement (CUA)"
+ item instead of "C-x/C-c/C-v (CUA)" if cua-enable-cua-keys is nil.
+
+2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calendar/cal-menu.el (date, event): Don't declare as dynamic-var.
+ (calendar-mouse-holidays, calendar-mouse-view-diary-entries)
+ (calendar-mouse-print-dates): Add optional `event' argument.
+ Update interactive-spec.
+ (calendar-mouse-cal-tex-menu, cal-tex-mouse-filofax):
+ Use `calendar-event-to-date' instead of `event'.
+
+2005-11-02 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/ld-script.el (ld-script-builtins):
+ Add more words: "DATA_SEGMENT_ALIGN", "DATA_SEGMENT_END",
+ "DATA_SEGMENT_RELRO_END", "LENGTH", "ORIGIN", and "SEGMENT_START".
+ (auto-mode-alist): Accept .ld, .lds, ld.in and .lds.in.
+
+2005-11-01 Romain Francoise <romain@orebokech.com>
+
+ * vc-sccs.el: Update copyright year.
+ * ezimage.el: Likewise.
+
+2005-11-01 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp> (tiny change)
+
+ * info.el (Info-fontify-node): Use `string-width' for fontifying
+ underlined titles.
+
+2005-11-01 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-fontify-node): Downcase node header keywords Node,
+ Prev, Next, Up before comparison.
+ (Info-history): Insert absolute directory name, and put invisible
+ property on it.
+
+2005-11-01 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-file-supports-index-cookies): New variable.
+ (Info-find-node-2): Check makeinfo version for index cookie support.
+ (Info-index-nodes): Search for nodes with index cookies only when
+ Info-file-supports-index-cookies is t. Otherwise, search nodes
+ with "Index" in the node name.
+ (Info-index-node): Search index cookie in the current node only when
+ Info-file-supports-index-cookies is t. Otherwise, check the word
+ "Index" in the node name.
+ (Info-find-emacs-command-nodes): Remove code that searches nodes
+ with "Index" node name in the top menu.
+
+2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/scheme.el (scheme-mode-variables): Use the default
+ comment-indent-function.
+
+ * faces.el (face-attribute): Handle the case where a face inherits from
+ a non-existent face.
+
+ * simple.el (eval-expression-print-format): Use lisp-readable syntax
+ for octal and hexa output, and merge the char into the paren.
+ (kill-new): Use push.
+ (copy-to-buffer): Use with-current-buffer.
+ (completion-setup-function): Move code in loop to remove redundancy.
+ (minibuffer-local-must-match-map): Don't add bindings that duplicate
+ those inherited from minibuffer-local-completion-map.
+
+ * savehist.el (savehist-mode) <defcustom>:
+ Use custom-set-minor-mode if available.
+ (savehist-mode) <defun>: Run the minor mode hook, set the custom state
+ and emit a message if applicable.
+
+2005-11-01 Hrvoje Niksic <hniksic@xemacs.org>
+
+ * savehist.el: Sync up to version 19.
+ (savehist-mode): New minor mode.
+ (savehist-file): Use ~/.emacs.d or ~/.xemacs if available.
+ (savehist-length): Remove (use history-length instead).
+ (savehist-file-modes): Rename from savehist-modes.
+ (savehist-save-hook, savehist-loaded): New vars.
+ (savehist-load): Use savehist-mode. Try to smooth up transition from
+ old format to new format.
+ (savehist-install): Allow savehist-autosave-interval to be nil.
+ (savehist-save): Run the new hook. Be more careful to only trim the
+ history variables.
+ (savehist-trim-history): New fun. Replaces savehist-process-for-saving.
+ (savehist-printable): Print into a buffer rather than char-by-char.
+
+2005-11-01 John Wiegley <johnw@newartisans.com>
+
+ * iswitchb.el (iswitchb-define-mode-map): Re-enable the
+ toggle-ignore keybinding (C-a). The author said it had been
+ disabled much earlier due to a possible incompatibility, but after
+ many months of usage I have encountered no problems (and it is a
+ rather useful option, especially for switching to " *temp*").
+
+ * net/eudcb-mab.el (eudc-mab-query-internal): Add backend
+ support for OS/X's AddressBook, by calling out to the open source
+ program "contacts" (installable through Fink).
+
+ * net/eudc.el (eudc-expand-inline): If the
+ `eudc-multiple-match-handling-method' is set to `all', delete the
+ query string before inserting the query result.
+
+ * eshell/em-ls.el (eshell-do-ls): Add no-op support for --dired
+ flag, to prevent Eshell from using the system ls when
+ `eshell-ls-insert-directory' is in used.
+ (eshell-ls-insert-directory): Disable font-lock in directory
+ buffer so that Eshell's own fontification is seen. This broke
+ recently due to changes in font-lock, so this goes back to version
+ 21 behavior.
+
+2005-11-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-use-inferior-io-buffer): New function.
+ (menu, toggle-gdb-use-inferior-io-buffer): Get rid of defadvice.
+ (gdb-many-windows): Doc fix.
+
+2005-10-31 Romain Francoise <romain@orebokech.com>
+
+ * help-fns.el (describe-simplify-lib-file-name): Add autoload cookie.
+
+2005-10-31 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * loadup.el: Load emacs-lisp/syntax, font-lock and jit-lock so
+ that global-font-lock-mode can be enabled by default.
+
+ * font-lock.el (font-lock-keywords, font-lock-mode-internal)
+ (font-lock-add-keywords, font-lock-remove-keywords)
+ (font-lock-fontify-buffer): Remove autoload cookies.
+
+ * jit-lock.el (jit-lock-register): Likewise.
+
+ * emacs-lisp/syntax.el (syntax-ppss): Likewise.
+
+2005-10-31 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-many-windows): Leave window configuration
+ intact if there is no gud-comint-buffer.
+
+2005-10-31 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/gud.el (gud-filter): Use comint-update-fence to delete
+ old prompt comint-prompt-read-only is t and GDB commands are
+ issued from tool bar etc.
+
+2005-10-31 Masatake YAMATO <jet@gyve.org>
+
+ * vc.el (vc-directory-exclusion-list): Add "{arch}".
+
+2005-10-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * thumbs.el (thumbs-thumbsdir): Default to ~/.emacs.d/thumbs.
+ (thumbs-thumbsdir): Make .emacs.d if it does not exist.
+
+2005-10-30 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-chunksize): Escape parentheses in docstring
+ starting at beginning of line. Fontification is messed up when
+ `open-paren-in-column-0-is-defun-start' set to t.
+ Reported by John Paul Wallington <jpw@pobox.com>.
+
+2005-10-30 Luc Teirlinck <teirllm@auburn.edu>
+
+ * comint.el (comint-send-input): Call `comint-update-fence' when
+ `comint-process-echoes' and `comint-prompt-read-only' are both
+ non-nil, to avoid leftover read-only newline.
+
+2005-10-30 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Detect when WORD can't be checked properly because
+ flyspell-get-word finds just part of it, and move on.
+
+ * textmodes/ispell.el (ispell-dictionary-alist-5): Add . as
+ boundarychar for Polish.
+ (ispell-dictionary-alist-4): Add . as boundarychar for Italian.
+ (ispell-dictionary-alist-3): Add . and @ as boundarychars for French.
+
+2005-10-31 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-tooltip-print-1): Fix regexp.
+ (gdb-registers-font-lock-keywords): Delete.
+ (gdb-registers-mode): Don't fontify.
+ (gdb-info-registers-custom): Use text properties instead as, in
+ future, changed register values will use font-lock-warning-face.
+ (gdb-local-font-lock-keywords): Rename to...
+ (gdb-locals-font-lock-keywords): ...for consistency.
+
+2005-10-30 Andre Spiegel <spiegel@gnu.org>
+
+ * vc.el (vc-switch-backend): Better error message if the buffer is
+ not visiting a file under version control.
+
+ * vc-cvs.el (vc-cvs-delete-file): Commit the file after removing it.
+
+2005-10-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * startup.el (command-line): Use ~/.emacs.d/init.el instead of
+ ~/.emacs.d/.emacs.
+
+2005-10-29 Richard M. Stallman <rms@gnu.org>
+
+ * replace.el (occur-mode-mouse-goto): Always go to other window.
+ (occur-mode-goto-occurrence): Always switch in same window.
+
+ * simple.el (undo): Display message at end, not at start.
+
+ * emacs-lisp/timer.el (timer-activate, timer-activate-when-idle):
+ New arg REUSE-CELL.
+ (cancel-timer-internal): New function.
+ (timer-event-handler): Use cancel-timer-internal,
+ and pass the cell it returns to timer-activate...
+
+ * jit-lock.el (jit-lock-function, jit-lock-stealth-fontify)
+ (jit-lock-deferred-fontify, jit-lock-context-fontify)
+ (jit-lock-after-change): Test memory-full.
+
+2005-10-29 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right
+ part of the decoded armor to find the key-identifier.
+ (pgg-gpg-lookup-key-owner): New function to return the
+ human-readable identifier of a key owner.
+ (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the
+ key itself.
+ (pgg-gpg-decrypt-region): Prompt with the key owner (rather than
+ the key value) if we have a key and can match it against a secret
+ key. Also, added a note pointing out fact that the prompt only
+ indicates the first matching key.
+
+ * pgg.el (pgg-decrypt): Passing along PASSPHRASE in call to
+ pgg-decrypt-region.
+ (pgg-pending-timers): A new hash for tracking the passphrase cache
+ timers, so that new ones supercede old ones.
+ (pgg-add-passphrase-to-cache): Rename from
+ `pgg-add-passphrase-cache' to reduce confusion (all callers
+ changed). Modified to cancel old timers when new ones are added.
+ (pgg-remove-passphrase-from-cache): Rename from
+ `pgg-remove-passphrase-cache' to reduce confusion (all callers
+ changed). Modified to cancel old timers when their keys are
+ removed from the cache.
+ (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in
+ XEmacs, an indirection to delete-itimer.
+ (pgg-read-passphrase-from-cache, pgg-read-passphrase):
+ Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so
+ users can only check cache without risk of prompting. Correct bug in
+ notruncate behavior.
+ (pgg-read-passphrase-from-cache, pgg-read-passphrase)
+ (pgg-add-passphrase-cache, pgg-remove-passphrase-cache):
+ Add informative docstrings.
+ (pgg-decrypt): Convey provided passphrase in subordinate call to
+ pgg-decrypt-region.
+
+ * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region)
+ (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region)
+ (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional
+ `passphrase' argument, so the passphrase can be managed externally
+ and then passed in to the system.
+
+ * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache)
+ (pgg-remove-passphrase-cache): Add optional NOTRUNCATE argument,
+ so the passphrase cache can be used reliably with identifiers
+ besides a pgp packet's key id.
+
+ * pgg-gpg.el (pgg-pgp-encrypt-region)
+ (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
+ (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
+ (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+
+ * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional
+ `notruncate' argument, so the passphrase cache can be used
+ reliably with identifiers besides a pgp packet's key id.
+
+2005-10-29 Sascha Wilde <swilde@sha-bang.de>
+
+ * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for
+ symmetric encryption.
+ (pgg-gpg-symmetric-key-p): New function to check for an symmetric
+ encrypted session key.
+ (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted
+ message ask for the passphrase in a proper way.
+
+ * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region):
+ New user commands for symmetric encryption.
+
+2005-10-29 Roland Winkler <roland.winkler@physik.uni-erlangen.de>
+
+ * textmodes/conf-mode.el (conf-assignment-sign)
+ (conf-assignment-regexp): Fix docstrings.
+ (conf-mode-initialize): New function.
+ (conf-mode): Remove optional args. Use delay-mode-hooks to
+ recognize recursive calls.
+ (conf-unix-mode, conf-windows-mode, conf-javaprop-mode)
+ (conf-space-mode, conf-colon-mode, conf-ppd-mode)
+ (conf-xdefaults-mode): Use define-derived-mode and
+ conf-mode-initialize.
+
+2005-10-29 Romain Francoise <romain@orebokech.com>
+
+ * help-fns.el (describe-simplify-lib-file-name): Fix regexp.
+
+2005-10-29 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right
+ part of the decoded armor to find the key-identifier.
+ (pgg-gpg-lookup-key-owner): New function to return the
+ human-readable identifier of a key owner.
+ (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the
+ key itself.
+ (pgg-gpg-decrypt-region): Prompt with the key owner (rather than
+ the key value) if we have a key and can match it against a secret
+ key. Also, added a note pointing out fact that the prompt only
+ indicates the first matching key.
+
+ * pgg.el (pgg-decrypt): Passing along PASSPHRASE in call to
+ pgg-decrypt-region.
+ (pgg-pending-timers): A new hash for tracking the passphrase cache
+ timers, so that new ones supercede old ones.
+ (pgg-add-passphrase-to-cache): Rename from
+ `pgg-add-passphrase-cache' to reduce confusion (all callers
+ changed). Modified to cancel old timers when new ones are added.
+ (pgg-remove-passphrase-from-cache): Rename from
+ `pgg-remove-passphrase-cache' to reduce confusion (all callers
+ changed). Modified to cancel old timers when their keys are
+ removed from the cache.
+ (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in
+ XEmacs, an indirection to delete-itimer.
+ (pgg-read-passphrase-from-cache, pgg-read-passphrase):
+ Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so
+ users can only check cache without risk of prompting. Correct bug in
+ notruncate behavior.
+ (pgg-read-passphrase-from-cache, pgg-read-passphrase)
+ (pgg-add-passphrase-cache, pgg-remove-passphrase-cache):
+ Add informative docstrings.
+ (pgg-decrypt): Convey provided passphrase in subordinate call to
+ pgg-decrypt-region.
+
+2005-10-20 Ken Manheimer <ken.manheimer+emacs@gmail.com>
+
+ * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region)
+ (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region)
+ (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional
+ `passphrase' argument, so the passphrase can be managed externally
+ and then passed in to the system.
+
+ * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache)
+ (pgg-remove-passphrase-cache): Add optional NOTRUNCATE argument,
+ so the passphrase cache can be used reliably with identifiers
+ besides a pgp packet's key id.
+
+ * pgg-gpg.el (pgg-pgp-encrypt-region)
+ (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
+ (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
+ (pgg-pgp-sign-region, pgg-pgp-sign): Add optional PASSPHRASE
+ argument to all these routines, so the passphrase can be managed
+ externally and passed in to the system.
+
+ * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional
+ `notruncate' argument, so the passphrase cache can be used
+ reliably with identifiers besides a pgp packet's key id.
+
+2005-10-29 Sascha Wilde <swilde@sha-bang.de>
+
+ * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for
+ symmetric encryption.
+ (pgg-gpg-symmetric-key-p): New function to check for an symmetric
+ encrypted session key.
+ (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted
+ message ask for the passphrase in a proper way.
+
+ * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region):
+ New user commands for symmetric encryption.
+
+2005-10-28 Bill Wohler <wohler@newt.com>
+
+ * help-mode.el (help-url): New button type. Calls browse-url.
+ (help-xref-url-regexp): New regexp to recognize URLs in docstring.
+ Similar to Info nodes: URL `url'.
+ (help-make-xrefs): Create help-url buttons for
+ help-xref-url-regexp matches.
+
+2005-10-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * tool-bar.el (tool-bar-add-item-from-menu)
+ (tool-bar-local-item-from-menu): Fix doc strings.
+
+2005-10-28 Romain Francoise <romain@orebokech.com>
+
+ * ldefs-boot.el: Update.
+
+ * subr.el (locate-library): Move from help-fns.el.
+ * help-fns.el (locate-library): Move to subr.el.
+
+2005-10-28 Richard M. Stallman <rms@gnu.org>
+
+ * net/tramp.el (tramp-completion-mode): defvar moved up.
+
+ * emacs-lisp/easymenu.el (easy-menu-change): Doc fix.
+
+ * tool-bar.el (tool-bar-mode): Delete autoload cookie.
+
+ * files.el (find-file-noselect): Use %d to format large file size.
+
+ * bindings.el (mode-line-format): Add %e.
+
+ * loadup.el ("facemenu"): Load unconditionally.
+ ("image", "international/fontset", "dnd", "mwheel", "tool-bar"):
+ ("x-dnd"): Load, when appropriate.
+
+ * startup.el (command-line): Call before-init-hook earlier.
+ Warn about some bad characters in -u user name.
+
+ * textmodes/flyspell.el (flyspell-large-region): Pass -t if Tex file.
+ (flyspell-external-point-words): Error if misspelled word is not found.
+ Set flyspell-large-region-beg at end of word.
+
+2005-10-28 Andreas Schwab <schwab@suse.de>
+
+ * view.el (View-revert-buffer-scroll-page-forward):
+ Use view-page-size-default.
+
+2005-10-28 Juri Linkov <juri@jurta.org>
+
+ * international/quail.el (quail-get-current-str): Translate last
+ raw character for deterministic input methods.
+
+2005-10-27 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-ext.el: Add functions to autoloads.
+ (math-identity-matrix-p, math-ident-row-p): New functions.
+
+ * calc/calc-arith.el (calc-mul-symb-fancy): Add checks for
+ multiplication by an identity matrix; don't turn multiplication by
+ an inverse matrix into division.
+ (math-div-symbol-fancy): Replace division by matrices with
+ multiplication by inverse.
+
+ * calc/calc-misc.el (calcFunc-inv): Check for symbolic matrices.
+
+ * calc/calc-alg.el (calcFunc-writeoutpower, math-write-out-power)
+ (calc-writeoutpower): New functions.
+
+2005-10-27 Romain Francoise <romain@orebokech.com>
+
+ * replace.el (occur-engine): Include colon in mouse-face highlight.
+
+ * dired-x.el: Change Maintainer field.
+
+2005-10-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-mode): Bind after-change-functions to
+ nil during initial decoding and final encoding.
+
+2005-10-26 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-emulate-terminal, term-handle-colors-array)
+ (term-handle-ansi-escape): Specify the terminfo capabilities
+ implemented.
+
+2005-10-26 Richard M. Stallman <rms@gnu.org>
+
+ * info.el (Info-fontify-node): Fix detection of sentence-break
+ before *Note.
+
+2005-10-26 Romain Francoise <romain@orebokech.com>
+
+ * smerge-mode.el: Add `tools' to file keywords.
+
+2005-10-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Only display gud-until icon
+ when the fringe is not available.
+
+ * progmodes/gdb-ui.el (def-gdb-auto-updated-buffer)
+ (def-gdb-auto-update-trigger): Simplify construction.
+ (gdb-locals-buffer): Use def-gdb-auto-update-trigger instead of
+ def-gdb-auto-updated-buffer as gdb-info-locals-handler is
+ defined explicitly.
+ (gdb-assembler-buffer): Use def-gdb-auto-update-handler instead of
+ def-gdb-auto-updated-buffer as gdb-invalidate-assembler is
+ defined explicitly.
+ (gdb-info-locals-custom): Remove as it's a no-op.
+
+2005-10-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-mode): Remove narrowing before
+ performing the initial decoding or final encoding.
+
+2005-10-25 Romain Francoise <romain@orebokech.com>
+
+ * emacs-lisp/find-func.el (find-library-name): Also strip
+ extension if library name ends in .el, to take advantage of
+ `find-library-suffixes'.
+
+2005-10-25 Richard M. Stallman <rms@gnu.org>
+
+ * menu-bar.el (menu-bar-help-menu): Say which kind of therapist.
+
+2005-10-25 Juri Linkov <juri@jurta.org>
+
+ * textmodes/texinfo.el (texinfo-mode): Change charset of one
+ quotation mark from [mule-unicode-0100-24ff] to [japanese-jisx0208].
+
+2005-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * play/blackbox.el (blackbox-mode-map): Move init into declaration.
+ (blackbox-redefine-key): Add argument `map'.
+
+ * jit-lock.el (jit-lock-fontify-now): Be careful not to skip multiline
+ regions when moving the jit-lock-context-unfontify-pos boundary.
+
+2005-10-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * net/browse-url.el (browse-url-of-buffer): Add ".html" to filename.
+
+2005-10-25 Masatake YAMATO <jet@gyve.org>
+
+ * dired-x.el (dired-virtual): Don't use `dired-insert-headerline'.
+
+2005-10-25 Micha,Ak(Bl Cadilhac <michael.cadilhac-@t-lrde.epita.fr>
+
+ * play/blackbox.el (blackbox-redefine-key): New function.
+ (blackbox-mode-map): Use it to remap existing bindings for cursor
+ motion instead of binding literal keys.
+
+2005-10-25 Glenn Morris <rgm@gnu.org>
+
+ * calendar/diary-lib.el (diary-list-entries): Prevent infloop when
+ diary does not end in a newline. Do not assume a blank line at
+ the start of the diary file.
+
+2005-10-25 Kenichi Handa <handa@m17n.org>
+
+ * international/quail.el (quail-translate-key): If the input
+ method is deterministic and failed to handle the last key, restart
+ the key handling loop from an appropriate key.
+
+2005-10-25 Michael Albinus <michael.albinus@gmx.de>
+
+ * vc.el (vc-dired-mode): Extend comment for binding of
+ `directory-listing-before-filename-regexp'.
+
+2005-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/texinfo.el (texinfo-mode):
+ * textmodes/paragraphs.el (sentence-end-base): Use real chars, so as
+ not to unnecessarily expose emacs-mule's internal char codes.
+
+2005-10-25 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Correct help-echo.
+ Display hand pointer and help-echo on disabled icon too.
+ (gdb-mouse-until): New function.
+ (gdb-ann3): Bind it to mouse-2 and drag-mouse-1 in left fringe.
+
+2005-10-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * menu-bar.el (menu-bar-help-menu): Rename "psychiatrist", in line
+ with 2005-10-23 change to doctor.el.
+
+ * finder.el (finder-mode-map): Add follow-link binding.
+
+2005-10-25 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/gdb-ui.el (gdb-ann3): Bind mouse-3 in left fringe
+ to gdb-mouse-toggle-breakpoint-fringe.
+ (gdb-mouse-toggle-breakpoint-margin): Rename from
+ gdb-mouse-toggle-breakpoint. Fix doc.
+ (gdb-mouse-toggle-breakpoint-fringe): New defun.
+ (gdb-put-string): Add optional SPROPS arg. Add props to string.
+ (gdb-put-breakpoint-icon): Add gdb-bptno and gdb-enabled
+ string properties also for fringe breakpoint bitmaps.
+
+2005-10-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-start-icalendar-file): Fix format form.
+
+2005-10-25 Masatake YAMATO <jet@gyve.org>
+
+ * simple.el (completion-common-substring):
+ Use `completion-common-substring' prior to `completion-base-size'.
+
+2005-10-24 Hrvoje Niksic <hniksic@xemacs.org>
+
+ * savehist.el: Require CL while compiling.
+ (savehist-history-variables): Remove.
+ (savehist-save-minibuffer-history, savehist-additional-variables)
+ (savehist-minibuffer-history-variables): New vars.
+ (savehist-save): Use them.
+ (savehist-uninstall, savehist-minibuffer-hook): New funs.
+ (savehist-install): New fun, extracted from savehist-load.
+ (savehist-load): Use them.
+
+2005-10-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp-mode.el (easy-mmode-define-global-mode): Don't add
+ a dummy doc-string-elt property.
+ (defalias, defvaralias, define-category): Add a docstring property.
+
+ * image.el (defimage):
+ * widget.el (define-widget):
+ * custom.el (defface, defcustom): Add `doc-string' declaration.
+
+ * emacs-lisp/advice.el (ad-make-advised-definition): Fix arg-order.
+ (defadvice): Add `doc-string' declaration.
+
+ * emacs-lisp/byte-run.el (macro-declaration-function):
+ Handle `doc-string' declarations.
+ (define-obsolete-function-alias, define-obsolete-variable-alias):
+ Add `doc-string' declaration.
+
+2005-10-24 Kenichi Handa <handa@m17n.org>
+
+ * international/utf-7.el (utf-7): Add autoload cookie.
+
+ * term/x-win.el: Register more Cyrillic characters in x-keysym-table.
+
+2005-10-24 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (autoloads): Use "." instead of $(lisp) in the
+ list of directories passed to batch-update-autoloads. Add "." to
+ the list of the echoed directories.
+
+ * pgg-def.el:
+ * pgg-gpg.el:
+ * pgg-parse.el:
+ * pgg-pgp.el:
+ * pgg-pgp5.el:
+ * pgg.el: Moved here from the gnus subdirectory.
+
+2005-10-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-filter): Bind inhibit-read-only to t
+ in case comint-prompt-read-only is set to t.
+
+ * progmodes/gdb-ui.el (gdb-send): Bind inhibit-read-only to t
+ in case comint-prompt-read-only is set to t.
+
+2005-10-24 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar-version): Increase to 0.13.
+ Now a string.
+ (icalendar-import-format): Handle CLASS, STATUS, URL.
+ Rename `subject' to `summary'.
+ (icalendar-import-format-summary): Rename from
+ `icalendar-import-format-subject'.
+ (icalendar-import-format-url, icalendar-import-format-status)
+ (icalendar-import-format-class): New variables.
+ (icalendar--rris): Take variable argument list.
+ (icalendar--datestring-to-isodate): Remove unnecessary
+ calendar-style check when converting dates with explicit month names.
+ (icalendar-export-region): Change return type of conversion
+ subroutines. Bury current buffer unless error occurred.
+ (icalendar--convert-to-ical)
+ (icalendar--parse-summary-and-rest): New functions.
+ (icalendar--convert-ordinary-to-ical)
+ (icalendar--convert-weekly-to-ical)
+ (icalendar--convert-yearly-to-ical)
+ (icalendar--convert-block-to-ical)
+ (icalendar--convert-cyclic-to-ical)
+ (icalendar--convert-anniversary-to-ical): Change return type.
+ Strip trailing blanks from subject.
+ (icalendar--convert-sexp-to-ical): Change return type.
+ Strip trailing blanks from subject. Handle simple sexp
+ entries as generated by icalendar.el.
+ (icalendar--convert-float-to-ical)
+ (icalendar--convert-date-to-ical): Strip trailing blanks from subject.
+ (icalendar-import-file): Doc fix.
+ (icalendar--format-ical-event): Handle CLASS, STATUS, URL.
+ Correct call to icalendar--rris.
+ (icalendar--convert-ical-to-diary): Doc fix. Rename `subject' to
+ `summary'.
+ (icalendar--add-diary-entry): Rename `subject' to `summary'.
+
+2005-10-24 Romain Francoise <romain@orebokech.com>
+
+ * server.el (server-sentinel): Set query-on-exit flag to nil on
+ new client processes (it isn't inherited from the server process).
+
+ * replace.el (occur-engine): Rearrange text properties.
+
+2005-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (debugger-make-xrefs): Don't assume
+ case-fold-search is nil.
+ (debug-help-follow): Use help-xref-interned directly.
+
+2005-10-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * thumbs.el (thumbs-image-type): Add .pbm.
+
+2005-10-23 Richard M. Stallman <rms@gnu.org>
+
+ * faces.el (inhibit-face-set-after-frame-default): New variable.
+ (set-face-attribute): Bind it.
+ (face-set-after-frame-default): Test it.
+
+ * help-fns.el (describe-simplify-lib-file-name): New function.
+ (describe-function-1, describe-variable): Use it.
+
+ * faces.el (describe-face): Use describe-simplify-lib-file-name.
+
+ * tooltip.el (tooltip-x-offset, tooltip-y-offset): Change defaults.
+ Eliminate nil as possible value.
+ (tooltip-hide-delay): Reduce internal-border-width.
+
+ * menu-bar.el (menu-bar-file-menu) <dired>: Change help-echo string.
+ (menu-bar-file-menu) <new-file>: Likewise.
+
+ * simple.el (line-move-finish): Ignore fields computing LINE-END.
+
+ * international/mule.el (load-with-code-conversion):
+ Pass full file name to `eval-buffer' unless preloading.
+
+ * textmodes/flyspell.el (flyspell-large-region):
+ Call ispell-check-version.
+
+ * textmodes/ispell.el (ispell-local-dictionary-overridden):
+ Fix the make-variable-buffer-local call that was supposed
+ to be for this variable.
+ (ispell-aspell-supports-utf8): Doc fix.
+ (ispell-find-aspell-dictionaries): Preserve elements of
+ ispell-dictionary-alist for dictionaries that aspell doesn't report.
+ (ispell-aspell-find-dictionary): Return nil on error.
+
+ * play/doctor.el (doctor-doc): Don't say "psychiatrist".
+ (doctor-symptoms): Likewise.
+
+ * add-log.el (add-log-current-defun): Clean up handling of DEFUNs.
+
+2005-10-23 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (custom-button, custom-button-pressed): New vars.
+ (custom-raised-buttons): Add :set spec.
+ (custom-button-unraised, custom-button-pressed-unraised):
+ New faces, so that custom-raised-buttons actually does something.
+ (custom-mode): Use custom-button and custom-button-pressed.
+
+ * wid-edit.el (widget-specify-button): Don't ignore
+ widget-mouse-face on graphic terminals.
+ (widget-move-and-invoke): Cleanup.
+
+2005-10-23 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * whitespace.el (whitespace-cleanup): Doc fix.
+
+2005-10-23 Romain Francoise <romain@orebokech.com>
+
+ * emulation/viper.el (viper-set-hooks): Quote forms passed to
+ `eval-after-load' to avoid evaluating their result.
+
+2005-10-23 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.el (directory-listing-before-filename-regexp):
+ New defvar. Replaces `dired-move-to-filename-regexp' from dired.el.
+
+ * dired.el (dired-move-to-filename-regexp): Remove.
+ All occurrences replaced by `directory-listing-before-filename-regexp'.
+
+ * dired-x.el, locate.el, vc.el:
+ Replace `dired-move-to-filename-regexp' by
+ `directory-listing-before-filename-regexp'. In vc.el it is
+ overwritten locally; maybe this can be handled in files.el too.
+
+ * net/ange-ftp.el (ange-ftp-date-regexp): Remove. All occurrences
+ replaced by `directory-listing-before-filename-regexp'.
+
+2005-10-23 Andreas Schwab <schwab@suse.de>
+
+ * font-lock.el (lisp-font-lock-keywords-2): Add eval-at-startup
+ and eval-next-after-load.
+
+2005-10-23 MIYOSHI Masanori <miyoshi@meadowy.org> (tiny change)
+
+ * mouse.el (mouse-drag-region): If the *Messages* buffer doesn't
+ exist, create it.
+
+2005-10-23 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Remove autoloads for mailcrypt and crypt++.
+ Require pgg, pgg-gpg during compilation.
+ (allout-version): Increment version number to 2.1, and use a literal
+ rather than RCS Id.
+ (allout-default-encryption-scheme): Remove.
+ (allout-passphrase-verifier-handling)
+ (allout-passphrase-verifier-string)
+ (allout-file-passphrase-verifier-string)
+ (allout-passphrase-hint-string): Rename -key- to -passphrase-.
+ (allout-passphrase-hint-handling): Rename and simplify.
+ (allout-init): Use `find-file-hook' if available, otherwise
+ `find-file-hooks'.
+ (allout-mode): Use `write-file-functions' if available, otherwise
+ `local-write-file-hooks' and, instead of making auto-save-hook
+ buffer local, make the write-file-hook activity contingent to
+ allout-mode.
+ (allout-mode): Use key-binding substitution in the docstring.
+ (allout-kill-line): Spell-out kill ring data structure mutation
+ instead of using byte-compiler-complaint-provoking `pop'.
+ (allout-insert-listified): Use `insert' rather than `insert-string'
+ (allout-toggle-current-subtree-encryption): Update docstring, adjust
+ to new gpp-based encryption, use new `allout-encrypted-topic-p'.
+ (allout-encrypt-string): Totally revamped vis new underlying
+ encryption facilities.
+ (allout-mc-activate-passwd): Remove.
+ (allout-obtain-passphrase): New, more or less replaces
+ allout-mc-activate-passwd.
+ (allout-encrypted-key-info): More or less replaces
+ allout-encrypted-text-type.
+ (outlineify-sticky, outlinify-sticky): Add autoload cookie.
+ (my-mark-marker): Use `(featurep 'xemacs)'.
+
+2005-10-23 Lars Hansen <larsh@soem.dk>
+
+ * emacs-lisp/bytecomp.el (byte-compile-lambda): New arg add-lambda.
+ (byte-compile-file-form-defmumble, byte-compile-defun)
+ (byte-compile-defmacro): Use it.
+ (byte-compile-form): Don't call byte-compile-set-symbol-position
+ when a byte-compile handler is called.
+
+2005-10-22 Romain Francoise <romain@orebokech.com>
+
+ * savehist.el (savehist-history-variables): Add `grep-find-history'.
+
+ * subr.el (eval-after-load): Convert library name to an absolute
+ file name using locate-library, since load-history no longer has
+ library names in it.
+
+2005-10-22 Richard M. Stallman <rms@gnu.org>
+
+ * files.el (make-temp-file): Move from subr.el.
+ * subr.el (make-temp-file): Move to files.el.
+
+ * window.el (get-buffer-window-list): Move from subr.el.
+ * subr.el (get-buffer-window-list): Move to window.el.
+
+ * image.el (image-load-path): Use eval-at-startup to initialize.
+
+ * subr.el (eval-at-startup): New macro.
+
+ * subr.el: Much rearrangement of functions and division
+ into pages. No code changes.
+
+2005-10-22 Kenichi Handa <handa@m17n.org>
+
+ * tar-mode.el (tar-extract): Be sure to call
+ find-operation-coding-system if set-auto-coding doesn't find a
+ coding system.
+
+2005-10-22 Kim F. Storm <storm@cua.dk>
+
+ * image.el (image-type-header-regexps): Rename from image-type-regexps.
+ Change users.
+ (image-type-file-name-regexps): New defconst.
+ (image-type-from-data): Simplify loop.
+ (image-type-from-buffer): New defun.
+ (image-type-from-file-header): Use it instead of image-type-from-data.
+ Use image-search-load-path instead of only looking in data-directory.
+ (image-type-from-file-name): New defun.
+ (image-search-load-path): Change `pathname' to `filename'.
+ Make PATH arg optional, default to image-load-path.
+
+2005-10-21 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/texinfo.el (texinfo-mode): Set sentence-end-base.
+
+ * textmodes/paragraphs.el (sentence-end-base): New variable.
+ (sentence-end): Use sentence-end-base.
+
+2005-10-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-default-fontify-region): Check the multiline
+ property independently from the font-lock-multiline variable.
+
+2005-10-21 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/find-func.el (find-library-name): Doc fix.
+
+ * startup.el (command-line): Convert library names
+ in `load-history' to absolute file names.
+
+ * subr.el (symbol-file): Doc fix.
+
+ * loadhist.el (file-loadhist-lookup): Call locate-library
+ instead of find-library-name. Don't try converting
+ abs file names to library names, since load-history no longer
+ has library names in it.
+ (file-dependents, file-provides, file-requires): Doc fixes.
+
+2005-10-21 Juri Linkov <juri@jurta.org>
+
+ * progmodes/etags.el (tags-table-mode): New function.
+ (tags-verify-table): Replace initialize-new-tags-table with
+ tags-table-mode.
+
+ * desktop.el (desktop-buffers-not-to-save): Remove TAGS from the
+ default value.
+ (desktop-modes-not-to-save): Add tags-table-mode to the
+ default value.
+
+ * info.el (Info-index-next): Add total number of index
+ alternatives to the message.
+
+ * textmodes/fill.el (fill-nobreak-p): Fix first two rules to skip
+ backward only space (instead of space and period) before looking
+ at sentence end.
+
+ * simple.el (set-variable): Use user-variable-p instead of symbolp.
+ Add the old variable value as 4th default-value arg of read-string.
+
+2005-10-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * cus-face.el (custom-declare-face): Make face from X resources
+ also on Mac.
+
+ * disp-table.el (standard-display-g1, standard-display-graphic):
+ Refuse to use string glyphs also on Mac.
+ (standard-display-european): Don't set terminal coding system also
+ on Mac.
+
+ * frame.el (display-screens): Use x-display-screens also on Mac.
+
+2005-10-21 Romain Francoise <romain@orebokech.com>
+
+ * net/rcirc.el: Now part of GNU Emacs. Update FSF's address.
+
+2005-10-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-font-lock-syntactic-keywords): Make $@
+ and $? into sexps.
+
+ * font-lock.el (font-lock-compile-keywords): Add a help-echo to the
+ warning face on open-paren-in-column-0.
+
+ * emacs-lisp/syntax.el (syntax-ppss-flush-cache): Fix corner
+ boundary case. Fix typo.
+ Suggested by Martin Rudalics <rudalics@gmx.at>.
+
+2005-10-21 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-combined-agenda-icalendar-file)
+ (org-icalendar-include-todo, org-icalendar-combined-name): New options.
+ (org-export-icalendar-this-file)
+ (org-export-icalendar-all-agenda-files)
+ (org-export-icalendar-combine-agenda-files): New commands.
+ (org-export-icalendar, org-print-icalendar-entries)
+ (org-start-icalendar-file, org-finish-icalendar-file)
+ (org-ical-ts-to-string): New functions.
+ (org-read-date, org-goto-calendar)
+ (org-agenda-goto-calendar): Inhibit displaying diary entries by
+ call to `calendar'.
+ (orgtbl-setup): Remove the :keys arguments from the menu description.
+ (org-after-save-iCalendar-file-hook): New variable.
+
+2005-10-21 Kenichi Handa <handa@m17n.org>
+
+ * language/vietnamese.el (tcvn-5712): Make it an alias of
+ vietnamese-tcvn coding-system.
+
+2005-10-20 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/ange-ftp.el (ange-ftp-date-regexp): Handle also the case no
+ group id is given.
+
+2005-10-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-escaped-line-re): New var.
+ (sh-here-doc-open-re, sh-font-lock-close-heredoc): Use it.
+ (sh-font-lock-open-heredoc): Try to properly handle heredoc starters
+ whose line is either continued or ends with a comment.
+
+2005-10-20 Romain Francoise <romain@orebokech.com>
+
+ * net/rcirc.el (with-rcirc-process-buffer): Move above its first user.
+
+ * replace.el (occur-engine): Add follow-link property.
+
+ * font-core.el (font-lock-mode): Doc fix.
+
+2005-10-20 Richard M. Stallman <rms@gnu.org>
+
+ * net/rcirc.el: New file.
+
+2005-10-20 Bryan Henderson <bryanh@giraffe-data.com> (tiny change)
+
+ * term.el (term-term-name): Initialize to "eterm-color".
+
+2005-10-20 Ken Manheimer <ken.manheimer@gmail.com>
+
+ * allout.el: Add autoloads of crypt++ and mailcrypt routines, all
+ for encryption functionality.
+ Move allout customization subgroup from `editing' to `outlines' group.
+ Fix commentary keywords to legitimate ones.
+ Update author info (using my current email address, obscurified).
+ (allout-encrypt-string, allout-encryption-produce-work-buffer)
+ (allout-encrypted-topic-p, allout-encrypted-text-type)
+ (allout-mc-activate-passwd, allout-create-encryption-key-verifier)
+ (allout-situate-encryption-key-verifier)
+ (allout-get-encryption-key-verifier, allout-verify-key)
+ (allout-next-topic-pending-encryption)
+ (allout-encrypt-decrypted, allout-encrypted-type-prefix): New funcs.
+ (outline-topic-encryption-bullet, outline-default-encryption-scheme)
+ (outline-key-verifier-handling, outline-key-hint-handling)
+ (outline-encrypt-unencrypted-on-saves): New defcustoms.
+ (allout-file-key-verifier-string, allout-encryption-scheme)
+ (allout-key-verifier-string, allout-key-hint-string)
+ (allout-after-save-decrypt): New variables.
+ (allout-write-file-hook-handler, allout-auto-save-hook-handler)
+ (allout-after-saves-handler): New hook functions.
+ (allout-post-command-business): Do allout-after-save-decrypt.
+ (allout-enable-file-variable-adjustment): Custom var to enable
+ mechanism for adding and adjusting settings of Emacs file variables.
+ (allout-adjust-file-variable, allout-file-vars-section-data):
+ New functions, implement the mechanism.
+ (outlineify-sticky): Use the file vars mechanism.
+ (allout-inhibit-protection, allout-during-write-cue)
+ (allout-override-protect, allout-before-change-protect): Remove.
+ (allout-flag-region, allout-open-topic): Adjust read-only text.
+ (allout-open-line-not-read-only): Add to facilitate read-only
+ text based protection.
+ (allout-kill-line): Revise to adjust read-only text, clue the
+ user about the inhibition.
+ (allout-unprotected): Use unwind-protect.
+ (allout-shift-in, allout-shift-out): Disallow manually shifting a
+ topic deeper than the offspring depth of the previous topic -
+ avoiding confusing "containment discontinuities".
+ (allout-reindent-bodies): Fix retention of body relative hanging
+ indent during promotion of collapsed bodies.
+ (allout-open-topic): Make it easy to open new topic with same
+ bullet as current topic - topic creation functions provided with
+ any universal argument provokes now prompt for bullet, defaulting
+ to the bullet of the previous topic.
+ (allout-plain-bullets-string, allout-distinctive-bullets-string):
+ Plain bullet alternates `.' period and `,' comma only. All other
+ bullets are relegated to special status (but customizable).
+ (allout-end-of-entry): Rename from allout-end-of-current-entry
+ since it actually operates w.r.t. most immediately containing
+ entry, visible or not.
+ (allout-hide-current-entry, allout-show-current-entry): Use the
+ revised version.
+ (allout-old-expose-topic): Solidify deprecation.
+ (allout-end-of-subtree): Add so we can span concealed as well
+ as visible topics.
+ (allout-end-of-current-subtree): Use `allout-end-of-subtree'.
+ (allout-end-of-current-heading): Tweak to just respect the first line.
+ (allout-get-body-text): Add.
+ (allout-ascend-to-depth, allout-ascend): Position at end of prefix
+ when invoked interactively.
+ (allout-up-current-level): Use `interactive-p'.
+ (allout-mode, allout-init): Miscellaneous docstring and
+ operational refinements, as well as hookups of new encryption stuff.
+ (allout-beginning-of-current-entry): Now works as advertised.
+ (allout-end-of-current-entry): Remove of superfluous allout-show-entry.
+ (allout-isearch-rectification): Refine condition for isearching.
+ (allout-isearch-abort, allout-enwrap-isearch)
+ (allout-flag-region, my-region-active-p): Relocate some macros.
+ (allout-title): Fallback title is (buffer-name), not
+ non-existing (current-buffer-name).
+ (subst-char-in-string): Define if absent (for some XEmacs versions).
+
+2005-10-20 Jari Aalto <jari.aalto@cante.net>
+
+ * mail/sendmail.el (mail-setup-hook, mail-aliases)
+ (mail-yank-prefix, mail-indentation-spaces, mail-yank-hooks)
+ (mail-citation-prefix-regexp, mail-signature-file)
+ (mail-default-headers, mail-bury-selects-summary)
+ (mail-send-nonascii): Add autoload cookies.
+
+2005-10-20 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
+
+ * frame.el (blink-cursor-mode): Add `mac' to the list of
+ window-system's that support blinking cursor.
+
+2005-10-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * textmodes/org.el (org-level-color-stars-only): Fix typo in docstring.
+
+2005-10-20 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in ($(lisp)/mh-e/mh-loaddefs.el):
+ Bind find-file-suppress-same-file-warnings to t, to avoid warnings due
+ to different drive letter case in D:/foo/bar.el vs d:/foo/bar.el.
+
+2005-10-20 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-is-tramp-root): Simplify regexp matching tramp root.
+ (ido-set-current-directory): Don't add / after final @.
+ (ido-file-name-all-completions-1): Adapt to fixed tramp completion.
+ Explicitly handle ange-ftp completion oddities.
+ (ido-make-file-list): Don't rotate list at tramp root to avoid
+ triggering tramp file handler for expand-file-name via get-file-buffer.
+
+2005-10-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * savehist.el (savehist-coding-system): Revert to checking XEmacs.
+
+2005-10-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-units.el (math-standard-units): Add units, adjust
+ symbols and update values.
+ (math-unit-prefixes): Add more prefixes.
+
+2005-10-19 Romain Francoise <romain@orebokech.com>
+
+ * bookmark.el (bookmark-menu-heading): New face.
+ (bookmark-bmenu-list): Use it.
+ Don't fiddle with `baud-rate' at top-level.
+
+2005-10-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.el (create-image, find-image): Mention max-image-size in
+ docstring.
+
+2005-10-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * savehist.el (savehist-load): Revert to checking XEmacs.
+
+ * textmodes/conf-mode.el: Don't use font-lock-defaults-alist.
+ Various docstring and line-width fixups.
+ (conf-mode): Use cond.
+ Set font-lock-defaults. Don't set comment-use-syntax.
+
+2005-10-18 David Ponce <david@dponce.com>
+
+ * tree-widget.el (tree-widget-button-click): New function.
+ (tree-widget-button-keymap): Use it.
+
+2005-10-18 Romain Francoise <romain@orebokech.com>
+
+ * bookmark.el (bookmark-insert-location, bookmark-bmenu-list)
+ (bookmark-bmenu-hide-filenames): Add follow-link property.
+ Improve help-echo text.
+
+ * ffap.el (find-file-at-point): Doc fix.
+
+2005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mouse.el (mouse-set-region): Don't do sit-for on a mac frame.
+
+2005-10-18 Masatake YAMATO <jet@gyve.org>
+
+ Install to the CVS repository what I forgot to install in my
+ 2005-10-16 changes.
+
+ * progmodes/python.el (python-complete-symbol): Pass the common
+ prefix substring of completion to `display-completion-list'.
+
+ * textmodes/org.el (org-complete): Ditto.
+
+2005-10-18 Masatake YAMATO <jet@gyve.org>
+
+ Fix a bug reported by Sven Joachim <sven_joachim@web.de>.
+
+ * woman.el (WoMan-xref-man-page): New button type derived
+ from `Man-abstract-xref-man-page'.
+ (woman-mode): Pass `WoMan-xref-man-page' to `Man-highlight-references'.
+
+ * man.el (Man-abstract-xref-man-page): New button type.
+ (Man-xref-man-page): Make it derived from `Man-abstract-xref-man-page'.
+ (Man-highlight-references): Add new optional argument `xref-man-type'.
+
+2005-10-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Correct condition for fringe.
+
+2005-10-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-edit.el (Custom-move-and-invoke): Delete.
+ (custom-mode-map): Bind mouse-1 to widget-move-and-invoke.
+
+ * wid-edit.el (widget-move-and-invoke): New function, from
+ Custom-move-and-invoke.
+
+2005-10-17 Bill Wohler <wohler@newt.com>
+
+ Move all remaining images from lisp/toolbar to etc/images, move
+ lisp/toolbar/tool-bar to lisp and "delete" lisp/toolbar. Place
+ the low resolution images in their own directory (low-color).
+
+ * toolbar/attach.*, toolbar/cancel.*, toolbar/close.*
+ * toolbar/copy.*, toolbar/cut.*, toolbar/diropen.*, toolbar/exit.*
+ * toolbar/help.*, toolbar/home.*, toolbar/index.*, toolbar/info.*
+ * toolbar/mail.*, toolbar/new.*, toolbar/open.*, toolbar/paste.*
+ * toolbar/preferences.*, toolbar/print.*, toolbar/save.*
+ * toolbar/saveas.*, toolbar/search.*, toolbar/search-replace.*
+ * toolbar/spell.*, toolbar/undo.*: Move to etc/images.
+
+ * toolbar/lc-copy.*: Move to etc/images/low-color/copy.*.
+ * toolbar/lc-cut.*: Move to etc/images/low-color/cut.*.
+ * toolbar/lc-help.*: Move to etc/images/low-color/help.*.
+ * toolbar/lc-home.*: Move to etc/images/low-color/home.*.
+ * toolbar/lc-index.*: Move to etc/images/low-color/index.*.
+ * toolbar/lc-new.*: Move to etc/images/low-color/new.*.
+ * toolbar/lc-open.*: Move to etc/images/low-color/open.*.
+ * toolbar/lc-paste.*: Move to etc/images/low-color/paste.*.
+ * toolbar/lc-preferences.*: Move to etc/images/low-color/preferences.*.
+ * toolbar/lc-print.*: Move to etc/images/low-color/print.*.
+ * toolbar/lc-save.*: Move to etc/images/low-color/save.*.
+ * toolbar/lc-saveas.*: Move to etc/images/low-color/saveas.*.
+ * toolbar/lc-search.*: Move to etc/images/low-color/search.*.
+ * toolbar/lc-spell.*: Move to etc/images/low-color/spell.*.
+ * toolbar/lc-undo.*: Move to etc/images/low-color/undo.*.
+
+ To conform with convention, replace the underscore (_) in the
+ following image names with dash (-) or (/) as appropriate.
+
+ * toolbar/back_arrow.*: Move to etc/images/back-arrow.*.
+ * toolbar/fld_open.*: Move to etc/images/fld-open.*.
+ * toolbar/fwd_arrow.*: Move to etc/images/fwd-arrow.*.
+ * toolbar/jump_to.*: Move to etc/images/jump-to.*.
+ * toolbar/left_arrow.*: Move to etc/images/left-arrow.*.
+ * toolbar/right_arrow.*: Move to etc/images/right-arrow.*.
+ * toolbar/up_arrow.*: Move to etc/images/up-arrow.*.
+ * toolbar/lc-back_arrow.*: Move to etc/images/low-color/back-arrow.*.
+ * toolbar/lc-fwd_arrow.*: Move to etc/images/low-color/fwd-arrow.*.
+ * toolbar/lc-jump_to.*: Move to etc/images/low-color/jump-to.*.
+ * toolbar/lc-left_arrow.*: Move to etc/images/low-color/left-arrow.*.
+ * toolbar/lc-right_arrow.*: Move to etc/images/low-color/right-arrow.*.
+ * toolbar/lc-up_arrow.*: Move to etc/images/low-color/up-arrow.*.
+ * toolbar/mail_compose.*: Move to etc/images/mail/compose.*.
+ * toolbar/mail_send.*: Move to etc/images/mail/send.*.
+
+ * info.el (info-tool-bar-map): Replace underscores in image names
+ with dashes.
+
+ * makefile.w32-in (WINS): Remove toolbar.
+
+ * menu-bar.el: Replace toolbar/tool-bar.el with tool-bar.el in comment.
+
+ * tool-bar.el: Move to lisp from toolbar. Now that
+ toolbar is empty, it should be deleted when folks run "cvs up -P".
+
+2005-10-18 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-store.el (calc-store-into): Get the proper variable name
+ to display in message.
+
+2005-10-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler): Make watch
+ expressions display in speedbar for all buffers when debugging.
+ (gdb-speedbar-expand-node): Ensure node contraction is always updated.
+
+ * speedbar.el (speedbar-set-mode-line-format): Indent properly.
+ (speedbar-insert-button, speedbar-make-button):
+ Use add-text-properties.
+ (speedbar-update-localized-contents)
+ (speedbar-update-directory-contents)
+ (speedbar-update-special-contents): Use dolist.
+ (speedbar-buffer-easymenu-definition): Add a menu separator.
+
+2005-10-17 Jason Rumney <jasonr@gnu.org>
+
+ * makefile.w32-in: Use $(lisp) consistently.
+ (pre-mh-loaddefs.el-SH, pre-mh-loaddefs.el-CMD): New targets
+ for shell specific generation of mh-autoloads.
+
+2005-10-17 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/tex-mode.el (tex-font-lock-keywords-2): Undo prev change.
+
+2005-10-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * jit-lock.el (jit-lock-fontify-now):
+ Move jit-lock-context-unfontify-pos to avoid wasted work.
+
+2005-10-17 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-completion-mode): New defvar. Used in
+ `tramp-completion-mode' for checking if we are in completion mode.
+ (tramp-completion-handle-file-name-all-completions): Reorder code
+ in order to complete for file names only in case there are no
+ method/user/host completions. This is necessary for cooperation
+ with ido. Reported by Kim F. Storm <storm@cua.dk>.
+
+2005-10-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-search-forward)
+ (longlines-search-backward): Match any number of spaces.
+
+2005-10-16 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * diff-mode.el (diff-mode): Doc fix.
+
+2005-10-16 David Reitter <david.reitter@gmail.com>
+
+ * mail/sendmail.el (send-mail-function): Use mailclient-send-it
+ as default on darwin and windows systems.
+
+2005-10-16 Sven Joachim <svenjoac@gmx.de> (tiny change)
+
+ * arc-mode.el (archive-zip-extract): Doc fix.
+
+2005-10-16 Romain Francoise <romain@orebokech.com>
+
+ * mouse.el (mouse-1-click-follows-link): Doc fix.
+
+2005-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * savehist.el: Don't require CL at runtime.
+ (savehist-xemacs): Remove.
+ (savehist-coding-system): Use utf-8 if present, regardless of religion.
+ (savehist-no-conversion): Use (featurep 'xemacs).
+ (savehist-load): Check existence of start-itimer rather than XEmacs.
+ Use an idle timer.
+ (savehist-process-for-saving): Replace use of CL funs `subseq' and
+ `delete-if-not'.
+
+2005-10-16 Hrvoje Niksic <hniksic@xemacs.org>
+
+ * savehist.el: Newer version.
+ (savehist-autosave-interval, savehist-coding-system, savehist-timer)
+ (savehist-last-checksum, savehist-no-conversion): New vars.
+ (savehist-autosave, savehist-process-for-saving, savehist-printable):
+ New functions.
+ (savehist-load, savehist-save): Use them.
+ (savehist-delimit): Remove.
+
+2005-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/compile.el (compilation-goto-locus): Display the
+ compilation buffer first and the source buffer second, in case they're
+ in overlapping frames. Don't raise the compilation frame if it was the
+ selected window upon entry. Pass the `other-window' arg to
+ pop-to-buffer.
+
+ * info.el (Info-fontify-node): Use dolist.
+ Change add-text-properties to put-text-property.
+
+2005-10-16 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-font-lock-url): Catch when point past
+ bound of search.
+
+2005-10-16 Masatake YAMATO <jet@gyve.org>
+
+ * dabbrev.el (dabbrev-completion): Pass the common
+ prefix substring of completion to `display-completion-list'.
+
+ * filecache.el (file-cache-minibuffer-complete)
+ (file-cache-complete): Ditto.
+
+ * tempo.el (tempo-display-completions): Ditto.
+
+ * wid-edit.el (widget-file-complete, widget-color-complete): Ditto.
+
+ * emacs-lisp/lisp.el (lisp-complete-symbol): Ditto.
+
+ * eshell/em-hist.el (eshell-list-history): Ditto.
+
+ * mail/mailabbrev.el (mail-abbrev-complete-alias): Ditto.
+
+ * mail/mailalias.el (mail-complete): Ditto.
+
+ * progmodes/etags.el (complete-tag): Ditto.
+
+ * progmodes/make-mode.el (makefile-complete): Ditto.
+
+ * progmodes/meta-mode.el (meta-complete-symbol): Ditto.
+
+ * progmodes/octave-mod.el (octave-complete-symbol): Ditto.
+
+ * progmodes/pascal.el (pascal-complete-word)
+ (pascal-show-completions): Ditto.
+
+ * textmodes/bibtex.el (bibtex-complete-internal): Ditto.
+
+ * simple.el (completion-common-substring): New variable.
+ (completion-setup-function): Use `completion-common-substring'
+ to put faces.
+
+2005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Apply 2005-10-09 change for term/x-win.el.
+ (x-get-selection, mac-select-convert-to-string): Convert from/to
+ UTF-16 clipboard data as in native byte order, no BOM.
+
+2005-10-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-tool-bar-map): Rename the images
+ appropriately (gud/next, gud/nexti, gud/step, gud/stepi).
+ (gud-sentinel): Use speedbar-frame to check for speedbar.
+
+2005-10-15 Richard M. Stallman <rms@gnu.org>
+
+ * savehist.el: New file.
+
+2005-10-14 Karl Chen <quarl@cs.berkeley.edu>
+
+ * textmodes/tex-mode.el (tex-font-lock-keywords-2):
+ Fix bug in \bf fontification.
+
+2005-10-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs.el (cvs-edit-log-files): New var.
+ (cvs-mode-edit-log): New arg `file'.
+ (cvs-edit-log-minor-wrap): Don't set the ignore-marks property.
+ Instead force the use of the original file and nothing else.
+ (cvs-edit-log-filelist): Don't use the cvs-mode-* function unless
+ the cvs-minor-wrap-function is set.
+ (cvs-do-edit-log): Obey the vars set in cvs-edit-log-minor-wrap.
+
+2005-10-14 Bill Wohler <wohler@newt.com>
+
+ * toolbar/gud-break.*: Moved to etc/images/gud/break.*.
+ * toolbar/gud-cont.*: Moved to etc/images/gud/cont.*.
+ * toolbar/gud-down.*: Moved to etc/images/gud/down.*.
+ * toolbar/gud-finish.*: Moved to etc/images/gud/finish.*.
+ * toolbar/gud-ni.*: Moved to etc/images/gud/ni.*.
+ * toolbar/gud-n.*: Moved to etc/images/gud/n.*.
+ * toolbar/gud-print.*: Moved to etc/images/gud/print.*.
+ * toolbar/gud-pstar.*: Moved to etc/images/gud/pstar.*.
+ * toolbar/gud-remove.*: Moved to etc/images/gud/remove.*.
+ * toolbar/gud-run.*: Moved to etc/images/gud/run.*.
+ * toolbar/gud-si.*: Moved to etc/images/gud/si.*.
+ * toolbar/gud-s.*: Moved to etc/images/gud/s.*.
+ * toolbar/gud-until.*: Moved to etc/images/gud/until.*.
+ * toolbar/gud-up.*: Moved to etc/images/gud/up.*.
+ * toolbar/gud-watch.*: Moved to etc/images/gud/watch.*.
+
+ * progmodes/gud.el (gud-tool-bar-map): Rename the images
+ appropriately (for example, gud-break to gud/break).
+
+2005-10-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlinges-search-function)
+ (longlines-search-forward, longlines-search-backward): New functions.
+ (longlines-mode): Set isearch-search-fun-function to
+ longlinges-search-function.
+
+ * mouse.el (mouse-drag-region-1): Handle the case where a
+ double-click event is bound to an arbitrary function.
+
+2005-10-14 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-track-opened-file)
+ (recentf-track-closed-file, recentf-update-menu)
+ (recentf-used-hooks, recentf-enabled-p): Move before dialog stuff.
+ (recentf-dialog-mode-map): Map follow-link to RET, so dialogs obey
+ mouse-1-click-follows-link.
+
+2005-10-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * toolbar/diropen.xpm, toolbar/diropen.pbm: New versions made from
+ Gnome file-manager.png. Suggested by
+ Joachim Nilsson <joachim.nilsson@vmlinux.org>.
+
+ * toolbar/README: Add diropen.xpm.
+
+2005-10-13 Bill Wohler <wohler@newt.com>
+
+ * makefile.w32-in (MH_E_SRC): Rename from MH-E-SRC per NMAKE
+ restrictions. Suggested by David Robinow <drobinow@gmail.com>.
+
+2005-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/mixal-mode.el (mixal-operation-codes-alist):
+ Don't waste the byte-compiler's time on constant data.
+
+2005-10-13 Kenichi Handa <handa@m17n.org>
+
+ * international/utf-8.el (utf-8-compose): Display an invalid UTF-8
+ byte with `escape-glyph' face.
+
+ * international/fontset.el (ccl-encode-unicode-font):
+ Lookup utf-subst-table-for-encode, not ucs-mule-cjk-to-unicode.
+ Handle the case that ucs-mule-to-mule-unicode translates a character to
+ ASCII (usually for IPA characters).
+
+2005-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * info.el (Info-fontify-node): Don't be fooled by a lone "...".
+ Don't hide the underline of titles if font-lock-mode is disabled.
+
+2005-10-12 Bill Wohler <wohler@newt.com>
+
+ * makefile.w32-in (MH-E-SRC): New. Used by mh-autoloads.
+ (mh-autoloads): New. Builds mh-e/mh-loaddefs.el. Rebuilds if any
+ files in MH-E-SRC have been updated.
+ (updates, compile, recompile, bootstrap): Depend on mh-autoloads.
+
+2005-10-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/mixal-mode.el (mixal-operation-codes): Remove.
+ (mixal-mode-syntax-table): Add \n as end-comment.
+ (mixal-operation-codes-alist): Immediately initialize to full value.
+ (mixal-add-operation-code): Remove.
+ (mixal-describe-operation-code): Make the arg non-optional.
+ Use the interactive spec instead.
+ Use mixal-operation-codes-alist rather than mixal-operation-codes.
+ (mixal-font-lock-keywords): Don't highlight comments here any more.
+ (mixal-font-lock-syntactic-keywords): New var.
+ (mixal-mode): Use it. Fix comment-start-skip.
+
+2005-10-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * startup.el (command-line-x-option-alist): -nb => -nbi.
+
+2005-10-12 Kim F. Storm <storm@cua.dk>
+
+ * startup.el (fancy-splash-default-action): Discard mouse click in
+ the splash screen window, as it has no sensible meaning in the
+ next window to be selected. Fixes error reported by Jan D.
+
+2005-10-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * desktop.el (desktop-load-file): Do nothing when FUNCTION is nil.
+
+2005-10-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/mixal-mode.el: Sync with version in the GNU MDK project.
+ Try to fix up minor layout issues like indentation, line break, etc...
+ (mixal-mode-syntax-table): Don't try to specify comment syntax,
+ because it doesn't work.
+ (mixal-operation-codes): Add some more codes.
+ (mixal-font-lock-keywords): Process comments here.
+ (mixal-mode): mixasm no longer needs -g option.
+
+2005-10-11 Sven Joachim <svenjoac@gmx.de> (tiny change)
+
+ * progmodes/sh-script.el (sh-tmp-file):
+ Use mktemp -t. Finish support for es and rc shells.
+
+2005-10-11 Jay Belanger <belanger@truman.edu>
+
+ * calc/calcalg2.el (calc-integral): With an argument, compute the
+ definite integral.
+
+2005-10-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-drag-region-1): Don't try to catch a
+ double-click when doing follow-link (it's overridden anyway).
+
+2005-10-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/autoload.el (update-directory-autoloads): Doc fix.
+ (autoload-print-form-outbuf): Add docstring.
+
+2005-10-11 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-mode-menu): Delete menu item "Edit".
+ (Info-mode): Delete description of Info-edit from docstring,
+ and rearrange descriptions of Info commands in the order
+ they are documented in the Info manual.
+
+2005-10-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calendar/appt.el (appt-check): Use diary-selective-display var.
+
+2005-10-10 Richard M. Stallman <rms@gnu.org>
+
+ * net/newsticker.el (newsticker-start, newsticker-show-news):
+ Add autoload cookies.
+
+2005-10-10 Emanuele Giaquinta <emanuele.giaquinta@gmail.com>
+
+ * progmodes/sh-script.el (sh-tmp-file): Use mktemp.
+
+2005-10-10 Karl Chen <quarl@cs.berkeley.edu>
+
+ * jka-cmpr-hook.el (jka-compr-handler): Fix typo in `operations' prop.
+
+2005-10-10 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-arith.el (math-check-known-scalarp)
+ (math-check-known-matrixp): Check the values of arguments that are
+ variables.
+ (math-check-known-square-matrixp): New function.
+ (math-known-square-matrixp): Use math-check-known-square-matrixp.
+ (math-super-types): Add sqmatrix type.
+
+ * calc/calc-mode.el (calc-matrix-mode, math-get-modes-vec): Change the
+ mode name `square' to `sqmatrix'.
+
+ * calc/calc.el (calc-matrix-mode, calc-set-mode-line): Change the
+ mode name `square' to `sqmatrix'.
+
+2005-10-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/etags.el (select-tags-table-mode): Don't use
+ selective-display.
+ (tags-select-tags-table): Pass `button' to the action function.
+ (select-tags-table): Place the side-info on button properties rather
+ than in hidden text. Abbreviate file names.
+ (select-tags-table-mode-map): Inherit rather than copy buttom-map.
+ (select-tags-table-select): Add `button' argument.
+ Get side-info from the button property rather than from hidden text.
+
+2005-10-11 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-install-speedbar-variables): Add more bindings.
+ (gud-speedbar-buttons): Preserve point if possible.
+ (gud-sentinel): Restore previous speedbar display type.
+
+ * progmodes/gdb-ui.el (gdba): Improve diagram.
+ (def-gdb-auto-update-handler, gdb-info-locals-handler)
+ (gdb-put-breakpoint-icon, gdb-remove-breakpoint-icons):
+ Call get-buffer-window once.
+
+2005-10-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/pascal.el (pascal-mode-map): Move init into declaration.
+ (pascal-mode-syntax-table): Make (* *) markers same class as { ... }.
+ (pascal-indent-command): Remove unused var `ind'.
+ (pascal-indent-case): Remove unused var `oldpos'.
+ (pascal-outline-map): Don't inherit from pascal-mode-map anymore,
+ since it's now used as a proper minor mode map.
+ (pascal-outline): Rename to pascal-outline-mode.
+ (pascal-outline-mode): Use define-minor-mode.
+ (pascal-outline-mode, pascal-outline-change): Use overlays rather than
+ selective-display.
+
+2005-10-10 Andreas Schwab <schwab@suse.de>
+
+ * textmodes/tex-mode.el (tex-font-lock-keywords-2): Adjust match
+ number. Reported by Karl Chen <quarl@cs.berkeley.edu>.
+
+ * Makefile.in ($(lisp)/mh-e/mh-loaddefs.el): Fix for building
+ outside source directory.
+
+2005-10-10 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode-map): Explicit definition of `C-c
+ C-x' as a prefix.
+ (orgtbl-mode-map): Full keymap instead of sparse, because all
+ `self-insert-command' keys are redefined in this map.
+ (org-export-as-html): Specify charset for HTML file, by taking it
+ from the coding system.
+
+2005-10-10 Kenichi Handa <handa@m17n.org>
+
+ * textmodes/flyspell.el (flyspell-check-word-p):
+ If unread-command-events is non-empty, don't call sit-for.
+
+2005-10-09 Richard M. Stallman <rms@gnu.org>
+
+ * font-lock.el (font-lock-syntactic-keywords)
+ (font-lock-keywords): Doc fixes.
+
+ * textmodes/flyspell.el (flyspell-external-point-words):
+ Simplify logic, and don't try to check for consecutive appearances
+ of one incorrect word.
+
+2005-10-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-buffer-easymenu-definition): Add menu
+ separator.
+
+ * progmodes/gud.el (gud-last-speedbar-buffer): Remove.
+ (gud-install-speedbar-variables): Add GUD to speedbar "Displays" list.
+ (gud-expansion-speedbar-buttons): New function.
+ (gud-speedbar-buttons): Check for gud-comint-buffer.
+
+2005-10-09 Bill Wohler <wohler@newt.com>
+
+ * Makefile.in (updates): Add mh-loaddefs dependency.
+
+2005-10-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * speedbar.el (speedbar-file-key-map): Fix typo.
+
+2005-10-09 Daniel Brockman <daniel@brockman.se>
+
+ * cus-start.el (line-spacing): Add custom spec.
+
+2005-10-09 Romain Francoise <romain@orebokech.com>
+
+ * textmodes/ispell.el (ispell-check-version): Fix last change.
+
+2005-10-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * term/x-win.el: Remove -i, --icon-type from comment.
+
+ * startup.el (command-line-x-option-alist): Remove options -i,
+ -itype, --icon-type, added -nb, --no-bitmap-icon.
+
+2005-10-09 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-speedbar-menu-items): Use :visible
+ instead of :active.
+
+2005-10-08 Eric Hanchrow <offby1@blarg.net> (tiny change)
+
+ * textmodes/ispell.el (ispell-check-version):
+ Ignore hyphen, and all that follows, in aspell's version text.
+
+2005-10-08 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-arith.el (math-known-square-matrixp): New function.
+ (math-pow-fancy): Check for matrices before distributing exponent
+ across products.
+
+ * calc/calc-keypd.el (calc-do-keypad): Widen keypad window for
+ fullscreen keypad. Suggested by Luc Teirlinck.
+ (calc-keypad-show-input): Add space for formatting.
+
+ * calc/calc-mode.el (calc-matrix-mode, math-get-modes-vec):
+ Add square matrix option.
+
+ * calc/calc-poly.el (math-expand-term): Check for matrices instead
+ of checking calc-matrix-mode when deciding how to expand.
+
+ * calc/calc.el (calc-set-mode-line): Add square matrix option.
+
+2005-10-08 Lars Hansen <larsh@soem.dk>
+
+ * net/tramp.el (tramp-perl-directory-files-and-attributes):
+ Add error handling.
+ (tramp-handle-directory-files-and-attributes): Handle perl error msg.
+
+2005-10-08 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.51.
+
+ * net/tramp.el (tramp-handle-set-visited-file-modtime)
+ (tramp-handle-insert-file-contents, tramp-handle-write-region):
+ Insert special handling for `last-coding-system-used', again
+ it still seems to be necessary (unlike stated before).
+ Reported by Toshinori Sugita <sugita@d-pad.co.jp>.
+ (tramp-password-prompt-regexp): There might be other words before
+ trailing ":". Reported by Kurt Steinkraus <kurt@steinkraus.us>.
+ (tramp-chunksize): Improve docstring.
+ (tramp-set-auto-save-file-modes): Octal integer code #o600 breaks
+ Emacs 20. Use `tramp-octal-to-decimal' therefore. Reported by
+ Christian Joergensen <bugs@razor.dk>.
+
+2005-10-07 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/f90.el (f90-keywords-re, f90-mode): Doc fix.
+ (f90-font-lock-keywords-2, f90-mode-abbrev-table): Add `double
+ precision'.
+
+2005-10-07 Romain Francoise <romain@orebokech.com>
+
+ * ibuf-ext.el (ibuffer-do-shell-command-pipe)
+ (ibuffer-do-shell-command-pipe-replace)
+ (ibuffer-do-shell-command-file, ibuffer-do-eval)
+ (ibuffer-do-view-and-eval, ibuffer-do-rename-uniquely)
+ (ibuffer-do-revert, ibuffer-do-replace-regexp)
+ (ibuffer-do-query-replace, ibuffer-do-query-replace-regexp)
+ (ibuffer-do-print, ibuffer-filter-by-mode, ibuffer-filter-by-used-mode)
+ (ibuffer-filter-by-name, ibuffer-filter-by-filename)
+ (ibuffer-filter-by-size-gt, ibuffer-filter-by-size-lt)
+ (ibuffer-filter-by-content, ibuffer-filter-by-predicate)
+ (ibuffer-do-sort-by-major-mode, ibuffer-do-sort-by-mode-name)
+ (ibuffer-do-sort-by-alphabetic, ibuffer-do-sort-by-size):
+ Autoload file sans suffix.
+
+ * emulation/cua-base.el (cua-toggle-global-mark): Likewise.
+
+2005-10-07 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-menu-open-all-flag): New option.
+ (recentf-digit-shortcut-command-name): New function.
+ (recentf--shortcuts-keymap): New variable.
+ (recentf-menu-shortcuts): New variable.
+ (recentf-make-menu-items): Initialize it. Replace the "More..."
+ menu item by "All...", if `recentf-menu-open-all-flag' is non-nil.
+ (recentf-menu-value-shortcut): New function.
+ (recentf-make-menu-item): Use it. No more in-lined.
+ (recentf-dialog-mode-map): Base on `recentf--shortcuts-keymap'.
+ (recentf-open-most-recent-file): Rename from
+ `recentf-open-file-with-key'. Don't depend on key binding.
+ (recentf-mode-map): New variable.
+ (recentf-mode): Use it.
+
+2005-10-06 Bill Wohler <wohler@newt.com>
+
+ * mh-e/mh-loaddefs.el: Remove. Now generated automatically.
+
+ * Makefile.in (AUTOGENEL): Add mh-e/mh-loaddefs.el.
+ (MH-E-SRC): New. Used by mh-autoloads.
+ (mh-autoloads): New. Builds mh-e/mh-loaddefs.el. Rebuilds if any
+ files in MH-E-SRC have been updated.
+ (compile, recompile, bootstrap): Depend on mh-autoloads.
+
+2005-10-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Only display un-intuitive
+ gud-break and gud-remove icons when the fringe is not available.
+
+ * progmodes/gdb-ui.el (gdb-fringe-width -> gdb-buffer-fringe-width):
+ Typo.
+
+2005-10-06 Micha,Ak(Bl Cadilhac <michael.cadilhac-@t-lrde.epita.fr>
+
+ * play/zone.el (zone): Wrap body with save-window-excursion.
+
+2005-10-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calendar/cal-menu.el (calendar-mouse-view-diary-entries):
+ Use the new `list-only' arg to diary-list-entries.
+
+ * calendar/diary-lib.el: Use overlays rather than selective-display.
+ (diary-selective-display): New var.
+ (diary-header-line-format): Use it.
+ (diary-list-entries): Add argument `list-only'.
+ Put the buffer in diary-mode. Don't add \^M at beg and end.
+ Replace \^M by invisible overlays.
+ (diary-unhide-everything): Replace \^M by invisible overlays.
+ (print-diary-entries): Look for overlays rather than \^M.
+ Add a space to the temp buffer name.
+ (diary-show-all-entries, mark-diary-entries, make-diary-entry):
+ Put the buffer in diary-mode.
+ (list-sexp-diary-entries): Replace \^M by invisible overlays.
+ (diary-anniversary): Make the year arg optional.
+ (diary-time-regexp): New const.
+ (diary-font-lock-keywords): Use it to accept a few more time formats.
+
+ * pcvs.el (cvs-sentinel): Make sure we do re-enable undo.
+
+2005-10-06 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * textmodes/artist.el (artist-ellipse-mirror-quadrant):
+ Fix bug introduced 2005-07-03: Use (car (last ...))
+ to faithfully reproduce replaced artist-last.
+ (artist-set-arrow-points-for-poly): Likewise.
+ Suggested by Johan Bockg,Ae(Brd.
+
+2005-10-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * dframe.el (x-pointer-hand2, x-pointer-top-left-arrow):
+ * wid-edit.el (widget):
+ * progmodes/gdb-ui.el (gdb-buffer-fringe-width):
+ * progmodes/vhdl-mode.el (speedbar-attached-frame): Add defvars.
+
+2005-10-06 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (set-language-environment):
+ Fix setting up of case-table for unibyte mode.
+
+ * simple.el (what-cursor-position): If the character is displayed
+ by some `display' text property, show that. Don't use
+ single-key-description for eight-bit characters in multibyte mode.
+
+2005-10-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-fringe-width): New variable.
+ (gdb-ann3): Set it.
+ (gdb-put-breakpoint-icon): Don't take fringe-width from speedbar frame.
+ (gdb-info-frames-custom): Use inverse-video for first five
+ characters of selected frame only.
+ (gdb-get-frame-number): Select frame even when point is on frame
+ number.
+
+2005-10-06 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/gdb-ui.el (gdb-info-breakpoints-custom):
+ Put `font-lock-function-name-face'.
+ (gdb-info-frames-custom): Put `font-lock-function-name-face'
+ and `font-lock-variable-name-face'
+ (gdb-registers-font-lock-keywords): New font lock keywords definition.
+ (gdb-registers-mode): Use `gdb-registers-font-lock-keywords'.
+ (gdb-memory-font-lock-keywords): New font lock keywords definition.
+ (gdb-memory-mode): Use `gdb-memory-font-lock-keywords'.
+ (gdb-local-font-lock-keywords): New font lock keywords definition.
+ (gdb-locals-mode): Use `gdb-local-font-lock-keywords'
+ (gdb-threads-font-lock-keywords): New font lock keywords definition.
+ (gdb-threads-mode): Use `gdb-threads-font-lock-keywords'.
+
+2005-10-05 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-merge.el (ediff-merge-region-is-non-clash): New defsubst.
+ (ediff-merge-region-is-non-clash-to-skip): Previously called
+ ediff-merge-region-is-non-clash.
+
+ * ediff-mult.el (ediff-append-custom-diff, ediff-meta-show-patch):
+ Use insert-buffer-substring.
+
+ * ediff-ptch.el (ediff-fixup-patch-map): Use better heuristics for
+ selecting files to patch. Also bug fixes.
+
+ * ediff-util.el (ediff-setup): Bug fix.
+ (ediff-next-difference): Never skip clashes that differ in white
+ space only.
+
+ * ediff-wind.el (ediff-setup-control-frame)
+ (ediff-destroy-control-frame): Check the menubar feature.
+
+ * emulation/viper-cmd.el (viper-normalize-minor-mode-map-alist)
+ (viper-refresh-mode-line): Use make-local-variable to localize
+ some vars instead of make-variable-buffer-local. Suggested by
+ Stefan Monnier.
+
+ * emulation/viper-init.el (viper-make-variable-buffer-local):
+ Delete alias.
+ (viper-restore-cursor-type, viper-set-insert-cursor-type):
+ Use make-local-variable instead of make-variable-buffer-local.
+ Suggested by Stefan Monnier.
+
+ * emulation/viper.el (viper-mode): Don't use
+ viper-make-variable-buffer-local.
+ (viper-comint-mode-hook): Use make-local-variable on
+ require-final-newline.
+ (viper-non-hook-settings): Don't use make-variable-buffer-local.
+
+2005-10-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/scheme.el (scheme-mode-syntax-table): Mark ; as being
+ also the second char of a comment-start sequence.
+ (scheme-sexp-comment-syntax-table): New var.
+ (lambda, define): Set their scheme-doc-string-elt property.
+ (scheme-font-lock-syntactic-face-function): Handle sexp-comments.
+ Use lisp-font-lock-syntactic-face-function now that it properly
+ handles |...| symbols.
+ (scheme-mode-variables): Set lisp-doc-string-elt-property,
+ parse-sexp-lookup-properties and font-lock-extra-managed-props.
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-syntax-table): Move the nesting
+ bit from # to |.
+ (lisp-font-lock-syntactic-face-function): Distinguish |...| symbols.
+
+ * emacs-lisp/lisp-mode.el (lambda): Add its doc-string-elt property.
+ (lisp-doc-string-elt-property): New var.
+ (lisp-font-lock-syntactic-face-function): Use it.
+ Rewrite to recognize docstrings even for forms not at toplevel.
+
+ * progmodes/scheme.el (scheme-mode-syntax-table): Put the nested
+ annotation on the | part of #| rather than on the # part.
+ (scheme-font-lock-syntactic-face-function): New function, to
+ distinguish strings from |...| symbols.
+ (scheme-mode-variables): Use it. Also fix up the font-lock-time
+ syntax-table so that #|...|# is properly highlighted.
+
+ * emacs-lisp/lisp-mode.el (lisp-font-lock-syntactic-face-function):
+ Don't mark as docstring the 3rd elem of an unknown toplevel form.
+
+2005-10-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bindings.el (global-map): Resync [home] and [end] bindings with C-a
+ and C-e.
+
+ * emacs-lisp/eldoc.el: Move comments into docstrings.
+ (eldoc-message-commands): Initialize in its declaration.
+ Add move-beginning-of-line and move-end-of-line.
+ (eldoc-add-command, eldoc-add-command-completions)
+ (eldoc-remove-command, eldoc-remove-command-completions): Simplify.
+
+ * outline.el (outline-mark-subtree): Activate the mark.
+
+ * calendar/appt.el (appt-time-regexp): New var.
+ (appt-add, appt-make-list): Use it.
+ (appt-convert-time): Clean up.
+
+ * textmodes/tex-mode.el (tex-font-lock-syntactic-face-function):
+ Don't set any syntax-table property here.
+ (tex-font-lock-verb): New function. Do it here.
+ (tex-font-lock-syntactic-keywords): Use it.
+
+2005-10-04 Richard M. Stallman <rms@gnu.org>
+
+ * wid-edit.el (widget-file-complete): Get the widget start point
+ the right way. Default directory to `/' if file has none.
+
+ * x-dnd.el (x-dnd-drop-data): Check for dedicated windows.
+
+ * textmodes/flyspell.el (flyspell-mode-on):
+ Call ispell-maybe-find-aspell-dictionaries.
+
+ * textmodes/ispell.el (ispell-word, ispell-region):
+ Call ispell-maybe-find-aspell-dictionaries.
+ (ispell-accept-buffer-local-defs):
+ Don't call ispell-maybe-find-aspell-dictionaries.
+
+2005-10-04 Richard M. Stallman <rms@gnu.org>
+
+ * iswitchb.el (iswitchb-buffer-ignore): Label it risky.
+
+2005-10-04 Emilio C. Lopes <eclig@gmx.net>
+
+ * iswitchb.el (iswitchb-ignore-buffername-p): Use `functionp'
+ instead of `fboundp' in order to allow for anonymous functions.
+
+2005-10-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * info.el (Info-next, Info-prev, Info-up): Select info buffer, in
+ case the user clicks on the link while another window is selected.
+ (Info-speedbar-hierarchy-buttons): Use speedbar-current-frame.
+
+ * dframe.el (dframe-update-keymap): Use mouse-1-click-follows-link
+ functionality.
+ (dframe-help-echo): Save point in case mouse tracking is off.
+
+2005-10-04 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * net/ange-ftp.el (ange-ftp-ls): Fix typo introduced in last change.
+
+2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cc-styles.el (c-setup-paragraph-variables): Make sure we do
+ not change the global value of those vars.
+
+ * progmodes/cc-mode.el (c-basic-common-init): Remove calls to
+ make-local-variable which we do not need any more.
+
+2005-10-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * speedbar.el (speedbar-ignored-path-regexp, speedbar-line-path)
+ (speedbar-ignored-path-expressions, speedbar-buffers-line-path)
+ (speedbar-add-ignored-path-regexp, speedbar-buffers-line-path)
+ (speedbar-path-line): Define obsolete aliases.
+ (speedbar-line-directory): Doc fix.
+
+ * progmodes/vhdl-mode.el (vhdl-speedbar-initialize)
+ (vhdl-speedbar-rescan-hierarchy): Call speedbar-line-directory
+ instead of speedbar-line-path.
+
+2005-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * x-dnd.el (x-dnd-drop-data): Don't set dnd-open-file-other-window
+ to nil if dropping on a window. Handle dropping on a minibuffer window
+ like dropping on a non-window part of Emacs.
+
+2005-10-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/ange-ftp.el: Use with-current-buffer.
+ (ange-ftp-insert-directory): Do not follow symlinks any more.
+
+ * textmodes/ispell.el (ispell-find-aspell-dictionaries):
+ Remove interactive spec.
+
+2005-10-03 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-mode): Use custom-initialize-set.
+
+2005-10-02 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/ebnf2ps.el (ebnf-eps-production-list):
+ Use insert-buffer-substring.
+
+ * net/tramp.el: Pacify byte compiler warnings in pacification code.
+ (tramp-handle-file-local-copy): Use insert-buffer-substring.
+
+2005-10-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/ange-ftp.el (ange-ftp-insert-directory): Undo unintended part
+ in last change.
+ (ange-ftp-insert-directory): Fix up the search for the case where
+ `file' is absolute.
+
+2005-10-02 Romain Francoise <romain@orebokech.com>
+
+ * progmodes/compile.el (compile-goto-error): Delete extra paren.
+
+2005-10-02 Andreas Schwab <schwab@suse.de>
+
+ * ediff-ptch.el (ediff-fixup-patch-map): Handle file names without
+ directory component in the session info.
+
+2005-10-01 Richard M. Stallman <rms@gnu.org>
+
+ * comint.el (comint-redirect-subvert-readonly): Doc fix.
+
+ * simple.el (next-error-internal): New function.
+
+ * progmodes/compile.el (compilation-buffer-name): New arg MODE-COMMAND.
+ (compilation-start): Pass new arg to compilation-buffer-name.
+ (compile-goto-error): Use next-error-internal.
+
+2005-10-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * speedbar.el: Remove RCS tag.
+ (speedbar-check-read-only): Handle non-existent files.
+
+ * dframe.el, ezimage.el, sb-image.el: Remove RCS tags.
+
+ * info.el (Info-speedbar-hierarchy-buttons)
+ (Info-speedbar-goto-node): Call speedbar-select-attached-frame.
+
+2005-10-01 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-valid-entry-whitespace-re):
+ Do not match newline.
+ (bibtex-realign): Do not use bibtex-valid-entry-whitespace-re.
+ (bibtex-summary): Remove unnecessary save-excursion.
+ (bibtex-fill-field-bounds): Use fill-region-as-paragraph.
+
+2005-10-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Add charset info for "iso10646-1".
+ Modify default fontset to use ATSUI-compatible fonts for some charsets
+ if available.
+
+2005-10-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * speedbar.el: Re-apply arch tag.
+ (speedbar-version): Rename to version 1.0. Suggested by Eric
+ M. Ludlam.
+ Reapply two changes from Emacs CVS' version of speedbar lost
+ during the merge:
+ (speedbar-use-imenu-flag): Avoid unnecessary use of locate-library.
+ (speedbar-frame-parameters): Improve customize type.
+
+2005-09-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/ange-ftp.el (ange-ftp-gwp-start): Use with-current-buffer.
+ (ange-ftp-file-directory-p): Fix the symlink case.
+ (ange-ftp-insert-directory): When listing a single file, get a list of
+ the parent buffer and extract the relevant line. Inspired from a patch
+ by Katsumi Yamaoka <yamaoka@jpl.org>.
+ (ange-ftp-file-name-sans-versions): Simplify.
+
+2005-09-30 Bill Wohler <wohler@newt.com>
+
+ Move MH-E image files from toolbar and mail directories into
+ etc/images.
+
+ * mail/reply2.*: Move to etc/images/mail/reply*.
+
+ * toolbar/execute.*, toolbar/highlight.*, toolbar/mh-logo.xpm:
+ * toolbar/page-down.*, toolbar/show.*, toolbar/widen.*: Move to
+ etc/images.
+
+ * toolbar/alias.*, toolbar/refile.*, toolbar/repack.*:
+ * toolbar/reply*: Move to etc/images/mail.
+
+ * toolbar/rescan.*: Move and rename to etc/images/refresh.*.
+
+2005-09-30 Eric M. Ludlam <zappo@gnu.org>
+
+ * speedbar.el: New version 1.0pre3.
+
+ Frame management code (including timer, and mouse click specifics)
+ moved to dframe.el:
+ (speedbar-attached-frame): Removed. Use dframe-attached-frame.
+ (speedbar-timer): Removed. Use dframe-timer.
+ (speedbar-close-frame): Removed. Use dframe-close-frame.
+ (speedbar-activity-change-focus-flag): Removed. Use
+ dframe-activity-change-focus-flag.
+ (speedbar-update-speed, speedbar-navigating-speed): Obsolete. Use
+ dframe-update-speed.
+
+ (speedbar-current-frame): New macro. Use this instead of the
+ variable speedbar-frame.
+
+ (speedbar-use-images, speedbar-expand-image-button-alist)
+ (speedbar-insert-image-button-maybe): Moved to sb-image.el.
+
+ (speedbar-find-image-on-load-path): Removed. Replaced by
+ defezimage in ezimage.el.
+ (speedbar-expand-image-button-alist): Removed. Replaced by
+ ezimage-expand-image-button-alist in ezimage.el.
+
+ (speedbar-ignored-directory-regexp)
+ (speedbar-add-ignored-directory-regexp)
+ (speedbar-ignored-directory-expressions)
+ (speedbar-line-directory, speedbar-buffers-line-directory)
+ (speedbar-directory-line, speedbar-buffers-line-directory):
+ Renamed, replacing `path' with `directory'.
+
+ (speedbar-create-directory, speedbar-expand-line-descendants)
+ (speedbar-toggle-line-expansion)
+ (speedbar-contract-line-descendants): New commands.
+
+ (speedbar-query-confirmation-method, speedbar-select-frame-method)
+ (speedbar-use-tool-tips-flag): New options.
+
+ (speedbar-check-read-only, speedbar-require-version)
+ (speedbar-insert-separator, speedbar-buffers-tail-notes)
+ (speedbar-handle-delete-frame, speedbar-try-completion)
+ (speedbar-update-localized-contents): New functions.
+
+ (speedbar-incompatible-version, speedbar-ro-to-do-point)
+ (speedbar-object-read-only-indicator): New variables.
+
+ (speedbar-visiting-tag-hook, speedbar-before-visiting-file-hook):
+ New hooks.
+
+ (speedbar-separator-face): New face.
+
+ (speedbar-supported-extension-expressions): Add `.g' and `.ma?k'.
+ (speedbar-ignored-modes): Add fundamental-mode.
+ (speedbar-directory-unshown-regexp): Add . directories.
+
+ (speedbar-key-map): Remove old SPC and DEL page up/down keys.
+ (speedbar-file-key-map): Add SPC to toggle node expansion, `[' and
+ `]' for full expand/close.
+ (speedbar-buffers-key-map): Add SPC to toggle node expansion.
+
+ (speedbar-check-vc): Support hidden files.
+ (speedbar-vc-check-dir-p): Use vc-state if available for CVS.
+ (speedbar-this-file-in-vc): Use vc-state if available. If VC
+ state is nil, it is not checked out.
+
+ (speedbar-line-text, speedbar-line-token): Support expand buttons
+ with no text.
+ (speedbar-refresh): Universal argument acts as power-click.
+ (speedbar-fetch-dynamic-tags): If a buffer is in Emacs, switch to
+ that buffer to get variable values.
+
+ And many other bugfixes.
+
+ * dframe.el, ezimage.el, sb-image.el: New files.
+
+ * sb-*.xpm: Remove files. New image files installed into
+ etc/images/ezimage.
+
+2005-09-30 Kenichi Handa <handa@m17n.org>
+
+ * ps-mule.el (ps-mule-show-warning): If a character is in
+ ps-print-translation-table, don't treat it as non-printable.
+
+2005-09-30 David Ponce <david@dponce.com>
+
+ * tree-widget.el (tree-widget-themes-load-path): New variable.
+ (tree-widget-themes-directory): Doc fix.
+ (tree-widget-image-formats) [Emacs]: Doc fix.
+ (tree-widget--locate-sub-directory): New function.
+ (tree-widget-themes-directory): Use it.
+
+ * recentf.el (recentf-filename-handlers): Rename from
+ `recentf-filename-handler'. Allow a list of functions.
+ (recentf-menu-items-for-commands): Fix :help strings.
+ (recentf-apply-filename-handlers): New function.
+ (recentf-expand-file-name): Use it.
+ (recentf-cleanup): Remove duplicates too.
+
+2005-09-29 Juri Linkov <juri@jurta.org>
+
+ * faces.el: Rearrange face definitions to be in the same order as
+ their face descriptions in "(emacs)Standard Faces".
+
+ * isearch.el (isearch, lazy-highlight): Add group `basic-faces'.
+
+ * tooltip.el (tooltip): Add group `basic-faces'.
+
+ * buff-menu.el (Buffer-menu-buffer): Remove group
+ `font-lock-highlighting-faces'.
+
+ * progmodes/compile.el (compilation-error, compilation-warning)
+ (compilation-info, compilation-line-number, compilation-column-number):
+ Change group from `font-lock-highlighting-faces' to `compilation'.
+
+ * progmodes/vhdl-mode.el (vhdl-font-lock-prompt-face)
+ (vhdl-font-lock-attribute-face, vhdl-font-lock-enumvalue-face)
+ (vhdl-font-lock-function-face, vhdl-font-lock-directive-face)
+ (vhdl-font-lock-reserved-words-face)
+ (vhdl-font-lock-translate-off-face, syntax-alist): Remove group
+ `font-lock-highlighting-faces'.
+
+ * cus-edit.el (custom-buffer-sort-alphabetically): Default to nil.
+
+2005-09-28 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el: Set CUA move property on additional commands:
+ up-list, down-list, backward-up-list, end-of-defun beginning-of-defun,
+ forward-sexp, backward-sexp, forward-list, backward-list.
+
+2005-09-28 Romain Francoise <romain@orebokech.com>
+
+ * comint.el (comint-show-output): Really set point at the
+ beginning of the output when not using `comint-use-prompt-regexp'.
+
+2005-09-27 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-lang.el (math-oper-table): Raise the precedence of "/"
+ in TeX mode.
+
+2005-09-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * textmodes/org.el (org-table-sum): Fix format string.
+
+ * textmodes/tex-mode.el (tex-insert-quote, latex-indent):
+ Quote face names.
+
+2005-09-26 Romain Francoise <romain@orebokech.com>
+
+ * isearch.el (isearch-forward-regexp): Close doc string.
+
+2005-09-25 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (blink-matching-open): Don't no-op when point is BEGV+1.
+
+ * isearch.el (isearch-forward, isearch-forward-regexp): Doc fixes.
+
+ * progmodes/compile.el (compilation-error-properties):
+ When getting the file from the previous error message,
+ correctly decode the new data format.
+
+ * progmodes/cc-cmds.el (c-electric-paren):
+ Call old-blink-paren only for close-paren.
+
+2005-09-24 Andreas Schwab <schwab@suse.de>
+
+ * term/rxvt.el (rxvt-register-default-colors): Delete redundant
+ condition.
+
+2005-09-25 Romain Francoise <romain@orebokech.com>
+
+ * dired-aux.el (dired-copy-file-recursive):
+ * dired.el (dired-delete-file):
+ * ediff-mult.el (ediff-dir-diff-copy-file):
+ * ediff-util.el (ediff-test-save-region):
+ * forms.el (forms-mode):
+ * ido.el (ido-file-internal, ido-delete-file-at-head):
+ * log-edit.el (log-edit-done):
+ * ses.el (ses-yank-resize):
+ * play/gomoku.el (gomoku-human-plays, gomoku)
+ (gomoku-human-resigns, gomoku-prompt-for-other-game)
+ (gomoku-offer-a-draw):
+ * play/landmark.el (lm-human-resigns, lm):
+ * net/eudcb-ldap.el (eudc-ldap-check-base):
+ * play/mpuz.el (mpuz-offer-abort, mpuz-try-letter, mpuz-close-game):
+ * progmodes/ebrowse.el (ebrowse-find-pattern):
+ * progmodes/idlw-shell.el (idlwave-shell-set-bp-check):
+ * textmodes/reftex-index.el (reftex-index-initialize-phrases-buffer):
+ End `yes-or-no-p' and `y-or-n-p' prompts with question mark and space.
+
+ * vc.el (vc-delete-file):
+ * play/gomoku.el (gomoku-terminate-game, gomoku)
+ (gomoku-prompt-for-move, gomoku-human-takes-back):
+ * play/landmark.el (lm-human-takes-back, lm-prompt-for-move)
+ (lm-start-robot, lm-human-plays): Remove extraneous spaces in messages.
+
+2005-09-24 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/rxvt.el (rxvt-register-default-colors): Add support for 255
+ color rxvt terminals by using the code xterm.el used to use before
+ 2005-04-09 in order to match the colors used by rxvt.
+
+2005-09-24 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
+
+ * term/rxvt.el (rxvt-register-default-colors): Add support for 88
+ colors rxvt-unicode terminals by using the same code as xterm.el.
+
+2005-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/tex-mode.el (tex-font-lock-append-prop)
+ (tex-font-lock-suscript, tex-insert-quote, latex-indent): Adjust to the
+ new symbol used for the tex-verbatim face.
+
+2005-09-24 Emilio C. Lopes <eclig@gmx.net>
+
+ * woman.el (woman-file-name):
+ * wid-edit.el (widget-file-prompt-value)
+ (widget-coding-system-prompt-value):
+ * w32-fns.el (set-w32-system-coding-system):
+ * vc.el (vc-version-diff, vc-annotate):
+ * textmodes/reftex-auc.el (reftex-arg-cite)
+ (reftex-arg-index-tag):
+ * textmodes/refer.el (refer-get-bib-files):
+ * textmodes/artist.el (artist-figlet-choose-font):
+ * terminal.el (terminal-emulator):
+ * replace.el (occur-read-primary-args):
+ * rect.el (string-rectangle, string-insert-rectangle):
+ * ps-print.el (ps-print-preprint):
+ * progmodes/pascal.el (pascal-goto-defun):
+ * progmodes/etags.el (visit-tags-table, visit-tags-table-buffer):
+ * progmodes/compile.el (compilation-find-file):
+ * printing.el (pr-interactive-n-up):
+ * play/animate.el (animate-birthday-present):
+ * net/rcompile.el (remote-compile):
+ * man.el (man, Man-goto-section, Man-follow-manual-reference):
+ * mail/rmailsum.el (rmail-summary-search-backward)
+ (rmail-summary-search):
+ * mail/rmailout.el (rmail-output-read-rmail-file-name)
+ (rmail-output-read-file-name):
+ * mail/rmail.el (rmail-search, rmail-search-backwards):
+ * mail/mailabbrev.el (merge-mail-abbrevs, rebuild-mail-abbrevs):
+ * locate.el (locate):
+ * international/quail.el (quail-show-keyboard-layout):
+ * international/mule.el (set-buffer-file-coding-system)
+ (revert-buffer-with-coding-system, set-file-name-coding-system)
+ (set-terminal-coding-system, set-keyboard-coding-system)
+ (set-next-selection-coding-system):
+ * international/mule-diag.el (describe-coding-system)
+ (describe-font, describe-fontset):
+ * international/mule-cmds.el (universal-coding-system-argument)
+ (search-unencodable-char, describe-input-method)
+ (set-language-environment, describe-language-environment):
+ * international/codepage.el (codepage-setup):
+ * international/code-pages.el (codepage-setup):
+ * info.el (Info-search, Info-follow-reference)
+ (Info-search-backward):
+ * emacs-lisp/advice.el (ad-read-advised-function)
+ (ad-read-advice-class, ad-clear-cache, ad-activate)
+ (ad-deactivate, ad-update, ad-unadvise, ad-read-advice-name)
+ (ad-enable-advice, ad-disable-advice, ad-remove-advice)
+ (ad-read-regexp):
+ * ediff-util.el (ediff-toggle-regexp-match):
+ * ediff-ptch.el (ediff-prompt-for-patch-file):
+ * dired-aux.el (dired-diff):
+ * diff.el (diff):
+ * cus-edit.el (custom-variable-prompt):
+ * calendar/timeclock.el (timeclock-ask-for-project):
+ * calc/calcalg3.el (calc-get-fit-variables):
+ * calc/calc-store.el (calc-edit-variable)
+ (calc-permanent-variable):
+ * vc-mcvs.el (vc-mcvs-register):
+ * shadowfile.el (shadow-define-literal-group):
+ * woman.el (woman-file-name):
+ * vc.el (vc-version-diff, vc-merge):
+ * textmodes/reftex-index.el (reftex-index-complete-tag):
+ * format.el (format-decode-buffer, format-decode-region):
+ * emulation/viper-cmd.el (viper-read-string-with-history):
+ * emacs-lisp/debug.el (cancel-debug-on-entry):
+ * emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
+ * ediff.el (ediff-merge-revisions)
+ (ediff-merge-revisions-with-ancestor, ediff-revision):
+ * completion.el (interactive-completion-string-reader):
+ * calc/calc-prog.el (calc-user-define-formula):
+ Follow convention for reading with the minibuffer.
+
+2005-09-24 Steven Huwig <steven_h@acm.org> (tiny change)
+
+ * progmodes/python.el (python-describe-symbol): Add globals() and
+ locals() to the arguments of emacs.ehelp.
+
+2005-09-24 Magnus Henoch <mange@freemail.hu>
+
+ * textmodes/ispell.el (ispell-maybe-find-aspell-dictionaries):
+ New function, code extracted from ispell-valid-dictionary-list.
+ (ispell-valid-dictionary-list, ispell-accept-buffer-local-defs):
+ Call it.
+
+2005-09-24 Eli Zaretskii <eliz@gnu.org>
+
+ * subr.el (version-regexp-alist): Extend valid syntax for version
+ strings: allow any of the characters -,_,+ to separate the
+ alpha/beta/rc part from the version part. Doc fix.
+ (version-to-list): Doc fix. Bind case-fold-search to t, as advertised.
+
+2005-09-23 David Reitter <david.reitter@gmail.com>
+
+ * mail/mailclient.el: New file.
+
+2005-09-23 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-highlight-incorrect-region)
+ (flyspell-incorrect-hook, flyspell-highlight-duplicate-region):
+ Doc fixes.
+
+ * progmodes/cc-mode.el (c-font-lock-init):
+ Specify font-lock-lines-before.
+
+2005-09-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * smerge-mode.el (smerge-remove-props): Cause re-highlighting of the
+ whole conflict.
+
+2005-09-23 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode-map, orgtbl-mode-map):
+ Move keybindings with `C-c C-h' prefix to `C-c C-x' prefix. Make use
+ of `remap' feature when available. Additional key bindings for
+ better tty support.
+ (org-mode-restart, org-force-self-insert): New commands.
+ (org-time-stamp-inactive): New command.
+ (org-remap): New function.
+ (org-table-auto-blank-field, org-level-color-stars-only): New options.
+ (org-enable-fixed-width-editor): Move to `org-structure'
+ customization group.
+ (org-self-insert-command, orgtbl-self-insert-command): Modify to
+ blank field after field motion commands.
+
+2005-09-23 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (set-language-environment):
+ Don't check utf-translate-cjk-lang-env is nil or not on deciding if we
+ have to call utf-translate-cjk-load-tables.
+
+2005-09-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (mouse-move-drag-overlay): Fix last change.
+
+2005-09-22 David Ponce <david@dponce.com>
+
+ * tree-widget.el (tree-widget-value-create): Fix previous change.
+
+2005-09-21 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Fix loading rxvt at run time.
+
+2005-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (mouse-move-drag-overlay): New function.
+ (mouse-drag-region-1): Use it.
+ Try to simplify a bit the state handling. Handle clicks on links
+ inside intangible areas.
+ (mouse-save-then-kill): Minor simplification.
+ (mouse-secondary-overlay): Make it always non-nil instead of
+ recreating it each time.
+ (mouse-start-secondary, mouse-set-secondary, mouse-drag-secondary)
+ (mouse-kill-secondary, mouse-secondary-save-then-kill):
+ Simplify accordingly.
+
+2005-09-21 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/rxvt.el (rxvt-standard-colors): Fix some colors.
+
+2005-09-20 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-ptch.el (ediff-prompt-for-patch-file): More intuitive prompt.
+ (ediff-file-name-sans-prefix): Treat nil as an empty string.
+ (ediff-fixup-patch-map): Better heuristic for intuiting the file names
+ to patch.
+
+ * ediff-util.el: Use insert-buffer-substring.
+
+ * ediff-vers.el (cvs-run-ediff-on-file-descriptor): Bug fix.
+
+ * emulation/viper-cmd.el (viper-change-state): Don't move over the
+ field boundaries in the minibuffer.
+ (viper-set-minibuffer-style): Add viper-minibuffer-post-command-hook.
+ (viper-minibuffer-post-command-hook): New hook.
+ (viper-line): Don't move cursor at bolp.
+
+ * emulation/viper-ex.el (ex-pwd, viper-info-on-file): Fix message.
+
+ * emulation/viper-init.el: Add alias to make-variable-buffer-local to
+ avoid compiler warnings.
+
+ * emulation/viper-macs.el (ex-map): Better messages.
+
+ * emulation/viper-utils.el (viper-beginning-of-field): New function.
+
+ * emulation/viper.el: Replace make-variable-buffer-local with
+ viper-make-variable-buffer-local everywhere, to avoid warnings.
+
+2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line):
+ Delete unused var `old-selected-window'.
+ (mouse-drag-region-1): Delete unused vars `start-frame', `end-of-range'.
+ (mouse-drag-secondary): Delete unused var `start-frame'.
+
+2005-09-19 Emanuele Giaquinta <emanuele.giaquinta@gmail.com> (tiny change)
+
+ * term/rxvt.el (terminal-init-rxvt): Add entry for [end].
+
+2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calendar/calendar.el (mark-visible-calendar-date): Save excursion.
+ Re-indent within 80 columns. Use inhibit-read-only.
+
+2005-09-19 Romain Francoise <romain@orebokech.com>
+
+ * calendar/diary-lib.el (mark-diary-entries): Revert last change.
+
+2005-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-default-fontify-region): Don't add a line
+ unconditionally, since the after-change-function already did it.
+
+2005-09-19 Miles Bader <miles@gnu.org>
+
+ * net/newsticker.el: Get rid of CVS keyword.
+
+2005-09-19 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * dired-aux.el (dired-handle-overwrite): Don't use `format' here.
+ The prompt is formatted later.
+
+2005-09-19 David Ponce <david@dponce.com>
+
+ * tree-widget.el (tree-widget-value-create): Save the converted
+ tree :node widget.
+
+2005-09-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/sh-script.el (sh-blink): Fix spurious reference to
+ variable `message'.
+
+2005-09-18 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-login-prompt-regexp): Expand regexp in order
+ to cover prompts like "login as:". Reported by Slawomir Nowaczyk
+ <slawomir.nowaczyk.847@student.lu.se>.
+
+2005-09-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.el (image-load-path): Use symbol `data-directory' instead
+ of its value, for backward compatibility with packages that bind
+ it during `find-image'. Suggested by Katsumi Yamaoka.
+ (image-search-load-path): Handle symbols whose values are strings.
+
+2005-09-18 Romain Francoise <romain@orebokech.com>
+
+ * calendar/diary-lib.el (mark-diary-entries): Rearrange to wrap
+ with-current-buffer form in save-excursion.
+
+2005-09-18 Deepak Goel <deego@gnufans.org>
+
+ * apropos.el (apropos-command): Fix `message' call: first arg
+ should be a format spec. In this and all other cases that appear
+ below and elsewhere in the source code, I made a change only when
+ two conditions were satisfied: [1] I can think of a possibility
+ that the arguments would cause an error, for example, the code in
+ question relies on external variables such as filenames. [2] I
+ was sure that the arg to `message' could not have been nil in the code.
+
+ * textmodes/tildify.el (tildify-region): Ditto.
+
+ * textmodes/reftex-index.el (reftex-index-change-entry)
+ (reftex-index-phrase-selection-or-word, reftex-query-index-phrase):
+ * textmodes/reftex-dcr.el (reftex-echo-ref, reftex-echo-cite):
+ * textmodes/org.el (org-complete, org-deadline, org-schedule)
+ (org-priority, org-table-sum):
+ * textmodes/ispell.el (ispell-check-version, ispell-parse-output):
+ * textmodes/flyspell.el (flyspell-mode-on, flyspell-notify-misspell)
+ (flyspell-word, flyspell-display-next-corrections):
+ * textmodes/bibtex.el (bibtex-print-help-message):
+ * textmodes/artist.el (artist-key-set-point-poly):
+ * term/mac-win.el (mac-services-insert-text):
+ * progmodes/vhdl-mode.el (vhdl-warning, vhdl-print-warnings)
+ (vhdl-hooked-abbrev, vhdl-template-insert-fun)
+ (vhdl-port-paste-testbench, vhdl-compose-new-component)
+ (vhdl-compose-configuration):
+ * progmodes/sh-script.el (sh-blink, sh-show-indent)
+ (sh-set-indent, sh-learn-line-indent):
+ * progmodes/ps-mode.el (ps-mode-target-column):
+ * progmodes/idlwave.el (idlwave-make-tags)
+ (idlwave-scan-library-catalogs):
+ * progmodes/idlw-shell.el (idlwave-shell-parse-stack-and-display):
+ * progmodes/gud.el (gud-jdb-analyze-source):
+ * progmodes/flymake.el (flymake-log):
+ * progmodes/ebnf2ps.el (ebnf-generate-region):
+ * progmodes/cmacexp.el (c-macro-expansion):
+ * progmodes/ada-xref.el (ada-treat-cmd-string):
+ * progmodes/ada-mode.el (ada-create-case-exception-substring)
+ (ada-justified-indent-current, ada-batch-reformat):
+ * play/zone.el (zone):
+ * play/landmark.el (lm-move):
+ * play/decipher.el (decipher-show-alphabet):
+ * net/newsticker.el (newsticker--display-jump)
+ (newsticker--display-scroll):
+ * mail/rmail-spam-filter.el (rsf-add-subject-to-spam-list)
+ (rsf-add-sender-to-spam-list, rsf-add-region-to-spam-list):
+ * mail/feedmail.el (feedmail-dump-message-to-queue):
+ * eshell/esh-proc.el (eshell-remove-process-entry):
+ * emulation/ws-mode.el (ws-last-error):
+ * emulation/viper-macs.el (ex-map-read-args, ex-unmap-read-args)
+ (viper-record-kbd-macro):
+ * emulation/viper-ex.el (ex-pwd, viper-info-on-file):
+ * emacs-lisp/lisp-mnt.el (lm-report-bug):
+ * emacs-lisp/find-func.el (find-function-noselect):
+ * calendar/timeclock.el (timeclock-status-string)
+ (timeclock-workday-remaining-string, timeclock-workday-elapsed-string)
+ (timeclock-when-to-leave-string):
+ * calendar/icalendar.el (icalendar--convert-ical-to-diary):
+ * calc/calc-units.el (calc-enter-units-table):
+ * calc/calc-mode.el (calc-mode-record-mode):
+ * woman.el (woman-mini-help):
+ * wdired.el (wdired-change-to-wdired-mode):
+ * vc.el (vc-retrieve-snapshot):
+ * strokes.el (strokes-read-stroke, strokes-read-complex-stroke):
+ * startup.el (display-startup-echo-area-message):
+ * simple.el (set-goal-column):
+ * ses.el (ses-command-hook, ses-recalculate-cell):
+ * server.el (server-process-filter):
+ * printing.el (pr-interface-txt-print, pr-interface-printify)
+ (pr-interface-ps):
+ * pcvs.el (cvs-help):
+ * log-edit.el (log-edit, log-edit-mode-help):
+ * iswitchb.el (iswitchb-possible-new-buffer):
+ * isearch.el (isearch-edit-string):
+ * image-mode.el (image-mode, image-minor-mode):
+ * ibuf-macs.el (define-ibuffer-filter):
+ * hi-lock.el (hi-lock-find-patterns):
+ * files.el (toggle-read-only):
+ * ediff-util.el (ediff-copy-diff)
+ (ediff-write-merge-buffer-and-maybe-kill):
+ * echistory.el (Electric-history-undefined):
+ * dnd.el (dnd-insert-text):
+ * dired-aux.el (dired-query):
+ * desktop.el (desktop-restore-file-buffer, desktop-lazy-create-buffer):
+ * bookmark.el (bookmark-bmenu-locate):
+ * obsolete/fast-lock.el (@top-level) <with-temp-message macro>:
+ Fix `message' calls to ensure first arg is a format string.
+ The change was made only when these two conditions were satisfied:
+ [1] when there is a possibility that the arguments would cause an error
+ for example, if the code in question relies on external variables
+ such as filenames, and
+ [2] if the arg to `message' could not have been nil in the code.
+
+ * pcomplete.el (pcomplete--help): Fix `message' format spec.
+ Not having a %s would be weird, though not technically wrong.
+
+2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-add-charset-info): Doc fix.
+
+2005-09-17 Romain Francoise <romain@orebokech.com>
+
+ * shell.el (shell-resync-dirs): Handle echoing processes more
+ reliably. Don't insert resync command if `comint-process-echoes'
+ is non-nil.
+
+2005-09-17 Magnus Henoch <mange@freemail.hu>
+
+ * textmodes/ispell.el (ispell-aspell-supports-utf8): New variable.
+ (ispell-check-version): Set ispell-aspell-supports-utf8 to t for
+ aspell versions >= 0.60.
+ (ispell-valid-dictionary-list): Call ispell-find-aspell-dictionaries
+ only if ispell-aspell-supports-utf8 is non-nil.
+
+2005-09-17 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * progmodes/scheme.el (scheme-mode-variables): Use setq to assign
+ buffer-local value to lisp-indent-function.
+
+2005-09-17 Milan Zamazal <pdm@zamazal.org>
+
+ * progmodes/glasses.el (glasses-make-readable): If
+ glasses-separator differs from underscore, put appropriate
+ overlays over underscore characters.
+ (glasses-convert-to-unreadable): If glasses-separator differs from
+ underscore, try to convert glasses-separator characters to
+ underscores.
+
+2005-09-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calendar/diary-lib.el (mark-diary-entries): Don't move point.
+ Use with-syntax-table and dolist.
+
+2005-09-16 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-auc.el:
+ * textmodes/reftex-cite.el:
+ * textmodes/reftex-dcr.el:
+ * textmodes/reftex-global.el:
+ * textmodes/reftex-parse.el:
+ * textmodes/reftex-ref.el:
+ * textmodes/reftex-sel.el:
+ * textmodes/reftex-toc.el:
+ * textmodes/reftex-vars.el:
+ * textmodes/reftex.el: Small changes to remove compiler warnings.
+
+ * textmodes/reftex-index.el: Likewise.
+ (reftex-query-index-phrase): More efficient use of markers.
+
+2005-09-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.el (image-load-path): New variable.
+ (image-search-load-path): New function.
+ (find-image): Search for images in `image-load-path'.
+
+2005-09-15 Richard M. Stallman <rms@gnu.org>
+
+ * follow.el: Change Maintainer field.
+
+2005-09-15 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-save-file-modes): New option.
+ (recentf-save-list): Use it.
+
+2005-09-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * bindings.el (mode-line-eol-desc, mode-line-coding-system-map)
+ (mode-line-mule-info, mode-line-modified): Move bindings from
+ mouse-3 to mouse-1.
+
+2005-09-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (sendmail-user-agent-compose): Revert last change.
+
+2005-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/ange-ftp.el (ange-ftp-process-filter): Revert to ^#+$.
+ Use with-current-buffer.
+ (ange-ftp-gwp-start): Remove unused var `gw-user'.
+ (ange-ftp-guess-hash-mark-size): Remove unused var `result'.
+ (ange-ftp-insert-directory): Remove unused var `short'.
+ (ange-ftp-file-name-sans-versions): Remove unused var `host-type'.
+
+ * pcvs-defs.el (cvs-version): Recognize CVSNT version string.
+ (cvs-execute-single-dir): Change default: cvs-1.9 is ancient.
+
+ * calendar/cal-menu.el: Don't require easymenu, since we don't use it.
+ (check-calendar-holidays, diary-list-entries): Autoload.
+ Otherwise `emacs -q' followed by "mouse-2 -> diary entries" burps.
+ (calendar-mouse-holidays, calendar-mouse-view-diary-entries): Simplify.
+
+ * calendar/diary-lib.el (diary-show-all-entries): Fix last change,
+ which mistakenly removed a call to display-buffer.
+
+2005-09-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * obsolete/iso-insert.el: Move to obsolete/ from international/.
+
+2005-09-14 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/hideshow.el
+ (hs-hide-comments-when-hiding-all): Remove autoload cookie.
+ (hs-allow-nesting): New user var.
+ (hs-discard-overlays): Skip "internal" overlays if nesting allowed.
+ (hs-hide-block-at-point): When nesting allowed,
+ if there is already an overlay in place, delete it.
+ (hs-safety-is-job-n): Delete func; remove call sites.
+ (hs-hide-level-recursive): Don't pre-clean if nesting allowed.
+ (hs-overlay-at): New func.
+ (hs-already-hidden-p, hs-show-block): Use it.
+ (hs-hide-all): Don't pre-clean if nesting allowed.
+ (hs-show-all): Temporarily disallow
+ nesting around call to `hs-discard-overlays'.
+
+2005-09-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse.el (mouse-major-mode-menu): Make `prefix' optional.
+ Delete unused local var.
+
+2005-09-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * help-fns.el (describe-categories): "?\ " -> "?\s".
+ (help-do-arg-highlight): Recognize also ARG-n, as in
+ `move-to-left-margin' (ARG+n is already recognized). Simplify.
+
+ * international/codepage.el (dos-unsupported-char-glyph):
+ * net/newsticker.el (tool-bar-map, w3-mode-map)
+ (w3m-minor-mode-map):
+ * progmodes/vhdl-mode.el (conf-alist, conf-entry, conf-key)
+ (ent-alist):
+ * textmodes/reftex-vars.el (reftex-tables-dirty): Add defvars.
+
+2005-09-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (custom-push-theme): Handle the case where a symbol is
+ bound but face properties have not yet been assigned.
+
+ * mail/sendmail.el (mail): Use new buffer if `noerase' is `new'.
+ Fix behavior if noerase is `t' and there is no mail buffer.
+
+ * simple.el (sendmail-user-agent-compose): Use a new mail buffer
+ if `continue' is nil, rather than signal an error.
+
+2005-09-12 Richard M. Stallman <rms@gnu.org>
+
+ * font-lock.el (font-lock-keywords): Add autoload.
+
+ * help-fns.el (describe-variable): Rearrange to put source link
+ in a predictable place.
+
+ * net/newsticker.el: New file.
+
+2005-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calendar/calendar.el (calendar-for-loop): Add edebug info.
+ (calendar-basic-setup): Use the new nil arg.
+ (number-of-diary-entries): Move to diary-lib.el.
+
+ * calendar/diary-lib.el: Use with-current-buffer, match-string.
+ (diary-list-entries): Use with-syntax-table and dolist.
+ Rename from list-diary-entries.
+ Use number-of-diary-entries if `number' is nil.
+ (diary, diary-view-entries): Use this new name and new nil arg value.
+ (number-of-diary-entries): Move from calendar.el.
+ (diary-unhide-everything): New function.
+ (include-other-diary-files, fancy-diary-display)
+ (diary-show-all-entries, make-diary-entry): Use it.
+ (diary-mail-entries): Use buffer-string.
+ (mark-diary-entries): Fix long standing paren typo.
+ (diary-sexp-entry): Use count-lines.
+ (make-diary-entry): Avoid `previous-line'.
+ (diary-mode-map): New var.
+ (diary-mode): Redraw cal after saving. Setup header-line.
+ (fancy-diary-display-mode): Use local-set-key.
+
+ * startup.el (command-line): Try calling various terminal-init-foo-bar
+ functions by stripping hyphenated suffixes from $TERM.
+
+ * files.el (normal-mode): Check boundness of font-lock-keywords.
+
+2005-09-12 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/compile.el: Don't decide a file's directory
+ until the user actually tries to go there.
+ (compilation-next-error-function):
+ Pass compilation-find-file the directory from the file-struct.
+ (compilation-internal-error-properties): Separate local FILE-STRUCT
+ from FILE. Doc the args better. Rename arg FMT to FMTS.
+ (compilation-find-file): Arg DIR renamed to DIRECTORY.
+ Expand it, and if nil, use default-directory.
+ (compilation-get-file-structure): Don't mix specified directory
+ with default directory. Put specified directory into
+ file-struct. Don't make the file name absolute.
+
+ * progmodes/compile.el (compilation-error-regexp-alist): Doc fix.
+ (compile-command): Add autoload.
+ (compilation-disable-input): Add autoload.
+
+2005-09-11 Stephen Gildea <gildea@stop.mail-abuse.org>
+
+ * time-stamp.el: Mention variable `time-stamp-pattern' in doc
+ strings of the variables it can override.
+ (time-stamp): New (as yet undocumented) time-stamp-format escapes
+ %Q and %q, for fully-qualified domain name and unqualified host name.
+
+2005-09-11 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/authors.el (authors-aliases): Update list.
+ (authors-fixed-entries): Update mldrag.el entry.
+
+2005-09-10 Alan Mackenzie <acm@muc.de>
+
+ * textmodes/page.el (narrow-to-page): Exclude _entire_ multi-line
+ delimiter from the region narrowed to.
+
+2005-09-10 Magnus Henoch <mange@freemail.hu>
+
+ * textmodes/ispell.el (ispell-check-version): Signal an error if
+ aspell version is less than 0.60.
+
+2005-09-10 Pascal Dupuis <Pascal.Dupuis@esat.kuleuven.be> (tiny change)
+
+ * progmodes/octave-inf.el (inferior-octave-startup):
+ Resync current dir at the end.
+
+2005-09-10 Emilio C. Lopes <eclig@gmx.net>
+
+ * woman.el (woman-topic-at-point-default):
+ Rename to woman-use-topic-at-point-default.
+ (woman-topic-at-point): Rename to woman-use-topic-at-point.
+ (woman-file-name): Reflect renames above. Automatically use the
+ word at point as topic if woman-use-topic-at-point is non-nil.
+ Otherwise offer it as default but don't insert it in the
+ minibuffer. Also use `test-completion' instead of `assoc' as
+ suggested by Stefan Monnier.
+
+2005-09-10 Andre Spiegel <spiegel@gnu.org>
+
+ * vc.el (vc-directory, vc-update-change-log): Throw an error on
+ the attempt to do it over Tramp. This is not yet supported.
+
+2005-09-10 Eli Zaretskii <eliz@gnu.org>
+
+ * menu-bar.el (menu-bar-menu-frame-live-and-visible-p)
+ (menu-bar-non-minibuffer-window-p): New functions.
+ ("Split Window", "Save As..."): Use them.
+ ("Postscript Print Buffer (B+W)", "Postscript Print Buffer")
+ ("Print Buffer", "Truncate Long Lines in this Buffer"):
+ Use menu-bar-menu-frame-live-and-visible-p.
+ ("Save Buffer", "Insert File", "Open Directory...")
+ ("Open File...", "Visit New File..."):
+ Use menu-bar-non-minibuffer-window-p.
+ (kill-this-buffer-enabled-p, dired <menu-enable>):
+ Use menu-bar-non-minibuffer-window-p.
+
+2005-09-09 Eli Zaretskii <eliz@gnu.org>
+
+ * cus-start.el (all): Don't complain about fringe-related
+ built-ins if fringes are not supported. Ditto about
+ selection-related built-ins. Fix the test for GTK-related built-ins.
+
+ * menu-bar.el ("Split Window", "Postscript Print Buffer (B+W)")
+ ("Postscript Print Buffer", "Print Region", "Save As...")
+ ("Save", "Insert File...", "Open Directory...")
+ ("Open File...", "Visit New File..."")
+ ("Truncate Long Lines in this Buffer"): Don't look at
+ menu-updating-frame if this display does not support multiple frames.
+
+2005-09-09 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
+
+ * mail/sendmail.el (default-sendmail-coding-system): Doc fix.
+
+2005-09-09 Emilio C. Lopes <eclig@gmx.net>
+
+ * woman.el: Format- and whitespace-related changes.
+
+2005-09-09 Eli Zaretskii <eliz@gnu.org>
+
+ * woman.el: Fix my email address.
+
+2005-09-08 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/sh-script.el (sh-skeleton-pair-default-alist): New var.
+ (sh-mode): Locally set skeleton-pair-default-alist.
+
+ * progmodes/make-mode.el (makefile-add-log-defun): Trim the result.
+
+ * progmodes/flymake.el: Require `compile' unconditionally.
+
+ * mail/sendmail.el (send-mail-function): Add Mailclient alternative.
+
+ * woman.el (woman-file-name): Provide a default, not initial input.
+
+ * smerge-mode.el (smerge-resolve): Pass args to smerge-remove-props.
+
+ * font-lock.el (font-lock-support-mode): Doc fix.
+
+ * descr-text.el (describe-property-list): Handle non-symbol prop names.
+
+2005-09-08 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (blink-matching-open): Get rid of text props from
+ the string shown in echo area. Don't permanently set point.
+ Some rearrangements.
+
+2005-09-08 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * recentf.el (recentf-filename-handler): Add custom choice
+ `abbreviate-file-name'.
+
+ * msb.el (msb--very-many-menus): Fix typo.
+
+ * disp-table.el (standard-display-european): Don't set
+ enable-multibyte-characters to nil.
+
+2005-09-08 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-show-file-shortcuts-flag): New option.
+ (recentf-expand-file-name): Doc fix.
+ (recentf-dialog-mode-map): Define digit shortcuts.
+ (recentf--files-with-key): New variable.
+ (recentf-show-digit-shortcut-filter): New function.
+ (recentf-open-files-items): New function.
+ (recentf-open-files): Use it.
+ (recentf-open-file-with-key): New command.
+
+2005-09-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * buff-menu.el (Buffer-menu-sort-by-column): New function.
+ Suggested by Kim F. Storm.
+ (Buffer-menu-sort-button-map): Global keymap for sort buttons.
+ (Buffer-menu-make-sort-button): Use global keymap.
+
+2005-09-07 Michael Albinus <michael.albinus@gmx.de>
+
+ * woman.el (top): Remap `man' command by `woman' in `woman-mode-map'.
+ (Man-getpage-in-background-advice): Remove defadvice; it isn't
+ necessary any longer with the remapped command.
+ (Man-bgproc-sentinel-advice): Remove defadvice which counts
+ formatting time only.
+
+ * net/tramp.el (tramp-action-password)
+ (tramp-multi-action-password): Compile the password prompt from
+ `method', `user' and `host'. Sometimes it isn't obvious which
+ password to enter, for example with remote files offered by
+ recentf.el, or with multiple steps. Suggested by Robert Marshall
+ <robert@chezmarshall.freeserve.co.uk>.
+
+2005-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/perl-mode.el (perl-font-lock-syntactic-keywords):
+ Fix regexp for when "s///" is at the beginning of line.
+
+2005-09-07 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-poly.el (math-expand-term): Multiply out any powers
+ when in matrix mode.
+
+2005-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * buff-menu.el (Buffer-menu-make-sort-button): Add docstrings, use
+ non-anonymous functions.
+
+2005-09-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * buff-menu.el (Buffer-menu-make-sort-button): Allow mouse-1 clicks
+ when using a header line. Otherwise, use mouse-1-click-follows-link.
+
+ * mouse.el (mouse-drag-header-line): Do nothing if the header-line
+ can't be moved; don't signal an error.
+
+2005-09-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * cus-theme.el (custom-theme-write-faces): Save the current face
+ spec, not the defface spec.
+
+ * custom.el (custom-known-themes): Clarify meaning of "standard".
+ (custom-push-theme): Save old values in the standard theme.
+ (disable-theme): Correct typo.
+ (custom-face-theme-value): Deleted unused function.
+ (custom-theme-recalc-face): Rewritten to treat enable/disable properly.
+
+2005-09-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/compile.el (compilation-goto-locus): Take into account
+ iconified frames when determining whether the buffer is
+ already visible.
+ Don't reset window height if the window already existed.
+
+2005-09-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * custom.el (load-theme): Rename from require-theme.
+ Add interactive spec.
+ (enable-theme): Rename from custom-enable-theme.
+ Add interactive spec.
+ (disable-theme): Rename from custom-disable-theme.
+ Add interactive spec.
+ (custom-make-theme-feature): Doc fix.
+ (custom-theme-directory): Doc fix.
+ (provide-theme): Call enable-theme.
+
+2005-09-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * obsolete/lazy-lock.el (lazy-lock-mode):
+ * obsolete/fast-lock.el (fast-lock-mode): Don't try to turn on
+ font-lock-mode if it's off. Print a warning instead.
+
+ * progmodes/compile.el (compilation-start): Ignore errors if the
+ process died before we get to send-eof.
+
+ * textmodes/tex-mode.el (tex-send-tex-command, tex-bibtex-file):
+ Undo last change. Enclosing the result in quotes broke things on Unix
+ since tex-send-command passes it through shell-quote-argument.
+ (tex-send-command): Pass `file' through convert-standard-filename
+ when possible.
+ (tex-uptodate-p): Handle the case where TeX hasn't put additional
+ info in a transcript.
+
+2005-09-02 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (terminal-init-xterm): Add eval-when-compile to
+ fix compilation warning. Reorder the key definitions to group
+ together keys emitted by the current version of xterm.
+
+ * progmodes/vhdl-mode.el (vhdl-highlight-faces)
+ (vhdl-speedbar-entity-face, vhdl-speedbar-entity-selected-face):
+ Reorder predicates to correct min-color usage.
+
+2005-09-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-mode): Inhibit read-only when encoding.
+ Kill local variables when longlines-mode is turned off.
+
+2005-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/mule-cmds.el (set-locale-environment): Soothe compiler.
+
+ * obsolete/lazy-lock.el (lazy-lock) <defgroup>: Move from font-lock.el.
+
+ * obsolete/fast-lock.el (fast-lock) <defgroup>: Move from font-lock.el.
+
+ * font-lock.el (fast-lock, lazy-lock) <defgroup>: Remove.
+ (font-lock-lines-before): Change default to being inactive.
+ (font-lock-default-fontify-region): Obey font-lock-lines-before.
+ (font-lock-after-change-function): Don't handle f-l-lines-before here.
+
+2005-08-31 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-handle-make-auto-save-file-name):
+ Deactivate temporarily advice if active (not needed for Emacs 22,
+ but for backwards compatibility).
+ (tramp-exists-file-name-handler): Rewrite. First implementation
+ was too simple.
+ (tramp-advice-make-auto-save-file-name):
+ Call `tramp-handle-make-auto-save-file-name' (again, just for
+ backwards compatibility).
+
+2005-08-31 Reto Zimmermann <reto@gnu.org>
+
+ * progmodes/vhdl-mode.el
+ (vhdl-update-sensitivity-list): Handle multi-dimensional array access.
+ (vhdl-end-p): Fix indentation bug "else" after "-- when".
+ (vhdl-set-default-project): New function (easier setting of default).
+ (vhdl-port-copy): Handle extended identifiers for generics.
+ (vhdl-compiler-alist): Better description for error message regexp.
+ (vhdl-make): Query for target, use previous as default.
+ (vhdl-port-copy): Fix port copy for port names starting with "signal".
+ (vhdl-font-lock-keywords-2): Fix fontification for record
+ el. assign.
+ (vhdl-speedbar-make-subpack-line): Add package body link.
+ (vhdl-generate-makefile-1): Not include itself as dependency.
+ (vhdl-font-lock-init): Highlight c-preprocessor directives.
+ (vhdl-*ward-syntactic-ws): Skip c-preprocessor directives.
+ (vhdl-get-syntactic-context): Handle c-preprocessor directives.
+ (vhdl-update-sensitivity-list): Start scan at opening parenthesis.
+ (vhdl-fixup-whitespace-region): Fix jumping point (infinite loop).
+ (vhdl-update-sensitivity-list-buffer): Add string argument for `error'.
+ (vhdl-import-project): Add string argument for `error'.
+ (vhdl-compose-configuration)
+ (vhdl-compose-configuration-architecture): Add configuration
+ declaration generation.
+ (vhdl-scan-directory-contents): Scan for block/generate hierarchy.
+ (vhdl-trailer-re): Add "record" keyword (better indentation).
+ (vhdl-fixup-whitespace-region): "[^ \t\"-]+" instead of
+ "[^ \t-\"]+".
+ (vhdl-font-lock-keywords-2): Not highlight formal parameter after `|'.
+ (vhdl-testbench-entity-file-name)
+ (vhdl-testbench-architecture-file-name): Allow separate
+ customization of testbench file names.
+ (vhdl-beginning-of-block): Handle optional subprogram parameter list.
+ (vhdl-get-visible-signals): Allow newline within alias declaration.
+ (vhdl-update-sensitivity-list): Signal read only on certain attributes.
+ (vhdl-fixup-whitespace-region): Fix bug with strings (double quotes).
+ (member-ignore-case): Alias for missing function in XEmacs.
+ (vhdl-compiler-alist): Add unit-to-file name mapping for Cadence NC.
+ (vhdl-update-sensitivity-list): Ignore case on read signals.
+ (vhdl-replace-string): Adjust case only for file names.
+ (vhdl-update-sensitivity-list): Fix search for read signals.
+ (vhdl-update-sensitivity-list): Exclude formal parameters.
+ (vhdl-get-visible-signals): Include aliases of signals.
+ (vhdl-get-visible-signals): Fix signal name searching.
+ (vhdl-port-flatten, vhdl-port-reverse-direction): Better message.
+ (vhdl-fixup-whitespace-region): Fix for character
+ literals (e.g. `:').
+
+2005-08-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * ansi-color.el (comint-last-output-start):
+ * bs.el (font-lock-verbose):
+ * diff-mode.el (add-log-buffer-file-name-function):
+ * dired-x.el (vm-folder-directory):
+ * faces.el (help-xref-stack-item):
+ * files.el (font-lock-keywords):
+ * find-lisp.el (dired-buffers, dired-subdir-alist):
+ * ido.el (cua-inhibit-cua-keys):
+ * log-view.el (cvs-minor-wrap-function):
+ * outline.el (font-lock-warning-face):
+ * simple.el (compilation-current-error):
+ * speedbar.el (ange-ftp-path-format, efs-path-regexp)
+ (font-lock-keywords, x-pointer-hand2, x-pointer-top-left-arrow):
+ * tooltip.el (comint-prompt-regexp):
+ * w32-fns.el (explicit-shell-file-name):
+ * term/mac-win.el (mac-charset-info-alist)
+ (mac-services-selection, mac-system-script-code):
+ * term/tty-colors.el (msdos-color-values):
+ * term/w32-win.el (xlfd-regexp-registry-subnum):
+ * term/x-win.el (x-keysym-table, x-selection-timeout)
+ (x-session-id, x-session-previous-id):
+ * textmodes/ispell.el (mail-yank-prefix):
+ * textmodes/makeinfo.el (tex-end-of-header, tex-start-of-header):
+ * textmodes/org.el (calc-embedded-close-formula)
+ (calc-embedded-open-formula)
+ (font-lock-unfontify-region-function):
+ * textmodes/reftex-global.el (isearch-next-buffer-function)
+ (TeX-master):
+ * textmodes/reftex.el (font-lock-keywords):
+ * textmodes/tex-mode.el (font-lock-comment-face)
+ (font-lock-doc-face):
+ * textmodes/texinfo.el (outline-heading-alist):
+ Add defvars.
+
+ * textmodes/artist.el (x-pointer-crosshair): Add defvar.
+ (artist-spray-chars, artist-mode-init, artist-replace-string)
+ (artist-select-erase-char, artist-vap-find-endpoints-horiz)
+ (artist-vap-find-endpoints-vert, artist-vap-find-endpoints-swne)
+ (artist-vap-find-endpoints-nwse): "?\ " -> "?\s".
+
+ * textmodes/conf-mode.el (outline-heading-end-regexp): Add defvar.
+ (conf-align-assignments): "?\ " -> "?\s".
+
+ * textmodes/reftex-index.el (TeX-master): Add defvar.
+ (reftex-index-phrases-marker): Move up defvar.
+
+ * textmodes/reftex-toc.el (zmacs-regions): Add defvar.
+ (reftex-toc-include-labels-indicator)
+ (reftex-toc-include-index-indicator)
+ (reftex-toc-max-level-indicator): Move up declarations.
+
+ * net/tramp.el (tramp-handle-make-auto-save-file-name): Pass list
+ of args to `tramp-run-real-handler', even if it's empty in this case.
+
+2005-08-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dired.el (dired-move-to-filename-regexp): Add date format for
+ Mac OS X 10.3 in East Asian locales.
+
+2005-08-31 Michael Albinus <michael.albinus@gmx.de>
+
+ * files.el (make-auto-save-file-name): Add file name handler call
+ if applicable.
+
+ * net/tramp.el (tramp-file-name-handler-alist)
+ (tramp-file-name-for-operation): Add `make-auto-save-file-name'.
+ (tramp-handle-make-auto-save-file-name): Rename from
+ `tramp-make-auto-save-file-name'.
+ (tramp-exists-file-name-handler): New defun.
+ (tramp-advice-make-auto-save-file-name): Make defadvice only when
+ `make-auto-save-file-name' is not a magic file name operation.
+
+2005-08-30 Richard M. Stallman <rms@gnu.org>
+
+ * files.el (risky-local-variable-p):
+ Match `-predicates' and `-commands'.
+
+ * cus-edit.el (custom-buffer-sort-alphabetically): Default to t.
+ (custom-save-all): Visit the file if necessary;
+ kill the buffer if we created it.
+ (custom-save-delete): Don't visit file or kill buffer here.
+
+2005-08-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-special-keyword): New face.
+ (org-table-copy-down, org-table-eval-formula)
+ (org-table-recalculate, org-init-section-numbers):
+ Use `string-to-number' instead of `string-to-int'.
+ (org-get-location): Use `insert-buffer-substring' instead of
+ `insert-buffer'.
+ (org-modify-diary-entry-string): New function.
+ (org-get-entries-from-diary): Set the hook for `add-to-diary-list'.
+ (org-disable-agenda-to-diary): Rename from `org-disable-diary'.
+ (org-toggle-fixed-width-section): Use QUOTE keyword if there is no
+ active region.
+ (org-export-as-html): Handle QUOTE keyword.
+ (org-quote-string): New option.
+ (org-bookmark-jump-unhide): New function, used for
+ `bookmark-after-jump-hook'.
+ (org-diary-default-entry): Apply only when not called through
+ `org-agenda'.
+
+2005-08-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * net/eudc.el (mode-popup-menu):
+ * play/handwrite.el (ps-printer-name, ps-lpr-command):
+ * progmodes/ada-mode.el (compile-auto-highlight)
+ (skeleton-further-elements):
+ * progmodes/autoconf.el (font-lock-syntactic-keywords):
+ * progmodes/cmacexp.el (msdos-shells):
+ * progmodes/compile.el (font-lock-extra-managed-props)
+ (font-lock-keywords, font-lock-maximum-size)
+ (font-lock-support-mode):
+ * progmodes/grep.el (font-lock-lines-before):
+ * progmodes/idlw-complete-structtag.el (idlwave-completion-help-info):
+ * progmodes/mixal-mode.el (compile-command):
+ * progmodes/perl-mode.el (font-lock-comment-face)
+ (font-lock-doc-face, font-lock-string-face):
+ * progmodes/prolog.el (comint-prompt-regexp):
+ * progmodes/sh-script.el (font-lock-comment-face)
+ (font-lock-set-defaults, font-lock-string-face):
+ * progmodes/sql.el (font-lock-keyword-face)
+ (font-lock-set-defaults, font-lock-string-face):
+ * progmodes/vhdl-mode.el (compilation-file-regexp-alist)
+ (itimer-version, lazy-lock-defer-contextually)
+ (lazy-lock-defer-on-scrolling, lazy-lock-defer-on-the-fly):
+ Add defvars.
+
+ * progmodes/cperl-mode.el (cperl-electric-lbrace)
+ (cperl-electric-keyword, cperl-electric-pod)
+ (cperl-electric-backspace, cperl-forward-re)
+ (cperl-fix-line-spacing, cperl-fill-paragraph): "?\ " -> "?\s".
+ (vc-rcs-header, vc-sccs-header): Add defvars.
+
+ * progmodes/fortran.el (fortran-indent-to-column): "?\ " -> "?\s".
+ (font-lock-syntactic-keywords, gud-find-expr-function):
+ Add defvars.
+
+ * progmodes/gdb-ui.el (tool-bar-map): Add defvar.
+ (gdb-frame-parameters): Declare before use.
+
+ * progmodes/gud.el (gdb-active-process, gdb-define-alist)
+ (gdb-macro-info, gdb-server-prefix, gdb-show-changed-values)
+ (gdb-var-changed, gdb-var-list, tool-bar-map): Add defvars.
+ (gud-expr-compound-sep, gud-expr-compound): "?\ " -> "?\s".
+
+ * progmodes/idlw-help.el (browse-url-generic-args): Add defvar.
+ (idlwave-help-with-source): Use `insert-buffer-substring', not
+ `insert-buffer'.
+
+2005-08-29 Juri Linkov <juri@jurta.org>
+
+ * outline.el (hide-entry, hide-leaves, outline-toggle-children):
+ Put outline-back-to-heading function call inside save-excursion.
+
+2005-08-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * man.el (Man-init-defvars, Man-translate-references)
+ (Man-support-local-filenames, Man-highlight-references):
+ * progmodes/sql.el (sql-interactive-mode):
+ * shell.el (shell-mode, shell-resync-dirs): Fix typos in docstrings.
+
+ * emacs-lisp/checkdoc.el (compilation-error-regexp-alist)
+ (compilation-mode-font-lock-keywords): Add defvars.
+ (checkdoc-interactive-loop): "?\ " -> "?\s".
+
+ * emacs-lisp/lisp-mode.el (font-lock-comment-face)
+ (font-lock-doc-face, font-lock-string-face)
+ (font-lock-keywords-case-fold-search): Add defvars.
+ (emacs-lisp-mode-syntax-table): "?\ " -> "?\s".
+
+ * obsolete/sun-fns.el (mouse-select-or-drag-move-point):
+ Don't pass X and Y (they are ignored anyway).
+ (mouse-set-mark, mouse-select-window, mouse-delete-other-windows)
+ (mouse-delete-window): Make arguments optional.
+
+ * obsolete/rnews.el (news-add-news-group): Don't use `end-of-line'.
+ (caesar-translate-table, minor-modes, news-buffer-save)
+ (news-group-name, news-minor-modes): Add defvars.
+
+ * emacs-lisp/lselect.el (mouse-highlight-priority)
+ (x-lost-selection-functions, zmacs-regions):
+ * emacs-lisp/pp.el (font-lock-verbose):
+ * emacs-lisp/syntax.el (font-lock-beginning-of-syntax-function):
+ * emacs-lisp/tcover-ses.el (ses-initial-global-parameters)
+ (ses-mode-map):
+ * emacs-lisp/tcover-unsafep.el (safe-functions):
+ * international/mule-cmds.el (mac-system-coding-system)
+ (mac-system-locale):
+ * language/ethio-util.el (rmail-current-message)
+ (rmail-message-vector):
+ * language/thai-util.el (thai-auto-composition-mode):
+ * mail/metamail.el (rmail-current-message, rmail-message-vector):
+ * mail/mspools.el (rmail-inbox-list, vm-crash-box)
+ (vm-folder-directory, vm-init-file, vm-init-file-loaded)
+ (vm-primary-inbox, vm-spool-files):
+ * mail/rmail.el (deleted-head, font-lock-fontified)
+ (mail-abbrev-syntax-table, mail-abbrevs, messages-head)
+ (rmail-use-spam-filter, rsf-beep, rsf-sleep-after-message)
+ (total-messages):
+ * mail/rmail-spam-filter.el (bbdb/mail_auto_create_p)
+ (rmail-summary-mode-map):
+ * mail/rmailkwd.el (rmail-buffer, rmail-current-message)
+ (rmail-last-label, rmail-last-multi-labels)
+ (rmail-summary-vector, rmail-total-messages):
+ * mail/rmailmsc.el (rmail-current-message, rmail-inbox-list):
+ * mail/rmailsum.el (msgnum):
+ * mail/uce.el (gnus-original-article-buffer, mail-reply-buffer)
+ (rmail-current-message):
+ * obsolete/fast-lock.el (font-lock-face-list):
+ * obsolete/rnewspost.el (mail-reply-buffer):
+ * obsolete/scribe.el (compile-command):
+ * obsolete/x-menu.el (x-process-mouse-hook): Add defvars.
+
+2005-08-28 John Paul Wallington <jpw@gnu.org>
+
+ * ibuf-ext.el (ibuffer-auto-update-changed):
+ Use `frame-or-buffer-changed-p' to check whether we need to update.
+ (ibuffer-auto-mode): Don't advise `get-buffer-create' and
+ `kill-buffer'. Initialise `ibuffer-auto-buffers-changed'
+ as a `frame-or-buffer-changed-p' state vector instead.
+
+2005-08-27 Romain Francoise <romain@orebokech.com>
+
+ * textmodes/makeinfo.el (makeinfo-compile):
+ Use `compilation-start'. Set `next-error-function' according to
+ `disable-errors'.
+ (makeinfo-next-error): New function.
+ (makeinfo-region): Adjust to new `makeinfo-compile' prototype.
+ (makeinfo-buffer): Likewise.
+
+ * progmodes/compile.el (compilation-start): Add autoload cookie.
+
+ * progmodes/antlr-mode.el: Don't autoload `compilation-start'.
+ * textmodes/sgml-mode.el: Likewise.
+ * progmodes/python.el: Likewise.
+
+2005-08-27 Eli Zaretskii <eliz@gnu.org>
+
+ * simple.el (blink-matching-paren-distance): Document the meaning
+ of nil value, and allow to customize to nil.
+
+ * eshell/esh-ext.el (eshell-windows-shell-file): Look for
+ command.com, not command.exe.
+
+2005-08-26 John Wiegley <johnw@newartisans.com>
+
+ * eshell/esh-cmd.el (eshell-rewrite-named-command): Change the
+ code around a bit so that an extraneous nil argument is not added
+ to a command when no args are given.
+
+ * eshell/esh-arg.el (eshell-parse-double-quote): If a
+ double-quoted argument resolves to nil, return it as an empty
+ string rather than as nil. This made it impossible to pass "" to
+ a shell script as a null string argument.
+
+2005-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * outline.el (outline-invent-heading): New fun.
+ (outline-promote, outline-demote): Use it.
+ (outline-move-subtree-down): Remove unused vars `re' and `txt'.
+ (outline-end-of-subtree): Remove unused var `opoint'.
+
+2005-08-26 David Reitter <david.reitter@gmail.com>
+
+ * menu-bar.el (truncate-lines, write-file, print-buffer)
+ (ps-print-buffer-faces, ps-print-buffer, split-window):
+ Disable menu items when the frame they refer to is invisible, or when
+ they refer to a buffer and the minibuffer is selected.
+
+2005-08-26 Pavel Kobiakov <pk_at_work@yahoo.com>
+
+ * progmodes/flymake.el (flymake-highlight-err-lines):
+ Use save-excursion around flymake-highlight-line to preserve point.
+
+2005-08-26 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/octave-mod.el: Change Author and Maintainer address.
+ (octave-maintainer-address): Change Kurt's email address.
+ * progmodes/octave-inf.el: Change Author and Maintainer address.
+ * progmodes/octave-hlp.el: Change Author and Maintainer address.
+
+2005-08-26 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (version-list-<, version-list-<=, version-list-=):
+ Rename from integer-list-*.
+ (version-list-not-zero): Likewise. Fix while loop.
+ (version=): Use version-list-= instead of string-equal.
+
+2005-08-26 Richard M. Stallman <rms@gnu.org>
+
+ * outline.el (outline-promote): Try shortening the heading.
+ As last resort, read the heading to use.
+ (outline-demote): As last resort, read the heading to use.
+
+2005-08-26 Romain Francoise <romain@orebokech.com>
+
+ * progmodes/compile.el (compilation-start): Doc fix.
+
+ * progmodes/antlr-mode.el (antlr-default): Fix defface form.
+ (antlr-font-lock-additional-keywords): Fix reference to
+ `antlr-font-lock-literal-regexp' erroneously changed during the
+ mass face rename.
+ (antlr-run-tool): Use `compilation-start'.
+
+ * textmodes/sgml-mode.el (sgml-validate): Use `compilation-start'
+ instead of the obsolete `compile-internal'.
+
+2005-08-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * calendar/cal-bahai.el (date, displayed-month, displayed-year)
+ (number, original-date):
+ * calendar/cal-china.el (date):
+ * calendar/cal-coptic.el (date):
+ * calendar/cal-french.el (date):
+ * calendar/cal-hebrew.el (date, entry, number, original-date):
+ * calendar/cal-islam.el (date, number, original-date):
+ * calendar/cal-iso.el (date):
+ * calendar/cal-julian.el (date):
+ * calendar/cal-mayan.el (date):
+ * calendar/cal-menu.el (date, event):
+ * calendar/cal-persia.el (date):
+ * calendar/lunar.el (date):
+ * calendar/solar.el (date): Add defvars.
+
+ * emerge.el:
+ * ibuffer.el:
+ * info-xref.el:
+ * obsolete/bg-mouse.el:
+ * obsolete/sun-curs.el:
+ * obsolete/swedish.el: Move the `defvar's to the top level.
+
+ * smerge-mode.el (smerge-refined-change): Add :group.
+
+2005-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * smerge-mode.el (smerge-remove-props): Make the args non-optional.
+ (smerge-keep-n): Remove props.
+ (smerge-keep-base, smerge-keep-other, smerge-keep-mine)
+ (smerge-keep-current, smerge-kill-current): Don't remove props anymore
+ now that it's done in smerge-keep-n.
+ (smerge-refined-change): New face.
+ (smerge-refine-chopup-region, smerge-refine-highlight-change)
+ (smerge-refine): New funs.
+ (smerge-basic-map): Bind smerge-refine.
+
+2005-08-25 Juri Linkov <juri@jurta.org>
+
+ * progmodes/grep.el (grep, grep-mode): Make buffer-local variables
+ compilation-process-setup-function and compilation-disable-input
+ in grep-mode instead of let-bindings in grep.
+
+ * menu-bar.el (menu-bar-options-menu, menu-bar-options-save):
+ Delete "Automatic File De/compression" (auto-compression-mode).
+
+2005-08-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * obsolete/bg-mouse.el: Move to obsolete/ from term/.
+ Silence warning about non-existent variable.
+
+2005-08-25 Richard M. Stallman <rms@gnu.org>
+
+ * menu-bar.el (menu-bar-describe-menu): Delete "What's New".
+ Rename "Describe Key" to "Describe Key or Mouse Operation".
+
+ * mail/mailalias.el (build-mail-aliases): Delete comments
+ from the contents before processing them.
+
+ * isearch.el (isearch-edit-string): Erase the Search prompt
+ if user enters an empty string and there is no default.
+
+ * comint.el (comint-file-name-prefix): Add autoload.
+
+2005-08-25 Joe Corneli <jcorneli@math.utexas.edu>
+
+ * subr.el (play-sound): Rearrange to avoid warning.
+
+2005-08-25 Carsten Dominik <dominik@science.uva.nl>
+
+ * calendar/diary-lib.el (diary-modify-entry-list-string-function):
+ New hook.
+ (add-to-diary-list): Call `diary-modify-entry-list-string-function'.
+
+2005-08-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Simplify.
+
+ * custom.el (custom-theme-set-variables): Sort minor modes last.
+
+2005-08-24 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * subr.el (version-separator, version-regexp-alist): New vars used by
+ version comparison funs.
+ (integer-list-<, integer-list-=, integer-list-<=)
+ (integer-list-not-zero): New funs for integer list comparison.
+ (version-to-list, version=, version<, version<=): New funs for version
+ comparison.
+
+2005-08-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * emerge.el (merge-begin, merge-end, template, A-begin, A-end)
+ (B-begin, B-end, diff, diff-vector, valid-diff): Defvar at compile
+ time to silence the byte-compiler.
+
+ * ibuffer.el (ibuffer-compile-make-eliding-form)
+ (ibuffer-check-formats): Use `with-no-warnings' to hide references
+ to `ibuffer-elide-long-columns' (which is defined on ibuffer.el,
+ so it's silly to get warnings for it).
+ (ibuffer-auto-mode, ibuffer-cached-filter-formats)
+ (ibuffer-compiled-filter-formats, ibuffer-filter-format-alist)
+ (ibuffer-filter-group-kill-ring, ibuffer-filter-groups)
+ (ibuffer-filtering-qualifiers, ibuffer-hidden-filter-groups)
+ (ibuffer-inline-columns, ibuffer-show-empty-filter-groups)
+ (ibuffer-tmp-hide-regexps, ibuffer-tmp-show-regexps):
+ Defvar at compile time.
+ (ibuffer-compiled-formats, ibuffer-cached-eliding-string)
+ (ibuffer-cached-formats, ibuffer-cached-elide-long-columns):
+ Declare them before use.
+
+ * info-xref.el (info-xref-xfile-alist, info-xref-filename-heading)
+ (info-xref-good, info-xref-bad): Defvar at compile time.
+
+ * obsolete/mlsupport.el (filter-region, execute-monitor-command):
+ Use `let*' instead of `let'.
+
+ * obsolete/sun-curs.el (icon-edit, *mouse-window*, *mouse-x*)
+ (*mouse-y*, menu, char): Defvar at compile time.
+ (sc::menu): Declare it before use.
+ (sc::pack-one-line): Use `let', not `let*'.
+
+ * obsolete/swedish.el (news-inews-hook, news-group-hook-alist)
+ (mail-send-hook): Defvar at compile time.
+
+ * term/bg-mouse.el (bg-mouse-x, bg-mouse-y, bg-cursor-window):
+ Defvar at compile time.
+
+ * term/sun-mouse.el (current-global-mousemap)
+ (current-local-mousemap): Declare them before use.
+
+2005-08-24 Carsten Dominik <dominik@science.uva.nl>
+
+ * bookmark.el (bookmark-after-jump-hook): New hook.
+ (bookmark-jump): Run `bookmark-after-jump-hook'.
+
+2005-08-23 Juri Linkov <juri@jurta.org>
+
+ * faces.el (minibuffer-prompt): Doc fix.
+
+2005-08-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/xscheme.el: Trivial changes to silence warnings.
+ (xscheme-previous-mode, xscheme-previous-process-state):
+ Add defvars.
+ (xscheme-last-input-end, xscheme-process-command-line)
+ (xscheme-process-name, xscheme-buffer-name)
+ (xscheme-expressions-ring-max, xscheme-expressions-ring)
+ (xscheme-expressions-ring-yank-pointer, xscheme-running-p)
+ (xscheme-control-g-synchronization-p)
+ (xscheme-control-g-disabled-p, xscheme-string-receiver)
+ (default-xscheme-runlight, xscheme-runlight)
+ (xscheme-runlight-string, xscheme-process-filter-state)
+ (xscheme-allow-output-p, xscheme-prompt, xscheme-mode-string):
+ Move to beginning of file.
+ (scheme-interaction-mode-commands-alist)
+ (scheme-interaction-mode-map, scheme-debugger-mode-map):
+ Declare them before use. Note: the initialization code for the
+ variables has not been moved because it uses functions that reference
+ the variables.
+ (xscheme-control-g-message-string, xscheme-process-filter-alist)
+ (xscheme-prompt-for-expression-map): Declare them before use.
+ (scheme-debugger-mode-commands): "?\ " -> "?\s".
+
+2005-08-23 Ed Swarthout <ed.swarthout@gmail.com> (tiny change)
+
+ * hexl.el (hexl-print-current-point-info): Fix simple spelling error.
+
+2005-08-22 Juri Linkov <juri@jurta.org>
+
+ * faces.el (set-face-underline): Delete this duplicate function
+ and make an obsolete alias to set-face-underline-p.
+ (set-face-underline-p): Use docstring of set-face-underline.
+ (describe-face): Create hyperlink to parent face.
+
+ * info.el (Info-insert-dir): Use save-excursion around
+ insert-buffer-substring.
+ (Info-isearch-search): Use LITERAL arg of replace-regexp-in-string.
+ (Info-escape-percent): Delete function.
+ (Info-fontify-node): Replace Info-escape-percent by
+ replace-regexp-in-string with REP arg set to lambda that
+ duplicates `%' and preserves text properties.
+
+ * progmodes/compile.el (compilation-disable-input): Doc fix.
+ (define-compilation-mode): Doc fix and refill.
+ (kill-compilation): Use `mode-name' in the error message.
+ (compilation-find-file): Use `compilation-error' in the
+ read-file-name's prompt.
+
+2005-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * smerge-mode.el (smerge-basic-map): Bind smerge-combine-with-next.
+ (smerge-auto-leave): Make undo re-enable the mode.
+ (debug-ignored-errors): Add the user-error of impossible resolution.
+ (smerge-resolve): Move things around a bit, in preparation for later.
+ (smerge-diff): Don't fail if the buffer has no associated file.
+ (ediff-ancestor-buffer, ediff-quit-hook): Quieten byte-compiler.
+ (smerge-conflict-overlay): New function.
+ (smerge-match-conflict): Don't add text properties here.
+ (smerge-find-conflict): Instead, add an overlay here.
+ Also check for the case where we're inside a conflict already, so as to
+ obviate the need for font-lock-multiline, which is unbearably slow with
+ large conflicts and ciomplex font-lock patterns.
+ (smerge-remove-props): Remove overlay rather than text-properties.
+ (smerge-mode): Don't set font-lock-multiline.
+ Remove overlays when turned off.
+
+2005-08-21 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-ignore-item-p): Use save-match-data.
+ Bind case-fold-search to ido-case-fold locally.
+
+2005-08-20 Richard M. Stallman <rms@gnu.org>
+
+ * files.el (normal-mode): If font lock is on, turn it off and on.
+
+ * subr.el (replace-regexp-in-string): Doc fix.
+
+ * startup.el (command-line-1): Don't suppress startup screen
+ due to existing processes.
+
+ * progmodes/grep.el (grep): Bind compilation-disable-input to t.
+
+ * progmodes/compile.el (compilation-disable-input): Default to nil.
+
+2005-08-20 Kevin Rodgers <ihs_4664@yahoo.com> (tiny change)
+
+ * progmodes/compile.el (compilation-disable-input): New defcustom.
+ (compilation-start): If compilation-disable-input is non-nil, send
+ EOF to the compilation process.
+
+2005-08-20 Eli Zaretskii <eliz@gnu.org>
+
+ * textmodes/tex-mode.el (tex-bibtex-file, tex-send-tex-command):
+ Run the argument of tex-shell-cd-command through
+ convert-standard-filename, to get the correct style of slashes on
+ Windows, and enclose the result in quotes, in case the file name
+ includes whitespace or other special characters.
+
+2005-08-19 Andreas Schwab <schwab@suse.de>
+
+ * progmodes/gud.el (gud-kill-buffer-hook): Don't kill unrelated
+ process.
+
+2005-08-18 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (minibuffer-prompt-properties): Correct typo.
+
+2005-08-18 Kim F. Storm <storm@cua.dk>
+
+ * scroll-lock.el: Fix errors due to incorrect line wrapping.
+
+2005-08-18 Richard M. Stallman <rms@gnu.org>
+
+ * scroll-lock.el: New file.
+
+2005-08-18 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * dired.el (dired-move-to-end-of-filename):
+ Handle fifo as rendered by "ls -lF": Don't include trailing "|".
+
+2005-08-18 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-everywhere): Fix defcustom :set function to disable
+ rather than toggle mode when custom value is nil.
+ (ido-everywhere): Fix defun doc string.
+
+2005-08-17 Richard M. Stallman <rms@gnu.org>
+
+ * cus-start.el (minibuffer-prompt-properties): Use "Don't Enter"
+ as tag instead of "Inviolable".
+
+2005-08-17 Kim F. Storm <storm@cua.dk>
+
+ * windmove.el (windmove-coordinates-of-position): Remove.
+ (windmove-coordinates-of-window-position): Remove.
+ (windmove-reference-loc): Use posn-at-point instead.
+
+ * subr.el (insert-for-yank-1): Doc fix.
+
+ * ido.el (ido-enter-matching-directory): Rename from
+ ido-enter-single-matching-directory. Change `slash' choice to
+ `only'. Add `first' choice.
+ (ido-exhibit): Adapt to above changes.
+
+2005-08-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * Makefile.in: Expand comment about building loaddefs.el.
+
+2005-08-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (toggle-gdb-use-inferior-io-buffer):
+ Comment use of defadvice.
+
+ * progmodes/gud.el (gud-jump): Rework for gdb-ui.
+
+2005-08-15 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * buff-menu.el, compare-w.el, emacs-lisp/testcover.el,
+ * play/gomoku.el, play/mpuz.el, progmodes/flymake.el,
+ * progmodes/gdb-ui.el, progmodes/idlw-help.el,
+ * progmodes/idlw-shell.el, progmodes/ld-script.el,
+ * progmodes/which-func.el, ruler-mode.el, strokes.el,
+ * textmodes/sgml-mode.el, textmodes/table.el: Do not use face-alias
+ for backward compatibility for faces that did not appear in the
+ previous Emacs release.
+
+ * simple.el (next-error-follow-minor-mode): Fix init value and lighter.
+
+2005-08-15 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-delete-region): Return t if
+ deleted region was non-empty.
+ (cua-replace-region): Inhibit overwrite-mode for
+ self-insert-command if replaced region was non-empty.
+ (cua--explicit-region-start, cua--status-string): Make them
+ buffer-local at top-level...
+ (cua-mode): ...rather than when mode is enabled.
+
+2005-08-15 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/vhdl-mode.el (vhdl-emacs-21):
+ Set t for Emacs 21, 22, and so on.
+
+2005-08-15 David Ponce <david@dponce.com>
+
+ * tree-widget.el: Update Commentary header.
+ (tree-widget-theme): Doc fix.
+ (tree-widget-space-width): New option.
+ (tree-widget-image-properties): Look up in the default theme too.
+ (tree-widget--cursors): Only for images with arrow pointer shape.
+ (tree-widget-lookup-image): Pointer shape is hand by default.
+ (tree-widget-icon): Rename generic icon widget from
+ `tree-widget-control'.
+ (tree-widget-*-icon): Rename from `tree-widget-*-control' and
+ derive from `tree-widget-icon'.
+ (tree-widget-handle): Improve default look and feel of the text
+ representation.
+ (tree-widget): Rename :*-control properties to :*-icon properties.
+ Add :action and :help-echo properties.
+ (tree-widget-after-toggle-functions): Move.
+ (tree-widget-close-node, tree-widget-open-node): Remove.
+ (tree-widget-before-create-icon-functions): New hook.
+ (tree-widget-value-create): Update to allow customization of icons
+ and nodes at run-time via that new hook.
+ (tree-widget-icon-create, tree-widget-leaf-node-icon-p)
+ (tree-widget-icon-action, tree-widget-icon-help-echo)
+ (tree-widget-action, tree-widget-help-echo): New functions.
+
+2005-08-15 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-buffer-internal): Use with-no-warnings.
+ (ido-make-merged-file-list): Use while-no-input.
+
+2005-08-15 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-mark-duplications-flag): Doc fix.
+ (flyspell-large-region): Fix doc and custom type.
+
+2005-08-14 Richard M. Stallman <rms@gnu.org>
+
+ * files.el (interpreter-mode-alist): Doc fix.
+
+ * mail/rmail.el (rmail-nonignored-headers): New variable.
+ (rmail-clear-headers): Use it.
+ (rmail-reply): Better handling of mail-followup-to header.
+
+ * progmodes/sh-script.el (sh-font-lock-keywords-var):
+ Rename variable from sh-font-lock-keywords. In the `shell' entry,
+ don't try to refer to executable-font-lock-keywords.
+ (sh-font-lock-keywords-var-1): Rename from sh-font-lock-keywords-1.
+ (sh-font-lock-keywords-var-2): Rename from sh-font-lock-keywords-2.
+ (sh-font-lock-keywords): Append executable-font-lock-keywords here.
+ (sh-mode): Set comment-start-skip, local-abbrev-table,
+ imenu-case-fold-search.
+ (sh-set-shell): Don't set them here.
+ (sh-feature): Simplify. Get rid of the eval-a-variable feature.
+ Don't cache the results in the original alist; don't ever modify
+ that alist.
+
+ * textmodes/flyspell.el (flyspell-mode): Autoload a defvar.
+
+ * textmodes/ispell.el (lookup-words): Cope with case where ARGS is
+ empty.
+
+2005-08-15 Andreas Schwab <schwab@suse.de>
+
+ * desktop.el: Put autoload cookie at risky-local-variable declarations.
+
+ * dired.el, info.el, mail/rmail.el: Revert last change.
+
+2005-08-14 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * dired.el: Fix dependency bug: Wrap `desktop-buffer-mode-handlers'
+ modification in `eval-after-load' form.
+ * info.el: Likewise.
+ * mail/rmail.el: Likewise.
+
+2005-08-14 Juri Linkov <juri@jurta.org>
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Remove highlighting of "Compilation started". Highlight only
+ the word "finished" in "Compilation finished". Add highlighting
+ of "interrupt", "killed", "terminated" and the exit code.
+ (compilation-start): Add newline after header. Use exactly the
+ same time stamp format as the finishing message.
+ (compilation-mode-map): Add ellipsis to "Search Files (grep)".
+
+ * progmodes/grep.el (grep-mode-map): Add ellipsis to "Another grep".
+ (grep-mode-font-lock-keywords): Don't highlight "Grep started".
+ Add highlighting of "interrupt", "killed", "terminated".
+
+ * delsel.el (delete-selection-pre-hook): If overwrite-mode is
+ enabled and the current command is self-insert-command, call it
+ explicitly with overwrite-mode bound to nil, to not allow it
+ to delete the character after the selected region.
+
+2005-08-12 Matt Hodges <MPHodges@member.fsf.org>
+
+ * emacs-lisp/eldoc.el: Add move-beginning-of-line,
+ move-end-of-line, end-of-line, and beginning-of-line to the list
+ of commands after which the echo area is updated.
+
+2005-08-12 Eli Zaretskii <eliz@gnu.org>
+
+ * cus-edit.el (custom-save-all, custom-save-delete):
+ Bind recentf-exclude to exclude custom-file.
+
+2005-08-12 Ehud Karni <ehud@unix.mvs.co.il>
+
+ * mail/rmailsum.el (rmail-summary-end-of-message): New command
+ to go to the bottom of the mail message. Added to
+ `rmail-summary-mode-map' with key "/".
+ (rmail-summary-show-message): New (internal) function for use by
+ both `rmail-summary-beginning/end-of-message'.
+ (rmail-summary-beginning-of-message): Change to use
+ rmail-summary-show-message.
+
+ * mail/rmail.el (rmail-end-of-message): New command to go to the
+ end of the current message. Added to `rmail-mode-map' with key "/".
+ (rmail-beginning-of-message): Fix to work as documented.
+ (rmail-mode): Change documentation.
+
+ * progmodes/compile.el (compilation-start): Add the line
+ "Compilation started" with compilation start time.
+ (compilation-mode-font-lock-keywords): Add `started' to keywords.
+
+2005-08-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * menu-bar.el (menu-bar-options-menu): Standardize capitalization
+ of menu items.
+
+2005-08-11 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (pop-global-mark): Reverse test of widen-automatically.
+
+ * battery.el (battery-status-function): Don't use ignore-errors.
+
+2005-08-11 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/generic.el (generic-font-lock-defaults): Declare with
+ define-obsolete-variable-alias.
+
+2005-08-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/ange-ftp.el: Use \\` and \\' instead of ^ and $ in regexps.
+ (ange-ftp-send-cmd): Revert last change, and expand
+ the comment explaining the problem.
+
+2005-08-10 Luc Teirlinck <teirllm@auburn.edu>
+
+ * ldefs-boot.el: Update.
+
+ * menu-bar.el (menu-bar-showhide-menu): Rename "Date, Time and Mail"
+ item to "Time, Load and Mail". Change help echo text.
+
+ * time.el (display-time-use-mail-icon, display-time-format)
+ (display-time-string-forms): Shorten first line of docstrings.
+
+2005-08-10 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el (desktop-buffer-mode-handlers):
+ Make non-customizable. Add autoload cookie. Change initial value to
+ nil; add elements in respective modules instead. Fix doc string.
+ (desktop-load-file): New function.
+ (desktop-minor-mode-handlers): New autoloaded variable.
+ (desktop-create-buffer): Call minor mode handlers.
+ Use desktop-load-file to load major and minor mode modules prior to
+ checking for a handler.
+ (desktop-save): Don't add nil to desktop-minor-modes for minor
+ modes with nil function in desktop-minor-mode-table. Don't delete
+ desktop file before rewriting it.
+ (desktop-locals-to-save): Add autoload cookie. Don't make
+ automatically buffer-local. Add variables column-number-mode,
+ size-indication-mode, indent-tabs-mode,
+ indicate-buffer-boundaries, indicate-empty-lines and
+ show-trailing-whitespace.
+ (desktop-clear): Allow desktop-clear-preserve-buffers to contain
+ regexps. Don't use desktop-clear-preserve-buffers-regexp.
+ (desktop-clear-preserve-buffers-regexp): Delete.
+ (desktop-clear-preserve-buffers): Update initial value and docstring.
+ (desktop-save-buffer): Fix doc string.
+
+ * hilit-chg.el: Add handler to desktop-minor-mode-handlers.
+ (hilit-chg-desktop-restore): New function.
+ (highlight-changes-mode): Add highlight-changes-mode to
+ desktop-locals-to-save.
+
+ * dired.el: Add handler to desktop-buffer-mode-handlers.
+ (dired-restore-desktop-buffer): Remove autoload cookie.
+ (dired-mode): Add autoload cookie.
+
+ * info.el: Add handler to desktop-buffer-mode-handlers.
+ (Info-restore-desktop-buffer): Remove autoload cookie.
+ (Info-mode): Add autoload cookie.
+
+ * mh-e/mh-e.el: Add handler to desktop-buffer-mode-handlers.
+ (mh-restore-desktop-buffer): Remove autoload cookie.
+ (mh-folder-mode): Add autoload cookie.
+
+ * mail/rmail.el: Add handler to desktop-buffer-mode-handlers.
+ (rmail-restore-desktop-buffer): Remove autoload cookie.
+
+2005-08-11 Masatake YAMATO <jet@gyve.org>
+
+ * hexl.el (hexl-address-region):
+ (hexl-ascii-region, hexl-font-lock-keywords):
+ (hexl-highlight-line-range): Use the term "region"
+ instead of "area" for consistency with the other symbols
+ defined in hexl.el.
+
+2005-08-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * menu-bar.el (menu-bar-options-save): Move `display-time-mode' to
+ correct group: it is set with `menu-bar-make-mm-toggle' (pointed
+ out by Juri Linkov). Add `display-battery-mode'.
+
+2005-08-09 Juri Linkov <juri@jurta.org>
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Remove `-text' from face variable names.
+ (compilation-error-file-name, compilation-warning-file-name)
+ (compilation-info-file-name): Delete faces.
+ (compilation-line-number, compilation-column-number):
+ Remove face underlining.
+ (compilation-message-face): Set to `underline' value by default.
+ (compilation-error-face, compilation-warning-face)
+ (compilation-info-face): Remove `-file-name' from face names.
+ (compilation-error-text-face, compilation-warning-text-face)
+ (compilation-info-text-face): Delete face variables.
+ (compilation-text-face): Delete function.
+
+ * progmodes/grep.el (grep-regexp-alist): Use `.+?' instead of `[^:\n]+'.
+ (grep-mode-font-lock-keywords): Use `.+?' instead of `[^\n-]+'.
+ (grep-error-face): Set to `compilation-error' instead of
+ `compilation-error-face' (which is redefined to `grep-hit-face' in
+ grep buffers).
+ (grep-mode-font-lock-keywords): Remove `-text' from face variable
+ names. Use `grep-error-face' instead of `compilation-error-text-face'.
+
+ * dired-aux.el (dired-do-query-replace-regexp):
+ Use `query-replace-read-args'.
+
+ * replace.el (query-replace-read-from, query-replace-read-to)
+ (query-replace-read-args): Rename arg `string' to `prompt'.
+
+ * menu-bar.el (menu-bar-showhide-menu): Add `showhide-battery'.
+
+2005-08-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * net/ange-ftp.el (ange-ftp-send-cmd): Make it work properly with
+ uploading files.
+ (ange-ftp-canonize-filename): Handle file names beginning with ~
+ correctly.
+
+2005-08-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * textmodes/fill.el (canonically-space-region)
+ (fill-context-prefix, fill-french-nobreak-p)
+ (fill-delete-newlines, fill-comment-paragraph)
+ (justify-current-line): "?\ " -> "?\s".
+
+2005-08-09 Ben North <ben@redfrontdoor.org> (tiny change)
+
+ * textmodes/fill.el (fill-nonuniform-paragraphs):
+ Improve argument/docstring consistency.
+
+2005-08-09 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/ispell.el (ispell-word): More fboundp checks.
+
+ * files.el (find-file-noselect): Don't call set-buffer-major-mode.
+ (find-file-noselect-1): Call it here, only if RAWFILE.
+ (normal-mode): Always set some major mode.
+ (save-some-buffers-action-alist): Change some explanation strings.
+ (file-name-non-special): In the `quote' method, use unwind-protect.
+
+2005-08-09 Magnus Henoch <mange@freemail.hu>
+
+ * textmodes/ispell.el (ispell-find-aspell-dictionaries): New command.
+ (ispell-have-aspell-dictionaries): New variable.
+ (ispell-aspell-data-dir, ispell-aspell-dict-dir): New variables.
+ (ispell-get-aspell-config-value): New function.
+ (ispell-aspell-find-dictionary): New function.
+ (ispell-aspell-add-aliases): New function.
+ (ispell-valid-dictionary-list): Call ispell-find-aspell-dictionaries if
+ appropriate. Don't look for ispell dictionaries if we use aspell.
+ (ispell-menu-map): Don't build a submenu of dictionaries.
+
+2005-08-09 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/sql.el (sql-interactive-mode-map): Use fboundp.
+ (sql-read-passwd): Use read-passwd.
+
+ * progmodes/idlw-toolbar.el (idlwave-toolbar)
+ (idlwave-toolbar-is-possible): Add defvars.
+
+ * progmodes/idlw-shell.el (idlwave-xemacs-hack-mouse-track):
+ Avoid warnings.
+
+ * progmodes/idlw-rinfo.el (idlwave-system-variables-alist)
+ (idlwave-system-class-info, idlwave-executive-commands-alist):
+ Use defvar.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Add autoload.
+
+ * mail/supercite.el (sc-ask, sc-no-blank-line-or-header):
+ Avoid warnings.
+
+ * mail/rmail.el (rmail-ignored-headers): Don't hide mime-version:
+ and content-type: headers.
+
+ * eshell/eshell.el (eshell): Avoid warnings about eshell-mode.
+
+ * emacs-lisp/map-ynp.el (map-y-or-n-p): Reorder the options
+ and rename some of them to be more self-explanatory.
+
+ * calendar/calendar.el (calendar-mode-map): Bind < and > usefully.
+
+ * startup.el (command-line-1): Implement -scriptload.
+
+ * replace.el (occur-engine): Initial *Occur* output not undoable.
+
+ * menu-bar.el (menu-bar-file-menu): Rename some menu items
+ and improve help strings.
+
+ * isearch.el (isearch-repeat): When changing direction,
+ mark search successful.
+
+ * ediff-init.el: Use (featurep 'xemacs).
+
+ * comint.el (send-invisible): Identify buffer, if not selected.
+
+ * align.el: Delete autoload for c-guess-basic-syntax.
+
+2005-08-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * textmodes/refbib.el (r2b-convert-record, r2b-convert-buffer):
+ Improve argument/docstring consistency. Doc fixes.
+ (r2b-variables, r2bv-address, r2bv-annote, r2bv-author)
+ (r2bv-booktitle, r2bv-date, r2bv-decade, r2bv-editor)
+ (r2bv-entry-kind, r2bv-institution, r2bv-journal, r2bv-keywords)
+ (r2bv-kn, r2bv-month, r2bv-note, r2bv-number, r2bv-ordering)
+ (r2bv-organization, r2bv-pages, r2bv-primary-author)
+ (r2bv-publisher, r2bv-school, r2bv-title, r2bv-title-first-word)
+ (r2bv-tr, r2bv-type, r2bv-volume, r2bv-where, r2bv-year):
+ Defvar at compile time.
+
+2005-08-09 Juri Linkov <juri@jurta.org>
+
+ * info.el: Replace `info' with upper-case `Info' where appropriate.
+ (info-title-1, info-title-2, info-title-3, info-title-4)
+ (info-menu-header): Move up face definitions.
+ (info-menu-star): Rename from `info-menu-5'.
+ (Info-fontify-node): Replace `info-menu-5' with `info-menu-star'.
+ (Info-fontify-visited-nodes): Fix docstring.
+ (Info-hide-note-references): Fix docstring.
+ (Info-up, Info-next-reference, Info-prev-reference): Put cursor on
+ menu items in the same way as on cross-references.
+ (info-apropos): Fix sorting order and formatting to be like in the
+ stand-alone Info browser. Display error messages for 1 sec.
+ (Info-mode-map): Move down `c' key binding. Bind `^' to `Info-up'.
+ (Info-mode-menu): Remove item for `Info-search-case-sensitively'
+ from the menu bar.
+ (Info-insert-dir): Restore point after calling
+ `insert-buffer-substring'.
+
+2005-08-08 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/lmenu.el (lucid-menubar-map, lucid-failing-menubar)
+ (recompute-lucid-menubar): Add defvars.
+
+ * mail/sendmail.el (mail-yank-original): Use with-no-warnings.
+
+ * mail/reporter.el (reporter-dump-state): Use insert-buffer-substring.
+
+ * net/net-utils.el (run-dig): Rename from `dig'.
+
+ * play/gametree.el (gametree-mode): Use make-local-variable,
+ not make-variable-buffer-local.
+
+ * progmodes/ada-prj.el (ada-prj-display-page): Use with-no-warnings.
+
+ * ansi-color.el (ansi-color-make-extent)
+ (ansi-color-set-extent-face): Use fboundp, not functionp.
+
+ * autorevert.el (auto-revert-tail-mode): Use make-local-variable,
+ not make-variable-buffer-local.
+
+ * bookmark.el (Info-current-file): Add defvar.
+ (bookmark-jump-noselect): Use with-no-warnings.
+
+ * completion.el (c-mode-map, fortran-mode-map): Add defvars.
+
+ * ebuff-menu.el (Helper-return-blurb): Add defvar.
+
+ * ffap.el (gnus-summary-buffer, gnus-article-buffer): Add defvars.
+
+ * find-file.el (ada-procedure-start-regexp)
+ (ada-package-start-regexp): Add defvars.
+
+ * info.el (Info-insert-dir): Use insert-buffer-substring.
+
+ * xml.el (xml-att-def-re): Add defvar.
+
+ * icomplete.el (icomplete-exhibit): Adapt to new while-no-input
+ calling convention.
+
+ * subr.el (while-no-input): Return t if there is input.
+
+2005-08-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (all): Add `overflow-newline-into-fringe'.
+
+2005-08-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * cmuscheme.el (inferior-scheme-mode-hook, inferior-scheme-mode)
+ (scheme-prev-l/c-dir/file): Fix typos in docstrings.
+
+2005-08-08 Emilio C. Lopes <eclig@gmx.net>
+
+ * cmuscheme.el (scheme-start-file): Replace reference to
+ `user-emacs-directory' by "~/.emacs.d/".
+
+2005-08-08 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * info.el (Info-dir-remove-duplicates): Avoid case folding
+ in loop; instead, keep downcased strings for comparison.
+ Suggested by Helmut Eller.
+
+2005-08-07 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.50.
+
+ * net/tramp.el: Remove defvar of `last-coding-system-used' in the
+ XEmacs case; not necessary anymore.
+ (tramp-user-regexp): Allow "@" as part of user name.
+ (tramp-handle-set-visited-file-modtime)
+ (tramp-handle-insert-file-contents)
+ (tramp-handle-write-region): No special handling for
+ `last-coding-system-used', because this is done in
+ `tramp-accept-process-output' now.
+ (tramp-accept-process-output): New defun.
+ (tramp-process-one-action, tramp-process-one-multi-action)
+ (tramp-wait-for-regexp, tramp-wait-for-output)
+ (tramp-discard-garbage-erase-buffer): Call it. Reported by David
+ Howells <dhowells@redhat.com>.
+ (clear-visited-file-modtime): Defadvice removed. The check for
+ unset buffer's modtime does not need to be based on
+ `tramp-buffer-file-attributes'. Suggested by RMS.
+ (tramp-message): Insert "\n" if not being at beginning of line.
+ (tramp-find-shell): Use `tramp-barf-if-no-shell-prompt' for code
+ sequence with same logic.
+ (tramp-completion-handle-expand-file-name): Discard call of
+ `tramp-drop-volume-letter'. It is not necessary, and there have
+ been problems with (expand-file-name "~/.netrc" "/") in ange-ftp.
+ Reported by Richard G. Bielawski <Richard.G.Bielawski@wellsfargo.com>.
+ (tramp-do-copy-or-rename-file-out-of-band): Transfer message
+ should always be visible.
+ (tramp-handle-insert-directory, tramp-setup-complete)
+ (tramp-set-process-query-on-exit-flag)
+ (tramp-append-tramp-buffers): Pacify byte-compiler.
+ (tramp-bug): Delete non-existing variables from list.
+ Apply `tramp-load-report-modules' as pre-hook.
+ Mask `tramp-password-prompt-regexp', `tramp-shell-prompt-pattern' and
+ `shell-prompt-pattern' because of non-7bit characters.
+ Reported by Sebastian Luque <sluque@mun.ca>.
+ (tramp-reporter-dump-variable, tramp-load-report-modules): New defuns.
+ (tramp-match-string-list): Remove function.
+ (tramp-wait-for-regexp): Remove call of that function.
+ Suggested by Kim F. Storm <storm@cua.dk>.
+ (tramp-set-auto-save-file-modes): Use octal integer code #o600
+ instead of octal character code ?\600. The latter resulted in a
+ syntax error with XEmacs.
+
+ * net/tramp-smb.el: Remove defvar of `last-coding-system-used' in the
+ XEmacs case; not necessary anymore.
+ (tramp-smb-handle-write-region): No special handling for
+ `last-coding-system-used', because this is done in
+ `tramp-accept-process-output' now.
+ (tramp-smb-wait-for-output): Call `tramp-accept-process-output'.
+
+2005-08-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * wid-edit.el (widget-choice-value-create):
+ Unconditionally respect user choice. Set :explicit-choice back to nil
+ when no longer needed.
+ (widget-choice-action): Unconditionally respect user choice.
+ Eliminate :explicit-choice-value.
+
+ * fringe.el (set-fringe-indicators-1, fringe-indicators): Delete.
+
+ * menu-bar.el (menu-bar-options-save): Replace `fringe-indicators'
+ with `indicate-empty-lines' and `indicate-buffer-boundaries'.
+ (menu-bar-showhide-fringe-menu): Add new item "Empty line indicators"
+ running new function `toggle-indicate-empty-lines'.
+ Rename "Customize" item to "Customize fringe".
+ Rename "Indicators" item to "Buffer boundaries" and change help echo.
+ (menu-bar-showhide-fringe-ind-menu): Change several help echos.
+ Add `menu-bar-showhide-fringe-ind-customize' as "Other (customize)".
+ Delete "Empty lines only" item.
+ (menu-bar-showhide-fringe-ind-customize): New function.
+ (menu-bar-showhide-fringe-ind-mixed)
+ (menu-bar-showhide-fringe-ind-box)
+ (menu-bar-showhide-fringe-ind-right)
+ (menu-bar-showhide-fringe-ind-left)
+ (menu-bar-showhide-fringe-ind-none): Use `indicate-buffer-boundaries'
+ instead of `fringe-indicators'.
+
+2005-08-06 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper.el (viper-emacs-state-mode-list):
+ Add recentf-dialog-mode. Change the date of last update.
+
+2005-08-06 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-harness-minor-mode, viper-exec-delete)
+ (viper-exec-yank, viper-put-back): Don't display modification msg
+ if in the minibuffer.
+
+ * emulation/viper-init.el (viper-replace-overlay-cursor-color)
+ (viper-insert-state-cursor-color, viper-vi-state-cursor-color):
+ Make variables frame local.
+
+ * emulation/viper-util.el (viper-append-filter-alist):
+ Use append instead of nconc.
+
+ * emulation/viper.el (viper-vi-state-mode-list)
+ (viper-emacs-state-mode-list): Move help-mode and
+ completion-list-mode from the first list to the second.
+ (viper-mode): Docstring.
+ (viper-go-away, viper-non-hook-settings): Don't localize
+ minor-mode-alist in newer Emacsen. Add advice to
+ set-cursor-color. Don't bind "\C-c\\".
+
+2005-08-06 Emilio C. Lopes <eclig@gmx.net>
+
+ * cmuscheme.el (scheme-trace-command, scheme-untrace-command)
+ (scheme-macro-expand-command): New user options.
+ (scheme-trace-procedure, scheme-expand-current-form): New commands.
+ (scheme-form-at-point, scheme-start-file)
+ (scheme-interactively-start-process): New functions.
+ (scheme-get-process): New function, extracted from `scheme-proc'.
+ (run-scheme): Call `scheme-start-file' to get start file, and pass
+ it to `make-comint'.
+ (switch-to-scheme, scheme-proc):
+ Call `scheme-interactively-start-process' if no Scheme buffer/process
+ is available.
+
+2005-08-06 Juri Linkov <juri@jurta.org>
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Use `compilation-text-face', `compilation-info-text-face' and
+ `compilation-error-text-face' instead of `font-lock-keyword-face'.
+ (compilation-error): New face.
+ (compilation-error-file-name): Inherit from
+ `compilation-error' instead of `font-lock-warning-face'.
+ (compilation-warning-file-name): Inherit from
+ `compilation-warning' instead of `font-lock-warning-face'.
+ (compilation-info, compilation-error-file-name)
+ (compilation-warning-file-name, compilation-info-file-name)
+ (compilation-line-number, compilation-column-number): Doc fix.
+ (compilation-error-text-face, compilation-warning-text-face)
+ (compilation-info-text-face): New face variables.
+ (compilation-line-face, compilation-column-face)
+ (compilation-enter-directory-face)
+ (compilation-leave-directory-face): Doc fix.
+ (compilation-text-face): New function.
+
+ * progmodes/grep.el (grep-regexp-alist): Set 5th arg `TYPE' to 0
+ instead of 1 to display binary file names as info file links.
+ (grep-error-face): Use `compilation-error-face' instead of
+ `font-lock-keyword-face'.
+ (grep-mode-font-lock-keywords): Use `compilation-info-text-face'
+ and `compilation-warning-text-face' instead of
+ `font-lock-keyword-face'. Use `compilation-error-text-face'
+ instead of `grep-error-face'.
+
+2005-08-05 Kenichi Handa <handa@m17n.org>
+
+ * international/code-pages.el: Add autoload cookies for all coding
+ systems.
+
+2005-08-04 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (all): Put undo.c where it alphabetically belongs.
+
+2005-08-04 Juri Linkov <juri@jurta.org>
+
+ * progmodes/compile.el (compilation-mode-map):
+ * progmodes/grep.el (grep-mode-map):
+ Bind TAB to `compilation-next-error' and [backtab] to
+ `compilation-previous-error'.
+
+ * progmodes/grep.el (grep-regexp-alist): Replace complex regexp
+ matching line numbers, column numbers and their ranges with regexp
+ matching only line numbers.
+ (grep-context-face): New face variable.
+ (grep-mode-font-lock-keywords): Use it.
+
+ * faces.el (read-face-name): Delete duplicate faces.
+
+2005-08-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * thumbs.el (thumbs-find-image): Don't make variables
+ automatically buffer local.
+ (thumbs-current-tmp-filename, thumbs-current-image-filename)
+ (thumbs-image-num): Make automatically buffer local.
+ (thumbs-show-thumbs-list): Use `make-local-variable', not
+ `make-variable-buffer-local'.
+ (thumbs-insert-image): Make `thumbs-current-image-size' buffer-local.
+
+ * play/doctor.el (doctor-type-symbol): "?\ " -> "?\s".
+ (**mad**, *debug*, *print-space*, *print-upcase*, abuselst)
+ (abusewords, account, afraidof, arerelated, areyou, bak, beclst)
+ (bother, bye, canyou, chatlst, continue, deathlst, describe)
+ (drnk, drugs, eliza-flag, elizalst, famlst, feared, fears)
+ (feelings-about, foullst, found, hello, history, howareyoulst)
+ (howdyflag, huhlst, ibelieve, improve, inter, isee, isrelated)
+ (lincount, longhuhlst, lover, machlst, mathlst, maybe, moods)
+ (neglst, obj, object, owner, please, problems, qlist)
+ (random-adjective, relation, remlst, repetitive-shortness)
+ (replist, rms-flag, schoollst, sent, sexlst, shortbeclst)
+ (shortlst, something, sportslst, stallmanlst, states, subj)
+ (suicide-flag, sure, things, thlst, toklst, typos, verb, want)
+ (whatwhen, whereoutp, whysay, whywant, zippy-flag, zippylst):
+ Defvar at compile time.
+
+ * progmodes/ada-mode.el (ada-mode): Use `make-local-variable',
+ not `make-variable-buffer-local'.
+
+2005-08-02 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-rect.el (cua--highlight-rectangle): Only show
+ rectangle overlay in selected window.
+
+2005-08-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (all): Put `indicate-empty-lines' in fringe group
+ instead of display group. Make `indicate-buffer-boundaries'
+ customizable through Custom.
+
+2005-08-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/gdb-ui.el (gdb-frame-address, gdb-var-changed)
+ (gdb-output-sink, gdba, gdb-cpp-define-alist-program)
+ (gdb-set-gud-minor-mode, gdb-exited, gdb-setup-windows)
+ (gdb-put-string): Fix typos in docstrings.
+
+2005-08-01 Nick Roberts <nickrob@snap.net.nz>
+
+ Update copyright notices of files in progmodes directory for
+ release of Emacs 22.1.
+
+ * progmodes/gdb-ui.el (gdb-enable-debug-log): Add autoload cookie.
+
+ * progmodes/gud.el (gud-tooltip-mode): Add autoload cookie.
+ Don't barf if the GUD buffer has been killed.
+
+2005-08-01 Kim F. Storm <storm@cua.dk>
+
+ * textmodes/table.el (table-yank-handler): Change defcustom to defvar.
+
+2005-07-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (next-error-follow-minor-mode):
+ make-variable-buffer-local -> make-local-variable.
+
+ * emacs-lisp/cl-extra.el: Require CL also when compiling.
+
+ * emacs-lisp/bytecomp.el (byte-compile-make-variable-buffer-local)
+ (byte-compile-form-make-variable-buffer-local): New functions to warn
+ about misuses of make-variable-buffer-local where make-local-variable
+ was meant.
+
+2005-07-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * bs.el (bs-attributes-list): Doc fix.
+ (bs): Update url-link.
+
+ * desktop.el (desktop-save-buffer): Fix typos in docstring.
+ (desktop-load-default): Simplify.
+
+ * ibuffer.el (ibuffer-columnize-and-insert-list)
+ (ibuffer-mouse-toggle-mark, ibuffer-count-marked-lines)
+ (ibuffer-unmark-all, ibuffer-toggle-marks)
+ (ibuffer-unmark-forward, ibuffer-unmark-backward)
+ (ibuffer-compile-make-format-form, ibuffer-format-column)
+ (ibuffer-current-buffers-with-marks)
+ (ibuffer-update-title-and-summary): "?\ " -> "?\s".
+ (ibuffer): Doc fix.
+ (ibuffer-mode): Fix typo in docstring.
+ (ibuffer-hooks, ibuffer-mode-hooks): Make obsolete and declare
+ with `define-obsolete-variable-alias'.
+ (ibuffer-elide-long-columns): Mark as obsolete. Doc fix.
+
+2005-07-29 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-message-coding-system):
+ Be sure to use LF for end-of-line. If no coding system is decided,
+ return iso-8859-1-unix.
+
+2005-07-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/ange-ftp.el (ange-ftp-gateway-fatal-msgs)
+ (ange-ftp-pending-error-line): New vars.
+ (ange-ftp-process-handle-line, ange-ftp-process-filter): Use them
+ to handle the non-fatal no-route-to-host messages.
+ (internal-ange-ftp-mode): Make the no-match regexp more efficient.
+
+2005-07-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * isearch.el (isearch-mode-map, isearch-other-meta-char)
+ (isearch-quote-char, isearch-printing-char)
+ (isearch-text-char-description): "?\ " -> "?\s".
+ (isearch-lazy-highlight-cleanup)
+ (isearch-lazy-highlight-initial-delay)
+ (isearch-lazy-highlight-interval)
+ (isearch-lazy-highlight-max-at-a-time)
+ (isearch-lazy-highlight-face, isearch-lazy-highlight-cleanup):
+ Declare with define-obsolete-*-alias macros.
+ (isearch-forward): Fix typo in docstring.
+ (search-invisible, search-ring-yank-pointer)
+ (regexp-search-ring-yank-pointer): Doc fixes.
+
+ * recentf.el (recentf-menu-append-commands-p): Declare with
+ `define-obsolete-variable-alias'.
+ (recentf-max-saved-items, recentf-menu-filter)
+ (recentf-arrange-by-rule-subfilter): Doc fixes.
+ (recentf-menu-append-commands-flag)
+ (recentf-initialize-file-name-history, recentf-expand-file-name)
+ (recentf-clear-data): Fix typos in docstrings.
+
+2005-07-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el: Smarten comments.
+ (gdb-info-breakpoints-custom): Use nowarn when finding file.
+
+2005-07-27 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/apollo.el (terminal-init-apollo): New function containing
+ all former top level forms in the file.
+ * term/bobcat.el (terminal-init-bobcat):
+ * term/cygwin.el (terminal-init-cygwin):
+ * term/iris-ansi.el (terminal-init-iris-ansi):
+ * term/linux.el (terminal-init-linux):
+ * term/news.el (terminal-init-news):
+ * term/rxvt.el (terminal-init-rxvt):
+ * term/sun.el (terminal-init-sun):
+ * term/tvi970.el (terminal-init-tvi970):
+ * term/vt100.el (terminal-init-vt100):
+ * term/vt102.el (terminal-init-vt102):
+ * term/vt125.el (terminal-init-vt125):
+ * term/vt200.el (terminal-init-vt200):
+ * term/vt201.el (terminal-init-vt201):
+ * term/vt220.el (terminal-init-vt220):
+ * term/vt240.el (terminal-init-vt240):
+ * term/vt300.el (terminal-init-vt300):
+ * term/vt320.el (terminal-init-vt320):
+ * term/vt400.el (terminal-init-vt400):
+ * term/vt420.el (terminal-init-vt420):
+ * term/wyse50.el (terminal-init-wyse50):
+ * term/xterm.el (terminal-init-xterm): Likewise.
+
+ * term/README: Describe the terminal-init-* functionality.
+
+ * startup.el (command-line): After loading the terminal initialization
+ file call the corresponding terminal initialization function.
+
+2005-07-27 Kenichi Handa <handa@m17n.org>
+
+ * ps-bdf.el (bdf-read-font-info): Ignore glyphs whose ENCODING is
+ negative.
+
+ * ps-mule.el (ps-mule-bitmap-prologue): Fix arguments to setcharwidth.
+ (ps-mule-composition-prologue): Fix for the case that
+ RelativeCompose is false.
+
+2005-07-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * smerge-mode.el (smerge-ediff): Use insert-buffer-substring.
+
+ * descr-text.el (describe-char): Handle the case where the list of
+ chars is displayed in a separate frame.
+ Be a bit more discriminating when looking for the char.
+
+2005-07-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * bookmark.el (bookmark-automatically-show-annotations)
+ (bookmark-read-annotation-text-func): Doc fixes.
+ (bookmark-save): Improve argument/docstring consistency.
+ (bookmark-get-bookmark, bookmark-get-bookmark-record)
+ (bookmark-alist-from-buffer)
+ (bookmark-upgrade-file-format-from-0)
+ (bookmark-grok-file-format-version)
+ (bookmark-maybe-upgrade-file-format, bookmark-kill-line)
+ (bookmark-read-annotation-mode)
+ (bookmark-insert-current-bookmark, bookmark-jump)
+ (bookmark-exit-hook): Fix typos in docstrings.
+ (bookmark-exit-hooks): Define as obsolete alias.
+ (bookmark-exit-hook-internal): Run `bookmark-exit-hook',
+ not `bookmark-exit-hooks'. Fix docstring.
+ (bookmark-bmenu-select): "?\ " -> "?\s".
+
+2005-07-25 Ari Roponen <arjuropo@cc.jyu.fi> (tiny change)
+
+ * startup.el (command-line): Fix typo.
+
+2005-07-24 Richard M. Stallman <rms@gnu.org>
+
+ * tooltip.el (tooltip-mode): Test emacs-basic-display,
+ not emacs-quick-startup.
+
+2005-07-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/re-builder.el (reb-with-current-window): Delete.
+ (reb-next-match, reb-show-subexp): Use `with-selected-window'
+ instead of `reb-with-current-window'.
+ (reb-prev-match): Likewise. Also, don't move left if the search
+ was unsuccessful.
+ (reb-initialize-buffer): New function.
+ (re-builder, reb-change-syntax): Use it.
+
+ * man.el (Man-goto-page): Make second argument NOERROR optional.
+
+2005-07-23 Richard M. Stallman <rms@gnu.org>
+
+ * man.el (Man-bgproc-sentinel): Check here for failure to find
+ any man page in the output, and report the error here.
+ (Man-arguments): Make it permanent local.
+ (Man-goto-page): New arg NOERROR. Never kill the current buffer.
+ (Man-mode): Pass t for NOERROR.
+
+ * progmodes/grep.el (grep-error-face): Use font-lock-keyword-face.
+ (grep-mode-font-lock-keywords):
+ Don't use compilation-...-face for messages that are not file names.
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Don't use compilation-...-face for messages that are not file names.
+
+2005-07-22 Juri Linkov <juri@jurta.org>
+
+ * startup.el (normal-splash-screen): Update menu name.
+
+ * tempo.el (tempo-insert-template): Fix 2005-07-16 change.
+
+2005-07-22 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el: Load term/rxvt if the terminal is actually an
+ rxvt terminal.
+ (xterm-rxvt-set-background-mode): Remove, not used anymore.
+
+ * term/rxvt.el (function-key-map): Use substitute-key-definition
+ to bind {C,S,C-S}-{f1-f10}. Add a few missing key bindings.
+
+ * term/cygwin.el: New file.
+
+2005-07-22 Kim F. Storm <storm@cua.dk>
+
+ * image-file.el (insert-image-file, image-file-yank-handler):
+ Fix last change to maintain a (unique) yank-handler on yanked images.
+
+2005-07-22 Eduardo Mu,Aq(Boz <emufer@terra.es> (tiny change)
+
+ * dired.el (dired-move-to-filename-regexp): Recognize the B suffix
+ of the file size (as in "177B" for 177 bytes). This happens with
+ "ls -lh" on FreeBSD.
+
+2005-07-22 Juanma Barranquero <lekktu@gmail.com>
+
+ * hilit-chg.el (highlight-changes-global-initial-state)
+ (highlight-compare-buffers, hilit-chg-turn-on-maybe)
+ (hilit-chg-fixup, highlight-changes-mode):
+ Fix typos in docstrings.
+ (highlight-changes-global-modes, highlight-changes-rotate-faces):
+ Doc fixes.
+
+2005-07-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Never call the
+ mode function using `eval-after-load'.
+
+2005-07-21 Kim F. Storm <storm@cua.dk>
+
+ * mail/emacsbug.el (report-emacs-bug): Request that backtraces are
+ included when reporting an Emacs crash, and tell about the DEBUG file.
+
+ * image-file.el (insert-image-file): Add yank-handler.
+ (image-file-yank-handler): Yank handler to make unique copies of
+ images when they are yanked into a buffer next to each other.
+
+2005-07-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * comint.el (comint-use-prompt-regexp, comint-send-input)
+ (comint-source-default, comint-extract-string)
+ (comint-get-source, comint-word, comint-completion)
+ (comint-source, comint-prompt-read-only, comint-update-fence):
+ Fix typos in docstrings.
+ (comint-use-prompt-regexp-instead-of-fields, comint-kill-output):
+ Declare with define-obsolete-*-alias macros.
+ (comint-previous-matching-input-from-input)
+ (comint-next-matching-input-from-input)
+ (comint-previous-matching-input, comint-next-matching-input)
+ (comint-forward-matching-input):
+ Improve argument/docstring consistency.
+
+ * desktop.el (desktop-clear-preserve-buffers-regexp):
+ Also preserve the *server* buffer.
+
+ * simple.el (clone-indirect-buffer): Doc fix.
+ (fixup-whitespace, just-one-space)
+ (backward-delete-char-untabify, lambda): "?\ " -> "?\s".
+ (next-error, next-error-highlight)
+ (next-error-highlight-no-select, next-error-last-buffer)
+ (next-error-buffer-p, next-error-find-buffer, next-error)
+ (previous-error, next-error-no-select, previous-error-no-select)
+ (open-line, split-line, minibuffer-prompt-width, kill-new)
+ (binary-overwrite-mode): Fix typos in docstrings.
+ (set-fill-column): Fix typo in message.
+
+ * skeleton.el (skeleton-proxy-new): Doc fix.
+
+ * strokes.el (strokes-load-hook): Doc fix.
+ (strokes-grid-resolution, strokes-get-grid-position)
+ (strokes-renormalize-to-grid, strokes-read-stroke)
+ (strokes-read-complex-stroke, strokes-file, strokes-last-stroke)
+ (strokes-global-map): Fix typos in docstrings.
+ (strokes-help): Doc fix. Fix help message and pass it through
+ `substitute-command-keys'.
+
+ * tempo.el (tempo-insert-prompt, tempo-interactive)
+ (tempo-show-completion-buffer, tempo-tags, tempo-match-finder)
+ (tempo-insert-string-functions, tempo-local-tags)
+ (tempo-define-template, tempo-insert-template)
+ (tempo-insert-prompt-compat, tempo-is-user-element)
+ (tempo-insert-mark, tempo-find-match-string, tempo-complete-tag):
+ Fix typos in docstrings.
+
+ * vcursor.el (vcursor-other-window, vcursor-bind-keys)
+ (vcursor-key-bindings, vcursor-use-vcursor-map)
+ (vcursor-find-window, vcursor-scroll-down)
+ (vcursor-disable, vcursor-beginning-of-buffer)
+ (vcursor-end-of-buffer): Fix typos in docstrings.
+ (vcursor-relative-move, vcursor-get-char-count):
+ Improve argument/docstring consistency.
+
+ * version.el: "?\ " -> "?\s".
+
+ * wid-edit.el (widget-default-create, widget-after-change)
+ (widget-default-format-handler, widget-checklist-add-item)
+ (widget-radio-add-item, widget-choose, widget-specify-secret)
+ (widget-field-value-create, widget-field-value-get)
+ (widget-editable-list-format-handler)
+ (widget-editable-list-entry-create, widget-group-value-create)
+ (widget-documentation-link-add)
+ (widget-documentation-string-value-create): "?\ " -> "?\s".
+ (widget-convert-text): Doc fix.
+ (widget-narrow-to-field, widget-field-find)
+ (widget-url-link-action, widget-emacs-library-link-action)
+ (widget-color-notify): Fix typos in docstrings.
+
+ * w32-fns.el (w32-shell-name): Use `bound-and-true-p'.
+ (x-select-text, set-w32-system-coding-system)
+ (w32-add-charset-info): Fix typos in docstrings.
+
+ * emulation/cua-base.el (cua-mode, cua-enable-register-prefix)
+ (cua-enable-cua-keys, cua-use-hyper-key)
+ (cua-virtual-rectangle-edges): Fix typos in docstrings.
+ (cua--M/H-key, cua--init-keymaps): "?\ " -> "?\s".
+
+ * net/tramp.el (tramp-handle-load): Fix typo in error message.
+
+ * emacs-lisp/re-builder.el (regexp-builder): Declare with
+ `defalias' instead of faking it.
+
+ * eshell/em-ls.el (eshell-ls-decorated-name): Doc fix.
+ (eshell-ls-missing, eshell-ls-dired-initial-args)
+ (eshell-ls-use-in-dired): Fix typos in docstrings.
+
+2005-07-20 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-mode): Improve doc string.
+
+2005-07-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * abbrev.el (expand-region-abbrevs): Doc fix.
+ (inverse-add-mode-abbrev, inverse-add-global-abbrev):
+ Improve argument/docstring consistency.
+
+ * arc-mode.el (archive-get-descr, archive-alternate-display):
+ Doc fixes.
+ (archive-l-e): Improve argument/docstring consistency.
+ (archive-tmpdir, archive-unixdate, archive-unixtime)
+ (archive-chmod-entry): Fix typos in docstrings.
+ (archive-unflag, archive-unflag-backwards)
+ (archive-unmark-all-files): "?\ " -> "?\s".
+
+ * buff-menu.el (Buffer-menu-unmark): Doc fix.
+ (Buffer-menu-not-modified, Buffer-menu-execute)
+ (Buffer-menu-toggle-read-only, Buffer-menu-buffer+size)
+ (list-buffers-noselect, Buffer-menu-select): "?\ " -> "?\s".
+
+ * composite.el (compose-string, encode-composition-rule)
+ (compose-last-chars): Fix typos in docstrings.
+
+ * desktop.el (desktop-enable, desktop-basefilename):
+ Declare with `define-obsolete-variable-alias'.
+ (desktop-internal-v2s): Don't quote keywords.
+ (desktop-clear): "?\ " -> "?\s".
+
+ * dired.el (dired-align-file, dired-flag-backup-files)
+ (dired-change-marks, dired-unmark-all-files): "?\ " -> "?\s".
+ (dired-listing-switches, dired-ls-F-marks-symlinks)
+ (dired-dwim-target, dired-load-hook, dired-mode-hook)
+ (dired-directory, dired-faces, dired, dired-revert)
+ (dired-mode, dired-summary, dired-view-file)
+ (dired-copy-filename-as-kill, dired-delete-file)
+ (dired-no-confirm, dired-unmark-all-marks)
+ (dired-sort-by-date-regexp, dired-sort-by-name-regexp)
+ (dired-sort-inhibit, dired-sort-other): Fix typos in docstrings.
+ (dired-undo, dired-get-file-for-visit, dired-sort-toggle-or-edit):
+ Fix typos in message strings.
+
+ * dired-x.el (virtual-dired): Declare with `defalias'.
+ (dired-mark-unmarked-files, dired-local-variables-file)
+ (dired-omit-here-always): Doc fix.
+ (dired-omit-mode, dired-find-subdir)
+ (dired-enable-local-variables, dired-clean-up-buffers-too)
+ (dired-extra-startup, dired-mark-extension, dired-jump)
+ (dired-jump-other-window, dired-omit-localp, dired-virtual-mode)
+ (dired-smart-shell-command, dired-guess-shell-alist-user)
+ (dired-man, dired-initial-position, dired-x-hands-off-my-keys)
+ (dired-x-bind-find-file, dired-x-submit-report):
+ Fix typos in docstrings.
+ (dired-mark-unmarked-files): "?\ " -> "?\s".
+
+ * dirtrack.el (dirtrack-list): Fix typos in docstring.
+
+ * faces.el (describe-face): "?\ " -> "?\s".
+ (read-all-face-attributes, read-face-font, modify-face)
+ (face-attr-construct, italic): Fix typos in docstrings.
+ (frame-update-face-colors): Declare with
+ `define-obsolete-function-alias'.
+
+ * files.el (find-file-noselect, recode-file-name): Doc fixes.
+ (insert-directory, kill-some-buffers): "?\ " -> "?\s".
+ (magic-mode-alist, buffer-file-numbers-unique)
+ (write-file-functions, get-free-disk-space):
+ Fix typos in docstrings.
+ (find-file-not-found-hooks, find-file-hooks, write-file-hooks)
+ (write-contents-hooks, write-file-hooks):
+ Declare with `define-obsolete-variable-alias'.
+
+ * forms-d2.el (arch-rj): Fix typo in docstrings.
+ (arch-tocol): Likewise. "?\ " -> "?\s".
+
+ * frame.el (set-frame-font, cursor-in-non-selected-windows):
+ Fix typo in docstring.
+ (set-screen-width, set-screen-height): Delete redundant info in
+ doctrings.
+ (new-frame, screen-height, screen-width): Declare with
+ `define-obsolete-function-alias'.
+ (delete-frame-hook, blink-cursor): Declare with
+ `define-obsolete-variable-alias'.
+
+ * paths.el (prune-directory-list): Fix typos in docstring.
+
+ * pcvs-util.el (cvs-flags-query, cvs-strings->string)
+ (cvs-prefix-get): Fix typos in docstrings.
+
+ * ps-print.el (ps-extend-face-list, ps-extend-face)
+ (ps-print-background-image): Fix typos in docstrings.
+ (ps-default-fg, ps-default-bg): Doc fixes.
+
+ * s-region.el (s-region-bind): Doc fix.
+ (s-region-move-p1, s-region-move-p2): Fix typos in docstrings.
+
+ * textmodes/org.el (org-table-formula-substitute-names)
+ (org-table-get-vertical-vector): Doc fixes.
+ (org-table-recalculate): Remove unused argument to `message'.
+
+2005-07-19 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-table-column-names)
+ (org-table-column-name-regexp)
+ (org-table-named-field-locations): New variables.
+ (org-archive-subtree): Protect `this-command' when calling
+ `org-copy-subtree' and `org-cut-subtree', to avoid appending to
+ the kill buffer.
+ (org-complete): Remove fixed-formula completion.
+ (org-edit-formulas-map): New variable.
+ (org-table-edit-formulas): New command.
+ (org-finish-edit-formulas, org-abort-edit-formulas)
+ (org-show-variable, org-table-get-vertical-vector): New functions.
+ (org-table-maybe-eval-formula): Handle `:=' fields.
+ (org-table-get-stored-formulas, org-table-store-formulas)
+ (org-table-get-formula, org-table-modify-formulas)
+ (org-table-replace-in-formulas): Handle named field formulas.
+ (org-table-get-specials): Store locations of named fields.
+
+2005-07-19 Juri Linkov <juri@jurta.org>
+
+ * progmodes/grep.el (grep-regexp-alist)
+ (grep-mode-font-lock-keywords, grep-process-setup):
+ Use default GNU grep match color "01;31m" instead of "01;41m".
+ (grep-regexp-alist, grep-mode-font-lock-keywords):
+ Use `\\[[0-9]*m' instead of `\\[00m'.
+ (grep-regexp-alist): Move `\\(?:\033\\[K\\)?' from sgr_end to
+ sgr_start where its handling is more important. Use the real
+ length of sgr_start instead of constant 8.
+ (grep-mode-font-lock-keywords): Don't delete `\\(?:\033\\[K\\)?'
+ specially. Delete all remaining escape sequences.
+ (grep-process-setup): Set "GREP_COLORS" for GNU grep 2.5.1-cvs.
+ (grep-regexp-alist): Make hyperlink only for binary file name
+ instead of the whole line.
+ (grep-mode-map): Bind `backtab' to `compilation-previous-file'.
+ (grep-mode): Add autoload.
+
+ * emacs-lisp/find-func.el (find-function-regexp):
+ Add `define-compilation-mode'.
+
+2005-07-19 Juri Linkov <juri@jurta.org>
+
+ * compare-w.el (compare-ignore-whitespace, compare-windows-sync)
+ (compare-windows-sync-string-size, compare-windows-recenter)
+ (compare-windows-highlight, compare-windows): Add version 22.1.
+ (compare-windows) <defface>: Inherit from lazy-highlight instead
+ of duplicating its default value.
+
+ * cus-edit.el (custom-mode-map): Bind `C-c C-c' to `Custom-set'.
+ (Custom-mode-menu): Use `info' instead of `Info-goto-node'.
+
+ * descr-text.el (describe-char): Create link buttons for `charset'
+ and `code point'. Add the current input method name with a link
+ button to `to input' field. Print face names of display table
+ characters in `The display table entry is displayed by' section
+ instead of printing face-id in the `display' field.
+ Guess hardcoded faces and create a link button for them.
+ Skip empty fields when calculating max-width.
+ Treat `widget-create' specially while inserting strings from the
+ collected field list.
+ (describe-char-after): Made obsolete in version 22.1, not 21.5.
+
+ * diff-mode.el (diff-file-header): Change foreground color from
+ yellow to green on light backgrounds.
+ (diff-context): Inherit from `shadow' only for color/grayscale
+ with more than 88 colors.
+ (diff-indicator-removed, diff-indicator-added)
+ (diff-indicator-changed): New faces.
+ (diff-font-lock-keywords): Use new faces. Regroup rules.
+ Add "^---$" for `normal' diff format. Fontify `#' lines with
+ font-lock-comment-delimiter-face and font-lock-comment-face.
+ Add `#' to ^[^...] in the rule for `diff-context-face'.
+
+ * faces.el (mode-line-highlight): Replace RoyalBlue4 with
+ a button-like box. Inherit from `highlight' on low colors.
+ (shadow): Use shades of gray only for color/grayscale with
+ more than 88 colors. Use green for light backgrounds with
+ 8 colors, and yellow for dark backgrounds with 8 colors.
+
+ * font-lock.el (font-lock-regexp-grouping-backslash):
+ Don't inherit from escape-glyph (use bold for all cases).
+
+ * info.el (info-xref-visited): Use light foreground color `violet'
+ for dark backgrounds instead of dark color `magenta3'.
+ (info-title-1): Use `yellow' color for dark backgrounds.
+
+ * isearch.el (isearch): Use not-too-dark magenta3 instead of
+ too-light magenta2.
+
+ * replace.el (match): Use slightly more light RoyalBlue3 instead
+ of dark RoyalBlue4.
+
+ * wid-edit.el (widget-inactive): Inherit from `shadow'.
+
+2005-07-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * novice.el (disabled-command-hook): Declare it with
+ `define-obsolete-variable-alias'.
+
+ * desktop.el (desktop-enable, desktop-buffer-modes-to-save)
+ (desktop-buffer-misc-functions, desktop-buffer-handlers)
+ (desktop-load-default): Add release to obsolescence info.
+ (desktop-globals-to-clear, desktop-buffer-mode-handlers)
+ (desktop-append-buffer-args, desktop-read):
+ Fix typos in docstrings.
+ (desktop-kill): Fix typo in message.
+ (desktop-save): Doc fix.
+
+2005-07-19 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-escape-to-state): Bug fix.
+ (viper-envelop-ESC-key): Change the definition of fast
+ keysequence so it'll work with keyboard macros.
+
+ * ediff.el (ediff-patch-buffer): Change the docstring.
+
+2005-07-19 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-safe-coding-system): Try to
+ use an auto-coding (if any) before anything else. If the found
+ auto-coding is invalid, show a warning message.
+
+ * international/mule.el (find-auto-coding): New function created
+ by modifying the body of set-auto-coding.
+ (set-auto-coding): Use find-auto-coding to find a coding.
+
+2005-07-18 Richard M. Stallman <rms@gnu.org>
+
+ * allout.el (allout-isearch-expose): Use isearch-mode-end-hook-quit,
+ not isearch-mode-end-hook-error.
+ (allout-before-change-protect): Fix error message.
+
+2005-07-18 Juri Linkov <juri@jurta.org>
+
+ * allout.el (allout-mode):
+ * calculator.el (calculator-copy):
+ * custom.el (custom-known-themes):
+ * dired.el (dired-desktop-buffer-misc-data)
+ (dired-restore-desktop-buffer):
+ * dired-x.el (dired-omit-marker-char):
+ * files.el (basic-save-buffer):
+ * font-core.el (font-lock-mode):
+ * calendar/calendar.el (calendar-goto-hebrew-date)
+ (calendar-goto-coptic-date, calendar-goto-ethiopic-date)
+ (calendar-goto-persian-date):
+ * language/ethio-util.el (ethio-sera-to-fidel-region):
+ * textmodes/picture.el (picture-mode):
+ Delete duplicate duplicate words.
+
+2005-07-18 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-mode-map): Remove key bindings for regexp
+ chars * ? } |.
+ (isearch-fallback): Don't call `isearch-process-search-char'.
+ (isearch-*-char, isearch-}-char, isearch-|-char): Remove functions.
+ (isearch-process-search-char): Call `isearch-fallback' for regexp
+ chars * ? } |.
+ (isearch-return-char): Make obsolete with `make-obsolete' instead
+ of simply documenting it as obsolete in the docstring.
+ (isearch-fallback): Refill docstring.
+
+ * international/isearch-x.el
+ (isearch-process-search-multibyte-characters): Remove unneeded
+ `concat'. Add intermediate values to `junk-hist' instead of
+ `minibuffer-history'. Test the length of `str'.
+
+2005-07-18 Juanma Barranquero <lekktu@gmail.com>
+
+ * allout.el (allout-resolve-xref): Fix typos in error strings.
+ (allout-before-change-protect): Remove unneeded `concat'.
+
+ * array.el (array-mode, array-reconfigure-rows)
+ (untabify-backward): Fix typos in docstrings.
+ (array-reconfigure-rows): Use `insert-buffer-substring', not
+ `insert-buffer'.
+
+ * calendar/icalendar.el (icalendar--get-unfolded-buffer):
+ * progmodes/ada-mode.el (ada-make-body):
+ Use `insert-buffer-substring' and `goto-char', not `insert-buffer'.
+
+ * dired.el (dired-log):
+ * tar-mode.el (tar-subfile-save-buffer):
+ * play/zone.el (zone-pgm-stress-destress):
+ Use `insert-buffer-substring', not `insert-buffer'.
+
+2005-07-17 Simon Josefsson <jas@extundo.com>
+
+ * mail/smtpmail.el (smtpmail-auth-supported): Prefer PLAIN over LOGIN.
+
+2005-07-16 Jose E. Marchesi <jemarch@gnu.org>
+
+ * mail/smtpmail.el (smtpmail-auth-supported): Add plain auth method.
+ (smtpmail-try-auth-methods): Add AUTH PLAIN dialog.
+
+2005-07-17 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (dired-other-window): Add ido property.
+
+2005-07-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/bytecomp.el (byte-compile-maybe-guarded):
+ Fix typo in docstring.
+ (byte-compile-interactive-only-functions): Add `insert-buffer' and
+ `insert-file-literally'.
+
+ * emacs-lisp/edebug.el (def-edebug-form-spec): Add obsolescence
+ info and delete redundant message. Doc fix.
+ (edebug-install-custom-print-funcs, edebug-reset-print-funcs)
+ (edebug-uninstall-custom-print-funcs): Define as obsolete aliases.
+
+2005-07-16 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-and-recursion): New function.
+ (byte-compile-and): Use byte-compile-and-recursion.
+ (byte-compile-or-recursion): New function.
+ (byte-compile-or): Use that.
+ (byte-compile-if): Guard the else-clause too.
+ (byte-compile-maybe-guarded): Handle (not (featurep 'emacs)).
+
+ * isearch.el (isearch-mode-end-hook-quit): New variable.
+ (isearch-done): Bind it.
+ (isearch-mode-end-hook): Doc fix.
+
+ * allout.el (allout-isearch-did-quit): Variable deleted.
+ (allout-real-isearch-abort): Function name no longer used.
+ (allout-mode): Do allout-enwrap-isearch whenever feature is wanted.
+ (allout-isearch-rectification): isearch-mode always exists.
+ Don't set allout-isearch-did-quit.
+ (allout-isearch-expose): Check isearch-mode-end-hook-error, not
+ allout-isearch-did-quit.
+ (allout-enwrap-isearch): Just add the hook.
+ (allout-isearch-abort): Function deleted.
+ (allout-pre-command-business): Avoid warning.
+
+ * progmodes/pascal.el (pascal-outline-map): Use fboundp, not boundp.
+ Correctly avoid warnings.
+ (pascal-outline): Likewise.
+
+ * progmodes/f90.el (f90-abbrev-start): Avoid warning.
+
+ * progmodes/asm-mode.el (asm-comment): Use with-no-warnings.
+
+ * play/tetris.el (tetris-mode): Avoid warning.
+
+ * play/snake.el (snake-mode): Avoid warning.
+
+ * play/gamegrid.el (gamegrid-shared-game-dir): Add defvar.
+ (gamegrid-set-display-table): Avoid warning.
+ (gamegrid-set-timer): Likewise.
+ (gamegrid-make-mono-tty-face): Use set-face-inverse-video-p.
+ (gamegrid-add-score-with-update-game-score-1): Take FILE
+ as argument.
+ (gamegrid-add-score-with-update-game-score): Pass that argument.
+ Rename have-shared-game-dir to gamegrid-shared-game-dir.
+
+ * net/eudc-hotlist.el (eudc-hotlist-mode): Avoid warnings.
+
+ * net/eudc-bob.el (eudc-jump-to-event): Avoid warning.
+ (eudc-bob-display-jpeg, eudc-bob-can-display-inline-images): Likewise.
+
+ * mail/uce.el (uce-reply-to-uce): Replace beginning-of-buffer
+ and insert-file.
+
+ * mail/supercite.el (sc-no-blank-line-or-header): Avoid warning.
+ (sc-ask): Avoid warnings.
+
+ * eshell/em-hist.el (eshell-rebind-keys-alist): Add defvar.
+ (eshell-hist-initialize): Use that var the natural way.
+
+ * emulation/viper-init.el (viper-activate-input-method): Avoid warning.
+
+ * emacs-lisp/re-builder.el (reb-cook-regexp):
+ Avoid warning calling lre-compile-string.
+ (reb-color-display-p): Avoid warning.
+
+ * calculator.el (calculator-last-input): Guard uses
+ of event-key and key-press-event-p.
+ (event-key, key-press-event-p): Delete definitions.
+
+ * emacs-lisp/find-gc.el (find-gc-unsafe-list)
+ (find-gc-source-directory, find-gc-subrs-callers)
+ (find-gc-noreturn-list, find-gc-source-files)
+ (find-gc-subrs-called): Vars renamed and defvar'd.
+
+ * emacs-lisp/checkdoc.el (checkdoc-make-overlay)
+ (checkdoc-overlay-put, checkdoc-delete-overlay)
+ (checkdoc-overlay-start, checkdoc-overlay-end)
+ (checkdoc-mode-line-update, checkdoc-char=):
+ Define such that compiler knows they are defined.
+ (checkdoc-call-eval-buffer): Delete. Use eval-buffer directly.
+ (checkdoc-read-event): Delete. Use read-event directly.
+
+ * whitespace.el (whitespace-make-overlay)
+ (whitespace-overlay-put, whitespace-delete-overlay)
+ (whitespace-overlay-start, whitespace-overlay-end):
+ Define such that compiler knows they are defined.
+ (whitespace): Move conditional inside.
+
+ * tempo.el (tempo-insert-template): Suppress warning.
+
+ * ediff-diff.el (longlines-mode): Add defvar.
+
+2005-07-16 Gary Howell <g1howell-list@yahoo.com> (tiny change)
+
+ * server.el: Bind "C-x #" in a way that works even if C-x is
+ redefined to a command key, not a prefix key.
+
+2005-07-16 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net> (tiny change)
+
+ * emacs-lisp/cl-macs.el (cl-make-type-test): Defer evaluation of
+ cl-make-type-test till execution time.
+
+2005-07-16 Markus Rost <rost@math.uni-bielefeld.de>
+
+ * dired-x.el (dired-do-relsymlink-regexp): Add missing optional
+ arg ARG and use it.
+
+2005-07-16 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net> (tiny change)
+
+ * emacs-lisp/cl-macs.el (cl-make-type-test): Add `atom' type.
+
+2005-07-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Avoid constructing
+ a defcustom with two :set or :type keywords.
+
+2005-07-15 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/lisp-mode.el (emacs-lisp-mode-syntax-table):
+ Don't give ^M comment-end syntax.
+
+2005-07-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-update, gdb-var-update-handler):
+ Don't consider gdbmi (gdb-mi.el has its own update functions).
+ (gdb-var-delete): Make it work for gdbmi as well.
+ (gdb-speedbar-expand-node): Move var-update here for gdbmi.
+
+ * progmodes/gud.el (etags, sdb): Only require etags when needed.
+ (gud-speedbar-menu-items): Correct logic for enabling items.
+
+2005-07-15 Kim F. Storm <storm@cua.dk>
+
+ * ido.el: Fix commentary.
+ (ido-define-mode-map): Move ido-next-work-file to C-M-o.
+ Use with-no-warnings around ffap-guesser.
+ (ido-file-internal, ido-read-file-name, ido-read-directory-name):
+ Let bind minibuffer-completing-file-name to t.
+
+2005-07-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * startup.el (site-run-file, keyboard-type): Doc fixes.
+ (command-line): Check for "--basic-display" argument; also for
+ "--quick", not "--bare-bones" (which was renamed).
+ (fancy-splash-text): Add missing item "Getting New Versions".
+ (normal-splash-screen): Fix typos and improve consistency with
+ `fancy-splash-text'. Update copyright year.
+
+ * hexl.el (hexl-mode-map): Recognize also `ehelp-command' as a
+ valid binding for `help-char'.
+
+ * emacs-lisp/derived.el (derived-mode-hook-name): Doc fix.
+
+2005-07-14 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-mode): Disable cua-mode for term buffers.
+
+2005-07-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * add-log.el (add-log-mailing-address, change-log-merge):
+ Doc fixes.
+ (change-log-get-method-definition): Fix typo in docstring.
+
+2005-07-14 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el:
+ (cua--pre-command-handler-1, cua--pre-command-handler)
+ (cua--post-command-handler-1, cua--post-command-handler):
+ Split in two. Check (buffer local) value of cua-mode.
+ (cua-selection-mode): New command.
+
+2005-07-13 Luc Teirlinck <teirllm@auburn.edu>
+
+ * custom.el (custom-initialize-safe-set)
+ (custom-initialize-safe-default): Doc fixes.
+
+ * frame.el (blink-cursor-mode): Use `custom-initialize-safe-default'
+ and simplify :init-value again.
+
+ * tooltip.el (tooltip-mode): Use `custom-initialize-safe-default'
+ and simplify :init-value again. Delete autoload.
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' again
+ for tooltip-mode.
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Avoid constructing
+ a defcustom with two :initialize keywords.
+
+2005-07-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * allout.el (my-mark-marker, allout-isearch-prior-pos)
+ (allout-unprotected, allout-undo-aggregation, allout-snug-back)
+ (allout-post-command-business, allout-flag-region)
+ (isearch-reenable-font-lock, allout-yank)
+ (allout-insert-latex-header, allout-insert-latex-trailer)
+ (allout-latex-verbatim-quote-curr-line, allout-latexify-exposed)
+ (allout-latex-verb-quote): Fix typos in docstrings.
+ (allout-enwrap-isearch, regexp-sans-escapes): Doc fixes.
+ (allout-unprotected, allout-prefix-data):
+ Improve argument/docstring consistency.
+ (allout-chart-subtree): Fix argument spec.
+ (allout-open-topic): Rename `use_sib_bullet' argument to
+ `use-sib-bullet'. Doc fix.
+
+ * whitespace.el (whitespace-check-buffer-leading)
+ (whitespace-check-buffer-trailing)
+ (whitespace-check-buffer-indent)
+ (whitespace-check-buffer-spacetab)
+ (whitespace-check-buffer-ateol, whitespace-highlighted-space)
+ (whitespace-check-leading-whitespace)
+ (whitespace-check-trailing-whitespace)
+ (whitespace-check-spacetab-whitespace)
+ (whitespace-check-indent-whitespace)
+ (whitespace-check-ateol-whitespace, whitespace-abort-on-error)
+ (whitespace-modes): Fix typos in docstrings.
+ (defgroup, defcustom): Doc fixes.
+
+ * winner.el (winner-mode, winner-boring-buffers)
+ (winner-pending-undo-ring): Doc fixes.
+ (winner-ring): Remove unneeded `progn'.
+ (winner-equal): `defsubst' it.
+ (winner-redo): Fix message.
+
+2005-07-13 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-1): Always use vertical-motion to
+ do the last (or only) line move to ensure some movement.
+ Undo 2005-06-23 change--don't check for overlays.
+
+2005-07-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (ccl-encode-mac-roman-font)
+ (ccl-encode-mac-centraleurroman-font)
+ (ccl-encode-mac-cyrillic-font, ccl-encode-mac-symbol-font):
+ (ccl-encode-mac-dingbats-font): Remove check for ASCII.
+ Change charset-id boundary of dimension to ?\xef.
+ (mac-char-fontspec-list): New constant.
+ (fontset-add-mac-fonts): Use it. Accept non-string `base-family'
+ argument. Nil uses itself as family in font-spec. Previous
+ behavior for nil is now provided by non-nil non-string argument.
+ All callers changed. Add font-specs for Mac fonts to
+ "fontset-default" unless iso8859-1 fonts are installed.
+
+2005-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-get-indent-info): Only indent
+ a continuation line if the \ is preceded by SPC or TAB.
+ (sh-get-indent-info): Simplify.
+ (sh-mark-init, sh-learn-buffer-indent, sh-add-completer):
+ Use with-current-buffer.
+
+ * font-lock.el (font-lock-fontify-keywords-region): Avoid inf-loops
+ when the matched text is empty.
+
+2005-07-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (command-line): Revert to previous handling of
+ tooltip-mode. Explain in comment why the complexity is needed.
+
+ * tooltip.el (tooltip-mode): Revert to previous implementation of
+ its defcustom.
+
+ * frame.el (blink-cursor-mode): Revert to previous implementation
+ of its defcustom. Update comment.
+
+2005-07-12 Lars Hansen <larsh@soem.dk>
+
+ * desktop.el: Update e-mail address.
+
+2005-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-services-mail-selection)
+ (mac-services-mail-to): New functions.
+ (mac-application-menu-map): Bind them.
+
+2005-07-12 wulei <milton@wulei.net> (tiny change)
+
+ * progmodes/gdb-ui.el: Add note about buffering with Windows.
+
+2005-07-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * custom.el (custom-reevaluate-setting): Doc fix.
+
+2005-07-11 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-embedded-announce-formula-alist)
+ (calc-embedded-open-close-plain-alist)
+ (calc-embedded-open-close-mode-alist): Add checks for additional
+ major modes (due to Robert J. Chassell <bob@rattlesnake.com>).
+
+2005-07-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * custom.el (custom-enable-theme): Don't add theme to
+ `custom-enabled-themes' with `push' because there is no
+ setf-method for `delq'.
+
+2005-07-11 Richard M. Stallman <rms@gnu.org>
+
+ * custom.el (custom-declare-variable): Doc fix.
+
+ * dired-aux.el (dired-compare-directories): Remove "." and ".."
+ from the alists.
+
+ * emacs-lisp/edebug.el (edebug-slow-after, edebug-slow-before):
+ Do nothing if edebug-active.
+
+ * emacs-lisp/edebug.el (edebug-enter): Don't with-timeout-suspend here.
+ (edebug-display): Do it here instead.
+
+2005-07-10 Richard M. Stallman <rms@gnu.org>
+
+ * cus-face.el (custom-theme-set-faces): Make it work.
+ (custom-reset-faces): Doc fix.
+ (custom-theme-reset-internal-face, custom-theme-face-value):
+ Functions deleted.
+
+ * custom.el (custom-push-theme): Maintain list of the settings
+ of a given theme in its theme-settings property.
+ Maintain position of old settings in the theme-value
+ or theme-face property.
+ (custom-enabled-themes): New variable.
+ (custom-theme-enabled-p): New function.
+ (provide-theme): Update custom-enabled-themes.
+ Disable and reenable the `user' theme.
+ (require-theme): Doc fix.
+ (custom-do-theme-reset, custom-remove-theme): Functions deleted.
+ (custom-theme-value, custom-theme-variable-value): Likewise.
+ (custom-theme-reset-internal): Likewise.
+ (custom-theme-load-themes): Fix bugs and use custom-disable-theme.
+ (custom-enable-theme, custom-disable-theme): New functions.
+ (custom-variable-theme-value, custom-face-theme-value): Likewise.
+ (custom-theme-recalc-variable, custom-theme-recalc-face): Likewise.
+ (custom-theme-reset-variables): Simplify.
+ (deftheme, custom-declare-theme, custom-make-theme-feature):
+ Definitions moved.
+
+2005-07-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el (longlines-show-region)
+ (longlines-unshow-hard-newlines): Recognize hard newlines by
+ non-nil hard property, instead of t.
+
+2005-07-10 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper--key-maps): New variable.
+ (viper-normalize-minor-mode-map-alist): Use viper--key-maps and
+ emulation-mode-map-alists.
+ (viper-envelop-ESC-key): Use viper-subseq.
+ (viper-search-forward/backward/next): Disable debug-on-error.
+
+ * emulation/viper-keym.el (viper-toggle-key, viper-quoted-insert-key)
+ (viper-ESC-key): New defcustoms.
+
+ * emulation/viper-macs.el (ex-map-read-args): Use viper-subseq.
+
+ * emulation/viper-util.el (viper-key-to-emacs-key): Use viper-subseq.
+ (viper-subseq): Copy of subseq from cl.el.
+
+ * emulation/viper.el (viper-go-away, viper-set-hooks): Use
+ emulation-mode-map-alists, advise self-insert-command, add-minor-mode.
+
+ * emulation/viper-mous.el (viper-current-frame-saved): Use defvar.
+
+ * emulation/viper-init.el: Get rid of -face in face names.
+
+ * ediff-diff.el (ediff-extract-diffs, ediff-extract-diffs3):
+ Make it work with longlines mode.
+
+ * ediff-mult.el (ediff-meta-mode-hook): New variable.
+
+ * ediff-ptch.el (ediff-file-name-sans-prefix): Quote regexp.
+
+ * ediff-init.el: Get rid of -face in face names.
+
+2005-07-10 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/edebug.el (edebug-enter): Call with-timeout-suspend
+ and with-timeout-unsuspend.
+
+ * emacs-lisp/debug.el (debug): Call with-timeout-suspend
+ and with-timeout-unsuspend.
+
+ * emacs-lisp/timer.el (with-timeout-timers): New variable.
+ (with-timeout): Bind that variable to record timers.
+ (with-timeout-suspend, with-timeout-unsuspend): New functions.
+
+ * emacs-lisp/debug.el (debug-help-follow): New function.
+ (debugger-mode-map): Use that instead of help-follow.
+ (debugger-setup-buffer): Use eval-buffer-list
+ to handle eval-buffer frames.
+
+2005-07-10 N. Raghavendra <raghu@mri.ernet.in> (tiny change)
+
+ * timezone.el (timezone-parse-date): Change first regexp
+ so it will not mistakenly match dates with no time zone.
+
+2005-07-10 Jeff Dwork <jeff.dwork@amd.com> (tiny change)
+
+ * facemenu.el (facemenu-read-color): Do case-insensitive matching.
+
+2005-07-10 Luc Teirlinck <teirllm@auburn.edu>
+
+ * custom.el (custom-initialize-safe-set)
+ (custom-initialize-safe-default): New functions.
+
+ * frame.el (blink-cursor-mode): Use `custom-initialize-safe-default'
+ and simplify :init-value.
+
+ * tooltip.el (tooltip-mode): Use `custom-initialize-safe-default'
+ and simplify :init-value. Delete obsolete comment.
+
+ * startup.el (command-line): Use `custom-reevaluate-setting' to
+ handle `tooltip-mode'. Delete obsolete comment.
+
+ * files.el (set-visited-file-name): Avoid calling
+ `file-name-nondirectory' with a nil argument.
+
+2005-07-09 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/debug.el (debugger-setup-buffer): When eval-buffer
+ was called with nil for the buffer, handle the read position right.
+ Handle read position for eval-region, too.
+
+2005-07-09 Juri Linkov <juri@jurta.org>
+
+ * fringe.el (fringe-mode): Add period in docstring.
+ (fringe-query-style): Build prompt depending on `all-frames' arg.
+
+ * dired.el (dired-marker-char): Avoid quotations for `do' and `mark'
+ to not create links to unrelated functions in the Help buffer.
+
+ * progmodes/compile.el (compilation-mode-hook, compilation-mode):
+ Doc fix.
+
+ * simple.el (next-error-hook): New variable.
+ (next-error): Use it. Doc fix.
+
+ * textmodes/ispell.el (ispell-command-loop): Add current
+ dictionary name and program name to mode-line-format.
+ (ispell-region, ispell-process-line): Add current dictionary name
+ and program name to messages.
+
+2005-07-08 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-embedded-announce-formula-alist)
+ (calc-embedded-open-close-formula-alist)
+ (calc-embedded-open-close-word-alist)
+ (calc-embedded-open-close-plain-alist)
+ (calc-embedded-open-close-new-formula-alist)
+ (calc-embedded-open-close-mode-alist)
+ (calc-embedded-new-buffer-hook, calc-embedded-new-formula-hook)
+ (calc-embedded-mode-hook): New variables.
+
+ * calc/calc-embed.el (calc-embedded-firsttime)
+ (calc-embedded-firsttime-buf, calc-embedded-firsttime-formula):
+ New variables.
+ (calc-do-embedded): Use calc-embedded-firsttime,
+ calc-embedded-firsttime-buf and calc-embedded-firsttime-formula to
+ determine whether or not to run hooks.
+ (calc-embedded-make-info): Set calc-embedded-firsttime-buf and
+ calc-embedded-firsttime-formula appropriately.
+ Set calc-embedded delimiter variables according to mode.
+
+2005-07-08 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/checkdoc.el (checkdoc-proper-noun-list):
+ Check for "emacs", etc., as entire symbol, not just as word.
+ (checkdoc-file-comments-engine): Use regexp-quote on FN.
+
+ * files.el (set-visited-file-name): Report the error
+ for "empty filename" earlier.
+ (kill-some-buffers): Ignore buffers already dead.
+
+ * fringe.el (fringe-mode): Doc fix.
+
+ * emacs-lisp/bytecomp.el (byte-compile-maybe-guarded):
+ Check for (featurep 'xemacs) and turn off warnings in what it guards.
+ Use unwind-protect to ensure byte-compile-unresolved-functions
+ is updated.
+
+ * whitespace.el (whitespace-buffer-leading-cleanup):
+ Simplify w/ skip-chars-forward.
+ (whitespace-buffer-trailing-cleanup): Simplify w/ skip-chars-backward.
+
+ * mail/rmail.el (rmail-only-expunge): Fix paren error.
+ Unconditionally try to leave point at the same old place.
+
+2005-07-08 Ralf Angeli <angeli@iwi.uni-sb.de> (tiny change)
+
+ * comint.el (comint-postoutput-scroll-to-bottom)
+ (comint-show-maximum-output): Take scroll-margin into consideration.
+
+2005-07-08 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-use-filename-at-point): New choice `guess'.
+ (ido-file-internal): Try ffap-guesser if selected.
+
+ * ido.el (ido-before-fallback-functions): New hook.
+ (ido-buffer-internal, ido-file-internal, ido-read-buffer)
+ (ido-read-file-name): Run it.
+
+2005-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/hideif.el (hide-ifdef-use-define-alist): Pass a list of
+ strings rather than a list of symbols to the completion function.
+
+2005-07-07 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-units.el (math-apply-units): Change the places in
+ which units are simplified.
+
+2005-07-07 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (customize-option, customize-option-other-window):
+ Make them handle aliases.
+
+ * custom.el (custom-variable-p): Make it recursively follow
+ aliases. Mention that in the docstring.
+
+2005-07-07 Richard M. Stallman <rms@gnu.org>
+
+ * cus-start.el (exec-path): Use `directory' instead of `file'.
+ Fix tag for nil.
+
+2005-07-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * replace.el (occur-rename-buffer): Use `generate-new-buffer' also
+ when called non-interactively. Doc fix.
+
+2005-07-07 Lute Kamstra <lute@gnu.org>
+
+ * elide-head.el (elide-head-headers-to-hide): Recognize the FSF's
+ new address as well.
+
+2005-07-07 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (make-coding-system):
+ Describe `ascii-incompatible' property in the docstring.
+ (set-file-name-coding-system): Signal an error if coding-system is
+ ascii-incompatible.
+ (set-keyboard-coding-system): Likewise.
+
+ * international/mule-cmds.el (set-default-coding-systems):
+ Don't set default-file-name-coding-system and
+ default-keyboard-coding-system if coding-system is ASCII-incompatible.
+
+ * international/utf-16.el: Declare that all UTF-16-based coding
+ systems are ASCII-incompatible.
+
+2005-07-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el: Require font-lock for displaying errors.
+ Used by gdb-ui.el.
+
+2005-07-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * hi-lock.el (hi-lock-find-patterns): Protect also against invalid
+ values for the pattern lists which are `read'able but not
+ `append'able (like symbols).
+
+2005-07-06 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/flymake.el (flymake-float-time): Instead of
+ with-no-warnings, test for XEmacs.
+ (flymake-replace-regexp-in-string): Test fboundp of replace-in-string
+ to avoid warning.
+
+2005-07-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32-vars.el (w32-fixed-font-alist): Fix typo in `defcustom' tag.
+
+2005-07-05 Lute Kamstra <lute@gnu.org>
+
+ * battery.el: Add support for Darwin (with much debugging help
+ from Samuel Lauber <sam124@operamail.com>).
+ (battery-status-function, battery-echo-area-format)
+ (battery-mode-line-format): Add support for pmset on Darwin.
+ (battery-load-low, battery-load-critical): New user options.
+ (battery-pmset): New function.
+
+2005-07-05 Lute Kamstra <lute@gnu.org>
+
+ Update FSF's address in GPL notices.
+
+ * textmodes/page-ext.el: Update FSF's address.
+
+2005-07-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-variables): Prevent adaptive
+ filling from using prefix when filling a single-line docstring.
+
+ * progmodes/flymake.el: Remove useless eval-when-compile.
+
+ * arc-mode.el (archive-lzh-ogm): Reorder save excursion/restriction.
+
+2005-07-04 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/org.el (org-file-apps-defaults-gnu):
+ Rename from org-file-apps-defaults-linux.
+ (org-default-apps): Don't test system-type for `linux'.
+ (org-file-apps): Doc fix.
+
+2005-07-04 David Ponce <david@dponce.com>
+
+ * tree-widget.el: Improve header Commentary section.
+ (tree-widget) [defgroup]
+ (tree-widget-image-enable, tree-widget-themes-directory)
+ (tree-widget-theme, tree-widget-image-properties-emacs)
+ (tree-widget-image-properties-xemacs, tree-widget-create-image)
+ (tree-widget-image-formats, tree-widget-control)
+ (tree-widget-empty-control, tree-widget-leaf-control)
+ (tree-widget-guide, tree-widget-end-guide, tree-widget-no-guide)
+ (tree-widget-handle, tree-widget-no-handle, tree-widget-p)
+ (tree-widget-keep, tree-widget-after-toggle-functions)
+ (tree-widget-open-node, tree-widget-close-node): Doc fix.
+ (tree-widget-open-control, tree-widget-close-control): Fix doc and
+ :help-echo message.
+ (tree-widget-set-theme): Doc fix. Use `string-equal'.
+ (tree-widget-image-properties): Doc fix. Clearer implementation.
+ (tree-widget--cursors): New constant.
+ (tree-widget-lookup-image): New function split from
+ `tree-widget-find-image'. Clearer implementation.
+ (tree-widget-find-image): Use it.
+ (tree-widget-button-keymap): Use `set-keymap-parent'.
+ (tree-widget) [define-widget]: Use `widget-children-value-delete'.
+ Define the sub-widgets here.
+ (tree-widget-node): Check that :node is not a tree-widget.
+ (tree-widget-get-super, tree-widget-open-control)
+ (tree-widget-close-control, tree-widget-empty-control)
+ (tree-widget-leaf-control, tree-widget-guide)
+ (tree-widget-end-guide, tree-widget-no-guide, tree-widget-handle)
+ (tree-widget-no-handle, tree-widget-value-delete)
+ (tree-widget-map): Remove.
+ (tree-widget-children-value-save): Doc fix. Simplified.
+ (tree-widget-value-create): Update according to previous changes.
+
+2005-07-04 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el: Leading space replaced by TABS.
+ (org-recalc-marks, org-table-rotate-recalc-marks)
+ (org-table-get-specials): Treat "^" and "_" marks.
+ (org-table-justify-field-maybe): Optional argument NEW.
+ (org-table-eval-formula): Parsing of the format simplified.
+ New modes C,I. Honor the %= parameter in the current table.
+ Avoid unnecessary re-align by using the NEW argument to
+ `org-table-justify-field-maybe'.
+ (org-calc-default-modes): Default for date-format mimicks org-mode.
+ (org-agenda, org-timeline): Quote argument in org-agenda-redo-command.
+
+2005-07-03 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-face.el (custom-theme-set-faces): Make it handle face
+ aliases whose alias declarations are pre- or autoloaded.
+
+2005-07-04 Juri Linkov <juri@jurta.org>
+
+ * faces.el (read-face-name): Put the code for getting a face name
+ from the buffer before adding the faces from the `face' property.
+ Use `completing-read-multiple' instead of `completing-read'.
+ Require `crm'. Add default value and post-process the returned
+ list of faces.
+
+ * emacs-lisp/crm.el (crm-find-current-element)
+ (crm-minibuffer-complete-and-exit): Handle minibuffer prompt.
+
+ * emacs-lisp/lisp-mode.el (eval-defun-1):
+ * emacs-lisp/edebug.el (edebug-eval-defun):
+ Remove unnecessary quotes.
+
+2005-07-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/prolog.el (prolog-eof-string): Doc fixes.
+ (prolog-indent-level): Fix typo in docstring.
+
+ * info.el (Info-history, Info-history-forward)
+ (Info-history-list, Info-speedbar-fetch-file-nodes): Doc fixes.
+
+ * add-log.el (add-change-log-entry):
+ * comint.el (comint-dynamic-list-input-ring)
+ (comint-dynamic-list-completions):
+ * dabbrev.el (dabbrev-expand):
+ * delim-col.el (delimit-columns-rectangle-line):
+ * diff-mode.el (diff-context->unified, diff-reverse-direction)
+ (diff-unified->context):
+ * ediff-init.el (ediff-abbrev-jobname):
+ * ediff-mult.el (ediff-replace-session-status-in-meta-buffer)
+ (ediff-replace-session-activity-marker-in-meta-buffer):
+ * info.el (Info-summary):
+ * lpr.el (printify-region):
+ * printing.el (pr-create-interface):
+ * ps-print.el (ps-print-quote):
+ * ses.el (ses-column-widths, ses-print-cell)
+ (ses-adjust-print-width, ses-center):
+ * shell.el (shell-file-name-quote-list):
+ * strokes.el (strokes-read-stroke, strokes-read-complex-stroke)
+ (strokes-fill-current-buffer-with-whitespace)
+ (strokes-xpm-for-stroke, strokes-list-strokes)
+ (strokes-xpm-char-bit-p, strokes-xpm-for-compressed-string):
+ * term.el (term-dynamic-list-input-ring)
+ (term-dynamic-list-completions):
+ * calc/calc.el (math-format-stack-value):
+ * emacs-lisp/edebug.el (edebug-display-freq-count):
+ * progmodes/delphi.el (delphi-indent-line, delphi-fill-comment)
+ (delphi-new-comment-line):
+ * progmodes/ebnf2ps.el (ebnf-eps-filename, ebnf-trim-right):
+ * progmodes/executable.el (executable-set-magic):
+ * progmodes/python.el (inferior-python-mode):
+ * progmodes/scheme.el (scheme-mode-syntax-table):
+ * progmodes/sh-script.el (sh-maybe-here-document):
+ * progmodes/sql.el (sql-copy-column):
+ * progmodes/tcl.el (tcl-comment-indent, tcl-quote):
+ * textmodes/bibtex.el (bibtex-mode):
+ * textmodes/sgml-mode.el (html-imenu-index, sgml-attributes)
+ (sgml-auto-attributes):
+ * textmodes/table.el (table-insert, table-shorten-cell)
+ (table--generate-source-scan-lines, table-delete-row)
+ (*table--cell-delete-char, table--spacify-frame)
+ (table--horizontally-shift-above-and-below)
+ (table--cell-insert-char, table--cell-blank-str)
+ (table--fill-region-strictly):
+ * textmodes/tex-mode.el (tex-insert-quote, latex-find-indent):
+ * textmodes/texinfo.el (texinfo-insert-quote): "?\ " -> "?\s".
+
+ * add-log.el (change-log):
+ * apropos.el (apropos):
+ * comint.el (comint-completion, comint-source):
+ * dabbrev.el (dabbrev):
+ * delim-col.el (columns):
+ * diff-mode.el (diff-mode):
+ * ediff.el (ediff):
+ * ediff-diff.el (ediff-diff):
+ * ediff-init.el (ediff-highlighting, ediff-merge, ediff-hook):
+ * ediff-mult.el (ediff-mult):
+ * ediff-ptch.el (ediff-ptch):
+ * ediff-wind.el (ediff-window):
+ * facemenu.el (facemenu):
+ * indent.el (indent):
+ * info.el (info):
+ * jka-cmpr-hook.el (compression, jka-compr):
+ * lpr.el (lpr):
+ * outline.el (outlines):
+ * pcmpl-cvs.el (pcmpl-cvs):
+ * pcmpl-rpm.el (pcmpl-rpm):
+ * printing.el (printing):
+ * ps-print.el (postscript, ps-print, ps-print-horizontal)
+ (ps-print-vertical, ps-print-headers, ps-print-font)
+ (ps-print-color, ps-print-face, ps-print-n-up, ps-print-zebra)
+ (ps-print-background, ps-print-printer, ps-print-page)
+ (ps-print-miscellany):
+ * ses.el (ses):
+ * shell.el (shell, shell-directories, shell-faces):
+ * startup.el (initialization):
+ * strokes.el (strokes):
+ * term.el (term):
+ * uniquify.el (uniquify):
+ * w32-vars.el (w32):
+ * calc/calc.el (calc):
+ * emacs-lisp/bytecomp.el (bytecomp):
+ * emacs-lisp/cl-indent.el (lisp-indent):
+ * emacs-lisp/edebug.el (edebug):
+ * emacs-lisp/elp.el (elp):
+ * emacs-lisp/testcover.el (testcover):
+ * emacs-lisp/trace.el (trace):
+ * emulation/viper-ex.el (viper-ex):
+ * emulation/viper-mous.el (viper-mouse):
+ * mail/mailalias.el (mailalias):
+ * mail/supercite.el (supercite, supercite-frames)
+ (supercite-attr, supercite-cite, supercite-hooks):
+ * net/rcompile.el (remote-compile):
+ * net/rlogin.el (rlogin):
+ * obsolete/ooutline.el (outlines):
+ * progmodes/delphi.el (delphi):
+ * progmodes/ebnf2ps.el (postscript, ebnf2ps, ebnf-special)
+ (ebnf-except, ebnf-repeat, ebnf-terminal, ebnf-non-terminal)
+ (ebnf-production, ebnf-shape, ebnf-displacement, ebnf-syntactic)
+ (ebnf-optimization):
+ * progmodes/etags.el (etags):
+ * progmodes/executable.el (executable):
+ * progmodes/idlwave.el (idlwave):
+ * progmodes/pascal.el (pascal):
+ * progmodes/prolog.el (prolog):
+ * progmodes/python.el (python):
+ * progmodes/scheme.el (scheme):
+ * progmodes/sh-script.el (sh, sh-script):
+ * progmodes/sql.el (SQL):
+ * progmodes/tcl.el (tcl):
+ * textmodes/bibtex.el (bibtex, bibtex-autokey):
+ * textmodes/enriched.el (enriched):
+ * textmodes/makeinfo.el (makeinfo):
+ * textmodes/sgml-mode.el (sgml):
+ * textmodes/table.el (table-hooks):
+ * textmodes/tex-mode.el (tex-file, tex-run, tex-view):
+ * textmodes/texinfo.el (texinfo):
+ * textmodes/two-column.el (two-column):
+ Finish `defgroup' description with period.
+
+ * emacs-lisp/cl-indent.el (lisp-indent-maximum-backtracking):
+ * eshell/esh-var.el (eshell-var):
+ * progmodes/vhdl-mode.el (vhdl-testbench):
+ * textmodes/org.el (org): Fix typos in docstrings.
+
+ * emacs-lisp/timer.el (with-timeout): Improve argument/docstring
+ consistency.
+
+ * progmodes/flymake.el (flymake-find-file): Remove.
+ (flymake-float-time): Use `with-no-warnings'.
+ (flymake-check-start-time, flymake-check-was-interrupted)
+ (flymake-err-info, flymake-is-running, flymake-last-change-time)
+ (flymake-new-err-info): `defvar' at compile time.
+
+2005-07-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * replace.el (occur-hook): Doc fix.
+ (occur-1): Don't call `occur-hook' if there are no matches.
+
+2005-07-03 Richard M. Stallman <rms@gnu.org>
+
+ * emulation/tpu-edt.el (tpu-original-global-map): Don't copy
+ global-map, save the same map.
+ (global-map): Don't alter it at top level.
+ (tpu-edt-on): Save global map in tpu-original-global-map, then copy.
+ Then alter it here instead.
+ (tpu-edt-off): Set global-map to the saved one.
+
+ * emulation/tpu-edt.el (tpu-emacs19-p): Var deleted.
+ All references simplified.
+ (tpu-lucid-emacs-p): Rename from tpu-lucid-emacs19-p. Uses changed.
+ (zmacs-regions): Add defvar.
+ (repeat-complex-command-map): Everything about that deleted.
+
+ * textmodes/artist.el (artist-key-is-drawing)
+ (artist-key-endpoint1, artist-key-poly-point-list)
+ (artist-key-shape, artist-key-draw-how, artist-popup-menu-table)
+ (artist-key-compl-table, artist-rb-save-data)
+ (artist-arrow-point-1, artist-arrow-point-2): Move defvars up.
+ Don't put them in eval-when-compile.
+ (artist-set-arrow-points-for-poly): Use `last', not `artist-last'.
+
+ * progmodes/ebrowse.el (ebrowse-revert-tree-buffer-from-file):
+ Use with-no-warnings.
+
+ * net/browse-url.el (dos-windows-version): Add defvar.
+
+ * mail/supercite.el (filladapt-prefix-table): Add defvar.
+
+ * mail/rmailsum.el (rmail-summary-redo): Add defvar.
+ (rmail-summary-mode-map, rmail-summary-overlay): Defvars moved up.
+ (rmail-new-summary-line-count): Rename from new-summary-line-count.
+ Add defvar.
+ (rmail-summary-beginning-of-message): Use with-no-warnings.
+ (rmail-summary-first-message, rmail-summary-last-message): Likewise.
+
+ * emulation/vip.el (vip-replace-string, ex-map, ex-read):
+ Use with-no-warnings.
+
+ * emulation/vi.el (vi-mark-region): Use c-mark-function.
+ (c-mark-function): Add point-moving-unit property.
+ (vi-goto-line): Use with-no-warnings.
+
+ * emulation/edt.el (edt-last-copied-word): Add defvar.
+ (zmacs-region-stays): Likewise.
+ (edt-mark-section-wisely): Use c-mark-function for C.
+ Use makr-defun for Fortran.
+ (time-string): defvar deleted.
+ (edt-display-the-time): Don't set time-string.
+
+ * emacs-lisp/macroexp.el (macroexp-accumulate): Rename arg to var+list.
+
+ * emacs-lisp/bytecomp.el (byte-compile-nogroup-warn):
+ Don't warn when name is not constant
+ or for defining the group `emacs'.
+
+ * tooltip.el (gud-tooltip-mode): Add defvar.
+
+ * startup.el (default-frame-background-mode): Add defvar.
+
+ * smerge-mode.el (smerge-mode): Add duplicate defvar near top.
+
+ * info.el (tool-bar-map): Add defvar.
+
+ * dired.el (dnd-protocol-alist): Add defvar.
+
+ * dired-aux.el (dired-query): Display question with answer, when
+ the user answers.
+
+ * custom.el (custom-add-option): Doc fix.
+
+ * bookmark.el (Info-current-node, Info-suffix-list): Add defvars.
+
+2005-07-03 Eli Zaretskii <eliz@gnu.org>
+
+ * font-lock.el (font-lock-regexp-grouping-construct): Fix the
+ bogus name from the last change.
+
+2005-07-02 Luc Teirlinck <teirllm@auburn.edu>
+
+ * custom.el (custom-declare-variable): Fix typos in comment.
+ (custom-known-themes): Doc fix.
+ (custom-theme-directory): New defcustom.
+ (require-theme): Make it check `custom-theme-directory'.
+
+ * cus-theme.el (custom-new-theme-mode): New function.
+ (custom-theme-name, custom-theme-variables, custom-theme-faces)
+ (custom-theme-description): Add compiler defvars.
+ (customize-create-theme): Add doc to the "*New Custom Theme*"
+ buffer. Use `custom-new-theme-mode'.
+ (custom-theme-write): Put the created buffer in emacs-lisp-mode
+ and save it to the `custom-theme-directory'. Make this the
+ default directory of the buffer.
+
+2005-07-02 David Hunter <hunterd_42@comcast.net> (tiny change)
+
+ * progmodes/flymake.el (flymake-mode, flymake-mode-off):
+ Fix unbalanced parentheses.
+
+2005-07-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/flymake.el (flymake-mode-on, flymake-mode-off): Move body
+ into flymake-mode and delegate to flymake-mode.
+
+ * find-file.el (ff-which-function-are-we-in): Clean up.
+
+2005-07-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * replace.el (occur-rename-buffer): Fix docstring.
+
+ * emulation/edt.el (*EDT-keys*, edt-default-global-map)
+ (edt-last-copied-word, edt-learn-macro-count)
+ (edt-orig-page-delimiter, edt-orig-transient-mark-mode)
+ (edt-rect-start-point, edt-user-global-map, rect-start-point)
+ (time-string, zmacs-region-stays):
+ * emulation/edt-mapper.el (edt-save-function-key-map)
+ (EDT-key-name): `defvar' to silence the byte-compiler.
+
+2005-07-02 Martin Rudalics <rudalics@gmx.at>
+
+ * font-lock.el (font-lock-regexp-grouping-backslash): Rename from
+ font-lock-regexp-backslash. Doc fix.
+ (font-lock-regexp-backslash-grouping-construct): Rename from
+ font-lock-regexp-backslash-construct. Doc fix.
+ (lisp-font-lock-keywords-2): Fix highlighting of Elisp regexp
+ grouping constructs.
+
+2005-07-02 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (bootstrap): Remove the $(EMACS) binary after
+ updating all the prerequisites.
+
+2005-07-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * textmodes/org.el (org-agenda-start-on-weekday)
+ (org-calendar-to-agenda-key, org-agenda-sorting-strategy)
+ (org-agenda-use-time-grid, org-archive-location)
+ (org-allow-space-in-links, org-usenet-links-prefer-google)
+ (org-enable-table-editor, org-export-default-language)
+ (org-export-html-show-new-buffer, org-fill-paragraph)
+ (org-cycle, org-goto-ret, org-goto-left, org-goto-right)
+ (org-goto-quit, org-occur, org-eval-in-calendar)
+ (org-agenda-cleanup-fancy-diary, org-agenda-no-heading-message)
+ (org-agenda-diary-entry, org-remember-help)
+ (org-table-convert-region, org-at-table-p)
+ (org-table-move-row-down, org-table-move-row-up)
+ (org-table-copy-region, org-table-toggle-vline-visibility)
+ (org-table-get-stored-formulas, org-table-get-specials)
+ (org-recalc-commands, org-table-eval-formula)
+ (org-table-formula-substitute-names, orgtbl-make-binding)
+ (org-format-org-table-html, org-format-table-table-html)
+ (org-format-table-table-html-using-table-generate-source)
+ (org-customize): Fix typos in docstrings.
+ (org-level-2, org-at-timestamp-p, org-agenda-day-view)
+ (org-agenda-toggle-diary, org-agenda-toggle-time-grid)
+ (org-back-to-heading): Doc fixes.
+ (org-agenda-toggle-time-grid, org-cmp-category, org-cmp-time)
+ (org-agenda-change-all-lines, org-get-header):
+ Improve argument/docstring consistency.
+ (orgtbl-error): Fix error message.
+
+ * progmodes/flymake.el (flymake-find-possible-master-files)
+ (flymake-master-file-compare, flymake-get-line-err-count)
+ (flymake-highlight-line, flymake-gui-warnings-enabled):
+ Fix typos in docstrings.
+ (flymake-parse-line, flymake-get-project-include-dirs-function)
+ (flymake-get-prev-err-line-no, flymake-goto-prev-error):
+ Doc fixes.
+ (flymake-get-project-include-dirs-function)
+ (flymake-make-err-menu-data):
+ Improve argument/docstring consistency.
+
+2005-07-01 Lute Kamstra <lute@gnu.org>
+
+ * battery.el (battery-linux-proc-apm): Fix typo in docstring.
+ Catch errors with ignore-errors. Use temporary buffer.
+ (battery-linux-proc-acpi): Fix typo in docstring. Document `%r'.
+
+ * facemenu.el (facemenu-unlisted-faces): Delete foreground and
+ background color faces.
+ (facemenu-set-foreground, facemenu-set-background):
+ Use facemenu-set-face-from-menu.
+ (facemenu-set-face-from-menu): Treat face names that start with
+ "fg:" or "bg:" as special.
+ (facemenu-add-new-color): Don't create faces. Simplify.
+
+2005-06-30 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/crm.el (crm-do-completion): Handle minibuffer prompt.
+ (crm-find-current-element): Likewise.
+
+2005-06-30 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net>
+
+ * help-fns.el (help-do-arg-highlight): Regexp-quote argument names.
+
+2005-06-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * arc-mode.el (archive-extract): Make it work as a mouse binding.
+ (archive-mouse-extract): Make it an obsolete alias.
+ (archive-mode-map): Don't use archive-mouse-extract any more.
+ (archive-mode, archive-extract): write-contents-hooks ->
+ write-contents-functions.
+ (archive-arc-rename-entry, archive-lzh-rename-entry): Remove unused
+ first arg.
+ (archive-rename-entry): Update the call.
+ (archive-zip-summarize): Remove unused var `method'.
+ (archive-lzh-summarize): Remove unused var `creator'.
+
+ * emacs-lisp/debug.el (debug): Quieten Drew Adams by killing the
+ dedicated frame upon exit.
+
+ * arc-mode.el: Bind inhibit-read-only rather than buffer-read-only.
+ (archive-zip-extract, archive-zip-expunge)
+ (archive-zip-update, archive-zip-update-case): Use executable-find.
+ (archive-resummarize, archive-flag-deleted, archive-unmark-all-files):
+ Use restore-buffer-modified-p.
+ (archive-extract, archive-add-new-member, archive-write-file-member):
+ Use with-current-buffer.
+ (archive-lzh-ogm, archive-zip-chmod-entry): Use dolist.
+
+2005-06-30 Andreas Schwab <schwab@suse.de>
+
+ * progmodes/gud.el (gud-filter): Remove unneeded progn.
+
+2005-06-30 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * progmodes/sh-script.el (sh-get-kw): `&' also separates words.
+
+2005-06-30 Juri Linkov <juri@jurta.org>
+
+ * faces.el (vertical-border): Inherit from mode-line-inactive
+ only on tty.
+
+2005-06-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * help-fns.el (help-do-arg-highlight): Highlight also -ARG (for
+ example, -NLINES in the `occur' docstring).
+
+ * replace.el (occur-1): When no matches are found, do not set the
+ `buffer-read-only' and modified flags for the occur buffer,
+ because it is deleted.
+
+ * emulation/cua-base.el (cua-check-pending-input)
+ (cua-repeat-replace-region, cua-mode, cua-debug)
+ (cua-auto-tabify-rectangles, cua-inhibit-cua-keys):
+ Fix typos in docstrings.
+
+ * emulation/cua-gmrk.el (cua-toggle-global-mark)
+ (cua-cut-region-to-global-mark)
+ (cua--cut-rectangle-to-global-mark):
+ Remove period from end of messages.
+
+ * emulation/cua-rect.el (cua-do-rectangle-padding):
+ Remove period from end of messages.
+ (cua--rectangle-seq-format): Fix typo in docstring.
+ (cua-sequence-rectangle, cua-fill-char-rectangle):
+ Improve argument/docstring consistency.
+
+2005-06-29 Juri Linkov <juri@jurta.org>
+
+ * faces.el (default-frame-background-mode): New internal variable.
+ (frame-set-background-mode): Use it.
+
+ * startup.el (normal-top-level): Set default-frame-background-mode
+ instead of frame-background-mode. Before setting it, test for its
+ nil value. Remove tests for frame-background-mode and frame
+ parameter `reverse'. Add test for "unspecified-fg".
+
+ * term/xterm.el (xterm-rxvt-set-background-mode):
+ * term/rxvt.el (rxvt-set-background-mode):
+ Set default-frame-background-mode instead of frame-background-mode.
+
+2005-06-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * simple.el (set-variable): Warn about obsolete user variables.
+
+ * imenu.el (imenu--completion-buffer):
+ * mouse.el (mouse-buffer-menu-alist):
+ * msb.el (msb-invisible-buffer-p):
+ * calendar/diary-lib.el (diary-header-line-format):
+ * emacs-lisp/pp.el (pp-buffer):
+ * progmodes/cperl-mode.el (cperl-do-auto-fill):
+ * textmodes/picture.el (picture-replace-match):
+ Change space constants followed by a sexp to "?\s ".
+
+ * play/decipher.el (decipher-loop-with-breaks):
+ * textmodes/texinfo.el (texinfo-insert-@item): Change space
+ constants "protected" from end of line by a comment to "?\s".
+
+2005-06-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (save-buffer-state): Use `declare'.
+
+ * progmodes/cperl-mode.el (cperl-find-pods-heres): Don't gratuitously
+ reset the syntax-table to cperl-mode-syntax-table.
+ (cperl-mode): Make _ into word-syntax during font-locking so "print" in
+ "foo_print_bar" is not matched as a reserved keyword.
+
+2005-06-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (orgtbl-setup): New function, for delayed
+ setup for the orgtbl commands.
+ (org-calc-default-modes): New option.
+ (orgtbl-make-binding): Use `defun' to get better help display.
+ (org-diary): Call `org-compile-prefix-format'.
+ (org-table-formula-substitute-names): New function.
+ (org-agenda-day-view, org-agenda-week-view): New commands.
+ (org-agenda-toggle-week-view): Command removed.
+ (org-tbl-menu): Split off from org-org-menu.
+ (org-mode): Move removal of outline-mode menus to here.
+ (org-table-formula-debug): New option.
+ (org-table-insert-row): Keep first field if just "#" or "*".
+ (org-mode): Paragraph regexps fixed.
+ (org-table-recalculate-regexp): New constant.
+ (org-table-justify-field-maybe): Avoid replace if not necessary.
+ (org-copy-special, org-cut-special): Use `call-interactively'.
+ (org-table-copy-region): Take region from `interactive' call.
+ (org-trim): Return string even if no match.
+ (org-formula): New face.
+ (org-set-font-lock-defaults): No longer highlight "FIXME".
+ But highlight formula-related fields in table.
+ (org-table-p): Use regexp, not fontification.
+ (org-table-align): Handle white space at end of line.
+ (org-table-formula-evaluate-inline): New option.
+ (org-mode): Auto-wrapping in comment lines turned off.
+ (org-table-copy-down): Evaluate only in copied field, not in
+ destination.
+ (org-table-current-formula): Variable removed.
+ (org-table-store-formulas, org-table-get-stored-formulas)
+ (org-table-modify-formulas, org-table-replace-in-formulas)
+ (org-table-maybe-eval-formula): New functions.
+ (org-table-get-formula): Modify to use stored formulas.
+ (org-table-insert-column, org-table-delete-column)
+ (org-table-move-column): Call `org-table-modify-formulas'.
+ (org-complete): Add completion for keyword formulas.
+ (orgtbl-mode): Pull orgtbl-mode-map to start of
+ minor-mode-map-alist.
+
+2005-06-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/python.el (python-check): Require `compile' before
+ modifying its variables.
+
+ * newcomment.el (comment-indent-default): Don't get fooled by an early
+ end of buffer.
+
+2005-06-28 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el (ps-print-version): Fix version number.
+
+2005-06-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * textmodes/ispell.el (ispell-word): Remove stray parenthesis.
+
+2005-06-28 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-use-local-map): Variable deleted.
+ (flyspell-local-mouse-map): Declaration deleted.
+ (flyspell-mouse-map): Bind only mouse-2.
+ (flyspell-mode-map): Don't test flyspell-use-local-map.
+ (flyspell-overlay-keymap-property-name): Var deleted.
+ (flyspell-mode-on): Don't make local bindings for
+ flyspell-mouse-map and flyspell-mode-map.
+ (make-flyspell-overlay): Unconditionally put on `keymap' text prop.
+
+ * textmodes/ispell.el (ispell-word): Do not ignore short words.
+
+ * progmodes/compile.el (compilation-next-error-function):
+ Don't switch buffers; operate on the current buffer.
+
+ * progmodes/compile.el (compilation-error-file-name)
+ (compilation-warning-file-name, compilation-info-file-name)
+ (compilation-line-number, compilation-column-number): New faces.
+ (compilation-error-face, compilation-warning-face)
+ (compilation-info-face, compilation-line-face)
+ (compilation-column-face): Use them.
+
+ * facemenu.el (facemenu-add-face): Warn when font-lock is active.
+
+ * comint.el (comint-password-prompt-regexp): Accept ", try again".
+
+ * bindings.el (global-map): Bind insertchar and its variants.
+
+2005-06-27 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/artist.el (artist-text-overwrite)
+ (artist-figlet-get-extra-args, artist-text-see-thru): Use read-string.
+
+2005-06-27 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el: It was not working the page selection for printing.
+ Reported by Sebastian Tennant <sebyte@smolny.plus.com>.
+ (ps-print-version): New version 6.6.7.
+ (ps-end-sheet): New fun.
+ (ps-header-sheet, ps-end-job): Call it.
+
+2005-06-27 Luc Teirlinck <teirllm@auburn.edu>
+
+ * subr.el (add-to-list, add-to-ordered-list): Doc fixes.
+
+2005-06-27 Lute Kamstra <lute@gnu.org>
+
+ * facemenu.el (facemenu-unlisted-faces): Add foreground and
+ background color faces.
+ (facemenu-get-face): Delete function.
+ (facemenu-set-face-from-menu): Don't call facemenu-get-face.
+ (facemenu-add-new-color): Make second argument mandatory.
+ Create the appropriate face and return it. Simplify.
+ (facemenu-set-foreground, facemenu-set-background): Don't check if
+ color is defined. Use return value of facemenu-add-new-color.
+
+2005-06-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-filter): Add missing argument to
+ with-selected-window.
+
+2005-06-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Don't automatically add
+ a :require to the defcustom.
+
+ * emacs-lisp/autoload.el (make-autoload): Add the :setter for
+ defcustoms corresponding to minor modes.
+
+2005-06-26 David Ponce <david@dponce.com>
+
+ * recentf.el: Require tree-widget instead of wid-edit.
+ (recentf-filename-handler): Fix widget :type.
+ (recentf-cancel-dialog, recentf-open-more-files)
+ (recentf-open-files-action): Doc fix.
+ (recentf-dialog-goto-first): New function.
+ (recentf-dialog-mode-map): Set parent keymap first.
+ (recentf-dialog-mode): Define with define-derived-mode.
+ Don't display continuation lines in dialogs.
+ (recentf-edit-list): Rename from recentf-edit-selected-items.
+ (recentf-edit-list-select): Rename from recentf-edit-list-action.
+ Simplify.
+ (recentf-edit-list-validate): New function.
+ (recentf-edit-list): Update accordingly.
+ (recentf-open-files-item-shift): Remove.
+ (recentf-open-files-item): Convert menu elements into tree and
+ link widgets. Don't create the widgets.
+ (recentf-open-files): Update accordingly.
+ (recentf-save-list): Untabify.
+
+2005-06-25 Luc Teirlinck <teirllm@auburn.edu>
+
+ * replace.el (keep-lines-read-args): Add INTERACTIVE arg.
+ (keep-lines): Add INTERACTIVE arg. Never delete lines only
+ partially contained in the active region. Do not take active
+ region into account when called from Lisp, unless INTERACTIVE arg
+ is non-nil. Use `forward-line' instead of `beginning-of-line' to
+ avoid trouble with fields. Make marker point nowhere when no
+ longer used. Always return nil. Doc fix.
+ (flush-lines): Add INTERACTIVE arg. Do not take active region
+ into account when called from Lisp, unless INTERACTIVE arg is
+ non-nil. Use `forward-line' instead of `beginning-of-line' to
+ avoid trouble with fields. Make marker point nowhere when no
+ longer used. Always return nil. Doc fix.
+ (how-many): Add INTERACTIVE arg. Make RSTART and REND args
+ interchangeable. Do not take active region into account when
+ called from Lisp, unless INTERACTIVE arg is non-nil. Do not print
+ message in echo area when called from Lisp, unless INTERACTIVE arg
+ is non-nil. Avoid saying "1 occurrences". Do not use markers.
+ Return the number of matches. Doc fix.
+ (occur): Doc fix.
+ (perform-replace): Make comment follow double space convention for
+ the sake of `outline-minor-mode'.
+
+ * faces.el (facep): Doc fix.
+
+2005-06-25 Richard M. Stallman <rms@gnu.org>
+
+ * facemenu.el (facemenu-enable-faces-p): New function.
+ (facemenu-background-menu, facemenu-foreground-menu)
+ (facemenu-face-menu): Add menu-enable property.
+
+ * jka-compr.el (jka-compr-insert-file-contents):
+ Special handling if cannot find the uncompression program.
+
+ * cus-face.el (custom-face-attributes): Add autoload.
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-variables):
+ Bind comment-indent-function locally.
+
+ * window.el (save-selected-window): Use save-current-buffer.
+
+ * subr.el (with-selected-window): Use save-current-buffer.
+
+ * progmodes/gud.el (gud-filter): Simplify using with-selected-window
+ and with-current-buffer.
+
+2005-06-24 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (line-move-1): Fix previous change.
+
+2005-06-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * replace.el (occur-1): Set `buffer-read-only' and the
+ buffer-modified flag before running `occur-hook' to protect
+ against unintentional buffer switches that can lead to data loss.
+
+2005-06-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-tooltip-print-command): Indent properly.
+ (gud-gdb-marker-filter): Use font-lock-warning-face for any
+ initial error.
+
+ * progmodes/gdb-ui.el (gdb-send): Remove warning face from errors
+ after fresh input.
+ (gdb-var-create-handler): Put name of expression in quotes.
+
+2005-06-23 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/ring.el (ring-elements): Make it return a list of the
+ elements of RING in order, and without bogus nil elements.
+
+2005-06-23 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (set-variable): Args renamed; doc fix.
+ (line-move-1): When there are overlays around, use vertical-motion.
+
+ * faces.el (escape-glyph): Use brown against light background.
+ (nobreak-space): Rename from no-break-space.
+ Fix previous change.
+
+ * dired-aux.el (dired-do-copy): Fix arg prompt.
+
+ * mail/sendmail.el (mail-setup-with-from): Fix custom type.
+
+2005-06-23 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * mail/emacsbug.el (report-emacs-bug): Use "X server distributor"
+ rather than "Distributor".
+
+2005-06-23 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debugger-special-form-p): New defun.
+ (debug-on-entry): Use it. New interactive declaration that uses
+ function-called-at-point.
+
+2005-06-23 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (save-match-data): Add comment about using evaporate arg
+ to set-match-data.
+
+2005-06-22 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * cus-edit.el (customize-face)
+ (customize-face-other-window): Handle face aliases.
+
+ * faces.el (face-documentation, set-face-attribute)
+ (face-spec-set): Handle face aliases.
+
+2005-06-22 Juanma Barranquero <lekktu@gmail.com>
+
+ * help-mode.el (help-make-xrefs): If a symbol representing a face
+ name is not followed by the word "face", it could still be a
+ function or variable name, so don't bypass other checks.
+
+2005-06-22 Juri Linkov <juri@jurta.org>
+
+ * ps-print.el (ps-face-foreground-name, ps-face-background-name):
+ Replace aliased functions with calls where second arg `inherit' is t.
+
+2005-06-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-error): New variable.
+ (gdb-error): New function.
+ (gdb-annotation-rules): Act on error-begin and error annotations.
+ (gdb-concat-output): Use font-lock-warning-face for errors.
+
+2005-06-22 Miles Bader <miles@gnu.org>
+
+ * bindings.el (propertized-buffer-identification): Use renamed
+ `Buffer-menu-buffer' face.
+
+ * faces.el (vertical-border): Rename from `vertical-divider'.
+ (escape-glyph): Change dark-background color back to `cyan'.
+
+2005-06-21 Juri Linkov <juri@jurta.org>
+
+ * faces.el (face-user-default-spec): Try getting `customized-face'
+ prior to `saved-face'.
+ (frame-background-mode): Refill docstring.
+
+ * emacs-lisp/lisp-mode.el (eval-defun-1):
+ * emacs-lisp/edebug.el (edebug-eval-defun):
+ Set `saved-face' temporarily to nil before calling form.
+ Set `customized-face' to the new spec after that.
+
+2005-06-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * subr.el (1value, lambda, key-substitution-in-progress):
+ Doc fixes.
+
+ * autoinsert.el (auto-insert-alist):
+ * ses.el (ses-call-printer):
+ * subr.el (noreturn):
+ * emacs-lisp/lisp.el (check-parens):
+ * emacs-lisp/byte-opt.el (byte-optimize-pure-func):
+ * net/browse-url.el (browse-url-mosaic):
+ * progmodes/cc-defs.el (c-safe-scan-lists):
+ * progmodes/ebnf-abn.el (ebnf-abn-lex):
+ * progmodes/ebnf-bnf.el (ebnf-bnf-lex):
+ * progmodes/ebnf-dtd.el (ebnf-dtd-lex):
+ * progmodes/ebnf-ebx.el (ebnf-ebx-lex):
+ * progmodes/ebnf-iso.el (ebnf-iso-lex):
+ * progmodes/ebnf-yac.el (ebnf-yac-lex): Fix spellings.
+
+2005-06-21 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * pcvs-defs.el (cvs-menu): Add cvs-mode-mark and cvs-mode-unmark.
+
+2005-06-21 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/appt.el (appt-make-list): Activate the package, if
+ not already active (for backwards compatibility).
+
+2005-06-20 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (add-to-ordered-list): Test membership with eq. Simplify.
+
+2005-06-20 Miles Bader <miles@gnu.org>
+
+ * faces.el (vertical-divider): New face.
+
+2005-06-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * simple.el (kill-whole-line): Doc fix.
+ (next-error-buffer-p, next-error-find-buffer)
+ (clone-indirect-buffer): Fix typos in docstrings.
+ (comment-line-break-function): Doc fix: don't say variable
+ is automatically buffer-local (it isn't).
+
+2005-06-19 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp-ftp.el (top):
+ * net/tramp-smb.el (top):
+ * net/tramp-util.el (top):
+ * net/tramp-uu.el (top):
+ * net/tramp-vc.el (top):
+ * net/tramp.el (top): Revert copyright years back to original
+ ones. Tramp has a life outside GNU Emacs.
+
+2005-06-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el (tooltip-use-echo-area): Don't make it obsolete.
+
+2005-06-18 Juri Linkov <juri@jurta.org>
+
+ * progmodes/grep.el (grep-regexp-alist): Use backreference at the
+ end of first regexp to limit the match to the position between
+ line number and source line with same separator character as used
+ between file name and line number. In the second regexp limit
+ mouse-face area to file name and line number by adding new group
+ for them and referring it in HYPERLINK arg.
+ (grep-regexp-alist, grep-mode-font-lock-keywords): Use shy group.
+ (grep-mode): Set font-lock-lines-before to 0 to not refontify the
+ previous line where grep markers may be already removed.
+
+2005-06-18 Peter Kleiweg <p.c.j.kleiweg@rug.nl>
+
+ * progmodes/ps-mode.el: Update version and maintainer's email address.
+
+2005-06-18 Steve Youngs <steve@xemacs.org>
+
+ * net/browse-url.el (browse-url-browser-function)
+ (browse-url-default-browser): Add firefox.
+ (browse-url-firefox-program, browse-url-firefox-arguments)
+ (browse-url-firefox-startup-arguments)
+ (browse-url-firefox-new-window-is-tab): New defcustoms.
+ (browse-url-firefox, browse-url-firefox-sentinel): New functions.
+
+2005-06-17 Richard M. Stallman <rms@gnu.org>
+
+ * startup.el (command-line): Warn if specified user name has
+ no home directory.
+
+ * term.el (term-get-old-input, term-input-filter, term-input-sender)
+ (term-mode-hook, term-exec-hook, term-escape-char): Doc fixes.
+
+ * longlines.el (longlines-mode, longlines-show-hard-newlines):
+ Doc fixes.
+
+ * faces.el (underline): Try bold if terminal doesn't support underline.
+
+ * mail/sendmail.el (mail-setup-with-from): New variable.
+ (mail-insert-from-field): New function.
+ (sendmail-send-it): Call it.
+ (mail-setup): Optionally call it here.
+
+ * term/linux.el: Call tty-no-underline.
+
+2005-06-17 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/edebug.el (edebug-goto-here): Doc fix.
+
+2005-06-17 Miles Bader <miles@gnu.org>
+
+ * ediff-init.el (ediff-current-diff-A, ediff-current-diff-B)
+ (ediff-current-diff-C, ediff-current-diff-Ancestor)
+ (ediff-fine-diff-A, ediff-fine-diff-B, ediff-fine-diff-C)
+ (ediff-fine-diff-Ancestor, ediff-even-diff-A, ediff-even-diff-B)
+ (ediff-even-diff-C, ediff-even-diff-Ancestor, ediff-odd-diff-A)
+ (ediff-odd-diff-B, ediff-odd-diff-C, ediff-odd-diff-Ancestor):
+ Remove "-face" suffix from face names.
+ (ediff-current-diff-face-A, ediff-current-diff-face-B)
+ (ediff-current-diff-face-C, ediff-current-diff-face-Ancestor)
+ (ediff-fine-diff-face-A, ediff-fine-diff-face-B)
+ (ediff-fine-diff-face-C, ediff-fine-diff-face-Ancestor)
+ (ediff-even-diff-face-A, ediff-even-diff-face-B)
+ (ediff-even-diff-face-C, ediff-even-diff-face-Ancestor)
+ (ediff-odd-diff-face-A, ediff-odd-diff-face-B)
+ (ediff-odd-diff-face-C, ediff-odd-diff-face-Ancestor):
+ New backward-compatibility aliases for renamed faces.
+ (ediff-current-diff-face-A, ediff-current-diff-face-B)
+ (ediff-current-diff-face-C, ediff-current-diff-face-Ancestor)
+ (ediff-fine-diff-face-A, ediff-fine-diff-face-B)
+ (ediff-fine-diff-face-C, ediff-fine-diff-face-Ancestor)
+ (ediff-even-diff-face-A, ediff-even-diff-face-B)
+ (ediff-even-diff-face-C, ediff-even-diff-face-Ancestor)
+ (ediff-odd-diff-face-A, ediff-odd-diff-face-B)
+ (ediff-odd-diff-face-C, ediff-odd-diff-face-Ancestor):
+ Use renamed ediff faces.
+
+ * eshell/esh-test.el (eshell-test-ok, eshell-test-failed):
+ Remove "-face" suffix from face names.
+ (eshell-test-ok-face, eshell-test-failed-face):
+ New backward-compatibility aliases for renamed faces.
+ (eshell-run-test): Use renamed eshell-test faces.
+
+ * eshell/em-prompt.el (eshell-prompt): Remove "-face" suffix from
+ face name.
+ (eshell-prompt-face): New backward-compatibility alias for renamed
+ face.
+ (eshell-emit-prompt): Use renamed eshell-prompt face.
+
+ * eshell/em-ls.el (eshell-ls-directory, eshell-ls-symlink)
+ (eshell-ls-executable, eshell-ls-readonly, eshell-ls-unreadable)
+ (eshell-ls-special, eshell-ls-missing, eshell-ls-archive)
+ (eshell-ls-backup, eshell-ls-product, eshell-ls-clutter):
+ Remove "-face" suffix from face names.
+ (eshell-ls-directory-face, eshell-ls-symlink-face)
+ (eshell-ls-executable-face, eshell-ls-readonly-face)
+ (eshell-ls-unreadable-face, eshell-ls-special-face)
+ (eshell-ls-missing-face, eshell-ls-archive-face)
+ (eshell-ls-backup-face, eshell-ls-product-face)
+ (eshell-ls-clutter-face):
+ New backward-compatibility aliases for renamed faces.
+ (eshell-ls-decorated-name): Use renamed eshell-ls faces.
+
+ * progmodes/cc-fonts.el (c-nonbreakable-space-face):
+ Remove "-face" suffix from face name.
+ (c-cpp-matchers): Use the variable `c-nonbreakable-space-face'
+ instead of literal face.
+
+2005-06-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/warnings.el (display-warning, lwarn)
+ (warning-minimum-log-level): Doc fixes.
+ (warning-minimum-level, warning-minimum-log-level):
+ Add :debug to :type choices.
+
+ * progmodes/ada-mode.el (ada-format-paramlist)
+ (ada-get-indent-case, ada-check-matching-start)
+ (ada-check-defun-name, ada-goto-matching-decl-start)
+ (ada-goto-matching-start, ada-goto-matching-end, ada-tab)
+ (ada-untab, ada-move-to-start, ada-fill-comment-paragraph)
+ (ada-make-subprogram-body): Follow error conventions.
+ (ada-case-exception-file, ada-indent-comment-as-code)
+ (ada-indent-handle-comment-special, ada-indent-renames)
+ (ada-indent-return, ada-search-directories-internal)
+ (ada-tab-policy, ada-case-exception-substring)
+ (ada-other-file-alist, ada-matching-start-re)
+ (ada-matching-decl-start-re, ada-contextual-menu-last-point)
+ (ada-imenu-generic-expression, ada-compile-goto-error)
+ (ada-in-comment-p, ada-in-string-p, ada-in-string-or-comment-p)
+ (ada-popup-menu, ada-add-extensions, ada-mode)
+ (ada-region-selected, ada-create-case-exception)
+ (ada-create-case-exception-substring, ada-after-keyword-p)
+ (ada-activate-keys-for-case, ada-adjust-case-region)
+ (ada-adjust-case-buffer, ada-format-paramlist)
+ (ada-scan-paramlist, ada-insert-paramlist)
+ (ada-indent-newline-indent)
+ (ada-indent-newline-indent-conditional)
+ (ada-justified-indent-current, ada-goto-previous-word)
+ (ada-indent-current, ada-get-indent-open-paren)
+ (ada-get-indent-paramlist, ada-get-indent-end)
+ (ada-get-indent-case, ada-get-indent-when, ada-get-indent-if)
+ (ada-get-indent-block-start, ada-get-indent-subprog)
+ (ada-get-indent-noindent, ada-get-indent-label)
+ (ada-get-indent-loop, ada-get-indent-type, ada-goto-stmt-start)
+ (ada-search-prev-end-stmt, ada-goto-next-non-ws)
+ (ada-goto-stmt-end, ada-goto-next-word)
+ (ada-check-matching-start, ada-check-defun-name)
+ (ada-goto-matching-decl-start, ada-goto-matching-start)
+ (ada-goto-matching-end, ada-search-ignore-string-comment)
+ (ada-in-decl-p, ada-looking-at-semi-or)
+ (ada-looking-at-semi-private, ada-in-paramlist-p)
+ (ada-in-open-paren-p, ada-tab, ada-indent-current-function)
+ (ada-untab-hard, ada-move-to-start, ada-move-to-end)
+ (ada-next-procedure, ada-previous-procedure, ada-next-package)
+ (ada-previous-package, ada-create-menu)
+ (ada-fill-comment-paragraph-justify)
+ (ada-fill-comment-paragraph-postfix, ada-fill-comment-paragraph)
+ (ada-other-file-name, ada-last-which-function-line)
+ (ada-last-which-function-subprog, ada-which-function)
+ (ada-get-body-name, ada-outline-level, ada-narrow-to-defun)
+ (ada-gen-treat-proc, ada-check-emacs-version)
+ (ada-continuation-indent, ada-align-region-separate):
+ Fix typos in docstrings.
+ (ada-adjust-case, ada-adjust-case-interactive): Doc fixes.
+
+2005-06-16 Lute Kamstra <lute@gnu.org>
+
+ * simple.el (fundamental-mode): Run after-change-major-mode-hook
+ conditionally.
+
+2005-06-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * comint.el (comint-replace-by-expanded-filename)
+ (comint-prompt-regexp, comint-delimiter-argument-list)
+ (comint-preinput-scroll-to-bottom):
+ * info.el (Info-hide-cookies-node):
+ * ls-lisp.el (ls-lisp-classify):
+ * find-file.el (ff-search-directories, ff-special-constructs)
+ (ff-find-other-file):
+ * font-lock.el (font-lock-keywords):
+ * shell.el (shell-prompt-pattern)
+ (shell-dynamic-complete-functions, shell-mode)
+ (shell-delimiter-argument-list):
+ * term.el (term-replace-by-expanded-filename)
+ (term-prompt-regexp, term-delimiter-argument-list):
+ * woman.el (woman-ignore, woman0-if):
+ * emacs-lisp/derived.el (derived-mode-init-mode-variables):
+ * emacs-lisp/elint.el (elint-init-env):
+ * emacs-lisp/regexp-opt.el (regexp-opt-depth):
+ * eshell/esh-mode.el (eshell-preinput-scroll-to-bottom):
+ * language/ethio-util.el (ethio-tilde-escape)
+ (ethio-use-three-dot-question):
+ * net/zone-mode.el (zone-mode-load-time-setup):
+ * progmodes/cc-align.el (c-lineup-argcont):
+ * progmodes/cc-awk.el (c-awk-beginning-of-defun):
+ * progmodes/cperl-mode.el (cperl-set-style-back):
+ * progmodes/inf-lisp.el (inferior-lisp-prompt):
+ * progmodes/vhdl-mode.el (vhdl-beginning-of-libunit):
+ Fix spellings in docstrings.
+
+ * textmodes/sgml-mode.el (sgml-calculate-indent, html-tag-help):
+ * progmodes/modula2.el (m2-for): Fix spellings.
+
+ * menu-bar.el (menu-bar-games-menu): Fix typo in menu help string.
+
+ * simple.el (undo-more): Don't use `format' on `error' arguments.
+ Improve argument/docstring consistency.
+ (pending-undo-list): Doc fix.
+
+ * smerge-mode.el (smerge-ensure-match):
+ * emulation/vip.el (vip-ex):
+ * net/zone-mode.el (zone-mode-update-serial):
+ * progmodes/idlwave.el (idlwave-complete):
+ * progmodes/vhdl-mode.el (vhdl-visit-file)
+ (vhdl-compose-wire-components):
+ Don't use `format' on `error' arguments.
+
+ * tooltip.el (tooltip-start-delayed-tip, tooltip-timeout)
+ (tooltip-use-echo-area, tooltip-process-prompt-regexp)
+ (tooltip-help-tips): Fix typos in docstrings.
+
+2005-06-16 David Ponce <david@dponce.com>
+
+ * tree-widget.el (tree-widget-value-create): Simplify last change.
+
+2005-06-15 Matt Hodges <MPHodges@member.fsf.org>
+
+ * ido.el (ido-incomplete-regexp): New variable.
+ (ido-set-matches-1): Handle invalid-regexp error and set
+ ido-incomplete-regexp.
+ (ido-incomplete-regexp): New face.
+ (ido-completions): Use it.
+ (ido-complete, ido-exit-minibuffer, ido-completions):
+ Handle incomplete regexps.
+ (ido-completions): Add check for complete match when entering a regexp.
+
+2005-06-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (add-to-ordered-list): Use a weak hash-table to avoid leaks.
+
+2005-06-15 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-Preamble): Enclose BibTeX preamble
+ by field delimiters.
+
+2005-06-15 David Ponce <david@dponce.com>
+
+ * tree-widget.el: eval-and-compile inlined functions so they will
+ be available at run-time too.
+ (tree-widget-super-format-handler)
+ (tree-widget-format-handler): Remove.
+ (tree-widget-value-create): Handle the :indent property.
+
+2005-06-15 Miles Bader <miles@gnu.org>
+
+ * progmodes/which-func.el (which-func): Only inherit
+ `font-lock-function-name-face' when that makes sense against the
+ default mode-line face, otherwise set the face color explicitly.
+
+ * progmodes/cperl-mode.el (cperl-init-faces): Use literal cperl
+ faces instead of (non-existent) variables.
+
+2005-06-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * iswitchb.el (iswitchb-to-end): Replace mapcar with dolist.
+ (iswitchb-get-matched-buffers): Likewise. Simplify.
+
+2005-06-14 Miles Bader <miles@gnu.org>
+
+ * progmodes/ld-script.el (ld-script-location-counter):
+ Remove "-face" suffix from face name.
+ (ld-script-location-counter-face):
+ New backward-compatibility alias for renamed face.
+ (ld-script-location-counter-face): Use renamed face.
+
+ * progmodes/cperl-mode.el (cperl-nonoverridable, cperl-array)
+ (cperl-hash): Remove "-face" suffix from face names.
+ (cperl-nonoverridable-face, cperl-array-face, cperl-hash-face):
+ New backward-compatibility aliases for renamed faces.
+ (cperl-find-pods-heres, cperl-init-faces, cperl-ps-print-init)
+ (cperl-ps-print-face-properties): Use renamed cperl-mode faces.
+
+ * progmodes/which-func.el (which-func): Remove "-face" suffix from face
+ name.
+ (which-func-face): New backward-compatibility alias for renamed face.
+ (which-func-format): Use renamed which-func face.
+
+ * progmodes/vhdl-mode.el (vhdl-prompt, vhdl-attribute, vhdl-enumvalue)
+ (vhdl-function, vhdl-directive, vhdl-reserved-word)
+ (vhdl-translate-off): Remove "-face" suffix and "font-lock-" from face
+ names.
+ (vhdl-speedbar-entity, vhdl-speedbar-architecture)
+ (vhdl-speedbar-configuration, vhdl-speedbar-package)
+ (vhdl-speedbar-library, vhdl-speedbar-instantiation)
+ (vhdl-speedbar-subprogram, vhdl-speedbar-entity-selected)
+ (vhdl-speedbar-architecture-selected)
+ (vhdl-speedbar-configuration-selected)
+ (vhdl-speedbar-package-selected)
+ (vhdl-speedbar-instantiation-selected): Remove "-face" suffix from face
+ names.
+ (vhdl-font-lock-keywords-2, vhdl-font-lock-keywords-5):
+ Use renamed faces.
+ (vhdl-prompt-face, vhdl-attribute-face, vhdl-enumvalue-face)
+ (vhdl-function-face, vhdl-directive-face, vhdl-reserved-words-face)
+ (vhdl-translate-off-face): Variables renamed to remove "font-lock-".
+ Use renamed faces.
+ (syntax-alist): Don't use "font-lock-" or "-face" in generated face
+ names.
+ (vhdl-font-lock-init, vhdl-ps-print-settings): Use renamed faces.
+ (vhdl-speedbar-insert-hierarchy, vhdl-speedbar-expand-entity)
+ (vhdl-speedbar-expand-package, vhdl-speedbar-update-current-unit)
+ (vhdl-speedbar-make-inst-line, vhdl-speedbar-make-pack-line)
+ (vhdl-speedbar-make-subpack-line, vhdl-speedbar-make-subprogram-line)
+ (vhdl-speedbar-item-info, vhdl-speedbar-check-unit): Use renamed faces.
+
+ * progmodes/sh-script.el (sh-heredoc): Remove "-face" suffix from
+ face name.
+ (sh-heredoc-face): New backward-compatibility alias for renamed face.
+ (sh-heredoc-face): Use renamed sh-heredoc face.
+
+ * progmodes/idlw-help.el (idlwave-help-link):
+ Remove "-face" suffix from face name.
+ (idlwave-help-link-face):
+ New backward-compatibility alias for renamed face.
+ (idlwave-highlight-linked-completions): Use renamed idlwave-help faces.
+
+ * progmodes/idlw-shell.el (idlwave-shell-bp-face)
+ (idlwave-shell-disabled-bp): Remove "-face" suffix from face names.
+ (idlwave-shell-bp-face, idlwave-shell-disabled-bp):
+ New backward-compatibility aliases for renamed faces.
+ (idlwave-shell-disabled-breakpoint-face)
+ (idlwave-shell-breakpoint-face): Use renamed idlwave-shell faces.
+
+ * progmodes/flymake.el (flymake-errline, flymake-warnline):
+ Remove "-face" suffix from face names.
+ (flymake-errline-face, flymake-warnline-face):
+ New backward-compatibility aliases for renamed faces.
+ (flymake-highlight-line): Use renamed flymake faces.
+
+ * progmodes/ebrowse.el (ebrowse-tree-mark, ebrowse-root-class)
+ (ebrowse-file-name, ebrowse-default, ebrowse-member-attribute)
+ (ebrowse-member-class, ebrowse-progress):
+ Remove "-face" suffix from face names.
+ (ebrowse-tree-mark-face, ebrowse-root-class-face)
+ (ebrowse-file-name-face, ebrowse-default-face)
+ (ebrowse-member-attribute-face, ebrowse-member-class-face)
+ (ebrowse-progress-face):
+ New backward-compatibility aliases for renamed faces.
+ (ebrowse-show-progress, ebrowse-show-file-name-at-point)
+ (ebrowse-set-mark-props, ebrowse-draw-tree-fn)
+ (ebrowse-draw-member-buffer-class-line, ebrowse-draw-member-long-fn)
+ (ebrowse-draw-member-short-fn): Use renamed ebrowse faces.
+
+ * progmodes/antlr-mode.el (antlr-default, antlr-keyword, antlr-syntax)
+ (antlr-ruledef, antlr-tokendef, antlr-ruleref, antlr-tokenref)
+ (antlr-literal): Remove "-face" suffix and "font-lock-" from face
+ names.
+ (antlr-font-lock-default-face, antlr-font-lock-keyword-face)
+ (antlr-font-lock-syntax-face, antlr-font-lock-ruledef-face)
+ (antlr-font-lock-tokendef-face, antlr-font-lock-ruleref-face)
+ (antlr-font-lock-tokenref-face, antlr-font-lock-literal-face): New
+ backward-compatibility aliases for renamed faces.
+ (antlr-default-face, antlr-keyword-face, antlr-syntax-face)
+ (antlr-ruledef-face, antlr-tokendef-face, antlr-ruleref-face)
+ (antlr-tokenref-face, antlr-literal-face): Variables renamed to
+ remove "font-lock-". Use renamed antlr-mode faces.
+ (antlr-font-lock-additional-keywords): Use renamed faces. Replace
+ literal face-names with face variable references.
+
+ * buff-menu.el (Buffer-menu-buffer): Remove "-face" suffix from
+ face name.
+ (Buffer-menu-buffer-face): New backward-compatibility alias for
+ renamed face.
+ (list-buffers-noselect): Use renamed Buffer-menu-buffer face.
+
+2005-06-15 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-space, makefile-makepp-perl):
+ Eliminate "-face" suffix.
+ (makefile-targets): Inherit from font-lock-function-name-face and
+ eliminate "-face" suffix.
+ (makefile-shell): Remove attributes and eliminate "-face" suffix.
+ (makefile-*-font-lock-keywords): Append makefile-targets in rule
+ actions, instead of prepending, to make it less visible.
+ (makefile-previous-dependency, makefile-match-dependency):
+ Don't match a target on a continuation line.
+
+ * files.el (auto-mode-alist): Put Makefile in gmake mode.
+
+2005-06-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (menu): Re-order menu items.
+ (gdb-tooltip-print): Respect tooltip-use-echo-area.
+
+ * progmodes/gud.el (tooltip-use-echo-area): Remove alias.
+ Define in tooltip.el.
+ (gud-tooltip-process-output): Respect tooltip-use-echo-area.
+ (gud-tooltip-tips): Respect tooltip-use-echo-area and
+ gud-tooltip-echo-area.
+
+ * tooltip.el (tooltip-use-echo-area): Restore from gud.el for
+ backward compatibility and make obsolete.
+ (tooltip-help-tips): Use tooltip-use-echo-area.
+ (tooltip-show-help-function): Rename to...
+ (tooltip-show-help): ...this, because it is a function.
+ (tooltip-mode, tooltip-help-message): Call tooltip-show-help.
+
+2005-06-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/edebug.el (edebug-all-defs, edebug-initial-mode)
+ (edebug-print-length, edebug-print-level, edebug-print-circle)
+ (edebug-modify-breakpoint, edebug-eval-last-sexp)
+ (edebug-eval-print-last-sexp): Doc fixes.
+
+2005-06-14 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-mode): Make a new keymap every time we enable ido,
+ as the coverage buffer/file/both may change.
+
+2005-06-14 Lute Kamstra <lute@gnu.org>
+
+ * net/ange-ftp.el (internal-ange-ftp-mode): Use delay-mode-hooks
+ and run-mode-hooks. Simplify.
+
+ * mail/rmailedit.el (rmail-edit-mode):
+ * progmodes/octave-inf.el (inferior-octave-mode):
+ * progmodes/sql.el (sql-interactive-mode): Use delay-mode-hooks.
+
+ * recentf.el (recentf-dialog-mode): Use kill-all-local-variables
+ and run-mode-hooks.
+ (recentf-edit-list, recentf-open-files): Don't call
+ kill-all-local-variables directly.
+
+ * emacs-lisp/debug.el (debug-on-entry): Fix docstring.
+
+2005-06-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/byte-run.el (make-obsolete)
+ (define-obsolete-function-alias): Rename arguments FUNCTION and
+ NEW to OBSOLETE-NAME and CURRENT-NAME respectively.
+ (make-obsolete-variable, define-obsolete-variable-alias):
+ Rename arguments VARIABLE and NEW to OBSOLETE-NAME and CURRENT-NAME
+ respectively.
+
+ * isearchb.el (isearchb-activate):
+ * pcvs.el (cvs-mode):
+ * ses.el (ses-load):
+ * vc-arch.el (vc-arch-checkin, vc-arch-diff):
+ * net/tramp.el (tramp-find-file-exists-command)
+ (tramp-find-shell):
+ * progmodes/ada-mode.el (ada-create-case-exception)
+ (ada-create-case-exception-substring, ada-make-subprogram-body):
+ * progmodes/idlw-shell.el (idlwave-shell-move-to-bp):
+ * progmodes/idlwave.el (idlwave-complete-class-structure-tag-help):
+ * progmodes/vhdl-mode.el (vhdl-speedbar-place-component):
+ * textmodes/org.el (org-promote, org-evaluate-time-range)
+ (org-agenda-next-date-line, org-agenda-previous-date-line)
+ (org-agenda-error, org-open-at-point, org-table-move-row)
+ (org-format-table-table-html-using-table-generate-source)
+ (org-shiftcursor-error, org-ctrl-c-ctrl-c):
+ * textmodes/reftex.el (reftex-access-scan-info):
+ * textmodes/reftex-toc.el (reftex-toc-dframe-p)
+ (reftex-toc-promote-prepare): Follow error conventions.
+
+ * diff-mode.el (diff-mode): Fix typo in docstring.
+
+ * forms.el (forms--intuit-from-file): Fix reference to
+ `forms-number-of-fields' in error message.
+ (forms-print): Fix quoting in error message.
+
+ * forms.el (forms-mode):
+ * emulation/vi.el (vi-goto-insert-state):
+ * progmodes/flymake.el (flymake-new-err-info)
+ (flymake-start-syntax-check-for-current-buffer)
+ (flymake-simple-cleanup):
+ * eshell/esh-var.el (eshell/export):
+ * progmodes/gud.el (xdb):
+ * textmodes/flyspell.el (flyspell-incorrect-hook)
+ (flyspell-maybe-correct-transposition)
+ (flyspell-maybe-correct-doubling): Fix quoting in docstring.
+
+2005-06-13 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/debug.el (cancel-debug-on-entry): Mention default in
+ minibuffer prompt.
+
+2005-06-13 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (add-to-ordered-list): New defun.
+
+ * emulation/cua-base.el (cua-mode): Use add-to-ordered-list to
+ add cua--keymap-alist to emulation-mode-map-alists.
+
+2005-06-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * subr.el (complete-in-turn): New macro.
+ (dynamic-completion-table, lazy-completion-table): Add debug info.
+
+ * faces.el (read-face-name): Use complete-in-turn complete non-aliases
+ in preference to face aliases.
+
+ * textmodes/fill.el (fill-match-adaptive-prefix): New function.
+ (fill-context-prefix): Use it to avoid guessing absurdly long prefixes.
+ Remove unused vars `start' and `firstline'.
+ (fill-nobreak-p): Fix line-move-invisible -> line-move-invisible-p.
+ (justify-current-line, fill-individual-paragraphs): Remove unused vars.
+
+2005-06-13 Eli Zaretskii <eliz@gnu.org>
+
+ * cus-start.el (all): Don't complain about missing GTK-related
+ variables, unless either `gtk' is boundp or this isn't a
+ `windows-nt' build.
+
+2005-06-13 Lute Kamstra <lute@gnu.org>
+
+ * abbrev.el (edit-abbrevs-mode): Use kill-all-local-variables and
+ run-mode-hooks.
+
+ * ediff-mult.el (ediff-meta-mode):
+ * ediff-util.el (ediff-mode): Use run-mode-hooks.
+
+ * ledit.el (ledit-mode): Use delay-mode-hooks.
+
+ * woman.el (woman-mode-line-format): Delete constant.
+ (woman-mode-map): Initialize it properly.
+ (woman-mode): Set mode-class property to special.
+ Use delay-mode-hooks and run-mode-hooks. Use the right keymap.
+ Set major-mode and mode-name. Don't set mode-line-format directly.
+ (Man-getpage-in-background): Don't reference woman-mode-line-format.
+
+ * emacs-lisp/debug.el (cancel-debug-on-entry): Make the empty
+ string argument obsolete.
+
+2005-06-13 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-CUA-compatible): New option.
+ (org-disputed-keys): New variable.
+ (org-key): New function.
+ (orgtbl-make-binding): Add docstring to the created function.
+ (org-mode): Set paragraph start/separate regexps.
+ (orgtbl-mode): Don't start `orgtbl-mode' in `org-mode' buffers.
+ (org-archive-location, org-archive-mark-done)
+ (org-archive-stamp-time): New options.
+ (org-archive-subtree): New command.
+ (org-fill-paragraph): New function.
+ (org-mode): Set `fill-paragraph-function' to `org-fill-paragraph'.
+ (org-fake-empty-table-line): Function removed.
+ (org-format-org-table-html): Do not create empty table lines at
+ separator lines. Improved table header treatment.
+ (org-link-format): New option.
+ (org-make-link): New function.
+ (org-insert-link, org-store-link): Use org-make-link.
+ (org-open-file): Quote file name for shell command, to allow
+ spaces in file names.
+ (org-link-regexp): Fix bug with mailto link.
+ (org-link-maybe-angles-regexp, org-protected-link-regexp):
+ New constants.
+ (org-export-as-html): Deal with the optional angles around a link.
+ Better treatment of file: links.
+ (org-open-at-point): Replace @{ and @} with < and >.
+ (org-run-mode-hooks): Function removed.
+ (org-agenda-mode): No longer use `org-run-mode-hooks'.
+
+2005-06-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-registers-mode): Let gdbmi use
+ MI command -data-list-register-values.
+ (gdb-post-prompt): Indent properly.
+
+2005-06-13 Juanma Barranquero <lekktu@gmail.com>
+
+ * hilit-chg.el (highlight-changes-colors): Rename from
+ `highlight-changes-colours'.
+ (highlight-changes-colours): Keep as obsolete alias.
+ (highlight-changes-face-list): Doc fix.
+ (hilit-chg-make-list): Use `highlight-changes-colors'.
+
+2005-06-12 Mark A. Hershberger <mah@everybody.org>
+
+ * progmodes/cperl-mode.el (cperl-mode): Remove stray paren in
+ defun-prompt-regexp.
+
+2005-06-12 Eli Zaretskii <eliz@gnu.org>
+
+ * loadup.el: Don't say we are dumping under 2 names on windows-nt
+ and cygwin.
+
+ * makefile.w32-in (bootstrap-clean-CMD, bootstrap-clean-SH):
+ Don't use an old loaddefs.el, as in Makefile.in.
+
+2005-06-12 Lute Kamstra <lute@gnu.org>
+
+ * Makefile.in (bootstrap-prepare): Don't use an old loaddefs.el.
+
+ * man.el (Man-mode-map): Initialize it properly.
+ (Man-mode): Set mode-class property to special.
+
+ * calendar/calendar.el (calendar-mode): Use run-mode-hooks.
+
+2005-06-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * menu-bar.el (menu-bar-make-toggle): Remove stray backslash.
+ A newline is needed in the docstring there.
+
+ * emacs-lisp/debug.el (debug-on-entry, cancel-debug-on-entry):
+ Doc fixes.
+
+2005-06-11 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * printing.el: Doc fix. The menubar is no more changed when printing
+ is loaded, it only changes when pr-menu-bind or pr-update-menus is
+ called. Now, the menubar changing will work in Emacs 20, 21 and 22.
+ (pr-version): New version number (6.8.4).
+ (pr-menu-bind): New command.
+ (pr-update-menus): Docstring and code fix.
+ (pr-menu-print-item): Now is a global var in Emacs and XEmacs.
+ Docstring fix.
+ (pr-txt-printer-alist, pr-ps-printer-alist, pr-gv-command)
+ (pr-gs-command, pr-gs-switches, pr-ps-utility-alist): Docstring fix.
+
+2005-06-11 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/ewoc.el: Doc fixes for public funcs:
+ "Returns" to "return", document useful return values, etc.
+
+2005-06-11 Alan Mackenzie <acm@muc.de>
+
+ * textmodes/fill.el (fill-context-prefix): Try `adaptive-fill-function'
+ BEFORE `adaptive-fill-regexp' when determining a fill prefix.
+ (adaptive-file-function): Minor amendment to doc-string.
+
+2005-06-11 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
+
+ * thumbs.el (thumbs-per-line, thumbs-thumbsdir-max-size)
+ (thumbs-relief, thumbs-margin, thumbs-image-resizing-step):
+ Fix :type--it is `integer', not `string'.
+
+ * faces.el (modeline-highlight): Rename from (the erroneous)
+ `modeline-higilight'.
+
+2005-06-11 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/edebug.el (edebug-eval-mode-map): Don't copy
+ lisp-interaction-mode-map but make it the parent.
+ (edebug-eval-mode): Use define-derived-mode.
+
+2005-06-11 Andreas Schwab <schwab@suse.de>
+
+ * bindings.el: Add binding of `ESC functionkey' for every
+ `M-functionkey'.
+ * hexl.el (hexl-mode-map): Likewise.
+
+2005-06-10 Michael Hotchin <michael@hotchin.net> (tiny change)
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist)
+ [msft]: update regexp for newer msft compilers.
+
+2005-06-10 Mark A. Hershberger <mah@everybody.org>
+
+ * xml.el (start-chars, xml-parse-dtd): Add the ability to skip
+ ATTLIST portions of included DTDs.
+ (xml-parse-dtd): Eliminate use of inefficient match-data.
+
+2005-06-10 Miles Bader <miles@gnu.org>
+
+ * play/mpuz.el (mpuz-unsolved, mpuz-solved, mpuz-trivial)
+ (mpuz-text): Remove "-face" suffix from face names.
+ (mpuz-unsolved-face, mpuz-solved-face, mpuz-trivial-face)
+ (mpuz-text-face): New backward-compatibility aliases for renamed faces.
+ (mpuz-create-buffer, mpuz-paint-digit): Use renamed mpuz faces.
+
+ * play/gomoku.el (gomoku-O, gomoku-X):
+ Remove "-face" suffix from face names.
+ (gomoku-font-lock-O-face, gomoku-font-lock-X-face):
+ New backward-compatibility aliases for renamed faces.
+ (gomoku-font-lock-keywords): Use renamed gomoku faces.
+
+2005-06-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * thumbs.el: Fixes for changes of 2005-06-09.
+ (thumbs-thumbsdir): Force `thumbs-thumbsdir' to be interpretable
+ as a directory.
+ (thumbs-thumbname): Remove directory separator from format string;
+ `thumbs-thumbsdir' now returns a valid directory name.
+ (thumbs-temp-dir): New defsubst.
+ (thumbs-temp-file, thumbs-resize-image, thumbs-modify-image):
+ Use it.
+
+ * cus-edit.el (minibuffer):
+ * files.el (make-backup-file-name-function):
+ * filesets.el (filesets-external-viewers):
+ * hilit-chg.el (highlight-changes-colours)
+ (highlight-changes-face-list, highlight-changes-rotate-faces):
+ * ielm.el (ielm-dynamic-return, inferior-emacs-lisp-mode):
+ * kmacro.el (kmacro-call-macro):
+ * log-edit.el (log-edit-changelog-full-paragraphs):
+ * mouse.el (mouse-1-click-follows-link):
+ * skeleton.el (skeleton-autowrap):
+ * subr.el (insert-for-yank-1):
+ * tempo.el (tempo-insert-region):
+ * terminal.el (terminal-emulator):
+ * time.el (display-time-mail-face):
+ * vc.el (vc-annotate):
+ * vcursor.el (vcursor-copy-line):
+ * woman.el (woman-bold-headings, woman-ignore)
+ (woman-default-faces, woman-monochrome-faces):
+ * calendar/todo-mode.el (todo-insert-threshold):
+ * emulation/pc-select.el (pc-select-selection-keys-only)
+ (pc-selection-mode):
+ * emulation/vip.el (vip-find-char-forward):
+ * emulation/viper-cmd.el (viper-find-char-forward):
+ * international/mule-cmds.el
+ (select-safe-coding-system-accept-default-p)
+ (input-method-exit-on-invalid-key):
+ * international/mule-diag.el (describe-coding-system):
+ * international/ucs-tables.el (unify-8859-on-encoding-mode):
+ * net/browse-url.el (browse-url-xterm-program):
+ * obsolete/lazy-lock.el (lazy-lock-mode):
+ * progmodes/cperl-mode.el (cperl-info-on-command-no-prompt)
+ (cperl-mode):
+ * progmodes/cpp.el (cpp-face-light-name-list)
+ (cpp-face-dark-name-list):
+ * progmodes/delphi.el (delphi-newline-always-indents):
+ Fix spellings in docstrings.
+
+ * ido.el (ido-mode, ido-file-extensions-order)
+ (ido-default-file-method, ido-default-buffer-method)
+ (ido-max-prospects, ido-slow-ftp-hosts, ido-setup-hook)
+ (ido-decorations, ido-read-file-name-as-directory-commands)
+ (ido-read-file-name-non-ido, ido-work-directory-list)
+ (ido-ignore-item-temp-list, ido-current-directory)
+ (ido-magic-forward-char, ido-enter-find-file)
+ (ido-enter-switch-buffer, ido-visit-buffer, ido-switch-buffer)
+ (ido-find-file, ido-read-buffer): Fix typos in docstrings.
+
+2005-06-10 Lute Kamstra <lute@gnu.org>
+
+ * play/dunnet.el (dun-mode): Use define-derived-mode.
+ (dungeon-mode-map): Rename to dun-mode-map. Keep old name as an
+ obsolete alias.
+
+ * play/doctor.el (doctor-mode-map): Remove defvar.
+ (doctor-mode): Use define-derived-mode.
+
+ * mail/mspools.el (mspools-mode):
+ * net/eudc-hotlist.el (eudc-hotlist-mode):
+ * play/blackbox.el (blackbox-mode): Use run-mode-hooks.
+
+2005-06-10 Miles Bader <miles@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-incorrect, flyspell-duplicate):
+ Remove "-face" suffix from face names.
+ (flyspell-incorrect-face, flyspell-duplicate-face):
+ New backward-compatibility aliases for renamed faces.
+ (flyspell-mode-on, make-flyspell-overlay)
+ (flyspell-highlight-incorrect-region)
+ (flyspell-highlight-duplicate-region)
+ (flyspell-display-next-corrections)
+ (flyspell-auto-correct-previous-word): Use renamed flyspell faces.
+
+ * textmodes/texinfo.el (texinfo-heading): Remove "-face" suffix
+ from face name.
+ (texinfo-heading-face): New backward-compatibility alias for
+ renamed face.
+ (texinfo-heading-face): Use renamed texinfo-heading face.
+
+ * textmodes/tex-mode.el (tex-math, tex-verbatim): Remove "-face"
+ suffix from face names.
+ (tex-math-face, tex-verbatim-face):
+ New backward-compatibility aliases for renamed faces.
+ (tex-math-face, tex-verbatim-face): Use renamed tex-mode faces.
+ (tex-insert-quote): Use `tex-verbatim-face' variable instead of
+ literal face name.
+
+ * textmodes/table.el (table-cell): Remove "-face" suffix from face
+ name.
+ (table-cell-face): New backward-compatibility alias for renamed face.
+ (table--put-cell-face-property, table--update-cell-face):
+ Use renamed table-cell face.
+
+ * textmodes/sgml-mode.el (sgml-namespace): Remove "-face" suffix
+ from face name.
+ (sgml-namespace-face): New backward-compatibility alias for
+ renamed face.
+ (sgml-namespace-face): Use renamed sgml-namespace face.
+
+ * textmodes/org.el (org-level-1, org-level-2, org-level-3)
+ (org-level-4, org-level-5, org-level-6, org-level-7)
+ (org-level-8, org-warning, org-headline-done)
+ (org-deadline-announce, org-scheduled-today)
+ (org-scheduled-previously, org-link, org-done, org-table)
+ (org-time-grid): Remove "-face" suffix from face names.
+ (org-level-1-face, org-level-2-face, org-level-3-face)
+ (org-level-4-face, org-level-5-face, org-level-6-face)
+ (org-level-7-face, org-level-8-face, org-warning-face)
+ (org-headline-done-face, org-deadline-announce-face)
+ (org-scheduled-today-face, org-scheduled-previously-face)
+ (org-link-face, org-done-face, org-table-face)
+ (org-time-grid-face):
+ New backward-compatibility aliases for renamed faces.
+ (org-level-faces, org-set-font-lock-defaults, org-timeline)
+ (org-agenda, org-agenda-get-todos, org-agenda-get-deadlines)
+ (org-agenda-get-timestamps, org-agenda-get-scheduled)
+ (org-agenda-add-time-grid-maybe, org-table-p): Use renamed org faces.
+
+ * emulation/viper-init.el (viper-search, viper-replace-overlay)
+ (viper-minibuffer-emacs, viper-minibuffer-insert)
+ (viper-minibuffer-vi): Remove "-face" suffix from face names.
+ (viper-search-face, viper-replace-overlay-face)
+ (viper-minibuffer-emacs-face, viper-minibuffer-insert-face)
+ (viper-minibuffer-vi-face):
+ New backward-compatibility aliases for renamed faces.
+ (viper-search-face, viper-replace-overlay-face)
+ (viper-minibuffer-emacs-face, viper-minibuffer-insert-face)
+ (viper-minibuffer-vi-face): Use renamed viper faces.
+
+ * emacs-lisp/testcover.el (testcover-nohits, testcover-1value):
+ Remove "-face" suffix from face names.
+ (testcover-nohits-face, testcover-1value-face):
+ New backward-compatibility aliases for renamed faces.
+ (testcover-mark): Use renamed testcover faces.
+
+ * calendar/diary-lib.el (diary-button): Remove "-face" suffix from
+ face name.
+ (diary-button-face): New backward-compatibility alias for renamed face.
+ (diary-entry): Use renamed diary-button face.
+
+ * calendar/calendar.el (diary, calendar-today, holiday)
+ (mark-visible-calendar-date): Remove "-face" suffix from face names.
+ (diary-face, calendar-today-face, holiday-face):
+ New backward-compatibility aliases for renamed faces.
+ (eval-after-load "facemenu", diary-entry-marker)
+ (calendar-today-marker, calendar-holiday-marker, diary-face):
+ Use renamed calendar faces.
+
+ * compare-w.el (compare-windows): Remove "-face" suffix from face name.
+ (compare-windows-face): New backward-compatibility alias for
+ renamed face.
+ (compare-windows-highlight): Use renamed compare-windows face.
+
+ * strokes.el (strokes-char): Remove "-face" suffix from face name.
+ (strokes-char-face): New backward-compatibility alias for renamed face.
+ (strokes-encode-buffer): Use renamed strokes-char face.
+
+ * pcvs-info.el (cvs-header, cvs-filename, cvs-unknown)
+ (cvs-handled, cvs-need-action, cvs-marked, cvs-msg):
+ Remove "-face" suffix from face names.
+ (cvs-header-face, cvs-filename-face, cvs-unknown-face)
+ (cvs-handled-face, cvs-need-action-face, cvs-marked-face)
+ (cvs-msg-face): New backward-compatibility aliases for renamed faces.
+ (cvs-fi-up-to-date-face, cvs-fi-unknown-face, cvs-fileinfo-pp):
+ Use renamed pcvs faces.
+ * pcvs.el (cvs-mode-find-file): Use renamed pcvs faces.
+ * pcvs-defs.el (cvs-mode-map): Likewise.
+ * cvs-status.el (cvs-status-font-lock-keywords): Likewise.
+
+ * info.el (info-title-1, info-title-2, info-title-3)
+ (info-title-4): Remove "-face" suffix from and downcase face names.
+ (Info-title-1-face, Info-title-2-face, Info-title-3-face)
+ (Info-title-4-face):
+ New backward-compatibility aliases for renamed faces.
+ (Info-fontify-node): Use renamed info faces.
+
+ * hilit-chg.el (highlight-changes, highlight-changes-delete):
+ Remove "-face" suffix from face names.
+ (highlight-changes-face, highlight-changes-delete-face):
+ New backward-compatibility aliases for renamed faces.
+ (hilit-chg-cust-fix-changes-face-list, hilit-chg-make-ov)
+ (hilit-chg-make-list): Use renamed highlight-changes faces.
+
+ * generic-x.el (show-tabs-tab, show-tabs-space):
+ Remove "-face" suffix from face names.
+ (show-tabs-tab-face, show-tabs-space-face):
+ New backward-compatibility aliases for renamed faces.
+ (show-tabs-generic-mode-font-lock-defaults-1)
+ (show-tabs-generic-mode-font-lock-defaults-2):
+ Use renamed show-tabs faces.
+
+ * smerge-mode.el (smerge-mine, smerge-other, smerge-base)
+ (smerge-markers): Remove "-face" suffix from face names.
+ (smerge-mine-face, smerge-other-face, smerge-base-face)
+ (smerge-markers-face):
+ New backward-compatibility aliases for renamed faces.
+ (smerge-mine-face, smerge-other-face, smerge-base-face)
+ (smerge-markers-face): Use renamed smerge faces.
+
+ * log-view.el (log-view-file, log-view-message): Remove "-face"
+ suffix from face names.
+ (log-view-file-face, log-view-message-face):
+ New backward-compatibility aliases for renamed faces.
+ (log-view-file-face, log-view-message-face): Use renamed log-view
+ faces.
+
+ * paren.el (show-paren-match, show-paren-mismatch):
+ Remove "-face" suffix from face names.
+ (show-paren-match-face, show-paren-mismatch-face):
+ New backward-compatibility aliases for renamed faces.
+ (show-paren-function): Use renamed show-paren faces.
+
+ * ruler-mode.el (ruler-mode-default, ruler-mode-pad)
+ (ruler-mode-margins, ruler-mode-fringes)
+ (ruler-mode-column-number, ruler-mode-fill-column)
+ (ruler-mode-comment-column, ruler-mode-goal-column)
+ (ruler-mode-tab-stop, ruler-mode-current-column): Remove "-face"
+ suffix from face names.
+ (ruler-mode-default-face, ruler-mode-pad-face)
+ (ruler-mode-margins-face, ruler-mode-fringes-face)
+ (ruler-mode-column-number-face, ruler-mode-fill-column-face)
+ (ruler-mode-comment-column-face, ruler-mode-goal-column-face)
+ (ruler-mode-tab-stop-face, ruler-mode-current-column-face):
+ New backward-compatibility aliases for renamed faces.
+ (ruler-mode-pad, ruler-mode-margins, ruler-mode-fringes)
+ (ruler-mode-column-number, ruler-mode-fill-column)
+ (ruler-mode-comment-column, ruler-mode-goal-column)
+ (ruler-mode-tab-stop, ruler-mode-current-column)
+ (ruler-mode-mouse-grab-any-column, ruler-mode-ruler): Use renamed
+ faces.
+
+ * whitespace.el (whitespace-highlight): Remove "-face" suffix from
+ face name.
+ (whitespace-highlight-the-space): Use renamed face.
+ (whitespace-highlight-face): New backward-compatibility alias for
+ renamed face.
+
+ * woman.el (woman-italic, woman-bold, woman-unknown)
+ (woman-addition, woman-symbol-face):
+ Remove "-face" suffix from face names.
+ (woman-italic-face, woman-bold-face, woman-unknown-face)
+ (woman-addition-face):
+ New backward-compatibility aliases for renamed faces.
+ (woman-default-faces, woman-monochrome-faces, woman-man-buffer)
+ (woman-decode-region, woman-replace-match)
+ (woman-display-extended-fonts, woman-special-characters)
+ (woman-font-alist, woman-change-fonts, woman2-TH, woman2-SH):
+ Use renamed woman faces.
+
+ * longlines.el (longlines-visible-face): Face removed.
+
+ * diff-mode.el (diff-header, diff-file-header, diff-index)
+ (diff-hunk-header, diff-removed, diff-added, diff-changed)
+ (diff-function, diff-context, diff-nonexistent): Remove "-face"
+ suffix from face names.
+ (diff-header-face, diff-file-header-face, diff-index-face)
+ (diff-hunk-header-face, diff-removed-face, diff-added-face)
+ (diff-changed-face, diff-function-face, diff-context-face)
+ (diff-nonexistent-face): New backward-compatibility aliases for
+ renamed faces.
+ (diff-header-face, diff-file-header-face)
+ (diff-index, diff-index-face, diff-hunk-header)
+ (diff-hunk-header-face, diff-removed, diff-removed-face)
+ (diff-added, diff-added-face, diff-changed-face, diff-function)
+ (diff-function-face, diff-context-face, diff-nonexistent)
+ (diff-nonexistent-face): Use renamed diff-mode faces.
+
+ * progmodes/compile.el (compilation-warning-face)
+ (compilation-info-face): Remove "-face" suffix from face names.
+ (compilation-warning-face, compilation-info-face):
+ New backward-compatibility aliases for renamed faces.
+ (compilation-warning-face, compilation-info-face):
+ Use renamed compilation faces.
+
+ * add-log.el (change-log-date, change-log-name)
+ (change-log-email, change-log-file, change-log-list)
+ (change-log-conditionals, change-log-function)
+ (change-log-acknowledgement): Remove "-face" suffix from face names.
+ (change-log-date-face, change-log-name-face)
+ (change-log-email-face, change-log-file-face)
+ (change-log-list-face, change-log-conditionals-face)
+ (change-log-function-face, change-log-acknowledgement-face):
+ New backward-compatibility aliases for renamed faces.
+ (change-log-font-lock-keywords): Use renamed change-log faces.
+
+ * cus-edit.el (custom-invalid, custom-rogue, custom-modified)
+ (custom-set, custom-changed, custom-saved, custom-button)
+ (custom-button-pressed, custom-documentation, custom-state)
+ (custom-comment, custom-comment-tag, custom-variable-tag)
+ (custom-variable-button, custom-face-tag, custom-group-tag-1)
+ (custom-group-tag): Remove "-face" suffix from face names.
+ (custom-magic-alist, custom-magic-value-create)
+ (custom-group-sample-face-get, custom-mode): Use renamed custom faces.
+ (custom-invalid-face, custom-rogue-face, custom-modified-face)
+ (custom-set-face, custom-changed-face, custom-saved-face)
+ (custom-button-face, custom-button-pressed-face)
+ (custom-documentation-face, custom-state-face)
+ (custom-comment-face, custom-comment-tag-face)
+ (custom-variable-tag-face, custom-variable-button-face)
+ (custom-face-tag-face, custom-group-tag-face-1)
+ (custom-group-tag-face):
+ New backward-compatibility aliases for renamed faces.
+
+ * wid-edit.el (widget-documentation, widget-button)
+ (widget-field, widget-single-line-field, widget-inactive)
+ (widget-button-pressed): "-face" suffix removed from face names.
+ (widget-documentation-face, widget-button-face)
+ (widget-field-face, widget-single-line-field-face)
+ (widget-inactive-face, widget-button-pressed-face):
+ New backward-compatibility aliases for renamed faces.
+ (widget-documentation-face, widget-button-face)
+ (widget-button-pressed-face, widget-specify-field)
+ (widget-specify-inactive): Use renamed widget faces.
+
+2005-06-10 Kenichi Handa <handa@m17n.org>
+
+ * term/x-win.el (x-clipboard-yank): Remove condition-case
+ wrapping.
+
+2005-06-11 Kenichi Handa <handa@m17n.org>
+
+ * add-log.el (change-log-font-lock-keywords): Make the regexp for
+ date lines stricter.
+
+2005-06-10 Zhang Wei <id.brep@gmail.com>
+
+ * term/x-win.el (x-clipboard-yank): Use x-selection-value instead
+ of x-get-selection.
+
+2005-06-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * comint.el (comint-mode, comint-snapshot-last-prompt):
+ * frame.el (frame-current-scroll-bars):
+ * term.el (term-mode, term-check-proc, term-input-sender)
+ (term-simple-send, term-extract-string, term-word)
+ (term-match-partial-filename):
+ * window.el (window-current-scroll-bars):
+ * emulation/cua-base.el (cua-normal-cursor-color)
+ (cua-read-only-cursor-color, cua-overwrite-cursor-color)
+ (cua-global-mark-cursor-color):
+ * mail/undigest.el (rmail-forward-separator-regex):
+ Fix typos in docstrings.
+
+ * comint.el (comint-check-proc, make-comint-in-buffer)
+ (comint-source-default): Doc fixes.
+
+ * term.el (term-send-string): Improve argument/docstring consistency.
+
+2005-06-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * comint.el (comint-send-input): Bind `inhibit-read-only' around
+ call to `delete-region'.
+ (comint-mode-hook): Do not enable Font Lock by default.
+
+2005-06-09 Lute Kamstra <lute@gnu.org>
+
+ * textmodes/ispell.el (ispell-menu-map-needed): flyspell-mode
+ could be void.
+
+2005-06-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (debugger-will-be-back): New var.
+ (debug): Use it.
+ (debugger-step-through, debugger-continue, debugger-jump)
+ (debugger-return-value): Set it when needed.
+ (debugger-make-xrefs, debugger-frame, debugger-frame-clear):
+ Use inhibit-read-only.
+
+2005-06-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.el (shrink-window-if-larger-than-buffer)
+ (window-size-fixed): Fix typo in docstring.
+
+ * thumbs.el: Don't set `auto-image-file-mode'. Do not create the
+ thumbnails directory on loading.
+ (thumbs-conversion-program): Use `eq' to check the system type,
+ not `equal'.
+ (thumbs-temp-dir): Initialize to `temporary-file-directory',
+ not "/tmp". Fix docstring.
+ (thumbs-thumbsdir): New function to return the thumbnails
+ directory, creating it if needed.
+ (thumbs-cleanup-thumbsdir, thumbs-thumbname): Use it.
+ (thumbs-temp-file): Delete variable and make it into a function.
+ (thumbs-resize-image, thumbs-modify-image): Use it.
+ (thumbs-kill-buffer): Simplify.
+ (thumbs-gensym): Defalias or duplicate CL `gensym'.
+ (thumbs-resize-image, thumbs-resize-interactive): Fix typos in
+ docstrings.
+
+2005-06-09 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (save-match-data): Add RESEAT arg `evaporate' to
+ set-match-data to free markers in match-data.
+
+ * replace.el (replace-match-data): Pass RESEAT arg `t' to
+ match-data to unchain markers in match-data.
+
+2005-06-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (debug): Don't iconify if we know we'll re-enter
+ the debugger immediately anyway. Undo the 2005-06-06 change, rendered
+ unnecessary now.
+
+2005-06-08 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): If BODY is empty,
+ give the variable a doc string that doesn't say don't set it directly.
+
+ * textmodes/ispell.el (ispell-check-version):
+ Use match-string-no-properties.
+ (ispell-region, ispell-buffer-local-parsing, ispell-buffer-local-dict)
+ (ispell-buffer-local-words): Likewise.
+
+ * progmodes/make-mode.el (makefile-shell-face): Make this a no-op
+ except on terminals with enough colors to really display it.
+ (makefile-dependency-regex): Delete spurious `bb'.
+
+ * faces.el (escape-glyph): Use blue once again in last case.
+ (no-break-space): Redefine so that it isn't invisible on a tty.
+
+2005-06-08 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-read-file-name): Fallback to read-file-name on C-f
+ also when reading directory name.
+
+2005-06-08 Lute Kamstra <lute@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-mode): Use define-minor-mode.
+ (flyspell-mode-line-string): Remove autoload cookie.
+ (flyspell-mode): Remove defvar.
+
+2005-06-07 Lute Kamstra <lute@gnu.org>
+
+ * textmodes/org.el (org-run-mode-hooks): New function.
+ (org-agenda-mode): Use it.
+
+2005-06-07 David McCabe <davemccabe@gmail.com> (tiny change)
+
+ * emacs-lisp/lisp-mode.el (defstruct): Set `doc-string-elt' property.
+
+2005-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/iso-cvt.el (iso-sgml2iso-trans-tab): Add NBSP.
+
+2005-06-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * font-lock.el (font-lock-add-keywords): Doc fix.
+
+2005-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/tex-mode.el (tex-guess-mode): Add RequirePackage.
+ (tex-compile-default): In the absence of any history, use the order in
+ tex-compile-alist to choose the preferred command.
+ (tex-compile-commands): Reorder a bit.
+
+ * textmodes/flyspell.el (flyspell-auto-correct-binding)
+ (flyspell-incorrect-face, flyspell-duplicate-face):
+ Use (X)Emacs-agnostic code.
+ (flyspell-mode-map): Don't overwrite at each load. Remove code
+ redundant with the subsequent add-minor-mode. Merge Emacs and
+ XEmacs code.
+ (flyspell-word): Minor simplification.
+ (flyspell-math-tex-command-p): Quieten the byte-compiler.
+ (flyspell-external-point-words): Remove unused vars `size' and `start'.
+ (flyspell-do-correct): Rename from flyspell-xemacs-correct.
+ Merge the corresponding Emacs code.
+ (flyspell-correct-word, flyspell-xemacs-popup):
+ Use flyspell-do-correct.
+
+ * emacs-lisp/debug.el (debug): Don't bury the buffer unless it's in
+ a dedicated window.
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Undo part of last patch, to turn off a compiler warning.
+
+2005-06-06 Juri Linkov <juri@jurta.org>
+
+ * tmm.el (tmm-inactive, tmm-remove-inactive-mouse-face):
+ Rename `tmm-inactive-face' to `tmm-inactive'.
+
+2005-06-06 Matt Hodges <MPHodges@member.fsf.org>
+
+ * iswitchb.el: Rename faces.
+
+2005-06-06 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-rectangle, cua-rectangle-noselect)
+ (cua-global-mark): Remove -face suffix from face names.
+
+ * emulation/cua-gmrk.el (cua--init-global-mark):
+ Remove cua-global-mark face setup.
+
+2005-06-06 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/make-mode.el (makefile-dependency-regex): Handle whitespace
+ just like other allowed characters.
+ (makefile-match-dependency): Exclude leading and training whitespace
+ from the range of regexp subexp 1.
+ (makefile-macroassign-regex): Don't try to match the body,
+ just the name of the macro being defined.
+
+ * info.el (Info-read-node-name-2): New function.
+ (Info-read-node-name-1): Use that.
+ Add a completion-base-size-function property.
+
+ * simple.el (completion-setup-function): Look for
+ completion-base-size-function property of minibuffer-completion-table.
+
+ * files.el (locate-file-completion): Doc fix.
+
+ * printing.el: Don't call pr-update-menus; user must do that.
+
+ * emacs-lisp/debug.el (debugger-window): New variable.
+ (debug): Use debugger-window if it is set and still alive.
+ Record debugger-window for next entry.
+
+ * mail/supercite.el (sc-mail-glom-frame): Mark as risky.
+
+2005-06-06 Matthias F,Av(Brste <slashdevslashnull@gmx.net>
+
+ * files.el (hack-local-variables-confirm): New arg FLAG-TO-CHECK.
+ (hack-one-local-variable, hack-local-variables)
+ (hack-local-variables-prop-line): Pass that arg.
+
+2005-06-06 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-first-match, ido-only-match, ido-subdir)
+ (ido-indicator): Remove -face suffix from face names.
+
+2005-06-06 Juri Linkov <juri@jurta.org>
+
+ * font-lock.el (font-lock-regexp-backslash)
+ (font-lock-regexp-backslash-construct): New faces.
+ (lisp-font-lock-keywords-2): Use new faces. Match `?:' only
+ after `('. Add `while-no-input' to control structures.
+
+ * faces.el (no-break-space, shadow): New faces.
+ (escape-glyph): Use less loud colors pink2 and red4.
+
+ * diff-mode.el (diff-context-face)
+ * dired.el (dired-ignored)
+ * rfn-eshadow.el (file-name-shadow)
+ * tmm.el (tmm-inactive-face): Inherit from `shadow' face.
+
+ * info.el (Info-title-1-face): Use green instead of yellow because
+ bold yellow is not readable on light backgrounds.
+
+ * progmodes/compile.el (compilation-start): Move `erase-buffer' up
+ before selecting the desired mode to not spend time fontifying
+ old contents.
+
+2005-06-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * thumbs.el (thumbs-thumbsdir-max-size, thumbs-image-resizing-step)
+ (thumbs-thumbsdir-auto-clean): Fix typos in docstrings.
+
+ * ps-print.el (ps-default-fg, ps-default-bg):
+ Fix typos in docstrings.
+
+ * isearchb.el (isearchb): Don't pass a spurious second argument to
+ `iswitchb-completions'.
+
+2005-06-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-locals-handler): Use window point
+ to preserve point.
+ (gdb-find-file-hook): Add doc string.
+
+ * progmodes/gud.el (gdb, gud-menu-map): Add command to evaluate
+ C dereferenced pointer expression.
+ (gud-tool-bar-map): Put it on the tool bar. Re-order icons.
+
+ * toolbar/gud-pstar.xpm, toolbar/gud-pstar.pbm: New files.
+
+ * toolbar/gud-break.xpm, toolbar/gud-cont.xpm, toolbar/gud-down.xpm
+ * toolbar/gud-finish.xpm, toolbar/gud-ni.xpm, toolbar/gud-n.xpm
+ * toolbar/gud-print.xpm, toolbar/gud-remove.xpm, toolbar/gud-run.xpm
+ * toolbar/gud-si.xpm, toolbar/gud-s.xpm, toolbar/gud-until.xpm
+ * toolbar/gud-up.xpm, toolbar/gud-watch.xpm:
+ Make background transparent.
+
+2005-06-04 Luc Teirlinck <teirllm@auburn.edu>
+
+ * font-lock.el (font-lock-add-keywords): Doc fix. Comment change.
+ (font-lock-remove-keywords): Doc fix.
+ (font-lock-mode-major-mode): Compiler defvar.
+ (font-lock-set-defaults): Use `font-lock-mode-major-mode'.
+
+ * font-core.el (font-lock-mode-major-mode): Compiler defvar.
+ (font-lock-mode): Update `font-lock-mode-major-mode'.
+ (font-lock-set-defaults): Compiler defvar.
+ (font-lock-default-function): Take `font-lock-mode-major-mode'
+ into account.
+
+ * emacs-lisp/easy-mmode.el (define-global-minor-mode): Make it
+ keep track of which major mode it enabled the minor mode for.
+ Use find-file-hook again. Update docstring.
+
+ * simple.el (eval-expression-print-level)
+ (eval-expression-print-length, eval-expression-debug-on-error):
+ Doc fixes.
+
+2005-06-04 Matt Hodges <MPHodges@member.fsf.org>
+
+ * iswitchb.el (iswitchb-single-match-face)
+ (iswitchb-current-match-face, iswitchb-virtual-matches-face)
+ (iswitchb-invalid-regexp-face): New faces.
+ (iswitchb-completions): Use them.
+ (iswitchb-use-faces): Rename from iswitchb-use-fonts, which is
+ now marked as an obsolete alias.
+ (iswitchb-read-buffer): Remove check for bound font variables.
+ (iswitchb-invalid-regexp): New free variable.
+ (iswitchb-get-matched-buffers): Catch invalid-regexp errors and
+ set iswitchb-invalid-regexp.
+ (iswitchb, iswitchb-complete, iswitchb-completions): Deal with
+ invalid regexps.
+ (iswitchb-completions): Add check for complete match when entering
+ a regexp.
+ (iswitchb-completions): Remove require-match argument.
+ (iswitchb-exhibit): Fix caller.
+ (iswitchb-common-match-inserted): New variable.
+ (iswitchb-complete, iswitchb-completion-help): Use it.
+
+2005-06-04 David Reitter <david.reitter@gmail.com> (tiny change)
+
+ * url/url-http.el (url-http-chunked-encoding-after-change-function):
+ Use `url-http-debug' instead of `message'.
+
+2005-06-04 Thierry Emery <thierry.emery@free.fr> (tiny change)
+
+ * url/url-http.el (url-http-parse-headers): Pass redirected URL
+ as a callback argument.
+
+2005-06-04 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move): Only call sit-for when moving backwards.
+
+ * ido.el (ido-make-merged-file-list-1): New defun split from
+ ido-make-merged-file-list.
+ (ido-make-merged-file-list): Bind throw-on-input around call to
+ ido-make-merged-file-list-1. Return input-pending-p if
+ interrupted by more input available.
+ (ido-read-internal): Handle input-pending-p return value from
+ ido-make-merged-file-list.
+
+2005-06-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/flyspell.el (flyspell-check-word-p): Simplify silly
+ compatibility code.
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Don't inherit the EOL part of the coding-system from the
+ tex-main buffer. Fit within 80 columns.
+
+2005-06-03 Matt Hodges <MPHodges@member.fsf.org>
+
+ * tmm.el (tmm-inactive-face): New face.
+ (tmm-remove-inactive-mouse-face): New function.
+ (tmm-prompt, tmm-add-one-shortcut)
+ (tmm-add-prompt, tmm-get-keymap): Make active menu items visible
+ but not selectable.
+
+2005-06-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (face-equal): Improve argument/docstring consistency.
+
+2005-06-03 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-targets-face)
+ (makefile-shell-face, makefile-makepp-perl-face): Add :version.
+ (makefile-bsdmake-dependency-regex)
+ (makefile-makepp-rule-action-regex)
+ (makefile-bsdmake-rule-action-regex): New constants.
+ (makefile-makepp-mode, makefile-bsdmake-mode): Use them.
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Allow (...) within `...' for makepp messages.
+
+2005-06-03 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff-diff.el (ediff-same-contents): Eliminate CL-type functions.
+
+ * ediff-mult.el (ediff-intersect-directories): Make sure that ".." and
+ "." files are deleted from all file lists before comparison.
+
+ * emulation/viper-keym.el (viper-toggle-key, viper-quoted-insert-key)
+ (viper-ESC-key): Made them customizable.
+
+ * emulation/viper.el (viper-non-hook-settings):
+ Fix the names of defadvices.
+
+2005-06-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * autorevert.el (auto-revert-buffers): Use save-match-data.
+
+2005-06-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/easymenu.el (easy-menu-return-item): Quick fix to find
+ menu items with a nil command binding.
+
+2005-06-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/cl-macs.el (defsetf):
+ Improve argument/docstring consistency.
+
+ * faces.el (list-faces-display): Improve the formatting by
+ computing the maximum length required for any face-name (reworked
+ patch of 1999-01-11, accidentally deleted on 1999-07-21).
+ (internal-find-face): Remove redundant info in docstring.
+
+2005-06-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-1)
+ (gdb-info-breakpoints-custom, gdb-delete-breakpoint)
+ (gdb-goto-breakpoint, gdb-source-info, gdb-get-location)
+ (gdb-assembler-custom): Improve regexps.
+ (def-gdb-auto-update-handler): Use window point to preserve point.
+
+2005-05-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * thumbs.el (thumbs-mode): Fix misuse of make-variable-buffer-local.
+
+2005-05-31 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-embedded-word): Change argument passed
+ to calc-embedded.
+ (calc-embedded-make-info): Have plain prefix argument select
+ entire line.
+
+2005-05-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * faces.el (list-faces-display): Signal error if passed a regexp
+ that matches no face name.
+
+ * simple.el (filter-buffer-substring): Fix typo in docstring.
+
+2005-05-31 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/vhdl-mode.el (vhdl-fill-region): Test ARG, not INTERACTIVE.
+ (vhdl-emacs-21): Doc fix.
+ (vhdl-mode): Unconditionally set comment-padding.
+ (vhdl-fixup-whitespace-region): Insert spaces only where
+ there are none.
+ (vhdl-statistics-buffer): Make the Emacs 21 behavior universal.
+
+2005-05-30 John Wiegley <johnw@newartisans.com>
+
+ * eshell/em-cmpl.el, eshell/em-dirs.el, eshell/em-glob.el
+ * eshell/em-unix.el, eshell/esh-ext.el, eshell/esh-io.el
+ * eshell/esh-util.el, eshell/esh-var.el: Change all uses of
+ `directory-sep-char' to ?/, and all uses of `string-to-int' to
+ `string-to-number'.
+
+2005-05-30 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-bug-address): Fix docstring.
+ (calc-window-hook, calc-trail-window-hook): New variables.
+ (calc-trail-display): Restore use of calc-trail-window-hook.
+ (calc): Restore use of calc-window-hook.
+
+2005-05-31 Masatake YAMATO <jet@gyve.org>
+
+ * emacs-lisp/find-func.el (find-function-noselect): Handle subroutines.
+
+ * help-fns.el (help-C-file-name): Add autoload mark for
+ `find-function-noselect'.
+
+2005-05-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/tex-mode.el (tex-compile-commands, tex-compile)
+ (tex-start-tex): Undo all but the last part of the 2005-05-28 change.
+
+2005-05-30 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/diary-lib.el (mark-included-diary-files): Only kill
+ included diary buffer if it was not already being visited.
+ Reported by Stephen Berman <Stephen.Berman@gmx.net>.
+
+ * calendar/icalendar.el (top-level): Do not require appt.
+
+ * mail/supercite.el (sc-select-attribution): Only use a list
+ element from sc-attrib-selection-list if it returns a string.
+ Reported by Davide G. M. Salvetti <salve@debian.org>.
+
+2005-05-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * thumbs.el (thumbs-thumbname): The resulting thumbname now
+ includes a hash value to improve its uniqueness, and has a ".jpg"
+ extension. Also, it is now a valid filename on all systems.
+ (thumbs-make-thumb): Use `let', not `let*'.
+ (thumbs-show-thumbs-list): Check for JPEG availability.
+
+2005-05-30 Richard M. Stallman <rms@gnu.org>
+
+ * filesets.el (filesets-menu-ensure-use-cached):
+ Prevent warning when emacs-version>= is undefined.
+
+ * printing.el (pr-interactive-n-up): Use string-to-number.
+
+ * emulation/tpu-mapper.el: Use eval-buffer, not eval-current-buffer.
+
+ * emacs-lisp/bytecomp.el (byte-compile-nogroup-warn):
+ Warn only when name to be defined is quoted.
+
+2005-05-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-toggle-breakpoint):
+ Make regexp more robust.
+ (gdb-display-assembler-buffer, gdb-frame-assembler-buffer):
+ Force regeneration of disassembly.
+
+2005-05-29 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-user-invocation): Check if
+ calc-invocation-macro is non-nil.
+
+2005-05-29 Juri Linkov <juri@jurta.org>
+
+ * add-log.el (change-log-font-lock-keywords):
+ Add `+' to e-mail regexp to accept mail address with keywords.
+
+ * man.el (Man-name-regexp): Add `:' to accept qualified names.
+
+2005-05-29 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/inf-lisp.el (inferior-lisp-mode): Use delay-mode-hooks.
+
+ * ielm.el (inferior-emacs-lisp-mode): Ditto.
+
+2005-05-29 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-auto-correct-previous-word):
+ Undo the change that moves to end of the current word.
+
+2005-05-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-memory-set-repeat-count):
+ Throw error when count <= 0 to ensure input is a number.
+ (gdb-read-memory-custom): Pick up address from buffer.
+ (gdb-memory-mode): Allow user to increment and decrement
+ memory address from header line.
+
+2005-05-29 Richard M. Stallman <rms@gnu.org>
+
+ * textmoddes/flyspell.el (flyspell-version): Function deleted.
+ (flyspell-auto-correct-previous-hook): Doc fix.
+
+ * jit-lock.el (jit-lock-function, jit-lock-after-change):
+ Do nothing if memory is full.
+
+ * font-lock.el (font-lock-fontify-syntactically-region):
+ Pass t for GREEDY to looking-back.
+
+ * saveplace.el (save-place-alist-to-file): Write the file
+ using write-region.
+
+ * subr.el (looking-back): New argument GREEDY.
+
+ * progmodes/compile.el (compilation-start): Set the mode
+ before inserting the initial text.
+
+ * progmodes/which-func.el (which-func-update-1): Turn the mode
+ off in case of error by setting which-func-mode.
+
+2005-05-29 Peter Heslin <p.j.heslin@durham.ac.uk> (tiny change)
+
+ * textmodes/flyspell.el (flyspell-auto-correct-previous-word):
+ Narrow down to what's on the screen, and recenter overlays
+ at the end of the next word.
+
+2005-05-29 Manuel Serrano <Manuel.Serrano@sophia.inria.fr>
+
+ * textmodes/flyspell.el (flyspell-emacs, flyspell-use-local-map):
+ 8Vars moved up.
+ (flyspell-default-delayed-commands): Add backward-delete-char-untabify.
+ (flyspell-abbrev-p): Default to nil.
+ (flyspell-use-global-abbrev-table-p): Doc fix.
+ (flyspell-large-region): Allow nil as value.
+ (flyspell-use-meta-tab, flyspell-auto-correct-binding): New variables.
+
+ (mail-mode-flyspell-verify): More robust handling
+ of `mail-header-separator'. More efficient signature detection.
+ Allow for regexp metacharacters in message-header-separator.
+ Adding `To' not to be checked in mail-mode-flyspell-verify.
+
+ (flyspell-prog-mode): Run flyspell-prog-mode-hook.
+ (flyspell-mouse-map): Bind M-TAB only if flyspell-use-meta-tab.
+ Bind flyspell-auto-correct-binding.
+ Bind C-. and C-, .
+ (flyspell-mode-map): Likewise.
+ (flyspell-mode): Doc fix.
+ (flyspell-accept-buffer-local-defs): Preserve current buffer.
+ (flyspell-mode-on): Bind flyspell-mouse-map and flyspell-mode-map.
+ (flyspell-word-cache-result): New var, always local.
+ (flyspell-check-pre-word-p): Doc fix.
+ (flyspell-check-changed-word-p): Handle spc like newline.
+ (flyspell-post-command-hook): Set flyspell-word-cache-result.
+ (flyspell-word-search-backward, flyspell-word-search-forward):
+ New functions.
+ (flyspell-word): Return t if nothing to check.
+ When parsing TeX code, check for after } or \.
+ Use flyspell-word-search-backward to find previous word.
+ Return nil if duplicated word.
+ For word already checked, return same value as last time.
+ Set flyspell-word-cache-result after checking.
+ Don't clobber the return value.
+ (flyspell-get-word): Major rewrite.
+ (flyspell-external-point-words): New locals pword, pcount.
+ Fix size used in progress message.
+ Find the proper corresponding word in flyspell-large-region-buffer.
+ (flyspell-region): Check for flyspell-large-region = nil.
+ (flyspell-highlight-incorrect-region): Clean up overlays in region.
+ (flyspell-auto-correct-word): Check that WORD is a cons.
+ (flyspell-correct-word): Likewise.
+
+2005-05-29 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-rule-action-regex)
+ (makefile-macroassign-regex, makefile-makepp-mode)
+ (makefile-bsdmake-mode): Continuation lines may be empty.
+ Reported by Joshua Varner.
+ (makefile-makepp-font-lock-keywords): Add $(stem).
+
+2005-05-28 Karl Berry <karl@gnu.org>
+
+ * textmodes/tex-mode.el: Now that tex-send-command calls
+ shell-quote-argument (2005-03-31 change), remove all calls to
+ shell-quote-argument; they all end up invoking tex-send-command.
+ The double quoting loses on filenames with non-safe characters,
+ such as "@". Reported by Frederik Fouvry.
+
+2005-05-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-assembler-custom): Be more careful
+ about preserving point.
+
+2005-05-27 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-misc.el (calc-info-goto-node): Use info instead of
+ Info-goto-node.
+
+ * calc/calc-embed.el (calc-embed-arg): New variable.
+ (calc-do-embedded-activate, calc-embedded-activate-formula)
+ (calc-embedded-edit, calc-do-embedded-activate): Replace undeclared
+ variable by new variable.
+ (calc-embedded-make-info): Replace undeclared variable by new
+ variable. When selecting region with positive prefix
+ argument, use end of previous line instead of beginning of line.
+
+ * calc/calc-aent.el (calc-arg-values): Declare it.
+
+ * calc/calc-ext.el (calc-help-map, calc-alg-map, calc-alg-esc-map):
+ Declare them.
+
+ * calc/calc-stuff.el (math-decls-cache-tag): Declare it.
+
+ * calc/calc.el (calc-alg-map): Declare it.
+
+ * calc/calcalg2.el (math-decls-cache, math-decls-all): Declare them.
+
+2005-05-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-all-registers): New variable.
+ (gdb-registers-buffer, toggle-gdb-all-registers):
+ Toggle display of floating point registers.
+ (gdb-registers-mode-map): Bind SPC to toggle-gdb-all-registers.
+
+ * progmodes/gud.el (gud-goto-info): Use info. Don't use require.
+ (toggle-gud-tooltip-dereference):
+ Rename from gud-toggle-tooltip-dereference.
+
+2005-05-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * info.el (Info-goto-node): Revert autoload addition (2004-06-12).
+
+2005-05-27 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-prog.el (calc-kbd-report): Remove.
+ (calc-kbd-query): Rewrite.
+
+2005-05-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * image.el (image-library-alist): Move to image.c.
+ (image-type-available-p): Doc fix.
+
+2005-05-27 Lute Kamstra <lute@gnu.org>
+
+ * calc/calc.el (calc):
+ * outline.el (outline-1, outline-2, outline-3, outline-4)
+ (outline-5, outline-6, outline-7, outline-8):
+ * textmodes/dns-mode.el (dns-mode):
+ * textmodes/sgml-mode.el (sgml-namespace-face):
+ * textmodes/tex-mode.el (superscript, subscript, tex-math-face)
+ (tex-verbatim-face, tex-use-reftex):
+ * textmodes/texinfo.el (texinfo-heading-face):
+ Specify customization group.
+
+ * longlines.el: Don't require easy-mmode.
+ (longlines-visible-face): Specify customization group.
+
+2005-05-27 Kenichi Handa <handa@m17n.org>
+
+ * language/cyrillic.el: Add cyrillic-iso8859-5 characters in the
+ encoding table of windows-1251.
+
+ * international/ucs-tables.el (ucs-set-table-for-input):
+ If translation-table-for-input of a coding system is a symbol, get
+ its translation-table property.
+
+ * international/code-pages.el: Don't register a coding system into
+ non-iso-charset-alist more than once.
+ (cp-make-coding-system): Likewise.
+
+2005-05-26 John Wiegley <johnw@newartisans.com>
+
+ * eshell/esh-cmd.el (eshell-eval-command): If the return value of
+ `eshell-resume-eval' is wrapped in a list, it indicates that the
+ command was run asynchronously. In that case, unwrap the value
+ before checking the delimiter value.
+
+ * eshell/em-cmpl.el (eshell-complete-parse-arguments): If the
+ character before a space at the end of a line is \, assume the space
+ is part of the last argument rather than a final argument separator.
+
+ * eshell/esh-io.el (eshell-get-target): If `eshell-buffer-shorthand'
+ is in use, and the target is `t' or `nil' (which are the most common
+ values), don't assume that the symbol target is a buffer.
+
+2005-05-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * calendar/calendar.el (calendar-mode-line-format):
+ Use mode-line-highlight as mouse-face.
+
+ * time.el (display-time-string-forms, display-time-update):
+ Use mode-line-highlight as mouse-face.
+
+2005-05-26 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-language-alist): Remove extra defvar.
+
+2005-05-26 Lute Kamstra <lute@gnu.org>
+
+ * arc-mode.el (archive-mode):
+ * bookmark.el (bookmark-read-annotation-mode)
+ (bookmark-edit-annotation-mode, bookmark-bmenu-mode):
+ * bs.el (bs-mode):
+ * calc/calc-yank.el (calc-edit-mode):
+ * calc/calc.el (calc-mode, calc-trail-mode):
+ * calculator.el (calculator-mode):
+ * chistory.el (command-history-mode):
+ * comint.el:
+ * cus-edit.el (custom-mode):
+ * descr-text.el (describe-text-mode):
+ * ebuff-menu.el (Electric-buffer-menu-mode):
+ * ediff-util.el (ediff-mode):
+ * emacs-lisp/re-builder.el (reb-mode):
+ * emulation/vi.el (vi-mode-setup):
+ * emulation/ws-mode.el (wordstar-mode):
+ * eshell/esh-mode.el (eshell-mode):
+ * forms.el (forms-mode):
+ * help-mode.el (help-mode):
+ * hexl.el (hexl-mode):
+ * ibuffer.el (ibuffer-mode):
+ * ielm.el (inferior-emacs-lisp-mode):
+ * info.el (Info-mode, Info-edit-mode):
+ * international/swedish.el:
+ * ledit.el (ledit-from-lisp-mode):
+ * locate.el (locate-mode):
+ * mail/rmail.el (rmail-mode):
+ * mail/rmailedit.el (rmail-edit-mode):
+ * mail/rmailsum.el (rmail-summary-mode):
+ * mail/supercite.el (sc-electric-mode):
+ * net/eudc.el (eudc-mode):
+ * net/quickurl.el (quickurl-list-mode):
+ * net/snmp-mode.el (snmp-mode, snmpv2-mode):
+ * obsolete/ooutline.el (outline-mode):
+ * obsolete/options.el (Edit-options-mode):
+ * obsolete/rnews.el (news-mode):
+ * obsolete/rnewspost.el (news-reply-mode):
+ * play/5x5.el (5x5-mode):
+ * play/decipher.el (decipher-mode, decipher-stats-mode):
+ * play/gomoku.el (gomoku-mode):
+ * play/snake.el (snake-mode):
+ * play/solitaire.el (solitaire-mode):
+ * play/tetris.el (tetris-mode):
+ * progmodes/ada-mode.el (ada-mode):
+ * progmodes/antlr-mode.el (antlr-mode):
+ * progmodes/autoconf.el (autoconf-mode):
+ * progmodes/dcl-mode.el (dcl-mode):
+ * progmodes/delphi.el (delphi-mode):
+ * progmodes/ebrowse.el (ebrowse-tree-mode)
+ (ebrowse-electric-list-mode, ebrowse-member-mode)
+ (ebrowse-electric-position-mode):
+ * progmodes/f90.el (f90-mode):
+ * progmodes/fortran.el (fortran-mode):
+ * progmodes/icon.el (icon-mode):
+ * progmodes/idlw-help.el (idlwave-help-mode):
+ * progmodes/idlw-shell.el (idlwave-shell-mode):
+ * progmodes/idlwave.el (idlwave-mode):
+ * progmodes/inf-lisp.el (inferior-lisp-mode):
+ * progmodes/m4-mode.el (m4-mode):
+ * progmodes/meta-mode.el (metafont-mode, metapost-mode):
+ * progmodes/modula2.el (modula-2-mode):
+ * progmodes/octave-inf.el (inferior-octave-mode):
+ * progmodes/octave-mod.el (octave-mode):
+ * progmodes/pascal.el (pascal-mode):
+ * progmodes/sh-script.el (sh-mode):
+ * progmodes/sql.el (sql-mode, sql-interactive-mode):
+ * progmodes/vhdl-mode.el (vhdl-mode):
+ * progmodes/xscheme.el (scheme-interaction-mode):
+ * replace.el (occur-mode):
+ * ses.el (ses-mode):
+ * simple.el (completion-list-mode):
+ * skeleton.el:
+ * speedbar.el (speedbar-mode):
+ * term.el (term-mode):
+ * terminal.el (terminal-edit-mode):
+ * textmodes/reftex-index.el (reftex-index-mode)
+ (reftex-index-phrases-mode):
+ * textmodes/reftex-sel.el (reftex-select-label-mode)
+ (reftex-select-bib-mode):
+ * textmodes/reftex-toc.el (reftex-toc-mode):
+ * wdired.el (wdired-change-to-wdired-mode):
+ * wid-browse.el (widget-browse-mode):
+ Use run-mode-hooks.
+
+ * array.el (array-mode):
+ * calendar/todo-mode.el (todo-mode):
+ * man.el (Man-mode):
+ * play/landmark.el (lm-mode):
+ * play/mpuz.el (mpuz-mode):
+ Use kill-all-local-variables and run-mode-hooks.
+
+ * subr.el (delay-mode-hooks): Specify indentation.
+
+2005-05-26 Mark A. Hershberger <mah@everybody.org>
+
+ * xml.el (xml-substitute-special): Don't die for undefined xml
+ entities.
+
+2005-05-26 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-prog.el (calc-user-define-edit): Don't find substring
+ of nil.
+
+2005-05-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-frame-address):
+ Rename from gdb-current-address.
+ (gdb-previous-frame-address): Rename from gdb-previous-address.
+ (gdb-selected-frame): Rename from gdb-current-frame.
+ (gdb-get-selected-frame): Rename from gdb-get-current-frame.
+ (gdb-frame-number): Rename from gdb-current-stack-level.
+ (gdb-ann3): Match new mode-name for disassembly buffer.
+ Extend initialization of variables.
+ (gdb-post-prompt): Update disassembly from gdb-frame-handler.
+ (gdb-memory-mode): Use mouse-face in header line.
+ (gdb-assembler-buffer-name): Call it disassembly and give frame
+ in mode line.
+ (gdb-source-spec-regexp, gdb-assembler-custom)
+ (gdb-invalidate-assembler, gdb-frame-handler):
+ Make robust to leading zeroes in address format.
+
+2005-05-26 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-mode): Use `define-derived-mode' to
+ define `org-mode'.
+ (org-agenda-mode): Use `run-mode-hooks' instead of `run-hooks'.
+
+2005-05-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * log-edit.el (log-edit-changelog-entries): Distinguish between
+ filenames like xfns.c and fns.c.
+
+2005-05-25 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buff-menu.el (Buffer-menu-revert-function): Improve handling of
+ point after reverting.
+ (Buffer-menu-make-sort-button): Handle the case where
+ `Buffer-menu-use-header-line' is nil.
+
+2005-05-25 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * vms-patch.el (vms-magic-right-square-brace, vms-magic-colon):
+ New funcs. In minibuffer-local-completion-map bind `]', `/'
+ and `:' to them.
+
+2005-05-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * startup.el (normal-top-level): Allow modification of load-path while
+ we're iterating over it.
+
+2005-05-25 Juanma Barranquero <lekktu@gmail.com>
+
+ * thumbs.el (thumbs-thumbsdir-max-size, thumbs-temp-file)
+ (thumbs-cleanup-thumbsdir, thumbs-call-convert)
+ (thumbs-resize-interactive, thumbs-insert-image)
+ (thumbs-insert-thumb, thumbs-dired-show-marked)
+ (thumbs-find-image-at-point, thumbs-delete-images)
+ (thumbs-rename-images, thumbs-next-image, thumbs-dired-setroot)
+ (thumbs-increment-image-size, thumbs-decrement-image-size):
+ Fix typos in docstrings.
+
+2005-05-24 Andre Spiegel <spiegel@gnu.org>
+
+ * progmodes/cperl-mode.el (cperl-vc-header-alist): Obsolete.
+ (cperl-vc-rcs-header, cperl-vc-sccs-header): New user options.
+ (cperl-mode): Use them.
+
+2005-05-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.el (quit-window, shrink-window-if-larger-than-buffer):
+ Doc fixes.
+
+2005-05-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-inferior-io-mode-map):
+ Bind C-d to gdb-inferior-io-eof.
+
+ * dired.el (dired-dnd-popup-notice): Use message-box.
+
+2005-05-23 Masatake YAMATO <jet@gyve.org>
+
+ * bindings.el (mode-line-major-mode-keymap):
+ Bind [mode-line down-mouse-1] to `mouse-major-mode-menu'.
+
+ * faces.el (mode-line-highlight): New face.
+
+ * ruler-mode.el (ruler-mode-ruler): Use mode-line-highlight
+ as mouse-face.
+
+ * bindings.el (top-level, help-echo, mode-line-modified)
+ (mode-line-mule-info, mode-line-eol-desc): Use mode-line-highlight
+ as mouse-face.
+
+2005-05-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax):
+ Remove spurious call to `zerop'.
+
+ * emacs-lisp/cl.el (acons, pairlis): Add docstring.
+
+2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
+
+ CC Mode update to 5.30.10:
+
+ * progmodes/cc-fonts.el (c-font-lock-declarators): Fix bug where
+ the point could go past the limit in decoration level 2, thereby
+ causing errors during interactive fontification.
+
+ * progmodes/cc-mode.el (c-make-inherited-keymap): Fix cc-bytecomp
+ bug when the file is evaluated interactively.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Handle operator
+ declarations somewhat better in C++.
+
+ * progmodes/cc-styles.el, cc-mode.el (c-run-mode-hooks):
+ New helper macro to make use of `run-mode-hooks'
+ which has been added in Emacs 21.1.
+ (c-mode, c++-mode, objc-mode, java-mode, idl-mode, pike-mode)
+ (awk-mode): Use it.
+ (make-local-hook): Suppress warning about obsoleteness.
+
+ * progmodes/cc-engine.el, cc-align.el, cc-cmds.el
+ (c-append-backslashes-forward, c-delete-backslashes-forward)
+ (c-find-decl-spots, c-semi&comma-no-newlines-before-nonblanks):
+ Compensate for return value from `forward-line' when it has moved
+ but not to a different line due to eob.
+
+ * progmodes/cc-engine.el (c-guess-basic-syntax): Fix anchoring in
+ `objc-method-intro' and `objc-method-args-cont'.
+
+2005-05-23 Alan Mackenzie <bug-cc-mode@gnu.org>
+
+ CC Mode update to 5.30.10:
+
+ * progmodes/cc-mode.el, cc-engine.el, cc-align.el: Change the FSF's
+ address in the copyright statement. Incidentally, change "along with
+ GNU Emacs" to "along with this program" where it occurs.
+
+ * progmodes/cc-mode.el: Add a fourth parameter `t' to the awk-mode
+ autoload, so that it is interactive, hence can be found by M-x awk-mode
+ whilst cc-mode is yet to be loaded. Reported by Glenn Morris
+ <gmorris+emacs@ast.cam.ac.uk>.
+
+ * progmodes/cc-awk.el: Add character classes (e.g. "[:alpha:]") into AWK
+ Mode's regexps.
+
+2005-05-23 Kevin Ryde <user42@zip.com.au>
+
+ * progmodes/cc-align.el (c-lineup-argcont): Ignore conses for {} pairs
+ from c-parse-state, to avoid a lisp error (on bad code).
+
+2005-05-23 Lute Kamstra <lute@gnu.org>
+
+ * subr.el (font-lock-defaults): Remove defvar as it's already
+ defined in font-core.el.
+
+ * font-lock.el (font-lock-beginning-of-syntax-function): Fix docstring.
+
+2005-05-23 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-locals-handler): Make regexps
+ more general and work when GDB variable "print pretty" is on,
+ as with Emacs, for example.
+
+2005-05-22 Luc Teirlinck <teirllm@auburn.edu>
+
+ * font-core.el: Update comment.
+
+ * emacs-lisp/easy-mmode.el (define-global-minor-mode):
+ Use `after-change-major-mode-hook' instead of `find-file-hook'.
+
+ * buff-menu.el (Buffer-menu-mode): Use `run-mode-hooks'.
+
+2005-05-22 Eli Zaretskii <eliz@gnu.org>
+
+ * simple.el (yank, yank-pop): Mention `yank-excluded-properties'
+ and `yank-handler' in the doc strings.
+
+2005-05-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/cl.el (eql): Remove. It's a builtin already.
+
+2005-05-22 Richard M. Stallman <rms@gnu.org>
+
+ * help.el (describe-key): Move print-help-return-message call
+ out of conditional.
+
+ * progmodes/etags.el (list-tags): Use with-no-warnings.
+
+ * mail/smtpmail.el (smtpmail-open-stream): Use with-no-warnings.
+ (smtpmail-send-queued-mail): Avoid beginning-of-buffer.
+ (starttls-extra-args, starttls-extra-arguments): Add defvars.
+
+ * mail/mailalias.el (mail-get-names): Avoid beginning-of-buffer.
+
+ * language/viet-util.el (viet-viscii-nonascii-translation-table):
+ Add defvar.
+
+ * emulation/viper-ex.el (viper-ex-work-buf, viper-ex-print-buf):
+ Use defvar, not defconst.
+
+ * hexl.el (hexl-follow-line): Use with-no-warnings.
+
+ * emulation/tpu-extras.el: Use write-file-functions instead of
+ write-file-hooks.
+
+ * dired.el (dired-font-lock-keywords): Fontify files with junk
+ extensions even if marked by -F.
+
+2005-05-22 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/cl.el (pushnew, cl-macroexpand, floatp-safe, plusp)
+ (minusp, oddp, evenp, mapcar*, list*, copy-list, adjoin, subst):
+ * emacs-lisp/cl-extra.el (coerce, map, maplist, cl-mapc, mapl)
+ (mapcan, mapcon, some, every, notany, notevery, signum, isqrt)
+ (concatenate, list-length, get*, getf, cl-remprop):
+ * emacs-lisp/cl-macs.el (function*, case, ecase, typecase)
+ (etypecase, progv, lexical-let, lexical-let*)
+ (multiple-value-bind, multiple-value-setq, shiftf):
+ Improve argument/docstring consistency.
+
+ * subr.el (focus-frame, unfocus-frame): Revert deletion on 2005-05-01.
+
+2005-05-22 Andre Spiegel <spiegel@gnu.org>
+
+ * vc-cvs.el (vc-cvs-checkout-model): Handle the case where FILE
+ doesn't exist.
+
+ * vc.el (vc-trunk-p): Add autoload cookie. The function is used in
+ vc-rcs.el when vc-mistrust-permissions is t, which is not the default.
+
+2005-05-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * emacs-lisp/bytecomp.el: Remove make-obsolete-variable for
+ already deleted variables: auto-fill-hook, blink-paren-hook,
+ lisp-indent-hook, inhibit-local-variables, unread-command-event,
+ suspend-hooks, comment-indent-hook, meta-flag,
+ before-change-function, after-change-function,
+ font-lock-doc-string-face.
+
+2005-05-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/derived.el (define-derived-mode): Doc fix.
+
+2005-05-21 Eli Zaretskii <eliz@gnu.org>
+
+ * mail/rmail.el (rmail-reply): Filter the list in reply-to through
+ rmail-dont-reply-to.
+
+2005-05-21 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
+
+ * mail/sendmail.el (mail-send): Use [[:space:]] instead of a
+ literal blank when splitting new-header-values.
+
+2005-05-21 Matt Hodges <MPHodges@member.fsf.org>
+
+ * calendar/cal-menu.el (cal-menu-update): Add separator as a
+ string so that tmm doesn't create a completion entry for it.
+
+ * textmodes/table.el (table-disable-menu): Ditto.
+
+2005-05-21 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/idlwave.el (idlwave-doc-header): Use insert-file-contents.
+
+ * progmodes/flymake.el (flymake-makehash): Use with-no-warnings.
+
+ * net/rcompile.el (remote-compile): Use compilation-start.
+
+ * tmm.el (tmm-shortcut): Avoid using beginning-of-buffer.
+
+2005-05-21 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * files.el (auto-mode-alist): Check GNUmakefile before makefile.
+ Default to makefile-bsdmake-mode on BSD systems.
+
+ * imenu.el (imenu-generic-expression, imenu--generic-function'):
+ REGEXP may also be a search function now. The part of doc-string
+ for describing the structure was 95% identical to that of
+ `imenu--generic-function'. Unify it there.
+
+ * progmodes/make-mode.el (makefile-imenu-generic-expression):
+ Use function to find dependencies, because regexp alone is so complex,
+ it easily goes into an endless loop.
+ (makefile-makepp-mode): Also add submenu for Perl functions
+ defined in the makefile.
+ (makefile-bsdmake-mode): Special imenu-generic-expression no
+ longer needed, due to function call.
+ (makefile-match-dependency): Take BOUND into account when checking
+ if we're through.
+
+2005-05-20 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-units.el (calc-invalidate-units-table):
+ Use inhibit-read-only.
+ (math-build-units-table-buffer): Use view-mode.
+
+2005-05-20 David Kastrup <dak@gnu.org>
+
+ * emacs-lisp/easymenu.el (easy-menu-add): Correct docstring since
+ easy-menu-add is not a nop on Emacs; and clarify when to call it.
+
+2005-05-20 Lute Kamstra <lute@gnu.org>
+
+ * diff-mode.el (diff-header-face, diff-file-header-face)
+ (diff-index-face, diff-hunk-header-face, diff-removed-face)
+ (diff-added-face, diff-changed-face, diff-function-face)
+ (diff-context-face, diff-nonexistent-face): Put them in the
+ diff-mode customization group.
+
+2005-05-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/vhdl-mode.el (vhdl-font-lock-match-item): Simplify regexp.
+
+ * progmodes/sh-script.el (sh-mode, sh-get-word): Minor regexp fixes.
+
+ * font-lock.el (lisp-font-lock-keywords-2): Don't error.
+ Minor regexp-optimization.
+
+2005-05-20 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-toggle-time-grid): New command.
+ (org-agenda-use-time-grid, org-agenda-time-grid): New options.
+ (org-agenda-add-time-grid-maybe): New function.
+ (org-agenda): Call `org-agenda-add-time-grid-maybe'.
+ (org-table-create): `dotimes' instead of `mapcar'.
+ (org-xor): Simplify implementation.
+ (org-agenda): `inhibit-redisplay' turned on.
+ (org-agenda-change-all-lines): Use `org-format-agenda-item' to get
+ a consistent line after a state change.
+ (org-agenda-remove-times-when-in-prefix): New option.
+ (org-prefix-has-time): New variable.
+ (org-parse-time-string): Optional argument NODEFAULT.
+ (org-format-agenda-item): Parse items for time-of-day
+ specifications and move these into the prefix if possible.
+ (org-agenda-priority): Get current heading, not previous heading
+ during agenda remote editing.
+
+2005-05-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/cl-seq.el (reduce, fill, replace, remove*)
+ (remove-if, remove-if-not, delete*, delete-if, delete-if-not)
+ (remove-duplicates, delete-duplicates, substitute)
+ (substitute-if, substitute-if-not, nsubstitute, nsubstitute-if)
+ (nsubstitute-if-not, find, find-if, find-if-not, position)
+ (position-if, position-if-not, count, count-if, count-if-not)
+ (mismatch, search, sort*, stable-sort, merge, member*)
+ (member-if, member-if-not, assoc*, assoc-if, assoc-if-not)
+ (rassoc*, rassoc-if, rassoc-if-not, union, nunion)
+ (intersection, nintersection, set-difference, nset-difference)
+ (set-exclusive-or, nset-exclusive-or, subsetp, subst-if)
+ (subst-if-not, nsubst, nsubst-if, nsubst-if-not, sublis)
+ (nsublis, tree-equal): Improve argument/docstring consistency.
+
+ * subr.el (send-string, send-region): Remove obsolescence declaration.
+ (window-dot, set-window-dot, read-input, show-buffer)
+ (eval-current-buffer, string-to-int):
+ Add release number to obsolescence declarations.
+
+2005-05-19 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-magic-forward-char): Enter ido-find-file at end of input.
+ (ido-magic-backward-char): Enter ido-switch-buffer at start of input.
+
+2005-05-20 Matt Hodges <MPHodges@member.fsf.org>
+
+ * faces.el (list-faces-display): Make back button respect optional
+ regexp arg.
+
+2005-05-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * calculator.el (calculator-radix-grouping-mode)
+ (calculator-radix-grouping-digits, calculator-displayer)
+ (calculator-radix-grouping-separator, calculator-copy-displayer):
+ * dabbrev.el (dabbrev-search-these-buffers-only):
+ * diff-mode.el (diff-jump-to-old-file, diff-update-on-the-fly)
+ (diff-advance-after-apply-hunk, diff-mode-hook)
+ (diff-minor-mode-prefix):
+ * imenu.el (imenu-use-popup-menu):
+ * jit-lock.el (jit-lock-context-time):
+ * newcomment.el (comment-fill-column, comment-column)
+ (comment-style, comment-padding, comment-multi-line)
+ (comment-empty-lines, comment-auto-fill-only-comments):
+ * reveal.el (reveal-around-mark):
+ * uniquify.el (uniquify-buffer-name-style)
+ (uniquify-after-kill-buffer-p)
+ (uniquify-ask-about-buffer-names-p, uniquify-ignore-buffers-re)
+ (uniquify-min-dir-content, uniquify-separator)
+ (uniquify-trailing-separator-p, uniquify-strip-common-suffix):
+ * w32-vars.el (w32-fixed-font-alist):
+ * emacs-lisp/testcover.el (testcover-potentially-1value-functions):
+ * obsolete/rsz-mini.el (resize-minibuffer-frame-max-height):
+ * progmodes/antlr-mode.el (antlr-font-lock-maximum-decoration):
+ * progmodes/perl-mode.el (perl-indent-level)
+ (perl-continued-statement-offset, perl-continued-brace-offset)
+ (perl-brace-offset, perl-brace-imaginary-offset)
+ (perl-label-offset, perl-indent-continued-arguments)
+ (perl-tab-always-indent, perl-tab-to-comment, perl-nochange):
+ * progmodes/tcl.el (tcl-indent-level)
+ (tcl-continued-indent-level, tcl-auto-newline)
+ (tcl-tab-always-indent, tcl-electric-hash-style)
+ (tcl-help-directory-list, tcl-use-smart-word-finder)
+ (tcl-application, tcl-command-switches, tcl-prompt-regexp)
+ (inferior-tcl-source-command):
+ * textmodes/fill.el (enable-kinsoku):
+ * textmodes/reftex-vars.el (reftex-index-phrases-wrap-long-lines):
+ * textmodes/table.el (table-yank-handler):
+ Specify missing group (and type, if simple) in defcustom.
+
+2005-05-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/compile.el (compilation-finish-function): Fix defvar.
+
+2005-05-19 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/make-mode.el (makefile-mode): Use run-mode-hooks.
+
+ * subr.el (event-basic-type): Don't get an error.
+ (left-fringe-p): Function deleted.
+
+ * buff-menu.el (Buffer-menu-buffer-face): In group Buffer-menu.
+ (list-buffers-noselect): Set `font-lock-face' property, not `face'.
+
+ * dired-aux.el (dired-copy-file-recursive): Handle symlinks
+ in recursive copy.
+
+ * frame.el (show-trailing-whitespace): In group `whitespace-faces'.
+
+ * emacs-lisp/byte-run.el (eval-when-compile): Doc fix.
+
+ * emacs-lisp/bytecomp.el
+ (byte-compile-file-form-custom-declare-variable):
+ Call byte-compile-nogroup-warn if appropriate.
+
+ * progmodes/compile.el (compilation-finish-function): Mark obsolete.
+ (compilation-set-window): Don't call left-fringe-p; do it directly.
+
+2005-05-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-graph.el (calc-graph-format-data): Make sure
+ var-PlotRejects is bound before trying to check its value.
+
+2005-05-19 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex.el (reftex-isearch-minor-mode): Move the
+ definition of this variable from reftex-global.el to reftex.el,
+ because it is needed in the menu.
+
+2005-05-19 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/copyright.el (copyright-fix-years): Make sure all
+ years are fixed. Don't insert a space after a dash.
+
+2005-05-19 Kim F. Storm <storm@cua.dk>
+
+ * emulation/crisp.el (crisp-home, crisp-end): Put CUA property.
+
+2005-05-19 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * font-lock.el (lisp-font-lock-keywords-2): Do \\) only in
+ strings, because (eq ... ?\\) is fairly frequent.
+
+ * progmodes/make-mode.el (makefile-add-this-line-targets):
+ Simplify and integrate into `makefile-pickup-targets'.
+ (makefile-add-this-line-macro): Simplify and integrate into
+ `makefile-pickup-macros'.
+ (makefile-pickup-filenames-as-targets): Simplify.
+ (makefile-previous-dependency, makefile-match-dependency):
+ Don't stumble over `::'.
+
+2005-05-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * subr.el (post-command-idle-hook, post-command-idle-delay):
+ Remove obsoletion of post-command-idle-hook and
+ post-command-idle-delay.
+
+ * faces.el (list-faces-display): Provide button when describe-face
+ is called to take user back to the list of faces.
+
+ * help-fns.el (describe-variable): Remove hyperlinks in a
+ variable's value as these are quite frequently inappropriate.
+
+ * follow.el (follow-submit-feedback, follow-mode):
+ Remove references to post-command-idle-hook.
+
+2005-05-18 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-previous-dependency)
+ (makefile-match-dependency): Check for := (and in bsd mode also
+ !=) to give a better result, even when font-lock is not on.
+
+2005-05-18 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-help.el (calc-s-prefix-help):
+ Add `calc-copy-special-constant' to help string.
+
+2005-05-18 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/eldoc.el (eldoc-mode): Doc fix.
+
+2005-05-18 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-poly.el (math-factor-poly-coefs): Make sure the terms
+ in linear factors are in proper order.
+
+2005-05-18 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-vars.el (reftex-cite-format-builtin):
+ Support for jurabib.
+
+ * textmodes/reftex.el (featurep): Define aliases for overlay
+ commands, for XEmacs compatibility, and use these aliases in
+ overlay initializations.
+ (reftex-highlight): Use `reftex-move-overlay'.
+ (reftex-unhighlight): Use `reftex-delete-overlay'.
+ (reftex-uniq): Function removed. Use `reftex-uniquify' instead.
+ (reftex-access-search-path): Use `reftex-uniquify' instead of
+ `reftex-uniq'.
+
+ * textmodes/reftex-sel.el (reftex-select-unmark): Overlay
+ `before-string' property modification enables for Emacs as well.
+ (reftex-select-item): Use `reftex-delete-overlay'.
+ (reftex-select-mark): Use `reftex-make-overlay' and
+ `reftex-overlay-put'.
+ (reftex-select-unmark): Use `reftex-delete-overlay' and
+ `reftex-overlay-put'.
+
+2005-05-18 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/lisp.el (check-parens): Fix docstring.
+
+2005-05-18 Juanma Barranquero <lekktu@gmail.com>
+
+ * add-log.el (add-change-log-entry):
+ * array.el (array-make-template, array-reconfigure-rows)
+ (array-init-max-row, array-init-max-column)
+ (array-init-columns-per-line, array-init-field-width):
+ * replace.el (replace-match-maybe-edit, perform-replace):
+ * textmodes/spell.el (spell-region):
+ Replace `read-input' by `read-string'.
+
+ * forms.el (forms-mode):
+ * finder.el (finder-compile-keywords):
+ * shadowfile.el (shadow-read-files):
+ Replace `eval-current-buffer' by `eval-buffer'.
+
+ * terminal.el (te-pass-through):
+ * net/ange-ftp.el (ange-ftp-process-filter, ange-ftp-gwp-filter)
+ (ange-ftp-raw-send-cmd):
+ * net/telnet.el (telnet-interrupt-subjob, telnet-c-z)
+ (send-process-next-char, telnet-initial-filter, telnet):
+ Replace `send-string' by `process-send-string'.
+
+ * progmodes/prolog.el (inferior-prolog-mode): Doc fix.
+ (prolog-consult-region): Replace `send-string' by
+ `process-send-string'; replace `send-region' by `process-send-region'.
+
+ * progmodes/delphi.el (delphi-log-msg):
+ Replace `set-window-dot' by `set-window-point'.
+
+ * subr.el (window-dot, set-window-dot, read-input, send-string)
+ (send-region, show-buffer, eval-current-buffer):
+ Make really obsolete, as the comment says.
+
+2005-05-17 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-use-hyper-key): Doc fix.
+ (cua--init-keymaps): Bind C-return instead of S-return to set
+ rectangle mark.
+
+ * emulation/cua-rect.el (cua--init-rectangles): Bind C-return
+ instead of S-return to toggle/clear rectangle mark.
+
+2005-05-17 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-dependency-skip): New variable.
+ (makefile-macroassign-regex, makefile-make-font-lock-keywords):
+ Also fontify plain strings assigned to variables, mostly so that a
+ colon has a face and is thus not taken as a dependency separator.
+ (makefile-previous-dependency): Inline the new matcher, because it
+ is too complex to work in both directions.
+ (makefile-match-dependency): Eliminate `backward' arg (see above).
+ Completely reimplemented so as to not sometimes go into an endless
+ loop. It should also be more efficient, because first it only
+ searches for `:', instead of applying the very complex regexp.
+ (makefile-mode): Cancel `font-lock-support-mode', because blocks
+ to be fontified in one piece can be too long for JIT.
+ Makefiles are never *that* big.
+
+2005-05-17 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * dired.el (dired-mode): Simplify.
+
+2005-05-17 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Don't generate a
+ defcustom for the mode hook variable.
+
+ * emacs-lisp/authors.el (authors): Do parse the ChangeLogs of the
+ Emacs Lisp Reference Manual.
+
+2005-05-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/cl.el (eql, floatp-safe, plusp, minusp, oddp)
+ (evenp, list*):
+ * emacs-lisp/cl-macs.el (macrolet, symbol-macrolet):
+ * emacs-lisp/cl-seq.el (subsetp, tree-equal): Doc fixes.
+
+ * net/tramp-smb.el (tramp-smb-open-connection):
+ Pass `tramp-chunksize' as fifth (required) argument.
+
+2005-05-16 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * font-lock.el (lisp-font-lock-keywords-1):
+ Set `font-lock-negation-char-face' for [^...] char group.
+ (lisp-font-lock-keywords-2): Highlight regexp's \\( \\| \\).
+
+ * progmodes/make-mode.el (makefile-dependency-regex): Turn it into
+ a var, and refine it to mask one more level of nested vars.
+ (makefile-rule-action-regex): Turn it into a var, and refine it so
+ it recognizes backslashed continuation lines as belonging to the
+ same command.
+ (makefile-macroassign-regex): Refine it so it recognizes
+ backslashed continuation lines as belonging to the same command.
+ (makefile-var-use-regex): Don't look at the next char, because it
+ might be the same one to be skipped by the initial [^$], leading
+ to an overlooked variable use.
+ (makefile-make-font-lock-keywords): Remove two parameters, which
+ are now variables that some of the modes set locally.
+ Handle dependency and rule action matching through functions, because
+ regexps alone match too often. Dependency matching now comes
+ last, so it can check, whether a colon already matched something else.
+ (makefile-mode): Inform that font-lock improves makefile parsing
+ capabilities.
+ (makefile-match-dependency, makefile-match-action): New functions.
+
+2005-05-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/cl-extra.el (equalp): Doc fix.
+
+ * align.el (align-regexp):
+ * ansi-color.el (ansi-color-get-face):
+ * array.el (array-reconfigure-rows, array-init-max-row)
+ (array-init-max-column, array-init-columns-per-line)
+ (array-init-field-width):
+ * dired-aux.el (dired-trample-file-versions):
+ * dired-x.el (dired-mark-sexp):
+ * ediff-diff.el (ediff-extract-diffs, ediff-get-diff3-group):
+ * edmacro.el (edmacro-finish-edit, edmacro-parse-keys):
+ * emerge.el (emerge-extract-diffs, emerge-get-diff3-group):
+ * faces.el (face-read-integer):
+ * files.el (backup-extract-version, insert-directory):
+ * hexl.el (hexl-insert-decimal-char):
+ * server.el (server-process-filter):
+ * shell.el (shell-extract-num):
+ * startup.el (command-line-1):
+ * term.el (term-command-hook):
+ * time-stamp.el (time-stamp, time-stamp-string-preprocess)
+ (time-stamp-do-number):
+ * time.el (display-time-update):
+ * timezone.el (timezone-parse-date, timezone-zone-to-minute)
+ (timezone-fix-time):
+ * vms-patch.el (vms-suspend-resume-hook):
+ * calendar/appt.el (appt-convert-time):
+ * calendar/cal-bahai.el (mark-bahai-diary-entries):
+ * calendar/cal-hebrew.el (mark-hebrew-diary-entries):
+ * calendar/cal-islam.el (mark-islamic-diary-entries):
+ * calendar/calendar.el (calendar-cursor-to-date)
+ (calendar-star-date):
+ * calendar/diary-lib.el (diary-attrtype-convert)
+ (mark-diary-entries, diary-entry-time):
+ * calendar/solar.el (solar-get-number):
+ * emacs-lisp/lisp-mnt.el (lm-last-modified-date):
+ * emacs-lisp/re-builder.el (reb-display-subexp):
+ * emulation/edt.el (edt-set-scroll-margins):
+ * emulation/tpu-extras.el (tpu-set-scroll-margins):
+ * emulation/vip.el (vip-get-ex-token, vip-get-ex-buffer)
+ (vip-get-ex-count):
+ * emulation/viper-ex.el (viper-get-ex-token)
+ (viper-get-ex-buffer, viper-get-ex-count, ex-next):
+ * international/fontset.el (fontset-plain-name):
+ * mail/feedmail.el (feedmail-look-at-queue-directory):
+ * mail/mailalias.el (mail-get-names):
+ * mail/rmail.el (rmail-convert-to-babyl-format):
+ * mail/rmailsum.el (rmail-make-basic-summary-line)
+ (rmail-summary-next-same-subject, rmail-summary-rmail-update)
+ (rmail-summary-goto-msg):
+ * mail/smtpmail.el (smtpmail-read-response):
+ * net/ange-ftp.el (ange-ftp-guess-hash-mark-size)
+ (ange-ftp-vms-add-file-entry):
+ * play/gametree.el (gametree-looking-at-ply)
+ (gametree-current-branch-score):
+ * progmodes/ada-xref.el (ada-prj-find-prj-file)
+ (ada-xref-find-in-modified-ali, ada-find-in-src-path):
+ * progmodes/cperl-mode.el (condition-case):
+ * progmodes/ebrowse.el (ebrowse-set-tree-indentation)
+ (ebrowse-set-member-buffer-column-width)
+ (ebrowse-select-1st-to-9nth):
+ * progmodes/etags.el (etags-snarf-tag):
+ * progmodes/flymake.el (flymake-parse-line):
+ * progmodes/idlw-shell.el (idlwave-shell-parse-line)
+ (idlwave-shell-filter-bp, idlwave-shell-goto-next-error)
+ (idlwave-shell-menu-def):
+ * progmodes/ps-mode.el (ps-run-goto-error):
+ * progmodes/vhdl-mode.el (vhdl-read-offset, vhdl-load-cache)
+ (vhdl-speedbar-contract-level):
+ * term/mac-win.el (x-handle-numeric-switch):
+ * term/sun-mouse.el (sun-get-frame-data):
+ * term/w32-win.el (x-handle-numeric-switch):
+ * term/x-win.el (x-handle-numeric-switch):
+ * textmodes/ispell.el (ispell-parse-output):
+ * textmodes/nroff-mode.el (nroff-outline-level):
+ * textmodes/reftex-cite.el (reftex-bib-sort-year)
+ (reftex-bib-sort-year-reverse, reftex-format-citation):
+ * textmodes/reftex-parse.el (reftex-init-section-numbers)
+ (reftex-section-number):
+ * textmodes/texinfmt.el (texinfo-paragraphindent):
+ Replace `string-to-int' by `string-to-number'.
+
+ * international/latexenc.el: Add page marker to force the "Local
+ Variables:" string out of the last page.
+
+2005-05-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-tooltip-mode): Add gud prefix to
+ tooltip-change-major-mode.
+ (gud-tooltip-print-command): Remove case where gud-minor-mode
+ is gdb ("--fullname").
+ (gud-tooltip-tips): Turn GUD tooltips off for this case and
+ explain to user.
+
+2005-05-16 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-store.el (calc-copy-special-constant): New function.
+
+ * calc/calc-ext.el (calc-init-extensions): Add binding for
+ `calc-copy-special-constant'.
+
+ * calc/calc-prog.el (calc-edit-format-macro-buffer): Add a case
+ for the `calc-copy-special-constant' command.
+
+2005-05-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * subr.el (left-fringe-p): New function.
+
+ * progmodes/compile.el (compilation-setup): Set local value of
+ overlay-arrow-string to "" always.
+ (compilation-set-window): Left fringe then don't scroll.
+ No left fringe then no arrow and scroll message to top.
+ (compilation-context-lines): Adjust doc string accordingly.
+
+2005-05-16 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-magic-forward-char, ido-magic-backward-char)
+ (ido-magic-delete-char): New commands for C-f, C-b, C-d.
+ (ido-wide-find-dir-or-delete-dir): New command for M-d.
+ (ido-define-mode-map): Bind them. Add C-x prefix to fallback commands.
+ (ido-read-file-name): Handle commands with ido property value
+ equal to find-file as reading a file name, to allow C-d to enter dired.
+ (ibuffer-find-file): Add ido property with value find-file.
+
+2005-05-15 Kim F. Storm <storm@cua.dk>
+
+ * subr.el (open-network-stream-nowait): Remove.
+ (open-network-stream-server): Remove.
+
+2005-05-15 Richard M. Stallman <rms@gnu.org>
+
+ * faces.el (describe-face): Output a definition link button.
+
+ * help-mode.el (help-face-def): New button type.
+
+ * emacs-lisp/copyright.el (copyright-fix-years):
+ Match properly if the first year is 2-digit.
+ Don't mess up the whitespace after the years by filling.
+
+ * dired-aux.el (dired-mark-confirm):
+ Pass t to dired-get-marked-files for DISTINGUISH-ONE-MARKED.
+
+ * dired.el (dired-map-over-marks): New arg DISTINGUISH-ONE-MARKED.
+ (dired-get-marked-files): New arg DISTINGUISH-ONE-MARKED.
+ (dired-mark-pop-up): Handle FILES = (t FILE) specially.
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-variables):
+ Set font-lock-comment-start-skip.
+
+ * font-lock.el (font-lock-comment-start-skip): New variable.
+ (font-lock-comment-end-skip): New variable.
+ (font-lock-fontify-syntactically-region): Use them if non-nil.
+
+2005-05-15 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-store.el (calc-store-value): Return a string rather
+ than display it as a message.
+ Use calc-var-name for variable name.
+ (calc-store-into): Add the result of calc-store-value to message.
+ (calc-copy-variable): Add a message.
+ (calc-store-exchange): Improve error messages.
+ (calc-store-binary, calc-store-map): Don't reset the values of
+ special constants.
+
+2005-05-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/derived.el (define-derived-mode): Add link to Elisp
+ manual to docstring.
+
+ * files.el (hack-local-variables-confirm): Add STRING argument.
+ Make the function handle non file visiting buffers correctly.
+ (hack-local-variables-prop-line, hack-local-variables)
+ (hack-one-local-variable): Use STRING arg of
+ `hack-local-variables-confirm'.
+
+2005-05-14 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.49.
+
+ * net/tramp.el (tramp-handle-dired-call-process)
+ (tramp-handle-insert-directory):`insert-buffer' cannot be used
+ because the contents of the Tramp buffer is changed before
+ insertion (`expand-file' and alike).
+ (tramp-handle-insert-directory): If `localname' has an empty
+ nondirectory name, it must not be quoted.
+ (tramp-pre-connection): Add parameter CHUNKSIZE. Make local
+ variable `tramp-chunksize'. Change callees.
+ (tramp-open-connection-setup-interactive-shell): Check remote host
+ for buggy `send-process-string' implementation.
+ Set `tramp-chunksize' if found. Reported by Michael Kifer
+ <kifer@cs.sunysb.edu> (and a lot of other people all the years).
+ (tramp-handle-shell-command): `insert-buffer' cannot be used
+ because the contents of the Tramp buffer is changed before
+ insertion (`expand-file' and alike). Reported by Fr,Ai(Bd,Ai(Bric Bothamy
+ <frederic.bothamy@free.fr>.
+ (tramp-set-auto-save): Actions should be done for Tramp file name
+ handler only. Ange-FTP has its own auto-save mechanism.
+ Reported by Richard G. Bielawski <Richard.G.Bielawski@wellsfargo.com>.
+ (tramp-set-auto-save-file-modes): Set file modes of
+ `buffer-auto-save-file-name' to ?\600 as fallback solution.
+ Reported by Ferenc Wagner <wferi@tba.elte.hu>.
+ (tramp-bug): Remove obsolete variable.
+ (tramp-append-tramp-buffers): Rewrite partly. More suitable check
+ for presence of `mml-mode'. Make it running for older Emacsen as well.
+
+2005-05-14 John Paul Wallington <jpw@pobox.com>
+
+ * ibuf-ext.el (define-ibuffer-filter filename):
+ If `dired-directory' is a list, use its car.
+
+2005-05-14 Daniel Brockman <daniel@brockman.se> (tiny change)
+
+ * ibuffer.el (define-ibuffer-column filename):
+ If `dired-directory' is a list, use its car.
+
+2005-05-14 Richard M. Stallman <rms@gnu.org>
+
+ * subr.el (symbol-file): Doc fix.
+
+ * emacs-lisp/bytecomp.el (byte-compile-nogroup-warn): New function.
+ (byte-compile-form): Call byte-compile-nogroup-warn.
+ (byte-compile-warning-types): Doc fix.
+
+ * eshell/esh-mode.el (eshell-find-tag): Use with-no-warnings.
+
+ * progmodes/cc-engine.el (c-literal-faces):
+ Add font-lock-comment-delimiter-face.
+
+ * net/net-utils.el (dig): Use with-no-warnings.
+
+ * mail/supercite.el (sc-cite-frame-alist, sc-uncite-frame-alist)
+ (sc-recite-frame-alist, sc-default-cite-frame)
+ (sc-default-uncite-frame, sc-default-recite-frame)
+ (sc-attrib-selection-list, sc-rewrite-header-list):
+ Mark as risky-local-variable.
+
+ * international/ogonek.el (ogonek-jak, ogonek-how):
+ Don't use beginning-of-buffer.
+
+ * emacs-lisp/eldoc.el (eldoc-documentation-function): Add autoload.
+
+ * calendar/solar.el (solar-data-list): Move definition up.
+
+ * dnd.el (dnd-protocol-alist): Add autoload.
+
+ * progmodes/sh-script.el: Many doc usage fixes.
+ (sh-indent-after-do): Change default to match common styles.
+
+2005-05-13 Luc Teirlinck <teirllm@auburn.edu>
+
+ * files.el (interpreter-mode-alist)
+ (auto-mode-interpreter-regexp): Doc fixes.
+
+2005-05-13 Matt Hodges <MPHodges@member.fsf.org>
+
+ * tmm.el (tmm-get-keymap): Include only active menus and menu items.
+
+ * emacs-lisp/easymenu.el (easy-menu-define): Doc fixes.
+
+2005-05-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * dired.el (dired-mode): make-variable-buffer-local =>
+ make-local-variable.
+
+2005-05-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-select-convert-to-string): Try coding
+ systems in mac-script-code-coding-systems if specified one cannot
+ encode string for `com.apple.traditional-mac-plain-text'.
+
+2005-05-13 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * progmodes/make-mode.el (makefile-targets-face)
+ (makefile-shell-face, makefile-makepp-perl-face): New faces.
+ (makefile-dependency-regex): Fix it to not make the colon in
+ $(var:a=b) special.
+ (makefile-rule-action-regex): New regexp for highlighting embedded
+ Shell strings.
+ (makefile-macroassign-regex): Handle != for highlighting as
+ embedded Shell strings.
+ (makefile-var-use-regex): New const.
+ (makefile-statements, makefile-automake-statements)
+ (makefile-gmake-statements, makefile-makepp-statements)
+ (makefile-bsdmake-statements): New consts.
+ (makefile-make-font-lock-keywords): New function.
+ (makefile-automake-font-lock-keywords)
+ (makefile-gmake-font-lock-keywords)
+ (makefile-makepp-font-lock-keywords)
+ (makefile-bsdmake-font-lock-keywords): New consts.
+ (makefile-mode-map): Add switchers between the various submodes.
+ (makefile-mode): Document the availability of the variants.
+ (makefile-automake-mode, makefile-gmake-mode)
+ (makefile-makepp-mode, makefile-bsdmake-mode): New derived modes.
+
+ * files.el (auto-mode-alist, interpreter-mode-alist): Set up the
+ new variants of makefile-mode.
+
+2005-05-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-comment-delimiter-face): Fix up
+ the inheritance.
+
+2005-05-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/inf-lisp.el (inferior-lisp-mode-hook)
+ (inferior-lisp-load-hook): Convert defcustoms back to defvars.
+
+ * files.el (normal-mode): Extend the scope of the
+ `enable-local-variables' binding to include the `set-auto-mode' call.
+ (magic-mode-alist): Doc fix.
+
+2005-05-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-comment-delimiter-face): Inherit from
+ font-lock-comment-face rather than copying its setting.
+
+2005-05-12 Andreas Schwab <schwab@suse.de>
+
+ * eshell/esh-mode.el (eshell-send-input): Doc fix.
+
+2005-05-12 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/generic.el (define-generic-mode): Don't generate a
+ defcustom for the mode hook variable. Delete the last argument.
+ * generic-x.el: Fix callers of define-generic-mode.
+ (generic-x-modes): Delete group.
+ (show-tabs-tab-face, show-tabs-space-face): Put them in the
+ generic-x customization group.
+
+2005-05-12 Kim F. Storm <storm@cua.dk>
+
+ * font-lock.el (font-lock-negation-char-face): Default to "off".
+
+ * progmodes/cc-fonts.el (c-basic-matchers-before): Don't apply
+ font-lock-negation-char-face to ! in !=.
+
+2005-05-12 Masatake YAMATO <jet@gyve.org>
+
+ * add-log.el (find-change-log): Fix typos in the docstring
+ of function.
+
+2005-05-11 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Avoid `re-search-forward' when looking for input encoding because
+ of speed and safety. Better regular expressions for recognizing
+ input encoding. Limit a search for TeX-master/tex-main-file to
+ the local variable section.
+
+2005-05-11 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/sh-script.el (sh-mode-default-syntax-table): Set the
+ syntax of $ to "'" (quote).
+
+2005-05-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * dnd.el (dnd-protocol-alist): Improve custom type.
+
+ * dired.el (dired-dnd-protocol-alist): New variable.
+ (dired-mode): Use `dired-dnd-protocol-alist'. Move call of
+ `dired-mode-hook' to the end.
+
+2005-05-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-lock.el (font-lock-fontify-syntactically-region): Don't use
+ comment-end if comment-start-skip is not set.
+ Obey the font-lock-comment-delimiter-face variables.
+
+2005-05-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (executable-find): Move from executable.el. Use
+ locate-file.
+ * progmodes/executable.el (executable-find): Move to files.el.
+
+ * font-lock.el (font-lock-fontify-keywords-region): Use a marker
+ when trying to ensure forward progress.
+
+2005-05-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * mouse-sel.el (mouse-sel-follow-link-p): New function.
+ (mouse-select, mouse-select-internal, mouse-extend-internal):
+ Use it to implement mouse-1-click-follows-link functionality.
+
+2005-05-11 Richard M. Stallman <rms@gnu.org>
+
+ * font-lock.el (font-lock-fontify-syntactically-region):
+ Use font-lock-comment-delimiter-face for comment delimiters.
+
+2005-05-10 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-help.el (calc-m-prefix-help): Add mention of
+ preserving embedded modes.
+
+2005-05-10 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/sh-script.el (sh-indent-for-do): Default to 0.
+
+ * progmodes/ada-mode.el (ada-adjust-case-skeleton):
+ Move from ada-stmt.el.
+ (ada-mode): Add ada-adjust-case-skeleton to skeleton-end-hook.
+
+ * progmodes/ada-stmt.el (ada-adjust-case-skeleton):
+ Move to ada-mode.el.
+ (ada-stmt-mode-hook): Delete; do the work in ada-mode.
+
+ * cus-edit.el (custom-file): Call file-chase-links.
+
+ * files.el (read-directory-name): Fix previous change.
+ (hack-local-variables-confirm): New function.
+ (hack-local-variables-prop-line, hack-local-variables)
+ (hack-one-local-variable): Use it.
+
+2005-05-10 Lute Kamstra <lute@gnu.org>
+
+ * font-lock.el (font-lock-keywords-alist)
+ (font-lock-removed-keywords-alist): Clarify docstrings.
+
+2005-05-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-macro-info): New variable.
+ (gdb-source-info): Check for preprocessor info.
+ (gdb-tooltip-print-1): New function. Don't print tooltip if it is
+ a macro for a function.
+ (gdb-info-breakpoints-custom): Try to find file again if not already
+ found (user might have used GDB dir command).
+ (gdb-get-location): Update gdb-location-alist correctly for change
+ to gdb-info-breakpoints-custom.
+
+ * progmodes/gud.el (gud-tooltip-mode): Require tooltip to be safe.
+ (gud-tooltip-print-command): Add gdbmi case.
+ (gud-tooltip-tips): Call gdb-tooltip-print-1 first if there is
+ preprocessor info.
+
+2005-05-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * startup.el (fancy-splash-insert): Fix typo in doc string.
+
+2005-05-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * obsolete/float.el (string-to-float):
+ * obsolete/hilit19.el (hilit-add-pattern):
+ * obsolete/rnews.el (news-parse-range, news-select-message)
+ (news-get-pruned-list-of-files): Replace `string-to-int' by
+ `string-to-number'.
+
+ * obsolete/uncompress.el: Set `find-file-not-found-functions', not
+ `find-file-not-found-hooks'; use `add-hook'.
+ (uncompress-while-visiting): Set `write-file-functions', not
+ `write-file-hooks'; use `add-hook'.
+
+2005-05-09 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-copy-region, cua-cut-region)
+ (cua-paste): Handle clipboard action.
+ (cua--init-keymaps): Remap clipboard-kill-region and
+ clipboard-kill-ring-save.
+
+2005-05-08 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (easy-mmode-pretty-mode-name):
+ Improve commentary.
+
+ * simple.el (next-error-overlay-arrow-position): Revert the change
+ made on 2005-04-30.
+
+2005-05-07 Jay Belanger <belanger@truman.edu>
+
+ * calc/calcsel2.el (calc-commute-left, calc-commute-right)
+ (calc-sel-unpack, calc-sel-isolate): Rename variable `reselect' to
+ `calc-sel-reselect'.
+
+ * calc/calc-mode.el (calc-save-modes): Reset the modes list if
+ Calc is in embedded mode.
+
+2005-05-07 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/compile.el (compilation-setup):
+ Set overlay-arrow-string to an empty string on text terminals.
+
+ * textmodes/ispell.el (ispell-program-name): Try looking for
+ "aspell" along exec-path, and if found, use it as the default
+ speller program.
+
+2005-05-07 Jirka Kosek <jirka@kosek.cz> (tiny change)
+
+ * international/mule.el (sgml-xml-auto-coding-function):
+ Recognize encoding='FOO' in single quotes as well as in double quotes.
+
+2005-05-07 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se>
+
+ * emacs-lisp/cl-macs.el (cl-transform-lambda): Recognize `declare'
+ as well as `interactive', so that defmacro* would recognize
+ `declare' forms.
+
+2005-05-07 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (easy-mmode-pretty-mode-name):
+ Explain more about the LIGHTER arg's usage in the doc string.
+ Add commentary to clarify what the code does. Fix the regexp that
+ strips whitespace from LIGHTER. Quote LIGHTER before using it,
+ since it could have characters special to regular expressions.
+
+2005-05-07 Matt Hodges <MPHodges@member.fsf.org> (tiny change)
+
+ * replace.el (occur-1): Bind inhibit-read-only so that
+ erase-buffer doesn't barf on read-only text properties (likewise
+ for add-text-properties in occur-engine). Mark buffer as unmodified.
+ (occur-engine): Don't set buffer-read-only here.
+
+2005-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs.el (cvs-mode-commit, cvs-mode-edit-log): Don't fiddle with
+ list-buffers-directory. This caused the *cvs-commit* buffer to be
+ sometimes mistakenly reused as a *cvs* buffer.
+
+2005-05-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el: Move code for GUD tooltips into gud.el.
+ (require): CL no longer needed to compile case.
+ (tooltip-mode): Do not toggle functions for GUD tooltips.
+ (tooltip-gud-tips-p): Remove. Replace with minor mode
+ gud-tooltip-mode in gud.el.
+ (tooltip-gud-modes, tooltip-gud-display, tooltip-gud-echo-area)
+ (tooltip-gud-toggle-dereference): Rename in gud.el by replacing
+ tooltip-gud prefix with gud-tooltip and obsolete.
+ (tooltip-change-major-mode, tooltip-activate-mouse-motions-if-enabled)
+ (tooltip-mouse-motions-active, tooltip-activate-mouse-motions)
+ (tooltip-mouse-motion): Mouse movement functions/variable.
+ Rename in gud.el by adding gud prefix.
+ (tooltip-gud-original-filter, tooltip-gud-dereference)
+ (tooltip-gud-event, tooltip-toggle-gud-tips)
+ (tooltip-gud-process-output, tooltip-gud-print-command)
+ (tooltip-gud-tips): GUD tooltip functions/variables. Rename in
+ gud.el by replacing tooltip-gud prefix with gud-tooltip.
+ (gdb-tooltip-print): Move to gdb-ui.el.
+
+ * progmodes/gud.el: Move code for GUD tooltips from tooltip.el.
+ (require): CL needed to compile case.
+ (gud-tooltip-mode): Use to toggle GUD tooltips instead of
+ tooltip-gud-tips-p. Make it a minor-mode.
+ (gud-find-file): Only prepare GUD tooltips if gud-tooltip-mode is t.
+ (gud-menu-map): GUD tooltips use gud-tooltip-mode now.
+ (gud-tooltip-modes, gud-tooltip-display, gud-tooltip-echo-area)
+ (gud-tooltip-change-major-mode)
+ (gud-tooltip-activate-mouse-motions-if-enabled)
+ (gud-tooltip-mouse-motions-active, gud-tooltip-activate-mouse-motions)
+ (gud-tooltip-mouse-motion, gud-tooltip-toggle-dereference)
+ (gud-tooltip-original-filter, gud-tooltip-dereference)
+ (gud-tooltip-event, tooltip-toggle-gud-tips)
+ (gud-tooltip-process-output, gud-tooltip-print-command)
+ (gud-tooltip-tips): Move from tooltip.el.
+
+ * progmodes/gdb-ui.el (gdb-tooltip-print): Move from tooltip.el.
+ (gdb-cpp-define-alist-flags): Doc fix.
+ (gdb-set-gud-minor-mode-1): Only prepare GUD tooltips if
+ gud-tooltip-mode is t.
+
+2005-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * net/goto-addr.el (goto-address-fontify): Make sure the overlays
+ evaporate if their text is deleted.
+ (goto-address-at-point): Make it work as a mouse binding as well.
+ (goto-address-at-mouse): Obsolete it. Update users.
+
+2005-05-06 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/appt.el (top-level): No longer activate on load.
+
+2005-05-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * calendar/cal-bahai.el (mark-bahai-diary-entries):
+ * net/webjump.el (webjump):
+ * progmodes/idlw-help.el (idlwave-do-context-help1)
+ (idlwave-highlight-linked-completions):
+ * textmodes/po.el (po-find-file-coding-system-guts):
+ Replace `assoc-ignore-case' by `assoc-string'.
+
+2005-05-06 Eli Zaretskii <eliz@gnu.org>
+
+ * files.el (locate-file): Doc fix.
+
+ * progmodes/gdb-ui.el (gdb-cpp-define-alist-program): Doc fix.
+ Remove the redundant test for ms-dos.
+
+ * progmodes/cmacexp.el (c-macro-preprocessor): Use locate-file to
+ look for the preprocessor with exec-suffixes. If not found in
+ standard places, look in exec-path. Remove most of the tests that
+ used system-type.
+
+ * loadup.el: Load jka-cmpr-hook instead of jka-comp-hook.
+
+ * jka-compr.el (jka-compr-uninstall): Add autoload cookie.
+
+ * jka-cmpr-hook.el: Renamed from jka-comp-hook.el, to avoid
+ file-name clash with jka-compr.el on 8+3 filesystems.
+
+2005-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Don't define or bind scroll bar functions if
+ x-toolkit-scroll-bars is t.
+ (x-select-text, x-get-selection-value): Clear
+ x-last-selected-text-clipboard if x-select-enable-clipboard is
+ nil.
+ (PRIMARY): Put mac-scrap-name property.
+ (mac-select-convert-to-file-url): New function.
+ (public.file-url): New selection target type. Add to
+ selection-converter-alist.
+ (x-get-selection, x-selection-value): Handle it.
+ (x-cut-buffer-or-selection-value): New alias.
+
+2005-05-05 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-summary): Use current BibTeX
+ entry to avoid calling bibtex-find-entry with arg global
+ being t. Remove arg key.
+ (bibtex-summary-function, bibtex-complete-crossref-cleanup)
+ (bibtex-copy-summary-as-kill): Change accordingly.
+
+2005-05-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/org.el (org-get-entries-from-diary): Remove unused vars.
+ (org-agenda-date-later): Use with-current-buffer.
+
+2005-05-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/byte-run.el (define-obsolete-function-alias)
+ (define-obsolete-variable-alias): Doc Fixes.
+
+2005-05-06 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-1): Fix 2005-04-26 change. Must still use
+ vertical-motion when selective-display is active.
+
+ * ido.el (ido-setup-hook): New hook.
+ (ido-define-mode-map-hook): Remove hook; use ido-setup-hook instead.
+ (ido-input-stack): New var.
+ (ido-define-mode-map): Bind M-b to ido-push-dir. Move old
+ ido-next-work-file binding to M-O.
+ Bind M-f to ido-wide-find-file-or-pop-dir.
+ (ido-define-mode-map): Don't run ido-define-mode-map-hook.
+ (ido-read-internal): Run ido-setup-hook.
+ Catch quit in read-file-name and read-string to cancel edit.
+ Handle new push, pop, and pop-all exit codes (for M-b/M-f).
+ Automatically pop-all when completing a directory name (RET).
+ (ido-file-internal): Add with-no-warnings around ffap and dired code.
+ (ido-exit-minibuffer): Use exit-minibuffer instead of throw.
+ (ido-wide-find-file, ido-wide-find-dir): Catch quit to cancel find.
+ (ido-push-dir, ido-pop-dir, ido-wide-find-file-or-pop-dir):
+ New functions for M-b/M-f to move among the directory components.
+ (ido-make-merged-file-list): Catch quit to cancel merge.
+ (ido-make-dir-list): Delete "." when ido-input-stack is non-empty.
+ (ido-completion-help): No warnings for ido-completion-buffer-full.
+
+2005-05-05 Daniel Pfeiffer <occitan@esperanto.org>
+
+ * font-lock.el (font-lock-negation-char-face): New face and variable.
+ * progmodes/cc-fonts.el (c-cpp-matchers): Use it.
+ * progmodes/sh-script.el (sh-font-lock-keywords): Use it.
+ * progmodes/cperl-mode.el (cperl-init-faces): Use it.
+ * progmodes/make-mode.el (makefile-font-lock-keywords): Use it.
+
+2005-05-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs-lisp/byte-run.el (define-obsolete-function-alias):
+ Fix typo in docstring.
+
+ * progmodes/ebrowse.el (ebrowse-install-1-to-9-keys)
+ (ebrowse-print-statistics-line)
+ (ebrowse-electric-position-mode-hook): Fix typo in docstring.
+
+ * term/w32-win.el (image-library-alist): Add additional name for
+ Xpm library.
+
+2005-05-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cmacexp.el (c-macro-preprocessor): Update for BSD and
+ use gcc instead of cpp.
+
+ * progmodes/gdb-ui.el (gdb-cpp-define-alist-flags): New variable.
+ (gdb-create-define-alist): Use it.
+ (gdb-cpp-define-alist-program): Update for MS-DOS.
+
+2005-05-04 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cmacexp.el (c-macro-preprocessor): Update for Mac OS X.
+
+2005-05-04 Richard M. Stallman <rms@gnu.org>
+
+ * help.el (describe-key): No error when UNTRANSLATED is nil.
+
+ * simple.el (line-move-1): Fix previous change to signal errors
+ appropriately.
+
+2005-05-03 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar-version): Now at 0.12.
+ (icalendar-duration-correction): Remove.
+ (icalendar--get-event-properties): Split result at commas.
+ (icalendar--decode-isoduration): New optional argument
+ DURATION-CORRECTION.
+ (icalendar--convert-ordinary-to-ical, icalendar--convert-sexp-to-ical)
+ (icalendar--convert-yearly-to-ical, icalendar--convert-weekly-to-ical)
+ (icalendar--convert-block-to-ical, icalendar--convert-float-to-ical)
+ (icalendar--convert-date-to-ical, icalendar--convert-cyclic-to-ical)
+ (icalendar--convert-anniversary-to-ical): New functions, extracted
+ from icalendar-export-region, with bug fixes.
+ (icalendar-export-region): Use the above functions.
+ (icalendar-import-buffer): Check before saving diary file.
+ (icalendar--convert-recurring-to-diary)
+ (icalendar--convert-non-recurring-all-day-to-diary)
+ (icalendar--convert-non-recurring-not-all-day-to-diary): New functions,
+ extracted from icalendar--convert-ical-to-diary, with bug fixes.
+ (icalendar--convert-ical-to-diary): Use the above functions.
+
+2005-05-03 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cc-mode.el (cc-define-alist, cc-create-define-alist):
+ Remove these recent additions.
+ (c-mode): Restore to before 2005-04-28.
+
+ * progmodes/cc-vars.el (cc-define-list-program): Remove this
+ recent addition.
+
+ * progmodes/gdb-ui.el (gdb-cpp-define-alist-program)
+ (gdb-define-alist): New variables.
+ (gdb-create-define-alist): New function.
+ (gdb-set-gud-minor-mode-1): Handle gdb-define-alist.
+ (gdb-source, gdb-memory-set-repeat-count): Replace string-to-int
+ with string-to-number.
+ (gdb-reset): Kill gdb-define-alist. Move assignments outside loop.
+
+ * progmodes/gud.el: Replace string-to-int with string-to-number.
+ (gud-find-file): Handle gdb-define-alist.
+
+ * tooltip.el (tooltip-gud-tips): Use gdb-define-alist.
+
+2005-05-02 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-aent.el (math-read-token):
+ * calc/calc-bin.el (calc-word-size):
+ * calc/calc-ext.el (calc-read-number-fancy):
+ * calc/calc-forms.el (calc-time, calc-date-notation, math-this-year)
+ (math-parse-date, math-parse-standard-date, calcFunc-tzone):
+ * calc/calc-frac.el (calc-over-notation):
+ * calc/calc-graph.el (calc-graph-plot, calc-graph-set-styles)
+ (calc-graph-num-points, calc-graph-init):
+ * calc/calc-prog.el (calc-read-parse-table-part)
+ (calc-edit-macro-repeats):
+ * calc/calc-yank.el (calc-do-grab-rectangle):
+ * calc/calc.el (calcDigit-key, math-read-number, math-read-bignum):
+ Replace `string-to-int' by `string-to-number'.
+
+2005-05-02 Kim F. Storm <storm@cua.dk>
+
+ * kmacro.el: Use executing-kbd-macro-index variable.
+
+2005-05-02 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * net/rlogin.el (rlogin-parse-words): Delete func.
+ (rlogin): Use split-string, not rlogin-parse-words.
+ Also, if there are option-like elements in the parsed args,
+ take the host to be the first arg immediately following them.
+ Suggested by Michael Mauger.
+
+2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * subr.el (executing-macro): Use `define-obsolete-variable-alias'.
+
+2005-05-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cc-mode.el (cc-create-define-alist): Use a shell.
+ (cc-mode-cpp-program): Rename to cc-define-list-program and
+ move to cc-vars.el.
+
+ * progmodes/cc-vars.el (cc-define-list-program):
+ Change to "gcc -E -dM -". Make customizable.
+
+2005-05-02 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el: Fix check for CUA-mode if no init file.
+
+2005-05-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cc-mode.el (cc-mode-cpp-program): Change to "gcc -E".
+
+ * international/mule-util.el (truncate-string): Remove alias and
+ obsolete declaration.
+
+ * international/mule-cmds.el (update-iso-coding-systems):
+ Remove alias and obsolete declaration.
+
+ * international/mule.el (coding-system-parent): Remove alias and
+ obsolete declaration.
+
+ * subr.el (define-function, sref): Remove aliases and obsolete
+ declarations.
+ (chars-in-region): Remove obsolete declaration.
+
+2005-05-01 Richard M. Stallman <rms@gnu.org>
+
+ * info.el (Info-mode): Set widen-automatically to nil, locally.
+
+ * simple.el (widen-automatically): New variable.
+ (pop-global-mark): Obey widen-automatically.
+
+2005-05-01 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (function-key-map): Call substitute-key-definition
+ before the keymap size is increased by a lot of define-key calls.
+
+2005-05-01 Richard M. Stallman <rms@gnu.org>
+
+ * subr.el (add-to-invisibility-spec, remove-from-invisibility-spec):
+ Rename ARG to ELEMENT. Doc fix.
+
+2005-05-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * allout.el (allout-exposure): Remove macro and obsolete declaration.
+ Remove references to allout-exposure/change to allout-new-exposure.
+
+ * emacs-lisp/bytecomp.el (dot, dot-min, dot-max): Don't create
+ bytecode symbols.
+
+ * subr.el (dot, dot-marker, dot-min, dot-max, buffer-flush-undo)
+ (compiled-function-p, focus-frame, unfocus-frame):
+ Remove aliases and obsolete declarations.
+ Back out inadvertent changes from previous commit.
+
+2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * files.el (require-final-newline): Make Custom tags consistent
+ with mode-require-final-newline.
+ (mode-require-final-newline): Doc fix.
+
+2005-05-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Fix regular expressions.
+
+2005-05-01 David Kastrup <dak@gnu.org>
+
+ * international/latexenc.el (latexenc-find-file-coding-system):
+ Fix regular expressions.
+
+2005-05-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * subr.el (string-to-int): Make obsolete.
+
+2005-04-30 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (next-error-overlay-arrow-position): Turn off, for ttys.
+
+ * loadup.el: Load jka-comp-hook.
+
+ * jka-compr.el: Many functions and vars moved to jka-comp-hook.el.
+ (jka-compr-handler): Add autoload. `put' calls moved
+ to jka-comp-hook.el.
+ (compression, jka-compr): defgroups moved to jka-comp-hook.el.
+ (jka-compr-inhibit): Autoload.
+
+ * jka-comp-hook.el: New file.
+ Enable the mode by default.
+
+ * files.el (backup-buffer-copy): Use copy-file instead
+ of write-region, and put back the 'excl.
+
+2005-04-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * progmodes/flymake.el (flymake-split-string)
+ (flymake-split-string, flymake-log, flymake-pid-to-names)
+ (flymake-reg-names, flymake-get-source-buffer-name)
+ (flymake-unreg-names, flymake-add-line-err-info)
+ (flymake-add-err-info): Clarify docstrings.
+ (flymake-popup-menu, flymake-make-emacs-menu)
+ (flymake-make-xemacs-menu): Add docstrings.
+ (flymake-get-buffer-*, flymake-set-buffer-*): Functions deleted.
+ Set variables directly throughout.
+
+2005-04-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cc-mode.el (cc-create-define-alist): Check that file
+ exists. Initialize cc-define-alist.
+ (c-mode): Add cc-create-define-alist locally to after-save-hook.
+ If there is no file (Macroexpansion) don't create an alist.
+
+2005-04-29 Sam Steingold <sds@gnu.org>
+
+ * progmodes/cc-mode.el (cc-mode-cpp-program): New user variable.
+ (cc-create-define-alist): Use it instead of the hard-coded string.
+
+2005-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/mule-conf.el (file-coding-system-alist): Fix regexp
+ for latexenc.
+
+2005-04-29 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/generic.el: Improve commentary section.
+ (define-generic-mode): Improve docstring.
+
+2005-04-29 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (many places): Change to quiet the byte compiler.
+ (org-prefix-format-compiled): New variable.
+ (org-compile-prefix-format): New function.
+ (org-timeline, org-agenda, org-diary): Call org-compile-prefix-format.
+ (org-agenda-prefix-format, org-timeline-prefix-format): New options.
+ (org-agenda-get-scheduled): Check if file is opened in `org-mode'.
+ (org-get-entries-from-diary): Use `org-get-time-of-day' for
+ consistency with entries from `org-mode' files.
+ (org-get-time-of-day): Fix bug with partial matches early in a line.
+ (org-non-link-chars): New constant.
+ (org-link-regexp): Respect `org-non-link-chars'.
+ (org-agenda-day-view): Remove command.
+ (org-agenda-toggle-week-view): Rename from `org-agenda-week-view'.
+ (org-follow-bbdb-link, org-store-link): Search also company field.
+ (org-highlight-overlay): New variable.
+ (org-highlight, org-unhighlight): New functions.
+ (org-agenda-mode): Add pre-command-hook to remove highlight.
+ (org-evaluate-time-range): Behavior depends upon whether time stamp
+ contains a time or not.
+ (org-show-subtree, org-show-entry): New functions.
+ (org-agenda-cleanup-fancy-diary): Remove empty lines.
+
+2005-04-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * comint.el (comint-output-filter-functions): Add autoload cookie.
+
+2005-04-28 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-everywhere): Fix last change.
+
+2005-04-28 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * international/latexenc.el: New file.
+ * international/mule-conf.el (file-coding-system-alist): For .tex,
+ .ltx, .dtx and .drv extensions, use `latexenc-find-file-coding-system'.
+
+2005-04-28 Lute Kamstra <lute@gnu.org>
+
+ * font-lock.el (font-lock-add-keywords)
+ (font-lock-remove-keywords): Clarify docstring.
+ (font-lock-keywords-alist, font-lock-removed-keywords-alist):
+ Don't start docstrings with a `*'.
+ (font-lock-update-removed-keyword-alist): Give it a docstring.
+
+ * generic-x.el: Update commentary section.
+ Only require font-lock when compiling.
+ Define all modes conditionally.
+ Place all generic modes in the generic-x-modes customization group.
+ (generic-x-modes): New customization group.
+ (generic-default-modes, generic-mswindows-modes)
+ (generic-unix-modes, generic-other-modes): New constants.
+ (generic-define-mswindows-modes, generic-define-unix-modes):
+ Update docstrings. Make them obsolete.
+ (generic-extras-enable-list): New default value. Update docstring.
+ Improve :type. Change :set function.
+ (bat-generic-mode-syntax-table, rul-generic-mode-syntax-table):
+ Fix docstring.
+
+ * emacs-lisp/generic.el (generic-mode-internal):
+ Simplify font-lock-defaults.
+ (define-generic-mode): Fix docstring.
+
+2005-04-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/grep.el (grep-mode-font-lock-keywords): Use the
+ font-lock-face property to highlight matches.
+
+2005-04-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/cc-mode.el (cc-create-define-alist): New function.
+ (cc-define-alist): New variable.
+ (c-mode): Make it local and initialize it.
+
+ * progmodes/gdb-ui.el (gdb-active-process): New variable.
+ (gdb-exited): New function.
+ (gdb-annotation-rules): Use it.
+ (gdb-starting): Set gdb-active-process to t.
+ (gdb-stopping): Amend doc string.
+ (gdb-reset): Set gdb-active-process to nil.
+
+ * tooltip.el (tooltip-gud-tips): Show the associated #define
+ directives when a C program under GDB is not executing.
+
+2005-04-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/cperl-mode.el (cperl-mode): Don't precompile the
+ font-lock-fontify-syntactic-keywords.
+
+ * font-lock.el (font-lock-default-fontify-region): Don't force
+ parse-sexp-lookup-properties to nil.
+
+2005-04-27 Alexander Klimov <alserkli@inbox.ru> (tiny change)
+
+ * man.el (man-mode-syntax-table): Set up `:' to have
+ word-constituent syntax.
+
+2005-04-27 Lute Kamstra <lute@gnu.org>
+
+ * novice.el (disable-command): Don't add spurious newlines to the
+ init file. Reported by Dan Jacobson <jidanni@jidanni.org>.
+
+2005-04-26 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-yank.el (calc-edit-finish): Make sure there is more
+ than one window before deleting window.
+
+2005-04-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * shell.el (shell-prompt-pattern): Doc fix.
+ (shell-mode): Set paragraph-separate buffer locally to "\\'".
+
+ * comint.el (comint-prompt-regexp, comint-get-old-input)
+ (comint-use-prompt-regexp)
+ (comint-use-prompt-regexp-instead-of-fields)
+ (comint-replace-by-expanded-history, comint-send-input)
+ (comint-output-filter, comint-get-old-input-default)
+ (comint-line-beginning-position, comint-bol, comint-show-output)
+ (comint-backward-matching-input, comint-forward-matching-input)
+ (comint-next-prompt, comint-previous-prompt):
+ Rename `comint-use-prompt-regexp-instead-of-fields' to
+ `comint-use-prompt-regexp'. Keep old name as alias and declare
+ obsolete.
+ (comint-use-prompt-regexp): Shorten first line of doc string.
+
+ * ielm.el (inferior-emacs-lisp-mode): Adapt to above name change.
+ Set paragraph-separate buffer locally to "\\'".
+
+ * hippie-exp.el (try-expand-line, try-expand-line-all-buffers):
+ Adapt to above name change.
+
+ * net/net-utils.el (nslookup-prompt-regexp, ftp-prompt-regexp)
+ (smbclient-prompt-regexp): Ditto.
+
+ * progmodes/inf-lisp.el (inferior-lisp-prompt): Ditto.
+
+2005-04-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-location-alist): Rename from
+ gdb-location-list.
+ Break lines that are over 80 characters wide.
+
+2005-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs-info.el (cvs-fileinfo->full-path, cvs-display-full-path):
+ New fun and var, to preserve compatibility.
+
+ * pcvs.el, pcvs-info.el: Rename "full-path" -> "full-name".
+
+2005-04-26 Dominique de Waleffe <ddw@missioncriticalit.com> (tiny change)
+
+ * pcvs-info.el (cvs-fileinfo->backup-file): Don't pass the full file
+ name to file-newer-than-file-p.
+
+2005-04-26 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (line-move-1): Avoid using vertical-motion in easy cases.
+
+ * progmodes/python.el (python-mode):
+ Use new name eldoc-documentation-function.
+
+ * hexl.el (hexl-mode): Use new name eldoc-documentation-function.
+
+ * emacs-lisp/eldoc.el (eldoc-mode): Doc fix.
+ (eldoc-documentation-function):
+ Rename from eldoc-print-current-symbol-info-function. Calls changed.
+
+2005-04-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * emacs-lisp/byte-run.el (define-obsolete-function-alias): New macro.
+
+2005-04-25 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (function-key-map): Fix strings for
+ {C,S,A,C-S}-f[1-4]. Use substitute-key-definition to bind
+ {C,S,A,C-S}-{f1-f12}.
+
+2005-04-26 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-safe-coding-system):
+ Fix previous change.
+
+2005-04-26 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Fix docstring.
+
+ * font-lock.el (font-lock-fontify-region-function): Fix docstring.
+ (font-lock-comment-delimiter-face): Ditto.
+
+ * calc/calc.el (calc-trail-mode): Don't set font-lock-defaults.
+
+2005-04-25 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-help.el (calc-view-news): Let-bind inhibit-read-only
+ to t while inserting information; use help-mode.
+
+2005-04-25 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (ansi-term-color-vector): Use the xterm colors.
+ (term-raw-map): Don't add mappings for \eO and \e[. Map deletechar.
+
+2005-04-25 Lute Kamstra <lute@gnu.org>
+
+ * font-core.el (font-lock-defaults): Fix docstring.
+
+ * font-lock.el (font-lock-syntactic-face-function): Fix docstring.
+
+2005-04-25 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (select-safe-coding-system):
+ Don't check consistency with coding: spec, etc if raw-text or
+ no-conversion was found to be safe.
+
+2005-04-24 Richard M. Stallman <rms@gnu.org>
+
+ * mail/sendmail.el (mail-font-lock-keywords): Match any number of
+ citation markers at start of each line.
+
+ * mail/rmail.el (rmail-font-lock-keywords): Match any number of
+ citation markers at start of each line.
+
+ * font-lock.el (font-lock-comment-delimiter-face): Doc fix.
+
+ * files.el (mode-require-final-newline): Fix previous change.
+ (require-final-newline): Fix type label.
+
+2005-04-24 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * progmodes/f90.el (f90-calculate-indent): Fix treatment of first
+ statement in buffer (broken by 2004-11-24 change).
+
+2005-04-24 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-everywhere): Save and restore old read-buffer-function
+ and read-file-name-function values. Don't overwrite existing
+ non-nil values if ido-mode is enabled without ido-everywhere.
+
+2005-04-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * files.el (mode-require-final-newline): Minor doc fix.
+
+2005-04-24 Eli Zaretskii <eliz@gnu.org>
+
+ * subr.el (syntax-after): Doc fix.
+ (syntax-class): If argument is nil, return nil. Mask off upper 16
+ bits, not 8 bits.
+
+ * files.el (mode-require-final-newline): Doc fix.
+ (backup-buffer-copy): Fix last change.
+
+2005-04-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Require select. Set selection-coding-system to
+ mac-system-coding-system. Call menu-bar-enable-clipboard.
+ (x-last-selected-text-clipboard, x-last-selected-text-primary)
+ (x-select-enable-clipboard): New variables.
+ (x-select-text, x-get-selection, x-selection-value)
+ (x-get-selection-value, mac-select-convert-to-string)
+ (mac-services-open-file, mac-services-open-selection)
+ (mac-services-insert-text): New functions.
+ (CLIPBOARD, FIND): Put mac-scrap-name property.
+ (com.apple.traditional-mac-plain-text, public.utf16-plain-text)
+ (public.tiff): Put mac-ostype property.
+ (selection-converter-alist): Add entries for them.
+ (mac-application-menu-map): New keymap.
+ (interprogram-cut-function, interprogram-paste-function): Set to
+ x-select-text and x-get-selection-value, respectively.
+ (split-window-keep-point): Set to t.
+
+2005-04-23 Richard M. Stallman <rms@gnu.org>
+
+ * files.el (read-directory-name): Always pass non-nil
+ DEFAULT-FILENAME arg to read-file-name.
+ (backup-buffer-copy, basic-save-buffer-2): Take care against
+ writing thru an unexpected existing symlink.
+ (revert-buffer): In indirect buffer, revert the base buffer.
+ (magic-mode-alist): Doc fix.
+ (buffer-stale-function): Doc fix.
+ (minibuffer-with-setup-hook): Avoid warning.
+ (mode-require-final-newline): Doc and custom fix.
+
+ * follow.el (follow-end-of-buffer): Use with-no-warnings.
+
+ * font-lock.el (font-lock-comment-face): On terminals with few colors,
+ use the default appearance.
+ (font-lock-comment-delimiter-face): New face, new variable.
+
+ * imenu.el (imenu--generic-function): The official position of a
+ definition is the start of the line that BEG is in.
+
+ * midnight.el (midnight-timer): Move defvar up.
+
+ * mouse.el (mouse-drag-region-1): Delete some debugging code.
+
+ * saveplace.el (save-place-to-alist): Use with-no-warnings.
+
+ * startup.el (command-line): Use with-no-warnings.
+
+ * window.el (window-size-fixed): New defvar.
+
+ * emacs-lisp/easymenu.el (easy-menu-do-define): Use defalias, not fset.
+
+ * mail/rmail.el (rmail-font-lock-keywords):
+ Use font-lock-comment-delimiter-face.
+
+ * mail/sendmail.el (mail-font-lock-keywords):
+ Use font-lock-comment-delimiter-face.
+
+ * progmodes/compile.el (next-error-highlight-timer): New defvar.
+
+2005-04-23 SAITO Takuya <tabmore@rivo.mediatti.net> (tiny change)
+
+ * progmodes/compile.el (compilation-mode-font-lock-keywords):
+ Specify t for LAXMATCH when matching directories.
+ Save match data around compilation-compat-error-properties form.
+
+2005-04-23 David Kastrup <dak@gnu.org>
+
+ * textmodes/tex-mode.el (TeX-mode, plain-TeX-mode, LaTeX-mode):
+ Mention that the autoloaded aliases should be kept for AUCTeX.
+
+2005-04-23 Andreas Schwab <schwab@suse.de>
+
+ * isearch.el (isearch-forward): Doc fix.
+
+2005-04-23 Eli Zaretskii <eliz@gnu.org>
+
+ * jit-lock.el (jit-lock-stealth-time): Change default value to 16.
+ (jit-lock-stealth-nice): Change default value to 0.5.
+
+2005-04-23 Eric Hanchrow <offby1@blarg.net> (tiny change)
+
+ * abbrev.el (write-abbrev-file): Write table entries in
+ alphabetical order by table name.
+
+2005-04-22 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-read-internal): Fix `list' completion.
+
+2005-04-22 Kenichi Handa <handa@m17n.org>
+
+ * recentf.el (recentf-save-file-coding-system): New variable.
+ (recentf-save-list): Encode the file by
+ recentf-save-file-coding-system and add coding: tag.
+
+2005-04-22 Nick Roberts <nickrob@snap.net.nz>
+
+ * emacs-lisp/byte-run.el (define-obsolete-variable-alias): New macro.
+
+2005-04-21 Lute Kamstra <lute@gnu.org>
+
+ * loadhist.el (unload-feature): Don't remove a function from hooks
+ if it is about to be restored to an autoload . Remove functions
+ that will become unbound from auto-mode-alist. Simplify the code.
+
+ * subr.el (assq-delete-all): New implementation that is linear,
+ not quadratic. Suggested by David Kastrup <dak@gnu.org>.
+ (rassq-delete-all): New function.
+
+ * menu-bar.el (menu-bar-options-save, menu-bar-showhide-menu):
+ Add size-indication-mode.
+
+2005-04-21 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el: Add autoload for widget-value in
+ eval-when-compile.
+
+2005-04-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * menu-bar.el (menu-bar-options-save, menu-bar-showhide-menu):
+ Add tooltip-mode.
+
+ * bindings.el (mode-line-mode-menu): Remove tooltip-mode.
+
+2005-04-20 Luc Teirlinck <teirllm@auburn.edu>
+
+ * progmodes/inf-lisp.el (inferior-lisp): New defgroup.
+ (inferior-lisp-filter-regexp, inferior-lisp-program)
+ (inferior-lisp-load-command, inferior-lisp-prompt)
+ (inferior-lisp-mode-hook, lisp-source-modes)
+ (inferior-lisp-load-hook): defvar->defcustom.
+ (inferior-lisp-program, inferior-lisp-prompt)
+ (inferior-lisp-load-hook): Doc fixes.
+ (inferior-lisp-install-letter-bindings): Small change in
+ introductory comment.
+
+2005-04-20 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * vc.el (vc-annotate-color-map): Change some colors so that text
+ using them as foreground is readable on both white and black
+ backgrounds.
+
+2005-04-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/mule-conf.el (translation-table-for-input):
+ Remove redundant declaration.
+
+2005-04-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-menu-map): Add tooltip-toggle-gud-tips.
+
+ * tooltip.el (tooltip-gud-tips-p): Expand documentation.
+ (tooltip-toggle-gud-tips): New function.
+
+2005-04-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (mac-symbol-encoder): Fix mappings of left and
+ right angle brackets.
+
+2005-04-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el (tooltip-use-echo-area): Replace as alias and deprecate.
+
+2005-04-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/flymake.el (flymake-get-absolute-file-name-basedir):
+ Remove. Update callers to use expand-file-name instead.
+
+ * subr.el (syntax-class): New function.
+
+ * simple.el (blink-matching-open): Use it.
+
+ * paren.el (show-paren-function): Use it to recognize parens that are
+ also used in 2-char comment markers.
+
+2005-04-19 Lute Kamstra <lute@gnu.org>
+
+ * loadhist.el (unload-feature): Update for new format of
+ load-history. Simplify the code.
+
+2005-04-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Add coding: tag and set it to iso-2022-7bit.
+ (mac-add-charset-info): New function. Initialize variable
+ mac-charset-info-alist using it.
+ (mac-centraleurroman, mac-cyrillic): Do not use UCS in table data
+ for translation.
+ (mac-symbol-encoder, mac-dingbats-encoder): New translation table.
+ (mac-font-encoder-list): Add entries for mac-symbol and mac-dingbats.
+ (ccl-encode-mac-symbol-font, ccl-encode-mac-dingbats-font):
+ New CCL programs.
+
+2005-04-19 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (next-buffer, prev-buffer, next-error)
+ (scroll-other-window, keyboard-quit, keyboard-escape-quit)
+ (clone-indirect-buffer-other-window): Move bindings to bindings.el.
+
+ * bindings.el (next-buffer, prev-buffer, next-error)
+ (scroll-other-window, keyboard-quit, keyboard-escape-quit)
+ (clone-indirect-buffer-other-window): Move bindings from simple.el.
+ (next-buffer, prev-buffer): Add C-x C-right and C-x C-left bindings.
+ (next-error, previous-error): Add M-g M-n/n and M-g M-p/p bindings.
+
+2005-04-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * isearch.el (isearch-edit-string): Make the search-ring available for
+ minibuffer history commands.
+ (minibuffer-local-isearch-map): Remove bindings for M-p and M-n,
+ the default history commands now work just as well.
+ (isearch-ring-retreat-edit, isearch-ring-advance-edit): Remove.
+
+2005-04-18 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua--pre-command-handler): Add more
+ elaborate check for shift modifier on non-window systems.
+
+2005-04-18 Lars Hansen <larsh@math.ku.dk>
+
+ * desktop.el: Make "--no-desktop" turn off `desktop-save-mode'.
+
+2005-04-18 Kim F. Storm <storm@cua.dk>
+
+ * tooltip.el (tooltip-show): Change second arg to USE-ECHO-AREA
+ and make it optional. Don't test tooltip-gud-echo-area here.
+ (tooltip-gud-process-output, gdb-tooltip-print):
+ Pass tooltip-gud-echo-area to tooltip-show.
+ (tooltip-help-tips): Remove second optional arg to tooltip-show.
+
+2005-04-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * tooltip.el (tooltip-mode): `emacs-quick-startup' and
+ `display-graphic-p' may not be bound yet.
+
+2005-04-17 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (command-line): No longer enable Xterm Mouse mode by
+ default in terminals compatible with xterm.
+
+ * xt-mouse.el (xterm-mouse-mode): Set init value back to nil.
+
+2005-04-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el (tooltip-gud-echo-area): Rename from
+ tooltip-use-echo-area.
+ (tooltip-show, tooltip-gud-process-output, gdb-tooltip-print)
+ (tooltip-help-tips): Allow GUD tooltips to be displayed in echo
+ area independently of where help tooltips are displayed.
+
+2005-04-17 David Kastrup <dak@gnu.org>
+
+ * cus-theme.el (custom-theme-write-variables): Quote variables
+ where necessary.
+
+2005-04-17 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (yank-excluded-properties): Add follow-link to value.
+
+ * jka-compr.el (jka-compr-compression-info-list): Fix custom type.
+
+ * startup.el (fancy-splash-max-time): Just 30 seconds.
+ (fancy-splash-delay): Just 7.
+ (fancy-splash-screens): No time limit other than fancy-splash-max-time.
+
+ * loadhist.el (unload-feature): Update for new format of load-history.
+ Simplify the code.
+
+ * mail/rmail.el (rmail-ignored-headers): Ignore more headers
+ (rmail-font-lock-keywords): Don't fontify the text of a citation.
+
+ * mail/sendmail.el (mail-font-lock-keywords):
+ Don't fontify subject text.
+ Don't fontify the text of a citation.
+
+2005-04-17 Mark H. Weaver <mhw@netris.org> (tiny change)
+
+ * comint.el (comint-output-filter): Run comint-output-filter-functions
+ with point where the user had it.
+
+2005-04-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/ucs-tables.el (ucs-set-table-for-input):
+ Disable when using unify-on-decoding.
+
+2005-04-16 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * emulation/cua-base.el (cua-global-mark-face): Add special case
+ for displays supporting a high number of colors.
+
+2005-04-16 Matt Hodges <MPHodges@member.fsf.org> (tiny change)
+
+ * repeat.el (repeat): Invoke pre-command-hook and post-command-hook.
+
+2005-04-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * filesets.el (filesets-add-buffer): If user supplies a name of a
+ non-existing fileset, create a new fileset.
+
+2005-04-16 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-up-heading-all): Fix bug with
+ `outline-up-heading-all'.
+
+2005-04-16 Andreas Schwab <schwab@suse.de>
+
+ * files.el (auto-mode-alist): Handle /etc/sysconfig/*,
+ /etc/permissions.d/* and /etc/aliases.d/*.
+
+2005-04-16 Kenichi Handa <handa@m17n.org>
+
+ * international/code-pages.el (cp-make-coding-system):
+ Set `translation-table-for-input' property value to the symbol
+ ucs-mule-to-mule-unicode, not to that value.
+ (pt154): Escape guillemet by `\'.
+
+2005-04-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * loadup.el: Load tooltip if x-show-tip is fboundp.
+
+ * startup.el (command-line): Add comment.
+
+ * tooltip.el (tooltip-mode): Specify correct standard value for
+ Custom in init-value.
+
+2005-04-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-goto-info): Use existing Info buffer, if
+ possible.
+
+2005-04-15 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-date-prompt): Rename from
+ `org-agenda-date-today'.
+ (org-evaluate-time-range): Insert at point instead of directly
+ after time range.
+ (org-first-headline-recenter, org-subtree-end-visible-p)
+ (org-optimize-window-after-visibility-change): New functions
+ (org-agenda-post-command-hook): Don't allow point at end of line,
+ to make sure it always hits the text properties.
+ (org-agenda-next-date-line, org-agenda-previous-date-line):
+ New commands.
+ (org-set-regexps-and-options): Category may contain white space.
+ (org-agenda-get-deadlines, org-agenda-get-scheduled):
+ Improve marker positions.
+ (org-agenda-new-marker): Argument POS made optional.
+ (org-agenda-get-timestamps): Deadlines which are done are listed
+ in org-done-face now.
+ (org-agenda-get-todos, org-agenda-get-timestamps)
+ (org-agenda-get-deadlines, org-agenda-get-scheduled):
+ Set `undone-face' and `done-face' properties.
+ (org-last-todo-state-is-todo): New variable.
+ (org-todo): Set `org-last-todo-state-is-todo'.
+ (org-agenda-todo): Change face according to
+ `org-last-todo-state-is-todo'. And change other lines referring to
+ the same entry.
+ (org-calendar-goto-agenda): New command.
+ (org-calendar-to-agenda-key): New option.
+ (org-startup-folded): New allowed value `content'.
+ (org-set-regexps-and-options): Accept new value `content' for
+ `org-startup-folded'.
+ (org-get-current-options): Handle new value `content' for
+ `org-startup-folded'.
+ (org-insert-todo-heading): New command.
+ (org-mode): Insert first line "*-* mode: org-mode -*-" when called
+ interactively in empty file and option
+ `org-insert-mode-line-in-empty-file' has been set.
+ (org-agenda-todo, org-agenda-priority): Modify to use
+ `org-agenda-change-all-lines'.
+ (org-warning-face): Change color on dark background.
+
+2005-04-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * international/mule-cmds.el (set-locale-environment): On Mac OS,
+ use preferences AppleLocale and AppleLanguages, and variable
+ mac-system-locale for default locale. On Mac OS Classic, use
+ mac-system-coding-system for default coding systems.
+
+ * term/mac-win.el: Don't set file-name-coding-system.
+ Decode variables system-name, emacs-build-system, user-login-name, and
+ user-full-name by mac-system-coding-system on Mac OS Classic.
+ (mac-system-coding-system): New variable.
+
+2005-04-13 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (command-line): Handle `xterm-mouse-mode' before
+ reading init file.
+
+ * xt-mouse.el (xterm-mouse-mode): Adapt to above change.
+
+2005-04-13 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * progmodes/sh-script.el (sh-here-document-word): Make it a
+ defcustom. Doc fix.
+ (sh-add): Bash uses $(( )) for arithmetic.
+ (sh-while-getopts) <sh>: Set OPTIND back to 1 at end.
+ (sh-maybe-here-document): Remove quotes and leading whitespace
+ from heredoc word when closing. Indent heredoc with tabs if word
+ starts with "-".
+
+2005-04-13 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (undo): Fix previous change.
+
+ * custom.el (defface): Doc fix.
+
+2005-04-13 Lute Kamstra <lute@gnu.org>
+
+ * Makefile.in (DONTCOMPILE): Remove list.
+ (compile, compile-always): Don't use DONTCOMPILE.
+ (update-authors): Load the library in which batch-update-authors
+ is defined.
+ * makefile.w32-in (DONTCOMPILE): Remove list.
+ (compile, compile-always): Fix comments.
+ (update-authors): Load the library in which batch-update-authors
+ is defined.
+
+ * generic-x.el (generic-mode-ini-file-find-file-hook):
+ Rename to ini-generic-mode-find-file-hook.
+ Keep generic-mode-ini-file-find-file-hook as an alias.
+ (ini-generic-mode-find-file-hook): Rename from
+ generic-mode-ini-file-find-file-hook. Fix docstring.
+ (ini-generic-mode): Docstring change.
+ (bat-generic-mode-run-as-comint): Silence the byte compiler.
+
+ * help.el (describe-key-briefly): UNTRANSLATED can be nil when
+ called from lisp.
+
+ * generic.el: Move to the emacs-lisp subdir.
+
+2005-04-12 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (function-key-map): Add mappings for A-, C-, S-
+ and C-S- function and cursor motion keys.
+
+2005-04-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * startup.el (command-line): Enable Xterm Mouse mode by default.
+ * xt-mouse.el (xterm-mouse-mode): Provide correct standard value
+ for Custom. No longer show "Mouse" in mode line when enabled.
+ Doc fix.
+
+2005-04-12 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-rectangle-face)
+ (cua-rectangle-noselect-face): Define face attributes here.
+
+ * emulation/cua-rect.el (cua--init-rectangles): Remove face setup.
+
+2005-04-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * startup.el (command-line): Turn off blinking cursor if
+ cursorBlink in resources is off or false.
+
+2005-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el (dnd): Require dnd.
+ (mac-drag-n-drop): Call dnd-handle-one-url.
+ (kTextEncodingMacRoman, kTextEncodingISOLatin1)
+ (kTextEncodingISOLatin2): Remove constants.
+ (mac-script-code-coding-systems): New constant.
+ (mac-handle-language-change): New function.
+ (special-event-map): Bind it to `language-change' event.
+ (mac-centraleurroman, mac-cyrillic): New coding systems.
+ (mac-font-encoder-list, ccl-encode-mac-centraleurroman-font)
+ (ccl-encode-mac-cyrillic-font): Rename mac-centraleurroman-encoder
+ and mac-cyrillic-encoder to encode-mac-centraleurroman and
+ encode-mac-cyrillic, respectively.
+
+2005-04-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el, progmodes/gdb-ui.el (gdb-assembler-mode):
+ Don't set overlay-arrow-string to "=>" as this is done
+ globally in C now.
+
+2005-04-12 Lute Kamstra <lute@gnu.org>
+
+ * generic-x.el (rc-generic-mode, rul-generic-mode):
+ Fix auto-mode-alist entries.
+ (etc-fstab-generic-mode): Tweak fontification.
+
+ * generic.el (generic-make-keywords-list): Fix docstring.
+ (generic-mode-internal): Simplify generic-font-lock-keywords.
+
+2005-04-11 Rajesh Vaidheeswarran <rv@gnu.org>
+
+ * whitespace.el (whitespace-buffer-leading)
+ (whitespace-buffer-trailing): Revert the incorrect test inversion.
+ However, fix the highlight area for the leading and
+ trailing whitespaces to show space.
+
+2005-04-11 Rajesh Vaidheeswarran <rv@gnu.org>
+
+ * whitespace.el (whitespace-version): Bump to 3.5.
+
+ (whitespace-buffer-leading, whitespace-buffer-trailing):
+ Invert sense of the test to highlight the whitespace.
+
+2005-04-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gud-display-line): GUD uses its own
+ overlay arrow now so don't set overlay-arrow-string.
+ (gud-pdb-command-name): Revert back to "pdb" (2004-04-26).
+
+2005-04-11 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-ansi-current-bold, term-ansi-current-underline)
+ (term-ansi-current-reverse, term-ansi-current-invisible)
+ (term-ansi-face-already-done): Change to boolean.
+ (term-reset-terminal, term-handle-colors-array): Handle the above
+ vars accordingly.
+ (term-buffer-vertical-motion): Rename from buffer-vertical-motion.
+ (term-emulate-terminal): Use the new name.
+
+ * faces.el (secondary-selection): Use yellow1, not yellow.
+ (trailing-whitespace): Use red1, not red.
+
+2005-04-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * dired.el (dired-mode): Use dnd-* instead of x-dnd-*
+ (dired-dnd-handle-local-file): Call dnd-get-local-file-name.
+ (dired-dnd-handle-file): Call dnd-get-local-file-uri.
+
+ * cus-edit.el (dnd): New group.
+
+ * term/w32-win.el (dnd): Require dnd
+ (w32-drag-n-drop): Call dnd-handle-one-url.
+
+ * x-dnd.el: Require dnd.
+ (x-dnd-handle-uri-list, x-dnd-handle-file-name):
+ Call dnd-handle-one-url.
+ (x-dnd-types-alist, x-dnd-insert-utf8-text)
+ (x-dnd-insert-utf16-text, x-dnd-insert-ctext): Change x-dnd-insert-text
+ to dnd-insert-text.
+ (x-dnd-protocol-alist, x-dnd-open-file-other-window)
+ (x-dnd-handle-one-url, x-dnd-get-local-file-uri)
+ (x-dnd-get-local-file-name, x-dnd-open-local-file)
+ (x-dnd-open-file, x-dnd-insert-text): Move to dnd.el (without x-).
+
+ * dnd.el (dnd-protocol-alist): New file with generic DND functions.
+
+2005-04-11 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
+
+ * wdired.el: Doc fixes.
+ (wdired-confirm-overwrite): Rename from wdired-is-ok-overwrite.
+ (wdired-use-dired-vertical-movement): Rename from
+ wdired-always-move-to-filename-beginning.
+ (wdired-mode-map): Use `ignore' instead of `wdired-newline'.
+ (wdired-change-to-wdired-mode): Change mode name.
+ (wdired-newline): Delete.
+
+2005-04-11 Richard M. Stallman <rms@gnu.org>
+
+ * whitespace.el (whitespace-highlight-the-space):
+ Don't call whitespace-unhighlight-the-space here.
+
+ * simple.el (undo): Record t in undo-equiv-table
+ for the redo record made by an undo-in-region.
+
+2005-04-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-display-inferior-io-buffer)
+ (gdb-frame-inferior-io-buffer): New Functions to control
+ display of separate IO buffer.
+ (menu): Add them to menu-bar.
+ (gdb-display-buffer): Check for buffer another frame.
+ Protect GUD buffer.
+ (gdb-setup-windows): Create IO buffer if not already there.
+ (gdb-memory-mode): Remove purecopy noops.
+
+2005-04-11 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * progmodes/f90.el (f90-electric-insert): Add optional prefix arg,
+ and pass to self-insert-command.
+
+2005-04-11 Lute Kamstra <lute@gnu.org>
+
+ * generic.el: Commentary section cleanup.
+ (generic): Delete.
+ (generic-use-find-file-hook, generic-lines-to-scan)
+ (generic-find-file-regexp, generic-ignore-files-regexp)
+ (default-generic-mode, generic-mode-find-file-hook)
+ (generic-mode-ini-file-find-file-hook): Move to generic-x.el.
+ * generic-x.el (generic-x): Docstring fix. Put it in the data group.
+ (generic-use-find-file-hook, generic-lines-to-scan)
+ (generic-find-file-regexp, generic-ignore-files-regexp)
+ (default-generic-mode, generic-mode-find-file-hook)
+ (generic-mode-ini-file-find-file-hook): Move from generic.el.
+
+2005-04-10 Karl Fogel <kfogel@red-bean.com>
+
+ * bookmark.el (bookmark-write-file): Catch errors writing file.
+ This is the same change as saveplace.el at 2005-04-10T23:32:00Z!rms@gnu.org.
+
+2005-04-10 Richard M. Stallman <rms@gnu.org>
+
+ * startup.el (fancy-splash-tail): Update copyright year.
+ (command-line): Split part of -Q into -D.
+ (emacs-basic-display): New defvar.
+ (fancy-splash-text): Correct name of menu item.
+
+ * saveplace.el (save-place-alist-to-file): Catch errors writing file.
+
+ * info.el (Info-fontify-node): Handle fontification of multiple * Menu
+ lines in one node.
+
+ * comint.el (comint-send-input): New arg ARTIFICIAL.
+ Callers in this file changed.
+
+ * abbrev.el (define-abbrevs): Read system abbrevs properly.
+
+ * emacs-lisp/map-ynp.el (map-y-or-n-p): Clarify RET/q in help message.
+
+2005-04-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * url/url-ldap.el (url-ldap): Add docstring. Fix call to
+ `ldap-search-internal'.
+
+2005-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (set-auto-mode-1): Use line-end-position.
+
+ * international/latin-1.el:
+ * international/latin-2.el:
+ * international/latin-3.el:
+ * international/latin-4.el:
+ * international/latin-5.el:
+ * international/latin-8.el:
+ * international/latin-9.el: Give punctuation syntax to NBSP.
+
+ * textmodes/bibtex.el (bibtex-autokey-titleword-ignore)
+ (bibtex-reference-key, bibtex-autokey-demangle-name, bibtex-mode):
+ Use char-classes to accept non-ascii letters, accepted in some recent
+ bibtex implementations.
+
+2005-04-10 Luc Teirlinck <teirllm@auburn.edu>
+
+ * custom.el (custom-set-minor-mode): Any non-nil value for the
+ variable should enable the mode when set through Custom.
+
+2005-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/vhdl-mode.el (vhdl-mode-map-init): Don't override default
+ TAB binding so tab-always-indent is obeyed.
+ (vhdl-minibuffer-local-map): Move initialization into declaration.
+ (vhdl-mode-abbrev-table-init): Mark the abbrevs as `system'.
+ (vhdl-run-when-idle, vhdl-create-mode-menu, vhdl-character-to-event)
+ (vhdl-hooked-abbrev): Avoid test for XEmacs.
+ (vhdl-current-line): Use line-beginning-position.
+ (vhdl-doc-variable, vhdl-doc-mode): Call help-setup-xref before
+ with-output-to-temp-buffer, so the current position can be recorded.
+
+2005-04-10 Masatake YAMATO <jet@gyve.org>
+
+ * progmodes/compile.el (compilation-error-regexp-alist-alist):
+ Add regexp for gcov.
+
+2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * calendar/time-date.el (time-to-seconds, seconds-to-time)
+ (days-to-time, time-subtract, time-add): Don't use the #xhhhh
+ syntax which Emacs 20 doesn't support.
+
+2005-04-09 Richard M. Stallman <rms@gnu.org>
+
+ * help.el (describe-key-briefly, describe-key):
+ Replace strings as event types with "(any string)".
+
+2005-04-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * arc-mode.el (archive-mode-map): Move initialization into
+ the declaration. Override *all* bindings of `undo'.
+ (archive-lemacs): Remove, use (featurep 'xemacs) instead.
+
+2005-04-09 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-units.el (math-standard-units): Redefine Watt hour as W*hr.
+
+2005-04-09 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (xterm-rgb-convert-to-16bit): Simplify.
+ (xterm-register-default-colors): Update color values computation
+ to match xterm-200.
+
+2005-04-09 Kenichi Handa <handa@m17n.org>
+
+ * international/code-pages.el (iso-latin-7): Fix the map.
+
+2005-04-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * emacs-lisp/lisp.el (defun-prompt-regexp)
+ (parens-require-spaces, buffer-end, end-of-defun)
+ (insert-parentheses): Doc fixes.
+
+2005-04-08 Kim F. Storm <storm@cua.dk>
+
+ * comint.el (comint-highlight-prompt): Fix face spec.
+ * hi-lock.el (hi-green): Likewise.
+
+2005-04-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * cus-edit.el (custom-modified-face):
+ * comint.el (comint-highlight-input): Fix previous changes.
+ * term.el (term-handle-ansi-escape): Add a comment.
+
+2005-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * whitespace.el (whitespace-highlight-the-space): Put the same overlay
+ in the buffer and in whitespace-highlighted-space.
+ (whitespace-unhighlight-the-space): Simplify.
+ (whitespace-buffer): Simplify.
+
+2005-04-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * textmodes/table.el (table-cell-face): Add special case for
+ displays supporting a high number of colors.
+ * progmodes/vhdl-mode.el (vhdl-font-lock-prompt-face)
+ (vhdl-font-lock-reserved-words-face)
+ (vhdl-speedbar-architecture-face)
+ (vhdl-speedbar-instantiation-face)
+ (vhdl-speedbar-architecture-selected-face)
+ (vhdl-speedbar-instantiation-selected-face): Likewise.
+ * progmodes/sh-script.el (sh-heredoc-face): Likewise.
+ * progmodes/idlw-help.el (idlwave-help-link-face): Likewise.
+ * progmodes/ebrowse.el (ebrowse-tree-mark-face)
+ (ebrowse-root-class-face, ebrowse-member-attribute-face)
+ (ebrowse-progress-face): Likewise.
+ * progmodes/compile.el (compilation-info-face): Likewise.
+ * progmodes/cc-fonts.el (c-invalid-face): Likewise.
+ * emacs-lisp/re-builder.el (reb-match-3): Likewise.
+ * calendar/calendar.el (diary-face): Likewise.
+ * woman.el (woman-italic-face, woman-bold-face)
+ (woman-unknown-face): Likewise.
+ * wid-edit.el (widget-button-pressed-face): Likewise.
+ * whitespace.el (whitespace-highlight-face): Likewise.
+ * smerge-mode.el (smerge-mine-face, smerge-base-face): Likewise.
+ * pcvs-info.el (cvs-marked-face): Likewise.
+ * info.el (info-xref): Likewise.
+ * ido.el (ido-subdir-face, ido-indicator-face): Likewise.
+ * hilit-chg.el (highlight-changes-face)
+ (highlight-changes-delete-face): Likewise.
+ * hi-lock.el (hi-yellow, hi-green, hi-blue-b, hi-green-b)
+ (hi-red-b): Likewise.
+ * generic-x.el (show-tabs-tab-face, show-tabs-space-face): Likewise.
+ * font-lock.el (font-lock-keyword-face)
+ (font-lock-function-name-face, font-lock-warning-face): Likewise.
+ * cus-edit.el (custom-invalid-face, custom-modified-face)
+ (custom-set-face, custom-changed-face, custom-variable-tag-face)
+ (custom-group-tag-face-1, custom-group-tag-face): Likewise.
+ * comint.el (comint-highlight-prompt): Likewise.
+
+2005-04-08 Lute Kamstra <lute@gnu.org>
+
+ * font-lock.el (font-lock-keywords): Docstring fixes.
+
+2005-04-08 Kenichi Handa <handa@m17n.org>
+
+ * ps-mule.el (ps-mule-show-warning): If the number of unprintable
+ chars are more than a limit, print " and more..." at the tail.
+
+2005-04-08 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/authors.el (authors-aliases): Update list.
+ (authors-ignored-files): New list.
+ (authors-fixed-entries): Fix typo.
+ (authors-renamed-files-alist): Update list.
+ (authors-add): Check authors-ignored-files.
+
+2005-04-08 Carsten Dominik <dominik@science.uva.nl>
+
+ * calendar/diary-lib.el (add-to-diary-list): MARKER argument made
+ optional, to ensure backward compatibility.
+
+2005-04-08 Stephen Eglen <stephen@gnu.org>
+
+ * textmodes/flyspell.el (flyspell-large-region): Doc fix.
+
+2005-04-08 Kim F. Storm <storm@cua.dk>
+
+ * buff-menu.el (Buffer-menu-mode-map): Map follow-link to mouse-face.
+
+ * mouse.el (mouse-on-link-p): Doc fix.
+
+2005-04-07 Luc Teirlinck <teirllm@auburn.edu>
+
+ * ielm.el (ielm-prompt-read-only): Doc fix.
+
+ * comint.el (comint-prompt-read-only): Doc fix.
+
+2005-04-07 Benjamin Rutt <brutt@bloomington.in.us>
+
+ * ffap.el (ffap-pass-wildcards-to-dired): New user option to
+ ensure dired always handles wildcards passed to ffap.
+ (find-file-at-point): Use it.
+ (ffap-dired-wildcards): Doc fix.
+
+2005-04-07 Juri Linkov <juri@jurta.org>
+
+ * simple.el (next-error-overlay-arrow-position): New defvar.
+ Put "=>" on its property `overlay-arrow-string'. Add it to
+ `overlay-arrow-variable-list'.
+
+ * progmodes/compile.el (compilation-setup):
+ Set `next-error-overlay-arrow-position' to nil. Also set it to
+ nil in the local hook `kill-buffer-hook'. Make local variable
+ `overlay-arrow-string' and set it to "=>".
+ (compilation-goto-locus): Set BOL position to
+ `next-error-overlay-arrow-position' instead of
+ `overlay-arrow-position'.
+
+ * info.el (Info-mode): Add `Info-kill-buffer' to `kill-buffer-hook'
+ locally instead of adding it to the global hook.
+ (Info-kill-buffer): Move up.
+
+2005-04-06 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term/xterm.el (xterm-standard-colors): Update color values from
+ xterm-200.
+
+2005-04-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/tex-mode.el (tex-font-lock-keywords-2): Add \bfseries.
+
+ * fast-lock.el:
+ * lazy-lock.el: Move them to the obsolete subdir.
+
+2005-04-06 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
+
+ * wdired.el (wdired-advise-functions, wdired-add-skip-in-replace)
+ (wdired-add-replace-advice): Remove.
+ (wdired-change-to-wdired-mode): Use query-replace-skip-read-only.
+
+2005-04-06 Kim F. Storm <storm@cua.dk>
+
+ * startup.el (command-line): Add --bare-bones alias for -Q.
+
+2005-04-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Use create-fontset-from-mac-roman-font to
+ create the startup fontset if a font specification ends with
+ `mac-roman'.
+
+2005-04-06 Lute Kamstra <lute@gnu.org>
+
+ * add-log.el (change-log-font-lock-keywords): Complete 2005-04-03
+ change.
+
+ * emacs-lisp/copyright.el (copyright-update-year): Replace the
+ right subexpression. Suggested by Jay Bingham <jay.bingham@hp.com>.
+
+2005-04-05 Lute Kamstra <lute@gnu.org>
+
+ * generic.el (generic-mode-internal): Fix 2005-03-31 change.
+ (define-generic-mode): Ditto. Fix debug declaration.
+
+ * generic-x.el (show-tabs-tab-face, show-tabs-space-face):
+ Put them in the generic-x group.
+
+ * calendar/timeclock.el (timeclock): Doc fix.
+
+ * generic.el (define-generic-mode): Don't use custom-current-group.
+ Document default :group value.
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Ditto.
+ (define-global-minor-mode): Don't use custom-current-group.
+
+2005-04-05 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * startup.el (command-line-1): Display startup-echo-area-message
+ when fancy splash screen is in use.
+
+ * progmodes/sh-script.el (sh-builtins) <bash>: Add `caller'.
+ (sh-escaped-newline): New face.
+ (sh-font-lock-keywords) <shell>: Improve regexp for escaped
+ newline, and use sh-escaped-newline face.
+
+ * progmodes/tcl.el (tcl-escaped-newline): New face.
+ (tcl-builtin-list): New variable.
+ (tcl-set-font-lock-keywords): Add builtins, variables, and escaped
+ newlines. Fix keywords subexpression number.
+
+2005-04-05 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-diary-default-entry): Fix call to
+ `add-to-diary-entry'.
+
+2005-04-05 Kim F. Storm <storm@cua.dk>
+
+ * ediff-init.el: Use (featurep 'xemacs).
+
+2005-04-05 David Ponce <david@dponce.com>
+
+ * cus-edit.el (face): Derive from symbol widget. Display sample
+ of the current face on the fly.
+ (widget-face-sample-face-get, widget-face-notify): New functions.
+ (widget-face-value-create): Remove.
+
+ * wid-edit.el (widget-field-end): Temporarily remove field
+ narrowing before to call `get-char-property'.
+
+2005-04-04 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-aent.el (math-read-replacement-list): Add subscripts.
+ (math-read-subscripts): New variable.
+ (math-read-preprocess-string): Process subscripts.
+
+2005-04-04 Luc Teirlinck <teirllm@auburn.edu>
+
+ * comint.el (comint-prompt-read-only): Doc fix.
+
+ * dired.el (dired-copy-filename-as-kill): Make `-' arg behave like
+ `-1'. Doc fix.
+
+2005-04-04 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-insert-mode-line-in-empty-file):
+ Change default value to nil.
+
+2005-04-04 Lute Kamstra <lute@gnu.org>
+
+ * autorevert.el (auto-revert-mode): Specify :group.
+ * battery.el (display-battery-mode): Specify :group.
+ * diff-mode.el (diff-minor-mode): Specify :group.
+ * font-core.el (font-lock-mode): Specify :group.
+ * hl-line.el (hl-line-mode): Specify :group.
+ * iimage.el (iimage): New customization group.
+ (iimage-mode): Specify :group.
+ * longlines.el (longlines-mode): Specify :group.
+ * master.el: Don't require easy-mmode.
+ (master): New customization group.
+ (master-mode): Specify :group.
+ * msb.el (msb-mode): Specify :group.
+ * reveal.el (reveal-mode): Specify :group.
+ * simple.el (next-error-follow-minor-mode): Specify :group.
+ * smerge-mode.el (smerge-mode): Specify :group.
+ * emacs-lisp/eldoc.el (eldoc-mode): Specify :group.
+ * emulation/cua-base.el (cua-mode): Specify :group.
+ * international/encoded-kb.el (encoded-kbd-mode): Specify :group.
+ * language/thai-util.el (thai-auto-composition-mode)
+ (thai-word-mode): Specify :group.
+ * mail/supercite.el (sc-minor-mode): Specify :group.
+ * progmodes/cwarn.el (cwarn-mode): Specify :group.
+ * progmodes/flymake.el (flymake-mode): Specify :group.
+ * progmodes/glasses.el (glasses-mode): Specify :group.
+ * progmodes/hideif.el (hide-ifdef-mode): Specify :group.
+ * textmodes/enriched.el (enriched-mode): Specify :group.
+ * textmodes/refill.el (refill-mode): Specify :group.
+
+ * add-log.el (change-log-font-lock-keywords): Names in
+ parenthesized lists can contain spaces.
+
+2005-04-04 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * startup.el (fancy-splash-text): Shorten default text of
+ "Emacs Tutorial" line. Also, if the current language env
+ indicates an available tutorial file other than TUTORIAL,
+ extract its title and append it to the line in parentheses.
+ (fancy-splash-insert): If arg is a thunk, funcall it.
+
+2005-04-04 Jay Belanger <belanger@truman.edu>
+
+ * calc.el (calc-language-alist): Add tags to customization type.
+
+2005-04-03 Luc Teirlinck <teirllm@auburn.edu>
+
+ * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group, mouse.
+ Doc fix.
+
+2005-04-03 Marcelo Toledo <marcelo@gnu.org>
+
+ * add-log.el (change-log-font-lock-keywords): The manual
+ describing a Change Log entry, says: (...) "Aside from these
+ header lines, every line in the change log starts with a space or
+ a tab.". The font-lock was not highlighting lines started with
+ spaces, added support for it.
+
+2005-04-03 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-url): Use format to generate the url.
+ (bibtex-generate-url-list): Update docstring accordingly. Put the
+ complex example in the docstring.
+ (bibtex-font-lock-url): Use pop.
+
+2005-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/tcl.el (tcl-set-font-lock-keywords): Use new \_< ops.
+
+ * pcvs.el (cvs-checkout): Prompt for cvsroot as well.
+
+2005-04-03 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * filesets.el (filesets-set-default): Doc fix.
+
+2005-04-03 Lute Kamstra <lute@gnu.org>
+
+ * generic.el (define-generic-mode): Add argument to specify
+ keywords for defcustom.
+ (default-generic-mode): Specify :group.
+
+ * generic-x.el: Specify :group for all generic modes.
+
+ * desktop.el (desktop-no-desktop-file-hook)
+ (desktop-after-read-hook): Doc fix.
+
+2005-04-02 Luc Teirlinck <teirllm@auburn.edu>
+
+ * simple.el (visible-mode): Use explicit :group keyword.
+ This changes the group of `visible-mode-hook' from paren-blinking
+ to editing-basics.
+
+2005-04-02 Sergey Poznyakoff <gray@Mirddin.farlep.net> (tiny change)
+
+ * mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional
+ mailbox specifications as well as URLs.
+ (rmail-insert-inbox-text): Remove unused conditional branches.
+
+2005-04-01 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command)
+ (calc-gnuplot-print-command): Move definitions to calc.el.
+
+ * calc/calc-embed.el (calc-embedded-announce-formula)
+ (calc-embedded-open-formula, calc-embedded-close-formula)
+ (calc-embedded-open-word, calc-embedded-close-word)
+ (calc-embedded-open-plain, calc-embedded-close-plain)
+ (calc-embedded-open-new-formula, calc-embedded-close-new-formula)
+ (calc-embedded-open-mode, calc-embedded-close-mode):
+ Move definitions to calc.el.
+
+ * calc/calc.el (calc-settings-file, calc-language-alist):
+ Make customizable.
+ (calc-embedded-announce-formula, calc-embedded-open-formula)
+ (calc-embedded-close-formula, calc-embedded-open-word)
+ (calc-embedded-close-word, calc-embedded-open-plain)
+ (calc-embedded-close-plain, calc-embedded-open-new-formula)
+ (calc-embedded-close-new-formula, calc-embedded-open-mode)
+ (calc-embedded-close-mode, calc-gnuplot-name)
+ (calc-gnuplot-plot-command, calc-gnuplot-print-command): Move here
+ from other files and make customizable.
+
+2005-04-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
+ Use buffer-live-p.
+ (cvs-mode-run): Don't call cvs-update-header here.
+ (cvs-run-process): Call cvs-update-header.
+ Use process properties for cvs-postprocess and cvs-buffer so that
+ the sentinel can behave better if the temp buffer is killed.
+ Use a pipe rather than a tty, to better handle unexpected prompts.
+ (cvs-sentinel): Rewrite. Call cvs-update-header.
+
+2005-04-01 Andre Spiegel <spiegel@gnu.org>
+
+ * vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when
+ we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann.
+
+2005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * generic.el (define-generic-mode): Add indentation rule.
+
+2005-03-31 Luc Teirlinck <teirllm@auburn.edu>
+
+ * files.el (mode-require-final-newline): Make Custom correctly
+ report a nil value and allow to set it to nil via Custom.
+ Doc fix.
+
+2005-04-01 Kenichi Handa <handa@m17n.org>
+
+ * international/characters.el: Enable the correct case setting for
+ dotless-i and dotted-I.
+
+2005-04-01 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-file-internal): Fall back to non-ido command if
+ initial directory is on slow ftp (or tramp) host.
+
+2005-03-31 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/autoload.el (make-autoload):
+ Handle define-global-minor-mode.
+
+ * emacs-lisp/easy-mmode.el (define-global-minor-mode):
+ Rename from easy-mmode-define-global-mode.
+ (easy-mmode-define-global-mode): Alias for define-global-minor-mode.
+
+ * progmodes/scheme.el (scheme-mode-syntax-table):
+ Update syntax of | and # for two-character comment syntax.
+
+2005-03-31 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode)
+ (define-minor-mode): Call custom-current-group at load-time.
+
+ * generic.el (define-generic-mode): Add debug declaration.
+ Add defcustom for the mode hook.
+ (generic-mode-internal): Use run-mode-hooks.
+
+2005-03-31 Kim F. Storm <storm@cua.dk>
+
+ * mouse.el (mouse-1-click-follows-link): Increase to 450 ms.
+ (mouse-fixup-help-message): New defun called by show_help_echo
+ to fixup mouse-2 prefix in help messages when applicable.
+
+ * tooltip.el (tooltip-show-help-function): Don't fixup message here.
+
+2005-03-31 Kenichi Handa <handa@m17n.org>
+
+ * language/thai-word.el (thai-find-word-ends): Pay attention to
+ the case that we reach the end of buffer.
+
+ * textmodes/fill.el (fill-text-properties-at): New function.
+ (fill-newline): Use fill-text-properties-at instead of
+ text-properties-at.
+
+2005-03-31 Olive Lin <olive.lin@versateladsl.be> (tiny change)
+
+ * textmodes/tex-mode.el (tex-start-tex): Use shell-quote-argument,
+ not comint-quote-filename.
+
+2005-03-31 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * help-fns.el (help-with-tutorial): Revert last change.
+
+2005-03-31 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-scroll-down): Add CUA property.
+
+2005-03-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * calendar/cal-china.el: Update reference to "Calendrical
+ Calculations" book; there's a new edition.
+ * calendar/cal-coptic.el: Likewise.
+ * calendar/cal-french.el: Likewise.
+ * calendar/cal-hebrew.el: Likewise.
+ * calendar/cal-islam.el: Likewise.
+ * calendar/cal-iso.el: Likewise.
+ * calendar/cal-julian.el: Likewise.
+ * calendar/cal-mayan.el: Likewise.
+ * calendar/cal-persia.el: Likewise.
+ * calendar/calendar.el: Likewise.
+ * calendar/holidays.el: Likewise.
+ * calendar/lunar.el: Likewise.
+ * calendar/solar.el: Likewise.
+
+ * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing
+ white space from doc string.
+
+2005-03-30 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-help.el (calc-full-help): Remove email address.
+
+2005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * help-fns.el (help-with-tutorial): Delete title line.
+
+2005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/cal-x.el (calendar-one-frame-setup)
+ (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t
+ rather than `symbol' for set-window-dedicated-p.
+
+ * calendar/appt.el (appt-buffer-name): Make it a constant.
+ (appt-add): Doc fix.
+
+ * filesets.el (filesets-menu-path, filesets-menu-before)
+ (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs.
+ (filesets-menu-cache-file): Use directory ~/.emacs.d.
+ (filesets-add-submenu): Delete and use add-submenu instead.
+
+2005-03-30 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-agenda-phases-of-moon)
+ (org-agenda-sunrise-sunset, org-agenda-convert-date)
+ (org-agenda-goto-calendar): New commands.
+ (org-diary-default-entry): New function.
+ (org-get-entries-from-diary): Better parsing of diary entries.
+ (org-agenda-check-no-diary): New function.
+ ("diary-lib"): Advice to function `add-to-diary-list', to allow
+ linking to diary entries.
+ (org-agenda-execute-calendar-command): New function.
+ (org-agenda): Improve visible section in window.
+ Use `org-fit-agenda-window'.
+ (org-fit-agenda-window): New option.
+ (org-move-subtree-down): Better handling of empty lines
+ at end of subtree.
+ (org-cycle): Numeric prefix is interpreted now as show-subtree N
+ levels up.
+ (org-fontify-done-headline): New option.
+ (org-headline-done-face): New face.
+ (org-set-font-lock-defaults): Use `org-headline-done-face'.
+ (org-table-copy-down): Rename from `org-table-copy-from-above'.
+ When current field is non-empty, it is copied to next row.
+ (org-table-copy-from-above): Fix bug which made it
+ impossible to copy fields containing only a single non-white character.
+
+2005-03-30 Kim F. Storm <storm@cua.dk>
+
+ * kmacro.el (kmacro-end-macro): Isearch may store this command
+ into the macro -- so ignore it when executing keyboard macro.
+
+2005-03-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position.
+
+2005-03-29 Kenichi Handa <handa@m17n.org>
+
+ * language/thai.el ("Thai"): Set setup-function and exit-function
+ for Thai language environment.
+
+ * language/thai-util.el: Require thai-word.
+ (thai-word-mode-map): New variable.
+ (thai-word-mode): New minor mode.
+ (setup-thai-language-environment-internal): New function.
+ (exit-thai-language-environment-internal): New function.
+
+ * language/thai-word.el (thai-word-table): Declare it by defvar,
+ use dolist to initialize it.
+ (thai-kill-word, thai-backward-kill-word, thai-transpose-words)
+ (thai-fill-find-break-point): New functions.
+
+2005-03-29 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (idle-update-delay): Move definition up.
+ (set-mark): Doc fix.
+
+2005-03-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * longlines.el: New file.
+
+ * simple.el (buffer-substring-filters): New variable.
+ (filter-buffer-substring): New function.
+ (kill-region, copy-region-as-kill): Use it.
+
+ * register.el (copy-to-register, append-to-register)
+ (prepend-to-register): Use filter-buffer-substring.
+
+2005-03-30 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el (gdb): (Re)-initialize gud-filter-pending-text.
+ (gud-filter-pending-text): Move in front of gdb.
+ (gud-overlay-arrow-position): New variable.
+ (gud-sentinel, gud-display-line): Use it in place of
+ overlay-arrow-position.
+
+2005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * progmodes/fortran.el (fortran-if-indent): Doc fix.
+ (fortran-font-lock-keywords-2): Add "where", "elsewhere".
+ (fortran-font-lock-keywords-4): New variable.
+ (fortran-blocks-re, fortran-end-block-re)
+ (fortran-start-block-re): New constants, for hideshow.
+ (hs-special-modes-alist): Add a Fortran entry.
+ (fortran-mode-map): Bind fortran-end-of-block,
+ fortran-beginning-of-block to \M-\C-n, \M-\C-p.
+ (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4.
+ (fortran-looking-at-if-then, fortran-end-of-block)
+ (fortran-beginning-of-block): New functions, for hideshow.
+
+ * progmodes/f90.el (f90-end-block-re, f90-start-block-re):
+ Doc fix. Tweak regexp.
+ (f90-beginning-of-block): Push mark first.
+
+2005-03-29 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el: Update copyright date.
+ (calc-version): Increase to 2.1.
+ (calc-version-date): Remove.
+
+ * calc/calc-help.el: Update copyright date.
+ (calc-full-help): Remove reference to calc-version-date.
+ Update copyright date.
+
+2005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc.el (vc-do-command): Use a pipe for async processes, so password
+ prompts don't show up at places where the user can't reply.
+
+2005-03-29 Olive Lin <olive.lin@versateladsl.be> (tiny change)
+
+ * textmodes/tex-mode.el (tex-send-command): shell-quote-argument
+ on the file name we pass to the inferior shell.
+
+2005-03-29 Stephan Stahl <stahl@eos.franken.de> (tiny change)
+
+ * progmodes/which-func.el (which-function): Be robust in the face of an
+ imenu--make-index-alist failure.
+
+2005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * reveal.el (reveal-mode-map): Don't override C-a and C-e.
+
+ * progmodes/python.el (python-preoutput-filter): Fix last change.
+
+2005-03-29 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded
+ functions and compiled macros.
+ (debug-convert-byte-code): Handle macros too.
+ (debug-on-entry-1): Don't signal an error when trying to clear a
+ function that is not set to debug on entry.
+
+2005-03-29 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-lang.el: Add functions to math-function-table
+ properties of tex and math.
+
+2005-03-29 Kenichi Handa <handa@m17n.org>
+
+ * ps-mule.el (ps-mule-plot-string): Translate characters by
+ ps-print-translation-table.
+ (ps-mule-begin-job): Call find-charset-region/string with
+ ps-print-translation-table.
+ (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1.
+
+ * ps-print.el (ps-print-translation-table): New variable.
+ (ps-plot-region): Translate characters by ps-print-translation-table.
+
+2005-03-29 Juri Linkov <juri@jurta.org>
+
+ * simple.el (next-error-highlight-timer): New variable.
+
+ * progmodes/compile.el (compilation-goto-locus):
+ Use `next-error-highlight-timer' instead of `sit-for'.
+
+2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mail/supercite.el (sc-mail-field): Use assoc-string.
+ (sc-get-address): Simplify regexps.
+
+ * files.el (minibuffer-with-setup-hook): New macro.
+ (find-file-read-args): Use it to avoid let-binding
+ minibuffer-with-setup-hook (which breaks turning on/off
+ file-name-shadow-mode while in the prompt).
+
+ * complete.el (PC-read-include-file-name-internal):
+ Use test-completion.
+
+2005-03-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o.
+
+2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.el (window-buffer-height): Use count-screen-lines.
+
+ * progmodes/python.el (python-preoutput-leftover): New var.
+ (python-preoutput-filter): Use it.
+ (python-send-receive): Loop until all the result has been received.
+
+2005-03-28 Juri Linkov <juri@jurta.org>
+
+ * dired.el (dired-mode-map): Add ellipsis to "Compare directories".
+
+ * menu-bar.el (menu-bar-file-menu): Remove ellipsis from
+ "Recover Crashed Session".
+ (menu-bar-search-menu): Add ellipsis to "Search tagged files".
+ (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files".
+ (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name".
+ (menu-bar-goto-menu): Add ellipsis to "Tags Apropos".
+ (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset".
+ (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual".
+ (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual".
+ (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages".
+
+ * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu):
+ Remove ellipsis from "Ediff Manual", "Customize Ediff", "List
+ Ediff Sessions", "Toggle use of separate control buffer frame",
+ "Use separate frame for Ediff control buffer".
+
+ * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to
+ Bookmark", "Set Bookmark", "Insert Contents", "Insert Location",
+ "Rename Bookmark", "Delete Bookmark".
+
+ * info.el (Info-mode-menu): Remove ellipsis from "Index".
+ Add ellipsis to "Lookup a String", "Lookup a string in all indices".
+ Add `:active Info-index-alternatives' to "Next Matching Item".
+
+ * wdired.el (wdired-change-to-wdired-mode):
+ Mention `wdired-abort-changes' key in the initial message.
+
+ * international/mule.el (auto-coding-alist): Associate non-ascii
+ image filename extensions with `no-conversion'.
+
+2005-03-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/iso-acc.el:
+ * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir.
+
+2005-03-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * textmodes/sgml-mode.el (html-mode): Doc update.
+
+ * autorevert.el (auto-revert-check-vc-info): Minor doc fix.
+
+2005-03-26 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.el (term-move-columns): Fix face after extending a line.
+ (term-insert-spaces): Likewise.
+ (term-reset-terminal): Fix off by one error.
+
+2005-03-26 Eli Zaretskii <eliz@gnu.org>
+
+ * international/mule.el (auto-coding-alist): Add .xpi files.
+
+ * files.el (auto-mode-alist): Add .xpi files.
+
+2005-03-26 Jure Cuhalev <gandalf@owca.info> (tiny change)
+
+ * textmodes/ispell.el (ispell-dictionary-alist-6): Add slovenian.
+
+2005-03-26 Eli Zaretskii <eliz@gnu.org>
+
+ * term/bobcat.el: Don't use keyswap.el, since it is now obsolete.
+
+2005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/cal-menu.el (top level): Delete local C-down-mouse-3
+ binding. Suggested by Stephan Stahl <stahl@eos.franken.de>.
+
+ * calendar/cal-move.el (calendar-beginning-of-year): Move the
+ cursor to Jan 1 when needed.
+ (calendar-end-of-year): Fix -/+ typo.
+ Reported by Chong Yidong <cyd@stupidchicken.com>.
+
+2005-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/flymake.el (flymake-mode): Add autoload cookie.
+
+ * emacs-lisp/debug.el (debugger-record-expression): Add a missing
+ format to `message'. Inspired by Deepak Goel <deego@gnufans.org>.
+
+2005-03-25 Richard M. Stallman <rms@gnu.org>
+
+ * filesets.el (filesets-init): Add autoload.
+
+ * mail/mailalias.el (mail-directory): Doc fix.
+
+2005-03-25 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
+
+ * mail/mailalias.el (mail-directory-process): Do nothing if
+ mail-directory-process is an atom.
+ (mail-get-names): Ignore mail-directory-names if it is an atom.
+ (mail-directory-process defvar): Doc fix.
+ (mail-names): Doc fix.
+
+2005-03-25 Johan Bockg,Ae(Brd <bojohan@dd.chalmers.se> (tiny change)
+
+ * textmodes/flyspell.el (mail-mode-flyspell-verify): Fix regexp syntax.
+
+2005-03-26 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-util.el (detect-coding-with-priority):
+ Call update-coding-systems-internal before detect-coding-region.
+
+2005-03-26 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-breakpoints-mode-map)
+ (gdb-frames-mode-map): Add follow-link property.
+
+2005-03-25 Jay Belanger <belanger@truman.edu>
+
+ * calc/calcalg2.el (calc-solve-for): Use "Variable(s)" to prompt
+ for variables.
+
+2005-03-25 Juri Linkov <juri@jurta.org>
+
+ * image-mode.el: Optimize image filename extension regexps in
+ autoload cookies. Associate .x[bp]m with `image-mode-maybe'
+ in `auto-mode-alist'.
+ (image-mode): Add `image-toggle-display-text' to local hook
+ `change-major-mode-hook'. Display the image as an image by
+ default. Set `cursor-type' and `truncate-lines' if the image
+ is already displayed. Take into account the current mode (image
+ or text) in message.
+ (image-minor-mode): New minor mode.
+ (image-mode-maybe, image-toggle-display-text): New functions.
+ (image-toggle-display): Use called-interactively-p.
+ Let-bind `inhibit-read-only' to t.
+
+ * image-mode.el (image-minor-mode): Set `cursor-type' and
+ `truncate-lines' if the image is already displayed. Add turning
+ image-minor-mode off to `change-major-mode-hook'. Add message.
+ Call `image-toggle-display-text' after turning image-minor-mode off.
+
+2005-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * international/mule-cmds.el (set-locale-environment): For Mac OS X's
+ Terminal.app, use utf-8.
+ (set-display-table-and-terminal-coding-system): Add coding-system arg.
+ (set-locale-environment): Use it.
+
+ * term/xterm.el: Undo last change, better done in mule-cmds.el.
+
+ * emacs-lisp/rx.el (rx-constituents): Add symbol-start and symbol-end.
+
+ * progmodes/python.el (python-close-block-statement-p)
+ (python-outdent-p, python-current-defun): Use symbol-end.
+
+2005-03-25 Karl Chen <quarl@cs.berkeley.edu>
+
+ * files.el (save-some-buffers): Doc fix.
+
+2005-03-25 Werner Lemberg <wl@gnu.org>
+
+ * complete.el, thumbs.el: Replace `legal' with `valid'.
+ * calendar/calendar.el: Replace `legal' with `valid'.
+ * emacs-lisp/advice.el: Replace `legal' with `valid'.
+ * mail/supercite.el: Replace `legal' with `valid'.
+ * progmodes/cperl-mode.el, progmodes/idlw-shell.el
+ * progmodes/idlwave.el, progmodes/vhdl-mode.el:
+ Replace `legal' with `valid'.
+ * textmodes/reftex-vars.el, textmodes/reftex.el:
+ Replace `legal' with `valid'.
+
+2005-03-25 Werner Lemberg <wl@gnu.org>
+
+ * calc/calc-forms.el, calc/calc-sel.el
+ * midnight.el, vc-cvs.el
+ * emacs-lisp/cl-macs.el
+ * emulation/vip.el
+ * eshell/esh-io.el, eshell/esh-var.el
+ * mail/supercite.el
+ * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el
+ * progmodes/ebnf-ebx.el, progmodes/ebnf-dtd.el, progmodes/ebnf-iso.el
+ * progmodes/ebnf-yac.el, progmodes/ebnf2ps.el, progmodes/idlwave.el
+ * progmodes/sh-script.el, progmodes/xscheme.el
+ * textmodes/refbib.el, textmodes/refer.el, textmodes/reftex-cite.el
+ * textmodes/reftex-index.el, textmodes/reftex-parse.el
+ * textmodes/reftex-ref.el, textmodes/reftex-vars.el
+ * textmodes/reftex.el, textmodes/org.el:
+ Replace `illegal' with `invalid'.
+
+2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/flymake.el (flymake-get-file-name-mode-and-masks)
+ (flymake-find-buildfile, flymake-find-possible-master-files)
+ (flymake-check-include, flymake-parse-line): Replace loops over the
+ length of lists, by loops over lists, to remove silly O(n,A2(B) behavior.
+
+ * progmodes/flymake.el (flymake-ensure-ends-with-slash): Remove.
+ Substitute file-name-as-directory in the rest of the file.
+ (flymake-get-common-file-prefix): Rewrite, using compare-strings.
+ (flymake-replace-region): Remove unused arg `buffer'.
+ (flymake-check-patch-master-file-buffer): Update calls to it.
+ (flymake-add-err-info): Remove unused var `count'.
+ (flymake-mode): Use define-minor-mode.
+
+ * progmodes/flymake.el: Use with-current-buffer.
+ (flymake-float-time, flymake-get-temp-dir, flymake-line-end-position)
+ flymake-replace-regexp-in-string, flymake-line-beginning-position)
+ (flymake-popup-menu, flymake-current-row, flymake-selected-frame):
+ Avoid testing for `xemacs'.
+ (flymake-nop): Move.
+ (flymake-region-has-flymake-overlays): Return the computed value.
+ (flymake-reformat-err-line-patterns-from-compile-el): Use dolist.
+ Remove unused var `endline'.
+ (flymake-get-line-count): Remove unused function.
+ (flymake-display-err-menu-for-current-line): Unused var move-mouse-pos.
+
+ * emulation/vi.el:
+ * generic.el:
+ * hilit-chg.el (global-highlight-changes):
+ * hi-lock.el (hi-lock-mode):
+ * follow.el: find-file-hooks -> find-file-hook.
+
+ * comint.el (comint-insert-input): Obey mouse-yank-at-point.
+
+2005-03-24 Juri Linkov <juri@jurta.org>
+
+ * dired.el (dired-mode-map): Add menu item "Compare directories"
+ for dired-compare-directories.
+
+ * dired-aux.el (dired-compare-directories): Add autoload cookie.
+ Doc fix. Replace `read-file-name' with `read-directory-name'.
+
+2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * term/xterm.el: If running in Terminal.app set coding-system to utf-8.
+
+2005-03-24 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-embedded-mode-change): Save all
+ relevant mode settings in calc-embedded-original-modes when modes
+ are permanently changed.
+
+2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * autoinsert.el: find-file-hooks -> find-file-hook.
+
+2005-03-24 Lute Kamstra <lute@gnu.org>
+
+ * generic.el (generic-font-lock-defaults): Make it obsolete.
+ (generic-font-lock-keywords): New variable to replace
+ generic-font-lock-defaults.
+ (generic-mode-set-font-lock): Delete it.
+ (generic-mode-internal): Don't call generic-mode-set-font-lock.
+ (generic-bracket-support): Add docstring.
+
+ * generic-x.el: Rename generic-font-lock-defaults to
+ generic-font-lock-keywords throughout.
+ (mailagent-rules-setup-function): Delete it.
+ (mailagent-rules-generic-mode): Use anonymous function instead.
+ (show-tabs-generic-mode-font-lock-defaults-1)
+ (show-tabs-generic-mode-font-lock-defaults-2): Make them constants.
+ Quote faces.
+ (show-tabs-tab-face, show-tabs-space-face): Specify background,
+ not foreground.
+
+ * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression):
+ Recognize define-generic-mode.
+
+2005-03-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * icomplete.el (icomplete-simple-completing-p): Don't turn on icomplete
+ if there's no completion table.
+
+2005-03-23 Miles Bader <miles@gnu.org>
+
+ * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
+ Remove tty-specific variants, as they're no longer needed.
+
+2005-03-23 Lute Kamstra <lute@gnu.org>
+
+ * generic-x.el: Code cleanup: make args constant whenever possible.
+ (installshield-statement-keyword-list)
+ (installshield-system-functions-list)
+ (installshield-system-variables-list, installshield-types-list)
+ (installshield-funarg-constants-list): Make them constants.
+
+ * generic.el (generic-make-keywords-list): Add autoload cookie.
+
+ * calendar/time-date.el: Add comment on time value formats.
+ Don't require parse-time.
+ (with-decoded-time-value): New macro.
+ (encode-time-value): New function.
+ (time-to-seconds, time-less-p, time-subtract, time-add): Use them.
+ (days-to-time): Return a valid time value when arg is huge.
+ (time-since): Use time-subtract.
+ (time-to-number-of-days): Use time-to-seconds.
+
+2005-03-23 David Ponce <david@dponce.com>
+
+ * recentf.el (recentf-keep): New option.
+ (recentf-menu-action): Default to `find-file'.
+ (recentf-keep-non-readable-files-flag)
+ (recentf-keep-non-readable-files-p)
+ (recentf-file-readable-p, recentf-find-file)
+ (recentf-cleanup-remote): Remove.
+ (recentf-include-p): More robust.
+ (recentf-keep-p): New function.
+ (recentf-remove-if-non-kept): Rename from
+ `recentf-remove-if-non-readable'. Use `recentf-keep-p'.
+ All callers updated.
+ (recentf-menu-items-for-commands): Fix help string.
+ (recentf-track-closed-file): Update. Doc fix.
+ (recentf-cleanup): Update. Count removed files. Doc fix.
+
+2005-03-23 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
+ Don't inherit from fringe face (now happens automatically).
+
+2005-03-22 Kim F. Storm <storm@cua.dk>
+
+ * tooltip.el (tooltip-show-help-function): Ignore negative mouse
+ position values.
+
+2005-03-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * menu-bar.el (showhide-date-time): Remove.
+ (menu-bar-showhide-menu): Use menu-bar-make-mm-toggle.
+ (menu-bar-make-mm-toggle): Simplify.
+
+2005-03-22 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
+
+ * progmodes/perl-mode.el (perl-font-lock-keywords-2):
+ Accept qualified variable and function names.
+
+2005-03-22 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * bindings.el (completion-ignored-extensions):
+ Remove ".lis" for `vax-vms'.
+
+2005-03-22 Andreas Schwab <schwab@suse.de>
+
+ * generic-x.el: Revert last change.
+ * ldefs-boot.el: Update.
+
+2005-03-22 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-embedded-original-modes): New variable.
+ (calc-embedded-save-original-modes)
+ (calc-embedded-restore-original-modes): New functions.
+ (calc-do-embedded): Save original modes when entering embedded mode
+ and restore when leaving embedded mode.
+ (calc-embedded-modes-change): Change the value of
+ calc-embedded-original-modes to reflect permanent changes.
+
+2005-03-22 Lute Kamstra <lute@gnu.org>
+
+ * generic-x.el: Require generic again.
+
+2005-03-22 Miles Bader <miles@gnu.org>
+
+ * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
+ Tweak details to look good on both ttys and bitmap displays, light
+ or dark background, etc.
+
+2005-03-21 Kim F. Storm <storm@cua.dk>
+
+ * tooltip.el (tooltip-show-help-function): Check car and cdr of
+ mouse position.
+
+2005-03-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * icomplete.el: Don't forcibly turn on the mode upon load.
+ (icomplete-mode): Use define-minor-mode.
+ (icomplete-eoinput): Default to nil.
+ (icomplete-minibuffer-setup): Remove autoload.
+ (icomplete-tidy): Simplify.
+ (icomplete-exhibit): Use buffer-undo-list to determine if we're still
+ in the initial state or if the user has modified the field.
+ Fix handling of icomplete-max-delay-chars.
+ Remove code that handles the oddball case where
+ minibuffer-completion-table is an integer.
+ Wrap icomplete-completions in while-no-input in case building
+ completions takes more time than expected.
+ (icomplete-completions): Simplify.
+
+2005-03-21 Richard M. Stallman <rms@gnu.org>
+
+ * jka-compr.el (jka-compr-really-do-compress):
+ Make variable buffer-local.
+
+ * image-mode.el: Handle .xpm files too.
+ (image-toggle-display): Preserve modification flag.
+
+ * help.el (where-is): Don't mention aliases with no key bindings.
+
+2005-03-21 Lute Kamstra <lute@gnu.org>
+
+ * generic.el: Fix commentary section. Don't require cl for
+ compilation.
+ (generic-mode-list): Add autoload cookie.
+ (generic-use-find-file-hook, generic-lines-to-scan)
+ (generic-find-file-regexp, generic-ignore-files-regexp)
+ (generic-mode, generic-mode-find-file-hook)
+ (generic-mode-ini-file-find-file-hook): Fix docstrings.
+ (define-generic-mode): Make it a defmacro. Fix docstring.
+ (generic-mode-internal): Code cleanup. Add autoload cookie.
+ (generic-mode-set-comments): Code cleanup.
+ * generic-x.el: Don't prevent compilation. Don't require generic.
+ Follow coding conventions. Minor code cleanup.
+ (etc-fstab-generic-mode): Add some keywords.
+ * font-lock.el (lisp-font-lock-keywords-1): Font lock a call to
+ define-generic-mode like a function declaration.
+
+2005-03-21 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-do-embedded): Put data on stack before
+ changing modes.
+
+2005-03-21 Sam Steingold <sds@gnu.org>
+
+ * add-log.el (add-log-current-defun): Support more C DEFUN forms.
+
+2005-03-21 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/dcl-mode.el (dcl-font-lock-keywords):
+ Add underscore to "f$ lexicals" regexp.
+
+2005-03-20 Juri Linkov <juri@jurta.org>
+
+ * subr.el (progress-reporter-do-update): When `min-value' is equal
+ to `max-value', set `percentage' to 0 and prevent division by zero.
+
+2005-03-20 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.48.
+
+ * net/tramp.el (all): Change all addresses to .gnu.org.
+ (tramp-append-tramp-buffers): New defun.
+ (tramp-bug): Apply `tramp-append-tramp-buffers' as post-hook.
+ Catch `dont-send' signal.
+ (tramp-set-auto-save-file-modes): Set always permissions, because
+ there might be an old auto-saved file belonging to another
+ original file. This could be a security threat. Reported by
+ Kjetil Kjernsmo <kjetil@kjernsmo.net>.
+ Check for Emacs 21.3.50 removed.
+
+ * net/tramp-smb.el (all): Remove debug construct for
+ `with-parsed-tramp-file-name'.
+ (tramp-smb-prompt): Prompt can contain spaces inside directory names.
+ (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file):
+ No error message if DIRECTORY or FILENAME doesn't exist.
+ (tramp-smb-open-connection): Check existence of
+ `tramp-smb-program'.
+
+2005-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function):
+ Properly handle the case where the `m' or `s' command's argument is not
+ yet terminated.
+ (perl-indent-new-calculate): New function.
+ (perl-indent-line): Use it.
+
+2005-03-20 Miles Bader <miles@gnu.org>
+
+ * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces
+ in text-mode too. Change to new face names.
+ (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'.
+ Add `:weight bold' attribute.
+ (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'.
+
+2005-03-19 Juri Linkov <juri@jurta.org>
+
+ * files.el (auto-mode-alist): Add comment. Optimize jar/ear/war.
+
+ * international/mule.el (auto-coding-alist): Sync with
+ `auto-mode-alist' by adding upper case archive file extensions
+ and adding ear/war to jar extension.
+
+2005-03-19 David Casperson <casper@unbc.ca> (tiny change)
+
+ * textmodes/tex-mode.el (tex-view): If tex-shell process is not
+ running, restart it.
+
+2005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes)
+
+ * finder.el (finder-current-item): Throw an error on an empty line.
+
+ * man.el (Man-follow-manual-reference): If current-word returns
+ nil, use "".
+
+2005-03-19 Matt Hodges <MPHodges@member.fsf.org>
+
+ * simple.el (goto-line): Doc fix.
+
+2005-03-19 Aaron S. Hawley <Aaron.Hawley@uvm.edu>
+
+ * files.el (save-buffer): Doc fix.
+
+2005-03-19 Michael R. Mauger <mmaug@yahoo.com>
+
+ * recentf.el (recentf-cleanup-remote): New variable.
+ (recentf-cleanup): Use it to conditionally check availability of
+ remote files.
+
+2005-03-19 Joe Edmonds <joe-bugs-debian-org@elem.com> (tiny change)
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-variables): Recognize `@' in
+ function names.
+
+2005-03-19 Eli Zaretskii <eliz@gnu.org>
+
+ * language/thai-word.el: New file.
+
+2005-03-19 JUAN-LEON Lahoz Garcia <juanleon1@gmail.com>
+
+ * files.el (backup-buffer): If the file's directory is not
+ writable, use copy instead of move to backup the file.
+
+2005-03-19 Eli Zaretskii <eliz@gnu.org>
+
+ * obsolete/keyswap.el: Moved to obsolete/ from term/.
+
+2005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br>
+
+ * ps-print.el (ps-generate-string-list, ps-generate-header-line):
+ Use functionp instead of symbolp and fboundp. Reported by Drkm
+ <darkman_spam@yahoo.fr>.
+ (ps-print-version): New version 6.6.6.
+
+2005-03-18 Tak Ota <Takaaki.Ota@am.sony.com>
+
+ * textmodes/table.el (table--line-column-position): New idiom.
+ (table--row-column-insertion-point-p): New function to test
+ validity of row and column insertion operation at a location.
+ (table-global-menu, table-cell-menu): Use above functions for
+ deterministic test operation.
+ (table--editable-cell-p): Behave in deterministic fashion.
+
+2005-03-18 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-lazy-highlight-new-loop):
+ Make arguments beg and end optional.
+ (isearch-update): Remove optional arguments nil from
+ isearch-lazy-highlight-new-loop.
+ (isearch-lazy-highlight-search): Let-bind case-fold-search to
+ isearch-lazy-highlight-case-fold-search instead of
+ isearch-case-fold-search, and let-bind isearch-regexp to
+ isearch-lazy-highlight-regexp.
+ Use isearch-lazy-highlight-last-string instead of isearch-string.
+
+ * replace.el (perform-replace): Remove bindings of global
+ variables isearch-string, isearch-regexp, isearch-case-fold-search.
+ Add three new arguments to `replace-highlight'.
+ (replace-highlight): Add arguments string, regexp, case-fold.
+ Let-bind isearch-string, isearch-regexp, isearch-case-fold-search
+ to allow isearch-lazy-highlight-new-loop to use these values
+ to set corresponding isearch-lazy-highlight-* internal
+ variables whose values lazy highlighting will use regardless of
+ changes to global variables isearch-string, isearch-regexp,
+ isearch-case-fold-search during lazy highlighting loop.
+ (replace-dehighlight): Rename `isearch-lazy-highlight-cleanup'
+ to `lazy-highlight-cleanup'.
+
+ * textmodes/ispell.el (ispell-lazy-highlight): New defcustom.
+ (ispell-highlight-face): Set default face to `isearch' when
+ lazy highlighting is enabled.
+ (ispell-highlight-spelling-error-overlay): Set `ispell-overlay'
+ priority to 1. Add lazy highlighting.
+ (ispell-highlight-spelling-error-xemacs): Remove obsolete arg
+ from `isearch-dehighlight'.
+
+2005-03-18 David Ponce <david@dponce.com>
+
+ * files.el (hack-local-variables): Do a case-insensitive search
+ for End.
+
+2005-03-18 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (lazy-highlight-cleanup) <command>: Rename from
+ `isearch-lazy-highlight-cleanup', add alias to old name and
+ declare obsolete. Add release numbers to other obsolete vars.
+ (isearch-done, isearch-lazy-highlight-new-loop):
+ Rename `isearch-lazy-highlight-cleanup' to `lazy-highlight-cleanup'.
+ (lazy-highlight-cleanup) <variable>: Doc fix.
+ (isearch-lazy-highlight-update): Rename obsolete
+ `isearch-lazy-highlight-face' to `lazy-highlight-face'.
+
+2005-03-18 Kenichi Handa <handa@m17n.org>
+
+ * language/thai-util.el: Fix categorization of Thai characters in
+ thai-category-table.
+ (thai-composition-pattern): Adjust it for the above change.
+ (thai-self-insert-command, thai-compose-syllable): New functions.
+ (thai-compose-region): Use thai-compose-syllable.
+ (thai-compose-string): Likewise.
+ (thai-composition-function): Likewise.
+ (thai-auto-composition): New function.
+ (thai-auto-composition-mode): New minor mode.
+
+ * language/thai.el: Fix patterns to be registered in
+ composition-function-table.
+
+ * international/quail.el (quail-input-method): Locally bind
+ inhibit-modification-hooks to t.
+
+2005-03-17 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/perl-mode.el (perl-mode-hook): Defvar it.
+ (perl-mode): Use run-mode-hooks.
+
+ * mail/rmail.el (rmail-movemail-program, rmail-pop-password)
+ (rmail-pop-password-required, rmail-remote-password): Doc fixes.
+ (rmail-preserve-inbox, rmail-probe, rmail-autodetect): Doc fix.
+
+ * mail/sendmail.el (sendmail-send-it): Reenable the code
+ to compute resend-to-address and use it.
+
+ * tar-mode.el (tar-mode): Turn off undo unconditionally.
+
+ * image-mode.el: New file.
+
+ * image.el (insert-sliced-image): Add autoload cookie.
+
+ * font-lock.el (font-lock-lines-before): New user option.
+ (font-lock-after-change-function): Obey it.
+
+ * bindings.el (esc-map): Make M-g a prefix.
+ Bind M-g g and M-g M-g to goto-line.
+
+ * faces.el (face-id): Doc fix.
+
+2005-03-17 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
+
+ * mail/rmail.el (rmail-unknown-mail-followup-to): New function.
+ (rmail-show-message): Use rmail-unknown-mail-followup-to.
+ (rmail-reply): Recognize Mail-Followup-To and Mail-Reply-To headers.
+
+ * mail/sendmail.el (mail-yank-ignored-headers)
+ (mail-font-lock-keywords, mail-mode-fill-paragraph):
+ Add Mail-Followup-To and Mail-Reply-To headers.
+ (mail-citation-hook): Add autoload cookie.
+ (mail-mode): Doc fix.
+ (mail-mode-map): Bind mail-mail-followup-to and mail-mail-reply-to.
+ (mail-send): Compute Mail-Followup-To and Mail-Reply-To headers.
+ (mail-mode-fill-paragraph): Handle those headers.
+ (mail-mailing-lists): New variable.
+ (mail-mail-reply-to, mail-mail-followup-to): New functions.
+
+2005-03-17 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-fallback): Check for `(car previous)'
+ before calling `isearch-other-end-state'.
+
+2005-03-17 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (move-beginning-of-line): Move to beginning of buffer
+ line, as well as beginning of screen line.
+
+2005-03-16 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/diary-lib.el (mark-diary-entries): Use new optional
+ argument REDRAW rather than calendar-redrawing variable.
+ * calendar/calendar.el (calendar-redrawing): Delete.
+ (redraw-calendar): Do not bind calendar-redrawing.
+
+2005-03-16 Matt Hodges <MPHodges@member.fsf.org>
+
+ * calendar/diary-lib.el (diary-redraw-calendar): Preserve point in
+ diary-file buffer.
+
+2005-03-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * help.el (describe-mode): Allow a :minor-mode-function property to
+ specify a different minor mode toggle function than the variable.
+ * simple.el (auto-fill-function):
+ * subr.el (add-minor-mode): Use it.
+
+2005-03-16 Kenichi Handa <handa@m17n.org>
+
+ * language/ethio-util.el (sera-being-called-by-w3): New variable.
+ (ethio-sera-to-fidel-ethio): Check also sera-being-called-by-w3.
+ (ethio-fidel-to-sera-buffer): Likewise.
+
+2005-03-16 Juri Linkov <juri@jurta.org>
+
+ * emacs-lisp/find-func.el (find-function-regexp):
+ Add defun-emitting macro `menu-bar-make-toggle'.
+
+ * isearch.el: Put `isearch-scroll' property to
+ `split-window-horizontally'.
+
+ * info.el: Update error messages for `debug-ignored-errors'.
+ (Info-isearch-search): Doc fix.
+ (Info-find-node): Move up code to go into info buffer before
+ recording the node to the history.
+ (Info-fontify-node): Fontify titles only if the next line
+ has two or more `*', `=', `-', `.'.
+ Display "go to this node" for empty (match-string 3).
+
+2005-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * term/mac-win.el: Add mouse pointer shape constants.
+
+2005-03-15 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (move-beginning-of-line): Use vertical-motion.
+
+2005-03-15 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-error): New variable.
+ (isearch-invalid-regexp, isearch-within-brackets): Remove.
+ (isearch-error-state): Rename from `isearch-invalid-regexp-state'.
+ (isearch-within-brackets-state): Remove.
+ (isearch-case-fold-search-state, isearch-pop-fun-state):
+ Decrease frame index.
+ (isearch-mode, isearch-top-state, isearch-push-state)
+ (isearch-edit-string, isearch-abort, isearch-search-and-update)
+ (isearch-fallback, isearch-message-prefix, isearch-message-suffix)
+ (isearch-search, isearch-lazy-highlight-new-loop):
+ Replace `isearch-invalid-regexp' with `isearch-error'.
+ Remove `isearch-within-brackets'.
+ (isearch-search): Add `search-failed' handler to `condition-case'.
+ (isearch-lazy-highlight-search): Add `condition-case' to catch
+ errors and allow `isearch-lazy-highlight-update' to try
+ highlighting from the beginning of the window.
+ (isearch-repeat): Move up code to set isearch-wrapped to t
+ before calling isearch-wrap-function.
+
+ * info.el (Info-isearch-initial-node): New internal variable.
+ (Info-search): Signal an error in isearch mode when search leaves
+ the initial node. Signal an error when `bound' is non-nil and
+ nothing was found in the current subfile.
+ (Info-isearch-search): Remove `condition-case'.
+ (Info-isearch-wrap): Don't wrap when search failed during leaving
+ the initial node. If `Info-isearch-search' is nil, wrap around
+ the current node.
+ (Info-isearch-start): New fun.
+ (Info-mode): Add buffer-local hook `Info-isearch-start' to
+ `isearch-mode-hook'.
+
+2005-03-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * simple.el (normal-erase-is-backspace): Set default to t if
+ running on Mac.
+
+ * term/mac-win.el (function-key-map): Sync with x-win.el.
+
+2005-03-15 Kenichi Handa <handa@m17n.org>
+
+ * international/mule-cmds.el (locale-language-names): Modify the
+ format of elements and add more entries.
+ (locale-preferred-coding-systems): Add more entries.
+ (set-locale-environment): Adjust for the change of
+ locale-language-names.
+
+2005-03-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs.el (smerge-ediff): Remove bogus autoload.
+
+2005-03-14 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debugger-make-xrefs): Docstring fix.
+ Ignore a `*' at the beginning of a line.
+
+ * subr.el (macro-declaration-function): Move to emacs-lisp/byte-run.el.
+ * emacs-lisp/byte-run.el (macro-declaration-function): Move from
+ subr.el.
+ (dont-compile, eval-when-compile, eval-and-compile): Use declare
+ to specify indentation.
+
+ * generic.el (define-generic-mode): Let generic-mode-list be a
+ list of strings; test membership with equal.
+
+2005-03-14 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (next-line, previous-line): Add optional try-vscroll
+ arg to recognize interactive use. Pass it on to line-move.
+ (line-move): Don't perform auto-window-vscroll when defining or
+ executing keyboard macro to ensure consistent behavior.
+
+2005-03-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * pcvs-util.el (cvs-string->strings): Strip trailing whitespace.
+
+2005-03-13 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debug): Set debug-on-exit before calling
+ debugger-setup-buffer so that backtrace marks the frames set to
+ debug-on-exit and we don't have to do it manually. Set an extra
+ debug-on-exit for macro's.
+ (debugger-setup-buffer): Don't mark the top frame manually.
+
+2005-03-12 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/byte-run.el: Replace lisp-indent-hook with
+ lisp-indent-function throughout.
+ (with-no-warnings): Set lisp-indent-function property.
+
+2005-03-12 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/dcl-mode.el (dcl-mode-syntax-table):
+ Add entry for backslash.
+
+2005-03-12 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-search): Four fixes for backward search.
+
+2005-03-11 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-language-alist): New variable.
+ * calc/calc-embed.el (calc-embedded-language-alist): Remove.
+ (calc-embedded-find-modes): Use calc-language-alist instead of
+ calc-embedded-language-alist.
+
+2005-03-11 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/calendar.el (calendar-redrawing): New internal
+ variable.
+ (redraw-calendar): Remove bogus save-excursion from previous
+ change. Bind calendar-redrawing to t for mark-diary-entries.
+ * calendar/diary-lib.el (mark-diary-entries): No need to redraw
+ calendar if that is why we were called.
+
+2005-03-11 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (make-coding-system): Set property
+ coding-system-define-form to nil.
+ (define-coding-system-alias): Likewise.
+
+2005-03-11 Kenichi Handa <handa@m17n.org>
+
+ These changes are suggested by Dave Love <fx@gnu.org>.
+
+ * textmodes/fill.el: Change encoding to iso-2022-7bit and add
+ coding: tag.
+ (adaptive-fill-regexp): Add more bullets.
+ (fill-french-nobreak-p): Add Latin-1 and Latin-9 guillemets in
+ regexps.
+
+2005-03-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * help.el (describe-mode): Properly handle non-trivial lighters.
+ Don't ignore minor modes that are not listed in minor-mode-list.
+
+ * tooltip.el (tooltip-mode): Don't complain that you can't turn the
+ feature ON when the user requests to turn it OFF.
+
+2005-03-10 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debug-entry-code): Delete it.
+ (implement-debug-on-entry): New function to replace debug-entry-code.
+ (debug-on-entry-1): Use implement-debug-on-entry. Delete the
+ second argument as the 2005-03-07 change makes it obsolete.
+ (debug-on-entry, cancel-debug-on-entry): Update call to
+ debug-on-entry-1.
+ (debug, debugger-setup-buffer): Comment update.
+ (debugger-frame-number): Update to work with implement-debug-on-entry.
+
+2005-03-10 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (math-ms-args): Declare it.
+ (calc-embedded-eval-expr, calc-embedded-eval-get-var): Use variable
+ math-ms-args.
+ (calc-embedded-subst): Use math-multi-subst-rec to substitute
+ variables.
+
+2005-03-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler, gdb-get-location):
+ Use message-box.
+
+ * tooltip.el (tooltip-mode): Use define-minor-mode and simplify.
+ (tooltip-activate-mouse-motions-if-enabled): Use dolist.
+ (tooltip-gud-tips): Simplify.
+ (tooltip-gud-tips-p): Remove superfluous :set.
+ (tooltip-gud-modes): Add fortran-mode.
+ (gdb-tooltip-print): Remove newline for tooltip-use-echo-area.
+
+ * bindings.el (mode-line-mode-menu): Add tooltip-mode to mode-line.
+
+2005-03-09 Kim F. Storm <storm@cua.dk>
+
+ * play/animate.el (animate-place-char): Use forward-line instead
+ of next-line to improve performance.
+
+2005-03-09 Simon Josefsson <jas@extundo.com>
+
+ * net/browse-url.el (browse-url-default-browser): Doc fix.
+
+2005-03-09 Miles Bader <miles@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-variable-ref)
+ (byte-compile-obsolete): Change " since VER" to " (as of Emacs VER)".
+
+2005-03-09 Kenichi Handa <handa@m17n.org>
+
+ * international/latin-1.el: Set case and syntax for 255 only if
+ set-case-syntax-set-multibyte is nil.
+
+ * textmodes/ispell.el (ispell-insert-word): New function.
+ (ispell-word): Use ispell-insert-word to insert a new word.
+ (ispell-process-line): Likewise.
+ (ispell-complete-word): Likewise.
+
+2005-03-09 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/calendar.el (redraw-calendar): Preserve point.
+ Reported by Matt Hodges <MPHodges@member.fsf.org>.
+ (calendar-week-start-day): Move after definition of
+ redraw-calendar. Delete buffer test, since redraw-calendar has
+ that now.
+
+ * calendar/diary-lib.el (mark-diary-entries): Only call
+ redraw-calendar in the first of any recursive calls.
+ Reported by Alan Shutko <ats@acm.org>.
+
+2005-03-08 Juri Linkov <juri@jurta.org>
+
+ * textmodes/sgml-mode.el (sgml-tag, html-tag-alist)
+ (html-horizontal-rule, html-line, html-image, html-checkboxes)
+ (html-radio-buttons): Add a space before the trailing `/>' where
+ sgml-xml-mode is non-nil.
+ (sgml-delete-tag): Check if the tag ends with `/>' to not delete
+ the subsequent tag of the empty XML tag.
+ (html-href-anchor): Don't set initial input to "http:".
+ (html-image): Ask for the image URL and set point inside alt="".
+ (html-name-anchor): Duplicate the name in the `id' attribute when
+ sgml-xml-mode is non-nil.
+ (html-paragraph): Remove \n before <p>.
+ (html-checkboxes, html-radio-buttons): Insert `checked="checked"'
+ instead of `checked' when sgml-xml-mode is non-nil.
+
+ * facemenu.el (list-colors-print): Print #RRGGBB in default face.
+ Remove 1 space before #RRGGBB to not truncate it on terminal
+ windows w/o fringes. Remove 1 space between bg and fg examples
+ to get more space.
+ (list-colors-duplicates): Replace `and' with `if' for `boundp' to
+ avoid byte-compile warnings.
+
+ * image-file.el (image-file-handler): Put `safe-magic' property to
+ `image-file-handler'.
+
+ * info.el (Info-isearch-search): Emulate word search in
+ isearching through multiple Info nodes with Info-search.
+ (Info-isearch-wrap): Allow isearch-word.
+
+2005-03-08 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debugger-step-through): Make sure that
+ stepping into the debugger's code is not possible.
+ (debugger-jumping-flag): Docstring update.
+
+2005-03-08 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-do-embedded): Reset mode line when
+ embedded mode begins.
+ (calc-embedded-language-alist): New variable.
+ (calc-embedded-find-modes): Use calc-embedded-language-alist to
+ set default language mode.
+
+2005-03-08 Kenichi Handa <handa@m17n.org>
+
+ * international/ccl.el (define-ccl-program): Fix docstring about
+ extra 256 bytes assured for the output buffer.
+
+ * international/utf-16.el (ccl-encode-mule-utf-16le-with-signature):
+ Fix BUFFER_MAGNIFICATION to 2.
+ (ccl-encode-mule-utf-16be-with-signature): Likewise.
+
+2005-03-07 Karl Chen <quarl@cs.berkeley.edu>
+
+ * align.el (align-rules-list): Added an alignment rule for CSS
+ declarations (applies to css-mode and html-mode buffers).
+
+2005-03-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (debug-on-entry-1): Fix handling of macros.
+
+2005-03-07 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (move-beginning-of-line): New command.
+
+ * bindings.el (global-map): Bind C-a to move-beginning-of-line.
+
+ * reveal.el (reveal-mode-map): Bind C-a to beginning-of-line.
+
+ * emulation/cua-base.el: Put CUA move property on move-end-of-line
+ and move-beginning-of-line.
+
+ * apropos.el (apropos-print): Omit command from M-x ... RET.
+
+2005-03-07 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-create-handler): Handle just MI case.
+ (gdb-send, gdb-send-item): Log items sent from gdb-send too.
+
+2005-03-06 Richard M. Stallman <rms@gnu.org>
+
+ * bindings.el (esc-map): Bind M-g to goto-line.
+
+ * facemenu.el (global-map): Bind M-o, not M-g.
+
+2005-03-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * menu-bar.el (menu-bar-file-menu): Add the same :enable to
+ "Open Directory" as for "Open File".
+
+2005-03-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * simple.el (activate-mark-hook, deactivate-mark-hook): Add defvars.
+ (push-mark-command): Run activate-mark-hook.
+
+2005-03-06 Richard M. Stallman <rms@gnu.org>
+
+ * help-mode.el (help-mode-finish): Don't alter the element
+ in view-return-to-alist if there already is one.
+
+ * jit-lock.el (jit-lock-stealth-fontify): When calling sit-for,
+ make sure the current buffer is the expected one.
+
+ * novice.el (disabled-command-function): Output in *Disabled Command*.
+ Explicitly ignore non-keyboard events, and explicitly handle C-g.
+
+ * textmodes/flyspell.el (flyspell-large-region):
+ Pass args differently for aspell.
+
+ * files.el (mode-require-final-newline): Doc fix.
+
+2005-03-03 Stephan Stahl <stahl@eos.franken.de> (tiny change)
+
+ * progmodes/which-func.el (which-function):
+ Specify NOERROR when calling imenu--make-index-alist.
+
+2005-03-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (normal-erase-is-backspace): Define default value.
+
+ * custom.el (custom-theme-set-variables): Remove unused var
+ `immediate'.
+ (custom-reevaluate-setting): Simple function to handle variables
+ that are defined before their default value can really be
+ computed.
+
+ * startup.el (command-line): Use it for temporary-file-directory,
+ small-emporary-file-directory, auto-save-file-name-transforms,
+ blink-cursor-mode, and normal-erase-is-backspace.
+
+ * font-lock.el (font-lock-fontify-keywords-region): Ensure forward
+ progress, even with buggy anchored keywords.
+
+2005-03-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * simple.el (goto-line): Remove unbalanced final parenthesis.
+
+2005-03-05 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (goto-line): Use a number at point as the default.
+ With C-u as arg, switch buffers.
+
+2005-03-05 Juri Linkov <juri@jurta.org>
+
+ * frame.el (blink-cursor-mode): Replace `emacs-quick-startup'
+ with `no-blinking-cursor'.
+
+ * startup.el (no-blinking-cursor): New defvar.
+ (command-line): Add `--no-blinking-cursor' to longopts.
+ Set `no-blinking-cursor' to t for command line arguments
+ -Q, -nbc, --no-blinking-cursor. Replace `emacs-quick-startup'
+ with `no-blinking-cursor' in the condition for calling
+ `blink-cursor-mode'.
+
+2005-03-04 Luc Teirlinck <teirllm@auburn.edu>
+
+ * menu-bar.el (menu-bar-make-mm-toggle): Doc fix.
+ (menu-bar-options-save): Add blink-cursor-mode.
+ (menu-bar-options-menu): Add blink-cursor-mode.
+
+2005-03-04 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar-version): Increase to 0.11.
+ (icalendar-export-file, icalendar-export-region)
+ (icalendar-import-file, icalendar-import-buffer): Add autoload cookies.
+ (icalendar--convert-ical-to-diary): Fix problem with DURATION.
+
+2005-03-04 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debugger-step-after-exit): Make it a defvar.
+ (debug-function-list): Ditto.
+
+2005-03-04 Robert J. Chassell <bob@rattlesnake.com>
+
+ * textmodes/texinfmt.el (texinfo-append-refill):
+ Redefine the types of line to which @refill
+ is not appended by replacing a search for `@refill\\|@bye' with
+ `@refill\\|^[ \t]*@'. The intent is to solve both the `@end
+ itemize@refill' bug and the unfilled long lines bug.
+ (texinfmt-version): Update number and date.
+
+2005-03-04 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * international/code-pages.el (windows-1250, windows-125[2-8])
+ (iso-8859-10, -13, -16, georgian-ps): Add autoload cookies.
+
+2005-03-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * frame.el (blink-cursor-mode): `emacs-quick-startup' may not be
+ bound yet.
+
+2005-03-02 Romain Francoise <romain@orebokech.com>
+
+ * ibuf-ext.el (ibuffer-filter-disable): Move back to the current
+ buffer after removing limits.
+ (ibuffer-pop-filter): Ditto.
+ Update copyright.
+
+2005-03-02 Miles Bader <miles@gnu.org>
+
+ * button.el (make-text-button): If the user doesn't specify a
+ type, use the default. Rewrite to use `add-text-properties' and
+ plist functions.
+
+2005-03-01 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (inhibit-debug-on-entry): Add docstring.
+ (debugger-jumping-flag): New var.
+ (debug-entry-code): Use it.
+ (debugger-jump): Use debugger-jumping-flag and add
+ debugger-reenable to post-command-hook.
+ (debugger-reenable): Use debugger-jumping-flag and remove itself
+ from post-command-hook.
+ (debug, debug-on-entry, cancel-debug-on-entry): Remove call to
+ debugger-reenable.
+
+2005-03-01 Robert J. Chassell <bob@rattlesnake.com>
+
+ * textmodes/texinfmt.el (texinfo-no-refill-regexp): Comment out
+ inclusion of "itemize\\|", which may be unnecessary, is certainly
+ inelegant, and stops refilling in itemize lists when formatting
+ Japanese Texinfo files to Info.
+ Update copyright to 2005.
+
+2005-03-01 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-get-location): Use a warning instead
+ of an error if GDB can't find the source file.
+
+2005-03-01 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/calendar.el (redraw-calendar): Work from any buffer,
+ not just the calendar.
+
+ * calendar/diary-lib.el (mark-diary-entries): Remove any old marks
+ first.
+ (diary-redraw-calendar): New function.
+ (make-diary-entry): Add diary-redraw-calendar to local
+ write-contents-functions. Turn off selective display before
+ inserting in diary.
+
+2005-03-01 Kim F. Storm <storm@cua.dk>
+
+ * emacs-lisp/copyright.el (copyright-fix-years): New command.
+
+2005-03-01 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/debug.el (debug-on-entry-1): Reimplement to make sure
+ that debug-entry-code can be safely removed from a function while
+ this code is being evaluated. Revert the 2005-02-27 change as the
+ new implementation no longer requires it. Make sure that a
+ function body containing just a string is not mistaken for a docstring.
+ (debug): Skip one more frame in case of debug on entry.
+ (debugger-setup-buffer): Delete one more frame line in case of
+ debug on entry.
+ (debugger-frame-number): Update to use the new text introduced by
+ the 1999-11-03 change. Skip one more frame in case of debug on entry.
+
+2005-02-28 Kim F. Storm <storm@cua.dk>
+
+ * double.el (double-translate-key): Call force-window-update after
+ read-event to avoid crash in redisplay.
+
+2005-02-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (inhibit-debug-on-entry): New var.
+ (debug): Use it. Move the inhibit-trace earlier.
+ (debug-entry-code): New const.
+ (debug-on-entry-1): Use it.
+
+2005-02-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * international/utf-16.el (ccl-encode-mule-utf-16le):
+ Fix BUFFER_MAGNIFICATION to 2.
+ (ccl-encode-mule-utf-16be): Likewise.
+
+2005-02-28 Kenichi Handa <handa@m17n.org>
+
+ * international/utf-16.el (ccl-encode-mule-utf-16le-with-signature):
+ Fix BUFFER_MAGNIFICATION to 4.
+ (ccl-encode-mule-utf-16be-with-signature): Likewise.
+
+2005-02-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * speedbar.el (speedbar-update-flag): Doc fix.
+ (speedbar-show-info-under-mouse): Give set-mouse-position the right
+ argument.
+
+2005-02-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * reveal.el (reveal-post-command): Don't try to reveal overlays which
+ have a non-nil `invisible' property but are actually visible.
+
+ * progmodes/perl-mode.el (perl-imenu-generic-expression): Add entries
+ for perldoc sections.
+ (perl-outline-regexp, perl-outline-level): New var and function.
+ (perl-mode): Use them.
+
+2005-02-27 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * calendar/diary-lib.el (diary-remind): Discard any mark portion
+ from diary-entry. Reported by Andrew Kemp <ajwk@pell.uklinux.net>.
+
+2005-02-27 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el: Comment change.
+ (custom-buffer-create-internal): Slightly reword text at top of
+ Custom buffers. Mention there that saving an option edits the
+ init file. Add link to Emacs manual node on `custom-file'.
+ (custom-magic-alist): Rewrite individual State messages to use
+ capitalized keywords. Doc fix.
+
+2005-02-27 Matt Hodges <MPHodges@member.fsf.org>
+
+ * calendar/calendar.el (calendar-buffer): Move above
+ calendar-week-start-day.
+ (calendar-week-start-day): Doc fix. Add :set function.
+ (calendar-minimum-window-height): New variable.
+ (generate-calendar-window): Only resize window if selected-window
+ is displaying the calendar buffer. Use new variable
+ calendar-minimum-window-height.
+ (generate-calendar): Reword error message.
+ (calendar-mode-map): Bind DEL to scroll-other-window-down.
+
+2005-02-27 Andreas Schwab <schwab@suse.de>
+
+ * vc.el (vc-do-command): Don't run command asynchronously when
+ operating in a remote directory.
+
+ * net/tramp.el (tramp-file-name-for-operation): Fix misapplied
+ change from sync with Tramp 2.0.47.
+
+2005-02-27 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/ispell.el (ispell-change-dictionary): Doc fix.
+
+ * textmodes/flyspell.el (flyspell-mode-on):
+ Call ispell-change-dictionary only if necessary.
+
+ * emacs-lisp/re-builder.el (regexp-builder): New function.
+
+ * register.el (describe-register-1): Explicitly handle
+ yank-excluded-properties = t.
+
+ * cus-edit.el (custom-buffer-create-internal): Improve progress msgs.
+ (custom-magic-alist): Change the status descriptions again.
+ (face widget-type): Total rewrite based on `restricted-sexp'
+ to eliminate the confusing double hiding levels.
+
+ * emacs-lisp/debug.el (debug-on-entry-1):
+ If function body is empty, add nil as body form.
+
+2005-02-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/trace.el (inhibit-trace): New var.
+ (trace-make-advice): Use it.
+
+ * emacs-lisp/debug.el (debug): Put back the inhibit-trace.
+
+2005-02-26 Kim F. Storm <storm@cua.dk>
+
+ * mouse.el (mouse-1-click-in-non-selected-windows): New defcustom.
+ (mouse-on-link-p, mouse-drag-region-1): Use it.
+
+2005-02-25 Lute Kamstra <lute@gnu.org>
+
+ * replace.el (query-replace-read-from): Fix 2005-02-19 change.
+
+2005-02-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * frame.el (blink-cursor-mode): Add :group keyword.
+
+2005-02-24 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar--decode-isodatetime):
+ New optional argument DAY-SHIFT.
+ (icalendar-export-region): Fix coding-system-for-write.
+ (icalendar--convert-ical-to-diary): Shift end-day of all-day
+ events by one.
+
+2005-02-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/tex-mode.el (tex-font-lock-keywords-3): #n is atomic.
+
+2005-02-24 Kim F. Storm <storm@cua.dk>
+
+ * international/iso-acc.el (iso-accents-compose): Fix crash
+ during redisplay. Call force-window-update after read-event
+ and delete-region to signal that window is not accurate.
+
+2005-02-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (debug): Hide the buffer if it's not killed.
+ Remove unused and inexistent var `inhibit-trace'.
+ (debugger-mode): Use run-mode-hooks.
+ (debugger-list-functions): Add buttons; setup xref stack.
+
+2005-02-23 Richard M. Stallman <rms@gnu.org>
+
+ * calendar/appt.el (appt-time-msg-list): 3rd elt of each
+ appointment says it was explicitly made.
+ (appt-add): Set the 3rd element.
+ (appt-make-list): Preserve explicit appointments.
+
+ * subr.el (find-tag-default): Catch errors in forward-sexp.
+
+2005-02-23 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-isearch-search): New defcustom.
+ (Info-isearch-search): Call the default isearch function
+ when Info-isearch-search is nil.
+ (Info-isearch-wrap): Use variable Info-isearch-search.
+
+2005-02-22 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el: Comment change.
+
+2005-02-22 Kim F. Storm <storm@cua.dk>
+
+ * progmodes/hideif.el (hide-ifdef-use-define-alist):
+ Use completing-read. Suggested by Juan-Leon Lahoz Garcia.
+
+2005-02-22 Simon Josefsson <jas@extundo.com>
+
+ * net/browse-url.el (browse-url-netscape-new-window-is-tab):
+ New variable.
+ (browse-url-netscape): Use it. Suggested by "Johann 'Myrkraverk'
+ Oskarsson" <myrkraverk@users.sourceforget.net>.
+
+2005-02-22 Kim F. Storm <storm@cua.dk>
+
+ * mouse.el (mouse-on-link-p): If arg POS is a mouse event,
+ check that window of that event is the selected window.
+ (mouse-drag-region-1): Compare mouse event window to selected
+ window before setting point.
+
+ * tooltip.el (tooltip-show-help-function): Pass event to
+ mouse-on-link-p so it can check selected window.
+
+2005-02-22 Kenichi Handa <handa@m17n.org>
+
+ * ps-mule.el (ps-mule-header-string-charsets): Delete it.
+ (ps-mule-show-warning): New function.
+ (ps-mule-begin-job): Use ps-mule-show-warning if unprintable
+ characters are found.
+
+ * ps-print.el (ps-header-footer-string): Return a list of header
+ and footer strings.
+
+2005-02-21 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
+
+ * pcvs.el (cvs-retrieve-revision): Fix thinko.
+
+2005-02-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * frame.el (blink-cursor-mode): Use define-minor-mode.
+
+ * term/mac-win.el (function-key-map): Use char-names more consistently.
+ (file-name-coding-system): Only set it for MacOS-9. The other case is
+ already handled in mule-cmds.el (where it also works when mac-win.el
+ is not used).
+
+2005-02-21 Kenichi Handa <handa@m17n.org>
+
+ * international/mule.el (ctext-pre-write-conversion): Always use
+ " *code-converting-work*" buffer for work.
+
+ * textmodes/ispell.el (ispell-dictionary-alist): Fix docstring.
+
+2005-02-20 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/scheme.el (scheme-font-lock-keywords-2): Handle named-let.
+
+2005-02-20 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * ses.el (undo-more): Restore defadvice, but only the part that
+ allows changes outside the restricted area of the buffer.
+
+2005-02-20 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move): Add fourth optional arg try-vscroll which
+ must be set to perform auto-window-vscroll.
+ When moving backwards and doing auto-window-vscroll, automatically
+ vscroll to the last part of lines which are taller than the window.
+ (next-line, previous-line): Set try-vscroll arg on line-move.
+
+2005-02-19 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * replace.el (query-replace, query-replace-regexp)
+ (replace-string, replace-regexp): When operating on region, make
+ the minibuffer prompt say so.
+
+ * isearch.el (isearch-forward): Document isearch-query-replace and
+ isearch-query-replace-regexp keybindings.
+
+2005-02-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-aent.el (math-read-token): Add local variable.
+
+ * calc/calc-prog.el (calc-user-define-edit): Add local variable.
+ (calc-edit-top): Move declaration to earlier in file.
+ (calc-edit-macro-repeats): Add local variables.
+
+ * calc/calcalg2.el: Add differentiation rule for calcFunc-coth.
+ Adjust differentiation rules for calcFunc-tan, calcFunc-cot,
+ calcFunc-tanh.
+ Adjust integration rule for calcFunc-tan.
+
+2005-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * emulation/viper-cmd.el (viper-prefix-commands): Make into a defconst.
+ (viper-exec-buffer-search): Use regexp-quote to quote buffer string.
+ (viper-minibuffer-setup-sentinel): Make some variables buffer-local.
+ (viper-skip-separators): Bug fix.
+ (viper-set-searchstyle-toggling-macros): Allow to unset macros in a
+ particular major mode.
+ (viper-del-backward-char-in-replace): Don't put deleted char on the
+ kill ring.
+
+ * emulation/viper-ex.el (viper-color-display-p): New function.
+ (viper-has-face-support-p): Use viper-color-display-p.
+
+ * emulation/viper-keym.el (viper-gnus-modifier-map): New keymap.
+
+ * emulation/viper-macs.el (viper-unrecord-kbd-macro): Bug fix.
+
+ * emulation/viper-util.el (viper-glob-unix-files):
+ Fix shell status check.
+ (viper-file-remote-p): Make equivalent to file-remote-p.
+
+ * emulation/viper.el (viper-major-mode-modifier-list):
+ Use viper-gnus-modifier-map.
+
+2005-02-19 David Kastrup <dak@gnu.org>
+
+ * subr.el (subregexp-context-p): Fix garbled doc string by adding
+ quoting.
+
+2005-02-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-math.el (calc-arctan, calc-tanh, calc-arctanh):
+ Remove extra definitions.
+ (calc-coth): New function.
+ (calcFunc-cot): Fix `let'.
+
+2005-02-19 Eli Zaretskii <eliz@gnu.org>
+
+ * faces.el (escape-glyph, minibuffer-prompt): Add commentary for
+ the reasons we use "type pc" in these faces.
+
+ * button.el (button): Ditto.
+
+2005-02-19 Michael Mauger <mmaug@yahoo.com>
+
+ * replace.el (query-replace-read-from): Set the value of
+ query-replace-from-history-variable to handle the case of an empty
+ string entered to accept the suggested default.
+
+ * net/tramp.el (tramp-file-name-for-operation):
+ Use dired-call-process instead of dired-call-process-command.
+
+2005-02-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-arith.el (math-trig-inverses, math-div-trig)
+ (math-div-non-trig): New variables.
+ (math-combine-prod-trig, math-div-new-trig, math-div-new-non-trig)
+ (math-div-isolate-trig, math-div-isolate-trig-term): New functions.
+ (math-combine-prod, math-div-symb-fancy): Add simplifications for
+ trig expressions.
+
+2005-02-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-var-update-handler)
+ (gdb-speedbar-timer-fn): Ensure speedbar updates with new values
+ for watch expressions,
+ (gdb-var-create-handler): Don't set speedbar-update-flag.
+ (gdb-post-prompt): Simplify test for speedbar.
+
+2005-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * ediff.el (ediff-set-diff-overlays-in-one-buffer)
+ (ediff-set-fine-overlays-in-one-buffer, ediff-goto-word): Make sure
+ we use the syntax table of the correct buffer.
+ (ediff-same-file-contents, ediff-same-contents): Enhancements thanks to
+ Felix Gatzemeier.
+
+ * ediff-init.el (ediff-hide-face): Check for definedness of functions.
+ (ediff-file-remote-p): Make synonymous with file-remote-p.
+ In all deffaces ediff-*-face-*, use min-colors.
+
+ * ediff-mult.el (ediff-meta-mark-equal-files): Make use of
+ ediff-recurse-to-subdirectories.
+ (ediff-mark-if-equal): Check that the arguments are strings, use
+ ediff-same-contents (after to Felix Gatzemeier).
+
+ * ediff.el (ediff-merge-on-startup): Don't set buffer-modified-p to
+ nil.
+
+2005-02-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * log-view.el (log-view-message-re): Fix up Subversion regexp.
+
+2005-02-18 David Kastrup <dak@gnu.org>
+
+ * progmodes/meta-mode.el (meta-mark-active): Fix condition to just
+ use `mark-active' when defined.
+
+2005-02-18 Kenichi Handa <handa@m17n.org>
+
+ * ps-print.el (ps-font-info-database): New entry
+ ZapfChancery-MediumItalic with correct font name. Fix font name
+ of the entry Zapf-Chancery-MediumItalic.
+
+2005-02-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * autorevert.el (auto-revert-stop-on-user-input): Further doc fix.
+
+2005-02-16 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-fallback-command): Pass user input to fallback command.
+
+2005-02-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-set-gud-minor-mode-existing-buffers)
+ (gdb-find-file-hook): Add server prefix.
+
+2005-02-16 Richard M. Stallman <rms@gnu.org>
+
+ * replace.el (perform-replace): Pass new args to replace-highlight.
+ (replace-highlight): Take region args,
+ and pass them to isearch-lazy-highlight-new-loop.
+
+ * novice.el (disabled-command-hook): Autoload the defalias
+ and the make-obsolete-variable call.
+
+ * menu-bar.el (menu-bar-select-frame): FRAME defaults to selected.
+
+ * isearch.el (isearch-lazy-highlight-start-limit)
+ (isearch-lazy-highlight-end-limit): New variables limit
+ the region for highlighting.
+ (isearch-lazy-highlight-new-loop): New args BEG and END.
+ (isearch-lazy-highlight-search): Use the new vars.
+ (isearch-lazy-highlight-update): Likewise.
+
+ * dired.el (dired-build-subdir-alist): Bind buffer-undo-list to t.
+
+ * cus-start.el (all): Use default-boundp.
+
+2005-02-15 David Casperson <casper@unbc.ca> (tiny change)
+
+ * menu-bar.el (menu-bar-select-frame): Handle current frame.
+
+2005-02-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * autorevert.el (auto-revert-stop-on-user-input)
+ (auto-revert-verbose): Doc fixes.
+
+2005-02-15 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
+
+ * international/mule-cmds.el (set-locale-environment): Remove call
+ to set-selection-coding-system on Windows.
+
+2005-02-15 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-alg.el: Add simplification rules for calcFunc-sec,
+ calcFunc-csc, calcFunc-cot, calcFunc-sech, calcFunc-csch, and
+ calcFunc-coth.
+ (math-simplify-sqrt): Add simplifications.
+
+ * calc/calc-arith.el (math-real-if-arg-functions): Add functions
+ to list.
+
+ * calc/calc-ext.el: Add functions to autoloads.
+
+ * calc/calc-math.el (calc-sec, calc-csc, calc-cot, calc-sech)
+ (calc-csch, calc-coth, calcFunc-sec, calcFunc-csc, calcFunc-cot)
+ (calcFunc-sech, calcFunc-csch, calcFunc-coth, math-sec-raw)
+ (math-csc-raw, math-cot-raw): New functions.
+
+ * calc/calc-rules.el (calc-DistribRules, calc-NegateRules): Add rules.
+
+ * calc/calc-undo.el (calc-handle-undo): Remove prefix from
+ the variable name in a message.
+
+ * calc/calc-units.el: Add simplification rules for calcFunc-sec,
+ calcFunc-csc, calcFunc-cot.
+
+ * calc/calcalg2.el: Add derivative and integration rules for
+ calcFunc-sec, calcFunc-csc, calcFunc-cot, calcFunc-sech,
+ calcFunc-csch, calcFunc-coth.
+ (math-do-integral-methods): Add to checks for when to use
+ substitutions.
+
+ * calc/calccomp.el (math-eqn-special-funcs): Add functions to list.
+
+2005-02-15 Lute Kamstra <lute@gnu.org>
+
+ * emacs-lisp/lisp-mode.el (lisp-mode-variables):
+ Add ;;;###autoload to `outline-regexp'. Suggested by Stefan Monnier
+ <monnier@iro.umontreal.ca>.
+ (lisp-outline-level): Improve efficiency. Suggested by David
+ Kastrup <dak@gnu.org>.
+
+2005-02-15 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-find-file-unhook): New variable.
+ (gdb-set-gud-minor-mode, gdb-set-gud-minor-mode-1)
+ (gdb-set-gud-minor-mode-existing-buffers): New functions.
+ (gdb-find-file-hook): New hook. Add it to find-file-hook.
+ (gdb-info-breakpoints-custom, gdb-source-info): Simplify.
+
+2005-02-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (all): Comment change.
+
+2005-02-14 Lute Kamstra <lute@gnu.org>
+
+ * cus-start.el (all): Check if symbol is void.
+
+2005-02-14 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-cite.el (reftex-do-citation): Cleanup single
+ optional argument to \cite.
+
+2005-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-buffer-create-internal): Update help message.
+ (custom-magic-alist): Update help messages.
+
+ * cus-start.el (all): Allow a var to specify a standard value.
+
+2005-02-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * custom.el (custom-theme-set-variables): Handle variable aliases.
+
+ * frame.el (blink-cursor-timer): Doc fix.
+ (blink-cursor): Make it an alias for `blink-cursor-mode' and
+ declare obsolete.
+ (blink-cursor-mode): Define with defcustom and use correct
+ standard expression in that defcustom.
+ * startup.el (command-line): Adapt to above changes in frame.el.
+
+2005-02-11 Lute Kamstra <lute@gnu.org>
+
+ * apropos.el (apropos-score-doc): Prevent division by zero.
+
+2005-02-11 Ulf Jasper <ulf.jasper@web.de>
+
+ * calendar/icalendar.el (icalendar--get-event-property): Doc fix.
+ (icalendar--get-event-property-attributes)
+ (icalendar--get-event-properties)
+ (icalendar--datetime-to-diary-date): New functions.
+ (icalendar--split-value): Doc fix.
+ (icalendar--datetime-to-noneuropean-date)
+ (icalendar--datetime-to-european-date): New optional argument
+ SEPARATOR. Return result as a string instead of a list.
+ (icalendar--get-weekday-number): Check if ABBREVWEEKDAY is nil.
+ (icalendar--convert-string-for-export): Rename arg S to STRING.
+ (icalendar-export-region): Doc fix. Change name of error buffer.
+ Save output buffer.
+ (icalendar-import-file): Add blank at end of prompt.
+ (icalendar-import-buffer): Doc fix. Do not switch to error
+ buffer. Indicate status in return value.
+ (icalendar--convert-ical-to-diary): Doc fix. Change name of error
+ buffer. Save output buffer. Handle exception from recurrence
+ rules (EXDATE, EXRULE). Handle start- and end-date of recurring
+ events. Fix problems with weekly all-day events.
+
+2005-02-10 Richard M. Stallman <rms@gnu.org>
+
+ * simple.el (eval-expression-print-format):
+ Avoid warning about edebug-active.
+
+ * help.el (help-for-help-internal): Rename from help-for-help.
+ (help-for-help): Define with defalias.
+
+ * font-core.el (font-lock-default-function): Use with-no-warnings.
+
+ * cus-edit.el (custom-buffer-create-internal): Improve help-echo.
+
+ * custom.el (defface): Doc fix.
+
+2005-02-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-ann3): Re-instate GDB command "set
+ width 0" to prevent word wrapping problems.
+
+2005-02-09 Kim F. Storm <storm@cua.dk>
+
+ * ido.el (ido-file-extensions-order): New defcustom.
+ (ido-file-extension-lessp, ido-file-extension-aux)
+ (ido-file-extension-order): New advanced file ordering.
+ (ido-file-lessp): New simple file ordering.
+ (ido-sort-list): Remove.
+ (ido-make-file-list): Use ido-file-lessp or ido-file-extension-lessp.
+ (ido-make-dir-list, ido-completion-help): Use ido-file-lessp.
+
+2005-02-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * progmodes/grep.el (grep-regexp-alist): Match an optional ^[[K
+ that some versions of grep produce.
+ (grep-mode-font-lock-keywords): Likewise.
+
+2005-02-09 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-location-list): New variable.
+ (gdb-cdir): Delete.
+ (gdb-info-breakpoints-custom, gdb-goto-breakpoint)
+ (gdb-source-info): Treat case when source file is in another
+ directory properly.
+ (gdb-get-location): New function.
+
+2005-02-07 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-prog.el (calc-write-parse-table-part)
+ (calc-fix-token-name): Fix a check for language type.
+
+ * calc/calccomp.el (math-compose-expr): Fix a check for language type.
+
+2005-02-07 Andre Spiegel <spiegel@gnu.org>
+
+ * vc-hooks.el (vc-make-version-backup): Ignore file-errors such
+ as directory not writable.
+
+2005-02-07 Kim F. Storm <storm@cua.dk>
+
+ * emulation/cua-base.el (cua-max-undo, cua-undo): Remove.
+ (cua--standard-movement-commands): Remove list.
+ Instead, set CUA property value to move for movement commands.
+ (cua-movement-commands): Remove. Users must set CUA prop instead.
+ (cua--pre-command-handler): Check CUA property.
+ (cua--init-keymaps): Don't remap undo commands.
+ (cua-mode): Don't call cua--rectangle-on-off.
+
+ * emulation/cua-rect.el (cua--undo-list, cua--tidy-undo-counter)
+ (cua--rect-undo, cua--tidy-undo-lists, cua--rectangle-on-off): Remove.
+ (cua--rect-undo-set-point): New var.
+ (cua--rectangle-undo-boundary): Setup undo apply entry.
+ (cua--rect-undo-handler): New function for rectangle undo.
+ (cua--rect-start-position, cua--rect-end-position): Add.
+ (cua--rectangle-post-command): Call cua--rectangle-set-corners
+ for restored rectangle. Set point if cua--rect-undo-set-point.
+
+2005-02-06 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-lang.el (calc-tex-language): Display more information
+ in messages.
+
+ * calc/calccomp.el (math-compose-expr): Allow multiline matrices
+ in TeX mode.
+
+2005-02-06 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/lisp.el (buffer-end): Doc fix.
+
+2005-02-05 Arne J,Ax(Brgensen <arne@arnested.dk> (tiny change)
+
+ * net/ldap.el (ldap-search-internal): Support attributes with
+ optional descriptions separated by a semi-colon, as in
+ "userCertificate;binary".
+
+2005-02-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
+ isn't a cons (i.e. the version is 0).
+
+2005-02-05 Eli Zaretskii <eliz@gnu.org>
+
+ * help.el (help-for-help): Doc fix.
+
+2005-02-05 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el: Update copyright. Put GDB-Frames before
+ GDB-Windows on the menu-bar as this works better.
+
+2005-02-04 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-embedded-update): Don't put in
+ unnecessary newlines. Adjust the end of formula marker.
+
+ * calc/calc-lang.el (math-latex-parse-frac): Don't use arguments.
+ (math-latex-parse-two-args): New function.
+
+2005-02-03 Lute Kamstra <lute@gnu.org>
+
+ * help-fns.el (help-with-tutorial): Make sure that users cannot
+ remove the entire text of the tutorial by means of `undo'.
+
+2005-02-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/ispell.el (ispell-internal-change-dictionary): Fix problem
+ in recent changes, where the ispell process was repeatedly
+ killed & restarted.
+
+ * international/mule-cmds.el (set-locale-environment): Set file-name
+ coding system to utf-8 on Darwin systems.
+ (set-default-coding-systems): Don't set default-file-name-coding-system
+ on Darwin systems.
+
+2005-02-03 Richard M. Stallman <rms@gnu.org>
+
+ * hi-lock.el (hi-lock-mode): Turning on Hi-Lock turns on Font-Lock.
+
+2005-02-03 Matt Hodges <MPHodges@member.fsf.org>
+
+ * faces.el (list-faces-display): Add optional argument.
+
+2005-02-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * font-core.el (font-lock-default-function): Handle the rare case where
+ only font-lock-keywords is set.
+
+2005-02-02 Kenichi Handa <handa@m17n.org>
+
+ * international/characters.el: Cancel previous change for
+ I-WITH-DOT-ABOVE and DOTLESS-i.
+
+ * international/latin-5.el: Cancel previous change.
+
+2005-02-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gud.el: Correction to syntax in gud-menu-map.
+
+2005-02-02 Kenichi Handa <handa@m17n.org>
+
+ * international/latin-5.el (tbl): Setup cases of I-WITH-DOT-ABOVE,
+ DOTLESS-i.
+
+ * international/characters.el: Setup cases of GREEK-FINAL-SIGMA,
+ Y-WITH-DIAERESIS, I-WITH-DOT-ABOVE, DOTLESS-i.
+
+ * case-table.el (get-upcase-table): New function.
+ (copy-case-table): Copy upcaes table too if non-nil.
+ (set-case-syntax-delims): Maintain upcase table too.
+ (set-case-syntax-pair): Likewise.
+ (set-upcase-syntax, set-downcase-syntax): New functions.
+ (set-case-syntax): Maintain upcase table too.
+
+2005-02-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-goto-info): Delete.
+
+ * progmodes/gud.el (gud-goto-info): New function.
+ (gud-tool-bar-map): Use correct icon.
+
+2005-02-01 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/lisp-mode.el (lisp-indent-function): Fix bug:
+ When delegating, order args in the funcall correctly.
+
+2005-02-01 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs-lisp/lisp-mode.el (lisp-indent-function): Doc fix.
+
+2005-02-01 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex.el (reftex-access-scan-info): Error out in a
+ buffer not visiting a file.
+
+2005-01-31 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-embed.el (calc-embedded-find-bounds): Set the formula
+ bound on the line with the formula.
+
+2005-01-31 Kim F. Storm <storm@cua.dk>
+
+ * ses.el (ses-create-cell-variable-range)
+ (ses-destroy-cell-variable-range, ses-reset-header-string)
+ (ses-set-with-undo, ses-unset-with-undo, ses-aset-with-undo)
+ (ses-insert-row): Fix format of apply undo entries.
+
+2005-01-31 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-aent.el (math-read-token): Separate the TeX and LaTeX
+ parts.
+
+ * calc/calc-embed.el (calc-embedded-open-formula)
+ (calc-embedded-close-formula): Ignore matrix environments.
+
+ * calc/calc-ext.el (math-read-big-expr): Make LaTeX the default
+ TeX mode.
+
+ * calc/calc-lang.el (math-function-table, math-oper-table)
+ (math-variable-table): Adjust the LaTeX portions.
+
+ * calc/calc.el (math-tex-ignore-words): Remove LaTeX portion.
+ (math-latex-ignore-words): New constant.
+
+2005-01-31 Richard M. Stallman <rms@gnu.org>
+
+ * textmodes/ispell.el (ispell-local-dictionary-overridden): New var.
+ (ispell-local-dictionary): Doc fix.
+ (ispell-dictionary-alist): Don't include ispell-local-dictionary-alist.
+ Don't reinitialize at run time. Don't defcustom.
+ All uses changed to append ispell-local-dictionary-alist,
+ or check it first.
+ (ispell-current-dictionary): New variable for dictionary in use.
+ (ispell-dictionary): Now used only for global default.
+ (ispell-start-process): Set ispell-current-dictionary,
+ not ispell-dictionary.
+ (ispell-change-dictionary): Use this only for setting
+ user preferences.
+ (ispell-internal-change-dictionary): New function
+ to change the current dictionary in use.
+ (ispell-region, ispell-process-line, ispell-buffer-local-dict):
+ Use ispell-current-dictionary.
+ Handle ispell-local-dictionary-overridden.
+ (ispell-buffer-local-dict): Call ispell-internal-change-dictionary.
+
+2005-01-31 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-aent.el (math-read-token): Add support for LaTeX.
+
+ * calc/calc-ext.el: Add calc-latex-language to autoloads.
+ (calc-mode-map): Add calc-latex-language.
+
+ * calc/calc-lang.el (calc-latex-language, math-latex-parse-frac)
+ (math-latex-print-frac): New functions.
+ (math-oper-table, math-function-table, math-variable-table)
+ (math-complex-format, math-input-filter): Add latex properties.
+ (calc-set-language): Set math-expr-special-function-mapping.
+
+ * calc/calc-prog.el (calc-edit-user-syntax, calc-fix-token-name)
+ (calc-write-parse-table-part): Add LaTeX support.
+
+ * calc/calc.el (calc-language): Adjust docstring.
+ (calc-set-mode-line): Add LaTeX support.
+ (math-expr-special-function-mapping): New variable.
+ (math-tex-ignore-words): Add to list.
+
+ * calc/calccomp.el (math-compose-expr, math-compose-rows):
+ Add LaTeX support.
+ (math-compose-expr): Add support for special functions.
+
+ * calc/calc-help.el (calc-d-prefix-help): Add LaTeX.
+
+2005-01-31 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-memory-address)
+ (gdb-memory-repeat-count, gdb-memory-format, gdb-memory-unit)
+ (gdb-memory-mode-map, gdb-memory-format-keymap)
+ (gdb-memory-format-menu, gdb-memory-unit-keymap)
+ (gdb-memory-unit-menu): New variables for a buffer
+ that lets the user examine program memory.
+ (gdb-memory-set-address, gdb-memory-set-repeat-count)
+ (gdb-memory-format-binary, gdb-memory-format-octal)
+ (gdb-memory-format-unsigned, gdb-memory-format-signed)
+ (gdb-memory-format-hexadecimal, gdb-memory-format-menu)
+ (gdb-memory-format-menu-1, gdb-memory-unit-giant)
+ (gdb-memory-unit-word, gdb-memory-unit-halfword)
+ (gdb-memory-unit-byte, gdb-memory-unit-menu)
+ (gdb-memory-unit-menu-1, gdb-make-header-line-mouse-map)
+ (gdb-memory-mode, gdb-memory-buffer-name)
+ (gdb-display-memory-buffer, gdb-frame-memory-buffer):
+ New functions for above buffer.
+
+2005-01-30 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (custom-bury-buffer): Function deleted.
+ (custom-buffer-done-function): Option deleted.
+ (custom-buffer-done-kill): New replacement option.
+ (Custom-buffer-done): Call quit-window.
+ (custom-buffer-create-internal): Update for above changes.
+
+2005-01-29 Luc Teirlinck <teirllm@auburn.edu>
+
+ * simple.el (undo-ask-before-discard): New var.
+ (undo-outer-limit-truncate): Implement it.
+ (undo-extra-outer-limit): Doc update.
+
+2005-01-29 Richard M. Stallman <rms@gnu.org>
+
+ * ses.el (undo-more): Delete defadvice.
+ (ses-begin-change): Doc fix.
+
+ * dired.el (dired-mode-map): Remap `undo' and `advertised-undo'
+ instead of rebinding C-x u and C-_.
+
+ * files.el (normal-backup-enable-predicate): Return nil for files
+ in /tmp, regardless of temporary-file-directory.
+
+ * man.el (Man-getpage-in-background): Disable undo in Man buffer.
+
+ * rect.el (delete-rectangle-line, delete-extract-rectangle-line)
+ (open-rectangle, delete-whitespace-rectangle-line)
+ (clear-rectangle-line): If FILL, pass t instead of FILL
+ for move-to-column's 2nd arg.
+
+ * simple.el (undo): Fix the test for continuing a series of undos.
+ (undo-more): Set pending-undo-list to t when we reach end.
+ (pending-undo-list): Move up defvar.
+
+ * wid-edit.el (widget-button-click):
+ Shorten the range of the track-mouse binding.
+
+ * comint.el (comint-insert-input): Undo previous changes;
+ use last-input-event in interactive spec.
+
+2005-01-29 Eli Zaretskii <eliz@gnu.org>
+
+ * progmodes/compile.el (compilation-start): Bind buffer-read-only
+ to nil before invoking call-process. Reset buffer's modified flag
+ after fontifying it in the no-async branch.
+
+ * wid-edit.el (widget-specify-button): If mouse pointer shape
+ cannot be changed, use mouse face instead.
+
+2005-01-29 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-info-breakpoints-custom)
+ (gdb-goto-breakpoint): Make breakpoint handling work on template
+ functions in C++. Reported by Martin Reed <mjreed@essex.ac.uk>.
+ (gdb-assembler-custom): Update to recognize breakpoint information
+ added on 2005-01-19.
+
+2005-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/scheme.el (scheme-mode-variables): Set comment-add.
+ (dsssl-mode): Use define-derived-mode.
+ (scheme-mode-initialize): Remove.
+ (scheme-mode): Use run-mode-hooks.
+
+ * cus-edit.el (customize-group-other-window)
+ (custom-buffer-create-other-window): Don't override special-display-*.
+ (custom-mode-map): Make it dense.
+
+ * emacs-lisp/lisp-mode.el (eval-defun-1): Make sure `defvar' always
+ sets the default value.
+
+2005-01-28 Eli Zaretskii <eliz@gnu.org>
+
+ * descr-text.el: Add more keywords.
+
+2005-01-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * speedbar.el: Avoid unnecessary use of locate-library.
+
+ * international/mule-cmds.el (standard-display-european-internal):
+ Don't fiddle with latin-1 non-break space any more since it's now
+ special cased in the C code.
+ Don't "do&undo" setting for 160 (especially, don't undo incorrectly).
+
+2005-01-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-start.el (all): Add `undo-outer-limit'.
+
+2005-01-25 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
+
+ * textmodes/bibtex.el (bibtex-format-entry):
+ Use `bibtex-empty-field-re' only on the text of fields, not on entire
+ field lines.
+ (bibtex-autofill-entry): Use `bibtex-empty-field-re' on a string,
+ not on part of a buffer.
+
+2005-01-25 Lute Kamstra <lute@gnu.org>
+
+ * textmodes/bibtex.el (bibtex-empty-field-re): Don't match
+ nonempty field text strings like "{letters\\macro{}more letters}".
+ Clarify docstring.
+ (bibtex-sort-entry-class, bibtex-autokey-titleword-ignore)
+ (bibtex-entry-offset, bibtex-parse-association)
+ (bibtex-parse-field-name): Fix typos in docstrings.
+ (bibtex-field-list, bibtex-find-crossref): Fix typos in error messages.
+
+2005-01-24 Dan Nicolaescu <dann@ics.uci.edu>
+ Juri Linkov <juri@jurta.org>
+
+ * textmodes/reftex-global.el (reftex-isearch-push-state-function)
+ (reftex-isearch-pop-state-function, reftex-isearch-isearch-search)
+ (reftex-isearch-switch-to-next-file, reftex-isearch-turn-off)
+ (reftex-isearch-turn-on, reftex-isearch-minor-mode): New functions.
+
+ * textmodes/reftex.el (reftex-mode-menu): Add entry for reftex
+ isearch minor mode.
+
+2005-01-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * help-at-pt.el (help-at-pt-display-when-idle): Add autoload cookie.
+
+2005-01-24 Lute Kamstra <lute@gnu.org>
+
+ * textmodes/ispell.el (ispell-dictionary-alist-4): Rewrite the
+ CASECHARS and NOT-CASECHARS regular expressions of the
+ "nederlands" and "nederlands8" dictionaries to prevent a "Range
+ striding over charsets" error.
+
+2005-01-24 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-store.el (calc-declare-variable): Use calc-var-name to
+ display variable name.
+
+2005-01-24 Kenichi Handa <handa@m17n.org>
+
+ * international/encoded-kb.el (encoded-kbd-iso2022-single-shift):
+ Fix setting of the element of encoded-kbd-iso2022-invocations.
+
+2005-01-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-goto-breakpoint, gdb-frames-select)
+ (gdb-threads-select): Change to also accept mouse events.
+ (gdb-mouse-goto-breakpoint, gdb-frames-mouse-select)
+ (gdb-threads-mouse-select): Delete.
+
+2005-01-23 Luc Teirlinck <teirllm@auburn.edu>
+
+ * files.el (insert-directory): Take care of empty directory,
+ listed without -a switch.
+
+2005-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/refill.el (refill-post-command-function):
+ Add `indent-new-comment-line' and `reindent-then-newline-and-indent'
+ to the list of functions that we should be careful not to undo.
+ (refill-late-fill-paragraph-function): Remove.
+ (refill-saved-state): New var.
+ (refill-mode): Use it to save fill-paragraph-function.
+ Save also the value of auto-fill-function.
+
+ * term/w32-win.el: Simplify code.
+
+2005-01-23 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move): Adapt to new return value from
+ pos-visible-in-window-p.
+
+ * simple.el (line-move): Fix last change. Check partial
+ visibility at point rather than at window-start.
+
+2005-01-22 Jason Rumney <jasonr@gnu.org>
+
+ * term/w32-win.el (xw-defined-colors): Remove debug-message.
+
+2005-01-22 David Kastrup <dak@gnu.org>
+
+ * progmodes/grep.el: Add alias `find-grep' for `grep-find'.
+
+2005-01-22 Eli Zaretskii <eliz@gnu.org>
+
+ * type-break.el (type-break-mode): Add a test for
+ type-break-file-name being non-nil.
+
+2005-01-22 Toby Allsopp <Toby.Allsopp@navman.com> (tiny change)
+
+ * net/eudc.el (top level): Call (message "") via progn, so that
+ eudc-options-file is loaded.
+
+2005-01-22 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (line-move-1): Rename from line-move.
+ (line-move): New function that adjusts vscroll for partially
+ visible rows, and calls line-move-1 otherwise.
+
+2005-01-21 Ren,Ai(B Kyllingstad <listmailxemacs@kyllingstad.com>
+
+ * pcomplete.el: Define pcomplete-read-event instead of read-event,
+ since it's not a complete read-event implementation.
+
+2005-01-20 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-ext.el (calc-fancy-prefix-other-key): Set prefix arg
+ for called function.
+
+2005-01-20 Steven Tamm <steventamm@mac.com>
+
+ * term/mac-win.el (process-connection-type): Remove.
+ Controlled now by s/darwin.h:PTY_ITERATION.
+
+2005-01-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.el (handle-select-window): Don't switch window when we're
+ in the minibuffer.
+
+2005-01-10 Paul Pogonyshev <pogonyshev@gmx.net>
+
+ * subr.el (dotimes-with-progress-reporter): New macro.
+
+ * ses.el (ses-dotimes-msg): Remove macro.
+ Use `dotimes-with-progress-reporter' instead.
+
+2005-01-19 Steven Tamm <steventamm@mac.com>
+
+ * term/mac-win.el (process-connection-type): Use new
+ operating-system-release variable to use ptys on Darwin 7 (OS X
+ 10.3) when using carbon build.
+
+2005-01-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-ext.el (calc-fancy-prefix-other-key): Don't clear
+ flags if the last command was a tab or M-tab.
+
+ * calc/calc-prog.el (calc-user-define-edit): Put original formula
+ in formula editing buffer.
+
+2005-01-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Add help-echo for
+ breakpoint image symbol in margin.
+
+2005-01-19 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-prog.el (calc-execute-kbd-macro):
+ Ignore calc-keep-arg-flag.
+
+2005-01-19 Kenichi Handa <handa@m17n.org>
+
+ * textmodes/ispell.el (ispell-looking-at): New function.
+ (ispell-process-line): Use ispell-looking-at to compare the ispell
+ output and the buffer contents.
+
+2005-01-18 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-display-raw): Fix docstring.
+
+2005-01-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (blink-matching-open): Strip extra info from syntax.
+
+ * progmodes/sh-script.el (sh-here-doc-open-re): Don't allow | or other
+ funny chars in the end-of-here-doc marker.
+
+2005-01-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * progmodes/gdb-ui.el (gdb-put-string): Copy/create strings so
+ that enable/disabled state of breakpoints is shown correctly in
+ fringe and on ttys.
+ (gdb-put-breakpoint-icon, gdb-info-breakpoints-custom):
+ Add breakpoint information as text properties.
+ (gdb-mouse-toggle-breakpoint):
+ Rename to gdb-mouse-set-clear-breakpoint.
+ (gdb-mouse-toggle-breakpoint): New function. Enable/disable
+ breakpoints in the margin.
+ (gdb-remove-strings): Simplify.
+
+2005-01-17 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-yank.el (calc-edit-mode): Inhibit read-only when
+ erasing buffer.
+
+2005-01-17 Richard M. Stallman <rms@gnu.org>
+
+ * progmodes/grep.el (grep-find): Copy from `grep' the condition
+ for calling grep-compute-defaults.
+
+ * play/decipher.el (decipher-mode): Don't call decipher-read-alphabet
+ if buffer is empty.
+
+ * emacs-lisp/lisp.el (backward-kill-sexp, kill-sexp): Doc fixes.
+
+2005-01-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * hilit-chg.el (highlight-changes-mode): Don't autoload.
+
+ * bindings.el (mode-line-mode-menu): Use bound-and-true-p for all the
+ non-preloaded variables.
+
+2005-01-17 Steven Tamm <steventamm@mac.com>
+
+ * textmodes/tex-mode.el (tex-start-shell): Adding -i to the
+ tex-shell cause to force interactivity when using pipes.
+
+2005-01-17 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (just-one-space): Make arg optional.
+
+2005-01-17 Nick Roberts <nickrob@snap.net.nz>
+
+ * xt-mouse.el (xterm-mouse-event): Set new optional fourth arg in
+ posn-at-x-y to t to access left-margin.
+
+2005-01-16 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.0.47.
+
+ * net/tramp.el (tramp-operation-not-permitted-regexp): New defcustom,
+ catching keep-date problems in cp/scp operations.
+ (tramp-handle-copy-file): Don't call `set-file-modes'
+ unconditionally. Specialized functions should know better what is
+ necessary. This improves performance a little bit, and the
+ functions could catch errors with `cp -p' and `scp -p'.
+ (tramp-do-copy-or-rename-file-via-buffer)
+ (tramp-do-copy-or-rename-file-out-of-band): Call `set-file-modes'
+ when appropriate.
+ (tramp-do-copy-or-rename-file-directly): Mask `cp -p' error.
+ Call `set-file-modes' when appropriate.
+ (tramp-action-out-of-band): Mask `scp -p' error. Reported by Isak
+ Johnsson <isak@hypergene.com>.
+ (tramp-get-buffer, tramp-get-debug-buffer): Discard the undo list
+ of both Tramp buffer and debug buffer. Reported by Joakim Verona
+ <joakim@verona.se>.
+ (tramp-file-name-for-operation): Mark `shell-command' as magic for
+ Emacs only.
+
+ * net/tramp-util.el (tramp-minor-mode): New minor mode. Add it to
+ `find-file-hooks' and `dired-mode-hook'.
+ (tramp-minor-mode-map): Respective map. Add remapping for
+ `compile' and `recompile'.
+ (tramp-remap-command, tramp-recompile): New defuns.
+ (tramp-compile): Enable `tramp-minor-mode' and `compilation-mode'
+ in buffer "*Compilation*". Call the commands asynchronously.
+
+ * net/tramp-vc.el (tramp-vc-do-command, tramp-vc-do-command-new)
+ (tramp-vc-simple-command): Call `tramp-handle-shell-command' but
+ `shell-command', because it isn't magic in XEmacs. Reported by
+ Adrian Aichner <adrian@xemacs.org>.
+
+ * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add entry for
+ `substitute-in-file-name'.
+ (tramp-smb-handle-substitute-in-file-name): New defun.
+ (tramp-smb-advice-PC-do-completion): Delete advice.
+
+2005-01-16 Kai Grossjohann <kgrossjo@eu.uu.net>
+
+ * net/tramp.el (tramp-wait-for-output): Fix typo in echo processing.
+ Fix error in deleting region.
+
+2005-01-15 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/lisp-mnt.el (lm-with-file): Use Lisp mode in temp buffer.
+ In non-temp buffer, switch syntax table temporarily.
+
+ * emacs-lisp/lisp-mode.el (indent-pp-sexp): Doc fix.
+
+ * replace.el (occur-accumulate-lines, occur-engine): Avoid warnings.
+
+ * tar-mode.el (tar-extract): Bind buffer-undo-list to t.
+
+ * imenu.el (imenu--split-menu): Copy menulist before sorting.
+ (imenu--generic-function): Use START, not BEG, as pos of definition.
+
+ * simple.el (just-one-space): Argument specifies number of spaces.
+
+ * simple.el (eval-expression-print-format): Avoid warning
+ about edebug-active.
+
+2005-01-15 James R. Van Zandt <jrvz@comcast.net> (tiny change)
+
+ * progmodes/sh-script.el: Code copied from make-mode.el
+ with small changes,
+ (sh-mode-map): Bind C-c C-\.
+ (sh-backslash-column, sh-backslash-align): New variables.
+ (sh-backslash-region, sh-append-backslash): New functions.
+
+2005-01-15 Sergey Poznyakoff <gray@Mirddin.farlep.net>
+
+ * mail/rmail.el: Updated to work with movemail from GNU Mailutils
+ (rmail-pop-password, rmail-pop-password-required): Move to
+ rmail-obsolete group.
+ (rmail-set-pop-password): Rename to rmail-set-remote-password.
+ All callers updated.
+ (rmail-get-pop-password): Rename to rmail-get-remote-password.
+ Take an argument specifying whether it is POP or IMAP mailbox we
+ are using. All callers updated.
+ (rmail-pop-password-error): Rename to
+ rmail-remote-password-error. Added mailutils-specific error message.
+ (rmail-movemail-search-path)
+ (rmail-movemail-variant-in-use): New variables.
+ (rmail-remote-password, rmail-remote-password-required):
+ New customization variables.
+ (rmail-probe, rmail-autodetect, rmail-movemail-variant-p): New funs.
+ (rmail-parse-url): New function.
+ (rmail-get-new-mail, rmail-insert-inbox-text): Update for use
+ with GNU mailutils movemail.
+
+2005-01-15 Kevin Ryde <user42@zip.com.au>
+
+ * info-look.el (c-mode/symbol): Add ^` to prefix, and change
+ suffix to space, $ or '$, to correctly position point when going
+ to @table style constants like DBL_MAX.
+
+2005-01-15 Jorgen Schaefer <forcer@forcix.cx> (tiny change)
+
+ * type-break.el (type-break-mode, type-break-file-time)
+ (type-break-file-keystroke-count, type-break-choose-file):
+ Don't store data in or load data from the file if type-break-file-name
+ is nil.
+ (type-break-file-name): Doc update as per the above.
+
+2005-01-15 Stephen Eglen <S.J.Eglen@damtp.cam.ac.uk> (tiny change)
+
+ * woman.el (woman-dired-define-key-maybe): If KEY is undefined,
+ lookup-key might return nil; handle that.
+
+2005-01-15 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/ebrowse.el (ebrowse-class-in-tree):
+ Return the tail of the tree rather than the element found,
+ thus enabling the tree to be setcar'd.
+
+2005-01-14 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/org.el (org-show-following-heading): New option.
+ (org-show-hierarchy-above): Use `org-show-following-heading'.
+ (org-cycle): Documentation fix.
+
+ * textmodes/org.el (orgtbl-optimized): New option.
+ (orgtbl-mode): New command, a minor mode.
+ (orgtbl-mode-map): New variable.
+ (turn-on-orgtbl, orgtbl-mode, orgtbl-make-binding)
+ (orgtbl-error, orgtbl-self-insert-command)
+ (orgtbl-delete-backward-char, orgtbl-delete-char): New functions.
+
+ * textmodes/org.el (org-mode): `org-table-may-need-update' is now
+ a local variable in each org-mode buffer.
+
+ * textmodes/org.el (org-set-regexps-and-options): Rename from
+ `org-set-regexps'. Added checking for STARTUP keyword.
+ (org-get-current-options): Add STARTUP options.
+ (org-table-insert-row): Make mode intelligent about when
+ realignment is needed.
+ (org-self-insert-command, org-delete-backward-char, org-delete-char):
+ New commands.
+ (org-enable-table-editor): New default value `optimized'.
+ (org-table-blank-field): Support blanking regions if active.
+
+2005-01-14 Carsten Dominik <dominik@science.uva.nl>
+
+ * textmodes/reftex-cite.el (reftex-bib-sort-year): Catch the case
+ if the year is not given.
+
+ * textmodes/reftex-ref.el (reftex-replace-prefix-escapes):
+ Add new escapes %m and %M, fixed bug with %F by adding
+ save-match-data.
+ (reftex-reference): Remove ?. from list of spaces.
+ (reftex-label-info): Add automatic label prefix recognition.
+
+ * textmodes/reftex-index.el (reftex-index-next-phrase):
+ Add slave parameter to call of `reftex-index-this-phrase'.
+ (reftex-index-this-phrase): New optional argument.
+ (reftex-index-region-phrases): Add slave parameter to call of
+ `reftex-index-this-phrase'.
+ (reftex-display-index): New argument redo.
+ (reftex-index-rescan): Add `redo' to arguments of
+ `reftex-display-index'.
+ (reftex-index-Rescan, reftex-index-revert)
+ (reftex-index-switch-index-tag): Add `redo' to arguments of
+ `reftex-display-index'.
+ (reftex-index-make-phrase-regexp): Fix bug with case-sensitive
+ indexing. Fix bug with matching is there is a quote before or
+ after the word.
+
+ * textmodes/reftex-cite.el (reftex-all-used-citation-keys):
+ Fix bug when collecting citation keys in lines with comments.
+ (reftex-citation): Prefix argument no longer rescans the document,
+ but forces prompting for optional arguments of cite macros.
+ (reftex-do-citation): Prompting for optional arguments implemented.
+
+ * textmodes/reftex-vars.el (reftex-cite-format-builtin):
+ Add optional arguments to most cite commands.
+ (reftex-cite-cleanup-optional-args): New option
+ (reftex-cite-prompt-optional-args): New option.
+ (reftex-trust-label-prefix): New option.
+
+ * textmodes/reftex-toc.el (reftex-toc-find-section):
+ Add push-mark before changing the position in the buffer.
+
+ * textmodes/reftex.el (reftex-prefix-to-typekey-alist): New variable.
+ (reftex-compile-variables): Compute reftex-prefix-to-typekey-alist.
+
+2005-01-14 Nick Roberts <nickrob@snap.net.nz>
+
+ * xt-mouse.el (xterm-mouse-event): Compute window co-ordinates
+ more carefully.
+
+2005-01-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textmodes/sgml-mode.el (sgml-fill-nobreak): New fun.
+ (sgml-mode): Use it.
+ (sgml-get-context): Better keep track of implicitly closed tags.
+
+2005-01-13 Kenichi Handa <handa@m17n.org>
+
+ * textmodes/ispell.el: These changes are to fix misalignment error
+ caused by equivalent characters of different Emacs charsets.
+ (ispell-unified-chars-table): New variable.
+ (ispell-get-decoded-string): New function.
+ (ispell-get-casechars, ispell-get-not-casechars)
+ (ispell-get-otherchars): Call ispell-get-decoded-string.
+
+2005-01-12 Johan Bockg,Ae(Brd <bojohan@users.sourceforge.net>
+
+ * custom.el (custom-declare-variable): Just put symbol instead
+ of (defvar . symbol) in `current-load-list'.
+
+2005-01-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-lisp/elint.el: Fixed typo in Commentary section.
+
+2005-01-12 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-help.el (calc-describe-key): Use temporary info buffer
+ to create a Calc summary.
+
+2005-01-12 Kim F. Storm <storm@cua.dk>
+
+ * mouse.el (mouse-on-link-p): Change functionality and doc
+ string to comply with latest description in lisp ref.
+
+2005-01-12 Nick Roberts <nickrob@snap.net.nz>
+
+ * xt-mouse.el (xterm-mouse-translate, xterm-mouse-event):
+ Enable mouse clicks on mode-line, header-line and margin.
+ (event-type): Give mouse event symbols an `event-kind' property
+ with value `mouse-click'.
+
+2005-01-12 Juri Linkov <juri@jurta.org>
+
+ * facemenu.el (list-colors-display): Add new arg buffer-name.
+ Use it. Fix docstring. Replace code for identifying duplicate
+ colors by the name with call to `list-colors-duplicates' which
+ identifies duplicate colors by the value unless the color
+ is one of special Windows colors. Set truncate-lines to t.
+ Print sorted duplicate color names on each line. Indent to 22
+ \(the longest color name in rgb.txt) instead of 20. Optimize.
+ (list-colors-duplicates): New function.
+ (facemenu-color-name-equal): Delete function.
+
+ * facemenu.el (list-colors-print): New function created from code
+ in list-colors-display. Print #RRGGBB at the window right edge.
+ (list-colors-display): When temp-buffer-show-function is not
+ defined, call list-colors-print from temp-buffer-show-hook
+ to get the right value of window-width in list-colors-print
+ after the buffer is displayed.
+
+ * simple.el (pop-mark): Move deactivate-mark out of conditional
+ part to deactivate the active mark regardless of the state of the
+ mark ring.
+
+ * desktop.el (desktop-save): Add `mode: emacs-lisp' to the local
+ variables line in desktop files.
+
+2005-01-12 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (search-highlight, isearch, isearch-lazy-highlight):
+ Bring together isearch highlight related options.
+ (lazy-highlight): Replace group `replace' by `matching'.
+ (lazy-highlight-cleanup, lazy-highlight-initial-delay)
+ (lazy-highlight-interval, lazy-highlight-max-at-a-time)
+ (lazy-highlight): Add aliases to old names isearch-lazy-highlight-...
+ and declare them obsolete.
+ (lazy-highlight-face): Rename from isearch-lazy-highlight-face.
+ (isearch-faces): Remove defgroup.
+ (isearch-overlay, isearch-highlight, isearch-dehighlight):
+ Move isearch highlighting code closer to lazy highlighting code.
+
+ * replace.el (query-replace-lazy-highlight): Add lazy-highlight group.
+ (query-replace-highlight, query-replace-lazy-highlight)
+ (query-replace): Move definitions to the beginning of the file.
+
+2005-01-11 Juri Linkov <juri@jurta.org>
+
+ * toolbar/back_arrow.xpm, toolbar/back_arrow.pbm
+ * toolbar/lc-back_arrow.xpm, toolbar/lc-fwd_arrow.xpm
+ * toolbar/fwd_arrow.xpm, toolbar/fwd_arrow.pbm: New icons.
+
+ * info.el (Info-history-forward): New variable.
+ (Info-select-node): Reset Info-history-forward to nil.
+ (Info-last): Turn into defalias.
+ (Info-history-back): Rename from Info-last.
+ Add current node to Info-history-forward.
+ (Info-history-forward): New fun.
+ (Info-mode-map): Replace Info-last by Info-history-back.
+ Bind Info-history-forward to "r".
+ (Info-mode-menu): Replace Info-last by Info-history-back.
+ Fix menu item text. Add menu item for Info-history-forward.
+ (info-tool-bar-map): Replace Info-last by Info-history-back.
+ Replace its icon "undo" by "back_arrow". Add icon "fwd_arrow"
+ for Info-history-forward.
+ (Info-mode): Replace Info-last by Info-history-back in docstring.
+ Add local variable Info-history-forward.
+ (Info-goto-emacs-command-node): Replace Info-last by Info-history-back.
+
+2005-01-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mouse.el (mouse-drag-mode-line-1, mouse-drag-vertical-line)
+ (mouse-drag-region, mouse-drag-region-1, mouse-drag-secondary):
+ Ignore select-window events rather than fiddle with
+ mouse-autoselect-window.
+
+2005-01-11 Matthew Mundell <matt@mundell.ukfsn.org>
+
+ * type-break.el (type-break-mode): Fix previous change.
+
+2005-01-10 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-ext.el (calc-reset): Reset when inside embedded
+ calculator; only reset when point is inside a calculator.
+ Don't adjust the window height if the window takes up the whole height
+ of the frame.
+
+2005-01-10 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * ebuff-menu.el (Electric-buffer-menu-mode):
+ Preserve value of buffer-local var header-line-format.
+
+2005-01-09 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-mode-var-list-restore-saved-values):
+ Make sure settings file exists before accessing it.
+
+ * calc/calc-embed.el (calc-embedded-subst):
+ Replace math-multi-subst-rec, which is only supposed to be called
+ by math-multi-subst, by math-multi-subst.
+
+2005-01-09 Andre Spiegel <spiegel@gnu.org>
+
+ * vc.el (vc-allow-async-revert): New user option.
+ (vc-disable-async-diff): New internal variable.
+ (vc-revert-buffer): Use them to disable asynchronous diff.
+
+ * vc-cvs.el, vc-arch.el, vc-svn.el, vc-mcvs.el (vc-cvs-diff)
+ (vc-arch-diff, vc-svn-diff, vc-mcvs-diff): Don't diff
+ asynchronously if vc-disable-async-diff is t.
+
+2005-01-09 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (defcalcmodevar): New macro.
+ (calc-mode-var-list-restore-default-values)
+ (calc-mode-var-list-restore-saved-values): New functions.
+ (calc-mode-var-list): Use defcalcmodevar to define it.
+ (calc-always-load-extensions, calc-line-numbering)
+ (calc-line-breaking, calc-display-just, calc-display-origin)
+ (calc-number-radix, calc-leading-zeros, calc-group-digits)
+ (calc-group-char, calc-point-char, calc-frac-format)
+ (calc-prefer-frac, calc-hms-format, calc-date-format)
+ (calc-float-format, calc-full-float-format, calc-complex-format)
+ (calc-complex-mode, calc-infinite-mode, calc-display-strings)
+ (calc-matrix-just, calc-break-vectors, calc-full-vectors)
+ (calc-full-trail-vectors, calc-vector-commas, calc-vector-brackets)
+ (calc-matrix-brackets, calc-language, calc-language-option)
+ (calc-left-label, calc-right-label, calc-word-size)
+ (calc-previous-modulo, calc-simplify-mode, calc-auto-recompute)
+ (calc-display-raw, calc-internal-prec, calc-angle-mode)
+ (calc-algebraic-mode, calc-incomplete-algebraic-mode)
+ (calc-symbolic-mode, calc-matrix-mode, calc-shift-prefix)
+ (calc-window-height, calc-display-trail, calc-show-selections)
+ (calc-use-selections, calc-assoc-selections)
+ (calc-display-working-message, calc-auto-why, calc-timing)
+ (calc-mode-save-mode, calc-standard-date-formats, calc-autorange-units)
+ (calc-was-keypad-mode, calc-full-mode, calc-user-parse-tables)
+ (calc-gnuplot-default-device, calc-gnuplot-default-output)
+ (calc-gnuplot-print-device, calc-gnuplot-print-output)
+ (calc-gnuplot-geometry, calc-graph-default-resolution)
+ (calc-graph-default-resolution-3d, calc-invocation-macro)
+ (calc-show-banner): Use defcalcmodevar to declare them and set
+ their default values.
+
+ * calc/calc-ext.el (calc-reset): Restore saved values of variables
+ instead of default values (but restore default values if there is
+ an argument of 0).
+
+2005-01-09 David Kastrup <dak@gnu.org>
+
+ * desktop.el (desktop-restore-eager): Fix typo in type.
+
+2005-01-08 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (customize): Delete :link.
+
+2005-01-08 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-mode): Remove the extension from the
+ `calc-settings-file' file name when loading it.
+
+2005-01-08 Kim F. Storm <storm@cua.dk>
+
+ * info.el (Info-mode-map, Info-next-link-keymap)
+ (Info-prev-link-keymap, Info-up-link-keymap):
+ Map follow-link to mouse-face.
+ (Info-fontify-node): Add "mouse-2: " prefix to tooltip.
+
+2005-01-08 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc.el (calc-settings-file): Change default value.
+ Suggested by cgw in a comment in calc-mode.el.
+
+ * calc/calc-mode.el (calc-settings-file-name):
+ Compare calc-settings-file to user-init-file instead of ~/.emacs.
+ Replace ~/.emacs in a prompt by calc-settings-file.
+
+2005-01-07 Lars Hansen <larsh@math.ku.dk>
+
+ * desktop.el (desktop-restore-eager, desktop-lazy-verbose)
+ (desktop-lazy-idle-delay): New customizable variables.
+ (desktop-buffer-args-list): New variable.
+ (desktop-append-buffer-args): New function.
+ (desktop-save): Call desktop-append-buffer-args for some buffers.
+ (desktop-lazy-create-buffer): New function.
+ (desktop-idle-create-buffers): New function.
+ (desktop-read): Add message about buffers to restore lazily.
+ (desktop-lazy-abort): New command.
+ (desktop-clear): Call desktop-lazy-abort.
+ (desktop-lazy-complete): New command.
+
+2005-01-06 Richard M. Stallman <rms@gnu.org>
+
+ * emacs-lisp/find-func.el (find-face-definition):
+ Rename from find-face.
+
+2005-01-06 Kim F. Storm <storm@cua.dk>
+
+ * simple.el (completion-list-mode-map): Map follow-link to mouse-face.
+
+ * man.el (Man-xref-man-page, Man-xref-header-file)
+ (Man-xref-normal-file): Add follow-link property.
+
+2005-01-06 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-units.el: Make sure the proper macro definitions are
+ available when compiling.
+
+2005-01-06 Juri Linkov <juri@jurta.org>
+
+ * isearch.el (isearch-lazy-highlight-update):
+ Rename `isearch-lazy-highlight-interval' to `lazy-highlight-interval'.
+
+2005-01-06 Miles Bader <miles@gnu.org>
+
+ * isearch.el (lazy-highlight): Rename from `lazy-highlight-face'.
+ (isearch-lazy-highlight-face): Use new name.
+
+2005-01-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * uniquify.el (uniquify-rationalize-file-buffer-names):
+ Re-add an interactive spec.
+ (uniquify-rationalize-file-buffer-names): Fix corner case when renaming
+ to the same name.
+
+ * isearch.el (isearch-dehighlight): Remove unused arg `totally'.
+ (isearch-update, isearch-done): Adjust calls accordingly.
+
+2005-01-05 Richard M. Stallman <rms@gnu.org>
+
+ * custom.el (custom-set-variables, custom-theme-set-variables):
+ Clarify documentation.
+
+ * emacs-lisp/find-func.el (find-variable)
+ (find-variable-other-window, find-variable-other-frame):
+ Fix the TYPE args to find-function-read and find-function-do-it.
+ (find-function): Doc fix.
+ (find-function-at-point): Replace function-at-point alias.
+
+2005-01-04 Richard M. Stallman <rms@gnu.org>
+
+ * cus-face.el (custom-declare-face):
+ Record defface in current-load-list.
+
+ * help-fns.el (variable-at-point): New arg ANY-SYMBOL.
+
+ * emacs-lisp/find-func.el: Doc fixes.
+ (find-face-regexp): New variable.
+ (find-function-regexp-alist): New variable.
+ (find-function-C-source): Third arg is now TYPE.
+ (find-function-search-for-symbol): Handle general TYPE.
+ (find-function-read, find-function-do-it): Handle general TYPE.
+ (find-definition-noselect, find-face): New functions.
+ (function-at-point): Alias deleted.
+
+2005-01-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * battery.el (display-battery-mode): Rename from display-battery.
+ Handle the case where it gets turned off.
+
+2005-01-04 Richard M. Stallman <rms@gnu.org>
+
+ * cus-edit.el (customize): Make :link point to user doc.
+
+ * man.el (Man-fontify-manpage): Turn off undo generation.
+
+ * add-log.el (change-log-font-lock-keywords): Don't match just "From".
+
+2005-01-04 Andreas Schwab <schwab@suse.de>
+
+ * files.el (insert-directory): Only look for error lines in
+ inserted text. Don't move too far after processing --dired markers.
+
+2005-01-04 Richard M. Stallman <rms@gnu.org>
+
+ * mail/mailabbrev.el (sendmail-pre-abbrev-expand-hook):
+ Don't expand if the character is @, period, dash, etc.
+ (define-mail-abbrev): Quote names that contain problem characters.
+
+2005-01-04 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * progmodes/hideshow.el: No longer require `cl'; `dolist' is standard.
+
+2005-01-03 Richard M. Stallman <rms@gnu.org>
+
+ * replace.el (replace-dehighlight): Use lazy-highlight-cleanup.
+ (query-replace-highlight, query-replace-lazy-highlight)
+ (query-replace): Definitions moved up. Doc fix.
+
+2005-01-03 Richard M. Stallman <rms@gnu.org>
+
+ * isearch.el (lazy-highlight): Group renamed from isearch-lazy-...
+ (lazy-highlight-cleanup, lazy-highlight-initial-delay)
+ (lazy-highlight-interval, lazy-highlight-max-at-a-time)
+ (lazy-highlight-face): Rename from isearch-lazy-...
+ Change all references to them.
+
+2005-01-03 Luc Teirlinck <teirllm@auburn.edu>
+
+ * cus-edit.el (custom-file): Doc fix for defcustom.
+ (custom-file): The function no longer sets the variable
+ `custom-file' to its return value.
+
+ * startup.el (command-line): No longer load `custom-file'.
+
+2005-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/find-func.el (find-variable-regexp): Avoid defface.
+
+ * progmodes/perl-mode.el (perl-nochange, perl-calculate-indent):
+ Don't confuse module-prefixed identifiers for labels.
+ Reported by Juan-Leon Lahoz Garcia <juanleon1@gmail.com>.
+
+2005-01-02 Richard M. Stallman <rms@gnu.org>
+
+ * files.el (basic-save-buffer-1): Fix previous change.
+
+ * loadhist.el (file-loadhist-lookup): New function.
+ (file-provides, file-requires): Use it.
+
+ * electric.el (Electric-pop-up-window): Use fit-window-to-buffer
+ instead of calculating the right size.
+
+2005-01-02 Karl Chen <quarl@cs.berkeley.edu>
+
+ * vc-svn.el (vc-svn-diff): Stay local if possible.
+
+2005-01-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * vc-arch.el (vc-arch-workfile-version): Handle the empty-branch case.
+
+ * files.el (hack-local-variables): Fix last change.
+
+2005-01-02 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-yank.el (calc-edit-top): New variable.
+ (calc-edit-mode): Set calc-edit-top to be the beginning of the edited
+ object. Change header properties.
+ (calc-edit-finish, calc-edit-finish-stack-object)
+ (calc-edit-show-buffer): Use calc-edit-top to find the beginning of the
+ edited object.
+ * calc/calc-sel.el (calc-finish-selection-edit): Use calc-edit-top
+ for the beginning of the edited object.
+ * calc/calc-embed.el (calc-embedded-finish-edit): Use calc-edit-top
+ for the beginning of the edited object.
+ * calc/calc-prog.el (calc-edit-macro-finish-edit)
+ (calc-finish-formula-edit, calc-macro-repeats)
+ (calc-edit-macro-adjust-buffer, calc-edit-format-macro-buffer)
+ (calc-edit-macro-pre-finish-edit): Use calc-edit-top for the
+ beginning of the edited object.
+ (calc-user-define-edit): Change the header for editing macros.
+ Remove unnecessary variable.
+
+2005-01-01 Jay Belanger <belanger@truman.edu>
+
+ * calc/calc-yank.el (calc-edit-mode): Change default header.
+ (calc-edit-finish, calc-show-edit-buffer): Adjust to handle new header.
+ * calc/calc-store.el (calc-edit-variable): Change title to match new
+ header.
+ * calc/calc-prog.el (calc-edit-user-syntax): Change title in edit
+ mode to match new header.
+ (calc-user-define-edit): Change titles to include names of commands.
+ (calc-finish-formula-edit): Adjust to handle new header.
+ (calc-finish-macro-edit): Remove.
+ (calc-edit-macro-repeats, calc-edit-macro-adjust-buffer)
+ (calc-edit-macro-command, calc-edit-macro-command-type)
+ (calc-edit-macro-combine-alg-ent, calc-edit-macro-combine-ext-command)
+ (calc-edit-macro-combine-var-name, calc-edit-macro-combine-digits)
+ (calc-edit-format-macro-buffer, calc-edit-macro-pre-finish-edit)
+ (calc-edit-macro-finish-edit): New functions.
+ (calc-user-define-edit): Use new functions to edit named calc macros.
+
+2005-01-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (hack-local-variables): Cleanup prefix/suffix matching.
+
+ * ses.el (copy-region-as-kill): Deactivate mark.
+
+2005-01-01 Richard M. Stallman <rms@gnu.org>
+
+ * replace.el (occur-1): If the output buffer is also an input,
+ don't kill it, rename it.
+
+ * faces.el (set-face-background, set-face-foreground): Doc fix.
+
+ * cus-face.el (custom-face-attributes): Fix :help-echo strings
+ for :foreground and :background.
+
+ * dired.el (dired-view-command-alist): Variable deleted.
+ (dired-view-file, dired-mouse-find-file-other-window):
+ Delete the code to use it.
+
+2005-01-01 Kim F. Storm <storm@cua.dk>
+
+ * image.el (insert-sliced-image): Use t for line-height property.
+
+See ChangeLog.11 for earlier changes.
+
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; add-log-time-zone-rule: t
+;; End:
+
+ Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+
+ 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 3, 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.
+
+;;; arch-tag: e39939be-dab3-400e-86f5-0e2701a883c1
diff --git a/lisp/ChangeLog.5 b/lisp/ChangeLog.5
index 5d2c4766d73..1b6609f1727 100644
--- a/lisp/ChangeLog.5
+++ b/lisp/ChangeLog.5
@@ -137,7 +137,7 @@
* vc-hooks.el (vc-fetch-properties): Don't use
vc-backend-dispatch, as that is in vc.el.
- * vc.el (vc-register): Inhibit backups for the file's buffer
+ * vc.el (vc-register): Inhibit backups for the file's buffer.
* vc.el (vc-add-triple, vc-lookup-triple, vc-record-rename):
Use absolute file names to access the SCCS named configuration files
@@ -201,7 +201,7 @@
pgp and forward blocks.
(ispell-message-end-skip): New variable for block skips, set up for
pgp and forward blocks.
- (ispell-message): Added block message skipping.
+ (ispell-message): Added block message skipping.
(ispell-buffer-local-parsing): Added html-mode.
* mouse.el (mouse-set-region): Bind last-command with this-command.
@@ -261,7 +261,7 @@
the new 'none-value of vc-locking-user.
(vc-consult-rcs-headers): Fixed bug that prevented
- (not vc-consult-headers) from working
+ (not vc-consult-headers) from working.
(vc-file-not-found-hook): Set the default-directory of the new
buffer before check-out.
@@ -280,7 +280,7 @@
Use vc-file-clear-masterprops, and adjust those properties
that are not cleared.
- (vc-resynch-window): Temporarily remove vc-find-file-hook, so
+ (vc-resynch-window): Temporarily remove vc-find-file-hook, so
that we don't lose the file properties during check-in/out.
(vc-resynch-window): Do not try to delete the current window if
@@ -305,7 +305,7 @@
* winnt.el (null-device): Set to "NUL".
(grep-regexp-alist): Match entries with drive letters.
- (save-to-unix-hook,revert-from-unix-hook): Defined.
+ (save-to-unix-hook, revert-from-unix-hook): Defined.
(using-unix-filesystems): Defined.
(window-frame): Unaliased.
@@ -331,7 +331,7 @@
1995-06-14 Johan Vromans <jv@NL.net>
- * forms.el (forms--mode-menu-edit,forms--mode-menu-ro):
+ * forms.el (forms--mode-menu-edit, forms--mode-menu-ro):
Set `mouse-major-mode-menu'.
1995-06-14 Simon Marshall <simon@duality.gnu.ai.mit.edu>
@@ -358,30 +358,30 @@
1995-06-13 Per Bothner <bothner@kalessin.cygnus.com>
- * term.el: Various optimizations. The main one is to optimize for
+ * term.el: Various optimizations. The main one is to optimize for
simple output at the end of the buffer, with no paging, and in that
case to defer scrolling while we can.
- (term-emulate-terminal): Don't call term-handle-scroll in
+ (term-emulate-terminal): Don't call term-handle-scroll in
simple cases unless we are either paging or term-scroll-with-delete.
- (term-down): Likewise.
- (term-handle-scroll): Modify accordingly.
- (term-emulate-terminal): Avoid deleting old text in common case.
+ (term-down): Likewise.
+ (term-handle-scroll): Modify accordingly.
+ (term-emulate-terminal): Avoid deleting old text in common case.
Optimize the simple case of CRLF when we're at buffer end.
Handle deferred scroll when done processing output.
- (term-handle-deferred-scroll): New function.
- (term-down): Simplify - no longer take RIGHT argument. Tune.
- (term-goto): Use term-move-columns to compensate for the above.
+ (term-handle-deferred-scroll): New function.
+ (term-down): Simplify - no longer take RIGHT argument. Tune.
+ (term-goto): Use term-move-columns to compensate for the above.
- * term.el (term-escape-char, term-set-escape-char): Add doc-string.
- (term-mouse-paste): Add xemacs support.
+ * term.el (term-escape-char, term-set-escape-char): Add doc-string.
+ (term-mouse-paste): Add XEmacs support.
- * term.el: Various speed enhencements:
- (term-handle-scroll): Don't clear term-current-row; maybe adjust it.
- (term-down): Don't call term-adjust-current-row-cache if we've
+ * term.el: Various speed enhencements:
+ (term-handle-scroll): Don't clear term-current-row; maybe adjust it.
+ (term-down): Don't call term-adjust-current-row-cache if we've
done term-handle-scroll.
- (term-emulate-terminal): Don't call term-adjust-current-row-cache.
- (term-emulate-terminal): For TAB, don't nil term-start-line-column.
- (term-goto): Possible optimization.
+ (term-emulate-terminal): Don't call term-adjust-current-row-cache.
+ (term-emulate-terminal): For TAB, don't nil term-start-line-column.
+ (term-goto): Possible optimization.
1995-06-13 Karl Heuer <kwzh@nutrimat.gnu.ai.mit.edu>
@@ -472,7 +472,7 @@
* viper.el (vip-envelop-ESC-key): If an ESC-sequence translates
into a function key, pretend that this key was the last command event.
- * viper.el (vip-put-back,vip-Put-back): Now emulate Vi's behavior
+ * viper.el (vip-put-back, vip-Put-back): Now emulate Vi's behavior
more closely.
* viper.el (vip-line): No longer not bombs out.
@@ -486,8 +486,8 @@
* viper.el, viper-mous.el, viper-util.el, viper-ex.el:
Changed vip-*-frame-* to *-frame-*, incorporated overlay strings,
- unread-command-events, removed support for emacs versions 19.28 and
- xemacs 19.11 and earlier.
+ unread-command-events, removed support for Emacs versions 19.28 and
+ XEmacs 19.11 and earlier.
* viper-macs.el, viper-keym.el: Likewise.
1995-06-08 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
@@ -571,22 +571,22 @@
* ediff.el (ediff-documentation: New function.
- * ediff-wind.el: Got rid of toolbars in control frame in xemacs
+ * ediff-wind.el: Got rid of toolbars in control frame in XEmacs.
- * ediff-wind.el: Changed window-min-height from 1 to 2
+ * ediff-wind.el: Changed window-min-height from 1 to 2.
* ediff-wind.el (ediff-diff-at-point, ediff-toggle-multiframe):
Bug fixes.
(ediff-destroy-control-frame, ediff-window-display-p): New functions.
* ediff.el, ediff-wind.el, ediff-util.el, ediff-init.el:
- Converted xemacs *screen* nomenclature to *frame*.
- Incorporated overlay strings. Ediff no longer runs under emacs
+ Converted XEmacs *screen* nomenclature to *frame*.
+ Incorporated overlay strings. Ediff no longer runs under Emacs
19.28 and earlier and XEmacs 19.11 and earlier.
* ediff.el (ediff-patch-buffer): Now handles buffers that don't
visit any file.
(ediff-windows): Renamed to ediff-windows-wordwise, added
(ediff-windows-linewise): New function.
- Changed ediff-small/large-regions to ediff-regions-wordwise/linewise
+ Changed ediff-small/large-regions to ediff-regions-wordwise/linewise.
* ediff.el, ediff-wind.el:
Changed window-system to ediff-window-display.
@@ -893,11 +893,11 @@
(ada-indent-function): Handle "elsif" the same way as "if", added
"separate" for no indent.
(ada-get-indent-type): If "type ... is .." is followed by code on
- the same line, it is a broken statement. Test it.
+ the same line, it is a broken statement. Test it.
(ada-check-defun-name): Check for "protected" records.
(ada-goto-matching-decl-start): Use of ada-ident-re.
(ada-goto-matching-start): Extend regexp for "protected" record.
- (ada-in-limit-line): Rename from in-limit-line. Don't use
+ (ada-in-limit-line): Rename from in-limit-line. Don't use
count-lines, but test if beginning-of-line/end-of-line puts us
to bob/eob.
(ada-goto-previous-nonblank-line): Save a beginning-of-line
@@ -906,7 +906,7 @@
(ada-tabsize): Remove.
(keymap): Use C-M-a and C-M-e for proc/func movement.
No keybinding anymore for next/prev-package.
- (ada-font-lock-keywords-[1|2]): Add protected records. "when" removed
+ (ada-font-lock-keywords-[1|2]): Add protected records. "when" removed
from 'reference'-face.
(initial comments): Update CREDITS list.
(ada-add-ada-menu): Capitalize menu entries. Add menu statement
@@ -914,14 +914,14 @@
* ada-mode.el: Change all Ada94 to Ada95.
- * ada-mode.el: (ada-xemacs): New function, detect if we are
- running on XEmacs. Ada keymap definition and menus use it.
+ * ada-mode.el (ada-xemacs): New function, detect if we are
+ running on XEmacs. Ada keymap definition and menus use it.
(ada-create-syntax-table): Correct comments explaining use of 2nd
syntax table. Added creation of ada-mode-symbol-syntax-table
with '_' as word constituent.
(ada-adjust-case): Add test, if symbol is preceeded by a "'".
If true, change case according to ada-case-attribute.
- (ada-which-function-are-we-in): New routine. Save name of the current
+ (ada-which-function-are-we-in): New routine. Save name of the current
function in the old buffer; we can place cursor now at the same
function in the new buffer using find-file.
(ada-make-body): New function. Generates body stubs if the body
@@ -941,13 +941,12 @@
(ada-krunch-args): Initialized to 0 exploiting the new capability of
'gnatk8' as of gnat-2.0.
(ada-make-filename-from-adaname): Remove downcasing and replacement
- of dots. This is done in external program gnatk8 (gnat-2.0).
+ of dots. This is done in external program gnatk8 (gnat-2.0).
(ada-in-open-paren-p): Complete rewrite for speed-up.
(ada-search-ignore-string-comment): Ignore # as a string terminator
in all searches.
(ada-add-ada-menu): Use real variables instead of t for invoking
- 'easymenu'
- (require 'easymenu).
+ 'easymenu'.
(imenu-create-ada-index): We accept forward definitions again.
(ada-indent-region): Catch errors, simplified code.
@@ -989,7 +988,7 @@
* easymenu.el (easy-menu-do-define): Add autoload cookie.
-1995-05-19 Kevin Rodgers <kevinr@ihs.com> (tiny change)
+1995-05-19 Kevin Rodgers <kevinr@ihs.com> (tiny change)
* mailalias.el (expand-mail-aliases): Expand aliases in
From and Reply-to headers as well, plus the Resent- variants.
@@ -1082,7 +1081,7 @@
* ps-print.el (ps-faces-list): Delete. Added alias for
list-faces if face-list isn't fbound.
- * ps-print.el: (ps-print-ensure-fontified) added to make sure
+ * ps-print.el (ps-print-ensure-fontified): Added to make sure
ps-print works correctly in conjunction with lazy-lock.
* ps-print.el: RMS's changes for Emacs.
@@ -1212,7 +1211,7 @@
1995-05-02 Karl Heuer <kwzh@hal.gnu.ai.mit.edu>
- * scribe.el: (scribe-chapter): Change to C-c C-c.
+ * scribe.el (scribe-chapter): Change to C-c C-c.
(scribe-section): Change to C-c C-t.
(scribe-subsection): Change to C-c C-s.
(scribe-insert-environment): Change to C-c C-v.
@@ -1407,8 +1406,8 @@
1995-04-25 Johan Vromans <jv@squirrel.NL.net>
- * forms.el: (forms--make-format-elt-using-text-properties)
- forms--make-format): Add `intangible' text property to read-only areas.
+ * forms.el (forms--make-format-elt-using-text-properties)
+ (forms--make-format): Add `intangible' text property to read-only areas.
(forms-next-field, forms-previous-field):
Use `inhibit-point-motion-hooks' to allow move between two
intangible areas.
@@ -1672,7 +1671,7 @@
1995-04-16 Ethan Bradford <ethanb@phys.washington.edu>
* ispell.el (ispell-init-ispell): Don't barf if there is a
- warning message before the version line when Ispell starts up.
+ warning message before the version line when Ispell starts up.
1995-04-16 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -1973,7 +1972,7 @@
1995-04-08 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* etags.el (next-file): Handle empty list returned by
- (tags-table-files).
+ `tags-table-files'.
1995-04-08 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -2149,9 +2148,9 @@
Added the P tag and modified the s tag accordingly
(tempo-insert-named): Checks for valid name, insert mark otherwise.
- * tempo.el (tempo-dolist): Changed (cadr ...) to (car (cdr ...))
+ * tempo.el (tempo-dolist): Changed (cadr ...) to (car (cdr ...)).
- * tempo.el (tempo-expand-if-complete): New function
+ * tempo.el (tempo-expand-if-complete): New function.
1995-04-03 Karl Heuer <kwzh@hal.gnu.ai.mit.edu>
@@ -2207,7 +2206,7 @@
* unrmail.el (unrmail): Don't make or switch to a summary buffer.
* rmail.el (rmail-displayed-headers): New variable.
- (rmail-clear-headers): Handle rmail-displayed-headers
+ (rmail-clear-headers): Handle rmail-displayed-headers.
1995-03-31 Michael Ernst <mernst@research.microsoft.com>
@@ -2370,8 +2369,8 @@
1995-03-20 Karl Fogel <kfogel@floss.cyclic.com>
- * bookmark.el (bookmark-automatically-show-annotations): new var.
- (bookmark-jump): only show annotation if above var is non-nil.
+ * bookmark.el (bookmark-automatically-show-annotations): New var.
+ (bookmark-jump): Only show annotation if above var is non-nil.
1995-03-20 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -2534,13 +2533,13 @@
1995-03-15 Per Bothner <bothner@kalessin.cygnus.com>
- * term.el (term-mouse-paste): Make work for xemacs-19.11.
- For GNU emacs, don't mouse-set-point, but do
- run-hooks on mouse-leave-buffer-hook,
+ * term.el (term-mouse-paste): Make work for XEmacs-19.11.
+ For GNU Emacs, don't mouse-set-point, but do
+ run-hooks on mouse-leave-buffer-hook.
- * term.el (term-char-mode): Fix paren error that caused
- the arrow keys to not be recognized under xemacs.
- Also, simplify/fix [(button2)] to [button2] for paste under xemacs.
+ * term.el (term-char-mode): Fix paren error that caused
+ the arrow keys to not be recognized under XEmacs.
+ Also, simplify/fix [(button2)] to [button2] for paste under XEmacs.
1995-03-15 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -2572,7 +2571,7 @@
1995-03-15 Karl Fogel <kfogel@spiff.gnu.ai.mit.edu>
- * bookmark.el: (bookmark-bmenu-2-window): Go to correct position
+ * bookmark.el (bookmark-bmenu-2-window): Go to correct position
as well as correct buffer.
(bookmark-bmenu-other-window): Same.
(bookmark-bmenu-switch-other-window): Same.
@@ -2786,11 +2785,11 @@
1995-03-07 Per Bothner <bothner@kalessin.cygnus.com>
- * term.el (term-eol-on-send): New variable.
- (term-send-input): Move point to eol before sending only if
+ * term.el (term-eol-on-send): New variable.
+ (term-send-input): Move point to eol before sending only if
term-eol-on-send is true.
- * term.el (term-send-input): Don't move process-mark until
+ * term.el (term-send-input): Don't move process-mark until
after possible 'history processing.
1995-03-07 Francesco Potorti` (pot@cnuce.cnr.it)
@@ -2860,24 +2859,24 @@
* gnus-uu.el (gnus-uu-post-reply-mode): Likewise.
* icon.el (icon-mode): Likewise.
* mh-comp.el (mh-letter-mode): Likewise.
- * mim-mode.el (mim-mode): Likewise.
- * modula2.el (modula-2-mode): Likewise.
- * nroff-mode.el (nroff-mode): Likewise.
- * options.el (Edit-options-mode): Likewise.
- * outline.el (outline-mode): Likewise.
- * perl-mode.el (perl-mode): Likewise.
- * prolog.el (prolog-mode-variables): Likewise.
- * rnewspost.el (news-reply-mode): Likewise.
- * scheme.el (scheme-mode-variables): Likewise.
- * scribe.el (scribe-mode): Likewise.
- * sendmail.el (mail-mode): Likewise.
- * simula.el (simula-mode): Likewise.
- * texinfmt.el (texinfo-format-refill): Likewise.
- * texinfo.el (texinfo-mode): Likewise.
- * tex-mode.el (tex-common-initialization,latex-mode,slitex-mode):
+ * mim-mode.el (mim-mode): Likewise.
+ * modula2.el (modula-2-mode): Likewise.
+ * nroff-mode.el (nroff-mode): Likewise.
+ * options.el (Edit-options-mode): Likewise.
+ * outline.el (outline-mode): Likewise.
+ * perl-mode.el (perl-mode): Likewise.
+ * prolog.el (prolog-mode-variables): Likewise.
+ * rnewspost.el (news-reply-mode): Likewise.
+ * scheme.el (scheme-mode-variables): Likewise.
+ * scribe.el (scribe-mode): Likewise.
+ * sendmail.el (mail-mode): Likewise.
+ * simula.el (simula-mode): Likewise.
+ * texinfmt.el (texinfo-format-refill): Likewise.
+ * texinfo.el (texinfo-mode): Likewise.
+ * tex-mode.el (tex-common-initialization, latex-mode, slitex-mode):
Likewise.
- * text-mode.el (indented-text-mode): Likewise.
- * vc.el (vc-comment-to-change-log): Likewise.
+ * text-mode.el (indented-text-mode): Likewise.
+ * vc.el (vc-comment-to-change-log): Likewise.
1995-03-02 Simon Marshall <simon@duality.gnu.ai.mit.edu>
@@ -2906,7 +2905,7 @@
inserted line to left-margin.
* paragraphs.el (paragraph-start, paragraph-separate):
- Default values no longer start with ^. Doc fix.
+ Default values no longer start with ^. Doc fix.
(use-hard-newlines): Moved here from cmds.c. Made buffer-local.
Doc fix.
(looking-at-hard): Deleted, not needed.
@@ -3125,7 +3124,7 @@
(delete-to-left-margin): Use move-to-left-margin. Doc fix.
Make arguments optional.
- (set-left-margin): Make region include following spaces and tabs,
+ (set-left-margin): Make region include following spaces and tabs,
so that later insertions there will inherit new setting.
Always reindent text to show new setting, not only when auto-fill
is active; auto-fill controls only whether to re-fill text.
@@ -3407,32 +3406,32 @@
1995-02-04 Per Bothner <bothner@kalessin.cygnus.com>
- * term.el (term-version): Increased to 0.95.
- (term-pager-enabled): New macro. Use it a bunch of places.
- (term-terminal-menu): Clean up initialization so we don't get
+ * term.el (term-version): Increased to 0.95.
+ (term-pager-enabled): New macro. Use it a bunch of places.
+ (term-terminal-menu): Clean up initialization so we don't get
complaints when re-loading term.el.
- (term-send-raw-meta): Redo to handle meta-symbols (e.g. meta-delete).
+ (term-send-raw-meta): Redo to handle meta-symbols (e.g. meta-delete).
More robust checking of parameter to make-string.
- (term-update-mode-line): New function. Call it whenever we change
+ (term-update-mode-line): New function. Call it whenever we change
char/line/paging mode. Now includes "page" in mode-line-process
if paging is abled.
- * term.el: Remove causes for byte-compilation to complain:
- (term-terminal-pos): Declare x and y in let-binding.
- (term-send-invisible): Remove bogus second "iteractive" call.
+ * term.el: Remove causes for byte-compilation to complain:
+ (term-terminal-pos): Declare x and y in let-binding.
+ (term-send-invisible): Remove bogus second "iteractive" call.
(term-*): Provide defvars for lots of buffer-local variables.
- (term-mode): Make comments and initial value setting from
+ (term-mode): Make comments and initial value setting from
here to the corresponding defvar.
- (term-line-start-column): Remove unused variable.
- (term-erase-in-line): Fix syntax (incorrect parenthesis) error.
- (term-erase-in-display): Fix typo "\?n" -> "?\n".
+ (term-line-start-column): Remove unused variable.
+ (term-erase-in-line): Fix syntax (incorrect parenthesis) error.
+ (term-erase-in-display): Fix typo "\?n" -> "?\n".
- * term.el: Make Unix "resize" command work:
- (term-handle-ansi-escape): On "\e[row;colH", limit row
+ * term.el: Make Unix "resize" command work:
+ (term-handle-ansi-escape): On "\e[row;colH", limit row
and col to size of window. (Resize sends "999;999".)
- (term-handle-ansi-escape): Implement "\e[6n" "Report cursor
+ (term-handle-ansi-escape): Implement "\e[6n" "Report cursor
position". This requires that we pass proc as an extra parameter.
- (term-scroll-region): An empty region means extend to window bottom.
+ (term-scroll-region): An empty region means extend to window bottom.
1995-02-05 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
@@ -3650,9 +3649,10 @@
1995-01-25 Richard Stallman <rms@mole.gnu.ai.mit.edu>
- * mouse.el (mouse-save-then-kill): Ignore mouse-selection-click-count if no active mark.
- (mouse-drag-region): Modify previous change--don't run the ordinary binding
- in the case of a multiple click.
+ * mouse.el (mouse-save-then-kill): Ignore mouse-selection-click-count
+ if no active mark.
+ (mouse-drag-region): Modify previous change--don't run the ordinary
+ binding in the case of a multiple click.
* tex-mode.el (tex-display-shell): New function.
(tex-file, tex-region, tex-show-print-queue, tex-bibtex-file):
@@ -3670,12 +3670,12 @@
* etags.el : Changes to support filenames as tags too and provided
a drop-in replacement for list-tags.
(find-tag-noselect): Recognize filenames as valid tags too.
- (find-tag-file-order): New variable added. This contains the name of
+ (find-tag-file-order): New variable added. This contains the name of
the function used to qualify a matched filename.
(last-tag-file): New variable; stores the filename looked for via
find-tag fmaily of functions.
(find-tag-in-order): In case tag searched for is a file, don't do
- anything fancy to locate position of tag in file. Just seek to
+ anything fancy to locate position of tag in file. Just seek to
beginning of file.
(etags-recognize-tags-table): Added new var find-tag-file-order to
tags-table-format variables and also set the priority of searching
@@ -3687,7 +3687,7 @@
(tags-list-functions-in-file): New function which is a backend for
list-tags function.
(tags-locate-file-in-tags-table): New function which locates a
- file in `tags-table-list'. Its used by list-tags.
+ file in `tags-table-list'. Its used by list-tags.
1995-01-24 Frederic Lepied <fred@sugix.frmug.fr.net>
@@ -3702,7 +3702,7 @@
Add a newsgroups-update-description menu.
(gnus-newsgroups-regex, gnus-newsgroups-display, gnus-newsgroups-alist)
(gnus-newsgroups-hashtb, gnus-newsgroups-showall): New variables.
- (gnus-group-group-name): Changed the regexp to avoid conflict
+ (gnus-group-group-name): Changed the regexp to avoid conflict
with descriptions which have a ':' inside.
(gnus-group-mode): Doc fix.
@@ -3723,7 +3723,7 @@
1995-01-23 Espen Skoglund <espensk@tklab3.cs.uit.no>
- * pascal.el: (pascal-*-completion, pascal-comp-defun)
+ * pascal.el (pascal-*-completion, pascal-comp-defun)
(pascal-complete-word, pascal-completion-response, pascal-completion)
(pascal-get-completion-decl): Rename some internal variables
to start with 'pascal-'.
@@ -3772,12 +3772,12 @@
* tempo.el (tempo-region-start, tempo-region-stop): New variables
(tempo-insert-template, tempo-insert): Don't affect the
- mark. Check for Transient Mark mode
+ mark. Check for Transient Mark mode.
- * tempo.el (tempo-find-match-string): Removed the stupid 1+ again
+ * tempo.el (tempo-find-match-string): Removed the stupid 1+ again.
* tempo.el (tempo-use-tag-list):
- Set tempo-match-finder to completion-function
+ Set tempo-match-finder to completion-function.
* tempo.el (tempo-match-finder): Renamed variable from
tempo-default-match-finder. Change the value too.
@@ -3794,31 +3794,31 @@
1995-01-21 Per Bothner <bothner@kalessin.cygnus.com>
- * term.el (term-version): Increased to 0.94.
- (term-if-emacs19, term-if-xemacs, term-ifnot-xemacs): New macros
- to conditionalize at compile-time for different emacs versions.
- (various places): Use them (instead of term-is-XXXX).
- (term-is-emacs19): Removed, no longer needed.
+ * term.el (term-version): Increased to 0.94.
+ (term-if-emacs19, term-if-xemacs, term-ifnot-xemacs): New macros
+ to conditionalize at compile-time for different Emacs versions.
+ (various places): Use them (instead of term-is-XXXX).
+ (term-is-emacs19): Removed, no longer needed.
- * term.el: Change keybindings to not use C-c LETTER, for
+ * term.el: Change keybindings to not use C-c LETTER, for
term-char-mode, term-line-mode. Keybindings for term-pager-enable
and term-pager-disable replaced by one for term-pager-toggle.
- (term-pager-toggle): New function.
+ (term-pager-toggle): New function.
* term.el (term-fake-pager-enable, term-fake-pager-disable):
Define as aliases, so that menubar code will find proper keybindings.
- (term-char-mode): Make no-op if already in char mode.
- (term-line-mode): Make no-op if already in line mode.
- (term-mode-map): Add keybinding for no-op term-line-mode, so
+ (term-char-mode): Make no-op if already in char mode.
+ (term-line-mode): Make no-op if already in line mode.
+ (term-mode-map): Add keybinding for no-op term-line-mode, so
code to display menubar keybindings doesn't lose it. (Needed
as long as char-mode and line-mode share term-terminal-menu.)
- (term-raw-escape-map): Likewise for term-char-mode.
- (term-char-mode, term-line-mode): Better documentation strings.
+ (term-raw-escape-map): Likewise for term-char-mode.
+ (term-char-mode, term-line-mode): Better documentation strings.
- * term.el: Added menubar for pager sub-mode.
+ * term.el: Added menubar for pager sub-mode.
- * term.el (term-command-hook): Disabled the feature that allowed
- inferior to send a lisp command to emacs - too big a security hole.
+ * term.el (term-command-hook): Disabled the feature that allowed
+ inferior to send a lisp command to Emacs - too big a security hole.
1995-01-21 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
@@ -3981,7 +3981,8 @@
(facemenu-unlisted-faces): Doc fix.
* facemenu.el: Revise keybindings; doc fix.
- (facemenu-new-faces-at-end): New vbl. (facemenu-add-new-face): Use it.
+ (facemenu-new-faces-at-end): New vbl.
+ (facemenu-add-new-face): Use it.
(facemenu-set-face, facemenu-set-face-from-menu): Check read-only.
(facemenu-set-face): Doc fix.
@@ -3992,7 +3993,7 @@
(facemenu-add-new-face): New function.
(facemenu-update): Don't redo top-level menu;
nothing should change. Move menu setup to defvars.
- Use facemenu-add-new-face. Changed global binding to C-down-mouse-3.
+ Use facemenu-add-new-face. Changed global binding to C-down-mouse-3.
(facemenu-menu): "Update" item removed; should
no longer be needed interactively.
(facemenu-complete-face-list): Just return faces, not keybindings.
@@ -4014,8 +4015,8 @@
1995-01-17 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* gud.el (gud-new-keymap): New function.
- (gud-xdb-find-file, gud-dbx-find-file, gud-sdb-find-file, gud-gdb-find-file):
- Use it for keymap inheritance.
+ (gud-xdb-find-file, gud-dbx-find-file, gud-sdb-find-file)
+ (gud-gdb-find-file): Use it for keymap inheritance.
1995-01-17 Dave Love <d.love@dl.ac.uk>
@@ -4125,7 +4126,7 @@
* files.el (revert-buffer): Recompute buffer-file-truename.
- * c-mode.el (indent-c-exp): Handle `{ if (x)\n foo;\n bar;' case.
+ * c-mode.el (indent-c-exp): Handle `{ if (x)\n foo;\n bar;' case.
* cplus-md.el (indent-c++-exp): Handle `{ if (x)\n foo;\n bar;' case.
* etags.el (etags-goto-tag-location): Add 1 to char positions in TAGS.
@@ -4255,8 +4256,8 @@
default directory. Also, mark the *vc* output buffer unmodified.
(vc-revert-buffer1): Handle font-lock mode correctly.
(vc-diff, vc-print-log): vc-do-command no longer sets the default
- directory, but doing so is advantageous for these cases.
- (file-executable-p-18): Better portability to Emacs 18.
+ directory, but doing so is advantageous for these cases.
+ (file-executable-p-18): Better portability to Emacs 18.
(vc-directory-exclusion-list, vc-file-tree-walk-internal):
Implement the new variable vc-directory-exclusion-list to prune
tree walks. Initial value tells it to ignore SCCS and RCS
@@ -4358,7 +4359,7 @@
1994-12-28 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* etags.el (find-tag-in-order): Don't set buffer-local value of
- tags-file-name.
+ tags-file-name.
1994-12-27 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4518,10 +4519,10 @@
1994-12-22 Dave Love <d.love@dl.ac.uk>
- * gud.el (gdb): Correct tbreak doc string.
- (gud-mode): Define a Gud menu.
- (gdb): Set debugger-specific menu entries.
- (sdb) (dbx) (xdb): Likewise.
+ * gud.el (gdb): Correct tbreak doc string.
+ (gud-mode): Define a Gud menu.
+ (gdb): Set debugger-specific menu entries.
+ (sdb) (dbx) (xdb): Likewise.
1994-12-22 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4532,139 +4533,139 @@
* imenu.el (imenu-always-use-completion-buffer-p): A value of
`never' now means never display a completion buffer.
- (imenu--completion-buffer): implement 'never behaviour.
+ (imenu--completion-buffer): Implement 'never behaviour.
1994-12-21 Stefan Schoef <schoef@informatik.uni-oldenburg.de>
* bibtex.el: Changed keybinding for bibtex-print-help-message
- (from \C-ch to \C-c?). Therefore, describe-mode is not longer on
- \C-c?. Also, changed prefix \C-cn for bibtex-narrow functions to
- \C-c\C-r.
- (bibtex-string-files): Changed documentation.
- (bibtex-mode-map): Inscriptions of menu bar changed from "Entry
- Types" to "Entry-Types" and "Bibtex Edit" to "BibTeX-Edit".
- (bibtex-string-files): Changed documentation.
- (bibtex-mode): If environment variable BIBINPUTS isn't defined,
- string files are searched in the current directory.
- (bibtex-completion-candidates): Now buffer-local to allow
- evaluation of different bibtex-string-files in different buffers.
- (bibtex-autokey-edit-before-use, bibtex-clean-entry): New variable
- that determines, if the user is allowed to edit auto-generated
- reference keys before they are used.
- (bibtex-generate-autokey, bibtex-clean-entry): New function to
- generate an autokey if necessary.
- (bibtex-autokey-names, bibtex-autokey-name-change-strings,
- bibtex-autokey-name-length, bibtex-autokey-name-separator,
- bibtex-autokey-year-length, bibtex-autokey-titlewords,
- bibtex-autokey-title-terminators,
- bibtex-autokey-titlewords-stretch,
- bibtex-autokey-titleword-first-ignore,
- bibtex-autokey-titleword-abbrevs,
- bibtex-autokey-titleword-change-strings,
- bibtex-autokey-titleword-length,
- bibtex-autokey-titleword-separator,
- bibtex-autokey-name-year-separator,
- bibtex-autokey-year-title-separator): New variables related to
- bibtex-generate-autokey.
- (bibtex-find-entry-location): Optional second parameter maybedup
- to tell it that entering a duplicate entry isn't to report by an
- error but by the return value of the function (necessary for
- bibtex-clean-entry to find the correct position of an entry with
- an autogenerated key without disturbing the user with unwanted
- messages).
- (bibtex-help-message): New variable to avoid printing of help
- messages in the echo area.
- (assoc-of-regexp): New function to match an alist of regexps.
- (bibtex-string-files, bibtex-completion-candidates, bibtex-mode):
- New variables to allow bibtex-complete-string to work on strings
- initialized from a variable and from @String definitions in a list
- of files, too.
- (bibtex-predefined-strings, bibtex-entry-field-alist): Changed to
- user options.
- (bibtex-mode): Changed doc string.
- (many functions and variables): Changed documentation strings of
- variables and functions to hold a complete sentence in the first
- line.
- (bibtex-print-help-message): Now line dependent and reports if it
- is called outside a BibTeX field.
- (validate-bibtex-buffer): Completely rewritten to validate, if
- buffer is syntactically correct.
- (find-bibtex-duplicates): Moved into validate-bibtex-buffer.
- (ispell-abstract, bibtex-ispell-abstract, ispell-bibtex-entry,
- bibtex-ispell-entry, beginning-of-bibtex-entry,
- bibtex-beginning-of-entry, end-of-bibtex-entry,
- bibtex-end-of-entry, hide-bibtex-entry-bodies,
- bibtex-hide-entry-bodies, narrow-to-bibtex-entry,
- bibtex-narrow-to-entry, sort-bibtex-entries, bibtex-sort-entries,
- validate-bibtex-buffer, bibtex-validate-buffer,
- find-bibtex-entry-location, bibtex-find-entry-location): All
- interactive functions are renamed, so that any interface function
- begins with "bibtex-". Mapping:
- ispell-abstract --> bibtex-ispell-abstract
- ispell-bibtex-entry --> bibtex-ispell-entry
- beginning-of-bibtex-entry --> bibtex-beginning-of-entry
- end-of-bibtex-entry --> bibtex-end-of-entry
- hide-bibtex-entry-bodies --> bibtex-hide-entry-bodies
- narrow-to-bibtex-entry --> bibtex-narrow-to-entry
- sort-bibtex-entries --> bibtex-sort-entries
- validate-bibtex-buffer --> bibtex-validate-buffer
- find-bibtex-entry-location --> bibtex-find-entry-location
- (bibtex-maintain-sorted-entries,
- bibtex-sort-ignore-string-entries): Default is now t.
- (bibtex-complete-string): String list is built from additional
- string list bibtex-predefined-string and current strings in file.
- (string-equalp): Deleted and substituted by string-equal.
- (assoc-string-equalp): Renamed to assoc-ignore-case.
- (bibtex-entry): Reference key can be entered with completion. All
- reference keys that are defined in buffer and all labels that
- appear in crossreference entries are object to completion.
- (Entry types): Changed order of entries in menu "entry types".
- (bibtex-entry-field-alist): Changed order of entries slightly to
- be more conform with standard BibTeX style layouts.
- (bibtex-mode-map): Uniform keybindings for \C-c\C-e prefix (often
- used types on control keys, sometimes used types on normal keys,
- rarely used types on shift keys, almost never used types on meta
- keys).
- (bibtex-mode-map): Function narrow-to-bibtex-entry and counterpart
- widen and function hide-bibtex-entry-bodies and counterpart
- show-all bounded to appropriate local keys.
- (bibtex-abbrev-table): Deleted
- (bibtex-current-entry-label, put-string-on-kill-ring): Deleted
- (AUCTeX provides all the functionality needed for citation
- completion).
- (bibtex-enclosing-reference, bibtex-pop-previous, bibtex-pop-next,
- bibtex-clean-entry): Hacked for speed (bibtex-pop-previous and
- bibtex-pop-next were to slow for larger BibTeX files).
- (bibtex-pop-previous, bibtex-pop-next): Delimiters from previous
- or next entry are changed to actual delimters if necessary.
- (bibtex-entry): Fixed bug (False entry wasn't reported in error
- message if bibtex-entry was called with undefined reference name).
- (bibtex-entry-field-alist, bibtex-entry, bibtex-make-field,
- bibtex-next-field, bibtex-clean-entry): Every reference entry now
- contains a comment in addition to the name of the reference. This
- comment appears in the echo area if you start editing that field
- (after calling bibtex-next-field).
- (bibtex-include-OPTcrossref, bibtex-entry): Changed
- bibtex-include-OPTcrossref from single boolean variable to hold a
- list of reference names which should have a crossref field.
- (bibtex-complete-word): New function, which completes word
- fragment before point to the longest prefix of predefined strings
- in the buffer in the same way that ispell-complete-word operates
- for words found in the dictionary.
- (bibtex-reference-head): Start of bibtex-reference-head changed
- from "^[ \t]*\\(" to "^\\( \\|\t\\)*\\(" (bibtex-pop-previous and
- bibtex-pop-next didn't work, probably due to a bug in
- re-search-forward).
- (several functions): Added support for {} as field delimiters
- (better than '"' for accented characters.
- (bibtex-clean-entry): If optional field crossref is empty or
- missing, former optional fields (if bibtex-include-OPTcrossref was
- t) are necessary again. bibtex-clean-entry complains if they are
- empty but not if they are missing, so you can intenionally omit
- them, e. g. for a pseudo @Journal entry (needed for
- crossreferences) made out of an @article with missing non-optional
- fields.
- Menu bar entries aren't centered anymore.
+ (from \C-ch to \C-c?). Therefore, describe-mode is not longer on
+ \C-c?. Also, changed prefix \C-cn for bibtex-narrow functions to
+ \C-c\C-r.
+ (bibtex-string-files): Changed documentation.
+ (bibtex-mode-map): Inscriptions of menu bar changed from "Entry
+ Types" to "Entry-Types" and "Bibtex Edit" to "BibTeX-Edit".
+ (bibtex-string-files): Changed documentation.
+ (bibtex-mode): If environment variable BIBINPUTS isn't defined,
+ string files are searched in the current directory.
+ (bibtex-completion-candidates): Now buffer-local to allow
+ evaluation of different bibtex-string-files in different buffers.
+ (bibtex-autokey-edit-before-use, bibtex-clean-entry): New variable
+ that determines, if the user is allowed to edit auto-generated
+ reference keys before they are used.
+ (bibtex-generate-autokey, bibtex-clean-entry): New function to
+ generate an autokey if necessary.
+ (bibtex-autokey-names, bibtex-autokey-name-change-strings,
+ bibtex-autokey-name-length, bibtex-autokey-name-separator,
+ bibtex-autokey-year-length, bibtex-autokey-titlewords,
+ bibtex-autokey-title-terminators,
+ bibtex-autokey-titlewords-stretch,
+ bibtex-autokey-titleword-first-ignore,
+ bibtex-autokey-titleword-abbrevs,
+ bibtex-autokey-titleword-change-strings,
+ bibtex-autokey-titleword-length,
+ bibtex-autokey-titleword-separator,
+ bibtex-autokey-name-year-separator,
+ bibtex-autokey-year-title-separator): New variables related to
+ bibtex-generate-autokey.
+ (bibtex-find-entry-location): Optional second parameter maybedup
+ to tell it that entering a duplicate entry isn't to report by an
+ error but by the return value of the function (necessary for
+ bibtex-clean-entry to find the correct position of an entry with
+ an autogenerated key without disturbing the user with unwanted
+ messages).
+ (bibtex-help-message): New variable to avoid printing of help
+ messages in the echo area.
+ (assoc-of-regexp): New function to match an alist of regexps.
+ (bibtex-string-files, bibtex-completion-candidates, bibtex-mode):
+ New variables to allow bibtex-complete-string to work on strings
+ initialized from a variable and from @String definitions in a list
+ of files, too.
+ (bibtex-predefined-strings, bibtex-entry-field-alist): Changed to
+ user options.
+ (bibtex-mode): Changed doc string.
+ (many functions and variables): Changed documentation strings of
+ variables and functions to hold a complete sentence in the first
+ line.
+ (bibtex-print-help-message): Now line dependent and reports if it
+ is called outside a BibTeX field.
+ (validate-bibtex-buffer): Completely rewritten to validate, if
+ buffer is syntactically correct.
+ (find-bibtex-duplicates): Moved into validate-bibtex-buffer.
+ (ispell-abstract, bibtex-ispell-abstract, ispell-bibtex-entry,
+ bibtex-ispell-entry, beginning-of-bibtex-entry,
+ bibtex-beginning-of-entry, end-of-bibtex-entry,
+ bibtex-end-of-entry, hide-bibtex-entry-bodies,
+ bibtex-hide-entry-bodies, narrow-to-bibtex-entry,
+ bibtex-narrow-to-entry, sort-bibtex-entries, bibtex-sort-entries,
+ validate-bibtex-buffer, bibtex-validate-buffer,
+ find-bibtex-entry-location, bibtex-find-entry-location): All
+ interactive functions are renamed, so that any interface function
+ begins with "bibtex-". Mapping:
+ ispell-abstract --> bibtex-ispell-abstract
+ ispell-bibtex-entry --> bibtex-ispell-entry
+ beginning-of-bibtex-entry --> bibtex-beginning-of-entry
+ end-of-bibtex-entry --> bibtex-end-of-entry
+ hide-bibtex-entry-bodies --> bibtex-hide-entry-bodies
+ narrow-to-bibtex-entry --> bibtex-narrow-to-entry
+ sort-bibtex-entries --> bibtex-sort-entries
+ validate-bibtex-buffer --> bibtex-validate-buffer
+ find-bibtex-entry-location --> bibtex-find-entry-location
+ (bibtex-maintain-sorted-entries,
+ bibtex-sort-ignore-string-entries): Default is now t.
+ (bibtex-complete-string): String list is built from additional
+ string list bibtex-predefined-string and current strings in file.
+ (string-equalp): Deleted and substituted by string-equal.
+ (assoc-string-equalp): Renamed to assoc-ignore-case.
+ (bibtex-entry): Reference key can be entered with completion. All
+ reference keys that are defined in buffer and all labels that
+ appear in crossreference entries are object to completion.
+ (Entry types): Changed order of entries in menu "entry types".
+ (bibtex-entry-field-alist): Changed order of entries slightly to
+ be more conform with standard BibTeX style layouts.
+ (bibtex-mode-map): Uniform keybindings for \C-c\C-e prefix (often
+ used types on control keys, sometimes used types on normal keys,
+ rarely used types on shift keys, almost never used types on meta
+ keys).
+ (bibtex-mode-map): Function narrow-to-bibtex-entry and counterpart
+ widen and function hide-bibtex-entry-bodies and counterpart
+ show-all bounded to appropriate local keys.
+ (bibtex-abbrev-table): Deleted
+ (bibtex-current-entry-label, put-string-on-kill-ring): Deleted
+ (AUCTeX provides all the functionality needed for citation
+ completion).
+ (bibtex-enclosing-reference, bibtex-pop-previous, bibtex-pop-next,
+ bibtex-clean-entry): Hacked for speed (bibtex-pop-previous and
+ bibtex-pop-next were to slow for larger BibTeX files).
+ (bibtex-pop-previous, bibtex-pop-next): Delimiters from previous
+ or next entry are changed to actual delimters if necessary.
+ (bibtex-entry): Fixed bug (False entry wasn't reported in error
+ message if bibtex-entry was called with undefined reference name).
+ (bibtex-entry-field-alist, bibtex-entry, bibtex-make-field,
+ bibtex-next-field, bibtex-clean-entry): Every reference entry now
+ contains a comment in addition to the name of the reference. This
+ comment appears in the echo area if you start editing that field
+ (after calling bibtex-next-field).
+ (bibtex-include-OPTcrossref, bibtex-entry): Changed
+ bibtex-include-OPTcrossref from single boolean variable to hold a
+ list of reference names which should have a crossref field.
+ (bibtex-complete-word): New function, which completes word
+ fragment before point to the longest prefix of predefined strings
+ in the buffer in the same way that ispell-complete-word operates
+ for words found in the dictionary.
+ (bibtex-reference-head): Start of bibtex-reference-head changed
+ from "^[ \t]*\\(" to "^\\( \\|\t\\)*\\(" (bibtex-pop-previous and
+ bibtex-pop-next didn't work, probably due to a bug in
+ re-search-forward).
+ (several functions): Added support for {} as field delimiters
+ (better than '"' for accented characters.
+ (bibtex-clean-entry): If optional field crossref is empty or
+ missing, former optional fields (if bibtex-include-OPTcrossref was
+ t) are necessary again. bibtex-clean-entry complains if they are
+ empty but not if they are missing, so you can intenionally omit
+ them, e. g. for a pseudo @Journal entry (needed for
+ crossreferences) made out of an @article with missing non-optional
+ fields.
+ Menu bar entries aren't centered anymore.
1994-12-21 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4677,8 +4678,8 @@
1994-12-21 Dave Love <d.love@dl.ac.uk>
- * gud.el (gud-irixdbx-marker-filter): Changes for Irix dbx.
- (dbx): gud-up, gud-down are now special cases for Irix.
+ * gud.el (gud-irixdbx-marker-filter): Changes for Irix dbx.
+ (dbx): gud-up, gud-down are now special cases for Irix.
1994-12-21 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4687,8 +4688,8 @@
1994-12-21 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * tex-mode.el (tex-shell-map,tex-start-shell): Start with
- shell-mode-map.
+ * tex-mode.el (tex-shell-map, tex-start-shell): Start with
+ shell-mode-map.
1994-12-21 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4722,7 +4723,7 @@
1994-12-19 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * tex-mode.el (tex-start-shell): Use comint prompt and mode-map.
+ * tex-mode.el (tex-start-shell): Use comint prompt and mode-map.
1994-12-18 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4761,7 +4762,7 @@
and pass it along to vc-next-action.
* font-lock.el (font-lock-hack-keywords): Turn off undo generation.
- (font-lock-unfontify-region. font-lock-fontify-region): Likewise.
+ (font-lock-unfontify-region, font-lock-fontify-region): Likewise.
* c-mode.el (indent-c-exp): Don't be fooled by else_ or while_.
(c-indent-line): Likewise.
@@ -4790,7 +4791,7 @@
* replace.el (perform-replace):
Report number of replacements when done.
(query-replace, query-replace-regexp, replace-string)
- (map-query-replace-regexp. replace-regexp): No message here.
+ (map-query-replace-regexp, replace-regexp): No message here.
1994-12-13 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -4824,20 +4825,20 @@
1994-12-09 Ken Stevens <stevensk@afit.af.mil>
* ispell.el: Added ispell-offset for version consistency.
- (ispell-dictionary-alist): updated dictionaries & better match defaults
- (ispell-alternate-dictionary): added /usr/shar path
- (ispell-menu-map-needed): redo changes that made this incompatible
- with earlier versions of emacs19.
- (ispell-required-version): changed to assure version 3.1.12 accessed.
+ (ispell-dictionary-alist): Updated dictionaries & better match defaults
+ (ispell-alternate-dictionary): Added /usr/shar path
+ (ispell-menu-map-needed): Redo changes that made this incompatible
+ with earlier versions of Emacs19.
+ (ispell-required-version): Changed to assure version 3.1.12 accessed.
(ispell-word): Correctly accept buffer-local information.
- Does not try to modify read-only buffer on 'm' command.
- (ispell-command-loop): fixed bug that corrupted buffers.
- removed scrolling when *Choices* buffer shrinks.
+ Does not try to modify read-only buffer on 'm' command.
+ (ispell-command-loop): Fixed bug that corrupted buffers.
+ removed scrolling when *Choices* buffer shrinks.
(check-ispell-version): Correctly identifies new version requirements.
(ispell-region): Interaction updated for version 3.1.12+
Buffer read-only modification improvement. Dictionary messages added.
- (ispell-message-text-end): skips additional shell files.
- (ispell-buffer-local-parsing): extended-char mode now matches text mode
+ (ispell-message-text-end): Skips additional shell files.
+ (ispell-buffer-local-parsing): extended-char mode now matches text mode.
1994-12-09 Karl Heuer <kwzh@nutrimat.gnu.ai.mit.edu>
@@ -4857,8 +4858,8 @@
1994-12-08 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * cal-mayan.el (calendar-mayan-days-before-absolute-zero): Mention
- Hochleitner's correlation.
+ * cal-mayan.el (calendar-mayan-days-before-absolute-zero): Mention
+ Hochleitner's correlation.
1994-12-07 Richard Stallman <rms@green-hill>
@@ -4979,7 +4980,7 @@
1994-11-30 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* compile.el (compilation-next-error-locus): Parsed column numbers
- are 1-origin.
+ are 1-origin.
1994-11-29 Richard Stallman <rms@bethel>
@@ -4989,9 +4990,9 @@
1994-11-29 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * cal-x.el: New file.
+ * cal-x.el: New file.
- * calendar.el: Mention cal-x.el in comments.
+ * calendar.el: Mention cal-x.el in comments.
1994-11-28 Richard Stallman <rms@bethel>
@@ -5067,7 +5068,7 @@
1994-11-21 Per Bothner <bothner@kalessin.cygnus.com>
- * term.el (term-termcap-format): Add cd capability. Fix ei.
+ * term.el (term-termcap-format): Add cd capability. Fix ei.
(term-exec-1): Pass $TERMINFO instead of $TERMCAP if appropriate.
Pass emacs-version and term-version in $TERM.
Rewrite to set process-environment.
@@ -5145,7 +5146,7 @@
1994-11-15 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* etags.el (tags-query-replace): Use query-replace-read-args in
- interactive spec.
+ interactive spec.
1994-11-15 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -5217,7 +5218,7 @@
1994-11-10 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* compile.el (compile): With prefix arg, prompt even if (not
- compilation-read-command).
+ compilation-read-command).
(compilation-error-regexp-alist): Make first regexp match column
numbers too. Remove regexp for "prog:file:line: error". Replace
GNAT 1.82 regexp with "prog: file:line\(:col\)?: error".
@@ -5297,7 +5298,7 @@
1994-11-07 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * solar.el (solar-sunrise-sunset): Check for nil time before
+ * solar.el (solar-sunrise-sunset): Check for nil time before
trying to adjust it for dst.
1994-11-07 Francesco Potorti` (pot@cnuce.cnr.it)
@@ -5404,7 +5405,7 @@
1994-10-30 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * calendar.el (calendar-mode): Delete to window configuration var.
+ * calendar.el (calendar-mode): Delete to window configuration var.
1994-10-30 Richard Stallman <rms@pogo.gnu.ai.mit.edu>
@@ -5428,7 +5429,7 @@
1994-10-29 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
* calendar.el (calendar, calendar-other-month): Fix use of
- calendar-read-date.
+ calendar-read-date.
(calendar-read-date): Fix noday option.
* lunar.el (phases-of-moon): Fix use of calendar-read-date.
@@ -5542,7 +5543,7 @@
(calendar-latitude, calendar-longitude, calendar-location): Include
vector form; suggest setting values in site-local.el.
(solar-sin-degrees, solar-cosine-degrees): Change to macros.
- (solar-degrees-to-hours, solar-hours-to-days): Change to defsubst.
+ (solar-degrees-to-hours, solar-hours-to-days): Change to defsubst.
(solar-sunrise, solar-sunset): Allow use of vector forms of
latitude/longitude.
(calendar-latitude, calendar-longitude): New macros to allow use
@@ -5594,13 +5595,13 @@
1994-10-24 Francesco Potorti` (pot@cnuce.cnr.it)
- * man.el (Man-cleanup-manpage): do all the work if called
+ * man.el (Man-cleanup-manpage): Do all the work if called
interactively.
1994-10-23 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* dired.el (dired-mode-map): Add query-replace and search items to
- operate menu.
+ operate menu.
1994-10-23 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -5634,7 +5635,7 @@
1994-10-22 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* dired-aux.el (dired-do-tags-search,
- dired-do-tags-query-replace): New functions.
+ dired-do-tags-query-replace): New functions.
* dired.el (dired-mode-map): Bind A to dired-do-tags-search, Q to
dired-do-tags-query-replace.
@@ -5664,10 +5665,10 @@
1994-10-20 Noah Friedman <friedman@splode.com>
- * timer.el (timer-error, timer-abnormal-termination,
- timer-filter-error): New error conditions.
- (timer-process-filter, timer-process-sentinel): Signal an error,
- don't just print a message.
+ * timer.el (timer-error, timer-abnormal-termination,
+ timer-filter-error): New error conditions.
+ (timer-process-filter, timer-process-sentinel): Signal an error,
+ don't just print a message.
1994-10-20 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -5700,9 +5701,9 @@
1994-10-19 Noah Friedman <friedman@splode.com>
- * timer.el (timer-program): Make defvar, not defconst.
- Expand name of timer program in exec-directory here.
- (run-at-time): Not here.
+ * timer.el (timer-program): Make defvar, not defconst.
+ Expand name of timer program in exec-directory here.
+ (run-at-time): Not here.
1994-10-19 Boris Goldowsky <boris@cs.rochester.edu>
@@ -5713,7 +5714,7 @@
* facemenu.el (facemenu-add-new-face): New function.
* facemenu.el (facemenu-update): Don't redo top-level menu;
nothing should change. Move menu setup to defvars. Use
- facemenu-add-new-face. Changed global binding to C-down-mouse-3.
+ facemenu-add-new-face. Changed global binding to C-down-mouse-3.
* facemenu.el (facemenu-menu): "Update" item removed; should
no longer be needed interactively.
* facemenu.el (facemenu-complete-face-list): Just return faces,
@@ -5767,7 +5768,7 @@
1994-10-17 Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
- * paths.el (rmail-spool-directory): Add a condition to test
+ * paths.el (rmail-spool-directory): Add a condition to test
the Bull DPX/2.
1994-10-17 Morten Welinder <terra@mole.gnu.ai.mit.edu>
@@ -5895,7 +5896,7 @@
* facemenu.el (facemenu-read-color, facemenu-colors): New fn, var.
(facemenu-set-face, facemenu-set-face-from-menu,
- facemenu-after-change): Face property can take a list value; add
+ facemenu-after-change): Face property can take a list value; add
to it rather than completely replacing the property.
(facemenu-add-face, facemenu-discard-redundant-faces): New functions.
@@ -6149,13 +6150,13 @@
1994-10-06 Noah Friedman <friedman@splode.com>
- * type-break.el: Do not call type-break-mode upon loading.
- (type-break-time-sum): New function.
- (type-break-schedule): Use it. Make function interactive.
- (type-break-guestimate-keystroke-threshold): Use `N' interactive
- spec, not `n'.
- (type-break-demo-boring): Show elapsed time of break, or number of
- minutes left for good break.
+ * type-break.el: Do not call type-break-mode upon loading.
+ (type-break-time-sum): New function.
+ (type-break-schedule): Use it. Make function interactive.
+ (type-break-guestimate-keystroke-threshold): Use `N' interactive
+ spec, not `n'.
+ (type-break-demo-boring): Show elapsed time of break, or number of
+ minutes left for good break.
1994-10-06 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -6196,10 +6197,10 @@
* perl-mode.el (perl-font-lock-keywords): New variable.
- * pascal.el (pascal-font-lock-keywords): New variable.
+ * pascal.el (pascal-font-lock-keywords): New variable.
(pascal-mode): Set comment-start-skip and comment-end.
- * font-lock.el: (font-lock-mode): Doc fix; use add/remove-hook, not
+ * font-lock.el (font-lock-mode): Doc fix; use add/remove-hook, not
setq; removed make-local-variable of font-lock-no-comments.
(font-lock-set-defaults): Do it there, and use:
(font-lock-defaults-alist): Use it to set font-lock-keywords,
@@ -6207,14 +6208,14 @@
(turn-on-font-lock): New function.
(font-lock-fontify-buffer): Made interruptible; deleted messages.
- * font-lock.el: (font-lock-fontify-region): Made syntax state reliable
+ * font-lock.el (font-lock-fontify-region): Made syntax state reliable
by widening within new restriction; let cstart and cend for speed;
outputs message.
(font-lock-after-change-function): Remove spurious goto-char and use
forward-line, not 1+ end-of-line, for end of fontification region.
(font-lock-any-properties-p): Removed, use text-property-not-all.
- * font-lock.el (font-lock-*-face): facename values are themselves.
+ * font-lock.el (font-lock-*-face): Facename values are themselves.
(font-lock-variable-name-face, font-lock-reference-face): New vars.
(font-lock-doc-string-face): Removed.
(font-lock-keywords): Extended value syntax.
@@ -6383,8 +6384,8 @@
1994-09-30 Francesco Potorti` (pot@cnuce.cnr.it)
- * man.el (Man-init-defvars, Man-cleanup-manpage,
- Man-fontify-manpage): fix previous fix.
+ * man.el (Man-init-defvars, Man-cleanup-manpage)
+ (Man-fontify-manpage): Fix previous fix.
1994-09-30 Michael Ernst <mernst@research.microsoft.com>
@@ -6468,18 +6469,18 @@
1994-09-27 Christopher J. Madsen <ac608@yfn.ysu.edu>
- * files.el (hack-one-local-variable):
+ * files.el (hack-one-local-variable):
Support safe-local-variable property.
(compile-command): Add safe-local-variable property.
1994-09-27 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* etags.el (etags-tags-completion-table): Allow ? and : in guessed
- tag names.
+ tag names.
1994-09-26 Joe Ramey <ramey@csc.ti.com>
- * rmailsum.el (rmail-summary-delete-forward): Regexp for
+ * rmailsum.el (rmail-summary-delete-forward): Regexp for
recognizing deleted message should not require a space at the
beginning of the line.
@@ -6574,7 +6575,7 @@
* cc-mode.el (c-just-after-func-arglist-p)
(c-guess-basic-syntax, c-lineup-objc-method-args-2):
- More objc patches from Lele
+ More objc patches from Lele.
* cc-mode.el (c-indent-command):
With optional arg, shift-amt had wrong sign.
@@ -6586,7 +6587,6 @@
recognize empty arglists with close paren on separate line.
* cc-mode.el (c-mode-menu, c-emacs-features, c-mode-map)
-
(c-common-init): Remove dependency on string "Lucid" in
emacs-version. Use features to distinguish.
@@ -6615,7 +6615,7 @@
* cc-mode.el (c-offsets-alist-default, c-offsets-alist)
(c-guess-basic-syntax):
- Changed syntactic symbol c++-funcdecl-cont to ansi-funcdecl-cont
+ Changed syntactic symbol c++-funcdecl-cont to ansi-funcdecl-cont.
* cc-mode.el (c-offsets-alist, c-read-offset, c-set-offset):
Accept variable symbols as offsets.
@@ -6728,7 +6728,7 @@
1994-09-23 Jonathan I. Kamens (jik@gza-client1)
- * files.el (find-alternate-file): Confirm killing buffer
+ * files.el (find-alternate-file): Confirm killing buffer
only if it is visiting a file.
1994-09-23 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
@@ -6812,8 +6812,8 @@
* rmail.el (rmail-ignored-headers): Add resent-message-id.
- * simple.el (insert-buffer): Default to first other buffer,
- not first non-visible buffer.
+ * simple.el (insert-buffer): Default to first other buffer,
+ not first non-visible buffer.
1994-09-21 Erik Naggum <erik@naggum.no>
@@ -6843,57 +6843,57 @@
1994-09-19 Francesco Potorti` <pot@cnuce.cnr.it>
- * man.el (Man-notify-flag): replaces the old Man-notify
+ * man.el (Man-notify-flag): Replaces the old Man-notify
variable, use the old one if it is bound as initial value.
- (Man-reuse-okay-flag): replaces Man-reuse-okay.
- (Man-downcase-section-letters-flag): replaces
+ (Man-reuse-okay-flag): Replaces Man-reuse-okay.
+ (Man-downcase-section-letters-flag): Replaces
Man-downcase-section-letters.
- (Man-circular-pages-flag): replaces Man-circular-pages.
- (Man-auto-section-alist): variable deleted.
- (Man-section-translations-alist): removed the "3x" translation.
- (Man-untabify-command, Man-untabify-command-args): new vars.
- (Man-sed-command, Man-awk-command): new variables.
- (Man-sysv-sed-script, Man-berkeley-sed-script): new constants.
- (Man-name-regexp, Man-page-header-regexp): new variable.
- (Man-heading-regexp): changed default value.
- (Man-reference-regexp): now refers to previous regexps.
- (Man-arguments): new buffer-local variable.
- (Man-page-mode-string): changed default value.
- (Man-mode-map): changed the meanings of ",", ".", "q". Added new
+ (Man-circular-pages-flag): Replaces Man-circular-pages.
+ (Man-auto-section-alist): Variable deleted.
+ (Man-section-translations-alist): Removed the "3x" translation.
+ (Man-untabify-command, Man-untabify-command-args): New vars.
+ (Man-sed-command, Man-awk-command): New variables.
+ (Man-sysv-sed-script, Man-berkeley-sed-script): New constants.
+ (Man-name-regexp, Man-page-header-regexp): New variable.
+ (Man-heading-regexp): Changed default value.
+ (Man-reference-regexp): Now refers to previous regexps.
+ (Man-arguments): New buffer-local variable.
+ (Man-page-mode-string): Changed default value.
+ (Man-mode-map): Changed the meanings of ",", ".", "q". Added new
keys ">", "<", "k".
- (Man-page-mode-string): function deleted.
+ (Man-page-mode-string): Function deleted.
(Man-init-defvars): New function used for initialising the system
and environment dependent variables Man-fontify-manpage-flag,
Man-uses-untabify, Man-sed-script, Man-filter-list.
- (Man-delete-trailing-newlines): function deleted.
- (Man-make-page-mode-string): new subst.
- (Man-build-man-command): now subst instead of function. Modified
+ (Man-delete-trailing-newlines): Function deleted.
+ (Man-make-page-mode-string): New subst.
+ (Man-build-man-command): Now subst instead of function. Modified
to comply with the new format of Man-filter-list.
- (Man-downcase): function deleted.
- (Man-translate-references): complete rewrite.
- (Man-linepos): function deleted.
- (Man-match-substring): new function.
- (Man-default-man-args): function deleted.
- (Man-default-man-entry): complete rewrite.
- (man, manual-entry): function-alias relationship reversed.
- (man): prompt changed, prompt using interactive, call
+ (Man-downcase): Function deleted.
+ (Man-translate-references): Complete rewrite.
+ (Man-linepos): Function deleted.
+ (Man-match-substring): New function.
+ (Man-default-man-args): Function deleted.
+ (Man-default-man-entry): Complete rewrite.
+ (man, manual-entry): Function-alias relationship reversed.
+ (man): Prompt changed, prompt using interactive, call
Man-init-defvars, set Man-arguments.
- (Man-notify-when-ready): manage the 'pushy value.
- (Man-fontify-manpage): substitute Man-set-fonts.
- (Man-cleanup-manpage): new function.
- (Man-bgproc-sentinel): cleanup, call Man-fontify-manpage and
+ (Man-notify-when-ready): Manage the 'pushy value.
+ (Man-fontify-manpage): Substitute Man-set-fonts.
+ (Man-cleanup-manpage): New function.
+ (Man-bgproc-sentinel): Cleanup, call Man-fontify-manpage and
Man-cleanup-page when necessary.
- (Man-mode): call Man-strip-page-headers and Man-unindent.
+ (Man-mode): Call Man-strip-page-headers and Man-unindent.
(Man-build-section-alist, Man-build-references-alist,
Man-build-page-list): substs instead of functions.
- (Man-build-references-alist): cleanup.
- (Man-build-page-list): new algorithm.
- (Man-strip-page-headers, Man-unindent): new substs.
- (Man-find-section): assume section names start in column 1.
- (Man-quit): bury the buffer instead of killing it, delete the
+ (Man-build-references-alist): Cleanup.
+ (Man-build-page-list): New algorithm.
+ (Man-strip-page-headers, Man-unindent): New substs.
+ (Man-find-section): Assume section names start in column 1.
+ (Man-quit): Bury the buffer instead of killing it, delete the
frame when necessary.
- (Man-kill): new function.
- (Man-goto-page): do the right thing when the manpage is not found,
+ (Man-kill): New function.
+ (Man-goto-page): Do the right thing when the manpage is not found,
do not assume that Man-build-references-alist is broken.
1994-09-21 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -6948,14 +6948,14 @@
(describe-display-table): Describe the window border glyph.
(display-table-len): New constant.
(make-display-table, standard-display-8bit,
- standard-display-default, standard-display-ascii,
- standard-display-g1, standard-display-graphic,
- standard-display-underline): Use display-table-len, instead of
- hard-coding the display table length.
+ standard-display-default, standard-display-ascii,
+ standard-display-g1, standard-display-graphic,
+ standard-display-underline): Use display-table-len, instead of
+ hard-coding the display table length.
1994-09-19 Francesco Potorti` <pot@cnuce.cnr.it>
- * rlogin.el (rlogin): recognise the `-l user' option to rlogin and
+ * rlogin.el (rlogin): Recognise the `-l user' option to rlogin and
let comint and ange-ftp know about the correct home directory.
1994-09-19 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -6994,16 +6994,16 @@
(rmail-find-all-files, rmail-list-to-menu): New functions.
(rmail-construct-io-menu): New functions.
(rmail-input-menu): Function deleted.
- (rmail). Call rmail-construct-io-menu.
+ (rmail): Call rmail-construct-io-menu.
(rmail-mode-map): 'Input Rmail file (menu)' renamed to
- 'Input Rmail file'. 'Output (Rmail menu)' renamed to
+ 'Input Rmail file'. 'Output (Rmail menu)' renamed to
'Output Rmail file'.
* rmailout.el (rmail-output-menu): Function deleted.
* rmailsum.el (rmail-summary-construct-io-menu): New function.
(rmail-new-summary): Call rmail-summary-construct-io-menu.
(rmail-summary-mode-map): New menu items 'Input Rmail File' and
'Output Rmail File'.
- (rmail-summary-output-to-rmail-file): New arg 'file-name'. If it
+ (rmail-summary-output-to-rmail-file): New arg 'file-name'. If it
non-nil, call rmail-output-to-rmail-file.
1994-09-18 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -7089,7 +7089,7 @@
1994-09-16 Karl Heuer <kwzh@churchy.gnu.ai.mit.edu>
- * emacsbug.el: (report-emacs-bug): Insert configuration options.
+ * emacsbug.el (report-emacs-bug): Insert configuration options.
* ispell.el (ispell-menu-map): Order menu items by size:
buffer > region > word.
@@ -7104,7 +7104,7 @@
(Info-edit-mode): Put them here. Also enable undo, and call
Info-edit-mode-hook.
- * time.el: (display-time-24hr-format): Doc fix.
+ * time.el (display-time-24hr-format): Doc fix.
(display-time-filter): Reenable code that got deleted during a
mispatch.
@@ -7166,11 +7166,11 @@
expressions to include backup files with version numbers.
* jka-compr.el (jka-compr-insert-file-contents): Run the
- functions in after-insert-file-functions after the
- buffer-file-name has been set, not before.
+ functions in after-insert-file-functions after the
+ buffer-file-name has been set, not before.
* jka-compr.el (jka-compr-insert-file-contents): Properly
- handle the 'replace' argument for compressed files.
+ handle the 'replace' argument for compressed files.
1994-09-15 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -7283,7 +7283,7 @@
1994-09-05 Lawrence R. Dodd <dodd@roebling.poly.edu>
- * dired-x.el: (dired-omit-expunge): Avoid setting buffer modified
+ * dired-x.el (dired-omit-expunge): Avoid setting buffer modified
unless it was modified before and some mark is set so `%*' won't
appear in mode-line of omitted buffers.
@@ -7341,9 +7341,9 @@
1994-09-01 Francesco Potorti` (pot@cnuce.cnr.it)
- * cmacexp.el (c-macro-prompt-flag): set default to t.
+ * cmacexp.el (c-macro-prompt-flag): Set default to t.
(c-macro-expand): buffer-flush-undo is outdated.
- (c-macro-expansion): make exit-status a local variable.
+ (c-macro-expansion): Make exit-status a local variable.
1994-09-01 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -7446,7 +7446,7 @@
* lpr.el (lpr-headers-switches): Don't use -p on dgux, irix.
* edebug.el (edebug-read-and-maybe-wrap-form): Increment
- max-specpdl-size by 2000.
+ max-specpdl-size by 2000.
* jka-compr.el (jka-compr-insert-file-contents): Run the
after-insert-file-functions.
@@ -7517,7 +7517,7 @@
1994-08-13 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* cmacexp.el (c-macro-expansion): If the CPP output is empty, just
- show error messages.
+ show error messages.
* mouse.el (mouse-set-mark): Select the window before saving point.
@@ -7539,7 +7539,7 @@
* compile.el (compilation-set-window-height): Add save-excursion.
* rmail.el (rmail-maybe-display-summary): Don't set summary window
- height if its frame isn't split.
+ height if its frame isn't split.
* subr.el (one-window-p): Doc fix.
@@ -7882,9 +7882,9 @@
* imenu.el (imenu, imenu--flatten-index-alist): Add marker support.
(imenu--cleanup): New function.
- (imenu-example--name-and-position): Now uses markers.
+ (imenu-example--name-and-position): Now uses markers.
- * imenu.el (imenu-add-to-menubar): New function to add an entry
+ * imenu.el (imenu-add-to-menubar): New function to add an entry
to the menubar for the buffer's current local keymap.
1994-07-29 Richard Stallman <rms@mole.gnu.ai.mit.edu>
@@ -7975,10 +7975,10 @@
1994-07-25 Johan Vromans (jv@squirrel.NL.net)
- * forms.el (forms-read-file-filter): new hook function to
+ * forms.el (forms-read-file-filter): New hook function to
preprocess file contents before being passed to forms mode.
- (forms-write-file-filter): new hook function to preprocess file
- contents before it is being saved to disk. Can be used to undo the
+ (forms-write-file-filter): New hook function to preprocess file
+ contents before it is being saved to disk. Can be used to undo the
effects of `forms-read-file-filter'.
(forms-mode): Supply a default format if no `forms-format-list' was
specified.
@@ -8022,7 +8022,7 @@
1994-07-24 Erik Naggum <erik@naggum.no>
- * dired.el (dired-internal-noselect): a zero modtime means
+ * dired.el (dired-internal-noselect): A zero modtime means
directory is unchanged.
1994-07-23 David Robinson (drtr@mail.ast.cam.ac.uk)
@@ -8054,8 +8054,8 @@
1994-07-22 Ed Reingold <reingold@albert.gnu.ai.mit.edu>
- * cal-menu.el (calendar-mode-map): Change reference from renamed
- calendar-current-month to calendar-goto-today.
+ * cal-menu.el (calendar-mode-map): Change reference from renamed
+ calendar-current-month to calendar-goto-today.
1994-07-20 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8111,7 +8111,7 @@
1994-07-19 Michael Kifer (kifer@cs.sunysb.edu)
- * ediff.el (ediff-find-file, ediff-files-internal, ediff-patch-file):
+ * ediff.el (ediff-find-file, ediff-files-internal, ediff-patch-file):
Modified to work with remote and compressed files.
* ediff.el (ediff-read-file-name, ediff-buffers): Better defaults.
@@ -8139,7 +8139,7 @@
New or modified functions and variables attempting to prohibit
submission of empty bug reporters.
- * reporter.el: (reporter-prompt-for-summary-p): Default value now nil.
+ * reporter.el (reporter-prompt-for-summary-p): Default value now nil.
* reporter.el (reporter-dump-state): Make sure there's a final
newline after the setq sexp.
@@ -8206,15 +8206,15 @@
1994-07-13 Noah Friedman (friedman@splode.com)
- * rsz-mini.el: (resize-minibuffer-setup): Copy post-command-hook
- when handling minibuffer windows in other frames, not just
- minibuffer-exclusive frames.
- Resize the minibuffer window/frame now, in case it has already
- been initialized with text.
+ * rsz-mini.el (resize-minibuffer-setup): Copy post-command-hook
+ when handling minibuffer windows in other frames, not just
+ minibuffer-exclusive frames.
+ Resize the minibuffer window/frame now, in case it has already
+ been initialized with text.
1994-07-13 Ed Reingold (reingold@albert.gnu.ai.mit.edu)
- * diary-lib.el: Correct file name on last line of file.
+ * diary-lib.el: Correct file name on last line of file.
1994-07-13 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8278,7 +8278,7 @@
* indent.el (move-to-tab-stop): Delete spurious multiple definition.
-1994-07-11 Kevin Rodgers <kevinr@ihs.com> (tiny change)
+1994-07-11 Kevin Rodgers <kevinr@ihs.com> (tiny change)
* mailabbrev.el (define-mail-abbrev): Don't try to parse empty aliases.
@@ -8302,7 +8302,7 @@
* lisp.el (lisp-complete-symbol): Bind completion-fixup-function.
* mouse.el (mouse-choose-completion): Use mouse-face properties to
- find string to use.
+ find string to use.
* simple.el (completion-setup-function): Put on mouse-face prop
even if no window-system. Call completion-fixup-function if not nil.
@@ -8361,7 +8361,7 @@
* gud.el (gud-mips-p): Check for OSF system on Alpha also.
- * files.el (process-environment, exec-path, load-path,exec-directory):
+ * files.el (process-environment, exec-path, load-path, exec-directory):
Mark these as risky.
(hack-one-local-variable): Treat vars ending in -program and -command
as risky.
@@ -8403,7 +8403,7 @@
1994-07-06 Ed Reingold (reingold@albert.gnu.ai.mit.edu)
- * diary-lib.el (fancy-diary-display): Consistently turn off selective
+ * diary-lib.el (fancy-diary-display): Consistently turn off selective
display in diary buffer before doing anything.
1994-07-06 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8446,9 +8446,9 @@
1994-07-05 Ed Reingold (reingold@albert.gnu.ai.mit.edu)
- * calendar.el (generate-calendar-month): Make highlighted text for
- mouse-2 a one character wide for single-digit dates (this undoes
- the incorrect fix of May 30, 1994).
+ * calendar.el (generate-calendar-month): Make highlighted text for
+ mouse-2 a one character wide for single-digit dates (this undoes
+ the incorrect fix of May 30, 1994).
1994-07-04 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8460,7 +8460,7 @@
1994-07-04 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* add-log.el (add-change-log-entry): Apply expand-file-name to
- FILE-NAME.
+ FILE-NAME.
1994-07-03 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8490,7 +8490,7 @@
1994-07-02 Morten Welinder (terra@diku.dk)
* meese.el: Use add-hook, (provide 'meese).
- (protect-innocence-hook): compare expanded file names for the sake
+ (protect-innocence-hook): Compare expanded file names for the sake
of non-unix file systems. Use expand-file-name instead of concat
to create "celibacy.1" file name. Check that the "sex.6" exists.
@@ -8512,7 +8512,7 @@
* bytecomp.el (byte-compile-defalias): Fix typo in prev change.
- * bytecomp.el (byte-compile-callargs-warn): Handle function defnition
+ * bytecomp.el (byte-compile-callargs-warn): Handle function definition
that is not a lambda expression or byte code function.
(byte-compile-arglist-warn): Likewise.
(byte-compile-defalias): New function, used to compile defalias.
@@ -8563,8 +8563,8 @@
1994-06-29 Noah Friedman (friedman@splode.com)
- * comint.el (comint-password-prompt-regexp): New variable.
- (comint-watch-for-password-prompt): Use it.
+ * comint.el (comint-password-prompt-regexp): New variable.
+ (comint-watch-for-password-prompt): Use it.
1994-06-29 Richard Stallman (rms@gnu.ai.mit.edu)
@@ -8581,11 +8581,11 @@
1994-06-28 Lawrence R. Dodd (dodd@roebling.poly.edu)
- * dired-x.el (dired-x-hands-off-my-keys): New user-defined variable.
- (dired-x-bind-find-file): Use it.
- (dired-x-find-file): New function to substitute find-file.
- (dired-x-find-file-other-window): New function to substitute
- find-file-other-window.
+ * dired-x.el (dired-x-hands-off-my-keys): New user-defined variable.
+ (dired-x-bind-find-file): Use it.
+ (dired-x-find-file): New function to substitute find-file.
+ (dired-x-find-file-other-window): New function to substitute
+ find-file-other-window.
1994-06-28 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8715,19 +8715,19 @@
1994-06-22 Noah Friedman (friedman@splode.com)
- * rsz-mini.el (resize-minibuffer-window-exactly,
- resize-minibuffer-frame, resize-minibuffer-frame-exactly): Doc
- fixes.
- (resize-minibuffer-frame-exactly): make default t.
- (resize-minibuffer-frame-original-height): New variable.
- (resize-minibuffer-setup): Set it locally in the minibuffer.
- (resize-minibuffer-frame): Use it instead of minibuffer-frame-alist's
- height.
- (resize-minibuffer-setup): Append resize-minibuffer-window and
- resize-minibuffer-frame to the end of post-command-hook, don't
- insert on the front.
- (resize-minibuffer-window-restore): New function.
- (resize-minibuffer-setup): Put it on minibuffer-exit-hook.
+ * rsz-mini.el (resize-minibuffer-window-exactly,
+ resize-minibuffer-frame, resize-minibuffer-frame-exactly): Doc
+ fixes.
+ (resize-minibuffer-frame-exactly): Make default t.
+ (resize-minibuffer-frame-original-height): New variable.
+ (resize-minibuffer-setup): Set it locally in the minibuffer.
+ (resize-minibuffer-frame): Use it instead of minibuffer-frame-alist's
+ height.
+ (resize-minibuffer-setup): Append resize-minibuffer-window and
+ resize-minibuffer-frame to the end of post-command-hook, don't
+ insert on the front.
+ (resize-minibuffer-window-restore): New function.
+ (resize-minibuffer-setup): Put it on minibuffer-exit-hook.
1994-06-22 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -8856,7 +8856,7 @@
* tpu-extras.el: Require tpu-edt.
(tpu-extras-revision): Variable deleted.
- * tpu-mapper.el: Change size of selected screen. Reposition after
+ * tpu-mapper.el: Change size of selected screen. Reposition after
printing help. Null default directory for save. Produce minibuffer
key bindings for kp4 and kp5.
(tpu-kp4, tpu-kp5): New variables.
@@ -8906,7 +8906,7 @@
* faces.el (x-create-frame-with-faces): Set the cursor color last.
-1994-06-17 Kevin Rodgers (kevinr@ihs.com) (tiny change)
+1994-06-17 Kevin Rodgers (kevinr@ihs.com) (tiny change)
* mailabbrev.el (build-mail-abbrevs): Pass a recursivep argument in
recursive call.
@@ -8914,7 +8914,7 @@
1994-06-17 Roland McGrath (roland@geech.gnu.ai.mit.edu)
* etags.el (tags-table-computed-list,
- tags-table-computed-list-for): New variables.
+ tags-table-computed-list-for): New variables.
(tags-table-list-pointer, tags-table-list-started-at): Doc fixes.
(tags-table-parent-pointer-list): Variable removed.
(tags-table-check-computed-list, tags-table-extend-computed-list): New
@@ -8939,12 +8939,12 @@
1994-06-16 Noah Friedman (friedman@splode.com)
- * rlogin.el (rlogin-password-paranoia): Variable deleted.
- (rlogin-password): Function deleted.
- This functionality is handled by comint-watch-for-password-prompt.
+ * rlogin.el (rlogin-password-paranoia): Variable deleted.
+ (rlogin-password): Function deleted.
+ This functionality is handled by comint-watch-for-password-prompt.
- * rlogin.el (rlogin-filter): Function deleted.
- (rlogin): Do not set the process filter to rlogin-filter.
+ * rlogin.el (rlogin-filter): Function deleted.
+ (rlogin): Do not set the process filter to rlogin-filter.
1994-06-15 Morten Welinder (terra@diku.dk)
@@ -8981,8 +8981,8 @@
1994-06-14 Ed Reingold (reingold@albert.gnu.ai.mit.edu)
* cal-menu.el (calendar-mode-map): Change moon menu bar to pop up
- a menu instead doing it directly.
- (calendar-mouse-2-date-menu): Remove moon phase.
+ a menu instead doing it directly.
+ (calendar-mouse-2-date-menu): Remove moon phase.
1994-06-14 Richard Stallman (rms@albert.gnu.ai.mit.edu)
@@ -9052,7 +9052,7 @@
(forms--local-write-file-function): New function to be used as
`local-write-file-hooks'.
(forms-mode): Use it.
- (forms-find-file,forms-find-file-other-window): Locally set
+ (forms-find-file, forms-find-file-other-window): Locally set
`enable-local-eval' and `enable-local-variables' to t.
(forms-find-file-other-window): Remove extraneous call to
`eval-current-buffer'.
@@ -9065,10 +9065,10 @@
1994-06-12 Richard Stallman (rms@mole.gnu.ai.mit.edu)
- * iso-cvt.el (iso-iso2tex-trans-tab): Add a few characters.
- (iso-iso2gtex-trans-tab): Likewise.
- (iso-tex2iso-trans-tab): Recognize TeX accent sequences without braces.
- (iso-gtex2iso-trans-tab): Likewise.
+ * iso-cvt.el (iso-iso2tex-trans-tab): Add a few characters.
+ (iso-iso2gtex-trans-tab): Likewise.
+ (iso-tex2iso-trans-tab): Recognize TeX accent sequences without braces.
+ (iso-gtex2iso-trans-tab): Likewise.
* info.el (Info-fontify-node): Require some whitespace after *Note.
@@ -9142,7 +9142,7 @@
1994-06-07 Morten Welinder (terra@diku.dk)
- * dos-fns.el (Info-default-directory-list): Setting this no
+ * dos-fns.el (Info-default-directory-list): Setting this no
longer needed.
1994-06-07 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@@ -9198,7 +9198,7 @@
solar-equinoxes-solstices): Revised to use the rewritten and new fcns.
* calendar.el (solar-holidays): Revised to use the rewritten and
- new fcns.
+ new fcns.
* lunar.el (lunar-phase): Revised to use the rewritten and new fcns.
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 59a81d7799d..ce3361a5678 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -35,6 +35,12 @@ EMACS = ../src/emacs
EMACSOPT = -batch --no-site-file --multibyte
+# Extra flags to pass to the byte compiler
+BYTE_COMPILE_EXTRA_FLAGS =
+# For example to not display the undefined function warnings you can use this:
+# BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))'
+# The example above is just for developers, it should not be used by default.
+
SOURCES = *.el COPYING Makefile
lisptagsfiles1 = $(lisp)/[a-zA-Z]*.el
lisptagsfiles2 = $(lisp)/[a-zA-Z]*/[a-zA-Z]*.el
@@ -128,7 +134,7 @@ cvs-update: recompile autoloads finder-data custom-deps
# Update the AUTHORS file.
update-authors:
- $(emacs) -l authors -f batch-update-authors $(srcdir)/AUTHORS $(srcdir)
+ $(emacs) -l authors -f batch-update-authors $(srcdir)/etc/AUTHORS $(srcdir)
TAGS: $(lisptagsfiles1) $(lisptagsfiles2)
els=`echo $(lisptagsfiles1) $(lisptagsfiles2) | sed -e "s,$(lisp)/loaddefs[^ ]*,," -e "s,$(lisp)/ldefs-boot[^ ]*,,"`; \
@@ -141,7 +147,7 @@ TAGS-LISP: $(lisptagsfiles1) $(lisptagsfiles2)
.SUFFIXES: .elc .el
.el.elc: $(lisp)/subdirs.el
- -$(emacs) -f batch-byte-compile $<
+ -$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $<
# Compile all Lisp files, but don't recompile those that are up to
# date. Some files don't actually get compiled because they set the
@@ -166,7 +172,7 @@ compile: $(lisp)/subdirs.el mh-autoloads doit
if test -f $$el; \
then \
echo Compiling $$el; \
- $(emacs) -f batch-byte-compile-if-not-done $$el || exit 1; \
+ $(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile-if-not-done $$el || exit 1; \
fi \
done
@@ -185,14 +191,14 @@ compile-always: $(lisp)/subdirs.el mh-autoloads doit
if test -f $$el; \
then \
echo Compiling $$el; \
- $(emacs) -f batch-byte-compile $$el || exit 1; \
+ $(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
fi \
done
compile-calc:
for el in `find $(lisp)/calc -name '*.el'`; do \
echo Compiling $$el; \
- $(emacs) -f batch-byte-compile $$el || exit 1; \
+ $(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
done
# Backup compiled Lisp files in elc.tar.gz. If that file already
@@ -219,7 +225,7 @@ $(lisp)/progmodes/cc-mode.elc: \
$(lisp)/progmodes/cc-mode.el \
$(lisp)/progmodes/cc-langs.el \
$(lisp)/progmodes/cc-defs.el
- $(emacs) -f batch-byte-compile $(lisp)/progmodes/cc-mode.el
+ $(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $(lisp)/progmodes/cc-mode.el
# Update MH-E internal autoloads. These are not to be confused with
# the autoloads for the MH-E entry points, which are already in
@@ -275,6 +281,9 @@ $(lisp)/mh-e/mh-loaddefs.el: $(lisp)/subdirs.el $(MH_E_SRC)
# an up-to-date copy of loaddefs.el that is uncorrupted by
# local changes. (Because loaddefs.el is an automatically generated
# file, we don't want to store it in the source repository).
+#
+# The chmod +w is to handle env var CVSREAD=1. Files named
+# are identified by being the value of `generated-autoload-file'.
bootstrap-prepare:
if test -x $(EMACS); then \
@@ -282,6 +291,9 @@ bootstrap-prepare:
else \
cp $(lisp)/ldefs-boot.el $(lisp)/loaddefs.el; \
fi
+ chmod +w $(lisp)/loaddefs.el \
+ $(lisp)/ps-print.el \
+ $(lisp)/emacs-lisp/cl-loaddefs.el
maintainer-clean: distclean
cd $(lisp); rm -f *.elc */*.elc $(AUTOGENEL)
@@ -301,4 +313,10 @@ bootstrap-after: finder-data custom-deps
distclean:
-rm -f ./Makefile
+.PHONY: check-declare
+
+check-declare:
+ $(emacs) -l $(lisp)/emacs-lisp/check-declare \
+ --eval '(check-declare-directory "$(lisp)")'
+
# Makefile ends here.
diff --git a/lisp/abbrev.el b/lisp/abbrev.el
index b2b03fe63bb..d7dfea2f6d8 100644
--- a/lisp/abbrev.el
+++ b/lisp/abbrev.el
@@ -27,8 +27,20 @@
;; This facility is documented in the Emacs Manual.
+;; Todo:
+
+;; - Make abbrev-file-name obey user-emacs-directory.
+;; - Cleanup name space.
+
;;; Code:
+(eval-when-compile (require 'cl))
+
+(defgroup abbrev-mode nil
+ "Word abbreviations mode."
+ :link '(custom-manual "(emacs)Abbrevs")
+ :group 'abbrev)
+
(defcustom only-global-abbrevs nil
"Non-nil means user plans to use global abbrevs only.
This makes the commands that normally define mode-specific abbrevs
@@ -71,10 +83,8 @@ to enable or disable Abbrev mode in the current buffer."
(defun kill-all-abbrevs ()
"Undefine all defined abbrevs."
(interactive)
- (let ((tables abbrev-table-name-list))
- (while tables
- (clear-abbrev-table (symbol-value (car tables)))
- (setq tables (cdr tables)))))
+ (dolist (tablesym abbrev-table-name-list)
+ (clear-abbrev-table (symbol-value tablesym))))
(defun copy-abbrev-table (table)
"Make a new abbrev-table with the same abbrevs as TABLE."
@@ -94,10 +104,8 @@ Mark is set after the inserted text."
(interactive)
(push-mark
(save-excursion
- (let ((tables abbrev-table-name-list))
- (while tables
- (insert-abbrev-table-description (car tables) t)
- (setq tables (cdr tables))))
+ (dolist (tablesym abbrev-table-name-list)
+ (insert-abbrev-table-description tablesym t))
(point))))
(defun list-abbrevs (&optional local)
@@ -119,18 +127,17 @@ Otherwise display all abbrevs."
found))
(defun prepare-abbrev-list-buffer (&optional local)
- (save-excursion
- (let ((table local-abbrev-table))
- (set-buffer (get-buffer-create "*Abbrevs*"))
- (erase-buffer)
- (if local
- (insert-abbrev-table-description (abbrev-table-name table) t)
- (dolist (table abbrev-table-name-list)
- (insert-abbrev-table-description table t)))
- (goto-char (point-min))
- (set-buffer-modified-p nil)
- (edit-abbrevs-mode)
- (current-buffer))))
+ (with-current-buffer (get-buffer-create "*Abbrevs*")
+ (erase-buffer)
+ (if local
+ (insert-abbrev-table-description
+ (abbrev-table-name local-abbrev-table) t)
+ (dolist (table abbrev-table-name-list)
+ (insert-abbrev-table-description table t)))
+ (goto-char (point-min))
+ (set-buffer-modified-p nil)
+ (edit-abbrevs-mode)
+ (current-buffer)))
(defun edit-abbrevs-mode ()
"Major mode for editing the list of abbrev definitions.
@@ -363,6 +370,544 @@ A prefix argument means don't query; expand all abbrevs."
(if (or noquery (y-or-n-p (format "Expand `%s'? " string)))
(expand-abbrev)))))))
+;;; Abbrev properties.
+
+(defun abbrev-table-get (table prop)
+ "Get the PROP property of abbrev table TABLE."
+ (let ((sym (intern-soft "" table)))
+ (if sym (get sym prop))))
+
+(defun abbrev-table-put (table prop val)
+ "Set the PROP property of abbrev table TABLE to VAL."
+ (let ((sym (intern "" table)))
+ (set sym nil) ; Make sure it won't be confused for an abbrev.
+ (put sym prop val)))
+
+(defalias 'abbrev-get 'get
+ "Get the property PROP of abbrev ABBREV
+
+\(fn ABBREV PROP)")
+
+(defalias 'abbrev-put 'put
+ "Set the property PROP of abbrev ABREV to value VAL.
+See `define-abbrev' for the effect of some special properties.
+
+\(fn ABBREV PROP VAL)")
+
+(defmacro abbrev-with-wrapper-hook (var &rest body)
+ "Run BODY wrapped with the VAR hook.
+VAR is a special hook: its functions are called with one argument which
+is the \"original\" code (the BODY), so the hook function can wrap the
+original function, can call it several times, or even not call it at all.
+VAR is normally a symbol (a variable) in which case it is treated like a hook,
+with a buffer-local and a global part. But it can also be an arbitrary expression.
+This is similar to an `around' advice."
+ (declare (indent 1) (debug t))
+ ;; We need those two gensyms because CL's lexical scoping is not available
+ ;; for function arguments :-(
+ (let ((funs (make-symbol "funs"))
+ (global (make-symbol "global")))
+ ;; Since the hook is a wrapper, the loop has to be done via
+ ;; recursion: a given hook function will call its parameter in order to
+ ;; continue looping.
+ `(labels ((runrestofhook (,funs ,global)
+ ;; `funs' holds the functions left on the hook and `global'
+ ;; holds the functions left on the global part of the hook
+ ;; (in case the hook is local).
+ (lexical-let ((funs ,funs)
+ (global ,global))
+ (if (consp funs)
+ (if (eq t (car funs))
+ (runrestofhook (append global (cdr funs)) nil)
+ (funcall (car funs)
+ (lambda () (runrestofhook (cdr funs) global))))
+ ;; Once there are no more functions on the hook, run
+ ;; the original body.
+ ,@body))))
+ (runrestofhook ,var
+ ;; The global part of the hook, if any.
+ ,(if (symbolp var)
+ `(if (local-variable-p ',var)
+ (default-value ',var)))))))
+
+
+;;; Code that used to be implemented in src/abbrev.c
+
+(defvar abbrev-table-name-list '(fundamental-mode-abbrev-table
+ global-abbrev-table)
+ "List of symbols whose values are abbrev tables.")
+
+(defun make-abbrev-table (&optional props)
+ "Create a new, empty abbrev table object.
+PROPS is a "
+ ;; The value 59 is an arbitrary prime number.
+ (let ((table (make-vector 59 0)))
+ ;; Each abbrev-table has a `modiff' counter which can be used to detect
+ ;; when an abbreviation was added. An example of use would be to
+ ;; construct :regexp dynamically as the union of all abbrev names, so
+ ;; `modiff' can let us detect that an abbrev was added and hence :regexp
+ ;; needs to be refreshed.
+ ;; The presence of `modiff' entry is also used as a tag indicating this
+ ;; vector is really an abbrev-table.
+ (abbrev-table-put table :abbrev-table-modiff 0)
+ (while (consp props)
+ (abbrev-table-put table (pop props) (pop props)))
+ table))
+
+(defun abbrev-table-p (object)
+ (and (vectorp object)
+ (numberp (abbrev-table-get object :abbrev-table-modiff))))
+
+(defvar global-abbrev-table (make-abbrev-table)
+ "The abbrev table whose abbrevs affect all buffers.
+Each buffer may also have a local abbrev table.
+If it does, the local table overrides the global one
+for any particular abbrev defined in both.")
+
+(defvar abbrev-minor-mode-table-alist nil
+ "Alist of abbrev tables to use for minor modes.
+Each element looks like (VARIABLE . ABBREV-TABLE);
+ABBREV-TABLE is active whenever VARIABLE's value is non-nil.")
+
+(defvar fundamental-mode-abbrev-table
+ (let ((table (make-abbrev-table)))
+ ;; Set local-abbrev-table's default to be fundamental-mode-abbrev-table.
+ (setq-default local-abbrev-table table)
+ table)
+ "The abbrev table of mode-specific abbrevs for Fundamental Mode.")
+
+(defvar abbrevs-changed nil
+ "Set non-nil by defining or altering any word abbrevs.
+This causes `save-some-buffers' to offer to save the abbrevs.")
+
+(defcustom abbrev-all-caps nil
+ "Non-nil means expand multi-word abbrevs all caps if abbrev was so."
+ :type 'boolean
+ :group 'abbrev-mode)
+
+(defvar abbrev-start-location nil
+ "Buffer position for `expand-abbrev' to use as the start of the abbrev.
+When nil, use the word before point as the abbrev.
+Calling `expand-abbrev' sets this to nil.")
+
+(defvar abbrev-start-location-buffer nil
+ "Buffer that `abbrev-start-location' has been set for.
+Trying to expand an abbrev in any other buffer clears `abbrev-start-location'.")
+
+(defvar last-abbrev nil
+ "The abbrev-symbol of the last abbrev expanded. See `abbrev-symbol'.")
+
+(defvar last-abbrev-text nil
+ "The exact text of the last abbrev expanded.
+nil if the abbrev has already been unexpanded.")
+
+(defvar last-abbrev-location 0
+ "The location of the start of the last abbrev expanded.")
+
+;; (defvar local-abbrev-table fundamental-mode-abbrev-table
+;; "Local (mode-specific) abbrev table of current buffer.")
+;; (make-variable-buffer-local 'local-abbrev-table)
+
+(defcustom pre-abbrev-expand-hook nil
+ "Function or functions to be called before abbrev expansion is done.
+This is the first thing that `expand-abbrev' does, and so this may change
+the current abbrev table before abbrev lookup happens."
+ :type 'hook
+ :group 'abbrev-mode)
+(make-obsolete-variable 'pre-abbrev-expand-hook 'abbrev-expand-functions "23.1")
+
+(defun clear-abbrev-table (table)
+ "Undefine all abbrevs in abbrev table TABLE, leaving it empty."
+ (setq abbrevs-changed t)
+ (let* ((sym (intern-soft "" table)))
+ (dotimes (i (length table))
+ (aset table i 0))
+ ;; Preserve the table's properties.
+ (assert sym)
+ (intern sym table)
+ (abbrev-table-put table :abbrev-table-modiff
+ (1+ (abbrev-table-get table :abbrev-table-modiff)))))
+
+(defun define-abbrev (table name expansion &optional hook &rest props)
+ "Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
+NAME must be a string, and should be lower-case.
+EXPANSION should usually be a string.
+To undefine an abbrev, define it with EXPANSION = nil.
+If HOOK is non-nil, it should be a function of no arguments;
+it is called after EXPANSION is inserted.
+If EXPANSION is not a string, the abbrev is a special one,
+ which does not expand in the usual way but only runs HOOK.
+
+PROPS is a property list. The following properties are special:
+- `:count': the value for the abbrev's usage-count, which is incremented each time
+ the abbrev is used (the default is zero).
+- `:system': if non-nil, says that this is a \"system\" abbreviation
+ which should not be saved in the user's abbreviation file.
+ Unless `:system' is `force', a system abbreviation will not
+ overwrite a non-system abbreviation of the same name.
+- `:case-fixed': non-nil means that abbreviations are looked up without
+ case-folding, and the expansion is not capitalized/upcased.
+- `:enable-function': a function of no argument which returns non-nil iff the
+ abbrev should be used for a particular call of `expand-abbrev'.
+
+An obsolete but still supported calling form is:
+
+\(define-abbrev TABLE NAME EXPANSION &optional HOOK COUNT SYSTEM)."
+ (when (and (consp props) (or (null (car props)) (numberp (car props))))
+ ;; Old-style calling convention.
+ (setq props (list* :count (car props)
+ (if (cadr props) (list :system (cadr props))))))
+ (unless (plist-get props :count)
+ (setq props (plist-put props :count 0)))
+ (let ((system-flag (plist-get props :system))
+ (sym (intern name table)))
+ ;; Don't override a prior user-defined abbrev with a system abbrev,
+ ;; unless system-flag is `force'.
+ (unless (and (not (memq system-flag '(nil force)))
+ (boundp sym) (symbol-value sym)
+ (not (abbrev-get sym :system)))
+ (unless (or system-flag
+ (and (boundp sym) (fboundp sym)
+ ;; load-file-name
+ (equal (symbol-value sym) expansion)
+ (equal (symbol-function sym) hook)))
+ (setq abbrevs-changed t))
+ (set sym expansion)
+ (fset sym hook)
+ (setplist sym
+ ;; Don't store the `force' value of `system-flag' into
+ ;; the :system property.
+ (if (eq 'force system-flag) (plist-put props :system t) props))
+ (abbrev-table-put table :abbrev-table-modiff
+ (1+ (abbrev-table-get table :abbrev-table-modiff))))
+ name))
+
+(defun abbrev--check-chars (abbrev global)
+ "Check if the characters in ABBREV have word syntax in either the
+current (if global is nil) or standard syntax table."
+ (with-syntax-table
+ (cond ((null global) (standard-syntax-table))
+ ;; ((syntax-table-p global) global)
+ (t (syntax-table)))
+ (when (string-match "\\W" abbrev)
+ (let ((badchars ())
+ (pos 0))
+ (while (string-match "\\W" abbrev pos)
+ (pushnew (aref abbrev (match-beginning 0)) badchars)
+ (setq pos (1+ pos)))
+ (error "Some abbrev characters (%s) are not word constituents %s"
+ (apply 'string (nreverse badchars))
+ (if global "in the standard syntax" "in this mode"))))))
+
+(defun define-global-abbrev (abbrev expansion)
+ "Define ABBREV as a global abbreviation for EXPANSION.
+The characters in ABBREV must all be word constituents in the standard
+syntax table."
+ (interactive "sDefine global abbrev: \nsExpansion for %s: ")
+ (abbrev--check-chars abbrev 'global)
+ (define-abbrev global-abbrev-table (downcase abbrev) expansion))
+
+(defun define-mode-abbrev (abbrev expansion)
+ "Define ABBREV as a mode-specific abbreviation for EXPANSION.
+The characters in ABBREV must all be word-constituents in the current mode."
+ (interactive "sDefine mode abbrev: \nsExpansion for %s: ")
+ (unless local-abbrev-table
+ (error "Major mode has no abbrev table"))
+ (abbrev--check-chars abbrev nil)
+ (define-abbrev local-abbrev-table (downcase abbrev) expansion))
+
+(defun abbrev--active-tables (&optional tables)
+ "Return the list of abbrev tables currently active.
+TABLES if non-nil overrides the usual rules. It can hold
+either a single abbrev table or a list of abbrev tables."
+ ;; We could just remove the `tables' arg and let callers use
+ ;; (or table (abbrev--active-tables)) but then they'd have to be careful
+ ;; to treat the distinction between a single table and a list of tables.
+ (cond
+ ((consp tables) tables)
+ ((vectorp tables) (list tables))
+ (t
+ (let ((tables (if (listp local-abbrev-table)
+ (append local-abbrev-table
+ (list global-abbrev-table))
+ (list local-abbrev-table global-abbrev-table))))
+ ;; Add the minor-mode abbrev tables.
+ (dolist (x abbrev-minor-mode-table-alist)
+ (when (and (symbolp (car x)) (boundp (car x)) (symbol-value (car x)))
+ (setq tables
+ (if (listp (cdr x))
+ (append (cdr x) tables) (cons (cdr x) tables)))))
+ tables))))
+
+
+(defun abbrev-symbol (abbrev &optional table)
+ "Return the symbol representing abbrev named ABBREV.
+This symbol's name is ABBREV, but it is not the canonical symbol of that name;
+it is interned in an abbrev-table rather than the normal obarray.
+The value is nil if that abbrev is not defined.
+Optional second arg TABLE is abbrev table to look it up in.
+The default is to try buffer's mode-specific abbrev table, then global table."
+ (let ((tables (abbrev--active-tables table))
+ sym)
+ (while (and tables (not (symbol-value sym)))
+ (let* ((table (pop tables))
+ (case-fold (not (abbrev-table-get table :case-fixed))))
+ (setq tables (append (abbrev-table-get table :parents) tables))
+ ;; In case the table doesn't set :case-fixed but some of the
+ ;; abbrevs do, we have to be careful.
+ (setq sym
+ ;; First try without case-folding.
+ (or (intern-soft abbrev table)
+ (when case-fold
+ ;; We didn't find any abbrev, try case-folding.
+ (let ((sym (intern-soft (downcase abbrev) table)))
+ ;; Only use it if it doesn't require :case-fixed.
+ (and sym (not (abbrev-get sym :case-fixed))
+ sym)))))))
+ (if (symbol-value sym)
+ sym)))
+
+
+(defun abbrev-expansion (abbrev &optional table)
+ "Return the string that ABBREV expands into in the current buffer.
+Optionally specify an abbrev table as second arg;
+then ABBREV is looked up in that table only."
+ (symbol-value (abbrev-symbol abbrev table)))
+
+
+(defun abbrev--before-point ()
+ "Try and find an abbrev before point. Return it if found, nil otherwise."
+ (unless (eq abbrev-start-location-buffer (current-buffer))
+ (setq abbrev-start-location nil))
+
+ (let ((tables (abbrev--active-tables))
+ (pos (point))
+ start end name res)
+
+ (if abbrev-start-location
+ (progn
+ (setq start abbrev-start-location)
+ (setq abbrev-start-location nil)
+ ;; Remove the hyphen inserted by `abbrev-prefix-mark'.
+ (if (and (< start (point-max))
+ (eq (char-after start) ?-))
+ (delete-region start (1+ start)))
+ (skip-syntax-backward " ")
+ (setq end (point))
+ (when (> end start)
+ (setq name (buffer-substring start end))
+ (goto-char pos) ; Restore point.
+ (list (abbrev-symbol name tables) name start end)))
+
+ (while (and tables (not (car res)))
+ (let* ((table (pop tables))
+ (enable-fun (abbrev-table-get table :enable-function)))
+ (setq tables (append (abbrev-table-get table :parents) tables))
+ (setq res
+ (and (or (not enable-fun) (funcall enable-fun))
+ (looking-back (or (abbrev-table-get table :regexp)
+ "\\<\\(\\w+\\)\\W*")
+ (line-beginning-position))
+ (setq start (match-beginning 1))
+ (setq end (match-end 1))
+ (setq name (buffer-substring start end))
+ (let ((abbrev (abbrev-symbol name table)))
+ (when abbrev
+ (setq enable-fun (abbrev-get abbrev :enable-function))
+ (and (or (not enable-fun) (funcall enable-fun))
+ ;; This will also look it up in parent tables.
+ ;; This is not on purpose, but it seems harmless.
+ (list abbrev name start end))))))
+ ;; Restore point.
+ (goto-char pos)))
+ res)))
+
+(defvar abbrev-expand-functions nil
+ "Wrapper hook around `expand-abbrev'.
+The functions on this special hook are called with one argument:
+a function that performs the abbrev expansion. It should return
+the abbrev symbol if expansion took place.")
+
+(defun expand-abbrev ()
+ "Expand the abbrev before point, if there is an abbrev there.
+Effective when explicitly called even when `abbrev-mode' is nil.
+Returns the abbrev symbol, if expansion took place."
+ (interactive)
+ (run-hooks 'pre-abbrev-expand-hook)
+ (abbrev-with-wrapper-hook abbrev-expand-functions
+ (destructuring-bind (&optional sym name wordstart wordend)
+ (abbrev--before-point)
+ (when sym
+ (let ((value sym))
+ (unless (or ;; executing-kbd-macro
+ noninteractive
+ (window-minibuffer-p (selected-window)))
+ ;; Add an undo boundary, in case we are doing this for
+ ;; a self-inserting command which has avoided making one so far.
+ (undo-boundary))
+ ;; Now sym is the abbrev symbol.
+ (setq last-abbrev-text name)
+ (setq last-abbrev sym)
+ (setq last-abbrev-location wordstart)
+ ;; Increment use count.
+ (abbrev-put sym :count (1+ (abbrev-get sym :count)))
+ ;; If this abbrev has an expansion, delete the abbrev
+ ;; and insert the expansion.
+ (when (stringp (symbol-value sym))
+ (goto-char wordstart)
+ ;; Insert at beginning so that markers at the end (e.g. point)
+ ;; are preserved.
+ (insert (symbol-value sym))
+ (delete-char (- wordend wordstart))
+ (let ((case-fold-search nil))
+ ;; If the abbrev's name is different from the buffer text (the
+ ;; only difference should be capitalization), then we may want
+ ;; to adjust the capitalization of the expansion.
+ (when (and (not (equal name (symbol-name sym)))
+ (string-match "[[:upper:]]" name))
+ (if (not (string-match "[[:lower:]]" name))
+ ;; Abbrev was all caps. If expansion is multiple words,
+ ;; normally capitalize each word.
+ (if (and (not abbrev-all-caps)
+ (save-excursion
+ (> (progn (backward-word 1) (point))
+ (progn (goto-char wordstart)
+ (forward-word 1) (point)))))
+ (upcase-initials-region wordstart (point))
+ (upcase-region wordstart (point)))
+ ;; Abbrev included some caps. Cap first initial of expansion.
+ (let ((end (point)))
+ ;; Find the initial.
+ (goto-char wordstart)
+ (skip-syntax-forward "^w" (1- end))
+ ;; Change just that.
+ (upcase-initials-region (point) (1+ (point)))
+ (goto-char end))))))
+ ;; Now point is at the end of the expansion and the beginning is
+ ;; in last-abbrev-location.
+ (when (symbol-function sym)
+ (let* ((hook (symbol-function sym))
+ (expanded
+ ;; If the abbrev has a hook function, run it.
+ (funcall hook)))
+ ;; In addition, if the hook function is a symbol with
+ ;; a non-nil `no-self-insert' property, let the value it
+ ;; returned specify whether we consider that an expansion took
+ ;; place. If it returns nil, no expansion has been done.
+ (if (and (symbolp hook)
+ (null expanded)
+ (get hook 'no-self-insert))
+ (setq value nil))))
+ value)))))
+
+(defun unexpand-abbrev ()
+ "Undo the expansion of the last abbrev that expanded.
+This differs from ordinary undo in that other editing done since then
+is not undone."
+ (interactive)
+ (save-excursion
+ (unless (or (< last-abbrev-location (point-min))
+ (> last-abbrev-location (point-max)))
+ (goto-char last-abbrev-location)
+ (when (stringp last-abbrev-text)
+ ;; This isn't correct if last-abbrev's hook was used
+ ;; to do the expansion.
+ (let ((val (symbol-value last-abbrev)))
+ (unless (stringp val)
+ (error "value of abbrev-symbol must be a string"))
+ (delete-region (point) (+ (point) (length val)))
+ ;; Don't inherit properties here; just copy from old contents.
+ (insert last-abbrev-text)
+ (setq last-abbrev-text nil))))))
+
+(defun abbrev--write (sym)
+ "Write the abbrev in a `read'able form.
+Only writes the non-system abbrevs.
+Presumes that `standard-output' points to `current-buffer'."
+ (unless (or (null (symbol-value sym)) (abbrev-get sym :system))
+ (insert " (")
+ (prin1 (symbol-name sym))
+ (insert " ")
+ (prin1 (symbol-value sym))
+ (insert " ")
+ (prin1 (symbol-function sym))
+ (insert " ")
+ (prin1 (abbrev-get sym :count))
+ (insert ")\n")))
+
+(defun abbrev--describe (sym)
+ (when (symbol-value sym)
+ (prin1 (symbol-name sym))
+ (if (null (abbrev-get sym :system))
+ (indent-to 15 1)
+ (insert " (sys)")
+ (indent-to 20 1))
+ (prin1 (abbrev-get sym :count))
+ (indent-to 20 1)
+ (prin1 (symbol-value sym))
+ (when (symbol-function sym)
+ (indent-to 45 1)
+ (prin1 (symbol-function sym)))
+ (terpri)))
+
+(defun insert-abbrev-table-description (name &optional readable)
+ "Insert before point a full description of abbrev table named NAME.
+NAME is a symbol whose value is an abbrev table.
+If optional 2nd arg READABLE is non-nil, a human-readable description
+is inserted. Otherwise the description is an expression,
+a call to `define-abbrev-table', which would
+define the abbrev table NAME exactly as it is currently defined.
+
+Abbrevs marked as \"system abbrevs\" are omitted."
+ (let ((table (symbol-value name))
+ (symbols ()))
+ (mapatoms (lambda (sym) (if (symbol-value sym) (push sym symbols))) table)
+ (setq symbols (sort symbols 'string-lessp))
+ (let ((standard-output (current-buffer)))
+ (if readable
+ (progn
+ (insert "(")
+ (prin1 name)
+ (insert ")\n\n")
+ (mapc 'abbrev--describe symbols)
+ (insert "\n\n"))
+ (insert "(define-abbrev-table '")
+ (prin1 name)
+ (insert " '(")
+ (mapc 'abbrev--write symbols)
+ (insert " ))\n\n"))
+ nil)))
+
+(defun define-abbrev-table (tablename definitions
+ &optional docstring &rest props)
+ "Define TABLENAME (a symbol) as an abbrev table name.
+Define abbrevs in it according to DEFINITIONS, which is a list of elements
+of the form (ABBREVNAME EXPANSION HOOK USECOUNT SYSTEMFLAG).
+\(If the list is shorter than that, omitted elements default to nil).
+PROPS is a property list to apply to the table.
+Properties with special meaning:
+- `:parents' contains a list of abbrev tables from which this table inherits
+ abbreviations.
+- `:case-fixed' non-nil means that abbreviations are looked up without
+ case-folding, and the expansion is not capitalized/upcased.
+- `:regexp' describes the form of abbrevs. It defaults to \\=\\<\\(\\w+\\)\\W* which
+ means that an abbrev can only be a single word. The submatch 1 is treated
+ as the potential name of an abbrev.
+- `:enable-function' can be set to a function of no argument which returns
+ non-nil iff the abbrevs in this table should be used for this instance
+ of `expand-abbrev'."
+ ;; We used to manually add the docstring, but we also want to record this
+ ;; location as the definition of the variable (in load-history), so we may
+ ;; as well just use `defvar'.
+ (eval `(defvar ,tablename nil ,@(if (stringp docstring) (list docstring))))
+ (let ((table (if (boundp tablename) (symbol-value tablename))))
+ (unless table
+ (setq table (make-abbrev-table props))
+ (set tablename table)
+ (push tablename abbrev-table-name-list))
+ (dolist (elt definitions)
+ (apply 'define-abbrev table elt))))
+
(provide 'abbrev)
;; arch-tag: dbd6f3ae-dfe3-40ba-b00f-f9e3ff960df5
diff --git a/lisp/add-log.el b/lisp/add-log.el
index 4fb2815d6e5..89aeafc75d6 100644
--- a/lisp/add-log.el
+++ b/lisp/add-log.el
@@ -27,6 +27,15 @@
;; This facility is documented in the Emacs Manual.
+;; Todo:
+
+;; - Find/use/create _MTN/log if there's a _MTN directory.
+;; - Find/use/create ++log.* if there's an {arch} directory.
+;; - Use an open *VC-Log* or *cvs-commit* buffer if it's related to the
+;; source file.
+;; - Don't add TAB indents (and username?) if inserting entries in those
+;; special places.
+
;;; Code:
(eval-when-compile
@@ -41,7 +50,7 @@
(defcustom change-log-default-name nil
- "*Name of a change log file for \\[add-change-log-entry]."
+ "Name of a change log file for \\[add-change-log-entry]."
:type '(choice (const :tag "default" nil)
string)
:group 'change-log)
@@ -55,7 +64,7 @@
;; Many modes set this variable, so avoid warnings.
;;;###autoload
(defcustom add-log-current-defun-function nil
- "*If non-nil, function to guess name of surrounding function.
+ "If non-nil, function to guess name of surrounding function.
It is used by `add-log-current-defun' in preference to built-in rules.
Returns function's name as a string, or nil if outside a function."
:type '(choice (const nil) function)
@@ -63,7 +72,7 @@ Returns function's name as a string, or nil if outside a function."
;;;###autoload
(defcustom add-log-full-name nil
- "*Full name of user, for inclusion in ChangeLog daily headers.
+ "Full name of user, for inclusion in ChangeLog daily headers.
This defaults to the value returned by the function `user-full-name'."
:type '(choice (const :tag "Default" nil)
string)
@@ -148,7 +157,7 @@ use the file's name relative to the directory of the change log file."
(defcustom change-log-version-info-enabled nil
- "*If non-nil, enable recording version numbers with the changes."
+ "If non-nil, enable recording version numbers with the changes."
:version "21.1"
:type 'boolean
:group 'change-log)
@@ -160,7 +169,7 @@ use the file's name relative to the directory of the change log file."
(concat "^(def[^ \t\n]+[ \t]+[^ \t\n][ \t]\"" re)
;; Revision: pcl-cvs.el,v 1.72 1999/09/05 20:21:54 monnier Exp
(concat "^;+ *Revision: +[^ \t\n]+[ \t]+" re)))
- "*List of regexps to search for version number.
+ "List of regexps to search for version number.
The version number must be in group 1.
Note: The search is conducted only within 10%, at the beginning of the file."
:version "21.1"
@@ -370,7 +379,7 @@ With a numeric prefix ARG, go back ARG comments."
(defun change-log-version-number-search ()
"Return version number of current buffer's file.
-This is the value returned by `vc-workfile-version' or, if that is
+This is the value returned by `vc-working-revision' or, if that is
nil, by matching `change-log-version-number-regexp-list'."
(let* ((size (buffer-size))
(limit
@@ -381,7 +390,7 @@ nil, by matching `change-log-version-number-regexp-list'."
;; Apply percentage only if buffer size is bigger than
;; approx 100 lines.
(if (> size (* 100 80)) (+ (point) (/ size 10)))))
- (or (and buffer-file-name (vc-workfile-version buffer-file-name))
+ (or (and buffer-file-name (vc-working-revision buffer-file-name))
(save-restriction
(widen)
(let ((regexps change-log-version-number-regexp-list)
@@ -460,11 +469,7 @@ Optional arg BUFFER-FILE overrides `buffer-file-name'."
(if add-log-file-name-function
(funcall add-log-file-name-function buffer-file)
(setq buffer-file
- (if (string-match
- (concat "^" (regexp-quote (file-name-directory log-file)))
- buffer-file)
- (substring buffer-file (match-end 0))
- (file-name-nondirectory buffer-file)))
+ (file-relative-name buffer-file (file-name-directory log-file)))
;; If we have a backup file, it's presumably because we're
;; comparing old and new versions (e.g. for deleted
;; functions) and we'll want to use the original name.
@@ -508,117 +513,111 @@ non-nil, otherwise in local time."
(buffer-file (if buf-file-name (expand-file-name buf-file-name)))
(file-name (expand-file-name (find-change-log file-name buffer-file)))
;; Set ITEM to the file name to use in the new item.
- (item (add-log-file-name buffer-file file-name))
- bound full-name mailing-address)
-
- (if whoami
- (progn
- (setq full-name (read-string "Full name: "
- (or add-log-full-name (user-full-name))))
- ;; Note that some sites have room and phone number fields in
- ;; full name which look silly when inserted. Rather than do
- ;; anything about that here, let user give prefix argument so that
- ;; s/he can edit the full name field in prompter if s/he wants.
- (setq mailing-address
- (read-string "Mailing address: "
- (or add-log-mailing-address user-mail-address)))))
+ (item (add-log-file-name buffer-file file-name)))
(unless (equal file-name buffer-file-name)
(if (or other-window (window-dedicated-p (selected-window)))
(find-file-other-window file-name)
(find-file file-name)))
- (or (eq major-mode 'change-log-mode)
+ (or (derived-mode-p 'change-log-mode)
(change-log-mode))
(undo-boundary)
(goto-char (point-min))
- (or full-name
- (setq full-name (or add-log-full-name (user-full-name))))
- (or mailing-address
- (setq mailing-address (or add-log-mailing-address user-mail-address)))
-
- ;; If file starts with a copyright and permission notice, skip them.
- ;; Assume they end at first blank line.
- (when (looking-at "Copyright")
- (search-forward "\n\n")
- (skip-chars-forward "\n"))
-
- ;; Advance into first entry if it is usable; else make new one.
- (let ((new-entries
- (mapcar (lambda (addr)
- (concat
- (if (stringp add-log-time-zone-rule)
- (let ((tz (getenv "TZ")))
- (unwind-protect
- (progn
- (set-time-zone-rule add-log-time-zone-rule)
- (funcall add-log-time-format))
- (set-time-zone-rule tz)))
- (funcall add-log-time-format))
- " " full-name
- " <" addr ">"))
- (if (consp mailing-address)
- mailing-address
- (list mailing-address)))))
- (if (and (not add-log-always-start-new-record)
- (let ((hit nil))
- (dolist (entry new-entries hit)
- (when (looking-at (regexp-quote entry))
- (setq hit t)))))
- (forward-line 1)
- (insert (nth (random (length new-entries))
- new-entries)
- (if use-hard-newlines hard-newline "\n")
- (if use-hard-newlines hard-newline "\n"))
- (forward-line -1)))
+ (let ((full-name (or add-log-full-name (user-full-name)))
+ (mailing-address (or add-log-mailing-address user-mail-address)))
+
+ (when whoami
+ (setq full-name (read-string "Full name: " full-name))
+ ;; Note that some sites have room and phone number fields in
+ ;; full name which look silly when inserted. Rather than do
+ ;; anything about that here, let user give prefix argument so that
+ ;; s/he can edit the full name field in prompter if s/he wants.
+ (setq mailing-address
+ (read-string "Mailing address: " mailing-address)))
+
+ ;; If file starts with a copyright and permission notice, skip them.
+ ;; Assume they end at first blank line.
+ (when (looking-at "Copyright")
+ (search-forward "\n\n")
+ (skip-chars-forward "\n"))
+
+ ;; Advance into first entry if it is usable; else make new one.
+ (let ((new-entries
+ (mapcar (lambda (addr)
+ (concat
+ (if (stringp add-log-time-zone-rule)
+ (let ((tz (getenv "TZ")))
+ (unwind-protect
+ (progn
+ (set-time-zone-rule add-log-time-zone-rule)
+ (funcall add-log-time-format))
+ (set-time-zone-rule tz)))
+ (funcall add-log-time-format))
+ " " full-name
+ " <" addr ">"))
+ (if (consp mailing-address)
+ mailing-address
+ (list mailing-address)))))
+ (if (and (not add-log-always-start-new-record)
+ (let ((hit nil))
+ (dolist (entry new-entries hit)
+ (when (looking-at (regexp-quote entry))
+ (setq hit t)))))
+ (forward-line 1)
+ (insert (nth (random (length new-entries))
+ new-entries)
+ (if use-hard-newlines hard-newline "\n")
+ (if use-hard-newlines hard-newline "\n"))
+ (forward-line -1))))
;; Determine where we should stop searching for a usable
;; item to add to, within this entry.
- (setq bound
- (save-excursion
- (if (looking-at "\n*[^\n* \t]")
- (skip-chars-forward "\n")
- (if add-log-keep-changes-together
- (forward-page) ; page delimits entries for date
- (forward-paragraph))) ; paragraph delimits entries for file
- (point)))
-
- ;; Now insert the new line for this item.
- (cond ((re-search-forward "^\\s *\\*\\s *$" bound t)
- ;; Put this file name into the existing empty item.
- (if item
- (insert item)))
- ((and (not new-entry)
- (let (case-fold-search)
- (re-search-forward
- (concat (regexp-quote (concat "* " item))
- ;; Don't accept `foo.bar' when
- ;; looking for `foo':
- "\\(\\s \\|[(),:]\\)")
- bound t)))
- ;; Add to the existing item for the same file.
- (re-search-forward "^\\s *$\\|^\\s \\*")
- (goto-char (match-beginning 0))
- ;; Delete excess empty lines; make just 2.
- (while (and (not (eobp)) (looking-at "^\\s *$"))
- (delete-region (point) (line-beginning-position 2)))
- (insert (if use-hard-newlines hard-newline "\n")
- (if use-hard-newlines hard-newline "\n"))
- (forward-line -2)
- (indent-relative-maybe))
- (t
- ;; Make a new item.
- (while (looking-at "\\sW")
- (forward-line 1))
- (while (and (not (eobp)) (looking-at "^\\s *$"))
- (delete-region (point) (line-beginning-position 2)))
- (insert (if use-hard-newlines hard-newline "\n")
- (if use-hard-newlines hard-newline "\n")
- (if use-hard-newlines hard-newline "\n"))
- (forward-line -2)
- (indent-to left-margin)
- (insert "* ")
- (if item (insert item))))
+ (let ((bound
+ (save-excursion
+ (if (looking-at "\n*[^\n* \t]")
+ (skip-chars-forward "\n")
+ (if add-log-keep-changes-together
+ (forward-page) ; page delimits entries for date
+ (forward-paragraph))) ; paragraph delimits entries for file
+ (point))))
+
+ ;; Now insert the new line for this item.
+ (cond ((re-search-forward "^\\s *\\*\\s *$" bound t)
+ ;; Put this file name into the existing empty item.
+ (if item
+ (insert item)))
+ ((and (not new-entry)
+ (let (case-fold-search)
+ (re-search-forward
+ (concat (regexp-quote (concat "* " item))
+ ;; Don't accept `foo.bar' when
+ ;; looking for `foo':
+ "\\(\\s \\|[(),:]\\)")
+ bound t)))
+ ;; Add to the existing item for the same file.
+ (re-search-forward "^\\s *$\\|^\\s \\*")
+ (goto-char (match-beginning 0))
+ ;; Delete excess empty lines; make just 2.
+ (while (and (not (eobp)) (looking-at "^\\s *$"))
+ (delete-region (point) (line-beginning-position 2)))
+ (insert (if use-hard-newlines hard-newline "\n")
+ (if use-hard-newlines hard-newline "\n"))
+ (forward-line -2)
+ (indent-relative-maybe))
+ (t
+ ;; Make a new item.
+ (while (looking-at "\\sW")
+ (forward-line 1))
+ (while (and (not (eobp)) (looking-at "^\\s *$"))
+ (delete-region (point) (line-beginning-position 2)))
+ (insert (if use-hard-newlines hard-newline "\n")
+ (if use-hard-newlines hard-newline "\n")
+ (if use-hard-newlines hard-newline "\n"))
+ (forward-line -2)
+ (indent-to left-margin)
+ (insert "* ")
+ (if item (insert item)))))
;; Now insert the function name, if we have one.
;; Point is at the item for this file,
;; either at the end of the line or at the first blank line.
@@ -666,9 +665,45 @@ the change log file in another window."
(prompt-for-change-log-name))))
(add-change-log-entry whoami file-name t))
+
(defvar change-log-indent-text 0)
+(defun change-log-fill-parenthesized-list ()
+ ;; Fill parenthesized lists of names according to GNU standards.
+ ;; * file-name.ext (very-long-foo, very-long-bar, very-long-foobar):
+ ;; should be filled as
+ ;; * file-name.ext (very-long-foo, very-long-bar)
+ ;; (very-long-foobar):
+ (save-excursion
+ (end-of-line 0)
+ (skip-chars-backward " \t")
+ (when (and (equal (char-before) ?\,)
+ (> (point) (1+ (point-min))))
+ (condition-case nil
+ (when (save-excursion
+ (and (prog2
+ (up-list -1)
+ (equal (char-after) ?\()
+ (skip-chars-backward " \t"))
+ (or (bolp)
+ ;; Skip everything but a whitespace or asterisk.
+ (and (not (zerop (skip-chars-backward "^ \t\n*")))
+ (skip-chars-backward " \t")
+ ;; We want one asterisk here.
+ (= (skip-chars-backward "*") -1)
+ (skip-chars-backward " \t")
+ (bolp)))))
+ ;; Delete the comma.
+ (delete-char -1)
+ ;; Close list on previous line.
+ (insert ")")
+ (skip-chars-forward " \t\n")
+ ;; Start list on new line.
+ (insert-before-markers "("))
+ (error nil)))))
+
(defun change-log-indent ()
+ (change-log-fill-parenthesized-list)
(let* ((indent
(save-excursion
(beginning-of-line)
@@ -699,9 +734,15 @@ Runs `change-log-mode-hook'.
(setq left-margin 8
fill-column 74
indent-tabs-mode t
- tab-width 8)
+ tab-width 8
+ show-trailing-whitespace t)
(set (make-local-variable 'fill-paragraph-function)
'change-log-fill-paragraph)
+ ;; Avoid that filling leaves behind a single "*" on a line.
+ (add-hook 'fill-nobreak-predicate
+ '(lambda ()
+ (looking-back "^\\s *\\*\\s *" (line-beginning-position)))
+ nil t)
(set (make-local-variable 'indent-line-function) 'change-log-indent)
(set (make-local-variable 'tab-always-indent) nil)
;; We really do want "^" in paragraph-start below: it is only the
@@ -718,7 +759,33 @@ Runs `change-log-mode-hook'.
'change-log-resolve-conflict)
(set (make-local-variable 'adaptive-fill-regexp) "\\s *")
(set (make-local-variable 'font-lock-defaults)
- '(change-log-font-lock-keywords t nil nil backward-paragraph)))
+ '(change-log-font-lock-keywords t nil nil backward-paragraph))
+ (set (make-local-variable 'isearch-buffers-next-buffer-function)
+ 'change-log-next-buffer)
+ (set (make-local-variable 'beginning-of-defun-function)
+ 'change-log-beginning-of-defun)
+ (set (make-local-variable 'end-of-defun-function)
+ 'change-log-end-of-defun)
+ (isearch-buffers-minor-mode))
+
+(defun change-log-next-buffer (&optional buffer wrap)
+ "Return the next buffer in the series of ChangeLog file buffers.
+This function is used for multiple buffers isearch.
+A sequence of buffers is formed by ChangeLog files with decreasing
+numeric file name suffixes in the directory of the initial ChangeLog
+file were isearch was started."
+ (let* ((name (change-log-name))
+ (files (cons name (sort (file-expand-wildcards
+ (concat name "[-.][0-9]*"))
+ (lambda (a b)
+ (version< (substring b (length name))
+ (substring a (length name)))))))
+ (files (if isearch-forward files (reverse files))))
+ (find-file-noselect
+ (if wrap
+ (car files)
+ (cadr (member (file-name-nondirectory (buffer-file-name buffer))
+ files))))))
;; It might be nice to have a general feature to replace this. The idea I
;; have is a variable giving a regexp matching text which should not be
@@ -730,7 +797,11 @@ Prefix arg means justify as well."
(interactive "P")
(let ((end (progn (forward-paragraph) (point)))
(beg (progn (backward-paragraph) (point)))
- (paragraph-start (concat paragraph-start "\\|\\s *\\s(")))
+ ;; Add lines starting with whitespace followed by a left paren or an
+ ;; asterisk.
+ (paragraph-start (concat paragraph-start "\\|\\s *\\(?:\\s(\\|\\*\\)"))
+ ;; Make sure we call `change-log-indent'.
+ (fill-indent-according-to-mode t))
(fill-region beg end justify)
t))
@@ -752,9 +823,12 @@ Prefix arg means justify as well."
;;;###autoload
(defvar add-log-tex-like-modes
- '(TeX-mode plain-TeX-mode LaTeX-mode plain-tex-mode latex-mode)
+ '(TeX-mode plain-TeX-mode LaTeX-mode tex-mode)
"*Modes that look like TeX to `add-log-current-defun'.")
+(declare-function c-beginning-of-defun "progmodes/cc-cmds" (&optional arg))
+(declare-function c-end-of-defun "progmodes/cc-cmds" (&optional arg))
+
;;;###autoload
(defun add-log-current-defun ()
"Return name of function definition point is in, or nil.
@@ -774,7 +848,7 @@ Has a preference of looking backwards."
(let ((location (point)))
(cond (add-log-current-defun-function
(funcall add-log-current-defun-function))
- ((memq major-mode add-log-lisp-like-modes)
+ ((apply 'derived-mode-p add-log-lisp-like-modes)
;; If we are now precisely at the beginning of a defun,
;; make sure beginning-of-defun finds that one
;; rather than the previous one.
@@ -798,7 +872,7 @@ Has a preference of looking backwards."
(buffer-substring-no-properties (point)
(progn (forward-sexp 1)
(point)))))
- ((and (memq major-mode add-log-c-like-modes)
+ ((and (apply 'derived-mode-p add-log-c-like-modes)
(save-excursion
(beginning-of-line)
;; Use eq instead of = here to avoid
@@ -816,7 +890,7 @@ Has a preference of looking backwards."
(buffer-substring-no-properties (point)
(progn (forward-sexp 1)
(point))))
- ((memq major-mode add-log-c-like-modes)
+ ((apply 'derived-mode-p add-log-c-like-modes)
;; See whether the point is inside a defun.
(let (having-previous-defun
having-next-defun
@@ -958,7 +1032,7 @@ Has a preference of looking backwards."
(setq end (point)))
(buffer-substring-no-properties
middle end)))))))))
- ((memq major-mode add-log-tex-like-modes)
+ ((apply 'derived-mode-p add-log-tex-like-modes)
(if (re-search-backward
"\\\\\\(sub\\)*\\(section\\|paragraph\\|chapter\\)"
nil t)
@@ -967,17 +1041,17 @@ Has a preference of looking backwards."
(buffer-substring-no-properties
(1+ (point)) ; without initial backslash
(line-end-position)))))
- ((eq major-mode 'texinfo-mode)
+ ((derived-mode-p 'texinfo-mode)
(if (re-search-backward "^@node[ \t]+\\([^,\n]+\\)" nil t)
(match-string-no-properties 1)))
- ((memq major-mode '(perl-mode cperl-mode))
+ ((derived-mode-p 'perl-mode 'cperl-mode)
(if (re-search-backward "^sub[ \t]+\\([^({ \t\n]+\\)" nil t)
(match-string-no-properties 1)))
;; Emacs's autoconf-mode installs its own
;; `add-log-current-defun-function'. This applies to
;; a different mode apparently for editing .m4
;; autoconf source.
- ((eq major-mode 'autoconf-mode)
+ ((derived-mode-p 'autoconf-mode)
(if (re-search-backward
"^\\(\\(m4_\\)?define\\|A._DEFUN\\)(\\[?\\([A-Za-z0-9_]+\\)" nil t)
(match-string-no-properties 3)))
@@ -1027,11 +1101,13 @@ Has a preference of looking backwards."
(change-log-get-method-definition-1 ""))
(concat change-log-get-method-definition-md "]"))))))
+(defconst change-log-start-entry-re "^\\sw.........[0-9:+ ]*")
+
(defun change-log-sortable-date-at ()
"Return date of log entry in a consistent form for sorting.
Point is assumed to be at the start of the entry."
(require 'timezone)
- (if (looking-at "^\\sw.........[0-9:+ ]*")
+ (if (looking-at change-log-start-entry-re)
(let ((date (match-string-no-properties 0)))
(if date
(if (string-match "\\(....\\)-\\(..\\)-\\(..\\)\\s-+" date)
@@ -1044,17 +1120,32 @@ Point is assumed to be at the start of the entry."
(defun change-log-resolve-conflict ()
"Function to be used in `smerge-resolve-function'."
- (let ((buf (current-buffer)))
- (with-temp-buffer
- (insert-buffer-substring buf (match-beginning 1) (match-end 1))
- (save-match-data (change-log-mode))
- (let ((other-buf (current-buffer)))
- (with-current-buffer buf
- (save-excursion
- (save-restriction
- (narrow-to-region (match-beginning 0) (match-end 0))
- (replace-match (match-string 3) t t)
- (change-log-merge other-buf))))))))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region (match-beginning 0) (match-end 0))
+ (let ((mb1 (match-beginning 1))
+ (me1 (match-end 1))
+ (mb3 (match-beginning 3))
+ (me3 (match-end 3))
+ (tmp1 (generate-new-buffer " *changelog-resolve-1*"))
+ (tmp2 (generate-new-buffer " *changelog-resolve-2*")))
+ (unwind-protect
+ (let ((buf (current-buffer)))
+ (with-current-buffer tmp1
+ (change-log-mode)
+ (insert-buffer-substring buf mb1 me1))
+ (with-current-buffer tmp2
+ (change-log-mode)
+ (insert-buffer-substring buf mb3 me3)
+ ;; Do the merge here instead of inside `buf' so as to be
+ ;; more robust in case change-log-merge fails.
+ (change-log-merge tmp1))
+ (goto-char (point-max))
+ (delete-region (point-min)
+ (prog1 (point)
+ (insert-buffer-substring tmp2))))
+ (kill-buffer tmp1)
+ (kill-buffer tmp2))))))
;;;###autoload
(defun change-log-merge (other-log)
@@ -1066,7 +1157,7 @@ or a buffer.
Entries are inserted in chronological order. Both the current and
old-style time formats for entries are supported."
(interactive "*fLog file name to merge: ")
- (if (not (eq major-mode 'change-log-mode))
+ (if (not (derived-mode-p 'change-log-mode))
(error "Not in Change Log mode"))
(let ((other-buf (if (bufferp other-log) other-log
(find-file-noselect other-log)))
@@ -1076,7 +1167,7 @@ old-style time formats for entries are supported."
(goto-char (point-min))
(set-buffer other-buf)
(goto-char (point-min))
- (if (not (eq major-mode 'change-log-mode))
+ (if (not (derived-mode-p 'change-log-mode))
(error "%s not found in Change Log mode" other-log))
;; Loop through all the entries in OTHER-LOG.
(while (not (eobp))
@@ -1103,6 +1194,32 @@ old-style time formats for entries are supported."
(goto-char (point-max)))
(insert-buffer-substring other-buf start)))))))
+(defun change-log-beginning-of-defun ()
+ (re-search-backward change-log-start-entry-re nil 'move))
+
+(defun change-log-end-of-defun ()
+ ;; Look back and if there is no entry there it means we are before
+ ;; the first ChangeLog entry, so go forward until finding one.
+ (unless (save-excursion (re-search-backward change-log-start-entry-re nil t))
+ (re-search-forward change-log-start-entry-re nil t))
+
+ ;; In case we are at the end of log entry going forward a line will
+ ;; make us find the next entry when searching. If we are inside of
+ ;; an entry going forward a line will still keep the point inside
+ ;; the same entry.
+ (forward-line 1)
+
+ ;; In case we are at the beginning of an entry, move past it.
+ (when (looking-at change-log-start-entry-re)
+ (goto-char (match-end 0))
+ (forward-line 1))
+
+ ;; Search for the start of the next log entry. Go to the end of the
+ ;; buffer if we could not find a next entry.
+ (when (re-search-forward change-log-start-entry-re nil 'move)
+ (goto-char (match-beginning 0))
+ (forward-line -1)))
+
(provide 'add-log)
;; arch-tag: 81eee6fc-088f-4372-a37f-80ad9620e762
diff --git a/lisp/allout.el b/lisp/allout.el
index 1f748fb0026..8878c56735f 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -109,6 +109,65 @@
;;;_ + Layout, Mode, and Topic Header Configuration
+;;;_ = allout-command-prefix
+(defcustom allout-command-prefix "\C-c "
+ "*Key sequence to be used as prefix for outline mode command key bindings.
+
+Default is '\C-c<space>'; just '\C-c' is more short-and-sweet, if you're
+willing to let allout use a bunch of \C-c keybindings."
+ :type 'string
+ :group 'allout)
+;;;_ = allout-keybindings-list
+;;; You have to reactivate allout-mode - `(allout-mode t)' - to
+;;; institute changes to this var.
+(defvar allout-keybindings-list ()
+ "*List of `allout-mode' key / function bindings, for `allout-mode-map'.
+
+String or vector key will be prefaced with `allout-command-prefix',
+unless optional third, non-nil element is present.")
+(setq allout-keybindings-list
+ '(
+ ; Motion commands:
+ ("\C-n" allout-next-visible-heading)
+ ("\C-p" allout-previous-visible-heading)
+ ("\C-u" allout-up-current-level)
+ ("\C-f" allout-forward-current-level)
+ ("\C-b" allout-backward-current-level)
+ ("\C-a" allout-beginning-of-current-entry)
+ ("\C-e" allout-end-of-entry)
+ ; Exposure commands:
+ ("\C-i" allout-show-children)
+ ("\C-s" allout-show-current-subtree)
+ ("\C-h" allout-hide-current-subtree)
+ ("\C-t" allout-toggle-current-subtree-exposure)
+ ("h" allout-hide-current-subtree)
+ ("\C-o" allout-show-current-entry)
+ ("!" allout-show-all)
+ ("x" allout-toggle-current-subtree-encryption)
+ ; Alteration commands:
+ (" " allout-open-sibtopic)
+ ("." allout-open-subtopic)
+ ("," allout-open-supertopic)
+ ("'" allout-shift-in)
+ (">" allout-shift-in)
+ ("<" allout-shift-out)
+ ("\C-m" allout-rebullet-topic)
+ ("*" allout-rebullet-current-heading)
+ ("#" allout-number-siblings)
+ ("\C-k" allout-kill-line t)
+ ("\M-k" allout-copy-line-as-kill t)
+ ("\C-y" allout-yank t)
+ ("\M-y" allout-yank-pop t)
+ ("\C-k" allout-kill-topic)
+ ("\M-k" allout-copy-topic-as-kill)
+ ; Miscellaneous commands:
+ ;([?\C-\ ] allout-mark-topic)
+ ("@" allout-resolve-xref)
+ ("=c" allout-copy-exposed-to-buffer)
+ ("=i" allout-indented-exposed-to-buffer)
+ ("=t" allout-latexify-exposed)
+ ("=p" allout-flatten-exposed-to-buffer)))
+
;;;_ = allout-auto-activation
(defcustom allout-auto-activation nil
"*Regulates auto-activation modality of allout outlines - see `allout-init'.
@@ -204,6 +263,54 @@ is modulo the setting of `allout-use-mode-specific-leader', which see."
(const :tag "- (expose topic body but not offspring)" -)
(allout-layout-type :tag "<Nested layout>"))))
+;;;_ = allout-inhibit-auto-fill
+(defcustom allout-inhibit-auto-fill nil
+ "*If non-nil, auto-fill will be inhibited in the allout buffers.
+
+You can customize this setting to set it for all allout buffers, or set it
+in individual buffers if you want to inhibit auto-fill only in particular
+buffers. (You could use a function on `allout-mode-hook' to inhibit
+auto-fill according, eg, to the major mode.)
+
+If you don't set this and auto-fill-mode is enabled, allout will use the
+value that `normal-auto-fill-function', if any, when allout mode starts, or
+else allout's special hanging-indent maintaining auto-fill function,
+`allout-auto-fill'."
+ :type 'boolean
+ :group 'allout)
+(make-variable-buffer-local 'allout-inhibit-auto-fill)
+;;;_ = allout-use-hanging-indents
+(defcustom allout-use-hanging-indents t
+ "*If non-nil, topic body text auto-indent defaults to indent of the header.
+Ie, it is indented to be just past the header prefix. This is
+relevant mostly for use with indented-text-mode, or other situations
+where auto-fill occurs."
+ :type 'boolean
+ :group 'allout)
+(make-variable-buffer-local 'allout-use-hanging-indents)
+;;;###autoload
+(put 'allout-use-hanging-indents 'safe-local-variable
+ (if (fboundp 'booleanp) 'booleanp '(lambda (x) (member x '(t nil)))))
+;;;_ = allout-reindent-bodies
+(defcustom allout-reindent-bodies (if allout-use-hanging-indents
+ 'text)
+ "*Non-nil enables auto-adjust of topic body hanging indent with depth shifts.
+
+When active, topic body lines that are indented even with or beyond
+their topic header are reindented to correspond with depth shifts of
+the header.
+
+A value of t enables reindent in non-programming-code buffers, ie
+those that do not have the variable `comment-start' set. A value of
+`force' enables reindent whether or not `comment-start' is set."
+ :type '(choice (const nil) (const t) (const text) (const force))
+ :group 'allout)
+
+(make-variable-buffer-local 'allout-reindent-bodies)
+;;;###autoload
+(put 'allout-reindent-bodies 'safe-local-variable
+ '(lambda (x) (memq x '(nil t text force))))
+
;;;_ = allout-show-bodies
(defcustom allout-show-bodies nil
"*If non-nil, show entire body when exposing a topic, rather than
@@ -667,115 +774,6 @@ See `allout-run-unit-tests' to see what's run."
;;;_ + Miscellaneous customization
-;;;_ = allout-command-prefix
-(defcustom allout-command-prefix "\C-c "
- "*Key sequence to be used as prefix for outline mode command key bindings.
-
-Default is '\C-c<space>'; just '\C-c' is more short-and-sweet, if you're
-willing to let allout use a bunch of \C-c keybindings."
- :type 'string
- :group 'allout)
-
-;;;_ = allout-keybindings-list
-;;; You have to reactivate allout-mode - `(allout-mode t)' - to
-;;; institute changes to this var.
-(defvar allout-keybindings-list ()
- "*List of `allout-mode' key / function bindings, for `allout-mode-map'.
-
-String or vector key will be prefaced with `allout-command-prefix',
-unless optional third, non-nil element is present.")
-(setq allout-keybindings-list
- '(
- ; Motion commands:
- ("\C-n" allout-next-visible-heading)
- ("\C-p" allout-previous-visible-heading)
- ("\C-u" allout-up-current-level)
- ("\C-f" allout-forward-current-level)
- ("\C-b" allout-backward-current-level)
- ("\C-a" allout-beginning-of-current-entry)
- ("\C-e" allout-end-of-entry)
- ; Exposure commands:
- ("\C-i" allout-show-children)
- ("\C-s" allout-show-current-subtree)
- ("\C-h" allout-hide-current-subtree)
- ("h" allout-hide-current-subtree)
- ("\C-o" allout-show-current-entry)
- ("!" allout-show-all)
- ("x" allout-toggle-current-subtree-encryption)
- ; Alteration commands:
- (" " allout-open-sibtopic)
- ("." allout-open-subtopic)
- ("," allout-open-supertopic)
- ("'" allout-shift-in)
- (">" allout-shift-in)
- ("<" allout-shift-out)
- ("\C-m" allout-rebullet-topic)
- ("*" allout-rebullet-current-heading)
- ("#" allout-number-siblings)
- ("\C-k" allout-kill-line t)
- ("\M-k" allout-copy-line-as-kill t)
- ("\C-y" allout-yank t)
- ("\M-y" allout-yank-pop t)
- ("\C-k" allout-kill-topic)
- ("\M-k" allout-copy-topic-as-kill)
- ; Miscellaneous commands:
- ;([?\C-\ ] allout-mark-topic)
- ("@" allout-resolve-xref)
- ("=c" allout-copy-exposed-to-buffer)
- ("=i" allout-indented-exposed-to-buffer)
- ("=t" allout-latexify-exposed)
- ("=p" allout-flatten-exposed-to-buffer)))
-
-;;;_ = allout-inhibit-auto-fill
-(defcustom allout-inhibit-auto-fill nil
- "*If non-nil, auto-fill will be inhibited in the allout buffers.
-
-You can customize this setting to set it for all allout buffers, or set it
-in individual buffers if you want to inhibit auto-fill only in particular
-buffers. (You could use a function on `allout-mode-hook' to inhibit
-auto-fill according, eg, to the major mode.)
-
-If you don't set this and auto-fill-mode is enabled, allout will use the
-value that `normal-auto-fill-function', if any, when allout mode starts, or
-else allout's special hanging-indent maintaining auto-fill function,
-`allout-auto-fill'."
- :type 'boolean
- :group 'allout)
-(make-variable-buffer-local 'allout-inhibit-auto-fill)
-
-;;;_ = allout-use-hanging-indents
-(defcustom allout-use-hanging-indents t
- "*If non-nil, topic body text auto-indent defaults to indent of the header.
-Ie, it is indented to be just past the header prefix. This is
-relevant mostly for use with indented-text-mode, or other situations
-where auto-fill occurs."
- :type 'boolean
- :group 'allout)
-(make-variable-buffer-local 'allout-use-hanging-indents)
-;;;###autoload
-(put 'allout-use-hanging-indents 'safe-local-variable
- (if (fboundp 'booleanp) 'booleanp '(lambda (x) (member x '(t nil)))))
-
-;;;_ = allout-reindent-bodies
-(defcustom allout-reindent-bodies (if allout-use-hanging-indents
- 'text)
- "*Non-nil enables auto-adjust of topic body hanging indent with depth shifts.
-
-When active, topic body lines that are indented even with or beyond
-their topic header are reindented to correspond with depth shifts of
-the header.
-
-A value of t enables reindent in non-programming-code buffers, ie
-those that do not have the variable `comment-start' set. A value of
-`force' enables reindent whether or not `comment-start' is set."
- :type '(choice (const nil) (const t) (const text) (const force))
- :group 'allout)
-
-(make-variable-buffer-local 'allout-reindent-bodies)
-;;;###autoload
-(put 'allout-reindent-bodies 'safe-local-variable
- '(lambda (x) (memq x '(nil t text force))))
-
;;;_ = allout-enable-file-variable-adjustment
(defcustom allout-enable-file-variable-adjustment t
"*If non-nil, some allout outline actions edit Emacs local file var text.
@@ -906,13 +904,31 @@ This is properly set by `set-allout-regexp'.")
(make-variable-buffer-local 'allout-plain-bullets-string-len)
;;;_ = allout-doublecheck-at-and-shallower
-(defconst allout-doublecheck-at-and-shallower 2
+(defconst allout-doublecheck-at-and-shallower 3
"Validate apparent topics of this depth and shallower as being non-aberrant.
-Verified with `allout-aberrant-container-p'. This check's usefulness is
-limited to shallow depths, because the determination of aberrance
-is according to the mistaken item being followed by a legitimate item of
-excessively greater depth.")
+Verified with `allout-aberrant-container-p'. The usefulness of
+this check is limited to shallow depths, because the
+determination of aberrance is according to the mistaken item
+being followed by a legitimate item of excessively greater depth.
+
+The classic example of a mistaken item, for a standard allout
+outline configuration, is a body line that begins with an '...'
+ellipsis. This happens to contain a legitimate depth-2 header
+prefix, constituted by two '..' dots at the beginning of the
+line. The only thing that can distinguish it *in principle* from
+a legitimate one is if the following real header is at a depth
+that is discontinuous from the depth of 2 implied by the
+ellipsis, ie depth 4 or more. As the depth being tested gets
+greater, the likelihood of this kind of disqualification is
+lower, and the usefulness of this test is lower.
+
+Extending the depth of the doublecheck increases the amount it is
+applied, increasing the cost of the test - on casual estimation,
+for outlines with many deep topics, geometrically (O(n)?).
+Taken together with decreasing likelihood that the test will be
+useful at greater depths, more modest doublecheck limits are more
+suitably economical.")
;;;_ X allout-reset-header-lead (header-lead)
(defun allout-reset-header-lead (header-lead)
"*Reset the leading string used to identify topic headers."
@@ -1130,13 +1146,13 @@ Built on top of optional BASE-MAP, or empty sparse map if none specified.
See doc string for allout-keybindings-list for format of binding list."
(let ((map (or base-map (make-sparse-keymap)))
(pref (list allout-command-prefix)))
- (mapcar (function
+ (mapc (function
(lambda (cell)
(let ((add-pref (null (cdr (cdr cell))))
(key-suff (list (car cell))))
(apply 'define-key
(list map
- (apply 'concat (if add-pref
+ (apply 'vconcat (if add-pref
(append pref key-suff)
key-suff))
(car (cdr cell)))))))
@@ -2130,8 +2146,10 @@ OPEN: A TOPIC that is not CLOSED, though its OFFSPRING or BODY may be."
;;; &optional prelen)
(defun allout-overlay-insert-in-front-handler (ol after beg end
&optional prelen)
- "Shift the overlay so stuff inserted in front of it are excluded."
+ "Shift the overlay so stuff inserted in front of it is excluded."
(if after
+ ;; XXX Shouldn't moving the overlay should be unnecessary, if overlay
+ ;; front-advance on the overlay worked as it should?
(move-overlay ol (1+ beg) (overlay-end ol))))
;;;_ > allout-overlay-interior-modification-handler (ol after beg end
;;; &optional prelen)
@@ -2319,19 +2337,20 @@ exceeds the topic by more than one."
(let ((depth (allout-depth))
(start-point (point))
done aberrant)
- (save-excursion
- (while (and (not done)
- (re-search-forward allout-line-boundary-regexp nil 0))
- (allout-prefix-data)
- (goto-char allout-recent-prefix-beginning)
- (cond
- ;; sibling - continue:
- ((eq allout-recent-depth depth))
- ;; first offspring is excessive - aberrant:
- ((> allout-recent-depth (1+ depth))
- (setq done t aberrant t))
- ;; next non-sibling is lower-depth - not aberrant:
- (t (setq done t)))))
+ (save-match-data
+ (save-excursion
+ (while (and (not done)
+ (re-search-forward allout-line-boundary-regexp nil 0))
+ (allout-prefix-data)
+ (goto-char allout-recent-prefix-beginning)
+ (cond
+ ;; sibling - continue:
+ ((eq allout-recent-depth depth))
+ ;; first offspring is excessive - aberrant:
+ ((> allout-recent-depth (1+ depth))
+ (setq done t aberrant t))
+ ;; next non-sibling is lower-depth - not aberrant:
+ (t (setq done t))))))
(if aberrant
aberrant
(goto-char start-point)
@@ -2345,19 +2364,21 @@ exceeds the topic by more than one."
Actually, returns prefix beginning point."
(save-excursion
(allout-beginning-of-current-line)
- (and (looking-at allout-regexp)
- (allout-prefix-data)
- (or (not (allout-do-doublecheck))
- (not (allout-aberrant-container-p))))))
+ (save-match-data
+ (and (looking-at allout-regexp)
+ (allout-prefix-data)
+ (or (not (allout-do-doublecheck))
+ (not (allout-aberrant-container-p)))))))
;;;_ > allout-on-heading-p ()
(defalias 'allout-on-heading-p 'allout-on-current-heading-p)
;;;_ > allout-e-o-prefix-p ()
(defun allout-e-o-prefix-p ()
"True if point is located where current topic prefix ends, heading begins."
- (and (save-excursion (let ((inhibit-field-text-motion t))
- (beginning-of-line))
- (looking-at allout-regexp))
- (= (point)(save-excursion (allout-end-of-prefix)(point)))))
+ (and (save-match-data
+ (save-excursion (let ((inhibit-field-text-motion t))
+ (beginning-of-line))
+ (looking-at allout-regexp))
+ (= (point) (save-excursion (allout-end-of-prefix)(point))))))
;;;_ : Location attributes
;;;_ > allout-depth ()
(defun allout-depth ()
@@ -2485,7 +2506,12 @@ Outermost is first."
(if (or (not allout-beginning-of-line-cycles)
(not (equal last-command this-command)))
- (move-beginning-of-line 1)
+ (progn
+ (if (and (not (bolp))
+ (allout-hidden-p (1- (point))))
+ (goto-char (previous-single-char-property-change
+ (1- (point)) 'invisible)))
+ (move-beginning-of-line 1))
(allout-depth)
(let ((beginning-of-body
(save-excursion
@@ -2528,7 +2554,10 @@ Outermost is first."
((>= (point) end-of-entry)
(allout-back-to-current-heading)
(allout-end-of-current-line))
- (t (allout-end-of-entry))))))
+ (t
+ (if (not (and transient-mark-mode mark-active))
+ (push-mark))
+ (allout-end-of-entry))))))
;;;_ > allout-next-heading ()
(defsubst allout-next-heading ()
"Move to the heading for the topic (possibly invisible) after this one.
@@ -2536,16 +2565,18 @@ Outermost is first."
Returns the location of the heading, or nil if none found.
We skip anomolous low-level topics, a la `allout-aberrant-container-p'."
- (if (looking-at allout-regexp)
- (forward-char 1))
-
- (when (re-search-forward allout-line-boundary-regexp nil 0)
- (allout-prefix-data)
- (and (allout-do-doublecheck)
- ;; this will set allout-recent-* on the first non-aberrant topic,
- ;; whether it's the current one or one that disqualifies it:
- (allout-aberrant-container-p))
- (goto-char allout-recent-prefix-beginning)))
+ (save-match-data
+
+ (if (looking-at allout-regexp)
+ (forward-char 1))
+
+ (when (re-search-forward allout-line-boundary-regexp nil 0)
+ (allout-prefix-data)
+ (and (allout-do-doublecheck)
+ ;; this will set allout-recent-* on the first non-aberrant topic,
+ ;; whether it's the current one or one that disqualifies it:
+ (allout-aberrant-container-p))
+ (goto-char allout-recent-prefix-beginning))))
;;;_ > allout-this-or-next-heading
(defun allout-this-or-next-heading ()
"Position cursor on current or next heading."
@@ -2565,17 +2596,18 @@ We skip anomolous low-level topics, a la `allout-aberrant-container-p'."
(let ((start-point (point)))
;; allout-goto-prefix-doublechecked calls us, so we can't use it here.
(allout-goto-prefix)
- (when (or (re-search-backward allout-line-boundary-regexp nil 0)
- (looking-at allout-bob-regexp))
- (goto-char (allout-prefix-data))
- (if (and (allout-do-doublecheck)
- (allout-aberrant-container-p))
- (or (allout-previous-heading)
- (and (goto-char start-point)
- ;; recalibrate allout-recent-*:
- (allout-depth)
- nil))
- (point))))))
+ (save-match-data
+ (when (or (re-search-backward allout-line-boundary-regexp nil 0)
+ (looking-at allout-bob-regexp))
+ (goto-char (allout-prefix-data))
+ (if (and (allout-do-doublecheck)
+ (allout-aberrant-container-p))
+ (or (allout-previous-heading)
+ (and (goto-char start-point)
+ ;; recalibrate allout-recent-*:
+ (allout-depth)
+ nil))
+ (point)))))))
;;;_ > allout-get-invisibility-overlay ()
(defun allout-get-invisibility-overlay ()
"Return the overlay at point that dictates allout invisibility."
@@ -2782,19 +2814,20 @@ Not sensitive to topic visibility.
Returns the point at the beginning of the prefix, or nil if none."
- (let (done)
- (while (and (not done)
- (search-backward "\n" nil 1))
- (forward-char 1)
- (if (looking-at allout-regexp)
- (setq done (allout-prefix-data))
- (forward-char -1)))
- (if (bobp)
- (cond ((looking-at allout-regexp)
- (allout-prefix-data))
- ((allout-next-heading))
- (done))
- done)))
+ (save-match-data
+ (let (done)
+ (while (and (not done)
+ (search-backward "\n" nil 1))
+ (forward-char 1)
+ (if (looking-at allout-regexp)
+ (setq done (allout-prefix-data))
+ (forward-char -1)))
+ (if (bobp)
+ (cond ((looking-at allout-regexp)
+ (allout-prefix-data))
+ ((allout-next-heading))
+ (done))
+ done))))
;;;_ > allout-goto-prefix-doublechecked ()
(defun allout-goto-prefix-doublechecked ()
"Put point at beginning of immediately containing outline topic.
@@ -2819,10 +2852,11 @@ otherwise skip white space between bullet and ensuing text."
(if (not (allout-goto-prefix-doublechecked))
nil
(goto-char allout-recent-prefix-end)
- (if ignore-decorations
- t
- (while (looking-at "[0-9]") (forward-char 1))
- (if (and (not (eolp)) (looking-at "\\s-")) (forward-char 1)))
+ (save-match-data
+ (if ignore-decorations
+ t
+ (while (looking-at "[0-9]") (forward-char 1))
+ (if (and (not (eolp)) (looking-at "\\s-")) (forward-char 1))))
;; Reestablish where we are:
(allout-current-depth)))
;;;_ > allout-current-bullet-pos ()
@@ -3104,10 +3138,11 @@ situation."
found
done)
(while (not done)
- (setq found (if backward
- (re-search-backward expression nil 'to-limit)
- (forward-char 1)
- (re-search-forward expression nil 'to-limit)))
+ (setq found (save-match-data
+ (if backward
+ (re-search-backward expression nil 'to-limit)
+ (forward-char 1)
+ (re-search-forward expression nil 'to-limit))))
(if (and found (allout-aberrant-container-p))
(setq found nil))
(setq done (or found (if backward (bobp) (eobp)))))
@@ -3184,18 +3219,19 @@ Move to buffer limit in indicated direction if headings are exhausted."
(error nil))
(allout-beginning-of-current-line))
;; Deal with apparent header line:
- (if (not (looking-at allout-regexp))
- ;; not a header line, keep looking:
- t
- (allout-prefix-data)
- (if (and (allout-do-doublecheck)
- (allout-aberrant-container-p))
- ;; skip this aberrant prospective header line:
+ (save-match-data
+ (if (not (looking-at allout-regexp))
+ ;; not a header line, keep looking:
t
- ;; this prospective headerline qualifies - register:
- (setq got allout-recent-prefix-beginning)
- ;; and break the loop:
- nil))))
+ (allout-prefix-data)
+ (if (and (allout-do-doublecheck)
+ (allout-aberrant-container-p))
+ ;; skip this aberrant prospective header line:
+ t
+ ;; this prospective headerline qualifies - register:
+ (setq got allout-recent-prefix-beginning)
+ ;; and break the loop:
+ nil)))))
;; Register this got, it may be the last:
(if got (setq prev got))
(setq arg (1- arg)))
@@ -3354,7 +3390,7 @@ Returns the qualifying command, if any, else nil."
;; translate literal membership on list:
(cadr (assoc key-string allout-keybindings-list)))
;; translate as a keybinding:
- (key-binding (concat allout-command-prefix
+ (key-binding (vconcat allout-command-prefix
(char-to-string
(if (and (<= 97 key-num) ; "a"
(>= 122 key-num)) ; "z"
@@ -3623,154 +3659,156 @@ Nuances:
from there."
(allout-beginning-of-current-line)
- (let* ((inhibit-field-text-motion t)
- (depth (+ (allout-current-depth) relative-depth))
- (opening-on-blank (if (looking-at "^\$")
- (not (setq before nil))))
- ;; bunch o vars set while computing ref-topic
- opening-numbered
- ref-depth
- ref-bullet
- (ref-topic (save-excursion
- (cond ((< relative-depth 0)
- (allout-ascend-to-depth depth))
- ((>= relative-depth 1) nil)
- (t (allout-back-to-current-heading)))
- (setq ref-depth allout-recent-depth)
- (setq ref-bullet
- (if (> allout-recent-prefix-end 1)
- (allout-recent-bullet)
- ""))
- (setq opening-numbered
- (save-excursion
- (and allout-numbered-bullet
- (or (<= relative-depth 0)
- (allout-descend-to-depth depth))
- (if (allout-numbered-type-prefix)
- allout-numbered-bullet))))
- (point)))
- dbl-space
- doing-beginning
- start end)
-
- (if (not opening-on-blank)
+ (save-match-data
+ (let* ((inhibit-field-text-motion t)
+ (depth (+ (allout-current-depth) relative-depth))
+ (opening-on-blank (if (looking-at "^\$")
+ (not (setq before nil))))
+ ;; bunch o vars set while computing ref-topic
+ opening-numbered
+ ref-depth
+ ref-bullet
+ (ref-topic (save-excursion
+ (cond ((< relative-depth 0)
+ (allout-ascend-to-depth depth))
+ ((>= relative-depth 1) nil)
+ (t (allout-back-to-current-heading)))
+ (setq ref-depth allout-recent-depth)
+ (setq ref-bullet
+ (if (> allout-recent-prefix-end 1)
+ (allout-recent-bullet)
+ ""))
+ (setq opening-numbered
+ (save-excursion
+ (and allout-numbered-bullet
+ (or (<= relative-depth 0)
+ (allout-descend-to-depth depth))
+ (if (allout-numbered-type-prefix)
+ allout-numbered-bullet))))
+ (point)))
+ dbl-space
+ doing-beginning
+ start end)
+
+ (if (not opening-on-blank)
; Positioning and vertical
; padding - only if not
; opening-on-blank:
- (progn
- (goto-char ref-topic)
- (setq dbl-space ; Determine double space action:
- (or (and (<= relative-depth 0) ; not descending;
- (save-excursion
- ;; at b-o-b or preceded by a blank line?
- (or (> 0 (forward-line -1))
- (looking-at "^\\s-*$")
- (bobp)))
- (save-excursion
- ;; succeeded by a blank line?
- (allout-end-of-current-subtree)
- (looking-at "\n\n")))
- (and (= ref-depth 1)
- (or before
- (= depth 1)
- (save-excursion
- ;; Don't already have following
- ;; vertical padding:
- (not (allout-pre-next-prefix)))))))
-
- ;; Position to prior heading, if inserting backwards, and not
- ;; going outwards:
- (if (and before (>= relative-depth 0))
- (progn (allout-back-to-current-heading)
- (setq doing-beginning (bobp))
- (if (not (bobp))
- (allout-previous-heading)))
- (if (and before (bobp))
- (open-line 1)))
-
- (if (<= relative-depth 0)
- ;; Not going inwards, don't snug up:
- (if doing-beginning
- (if (not dbl-space)
- (open-line 1)
- (open-line 2))
- (if before
- (progn (end-of-line)
- (allout-pre-next-prefix)
- (while (and (= ?\n (following-char))
- (save-excursion
- (forward-char 1)
- (allout-hidden-p)))
- (forward-char 1))
- (if (not (looking-at "^$"))
- (open-line 1)))
- (allout-end-of-current-subtree)
- (if (looking-at "\n\n") (forward-char 1))))
- ;; Going inwards - double-space if first offspring is
- ;; double-spaced, otherwise snug up.
- (allout-end-of-entry)
- (if (eobp)
- (newline 1)
- (line-move 1))
- (allout-beginning-of-current-line)
- (backward-char 1)
- (if (bolp)
- ;; Blank lines between current header body and next
- ;; header - get to last substantive (non-white-space)
- ;; line in body:
- (progn (setq dbl-space t)
- (re-search-backward "[^ \t\n]" nil t)))
- (if (looking-at "\n\n")
- (setq dbl-space t))
- (if (save-excursion
- (allout-next-heading)
- (when (> allout-recent-depth ref-depth)
- ;; This is an offspring.
- (forward-line -1)
- (looking-at "^\\s-*$")))
- (progn (forward-line 1)
- (open-line 1)
- (forward-line 1)))
- (allout-end-of-current-line))
-
- ;;(if doing-beginning (goto-char doing-beginning))
- (if (not (bobp))
- ;; We insert a newline char rather than using open-line to
- ;; avoid rear-stickiness inheritence of read-only property.
- (progn (if (and (not (> depth ref-depth))
- (not before))
+ (progn
+ (goto-char ref-topic)
+ (setq dbl-space ; Determine double space action:
+ (or (and (<= relative-depth 0) ; not descending;
+ (save-excursion
+ ;; at b-o-b or preceded by a blank line?
+ (or (> 0 (forward-line -1))
+ (looking-at "^\\s-*$")
+ (bobp)))
+ (save-excursion
+ ;; succeeded by a blank line?
+ (allout-end-of-current-subtree)
+ (looking-at "\n\n")))
+ (and (= ref-depth 1)
+ (or before
+ (= depth 1)
+ (save-excursion
+ ;; Don't already have following
+ ;; vertical padding:
+ (not (allout-pre-next-prefix)))))))
+
+ ;; Position to prior heading, if inserting backwards, and not
+ ;; going outwards:
+ (if (and before (>= relative-depth 0))
+ (progn (allout-back-to-current-heading)
+ (setq doing-beginning (bobp))
+ (if (not (bobp))
+ (allout-previous-heading)))
+ (if (and before (bobp))
+ (open-line 1)))
+
+ (if (<= relative-depth 0)
+ ;; Not going inwards, don't snug up:
+ (if doing-beginning
+ (if (not dbl-space)
+ (open-line 1)
+ (open-line 2))
+ (if before
+ (progn (end-of-line)
+ (allout-pre-next-prefix)
+ (while (and (= ?\n (following-char))
+ (save-excursion
+ (forward-char 1)
+ (allout-hidden-p)))
+ (forward-char 1))
+ (if (not (looking-at "^$"))
+ (open-line 1)))
+ (allout-end-of-current-subtree)
+ (if (looking-at "\n\n") (forward-char 1))))
+ ;; Going inwards - double-space if first offspring is
+ ;; double-spaced, otherwise snug up.
+ (allout-end-of-entry)
+ (if (eobp)
+ (newline 1)
+ (line-move 1))
+ (allout-beginning-of-current-line)
+ (backward-char 1)
+ (if (bolp)
+ ;; Blank lines between current header body and next
+ ;; header - get to last substantive (non-white-space)
+ ;; line in body:
+ (progn (setq dbl-space t)
+ (re-search-backward "[^ \t\n]" nil t)))
+ (if (looking-at "\n\n")
+ (setq dbl-space t))
+ (if (save-excursion
+ (allout-next-heading)
+ (when (> allout-recent-depth ref-depth)
+ ;; This is an offspring.
+ (forward-line -1)
+ (looking-at "^\\s-*$")))
+ (progn (forward-line 1)
(open-line 1)
- (if (and (not dbl-space) (> depth ref-depth))
- (newline 1)
- (if dbl-space
- (open-line 1)
- (if (not before)
- (newline 1)))))
- (if (and dbl-space (not (> relative-depth 0)))
- (newline 1))
- (if (and (not (eobp))
- (or (not (bolp))
- (and (not (bobp))
- ;; bolp doesnt detect concealed
- ;; trailing newlines, compensate:
- (save-excursion
- (forward-char -1)
- (allout-hidden-p)))))
- (forward-char 1))))
- ))
- (setq start (point))
- (insert (concat (allout-make-topic-prefix opening-numbered t depth)
- " "))
- (setq end (1+ (point)))
-
- (allout-rebullet-heading (and offer-recent-bullet ref-bullet)
- depth nil nil t)
- (if (> relative-depth 0)
- (save-excursion (goto-char ref-topic)
- (allout-show-children)))
- (end-of-line)
+ (forward-line 1)))
+ (allout-end-of-current-line))
+
+ ;;(if doing-beginning (goto-char doing-beginning))
+ (if (not (bobp))
+ ;; We insert a newline char rather than using open-line to
+ ;; avoid rear-stickiness inheritence of read-only property.
+ (progn (if (and (not (> depth ref-depth))
+ (not before))
+ (open-line 1)
+ (if (and (not dbl-space) (> depth ref-depth))
+ (newline 1)
+ (if dbl-space
+ (open-line 1)
+ (if (not before)
+ (newline 1)))))
+ (if (and dbl-space (not (> relative-depth 0)))
+ (newline 1))
+ (if (and (not (eobp))
+ (or (not (bolp))
+ (and (not (bobp))
+ ;; bolp doesnt detect concealed
+ ;; trailing newlines, compensate:
+ (save-excursion
+ (forward-char -1)
+ (allout-hidden-p)))))
+ (forward-char 1))))
+ ))
+ (setq start (point))
+ (insert (concat (allout-make-topic-prefix opening-numbered t depth)
+ " "))
+ (setq end (1+ (point)))
+
+ (allout-rebullet-heading (and offer-recent-bullet ref-bullet)
+ depth nil nil t)
+ (if (> relative-depth 0)
+ (save-excursion (goto-char ref-topic)
+ (allout-show-children)))
+ (end-of-line)
- (run-hook-with-args 'allout-structure-added-hook start end)
+ (run-hook-with-args 'allout-structure-added-hook start end)
+ )
)
)
;;;_ > allout-open-subtopic (arg)
@@ -3816,14 +3854,15 @@ Maintains outline hanging topic indentation if
(when (not allout-inhibit-auto-fill)
(let ((fill-prefix (if allout-use-hanging-indents
;; Check for topic header indentation:
- (save-excursion
- (beginning-of-line)
- (if (looking-at allout-regexp)
- ;; ... construct indentation to account for
- ;; length of topic prefix:
- (make-string (progn (allout-end-of-prefix)
- (current-column))
- ?\ )))))
+ (save-match-data
+ (save-excursion
+ (beginning-of-line)
+ (if (looking-at allout-regexp)
+ ;; ... construct indentation to account for
+ ;; length of topic prefix:
+ (make-string (progn (allout-end-of-prefix)
+ (current-column))
+ ?\ ))))))
(use-auto-fill-function (or allout-outside-normal-auto-fill-function
auto-fill-function
'do-auto-fill)))
@@ -3967,11 +4006,12 @@ this function."
(goto-char mb)
; Dispense with number if
; numbered-bullet prefix:
- (if (and allout-numbered-bullet
- (string= allout-numbered-bullet current-bullet)
- (looking-at "[0-9]+"))
- (allout-unprotected
- (delete-region (match-beginning 0)(match-end 0))))
+ (save-match-data
+ (if (and allout-numbered-bullet
+ (string= allout-numbered-bullet current-bullet)
+ (looking-at "[0-9]+"))
+ (allout-unprotected
+ (delete-region (match-beginning 0)(match-end 0)))))
;; convey 'allout-was-hidden annotation, if original had it:
(if has-annotation
@@ -4297,7 +4337,7 @@ subtopics into siblings of the item."
(if (or (not (allout-mode-p))
(not (bolp))
- (not (looking-at allout-regexp)))
+ (not (save-match-data (looking-at allout-regexp))))
;; Just do a regular kill:
(kill-line arg)
;; Ah, have to watch out for adjustments:
@@ -4317,7 +4357,7 @@ subtopics into siblings of the item."
(if allout-numbered-bullet
(save-excursion ; Renumber subsequent topics if needed:
- (if (not (looking-at allout-regexp))
+ (if (not (save-match-data (looking-at allout-regexp)))
(allout-next-heading))
(allout-renumber-to-depth depth)))
(run-hook-with-args 'allout-structure-deleted-hook depth (point)))))
@@ -4352,7 +4392,7 @@ allout-yank-processing for exposure recovery."
(if (and (/= (current-column) 0) (not (eobp)))
(forward-char 1))
(if (not (eobp))
- (if (and (looking-at "\n")
+ (if (and (save-match-data (looking-at "\n"))
(or (save-excursion
(or (not (allout-next-heading))
(= depth allout-recent-depth)))
@@ -4449,7 +4489,7 @@ allout-yank-processing for exposure recovery."
(setq next (next-single-char-property-change (point)
'allout-was-hidden
nil end))
- (overlay-put (make-overlay prev next)
+ (overlay-put (make-overlay prev next nil 'front-advance)
'category 'allout-exposure-category)
(allout-deannotate-hidden prev next)
(setq prev next)
@@ -4481,117 +4521,120 @@ however, are left exactly like normal, non-allout-specific yanks."
; region around subject:
(if (< (allout-mark-marker t) (point))
(exchange-point-and-mark))
- (let* ((subj-beg (point))
- (into-bol (bolp))
- (subj-end (allout-mark-marker t))
- ;; 'resituate' if yanking an entire topic into topic header:
- (resituate (and (let ((allout-inhibit-aberrance-doublecheck t))
- (allout-e-o-prefix-p))
- (looking-at allout-regexp)
- (allout-prefix-data)))
- ;; `rectify-numbering' if resituating (where several topics may
- ;; be resituating) or yanking a topic into a topic slot (bol):
- (rectify-numbering (or resituate
- (and into-bol (looking-at allout-regexp)))))
- (if resituate
- ;; Yanking a topic into the start of a topic - reconcile to fit:
- (let* ((inhibit-field-text-motion t)
- (prefix-len (if (not (match-end 1))
- 1
- (- (match-end 1) subj-beg)))
- (subj-depth allout-recent-depth)
- (prefix-bullet (allout-recent-bullet))
- (adjust-to-depth
- ;; Nil if adjustment unnecessary, otherwise depth to which
- ;; adjustment should be made:
- (save-excursion
- (and (goto-char subj-end)
- (eolp)
- (goto-char subj-beg)
- (and (looking-at allout-regexp)
- (progn
- (beginning-of-line)
- (not (= (point) subj-beg)))
- (looking-at allout-regexp)
- (allout-prefix-data))
- allout-recent-depth)))
- (more t))
- (setq rectify-numbering allout-numbered-bullet)
- (if adjust-to-depth
+ (save-match-data
+ (let* ((subj-beg (point))
+ (into-bol (bolp))
+ (subj-end (allout-mark-marker t))
+ ;; 'resituate' if yanking an entire topic into topic header:
+ (resituate (and (let ((allout-inhibit-aberrance-doublecheck t))
+ (allout-e-o-prefix-p))
+ (looking-at allout-regexp)
+ (allout-prefix-data)))
+ ;; `rectify-numbering' if resituating (where several topics may
+ ;; be resituating) or yanking a topic into a topic slot (bol):
+ (rectify-numbering (or resituate
+ (and into-bol
+ (looking-at allout-regexp)))))
+ (if resituate
+ ;; Yanking a topic into the start of a topic - reconcile to fit:
+ (let* ((inhibit-field-text-motion t)
+ (prefix-len (if (not (match-end 1))
+ 1
+ (- (match-end 1) subj-beg)))
+ (subj-depth allout-recent-depth)
+ (prefix-bullet (allout-recent-bullet))
+ (adjust-to-depth
+ ;; Nil if adjustment unnecessary, otherwise depth to which
+ ;; adjustment should be made:
+ (save-excursion
+ (and (goto-char subj-end)
+ (eolp)
+ (goto-char subj-beg)
+ (and (looking-at allout-regexp)
+ (progn
+ (beginning-of-line)
+ (not (= (point) subj-beg)))
+ (looking-at allout-regexp)
+ (allout-prefix-data))
+ allout-recent-depth)))
+ (more t))
+ (setq rectify-numbering allout-numbered-bullet)
+ (if adjust-to-depth
; Do the adjustment:
- (progn
- (save-restriction
- (narrow-to-region subj-beg subj-end)
+ (progn
+ (save-restriction
+ (narrow-to-region subj-beg subj-end)
; Trim off excessive blank
; line at end, if any:
- (goto-char (point-max))
- (if (looking-at "^$")
- (allout-unprotected (delete-char -1)))
+ (goto-char (point-max))
+ (if (looking-at "^$")
+ (allout-unprotected (delete-char -1)))
; Work backwards, with each
; shallowest level,
; successively excluding the
; last processed topic from
; the narrow region:
- (while more
- (allout-back-to-current-heading)
+ (while more
+ (allout-back-to-current-heading)
; go as high as we can in each bunch:
- (while (allout-ascend t))
- (save-excursion
- (allout-unprotected
- (allout-rebullet-topic-grunt (- adjust-to-depth
- subj-depth)))
- (allout-depth))
- (if (setq more (not (bobp)))
- (progn (widen)
- (forward-char -1)
- (narrow-to-region subj-beg (point))))))
- ;; Preserve new bullet if it's a distinctive one, otherwise
- ;; use old one:
- (if (string-match (regexp-quote prefix-bullet)
- allout-distinctive-bullets-string)
+ (while (allout-ascend t))
+ (save-excursion
+ (allout-unprotected
+ (allout-rebullet-topic-grunt (- adjust-to-depth
+ subj-depth)))
+ (allout-depth))
+ (if (setq more (not (bobp)))
+ (progn (widen)
+ (forward-char -1)
+ (narrow-to-region subj-beg (point))))))
+ ;; Preserve new bullet if it's a distinctive one, otherwise
+ ;; use old one:
+ (if (string-match (regexp-quote prefix-bullet)
+ allout-distinctive-bullets-string)
; Delete from bullet of old to
; before bullet of new:
- (progn
- (beginning-of-line)
- (allout-unprotected
- (delete-region (point) subj-beg))
- (set-marker (allout-mark-marker t) subj-end)
- (goto-char subj-beg)
- (allout-end-of-prefix))
+ (progn
+ (beginning-of-line)
+ (allout-unprotected
+ (delete-region (point) subj-beg))
+ (set-marker (allout-mark-marker t) subj-end)
+ (goto-char subj-beg)
+ (allout-end-of-prefix))
; Delete base subj prefix,
; leaving old one:
- (allout-unprotected
- (progn
- (delete-region (point) (+ (point)
- prefix-len
- (- adjust-to-depth
- subj-depth)))
+ (allout-unprotected
+ (progn
+ (delete-region (point) (+ (point)
+ prefix-len
+ (- adjust-to-depth
+ subj-depth)))
; and delete residual subj
; prefix digits and space:
- (while (looking-at "[0-9]") (delete-char 1))
- (if (looking-at " ") (delete-char 1))))))
- (exchange-point-and-mark))))
- (if rectify-numbering
- (progn
- (save-excursion
+ (while (looking-at "[0-9]") (delete-char 1))
+ (if (looking-at " ")
+ (delete-char 1))))))
+ (exchange-point-and-mark))))
+ (if rectify-numbering
+ (progn
+ (save-excursion
; Give some preliminary feedback:
- (message "... reconciling numbers")
+ (message "... reconciling numbers")
; ... and renumber, in case necessary:
- (goto-char subj-beg)
- (if (allout-goto-prefix-doublechecked)
- (allout-unprotected
- (allout-rebullet-heading nil ;;; solicit
- (allout-depth) ;;; depth
- nil ;;; number-control
- nil ;;; index
- t)))
- (message ""))))
- (if (or into-bol resituate)
- (allout-hide-by-annotation (point) (allout-mark-marker t))
- (allout-deannotate-hidden (allout-mark-marker t) (point)))
- (if (not resituate)
- (exchange-point-and-mark))
- (run-hook-with-args 'allout-structure-added-hook subj-beg subj-end)))
+ (goto-char subj-beg)
+ (if (allout-goto-prefix-doublechecked)
+ (allout-unprotected
+ (allout-rebullet-heading nil ;;; solicit
+ (allout-depth) ;;; depth
+ nil ;;; number-control
+ nil ;;; index
+ t)))
+ (message ""))))
+ (if (or into-bol resituate)
+ (allout-hide-by-annotation (point) (allout-mark-marker t))
+ (allout-deannotate-hidden (allout-mark-marker t) (point)))
+ (if (not resituate)
+ (exchange-point-and-mark))
+ (run-hook-with-args 'allout-structure-added-hook subj-beg subj-end))))
;;;_ > allout-yank (&optional arg)
(defun allout-yank (&optional arg)
"`allout-mode' yank, with depth and numbering adjustment of yanked topics.
@@ -4658,13 +4701,15 @@ by pops to non-distinctive yanks. Bug..."
allout-file-xref-bullet)
(let ((inhibit-field-text-motion t)
file-name)
- (save-excursion
- (let* ((text-start allout-recent-prefix-end)
- (heading-end (progn (end-of-line) (point))))
- (goto-char text-start)
- (setq file-name
- (if (re-search-forward "\\s-\\(\\S-*\\)" heading-end t)
- (buffer-substring (match-beginning 1) (match-end 1))))))
+ (save-match-data
+ (save-excursion
+ (let* ((text-start allout-recent-prefix-end)
+ (heading-end (progn (end-of-line) (point))))
+ (goto-char text-start)
+ (setq file-name
+ (if (re-search-forward "\\s-\\(\\S-*\\)" heading-end t)
+ (buffer-substring (match-beginning 1)
+ (match-end 1)))))))
(setq file-name (expand-file-name file-name))
(if (or (file-exists-p file-name)
(if (file-writable-p file-name)
@@ -4695,7 +4740,7 @@ invoked.)"
;; We use outline invisibility spec.
(remove-overlays from to 'category 'allout-exposure-category)
(when flag
- (let ((o (make-overlay from to)))
+ (let ((o (make-overlay from to nil 'front-advance)))
(overlay-put o 'category 'allout-exposure-category)
(when (featurep 'xemacs)
(let ((props (symbol-plist 'allout-exposure-category)))
@@ -4898,16 +4943,17 @@ Single line topics intrinsically can be considered as being both
collapsed and uncollapsed. If optional INCLUDE-SINGLE-LINERS is
true, then single-line topics are considered to be collapsed. By
default, they are treated as being uncollapsed."
- (save-excursion
- (and
- ;; Is the topic all on one line (allowing for trailing blank line)?
- (>= (progn (allout-back-to-current-heading)
- (move-end-of-line 1)
- (point))
- (allout-end-of-current-subtree (not (looking-at "\n\n"))))
-
- (or include-single-liners
- (progn (backward-char 1) (allout-hidden-p))))))
+ (save-match-data
+ (save-excursion
+ (and
+ ;; Is the topic all on one line (allowing for trailing blank line)?
+ (>= (progn (allout-back-to-current-heading)
+ (move-end-of-line 1)
+ (point))
+ (allout-end-of-current-subtree (not (looking-at "\n\n"))))
+
+ (or include-single-liners
+ (progn (backward-char 1) (allout-hidden-p)))))))
;;;_ > allout-hide-current-subtree (&optional just-close)
(defun allout-hide-current-subtree (&optional just-close)
"Close the current topic, or containing topic if this one is already closed.
@@ -4931,6 +4977,16 @@ siblings, even if the target topic is already closed."
(allout-expose-topic '(0 :))
(message (concat sibs-msg " Done."))))
(goto-char from)))
+;;;_ > allout-toggle-current-subtree-exposure
+(defun allout-toggle-current-subtree-exposure ()
+ "Show or hide the current subtree depending on its current state."
+ ;; thanks to tassilo for suggesting this.
+ (interactive)
+ (save-excursion
+ (allout-back-to-heading)
+ (if (allout-hidden-p (point-at-eol))
+ (allout-show-current-subtree)
+ (allout-hide-current-subtree))))
;;;_ > allout-show-current-branches ()
(defun allout-show-current-branches ()
"Show all subheadings of this heading, but not their bodies."
@@ -4962,18 +5018,19 @@ siblings, even if the target topic is already closed."
;;;_ > allout-hide-region-body (start end)
(defun allout-hide-region-body (start end)
"Hide all body lines in the region, but not headings."
- (save-excursion
- (save-restriction
- (narrow-to-region start end)
- (goto-char (point-min))
- (let ((inhibit-field-text-motion t))
- (while (not (eobp))
- (end-of-line)
- (allout-flag-region (point) (allout-end-of-entry) t)
- (if (not (eobp))
- (forward-char
- (if (looking-at "\n\n")
- 2 1))))))))
+ (save-match-data
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char (point-min))
+ (let ((inhibit-field-text-motion t))
+ (while (not (eobp))
+ (end-of-line)
+ (allout-flag-region (point) (allout-end-of-entry) t)
+ (if (not (eobp))
+ (forward-char
+ (if (looking-at "\n\n")
+ 2 1)))))))))
;;;_ > allout-expose-topic (spec)
(defun allout-expose-topic (spec)
@@ -5463,7 +5520,7 @@ Defaults:
(progn (set-buffer frombuf)
(allout-listify-exposed from to format))))
(set-buffer tobuf)
- (mapcar func listified)
+ (mapc func listified)
(pop-to-buffer tobuf)))
;;;_ - Copy exposed
@@ -5596,14 +5653,15 @@ environment. Leaves point at the end of the line."
(let ((beg (point))
(end (progn (end-of-line)(point))))
(goto-char beg)
- (while (re-search-forward "\\\\"
- ;;"\\\\\\|\\{\\|\\}\\|\\_\\|\\$\\|\\\"\\|\\&\\|\\^\\|\\-\\|\\*\\|#"
- end ; bounded by end-of-line
- 1) ; no matches, move to end & return nil
- (goto-char (match-beginning 2))
- (insert "\\")
- (setq end (1+ end))
- (goto-char (1+ (match-end 2)))))))
+ (save-match-data
+ (while (re-search-forward "\\\\"
+ ;;"\\\\\\|\\{\\|\\}\\|\\_\\|\\$\\|\\\"\\|\\&\\|\\^\\|\\-\\|\\*\\|#"
+ end ; bounded by end-of-line
+ 1) ; no matches, move to end & return nil
+ (goto-char (match-beginning 2))
+ (insert "\\")
+ (setq end (1+ end))
+ (goto-char (1+ (match-end 2))))))))
;;;_ > allout-insert-latex-header (buffer)
(defun allout-insert-latex-header (buffer)
"Insert initial LaTeX commands at point in BUFFER."
@@ -6050,8 +6108,9 @@ Returns the resulting string, or nil if the transformation fails."
(let ((re (if (listp re) (car re) re))
(replacement (if (listp re) (cadr re) "")))
(goto-char (point-min))
- (while (re-search-forward re nil t)
- (replace-match replacement nil nil)))))
+ (save-match-data
+ (while (re-search-forward re nil t)
+ (replace-match replacement nil nil))))))
(cond
@@ -6282,7 +6341,7 @@ of the availability of a cached copy."
(allout-end-of-prefix t)
(and (string= (buffer-substring-no-properties (1- (point)) (point))
allout-topic-encryption-bullet)
- (looking-at "\\*"))
+ (save-match-data (looking-at "\\*")))
)
)
;;;_ > allout-encrypted-key-info (text)
@@ -6420,47 +6479,49 @@ Such a topic has the allout-topic-encryption-bullet without an
immediately following '*' that would mark the topic as being encrypted. It
must also have content."
(let (done got content-beg)
- (while (not done)
-
- (if (not (re-search-forward
- (format "\\(\\`\\|\n\\)%s *%s[^*]"
- (regexp-quote allout-header-prefix)
- (regexp-quote allout-topic-encryption-bullet))
- nil t))
- (setq got nil
- done t)
- (goto-char (setq got (match-beginning 0)))
- (if (looking-at "\n")
- (forward-char 1))
- (setq got (point)))
-
- (cond ((not got)
- (setq done t))
-
- ((not (search-forward "\n"))
- (setq got nil
- done t))
-
- ((eobp)
- (setq got nil
- done t))
+ (save-match-data
+ (while (not done)
- (t
- (setq content-beg (point))
- (backward-char 1)
- (allout-end-of-subtree)
- (if (or (<= (point) content-beg)
- (and except-mark
- (<= content-beg except-mark)
- (>= (point) except-mark)))
- ;; Continue looking
- (setq got nil)
- ;; Got it!
- (setq done t)))
- )
+ (if (not (re-search-forward
+ (format "\\(\\`\\|\n\\)%s *%s[^*]"
+ (regexp-quote allout-header-prefix)
+ (regexp-quote allout-topic-encryption-bullet))
+ nil t))
+ (setq got nil
+ done t)
+ (goto-char (setq got (match-beginning 0)))
+ (if (save-match-data (looking-at "\n"))
+ (forward-char 1))
+ (setq got (point)))
+
+ (cond ((not got)
+ (setq done t))
+
+ ((not (search-forward "\n"))
+ (setq got nil
+ done t))
+
+ ((eobp)
+ (setq got nil
+ done t))
+
+ (t
+ (setq content-beg (point))
+ (backward-char 1)
+ (allout-end-of-subtree)
+ (if (or (<= (point) content-beg)
+ (and except-mark
+ (<= content-beg except-mark)
+ (>= (point) except-mark)))
+ ;; Continue looking
+ (setq got nil)
+ ;; Got it!
+ (setq done t)))
+ )
+ )
+ (if got
+ (goto-char got))
)
- (if got
- (goto-char got))
)
)
;;;_ > allout-encrypt-decrypted (&optional except-mark)
@@ -6478,36 +6539,38 @@ and exactly resituate the cursor if this is being done as part of a file
save. See `allout-encrypt-unencrypted-on-saves' for more info."
(interactive "p")
- (save-excursion
- (let* ((current-mark (point-marker))
- (current-mark-position (marker-position current-mark))
- was-modified
- bo-subtree
- editing-topic editing-point)
- (goto-char (point-min))
- (while (allout-next-topic-pending-encryption except-mark)
- (setq was-modified (buffer-modified-p))
- (when (save-excursion
- (and (boundp 'allout-encrypt-unencrypted-on-saves)
- allout-encrypt-unencrypted-on-saves
- (setq bo-subtree (re-search-forward "$"))
- (not (allout-hidden-p))
- (>= current-mark (point))
- (allout-end-of-current-subtree)
- (<= current-mark (point))))
+ (save-match-data
+ (save-excursion
+ (let* ((current-mark (point-marker))
+ (current-mark-position (marker-position current-mark))
+ was-modified
+ bo-subtree
+ editing-topic editing-point)
+ (goto-char (point-min))
+ (while (allout-next-topic-pending-encryption except-mark)
+ (setq was-modified (buffer-modified-p))
+ (when (save-excursion
+ (and (boundp 'allout-encrypt-unencrypted-on-saves)
+ allout-encrypt-unencrypted-on-saves
+ (setq bo-subtree (re-search-forward "$"))
+ (not (allout-hidden-p))
+ (>= current-mark (point))
+ (allout-end-of-current-subtree)
+ (<= current-mark (point))))
(setq editing-topic (point)
;; we had to wait for this 'til now so prior topics are
;; encrypted, any relevant text shifts are in place:
editing-point (- current-mark-position
(count-trailing-whitespace-region
bo-subtree current-mark-position))))
- (allout-toggle-subtree-encryption)
+ (allout-toggle-subtree-encryption)
+ (if (not was-modified)
+ (set-buffer-modified-p nil))
+ )
(if (not was-modified)
(set-buffer-modified-p nil))
+ (if editing-topic (list editing-topic editing-point))
)
- (if (not was-modified)
- (set-buffer-modified-p nil))
- (if editing-topic (list editing-topic editing-point))
)
)
)
@@ -6725,13 +6788,14 @@ Optional arg SUCCESSIVE-BACKSLASHES is used internally for recursion."
If BEG is bigger than END we return 0."
(if (> beg end)
0
- (save-excursion
- (goto-char beg)
- (let ((count 0))
- (while (re-search-forward "[ ][ ]*$" end t)
- (goto-char (1+ (match-beginning 2)))
- (setq count (1+ count)))
- count))))
+ (save-match-data
+ (save-excursion
+ (goto-char beg)
+ (let ((count 0))
+ (while (re-search-forward "[ ][ ]*$" end t)
+ (goto-char (1+ (match-beginning 2)))
+ (setq count (1+ count)))
+ count)))))
;;;_ > allout-format-quote (string)
(defun allout-format-quote (string)
"Return a copy of string with all \"%\" characters doubled."
@@ -6844,7 +6908,13 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
;; Move to beginning-of-line, ignoring fields and invisibles.
(skip-chars-backward "^\n")
- (while (and (not (bobp)) (line-move-invisible-p (1- (point))))
+ (while (and (not (bobp))
+ (let ((prop
+ (get-char-property (1- (point)) 'invisible)))
+ (if (eq buffer-invisibility-spec t)
+ prop
+ (or (memq prop buffer-invisibility-spec)
+ (assq prop buffer-invisibility-spec)))))
(goto-char (if (featurep 'xemacs)
(previous-property-change (point))
(previous-char-property-change (point))))
@@ -6873,8 +6943,18 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
(error nil))
(not (bobp))
(progn
- (while (and (not (bobp))
- (line-move-invisible-p (1- (point))))
+ (while
+ (and
+ (not (bobp))
+ (let ((prop
+ (get-char-property (1- (point))
+ 'invisible)))
+ (if (eq buffer-invisibility-spec t)
+ prop
+ (or (memq prop
+ buffer-invisibility-spec)
+ (assq prop
+ buffer-invisibility-spec)))))
(goto-char
(previous-char-property-change (point))))
(backward-char 1)))
@@ -6891,16 +6971,6 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
(setq arg 1)
(setq done t)))))))
)
-;;;_ > line-move-invisible-p if necessary
-(if (not (fboundp 'line-move-invisible-p))
- (defun line-move-invisible-p (pos)
- "Return non-nil if the character after POS is currently invisible."
- (let ((prop
- (get-char-property pos 'invisible)))
- (if (eq buffer-invisibility-spec t)
- prop
- (or (memq prop buffer-invisibility-spec)
- (assq prop buffer-invisibility-spec))))))
;;;_ #10 Unfinished
;;;_ > allout-bullet-isearch (&optional bullet)
diff --git a/lisp/ansi-color.el b/lisp/ansi-color.el
index 769b21a38f3..9b022876ca2 100644
--- a/lisp/ansi-color.el
+++ b/lisp/ansi-color.el
@@ -557,14 +557,14 @@ The face definitions are based upon the variables
(let ((ansi-color-map (make-vector 50 nil))
(index 0))
;; miscellaneous attributes
- (mapcar
+ (mapc
(function (lambda (e)
(aset ansi-color-map index e)
(setq index (1+ index)) ))
ansi-color-faces-vector)
;; foreground attributes
(setq index 30)
- (mapcar
+ (mapc
(function (lambda (e)
(aset ansi-color-map index
(ansi-color-make-face 'foreground e))
@@ -572,7 +572,7 @@ The face definitions are based upon the variables
ansi-color-names-vector)
;; background attributes
(setq index 40)
- (mapcar
+ (mapc
(function (lambda (e)
(aset ansi-color-map index
(ansi-color-make-face 'background e))
diff --git a/lisp/apropos.el b/lisp/apropos.el
index 9e784e087e6..9fddf0103fb 100644
--- a/lisp/apropos.el
+++ b/lisp/apropos.el
@@ -1005,7 +1005,7 @@ If non-nil TEXT is a string that will be printed as a heading."
(defun apropos-describe-plist (symbol)
"Display a pretty listing of SYMBOL's plist."
(help-setup-xref (list 'apropos-describe-plist symbol) (interactive-p))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(set-buffer standard-output)
(princ "Symbol ")
(prin1 symbol)
@@ -1014,8 +1014,7 @@ If non-nil TEXT is a string that will be printed as a heading."
(put-text-property (+ (point-min) 7) (- (point) 14)
'face apropos-symbol-face))
(insert (apropos-format-plist symbol "\n "))
- (princ ")")
- (print-help-return-message)))
+ (princ ")")))
(provide 'apropos)
diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el
index 39fd10c6b6f..404e4543e0b 100644
--- a/lisp/arc-mode.el
+++ b/lisp/arc-mode.el
@@ -54,17 +54,17 @@
;; ARCHIVE TYPES: Currently only the archives below are handled, but the
;; structure for handling just about anything is in place.
;;
-;; Arc Lzh Zip Zoo
-;; --------------------------------
-;; View listing Intern Intern Intern Intern
-;; Extract member Y Y Y Y
-;; Save changed member Y Y Y Y
-;; Add new member N N N N
-;; Delete member Y Y Y Y
-;; Rename member Y Y N N
-;; Chmod - Y Y -
-;; Chown - Y - -
-;; Chgrp - Y - -
+;; Arc Lzh Zip Zoo Rar
+;; ----------------------------------------
+;; View listing Intern Intern Intern Intern Y
+;; Extract member Y Y Y Y Y
+;; Save changed member Y Y Y Y N
+;; Add new member N N N N N
+;; Delete member Y Y Y Y N
+;; Rename member Y Y N N N
+;; Chmod - Y Y - N
+;; Chown - Y - - N
+;; Chgrp - Y - - N
;;
;; Special thanks to Bill Brodie <wbrodie@panix.com> for very useful tips
;; on the first released version of this package.
@@ -104,7 +104,7 @@
;;; Code:
;; -------------------------------------------------------------------------
-;; Section: Configuration.
+;;; Section: Configuration.
(defgroup archive nil
"Simple editing of archives."
@@ -318,7 +318,7 @@ Archive and member name will be added."
(string :format "%v")))
:group 'archive-zoo)
;; -------------------------------------------------------------------------
-;; Section: Variables
+;;; Section: Variables
(defvar archive-subtype nil "Symbol describing archive type.")
(defvar archive-file-list-start nil "Position of first contents line.")
@@ -459,7 +459,7 @@ Each descriptor is a vector of the form
(make-variable-buffer-local 'archive-files)
;; -------------------------------------------------------------------------
-;; Section: Support functions.
+;;; Section: Support functions.
(defsubst archive-name (suffix)
(intern (concat "archive-" (symbol-name archive-subtype) "-" suffix)))
@@ -602,7 +602,7 @@ Does not signal an error if optional argument NOERROR is non-nil."
(if (not noerror)
(error "Line does not describe a member of the archive")))))
;; -------------------------------------------------------------------------
-;; Section: the mode definition
+;;; Section: the mode definition
;;;###autoload
(defun archive-mode (&optional force)
@@ -704,8 +704,18 @@ archive.
;; Have seen capital "LHA's", and file has lower case "LHa's" too.
;; Note this regexp is also in archive-exe-p.
((looking-at "MZ\\(.\\|\n\\)\\{34\\}LH[aA]'s SFX ") 'lzh-exe)
+ ((looking-at "Rar!") 'rar)
(t (error "Buffer format not recognized")))))
;; -------------------------------------------------------------------------
+
+(defun archive-desummarize ()
+ (let ((inhibit-read-only t)
+ (modified (buffer-modified-p)))
+ (widen)
+ (delete-region (point-min) archive-proper-file-start)
+ (restore-buffer-modified-p modified)))
+
+
(defun archive-summarize (&optional shut-up)
"Parse the contents of the archive file in the current buffer.
Place a dired-like listing on the front;
@@ -716,6 +726,8 @@ when parsing the archive."
(widen)
(set-buffer-multibyte nil)
(let ((inhibit-read-only t))
+ (setq archive-proper-file-start (copy-marker (point-min) t))
+ (set (make-local-variable 'change-major-mode-hook) 'archive-desummarize)
(or shut-up
(message "Parsing archive file..."))
(buffer-disable-undo (current-buffer))
@@ -731,13 +743,9 @@ when parsing the archive."
(defun archive-resummarize ()
"Recreate the contents listing of an archive."
- (let ((modified (buffer-modified-p))
- (no (archive-get-lineno))
- (inhibit-read-only t))
- (widen)
- (delete-region (point-min) archive-proper-file-start)
+ (let ((no (archive-get-lineno)))
+ (archive-desummarize)
(archive-summarize t)
- (restore-buffer-modified-p modified)
(goto-char archive-file-list-start)
(archive-next-line no)))
@@ -774,7 +782,7 @@ This function changes the set of information shown for each files."
(setq archive-alternate-display (not archive-alternate-display))
(archive-resummarize))
;; -------------------------------------------------------------------------
-;; Section: Local archive copy handling
+;;; Section: Local archive copy handling
(defun archive-unique-fname (fname dir)
"Make sure a file FNAME can be created uniquely in directory DIR.
@@ -856,7 +864,7 @@ using `make-temp-file', and the generated name is returned."
(error nil))
(if (string= name top) (setq again nil)))))
;; -------------------------------------------------------------------------
-;; Section: Member extraction
+;;; Section: Member extraction
(defun archive-file-name-handler (op &rest args)
(or (eq op 'file-exists-p)
@@ -1076,7 +1084,7 @@ using `make-temp-file', and the generated name is returned."
(funcall func buffer-file-name membuf name))
(error "Adding a new member is not supported for this archive type"))))
;; -------------------------------------------------------------------------
-;; Section: IO stuff
+;;; Section: IO stuff
(defun archive-write-file-member ()
(save-excursion
@@ -1145,7 +1153,7 @@ using `make-temp-file', and the generated name is returned."
(set-buffer-modified-p nil))
t))
;; -------------------------------------------------------------------------
-;; Section: Marking and unmarking.
+;;; Section: Marking and unmarking.
(defun archive-flag-deleted (p &optional type)
"In archive mode, mark this member to be deleted from the archive.
@@ -1210,7 +1218,7 @@ Use \\[archive-unmark-all-files] to remove all marks."
(and default
(list (archive-get-descr))))))
;; -------------------------------------------------------------------------
-;; Section: Operate
+;;; Section: Operate
(defun archive-next-line (p)
(interactive "p")
@@ -1330,7 +1338,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
(let ((inhibit-read-only t))
(undo)))
;; -------------------------------------------------------------------------
-;; Section: Arc Archives
+;;; Section: Arc Archives
(defun archive-arc-summarize ()
(let ((p 1)
@@ -1400,7 +1408,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
(delete-char 13)
(insert name)))))
;; -------------------------------------------------------------------------
-;; Section: Lzh Archives
+;;; Section: Lzh Archives
(defun archive-lzh-summarize (&optional start)
(let ((p (or start 1)) ;; 1 for .lzh, something further on for .exe
@@ -1627,7 +1635,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
files "a unix-style mode" 8))
;; -------------------------------------------------------------------------
-;; Section: Lzh Self-Extracting .exe Archives
+;;; Section: Lzh Self-Extracting .exe Archives
;;
;; No support for modifying these files. It looks like the lha for unix
;; program (as of version 1.14i) can't create or retain the DOS exe part.
@@ -1654,7 +1662,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
"Extract a member from an LZH self-extracting exe, for `archive-mode'.")
;; -------------------------------------------------------------------------
-;; Section: Zip Archives
+;;; Section: Zip Archives
(defun archive-zip-summarize ()
(goto-char (- (point-max) (- 22 18)))
@@ -1763,7 +1771,7 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
(t (message "Don't know how to change mode for this member"))))
))))
;; -------------------------------------------------------------------------
-;; Section: Zoo Archives
+;;; Section: Zoo Archives
(defun archive-zoo-summarize ()
(let ((p (1+ (archive-l-e 25 4)))
@@ -1832,6 +1840,87 @@ This doesn't recover lost files, it just undoes changes in the buffer itself."
(defun archive-zoo-extract (archive name)
(archive-extract-by-stdout archive name archive-zoo-extract))
+
+;; -------------------------------------------------------------------------
+;;; Section: Rar Archives
+
+(defun archive-rar-summarize ()
+ (let* ((file buffer-file-name)
+ (copy (file-local-copy file))
+ header footer
+ (maxname 10)
+ (maxsize 5)
+ (files ()))
+ (with-temp-buffer
+ (call-process "unrar-free" nil t nil "--list" (or file copy))
+ (if copy (delete-file copy))
+ (goto-char (point-min))
+ (re-search-forward "^-+\n")
+ (setq header
+ (buffer-substring (save-excursion (re-search-backward "^[^ ]"))
+ (point)))
+ (while (looking-at (concat " \\(.*\\)\n" ;Name.
+ ;; Size ; Packed.
+ " +\\([0-9]+\\) +[0-9]+"
+ ;; Ratio ; Date'
+ " +\\([0-9%]+\\) +\\([-0-9]+\\)"
+ ;; Time ; Attr.
+ " +\\([0-9:]+\\) +......"
+ ;; CRC; Meth ; Var.
+ " +[0-9A-F]+ +[^ \n]+ +[0-9.]+\n"))
+ (goto-char (match-end 0))
+ (let ((name (match-string 1))
+ (size (match-string 2)))
+ (if (> (length name) maxname) (setq maxname (length name)))
+ (if (> (length size) maxsize) (setq maxsize (length size)))
+ (push (vector name name nil nil
+ ;; Size, Ratio.
+ size (match-string 3)
+ ;; Date, Time.
+ (match-string 4) (match-string 5))
+ files)))
+ (setq footer (buffer-substring (point) (point-max))))
+ (setq files (nreverse files))
+ (goto-char (point-min))
+ (let* ((format (format " %%s %%s %%%ds %%5s %%s" maxsize))
+ (sep (format format "--------" "-----" (make-string maxsize ?-)
+ "-----" ""))
+ (column (length sep)))
+ (insert (format format " Date " "Time " "Size " "Ratio" " Filename") "\n")
+ (insert sep (make-string maxname ?-) "\n")
+ (archive-summarize-files (mapcar (lambda (desc)
+ (let ((text
+ (format format
+ (aref desc 6)
+ (aref desc 7)
+ (aref desc 4)
+ (aref desc 5)
+ (aref desc 1))))
+ (vector text
+ column
+ (length text))))
+ files))
+ (insert sep (make-string maxname ?-) "\n")
+ (apply 'vector files))))
+
+(defun archive-rar-extract (archive name)
+ ;; unrar-free seems to have no way to extract to stdout or even to a file.
+ (if (file-name-absolute-p name)
+ ;; The code below assumes the name is relative and may do undesirable
+ ;; things otherwise.
+ (error "Can't extract files with non-relative names")
+ (let ((dest (make-temp-file "arc-rar" 'dir)))
+ (unwind-protect
+ (progn
+ (call-process "unrar-free" nil nil nil
+ "--extract" archive name dest)
+ (insert-file-contents-literally (expand-file-name name dest)))
+ (delete-file (expand-file-name name dest))
+ (while (file-name-directory name)
+ (setq name (directory-file-name (file-name-directory name)))
+ (delete-directory (expand-file-name name dest)))
+ (delete-directory dest)))))
+
;; -------------------------------------------------------------------------
;; This line was a mistake; it is kept now for compatibility.
;; rms 15 Oct 98
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
index 805065ba009..5887529ba43 100644
--- a/lisp/autoinsert.el
+++ b/lisp/autoinsert.el
@@ -186,33 +186,114 @@ If this contains a %s, that will be replaced by the matching rule."
(completing-read "Keyword, C-h: " v1 nil t))
str ", ") & -2 "
-;; This file 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 3, or (at your option)
-;; any later version.
+\;; This file 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 3, or (at your option)
+\;; any later version.
-;; This file 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.
+\;; This file 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.
+\;; 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:
+\;;; Commentary:
-;; " _ "
+\;; " _ "
-;;; Code:
+\;;; Code:
\(provide '"
(file-name-sans-extension (file-name-nondirectory (buffer-file-name)))
")
-;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n"))
+\;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n")
+ (("\\.texi\\(nfo\\)?\\'" . "Texinfo file skeleton")
+ "Title: "
+ "\\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename "
+ (file-name-sans-extension
+ (file-name-nondirectory (buffer-file-name))) ".info\n"
+ "@settitle " str "
+@c %**end of header
+@copying\n"
+ (setq short-description (read-string "Short description: "))
+ ".\n\n"
+ "Copyright @copyright{} " (substring (current-time-string) -4) " "
+ (getenv "ORGANIZATION") | (progn user-full-name) "
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, and no Cover Texts. A copy of the license is
+included in the section entitled ``GNU Free Documentation License.''
+
+A copy of the license is also available from the Free Software
+Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}.
+
+@end quotation
+
+The document was typeset with
+@uref{http://www.texinfo.org/, GNU Texinfo}.
+
+@end copying
+
+@titlepage
+@title " str "
+@subtitle " short-description "
+@author " (getenv "ORGANIZATION") | (progn user-full-name)
+ " <" (progn user-mail-address) ">
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@c Output the table of the contents at the beginning.
+@contents
+
+@ifnottex
+@node Top
+@top " str "
+
+@insertcopying
+@end ifnottex
+
+@c Generate the nodes for this menu with `C-c C-u C-m'.
+@menu
+@end menu
+
+@c Update all node entries with `C-c C-u C-n'.
+@c Insert new nodes with `C-c C-c n'.
+@node Chapter One
+@chapter Chapter One
+
+" _ "
+
+@node Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual.
+@end menu
+
+@c Get fdl.texi from http://www.gnu.org/licenses/fdl.html
+@include fdl.texi
+
+@node Index
+@unnumbered Index
+
+@printindex cp
+
+@bye
+
+@c " (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 may be a regexp that must match the new file's name, or it may be
@@ -272,7 +353,7 @@ Matches the visited file name against the elements of `auto-insert-alist'."
(eq this-command 'auto-insert))
(y-or-n-p (format auto-insert-prompt desc)))
t)
- (mapcar
+ (mapc
(lambda (action)
(if (stringp action)
(if (file-readable-p
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 5220f3f6dea..49e83c514a9 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -276,9 +276,9 @@ the list of old buffers.")
"Position of last known end of file.")
(add-hook 'find-file-hook
- (lambda ()
- (set (make-local-variable 'auto-revert-tail-pos)
- (nth 7 (file-attributes buffer-file-name)))))
+ (lambda ()
+ (set (make-local-variable 'auto-revert-tail-pos)
+ (nth 7 (file-attributes buffer-file-name)))))
;; Functions:
@@ -334,7 +334,7 @@ Use `auto-revert-mode' for changes other than appends!"
(auto-revert-tail-mode 0)
(error "This buffer is not visiting a file"))
(if (and (buffer-modified-p)
- (not auto-revert-tail-pos) ; library was loaded only after finding file
+ (zerop auto-revert-tail-pos) ; library was loaded only after finding file
(not (y-or-n-p "Buffer is modified, so tail offset may be wrong. Proceed? ")))
(auto-revert-tail-mode 0)
;; a-r-tail-pos stores the size of the file at the time of the
@@ -348,11 +348,11 @@ Use `auto-revert-mode' for changes other than appends!"
;; revert, then you might miss some output then happened
;; between visiting the file and activating a-r-t-mode.
(and (zerop auto-revert-tail-pos)
- (not (verify-visited-file-modtime (current-buffer)))
- (y-or-n-p "File changed on disk, content may be missing. \
+ (not (verify-visited-file-modtime (current-buffer)))
+ (y-or-n-p "File changed on disk, content may be missing. \
Perform a full revert? ")
- ;; Use this (not just revert-buffer) for point-preservation.
- (auto-revert-handler))
+ ;; Use this (not just revert-buffer) for point-preservation.
+ (auto-revert-handler))
;; else we might reappend our own end when we save
(add-hook 'before-save-hook (lambda () (auto-revert-tail-mode 0)) nil t)
(or (local-variable-p 'auto-revert-tail-pos) ; don't lose prior position
@@ -416,12 +416,16 @@ will use an up-to-date value of `auto-revert-interval'"
"Revert current buffer, if appropriate.
This is an internal function used by Auto-Revert Mode."
(when (or auto-revert-tail-mode (not (buffer-modified-p)))
- (let* ((buffer (current-buffer))
+ (let* ((buffer (current-buffer)) size
(revert
(or (and buffer-file-name
(not (file-remote-p buffer-file-name))
(file-readable-p buffer-file-name)
- (not (verify-visited-file-modtime buffer)))
+ (if auto-revert-tail-mode
+ (/= auto-revert-tail-pos
+ (setq size
+ (nth 7 (file-attributes buffer-file-name))))
+ (not (verify-visited-file-modtime buffer))))
(and (or auto-revert-mode
global-auto-revert-non-file-buffers)
revert-buffer-function
@@ -445,7 +449,7 @@ This is an internal function used by Auto-Revert Mode."
(push window eoblist)))
'no-mini t))
(if auto-revert-tail-mode
- (auto-revert-tail-handler)
+ (auto-revert-tail-handler size)
;; Bind buffer-read-only in case user has done C-x C-q,
;; so as not to forget that. This gives undesirable results
;; when the file's mode changes, but that is less common.
@@ -460,23 +464,26 @@ This is an internal function used by Auto-Revert Mode."
(when (or revert auto-revert-check-vc-info)
(vc-find-file-hook)))))
-(defun auto-revert-tail-handler ()
- (let ((size (nth 7 (file-attributes buffer-file-name)))
- (modified (buffer-modified-p))
- buffer-read-only ; ignore
+(defun auto-revert-tail-handler (size)
+ (let ((modified (buffer-modified-p))
+ (inhibit-read-only t) ; Ignore.
(file buffer-file-name)
- buffer-file-name) ; ignore that file has changed
- (when (> size auto-revert-tail-pos)
+ (buffer-file-name nil)) ; Ignore that file has changed.
+ (when (/= auto-revert-tail-pos size)
+ (run-hooks 'before-revert-hook)
(undo-boundary)
(save-restriction
(widen)
(save-excursion
(goto-char (point-max))
- (insert-file-contents file nil auto-revert-tail-pos size)))
- (run-mode-hooks 'after-revert-hook)
+ (insert-file-contents file nil
+ (and (< auto-revert-tail-pos size)
+ auto-revert-tail-pos)
+ size)))
+ (run-hooks 'after-revert-hook)
(undo-boundary)
(setq auto-revert-tail-pos size)
- (set-buffer-modified-p modified)))
+ (restore-buffer-modified-p modified)))
(set-visited-file-modtime))
(defun auto-revert-buffers ()
@@ -550,5 +557,5 @@ the timer when no buffers need to be checked."
(run-hooks 'auto-revert-load-hook)
-;;; arch-tag: f6bcb07b-4841-477e-9e44-b18678e58876
+;; arch-tag: f6bcb07b-4841-477e-9e44-b18678e58876
;;; autorevert.el ends here
diff --git a/lisp/bindings.el b/lisp/bindings.el
index eefc66b22c4..ca9f03c4c7c 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -170,6 +170,12 @@ corresponding to the mode line clicked."
(push (cons eol (cons mnemonic desc)) mode-line-eol-desc-cache)
desc)))
+(defvar mode-line-client
+ `(""
+ (:propertize ("" (:eval (if (frame-parameter nil 'client) "@" "")))
+ help-echo "Emacsclient frame"))
+ "Mode-line control for identifying Emacsclient frames.")
+
(defvar mode-line-mule-info
`(""
(current-input-method
@@ -209,7 +215,7 @@ mnemonics of the following coding systems:
(make-variable-buffer-local 'mode-line-mule-info)
-(defvar mode-line-frame-identification '("-%F ")
+(defvar mode-line-frame-identification '(window-system " " "-%F ")
"Mode-line control to describe the current frame.")
(defvar mode-line-process nil "\
@@ -248,6 +254,22 @@ Normally nil in most modes, since there is no process to display.")
(make-variable-buffer-local 'mode-line-modified)
+(defvar mode-line-remote
+ (list (propertize
+ "%1@"
+ 'help-echo (purecopy (lambda (window object point)
+ (format "%s"
+ (save-selected-window
+ (select-window window)
+ (concat
+ (if (file-remote-p default-directory)
+ "Remote: "
+ "Local: ")
+ default-directory)))))))
+ "Mode-line flag to show if default-directory for current buffer is remote.")
+
+(make-variable-buffer-local 'mode-line-remote)
+
;; Actual initialization is below.
(defvar mode-line-position nil
"Mode-line control for displaying the position in the buffer.
@@ -267,6 +289,7 @@ Keymap to display on major mode.")
(defvar mode-line-minor-mode-keymap
(let ((map (make-sparse-keymap)))
+ (define-key map [mode-line down-mouse-1] 'mouse-minor-mode-menu)
(define-key map [mode-line mouse-2] 'mode-line-minor-mode-help)
(define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
(define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1)
@@ -286,7 +309,9 @@ Keymap to display on minor modes.")
"%e"
(propertize "-" 'help-echo help-echo)
'mode-line-mule-info
+ 'mode-line-client
'mode-line-modified
+ 'mode-line-remote
'mode-line-frame-identification
'mode-line-buffer-identification
(propertize " " 'help-echo help-echo)
@@ -307,13 +332,14 @@ Keymap to display on minor modes.")
'("" mode-line-process)
`(:propertize ("" minor-mode-alist)
mouse-face mode-line-highlight
- help-echo "mouse-2: minor mode help, mouse-3: toggle minor modes"
+ help-echo "mouse-1: minor mode, mouse-2: minor mode help, mouse-3: toggle minor modes"
local-map ,mode-line-minor-mode-keymap)
(propertize "%n" 'help-echo "mouse-2: widen"
'mouse-face 'mode-line-highlight
'local-map (make-mode-line-mouse-map
'mouse-2 #'mode-line-widen))
(propertize ")%]--" 'help-echo help-echo)))
+
(standard-mode-line-position
`((-3 ,(propertize "%p" 'help-echo help-echo))
(size-indication-mode
@@ -468,7 +494,7 @@ Menu of mode operations in the mode line.")
(x-popup-menu event mode-line-mode-menu))
(defun mode-line-minor-mode-help (event)
- "Describe minor mode for EVENT occurred on minor modes area of the mode line."
+ "Describe minor mode for EVENT on minor modes area of the mode line."
(interactive "@e")
(let ((indicator (car (nth 4 (car (cdr event))))))
(describe-minor-mode-from-indicator indicator)))
@@ -511,7 +537,7 @@ is okay. See `mode-line-format'.")
'(".elc" ".lof"
".glo" ".idx" ".lot"
;; TeX-related
- ".dvi" ".fmt" ".tfm" ".pdf"
+ ".fmt" ".tfm"
;; Java compiled
".class"
;; CLISP
@@ -632,6 +658,10 @@ language you are using."
(define-key global-map "\e\e\e" 'keyboard-escape-quit)
(define-key global-map "\C-g" 'keyboard-quit)
+;; Used to be in termdev.el: when using several terminals, make C-z
+;; suspend only the relevant terminal.
+(substitute-key-definition 'suspend-emacs 'suspend-frame global-map)
+
(define-key global-map "\C-j" 'newline-and-indent)
(define-key global-map "\C-m" 'newline)
(define-key global-map "\C-o" 'open-line)
@@ -1014,7 +1044,6 @@ language you are using."
(define-key ctl-x-map "rf" 'frame-configuration-to-register)
(define-key esc-map "q" 'fill-paragraph)
-;; (define-key esc-map "g" 'fill-region)
(define-key ctl-x-map "." 'set-fill-prefix)
(define-key esc-map "{" 'backward-paragraph)
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 5a173e6ba1a..184f9de518c 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -207,11 +207,6 @@ following in your `.emacs' file:
;;; No user-serviceable parts beyond this point.
-;; Is it XEmacs?
-(defconst bookmark-xemacsp
- (string-match "\\(Lucid\\|Xemacs\\)" emacs-version))
-
-
;; Added for lucid emacs compatibility, db
(or (fboundp 'defalias) (fset 'defalias 'fset))
@@ -240,12 +235,13 @@ functions have a binding in this keymap.")
;; Read the help on all of these functions for details...
;;;###autoload (define-key bookmark-map "x" 'bookmark-set)
-;;;###autoload (define-key bookmark-map "m" 'bookmark-set) ; "m" for "mark"
+;;;###autoload (define-key bookmark-map "m" 'bookmark-set) ;"m"ark
;;;###autoload (define-key bookmark-map "j" 'bookmark-jump)
-;;;###autoload (define-key bookmark-map "g" 'bookmark-jump) ; "g" for "go"
+;;;###autoload (define-key bookmark-map "g" 'bookmark-jump) ;"g"o
+;;;###autoload (define-key bookmark-map "o" 'bookmark-jump-other-window)
;;;###autoload (define-key bookmark-map "i" 'bookmark-insert)
;;;###autoload (define-key bookmark-map "e" 'edit-bookmarks)
-;;;###autoload (define-key bookmark-map "f" 'bookmark-insert-location) ; "f" for "find"
+;;;###autoload (define-key bookmark-map "f" 'bookmark-insert-location) ;"f"ind
;;;###autoload (define-key bookmark-map "r" 'bookmark-rename)
;;;###autoload (define-key bookmark-map "d" 'bookmark-delete)
;;;###autoload (define-key bookmark-map "l" 'bookmark-load)
@@ -494,7 +490,7 @@ Optional fourth arg INFO-NODE means this bookmark is at info node
INFO-NODE, so record this fact in the bookmark's entry."
(bookmark-maybe-load-default-file)
(let ((stripped-name (copy-sequence name)))
- (or bookmark-xemacsp
+ (or (featurep 'xemacs)
;; XEmacs's `set-text-properties' doesn't work on
;; free-standing strings, apparently.
(set-text-properties 0 (length stripped-name) nil stripped-name))
@@ -1083,6 +1079,27 @@ of the old one in the permanent bookmark record."
(bookmark-show-annotation bookmark)))))
+;;;###autoload
+(defun bookmark-jump-other-window (bookmark)
+ "Jump to BOOKMARK (a point in some file) in another window.
+See `bookmark-jump'."
+ (interactive
+ (let ((bkm (bookmark-completing-read "Jump to bookmark (in another window)"
+ bookmark-current-bookmark)))
+ (if (> emacs-major-version 21)
+ (list bkm) bkm)))
+ (when bookmark
+ (bookmark-maybe-historicize-string bookmark)
+ (let ((cell (bookmark-jump-noselect bookmark)))
+ (and cell
+ (switch-to-buffer-other-window (car cell))
+ (goto-char (cdr cell))
+ (if bookmark-automatically-show-annotations
+ ;; if there is an annotation for this bookmark,
+ ;; show it in a buffer.
+ (bookmark-show-annotation bookmark))))))
+
+
(defun bookmark-file-or-variation-thereof (file)
"Return FILE (a string) if it exists, or return a reasonable
variation of FILE if that exists. Reasonable variations are checked
@@ -1568,7 +1585,7 @@ deletion, or > if it is flagged for displaying."
(insert "% Bookmark\n- --------\n")
(add-text-properties (point-min) (point)
'(font-lock-face bookmark-menu-heading))
- (mapcar
+ (mapc
(lambda (full-record)
;; if a bookmark has an annotation, prepend a "*"
;; in the list of bookmarks.
@@ -1785,7 +1802,7 @@ if an annotation exists."
(let ((old-buf (current-buffer)))
(pop-to-buffer (get-buffer-create "*Bookmark Annotation*") t)
(delete-region (point-min) (point-max))
- (mapcar
+ (mapc
(lambda (full-record)
(let* ((name (bookmark-name-from-full-record full-record))
(ann (bookmark-get-annotation name)))
diff --git a/lisp/bs.el b/lisp/bs.el
index 06c2474fa5d..4eef017129d 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -158,7 +158,7 @@
("" 2 2 left " ")
("File" 12 12 left bs--get-file-name)
("" 2 2 left " "))
- "*List specifying the layout of a Buffer Selection Menu buffer.
+ "List specifying the layout of a Buffer Selection Menu buffer.
Each entry specifies a column and is a list of the form of:
\(HEADER MINIMUM-LENGTH MAXIMUM-LENGTH ALIGNMENT FUN-OR-STRING)
@@ -180,12 +180,7 @@ return a string representing the column's value."
(defun bs--make-header-match-string ()
"Return a regexp matching the first line of a Buffer Selection Menu buffer."
- (let ((res "^\\(")
- (ele bs-attributes-list))
- (while ele
- (setq res (concat res (car (car ele)) " *"))
- (setq ele (cdr ele)))
- (concat res "$\\)")))
+ (concat "^\\(" (mapconcat #'car bs-attributes-list " *") " *$\\)"))
;; Font-Lock-Settings
(defvar bs-mode-font-lock-keywords
@@ -206,7 +201,7 @@ return a string representing the column's value."
"Default font lock expressions for Buffer Selection Menu.")
(defcustom bs-max-window-height 20
- "*Maximal window height of Buffer Selection Menu."
+ "Maximal window height of Buffer Selection Menu."
:group 'bs-appearance
:type 'integer)
@@ -224,7 +219,7 @@ it is reset to nil. Use `bs-must-always-show-regexp' to specify buffers
that must always be shown regardless of the configuration.")
(defcustom bs-must-always-show-regexp nil
- "*Regular expression for specifying buffers to show always.
+ "Regular expression for specifying buffers to show always.
A buffer whose name matches this regular expression will
be shown regardless of current configuration of Buffer Selection Menu."
:group 'bs
@@ -246,7 +241,7 @@ The function gets two arguments - the buffers to compare.
It must return non-nil if the first buffer should sort before the second.")
(defcustom bs-maximal-buffer-name-column 45
- "*Maximum column width for buffer names.
+ "Maximum column width for buffer names.
The column for buffer names has dynamic width. The width depends on
maximal and minimal length of names of buffers to show. The maximal
width is bounded by `bs-maximal-buffer-name-column'.
@@ -255,7 +250,7 @@ See also `bs-minimal-buffer-name-column'."
:type 'integer)
(defcustom bs-minimal-buffer-name-column 15
- "*Minimum column width for buffer names.
+ "Minimum column width for buffer names.
The column for buffer names has dynamic width. The width depends on
maximal and minimal length of names of buffers to show. The minimal
width is bounded by `bs-minimal-buffer-name-column'.
@@ -272,7 +267,7 @@ See also `bs-maximal-buffer-name-column'."
("files-and-scratch" "^\\*scratch\\*$" nil nil bs-visits-non-file
bs-sort-buffer-interns-are-last)
("all-intern-last" nil nil nil nil bs-sort-buffer-interns-are-last))
- "*List of all configurations you can use in the Buffer Selection Menu.
+ "List of all configurations you can use in the Buffer Selection Menu.
A configuration describes which buffers appear in Buffer Selection Menu
and also the order of buffers. A configuration is a list with
six elements. The first element is a string and describes the configuration.
@@ -284,7 +279,7 @@ By setting these variables you define a configuration."
:type '(repeat sexp))
(defcustom bs-default-configuration "files"
- "*Name of default configuration used by the Buffer Selection Menu.
+ "Name of default configuration used by the Buffer Selection Menu.
\\<bs-mode-map>
Will be changed using key \\[bs-select-next-configuration].
Must be a string used in `bs-configurations' for naming a configuration."
@@ -292,7 +287,7 @@ Must be a string used in `bs-configurations' for naming a configuration."
:type 'string)
(defcustom bs-alternative-configuration "all"
- "*Name of configuration used when calling `bs-show' with \
+ "Name of configuration used when calling `bs-show' with \
\\[universal-argument] as prefix key.
Must be a string used in `bs-configurations' for naming a configuration."
:group 'bs
@@ -303,7 +298,7 @@ Must be a string used in `bs-configurations' for naming a configuration."
Must be a string used in `bs-configurations' for naming a configuration.")
(defcustom bs-cycle-configuration-name nil
- "*Name of configuration used when cycling through the buffer list.
+ "Name of configuration used when cycling through the buffer list.
A value of nil means to use current configuration `bs-default-configuration'.
Must be a string used in `bs-configurations' for naming a configuration."
:group 'bs
@@ -311,32 +306,32 @@ Must be a string used in `bs-configurations' for naming a configuration."
string))
(defcustom bs-string-show-always "+"
- "*String added in column 1 indicating a buffer will always be shown."
+ "String added in column 1 indicating a buffer will always be shown."
:group 'bs-appearance
:type 'string)
(defcustom bs-string-show-never "-"
- "*String added in column 1 indicating a buffer will never be shown."
+ "String added in column 1 indicating a buffer will never be shown."
:group 'bs-appearance
:type 'string)
(defcustom bs-string-current "."
- "*String added in column 1 indicating the current buffer."
+ "String added in column 1 indicating the current buffer."
:group 'bs-appearance
:type 'string)
(defcustom bs-string-current-marked "#"
- "*String added in column 1 indicating the current buffer when it is marked."
+ "String added in column 1 indicating the current buffer when it is marked."
:group 'bs-appearance
:type 'string)
(defcustom bs-string-marked ">"
- "*String added in column 1 indicating a marked buffer."
+ "String added in column 1 indicating a marked buffer."
:group 'bs-appearance
:type 'string)
(defcustom bs-string-show-normally " "
- "*String added in column 1 indicating an unmarked buffer."
+ "String added in column 1 indicating an unmarked buffer."
:group 'bs-appearance
:type 'string)
@@ -390,7 +385,7 @@ A value of `always' means to show buffer regardless of the configuration.")
("by mode" bs--sort-by-mode "Mode" region)
("by filename" bs--sort-by-filename "File" region)
("by nothing" nil nil nil))
- "*List of all possible sorting aspects for Buffer Selection Menu.
+ "List of all possible sorting aspects for Buffer Selection Menu.
You can add a new entry with a call to `bs-define-sort-function'.
Each element is a list of four elements (NAME FUNCTION REGEXP-FOR-SORTING FACE).
NAME specifies the sort order defined by function FUNCTION.
@@ -425,7 +420,7 @@ The new sort aspect will be inserted into list `bs-sort-functions'."
This is an element of `bs-sort-functions'.")
(defcustom bs-default-sort-name "by nothing"
- "*Name of default sort behavior.
+ "Name of default sort behavior.
Must be \"by nothing\" or a string used in `bs-sort-functions' for
naming a sort behavior. Default is \"by nothing\" which means no sorting."
:group 'bs
@@ -528,45 +523,43 @@ a special function. SORT-DESCRIPTION is an element of `bs-sort-functions'."
(setq sort-description (or sort-description bs--current-sort-function)
list (or list (buffer-list)))
(let ((result nil))
- (while list
- (let* ((buffername (buffer-name (car list)))
- (int-show-never (string-match bs--intern-show-never buffername))
+ (dolist (buf list)
+ (let* ((buffername (buffer-name buf))
+ (int-show-never (string-match-p bs--intern-show-never buffername))
(ext-show-never (and bs-dont-show-regexp
- (string-match bs-dont-show-regexp
- buffername)))
+ (string-match-p bs-dont-show-regexp
+ buffername)))
(extern-must-show (or (and bs-must-always-show-regexp
- (string-match
+ (string-match-p
bs-must-always-show-regexp
buffername))
(and bs-must-show-regexp
- (string-match bs-must-show-regexp
- buffername))))
+ (string-match-p bs-must-show-regexp
+ buffername))))
(extern-show-never-from-fun (and bs-dont-show-function
(funcall bs-dont-show-function
- (car list))))
+ buf)))
(extern-must-show-from-fun (and bs-must-show-function
(funcall bs-must-show-function
- (car list))))
- (show-flag (buffer-local-value 'bs-buffer-show-mark (car list))))
- (if (or (eq show-flag 'always)
- (and (or bs--show-all (not (eq show-flag 'never)))
- (not int-show-never)
- (or bs--show-all
- extern-must-show
- extern-must-show-from-fun
- (and (not ext-show-never)
- (not extern-show-never-from-fun)))))
- (setq result (cons (car list)
- result)))
- (setq list (cdr list))))
+ buf)))
+ (show-flag (buffer-local-value 'bs-buffer-show-mark buf)))
+ (when (or (eq show-flag 'always)
+ (and (or bs--show-all (not (eq show-flag 'never)))
+ (not int-show-never)
+ (or bs--show-all
+ extern-must-show
+ extern-must-show-from-fun
+ (and (not ext-show-never)
+ (not extern-show-never-from-fun)))))
+ (setq result (cons buf result)))))
(setq result (reverse result))
;; The current buffer which was the start point of bs should be an element
;; of result list, so that we can leave with space and be back in the
;; buffer we started bs-show.
- (if (and bs--buffer-coming-from
- (buffer-live-p bs--buffer-coming-from)
- (not (memq bs--buffer-coming-from result)))
- (setq result (cons bs--buffer-coming-from result)))
+ (when (and bs--buffer-coming-from
+ (buffer-live-p bs--buffer-coming-from)
+ (not (memq bs--buffer-coming-from result)))
+ (setq result (cons bs--buffer-coming-from result)))
;; sorting
(if (and sort-description
(nth 1 sort-description))
@@ -586,8 +579,8 @@ If KEEP-LINE-P is non-nil the point will stay on current line.
SORT-DESCRIPTION is an element of `bs-sort-functions'."
(let ((line (1+ (count-lines 1 (point)))))
(bs-show-in-buffer (bs-buffer-list nil sort-description))
- (if keep-line-p
- (goto-line line))
+ (when keep-line-p
+ (goto-line line))
(beginning-of-line)))
(defun bs--goto-current-buffer ()
@@ -601,10 +594,10 @@ actually the line which begins with character in `bs-string-current' or
point)
(save-excursion
(goto-char (point-min))
- (if (search-forward-regexp regexp nil t)
- (setq point (- (point) 1))))
- (if point
- (goto-char point))))
+ (when (search-forward-regexp regexp nil t)
+ (setq point (1- (point)))))
+ (when point
+ (goto-char point))))
(defun bs--current-config-message ()
"Return a string describing the current `bs-mode' configuration."
@@ -630,7 +623,7 @@ Used from `window-size-change-functions'."
(put 'bs-mode 'mode-class 'special)
-(define-derived-mode bs-mode () "Buffer-Selection-Menu"
+(define-derived-mode bs-mode nil "Buffer-Selection-Menu"
"Major mode for editing a subset of Emacs' buffers.
\\<bs-mode-map>
Aside from two header lines each line describes one buffer.
@@ -721,8 +714,8 @@ Raise an error if not on a buffer line."
(beginning-of-line)
(let ((line (+ (- bs-header-lines-length)
(count-lines 1 (point)))))
- (if (< line 0)
- (error "You are on a header row"))
+ (when (< line 0)
+ (error "You are on a header row"))
(nth line bs-current-list)))
(defun bs--update-current-line ()
@@ -752,19 +745,18 @@ Leave Buffer Selection Menu."
(bury-buffer (current-buffer))
(bs--restore-window-config)
(switch-to-buffer buffer)
- (if bs--marked-buffers
- ;; Some marked buffers for selection
- (let* ((all (delq buffer bs--marked-buffers))
- (height (/ (1- (frame-height)) (1+ (length all)))))
- (delete-other-windows)
- (switch-to-buffer buffer)
- (while all
- (split-window nil height)
- (other-window 1)
- (switch-to-buffer (car all))
- (setq all (cdr all)))
- ;; goto window we have started bs.
- (other-window 1)))))
+ (when bs--marked-buffers
+ ;; Some marked buffers for selection
+ (let* ((all (delq buffer bs--marked-buffers))
+ (height (/ (1- (frame-height)) (1+ (length all)))))
+ (delete-other-windows)
+ (switch-to-buffer buffer)
+ (dolist (buf all)
+ (split-window nil height)
+ (other-window 1)
+ (switch-to-buffer buf))
+ ;; goto window we have started bs.
+ (other-window 1)))))
(defun bs-select-other-window ()
"Select current line's buffer by `switch-to-buffer-other-window'.
@@ -880,35 +872,32 @@ the status of buffer on current line."
(bs--set-window-height)
(bs--show-config-message what))
+(defun bs--mark-unmark (count fun)
+ "Call FUN on COUNT consecutive buffers of *buffer-selection*."
+ (let ((dir (if (> count 0) 1 -1)))
+ (dotimes (i (abs count))
+ (let ((buffer (bs--current-buffer)))
+ (when buffer (funcall fun buffer))
+ (bs--update-current-line)
+ (bs-down dir)))))
+
(defun bs-mark-current (count)
"Mark buffers.
COUNT is the number of buffers to mark.
Move cursor vertically down COUNT lines."
(interactive "p")
- (let ((dir (if (> count 0) 1 -1))
- (count (abs count)))
- (while (> count 0)
- (let ((buffer (bs--current-buffer)))
- (if buffer
- (setq bs--marked-buffers (cons buffer bs--marked-buffers)))
- (bs--update-current-line)
- (bs-down dir))
- (setq count (1- count)))))
+ (bs--mark-unmark count
+ (lambda (buf)
+ (add-to-list 'bs--marked-buffers buf))))
(defun bs-unmark-current (count)
"Unmark buffers.
COUNT is the number of buffers to unmark.
Move cursor vertically down COUNT lines."
(interactive "p")
- (let ((dir (if (> count 0) 1 -1))
- (count (abs count)))
- (while (> count 0)
- (let ((buffer (bs--current-buffer)))
- (if buffer
- (setq bs--marked-buffers (delq buffer bs--marked-buffers)))
- (bs--update-current-line)
- (bs-down dir))
- (setq count (1- count)))))
+ (bs--mark-unmark count
+ (lambda (buf)
+ (setq bs--marked-buffers (delq buf bs--marked-buffers)))))
(defun bs--show-config-message (what)
"Show message indicating the new showing status WHAT.
@@ -931,11 +920,10 @@ WHAT is a value of nil, `never', or `always'."
(delete-region (point) (save-excursion
(end-of-line)
(if (eobp) (point) (1+ (point)))))
- (if (eobp)
- (progn
- (backward-delete-char 1)
- (beginning-of-line)
- (recenter -1)))
+ (when (eobp)
+ (backward-delete-char 1)
+ (beginning-of-line)
+ (recenter -1))
(bs--set-window-height)))
(defun bs-delete-backward ()
@@ -964,14 +952,14 @@ Default is `bs--current-sort-function'."
bs--current-sort-function)))
(save-excursion
(goto-char (point-min))
- (if (and (nth 2 sort-description)
- (search-forward-regexp (nth 2 sort-description) nil t))
- (let ((inhibit-read-only t))
- (put-text-property (match-beginning 0)
- (match-end 0)
- 'face
- (or (nth 3 sort-description)
- 'region)))))))
+ (when (and (nth 2 sort-description)
+ (search-forward-regexp (nth 2 sort-description) nil t))
+ (let ((inhibit-read-only t))
+ (put-text-property (match-beginning 0)
+ (match-end 0)
+ 'face
+ (or (nth 3 sort-description)
+ 'region)))))))
(defun bs-toggle-show-all ()
"Toggle show all buffers / show buffers with current configuration."
@@ -1002,10 +990,8 @@ Uses function `vc-toggle-read-only'."
(defun bs--nth-wrapper (count fun &rest args)
"Call COUNT times function FUN with arguments ARGS."
- (setq count (or count 1))
- (while (> count 0)
- (apply fun args)
- (setq count (1- count))))
+ (dotimes (i (or count 1))
+ (apply fun args)))
(defun bs-up (arg)
"Move cursor vertically up ARG lines in Buffer Selection Menu."
@@ -1045,7 +1031,7 @@ A value of nil means BUFFER belongs to a file."
(defun bs-sort-buffer-interns-are-last (b1 b2)
"Function for sorting internal buffers at the end of all buffers."
- (string-match "^\\*" (buffer-name b2)))
+ (string-match-p "^\\*" (buffer-name b2)))
;; ----------------------------------------------------------------------
;; Configurations:
@@ -1127,8 +1113,8 @@ Will return the first if START-NAME is at end."
(length (length list))
pos)
(while (and assocs (not pos))
- (if (string= (car (car assocs)) start-name)
- (setq pos (- length (length assocs))))
+ (when (string= (car (car assocs)) start-name)
+ (setq pos (- length (length assocs))))
(setq assocs (cdr assocs)))
(setq pos (1+ pos))
(if (eq pos length)
@@ -1170,10 +1156,9 @@ and move point to current buffer."
(erase-buffer)
(setq bs--name-entry-length name-entry-length)
(bs--show-header)
- (while list
- (bs--insert-one-entry (car list))
- (insert "\n")
- (setq list (cdr list)))
+ (dolist (buffer list)
+ (bs--insert-one-entry buffer)
+ (insert "\n"))
(delete-backward-char 1)
(bs--set-window-height)
(bs--goto-current-buffer)
@@ -1367,27 +1352,21 @@ It goes over all columns described in `bs-attributes-list'
and evaluates corresponding string. Inserts string in current buffer;
normally *buffer-selection*."
(let ((string "")
- (columns bs-attributes-list)
(to-much 0)
(apply-args (append (list bs--buffer-coming-from bs-current-list))))
(save-excursion
- (while columns
- (set-buffer buffer)
- (let ((min (bs--get-value (nth 1 (car columns))))
- ;;(max (bs--get-value (nth 2 (car columns)))) refered no more
- (align (nth 3 (car columns)))
- (fun (nth 4 (car columns)))
- (val nil)
- new-string)
- (setq val (bs--get-value fun apply-args))
- (setq new-string (bs--format-aux val align (- min to-much)))
+ (set-buffer buffer)
+ (dolist (column bs-attributes-list)
+ (let* ((min (bs--get-value (nth 1 column)))
+ (new-string (bs--format-aux (bs--get-value (nth 4 column) ; fun
+ apply-args)
+ (nth 3 column) ; align
+ (- min to-much)))
+ (len (length new-string)))
(setq string (concat string new-string))
- (if (> (length new-string) min)
- (setq to-much (- (length new-string) min)))
- ) ; let
- (setq columns (cdr columns))))
- (insert string)
- string))
+ (when (> len min)
+ (setq to-much (- len min))))))
+ (insert string)))
(defun bs--format-aux (string align len)
"Pad STRING to length LEN with alignment ALIGN.
@@ -1401,28 +1380,26 @@ ALIGN is one of the symbols `left', `middle', or `right'."
(defun bs--show-header ()
"Insert header for Buffer Selection Menu in current buffer."
- (dolist (string (bs--create-header))
- (insert string "\n")))
+ (insert (bs--create-header-line #'identity)
+ "\n"
+ (bs--create-header-line (lambda (title)
+ (make-string (length title) ?-)))
+ "\n"))
(defun bs--get-name-length ()
"Return value of `bs--name-entry-length'."
bs--name-entry-length)
-(defun bs--create-header ()
- "Return all header lines used in Buffer Selection Menu as a list of strings."
- (list (mapconcat (lambda (column)
- (bs--format-aux (bs--get-value (car column))
- (nth 3 column) ; align
- (bs--get-value (nth 1 column))))
- bs-attributes-list
- "")
- (mapconcat (lambda (column)
- (let ((length (length (bs--get-value (car column)))))
- (bs--format-aux (make-string length ?-)
- (nth 3 column) ; align
- (bs--get-value (nth 1 column)))))
- bs-attributes-list
- "")))
+(defun bs--create-header-line (col)
+ "Generate a line for the header.
+COL is called for each column in `bs-attributes-list' as a
+function of one argument, the string heading for the column."
+ (mapconcat (lambda (column)
+ (bs--format-aux (funcall col (bs--get-value (car column)))
+ (nth 3 column) ; align
+ (bs--get-value (nth 1 column))))
+ bs-attributes-list
+ ""))
(defun bs--show-with-configuration (name &optional arg)
"Display buffer list of configuration with name NAME.
@@ -1443,9 +1420,9 @@ for buffer selection."
(setq bs--buffer-coming-from (current-buffer)))
(let ((liste (bs-buffer-list))
(active-window (get-window-with-predicate
- (lambda (w)
- (string= (buffer-name (window-buffer w))
- "*buffer-selection*"))
+ (lambda (w)
+ (string= (buffer-name (window-buffer w))
+ "*buffer-selection*"))
nil (selected-frame))))
(if active-window
(select-window active-window)
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 51db6bc50d9..f7bffb03f36 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -104,65 +104,62 @@ as it is by default."
(defvar Buffer-menu-sort-column nil
"Which column to sort the menu on.
Use 2 to sort by buffer names, or 5 to sort by file names.
-nil means sort by visited order (the default).")
+A nil value means sort by visited order (the default).")
(defconst Buffer-menu-buffer-column 4)
-(defvar Buffer-menu-mode-map nil
- "Local keymap for `Buffer-menu-mode' buffers.")
-
(defvar Buffer-menu-files-only nil
"Non-nil if the current buffer-menu lists only file buffers.
This variable determines whether reverting the buffer lists only
file buffers. It affects both manual reverting and reverting by
Auto Revert Mode.")
+(make-variable-buffer-local 'Buffer-menu-files-only)
+
(defvar Info-current-file) ;; from info.el
(defvar Info-current-node) ;; from info.el
-(make-variable-buffer-local 'Buffer-menu-files-only)
-
-(if Buffer-menu-mode-map
- ()
- (setq Buffer-menu-mode-map (make-keymap))
- (suppress-keymap Buffer-menu-mode-map t)
- (define-key Buffer-menu-mode-map "q" 'quit-window)
- (define-key Buffer-menu-mode-map "v" 'Buffer-menu-select)
- (define-key Buffer-menu-mode-map "2" 'Buffer-menu-2-window)
- (define-key Buffer-menu-mode-map "1" 'Buffer-menu-1-window)
- (define-key Buffer-menu-mode-map "f" 'Buffer-menu-this-window)
- (define-key Buffer-menu-mode-map "e" 'Buffer-menu-this-window)
- (define-key Buffer-menu-mode-map "\C-m" 'Buffer-menu-this-window)
- (define-key Buffer-menu-mode-map "o" 'Buffer-menu-other-window)
- (define-key Buffer-menu-mode-map "\C-o" 'Buffer-menu-switch-other-window)
- (define-key Buffer-menu-mode-map "s" 'Buffer-menu-save)
- (define-key Buffer-menu-mode-map "d" 'Buffer-menu-delete)
- (define-key Buffer-menu-mode-map "k" 'Buffer-menu-delete)
- (define-key Buffer-menu-mode-map "\C-d" 'Buffer-menu-delete-backwards)
- (define-key Buffer-menu-mode-map "\C-k" 'Buffer-menu-delete)
- (define-key Buffer-menu-mode-map "x" 'Buffer-menu-execute)
- (define-key Buffer-menu-mode-map " " 'next-line)
- (define-key Buffer-menu-mode-map "n" 'next-line)
- (define-key Buffer-menu-mode-map "p" 'previous-line)
- (define-key Buffer-menu-mode-map "\177" 'Buffer-menu-backup-unmark)
- (define-key Buffer-menu-mode-map "~" 'Buffer-menu-not-modified)
- (define-key Buffer-menu-mode-map "?" 'describe-mode)
- (define-key Buffer-menu-mode-map "u" 'Buffer-menu-unmark)
- (define-key Buffer-menu-mode-map "m" 'Buffer-menu-mark)
- (define-key Buffer-menu-mode-map "t" 'Buffer-menu-visit-tags-table)
- (define-key Buffer-menu-mode-map "%" 'Buffer-menu-toggle-read-only)
- (define-key Buffer-menu-mode-map "b" 'Buffer-menu-bury)
- (define-key Buffer-menu-mode-map "g" 'Buffer-menu-revert)
- (define-key Buffer-menu-mode-map "V" 'Buffer-menu-view)
- (define-key Buffer-menu-mode-map "T" 'Buffer-menu-toggle-files-only)
- (define-key Buffer-menu-mode-map [mouse-2] 'Buffer-menu-mouse-select)
- (define-key Buffer-menu-mode-map [follow-link] 'mouse-face)
-)
+(defvar Buffer-menu-mode-map
+ (let ((map (make-keymap)))
+ (suppress-keymap map t)
+ (define-key map "q" 'quit-window)
+ (define-key map "v" 'Buffer-menu-select)
+ (define-key map "2" 'Buffer-menu-2-window)
+ (define-key map "1" 'Buffer-menu-1-window)
+ (define-key map "f" 'Buffer-menu-this-window)
+ (define-key map "e" 'Buffer-menu-this-window)
+ (define-key map "\C-m" 'Buffer-menu-this-window)
+ (define-key map "o" 'Buffer-menu-other-window)
+ (define-key map "\C-o" 'Buffer-menu-switch-other-window)
+ (define-key map "s" 'Buffer-menu-save)
+ (define-key map "d" 'Buffer-menu-delete)
+ (define-key map "k" 'Buffer-menu-delete)
+ (define-key map "\C-d" 'Buffer-menu-delete-backwards)
+ (define-key map "\C-k" 'Buffer-menu-delete)
+ (define-key map "x" 'Buffer-menu-execute)
+ (define-key map " " 'next-line)
+ (define-key map "n" 'next-line)
+ (define-key map "p" 'previous-line)
+ (define-key map "\177" 'Buffer-menu-backup-unmark)
+ (define-key map "~" 'Buffer-menu-not-modified)
+ (define-key map "?" 'describe-mode)
+ (define-key map "u" 'Buffer-menu-unmark)
+ (define-key map "m" 'Buffer-menu-mark)
+ (define-key map "t" 'Buffer-menu-visit-tags-table)
+ (define-key map "%" 'Buffer-menu-toggle-read-only)
+ (define-key map "b" 'Buffer-menu-bury)
+ (define-key map "g" 'Buffer-menu-revert)
+ (define-key map "V" 'Buffer-menu-view)
+ (define-key map "T" 'Buffer-menu-toggle-files-only)
+ (define-key map [mouse-2] 'Buffer-menu-mouse-select)
+ (define-key map [follow-link] 'mouse-face)
+ map)
+ "Local keymap for `Buffer-menu-mode' buffers.")
;; Buffer Menu mode is suitable only for specially formatted data.
(put 'Buffer-menu-mode 'mode-class 'special)
-(defun Buffer-menu-mode ()
+(define-derived-mode Buffer-menu-mode nil "Buffer Menu"
"Major mode for editing a list of buffers.
Each line describes one of the buffers in Emacs.
Letters do not insert themselves; instead, they are commands.
@@ -194,17 +191,12 @@ Letters do not insert themselves; instead, they are commands.
\\[Buffer-menu-revert] -- update the list of buffers.
\\[Buffer-menu-toggle-files-only] -- toggle whether the menu displays only file buffers.
\\[Buffer-menu-bury] -- bury the buffer listed on this line."
- (kill-all-local-variables)
- (use-local-map Buffer-menu-mode-map)
- (setq major-mode 'Buffer-menu-mode)
- (setq mode-name "Buffer Menu")
(set (make-local-variable 'revert-buffer-function)
'Buffer-menu-revert-function)
(set (make-local-variable 'buffer-stale-function)
#'(lambda (&optional noconfirm) 'fast))
(setq truncate-lines t)
- (setq buffer-read-only t)
- (run-mode-hooks 'buffer-menu-mode-hook))
+ (setq buffer-read-only t))
;; This function exists so we can make the doc string of Buffer-menu-mode
;; look nice.
diff --git a/lisp/button.el b/lisp/button.el
index 3afe9302042..85180a92356 100644
--- a/lisp/button.el
+++ b/lisp/button.el
@@ -470,5 +470,5 @@ Returns the button found."
(provide 'button)
-;;; arch-tag: 5f2c7627-413b-4097-b282-630f89d9c5e9
+;; arch-tag: 5f2c7627-413b-4097-b282-630f89d9c5e9
;;; button.el ends here
diff --git a/lisp/calc/README b/lisp/calc/README
index bed46422972..fbbd73b8fee 100644
--- a/lisp/calc/README
+++ b/lisp/calc/README
@@ -72,6 +72,15 @@ opinions.
Summary of changes to "Calc"
------- -- ------- -- ----
+* Added a menu.
+
+* Added logistic non-linear curves to curve-fitting.
+
+* Added option of plotting data points and curve when curve-fitting.
+
+* Made unit conversions exact when possible.
+
+* Lower the precedence of negation.
Version 2.1:
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index 5b32bdbbc81..18b0e194777 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -74,6 +74,9 @@
", "
(let ((calc-number-radix 8))
(math-format-value (car alg-exp) 1000))
+ ", "
+ (let ((calc-number-radix 2))
+ (math-format-value (car alg-exp) 1000))
(if (and (integerp (car alg-exp))
(> (car alg-exp) 0)
(< (car alg-exp) 127))
@@ -100,7 +103,7 @@
(cond
((and (consp str) (not (symbolp (car str))))
(let ((calc-language nil)
- (math-expr-opers math-standard-opers)
+ (math-expr-opers (math-standard-ops))
(calc-internal-prec 12)
(calc-word-size 32)
(calc-symbolic-mode nil)
@@ -254,7 +257,7 @@ The value t means abort and give an error message.")
(interactive "P")
(calc-wrapper
(let ((calc-language (if prefix nil calc-language))
- (math-expr-opers (if prefix math-standard-opers math-expr-opers)))
+ (math-expr-opers (if prefix (math-standard-ops) (math-expr-ops))))
(calc-alg-entry (and auto (char-to-string last-command-char))))))
(defvar calc-alg-entry-history nil
@@ -600,6 +603,7 @@ in Calc algebraic input.")
(defvar calc-user-parse-table nil)
(defvar calc-last-main-parse-table nil)
+(defvar calc-last-user-lang-parse-table nil)
(defvar calc-last-lang-parse-table nil)
(defvar calc-user-tokens nil)
(defvar calc-user-token-chars nil)
@@ -609,10 +613,12 @@ in Calc algebraic input.")
(defun math-build-parse-table ()
(let ((mtab (cdr (assq nil calc-user-parse-tables)))
- (ltab (cdr (assq calc-language calc-user-parse-tables))))
+ (ltab (cdr (assq calc-language calc-user-parse-tables)))
+ (lltab (get calc-language 'math-parse-table)))
(or (and (eq mtab calc-last-main-parse-table)
- (eq ltab calc-last-lang-parse-table))
- (let ((p (append mtab ltab))
+ (eq ltab calc-last-user-lang-parse-table)
+ (eq lltab calc-last-lang-parse-table))
+ (let ((p (append mtab ltab lltab))
(math-toks nil))
(setq calc-user-parse-table p)
(setq calc-user-token-chars nil)
@@ -626,7 +632,8 @@ in Calc algebraic input.")
(length y)))))
"\\|")
calc-last-main-parse-table mtab
- calc-last-lang-parse-table ltab)))))
+ calc-last-user-lang-parse-table ltab
+ calc-last-lang-parse-table lltab)))))
(defun math-find-user-tokens (p)
(while p
@@ -876,7 +883,10 @@ in Calc algebraic input.")
calcFunc-eq calcFunc-neq))
(defun math-read-expr-level (exp-prec &optional exp-term)
- (let* ((x (math-read-factor)) (first t) op op2)
+ (let* ((math-expr-opers (math-expr-ops))
+ (x (math-read-factor))
+ (first t)
+ op op2)
(while (and (or (and calc-user-parse-table
(setq op (calc-check-user-syntax x exp-prec))
(setq x op
@@ -1121,7 +1131,8 @@ in Calc algebraic input.")
(assoc math-expr-data '(("(") ("[") ("{"))))))
(defun math-read-factor ()
- (let (op)
+ (let ((math-expr-opers (math-expr-ops))
+ op)
(cond ((eq math-exp-token 'number)
(let ((num (math-read-number math-expr-data)))
(if (not num)
diff --git a/lisp/calc/calc-bin.el b/lisp/calc/calc-bin.el
index 49d54999b15..0f219272a5f 100644
--- a/lisp/calc/calc-bin.el
+++ b/lisp/calc/calc-bin.el
@@ -32,6 +32,17 @@
(require 'calc-ext)
(require 'calc-macs)
+;;; Some useful numbers
+(defconst math-bignum-logb-digit-size
+ (logb math-bignum-digit-size)
+ "The logb of the size of a bignum digit.
+This is the largest value of B such that 2^B is less than
+the size of a Calc bignum digit.")
+
+(defconst math-bignum-digit-power-of-two
+ (expt 2 (logb math-bignum-digit-size))
+ "The largest power of 2 less than the size of a Calc bignum digit.")
+
;;; b-prefix binary commands.
(defun calc-and (n)
@@ -297,11 +308,11 @@
(defun math-and-bignum (a b) ; [l l l]
(and a b
- (let ((qa (math-div-bignum-digit a 512))
- (qb (math-div-bignum-digit b 512)))
+ (let ((qa (math-div-bignum-digit a math-bignum-digit-power-of-two))
+ (qb (math-div-bignum-digit b math-bignum-digit-power-of-two)))
(math-mul-bignum-digit (math-and-bignum (math-norm-bignum (car qa))
(math-norm-bignum (car qb)))
- 512
+ math-bignum-digit-power-of-two
(logand (cdr qa) (cdr qb))))))
(defun calcFunc-or (a b &optional w) ; [I I I] [Public]
@@ -324,11 +335,11 @@
(defun math-or-bignum (a b) ; [l l l]
(and (or a b)
- (let ((qa (math-div-bignum-digit a 512))
- (qb (math-div-bignum-digit b 512)))
+ (let ((qa (math-div-bignum-digit a math-bignum-digit-power-of-two))
+ (qb (math-div-bignum-digit b math-bignum-digit-power-of-two)))
(math-mul-bignum-digit (math-or-bignum (math-norm-bignum (car qa))
(math-norm-bignum (car qb)))
- 512
+ math-bignum-digit-power-of-two
(logior (cdr qa) (cdr qb))))))
(defun calcFunc-xor (a b &optional w) ; [I I I] [Public]
@@ -351,11 +362,11 @@
(defun math-xor-bignum (a b) ; [l l l]
(and (or a b)
- (let ((qa (math-div-bignum-digit a 512))
- (qb (math-div-bignum-digit b 512)))
+ (let ((qa (math-div-bignum-digit a math-bignum-digit-power-of-two))
+ (qb (math-div-bignum-digit b math-bignum-digit-power-of-two)))
(math-mul-bignum-digit (math-xor-bignum (math-norm-bignum (car qa))
(math-norm-bignum (car qb)))
- 512
+ math-bignum-digit-power-of-two
(logxor (cdr qa) (cdr qb))))))
(defun calcFunc-diff (a b &optional w) ; [I I I] [Public]
@@ -378,11 +389,11 @@
(defun math-diff-bignum (a b) ; [l l l]
(and a
- (let ((qa (math-div-bignum-digit a 512))
- (qb (math-div-bignum-digit b 512)))
+ (let ((qa (math-div-bignum-digit a math-bignum-digit-power-of-two))
+ (qb (math-div-bignum-digit b math-bignum-digit-power-of-two)))
(math-mul-bignum-digit (math-diff-bignum (math-norm-bignum (car qa))
(math-norm-bignum (car qb)))
- 512
+ math-bignum-digit-power-of-two
(logand (cdr qa) (lognot (cdr qb)))))))
(defun calcFunc-not (a &optional w) ; [I I] [Public]
@@ -402,14 +413,15 @@
w))))))
(defun math-not-bignum (a w) ; [l l]
- (let ((q (math-div-bignum-digit a 512)))
- (if (<= w 9)
+ (let ((q (math-div-bignum-digit a math-bignum-digit-power-of-two)))
+ (if (<= w math-bignum-logb-digit-size)
(list (logand (lognot (cdr q))
(1- (lsh 1 w))))
(math-mul-bignum-digit (math-not-bignum (math-norm-bignum (car q))
- (- w 9))
- 512
- (logxor (cdr q) 511)))))
+ (- w math-bignum-logb-digit-size))
+ math-bignum-digit-power-of-two
+ (logxor (cdr q)
+ (1- math-bignum-digit-power-of-two))))))
(defun calcFunc-lsh (a &optional n w) ; [I I] [Public]
(setq a (math-trunc a)
@@ -510,8 +522,8 @@
(math-sub a (math-power-of-2 (- w)))))
((Math-negp a)
(math-normalize (cons 'bigpos (math-binary-arg a w))))
- ((and (integerp a) (< a 1000000))
- (if (>= w 20)
+ ((and (integerp a) (< a math-small-integer-size))
+ (if (> w (logb math-small-integer-size))
a
(logand a (1- (lsh 1 w)))))
(t
@@ -523,13 +535,13 @@
(defalias 'calcFunc-clip 'math-clip)
(defun math-clip-bignum (a w) ; [l l]
- (let ((q (math-div-bignum-digit a 512)))
- (if (<= w 9)
+ (let ((q (math-div-bignum-digit a math-bignum-digit-power-of-two)))
+ (if (<= w math-bignum-logb-digit-size)
(list (logand (cdr q)
(1- (lsh 1 w))))
(math-mul-bignum-digit (math-clip-bignum (math-norm-bignum (car q))
- (- w 9))
- 512
+ (- w math-bignum-logb-digit-size))
+ math-bignum-digit-power-of-two
(cdr q)))))
(defvar math-max-digits-cache nil)
diff --git a/lisp/calc/calc-comb.el b/lisp/calc/calc-comb.el
index cbc81ce8b6c..b6182cd710e 100644
--- a/lisp/calc/calc-comb.el
+++ b/lisp/calc/calc-comb.el
@@ -294,6 +294,18 @@
;;; Factorial and related functions.
+(defconst math-small-factorial-table
+ (vector 1 1 2 6 24 120 720 5040 40320 362880 3628800 39916800
+ (math-read-number-simple "479001600")
+ (math-read-number-simple "6227020800")
+ (math-read-number-simple "87178291200")
+ (math-read-number-simple "1307674368000")
+ (math-read-number-simple "20922789888000")
+ (math-read-number-simple "355687428096000")
+ (math-read-number-simple "6402373705728000")
+ (math-read-number-simple "121645100408832000")
+ (math-read-number-simple "2432902008176640000")))
+
(defun calcFunc-fact (n) ; [I I] [F F] [Public]
(let (temp)
(cond ((Math-integer-negp n)
@@ -302,14 +314,7 @@
(math-reject-arg n 'range)))
((integerp n)
(if (<= n 20)
- (aref '[1 1 2 6 24 120 720 5040 40320 362880
- (bigpos 800 628 3) (bigpos 800 916 39)
- (bigpos 600 1 479) (bigpos 800 20 227 6)
- (bigpos 200 291 178 87) (bigpos 0 368 674 307 1)
- (bigpos 0 888 789 922 20) (bigpos 0 96 428 687 355)
- (bigpos 0 728 705 373 402 6)
- (bigpos 0 832 408 100 645 121)
- (bigpos 0 640 176 8 902 432 2)] n)
+ (aref math-small-factorial-table n)
(math-factorial-iter (1- n) 2 1)))
((and (math-messy-integerp n)
(Math-lessp n 100))
@@ -551,9 +556,9 @@
nil
(if (Math-integerp var-RandSeed)
(let* ((seed (math-sub 161803 var-RandSeed))
- (mj (1+ (math-mod seed '(bigpos 0 0 1))))
- (mk (1+ (math-mod (math-quotient seed '(bigpos 0 0 1))
- '(bigpos 0 0 1))))
+ (mj (1+ (math-mod seed 1000000)))
+ (mk (1+ (math-mod (math-quotient seed 1000000)
+ 1000000)))
(i 0))
(setq math-random-table (cons 'vec (make-list 55 mj)))
(while (<= (setq i (1+ i)) 54)
@@ -601,7 +606,8 @@
;;; Avoid various pitfalls that may lurk in the built-in (random) function!
;;; Shuffling algorithm from Numerical Recipes, section 7.1.
(defvar math-random-last)
-(defun math-random-digit ()
+(defun math-random-three-digit-number ()
+ "Return a random three digit number."
(let (i)
(or (and (boundp 'var-RandSeed) (eq var-RandSeed math-last-RandSeed))
(math-init-random-base))
@@ -621,17 +627,17 @@
;;; Produce an N-digit random integer.
(defun math-random-digits (n)
- (cond ((<= n 6)
- (math-scale-right (+ (* (math-random-digit) 1000) (math-random-digit))
- (- 6 n)))
- (t (let* ((slop (% (- 900003 n) 3))
- (i (/ (+ n slop) 3))
- (digs nil))
- (while (> i 0)
- (setq digs (cons (math-random-digit) digs)
- i (1- i)))
- (math-normalize (math-scale-right (cons 'bigpos digs)
- slop))))))
+ "Produce a random N digit integer."
+ (let* ((slop (% (- 3 (% n 3)) 3))
+ (i (/ (+ n slop) 3))
+ (rnum 0))
+ (while (> i 0)
+ (setq rnum
+ (math-add
+ (math-random-three-digit-number)
+ (math-mul rnum 1000)))
+ (setq i (1- i)))
+ (math-normalize (math-scale-right rnum slop))))
;;; Produce a uniformly-distributed random float 0 <= N < 1.
(defun math-random-float ()
@@ -802,7 +808,7 @@
(error "Argument must be an integer"))
((Math-integer-negp n)
'(nil))
- ((Math-natnum-lessp n '(bigpos 0 0 8))
+ ((Math-natnum-lessp n 8000000)
(setq n (math-fixnum n))
(let ((i -1) v)
(while (and (> (% n (setq v (aref math-primes-table
@@ -815,15 +821,17 @@
((not (equal n (car math-prime-test-cache)))
(cond ((= (% (nth 1 n) 2) 0) '(nil 2))
((= (% (nth 1 n) 5) 0) '(nil 5))
- (t (let ((dig (cdr n)) (sum 0))
- (while dig
- (if (cdr dig)
- (setq sum (% (+ (+ sum (car dig))
- (* (nth 1 dig) 1000))
- 111111)
- dig (cdr (cdr dig)))
- (setq sum (% (+ sum (car dig)) 111111)
- dig nil)))
+ (t (let ((q n) (sum 0))
+ (while (not (eq q 0))
+ (setq sum (%
+ (+
+ sum
+ (calcFunc-mod
+ q 1000000))
+ 111111))
+ (setq q
+ (math-quotient
+ q 1000000)))
(cond ((= (% sum 3) 0) '(nil 3))
((= (% sum 7) 0) '(nil 7))
((= (% sum 11) 0) '(nil 11))
diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el
index 4c1e8522dce..ff2dc3e5d29 100644
--- a/lisp/calc/calc-embed.el
+++ b/lisp/calc/calc-embed.el
@@ -403,7 +403,7 @@
(let ((val (save-excursion
(set-buffer (aref info 1))
(let ((calc-language nil)
- (math-expr-opers math-standard-opers))
+ (math-expr-opers (math-standard-ops)))
(math-read-expr str)))))
(if (eq (car-safe val) 'error)
(progn
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index f4888f6a890..bb054de4951 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -618,15 +618,15 @@
(calc-init-prefixes)
- (mapcar (function
- (lambda (x)
- (define-key calc-mode-map (format "c%c" x) 'calc-clean-num)
- (define-key calc-mode-map (format "j%c" x) 'calc-select-part)
- (define-key calc-mode-map (format "r%c" x) 'calc-recall-quick)
- (define-key calc-mode-map (format "s%c" x) 'calc-store-quick)
- (define-key calc-mode-map (format "t%c" x) 'calc-store-into-quick)
- (define-key calc-mode-map (format "u%c" x) 'calc-quick-units)))
- "0123456789")
+ (mapc (function
+ (lambda (x)
+ (define-key calc-mode-map (format "c%c" x) 'calc-clean-num)
+ (define-key calc-mode-map (format "j%c" x) 'calc-select-part)
+ (define-key calc-mode-map (format "r%c" x) 'calc-recall-quick)
+ (define-key calc-mode-map (format "s%c" x) 'calc-store-quick)
+ (define-key calc-mode-map (format "t%c" x) 'calc-store-into-quick)
+ (define-key calc-mode-map (format "u%c" x) 'calc-quick-units)))
+ "0123456789")
(let ((i ?A))
(while (<= i ?z)
@@ -635,7 +635,7 @@
(cons 'keymap (cons (cons ?\e (aref (nth 1 calc-mode-map) i))
(cdr (aref (nth 1 calc-mode-map) i))))))
(setq i (1+ i))))
-
+
(setq calc-alg-map (copy-keymap calc-mode-map)
calc-alg-esc-map (copy-keymap esc-map))
(let ((i 32))
@@ -651,7 +651,7 @@
(define-key calc-alg-map "\e\177" 'calc-pop-above)
;;;; (Autoloads here)
- (mapcar (function (lambda (x)
+ (mapc (function (lambda (x)
(mapcar (function (lambda (func)
(autoload func (car x)))) (cdr x))))
'(
@@ -1021,7 +1021,7 @@ calc-arctan calc-arctan2 calc-arctanh calc-conj calc-cos calc-cosh
calc-cot calc-coth calc-csc calc-csch
calc-degrees-mode calc-exp calc-expm1 calc-hypot calc-ilog
calc-imaginary calc-isqrt calc-ln calc-lnp1 calc-log calc-log10
-calc-pi calc-radians-mode calc-sec calc-sech
+calc-pi calc-radians-mode calc-sec calc-sech
calc-sin calc-sincos calc-sinh calc-sqrt
calc-tan calc-tanh calc-to-degrees calc-to-radians)
@@ -1277,7 +1277,7 @@ calc-kill calc-kill-region calc-yank))))
calc-redo-list nil)
(let (calc-stack calc-user-parse-tables calc-standard-date-formats
calc-invocation-macro)
- (mapcar (function (lambda (v) (set v nil))) calc-local-var-list)
+ (mapc (function (lambda (v) (set v nil))) calc-local-var-list)
(if (and arg (<= arg 0))
(calc-mode-var-list-restore-default-values)
(calc-mode-var-list-restore-saved-values)))
@@ -1357,7 +1357,7 @@ calc-kill calc-kill-region calc-yank))))
(with-current-buffer calc-main-buffer
calc-hyperbolic-flag)
calc-hyperbolic-flag))
- (msg (if hyp-flag
+ (msg (if hyp-flag
"Inverse Hyperbolic..."
"Inverse...")))
(calc-fancy-prefix 'calc-inverse-flag msg n)))
@@ -1438,7 +1438,7 @@ calc-kill calc-kill-region calc-yank))))
(with-current-buffer calc-main-buffer
calc-inverse-flag)
calc-inverse-flag))
- (msg (if inv-flag
+ (msg (if inv-flag
"Inverse Hyperbolic..."
"Hyperbolic...")))
(calc-fancy-prefix 'calc-hyperbolic-flag msg n)))
@@ -1782,8 +1782,8 @@ calc-kill calc-kill-region calc-yank))))
;;; User menu.
(defun calc-user-key-map ()
- (if calc-emacs-type-lucid
- (error "User-defined keys are not supported in Lucid Emacs"))
+ (if (featurep 'xemacs)
+ (error "User-defined keys are not supported in XEmacs"))
(let ((res (cdr (lookup-key calc-mode-map "z"))))
(if (eq (car (car res)) 27)
(cdr res)
@@ -1849,7 +1849,7 @@ calc-kill calc-kill-region calc-yank))))
(setq calc-z-prefix-buf (concat (if (= flags 1) "SHIFT + " "")
desc))
(if (> (+ (length calc-z-prefix-buf) (length desc)) 58)
- (setq calc-z-prefix-msgs
+ (setq calc-z-prefix-msgs
(cons calc-z-prefix-buf calc-z-prefix-msgs)
calc-z-prefix-buf (concat (if (= flags 1) "SHIFT + " "")
desc))
@@ -1878,8 +1878,19 @@ calc-kill calc-kill-region calc-yank))))
(last-prec (intern (concat (symbol-name name) "-last-prec")))
(last-val (intern (concat (symbol-name name) "-last"))))
(list 'progn
- (list 'defvar cache-prec (if init (math-numdigs (nth 1 init)) -100))
- (list 'defvar cache-val (list 'quote init))
+; (list 'defvar cache-prec (if init (math-numdigs (nth 1 init)) -100))
+ (list 'defvar cache-prec
+ `(cond
+ ((consp ,init) (math-numdigs (nth 1 ,init)))
+ (,init
+ (nth 1 (math-numdigs (eval ,init))))
+ (t
+ -100)))
+ (list 'defvar cache-val
+ `(cond
+ ((consp ,init) ,init)
+ (,init (eval ,init))
+ (t ,init)))
(list 'defvar last-prec -100)
(list 'defvar last-val nil)
(list 'setq 'math-cache-list
@@ -1914,7 +1925,11 @@ calc-kill calc-kill-region calc-yank))))
(put 'math-defcache 'lisp-indent-hook 2)
;;; Betcha didn't know that pi = 16 atan(1/5) - 4 atan(1/239). [F] [Public]
-(math-defcache math-pi (float (bigpos 463 238 793 589 653 592 141 3) -21)
+(defconst math-approx-pi
+ (math-read-number-simple "3.141592653589793238463")
+ "An approximation for pi.")
+
+(math-defcache math-pi math-approx-pi
(math-add-float (math-mul-float '(float 16 0)
(math-arctan-raw '(float 2 -1)))
(math-mul-float '(float -4 0)
@@ -1945,7 +1960,11 @@ calc-kill calc-kill-region calc-yank))))
(math-defcache math-sqrt-two-pi nil
(math-sqrt-float (math-two-pi)))
-(math-defcache math-sqrt-e (float (bigpos 849 146 128 700 270 721 648 1) -21)
+(defconst math-approx-sqrt-e
+ (math-read-number-simple "1.648721270700128146849")
+ "An approximation for sqrt(3).")
+
+(math-defcache math-sqrt-e math-approx-sqrt-e
(math-add-float '(float 1 0) (math-exp-minus-1-raw '(float 5 -1))))
(math-defcache math-e nil
@@ -1955,10 +1974,13 @@ calc-kill calc-kill-region calc-yank))))
(math-mul-float (math-add-float (math-sqrt-raw '(float 5 0)) '(float 1 0))
'(float 5 -1)))
+(defconst math-approx-gamma-const
+ (math-read-number-simple
+ "0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495")
+ "An approximation for gamma.")
+
(math-defcache math-gamma-const nil
- '(float (bigpos 495 467 917 632 470 369 709 646 776 267 677 848 348 672
- 057 988 235 399 359 593 421 310 024 824 900 120 065 606
- 328 015 649 156 772 5) -100))
+ math-approx-gamma-const)
(defun math-half-circle (symb)
(if (eq calc-angle-mode 'rad)
@@ -2126,12 +2148,12 @@ calc-kill calc-kill-region calc-yank))))
(unless a
(setq a 1))
(and
- (not (memq nil (mapcar
+ (not (memq nil (mapcar
(lambda (x) (eq x 0))
(nthcdr (1+ n) row))))
- (not (memq nil (mapcar
+ (not (memq nil (mapcar
(lambda (x) (eq x 0))
- (butlast
+ (butlast
(cdr row)
(- (length row) n)))))
(eq (elt row n) a)))
@@ -2189,6 +2211,25 @@ calc-kill calc-kill-region calc-yank))))
a
(math-reject-arg a 'constp)))
+;;; Some functions for working with error forms.
+(defun math-get-value (x)
+ "Get the mean value of the error form X.
+If X is not an error form, return X."
+ (if (eq (car-safe x) 'sdev)
+ (nth 1 x)
+ x))
+
+(defun math-get-sdev (x &optional one)
+ "Get the standard deviation of the error form X.
+If X is not an error form, return 1."
+ (if (eq (car-safe x) 'sdev)
+ (nth 2 x)
+ (if one 1 0)))
+
+(defun math-contains-sdev-p (ls)
+ "Non-nil if the list LS contains an error form."
+ (let ((ls (if (eq (car-safe ls) 'vec) (cdr ls) ls)))
+ (memq t (mapcar (lambda (x) (eq (car-safe x) 'sdev)) ls))))
;;; Coerce integer A to be a small integer. [S I]
(defun math-fixnum (a)
@@ -2202,7 +2243,7 @@ calc-kill calc-kill-region calc-yank))))
(defun math-fixnum-big (a)
(if (cdr a)
- (+ (car a) (* (math-fixnum-big (cdr a)) 1000))
+ (+ (car a) (* (math-fixnum-big (cdr a)) math-bignum-digit-size))
(car a)))
(defvar math-simplify-only nil)
@@ -2290,15 +2331,15 @@ calc-kill calc-kill-region calc-yank))))
(and (symbolp (car math-normalize-a))
(or (eq calc-simplify-mode 'none)
(and (eq calc-simplify-mode 'num)
- (let ((aptr (setq math-normalize-a
+ (let ((aptr (setq math-normalize-a
(cons
(car math-normalize-a)
- (mapcar 'math-normalize
+ (mapcar 'math-normalize
(cdr math-normalize-a))))))
(while (and aptr (math-constp (car aptr)))
(setq aptr (cdr aptr)))
aptr)))
- (cons (car math-normalize-a)
+ (cons (car math-normalize-a)
(mapcar 'math-normalize (cdr math-normalize-a))))))
@@ -2679,8 +2720,8 @@ calc-kill calc-kill-region calc-yank))))
(setq mmt-nextval (funcall math-mt-func mmt-expr))
(not (equal mmt-expr mmt-nextval)))
(setq mmt-expr mmt-nextval
- math-mt-many (if (> math-mt-many 0)
- (1- math-mt-many)
+ math-mt-many (if (> math-mt-many 0)
+ (1- math-mt-many)
(1+ math-mt-many))))
(if (or (Math-primp mmt-expr)
(<= math-mt-many 0))
@@ -2960,7 +3001,7 @@ calc-kill calc-kill-region calc-yank))))
(defun math-read-plain-expr (exp-str &optional error-check)
(let* ((calc-language nil)
- (math-expr-opers math-standard-opers)
+ (math-expr-opers (math-standard-ops))
(val (math-read-expr exp-str)))
(and error-check
(eq (car-safe val) 'error)
@@ -3005,10 +3046,10 @@ calc-kill calc-kill-region calc-yank))))
math-read-big-baseline math-read-big-h2
new-pos p)
(while (setq new-pos (string-match "\n" str pos))
- (setq math-read-big-lines
+ (setq math-read-big-lines
(cons (substring str pos new-pos) math-read-big-lines)
pos (1+ new-pos)))
- (setq math-read-big-lines
+ (setq math-read-big-lines
(nreverse (cons (substring str pos) math-read-big-lines))
p math-read-big-lines)
(while p
@@ -3116,7 +3157,7 @@ calc-kill calc-kill-region calc-yank))))
(concat (substring (symbol-name (car a)) 9)
"(" (math-vector-to-string (nth 1 a) t) ")"))
(t
- (let ((op (math-assq2 (car a) math-standard-opers)))
+ (let ((op (math-assq2 (car a) (math-standard-ops))))
(cond ((and op (= (length a) 3))
(if (> prec (min (nth 2 op) (nth 3 op)))
(concat "(" (math-format-flat-expr a 0) ")")
diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el
index b8692e01bb4..3839fc93666 100644
--- a/lisp/calc/calc-forms.el
+++ b/lisp/calc/calc-forms.el
@@ -544,6 +544,14 @@
(setcdr math-fd-dt nil))
fmt))))
+(defconst math-julian-date-beginning '(float 17214235 -1)
+ "The beginning of the Julian calendar,
+as measured in the number of days before January 1 of the year 1AD.")
+
+(defconst math-julian-date-beginning-int 1721424
+ "The beginning of the Julian calendar,
+as measured in the integer number of days before January 1 of the year 1AD.")
+
(defun math-format-date-part (x)
(cond ((stringp x)
x)
@@ -558,9 +566,12 @@
((eq x 'n)
(math-format-number (math-floor math-fd-date)))
((eq x 'J)
- (math-format-number (math-add math-fd-date '(float (bigpos 235 214 17) -1))))
+ (math-format-number
+ (math-add math-fd-date math-julian-date-beginning)))
((eq x 'j)
- (math-format-number (math-add (math-floor math-fd-date) '(bigpos 424 721 1))))
+ (math-format-number (math-add
+ (math-floor math-fd-date)
+ math-julian-date-beginning-int)))
((eq x 'U)
(math-format-number (nth 1 (math-date-parts math-fd-date 719164))))
((progn
@@ -935,9 +946,8 @@
0
(if (or (eq this 'j)
(math-integerp num))
- '(bigpos 424 721 1)
- '(float (bigpos 235 214 17)
- -1))))
+ math-julian-date-beginning-int
+ math-julian-date-beginning)))
hour (or (nth 3 num) hour)
minute (or (nth 4 num) minute)
second (or (nth 5 num) second)
@@ -1146,14 +1156,14 @@
(defun calcFunc-julian (date &optional zone)
(if (math-realp date)
(list 'date (if (math-integerp date)
- (math-sub date '(bigpos 424 721 1))
- (setq date (math-sub date '(float (bigpos 235 214 17) -1)))
+ (math-sub date math-julian-date-beginning-int)
+ (setq date (math-sub date math-julian-date-beginning))
(math-sub date (math-div (calcFunc-tzone zone date)
'(float 864 2)))))
(if (eq (car date) 'date)
(math-add (nth 1 date) (if (math-integerp (nth 1 date))
- '(bigpos 424 721 1)
- (math-add '(float (bigpos 235 214 17) -1)
+ math-julian-date-beginning-int
+ (math-add math-julian-date-beginning
(math-div (calcFunc-tzone zone date)
'(float 864 2)))))
(math-reject-arg date 'datep))))
@@ -1191,7 +1201,29 @@
)
"No doc yet. See calc manual for now. ")
-(defvar var-TimeZone)
+(defvar var-TimeZone nil)
+
+;; From cal-dst
+(defvar calendar-current-time-zone-cache)
+
+(defvar math-calendar-tzinfo
+ nil
+ "Information about the timezone, retrieved from the calendar.")
+
+(defun math-get-calendar-tzinfo ()
+ "Get information about the timezone from the calendar.
+The result should be a list of two items about the current time zone:
+first, the number of seconds difference from GMT
+second, the number of seconds offset for daylight savings."
+ (if math-calendar-tzinfo
+ math-calendar-tzinfo
+ (require 'cal-dst)
+ (let ((tzinfo (progn
+ (calendar-current-time-zone)
+ calendar-current-time-zone-cache)))
+ (setq math-calendar-tzinfo
+ (list (* 60 (abs (nth 0 tzinfo)))
+ (* 60 (nth 1 tzinfo)))))))
(defun calcFunc-tzone (&optional zone date)
(if zone
@@ -1223,53 +1255,9 @@
(t (math-reject-arg zone "*Expected a time zone")))
(if (calc-var-value 'var-TimeZone)
(calcFunc-tzone (calc-var-value 'var-TimeZone) date)
- (let ((p math-tzone-names)
- (offset 0)
- (tz '(var error var-error)))
- (save-excursion
- (set-buffer (get-buffer-create " *Calc Temporary*"))
- (erase-buffer)
- (call-process "date" nil t)
- (goto-char 1)
- (let ((case-fold-search t))
- (while (and p (not (search-forward (car (car p)) nil t)))
- (setq p (cdr p))))
- (if (looking-at "\\([-+][0-9]?[0-9]\\)\\([0-9][0-9]\\)?\\(\\'\\|[^0-9]\\)")
- (setq offset (math-add
- (string-to-number (buffer-substring
- (match-beginning 1)
- (match-end 1)))
- (if (match-beginning 2)
- (math-div (string-to-number (buffer-substring
- (match-beginning 2)
- (match-end 2)))
- 60)
- 0)))))
- (if p
- (progn
- (setq p (car p))
- ;; Try to convert to a generalized time zone.
- (if (integerp (nth 2 p))
- (let ((gen math-tzone-names))
- (while (and gen
- (not (equal (nth 2 (car gen)) (car p)))
- (not (equal (nth 3 (car gen)) (car p)))
- (not (equal (nth 4 (car gen)) (car p)))
- (not (equal (nth 5 (car gen)) (car p))))
- (setq gen (cdr gen)))
- (and gen
- (setq gen (car gen))
- (equal (math-daylight-savings-adjust nil (car gen))
- (nth 2 p))
- (setq p gen))))
- (setq tz (math-add (list 'var
- (intern (car p))
- (intern (concat "var-" (car p))))
- offset))))
- (kill-buffer " *Calc Temporary*")
- (setq var-TimeZone tz)
- (calc-refresh-evaltos 'var-TimeZone)
- (calcFunc-tzone tz date)))))
+ (let ((tzinfo (math-get-calendar-tzinfo)))
+ (+ (nth 0 tzinfo)
+ (* (math-cal-daylight-savings-adjust date) (nth 1 tzinfo)))))))
(defvar math-daylight-savings-hook 'math-std-daylight-savings)
@@ -1290,21 +1278,60 @@
(and math-daylight-savings-hook
(funcall math-daylight-savings-hook date dt zone bump))))
+;;; Based on part of dst-adjust-time in cal-dst.el
+;;; For calcFunc-dst, when zone=nil
+(defun math-cal-daylight-savings-adjust (date)
+ "Return -1 if DATE is using daylight saving, 0 otherwise."
+ (require 'cal-dst)
+ (unless date (setq date (calcFunc-now)))
+ (let* ((dt (math-date-to-dt date))
+ (time (cond
+ ((nth 3 dt)
+ (nth 3 dt))
+ ((nth 4 dt)
+ (+ (nth 3 dt) (/ (nth 4 dt) 60.0)))
+ (t
+ 0)))
+ (rounded-abs-date
+ (+
+ (calendar-absolute-from-gregorian
+ (list (nth 1 dt) (nth 2 dt) (nth 0 dt)))
+ (/ (round (* 60 time)) 60.0 24.0))))
+ (if (dst-in-effect rounded-abs-date)
+ -1
+ 0)))
+
(defun calcFunc-dsadj (date &optional zone)
(if zone
(or (eq (car-safe zone) 'var)
(math-reject-arg zone "*Time zone variable expected"))
- (setq zone (or (calc-var-value 'var-TimeZone)
- (progn
- (calcFunc-tzone)
- (calc-var-value 'var-TimeZone)))))
- (setq zone (and (eq (car-safe zone) 'var)
- (upcase (symbol-name (nth 1 zone)))))
- (let ((zadj (assoc zone math-tzone-names)))
- (or zadj (math-reject-arg zone "*Unrecognized time zone name"))
- (if (integerp (nth 2 zadj))
- (nth 2 zadj)
- (math-daylight-savings-adjust date zone))))
+ (setq zone (calc-var-value 'var-TimeZone)))
+ (if zone
+ (progn
+ (setq zone (and (eq (car-safe zone) 'var)
+ (upcase (symbol-name (nth 1 zone)))))
+ (let ((zadj (assoc zone math-tzone-names)))
+ (or zadj (math-reject-arg zone "*Unrecognized time zone name"))
+ (if (integerp (nth 2 zadj))
+ (nth 2 zadj)
+ (math-daylight-savings-adjust date zone))))
+ (math-cal-daylight-savings-adjust date)))
+
+;; (defun calcFunc-dsadj (date &optional zone)
+;; (if zone
+;; (or (eq (car-safe zone) 'var)
+;; (math-reject-arg zone "*Time zone variable expected"))
+;; (setq zone (or (calc-var-value 'var-TimeZone)
+;; (progn
+;; (calcFunc-tzone)
+;; (calc-var-value 'var-TimeZone)))))
+;; (setq zone (and (eq (car-safe zone) 'var)
+;; (upcase (symbol-name (nth 1 zone)))))
+;; (let ((zadj (assoc zone math-tzone-names)))
+;; (or zadj (math-reject-arg zone "*Unrecognized time zone name"))
+;; (if (integerp (nth 2 zadj))
+;; (nth 2 zadj)
+;; (math-daylight-savings-adjust date zone))))
(defun calcFunc-tzconv (date z1 z2)
(if (math-realp date)
diff --git a/lisp/calc/calc-funcs.el b/lisp/calc/calc-funcs.el
index 9f7a6ee79e2..d73d676bdef 100644
--- a/lisp/calc/calc-funcs.el
+++ b/lisp/calc/calc-funcs.el
@@ -147,7 +147,8 @@
(or (math-numberp x) (math-reject-arg x 'numberp))
(calcFunc-fact (math-add x -1)))
-(defun math-gammap1-raw (x &optional fprec nfprec) ; compute gamma(1 + x)
+(defun math-gammap1-raw (x &optional fprec nfprec)
+ "Compute gamma(1+X) to the appropriate precision."
(or fprec
(setq fprec (math-float calc-internal-prec)
nfprec (math-float (- calc-internal-prec))))
@@ -567,42 +568,48 @@
((Math-lessp '(float 8 0) (math-abs-approx x))
(let* ((z (math-div '(float 8 0) x))
(y (math-sqr z))
- (xx (math-add x '(float (bigneg 164 398 785) -9)))
+ (xx (math-add x
+ (math-read-number-simple "-0.785398164")))
(a1 (math-poly-eval y
- '((float (bigpos 211 887 093 2) -16)
- (float (bigneg 639 370 073 2) -15)
- (float (bigpos 407 510 734 2) -14)
- (float (bigneg 627 628 098 1) -12)
- (float 1 0))))
+ (list
+ (math-read-number-simple "0.0000002093887211")
+ (math-read-number-simple "-0.000002073370639")
+ (math-read-number-simple "0.00002734510407")
+ (math-read-number-simple "-0.001098628627")
+ '(float 1 0))))
(a2 (math-poly-eval y
- '((float (bigneg 152 935 934) -16)
- (float (bigpos 161 095 621 7) -16)
- (float (bigneg 651 147 911 6) -15)
- (float (bigpos 765 488 430 1) -13)
- (float (bigneg 995 499 562 1) -11))))
+ (list
+ (math-read-number-simple "-0.0000000934935152")
+ (math-read-number-simple "0.0000007621095161")
+ (math-read-number-simple "-0.000006911147651")
+ (math-read-number-simple "0.0001430488765")
+ (math-read-number-simple "-0.01562499995"))))
(sc (math-sin-cos-raw xx)))
(if yflag
(setq sc (cons (math-neg (cdr sc)) (car sc))))
(math-mul (math-sqrt
- (math-div '(float (bigpos 722 619 636) -9) x))
+ (math-div (math-read-number-simple "0.636619722")
+ x))
(math-sub (math-mul (cdr sc) a1)
(math-mul (car sc) (math-mul z a2))))))
(t
(let ((y (math-sqr x)))
(math-div (math-poly-eval y
- '((float (bigneg 456 052 849 1) -7)
- (float (bigpos 017 233 739 7) -5)
- (float (bigneg 418 442 121 1) -2)
- (float (bigpos 407 196 516 6) -1)
- (float (bigneg 354 590 362 13) 0)
- (float (bigpos 574 490 568 57) 0)))
+ (list
+ (math-read-number-simple "-184.9052456")
+ (math-read-number-simple "77392.33017")
+ (math-read-number-simple "-11214424.18")
+ (math-read-number-simple "651619640.7")
+ (math-read-number-simple "-13362590354.0")
+ (math-read-number-simple "57568490574.0")))
(math-poly-eval y
- '((float 1 0)
- (float (bigpos 712 532 678 2) -7)
- (float (bigpos 853 264 927 5) -5)
- (float (bigpos 718 680 494 9) -3)
- (float (bigpos 985 532 029 1) 0)
- (float (bigpos 411 490 568 57) 0))))))))
+ (list
+ '(float 1 0)
+ (math-read-number-simple "267.8532712")
+ (math-read-number-simple "59272.64853")
+ (math-read-number-simple "9494680.718")
+ (math-read-number-simple "1029532985.0")
+ (math-read-number-simple "57568490411.0"))))))))
(defun math-besJ1 (x &optional yflag)
(cond ((and (math-negp (calcFunc-re x)) (not yflag))
@@ -610,25 +617,29 @@
((Math-lessp '(float 8 0) (math-abs-approx x))
(let* ((z (math-div '(float 8 0) x))
(y (math-sqr z))
- (xx (math-add x '(float (bigneg 491 194 356 2) -9)))
+ (xx (math-add x (math-read-number-simple "-2.356194491")))
(a1 (math-poly-eval y
- '((float (bigneg 019 337 240) -15)
- (float (bigpos 174 520 457 2) -15)
- (float (bigneg 496 396 516 3) -14)
- (float 183105 -8)
- (float 1 0))))
+ (list
+ (math-read-number-simple "-0.000000240337019")
+ (math-read-number-simple "0.000002457520174")
+ (math-read-number-simple "-0.00003516396496")
+ '(float 183105 -8)
+ '(float 1 0))))
(a2 (math-poly-eval y
- '((float (bigpos 412 787 105) -15)
- (float (bigneg 987 228 88) -14)
- (float (bigpos 096 199 449 8) -15)
- (float (bigneg 873 690 002 2) -13)
- (float (bigpos 995 499 687 4) -11))))
+ (list
+ (math-read-number-simple "0.000000105787412")
+ (math-read-number-simple "-0.00000088228987")
+ (math-read-number-simple "0.000008449199096")
+ (math-read-number-simple "-0.0002002690873")
+ (math-read-number-simple "0.04687499995"))))
(sc (math-sin-cos-raw xx)))
(if yflag
(setq sc (cons (math-neg (cdr sc)) (car sc)))
(if (math-negp x)
(setq sc (cons (math-neg (car sc)) (math-neg (cdr sc))))))
- (math-mul (math-sqrt (math-div '(float (bigpos 722 619 636) -9) x))
+ (math-mul (math-sqrt (math-div
+ (math-read-number-simple "0.636619722")
+ x))
(math-sub (math-mul (cdr sc) a1)
(math-mul (car sc) (math-mul z a2))))))
(t
@@ -636,20 +647,21 @@
(math-mul
x
(math-div (math-poly-eval y
- '((float (bigneg 606 036 016 3) -8)
- (float (bigpos 826 044 157) -4)
- (float (bigneg 439 611 972 2) -3)
- (float (bigpos 531 968 423 2) -1)
- (float (bigneg 235 059 895 7) 0)
- (float (bigpos 232 614 362 72) 0)))
+ (list
+ (math-read-number-simple "-30.16036606")
+ (math-read-number-simple "15704.4826")
+ (math-read-number-simple "-2972611.439")
+ (math-read-number-simple "242396853.1")
+ (math-read-number-simple "-7895059235.0")
+ (math-read-number-simple "72362614232.0")))
(math-poly-eval y
- '((float 1 0)
- (float (bigpos 397 991 769 3) -7)
- (float (bigpos 394 743 944 9) -5)
- (float (bigpos 474 330 858 1) -2)
- (float (bigpos 178 535 300 2) 0)
- (float (bigpos 442 228 725 144)
- 0)))))))))
+ (list
+ '(float 1 0)
+ (math-read-number-simple "376.9991397")
+ (math-read-number-simple "99447.43394")
+ (math-read-number-simple "18583304.74")
+ (math-read-number-simple "2300535178.0")
+ (math-read-number-simple "144725228442.0")))))))))
(defun calcFunc-besY (v x)
(math-inexact-result)
@@ -688,22 +700,24 @@
(defun math-besY0 (x)
(cond ((Math-lessp (math-abs-approx x) '(float 8 0))
(let ((y (math-sqr x)))
- (math-add
+ (math-add
(math-div (math-poly-eval y
- '((float (bigpos 733 622 284 2) -7)
- (float (bigneg 757 792 632 8) -5)
- (float (bigpos 129 988 087 1) -2)
- (float (bigneg 036 598 123 5) -1)
- (float (bigpos 065 834 062 7) 0)
- (float (bigneg 389 821 957 2) 0)))
+ (list
+ (math-read-number-simple "228.4622733")
+ (math-read-number-simple "-86327.92757")
+ (math-read-number-simple "10879881.29")
+ (math-read-number-simple "-512359803.6")
+ (math-read-number-simple "7062834065.0")
+ (math-read-number-simple "-2957821389.0")))
(math-poly-eval y
- '((float 1 0)
- (float (bigpos 244 030 261 2) -7)
- (float (bigpos 647 472 474) -4)
- (float (bigpos 438 466 189 7) -3)
- (float (bigpos 648 499 452 7) -1)
- (float (bigpos 269 544 076 40) 0))))
- (math-mul '(float (bigpos 772 619 636) -9)
+ (list
+ '(float 1 0)
+ (math-read-number-simple "226.1030244")
+ (math-read-number-simple "47447.2647")
+ (math-read-number-simple "7189466.438")
+ (math-read-number-simple "745249964.8")
+ (math-read-number-simple "40076544269.0"))))
+ (math-mul (math-read-number-simple "0.636619772")
(math-mul (math-besJ0 x) (math-ln-raw x))))))
((math-negp (calcFunc-re x))
(math-add (math-besJ0 (math-neg x) t)
@@ -719,22 +733,24 @@
(math-mul
x
(math-div (math-poly-eval y
- '((float (bigpos 935 937 511 8) -6)
- (float (bigneg 726 922 237 4) -3)
- (float (bigpos 551 264 349 7) -1)
- (float (bigneg 139 438 153 5) 1)
- (float (bigpos 439 527 127) 4)
- (float (bigneg 943 604 900 4) 3)))
+ (list
+ (math-read-number-simple "8511.937935")
+ (math-read-number-simple "-4237922.726")
+ (math-read-number-simple "734926455.1")
+ (math-read-number-simple "-51534381390.0")
+ (math-read-number-simple "1275274390000.0")
+ (math-read-number-simple "-4900604943000.0")))
(math-poly-eval y
- '((float 1 0)
- (float (bigpos 885 632 549 3) -7)
- (float (bigpos 605 042 102) -3)
- (float (bigpos 002 904 245 2) -2)
- (float (bigpos 367 650 733 3) 0)
- (float (bigpos 664 419 244 4) 2)
- (float (bigpos 057 958 249) 5)))))
- (math-mul '(float (bigpos 772 619 636) -9)
- (math-sub (math-mul (math-besJ1 x) (math-ln-raw x))
+ (list
+ '(float 1 0)
+ (math-read-number-simple "354.9632885")
+ (math-read-number-simple "102042.605")
+ (math-read-number-simple "22459040.02")
+ (math-read-number-simple "3733650367.0")
+ (math-read-number-simple "424441966400.0")
+ (math-read-number-simple "24995805700000.0")))))
+ (math-mul (math-read-number-simple "0.636619772")
+ (math-sub (math-mul (math-besJ1 x) (math-ln-raw x))
(math-div 1 x))))))
((math-negp (calcFunc-re x))
(math-neg
@@ -799,21 +815,45 @@
(calcFunc-euler n '(float 5 -1)))
(calcFunc-euler n '(frac 1 2))))))
-(defvar math-bernoulli-b-cache '((frac -174611
- (bigpos 0 200 291 698 662 857 802))
- (frac 43867 (bigpos 0 944 170 217 94 109 5))
- (frac -3617 (bigpos 0 880 842 622 670 10))
- (frac 1 (bigpos 600 249 724 74))
- (frac -691 (bigpos 0 368 674 307 1))
- (frac 1 (bigpos 160 900 47))
- (frac -1 (bigpos 600 209 1))
- (frac 1 30240) (frac -1 720)
- (frac 1 12) 1 ))
-
-(defvar math-bernoulli-B-cache '((frac -174611 330) (frac 43867 798)
- (frac -3617 510) (frac 7 6) (frac -691 2730)
- (frac 5 66) (frac -1 30) (frac 1 42)
- (frac -1 30) (frac 1 6) 1 ))
+(defvar math-bernoulli-b-cache
+ (list
+ (list 'frac
+ -174611
+ (math-read-number-simple "802857662698291200000"))
+ (list 'frac
+ 43867
+ (math-read-number-simple "5109094217170944000"))
+ (list 'frac
+ -3617
+ (math-read-number-simple "10670622842880000"))
+ (list 'frac
+ 1
+ (math-read-number-simple "74724249600"))
+ (list 'frac
+ -691
+ (math-read-number-simple "1307674368000"))
+ (list 'frac
+ 1
+ (math-read-number-simple "47900160"))
+ (list 'frac
+ -1
+ (math-read-number-simple "1209600"))
+ (list 'frac
+ 1
+ 30240)
+ (list 'frac
+ -1
+ 720)
+ (list 'frac
+ 1
+ 12)
+ 1 ))
+
+(defvar math-bernoulli-B-cache
+ '((frac -174611 330) (frac 43867 798)
+ (frac -3617 510) (frac 7 6) (frac -691 2730)
+ (frac 5 66) (frac -1 30) (frac 1 42)
+ (frac -1 30) (frac 1 6) 1 ))
(defvar math-bernoulli-cache-size 11)
(defun math-bernoulli-coefs (n)
diff --git a/lisp/calc/calc-graph.el b/lisp/calc/calc-graph.el
index 48bdecf59a6..a7e85d9fa85 100644
--- a/lisp/calc/calc-graph.el
+++ b/lisp/calc/calc-graph.el
@@ -218,7 +218,8 @@
0)
(or (and (Math-num-integerp pstyle) (math-trunc pstyle))
(if (eq (car-safe (calc-var-value (nth 2 ydata))) 'vec)
- 0 -1)))))
+ 0 -1))
+ (math-contains-sdev-p (eval (nth 2 ydata))))))
(defun calc-graph-lookup (thing)
(if (and (eq (car-safe thing) 'var)
@@ -792,6 +793,10 @@
calc-graph-numsteps (1- (* calc-graph-numsteps (1+ calc-graph-numsteps3))))))
(defun calc-graph-format-data ()
+ (if (math-contains-sdev-p calc-graph-yp)
+ (let ((yp calc-graph-yp))
+ (setq calc-graph-yp (cons 'vec (mapcar 'math-get-value (cdr yp))))
+ (setq calc-graph-zp (cons 'vec (mapcar 'math-get-sdev (cdr yp))))))
(while (<= (setq calc-graph-stepcount (1+ calc-graph-stepcount)) calc-graph-numsteps)
(if calc-graph-xvec
(setq calc-graph-xp (cdr calc-graph-xp)
@@ -1059,7 +1064,7 @@ This \"dumb\" driver will be present in Gnuplot 3.0."
(interactive "P")
(calc-graph-set-styles t (and style (prefix-numeric-value style))))
-(defun calc-graph-set-styles (lines points)
+(defun calc-graph-set-styles (lines points &optional yerr)
(calc-graph-init)
(save-excursion
(set-buffer calc-gnuplot-input)
@@ -1067,7 +1072,7 @@ This \"dumb\" driver will be present in Gnuplot 3.0."
(error "No data points have been set!"))
(let ((base (point))
(mode nil) (lstyle nil) (pstyle nil)
- start end lenbl penbl)
+ start end lenbl penbl errform)
(re-search-forward "[,\n]")
(forward-char -1)
(setq end (point) start end)
@@ -1087,29 +1092,48 @@ This \"dumb\" driver will be present in Gnuplot 3.0."
(setq pstyle (string-to-number
(buffer-substring (match-beginning 1)
(match-end 1)))))))
- (setq lenbl (or (equal mode "lines") (equal mode "linespoints"))
- penbl (or (equal mode "points") (equal mode "linespoints")))
- (if lines
- (or (eq lines t)
- (setq lstyle lines
- lenbl (>= lines 0)))
- (setq lenbl (not lenbl)))
- (if points
- (or (eq points t)
- (setq pstyle points
- penbl (>= points 0)))
- (setq penbl (not penbl)))
- (delete-region start end)
+ (unless yerr
+ (setq lenbl (or (equal mode "lines")
+ (equal mode "linespoints"))
+ penbl (or (equal mode "points")
+ (equal mode "linespoints")))
+ (if lines
+ (or (eq lines t)
+ (setq lstyle lines
+ lenbl (>= lines 0)))
+ (setq lenbl (not lenbl)))
+ (if points
+ (or (eq points t)
+ (setq pstyle points
+ penbl (>= points 0)))
+ (setq penbl (not penbl))))
+ (delete-region start end)
(goto-char start)
- (insert " with "
- (if lenbl
- (if penbl "linespoints" "lines")
- (if penbl "points" "dots")))
- (if (and pstyle (> pstyle 0))
- (insert " " (if (and lstyle (> lstyle 0)) (int-to-string lstyle) "1")
- " " (int-to-string pstyle))
- (if (and lstyle (> lstyle 0))
- (insert " " (int-to-string lstyle))))))
+ (setq errform
+ (condition-case nil
+ (math-contains-sdev-p
+ (eval (intern
+ (concat "var-"
+ (save-excursion
+ (re-search-backward ":\\(.*\\)\\}")
+ (match-string 1))))))
+ (error nil)))
+ (if yerr
+ (insert " with yerrorbars")
+ (insert " with "
+ (if (and errform
+ (equal mode "dots")
+ (eq lines t))
+ "yerrorbars"
+ (if lenbl
+ (if penbl "linespoints" "lines")
+ (if penbl "points" "dots"))))
+ (if (and pstyle (> pstyle 0))
+ (insert " "
+ (if (and lstyle (> lstyle 0)) (int-to-string lstyle) "1")
+ " " (int-to-string pstyle))
+ (if (and lstyle (> lstyle 0))
+ (insert " " (int-to-string lstyle)))))))
(calc-graph-view-commands))
(defun calc-graph-zero-x (flag)
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el
index c2d3369627c..ed1c93e8694 100644
--- a/lisp/calc/calc-help.el
+++ b/lisp/calc/calc-help.el
@@ -321,11 +321,11 @@ C-w Describe how there is no warranty for Calc."
(defun calc-describe-function (&optional func)
(interactive)
(unless calc-help-function-list
- (setq calc-help-function-list
+ (setq calc-help-function-list
(calc-help-index-entries "Function" "Command")))
(or func
(setq func (completing-read "Describe function: "
- calc-help-function-list
+ calc-help-function-list
nil t)))
(if (string-match "\\`calc-." func)
(calc-describe-thing func "Command Index")
@@ -334,7 +334,7 @@ C-w Describe how there is no warranty for Calc."
(defun calc-describe-variable (&optional var)
(interactive)
(unless calc-help-variable-list
- (setq calc-help-variable-list
+ (setq calc-help-variable-list
(calc-help-index-entries "Variable")))
(or var
(setq var (completing-read "Describe variable: "
@@ -414,54 +414,54 @@ C-w Describe how there is no warranty for Calc."
(princ (format "GNU Emacs Calculator version %s.\n"
calc-version))
(princ " By Dave Gillespie.\n")
- (princ " Copyright (C) 2007 Free Software Foundation, Inc.\n\n")
+ (princ (format " %s\n\n" emacs-copyright))
(princ "Type `h s' for a more detailed summary.\n")
(princ "Or type `h i' to read the full Calc manual on-line.\n\n")
(princ "Basic keys:\n")
(let* ((calc-full-help-flag t))
- (mapcar (function (lambda (x) (princ (format " %s\n" x))))
- (nreverse (cdr (reverse (cdr (calc-help))))))
- (mapcar (function (lambda (prefix)
- (let ((msgs (condition-case err
- (funcall prefix)
- (error nil))))
- (if (car msgs)
- (princ
- (if (eq (nth 2 msgs) ?v)
- "\n`v' or `V' prefix (vector/matrix) keys: \n"
- (if (nth 2 msgs)
- (format
- "\n`%c' prefix (%s) keys:\n"
- (nth 2 msgs)
- (or (cdr (assq (nth 2 msgs)
- calc-help-long-names))
- (nth 1 msgs)))
- (format "\n%s-modified keys:\n"
- (capitalize (nth 1 msgs)))))))
- (mapcar (function (lambda (x)
- (princ (format " %s\n" x))))
- (car msgs)))))
- '(calc-inverse-prefix-help
- calc-hyperbolic-prefix-help
- calc-inv-hyp-prefix-help
- calc-a-prefix-help
- calc-b-prefix-help
- calc-c-prefix-help
- calc-d-prefix-help
- calc-f-prefix-help
- calc-g-prefix-help
- calc-h-prefix-help
- calc-j-prefix-help
- calc-k-prefix-help
- calc-m-prefix-help
- calc-r-prefix-help
- calc-s-prefix-help
- calc-t-prefix-help
- calc-u-prefix-help
- calc-v-prefix-help
- calc-shift-Y-prefix-help
- calc-shift-Z-prefix-help
- calc-z-prefix-help)))
+ (mapc (function (lambda (x) (princ (format " %s\n" x))))
+ (nreverse (cdr (reverse (cdr (calc-help))))))
+ (mapc (function (lambda (prefix)
+ (let ((msgs (condition-case err
+ (funcall prefix)
+ (error nil))))
+ (if (car msgs)
+ (princ
+ (if (eq (nth 2 msgs) ?v)
+ "\n`v' or `V' prefix (vector/matrix) keys: \n"
+ (if (nth 2 msgs)
+ (format
+ "\n`%c' prefix (%s) keys:\n"
+ (nth 2 msgs)
+ (or (cdr (assq (nth 2 msgs)
+ calc-help-long-names))
+ (nth 1 msgs)))
+ (format "\n%s-modified keys:\n"
+ (capitalize (nth 1 msgs)))))))
+ (mapcar (function (lambda (x)
+ (princ (format " %s\n" x))))
+ (car msgs)))))
+ '(calc-inverse-prefix-help
+ calc-hyperbolic-prefix-help
+ calc-inv-hyp-prefix-help
+ calc-a-prefix-help
+ calc-b-prefix-help
+ calc-c-prefix-help
+ calc-d-prefix-help
+ calc-f-prefix-help
+ calc-g-prefix-help
+ calc-h-prefix-help
+ calc-j-prefix-help
+ calc-k-prefix-help
+ calc-m-prefix-help
+ calc-r-prefix-help
+ calc-s-prefix-help
+ calc-t-prefix-help
+ calc-u-prefix-help
+ calc-v-prefix-help
+ calc-shift-Y-prefix-help
+ calc-shift-Z-prefix-help
+ calc-z-prefix-help)))
(print-help-return-message)))
(defun calc-h-prefix-help ()
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el
index 3bb1e41233e..7f976d20554 100644
--- a/lisp/calc/calc-lang.el
+++ b/lisp/calc/calc-lang.el
@@ -35,7 +35,7 @@
;;; Alternate entry/display languages.
(defun calc-set-language (lang &optional option no-refresh)
- (setq math-expr-opers (or (get lang 'math-oper-table) math-standard-opers)
+ (setq math-expr-opers (or (get lang 'math-oper-table) (math-standard-ops))
math-expr-function-mapping (get lang 'math-function-table)
math-expr-special-function-mapping (get lang 'math-special-function-table)
math-expr-variable-mapping (get lang 'math-variable-table)
@@ -84,10 +84,10 @@
(message "`C' language mode")))
(put 'c 'math-oper-table
- '( ( "u+" ident -1 1000 )
- ( "u-" neg -1 1000 )
- ( "u!" calcFunc-lnot -1 1000 )
+ '( ( "u!" calcFunc-lnot -1 1000 )
( "~" calcFunc-not -1 1000 )
+ ( "u+" ident -1 197 )
+ ( "u-" neg -1 197 )
( "*" * 190 191 )
( "/" / 190 191 )
( "%" % 190 191 )
@@ -328,9 +328,7 @@
"LaTeX language mode with \\func(\\text{var}) and multiline matrices")))))
(put 'tex 'math-oper-table
- '( ( "u+" ident -1 1000 )
- ( "u-" neg -1 1000 )
- ( "\\hat" calcFunc-hat -1 950 )
+ '( ( "\\hat" calcFunc-hat -1 950 )
( "\\check" calcFunc-check -1 950 )
( "\\tilde" calcFunc-tilde -1 950 )
( "\\acute" calcFunc-acute -1 950 )
@@ -351,13 +349,15 @@
( "!" calcFunc-fact 210 -1 )
( "^" ^ 201 200 )
( "_" calcFunc-subscr 201 200 )
+ ( "u+" ident -1 197 )
+ ( "u-" neg -1 197 )
( "\\times" * 191 190 )
( "*" * 191 190 )
( "2x" * 191 190 )
- ( "/" / 185 186 )
( "+" + 180 181 )
( "-" - 180 181 )
( "\\over" / 170 171 )
+ ( "/" / 170 171 )
( "\\choose" calcFunc-choose 170 171 )
( "\\mod" % 170 171 )
( "<" calcFunc-lt 160 161 )
@@ -496,7 +496,7 @@
( "\\Vec" calcFunc-VEC -1 950 )
( "\\dddot" calcFunc-dddot -1 950 )
( "\\ddddot" calcFunc-ddddot -1 950 )
- ( "\div" / 170 171 )
+ ( "\\div" / 170 171 )
( "\\le" calcFunc-leq 160 161 )
( "\\leqq" calcFunc-leq 160 161 )
( "\\leqsland" calcFunc-leq 160 161 )
@@ -575,9 +575,7 @@
(message "Eqn language mode")))
(put 'eqn 'math-oper-table
- '( ( "u+" ident -1 1000 )
- ( "u-" neg -1 1000 )
- ( "prime" (math-parse-eqn-prime) 950 -1 )
+ '( ( "prime" (math-parse-eqn-prime) 950 -1 )
( "prime" calcFunc-Prime 950 -1 )
( "dot" calcFunc-dot 950 -1 )
( "dotdot" calcFunc-dotdot 950 -1 )
@@ -599,6 +597,8 @@
( "right ceil" closing 0 -1 )
( "+-" sdev 300 300 )
( "!" calcFunc-fact 210 -1 )
+ ( "u+" ident -1 197 )
+ ( "u-" neg -1 197 )
( "times" * 191 190 )
( "*" * 191 190 )
( "2x" * 191 190 )
@@ -1225,7 +1225,7 @@
h (1+ v) (1+ h) math-rb-v2)
(string-match "<=\\|>=\\|\\+/-\\|!=\\|&&\\|||\\|:=\\|=>\\|." line h)
(assoc (math-match-substring line 0)
- math-standard-opers)))
+ (math-standard-ops))))
(and (>= (nth 2 widest) prec)
(setq h (match-end 0)))
(and (not (eq (string-match ",\\|;\\|\\.\\.\\|)\\|\\]\\|:" line h)
diff --git a/lisp/calc/calc-math.el b/lisp/calc/calc-math.el
index 249dff56979..3a2319e9a2c 100644
--- a/lisp/calc/calc-math.el
+++ b/lisp/calc/calc-math.el
@@ -32,6 +32,84 @@
(require 'calc-ext)
(require 'calc-macs)
+
+;;; Find out how many 9s in 9.9999... will give distinct Emacs floats,
+;;; then back off by one.
+
+(defvar math-emacs-precision
+ (let* ((n 1)
+ (x 9)
+ (xx (+ x (* 9 (expt 10 (- n))))))
+ (while (/= x xx)
+ (progn
+ (setq n (1+ n))
+ (setq x xx)
+ (setq xx (+ x (* 9 (expt 10 (- n)))))))
+ (1- n))
+ "The number of digits in an Emacs float.")
+
+;;; Find the largest power of 10 which is an Emacs float,
+;;; then back off by one so that any float d.dddd...eN
+;;; is an Emacs float, for acceptable d.dddd....
+
+(defvar math-largest-emacs-expt
+ (let ((x 1)
+ (pow 1e2))
+ ;; The following loop is for efficiency; it should stop when
+ ;; 10^(2x) is too large. This could be indicated by a range
+ ;; error when computing 10^(2x) or an infinite value for 10^(2x).
+ (while (and
+ pow
+ (< pow 1.0e+INF))
+ (setq x (* 2 x))
+ (setq pow (condition-case nil
+ (expt 10.0 (* 2 x))
+ (error nil))))
+ ;; The following loop should stop when 10^(x+1) is too large.
+ (setq pow (condition-case nil
+ (expt 10.0 (1+ x))
+ (error nil)))
+ (while (and
+ pow
+ (< pow 1.0e+INF))
+ (setq x (1+ x))
+ (setq pow (condition-case nil
+ (expt 10.0 (1+ x))
+ (error nil))))
+ (1- x))
+ "The largest exponent which Calc will convert to an Emacs float.")
+
+(defvar math-smallest-emacs-expt
+ (let ((x -1))
+ (while (condition-case nil
+ (> (expt 10.0 x) 0.0)
+ (error nil))
+ (setq x (* 2 x)))
+ (setq x (/ x 2))
+ (while (condition-case nil
+ (> (expt 10.0 x) 0.0)
+ (error nil))
+ (setq x (1- x)))
+ (+ x 2))
+ "The smallest exponent which Calc will convert to an Emacs float.")
+
+(defun math-use-emacs-fn (fn x)
+ "Use the native Emacs function FN to evaluate the Calc number X.
+If this can't be done, return NIL."
+ (and
+ (<= calc-internal-prec math-emacs-precision)
+ (math-realp x)
+ (let* ((fx (math-float x))
+ (xpon (+ (nth 2 x) (1- (math-numdigs (nth 1 x))))))
+ (and (<= math-smallest-emacs-expt xpon)
+ (<= xpon math-largest-emacs-expt)
+ (condition-case nil
+ (math-read-number
+ (number-to-string
+ (funcall fn
+ (string-to-number (math-format-number (math-float x))))))
+ (error nil))))))
+
(defun calc-sqrt (arg)
(interactive "P")
(calc-slow-wrapper
@@ -310,15 +388,15 @@
(let* ((top (nthcdr (- len 2) a)))
(math-isqrt-bignum-iter
a
- (math-scale-bignum-3
+ (math-scale-bignum-digit-size
(math-bignum-big
(1+ (math-isqrt-small
- (+ (* (nth 1 top) 1000) (car top)))))
+ (+ (* (nth 1 top) math-bignum-digit-size) (car top)))))
(1- (/ len 2)))))
(let* ((top (nth (1- len) a)))
(math-isqrt-bignum-iter
a
- (math-scale-bignum-3
+ (math-scale-bignum-digit-size
(list (1+ (math-isqrt-small top)))
(/ len 2)))))))
@@ -341,14 +419,15 @@
(while (eq (car (setq a (cdr a))) 0))
(null a))))
-(defun math-scale-bignum-3 (a n) ; [L L S]
+(defun math-scale-bignum-digit-size (a n) ; [L L S]
(while (> n 0)
(setq a (cons 0 a)
n (1- n)))
a)
(defun math-isqrt-small (a) ; A > 0. [S S]
- (let ((g (cond ((>= a 10000) 1000)
+ (let ((g (cond ((>= a 1000000) 10000)
+ ((>= a 10000) 1000)
((>= a 100) 100)
(t 10)))
g2)
@@ -463,13 +542,16 @@
(defun math-sqrt-raw (a &optional guess) ; [F F F]
(if (not (Math-posp a))
(math-sqrt a)
- (if (null guess)
- (let ((ldiff (- (math-numdigs (nth 1 a)) 6)))
- (or (= (% (+ (nth 2 a) ldiff) 2) 0) (setq ldiff (1+ ldiff)))
- (setq guess (math-make-float (math-isqrt-small
- (math-scale-int (nth 1 a) (- ldiff)))
- (/ (+ (nth 2 a) ldiff) 2)))))
- (math-sqrt-float-iter a guess)))
+ (cond
+ ((math-use-emacs-fn 'sqrt a))
+ (t
+ (if (null guess)
+ (let ((ldiff (- (math-numdigs (nth 1 a)) 6)))
+ (or (= (% (+ (nth 2 a) ldiff) 2) 0) (setq ldiff (1+ ldiff)))
+ (setq guess (math-make-float (math-isqrt-small
+ (math-scale-int (nth 1 a) (- ldiff)))
+ (/ (+ (nth 2 a) ldiff) 2)))))
+ (math-sqrt-float-iter a guess)))))
(defun math-sqrt-float-iter (a guess) ; [F F F]
(math-working "sqrt" guess)
@@ -1135,11 +1217,13 @@
((math-lessp-float x (math-neg (math-pi-over-4)))
(math-neg (math-cos-raw-2 (math-add (math-pi-over-2) x) orgx)))
((math-nearly-zerop-float x orgx) '(float 0 0))
+ ((math-use-emacs-fn 'sin x))
(calc-symbolic-mode (signal 'inexact-result nil))
(t (math-sin-series x 6 4 x (math-neg-float (math-sqr-float x)))))))
(defun math-cos-raw-2 (x orgx) ; [F F]
(cond ((math-nearly-zerop-float x orgx) '(float 1 0))
+ ((math-use-emacs-fn 'cos x))
(calc-symbolic-mode (signal 'inexact-result nil))
(t (let ((xnegsqr (math-neg-float (math-sqr-float x))))
(math-sin-series
@@ -1253,6 +1337,7 @@
((Math-integer-negp (nth 1 x))
(math-neg-float (math-arctan-raw (math-neg-float x))))
((math-zerop x) x)
+ ((math-use-emacs-fn 'atan x))
(calc-symbolic-mode (signal 'inexact-result nil))
((math-equal-int x 1) (math-pi-over-4))
((math-equal-int x -1) (math-neg (math-pi-over-4)))
@@ -1402,6 +1487,7 @@
(list 'polar
(math-exp-raw (nth 1 xc))
(math-from-radians (nth 2 xc)))))
+ ((math-use-emacs-fn 'exp x))
((or (math-lessp-float '(float 5 -1) x)
(math-lessp-float x '(float -5 -1)))
(if (math-lessp-float '(float 921035 1) x)
@@ -1670,10 +1756,13 @@
'(float 0 0))
(calc-symbolic-mode (signal 'inexact-result nil))
((math-posp (nth 1 x)) ; positive and real
- (let ((xdigs (1- (math-numdigs (nth 1 x)))))
- (math-add-float (math-ln-raw-2 (list 'float (nth 1 x) (- xdigs)))
- (math-mul-float (math-float (+ (nth 2 x) xdigs))
- (math-ln-10)))))
+ (cond
+ ((math-use-emacs-fn 'log x))
+ (t
+ (let ((xdigs (1- (math-numdigs (nth 1 x)))))
+ (math-add-float (math-ln-raw-2 (list 'float (nth 1 x) (- xdigs)))
+ (math-mul-float (math-float (+ (nth 2 x) xdigs))
+ (math-ln-10)))))))
((math-zerop x)
(math-reject-arg x "*Logarithm of zero"))
((eq calc-complex-mode 'polar) ; negative and real
@@ -1717,10 +1806,18 @@
sum
(math-lnp1-series nextsum (1+ n) nextx x))))
-(math-defcache math-ln-10 (float (bigpos 018 684 045 994 092 585 302 2) -21)
+(defconst math-approx-ln-10
+ (math-read-number-simple "2.302585092994045684018")
+ "An approximation for ln(10).")
+
+(math-defcache math-ln-10 math-approx-ln-10
(math-ln-raw-2 '(float 1 1)))
-(math-defcache math-ln-2 (float (bigpos 417 309 945 559 180 147 693) -21)
+(defconst math-approx-ln-2
+ (math-read-number-simple "0.693147180559945309417")
+ "An approximation for ln(2).")
+
+(math-defcache math-ln-2 math-approx-ln-2
(math-ln-raw-3 (math-float '(frac 1 3))))
diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el
new file mode 100644
index 00000000000..e826da2ab34
--- /dev/null
+++ b/lisp/calc/calc-menu.el
@@ -0,0 +1,1190 @@
+;;; calc-menu.el --- a menu for Calc
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
+
+;; 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 3, 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:
+
+(defvar calc-arithmetic-menu
+ (list "Arithmetic"
+ (list "Basic"
+ ["-(1:)" calc-change-sign :keys "n"]
+ ["(2:) + (1:)" calc-plus :keys "+"]
+ ["(2:) - (1:)" calc-minus :keys "-"]
+ ["(2:) * (1:)" calc-times :keys "*"]
+ ["(2:) / (1:)" calc-divide :keys "/"]
+ ["(2:) ^ (1:)" calc-power :keys "^"]
+ ["(2:) ^ (1/(1:))"
+ (progn
+ (require 'calc-ext)
+ (let ((calc-inverse-flag t))
+ (call-interactively 'calc-power)))
+ :keys "I ^"
+ :help "The (1:)th root of (2:)"]
+ ["abs(1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-abs))
+ :keys "A"
+ :help "Absolute value"]
+ ["1/(1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-inv))
+ :keys "&"]
+ ["sqrt(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-sqrt))
+ :keys "Q"]
+ ["idiv(2:,1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-idiv))
+ :keys "\\"
+ :help "The integer quotient of (2:) over (1:)"]
+ ["(2:) mod (1:)"
+ (progn
+ (require 'calc-misc)
+ (call-interactively 'calc-mod))
+ :keys "%"
+ :help "The remainder when (2:) is divided by (1:)"])
+ (list "Rounding"
+ ["floor(1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-floor))
+ :keys "F"
+ :help "The greatest integer less than or equal to (1:)"]
+ ["ceiling(1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-ceiling))
+ :keys "I F"
+ :help "The smallest integer greater than or equal to (1:)"]
+ ["round(1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-round))
+ :keys "R"
+ :help "The nearest integer to (1:)"]
+ ["truncate(1:)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-trunc))
+ :keys "I R"
+ :help "The integer part of (1:)"])
+ (list "Complex Numbers"
+ ["Re(1:)"
+ (progn
+ (require 'calc-cplx)
+ (call-interactively 'calc-re))
+ :keys "f r"]
+ ["Im(1:)"
+ (progn
+ (require 'calc-cplx)
+ (call-interactively 'calc-im))
+ :keys "f i"]
+ ["conj(1:)"
+ (progn
+ (require 'calc-cplx)
+ (call-interactively 'calc-conj))
+ :keys "J"
+ :help "The complex conjugate of (1:)"]
+ ["length(1:)"
+ (progn (require 'calc-arith)
+ (call-interactively 'calc-abs))
+ :keys "A"
+ :help "The length (absolute value) of (1:)"]
+ ["arg(1:)"
+ (progn
+ (require 'calc-cplx)
+ (call-interactively 'calc-argument))
+ :keys "G"
+ :help "The argument (polar angle) of (1:)"])
+ (list "Conversion"
+ ["Convert (1:) to a float"
+ (progn
+ (require 'calc-ext)
+ (call-interactively 'calc-float))
+ :keys "c f"]
+ ["Convert (1:) to a fraction"
+ (progn
+ (require 'calc-ext)
+ (call-interactively 'calc-fraction))
+ :keys "c F"])
+ (list "Binary"
+ ["Set word size"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-word-size))
+ :keys "b w"]
+ ["Clip (1:) to word size"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-clip))
+ :keys "b c"
+ :help "Reduce (1:) modulo 2^wordsize"]
+ ["(2:) and (1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-and))
+ :keys "b a"
+ :help "Bitwise AND [modulo 2^wordsize]"]
+ ["(2:) or (1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-or))
+ :keys "b o"
+ :help "Bitwise inclusive OR [modulo 2^wordsize]"]
+ ["(2:) xor (1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-xor))
+ :keys "b x"
+ :help "Bitwise exclusive OR [modulo 2^wordsize]"]
+ ["diff(2:,1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-diff))
+ :keys "b d"
+ :help "Bitwise difference [modulo 2^wordsize]"]
+ ["not (1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-not))
+ :keys "b n"
+ :help "Bitwise NOT [modulo 2^wordsize]"]
+ ["left shift(1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-lshift-binary))
+ :keys "b l"
+ :help "Shift (1:)[modulo 2^wordsize] one bit left"]
+ ["right shift(1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-rshift-binary))
+ :keys "b r"
+ :help "Shift (1:)[modulo 2^wordsize] one bit right, putting 0s on the left"]
+ ["arithmetic right shift(1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-rshift-arith))
+ :keys "b R"
+ :help "Shift (1:)[modulo 2^wordsize] one bit right, duplicating the leftmost bit"]
+ ["rotate(1:)"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-rotate-binary))
+ :keys "b t"
+ :help "Rotate (1:)[modulo 2^wordsize] one bit left"])
+ "-------"
+ ["Help on Arithmetic"
+ (calc-info-goto-node "Arithmetic")])
+ "Menu for Calc's arithmetic functions.")
+
+(defvar calc-scientific-function-menu
+ (list "Scientific Functions"
+ (list "Constants"
+ ["pi"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-pi))
+ :keys "P"]
+ ["e"
+ (progn
+ (require 'calc-math)
+ (let ((calc-hyperbolic-flag t))
+ (call-interactively 'calc-pi)))
+ :keys "H P"]
+ ["phi"
+ (progn
+ (require 'calc-math)
+ (let ((calc-inverse-flag t)
+ (calc-hyperbolic-flag t))
+ (call-interactively 'calc-pi)))
+ :keys "I H P"
+ :help "The golden ratio"]
+ ["gamma"
+ (progn
+ (require 'calc-math)
+ (let ((calc-inverse-flag t))
+ (call-interactively 'calc-pi)))
+ :keys "I P"
+ :help "Euler's constant"])
+ (list "Logs and Exps"
+ ["ln(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-ln))
+ :keys "L"
+ :help "The natural logarithm"]
+ ["e^(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-exp))
+ :keys "E"]
+ ["log(1:) [base 10]"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-log10))
+ :keys "H L"
+ :help "The common logarithm"]
+ ["10^(1:)"
+ (progn
+ (require 'calc-math)
+ (let ((calc-inverse-flag t))
+ (call-interactively 'calc-log10)))
+ :keys "I H L"]
+ ["log(2:) [base(1:)]"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-log))
+ :keys "B"
+ :help "The logarithm with an arbitrary base"]
+ ["(2:) ^ (1:)"
+ calc-power
+ :keys "^"])
+ (list "Trigonometric Functions"
+ ["sin(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-sin))
+ :keys "S"]
+ ["cos(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-cos))
+ :keys "C"]
+ ["tan(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-tan))
+ :keys "T"]
+ ["arcsin(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arcsin))
+ :keys "I S"]
+ ["arccos(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arccos))
+ :keys "I C"]
+ ["arctan(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arctan))
+ :keys "I T"]
+ ["arctan2(2:,1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arctan2))
+ :keys "f T"]
+ "--Angle Measure--"
+ ["Radians"
+ (progn
+ (require 'calc-math)
+ (calc-radians-mode))
+ :keys "m r"
+ :style radio
+ :selected (eq calc-angle-mode 'rad)]
+ ["Degrees"
+ (progn
+ (require 'calc-math)
+ (calc-degrees-mode))
+ :keys "m d"
+ :style radio
+ :selected (eq calc-angle-mode 'deg)]
+ ["HMS"
+ (progn
+ (require 'calc-math)
+ (calc-hms-mode))
+ :keys "m h"
+ :style radio
+ :selected (eq calc-angle-mode 'hms)])
+ (list "Hyperbolic Functions"
+ ["sinh(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-sinh))
+ :keys "H S"]
+ ["cosh(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-cosh))
+ :keys "H C"]
+ ["tanh(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-tanh))
+ :keys "H T"]
+ ["arcsinh(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arcsinh))
+ :keys "I H S"]
+ ["arccosh(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arccosh))
+ :keys "I H C"]
+ ["arctanh(1:)"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-arctanh))
+ :keys "I H T"])
+ (list "Advanced Math Functions"
+ ["Gamma(1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-gamma))
+ :keys "f g"
+ :help "The Euler Gamma function"]
+ ["GammaP(2:,1:)"
+ (progn
+ (require 'calc-funcs)
+ (call-interactively 'calc-inc-gamma))
+ :keys "f G"
+ :help "The lower incomplete Gamma function"]
+ ["Beta(2:,1:)"
+ (progn
+ (require 'calc-funcs)
+ (call-interactively 'calc-beta))
+ :keys "f b"
+ :help "The Euler Beta function"]
+ ["BetaI(3:,2:,1:)"
+ (progn
+ (require 'calc-funcs)
+ (call-interactively 'calc-inc-beta))
+ :keys "f B"
+ :help "The incomplete Beta function"]
+ ["erf(1:)"
+ (progn
+ (require 'calc-funcs)
+ (call-interactively 'calc-erf))
+ :keys "f e"
+ :help "The error function"]
+ ["BesselJ(2:,1:)"
+ (progn
+ (require 'calc-funcs)
+ (call-interactively 'calc-bessel-J))
+ :keys "f j"
+ :help "The Bessel function of the first kind (of order (2:))"]
+ ["BesselY(2:,1:)"
+ (progn
+ (require 'calc-funcs)
+ (call-interactively 'calc-bessel-Y))
+ :keys "f y"
+ :help "The Bessel function of the second kind (of order (2:))"])
+ (list "Combinatorial Functions"
+ ["gcd(2:,1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-gcd))
+ :keys "k g"]
+ ["lcm(2:,1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-lcm))
+ :keys "k l"]
+ ["factorial(1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-factorial))
+ :keys "!"]
+ ["(2:) choose (1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-choose))
+ :keys "k c"]
+ ["permutations(2:,1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-perm))
+ :keys "H k c"]
+ ["Primality test for (1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-prime-test))
+ :keys "k p"
+ :help "For large (1:), a probabilistic test"]
+ ["Factor (1:) into primes"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-prime-factors))
+ :keys "k f"]
+ ["Next prime after (1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-next-prime))
+ :keys "k n"]
+ ["Previous prime before (1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-prev-prime))
+ :keys "I k n"]
+ ["phi(1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-totient))
+ :keys "k n"
+ :help "Euler's totient function"]
+ ["random(1:)"
+ (progn
+ (require 'calc-comb)
+ (call-interactively 'calc-random))
+ :keys "k r"
+ :help "A random number >=1 and < (1:)"])
+ "----"
+ ["Help on Scientific Functions"
+ (calc-info-goto-node "Scientific Functions")])
+ "Menu for Calc's scientific functions.")
+
+(defvar calc-algebra-menu
+ (list "Algebra"
+ (list "Simplification"
+ ["Simplify (1:)"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-simplify))
+ :keys "a s"]
+ ["Simplify (1:) with extended rules"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-simplify-extended))
+ :keys "a e"
+ :help "Apply possibly unsafe simplifications"])
+ (list "Manipulation"
+ ["Expand formula (1:)"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-expand-formula))
+ :keys "a \""
+ :help "Expand (1:) into its defining formula, if possible"]
+ ["Evaluate variables in (1:)"
+ (progn
+ (require 'calc-ext)
+ (call-interactively 'calc-evaluate))
+ :keys "="]
+ ["Make substitution in (1:)"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-substitute))
+ :keys "a b"
+ :help
+ "Substitute all occurrences of a sub-expression with a new sub-expression"])
+ (list "Polynomials"
+ ["Factor (1:)"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-factor))
+ :keys "a f"]
+ ["Collect terms in (1:)"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-collect))
+ :keys "a c"
+ :help "Arrange as a polynomial in a given variable"]
+ ["Expand (1:)"
+ (progn
+ (require 'calc-alg)
+ (call-interactively 'calc-expand))
+ :keys "a x"
+ :help "Apply distributive law everywhere"]
+ ["Find roots of (1:)"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-poly-roots))
+ :keys "a P"])
+ (list "Calculus"
+ ["Differentiate (1:)"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-derivative))
+ :keys "a d"]
+ ["Integrate (1:) [indefinite]"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-integral))
+ :keys "a i"]
+ ["Integrate (1:) [definite]"
+ (progn
+ (require 'calcalg2)
+ (let ((var (read-string "Integration variable: ")))
+ (calc-tabular-command 'calcFunc-integ "Integration"
+ "intg" nil var nil nil)))
+ :keys "C-u a i"]
+ ["Integrate (1:) [numeric]"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-num-integral))
+ :keys "a I"
+ :help "Integrate using the open Romberg method"]
+ ["Taylor expand (1:)"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-taylor))
+ :keys "a t"]
+ ["Minimize (2:) [initial guess = (1:)]"
+ (progn
+ (require 'calcalg3)
+ (call-interactively 'calc-find-minimum))
+ :keys "a N"
+ :help "Find a local minimum"]
+ ["Maximize (2:) [initial guess = (1:)]"
+ (progn
+ (require 'calcalg3)
+ (call-interactively 'calc-find-maximum))
+ :keys "a X"
+ :help "Find a local maximum"])
+ (list "Solving"
+ ["Solve equation (1:)"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-solve-for))
+ :keys "a S"]
+ ["Solve equation (2:) numerically [initial guess = (1:)]"
+ (progn
+ (require 'calcalg3)
+ (call-interactively 'calc-find-root))
+ :keys "a R"]
+ ["Find roots of polynomial (1:)"
+ (progn
+ (require 'calcalg2)
+ (call-interactively 'calc-poly-roots))
+ :keys "a P"])
+ (list "Curve Fitting"
+ ["Fit (1:)=[x values, y values] to a curve"
+ (progn
+ (require 'calcalg3)
+ (call-interactively 'calc-curve-fit))
+ :keys "a F"])
+ "----"
+ ["Help on Algebra"
+ (calc-info-goto-node "Algebra")])
+ "Menu for Calc's algebraic facilities.")
+
+
+(defvar calc-graphics-menu
+ (list "Graphics"
+ ["Graph 2D [(1:)= y values, (2:)= x values]"
+ (progn
+ (require 'calc-graph)
+ (call-interactively 'calc-graph-fast))
+ :keys "g f"]
+ ["Graph 3D [(1:)= z values, (2:)= y values, (3:)= x values]"
+ (progn
+ (require 'calc-graph)
+ (call-interactively 'calc-graph-fast-3d))
+ :keys "g F"]
+ "----"
+ ["Help on Graphics"
+ (calc-info-goto-node "Graphics")])
+ "Menu for Calc's graphics.")
+
+
+(defvar calc-vectors-menu
+ (list "Matrices/Vectors"
+ (list "Matrices"
+ ["(2:) + (1:)" calc-plus :keys "+"]
+ ["(2:) - (1:)" calc-minus :keys "-"]
+ ["(2:) * (1:)" calc-times :keys "*"]
+ ["(1:)^(-1)"
+ (progn
+ (require 'calc-arith)
+ (call-interactively 'calc-inv))
+ :keys "&"]
+ ["Create an identity matrix"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-ident))
+ :keys "v i"]
+ ["transpose(1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-transpose))
+ :keys "v t"]
+ ["det(1:)"
+ (progn
+ (require 'calc-mtx)
+ (call-interactively 'calc-mdet))
+ :keys "V D"]
+ ["trace(1:)"
+ (progn
+ (require 'calc-mtx)
+ (call-interactively 'calc-mtrace))
+ :keys "V T"]
+ ["LUD decompose (1:)"
+ (progn
+ (require 'calc-mtx)
+ (call-interactively 'calc-mlud))
+ :keys "V L"]
+ ["Extract a row from (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-mrow))
+ :keys "v r"]
+ ["Extract a column from (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-mcol))
+ :keys "v c"])
+ (list "Vectors"
+ ["Extract the first element of (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-head))
+ :keys "v h"]
+ ["Extract an element from (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-mrow))
+ :keys "v r"]
+ ["Reverse (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-reverse-vector))
+ :keys "v v"]
+ ["Unpack (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-unpack))
+ :keys "v u"
+ :help "Separate the elements of (1:)"]
+ ["(2:) cross (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-cross))
+ :keys "V C"
+ :help "The cross product in R^3"]
+ ["(2:) dot (1:)"
+ calc-mult
+ :keys "*"
+ :help "The dot product"]
+ ["Map a function across (1:)"
+ (progn
+ (require 'calc-map)
+ (call-interactively 'calc-map))
+ :keys "V M"
+ :help "Apply a function to each element"])
+ (list "Vectors As Sets"
+ ["Remove duplicates from (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-remove-duplicates))
+ :keys "V +"]
+ ["(2:) union (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-set-union))
+ :keys "V V"]
+ ["(2:) intersect (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-set-intersect))
+ :keys "V ^"]
+ ["(2:) \\ (1:)"
+ (progn
+ (require 'calc-vec)
+ (call-interactively 'calc-set-difference))
+ :keys "V -"
+ :help "Set difference"])
+ (list "Statistics On Vectors"
+ ["length(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-count))
+ :keys "u #"
+ :help "The number of data values"]
+ ["sum(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-sum))
+ :keys "u +"
+ :help "The sum of the data values"]
+ ["max(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-max))
+ :keys "u x"
+ :help "The maximum of the data values"]
+ ["min(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-min))
+ :keys "u N"
+ :help "The minumum of the data values"]
+ ["mean(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-mean))
+ :keys "u M"
+ :help "The average (arithmetic mean) of the data values"]
+ ["mean(1:) with error"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-mean-error))
+ :keys "I u M"
+ :help "The average (arithmetic mean) of the data values as an error form"]
+ ["sdev(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-sdev))
+ :keys "u S"
+ :help "The sample sdev, sqrt[sum((values - mean)^2)/(N-1)]"]
+ ["variance(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-variance))
+ :keys "H u S"
+ :help "The sample variance, sum((values - mean)^2)/(N-1)"]
+ ["population sdev(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-pop-sdev))
+ :keys "I u S"
+ :help "The population sdev, sqrt[sum((values - mean)^2)/N]"]
+ ["population variance(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-pop-variance))
+ :keys "H I u S"
+ :help "The population variance, sum((values - mean)^2)/N"]
+ ["median(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-median))
+ :keys "H u M"
+ :help "The median of the data values"]
+ ["harmonic mean(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-harmonic-mean))
+ :keys "H I u M"]
+ ["geometric mean(1:)"
+ (progn
+ (require 'calc-stat)
+ (call-interactively 'calc-vector-geometric-mean))
+ :keys "u G"]
+ ["arithmetic-geometric mean(1:)"
+ (progn
+ (require 'calc-stat)
+ (let ((calc-hyperbolic-flag t))
+ (call-interactively 'calc-vector-geometric-mean)))
+ :keys "H u G"]
+ ["RMS(1:)"
+ (progn (require 'calc-arith)
+ (call-interactively 'calc-abs))
+ :keys "A"
+ :help "The root-mean-square, or quadratic mean"])
+ ["Abbreviate long vectors"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-full-vectors))
+ :keys "v ."
+ :style toggle
+ :selected (not calc-full-vectors)]
+ "----"
+ ["Help on Matrices/Vectors"
+ (calc-info-goto-node "Matrix Functions")])
+ "Menu for Calc's vector and matrix functions.")
+
+(defvar calc-units-menu
+ (list "Units"
+ ["Convert units in (1:)"
+ (progn
+ (require 'calc-units)
+ (call-interactively 'calc-convert-units ))
+ :keys "u c"]
+ ["Convert temperature in (1:)"
+ (progn
+ (require 'calc-units)
+ (call-interactively 'calc-convert-temperature))
+ :keys "u t"]
+ ["Simplify units in (1:)"
+ (progn
+ (require 'calc-units)
+ (call-interactively 'calc-simplify-units))
+ :keys "u s"]
+ ["View units table"
+ (progn
+ (require 'calc-units)
+ (call-interactively 'calc-view-units-table))
+ :keys "u V"]
+ "----"
+ ["Help on Units"
+ (calc-info-goto-node "Units")])
+ "Menu for Calc's units functions.")
+
+(defvar calc-variables-menu
+ (list "Variables"
+ ["Store (1:) into a variable"
+ (progn
+ (require 'calc-store)
+ (call-interactively 'calc-store))
+ :keys "s s"]
+ ["Recall a variable value"
+ (progn
+ (require 'calc-store)
+ (call-interactively 'calc-recall ))
+ :keys "s r"]
+ ["Edit the value of a variable"
+ (progn
+ (require 'calc-store)
+ (call-interactively 'calc-edit-variable))
+ :keys "s e"]
+ ["Exchange (1:) with a variable value"
+ (progn
+ (require 'calc-store)
+ (call-interactively 'calc-store-exchange))
+ :keys "s x"]
+ ["Clear variable value"
+ (progn
+ (require 'calc-store)
+ (call-interactively 'calc-unstore))
+ :keys "s u"]
+ ["Evaluate variables in (1:)"
+ (progn
+ (require 'calc-ext)
+ (call-interactively 'calc-evaluate))
+ :keys "="]
+ ["Evaluate (1:), assigning a value to a variable"
+ (progn
+ (require 'calc-store)
+ (call-interactively 'calc-let))
+ :keys "s l"
+ :help "Evaluate (1:) under a temporary assignment of a variable"]
+ "----"
+ ["Help on Variables"
+ (calc-info-goto-node "Store and Recall")])
+ "Menu for Calc's variables.")
+
+(defvar calc-stack-menu
+ (list "Stack"
+ ["Remove (1:)"
+ calc-pop
+ :keys "DEL"]
+ ["Switch (1:) and (2:)"
+ calc-roll-down
+ :keys "TAB"]
+ ["Duplicate (1:)"
+ calc-enter
+ :keys "RET"]
+ ["Edit (1:)"
+ (progn
+ (require 'calc-yank)
+ (call-interactively calc-edit))
+ :keys "`"]
+ "----"
+ ["Help on Stack"
+ (calc-info-goto-node "Stack and Trail")])
+ "Menu for Calc's stack functions.")
+
+(defvar calc-errors-menu
+ (list "Undo"
+ ["Undo"
+ (progn
+ (require 'calc-undo)
+ (call-interactively 'calc-undo))
+ :keys "U"]
+ ["Redo"
+ (progn
+ (require 'calc-undo)
+ (call-interactively 'calc-redo))
+ :keys "D"]
+ "----"
+ ["Help on Undo"
+ (progn
+ (calc-info-goto-node "Introduction")
+ (Info-goto-node "Undo"))]))
+
+(defvar calc-modes-menu
+ (list "Modes"
+ ["Precision"
+ (progn
+ (require 'calc-ext)
+ (call-interactively 'calc-precision))
+ :keys "p"
+ :help "Set the precision for floating point calculations"]
+ ["Fraction mode"
+ (progn
+ (require 'calc-frac)
+ (call-interactively 'calc-frac-mode))
+ :keys "m f"
+ :style toggle
+ :selected calc-prefer-frac
+ :help "Leave integer quotients as fractions"]
+ ["Symbolic mode"
+ (lambda ()
+ (interactive)
+ (require 'calc-mode)
+ (calc-symbolic-mode nil))
+ :keys "m s"
+ :style toggle
+ :selected calc-symbolic-mode
+ :help "Leave functions producing inexact answers in symbolic form"]
+ ["Infinite mode"
+ (lambda ()
+ (interactive)
+ (require 'calc-mode)
+ (calc-infinite-mode nil))
+ :keys "m i"
+ :style toggle
+ :selected calc-infinite-mode
+ :help "Let expressions like 1/0 produce infinite results"]
+ ["Abbreviate long vectors"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-full-vectors))
+ :keys "v ."
+ :style toggle
+ :selected (not calc-full-vectors)]
+ (list "Angle Measure"
+ ["Radians"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-radians-mode))
+ :keys "m r"
+ :style radio
+ :selected (eq calc-angle-mode 'rad)]
+ ["Degrees"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-degrees-mode))
+ :keys "m d"
+ :style radio
+ :selected (eq calc-angle-mode 'deg)]
+ ["HMS"
+ (progn
+ (require 'calc-math)
+ (call-interactively 'calc-hms-mode))
+ :keys "m h"
+ :style radio
+ :selected (eq calc-angle-mode 'hms)])
+ (list "Radix"
+ ["Decimal"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-decimal-radix))
+ :keys "d 0"
+ :style radio
+ :selected (= calc-number-radix 10)]
+ ["Binary"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-binary-radix))
+ :keys "d 2"
+ :style radio
+ :selected (= calc-number-radix 2)]
+ ["Octal"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-octal-radix))
+ :keys "d 8"
+ :style radio
+ :selected (= calc-number-radix 8)]
+ ["Hexadecimal"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-hex-radix))
+ :keys "d 6"
+ :style radio
+ :selected (= calc-number-radix 16)]
+ ["Other"
+ (progn
+ (require 'calc-bin)
+ (call-interactively 'calc-radix))
+ :keys "d r"
+ :style radio
+ :selected (not
+ (or
+ (= calc-number-radix 10)
+ (= calc-number-radix 2)
+ (= calc-number-radix 8)
+ (= calc-number-radix 16)))])
+ (list "Float Format"
+ ["Normal"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-normal-notation))
+ :keys "d n"
+ :style radio
+ :selected (eq (car-safe calc-float-format) 'float)]
+ ["Fixed point"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-fix-notation))
+ :keys "d f"
+ :style radio
+ :selected (eq (car-safe calc-float-format) 'fix)]
+ ["Scientific notation"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-sci-notation))
+ :keys "d s"
+ :style radio
+ :selected (eq (car-safe calc-float-format) 'sci)]
+ ["Engineering notation"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-eng-notation))
+ :keys "d e"
+ :style radio
+ :selected (eq (car-safe calc-float-format) 'eng)])
+ (list "Algebraic"
+ ["Algebraic mode"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-algebraic-mode))
+ :keys "m a"
+ :style radio
+ :selected (eq calc-algebraic-mode t)
+ :help "Keys which start numeric entry also start algebraic entry"]
+ ["Total algebraic mode"
+ (progn
+ (require 'calc-mode)
+ (call-interactively 'calc-total-algebraic-mode))
+ :keys "m t"
+ :style radio
+ :selected (eq calc-algebraic-mode 'total)
+ :help "All regular letters and punctuation begin algebraic entry"])
+ (list "Language"
+ ["Normal"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-normal-language))
+ :keys "d N"
+ :style radio
+ :selected (eq calc-language nil)]
+ ["Big"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-big-language))
+ :keys "d B"
+ :style radio
+ :selected (eq calc-language 'big)
+ :help "Use textual approximations to various mathematical notations"]
+ ["Flat"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-flat-language))
+ :keys "d O"
+ :style radio
+ :selected (eq calc-language 'flat)
+ :help "Write matrices on a single line"]
+ ["C"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-c-language))
+ :keys "d C"
+ :style radio
+ :selected (eq calc-language 'c)]
+ ["Pascal"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-pascal-language))
+ :keys "d P"
+ :style radio
+ :selected (eq calc-language 'pascal)]
+ ["Fortran"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-fortran-language))
+ :keys "d F"
+ :style radio
+ :selected (eq calc-language 'fortran)]
+ ["TeX"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-tex-language))
+ :keys "d T"
+ :style radio
+ :selected (eq calc-language 'tex)]
+ ["LaTeX"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-latex-language))
+ :keys "d L"
+ :style radio
+ :selected (eq calc-language 'latex)]
+ ["Eqn"
+ (progn
+ (require 'calc-lang)
+ (call-interactively 'calc-eqn-language))
+ :keys "d E"
+ :style radio
+ :selected (eq calc-language 'eqn)])
+ "----"
+ ["Save mode settings" calc-save-modes :keys "m m"]
+ "----"
+ ["Help on Modes"
+ (calc-info-goto-node "Mode settings")])
+ "Menu for Calc's mode settings.")
+
+(defvar calc-help-menu
+ (list "Help"
+ ["Manual"
+ calc-info
+ :keys "h i"]
+ ["Tutorial"
+ calc-tutorial
+ :keys "h t"]
+ ["Summary"
+ calc-info-summary
+ :keys "h s"]
+ "----"
+ ["Help on Help"
+ (progn
+ (calc-info-goto-node "Introduction")
+ (Info-goto-node "Help Commands"))])
+ "Menu for Calc's help functions.")
+
+(defvar calc-mode-map)
+
+(easy-menu-define
+ calc-menu
+ calc-mode-map
+ "Menu for Calc."
+ (list "Calc"
+ :visible '(eq major-mode 'calc-mode)
+ calc-arithmetic-menu
+ calc-scientific-function-menu
+ calc-algebra-menu
+ calc-graphics-menu
+ calc-vectors-menu
+ calc-units-menu
+ calc-variables-menu
+ calc-stack-menu
+ calc-errors-menu
+ calc-modes-menu
+ calc-help-menu
+ ["Reset"
+ (progn
+ (require 'calc-ext)
+ (call-interactively 'calc-reset))
+ :help "Reset Calc to its initial state"]
+ ["Quit" calc-quit]))
+
+(provide 'calc-menu)
+
+;; arch-tag: 9612c86a-cd4f-4baa-ab0b-40af7344d21f
diff --git a/lisp/calc/calc-misc.el b/lisp/calc/calc-misc.el
index 1fdb64a26fe..b660e046a21 100644
--- a/lisp/calc/calc-misc.el
+++ b/lisp/calc/calc-misc.el
@@ -145,9 +145,9 @@ Calc user interface as before (either C-x * C or C-x * K; initially C-x * C).
"Create another, independent Calculator buffer."
(interactive)
(if (eq major-mode 'calc-mode)
- (mapcar (function
- (lambda (v)
- (set-default v (symbol-value v)))) calc-local-var-list))
+ (mapc (function
+ (lambda (v)
+ (set-default v (symbol-value v)))) calc-local-var-list))
(set-buffer (generate-new-buffer "*Calculator*"))
(pop-to-buffer (current-buffer))
(calc-mode))
@@ -579,7 +579,7 @@ loaded and the keystroke automatically re-typed."
(defun math-div2-bignum (a) ; [l l]
(if (cdr a)
- (cons (+ (/ (car a) 2) (* (% (nth 1 a) 2) 500))
+ (cons (+ (/ (car a) 2) (* (% (nth 1 a) 2) (/ math-bignum-digit-size 2)))
(math-div2-bignum (cdr a)))
(list (/ (car a) 2))))
diff --git a/lisp/calc/calc-nlfit.el b/lisp/calc/calc-nlfit.el
new file mode 100644
index 00000000000..489599781f6
--- /dev/null
+++ b/lisp/calc/calc-nlfit.el
@@ -0,0 +1,817 @@
+;;; calc-nlfit.el --- nonlinear curve fitting for Calc
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
+
+;; 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 3, 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:
+
+;; This code uses the Levenberg-Marquardt method, as described in
+;; _Numerical Analysis_ by H. R. Schwarz, to fit data to
+;; nonlinear curves. Currently, the only the following curves are
+;; supported:
+;; The logistic S curve, y=a/(1+exp(b*(t-c)))
+;; Here, y is usually interpreted as the population of some
+;; quantity at time t. So we will think of the data as consisting
+;; of quantities q0, q1, ..., qn and their respective times
+;; t0, t1, ..., tn.
+
+;; The logistic bell curve, y=A*exp(B*(t-C))/(1+exp(B*(t-C)))^2
+;; Note that this is the derivative of the formula for the S curve.
+;; We get A=-a*b, B=b and C=c. Here, y is interpreted as the rate
+;; of growth of a population at time t. So we will think of the
+;; data as consisting of rates p0, p1, ..., pn and their
+;; respective times t0, t1, ..., tn.
+
+;; The Hubbert Linearization, y/x=A*(1-x/B)
+;; Here, y is thought of as the rate of growth of a population
+;; and x represents the actual population. This is essentially
+;; the differential equation describing the actual population.
+
+;; The Levenberg-Marquardt method is an iterative process: it takes
+;; an initial guess for the parameters and refines them. To get an
+;; initial guess for the parameters, we'll use a method described by
+;; Luis de Sousa in "Hubbert's Peak Mathematics". The idea is that
+;; given quantities Q and the corresponding rates P, they should
+;; satisfy P/Q= mQ+a. We can use the parameter a for an
+;; approximation for the parameter a in the S curve, and
+;; approximations for b and c are found using least squares on the
+;; linearization log((a/y)-1) = log(bb) + cc*t of
+;; y=a/(1+bb*exp(cc*t)), which is equivalent to the above s curve
+;; formula, and then tranlating it to b and c. From this, we can
+;; also get approximations for the bell curve parameters.
+
+;;; Code:
+
+(require 'calc-arith)
+
+(defun math-nlfit-least-squares (xdata ydata &optional sdata sigmas)
+ "Return the parameters A and B for the best least squares fit y=a+bx."
+ (let* ((n (length xdata))
+ (s2data (if sdata
+ (mapcar 'calcFunc-sqr sdata)
+ (make-list n 1)))
+ (S (if sdata 0 n))
+ (Sx 0)
+ (Sy 0)
+ (Sxx 0)
+ (Sxy 0)
+ D)
+ (while xdata
+ (let ((x (car xdata))
+ (y (car ydata))
+ (s (car s2data)))
+ (setq Sx (math-add Sx (if s (math-div x s) x)))
+ (setq Sy (math-add Sy (if s (math-div y s) y)))
+ (setq Sxx (math-add Sxx (if s (math-div (math-mul x x) s)
+ (math-mul x x))))
+ (setq Sxy (math-add Sxy (if s (math-div (math-mul x y) s)
+ (math-mul x y))))
+ (if sdata
+ (setq S (math-add S (math-div 1 s)))))
+ (setq xdata (cdr xdata))
+ (setq ydata (cdr ydata))
+ (setq s2data (cdr s2data)))
+ (setq D (math-sub (math-mul S Sxx) (math-mul Sx Sx)))
+ (let ((A (math-div (math-sub (math-mul Sxx Sy) (math-mul Sx Sxy)) D))
+ (B (math-div (math-sub (math-mul S Sxy) (math-mul Sx Sy)) D)))
+ (if sigmas
+ (let ((C11 (math-div Sxx D))
+ (C12 (math-neg (math-div Sx D)))
+ (C22 (math-div S D)))
+ (list (list 'sdev A (calcFunc-sqrt C11))
+ (list 'sdev B (calcFunc-sqrt C22))
+ (list 'vec
+ (list 'vec C11 C12)
+ (list 'vec C12 C22))))
+ (list A B)))))
+
+;;; The methods described by de Sousa require the cumulative data qdata
+;;; and the rates pdata. We will assume that we are given either
+;;; qdata and the corresponding times tdata, or pdata and the corresponding
+;;; tdata. The following two functions will find pdata or qdata,
+;;; given the other..
+
+;;; First, given two lists; one of values q0, q1, ..., qn and one of
+;;; corresponding times t0, t1, ..., tn; return a list
+;;; p0, p1, ..., pn of the rates of change of the qi with respect to t.
+;;; p0 is the right hand derivative (q1 - q0)/(t1 - t0).
+;;; pn is the left hand derivative (qn - q(n-1))/(tn - t(n-1)).
+;;; The other pis are the averages of the two:
+;;; (1/2)((qi - q(i-1))/(ti - t(i-1)) + (q(i+1) - qi)/(t(i+1) - ti)).
+
+(defun math-nlfit-get-rates-from-cumul (tdata qdata)
+ (let ((pdata (list
+ (math-div
+ (math-sub (nth 1 qdata)
+ (nth 0 qdata))
+ (math-sub (nth 1 tdata)
+ (nth 0 tdata))))))
+ (while (> (length qdata) 2)
+ (setq pdata
+ (cons
+ (math-mul
+ '(float 5 -1)
+ (math-add
+ (math-div
+ (math-sub (nth 2 qdata)
+ (nth 1 qdata))
+ (math-sub (nth 2 tdata)
+ (nth 1 tdata)))
+ (math-div
+ (math-sub (nth 1 qdata)
+ (nth 0 qdata))
+ (math-sub (nth 1 tdata)
+ (nth 0 tdata)))))
+ pdata))
+ (setq qdata (cdr qdata)))
+ (setq pdata
+ (cons
+ (math-div
+ (math-sub (nth 1 qdata)
+ (nth 0 qdata))
+ (math-sub (nth 1 tdata)
+ (nth 0 tdata)))
+ pdata))
+ (reverse pdata)))
+
+;;; Next, given two lists -- one of rates p0, p1, ..., pn and one of
+;;; corresponding times t0, t1, ..., tn -- and an initial values q0,
+;;; return a list q0, q1, ..., qn of the cumulative values.
+;;; q0 is the initial value given.
+;;; For i>0, qi is computed using the trapezoid rule:
+;;; qi = q(i-1) + (1/2)(pi + p(i-1))(ti - t(i-1))
+
+(defun math-nlfit-get-cumul-from-rates (tdata pdata q0)
+ (let* ((qdata (list q0)))
+ (while (cdr pdata)
+ (setq qdata
+ (cons
+ (math-add (car qdata)
+ (math-mul
+ (math-mul
+ '(float 5 -1)
+ (math-add (nth 1 pdata) (nth 0 pdata)))
+ (math-sub (nth 1 tdata)
+ (nth 0 tdata))))
+ qdata))
+ (setq pdata (cdr pdata))
+ (setq tdata (cdr tdata)))
+ (reverse qdata)))
+
+;;; Given the qdata, pdata and tdata, find the parameters
+;;; a, b and c that fit q = a/(1+b*exp(c*t)).
+;;; a is found using the method described by de Sousa.
+;;; b and c are found using least squares on the linearization
+;;; log((a/q)-1) = log(b) + c*t
+;;; In some cases (where the logistic curve may well be the wrong
+;;; model), the computed a will be less than or equal to the maximum
+;;; value of q in qdata; in which case the above linearization won't work.
+;;; In this case, a will be replaced by a number slightly above
+;;; the maximum value of q.
+
+(defun math-nlfit-find-qmax (qdata pdata tdata)
+ (let* ((ratios (mapcar* 'math-div pdata qdata))
+ (lsdata (math-nlfit-least-squares ratios tdata))
+ (qmax (math-max-list (car qdata) (cdr qdata)))
+ (a (math-neg (math-div (nth 1 lsdata) (nth 0 lsdata)))))
+ (if (math-lessp a qmax)
+ (math-add '(float 5 -1) qmax)
+ a)))
+
+(defun math-nlfit-find-logistic-parameters (qdata pdata tdata)
+ (let* ((a (math-nlfit-find-qmax qdata pdata tdata))
+ (newqdata
+ (mapcar (lambda (q) (calcFunc-ln (math-sub (math-div a q) 1)))
+ qdata))
+ (bandc (math-nlfit-least-squares tdata newqdata)))
+ (list
+ a
+ (calcFunc-exp (nth 0 bandc))
+ (nth 1 bandc))))
+
+;;; Next, given the pdata and tdata, we can find the qdata if we know q0.
+;;; We first try to find q0, using the fact that when p takes on its largest
+;;; value, q is half of its maximum value. So we'll find the maximum value
+;;; of q given various q0, and use bisection to approximate the correct q0.
+
+;;; First, given pdata and tdata, find what half of qmax would be if q0=0.
+
+(defun math-nlfit-find-qmaxhalf (pdata tdata)
+ (let ((pmax (math-max-list (car pdata) (cdr pdata)))
+ (qmh 0))
+ (while (math-lessp (car pdata) pmax)
+ (setq qmh
+ (math-add qmh
+ (math-mul
+ (math-mul
+ '(float 5 -1)
+ (math-add (nth 1 pdata) (nth 0 pdata)))
+ (math-sub (nth 1 tdata)
+ (nth 0 tdata)))))
+ (setq pdata (cdr pdata))
+ (setq tdata (cdr tdata)))
+ qmh))
+
+;;; Next, given pdata and tdata, approximate q0.
+
+(defun math-nlfit-find-q0 (pdata tdata)
+ (let* ((qhalf (math-nlfit-find-qmaxhalf pdata tdata))
+ (q0 (math-mul 2 qhalf))
+ (qdata (math-nlfit-get-cumul-from-rates tdata pdata q0)))
+ (while (math-lessp (math-nlfit-find-qmax
+ (mapcar
+ (lambda (q) (math-add q0 q))
+ qdata)
+ pdata tdata)
+ (math-mul
+ '(float 5 -1)
+ (math-add
+ q0
+ qhalf)))
+ (setq q0 (math-add q0 qhalf)))
+ (let* ((qmin (math-sub q0 qhalf))
+ (qmax q0)
+ (qt (math-nlfit-find-qmax
+ (mapcar
+ (lambda (q) (math-add q0 q))
+ qdata)
+ pdata tdata))
+ (i 0))
+ (while (< i 10)
+ (setq q0 (math-mul '(float 5 -1) (math-add qmin qmax)))
+ (if (math-lessp
+ (math-nlfit-find-qmax
+ (mapcar
+ (lambda (q) (math-add q0 q))
+ qdata)
+ pdata tdata)
+ (math-mul '(float 5 -1) (math-add qhalf q0)))
+ (setq qmin q0)
+ (setq qmax q0))
+ (setq i (1+ i)))
+ (math-mul '(float 5 -1) (math-add qmin qmax)))))
+
+;;; To improve the approximations to the parameters, we can use
+;;; Marquardt method as described in Schwarz's book.
+
+;;; Small numbers used in the Givens algorithm
+(defvar math-nlfit-delta '(float 1 -8))
+
+(defvar math-nlfit-epsilon '(float 1 -5))
+
+;;; Maximum number of iterations
+(defvar math-nlfit-max-its 100)
+
+;;; Next, we need some functions for dealing with vectors and
+;;; matrices. For convenience, we'll work with Emacs lists
+;;; as vectors, rather than Calc's vectors.
+
+(defun math-nlfit-set-elt (vec i x)
+ (setcar (nthcdr (1- i) vec) x))
+
+(defun math-nlfit-get-elt (vec i)
+ (nth (1- i) vec))
+
+(defun math-nlfit-make-matrix (i j)
+ (let ((row (make-list j 0))
+ (mat nil)
+ (k 0))
+ (while (< k i)
+ (setq mat (cons (copy-list row) mat))
+ (setq k (1+ k)))
+ mat))
+
+(defun math-nlfit-set-matx-elt (mat i j x)
+ (setcar (nthcdr (1- j) (nth (1- i) mat)) x))
+
+(defun math-nlfit-get-matx-elt (mat i j)
+ (nth (1- j) (nth (1- i) mat)))
+
+;;; For solving the linearized system.
+;;; (The Givens method, from Schwarz.)
+
+(defun math-nlfit-givens (C d)
+ (let* ((C (copy-tree C))
+ (d (copy-tree d))
+ (n (length (car C)))
+ (N (length C))
+ (j 1)
+ (r (make-list N 0))
+ (x (make-list N 0))
+ w
+ gamma
+ sigma
+ rho)
+ (while (<= j n)
+ (let ((i (1+ j)))
+ (while (<= i N)
+ (let ((cij (math-nlfit-get-matx-elt C i j))
+ (cjj (math-nlfit-get-matx-elt C j j)))
+ (when (not (math-equal 0 cij))
+ (if (math-lessp (calcFunc-abs cjj)
+ (math-mul math-nlfit-delta (calcFunc-abs cij)))
+ (setq w (math-neg cij)
+ gamma 0
+ sigma 1
+ rho 1)
+ (setq w (math-mul
+ (calcFunc-sign cjj)
+ (calcFunc-sqrt
+ (math-add
+ (math-mul cjj cjj)
+ (math-mul cij cij))))
+ gamma (math-div cjj w)
+ sigma (math-neg (math-div cij w)))
+ (if (math-lessp (calcFunc-abs sigma) gamma)
+ (setq rho sigma)
+ (setq rho (math-div (calcFunc-sign sigma) gamma))))
+ (setq cjj w
+ cij rho)
+ (math-nlfit-set-matx-elt C j j w)
+ (math-nlfit-set-matx-elt C i j rho)
+ (let ((k (1+ j)))
+ (while (<= k n)
+ (let* ((cjk (math-nlfit-get-matx-elt C j k))
+ (cik (math-nlfit-get-matx-elt C i k))
+ (h (math-sub
+ (math-mul gamma cjk) (math-mul sigma cik))))
+ (setq cik (math-add
+ (math-mul sigma cjk)
+ (math-mul gamma cik)))
+ (setq cjk h)
+ (math-nlfit-set-matx-elt C i k cik)
+ (math-nlfit-set-matx-elt C j k cjk)
+ (setq k (1+ k)))))
+ (let* ((di (math-nlfit-get-elt d i))
+ (dj (math-nlfit-get-elt d j))
+ (h (math-sub
+ (math-mul gamma dj)
+ (math-mul sigma di))))
+ (setq di (math-add
+ (math-mul sigma dj)
+ (math-mul gamma di)))
+ (setq dj h)
+ (math-nlfit-set-elt d i di)
+ (math-nlfit-set-elt d j dj))))
+ (setq i (1+ i))))
+ (setq j (1+ j)))
+ (let ((i n)
+ s)
+ (while (>= i 1)
+ (math-nlfit-set-elt r i 0)
+ (setq s (math-nlfit-get-elt d i))
+ (let ((k (1+ i)))
+ (while (<= k n)
+ (setq s (math-add s (math-mul (math-nlfit-get-matx-elt C i k)
+ (math-nlfit-get-elt x k))))
+ (setq k (1+ k))))
+ (math-nlfit-set-elt x i
+ (math-neg
+ (math-div s
+ (math-nlfit-get-matx-elt C i i))))
+ (setq i (1- i))))
+ (let ((i (1+ n)))
+ (while (<= i N)
+ (math-nlfit-set-elt r i (math-nlfit-get-elt d i))
+ (setq i (1+ i))))
+ (let ((j n))
+ (while (>= j 1)
+ (let ((i N))
+ (while (>= i (1+ j))
+ (setq rho (math-nlfit-get-matx-elt C i j))
+ (if (math-equal rho 1)
+ (setq gamma 0
+ sigma 1)
+ (if (math-lessp (calcFunc-abs rho) 1)
+ (setq sigma rho
+ gamma (calcFunc-sqrt
+ (math-sub 1 (math-mul sigma sigma))))
+ (setq gamma (math-div 1 (calcFunc-abs rho))
+ sigma (math-mul (calcFunc-sign rho)
+ (calcFunc-sqrt
+ (math-sub 1 (math-mul gamma gamma)))))))
+ (let ((ri (math-nlfit-get-elt r i))
+ (rj (math-nlfit-get-elt r j))
+ h)
+ (setq h (math-add (math-mul gamma rj)
+ (math-mul sigma ri)))
+ (setq ri (math-sub
+ (math-mul gamma ri)
+ (math-mul sigma rj)))
+ (setq rj h)
+ (math-nlfit-set-elt r i ri)
+ (math-nlfit-set-elt r j rj))
+ (setq i (1- i))))
+ (setq j (1- j))))
+
+ x))
+
+(defun math-nlfit-jacobian (grad xlist parms &optional slist)
+ (let ((j nil))
+ (while xlist
+ (let ((row (apply grad (car xlist) parms)))
+ (setq j
+ (cons
+ (if slist
+ (mapcar (lambda (x) (math-div x (car slist))) row)
+ row)
+ j)))
+ (setq slist (cdr slist))
+ (setq xlist (cdr xlist)))
+ (reverse j)))
+
+(defun math-nlfit-make-ident (l n)
+ (let ((m (math-nlfit-make-matrix n n))
+ (i 1))
+ (while (<= i n)
+ (math-nlfit-set-matx-elt m i i l)
+ (setq i (1+ i)))
+ m))
+
+(defun math-nlfit-chi-sq (xlist ylist parms fn &optional slist)
+ (let ((cs 0))
+ (while xlist
+ (let ((c
+ (math-sub
+ (apply fn (car xlist) parms)
+ (car ylist))))
+ (if slist
+ (setq c (math-div c (car slist))))
+ (setq cs
+ (math-add cs
+ (math-mul c c))))
+ (setq xlist (cdr xlist))
+ (setq ylist (cdr ylist))
+ (setq slist (cdr slist)))
+ cs))
+
+(defun math-nlfit-init-lambda (C)
+ (let ((l 0)
+ (n (length (car C)))
+ (N (length C)))
+ (while C
+ (let ((row (car C)))
+ (while row
+ (setq l (math-add l (math-mul (car row) (car row))))
+ (setq row (cdr row))))
+ (setq C (cdr C)))
+ (calcFunc-sqrt (math-div l (math-mul n N)))))
+
+(defun math-nlfit-make-Ctilda (C l)
+ (let* ((n (length (car C)))
+ (bot (math-nlfit-make-ident l n)))
+ (append C bot)))
+
+(defun math-nlfit-make-d (fn xdata ydata parms &optional sdata)
+ (let ((d nil))
+ (while xdata
+ (setq d (cons
+ (let ((dd (math-sub (apply fn (car xdata) parms)
+ (car ydata))))
+ (if sdata (math-div dd (car sdata)) dd))
+ d))
+ (setq xdata (cdr xdata))
+ (setq ydata (cdr ydata))
+ (setq sdata (cdr sdata)))
+ (reverse d)))
+
+(defun math-nlfit-make-dtilda (d n)
+ (append d (make-list n 0)))
+
+(defun math-nlfit-fit (xlist ylist parms fn grad &optional slist)
+ (let*
+ ((C (math-nlfit-jacobian grad xlist parms slist))
+ (d (math-nlfit-make-d fn xlist ylist parms slist))
+ (chisq (math-nlfit-chi-sq xlist ylist parms fn slist))
+ (lambda (math-nlfit-init-lambda C))
+ (really-done nil)
+ (iters 0))
+ (while (and
+ (not really-done)
+ (< iters math-nlfit-max-its))
+ (setq iters (1+ iters))
+ (let ((done nil))
+ (while (not done)
+ (let* ((Ctilda (math-nlfit-make-Ctilda C lambda))
+ (dtilda (math-nlfit-make-dtilda d (length (car C))))
+ (zeta (math-nlfit-givens Ctilda dtilda))
+ (newparms (mapcar* 'math-add (copy-tree parms) zeta))
+ (newchisq (math-nlfit-chi-sq xlist ylist newparms fn slist)))
+ (if (math-lessp newchisq chisq)
+ (progn
+ (if (math-lessp
+ (math-div
+ (math-sub chisq newchisq) newchisq) math-nlfit-epsilon)
+ (setq really-done t))
+ (setq lambda (math-div lambda 10))
+ (setq chisq newchisq)
+ (setq parms newparms)
+ (setq done t))
+ (setq lambda (math-mul lambda 10)))))
+ (setq C (math-nlfit-jacobian grad xlist parms slist))
+ (setq d (math-nlfit-make-d fn xlist ylist parms slist))))
+ (list chisq parms)))
+
+;;; The functions that describe our models, and their gradients.
+
+(defun math-nlfit-s-logistic-fn (x a b c)
+ (math-div a (math-add 1 (math-mul b (calcFunc-exp (math-mul c x))))))
+
+(defun math-nlfit-s-logistic-grad (x a b c)
+ (let* ((ep (calcFunc-exp (math-mul c x)))
+ (d (math-add 1 (math-mul b ep)))
+ (d2 (math-mul d d)))
+ (list
+ (math-div 1 d)
+ (math-neg (math-div (math-mul a ep) d2))
+ (math-neg (math-div (math-mul a (math-mul b (math-mul x ep))) d2)))))
+
+(defun math-nlfit-b-logistic-fn (x a c d)
+ (let ((ex (calcFunc-exp (math-mul c (math-sub x d)))))
+ (math-div
+ (math-mul a ex)
+ (math-sqr
+ (math-add
+ 1 ex)))))
+
+(defun math-nlfit-b-logistic-grad (x a c d)
+ (let* ((ex (calcFunc-exp (math-mul c (math-sub x d))))
+ (ex1 (math-add 1 ex))
+ (xd (math-sub x d)))
+ (list
+ (math-div
+ ex
+ (math-sqr ex1))
+ (math-sub
+ (math-div
+ (math-mul a (math-mul xd ex))
+ (math-sqr ex1))
+ (math-div
+ (math-mul 2 (math-mul a (math-mul xd (math-sqr ex))))
+ (math-pow ex1 3)))
+ (math-sub
+ (math-div
+ (math-mul 2 (math-mul a (math-mul c (math-sqr ex))))
+ (math-pow ex1 3))
+ (math-div
+ (math-mul a (math-mul c ex))
+ (math-sqr ex1))))))
+
+;;; Functions to get the final covariance matrix and the sdevs
+
+(defun math-nlfit-find-covar (grad xlist pparms)
+ (let ((j nil))
+ (while xlist
+ (setq j (cons (cons 'vec (apply grad (car xlist) pparms)) j))
+ (setq xlist (cdr xlist)))
+ (setq j (cons 'vec (reverse j)))
+ (setq j
+ (math-mul
+ (calcFunc-trn j) j))
+ (calcFunc-inv j)))
+
+(defun math-nlfit-get-sigmas (grad xlist pparms chisq)
+ (let* ((sgs nil)
+ (covar (math-nlfit-find-covar grad xlist pparms))
+ (n (1- (length covar)))
+ (N (length xlist))
+ (i 1))
+ (when (> N n)
+ (while (<= i n)
+ (setq sgs (cons (calcFunc-sqrt (nth i (nth i covar))) sgs))
+ (setq i (1+ i)))
+ (setq sgs (reverse sgs)))
+ (list sgs covar)))
+
+;;; Now the Calc functions
+
+(defun math-nlfit-s-logistic-params (xdata ydata)
+ (let ((pdata (math-nlfit-get-rates-from-cumul xdata ydata)))
+ (math-nlfit-find-logistic-parameters ydata pdata xdata)))
+
+(defun math-nlfit-b-logistic-params (xdata ydata)
+ (let* ((q0 (math-nlfit-find-q0 ydata xdata))
+ (qdata (math-nlfit-get-cumul-from-rates xdata ydata q0))
+ (abc (math-nlfit-find-logistic-parameters qdata ydata xdata))
+ (B (nth 1 abc))
+ (C (nth 2 abc))
+ (A (math-neg
+ (math-mul
+ (nth 0 abc)
+ (math-mul B C))))
+ (D (math-neg (math-div (calcFunc-ln B) C)))
+ (A (math-div A B)))
+ (list A C D)))
+
+;;; Some functions to turn the parameter lists and variables
+;;; into the appropriate functions.
+
+(defun math-nlfit-s-logistic-solnexpr (pms var)
+ (let ((a (nth 0 pms))
+ (b (nth 1 pms))
+ (c (nth 2 pms)))
+ (list '/ a
+ (list '+
+ 1
+ (list '*
+ b
+ (calcFunc-exp
+ (list '*
+ c
+ var)))))))
+
+(defun math-nlfit-b-logistic-solnexpr (pms var)
+ (let ((a (nth 0 pms))
+ (c (nth 1 pms))
+ (d (nth 2 pms)))
+ (list '/
+ (list '*
+ a
+ (calcFunc-exp
+ (list '*
+ c
+ (list '- var d))))
+ (list '^
+ (list '+
+ 1
+ (calcFunc-exp
+ (list '*
+ c
+ (list '- var d))))
+ 2))))
+
+(defun math-nlfit-enter-result (n prefix vals)
+ (setq calc-aborted-prefix prefix)
+ (calc-pop-push-record-list n prefix vals)
+ (calc-handle-whys))
+
+(defun math-nlfit-fit-curve (fn grad solnexpr initparms &optional sdv)
+ (calc-slow-wrapper
+ (let* ((sdevv (or (eq sdv 'calcFunc-efit) (eq sdv 'calcFunc-xfit)))
+ (calc-display-working-message nil)
+ (data (calc-top 1))
+ (xdata (cdr (car (cdr data))))
+ (ydata (cdr (car (cdr (cdr data)))))
+ (sdata (if (math-contains-sdev-p ydata)
+ (mapcar (lambda (x) (math-get-sdev x t)) ydata)
+ nil))
+ (ydata (mapcar (lambda (x) (math-get-value x)) ydata))
+ (calc-curve-varnames nil)
+ (calc-curve-coefnames nil)
+ (calc-curve-nvars 1)
+ (fitvars (calc-get-fit-variables 1 3))
+ (var (nth 1 calc-curve-varnames))
+ (parms (cdr calc-curve-coefnames))
+ (parmguess
+ (funcall initparms xdata ydata))
+ (fit (math-nlfit-fit xdata ydata parmguess fn grad sdata))
+ (finalparms (nth 1 fit))
+ (sigmacovar
+ (if sdevv
+ (math-nlfit-get-sigmas grad xdata finalparms (nth 0 fit))))
+ (sigmas
+ (if sdevv
+ (nth 0 sigmacovar)))
+ (finalparms
+ (if sigmas
+ (mapcar* (lambda (x y) (list 'sdev x y)) finalparms sigmas)
+ finalparms))
+ (soln (funcall solnexpr finalparms var)))
+ (let ((calc-fit-to-trail t)
+ (traillist nil))
+ (while parms
+ (setq traillist (cons (list 'calcFunc-eq (car parms) (car finalparms))
+ traillist))
+ (setq finalparms (cdr finalparms))
+ (setq parms (cdr parms)))
+ (setq traillist (calc-normalize (cons 'vec (nreverse traillist))))
+ (cond ((eq sdv 'calcFunc-efit)
+ (math-nlfit-enter-result 1 "efit" soln))
+ ((eq sdv 'calcFunc-xfit)
+ (let (sln)
+ (setq sln
+ (list 'vec
+ soln
+ traillist
+ (nth 1 sigmacovar)
+ '(vec)
+ (nth 0 fit)
+ (let ((n (length xdata))
+ (m (length finalparms)))
+ (if (and sdata (> n m))
+ (calcFunc-utpc (nth 0 fit)
+ (- n m))
+ '(var nan var-nan)))))
+ (math-nlfit-enter-result 1 "xfit" sln)))
+ (t
+ (math-nlfit-enter-result 1 "fit" soln)))
+ (calc-record traillist "parm")))))
+
+(defun calc-fit-s-shaped-logistic-curve (arg)
+ (interactive "P")
+ (math-nlfit-fit-curve 'math-nlfit-s-logistic-fn
+ 'math-nlfit-s-logistic-grad
+ 'math-nlfit-s-logistic-solnexpr
+ 'math-nlfit-s-logistic-params
+ arg))
+
+(defun calc-fit-bell-shaped-logistic-curve (arg)
+ (interactive "P")
+ (math-nlfit-fit-curve 'math-nlfit-b-logistic-fn
+ 'math-nlfit-b-logistic-grad
+ 'math-nlfit-b-logistic-solnexpr
+ 'math-nlfit-b-logistic-params
+ arg))
+
+(defun calc-fit-hubbert-linear-curve (&optional sdv)
+ (calc-slow-wrapper
+ (let* ((sdevv (or (eq sdv 'calcFunc-efit) (eq sdv 'calcFunc-xfit)))
+ (calc-display-working-message nil)
+ (data (calc-top 1))
+ (qdata (cdr (car (cdr data))))
+ (pdata (cdr (car (cdr (cdr data)))))
+ (sdata (if (math-contains-sdev-p pdata)
+ (mapcar (lambda (x) (math-get-sdev x t)) pdata)
+ nil))
+ (pdata (mapcar (lambda (x) (math-get-value x)) pdata))
+ (poverqdata (mapcar* 'math-div pdata qdata))
+ (parmvals (math-nlfit-least-squares qdata poverqdata sdata sdevv))
+ (finalparms (list (nth 0 parmvals)
+ (math-neg
+ (math-div (nth 0 parmvals)
+ (nth 1 parmvals)))))
+ (calc-curve-varnames nil)
+ (calc-curve-coefnames nil)
+ (calc-curve-nvars 1)
+ (fitvars (calc-get-fit-variables 1 2))
+ (var (nth 1 calc-curve-varnames))
+ (parms (cdr calc-curve-coefnames))
+ (soln (list '* (nth 0 finalparms)
+ (list '- 1
+ (list '/ var (nth 1 finalparms))))))
+ (let ((calc-fit-to-trail t)
+ (traillist nil))
+ (setq traillist
+ (list 'vec
+ (list 'calcFunc-eq (nth 0 parms) (nth 0 finalparms))
+ (list 'calcFunc-eq (nth 1 parms) (nth 1 finalparms))))
+ (cond ((eq sdv 'calcFunc-efit)
+ (math-nlfit-enter-result 1 "efit" soln))
+ ((eq sdv 'calcFunc-xfit)
+ (let (sln
+ (chisq
+ (math-nlfit-chi-sq
+ qdata poverqdata
+ (list (nth 1 (nth 0 finalparms))
+ (nth 1 (nth 1 finalparms)))
+ (lambda (x a b)
+ (math-mul a
+ (math-sub
+ 1
+ (math-div x b))))
+ sdata)))
+ (setq sln
+ (list 'vec
+ soln
+ traillist
+ (nth 2 parmvals)
+ (list
+ 'vec
+ '(calcFunc-fitdummy 1)
+ (list 'calcFunc-neg
+ (list '/
+ '(calcFunc-fitdummy 1)
+ '(calcFunc-fitdummy 2))))
+ chisq
+ (let ((n (length qdata)))
+ (if (and sdata (> n 2))
+ (calcFunc-utpc
+ chisq
+ (- n 2))
+ '(var nan var-nan)))))
+ (math-nlfit-enter-result 1 "xfit" sln)))
+ (t
+ (math-nlfit-enter-result 1 "fit" soln)))
+ (calc-record traillist "parm")))))
+
+(provide 'calc-nlfit)
+
+;; arch-tag: 6eba3cd6-f48b-4a84-8174-10c15a024928
diff --git a/lisp/calc/calc-poly.el b/lisp/calc/calc-poly.el
index e94a8e0c07a..de2cf2e0166 100644
--- a/lisp/calc/calc-poly.el
+++ b/lisp/calc/calc-poly.el
@@ -982,10 +982,16 @@
(defun math-padded-polynomial (expr var deg)
+ "Return a polynomial as list of coefficients.
+If EXPR is of the form \"a + bx + cx^2 + ...\" in the variable VAR, return
+the list (a b c ...) with at least DEG elements, else return NIL."
(let ((p (math-is-polynomial expr var deg)))
(append p (make-list (- deg (length p)) 0))))
(defun math-partial-fractions (r den var)
+ "Return R divided by DEN expressed in partial fractions of VAR.
+All whole factors of DEN have already been split off from R.
+If no partial fraction representation can be found, return nil."
(let* ((fden (calcFunc-factors den var))
(tdeg (math-polynomial-p den var))
(fp fden)
diff --git a/lisp/calc/calc-prog.el b/lisp/calc/calc-prog.el
index 4e048a9340e..4ceeeba3b42 100644
--- a/lisp/calc/calc-prog.el
+++ b/lisp/calc/calc-prog.el
@@ -568,7 +568,7 @@
(set-buffer calc-buf)
(let ((calc-user-parse-tables nil)
(calc-language nil)
- (math-expr-opers math-standard-opers)
+ (math-expr-opers (math-standard-ops))
(calc-hashes-used 0))
(math-read-expr
(if (string-match ",[ \t]*\\'" str)
diff --git a/lisp/calc/calc-store.el b/lisp/calc/calc-store.el
index 75a17661746..e439150814a 100644
--- a/lisp/calc/calc-store.el
+++ b/lisp/calc/calc-store.el
@@ -127,7 +127,7 @@
(cond
((and (memq var '(var-e var-i var-pi var-phi var-gamma))
(eq (car-safe old) 'special-const))
- (setq msg (format " (Note: Built-in definition of %s has been lost)"
+ (setq msg (format " (Note: Built-in definition of %s has been lost)"
(calc-var-name var))))
((and (memq var '(var-inf var-uinf var-nan))
(null old))
@@ -172,28 +172,28 @@
()
(setq calc-var-name-map (copy-keymap minibuffer-local-completion-map))
(define-key calc-var-name-map " " 'self-insert-command)
- (mapcar (function
- (lambda (x)
- (define-key calc-var-name-map (char-to-string x)
- 'calcVar-digit)))
- "0123456789")
- (mapcar (function
- (lambda (x)
- (define-key calc-var-name-map (char-to-string x)
- 'calcVar-oper)))
- "+-*/^|"))
+ (mapc (function
+ (lambda (x)
+ (define-key calc-var-name-map (char-to-string x)
+ 'calcVar-digit)))
+ "0123456789")
+ (mapc (function
+ (lambda (x)
+ (define-key calc-var-name-map (char-to-string x)
+ 'calcVar-oper)))
+ "+-*/^|"))
(defvar calc-store-opers)
(defun calc-read-var-name (prompt &optional calc-store-opers)
(setq calc-given-value nil
calc-aborted-prefix nil)
- (let ((var (concat
+ (let ((var (concat
"var-"
(let ((minibuffer-completion-table
- (mapcar (lambda (x) (substring x 4))
+ (mapcar (lambda (x) (substring x 4))
(all-completions "var-" obarray)))
- (minibuffer-completion-predicate
+ (minibuffer-completion-predicate
(lambda (x) (boundp (intern (concat "var-" x)))))
(minibuffer-completion-confirm t))
(read-from-minibuffer prompt nil calc-var-name-map nil)))))
@@ -401,7 +401,7 @@
(unless (string= sconst "")
(let ((value (cdr (assoc sconst sc))))
(or var (setq var (calc-read-var-name
- (format "Copy special constant %s, to: "
+ (format "Copy special constant %s, to: "
sconst))))
(if var
(let ((msg (calc-store-value var value "")))
@@ -417,7 +417,7 @@
(or value
(error "No such variable: \"%s\"" (calc-var-name var1)))
(or var2 (setq var2 (calc-read-var-name
- (format "Copy variable: %s, to: "
+ (format "Copy variable: %s, to: "
(calc-var-name var1)))))
(if var2
(let ((msg (calc-store-value var2 value "")))
diff --git a/lisp/calc/calc-stuff.el b/lisp/calc/calc-stuff.el
index a1f50816519..5dcc5365d10 100644
--- a/lisp/calc/calc-stuff.el
+++ b/lisp/calc/calc-stuff.el
@@ -191,7 +191,7 @@ With a prefix, push that prefix as a number onto the stack."
math-eval-rules-cache-tag t
math-format-date-cache nil
math-holidays-cache-tag t)
- (mapcar (function (lambda (x) (set x -100))) math-cache-list)
+ (mapc (function (lambda (x) (set x -100))) math-cache-list)
(unless inhibit-msg
(message "All internal calculator caches have been reset"))))
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el
index 82769a66b13..a7c4b20e30d 100644
--- a/lisp/calc/calc-units.el
+++ b/lisp/calc/calc-units.el
@@ -40,45 +40,47 @@
;;; with some additions by Przemek Klosowski (przemek@rrdstrad.nist.gov)
;;; Updated April 2002 by Jochen Küpper
-;;; for CODATA 1998 see one of
-;;; - Journal of Physical and Chemical Reference Data, 28(6), 1713-1852, 1999.
-;;; - Reviews of Modern Physics, 72(2), 351-495, 2000.
-;;; for CODATA 2005 see
-;;; - http://physics.nist.gov/cuu/Constants/index.html
+;;; Updated August 2007, using
+;;; CODATA (http://physics.nist.gov/cuu/Constants/index.html)
+;;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html)
+;;; ESUWM (Encyclopaedia of Scientific Units, Weights and
+;;; Measures, by François Cardarelli)
+;;; All conversions are exact unless otherwise noted.
(defvar math-standard-units
'( ;; Length
( m nil "*Meter" )
- ( in "2.54 cm" "Inch" )
+ ( in "254*10^(-2) cm" "Inch" )
( ft "12 in" "Foot" )
( yd "3 ft" "Yard" )
( mi "5280 ft" "Mile" )
- ( au "149597870691 m" "Astronomical Unit" ) ;; NASA JPL (http://neo.jpl.nasa.gov/glossary/au.html)
- ( lyr "9460536207068016 m" "Light Year" )
- ( pc "206264.80625 au" "Parsec" )
+ ( au "149597870691. m" "Astronomical Unit" )
+ ;; (approx) NASA JPL (http://neo.jpl.nasa.gov/glossary/au.html)
+ ( lyr "c yr" "Light Year" )
+ ( pc "3.0856775854e16 m" "Parsec" ) ;; (approx) ESUWM
( nmi "1852 m" "Nautical Mile" )
( fath "6 ft" "Fathom" )
( mu "1 um" "Micron" )
( mil "in/1000" "Mil" )
( point "in/72" "Point (1/72 inch)" )
- ( Ang "1e-10 m" "Angstrom" )
+ ( Ang "10^(-10) m" "Angstrom" )
( mfi "mi+ft+in" "Miles + feet + inches" )
;; TeX lengths
- ( texpt "in/72.27" "Point (TeX conventions)" )
+ ( texpt "(100/7227) in" "Point (TeX conventions)" )
( texpc "12 texpt" "Pica" )
( texbp "point" "Big point (TeX conventions)" )
- ( texdd "1238/1157 texpt" "Didot point" )
+ ( texdd "(1238/1157) texpt" "Didot point" )
( texcc "12 texdd" "Cicero" )
- ( texsp "1/66536 texpt" "Scaled TeX point" )
+ ( texsp "(1/65536) texpt" "Scaled TeX point" )
;; Area
( hect "10000 m^2" "*Hectare" )
( a "100 m^2" "Are")
( acre "mi^2 / 640" "Acre" )
- ( b "1e-28 m^2" "Barn" )
+ ( b "10^(-28) m^2" "Barn" )
;; Volume
- ( L "1e-3 m^3" "*Liter" )
+ ( L "10^(-3) m^3" "*Liter" )
( l "L" "Liter" )
( gal "4 qt" "US Gallon" )
( qt "2 pt" "Quart" )
@@ -87,10 +89,12 @@
( ozfl "2 tbsp" "Fluid Ounce" )
( floz "2 tbsp" "Fluid Ounce" )
( tbsp "3 tsp" "Tablespoon" )
- ( tsp "4.92892159375 ml" "Teaspoon" )
+ ;; ESUWM defines a US gallon as 231 in^3.
+ ;; That gives the following exact value for tsp.
+ ( tsp "492892159375*10^(-11) ml" "Teaspoon" )
( vol "tsp+tbsp+ozfl+cup+pt+qt+gal" "Gallons + ... + teaspoons" )
- ( galC "4.54609 L" "Canadian Gallon" )
- ( galUK "4.546092 L" "UK Gallon" )
+ ( galC "galUK" "Canadian Gallon" )
+ ( galUK "454609*10^(-5) L" "UK Gallon" ) ;; NIST
;; Time
( s nil "*Second" )
@@ -100,44 +104,44 @@
( day "24 hr" "Day" )
( wk "7 day" "Week" )
( hms "wk+day+hr+min+s" "Hours, minutes, seconds" )
- ( yr "365.25 day" "Year" )
+ ( yr "365.25 day" "Year" ) ;; (approx, but keep)
( Hz "1/s" "Hertz" )
;; Speed
( mph "mi/hr" "*Miles per hour" )
( kph "km/hr" "Kilometers per hour" )
( knot "nmi/hr" "Knot" )
- ( c "299792458 m/s" "Speed of light" ) ;;; CODATA 2005
+ ( c "299792458 m/s" "Speed of light" ) ;;; CODATA
;; Acceleration
- ( ga "9.80665 m/s^2" "*\"g\" acceleration" ) ;; CODATA 2005
+ ( ga "980665*10^(-5) m/s^2" "*\"g\" acceleration" ) ;; CODATA
;; Mass
( g nil "*Gram" )
( lb "16 oz" "Pound (mass)" )
- ( oz "28.349523125 g" "Ounce (mass)" )
+ ( oz "28349523125*10^(-9) g" "Ounce (mass)" ) ;; ESUWM
( ton "2000 lb" "Ton" )
( tpo "ton+lb+oz" "Tons + pounds + ounces (mass)" )
( t "1000 kg" "Metric ton" )
- ( tonUK "1016.0469088 kg" "UK ton" )
+ ( tonUK "10160469088*10^(-7) kg" "UK ton" ) ;; ESUWM
( lbt "12 ozt" "Troy pound" )
- ( ozt "31.103475 g" "Troy ounce" )
- ( ct ".2 g" "Carat" )
- ( u "1.66053886e-27 kg" "Unified atomic mass" ) ;; CODATA 2005
+ ( ozt "31.10347680 g" "Troy ounce" ) ;; (approx) ESUWM
+ ( ct "(2/10) g" "Carat" ) ;; ESUWM
+ ( u "1.660538782e-27 kg" "Unified atomic mass" );;(approx) CODATA
;; Force
( N "m kg/s^2" "*Newton" )
- ( dyn "1e-5 N" "Dyne" )
+ ( dyn "10^(-5) N" "Dyne" )
( gf "ga g" "Gram (force)" )
- ( lbf "4.44822161526 N" "Pound (force)" )
+ ( lbf "ga lb" "Pound (force)" )
( kip "1000 lbf" "Kilopound (force)" )
- ( pdl "0.138255 N" "Poundal" )
+ ( pdl "138254954376*10^(-12) N" "Poundal" ) ;; ESUWM
;; Energy
( J "N m" "*Joule" )
- ( erg "1e-7 J" "Erg" )
- ( cal "4.1868 J" "International Table Calorie" )
- ( Btu "1055.05585262 J" "International Table Btu" )
+ ( erg "10^(-7) J" "Erg" )
+ ( cal "4.18674 J" "International Table Calorie" );;(approx) ESUWM
+ ( Btu "105505585262*10^(-8) J" "International Table Btu" ) ;; ESUWM
( eV "ech V" "Electron volt" )
( ev "eV" "Electron volt" )
( therm "105506000 J" "EEC therm" )
@@ -151,7 +155,7 @@
;; Power
( W "J/s" "*Watt" )
- ( hp "745.7 W" "Horsepower" )
+ ( hp "745.699871581 W" "Horsepower" ) ;;(approx) ESUWM
;; Temperature
( K nil "*Degree Kelvin" K )
@@ -164,24 +168,24 @@
;; Pressure
( Pa "N/m^2" "*Pascal" )
- ( bar "1e5 Pa" "Bar" )
- ( atm "101325 Pa" "Standard atmosphere" ) ;; CODATA 2005
- ( Torr " 1.333224e2 Pa" "Torr" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html)
+ ( bar "10^5 Pa" "Bar" )
+ ( atm "101325 Pa" "Standard atmosphere" ) ;; CODATA
+ ( Torr "1.333224e2 Pa" "Torr" ) ;;(approx) NIST
( mHg "1000 Torr" "Meter of mercury" )
- ( inHg "25.4 mmHg" "Inch of mercury" )
- ( inH2O "2.490889e2 Pa" "Inch of water" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html)
- ( psi "6894.75729317 Pa" "Pound per square inch" )
+ ( inHg "254*10^(-1) mmHg" "Inch of mercury" )
+ ( inH2O "2.490889e2 Pa" "Inch of water" ) ;;(approx) NIST
+ ( psi "lbf/in^2" "Pounds per square inch" )
;; Viscosity
- ( P "0.1 Pa s" "*Poise" )
- ( St "1e-4 m^2/s" "Stokes" )
+ ( P "(1/10) Pa s" "*Poise" )
+ ( St "10^(-4) m^2/s" "Stokes" )
;; Electromagnetism
( A nil "*Ampere" )
( C "A s" "Coulomb" )
( Fdy "ech Nav" "Faraday" )
- ( e "1.60217653e-19 C" "Elementary charge" ) ;; CODATA 2005
- ( ech "1.60217653e-19 C" "Elementary charge" ) ;; CODATA 2005
+ ( e "ech" "Elementary charge" )
+ ( ech "1.602176487e-19 C" "Elementary charge" ) ;;(approx) CODATA
( V "W/A" "Volt" )
( ohm "V/A" "Ohm" )
( mho "A/V" "Mho" )
@@ -189,26 +193,26 @@
( F "C/V" "Farad" )
( H "Wb/A" "Henry" )
( T "Wb/m^2" "Tesla" )
- ( Gs "1e-4 T" "Gauss" )
+ ( Gs "10^(-4) T" "Gauss" )
( Wb "V s" "Weber" )
;; Luminous intensity
( cd nil "*Candela" )
- ( sb "1e4 cd/m^2" "Stilb" )
+ ( sb "10000 cd/m^2" "Stilb" )
( lm "cd sr" "Lumen" )
( lx "lm/m^2" "Lux" )
- ( ph "1e4 lx" "Phot" )
- ( fc "10.76391 lx" "Footcandle" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html)
- ( lam "1e4 lm/m^2" "Lambert" )
- ( flam "3.426259 cd/m^2" "Footlambert" ) ;; NIST (http://physics.nist.gov/Pubs/SP811/appenB9.html)
+ ( ph "10000 lx" "Phot" )
+ ( fc "10.76391 lx" "Footcandle" ) ;;(approx) NIST
+ ( lam "10000 lm/m^2" "Lambert" )
+ ( flam "3.426259 cd/m^2" "Footlambert" ) ;;(approx) NIST
;; Radioactivity
( Bq "1/s" "*Becquerel" )
- ( Ci "3.7e10 Bq" "Curie" )
+ ( Ci "37*10^9 Bq" "Curie" ) ;; ESUWM
( Gy "J/kg" "Gray" )
( Sv "Gy" "Sievert" )
- ( R "2.58e-4 C/kg" "Roentgen" )
- ( rd ".01 Gy" "Rad" )
+ ( R "258*10^(-6) C/kg" "Roentgen" ) ;; NIST
+ ( rd "(1/100) Gy" "Rad" )
( rem "rd" "Rem" )
;; Amount of substance
@@ -228,23 +232,24 @@
( sr nil "*Steradian" )
;; Other physical quantities
- ( h "6.6260693e-34 J s" "*Planck's constant" ) ;; CODATA 2005
- ( hbar "h / 2 pi" "Planck's constant" )
- ( mu0 "4 pi 1e-7 H/m" "Permeability of vacuum" )
- ( G "6.6742e-11 m^3/kg^1/s^2" "Gravitational constant" ) ;; CODATA 2005
- ( Nav "6.02214115e23 / mol" "Avagadro's constant" ) ;; CODATA 2005
- ( me "9.1093826e-31 kg" "Electron rest mass" ) ;; CODATA 2005
- ( mp "1.67262171e-27 kg" "Proton rest mass" ) ;; CODATA 2005
- ( mn "1.67492728e-27 kg" "Neutron rest mass" ) ;; CODATA 2005
- ( mmu "1.88353140e-28 kg" "Muon rest mass" ) ;; CODATA 2005
- ( Ryd "10973731.568525 /m" "Rydberg's constant" ) ;; CODATA 2005
- ( k "1.3806505e-23 J/K" "Boltzmann's constant" ) ;; CODATA 2005
- ( alpha "7.297352568e-3" "Fine structure constant" ) ;; CODATA 2005
- ( muB "927.400949e-26 J/T" "Bohr magneton" ) ;; CODATA 2005
- ( muN "5.05078343e-27 J/T" "Nuclear magneton" ) ;; CODATA 2005
- ( mue "-928.476412e-26 J/T" "Electron magnetic moment" ) ;; CODATA 2005
- ( mup "1.41060671e-26 J/T" "Proton magnetic moment" ) ;; CODATA 2005
- ( R0 "8.314472 J/mol/K" "Molar gas constant" ) ;; CODATA 2005
+ ;; The values are from CODATA, and are approximate.
+ ( h "6.62606896e-34 J s" "*Planck's constant" )
+ ( hbar "h / (2 pi)" "Planck's constant" )
+ ( mu0 "4 pi 10^(-7) H/m" "Permeability of vacuum" )
+ ( G "6.67428e-11 m^3/(kg s^2)" "Gravitational constant" )
+ ( Nav "6.02214179e23 / mol" "Avagadro's constant" )
+ ( me "9.10938215e-31 kg" "Electron rest mass" )
+ ( mp "1.672621637e-27 kg" "Proton rest mass" )
+ ( mn "1.674927211e-27 kg" "Neutron rest mass" )
+ ( mmu "1.88353130e-28 kg" "Muon rest mass" )
+ ( Ryd "10973731.568527 /m" "Rydberg's constant" )
+ ( k "1.3806504e-23 J/K" "Boltzmann's constant" )
+ ( alpha "7.2973525376e-3" "Fine structure constant" )
+ ( muB "927.400915e-26 J/T" "Bohr magneton" )
+ ( muN "5.05078324e-27 J/T" "Nuclear magneton" )
+ ( mue "-928.476377e-26 J/T" "Electron magnetic moment" )
+ ( mup "1.410606662e-26 J/T" "Proton magnetic moment" )
+ ( R0 "8.314472 J/(mol K)" "Molar gas constant" )
( V0 "22.710981e-3 m^3/mol" "Standard volume of ideal gas" )))
@@ -255,35 +260,35 @@ If this is changed, be sure to set math-units-table to nil to ensure
that the combined units table will be rebuilt.")
(defvar math-unit-prefixes
- '( ( ?Y (float 1 24) "Yotta" )
- ( ?Z (float 1 21) "Zetta" )
- ( ?E (float 1 18) "Exa" )
- ( ?P (float 1 15) "Peta" )
- ( ?T (float 1 12) "Tera" )
- ( ?G (float 1 9) "Giga" )
- ( ?M (float 1 6) "Mega" )
- ( ?k (float 1 3) "Kilo" )
- ( ?K (float 1 3) "Kilo" )
- ( ?h (float 1 2) "Hecto" )
- ( ?H (float 1 2) "Hecto" )
- ( ?D (float 1 1) "Deka" )
- ( 0 (float 1 0) nil )
- ( ?d (float 1 -1) "Deci" )
- ( ?c (float 1 -2) "Centi" )
- ( ?m (float 1 -3) "Milli" )
- ( ?u (float 1 -6) "Micro" )
- ( ?n (float 1 -9) "Nano" )
- ( ?p (float 1 -12) "Pico" )
- ( ?f (float 1 -15) "Femto" )
- ( ?a (float 1 -18) "Atto" )
- ( ?z (float 1 -21) "zepto" )
- ( ?y (float 1 -24) "yocto" )))
+ '( ( ?Y (^ 10 24) "Yotta" )
+ ( ?Z (^ 10 21) "Zetta" )
+ ( ?E (^ 10 18) "Exa" )
+ ( ?P (^ 10 15) "Peta" )
+ ( ?T (^ 10 12) "Tera" )
+ ( ?G (^ 10 9) "Giga" )
+ ( ?M (^ 10 6) "Mega" )
+ ( ?k (^ 10 3) "Kilo" )
+ ( ?K (^ 10 3) "Kilo" )
+ ( ?h (^ 10 2) "Hecto" )
+ ( ?H (^ 10 2) "Hecto" )
+ ( ?D (^ 10 1) "Deka" )
+ ( 0 (^ 10 0) nil )
+ ( ?d (^ 10 -1) "Deci" )
+ ( ?c (^ 10 -2) "Centi" )
+ ( ?m (^ 10 -3) "Milli" )
+ ( ?u (^ 10 -6) "Micro" )
+ ( ?n (^ 10 -9) "Nano" )
+ ( ?p (^ 10 -12) "Pico" )
+ ( ?f (^ 10 -15) "Femto" )
+ ( ?a (^ 10 -18) "Atto" )
+ ( ?z (^ 10 -21) "zepto" )
+ ( ?y (^ 10 -24) "yocto" )))
(defvar math-standard-units-systems
'( ( base nil )
- ( si ( ( g '(* (var kg var-kg) (float 1 -3)) ) ) )
- ( mks ( ( g '(* (var kg var-kg) (float 1 -3)) ) ) )
- ( cgs ( ( m '(* (var cm var-cm) 100 ) ) ) )))
+ ( si ( ( g '(/ (var kg var-kg) 1000) ) ) )
+ ( mks ( ( g '(/ (var kg var-kg) 1000) ) ) )
+ ( cgs ( ( m '(* (var cm var-cm) 100 ) ) ) )))
(defvar math-units-table nil
"Internal units table derived from math-defined-units.
@@ -321,13 +326,67 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(math-simplify-units
(math-mul expr (nth pos units))))))))
+(defun math-get-standard-units (expr)
+ "Return the standard units in EXPR."
+ (math-simplify-units
+ (math-extract-units
+ (math-to-standard-units expr nil))))
+
+(defun math-get-units (expr)
+ "Return the units in EXPR."
+ (math-simplify-units
+ (math-extract-units expr)))
+
+(defun math-make-unit-string (expr)
+ "Return EXPR in string form.
+If EXPR is nil, return nil."
+ (if expr
+ (let ((cexpr (math-compose-expr expr 0)))
+ (replace-regexp-in-string
+ " / " "/"
+ (if (stringp cexpr)
+ cexpr
+ (math-composition-to-string cexpr))))))
+
+(defvar math-default-units-table
+ (make-hash-table :test 'equal)
+ "A table storing previously converted units.")
+
+(defun math-get-default-units (expr)
+ "Get default units to use when converting the units in EXPR."
+ (let* ((units (math-get-units expr))
+ (standard-units (math-get-standard-units expr))
+ (default-units (gethash
+ standard-units
+ math-default-units-table)))
+ (if (equal units (car default-units))
+ (math-make-unit-string (cadr default-units))
+ (math-make-unit-string (car default-units)))))
+
+(defun math-put-default-units (expr)
+ "Put the units in EXPR in the default units table."
+ (let* ((units (math-get-units expr))
+ (standard-units (math-get-standard-units expr))
+ (default-units (gethash
+ standard-units
+ math-default-units-table)))
+ (cond
+ ((not default-units)
+ (puthash standard-units (list units) math-default-units-table))
+ ((not (equal units (car default-units)))
+ (puthash standard-units
+ (list units (car default-units))
+ math-default-units-table)))))
+
+
(defun calc-convert-units (&optional old-units new-units)
(interactive)
(calc-slow-wrapper
(let ((expr (calc-top-n 1))
(uoldname nil)
unew
- units)
+ units
+ defunits)
(unless (math-units-in-expr-p expr t)
(let ((uold (or old-units
(progn
@@ -343,16 +402,31 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(error "Bad format in units expression: %s" (nth 1 uold)))
(setq expr (math-mul expr uold))))
(unless new-units
- (setq new-units (read-string (if uoldname
- (concat "Old units: "
- uoldname
- ", new units: ")
- "New units: "))))
+ (setq defunits (math-get-default-units expr))
+ (setq new-units
+ (read-string (concat
+ (if uoldname
+ (concat "Old units: "
+ uoldname
+ ", new units")
+ "New units")
+ (if defunits
+ (concat
+ " (default "
+ defunits
+ "): ")
+ ": "))))
+
+ (if (and
+ (string= new-units "")
+ defunits)
+ (setq new-units defunits)))
(when (string-match "\\` */" new-units)
(setq new-units (concat "1" new-units)))
(setq units (math-read-expr new-units))
(when (eq (car-safe units) 'error)
(error "Bad format in units expression: %s" (nth 2 units)))
+ (math-put-default-units units)
(let ((unew (math-units-in-expr-p units t))
(std (and (eq (car-safe units) 'var)
(assq (nth 1 units) math-standard-units-systems))))
@@ -381,7 +455,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(let ((expr (calc-top-n 1))
(uold nil)
(uoldname nil)
- unew)
+ unew
+ defunits)
(setq uold (or old-units
(let ((units (math-single-units-in-expr-p expr)))
(if units
@@ -398,15 +473,24 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(error "Bad format in units expression: %s" (nth 2 uold)))
(or (math-units-in-expr-p expr nil)
(setq expr (math-mul expr uold)))
+ (setq defunits (math-get-default-units expr))
(setq unew (or new-units
(math-read-expr
- (read-string (if uoldname
- (concat "Old temperature units: "
- uoldname
- ", new units: ")
- "New temperature units: ")))))
+ (read-string
+ (concat
+ (if uoldname
+ (concat "Old temperature units: "
+ uoldname
+ ", new units")
+ "New temperature units")
+ (if defunits
+ (concat " (default "
+ defunits
+ "): ")
+ ": "))))))
(when (eq (car-safe unew) 'error)
(error "Bad format in units expression: %s" (nth 2 unew)))
+ (math-put-default-units unew)
(calc-enter-result 1 "cvtm" (math-simplify-units
(math-convert-temperature expr uold unew
uoldname))))))
@@ -423,7 +507,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(calc-enter-result 1 "rmun" (math-simplify-units
(math-extract-units (calc-top-n 1))))))
-;; The variables calc-num-units and calc-den-units are local to
+;; The variables calc-num-units and calc-den-units are local to
;; calc-explain-units, but are used by calc-explain-units-rec,
;; which is called by calc-explain-units.
(defvar calc-num-units)
@@ -668,7 +752,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(list (cons (car x) 1))))))
combined-units))
(let ((math-units-table tab))
- (mapcar 'math-find-base-units tab))
+ (mapc 'math-find-base-units tab))
(message "Building units table...done")
(setq math-units-table tab))))
@@ -710,7 +794,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(old (assq (car (car ulist)) math-fbu-base)))
(if old
(setcdr old (+ (cdr old) p))
- (setq math-fbu-base
+ (setq math-fbu-base
(cons (cons (car (car ulist)) p) math-fbu-base))))
(setq ulist (cdr ulist)))))
((math-scalarp expr))
@@ -904,8 +988,8 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(if (equal (nth 4 math-fcu-u) (nth 4 u2))
(cons expr pow))))))
-;; The variables math-cu-new-units and math-cu-pure are local to
-;; math-convert-units, but are used by math-convert-units-rec,
+;; The variables math-cu-new-units and math-cu-pure are local to
+;; math-convert-units, but are used by math-convert-units-rec,
;; which is called by math-convert-units.
(defvar math-cu-new-units)
(defvar math-cu-pure)
@@ -917,7 +1001,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(if (eq (car-safe (nth 1 unew)) '+)
(setq math-cu-new-units (nth 1 unew)))))
(math-with-extra-prec 2
- (let ((compat (and (not math-cu-pure)
+ (let ((compat (and (not math-cu-pure)
(math-find-compatible-unit expr math-cu-new-units)))
(math-cu-unit-list nil)
(math-combining-units nil))
@@ -944,7 +1028,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(defun math-convert-units-rec (expr)
(if (math-units-in-expr-p expr nil)
- (math-apply-units (math-to-standard-units
+ (math-apply-units (math-to-standard-units
(list '/ expr math-cu-new-units) nil)
math-cu-new-units math-cu-unit-list math-cu-pure)
(if (Math-primp expr)
@@ -971,17 +1055,17 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(symbol-name v)))))))
(or (eq (nth 3 uold) (nth 3 unew))
(cond ((eq (nth 3 uold) 'K)
- (setq expr (list '- expr '(float 27315 -2)))
+ (setq expr (list '- expr '(/ 27315 100)))
(if (eq (nth 3 unew) 'F)
- (setq expr (list '+ (list '* expr '(frac 9 5)) 32))))
+ (setq expr (list '+ (list '* expr '(/ 9 5)) 32))))
((eq (nth 3 uold) 'C)
(if (eq (nth 3 unew) 'F)
- (setq expr (list '+ (list '* expr '(frac 9 5)) 32))
- (setq expr (list '+ expr '(float 27315 -2)))))
+ (setq expr (list '+ (list '* expr '(/ 9 5)) 32))
+ (setq expr (list '+ expr '(/ 27315 100)))))
(t
- (setq expr (list '* (list '- expr 32) '(frac 5 9)))
+ (setq expr (list '* (list '- expr 32) '(/ 5 9)))
(if (eq (nth 3 unew) 'K)
- (setq expr (list '+ expr '(float 27315 -2)))))))
+ (setq expr (list '+ expr '(/ 27315 100)))))))
(if pure
expr
(list '* expr new))))
@@ -1009,7 +1093,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(calc-record-why "*Inconsistent units" math-simplify-expr)
math-simplify-expr)
(list '* (math-add (math-remove-units (nth 1 math-simplify-expr))
- (if (eq (car math-simplify-expr) '-)
+ (if (eq (car math-simplify-expr) '-)
(math-neg ratio) ratio))
units)))))
@@ -1103,7 +1187,7 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(math-simplify-units-divisor np (cdr (cdr math-simplify-expr)))
(if (eq math-try-cancel-units 0)
(let* ((math-simplifying-units nil)
- (base (math-simplify
+ (base (math-simplify
(math-to-standard-units math-simplify-expr nil))))
(if (Math-numberp base)
(setq math-simplify-expr base))))
@@ -1138,7 +1222,9 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(and un ud
(if (and (equal (nth 4 un) (nth 4 ud))
(eq pow1 pow2))
- (math-to-standard-units (list '/ n d) nil)
+ (if (eq pow1 1)
+ (math-to-standard-units (list '/ n d) nil)
+ (list '^ (math-to-standard-units (list '/ n d) nil) pow1))
(let (ud1)
(setq un (nth 4 un)
ud (nth 4 ud))
@@ -1159,11 +1245,11 @@ Entries are (SYMBOL EXPR DOC-STRING TEMP-TYPE BASE-UNITS).")
(math-realp (nth 2 math-simplify-expr))
(if (memq (car-safe (nth 1 math-simplify-expr)) '(* /))
(list (car (nth 1 math-simplify-expr))
- (list '^ (nth 1 (nth 1 math-simplify-expr))
+ (list '^ (nth 1 (nth 1 math-simplify-expr))
(nth 2 math-simplify-expr))
- (list '^ (nth 2 (nth 1 math-simplify-expr))
+ (list '^ (nth 2 (nth 1 math-simplify-expr))
(nth 2 math-simplify-expr)))
- (math-simplify-units-pow (nth 1 math-simplify-expr)
+ (math-simplify-units-pow (nth 1 math-simplify-expr)
(nth 2 math-simplify-expr)))))
(math-defsimplify calcFunc-sqrt
diff --git a/lisp/calc/calc-yank.el b/lisp/calc/calc-yank.el
index c6ea1378e96..d83321eb8a1 100644
--- a/lisp/calc/calc-yank.el
+++ b/lisp/calc/calc-yank.el
@@ -559,7 +559,7 @@ To cancel the edit, simply kill the *Calc Edit* buffer."
(aset str pos ?\,)))
(switch-to-buffer calc-original-buffer)
(let ((vals (let ((calc-language nil)
- (math-expr-opers math-standard-opers))
+ (math-expr-opers (math-standard-ops)))
(and (string-match "[^\n\t ]" str)
(math-read-exprs str)))))
(when (eq (car-safe vals) 'error)
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 5f95deb3c64..b730e4db2b1 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -213,7 +213,7 @@
:group 'applications)
;;;###autoload
-(defcustom calc-settings-file
+(defcustom calc-settings-file
(convert-standard-filename "~/.calc.el")
"*File in which to record permanent settings."
:group 'calc
@@ -229,13 +229,14 @@
(c-mode . c)
(c++-mode . c)
(fortran-mode . fortran)
- (f90-mode . fortran))
+ (f90-mode . fortran)
+ (texinfo-mode . calc-normal-language))
"*Alist of major modes with appropriate Calc languages."
:group 'calc
- :type '(alist :key-type (symbol :tag "Major mode")
+ :type '(alist :key-type (symbol :tag "Major mode")
:value-type (symbol :tag "Calc language")))
-(defcustom calc-embedded-announce-formula
+(defcustom calc-embedded-announce-formula
"%Embed\n\\(% .*\n\\)*"
"*A regular expression which is sure to be followed by a calc-embedded formula."
:group 'calc
@@ -258,13 +259,13 @@
:type '(alist :key-type (symbol :tag "Major mode")
:value-type (regexp :tag "Regexp to announce formula")))
-(defcustom calc-embedded-open-formula
+(defcustom calc-embedded-open-formula
"\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n"
"*A regular expression for the opening delimiter of a formula used by calc-embedded."
:group 'calc
:type '(regexp))
-(defcustom calc-embedded-close-formula
+(defcustom calc-embedded-close-formula
"\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n"
"*A regular expression for the closing delimiter of a formula used by calc-embedded."
:group 'calc
@@ -278,13 +279,13 @@
:value-type (list (regexp :tag "Opening formula delimiter")
(regexp :tag "Closing formula delimiter"))))
-(defcustom calc-embedded-open-word
+(defcustom calc-embedded-open-word
"^\\|[^-+0-9.eE]"
"*A regular expression for the opening delimiter of a formula used by calc-embedded-word."
:group 'calc
:type '(regexp))
-(defcustom calc-embedded-close-word
+(defcustom calc-embedded-close-word
"$\\|[^-+0-9.eE]"
"*A regular expression for the closing delimiter of a formula used by calc-embedded-word."
:group 'calc
@@ -298,7 +299,7 @@
:value-type (list (regexp :tag "Opening word delimiter")
(regexp :tag "Closing word delimiter"))))
-(defcustom calc-embedded-open-plain
+(defcustom calc-embedded-open-plain
"%%% "
"*A string which is the opening delimiter for a \"plain\" formula.
If calc-show-plain mode is enabled, this is inserted at the front of
@@ -306,7 +307,7 @@ each formula."
:group 'calc
:type '(string))
-(defcustom calc-embedded-close-plain
+(defcustom calc-embedded-close-plain
" %%%\n"
"*A string which is the closing delimiter for a \"plain\" formula.
See calc-embedded-open-plain."
@@ -331,13 +332,13 @@ See calc-embedded-open-plain."
:value-type (list (string :tag "Opening \"plain\" delimiter")
(string :tag "Closing \"plain\" delimiter"))))
-(defcustom calc-embedded-open-new-formula
+(defcustom calc-embedded-open-new-formula
"\n\n"
"*A string which is inserted at front of formula by calc-embedded-new-formula."
:group 'calc
:type '(string))
-(defcustom calc-embedded-close-new-formula
+(defcustom calc-embedded-close-new-formula
"\n\n"
"*A string which is inserted at end of formula by calc-embedded-new-formula."
:group 'calc
@@ -351,14 +352,14 @@ See calc-embedded-open-plain."
:value-type (list (string :tag "Opening new formula delimiter")
(string :tag "Closing new formula delimiter"))))
-(defcustom calc-embedded-open-mode
+(defcustom calc-embedded-open-mode
"% "
"*A string which should precede calc-embedded mode annotations.
This is not required to be present for user-written mode annotations."
:group 'calc
:type '(string))
-(defcustom calc-embedded-close-mode
+(defcustom calc-embedded-close-mode
"\n"
"*A string which should follow calc-embedded mode annotations.
This is not required to be present for user-written mode annotations."
@@ -383,24 +384,31 @@ This is not required to be present for user-written mode annotations."
:value-type (list (string :tag "Opening annotation delimiter")
(string :tag "Closing annotation delimiter"))))
-(defcustom calc-gnuplot-name
+(defcustom calc-gnuplot-name
"gnuplot"
"*Name of GNUPLOT program, for calc-graph features."
:group 'calc
:type '(string))
-(defcustom calc-gnuplot-plot-command
+(defcustom calc-gnuplot-plot-command
nil
"*Name of command for displaying GNUPLOT output; %s = file name to print."
:group 'calc
:type '(choice (string) (sexp)))
-(defcustom calc-gnuplot-print-command
+(defcustom calc-gnuplot-print-command
"lp %s"
"*Name of command for printing GNUPLOT output; %s = file name to print."
:group 'calc
:type '(choice (string) (sexp)))
+(defcustom calc-multiplication-has-precedence
+ t
+ "*If non-nil, multiplication has precedence over division
+in normal mode."
+ :group 'calc
+ :type 'boolean)
+
(defvar calc-bug-address "jay.p.belanger@gmail.com"
"Address of the maintainer of Calc, for use by `report-calc-bug'.")
@@ -512,7 +520,7 @@ This is used only when calc-group-digits mode is on.")
(defcalcmodevar calc-point-char "."
"The character (in the form of a string) to be used as a decimal point.")
-
+
(defcalcmodevar calc-frac-format '(":" nil)
"Format of displayed fractions; a string of one or two of \":\" or \"/\".")
@@ -702,9 +710,9 @@ If nil, selections displayed but ignored.")
"YYddd< hh:mm:ss>"))
(defcalcmodevar calc-autorange-units nil)
-
+
(defcalcmodevar calc-was-keypad-mode nil)
-
+
(defcalcmodevar calc-full-mode nil)
(defcalcmodevar calc-user-parse-tables nil)
@@ -714,7 +722,7 @@ If nil, selections displayed but ignored.")
(defcalcmodevar calc-gnuplot-default-output "STDOUT")
(defcalcmodevar calc-gnuplot-print-device "postscript")
-
+
(defcalcmodevar calc-gnuplot-print-output "auto")
(defcalcmodevar calc-gnuplot-geometry nil)
@@ -722,7 +730,7 @@ If nil, selections displayed but ignored.")
(defcalcmodevar calc-graph-default-resolution 15)
(defcalcmodevar calc-graph-default-resolution-3d 5)
-
+
(defcalcmodevar calc-invocation-macro nil)
(defcalcmodevar calc-show-banner t
@@ -813,9 +821,6 @@ If nil, selections displayed but ignored.")
(defvar calc-embedded-mode-hook nil
"Hook run when starting embedded mode.")
-;; Verify that Calc is running on the right kind of system.
-(defvar calc-emacs-type-lucid (not (not (string-match "Lucid" emacs-version))))
-
;; Set up the autoloading linkage.
(let ((name (and (fboundp 'calc-dispatch)
(eq (car-safe (symbol-function 'calc-dispatch)) 'autoload)
@@ -918,8 +923,8 @@ If nil, selections displayed but ignored.")
(defvar var-gamma '(special-const (math-gamma-const)))
(defvar var-Modes '(special-const (math-get-modes-vec)))
-(mapcar (lambda (v) (or (boundp v) (set v nil)))
- calc-local-var-list)
+(mapc (lambda (v) (or (boundp v) (set v nil)))
+ calc-local-var-list)
(defvar calc-mode-map
(let ((map (make-keymap)))
@@ -960,7 +965,7 @@ If nil, selections displayed but ignored.")
(defvar calc-digit-map
(let ((map (make-keymap)))
- (if calc-emacs-type-lucid
+ (if (featurep 'xemacs)
(map-keymap (function
(lambda (keys bind)
(define-key map keys
@@ -975,89 +980,90 @@ If nil, selections displayed but ignored.")
(if (eq (aref cmap i) 'undefined)
'undefined 'calcDigit-nondigit))
(setq i (1+ i)))))
- (mapcar (lambda (x) (define-key map (char-to-string x) 'calcDigit-key))
- "_0123456789.e+-:n#@oh'\"mspM")
- (mapcar (lambda (x) (define-key map (char-to-string x) 'calcDigit-letter))
+ (mapc (lambda (x) (define-key map (char-to-string x) 'calcDigit-key))
+ "_0123456789.e+-:n#@oh'\"mspM")
+ (mapc (lambda (x) (define-key map (char-to-string x) 'calcDigit-letter))
"abcdfgijklqrtuvwxyzABCDEFGHIJKLNOPQRSTUVWXYZ")
(define-key map "'" 'calcDigit-algebraic)
(define-key map "`" 'calcDigit-edit)
(define-key map "\C-g" 'abort-recursive-edit)
map))
-(mapcar (lambda (x)
- (condition-case err
- (progn
- (define-key calc-digit-map x 'calcDigit-backspace)
- (define-key calc-mode-map x 'calc-pop)
- (define-key calc-mode-map
- (if (vectorp x)
- (if calc-emacs-type-lucid
- (if (= (length x) 1)
- (vector (if (consp (aref x 0))
- (cons 'meta (aref x 0))
- (list 'meta (aref x 0))))
- "\e\C-d")
- (vconcat "\e" x))
- (concat "\e" x))
- 'calc-pop-above))
- (error nil)))
- (if calc-scan-for-dels
- (append (where-is-internal 'delete-backward-char global-map)
- (where-is-internal 'backward-delete-char global-map)
- '("\C-d"))
- '("\177" "\C-d")))
+(mapc (lambda (x)
+ (condition-case err
+ (progn
+ (define-key calc-digit-map x 'calcDigit-backspace)
+ (define-key calc-mode-map x 'calc-pop)
+ (define-key calc-mode-map
+ (if (vectorp x)
+ (if (featurep 'xemacs)
+ (if (= (length x) 1)
+ (vector (if (consp (aref x 0))
+ (cons 'meta (aref x 0))
+ (list 'meta (aref x 0))))
+ "\e\C-d")
+ (vconcat "\e" x))
+ (concat "\e" x))
+ 'calc-pop-above))
+ (error nil)))
+ (if calc-scan-for-dels
+ (append (where-is-internal 'delete-backward-char global-map)
+ (where-is-internal 'backward-delete-char global-map)
+ (where-is-internal 'backward-delete-char-untabify global-map)
+ '("\C-d"))
+ '("\177" "\C-d")))
(defvar calc-dispatch-map
(let ((map (make-keymap)))
- (mapcar (lambda (x)
- (define-key map (char-to-string (car x)) (cdr x))
- (when (string-match "abcdefhijklnopqrstuwxyz"
- (char-to-string (car x)))
- (define-key map (char-to-string (- (car x) ?a -1)) (cdr x)))
- (define-key map (format "\e%c" (car x)) (cdr x)))
- '( ( ?a . calc-embedded-activate )
- ( ?b . calc-big-or-small )
- ( ?c . calc )
- ( ?d . calc-embedded-duplicate )
- ( ?e . calc-embedded )
- ( ?f . calc-embedded-new-formula )
- ( ?g . calc-grab-region )
- ( ?h . calc-dispatch-help )
- ( ?i . calc-info )
- ( ?j . calc-embedded-select )
- ( ?k . calc-keypad )
- ( ?l . calc-load-everything )
- ( ?m . read-kbd-macro )
- ( ?n . calc-embedded-next )
- ( ?o . calc-other-window )
- ( ?p . calc-embedded-previous )
- ( ?q . quick-calc )
- ( ?r . calc-grab-rectangle )
- ( ?s . calc-info-summary )
- ( ?t . calc-tutorial )
- ( ?u . calc-embedded-update-formula )
- ( ?w . calc-embedded-word )
- ( ?x . calc-quit )
- ( ?y . calc-copy-to-buffer )
- ( ?z . calc-user-invocation )
- ( ?\' . calc-embedded-new-formula )
- ( ?\` . calc-embedded-edit )
- ( ?: . calc-grab-sum-down )
- ( ?_ . calc-grab-sum-across )
- ( ?0 . calc-reset )
- ( ?? . calc-dispatch-help )
- ( ?# . calc-same-interface )
- ( ?& . calc-same-interface )
- ( ?\\ . calc-same-interface )
- ( ?= . calc-same-interface )
- ( ?* . calc-same-interface )
- ( ?/ . calc-same-interface )
- ( ?+ . calc-same-interface )
- ( ?- . calc-same-interface ) ))
+ (mapc (lambda (x)
+ (define-key map (char-to-string (car x)) (cdr x))
+ (when (string-match "abcdefhijklnopqrstuwxyz"
+ (char-to-string (car x)))
+ (define-key map (char-to-string (- (car x) ?a -1)) (cdr x)))
+ (define-key map (format "\e%c" (car x)) (cdr x)))
+ '( ( ?a . calc-embedded-activate )
+ ( ?b . calc-big-or-small )
+ ( ?c . calc )
+ ( ?d . calc-embedded-duplicate )
+ ( ?e . calc-embedded )
+ ( ?f . calc-embedded-new-formula )
+ ( ?g . calc-grab-region )
+ ( ?h . calc-dispatch-help )
+ ( ?i . calc-info )
+ ( ?j . calc-embedded-select )
+ ( ?k . calc-keypad )
+ ( ?l . calc-load-everything )
+ ( ?m . read-kbd-macro )
+ ( ?n . calc-embedded-next )
+ ( ?o . calc-other-window )
+ ( ?p . calc-embedded-previous )
+ ( ?q . quick-calc )
+ ( ?r . calc-grab-rectangle )
+ ( ?s . calc-info-summary )
+ ( ?t . calc-tutorial )
+ ( ?u . calc-embedded-update-formula )
+ ( ?w . calc-embedded-word )
+ ( ?x . calc-quit )
+ ( ?y . calc-copy-to-buffer )
+ ( ?z . calc-user-invocation )
+ ( ?\' . calc-embedded-new-formula )
+ ( ?\` . calc-embedded-edit )
+ ( ?: . calc-grab-sum-down )
+ ( ?_ . calc-grab-sum-across )
+ ( ?0 . calc-reset )
+ ( ?? . calc-dispatch-help )
+ ( ?# . calc-same-interface )
+ ( ?& . calc-same-interface )
+ ( ?\\ . calc-same-interface )
+ ( ?= . calc-same-interface )
+ ( ?* . calc-same-interface )
+ ( ?/ . calc-same-interface )
+ ( ?+ . calc-same-interface )
+ ( ?- . calc-same-interface ) ))
map))
;;;; (Autoloads here)
-(mapcar
+(mapc
(lambda (x) (dolist (func (cdr x)) (autoload func (car x))))
'(
@@ -1069,7 +1075,7 @@ If nil, selections displayed but ignored.")
("calc-embed" calc-do-embedded-activate)
- ("calc-misc"
+ ("calc-misc"
calc-do-handle-whys calc-do-refresh calc-num-prefix-name
calc-record-list calc-record-why calc-report-bug calc-roll-down-stack
calc-roll-up-stack calc-temp-minibuffer-message calcFunc-floor
@@ -1079,7 +1085,7 @@ If nil, selections displayed but ignored.")
math-negp math-posp math-pow math-read-radix-digit math-reject-arg
math-trunc math-zerop)))
-(mapcar
+(mapc
(lambda (x) (dolist (cmd (cdr x)) (autoload cmd (car x) nil t)))
'(
@@ -1087,7 +1093,7 @@ If nil, selections displayed but ignored.")
calcDigit-algebraic calcDigit-edit)
("calc-misc" another-calc calc-big-or-small calc-dispatch-help
- calc-help calc-info calc-info-goto-node calc-info-summary calc-inv
+ calc-help calc-info calc-info-goto-node calc-info-summary calc-inv
calc-last-args-stub
calc-missing-key calc-mod calc-other-window calc-over calc-percent
calc-pop-above calc-power calc-roll-down calc-roll-up
@@ -1185,12 +1191,12 @@ Notations: 3.14e6 3.14 * 10^6
\\{calc-mode-map}
"
(interactive)
- (mapcar (function
- (lambda (v) (set-default v (symbol-value v)))) calc-local-var-list)
+ (mapc (function
+ (lambda (v) (set-default v (symbol-value v)))) calc-local-var-list)
(kill-all-local-variables)
(use-local-map (if (eq calc-algebraic-mode 'total)
(progn (require 'calc-ext) calc-alg-map) calc-mode-map))
- (mapcar (function (lambda (v) (make-local-variable v))) calc-local-var-list)
+ (mapc (function (lambda (v) (make-local-variable v))) calc-local-var-list)
(make-local-variable 'overlay-arrow-position)
(make-local-variable 'overlay-arrow-string)
(add-hook 'change-major-mode-hook 'font-lock-defontify nil t)
@@ -1216,6 +1222,7 @@ Notations: 3.14e6 3.14 * 10^6
(string-match "full" (nth 1 p))
(setq calc-standalone-flag t))
(setq p (cdr p))))
+ (require 'calc-menu)
(run-mode-hooks 'calc-mode-hook)
(calc-refresh t)
(calc-set-mode-line)
@@ -1367,8 +1374,8 @@ commands given here will actually operate on the *Calculator* stack."
(calc-create-buffer))
(run-hooks 'calc-end-hook)
(setq calc-undo-list nil calc-redo-list nil)
- (mapcar (function (lambda (v) (set-default v (symbol-value v))))
- calc-local-var-list)
+ (mapc (function (lambda (v) (set-default v (symbol-value v))))
+ calc-local-var-list)
(let ((buf (current-buffer))
(win (get-buffer-window (current-buffer)))
(kbuf (get-buffer "*Calc Keypad*")))
@@ -2101,13 +2108,13 @@ See calc-keypad for details."
(calc-prev-char nil)
(calc-prev-prev-char nil)
(calc-buffer (current-buffer))
- (buf (if calc-emacs-type-lucid
+ (buf (if (featurep 'xemacs)
(catch 'calc-foo
(catch 'execute-kbd-macro
(throw 'calc-foo
(read-from-minibuffer
"Calc: " "" calc-digit-map)))
- (error "Lucid Emacs requires RET after %s"
+ (error "XEmacs requires RET after %s"
"digit entry in kbd macro"))
(let ((old-esc (lookup-key global-map "\e")))
(unwind-protect
@@ -2276,7 +2283,21 @@ See calc-keypad for details."
+(defconst math-bignum-digit-length
+ (truncate (/ (log10 (/ most-positive-fixnum 2)) 2))
+ "The length of a \"digit\" in Calc bignums.
+If a big integer is of the form (bigpos N0 N1 ...), this is the
+length of the allowable Emacs integers N0, N1,...
+The value of 2*10^(2*MATH-BIGNUM-DIGIT-LENGTH) must be less than the
+largest Emacs integer.")
+
+(defconst math-bignum-digit-size
+ (expt 10 math-bignum-digit-length)
+ "An upper bound for the size of the \"digit\"s in Calc bignums.")
+(defconst math-small-integer-size
+ (expt math-bignum-digit-size 2)
+ "An upper bound for the size of \"small integer\"s in Calc.")
;;;; Arithmetic routines.
@@ -2285,11 +2306,17 @@ See calc-keypad for details."
;;; following forms:
;;;
;;; integer An integer. For normalized numbers, this format
-;;; is used only for -999999 ... 999999.
+;;; is used only for
+;;; negative math-small-integer-size + 1 to
+;;; math-small-integer-size - 1
;;;
-;;; (bigpos N0 N1 N2 ...) A big positive integer, N0 + N1*1000 + N2*10^6 ...
-;;; (bigneg N0 N1 N2 ...) A big negative integer, - N0 - N1*1000 ...
-;;; Each digit N is in the range 0 ... 999.
+;;; (bigpos N0 N1 N2 ...) A big positive integer,
+;;; N0 + N1*math-bignum-digit-size
+;;; + N2*(math-bignum-digit-size)^2 ...
+;;; (bigneg N0 N1 N2 ...) A big negative integer,
+;;; - N0 - N1*math-bignum-digit-size ...
+;;; Each digit N is in the range
+;;; 0 ... math-bignum-digit-size -1.
;;; Normalized, always at least three N present,
;;; and the most significant N is nonzero.
;;;
@@ -2379,13 +2406,14 @@ See calc-keypad for details."
(cond
((not (consp math-normalize-a))
(if (integerp math-normalize-a)
- (if (or (>= math-normalize-a 1000000) (<= math-normalize-a -1000000))
+ (if (or (>= math-normalize-a math-small-integer-size)
+ (<= math-normalize-a (- math-small-integer-size)))
(math-bignum math-normalize-a)
math-normalize-a)
math-normalize-a))
((eq (car math-normalize-a) 'bigpos)
(if (eq (nth (1- (length math-normalize-a)) math-normalize-a) 0)
- (let* ((last (setq math-normalize-a
+ (let* ((last (setq math-normalize-a
(copy-sequence math-normalize-a))) (digs math-normalize-a))
(while (setq digs (cdr digs))
(or (eq (car digs) 0) (setq last digs)))
@@ -2393,13 +2421,14 @@ See calc-keypad for details."
(if (cdr (cdr (cdr math-normalize-a)))
math-normalize-a
(cond
- ((cdr (cdr math-normalize-a)) (+ (nth 1 math-normalize-a)
- (* (nth 2 math-normalize-a) 1000)))
+ ((cdr (cdr math-normalize-a)) (+ (nth 1 math-normalize-a)
+ (* (nth 2 math-normalize-a)
+ math-bignum-digit-size)))
((cdr math-normalize-a) (nth 1 math-normalize-a))
(t 0))))
((eq (car math-normalize-a) 'bigneg)
(if (eq (nth (1- (length math-normalize-a)) math-normalize-a) 0)
- (let* ((last (setq math-normalize-a (copy-sequence math-normalize-a)))
+ (let* ((last (setq math-normalize-a (copy-sequence math-normalize-a)))
(digs math-normalize-a))
(while (setq digs (cdr digs))
(or (eq (car digs) 0) (setq last digs)))
@@ -2407,20 +2436,21 @@ See calc-keypad for details."
(if (cdr (cdr (cdr math-normalize-a)))
math-normalize-a
(cond
- ((cdr (cdr math-normalize-a)) (- (+ (nth 1 math-normalize-a)
- (* (nth 2 math-normalize-a) 1000))))
+ ((cdr (cdr math-normalize-a)) (- (+ (nth 1 math-normalize-a)
+ (* (nth 2 math-normalize-a)
+ math-bignum-digit-size))))
((cdr math-normalize-a) (- (nth 1 math-normalize-a)))
(t 0))))
((eq (car math-normalize-a) 'float)
- (math-make-float (math-normalize (nth 1 math-normalize-a))
+ (math-make-float (math-normalize (nth 1 math-normalize-a))
(nth 2 math-normalize-a)))
- ((or (memq (car math-normalize-a)
+ ((or (memq (car math-normalize-a)
'(frac cplx polar hms date mod sdev intv vec var quote
special-const calcFunc-if calcFunc-lambda
calcFunc-quote calcFunc-condition
calcFunc-evalto))
(integerp (car math-normalize-a))
- (and (consp (car math-normalize-a))
+ (and (consp (car math-normalize-a))
(not (eq (car (car math-normalize-a)) 'lambda))))
(require 'calc-ext)
(math-normalize-fancy math-normalize-a))
@@ -2430,7 +2460,7 @@ See calc-keypad for details."
(math-normalize-nonstandard))
(let ((args (mapcar 'math-normalize (cdr math-normalize-a))))
(or (condition-case err
- (let ((func
+ (let ((func
(assq (car math-normalize-a) '( ( + . math-add )
( - . math-sub )
( * . math-mul )
@@ -2446,7 +2476,7 @@ See calc-keypad for details."
(require 'calc-ext)
(math-recompile-eval-rules)))
(and (or math-eval-rules-cache-other
- (assq (car math-normalize-a)
+ (assq (car math-normalize-a)
math-eval-rules-cache))
(math-apply-rewrites
(cons (car math-normalize-a) args)
@@ -2465,12 +2495,12 @@ See calc-keypad for details."
(cons (car math-normalize-a) args))
nil)
(wrong-type-argument
- (or calc-next-why
+ (or calc-next-why
(calc-record-why "Wrong type of argument"
(cons (car math-normalize-a) args)))
nil)
(args-out-of-range
- (calc-record-why "*Argument out of range"
+ (calc-record-why "*Argument out of range"
(cons (car math-normalize-a) args))
nil)
(inexact-result
@@ -2528,7 +2558,8 @@ See calc-keypad for details."
(defun math-bignum-big (a) ; [L s]
(if (= a 0)
nil
- (cons (% a 1000) (math-bignum-big (/ a 1000)))))
+ (cons (% a math-bignum-digit-size)
+ (math-bignum-big (/ a math-bignum-digit-size)))))
;;; Build a normalized floating-point number. [F I S]
@@ -2545,7 +2576,7 @@ See calc-keypad for details."
(progn
(while (= (car digs) 0)
(setq digs (cdr digs)
- exp (+ exp 3)))
+ exp (+ exp math-bignum-digit-length)))
(while (= (% (car digs) 10) 0)
(setq digs (math-div10-bignum digs)
exp (1+ exp)))
@@ -2563,7 +2594,8 @@ See calc-keypad for details."
(defun math-div10-bignum (a) ; [l l]
(if (cdr a)
- (cons (+ (/ (car a) 10) (* (% (nth 1 a) 10) 100))
+ (cons (+ (/ (car a) 10) (* (% (nth 1 a) 10)
+ (expt 10 (1- math-bignum-digit-length))))
(math-div10-bignum (cdr a)))
(list (/ (car a) 10))))
@@ -2594,7 +2626,7 @@ See calc-keypad for details."
(if (cdr a)
(let* ((len (1- (length a)))
(top (nth len a)))
- (+ (* len 3) (cond ((>= top 100) 0) ((>= top 10) -1) (t -2))))
+ (+ (* (1- len) math-bignum-digit-length) (math-numdigs top)))
0)
(cond ((>= a 100) (+ (math-numdigs (/ a 1000)) 3))
((>= a 10) 2)
@@ -2615,24 +2647,24 @@ See calc-keypad for details."
a
(if (consp a)
(cons (car a) (math-scale-left-bignum (cdr a) n))
- (if (>= n 3)
- (if (or (>= a 1000) (<= a -1000))
+ (if (>= n math-bignum-digit-length)
+ (if (or (>= a math-bignum-digit-size)
+ (<= a (- math-bignum-digit-size)))
(math-scale-left (math-bignum a) n)
- (math-scale-left (* a 1000) (- n 3)))
- (if (= n 2)
- (if (or (>= a 10000) (<= a -10000))
- (math-scale-left (math-bignum a) 2)
- (* a 100))
- (if (or (>= a 100000) (<= a -100000))
- (math-scale-left (math-bignum a) 1)
- (* a 10)))))))
+ (math-scale-left (* a math-bignum-digit-size)
+ (- n math-bignum-digit-length)))
+ (let ((sz (expt 10 (- (* 2 math-bignum-digit-length) n))))
+ (if (or (>= a sz) (<= a (- sz)))
+ (math-scale-left (math-bignum a) n)
+ (* a (expt 10 n))))))))
(defun math-scale-left-bignum (a n)
- (if (>= n 3)
+ (if (>= n math-bignum-digit-length)
(while (>= (setq a (cons 0 a)
- n (- n 3)) 3)))
+ n (- n math-bignum-digit-length))
+ math-bignum-digit-length)))
(if (> n 0)
- (math-mul-bignum-digit a (if (= n 2) 100 10) 0)
+ (math-mul-bignum-digit a (expt 10 n) 0)
a))
(defun math-scale-right (a n) ; [i i S]
@@ -2644,21 +2676,20 @@ See calc-keypad for details."
(if (= a 0)
0
(- (math-scale-right (- a) n)))
- (if (>= n 3)
- (while (and (> (setq a (/ a 1000)) 0)
- (>= (setq n (- n 3)) 3))))
- (if (= n 2)
- (/ a 100)
- (if (= n 1)
- (/ a 10)
- a))))))
+ (if (>= n math-bignum-digit-length)
+ (while (and (> (setq a (/ a math-bignum-digit-size)) 0)
+ (>= (setq n (- n math-bignum-digit-length))
+ math-bignum-digit-length))))
+ (if (> n 0)
+ (/ a (expt 10 n))
+ a)))))
(defun math-scale-right-bignum (a n) ; [L L S; l l S]
- (if (>= n 3)
- (setq a (nthcdr (/ n 3) a)
- n (% n 3)))
+ (if (>= n math-bignum-digit-length)
+ (setq a (nthcdr (/ n math-bignum-digit-length) a)
+ n (% n math-bignum-digit-length)))
(if (> n 0)
- (cdr (math-mul-bignum-digit a (if (= n 2) 10 100) 0))
+ (cdr (math-mul-bignum-digit a (expt 10 (- math-bignum-digit-length n)) 0))
a))
;;; Multiply (with rounding) the integer A by 10^N. [I i S]
@@ -2668,16 +2699,18 @@ See calc-keypad for details."
((consp a)
(math-normalize
(cons (car a)
- (let ((val (if (< n -3)
- (math-scale-right-bignum (cdr a) (- -3 n))
- (if (= n -2)
- (math-mul-bignum-digit (cdr a) 10 0)
- (if (= n -1)
- (math-mul-bignum-digit (cdr a) 100 0)
- (cdr a)))))) ; n = -3
- (if (and val (>= (car val) 500))
+ (let ((val (if (< n (- math-bignum-digit-length))
+ (math-scale-right-bignum
+ (cdr a)
+ (- (- math-bignum-digit-length) n))
+ (if (< n 0)
+ (math-mul-bignum-digit
+ (cdr a)
+ (expt 10 (+ math-bignum-digit-length n)) 0)
+ (cdr a))))) ; n = -math-bignum-digit-length
+ (if (and val (>= (car val) (/ math-bignum-digit-size 2)))
(if (cdr val)
- (if (eq (car (cdr val)) 999)
+ (if (eq (car (cdr val)) (1- math-bignum-digit-size))
(math-add-bignum (cdr val) '(1))
(cons (1+ (car (cdr val))) (cdr (cdr val))))
'(1))
@@ -2696,7 +2729,7 @@ See calc-keypad for details."
(and (not (or (consp a) (consp b)))
(progn
(setq a (+ a b))
- (if (or (<= a -1000000) (>= a 1000000))
+ (if (or (<= a (- math-small-integer-size)) (>= a math-small-integer-size))
(math-bignum a)
a)))
(and (Math-zerop a) (not (eq (car-safe a) 'mod))
@@ -2745,21 +2778,22 @@ See calc-keypad for details."
(let* ((a (copy-sequence a)) (aa a) (carry nil) sum)
(while (and aa b)
(if carry
- (if (< (setq sum (+ (car aa) (car b))) 999)
+ (if (< (setq sum (+ (car aa) (car b)))
+ (1- math-bignum-digit-size))
(progn
(setcar aa (1+ sum))
(setq carry nil))
- (setcar aa (+ sum -999)))
- (if (< (setq sum (+ (car aa) (car b))) 1000)
+ (setcar aa (- sum (1- math-bignum-digit-size))))
+ (if (< (setq sum (+ (car aa) (car b))) math-bignum-digit-size)
(setcar aa sum)
- (setcar aa (+ sum -1000))
+ (setcar aa (- sum math-bignum-digit-size))
(setq carry t)))
(setq aa (cdr aa)
b (cdr b)))
(if carry
(if b
(nconc a (math-add-bignum b '(1)))
- (while (eq (car aa) 999)
+ (while (eq (car aa) (1- math-bignum-digit-size))
(setcar aa 0)
(setq aa (cdr aa)))
(if aa
@@ -2783,17 +2817,17 @@ See calc-keypad for details."
(progn
(setcar aa (1- diff))
(setq borrow nil))
- (setcar aa (+ diff 999)))
+ (setcar aa (+ diff (1- math-bignum-digit-size))))
(if (>= (setq diff (- (car aa) (car b))) 0)
(setcar aa diff)
- (setcar aa (+ diff 1000))
+ (setcar aa (+ diff math-bignum-digit-size))
(setq borrow t)))
(setq aa (cdr aa)
b (cdr b)))
(if borrow
(progn
(while (eq (car aa) 0)
- (setcar aa 999)
+ (setcar aa (1- math-bignum-digit-size))
(setq aa (cdr aa)))
(if aa
(progn
@@ -2833,7 +2867,7 @@ See calc-keypad for details."
(if (or (consp a) (consp b))
(math-add a (math-neg b))
(setq a (- a b))
- (if (or (<= a -1000000) (>= a 1000000))
+ (if (or (<= a (- math-small-integer-size)) (>= a math-small-integer-size))
(math-bignum a)
a)))
@@ -2860,7 +2894,8 @@ See calc-keypad for details."
(defun math-mul (a b)
(or
(and (not (consp a)) (not (consp b))
- (< a 1000) (> a -1000) (< b 1000) (> b -1000)
+ (< a math-bignum-digit-size) (> a (- math-bignum-digit-size))
+ (< b math-bignum-digit-size) (> b (- math-bignum-digit-size))
(* a b))
(and (Math-zerop a) (not (eq (car-safe b) 'mod))
(if (Math-scalarp b)
@@ -2929,14 +2964,14 @@ See calc-keypad for details."
aa a)
(while (progn
(setcar ss (% (setq prod (+ (+ (car ss) (* (car aa) d))
- c)) 1000))
+ c)) math-bignum-digit-size))
(setq aa (cdr aa)))
- (setq c (/ prod 1000)
+ (setq c (/ prod math-bignum-digit-size)
ss (or (cdr ss) (setcdr ss (list 0)))))
- (if (>= prod 1000)
+ (if (>= prod math-bignum-digit-size)
(if (cdr ss)
- (setcar (cdr ss) (+ (/ prod 1000) (car (cdr ss))))
- (setcdr ss (list (/ prod 1000))))))
+ (setcar (cdr ss) (+ (/ prod math-bignum-digit-size) (car (cdr ss))))
+ (setcdr ss (list (/ prod math-bignum-digit-size))))))
sum)))
;;; Multiply digit list A by digit D. [L L D D; l l D D]
@@ -2946,12 +2981,14 @@ See calc-keypad for details."
(and (= d 1) a)
(let* ((a (copy-sequence a)) (aa a) prod)
(while (progn
- (setcar aa (% (setq prod (+ (* (car aa) d) c)) 1000))
+ (setcar aa
+ (% (setq prod (+ (* (car aa) d) c))
+ math-bignum-digit-size))
(cdr aa))
(setq aa (cdr aa)
- c (/ prod 1000)))
- (if (>= prod 1000)
- (setcdr aa (list (/ prod 1000))))
+ c (/ prod math-bignum-digit-size)))
+ (if (>= prod math-bignum-digit-size)
+ (setcdr aa (list (/ prod math-bignum-digit-size))))
a))
(and (> c 0)
(list c))))
@@ -2964,7 +3001,7 @@ See calc-keypad for details."
(if (eq b 0)
(math-reject-arg a "*Division by zero"))
(if (or (consp a) (consp b))
- (if (and (natnump b) (< b 1000))
+ (if (and (natnump b) (< b math-bignum-digit-size))
(let ((res (math-div-bignum-digit (cdr a) b)))
(cons
(math-normalize (cons (car a) (car res)))
@@ -2983,7 +3020,7 @@ See calc-keypad for details."
(if (= b 0)
(math-reject-arg a "*Division by zero")
(/ a b))
- (if (and (natnump b) (< b 1000))
+ (if (and (natnump b) (< b math-bignum-digit-size))
(if (= b 0)
(math-reject-arg a "*Division by zero")
(math-normalize (cons (car a)
@@ -2992,7 +3029,7 @@ See calc-keypad for details."
(or (consp b) (setq b (math-bignum b)))
(let* ((alen (1- (length a)))
(blen (1- (length b)))
- (d (/ 1000 (1+ (nth (1- blen) (cdr b)))))
+ (d (/ math-bignum-digit-size (1+ (nth (1- blen) (cdr b)))))
(res (math-div-bignum-big (math-mul-bignum-digit (cdr a) d 0)
(math-mul-bignum-digit (cdr b) d 0)
alen blen)))
@@ -3006,7 +3043,7 @@ See calc-keypad for details."
(if (cdr b)
(let* ((alen (length a))
(blen (length b))
- (d (/ 1000 (1+ (nth (1- blen) b))))
+ (d (/ math-bignum-digit-size (1+ (nth (1- blen) b))))
(res (math-div-bignum-big (math-mul-bignum-digit a d 0)
(math-mul-bignum-digit b d 0)
alen blen)))
@@ -3021,7 +3058,7 @@ See calc-keypad for details."
(defun math-div-bignum-digit (a b)
(if a
(let* ((res (math-div-bignum-digit (cdr a) b))
- (num (+ (* (cdr res) 1000) (car a))))
+ (num (+ (* (cdr res) math-bignum-digit-size) (car a))))
(cons
(cons (/ num b) (car res))
(% num b)))
@@ -3037,10 +3074,11 @@ See calc-keypad for details."
(cons (car res2) (car res))
(cdr res2)))))
-(defun math-div-bignum-part (a b blen) ; a < b*1000 [D.l l L]
- (let* ((num (+ (* (or (nth blen a) 0) 1000) (or (nth (1- blen) a) 0)))
+(defun math-div-bignum-part (a b blen) ; a < b*math-bignum-digit-size [D.l l L]
+ (let* ((num (+ (* (or (nth blen a) 0) math-bignum-digit-size)
+ (or (nth (1- blen) a) 0)))
(den (nth (1- blen) b))
- (guess (min (/ num den) 999)))
+ (guess (min (/ num den) (1- math-bignum-digit-size))))
(math-div-bignum-try a b (math-mul-bignum-digit b guess 0) guess)))
(defun math-div-bignum-try (a b c guess) ; [D.l l l D]
@@ -3351,15 +3389,22 @@ See calc-keypad for details."
(if a
(let ((s ""))
(while (cdr (cdr a))
- (setq s (concat (format "%06d" (+ (* (nth 1 a) 1000) (car a))) s)
+ (setq s (concat
+ (format
+ (concat "%0"
+ (number-to-string (* 2 math-bignum-digit-length))
+ "d")
+ (+ (* (nth 1 a) math-bignum-digit-size) (car a))) s)
a (cdr (cdr a))))
- (concat (int-to-string (+ (* (or (nth 1 a) 0) 1000) (car a))) s))
+ (concat (int-to-string
+ (+ (* (or (nth 1 a) 0) math-bignum-digit-size) (car a))) s))
"0"))
;;; Parse a simple number in string form. [N X] [Public]
(defun math-read-number (s)
+ "Convert the string S into a Calc number."
(math-normalize
(cond
@@ -3370,7 +3415,7 @@ See calc-keypad for details."
(> (length digs) 1)
(eq (aref digs 0) ?0))
(math-read-number (concat "8#" digs))
- (if (<= (length digs) 6)
+ (if (<= (length digs) (* 2 math-bignum-digit-length))
(string-to-number digs)
(cons 'bigpos (math-read-bignum digs))))))
@@ -3416,15 +3461,42 @@ See calc-keypad for details."
;; Syntax error!
(t nil))))
+;;; Parse a very simple number, keeping all digits.
+(defun math-read-number-simple (s)
+ "Convert the string S into a Calc number.
+S is assumed to be a simple number (integer or float without an exponent)
+and all digits are kept, regardless of Calc's current precision."
+ (cond
+ ;; Integer
+ ((string-match "^[0-9]+$" s)
+ (if (string-match "^\\(0+\\)" s)
+ (setq s (substring s (match-end 0))))
+ (if (<= (length s) (* 2 math-bignum-digit-length))
+ (string-to-number s)
+ (cons 'bigpos (math-read-bignum s))))
+ ;; Minus sign
+ ((string-match "^-[0-9]+$" s)
+ (if (<= (length s) (1+ (* 2 math-bignum-digit-length)))
+ (string-to-number s)
+ (cons 'bigneg (math-read-bignum (substring s 1)))))
+ ;; Decimal point
+ ((string-match "^\\(-?[0-9]*\\)\\.\\([0-9]*\\)$" s)
+ (let ((int (math-match-substring s 1))
+ (frac (math-match-substring s 2)))
+ (list 'float (math-read-number-simple (concat int frac))
+ (- (length frac)))))
+ ;; Syntax error!
+ (t nil)))
+
(defun math-match-substring (s n)
(if (match-beginning n)
(substring s (match-beginning n) (match-end n))
""))
(defun math-read-bignum (s) ; [l X]
- (if (> (length s) 3)
- (cons (string-to-number (substring s -3))
- (math-read-bignum (substring s 0 -3)))
+ (if (> (length s) math-bignum-digit-length)
+ (cons (string-to-number (substring s (- math-bignum-digit-length)))
+ (math-read-bignum (substring s 0 (- math-bignum-digit-length))))
(list (string-to-number s))))
@@ -3458,8 +3530,6 @@ See calc-keypad for details."
(defconst math-standard-opers
'( ( "_" calcFunc-subscr 1200 1201 )
( "%" calcFunc-percent 1100 -1 )
- ( "u+" ident -1 1000 )
- ( "u-" neg -1 1000 197 )
( "u!" calcFunc-lnot -1 1000 )
( "mod" mod 400 400 185 )
( "+/-" sdev 300 300 185 )
@@ -3467,8 +3537,8 @@ See calc-keypad for details."
( "!" calcFunc-fact 210 -1 )
( "^" ^ 201 200 )
( "**" ^ 201 200 )
- ( "*" * 196 195 )
- ( "2x" * 196 195 )
+ ( "u+" ident -1 197 )
+ ( "u-" neg -1 197 )
( "/" / 190 191 )
( "%" % 190 191 )
( "\\" calcFunc-idiv 190 191 )
@@ -3492,7 +3562,31 @@ See calc-keypad for details."
( "::" calcFunc-condition 45 46 )
( "=>" calcFunc-evalto 40 41 )
( "=>" calcFunc-evalto 40 -1 )))
-(defvar math-expr-opers math-standard-opers)
+
+(defun math-standard-ops ()
+ (if calc-multiplication-has-precedence
+ (cons
+ '( "*" * 196 195 )
+ (cons
+ '( "2x" * 196 195 )
+ math-standard-opers))
+ (cons
+ '( "*" * 190 191 )
+ (cons
+ '( "2x" * 190 191 )
+ math-standard-opers))))
+
+(defvar math-expr-opers (math-standard-ops))
+
+(defun math-standard-ops-p ()
+ (let ((meo (caar math-expr-opers)))
+ (and (stringp meo)
+ (string= meo "*"))))
+
+(defun math-expr-ops ()
+ (if (math-standard-ops-p)
+ (math-standard-ops)
+ math-expr-opers))
;;;###autoload
(defun calc-grab-region (top bot arg)
@@ -3551,7 +3645,7 @@ Also looks for the equivalent TeX words, \\gets and \\evalto."
;;; Functions needed for Lucid Emacs support.
(defun calc-read-key (&optional optkey)
- (cond (calc-emacs-type-lucid
+ (cond ((featurep 'xemacs)
(let ((event (next-command-event)))
(let ((key (event-to-character event t t)))
(or key optkey (error "Expected a plain keystroke"))
@@ -3569,7 +3663,7 @@ Also looks for the equivalent TeX words, \\gets and \\evalto."
(defun calc-clear-unread-commands ()
(if (featurep 'xemacs)
- (calc-emacs-type-lucid (setq unread-command-event nil))
+ (setq unread-command-event nil)
(setq unread-command-events nil)))
(when calc-always-load-extensions
diff --git a/lisp/calc/calcalg3.el b/lisp/calc/calcalg3.el
index 9f263a2281a..5aa410be19e 100644
--- a/lisp/calc/calcalg3.el
+++ b/lisp/calc/calcalg3.el
@@ -115,6 +115,8 @@
(if (calc-is-hyperbolic) 'calcFunc-efit
'calcFunc-fit)))
key (which 0)
+ (nonlinear nil)
+ (plot nil)
n calc-curve-nvars temp data
(homog nil)
(msgs '( "(Press ? for help)"
@@ -125,12 +127,18 @@
"E = a 10^(b x), X = 10^(a + b x), L = a + b log10(x)"
"q = a + b (x-c)^2"
"g = (a/b sqrt(2 pi)) exp(-0.5*((x-c)/b)^2)"
+ "s = a/(1 + exp(b (x - c)))"
+ "b = a exp(b (x - c))/(1 + exp(b (x - c)))^2"
+ "o = (y/x) = a (1 - x/b)"
"h prefix = homogeneous model (no constant term)"
+ "P prefix = plot result"
"' = alg entry, $ = stack, u = Model1, U = Model2")))
(while (not calc-curve-model)
- (message "Fit to model: %s:%s"
- (nth which msgs)
- (if homog " h" ""))
+ (message
+ "Fit to model: %s:%s%s"
+ (nth which msgs)
+ (if plot "P" " ")
+ (if homog "h" ""))
(setq key (read-char))
(cond ((= key ?\C-g)
(keyboard-quit))
@@ -138,6 +146,16 @@
(setq which (% (1+ which) (length msgs))))
((memq key '(?h ?H))
(setq homog (not homog)))
+ ((= key ?P)
+ (if plot
+ (setq plot nil)
+ (let ((data (calc-top 1)))
+ (if (or
+ (calc-is-hyperbolic)
+ (calc-is-inverse)
+ (not (= (length data) 3)))
+ (setq plot "Can't plot")
+ (setq plot data)))))
((progn
(if (eq key ?\$)
(setq n 1)
@@ -164,8 +182,9 @@
((= key ?1) ; linear or multilinear
(calc-get-fit-variables calc-curve-nvars
(1+ calc-curve-nvars) (and homog 0))
- (setq calc-curve-model (math-mul calc-curve-coefnames
- (cons 'vec (cons 1 (cdr calc-curve-varnames))))))
+ (setq calc-curve-model
+ (math-mul calc-curve-coefnames
+ (cons 'vec (cons 1 (cdr calc-curve-varnames))))))
((and (>= key ?2) (<= key ?9)) ; polynomial
(calc-get-fit-variables 1 (- key ?0 -1) (and homog 0))
(setq calc-curve-model
@@ -180,58 +199,88 @@
((= key ?p) ; power law
(calc-get-fit-variables calc-curve-nvars
(1+ calc-curve-nvars) (and homog 1))
- (setq calc-curve-model (math-mul (nth 1 calc-curve-coefnames)
- (calcFunc-reduce
- '(var mul var-mul)
- (calcFunc-map
- '(var pow var-pow)
- calc-curve-varnames
- (cons 'vec (cdr (cdr calc-curve-coefnames))))))))
+ (setq calc-curve-model
+ (math-mul
+ (nth 1 calc-curve-coefnames)
+ (calcFunc-reduce
+ '(var mul var-mul)
+ (calcFunc-map
+ '(var pow var-pow)
+ calc-curve-varnames
+ (cons 'vec (cdr (cdr calc-curve-coefnames))))))))
((= key ?^) ; exponential law
(calc-get-fit-variables calc-curve-nvars
(1+ calc-curve-nvars) (and homog 1))
- (setq calc-curve-model (math-mul (nth 1 calc-curve-coefnames)
- (calcFunc-reduce
- '(var mul var-mul)
- (calcFunc-map
- '(var pow var-pow)
- (cons 'vec (cdr (cdr calc-curve-coefnames)))
- calc-curve-varnames)))))
+ (setq calc-curve-model
+ (math-mul (nth 1 calc-curve-coefnames)
+ (calcFunc-reduce
+ '(var mul var-mul)
+ (calcFunc-map
+ '(var pow var-pow)
+ (cons 'vec (cdr (cdr calc-curve-coefnames)))
+ calc-curve-varnames)))))
+ ((= key ?s)
+ (setq nonlinear t)
+ (setq calc-curve-model t)
+ (require 'calc-nlfit)
+ (calc-fit-s-shaped-logistic-curve func))
+ ((= key ?b)
+ (setq nonlinear t)
+ (setq calc-curve-model t)
+ (require 'calc-nlfit)
+ (calc-fit-bell-shaped-logistic-curve func))
+ ((= key ?o)
+ (setq nonlinear t)
+ (setq calc-curve-model t)
+ (require 'calc-nlfit)
+ (if (and plot (not (stringp plot)))
+ (setq plot
+ (list 'vec
+ (nth 1 plot)
+ (cons
+ 'vec
+ (mapcar* 'calcFunc-div
+ (cdr (nth 2 plot))
+ (cdr (nth 1 plot)))))))
+ (calc-fit-hubbert-linear-curve func))
((memq key '(?e ?E))
(calc-get-fit-variables calc-curve-nvars
(1+ calc-curve-nvars) (and homog 1))
- (setq calc-curve-model (math-mul (nth 1 calc-curve-coefnames)
- (calcFunc-reduce
- '(var mul var-mul)
- (calcFunc-map
- (if (eq key ?e)
- '(var exp var-exp)
- '(calcFunc-lambda
- (var a var-a)
- (^ 10 (var a var-a))))
- (calcFunc-map
- '(var mul var-mul)
- (cons 'vec (cdr (cdr calc-curve-coefnames)))
- calc-curve-varnames))))))
+ (setq calc-curve-model
+ (math-mul (nth 1 calc-curve-coefnames)
+ (calcFunc-reduce
+ '(var mul var-mul)
+ (calcFunc-map
+ (if (eq key ?e)
+ '(var exp var-exp)
+ '(calcFunc-lambda
+ (var a var-a)
+ (^ 10 (var a var-a))))
+ (calcFunc-map
+ '(var mul var-mul)
+ (cons 'vec (cdr (cdr calc-curve-coefnames)))
+ calc-curve-varnames))))))
((memq key '(?x ?X))
(calc-get-fit-variables calc-curve-nvars
(1+ calc-curve-nvars) (and homog 0))
- (setq calc-curve-model (math-mul calc-curve-coefnames
- (cons 'vec (cons 1 (cdr calc-curve-varnames)))))
+ (setq calc-curve-model
+ (math-mul calc-curve-coefnames
+ (cons 'vec (cons 1 (cdr calc-curve-varnames)))))
(setq calc-curve-model (if (eq key ?x)
(list 'calcFunc-exp calc-curve-model)
(list '^ 10 calc-curve-model))))
((memq key '(?l ?L))
(calc-get-fit-variables calc-curve-nvars
(1+ calc-curve-nvars) (and homog 0))
- (setq calc-curve-model (math-mul calc-curve-coefnames
- (cons 'vec
- (cons 1 (cdr (calcFunc-map
- (if (eq key ?l)
- '(var ln var-ln)
- '(var log10
- var-log10))
- calc-curve-varnames)))))))
+ (setq calc-curve-model
+ (math-mul calc-curve-coefnames
+ (cons 'vec
+ (cons 1 (cdr (calcFunc-map
+ (if (eq key ?l)
+ '(var ln var-ln)
+ '(var log10
+ var-log10))
+ calc-curve-varnames)))))))
((= key ?q)
(calc-get-fit-variables calc-curve-nvars
(1+ (* 2 calc-curve-nvars)) (and homog 0))
@@ -247,12 +296,14 @@
(list '- (car v) (nth 1 c))
2)))))))
((= key ?g)
- (setq calc-curve-model
- (math-read-expr "(AFit / BFit sqrt(2 pi)) exp(-0.5 * ((XFit - CFit) / BFit)^2)")
- calc-curve-varnames '(vec (var XFit var-XFit))
- calc-curve-coefnames '(vec (var AFit var-AFit)
- (var BFit var-BFit)
- (var CFit var-CFit)))
+ (setq
+ calc-curve-model
+ (math-read-expr
+ "(AFit / BFit sqrt(2 pi)) exp(-0.5 * ((XFit - CFit) / BFit)^2)")
+ calc-curve-varnames '(vec (var XFit var-XFit))
+ calc-curve-coefnames '(vec (var AFit var-AFit)
+ (var BFit var-BFit)
+ (var CFit var-CFit)))
(calc-get-fit-variables 1 (1- (length calc-curve-coefnames))
(and homog 1)))
((memq key '(?\$ ?\' ?u ?U))
@@ -262,8 +313,9 @@
(let* ((calc-dollar-values calc-arg-values)
(calc-dollar-used 0)
(calc-hashes-used 0))
- (setq calc-curve-model (calc-do-alg-entry "" "Model formula: "
- nil 'calc-curve-fit-history))
+ (setq calc-curve-model
+ (calc-do-alg-entry "" "Model formula: "
+ nil 'calc-curve-fit-history))
(if (/= (length calc-curve-model) 1)
(error "Bad format"))
(setq calc-curve-model (car calc-curve-model)
@@ -296,11 +348,13 @@
(or (nth 3 calc-curve-model)
(cons 'vec
(math-all-vars-but
- calc-curve-model calc-curve-varnames)))
+ calc-curve-model
+ calc-curve-varnames)))
calc-curve-model (nth 1 calc-curve-model))
(error "Incorrect model specifier")))))
(or calc-curve-varnames
- (let ((with-y (eq (car-safe calc-curve-model) 'calcFunc-eq)))
+ (let ((with-y
+ (eq (car-safe calc-curve-model) 'calcFunc-eq)))
(if calc-curve-coefnames
(calc-get-fit-variables
(if with-y (1+ calc-curve-nvars) calc-curve-nvars)
@@ -310,7 +364,10 @@
nil with-y)
(let* ((coefs (math-all-vars-but calc-curve-model nil))
(vars nil)
- (n (- (length coefs) calc-curve-nvars (if with-y 2 1)))
+ (n (-
+ (length coefs)
+ calc-curve-nvars
+ (if with-y 2 1)))
p)
(if (< n 0)
(error "Not enough variables in model"))
@@ -326,18 +383,43 @@
calc-curve-varnames calc-curve-coefnames)
"modl"))))
(t (beep))))
- (let ((calc-fit-to-trail t))
- (calc-enter-result n (substring (symbol-name func) 9)
- (list func calc-curve-model
- (if (= (length calc-curve-varnames) 2)
- (nth 1 calc-curve-varnames)
- calc-curve-varnames)
- (if (= (length calc-curve-coefnames) 2)
- (nth 1 calc-curve-coefnames)
- calc-curve-coefnames)
- data))
- (if (consp calc-fit-to-trail)
- (calc-record (calc-normalize calc-fit-to-trail) "parm"))))))
+ (unless nonlinear
+ (let ((calc-fit-to-trail t))
+ (calc-enter-result n (substring (symbol-name func) 9)
+ (list func calc-curve-model
+ (if (= (length calc-curve-varnames) 2)
+ (nth 1 calc-curve-varnames)
+ calc-curve-varnames)
+ (if (= (length calc-curve-coefnames) 2)
+ (nth 1 calc-curve-coefnames)
+ calc-curve-coefnames)
+ data))
+ (if (consp calc-fit-to-trail)
+ (calc-record (calc-normalize calc-fit-to-trail) "parm"))))
+ (when plot
+ (if (stringp plot)
+ (message plot)
+ (let ((calc-graph-no-auto-view t))
+ (calc-graph-delete t)
+ (calc-graph-add-curve
+ (calc-graph-lookup (nth 1 plot))
+ (calc-graph-lookup (nth 2 plot)))
+ (unless (math-contains-sdev-p (nth 2 data))
+ (calc-graph-set-styles nil nil)
+ (calc-graph-point-style nil))
+ (setq plot (cdr (nth 1 plot)))
+ (setq plot
+ (list 'intv
+ 3
+ (math-sub
+ (math-min-list (car plot) (cdr plot))
+ '(float 5 -1))
+ (math-add
+ '(float 5 -1)
+ (math-max-list (car plot) (cdr plot)))))
+ (calc-graph-add-curve (calc-graph-lookup plot)
+ (calc-graph-lookup (calc-top-n 1)))
+ (calc-graph-plot nil)))))))
(defun calc-invent-independent-variables (n &optional but)
(calc-invent-variables n but '(x y z t) "x"))
diff --git a/lisp/calc/calccomp.el b/lisp/calc/calccomp.el
index 507ad53ce49..6bd663cef5b 100644
--- a/lisp/calc/calccomp.el
+++ b/lisp/calc/calccomp.el
@@ -83,6 +83,7 @@
(defun math-compose-expr (a prec)
(let ((math-compose-level (1+ math-compose-level))
+ (math-expr-opers (math-expr-ops))
spfn)
(cond
((or (and (eq a math-comp-selected) a)
diff --git a/lisp/calculator.el b/lisp/calculator.el
index 80d68306c28..aca37dd7cda 100644
--- a/lisp/calculator.el
+++ b/lisp/calculator.el
@@ -5,7 +5,7 @@
;; Author: Eli Barzilay <eli@barzilay.org>
;; Keywords: tools, convenience
-;; Time-stamp: <2006-02-06 13:36:00 ttn>
+;; Time-stamp: <2007-08-31 03:00:11 ttn>
;; This file is part of GNU Emacs.
@@ -47,6 +47,7 @@
;;; History:
;; I hate history.
+(eval-when-compile (require 'cl))
(eval-and-compile
(if (fboundp 'defgroup) nil
(defmacro defgroup (&rest forms) nil)
@@ -278,7 +279,7 @@ Examples:
("IC" acos (D (acos X)) x 6)
("IT" atan (D (atan X)) x 6)
("Q" sqrt sqrt x 7)
- ("^" ^ expt 2 7)
+ ("^" ^ calculator-expt 2 7)
("!" ! calculator-fact x 7)
(";" 1/ (/ 1 X) 1 7)
("_" - - 1 8)
@@ -596,7 +597,8 @@ specified, then it is fixed, otherwise it depends on this variable).
`+' and `-' can be used as either binary operators or prefix unary
operators. Numbers can be entered with exponential notation using `e',
except when using a non-decimal radix mode for input (in this case `e'
-will be the hexadecimal digit).
+will be the hexadecimal digit). If the result of a calculation is too
+large (out of range for Emacs), the value of \"inf\" is returned.
Here are the editing keys:
* `RET' `=' evaluate the current expression
@@ -1713,7 +1715,7 @@ Used by `calculator-paste' and `get-register'."
(use-global-map calculator-saved-global-map))
(if (or (not calculator-electric-mode)
;; XEmacs has a problem with electric-describe-mode
- (string-match "XEmacs" (emacs-version)))
+ (featurep 'xemacs))
(describe-mode)
(electric-describe-mode))
(if calculator-electric-mode
@@ -1779,13 +1781,57 @@ To use this, apply a binary operator (evaluate it), then call this."
(car calculator-last-opXY) (nth 1 calculator-last-opXY) x))
x))
+(defun calculator-integer-p (x)
+ "Non-nil if X is equal to an integer."
+ (condition-case nil
+ (= x (ftruncate x))
+ (error nil)))
+
+(defun calculator-expt (x y)
+ "Compute X^Y, dealing with errors appropriately."
+ (condition-case
+ nil
+ (expt x y)
+ (domain-error 0.0e+NaN)
+ (range-error
+ (cond
+ ((and (< x 1.0) (> x -1.0))
+ ;; For small x, the range error comes from large y.
+ 0.0)
+ ((and (> x 0.0) (< y 0.0))
+ ;; For large positive x and negative y, the range error
+ ;; comes from large negative y.
+ 0.0)
+ ((and (> x 0.0) (> y 0.0))
+ ;; For large positive x and positive y, the range error
+ ;; comes from large y.
+ 1.0e+INF)
+ ;; For the rest, x must be large and negative.
+ ;; The range errors come from large integer y.
+ ((< y 0.0)
+ 0.0)
+ ((oddp (truncate y))
+ ;; If y is odd
+ -1.0e+INF)
+ (t
+ ;;
+ 1.0e+INF)))
+ (error 0.0e+NaN)))
+
(defun calculator-fact (x)
"Simple factorial of X."
- (let ((r (if (<= x 10) 1 1.0)))
- (while (> x 0)
- (setq r (* r (truncate x)))
- (setq x (1- x)))
- (+ 0.0 r)))
+ (if (and (>= x 0)
+ (calculator-integer-p x))
+ (if (= (calculator-expt (/ x 3.0) x) 1.0e+INF)
+ 1.0e+INF
+ (let ((r (if (<= x 10) 1 1.0)))
+ (while (> x 0)
+ (setq r (* r (truncate x)))
+ (setq x (1- x)))
+ (+ 0.0 r)))
+ (if (= x 1.0e+INF)
+ x
+ 0.0e+NaN)))
(defun calculator-truncate (n)
"Truncate N, return 0 in case of overflow."
diff --git a/lisp/calendar/appt.el b/lisp/calendar/appt.el
index 7f343f300dc..94df068b012 100644
--- a/lisp/calendar/appt.el
+++ b/lisp/calendar/appt.el
@@ -531,9 +531,9 @@ The time should be in either 24 hour format or am/pm format."
(message "")))
-(eval-when-compile (defvar number)
- (defvar original-date)
- (defvar diary-entries-list))
+(defvar number)
+(defvar original-date)
+(defvar diary-entries-list)
;;;###autoload
(defun appt-make-list ()
"Update the appointments list from today's diary buffer.
@@ -634,7 +634,7 @@ appointment package (if it is not already active)."
(defun appt-sort-list (appt-list)
"Sort an appointment list, putting earlier items at the front.
APPT-LIST is a list of the same format as `appt-time-msg-list'."
-(sort appt-list (lambda (e1 e2) (< (caar e1) (caar e2)))))
+ (sort appt-list (lambda (e1 e2) (< (caar e1) (caar e2)))))
(defun appt-convert-time (time2conv)
diff --git a/lisp/calendar/cal-bahai.el b/lisp/calendar/cal-bahai.el
index adb9e20a3d6..dae539b3436 100644
--- a/lisp/calendar/cal-bahai.el
+++ b/lisp/calendar/cal-bahai.el
@@ -1,11 +1,11 @@
-;;; cal-bahai.el --- calendar functions for the Baha'i calendar.
+;;; cal-bahai.el --- calendar functions for the Bahá'í calendar. -*- coding: utf-8 -*-
;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
;; Free Software Foundation, Inc.
;; Author: John Wiegley <johnw@gnu.org>
;; Keywords: calendar
-;; Human-Keywords: Baha'i calendar, Baha'i, Bahai, calendar, diary
+;; Human-Keywords: Bahá'í calendar, Bahá'í, Baha'i, Bahai, calendar, diary
;; This file is part of GNU Emacs.
@@ -27,31 +27,31 @@
;;; Commentary:
;; This collection of functions implements the features of calendar.el
-;; and diary.el that deal with the Baha'i calendar.
+;; and diary.el that deal with the Bahá'í calendar.
-;; The Baha'i (http://www.bahai.org) calendar system is based on a
+;; The Bahá'í (http://www.bahai.org) calendar system is based on a
;; solar cycle of 19 months with 19 days each. The four remaining
-;; "intercalary" days are called the Ayyam-i-Ha (days of Ha), and are
+;; "intercalary" days are called the Ayyám-i-Há (days of Há), and are
;; placed between the 18th and 19th months. They are meant as a time
;; of festivals preceding the 19th month, which is the month of
-;; fasting. In Gregorian leap years, there are 5 of these days (Ha
+;; fasting. In Gregorian leap years, there are 5 of these days (Há
;; has the numerical value of 5 in the arabic abjad, or
;; letter-to-number, reckoning).
;; Each month is named after an attribute of God, as are the 19 days
;; -- which have the same names as the months. There is also a name
;; for each year in every 19 year cycle. These cycles are called
-;; Vahids. A cycle of 19 Vahids (361 years) is called a Kullu-Shay,
+;; Váhids. A cycle of 19 Váhids (361 years) is called a Kullu-Shay,
;; which means "all things".
-;; The calendar was named the "Badi calendar" by its author, the Bab.
+;; The calendar was named the "Badí` calendar" by its author, the Báb.
;; It uses a week of seven days, corresponding to the Gregorian week,
;; each of which has its own name, again patterned after the
;; attributes of God.
-;; Note: The days of Ayyam-i-Ha are encoded as zero and negative
+;; Note: The days of Ayyám-i-Há are encoded as zero and negative
;; offsets from the first day of the final month. So, (19 -3 157) is
-;; the first day of Ayyam-i-Ha, in the year 157 BE.
+;; the first day of Ayyám-i-Há, in the year 157 BE.
;;; Code:
@@ -63,23 +63,23 @@
(require 'cal-julian)
-(defvar bahai-calendar-month-name-array
- ["Baha" "Jalal" "Jamal" "`Azamat" "Nur" "Rahmat" "Kalimat" "Kamal"
- "Asma" "`Izzat" "Mashiyyat" "`Ilm" "Qudrat" "Qawl" "Masa'il"
- "Sharaf" "Sultan" "Mulk" "`Ala"])
+(defconst calendar-bahai-month-name-array
+ ["Bahá" "Jalál" "Jamál" "`Azamat" "Núr" "Rahmat" "Kalimát" "Kamál"
+ "Asmá" "`Izzat" "Mashiyyat" "`Ilm" "Qudrat" "Qawl" "Masá'il"
+ "Sharaf" "Sultán" "Mulk" "`Alá"])
-(defvar calendar-bahai-epoch (calendar-absolute-from-gregorian '(3 21 1844))
- "Absolute date of start of Baha'i calendar = March 19, 622 A.D. (Julian).")
+(defconst calendar-bahai-epoch (calendar-absolute-from-gregorian '(3 21 1844))
+ "Absolute date of start of Bahá'í calendar = March 19, 622 A.D. (Julian).")
-(defun bahai-calendar-leap-year-p (year)
- "True if YEAR is a leap year on the Baha'i calendar."
+(defun calendar-bahai-leap-year-p (year)
+ "True if YEAR is a leap year on the Bahá'í calendar."
(calendar-leap-year-p (+ year 1844)))
-(defvar bahai-calendar-leap-base
+(defconst calendar-bahai-leap-base
(+ (/ 1844 4) (- (/ 1844 100)) (/ 1844 400)))
(defun calendar-absolute-from-bahai (date)
- "Compute absolute date from Baha'i date DATE.
+ "Compute absolute date from Bahá'í date DATE.
The absolute date is the number of days elapsed since the (imaginary)
Gregorian date Sunday, December 31, 1 BC."
(let* ((month (extract-calendar-month date))
@@ -89,7 +89,7 @@ Gregorian date Sunday, December 31, 1 BC."
(leap-days (- (+ (/ prior-years 4) ; Leap days in prior years.
(- (/ prior-years 100))
(/ prior-years 400))
- bahai-calendar-leap-base)))
+ calendar-bahai-leap-base)))
(+ (1- calendar-bahai-epoch) ; Days before epoch
(* 365 (1- year)) ; Days in prior years.
leap-days
@@ -98,9 +98,9 @@ Gregorian date Sunday, December 31, 1 BC."
day))) ; Days so far this month.
(defun calendar-bahai-from-absolute (date)
- "Baha'i year corresponding to the absolute DATE."
+ "Bahá'í year corresponding to the absolute DATE."
(if (< date calendar-bahai-epoch)
- (list 0 0 0) ;; pre-Baha'i date
+ (list 0 0 0) ;; pre-Bahá'í date
(let* ((greg (calendar-gregorian-from-absolute date))
(year (+ (- (extract-calendar-year greg) 1844)
(if (or (> (extract-calendar-month greg) 3)
@@ -119,7 +119,7 @@ Gregorian date Sunday, December 31, 1 BC."
(list month day year))))
(defun calendar-bahai-date-string (&optional date)
- "String of Baha'i date of Gregorian DATE.
+ "String of Bahá'í date of Gregorian DATE.
Defaults to today's date if DATE is not given."
(let* ((bahai-date (calendar-bahai-from-absolute
(calendar-absolute-from-gregorian
@@ -130,11 +130,11 @@ Defaults to today's date if DATE is not given."
(let ((monthname
(if (and (= m 19)
(<= d 0))
- "Ayyam-i-Ha"
- (aref bahai-calendar-month-name-array (1- m))))
+ "Ayyám-i-Há"
+ (aref calendar-bahai-month-name-array (1- m))))
(day (int-to-string
(if (<= d 0)
- (if (bahai-calendar-leap-year-p y)
+ (if (calendar-bahai-leap-year-p y)
(+ d 5)
(+ d 4))
d)))
@@ -143,25 +143,25 @@ Defaults to today's date if DATE is not given."
(year (int-to-string y)))
(mapconcat 'eval calendar-date-display-form ""))))
-(defun calendar-print-bahai-date ()
- "Show the Baha'i calendar equivalent of the selected date."
+(defun calendar-bahai-print-date ()
+ "Show the Bahá'í calendar equivalent of the selected date."
(interactive)
- (message "Baha'i date: %s"
+ (message "Bahá'í date: %s"
(calendar-bahai-date-string (calendar-cursor-to-date t))))
-(defun calendar-goto-bahai-date (date &optional noecho)
- "Move cursor to Baha'i date DATE.
-Echo Baha'i date unless NOECHO is t."
- (interactive (bahai-prompt-for-date))
+(defun calendar-bahai-goto-date (date &optional noecho)
+ "Move cursor to Bahá'í date DATE.
+Echo Bahá'í date unless NOECHO is t."
+ (interactive (calendar-bahai-prompt-for-date))
(calendar-goto-date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai date)))
- (or noecho (calendar-print-bahai-date)))
+ (or noecho (calendar-bahai-print-date)))
-(defun bahai-prompt-for-date ()
- "Ask for a Baha'i date."
+(defun calendar-bahai-prompt-for-date ()
+ "Ask for a Bahá'í date."
(let* ((today (calendar-current-date))
(year (calendar-read
- "Baha'i calendar year (not 0): "
+ "Bahá'í calendar year (not 0): "
'(lambda (x) (/= x 0))
(int-to-string
(extract-calendar-year
@@ -170,23 +170,23 @@ Echo Baha'i date unless NOECHO is t."
(completion-ignore-case t)
(month (cdr (assoc
(completing-read
- "Baha'i calendar month name: "
+ "Bahá'í calendar month name: "
(mapcar 'list
- (append bahai-calendar-month-name-array nil))
+ (append calendar-bahai-month-name-array nil))
nil t)
- (calendar-make-alist bahai-calendar-month-name-array
+ (calendar-make-alist calendar-bahai-month-name-array
1))))
- (day (calendar-read "Baha'i calendar day (1-19): "
+ (day (calendar-read "Bahá'í calendar day (1-19): "
'(lambda (x) (and (< 0 x) (<= x 19))))))
(list (list month day year))))
(defun diary-bahai-date ()
- "Baha'i calendar equivalent of date diary entry."
- (format "Baha'i date: %s" (calendar-bahai-date-string date)))
+ "Bahá'í calendar equivalent of date diary entry."
+ (format "Bahá'í date: %s" (calendar-bahai-date-string date)))
(defun holiday-bahai (month day string)
- "Holiday on MONTH, DAY (Baha'i) called STRING.
-If MONTH, DAY (Baha'i) is visible, the value returned is corresponding
+ "Holiday on MONTH, DAY (Bahá'í) called STRING.
+If MONTH, DAY (Bahá'í) is visible, the value returned is corresponding
Gregorian date in the form of the list (((month day year) STRING)). Returns
nil if it is not visible in the current calendar window."
(let* ((bahai-date (calendar-bahai-from-absolute
@@ -196,22 +196,22 @@ nil if it is not visible in the current calendar window."
(y (extract-calendar-year bahai-date))
(date))
(if (< m 1)
- nil ;; Baha'i calendar doesn't apply.
+ nil ;; Bahá'í calendar doesn't apply.
(increment-calendar-month m y (- 10 month))
- (if (> m 7) ;; Baha'i date might be visible
+ (if (> m 7) ;; Bahá'í date might be visible
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai (list month day y)))))
(if (calendar-date-is-visible-p date)
(list (list date string))))))))
-(defun list-bahai-diary-entries ()
- "Add any Baha'i date entries from the diary file to `diary-entries-list'.
-Baha'i date diary entries must be prefaced by an
+(defun diary-bahai-list-entries ()
+ "Add any Bahá'í date entries from the diary file to `diary-entries-list'.
+Bahá'í date diary entries must be prefaced by an
`bahai-diary-entry-symbol' (normally a `B'). The same diary date
-forms govern the style of the Baha'i calendar entries, except that the
-Baha'i month names must be given numerically. The Baha'i months are
-numbered from 1 to 19 with Baha being 1 and 19 being `Ala. If a
-Baha'i date diary entry begins with a `diary-nonmarking-symbol', the
+forms govern the style of the Bahá'í calendar entries, except that the
+Bahá'í month names must be given numerically. The Bahá'í months are
+numbered from 1 to 19 with Bahá being 1 and 19 being `Alá. If a
+Bahá'í date diary entry begins with a `diary-nonmarking-symbol', the
entry will appear in the diary listing, but will not be marked in the
calendar. This function is provided for use with the
`nongregorian-diary-listing-hook'."
@@ -220,85 +220,85 @@ calendar. This function is provided for use with the
(diary-modified (buffer-modified-p))
(gdate original-date)
(mark (regexp-quote diary-nonmarking-symbol)))
- (calendar-for-loop i from 1 to number do
- (let* ((d diary-date-forms)
- (bdate (calendar-bahai-from-absolute
- (calendar-absolute-from-gregorian gdate)))
- (month (extract-calendar-month bdate))
- (day (extract-calendar-day bdate))
- (year (extract-calendar-year bdate)))
- (while d
- (let*
- ((date-form (if (equal (car (car d)) 'backup)
- (cdr (car d))
- (car d)))
- (backup (equal (car (car d)) 'backup))
- (dayname
- (concat
- (calendar-day-name gdate) "\\|"
- (substring (calendar-day-name gdate) 0 3) ".?"))
- (calendar-month-name-array
- bahai-calendar-month-name-array)
- (monthname
- (concat
- "\\*\\|"
- (calendar-month-name month)))
- (month (concat "\\*\\|0*" (int-to-string month)))
- (day (concat "\\*\\|0*" (int-to-string day)))
- (year
- (concat
- "\\*\\|0*" (int-to-string year)
- (if abbreviated-calendar-year
- (concat "\\|" (int-to-string (% year 100)))
- "")))
- (regexp
- (concat
- "\\(\\`\\|\^M\\|\n\\)" mark "?"
- (regexp-quote bahai-diary-entry-symbol)
- "\\("
- (mapconcat 'eval date-form "\\)\\(")
- "\\)"))
- (case-fold-search t))
- (goto-char (point-min))
- (while (re-search-forward regexp nil t)
- (if backup (re-search-backward "\\<" nil t))
- (if (and (or (char-equal (preceding-char) ?\^M)
- (char-equal (preceding-char) ?\n))
- (not (looking-at " \\|\^I")))
- ;; Diary entry that consists only of date.
- (backward-char 1)
- ;; Found a nonempty diary entry--make it visible and
- ;; add it to the list.
- (let ((entry-start (point))
- (date-start))
- (re-search-backward "\^M\\|\n\\|\\`")
- (setq date-start (point))
- (re-search-forward "\^M\\|\n" nil t 2)
- (while (looking-at " \\|\^I")
- (re-search-forward "\^M\\|\n" nil t))
- (backward-char 1)
- (subst-char-in-region date-start (point) ?\^M ?\n t)
- (add-to-diary-list
- gdate
- (buffer-substring-no-properties entry-start (point))
- (buffer-substring-no-properties
- (1+ date-start) (1- entry-start)))))))
- (setq d (cdr d))))
- (setq gdate
- (calendar-gregorian-from-absolute
- (1+ (calendar-absolute-from-gregorian gdate)))))
- (set-buffer-modified-p diary-modified))
- (goto-char (point-min))))
-
-(defun mark-bahai-diary-entries ()
- "Mark days in the calendar window that have Baha'i date diary entries.
+ (dotimes (idummy number)
+ (let* ((d diary-date-forms)
+ (bdate (calendar-bahai-from-absolute
+ (calendar-absolute-from-gregorian gdate)))
+ (month (extract-calendar-month bdate))
+ (day (extract-calendar-day bdate))
+ (year (extract-calendar-year bdate)))
+ (while d
+ (let*
+ ((date-form (if (equal (car (car d)) 'backup)
+ (cdr (car d))
+ (car d)))
+ (backup (equal (car (car d)) 'backup))
+ (dayname
+ (concat
+ (calendar-day-name gdate) "\\|"
+ (substring (calendar-day-name gdate) 0 3) ".?"))
+ (calendar-month-name-array
+ calendar-bahai-month-name-array)
+ (monthname
+ (concat
+ "\\*\\|"
+ (calendar-month-name month)))
+ (month (concat "\\*\\|0*" (int-to-string month)))
+ (day (concat "\\*\\|0*" (int-to-string day)))
+ (year
+ (concat
+ "\\*\\|0*" (int-to-string year)
+ (if abbreviated-calendar-year
+ (concat "\\|" (int-to-string (% year 100)))
+ "")))
+ (regexp
+ (concat
+ "\\(\\`\\|\^M\\|\n\\)" mark "?"
+ (regexp-quote bahai-diary-entry-symbol)
+ "\\("
+ (mapconcat 'eval date-form "\\)\\(")
+ "\\)"))
+ (case-fold-search t))
+ (goto-char (point-min))
+ (while (re-search-forward regexp nil t)
+ (if backup (re-search-backward "\\<" nil t))
+ (if (and (or (char-equal (preceding-char) ?\^M)
+ (char-equal (preceding-char) ?\n))
+ (not (looking-at " \\|\^I")))
+ ;; Diary entry that consists only of date.
+ (backward-char 1)
+ ;; Found a nonempty diary entry--make it visible and
+ ;; add it to the list.
+ (let ((entry-start (point))
+ (date-start))
+ (re-search-backward "\^M\\|\n\\|\\`")
+ (setq date-start (point))
+ (re-search-forward "\^M\\|\n" nil t 2)
+ (while (looking-at " \\|\^I")
+ (re-search-forward "\^M\\|\n" nil t))
+ (backward-char 1)
+ (subst-char-in-region date-start (point) ?\^M ?\n t)
+ (add-to-diary-list
+ gdate
+ (buffer-substring-no-properties entry-start (point))
+ (buffer-substring-no-properties
+ (1+ date-start) (1- entry-start)))))))
+ (setq d (cdr d))))
+ (setq gdate
+ (calendar-gregorian-from-absolute
+ (1+ (calendar-absolute-from-gregorian gdate)))))
+ (set-buffer-modified-p diary-modified))
+ (goto-char (point-min))))
+
+(defun diary-bahai-mark-entries ()
+ "Mark days in the calendar window that have Bahá'í date diary entries.
Each entry in diary-file (or included files) visible in the calendar
-window is marked. Baha'i date entries are prefaced by a
+window is marked. Bahá'í date entries are prefaced by a
bahai-diary-entry-symbol \(normally a B`I'). The same
-diary-date-forms govern the style of the Baha'i calendar entries,
-except that the Baha'i month names must be spelled in full. The
-Baha'i months are numbered from 1 to 12 with Baha being 1 and 12 being
-`Ala. Baha'i date diary entries that begin with a
+diary-date-forms govern the style of the Bahá'í calendar entries,
+except that the Bahá'í month names must be spelled in full. The
+Bahá'í months are numbered from 1 to 12 with Bahá being 1 and 12 being
+`Alá. Bahá'í date diary entries that begin with a
diary-nonmarking-symbol will not be marked in the calendar. This
function is provided for use as part of the
nongregorian-diary-marking-hook."
@@ -311,7 +311,7 @@ nongregorian-diary-marking-hook."
(dayname (diary-name-pattern calendar-day-name-array))
(monthname
(concat
- (diary-name-pattern bahai-calendar-month-name-array t)
+ (diary-name-pattern calendar-bahai-month-name-array t)
"\\|\\*"))
(month "[0-9]+\\|\\*")
(day "[0-9]+\\|\\*")
@@ -395,19 +395,19 @@ nongregorian-diary-marking-hook."
(cdr (assoc-string
mm-name
(calendar-make-alist
- bahai-calendar-month-name-array)
+ calendar-bahai-month-name-array)
t)))))
- (mark-bahai-calendar-date-pattern mm dd yy)))))
+ (calendar-bahai-mark-date-pattern mm dd yy)))))
(setq d (cdr d)))))
-(defun mark-bahai-calendar-date-pattern (month day year)
- "Mark dates in calendar window that conform to Baha'i date MONTH/DAY/YEAR.
+(defun calendar-bahai-mark-date-pattern (month day year)
+ "Mark dates in calendar window that conform to Bahá'í date MONTH/DAY/YEAR.
A value of 0 in any position is a wildcard."
(save-excursion
(set-buffer calendar-buffer)
(if (and (/= 0 month) (/= 0 day))
(if (/= 0 year)
- ;; Fully specified Baha'i date.
+ ;; Fully specified Bahá'í date.
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai
(list month day year)))))
@@ -421,9 +421,9 @@ A value of 0 in any position is a wildcard."
(y (extract-calendar-year bahai-date))
(date))
(if (< m 1)
- nil;; Baha'i calendar doesn't apply.
+ nil;; Bahá'í calendar doesn't apply.
(increment-calendar-month m y (- 10 month))
- (if (> m 7);; Baha'i date might be visible
+ (if (> m 7);; Bahá'í date might be visible
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-bahai
(list month day y)))))
@@ -458,12 +458,12 @@ A value of 0 in any position is a wildcard."
(mark-visible-calendar-date
(calendar-gregorian-from-absolute date)))))))))
-(defun insert-bahai-diary-entry (arg)
+(defun diary-bahai-insert-entry (arg)
"Insert a diary entry.
-For the Baha'i date corresponding to the date indicated by point.
+For the Bahá'í date corresponding to the date indicated by point.
Prefix arg will make the entry nonmarking."
(interactive "P")
- (let* ((calendar-month-name-array bahai-calendar-month-name-array))
+ (let* ((calendar-month-name-array calendar-bahai-month-name-array))
(make-diary-entry
(concat
bahai-diary-entry-symbol
@@ -474,14 +474,14 @@ Prefix arg will make the entry nonmarking."
nil t))
arg)))
-(defun insert-monthly-bahai-diary-entry (arg)
+(defun diary-bahai-insert-monthly-entry (arg)
"Insert a monthly diary entry.
-For the day of the Baha'i month corresponding to the date indicated by point.
+For the day of the Bahá'í month corresponding to the date indicated by point.
Prefix arg will make the entry nonmarking."
(interactive "P")
(let* ((calendar-date-display-form
(if european-calendar-style '(day " * ") '("* " day )))
- (calendar-month-name-array bahai-calendar-month-name-array))
+ (calendar-month-name-array calendar-bahai-month-name-array))
(make-diary-entry
(concat
bahai-diary-entry-symbol
@@ -491,16 +491,16 @@ Prefix arg will make the entry nonmarking."
(calendar-cursor-to-date t)))))
arg)))
-(defun insert-yearly-bahai-diary-entry (arg)
+(defun diary-bahai-insert-yearly-entry (arg)
"Insert an annual diary entry.
-For the day of the Baha'i year corresponding to the date indicated by point.
+For the day of the Bahá'í year corresponding to the date indicated by point.
Prefix arg will make the entry nonmarking."
(interactive "P")
(let* ((calendar-date-display-form
(if european-calendar-style
'(day " " monthname)
'(monthname " " day)))
- (calendar-month-name-array bahai-calendar-month-name-array))
+ (calendar-month-name-array calendar-bahai-month-name-array))
(make-diary-entry
(concat
bahai-diary-entry-symbol
@@ -510,7 +510,25 @@ Prefix arg will make the entry nonmarking."
(calendar-cursor-to-date t)))))
arg)))
+;; Backward compatibility.
+(define-obsolete-function-alias
+ 'list-bahai-diary-entries 'diary-bahai-list-entries "23.1")
+(define-obsolete-function-alias
+ 'mark-bahai-diary-entries 'diary-bahai-mark-entries "23.1")
+(define-obsolete-function-alias
+ 'insert-bahai-diary-entry 'diary-bahai-insert-entry "23.1")
+(define-obsolete-function-alias
+ 'insert-monthly-bahai-diary-entry 'diary-bahai-insert-monthly-entry "23.1")
+(define-obsolete-function-alias
+ 'insert-yearly-bahai-diary-entry 'diary-bahai-insert-yearly-entry "23.1")
+(define-obsolete-function-alias
+ 'mark-bahai-calendar-date-pattern 'calendar-bahai-mark-date-pattern "23.1")
+(define-obsolete-function-alias
+ 'calendar-goto-bahai-date 'calendar-bahai-goto-date "23.1")
+(define-obsolete-function-alias
+ 'calendar-print-bahai-date 'calendar-bahai-print-date "23.1")
+
(provide 'cal-bahai)
-;;; arch-tag: c1cb1d67-862a-4264-a01c-41cb4df01f14
+;; arch-tag: c1cb1d67-862a-4264-a01c-41cb4df01f14
;;; cal-bahai.el ends here
diff --git a/lisp/calendar/cal-hebrew.el b/lisp/calendar/cal-hebrew.el
index 052c9bf7055..02cc9bfabb2 100644
--- a/lisp/calendar/cal-hebrew.el
+++ b/lisp/calendar/cal-hebrew.el
@@ -352,11 +352,11 @@ nil if it is not visible in the current calendar window."
(list (calendar-gregorian-from-absolute (+ abs-r-h 20))
"Hoshanah Rabbah")))
(output-list
- (filter-visible-calendar-holidays mandatory)))
+ (holiday-filter-visible-calendar mandatory)))
(if all-hebrew-calendar-holidays
(setq output-list
(append
- (filter-visible-calendar-holidays optional)
+ (holiday-filter-visible-calendar optional)
output-list)))
output-list)))
@@ -372,7 +372,7 @@ nil if it is not visible in the current calendar window."
(calendar-absolute-from-gregorian
(list m (calendar-last-day-of-month m y) y)))))
(abs-h (calendar-absolute-from-hebrew (list 9 25 h-y))))
- (filter-visible-calendar-holidays
+ (holiday-filter-visible-calendar
(list
(list (calendar-gregorian-from-absolute (1- abs-h))
"Erev Hanukkah")
@@ -469,11 +469,11 @@ nil if it is not visible in the current calendar window."
(list (calendar-gregorian-from-absolute (+ abs-p 51))
"Shavuot (second day)")))
(output-list
- (filter-visible-calendar-holidays mandatory)))
+ (holiday-filter-visible-calendar mandatory)))
(if all-hebrew-calendar-holidays
(setq output-list
(append
- (filter-visible-calendar-holidays optional)
+ (holiday-filter-visible-calendar optional)
output-list)))
output-list)))
@@ -485,7 +485,7 @@ nil if it is not visible in the current calendar window."
(let* ((abs-t-a (calendar-absolute-from-hebrew
(list 5 9 (+ displayed-year 3760)))))
- (filter-visible-calendar-holidays
+ (holiday-filter-visible-calendar
(list
(list (calendar-gregorian-from-absolute
(if (= (% abs-t-a 7) 6) (- abs-t-a 20) (- abs-t-a 21)))
@@ -516,76 +516,76 @@ not be marked in the calendar. This function is provided for use with the
(diary-modified (buffer-modified-p))
(gdate original-date)
(mark (regexp-quote diary-nonmarking-symbol)))
- (calendar-for-loop i from 1 to number do
- (let* ((d diary-date-forms)
- (hdate (calendar-hebrew-from-absolute
- (calendar-absolute-from-gregorian gdate)))
- (month (extract-calendar-month hdate))
- (day (extract-calendar-day hdate))
- (year (extract-calendar-year hdate)))
- (while d
- (let*
- ((date-form (if (equal (car (car d)) 'backup)
- (cdr (car d))
- (car d)))
- (backup (equal (car (car d)) 'backup))
- (dayname
- (format "%s\\|%s\\.?"
- (calendar-day-name gdate)
- (calendar-day-name gdate 'abbrev)))
- (calendar-month-name-array
- calendar-hebrew-month-name-array-leap-year)
- (monthname
- (concat
- "\\*\\|"
- (calendar-month-name month)))
- (month (concat "\\*\\|0*" (int-to-string month)))
- (day (concat "\\*\\|0*" (int-to-string day)))
- (year
- (concat
- "\\*\\|0*" (int-to-string year)
- (if abbreviated-calendar-year
- (concat "\\|" (int-to-string (% year 100)))
- "")))
- (regexp
- (concat
- "\\(\\`\\|\^M\\|\n\\)" mark "?"
- (regexp-quote hebrew-diary-entry-symbol)
- "\\("
- (mapconcat 'eval date-form "\\)\\(")
- "\\)"))
- (case-fold-search t))
- (goto-char (point-min))
- (while (re-search-forward regexp nil t)
- (if backup (re-search-backward "\\<" nil t))
- (if (and (or (char-equal (preceding-char) ?\^M)
- (char-equal (preceding-char) ?\n))
- (not (looking-at " \\|\^I")))
- ;; Diary entry that consists only of date.
- (backward-char 1)
- ;; Found a nonempty diary entry--make it visible and
- ;; add it to the list.
- (let ((entry-start (point))
- (date-start))
- (re-search-backward "\^M\\|\n\\|\\`")
- (setq date-start (point))
- (re-search-forward "\^M\\|\n" nil t 2)
- (while (looking-at " \\|\^I")
- (re-search-forward "\^M\\|\n" nil t))
- (backward-char 1)
- (subst-char-in-region date-start (point) ?\^M ?\n t)
- (add-to-diary-list
- gdate
- (buffer-substring-no-properties entry-start (point))
- (buffer-substring-no-properties
- (1+ date-start) (1- entry-start))
- (copy-marker entry-start))))))
- (setq d (cdr d))))
- (setq gdate
- (calendar-gregorian-from-absolute
- (1+ (calendar-absolute-from-gregorian gdate)))))
- (set-buffer-modified-p diary-modified))
- (goto-char (point-min))))
+ (dotimes (idummy number)
+ (let* ((d diary-date-forms)
+ (hdate (calendar-hebrew-from-absolute
+ (calendar-absolute-from-gregorian gdate)))
+ (month (extract-calendar-month hdate))
+ (day (extract-calendar-day hdate))
+ (year (extract-calendar-year hdate)))
+ (while d
+ (let*
+ ((date-form (if (equal (car (car d)) 'backup)
+ (cdr (car d))
+ (car d)))
+ (backup (equal (car (car d)) 'backup))
+ (dayname
+ (format "%s\\|%s\\.?"
+ (calendar-day-name gdate)
+ (calendar-day-name gdate 'abbrev)))
+ (calendar-month-name-array
+ calendar-hebrew-month-name-array-leap-year)
+ (monthname
+ (concat
+ "\\*\\|"
+ (calendar-month-name month)))
+ (month (concat "\\*\\|0*" (int-to-string month)))
+ (day (concat "\\*\\|0*" (int-to-string day)))
+ (year
+ (concat
+ "\\*\\|0*" (int-to-string year)
+ (if abbreviated-calendar-year
+ (concat "\\|" (int-to-string (% year 100)))
+ "")))
+ (regexp
+ (concat
+ "\\(\\`\\|\^M\\|\n\\)" mark "?"
+ (regexp-quote hebrew-diary-entry-symbol)
+ "\\("
+ (mapconcat 'eval date-form "\\)\\(")
+ "\\)"))
+ (case-fold-search t))
+ (goto-char (point-min))
+ (while (re-search-forward regexp nil t)
+ (if backup (re-search-backward "\\<" nil t))
+ (if (and (or (char-equal (preceding-char) ?\^M)
+ (char-equal (preceding-char) ?\n))
+ (not (looking-at " \\|\^I")))
+ ;; Diary entry that consists only of date.
+ (backward-char 1)
+ ;; Found a nonempty diary entry--make it visible and
+ ;; add it to the list.
+ (let ((entry-start (point))
+ (date-start))
+ (re-search-backward "\^M\\|\n\\|\\`")
+ (setq date-start (point))
+ (re-search-forward "\^M\\|\n" nil t 2)
+ (while (looking-at " \\|\^I")
+ (re-search-forward "\^M\\|\n" nil t))
+ (backward-char 1)
+ (subst-char-in-region date-start (point) ?\^M ?\n t)
+ (add-to-diary-list
+ gdate
+ (buffer-substring-no-properties entry-start (point))
+ (buffer-substring-no-properties
+ (1+ date-start) (1- entry-start))
+ (copy-marker entry-start))))))
+ (setq d (cdr d))))
+ (setq gdate
+ (calendar-gregorian-from-absolute
+ (1+ (calendar-absolute-from-gregorian gdate)))))
+ (set-buffer-modified-p diary-modified))
+ (goto-char (point-min))))
(defun mark-hebrew-calendar-date-pattern (month day year)
"Mark dates in calendar window that conform to Hebrew date MONTH/DAY/YEAR.
diff --git a/lisp/calendar/cal-islam.el b/lisp/calendar/cal-islam.el
index 850a3e2a326..c562437fc14 100644
--- a/lisp/calendar/cal-islam.el
+++ b/lisp/calendar/cal-islam.el
@@ -210,76 +210,76 @@ not be marked in the calendar. This function is provided for use with the
(diary-modified (buffer-modified-p))
(gdate original-date)
(mark (regexp-quote diary-nonmarking-symbol)))
- (calendar-for-loop i from 1 to number do
- (let* ((d diary-date-forms)
- (idate (calendar-islamic-from-absolute
- (calendar-absolute-from-gregorian gdate)))
- (month (extract-calendar-month idate))
- (day (extract-calendar-day idate))
- (year (extract-calendar-year idate)))
- (while d
- (let*
- ((date-form (if (equal (car (car d)) 'backup)
- (cdr (car d))
- (car d)))
- (backup (equal (car (car d)) 'backup))
- (dayname
- (format "%s\\|%s\\.?"
- (calendar-day-name gdate)
- (calendar-day-name gdate 'abbrev)))
- (calendar-month-name-array
- calendar-islamic-month-name-array)
- (monthname
- (concat
- "\\*\\|"
- (calendar-month-name month)))
- (month (concat "\\*\\|0*" (int-to-string month)))
- (day (concat "\\*\\|0*" (int-to-string day)))
- (year
- (concat
- "\\*\\|0*" (int-to-string year)
- (if abbreviated-calendar-year
- (concat "\\|" (int-to-string (% year 100)))
- "")))
- (regexp
- (concat
- "\\(\\`\\|\^M\\|\n\\)" mark "?"
- (regexp-quote islamic-diary-entry-symbol)
- "\\("
- (mapconcat 'eval date-form "\\)\\(")
- "\\)"))
- (case-fold-search t))
- (goto-char (point-min))
- (while (re-search-forward regexp nil t)
- (if backup (re-search-backward "\\<" nil t))
- (if (and (or (char-equal (preceding-char) ?\^M)
- (char-equal (preceding-char) ?\n))
- (not (looking-at " \\|\^I")))
- ;; Diary entry that consists only of date.
- (backward-char 1)
- ;; Found a nonempty diary entry--make it visible and
- ;; add it to the list.
- (let ((entry-start (point))
- (date-start))
- (re-search-backward "\^M\\|\n\\|\\`")
- (setq date-start (point))
- (re-search-forward "\^M\\|\n" nil t 2)
- (while (looking-at " \\|\^I")
- (re-search-forward "\^M\\|\n" nil t))
- (backward-char 1)
- (subst-char-in-region date-start (point) ?\^M ?\n t)
- (add-to-diary-list
- gdate
- (buffer-substring-no-properties entry-start (point))
- (buffer-substring-no-properties
- (1+ date-start) (1- entry-start))
- (copy-marker entry-start))))))
- (setq d (cdr d))))
- (setq gdate
- (calendar-gregorian-from-absolute
- (1+ (calendar-absolute-from-gregorian gdate)))))
- (set-buffer-modified-p diary-modified))
- (goto-char (point-min))))
+ (dotimes (idummy number)
+ (let* ((d diary-date-forms)
+ (idate (calendar-islamic-from-absolute
+ (calendar-absolute-from-gregorian gdate)))
+ (month (extract-calendar-month idate))
+ (day (extract-calendar-day idate))
+ (year (extract-calendar-year idate)))
+ (while d
+ (let*
+ ((date-form (if (equal (car (car d)) 'backup)
+ (cdr (car d))
+ (car d)))
+ (backup (equal (car (car d)) 'backup))
+ (dayname
+ (format "%s\\|%s\\.?"
+ (calendar-day-name gdate)
+ (calendar-day-name gdate 'abbrev)))
+ (calendar-month-name-array
+ calendar-islamic-month-name-array)
+ (monthname
+ (concat
+ "\\*\\|"
+ (calendar-month-name month)))
+ (month (concat "\\*\\|0*" (int-to-string month)))
+ (day (concat "\\*\\|0*" (int-to-string day)))
+ (year
+ (concat
+ "\\*\\|0*" (int-to-string year)
+ (if abbreviated-calendar-year
+ (concat "\\|" (int-to-string (% year 100)))
+ "")))
+ (regexp
+ (concat
+ "\\(\\`\\|\^M\\|\n\\)" mark "?"
+ (regexp-quote islamic-diary-entry-symbol)
+ "\\("
+ (mapconcat 'eval date-form "\\)\\(")
+ "\\)"))
+ (case-fold-search t))
+ (goto-char (point-min))
+ (while (re-search-forward regexp nil t)
+ (if backup (re-search-backward "\\<" nil t))
+ (if (and (or (char-equal (preceding-char) ?\^M)
+ (char-equal (preceding-char) ?\n))
+ (not (looking-at " \\|\^I")))
+ ;; Diary entry that consists only of date.
+ (backward-char 1)
+ ;; Found a nonempty diary entry--make it visible and
+ ;; add it to the list.
+ (let ((entry-start (point))
+ (date-start))
+ (re-search-backward "\^M\\|\n\\|\\`")
+ (setq date-start (point))
+ (re-search-forward "\^M\\|\n" nil t 2)
+ (while (looking-at " \\|\^I")
+ (re-search-forward "\^M\\|\n" nil t))
+ (backward-char 1)
+ (subst-char-in-region date-start (point) ?\^M ?\n t)
+ (add-to-diary-list
+ gdate
+ (buffer-substring-no-properties entry-start (point))
+ (buffer-substring-no-properties
+ (1+ date-start) (1- entry-start))
+ (copy-marker entry-start))))))
+ (setq d (cdr d))))
+ (setq gdate
+ (calendar-gregorian-from-absolute
+ (1+ (calendar-absolute-from-gregorian gdate)))))
+ (set-buffer-modified-p diary-modified))
+ (goto-char (point-min))))
(defun mark-islamic-diary-entries ()
"Mark days in the calendar window that have Islamic date diary entries.
diff --git a/lisp/calendar/cal-menu.el b/lisp/calendar/cal-menu.el
index 7f9451d1b9a..47fd4fc4c2a 100644
--- a/lisp/calendar/cal-menu.el
+++ b/lisp/calendar/cal-menu.el
@@ -33,149 +33,118 @@
;;; Code:
-(defvar displayed-month)
(defvar displayed-year)
-;; Don't require calendar because calendar requires us.
-;; (eval-when-compile (require 'calendar))
-(defvar calendar-mode-map)
-
-(define-key calendar-mode-map [menu-bar edit] 'undefined)
-(define-key calendar-mode-map [menu-bar search] 'undefined)
-
-(define-key calendar-mode-map [down-mouse-2] 'calendar-mouse-2-date-menu)
-(define-key calendar-mode-map [mouse-2] 'ignore)
-
-(defvar calendar-mouse-3-map (make-sparse-keymap "Calendar"))
-(define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map)
-
-(define-key calendar-mode-map [menu-bar moon]
- (cons "Moon" (make-sparse-keymap "Moon")))
-
-(define-key calendar-mode-map [menu-bar moon moon]
- '("Lunar Phases" . calendar-phases-of-moon))
-
-(define-key calendar-mode-map [menu-bar diary]
- (cons "Diary" (make-sparse-keymap "Diary")))
-
-(define-key calendar-mode-map [menu-bar diary heb]
- '("Insert Hebrew" . calendar-mouse-insert-hebrew-diary-entry))
-(define-key calendar-mode-map [menu-bar diary isl]
- '("Insert Islamic" . calendar-mouse-insert-islamic-diary-entry))
-(define-key calendar-mode-map [menu-bar diary baha]
- '("Insert Baha'i" . calendar-mouse-insert-bahai-diary-entry))
-(define-key calendar-mode-map [menu-bar diary cyc]
- '("Insert Cyclic" . insert-cyclic-diary-entry))
-(define-key calendar-mode-map [menu-bar diary blk]
- '("Insert Block" . insert-block-diary-entry))
-(define-key calendar-mode-map [menu-bar diary ann]
- '("Insert Anniversary" . insert-anniversary-diary-entry))
-(define-key calendar-mode-map [menu-bar diary yr]
- '("Insert Yearly" . insert-yearly-diary-entry))
-(define-key calendar-mode-map [menu-bar diary mon]
- '("Insert Monthly" . insert-monthly-diary-entry))
-(define-key calendar-mode-map [menu-bar diary wk]
- '("Insert Weekly" . insert-weekly-diary-entry))
-(define-key calendar-mode-map [menu-bar diary ent]
- '("Insert Diary Entry" . insert-diary-entry))
-(define-key calendar-mode-map [menu-bar diary all]
- '("Show All" . diary-show-all-entries))
-(define-key calendar-mode-map [menu-bar diary mark]
- '("Mark All" . mark-diary-entries))
-(define-key calendar-mode-map [menu-bar diary view]
- '("Cursor Date" . diary-view-entries))
-(define-key calendar-mode-map [menu-bar diary view]
- '("Other File" . view-other-diary-entries))
-
-(define-key calendar-mode-map [menu-bar Holidays]
- (cons "Holidays" (make-sparse-keymap "Holidays")))
-
-(define-key calendar-mode-map [menu-bar goto]
- (cons "Goto" (make-sparse-keymap "Goto")))
-
-(define-key calendar-mode-map [menu-bar goto french]
- '("French Date" . calendar-goto-french-date))
-(define-key calendar-mode-map [menu-bar goto mayan]
- (cons "Mayan Date" (make-sparse-keymap "Mayan")))
-(define-key calendar-mode-map [menu-bar goto ethiopic]
- '("Ethiopic Date" . calendar-goto-ethiopic-date))
-(define-key calendar-mode-map [menu-bar goto coptic]
- '("Coptic Date" . calendar-goto-coptic-date))
-(define-key calendar-mode-map [menu-bar goto chinese]
- '("Chinese Date" . calendar-goto-chinese-date))
-(define-key calendar-mode-map [menu-bar goto julian]
- '("Julian Date" . calendar-goto-julian-date))
-(define-key calendar-mode-map [menu-bar goto islamic]
- '("Islamic Date" . calendar-goto-islamic-date))
-(define-key calendar-mode-map [menu-bar goto persian]
- '("Baha'i Date" . calendar-goto-bahai-date))
-(define-key calendar-mode-map [menu-bar goto persian]
- '("Persian Date" . calendar-goto-persian-date))
-(define-key calendar-mode-map [menu-bar goto hebrew]
- '("Hebrew Date" . calendar-goto-hebrew-date))
-(define-key calendar-mode-map [menu-bar goto astro]
- '("Astronomical Date" . calendar-goto-astro-day-number))
-(define-key calendar-mode-map [menu-bar goto iso]
- '("ISO Date" . calendar-goto-iso-date))
-(define-key calendar-mode-map [menu-bar goto iso-week]
- '("ISO Week" . calendar-goto-iso-week))
-(define-key calendar-mode-map [menu-bar goto day-of-year]
- '("Day of Year" . calendar-goto-day-of-year))
-(define-key calendar-mode-map [menu-bar goto gregorian]
- '("Other Date" . calendar-goto-date))
-(define-key calendar-mode-map [menu-bar goto end-of-year]
- '("End of Year" . calendar-end-of-year))
-(define-key calendar-mode-map [menu-bar goto beginning-of-year]
- '("Beginning of Year" . calendar-beginning-of-year))
-(define-key calendar-mode-map [menu-bar goto end-of-month]
- '("End of Month" . calendar-end-of-month))
-(define-key calendar-mode-map [menu-bar goto beginning-of-month]
- '("Beginning of Month" . calendar-beginning-of-month))
-(define-key calendar-mode-map [menu-bar goto end-of-week]
- '("End of Week" . calendar-end-of-week))
-(define-key calendar-mode-map [menu-bar goto beginning-of-week]
- '("Beginning of Week" . calendar-beginning-of-week))
-(define-key calendar-mode-map [menu-bar goto today]
- '("Today" . calendar-goto-today))
-
-
-(define-key calendar-mode-map [menu-bar goto mayan prev-rnd]
- '("Previous Round" . calendar-previous-calendar-round-date))
-(define-key calendar-mode-map [menu-bar goto mayan nxt-rnd]
- '("Next Round" . calendar-next-calendar-round-date))
-(define-key calendar-mode-map [menu-bar goto mayan prev-haab]
- '("Previous Haab" . calendar-previous-haab-date))
-(define-key calendar-mode-map [menu-bar goto mayan next-haab]
- '("Next Haab" . calendar-next-haab-date))
-(define-key calendar-mode-map [menu-bar goto mayan prev-tzol]
- '("Previous Tzolkin" . calendar-previous-tzolkin-date))
-(define-key calendar-mode-map [menu-bar goto mayan next-tzol]
- '("Next Tzolkin" . calendar-next-tzolkin-date))
-
-(define-key calendar-mode-map [menu-bar scroll]
- (cons "Scroll" (make-sparse-keymap "Scroll")))
-
-(define-key calendar-mode-map [menu-bar scroll bk-12]
- '("Backward 1 Year" . "4\ev"))
-(define-key calendar-mode-map [menu-bar scroll bk-3]
- '("Backward 3 Months" . scroll-calendar-right-three-months))
-(define-key calendar-mode-map [menu-bar scroll bk-1]
- '("Backward 1 Month" . scroll-calendar-right))
-(define-key calendar-mode-map [menu-bar scroll fwd-12]
- '("Forward 1 Year" . "4\C-v"))
-(define-key calendar-mode-map [menu-bar scroll fwd-3]
- '("Forward 3 Months" . scroll-calendar-left-three-months))
-(define-key calendar-mode-map [menu-bar scroll fwd-1]
- '("Forward 1 Month" . scroll-calendar-left))
-
-(defun calendar-flatten (list)
- "Flatten LIST eliminating sublists structure; result is a list of atoms.
-This is the same as the preorder list of leaves in a rooted forest."
- (if (atom list)
- (list list)
- (if (cdr list)
- (append (calendar-flatten (car list)) (calendar-flatten (cdr list)))
- (calendar-flatten (car list)))))
+(defconst cal-menu-moon-menu
+ '("Moon"
+ ["Lunar Phases" calendar-phases-of-moon]))
+
+(defconst cal-menu-diary-menu
+ '("Diary"
+ ["Other File" view-other-diary-entries]
+ ["Cursor Date" diary-view-entries]
+ ["Mark All" mark-diary-entries]
+ ["Show All" diary-show-all-entries]
+ ["Insert Diary Entry" insert-diary-entry]
+ ["Insert Weekly" insert-weekly-diary-entry]
+ ["Insert Monthly" insert-monthly-diary-entry]
+ ["Insert Yearly" insert-yearly-diary-entry]
+ ["Insert Anniversary" insert-anniversary-diary-entry]
+ ["Insert Block" insert-block-diary-entry]
+ ["Insert Cyclic" insert-cyclic-diary-entry]
+ ("Insert Baha'i"
+ [" " nil :suffix (calendar-bahai-date-string (calendar-cursor-to-date))]
+ ["One time" diary-bahai-insert-entry]
+ ["Monthly" diary-bahai-insert-monthly-entry]
+ ["Yearly" diary-bahai-insert-yearly-entry])
+ ("Insert Islamic"
+ [" " nil :suffix (calendar-islamic-date-string (calendar-cursor-to-date))]
+ ["One time" insert-islamic-diary-entry]
+ ["Monthly" insert-monthly-islamic-diary-entry]
+ ["Yearly" insert-yearly-islamic-diary-entry])
+ ("Insert Hebrew"
+ [" " nil :suffix (calendar-hebrew-date-string (calendar-cursor-to-date))]
+ ["One time" insert-hebrew-diary-entry]
+ ["Monthly" insert-monthly-hebrew-diary-entry]
+ ["Yearly" insert-yearly-hebrew-diary-entry])))
+
+(defun cal-menu-holiday-window-suffix ()
+ (let ((my1 (calendar-increment-month -1))
+ (my2 (calendar-increment-month 1)))
+ (if (= (cdr my1) (cdr my2))
+ (format "%s-%s, %d"
+ (calendar-month-name (car my1) 'abbrev)
+ (calendar-month-name (car my2) 'abbrev)
+ (cdr my2))
+ (format "%s, %d-%s, %d"
+ (calendar-month-name (car my1) 'abbrev)
+ (cdr my1)
+ (calendar-month-name (car my2) 'abbrev)
+ (cdr my2)))))
+
+(defconst cal-menu-holidays-menu
+ `("Holidays"
+ ["For Cursor Date -" calendar-cursor-holidays
+ :suffix (calendar-date-string (calendar-cursor-to-date) t t)
+ :visible (calendar-cursor-to-date)]
+ ["For Window -" calendar-list-holidays
+ :suffix (cal-menu-holiday-window-suffix)]
+ ["For Today -" cal-menu-today-holidays
+ :suffix (calendar-date-string (calendar-current-date) t t)]
+ "--"
+ ,@(let ((l ()))
+ ;; Show 11 years--5 before, 5 after year of middle month.
+ (dotimes (i 11)
+ (push (vector "For Year"
+ `(lambda ()
+ (interactive)
+ (holiday-list (+ displayed-year ,(- i 5))))
+ :suffix `(number-to-string (+ displayed-year ,(- i 5))))
+ l))
+ (nreverse l))
+ "--"
+ ["Unmark Calendar" calendar-unmark]
+ ["Mark Holidays" mark-calendar-holidays]))
+
+(defconst cal-menu-goto-menu
+ '("Goto"
+ ["Today" calendar-goto-today]
+ ["Beginning of Week" calendar-beginning-of-week]
+ ["End of Week" calendar-end-of-week]
+ ["Beginning of Month" calendar-beginning-of-month]
+ ["End of Month" calendar-end-of-month]
+ ["Beginning of Year" calendar-beginning-of-year]
+ ["End of Year" calendar-end-of-year]
+ ["Other Date" calendar-goto-date]
+ ["Day of Year" calendar-goto-day-of-year]
+ ["ISO Week" calendar-goto-iso-week]
+ ["ISO Date" calendar-goto-iso-date]
+ ["Astronomical Date" calendar-goto-astro-day-number]
+ ["Hebrew Date" calendar-goto-hebrew-date]
+ ["Persian Date" calendar-goto-persian-date]
+ ["Baha'i Date" calendar-bahai-goto-date]
+ ["Islamic Date" calendar-goto-islamic-date]
+ ["Julian Date" calendar-goto-julian-date]
+ ["Chinese Date" calendar-goto-chinese-date]
+ ["Coptic Date" calendar-goto-coptic-date]
+ ["Ethiopic Date" calendar-goto-ethiopic-date]
+ ("Mayan Date"
+ ["Next Tzolkin" calendar-next-tzolkin-date]
+ ["Previous Tzolkin" calendar-previous-tzolkin-date]
+ ["Next Haab" calendar-next-haab-date]
+ ["Previous Haab" calendar-previous-haab-date]
+ ["Next Round" calendar-next-calendar-round-date]
+ ["Previous Round" calendar-previous-calendar-round-date])
+ ["French Date" calendar-goto-french-date]))
+
+(defconst cal-menu-scroll-menu
+ '("Scroll"
+ ["Forward 1 Month" calendar-scroll-left]
+ ["Forward 3 Months" calendar-scroll-left-three-months]
+ ["Forward 1 Year" "4\C-v"]
+ ["Backward 1 Month" calendar-scroll-right]
+ ["Backward 3 Months" calendar-scroll-right-three-months]
+ ["Backward 1 Year" "4\ev"]))
(defun cal-menu-x-popup-menu (position menu)
"Like `x-popup-menu', but prints an error message if popup menus are
@@ -188,117 +157,29 @@ not available."
"Display a list of the holidays of the selected date's year."
(interactive)
(let ((year (extract-calendar-year (calendar-cursor-to-date))))
- (list-holidays year year)))
+ (holiday-list year year)))
(defun cal-menu-list-holidays-following-year ()
"Display a list of the holidays of the following year."
(interactive)
(let ((year (1+ (extract-calendar-year (calendar-cursor-to-date)))))
- (list-holidays year year)))
+ (holiday-list year year)))
(defun cal-menu-list-holidays-previous-year ()
"Display a list of the holidays of the previous year."
(interactive)
(let ((year (1- (extract-calendar-year (calendar-cursor-to-date)))))
- (list-holidays year year)))
-
-(defun cal-menu-update ()
- ;; Update the holiday part of calendar menu bar for the current display.
- (condition-case nil
- (if (eq major-mode 'calendar-mode)
- (let ((l))
- ;; Show 11 years--5 before, 5 after year of middle month
- (dotimes (i 11)
- (let ((y (+ displayed-year -5 i)))
- (push (vector (format "For Year %s" y)
- (list (list 'lambda 'nil '(interactive)
- (list 'list-holidays y y)))
- t)
- l)))
- (setq l (cons ["Mark Holidays" mark-calendar-holidays t]
- (cons ["Unmark Calendar" calendar-unmark t]
- (cons "--" l))))
- (define-key calendar-mode-map [menu-bar Holidays]
- (cons "Holidays" (easy-menu-create-menu "Holidays" (nreverse l))))
- (define-key calendar-mode-map [menu-bar Holidays separator]
- '("--"))
- (define-key calendar-mode-map [menu-bar Holidays today]
- `(,(format "For Today (%s)"
- (calendar-date-string (calendar-current-date) t t))
- . cal-menu-today-holidays))
- (let ((title
- (let ((my1 (calendar-increment-month -1))
- (my2 (calendar-increment-month 1)))
- (if (= (cdr my1) (cdr my2))
- (format "%s-%s, %d"
- (calendar-month-name (car my1) 'abbrev)
- (calendar-month-name (car my2) 'abbrev)
- (cdr my2))
- (format "%s, %d-%s, %d"
- (calendar-month-name (car my1) 'abbrev)
- (cdr my1)
- (calendar-month-name (car my2) 'abbrev)
- (cdr my2))))))
- (define-key calendar-mode-map [menu-bar Holidays 3-month]
- `(,(format "For Window (%s)" title)
- . list-calendar-holidays)))
- (let ((date (calendar-cursor-to-date)))
- (if date
- (define-key calendar-mode-map [menu-bar Holidays 1-day]
- `(,(format "For Cursor Date (%s)"
- (calendar-date-string date t t))
- . calendar-cursor-holidays))))))
- ;; Try to avoid entering infinite beep mode in case of errors.
- (error (ding))))
+ (holiday-list year year)))
(defun calendar-event-to-date (&optional error)
"Date of last event.
If event is not on a specific date, signals an error if optional parameter
ERROR is t, otherwise just returns nil."
- (save-excursion
- (set-buffer (window-buffer (posn-window (event-start last-input-event))))
+ (with-current-buffer
+ (window-buffer (posn-window (event-start last-input-event)))
(goto-char (posn-point (event-start last-input-event)))
(calendar-cursor-to-date error)))
-(defun calendar-mouse-insert-hebrew-diary-entry (event)
- "Pop up menu to insert a Hebrew-date diary entry."
- (interactive "e")
- (let ((hebrew-selection
- (cal-menu-x-popup-menu
- event
- (list "Hebrew insert menu"
- (list (calendar-hebrew-date-string (calendar-cursor-to-date))
- '("One time" . insert-hebrew-diary-entry)
- '("Monthly" . insert-monthly-hebrew-diary-entry)
- '("Yearly" . insert-yearly-hebrew-diary-entry))))))
- (and hebrew-selection (call-interactively hebrew-selection))))
-
-(defun calendar-mouse-insert-islamic-diary-entry (event)
- "Pop up menu to insert an Islamic-date diary entry."
- (interactive "e")
- (let ((islamic-selection
- (cal-menu-x-popup-menu
- event
- (list "Islamic insert menu"
- (list (calendar-islamic-date-string (calendar-cursor-to-date))
- '("One time" . insert-islamic-diary-entry)
- '("Monthly" . insert-monthly-islamic-diary-entry)
- '("Yearly" . insert-yearly-islamic-diary-entry))))))
- (and islamic-selection (call-interactively islamic-selection))))
-
-(defun calendar-mouse-insert-bahai-diary-entry (event)
- "Pop up menu to insert an Baha'i-date diary entry."
- (interactive "e")
- (let ((bahai-selection
- (x-popup-menu
- event
- (list "Baha'i insert menu"
- (list (calendar-bahai-date-string (calendar-cursor-to-date))
- '("One time" . insert-bahai-diary-entry)
- '("Monthly" . insert-monthly-bahai-diary-entry)
- '("Yearly" . insert-yearly-bahai-diary-entry))))))
- (and bahai-selection (call-interactively bahai-selection))))
-
(defun calendar-mouse-sunrise/sunset ()
"Show sunrise/sunset times for mouse-selected date."
(interactive)
@@ -313,14 +194,14 @@ ERROR is t, otherwise just returns nil."
(calendar-cursor-to-date (calendar-current-date))
(calendar-cursor-holidays)))
-(autoload 'check-calendar-holidays "holidays")
+(autoload 'calendar-check-holidays "holidays")
(autoload 'diary-list-entries "diary-lib")
(defun calendar-mouse-holidays (&optional event)
"Pop up menu of holidays for mouse selected date."
(interactive "e")
(let* ((date (calendar-event-to-date))
- (l (mapcar 'list (check-calendar-holidays date)))
+ (l (mapcar 'list (calendar-check-holidays date)))
(selection
(cal-menu-x-popup-menu
event
@@ -337,15 +218,15 @@ Use optional DATE and alternative file DIARY.
Any holidays are shown if `holidays-in-diary-buffer' is t."
(interactive "i\ni\ne")
- (let* ((date (if date date (calendar-event-to-date)))
+ (let* ((date (or date (calendar-event-to-date)))
(diary-file (if diary diary diary-file))
(diary-list-include-blanks nil)
(diary-display-hook 'ignore)
(diary-entries
- (mapcar (lambda (x) (split-string (car (cdr x)) "\^M\\|\n"))
+ (mapcar (lambda (x) (split-string (cadr x) "\n"))
(diary-list-entries date 1 'list-only)))
(holidays (if holidays-in-diary-buffer
- (check-calendar-holidays date)))
+ (calendar-check-holidays date)))
(title (concat "Diary entries "
(if diary (format "from %s " diary) "")
"for "
@@ -360,7 +241,7 @@ Any holidays are shown if `holidays-in-diary-buffer' is t."
(if holidays
(list "--shadow-etched-in" "--shadow-etched-in"))
(if diary-entries
- (mapcar 'list (calendar-flatten diary-entries))
+ (mapcar 'list (apply 'append diary-entries))
'("None")))))))
(and selection (call-interactively selection))))
@@ -543,88 +424,49 @@ The output is in landscape format, one month to a page."
(set-buffer (window-buffer (posn-window (event-start last-input-event))))
(calendar-goto-date date))
-(defun calendar-mouse-2-date-menu (event)
+(easy-menu-define cal-menu-context-mouse-menu nil
"Pop up menu for Mouse-2 for selected date in the calendar window."
- (interactive "e")
- (let* ((date (calendar-event-to-date t))
- (selection
- (cal-menu-x-popup-menu
- event
- (list (calendar-date-string date t nil)
- (list
- ""
- '("Holidays" . calendar-mouse-holidays)
- '("Mark date" . calendar-mouse-set-mark)
- '("Sunrise/sunset" . calendar-mouse-sunrise/sunset)
- '("Other calendars" . calendar-mouse-print-dates)
- '("Prepare LaTeX buffer" . calendar-mouse-cal-tex-menu)
- '("Diary entries" . calendar-mouse-view-diary-entries)
- '("Insert diary entry" . calendar-mouse-insert-diary-entry)
- '("Other diary file entries"
- . calendar-mouse-view-other-diary-entries)
- )))))
- (and selection (call-interactively selection))))
-
-(defun calendar-mouse-cal-tex-menu (event)
- "Pop up submenu for Mouse-2 for cal-tex commands for selected date in the calendar window."
- (interactive "e")
- (let* ((selection
- (cal-menu-x-popup-menu
- event
- (list (calendar-date-string (calendar-event-to-date t) t nil)
- (list
- ""
- '("Daily (1 page)" . cal-tex-mouse-day)
- '("Weekly (1 page)" . cal-tex-mouse-week)
- '("Weekly (2 pages)" . cal-tex-mouse-week2)
- '("Weekly (other style; 1 page)" . cal-tex-mouse-week-iso)
- '("Weekly (yet another style; 1 page)" .
- cal-tex-mouse-week-monday)
- '("Monthly" . cal-tex-mouse-month)
- '("Monthly (landscape)" . cal-tex-mouse-month-landscape)
- '("Yearly" . cal-tex-mouse-year)
- '("Yearly (landscape)" . cal-tex-mouse-year-landscape)
- '("Filofax styles" . cal-tex-mouse-filofax)
- )))))
- (and selection (call-interactively selection))))
-
-(defun cal-tex-mouse-filofax (event)
- "Pop up sub-submenu for Mouse-2 for Filofax cal-tex commands for selected date."
- (interactive "e")
- (let* ((selection
- (cal-menu-x-popup-menu
- event
- (list (calendar-date-string (calendar-event-to-date t) t nil)
- (list
- ""
- '("Filofax Daily (one-day-per-page)" .
- cal-tex-mouse-filofax-daily)
- '("Filofax Weekly (2-weeks-at-a-glance)" .
- cal-tex-mouse-filofax-2week)
- '("Filofax Weekly (week-at-a-glance)" .
- cal-tex-mouse-filofax-week)
- '("Filofax Yearly" . cal-tex-mouse-filofax-year)
- )))))
- (and selection (call-interactively selection))))
-
-(define-key calendar-mouse-3-map [exit-calendar]
- '("Exit calendar" . exit-calendar))
-(define-key calendar-mouse-3-map [show-diary]
- '("Show diary" . diary-show-all-entries))
-(define-key calendar-mouse-3-map [lunar-phases]
- '("Lunar phases" . calendar-phases-of-moon))
-(define-key calendar-mouse-3-map [unmark]
- '("Unmark" . calendar-unmark))
-(define-key calendar-mouse-3-map [mark-holidays]
- '("Mark holidays" . mark-calendar-holidays))
-(define-key calendar-mouse-3-map [list-holidays]
- '("List holidays" . list-calendar-holidays))
-(define-key calendar-mouse-3-map [mark-diary-entries]
- '("Mark diary entries" . mark-diary-entries))
-(define-key calendar-mouse-3-map [scroll-backward]
- '("Scroll backward" . scroll-calendar-right-three-months))
-(define-key calendar-mouse-3-map [scroll-forward]
- '("Scroll forward" . scroll-calendar-left-three-months))
+ '("foo" :filter cal-menu-set-date-title
+ "--"
+ ["Holidays" calendar-mouse-holidays]
+ ["Mark date" calendar-mouse-set-mark]
+ ["Sunrise/sunset" calendar-mouse-sunrise/sunset]
+ ["Other calendars" calendar-mouse-print-dates]
+ ("Prepare LaTeX buffer"
+ ["Daily (1 page)" cal-tex-mouse-day]
+ ["Weekly (1 page)" cal-tex-mouse-week]
+ ["Weekly (2 pages)" cal-tex-mouse-week2]
+ ["Weekly (other style; 1 page)" cal-tex-mouse-week-iso]
+ ["Weekly (yet another style; 1 page)" cal-tex-mouse-week-monday]
+ ["Monthly" cal-tex-mouse-month]
+ ["Monthly (landscape)" cal-tex-mouse-month-landscape]
+ ["Yearly" cal-tex-mouse-year]
+ ["Yearly (landscape)" cal-tex-mouse-year-landscape]
+ ("Filofax styles"
+ ["Filofax Daily (one-day-per-page)" cal-tex-mouse-filofax-daily]
+ ["Filofax Weekly (2-weeks-at-a-glance)" cal-tex-mouse-filofax-2week]
+ ["Filofax Weekly (week-at-a-glance)" cal-tex-mouse-filofax-week]
+ ["Filofax Yearly" cal-tex-mouse-filofax-year]))
+ ["Diary entries" calendar-mouse-view-diary-entries]
+ ["Insert diary entry" calendar-mouse-insert-diary-entry]
+ ["Other diary file entries" calendar-mouse-view-other-diary-entries]))
+
+(defun cal-menu-set-date-title (menu)
+ (easy-menu-filter-return
+ menu (calendar-date-string (calendar-event-to-date t) t nil)))
+
+(easy-menu-define cal-menu-global-mouse-menu nil
+ "Menu bound to a mouse event, not specific to the mouse-click location."
+ '("Calendar"
+ ["Scroll forward" calendar-scroll-left-three-months]
+ ["Scroll backward" calendar-scroll-right-three-months]
+ ["Mark diary entries" mark-diary-entries]
+ ["List holidays" calendar-list-holidays]
+ ["Mark holidays" calendar-mark-holidays]
+ ["Unmark" calendar-unmark]
+ ["Lunar phases" calendar-phases-of-moon]
+ ["Show diary" diary-show-all-entries]
+ ["Exit calendar" exit-calendar]))
(run-hooks 'cal-menu-load-hook)
diff --git a/lisp/calendar/cal-move.el b/lisp/calendar/cal-move.el
index 02760b34e93..81f75114a3f 100644
--- a/lisp/calendar/cal-move.el
+++ b/lisp/calendar/cal-move.el
@@ -85,47 +85,51 @@ Movement is forward is ARG is negative."
(interactive "p")
(calendar-forward-month (* -12 arg)))
-(defun scroll-calendar-left (&optional arg)
+(defun calendar-scroll-left (&optional arg event)
"Scroll the displayed calendar left by ARG months.
If ARG is negative the calendar is scrolled right. Maintains the relative
position of the cursor with respect to the calendar as well as possible."
- (interactive "p")
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ last-nonmenu-event))
(unless arg (setq arg 1))
- (calendar-cursor-to-nearest-date)
- (let ((old-date (calendar-cursor-to-date))
- (today (calendar-current-date)))
- (if (/= arg 0)
- (let ((month displayed-month)
- (year displayed-year))
- (increment-calendar-month month year arg)
- (generate-calendar-window month year)
- (calendar-cursor-to-visible-date
- (cond
- ((calendar-date-is-visible-p old-date) old-date)
- ((calendar-date-is-visible-p today) today)
- (t (list month 1 year)))))))
- (run-hooks 'calendar-move-hook))
-
-(defun scroll-calendar-right (&optional arg)
+ (save-selected-window
+ (select-window (posn-window (event-start event)))
+ (calendar-cursor-to-nearest-date)
+ (let ((old-date (calendar-cursor-to-date))
+ (today (calendar-current-date)))
+ (if (/= arg 0)
+ (let ((month displayed-month)
+ (year displayed-year))
+ (increment-calendar-month month year arg)
+ (generate-calendar-window month year)
+ (calendar-cursor-to-visible-date
+ (cond
+ ((calendar-date-is-visible-p old-date) old-date)
+ ((calendar-date-is-visible-p today) today)
+ (t (list month 1 year)))))))
+ (run-hooks 'calendar-move-hook)))
+
+(defun calendar-scroll-right (&optional arg event)
"Scroll the displayed calendar window right by ARG months.
If ARG is negative the calendar is scrolled left. Maintains the relative
position of the cursor with respect to the calendar as well as possible."
- (interactive "p")
- (scroll-calendar-left (- (or arg 1))))
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ last-nonmenu-event))
+ (calendar-scroll-left (- (or arg 1)) event))
-(defun scroll-calendar-left-three-months (arg)
+(defun calendar-scroll-left-three-months (arg)
"Scroll the displayed calendar window left by 3*ARG months.
If ARG is negative the calendar is scrolled right. Maintains the relative
position of the cursor with respect to the calendar as well as possible."
(interactive "p")
- (scroll-calendar-left (* 3 arg)))
+ (calendar-scroll-left (* 3 arg)))
-(defun scroll-calendar-right-three-months (arg)
+(defun calendar-scroll-right-three-months (arg)
"Scroll the displayed calendar window right by 3*ARG months.
If ARG is negative the calendar is scrolled left. Maintains the relative
position of the cursor with respect to the calendar as well as possible."
(interactive "p")
- (scroll-calendar-left (* -3 arg)))
+ (calendar-scroll-left (* -3 arg)))
(defun calendar-cursor-to-nearest-date ()
"Move the cursor to the closest date.
@@ -345,7 +349,17 @@ Negative DAY counts backward from end of year."
(+ 1 day (calendar-absolute-from-gregorian (list 12 31 year))))))
(or noecho (calendar-print-day-of-year)))
+;; Backward compatibility.
+(define-obsolete-function-alias
+ 'scroll-calendar-left 'calendar-scroll-left "23.1")
+(define-obsolete-function-alias
+ 'scroll-calendar-right 'calendar-scroll-right "23.1")
+(define-obsolete-function-alias
+ 'scroll-calendar-left-three-months 'calendar-scroll-left-three-months "23.1")
+(define-obsolete-function-alias
+ 'scroll-calendar-right-three-months 'calendar-scroll-right-three-months "23.1")
+
(provide 'cal-move)
-;;; arch-tag: d0883c46-7e16-4914-8ff8-8f67e699b781
+;; arch-tag: d0883c46-7e16-4914-8ff8-8f67e699b781
;;; cal-move.el ends here
diff --git a/lisp/calendar/cal-tex.el b/lisp/calendar/cal-tex.el
index bd9db74d19f..1faa71efec9 100644
--- a/lisp/calendar/cal-tex.el
+++ b/lisp/calendar/cal-tex.el
@@ -31,6 +31,21 @@
;; This collection of functions implements the creation of LaTeX calendars
;; based on the user's holiday choices and diary file.
+;; The user commands are:
+;; cal-tex-cursor-year
+;; cal-tex-cursor-year-landscape
+;; cal-tex-cursor-filofax-year
+;; cal-tex-cursor-month-landscape
+;; cal-tex-cursor-month
+;; cal-tex-cursor-week
+;; cal-tex-cursor-week2
+;; cal-tex-cursor-week-iso
+;; cal-tex-cursor-week-monday
+;; cal-tex-cursor-filofax-2week
+;; cal-tex-cursor-filofax-week
+;; cal-tex-cursor-filofax-daily
+;; cal-tex-cursor-day
+
;; TO DO
;;
;; (*) Add holidays and diary entries to daily calendar.
@@ -54,26 +69,23 @@
;;;
(defcustom cal-tex-which-days '(0 1 2 3 4 5 6)
- "*The days of the week that are displayed on the portrait monthly calendar.
+ "The days of the week that are displayed on the portrait monthly calendar.
Sunday is 0, Monday is 1, and so on. The default is to print from Sunday to
-Saturday. For example, use
-
- (setq cal-tex-which-days '(1 3 5))
-
-to only print Monday, Wednesday, Friday."
+Saturday. For example, use '(1 3 5) to only print Monday, Wednesday, Friday."
:type '(repeat integer)
:group 'calendar-tex)
(defcustom cal-tex-holidays t
"Non-nil means holidays are printed in the LaTeX calendars that support it.
-If finding the holidays is too slow, set this to nil."
+Setting this to nil may speed up calendar generation."
:type 'boolean
:group 'calendar-tex)
(defcustom cal-tex-diary nil
"Non-nil means diary entries are printed in LaTeX calendars that support it.
At present, this only affects the monthly, filofax, and iso-week
-calendars (i.e. not the yearly, plain weekly, or daily calendars)."
+calendars (i.e. not the yearly, plain weekly, or daily calendars).
+Setting this to nil may speed up calendar generation."
:type 'boolean
:group 'calendar-tex)
@@ -85,20 +97,21 @@ At present, this only affects the daily filofax calendar."
(defcustom cal-tex-daily-string
'(let* ((year (extract-calendar-year date))
- (day (calendar-day-number date))
+ (day (calendar-day-number date))
(days-remaining (- (calendar-day-number (list 12 31 year)) day)))
- (format "%d/%d" day days-remaining))
- "*An expression in the variable `date' whose value is placed on date.
-The string resulting from evaluating this expression is placed at the bottom
-center of `date' on the monthly calendar, next to the date in the weekly
-calendars, and in the top center of daily calendars.
+ (format "%d/%d" day days-remaining))
+ "Lisp expression giving the date format to use in the LaTeX calendars.
+This should be an expression involving the variable `date'. When
+this expression is called, `date' is a list of the form '(MONTH DAY YEAR)'.
-Default is ordinal day number of the year and the number of days remaining.
-As an example of what you do, setting this to
+The string resulting from evaluating this expression is placed at
+the bottom center of each date in monthly calendars, next to the
+date in the weekly calendars, and in the top center of daily calendars.
- '(progn
- (require 'cal-hebrew)
- (calendar-hebrew-date-string date))
+The default is ordinal day number of the year and the number of
+days remaining. As an example, setting this to
+
+ '(calendar-hebrew-date-string date)
will put the Hebrew date at the bottom of each day."
:type 'sexp
@@ -115,12 +128,14 @@ will put the Hebrew date at the bottom of each day."
:group 'calendar-tex)
(defcustom cal-tex-daily-start 8
- "*The first hour of the daily calendar page."
+ "The first hour of the daily LaTeX calendar page.
+At present, this only affects `cal-tex-cursor-day'."
:type 'integer
:group 'calendar-tex)
(defcustom cal-tex-daily-end 20
- "*The last hour of the daily calendar page."
+ "The last hour of the daily LaTeX calendar page.
+At present, this only affects `cal-tex-cursor-day'"
:type 'integer
:group 'calendar-tex)
@@ -133,31 +148,31 @@ For example, to include extra packages:
:version "22.1")
(defcustom cal-tex-hook nil
- "*List of functions called after any LaTeX calendar buffer is generated.
+ "List of functions called after any LaTeX calendar buffer is generated.
You can use this to do postprocessing on the buffer. For example, to change
characters with diacritical marks to their LaTeX equivalents, use
- (add-hook 'cal-tex-hook
- '(lambda () (iso-iso2tex (point-min) (point-max))))"
+ (add-hook 'cal-tex-hook
+ (lambda () (iso-iso2tex (point-min) (point-max))))"
:type 'hook
:group 'calendar-tex)
(defcustom cal-tex-year-hook nil
- "*List of functions called after a LaTeX year calendar buffer is generated."
+ "List of functions called after a LaTeX year calendar buffer is generated."
:type 'hook
:group 'calendar-tex)
(defcustom cal-tex-month-hook nil
- "*List of functions called after a LaTeX month calendar buffer is generated."
+ "List of functions called after a LaTeX month calendar buffer is generated."
:type 'hook
:group 'calendar-tex)
(defcustom cal-tex-week-hook nil
- "*List of functions called after a LaTeX week calendar buffer is generated."
+ "List of functions called after a LaTeX week calendar buffer is generated."
:type 'hook
:group 'calendar-tex)
(defcustom cal-tex-daily-hook nil
- "*List of functions called after a LaTeX daily calendar buffer is generated."
+ "List of functions called after a LaTeX daily calendar buffer is generated."
:type 'hook
:group 'calendar-tex)
@@ -165,42 +180,42 @@ characters with diacritical marks to their LaTeX equivalents, use
;;; Definitions for LaTeX code
;;;
-(defvar cal-tex-day-prefix "\\caldate{%s}{%s}"
+(defconst cal-tex-day-prefix "\\caldate{%s}{%s}"
"The initial LaTeX code for a day.
The holidays, diary entries, bottom string, and the text follow.")
-(defvar cal-tex-day-name-format "\\myday{%s}%%"
- "The format for LaTeX code for a day name. The names are taken from
-`calendar-day-name-array'.")
+(defconst cal-tex-day-name-format "\\myday{%s}%%"
+ "The format for LaTeX code for a day name.
+The names are taken from `calendar-day-name-array'.")
-(defvar cal-tex-cal-one-month
-"\\def\\calmonth#1#2%
+(defconst cal-tex-cal-one-month
+ "\\def\\calmonth#1#2%
{\\begin{center}%
\\Huge\\bf\\uppercase{#1} #2 \\\\[1cm]%
\\end{center}}%
\\vspace*{-1.5cm}%
%
"
- "LaTeX code for the month header")
+ "LaTeX code for the month header, for a single month calendar.")
-(defvar cal-tex-cal-multi-month
-"\\def\\calmonth#1#2#3#4%
+(defconst cal-tex-cal-multi-month
+ "\\def\\calmonth#1#2#3#4%
{\\begin{center}%
\\Huge\\bf #1 #2---#3 #4\\\\[1cm]%
\\end{center}}%
\\vspace*{-1.5cm}%
%
"
- "LaTeX code for the month header")
+ "LaTeX code for the month header, for a multi-month calendar.")
-(defvar cal-tex-myday
-"\\renewcommand{\\myday}[1]%
+(defconst cal-tex-myday
+ "\\renewcommand{\\myday}[1]%
{\\makebox[\\cellwidth]{\\hfill\\large\\bf#1\\hfill}}
%
"
- "LaTeX code for a day heading")
+ "LaTeX code for a day heading.")
-(defvar cal-tex-caldate
+(defconst cal-tex-caldate
"\\fboxsep=0pt
\\long\\def\\caldate#1#2#3#4#5#6{%
\\fbox{\\hbox to\\cellwidth{%
@@ -233,18 +248,16 @@ This definition is the heart of the calendar!")
(1+ (/ (calendar-interval displayed-month displayed-year
end-month end-year)
3)))
- (holidays nil)
- (in-range))
+ holidays in-range a)
(increment-calendar-month displayed-month displayed-year 1)
- (calendar-for-loop i from 1 to number-of-intervals do
+ (dotimes (idummy number-of-intervals)
(setq holidays (append holidays (calendar-holiday-list)))
(increment-calendar-month displayed-month displayed-year 3))
- (while holidays
- (and (car (car holidays))
- (let ((a (calendar-absolute-from-gregorian (car (car holidays)))))
- (and (<= d1 a) (<= a d2)))
- (setq in-range (append (list (car holidays)) in-range)))
- (setq holidays (cdr holidays)))
+ (dolist (hol holidays)
+ (and (car hol)
+ (setq a (calendar-absolute-from-gregorian (car hol)))
+ (and (<= d1 a) (<= a d2))
+ (setq in-range (append (list hol) in-range))))
in-range))
(defun cal-tex-list-diary-entries (d1 d2)
@@ -256,15 +269,15 @@ This definition is the heart of the calendar!")
(1+ (- d2 d1)))))
(defun cal-tex-preamble (&optional args)
- "Insert the LaTeX preamble.
-Preamble Includes initial definitions for various LaTeX commands.
-Optional ARGS are included."
+ "Insert the LaTeX calendar preamble into `cal-tex-buffer'.
+Preamble includes initial definitions for various LaTeX commands.
+Optional string ARGS are included as options for the article document class."
+ ;; FIXME use generate-new-buffer, and adjust cal-tex-end-document.
(set-buffer (get-buffer-create cal-tex-buffer))
- (erase-buffer)
- (insert "\\documentclass")
- (if args
- (insert "[" args "]"))
- (insert "{article}\n")
+ (insert (format "\\documentclass%s{article}\n"
+ (if (stringp args)
+ (format "[%s]" args)
+ "")))
(if (stringp cal-tex-preamble-extra)
(insert cal-tex-preamble-extra "\n"))
(insert "\\hbadness 20000
@@ -296,29 +309,28 @@ Optional ARGS are included."
(defun cal-tex-cursor-year (&optional arg)
"Make a buffer with LaTeX commands for the year cursor is on.
-Optional prefix argument specifies number of years."
+Optional prefix argument ARG specifies number of years."
(interactive "p")
(cal-tex-year (extract-calendar-year (calendar-cursor-to-date t))
- (if arg arg 1)))
+ (or arg 1)))
(defun cal-tex-cursor-year-landscape (&optional arg)
"Make a buffer with LaTeX commands for the year cursor is on.
-Optional prefix argument specifies number of years."
+Optional prefix argument ARG specifies number of years."
(interactive "p")
(cal-tex-year (extract-calendar-year (calendar-cursor-to-date t))
- (if arg arg 1)
- t))
+ (or arg 1) t))
(defun cal-tex-year (year n &optional landscape)
"Make a one page yearly calendar of YEAR; do this for N years.
-There are four rows of three months each, unless optional LANDSCAPE is t,
-in which case the calendar isprinted in landscape mode with three rows of
-four months each."
+There are four rows of three months each, unless optional
+LANDSCAPE is non-nil, in which case the calendar is printed in
+landscape mode with three rows of four months each."
(cal-tex-insert-preamble 1 landscape "12pt")
(if landscape
(cal-tex-vspace "-.6cm")
(cal-tex-vspace "-3.1cm"))
- (calendar-for-loop j from 1 to n do
+ (dotimes (j n)
(insert "\\vfill%\n")
(cal-tex-b-center)
(cal-tex-Huge (number-to-string year))
@@ -329,28 +341,28 @@ four months each."
(insert "\n")
(cal-tex-noindent)
(cal-tex-nl)
- (calendar-for-loop i from 1 to 12 do
- (insert (cal-tex-mini-calendar i year "month" "1.1in" "1in"))
- (insert "\\month")
- (cal-tex-hspace "0.5in")
- (if (zerop (mod i (if landscape 4 3)))
- (cal-tex-nl "0.5in")))
+ (dotimes (i 12)
+ (insert (cal-tex-mini-calendar (1+ i) year "month" "1.1in" "1in"))
+ (insert "\\month")
+ (cal-tex-hspace "0.5in")
+ (if (zerop (mod (1+ i) (if landscape 4 3)))
+ (cal-tex-nl "0.5in")))
(cal-tex-e-parbox)
(cal-tex-e-center)
(insert "\\vfill%\n")
(setq year (1+ year))
- (if (/= j n)
- (cal-tex-newpage)
- (cal-tex-end-document))
+ (if (= j (1- n))
+ (cal-tex-end-document)
+ (cal-tex-newpage))
(run-hooks 'cal-tex-year-hook))
(run-hooks 'cal-tex-hook))
(defun cal-tex-cursor-filofax-year (&optional arg)
"Make a Filofax one page yearly calendar of year indicated by cursor.
-Optional parameter specifies number of years."
+Optional prefix argument ARG specifies number of years."
(interactive "p")
- (let* ((n (if arg arg 1))
- (year (extract-calendar-year (calendar-cursor-to-date t))))
+ (let ((n (or arg 1))
+ (year (extract-calendar-year (calendar-cursor-to-date t))))
(cal-tex-preamble "twoside")
(cal-tex-cmd "\\textwidth 3.25in")
(cal-tex-cmd "\\textheight 6.5in")
@@ -362,8 +374,8 @@ Optional parameter specifies number of years."
(cal-tex-cmd "\\pagestyle{empty}")
(cal-tex-b-document)
(cal-tex-cmd "\\vspace*{0.25in}")
- (calendar-for-loop j from 1 to n do
- (insert (format "\\hfil {\\Large \\bf %s} \\hfil\\\\\n" year))
+ (dotimes (j n)
+ (insert (format "\\hfil \\textbf{\\Large %s} \\hfil\\\\\n" year))
(cal-tex-b-center)
(cal-tex-b-parbox "l" "\\textwidth")
(insert "\n")
@@ -374,9 +386,8 @@ Optional parameter specifies number of years."
;; the names of the months they insert.
["January" "February" "March" "April" "May" "June"
"July" "August" "September" "October" "November" "December"]))
- (calendar-for-loop i from 1 to 12 do
- (insert (cal-tex-mini-calendar i year
- (aref month-names (1- i))
+ (dotimes (i 12)
+ (insert (cal-tex-mini-calendar (1+ i) year (aref month-names i)
"1in" ".9in" "tiny" "0.6mm"))))
(insert
"\\noindent\\fbox{\\January}\\fbox{\\February}\\fbox{\\March}\\\\
@@ -387,7 +398,7 @@ Optional parameter specifies number of years."
(cal-tex-e-parbox)
(cal-tex-e-center)
(setq year (1+ year))
- (if (= j n)
+ (if (= j (1- n))
(cal-tex-end-document)
(cal-tex-newpage)
(cal-tex-cmd "\\vspace*{0.25in}"))
@@ -400,45 +411,34 @@ Optional parameter specifies number of years."
(defun cal-tex-cursor-month-landscape (&optional arg)
"Make a LaTeX calendar buffer for the month the cursor is on.
-Optional prefix argument specifies number of months to be
+Optional prefix argument ARG specifies number of months to be
produced (default 1). The output is in landscape format, one
month to a page. It shows holiday and diary entries if
-`cal-tex-holidays' and `cal-tex-diary', respectively, are
-non-nil."
+`cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-cursor-to-date t))
(month (extract-calendar-month date))
(year (extract-calendar-year date))
(end-month month)
(end-year year)
- (cal-tex-which-days '(0 1 2 3 4 5 6)))
+ (cal-tex-which-days '(0 1 2 3 4 5 6))
+ (d1 (calendar-absolute-from-gregorian (list month 1 year)))
+ (d2 (calendar-absolute-from-gregorian
+ (list end-month
+ (calendar-last-day-of-month end-month end-year)
+ end-year))))
(increment-calendar-month end-month end-year (1- n))
(let ((diary-list (if cal-tex-diary
- (cal-tex-list-diary-entries
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (calendar-absolute-from-gregorian
- (list end-month
- (calendar-last-day-of-month
- end-month end-year)
- end-year)))))
+ (cal-tex-list-diary-entries d1 d2)))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (calendar-absolute-from-gregorian
- (list end-month
- (calendar-last-day-of-month end-month end-year)
- end-year)))))
- (other-month)
- (other-year)
- (small-months-at-start))
+ (cal-tex-list-holidays d1 d2)))
+ other-month other-year small-months-at-start)
(cal-tex-insert-preamble (cal-tex-number-weeks month year 1) t "12pt")
(cal-tex-cmd cal-tex-cal-one-month)
- (calendar-for-loop i from 1 to n do
- (setq other-month month)
- (setq other-year year)
+ (dotimes (i n)
+ (setq other-month month
+ other-year year)
(increment-calendar-month other-month other-year -1)
(insert (cal-tex-mini-calendar other-month other-year "lastmonth"
"\\cellwidth" "\\cellheight"))
@@ -448,11 +448,10 @@ non-nil."
(cal-tex-insert-month-header 1 month year month year)
(cal-tex-insert-day-names)
(cal-tex-nl ".2cm")
- (setq small-months-at-start
+ (if (setq small-months-at-start
(< 1 (mod (- (calendar-day-of-week (list month 1 year))
calendar-week-start-day)
7)))
- (if small-months-at-start
(insert "\\lastmonth\\nextmonth\\hspace*{-2\\cellwidth}"))
(cal-tex-insert-blank-days month year cal-tex-day-prefix)
(cal-tex-insert-days month year diary-list holidays
@@ -468,20 +467,19 @@ non-nil."
(insert "\\vspace*{-\\cellwidth}\\hspace*{-2\\cellwidth}"
"\\lastmonth\\nextmonth%
"))
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-month-hook)
- (cal-tex-newpage)
- (increment-calendar-month month year 1)
- (cal-tex-vspace "-2cm")
- (cal-tex-insert-preamble
- (cal-tex-number-weeks month year 1) t "12pt" t))))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-month-hook)
+ (cal-tex-newpage)
+ (increment-calendar-month month year 1)
+ (cal-tex-vspace "-2cm")
+ (cal-tex-insert-preamble
+ (cal-tex-number-weeks month year 1) t "12pt" t)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook))))
(defun cal-tex-cursor-month (arg)
"Make a LaTeX calendar buffer for the month the cursor is on.
-Optional prefix argument specifies number of months to be
+Optional prefix argument ARG specifies number of months to be
produced (default 1). The calendar is condensed onto one page.
It shows holiday and diary entries if `cal-tex-holidays' and
`cal-tex-diary', respectively, are non-nil."
@@ -491,27 +489,18 @@ It shows holiday and diary entries if `cal-tex-holidays' and
(year (extract-calendar-year date))
(end-month month)
(end-year year)
- (n (if arg arg 1)))
+ (n (or arg 1))
+ (d1 (calendar-absolute-from-gregorian (list month 1 year)))
+ (d2 (calendar-absolute-from-gregorian
+ (list end-month
+ (calendar-last-day-of-month end-month end-year)
+ end-year))))
(increment-calendar-month end-month end-year (1- n))
(let ((diary-list (if cal-tex-diary
- (cal-tex-list-diary-entries
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (calendar-absolute-from-gregorian
- (list end-month
- (calendar-last-day-of-month
- end-month end-year)
- end-year)))))
+ (cal-tex-list-diary-entries d1 d2)))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (calendar-absolute-from-gregorian
- (list end-month
- (calendar-last-day-of-month end-month end-year)
- end-year)))))
- (other-month)
- (other-year))
+ (cal-tex-list-holidays d1 d2)))
+ other-month other-year)
(cal-tex-insert-preamble (cal-tex-number-weeks month year n) nil"12pt")
(if (> n 1)
(cal-tex-cmd cal-tex-cal-multi-month)
@@ -520,20 +509,18 @@ It shows holiday and diary entries if `cal-tex-holidays' and
(cal-tex-insert-day-names)
(cal-tex-nl ".2cm")
(cal-tex-insert-blank-days month year cal-tex-day-prefix)
- (calendar-for-loop i from 1 to n do
- (setq other-month month)
- (setq other-year year)
- (cal-tex-insert-days month year diary-list holidays
- cal-tex-day-prefix)
- (if (= (mod (calendar-absolute-from-gregorian
+ (dotimes (idummy n)
+ (setq other-month month
+ other-year year)
+ (cal-tex-insert-days month year diary-list holidays cal-tex-day-prefix)
+ (when (= (mod (calendar-absolute-from-gregorian
(list month
(calendar-last-day-of-month month year)
year))
7)
- 6); last day of month was Saturday
- (progn
- (cal-tex-hfill)
- (cal-tex-nl)))
+ 6) ; last day of month was Saturday
+ (cal-tex-hfill)
+ (cal-tex-nl))
(increment-calendar-month month year 1))
(cal-tex-insert-blank-days-at-end end-month end-year cal-tex-day-prefix)
(cal-tex-end-document)))
@@ -544,32 +531,31 @@ It shows holiday and diary entries if `cal-tex-holidays' and
LaTeX commands are inserted for the days of the MONTH in YEAR.
Diary entries on DIARY-LIST are included. Holidays on HOLIDAYS
are included. Each day is formatted using format DAY-FORMAT."
- (let* ((blank-days;; at start of month
- (mod
- (- (calendar-day-of-week (list month 1 year))
- calendar-week-start-day)
- 7))
- (date)
- (last (calendar-last-day-of-month month year)))
- (calendar-for-loop i from 1 to last do
- (setq date (list month i year))
- (if (memq (calendar-day-of-week date) cal-tex-which-days)
- (progn
- (insert (format day-format (cal-tex-month-name month) i))
- (cal-tex-arg (cal-tex-latexify-list diary-list date))
- (cal-tex-arg (cal-tex-latexify-list holidays date))
- (cal-tex-arg (eval cal-tex-daily-string))
- (cal-tex-arg)
- (cal-tex-comment)))
- (if (and (zerop (mod (+ i blank-days) 7))
- (/= i last))
- (progn
- (cal-tex-hfill)
- (cal-tex-nl))))))
+ (let ((blank-days ; at start of month
+ (mod
+ (- (calendar-day-of-week (list month 1 year))
+ calendar-week-start-day)
+ 7))
+ (last (calendar-last-day-of-month month year))
+ date j)
+ (dotimes (i last)
+ (setq j (1+ i) ; 1-last, incl
+ date (list month j year))
+ (when (memq (calendar-day-of-week date) cal-tex-which-days)
+ (insert (format day-format (cal-tex-month-name month) j))
+ (cal-tex-arg (cal-tex-latexify-list diary-list date))
+ (cal-tex-arg (cal-tex-latexify-list holidays date))
+ (cal-tex-arg (eval cal-tex-daily-string))
+ (cal-tex-arg)
+ (cal-tex-comment))
+ (when (and (zerop (mod (+ j blank-days) 7))
+ (/= j last))
+ (cal-tex-hfill)
+ (cal-tex-nl)))))
(defun cal-tex-insert-day-names ()
"Insert the names of the days at top of a monthly calendar."
- (calendar-for-loop i from 0 to 6 do
+ (dotimes (i 7)
(if (memq i cal-tex-which-days)
(insert (format cal-tex-day-name-format
(cal-tex-LaTeXify-string
@@ -581,13 +567,13 @@ are included. Each day is formatted using format DAY-FORMAT."
"Create a title for a calendar.
A title is inserted for a calendar with N months starting with
MONTH YEAR and ending with END-MONTH END-YEAR."
- (let ((month-name (cal-tex-month-name month))
- (end-month-name (cal-tex-month-name end-month)))
+ (let ((month-name (cal-tex-month-name month))
+ (end-month-name (cal-tex-month-name end-month)))
(if (= 1 n)
(insert (format "\\calmonth{%s}{%s}\n\\vspace*{-0.5cm}"
- month-name year) )
- (insert (format "\\calmonth{%s}{%s}{%s}{%s}\n\\vspace*{-0.5cm}"
- month-name year end-month-name end-year))))
+ month-name year) )
+ (insert (format "\\calmonth{%s}{%s}{%s}{%s}\n\\vspace*{-0.5cm}"
+ month-name year end-month-name end-year))))
(cal-tex-comment))
(defun cal-tex-insert-blank-days (month year day-format)
@@ -596,12 +582,12 @@ Insert LaTeX code for the blank days at the beginning of the MONTH in
YEAR. The entry is formatted using DAY-FORMAT. If the entire week is
blank, no days are inserted."
(if (cal-tex-first-blank-p month year)
- (let* ((blank-days;; at start of month
- (mod
- (- (calendar-day-of-week (list month 1 year))
- calendar-week-start-day)
- 7)))
- (calendar-for-loop i from 0 to (1- blank-days) do
+ (let ((blank-days ; at start of month
+ (mod
+ (- (calendar-day-of-week (list month 1 year))
+ calendar-week-start-day)
+ 7)))
+ (dotimes (i blank-days)
(if (memq i cal-tex-which-days)
(insert (format day-format " " " ") "{}{}{}{}%\n"))))))
@@ -611,7 +597,7 @@ Insert LaTeX code for the blank days at the end of the MONTH in YEAR.
The entry is formatted using DAY-FORMAT."
(if (cal-tex-last-blank-p month year)
(let* ((last-day (calendar-last-day-of-month month year))
- (blank-days;; at end of month
+ (blank-days ; at end of month
(mod
(- (calendar-day-of-week (list month last-day year))
calendar-week-start-day)
@@ -624,24 +610,22 @@ The entry is formatted using DAY-FORMAT."
"Determine if any days of the first week will be printed.
Return t if there will there be any days of the first week printed
in the calendar starting in MONTH YEAR."
- (let ((any-days nil)
- (the-saturday)) ;the day of week of 1st Saturday
- (calendar-for-loop i from 1 to 7 do
- (if (= 6 (calendar-day-of-week (list month i year)))
- (setq the-saturday i)))
- (calendar-for-loop i from 1 to the-saturday do
- (if (memq (calendar-day-of-week (list month i year))
- cal-tex-which-days)
- (setq any-days t)))
+ (let (any-days the-saturday) ; the day of week of 1st Saturday
+ (dotimes (i 7)
+ (if (= 6 (calendar-day-of-week (list month (1+ i) year)))
+ (setq the-saturday (1+ i))))
+ (dotimes (i the-saturday)
+ (if (memq (calendar-day-of-week (list month (1+ i) year))
+ cal-tex-which-days)
+ (setq any-days t)))
any-days))
(defun cal-tex-last-blank-p (month year)
"Determine if any days of the last week will be printed.
Return t if there will there be any days of the last week printed
in the calendar starting in MONTH YEAR."
- (let ((any-days nil)
- (last-day (calendar-last-day-of-month month year))
- (the-sunday)) ;the day of week of last Sunday
+ (let ((last-day (calendar-last-day-of-month month year))
+ any-days the-sunday) ; the day of week of last Sunday
(calendar-for-loop i from (- last-day 6) to last-day do
(if (= 0 (calendar-day-of-week (list month i year)))
(setq the-sunday i)))
@@ -654,7 +638,7 @@ in the calendar starting in MONTH YEAR."
(defun cal-tex-number-weeks (month year n)
"Determine the number of weeks in a range of dates.
Compute the number of weeks in the calendar starting with MONTH and YEAR,
-and lasting N months, including only the days in WHICH-DAYS. As it stands,
+and lasting N months, including only the days in WHICH-DAYS. As it stands,
this is only an upper bound."
(let ((d (list month 1 year)))
(increment-calendar-month month year (1- n))
@@ -671,20 +655,21 @@ this is only an upper bound."
;;; Weekly calendars
;;;
-(defvar cal-tex-LaTeX-hourbox
+(defconst cal-tex-LaTeX-hourbox
"\\newcommand{\\hourbox}[2]%
{\\makebox[2em]{\\rule{0cm}{#2ex}#1}\\rule{3in}{.15mm}}\n"
"One hour and a line on the right.")
;; TODO cal-tex-diary-support.
+;; TODO respect cal-tex-daily-start,end (see cal-tex-week-hours).
(defun cal-tex-cursor-week (&optional arg)
"Make a LaTeX calendar buffer for a two-page one-week calendar.
It applies to the week that point is in. The optional prefix
-argument specifies the number of weeks (default 1). The calendar
-shows holidays if `cal-tex-holidays' is t (note that diary
-entries are not shown)."
+argument ARG specifies the number of weeks (default 1). The calendar
+shows holidays if `cal-tex-holidays' is non-nil (note that diary
+entries are not shown). The calendar shows the hours 8-12am, 1-5pm."
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
calendar-week-start-day
@@ -692,11 +677,10 @@ entries are not shown)."
(calendar-cursor-to-date t)))))
(month (extract-calendar-month date))
(year (extract-calendar-year date))
+ (d1 (calendar-absolute-from-gregorian date))
+ (d2 (+ (* 7 n) d1))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian date)
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date))))))
+ (cal-tex-list-holidays d1 d2))))
(cal-tex-preamble "11pt")
(cal-tex-cmd "\\textwidth 6.5in")
(cal-tex-cmd "\\textheight 10.5in")
@@ -705,7 +689,7 @@ entries are not shown)."
(insert cal-tex-LaTeX-hourbox)
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}")
- (calendar-for-loop i from 1 to n do
+ (dotimes (i n)
(cal-tex-vspace "-1.5in")
(cal-tex-b-center)
(cal-tex-Huge-bf (format "\\uppercase{%s}"
@@ -716,28 +700,28 @@ entries are not shown)."
(cal-tex-e-center)
(cal-tex-hspace "-.2in")
(cal-tex-b-parbox "l" "7in")
- (calendar-for-loop j from 1 to 7 do
+ (dotimes (jdummy 7)
(cal-tex-week-hours date holidays "3.1")
(setq date (cal-tex-incr-date date)))
(cal-tex-e-parbox)
- (setq month (extract-calendar-month date))
- (setq year (extract-calendar-year date))
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (cal-tex-newpage))))
+ (setq month (extract-calendar-month date)
+ year (extract-calendar-year date))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
;; TODO cal-tex-diary support.
+;; TODO respect cal-tex-daily-start,end (see cal-tex-week-hours).
(defun cal-tex-cursor-week2 (&optional arg)
"Make a LaTeX calendar buffer for a two-page one-week calendar.
It applies to the week that point is in. Optional prefix
-argument specifies number of weeks (default 1). The calendar
+argument ARG specifies number of weeks (default 1). The calendar
shows holidays if `cal-tex-holidays' is non-nil (note that diary
-entries are not shown)."
+entries are not shown). The calendar shows the hours 8-12am, 1-5pm"
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
calendar-week-start-day
@@ -746,11 +730,10 @@ entries are not shown)."
(month (extract-calendar-month date))
(year (extract-calendar-year date))
(d date)
+ (d1 (calendar-absolute-from-gregorian date))
+ (d2 (+ (* 7 n) d1))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian date)
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date))))))
+ (cal-tex-list-holidays d1 d2))))
(cal-tex-preamble "12pt")
(cal-tex-cmd "\\textwidth 6.5in")
(cal-tex-cmd "\\textheight 10.5in")
@@ -759,7 +742,7 @@ entries are not shown)."
(insert cal-tex-LaTeX-hourbox)
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}")
- (calendar-for-loop i from 1 to n do
+ (dotimes (i n)
(cal-tex-vspace "-1.5in")
(cal-tex-b-center)
(cal-tex-Huge-bf (format "\\uppercase{%s}"
@@ -770,7 +753,7 @@ entries are not shown)."
(cal-tex-e-center)
(cal-tex-hspace "-.2in")
(cal-tex-b-parbox "l" "\\textwidth")
- (calendar-for-loop j from 1 to 3 do
+ (dotimes (jdummy 3)
(cal-tex-week-hours date holidays "5")
(setq date (cal-tex-incr-date date)))
(cal-tex-e-parbox)
@@ -798,26 +781,26 @@ entries are not shown)."
(insert "}")
(cal-tex-nl)
(cal-tex-b-parbox "l" "\\textwidth")
- (calendar-for-loop j from 4 to 7 do
+ (dotimes (jdummy 4)
(cal-tex-week-hours date holidays "5")
(setq date (cal-tex-incr-date date)))
(cal-tex-e-parbox)
- (setq month (extract-calendar-month date))
- (setq year (extract-calendar-year date))
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (cal-tex-newpage))))
+ (setq month (extract-calendar-month date)
+ year (extract-calendar-year date))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
(defun cal-tex-cursor-week-iso (&optional arg)
"Make a LaTeX calendar buffer for a one page ISO-style weekly calendar.
-Optional prefix argument specifies number of weeks (default 1).
+Optional prefix argument ARG specifies number of weeks (default 1).
The calendar shows holiday and diary entries if
-`cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
+`cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil.
+It does not show hours of the day."
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
1
@@ -826,17 +809,16 @@ The calendar shows holiday and diary entries if
(month (extract-calendar-month date))
(year (extract-calendar-year date))
(day (extract-calendar-day date))
+ (d1 (calendar-absolute-from-gregorian date))
+ (d2 (+ (* 7 n) d1))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian date)
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date)))))
+ (cal-tex-list-holidays d1 d2)))
(diary-list (if cal-tex-diary
(cal-tex-list-diary-entries
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date))))))
+ ;; FIXME d1?
+ (calendar-absolute-from-gregorian (list month 1 year))
+ d2)))
+ s)
(cal-tex-preamble "11pt")
(cal-tex-cmd "\\textwidth 6.5in")
(cal-tex-cmd "\\textheight 10.5in")
@@ -844,19 +826,19 @@ The calendar shows holiday and diary entries if
(cal-tex-cmd "\\evensidemargin 0in")
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}")
- (calendar-for-loop i from 1 to n do
+ (dotimes (i n)
(cal-tex-vspace "-1.5in")
(cal-tex-b-center)
(cal-tex-Huge-bf
- (let* ((d (calendar-iso-from-absolute
- (calendar-absolute-from-gregorian date))))
+ (let ((d (calendar-iso-from-absolute
+ (calendar-absolute-from-gregorian date))))
(format "Week %d of %d"
(extract-calendar-month d)
(extract-calendar-year d))))
(cal-tex-nl ".5cm")
(cal-tex-e-center)
(cal-tex-b-parbox "l" "\\textwidth")
- (calendar-for-loop j from 1 to 7 do
+ (dotimes (j 7)
(cal-tex-b-parbox "t" "\\textwidth")
(cal-tex-b-parbox "t" "\\textwidth")
(cal-tex-rule "0pt" "\\textwidth" ".2mm")
@@ -867,47 +849,48 @@ The calendar shows holiday and diary entries if
(cal-tex-large-bf (cal-tex-month-name month))
(insert " ")
(cal-tex-large-bf (number-to-string day))
- (if (not (string= "" (cal-tex-latexify-list holidays date)))
- (progn
- (insert ": ")
- (cal-tex-large-bf (cal-tex-latexify-list holidays date "; "))))
+ (unless (string-equal "" (setq s (cal-tex-latexify-list
+ holidays date "; ")))
+ (insert ": ")
+ (cal-tex-large-bf s))
(cal-tex-hfill)
(insert " " (eval cal-tex-daily-string))
(cal-tex-e-parbox)
(cal-tex-nl)
(cal-tex-noindent)
(cal-tex-b-parbox "t" "\\textwidth")
- (if (not (string= "" (cal-tex-latexify-list diary-list date)))
- (progn
- (insert "\\vbox to 0pt{")
- (cal-tex-large-bf
- (cal-tex-latexify-list diary-list date))
- (insert "}")))
+ (unless (string-equal "" (setq s (cal-tex-latexify-list
+ diary-list date)))
+ (insert "\\vbox to 0pt{")
+ (cal-tex-large-bf s)
+ (insert "}"))
(cal-tex-e-parbox)
(cal-tex-nl)
- (setq date (cal-tex-incr-date date))
- (setq month (extract-calendar-month date))
- (setq day (extract-calendar-day date))
+ (setq date (cal-tex-incr-date date)
+ month (extract-calendar-month date)
+ day (extract-calendar-day date))
(cal-tex-e-parbox)
(cal-tex-e-parbox "2cm")
(cal-tex-nl)
- (setq month (extract-calendar-month date))
- (setq year (extract-calendar-year date)))
+ (setq month (extract-calendar-month date)
+ year (extract-calendar-year date)))
(cal-tex-e-parbox)
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (cal-tex-newpage))))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
+;; TODO respect cal-tex-daily-start,end?
+;; Using different numbers of hours will probably break some layouts.
(defun cal-tex-week-hours (date holidays height)
"Insert hourly entries for DATE with HOLIDAYS, with line height HEIGHT.
-Uses the 24-hour clock if `cal-tex-24' is non-nil."
+Uses the 24-hour clock if `cal-tex-24' is non-nil. Note that the hours
+shown are hard-coded to 8-12, 13-17."
(let ((month (extract-calendar-month date))
- (day (extract-calendar-day date))
- (year (extract-calendar-year date))
- (afternoon))
+ (day (extract-calendar-day date))
+ (year (extract-calendar-year date))
+ morning afternoon s)
(cal-tex-comment "begin cal-tex-week-hours")
(cal-tex-cmd "\\ \\\\[-.2cm]")
(cal-tex-cmd "\\noindent")
@@ -917,48 +900,51 @@ Uses the 24-hour clock if `cal-tex-24' is non-nil."
(cal-tex-large-bf (cal-tex-month-name month))
(insert " ")
(cal-tex-large-bf (number-to-string day))
- (if (not (string= "" (cal-tex-latexify-list holidays date)))
- (progn
- (insert ": ")
- (cal-tex-large-bf (cal-tex-latexify-list holidays date "; "))))
+ (unless (string-equal "" (setq s (cal-tex-latexify-list
+ holidays date "; ")))
+ (insert ": ")
+ (cal-tex-large-bf s))
(cal-tex-hfill)
(insert " " (eval cal-tex-daily-string))
(cal-tex-e-parbox)
(cal-tex-nl "-.3cm")
(cal-tex-rule "0pt" "6.8in" ".2mm")
(cal-tex-nl "-.1cm")
- (calendar-for-loop i from 8 to 12 do
- (if cal-tex-24
- (setq afternoon (+ i 5))
- (setq afternoon (- i 7)))
- (cal-tex-cmd "\\hourbox" (number-to-string i))
- (cal-tex-arg height)
- (cal-tex-hspace ".4cm")
- (cal-tex-cmd "\\hourbox" (number-to-string afternoon))
- (cal-tex-arg height)
- (cal-tex-nl))))
+ (dotimes (i 5)
+ (setq morning (+ i 8) ; 8-12 incl
+ afternoon (if cal-tex-24
+ (+ i 13) ; 13-17 incl
+ (1+ i))) ; 1-5 incl
+ (cal-tex-cmd "\\hourbox" (number-to-string morning))
+ (cal-tex-arg height)
+ (cal-tex-hspace ".4cm")
+ (cal-tex-cmd "\\hourbox" (number-to-string afternoon))
+ (cal-tex-arg height)
+ (cal-tex-nl))))
;; TODO cal-tex-diary support.
+;; TODO respect cal-tex-daily-start,end (see cal-tex-weekly4-box).
(defun cal-tex-cursor-week-monday (&optional arg)
"Make a LaTeX calendar buffer for a two-page one-week calendar.
It applies to the week that point is in, and starts on Monday.
-Optional prefix argument specifies number of weeks (default 1).
+Optional prefix argument ARG specifies number of weeks (default 1).
The calendar shows holidays if `cal-tex-holidays' is
-non-nil (note that diary entries are not shown)."
+non-nil (note that diary entries are not shown). The calendar shows
+the hours 8-12am, 1-5pm."
(interactive "p")
- (let* ((n (if arg arg 1))
- (date (calendar-gregorian-from-absolute
- (calendar-dayname-on-or-before
- 0
- (calendar-absolute-from-gregorian
- (calendar-cursor-to-date t))))))
+ (let ((n (or arg 1))
+ (date (calendar-gregorian-from-absolute
+ (calendar-dayname-on-or-before
+ 0
+ (calendar-absolute-from-gregorian
+ (calendar-cursor-to-date t))))))
(cal-tex-preamble "11pt")
(cal-tex-cmd "\\textwidth 6.5in")
(cal-tex-cmd "\\textheight 10.5in")
(cal-tex-cmd "\\oddsidemargin 0in")
(cal-tex-cmd "\\evensidemargin 0in")
(cal-tex-b-document)
- (calendar-for-loop i from 1 to n do
+ (dotimes (i n)
(cal-tex-vspace "-1cm")
(insert "\\noindent ")
(cal-tex-weekly4-box (cal-tex-incr-date date) nil)
@@ -969,61 +955,62 @@ non-nil (note that diary entries are not shown)."
(cal-tex-nl ".2cm")
(cal-tex-weekly4-box (cal-tex-incr-date date 3) nil)
(cal-tex-weekly4-box (cal-tex-incr-date date 6) t)
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (setq date (cal-tex-incr-date date 7))
- (cal-tex-newpage))))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (setq date (cal-tex-incr-date date 7))
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
+;; TODO respect cal-tex-daily-start,end?
+;; Using different numbers of hours will probably break some layouts.
(defun cal-tex-weekly4-box (date weekend)
"Make one box for DATE, different if WEEKEND.
-Uses the 24-hour clock if `cal-tex-24' is non-nil."
- (let* (
- (day (extract-calendar-day date))
- (month (extract-calendar-month date))
- (year (extract-calendar-year date))
- (dayname (cal-tex-LaTeXify-string (calendar-day-name date)))
- (date1 (cal-tex-incr-date date))
- (day1 (extract-calendar-day date1))
- (month1 (extract-calendar-month date1))
- (year1 (extract-calendar-year date1))
- (dayname1 (cal-tex-LaTeXify-string (calendar-day-name date1)))
- )
+Uses the 24-hour clock if `cal-tex-24' is non-nil. Note that the hours
+shown are hard-coded to 8-12, 13-17."
+ (let* ((day (extract-calendar-day date))
+ (month (extract-calendar-month date))
+ (year (extract-calendar-year date))
+ (dayname (cal-tex-LaTeXify-string (calendar-day-name date)))
+ (date1 (cal-tex-incr-date date))
+ (day1 (extract-calendar-day date1))
+ (month1 (extract-calendar-month date1))
+ (year1 (extract-calendar-year date1))
+ (dayname1 (cal-tex-LaTeXify-string (calendar-day-name date1))))
(cal-tex-b-framebox "8cm" "l")
(cal-tex-b-parbox "b" "7.5cm")
- (insert (format "{\\Large\\bf %s,} %s/%s/%s\\\\\n" dayname month day year))
+ (insert (format "\\textbf{\\Large %s,} %s/%s/%s\\\\\n"
+ dayname month day year))
(cal-tex-rule "0pt" "7.5cm" ".5mm")
(cal-tex-nl)
- (if (not weekend)
- (progn
- (calendar-for-loop i from 8 to 12 do
- (insert (format "{\\large\\sf %d}\\\\\n" i)))
- (calendar-for-loop i from 1 to 5 do
- (insert (format "{\\large\\sf %d}\\\\\n"
- (if cal-tex-24 (+ i 12) i))))))
+ (unless weekend
+ (dotimes (i 5)
+ (insert (format "\\textsf{\\large %d}\\\\\n" (+ i 8))))
+ (dotimes (i 5)
+ (insert (format "\\textsf{\\large %d}\\\\\n"
+ (if cal-tex-24
+ (+ i 13) ; 13-17 incl
+ (1+ i)))))) ; 1-5 incl
(cal-tex-nl ".5cm")
- (if weekend
- (progn
- (cal-tex-vspace "1cm")
- (insert "\\ \\vfill")
- (insert (format "{\\Large\\bf %s,} %s/%s/%s\\\\\n"
- dayname1 month1 day1 year1))
- (cal-tex-rule "0pt" "7.5cm" ".5mm")
- (cal-tex-nl "1.5cm")
- (cal-tex-vspace "1cm")))
+ (when weekend
+ (cal-tex-vspace "1cm")
+ (insert "\\ \\vfill")
+ (insert (format "\\textbf{\\Large %s,} %s/%s/%s\\\\\n"
+ dayname1 month1 day1 year1))
+ (cal-tex-rule "0pt" "7.5cm" ".5mm")
+ (cal-tex-nl "1.5cm")
+ (cal-tex-vspace "1cm"))
(cal-tex-e-parbox)
(cal-tex-e-framebox)
(cal-tex-hspace "1cm")))
(defun cal-tex-cursor-filofax-2week (&optional arg)
"Two-weeks-at-a-glance Filofax style calendar for week cursor is in.
-Optional prefix argument specifies number of weeks (default 1).
+Optional prefix argument ARG specifies number of weeks (default 1).
The calendar shows holiday and diary entries if
`cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
calendar-week-start-day
@@ -1032,17 +1019,15 @@ The calendar shows holiday and diary entries if
(month (extract-calendar-month date))
(year (extract-calendar-year date))
(day (extract-calendar-day date))
+ (d1 (calendar-absolute-from-gregorian date))
+ (d2 (+ (* 7 n) d1))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian date)
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date)))))
+ (cal-tex-list-holidays d1 d2)))
(diary-list (if cal-tex-diary
(cal-tex-list-diary-entries
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date))))))
+ ;; FIXME d1?
+ (calendar-absolute-from-gregorian (list month 1 year))
+ d2))))
(cal-tex-preamble "twoside")
(cal-tex-cmd "\\textwidth 3.25in")
(cal-tex-cmd "\\textheight 6.5in")
@@ -1073,58 +1058,53 @@ The calendar shows holiday and diary entries if
")
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}")
- (calendar-for-loop i from 1 to n do
- (if (= (mod i 2) 1)
- (insert "\\righthead")
- (insert "\\lefthead"))
- (cal-tex-arg
- (let ((d (cal-tex-incr-date date 6)))
- (if (= (extract-calendar-month date)
- (extract-calendar-month d))
- (format "%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
- (extract-calendar-year date))
- (if (= (extract-calendar-year date)
- (extract-calendar-year d))
- (format "%s---%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
- (cal-tex-month-name
- (extract-calendar-month d))
- (extract-calendar-year date))
+ (dotimes (i n)
+ (if (zerop (mod i 2))
+ (insert "\\righthead")
+ (insert "\\lefthead"))
+ (cal-tex-arg
+ (let ((d (cal-tex-incr-date date 6)))
+ (if (= (extract-calendar-month date)
+ (extract-calendar-month d))
+ (format "%s %s"
+ (cal-tex-month-name (extract-calendar-month date))
+ (extract-calendar-year date))
+ (if (= (extract-calendar-year date)
+ (extract-calendar-year d))
+ (format "%s---%s %s"
+ (cal-tex-month-name (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month d))
+ (extract-calendar-year date))
(format "%s %s---%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month date))
(extract-calendar-year date)
(cal-tex-month-name (extract-calendar-month d))
(extract-calendar-year d))))))
- (insert "%\n")
- (calendar-for-loop j from 1 to 7 do
- (if (= (mod i 2) 1)
- (insert "\\rightday")
- (insert "\\leftday"))
- (cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date)))
- (cal-tex-arg (int-to-string (extract-calendar-day date)))
- (cal-tex-arg (cal-tex-latexify-list diary-list date))
- (cal-tex-arg (cal-tex-latexify-list holidays date))
- (cal-tex-arg (eval cal-tex-daily-string))
- (insert "%\n")
- (setq date (cal-tex-incr-date date)))
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (cal-tex-newpage))))
+ (insert "%\n")
+ (dotimes (jdummy 7)
+ (if (zerop (mod i 2))
+ (insert "\\rightday")
+ (insert "\\leftday"))
+ (cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date)))
+ (cal-tex-arg (int-to-string (extract-calendar-day date)))
+ (cal-tex-arg (cal-tex-latexify-list diary-list date))
+ (cal-tex-arg (cal-tex-latexify-list holidays date))
+ (cal-tex-arg (eval cal-tex-daily-string))
+ (insert "%\n")
+ (setq date (cal-tex-incr-date date)))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
(defun cal-tex-cursor-filofax-week (&optional arg)
"One-week-at-a-glance Filofax style calendar for week indicated by cursor.
-Optional prefix argument specifies number of weeks (default 1),
+Optional prefix argument ARG specifies number of weeks (default 1),
starting on Mondays. The calendar shows holiday and diary entries
if `cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
1
@@ -1133,17 +1113,15 @@ if `cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(month (extract-calendar-month date))
(year (extract-calendar-year date))
(day (extract-calendar-day date))
+ (d1 (calendar-absolute-from-gregorian date))
+ (d2 (+ (* 7 n) d1))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian date)
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date)))))
+ (cal-tex-list-holidays d1 d2)))
(diary-list (if cal-tex-diary
(cal-tex-list-diary-entries
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date))))))
+ ;; FIXME d1?
+ (calendar-absolute-from-gregorian (list month 1 year))
+ d2))))
(cal-tex-preamble "twoside")
(cal-tex-cmd "\\textwidth 3.25in")
(cal-tex-cmd "\\textheight 6.5in")
@@ -1183,32 +1161,28 @@ if `cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}\\ ")
(cal-tex-newpage)
- (calendar-for-loop i from 1 to n do
+ (dotimes (i n)
(insert "\\lefthead")
(cal-tex-arg
(let ((d (cal-tex-incr-date date 2)))
(if (= (extract-calendar-month date)
(extract-calendar-month d))
(format "%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month date))
(extract-calendar-year date))
(if (= (extract-calendar-year date)
(extract-calendar-year d))
(format "%s---%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
- (cal-tex-month-name
- (extract-calendar-month d))
+ (cal-tex-month-name (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month d))
(extract-calendar-year date))
(format "%s %s---%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month date))
(extract-calendar-year date)
(cal-tex-month-name (extract-calendar-month d))
(extract-calendar-year d))))))
(insert "%\n")
- (calendar-for-loop j from 1 to 3 do
+ (dotimes (jdummy 3)
(insert "\\leftday")
(cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date)))
(cal-tex-arg (int-to-string (extract-calendar-day date)))
@@ -1225,25 +1199,21 @@ if `cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(if (= (extract-calendar-month date)
(extract-calendar-month d))
(format "%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month date))
(extract-calendar-year date))
(if (= (extract-calendar-year date)
(extract-calendar-year d))
(format "%s---%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
- (cal-tex-month-name
- (extract-calendar-month d))
+ (cal-tex-month-name (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month d))
(extract-calendar-year date))
(format "%s %s---%s %s"
- (cal-tex-month-name
- (extract-calendar-month date))
+ (cal-tex-month-name (extract-calendar-month date))
(extract-calendar-year date)
(cal-tex-month-name (extract-calendar-month d))
(extract-calendar-year d))))))
(insert "%\n")
- (calendar-for-loop j from 1 to 2 do
+ (dotimes (jdummy 2)
(insert "\\rightday")
(cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date)))
(cal-tex-arg (int-to-string (extract-calendar-day date)))
@@ -1252,7 +1222,7 @@ if `cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(cal-tex-arg (eval cal-tex-daily-string))
(insert "%\n")
(setq date (cal-tex-incr-date date)))
- (calendar-for-loop j from 1 to 2 do
+ (dotimes (jdummy 2)
(insert "\\weekend")
(cal-tex-arg (cal-tex-LaTeXify-string (calendar-day-name date)))
(cal-tex-arg (int-to-string (extract-calendar-day date)))
@@ -1261,21 +1231,20 @@ if `cal-tex-holidays' and `cal-tex-diary', respectively, are non-nil."
(cal-tex-arg (eval cal-tex-daily-string))
(insert "%\n")
(setq date (cal-tex-incr-date date)))
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (cal-tex-newpage))))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
(defun cal-tex-cursor-filofax-daily (&optional arg)
"Day-per-page Filofax style calendar for week indicated by cursor.
-Optional prefix argument specifies number of weeks (default 1),
+Optional prefix argument ARG specifies number of weeks (default 1),
starting on Mondays. The calendar shows holiday and diary
entries if `cal-tex-holidays' and `cal-tex-diary', respectively,
are non-nil. Pages are ruled if `cal-tex-rules' is non-nil."
(interactive "p")
- (let* ((n (if arg arg 1))
+ (let* ((n (or arg 1))
(date (calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
1
@@ -1284,17 +1253,15 @@ are non-nil. Pages are ruled if `cal-tex-rules' is non-nil."
(month (extract-calendar-month date))
(year (extract-calendar-year date))
(day (extract-calendar-day date))
+ (d1 (calendar-absolute-from-gregorian date))
+ (d2 (+ (* 7 n) d1))
(holidays (if cal-tex-holidays
- (cal-tex-list-holidays
- (calendar-absolute-from-gregorian date)
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date)))))
+ (cal-tex-list-holidays d1 d2)))
(diary-list (if cal-tex-diary
(cal-tex-list-diary-entries
- (calendar-absolute-from-gregorian
- (list month 1 year))
- (+ (* 7 n)
- (calendar-absolute-from-gregorian date))))))
+ ;; FIXME d1?
+ (calendar-absolute-from-gregorian (list month 1 year))
+ d2))))
(cal-tex-preamble "twoside")
(cal-tex-cmd "\\textwidth 3.25in")
(cal-tex-cmd "\\textheight 6.5in")
@@ -1337,24 +1304,28 @@ are non-nil. Pages are ruled if `cal-tex-rules' is non-nil."
")
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}")
- (calendar-for-loop i from 1 to n do
- (calendar-for-loop j from 1 to 5 do
- (let ((odd (/= 0 (% j 2))))
- (insert (if odd "\\righthead" "\\lefthead"))
- (cal-tex-arg (calendar-date-string date))
- (insert "%\n")
- (insert (if odd "\\rightday" "\\leftday")))
- (cal-tex-arg (cal-tex-latexify-list diary-list date))
- (cal-tex-arg (cal-tex-latexify-list holidays date "\\\\" t))
- (cal-tex-arg (eval cal-tex-daily-string))
- (insert "%\n")
- (if cal-tex-rules
- (insert "\\linesfill\n")
- (insert "\\vfill\\noindent\\rule{\\textwidth}{0.3pt}\\\\%\n"))
- (cal-tex-newpage)
- (setq date (cal-tex-incr-date date)))
+ (dotimes (i n)
+ (dotimes (j 4)
+ (let ((even (zerop (% j 2))))
+ (insert (if even
+ "\\righthead"
+ "\\lefthead"))
+ (cal-tex-arg (calendar-date-string date))
+ (insert "%\n")
+ (insert (if even
+ "\\rightday"
+ "\\leftday")))
+ (cal-tex-arg (cal-tex-latexify-list diary-list date))
+ (cal-tex-arg (cal-tex-latexify-list holidays date "\\\\" t))
+ (cal-tex-arg (eval cal-tex-daily-string))
+ (insert "%\n")
+ (if cal-tex-rules
+ (insert "\\linesfill\n")
+ (insert "\\vfill\\noindent\\rule{\\textwidth}{0.3pt}\\\\%\n"))
+ (cal-tex-newpage)
+ (setq date (cal-tex-incr-date date)))
(insert "%\n")
- (calendar-for-loop j from 1 to 2 do
+ (dotimes (jdummy 2)
(insert "\\lefthead")
(cal-tex-arg (calendar-date-string date))
(insert "\\weekend")
@@ -1366,12 +1337,11 @@ are non-nil. Pages are ruled if `cal-tex-rules' is non-nil."
(insert "\\linesfill\n")
(insert "\\vfill"))
(setq date (cal-tex-incr-date date)))
- (if (not cal-tex-rules)
+ (or cal-tex-rules
(insert "\\noindent\\rule{\\textwidth}{0.3pt}\\\\%\n"))
- (if (/= i n)
- (progn
- (run-hooks 'cal-tex-week-hook)
- (cal-tex-newpage))))
+ (unless (= i (1- n))
+ (run-hooks 'cal-tex-week-hook)
+ (cal-tex-newpage)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
@@ -1382,23 +1352,24 @@ are non-nil. Pages are ruled if `cal-tex-rules' is non-nil."
(defun cal-tex-cursor-day (&optional arg)
"Make a buffer with LaTeX commands for the day cursor is on.
-Optional prefix argument specifies number of days."
+Optional prefix argument ARG specifies number of days. The calendar shows
+the hours between `cal-tex-daily-start' and `cal-tex-daily-end', using
+the 24-hour clock if `cal-tex-24' is non-nil."
(interactive "p")
- (let ((n (if arg arg 1))
+ (let ((n (or arg 1))
(date (calendar-absolute-from-gregorian (calendar-cursor-to-date t))))
(cal-tex-preamble "12pt")
- (cal-tex-cmd "\\textwidth 6.5in")
+ (cal-tex-cmd "\\textwidth 6.5in")
(cal-tex-cmd "\\textheight 10.5in")
(cal-tex-b-document)
(cal-tex-cmd "\\pagestyle{empty}")
- (calendar-for-loop i from 1 to n do
+ (dotimes (i n)
(cal-tex-vspace "-1.7in")
(cal-tex-daily-page (calendar-gregorian-from-absolute date))
(setq date (1+ date))
- (if (/= i n)
- (progn
- (cal-tex-newpage)
- (run-hooks 'cal-tex-daily-hook))))
+ (unless (= i (1- n))
+ (cal-tex-newpage)
+ (run-hooks 'cal-tex-daily-hook)))
(cal-tex-end-document)
(run-hooks 'cal-tex-hook)))
@@ -1407,8 +1378,8 @@ Optional prefix argument specifies number of days."
Uses the 24-hour clock if `cal-tex-24' is non-nil. Produces
hourly sections for the period specified by `cal-tex-daily-start'
and `cal-tex-daily-end'."
- (let* ((hour)
- (month-name (cal-tex-month-name (extract-calendar-month date))))
+ (let ((month-name (cal-tex-month-name (extract-calendar-month date)))
+ hour)
(cal-tex-banner "cal-tex-daily-page")
(cal-tex-b-makebox "4cm" "l")
(cal-tex-b-parbox "b" "3.8cm")
@@ -1434,7 +1405,7 @@ and `cal-tex-daily-end'."
(setq hour (if cal-tex-24
i
(mod i 12)))
- (if (= 0 hour) (setq hour 12))
+ (if (zerop hour) (setq hour 12))
(cal-tex-b-makebox "1cm" "c")
(cal-tex-arg (number-to-string hour))
(cal-tex-e-makebox)
@@ -1475,47 +1446,50 @@ and `cal-tex-daily-end'."
(defun cal-tex-mini-calendar (month year name width height &optional ptsize colsep)
"Produce mini-calendar for MONTH, YEAR in macro NAME with WIDTH and HEIGHT.
-Optional PTSIZE gives the point ptsize; scriptsize is the default. Optional
-COLSEP gives the column separation; 1mm is the default."
- (let* ((blank-days;; at start of month
- (mod
- (- (calendar-day-of-week (list month 1 year))
- calendar-week-start-day)
- 7))
- (last (calendar-last-day-of-month month year))
- (colsep (if colsep colsep "1mm"))
- (str (concat "\\def\\" name "{\\hbox to" width "{%\n"
- "\\vbox to" height "{%\n"
- "\\vfil \\hbox to" width "{%\n"
- "\\hfil\\"
- (if ptsize ptsize "scriptsize")
- "\\begin{tabular}"
- "{@{\\hspace{0mm}}r@{\\hspace{" colsep
- "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep
- "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep
- "}}r@{\\hspace{" colsep "}}r@{\\hspace{0mm}}}%\n"
- "\\multicolumn{7}{c}{"
- (cal-tex-month-name month)
- " "
- (int-to-string year)
- "}\\\\[1mm]\n")))
- (calendar-for-loop i from 0 to 6 do
+Optional string PTSIZE gives the point size (default \"scriptsize\").
+Optional string COLSEP gives the column separation (default \"1mm\")."
+ (or colsep (setq colsep "1mm"))
+ (or ptsize (setq ptsize "scriptsize"))
+ (let ((blank-days ; at start of month
+ (mod
+ (- (calendar-day-of-week (list month 1 year))
+ calendar-week-start-day)
+ 7))
+ (last (calendar-last-day-of-month month year))
+ (str (concat "\\def\\" name "{\\hbox to" width "{%\n"
+ "\\vbox to" height "{%\n"
+ "\\vfil \\hbox to" width "{%\n"
+ "\\hfil\\" ptsize
+ "\\begin{tabular}"
+ "{@{\\hspace{0mm}}r@{\\hspace{" colsep
+ "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep
+ "}}r@{\\hspace{" colsep "}}r@{\\hspace{" colsep
+ "}}r@{\\hspace{" colsep "}}r@{\\hspace{0mm}}}%\n"
+ "\\multicolumn{7}{c}{"
+ (cal-tex-month-name month)
+ " "
+ (int-to-string year)
+ "}\\\\[1mm]\n")))
+ (dotimes (i 7)
(setq str
(concat str
(cal-tex-LaTeXify-string
(substring (aref calendar-day-name-array
(mod (+ calendar-week-start-day i) 7))
+
0 2))
- (if (/= i 6)
- " & "
- "\\\\[0.7mm]\n"))))
- (calendar-for-loop i from 1 to blank-days do
+ (if (= i 6)
+ "\\\\[0.7mm]\n"
+ " & "))))
+ (dotimes (idummy blank-days)
(setq str (concat str " & ")))
- (calendar-for-loop i from 1 to last do
- (setq str (concat str (int-to-string i)))
- (setq str (concat str (if (zerop (mod (+ i blank-days) 7))
- (if (/= i last) "\\\\[0.5mm]\n" "")
- " & "))))
+ (dotimes (i last)
+ (setq str (concat str (int-to-string (1+ i)))
+ str (concat str (if (zerop (mod (+ i 1 blank-days) 7))
+ (if (= i (1- last))
+ ""
+ "\\\\[0.5mm]\n")
+ " & "))))
(setq str (concat str "\n\\end{tabular}\\hfil}\\vfil}}}%\n"))
str))
@@ -1527,40 +1501,38 @@ COLSEP gives the column separation; 1mm is the default."
"The date of the day following DATE.
If optional N is given, the date of N days after DATE."
(calendar-gregorian-from-absolute
- (+ (if n n 1) (calendar-absolute-from-gregorian date))))
+ (+ (or n 1) (calendar-absolute-from-gregorian date))))
(defun cal-tex-latexify-list (date-list date &optional separator final-separator)
- "Return string with concatenated, LaTeXified entries in DATE-LIST for DATE.
+ "Return string with concatenated, LaTeX-ified entries in DATE-LIST for DATE.
Use double backslash as a separator unless optional SEPARATOR is given.
If resulting string is not empty, put separator at end if optional
-FINAL-SEPARATOR is t."
- (let* ((sep (if separator separator "\\\\"))
- (result
- (mapconcat '(lambda (x) (cal-tex-LaTeXify-string x))
- (let ((result)
- (p date-list))
- (while p
- (and (car (car p))
- (calendar-date-equal date (car (car p)))
- (setq result (cons (car (cdr (car p))) result)))
- (setq p (cdr p)))
- (reverse result))
- sep)))
- (if (and final-separator (not (string-equal result "")))
- (concat result sep)
- result)))
+FINAL-SEPARATOR is non-nil."
+ (or separator (setq separator "\\\\"))
+ (let (result)
+ (setq result
+ (mapconcat (lambda (x) (cal-tex-LaTeXify-string x))
+ (dolist (d date-list (reverse result))
+ (and (car d)
+ (calendar-date-equal date (car d))
+ (setq result (cons (cadr d) result))))
+ separator))
+ (if (and final-separator
+ (not (string-equal result "")))
+ (concat result separator)
+ result)))
(defun cal-tex-previous-month (date)
"Return the date of the first day in the month previous to DATE."
- (let* ((month (extract-calendar-month date))
- (year (extract-calendar-year date)))
+ (let ((month (extract-calendar-month date))
+ (year (extract-calendar-year date)))
(increment-calendar-month month year -1)
(list month 1 year)))
(defun cal-tex-next-month (date)
- "Return the date of the first day in the month following DATE."
- (let* ((month (extract-calendar-month date))
- (year (extract-calendar-year date)))
+ "Return the date of the first day in the month following DATE."
+ (let ((month (extract-calendar-month date))
+ (year (extract-calendar-year date)))
(increment-calendar-month month year 1)
(list month 1 year)))
@@ -1576,40 +1548,39 @@ informative header, and run HOOK."
(latex-mode)
(pop-to-buffer cal-tex-buffer)
(goto-char (point-min))
- (cal-tex-comment " This buffer was produced by cal-tex.el.")
- (cal-tex-comment " To print a calendar, type")
- (cal-tex-comment " M-x tex-buffer RET")
- (cal-tex-comment " M-x tex-print RET")
- (goto-char (point-min)))
+ ;; FIXME auctex equivalents?
+ (cal-tex-comment
+ (format "\tThis buffer was produced by cal-tex.el.
+\tTo print a calendar, type
+\t\tM-x tex-buffer RET
+\t\tM-x tex-print RET")))
(defun cal-tex-insert-preamble (weeks landscape size &optional append)
- "Initialize the output buffer.
-Select the output buffer, and insert the preamble for a calendar of
-WEEKS weeks. Insert code for landscape mode if LANDSCAPE is true.
-Use pointsize SIZE. Optional argument APPEND, if t, means add to end of
-without erasing current contents."
+ "Initialize the output LaTeX calendar buffer, `cal-tex-buffer'.
+Select the output buffer, and insert the preamble for a calendar
+of WEEKS weeks. Insert code for landscape mode if LANDSCAPE is
+non-nil. Use pointsize SIZE. Optional argument APPEND, if
+non-nil, means add to end of buffer without erasing current contents."
(let ((width "18cm")
(height "24cm"))
- (if landscape
- (progn
- (setq width "24cm")
- (setq height "18cm")))
- (if (not append)
- (progn
- (cal-tex-preamble size)
- (if (not landscape)
- (progn
- (cal-tex-cmd "\\oddsidemargin -1.75cm")
- (cal-tex-cmd "\\def\\holidaymult{.06}"))
- (cal-tex-cmd "\\special{landscape}")
- (cal-tex-cmd "\\textwidth 9.5in")
- (cal-tex-cmd "\\textheight 7in")
- (cal-tex-comment)
- (cal-tex-cmd "\\def\\holidaymult{.08}"))
- (cal-tex-cmd cal-tex-caldate)
- (cal-tex-cmd cal-tex-myday)
- (cal-tex-b-document)
- (cal-tex-cmd "\\pagestyle{empty}")))
+ (when landscape
+ (setq width "24cm"
+ height "18cm"))
+ (unless append
+ (cal-tex-preamble size)
+ (if (not landscape)
+ (progn
+ (cal-tex-cmd "\\oddsidemargin -1.75cm")
+ (cal-tex-cmd "\\def\\holidaymult{.06}"))
+ (cal-tex-cmd "\\special{landscape}")
+ (cal-tex-cmd "\\textwidth 9.5in")
+ (cal-tex-cmd "\\textheight 7in")
+ (cal-tex-comment)
+ (cal-tex-cmd "\\def\\holidaymult{.08}"))
+ (cal-tex-cmd cal-tex-caldate)
+ (cal-tex-cmd cal-tex-myday)
+ (cal-tex-b-document)
+ (cal-tex-cmd "\\pagestyle{empty}"))
(cal-tex-cmd "\\setlength{\\cellwidth}" width)
(insert (format "\\setlength{\\cellwidth}{%f\\cellwidth}\n"
(/ 1.1 (length cal-tex-which-days))))
@@ -1619,10 +1590,12 @@ without erasing current contents."
(cal-tex-cmd "\\ \\par")
(cal-tex-vspace "-3cm")))
-(defvar cal-tex-LaTeX-subst-list
+(defconst cal-tex-LaTeX-subst-list
'(("\"". "``")
- ("\"". "''");; Quote changes meaning when list is reversed.
- ("@" . "\\verb|@|")
+ ("\"". "''") ; quote changes meaning when list is reversed
+ ;; Don't think this is necessary, and in any case, does not work:
+ ;; "LaTeX Error: \verb illegal in command argument".
+;;; ("@" . "\\verb|@|")
("&" . "\\&")
("%" . "\\%")
("$" . "\\$")
@@ -1632,8 +1605,8 @@ without erasing current contents."
("}" . "\\}")
("<" . "$<$")
(">" . "$>$")
- ("\n" . "\\ \\\\")) ;\\ needed for e.g \begin{center}\n AA\end{center}
- "List of symbols and their replacements.")
+ ("\n" . "\\ \\\\")) ; \\ needed for e.g \begin{center}\n AA\end{center}
+ "Alist of symbols and their LaTeX replacements.")
(defun cal-tex-LaTeXify-string (string)
"Protect special characters in STRING from LaTeX."
@@ -1643,23 +1616,29 @@ without erasing current contents."
(tail string)
(list cal-tex-LaTeX-subst-list))
(while (not (string-equal tail ""))
- (let* ((ch (substring tail 0 1))
+ (let* ((ch (substring-no-properties tail 0 1))
(pair (assoc ch list)))
(if (and pair (string-equal ch "\""))
- (setq list (reverse list)));; Quote changes meaning each time.
- (setq tail (substring tail 1))
- (setq head (concat head (if pair (cdr pair) ch)))))
+ (setq list (reverse list))) ; quote changes meaning each time
+ (setq tail (substring-no-properties tail 1)
+ head (concat head (if pair (cdr pair) ch)))))
head)))
(defun cal-tex-month-name (month)
"The name of MONTH, LaTeXified."
(cal-tex-LaTeXify-string (calendar-month-name month)))
-(defun cal-tex-hfill () "Insert hfill." (insert "\\hfill"))
+(defun cal-tex-hfill ()
+ "Insert hfill."
+ (insert "\\hfill"))
-(defun cal-tex-newpage () "Insert newpage." (insert "\\newpage%\n"))
+(defun cal-tex-newpage ()
+ "Insert newpage."
+ (insert "\\newpage%\n"))
-(defun cal-tex-noindent () "Insert noindent." (insert "\\noindent"))
+(defun cal-tex-noindent ()
+ "Insert noindent."
+ (insert "\\noindent"))
(defun cal-tex-vspace (space)
"Insert vspace command to move SPACE vertically."
@@ -1672,37 +1651,32 @@ without erasing current contents."
(cal-tex-comment))
(defun cal-tex-comment (&optional comment)
- "Insert % at end of line, include COMMENT if present, and move
- to next line."
- (insert "% ")
- (if comment
- (insert comment))
- (insert "\n"))
+ "Insert `% ', followed by optional string COMMENT, followed by newline.
+COMMENT may contain newlines, which are prefixed by `% ' in the output."
+ (insert (format "%% %s\n"
+ (if comment
+ (replace-regexp-in-string "\n" "\n% " comment)
+ ""))))
(defun cal-tex-banner (comment)
- "Insert the COMMENT separated by blank lines."
- (cal-tex-comment)
- (cal-tex-comment)
- (cal-tex-comment (concat "\t\t\t" comment))
- (cal-tex-comment))
-
+ "Insert string COMMENT, separated by blank lines."
+ (cal-tex-comment (format "\n\n\n\t\t\t%s\n" comment)))
(defun cal-tex-nl (&optional skip comment)
"End a line with \\. If SKIP, then add that much spacing.
- Add COMMENT if present"
- (insert "\\\\")
- (if skip
- (insert "[" skip "]"))
+Add trailing COMMENT if present."
+ (insert (format "\\\\%s"
+ (if skip
+ (format "[%s]" skip)
+ "")))
(cal-tex-comment comment))
(defun cal-tex-arg (&optional text)
- "Insert optional TEXT surrounded by braces."
- (insert "{")
- (if text (insert text))
- (insert "}"))
+ "Insert a brace {} pair containing the optional string TEXT."
+ (insert (format "{%s}" (or text ""))))
(defun cal-tex-cmd (cmd &optional arg)
- "Insert LaTeX CMD, with optional ARG, and end with %"
+ "Insert LaTeX CMD, with optional argument ARG, and end with %."
(insert cmd)
(cal-tex-arg arg)
(cal-tex-comment))
@@ -1740,15 +1714,15 @@ without erasing current contents."
(cal-tex-comment))
(defun cal-tex-e-parbox (&optional height)
- "Insert end of parbox. Force it to be a given HEIGHT."
+ "Insert end of parbox. Optionally, force it to be a given HEIGHT."
(cal-tex-comment)
(if height
(cal-tex-rule "0mm" "0mm" height))
(insert "}")
(cal-tex-comment "end parbox"))
-(defun cal-tex-b-framebox ( width position )
- "Insert framebox with parameters WIDTH and POSITION (clr)."
+(defun cal-tex-b-framebox (width position)
+ "Insert framebox with parameters WIDTH and POSITION (clr)."
(insert "\\framebox[" width "][" position "]{" )
(cal-tex-comment))
@@ -1760,7 +1734,7 @@ without erasing current contents."
(defun cal-tex-b-makebox ( width position )
- "Insert makebox with parameters WIDTH and POSITION (clr)."
+ "Insert makebox with parameters WIDTH and POSITION (clr)."
(insert "\\makebox[" width "][" position "]{" )
(cal-tex-comment))
@@ -1780,36 +1754,37 @@ without erasing current contents."
;;;
(defun cal-tex-em (string)
- "Insert STRING in bf font."
- (insert "{\\em " string "}"))
+ "Insert STRING in italic font."
+ (insert "\\textit{" string "}"))
(defun cal-tex-bf (string)
"Insert STRING in bf font."
- (insert "{\\bf " string "}"))
+ (insert "\\textbf{ " string "}"))
(defun cal-tex-scriptsize (string)
"Insert STRING in scriptsize font."
(insert "{\\scriptsize " string "}"))
(defun cal-tex-huge (string)
- "Insert STRING in huge size."
+ "Insert STRING in huge font."
(insert "{\\huge " string "}"))
(defun cal-tex-Huge (string)
- "Insert STRING in Huge size."
+ "Insert STRING in Huge font."
(insert "{\\Huge " string "}"))
(defun cal-tex-Huge-bf (string)
- "Insert STRING in Huge bf size."
- (insert "{\\Huge\\bf " string "}"))
+ "Insert STRING in Huge bf font."
+ (insert "\\textbf{\\Huge " string "}"))
(defun cal-tex-large (string)
- "Insert STRING in large size."
+ "Insert STRING in large font."
(insert "{\\large " string "}"))
(defun cal-tex-large-bf (string)
- "Insert STRING in large bf size."
- (insert "{\\large\\bf " string "}"))
+ "Insert STRING in large bf font."
+ (insert "\\textbf{\\large " string "}"))
+
(provide 'cal-tex)
diff --git a/lisp/calendar/cal-x.el b/lisp/calendar/cal-x.el
index b6a77bb5174..24b1f896179 100644
--- a/lisp/calendar/cal-x.el
+++ b/lisp/calendar/cal-x.el
@@ -164,5 +164,5 @@ This function requires a display capable of multiple frames, else
(provide 'cal-x)
-;;; arch-tag: c6dbddca-ae84-442d-87fc-244b76e38e17
+;; arch-tag: c6dbddca-ae84-442d-87fc-244b76e38e17
;;; cal-x.el ends here
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index 330cf8521f3..c252341526a 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -823,7 +823,7 @@ describes the style of such diary entries."
:type 'hook
:options '(list-hebrew-diary-entries
list-islamic-diary-entries
- list-bahai-diary-entries)
+ diary-bahai-list-entries)
:group 'diary)
;;;###autoload
@@ -855,7 +855,7 @@ describes the style of such diary entries."
:type 'hook
:options '(mark-hebrew-diary-entries
mark-islamic-diary-entries
- mark-bahai-diary-entries)
+ diary-bahai-mark-entries)
:group 'diary)
;;;###autoload
@@ -1212,11 +1212,11 @@ of `general-holidays', `local-holidays' `christian-holidays',
you can eliminate unwanted categories of holidays.
The aforementioned variables control the holiday choices offered
-by the function `list-holidays' when it is called interactively.
+by the function `holiday-list' when it is called interactively.
They also initialize the default value of `calendar-holidays',
which is the default list of holidays used by the function
-`list-holidays' in the non-interactive case. Note that these
+`holiday-list' in the non-interactive case. Note that these
variables have no effect on `calendar-holidays' after it has been
set (e.g. after the calendar is loaded). In that case, customize
`calendar-holidays' directly.
@@ -1343,7 +1343,9 @@ MON defaults to `displayed-month'. YR defaults to `displayed-year'."
(cons mon yr))
(defmacro calendar-for-loop (var from init to final do &rest body)
- "Execute a for loop."
+ "Execute a for loop.
+Evaluate BODY with VAR bound to successive integers from INIT to FINAL,
+inclusive."
(declare (debug (symbolp "from" form "to" form "do" body)))
`(let ((,var (1- ,init)))
(while (>= ,final (setq ,var (1+ ,var)))
@@ -1491,19 +1493,19 @@ return negative results."
"Move the cursor backward ARG years."
t)
-(autoload 'scroll-calendar-left "cal-move"
+(autoload 'calendar-scroll-left "cal-move"
"Scroll the displayed calendar left by ARG months."
t)
-(autoload 'scroll-calendar-right "cal-move"
+(autoload 'calendar-scroll-right "cal-move"
"Scroll the displayed calendar window right by ARG months."
t)
-(autoload 'scroll-calendar-left-three-months "cal-move"
+(autoload 'calendar-scroll-left-three-months "cal-move"
"Scroll the displayed calendar window left by 3*ARG months."
t)
-(autoload 'scroll-calendar-right-three-months "cal-move"
+(autoload 'calendar-scroll-right-three-months "cal-move"
"Scroll the displayed calendar window right by 3*ARG months."
t)
@@ -1614,7 +1616,7 @@ the date indicated by the cursor position in the displayed three-month
calendar."
t)
-(autoload 'list-calendar-holidays "holidays"
+(autoload 'calendar-list-holidays "holidays"
"Create a buffer containing the holidays for the current calendar window.
The holidays are those in the list `calendar-notable-days'. Returns t if any
holidays are found, nil if not."
@@ -1675,8 +1677,10 @@ to be replaced by asterisks to highlight it whenever it is in the window."
;; (calendar-read-date t) returns a date with day = nil, which is
;; not a legal date for the visible test in the diary section.
(if arg (setcar (cdr date) 1))
- (pop-to-buffer calendar-buffer)
(increment-calendar-month month year (- calendar-offset))
+ ;; Display the buffer before calling generate-calendar-window so that it
+ ;; can get a chance to adjust the window sizes to the frame size.
+ (pop-to-buffer calendar-buffer)
(generate-calendar-window month year)
(if (and view-diary-entries-initially (calendar-date-is-visible-p date))
(diary-view-entries)))
@@ -1684,7 +1688,7 @@ to be replaced by asterisks to highlight it whenever it is in the window."
(diary-window (if diary-buffer (get-buffer-window diary-buffer)))
(split-height-threshold (if diary-window 2 1000)))
(if view-calendar-holidays-initially
- (list-calendar-holidays)))
+ (calendar-list-holidays)))
(run-hooks 'initial-calendar-window-hook))
(autoload 'view-other-diary-entries "diary-lib"
@@ -1821,7 +1825,7 @@ Driven by the variable `calendar-date-display-form'.")
(autoload 'calendar-islamic-date-string "cal-islam"
"String of Islamic date of Gregorian date.")
-(autoload 'calendar-goto-bahai-date "cal-bahai"
+(autoload 'calendar-bahai-goto-date "cal-bahai"
"Move cursor to Baha'i date DATE.
Echo Baha'i date unless NOECHO is t."
t)
@@ -1951,17 +1955,17 @@ to the date indicated by point."
to the date indicated by point."
t)
-(autoload 'insert-bahai-diary-entry "cal-bahai"
+(autoload 'diary-bahai-insert-entry "cal-bahai"
"Insert a diary entry for the Baha'i date corresponding to the date
indicated by point."
t)
-(autoload 'insert-monthly-bahai-diary-entry "cal-bahai"
+(autoload 'diary-bahai-insert-monthly-entry "cal-bahai"
"Insert a monthly diary entry for the day of the Baha'i month corresponding
to the date indicated by point."
t)
-(autoload 'insert-yearly-bahai-diary-entry "cal-bahai"
+(autoload 'diary-bahai-insert-yearly-entry "cal-bahai"
"Insert an annual diary entry for the day of the Baha'i year corresponding
to the date indicated by point."
t)
@@ -2056,7 +2060,7 @@ existing output files are overwritten." t)
(defun generate-calendar-window (&optional mon yr)
"Generate the calendar window for the current date.
Or, for optional MON, YR."
- (let* ((buffer-read-only nil)
+ (let* ((inhibit-read-only t)
(today (calendar-current-date))
(month (extract-calendar-month today))
(day (extract-calendar-day today))
@@ -2068,10 +2072,8 @@ Or, for optional MON, YR."
(day-in-week (calendar-day-of-week today))
(in-calendar-window (eq (window-buffer (selected-window))
(get-buffer calendar-buffer))))
+ (generate-calendar (or mon month) (or yr year))
(update-calendar-mode-line)
- (if mon
- (generate-calendar mon yr)
- (generate-calendar month year))
(calendar-cursor-to-visible-date
(if today-visible today (list displayed-month 1 displayed-year)))
(set-buffer-modified-p nil)
@@ -2100,19 +2102,19 @@ Or, for optional MON, YR."
(defun generate-calendar (month year)
"Generate a three-month Gregorian calendar centered around MONTH, YEAR."
-;;; A negative YEAR is interpreted as BC; -1 being 1 BC, and so on.
-;;; Note that while calendars for years BC could be displayed as it
-;;; stands, almost all other calendar functions (eg holidays) would
-;;; at best have unpredictable results for such dates.
+ ;; A negative YEAR is interpreted as BC; -1 being 1 BC, and so on.
+ ;; Note that while calendars for years BC could be displayed as it
+ ;; stands, almost all other calendar functions (eg holidays) would
+ ;; at best have unpredictable results for such dates.
(if (< (+ month (* 12 (1- year))) 2)
(error "Months before January, 1 AD cannot be displayed"))
(setq displayed-month month
displayed-year year)
(erase-buffer)
(increment-calendar-month month year -1)
- (calendar-for-loop i from 0 to 2 do
- (generate-calendar-month month year (+ 5 (* 25 i)))
- (increment-calendar-month month year 1)))
+ (dotimes (i 3)
+ (generate-calendar-month month year (+ 5 (* 25 i)))
+ (increment-calendar-month month year 1)))
(defun generate-calendar-month (month year indent)
"Produce a calendar for MONTH, YEAR on the Gregorian calendar.
@@ -2133,18 +2135,18 @@ line."
indent t)
(calendar-insert-indented "" indent);; Go to proper spot
;; Use the first two characters of each day to head the columns.
- (calendar-for-loop i from 0 to 6 do
- (insert
- (let ((string
- (calendar-day-name (mod (+ calendar-week-start-day i) 7) nil t)))
- (if enable-multibyte-characters
- (truncate-string-to-width string 2)
- (substring string 0 2)))
- " "))
+ (dotimes (i 7)
+ (insert
+ (let ((string
+ (calendar-day-name (mod (+ calendar-week-start-day i) 7) nil t)))
+ (if enable-multibyte-characters
+ (truncate-string-to-width string 2)
+ (substring string 0 2)))
+ " "))
(calendar-insert-indented "" 0 t);; Force onto following line
(calendar-insert-indented "" indent);; Go to proper spot
;; Add blank days before the first of the month
- (calendar-for-loop i from 1 to blank-days do (insert " "))
+ (dotimes (idummy blank-days) (insert " "))
;; Put in the days of the month
(calendar-for-loop i from 1 to last do
(insert (format "%2d " i))
@@ -2210,9 +2212,9 @@ movement commands will not work correctly."
:type 'boolean
:group 'calendar)
-(defvar calendar-mode-map nil)
-(if calendar-mode-map
- nil
+(require 'cal-menu)
+
+(defvar calendar-mode-map
(let ((map (make-keymap)))
(suppress-keymap map)
(dolist (c '(narrow-to-region mark-word mark-sexp mark-paragraph
@@ -2220,14 +2222,14 @@ movement commands will not work correctly."
downcase-region upcase-region kill-region
copy-region-as-kill capitalize-region write-region))
(define-key map (vector 'remap c) 'calendar-not-implemented))
- (define-key map "<" 'scroll-calendar-right)
- (define-key map "\C-x<" 'scroll-calendar-right)
- (define-key map [prior] 'scroll-calendar-right-three-months)
- (define-key map "\ev" 'scroll-calendar-right-three-months)
- (define-key map ">" 'scroll-calendar-left)
- (define-key map "\C-x>" 'scroll-calendar-left)
- (define-key map [next] 'scroll-calendar-left-three-months)
- (define-key map "\C-v" 'scroll-calendar-left-three-months)
+ (define-key map "<" 'calendar-scroll-right)
+ (define-key map "\C-x<" 'calendar-scroll-right)
+ (define-key map [prior] 'calendar-scroll-right-three-months)
+ (define-key map "\ev" 'calendar-scroll-right-three-months)
+ (define-key map ">" 'calendar-scroll-left)
+ (define-key map "\C-x>" 'calendar-scroll-left)
+ (define-key map [next] 'calendar-scroll-left-three-months)
+ (define-key map "\C-v" 'calendar-scroll-left-three-months)
(define-key map "\C-b" 'calendar-backward-day)
(define-key map "\C-p" 'calendar-backward-week)
(define-key map "\e{" 'calendar-backward-month)
@@ -2248,7 +2250,7 @@ movement commands will not work correctly."
(define-key map "\e>" 'calendar-end-of-year)
(define-key map "\C-@" 'calendar-set-mark)
;; Many people are used to typing C-SPC and getting C-@.
- (define-key map [?\C- ] 'calendar-set-mark)
+ (define-key map [?\C-\s] 'calendar-set-mark)
(define-key map "\C-x\C-x" 'calendar-exchange-point-and-mark)
(define-key map "\e=" 'calendar-count-days-region)
(define-key map "gd" 'calendar-goto-date)
@@ -2257,7 +2259,7 @@ movement commands will not work correctly."
(define-key map "ga" 'calendar-goto-astro-day-number)
(define-key map "gh" 'calendar-goto-hebrew-date)
(define-key map "gi" 'calendar-goto-islamic-date)
- (define-key map "gb" 'calendar-goto-bahai-date)
+ (define-key map "gb" 'calendar-bahai-goto-date)
(define-key map "gC" 'calendar-goto-chinese-date)
(define-key map "gk" 'calendar-goto-coptic-date)
(define-key map "ge" 'calendar-goto-ethiopic-date)
@@ -2282,7 +2284,7 @@ movement commands will not work correctly."
(define-key map "." 'calendar-goto-today)
(define-key map "o" 'calendar-other-month)
(define-key map "q" 'exit-calendar)
- (define-key map "a" 'list-calendar-holidays)
+ (define-key map "a" 'calendar-list-holidays)
(define-key map "h" 'calendar-cursor-holidays)
(define-key map "x" 'mark-calendar-holidays)
(define-key map "u" 'calendar-unmark)
@@ -2300,7 +2302,7 @@ movement commands will not work correctly."
(define-key map "pa" 'calendar-print-astro-day-number)
(define-key map "ph" 'calendar-print-hebrew-date)
(define-key map "pi" 'calendar-print-islamic-date)
- (define-key map "pb" 'calendar-print-bahai-date)
+ (define-key map "pb" 'calendar-bahai-print-date)
(define-key map "pf" 'calendar-print-french-date)
(define-key map "pm" 'calendar-print-mayan-date)
(define-key map "po" 'calendar-print-other-dates)
@@ -2317,9 +2319,9 @@ movement commands will not work correctly."
(define-key map "iid" 'insert-islamic-diary-entry)
(define-key map "iim" 'insert-monthly-islamic-diary-entry)
(define-key map "iiy" 'insert-yearly-islamic-diary-entry)
- (define-key map "iBd" 'insert-bahai-diary-entry)
- (define-key map "iBm" 'insert-monthly-bahai-diary-entry)
- (define-key map "iBy" 'insert-yearly-bahai-diary-entry)
+ (define-key map "iBd" 'diary-bahai-insert-entry)
+ (define-key map "iBm" 'diary-bahai-insert-monthly-entry)
+ (define-key map "iBy" 'diary-bahai-insert-yearly-entry)
(define-key map "?" 'calendar-goto-info-node)
(define-key map "Hm" 'cal-html-cursor-month)
(define-key map "Hy" 'cal-html-cursor-year)
@@ -2336,9 +2338,26 @@ movement commands will not work correctly."
(define-key map "tfy" 'cal-tex-cursor-filofax-year)
(define-key map "ty" 'cal-tex-cursor-year)
(define-key map "tY" 'cal-tex-cursor-year-landscape)
- (setq calendar-mode-map map)
- ;; Require cal-menu after initializing calendar-mode-map because it uses it.
- (require 'cal-menu)))
+
+ (define-key map [menu-bar edit] 'undefined)
+ (define-key map [menu-bar search] 'undefined)
+ ;; This ignores the mouse-up event after the mouse-down that pops up the
+ ;; context menu. It should not be necessary because the mouse-up event
+ ;; should be eaten up by the menu-handling toolkit.
+ ;; (define-key map [mouse-2] 'ignore)
+
+ (easy-menu-define nil map nil cal-menu-moon-menu)
+ (easy-menu-define nil map nil cal-menu-diary-menu)
+ (easy-menu-define nil map nil cal-menu-holidays-menu)
+ (easy-menu-define nil map nil cal-menu-goto-menu)
+ (easy-menu-define nil map nil cal-menu-scroll-menu)
+
+ (define-key map [down-mouse-3]
+ (easy-menu-binding cal-menu-context-mouse-menu))
+ (define-key map [down-mouse-2]
+ (easy-menu-binding cal-menu-global-mouse-menu))
+
+ map))
(defun describe-calendar-mode ()
"Create a help buffer with a brief description of the `calendar-mode'."
@@ -2362,7 +2381,7 @@ movement commands will not work correctly."
'help-echo "mouse-1: previous month"
'mouse-face 'mode-line-highlight
'keymap (make-mode-line-mouse-map 'mouse-1
- 'mouse-scroll-calendar-right))
+ 'calendar-scroll-right))
"Calendar"
(concat
(propertize
@@ -2391,7 +2410,7 @@ movement commands will not work correctly."
'help-echo "mouse-1: next month"
'mouse-face 'mode-line-highlight
'keymap (make-mode-line-mouse-map
- 'mouse-1 'mouse-scroll-calendar-left)))
+ 'mouse-1 'calendar-scroll-left)))
"The mode line of the calendar buffer.
This must be a list of items that evaluate to strings--those strings are
@@ -2399,8 +2418,8 @@ evaluated and concatenated together, evenly separated by blanks. The variable
`date' is available for use as the date under (or near) the cursor; `date'
defaults to the current date if it is otherwise undefined. Here is an example
value that has the Hebrew date, the day number/days remaining in the year,
-and the ISO week/year numbers in the mode. When calendar-move-hook is set to
-'update-calendar-mode-line, these mode line shows these values for the date
+and the ISO week/year numbers in the mode. When `calendar-move-hook' is set
+to `update-calendar-mode-line', these mode line shows these values for the date
under the cursor:
(list
@@ -2416,26 +2435,7 @@ under the cursor:
(format \"ISO week %d of %d\"
(extract-calendar-month iso-date)
(extract-calendar-year iso-date)))
- \"\"))
-")
-
-(defun mouse-scroll-calendar-left (event)
- "Scroll the displayed calendar left by one month.
-Maintains the relative position of the cursor
-with respect to the calendar as well as possible."
- (interactive "e")
- (save-selected-window
- (select-window (posn-window (event-start event)))
- (scroll-calendar-left 1)))
-
-(defun mouse-scroll-calendar-right (event)
- "Scroll the displayed calendar right by one month.
-Maintains the relative position of the cursor
-with respect to the calendar as well as possible."
- (interactive "e")
- (save-selected-window
- (select-window (posn-window (event-start event)))
- (scroll-calendar-right 1)))
+ \"\"))")
(defun mouse-calendar-other-month (event)
"Display a three-month calendar centered around a specified month and year."
@@ -2472,10 +2472,14 @@ For a complete description, type \
(setq buffer-read-only t)
(setq indent-tabs-mode nil)
(update-calendar-mode-line)
- (add-hook 'activate-menubar-hook 'cal-menu-update nil t)
(make-local-variable 'calendar-mark-ring)
- (make-local-variable 'displayed-month);; Month in middle of window.
- (make-local-variable 'displayed-year) ;; Year in middle of window.
+ (make-local-variable 'displayed-month) ;; Month in middle of window.
+ (make-local-variable 'displayed-year) ;; Year in middle of window.
+ ;; Most functions only work if displayed-month and displayed-year are set,
+ ;; so let's make sure they're always set. Most likely, this will be reset
+ ;; soon in generate-calendar, but better safe than sorry.
+ (unless (boundp 'displayed-month) (setq displayed-month 1))
+ (unless (boundp 'displayed-year) (setq displayed-year 2001))
(set (make-local-variable 'font-lock-defaults)
'(calendar-font-lock-keywords t))
(run-mode-hooks 'calendar-mode-hook))
@@ -2596,7 +2600,7 @@ ERROR is t, otherwise just returns nil."
(< 2 (count-lines (point-min) (point))))
(save-excursion
(if (not (looking-at " "))
- (re-search-backward "[^0-9]"))
+ (re-search-backward "[^0-9]"))
(list month
(string-to-number (buffer-substring (1+ (point)) (+ 4 (point))))
year))
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el
index 88589c7e248..df16595f3c5 100644
--- a/lisp/calendar/diary-lib.el
+++ b/lisp/calendar/diary-lib.el
@@ -75,7 +75,7 @@ D-FILE specifies the file to use as the diary file."
(let ((diary-file d-file))
(diary-view-entries arg)))
-(autoload 'check-calendar-holidays "holidays"
+(autoload 'calendar-check-holidays "holidays"
"Check the list of holidays for any that occur on DATE.
The value returned is a list of strings of relevant holiday descriptions.
The holidays are those in the list `calendar-holidays'.")
@@ -117,13 +117,13 @@ The holidays are those in the list `calendar-holidays'.")
(autoload 'diary-bahai-date "cal-bahai"
"Baha'i calendar equivalent of date diary entry.")
-(autoload 'list-bahai-diary-entries "cal-bahai"
+(autoload 'diary-bahai-list-entries "cal-bahai"
"Add any Baha'i date entries from the diary file to `diary-entries-list'.")
-(autoload 'mark-bahai-diary-entries "cal-bahai"
+(autoload 'diary-bahai-mark-entries "cal-bahai"
"Mark days in the calendar window that have Baha'i date diary entries.")
-(autoload 'mark-bahai-calendar-date-pattern "cal-bahai"
+(autoload 'calendar-bahai-mark-date-pattern "cal-bahai"
"Mark dates in calendar window that conform to Baha'i date MONTH/DAY/YEAR.")
(autoload 'diary-hebrew-date "cal-hebrew"
@@ -461,95 +461,94 @@ If LIST-ONLY is non-nil don't modify or display the buffer, only return a list."
(set (make-local-variable 'diary-selective-display) t)
(overlay-put ol 'invisible 'diary)
(overlay-put ol 'evaporate t)))
- (calendar-for-loop
- i from 1 to number do
- (let ((month (extract-calendar-month date))
- (day (extract-calendar-day date))
- (year (extract-calendar-year date))
- (entry-found (list-sexp-diary-entries date)))
- (dolist (date-form diary-date-forms)
- (let*
- ((backup (when (eq (car date-form) 'backup)
- (setq date-form (cdr date-form))
- t))
- (dayname
- (format "%s\\|%s\\.?"
- (calendar-day-name date)
- (calendar-day-name date 'abbrev)))
- (monthname
- (format "\\*\\|%s\\|%s\\.?"
- (calendar-month-name month)
- (calendar-month-name month 'abbrev)))
- (month (concat "\\*\\|0*" (int-to-string month)))
- (day (concat "\\*\\|0*" (int-to-string day)))
- (year
- (concat
- "\\*\\|0*" (int-to-string year)
- (if abbreviated-calendar-year
- (concat "\\|" (format "%02d" (% year 100)))
- "")))
- (regexp
- (concat
- "\\(\\`\\|\^M\\|\n\\)" mark "?\\("
- (mapconcat 'eval date-form "\\)\\(?:")
- "\\)"))
- (case-fold-search t))
- (goto-char (point-min))
- (while (re-search-forward regexp nil t)
- (if backup (re-search-backward "\\<" nil t))
- (if (and (or (char-equal (preceding-char) ?\^M)
- (char-equal (preceding-char) ?\n))
- (not (looking-at " \\|\^I")))
- ;; Diary entry that consists only of date.
- (backward-char 1)
- ;; Found a nonempty diary entry--make it
- ;; visible and add it to the list.
- (setq entry-found t)
- (let ((entry-start (point))
- date-start temp)
- (re-search-backward "\^M\\|\n\\|\\`")
- (setq date-start (point))
- ;; When selective display (rather than
- ;; overlays) was used, diary file used to
- ;; start in a blank line and end in a
- ;; newline. Now that neither of these
- ;; need be true, 'move handles the latter
- ;; and 1/2 kludge the former.
- (re-search-forward
- "\^M\\|\n" nil 'move
- (if (and (bobp) (not (looking-at "\^M\\|\n")))
- 1
- 2))
- (while (looking-at " \\|\^I")
- (re-search-forward "\^M\\|\n" nil 'move))
- (unless (and (eobp) (not (bolp)))
- (backward-char 1))
- (unless list-only
- (remove-overlays date-start (point)
- 'invisible 'diary))
- (setq entry (buffer-substring entry-start (point))
- temp (diary-pull-attrs entry file-glob-attrs)
- entry (nth 0 temp))
- (add-to-diary-list
- date
- entry
- (buffer-substring
- (1+ date-start) (1- entry-start))
- (copy-marker entry-start) (nth 1 temp)))))))
- (or entry-found
- (not diary-list-include-blanks)
- (add-to-diary-list date "" "" "" ""))
- (setq date
- (calendar-gregorian-from-absolute
- (1+ (calendar-absolute-from-gregorian date))))
- (setq entry-found nil)))))
+ (dotimes (idummy number)
+ (let ((month (extract-calendar-month date))
+ (day (extract-calendar-day date))
+ (year (extract-calendar-year date))
+ (entry-found (list-sexp-diary-entries date)))
+ (dolist (date-form diary-date-forms)
+ (let*
+ ((backup (when (eq (car date-form) 'backup)
+ (setq date-form (cdr date-form))
+ t))
+ (dayname
+ (format "%s\\|%s\\.?"
+ (calendar-day-name date)
+ (calendar-day-name date 'abbrev)))
+ (monthname
+ (format "\\*\\|%s\\|%s\\.?"
+ (calendar-month-name month)
+ (calendar-month-name month 'abbrev)))
+ (month (concat "\\*\\|0*" (int-to-string month)))
+ (day (concat "\\*\\|0*" (int-to-string day)))
+ (year
+ (concat
+ "\\*\\|0*" (int-to-string year)
+ (if abbreviated-calendar-year
+ (concat "\\|" (format "%02d" (% year 100)))
+ "")))
+ (regexp
+ (concat
+ "\\(\\`\\|\^M\\|\n\\)" mark "?\\("
+ (mapconcat 'eval date-form "\\)\\(?:")
+ "\\)"))
+ (case-fold-search t))
+ (goto-char (point-min))
+ (while (re-search-forward regexp nil t)
+ (if backup (re-search-backward "\\<" nil t))
+ (if (and (or (char-equal (preceding-char) ?\^M)
+ (char-equal (preceding-char) ?\n))
+ (not (looking-at " \\|\^I")))
+ ;; Diary entry that consists only of date.
+ (backward-char 1)
+ ;; Found a nonempty diary entry--make it
+ ;; visible and add it to the list.
+ (setq entry-found t)
+ (let ((entry-start (point))
+ date-start temp)
+ (re-search-backward "\^M\\|\n\\|\\`")
+ (setq date-start (point))
+ ;; When selective display (rather than
+ ;; overlays) was used, diary file used to
+ ;; start in a blank line and end in a
+ ;; newline. Now that neither of these
+ ;; need be true, 'move handles the latter
+ ;; and 1/2 kludge the former.
+ (re-search-forward
+ "\^M\\|\n" nil 'move
+ (if (and (bobp) (not (looking-at "\^M\\|\n")))
+ 1
+ 2))
+ (while (looking-at " \\|\^I")
+ (re-search-forward "\^M\\|\n" nil 'move))
+ (unless (and (eobp) (not (bolp)))
+ (backward-char 1))
+ (unless list-only
+ (remove-overlays date-start (point)
+ 'invisible 'diary))
+ (setq entry (buffer-substring entry-start (point))
+ temp (diary-pull-attrs entry file-glob-attrs)
+ entry (nth 0 temp))
+ (add-to-diary-list
+ date
+ entry
+ (buffer-substring
+ (1+ date-start) (1- entry-start))
+ (copy-marker entry-start) (nth 1 temp)))))))
+ (or entry-found
+ (not diary-list-include-blanks)
+ (add-to-diary-list date "" "" "" ""))
+ (setq date
+ (calendar-gregorian-from-absolute
+ (1+ (calendar-absolute-from-gregorian date))))
+ (setq entry-found nil)))))
(goto-char (point-min))
(run-hooks 'nongregorian-diary-listing-hook
'list-diary-entries-hook)
(unless list-only
(if diary-display-hook
- (run-hooks 'diary-display-hook)
- (simple-diary-display)))
+ (run-hooks 'diary-display-hook)
+ (simple-diary-display)))
(run-hooks 'diary-hook)
diary-entries-list))))))
@@ -599,7 +598,7 @@ changing the variable `diary-include-string'."
(defun simple-diary-display ()
"Display the diary buffer if there are any relevant entries or holidays."
(let* ((holiday-list (if holidays-in-diary-buffer
- (check-calendar-holidays original-date)))
+ (calendar-check-holidays original-date)))
(hol-string (format "%s%s%s"
date-string
(if holiday-list ": " "")
@@ -677,7 +676,7 @@ This function is provided for optional use as the `diary-display-hook'."
(and (not (cdr diary-entries-list))
(string-equal (car (cdr (car diary-entries-list))) "")))
(let* ((holiday-list (if holidays-in-diary-buffer
- (check-calendar-holidays original-date)))
+ (calendar-check-holidays original-date)))
(msg (format "No diary entries for %s %s"
(concat date-string (if holiday-list ":" ""))
(mapconcat 'identity holiday-list "; "))))
@@ -1190,9 +1189,9 @@ A value of 0 in any position is a wildcard."
(let ((m displayed-month)
(y displayed-year))
(increment-calendar-month m y -1)
- (calendar-for-loop i from 0 to 2 do
- (mark-calendar-month m y month day year color)
- (increment-calendar-month m y 1)))))
+ (dotimes (idummy 3)
+ (mark-calendar-month m y month day year color)
+ (increment-calendar-month m y 1)))))
(defun mark-calendar-month (month year p-month p-day p-year &optional color)
"Mark dates in the MONTH/YEAR that conform to pattern P-MONTH/P_DAY/P-YEAR.
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el
index a3a12aab2e3..f6134940169 100644
--- a/lisp/calendar/holidays.el
+++ b/lisp/calendar/holidays.el
@@ -107,8 +107,10 @@ This function is suitable for execution in a .emacs file."
(calendar-current-date)))
(displayed-month (extract-calendar-month date))
(displayed-year (extract-calendar-year date)))
- (list-calendar-holidays))))
+ (calendar-list-holidays))))
+;; rms: "Emacs commands to display a list of something generally start
+;; with `list-'. Please make `list-holidays' the principal name."
;;;###autoload
(defun list-holidays (y1 y2 &optional l label)
"Display holidays for years Y1 to Y2 (inclusive).
@@ -206,19 +208,18 @@ The optional LABEL is used to label the buffer created."
(display-buffer holiday-buffer)
(message "Computing holidays...done"))))
+(defalias 'holiday-list 'list-holidays)
-(defun check-calendar-holidays (date)
+(defun calendar-check-holidays (date)
"Check the list of holidays for any that occur on DATE.
The value returned is a list of strings of relevant holiday descriptions.
-The holidays are those in the list calendar-holidays."
- (let* ((displayed-month (extract-calendar-month date))
- (displayed-year (extract-calendar-year date))
- (h (calendar-holiday-list))
- (holiday-list))
- (while h
- (if (calendar-date-equal date (car (car h)))
- (setq holiday-list (append holiday-list (cdr (car h)))))
- (setq h (cdr h)))
+The holidays are those in the list `calendar-holidays'."
+ (let ((displayed-month (extract-calendar-month date))
+ (displayed-year (extract-calendar-year date))
+ (holiday-list))
+ (dolist (h (calendar-holiday-list))
+ (if (calendar-date-equal date (car h))
+ (setq holiday-list (append holiday-list (cdr h)))))
holiday-list))
(defun calendar-cursor-holidays ()
@@ -227,7 +228,7 @@ The holidays are those in the list calendar-holidays."
(message "Checking holidays...")
(let* ((date (calendar-cursor-to-date t))
(date-string (calendar-date-string date))
- (holiday-list (check-calendar-holidays date))
+ (holiday-list (calendar-check-holidays date))
(holiday-string (mapconcat 'identity holiday-list "; "))
(msg (format "%s: %s" date-string holiday-string)))
(if (not holiday-list)
@@ -245,21 +246,19 @@ The holidays are those in the list calendar-holidays."
(display-buffer holiday-buffer)
(message "Checking holidays...done")))))
-(defun mark-calendar-holidays ()
+(defun calendar-mark-holidays ()
"Mark notable days in the calendar window."
(interactive)
(setq mark-holidays-in-calendar t)
(message "Marking holidays...")
- (let ((holiday-list (calendar-holiday-list)))
- (while holiday-list
- (mark-visible-calendar-date
- (car (car holiday-list)) calendar-holiday-marker)
- (setq holiday-list (cdr holiday-list))))
+ (dolist (holiday (calendar-holiday-list))
+ (mark-visible-calendar-date
+ (car holiday) calendar-holiday-marker))
(message "Marking holidays...done"))
-(defun list-calendar-holidays ()
+(defun calendar-list-holidays ()
"Create a buffer containing the holidays for the current calendar window.
-The holidays are those in the list calendar-notable-days. Returns t if any
+The holidays are those in the list `calendar-notable-days'. Returns t if any
holidays are found, nil if not."
(interactive)
(message "Looking up holidays...")
@@ -297,22 +296,20 @@ holidays are found, nil if not."
(defun calendar-holiday-list ()
"Form the list of holidays that occur on dates in the calendar window.
-The holidays are those in the list calendar-holidays."
- (let ((p calendar-holidays)
- (holiday-list))
- (while p
+The holidays are those in the list `calendar-holidays'."
+ (let ((holiday-list ()))
+ (dolist (p calendar-holidays)
(let* ((holidays
(if calendar-debug-sexp
(let ((stack-trace-on-error t))
- (eval (car p)))
+ (eval p))
(condition-case nil
- (eval (car p))
+ (eval p)
(error (beep)
- (message "Bad holiday list item: %s" (car p))
+ (message "Bad holiday list item: %s" p)
(sleep-for 2))))))
(if holidays
- (setq holiday-list (append holidays holiday-list))))
- (setq p (cdr p)))
+ (setq holiday-list (append holidays holiday-list)))))
(setq holiday-list (sort holiday-list 'calendar-date-compare))))
;; Below are the functions that calculate the dates of holidays; these
@@ -396,16 +393,16 @@ date. If date is nil, or if the date is not visible, there is no holiday."
(let ((m displayed-month)
(y displayed-year))
(increment-calendar-month m y -1)
- (filter-visible-calendar-holidays
- (append
+ (holiday-filter-visible-calendar
+ (list
(let* ((year y)
(date (eval sexp))
(string (if date (eval string))))
- (list (list date string)))
+ (list date string))
(let* ((year (1+ y))
(date (eval sexp))
(string (if date (eval string))))
- (list (list date string)))))))
+ (list date string))))))
(defun holiday-advent (&optional n string)
"Date of Nth day after advent (named STRING), if visible in calendar window.
@@ -486,7 +483,7 @@ is non-nil)."
(- (calendar-absolute-from-gregorian (list 4 19 displayed-year))
adjusted-epact))
(abs-easter (calendar-dayname-on-or-before 0 (+ paschal-moon 7))))
- (filter-visible-calendar-holidays
+ (holiday-filter-visible-calendar
(list (list (calendar-gregorian-from-absolute (+ abs-easter n))
string))))))
@@ -513,18 +510,26 @@ is non-nil)."
(if (calendar-date-is-visible-p nicaean-easter)
(list (list nicaean-easter "Pascha (Greek Orthodox Easter)"))))))
-(defun filter-visible-calendar-holidays (l)
+(defun holiday-filter-visible-calendar (l)
"Return a list of all visible holidays of those on L."
- (let ((visible)
- (p l))
- (while p
- (and (car (car p))
- (calendar-date-is-visible-p (car (car p)))
- (setq visible (append (list (car p)) visible)))
- (setq p (cdr p)))
+ (let ((visible ()))
+ (dolist (p l)
+ (and (car p)
+ (calendar-date-is-visible-p (car p))
+ (push p visible)))
visible))
+;; Backward compatibility.
+(define-obsolete-function-alias
+ 'filter-visible-calendar-holidays 'holiday-filter-visible-calendar "23.1")
+(define-obsolete-function-alias
+ 'list-calendar-holidays 'calendar-list-holidays "23.1")
+(define-obsolete-function-alias
+ 'mark-calendar-holidays 'calendar-mark-holidays "23.1")
+(define-obsolete-function-alias
+ 'check-calendar-holidays 'calendar-check-holidays "23.1")
+
(provide 'holidays)
-;;; arch-tag: 48eb3117-75a7-4dbe-8fd9-873c3cbb0d37
+;; arch-tag: 48eb3117-75a7-4dbe-8fd9-873c3cbb0d37
;;; holidays.el ends here
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index 101aaf96e43..881e7490665 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -1531,24 +1531,24 @@ buffer `*icalendar-errors*'."
("%t" STATUS icalendar-import-format-status)
("%u" URL icalendar-import-format-url))))
;; convert the specifiers in the format string
- (mapcar (lambda (i)
- (let* ((spec (car i))
- (prop (cadr i))
- (format (car (cddr i)))
- (contents (icalendar--get-event-property event prop))
- (formatted-contents ""))
- (when (and contents (> (length contents) 0))
- (setq formatted-contents
- (icalendar--rris "%s"
- (icalendar--convert-string-for-import
- contents)
- (symbol-value format)
- t t)))
- (setq string (icalendar--rris spec
- formatted-contents
- string
- t t))))
- conversion-list)
+ (mapc (lambda (i)
+ (let* ((spec (car i))
+ (prop (cadr i))
+ (format (car (cddr i)))
+ (contents (icalendar--get-event-property event prop))
+ (formatted-contents ""))
+ (when (and contents (> (length contents) 0))
+ (setq formatted-contents
+ (icalendar--rris "%s"
+ (icalendar--convert-string-for-import
+ contents)
+ (symbol-value format)
+ t t)))
+ (setq string (icalendar--rris spec
+ formatted-contents
+ string
+ t t))))
+ conversion-list)
string))
(defun icalendar--convert-ical-to-diary (ical-list diary-file
@@ -1637,11 +1637,11 @@ written into the buffer `*icalendar-errors*'."
(rdate
(icalendar--dmsg "rdate event")
(setq diary-string "")
- (mapcar (lambda (datestring)
- (setq diary-string
- (concat diary-string
- (format "......"))))
- (icalendar--split-value rdate)))
+ (mapc (lambda (datestring)
+ (setq diary-string
+ (concat diary-string
+ (format "......"))))
+ (icalendar--split-value rdate)))
;; non-recurring event
;; all-day event
((not (string= start-d end-d))
diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index dc8e6e8e81b..0f64e8514d4 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -271,7 +271,7 @@ Search in the directories \"~\" and \"~/.emacs.d\", in this
order. Return nil if no start file found."
(let* ((progname (file-name-nondirectory prog))
(start-file (concat "~/.emacs_" progname))
- (alt-start-file (concat "~/.emacs.d/init_" progname ".scm")))
+ (alt-start-file (concat user-emacs-directory "init_" progname ".scm")))
(if (file-exists-p start-file)
start-file
(and (file-exists-p alt-start-file) alt-start-file))))
diff --git a/lisp/comint.el b/lisp/comint.el
index ed1f38bf1a1..f1d9243cc60 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -678,13 +678,13 @@ BUFFER can be either a buffer or the name of one."
"Make a Comint process NAME in BUFFER, running PROGRAM.
If BUFFER is nil, it defaults to NAME surrounded by `*'s.
PROGRAM should be either a string denoting an executable program to create
-via `start-process', or a cons pair of the form (HOST . SERVICE) denoting a TCP
-connection to be opened via `open-network-stream'. If there is already a
-running process in that buffer, it is not restarted. Optional fourth arg
+via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting
+a TCP connection to be opened via `open-network-stream'. If there is already
+a running process in that buffer, it is not restarted. Optional fourth arg
STARTFILE is the name of a file to send the contents of to the process.
If PROGRAM is a string, any more args are arguments to PROGRAM."
- (or (fboundp 'start-process)
+ (or (fboundp 'start-file-process)
(error "Multi-processing is not supported for this system"))
(setq buffer (get-buffer-create (or buffer (concat "*" name "*"))))
;; If no process, or nuked process, crank up a new one and put buffer in
@@ -701,9 +701,9 @@ If PROGRAM is a string, any more args are arguments to PROGRAM."
"Make a Comint process NAME in a buffer, running PROGRAM.
The name of the buffer is made by surrounding NAME with `*'s.
PROGRAM should be either a string denoting an executable program to create
-via `start-process', or a cons pair of the form (HOST . SERVICE) denoting a TCP
-connection to be opened via `open-network-stream'. If there is already a
-running process in that buffer, it is not restarted. Optional third arg
+via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting
+a TCP connection to be opened via `open-network-stream'. If there is already
+a running process in that buffer, it is not restarted. Optional third arg
STARTFILE is the name of a file to send the contents of the process to.
If PROGRAM is a string, any more args are arguments to PROGRAM."
@@ -789,17 +789,19 @@ buffer. The hook `comint-exec-hook' is run after each exec."
;; If the command has slashes, make sure we
;; first look relative to the current directory.
(cons default-directory exec-path) exec-path)))
- (setq proc (apply 'start-process name buffer command switches)))
+ (setq proc (apply 'start-file-process name buffer command switches)))
+ ;; Some file name handler cannot start a process, fe ange-ftp.
+ (unless (processp proc) (error "No process started"))
(let ((coding-systems (process-coding-system proc)))
(setq decoding (car coding-systems)
encoding (cdr coding-systems)))
- ;; If start-process decided to use some coding system for decoding
+ ;; If start-file-process decided to use some coding system for decoding
;; data sent from the process and the coding system doesn't
;; specify EOL conversion, we had better convert CRLF to LF.
(if (vectorp (coding-system-eol-type decoding))
(setq decoding (coding-system-change-eol-conversion decoding 'dos)
changed t))
- ;; Even if start-process left the coding system for encoding data
+ ;; Even if start-file-process left the coding system for encoding data
;; sent from the process undecided, we had better use the same one
;; as what we use for decoding. But, we should suppress EOL
;; conversion.
@@ -2818,7 +2820,7 @@ Returns t if successful."
(defun comint-dynamic-complete-as-filename ()
"Dynamically complete at point as a filename.
See `comint-dynamic-complete-filename'. Returns t if successful."
- (let* ((completion-ignore-case (memq system-type '(ms-dos windows-nt cygwin)))
+ (let* ((completion-ignore-case read-file-name-completion-ignore-case)
(completion-ignored-extensions comint-completion-fignore)
;; If we bind this, it breaks remote directory tracking in rlogin.el.
;; I think it was originally bound to solve file completion problems,
@@ -2947,7 +2949,7 @@ See also `comint-dynamic-complete-filename'."
(defun comint-dynamic-list-filename-completions ()
"List in help buffer possible completions of the filename at point."
(interactive)
- (let* ((completion-ignore-case (memq system-type '(ms-dos windows-nt cygwin)))
+ (let* ((completion-ignore-case read-file-name-completion-ignore-case)
;; If we bind this, it breaks remote directory tracking in rlogin.el.
;; I think it was originally bound to solve file completion problems,
;; but subsequent changes may have made this unnecessary. sm.
diff --git a/lisp/complete.el b/lisp/complete.el
index 4b4e4784b3f..e1d0ef07df4 100644
--- a/lisp/complete.el
+++ b/lisp/complete.el
@@ -153,11 +153,8 @@ If nil, means use the colon-separated path in the variable $INCPATH instead."
(define-key completion-map " " 'minibuffer-complete-word)
(define-key completion-map "?" 'minibuffer-completion-help)
- (define-key must-match-map "\t" 'minibuffer-complete)
- (define-key must-match-map " " 'minibuffer-complete-word)
(define-key must-match-map "\r" 'minibuffer-complete-and-exit)
(define-key must-match-map "\n" 'minibuffer-complete-and-exit)
- (define-key must-match-map "?" 'minibuffer-completion-help)
(define-key global-map [remap lisp-complete-symbol] nil))
(PC-default-bindings
@@ -173,17 +170,11 @@ If nil, means use the colon-separated path in the variable $INCPATH instead."
(define-key completion-map "\e\n" 'PC-force-complete-and-exit)
(define-key completion-map "\e?" 'PC-completion-help)
- (define-key must-match-map "\t" 'PC-complete)
- (define-key must-match-map " " 'PC-complete-word)
(define-key must-match-map "\r" 'PC-complete-and-exit)
(define-key must-match-map "\n" 'PC-complete-and-exit)
- (define-key must-match-map "?" 'PC-completion-help)
- (define-key must-match-map "\e\t" 'PC-complete)
- (define-key must-match-map "\e " 'PC-complete-word)
(define-key must-match-map "\e\r" 'PC-complete-and-exit)
(define-key must-match-map "\e\n" 'PC-complete-and-exit)
- (define-key must-match-map "\e?" 'PC-completion-help)
(define-key global-map [remap lisp-complete-symbol] 'PC-lisp-complete-symbol)))))
@@ -231,13 +222,6 @@ second TAB brings up the `*Completions*' buffer."
(remove-hook 'find-file-not-found-functions 'PC-look-for-include-file))
((not PC-disable-includes)
(add-hook 'find-file-not-found-functions 'PC-look-for-include-file)))
- ;; ... with some underhand redefining.
- (cond ((not partial-completion-mode)
- (ad-disable-advice 'read-file-name-internal 'around 'PC-include-file)
- (ad-activate 'read-file-name-internal))
- ((not PC-disable-includes)
- (ad-enable-advice 'read-file-name-internal 'around 'PC-include-file)
- (ad-activate 'read-file-name-internal)))
;; Adjust the completion selection in *Completion* buffers to the way
;; we work. The default minibuffer completion code only completes the
;; text before point and leaves the text after point alone (new in
@@ -344,14 +328,24 @@ See `PC-complete' for details."
(PC-do-complete-and-exit)))
(defun PC-do-complete-and-exit ()
- (if (= (point-max) (minibuffer-prompt-end)) ; Duplicate the "bug" that Info-menu relies on...
- (exit-minibuffer)
+ (cond
+ ((= (point-max) (minibuffer-prompt-end))
+ ;; Duplicate the "bug" that Info-menu relies on...
+ (exit-minibuffer))
+ ((eq minibuffer-completion-confirm 'confirm-only)
+ (if (or (eq last-command this-command)
+ (test-completion (field-string)
+ minibuffer-completion-table
+ minibuffer-completion-predicate))
+ (exit-minibuffer)
+ (PC-temp-minibuffer-message " [Confirm]")))
+ (t
(let ((flag (PC-do-completion 'exit)))
(and flag
(if (or (eq flag 'complete)
(not minibuffer-completion-confirm))
(exit-minibuffer)
- (PC-temp-minibuffer-message " [Confirm]"))))))
+ (PC-temp-minibuffer-message " [Confirm]")))))))
(defun PC-completion-help ()
@@ -439,7 +433,9 @@ point-max (as is appropriate for completing a file name). If
GOTO-END is non-nil, however, it instead replaces up to END."
(or beg (setq beg (minibuffer-prompt-end)))
(or end (setq end (point-max)))
- (let* ((table minibuffer-completion-table)
+ (let* ((table (if (eq minibuffer-completion-table 'read-file-name-internal)
+ 'PC-read-file-name-internal
+ minibuffer-completion-table))
(pred minibuffer-completion-predicate)
(filename (funcall PC-completion-as-file-name-predicate))
(dirname nil) ; non-nil only if a filename is being completed
@@ -454,6 +450,7 @@ GOTO-END is non-nil, however, it instead replaces up to END."
env-on
regex
p offset
+ abbreviated
(poss nil)
helpposs
(case-fold-search completion-ignore-case))
@@ -518,7 +515,7 @@ GOTO-END is non-nil, however, it instead replaces up to END."
"*"
(substring pat p))
p (+ p 2)))
- (setq files (PC-expand-many-files (concat pat "*")))
+ (setq files (file-expand-wildcards (concat pat "*")))
(if files
(let ((dir (file-name-directory (car files)))
(p files))
@@ -532,11 +529,11 @@ GOTO-END is non-nil, however, it instead replaces up to END."
(insert str)
(setq end (+ beg (length str)))))
(if origstr
- ;; If the wildcards were introduced by us, it's possible
- ;; that read-file-name-internal (especially our
- ;; PC-include-file advice) can still find matches for the
- ;; original string even if we couldn't, so remove the
- ;; added wildcards.
+ ;; If the wildcards were introduced by us, it's
+ ;; possible that PC-read-file-name-internal can
+ ;; still find matches for the original string
+ ;; even if we couldn't, so remove the added
+ ;; wildcards.
(setq str origstr)
(setq filename nil table nil pred nil)))))
@@ -590,17 +587,43 @@ GOTO-END is non-nil, however, it instead replaces up to END."
pred nil))
;; Find an initial list of possible completions
- (if (not (setq p (string-match (concat PC-delim-regex
+ (unless (setq p (string-match (concat PC-delim-regex
(if filename "\\|\\*" ""))
str
- (+ (length dirname) offset))))
+ (+ (length dirname) offset)))
;; Minibuffer contains no hyphens -- simple case!
- (setq poss (all-completions (if env-on
- basestr str)
+ (setq poss (all-completions (if env-on basestr str)
table
pred))
-
+ (unless (or poss (string-equal str ""))
+ ;; Try completion as an abbreviation, e.g. "mvb" ->
+ ;; "m-v-b" -> "multiple-value-bind", but only for
+ ;; non-empty strings.
+ (setq origstr str
+ abbreviated t)
+ (if filename
+ (cond
+ ;; "alpha" or "/alpha" -> expand whole path.
+ ((string-match "^/?\\([A-Za-z0-9]+\\)$" str)
+ (setq
+ basestr ""
+ p nil
+ poss (file-expand-wildcards
+ (concat "/"
+ (mapconcat #'list (match-string 1 str) "*/")
+ "*"))
+ beg (1- beg)))
+ ;; Alphanumeric trailer -> expand trailing file
+ ((string-match "^\\(.+/\\)\\([A-Za-z0-9]+\\)$" str)
+ (setq regex (concat "\\`"
+ (mapconcat #'list
+ (match-string 2 str)
+ "[A-Za-z0-9]*[^A-Za-z0-9]"))
+ p (1+ (length (match-string 1 str))))))
+ (setq regex (concat "\\`" (mapconcat #'list str "[^-]*-"))
+ p 1))))
+ (when p
;; Use all-completions to do an initial cull. This is a big win,
;; since all-completions is written in C!
(let ((compl (all-completions (if env-on
@@ -609,12 +632,24 @@ GOTO-END is non-nil, however, it instead replaces up to END."
table
pred)))
(setq p compl)
+ (when (and compl abbreviated)
+ (if filename
+ (progn
+ (setq p nil)
+ (dolist (x compl)
+ (when (string-match regex x)
+ (push x p)))
+ (setq basestr (try-completion "" p)))
+ (setq basestr (mapconcat 'list str "-"))
+ (delete-region beg end)
+ (setq end (+ beg (length basestr)))
+ (insert basestr))))
(while p
(and (string-match regex (car p))
(progn
(set-text-properties 0 (length (car p)) '() (car p))
(setq poss (cons (car p) poss))))
- (setq p (cdr p)))))
+ (setq p (cdr p))))
;; If table had duplicates, they can be here.
(delete-dups poss)
@@ -648,6 +683,7 @@ GOTO-END is non-nil, however, it instead replaces up to END."
(and p (setq poss p))))
;; Now we have a list of possible completions
+
(cond
;; No valid completions found
@@ -657,6 +693,9 @@ GOTO-END is non-nil, however, it instead replaces up to END."
(let ((PC-word-failed-flag t))
(delete-backward-char 1)
(PC-do-completion 'word))
+ (when abbreviated
+ (delete-region beg end)
+ (insert origstr))
(beep)
(PC-temp-minibuffer-message (if ambig
" [Ambiguous dir name]"
@@ -793,13 +832,18 @@ GOTO-END is non-nil, however, it instead replaces up to END."
(setq completion-base-size (if dirname
dirlength
(- beg prompt-end))))))
- (PC-temp-minibuffer-message " [Next char not unique]"))
- nil)))))
+ (PC-temp-minibuffer-message " [Next char not unique]"))
+ ;; Expansion of filenames is not reversible,
+ ;; so just keep the prefix.
+ (when (and abbreviated filename)
+ (delete-region (point) end))
+ nil)))))
;; Only one possible completion
(t
(if (and (equal basestr (car poss))
- (not (and env-on filename)))
+ (not (and env-on filename))
+ (not abbreviated))
(if (null mode)
(PC-temp-minibuffer-message " [Sole completion]"))
(delete-region beg end)
@@ -857,13 +901,11 @@ only symbols with function definitions are considered.
Otherwise, all symbols with function definitions, values
or properties are considered."
(interactive)
- (let* ((end (point))
- ;; To complete the word under point, rather than just the portion
- ;; before point, use this:
-;;; (save-excursion
-;;; (with-syntax-table lisp-mode-syntax-table
-;;; (forward-sexp 1)
-;;; (point))))
+ (let* ((end
+ (save-excursion
+ (with-syntax-table lisp-mode-syntax-table
+ (skip-syntax-forward "_w")
+ (point))))
(beg (save-excursion
(with-syntax-table lisp-mode-syntax-table
(backward-sexp 1)
@@ -921,67 +963,12 @@ or properties are considered."
(point-min) t)
(+ (point) 2)
(point-min)))
- (minibuffer-completion-table 'read-file-name-internal)
+ (minibuffer-completion-table 'PC-read-file-name-internal)
(minibuffer-completion-predicate "")
(PC-not-minibuffer t))
(goto-char end)
(PC-do-completion nil beg end)))
-;; Use the shell to do globbing.
-;; This could now use file-expand-wildcards instead.
-
-(defun PC-expand-many-files (name)
- (with-current-buffer (generate-new-buffer " *Glob Output*")
- (erase-buffer)
- (when (and (file-name-absolute-p name)
- (not (file-directory-p default-directory)))
- ;; If the current working directory doesn't exist `shell-command'
- ;; signals an error. So if the file names we're looking for don't
- ;; depend on the working directory, switch to a valid directory first.
- (setq default-directory "/"))
- (shell-command (concat "echo " name) t)
- (goto-char (point-min))
- ;; CSH-style shells were known to output "No match", whereas
- ;; SH-style shells tend to simply output `name' when no match is found.
- (if (looking-at (concat ".*No match\\|\\(^\\| \\)\\("
- (regexp-quote name)
- "\\|"
- (regexp-quote (expand-file-name name))
- "\\)\\( \\|$\\)"))
- nil
- (insert "(\"")
- (while (search-forward " " nil t)
- (delete-backward-char 1)
- (insert "\" \""))
- (goto-char (point-max))
- (delete-backward-char 1)
- (insert "\")")
- (goto-char (point-min))
- (let ((files (read (current-buffer))) (p nil))
- (kill-buffer (current-buffer))
- (or (equal completion-ignored-extensions PC-ignored-extensions)
- (setq PC-ignored-regexp
- (concat "\\("
- (mapconcat
- 'regexp-quote
- (setq PC-ignored-extensions
- completion-ignored-extensions)
- "\\|")
- "\\)\\'")))
- (setq p nil)
- (while files
- ;; This whole process of going through to shell, to echo, and
- ;; finally parsing the output is a hack. It breaks as soon as
- ;; there are spaces in the file names or when the no-match
- ;; message changes. To make up for it, we check that what we read
- ;; indeed exists, so we may miss some files, but we at least won't
- ;; list non-existent ones.
- (or (not (file-exists-p (car files)))
- (string-match PC-ignored-regexp (car files))
- (setq p (cons (car files) p)))
- (setq files (cdr files)))
- p))))
-
;; Facilities for loading C header files. This is independent from the
;; main completion code. See also the variable `PC-include-file-path'
;; at top of this file.
@@ -1107,24 +1094,23 @@ absolute rather than relative to some directory on the SEARCH-PATH."
(setq sorted (cdr sorted)))
compressed))))
-(defadvice read-file-name-internal (around PC-include-file disable)
- (if (string-match "<\\([^\"<>]*\\)>?\\'" (ad-get-arg 0))
- (let* ((string (ad-get-arg 0))
- (action (ad-get-arg 2))
- (name (match-string 1 string))
+(defun PC-read-file-name-internal (string dir action)
+ "Extend `read-file-name-internal' to handle include files.
+This is only used by "
+ (if (string-match "<\\([^\"<>]*\\)>?\\'" string)
+ (let* ((name (match-string 1 string))
(str2 (substring string (match-beginning 0)))
(completion-table
(mapcar (lambda (x)
(format (if (string-match "/\\'" x) "<%s" "<%s>") x))
(PC-include-file-all-completions
name (PC-include-file-path)))))
- (setq ad-return-value
(cond
((not completion-table) nil)
((eq action 'lambda) (test-completion str2 completion-table nil))
((eq action nil) (PC-try-completion str2 completion-table nil))
- ((eq action t) (all-completions str2 completion-table nil)))))
- ad-do-it))
+ ((eq action t) (all-completions str2 completion-table nil))))
+ (read-file-name-internal string dir action)))
(provide 'complete)
diff --git a/lisp/completion.el b/lisp/completion.el
index 2180e2dace8..c2e9ac9493f 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -301,9 +301,9 @@ See also `save-completions-retention-time'."
(let ((olddef (convert-standard-filename "~/.completions")))
(cond
((file-readable-p olddef) olddef)
- ((file-directory-p (convert-standard-filename "~/.emacs.d/"))
+ ((file-directory-p user-emacs-directory)
(convert-standard-filename
- (expand-file-name "completions" "~/.emacs.d/")))
+ (expand-file-name "completions" user-emacs-directory)))
(t olddef)))
"The filename to save completions to."
:type 'file
@@ -568,7 +568,8 @@ But only if it is longer than `completion-min-length'."
(- cmpl-symbol-end cmpl-symbol-start))
(<= (- cmpl-symbol-end cmpl-symbol-start)
completion-max-length))
- (buffer-substring cmpl-symbol-start cmpl-symbol-end))))))
+ (buffer-substring-no-properties
+ cmpl-symbol-start cmpl-symbol-end))))))
;; tests for symbol-under-point
;; `^' indicates cursor pos. where value is returned
@@ -601,7 +602,8 @@ Returns nil if there isn't one longer than `completion-min-length'."
;; Return value if long enough.
(if (>= cmpl-symbol-end
(+ cmpl-symbol-start completion-min-length))
- (buffer-substring cmpl-symbol-start cmpl-symbol-end)))
+ (buffer-substring-no-properties
+ cmpl-symbol-start cmpl-symbol-end)))
((= cmpl-preceding-syntax ?w)
;; chars to ignore at end
(let ((saved-point (point)))
@@ -621,7 +623,8 @@ Returns nil if there isn't one longer than `completion-min-length'."
(- cmpl-symbol-end cmpl-symbol-start))
(<= (- cmpl-symbol-end cmpl-symbol-start)
completion-max-length))
- (buffer-substring cmpl-symbol-start cmpl-symbol-end)))))))
+ (buffer-substring-no-properties
+ cmpl-symbol-start cmpl-symbol-end)))))))
;; tests for symbol-before-point
;; `^' indicates cursor pos. where value is returned
@@ -670,7 +673,8 @@ Returns nil if there isn't one longer than `completion-min-length'."
(- cmpl-symbol-end cmpl-symbol-start))
(<= (- cmpl-symbol-end cmpl-symbol-start)
completion-max-length))
- (buffer-substring cmpl-symbol-start cmpl-symbol-end))))))
+ (buffer-substring-no-properties
+ cmpl-symbol-start cmpl-symbol-end))))))
;; tests for symbol-before-point-for-complete
;; `^' indicates cursor pos. where value is returned
@@ -2227,15 +2231,19 @@ Patched to remove the most recent completion."
(defun completion-separator-self-insert-command (arg)
(interactive "p")
- (use-completion-before-separator)
- (self-insert-command arg))
+ (if (command-remapping 'self-insert-command)
+ (funcall (command-remapping 'self-insert-command) arg)
+ (use-completion-before-separator)
+ (self-insert-command arg)))
(defun completion-separator-self-insert-autofilling (arg)
(interactive "p")
- (use-completion-before-separator)
- (self-insert-command arg)
- (and auto-fill-function
- (funcall auto-fill-function)))
+ (if (command-remapping 'self-insert-command)
+ (funcall (command-remapping 'self-insert-command) arg)
+ (use-completion-before-separator)
+ (self-insert-command arg)
+ (and auto-fill-function
+ (funcall auto-fill-function))))
;;-----------------------------------------------
;; Wrapping Macro
diff --git a/lisp/composite.el b/lisp/composite.el
index e2fc4ec8a65..a2457ab7514 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -194,7 +194,7 @@ adjust the composition when it gets invalid because of a change of
text in the composition."
(interactive "r")
(let ((modified-p (buffer-modified-p))
- (buffer-read-only nil))
+ (inhibit-read-only t))
(if (or (vectorp components) (listp components))
(setq components (encode-composition-components components)))
(compose-region-internal start end components modification-func)
@@ -208,9 +208,9 @@ When called from a program, expects two arguments,
positions (integers or markers) specifying the region."
(interactive "r")
(let ((modified-p (buffer-modified-p))
- (buffer-read-only nil))
+ (inhibit-read-only t))
(remove-text-properties start end '(composition nil))
- (set-buffer-modified-p modified-p)))
+ (restore-buffer-modified-p modified-p)))
;;;###autoload
(defun compose-string (string &optional start end components modification-func)
@@ -372,8 +372,8 @@ after a sequence of character events."
;;;###autoload(global-set-key [compose-last-chars] 'compose-last-chars)
-;;; The following codes are only for backward compatibility with Emacs
-;;; 20.4 and earlier.
+;; The following codes are only for backward compatibility with Emacs
+;; 20.4 and earlier.
;;;###autoload
(defun decompose-composite-char (char &optional type with-composition-rule)
@@ -392,5 +392,5 @@ Optional 3rd arg WITH-COMPOSITION-RULE is ignored."
-;;; arch-tag: ee703d77-1723-45d4-a31f-e9f0f867aa33
+;; arch-tag: ee703d77-1723-45d4-a31f-e9f0f867aa33
;;; composite.el ends here
diff --git a/lisp/cus-dep.el b/lisp/cus-dep.el
index ed248ac8bda..815e2d454ba 100644
--- a/lisp/cus-dep.el
+++ b/lisp/cus-dep.el
@@ -141,7 +141,7 @@ Usage: emacs -batch -l ./cus-dep.el -f custom-make-dependencies DIRS"
(member where
(cdr (assoc version version-alist)))
(push where (cdr (assoc version version-alist))))
- (push (cons version (list where)) version-alist)))
+ (push (list version where) version-alist)))
;; This is a group
(insert "(custom-put-if-not '" (symbol-name symbol)
" 'custom-version ")
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 40ff46f1675..cdb39c1fe5e 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -141,9 +141,9 @@
(require 'cus-face)
(require 'wid-edit)
-(eval-when-compile
- (defvar custom-versions-load-alist) ; from cus-load
- (defvar recentf-exclude)) ; from recentf.el
+
+(defvar custom-versions-load-alist) ; from cus-load
+(defvar recentf-exclude) ; from recentf.el
(condition-case nil
(require 'cus-load)
@@ -374,11 +374,6 @@
:prefix "custom-"
:group 'customize)
-(defgroup abbrev-mode nil
- "Word abbreviations mode."
- :link '(custom-manual "(emacs)Abbrevs")
- :group 'abbrev)
-
(defgroup alloc nil
"Storage allocation and gc for GNU Emacs Lisp interpreter."
:tag "Storage Allocation"
@@ -496,22 +491,25 @@
map)
"Local keymap for links in `custom-mode'.")
+(defvar custom-field-keymap
+ (let ((map (copy-keymap widget-field-keymap)))
+ (define-key map "\C-c\C-c" 'Custom-set)
+ (define-key map "\C-x\C-s" 'Custom-save)
+ map)
+ "Keymap used inside editable fields in customization buffers.")
+
+(widget-put (get 'editable-field 'widget-type) :keymap custom-field-keymap)
;;; Utilities.
(defun custom-split-regexp-maybe (regexp)
"If REGEXP is a string, split it to a list at `\\|'.
-You can get the original back with from the result with:
+You can get the original back from the result with:
(mapconcat 'identity result \"\\|\")
IF REGEXP is not a string, return it unchanged."
(if (stringp regexp)
- (let ((start 0)
- all)
- (while (string-match "\\\\|" regexp start)
- (setq all (cons (substring regexp start (match-beginning 0)) all)
- start (match-end 0)))
- (nreverse (cons (substring regexp start) all)))
+ (split-string regexp "\\\\|")
regexp))
(defun custom-variable-prompt ()
@@ -760,52 +758,86 @@ groups after non-groups, if nil do not order groups at all."
;;; Custom Mode Commands.
-(defvar custom-options nil
- "Customization widgets in the current buffer.")
-
-(defun Custom-set ()
- "Set the current value of all edited settings in the buffer."
+;; This variable is used by `custom-tool-bar-map', or directly by
+;; `custom-buffer-create-internal' if the toolbar is not present and
+;; `custom-buffer-verbose-help' is non-nil.
+
+(defvar custom-commands
+ '(("Set for current session" Custom-set t
+ "Apply all settings in this buffer to the current session"
+ "index")
+ ("Save for future sessions" Custom-save
+ (or custom-file user-init-file)
+ "Apply all settings in this buffer and save them for future Emacs sessions."
+ "save")
+ ("Undo edits" Custom-reset-current t
+ "Restore all settings in this buffer to reflect their current values."
+ "refresh")
+ ("Reset to saved" Custom-reset-saved t
+ "Restore all settings in this buffer to their saved values (if any)."
+ "undo")
+ ("Erase customizations" Custom-reset-standard
+ (or custom-file user-init-file)
+ "Un-customize all settings in this buffer and save them with standard values."
+ "delete")
+ ("Help for Customize" Custom-help t
+ "Get help for using Customize."
+ "help")
+ ("Exit" Custom-buffer-done t "Exit Customize." "exit")))
+
+(defun Custom-help ()
+ "Read the node on Easy Customization in the Emacs manual."
(interactive)
- (let ((children custom-options))
- (if (or (and (= 1 (length children))
- (memq (widget-type (car children))
- '(custom-variable custom-face)))
- (y-or-n-p "Set all values according to this buffer? "))
- (mapc (lambda (child)
- (when (eq (widget-get child :custom-state) 'modified)
- (widget-apply child :custom-set)))
- children)
- (message "Aborted"))))
-
-(defun Custom-save ()
- "Set all edited settings, then save all settings that have been set.
-If a setting was edited and set before, this saves it.
-If a setting was merely edited before, this sets it then saves it."
- (interactive)
- (let ((children custom-options))
- (if (or (and (= 1 (length children))
- (memq (widget-type (car children))
- '(custom-variable custom-face)))
- (yes-or-no-p "Save all settings in this buffer? "))
- (progn
- (mapc (lambda (child)
- (when (memq (widget-get child :custom-state)
- '(modified set changed rogue))
- (widget-apply child :custom-save)))
- children)
- (custom-save-all))
- (message "Aborted"))))
+ (info "(emacs)Easy Customization"))
(defvar custom-reset-menu
'(("Undo Edits" . Custom-reset-current)
("Reset to Saved" . Custom-reset-saved)
- ("Erase Customization (use standard values)" . Custom-reset-standard))
+ ("Erase Customizations (use standard values)" . Custom-reset-standard))
"Alist of actions for the `Reset' button.
The key is a string containing the name of the action, the value is a
Lisp function taking the widget as an element which will be called
when the action is chosen.")
-(defun custom-reset (event)
+(defvar custom-options nil
+ "Customization widgets in the current buffer.")
+
+(defun custom-command-apply (fun query &optional strong-query)
+ "Call function FUN on all widgets in `custom-options'.
+If there is more than one widget, ask user for confirmation using
+the query string QUERY, using `y-or-n-p' if STRONG-QUERY is nil,
+and `yes-or-no-p' otherwise."
+ (if (or (and (= 1 (length custom-options))
+ (memq (widget-type (car custom-options))
+ '(custom-variable custom-face)))
+ (funcall (if strong-query 'yes-or-no-p 'y-or-n-p) query))
+ (progn (mapc fun custom-options) t)
+ (message "Aborted")
+ nil))
+
+(defun Custom-set (&rest ignore)
+ "Set the current value of all edited settings in the buffer."
+ (interactive)
+ (custom-command-apply
+ (lambda (child)
+ (when (eq (widget-get child :custom-state) 'modified)
+ (widget-apply child :custom-set)))
+ "Set all values according to this buffer? "))
+
+(defun Custom-save (&rest ignore)
+ "Set all edited settings, then save all settings that have been set.
+If a setting was edited and set before, this saves it.
+If a setting was merely edited before, this sets it then saves it."
+ (interactive)
+ (if (custom-command-apply
+ (lambda (child)
+ (when (memq (widget-get child :custom-state)
+ '(modified set changed rogue))
+ (widget-apply child :custom-save)))
+ "Save all settings in this buffer? " t)
+ (custom-save-all)))
+
+(defun custom-reset (widget &optional event)
"Select item from reset menu."
(let* ((completion-ignore-case t)
(answer (widget-choose "Reset settings"
@@ -817,33 +849,21 @@ when the action is chosen.")
(defun Custom-reset-current (&rest ignore)
"Reset all edited settings in the buffer to show their current values."
(interactive)
- (let ((children custom-options))
- (if (or (and (= 1 (length children))
- (memq (widget-type (car children))
- '(custom-variable custom-face)))
- (y-or-n-p "Reset all settings' buffer text to show current values? "))
- (mapc (lambda (widget)
- (if (memq (widget-get widget :custom-state)
- '(modified changed))
- (widget-apply widget :custom-reset-current)))
- children)
- (message "Aborted"))))
+ (custom-command-apply
+ (lambda (widget)
+ (if (memq (widget-get widget :custom-state) '(modified changed))
+ (widget-apply widget :custom-reset-current)))
+ "Reset all settings' buffer text to show current values? "))
(defun Custom-reset-saved (&rest ignore)
"Reset all edited or set settings in the buffer to their saved value.
This also shows the saved values in the buffer."
(interactive)
- (let ((children custom-options))
- (if (or (and (= 1 (length children))
- (memq (widget-type (car children))
- '(custom-variable custom-face)))
- (y-or-n-p "Reset all settings (current values and buffer text) to saved values? "))
- (mapc (lambda (widget)
- (if (memq (widget-get widget :custom-state)
- '(modified set changed rogue))
- (widget-apply widget :custom-reset-saved)))
- children)
- (message "Aborted"))))
+ (custom-command-apply
+ (lambda (widget)
+ (if (memq (widget-get widget :custom-state) '(modified set changed rogue))
+ (widget-apply widget :custom-reset-saved)))
+ "Reset all settings (current values and buffer text) to saved values? "))
(defun Custom-reset-standard (&rest ignore)
"Erase all customization (either current or saved) for the group members.
@@ -851,20 +871,14 @@ The immediate result is to restore them to their standard values.
This operation eliminates any saved values for the group members,
making them as if they had never been customized at all."
(interactive)
- (let ((children custom-options))
- (if (or (and (= 1 (length children))
- (memq (widget-type (car children))
- '(custom-variable custom-face)))
- (yes-or-no-p "Erase all customizations for settings in this buffer? "))
- (mapc (lambda (widget)
- (and (if (widget-get widget :custom-standard-value)
- (widget-apply widget :custom-standard-value)
- t)
- (memq (widget-get widget :custom-state)
- '(modified set changed saved rogue))
- (widget-apply widget :custom-reset-standard)))
- children)
- (message "Aborted"))))
+ (custom-command-apply
+ (lambda (widget)
+ (and (or (null (widget-get widget :custom-standard-value))
+ (widget-apply widget :custom-standard-value))
+ (memq (widget-get widget :custom-state)
+ '(modified set changed saved rogue))
+ (widget-apply widget :custom-reset-standard)))
+ "Erase all customizations for settings in this buffer? " t))
;;; The Customize Commands
@@ -893,9 +907,9 @@ it as the third element in the list."
(cond (prop
;; Use VAR's `variable-interactive' property
;; as an interactive spec for prompting.
- (call-interactively (list 'lambda '(arg)
- (list 'interactive prop)
- 'arg)))
+ (call-interactively `(lambda (arg)
+ (interactive ,prop)
+ arg)))
(type
(widget-prompt-value type
prompt
@@ -1021,19 +1035,20 @@ then prompt for the MODE to customize."
t nil nil (if group (symbol-name major-mode))))))))
(customize-group (custom-group-of-mode mode)))
+(defun customize-read-group ()
+ (let ((completion-ignore-case t))
+ (completing-read "Customize group (default emacs): "
+ obarray
+ (lambda (symbol)
+ (or (and (get symbol 'custom-loads)
+ (not (get symbol 'custom-autoload)))
+ (get symbol 'custom-group)))
+ t)))
;;;###autoload
-(defun customize-group (group)
+(defun customize-group (&optional group)
"Customize GROUP, which must be a customization group."
- (interactive
- (list (let ((completion-ignore-case t))
- (completing-read "Customize group (default emacs): "
- obarray
- (lambda (symbol)
- (or (and (get symbol 'custom-loads)
- (not (get symbol 'custom-autoload)))
- (get symbol 'custom-group)))
- t))))
+ (interactive (list (customize-read-group)))
(when (stringp group)
(if (string-equal "" group)
(setq group 'emacs)
@@ -1041,42 +1056,21 @@ then prompt for the MODE to customize."
(let ((name (format "*Customize Group: %s*"
(custom-unlispify-tag-name group))))
(if (get-buffer name)
- (pop-to-buffer name)
- (custom-buffer-create (list (list group 'custom-group))
- name
- (concat " for group "
- (custom-unlispify-tag-name group))))))
-
-;;;###autoload
-(defun customize-group-other-window (group)
- "Customize GROUP, which must be a customization group."
- (interactive
- (list (let ((completion-ignore-case t))
- (completing-read "Customize group (default emacs): "
- obarray
- (lambda (symbol)
- (or (and (get symbol 'custom-loads)
- (not (get symbol 'custom-autoload)))
- (get symbol 'custom-group)))
- t))))
- (when (stringp group)
- (if (string-equal "" group)
- (setq group 'emacs)
- (setq group (intern group))))
- (let ((name (format "*Customize Group: %s*"
- (custom-unlispify-tag-name group))))
- (if (get-buffer name)
- (let (
- ;; Copied from `custom-buffer-create-other-window'.
- (pop-up-windows t)
- (same-window-buffer-names nil)
- (same-window-regexps nil))
- (pop-to-buffer name))
- (custom-buffer-create-other-window
+ (pop-to-buffer name)
+ (custom-buffer-create
(list (list group 'custom-group))
name
(concat " for group "
- (custom-unlispify-tag-name group))))))
+ (custom-unlispify-tag-name group))))))
+
+;;;###autoload
+(defun customize-group-other-window (&optional group)
+ "Customize GROUP, which must be a customization group, in another window."
+ (interactive (list (customize-read-group)))
+ (let ((pop-up-windows t)
+ (same-window-buffer-names nil)
+ (same-window-regexps nil))
+ (customize-group group)))
;;;###autoload
(defalias 'customize-variable 'customize-option)
@@ -1264,27 +1258,26 @@ face-alias, customize the face it is aliased to.
Interactively, when point is on text which has a face specified,
suggest to customize that face, if it's customizable."
- (interactive
- (list (read-face-name "Customize face" "all faces" t)))
+ (interactive (list (read-face-name "Customize face" "all faces" t)))
(if (member face '(nil ""))
(setq face (face-list)))
(if (and (listp face) (null (cdr face)))
(setq face (car face)))
(if (listp face)
- (custom-buffer-create (custom-sort-items
- (mapcar (lambda (s)
- (list s 'custom-face))
- face)
- t nil)
- "*Customize Faces*")
+ (custom-buffer-create
+ (custom-sort-items
+ (mapcar (lambda (s) (list s 'custom-face)) face)
+ t nil)
+ "*Customize Faces*")
;; If FACE is actually an alias, customize the face it is aliased to.
(if (get face 'face-alias)
(setq face (get face 'face-alias)))
(unless (facep face)
(error "Invalid face %S" face))
- (custom-buffer-create (list (list face 'custom-face))
- (format "*Customize Face: %s*"
- (custom-unlispify-tag-name face)))))
+ (custom-buffer-create
+ (list (list face 'custom-face))
+ (format "*Customize Face: %s*"
+ (custom-unlispify-tag-name face)))))
;;;###autoload
(defun customize-face-other-window (&optional face)
@@ -1293,28 +1286,11 @@ If FACE is actually a face-alias, customize the face it is aliased to.
Interactively, when point is on text which has a face specified,
suggest to customize that face, if it's customizable."
- (interactive
- (list (read-face-name "Customize face" "all faces" t)))
- (if (member face '(nil ""))
- (setq face (face-list)))
- (if (and (listp face) (null (cdr face)))
- (setq face (car face)))
- (if (listp face)
- (custom-buffer-create-other-window
- (custom-sort-items
- (mapcar (lambda (s)
- (list s 'custom-face))
- face)
- t nil)
- "*Customize Faces*")
- (if (get face 'face-alias)
- (setq face (get face 'face-alias)))
- (unless (facep face)
- (error "Invalid face %S" face))
- (custom-buffer-create-other-window
- (list (list face 'custom-face))
- (format "*Customize Face: %s*"
- (custom-unlispify-tag-name face)))))
+ (interactive (list (read-face-name "Customize face" "all faces" t)))
+ (let ((pop-up-windows t)
+ (same-window-buffer-names nil)
+ (same-window-regexps nil))
+ (customize-face face)))
(defalias 'customize-customized 'customize-unsaved)
@@ -1403,7 +1379,14 @@ that are not customizable options, as well as faces and groups
(get symbol 'variable-documentation))))
(push (list symbol 'custom-variable) found)))))
(if (not found)
- (error "No customizable items matching %s" regexp)
+ (error "No %s matching %s"
+ (if (eq all t)
+ "items"
+ (format "customizable %s"
+ (if (memq all '(options faces groups))
+ (symbol-name all)
+ "items")))
+ regexp)
(custom-buffer-create
(custom-sort-items found t custom-buffer-order-groups)
"*Customize Apropos*"))))
@@ -1546,99 +1529,61 @@ Otherwise use brackets."
(defun custom-buffer-create-internal (options &optional description)
(custom-mode)
- (if custom-buffer-verbose-help
- (progn
- (widget-insert "This is a customization buffer")
- (if description
- (widget-insert description))
- (widget-insert (format ".
-%s buttons; type RET or click mouse-1 to actuate one.
-Editing a setting changes only the text in the buffer."
- (if custom-raised-buttons
- "`Raised' text indicates"
- "Square brackets indicate")))
- (if init-file-user
- (widget-insert "
-Use the setting's State button to set it or save changes in it.
-Saving a change normally works by editing your Emacs init file.")
- (widget-insert "
-\nSince you started Emacs with `-q', which inhibits use of the
-Emacs init file, you cannot save settings into the Emacs init file."))
- (widget-insert "\nSee ")
- (widget-create 'custom-manual
- :tag "Custom file"
- "(emacs)Saving Customizations")
- (widget-insert
- " for information on how to save in a different file.\n
-See ")
- (widget-create 'custom-manual
- :tag "Help"
- :help-echo "Read the online help."
- "(emacs)Easy Customization")
- (widget-insert " for more information.\n\n")
- (widget-insert "Operate on all settings in this buffer that \
-are not marked HIDDEN:\n "))
- (widget-insert " "))
- (widget-create 'push-button
- :tag "Set for Current Session"
- :help-echo "\
-Make your editing in this buffer take effect for this session."
- :action (lambda (widget &optional event)
- (Custom-set)))
- (if (not custom-buffer-verbose-help)
- (progn
- (widget-insert " ")
- (widget-create 'custom-manual
- :tag "Help"
- :help-echo "Read the online help."
- "(emacs)Easy Customization")))
- (when (or custom-file user-init-file)
- (widget-insert " ")
- (widget-create 'push-button
- :tag "Save for Future Sessions"
- :help-echo "\
-Make your editing in this buffer take effect for future Emacs sessions.
-This updates your Emacs initialization file or creates a new one."
- :action (lambda (widget &optional event)
- (Custom-save))))
- (if custom-reset-button-menu
- (progn
- (widget-insert " ")
- (widget-create 'push-button
- :tag "Reset buffer"
- :help-echo "Show a menu with reset operations."
- :mouse-down-action (lambda (&rest junk) t)
- :action (lambda (widget &optional event)
- (custom-reset event))))
- (widget-insert "\n ")
- (widget-create 'push-button
- :tag "Undo Edits"
- :help-echo "\
-Reset all edited text in this buffer to reflect current values."
- :action 'Custom-reset-current)
- (widget-insert " ")
- (widget-create 'push-button
- :tag "Reset to Saved"
- :help-echo "\
-Reset all settings in this buffer to their saved values."
- :action 'Custom-reset-saved)
- (widget-insert " ")
- (when (or custom-file user-init-file)
- (widget-create 'push-button
- :tag "Erase Customization"
- :help-echo "\
-Un-customize all settings in this buffer and save them with standard values."
- :action 'Custom-reset-standard)))
- (widget-insert " ")
- (widget-create 'push-button
- :tag "Finish"
- :help-echo
- (lambda (&rest ignore)
- (if custom-buffer-done-kill
- "Kill this buffer"
- "Bury this buffer"))
- :action #'Custom-buffer-done)
- (widget-insert "\n\n")
+ (let ((init-file (or custom-file user-init-file)))
+ ;; Insert verbose help at the top of the custom buffer.
+ (when custom-buffer-verbose-help
+ (widget-insert "Editing a setting changes only the text in this buffer."
+ (if init-file
+ "
+To set apply your changes, use the Save or Set buttons.
+Saving a change normally works by editing your init file."
+ "
+Currently, these settings cannot be saved for future Emacs sessions,
+possibly because you started Emacs with `-q'.")
+ "\nFor details, see ")
+ (widget-create 'custom-manual
+ :tag "Saving Customizations"
+ "(emacs)Saving Customizations")
+ (widget-insert " in the ")
+ (widget-create 'custom-manual
+ :tag "Emacs manual"
+ :help-echo "Read the Emacs manual."
+ "(emacs)Top")
+ (widget-insert "."))
+ ;; Insert custom command buttons if the toolbar is not in use.
+
+ (widget-insert "\n")
+ ;; tool-bar is not dumped in builds without x.
+ (when (not (and (bound-and-true-p tool-bar-mode) (display-graphic-p)))
+ (if custom-buffer-verbose-help
+ (widget-insert "\n
+ Operate on all settings in this buffer that are not marked HIDDEN:\n"))
+ (let ((button (lambda (tag action active help icon)
+ (widget-insert " ")
+ (if (eval active)
+ (widget-create 'push-button :tag tag
+ :help-echo help :action action))))
+ (commands custom-commands))
+ (apply button (pop commands)) ; Set for current session
+ (apply button (pop commands)) ; Save for future sessions
+ (if custom-reset-button-menu
+ (progn
+ (widget-insert " ")
+ (widget-create 'push-button
+ :tag "Reset buffer"
+ :help-echo "Show a menu with reset operations."
+ :mouse-down-action 'ignore
+ :action 'custom-reset))
+ (widget-insert "\n")
+ (apply button (pop commands)) ; Undo edits
+ (apply button (pop commands)) ; Reset to saved
+ (apply button (pop commands)) ; Erase customization
+ (widget-insert " ")
+ (pop commands) ; Help (omitted)
+ (apply button (pop commands))))) ; Exit
+ (widget-insert "\n\n"))
+
+ ;; Now populate the custom buffer.
(message "Creating customization items...")
(buffer-disable-undo)
(setq custom-options
@@ -1776,7 +1721,7 @@ item in another window.\n\n"))
(defun custom-browse-insert-prefix (prefix)
"Insert PREFIX. On XEmacs convert it to line graphics."
;; Fixme: do graphics.
- (if nil ; (string-match "XEmacs" emacs-version)
+ (if nil ; (featurep 'xemacs)
(progn
(insert "*")
(while (not (string-equal prefix ""))
@@ -2439,13 +2384,13 @@ If INITIAL-STRING is non-nil, use that rather than \"Parent groups:\"."
(defface custom-variable-tag
`((((class color)
(background dark))
- (:foreground "light blue" :weight bold :height 1.2 :inherit variable-pitch))
+ (:foreground "light blue" :weight bold))
(((min-colors 88) (class color)
(background light))
- (:foreground "blue1" :weight bold :height 1.2 :inherit variable-pitch))
+ (:foreground "blue1" :weight bold))
(((class color)
(background light))
- (:foreground "blue" :weight bold :height 1.2 :inherit variable-pitch))
+ (:foreground "blue" :weight bold))
(t (:weight bold)))
"Face used for unpushable variable tags."
:group 'custom-faces)
@@ -2636,15 +2581,11 @@ try matching its doc string against `custom-guess-doc-alist'."
widget 'custom-magic nil)))
(widget-put widget :custom-magic magic)
(push magic buttons))
- ;; ### NOTE: this is ugly!!!! I need to update the :buttons property
- ;; before the call to `widget-default-format-handler'. Otherwise, I
- ;; loose my current `buttons'. This function shouldn't be called like
- ;; this anyway. The doc string widget should be added like the others.
- ;; --dv
(widget-put widget :buttons buttons)
- (insert "\n")
;; Insert documentation.
- (widget-default-format-handler widget ?h)
+ (widget-put widget :documentation-indent 3)
+ (widget-add-documentation-string-button
+ widget :visibility-widget 'custom-visibility)
;; The comment field
(unless (eq state 'hidden)
@@ -2989,6 +2930,21 @@ to switch between two values."
;; This call will possibly make the comment invisible
(custom-redraw widget)))
+;;; The `custom-visibility' Widget
+
+(define-widget 'custom-visibility 'visibility
+ "Show or hide a documentation string."
+ :button-face 'custom-visibility
+ :pressed-face 'custom-visibility
+ :mouse-face 'highlight
+ :pressed-face 'highlight)
+
+(defface custom-visibility
+ '((t :height 0.8 :inherit link))
+ "Face for the `custom-visibility' widget."
+ :version "23.1"
+ :group 'custom-faces)
+
;;; The `custom-face-edit' Widget.
(define-widget 'custom-face-edit 'checklist
@@ -3360,7 +3316,9 @@ SPEC must be a full face spec."
;; Update buttons.
(widget-put widget :buttons buttons)
;; Insert documentation.
- (widget-default-format-handler widget ?h)
+ (widget-add-documentation-string-button
+ widget :visibility-widget 'custom-visibility)
+
;; The comment field
(unless (eq state 'hidden)
(let* ((comment (get symbol 'face-comment))
@@ -3750,13 +3708,13 @@ and so forth. The remaining group tags are shown with `custom-group-tag'."
(defface custom-group-tag
`((((class color)
(background dark))
- (:foreground "light blue" :weight bold :height 1.2))
+ (:foreground "light blue" :weight bold :height 1.2 :inherit variable-pitch))
(((min-colors 88) (class color)
(background light))
- (:foreground "blue1" :weight bold :height 1.2))
+ (:foreground "blue1" :weight bold :height 1.2 :inherit variable-pitch))
(((class color)
(background light))
- (:foreground "blue" :weight bold :height 1.2))
+ (:foreground "blue" :weight bold :height 1.2 :inherit variable-pitch))
(t (:weight bold)))
"Face used for low level group tags."
:group 'custom-faces)
@@ -3900,28 +3858,22 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
;; Nested style.
((eq state 'hidden)
;; Create level indicator.
- (unless (eq custom-buffer-style 'links)
- (insert-char ?\ (* custom-buffer-indent (1- level)))
- (insert "-- "))
;; Create tag.
- (let ((begin (point)))
- (insert tag)
- (widget-specify-sample widget begin (point)))
- (insert " group: ")
- ;; Create link/visibility indicator.
(if (eq custom-buffer-style 'links)
(push (widget-create-child-and-convert
widget 'custom-group-link
- :tag "Go to Group"
+ :tag tag
symbol)
buttons)
+ (insert-char ?\ (* custom-buffer-indent (1- level)))
+ (insert "-- ")
(push (widget-create-child-and-convert
widget 'custom-group-visibility
:help-echo "Show members of this group."
:action 'custom-toggle-parent
(not (eq state 'hidden)))
buttons))
- (insert " \n")
+ (insert " : ")
;; Create magic button.
(let ((magic (widget-create-child-and-convert
widget 'custom-magic nil)))
@@ -3932,7 +3884,9 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
;; Insert documentation.
(if (and (eq custom-buffer-style 'links) (> level 1))
(widget-put widget :documentation-indent 0))
- (widget-default-format-handler widget ?h))
+ (widget-add-documentation-string-button
+ widget :visibility-widget 'custom-visibility))
+
;; Nested style.
(t ;Visible.
;; Add parent groups references above the group.
@@ -3947,9 +3901,9 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
(insert "/- ")
;; Create tag.
(let ((start (point)))
- (insert tag)
+ (insert tag " group: ")
(widget-specify-sample widget start (point)))
- (insert " group: ")
+ (insert (widget-docstring widget))
;; Create visibility indicator.
(unless (eq custom-buffer-style 'links)
(insert "--------")
@@ -3976,7 +3930,9 @@ If GROUPS-ONLY non-nil, return only those members that are groups."
;; Update buttons.
(widget-put widget :buttons buttons)
;; Insert documentation.
- (widget-default-format-handler widget ?h)
+ (widget-add-documentation-string-button
+ widget :visibility-widget 'custom-visibility)
+
;; Parent groups.
(if nil ;;; This should test that the buffer
;;; was not made to display a group.
@@ -4068,44 +4024,34 @@ Optional EVENT is the location for the menu."
(defun custom-group-set (widget)
"Set changes in all modified group members."
- (let ((children (widget-get widget :children)))
- (mapc (lambda (child)
- (when (eq (widget-get child :custom-state) 'modified)
- (widget-apply child :custom-set)))
- children )))
+ (dolist (child (widget-get widget :children))
+ (when (eq (widget-get child :custom-state) 'modified)
+ (widget-apply child :custom-set))))
(defun custom-group-save (widget)
"Save all modified group members."
- (let ((children (widget-get widget :children)))
- (mapc (lambda (child)
- (when (memq (widget-get child :custom-state) '(modified set))
- (widget-apply child :custom-save)))
- children )))
+ (dolist (child (widget-get widget :children))
+ (when (memq (widget-get child :custom-state) '(modified set))
+ (widget-apply child :custom-save))))
(defun custom-group-reset-current (widget)
"Reset all modified group members."
- (let ((children (widget-get widget :children)))
- (mapc (lambda (child)
- (when (eq (widget-get child :custom-state) 'modified)
- (widget-apply child :custom-reset-current)))
- children )))
+ (dolist (child (widget-get widget :children))
+ (when (eq (widget-get child :custom-state) 'modified)
+ (widget-apply child :custom-reset-current))))
(defun custom-group-reset-saved (widget)
"Reset all modified or set group members."
- (let ((children (widget-get widget :children)))
- (mapc (lambda (child)
- (when (memq (widget-get child :custom-state) '(modified set))
- (widget-apply child :custom-reset-saved)))
- children )))
+ (dolist (child (widget-get widget :children))
+ (when (memq (widget-get child :custom-state) '(modified set))
+ (widget-apply child :custom-reset-saved))))
(defun custom-group-reset-standard (widget)
"Reset all modified, set, or saved group members."
- (let ((children (widget-get widget :children)))
- (mapc (lambda (child)
- (when (memq (widget-get child :custom-state)
- '(modified set saved))
- (widget-apply child :custom-reset-standard)))
- children )))
+ (dolist (child (widget-get widget :children))
+ (when (memq (widget-get child :custom-state)
+ '(modified set saved))
+ (widget-apply child :custom-reset-standard))))
(defun custom-group-state-update (widget)
"Update magic."
@@ -4188,6 +4134,9 @@ if only the first line of the docstring is shown."))
(setq user-init-file default-init-file))
user-init-file))))
+;; If recentf-mode is non-nil, this is defined.
+(declare-function recentf-expand-file-name "recentf" (name))
+
;;;###autoload
(defun custom-save-all ()
"Save all customizations in `custom-file'."
@@ -4494,6 +4443,32 @@ The format is suitable for use with `easy-menu-define'."
(let ((menu (custom-menu-create ',symbol)))
(if (consp menu) (cdr menu) menu)))))
+;;; Toolbar and menubar support
+
+(easy-menu-define
+ Custom-mode-menu (list custom-mode-map custom-field-keymap)
+ "Menu used in customization buffers."
+ (nconc (list "Custom"
+ (customize-menu-create 'customize))
+ (mapcar (lambda (arg)
+ (let ((tag (nth 0 arg))
+ (command (nth 1 arg))
+ (active (nth 2 arg))
+ (help (nth 3 arg)))
+ (vector tag command :active (eval active) :help help)))
+ custom-commands)))
+
+(defvar tool-bar-map)
+(defvar custom-tool-bar-map
+ (if (display-graphic-p)
+ (let ((map (make-sparse-keymap)))
+ (mapc
+ (lambda (arg)
+ (tool-bar-local-item-from-menu
+ (nth 1 arg) (nth 4 arg) map custom-mode-map))
+ custom-commands)
+ map)))
+
;;; The Custom Mode.
(defun Custom-no-edit (pos &optional event)
@@ -4509,27 +4484,6 @@ The format is suitable for use with `easy-menu-define'."
(widget-apply-action button event)
(error "You can't edit this part of the Custom buffer"))))
-(easy-menu-define Custom-mode-menu
- custom-mode-map
- "Menu used in customization buffers."
- `("Custom"
- ,(customize-menu-create 'customize)
- ["Set" Custom-set t]
- ["Save" Custom-save t]
- ["Undo Edits" Custom-reset-current t]
- ["Reset to Saved" Custom-reset-saved t]
- ["Erase Customization" Custom-reset-standard t]
- ["Info" (info "(emacs)Easy Customization") t]))
-
-(defvar custom-field-keymap
- (let ((map (copy-keymap widget-field-keymap)))
- (define-key map "\C-c\C-c" 'Custom-set)
- (define-key map "\C-x\C-s" 'Custom-save)
- map)
- "Keymap used inside editable fields in customization buffers.")
-
-(widget-put (get 'editable-field 'widget-type) :keymap custom-field-keymap)
-
(defun Custom-goto-parent ()
"Go to the parent group listed at the top of this buffer.
If several parents are listed, go to the first of them."
@@ -4577,6 +4531,7 @@ if that value is non-nil."
mode-name "Custom")
(use-local-map custom-mode-map)
(easy-menu-add Custom-mode-menu)
+ (set (make-local-variable 'tool-bar-map) custom-tool-bar-map)
(make-local-variable 'custom-options)
(make-local-variable 'custom-local-buffer)
(make-local-variable 'widget-documentation-face)
diff --git a/lisp/cus-face.el b/lisp/cus-face.el
index be88b499fef..92274dcbe21 100644
--- a/lisp/cus-face.el
+++ b/lisp/cus-face.el
@@ -40,15 +40,18 @@
(when (fboundp 'facep)
(unless (facep face)
;; If the user has already created the face, respect that.
- (let ((value (or (get face 'saved-face) spec)))
+ (let ((value (or (get face 'saved-face) spec))
+ (have-window-system (memq initial-window-system '(x w32))))
;; Create global face.
(make-empty-face face)
;; Create frame-local faces
(dolist (frame (frame-list))
- (face-spec-set face value frame)))
- ;; When making a face after frames already exist
- (if (memq window-system '(x w32 mac))
- (make-face-x-resource-internal face))))
+ (face-spec-set face value frame)
+ (when (memq (window-system frame) '(x w32 mac))
+ (setq have-window-system t)))
+ ;; When making a face after frames already exist
+ (if have-window-system
+ (make-face-x-resource-internal face)))))
;; Don't record SPEC until we see it causes no errors.
(put face 'face-defface-spec spec)
(push (cons 'defface face) current-load-list)
@@ -339,16 +342,16 @@ FACE's list property `theme-face' \(using `custom-push-theme')."
(unless (facep face)
(make-empty-face face))
(put face 'face-comment comment)
- (face-spec-set face spec))
- (setq args (cdr args)))
- ;; Old format, a plist of FACE SPEC pairs.
- (let ((face (nth 0 args))
- (spec (nth 1 args)))
- (if (get face 'face-alias)
- (setq face (get face 'face-alias)))
- (put face 'saved-face spec)
- (custom-push-theme 'theme-face face theme 'set spec))
- (setq args (cdr (cdr args))))))))
+ (face-spec-set face spec nil))
+ (setq args (cdr args)))
+ ;; Old format, a plist of FACE SPEC pairs.
+ (let ((face (nth 0 args))
+ (spec (nth 1 args)))
+ (if (get face 'face-alias)
+ (setq face (get face 'face-alias)))
+ (put face 'saved-face spec)
+ (custom-push-theme 'theme-face face theme 'set spec))
+ (setq args (cdr (cdr args))))))))
;; XEmacs compability function. In XEmacs, when you reset a Custom
;; Theme, you have to specify the theme to reset it to. We just apply
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 1e2dd6c57af..fd5a62f0c1b 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -35,10 +35,7 @@
;;; Code:
-(let ((all '(;; abbrev.c
- (abbrev-all-caps abbrev-mode boolean)
- (pre-abbrev-expand-hook abbrev-mode hook)
- ;; alloc.c
+(let ((all '(;; alloc.c
(gc-cons-threshold alloc integer)
(garbage-collection-messages alloc boolean)
;; buffer.c
@@ -142,6 +139,9 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
;; eval.c
(max-specpdl-size limits integer)
(max-lisp-eval-depth limits integer)
+ (max-mini-window-height limits
+ (choice (const :tag "quarter screen" nil)
+ number))
(stack-trace-on-error debug
(choice (const :tag "off")
(repeat :menu-tag "When"
@@ -340,6 +340,15 @@ since it could result in memory overflow and make Emacs crash."
(even-window-heights windows boolean)
(next-screen-context-lines windows integer)
(split-height-threshold windows integer)
+ (split-window-preferred-function
+ windows
+ (choice (const :tag "vertically" split-window)
+ ;; FIXME: Add `sensibly' which chooses between
+ ;; vertical or horizontal splits depending on the size
+ ;; and shape of the window.
+ (const :tag "horizontally"
+ (lambda (window)
+ (split-window window nil 'horiz)))))
(window-min-height windows integer)
(window-min-width windows integer)
(scroll-preserve-screen-position
@@ -420,14 +429,10 @@ since it could result in memory overflow and make Emacs crash."
(eq system-type 'ms-dos))
((string-match "\\`w32-" (symbol-name symbol))
(eq system-type 'windows-nt))
- ((string-match "\\`mac-" (symbol-name symbol))
- (eq window-system 'mac))
+ ((string-match "\\`mac-" (symbol-name symbol))
+ (featurep 'mac-carbon))
((string-match "\\`x-.*gtk" (symbol-name symbol))
- (or (boundp 'gtk)
- (and window-system
- (not (eq window-system 'pc))
- (not (eq window-system 'mac))
- (not (eq system-type 'windows-nt)))))
+ (featurep 'gtk))
((string-match "\\`x-" (symbol-name symbol))
(fboundp 'x-create-frame))
((string-match "selection" (symbol-name symbol))
@@ -466,5 +471,5 @@ since it could result in memory overflow and make Emacs crash."
(unless purify-flag
(provide 'cus-start))
-;;; arch-tag: 4502730d-bcb3-4f5e-99a3-a86f2d54af60
+;; arch-tag: 4502730d-bcb3-4f5e-99a3-a86f2d54af60
;;; cus-start.el ends here
diff --git a/lisp/custom.el b/lisp/custom.el
index e5925dd18d0..bbee71ecf1f 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -168,6 +168,10 @@ set to nil, as the value is no longer rogue."
(put symbol 'custom-get value))
((eq keyword :require)
(push value requests))
+ ((eq keyword :risky)
+ (put symbol 'risky-local-variable value))
+ ((eq keyword :safe)
+ (put symbol 'safe-local-variable value))
((eq keyword :type)
(put symbol 'custom-type (purecopy value)))
((eq keyword :options)
@@ -219,6 +223,8 @@ The following keywords are meaningful:
VALUE should be a feature symbol. If you save a value
for this option, then when your `.emacs' file loads the value,
it does (require VALUE) first.
+:risky Set SYMBOL's `risky-local-variable' property to VALUE.
+:safe Set SYMBOL's `safe-local-variable' property to VALUE.
The following common keywords are also meaningful.
@@ -573,6 +579,15 @@ This recursively follows aliases."
(or (get variable 'standard-value)
(get variable 'custom-autoload)))
+(defun custom-note-var-changed (variable)
+ "Inform Custom that VARIABLE has been set (changed).
+VARIABLE is a symbol that names a user option.
+The result is that the change is treated as having been made through Custom."
+ (put variable 'customized-value (list (custom-quote (eval variable)))))
+
+
+;;; Custom Themes
+
;;; Loading files needed to customize a symbol.
;;; This is in custom.el because menu-bar.el needs it for toggle cmds.
@@ -1009,10 +1024,7 @@ Every theme X has a property `provide-theme' whose value is \"X-theme\".
;;; Loading themes.
(defcustom custom-theme-directory
- (if (eq system-type 'ms-dos)
- ;; MS-DOS cannot have initial dot.
- "~/_emacs.d/"
- "~/.emacs.d/")
+ user-emacs-directory
"Directory in which Custom theme files should be written.
`load-theme' searches this directory in addition to load-path.
The command `customize-create-theme' writes the files it produces
diff --git a/lisp/cvs-status.el b/lisp/cvs-status.el
index 55fc52544b1..82ac90453c8 100644
--- a/lisp/cvs-status.el
+++ b/lisp/cvs-status.el
@@ -33,7 +33,6 @@
(eval-when-compile (require 'cl))
(require 'pcvs-util)
-(eval-when-compile (require 'pcvs))
;;;
diff --git a/lisp/dabbrev.el b/lisp/dabbrev.el
index 0fa23db84d4..20f6fea23db 100644
--- a/lisp/dabbrev.el
+++ b/lisp/dabbrev.el
@@ -128,7 +128,7 @@ Set this to nil if no characters should be skipped."
(const :tag "off" nil))
:group 'dabbrev)
-(defcustom dabbrev--eliminate-newlines t
+(defcustom dabbrev-eliminate-newlines t
"*Non-nil means dabbrev should not insert newlines.
Instead it converts them to spaces."
:type 'boolean
@@ -332,6 +332,9 @@ this list."
;; The regexp for recognizing a character in an abbreviation.
(defvar dabbrev--abbrev-char-regexp nil)
+;; The progress reporter for buffer-scanning progress.
+(defvar dabbrev--progress-reporter nil)
+
;;----------------------------------------------------------------
;; Macros
;;----------------------------------------------------------------
@@ -711,10 +714,6 @@ If IGNORE-CASE is non-nil, accept matches which differ in case."
(setq all-expansions (cons expansion all-expansions))))
all-expansions))
-(defun dabbrev--scanning-message ()
- (unless (window-minibuffer-p (selected-window))
- (message "Scanning `%s'" (buffer-name (current-buffer)))))
-
(defun dabbrev--ignore-buffer-p (buffer)
"Return non-nil if BUFFER should be ignored by dabbrev."
(let ((bn (buffer-name buffer)))
@@ -740,8 +739,7 @@ of the start of the occurrence."
;; If we were scanning something other than the current buffer,
;; continue scanning there.
(when dabbrev--last-buffer
- (set-buffer dabbrev--last-buffer)
- (dabbrev--scanning-message))
+ (set-buffer dabbrev--last-buffer))
(or
;; ------------------------------------------
;; Look backward in current buffer.
@@ -773,15 +771,20 @@ of the start of the occurrence."
;; If we have just now begun to search other buffers,
;; determine which other buffers we should check.
;; Put that list in dabbrev--friend-buffer-list.
- (or dabbrev--friend-buffer-list
- (setq dabbrev--friend-buffer-list
- (dabbrev--make-friend-buffer-list))))
+ (unless dabbrev--friend-buffer-list
+ (setq dabbrev--friend-buffer-list
+ (dabbrev--make-friend-buffer-list))
+ (setq dabbrev--progress-reporter
+ (make-progress-reporter
+ "Scanning for dabbrevs..."
+ (- (length dabbrev--friend-buffer-list)) 0 0 1 1.5))))
;; Walk through the buffers till we find a match.
(let (expansion)
(while (and (not expansion) dabbrev--friend-buffer-list)
(setq dabbrev--last-buffer (pop dabbrev--friend-buffer-list))
(set-buffer dabbrev--last-buffer)
- (dabbrev--scanning-message)
+ (progress-reporter-update dabbrev--progress-reporter
+ (- (length dabbrev--friend-buffer-list)))
(setq dabbrev--last-expansion-location (point-min))
(setq expansion (dabbrev--try-find abbrev nil 1 ignore-case)))
expansion)))))
@@ -913,10 +916,12 @@ to record whether we upcased the expansion, downcased it, or did neither."
((equal abbrev (downcase abbrev)) 'downcase)))))
;; Convert whitespace to single spaces.
- (if dabbrev--eliminate-newlines
- ;; Start searching at end of ABBREV so that any whitespace
- ;; carried over from the existing text is not changed.
- (let ((pos (length abbrev)))
+ (if dabbrev-eliminate-newlines
+ (let ((pos
+ (if (equal abbrev " ") 0 (length abbrev))))
+ ;; If ABBREV is real, search after the end of it.
+ ;; If ABBREV is space and we are copying successive words,
+ ;; search starting at the front.
(while (string-match "[\n \t]+" expansion pos)
(setq pos (1+ (match-beginning 0)))
(setq expansion (replace-match " " nil nil expansion)))))
diff --git a/lisp/delsel.el b/lisp/delsel.el
index e33dac6c2f9..eb14bc5ac8e 100644
--- a/lisp/delsel.el
+++ b/lisp/delsel.el
@@ -35,7 +35,7 @@
;; Commands which will delete the selection need a 'delete-selection
;; property on their symbols; commands which insert text but don't
-;; have this property won't delete the selction. It can be one of
+;; have this property won't delete the selection. It can be one of
;; the values:
;; 'yank
;; For commands which do a yank; ensures the region about to be
@@ -87,12 +87,14 @@ any selection."
(cond ((eq type 'kill)
(delete-active-region t))
((eq type 'yank)
- ;; Before a yank command,
- ;; make sure we don't yank the same region
- ;; that we are going to delete.
+ ;; Before a yank command, make sure we don't yank the
+ ;; head of the kill-ring that really comes from the
+ ;; currently active region we are going to delete.
;; That would make yank a no-op.
- (when (string= (buffer-substring-no-properties (point) (mark))
- (car kill-ring))
+ (when (and (string= (buffer-substring-no-properties (point) (mark))
+ (car kill-ring))
+ (fboundp 'mouse-region-match)
+ (mouse-region-match))
(current-kill 1))
(delete-active-region))
((eq type 'supersede)
@@ -145,14 +147,19 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer."
(define-key minibuffer-local-must-match-map "\C-g" 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map "\C-g" 'minibuffer-keyboard-quit)
-(defun delsel-unload-hook ()
+(defun delsel-unload-function ()
+ "Unload the Delete Selection library."
(define-key minibuffer-local-map "\C-g" 'abort-recursive-edit)
(define-key minibuffer-local-ns-map "\C-g" 'abort-recursive-edit)
(define-key minibuffer-local-completion-map "\C-g" 'abort-recursive-edit)
(define-key minibuffer-local-must-match-map "\C-g" 'abort-recursive-edit)
- (define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit))
-
-(add-hook 'delsel-unload-hook 'delsel-unload-hook)
+ (define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit)
+ (dolist (sym '(self-insert-command self-insert-iso yank clipboard-yank
+ insert-register delete-backward-char backward-delete-char-untabify
+ delete-char newline-and-indent newline open-line))
+ (remprop sym 'delete-selection))
+ ;; continue standard unloading
+ nil)
(provide 'delsel)
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index d14aba7ae6f..3452874f343 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -588,7 +588,7 @@ as well as widgets, buttons, overlays, and text properties."
(if (cadr x) (length (car x)) 0))
item-list)))
(help-setup-xref nil (interactive-p))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(with-current-buffer standard-output
(set-buffer-multibyte multibyte-p)
(let ((formatter (format "%%%ds:" max-width)))
@@ -685,8 +685,7 @@ as well as widgets, buttons, overlays, and text properties."
(if text-props-desc (insert text-props-desc))
(setq help-xref-stack-item (list 'help-insert-string (buffer-string)))
- (toggle-read-only 1)
- (print-help-return-message)))))
+ (toggle-read-only 1)))))
(defalias 'describe-char-after 'describe-char)
(make-obsolete 'describe-char-after 'describe-char "22.1")
diff --git a/lisp/desktop.el b/lisp/desktop.el
index 1530238ee17..22028d249b2 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -456,7 +456,8 @@ Furthermore the major mode function must be autoloaded.")
(defcustom desktop-minor-mode-table
'((auto-fill-function auto-fill-mode)
(vc-mode nil)
- (vc-dired-mode nil))
+ (vc-dired-mode nil)
+ (erc-track-minor-mode nil))
"Table mapping minor mode variables to minor mode functions.
Each entry has the form (NAME RESTORE-FUNCTION).
NAME is the name of the buffer-local variable indicating that the minor
@@ -650,6 +651,9 @@ is nil, ask the user where to save the desktop."
value)))
;; ----------------------------------------------------------------------------
+;; check-declare does not work for defstructs.
+;;;(declare-function uniquify-item-base "uniquify" (cl-x))
+
(defun desktop-buffer-info (buffer)
(set-buffer buffer)
(list
diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el
index a79fb577453..9e9eb81797a 100644
--- a/lisp/diff-mode.el
+++ b/lisp/diff-mode.el
@@ -48,8 +48,6 @@
;; Or maybe just make it into a ".rej to diff3-markers converter".
;; Maybe just use `wiggle' (by Neil Brown) to do it for us.
;;
-;; - Refine hunk on a word-by-word basis.
-;;
;; - in diff-apply-hunk, strip context in replace-match to better
;; preserve markers and spacing.
;; - Handle `diff -b' output in context->unified.
@@ -72,7 +70,7 @@
:group 'diff-mode)
(defcustom diff-jump-to-old-file nil
- "*Non-nil means `diff-goto-source' jumps to the old file.
+ "Non-nil means `diff-goto-source' jumps to the old file.
Else, it jumps to the new file."
:type 'boolean
:group 'diff-mode)
@@ -92,6 +90,10 @@ when editing big diffs)."
:type 'boolean
:group 'diff-mode)
+(defcustom diff-auto-refine t
+ "Automatically highlight changes in detail as the user visits hunks."
+ :type 'boolean
+ :group 'diff-mode)
(defcustom diff-mode-hook nil
"Run after setting up the `diff-mode' major mode."
@@ -151,13 +153,14 @@ when editing big diffs)."
("\C-c\C-a" . diff-apply-hunk)
("\C-c\C-e" . diff-ediff-patch)
("\C-c\C-n" . diff-restrict-view)
- ("\C-c\C-r" . diff-reverse-direction)
("\C-c\C-s" . diff-split-hunk)
("\C-c\C-t" . diff-test-hunk)
+ ("\C-c\C-r" . diff-reverse-direction)
("\C-c\C-u" . diff-context->unified)
;; `d' because it duplicates the context :-( --Stef
("\C-c\C-d" . diff-unified->context)
- ("\C-c\C-w" . diff-refine-hunk)
+ ("\C-c\C-w" . diff-ignore-whitespace-hunk)
+ ("\C-c\C-b" . diff-refine-hunk) ;No reason for `b' :-(
("\C-c\C-f" . next-error-follow-minor-mode))
"Keymap for `diff-mode'. See also `diff-mode-shared-map'.")
@@ -174,8 +177,9 @@ when editing big diffs)."
["Unified -> Context" diff-unified->context t]
;;["Fixup Headers" diff-fixup-modifs (not buffer-read-only)]
"-----"
- ["Split hunk" diff-split-hunk t]
- ["Refine hunk" diff-refine-hunk t]
+ ["Split hunk" diff-split-hunk (diff-splittable-p)]
+ ["Ignore whitespace changes" diff-ignore-whitespace-hunk t]
+ ["Highlight fine changes" diff-refine-hunk t]
["Kill current hunk" diff-hunk-kill t]
["Kill current file's hunks" diff-file-kill t]
"-----"
@@ -351,8 +355,11 @@ when editing big diffs)."
("^--- .+ ----$" . diff-hunk-header-face) ;context
("^[0-9,]+[acd][0-9,]+$" . diff-hunk-header-face) ;normal
("^---$" . diff-hunk-header-face) ;normal
- ("^\\(---\\|\\+\\+\\+\\|\\*\\*\\*\\) \\(\\S-+\\)\\(.*[^*-]\\)?\n"
- (0 diff-header-face) (2 diff-file-header-face prepend))
+ ;; For file headers, accept files with spaces, but be careful to rule
+ ;; out false-positives when matching hunk headers.
+ ("^\\(---\\|\\+\\+\\+\\|\\*\\*\\*\\) \\([^\t\n]+?\\)\\(?:\t.*\\| \\(\\*\\*\\*\\*\\|----\\)\\)?\n"
+ (0 diff-header-face)
+ (2 (if (not (match-end 3)) diff-file-header-face) prepend))
("^\\([-<]\\)\\(.*\n\\)"
(1 diff-indicator-removed-face) (2 diff-removed-face))
("^\\([+>]\\)\\(.*\n\\)"
@@ -385,12 +392,15 @@ when editing big diffs)."
(defconst diff-file-header-re (concat "^\\(--- .+\n\\+\\+\\+ \\|\\*\\*\\* .+\n--- \\|[^-+!<>0-9@* ]\\).+\n" (substring diff-hunk-header-re 1)))
(defvar diff-narrowed-to nil)
-(defun diff-end-of-hunk (&optional style)
+(defun diff-hunk-style (&optional style)
(when (looking-at diff-hunk-header-re)
- (unless style
- ;; Especially important for unified (because headers are ambiguous).
- (setq style (cdr (assq (char-after) '((?@ . unified) (?* . context))))))
+ (setq style (cdr (assq (char-after) '((?@ . unified) (?* . context)))))
(goto-char (match-end 0)))
+ style)
+
+(defun diff-end-of-hunk (&optional style)
+ ;; Especially important for unified (because headers are ambiguous).
+ (setq style (diff-hunk-style style))
(let ((end (and (re-search-forward (case style
;; A `unified' header is ambiguous.
(unified (concat "^[^-+# \\]\\|"
@@ -418,13 +428,29 @@ but in the file header instead, in which case move forward to the first hunk."
(diff-beginning-of-file-and-junk)
(diff-hunk-next))))))
+(defun diff-unified-hunk-p ()
+ (save-excursion
+ (ignore-errors
+ (diff-beginning-of-hunk)
+ (looking-at "^@@"))))
+
(defun diff-beginning-of-file ()
(beginning-of-line)
(unless (looking-at diff-file-header-re)
- (forward-line 2)
- (condition-case ()
- (re-search-backward diff-file-header-re)
- (error (error "Can't find the beginning of the file")))))
+ (let ((start (point))
+ res)
+ ;; diff-file-header-re may need to match up to 4 lines, so in case
+ ;; we're inside the header, we need to move up to 3 lines forward.
+ (forward-line 3)
+ (if (and (setq res (re-search-backward diff-file-header-re nil t))
+ ;; Maybe the 3 lines forward were too much and we matched
+ ;; a file header after our starting point :-(
+ (or (<= (point) start)
+ (setq res (re-search-backward diff-file-header-re nil t))))
+ res
+ (goto-char start)
+ (error "Can't find the beginning of the file")))))
+
(defun diff-end-of-file ()
(re-search-forward "^[-+#!<>0-9@* \\]" nil t)
@@ -436,7 +462,10 @@ but in the file header instead, in which case move forward to the first hunk."
;; Define diff-{hunk,file}-{prev,next}
(easy-mmode-define-navigation
- diff-hunk diff-hunk-header-re "hunk" diff-end-of-hunk diff-restrict-view)
+ diff-hunk diff-hunk-header-re "hunk" diff-end-of-hunk diff-restrict-view
+ (if diff-auto-refine
+ (condition-case-no-debug nil (diff-refine-hunk) (error nil))))
+
(easy-mmode-define-navigation
diff-file diff-file-header-re "file" diff-end-of-hunk)
@@ -477,26 +506,34 @@ If the prefix ARG is given, restrict the view to the current file instead."
"Go to the beginning of file-related diff-info.
This is like `diff-beginning-of-file' except it tries to skip back over leading
data such as \"Index: ...\" and such."
- (let ((start (point))
- (file (condition-case err (progn (diff-beginning-of-file) (point))
- (error err)))
- ;; prevhunk is one of the limits.
- (prevhunk (save-excursion (ignore-errors (diff-hunk-prev) (point))))
- err)
- (when (consp file)
- ;; Presumably, we started before the file header, in the leading junk.
- (setq err file)
- (diff-file-next)
- (setq file (point)))
- (let ((index (save-excursion
- (re-search-backward "^Index: " prevhunk t))))
- (when index (setq file index))
- (if (<= file start)
- (goto-char file)
- ;; File starts *after* the starting point: we really weren't in
- ;; a file diff but elsewhere.
- (goto-char start)
- (signal (car err) (cdr err))))))
+ (let* ((start (point))
+ (prevfile (condition-case err
+ (save-excursion (diff-beginning-of-file) (point))
+ (error err)))
+ (err (if (consp prevfile) prevfile))
+ (nextfile (ignore-errors
+ (save-excursion
+ (goto-char start) (diff-file-next) (point))))
+ ;; prevhunk is one of the limits.
+ (prevhunk (save-excursion
+ (ignore-errors
+ (if (numberp prevfile) (goto-char prevfile))
+ (diff-hunk-prev) (point))))
+ (previndex (save-excursion
+ (re-search-backward "^Index: " prevhunk t))))
+ ;; If we're in the junk, we should use nextfile instead of prevfile.
+ (if (and (numberp nextfile)
+ (or (not (numberp prevfile))
+ (and previndex (> previndex prevfile))))
+ (setq prevfile nextfile))
+ (if (and previndex (numberp prevfile) (< previndex prevfile))
+ (setq prevfile previndex))
+ (if (and (numberp prevfile) (<= prevfile start))
+ (goto-char prevfile)
+ ;; File starts *after* the starting point: we really weren't in
+ ;; a file diff but elsewhere.
+ (goto-char start)
+ (signal (car err) (cdr err)))))
(defun diff-file-kill ()
"Kill current file's hunks."
@@ -530,6 +567,13 @@ data such as \"Index: ...\" and such."
(while (re-search-forward re end t) (incf n))
n)))
+(defun diff-splittable-p ()
+ (save-excursion
+ (beginning-of-line)
+ (and (looking-at "^[-+ ]")
+ (progn (forward-line -1) (looking-at "^[-+ ]"))
+ (diff-unified-hunk-p))))
+
(defun diff-split-hunk ()
"Split the current (unified diff) hunk at point into two hunks."
(interactive)
@@ -624,9 +668,11 @@ If the OLD prefix arg is passed, tell the file NAME of the old file."
(list (if old (match-string 2) (match-string 4))
(if old (match-string 4) (match-string 2)))))))))
-(defun diff-find-file-name (&optional old prefix)
+(defun diff-find-file-name (&optional old batch prefix)
"Return the file corresponding to the current patch.
Non-nil OLD means that we want the old file.
+Non-nil BATCH means to prefer returning an incorrect answer than to prompt
+the user.
PREFIX is only used internally: don't use it."
(save-excursion
(unless (looking-at diff-file-header-re)
@@ -663,7 +709,10 @@ PREFIX is only used internally: don't use it."
(boundp 'cvs-pcl-cvs-dirchange-re)
(save-excursion
(re-search-backward cvs-pcl-cvs-dirchange-re nil t))
- (diff-find-file-name old (match-string 1)))
+ (diff-find-file-name old batch (match-string 1)))
+ ;; Invent something, if necessary.
+ (when batch
+ (or (car fs) default-directory))
;; if all else fails, ask the user
(let ((file (read-file-name (format "Use file %s: " (or (first fs) ""))
nil (first fs) t (first fs))))
@@ -711,7 +760,12 @@ else cover the whole buffer."
(let ((line1 (match-string 4))
(lines1 (match-string 5))
(line2 (match-string 6))
- (lines2 (match-string 7)))
+ (lines2 (match-string 7))
+ ;; Variables to use the special undo function.
+ (old-undo buffer-undo-list)
+ (old-end (marker-position end))
+ (start (match-beginning 0))
+ (reversible t))
(replace-match
(concat "***************\n*** " line1 ","
(number-to-string (+ (string-to-number line1)
@@ -753,6 +807,14 @@ else cover the whole buffer."
(if (not (save-excursion (re-search-forward "^+" nil t)))
(delete-region (point) (point-max))
(let ((modif nil) (delete nil))
+ (if (save-excursion (re-search-forward "^\\+.*\n-" nil t))
+ ;; Normally, lines in a substitution come with
+ ;; first the removals and then the additions, and
+ ;; the context->unified function follows this
+ ;; convention, of course. Yet, other alternatives
+ ;; are valid as well, but they preclude the use of
+ ;; context->unified as an undo command.
+ (setq reversible nil))
(while (not (eobp))
(case (char-after)
(?\s (insert " ") (setq modif nil) (backward-char 1))
@@ -771,7 +833,15 @@ else cover the whole buffer."
(forward-line 1)
(when delete
(delete-region last-pt (point))
- (setq delete nil)))))))))))))))
+ (setq delete nil)))))))
+ (unless (or (not reversible) (eq buffer-undo-list t))
+ ;; Drop the many undo entries and replace them with
+ ;; a single entry that uses diff-context->unified to do
+ ;; the work.
+ (setq buffer-undo-list
+ (cons (list 'apply (- old-end end) start (point-max)
+ 'diff-context->unified start (point-max))
+ old-undo)))))))))))
(defun diff-context->unified (start end &optional to-context)
"Convert context diffs to unified diffs.
@@ -785,68 +855,89 @@ With a prefix argument, convert unified format to context format."
(diff-unified->context start end)
(unless (markerp end) (setq end (copy-marker end t)))
(let ( ;;(diff-inhibit-after-change t)
- (inhibit-read-only t))
+ (inhibit-read-only t))
(save-excursion
- (goto-char start)
- (while (and (re-search-forward "^\\(\\(\\*\\*\\*\\) .+\n\\(---\\) .+\\|\\*\\{15\\}.*\n\\*\\*\\* \\([0-9]+\\),\\(-?[0-9]+\\) \\*\\*\\*\\*\\)$" nil t)
- (< (point) end))
- (combine-after-change-calls
- (if (match-beginning 2)
- ;; we matched a file header
- (progn
- ;; use reverse order to make sure the indices are kept valid
- (replace-match "+++" t t nil 3)
- (replace-match "---" t t nil 2))
- ;; we matched a hunk header
- (let ((line1s (match-string 4))
- (line1e (match-string 5))
- (pt1 (match-beginning 0)))
- (replace-match "")
- (unless (re-search-forward
- "^--- \\([0-9]+\\),\\(-?[0-9]+\\) ----$" nil t)
- (error "Can't find matching `--- n1,n2 ----' line"))
- (let ((line2s (match-string 1))
- (line2e (match-string 2))
- (pt2 (progn
- (delete-region (progn (beginning-of-line) (point))
- (progn (forward-line 1) (point)))
- (point-marker))))
- (goto-char pt1)
- (forward-line 1)
- (while (< (point) pt2)
- (case (char-after)
- ((?! ?-) (delete-char 2) (insert "-") (forward-line 1))
- (?\s ;merge with the other half of the chunk
- (let* ((endline2
- (save-excursion
- (goto-char pt2) (forward-line 1) (point)))
- (c (char-after pt2)))
- (case c
- ((?! ?+)
- (insert "+"
- (prog1 (buffer-substring (+ pt2 2) endline2)
- (delete-region pt2 endline2))))
- (?\s ;FIXME: check consistency
- (delete-region pt2 endline2)
- (delete-char 1)
- (forward-line 1))
- (?\\ (forward-line 1))
- (t (delete-char 1) (forward-line 1)))))
- (t (forward-line 1))))
- (while (looking-at "[+! ] ")
- (if (/= (char-after) ?!) (forward-char 1)
- (delete-char 1) (insert "+"))
- (delete-char 1) (forward-line 1))
- (save-excursion
- (goto-char pt1)
- (insert "@@ -" line1s ","
- (number-to-string (- (string-to-number line1e)
- (string-to-number line1s)
- -1))
- " +" line2s ","
- (number-to-string (- (string-to-number line2e)
- (string-to-number line2s)
- -1)) " @@")))))))))))
+ (goto-char start)
+ (while (and (re-search-forward "^\\(\\(\\*\\*\\*\\) .+\n\\(---\\) .+\\|\\*\\{15\\}.*\n\\*\\*\\* \\([0-9]+\\),\\(-?[0-9]+\\) \\*\\*\\*\\*\\)$" nil t)
+ (< (point) end))
+ (combine-after-change-calls
+ (if (match-beginning 2)
+ ;; we matched a file header
+ (progn
+ ;; use reverse order to make sure the indices are kept valid
+ (replace-match "+++" t t nil 3)
+ (replace-match "---" t t nil 2))
+ ;; we matched a hunk header
+ (let ((line1s (match-string 4))
+ (line1e (match-string 5))
+ (pt1 (match-beginning 0))
+ ;; Variables to use the special undo function.
+ (old-undo buffer-undo-list)
+ (old-end (marker-position end))
+ (reversible t))
+ (replace-match "")
+ (unless (re-search-forward
+ "^--- \\([0-9]+\\),\\(-?[0-9]+\\) ----$" nil t)
+ (error "Can't find matching `--- n1,n2 ----' line"))
+ (let ((line2s (match-string 1))
+ (line2e (match-string 2))
+ (pt2 (progn
+ (delete-region (progn (beginning-of-line) (point))
+ (progn (forward-line 1) (point)))
+ (point-marker))))
+ (goto-char pt1)
+ (forward-line 1)
+ (while (< (point) pt2)
+ (case (char-after)
+ (?! (delete-char 2) (insert "-") (forward-line 1))
+ (?- (forward-char 1) (delete-char 1) (forward-line 1))
+ (?\s ;merge with the other half of the chunk
+ (let* ((endline2
+ (save-excursion
+ (goto-char pt2) (forward-line 1) (point))))
+ (case (char-after pt2)
+ ((?! ?+)
+ (insert "+"
+ (prog1 (buffer-substring (+ pt2 2) endline2)
+ (delete-region pt2 endline2))))
+ (?\s
+ (unless (= (- endline2 pt2)
+ (- (line-beginning-position 2) (point)))
+ ;; If the two lines we're merging don't have the
+ ;; same length (can happen with "diff -b"), then
+ ;; diff-unified->context will not properly undo
+ ;; this operation.
+ (setq reversible nil))
+ (delete-region pt2 endline2)
+ (delete-char 1)
+ (forward-line 1))
+ (?\\ (forward-line 1))
+ (t (setq reversible nil)
+ (delete-char 1) (forward-line 1)))))
+ (t (setq reversible nil) (forward-line 1))))
+ (while (looking-at "[+! ] ")
+ (if (/= (char-after) ?!) (forward-char 1)
+ (delete-char 1) (insert "+"))
+ (delete-char 1) (forward-line 1))
+ (save-excursion
+ (goto-char pt1)
+ (insert "@@ -" line1s ","
+ (number-to-string (- (string-to-number line1e)
+ (string-to-number line1s)
+ -1))
+ " +" line2s ","
+ (number-to-string (- (string-to-number line2e)
+ (string-to-number line2s)
+ -1)) " @@"))
+ (set-marker pt2 nil)
+ ;; The whole procedure succeeded, let's replace the myriad
+ ;; of undo elements with just a single special one.
+ (unless (or (not reversible) (eq buffer-undo-list t))
+ (setq buffer-undo-list
+ (cons (list 'apply (- old-end end) pt1 (point)
+ 'diff-unified->context pt1 (point))
+ old-undo)))
+ )))))))))
(defun diff-reverse-direction (start end)
"Reverse the direction of the diffs.
@@ -1159,26 +1250,30 @@ Only works for unified diffs."
;; A context diff.
((eq (char-after) ?*)
- (if (not (looking-at "\\*\\{15\\}\\(?: .*\\)?\n\\*\\*\\* \\([0-9]+\\),\\([0-9]+\\) \\*\\*\\*\\*"))
+ (if (not (looking-at "\\*\\{15\\}\\(?: .*\\)?\n\\*\\*\\* \\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)? \\*\\*\\*\\*"))
(error "Unrecognized context diff first hunk header format")
(forward-line 2)
(diff-sanity-check-context-hunk-half
- (1+ (- (string-to-number (match-string 2))
- (string-to-number (match-string 1)))))
- (if (not (looking-at "--- \\([0-9]+\\),\\([0-9]+\\) ----$"))
+ (if (match-string 2)
+ (1+ (- (string-to-number (match-string 2))
+ (string-to-number (match-string 1))))
+ 1))
+ (if (not (looking-at "--- \\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)? ----$"))
(error "Unrecognized context diff second hunk header format")
(forward-line)
(diff-sanity-check-context-hunk-half
- (1+ (- (string-to-number (match-string 2))
- (string-to-number (match-string 1))))))))
+ (if (match-string 2)
+ (1+ (- (string-to-number (match-string 2))
+ (string-to-number (match-string 1))))
+ 1)))))
;; A unified diff.
((eq (char-after) ?@)
(if (not (looking-at
- "@@ -[0-9]+,\\([0-9]+\\) \\+[0-9]+,\\([0-9]+\\) @@"))
+ "@@ -[0-9]+\\(?:,\\([0-9]+\\)\\)? \\+[0-9]+\\(?:,\\([0-9]+\\)\\)? @@"))
(error "Unrecognized unified diff hunk header format")
- (let ((before (string-to-number (match-string 1)))
- (after (string-to-number (match-string 2))))
+ (let ((before (if (match-string 1) (string-to-number (match-string 1)) 1))
+ (after (if (match-string 2) (string-to-number (match-string 2)) 1)))
(forward-line)
(while
(case (char-after)
@@ -1326,7 +1421,7 @@ Whitespace differences are ignored."
(if (> (- (car forw) orig) (- orig (car back))) back forw)
(or back forw))))
-(defsubst diff-xor (a b) (if a (not b) b))
+(defsubst diff-xor (a b) (if a (if (not b) a) b))
(defun diff-find-source-location (&optional other-file reverse)
"Find out (BUF LINE-OFFSET POS SRC DST SWITCHED).
@@ -1409,8 +1504,15 @@ the value of this variable when given an appropriate prefix argument).
With a prefix argument, REVERSE the hunk."
(interactive "P")
(destructuring-bind (buf line-offset pos old new &optional switched)
- ;; If REVERSE go to the new file, otherwise go to the old.
- (diff-find-source-location (not reverse) reverse)
+ ;; Sometimes we'd like to have the following behavior: if REVERSE go
+ ;; to the new file, otherwise go to the old. But that means that by
+ ;; default we use the old file, which is the opposite of the default
+ ;; for diff-goto-source, and is thus confusing. Also when you don't
+ ;; know about it it's pretty surprising.
+ ;; TODO: make it possible to ask explicitly for this behavior.
+ ;;
+ ;; This is duplicated in diff-test-hunk.
+ (diff-find-source-location nil reverse)
(cond
((null line-offset)
(error "Can't find the text to patch"))
@@ -1454,8 +1556,7 @@ With a prefix argument, REVERSE the hunk."
With a prefix argument, try to REVERSE the hunk."
(interactive "P")
(destructuring-bind (buf line-offset pos src dst &optional switched)
- ;; If REVERSE go to the new file, otherwise go to the old.
- (diff-find-source-location (not reverse) reverse)
+ (diff-find-source-location nil reverse)
(set-window-point (display-buffer buf) (+ (car pos) (cdr src)))
(diff-hunk-status-msg line-offset (diff-xor reverse switched) t)))
@@ -1484,6 +1585,10 @@ then `diff-jump-to-old-file' is also set, for the next invocations."
(defun diff-current-defun ()
"Find the name of function at point.
For use in `add-log-current-defun-function'."
+ ;; Kill change-log-default-name so it gets recomputed each time, since
+ ;; each hunk may belong to another file which may belong to another
+ ;; directory and hence have a different ChangeLog file.
+ (kill-local-variable 'change-log-default-name)
(save-excursion
(when (looking-at diff-hunk-header-re)
(forward-line 1)
@@ -1506,8 +1611,8 @@ For use in `add-log-current-defun-function'."
(goto-char (+ (car pos) (cdr src)))
(add-log-current-defun))))))
-(defun diff-refine-hunk ()
- "Refine the current hunk by ignoring space differences."
+(defun diff-ignore-whitespace-hunk ()
+ "Re-diff the current hunk, ignoring whitespace differences."
(interactive)
(let* ((char-offset (- (point) (progn (diff-beginning-of-hunk 'try-harder)
(point))))
@@ -1551,6 +1656,75 @@ For use in `add-log-current-defun-function'."
(delete-file file1)
(delete-file file2))))
+;;; Fine change highlighting.
+
+(defface diff-refine-change
+ '((((class color) (min-colors 88) (background light))
+ :background "grey90")
+ (((class color) (min-colors 88) (background dark))
+ :background "grey40")
+ (((class color) (background light))
+ :background "yellow")
+ (((class color) (background dark))
+ :background "green")
+ (t :weight bold))
+ "Face used for char-based changes shown by `diff-refine-hunk'."
+ :group 'diff-mode)
+
+(defun diff-refine-preproc ()
+ (while (re-search-forward "^[+>]" nil t)
+ ;; Remove spurious changes due to the fact that one side of the hunk is
+ ;; marked with leading + or > and the other with leading - or <.
+ ;; We used to replace all the prefix chars with " " but this only worked
+ ;; when we did char-based refinement (or when using
+ ;; smerge-refine-weight-hack) since otherwise, the `forward' motion done
+ ;; in chopup do not necessarily do the same as the ones in highlight
+ ;; since the "_" is not treated the same as " ".
+ (replace-match (cdr (assq (char-before) '((?+ . "-") (?> . "<"))))))
+ )
+
+(defun diff-refine-hunk ()
+ "Highlight changes of hunk at point at a finer granularity."
+ (interactive)
+ (eval-and-compile (require 'smerge-mode))
+ (save-excursion
+ (diff-beginning-of-hunk 'try-harder)
+ (let* ((style (diff-hunk-style)) ;Skips the hunk header as well.
+ (beg (point))
+ (props '((diff-mode . fine) (face diff-refine-change)))
+ (end (progn (diff-end-of-hunk) (point))))
+
+ (remove-overlays beg end 'diff-mode 'fine)
+
+ (goto-char beg)
+ (case style
+ (unified
+ (while (re-search-forward "^\\(?:-.*\n\\)+\\(\\)\\(?:\\+.*\n\\)+"
+ end t)
+ (smerge-refine-subst (match-beginning 0) (match-end 1)
+ (match-end 1) (match-end 0)
+ props 'diff-refine-preproc)))
+ (context
+ (let* ((middle (save-excursion (re-search-forward "^---")))
+ (other middle))
+ (while (re-search-forward "^\\(?:!.*\n\\)+" middle t)
+ (smerge-refine-subst (match-beginning 0) (match-end 0)
+ (save-excursion
+ (goto-char other)
+ (re-search-forward "^\\(?:!.*\n\\)+" end)
+ (setq other (match-end 0))
+ (match-beginning 0))
+ other
+ props 'diff-refine-preproc))))
+ (t ;; Normal diffs.
+ (let ((beg1 (1+ (point))))
+ (when (re-search-forward "^---.*\n" end t)
+ ;; It's a combined add&remove, so there's something to do.
+ (smerge-refine-subst beg1 (match-beginning 0)
+ (match-end 0) end
+ props 'diff-refine-preproc))))))))
+
+
;; provide the package
(provide 'diff-mode)
diff --git a/lisp/diff.el b/lisp/diff.el
index 75ae34d5f2a..add3390881f 100644
--- a/lisp/diff.el
+++ b/lisp/diff.el
@@ -73,6 +73,10 @@ were found."
(if (equal 0 code) " (no differences)" "")
(current-time-string))))))
+(defvar diff-old-file nil)
+(defvar diff-new-file nil)
+(defvar diff-extra-args nil)
+
;;;###autoload
(defun diff (old new &optional switches no-async)
"Find and display the differences between OLD and NEW files.
@@ -125,9 +129,13 @@ With prefix arg, prompt for diff switches."
(erase-buffer))
(buffer-enable-undo (current-buffer))
(diff-mode)
+ ;; Use below 2 vars for backward-compatibility.
+ (set (make-local-variable 'diff-old-file) old)
+ (set (make-local-variable 'diff-new-file) new)
+ (set (make-local-variable 'diff-extra-args) (list switches no-async))
(set (make-local-variable 'revert-buffer-function)
- `(lambda (ignore-auto noconfirm)
- (diff ',old ',new ',switches ',no-async)))
+ (lambda (ignore-auto noconfirm)
+ (apply 'diff diff-old-file diff-new-file diff-extra-args)))
(set (make-local-variable 'diff-old-temp-file) old-alt)
(set (make-local-variable 'diff-new-temp-file) new-alt)
(setq default-directory thisdir)
@@ -187,5 +195,5 @@ With prefix arg, prompt for diff switches."
(provide 'diff)
-;;; arch-tag: 7de2c29b-7ea5-4b85-9b9d-72dd860de2bd
+;; arch-tag: 7de2c29b-7ea5-4b85-9b9d-72dd860de2bd
;;; diff.el ends here
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 8d0f184eb7c..1ac6208313a 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -253,9 +253,20 @@ List has a form of (file-name full-file-name (attribute-list))"
;;;###autoload
(defun dired-do-chmod (&optional arg)
"Change the mode of the marked (or next ARG) files.
-This calls chmod, thus symbolic modes like `g+w' are allowed."
+Symbolic modes like `g+w' are allowed."
(interactive "P")
- (dired-do-chxxx "Mode" dired-chmod-program 'chmod arg))
+ (let* ((files (dired-get-marked-files t arg))
+ (modes (dired-mark-read-string
+ "Change mode of %s to: " nil
+ 'chmod arg files))
+ (num-modes (if (string-match "^[0-7]+" modes)
+ (string-to-number modes 8))))
+ (dolist (file files)
+ (set-file-modes
+ file
+ (if num-modes num-modes
+ (file-modes-symbolic-to-number modes (file-modes file)))))
+ (dired-do-redisplay arg)))
;;;###autoload
(defun dired-do-chgrp (&optional arg)
@@ -452,6 +463,50 @@ with a prefix argument."
;;; Shell commands
+(defun dired-read-shell-command-default (files)
+ "Return a list of default commands for `dired-read-shell-command'."
+ (require 'mailcap)
+ (mailcap-parse-mailcaps)
+ (mailcap-parse-mimetypes)
+ (let* ((all-mime-type
+ ;; All unique MIME types from file extensions
+ (delete-dups (mapcar (lambda (file)
+ (mailcap-extension-to-mime
+ (file-name-extension file t)))
+ files)))
+ (all-mime-info
+ ;; All MIME info lists
+ (delete-dups (mapcar (lambda (mime-type)
+ (mailcap-mime-info mime-type 'all))
+ all-mime-type)))
+ (common-mime-info
+ ;; Intersection of mime-infos from different mime-types;
+ ;; or just the first MIME info for a single MIME type
+ (if (cdr all-mime-info)
+ (delq nil (mapcar (lambda (mi1)
+ (unless (memq nil (mapcar
+ (lambda (mi2)
+ (member mi1 mi2))
+ (cdr all-mime-info)))
+ mi1))
+ (car all-mime-info)))
+ (car all-mime-info)))
+ (commands
+ ;; Command strings from `viewer' field of the MIME info
+ (delq nil (mapcar (lambda (mime-info)
+ (let ((command (cdr (assoc 'viewer mime-info))))
+ (if (stringp command)
+ (replace-regexp-in-string
+ ;; Replace mailcap's `%s' placeholder
+ ;; with dired's `?' placeholder
+ "%s" "?"
+ (replace-regexp-in-string
+ ;; Remove the final filename placeholder
+ "\s*\\('\\)?%s\\1?\s*\\'" "" command nil t)
+ nil t))))
+ common-mime-info))))
+ commands))
+
(defun dired-read-shell-command (prompt arg files)
;; "Read a dired shell command prompting with PROMPT (using read-string).
;;ARG is the prefix arg and may be used to indicate in the prompt which
@@ -461,7 +516,8 @@ with a prefix argument."
nil 'shell files
(function read-string)
(format prompt (dired-mark-prompt arg files))
- nil 'shell-command-history))
+ nil 'shell-command-history
+ (dired-read-shell-command-default files)))
;; The in-background argument is only needed in Emacs 18 where
;; shell-command doesn't understand an appended ampersand `&'.
@@ -582,18 +638,6 @@ can be produced by `dired-get-marked-files', for example."
;; Return nil for sake of nconc in dired-bunch-files.
nil)
-;; In Emacs 19 this will return program's exit status.
-;; This is a separate function so that ange-ftp can redefine it.
-(defun dired-call-process (program discard &rest arguments)
-; "Run PROGRAM with output to current buffer unless DISCARD is t.
-;Remaining arguments are strings passed as command arguments to PROGRAM."
- ;; Look for a handler for default-directory in case it is a remote file name.
- (let ((handler
- (find-file-name-handler (directory-file-name default-directory)
- 'dired-call-process)))
- (if handler (apply handler 'dired-call-process
- program discard arguments)
- (apply 'call-process program nil (not discard) nil arguments))))
(defun dired-check-process (msg program &rest arguments)
; "Display MSG while running PROGRAM, and check for output.
@@ -610,8 +654,7 @@ can be produced by `dired-get-marked-files', for example."
(set-buffer err-buffer)
(erase-buffer)
(setq default-directory dir ; caller's default-directory
- err (not (eq 0
- (apply (function dired-call-process) program nil arguments))))
+ err (not (eq 0 (apply 'process-file program nil t nil arguments))))
(if err
(progn
(dired-log (concat program " " (prin1-to-string arguments) "\n"))
@@ -1337,7 +1380,7 @@ Special value `always' suppresses confirmation."
skipped (success-count 0) (total (length fn-list)))
(let (to overwrite-query
overwrite-backup-query) ; for dired-handle-overwrite
- (mapcar
+ (mapc
(function
(lambda (from)
(setq to (funcall name-constructor from))
@@ -1535,10 +1578,16 @@ Optional arg HOW-TO is used to set the value of the into-dir variable
"Create a directory called DIRECTORY."
(interactive
(list (read-file-name "Create directory: " (dired-current-directory))))
- (let ((expanded (directory-file-name (expand-file-name directory))))
- (make-directory expanded)
- (dired-add-file expanded)
- (dired-move-to-filename)))
+ (let* ((expanded (directory-file-name (expand-file-name directory)))
+ (try expanded) new)
+ ;; Find the topmost nonexistent parent dir (variable `new')
+ (while (and try (not (file-exists-p try)) (not (equal new try)))
+ (setq new try
+ try (directory-file-name (file-name-directory try))))
+ (make-directory expanded t)
+ (when new
+ (dired-add-file new)
+ (dired-move-to-filename))))
(defun dired-into-dir-with-symlinks (target)
(and (file-directory-p target)
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index b06ca1b0908..0be3aa393e1 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -939,7 +939,7 @@ dired."
;;; string. COMMAND may be a list of commands.
;;;
;;; * Return this command to `dired-guess-shell-command' which prompts user
-;;; with it. The list of commands is temporarily put into the history list.
+;;; with it. The list of commands is put into the list of default values.
;;; If a command is used successfully then it is stored permanently in
;;; `dired-shell-command-history'.
@@ -1172,56 +1172,28 @@ See `dired-guess-shell-alist-user'."
(defun dired-guess-shell-command (prompt files)
"Ask user with PROMPT for a shell command, guessing a default from FILES."
-
(let ((default (dired-guess-default files))
- default-list old-history val (failed t))
-
+ default-list val)
(if (null default)
;; Nothing to guess
(read-from-minibuffer prompt nil nil nil 'dired-shell-command-history)
-
- ;; Save current history list
- (setq old-history dired-shell-command-history)
-
(if (listp default)
-
;; More than one guess
(setq default-list default
default (car default)
prompt (concat
prompt
(format "{%d guesses} " (length default-list))))
-
;; Just one guess
(setq default-list (list default)))
-
- ;; Push all guesses onto history so that they can be retrieved with M-p
- ;; and put the first guess in the prompt but not in the initial value.
- (setq dired-shell-command-history
- (append default-list dired-shell-command-history)
- prompt (concat prompt (format "[%s] " default)))
-
- ;; The unwind-protect returns VAL, and we too.
- (unwind-protect
- ;; BODYFORM
- (progn
- (setq val (read-from-minibuffer prompt nil nil nil
- 'dired-shell-command-history)
- failed nil)
- ;; If we got a return, then use default.
- (if (equal val "")
- (setq val default))
- val)
-
- ;; UNWINDFORMS
- ;; Undo pushing onto the history list so that an aborted
- ;; command doesn't get the default in the next command.
- (setq dired-shell-command-history old-history)
- (if (not failed)
- (or (equal val (car-safe dired-shell-command-history))
- (setq dired-shell-command-history
- (cons val dired-shell-command-history))))))))
-
+ ;; Put the first guess in the prompt but not in the initial value.
+ (setq prompt (concat prompt (format "[%s] " default)))
+ ;; All guesses can be retrieved with M-n
+ (setq val (read-from-minibuffer prompt nil nil nil
+ 'dired-shell-command-history
+ default-list))
+ ;; If we got a return, then return default.
+ (if (equal val "") default val))))
;;; REDEFINE.
;;; Redefine dired-aux.el's version:
diff --git a/lisp/dired.el b/lisp/dired.el
index af700ac80a0..12cf16e56d3 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1258,6 +1258,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
(define-key map "$" 'dired-hide-subdir)
(define-key map "\M-$" 'dired-hide-all)
;; misc
+ (define-key map "\C-x\C-q" 'dired-toggle-read-only)
(define-key map "?" 'dired-summary)
(define-key map "\177" 'dired-unmark-backward)
(define-key map [remap undo] 'dired-undo)
@@ -1363,7 +1364,8 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
(define-key map [menu-bar immediate create-directory]
'(menu-item "Create Directory..." dired-create-directory))
(define-key map [menu-bar immediate wdired-mode]
- '(menu-item "Edit File Names" wdired-change-to-wdired-mode))
+ '(menu-item "Edit File Names" wdired-change-to-wdired-mode
+ :filter (lambda (x) (if (eq major-mode 'dired-mode) x))))
(define-key map [menu-bar regexp]
(cons "Regexp" (make-sparse-keymap "Regexp")))
@@ -1462,6 +1464,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
(define-key map [menu-bar operate]
(cons "Operate" (make-sparse-keymap "Operate")))
+
(define-key map
[menu-bar operate image-dired-delete-tag]
'(menu-item "Delete Image Tag..." image-dired-delete-tag
@@ -1665,18 +1668,28 @@ You can use it to recover marks, killed lines or subdirs."
(message "Change in dired buffer undone.
Actual changes in files cannot be undone by Emacs."))
+(defun dired-toggle-read-only ()
+ "Edit dired buffer with Wdired, or set it read-only.
+Call `wdired-change-to-wdired-mode' in dired buffers whose editing is
+supported by Wdired (the major mode of the dired buffer is `dired-mode').
+Otherwise, for buffers inheriting from dired-mode, call `toggle-read-only'."
+ (interactive)
+ (if (eq major-mode 'dired-mode)
+ (wdired-change-to-wdired-mode)
+ (toggle-read-only)))
+
(defun dired-next-line (arg)
"Move down lines then position at filename.
Optional prefix ARG says how many lines to move; default is one line."
(interactive "p")
- (next-line arg)
+ (forward-line arg)
(dired-move-to-filename))
(defun dired-previous-line (arg)
"Move up lines then position at filename.
Optional prefix ARG says how many lines to move; default is one line."
(interactive "p")
- (previous-line arg)
+ (forward-line (- arg))
(dired-move-to-filename))
(defun dired-next-dirline (arg &optional opoint)
@@ -2418,8 +2431,8 @@ Anything else, ask for each sub-directory."
"In Dired, delete the files flagged for deletion.
If NOMESSAGE is non-nil, we don't display any message
if there are no flagged files.
-`dired-recursive-deletes' controls whether
-deletion of non-empty directories is allowed."
+`dired-recursive-deletes' controls whether deletion of
+non-empty directories is allowed."
(interactive)
(let* ((dired-marker-char dired-del-marker)
(regexp (dired-marker-regexp))
@@ -2436,8 +2449,8 @@ deletion of non-empty directories is allowed."
(defun dired-do-delete (&optional arg)
"Delete all marked (or next ARG) files.
-`dired-recursive-deletes' controls whether
-deletion of non-empty directories is allowed."
+`dired-recursive-deletes' controls whether deletion of
+non-empty directories is allowed."
;; This is more consistent with the file marking feature than
;; dired-do-flagged-delete.
(interactive "P")
@@ -3251,6 +3264,8 @@ Anything else means ask for each directory."
(dired-dnd-handle-local-file uri action)
nil)))
+(declare-function dired-relist-entry "dired-aux" (file))
+
(defun dired-dnd-handle-local-file (uri action)
"Copy, move or link a file to the dired directory.
URI is the file to handle, ACTION is one of copy, move, link or ask.
@@ -3334,7 +3349,7 @@ Ask means pop up a menu for the user to select one of copy, move or link."
(dired dired-dir)
;; The following elements of `desktop-buffer-misc' are the keys
;; from `dired-subdir-alist'.
- (mapcar 'dired-maybe-insert-subdir (cdr desktop-buffer-misc))
+ (mapc 'dired-maybe-insert-subdir (cdr desktop-buffer-misc))
(current-buffer))
(message "Desktop: Directory %s no longer exists." dir)
(when desktop-missing-file-warning (sit-for 1))
diff --git a/lisp/dirtrack.el b/lisp/dirtrack.el
index 11442d8f6f5..86e64eeb453 100644
--- a/lisp/dirtrack.el
+++ b/lisp/dirtrack.el
@@ -57,18 +57,12 @@
;; add 't' as a third element. Note that some of the functions in
;; 'comint.el' assume a single-line prompt (eg, comint-bol).
;;
-;; Determining this information may take some experimentation. Setting
-;; the variable `dirtrack-debug' may help; it causes the directory-tracking
-;; filter to log messages to the buffer `dirtrack-debug-buffer'. You can easily
-;; toggle this setting with the `dirtrack-debug-toggle' function.
+;; Determining this information may take some experimentation. Using
+;; `dirtrack-debug-mode' may help; it causes the directory-tracking
+;; filter to log messages to the buffer `dirtrack-debug-buffer'.
;;
-;; 3) Add a hook to shell-mode to enable the directory tracking:
-;;
-;; (add-hook 'shell-mode-hook
-;; (lambda () (add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)))
-;;
-;; You may wish to turn ordinary shell tracking off by calling
-;; `shell-dirtrack-toggle' or setting `shell-dirtrackp'.
+;; 3) Activate `dirtrack-mode'. You may wish to turn ordinary shell
+;; tracking off by calling `shell-dirtrack-mode'.
;;
;; Examples:
;;
@@ -147,7 +141,7 @@ be on a single line."
:type 'boolean)
(defcustom dirtrack-debug-buffer "*Directory Tracking Log*"
- "Buffer to write directory tracking debug information."
+ "Buffer in which to write directory tracking debug information."
:group 'dirtrack
:type 'string)
@@ -196,49 +190,53 @@ and ends with a forward slash."
(concat (match-string 1 dir) ":" (match-string 2 dir))
dir))
-;; Copied from shell.el
-(defun dirtrack-toggle ()
- "Enable or disable Dirtrack directory tracking in a shell buffer."
- (interactive)
- (if (setq dirtrackp (not dirtrackp))
+
+;;;###autoload
+(define-minor-mode dirtrack-mode
+ "Enable or disable Dirtrack directory tracking in a shell buffer.
+This method requires that your shell prompt contain the full
+current working directory at all times, and that `dirtrack-list'
+is set to match the prompt. This is an alternative to
+`shell-dirtrack-mode', which works differently, by tracking `cd'
+and similar commands which change the shell working directory."
+ nil nil nil
+ (if dirtrack-mode
(add-hook 'comint-preoutput-filter-functions 'dirtrack nil t)
- (remove-hook 'comint-preoutput-filter-functions 'dirtrack t))
- (message "Directory tracking %s" (if dirtrackp "ON" "OFF")))
+ (remove-hook 'comint-preoutput-filter-functions 'dirtrack t)))
-(defun dirtrack-debug-toggle ()
+(define-obsolete-function-alias 'dirtrack-toggle 'dirtrack-mode "23.1")
+(define-obsolete-variable-alias 'dirtrackp 'dirtrack-mode "23.1")
+
+
+(define-minor-mode dirtrack-debug-mode
"Enable or disable Dirtrack debugging."
- (interactive)
- (setq dirtrack-debug (not dirtrack-debug))
- (message "Directory debugging %s" (if dirtrack-debug "ON" "OFF"))
- (and dirtrack-debug
- (display-buffer (get-buffer-create dirtrack-debug-buffer))))
+ nil nil nil
+ (if dirtrack-debug-mode
+ (display-buffer (get-buffer-create dirtrack-debug-buffer))))
+
+(define-obsolete-function-alias 'dirtrack-debug-toggle 'dirtrack-debug-mode
+ "23.1")
+(define-obsolete-variable-alias 'dirtrack-debug 'dirtrack-debug-mode "23.1")
+
(defun dirtrack-debug-message (string)
- (let ((buf (current-buffer))
- (debug-buf (get-buffer-create dirtrack-debug-buffer))
- )
- (set-buffer debug-buf)
- (goto-char (point-max))
- (insert (concat string "\n"))
- (set-buffer buf)
- ))
+ "Insert string at the end of `dirtrack-debug-buffer'."
+ (when dirtrack-debug-mode
+ (with-current-buffer (get-buffer-create dirtrack-debug-buffer)
+ (goto-char (point-max))
+ (insert (concat string "\n")))))
;;;###autoload
(defun dirtrack (input)
"Determine the current directory by scanning the process output for a prompt.
The prompt to look for is the first item in `dirtrack-list'.
-You can toggle directory tracking by using the function `dirtrack-toggle'.
+You can toggle directory tracking by using the function `dirtrack-mode'.
If directory tracking does not seem to be working, you can use the
-function `dirtrack-debug-toggle' to turn on debugging output.
-
-You can enable directory tracking by adding this function to
-`comint-output-filter-functions'."
- (if (or (null dirtrackp)
- ;; No output?
- (eq (point) (point-min)))
- nil
+function `dirtrack-debug-mode' to turn on debugging output."
+ (unless (or (null dirtrack-mode)
+ (eq (point) (point-min))) ; no output?
(let (prompt-path
(current-dir default-directory)
(dirtrack-regexp (nth 0 dirtrack-list))
@@ -247,40 +245,31 @@ You can enable directory tracking by adding this function to
(multi-line (nth 2 dirtrack-list)))
(save-excursion
;; No match
- (if (null (string-match dirtrack-regexp input))
- (and dirtrack-debug
- (dirtrack-debug-message
- (format
- "Input `%s' failed to match `dirtrack-regexp'" input)))
+ (if (not (string-match dirtrack-regexp input))
+ (dirtrack-debug-message
+ (format "Input `%s' failed to match `dirtrack-regexp'" input))
(setq prompt-path (match-string match-num input))
;; Empty string
(if (not (> (length prompt-path) 0))
- (and dirtrack-debug
- (dirtrack-debug-message "Match is empty string"))
+ (dirtrack-debug-message "Match is empty string")
;; Transform prompts into canonical forms
(setq prompt-path (funcall dirtrack-directory-function
- prompt-path))
- (setq current-dir (funcall dirtrack-canonicalize-function
+ prompt-path)
+ current-dir (funcall dirtrack-canonicalize-function
current-dir))
- (and dirtrack-debug
- (dirtrack-debug-message
- (format
- "Prompt is %s\nCurrent directory is %s"
- prompt-path current-dir)))
+ (dirtrack-debug-message
+ (format "Prompt is %s\nCurrent directory is %s"
+ prompt-path current-dir))
;; Compare them
(if (or (string= current-dir prompt-path)
- (string= current-dir
- (abbreviate-file-name prompt-path)))
- (and dirtrack-debug
- (dirtrack-debug-message
- (format "Not changing directory")))
+ (string= current-dir (abbreviate-file-name prompt-path)))
+ (dirtrack-debug-message (format "Not changing directory"))
;; It's possible that Emacs will think the directory
;; won't exist (eg, rlogin buffers)
(if (file-accessible-directory-p prompt-path)
;; Change directory
(and (shell-process-cd prompt-path)
(run-hooks 'dirtrack-directory-change-hook)
- dirtrack-debug
(dirtrack-debug-message
(format "Changing directory to %s" prompt-path)))
(error "Directory %s does not exist" prompt-path)))
diff --git a/lisp/disp-table.el b/lisp/disp-table.el
index 5a9a69680bf..653d5b8360b 100644
--- a/lisp/disp-table.el
+++ b/lisp/disp-table.el
@@ -75,7 +75,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
;;;###autoload
(defun describe-display-table (dt)
"Describe the display table DT in a help buffer."
- (with-output-to-temp-buffer "*Help*"
+ (with-help-window "*Help*"
(princ "\nTruncation glyph: ")
(prin1 (display-table-slot dt 'truncation))
(princ "\nWrap glyph: ")
@@ -97,8 +97,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
(aset vector i (aref dt i))
(setq i (1+ i)))
(describe-vector vector))
- (help-mode))
- (print-help-return-message)))
+ (help-mode))))
;;;###autoload
(defun describe-current-display-table ()
@@ -220,7 +219,7 @@ with either the `--unibyte' option or the EMACS_UNIBYTE environment
variable, or else customize `enable-multibyte-characters'.
With prefix argument, this command enables European character display
-if arg is positive, disables it otherwise. Otherwise, it toggles
+if ARG is positive, disables it otherwise. Otherwise, it toggles
European character display.
When this mode is enabled, characters in the range of 160 to 255
@@ -264,5 +263,5 @@ for users who call this function in `.emacs'."
(provide 'disp-table)
-;;; arch-tag: ffe4c28c-960c-47aa-b8a8-ae89d371ffc7
+;; arch-tag: ffe4c28c-960c-47aa-b8a8-ae89d371ffc7
;;; disp-table.el ends here
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
new file mode 100644
index 00000000000..5443bc3672e
--- /dev/null
+++ b/lisp/doc-view.el
@@ -0,0 +1,973 @@
+;;; doc-view.el --- View PDF/PostScript/DVI files in Emacs
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+;;
+;; Author: Tassilo Horn <tassilo@member.fsf.org>
+;; Maintainer: Tassilo Horn <tassilo@member.fsf.org>
+;; Keywords: files, pdf, ps, dvi
+
+;; 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 3, 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.
+
+;;; Requirements:
+
+;; doc-view.el requires GNU Emacs 22.1 or newer. You also need Ghostscript,
+;; `dvipdfm' which comes with teTeX and `pdftotext', which comes with xpdf
+;; (http://www.foolabs.com/xpdf/) or poppler (http://poppler.freedesktop.org/).
+
+;;; Commentary:
+
+;; DocView is a document viewer for Emacs. It converts PDF, PS and DVI files
+;; to a set of PNG files, one PNG for each page, and displays the PNG images
+;; inside an Emacs buffer. This buffer uses `doc-view-mode' which provides
+;; convenient key bindings for browsing the document.
+;;
+;; To use it simply open a document file with
+;;
+;; C-x C-f ~/path/to/document RET
+;;
+;; and the document will be converted and displayed, if your emacs supports png
+;; images. With `C-c C-c' you can toggle between the rendered images
+;; representation and the source text representation of the document.
+;;
+;; Since conversion may take some time all the PNG images are cached in a
+;; subdirectory of `doc-view-cache-directory' and reused when you want to view
+;; that file again. To reconvert a document hit `g' (`doc-view-reconvert-doc')
+;; when displaying the document. To delete all cached files use
+;; `doc-view-clear-cache'. To open the cache with dired, so that you can tidy
+;; it out use `doc-view-dired-cache'.
+;;
+;; When conversion in underway the first page will be displayed as soon as it
+;; is available and the available pages are refreshed every
+;; `doc-view-conversion-refresh-interval' seconds. If that variable is nil the
+;; pages won't be displayed before conversion of the document finished
+;; completely.
+;;
+;; DocView lets you select a slice of the displayed pages. This slice will be
+;; remembered and applied to all pages of the current document. This enables
+;; you to cut away the margins of a document to save some space. To select a
+;; slice you can use `doc-view-set-slice' (bound to `s s') which will query you
+;; for the coordinates of the slice's top-left corner and its width and height.
+;; A much more convenient way to do the same is offered by the command
+;; `doc-view-set-slice-using-mouse' (bound to `s m'). After invokation you
+;; only have to press mouse-1 at the top-left corner and drag it to the
+;; bottom-right corner of the desired slice. To reset the slice use
+;; `doc-view-reset-slice' (bound to `s r').
+;;
+;; You can also search within the document. The command `doc-view-search'
+;; (bound to `C-s') queries for a search regexp and initializes a list of all
+;; matching pages and messages how many match-pages were found. After that you
+;; can jump to the next page containing a match with an additional `C-s'. With
+;; `C-r' you can do the same, but backwards. To search for a new regexp give a
+;; prefix arg to one of the search functions, e.g. by typing `C-u C-s'. The
+;; searching works by using a plain text representation of the document. If
+;; that doesn't already exist the first invokation of `doc-view-search' (or
+;; `doc-view-search-backward') starts the conversion. When that finishes and
+;; you're still viewing the document (i.e. you didn't switch to another buffer)
+;; you're queried for the regexp then.
+;;
+;; Dired users can simply hit `v' on a document file. If it's a PS, PDF or DVI
+;; it will be opened using `doc-view-mode'.
+;;
+
+;;; Configuration:
+
+;; If the images are too small or too big you should set the "-rXXX" option in
+;; `doc-view-ghostscript-options' to another value. (The bigger your screen,
+;; the higher the value.)
+;;
+;; This and all other options can be set with the customization interface.
+;; Simply do
+;;
+;; M-x customize-group RET doc-view RET
+;;
+;; and modify them to your needs.
+
+;;; Todo:
+
+;; - better menu.
+;; - don't use `find-file'.
+;; - Bind slicing to a drag event.
+;; - doc-view-fit-doc-to-window and doc-view-fit-window-to-doc.
+;; - zoom a the region around the cursor (like xdvi).
+;; - get rid of the silly arrow in the fringe.
+;; - improve anti-aliasing (pdf-utils gets it better).
+
+;;;; About isearch support
+
+;; I tried implementing isearch by setting
+;; `isearch-search-fun-function' buffer-locally, but that didn't
+;; work too good. The function doing the real search was called
+;; endlessly somehow. But even if we'd get that working no real
+;; isearch feeling comes up due to the missing match highlighting.
+;; Currently I display all lines containing a match in a tooltip and
+;; each C-s or C-r jumps directly to the next/previous page with a
+;; match. With isearch we could only display the current match. So
+;; we had to decide if another C-s jumps to the next page with a
+;; match (thus only the first match in a page will be displayed in a
+;; tooltip) or to the next match, which would do nothing visible
+;; (except the tooltip) if the next match is on the same page.
+
+;; And it's much slower than the current search facility, because
+;; isearch really searches for each step forward or backward wheras
+;; the current approach searches once and then it knows to which
+;; pages to jump.
+
+;; Anyway, if someone with better isearch knowledge wants to give it a try,
+;; feel free to do it. --Tassilo
+
+;;; Code:
+
+(require 'dired)
+(require 'image-mode)
+(require 'jka-compr)
+
+;;;; Customization Options
+
+(defgroup doc-view nil
+ "In-buffer viewer for PDF, PostScript and DVI files."
+ :link '(function-link doc-view)
+ :version "22.2"
+ :group 'applications
+ :group 'multimedia
+ :prefix "doc-view-")
+
+(defcustom doc-view-ghostscript-program (executable-find "gs")
+ "Program to convert PS and PDF files to PNG."
+ :type 'file
+ :group 'doc-view)
+
+(defcustom doc-view-ghostscript-options
+ '("-dSAFER" ;; Avoid security problems when rendering files from untrusted
+ ;; sources.
+ "-dNOPAUSE" "-sDEVICE=png16m" "-dTextAlphaBits=4"
+ "-dBATCH" "-dGraphicsAlphaBits=4" "-dQUIET")
+ "A list of options to give to ghostscript."
+ :type '(repeat string)
+ :group 'doc-view)
+
+(defcustom doc-view-resolution 100
+ "Dots per inch resolution used to render the documents.
+Higher values result in larger images."
+ :type 'number
+ :group 'doc-view)
+
+(defcustom doc-view-dvipdfm-program (executable-find "dvipdfm")
+ "Program to convert DVI files to PDF.
+
+DVI file will be converted to PDF before the resulting PDF is
+converted to PNG."
+ :type 'file
+ :group 'doc-view)
+
+(defcustom doc-view-ps2pdf-program (executable-find "ps2pdf")
+ "Program to convert PS files to PDF.
+
+PS files will be converted to PDF before searching is possible."
+ :type 'file
+ :group 'doc-view)
+
+(defcustom doc-view-pdftotext-program (executable-find "pdftotext")
+ "Program to convert PDF files to plain text.
+
+Needed for searching."
+ :type 'file
+ :group 'doc-view)
+
+(defcustom doc-view-cache-directory
+ (expand-file-name (format "docview%d" (user-uid))
+ temporary-file-directory)
+ "The base directory, where the PNG images will be saved."
+ :type 'directory
+ :group 'doc-view)
+
+(defcustom doc-view-conversion-buffer "*doc-view conversion output*"
+ "The buffer where messages from the converter programs go to."
+ :type 'string
+ :group 'doc-view)
+
+(defcustom doc-view-conversion-refresh-interval 3
+ "Interval in seconds between refreshes of the DocView buffer while converting.
+After such a refresh newly converted pages will be available for
+viewing. If set to nil there won't be any refreshes and the
+pages won't be displayed before conversion of the whole document
+has finished."
+ :type 'integer
+ :group 'doc-view)
+
+;;;; Internal Variables
+
+(defvar doc-view-current-files nil
+ "Only used internally.")
+
+(defvar doc-view-current-page nil
+ "Only used internally.")
+
+(defvar doc-view-current-converter-process nil
+ "Only used internally.")
+
+(defvar doc-view-current-timer nil
+ "Only used internally.")
+
+(defvar doc-view-current-slice nil
+ "Only used internally.")
+
+(defvar doc-view-current-cache-dir nil
+ "Only used internally.")
+
+(defvar doc-view-current-search-matches nil
+ "Only used internally.")
+
+(defvar doc-view-current-image nil
+ "Only used internally.")
+(defvar doc-view-current-overlay)
+(defvar doc-view-pending-cache-flush nil)
+
+(defvar doc-view-current-info nil
+ "Only used internally.")
+
+(defvar doc-view-previous-major-mode nil
+ "Only used internally.")
+
+;;;; DocView Keymaps
+
+(defvar doc-view-mode-map
+ (let ((map (make-sparse-keymap)))
+ (suppress-keymap map)
+ ;; Navigation in the document
+ (define-key map (kbd "n") 'doc-view-next-page)
+ (define-key map (kbd "p") 'doc-view-previous-page)
+ (define-key map (kbd "<next>") 'forward-page)
+ (define-key map (kbd "<prior>") 'backward-page)
+ (define-key map [remap forward-page] 'doc-view-next-page)
+ (define-key map [remap backward-page] 'doc-view-previous-page)
+ (define-key map (kbd "SPC") 'doc-view-scroll-up-or-next-page)
+ (define-key map (kbd "DEL") 'doc-view-scroll-down-or-previous-page)
+ (define-key map (kbd "M-<") 'doc-view-first-page)
+ (define-key map (kbd "M->") 'doc-view-last-page)
+ (define-key map [remap goto-line] 'doc-view-goto-page)
+ ;; Zoom in/out.
+ (define-key map "+" 'doc-view-enlarge)
+ (define-key map "-" 'doc-view-shrink)
+ ;; Killing/burying the buffer (and the process)
+ (define-key map (kbd "q") 'bury-buffer)
+ (define-key map (kbd "k") 'doc-view-kill-proc-and-buffer)
+ (define-key map (kbd "K") 'doc-view-kill-proc)
+ ;; Slicing the image
+ (define-key map (kbd "s s") 'doc-view-set-slice)
+ (define-key map (kbd "s m") 'doc-view-set-slice-using-mouse)
+ (define-key map (kbd "s r") 'doc-view-reset-slice)
+ ;; Searching
+ (define-key map (kbd "C-s") 'doc-view-search)
+ (define-key map (kbd "<find>") 'doc-view-search)
+ (define-key map (kbd "C-r") 'doc-view-search-backward)
+ ;; Scrolling
+ (define-key map [remap forward-char] 'image-forward-hscroll)
+ (define-key map [remap backward-char] 'image-backward-hscroll)
+ (define-key map [remap next-line] 'image-next-line)
+ (define-key map [remap previous-line] 'image-previous-line)
+ ;; Show the tooltip
+ (define-key map (kbd "C-t") 'doc-view-show-tooltip)
+ ;; Toggle between text and image display or editing
+ (define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
+ ;; Reconvert the current document
+ (define-key map (kbd "g") 'revert-buffer)
+ (define-key map (kbd "r") 'revert-buffer)
+ map)
+ "Keymap used by `doc-view-mode' when displaying a doc as a set of images.")
+
+(easy-menu-define doc-view-menu doc-view-mode-map
+ "Menu for Doc View mode."
+ '("DocView"
+ ["Set Slice" doc-view-set-slice-using-mouse]
+ ["Set Slice (manual)" doc-view-set-slice]
+ ["Reset Slice" doc-view-reset-slice]
+ "---"
+ ["Search" doc-view-search]
+ ["Search Backwards" doc-view-search-backward]
+ ["Toggle display" doc-view-toggle-display]
+ ))
+
+(defvar doc-view-minor-mode-map
+ (let ((map (make-sparse-keymap)))
+ ;; Toggle between text and image display or editing
+ (define-key map (kbd "C-c C-c") 'doc-view-toggle-display)
+ map)
+ "Keymap used by `doc-minor-view-mode'.")
+
+;;;; Navigation Commands
+
+(defun doc-view-goto-page (page)
+ "View the page given by PAGE."
+ (interactive "nPage: ")
+ (let ((len (length doc-view-current-files)))
+ (if (< page 1)
+ (setq page 1)
+ (when (> page len)
+ (setq page len)))
+ (setq doc-view-current-page page
+ doc-view-current-info
+ (concat
+ (propertize
+ (format "Page %d of %d."
+ doc-view-current-page
+ len) 'face 'bold)
+ ;; Tell user if converting isn't finished yet
+ (if doc-view-current-converter-process
+ " (still converting...)\n"
+ "\n")
+ ;; Display context infos if this page matches the last search
+ (when (and doc-view-current-search-matches
+ (assq doc-view-current-page
+ doc-view-current-search-matches))
+ (concat (propertize "Search matches:\n" 'face 'bold)
+ (let ((contexts ""))
+ (dolist (m (cdr (assq doc-view-current-page
+ doc-view-current-search-matches)))
+ (setq contexts (concat contexts " - \"" m "\"\n")))
+ contexts)))))
+ ;; Update the buffer
+ (doc-view-insert-image (nth (1- page) doc-view-current-files)
+ :pointer 'arrow)
+ (overlay-put doc-view-current-overlay 'help-echo doc-view-current-info)
+ (goto-char (point-min))
+ ;; This seems to be needed for set-window-hscroll (in
+ ;; image-forward-hscroll) to do something useful, I don't have time to
+ ;; debug this now. :-( --Stef
+ (forward-char)))
+
+(defun doc-view-next-page (&optional arg)
+ "Browse ARG pages forward."
+ (interactive "p")
+ (doc-view-goto-page (+ doc-view-current-page (or arg 1))))
+
+(defun doc-view-previous-page (&optional arg)
+ "Browse ARG pages backward."
+ (interactive "p")
+ (doc-view-goto-page (- doc-view-current-page (or arg 1))))
+
+(defun doc-view-first-page ()
+ "View the first page."
+ (interactive)
+ (doc-view-goto-page 1))
+
+(defun doc-view-last-page ()
+ "View the last page."
+ (interactive)
+ (doc-view-goto-page (length doc-view-current-files)))
+
+(defun doc-view-scroll-up-or-next-page ()
+ "Scroll page up if possible, else goto next page."
+ (interactive)
+ (condition-case nil
+ (scroll-up)
+ (error (doc-view-next-page))))
+
+(defun doc-view-scroll-down-or-previous-page ()
+ "Scroll page down if possible, else goto previous page."
+ (interactive)
+ (condition-case nil
+ (scroll-down)
+ (error (doc-view-previous-page)
+ (goto-char (point-max)))))
+
+;;;; Utility Functions
+
+(defun doc-view-kill-proc ()
+ "Kill the current converter process."
+ (interactive)
+ (when doc-view-current-converter-process
+ (kill-process doc-view-current-converter-process)
+ (setq doc-view-current-converter-process nil))
+ (when doc-view-current-timer
+ (cancel-timer doc-view-current-timer)
+ (setq doc-view-current-timer nil))
+ (setq mode-line-process nil))
+
+(defun doc-view-kill-proc-and-buffer ()
+ "Kill the current converter process and buffer."
+ (interactive)
+ (doc-view-kill-proc)
+ (when (eq major-mode 'doc-view-mode)
+ (kill-buffer (current-buffer))))
+
+(defun doc-view-make-safe-dir (dir)
+ (condition-case nil
+ (let ((umask (default-file-modes)))
+ (unwind-protect
+ (progn
+ ;; Create temp files with strict access rights. It's easy to
+ ;; loosen them later, whereas it's impossible to close the
+ ;; time-window of loose permissions otherwise.
+ (set-default-file-modes #o0700)
+ (make-directory dir))
+ ;; Reset the umask.
+ (set-default-file-modes umask)))
+ (file-already-exists
+ (if (file-symlink-p dir)
+ (error "Danger: %s points to a symbolic link" dir))
+ ;; In case it was created earlier with looser rights.
+ ;; We could check the mode info returned by file-attributes, but it's
+ ;; a pain to parse and it may not tell you what we want under
+ ;; non-standard file-systems. So let's just say what we want and let
+ ;; the underlying C code and file-system figure it out.
+ ;; This also ends up checking a bunch of useful conditions: it makes
+ ;; sure we have write-access to the directory and that we own it, thus
+ ;; closing a bunch of security holes.
+ (set-file-modes dir #o0700))))
+
+(defun doc-view-current-cache-dir ()
+ "Return the directory where the png files of the current doc should be saved.
+It's a subdirectory of `doc-view-cache-directory'."
+ (if doc-view-current-cache-dir
+ doc-view-current-cache-dir
+ ;; Try and make sure doc-view-cache-directory exists and is safe.
+ (doc-view-make-safe-dir doc-view-cache-directory)
+ ;; Now compute the subdirectory to use.
+ (setq doc-view-current-cache-dir
+ (file-name-as-directory
+ (expand-file-name
+ (let ((doc buffer-file-name))
+ (concat (file-name-nondirectory doc)
+ "-"
+ (with-temp-buffer
+ (insert-file-contents-literally doc)
+ (md5 (current-buffer)))))
+ doc-view-cache-directory)))))
+
+(defun doc-view-remove-if (predicate list)
+ "Return LIST with all items removed that satisfy PREDICATE."
+ (let (new-list)
+ (dolist (item list (nreverse new-list))
+ (when (not (funcall predicate item))
+ (setq new-list (cons item new-list))))))
+
+;;;; Conversion Functions
+
+(defvar doc-view-shrink-factor 1.125)
+
+(defun doc-view-enlarge (factor)
+ "Enlarge the document."
+ (interactive (list doc-view-shrink-factor))
+ (set (make-local-variable 'doc-view-resolution)
+ (* factor doc-view-resolution))
+ (doc-view-reconvert-doc))
+
+(defun doc-view-shrink (factor)
+ "Shrink the document."
+ (interactive (list doc-view-shrink-factor))
+ (doc-view-enlarge (/ 1.0 factor)))
+
+(defun doc-view-reconvert-doc ()
+ "Reconvert the current document.
+Should be invoked when the cached images aren't up-to-date."
+ (interactive)
+ (doc-view-kill-proc)
+ ;; Clear the old cached files
+ (when (file-exists-p (doc-view-current-cache-dir))
+ (dired-delete-file (doc-view-current-cache-dir) 'always))
+ (doc-view-initiate-display))
+
+(defun doc-view-dvi->pdf-sentinel (proc event)
+ "If DVI->PDF conversion was successful, convert the PDF to PNG now."
+ (if (not (string-match "finished" event))
+ (message "DocView: dvi->pdf process changed status to %s." event)
+ (set-buffer (process-get proc 'buffer))
+ (setq doc-view-current-converter-process nil
+ mode-line-process nil)
+ ;; Now go on converting this PDF to a set of PNG files.
+ (let* ((pdf (process-get proc 'pdf-file))
+ (png (expand-file-name "page-%d.png"
+ (doc-view-current-cache-dir))))
+ (doc-view-pdf/ps->png pdf png))))
+
+(defun doc-view-dvi->pdf (dvi pdf)
+ "Convert DVI to PDF asynchronously."
+ (setq doc-view-current-converter-process
+ (start-process "dvi->pdf" doc-view-conversion-buffer
+ doc-view-dvipdfm-program
+ "-o" pdf dvi)
+ mode-line-process (list (format ":%s" doc-view-current-converter-process)))
+ (set-process-sentinel doc-view-current-converter-process
+ 'doc-view-dvi->pdf-sentinel)
+ (process-put doc-view-current-converter-process 'buffer (current-buffer))
+ (process-put doc-view-current-converter-process 'pdf-file pdf))
+
+(defun doc-view-pdf/ps->png-sentinel (proc event)
+ "If PDF/PS->PNG conversion was successful, update the display."
+ (if (not (string-match "finished" event))
+ (message "DocView: converter process changed status to %s." event)
+ (set-buffer (process-get proc 'buffer))
+ (setq doc-view-current-converter-process nil
+ mode-line-process nil)
+ (when doc-view-current-timer
+ (cancel-timer doc-view-current-timer)
+ (setq doc-view-current-timer nil))
+ ;; Yippie, finished. Update the display!
+ (doc-view-display buffer-file-name)))
+
+(defun doc-view-pdf/ps->png (pdf-ps png)
+ "Convert PDF-PS to PNG asynchronously."
+ (setq doc-view-current-converter-process
+ (apply 'start-process
+ (append (list "pdf/ps->png" doc-view-conversion-buffer
+ doc-view-ghostscript-program)
+ doc-view-ghostscript-options
+ (list (format "-r%d" (round doc-view-resolution)))
+ (list (concat "-sOutputFile=" png))
+ (list pdf-ps)))
+ mode-line-process (list (format ":%s" doc-view-current-converter-process)))
+ (process-put doc-view-current-converter-process
+ 'buffer (current-buffer))
+ (set-process-sentinel doc-view-current-converter-process
+ 'doc-view-pdf/ps->png-sentinel)
+ (when doc-view-conversion-refresh-interval
+ (setq doc-view-current-timer
+ (run-at-time "1 secs" doc-view-conversion-refresh-interval
+ 'doc-view-display
+ buffer-file-name))))
+
+(defun doc-view-pdf->txt-sentinel (proc event)
+ (if (not (string-match "finished" event))
+ (message "DocView: converter process changed status to %s." event)
+ (let ((current-buffer (current-buffer))
+ (proc-buffer (process-get proc 'buffer)))
+ (set-buffer proc-buffer)
+ (setq doc-view-current-converter-process nil
+ mode-line-process nil)
+ ;; If the user looks at the DocView buffer where the conversion was
+ ;; performed, search anew. This time it will be queried for a regexp.
+ (when (eq current-buffer proc-buffer)
+ (doc-view-search nil)))))
+
+(defun doc-view-pdf->txt (pdf txt)
+ "Convert PDF to TXT asynchronously."
+ (setq doc-view-current-converter-process
+ (start-process "pdf->txt" doc-view-conversion-buffer
+ doc-view-pdftotext-program "-raw"
+ pdf txt)
+ mode-line-process (list (format ":%s" doc-view-current-converter-process)))
+ (set-process-sentinel doc-view-current-converter-process
+ 'doc-view-pdf->txt-sentinel)
+ (process-put doc-view-current-converter-process 'buffer (current-buffer)))
+
+(defun doc-view-ps->pdf-sentinel (proc event)
+ (if (not (string-match "finished" event))
+ (message "DocView: converter process changed status to %s." event)
+ (set-buffer (process-get proc 'buffer))
+ (setq doc-view-current-converter-process nil
+ mode-line-process nil)
+ ;; Now we can transform to plain text.
+ (doc-view-pdf->txt (process-get proc 'pdf-file)
+ (expand-file-name "doc.txt"
+ (doc-view-current-cache-dir)))))
+
+(defun doc-view-ps->pdf (ps pdf)
+ "Convert PS to PDF asynchronously."
+ (setq doc-view-current-converter-process
+ (start-process "ps->pdf" doc-view-conversion-buffer
+ doc-view-ps2pdf-program
+ ;; Avoid security problems when rendering files from
+ ;; untrusted sources.
+ "-dSAFER"
+ ;; in-file and out-file
+ ps pdf)
+ mode-line-process (list (format ":%s" doc-view-current-converter-process)))
+ (set-process-sentinel doc-view-current-converter-process
+ 'doc-view-ps->pdf-sentinel)
+ (process-put doc-view-current-converter-process 'buffer (current-buffer))
+ (process-put doc-view-current-converter-process 'pdf-file pdf))
+
+(defun doc-view-convert-current-doc ()
+ "Convert `buffer-file-name' to a set of png files, one file per page.
+Those files are saved in the directory given by the function
+`doc-view-current-cache-dir'."
+ ;; Let stale files still display while we recompute the new ones, so only
+ ;; flush the cache when the conversion is over. One of the reasons why it
+ ;; is important to keep displaying the stale page is so that revert-buffer
+ ;; preserves the horizontal/vertical scroll settings (which are otherwise
+ ;; resets during the redisplay).
+ (setq doc-view-pending-cache-flush t)
+ (let ((png-file (expand-file-name "page-%d.png"
+ (doc-view-current-cache-dir))))
+ (make-directory (doc-view-current-cache-dir))
+ (if (not (string= (file-name-extension buffer-file-name) "dvi"))
+ ;; Convert to PNG images.
+ (doc-view-pdf/ps->png buffer-file-name png-file)
+ ;; DVI files have to be converted to PDF before Ghostscript can process
+ ;; it.
+ (doc-view-dvi->pdf buffer-file-name
+ (expand-file-name "doc.pdf"
+ doc-view-current-cache-dir)))))
+
+;;;; Slicing
+
+(defun doc-view-set-slice (x y width height)
+ "Set the slice of the images that should be displayed.
+You can use this function to tell doc-view not to display the
+margins of the document. It prompts for the top-left corner (X
+and Y) of the slice to display and its WIDTH and HEIGHT.
+
+See `doc-view-set-slice-using-mouse' for a more convenient way to
+do that. To reset the slice use `doc-view-reset-slice'."
+ (interactive
+ (let* ((size (image-size doc-view-current-image t))
+ (a (read-number (format "Top-left X (0..%d): " (car size))))
+ (b (read-number (format "Top-left Y (0..%d): " (cdr size))))
+ (c (read-number (format "Width (0..%d): " (- (car size) a))))
+ (d (read-number (format "Height (0..%d): " (- (cdr size) b)))))
+ (list a b c d)))
+ (setq doc-view-current-slice (list x y width height))
+ ;; Redisplay
+ (doc-view-goto-page doc-view-current-page))
+
+(defun doc-view-set-slice-using-mouse ()
+ "Set the slice of the images that should be displayed.
+You set the slice by pressing mouse-1 at its top-left corner and
+dragging it to its bottom-right corner. See also
+`doc-view-set-slice' and `doc-view-reset-slice'."
+ (interactive)
+ (let (x y w h done)
+ (while (not done)
+ (let ((e (read-event
+ (concat "Press mouse-1 at the top-left corner and "
+ "drag it to the bottom-right corner!"))))
+ (when (eq (car e) 'drag-mouse-1)
+ (setq x (car (posn-object-x-y (event-start e))))
+ (setq y (cdr (posn-object-x-y (event-start e))))
+ (setq w (- (car (posn-object-x-y (event-end e))) x))
+ (setq h (- (cdr (posn-object-x-y (event-end e))) y))
+ (setq done t))))
+ (doc-view-set-slice x y w h)))
+
+(defun doc-view-reset-slice ()
+ "Reset the current slice.
+After calling this function whole pages will be visible again."
+ (interactive)
+ (setq doc-view-current-slice nil)
+ ;; Redisplay
+ (doc-view-goto-page doc-view-current-page))
+
+;;;; Display
+
+(defun doc-view-insert-image (file &rest args)
+ "Insert the given png FILE.
+ARGS is a list of image descriptors."
+ (when doc-view-pending-cache-flush
+ (clear-image-cache)
+ (setq doc-view-pending-cache-flush nil))
+ (let ((image (apply 'create-image file 'png nil args)))
+ (setq doc-view-current-image image)
+ (move-overlay doc-view-current-overlay (point-min) (point-max))
+ (overlay-put doc-view-current-overlay 'display
+ (if doc-view-current-slice
+ (list (cons 'slice doc-view-current-slice) image)
+ image))))
+
+(defun doc-view-sort (a b)
+ "Return non-nil if A should be sorted before B.
+Predicate for sorting `doc-view-current-files'."
+ (or (< (length a) (length b))
+ (and (= (length a) (length b))
+ (string< a b))))
+
+(defun doc-view-display (doc)
+ "Start viewing the document DOC."
+ (set-buffer (get-file-buffer doc))
+ (setq doc-view-current-files
+ (sort (directory-files (doc-view-current-cache-dir) t
+ "page-[0-9]+\\.png" t)
+ 'doc-view-sort))
+ (when (> (length doc-view-current-files) 0)
+ (doc-view-goto-page doc-view-current-page)))
+
+(defun doc-view-buffer-message ()
+ ;; Only show this message initially, not when refreshing the buffer (in which
+ ;; case it's better to keep displaying the "stale" page while computing
+ ;; the fresh new ones).
+ (unless (overlay-get doc-view-current-overlay 'display)
+ (overlay-put doc-view-current-overlay 'display
+ (concat (propertize "Welcome to DocView!" 'face 'bold)
+ "\n"
+ "
+If you see this buffer it means that the document you want to view is being
+converted to PNG and the conversion of the first page hasn't finished yet or
+`doc-view-conversion-refresh-interval' is set to nil.
+
+For now these keys are useful:
+
+`q' : Bury this buffer. Conversion will go on in background.
+`k' : Kill the conversion process and this buffer.
+`K' : Kill the conversion process.\n"))))
+
+(defun doc-view-show-tooltip ()
+ (interactive)
+ (tooltip-show doc-view-current-info))
+
+;;;;; Toggle between editing and viewing
+
+(defun doc-view-toggle-display ()
+ "Toggle between editing a document as text or viewing it."
+ (interactive)
+ (if (eq major-mode 'doc-view-mode)
+ ;; Switch to editing mode
+ (progn
+ (doc-view-kill-proc)
+ (setq buffer-read-only nil)
+ (delete-overlay doc-view-current-overlay)
+ ;; Switch to the previously used major mode or fall back to fundamental
+ ;; mode.
+ (if doc-view-previous-major-mode
+ (funcall doc-view-previous-major-mode)
+ (fundamental-mode))
+ (doc-view-minor-mode 1))
+ ;; Switch to doc-view-mode
+ (when (and (buffer-modified-p)
+ (y-or-n-p "The buffer has been modified. Save the changes? "))
+ (save-buffer))
+ (doc-view-mode)))
+
+;;;; Searching
+
+(defun doc-view-search-internal (regexp file)
+ "Return a list of FILE's pages that contain text matching REGEXP.
+The value is an alist of the form (PAGE CONTEXTS) where PAGE is
+the pagenumber and CONTEXTS are all lines of text containing a match."
+ (with-temp-buffer
+ (insert-file-contents file)
+ (let ((page 1)
+ (lastpage 1)
+ matches)
+ (while (re-search-forward (concat "\\(?:\\([ ]\\)\\|\\("
+ regexp "\\)\\)") nil t)
+ (when (match-string 1) (incf page))
+ (when (match-string 2)
+ (if (/= page lastpage)
+ (push (cons page
+ (list (buffer-substring
+ (line-beginning-position)
+ (line-end-position))))
+ matches)
+ (setq matches (cons
+ (append
+ (or
+ ;; This page already is a match.
+ (car matches)
+ ;; This is the first match on page.
+ (list page))
+ (list (buffer-substring
+ (line-beginning-position)
+ (line-end-position))))
+ (cdr matches))))
+ (setq lastpage page)))
+ (nreverse matches))))
+
+(defun doc-view-search-no-of-matches (list)
+ "Extract the number of matches from the search result LIST."
+ (let ((no 0))
+ (dolist (p list)
+ (setq no (+ no (1- (length p)))))
+ no))
+
+(defun doc-view-search-backward (new-query)
+ "Call `doc-view-search' for backward search.
+If prefix NEW-QUERY is given, ask for a new regexp."
+ (interactive "P")
+ (doc-view-search new-query t))
+
+(defun doc-view-search (new-query &optional backward)
+ "Jump to the next match or initiate a new search if NEW-QUERY is given.
+If the current document hasn't been transformed to plain text
+till now do that first.
+If BACKWARD is non-nil, jump to the previous match."
+ (interactive "P")
+ (if (and (not new-query)
+ doc-view-current-search-matches)
+ (if backward
+ (doc-view-search-previous-match 1)
+ (doc-view-search-next-match 1))
+ ;; New search, so forget the old results.
+ (setq doc-view-current-search-matches nil)
+ (let ((txt (expand-file-name "doc.txt"
+ (doc-view-current-cache-dir))))
+ (if (file-readable-p txt)
+ (progn
+ (setq doc-view-current-search-matches
+ (doc-view-search-internal
+ (read-from-minibuffer "Regexp: ")
+ txt))
+ (message "DocView: search yielded %d matches."
+ (doc-view-search-no-of-matches
+ doc-view-current-search-matches)))
+ ;; We must convert to TXT first!
+ (if doc-view-current-converter-process
+ (message "DocView: please wait till conversion finished.")
+ (let ((ext (file-name-extension buffer-file-name)))
+ (cond
+ ((string= ext "pdf")
+ ;; Doc is a PDF, so convert it to TXT
+ (doc-view-pdf->txt buffer-file-name txt))
+ ((string= ext "ps")
+ ;; Doc is a PS, so convert it to PDF (which will be converted to
+ ;; TXT thereafter).
+ (doc-view-ps->pdf buffer-file-name
+ (expand-file-name "doc.pdf"
+ (doc-view-current-cache-dir))))
+ ((string= ext "dvi")
+ ;; Doc is a DVI. This means that a doc.pdf already exists in its
+ ;; cache subdirectory.
+ (doc-view-pdf->txt (expand-file-name "doc.pdf"
+ (doc-view-current-cache-dir))
+ txt))
+ (t (error "DocView doesn't know what to do")))))))))
+
+(defun doc-view-search-next-match (arg)
+ "Go to the ARGth next matching page."
+ (interactive "p")
+ (let* ((next-pages (doc-view-remove-if
+ (lambda (i) (<= (car i) doc-view-current-page))
+ doc-view-current-search-matches))
+ (page (car (nth (1- arg) next-pages))))
+ (if page
+ (doc-view-goto-page page)
+ (when (and
+ doc-view-current-search-matches
+ (y-or-n-p "No more matches after current page. Wrap to first match? "))
+ (doc-view-goto-page (caar doc-view-current-search-matches))))))
+
+(defun doc-view-search-previous-match (arg)
+ "Go to the ARGth previous matching page."
+ (interactive "p")
+ (let* ((prev-pages (doc-view-remove-if
+ (lambda (i) (>= (car i) doc-view-current-page))
+ doc-view-current-search-matches))
+ (page (car (nth (1- arg) (nreverse prev-pages)))))
+ (if page
+ (doc-view-goto-page page)
+ (when (and
+ doc-view-current-search-matches
+ (y-or-n-p "No more matches before current page. Wrap to last match? "))
+ (doc-view-goto-page (caar (last doc-view-current-search-matches)))))))
+
+;;;; User interface commands and the mode
+
+;; (put 'doc-view-mode 'mode-class 'special)
+
+(defun doc-view-initiate-display ()
+ ;; Switch to image display if possible
+ (if (and (display-images-p)
+ (image-type-available-p 'png))
+ (progn
+ (doc-view-buffer-message)
+ (setq doc-view-current-page (or doc-view-current-page 1))
+ (if (file-exists-p (doc-view-current-cache-dir))
+ (progn
+ (message "DocView: using cached files!")
+ (doc-view-display buffer-file-name))
+ (doc-view-convert-current-doc))
+ (message
+ "%s"
+ (substitute-command-keys
+ (concat "Type \\[doc-view-toggle-display] to toggle between "
+ "editing or viewing the document."))))
+ (message
+ "%s"
+ (substitute-command-keys
+ (concat "No image (png) support available. Type \\[doc-view-toggle-display] "
+ "to switch to an editing mode.")))))
+
+;;;###autoload
+(defun doc-view-mode ()
+ "Major mode in DocView buffers.
+You can use \\<doc-view-mode-map>\\[doc-view-toggle-display] to
+toggle between displaying the document or editing it as text."
+ (interactive)
+ (if jka-compr-really-do-compress
+ ;; This is a compressed file uncompressed by auto-compression-mode.
+ (when (y-or-n-p (concat "DocView: Cannot convert compressed file. "
+ "Save it uncompressed first? "))
+ (let ((file (read-file-name
+ "File: "
+ (file-name-directory buffer-file-name))))
+ (write-region (point-min) (point-max) file)
+ (kill-buffer nil)
+ (find-file file)
+ (doc-view-mode)))
+ (let* ((prev-major-mode (if (eq major-mode 'doc-view-mode)
+ doc-view-previous-major-mode
+ major-mode)))
+ (kill-all-local-variables)
+ (set (make-local-variable 'doc-view-previous-major-mode) prev-major-mode))
+ (make-local-variable 'doc-view-current-files)
+ (make-local-variable 'doc-view-current-image)
+ (make-local-variable 'doc-view-current-page)
+ (make-local-variable 'doc-view-current-converter-process)
+ (make-local-variable 'doc-view-current-timer)
+ (make-local-variable 'doc-view-current-slice)
+ (make-local-variable 'doc-view-current-cache-dir)
+ (make-local-variable 'doc-view-current-info)
+ (make-local-variable 'doc-view-current-search-matches)
+ (set (make-local-variable 'doc-view-current-overlay)
+ (make-overlay (point-min) (point-max) nil t))
+ (add-hook 'change-major-mode-hook
+ (lambda () (delete-overlay doc-view-current-overlay))
+ nil t)
+ (set (make-local-variable 'mode-line-position)
+ '(" P" (:eval (number-to-string doc-view-current-page))
+ "/" (:eval (number-to-string (length doc-view-current-files)))))
+ (set (make-local-variable 'cursor-type) nil)
+ (use-local-map doc-view-mode-map)
+ (set (make-local-variable 'after-revert-hook) 'doc-view-reconvert-doc)
+ (setq mode-name "DocView"
+ buffer-read-only t
+ major-mode 'doc-view-mode)
+ (doc-view-initiate-display)
+ (run-mode-hooks 'doc-view-mode-hook)))
+
+;;;###autoload
+(define-minor-mode doc-view-minor-mode
+ "Toggle Doc view minor mode.
+With arg, turn Doc view minor mode on if arg is positive, off otherwise.
+See the command `doc-view-mode' for more information on this mode."
+ nil " DocView" doc-view-minor-mode-map
+ :group 'doc-view
+ (when doc-view-minor-mode
+ (add-hook 'change-major-mode-hook (lambda () (doc-view-minor-mode -1)) nil t)
+ (message
+ "%s"
+ (substitute-command-keys
+ "Type \\[doc-view-toggle-display] to toggle between editing or viewing the document."))))
+
+(defun doc-view-clear-cache ()
+ "Delete the whole cache (`doc-view-cache-directory')."
+ (interactive)
+ (dired-delete-file doc-view-cache-directory 'always)
+ (make-directory doc-view-cache-directory))
+
+(defun doc-view-dired-cache ()
+ "Open `dired' in `doc-view-cache-directory'."
+ (interactive)
+ (dired doc-view-cache-directory))
+
+(provide 'doc-view)
+
+;; Local Variables:
+;; mode: outline-minor
+;; End:
+
+;; arch-tag: 5d6e5c5e-095f-489e-b4e4-1ca90a7d79be
+;;; doc-view.el ends here
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el
index c66cbc7933a..62b71640017 100644
--- a/lisp/dos-fns.el
+++ b/lisp/dos-fns.el
@@ -29,6 +29,9 @@
;;; Code:
+(declare-function int86) ;; Defined in C.
+(declare-function msdos-long-file-names) ;; Defined in C.
+
;; This overrides a trivial definition in files.el.
(defun convert-standard-filename (filename)
"Convert a standard file's name to something suitable for the current OS.
diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el
index 0de7f096507..4b307423fb5 100644
--- a/lisp/dos-w32.el
+++ b/lisp/dos-w32.el
@@ -370,6 +370,8 @@ filesystem mounted on drive Z:, FILESYSTEM could be \"Z:\"."
(defvar printer-name)
+(declare-function default-printer-name) ;; Defined in C.
+
(defun direct-print-region-function (start end
&optional lpr-prog
delete-text buf display
@@ -404,6 +406,8 @@ indicates a specific program should be invoked."
(direct-print-region-helper printer start end lpr-prog
delete-text buf display rest)))
+(defvar print-region-function)
+(defvar lpr-headers-switches)
(setq print-region-function 'direct-print-region-function)
;; Set this to nil if you have a port of the `pr' program
@@ -435,6 +439,7 @@ indicates a specific program should be invoked."
(direct-print-region-helper printer start end lpr-prog
delete-text buf display rest)))
+(defvar ps-print-region-function)
(setq ps-print-region-function 'direct-ps-print-region-function)
;(setq ps-lpr-command "gs")
diff --git a/lisp/double.el b/lisp/double.el
index 0b5cf110fbd..7d004eab6d9 100644
--- a/lisp/double.el
+++ b/lisp/double.el
@@ -75,7 +75,7 @@ Each entry is a list with three elements:
(string :tag "Twice"))))
(defcustom double-prefix-only t
- "*Non-nil means that Double mode mapping only works for prefix keys.
+ "Non-nil means that Double mode mapping only works for prefix keys.
That is, for any key `X' in `double-map', `X' alone will be mapped
but not `C-u X' or `ESC X' since the X is not the prefix key."
:group 'double
@@ -95,7 +95,7 @@ but not `C-u X' or `ESC X' since the X is not the prefix key."
(message ""))
(read-event)))
-(global-set-key [ignore] '(lambda () (interactive)))
+(global-set-key [ignore] 'ignore)
(or (boundp 'isearch-mode-map)
(load-library "isearch"))
@@ -139,76 +139,37 @@ but not `C-u X' or `ESC X' since the X is not the prefix key."
(append (substring exp 1) '(magic-start)))
(vector (aref exp 0)))))))
-;;; Key Translation Map
-
-(defun double-setup (enable-flag)
- (if enable-flag
- (progn
- ;; Set up key-translation-map as indicated by `double-map'.
- (kill-local-variable 'key-translation-map)
- (make-local-variable 'key-translation-map)
- (setq key-translation-map (if (keymapp key-translation-map)
- (copy-keymap key-translation-map)
- (make-sparse-keymap)))
- (mapcar (function (lambda (entry)
- (define-key key-translation-map
- (vector (nth 0 entry))
- 'double-translate-key)))
- (append double-map '((magic-start) (magic-end)))))
- (kill-local-variable 'key-translation-map)))
-
;;; Mode
-;;;###autoload
-(defcustom double-mode nil
- "Toggle Double mode.
-Setting this variable directly does not take effect;
-use either \\[customize] or the function `double-mode'."
- :set (lambda (symbol value)
- (double-mode (if value 1 0)))
- :initialize 'custom-initialize-default
- :link '(emacs-commentary-link "double")
- :type 'boolean
- :require 'double
- :group 'double)
-(make-variable-buffer-local 'double-mode)
-
-(or (assq 'double-mode minor-mode-alist)
- (setq minor-mode-alist
- (cons '(double-mode " Double") minor-mode-alist)))
-
;; This feature seemed useless and it confused describe-mode,
-;; so I deleted it.
-;;;(defvar double-mode-name "Double")
-;;;;; Name of current double mode.
-;;; (make-variable-buffer-local 'double-mode-name)
+;; so I deleted it.
+;; (defvar double-mode-name "Double")
+;; ;; Name of current double mode.
+;; (make-variable-buffer-local 'double-mode-name)
;;;###autoload
-(defun double-mode (arg)
+(define-minor-mode double-mode
"Toggle Double mode.
With prefix argument ARG, turn Double mode on if ARG is positive, otherwise
turn it off.
When Double mode is on, some keys will insert different strings
when pressed twice. See variable `double-map' for details."
- (interactive "P")
- (if (or (and (null arg) double-mode)
- (<= (prefix-numeric-value arg) 0))
- ;; Turn it off
- (if double-mode
- (progn
- (let ((double-map))
- (double-setup nil))
- (setq double-mode nil)
- (force-mode-line-update)))
- ;;Turn it on
- (if double-mode
- ()
- (double-setup t)
- (setq double-mode t)
- (force-mode-line-update))))
+ :lighter " Double"
+ :link '(emacs-commentary-link "double")
+ (kill-local-variable 'key-translation-map)
+ (when double-mode
+ ;; Set up key-translation-map as indicated by `double-map'.
+ ;; XXX I don't think key-translation-map should be made local here. -- Lorentey
+ (make-local-variable 'key-translation-map)
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map key-translation-map)
+ (setq key-translation-map map)
+ (dolist (entry (append double-map '((magic-start) (magic-end))))
+ (define-key map
+ (vector (nth 0 entry)) 'double-translate-key)))))
(provide 'double)
-;;; arch-tag: 2e170036-44cb-4493-bc32-ada0a4395221
+;; arch-tag: 2e170036-44cb-4493-bc32-ada0a4395221
;;; double.el ends here
diff --git a/lisp/ebuff-menu.el b/lisp/ebuff-menu.el
index 744a7ba4617..3b2b17fe188 100644
--- a/lisp/ebuff-menu.el
+++ b/lisp/ebuff-menu.el
@@ -175,7 +175,7 @@ Entry to this mode via command `electric-buffer-list' calls the value of
(let ((map (make-keymap)))
(fillarray (car (cdr map)) 'Electric-buffer-menu-undefined)
(define-key map "\e" nil)
- (define-key map "\C-z" 'suspend-emacs)
+ (define-key map "\C-z" 'suspend-frame)
(define-key map "v" 'Electric-buffer-menu-mode-view-buffer)
(define-key map (char-to-string help-char) 'Helper-help)
(define-key map "?" 'Helper-describe-bindings)
diff --git a/lisp/echistory.el b/lisp/echistory.el
index 8d5b5e2beea..7468dd0b7fd 100644
--- a/lisp/echistory.el
+++ b/lisp/echistory.el
@@ -66,7 +66,7 @@ With prefix arg NOCONFIRM, execute current line as-is without editing."
(define-key electric-history-map "\C-c" nil)
(define-key electric-history-map "\C-c\C-c" 'Electric-history-quit)
(define-key electric-history-map "\C-]" 'Electric-history-quit)
- (define-key electric-history-map "\C-z" 'suspend-emacs)
+ (define-key electric-history-map "\C-z" 'suspend-frame)
(define-key electric-history-map (char-to-string help-char) 'Helper-help)
(define-key electric-history-map "?" 'Helper-describe-bindings)
(define-key electric-history-map "\e>" 'end-of-buffer)
diff --git a/lisp/ediff-diff.el b/lisp/ediff-diff.el
index ec153fde625..06d7b603440 100644
--- a/lisp/ediff-diff.el
+++ b/lisp/ediff-diff.el
@@ -48,7 +48,6 @@
:prefix "ediff-"
:group 'ediff)
-;; these two must be here to prevent ediff-test-utility from barking
(defcustom ediff-diff-program "diff"
"*Program to use for generating the differential of the two files."
:type 'string
@@ -62,46 +61,8 @@ Must produce output compatible with Unix's diff3 program."
;; The following functions must precede all defcustom-defined variables.
-;; The following functions needed for setting diff/diff3 options
-;; test if diff supports the --binary option
-(defsubst ediff-test-utility (diff-util option &optional files)
- (condition-case nil
- (eq 0 (apply 'call-process
- (append (list diff-util nil nil nil option) files)))
- (error (format "Cannot execute program %S." diff-util)))
- )
-
-(defun ediff-diff-mandatory-option (diff-util)
- (let ((file (if (boundp 'null-device) null-device "/dev/null")))
- (cond ((not (memq system-type '(ms-dos windows-nt windows-95)))
- "")
- ((and (string= diff-util ediff-diff-program)
- (ediff-test-utility
- ediff-diff-program "--binary" (list file file)))
- "--binary ")
- ((and (string= diff-util ediff-diff3-program)
- (ediff-test-utility
- ediff-diff3-program "--binary" (list file file file)))
- "--binary ")
- (t ""))))
-
-
-;; must be before ediff-reset-diff-options to avoid compiler errors
(fset 'ediff-set-actual-diff-options '(lambda () nil))
-;; make sure that mandatory options are added even if the user changes
-;; ediff-diff-options or ediff-diff3-options in the customization widget
-(defun ediff-reset-diff-options (symb val)
- (let* ((diff-program
- (if (eq symb 'ediff-diff-options)
- ediff-diff-program
- ediff-diff3-program))
- (mandatory-option (ediff-diff-mandatory-option diff-program)))
- (set symb (concat mandatory-option val))
- (ediff-set-actual-diff-options)
- ))
-
-
(defcustom ediff-shell
(cond ((eq system-type 'emx) "cmd") ; OS/2
((memq system-type '(ms-dos windows-nt windows-95))
@@ -130,17 +91,25 @@ are `-I REGEXP', to ignore changes whose lines match the REGEXP."
:type '(repeat string)
:group 'ediff-diff)
-(defcustom ediff-diff-options ""
+(defun ediff-set-diff-options (symbol value)
+ (set symbol value)
+ (ediff-set-actual-diff-options))
+
+(defcustom ediff-diff-options
+ (if (memq system-type '(ms-dos windows-nt windows-95)) "--binary" "")
"*Options to pass to `ediff-diff-program'.
If Unix diff is used as `ediff-diff-program',
then a useful option is `-w', to ignore space.
Options `-c', `-u', and `-i' are not allowed. Case sensitivity can be
toggled interactively using \\[ediff-toggle-ignore-case].
+Do not remove the default options. If you need to change this variable, add new
+options after the default ones.
+
This variable is not for customizing the look of the differences produced by
-the command \\[ediff-show-diff-output]. Use the variable
+the command \\[ediff-show-diff-output]. Use the variable
`ediff-custom-diff-options' for that."
- :set 'ediff-reset-diff-options
+ :set 'ediff-set-diff-options
:type 'string
:group 'ediff-diff)
@@ -179,7 +148,7 @@ This output is not used by Ediff internally."
"Pattern to match lines produced by diff3 that describe differences.")
(defcustom ediff-diff3-options ""
"*Options to pass to `ediff-diff3-program'."
- :set 'ediff-reset-diff-options
+ :set 'ediff-set-diff-options
:type 'string
:group 'ediff-diff)
@@ -348,20 +317,20 @@ one optional arguments, diff-number to refine.")
;; fixup diff-list
(if diff3-job
(cond ((not file-A)
- (mapcar (lambda (elt)
- (aset elt 0 nil)
- (aset elt 1 nil))
- (cdr diff-list)))
+ (mapc (lambda (elt)
+ (aset elt 0 nil)
+ (aset elt 1 nil))
+ (cdr diff-list)))
((not file-B)
- (mapcar (lambda (elt)
- (aset elt 2 nil)
- (aset elt 3 nil))
- (cdr diff-list)))
+ (mapc (lambda (elt)
+ (aset elt 2 nil)
+ (aset elt 3 nil))
+ (cdr diff-list)))
((not file-C)
- (mapcar (lambda (elt)
- (aset elt 4 nil)
- (aset elt 5 nil))
- (cdr diff-list)))
+ (mapc (lambda (elt)
+ (aset elt 4 nil)
+ (aset elt 5 nil))
+ (cdr diff-list)))
))
(ediff-convert-fine-diffs-to-overlays diff-list reg-num)
@@ -889,9 +858,9 @@ one optional arguments, diff-number to refine.")
(let ((fine-diff-vector (ediff-get-fine-diff-vector n buf-type))
(face (if default
'default
- (face-name
- (ediff-get-symbol-from-alist
- buf-type ediff-fine-diff-face-alist))))
+ (ediff-get-symbol-from-alist
+ buf-type ediff-fine-diff-face-alist)
+ ))
(priority (if default
0
(1+ (or (ediff-overlay-get
@@ -1533,7 +1502,7 @@ affects only files whose names match the expression."
(defun ediff-set-actual-diff-options ()
(if ediff-ignore-case
- (setq ediff-actual-diff-options
+ (setq ediff-actual-diff-options
(concat ediff-diff-options " " ediff-ignore-case-option)
ediff-actual-diff3-options
(concat ediff-diff3-options " " ediff-ignore-case-option3))
diff --git a/lisp/ediff-help.el b/lisp/ediff-help.el
index fdc15ee2f80..0c37be31372 100644
--- a/lisp/ediff-help.el
+++ b/lisp/ediff-help.el
@@ -165,7 +165,7 @@ the value of this variable and the variables `ediff-help-message-*' in
(define-key
ediff-help-region-map
- (if ediff-emacs-p [mouse-2] [button2])
+ (if (featurep 'emacs) [mouse-2] [button2])
'ediff-help-for-quick-help)
;; runs in the control buffer
@@ -177,7 +177,7 @@ the value of this variable and the variables `ediff-help-message-*' in
end (match-end 0)
cmd (buffer-substring (match-beginning 1) (match-end 1)))
(setq overl (ediff-make-overlay beg end))
- (if ediff-emacs-p
+ (if (featurep 'emacs)
(ediff-overlay-put overl 'mouse-face 'highlight)
(ediff-overlay-put overl 'highlight t))
(ediff-overlay-put overl 'ediff-help-info cmd))))
@@ -258,7 +258,7 @@ the value of this variable and the variables `ediff-help-message-*' in
(save-excursion
(goto-char (point-min))
(if ediff-use-long-help-message
- (next-line 1))
+ (forward-line 1))
(end-of-line)
(current-column)))
diff --git a/lisp/ediff-hook.el b/lisp/ediff-hook.el
index 945621181d7..306b2ed670c 100644
--- a/lisp/ediff-hook.el
+++ b/lisp/ediff-hook.el
@@ -53,10 +53,10 @@
;; compiler at hand (emacs or xemacs).
;; The autoload, below, is useless in Emacs because ediff-hook.el
;; is dumped with emacs, but it is needed in XEmacs
-;;;###autoload (defmacro ediff-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form) (if (string-match "XEmacs" emacs-version) xemacs-form emacs-form))
+;;;###autoload (defmacro ediff-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form) (if (featurep 'xemacs) xemacs-form emacs-form))
(defmacro ediff-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form)
- (if (string-match "XEmacs" emacs-version)
+ (if (featurep 'xemacs)
xemacs-form emacs-form))
;; This autoload is useless in Emacs because ediff-hook.el is dumped with
diff --git a/lisp/ediff-init.el b/lisp/ediff-init.el
index ea9d1b214be..dd69b52b022 100644
--- a/lisp/ediff-init.el
+++ b/lisp/ediff-init.el
@@ -43,11 +43,6 @@
(load "ange-ftp" 'noerror)))
;; end pacifier
-;; Is it XEmacs?
-(defconst ediff-xemacs-p (featurep 'xemacs))
-;; Is it Emacs?
-(defconst ediff-emacs-p (not ediff-xemacs-p))
-
;; This is used to avoid compilation warnings. When emacs/xemacs forms can
;; generate compile time warnings, we use this macro.
;; In this case, the macro will expand into the form that is appropriate to the
@@ -78,8 +73,8 @@ that Ediff doesn't know about.")
(cond ((ediff-window-display-p))
(ediff-force-faces)
((ediff-color-display-p))
- (ediff-emacs-p (memq (ediff-device-type) '(pc)))
- (ediff-xemacs-p (memq (ediff-device-type) '(tty pc)))
+ ((featurep 'emacs) (memq (ediff-device-type) '(pc)))
+ ((featurep 'xemacs) (memq (ediff-device-type) '(tty pc)))
))
;; toolbar support for emacs hasn't been implemented in ediff
@@ -102,7 +97,7 @@ that Ediff doesn't know about.")
(boundp 'ediff-use-toolbar-p)
ediff-use-toolbar-p)) ;Does the user want it ?
-;; Defines SYMBOL as an advertised local variable.
+;; Defines VAR as an advertised local variable.
;; Performs a defvar, then executes `make-variable-buffer-local' on
;; the variable. Also sets the `permanent-local' property,
;; so that `kill-all-local-variables' (called by major-mode setting
@@ -110,6 +105,8 @@ that Ediff doesn't know about.")
;;
;; Plagiarised from `emerge-defvar-local' for XEmacs.
(defmacro ediff-defvar-local (var value doc)
+ "Defines VAR as a local variable."
+ (declare (indent defun))
`(progn
(defvar ,var ,value ,doc)
(make-variable-buffer-local ',var)
@@ -258,6 +255,8 @@ It needs to be killed when we quit the session.")
;; Doesn't save the point and mark.
;; This is `with-current-buffer' with the added test for live buffers."
(defmacro ediff-with-current-buffer (buffer &rest body)
+ "Evaluates BODY in BUFFER."
+ (declare (indent 1) (debug (form body)))
`(if (ediff-buffer-live-p ,buffer)
(save-current-buffer
(set-buffer ,buffer)
@@ -502,7 +501,7 @@ set local variables that determine how the display looks like."
*** of %sEmacs, does not seem to be properly installed.
***
*** Please contact your system administrator. "
- (if ediff-xemacs-p "X" "")))
+ (if (featurep 'xemacs) "X" "")))
;; Selective browsing
@@ -781,8 +780,8 @@ to temp files when Ediff needs to find fine differences."
;; testing for sufficiently high Emacs versions.
(defun ediff-check-version (op major minor &optional type-of-emacs)
(if (and (boundp 'emacs-major-version) (boundp 'emacs-minor-version))
- (and (cond ((eq type-of-emacs 'xemacs) ediff-xemacs-p)
- ((eq type-of-emacs 'emacs) ediff-emacs-p)
+ (and (cond ((eq type-of-emacs 'xemacs) (featurep 'xemacs))
+ ((eq type-of-emacs 'emacs) (featurep 'emacs))
(t t))
(cond ((eq op '=) (and (= emacs-minor-version minor)
(= emacs-major-version major)))
@@ -904,7 +903,7 @@ to temp files when Ediff needs to find fine differences."
(defface ediff-current-diff-A
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "firebrick" :background "pale green"))
(((class color))
@@ -925,7 +924,7 @@ this variable represents.")
(ediff-hide-face ediff-current-diff-face-A)
;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
;; This means that some user customization may be trashed.
-(if (and ediff-xemacs-p
+(if (and (featurep 'xemacs)
(ediff-has-face-support-p)
(not (ediff-color-display-p)))
(copy-face 'modeline ediff-current-diff-face-A))
@@ -933,7 +932,7 @@ this variable represents.")
(defface ediff-current-diff-B
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "DarkOrchid" :background "Yellow"))
(((class color))
@@ -956,14 +955,14 @@ this variable represents.")
(ediff-hide-face ediff-current-diff-face-B)
;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
;; This means that some user customization may be trashed.
-(if (and ediff-xemacs-p
+(if (and (featurep 'xemacs)
(ediff-has-face-support-p)
(not (ediff-color-display-p)))
(copy-face 'modeline ediff-current-diff-face-B))
(defface ediff-current-diff-C
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "Navy" :background "Pink"))
(((class color))
@@ -984,14 +983,14 @@ this variable represents.")
(ediff-hide-face ediff-current-diff-face-C)
;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
;; This means that some user customization may be trashed.
-(if (and ediff-xemacs-p
+(if (and (featurep 'xemacs)
(ediff-has-face-support-p)
(not (ediff-color-display-p)))
(copy-face 'modeline ediff-current-diff-face-C))
(defface ediff-current-diff-Ancestor
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "Black" :background "VioletRed"))
(((class color))
@@ -1012,14 +1011,14 @@ this variable represents.")
(ediff-hide-face ediff-current-diff-face-Ancestor)
;; Until custom.el for XEmacs starts supporting :inverse-video we do this.
;; This means that some user customization may be trashed.
-(if (and ediff-xemacs-p
+(if (and (featurep 'xemacs)
(ediff-has-face-support-p)
(not (ediff-color-display-p)))
(copy-face 'modeline ediff-current-diff-face-Ancestor))
(defface ediff-fine-diff-A
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "Navy" :background "sky blue"))
(((class color))
@@ -1040,7 +1039,7 @@ this variable represents.")
(ediff-hide-face ediff-fine-diff-face-A)
(defface ediff-fine-diff-B
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "Black" :background "cyan"))
(((class color))
@@ -1061,7 +1060,7 @@ this variable represents.")
(ediff-hide-face ediff-fine-diff-face-B)
(defface ediff-fine-diff-C
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((type pc))
(:foreground "white" :background "Turquoise"))
(((class color) (min-colors 16))
@@ -1087,7 +1086,7 @@ this variable represents.")
(ediff-hide-face ediff-fine-diff-face-C)
(defface ediff-fine-diff-Ancestor
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "Black" :background "Green"))
(((class color))
@@ -1119,7 +1118,7 @@ this variable represents.")
(t "Stipple")))
(defface ediff-even-diff-A
- (if ediff-emacs-p
+ (if (featurep 'emacs)
`((((type pc))
(:foreground "green3" :background "light grey"))
(((class color) (min-colors 16))
@@ -1145,7 +1144,7 @@ this variable represents.")
(ediff-hide-face ediff-even-diff-face-A)
(defface ediff-even-diff-B
- (if ediff-emacs-p
+ (if (featurep 'emacs)
`((((class color) (min-colors 16))
(:foreground "White" :background "Grey"))
(((class color))
@@ -1166,7 +1165,7 @@ this variable represents.")
(ediff-hide-face ediff-even-diff-face-B)
(defface ediff-even-diff-C
- (if ediff-emacs-p
+ (if (featurep 'emacs)
`((((type pc))
(:foreground "yellow3" :background "light grey"))
(((class color) (min-colors 16))
@@ -1192,7 +1191,7 @@ this variable represents.")
(ediff-hide-face ediff-even-diff-face-C)
(defface ediff-even-diff-Ancestor
- (if ediff-emacs-p
+ (if (featurep 'emacs)
`((((type pc))
(:foreground "cyan3" :background "light grey"))
(((class color) (min-colors 16))
@@ -1225,7 +1224,7 @@ this variable represents.")
(Ancestor . ediff-even-diff-Ancestor)))
(defface ediff-odd-diff-A
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((type pc))
(:foreground "green3" :background "gray40"))
(((class color) (min-colors 16))
@@ -1250,7 +1249,7 @@ this variable represents.")
(defface ediff-odd-diff-B
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((type pc))
(:foreground "White" :background "gray40"))
(((class color) (min-colors 16))
@@ -1274,7 +1273,7 @@ this variable represents.")
(ediff-hide-face ediff-odd-diff-face-B)
(defface ediff-odd-diff-C
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((type pc))
(:foreground "yellow3" :background "gray40"))
(((class color) (min-colors 16))
@@ -1298,7 +1297,7 @@ this variable represents.")
(ediff-hide-face ediff-odd-diff-face-C)
(defface ediff-odd-diff-Ancestor
- (if ediff-emacs-p
+ (if (featurep 'emacs)
'((((class color) (min-colors 16))
(:foreground "cyan3" :background "gray40"))
(((class color))
@@ -1626,7 +1625,7 @@ This default should work without changes."
(or frame (setq frame (selected-frame)))
(if (ediff-window-display-p)
(let ((frame-or-wind frame))
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(setq frame-or-wind (frame-selected-window frame)))
(or do-not-grab-mouse
;; don't set mouse if the user said to never do this
@@ -1873,11 +1872,11 @@ Unless optional argument INPLACE is non-nil, return a new string."
-;;; Local Variables:
-;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
-;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
-;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
-;;; End:
+;; Local Variables:
+;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
+;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
+;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
+;; End:
-;;; arch-tag: fa31d384-1e70-4d4b-82a7-3e96307c46f5
+;; arch-tag: fa31d384-1e70-4d4b-82a7-3e96307c46f5
;;; ediff-init.el ends here
diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el
index 5b8b8d8ec44..51502615cf7 100644
--- a/lisp/ediff-mult.el
+++ b/lisp/ediff-mult.el
@@ -129,9 +129,15 @@
;; the registry buffer
(defvar ediff-registry-buffer nil)
-(defconst ediff-meta-buffer-message "This is an Ediff Session Group Panel: %s
+(defconst ediff-meta-buffer-brief-message "Ediff Session Group Panel: %s
-Useful commands:
+ Type ? to show useful commands in this buffer
+
+")
+
+(defconst ediff-meta-buffer-verbose-message "Ediff Session Group Panel: %s
+
+Useful commands (type ? to hide them and free up screen):
button2, v, or RET over session record: start that Ediff session
M:\tin sessions invoked from here, brings back this group panel
R:\tdisplay the registry of active Ediff sessions
@@ -360,10 +366,24 @@ buffers."
(if (stringp (ediff-get-session-objC-name session-info))
(file-directory-p (ediff-get-session-objC-name session-info)) t)))
+
+(ediff-defvar-local ediff-verbose-help-enabled nil
+ "If t, display redundant help in ediff-directories and other meta buffers.
+Toggled by ediff-toggle-verbose-help-meta-buffer" )
+
+;; Toggle verbose help in meta-buffers
+;; TODO: Someone who understands all this can make it better.
+(defun ediff-toggle-verbose-help-meta-buffer ()
+ "Toggle showing tediously verbose help in meta buffers."
+ (interactive)
+ (setq ediff-verbose-help-enabled (not ediff-verbose-help-enabled))
+ (ediff-update-meta-buffer (current-buffer) 'must-redraw))
+
;; set up the keymap in the meta buffer
(defun ediff-setup-meta-map ()
(setq ediff-meta-buffer-map (make-sparse-keymap))
(suppress-keymap ediff-meta-buffer-map)
+ (define-key ediff-meta-buffer-map "?" 'ediff-toggle-verbose-help-meta-buffer)
(define-key ediff-meta-buffer-map "q" 'ediff-quit-meta-buffer)
(define-key ediff-meta-buffer-map "T" 'ediff-toggle-filename-truncation)
(define-key ediff-meta-buffer-map "R" 'ediff-show-registry)
@@ -384,7 +404,7 @@ buffers."
(define-key ediff-meta-buffer-map "=h" 'ediff-meta-mark-equal-files)))
(if ediff-no-emacs-help-in-control-buffer
(define-key ediff-meta-buffer-map "\C-h" 'ediff-previous-meta-item))
- (if ediff-emacs-p
+ (if (featurep 'emacs)
(define-key ediff-meta-buffer-map [mouse-2] ediff-meta-action-function)
(define-key ediff-meta-buffer-map [button2] ediff-meta-action-function))
@@ -428,7 +448,7 @@ Commands:
(define-key ediff-dir-diffs-buffer-map "\C-?" 'previous-line)
(define-key ediff-dir-diffs-buffer-map "p" 'previous-line)
(define-key ediff-dir-diffs-buffer-map "C" 'ediff-dir-diff-copy-file)
-(if ediff-emacs-p
+(if (featurep 'emacs)
(define-key ediff-dir-diffs-buffer-map [mouse-2] 'ediff-dir-diff-copy-file)
(define-key ediff-dir-diffs-buffer-map [button2] 'ediff-dir-diff-copy-file))
(define-key ediff-dir-diffs-buffer-map [delete] 'previous-line)
@@ -621,15 +641,15 @@ behavior."
;; If file belongs to dir 1 only, the membership code is 2.
;; If it is in dir1 and dir3, then the membership code is 2*5=10;
;; if it is in dir1 and dir2, then the membership code is 2*3=6, etc.
- (mapcar (lambda (elt)
- (if (member (car elt) lis1)
- (setcdr elt (* (cdr elt) ediff-membership-code1)))
- (if (member (car elt) lis2)
- (setcdr elt (* (cdr elt) ediff-membership-code2)))
- (if (member (car elt) lis3)
- (setcdr elt (* (cdr elt) ediff-membership-code3)))
- )
- difflist)
+ (mapc (lambda (elt)
+ (if (member (car elt) lis1)
+ (setcdr elt (* (cdr elt) ediff-membership-code1)))
+ (if (member (car elt) lis2)
+ (setcdr elt (* (cdr elt) ediff-membership-code2)))
+ (if (member (car elt) lis3)
+ (setcdr elt (* (cdr elt) ediff-membership-code3)))
+ )
+ difflist)
(setq difflist (cons
;; diff metalist header
(ediff-make-new-meta-list-header regexp
@@ -921,30 +941,34 @@ behavior."
;; was redrawn
(ediff-cond-compile-for-xemacs-or-emacs
(map-extents 'delete-extent) ; xemacs
- (mapcar 'delete-overlay (overlays-in 1 1)) ; emacs
+ (mapc 'delete-overlay (overlays-in 1 1)) ; emacs
)
- (insert (format ediff-meta-buffer-message
- (ediff-abbrev-jobname ediff-metajob-name)))
-
(setq regexp (ediff-get-group-regexp meta-list)
merge-autostore-dir
(ediff-get-group-merge-autostore-dir meta-list))
- (cond ((ediff-collect-diffs-metajob)
- (insert
- " P:\tcollect custom diffs of all marked sessions\n"))
- ((ediff-patch-metajob)
- (insert
- " P:\tshow patch appropriately for the context (session or group)\n")))
- (insert
- " ^:\tshow parent session group\n")
- (or (ediff-one-filegroup-metajob)
- (insert
- " D:\tshow differences among directories\n"
- " ==:\tfor each session, show which files are identical\n"
- " =h:\tlike ==, but also marks those sessions for hiding\n"
- " =m:\tlike ==, but also marks those sessions for operation\n\n"))
+ (if ediff-verbose-help-enabled
+ (progn
+ (insert (format ediff-meta-buffer-verbose-message
+ (ediff-abbrev-jobname ediff-metajob-name)))
+
+ (cond ((ediff-collect-diffs-metajob)
+ (insert
+ " P:\tcollect custom diffs of all marked sessions\n"))
+ ((ediff-patch-metajob)
+ (insert
+ " P:\tshow patch appropriately for the context (session or group)\n")))
+ (insert
+ " ^:\tshow parent session group\n")
+ (or (ediff-one-filegroup-metajob)
+ (insert
+ " D:\tshow differences among directories\n"
+ " ==:\tfor each session, show which files are identical\n"
+ " =h:\tlike ==, but also marks sessions for hiding\n"
+ " =m:\tlike ==, but also marks sessions for operation\n\n")))
+ (insert (format ediff-meta-buffer-brief-message
+ (ediff-abbrev-jobname ediff-metajob-name))))
(insert "\n")
(if (and (stringp regexp) (> (length regexp) 0))
@@ -1305,7 +1329,7 @@ Useful commands:
;; copy file to directories where it doesn't exist, update
;; ediff-dir-difference-list and redisplay
- (mapcar
+ (mapc
(lambda (otherfile-struct)
(let ((otherfile (car otherfile-struct))
(file-mem-code (cdr otherfile-struct)))
@@ -1366,7 +1390,7 @@ Useful commands:
;; was redrawn
(ediff-cond-compile-for-xemacs-or-emacs
(map-extents 'delete-extent) ; xemacs
- (mapcar 'delete-overlay (overlays-in 1 1)) ; emacs
+ (mapc 'delete-overlay (overlays-in 1 1)) ; emacs
)
(insert "This is a registry of all active Ediff sessions.
@@ -1386,11 +1410,11 @@ Useful commands:
")
;; purge registry list from dead buffers
- (mapcar (lambda (elt)
- (if (not (ediff-buffer-live-p elt))
- (setq ediff-session-registry
- (delq elt ediff-session-registry))))
- ediff-session-registry)
+ (mapc (lambda (elt)
+ (if (not (ediff-buffer-live-p elt))
+ (setq ediff-session-registry
+ (delq elt ediff-session-registry))))
+ ediff-session-registry)
(if (null ediff-session-registry)
(insert " ******* No active Ediff sessions *******\n"))
@@ -1469,7 +1493,7 @@ Useful commands:
(defun ediff-set-meta-overlay (b e prop &optional session-number hidden)
(let (overl)
(setq overl (ediff-make-overlay b e))
- (if ediff-emacs-p
+ (if (featurep 'emacs)
(ediff-overlay-put overl 'mouse-face 'highlight)
(ediff-overlay-put overl 'highlight t))
(ediff-overlay-put overl 'ediff-meta-info prop)
diff --git a/lisp/ediff-ptch.el b/lisp/ediff-ptch.el
index 89d08932b58..2efa2ac3012 100644
--- a/lisp/ediff-ptch.el
+++ b/lisp/ediff-ptch.el
@@ -134,11 +134,13 @@ patch. So, don't change these variables, unless the default doesn't work."
:type '(choice (const nil) string)
:group 'ediff-ptch)
+;; This context diff does not recognize spaces inside files, but removing ' '
+;; from [^ \t] breaks normal patches for some reason
(defcustom ediff-context-diff-label-regexp
(concat "\\(" ; context diff 2-liner
- "^\\*\\*\\* \\([^ \t]+\\)[^*]+[\t ]*\n--- \\([^ \t]+\\)"
+ "^\\*\\*\\* +\\([^ \t]+\\)[^*]+[\t ]*\n--- +\\([^ \t]+\\)"
"\\|" ; GNU unified format diff 2-liner
- "^--- \\([^ \t]+\\)[\t ]+.*\n\\+\\+\\+ \\([^ \t]+\\)"
+ "^--- +\\([^ \t]+\\)[\t ]+.*\n\\+\\+\\+ +\\([^ \t]+\\)"
"\\)")
"*Regexp matching filename 2-liners at the start of each context diff.
You probably don't want to change that, unless you are using an obscure patch
@@ -231,7 +233,7 @@ program."
;; possible-file-names is holding the new file names until we
;; insert the old file name in the patch map
;; It is a pair
- ;; (filename-from-1st-header-line . fn from 2nd line)
+ ;; (filename-from-1st-header-line . filename-from-2nd-line)
(setq possible-file-names
(cons (if (and beg1 end1)
(buffer-substring beg1 end1)
@@ -290,42 +292,43 @@ program."
)
;; chop off base-dirs
- (mapcar (lambda (session-info)
- (let* ((proposed-file-names
- ;; Filename-spec is objA; it is represented as
- ;; (file1 . file2). Get it using ediff-get-session-objA.
- (ediff-get-session-objA-name session-info))
- ;; base-dir1 is the dir part of the 1st file in the patch
- (base-dir1
- (or (file-name-directory (car proposed-file-names))
- ""))
- ;; directory part of the 2nd file in the patch
- (base-dir2
- (or (file-name-directory (cdr proposed-file-names))
- ""))
- )
- ;; If both base-dir1 and base-dir2 are relative and exist,
- ;; assume that
- ;; these dirs lead to the actual files starting at the present
- ;; directory. So, we don't strip these relative dirs from the
- ;; file names. This is a heuristic intended to improve guessing
+ (mapc (lambda (session-info)
+ (let* ((proposed-file-names
+ ;; Filename-spec is objA; it is represented as
+ ;; (file1 . file2). Get it using ediff-get-session-objA.
+ (ediff-get-session-objA-name session-info))
+ ;; base-dir1 is the dir part of the 1st file in the patch
+ (base-dir1
+ (or (file-name-directory (car proposed-file-names))
+ ""))
+ ;; directory part of the 2nd file in the patch
+ (base-dir2
+ (or (file-name-directory (cdr proposed-file-names))
+ ""))
+ )
+ ;; If both base-dir1 and base-dir2 are relative and exist,
+ ;; assume that
+ ;; these dirs lead to the actual files starting at the present
+ ;; directory. So, we don't strip these relative dirs from the
+ ;; file names. This is a heuristic intended to improve guessing
+ (let ((default-directory (file-name-directory filename)))
(unless (or (file-name-absolute-p base-dir1)
(file-name-absolute-p base-dir2)
(not (file-exists-p base-dir1))
(not (file-exists-p base-dir2)))
(setq base-dir1 ""
- base-dir2 ""))
- (or (string= (car proposed-file-names) "/dev/null")
- (setcar proposed-file-names
- (ediff-file-name-sans-prefix
- (car proposed-file-names) base-dir1)))
- (or (string=
- (cdr proposed-file-names) "/dev/null")
- (setcdr proposed-file-names
- (ediff-file-name-sans-prefix
- (cdr proposed-file-names) base-dir2)))
- ))
- ediff-patch-map)
+ base-dir2 "")))
+ (or (string= (car proposed-file-names) "/dev/null")
+ (setcar proposed-file-names
+ (ediff-file-name-sans-prefix
+ (car proposed-file-names) base-dir1)))
+ (or (string=
+ (cdr proposed-file-names) "/dev/null")
+ (setcdr proposed-file-names
+ (ediff-file-name-sans-prefix
+ (cdr proposed-file-names) base-dir2)))
+ ))
+ ediff-patch-map)
;; take the given file name into account
(or (file-directory-p filename)
@@ -335,19 +338,19 @@ program."
(file-name-nondirectory filename))))
;; prepend actual-dir
- (mapcar (lambda (session-info)
- (let ((proposed-file-names
- (ediff-get-session-objA-name session-info)))
- (if (and (string-match "^/null/" (car proposed-file-names))
- (string-match "^/null/" (cdr proposed-file-names)))
- ;; couldn't intuit the file name to patch, so
- ;; something is amiss
- (progn
- (with-output-to-temp-buffer ediff-msg-buffer
- (ediff-with-current-buffer standard-output
- (fundamental-mode))
- (princ
- (format "
+ (mapc (lambda (session-info)
+ (let ((proposed-file-names
+ (ediff-get-session-objA-name session-info)))
+ (if (and (string-match "^/null/" (car proposed-file-names))
+ (string-match "^/null/" (cdr proposed-file-names)))
+ ;; couldn't intuit the file name to patch, so
+ ;; something is amiss
+ (progn
+ (with-output-to-temp-buffer ediff-msg-buffer
+ (ediff-with-current-buffer standard-output
+ (fundamental-mode))
+ (princ
+ (format "
The patch file contains a context diff for
%s
%s
@@ -358,31 +361,31 @@ please enter it now.
If you don't know and still would like to apply patches to
other files, enter /dev/null
"
- (substring (car proposed-file-names) 6)
- (substring (cdr proposed-file-names) 6))))
- (let ((directory t)
- user-file)
- (while directory
- (setq user-file
- (read-file-name
- "Please enter file name: "
- actual-dir actual-dir t))
- (if (not (file-directory-p user-file))
- (setq directory nil)
- (setq directory t)
- (beep)
- (message "%s is a directory" user-file)
- (sit-for 2)))
- (setcar (ediff-get-session-objA session-info)
- (cons user-file user-file))))
- (setcar proposed-file-names
- (expand-file-name
- (concat actual-dir (car proposed-file-names))))
- (setcdr proposed-file-names
- (expand-file-name
- (concat actual-dir (cdr proposed-file-names)))))
- ))
- ediff-patch-map)
+ (substring (car proposed-file-names) 6)
+ (substring (cdr proposed-file-names) 6))))
+ (let ((directory t)
+ user-file)
+ (while directory
+ (setq user-file
+ (read-file-name
+ "Please enter file name: "
+ actual-dir actual-dir t))
+ (if (not (file-directory-p user-file))
+ (setq directory nil)
+ (setq directory t)
+ (beep)
+ (message "%s is a directory" user-file)
+ (sit-for 2)))
+ (setcar (ediff-get-session-objA session-info)
+ (cons user-file user-file))))
+ (setcar proposed-file-names
+ (expand-file-name
+ (concat actual-dir (car proposed-file-names))))
+ (setcdr proposed-file-names
+ (expand-file-name
+ (concat actual-dir (cdr proposed-file-names)))))
+ ))
+ ediff-patch-map)
;; Check for the existing files in each pair and discard the nonexisting
;; ones. If both exist, ask the user.
(mapcar (lambda (session-info)
diff --git a/lisp/ediff-util.el b/lisp/ediff-util.el
index 1b1db4a60cf..2ed8f73a282 100644
--- a/lisp/ediff-util.el
+++ b/lisp/ediff-util.el
@@ -38,7 +38,6 @@
(defvar bottom-toolbar-visible-p)
(defvar bottom-toolbar-height)
(defvar mark-active)
-(defvar ediff-emacs-p)
(defvar ediff-after-quit-hook-internal nil)
@@ -64,7 +63,7 @@
(or (featurep 'ediff)
(load "ediff.el" nil nil 'nosuffix))
(or (featurep 'ediff-tbar)
- ediff-emacs-p
+ (featurep 'emacs)
(load "ediff-tbar.el" 'noerror nil 'nosuffix))
))
;; end pacifier
@@ -77,7 +76,7 @@
(require 'ediff-diff)
(require 'ediff-merg)
-(if ediff-xemacs-p
+(if (featurep 'xemacs)
(require 'ediff-tbar))
@@ -122,7 +121,7 @@ Commands:
;; modified by minor modes and such. So, run-mode-hooks doesn't do anything
;; useful here on top of what run-hooks does.
;; Second, changing run-hooks to run-mode-hooks would require an
- ;; if-statement, since XEmacs doesn't have this.
+ ;; if-statement, since XEmacs doesn't have this.
(run-hooks 'ediff-mode-hook))
@@ -154,7 +153,7 @@ to invocation.")
(suppress-keymap ediff-mode-map)
(define-key ediff-mode-map
- (if ediff-emacs-p [mouse-2] [button2]) 'ediff-help-for-quick-help)
+ (if (featurep 'emacs) [mouse-2] [button2]) 'ediff-help-for-quick-help)
(define-key ediff-mode-map "\C-m" 'ediff-help-for-quick-help)
(define-key ediff-mode-map "p" 'ediff-previous-difference)
@@ -1141,7 +1140,7 @@ of the current buffer."
(or (memq (vc-state file) '(edited needs-merge))
(stringp (vc-state file)))
;; XEmacs has no vc-state
- (vc-locking-user file))
+ (when (featurep 'xemacs) (vc-locking-user file)))
)))
(defun ediff-file-checked-in-p (file)
@@ -1153,7 +1152,7 @@ of the current buffer."
(not (memq (vc-state file) '(edited needs-merge)))
(not (stringp (vc-state file))))
;; XEmacs has no vc-state
- (not (vc-locking-user file)))
+ (when (featurep 'xemacs) (not (vc-locking-user file))))
))
(defun ediff-file-compressed-p (file)
@@ -1275,7 +1274,7 @@ This is especially useful when comparing buffers side-by-side."
(ediff-barf-if-not-control-buffer)
(or (ediff-window-display-p)
(error "%sEmacs is not running as a window application"
- (if ediff-emacs-p "" "X")))
+ (if (featurep 'emacs) "" "X")))
(ediff-recenter 'no-rehighlight) ; make sure buffs are displayed in windows
(let ((ctl-buf ediff-control-buffer))
(setq ediff-wide-display-p (not ediff-wide-display-p))
@@ -1283,7 +1282,7 @@ This is especially useful when comparing buffers side-by-side."
(ediff-with-current-buffer ctl-buf
(modify-frame-parameters
ediff-wide-display-frame ediff-wide-display-orig-parameters)
- ;;(sit-for (if ediff-xemacs-p 0.4 0))
+ ;;(sit-for (if (featurep 'xemacs) 0.4 0))
;; restore control buf, since ctl window may have been deleted
;; during resizing
(set-buffer ctl-buf)
@@ -1291,7 +1290,7 @@ This is especially useful when comparing buffers side-by-side."
ediff-window-B nil) ; force update of window config
(ediff-recenter 'no-rehighlight))
(funcall ediff-make-wide-display-function)
- ;;(sit-for (if ediff-xemacs-p 0.4 0))
+ ;;(sit-for (if (featurep 'xemacs) 0.4 0))
(ediff-with-current-buffer ctl-buf
(setq ediff-window-B nil) ; force update of window config
(ediff-recenter 'no-rehighlight)))))
@@ -1305,7 +1304,7 @@ which see."
(let (window-setup-func)
(or (ediff-window-display-p)
(error "%sEmacs is not running as a window application"
- (if ediff-emacs-p "" "X")))
+ (if (featurep 'emacs) "" "X")))
(cond ((eq ediff-window-setup-function 'ediff-setup-windows-multiframe)
(setq window-setup-func 'ediff-setup-windows-plain))
@@ -1317,10 +1316,10 @@ which see."
;; change default
(setq-default ediff-window-setup-function window-setup-func)
;; change in all active ediff sessions
- (mapcar (lambda(buf) (ediff-with-current-buffer buf
- (setq ediff-window-setup-function window-setup-func
- ediff-window-B nil)))
- ediff-session-registry)
+ (mapc (lambda(buf) (ediff-with-current-buffer buf
+ (setq ediff-window-setup-function window-setup-func
+ ediff-window-B nil)))
+ ediff-session-registry)
(if (ediff-in-control-buffer-p)
(ediff-recenter 'no-rehighlight))))
@@ -1335,18 +1334,18 @@ To change the default, set the variable `ediff-use-toolbar-p', which see."
(progn
(or (ediff-window-display-p)
(error "%sEmacs is not running as a window application"
- (if ediff-emacs-p "" "X")))
+ (if (featurep 'emacs) "" "X")))
(if (ediff-use-toolbar-p)
(ediff-kill-bottom-toolbar))
;; do this only after killing the toolbar
(setq ediff-use-toolbar-p (not ediff-use-toolbar-p))
- (mapcar (lambda(buf)
- (ediff-with-current-buffer buf
- ;; force redisplay
- (setq ediff-window-config-saved "")
- ))
- ediff-session-registry)
+ (mapc (lambda(buf)
+ (ediff-with-current-buffer buf
+ ;; force redisplay
+ (setq ediff-window-config-saved "")
+ ))
+ ediff-session-registry)
(if (ediff-in-control-buffer-p)
(ediff-recenter 'no-rehighlight)))))
@@ -2439,14 +2438,14 @@ temporarily reverses the meaning of this variable."
;; Apply selective display to narrow or widen
(ediff-visible-region)
- (mapcar (lambda (overl)
- (if (ediff-overlayp overl)
- (ediff-delete-overlay overl)))
- ediff-wide-bounds)
- (mapcar (lambda (overl)
- (if (ediff-overlayp overl)
- (ediff-delete-overlay overl)))
- ediff-narrow-bounds)
+ (mapc (lambda (overl)
+ (if (ediff-overlayp overl)
+ (ediff-delete-overlay overl)))
+ ediff-wide-bounds)
+ (mapc (lambda (overl)
+ (if (ediff-overlayp overl)
+ (ediff-delete-overlay overl)))
+ ediff-narrow-bounds)
;; restore buffer mode line id's in buffer-A/B/C
(let ((control-buffer ediff-control-buffer)
@@ -2529,7 +2528,7 @@ temporarily reverses the meaning of this variable."
(cond ((ediff-good-frame-under-mouse))
(t warp-frame)))
(if (and (ediff-window-display-p) (frame-live-p warp-frame) ediff-grab-mouse)
- (set-mouse-position (if ediff-emacs-p
+ (set-mouse-position (if (featurep 'emacs)
warp-frame
(frame-selected-window warp-frame))
2 1))
@@ -2544,11 +2543,11 @@ temporarily reverses the meaning of this variable."
(buf-name "")
frame obj-ok)
(setq obj-ok
- (if ediff-emacs-p
+ (if (featurep 'emacs)
(frame-live-p frame-or-win)
(window-live-p frame-or-win)))
(if obj-ok
- (setq frame (if ediff-emacs-p frame-or-win (window-frame frame-or-win))
+ (setq frame (if (featurep 'emacs) frame-or-win (window-frame frame-or-win))
buf-name
(buffer-name (window-buffer (frame-selected-window frame)))))
(if (string-match "Minibuf" buf-name)
@@ -3031,7 +3030,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
(ediff-get-symbol-from-alist
buf-type ediff-current-diff-overlay-alist))))
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(ediff-move-overlay current-diff-overlay begin end-hilit)
(ediff-move-overlay current-diff-overlay begin end-hilit buff))
(ediff-overlay-put current-diff-overlay 'priority
@@ -3164,7 +3163,11 @@ Hit \\[ediff-recenter] to reset the windows afterward."
(defun ediff-make-temp-file (buff &optional prefix given-file start end)
(let* ((p (ediff-convert-standard-filename (or prefix "ediff")))
(short-p p)
- (coding-system-for-write ediff-coding-system-for-write)
+ (coding-system-for-write
+ (ediff-with-current-buffer buff
+ (if (boundp 'buffer-file-coding-system)
+ buffer-file-coding-system
+ ediff-coding-system-for-write)))
f short-f)
(if (and (fboundp 'msdos-long-file-names)
(not (msdos-long-file-names))
@@ -3607,11 +3610,11 @@ Ediff Control Panel to restore highlighting."
(defun ediff-remove-flags-from-buffer (buffer overlay)
(ediff-with-current-buffer buffer
(let ((inhibit-read-only t))
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(ediff-overlay-put overlay 'begin-glyph nil)
(ediff-overlay-put overlay 'before-string nil))
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(ediff-overlay-put overlay 'end-glyph nil)
(ediff-overlay-put overlay 'after-string nil))
)))
@@ -3639,7 +3642,7 @@ Ediff Control Panel to restore highlighting."
ediff-before-flag-bol ediff-before-flag-mol))))
;; insert the flag itself
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(ediff-overlay-put curr-overl 'begin-glyph flag)
(ediff-overlay-put curr-overl 'before-string flag))
@@ -3655,7 +3658,7 @@ Ediff Control Panel to restore highlighting."
ediff-after-flag-eol ediff-after-flag-mol))))
;; insert the flag itself
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(ediff-overlay-put curr-overl 'end-glyph flag)
(ediff-overlay-put curr-overl 'after-string flag))
))
@@ -3743,13 +3746,13 @@ Ediff Control Panel to restore highlighting."
;; VEC is either a difference vector or a fine-diff vector
(defun ediff-clear-diff-vector (vec-var &optional fine-diffs-also)
(if (vectorp (symbol-value vec-var))
- (mapcar (lambda (elt)
- (ediff-delete-overlay
- (ediff-get-diff-overlay-from-diff-record elt))
- (if fine-diffs-also
- (ediff-clear-fine-diff-vector elt))
- )
- (symbol-value vec-var)))
+ (mapc (lambda (elt)
+ (ediff-delete-overlay
+ (ediff-get-diff-overlay-from-diff-record elt))
+ (if fine-diffs-also
+ (ediff-clear-fine-diff-vector elt))
+ )
+ (symbol-value vec-var)))
;; allow them to be garbage collected
(set vec-var nil))
@@ -3782,10 +3785,10 @@ Ediff Control Panel to restore highlighting."
;; never detach
(ediff-overlay-put
- overl (if ediff-emacs-p 'evaporate 'detachable) nil)
+ overl (if (featurep 'emacs) 'evaporate 'detachable) nil)
;; make overlay open-ended
;; In emacs, it is made open ended at creation time
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(progn
(ediff-overlay-put overl 'start-open nil)
(ediff-overlay-put overl 'end-open nil)))
@@ -3798,9 +3801,8 @@ Ediff Control Panel to restore highlighting."
(let ((overlay (ediff-get-symbol-from-alist
type ediff-current-diff-overlay-alist))
(buffer (ediff-get-buffer type))
- (face (face-name
- (ediff-get-symbol-from-alist
- type ediff-current-diff-face-alist))))
+ (face (ediff-get-symbol-from-alist
+ type ediff-current-diff-face-alist)))
(set overlay
(ediff-make-bullet-proof-overlay (point-max) (point-max) buffer))
(ediff-set-overlay-face (symbol-value overlay) face)
@@ -4067,28 +4069,25 @@ Mail anyway? (y or n) ")
)
))
-(cond ((fboundp 'nuke-selective-display)
- ;; XEmacs has nuke-selective-display
- (defalias 'ediff-nuke-selective-display 'nuke-selective-display))
- (t
- (defun ediff-nuke-selective-display ()
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (let ((mod-p (buffer-modified-p))
- buffer-read-only end)
- (and (eq t selective-display)
- (while (search-forward "\^M" nil t)
- (end-of-line)
- (setq end (point))
- (beginning-of-line)
- (while (search-forward "\^M" end t)
- (delete-char -1)
- (insert "\^J"))))
- (set-buffer-modified-p mod-p)
- (setq selective-display nil)))))
- ))
+(defun ediff-nuke-selective-display ()
+ (if (featurep 'xemacs)
+ (nuke-selective-display)
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (let ((mod-p (buffer-modified-p))
+ buffer-read-only end)
+ (and (eq t selective-display)
+ (while (search-forward "\^M" nil t)
+ (end-of-line)
+ (setq end (point))
+ (beginning-of-line)
+ (while (search-forward "\^M" end t)
+ (delete-char -1)
+ (insert "\^J"))))
+ (set-buffer-modified-p mod-p)
+ (setq selective-display nil))))))
;; The next two are modified versions from emerge.el.
@@ -4291,20 +4290,7 @@ Mail anyway? (y or n) ")
(add-to-history history-var newelt)
(set history-var (cons newelt (symbol-value history-var)))))
-(if (fboundp 'copy-sequence)
- (defalias 'ediff-copy-list 'copy-sequence)
- (defun ediff-copy-list (list)
- (if (consp list)
- ;;;(let ((res nil))
- ;;; (while (consp list) (push (pop list) res))
- ;;; (prog1 (nreverse res) (setcdr res list)))
- (let (res elt)
- (while (consp list)
- (setq elt (car list)
- res (cons elt res)
- list (cdr list)))
- (nreverse res))
- (car list))))
+(defalias 'ediff-copy-list 'copy-sequence)
;; don't report error if version control package wasn't found
@@ -4315,11 +4301,11 @@ Mail anyway? (y or n) ")
(provide 'ediff-util)
-;;; Local Variables:
-;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
-;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
-;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
-;;; End:
+;; Local Variables:
+;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
+;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
+;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
+;; End:
-;;; arch-tag: f51099b6-ef4b-470f-88a1-3a0e0b03a879
+;; arch-tag: f51099b6-ef4b-470f-88a1-3a0e0b03a879
;;; ediff-util.el ends here
diff --git a/lisp/ediff-vers.el b/lisp/ediff-vers.el
index d0a323980c2..293acc5a854 100644
--- a/lisp/ediff-vers.el
+++ b/lisp/ediff-vers.el
@@ -39,13 +39,6 @@
(let ((load-path (cons (expand-file-name ".") load-path)))
(load "pcl-cvs" 'noerror)
(load "rcs" 'noerror)
- ;; On 8+3 MS-DOS filesystems, generic-x.el is loaded
- ;; instead of (the missing) generic-sc.el. Since the
- ;; version of Emacs which supports MS-DOS doesn't have
- ;; generic-sc, we simply avoid loading it.
- (or (and (fboundp 'msdos-long-file-names)
- (not (msdos-long-file-names)))
- (load "generic-sc" 'noerror))
;; (load "vc" 'noerror) ; this sometimes causes compiler error
(or (featurep 'ediff-init)
(load "ediff-init.el" nil nil 'nosuffix))
@@ -59,8 +52,22 @@ comparison or merge operations are being performed."
:group 'ediff-vers
)
+(defalias 'ediff-vc-revision-other-window
+ (if (fboundp 'vc-revision-other-window)
+ 'vc-revision-other-window
+ 'vc-version-other-window))
+
+(defalias 'ediff-vc-working-revision
+ (if (fboundp 'vc-working-revision)
+ 'vc-working-revision
+ 'vc-workfile-version))
+
;; VC.el support
+(eval-when-compile
+ (require 'vc-hooks)) ;; for vc-call macro
+
+
(defun ediff-vc-latest-version (file)
"Return the version level of the latest version of FILE in repository."
(if (fboundp 'vc-latest-version)
@@ -84,12 +91,12 @@ comparison or merge operations are being performed."
(setq rev1 (ediff-vc-latest-version (buffer-file-name))))
(save-window-excursion
(save-excursion
- (vc-version-other-window rev1)
+ (ediff-vc-revision-other-window rev1)
(setq rev1buf (current-buffer)
file1 (buffer-file-name)))
(save-excursion
(or (string= rev2 "") ; use current buffer
- (vc-version-other-window rev2))
+ (ediff-vc-revision-other-window rev2))
(setq rev2buf (current-buffer)
file2 (buffer-file-name)))
(setq startup-hooks
@@ -157,32 +164,6 @@ comparison or merge operations are being performed."
(ediff-buffers rev1buf rev2buf startup-hooks 'ediff-revision)
))
-
-;; GENERIC-SC.el support
-
-(defun generic-sc-get-latest-rev ()
- (cond ((eq sc-mode 'CCASE)
- (eval "main/LATEST"))
- (t (eval ""))))
-
-(defun ediff-generic-sc-internal (rev1 rev2 &optional startup-hooks)
-;; Run Ediff on versions of the current buffer.
-;; If REV2 is "" then compare current buffer with REV1.
-;; If the current buffer is named `F', the version is named `F.~REV~'.
-;; If `F.~REV~' already exists, it is used instead of being re-created.
- (let (rev1buf rev2buf)
- (save-excursion
- (if (or (not rev1) (string= rev1 ""))
- (setq rev1 (generic-sc-get-latest-rev)))
- (sc-visit-previous-revision rev1)
- (setq rev1buf (current-buffer)))
- (save-excursion
- (or (string= rev2 "") ; use current buffer
- (sc-visit-previous-revision rev2))
- (setq rev2buf (current-buffer)))
- (ediff-buffers rev1buf rev2buf startup-hooks 'ediff-revision)))
-
-
;;; Merge with Version Control
(defun ediff-vc-merge-internal (rev1 rev2 ancestor-rev
@@ -191,17 +172,17 @@ comparison or merge operations are being performed."
(let (buf1 buf2 ancestor-buf)
(save-window-excursion
(save-excursion
- (vc-version-other-window rev1)
+ (ediff-vc-revision-other-window rev1)
(setq buf1 (current-buffer)))
(save-excursion
(or (string= rev2 "")
- (vc-version-other-window rev2))
+ (ediff-vc-revision-other-window rev2))
(setq buf2 (current-buffer)))
(if ancestor-rev
(save-excursion
(if (string= ancestor-rev "")
- (setq ancestor-rev (vc-workfile-version buffer-file-name)))
- (vc-version-other-window ancestor-rev)
+ (setq ancestor-rev (ediff-vc-working-revision buffer-file-name)))
+ (ediff-vc-revision-other-window ancestor-rev)
(setq ancestor-buf (current-buffer))))
(setq startup-hooks
(cons
@@ -245,76 +226,6 @@ comparison or merge operations are being performed."
(ediff-merge-buffers
buf1 buf2 startup-hooks 'ediff-merge-revisions merge-buffer-file))))
-(defun ediff-generic-sc-merge-internal (rev1 rev2 ancestor-rev
- &optional
- startup-hooks merge-buffer-file)
- ;; If ANCESTOR-REV non-nil, merge with ancestor
- (let (buf1 buf2 ancestor-buf)
- (save-excursion
- (if (string= rev1 "")
- (setq rev1 (generic-sc-get-latest-rev)))
- (sc-visit-previous-revision rev1)
- (setq buf1 (current-buffer)))
- (save-excursion
- (or (string= rev2 "")
- (sc-visit-previous-revision rev2))
- (setq buf2 (current-buffer)))
- (if ancestor-rev
- (save-excursion
- (or (string= ancestor-rev "")
- (sc-visit-previous-revision ancestor-rev))
- (setq ancestor-buf (current-buffer))))
- (if ancestor-rev
- (ediff-merge-buffers-with-ancestor
- buf1 buf2 ancestor-buf
- startup-hooks 'ediff-merge-revisions-with-ancestor merge-buffer-file)
- (ediff-merge-buffers
- buf1 buf2 startup-hooks 'ediff-merge-revisions merge-buffer-file))))
-
-
-;; PCL-CVS.el support
-
-;; MK: Check. This function doesn't seem to be used any more by pcvs or pcl-cvs
-(defun cvs-run-ediff-on-file-descriptor (tin)
-;; This is a replacement for cvs-emerge-mode
-;; Runs after cvs-update.
-;; Ediff-merge appropriate revisions of the selected file.
- (let* ((fileinfo (tin-cookie cvs-cookie-handle tin))
- (type (cvs-fileinfo->type fileinfo))
- (tmp-file
- (cvs-retrieve-revision-to-tmpfile fileinfo))
- (default-directory
- (file-name-as-directory (cvs-fileinfo->dir fileinfo)))
- ancestor-file)
-
- (or (memq type '(MERGED CONFLICT MODIFIED))
- (error
- "Can only merge `Modified', `Merged' or `Conflict' files"))
-
- (cond ((memq type '(MERGED CONFLICT))
- (setq ancestor-file
- (cvs-retrieve-revision-to-tmpfile
- fileinfo
- ;; revision
- (cvs-fileinfo->base-revision fileinfo)))
- (ediff-merge-buffers-with-ancestor
- (find-file-noselect tmp-file)
- (find-file-noselect (cvs-fileinfo->backup-file fileinfo))
- (find-file-noselect ancestor-file)
- nil ; startup-hooks
- 'ediff-merge-revisions-with-ancestor))
- ((eq type 'MODIFIED)
- (ediff-buffers
- (find-file-noselect tmp-file)
- (if (featurep 'xemacs)
- ;; XEmacs doesn't seem to have cvs-fileinfo->full-name
- (find-file-noselect (cvs-fileinfo->full-path fileinfo))
- (find-file-noselect (cvs-fileinfo->full-name fileinfo)))
- nil ; startup-hooks
- 'ediff-revisions)))
- (if (stringp tmp-file) (ediff-delete-version-file tmp-file))
- (if (stringp ancestor-file) (ediff-delete-version-file ancestor-file))))
-
;; delete version file on exit unless ediff-keep-tmp-versions is true
(defun ediff-delete-version-file (file)
diff --git a/lisp/ediff-wind.el b/lisp/ediff-wind.el
index 897845c182a..4efae0c0519 100644
--- a/lisp/ediff-wind.el
+++ b/lisp/ediff-wind.el
@@ -39,7 +39,6 @@
(defvar top-gutter)
(defvar frame-icon-title-format)
(defvar ediff-diff-status)
-(defvar ediff-emacs-p)
(eval-when-compile
(let ((load-path (cons (expand-file-name ".") load-path)))
@@ -50,7 +49,7 @@
(or (featurep 'ediff-help)
(load "ediff-help.el" nil nil 'nosuffix))
(or (featurep 'ediff-tbar)
- ediff-emacs-p
+ (featurep 'emacs)
(load "ediff-tbar.el" 'noerror nil 'nosuffix))
))
;; end pacifier
@@ -58,7 +57,7 @@
(require 'ediff-init)
;; be careful with ediff-tbar
-(if ediff-xemacs-p
+(if (featurep 'xemacs)
(condition-case nil
(require 'ediff-tbar)
(error
@@ -72,15 +71,15 @@
:group 'frames)
-(defcustom ediff-window-setup-function (if (ediff-window-display-p)
- 'ediff-setup-windows-multiframe
- 'ediff-setup-windows-plain)
+(defcustom ediff-window-setup-function 'ediff-setup-windows-automatic
"*Function called to set up windows.
-Ediff provides a choice of two functions: `ediff-setup-windows-plain', for
-doing everything in one frame, and `ediff-setup-windows-multiframe',
-which sets the control panel in a separate frame. Also, if the latter
-function detects that one of the buffers A/B is seen in some other frame,
-it will try to keep that buffer in that frame.
+Ediff provides a choice of three functions: `ediff-setup-windows-plain', for
+doing everything in one frame, `ediff-setup-windows-multiframe', which sets
+the control panel in a separate frame, and
+`ediff-setup-windows-automatic' (the default), which chooses an appropriate
+behavior based on the current window system. If the multiframe function
+detects that one of the buffers A/B is seen in some other frame, it will try
+to keep that buffer in that frame.
If you don't like the two functions provided---write your own one.
The basic guidelines:
@@ -94,7 +93,8 @@ The basic guidelines:
Buffer C may not be used in jobs that compare only two buffers.
If you plan to do something fancy, take a close look at how the two
provided functions are written."
- :type '(choice (const :tag "Multi Frame" ediff-setup-windows-multiframe)
+ :type '(choice (const :tag "Automatic" ediff-setup-windows-automatic)
+ (const :tag "Multi Frame" ediff-setup-windows-multiframe)
(const :tag "Single Frame" ediff-setup-windows-plain)
(function :tag "Other function"))
:group 'ediff-window)
@@ -212,7 +212,7 @@ customization of the default control frame positioning."
:type 'integer
:group 'ediff-window)
-(defcustom ediff-narrow-control-frame-leftward-shift (if ediff-xemacs-p 7 3)
+(defcustom ediff-narrow-control-frame-leftward-shift (if (featurep 'xemacs) 7 3)
"*The leftward shift of control frame from the right edge of buf A's frame.
Measured in characters.
This is used by the default control frame positioning function,
@@ -335,6 +335,12 @@ into icons, regardless of the window manager."
buffer-A buffer-B buffer-C control-buffer))
(run-hooks 'ediff-after-setup-windows-hook))
+;; Set up windows using the correct method based on the current window system.
+(defun ediff-setup-windows-automatic (buffer-A buffer-B buffer-C control-buffer)
+ (if (ediff-window-display-p)
+ (ediff-setup-windows-multiframe buffer-A buffer-B buffer-C control-buffer)
+ (ediff-setup-windows-plain buffer-A buffer-B buffer-C control-buffer)))
+
;; Just set up 3 windows.
;; Usually used without windowing systems
;; With windowing, we want to use dedicated frames.
@@ -373,7 +379,7 @@ into icons, regardless of the window manager."
;; XEmacs used to have a lot of trouble with display
;; It did't set things right unless we tell it to sit still
;; 19.12 seems ok.
- ;;(if ediff-xemacs-p (sit-for 0))
+ ;;(if (featurep 'xemacs) (sit-for 0))
(split-window-vertically (max 2 (- (window-height) merge-window-lines)))
(if (eq (selected-window) wind-A)
@@ -436,7 +442,7 @@ into icons, regardless of the window manager."
;; XEmacs used to have a lot of trouble with display
;; It did't set things right unless we told it to sit still
;; 19.12 seems ok.
- ;;(if ediff-xemacs-p (sit-for 0))
+ ;;(if (featurep 'xemacs) (sit-for 0))
(funcall split-window-function wind-width-or-height)
@@ -1036,7 +1042,7 @@ into icons, regardless of the window manager."
(or (eq this-command 'ediff-quit)
(not (eq ediff-grab-mouse t)))))
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(ediff-with-current-buffer ctl-buffer
(ediff-cond-compile-for-xemacs-or-emacs
(make-local-hook 'select-frame-hook) ; xemacs
@@ -1231,7 +1237,7 @@ It assumes that it is called from within the control buffer."
(defun ediff-refresh-control-frame ()
- (if ediff-emacs-p
+ (if (featurep 'emacs)
;; set frame/icon titles for Emacs
(modify-frame-parameters
ediff-control-frame
@@ -1281,7 +1287,7 @@ It assumes that it is called from within the control buffer."
;; If buff is not live, return nil
(defun ediff-get-visible-buffer-window (buff)
(if (ediff-buffer-live-p buff)
- (if ediff-xemacs-p
+ (if (featurep 'xemacs)
(get-buffer-window buff t)
(get-buffer-window buff 'visible))))
diff --git a/lisp/ediff.el b/lisp/ediff.el
index 82a70e64b49..a2aafc90292 100644
--- a/lisp/ediff.el
+++ b/lisp/ediff.el
@@ -7,8 +7,8 @@
;; Created: February 2, 1994
;; Keywords: comparing, merging, patching, tools, unix
-(defconst ediff-version "2.81.1" "The current version of Ediff")
-(defconst ediff-date "October 23, 2006" "Date of last update")
+(defconst ediff-version "2.81.2" "The current version of Ediff")
+(defconst ediff-date "August 18, 2007" "Date of last update")
;; This file is part of GNU Emacs.
@@ -1303,20 +1303,6 @@ buffer."
(intern (format "ediff-%S-merge-internal" ediff-version-control-package))
rev1 rev2 ancestor-rev startup-hooks merge-buffer-file)))
-;; MK: Check. This function doesn't seem to be used any more by pcvs or pcl-cvs
-;;;###autoload
-(defun run-ediff-from-cvs-buffer (pos)
- "Run Ediff-merge on appropriate revisions of the selected file.
-First run after `M-x cvs-update'. Then place the cursor on a line describing a
-file and then run `run-ediff-from-cvs-buffer'."
- (interactive "d")
- (ediff-load-version-control)
- (let ((tin (tin-locate cvs-cookie-handle pos)))
- (if tin
- (cvs-run-ediff-on-file-descriptor tin)
- (error "There is no file to merge"))))
-
-
;;; Apply patch
;;;###autoload
@@ -1454,7 +1440,7 @@ With optional NODE, goes to that node."
(condition-case nil
(progn
(pop-to-buffer (get-buffer-create "*info*"))
- (info (if ediff-xemacs-p "ediff.info" "ediff"))
+ (info (if (featurep 'xemacs) "ediff.info" "ediff"))
(if node
(Info-goto-node node)
(message "Type `i' to search for a specific topic"))
diff --git a/lisp/edmacro.el b/lisp/edmacro.el
index d914d409d05..abd08f4b0b9 100644
--- a/lisp/edmacro.el
+++ b/lisp/edmacro.el
@@ -430,10 +430,7 @@ doubt, use whitespace."
(defun edmacro-format-keys (macro &optional verbose)
(setq macro (edmacro-fix-menu-commands macro))
- (let* ((maps (append (current-minor-mode-maps)
- (if (current-local-map)
- (list (current-local-map)))
- (list (current-global-map))))
+ (let* ((maps (current-active-maps))
(pkeys '(end-macro ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?- ?\C-u
?\M-- ?\M-0 ?\M-1 ?\M-2 ?\M-3 ?\M-4 ?\M-5 ?\M-6
?\M-7 ?\M-8 ?\M-9))
@@ -489,9 +486,9 @@ doubt, use whitespace."
(fkey nil) tlen tkey
(bind (or (loop for map in maps for b = (lookup-key map key)
thereis (and (not (integerp b)) b))
- (and (setq fkey (lookup-key function-key-map rest-mac))
+ (and (setq fkey (lookup-key local-function-key-map rest-mac))
(setq tlen fkey tkey (edmacro-subseq rest-mac 0 tlen)
- fkey (lookup-key function-key-map tkey))
+ fkey (lookup-key local-function-key-map tkey))
(loop for map in maps
for b = (lookup-key map fkey)
when (and (not (integerp b)) b)
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index a969308be2a..f9c778443b4 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -2470,27 +2470,11 @@ will clear the cache."
"Take a macro function DEFINITION and make a lambda out of it."
`(cdr ,definition))
-;; There is no way to determine whether some subr is a special form or not,
-;; hence we need this list (which is probably out of date):
-(defvar ad-special-forms
- (let ((tem '(and catch cond condition-case defconst defmacro
- defun defvar function if interactive let let*
- or prog1 prog2 progn quote save-current-buffer
- save-excursion save-restriction save-window-excursion
- setq setq-default unwind-protect while
- with-output-to-temp-buffer)))
- ;; track-mouse could be void in some configurations.
- (if (fboundp 'track-mouse)
- (push 'track-mouse tem))
- (mapcar 'symbol-function tem)))
-
-(defmacro ad-special-form-p (definition)
- ;;"non-nil if DEFINITION is a special form."
- (list 'memq definition 'ad-special-forms))
-
-(defmacro ad-interactive-p (definition)
- ;;"non-nil if DEFINITION can be called interactively."
- (list 'commandp definition))
+(defun ad-special-form-p (definition)
+ "Non-nil iff DEFINITION is a special form."
+ (if (and (symbolp definition) (fboundp definition))
+ (setq definition (indirect-function definition)))
+ (and (subrp definition) (eq (cdr (subr-arity definition)) 'unevalled)))
(defmacro ad-subr-p (definition)
;;"non-nil if DEFINITION is a subr."
@@ -2606,13 +2590,12 @@ that property, or otherwise use `(&rest ad-subr-args)'."
docstring)))
(defun ad-interactive-form (definition)
- "Return the interactive form of DEFINITION."
- (cond ((ad-compiled-p definition)
- (and (commandp definition)
- (list 'interactive (aref (ad-compiled-code definition) 5))))
- ((or (ad-advice-p definition)
- (ad-lambda-p definition))
- (commandp (ad-lambda-expression definition)))))
+ "Return the interactive form of DEFINITION.
+Like `interactive-form', but also works on pieces of advice."
+ (interactive-form
+ (if (ad-advice-p definition)
+ (ad-lambda-expression definition)
+ definition)))
(defun ad-body-forms (definition)
"Return the list of body forms of DEFINITION."
@@ -2623,17 +2606,13 @@ that property, or otherwise use `(&rest ad-subr-args)'."
(if (ad-interactive-form definition) 1 0))
(cdr (cdr (ad-lambda-expression definition)))))))
-;; Matches the docstring of an advised definition.
-;; The first group of the regexp matches the function name:
-(defvar ad-advised-definition-docstring-regexp "^\\$ad-doc: \\(.+\\)\\$$")
-
(defun ad-make-advised-definition-docstring (function)
"Make an identifying docstring for the advised definition of FUNCTION.
Put function name into the documentation string so we can infer
the name of the advised function from the docstring. This is needed
to generate a proper advised docstring even if we are just given a
-definition (also see the defadvice for `documentation')."
- (format "$ad-doc: %s$" (prin1-to-string function)))
+definition (see the code for `documentation')."
+ (propertize "Advice doc string" 'ad-advice-info function))
(defun ad-advised-definition-p (definition)
"Return non-nil if DEFINITION was generated from advice information."
@@ -2642,8 +2621,7 @@ definition (also see the defadvice for `documentation')."
(ad-compiled-p definition))
(let ((docstring (ad-docstring definition)))
(and (stringp docstring)
- (string-match
- ad-advised-definition-docstring-regexp docstring)))))
+ (get-text-property 0 'ad-advice-info docstring)))))
(defun ad-definition-type (definition)
"Return symbol that describes the type of DEFINITION."
@@ -2697,12 +2675,9 @@ For that it has to be fbound with a non-autoload definition."
(ad-with-auto-activation-disabled
(require 'bytecomp)
(let ((symbol (make-symbol "advice-compilation"))
- (byte-compile-warnings
- (if (listp byte-compile-warnings) byte-compile-warnings
- byte-compile-warning-types)))
+ (byte-compile-warnings byte-compile-warnings))
(if (featurep 'cl)
- (setq byte-compile-warnings
- (remq 'cl-functions byte-compile-warnings)))
+ (byte-compile-disable-warning 'cl-functions))
(fset symbol (symbol-function function))
(byte-compile symbol)
(fset function (symbol-function symbol))))))
@@ -3016,7 +2991,9 @@ in any of these classes."
(setq usage (if (null usage) t (setq origdoc (cdr usage)) (car usage)))
(if origdoc (setq paragraphs (list origdoc)))
(unless (eq style 'plain)
- (push (concat "This " origtype " is advised.") paragraphs))
+ (push (propertize (concat "This " origtype " is advised.")
+ 'face 'font-lock-warning-face)
+ paragraphs))
(ad-dolist (class ad-advice-classes)
(ad-dolist (advice (ad-get-enabled-advices function class))
(setq advice-docstring
@@ -3024,8 +3001,10 @@ in any of these classes."
(if advice-docstring
(push advice-docstring paragraphs))))
(setq origdoc (if paragraphs
- ;; separate paragraphs with blank lines:
- (mapconcat 'identity (nreverse paragraphs) "\n\n")))
+ (propertize
+ ;; separate paragraphs with blank lines:
+ (mapconcat 'identity (nreverse paragraphs) "\n\n")
+ 'ad-advice-info function)))
(help-add-fundoc-usage origdoc usage)))
(defun ad-make-plain-docstring (function)
@@ -3066,7 +3045,7 @@ in any of these classes."
(ad-has-redefining-advice function))
(let* ((origdef (ad-real-orig-definition function))
(origname (ad-get-advice-info-field function 'origname))
- (orig-interactive-p (ad-interactive-p origdef))
+ (orig-interactive-p (commandp origdef))
(orig-subr-p (ad-subr-p origdef))
(orig-special-form-p (ad-special-form-p origdef))
(orig-macro-p (ad-macro-p origdef))
@@ -3078,15 +3057,11 @@ in any of these classes."
(interactive-form
(cond (orig-macro-p nil)
(advised-interactive-form)
- ((ad-interactive-form origdef)
- (if (and (symbolp function) (get function 'elp-info))
- (interactive-form (aref (get function 'elp-info) 2))
- (ad-interactive-form origdef)))
- ;; Otherwise we must have a subr: make it interactive if
- ;; we have to and initialize required arguments in case
- ;; it is called interactively:
- (orig-interactive-p
- (interactive-form origdef))))
+ ((interactive-form origdef)
+ (interactive-form
+ (if (and (symbolp function) (get function 'elp-info))
+ (aref (get function 'elp-info) 2)
+ origdef)))))
(orig-form
(cond ((or orig-special-form-p orig-macro-p)
;; Special forms and macros will be advised into macros.
@@ -3309,8 +3284,8 @@ advised definition from scratch."
t
(ad-arglist original-definition function))
(if (eq (ad-definition-type original-definition) 'function)
- (equal (ad-interactive-form original-definition)
- (ad-interactive-form cached-definition))))))
+ (equal (interactive-form original-definition)
+ (interactive-form cached-definition))))))
(defun ad-get-cache-class-id (function class)
"Return the part of FUNCTION's cache id that identifies CLASS."
@@ -3357,8 +3332,8 @@ advised definition from scratch."
(ad-arglist cached-definition))
(setq code 'interactive-form-mismatch)
(or (null (nth 5 cache-id))
- (equal (ad-interactive-form original-definition)
- (ad-interactive-form cached-definition)))
+ (equal (interactive-form original-definition)
+ (interactive-form cached-definition)))
(setq code 'verified))))
code))
@@ -3939,24 +3914,6 @@ undone on exit of this macro."
;; during bootstrapping.
(ad-define-subr-args 'documentation '(function &optional raw))
-(defadvice documentation (after ad-advised-docstring first disable preact)
- "Builds an advised docstring if FUNCTION is advised."
- ;; Because we get the function name from the advised docstring
- ;; this will work for function names as well as for definitions:
- (if (and (stringp ad-return-value)
- (string-match
- ad-advised-definition-docstring-regexp ad-return-value))
- (let ((function
- (car (read-from-string
- ad-return-value (match-beginning 1) (match-end 1)))))
- (cond ((ad-is-advised function)
- (setq ad-return-value (ad-make-advised-docstring function))
- ;; Handle optional `raw' argument:
- (if (not (ad-get-arg 1))
- (setq ad-return-value
- (substitute-command-keys ad-return-value))))))))
-
-
;; @@ Starting, stopping and recovering from the advice package magic:
;; ===================================================================
@@ -3965,9 +3922,7 @@ undone on exit of this macro."
(interactive)
;; Advising `ad-activate-internal' means death!!
(ad-set-advice-info 'ad-activate-internal nil)
- (ad-safe-fset 'ad-activate-internal 'ad-activate)
- (ad-enable-advice 'documentation 'after 'ad-advised-docstring)
- (ad-activate 'documentation 'compile))
+ (ad-safe-fset 'ad-activate-internal 'ad-activate))
(defun ad-stop-advice ()
"Stop the automatic advice handling magic.
@@ -3975,8 +3930,6 @@ You should only need this in case of Advice-related emergencies."
(interactive)
;; Advising `ad-activate-internal' means death!!
(ad-set-advice-info 'ad-activate-internal nil)
- (ad-disable-advice 'documentation 'after 'ad-advised-docstring)
- (ad-update 'documentation)
(ad-safe-fset 'ad-activate-internal 'ad-activate-internal-off))
(defun ad-recover-normality ()
diff --git a/lisp/emacs-lisp/authors.el b/lisp/emacs-lisp/authors.el
index 0c08e74d70b..486a02d2c6b 100644
--- a/lisp/emacs-lisp/authors.el
+++ b/lisp/emacs-lisp/authors.el
@@ -72,7 +72,7 @@ files.")
("Geoff Voelker" "voelker")
("Gerd M,Av(Bllmann" "Gerd Moellmann")
("Hallvard B. Furuseth" "Hallvard B Furuseth")
- ("Hrvoje Nik,B9(Bi,Bf(B" "Hrvoje Niksic")
+ ("Hrvoje Nik$,1!!(Bi$,1 '(B" "Hrvoje Niksic")
(nil "(afs@hplb.hpl.hp.com)")
(nil "<Use-Author-Address-Header@\\[127.1\\]>")
(nil "Code Extracted")
@@ -81,7 +81,7 @@ files.")
("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn")
("Jan Dj,Ad(Brv" "Jan D." "Jan Djarv")
("Jay K. Adams" "jka@ece.cmu.edu" "Jay Adams")
- ("J,Ai(Br,At(Bme Marant" "J,bi(Br,bt(Bme Marant" "Jerome Marant")
+ ("J,Ai(Br,At(Bme Marant" "J,Ai(Br,At(Bme Marant" "Jerome Marant")
("Jens-Ulrik Holger Petersen" "Jens-Ulrik Petersen")
("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard")
("Johan Bockg,Ae(Brd" "Johan Bockgard")
@@ -90,11 +90,11 @@ files.")
("Joseph Arceneaux" "Joe Arceneaux")
("Juan Le,As(Bn Lahoz Garc,Am(Ba" "Juan-Leon Lahoz Garcia")
("K. Shane Hartman" "Shane Hartman")
- ("Kai Gro,A_(Bjohann" "Kai Grossjohann" "Kai Gro,b_(Bjohann"
+ ("Kai Gro,A_(Bjohann" "Kai Grossjohann" "Kai Gro,A_(Bjohann"
"Kai.Grossjohann@Cs.Uni-Dortmund.De"
"Kai.Grossjohann@Gmx.Net")
("Karl Berry" "K. Berry")
- ("K,Aa(Broly L$,1 q(Brentey" "K,Aa(Broly L,Bu(Brentey" "L$,1 q(Brentey K,Aa(Broly")
+ ("K,Aa(Broly L$,1 q(Brentey" "K,Aa(Broly L$,1 q(Brentey" "L$,1 q(Brentey K,Aa(Broly")
("Kazushi Marukawa" "Kazushi")
("Ken Manheimer" "Kenneth Manheimer")
("Kenichi Handa" "Ken'ichi Handa" "Kenichi HANDA")
@@ -113,7 +113,7 @@ files.")
("Mikio Nakajima" "Nakajima Mikio")
("Paul Eggert" "eggert")
("Paul Reilly" "(pmr@legacy.pajato.com)")
- ("Pavel Jan,Bm(Bk" "Pavel Jan,Am(Bk Ml." "Pavel Jan,Am(Bk" "Pavel@Janik.Cz")
+ ("Pavel Jan,Am(Bk" "Pavel Jan,Am(Bk Ml." "Pavel Jan,Am(Bk" "Pavel@Janik.Cz")
("Per Abrahamsen" "Per Abhiddenware")
("Peter S. Galbraith" "Peter Galbraith")
("Peter Runestig" "Peter 'luna' Runestig")
@@ -418,24 +418,6 @@ author and what he did in hash table TABLE. See the description of
(nconc entry (list (cons action 1))))))))
-(defun authors-process-lines (program &rest args)
- "Execute PROGRAM with ARGS, returning its output as a list of lines.
-Signal an error if the program returns with a non-zero exit status."
- (with-temp-buffer
- (let ((status (apply 'call-process program nil (current-buffer) nil args)))
- (unless (eq status 0)
- (error "%s exited with status %s" program status))
- (goto-char (point-min))
- (let (lines)
- (while (not (eobp))
- (setq lines (cons (buffer-substring-no-properties
- (line-beginning-position)
- (line-end-position))
- lines))
- (forward-line 1))
- (nreverse lines)))))
-
-
(defun authors-canonical-author-name (author)
"Return a canonicalized form of AUTHOR, an author name.
If AUTHOR has an alias, use that. Remove email addresses. Capitalize
@@ -475,8 +457,8 @@ with the file and the number of each action.
:wrote means the author wrote the file
:changed means he changed the file COUNT times."
- (let* ((enable-local-variables t)
- (enable-local-eval t)
+ (let* ((enable-local-variables :safe)
+ (enable-local-eval nil)
(existing-buffer (get-file-buffer log-file))
(buffer (find-file-noselect log-file))
author file pos)
@@ -521,8 +503,8 @@ with the file and the number of each action.
"Scan Lisp file FILE for author information.
TABLE is a hash table to add author information to."
(let* ((existing-buffer (get-file-buffer file))
- (enable-local-variables t)
- (enable-local-eval t)
+ (enable-local-variables :safe)
+ (enable-local-eval nil)
(buffer (find-file-noselect file)))
(save-excursion
(set-buffer buffer)
@@ -605,7 +587,7 @@ Result is a buffer *Authors* containing authorship information, and a
buffer *Authors Errors* containing references to unknown files."
(interactive "DEmacs source directory: ")
(setq root (expand-file-name root))
- (let ((logs (authors-process-lines "find" root "-name" "ChangeLog*"))
+ (let ((logs (process-lines "find" root "-name" "ChangeLog*"))
(table (make-hash-table :test 'equal))
(buffer-name "*Authors*")
authors-checked-files-alist
@@ -617,7 +599,7 @@ buffer *Authors Errors* containing references to unknown files."
(when (string-match "ChangeLog\\(.[0-9]+\\)?$" log)
(message "Scanning %s..." log)
(authors-scan-change-log log table)))
- (let ((els (authors-process-lines "find" root "-name" "*.el")))
+ (let ((els (process-lines "find" root "-name" "*.el")))
(dolist (file els)
(message "Scanning %s..." file)
(authors-scan-el file table)))
@@ -666,8 +648,8 @@ list of their contributions.\n")
(erase-buffer)
(set-buffer-file-coding-system authors-coding-system)
(insert "Unrecognized file entries found:\n\n")
- (mapcar (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n")))
- (sort authors-invalid-file-names 'string-lessp))
+ (mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n")))
+ (sort authors-invalid-file-names 'string-lessp))
(goto-char (point-min))
(compilation-mode)
(message "Errors were found. See buffer %s" (buffer-name))))
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index ee6c229b74f..14877e1b18f 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -41,15 +41,19 @@
A `.el' file can set this in its local variables section to make its
autoloads go somewhere else. The autoload file is assumed to contain a
trailer starting with a FormFeed character.")
+;;;###autoload
+(put 'generated-autoload-file 'safe-local-variable 'stringp)
-(defconst generate-autoload-cookie ";;;###autoload"
+;; This feels like it should be a defconst, but MH-E sets it to
+;; ";;;###mh-autoload" for the autoloads that are to go into mh-loaddefs.el.
+(defvar generate-autoload-cookie ";;;###autoload"
"Magic comment indicating the following form should be autoloaded.
Used by \\[update-file-autoloads]. This string should be
meaningless to Lisp (e.g., a comment).
This string is used:
-;;;###autoload
+\;;;###autoload
\(defun function-to-be-autoloaded () ...)
If this string appears alone on a line, the following form will be
@@ -65,6 +69,8 @@ that text will be copied verbatim to `generated-autoload-file'.")
(defconst generate-autoload-section-continuation ";;;;;; "
"String to add on each continuation of the section header form.")
+(defvar autoload-modified-buffers) ;Dynamically scoped var.
+
(defun make-autoload (form file)
"Turn FORM into an autoload or defvar for source file FILE.
Returns nil if FORM is not a special autoload form (i.e. a function definition
@@ -149,16 +155,14 @@ or macro definition or a defcustom)."
;; the doc-string in FORM.
;; Those properties are now set in lisp-mode.el.
+(defun autoload-generated-file ()
+ (expand-file-name generated-autoload-file
+ ;; File-local settings of generated-autoload-file should
+ ;; be interpreted relative to the file's location,
+ ;; of course.
+ (if (not (local-variable-p 'generated-autoload-file))
+ (expand-file-name "lisp" source-directory))))
-(defun autoload-trim-file-name (file)
- ;; Returns a relative file path for FILE
- ;; starting from the directory that loaddefs.el is in.
- ;; That is normally a directory in load-path,
- ;; which means Emacs will be able to find FILE when it looks.
- ;; Any extra directory names here would prevent finding the file.
- (setq file (expand-file-name file))
- (file-relative-name file
- (file-name-directory generated-autoload-file)))
(defun autoload-read-section-header ()
"Read a section header form.
@@ -205,6 +209,7 @@ put the output in."
(setcdr p nil)
(princ "\n(" outbuf)
(let ((print-escape-newlines t)
+ (print-quoted t)
(print-escape-nonascii t))
(dolist (elt form)
(prin1 elt outbuf)
@@ -228,6 +233,7 @@ put the output in."
outbuf))
(terpri outbuf)))
(let ((print-escape-newlines t)
+ (print-quoted t)
(print-escape-nonascii t))
(print form outbuf)))))))
@@ -253,9 +259,7 @@ put the output in."
"Insert the section-header line,
which lists the file name and which functions are in it, etc."
(insert generate-autoload-section-header)
- (prin1 (list 'autoloads autoloads load-name
- (if (stringp file) (autoload-trim-file-name file) file)
- time)
+ (prin1 (list 'autoloads autoloads load-name file time)
outbuf)
(terpri outbuf)
;; Break that line at spaces, to avoid very long lines.
@@ -272,12 +276,14 @@ which lists the file name and which functions are in it, etc."
(defun autoload-find-file (file)
"Fetch file and put it in a temp buffer. Return the buffer."
;; It is faster to avoid visiting the file.
+ (setq file (expand-file-name file))
(with-current-buffer (get-buffer-create " *autoload-file*")
(kill-all-local-variables)
(erase-buffer)
(setq buffer-undo-list t
buffer-read-only nil)
(emacs-lisp-mode)
+ (setq default-directory (file-name-directory file))
(insert-file-contents file nil)
(let ((enable-local-variables :safe))
(hack-local-variables))
@@ -286,6 +292,12 @@ which lists the file name and which functions are in it, etc."
(defvar no-update-autoloads nil
"File local variable to prevent scanning this file for autoload cookies.")
+(defun autoload-file-load-name (file)
+ (let ((name (file-name-nondirectory file)))
+ (if (string-match "\\.elc?\\(\\.\\|\\'\\)" name)
+ (substring name 0 (match-beginning 0))
+ name)))
+
(defun generate-file-autoloads (file)
"Insert at point a loaddefs autoload section for FILE.
Autoloads are generated for defuns and defmacros in FILE
@@ -294,100 +306,155 @@ If FILE is being visited in a buffer, the contents of the buffer
are used.
Return non-nil in the case where no autoloads were added at point."
(interactive "fGenerate autoloads for file: ")
- (let ((outbuf (current-buffer))
- (autoloads-done '())
- (load-name (let ((name (file-name-nondirectory file)))
- (if (string-match "\\.elc?\\(\\.\\|$\\)" name)
- (substring name 0 (match-beginning 0))
- name)))
- (print-length nil)
- (print-readably t) ; This does something in Lucid Emacs.
- (float-output-format nil)
- (done-any nil)
- (visited (get-file-buffer file))
- output-start)
-
- ;; If the autoload section we create here uses an absolute
- ;; file name for FILE in its header, and then Emacs is installed
- ;; under a different path on another system,
- ;; `update-autoloads-here' won't be able to find the files to be
- ;; autoloaded. So, if FILE is in the same directory or a
- ;; subdirectory of the current buffer's directory, we'll make it
- ;; relative to the current buffer's directory.
- (setq file (expand-file-name file))
- (let* ((source-truename (file-truename file))
- (dir-truename (file-name-as-directory
- (file-truename default-directory)))
- (len (length dir-truename)))
- (if (and (< len (length source-truename))
- (string= dir-truename (substring source-truename 0 len)))
- (setq file (substring source-truename len))))
-
- (with-current-buffer (or visited
- ;; It is faster to avoid visiting the file.
- (autoload-find-file file))
- ;; Obey the no-update-autoloads file local variable.
- (unless no-update-autoloads
- (message "Generating autoloads for %s..." file)
- (setq output-start (with-current-buffer outbuf (point)))
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (while (not (eobp))
- (skip-chars-forward " \t\n\f")
- (cond
- ((looking-at (regexp-quote generate-autoload-cookie))
- (search-forward generate-autoload-cookie)
- (skip-chars-forward " \t")
- (setq done-any t)
- (if (eolp)
- ;; Read the next form and make an autoload.
- (let* ((form (prog1 (read (current-buffer))
- (or (bolp) (forward-line 1))))
- (autoload (make-autoload form load-name)))
- (if autoload
- (push (nth 1 form) autoloads-done)
- (setq autoload form))
- (let ((autoload-print-form-outbuf outbuf))
- (autoload-print-form autoload)))
-
- ;; Copy the rest of the line to the output.
- (princ (buffer-substring
- (progn
- ;; Back up over whitespace, to preserve it.
- (skip-chars-backward " \f\t")
- (if (= (char-after (1+ (point))) ? )
- ;; Eat one space.
- (forward-char 1))
- (point))
- (progn (forward-line 1) (point)))
- outbuf)))
- ((looking-at ";")
- ;; Don't read the comment.
- (forward-line 1))
- (t
- (forward-sexp 1)
- (forward-line 1))))))
-
- (when done-any
- (with-current-buffer outbuf
- (save-excursion
- ;; Insert the section-header line which lists the file name
- ;; and which functions are in it, etc.
- (goto-char output-start)
- (autoload-insert-section-header
- outbuf autoloads-done load-name file
- (nth 5 (file-attributes file)))
- (insert ";;; Generated autoloads from "
- (autoload-trim-file-name file) "\n"))
- (insert generate-autoload-section-trailer)))
- (message "Generating autoloads for %s...done" file))
- (or visited
- ;; We created this buffer, so we should kill it.
- (kill-buffer (current-buffer))))
- (not done-any)))
+ (autoload-generate-file-autoloads file (current-buffer)))
+
+;; When called from `generate-file-autoloads' we should ignore
+;; `generated-autoload-file' altogether. When called from
+;; `update-file-autoloads' we don't know `outbuf'. And when called from
+;; `update-directory-autoloads' it's in between: we know the default
+;; `outbuf' but we should obey any file-local setting of
+;; `generated-autoload-file'.
+(defun autoload-generate-file-autoloads (file &optional outbuf outfile)
+ "Insert an autoload section for FILE in the appropriate buffer.
+Autoloads are generated for defuns and defmacros in FILE
+marked by `generate-autoload-cookie' (which see).
+If FILE is being visited in a buffer, the contents of the buffer are used.
+OUTBUF is the buffer in which the autoload statements should be inserted.
+If OUTBUF is nil, it will be determined by `autoload-generated-file'.
+
+If provided, OUTFILE is expected to be the file name of OUTBUF.
+If OUTFILE is non-nil and FILE specifies a `generated-autoload-file'
+different from OUTFILE, then OUTBUF is ignored.
+
+Return non-nil iff FILE adds no autoloads to OUTFILE
+\(or OUTBUF if OUTFILE is nil)."
+ (catch 'done
+ (let ((autoloads-done '())
+ (load-name (autoload-file-load-name file))
+ (print-length nil)
+ (print-readably t) ; This does something in Lucid Emacs.
+ (float-output-format nil)
+ (visited (get-file-buffer file))
+ (otherbuf nil)
+ (absfile (expand-file-name file))
+ relfile
+ ;; nil until we found a cookie.
+ output-start)
+
+ (with-current-buffer (or visited
+ ;; It is faster to avoid visiting the file.
+ (autoload-find-file file))
+ ;; Obey the no-update-autoloads file local variable.
+ (unless no-update-autoloads
+ (message "Generating autoloads for %s..." file)
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (while (not (eobp))
+ (skip-chars-forward " \t\n\f")
+ (cond
+ ((looking-at (regexp-quote generate-autoload-cookie))
+ ;; If not done yet, figure out where to insert this text.
+ (unless output-start
+ (when (and outfile
+ (not (equal outfile (autoload-generated-file))))
+ ;; A file-local setting of autoload-generated-file says
+ ;; we should ignore OUTBUF.
+ (setq outbuf nil)
+ (setq otherbuf t))
+ (unless outbuf
+ (setq outbuf (autoload-find-destination absfile))
+ (unless outbuf
+ ;; The file has autoload cookies, but they're
+ ;; already up-to-date. If OUTFILE is nil, the
+ ;; entries are in the expected OUTBUF, otherwise
+ ;; they're elsewhere.
+ (throw 'done outfile)))
+ (with-current-buffer outbuf
+ (setq relfile (file-relative-name absfile))
+ (setq output-start (point)))
+ ;; (message "file=%S, relfile=%S, dest=%S"
+ ;; file relfile (autoload-generated-file))
+ )
+ (search-forward generate-autoload-cookie)
+ (skip-chars-forward " \t")
+ (if (eolp)
+ (condition-case err
+ ;; Read the next form and make an autoload.
+ (let* ((form (prog1 (read (current-buffer))
+ (or (bolp) (forward-line 1))))
+ (autoload (make-autoload form load-name)))
+ (if autoload
+ (push (nth 1 form) autoloads-done)
+ (setq autoload form))
+ (let ((autoload-print-form-outbuf outbuf))
+ (autoload-print-form autoload)))
+ (error
+ (message "Error in %s: %S" file err)))
+
+ ;; Copy the rest of the line to the output.
+ (princ (buffer-substring
+ (progn
+ ;; Back up over whitespace, to preserve it.
+ (skip-chars-backward " \f\t")
+ (if (= (char-after (1+ (point))) ? )
+ ;; Eat one space.
+ (forward-char 1))
+ (point))
+ (progn (forward-line 1) (point)))
+ outbuf)))
+ ((looking-at ";")
+ ;; Don't read the comment.
+ (forward-line 1))
+ (t
+ (forward-sexp 1)
+ (forward-line 1))))))
+
+ (when output-start
+ (let ((secondary-autoloads-file-buf
+ (if (local-variable-p 'generated-autoload-file)
+ (current-buffer))))
+ (with-current-buffer outbuf
+ (save-excursion
+ ;; Insert the section-header line which lists the file name
+ ;; and which functions are in it, etc.
+ (goto-char output-start)
+ (autoload-insert-section-header
+ outbuf autoloads-done load-name relfile
+ (if secondary-autoloads-file-buf
+ ;; MD5 checksums are much better because they do not
+ ;; change unless the file changes (so they'll be
+ ;; equal on two different systems and will change
+ ;; less often than time-stamps, thus leading to fewer
+ ;; unneeded changes causing spurious conflicts), but
+ ;; using time-stamps is a very useful optimization,
+ ;; so we use time-stamps for the main autoloads file
+ ;; (loaddefs.el) where we have special ways to
+ ;; circumvent the "random change problem", and MD5
+ ;; checksum in secondary autoload files where we do
+ ;; not need the time-stamp optimization because it is
+ ;; already provided by the primary autoloads file.
+ (md5 secondary-autoloads-file-buf
+ ;; We'd really want to just use
+ ;; `emacs-internal' instead.
+ nil nil 'emacs-mule-unix)
+ (nth 5 (file-attributes relfile))))
+ (insert ";;; Generated autoloads from " relfile "\n"))
+ (insert generate-autoload-section-trailer))))
+ (message "Generating autoloads for %s...done" file))
+ (or visited
+ ;; We created this buffer, so we should kill it.
+ (kill-buffer (current-buffer))))
+ ;; If the entries were added to some other buffer, then the file
+ ;; doesn't add entries to OUTFILE.
+ (or (not output-start) otherbuf))))
+(defun autoload-save-buffers ()
+ (while autoload-modified-buffers
+ (with-current-buffer (pop autoload-modified-buffers)
+ (save-buffer))))
+
;;;###autoload
(defun update-file-autoloads (file &optional save-after)
"Update the autoloads for FILE in `generated-autoload-file'
@@ -397,80 +464,80 @@ save the buffer too.
Return FILE if there was no autoload cookie in it, else nil."
(interactive "fUpdate autoloads for file: \np")
- (let ((load-name (let ((name (file-name-nondirectory file)))
- (if (string-match "\\.elc?\\(\\.\\|$\\)" name)
- (substring name 0 (match-beginning 0))
- name)))
- (found nil)
- (existing-buffer (get-file-buffer file))
- (no-autoloads nil))
- (save-excursion
- ;; We want to get a value for generated-autoload-file from
- ;; the local variables section if it's there.
- (if existing-buffer
- (set-buffer existing-buffer))
- ;; We must read/write the file without any code conversion,
- ;; but still decode EOLs.
- (let ((coding-system-for-read 'raw-text))
- (set-buffer (find-file-noselect
- (autoload-ensure-default-file
- (expand-file-name generated-autoload-file
- (expand-file-name "lisp"
- source-directory)))))
- ;; This is to make generated-autoload-file have Unix EOLs, so
- ;; that it is portable to all platforms.
- (setq buffer-file-coding-system 'raw-text-unix))
- (or (> (buffer-size) 0)
- (error "Autoloads file %s does not exist" buffer-file-name))
- (or (file-writable-p buffer-file-name)
- (error "Autoloads file %s is not writable" buffer-file-name))
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- ;; Look for the section for LOAD-NAME.
- (while (and (not found)
- (search-forward generate-autoload-section-header nil t))
- (let ((form (autoload-read-section-header)))
- (cond ((string= (nth 2 form) load-name)
- ;; We found the section for this file.
- ;; Check if it is up to date.
- (let ((begin (match-beginning 0))
- (last-time (nth 4 form))
- (file-time (nth 5 (file-attributes file))))
- (if (and (or (null existing-buffer)
- (not (buffer-modified-p existing-buffer)))
- (listp last-time) (= (length last-time) 2)
- (not (time-less-p last-time file-time)))
- (progn
- (if (interactive-p)
- (message "\
-Autoload section for %s is up to date."
- file))
- (setq found 'up-to-date))
- (search-forward generate-autoload-section-trailer)
- (delete-region begin (point))
- (setq found t))))
- ((string< load-name (nth 2 form))
- ;; We've come to a section alphabetically later than
- ;; LOAD-NAME. We assume the file is in order and so
- ;; there must be no section for LOAD-NAME. We will
- ;; insert one before the section here.
- (goto-char (match-beginning 0))
- (setq found 'new)))))
- (or found
- (progn
- (setq found 'new)
- ;; No later sections in the file. Put before the last page.
- (goto-char (point-max))
- (search-backward "\f" nil t)))
- (or (eq found 'up-to-date)
- (setq no-autoloads (generate-file-autoloads file)))))
- (and save-after
- (buffer-modified-p)
- (save-buffer))
-
- (if no-autoloads file))))
+ (let* ((autoload-modified-buffers nil)
+ (no-autoloads (autoload-generate-file-autoloads file)))
+ (if autoload-modified-buffers
+ (if save-after (autoload-save-buffers))
+ (if (interactive-p)
+ (message "Autoload section for %s is up to date." file)))
+ (if no-autoloads file)))
+
+(defun autoload-find-destination (file)
+ "Find the destination point of the current buffer's autoloads.
+FILE is the file name of the current buffer.
+Returns a buffer whose point is placed at the requested location.
+Returns nil if the file's autoloads are uptodate, otherwise
+removes any prior now out-of-date autoload entries."
+ (catch 'up-to-date
+ (let* ((load-name (autoload-file-load-name file))
+ (buf (current-buffer))
+ (existing-buffer (if buffer-file-name buf))
+ (found nil))
+ (with-current-buffer
+ ;; We must read/write the file without any code conversion,
+ ;; but still decode EOLs.
+ (let ((coding-system-for-read 'raw-text))
+ (find-file-noselect
+ (autoload-ensure-default-file (autoload-generated-file))))
+ ;; This is to make generated-autoload-file have Unix EOLs, so
+ ;; that it is portable to all platforms.
+ (setq buffer-file-coding-system 'raw-text-unix)
+ (or (> (buffer-size) 0)
+ (error "Autoloads file %s does not exist" buffer-file-name))
+ (or (file-writable-p buffer-file-name)
+ (error "Autoloads file %s is not writable" buffer-file-name))
+ (widen)
+ (goto-char (point-min))
+ ;; Look for the section for LOAD-NAME.
+ (while (and (not found)
+ (search-forward generate-autoload-section-header nil t))
+ (let ((form (autoload-read-section-header)))
+ (cond ((string= (nth 2 form) load-name)
+ ;; We found the section for this file.
+ ;; Check if it is up to date.
+ (let ((begin (match-beginning 0))
+ (last-time (nth 4 form))
+ (file-time (nth 5 (file-attributes file))))
+ (if (and (or (null existing-buffer)
+ (not (buffer-modified-p existing-buffer)))
+ (or
+ ;; last-time is the time-stamp (specifying
+ ;; the last time we looked at the file) and
+ ;; the file hasn't been changed since.
+ (and (listp last-time) (= (length last-time) 2)
+ (not (time-less-p last-time file-time)))
+ ;; last-time is an MD5 checksum instead.
+ (and (stringp last-time)
+ (equal last-time
+ (md5 buf nil nil 'emacs-mule)))))
+ (throw 'up-to-date nil)
+ (autoload-remove-section begin)
+ (setq found t))))
+ ((string< load-name (nth 2 form))
+ ;; We've come to a section alphabetically later than
+ ;; LOAD-NAME. We assume the file is in order and so
+ ;; there must be no section for LOAD-NAME. We will
+ ;; insert one before the section here.
+ (goto-char (match-beginning 0))
+ (setq found t)))))
+ (or found
+ (progn
+ ;; No later sections in the file. Put before the last page.
+ (goto-char (point-max))
+ (search-backward "\f" nil t)))
+ (unless (memq (current-buffer) autoload-modified-buffers)
+ (push (current-buffer) autoload-modified-buffers))
+ (current-buffer)))))
(defun autoload-remove-section (begin)
(goto-char begin)
@@ -498,20 +565,21 @@ directory or directories specified."
(directory-files (expand-file-name dir)
t files-re))
dirs)))
+ (done ())
(this-time (current-time))
- (no-autoloads nil) ;files with no autoload cookies.
- (autoloads-file
- (expand-file-name generated-autoload-file
- (expand-file-name "lisp" source-directory)))
- (top-dir (file-name-directory autoloads-file)))
+ ;; Files with no autoload cookies or whose autoloads go to other
+ ;; files because of file-local autoload-generated-file settings.
+ (no-autoloads nil)
+ (autoload-modified-buffers nil))
(with-current-buffer
- (find-file-noselect (autoload-ensure-default-file autoloads-file))
+ (find-file-noselect
+ (autoload-ensure-default-file (autoload-generated-file)))
(save-excursion
;; Canonicalize file names and remove the autoload file itself.
- (setq files (delete (autoload-trim-file-name buffer-file-name)
- (mapcar 'autoload-trim-file-name files)))
+ (setq files (delete (file-relative-name buffer-file-name)
+ (mapcar 'file-relative-name files)))
(goto-char (point-min))
(while (search-forward generate-autoload-section-header nil t)
@@ -531,19 +599,27 @@ directory or directories specified."
(push file no-autoloads)
(setq files (delete file files)))))))
((not (stringp file)))
- ((not (file-exists-p (expand-file-name file top-dir)))
- ;; Remove the obsolete section.
+ ((or (not (file-exists-p file))
+ ;; Remove duplicates as well, just in case.
+ (member file done))
+ ;; Remove the obsolete section.
(autoload-remove-section (match-beginning 0)))
- ((equal (nth 4 form) (nth 5 (file-attributes file)))
+ ((not (time-less-p (nth 4 form)
+ (nth 5 (file-attributes file))))
;; File hasn't changed.
nil)
(t
- (update-file-autoloads file)))
+ (autoload-remove-section (match-beginning 0))
+ (if (autoload-generate-file-autoloads
+ file (current-buffer) buffer-file-name)
+ (push file no-autoloads))))
+ (push file done)
(setq files (delete file files)))))
;; Elements remaining in FILES have no existing autoload sections yet.
- (setq no-autoloads
- (append no-autoloads
- (delq nil (mapcar 'update-file-autoloads files))))
+ (dolist (file files)
+ (if (autoload-generate-file-autoloads file nil buffer-file-name)
+ (push file no-autoloads)))
+
(when no-autoloads
;; Sort them for better readability.
(setq no-autoloads (sort no-autoloads 'string<))
@@ -554,7 +630,10 @@ directory or directories specified."
(current-buffer) nil nil no-autoloads this-time)
(insert generate-autoload-section-trailer))
- (save-buffer))))
+ (save-buffer)
+ ;; In case autoload entries were added to other files because of
+ ;; file-local autoload-generated-file settings.
+ (autoload-save-buffers))))
(define-obsolete-function-alias 'update-autoloads-from-directories
'update-directory-autoloads "22.1")
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
new file mode 100644
index 00000000000..b8cf8362386
--- /dev/null
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -0,0 +1,472 @@
+;;; avl-tree.el --- balanced binary trees, AVL-trees
+
+;; Copyright (C) 1995, 2007 Free Software Foundation, Inc.
+
+;; Author: Per Cederqvist <ceder@lysator.liu.se>
+;; Inge Wallin <inge@lysator.liu.se>
+;; Thomas Bellman <bellman@lysator.liu.se>
+;; Maintainer: FSF
+;; Created: 10 May 1991
+;; Keywords: extensions, data structures
+
+;; 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 3, 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:
+
+;; An AVL tree is a nearly-perfect balanced binary tree. A tree consists of
+;; two elements, the root node and the compare function. The actual tree
+;; has a dummy node as its root with the real root in the left pointer.
+;;
+;; Each node of the tree consists of one data element, one left
+;; sub-tree and one right sub-tree. Each node also has a balance
+;; count, which is the difference in depth of the left and right
+;; sub-trees.
+;;
+;; The functions with names of the form "avl-tree--" are intended for
+;; internal use only.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+;; ================================================================
+;;; Functions and macros handling an AVL tree node.
+
+(defstruct (avl-tree--node
+ ;; We force a representation without tag so it matches the
+ ;; pre-defstruct representation. Also we use the underlying
+ ;; representation in the implementation of avl-tree--node-branch.
+ (:type vector)
+ (:constructor nil)
+ (:constructor avl-tree--node-create (left right data balance))
+ (:copier nil))
+ left right data balance)
+
+(defalias 'avl-tree--node-branch 'aref
+ ;; This implementation is efficient but breaks the defstruct abstraction.
+ ;; An alternative could be
+ ;; (funcall (aref [avl-tree-left avl-tree-right avl-tree-data] branch) node)
+ "Get value of a branch of a node.
+
+NODE is the node, and BRANCH is the branch.
+0 for left pointer, 1 for right pointer and 2 for the data.\"
+\(fn node branch)")
+;; The funcall/aref trick doesn't work for the setf method, unless we try
+;; and access the underlying setter function, but this wouldn't be
+;; portable either.
+(defsetf avl-tree--node-branch aset)
+
+
+;; ================================================================
+;;; Internal functions for use in the AVL tree package
+
+(defstruct (avl-tree-
+ ;; A tagged list is the pre-defstruct representation.
+ ;; (:type list)
+ :named
+ (:constructor nil)
+ (:constructor avl-tree-create (cmpfun))
+ (:predicate avl-tree-p)
+ (:copier nil))
+ (dummyroot (avl-tree--node-create nil nil nil 0))
+ cmpfun)
+
+(defmacro avl-tree--root (tree)
+ ;; Return the root node for an avl-tree. INTERNAL USE ONLY.
+ `(avl-tree--node-left (avl-tree--dummyroot tree)))
+(defsetf avl-tree--root (tree) (node)
+ `(setf (avl-tree--node-left (avl-tree--dummyroot ,tree)) ,node))
+
+;; ----------------------------------------------------------------
+;; Deleting data
+
+(defun avl-tree--del-balance1 (node branch)
+ ;; Rebalance a tree and return t if the height of the tree has shrunk.
+ (let ((br (avl-tree--node-branch node branch))
+ p1 b1 p2 b2 result)
+ (cond
+ ((< (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) 0)
+ t)
+
+ ((= (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) +1)
+ nil)
+
+ (t
+ ;; Rebalance.
+ (setq p1 (avl-tree--node-right br)
+ b1 (avl-tree--node-balance p1))
+ (if (>= b1 0)
+ ;; Single RR rotation.
+ (progn
+ (setf (avl-tree--node-right br) (avl-tree--node-left p1))
+ (setf (avl-tree--node-left p1) br)
+ (if (= 0 b1)
+ (progn
+ (setf (avl-tree--node-balance br) +1)
+ (setf (avl-tree--node-balance p1) -1)
+ (setq result nil))
+ (setf (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance p1) 0)
+ (setq result t))
+ (setf (avl-tree--node-branch node branch) p1)
+ result)
+
+ ;; Double RL rotation.
+ (setq p2 (avl-tree--node-left p1)
+ b2 (avl-tree--node-balance p2))
+ (setf (avl-tree--node-left p1) (avl-tree--node-right p2))
+ (setf (avl-tree--node-right p2) p1)
+ (setf (avl-tree--node-right br) (avl-tree--node-left p2))
+ (setf (avl-tree--node-left p2) br)
+ (setf (avl-tree--node-balance br) (if (> b2 0) -1 0))
+ (setf (avl-tree--node-balance p1) (if (< b2 0) +1 0))
+ (setf (avl-tree--node-branch node branch) p2)
+ (setf (avl-tree--node-balance p2) 0)
+ t)))))
+
+(defun avl-tree--del-balance2 (node branch)
+ (let ((br (avl-tree--node-branch node branch))
+ p1 b1 p2 b2 result)
+ (cond
+ ((> (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) 0)
+ t)
+
+ ((= (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) -1)
+ nil)
+
+ (t
+ ;; Rebalance.
+ (setq p1 (avl-tree--node-left br)
+ b1 (avl-tree--node-balance p1))
+ (if (<= b1 0)
+ ;; Single LL rotation.
+ (progn
+ (setf (avl-tree--node-left br) (avl-tree--node-right p1))
+ (setf (avl-tree--node-right p1) br)
+ (if (= 0 b1)
+ (progn
+ (setf (avl-tree--node-balance br) -1)
+ (setf (avl-tree--node-balance p1) +1)
+ (setq result nil))
+ (setf (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance p1) 0)
+ (setq result t))
+ (setf (avl-tree--node-branch node branch) p1)
+ result)
+
+ ;; Double LR rotation.
+ (setq p2 (avl-tree--node-right p1)
+ b2 (avl-tree--node-balance p2))
+ (setf (avl-tree--node-right p1) (avl-tree--node-left p2))
+ (setf (avl-tree--node-left p2) p1)
+ (setf (avl-tree--node-left br) (avl-tree--node-right p2))
+ (setf (avl-tree--node-right p2) br)
+ (setf (avl-tree--node-balance br) (if (< b2 0) +1 0))
+ (setf (avl-tree--node-balance p1) (if (> b2 0) -1 0))
+ (setf (avl-tree--node-branch node branch) p2)
+ (setf (avl-tree--node-balance p2) 0)
+ t)))))
+
+(defun avl-tree--do-del-internal (node branch q)
+ (let ((br (avl-tree--node-branch node branch)))
+ (if (avl-tree--node-right br)
+ (if (avl-tree--do-del-internal br +1 q)
+ (avl-tree--del-balance2 node branch))
+ (setf (avl-tree--node-data q) (avl-tree--node-data br))
+ (setf (avl-tree--node-branch node branch)
+ (avl-tree--node-left br))
+ t)))
+
+(defun avl-tree--do-delete (cmpfun root branch data)
+ ;; Return t if the height of the tree has shrunk.
+ (let ((br (avl-tree--node-branch root branch)))
+ (cond
+ ((null br)
+ nil)
+
+ ((funcall cmpfun data (avl-tree--node-data br))
+ (if (avl-tree--do-delete cmpfun br 0 data)
+ (avl-tree--del-balance1 root branch)))
+
+ ((funcall cmpfun (avl-tree--node-data br) data)
+ (if (avl-tree--do-delete cmpfun br 1 data)
+ (avl-tree--del-balance2 root branch)))
+
+ (t
+ ;; Found it. Let's delete it.
+ (cond
+ ((null (avl-tree--node-right br))
+ (setf (avl-tree--node-branch root branch) (avl-tree--node-left br))
+ t)
+
+ ((null (avl-tree--node-left br))
+ (setf (avl-tree--node-branch root branch) (avl-tree--node-right br))
+ t)
+
+ (t
+ (if (avl-tree--do-del-internal br 0 br)
+ (avl-tree--del-balance1 root branch))))))))
+
+;; ----------------------------------------------------------------
+;; Entering data
+
+(defun avl-tree--enter-balance1 (node branch)
+ ;; Rebalance a tree and return t if the height of the tree has grown.
+ (let ((br (avl-tree--node-branch node branch))
+ p1 p2 b2 result)
+ (cond
+ ((< (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) 0)
+ nil)
+
+ ((= (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) +1)
+ t)
+
+ (t
+ ;; Tree has grown => Rebalance.
+ (setq p1 (avl-tree--node-right br))
+ (if (> (avl-tree--node-balance p1) 0)
+ ;; Single RR rotation.
+ (progn
+ (setf (avl-tree--node-right br) (avl-tree--node-left p1))
+ (setf (avl-tree--node-left p1) br)
+ (setf (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-branch node branch) p1))
+
+ ;; Double RL rotation.
+ (setq p2 (avl-tree--node-left p1)
+ b2 (avl-tree--node-balance p2))
+ (setf (avl-tree--node-left p1) (avl-tree--node-right p2))
+ (setf (avl-tree--node-right p2) p1)
+ (setf (avl-tree--node-right br) (avl-tree--node-left p2))
+ (setf (avl-tree--node-left p2) br)
+ (setf (avl-tree--node-balance br) (if (> b2 0) -1 0))
+ (setf (avl-tree--node-balance p1) (if (< b2 0) +1 0))
+ (setf (avl-tree--node-branch node branch) p2))
+ (setf (avl-tree--node-balance (avl-tree--node-branch node branch)) 0)
+ nil))))
+
+(defun avl-tree--enter-balance2 (node branch)
+ ;; Return t if the tree has grown.
+ (let ((br (avl-tree--node-branch node branch))
+ p1 p2 b2)
+ (cond
+ ((> (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) 0)
+ nil)
+
+ ((= (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-balance br) -1)
+ t)
+
+ (t
+ ;; Balance was -1 => Rebalance.
+ (setq p1 (avl-tree--node-left br))
+ (if (< (avl-tree--node-balance p1) 0)
+ ;; Single LL rotation.
+ (progn
+ (setf (avl-tree--node-left br) (avl-tree--node-right p1))
+ (setf (avl-tree--node-right p1) br)
+ (setf (avl-tree--node-balance br) 0)
+ (setf (avl-tree--node-branch node branch) p1))
+
+ ;; Double LR rotation.
+ (setq p2 (avl-tree--node-right p1)
+ b2 (avl-tree--node-balance p2))
+ (setf (avl-tree--node-right p1) (avl-tree--node-left p2))
+ (setf (avl-tree--node-left p2) p1)
+ (setf (avl-tree--node-left br) (avl-tree--node-right p2))
+ (setf (avl-tree--node-right p2) br)
+ (setf (avl-tree--node-balance br) (if (< b2 0) +1 0))
+ (setf (avl-tree--node-balance p1) (if (> b2 0) -1 0))
+ (setf (avl-tree--node-branch node branch) p2))
+ (setf (avl-tree--node-balance (avl-tree--node-branch node branch)) 0)
+ nil))))
+
+(defun avl-tree--do-enter (cmpfun root branch data)
+ ;; Return t if height of tree ROOT has grown. INTERNAL USE ONLY.
+ (let ((br (avl-tree--node-branch root branch)))
+ (cond
+ ((null br)
+ ;; Data not in tree, insert it.
+ (setf (avl-tree--node-branch root branch)
+ (avl-tree--node-create nil nil data 0))
+ t)
+
+ ((funcall cmpfun data (avl-tree--node-data br))
+ (and (avl-tree--do-enter cmpfun br 0 data)
+ (avl-tree--enter-balance2 root branch)))
+
+ ((funcall cmpfun (avl-tree--node-data br) data)
+ (and (avl-tree--do-enter cmpfun br 1 data)
+ (avl-tree--enter-balance1 root branch)))
+
+ (t
+ (setf (avl-tree--node-data br) data)
+ nil))))
+
+;; ----------------------------------------------------------------
+
+(defun avl-tree--mapc (map-function root)
+ ;; Apply MAP-FUNCTION to all nodes in the tree starting with ROOT.
+ ;; The function is applied in-order.
+ ;;
+ ;; Note: MAP-FUNCTION is applied to the node and not to the data itself.
+ ;; INTERNAL USE ONLY.
+ (let ((node root)
+ (stack nil)
+ (go-left t))
+ (push nil stack)
+ (while node
+ (if (and go-left
+ (avl-tree--node-left node))
+ ;; Do the left subtree first.
+ (progn
+ (push node stack)
+ (setq node (avl-tree--node-left node)))
+ ;; Apply the function...
+ (funcall map-function node)
+ ;; and do the right subtree.
+ (setq node (if (setq go-left (avl-tree--node-right node))
+ (avl-tree--node-right node)
+ (pop stack)))))))
+
+(defun avl-tree--do-copy (root)
+ ;; Copy the avl tree with ROOT as root.
+ ;; Highly recursive. INTERNAL USE ONLY.
+ (if (null root)
+ nil
+ (avl-tree--node-create
+ (avl-tree--do-copy (avl-tree--node-left root))
+ (avl-tree--do-copy (avl-tree--node-right root))
+ (avl-tree--node-data root)
+ (avl-tree--node-balance root))))
+
+
+;; ================================================================
+;;; The public functions which operate on AVL trees.
+
+(defalias 'avl-tree-compare-function 'avl-tree--cmpfun
+ "Return the comparison function for the avl tree TREE.
+
+\(fn TREE)")
+
+(defun avl-tree-empty (tree)
+ "Return t if avl tree TREE is emtpy, otherwise return nil."
+ (null (avl-tree--root tree)))
+
+(defun avl-tree-enter (tree data)
+ "In the avl tree TREE insert DATA.
+Return DATA."
+ (avl-tree--do-enter (avl-tree--cmpfun tree)
+ (avl-tree--dummyroot tree)
+ 0
+ data)
+ data)
+
+(defun avl-tree-delete (tree data)
+ "From the avl tree TREE, delete DATA.
+Return the element in TREE which matched DATA,
+nil if no element matched."
+ (avl-tree--do-delete (avl-tree--cmpfun tree)
+ (avl-tree--dummyroot tree)
+ 0
+ data))
+
+(defun avl-tree-member (tree data)
+ "Return the element in the avl tree TREE which matches DATA.
+Matching uses the compare function previously specified in
+`avl-tree-create' when TREE was created.
+
+If there is no such element in the tree, the value is nil."
+ (let ((node (avl-tree--root tree))
+ (compare-function (avl-tree--cmpfun tree))
+ found)
+ (while (and node
+ (not found))
+ (cond
+ ((funcall compare-function data (avl-tree--node-data node))
+ (setq node (avl-tree--node-left node)))
+ ((funcall compare-function (avl-tree--node-data node) data)
+ (setq node (avl-tree--node-right node)))
+ (t
+ (setq found t))))
+ (if node
+ (avl-tree--node-data node)
+ nil)))
+
+(defun avl-tree-map (__map-function__ tree)
+ "Apply __MAP-FUNCTION__ to all elements in the avl tree TREE."
+ (avl-tree--mapc
+ (lambda (node)
+ (setf (avl-tree--node-data node)
+ (funcall __map-function__ (avl-tree--node-data node))))
+ (avl-tree--root tree)))
+
+(defun avl-tree-first (tree)
+ "Return the first element in TREE, or nil if TREE is empty."
+ (let ((node (avl-tree--root tree)))
+ (when node
+ (while (avl-tree--node-left node)
+ (setq node (avl-tree--node-left node)))
+ (avl-tree--node-data node))))
+
+(defun avl-tree-last (tree)
+ "Return the last element in TREE, or nil if TREE is empty."
+ (let ((node (avl-tree--root tree)))
+ (when node
+ (while (avl-tree--node-right node)
+ (setq node (avl-tree--node-right node)))
+ (avl-tree--node-data node))))
+
+(defun avl-tree-copy (tree)
+ "Return a copy of the avl tree TREE."
+ (let ((new-tree (avl-tree-create (avl-tree--cmpfun tree))))
+ (setf (avl-tree--root new-tree) (avl-tree--do-copy (avl-tree--root tree)))
+ new-tree))
+
+(defun avl-tree-flatten (tree)
+ "Return a sorted list containing all elements of TREE."
+ (nreverse
+ (let ((treelist nil))
+ (avl-tree--mapc
+ (lambda (node) (push (avl-tree--node-data node) treelist))
+ (avl-tree--root tree))
+ treelist)))
+
+(defun avl-tree-size (tree)
+ "Return the number of elements in TREE."
+ (let ((treesize 0))
+ (avl-tree--mapc
+ (lambda (data) (setq treesize (1+ treesize)))
+ (avl-tree--root tree))
+ treesize))
+
+(defun avl-tree-clear (tree)
+ "Clear the avl tree TREE."
+ (setf (avl-tree--root tree) nil))
+
+(provide 'avl-tree)
+
+;; arch-tag: 47e26701-43c9-4222-bd79-739eac6357a9
+;;; avl-tree.el ends here
diff --git a/lisp/emacs-lisp/backquote.el b/lisp/emacs-lisp/backquote.el
index a2a929d9601..4940e2fd8c6 100644
--- a/lisp/emacs-lisp/backquote.el
+++ b/lisp/emacs-lisp/backquote.el
@@ -92,7 +92,7 @@ For example (backquote-list* 'a 'b 'c) => (a b . c)"
"Symbol used to represent a splice inside a backquote.")
;;;###autoload
-(defmacro backquote (arg)
+(defmacro backquote (structure)
"Argument STRUCTURE describes a template to build.
The whole structure acts as if it were quoted except for certain
@@ -106,7 +106,7 @@ b => (ba bb bc) ; assume b has this value
`(a ,@b c) => (a ba bb bc c) ; splice in the value of b
Vectors work just like lists. Nested backquotes are permitted."
- (cdr (backquote-process arg)))
+ (cdr (backquote-process structure)))
;; GNU Emacs has no reader macros
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index ebe490fb229..b021b8d9f1a 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -31,7 +31,7 @@
;; "No matter how hard you try, you can't make a racehorse out of a pig.
;; You can, however, make a faster pig."
;;
-;; Or, to put it another way, the emacs byte compiler is a VW Bug. This code
+;; Or, to put it another way, the Emacs byte compiler is a VW Bug. This code
;; makes it be a VW Bug with fuel injection and a turbocharger... You're
;; still not going to make it go faster than 70 mph, but it might be easier
;; to get it there.
@@ -185,6 +185,7 @@
;;; Code:
(require 'bytecomp)
+(eval-when-compile (require 'cl))
(defun byte-compile-log-lap-1 (format &rest args)
(if (aref byte-code-vector 0)
@@ -627,13 +628,24 @@
;;
;; It is now safe to optimize code such that it introduces new bindings.
-;; I'd like this to be a defsubst, but let's not be self-referential...
-(defmacro byte-compile-trueconstp (form)
- ;; Returns non-nil if FORM is a non-nil constant.
- `(cond ((consp ,form) (eq (car ,form) 'quote))
- ((not (symbolp ,form)))
- ((eq ,form t))
- ((keywordp ,form))))
+(defsubst byte-compile-trueconstp (form)
+ "Return non-nil if FORM always evaluates to a non-nil value."
+ (cond ((consp form)
+ (case (car form)
+ (quote (cadr form))
+ (progn (byte-compile-trueconstp (car (last (cdr form)))))))
+ ((not (symbolp form)))
+ ((eq form t))
+ ((keywordp form))))
+
+(defsubst byte-compile-nilconstp (form)
+ "Return non-nil if FORM always evaluates to a nil value."
+ (cond ((consp form)
+ (case (car form)
+ (quote (null (cadr form)))
+ (progn (byte-compile-nilconstp (car (last (cdr form)))))))
+ ((not (symbolp form)) nil)
+ ((null form))))
;; If the function is being called with constant numeric args,
;; evaluate as much as possible at compile-time. This optimizer
@@ -992,17 +1004,17 @@
(setq rest form)
(while (setq rest (cdr rest))
(cond ((byte-compile-trueconstp (car-safe (car rest)))
- (cond ((eq rest (cdr form))
- (setq form
- (if (cdr (car rest))
- (if (cdr (cdr (car rest)))
- (cons 'progn (cdr (car rest)))
- (nth 1 (car rest)))
- (car (car rest)))))
+ ;; This branch will always be taken: kill the subsequent ones.
+ (cond ((eq rest (cdr form)) ;First branch of `cond'.
+ (setq form `(progn ,@(car rest))))
((cdr rest)
(setq form (copy-sequence form))
(setcdr (memq (car rest) form) nil)))
- (setq rest nil)))))
+ (setq rest nil))
+ ((and (consp (car rest))
+ (byte-compile-nilconstp (caar rest)))
+ ;; This branch will never be taken: kill its body.
+ (setcdr (car rest) nil)))))
;;
;; Turn (cond (( <x> )) ... ) into (or <x> (cond ... ))
(if (eq 'cond (car-safe form))
@@ -1016,17 +1028,26 @@
form))
(defun byte-optimize-if (form)
+ ;; (if (progn <insts> <test>) <rest>) ==> (progn <insts> (if <test> <rest>))
;; (if <true-constant> <then> <else...>) ==> <then>
;; (if <false-constant> <then> <else...>) ==> (progn <else...>)
;; (if <test> nil <else...>) ==> (if (not <test>) (progn <else...>))
;; (if <test> <then> nil) ==> (if <test> <then>)
(let ((clause (nth 1 form)))
- (cond ((byte-compile-trueconstp clause)
- (nth 2 form))
- ((null clause)
- (if (nthcdr 4 form)
- (cons 'progn (nthcdr 3 form))
- (nth 3 form)))
+ (cond ((and (eq (car-safe clause) 'progn)
+ ;; `clause' is a proper list.
+ (null (cdr (last clause))))
+ (if (null (cddr clause))
+ ;; A trivial `progn'.
+ (byte-optimize-if `(if ,(cadr clause) ,@(nthcdr 2 form)))
+ (nconc (butlast clause)
+ (list
+ (byte-optimize-if
+ `(if ,(car (last clause)) ,@(nthcdr 2 form)))))))
+ ((byte-compile-trueconstp clause)
+ `(progn ,clause ,(nth 2 form)))
+ ((byte-compile-nilconstp clause)
+ `(progn ,clause ,@(nthcdr 3 form)))
((nth 2 form)
(if (equal '(nil) (nthcdr 3 form))
(list 'if clause (nth 2 form))
@@ -1139,9 +1160,11 @@
(defun byte-optimize-featurep (form)
;; Emacs-21's byte-code doesn't run under XEmacs or SXEmacs anyway, so we
;; can safely optimize away this test.
- (if (member (cdr-safe form) '((quote xemacs) (quote sxemacs)))
+ (if (member (cdr-safe form) '(((quote xemacs)) ((quote sxemacs))))
nil
- form))
+ (if (member (cdr-safe form) '(((quote emacs))))
+ t
+ form)))
(put 'set 'byte-optimizer 'byte-optimize-set)
(defun byte-optimize-set (form)
@@ -1328,7 +1351,7 @@
;; This list contains numbers, which are pc values,
;; before each instruction.
(defun byte-decompile-bytecode (bytes constvec)
- "Turns BYTECODE into lapcode, referring to CONSTVEC."
+ "Turn BYTECODE into lapcode, referring to CONSTVEC."
(let ((byte-compile-constants nil)
(byte-compile-variables nil)
(byte-compile-tag-number 0))
@@ -1998,17 +2021,17 @@ If FOR-EFFECT is non-nil, the return value is assumed to be of no importance."
(assq 'byte-code (symbol-function 'byte-optimize-form))
(let ((byte-optimize nil)
(byte-compile-warnings nil))
- (mapcar (lambda (x)
- (or noninteractive (message "compiling %s..." x))
- (byte-compile x)
- (or noninteractive (message "compiling %s...done" x)))
- '(byte-optimize-form
- byte-optimize-body
- byte-optimize-predicate
- byte-optimize-binary-predicate
- ;; Inserted some more than necessary, to speed it up.
- byte-optimize-form-code-walker
- byte-optimize-lapcode))))
+ (mapc (lambda (x)
+ (or noninteractive (message "compiling %s..." x))
+ (byte-compile x)
+ (or noninteractive (message "compiling %s...done" x)))
+ '(byte-optimize-form
+ byte-optimize-body
+ byte-optimize-predicate
+ byte-optimize-binary-predicate
+ ;; Inserted some more than necessary, to speed it up.
+ byte-optimize-form-code-walker
+ byte-optimize-lapcode))))
nil)
;; arch-tag: 0f14076b-737e-4bef-aae6-908826ec1ff1
diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index d38641e7e4a..b0525cbc7c6 100644
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -103,10 +103,24 @@ The return value of this function is not used."
(eval-and-compile
(put ',name 'byte-optimizer 'byte-compile-inline-expand))))
-(defalias 'declare-function 'ignore
- "In Emacs 22, does nothing. In 23, it will suppress byte-compiler warnings.
-This definition is so that packages may take advantage of the
-Emacs 23 feature and still remain compatible with Emacs 22.")
+(defmacro declare-function (fn file &optional arglist)
+ "Tell the byte-compiler that function FN is defined, in FILE.
+Optional ARGLIST is the argument list used by the function. The
+FILE argument is not used by the byte-compiler, but by the
+`check-declare' package, which checks that FILE contains a
+definition for FN. FILE should be either absolute, or relative
+to the location of the file containing the declaration. ARGLIST
+is used by both the byte-compiler and `check-declare' to check
+for consistency.
+
+Note that for the purposes of `check-declare', this statement
+must be the first non-whitespace on a line, and everything up to
+the end of FILE must be all on the same line. For example:
+
+\(declare-function c-end-of-defun \"progmodes/cc-cmds.el\"
+ \(&optional arg))"
+ ;; Does nothing - byte-compile-declare-function does the work.
+ )
(defun make-obsolete (obsolete-name current-name &optional when)
"Make the byte-compiler warn that OBSOLETE-NAME is obsolete.
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 493977304b1..b40eac3b9d1 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -98,9 +98,12 @@
;; `obsolete' (obsolete variables and functions)
;; `noruntime' (calls to functions only defined
;; within `eval-when-compile')
-;; `cl-warnings' (calls to CL functions)
+;; `cl-functions' (calls to CL functions)
;; `interactive-only' (calls to commands that are
;; not good to call from Lisp)
+;; `make-local' (dubious calls to
+;; `make-variable-buffer-local')
+;; `mapcar' (mapcar called for effect)
;; byte-compile-compatibility Whether the compiler should
;; generate .elc files which can be loaded into
;; generic emacs 18.
@@ -338,7 +341,8 @@ If it is 'byte, then only byte-level optimizations will be logged."
(defconst byte-compile-warning-types
'(redefine callargs free-vars unresolved
- obsolete noruntime cl-functions interactive-only)
+ obsolete noruntime cl-functions interactive-only
+ make-local mapcar)
"The list of warning types used when `byte-compile-warnings' is t.")
(defcustom byte-compile-warnings t
"*List of warnings that the byte-compiler should issue (t for all).
@@ -356,33 +360,82 @@ Elements of the list may be:
cl-functions calls to runtime functions from the CL package (as
distinguished from macros and aliases).
interactive-only
- commands that normally shouldn't be called from Lisp code."
+ commands that normally shouldn't be called from Lisp code.
+ make-local calls to make-variable-buffer-local that may be incorrect.
+ mapcar mapcar called for effect.
+
+If the list begins with `not', then the remaining elements specify warnings to
+suppress. For example, (not mapcar) will suppress warnings about mapcar."
:group 'bytecomp
:type `(choice (const :tag "All" t)
(set :menu-tag "Some"
(const free-vars) (const unresolved)
(const callargs) (const redefine)
(const obsolete) (const noruntime)
- (const cl-functions) (const interactive-only))))
+ (const cl-functions) (const interactive-only)
+ (const make-local) (const mapcar))))
;;;###autoload(put 'byte-compile-warnings 'safe-local-variable 'byte-compile-warnings-safe-p)
;;;###autoload
(defun byte-compile-warnings-safe-p (x)
(or (booleanp x)
(and (listp x)
+ (if (eq (car x) 'not) (setq x (cdr x))
+ t)
(equal (mapcar
(lambda (e)
(when (memq e '(free-vars unresolved
callargs redefine
obsolete noruntime
- cl-functions interactive-only))
+ cl-functions interactive-only
+ make-local mapcar))
e))
x)
x))))
+(defun byte-compile-warning-enabled-p (warning)
+ "Return non-nil if WARNING is enabled, according to `byte-compile-warnings'."
+ (or (eq byte-compile-warnings t)
+ (if (eq (car byte-compile-warnings) 'not)
+ (not (memq warning byte-compile-warnings))
+ (memq warning byte-compile-warnings))))
+
+;;;###autoload
+(defun byte-compile-disable-warning (warning)
+ "Change `byte-compile-warnings' to disable WARNING.
+If `byte-compile-warnings' is t, set it to `(not WARNING)'.
+Otherwise, if the first element is `not', add WARNING, else remove it.
+Normally you should let-bind `byte-compile-warnings' before calling this,
+else the global value will be modified."
+ (setq byte-compile-warnings
+ (cond ((eq byte-compile-warnings t)
+ (list 'not warning))
+ ((eq (car byte-compile-warnings) 'not)
+ (if (memq warning byte-compile-warnings)
+ byte-compile-warnings
+ (append byte-compile-warnings (list warning))))
+ (t
+ (delq warning byte-compile-warnings)))))
+
+;;;###autoload
+(defun byte-compile-enable-warning (warning)
+ "Change `byte-compile-warnings' to enable WARNING.
+If `byte-compile-warnings' is `t', do nothing. Otherwise, if the
+first element is `not', remove WARNING, else add it.
+Normally you should let-bind `byte-compile-warnings' before calling this,
+else the global value will be modified."
+ (or (eq byte-compile-warnings t)
+ (setq byte-compile-warnings
+ (cond ((eq (car byte-compile-warnings) 'not)
+ (delq warning byte-compile-warnings))
+ ((memq warning byte-compile-warnings)
+ byte-compile-warnings)
+ (t
+ (append byte-compile-warnings (list warning)))))))
+
(defvar byte-compile-interactive-only-functions
'(beginning-of-buffer end-of-buffer replace-string replace-regexp
- insert-file insert-buffer insert-file-literally)
+ insert-file insert-buffer insert-file-literally previous-line next-line)
"List of commands that are not meant to be called from Lisp.")
(defvar byte-compile-not-obsolete-var nil
@@ -822,7 +875,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(let ((hist-orig load-history)
(hist-nil-orig current-load-list))
(prog1 (eval form)
- (when (memq 'noruntime byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'noruntime)
(let ((hist-new load-history)
(hist-nil-new current-load-list))
;; Go through load-history, look for newly loaded files
@@ -850,14 +903,12 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(push s byte-compile-noruntime-functions))
(when (and (consp s) (eq t (car s)))
(push (cdr s) old-autoloads)))))))
- (when (memq 'cl-functions byte-compile-warnings)
- (let ((hist-new load-history)
- (hist-nil-new current-load-list))
+ (when (byte-compile-warning-enabled-p 'cl-functions)
+ (let ((hist-new load-history))
;; Go through load-history, look for newly loaded files
;; and mark all the functions defined therein.
(while (and hist-new (not (eq hist-new hist-orig)))
- (let ((xs (pop hist-new))
- old-autoloads)
+ (let ((xs (pop hist-new)))
;; Make sure the file was not already loaded before.
(when (and (equal (car xs) "cl") (not (assoc (car xs) hist-orig)))
(byte-compile-find-cl-functions)))))))))
@@ -870,8 +921,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(let ((tem current-load-list))
(while (not (eq tem hist-nil-orig))
(when (equal (car tem) '(require . cl))
- (setq byte-compile-warnings
- (remq 'cl-functions byte-compile-warnings)))
+ (byte-compile-disable-warning 'cl-functions))
(setq tem (cdr tem)))))))
;;; byte compiler messages
@@ -974,7 +1024,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(pos (if (and byte-compile-current-file
(integerp byte-compile-read-position))
(with-current-buffer byte-compile-current-buffer
- (format "%d:%d:"
+ (format "%d:%d:"
(save-excursion
(goto-char byte-compile-last-position)
(1+ (count-lines (point-min) (point-at-bol))))
@@ -1003,6 +1053,9 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(defun byte-compile-warning-series (&rest ignore)
nil)
+;; (compile-mode) will cause this to be loaded.
+(declare-function compilation-forget-errors "../progmodes/compile" nil)
+
;; Log the start of a file in *Compile-Log*, and mark it as done.
;; Return the position of the start of the page in the log buffer.
;; But do nothing in batch mode.
@@ -1036,8 +1089,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(setq byte-compile-last-logged-file byte-compile-current-file
byte-compile-last-warned-form nil)
;; Do this after setting default-directory.
- (unless (eq major-mode 'compilation-mode)
- (compilation-mode))
+ (unless (derived-mode-p 'compilation-mode) (compilation-mode))
(compilation-forget-errors)
pt))))
@@ -1070,7 +1122,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(handler (nth 1 new))
(when (nth 2 new)))
(byte-compile-set-symbol-position (car form))
- (if (memq 'obsolete byte-compile-warnings)
+ (if (byte-compile-warning-enabled-p 'obsolete)
(byte-compile-warn "`%s' is an obsolete function%s; %s" (car form)
(if when (concat " (as of Emacs " when ")") "")
(if (stringp (car new))
@@ -1209,7 +1261,7 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
(byte-compile-fdefinition (car form) t)))
(sig (if (and def (not (eq def t)))
(byte-compile-arglist-signature
- (if (eq 'lambda (car-safe def))
+ (if (memq (car-safe def) '(declared lambda))
(nth 1 def)
(if (byte-code-function-p def)
(aref def 0)
@@ -1262,7 +1314,7 @@ extra args."
(get (car form) 'byte-compile-format-like))
(let ((nfields (with-temp-buffer
(insert (nth 1 form))
- (goto-char 1)
+ (goto-char (point-min))
(let ((n 0))
(while (re-search-forward "%." nil t)
(unless (eq ?% (char-after (1+ (match-beginning 0))))
@@ -1280,19 +1332,19 @@ extra args."
;; Warn if a custom definition fails to specify :group.
(defun byte-compile-nogroup-warn (form)
(let ((keyword-args (cdr (cdr (cdr (cdr form)))))
- (name (cadr form)))
+ (name (cadr form)))
(or (not (eq (car-safe name) 'quote))
- (and (eq (car form) 'custom-declare-group)
- (equal name ''emacs))
- (plist-get keyword-args :group)
- (not (and (consp name) (eq (car name) 'quote)))
- (byte-compile-warn
- "%s for `%s' fails to specify containing group"
- (cdr (assq (car form)
- '((custom-declare-group . defgroup)
- (custom-declare-face . defface)
- (custom-declare-variable . defcustom))))
- (cadr name)))))
+ (and (eq (car form) 'custom-declare-group)
+ (equal name ''emacs))
+ (plist-get keyword-args :group)
+ (not (and (consp name) (eq (car name) 'quote)))
+ (byte-compile-warn
+ "%s for `%s' fails to specify containing group"
+ (cdr (assq (car form)
+ '((custom-declare-group . defgroup)
+ (custom-declare-face . defface)
+ (custom-declare-variable . defcustom))))
+ (cadr name)))))
;; Warn if the function or macro is being redefined with a different
;; number of arguments.
@@ -1345,7 +1397,8 @@ extra args."
(unless byte-compile-cl-functions
(dolist (elt load-history)
(when (and (stringp (car elt))
- (string-match "^cl\\>" (car elt)))
+ (string-match
+ "^cl\\>" (file-name-nondirectory (car elt))))
(setq byte-compile-cl-functions
(append byte-compile-cl-functions
(cdr elt)))))
@@ -1415,7 +1468,7 @@ extra args."
;; defined, issue a warning enumerating them.
;; `unresolved' in the list `byte-compile-warnings' disables this.
(defun byte-compile-warn-about-unresolved-functions ()
- (when (memq 'unresolved byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'unresolved)
(let ((byte-compile-current-form :end)
(noruntime nil)
(unresolved nil))
@@ -1478,9 +1531,7 @@ symbol itself."
byte-compile-dynamic-docstrings)
;; (byte-compile-generate-emacs19-bytecodes
;; byte-compile-generate-emacs19-bytecodes)
- (byte-compile-warnings (if (eq byte-compile-warnings t)
- byte-compile-warning-types
- byte-compile-warnings))
+ (byte-compile-warnings byte-compile-warnings)
)
body)))
@@ -1657,7 +1708,7 @@ The value is non-nil if there were no errors, nil if errors."
byte-compile-dest-file)
(setq target-file (byte-compile-dest-file filename))
(setq byte-compile-dest-file target-file)
- (with-current-buffer
+ (with-current-buffer
(setq input-buffer (get-buffer-create " *Compiler Input*"))
(erase-buffer)
(setq buffer-file-coding-system nil)
@@ -1823,9 +1874,7 @@ With argument, insert value in current buffer after the form."
(read-with-symbol-positions inbuffer)
(read-symbol-positions-list nil)
;; #### This is bound in b-c-close-variables.
- ;; (byte-compile-warnings (if (eq byte-compile-warnings t)
- ;; byte-compile-warning-types
- ;; byte-compile-warnings))
+ ;; (byte-compile-warnings byte-compile-warnings)
)
(byte-compile-close-variables
(with-current-buffer
@@ -1844,7 +1893,7 @@ With argument, insert value in current buffer after the form."
(displaying-byte-compile-warnings
(and filename (byte-compile-insert-header filename inbuffer outbuffer))
(with-current-buffer inbuffer
- (goto-char 1)
+ (goto-char (point-min))
;; Should we always do this? When calling multiple files, it
;; would be useful to delay this warning until all have been
;; compiled. A: Yes! b-c-u-f might contain dross from a
@@ -1919,7 +1968,7 @@ and will be removed soon. See (elisp)Backquote in the manual."))
(let ((dynamic-docstrings byte-compile-dynamic-docstrings)
(dynamic byte-compile-dynamic))
(set-buffer outbuffer)
- (goto-char 1)
+ (goto-char (point-min))
;; The magic number of .elc files is ";ELC", or 0x3B454C43. After
;; that is the file-format version number (18, 19 or 20) as a
;; byte, followed by some nulls. The primary motivation for doing
@@ -2038,86 +2087,83 @@ list that represents a doc string reference.
;; We need to examine byte-compile-dynamic-docstrings
;; in the input buffer (now current), not in the output buffer.
(let ((dynamic-docstrings byte-compile-dynamic-docstrings))
- ;; FIXME: What's up with those set-buffers&prog1 thingy? --Stef
- (set-buffer
- (prog1 (current-buffer)
- (set-buffer outbuffer)
- (let (position)
-
- ;; Insert the doc string, and make it a comment with #@LENGTH.
- (and (>= (nth 1 info) 0)
- dynamic-docstrings
- (not byte-compile-compatibility)
- (progn
- ;; Make the doc string start at beginning of line
- ;; for make-docfile's sake.
- (insert "\n")
- (setq position
- (byte-compile-output-as-comment
- (nth (nth 1 info) form) nil))
- (setq position (- (position-bytes position) (point-min) -1))
- ;; If the doc string starts with * (a user variable),
- ;; negate POSITION.
- (if (and (stringp (nth (nth 1 info) form))
- (> (length (nth (nth 1 info) form)) 0)
- (eq (aref (nth (nth 1 info) form) 0) ?*))
- (setq position (- position)))))
-
- (if preface
- (progn
- (insert preface)
- (prin1 name outbuffer)))
- (insert (car info))
- (let ((print-escape-newlines t)
- (print-quoted t)
- ;; For compatibility with code before print-circle,
- ;; use a cons cell to say that we want
- ;; print-gensym-alist not to be cleared
- ;; between calls to print functions.
- (print-gensym '(t))
- (print-circle ; handle circular data structures
- (not byte-compile-disable-print-circle))
- print-gensym-alist ; was used before print-circle existed.
- (print-continuous-numbering t)
- print-number-table
- (index 0))
- (prin1 (car form) outbuffer)
- (while (setq form (cdr form))
- (setq index (1+ index))
- (insert " ")
- (cond ((and (numberp specindex) (= index specindex)
- ;; Don't handle the definition dynamically
- ;; if it refers (or might refer)
- ;; to objects already output
- ;; (for instance, gensyms in the arg list).
- (let (non-nil)
- (dotimes (i (length print-number-table))
- (if (aref print-number-table i)
- (setq non-nil t)))
- (not non-nil)))
- ;; Output the byte code and constants specially
- ;; for lazy dynamic loading.
- (let ((position
- (byte-compile-output-as-comment
- (cons (car form) (nth 1 form))
- t)))
- (setq position (- (position-bytes position) (point-min) -1))
- (princ (format "(#$ . %d) nil" position) outbuffer)
- (setq form (cdr form))
- (setq index (1+ index))))
- ((= index (nth 1 info))
- (if position
- (princ (format (if quoted "'(#$ . %d)" "(#$ . %d)")
- position)
- outbuffer)
- (let ((print-escape-newlines nil))
- (goto-char (prog1 (1+ (point))
- (prin1 (car form) outbuffer)))
- (insert "\\\n")
- (goto-char (point-max)))))
- (t
- (prin1 (car form) outbuffer)))))
- (insert (nth 2 info))))))
+ (with-current-buffer outbuffer
+ (let (position)
+
+ ;; Insert the doc string, and make it a comment with #@LENGTH.
+ (and (>= (nth 1 info) 0)
+ dynamic-docstrings
+ (not byte-compile-compatibility)
+ (progn
+ ;; Make the doc string start at beginning of line
+ ;; for make-docfile's sake.
+ (insert "\n")
+ (setq position
+ (byte-compile-output-as-comment
+ (nth (nth 1 info) form) nil))
+ (setq position (- (position-bytes position) (point-min) -1))
+ ;; If the doc string starts with * (a user variable),
+ ;; negate POSITION.
+ (if (and (stringp (nth (nth 1 info) form))
+ (> (length (nth (nth 1 info) form)) 0)
+ (eq (aref (nth (nth 1 info) form) 0) ?*))
+ (setq position (- position)))))
+
+ (if preface
+ (progn
+ (insert preface)
+ (prin1 name outbuffer)))
+ (insert (car info))
+ (let ((print-escape-newlines t)
+ (print-quoted t)
+ ;; For compatibility with code before print-circle,
+ ;; use a cons cell to say that we want
+ ;; print-gensym-alist not to be cleared
+ ;; between calls to print functions.
+ (print-gensym '(t))
+ (print-circle ; handle circular data structures
+ (not byte-compile-disable-print-circle))
+ print-gensym-alist ; was used before print-circle existed.
+ (print-continuous-numbering t)
+ print-number-table
+ (index 0))
+ (prin1 (car form) outbuffer)
+ (while (setq form (cdr form))
+ (setq index (1+ index))
+ (insert " ")
+ (cond ((and (numberp specindex) (= index specindex)
+ ;; Don't handle the definition dynamically
+ ;; if it refers (or might refer)
+ ;; to objects already output
+ ;; (for instance, gensyms in the arg list).
+ (let (non-nil)
+ (dotimes (i (length print-number-table))
+ (if (aref print-number-table i)
+ (setq non-nil t)))
+ (not non-nil)))
+ ;; Output the byte code and constants specially
+ ;; for lazy dynamic loading.
+ (let ((position
+ (byte-compile-output-as-comment
+ (cons (car form) (nth 1 form))
+ t)))
+ (setq position (- (position-bytes position) (point-min) -1))
+ (princ (format "(#$ . %d) nil" position) outbuffer)
+ (setq form (cdr form))
+ (setq index (1+ index))))
+ ((= index (nth 1 info))
+ (if position
+ (princ (format (if quoted "'(#$ . %d)" "(#$ . %d)")
+ position)
+ outbuffer)
+ (let ((print-escape-newlines nil))
+ (goto-char (prog1 (1+ (point))
+ (prin1 (car form) outbuffer)))
+ (insert "\\\n")
+ (goto-char (point-max)))))
+ (t
+ (prin1 (car form) outbuffer)))))
+ (insert (nth 2 info)))))
nil)
(defun byte-compile-keep-pending (form &optional handler)
@@ -2207,7 +2253,7 @@ list that represents a doc string reference.
;; Since there is no doc string, we can compile this as a normal form,
;; and not do a file-boundary.
(byte-compile-keep-pending form)
- (when (memq 'free-vars byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'free-vars)
(push (nth 1 form) byte-compile-bound-variables)
(if (eq (car form) 'defconst)
(push (nth 1 form) byte-compile-const-variables)))
@@ -2217,12 +2263,19 @@ list that represents a doc string reference.
(byte-compile-top-level (nth 2 form) nil 'file))))
form))
+(put 'define-abbrev-table 'byte-hunk-handler 'byte-compile-file-form-define-abbrev-table)
+(defun byte-compile-file-form-define-abbrev-table (form)
+ (when (and (byte-compile-warning-enabled-p 'free-vars)
+ (eq 'quote (car-safe (car-safe (cdr form)))))
+ (push (car-safe (cdr (cadr form))) byte-compile-bound-variables))
+ (byte-compile-keep-pending form))
+
(put 'custom-declare-variable 'byte-hunk-handler
'byte-compile-file-form-custom-declare-variable)
(defun byte-compile-file-form-custom-declare-variable (form)
- (when (memq 'callargs byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'callargs)
(byte-compile-nogroup-warn form))
- (when (memq 'free-vars byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'free-vars)
(push (nth 1 (nth 1 form)) byte-compile-bound-variables))
(let ((tail (nthcdr 4 form)))
(while tail
@@ -2241,13 +2294,11 @@ list that represents a doc string reference.
(put 'require 'byte-hunk-handler 'byte-compile-file-form-require)
(defun byte-compile-file-form-require (form)
- (let ((old-load-list current-load-list)
- (args (mapcar 'eval (cdr form))))
+ (let ((args (mapcar 'eval (cdr form))))
(apply 'require args)
;; Detect (require 'cl) in a way that works even if cl is already loaded.
(if (member (car args) '("cl" cl))
- (setq byte-compile-warnings
- (remq 'cl-functions byte-compile-warnings))))
+ (byte-compile-disable-warning 'cl-functions)))
(byte-compile-keep-pending form 'byte-compile-normal-call))
(put 'progn 'byte-hunk-handler 'byte-compile-file-form-progn)
@@ -2293,12 +2344,12 @@ list that represents a doc string reference.
(cons (list name nil nil) byte-compile-call-tree))))
(setq byte-compile-current-form name) ; for warnings
- (if (memq 'redefine byte-compile-warnings)
+ (if (byte-compile-warning-enabled-p 'redefine)
(byte-compile-arglist-warn form macrop))
(if byte-compile-verbose
(message "Compiling %s... (%s)" (or filename "") (nth 1 form)))
(cond (that-one
- (if (and (memq 'redefine byte-compile-warnings)
+ (if (and (byte-compile-warning-enabled-p 'redefine)
;; don't warn when compiling the stubs in byte-run...
(not (assq (nth 1 form)
byte-compile-initial-macro-environment)))
@@ -2307,7 +2358,7 @@ list that represents a doc string reference.
(nth 1 form)))
(setcdr that-one nil))
(this-one
- (when (and (memq 'redefine byte-compile-warnings)
+ (when (and (byte-compile-warning-enabled-p 'redefine)
;; hack: don't warn when compiling the magic internal
;; byte-compiler macros in byte-run.el...
(not (assq (nth 1 form)
@@ -2318,7 +2369,7 @@ list that represents a doc string reference.
((and (fboundp name)
(eq (car-safe (symbol-function name))
(if macrop 'lambda 'macro)))
- (when (memq 'redefine byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'redefine)
(byte-compile-warn "%s `%s' being redefined as a %s"
(if macrop "function" "macro")
(nth 1 form)
@@ -2404,39 +2455,37 @@ list that represents a doc string reference.
;; If QUOTED is non-nil, print with quoting; otherwise, print without quoting.
(defun byte-compile-output-as-comment (exp quoted)
(let ((position (point)))
- (set-buffer
- (prog1 (current-buffer)
- (set-buffer outbuffer)
-
- ;; Insert EXP, and make it a comment with #@LENGTH.
- (insert " ")
- (if quoted
- (prin1 exp outbuffer)
- (princ exp outbuffer))
- (goto-char position)
- ;; Quote certain special characters as needed.
- ;; get_doc_string in doc.c does the unquoting.
- (while (search-forward "\^A" nil t)
- (replace-match "\^A\^A" t t))
- (goto-char position)
- (while (search-forward "\000" nil t)
- (replace-match "\^A0" t t))
- (goto-char position)
- (while (search-forward "\037" nil t)
- (replace-match "\^A_" t t))
- (goto-char (point-max))
- (insert "\037")
- (goto-char position)
- (insert "#@" (format "%d" (- (position-bytes (point-max))
- (position-bytes position))))
-
- ;; Save the file position of the object.
- ;; Note we should add 1 to skip the space
- ;; that we inserted before the actual doc string,
- ;; and subtract 1 to convert from an 1-origin Emacs position
- ;; to a file position; they cancel.
- (setq position (point))
- (goto-char (point-max))))
+ (with-current-buffer outbuffer
+
+ ;; Insert EXP, and make it a comment with #@LENGTH.
+ (insert " ")
+ (if quoted
+ (prin1 exp outbuffer)
+ (princ exp outbuffer))
+ (goto-char position)
+ ;; Quote certain special characters as needed.
+ ;; get_doc_string in doc.c does the unquoting.
+ (while (search-forward "\^A" nil t)
+ (replace-match "\^A\^A" t t))
+ (goto-char position)
+ (while (search-forward "\000" nil t)
+ (replace-match "\^A0" t t))
+ (goto-char position)
+ (while (search-forward "\037" nil t)
+ (replace-match "\^A_" t t))
+ (goto-char (point-max))
+ (insert "\037")
+ (goto-char position)
+ (insert "#@" (format "%d" (- (position-bytes (point-max))
+ (position-bytes position))))
+
+ ;; Save the file position of the object.
+ ;; Note we should add 1 to skip the space
+ ;; that we inserted before the actual doc string,
+ ;; and subtract 1 to convert from an 1-origin Emacs position
+ ;; to a file position; they cancel.
+ (setq position (point))
+ (goto-char (point-max)))
position))
@@ -2560,7 +2609,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(byte-compile-check-lambda-list (nth 1 fun))
(let* ((arglist (nth 1 fun))
(byte-compile-bound-variables
- (nconc (and (memq 'free-vars byte-compile-warnings)
+ (nconc (and (byte-compile-warning-enabled-p 'free-vars)
(delq '&rest (delq '&optional (copy-sequence arglist))))
byte-compile-bound-variables))
(body (cdr (cdr fun)))
@@ -2771,6 +2820,16 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(cdr body))
(body
(list body))))
+
+(put 'declare-function 'byte-hunk-handler 'byte-compile-declare-function)
+(defun byte-compile-declare-function (form)
+ (push (cons (nth 1 form)
+ (if (< (length form) 4) ; arglist not specified
+ t
+ (list 'declared (nth 3 form))))
+ byte-compile-function-environment)
+ nil)
+
;; This is the recursive entry point for compiling each subform of an
;; expression.
@@ -2800,7 +2859,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
(handler (get fn 'byte-compile)))
(when (byte-compile-const-symbol-p fn)
(byte-compile-warn "`%s' called as a function" fn))
- (and (memq 'interactive-only byte-compile-warnings)
+ (and (byte-compile-warning-enabled-p 'interactive-only)
(memq fn byte-compile-interactive-only-functions)
(byte-compile-warn "`%s' used from Lisp code\n\
That command is designed for interactive use only" fn))
@@ -2815,12 +2874,12 @@ That command is designed for interactive use only" fn))
byte-compile-compatibility)
(get (get fn 'byte-opcode) 'emacs19-opcode))))
(funcall handler form)
- (when (memq 'callargs byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'callargs)
(if (memq fn '(custom-declare-group custom-declare-variable custom-declare-face))
(byte-compile-nogroup-warn form))
(byte-compile-callargs-warn form))
(byte-compile-normal-call form))
- (if (memq 'cl-functions byte-compile-warnings)
+ (if (byte-compile-warning-enabled-p 'cl-functions)
(byte-compile-cl-warn form))))
((and (or (byte-code-function-p (car form))
(eq (car-safe (car form)) 'lambda))
@@ -2836,6 +2895,11 @@ That command is designed for interactive use only" fn))
(defun byte-compile-normal-call (form)
(if byte-compile-generate-call-tree
(byte-compile-annotate-call-tree form))
+ (when (and for-effect (eq (car form) 'mapcar)
+ (byte-compile-warning-enabled-p 'mapcar))
+ (byte-compile-set-symbol-position 'mapcar)
+ (byte-compile-warn
+ "`mapcar' called for effect; use `mapc' or `dolist' instead"))
(byte-compile-push-constant (car form))
(mapc 'byte-compile-form (cdr form)) ; wasteful, but faster.
(byte-compile-out 'byte-call (length (cdr form))))
@@ -2852,7 +2916,7 @@ That command is designed for interactive use only" fn))
(if (symbolp var) "constant" "nonvariable")
(prin1-to-string var))
(if (and (get var 'byte-obsolete-variable)
- (memq 'obsolete byte-compile-warnings)
+ (byte-compile-warning-enabled-p 'obsolete)
(not (eq var byte-compile-not-obsolete-var)))
(let* ((ob (get var 'byte-obsolete-variable))
(when (cdr ob)))
@@ -2861,7 +2925,7 @@ That command is designed for interactive use only" fn))
(if (stringp (car ob))
(car ob)
(format "use `%s' instead." (car ob))))))
- (if (memq 'free-vars byte-compile-warnings)
+ (if (byte-compile-warning-enabled-p 'free-vars)
(if (eq base-op 'byte-varbind)
(push var byte-compile-bound-variables)
(or (boundp var)
@@ -3441,6 +3505,32 @@ That command is designed for interactive use only" fn))
(if ,discard 'byte-goto-if-nil 'byte-goto-if-nil-else-pop))
,tag))
+;; Return the list of items in CONDITION-PARAM that match PRED-LIST.
+;; Only return items that are not in ONLY-IF-NOT-PRESENT.
+(defun byte-compile-find-bound-condition (condition-param
+ pred-list
+ &optional only-if-not-present)
+ (let ((result nil)
+ (nth-one nil)
+ (cond-list
+ (if (memq (car-safe condition-param) pred-list)
+ ;; The condition appears by itself.
+ (list condition-param)
+ ;; If the condition is an `and', look for matches among the
+ ;; `and' arguments.
+ (when (eq 'and (car-safe condition-param))
+ (cdr condition-param)))))
+
+ (dolist (crt cond-list)
+ (when (and (memq (car-safe crt) pred-list)
+ (eq 'quote (car-safe (setq nth-one (nth 1 crt))))
+ ;; Ignore if the symbol is already on the unresolved
+ ;; list.
+ (not (assq (nth 1 nth-one) ; the relevant symbol
+ only-if-not-present)))
+ (push (nth 1 (nth 1 crt)) result)))
+ result))
+
(defmacro byte-compile-maybe-guarded (condition &rest body)
"Execute forms in BODY, potentially guarded by CONDITION.
CONDITION is a variable whose value is a test in an `if' or `cond'.
@@ -3452,35 +3542,34 @@ being undefined will be suppressed.
If CONDITION's value is (not (featurep 'emacs)) or (featurep 'xemacs),
that suppresses all warnings during execution of BODY."
(declare (indent 1) (debug t))
- `(let* ((fbound
- (if (eq 'fboundp (car-safe ,condition))
- (and (eq 'quote (car-safe (nth 1 ,condition)))
- ;; Ignore if the symbol is already on the
- ;; unresolved list.
- (not (assq (nth 1 (nth 1 ,condition)) ; the relevant symbol
- byte-compile-unresolved-functions))
- (nth 1 (nth 1 ,condition)))))
- (bound (if (or (eq 'boundp (car-safe ,condition))
- (eq 'default-boundp (car-safe ,condition)))
- (and (eq 'quote (car-safe (nth 1 ,condition)))
- (nth 1 (nth 1 ,condition)))))
+ `(let* ((fbound-list (byte-compile-find-bound-condition
+ ,condition (list 'fboundp)
+ byte-compile-unresolved-functions))
+ (bound-list (byte-compile-find-bound-condition
+ ,condition (list 'boundp 'default-boundp)))
;; Maybe add to the bound list.
(byte-compile-bound-variables
- (if bound
- (cons bound byte-compile-bound-variables)
+ (if bound-list
+ (append bound-list byte-compile-bound-variables)
byte-compile-bound-variables))
;; Suppress all warnings, for code not used in Emacs.
- (byte-compile-warnings
- (if (member ,condition '((featurep 'xemacs)
- (not (featurep 'emacs))))
- nil byte-compile-warnings)))
+ ;; FIXME: by the time this is executed the `featurep'
+ ;; emacs/xemacs tests have been optimized away, so this is
+ ;; not doing anything useful here, is should probably be
+ ;; moved to a different place.
+ ;; (byte-compile-warnings
+ ;; (if (member ,condition '((featurep 'xemacs)
+ ;; (not (featurep 'emacs))))
+ ;; nil byte-compile-warnings))
+ )
(unwind-protect
(progn ,@body)
;; Maybe remove the function symbol from the unresolved list.
- (if fbound
+ (dolist (fbound fbound-list)
+ (when fbound
(setq byte-compile-unresolved-functions
(delq (assq fbound byte-compile-unresolved-functions)
- byte-compile-unresolved-functions))))))
+ byte-compile-unresolved-functions)))))))
(defun byte-compile-if (form)
(byte-compile-form (car (cdr form)))
@@ -3802,7 +3891,7 @@ that suppresses all warnings during execution of BODY."
(if (= 1 ncall) "" "s")
(if (< ncall 2) "requires" "accepts only")
"2-3")))
- (when (memq 'free-vars byte-compile-warnings)
+ (when (byte-compile-warning-enabled-p 'free-vars)
(push var byte-compile-bound-variables)
(if (eq fun 'defconst)
(push var byte-compile-const-variables)))
@@ -3893,7 +3982,8 @@ that suppresses all warnings during execution of BODY."
;; Warn about misuses of make-variable-buffer-local.
(byte-defop-compiler-1 make-variable-buffer-local byte-compile-make-variable-buffer-local)
(defun byte-compile-make-variable-buffer-local (form)
- (if (eq (car-safe (car-safe (cdr-safe form))) 'quote)
+ (if (and (eq (car-safe (car-safe (cdr-safe form))) 'quote)
+ (byte-compile-warning-enabled-p 'make-local))
(byte-compile-warn
"`make-variable-buffer-local' should be called at toplevel"))
(byte-compile-normal-call form))
@@ -4238,18 +4328,18 @@ and corresponding effects."
(assq 'byte-code (symbol-function 'byte-compile-form))
(let ((byte-optimize nil) ; do it fast
(byte-compile-warnings nil))
- (mapcar (lambda (x)
- (or noninteractive (message "compiling %s..." x))
- (byte-compile x)
- (or noninteractive (message "compiling %s...done" x)))
- '(byte-compile-normal-call
- byte-compile-form
- byte-compile-body
- ;; Inserted some more than necessary, to speed it up.
- byte-compile-top-level
- byte-compile-out-toplevel
- byte-compile-constant
- byte-compile-variable-ref))))
+ (mapc (lambda (x)
+ (or noninteractive (message "compiling %s..." x))
+ (byte-compile x)
+ (or noninteractive (message "compiling %s...done" x)))
+ '(byte-compile-normal-call
+ byte-compile-form
+ byte-compile-body
+ ;; Inserted some more than necessary, to speed it up.
+ byte-compile-top-level
+ byte-compile-out-toplevel
+ byte-compile-constant
+ byte-compile-variable-ref))))
nil)
(run-hooks 'bytecomp-load-hook)
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
new file mode 100644
index 00000000000..c3e41086599
--- /dev/null
+++ b/lisp/emacs-lisp/check-declare.el
@@ -0,0 +1,206 @@
+;;; check-declare.el --- Check declare-function statements
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: Glenn Morris <rgm@gnu.org>
+;; Keywords: lisp, tools, maint
+
+;; 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 3, 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:
+
+;; The byte-compiler often warns about undefined functions that you
+;; know will actually be defined when it matters. The `declare-function'
+;; statement allows you to suppress these warnings. This package
+;; checks that all such statements in a file or directory are accurate.
+;; The entry points are `check-declare-file' and `check-declare-directory'.
+
+;;; TODO:
+
+;; 1. Handle defstructs (eg uniquify-item-base in desktop.el).
+
+;;; Code:
+
+(defconst check-declare-warning-buffer "*Check Declarations Warnings*"
+ "Name of buffer used to display any `check-declare' warnings.")
+
+(defun check-declare-scan (file)
+ "Scan FILE for `declare-function' calls.
+Return a list with elements of the form (FNFILE FN ARGLIST), where
+ARGLIST may be absent. This claims that FNFILE defines FN, with ARGLIST."
+ (let ((m (format "Scanning %s..." file))
+ alist fnfile fn)
+ (message "%s" m)
+ (with-temp-buffer
+ (insert-file-contents file)
+ (while (re-search-forward
+ "^[ \t]*(declare-function[ \t]+\\(\\S-+\\)[ \t]+\
+\"\\(\\S-+\\)\"" nil t)
+ (setq fn (match-string 1)
+ fnfile (match-string 2))
+ (or (file-name-absolute-p fnfile)
+ (setq fnfile (expand-file-name fnfile (file-name-directory file))))
+ (setq alist (cons
+ (list fnfile fn
+ (progn
+ (skip-chars-forward " \t\n")
+ ;; Use `t' to distinguish no arglist
+ ;; specified from an empty one.
+ (if (looking-at "\\((\\|nil\\)")
+ (read (current-buffer))
+ t)))
+ alist))))
+ (message "%sdone" m)
+ alist))
+
+(autoload 'byte-compile-arglist-signature "bytecomp")
+
+(defun check-declare-verify (fnfile fnlist)
+ "Check that FNFILE contains function definitions matching FNLIST.
+Each element of FNLIST has the form (FILE FN ARGLIST), where
+ARGLIST is optional. This means FILE claimed FN was defined in
+FNFILE with the specified ARGLIST. Returns nil if all claims are
+found to be true, otherwise a list of errors with elements of the form
+\(FILE FN TYPE), where TYPE is a string giving details of the error."
+ (let ((m (format "Checking %s..." fnfile))
+ re fn sig siglist arglist type errlist)
+ (message "%s" m)
+ (or (file-exists-p fnfile)
+ (setq fnfile (concat fnfile ".el")))
+ (if (file-exists-p fnfile)
+ (with-temp-buffer
+ (insert-file-contents fnfile)
+ ;; defsubst's don't _have_ to be known at compile time.
+ (setq re (format "^[ \t]*(\\(def\\(?:un\\|subst\\|\
+ine-derived-mode\\)\\)\[ \t]+%s\\([ \t;]+\\|$\\)"
+ (regexp-opt (mapcar 'cadr fnlist) t)))
+ (while (re-search-forward re nil t)
+ (skip-chars-forward " \t\n")
+ (setq fn (match-string 2)
+ sig (if (string-equal "define-derived-mode"
+ (match-string 1))
+ '(0 . 0)
+ (if (looking-at "\\((\\|nil\\)")
+ (byte-compile-arglist-signature
+ (read (current-buffer)))))
+ ;; alist of functions and arglist signatures.
+ siglist (cons (cons fn sig) siglist)))))
+ (dolist (e fnlist)
+ (setq arglist (nth 2 e)
+ type
+ (if re ; re non-nil means found a file
+ (if (setq sig (assoc (cadr e) siglist))
+ ;; Recall we use t to mean no arglist specified,
+ ;; to distinguish from an empty arglist.
+ (unless (eq arglist t)
+ (unless (equal (byte-compile-arglist-signature arglist)
+ (cdr sig))
+ "arglist mismatch"))
+ "function not found")
+ "file not found"))
+ (when type
+ (setq errlist (cons (list (car e) (cadr e) type) errlist))))
+ (message "%s%s" m (if errlist "problems found" "OK"))
+ errlist))
+
+(defun check-declare-sort (alist)
+ "Sort a list with elements FILE (FNFILE ...).
+Returned list has elements FNFILE (FILE ...)."
+ (let (file fnfile rest sort a)
+ (dolist (e alist)
+ (setq file (car e))
+ (dolist (f (cdr e))
+ (setq fnfile (car f)
+ rest (cdr f))
+ (if (setq a (assoc fnfile sort))
+ (setcdr a (append (cdr a) (list (cons file rest))))
+ (setq sort (cons (list fnfile (cons file rest)) sort)))))
+ sort))
+
+(defun check-declare-warn (file fn fnfile type)
+ "Warn that FILE made a false claim about FN in FNFILE.
+TYPE is a string giving the nature of the error. Warning is displayed in
+`check-declare-warning-buffer'."
+ (display-warning 'check-declare
+ (format "%s said `%s' was defined in %s: %s"
+ (file-name-nondirectory file) fn
+ (file-name-nondirectory fnfile)
+ type)
+ nil check-declare-warning-buffer))
+
+(defun check-declare-files (&rest files)
+ "Check veracity of all `declare-function' statements in FILES.
+Return a list of any errors found."
+ (let (alist err errlist)
+ (dolist (file files)
+ (setq alist (cons (cons file (check-declare-scan file)) alist)))
+ ;; Sort so that things are ordered by the files supposed to
+ ;; contain the defuns.
+ (dolist (e (check-declare-sort alist))
+ (if (setq err (check-declare-verify (car e) (cdr e)))
+ (setq errlist (cons (cons (car e) err) errlist))))
+ (if (get-buffer check-declare-warning-buffer)
+ (kill-buffer check-declare-warning-buffer))
+ ;; Sort back again so that errors are ordered by the files
+ ;; containing the declare-function statements.
+ (dolist (e (check-declare-sort errlist))
+ (dolist (f (cdr e))
+ (check-declare-warn (car e) (cadr f) (car f) (nth 2 f))))
+ errlist))
+
+;;;###autoload
+(defun check-declare-file (file)
+ "Check veracity of all `declare-function' statements in FILE.
+See `check-declare-directory' for more information."
+ (interactive "fFile to check: ")
+ (or (file-exists-p file)
+ (error "File `%s' not found" file))
+ (let ((m (format "Checking %s..." file))
+ errlist)
+ (message "%s" m)
+ (setq errlist (check-declare-files file))
+ (message "%s%s" m (if errlist "problems found" "OK"))
+ errlist))
+
+;;;###autoload
+(defun check-declare-directory (root)
+ "Check veracity of all `declare-function' statements under directory ROOT.
+Returns non-nil if any false statements are found. For this to
+work correctly, the statements must adhere to the format
+described in the documentation of `declare-function'."
+ (interactive "DDirectory to check: ")
+ (or (file-directory-p (setq root (expand-file-name root)))
+ (error "Directory `%s' not found" root))
+ (let ((m "Checking `declare-function' statements...")
+ (m2 "Finding files with declarations...")
+ errlist files)
+ (message "%s" m)
+ (message "%s" m2)
+ (setq files (process-lines "find" root "-name" "*.el"
+ "-exec" "grep" "-l"
+ "^[ ]*(declare-function" "{}" ";"))
+ (message "%s%d found" m2 (length files))
+ (when files
+ (setq errlist (apply 'check-declare-files files))
+ (message "%s%s" m (if errlist "problems found" "OK"))
+ errlist)))
+
+(provide 'check-declare)
+
+;; arch-tag: a4d6cdc4-deb7-4502-b327-0e4ef3d82d96
+;;; check-declare.el ends here.
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index e1835d75fcb..185df6fbe43 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -199,6 +199,12 @@
:group 'lisp
:version "20.3")
+(defcustom checkdoc-minor-mode-string " CDoc"
+ "*String to display in mode line when Checkdoc mode is enabled; nil for none."
+ :type '(choice string (const :tag "None" nil))
+ :group 'checkdoc
+ :version "23.1")
+
(defcustom checkdoc-autofix-flag 'semiautomatic
"Non-nil means attempt auto-fixing of doc strings.
If this value is the symbol `query', then the user is queried before
@@ -227,7 +233,7 @@ and that it's good but not required practice to make non user visible items
have doc strings."
:group 'checkdoc
:type 'boolean)
-(put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp)
+;;;###autoload(put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp)
(defcustom checkdoc-force-history-flag t
"Non-nil means that files should have a History section or ChangeLog file.
@@ -243,7 +249,7 @@ should be used when the first part could stand alone as a sentence, but
it indicates that a modifying clause follows."
:group 'checkdoc
:type 'boolean)
-(put 'checkdoc-permit-comma-termination-flag 'safe-local-variable 'booleanp)
+;;;###autoload(put 'checkdoc-permit-comma-termination-flag 'safe-local-variable 'booleanp)
(defcustom checkdoc-spellcheck-documentation-flag nil
"Non-nil means run Ispell on text based on value.
@@ -1176,7 +1182,7 @@ generating a buffered list of errors."
;; Override some bindings
(define-key map "\C-\M-x" 'checkdoc-eval-defun)
(define-key map "\C-x`" 'checkdoc-continue)
- (if (not (string-match "XEmacs" emacs-version))
+ (if (not (featurep 'xemacs))
(define-key map [menu-bar emacs-lisp eval-buffer]
'checkdoc-eval-current-buffer))
;; Add some new bindings under C-c ?
@@ -1251,7 +1257,7 @@ bound to \\<checkdoc-minor-mode-map>\\[checkdoc-eval-defun] and `checkdoc-eval-c
checking of documentation strings.
\\{checkdoc-minor-mode-map}"
- nil " CDoc" nil
+ nil checkdoc-minor-mode-string nil
:group 'checkdoc)
;;; Subst utils
diff --git a/lisp/emacs-lisp/cl-compat.el b/lisp/emacs-lisp/cl-compat.el
index ebfc43ebc80..1f476081f41 100644
--- a/lisp/emacs-lisp/cl-compat.el
+++ b/lisp/emacs-lisp/cl-compat.el
@@ -186,5 +186,9 @@
(provide 'cl-compat)
+;; Local variables:
+;; byte-compile-warnings: (not cl-functions)
+;; End:
+
;; arch-tag: 9996bb4f-aaf5-4592-b436-bf64759a3163
;;; cl-compat.el ends here
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 3036bb7ea7f..375a07f9f7d 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -43,6 +43,7 @@
;;; Type coercion.
+;;;###autoload
(defun coerce (x type)
"Coerce OBJECT to type TYPE.
TYPE is a Common Lisp type specifier.
@@ -60,6 +61,7 @@ TYPE is a Common Lisp type specifier.
;;; Predicates.
+;;;###autoload
(defun equalp (x y)
"Return t if two Lisp objects have similar structures and contents.
This is like `equal', except that it accepts numerically equal
@@ -87,6 +89,7 @@ strings case-insensitively."
;;; Control structures.
+;;;###autoload
(defun cl-mapcar-many (cl-func cl-seqs)
(if (cdr (cdr cl-seqs))
(let* ((cl-res nil)
@@ -119,6 +122,7 @@ strings case-insensitively."
cl-res)))
(nreverse cl-res))))
+;;;###autoload
(defun map (cl-type cl-func cl-seq &rest cl-rest)
"Map a FUNCTION across one or more SEQUENCEs, returning a sequence.
TYPE is the sequence type to return.
@@ -126,6 +130,7 @@ TYPE is the sequence type to return.
(let ((cl-res (apply 'mapcar* cl-func cl-seq cl-rest)))
(and cl-type (coerce cl-res cl-type))))
+;;;###autoload
(defun maplist (cl-func cl-list &rest cl-rest)
"Map FUNCTION to each sublist of LIST or LISTs.
Like `mapcar', except applies to lists and their cdr's rather than to
@@ -154,6 +159,7 @@ the elements themselves.
cl-seq)
(mapc cl-func cl-seq)))
+;;;###autoload
(defun mapl (cl-func cl-list &rest cl-rest)
"Like `maplist', but does not accumulate values returned by the function.
\n(fn FUNCTION LIST...)"
@@ -163,16 +169,19 @@ the elements themselves.
(while cl-p (funcall cl-func cl-p) (setq cl-p (cdr cl-p)))))
cl-list)
+;;;###autoload
(defun mapcan (cl-func cl-seq &rest cl-rest)
"Like `mapcar', but nconc's together the values returned by the function.
\n(fn FUNCTION SEQUENCE...)"
(apply 'nconc (apply 'mapcar* cl-func cl-seq cl-rest)))
+;;;###autoload
(defun mapcon (cl-func cl-list &rest cl-rest)
"Like `maplist', but nconc's together the values returned by the function.
\n(fn FUNCTION LIST...)"
(apply 'nconc (apply 'maplist cl-func cl-list cl-rest)))
+;;;###autoload
(defun some (cl-pred cl-seq &rest cl-rest)
"Return true if PREDICATE is true of any element of SEQ or SEQs.
If so, return the true (non-nil) value returned by PREDICATE.
@@ -188,6 +197,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
(while (and cl-seq (not (setq cl-x (funcall cl-pred (pop cl-seq))))))
cl-x)))
+;;;###autoload
(defun every (cl-pred cl-seq &rest cl-rest)
"Return true if PREDICATE is true of every element of SEQ or SEQs.
\n(fn PREDICATE SEQ...)"
@@ -201,19 +211,23 @@ If so, return the true (non-nil) value returned by PREDICATE.
(setq cl-seq (cdr cl-seq)))
(null cl-seq)))
+;;;###autoload
(defun notany (cl-pred cl-seq &rest cl-rest)
"Return true if PREDICATE is false of every element of SEQ or SEQs.
\n(fn PREDICATE SEQ...)"
(not (apply 'some cl-pred cl-seq cl-rest)))
+;;;###autoload
(defun notevery (cl-pred cl-seq &rest cl-rest)
"Return true if PREDICATE is false of some element of SEQ or SEQs.
\n(fn PREDICATE SEQ...)"
(not (apply 'every cl-pred cl-seq cl-rest)))
;;; Support for `loop'.
+;;;###autoload
(defalias 'cl-map-keymap 'map-keymap)
+;;;###autoload
(defun cl-map-keymap-recursively (cl-func-rec cl-map &optional cl-base)
(or cl-base
(setq cl-base (copy-sequence [0])))
@@ -228,6 +242,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
(funcall cl-func-rec cl-base cl-bind))))
cl-map))
+;;;###autoload
(defun cl-map-intervals (cl-func &optional cl-what cl-prop cl-start cl-end)
(or cl-what (setq cl-what (current-buffer)))
(if (bufferp cl-what)
@@ -255,6 +270,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
(funcall cl-func cl-start (min cl-next cl-end))
(setq cl-start cl-next)))))
+;;;###autoload
(defun cl-map-overlays (cl-func &optional cl-buffer cl-start cl-end cl-arg)
(or cl-buffer (setq cl-buffer (current-buffer)))
(if (fboundp 'overlay-lists)
@@ -296,6 +312,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
(set-marker cl-mark nil) (if cl-mark2 (set-marker cl-mark2 nil)))))
;;; Support for `setf'.
+;;;###autoload
(defun cl-set-frame-visible-p (frame val)
(cond ((null val) (make-frame-invisible frame))
((eq val 'icon) (iconify-frame frame))
@@ -304,6 +321,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
;;; Support for `progv'.
(defvar cl-progv-save)
+;;;###autoload
(defun cl-progv-before (syms values)
(while syms
(push (if (boundp (car syms))
@@ -323,6 +341,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
;;; Numbers.
+;;;###autoload
(defun gcd (&rest args)
"Return the greatest common divisor of the arguments."
(let ((a (abs (or (pop args) 0))))
@@ -331,6 +350,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
(while (> b 0) (setq b (% a (setq a b))))))
a))
+;;;###autoload
(defun lcm (&rest args)
"Return the least common multiple of the arguments."
(if (memq 0 args)
@@ -341,6 +361,7 @@ If so, return the true (non-nil) value returned by PREDICATE.
(setq a (* (/ a (gcd a b)) b))))
a)))
+;;;###autoload
(defun isqrt (x)
"Return the integer square root of the argument."
(if (and (integerp x) (> x 0))
@@ -352,12 +373,14 @@ If so, return the true (non-nil) value returned by PREDICATE.
g)
(if (eq x 0) 0 (signal 'arith-error nil))))
+;;;###autoload
(defun floor* (x &optional y)
"Return a list of the floor of X and the fractional part of X.
With two arguments, return floor and remainder of their quotient."
(let ((q (floor x y)))
(list q (- x (if y (* y q) q)))))
+;;;###autoload
(defun ceiling* (x &optional y)
"Return a list of the ceiling of X and the fractional part of X.
With two arguments, return ceiling and remainder of their quotient."
@@ -365,12 +388,14 @@ With two arguments, return ceiling and remainder of their quotient."
(if (= (car (cdr res)) 0) res
(list (1+ (car res)) (- (car (cdr res)) (or y 1))))))
+;;;###autoload
(defun truncate* (x &optional y)
"Return a list of the integer part of X and the fractional part of X.
With two arguments, return truncation and remainder of their quotient."
(if (eq (>= x 0) (or (null y) (>= y 0)))
(floor* x y) (ceiling* x y)))
+;;;###autoload
(defun round* (x &optional y)
"Return a list of X rounded to the nearest integer and the remainder.
With two arguments, return rounding and remainder of their quotient."
@@ -389,14 +414,17 @@ With two arguments, return rounding and remainder of their quotient."
(let ((q (round x)))
(list q (- x q))))))
+;;;###autoload
(defun mod* (x y)
"The remainder of X divided by Y, with the same sign as Y."
(nth 1 (floor* x y)))
+;;;###autoload
(defun rem* (x y)
"The remainder of X divided by Y, with the same sign as X."
(nth 1 (truncate* x y)))
+;;;###autoload
(defun signum (x)
"Return 1 if X is positive, -1 if negative, 0 if zero."
(cond ((> x 0) 1) ((< x 0) -1) (t 0)))
@@ -405,6 +433,7 @@ With two arguments, return rounding and remainder of their quotient."
;; Random numbers.
(defvar *random-state*)
+;;;###autoload
(defun random* (lim &optional state)
"Return a random nonnegative number less than LIM, an integer or float.
Optional second arg STATE is a random-state object."
@@ -412,7 +441,7 @@ Optional second arg STATE is a random-state object."
;; Inspired by "ran3" from Numerical Recipes. Additive congruential method.
(let ((vec (aref state 3)))
(if (integerp vec)
- (let ((i 0) (j (- 1357335 (% (abs vec) 1357333))) (k 1) ii)
+ (let ((i 0) (j (- 1357335 (% (abs vec) 1357333))) (k 1))
(aset state 3 (setq vec (make-vector 55 nil)))
(aset vec 0 j)
(while (> (setq i (% (+ i 21) 55)) 0)
@@ -429,6 +458,7 @@ Optional second arg STATE is a random-state object."
(if (< (setq n (logand n mask)) lim) n (random* lim state))))
(* (/ n '8388608e0) lim)))))
+;;;###autoload
(defun make-random-state (&optional state)
"Return a copy of random-state STATE, or of `*random-state*' if omitted.
If STATE is t, return a new state object seeded from the time of day."
@@ -437,6 +467,7 @@ If STATE is t, return a new state object seeded from the time of day."
((integerp state) (vector 'cl-random-state-tag -1 30 state))
(t (make-random-state (cl-random-time)))))
+;;;###autoload
(defun random-state-p (object)
"Return t if OBJECT is a random-state object."
(and (vectorp object) (= (length object) 4)
@@ -460,6 +491,7 @@ If STATE is t, return a new state object seeded from the time of day."
(defvar float-epsilon)
(defvar float-negative-epsilon)
+;;;###autoload
(defun cl-float-limits ()
(or most-positive-float (not (numberp '2e1))
(let ((x '2e0) y z)
@@ -497,6 +529,7 @@ If STATE is t, return a new state object seeded from the time of day."
;;; Sequence functions.
+;;;###autoload
(defun subseq (seq start &optional end)
"Return the subsequence of SEQ from START to END.
If END is omitted, it defaults to the length of the sequence.
@@ -522,6 +555,7 @@ If START or END is negative, it counts from the end."
(setq i (1+ i) start (1+ start)))
res))))))
+;;;###autoload
(defun concatenate (type &rest seqs)
"Concatenate, into a sequence of type TYPE, the argument SEQUENCEs.
\n(fn TYPE SEQUENCE...)"
@@ -533,14 +567,17 @@ If START or END is negative, it counts from the end."
;;; List functions.
+;;;###autoload
(defun revappend (x y)
"Equivalent to (append (reverse X) Y)."
(nconc (reverse x) y))
+;;;###autoload
(defun nreconc (x y)
"Equivalent to (nconc (nreverse X) Y)."
(nconc (nreverse x) y))
+;;;###autoload
(defun list-length (x)
"Return the length of list X. Return nil if list is circular."
(let ((n 0) (fast x) (slow x))
@@ -548,6 +585,7 @@ If START or END is negative, it counts from the end."
(setq n (+ n 2) fast (cdr (cdr fast)) slow (cdr slow)))
(if fast (if (cdr fast) nil (1+ n)) n)))
+;;;###autoload
(defun tailp (sublist list)
"Return true if SUBLIST is a tail of LIST."
(while (and (consp list) (not (eq sublist list)))
@@ -559,6 +597,7 @@ If START or END is negative, it counts from the end."
;;; Property lists.
+;;;###autoload
(defun get* (sym tag &optional def) ; See compiler macro in cl-macs.el
"Return the value of SYMBOL's PROPNAME property, or DEFAULT if none.
\n(fn SYMBOL PROPNAME &optional DEFAULT)"
@@ -569,6 +608,7 @@ If START or END is negative, it counts from the end."
(setq plist (cdr (cdr plist))))
(if plist (car (cdr plist)) def)))))
+;;;###autoload
(defun getf (plist tag &optional def)
"Search PROPLIST for property PROPNAME; return its value or DEFAULT.
PROPLIST is a list of the sort returned by `symbol-plist'.
@@ -583,16 +623,19 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
(setq plist (cdr (cdr plist))))
(if plist (car (cdr plist)) def))))
+;;;###autoload
(defun cl-set-getf (plist tag val)
(let ((p plist))
(while (and p (not (eq (car p) tag))) (setq p (cdr (cdr p))))
(if p (progn (setcar (cdr p) val) plist) (list* tag val plist))))
+;;;###autoload
(defun cl-do-remf (plist tag)
(let ((p (cdr plist)))
(while (and (cdr p) (not (eq (car (cdr p)) tag))) (setq p (cdr (cdr p))))
(and (cdr p) (progn (setcdr p (cdr (cdr (cdr p)))) t))))
+;;;###autoload
(defun cl-remprop (sym tag)
"Remove from SYMBOL's plist the property PROPNAME and its value.
\n(fn SYMBOL PROPNAME)"
@@ -600,6 +643,7 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
(if (and plist (eq tag (car plist)))
(progn (setplist sym (cdr (cdr plist))) t)
(cl-do-remf plist tag))))
+;;;###autoload
(defalias 'remprop 'cl-remprop)
@@ -616,14 +660,22 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
(defvar cl-builtin-clrhash (symbol-function 'clrhash))
(defvar cl-builtin-maphash (symbol-function 'maphash))
+;;;###autoload
(defalias 'cl-gethash 'gethash)
+;;;###autoload
(defalias 'cl-puthash 'puthash)
+;;;###autoload
(defalias 'cl-remhash 'remhash)
+;;;###autoload
(defalias 'cl-clrhash 'clrhash)
+;;;###autoload
(defalias 'cl-maphash 'maphash)
;; These three actually didn't exist in Emacs-20.
+;;;###autoload
(defalias 'cl-make-hash-table 'make-hash-table)
+;;;###autoload
(defalias 'cl-hash-table-p 'hash-table-p)
+;;;###autoload
(defalias 'cl-hash-table-count 'hash-table-count)
;;; Some debugging aids.
@@ -672,6 +724,7 @@ PROPLIST is a list of the sort returned by `symbol-plist'.
(defvar cl-macroexpand-cmacs nil)
(defvar cl-closure-vars nil)
+;;;###autoload
(defun cl-macroexpand-all (form &optional env)
"Expand all macro calls through a Lisp FORM.
This also does some trivial optimizations to make the form prettier."
@@ -753,6 +806,7 @@ This also does some trivial optimizations to make the form prettier."
(defun cl-macroexpand-body (body &optional env)
(mapcar (function (lambda (x) (cl-macroexpand-all x env))) body))
+;;;###autoload
(defun cl-prettyexpand (form &optional full)
(message "Expanding...")
(let ((cl-macroexpand-cmacs full) (cl-compiling-file full)
@@ -767,5 +821,9 @@ This also does some trivial optimizations to make the form prettier."
(run-hooks 'cl-extra-load-hook)
+;; Local variables:
+;; generated-autoload-file: "cl-loaddefs.el"
+;; End:
+
;; arch-tag: bcd03437-0871-43fb-a8f1-ad0e0b5427ed
;;; cl-extra.el ends here
diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el
index 1589e19cbb2..e47247557d0 100644
--- a/lisp/emacs-lisp/cl-loaddefs.el
+++ b/lisp/emacs-lisp/cl-loaddefs.el
@@ -10,7 +10,7 @@
;;;;;; ceiling* floor* isqrt lcm gcd cl-progv-before cl-set-frame-visible-p
;;;;;; cl-map-overlays cl-map-intervals cl-map-keymap-recursively
;;;;;; notevery notany every some mapcon mapcan mapl maplist map
-;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "47c92504dda976a632c2c10bedd4b6a4")
+;;;;;; cl-mapcar-many equalp coerce) "cl-extra" "cl-extra.el" "53c2b3ede19dac62cff13a37f58cdf9c")
;;; Generated autoloads from cl-extra.el
(autoload (quote coerce) "cl-extra" "\
@@ -283,53 +283,53 @@ Not documented
;;;;;; do* do loop return-from return block etypecase typecase ecase
;;;;;; case load-time-value eval-when destructuring-bind function*
;;;;;; defmacro* defun* gentemp gensym cl-compile-time-init) "cl-macs"
-;;;;;; "cl-macs.el" "7ccc827d272482ca276937ca18a7895a")
+;;;;;; "cl-macs.el" "c9b59a98f2066022e751aa5203b8d6b0")
;;; Generated autoloads from cl-macs.el
-(autoload (quote cl-compile-time-init) "cl-macs" "\
+(autoload 'cl-compile-time-init "cl-macs" "\
Not documented
\(fn)" nil nil)
-(autoload (quote gensym) "cl-macs" "\
+(autoload 'gensym "cl-macs" "\
Generate a new uninterned symbol.
The name is made by appending a number to PREFIX, default \"G\".
\(fn &optional PREFIX)" nil nil)
-(autoload (quote gentemp) "cl-macs" "\
+(autoload 'gentemp "cl-macs" "\
Generate a new interned symbol with a unique name.
The name is made by appending a number to PREFIX, default \"G\".
\(fn &optional PREFIX)" nil nil)
-(autoload (quote defun*) "cl-macs" "\
+(autoload 'defun* "cl-macs" "\
Define NAME as a function.
Like normal `defun', except ARGLIST allows full Common Lisp conventions,
and BODY is implicitly surrounded by (block NAME ...).
\(fn NAME ARGLIST [DOCSTRING] BODY...)" nil (quote macro))
-(autoload (quote defmacro*) "cl-macs" "\
+(autoload 'defmacro* "cl-macs" "\
Define NAME as a macro.
Like normal `defmacro', except ARGLIST allows full Common Lisp conventions,
and BODY is implicitly surrounded by (block NAME ...).
\(fn NAME ARGLIST [DOCSTRING] BODY...)" nil (quote macro))
-(autoload (quote function*) "cl-macs" "\
+(autoload 'function* "cl-macs" "\
Introduce a function.
Like normal `function', except that if argument is a lambda form,
its argument list allows full Common Lisp conventions.
\(fn FUNC)" nil (quote macro))
-(autoload (quote destructuring-bind) "cl-macs" "\
+(autoload 'destructuring-bind "cl-macs" "\
Not documented
\(fn ARGS EXPR &rest BODY)" nil (quote macro))
-(autoload (quote eval-when) "cl-macs" "\
+(autoload 'eval-when "cl-macs" "\
Control when BODY is evaluated.
If `compile' is in WHEN, BODY is evaluated when compiled at top-level.
If `load' is in WHEN, BODY is evaluated when loaded after top-level compile.
@@ -337,13 +337,13 @@ If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level.
\(fn (WHEN...) BODY...)" nil (quote macro))
-(autoload (quote load-time-value) "cl-macs" "\
+(autoload 'load-time-value "cl-macs" "\
Like `progn', but evaluates the body at load time.
The result of the body appears to the compiler as a quoted constant.
\(fn FORM &optional READ-ONLY)" nil (quote macro))
-(autoload (quote case) "cl-macs" "\
+(autoload 'case "cl-macs" "\
Eval EXPR and choose among clauses on that value.
Each clause looks like (KEYLIST BODY...). EXPR is evaluated and compared
against each key in each KEYLIST; the corresponding BODY is evaluated.
@@ -354,13 +354,13 @@ Key values are compared by `eql'.
\(fn EXPR (KEYLIST BODY...)...)" nil (quote macro))
-(autoload (quote ecase) "cl-macs" "\
+(autoload 'ecase "cl-macs" "\
Like `case', but error if no case fits.
`otherwise'-clauses are not allowed.
\(fn EXPR (KEYLIST BODY...)...)" nil (quote macro))
-(autoload (quote typecase) "cl-macs" "\
+(autoload 'typecase "cl-macs" "\
Evals EXPR, chooses among clauses on that value.
Each clause looks like (TYPE BODY...). EXPR is evaluated and, if it
satisfies TYPE, the corresponding BODY is evaluated. If no clause succeeds,
@@ -369,13 +369,13 @@ final clause, and matches if no other keys match.
\(fn EXPR (TYPE BODY...)...)" nil (quote macro))
-(autoload (quote etypecase) "cl-macs" "\
+(autoload 'etypecase "cl-macs" "\
Like `typecase', but error if no case fits.
`otherwise'-clauses are not allowed.
\(fn EXPR (TYPE BODY...)...)" nil (quote macro))
-(autoload (quote block) "cl-macs" "\
+(autoload 'block "cl-macs" "\
Define a lexically-scoped block named NAME.
NAME may be any symbol. Code inside the BODY forms can call `return-from'
to jump prematurely out of the block. This differs from `catch' and `throw'
@@ -387,13 +387,13 @@ called from BODY.
\(fn NAME &rest BODY)" nil (quote macro))
-(autoload (quote return) "cl-macs" "\
+(autoload 'return "cl-macs" "\
Return from the block named nil.
This is equivalent to `(return-from nil RESULT)'.
\(fn &optional RESULT)" nil (quote macro))
-(autoload (quote return-from) "cl-macs" "\
+(autoload 'return-from "cl-macs" "\
Return from the block named NAME.
This jump out to the innermost enclosing `(block NAME ...)' form,
returning RESULT from that form (or nil if RESULT is omitted).
@@ -402,7 +402,7 @@ This is compatible with Common Lisp, but note that `defun' and
\(fn NAME &optional RESULT)" nil (quote macro))
-(autoload (quote loop) "cl-macs" "\
+(autoload 'loop "cl-macs" "\
The Common Lisp `loop' macro.
Valid clauses are:
for VAR from/upfrom/downfrom NUM to/upto/downto/above/below NUM by NUM,
@@ -418,24 +418,24 @@ Valid clauses are:
\(fn CLAUSE...)" nil (quote macro))
-(autoload (quote do) "cl-macs" "\
+(autoload 'do "cl-macs" "\
The Common Lisp `do' loop.
\(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" nil (quote macro))
-(autoload (quote do*) "cl-macs" "\
+(autoload 'do* "cl-macs" "\
The Common Lisp `do*' loop.
\(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)" nil (quote macro))
-(autoload (quote dolist) "cl-macs" "\
+(autoload 'dolist "cl-macs" "\
Loop over a list.
Evaluate BODY with VAR bound to each `car' from LIST, in turn.
Then evaluate RESULT to get return value, default nil.
\(fn (VAR LIST [RESULT]) BODY...)" nil (quote macro))
-(autoload (quote dotimes) "cl-macs" "\
+(autoload 'dotimes "cl-macs" "\
Loop a certain number of times.
Evaluate BODY with VAR bound to successive integers from 0, inclusive,
to COUNT, exclusive. Then evaluate RESULT to get return value, default
@@ -443,26 +443,26 @@ nil.
\(fn (VAR COUNT [RESULT]) BODY...)" nil (quote macro))
-(autoload (quote do-symbols) "cl-macs" "\
+(autoload 'do-symbols "cl-macs" "\
Loop over all symbols.
Evaluate BODY with VAR bound to each interned symbol, or to each symbol
from OBARRAY.
\(fn (VAR [OBARRAY [RESULT]]) BODY...)" nil (quote macro))
-(autoload (quote do-all-symbols) "cl-macs" "\
+(autoload 'do-all-symbols "cl-macs" "\
Not documented
\(fn SPEC &rest BODY)" nil (quote macro))
-(autoload (quote psetq) "cl-macs" "\
+(autoload 'psetq "cl-macs" "\
Set SYMs to the values VALs in parallel.
This is like `setq', except that all VAL forms are evaluated (in order)
before assigning any symbols SYM to the corresponding values.
\(fn SYM VAL SYM VAL ...)" nil (quote macro))
-(autoload (quote progv) "cl-macs" "\
+(autoload 'progv "cl-macs" "\
Bind SYMBOLS to VALUES dynamically in BODY.
The forms SYMBOLS and VALUES are evaluated, and must evaluate to lists.
Each symbol in the first list is bound to the corresponding value in the
@@ -472,7 +472,7 @@ a `let' form, except that the list of symbols can be computed at run-time.
\(fn SYMBOLS VALUES &rest BODY)" nil (quote macro))
-(autoload (quote flet) "cl-macs" "\
+(autoload 'flet "cl-macs" "\
Make temporary function definitions.
This is an analogue of `let' that operates on the function cell of FUNC
rather than its value cell. The FORMs are evaluated with the specified
@@ -481,41 +481,41 @@ go back to their previous definitions, or lack thereof).
\(fn ((FUNC ARGLIST BODY...) ...) FORM...)" nil (quote macro))
-(autoload (quote labels) "cl-macs" "\
+(autoload 'labels "cl-macs" "\
Make temporary function bindings.
This is like `flet', except the bindings are lexical instead of dynamic.
Unlike `flet', this macro is fully compliant with the Common Lisp standard.
\(fn ((FUNC ARGLIST BODY...) ...) FORM...)" nil (quote macro))
-(autoload (quote macrolet) "cl-macs" "\
+(autoload 'macrolet "cl-macs" "\
Make temporary macro definitions.
This is like `flet', but for macros instead of functions.
\(fn ((NAME ARGLIST BODY...) ...) FORM...)" nil (quote macro))
-(autoload (quote symbol-macrolet) "cl-macs" "\
+(autoload 'symbol-macrolet "cl-macs" "\
Make symbol macro definitions.
Within the body FORMs, references to the variable NAME will be replaced
by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
\(fn ((NAME EXPANSION) ...) FORM...)" nil (quote macro))
-(autoload (quote lexical-let) "cl-macs" "\
+(autoload 'lexical-let "cl-macs" "\
Like `let', but lexically scoped.
The main visible difference is that lambdas inside BODY will create
lexical closures as in Common Lisp.
\(fn VARLIST BODY)" nil (quote macro))
-(autoload (quote lexical-let*) "cl-macs" "\
+(autoload 'lexical-let* "cl-macs" "\
Like `let*', but lexically scoped.
The main visible difference is that lambdas inside BODY will create
lexical closures as in Common Lisp.
\(fn VARLIST BODY)" nil (quote macro))
-(autoload (quote multiple-value-bind) "cl-macs" "\
+(autoload 'multiple-value-bind "cl-macs" "\
Collect multiple return values.
FORM must return a list; the BODY is then executed with the first N elements
of this list bound (`let'-style) to each of the symbols SYM in turn. This
@@ -525,7 +525,7 @@ a synonym for (list A B C).
\(fn (SYM...) FORM BODY)" nil (quote macro))
-(autoload (quote multiple-value-setq) "cl-macs" "\
+(autoload 'multiple-value-setq "cl-macs" "\
Collect multiple return values.
FORM must return a list; the first N elements of this list are stored in
each of the symbols SYM in turn. This is analogous to the Common Lisp
@@ -534,22 +534,22 @@ values. For compatibility, (values A B C) is a synonym for (list A B C).
\(fn (SYM...) FORM)" nil (quote macro))
-(autoload (quote locally) "cl-macs" "\
+(autoload 'locally "cl-macs" "\
Not documented
\(fn &rest BODY)" nil (quote macro))
-(autoload (quote the) "cl-macs" "\
+(autoload 'the "cl-macs" "\
Not documented
\(fn TYPE FORM)" nil (quote macro))
-(autoload (quote declare) "cl-macs" "\
+(autoload 'declare "cl-macs" "\
Not documented
\(fn &rest SPECS)" nil (quote macro))
-(autoload (quote define-setf-method) "cl-macs" "\
+(autoload 'define-setf-method "cl-macs" "\
Define a `setf' method.
This method shows how to handle `setf's to places of the form (NAME ARGS...).
The argument forms ARGS are bound according to ARGLIST, as if NAME were
@@ -560,7 +560,7 @@ form. See `defsetf' for a simpler way to define most setf-methods.
\(fn NAME ARGLIST BODY...)" nil (quote macro))
-(autoload (quote defsetf) "cl-macs" "\
+(autoload 'defsetf "cl-macs" "\
Define a `setf' method.
This macro is an easy-to-use substitute for `define-setf-method' that works
well for simple place forms. In the simple `defsetf' form, `setf's of
@@ -581,14 +581,14 @@ Example:
\(fn NAME [FUNC | ARGLIST (STORE) BODY...])" nil (quote macro))
-(autoload (quote get-setf-method) "cl-macs" "\
+(autoload 'get-setf-method "cl-macs" "\
Return a list of five values describing the setf-method for PLACE.
PLACE may be any Lisp form which can appear as the PLACE argument to
a macro like `setf' or `incf'.
\(fn PLACE &optional ENV)" nil nil)
-(autoload (quote setf) "cl-macs" "\
+(autoload 'setf "cl-macs" "\
Set each PLACE to the value of its VAL.
This is a generalized version of `setq'; the PLACEs may be symbolic
references such as (car x) or (aref x i), as well as plain symbols.
@@ -597,40 +597,40 @@ The return value is the last VAL in the list.
\(fn PLACE VAL PLACE VAL ...)" nil (quote macro))
-(autoload (quote psetf) "cl-macs" "\
+(autoload 'psetf "cl-macs" "\
Set PLACEs to the values VALs in parallel.
This is like `setf', except that all VAL forms are evaluated (in order)
before assigning any PLACEs to the corresponding values.
\(fn PLACE VAL PLACE VAL ...)" nil (quote macro))
-(autoload (quote cl-do-pop) "cl-macs" "\
+(autoload 'cl-do-pop "cl-macs" "\
Not documented
\(fn PLACE)" nil nil)
-(autoload (quote remf) "cl-macs" "\
+(autoload 'remf "cl-macs" "\
Remove TAG from property list PLACE.
PLACE may be a symbol, or any generalized variable allowed by `setf'.
The form returns true if TAG was found and removed, nil otherwise.
\(fn PLACE TAG)" nil (quote macro))
-(autoload (quote shiftf) "cl-macs" "\
+(autoload 'shiftf "cl-macs" "\
Shift left among PLACEs.
Example: (shiftf A B C) sets A to B, B to C, and returns the old A.
Each PLACE may be a symbol, or any generalized variable allowed by `setf'.
\(fn PLACE... VAL)" nil (quote macro))
-(autoload (quote rotatef) "cl-macs" "\
+(autoload 'rotatef "cl-macs" "\
Rotate left among PLACEs.
Example: (rotatef A B C) sets A to B, B to C, and C to A. It returns nil.
Each PLACE may be a symbol, or any generalized variable allowed by `setf'.
\(fn PLACE...)" nil (quote macro))
-(autoload (quote letf) "cl-macs" "\
+(autoload 'letf "cl-macs" "\
Temporarily bind to PLACEs.
This is the analogue of `let', but with generalized variables (in the
sense of `setf') for the PLACEs. Each PLACE is set to the corresponding
@@ -642,7 +642,7 @@ the PLACE is not modified before executing BODY.
\(fn ((PLACE VALUE) ...) BODY...)" nil (quote macro))
-(autoload (quote letf*) "cl-macs" "\
+(autoload 'letf* "cl-macs" "\
Temporarily bind to PLACEs.
This is the analogue of `let*', but with generalized variables (in the
sense of `setf') for the PLACEs. Each PLACE is set to the corresponding
@@ -654,27 +654,27 @@ the PLACE is not modified before executing BODY.
\(fn ((PLACE VALUE) ...) BODY...)" nil (quote macro))
-(autoload (quote callf) "cl-macs" "\
+(autoload 'callf "cl-macs" "\
Set PLACE to (FUNC PLACE ARGS...).
FUNC should be an unquoted function name. PLACE may be a symbol,
or any generalized variable allowed by `setf'.
\(fn FUNC PLACE ARGS...)" nil (quote macro))
-(autoload (quote callf2) "cl-macs" "\
+(autoload 'callf2 "cl-macs" "\
Set PLACE to (FUNC ARG1 PLACE ARGS...).
Like `callf', but PLACE is the second argument of FUNC, not the first.
\(fn FUNC ARG1 PLACE ARGS...)" nil (quote macro))
-(autoload (quote define-modify-macro) "cl-macs" "\
+(autoload 'define-modify-macro "cl-macs" "\
Define a `setf'-like modify macro.
If NAME is called, it combines its PLACE argument with the other arguments
from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)
\(fn NAME ARGLIST FUNC &optional DOC)" nil (quote macro))
-(autoload (quote defstruct) "cl-macs" "\
+(autoload 'defstruct "cl-macs" "\
Define a struct type.
This macro defines a new Lisp data type called NAME, which contains data
stored in SLOTs. This defines a `make-NAME' constructor, a `copy-NAME'
@@ -682,24 +682,24 @@ copier, a `NAME-p' predicate, and setf-able `NAME-SLOT' accessors.
\(fn (NAME OPTIONS...) (SLOT SLOT-OPTS...)...)" nil (quote macro))
-(autoload (quote cl-struct-setf-expander) "cl-macs" "\
+(autoload 'cl-struct-setf-expander "cl-macs" "\
Not documented
\(fn X NAME ACCESSOR PRED-FORM POS)" nil nil)
-(autoload (quote typep) "cl-macs" "\
+(autoload 'typep "cl-macs" "\
Check that OBJECT is of type TYPE.
TYPE is a Common Lisp-style type specifier.
\(fn OBJECT TYPE)" nil nil)
-(autoload (quote check-type) "cl-macs" "\
+(autoload 'check-type "cl-macs" "\
Verify that FORM is of type TYPE; signal an error if not.
STRING is an optional description of the desired type.
\(fn FORM TYPE &optional STRING)" nil (quote macro))
-(autoload (quote assert) "cl-macs" "\
+(autoload 'assert "cl-macs" "\
Verify that FORM returns non-nil; signal an error if not.
Second arg SHOW-ARGS means to include arguments of FORM in message.
Other args STRING and ARGS... are arguments to be passed to `error'.
@@ -708,13 +708,13 @@ omitted, a default message listing FORM itself is used.
\(fn FORM &optional SHOW-ARGS STRING &rest ARGS)" nil (quote macro))
-(autoload (quote ignore-errors) "cl-macs" "\
+(autoload 'ignore-errors "cl-macs" "\
Execute BODY; if an error occurs, return nil.
Otherwise, return result of last form in BODY.
\(fn &rest BODY)" nil (quote macro))
-(autoload (quote define-compiler-macro) "cl-macs" "\
+(autoload 'define-compiler-macro "cl-macs" "\
Define a compiler-only macro.
This is like `defmacro', but macro expansion occurs only if the call to
FUNC is compiled (i.e., not interpreted). Compiler macros should be used
@@ -728,7 +728,7 @@ and then returning foo.
\(fn FUNC ARGS &rest BODY)" nil (quote macro))
-(autoload (quote compiler-macroexpand) "cl-macs" "\
+(autoload 'compiler-macroexpand "cl-macs" "\
Not documented
\(fn FORM)" nil nil)
@@ -745,24 +745,24 @@ Not documented
;;;;;; find nsubstitute-if-not nsubstitute-if nsubstitute substitute-if-not
;;;;;; substitute-if substitute delete-duplicates remove-duplicates
;;;;;; delete-if-not delete-if delete* remove-if-not remove-if remove*
-;;;;;; replace fill reduce) "cl-seq" "cl-seq.el" "8805f76626399794931f5db36ddf855f")
+;;;;;; replace fill reduce) "cl-seq" "cl-seq.el" "77bee7df392948b6ab0699e391e8abc1")
;;; Generated autoloads from cl-seq.el
-(autoload (quote reduce) "cl-seq" "\
+(autoload 'reduce "cl-seq" "\
Reduce two-argument FUNCTION across SEQ.
Keywords supported: :start :end :from-end :initial-value :key
\(fn FUNCTION SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote fill) "cl-seq" "\
+(autoload 'fill "cl-seq" "\
Fill the elements of SEQ with ITEM.
Keywords supported: :start :end
\(fn SEQ ITEM [KEYWORD VALUE]...)" nil nil)
-(autoload (quote replace) "cl-seq" "\
+(autoload 'replace "cl-seq" "\
Replace the elements of SEQ1 with the elements of SEQ2.
SEQ1 is destructively modified, then returned.
@@ -770,7 +770,7 @@ Keywords supported: :start1 :end1 :start2 :end2
\(fn SEQ1 SEQ2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote remove*) "cl-seq" "\
+(autoload 'remove* "cl-seq" "\
Remove all occurrences of ITEM in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
to avoid corrupting the original SEQ.
@@ -779,7 +779,7 @@ Keywords supported: :test :test-not :key :count :start :end :from-end
\(fn ITEM SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote remove-if) "cl-seq" "\
+(autoload 'remove-if "cl-seq" "\
Remove all items satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
to avoid corrupting the original SEQ.
@@ -788,7 +788,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote remove-if-not) "cl-seq" "\
+(autoload 'remove-if-not "cl-seq" "\
Remove all items not satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
to avoid corrupting the original SEQ.
@@ -797,7 +797,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote delete*) "cl-seq" "\
+(autoload 'delete* "cl-seq" "\
Remove all occurrences of ITEM in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -805,7 +805,7 @@ Keywords supported: :test :test-not :key :count :start :end :from-end
\(fn ITEM SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote delete-if) "cl-seq" "\
+(autoload 'delete-if "cl-seq" "\
Remove all items satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -813,7 +813,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote delete-if-not) "cl-seq" "\
+(autoload 'delete-if-not "cl-seq" "\
Remove all items not satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -821,21 +821,21 @@ Keywords supported: :key :count :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote remove-duplicates) "cl-seq" "\
+(autoload 'remove-duplicates "cl-seq" "\
Return a copy of SEQ with all duplicate elements removed.
Keywords supported: :test :test-not :key :start :end :from-end
\(fn SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote delete-duplicates) "cl-seq" "\
+(autoload 'delete-duplicates "cl-seq" "\
Remove all duplicate elements from SEQ (destructively).
Keywords supported: :test :test-not :key :start :end :from-end
\(fn SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote substitute) "cl-seq" "\
+(autoload 'substitute "cl-seq" "\
Substitute NEW for OLD in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
to avoid corrupting the original SEQ.
@@ -844,7 +844,7 @@ Keywords supported: :test :test-not :key :count :start :end :from-end
\(fn NEW OLD SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote substitute-if) "cl-seq" "\
+(autoload 'substitute-if "cl-seq" "\
Substitute NEW for all items satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
to avoid corrupting the original SEQ.
@@ -853,7 +853,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote substitute-if-not) "cl-seq" "\
+(autoload 'substitute-if-not "cl-seq" "\
Substitute NEW for all items not satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
to avoid corrupting the original SEQ.
@@ -862,7 +862,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsubstitute) "cl-seq" "\
+(autoload 'nsubstitute "cl-seq" "\
Substitute NEW for OLD in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -870,7 +870,7 @@ Keywords supported: :test :test-not :key :count :start :end :from-end
\(fn NEW OLD SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsubstitute-if) "cl-seq" "\
+(autoload 'nsubstitute-if "cl-seq" "\
Substitute NEW for all items satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -878,7 +878,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsubstitute-if-not) "cl-seq" "\
+(autoload 'nsubstitute-if-not "cl-seq" "\
Substitute NEW for all items not satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -886,7 +886,7 @@ Keywords supported: :key :count :start :end :from-end
\(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote find) "cl-seq" "\
+(autoload 'find "cl-seq" "\
Find the first occurrence of ITEM in SEQ.
Return the matching ITEM, or nil if not found.
@@ -894,7 +894,7 @@ Keywords supported: :test :test-not :key :start :end :from-end
\(fn ITEM SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote find-if) "cl-seq" "\
+(autoload 'find-if "cl-seq" "\
Find the first item satisfying PREDICATE in SEQ.
Return the matching item, or nil if not found.
@@ -902,7 +902,7 @@ Keywords supported: :key :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote find-if-not) "cl-seq" "\
+(autoload 'find-if-not "cl-seq" "\
Find the first item not satisfying PREDICATE in SEQ.
Return the matching item, or nil if not found.
@@ -910,7 +910,7 @@ Keywords supported: :key :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote position) "cl-seq" "\
+(autoload 'position "cl-seq" "\
Find the first occurrence of ITEM in SEQ.
Return the index of the matching item, or nil if not found.
@@ -918,7 +918,7 @@ Keywords supported: :test :test-not :key :start :end :from-end
\(fn ITEM SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote position-if) "cl-seq" "\
+(autoload 'position-if "cl-seq" "\
Find the first item satisfying PREDICATE in SEQ.
Return the index of the matching item, or nil if not found.
@@ -926,7 +926,7 @@ Keywords supported: :key :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote position-if-not) "cl-seq" "\
+(autoload 'position-if-not "cl-seq" "\
Find the first item not satisfying PREDICATE in SEQ.
Return the index of the matching item, or nil if not found.
@@ -934,28 +934,28 @@ Keywords supported: :key :start :end :from-end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote count) "cl-seq" "\
+(autoload 'count "cl-seq" "\
Count the number of occurrences of ITEM in SEQ.
Keywords supported: :test :test-not :key :start :end
\(fn ITEM SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote count-if) "cl-seq" "\
+(autoload 'count-if "cl-seq" "\
Count the number of items satisfying PREDICATE in SEQ.
Keywords supported: :key :start :end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote count-if-not) "cl-seq" "\
+(autoload 'count-if-not "cl-seq" "\
Count the number of items not satisfying PREDICATE in SEQ.
Keywords supported: :key :start :end
\(fn PREDICATE SEQ [KEYWORD VALUE]...)" nil nil)
-(autoload (quote mismatch) "cl-seq" "\
+(autoload 'mismatch "cl-seq" "\
Compare SEQ1 with SEQ2, return index of first mismatching element.
Return nil if the sequences match. If one sequence is a prefix of the
other, the return value indicates the end of the shorter sequence.
@@ -964,7 +964,7 @@ Keywords supported: :test :test-not :key :start1 :end1 :start2 :end2 :from-end
\(fn SEQ1 SEQ2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote search) "cl-seq" "\
+(autoload 'search "cl-seq" "\
Search for SEQ1 as a subsequence of SEQ2.
Return the index of the leftmost element of the first match found;
return nil if there are no matches.
@@ -973,7 +973,7 @@ Keywords supported: :test :test-not :key :start1 :end1 :start2 :end2 :from-end
\(fn SEQ1 SEQ2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote sort*) "cl-seq" "\
+(autoload 'sort* "cl-seq" "\
Sort the argument SEQ according to PREDICATE.
This is a destructive function; it reuses the storage of SEQ if possible.
@@ -981,7 +981,7 @@ Keywords supported: :key
\(fn SEQ PREDICATE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote stable-sort) "cl-seq" "\
+(autoload 'stable-sort "cl-seq" "\
Sort the argument SEQ stably according to PREDICATE.
This is a destructive function; it reuses the storage of SEQ if possible.
@@ -989,7 +989,7 @@ Keywords supported: :key
\(fn SEQ PREDICATE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote merge) "cl-seq" "\
+(autoload 'merge "cl-seq" "\
Destructively merge the two sequences to produce a new sequence.
TYPE is the sequence type to return, SEQ1 and SEQ2 are the two argument
sequences, and PREDICATE is a `less-than' predicate on the elements.
@@ -998,7 +998,7 @@ Keywords supported: :key
\(fn TYPE SEQ1 SEQ2 PREDICATE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote member*) "cl-seq" "\
+(autoload 'member* "cl-seq" "\
Find the first occurrence of ITEM in LIST.
Return the sublist of LIST whose car is ITEM.
@@ -1006,7 +1006,7 @@ Keywords supported: :test :test-not :key
\(fn ITEM LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote member-if) "cl-seq" "\
+(autoload 'member-if "cl-seq" "\
Find the first item satisfying PREDICATE in LIST.
Return the sublist of LIST whose car matches.
@@ -1014,7 +1014,7 @@ Keywords supported: :key
\(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote member-if-not) "cl-seq" "\
+(autoload 'member-if-not "cl-seq" "\
Find the first item not satisfying PREDICATE in LIST.
Return the sublist of LIST whose car matches.
@@ -1022,54 +1022,54 @@ Keywords supported: :key
\(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote cl-adjoin) "cl-seq" "\
+(autoload 'cl-adjoin "cl-seq" "\
Not documented
\(fn CL-ITEM CL-LIST &rest CL-KEYS)" nil nil)
-(autoload (quote assoc*) "cl-seq" "\
+(autoload 'assoc* "cl-seq" "\
Find the first item whose car matches ITEM in LIST.
Keywords supported: :test :test-not :key
\(fn ITEM LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote assoc-if) "cl-seq" "\
+(autoload 'assoc-if "cl-seq" "\
Find the first item whose car satisfies PREDICATE in LIST.
Keywords supported: :key
\(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote assoc-if-not) "cl-seq" "\
+(autoload 'assoc-if-not "cl-seq" "\
Find the first item whose car does not satisfy PREDICATE in LIST.
Keywords supported: :key
\(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote rassoc*) "cl-seq" "\
+(autoload 'rassoc* "cl-seq" "\
Find the first item whose cdr matches ITEM in LIST.
Keywords supported: :test :test-not :key
\(fn ITEM LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote rassoc-if) "cl-seq" "\
+(autoload 'rassoc-if "cl-seq" "\
Find the first item whose cdr satisfies PREDICATE in LIST.
Keywords supported: :key
\(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote rassoc-if-not) "cl-seq" "\
+(autoload 'rassoc-if-not "cl-seq" "\
Find the first item whose cdr does not satisfy PREDICATE in LIST.
Keywords supported: :key
\(fn PREDICATE LIST [KEYWORD VALUE]...)" nil nil)
-(autoload (quote union) "cl-seq" "\
+(autoload 'union "cl-seq" "\
Combine LIST1 and LIST2 using a set-union operation.
The result list contains all items that appear in either LIST1 or LIST2.
This is a non-destructive function; it makes a copy of the data if necessary
@@ -1079,7 +1079,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nunion) "cl-seq" "\
+(autoload 'nunion "cl-seq" "\
Combine LIST1 and LIST2 using a set-union operation.
The result list contains all items that appear in either LIST1 or LIST2.
This is a destructive function; it reuses the storage of LIST1 and LIST2
@@ -1089,7 +1089,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote intersection) "cl-seq" "\
+(autoload 'intersection "cl-seq" "\
Combine LIST1 and LIST2 using a set-intersection operation.
The result list contains all items that appear in both LIST1 and LIST2.
This is a non-destructive function; it makes a copy of the data if necessary
@@ -1099,7 +1099,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nintersection) "cl-seq" "\
+(autoload 'nintersection "cl-seq" "\
Combine LIST1 and LIST2 using a set-intersection operation.
The result list contains all items that appear in both LIST1 and LIST2.
This is a destructive function; it reuses the storage of LIST1 and LIST2
@@ -1109,7 +1109,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote set-difference) "cl-seq" "\
+(autoload 'set-difference "cl-seq" "\
Combine LIST1 and LIST2 using a set-difference operation.
The result list contains all items that appear in LIST1 but not LIST2.
This is a non-destructive function; it makes a copy of the data if necessary
@@ -1119,7 +1119,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nset-difference) "cl-seq" "\
+(autoload 'nset-difference "cl-seq" "\
Combine LIST1 and LIST2 using a set-difference operation.
The result list contains all items that appear in LIST1 but not LIST2.
This is a destructive function; it reuses the storage of LIST1 and LIST2
@@ -1129,7 +1129,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote set-exclusive-or) "cl-seq" "\
+(autoload 'set-exclusive-or "cl-seq" "\
Combine LIST1 and LIST2 using a set-exclusive-or operation.
The result list contains all items that appear in exactly one of LIST1, LIST2.
This is a non-destructive function; it makes a copy of the data if necessary
@@ -1139,7 +1139,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nset-exclusive-or) "cl-seq" "\
+(autoload 'nset-exclusive-or "cl-seq" "\
Combine LIST1 and LIST2 using a set-exclusive-or operation.
The result list contains all items that appear in exactly one of LIST1, LIST2.
This is a destructive function; it reuses the storage of LIST1 and LIST2
@@ -1149,7 +1149,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote subsetp) "cl-seq" "\
+(autoload 'subsetp "cl-seq" "\
Return true if LIST1 is a subset of LIST2.
I.e., if every element of LIST1 also appears in LIST2.
@@ -1157,7 +1157,7 @@ Keywords supported: :test :test-not :key
\(fn LIST1 LIST2 [KEYWORD VALUE]...)" nil nil)
-(autoload (quote subst-if) "cl-seq" "\
+(autoload 'subst-if "cl-seq" "\
Substitute NEW for elements matching PREDICATE in TREE (non-destructively).
Return a copy of TREE with all matching elements replaced by NEW.
@@ -1165,7 +1165,7 @@ Keywords supported: :key
\(fn NEW PREDICATE TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote subst-if-not) "cl-seq" "\
+(autoload 'subst-if-not "cl-seq" "\
Substitute NEW for elts not matching PREDICATE in TREE (non-destructively).
Return a copy of TREE with all non-matching elements replaced by NEW.
@@ -1173,7 +1173,7 @@ Keywords supported: :key
\(fn NEW PREDICATE TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsubst) "cl-seq" "\
+(autoload 'nsubst "cl-seq" "\
Substitute NEW for OLD everywhere in TREE (destructively).
Any element of TREE which is `eql' to OLD is changed to NEW (via a call
to `setcar').
@@ -1182,7 +1182,7 @@ Keywords supported: :test :test-not :key
\(fn NEW OLD TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsubst-if) "cl-seq" "\
+(autoload 'nsubst-if "cl-seq" "\
Substitute NEW for elements matching PREDICATE in TREE (destructively).
Any element of TREE which matches is changed to NEW (via a call to `setcar').
@@ -1190,7 +1190,7 @@ Keywords supported: :key
\(fn NEW PREDICATE TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsubst-if-not) "cl-seq" "\
+(autoload 'nsubst-if-not "cl-seq" "\
Substitute NEW for elements not matching PREDICATE in TREE (destructively).
Any element of TREE which matches is changed to NEW (via a call to `setcar').
@@ -1198,7 +1198,7 @@ Keywords supported: :key
\(fn NEW PREDICATE TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote sublis) "cl-seq" "\
+(autoload 'sublis "cl-seq" "\
Perform substitutions indicated by ALIST in TREE (non-destructively).
Return a copy of TREE with all matching elements replaced.
@@ -1206,7 +1206,7 @@ Keywords supported: :test :test-not :key
\(fn ALIST TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote nsublis) "cl-seq" "\
+(autoload 'nsublis "cl-seq" "\
Perform substitutions indicated by ALIST in TREE (destructively).
Any matching element of TREE is changed via a call to `setcar'.
@@ -1214,7 +1214,7 @@ Keywords supported: :test :test-not :key
\(fn ALIST TREE [KEYWORD VALUE]...)" nil nil)
-(autoload (quote tree-equal) "cl-seq" "\
+(autoload 'tree-equal "cl-seq" "\
Return t if trees TREE1 and TREE2 have `eql' leaves.
Atoms are compared by `eql'; cons cells are compared recursively.
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index e4a84e44e64..f3f28de5198 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1,4 +1,4 @@
-;;; cl-macs.el --- Common Lisp macros -*-byte-compile-dynamic: t;-*-
+;;; cl-macs.el --- Common Lisp macros
;; Copyright (C) 1993, 2001, 2002, 2003, 2004, 2005, 2006, 2007
;; Free Software Foundation, Inc.
@@ -58,8 +58,8 @@
(defvar cl-optimize-speed)
-;;; This kludge allows macros which use cl-transform-function-property
-;;; to be called at compile-time.
+;; This kludge allows macros which use cl-transform-function-property
+;; to be called at compile-time.
(require
(progn
@@ -75,6 +75,7 @@
(defvar cl-old-bc-file-form nil)
+;;;###autoload
(defun cl-compile-time-init ()
(run-hooks 'cl-hack-bytecomp-hook))
@@ -165,6 +166,7 @@
;;; Symbols.
(defvar *gensym-counter*)
+;;;###autoload
(defun gensym (&optional prefix)
"Generate a new uninterned symbol.
The name is made by appending a number to PREFIX, default \"G\"."
@@ -174,6 +176,7 @@ The name is made by appending a number to PREFIX, default \"G\"."
(setq *gensym-counter* (1+ *gensym-counter*))))))
(make-symbol (format "%s%d" pfix num))))
+;;;###autoload
(defun gentemp (&optional prefix)
"Generate a new interned symbol with a unique name.
The name is made by appending a number to PREFIX, default \"G\"."
@@ -186,6 +189,7 @@ The name is made by appending a number to PREFIX, default \"G\"."
;;; Program structure.
+;;;###autoload
(defmacro defun* (name args &rest body)
"Define NAME as a function.
Like normal `defun', except ARGLIST allows full Common Lisp conventions,
@@ -196,6 +200,7 @@ and BODY is implicitly surrounded by (block NAME ...).
(form (list* 'defun name (cdr res))))
(if (car res) (list 'progn (car res) form) form)))
+;;;###autoload
(defmacro defmacro* (name args &rest body)
"Define NAME as a macro.
Like normal `defmacro', except ARGLIST allows full Common Lisp conventions,
@@ -206,6 +211,7 @@ and BODY is implicitly surrounded by (block NAME ...).
(form (list* 'defmacro name (cdr res))))
(if (car res) (list 'progn (car res) form) form)))
+;;;###autoload
(defmacro function* (func)
"Introduce a function.
Like normal `function', except that if argument is a lambda form,
@@ -426,6 +432,7 @@ its argument list allows full Common Lisp conventions."
(setq res (nconc res (cl-arglist-args arg))))))
(nconc res (and args (list args))))))
+;;;###autoload
(defmacro destructuring-bind (args expr &rest body)
(let* ((bind-lets nil) (bind-forms nil) (bind-inits nil)
(bind-defs nil) (bind-block 'cl-none))
@@ -439,6 +446,7 @@ its argument list allows full Common Lisp conventions."
(defvar cl-not-toplevel nil)
+;;;###autoload
(defmacro eval-when (when &rest body)
"Control when BODY is evaluated.
If `compile' is in WHEN, BODY is evaluated when compiled at top-level.
@@ -470,6 +478,7 @@ If `eval' is in WHEN, BODY is evaluated when interpreted or at non-top-level.
form)))
(t (eval form) form)))
+;;;###autoload
(defmacro load-time-value (form &optional read-only)
"Like `progn', but evaluates the body at load time.
The result of the body appears to the compiler as a quoted constant."
@@ -492,6 +501,7 @@ The result of the body appears to the compiler as a quoted constant."
;;; Conditional control structures.
+;;;###autoload
(defmacro case (expr &rest clauses)
"Eval EXPR and choose among clauses on that value.
Each clause looks like (KEYLIST BODY...). EXPR is evaluated and compared
@@ -526,12 +536,14 @@ Key values are compared by `eql'.
(if (eq temp expr) body
(list 'let (list (list temp expr)) body))))
+;;;###autoload
(defmacro ecase (expr &rest clauses)
"Like `case', but error if no case fits.
`otherwise'-clauses are not allowed.
\n(fn EXPR (KEYLIST BODY...)...)"
(list* 'case expr (append clauses '((ecase-error-flag)))))
+;;;###autoload
(defmacro typecase (expr &rest clauses)
"Evals EXPR, chooses among clauses on that value.
Each clause looks like (TYPE BODY...). EXPR is evaluated and, if it
@@ -558,6 +570,7 @@ final clause, and matches if no other keys match.
(if (eq temp expr) body
(list 'let (list (list temp expr)) body))))
+;;;###autoload
(defmacro etypecase (expr &rest clauses)
"Like `typecase', but error if no case fits.
`otherwise'-clauses are not allowed.
@@ -567,6 +580,7 @@ final clause, and matches if no other keys match.
;;; Blocks and exits.
+;;;###autoload
(defmacro block (name &rest body)
"Define a lexically-scoped block named NAME.
NAME may be any symbol. Code inside the BODY forms can call `return-from'
@@ -602,11 +616,13 @@ called from BODY."
(if cl-found (setcdr cl-found t)))
(byte-compile-normal-call (cons 'throw (cdr cl-form))))
+;;;###autoload
(defmacro return (&optional result)
"Return from the block named nil.
This is equivalent to `(return-from nil RESULT)'."
(list 'return-from nil result))
+;;;###autoload
(defmacro return-from (name &optional result)
"Return from the block named NAME.
This jump out to the innermost enclosing `(block NAME ...)' form,
@@ -626,6 +642,7 @@ This is compatible with Common Lisp, but note that `defun' and
(defvar loop-result) (defvar loop-result-explicit)
(defvar loop-result-var) (defvar loop-steps) (defvar loop-symbol-macs)
+;;;###autoload
(defmacro loop (&rest args)
"The Common Lisp `loop' macro.
Valid clauses are:
@@ -1185,12 +1202,14 @@ Valid clauses are:
;;; Other iteration control structures.
+;;;###autoload
(defmacro do (steps endtest &rest body)
"The Common Lisp `do' loop.
\(fn ((VAR INIT [STEP])...) (END-TEST [RESULT...]) BODY...)"
(cl-expand-do-loop steps endtest body nil))
+;;;###autoload
(defmacro do* (steps endtest &rest body)
"The Common Lisp `do*' loop.
@@ -1218,6 +1237,7 @@ Valid clauses are:
(apply 'append sets)))))))
(or (cdr endtest) '(nil)))))
+;;;###autoload
(defmacro dolist (spec &rest body)
"Loop over a list.
Evaluate BODY with VAR bound to each `car' from LIST, in turn.
@@ -1234,6 +1254,7 @@ Then evaluate RESULT to get return value, default nil.
(cons (list 'setq (car spec) nil) (cdr (cdr spec)))
'(nil))))))
+;;;###autoload
(defmacro dotimes (spec &rest body)
"Loop a certain number of times.
Evaluate BODY with VAR bound to successive integers from 0, inclusive,
@@ -1248,6 +1269,7 @@ nil.
(append body (list (list 'incf (car spec)))))
(or (cdr (cdr spec)) '(nil))))))
+;;;###autoload
(defmacro do-symbols (spec &rest body)
"Loop over all symbols.
Evaluate BODY with VAR bound to each interned symbol, or to each symbol
@@ -1262,12 +1284,14 @@ from OBARRAY.
(and (cadr spec) (list (cadr spec))))
(caddr spec))))
+;;;###autoload
(defmacro do-all-symbols (spec &rest body)
(list* 'do-symbols (list (car spec) nil (cadr spec)) body))
;;; Assignments.
+;;;###autoload
(defmacro psetq (&rest args)
"Set SYMs to the values VALs in parallel.
This is like `setq', except that all VAL forms are evaluated (in order)
@@ -1279,6 +1303,7 @@ before assigning any symbols SYM to the corresponding values.
;;; Binding control structures.
+;;;###autoload
(defmacro progv (symbols values &rest body)
"Bind SYMBOLS to VALUES dynamically in BODY.
The forms SYMBOLS and VALUES are evaluated, and must evaluate to lists.
@@ -1292,6 +1317,7 @@ a `let' form, except that the list of symbols can be computed at run-time."
'(cl-progv-after))))
;;; This should really have some way to shadow 'byte-compile properties, etc.
+;;;###autoload
(defmacro flet (bindings &rest body)
"Make temporary function definitions.
This is an analogue of `let' that operates on the function cell of FUNC
@@ -1319,6 +1345,7 @@ go back to their previous definitions, or lack thereof).
bindings)
body))
+;;;###autoload
(defmacro labels (bindings &rest body)
"Make temporary function bindings.
This is like `flet', except the bindings are lexical instead of dynamic.
@@ -1343,6 +1370,7 @@ Unlike `flet', this macro is fully compliant with the Common Lisp standard.
;; The following ought to have a better definition for use with newer
;; byte compilers.
+;;;###autoload
(defmacro macrolet (bindings &rest body)
"Make temporary macro definitions.
This is like `flet', but for macros instead of functions.
@@ -1359,6 +1387,7 @@ This is like `flet', but for macros instead of functions.
(cons (list* name 'lambda (cdr res))
cl-macro-environment))))))
+;;;###autoload
(defmacro symbol-macrolet (bindings &rest body)
"Make symbol macro definitions.
Within the body FORMs, references to the variable NAME will be replaced
@@ -1375,6 +1404,7 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
cl-macro-environment)))))
(defvar cl-closure-vars nil)
+;;;###autoload
(defmacro lexical-let (bindings &rest body)
"Like `let', but lexically scoped.
The main visible difference is that lambdas inside BODY will create
@@ -1418,6 +1448,7 @@ lexical closures as in Common Lisp.
vars))
ebody))))
+;;;###autoload
(defmacro lexical-let* (bindings &rest body)
"Like `let*', but lexically scoped.
The main visible difference is that lambdas inside BODY will create
@@ -1438,6 +1469,7 @@ lexical closures as in Common Lisp.
;;; Multiple values.
+;;;###autoload
(defmacro multiple-value-bind (vars form &rest body)
"Collect multiple return values.
FORM must return a list; the BODY is then executed with the first N elements
@@ -1455,6 +1487,7 @@ a synonym for (list A B C).
vars))
body)))
+;;;###autoload
(defmacro multiple-value-setq (vars form)
"Collect multiple return values.
FORM must return a list; the first N elements of this list are stored in
@@ -1481,7 +1514,9 @@ values. For compatibility, (values A B C) is a synonym for (list A B C).
;;; Declarations.
+;;;###autoload
(defmacro locally (&rest body) (cons 'progn body))
+;;;###autoload
(defmacro the (type form) form)
(defvar cl-proclaim-history t) ; for future compilers
@@ -1519,15 +1554,11 @@ values. For compatibility, (values A B C) is a synonym for (list A B C).
byte-compile-delete-errors (nth 1 safety)))))
((and (eq (car-safe spec) 'warn) (boundp 'byte-compile-warnings))
- (if (eq byte-compile-warnings t)
- (setq byte-compile-warnings byte-compile-warning-types))
(while (setq spec (cdr spec))
(if (consp (car spec))
(if (eq (cadar spec) 0)
- (setq byte-compile-warnings
- (delq (caar spec) byte-compile-warnings))
- (setq byte-compile-warnings
- (adjoin (caar spec) byte-compile-warnings)))))))
+ (byte-compile-disable-warning (caar spec))
+ (byte-compile-enable-warning (caar spec)))))))
nil)
;;; Process any proclamations made before cl-macs was loaded.
@@ -1536,6 +1567,7 @@ values. For compatibility, (values A B C) is a synonym for (list A B C).
(while p (cl-do-proclaim (pop p) t))
(setq cl-proclaims-deferred nil))
+;;;###autoload
(defmacro declare (&rest specs)
(if (cl-compiling-file)
(while specs
@@ -1547,6 +1579,7 @@ values. For compatibility, (values A B C) is a synonym for (list A B C).
;;; Generalized variables.
+;;;###autoload
(defmacro define-setf-method (func args &rest body)
"Define a `setf' method.
This method shows how to handle `setf's to places of the form (NAME ARGS...).
@@ -1565,8 +1598,9 @@ form. See `defsetf' for a simpler way to define most setf-methods.
func 'setf-method (cons args body)))))
(defalias 'define-setf-expander 'define-setf-method)
+;;;###autoload
(defmacro defsetf (func arg1 &rest args)
- "(defsetf NAME FUNC): define a `setf' method.
+ "Define a `setf' method.
This macro is an easy-to-use substitute for `define-setf-method' that works
well for simple place forms. In the simple `defsetf' form, `setf's of
the form (setf (NAME ARGS...) VAL) are transformed to function or macro
@@ -1840,6 +1874,7 @@ Example:
(list 'substring (nth 4 method) from-temp to-temp))))
;;; Getting and optimizing setf-methods.
+;;;###autoload
(defun get-setf-method (place &optional env)
"Return a list of five values describing the setf-method for PLACE.
PLACE may be any Lisp form which can appear as the PLACE argument to
@@ -1907,6 +1942,7 @@ a macro like `setf' or `incf'."
(not (eq (car-safe (symbol-function (car form))) 'macro))))
;;; The standard modify macros.
+;;;###autoload
(defmacro setf (&rest args)
"Set each PLACE to the value of its VAL.
This is a generalized version of `setq'; the PLACEs may be symbolic
@@ -1925,6 +1961,7 @@ The return value is the last VAL in the list.
(store (cl-setf-do-store (nth 1 method) (nth 1 args))))
(if (car method) (list 'let* (car method) store) store)))))
+;;;###autoload
(defmacro psetf (&rest args)
"Set PLACEs to the values VALs in parallel.
This is like `setf', except that all VAL forms are evaluated (in order)
@@ -1948,6 +1985,7 @@ before assigning any PLACEs to the corresponding values.
(setq expr (list 'setf (cadr args) (list 'prog1 (car args) expr))))
(list 'progn expr nil)))))
+;;;###autoload
(defun cl-do-pop (place)
(if (cl-simple-expr-p place)
(list 'prog1 (list 'car place) (list 'setf place (list 'cdr place)))
@@ -1960,6 +1998,7 @@ before assigning any PLACEs to the corresponding values.
(list 'car temp)
(cl-setf-do-store (nth 1 method) (list 'cdr temp)))))))
+;;;###autoload
(defmacro remf (place tag)
"Remove TAG from property list PLACE.
PLACE may be a symbol, or any generalized variable allowed by `setf'.
@@ -1980,6 +2019,7 @@ The form returns true if TAG was found and removed, nil otherwise."
t)
(list 'cl-do-remf tval ttag)))))
+;;;###autoload
(defmacro shiftf (place &rest args)
"Shift left among PLACEs.
Example: (shiftf A B C) sets A to B, B to C, and returns the old A.
@@ -1995,6 +2035,7 @@ Each PLACE may be a symbol, or any generalized variable allowed by `setf'.
(prog1 ,(nth 2 method)
,(cl-setf-do-store (nth 1 method) `(shiftf ,@args))))))))
+;;;###autoload
(defmacro rotatef (&rest args)
"Rotate left among PLACEs.
Example: (rotatef A B C) sets A to B, B to C, and C to A. It returns nil.
@@ -2020,6 +2061,7 @@ Each PLACE may be a symbol, or any generalized variable allowed by `setf'.
(list 'let* (append (car method) (list (list temp (nth 2 method))))
(cl-setf-do-store (nth 1 method) form) nil)))))
+;;;###autoload
(defmacro letf (bindings &rest body)
"Temporarily bind to PLACEs.
This is the analogue of `let', but with generalized variables (in the
@@ -2076,6 +2118,7 @@ the PLACE is not modified before executing BODY.
rev (cdr rev))))
(list* 'let* lets body))))
+;;;###autoload
(defmacro letf* (bindings &rest body)
"Temporarily bind to PLACEs.
This is the analogue of `let*', but with generalized variables (in the
@@ -2094,6 +2137,7 @@ the PLACE is not modified before executing BODY.
(setq body (list (list* 'letf (list (pop bindings)) body))))
(car body)))
+;;;###autoload
(defmacro callf (func place &rest args)
"Set PLACE to (FUNC PLACE ARGS...).
FUNC should be an unquoted function name. PLACE may be a symbol,
@@ -2108,6 +2152,7 @@ or any generalized variable allowed by `setf'.
(list* 'funcall (list 'function func)
rargs))))))
+;;;###autoload
(defmacro callf2 (func arg1 place &rest args)
"Set PLACE to (FUNC ARG1 PLACE ARGS...).
Like `callf', but PLACE is the second argument of FUNC, not the first.
@@ -2124,6 +2169,7 @@ Like `callf', but PLACE is the second argument of FUNC, not the first.
(list* 'funcall (list 'function func)
rargs)))))))
+;;;###autoload
(defmacro define-modify-macro (name arglist func &optional doc)
"Define a `setf'-like modify macro.
If NAME is called, it combines its PLACE argument with the other arguments
@@ -2138,6 +2184,7 @@ from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)"
;;; Structures.
+;;;###autoload
(defmacro defstruct (struct &rest descs)
"Define a struct type.
This macro defines a new Lisp data type called NAME, which contains data
@@ -2362,6 +2409,7 @@ copier, a `NAME-p' predicate, and setf-able `NAME-SLOT' accessors.
forms)
(cons 'progn (nreverse (cons (list 'quote name) forms)))))
+;;;###autoload
(defun cl-struct-setf-expander (x name accessor pred-form pos)
(let* ((temp (make-symbol "--cl-x--")) (store (make-symbol "--cl-store--")))
(list (list temp) (list x) (list store)
@@ -2430,11 +2478,13 @@ The type name can then be used in `typecase', `check-type', etc."
((eq (car type) 'satisfies) (list (cadr type) val))
(t (error "Bad type spec: %s" type)))))
+;;;###autoload
(defun typep (object type) ; See compiler macro below.
"Check that OBJECT is of type TYPE.
TYPE is a Common Lisp-style type specifier."
(eval (cl-make-type-test 'object type)))
+;;;###autoload
(defmacro check-type (form type &optional string)
"Verify that FORM is of type TYPE; signal an error if not.
STRING is an optional description of the desired type."
@@ -2449,6 +2499,7 @@ STRING is an optional description of the desired type."
(if (eq temp form) (list 'progn body nil)
(list 'let (list (list temp form)) body nil)))))
+;;;###autoload
(defmacro assert (form &optional show-args string &rest args)
"Verify that FORM returns non-nil; signal an error if not.
Second arg SHOW-ARGS means to include arguments of FORM in message.
@@ -2470,6 +2521,7 @@ omitted, a default message listing FORM itself is used."
(list* 'list (list 'quote form) sargs))))
nil))))
+;;;###autoload
(defmacro ignore-errors (&rest body)
"Execute BODY; if an error occurs, return nil.
Otherwise, return result of last form in BODY."
@@ -2478,6 +2530,7 @@ Otherwise, return result of last form in BODY."
;;; Compiler macros.
+;;;###autoload
(defmacro define-compiler-macro (func args &rest body)
"Define a compiler-only macro.
This is like `defmacro', but macro expansion occurs only if the call to
@@ -2501,6 +2554,7 @@ and then returning foo."
(list 'put (list 'quote func) '(quote byte-compile)
'(quote cl-byte-compile-compiler-macro)))))
+;;;###autoload
(defun compiler-macroexpand (form)
(while
(let ((func (car-safe form)) (handler nil))
@@ -2556,9 +2610,9 @@ surrounded by (block NAME ...).
(if lets (list 'let lets body) body))))
-;;; Compile-time optimizations for some functions defined in this package.
-;;; Note that cl.el arranges to force cl-macs to be loaded at compile-time,
-;;; mainly to make sure these macros will be present.
+;; Compile-time optimizations for some functions defined in this package.
+;; Note that cl.el arranges to force cl-macs to be loaded at compile-time,
+;; mainly to make sure these macros will be present.
(put 'eql 'byte-compile nil)
(define-compiler-macro eql (&whole form a b)
@@ -2669,9 +2723,11 @@ surrounded by (block NAME ...).
(run-hooks 'cl-macs-load-hook)
-;;; Local variables:
-;;; byte-compile-warnings: (redefine callargs free-vars unresolved obsolete noruntime)
-;;; End:
+;; Local variables:
+;; byte-compile-dynamic: t
+;; byte-compile-warnings: (not cl-functions)
+;; generated-autoload-file: "cl-loaddefs.el"
+;; End:
;; arch-tag: afd947a6-b553-4df1-bba5-000be6388f46
;;; cl-macs.el ends here
diff --git a/lisp/emacs-lisp/cl-seq.el b/lisp/emacs-lisp/cl-seq.el
index b4185681479..4669d69c872 100644
--- a/lisp/emacs-lisp/cl-seq.el
+++ b/lisp/emacs-lisp/cl-seq.el
@@ -1,4 +1,4 @@
-;;; cl-seq.el --- Common Lisp features, part 3 -*-byte-compile-dynamic: t;-*-
+;;; cl-seq.el --- Common Lisp features, part 3
;; Copyright (C) 1993, 2001, 2002, 2003, 2004, 2005,
;; 2006, 2007 Free Software Foundation, Inc.
@@ -125,6 +125,7 @@
(defvar cl-key)
+;;;###autoload
(defun reduce (cl-func cl-seq &rest cl-keys)
"Reduce two-argument FUNCTION across SEQ.
\nKeywords supported: :start :end :from-end :initial-value :key
@@ -145,6 +146,7 @@
(cl-check-key (pop cl-seq))))))
cl-accum)))
+;;;###autoload
(defun fill (seq item &rest cl-keys)
"Fill the elements of SEQ with ITEM.
\nKeywords supported: :start :end
@@ -164,6 +166,7 @@
(setq cl-start (1+ cl-start)))))
seq))
+;;;###autoload
(defun replace (cl-seq1 cl-seq2 &rest cl-keys)
"Replace the elements of SEQ1 with the elements of SEQ2.
SEQ1 is destructively modified, then returned.
@@ -206,6 +209,7 @@ SEQ1 is destructively modified, then returned.
(setq cl-start2 (1+ cl-start2) cl-start1 (1+ cl-start1))))))
cl-seq1))
+;;;###autoload
(defun remove* (cl-item cl-seq &rest cl-keys)
"Remove all occurrences of ITEM in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
@@ -251,6 +255,7 @@ to avoid corrupting the original SEQ.
cl-seq))
cl-seq)))))
+;;;###autoload
(defun remove-if (cl-pred cl-list &rest cl-keys)
"Remove all items satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
@@ -259,6 +264,7 @@ to avoid corrupting the original SEQ.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'remove* nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun remove-if-not (cl-pred cl-list &rest cl-keys)
"Remove all items not satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
@@ -267,6 +273,7 @@ to avoid corrupting the original SEQ.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'remove* nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun delete* (cl-item cl-seq &rest cl-keys)
"Remove all occurrences of ITEM in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -310,6 +317,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
cl-seq)
(apply 'remove* cl-item cl-seq cl-keys)))))
+;;;###autoload
(defun delete-if (cl-pred cl-list &rest cl-keys)
"Remove all items satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -317,6 +325,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'delete* nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun delete-if-not (cl-pred cl-list &rest cl-keys)
"Remove all items not satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -324,12 +333,14 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'delete* nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun remove-duplicates (cl-seq &rest cl-keys)
"Return a copy of SEQ with all duplicate elements removed.
\nKeywords supported: :test :test-not :key :start :end :from-end
\n(fn SEQ [KEYWORD VALUE]...)"
(cl-delete-duplicates cl-seq cl-keys t))
+;;;###autoload
(defun delete-duplicates (cl-seq &rest cl-keys)
"Remove all duplicate elements from SEQ (destructively).
\nKeywords supported: :test :test-not :key :start :end :from-end
@@ -376,6 +387,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
(let ((cl-res (cl-delete-duplicates (append cl-seq nil) cl-keys nil)))
(if (stringp cl-seq) (concat cl-res) (vconcat cl-res)))))
+;;;###autoload
(defun substitute (cl-new cl-old cl-seq &rest cl-keys)
"Substitute NEW for OLD in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
@@ -397,6 +409,7 @@ to avoid corrupting the original SEQ.
(apply 'nsubstitute cl-new cl-old cl-seq :count cl-count
:start cl-i cl-keys))))))
+;;;###autoload
(defun substitute-if (cl-new cl-pred cl-list &rest cl-keys)
"Substitute NEW for all items satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
@@ -405,6 +418,7 @@ to avoid corrupting the original SEQ.
\n(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'substitute cl-new nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun substitute-if-not (cl-new cl-pred cl-list &rest cl-keys)
"Substitute NEW for all items not satisfying PREDICATE in SEQ.
This is a non-destructive function; it makes a copy of SEQ if necessary
@@ -413,6 +427,7 @@ to avoid corrupting the original SEQ.
\n(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'substitute cl-new nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun nsubstitute (cl-new cl-old cl-seq &rest cl-keys)
"Substitute NEW for OLD in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -446,6 +461,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
(setq cl-start (1+ cl-start))))))
cl-seq))
+;;;###autoload
(defun nsubstitute-if (cl-new cl-pred cl-list &rest cl-keys)
"Substitute NEW for all items satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -453,6 +469,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
\n(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'nsubstitute cl-new nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun nsubstitute-if-not (cl-new cl-pred cl-list &rest cl-keys)
"Substitute NEW for all items not satisfying PREDICATE in SEQ.
This is a destructive function; it reuses the storage of SEQ whenever possible.
@@ -460,6 +477,7 @@ This is a destructive function; it reuses the storage of SEQ whenever possible.
\n(fn NEW PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'nsubstitute cl-new nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun find (cl-item cl-seq &rest cl-keys)
"Find the first occurrence of ITEM in SEQ.
Return the matching ITEM, or nil if not found.
@@ -468,6 +486,7 @@ Return the matching ITEM, or nil if not found.
(let ((cl-pos (apply 'position cl-item cl-seq cl-keys)))
(and cl-pos (elt cl-seq cl-pos))))
+;;;###autoload
(defun find-if (cl-pred cl-list &rest cl-keys)
"Find the first item satisfying PREDICATE in SEQ.
Return the matching item, or nil if not found.
@@ -475,6 +494,7 @@ Return the matching item, or nil if not found.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'find nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun find-if-not (cl-pred cl-list &rest cl-keys)
"Find the first item not satisfying PREDICATE in SEQ.
Return the matching item, or nil if not found.
@@ -482,6 +502,7 @@ Return the matching item, or nil if not found.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'find nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun position (cl-item cl-seq &rest cl-keys)
"Find the first occurrence of ITEM in SEQ.
Return the index of the matching item, or nil if not found.
@@ -512,6 +533,7 @@ Return the index of the matching item, or nil if not found.
(setq cl-start (1+ cl-start)))
(and (< cl-start cl-end) cl-start))))
+;;;###autoload
(defun position-if (cl-pred cl-list &rest cl-keys)
"Find the first item satisfying PREDICATE in SEQ.
Return the index of the matching item, or nil if not found.
@@ -519,6 +541,7 @@ Return the index of the matching item, or nil if not found.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'position nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun position-if-not (cl-pred cl-list &rest cl-keys)
"Find the first item not satisfying PREDICATE in SEQ.
Return the index of the matching item, or nil if not found.
@@ -526,6 +549,7 @@ Return the index of the matching item, or nil if not found.
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'position nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun count (cl-item cl-seq &rest cl-keys)
"Count the number of occurrences of ITEM in SEQ.
\nKeywords supported: :test :test-not :key :start :end
@@ -540,18 +564,21 @@ Return the index of the matching item, or nil if not found.
(setq cl-start (1+ cl-start)))
cl-count)))
+;;;###autoload
(defun count-if (cl-pred cl-list &rest cl-keys)
"Count the number of items satisfying PREDICATE in SEQ.
\nKeywords supported: :key :start :end
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'count nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun count-if-not (cl-pred cl-list &rest cl-keys)
"Count the number of items not satisfying PREDICATE in SEQ.
\nKeywords supported: :key :start :end
\n(fn PREDICATE SEQ [KEYWORD VALUE]...)"
(apply 'count nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun mismatch (cl-seq1 cl-seq2 &rest cl-keys)
"Compare SEQ1 with SEQ2, return index of first mismatching element.
Return nil if the sequences match. If one sequence is a prefix of the
@@ -582,6 +609,7 @@ other, the return value indicates the end of the shorter sequence.
(and (or (< cl-start1 cl-end1) (< cl-start2 cl-end2))
cl-start1)))))
+;;;###autoload
(defun search (cl-seq1 cl-seq2 &rest cl-keys)
"Search for SEQ1 as a subsequence of SEQ2.
Return the index of the leftmost element of the first match found;
@@ -608,6 +636,7 @@ return nil if there are no matches.
(if cl-from-end (setq cl-end2 cl-pos) (setq cl-start2 (1+ cl-pos))))
(and (< cl-start2 cl-end2) cl-pos)))))
+;;;###autoload
(defun sort* (cl-seq cl-pred &rest cl-keys)
"Sort the argument SEQ according to PREDICATE.
This is a destructive function; it reuses the storage of SEQ if possible.
@@ -622,6 +651,7 @@ This is a destructive function; it reuses the storage of SEQ if possible.
(funcall cl-pred (funcall cl-key cl-x)
(funcall cl-key cl-y)))))))))
+;;;###autoload
(defun stable-sort (cl-seq cl-pred &rest cl-keys)
"Sort the argument SEQ stably according to PREDICATE.
This is a destructive function; it reuses the storage of SEQ if possible.
@@ -629,6 +659,7 @@ This is a destructive function; it reuses the storage of SEQ if possible.
\n(fn SEQ PREDICATE [KEYWORD VALUE]...)"
(apply 'sort* cl-seq cl-pred cl-keys))
+;;;###autoload
(defun merge (cl-type cl-seq1 cl-seq2 cl-pred &rest cl-keys)
"Destructively merge the two sequences to produce a new sequence.
TYPE is the sequence type to return, SEQ1 and SEQ2 are the two argument
@@ -647,6 +678,7 @@ sequences, and PREDICATE is a `less-than' predicate on the elements.
(coerce (nconc (nreverse cl-res) cl-seq1 cl-seq2) cl-type))))
;;; See compiler macro in cl-macs.el
+;;;###autoload
(defun member* (cl-item cl-list &rest cl-keys)
"Find the first occurrence of ITEM in LIST.
Return the sublist of LIST whose car is ITEM.
@@ -661,6 +693,7 @@ Return the sublist of LIST whose car is ITEM.
(member cl-item cl-list)
(memq cl-item cl-list))))
+;;;###autoload
(defun member-if (cl-pred cl-list &rest cl-keys)
"Find the first item satisfying PREDICATE in LIST.
Return the sublist of LIST whose car matches.
@@ -668,6 +701,7 @@ Return the sublist of LIST whose car matches.
\n(fn PREDICATE LIST [KEYWORD VALUE]...)"
(apply 'member* nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun member-if-not (cl-pred cl-list &rest cl-keys)
"Find the first item not satisfying PREDICATE in LIST.
Return the sublist of LIST whose car matches.
@@ -675,6 +709,7 @@ Return the sublist of LIST whose car matches.
\n(fn PREDICATE LIST [KEYWORD VALUE]...)"
(apply 'member* nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun cl-adjoin (cl-item cl-list &rest cl-keys)
(if (cl-parsing-keywords (:key) t
(apply 'member* (cl-check-key cl-item) cl-list cl-keys))
@@ -682,6 +717,7 @@ Return the sublist of LIST whose car matches.
(cons cl-item cl-list)))
;;; See compiler macro in cl-macs.el
+;;;###autoload
(defun assoc* (cl-item cl-alist &rest cl-keys)
"Find the first item whose car matches ITEM in LIST.
\nKeywords supported: :test :test-not :key
@@ -697,18 +733,21 @@ Return the sublist of LIST whose car matches.
(assoc cl-item cl-alist)
(assq cl-item cl-alist))))
+;;;###autoload
(defun assoc-if (cl-pred cl-list &rest cl-keys)
"Find the first item whose car satisfies PREDICATE in LIST.
\nKeywords supported: :key
\n(fn PREDICATE LIST [KEYWORD VALUE]...)"
(apply 'assoc* nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun assoc-if-not (cl-pred cl-list &rest cl-keys)
"Find the first item whose car does not satisfy PREDICATE in LIST.
\nKeywords supported: :key
\n(fn PREDICATE LIST [KEYWORD VALUE]...)"
(apply 'assoc* nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun rassoc* (cl-item cl-alist &rest cl-keys)
"Find the first item whose cdr matches ITEM in LIST.
\nKeywords supported: :test :test-not :key
@@ -722,18 +761,21 @@ Return the sublist of LIST whose car matches.
(and cl-alist (car cl-alist)))
(rassq cl-item cl-alist)))
+;;;###autoload
(defun rassoc-if (cl-pred cl-list &rest cl-keys)
"Find the first item whose cdr satisfies PREDICATE in LIST.
\nKeywords supported: :key
\n(fn PREDICATE LIST [KEYWORD VALUE]...)"
(apply 'rassoc* nil cl-list :if cl-pred cl-keys))
+;;;###autoload
(defun rassoc-if-not (cl-pred cl-list &rest cl-keys)
"Find the first item whose cdr does not satisfy PREDICATE in LIST.
\nKeywords supported: :key
\n(fn PREDICATE LIST [KEYWORD VALUE]...)"
(apply 'rassoc* nil cl-list :if-not cl-pred cl-keys))
+;;;###autoload
(defun union (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-union operation.
The result list contains all items that appear in either LIST1 or LIST2.
@@ -754,6 +796,7 @@ to avoid corrupting the original LIST1 and LIST2.
(pop cl-list2))
cl-list1)))
+;;;###autoload
(defun nunion (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-union operation.
The result list contains all items that appear in either LIST1 or LIST2.
@@ -764,6 +807,7 @@ whenever possible.
(cond ((null cl-list1) cl-list2) ((null cl-list2) cl-list1)
(t (apply 'union cl-list1 cl-list2 cl-keys))))
+;;;###autoload
(defun intersection (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-intersection operation.
The result list contains all items that appear in both LIST1 and LIST2.
@@ -786,6 +830,7 @@ to avoid corrupting the original LIST1 and LIST2.
(pop cl-list2))
cl-res)))))
+;;;###autoload
(defun nintersection (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-intersection operation.
The result list contains all items that appear in both LIST1 and LIST2.
@@ -795,6 +840,7 @@ whenever possible.
\n(fn LIST1 LIST2 [KEYWORD VALUE]...)"
(and cl-list1 cl-list2 (apply 'intersection cl-list1 cl-list2 cl-keys)))
+;;;###autoload
(defun set-difference (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-difference operation.
The result list contains all items that appear in LIST1 but not LIST2.
@@ -814,6 +860,7 @@ to avoid corrupting the original LIST1 and LIST2.
(pop cl-list1))
cl-res))))
+;;;###autoload
(defun nset-difference (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-difference operation.
The result list contains all items that appear in LIST1 but not LIST2.
@@ -824,6 +871,7 @@ whenever possible.
(if (or (null cl-list1) (null cl-list2)) cl-list1
(apply 'set-difference cl-list1 cl-list2 cl-keys)))
+;;;###autoload
(defun set-exclusive-or (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-exclusive-or operation.
The result list contains all items that appear in exactly one of LIST1, LIST2.
@@ -836,6 +884,7 @@ to avoid corrupting the original LIST1 and LIST2.
(t (append (apply 'set-difference cl-list1 cl-list2 cl-keys)
(apply 'set-difference cl-list2 cl-list1 cl-keys)))))
+;;;###autoload
(defun nset-exclusive-or (cl-list1 cl-list2 &rest cl-keys)
"Combine LIST1 and LIST2 using a set-exclusive-or operation.
The result list contains all items that appear in exactly one of LIST1, LIST2.
@@ -848,6 +897,7 @@ whenever possible.
(t (nconc (apply 'nset-difference cl-list1 cl-list2 cl-keys)
(apply 'nset-difference cl-list2 cl-list1 cl-keys)))))
+;;;###autoload
(defun subsetp (cl-list1 cl-list2 &rest cl-keys)
"Return true if LIST1 is a subset of LIST2.
I.e., if every element of LIST1 also appears in LIST2.
@@ -862,6 +912,7 @@ I.e., if every element of LIST1 also appears in LIST2.
(pop cl-list1))
(null cl-list1)))))
+;;;###autoload
(defun subst-if (cl-new cl-pred cl-tree &rest cl-keys)
"Substitute NEW for elements matching PREDICATE in TREE (non-destructively).
Return a copy of TREE with all matching elements replaced by NEW.
@@ -869,6 +920,7 @@ Return a copy of TREE with all matching elements replaced by NEW.
\n(fn NEW PREDICATE TREE [KEYWORD VALUE]...)"
(apply 'sublis (list (cons nil cl-new)) cl-tree :if cl-pred cl-keys))
+;;;###autoload
(defun subst-if-not (cl-new cl-pred cl-tree &rest cl-keys)
"Substitute NEW for elts not matching PREDICATE in TREE (non-destructively).
Return a copy of TREE with all non-matching elements replaced by NEW.
@@ -876,6 +928,7 @@ Return a copy of TREE with all non-matching elements replaced by NEW.
\n(fn NEW PREDICATE TREE [KEYWORD VALUE]...)"
(apply 'sublis (list (cons nil cl-new)) cl-tree :if-not cl-pred cl-keys))
+;;;###autoload
(defun nsubst (cl-new cl-old cl-tree &rest cl-keys)
"Substitute NEW for OLD everywhere in TREE (destructively).
Any element of TREE which is `eql' to OLD is changed to NEW (via a call
@@ -884,6 +937,7 @@ to `setcar').
\n(fn NEW OLD TREE [KEYWORD VALUE]...)"
(apply 'nsublis (list (cons cl-old cl-new)) cl-tree cl-keys))
+;;;###autoload
(defun nsubst-if (cl-new cl-pred cl-tree &rest cl-keys)
"Substitute NEW for elements matching PREDICATE in TREE (destructively).
Any element of TREE which matches is changed to NEW (via a call to `setcar').
@@ -891,6 +945,7 @@ Any element of TREE which matches is changed to NEW (via a call to `setcar').
\n(fn NEW PREDICATE TREE [KEYWORD VALUE]...)"
(apply 'nsublis (list (cons nil cl-new)) cl-tree :if cl-pred cl-keys))
+;;;###autoload
(defun nsubst-if-not (cl-new cl-pred cl-tree &rest cl-keys)
"Substitute NEW for elements not matching PREDICATE in TREE (destructively).
Any element of TREE which matches is changed to NEW (via a call to `setcar').
@@ -898,6 +953,7 @@ Any element of TREE which matches is changed to NEW (via a call to `setcar').
\n(fn NEW PREDICATE TREE [KEYWORD VALUE]...)"
(apply 'nsublis (list (cons nil cl-new)) cl-tree :if-not cl-pred cl-keys))
+;;;###autoload
(defun sublis (cl-alist cl-tree &rest cl-keys)
"Perform substitutions indicated by ALIST in TREE (non-destructively).
Return a copy of TREE with all matching elements replaced.
@@ -920,6 +976,7 @@ Return a copy of TREE with all matching elements replaced.
(cons cl-a cl-d)))
cl-tree))))
+;;;###autoload
(defun nsublis (cl-alist cl-tree &rest cl-keys)
"Perform substitutions indicated by ALIST in TREE (destructively).
Any matching element of TREE is changed via a call to `setcar'.
@@ -944,6 +1001,7 @@ Any matching element of TREE is changed via a call to `setcar'.
(progn (setcdr cl-tree (cdr (car cl-p))) (setq cl-tree nil))
(setq cl-tree (cdr cl-tree))))))
+;;;###autoload
(defun tree-equal (cl-x cl-y &rest cl-keys)
"Return t if trees TREE1 and TREE2 have `eql' leaves.
Atoms are compared by `eql'; cons cells are compared recursively.
@@ -961,5 +1019,11 @@ Atoms are compared by `eql'; cons cells are compared recursively.
(run-hooks 'cl-seq-load-hook)
-;;; arch-tag: ec1cc072-9006-4225-b6ba-d6b07ed1710c
+;; Local variables:
+;; byte-compile-dynamic: t
+;; byte-compile-warnings: (not cl-functions)
+;; generated-autoload-file: "cl-loaddefs.el"
+;; End:
+
+;; arch-tag: ec1cc072-9006-4225-b6ba-d6b07ed1710c
;;; cl-seq.el ends here
diff --git a/lisp/emacs-lisp/cl.el b/lisp/emacs-lisp/cl.el
index 89c0721adb5..c8a029a453a 100644
--- a/lisp/emacs-lisp/cl.el
+++ b/lisp/emacs-lisp/cl.el
@@ -1,4 +1,4 @@
-;;; cl.el --- Common Lisp extensions for Emacs -*-byte-compile-dynamic: t;-*-
+;;; cl.el --- Common Lisp extensions for Emacs
;; Copyright (C) 1993, 2001, 2002, 2003, 2004, 2005,
;; 2006, 2007 Free Software Foundation, Inc.
@@ -109,12 +109,15 @@ printer proceeds to the next function on the list.
This variable is not used at present, but it is defined in hopes that
a future Emacs interpreter will be able to use it.")
-(add-hook 'cl-unload-hook 'cl-cannot-unload)
-(defun cl-cannot-unload ()
- (error "Cannot unload the feature `cl'"))
+(defun cl-unload-function ()
+ "Stop unloading of the Common Lisp extensions."
+ (message "Cannot unload the feature `cl'")
+ ;; stop standard unloading!
+ t)
-;;; Generalized variables. These macros are defined here so that they
-;;; can safely be used in .emacs files.
+;;; Generalized variables.
+;; These macros are defined here so that they
+;; can safely be used in .emacs files.
(defmacro incf (place &optional x)
"Increment PLACE by X (1 by default).
@@ -185,8 +188,8 @@ an element already on the list.
;;; Control structures.
-;;; These macros are so simple and so often-used that it's better to have
-;;; them all the time than to load them from cl-macs.el.
+;; These macros are so simple and so often-used that it's better to have
+;; them all the time than to load them from cl-macs.el.
(defun cl-map-extents (&rest cl-args)
(apply 'cl-map-overlays cl-args))
@@ -198,9 +201,10 @@ an element already on the list.
(defalias 'cl-block-throw 'throw)
-;;; Multiple values. True multiple values are not supported, or even
-;;; simulated. Instead, multiple-value-bind and friends simply expect
-;;; the target form to return the values as a list.
+;;; Multiple values.
+;; True multiple values are not supported, or even
+;; simulated. Instead, multiple-value-bind and friends simply expect
+;; the target form to return the values as a list.
(defsubst values (&rest values)
"Return multiple values, Common Lisp style.
@@ -321,7 +325,7 @@ always returns nil."
(defvar *random-state* (vector 'cl-random-state-tag -1 30 (cl-random-time)))
-;;; The following are actually set by cl-float-limits.
+;; The following are actually set by cl-float-limits.
(defconst most-positive-float nil)
(defconst most-negative-float nil)
(defconst least-positive-float nil)
@@ -585,105 +589,55 @@ If ALIST is non-nil, the new pairs are prepended to it."
;;; Miscellaneous.
-(defvar cl-fake-autoloads nil
- "Non-nil means don't make CL functions autoload.")
-
-;;; Autoload the other portions of the package.
+;; Define data for indentation and edebug.
+(dolist (entry
+ '(((defun* defmacro*) 2)
+ ((function*) nil
+ (&or symbolp ([&optional 'macro] 'lambda (&rest sexp) &rest form)))
+ ((eval-when) 1 (sexp &rest form))
+ ((declare) nil (&rest sexp))
+ ((the) 1 (sexp &rest form))
+ ((case ecase typecase etypecase) 1 (form &rest (sexp &rest form)))
+ ((block return-from) 1 (sexp &rest form))
+ ((return) nil (&optional form))
+ ((do do*) 2 ((&rest &or symbolp (symbolp &optional form form))
+ (form &rest form)
+ &rest form))
+ ((do-symbols) 1 ((symbolp form &optional form form) &rest form))
+ ((do-all-symbols) 1 ((symbolp form &optional form) &rest form))
+ ((psetq setf psetf) nil edebug-setq-form)
+ ((progv) 2 (&rest form))
+ ((flet labels macrolet) 1
+ ((&rest (sexp sexp &rest form)) &rest form))
+ ((symbol-macrolet lexical-let lexical-let*) 1
+ ((&rest &or symbolp (symbolp form)) &rest form))
+ ((multiple-value-bind) 2 ((&rest symbolp) &rest form))
+ ((multiple-value-setq) 1 ((&rest symbolp) &rest form))
+ ((incf decf remf pushnew shiftf rotatef) nil (&rest form))
+ ((letf letf*) 1 ((&rest (&rest form)) &rest form))
+ ((callf destructuring-bind) 2 (sexp form &rest form))
+ ((callf2) 3 (sexp form form &rest form))
+ ((loop) nil (&rest &or symbolp form))
+ ((ignore-errors) 0 (&rest form))))
+ (dolist (func (car entry))
+ (put func 'lisp-indent-function (nth 1 entry))
+ (put func 'lisp-indent-hook (nth 1 entry))
+ (or (get func 'edebug-form-spec)
+ (put func 'edebug-form-spec (nth 2 entry)))))
+
+;; Autoload the other portions of the package.
;; We want to replace the basic versions of dolist, dotimes, declare below.
(fmakunbound 'dolist)
(fmakunbound 'dotimes)
(fmakunbound 'declare)
-(mapcar (function
- (lambda (set)
- (let ((file (if cl-fake-autoloads "<none>" (car set))))
- (mapcar (function
- (lambda (func)
- (autoload func (car set) nil nil (nth 1 set))))
- (cddr set)))))
- '(("cl-extra" nil
- coerce equalp cl-map-keymap maplist mapc mapl mapcan mapcon
- cl-map-keymap cl-map-keymap-recursively cl-map-intervals
- cl-map-overlays cl-set-frame-visible-p cl-float-limits
- gcd lcm isqrt floor* ceiling* truncate* round*
- mod* rem* signum random* make-random-state random-state-p
- subseq concatenate cl-mapcar-many map some every notany
- notevery revappend nreconc list-length tailp copy-tree get* getf
- cl-set-getf cl-do-remf remprop cl-make-hash-table cl-hash-lookup
- cl-gethash cl-puthash cl-remhash cl-clrhash cl-maphash cl-hash-table-p
- cl-hash-table-count cl-progv-before cl-prettyexpand
- cl-macroexpand-all)
- ("cl-seq" nil
- reduce fill replace remove* remove-if remove-if-not
- delete* delete-if delete-if-not remove-duplicates
- delete-duplicates substitute substitute-if substitute-if-not
- nsubstitute nsubstitute-if nsubstitute-if-not find find-if
- find-if-not position position-if position-if-not count count-if
- count-if-not mismatch search sort* stable-sort merge member*
- member-if member-if-not cl-adjoin assoc* assoc-if assoc-if-not
- rassoc* rassoc-if rassoc-if-not union nunion intersection
- nintersection set-difference nset-difference set-exclusive-or
- nset-exclusive-or subsetp subst-if subst-if-not nsubst nsubst-if
- nsubst-if-not sublis nsublis tree-equal)
- ("cl-macs" nil
- gensym gentemp typep cl-do-pop get-setf-method
- cl-struct-setf-expander compiler-macroexpand cl-compile-time-init)
- ("cl-macs" t
- defun* defmacro* function* destructuring-bind eval-when
- load-time-value case ecase typecase etypecase
- block return return-from loop do do* dolist dotimes do-symbols
- do-all-symbols psetq progv flet labels macrolet symbol-macrolet
- lexical-let lexical-let* multiple-value-bind multiple-value-setq
- locally the declare define-setf-method defsetf define-modify-macro
- setf psetf remf shiftf rotatef letf letf* callf callf2 defstruct
- check-type assert ignore-errors define-compiler-macro)))
-
-;;; Define data for indentation and edebug.
-(mapcar (function
- (lambda (entry)
- (mapcar (function
- (lambda (func)
- (put func 'lisp-indent-function (nth 1 entry))
- (put func 'lisp-indent-hook (nth 1 entry))
- (or (get func 'edebug-form-spec)
- (put func 'edebug-form-spec (nth 2 entry)))))
- (car entry))))
- '(((defun* defmacro*) 2)
- ((function*) nil
- (&or symbolp ([&optional 'macro] 'lambda (&rest sexp) &rest form)))
- ((eval-when) 1 (sexp &rest form))
- ((declare) nil (&rest sexp))
- ((the) 1 (sexp &rest form))
- ((case ecase typecase etypecase) 1 (form &rest (sexp &rest form)))
- ((block return-from) 1 (sexp &rest form))
- ((return) nil (&optional form))
- ((do do*) 2 ((&rest &or symbolp (symbolp &optional form form))
- (form &rest form)
- &rest form))
- ((do-symbols) 1 ((symbolp form &optional form form) &rest form))
- ((do-all-symbols) 1 ((symbolp form &optional form) &rest form))
- ((psetq setf psetf) nil edebug-setq-form)
- ((progv) 2 (&rest form))
- ((flet labels macrolet) 1
- ((&rest (sexp sexp &rest form)) &rest form))
- ((symbol-macrolet lexical-let lexical-let*) 1
- ((&rest &or symbolp (symbolp form)) &rest form))
- ((multiple-value-bind) 2 ((&rest symbolp) &rest form))
- ((multiple-value-setq) 1 ((&rest symbolp) &rest form))
- ((incf decf remf pushnew shiftf rotatef) nil (&rest form))
- ((letf letf*) 1 ((&rest (&rest form)) &rest form))
- ((callf destructuring-bind) 2 (sexp form &rest form))
- ((callf2) 3 (sexp form form &rest form))
- ((loop) nil (&rest &or symbolp form))
- ((ignore-errors) 0 (&rest form))))
-
-
-;;; This goes here so that cl-macs can find it if it loads right now.
-(provide 'cl-19) ; usage: (require 'cl-19 "cl")
+(load "cl-loaddefs" nil 'quiet)
+;; This goes here so that cl-macs can find it if it loads right now.
+(provide 'cl-19) ; usage: (require 'cl-19 "cl")
-;;; Things to do after byte-compiler is loaded.
-;;; As a side effect, we cause cl-macs to be loaded when compiling, so
-;;; that the compiler-macros defined there will be present.
+;; Things to do after byte-compiler is loaded.
+;; As a side effect, we cause cl-macs to be loaded when compiling, so
+;; that the compiler-macros defined there will be present.
(defvar cl-hacked-flag nil)
(defun cl-hack-byte-compiler ()
@@ -692,19 +646,24 @@ If ALIST is non-nil, the new pairs are prepended to it."
(setq cl-hacked-flag t) ; Do it first, to prevent recursion.
(cl-compile-time-init)))) ; In cl-macs.el.
-;;; Try it now in case the compiler has already been loaded.
+;; Try it now in case the compiler has already been loaded.
(cl-hack-byte-compiler)
-;;; Also make a hook in case compiler is loaded after this file.
+;; Also make a hook in case compiler is loaded after this file.
(add-hook 'bytecomp-load-hook 'cl-hack-byte-compiler)
-;;; The following ensures that packages which expect the old-style cl.el
-;;; will be happy with this one.
+;; The following ensures that packages which expect the old-style cl.el
+;; will be happy with this one.
(provide 'cl)
(run-hooks 'cl-load-hook)
+;; Local variables:
+;; byte-compile-dynamic: t
+;; byte-compile-warnings: (not cl-functions)
+;; End:
+
;; arch-tag: 5f07fa74-f153-4524-9303-21f5be125851
;;; cl.el ends here
diff --git a/lisp/emacs-lisp/copyright.el b/lisp/emacs-lisp/copyright.el
index ed1d01023fb..b53ec9c217b 100644
--- a/lisp/emacs-lisp/copyright.el
+++ b/lisp/emacs-lisp/copyright.el
@@ -46,14 +46,22 @@ A value of nil means to search whole buffer."
;; The character classes have the Latin-1 version and the Latin-9
;; version, which is probably enough.
(defcustom copyright-regexp
- "\\([©Ž©]\\|@copyright{}\\|[Cc]opyright\\s *:?\\s *\\(?:(C)\\)?\
-\\|[Cc]opyright\\s *:?\\s *[©Ž©]\\)\
+ "\\([©©]\\|@copyright{}\\|[Cc]opyright\\s *:?\\s *\\(?:(C)\\)?\
+\\|[Cc]opyright\\s *:?\\s *[©©]\\)\
\\s *\\([1-9]\\([-0-9, ';/*%#\n\t]\\|\\s<\\|\\s>\\)*[0-9]+\\)"
"What your copyright notice looks like.
The second \\( \\) construct must match the years."
:group 'copyright
:type 'regexp)
+(defcustom copyright-names-regexp ""
+ "Regexp matching the names which correspond to the user.
+Only copyright lines where the name matches this regexp will be updated.
+This allows you to avoid adding years to a copyright notice belonging to
+someone else or to a group for which you do not work."
+ :group 'copyright
+ :type 'regexp)
+
(defcustom copyright-years-regexp
"\\(\\s *\\)\\([1-9]\\([-0-9, ';/*%#\n\t]\\|\\s<\\|\\s>\\)*[0-9]+\\)"
"Match additional copyright notice years.
@@ -82,9 +90,22 @@ When this is `function', only ask when called non-interactively."
(defvar copyright-current-year (substring (current-time-string) -4)
"String representing the current year.")
+(defsubst copyright-limit () ; re-search-forward BOUND
+ (and copyright-limit (+ (point) copyright-limit)))
+
(defun copyright-update-year (replace noquery)
- (when (re-search-forward copyright-regexp
- (if copyright-limit (+ (point) copyright-limit)) t)
+ (when
+ (condition-case err
+ (re-search-forward (concat "\\(" copyright-regexp
+ "\\)\\([ \t]*\n\\)?.*\\(?:"
+ copyright-names-regexp "\\)")
+ (copyright-limit)
+ t)
+ ;; In case the regexp is rejected. This is useful because
+ ;; copyright-update is typically called from before-save-hook where
+ ;; such an error is very inconvenient for the user.
+ (error (message "Can't update copyright: %s" err) nil))
+ (goto-char (match-end 1))
;; If the years are continued onto multiple lined
;; that are marked as comments, skip to the end of the years anyway.
(while (save-excursion
@@ -104,7 +125,7 @@ When this is `function', only ask when called non-interactively."
;; Note that `current-time-string' isn't locale-sensitive.
(setq copyright-current-year (substring (current-time-string) -4))
- (unless (string= (buffer-substring (- (match-end 2) 2) (match-end 2))
+ (unless (string= (buffer-substring (- (match-end 3) 2) (match-end 3))
(substring copyright-current-year -2))
(if (or noquery
(y-or-n-p (if replace
@@ -164,11 +185,14 @@ interactively."
"\\(the Free Software Foundation;\
either \\|; a\\^u eldono \\([0-9]+\\)a, ? a\\^u (la\\^u via \\)\
version \\([0-9]+\\), or (at"
- (if copyright-limit (+ (point) copyright-limit)) t)
- (not (string= (match-string 3) copyright-current-gpl-version))
+ (copyright-limit) t)
+ ;; Don't update if the file is already using a more recent
+ ;; version than the "current" one.
+ (< (string-to-number (match-string 3))
+ (string-to-number copyright-current-gpl-version))
(or noquery
- (y-or-n-p (concat "Replace GPL version by "
- copyright-current-gpl-version "? ")))
+ (y-or-n-p (format "Replace GPL version by %s? "
+ copyright-current-gpl-version)))
(progn
(if (match-end 2)
;; Esperanto bilingual comment in two-column.el
@@ -186,8 +210,7 @@ Uses heuristic: year >= 50 means 19xx, < 50 means 20xx."
(interactive)
(widen)
(goto-char (point-min))
- (if (re-search-forward copyright-regexp
- (if copyright-limit (+ (point) copyright-limit)) t)
+ (if (re-search-forward copyright-regexp (copyright-limit) t)
(let ((s (match-beginning 2))
(e (copy-marker (1+ (match-end 2))))
(p (make-marker))
diff --git a/lisp/emacs-lisp/cust-print.el b/lisp/emacs-lisp/cust-print.el
index 54ead36e725..fdfb4f11113 100644
--- a/lisp/emacs-lisp/cust-print.el
+++ b/lisp/emacs-lisp/cust-print.el
@@ -244,14 +244,14 @@ Any pair that has the same PREDICATE is first removed."
;; Save emacs routines.
(if (not (fboundp 'cust-print-original-prin1))
- (mapcar 'cust-print-set-function-cell
- '((cust-print-original-prin1 prin1)
- (cust-print-original-princ princ)
- (cust-print-original-print print)
- (cust-print-original-prin1-to-string prin1-to-string)
- (cust-print-original-format format)
- (cust-print-original-message message)
- (cust-print-original-error error))))
+ (mapc 'cust-print-set-function-cell
+ '((cust-print-original-prin1 prin1)
+ (cust-print-original-princ princ)
+ (cust-print-original-print print)
+ (cust-print-original-prin1-to-string prin1-to-string)
+ (cust-print-original-format format)
+ (cust-print-original-message message)
+ (cust-print-original-error error))))
(defun custom-print-install ()
@@ -259,29 +259,29 @@ Any pair that has the same PREDICATE is first removed."
The Emacs subroutines are saved away, and you can reinstall them
by running `custom-print-uninstall'."
(interactive)
- (mapcar 'cust-print-set-function-cell
- '((prin1 custom-prin1)
- (princ custom-princ)
- (print custom-print)
- (prin1-to-string custom-prin1-to-string)
- (format custom-format)
- (message custom-message)
- (error custom-error)
- ))
+ (mapc 'cust-print-set-function-cell
+ '((prin1 custom-prin1)
+ (princ custom-princ)
+ (print custom-print)
+ (prin1-to-string custom-prin1-to-string)
+ (format custom-format)
+ (message custom-message)
+ (error custom-error)
+ ))
t)
(defun custom-print-uninstall ()
"Reset print functions to their Emacs subroutines."
(interactive)
- (mapcar 'cust-print-set-function-cell
- '((prin1 cust-print-original-prin1)
- (princ cust-print-original-princ)
- (print cust-print-original-print)
- (prin1-to-string cust-print-original-prin1-to-string)
- (format cust-print-original-format)
- (message cust-print-original-message)
- (error cust-print-original-error)
- ))
+ (mapc 'cust-print-set-function-cell
+ '((prin1 cust-print-original-prin1)
+ (princ cust-print-original-princ)
+ (print cust-print-original-print)
+ (prin1-to-string cust-print-original-prin1-to-string)
+ (format cust-print-original-format)
+ (message cust-print-original-message)
+ (error cust-print-original-error)
+ ))
t)
(defalias 'custom-print-funcs-installed-p 'custom-print-installed-p)
diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el
index 68b82d54224..acf73d94b3c 100644
--- a/lisp/emacs-lisp/derived.el
+++ b/lisp/emacs-lisp/derived.el
@@ -254,11 +254,7 @@ No problems result if this variable is not bound.
,@body
)
;; Run the hooks, if any.
- ;; Make the generated code work in older Emacs versions
- ;; that do not yet have run-mode-hooks.
- (if (fboundp 'run-mode-hooks)
- (run-mode-hooks ',hook)
- (run-hooks ',hook))))))
+ (run-mode-hooks ',hook)))))
;; PUBLIC: find the ultimate class of a derived mode.
diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
index 01378a7f8d6..60b29bdb949 100644
--- a/lisp/emacs-lisp/disass.el
+++ b/lisp/emacs-lisp/disass.el
@@ -250,7 +250,7 @@ OBJ should be a call to BYTE-CODE generated by the byte compiler."
(+ indent disassemble-recursive-indent)))
((eq (car-safe (car-safe arg)) 'byte-code)
(insert "(<byte code>...)\n")
- (mapcar ;recurse on list of byte-code objects
+ (mapc ;recurse on list of byte-code objects
'(lambda (obj)
(disassemble-1
obj
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index d9497355fef..d3d9e5fdca0 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -458,7 +458,7 @@ ARGS is a list of additional keyword arguments."
(let ((char (car cs))
(syntax (cdr cs)))
(if (sequencep char)
- (mapcar (lambda (c) (modify-syntax-entry c syntax st)) char)
+ (mapc (lambda (c) (modify-syntax-entry c syntax st)) char)
(modify-syntax-entry char syntax st))))
(if parent (set-char-table-parent
st (if (symbolp parent) (symbol-value parent) parent)))
@@ -478,7 +478,8 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX)."
;;; easy-mmode-define-navigation
;;;
-(defmacro easy-mmode-define-navigation (base re &optional name endfun narrowfun)
+(defmacro easy-mmode-define-navigation (base re &optional name endfun narrowfun
+ &rest body)
"Define BASE-next and BASE-prev to navigate in the buffer.
RE determines the places the commands should move point to.
NAME should describe the entities matched by RE. It is used to build
@@ -488,17 +489,20 @@ BASE-next also tries to make sure that the whole entry is visible by
the next entry) and recentering if necessary.
ENDFUN should return the end position (with or without moving point).
NARROWFUN non-nil means to check for narrowing before moving, and if
-found, do `widen' first and then call NARROWFUN with no args after moving."
+found, do `widen' first and then call NARROWFUN with no args after moving.
+BODY is executed after moving to the destination location."
+ (declare (indent 5) (debug (exp exp exp def-form def-form &rest def-body)))
(let* ((base-name (symbol-name base))
(prev-sym (intern (concat base-name "-prev")))
(next-sym (intern (concat base-name "-next")))
- (check-narrow-maybe
- (when narrowfun
- '(setq was-narrowed
- (prog1 (or (< (- (point-max) (point-min)) (buffer-size)))
- (widen)))))
- (re-narrow-maybe (when narrowfun
- `(when was-narrowed (,narrowfun)))))
+ (when-narrowed
+ (lambda (body)
+ (if (null narrowfun) body
+ `(let ((was-narrowed
+ (prog1 (or (< (- (point-max) (point-min)) (buffer-size)))
+ (widen))))
+ ,body
+ (when was-narrowed (,narrowfun)))))))
(unless name (setq name base-name))
`(progn
(add-to-list 'debug-ignored-errors
@@ -509,33 +513,31 @@ found, do `widen' first and then call NARROWFUN with no args after moving."
(unless count (setq count 1))
(if (< count 0) (,prev-sym (- count))
(if (looking-at ,re) (setq count (1+ count)))
- (let (was-narrowed)
- ,check-narrow-maybe
- (if (not (re-search-forward ,re nil t count))
- (if (looking-at ,re)
- (goto-char (or ,(if endfun `(,endfun)) (point-max)))
- (error "No next %s" ,name))
- (goto-char (match-beginning 0))
- (when (and (eq (current-buffer) (window-buffer (selected-window)))
- (interactive-p))
- (let ((endpt (or (save-excursion
- ,(if endfun `(,endfun)
- `(re-search-forward ,re nil t 2)))
- (point-max))))
- (unless (pos-visible-in-window-p endpt nil t)
- (recenter '(0))))))
- ,re-narrow-maybe)))
+ ,(funcall when-narrowed
+ `(if (not (re-search-forward ,re nil t count))
+ (if (looking-at ,re)
+ (goto-char (or ,(if endfun `(,endfun)) (point-max)))
+ (error "No next %s" ,name))
+ (goto-char (match-beginning 0))
+ (when (and (eq (current-buffer) (window-buffer (selected-window)))
+ (interactive-p))
+ (let ((endpt (or (save-excursion
+ ,(if endfun `(,endfun)
+ `(re-search-forward ,re nil t 2)))
+ (point-max))))
+ (unless (pos-visible-in-window-p endpt nil t)
+ (recenter '(0)))))))
+ ,@body))
(put ',next-sym 'definition-name ',base)
(defun ,prev-sym (&optional count)
,(format "Go to the previous COUNT'th %s" (or name base-name))
(interactive "p")
(unless count (setq count 1))
(if (< count 0) (,next-sym (- count))
- (let (was-narrowed)
- ,check-narrow-maybe
- (unless (re-search-backward ,re nil t count)
- (error "No previous %s" ,name))
- ,re-narrow-maybe)))
+ ,(funcall when-narrowed
+ `(unless (re-search-backward ,re nil t count)
+ (error "No previous %s" ,name)))
+ ,@body))
(put ',prev-sym 'definition-name ',base))))
diff --git a/lisp/emacs-lisp/easymenu.el b/lisp/emacs-lisp/easymenu.el
index 030e1bccbd4..b802d8acd43 100644
--- a/lisp/emacs-lisp/easymenu.el
+++ b/lisp/emacs-lisp/easymenu.el
@@ -152,6 +152,21 @@ A menu item can be a list with the same format as MENU. This is a submenu."
,(if symbol `(defvar ,symbol nil ,doc))
(easy-menu-do-define (quote ,symbol) ,maps ,doc ,menu)))
+(defun easy-menu-binding (menu &optional item-name)
+ "Return a binding suitable to pass to `define-key'.
+This is expected to be bound to a mouse event."
+ ;; Under Emacs this is almost trivial, whereas under XEmacs this may
+ ;; involve defining a function that calls popup-menu.
+ (let ((props (if (symbolp menu)
+ (prog1 (get menu 'menu-prop)
+ (setq menu (symbol-function menu))))))
+ (cons 'menu-item
+ (cons (or item-name
+ (if (keymapp menu)
+ (keymap-prompt menu))
+ "")
+ (cons menu props)))))
+
;;;###autoload
(defun easy-menu-do-define (symbol maps doc menu)
;; We can't do anything that might differ between Emacs dialects in
@@ -173,15 +188,10 @@ A menu item can be a list with the same format as MENU. This is a submenu."
'identity)
(symbol-function ,symbol)))
,symbol)))))
- (mapcar (lambda (map)
- (define-key map (vector 'menu-bar (easy-menu-intern (car menu)))
- (cons 'menu-item
- (cons (car menu)
- (if (not (symbolp keymap))
- (list keymap)
- (cons (symbol-function keymap)
- (get keymap 'menu-prop)))))))
- (if (keymapp maps) (list maps) maps))))
+ (dolist (map (if (keymapp maps) (list maps) maps))
+ (define-key map
+ (vector 'menu-bar (easy-menu-intern (car menu)))
+ (easy-menu-binding keymap (car menu))))))
(defun easy-menu-filter-return (menu &optional name)
"Convert MENU to the right thing to return from a menu filter.
@@ -249,10 +259,6 @@ possibly preceded by keyword pairs as described in `easy-menu-define'."
(defvar easy-menu-button-prefix
'((radio . :radio) (toggle . :toggle)))
-(defun easy-menu-do-add-item (menu item &optional before)
- (setq item (easy-menu-convert-item item))
- (easy-menu-define-key menu (easy-menu-intern (car item)) (cdr item) before))
-
(defvar easy-menu-converted-items-table (make-hash-table :test 'equal))
(defun easy-menu-convert-item (item)
@@ -269,7 +275,7 @@ would always fail because the key is `equal' but not `eq'."
(defun easy-menu-convert-item-1 (item)
"Parse an item description and convert it to a menu keymap element.
ITEM defines an item as in `easy-menu-define'."
- (let (name command label prop remove help)
+ (let (name command label prop remove)
(cond
((stringp item) ; An item or separator.
(setq label item))
@@ -536,7 +542,8 @@ earlier by `easy-menu-define' or `easy-menu-create-menu'."
(setq item (symbol-value item))))
;; Item is a keymap, find the prompt string and use as item name.
(setq item (cons (keymap-prompt item) item)))
- (easy-menu-do-add-item map item before)))
+ (setq item (easy-menu-convert-item item))
+ (easy-menu-define-key map (easy-menu-intern (car item)) (cdr item) before)))
(defun easy-menu-item-present-p (map path name)
"In submenu of MAP with path PATH, return non-nil if item NAME is present.
@@ -615,7 +622,8 @@ In some cases we use that to select between the local and global maps."
(catch 'found
(if (and map (symbolp map) (not (keymapp map)))
(setq map (symbol-value map)))
- (let ((maps (if map (list map) (current-active-maps))))
+ (let ((maps (if map (if (keymapp map) (list map) map)
+ (current-active-maps))))
;; Look for PATH in each map.
(unless map (push 'menu-bar path))
(dolist (name path)
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index 63b2db96fc6..e3ade01a4a0 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -369,7 +369,7 @@ Return the result of the last expression in BODY."
;; Otherwise, find a new window, possibly splitting one.
(setq window
(cond
- ((and (windowp window) (edebug-window-live-p window)
+ ((and (edebug-window-live-p window)
(eq (window-buffer window) buffer))
window)
((eq (window-buffer (selected-window)) buffer)
@@ -2739,7 +2739,7 @@ MSG is printed after `::::} '."
;; Unrestore edebug-buffer's window-start, if displayed.
(let ((window (car edebug-window-data)))
- (if (and window (edebug-window-live-p window)
+ (if (and (edebug-window-live-p window)
(eq (window-buffer) edebug-buffer))
(progn
(set-window-start window (cdr edebug-window-data)
@@ -4389,7 +4389,7 @@ With prefix argument, make it a temporary breakpoint."
(defun byte-compile-resolve-functions (funcs)
"Say it is OK for the named functions to be unresolved."
- (mapcar
+ (mapc
(function
(lambda (func)
(setq byte-compile-unresolved-functions
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index f0ae9ddafbd..7807fc763a4 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -101,6 +101,11 @@ truncated to make more of the arglist or documentation string visible."
enable argument list to fit on one line" truncate-sym-name-if-fit))
:group 'eldoc)
+(defface eldoc-highlight-function-argument
+ '((t (:inherit bold)))
+ "Face used for the argument at point in a function's argument list."
+ :group 'eldoc)
+
;;; No user options below here.
(defvar eldoc-message-commands-table-size 31
@@ -124,8 +129,8 @@ directly. Instead, use `eldoc-add-command' and `eldoc-remove-command'.")
(defconst eldoc-last-data (make-vector 3 nil)
"Bookkeeping; elements are as follows:
0 - contains the last symbol read from the buffer.
- 1 - contains the string last displayed in the echo area for that
- symbol, so it can be printed again if necessary without reconsing.
+ 1 - contains the string last displayed in the echo area for variables,
+ or argument string for functions.
2 - 'function if function args, 'variable if variable documentation.")
(defvar eldoc-last-message nil)
@@ -249,37 +254,93 @@ Emacs Lisp mode) that support Eldoc.")
(let* ((current-symbol (eldoc-current-symbol))
(current-fnsym (eldoc-fnsym-in-current-sexp))
(doc (cond
- ((eq current-symbol current-fnsym)
- (or (eldoc-get-fnsym-args-string current-fnsym)
+ ((null current-fnsym)
+ nil)
+ ((eq current-symbol (car current-fnsym))
+ (or (apply 'eldoc-get-fnsym-args-string
+ current-fnsym)
(eldoc-get-var-docstring current-symbol)))
(t
(or (eldoc-get-var-docstring current-symbol)
- (eldoc-get-fnsym-args-string current-fnsym))))))
+ (apply 'eldoc-get-fnsym-args-string
+ current-fnsym))))))
(eldoc-message doc))))
;; This is run from post-command-hook or some idle timer thing,
;; so we need to be careful that errors aren't ignored.
(error (message "eldoc error: %s" err))))
-;; Return a string containing the function parameter list, or 1-line
-;; docstring if function is a subr and no arglist is obtainable from the
-;; docstring or elsewhere.
-(defun eldoc-get-fnsym-args-string (sym)
- (let ((args nil)
- (doc nil))
+(defun eldoc-get-fnsym-args-string (sym &optional index)
+ "Return a string containing the parameter list of the function SYM.
+If SYM is a subr and no arglist is obtainable from the docstring
+or elsewhere, return a 1-line docstring. Calls the functions
+`eldoc-function-argstring-format' and
+`eldoc-highlight-function-argument' to format the result. The
+former calls `eldoc-argument-case'; the latter gives the
+function name `font-lock-function-name-face', and optionally
+highlights argument number INDEX. "
+ (let (args doc)
(cond ((not (and sym (symbolp sym) (fboundp sym))))
- ((and (eq sym (aref eldoc-last-data 0))
- (eq 'function (aref eldoc-last-data 2)))
- (setq doc (aref eldoc-last-data 1)))
+ ((and (eq sym (aref eldoc-last-data 0))
+ (eq 'function (aref eldoc-last-data 2)))
+ (setq doc (aref eldoc-last-data 1)))
((setq doc (help-split-fundoc (documentation sym t) sym))
(setq args (car doc))
+ ;; Remove any enclosing (), since e-function-argstring adds them.
(string-match "\\`[^ )]* ?" args)
- (setq args (concat "(" (substring args (match-end 0)))))
- (t
- (setq args (eldoc-function-argstring sym))))
- (cond (args
- (setq doc (eldoc-docstring-format-sym-doc sym args))
- (eldoc-last-data-store sym doc 'function)))
- doc))
+ (setq args (substring args (match-end 0)))
+ (if (string-match ")\\'" args)
+ (setq args (substring args 0 -1))))
+ (t
+ (setq args (help-function-arglist sym))))
+ (if args
+ ;; Stringify, and store before highlighting, downcasing, etc.
+ ;; FIXME should truncate before storing.
+ (eldoc-last-data-store sym (setq args (eldoc-function-argstring args))
+ 'function)
+ (setq args doc)) ; use stored value
+ ;; Change case, highlight, truncate.
+ (if args
+ (eldoc-highlight-function-argument
+ sym (eldoc-function-argstring-format args) index))))
+
+(defun eldoc-highlight-function-argument (sym args index)
+ "Highlight argument INDEX in ARGS list for function SYM.
+In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'."
+ (let ((start nil)
+ (end 0)
+ (argument-face 'eldoc-highlight-function-argument))
+ ;; Find the current argument in the argument string. We need to
+ ;; handle `&rest' and informal `...' properly.
+ ;;
+ ;; FIXME: What to do with optional arguments, like in
+ ;; (defun NAME ARGLIST [DOCSTRING] BODY...) case?
+ ;; The problem is there is no robust way to determine if
+ ;; the current argument is indeed a docstring.
+ (while (and index (>= index 1))
+ (if (string-match "[^ ()]+" args end)
+ (progn
+ (setq start (match-beginning 0)
+ end (match-end 0))
+ (let ((argument (match-string 0 args)))
+ (cond ((string= argument "&rest")
+ ;; All the rest arguments are the same.
+ (setq index 1))
+ ((string= argument "&optional"))
+ ((string-match "\\.\\.\\.$" argument)
+ (setq index 0))
+ (t
+ (setq index (1- index))))))
+ (setq end (length args)
+ start (1- end)
+ argument-face 'font-lock-warning-face
+ index 0)))
+ (let ((doc args))
+ (when start
+ (setq doc (copy-sequence args))
+ (add-text-properties start end (list 'face argument-face) doc))
+ (setq doc (eldoc-docstring-format-sym-doc
+ sym doc 'font-lock-function-name-face))
+ doc)))
;; Return a string containing a brief (one-line) documentation string for
;; the variable.
@@ -292,7 +353,8 @@ Emacs Lisp mode) that support Eldoc.")
(let ((doc (documentation-property sym 'variable-documentation t)))
(cond (doc
(setq doc (eldoc-docstring-format-sym-doc
- sym (eldoc-docstring-first-line doc)))
+ sym (eldoc-docstring-first-line doc)
+ 'font-lock-variable-name-face))
(eldoc-last-data-store sym doc 'variable)))
doc)))))
@@ -316,7 +378,7 @@ Emacs Lisp mode) that support Eldoc.")
;; If the entire line cannot fit in the echo area, the symbol name may be
;; truncated or eliminated entirely from the output to make room for the
;; description.
-(defun eldoc-docstring-format-sym-doc (sym doc)
+(defun eldoc-docstring-format-sym-doc (sym doc face)
(save-match-data
(let* ((name (symbol-name sym))
(ea-multi eldoc-echo-area-use-multiline-p)
@@ -328,7 +390,7 @@ Emacs Lisp mode) that support Eldoc.")
(cond ((or (<= strip 0)
(eq ea-multi t)
(and ea-multi (> (length doc) ea-width)))
- (format "%s: %s" sym doc))
+ (format "%s: %s" (propertize name 'face face) doc))
((> (length doc) ea-width)
(substring (format "%s" doc) 0 ea-width))
((>= strip (length name))
@@ -338,27 +400,44 @@ Emacs Lisp mode) that support Eldoc.")
;; than the beginning, since the former is more likely
;; to be unique given package namespace conventions.
(setq name (substring name strip))
- (format "%s: %s" name doc))))))
+ (format "%s: %s" (propertize name 'face face) doc))))))
+;; Return a list of current function name and argument index.
(defun eldoc-fnsym-in-current-sexp ()
- (let ((p (point)))
- (eldoc-beginning-of-sexp)
- (prog1
- ;; Don't do anything if current word is inside a string.
- (if (= (or (char-after (1- (point))) 0) ?\")
- nil
- (eldoc-current-symbol))
- (goto-char p))))
-
+ (save-excursion
+ (let ((argument-index (1- (eldoc-beginning-of-sexp))))
+ ;; If we are at the beginning of function name, this will be -1.
+ (when (< argument-index 0)
+ (setq argument-index 0))
+ ;; Don't do anything if current word is inside a string.
+ (if (= (or (char-after (1- (point))) 0) ?\")
+ nil
+ (list (eldoc-current-symbol) argument-index)))))
+
+;; Move to the beginnig of current sexp. Return the number of nested
+;; sexp the point was over or after.
(defun eldoc-beginning-of-sexp ()
- (let ((parse-sexp-ignore-comments t))
+ (let ((parse-sexp-ignore-comments t)
+ (num-skipped-sexps 0))
(condition-case err
- (while (progn
- (forward-sexp -1)
- (or (= (char-before) ?\")
- (> (point) (point-min)))))
- (error nil))))
+ (progn
+ ;; First account for the case the point is directly over a
+ ;; beginning of a nested sexp.
+ (condition-case err
+ (let ((p (point)))
+ (forward-sexp -1)
+ (forward-sexp 1)
+ (when (< (point) p)
+ (setq num-skipped-sexps 1)))
+ (error))
+ (while
+ (let ((p (point)))
+ (forward-sexp -1)
+ (when (< (point) p)
+ (setq num-skipped-sexps (1+ num-skipped-sexps))))))
+ (error))
+ num-skipped-sexps))
;; returns nil unless current word is an interned symbol.
(defun eldoc-current-symbol ()
@@ -377,28 +456,31 @@ Emacs Lisp mode) that support Eldoc.")
(error (setq defn nil))))
defn))
-(defun eldoc-function-argstring (fn)
- (eldoc-function-argstring-format (help-function-arglist fn)))
-
-(defun eldoc-function-argstring-format (arglist)
- (cond ((not (listp arglist))
- (setq arglist nil))
- ((symbolp (car arglist))
- (setq arglist
- (mapcar (function (lambda (s)
- (if (memq s '(&optional &rest))
- (symbol-name s)
- (funcall eldoc-argument-case
- (symbol-name s)))))
- arglist)))
- ((stringp (car arglist))
- (setq arglist
- (mapcar (function (lambda (s)
- (if (member s '("&optional" "&rest"))
- s
- (funcall eldoc-argument-case s))))
- arglist))))
- (concat "(" (mapconcat 'identity arglist " ") ")"))
+(defun eldoc-function-argstring (arglist)
+ "Return ARGLIST as a string enclosed by ().
+ARGLIST is either a string, or a list of strings or symbols."
+ (cond ((stringp arglist))
+ ((not (listp arglist))
+ (setq arglist nil))
+ ((symbolp (car arglist))
+ (setq arglist
+ (mapconcat (lambda (s) (symbol-name s))
+ arglist " ")))
+ ((stringp (car arglist))
+ (setq arglist
+ (mapconcat (lambda (s) s)
+ arglist " "))))
+ (if arglist
+ (format "(%s)" arglist)))
+
+(defun eldoc-function-argstring-format (argstring)
+ "Apply `eldoc-argument-case' to each word in ARGSTRING.
+The words \"&rest\", \"&optional\" are returned unchanged."
+ (mapconcat (lambda (s)
+ (if (member s '("&optional" "&rest"))
+ s
+ (funcall eldoc-argument-case s)))
+ (split-string argstring "[][ ()]+" t) " "))
;; When point is in a sexp, the function args are not reprinted in the echo
diff --git a/lisp/emacs-lisp/elint.el b/lisp/emacs-lisp/elint.el
index f9bff300293..0501fbf171e 100644
--- a/lisp/emacs-lisp/elint.el
+++ b/lisp/emacs-lisp/elint.el
@@ -218,7 +218,7 @@ This environment can be passed to `macroexpand'."
(buffer-file-name)
(buffer-name))))
(elint-display-log)
- (mapcar 'elint-top-form (elint-update-env))
+ (mapc 'elint-top-form (elint-update-env))
;; Tell the user we're finished. This is terribly klugy: we set
;; elint-top-form-logged so elint-log-message doesn't print the
@@ -542,11 +542,11 @@ CODE can be a lambda expression, a macro, or byte-compiled code."
(defun elint-check-defun-form (form env)
"Lint a defun/defmacro/lambda FORM in ENV."
(setq form (if (eq (car form) 'lambda) (cdr form) (cdr (cdr form))))
- (mapcar (function (lambda (p)
- (or (memq p '(&optional &rest))
- (setq env (elint-env-add-var env p)))
- ))
- (car form))
+ (mapc (function (lambda (p)
+ (or (memq p '(&optional &rest))
+ (setq env (elint-env-add-var env p)))
+ ))
+ (car form))
(elint-forms (cdr form) env))
(defun elint-check-let-form (form env)
@@ -566,21 +566,21 @@ CODE can be a lambda expression, a macro, or byte-compiled code."
;; Add variables to environment, and check the init values
(let ((newenv env))
- (mapcar (function (lambda (s)
- (cond
- ((symbolp s)
- (setq newenv (elint-env-add-var newenv s)))
- ((and (consp s) (<= (length s) 2))
- (elint-form (car (cdr s))
- (if (eq (car form) 'let)
- env
- newenv))
- (setq newenv
- (elint-env-add-var newenv (car s))))
- (t (elint-error
- "Malformed `let' declaration: %s" s))
- )))
- varlist)
+ (mapc (function (lambda (s)
+ (cond
+ ((symbolp s)
+ (setq newenv (elint-env-add-var newenv s)))
+ ((and (consp s) (<= (length s) 2))
+ (elint-form (car (cdr s))
+ (if (eq (car form) 'let)
+ env
+ newenv))
+ (setq newenv
+ (elint-env-add-var newenv (car s))))
+ (t (elint-error
+ "Malformed `let' declaration: %s" s))
+ )))
+ varlist)
;; Lint the body forms
(elint-forms (cdr (cdr form)) newenv)
@@ -665,18 +665,18 @@ CODE can be a lambda expression, a macro, or byte-compiled code."
errlist)
(while errforms
(setq errlist (car (car errforms)))
- (mapcar (function (lambda (s)
- (or (get s 'error-conditions)
- (get s 'error-message)
- (elint-warning
- "Not an error symbol in error handler: %s" s))))
- (cond
- ((symbolp errlist) (list errlist))
- ((listp errlist) errlist)
- (t (elint-error "Bad error list in error handler: %s"
- errlist)
- nil))
- )
+ (mapc (function (lambda (s)
+ (or (get s 'error-conditions)
+ (get s 'error-message)
+ (elint-warning
+ "Not an error symbol in error handler: %s" s))))
+ (cond
+ ((symbolp errlist) (list errlist))
+ ((listp errlist) errlist)
+ (t (elint-error "Bad error list in error handler: %s"
+ errlist)
+ nil))
+ )
(elint-forms (cdr (car errforms)) newenv)
(setq errforms (cdr errforms))
)))
@@ -767,11 +767,11 @@ Insert HEADER followed by a blank line if non-nil."
(defun elint-initialize ()
"Initialize elint."
(interactive)
- (mapcar (function (lambda (x)
- (or (not (symbolp (car x)))
- (eq (cdr x) 'unknown)
- (put (car x) 'elint-args (cdr x)))))
- (elint-find-builtin-args))
+ (mapc (function (lambda (x)
+ (or (not (symbolp (car x)))
+ (eq (cdr x) 'unknown)
+ (put (car x) 'elint-args (cdr x)))))
+ (elint-find-builtin-args))
(mapcar (function (lambda (x)
(put (car x) 'elint-args (cdr x))))
elint-unknown-builtin-args))
diff --git a/lisp/emacs-lisp/elp.el b/lisp/emacs-lisp/elp.el
index eeeb72a3c3d..c4ba3e4ca9c 100644
--- a/lisp/emacs-lisp/elp.el
+++ b/lisp/emacs-lisp/elp.el
@@ -615,7 +615,7 @@ displayed."
;; buffer
(if elp-sort-by-function
(setq resvec (sort resvec elp-sort-by-function)))
- (mapcar 'elp-output-result resvec))
+ (mapc 'elp-output-result resvec))
;; now pop up results buffer
(set-buffer curbuf)
(pop-to-buffer resultsbuf)
@@ -626,9 +626,11 @@ displayed."
(and elp-reset-after-results
(elp-reset-all))))
-(defun elp-unload-hook ()
- (elp-restore-all))
-(add-hook 'elp-unload-hook 'elp-unload-hook)
+(defun elp-unload-function ()
+ "Unload the Emacs Lisp Profiler."
+ (elp-restore-all)
+ ;; continue standard unloading
+ nil)
(provide 'elp)
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index ede196721ae..b3c7c339030 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -46,8 +46,6 @@
;;; Code:
-(require 'loadhist)
-
;;; User variables:
(defgroup find-function nil
diff --git a/lisp/emacs-lisp/generic.el b/lisp/emacs-lisp/generic.el
index d57e7ca7657..805507adb49 100644
--- a/lisp/emacs-lisp/generic.el
+++ b/lisp/emacs-lisp/generic.el
@@ -205,7 +205,7 @@ See the file generic-x.el for some examples of `define-generic-mode'."
(setq font-lock-defaults '(generic-font-lock-keywords))
;; Call a list of functions
- (mapcar 'funcall function-list)
+ (mapc 'funcall function-list)
(run-mode-hooks mode-hook)))
diff --git a/lisp/emacs-lisp/gulp.el b/lisp/emacs-lisp/gulp.el
index 9e0795c8822..a75b52d99bd 100644
--- a/lisp/emacs-lisp/gulp.el
+++ b/lisp/emacs-lisp/gulp.el
@@ -78,6 +78,9 @@ Thanks.")
:type 'string
:group 'gulp)
+(declare-function mail-subject "../mail/sendmail" ())
+(declare-function mail-send "../mail/sendmail" ())
+
(defun gulp-send-requests (dir &optional time)
"Send requests for updates to the authors of Lisp packages in directory DIR.
For each maintainer, the message consists of `gulp-request-header',
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 846e3fce55a..7eeefd349a9 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -56,6 +56,8 @@
(modify-syntax-entry i "_ " table)
(setq i (1+ i)))
(modify-syntax-entry ?\s " " table)
+ ;; Non-break space acts as whitespace.
+ (modify-syntax-entry ?\x8a0 " " table)
(modify-syntax-entry ?\t " " table)
(modify-syntax-entry ?\f " " table)
(modify-syntax-entry ?\n "> " table)
@@ -259,7 +261,6 @@
(defvar lisp-mode-shared-map
(let ((map (make-sparse-keymap)))
- (define-key map "\t" 'lisp-indent-line)
(define-key map "\e\C-q" 'indent-sexp)
(define-key map "\177" 'backward-delete-char-untabify)
;; This gets in the way when viewing a Lisp file in view-mode. As
diff --git a/lisp/emacs-lisp/pp.el b/lisp/emacs-lisp/pp.el
index 21175a03b4d..a5cefff399f 100644
--- a/lisp/emacs-lisp/pp.el
+++ b/lisp/emacs-lisp/pp.el
@@ -103,6 +103,7 @@ Also add the value to the front of the list in the variable `values'."
(interactive
(list (read-from-minibuffer "Eval: " nil read-expression-map t
'read-expression-history)))
+ (message "Evaluating...")
(setq values (cons (eval expression) values))
(let* ((old-show-function temp-buffer-show-function)
;; Use this function to display the buffer.
@@ -126,13 +127,16 @@ Also add the value to the front of the list in the variable `values'."
(progn
(select-window window)
(run-hooks 'temp-buffer-show-hook))
- (select-window old-selected)))
+ (select-window old-selected)
+ (message "Evaluating...done. \
+See buffer *Pp Eval Output*.")))
(message "%s" (buffer-substring (point-min) (point)))
))))))
(with-output-to-temp-buffer "*Pp Eval Output*"
(pp (car values))
(with-current-buffer standard-output
(emacs-lisp-mode)
+ (setq buffer-read-only nil)
(set (make-local-variable 'font-lock-verbose) nil)))))
;;;###autoload
diff --git a/lisp/emacs-lisp/re-builder.el b/lisp/emacs-lisp/re-builder.el
index d859066c452..a0004be2394 100644
--- a/lisp/emacs-lisp/re-builder.el
+++ b/lisp/emacs-lisp/re-builder.el
@@ -515,7 +515,7 @@ optional fourth argument FORCE is non-nil."
"Delete all RE Builder overlays in the `reb-target-buffer' buffer."
(if (buffer-live-p reb-target-buffer)
(with-current-buffer reb-target-buffer
- (mapcar 'delete-overlay reb-overlays)
+ (mapc 'delete-overlay reb-overlays)
(setq reb-overlays nil))))
(defun reb-assert-buffer-in-window ()
diff --git a/lisp/emacs-lisp/regi.el b/lisp/emacs-lisp/regi.el
index ed3f846bf0e..267d7731435 100644
--- a/lisp/emacs-lisp/regi.el
+++ b/lisp/emacs-lisp/regi.el
@@ -166,7 +166,7 @@ useful information:
;; lets find the special tags and remove them from the working
;; frame. note that only the last special tag is used.
- (mapcar
+ (mapc
(function
(lambda (entry)
(let ((pred (car entry))
diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el
index 2c8e0a29faf..d9ce48e23a6 100644
--- a/lisp/emacs-lisp/ring.el
+++ b/lisp/emacs-lisp/ring.el
@@ -51,8 +51,8 @@
(defun ring-p (x)
"Return t if X is a ring; nil otherwise."
(and (consp x) (integerp (car x))
- (consp (cdr x)) (integerp (car (cdr x)))
- (vectorp (cdr (cdr x)))))
+ (consp (cdr x)) (integerp (cadr x))
+ (vectorp (cddr x))))
;;;###autoload
(defun make-ring (size)
@@ -60,11 +60,11 @@
(cons 0 (cons 0 (make-vector size nil))))
(defun ring-insert-at-beginning (ring item)
- "Add to RING the item ITEM. Add it at the front, as the oldest item."
- (let* ((vec (cdr (cdr ring)))
+ "Add to RING the item ITEM, at the front, as the oldest item."
+ (let* ((vec (cddr ring))
(veclen (length vec))
(hd (car ring))
- (ln (car (cdr ring))))
+ (ln (cadr ring)))
(setq ln (min veclen (1+ ln))
hd (ring-minus1 hd veclen))
(aset vec hd item)
@@ -73,16 +73,16 @@
(defun ring-plus1 (index veclen)
"Return INDEX+1, with wraparound."
- (let ((new-index (+ index 1)))
+ (let ((new-index (1+ index)))
(if (= new-index veclen) 0 new-index)))
(defun ring-minus1 (index veclen)
"Return INDEX-1, with wraparound."
- (- (if (= 0 index) veclen index) 1))
+ (- (if (zerop index) veclen index) 1))
(defun ring-length (ring)
"Return the number of elements in the RING."
- (car (cdr ring)))
+ (cadr ring))
(defun ring-index (index head ringlen veclen)
"Convert nominal ring index INDEX to an internal index.
@@ -95,26 +95,26 @@ VECLEN is the size of the vector in the ring."
(defun ring-empty-p (ring)
"Return t if RING is empty; nil otherwise."
- (zerop (car (cdr ring))))
+ (zerop (cadr ring)))
(defun ring-size (ring)
"Return the size of RING, the maximum number of elements it can contain."
- (length (cdr (cdr ring))))
+ (length (cddr ring)))
(defun ring-copy (ring)
"Return a copy of RING."
- (let* ((vec (cdr (cdr ring)))
- (hd (car ring))
- (ln (car (cdr ring))))
+ (let ((vec (cddr ring))
+ (hd (car ring))
+ (ln (cadr ring)))
(cons hd (cons ln (copy-sequence vec)))))
(defun ring-insert (ring item)
"Insert onto ring RING the item ITEM, as the newest (last) item.
If the ring is full, dump the oldest item to make room."
- (let* ((vec (cdr (cdr ring)))
+ (let* ((vec (cddr ring))
(veclen (length vec))
(hd (car ring))
- (ln (car (cdr ring))))
+ (ln (cadr ring)))
(prog1
(aset vec (mod (+ hd ln) veclen) item)
(if (= ln veclen)
@@ -128,13 +128,13 @@ numeric, remove the element indexed."
(if (ring-empty-p ring)
(error "Ring empty")
(let* ((hd (car ring))
- (ln (car (cdr ring)))
- (vec (cdr (cdr ring)))
+ (ln (cadr ring))
+ (vec (cddr ring))
(veclen (length vec))
(tl (mod (1- (+ hd ln)) veclen))
oldelt)
- (if (null index)
- (setq index (1- ln)))
+ (when (null index)
+ (setq index (1- ln)))
(setq index (ring-index index hd ln veclen))
(setq oldelt (aref vec index))
(while (/= index tl)
@@ -152,7 +152,9 @@ INDEX need not be <= the ring length; the appropriate modulo operation
will be performed."
(if (ring-empty-p ring)
(error "Accessing an empty ring")
- (let* ((hd (car ring)) (ln (car (cdr ring))) (vec (cdr (cdr ring))))
+ (let ((hd (car ring))
+ (ln (cadr ring))
+ (vec (cddr ring)))
(aref vec (ring-index index hd ln (length vec))))))
(defun ring-elements (ring)
@@ -164,6 +166,74 @@ will be performed."
(dotimes (var (cadr ring) lst)
(push (aref vect (mod (+ start var) size)) lst))))
+(defun ring-member (ring item)
+ "Return index of ITEM if on RING, else nil.
+Comparison is done via `equal'. The index is 0-based."
+ (catch 'found
+ (dotimes (ind (ring-length ring) nil)
+ (when (equal item (ring-ref ring ind))
+ (throw 'found ind)))))
+
+(defun ring-next (ring item)
+ "Return the next item in the RING, after ITEM.
+Raise error if ITEM is not in the RING."
+ (let ((curr-index (ring-member ring item)))
+ (unless curr-index (error "Item is not in the ring: `%s'" item))
+ (ring-ref ring (ring-plus1 curr-index (ring-length ring)))))
+
+(defun ring-previous (ring item)
+ "Return the previous item in the RING, before ITEM.
+Raise error if ITEM is not in the RING."
+ (let ((curr-index (ring-member ring item)))
+ (unless curr-index (error "Item is not in the ring: `%s'" item))
+ (ring-ref ring (ring-minus1 curr-index (ring-length ring)))))
+
+(defun ring-insert+extend (ring item &optional grow-p)
+ "Like `ring-insert', but if GROW-P is non-nil, then enlarge ring.
+Insert onto ring RING the item ITEM, as the newest (last) item.
+If the ring is full, behavior depends on GROW-P:
+ If GROW-P is non-nil, enlarge the ring to accommodate the new item.
+ If GROW-P is nil, dump the oldest item to make room for the new."
+ (let* ((vec (cddr ring))
+ (veclen (length vec))
+ (hd (car ring))
+ (ringlen (ring-length ring)))
+ (prog1
+ (cond ((and grow-p (= ringlen veclen)) ; Full ring. Enlarge it.
+ (setq veclen (1+ veclen))
+ (setcdr ring (cons (setq ringlen (1+ ringlen))
+ (setq vec (vconcat vec (vector item)))))
+ (setcar ring hd))
+ (t (aset vec (mod (+ hd ringlen) veclen) item)))
+ (if (= ringlen veclen)
+ (setcar ring (ring-plus1 hd veclen))
+ (setcar (cdr ring) (1+ ringlen))))))
+
+(defun ring-remove+insert+extend (ring item &optional grow-p)
+ "`ring-remove' ITEM from RING, then `ring-insert+extend' it.
+This ensures that there is only one ITEM on RING.
+
+If the RING is full, behavior depends on GROW-P:
+ If GROW-P is non-nil, enlarge the ring to accommodate the new ITEM.
+ If GROW-P is nil, dump the oldest item to make room for the new."
+ (let (ind)
+ (while (setq ind (ring-member ring item))
+ (ring-remove ring ind)))
+ (ring-insert+extend ring item grow-p))
+
+(defun ring-convert-sequence-to-ring (seq)
+ "Convert sequence SEQ to a ring. Return the ring.
+If SEQ is already a ring, return it."
+ (if (ring-p seq)
+ seq
+ (let* ((size (length seq))
+ (ring (make-ring size)))
+ (dotimes (count size)
+ (when (or (ring-empty-p ring)
+ (not (equal (ring-ref ring 0) (elt seq count))))
+ (ring-insert-at-beginning ring (elt seq count))))
+ ring)))
+
;;; provide ourself:
(provide 'ring)
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index 45a1e9c8d10..f46aea8540a 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -120,7 +120,7 @@
(| . or) ; SRE
(not-newline . ".")
(nonl . not-newline) ; SRE
- (anything . ".\\|\n")
+ (anything . "\\(?:.\\|\n\\)")
(any . (rx-any 1 nil rx-check-any)) ; inconsistent with SRE
(in . any)
(char . any) ; sregex
@@ -679,7 +679,7 @@ CHAR
`not-newline', `nonl'
matches any character except a newline.
- .
+
`anything'
matches any character
diff --git a/lisp/emacs-lisp/sregex.el b/lisp/emacs-lisp/sregex.el
index 901156cefc3..d4deb0f9101 100644
--- a/lisp/emacs-lisp/sregex.el
+++ b/lisp/emacs-lisp/sregex.el
@@ -565,7 +565,7 @@ has one of the following forms:
(let ((chars (make-bool-vector 256 nil))) ; Yeah, right!
(dolist (arg args)
(cond ((integerp arg) (aset chars arg t))
- ((stringp arg) (mapcar (lambda (c) (aset chars c t)) arg))
+ ((stringp arg) (mapc (lambda (c) (aset chars c t)) arg))
((consp arg)
(let ((start (car arg))
(end (cdr arg)))
diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el
index 27ddeb25718..0a4bdce0412 100644
--- a/lisp/emacs-lisp/tcover-ses.el
+++ b/lisp/emacs-lisp/tcover-ses.el
@@ -26,6 +26,17 @@
(defvar ses-initial-global-parameters)
(defvar ses-mode-map)
+(declare-function ses-set-curcell "../ses")
+(declare-function ses-update-cells "../ses")
+(declare-function ses-load "../ses")
+(declare-function ses-vector-delete "../ses")
+(declare-function ses-create-header-string "../ses")
+(declare-function ses-read-cell "../ses")
+(declare-function ses-read-symbol "../ses")
+(declare-function ses-command-hook "../ses")
+(declare-function ses-jump "../ses")
+
+
;;;Here are some macros that exercise SES. Set `pause' to t if you want the
;;;macros to pause after each step.
(let* ((pause nil)
diff --git a/lisp/emacs-lisp/tcover-unsafep.el b/lisp/emacs-lisp/tcover-unsafep.el
index b999ce63b8c..42c3ebef4e7 100644
--- a/lisp/emacs-lisp/tcover-unsafep.el
+++ b/lisp/emacs-lisp/tcover-unsafep.el
@@ -111,6 +111,7 @@
)
"A-list of (FORM . REASON)... that`unsafep' should decide are unsafe.")
+(declare-function unsafep-function "unsafep" (fun))
;;;#########################################################################
(defun testcover-unsafep ()
diff --git a/lisp/emacs-lisp/timer.el b/lisp/emacs-lisp/timer.el
index 0fed5962fcb..023a4a3e4b7 100644
--- a/lisp/emacs-lisp/timer.el
+++ b/lisp/emacs-lisp/timer.el
@@ -356,6 +356,9 @@ This function is called, by name, directly by the C code."
"Non-nil if EVENT is a timeout event."
(and (listp event) (eq (car event) 'timer-event)))
+
+(declare-function diary-entry-time "../calendar/diary-lib" (s))
+
;;;###autoload
(defun run-at-time (time repeat function &rest args)
"Perform an action at time TIME.
diff --git a/lisp/emerge.el b/lisp/emerge.el
index 447e45f14f3..fd002409a7f 100644
--- a/lisp/emerge.el
+++ b/lisp/emerge.el
@@ -633,7 +633,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
(if output-file
(concat "Output to file: " output-file)
(concat "Output to buffer: " (buffer-name merge-buffer))))
- (insert-buffer emerge-A-buffer)
+ (save-excursion (insert-buffer-substring emerge-A-buffer))
(emerge-set-keys)
(setq emerge-difference-list (emerge-make-diff-list file-A file-B))
(setq emerge-number-of-differences (length emerge-difference-list))
@@ -712,7 +712,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
(emerge-eval-in-buffer
emerge-diff-error-buffer
(erase-buffer)
- (insert-buffer emerge-diff-buffer)
+ (save-excursion (insert-buffer-substring emerge-diff-buffer))
(delete-matching-lines ok-regexp)))
;;; Top-level and setup functions for three-file mode.
@@ -802,7 +802,7 @@ This is *not* a user option, since Emerge uses it for its own processing.")
(if output-file
(concat "Output to file: " output-file)
(concat "Output to buffer: " (buffer-name merge-buffer))))
- (insert-buffer emerge-A-buffer)
+ (save-excursion (insert-buffer-substring emerge-A-buffer))
(emerge-set-keys)
(setq emerge-difference-list
(emerge-make-diff3-list file-A file-B file-ancestor))
@@ -1886,13 +1886,13 @@ buffer after this will cause serious problems."
(emerge-restore-buffer-characteristics)
;; null out the difference markers so they don't slow down future editing
;; operations
- (mapcar (function (lambda (d)
- (set-marker (aref d 0) nil)
- (set-marker (aref d 1) nil)
- (set-marker (aref d 2) nil)
- (set-marker (aref d 3) nil)
- (set-marker (aref d 4) nil)
- (set-marker (aref d 5) nil)))
+ (mapc (function (lambda (d)
+ (set-marker (aref d 0) nil)
+ (set-marker (aref d 1) nil)
+ (set-marker (aref d 2) nil)
+ (set-marker (aref d 3) nil)
+ (set-marker (aref d 4) nil)
+ (set-marker (aref d 5) nil)))
emerge-difference-list)
;; allow them to be garbage collected
(setq emerge-difference-list nil)
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index 62fa2bd7bbb..a6cc217180b 100644
--- a/lisp/emulation/cua-base.el
+++ b/lisp/emulation/cua-base.el
@@ -406,8 +406,8 @@ and after the region marked by the rectangle to search."
"Global key used to toggle the cua rectangle mark."
:set #'(lambda (symbol value)
(set symbol value)
- (when (and (boundp 'cua--keymaps-initalized)
- cua--keymaps-initalized)
+ (when (and (boundp 'cua--keymaps-initialized)
+ cua--keymaps-initialized)
(define-key cua-global-keymap value
'cua-set-rectangle-mark)
(when (boundp 'cua--rectangle-keymap)
@@ -898,9 +898,6 @@ If global mark is active, copy from register or one character."
(t
;; Must save register here, since delete may override reg 0.
(if mark-active
- ;; Before a yank command, make sure we don't yank
- ;; the same region that we are going to delete.
- ;; That would make yank a no-op.
(if cua--rectangle
(progn
(goto-char (min (mark) (point)))
@@ -908,8 +905,14 @@ If global mark is active, copy from register or one character."
(setq paste-lines (cua--delete-rectangle))
(if (= paste-lines 1)
(setq paste-lines nil))) ;; paste all
- (if (string= (filter-buffer-substring (point) (mark))
- (car kill-ring))
+ ;; Before a yank command, make sure we don't yank the
+ ;; head of the kill-ring that really comes from the
+ ;; currently active region we are going to delete.
+ ;; That would make yank a no-op.
+ (if (and (string= (filter-buffer-substring (point) (mark))
+ (car kill-ring))
+ (fboundp 'mouse-region-match)
+ (mouse-region-match))
(current-kill 1))
(cua-delete-region)))
(cond
@@ -1222,22 +1225,26 @@ If ARG is the atom `-', scroll upward by nearly full screen."
;; Handle shifted cursor keys and other movement commands.
;; If region is not active, region is activated if key is shifted.
- ;; If region is active, region is cancelled if key is unshifted (and region not started with C-SPC).
- ;; If rectangle is active, expand rectangle in specified direction and ignore the movement.
+ ;; If region is active, region is cancelled if key is unshifted
+ ;; (and region not started with C-SPC).
+ ;; If rectangle is active, expand rectangle in specified direction and
+ ;; ignore the movement.
((if window-system
+ ;; Shortcut for window-system, assuming that input-decode-map is empty.
(memq 'shift (event-modifiers
(aref (this-single-command-raw-keys) 0)))
(or
+ ;; Check if the final key-sequence was shifted.
(memq 'shift (event-modifiers
(aref (this-single-command-keys) 0)))
- ;; See if raw escape sequence maps to a shifted event, e.g. S-up or C-S-home.
- (and (boundp 'function-key-map)
- function-key-map
- (let ((ev (lookup-key function-key-map
- (this-single-command-raw-keys))))
- (and (vector ev)
- (symbolp (setq ev (aref ev 0)))
- (string-match "S-" (symbol-name ev)))))))
+ ;; If not, maybe the raw key-sequence was mapped by input-decode-map
+ ;; to a shifted key (and then mapped down to its unshifted form).
+ (let* ((keys (this-single-command-raw-keys))
+ (ev (lookup-key input-decode-map keys)))
+ (or (and (vector ev) (memq 'shift (event-modifiers (aref ev 0))))
+ ;; Or maybe, the raw key-sequence was not an escape sequence
+ ;; and was shifted (and then mapped down to its unshifted form).
+ (memq 'shift (event-modifiers (aref keys 0)))))))
(unless mark-active
(push-mark-command nil t))
(setq cua--last-region-shifted t)
@@ -1323,8 +1330,8 @@ If ARG is the atom `-', scroll upward by nearly full screen."
(defvar cua--cua-keys-keymap (make-sparse-keymap))
(defvar cua--prefix-override-keymap (make-sparse-keymap))
(defvar cua--prefix-repeat-keymap (make-sparse-keymap))
-(defvar cua--global-mark-keymap (make-sparse-keymap)) ; Initalized when cua-gmrk.el is loaded
-(defvar cua--rectangle-keymap (make-sparse-keymap)) ; Initalized when cua-rect.el is loaded
+(defvar cua--global-mark-keymap (make-sparse-keymap)) ; Initialized when cua-gmrk.el is loaded
+(defvar cua--rectangle-keymap (make-sparse-keymap)) ; Initialized when cua-rect.el is loaded
(defvar cua--region-keymap (make-sparse-keymap))
(defvar cua--ena-cua-keys-keymap nil)
@@ -1367,7 +1374,7 @@ If ARG is the atom `-', scroll upward by nearly full screen."
(and cua--global-mark-active
(not (window-minibuffer-p)))))
-(defvar cua--keymaps-initalized nil)
+(defvar cua--keymaps-initialized nil)
(defun cua--shift-control-prefix (prefix arg)
;; handle S-C-x and S-C-c by emulating the fast double prefix function.
@@ -1531,9 +1538,9 @@ shifted movement key, set `cua-highlight-region-shift-only'."
(setq mark-even-if-inactive t)
(setq highlight-nonselected-windows nil)
- (unless cua--keymaps-initalized
+ (unless cua--keymaps-initialized
(cua--init-keymaps)
- (setq cua--keymaps-initalized t))
+ (setq cua--keymaps-initialized t))
(if cua-mode
(progn
@@ -1596,6 +1603,7 @@ shifted movement key, set `cua-highlight-region-shift-only'."
(interactive)
(setq cua--debug (not cua--debug)))
+
(provide 'cua)
;;; arch-tag: 21fb6289-ba25-4fee-bfdc-f9fb351acf05
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index 226f696dad2..5c4bc011464 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -731,7 +731,7 @@ If command is repeated at same position, delete the rectangle."
(defun cua--deactivate-rectangle ()
;; This is used to clean up after `cua--activate-rectangle'.
- (mapcar (function delete-overlay) cua--rectangle-overlays)
+ (mapc (function delete-overlay) cua--rectangle-overlays)
(setq cua--last-rectangle (cons (current-buffer)
(cons (point) ;; cua-save-point
cua--rectangle))
@@ -837,7 +837,7 @@ If command is repeated at same position, delete the rectangle."
(overlay-put overlay 'window (selected-window))
(setq new (cons overlay new))))))
;; Trim old trailing overlays.
- (mapcar (function delete-overlay) old)
+ (mapc (function delete-overlay) old)
(setq cua--rectangle-overlays (nreverse new))))
(defun cua--indent-rectangle (&optional ch to-col clear)
@@ -1401,7 +1401,7 @@ With prefix arg, indent to that column."
(cua--deactivate-rectangle))
(when cua--rectangle-overlays
;; clean-up after revert-buffer
- (mapcar (function delete-overlay) cua--rectangle-overlays)
+ (mapc (function delete-overlay) cua--rectangle-overlays)
(setq cua--rectangle-overlays nil)
(setq deactivate-mark t)))
(when cua--rect-undo-set-point
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index 9cf377f5645..d26c88b751f 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -118,17 +118,11 @@
;;; Decide Emacs Variant, GNU Emacs or XEmacs (aka Lucid Emacs).
;;; Determine Window System, and X Server Vendor (if appropriate).
;;;
-(defconst edt-x-emacs-p (string-match "XEmacs" emacs-version)
- "Non-nil if we are running XEmacs version 19, or higher.")
-
-(defconst edt-emacs-variant (if edt-x-emacs-p "xemacs" "gnu")
- "Indicates Emacs variant: GNU Emacs or XEmacs \(aka Lucid Emacs\).")
-
-(defconst edt-window-system (if edt-x-emacs-p (console-type) window-system)
+(defconst edt-window-system (if (featurep 'xemacs) (console-type) window-system)
"Indicates window system \(in GNU Emacs\) or console type \(in XEmacs\).")
(defconst edt-xserver (if (eq edt-window-system 'x)
- (if edt-x-emacs-p
+ (if (featurep 'xemacs)
;; The Cygwin window manager has a `/' in its
;; name, which breaks the generated file name of
;; the custom key map file. Replace `/' with a
@@ -245,7 +239,7 @@
;;; function-key-map.
;;;
(cond
- (edt-x-emacs-p
+ ((featurep 'xemacs)
(setq edt-return-seq (read-key-sequence "Hit carriage-return <CR> to continue "))
(setq edt-return (concat "[" (format "%s" (event-key (aref edt-return-seq 0))) "]")))
(t
@@ -327,40 +321,37 @@
;;;
;;; Key mapping functions
;;;
-(defun edt-lucid-map-key (ident descrip)
- (interactive)
- (setq edt-key-seq (read-key-sequence (format "Press %s%s: " ident descrip)))
- (setq edt-key (concat "[" (format "%s" (event-key (aref edt-key-seq 0))) "]"))
- (cond ((not (equal edt-key edt-return))
- (set-buffer "Keys")
- (insert (format " (\"%s\" . %s)\n" ident edt-key))
- (set-buffer "Directions"))
- ;; bogosity to get next prompt to come up, if the user hits <CR>!
- ;; check periodically to see if this is still needed...
- (t
- (set-buffer "Keys")
- (insert (format " (\"%s\" . \"\" )\n" ident))
- (set-buffer "Directions")))
- edt-key)
-
-(defun edt-gnu-map-key (ident descrip)
+(defun edt-map-key (ident descrip)
(interactive)
- (setq edt-key (read-key-sequence (format "Press %s%s: " ident descrip)))
- (cond ((not (equal edt-key edt-return))
- (set-buffer "Keys")
- (insert (if (vectorp edt-key)
- (format " (\"%s\" . %s)\n" ident edt-key)
- (format " (\"%s\" . \"%s\")\n" ident edt-key)))
- (set-buffer "Directions"))
- ;; bogosity to get next prompt to come up, if the user hits <CR>!
- ;; check periodically to see if this is still needed...
- (t
- (set-buffer "Keys")
- (insert (format " (\"%s\" . \"\" )\n" ident))
- (set-buffer "Directions")))
+ (if (featurep 'xemacs)
+ (progn
+ (setq edt-key-seq (read-key-sequence (format "Press %s%s: " ident descrip)))
+ (setq edt-key (concat "[" (format "%s" (event-key (aref edt-key-seq 0))) "]"))
+ (cond ((not (equal edt-key edt-return))
+ (set-buffer "Keys")
+ (insert (format " (\"%s\" . %s)\n" ident edt-key))
+ (set-buffer "Directions"))
+ ;; bogosity to get next prompt to come up, if the user hits <CR>!
+ ;; check periodically to see if this is still needed...
+ (t
+ (set-buffer "Keys")
+ (insert (format " (\"%s\" . \"\" )\n" ident))
+ (set-buffer "Directions"))))
+ (setq edt-key (read-key-sequence (format "Press %s%s: " ident descrip)))
+ (cond ((not (equal edt-key edt-return))
+ (set-buffer "Keys")
+ (insert (if (vectorp edt-key)
+ (format " (\"%s\" . %s)\n" ident edt-key)
+ (format " (\"%s\" . \"%s\")\n" ident edt-key)))
+ (set-buffer "Directions"))
+ ;; bogosity to get next prompt to come up, if the user hits <CR>!
+ ;; check periodically to see if this is still needed...
+ (t
+ (set-buffer "Keys")
+ (insert (format " (\"%s\" . \"\" )\n" ident))
+ (set-buffer "Directions"))))
edt-key)
-(fset 'edt-map-key (if edt-x-emacs-p 'edt-lucid-map-key 'edt-gnu-map-key))
(set-buffer "Keys")
(insert "
;;
@@ -494,7 +485,7 @@
;;;
;;; Restore function-key-map.
;;;
-(if (and edt-window-system (not edt-x-emacs-p))
+(if (and edt-window-system (not (featurep 'xemacs)))
(setq function-key-map edt-save-function-key-map))
(setq EDT-key-name "")
(while (not
@@ -517,7 +508,7 @@
;;; Save the key mapping file
;;;
(let ((file (concat
- "~/.edt-" edt-emacs-variant
+ "~/.edt-" (if (featurep 'xemacs) "xemacs" "gnu")
(if edt-term (concat "-" edt-term))
(if edt-xserver (concat "-" edt-xserver))
(if edt-window-system (concat "-" (upcase (symbol-name edt-window-system))))
diff --git a/lisp/emulation/edt-vt100.el b/lisp/emulation/edt-vt100.el
index 4e094a5f703..fbe56c2c341 100644
--- a/lisp/emulation/edt-vt100.el
+++ b/lisp/emulation/edt-vt100.el
@@ -39,6 +39,8 @@
;; The following functions are called by the EDT screen width commands defined
;; in edt.el.
+(declare-function vt100-wide-mode "../term/vt100" (&optional arg))
+
(defun edt-set-term-width-80 ()
"Set terminal width to 80 columns."
(vt100-wide-mode -1))
diff --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el
index 44067dba1f2..d61ef9725f3 100644
--- a/lisp/emulation/edt.el
+++ b/lisp/emulation/edt.el
@@ -166,28 +166,23 @@
;;;; VARIABLES and CONSTANTS
;;;;
-;; For backward compatibility to Emacs 19.
-(or (fboundp 'defgroup)
- (defmacro defgroup (&rest rest)))
-
(defgroup edt nil
"Emacs emulating EDT."
:prefix "edt-"
:group 'emulations)
;; To silence the byte-compiler
-(eval-when-compile
- (defvar *EDT-keys*)
- (defvar edt-default-global-map)
- (defvar edt-last-copied-word)
- (defvar edt-learn-macro-count)
- (defvar edt-orig-page-delimiter)
- (defvar edt-orig-transient-mark-mode)
- (defvar edt-rect-start-point)
- (defvar edt-user-global-map)
- (defvar rect-start-point)
- (defvar time-string)
- (defvar zmacs-region-stays))
+(defvar *EDT-keys*)
+(defvar edt-default-global-map)
+(defvar edt-last-copied-word)
+(defvar edt-learn-macro-count)
+(defvar edt-orig-page-delimiter)
+(defvar edt-orig-transient-mark-mode)
+(defvar edt-rect-start-point)
+(defvar edt-user-global-map)
+(defvar rect-start-point)
+(defvar time-string)
+(defvar zmacs-region-stays)
;;;
;;; Version Information
@@ -198,11 +193,6 @@
;;; User Configurable Variables
;;;
-;; For backward compatibility to Emacs 19.
-(or (fboundp 'defcustom)
- (defmacro defcustom (var value doc &rest ignore)
- `(defvar ,var ,value ,doc)))
-
(defcustom edt-keep-current-page-delimiter nil
"*Emacs MUST be restarted for a change in value to take effect!
Non-nil leaves Emacs value of `page-delimiter' unchanged within EDT
@@ -321,24 +311,14 @@ This means that an edt-user.el file was found in the user's `load-path'.")
;;;
;;; o edt-emulation-on o edt-load-keys
;;;
-(defconst edt-emacs19-p (not (string-lessp emacs-version "19"))
- "Non-nil if we are running GNU Emacs or XEmacs version 19, or higher.")
-
-(defconst edt-x-emacs19-p
- (and edt-emacs19-p (string-match "XEmacs" emacs-version))
- "Non-nil if we are running XEmacs version 19, or higher.")
-
-(defconst edt-gnu-emacs19-p (and edt-emacs19-p (not edt-x-emacs19-p))
- "Non-nil if we are running GNU Emacs version 19, or higher.")
-
-(defconst edt-emacs-variant (if edt-gnu-emacs19-p "gnu" "xemacs")
+(defconst edt-emacs-variant (if (featurep 'emacs) "gnu" "xemacs")
"Indicates Emacs variant: GNU Emacs or XEmacs \(aka Lucid Emacs\).")
-(defconst edt-window-system (if edt-gnu-emacs19-p window-system (console-type))
+(defconst edt-window-system (if (featurep 'emacs) window-system (console-type))
"Indicates window system \(in GNU Emacs\) or console type \(in XEmacs\).")
(defconst edt-xserver (if (eq edt-window-system 'x)
- (if edt-x-emacs19-p
+ (if (featurep 'xemacs)
;; The Cygwin window manager has a `/' in its
;; name, which breaks the generated file name of
;; the custom key map file. Replace `/' with a
@@ -409,7 +389,7 @@ Argument NUM is the number of page delimiters to move."
(progn
(backward-page num)
(edt-line-to-top-of-window)
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))))
(defun edt-page (num)
"Move in current direction to next page delimiter.
@@ -470,7 +450,7 @@ Argument NUM is the number of BOL marks to move."
(setq num (1- num))
(forward-line (* -1 num))))
(edt-top-check beg num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
@@ -486,7 +466,7 @@ Argument NUM is the number of EOL marks to move."
(forward-char)
(end-of-line num)
(edt-bottom-check beg num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-end-of-line-backward (num)
@@ -497,7 +477,7 @@ Argument NUM is the number of EOL marks to move."
(let ((beg (edt-current-line)))
(end-of-line (1- num))
(edt-top-check beg num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-end-of-line (num)
@@ -542,7 +522,7 @@ Argument NUM is the number of EOL marks to move."
(eq ?\ (char-syntax (following-char)))
(not (memq (following-char) edt-word-entities)))
(forward-char))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-one-word-backward ()
"Move backward to first character of previous word."
@@ -566,7 +546,7 @@ Argument NUM is the number of EOL marks to move."
(not (eq ?\ (char-syntax (preceding-char))))
(not (memq (preceding-char) edt-word-entities)))
(backward-char)))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-word-forward (num)
"Move forward to first character of next word.
@@ -606,7 +586,7 @@ Argument NUM is the number of characters to move."
(if (equal edt-direction-string edt-forward-string)
(forward-char num)
(backward-char num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; LINE
@@ -629,7 +609,7 @@ Argument NUM is the number of BOL marks to move."
(let ((beg (edt-current-line)))
(forward-line num)
(edt-bottom-check beg num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-line (num)
"Move in current direction to next beginning of line mark.
@@ -649,9 +629,9 @@ Argument NUM is the number of lines to move."
(interactive "p")
(edt-check-prefix num)
(let ((beg (edt-current-line)))
- (next-line num)
+ (forward-line num)
(edt-bottom-check beg num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-previous-line (num)
"Move cursor up one line.
@@ -659,9 +639,9 @@ Argument NUM is the number of lines to move."
(interactive "p")
(edt-check-prefix num)
(let ((beg (edt-current-line)))
- (previous-line num)
+ (forward-line (- num))
(edt-top-check beg num))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
@@ -672,7 +652,7 @@ Argument NUM is the number of lines to move."
"Move cursor to the beginning of buffer."
(interactive)
(goto-char (point-min))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; BOTTOM
@@ -718,7 +698,7 @@ Optional argument FIND is t is this function is called from `edt-find'."
(recenter (- left bottom-up-margin))))
(t
(and (> (point) bottom) (recenter bottom-margin)))))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-find-backward (&optional find)
"Find first occurrence of a string in the backward direction and save it.
@@ -743,7 +723,7 @@ Optional argument FIND is t if this function is called from `edt-find'."
(if (search-backward edt-find-last-text)
(edt-set-match))
(and (< (point) top) (recenter (min beg top-margin))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-find ()
"Find first occurrence of string in current direction and save it."
@@ -789,7 +769,7 @@ Optional argument FIND is t if this function is called from `edt-find'."
(progn
(backward-char 1)
(error "Search failed: \"%s\"" edt-find-last-text))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-find-next-backward ()
"Find next occurrence of a string in backward direction."
@@ -813,7 +793,7 @@ Optional argument FIND is t if this function is called from `edt-find'."
(progn
(edt-set-match)
(and (< (point) top) (recenter (min beg top-margin))))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-find-next ()
"Find next occurrence of a string in current direction."
@@ -891,7 +871,7 @@ In select mode, selected text is highlighted."
(defun edt-reset ()
"Cancel text selection."
(interactive)
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(deactivate-mark)
(zmacs-deactivate-region)))
@@ -1108,7 +1088,7 @@ Also, execute command specified if in Minibuffer."
(if (string-equal " *Minibuf"
(substring (buffer-name) 0 (min (length (buffer-name)) 9)))
(exit-minibuffer))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
@@ -1124,7 +1104,7 @@ Also, execute command specified if in Minibuffer."
(if (string-equal " *Minibuf"
(substring (buffer-name) 0 (min (length (buffer-name)) 9)))
(exit-minibuffer))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
@@ -1174,12 +1154,12 @@ Argument NUM is the numbers of consecutive characters to change."
The current key definition is saved in `edt-last-replaced-key-definition'.
Use `edt-restore-key' to restore last replaced key definition."
(interactive)
- (if edt-x-emacs19-p (setq zmacs-region-stays t))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t))
(let (edt-function
edt-key-definition)
(setq edt-key-definition
(read-key-sequence "Press the key to be defined: "))
- (if (if edt-gnu-emacs19-p
+ (if (if (featurep 'emacs)
(string-equal "\C-m" edt-key-definition)
(string-equal "\C-m" (events-to-keys edt-key-definition)))
(message "Key not defined")
@@ -1259,7 +1239,7 @@ Argument LINES is the number of lines the cursor moved toward the bottom."
;; subtract 1 from height because it includes mode line
(difference (- height margin 1)))
(cond ((> beg difference) (recenter beg))
- ((and edt-x-emacs19-p (> (+ beg lines 1) difference))
+ ((and (featurep 'xemacs) (> (+ beg lines 1) difference))
(recenter (- margin)))
((> (+ beg lines) difference) (recenter (- margin))))))
@@ -1363,7 +1343,7 @@ Argument NUM is the positive number of sentences to move."
(recenter (- left bottom-up-margin))))
(t
(and (> (point) bottom) (recenter bottom-margin)))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-sentence-backward (num)
"Move backward to next sentence beginning.
@@ -1389,7 +1369,7 @@ Argument NUM is the positive number of sentences to move."
(error "End of buffer"))
(backward-sentence num))
(and (< (point) top) (recenter (min beg top-margin))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-sentence (num)
"Move in current direction to next sentence.
@@ -1426,7 +1406,7 @@ Argument NUM is the positive number of paragraphs to move."
(forward-paragraph (+ num 1))
(start-of-paragraph-text)
(if (eolp)
- (next-line 1))
+ (forward-line 1))
(setq num (1- num)))
(cond((> (point) far)
(setq left (save-excursion (forward-line height)))
@@ -1434,7 +1414,7 @@ Argument NUM is the positive number of paragraphs to move."
(recenter (- left bottom-up-margin))))
(t
(and (> (point) bottom) (recenter bottom-margin)))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-paragraph-backward (num)
"Move backward to beginning of paragraph.
@@ -1459,7 +1439,7 @@ Argument NUM is the positive number of paragraphs to move."
(start-of-paragraph-text)
(setq num (1- num)))
(and (< (point) top) (recenter (min beg top-margin))))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-paragraph (num)
"Move in current direction to next paragraph.
@@ -1477,20 +1457,20 @@ Argument NUM is the positive number of paragraphs to move."
"Restore last replaced key definition.
Definition is stored in `edt-last-replaced-key-definition'."
(interactive)
- (if edt-x-emacs19-p (setq zmacs-region-stays t))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t))
(if edt-last-replaced-key-definition
(progn
(let (edt-key-definition)
(set 'edt-key-definition
(read-key-sequence "Press the key to be restored: "))
- (if (if edt-gnu-emacs19-p
+ (if (if (featurep 'emacs)
(string-equal "\C-m" edt-key-definition)
(string-equal "\C-m" (events-to-keys edt-key-definition)))
(message "Key not restored")
(progn
(define-key (current-global-map)
edt-key-definition edt-last-replaced-key-definition)
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(message "Key definition for %s has been restored."
edt-key-definition)
(message "Key definition for %s has been restored."
@@ -1507,7 +1487,7 @@ Definition is stored in `edt-last-replaced-key-definition'."
(let ((start-column (current-column)))
(move-to-window-line 0)
(move-to-column start-column))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; WINDOW BOTTOM
@@ -1519,7 +1499,7 @@ Definition is stored in `edt-last-replaced-key-definition'."
(let ((start-column (current-column)))
(move-to-window-line (- (window-height) 2))
(move-to-column start-column))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; SCROLL WINDOW LINE
@@ -1529,13 +1509,13 @@ Definition is stored in `edt-last-replaced-key-definition'."
"Move window forward one line leaving cursor at position in window."
(interactive)
(scroll-up 1)
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-scroll-window-backward-line ()
"Move window backward one line leaving cursor at position in window."
(interactive)
(scroll-down 1)
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
(defun edt-scroll-line ()
"Move window one line in current direction."
@@ -1582,7 +1562,7 @@ Argument NUM is the positive number of windows to move."
"Move the current line to the bottom of the window."
(interactive)
(recenter -1)
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; LINE TO TOP OF WINDOW
@@ -1592,7 +1572,7 @@ Argument NUM is the positive number of windows to move."
"Move the current line to the top of the window."
(interactive)
(recenter 0)
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; LINE TO MIDDLE OF WINDOW
@@ -1602,7 +1582,7 @@ Argument NUM is the positive number of windows to move."
"Move window so line with cursor is in the middle of the window."
(interactive)
(recenter '(4))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; GOTO PERCENTAGE
@@ -1615,7 +1595,7 @@ Argument NUM is the percentage into the buffer to move."
(if (or (> num 100) (< num 0))
(error "Percentage %d out of range 0 < percent < 100" num)
(goto-char (/ (* (point-max) num) 100)))
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; FILL REGION
@@ -1638,6 +1618,8 @@ Argument NUM is the percentage into the buffer to move."
(indent-region (point) (mark) nil)
(fill-region (point) (mark))))
+
+(declare-function c-mark-function "../progmodes/cc-cmds" ())
;;;
;;; MARK SECTION WISELY
;;;
@@ -1785,7 +1767,7 @@ Argument NUM is the number of times to duplicate the line."
(defun edt-display-the-time ()
"Display the current time."
(interactive)
- (if edt-x-emacs19-p (setq zmacs-region-stays t))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t))
(message "%s" (current-time-string)))
;;;
@@ -1813,7 +1795,7 @@ Argument NUM is the number of times to duplicate the line."
(let (edt-key-definition)
(set 'edt-key-definition
(read-key-sequence "Enter key for binding: "))
- (if (if edt-gnu-emacs19-p
+ (if (if (featurep 'emacs)
(string-equal "\C-m" edt-key-definition)
(string-equal "\C-m" (events-to-keys edt-key-definition)))
(message "Key sequence not remembered")
@@ -1866,7 +1848,7 @@ Warn user that modifications will be lost."
(interactive)
(split-window)
(other-window 1)
- (if edt-x-emacs19-p (setq zmacs-region-stays t)))
+ (if (featurep 'xemacs) (setq zmacs-region-stays t)))
;;;
;;; COPY RECTANGLE
@@ -2152,7 +2134,7 @@ created."
(setq edt-term term))))
(edt-load-keys nil))
;; Make highlighting of selected text work properly for EDT commands.
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(progn
(setq edt-orig-transient-mark-mode transient-mark-mode)
(add-hook 'activate-mark-hook
@@ -2188,7 +2170,7 @@ created."
(setq edt-select-mode-current nil)
(edt-reset)
(force-mode-line-update t)
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(setq transient-mark-mode edt-orig-transient-mark-mode))
(message "Original key bindings restored; EDT Emulation disabled"))
@@ -2203,7 +2185,7 @@ Optional argument USER-SETUP non-nil means called from function
;; disturbing the original bindings in global-map.
(fset 'edt-default-ESC-prefix (copy-keymap 'ESC-prefix))
(setq edt-default-global-map (copy-keymap (current-global-map)))
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(define-key edt-default-global-map "\e" 'edt-default-ESC-prefix)
(define-key edt-default-global-map [escape] 'edt-default-ESC-prefix))
(define-prefix-command 'edt-default-gold-map)
@@ -2239,7 +2221,7 @@ Optional argument USER-SETUP non-nil means called from function
;; Setup user EDT global map by copying default EDT global map bindings.
(fset 'edt-user-ESC-prefix (copy-keymap 'edt-default-ESC-prefix))
(setq edt-user-global-map (copy-keymap edt-default-global-map))
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(define-key edt-user-global-map "\e" 'edt-user-ESC-prefix)
(define-key edt-user-global-map [escape] 'edt-user-ESC-prefix))
;; If terminal has additional function keys, the user's initialization
@@ -2253,7 +2235,7 @@ Optional argument USER-SETUP non-nil means called from function
(defun edt-select-default-global-map()
"Select default EDT emulation key bindings."
(interactive)
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(transient-mark-mode 1))
(use-global-map edt-default-global-map)
(if (not edt-keep-current-page-delimiter)
@@ -2271,7 +2253,7 @@ Optional argument USER-SETUP non-nil means called from function
(interactive)
(if edt-user-map-configured
(progn
- (if edt-gnu-emacs19-p
+ (if (featurep 'emacs)
(transient-mark-mode 1))
(use-global-map edt-user-global-map)
(if (not edt-keep-current-page-delimiter)
diff --git a/lisp/emulation/pc-select.el b/lisp/emulation/pc-select.el
index e74556b5a5c..c35044b70ec 100644
--- a/lisp/emulation/pc-select.el
+++ b/lisp/emulation/pc-select.el
@@ -135,8 +135,8 @@ restored to their original values when PC Selection mode is toggled off.")
(unless pc-select-default-key-bindings
(let ((lst
- ;; This is to avoid confusion with the delete-selection-mode
- ;; On simple displays you cant see that a region is active and
+ ;; This is to avoid confusion with the delete-selection-mode.
+ ;; On simple displays you can't see that a region is active and
;; will be deleted on the next keypress IMHO especially for
;; copy-region-as-kill this is confusing.
;; The same goes for exchange-point-and-mark
@@ -182,7 +182,7 @@ restored to their original values when PC Selection mode is toggled off.")
([prior] . scroll-down-nomark)
;; Next four lines are from Pete Forman.
- ([C-down] . forward-paragraph-nomark) ; KNextPara cDn
+ ([C-down] . forward-paragraph-nomark) ; KNextPara cDn
([C-up] . backward-paragraph-nomark) ; KPrevPara cUp
([S-C-down] . forward-paragraph-mark)
([S-C-up] . backward-paragraph-mark))))
@@ -281,10 +281,17 @@ and `transient-mark-mode'."
;;;;
;; non-interactive
;;;;
-(defun ensure-mark()
+(defun pc-select-ensure-mark ()
;; make sure mark is active
;; test if it is active, if it isn't, set it and activate it
- (or mark-active (set-mark-command nil)))
+ (or mark-active (set-mark-command nil))
+ ;; Remember who activated the mark.
+ (setq mark-active 'pc-select))
+
+(defun pc-select-maybe-deactivate-mark ()
+ ;; maybe switch off mark (only if *we* switched it on)
+ (when (eq mark-active 'pc-select)
+ (deactivate-mark)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; forward and mark
@@ -294,7 +301,7 @@ and `transient-mark-mode'."
"Ensure mark is active; move point right ARG characters (left if ARG negative).
On reaching end of buffer, stop and signal error."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(forward-char arg))
(defun forward-word-mark (&optional arg)
@@ -303,13 +310,13 @@ Normally returns t.
If an edge of the buffer is reached, point is left there
and nil is returned."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(forward-word arg))
(defun forward-line-mark (&optional arg)
"Ensure mark is active; move cursor vertically down ARG lines."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(forward-line arg)
(setq this-command 'forward-line)
)
@@ -319,7 +326,7 @@ and nil is returned."
With argument, do it that many times. Negative arg -N means
move backward across N balanced expressions."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(forward-sexp arg))
(defun forward-paragraph-mark (&optional arg)
@@ -331,7 +338,7 @@ A line which `paragraph-start' matches either separates paragraphs
A paragraph end is the beginning of a line which is not part of the paragraph
to which the end of the previous line belongs, or the end of the buffer."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(forward-paragraph arg))
(defun next-line-mark (&optional arg)
@@ -350,8 +357,8 @@ a semipermanent goal column to which this command always moves.
Then it does not try to move vertically. This goal column is stored
in `goal-column', which is nil when there is none."
(interactive "p")
- (ensure-mark)
- (next-line arg)
+ (pc-select-ensure-mark)
+ (with-no-warnings (next-line arg))
(setq this-command 'next-line))
(defun end-of-line-mark (&optional arg)
@@ -359,14 +366,14 @@ in `goal-column', which is nil when there is none."
With argument ARG not nil or 1, move forward ARG - 1 lines first.
If scan reaches end of buffer, stop there without error."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(end-of-line arg)
(setq this-command 'end-of-line))
(defun backward-line-mark (&optional arg)
"Ensure mark is active; move cursor vertically up ARG lines."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(if (null arg)
(setq arg 1))
(forward-line (- arg))
@@ -379,7 +386,7 @@ A near full screen is `next-screen-context-lines' less than a full screen.
Negative ARG means scroll upward.
When calling from a program, supply a number as argument or nil."
(interactive "P")
- (ensure-mark)
+ (pc-select-ensure-mark)
(cond (pc-select-override-scroll-error
(condition-case nil (scroll-down arg)
(beginning-of-buffer (goto-char (point-min)))))
@@ -395,7 +402,7 @@ of the accessible part of the buffer.
Don't use this command in Lisp programs!
\(goto-char \(point-max)) is faster and avoids clobbering the mark."
(interactive "P")
- (ensure-mark)
+ (pc-select-ensure-mark)
(let ((size (- (point-max) (point-min))))
(goto-char (if arg
(- (point-max)
@@ -427,7 +434,7 @@ Don't use this command in Lisp programs!
"Deactivate mark; move point right ARG characters \(left if ARG negative).
On reaching end of buffer, stop and signal error."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(forward-char arg))
(defun forward-word-nomark (&optional arg)
@@ -436,13 +443,13 @@ Normally returns t.
If an edge of the buffer is reached, point is left there
and nil is returned."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(forward-word arg))
(defun forward-line-nomark (&optional arg)
"Deactivate mark; move cursor vertically down ARG lines."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(forward-line arg)
(setq this-command 'forward-line)
)
@@ -452,7 +459,7 @@ and nil is returned."
With argument, do it that many times. Negative arg -N means
move backward across N balanced expressions."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(forward-sexp arg))
(defun forward-paragraph-nomark (&optional arg)
@@ -464,7 +471,7 @@ A line which `paragraph-start' matches either separates paragraphs
A paragraph end is the beginning of a line which is not part of the paragraph
to which the end of the previous line belongs, or the end of the buffer."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(forward-paragraph arg))
(defun next-line-nomark (&optional arg)
@@ -483,8 +490,8 @@ a semipermanent goal column to which this command always moves.
Then it does not try to move vertically. This goal column is stored
in `goal-column', which is nil when there is none."
(interactive "p")
- (setq mark-active nil)
- (next-line arg)
+ (pc-select-maybe-deactivate-mark)
+ (with-no-warnings (next-line arg))
(setq this-command 'next-line))
(defun end-of-line-nomark (&optional arg)
@@ -492,14 +499,14 @@ in `goal-column', which is nil when there is none."
With argument ARG not nil or 1, move forward ARG - 1 lines first.
If scan reaches end of buffer, stop there without error."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(end-of-line arg)
(setq this-command 'end-of-line))
(defun backward-line-nomark (&optional arg)
"Deactivate mark; move cursor vertically up ARG lines."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(if (null arg)
(setq arg 1))
(forward-line (- arg))
@@ -512,7 +519,7 @@ A near full screen is `next-screen-context-lines' less than a full screen.
Negative ARG means scroll upward.
When calling from a program, supply a number as argument or nil."
(interactive "P")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(cond (pc-select-override-scroll-error
(condition-case nil (scroll-down arg)
(beginning-of-buffer (goto-char (point-min)))))
@@ -528,7 +535,7 @@ of the accessible part of the buffer.
Don't use this command in Lisp programs!
\(goto-char (point-max)) is faster and avoids clobbering the mark."
(interactive "P")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(let ((size (- (point-max) (point-min))))
(goto-char (if arg
(- (point-max)
@@ -561,14 +568,14 @@ Don't use this command in Lisp programs!
"Ensure mark is active; move point left ARG characters (right if ARG negative).
On attempt to pass beginning or end of buffer, stop and signal error."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(backward-char arg))
(defun backward-word-mark (&optional arg)
"Ensure mark is active; move backward until encountering the end of a word.
With argument, do this that many times."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(backward-word arg))
(defun backward-sexp-mark (&optional arg)
@@ -576,7 +583,7 @@ With argument, do this that many times."
With argument, do it that many times. Negative arg -N means
move forward across N balanced expressions."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(backward-sexp arg))
(defun backward-paragraph-mark (&optional arg)
@@ -591,7 +598,7 @@ blank line.
See `forward-paragraph' for more information."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(backward-paragraph arg))
(defun previous-line-mark (&optional arg)
@@ -608,8 +615,8 @@ If you are thinking of using this in a Lisp program, consider using
`forward-line' with a negative argument instead. It is usually easier
to use and more reliable (no dependence on goal column, etc.)."
(interactive "p")
- (ensure-mark)
- (previous-line arg)
+ (pc-select-ensure-mark)
+ (with-no-warnings (previous-line arg))
(setq this-command 'previous-line))
(defun beginning-of-line-mark (&optional arg)
@@ -617,7 +624,7 @@ to use and more reliable (no dependence on goal column, etc.)."
With argument ARG not nil or 1, move forward ARG - 1 lines first.
If scan reaches end of buffer, stop there without error."
(interactive "p")
- (ensure-mark)
+ (pc-select-ensure-mark)
(beginning-of-line arg))
@@ -627,7 +634,7 @@ A near full screen is `next-screen-context-lines' less than a full screen.
Negative ARG means scroll downward.
When calling from a program, supply a number as argument or nil."
(interactive "P")
- (ensure-mark)
+ (pc-select-ensure-mark)
(cond (pc-select-override-scroll-error
(condition-case nil (scroll-up arg)
(end-of-buffer (goto-char (point-max)))))
@@ -643,7 +650,7 @@ of the accessible part of the buffer.
Don't use this command in Lisp programs!
\(goto-char (p\oint-min)) is faster and avoids clobbering the mark."
(interactive "P")
- (ensure-mark)
+ (pc-select-ensure-mark)
(let ((size (- (point-max) (point-min))))
(goto-char (if arg
(+ (point-min)
@@ -663,14 +670,14 @@ Don't use this command in Lisp programs!
"Deactivate mark; move point left ARG characters (right if ARG negative).
On attempt to pass beginning or end of buffer, stop and signal error."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(backward-char arg))
(defun backward-word-nomark (&optional arg)
"Deactivate mark; move backward until encountering the end of a word.
With argument, do this that many times."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(backward-word arg))
(defun backward-sexp-nomark (&optional arg)
@@ -678,7 +685,7 @@ With argument, do this that many times."
With argument, do it that many times. Negative arg -N means
move forward across N balanced expressions."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(backward-sexp arg))
(defun backward-paragraph-nomark (&optional arg)
@@ -693,7 +700,7 @@ blank line.
See `forward-paragraph' for more information."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(backward-paragraph arg))
(defun previous-line-nomark (&optional arg)
@@ -706,8 +713,8 @@ The command \\[set-goal-column] can be used to create
a semipermanent goal column to which this command always moves.
Then it does not try to move vertically."
(interactive "p")
- (setq mark-active nil)
- (previous-line arg)
+ (pc-select-maybe-deactivate-mark)
+ (with-no-warnings (previous-line arg))
(setq this-command 'previous-line))
(defun beginning-of-line-nomark (&optional arg)
@@ -715,7 +722,7 @@ Then it does not try to move vertically."
With argument ARG not nil or 1, move forward ARG - 1 lines first.
If scan reaches end of buffer, stop there without error."
(interactive "p")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(beginning-of-line arg))
(defun scroll-up-nomark (&optional arg)
@@ -724,7 +731,7 @@ A near full screen is `next-screen-context-lines' less than a full screen.
Negative ARG means scroll downward.
When calling from a program, supply a number as argument or nil."
(interactive "P")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(cond (pc-select-override-scroll-error
(condition-case nil (scroll-up arg)
(end-of-buffer (goto-char (point-max)))))
@@ -740,7 +747,7 @@ of the accessible part of the buffer.
Don't use this command in Lisp programs!
\(goto-char (point-min)) is faster and avoids clobbering the mark."
(interactive "P")
- (setq mark-active nil)
+ (pc-select-maybe-deactivate-mark)
(let ((size (- (point-max) (point-min))))
(goto-char (if arg
(+ (point-min)
@@ -968,21 +975,5 @@ but before calling PC Selection mode):
(setq pc-select-key-bindings-alist nil
pc-select-saved-settings-alist nil))))
-
-;;;###autoload
-(defcustom pc-selection-mode nil
- "Toggle PC Selection mode.
-Change mark behavior to emulate Motif, MAC or MS-Windows cut and paste style,
-and cursor movement commands.
-This mode enables Delete Selection mode and Transient Mark mode.
-Setting this variable directly does not take effect;
-you must modify it using \\[customize] or \\[pc-selection-mode]."
- :set (lambda (symbol value)
- (pc-selection-mode (if value 1 -1)))
- :initialize 'custom-initialize-default
- :type 'boolean
- :group 'pc-select
- :require 'pc-select)
-
-;;; arch-tag: 10697b70-ae07-4f3e-ad23-7814a3f418c2
+;; arch-tag: 10697b70-ae07-4f3e-ad23-7814a3f418c2
;;; pc-select.el ends here
diff --git a/lisp/emulation/tpu-edt.el b/lisp/emulation/tpu-edt.el
index 1379bc43a55..425ac450fae 100644
--- a/lisp/emulation/tpu-edt.el
+++ b/lisp/emulation/tpu-edt.el
@@ -207,16 +207,16 @@
;; ; The emacs universal-argument function is very useful.
;; ; This line maps universal-argument to Gold-PF1.
-;; (define-key GOLD-SS3-map "P" 'universal-argument) ; Gold-PF1
+;; (define-key tpu-gold-map [kp_f1] 'universal-argument) ; Gold-PF1
;; ; Make KP7 move by paragraphs, instead of pages.
-;; (define-key SS3-map "w" 'tpu-paragraph) ; KP7
+;; (define-key tpu-global-map [kf_7] 'tpu-paragraph) ; KP7
;; ; Repeat the preceding mappings for X-windows.
;; (cond
;; (window-system
-;; (global-set-key [kp_7] 'tpu-paragraph) ; KP7
-;; (define-key GOLD-map [kp_f1] 'universal-argument))) ; GOLD-PF1
+;; (define-key tpu-global-map [kp_7] 'tpu-paragraph) ; KP7
+;; (define-key tpu-gold-map [kp_f1] 'universal-argument))) ; GOLD-PF1
;; ; Display the TPU-edt version.
;; (tpu-version)
@@ -293,309 +293,275 @@
;;; User Configurable Variables
;;;
(defcustom tpu-have-ispell t
- "*If non-nil (default), TPU-edt uses ispell for spell checking."
+ "If non-nil (default), TPU-edt uses ispell for spell checking."
:type 'boolean
:group 'tpu)
(defcustom tpu-kill-buffers-silently nil
- "*If non-nil, TPU-edt kills modified buffers without asking."
+ "If non-nil, TPU-edt kills modified buffers without asking."
:type 'boolean
:group 'tpu)
(defcustom tpu-percent-scroll 75
- "*Percentage of the screen to scroll for next/previous screen commands."
+ "Percentage of the screen to scroll for next/previous screen commands."
:type 'integer
:group 'tpu)
(defcustom tpu-pan-columns 16
- "*Number of columns the tpu-pan functions scroll left or right."
+ "Number of columns the tpu-pan functions scroll left or right."
:type 'integer
:group 'tpu)
;;;
-;;; Emacs version identifiers - currently referenced by
-;;;
-;;; o tpu-mark o tpu-set-mark
-;;; o mode line section o tpu-load-xkeys
-;;;
-(defconst tpu-lucid-emacs-p
- (string-match "Lucid" emacs-version)
- "Non-nil if we are running Lucid Emacs.")
-
-;;;
;;; Global Keymaps
;;;
-(defvar CSI-map
- (let ((map (make-sparse-keymap)))
- (define-key map "A" 'tpu-previous-line) ; up
- (define-key map "B" 'tpu-next-line) ; down
- (define-key map "D" 'tpu-backward-char) ; left
- (define-key map "C" 'tpu-forward-char) ; right
-
- (define-key map "1~" 'tpu-search) ; Find
- (define-key map "2~" 'tpu-paste) ; Insert Here
- (define-key map "3~" 'tpu-cut) ; Remove
- (define-key map "4~" 'tpu-select) ; Select
- (define-key map "5~" 'tpu-scroll-window-down) ; Prev Screen
- (define-key map "6~" 'tpu-scroll-window-up) ; Next Screen
-
- (define-key map "11~" 'nil) ; F1
- (define-key map "12~" 'nil) ; F2
- (define-key map "13~" 'nil) ; F3
- (define-key map "14~" 'nil) ; F4
- (define-key map "15~" 'nil) ; F5
- (define-key map "17~" 'nil) ; F6
- (define-key map "18~" 'nil) ; F7
- (define-key map "19~" 'nil) ; F8
- (define-key map "20~" 'nil) ; F9
- (define-key map "21~" 'tpu-exit) ; F10
- (define-key map "23~" 'tpu-insert-escape) ; F11 (ESC)
- (define-key map "24~" 'tpu-next-beginning-of-line) ; F12 (BS)
- (define-key map "25~" 'tpu-delete-previous-word) ; F13 (LF)
- (define-key map "26~" 'tpu-toggle-overwrite-mode) ; F14
- (define-key map "28~" 'tpu-help) ; HELP
- (define-key map "29~" 'execute-extended-command) ; DO
- (define-key map "31~" 'tpu-goto-breadcrumb) ; F17
- (define-key map "32~" 'nil) ; F18
- (define-key map "33~" 'nil) ; F19
- (define-key map "34~" 'nil) ; F20
- map)
- "Maps the CSI function keys on the VT100 keyboard.
-CSI is DEC's name for the sequence <ESC>[.")
-
-(defvar GOLD-CSI-map
- (let ((map (make-sparse-keymap)))
- (define-key map "A" 'tpu-move-to-beginning) ; up-arrow
- (define-key map "B" 'tpu-move-to-end) ; down-arrow
- (define-key map "C" 'end-of-line) ; right-arrow
- (define-key map "D" 'beginning-of-line) ; left-arrow
-
- (define-key map "1~" 'nil) ; Find
- (define-key map "2~" 'nil) ; Insert Here
- (define-key map "3~" 'tpu-store-text) ; Remove
- (define-key map "4~" 'tpu-unselect) ; Select
- (define-key map "5~" 'tpu-previous-window) ; Prev Screen
- (define-key map "6~" 'tpu-next-window) ; Next Screen
-
- (define-key map "11~" 'nil) ; F1
- (define-key map "12~" 'nil) ; F2
- (define-key map "13~" 'nil) ; F3
- (define-key map "14~" 'nil) ; F4
- (define-key map "16~" 'nil) ; F5
- (define-key map "17~" 'nil) ; F6
- (define-key map "18~" 'nil) ; F7
- (define-key map "19~" 'nil) ; F8
- (define-key map "20~" 'nil) ; F9
- (define-key map "21~" 'nil) ; F10
- (define-key map "23~" 'nil) ; F11
- (define-key map "24~" 'nil) ; F12
- (define-key map "25~" 'nil) ; F13
- (define-key map "26~" 'nil) ; F14
- (define-key map "28~" 'describe-bindings) ; HELP
- (define-key map "29~" 'nil) ; DO
- (define-key map "31~" 'tpu-drop-breadcrumb) ; F17
- (define-key map "32~" 'nil) ; F18
- (define-key map "33~" 'nil) ; F19
- (define-key map "34~" 'nil) ; F20
- map)
- "Maps the function keys on the VT100 keyboard preceded by GOLD-CSI.")
-(defvar GOLD-SS3-map
- (let ((map (make-sparse-keymap)))
- (define-key map "A" 'tpu-move-to-beginning) ; up-arrow
- (define-key map "B" 'tpu-move-to-end) ; down-arrow
- (define-key map "C" 'end-of-line) ; right-arrow
- (define-key map "D" 'beginning-of-line) ; left-arrow
-
- (define-key map "P" 'keyboard-quit) ; PF1
- (define-key map "Q" 'help-for-help) ; PF2
- (define-key map "R" 'tpu-search) ; PF3
- (define-key map "S" 'tpu-undelete-lines) ; PF4
- (define-key map "p" 'open-line) ; KP0
- (define-key map "q" 'tpu-change-case) ; KP1
- (define-key map "r" 'tpu-delete-to-eol) ; KP2
- (define-key map "s" 'tpu-special-insert) ; KP3
- (define-key map "t" 'tpu-move-to-end) ; KP4
- (define-key map "u" 'tpu-move-to-beginning) ; KP5
- (define-key map "v" 'tpu-paste) ; KP6
- (define-key map "w" 'execute-extended-command) ; KP7
- (define-key map "x" 'tpu-fill) ; KP8
- (define-key map "y" 'tpu-replace) ; KP9
- (define-key map "m" 'tpu-undelete-words) ; KP-
- (define-key map "l" 'tpu-undelete-char) ; KP,
- (define-key map "n" 'tpu-unselect) ; KP.
- (define-key map "M" 'tpu-substitute) ; KPenter
- map)
- "Maps the function keys on the VT100 keyboard preceded by GOLD-SS3.")
-
-(defvar GOLD-map
+(defvar tpu-gold-map
(let ((map (make-keymap)))
- (define-key map "\e[" GOLD-CSI-map) ; GOLD-CSI map
- (define-key map "\eO" GOLD-SS3-map) ; GOLD-SS3 map
+ ;; Previously we used escape sequences here. We now instead presume
+ ;; that term/*.el does its job to map the escape sequence to the right
+ ;; key-symbol.
+
+ (define-key map [up] 'tpu-move-to-beginning) ; up-arrow
+ (define-key map [down] 'tpu-move-to-end) ; down-arrow
+ (define-key map [right] 'end-of-line) ; right-arrow
+ (define-key map [left] 'beginning-of-line) ; left-arrow
+
+ ;; (define-key map [find] nil) ; Find
+ ;; (define-key map [insert] nil) ; Insert Here
+ (define-key map [delete] 'tpu-store-text) ; Remove
+ (define-key map [select] 'tpu-unselect) ; Select
+ (define-key map [prior] 'tpu-previous-window) ; Prev Screen
+ (define-key map [next] 'tpu-next-window) ; Next Screen
+
+ ;; (define-key map [f1] nil) ; F1
+ ;; (define-key map [f2] nil) ; F2
+ ;; (define-key map [f3] nil) ; F3
+ ;; (define-key map [f4] nil) ; F4
+ ;; (define-key map [f5] nil) ; F5
+ ;; (define-key map [f6] nil) ; F6
+ ;; (define-key map [f7] nil) ; F7
+ ;; (define-key map [f8] nil) ; F8
+ ;; (define-key map [f9] nil) ; F9
+ ;; (define-key map [f10] nil) ; F10
+ ;; (define-key map [f11] nil) ; F11
+ ;; (define-key map [f12] nil) ; F12
+ ;; (define-key map [f13] nil) ; F13
+ ;; (define-key map [f14] nil) ; F14
+ (define-key map [help] 'describe-bindings) ; HELP
+ ;; (define-key map [menu] nil) ; DO
+ (define-key map [f17] 'tpu-drop-breadcrumb) ; F17
+ ;; (define-key map [f18] nil) ; F18
+ ;; (define-key map [f19] nil) ; F19
+ ;; (define-key map [f20] nil) ; F20
+
+ (define-key map [kp-f1] 'keyboard-quit) ; PF1
+ (define-key map [kp-f2] 'help-for-help) ; PF2
+ (define-key map [kp-f3] 'tpu-search) ; PF3
+ (define-key map [kp-f4] 'tpu-undelete-lines) ; PF4
+ (define-key map [kp-0] 'open-line) ; KP0
+ (define-key map [kp-1] 'tpu-change-case) ; KP1
+ (define-key map [kp-2] 'tpu-delete-to-eol) ; KP2
+ (define-key map [kp-3] 'tpu-special-insert) ; KP3
+ (define-key map [kp-4] 'tpu-move-to-end) ; KP4
+ (define-key map [kp-5] 'tpu-move-to-beginning) ; KP5
+ (define-key map [kp-6] 'tpu-paste) ; KP6
+ (define-key map [kp-7] 'execute-extended-command) ; KP7
+ (define-key map [kp-8] 'tpu-fill) ; KP8
+ (define-key map [kp-9] 'tpu-replace) ; KP9
+ (define-key map [kp-subtract] 'tpu-undelete-words) ; KP-
+ (define-key map [kp-separator] 'tpu-undelete-char) ; KP,
+ (define-key map [kp-decimal] 'tpu-unselect) ; KP.
+ (define-key map [kp-enter] 'tpu-substitute) ; KPenter
+
;;
- (define-key map "\C-A" 'tpu-toggle-overwrite-mode) ; ^A
- (define-key map "\C-B" 'nil) ; ^B
- (define-key map "\C-C" 'nil) ; ^C
- (define-key map "\C-D" 'nil) ; ^D
- (define-key map "\C-E" 'nil) ; ^E
- (define-key map "\C-F" 'set-visited-file-name) ; ^F
- (define-key map "\C-g" 'keyboard-quit) ; safety first
- (define-key map "\C-h" 'delete-other-windows) ; BS
- (define-key map "\C-i" 'other-window) ; TAB
- (define-key map "\C-J" 'nil) ; ^J
- (define-key map "\C-K" 'tpu-define-macro-key) ; ^K
- (define-key map "\C-l" 'downcase-region) ; ^L
- (define-key map "\C-M" 'nil) ; ^M
- (define-key map "\C-N" 'nil) ; ^N
- (define-key map "\C-O" 'nil) ; ^O
- (define-key map "\C-P" 'nil) ; ^P
- (define-key map "\C-Q" 'nil) ; ^Q
- (define-key map "\C-R" 'nil) ; ^R
- (define-key map "\C-S" 'nil) ; ^S
- (define-key map "\C-T" 'tpu-toggle-control-keys) ; ^T
- (define-key map "\C-u" 'upcase-region) ; ^U
- (define-key map "\C-V" 'nil) ; ^V
- (define-key map "\C-w" 'tpu-write-current-buffers) ; ^W
- (define-key map "\C-X" 'nil) ; ^X
- (define-key map "\C-Y" 'nil) ; ^Y
- (define-key map "\C-Z" 'nil) ; ^Z
- (define-key map " " 'undo) ; SPC
- (define-key map "!" 'nil) ; !
- (define-key map "#" 'nil) ; #
- (define-key map "$" 'tpu-add-at-eol) ; $
- (define-key map "%" 'tpu-goto-percent) ; %
- (define-key map "&" 'nil) ; &
- (define-key map "(" 'nil) ; (
- (define-key map ")" 'nil) ; )
- (define-key map "*" 'tpu-toggle-regexp) ; *
- (define-key map "+" 'nil) ; +
- (define-key map "," 'tpu-goto-breadcrumb) ; ,
- (define-key map "-" 'negative-argument) ; -
- (define-key map "." 'tpu-drop-breadcrumb) ; .
- (define-key map "/" 'tpu-emacs-replace) ; /
- (define-key map "0" 'digit-argument) ; 0
- (define-key map "1" 'digit-argument) ; 1
- (define-key map "2" 'digit-argument) ; 2
- (define-key map "3" 'digit-argument) ; 3
- (define-key map "4" 'digit-argument) ; 4
- (define-key map "5" 'digit-argument) ; 5
- (define-key map "6" 'digit-argument) ; 6
- (define-key map "7" 'digit-argument) ; 7
- (define-key map "8" 'digit-argument) ; 8
- (define-key map "9" 'digit-argument) ; 9
- (define-key map ":" 'nil) ; :
- (define-key map ";" 'tpu-trim-line-ends) ; ;
- (define-key map "<" 'nil) ; <
- (define-key map "=" 'nil) ; =
- (define-key map ">" 'nil) ; >
- (define-key map "?" 'tpu-spell-check) ; ?
- (define-key map "A" 'tpu-toggle-newline-and-indent) ; A
- (define-key map "B" 'tpu-next-buffer) ; B
- (define-key map "C" 'repeat-complex-command) ; C
- (define-key map "D" 'shell-command) ; D
- (define-key map "E" 'tpu-exit) ; E
- (define-key map "F" 'tpu-set-cursor-free) ; F
- (define-key map "G" 'tpu-get) ; G
- (define-key map "H" 'nil) ; H
- (define-key map "I" 'tpu-include) ; I
- (define-key map "K" 'tpu-kill-buffer) ; K
- (define-key map "L" 'tpu-what-line) ; L
- (define-key map "M" 'buffer-menu) ; M
- (define-key map "N" 'tpu-next-file-buffer) ; N
- (define-key map "O" 'occur) ; O
- (define-key map "P" 'lpr-buffer) ; P
- (define-key map "Q" 'tpu-quit) ; Q
- (define-key map "R" 'tpu-toggle-rectangle) ; R
- (define-key map "S" 'replace) ; S
- (define-key map "T" 'tpu-line-to-top-of-window) ; T
- (define-key map "U" 'undo) ; U
- (define-key map "V" 'tpu-version) ; V
- (define-key map "W" 'save-buffer) ; W
- (define-key map "X" 'tpu-save-all-buffers-kill-emacs) ; X
- (define-key map "Y" 'copy-region-as-kill) ; Y
- (define-key map "Z" 'suspend-emacs) ; Z
- (define-key map "[" 'blink-matching-open) ; [
- (define-key map "\\" 'nil) ; \
- (define-key map "]" 'blink-matching-open) ; ]
- (define-key map "^" 'tpu-add-at-bol) ; ^
- (define-key map "_" 'split-window-vertically) ; -
- (define-key map "`" 'what-line) ; `
- (define-key map "a" 'tpu-toggle-newline-and-indent) ; a
- (define-key map "b" 'tpu-next-buffer) ; b
- (define-key map "c" 'repeat-complex-command) ; c
- (define-key map "d" 'shell-command) ; d
- (define-key map "e" 'tpu-exit) ; e
- (define-key map "f" 'tpu-set-cursor-free) ; f
- (define-key map "g" 'tpu-get) ; g
- (define-key map "h" 'nil) ; h
- (define-key map "i" 'tpu-include) ; i
- (define-key map "k" 'tpu-kill-buffer) ; k
- (define-key map "l" 'goto-line) ; l
- (define-key map "m" 'buffer-menu) ; m
- (define-key map "n" 'tpu-next-file-buffer) ; n
- (define-key map "o" 'occur) ; o
- (define-key map "p" 'lpr-region) ; p
- (define-key map "q" 'tpu-quit) ; q
- (define-key map "r" 'tpu-toggle-rectangle) ; r
- (define-key map "s" 'replace) ; s
- (define-key map "t" 'tpu-line-to-top-of-window) ; t
- (define-key map "u" 'undo) ; u
- (define-key map "v" 'tpu-version) ; v
- (define-key map "w" 'save-buffer) ; w
+ (define-key map "\C-A" 'tpu-toggle-overwrite-mode) ; ^A
+ ;; (define-key map "\C-B" nil) ; ^B
+ ;; (define-key map "\C-C" nil) ; ^C
+ ;; (define-key map "\C-D" nil) ; ^D
+ ;; (define-key map "\C-E" nil) ; ^E
+ (define-key map "\C-F" 'set-visited-file-name) ; ^F
+ (define-key map "\C-g" 'keyboard-quit) ; safety first
+ (define-key map "\C-h" 'delete-other-windows) ; BS
+ (define-key map "\C-i" 'other-window) ; TAB
+ ;; (define-key map "\C-J" nil) ; ^J
+ (define-key map "\C-K" 'tpu-define-macro-key) ; ^K
+ (define-key map "\C-l" 'downcase-region) ; ^L
+ ;; (define-key map "\C-M" nil) ; ^M
+ ;; (define-key map "\C-N" nil) ; ^N
+ ;; (define-key map "\C-O" nil) ; ^O
+ ;; (define-key map "\C-P" nil) ; ^P
+ ;; (define-key map "\C-Q" nil) ; ^Q
+ ;; (define-key map "\C-R" nil) ; ^R
+ ;; (define-key map "\C-S" nil) ; ^S
+ (define-key map "\C-T" 'tpu-toggle-control-keys) ; ^T
+ (define-key map "\C-u" 'upcase-region) ; ^U
+ ;; (define-key map "\C-V" nil) ; ^V
+ (define-key map "\C-w" 'tpu-write-current-buffers) ; ^W
+ ;; (define-key map "\C-X" nil) ; ^X
+ ;; (define-key map "\C-Y" nil) ; ^Y
+ ;; (define-key map "\C-Z" nil) ; ^Z
+ (define-key map " " 'undo) ; SPC
+ ;; (define-key map "!" nil) ; !
+ ;; (define-key map "#" nil) ; #
+ (define-key map "$" 'tpu-add-at-eol) ; $
+ (define-key map "%" 'tpu-goto-percent) ; %
+ ;; (define-key map "&" nil) ; &
+ ;; (define-key map "(" nil) ; (
+ ;; (define-key map ")" nil) ; )
+ (define-key map "*" 'tpu-toggle-regexp) ; *
+ ;; (define-key map "+" nil) ; +
+ (define-key map "," 'tpu-goto-breadcrumb) ; ,
+ (define-key map "-" 'negative-argument) ; -
+ (define-key map "." 'tpu-drop-breadcrumb) ; .
+ (define-key map "/" 'tpu-emacs-replace) ; /
+ (define-key map "0" 'digit-argument) ; 0
+ (define-key map "1" 'digit-argument) ; 1
+ (define-key map "2" 'digit-argument) ; 2
+ (define-key map "3" 'digit-argument) ; 3
+ (define-key map "4" 'digit-argument) ; 4
+ (define-key map "5" 'digit-argument) ; 5
+ (define-key map "6" 'digit-argument) ; 6
+ (define-key map "7" 'digit-argument) ; 7
+ (define-key map "8" 'digit-argument) ; 8
+ (define-key map "9" 'digit-argument) ; 9
+ ;; (define-key map ":" nil) ; :
+ (define-key map ";" 'tpu-trim-line-ends) ; ;
+ ;; (define-key map "<" nil) ; <
+ ;; (define-key map "=" nil) ; =
+ ;; (define-key map ">" nil) ; >
+ (define-key map "?" 'tpu-spell-check) ; ?
+ ;; (define-key map "A" 'tpu-toggle-newline-and-indent) ; A
+ ;; (define-key map "B" 'tpu-next-buffer) ; B
+ ;; (define-key map "C" 'repeat-complex-command) ; C
+ ;; (define-key map "D" 'shell-command) ; D
+ ;; (define-key map "E" 'tpu-exit) ; E
+ ;; (define-key map "F" 'tpu-cursor-free-mode) ; F
+ ;; (define-key map "G" 'tpu-get) ; G
+ ;; (define-key map "H" nil) ; H
+ ;; (define-key map "I" 'tpu-include) ; I
+ ;; (define-key map "K" 'tpu-kill-buffer) ; K
+ (define-key map "L" 'tpu-what-line) ; L
+ ;; (define-key map "M" 'buffer-menu) ; M
+ ;; (define-key map "N" 'tpu-next-file-buffer) ; N
+ ;; (define-key map "O" 'occur) ; O
+ (define-key map "P" 'lpr-buffer) ; P
+ ;; (define-key map "Q" 'tpu-quit) ; Q
+ ;; (define-key map "R" 'tpu-toggle-rectangle) ; R
+ ;; (define-key map "S" 'replace) ; S
+ ;; (define-key map "T" 'tpu-line-to-top-of-window) ; T
+ ;; (define-key map "U" 'undo) ; U
+ ;; (define-key map "V" 'tpu-version) ; V
+ ;; (define-key map "W" 'save-buffer) ; W
+ ;; (define-key map "X" 'tpu-save-all-buffers-kill-emacs) ; X
+ ;; (define-key map "Y" 'copy-region-as-kill) ; Y
+ ;; (define-key map "Z" 'suspend-emacs) ; Z
+ (define-key map "[" 'blink-matching-open) ; [
+ ;; (define-key map "\\" nil) ; \
+ (define-key map "]" 'blink-matching-open) ; ]
+ (define-key map "^" 'tpu-add-at-bol) ; ^
+ (define-key map "_" 'split-window-vertically) ; -
+ (define-key map "`" 'what-line) ; `
+ (define-key map "a" 'tpu-toggle-newline-and-indent) ; a
+ (define-key map "b" 'tpu-next-buffer) ; b
+ (define-key map "c" 'repeat-complex-command) ; c
+ (define-key map "d" 'shell-command) ; d
+ (define-key map "e" 'tpu-exit) ; e
+ (define-key map "f" 'tpu-cursor-free-mode) ; f
+ (define-key map "g" 'tpu-get) ; g
+ ;; (define-key map "h" nil) ; h
+ (define-key map "i" 'tpu-include) ; i
+ (define-key map "k" 'tpu-kill-buffer) ; k
+ (define-key map "l" 'goto-line) ; l
+ (define-key map "m" 'buffer-menu) ; m
+ (define-key map "n" 'tpu-next-file-buffer) ; n
+ (define-key map "o" 'occur) ; o
+ (define-key map "p" 'lpr-region) ; p
+ (define-key map "q" 'tpu-quit) ; q
+ (define-key map "r" 'tpu-toggle-rectangle) ; r
+ (define-key map "s" 'replace) ; s
+ (define-key map "t" 'tpu-line-to-top-of-window) ; t
+ (define-key map "u" 'undo) ; u
+ (define-key map "v" 'tpu-version) ; v
+ (define-key map "w" 'save-buffer) ; w
(define-key map "x" 'tpu-save-all-buffers-kill-emacs) ; x
- (define-key map "y" 'copy-region-as-kill) ; y
- (define-key map "z" 'suspend-emacs) ; z
- (define-key map "{" 'nil) ; {
- (define-key map "|" 'split-window-horizontally) ; |
- (define-key map "}" 'nil) ; }
- (define-key map "~" 'exchange-point-and-mark) ; ~
- (define-key map "\177" 'delete-window) ; <X]
+ (define-key map "y" 'copy-region-as-kill) ; y
+ (define-key map "z" 'suspend-emacs) ; z
+ ;; (define-key map "{" nil) ; {
+ (define-key map "|" 'split-window-horizontally) ; |
+ ;; (define-key map "}" nil) ; }
+ (define-key map "~" 'exchange-point-and-mark) ; ~
+ (define-key map "\177" 'delete-window) ; <X]
map)
"Maps the function keys on the VT100 keyboard preceded by PF1.
GOLD is the ASCII 7-bit escape sequence <ESC>OP.")
+(define-obsolete-variable-alias 'GOLD-map 'tpu-gold-map "23.1")
-(defvar SS3-map
+(defvar tpu-global-map
(let ((map (make-sparse-keymap)))
- (define-key map "P" GOLD-map) ; GOLD map
+
+ ;; Previously defined in CSI-map. We now presume that term/*.el does
+ ;; its job to map the escape sequence to the right key-symbol.
+ (define-key map [find] 'tpu-search) ; Find
+ (define-key map [insert] 'tpu-paste) ; Insert Here
+ (define-key map [delete] 'tpu-cut) ; Remove
+ (define-key map [select] 'tpu-select) ; Select
+ (define-key map [prior] 'tpu-scroll-window-down) ; Prev Screen
+ (define-key map [next] 'tpu-scroll-window-up) ; Next Screen
+
+ ;; (define-key map [f1] nil) ; F1
+ ;; (define-key map [f2] nil) ; F2
+ ;; (define-key map [f3] nil) ; F3
+ ;; (define-key map [f4] nil) ; F4
+ ;; (define-key map [f5] nil) ; F5
+ ;; (define-key map [f6] nil) ; F6
+ ;; (define-key map [f7] nil) ; F7
+ ;; (define-key map [f8] nil) ; F8
+ ;; (define-key map [f9] nil) ; F9
+ (define-key map [f10] 'tpu-exit) ; F10
+ (define-key map [f11] 'tpu-insert-escape) ; F11 (ESC)
+ (define-key map [f12] 'tpu-next-beginning-of-line) ; F12 (BS)
+ (define-key map [f13] 'tpu-delete-previous-word) ; F13 (LF)
+ (define-key map [f14] 'tpu-toggle-overwrite-mode) ; F14
+ (define-key map [help] 'tpu-help) ; HELP
+ (define-key map [menu] 'execute-extended-command) ; DO
+ (define-key map [f17] 'tpu-goto-breadcrumb) ; F17
+ ;; (define-key map [f18] nil) ; F18
+ ;; (define-key map [f19] nil) ; F19
+ ;; (define-key map [f20] nil) ; F20
+
+
+ ;; Previously defined in SS3-map. We now presume that term/*.el does
+ ;; its job to map the escape sequence to the right key-symbol.
+ (define-key map [kp-f1] tpu-gold-map) ; GOLD map
;;
- (define-key map "A" 'tpu-previous-line) ; up
- (define-key map "B" 'tpu-next-line) ; down
- (define-key map "C" 'tpu-forward-char) ; right
- (define-key map "D" 'tpu-backward-char) ; left
-
- (define-key map "Q" 'tpu-help) ; PF2
- (define-key map "R" 'tpu-search-again) ; PF3
- (define-key map "S" 'tpu-delete-current-line) ; PF4
- (define-key map "p" 'tpu-line) ; KP0
- (define-key map "q" 'tpu-word) ; KP1
- (define-key map "r" 'tpu-end-of-line) ; KP2
- (define-key map "s" 'tpu-char) ; KP3
- (define-key map "t" 'tpu-advance-direction) ; KP4
- (define-key map "u" 'tpu-backup-direction) ; KP5
- (define-key map "v" 'tpu-cut) ; KP6
- (define-key map "w" 'tpu-page) ; KP7
- (define-key map "x" 'tpu-scroll-window) ; KP8
- (define-key map "y" 'tpu-append-region) ; KP9
- (define-key map "m" 'tpu-delete-current-word) ; KP-
- (define-key map "l" 'tpu-delete-current-char) ; KP,
- (define-key map "n" 'tpu-select) ; KP.
- (define-key map "M" 'newline) ; KPenter
- map)
- "Maps the SS3 function keys on the VT100 keyboard.
-SS3 is DEC's name for the sequence <ESC>O.")
+ (define-key map [up] 'tpu-previous-line) ; up
+ (define-key map [down] 'tpu-next-line) ; down
+ (define-key map [right] 'tpu-forward-char) ; right
+ (define-key map [left] 'tpu-backward-char) ; left
+
+ (define-key map [kp-f2] 'tpu-help) ; PF2
+ (define-key map [kp-f3] 'tpu-search-again) ; PF3
+ (define-key map [kp-f4] 'tpu-delete-current-line) ; PF4
+ (define-key map [kp-0] 'tpu-line) ; KP0
+ (define-key map [kp-1] 'tpu-word) ; KP1
+ (define-key map [kp-2] 'tpu-end-of-line) ; KP2
+ (define-key map [kp-3] 'tpu-char) ; KP3
+ (define-key map [kp-4] 'tpu-advance-direction) ; KP4
+ (define-key map [kp-5] 'tpu-backup-direction) ; KP5
+ (define-key map [kp-6] 'tpu-cut) ; KP6
+ (define-key map [kp-7] 'tpu-page) ; KP7
+ (define-key map [kp-8] 'tpu-scroll-window) ; KP8
+ (define-key map [kp-9] 'tpu-append-region) ; KP9
+ (define-key map [kp-subtract] 'tpu-delete-current-word) ; KP-
+ (define-key map [kp-separator] 'tpu-delete-current-char) ; KP,
+ (define-key map [kp-decimal] 'tpu-select) ; KP.
+ (define-key map [kp-enter] 'newline) ; KPenter
-(defvar tpu-global-map
- (let ((map (make-sparse-keymap)))
- (define-key map "\e[" CSI-map)
- (define-key map "\eO" SS3-map)
map)
"TPU-edt global keymap.")
-(and (not (boundp 'minibuffer-local-ns-map))
- (defvar minibuffer-local-ns-map (make-sparse-keymap)
- "Hack to give Lucid Emacs the same maps as ordinary Emacs."))
-
;;;
;;; Global Variables
@@ -698,7 +664,7 @@ SS3 is DEC's name for the sequence <ESC>O.")
(setq tpu-mark-flag (if transient-mark-mode "" (if (tpu-mark) " @" " ")))
(force-mode-line-update))
-(cond (tpu-lucid-emacs-p
+(cond ((featurep 'xemacs)
(add-hook 'zmacs-deactivate-region-hook 'tpu-update-mode-line)
(add-hook 'zmacs-activate-region-hook 'tpu-update-mode-line))
(t
@@ -779,7 +745,7 @@ Otherwise sets the tpu-match markers to nil and returns nil."
"TPU-edt version of the mark function.
Return the appropriate value of the mark for the current
version of Emacs."
- (cond (tpu-lucid-emacs-p (mark (not zmacs-regions)))
+ (cond ((featurep 'xemacs) (mark (not zmacs-regions)))
(t (and mark-active (mark (not transient-mark-mode))))))
(defun tpu-set-mark (pos)
@@ -2260,8 +2226,8 @@ Accepts a prefix argument for the number of tpu-pan-columns to scroll."
;;;
;;; Minibuffer map additions to set search direction
;;;
-(define-key minibuffer-local-map "\eOt" 'tpu-search-forward-exit) ;KP4
-(define-key minibuffer-local-map "\eOu" 'tpu-search-backward-exit) ;KP5
+(define-key minibuffer-local-map [kp-4] 'tpu-search-forward-exit) ;KP4
+(define-key minibuffer-local-map [kp-5] 'tpu-search-backward-exit) ;KP5
;;;
@@ -2363,7 +2329,7 @@ If FILE is nil, try to load a default file. The default file names are
(setq file (expand-file-name file)))
(tpu-xkeys-file
(setq file (expand-file-name tpu-xkeys-file)))
- (tpu-lucid-emacs-p
+ ((featurep 'xemacs)
(setq file (convert-standard-filename
(expand-file-name "~/.tpu-lucid-keys"))))
(t
@@ -2379,34 +2345,11 @@ If FILE is nil, try to load a default file. The default file names are
(cond ((file-readable-p file)
(load-file file))
(t
- (switch-to-buffer "*scratch*")
- (erase-buffer)
- (insert "
-
- Ack!! You're running TPU-edt under X-windows without loading an
- X key definition file. To create a TPU-edt X key definition
- file, run the tpu-mapper.el program. It came with TPU-edt. It
- even includes directions on how to use it! Perhaps it's lying
- around here someplace. ")
- (let ((file "tpu-mapper.el")
- (found nil)
- (path nil)
- (search-list (append (list (expand-file-name ".")) load-path)))
- (while (and (not found) search-list)
- (setq path (concat (car search-list)
- (if (string-match "/$" (car search-list)) "" "/")
- file))
- (if (and (file-exists-p path) (not (file-directory-p path)))
- (setq found t))
- (setq search-list (cdr search-list)))
- (cond (found
- (insert (format
- "Ah yes, there it is, in \n\n %s \n\n" path))
- (if (tpu-y-or-n-p "Do you want to run it now? ")
- (load-file path)))
- (t
- (insert "Nope, I can't seem to find it. :-(\n\n")
- (sit-for 120)))))))
+ ;; FIXME: This used to force the user to build `file'. With the
+ ;; new code, such a file is not even necessary, but we'll keep
+ ;; a warning message.
+ (message "%s not found: use tpu-mapper.el to create it"
+ (abbreviate-file-name file)))))
(defun tpu-copy-keyfile (oldname newname)
"Copy the TPU-edt X key definitions file to the new default name."
@@ -2492,6 +2435,33 @@ If FILE is nil, try to load a default file. The default file names are
(ignore-errors (ad-disable-regexp "\\`tpu-"))
(setq tpu-edt-mode nil))
+
+;;;### (autoloads (tpu-set-cursor-bound tpu-set-cursor-free tpu-set-scroll-margins
+;;;;;; tpu-cursor-free-mode) "tpu-extras" "tpu-extras.el" "e0629234f1abe076917a303456b48329")
+;;; Generated autoloads from tpu-extras.el
+
+(autoload 'tpu-cursor-free-mode "tpu-extras" "\
+Minor mode to allow the cursor to move freely about the screen.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'tpu-set-scroll-margins "tpu-extras" "\
+Set scroll margins.
+
+\(fn TOP BOTTOM)" t nil)
+
+(autoload 'tpu-set-cursor-free "tpu-extras" "\
+Allow the cursor to move freely about the screen.
+
+\(fn)" t nil)
+
+(autoload 'tpu-set-cursor-bound "tpu-extras" "\
+Constrain the cursor to the flow of the text.
+
+\(fn)" t nil)
+
+;;;***
+
(provide 'tpu-edt)
;; arch-tag: f3dfe61c-2cbd-4f73-b9cc-eb215020b857
diff --git a/lisp/emulation/tpu-extras.el b/lisp/emulation/tpu-extras.el
index a98a5ea56b4..062082a295a 100644
--- a/lisp/emulation/tpu-extras.el
+++ b/lisp/emulation/tpu-extras.el
@@ -112,18 +112,18 @@
;;; Customization variables
(defcustom tpu-top-scroll-margin 0
- "*Scroll margin at the top of the screen.
+ "Scroll margin at the top of the screen.
Interpreted as a percent of the current window size."
:type 'integer
:group 'tpu)
(defcustom tpu-bottom-scroll-margin 0
- "*Scroll margin at the bottom of the screen.
+ "Scroll margin at the bottom of the screen.
Interpreted as a percent of the current window size."
:type 'integer
:group 'tpu)
(defcustom tpu-backward-char-like-tpu t
- "*If non-nil, in free cursor mode backward-char (left-arrow) works
+ "If non-nil, in free cursor mode backward-char (left-arrow) works
just like TPU/edt. Otherwise, backward-char will move to the end of
the previous line when starting from a line beginning."
:type 'boolean
@@ -132,8 +132,12 @@ the previous line when starting from a line beginning."
;;; Global variables
-(defvar tpu-cursor-free nil
- "If non-nil, let the cursor roam free.")
+;;;###autoload
+(define-minor-mode tpu-cursor-free-mode
+ "Minor mode to allow the cursor to move freely about the screen."
+ :init-value nil
+ (if (not tpu-cursor-free-mode)
+ (tpu-trim-line-ends)))
;;; Hooks -- Set cursor free in picture mode.
@@ -141,11 +145,10 @@ the previous line when starting from a line beginning."
(add-hook 'picture-mode-hook 'tpu-set-cursor-free)
-(defun tpu-before-save-hook ()
+(defun tpu-trim-line-ends-if-needed ()
"Eliminate whitespace at ends of lines, if the cursor is free."
- (if (and (buffer-modified-p) tpu-cursor-free) (tpu-trim-line-ends)))
-
-(add-hook 'before-save-hook 'tpu-before-save-hook)
+ (if (and (buffer-modified-p) tpu-cursor-free-mode) (tpu-trim-line-ends)))
+(add-hook 'before-save-hook 'tpu-trim-line-ends-if-needed)
;;; Utility routines for implementing scroll margins
@@ -171,12 +174,12 @@ the previous line when starting from a line beginning."
(defun tpu-forward-char (num)
"Move right ARG characters (left if ARG is negative)."
(interactive "p")
- (if tpu-cursor-free (picture-forward-column num) (forward-char num)))
+ (if tpu-cursor-free-mode (picture-forward-column num) (forward-char num)))
(defun tpu-backward-char (num)
"Move left ARG characters (right if ARG is negative)."
(interactive "p")
- (cond ((not tpu-cursor-free)
+ (cond ((not tpu-cursor-free-mode)
(backward-char num))
(tpu-backward-char-like-tpu
(picture-backward-column num))
@@ -195,7 +198,7 @@ the previous line when starting from a line beginning."
Prefix argument serves as a repeat count."
(interactive "p")
(let ((beg (tpu-current-line)))
- (if tpu-cursor-free (or (eobp) (picture-move-down num))
+ (if tpu-cursor-free-mode (or (eobp) (picture-move-down num))
(line-move num))
(tpu-bottom-check beg num)
(setq this-command 'next-line)))
@@ -205,7 +208,7 @@ Prefix argument serves as a repeat count."
Prefix argument serves as a repeat count."
(interactive "p")
(let ((beg (tpu-current-line)))
- (if tpu-cursor-free (picture-move-up num) (line-move (- num)))
+ (if tpu-cursor-free-mode (picture-move-up num) (line-move (- num)))
(tpu-top-check beg num)
(setq this-command 'previous-line)))
@@ -223,7 +226,7 @@ Accepts a prefix argument for the number of lines to move."
Accepts a prefix argument for the number of lines to move."
(interactive "p")
(let ((beg (tpu-current-line)))
- (cond (tpu-cursor-free
+ (cond (tpu-cursor-free-mode
(let ((beg (point)))
(if (< 1 num) (forward-line num))
(picture-end-of-line)
@@ -238,7 +241,7 @@ Accepts a prefix argument for the number of lines to move."
Accepts a prefix argument for the number of lines to move."
(interactive "p")
(let ((beg (tpu-current-line)))
- (cond (tpu-cursor-free
+ (cond (tpu-cursor-free-mode
(picture-end-of-line (- 1 num)))
(t
(end-of-line (- 1 num))))
@@ -248,7 +251,7 @@ Accepts a prefix argument for the number of lines to move."
"Move point to end of current line."
(interactive)
(let ((beg (point)))
- (if tpu-cursor-free (picture-end-of-line) (end-of-line))
+ (if tpu-cursor-free-mode (picture-end-of-line) (end-of-line))
(if (= beg (point)) (message "You are already at the end of a line."))))
(defun tpu-forward-line (num)
@@ -256,9 +259,8 @@ Accepts a prefix argument for the number of lines to move."
Prefix argument serves as a repeat count."
(interactive "p")
(let ((beg (tpu-current-line)))
- (line-move num)
- (tpu-bottom-check beg num)
- (beginning-of-line)))
+ (forward-line num)
+ (tpu-bottom-check beg num)))
(defun tpu-backward-line (num)
"Move to beginning of previous line.
@@ -266,9 +268,8 @@ Prefix argument serves as repeat count."
(interactive "p")
(let ((beg (tpu-current-line)))
(or (bolp) (>= 0 num) (setq num (- num 1)))
- (line-move (- num))
- (tpu-top-check beg num)
- (beginning-of-line)))
+ (forward-line (- num))
+ (tpu-top-check beg num)))
;;; Movement by paragraph
@@ -448,22 +449,19 @@ A repeat count means scroll that many sections."
(defun tpu-set-cursor-free ()
"Allow the cursor to move freely about the screen."
(interactive)
- (setq tpu-cursor-free t)
- (substitute-key-definition 'tpu-set-cursor-free
- 'tpu-set-cursor-bound
- GOLD-map)
+ (tpu-cursor-free-mode 1)
(message "The cursor will now move freely about the screen."))
;;;###autoload
(defun tpu-set-cursor-bound ()
"Constrain the cursor to the flow of the text."
(interactive)
- (tpu-trim-line-ends)
- (setq tpu-cursor-free nil)
- (substitute-key-definition 'tpu-set-cursor-bound
- 'tpu-set-cursor-free
- GOLD-map)
+ (tpu-cursor-free-mode -1)
(message "The cursor is now bound to the flow of your text."))
+;; Local Variables:
+;; generated-autoload-file: "tpu-edt.el"
+;; End:
+
;; arch-tag: 89676fa4-33ec-48cb-9135-6f3bf230ab1a
;;; tpu-extras.el ends here
diff --git a/lisp/emulation/tpu-mapper.el b/lisp/emulation/tpu-mapper.el
index 7f843964870..b3ad67ec4df 100644
--- a/lisp/emulation/tpu-mapper.el
+++ b/lisp/emulation/tpu-mapper.el
@@ -78,13 +78,6 @@
;;;
-;;; Decide whether we're running Lucid Emacs or Emacs itself.
-;;;
-(defconst tpu-lucid-emacs19-p (string-match "Lucid" emacs-version)
- "Non-nil if we are running Lucid Emacs version 19.")
-
-
-;;;
;;; Key variables
;;;
(defvar tpu-kp4 nil)
@@ -100,7 +93,7 @@
;;;
;;; Make sure the window is big enough to display the instructions
;;;
-(if tpu-lucid-emacs19-p (set-screen-size (selected-screen) 80 36)
+(if (featurep 'xemacs) (set-screen-size (selected-screen) 80 36)
(set-frame-size (selected-frame) 80 36))
@@ -167,7 +160,7 @@
;;; Save <CR> for future reference
;;;
(cond
- (tpu-lucid-emacs19-p
+ ((featurep 'xemacs)
(setq tpu-return-seq (read-key-sequence "Hit carriage-return <CR> to continue "))
(setq tpu-return (concat "[" (format "%s" (event-key (aref tpu-return-seq 0))) "]")))
(t
@@ -179,42 +172,29 @@
;;;
;;; Key mapping functions
;;;
-(defun tpu-lucid-map-key (ident descrip func gold-func)
+(defun tpu-map-key (ident descrip func gold-func)
(interactive)
- (setq tpu-key-seq (read-key-sequence (format "Press %s%s: " ident descrip)))
- (setq tpu-key (concat "[" (format "%s" (event-key (aref tpu-key-seq 0))) "]"))
- (cond ((not (equal tpu-key tpu-return))
- (set-buffer "Keys")
- (insert (format"(global-set-key %s %s)\n" tpu-key func))
- (set-buffer "Gold-Keys")
- (insert (format "(define-key GOLD-map %s %s)\n" tpu-key gold-func))
- (set-buffer "Directions"))
- ;; bogosity to get next prompt to come up, if the user hits <CR>!
- ;; check periodically to see if this is still needed...
- (t
- (format "%s" tpu-key)))
+ (if (featurep 'xemacs)
+ (progn
+ (setq tpu-key-seq (read-key-sequence
+ (format "Press %s%s: " ident descrip))
+ tpu-key (format "[%s]" (event-key (aref tpu-key-seq 0))))
+ (unless (equal tpu-key tpu-return)
+ (set-buffer "Keys")
+ (insert (format"(global-set-key %s %s)\n" tpu-key func))
+ (set-buffer "Gold-Keys")
+ (insert (format "(define-key GOLD-map %s %s)\n" tpu-key gold-func))))
+ (message "Press %s%s: " ident descrip)
+ (setq tpu-key-seq (read-event)
+ tpu-key (format "[%s]" tpu-key-seq))
+ (unless (equal tpu-key tpu-return)
+ (set-buffer "Keys")
+ (insert (format"(define-key tpu-global-map %s %s)\n" tpu-key func))
+ (set-buffer "Gold-Keys")
+ (insert (format "(define-key tpu-gold-map %s %s)\n" tpu-key gold-func))))
+ (set-buffer "Directions")
tpu-key)
-(defun tpu-emacs-map-key (ident descrip func gold-func)
- (interactive)
- (message "Press %s%s: " ident descrip)
- (setq tpu-key-seq (read-event))
- (setq tpu-key (concat "[" (format "%s" tpu-key-seq) "]"))
- (cond ((not (equal tpu-key tpu-return))
- (set-buffer "Keys")
- (insert (format"(global-set-key %s %s)\n" tpu-key func))
- (set-buffer "Gold-Keys")
- (insert (format "(define-key GOLD-map %s %s)\n" tpu-key gold-func))
- (set-buffer "Directions"))
- ;; bogosity to get next prompt to come up, if the user hits <CR>!
- ;; check periodically to see if this is still needed...
- (t
- (format "%s" tpu-key)))
- tpu-key)
-
-(fset 'tpu-map-key (if tpu-lucid-emacs19-p 'tpu-lucid-map-key 'tpu-emacs-map-key))
-
-
(set-buffer "Keys")
(insert "
;; Arrows
@@ -350,7 +330,7 @@
;;
")
-(cond (tpu-lucid-emacs19-p
+(cond ((featurep 'xemacs)
(insert (format "(setq tpu-help-enter \"%s\")\n" tpu-enter-seq))
(insert (format "(setq tpu-help-return \"%s\")\n" tpu-return-seq))
(insert "(setq tpu-help-N \"[#<keypress-event N>]\")\n")
@@ -368,7 +348,7 @@
;;;
(let ((file
(convert-standard-filename
- (if tpu-lucid-emacs19-p "~/.tpu-lucid-keys" "~/.tpu-keys"))))
+ (if (featurep 'xemacs) "~/.tpu-lucid-keys" "~/.tpu-keys"))))
(set-visited-file-name
(read-file-name (format "Save key mapping to file (default %s): " file) "" file)))
(save-buffer)
@@ -393,5 +373,5 @@
")
(goto-char (point-min))
-;;; arch-tag: bab5872f-cd3a-4c1c-aedb-047b67646f6c
+;; arch-tag: bab5872f-cd3a-4c1c-aedb-047b67646f6c
;;; tpu-mapper.el ends here
diff --git a/lisp/emulation/vi.el b/lisp/emulation/vi.el
index 977a7980803..889f81e75c7 100644
--- a/lisp/emulation/vi.el
+++ b/lisp/emulation/vi.el
@@ -801,7 +801,7 @@ The given COUNT is remembered for future scrollings."
(defun vi-previous-line-first-nonwhite (count)
"Go up COUNT lines. Stop at first non-white."
(interactive "p")
- (previous-line count)
+ (forward-line (- count))
(back-to-indentation))
(defun vi-scroll-up-window (count)
@@ -1062,7 +1062,7 @@ MOTION-COMMAND with ARG.
(setq end (1+ end)))
((eq moving-unit 'line)
(goto-char begin) (beginning-of-line) (setq begin (point))
- (goto-char end) (next-line 1) (beginning-of-line) (setq end (point))))
+ (goto-char end) (forward-line 1) (beginning-of-line) (setq end (point))))
(if (> end (point-max)) (setq end (point-max))) ; force in buffer region
(cons begin end)))))
@@ -1124,7 +1124,7 @@ text as lines. If the optional after-p is given, put after/below the cursor."
(t (error "Register %c is not containing text string" reg))))
(if (vi-string-end-with-nl-p put-text) ; put back text as lines
(if after-p
- (progn (next-line 1) (beginning-of-line))
+ (progn (forward-line 1) (beginning-of-line))
(beginning-of-line))
(if after-p (forward-char 1)))
(push-mark (point))
@@ -1375,6 +1375,8 @@ The following CHAR will be the name for the command or macro."
(setq char (read-char))
(vi-ask-for-info char))))
+(declare-function c-mark-function "../progmodes/cc-cmds" ())
+
(defun vi-mark-region (arg region)
"Mark region appropriately. The next char REGION is d(efun),s(-exp),b(uffer),
p(aragraph), P(age), f(unction in C/Pascal etc.), w(ord), e(nd of sentence),
diff --git a/lisp/emulation/vip.el b/lisp/emulation/vip.el
index c2d00a8ffba..e6fdd55f7c4 100644
--- a/lisp/emulation/vip.el
+++ b/lisp/emulation/vip.el
@@ -874,7 +874,7 @@ is the name of the register for COM."
(set-mark beg))
(beginning-of-line)
(exchange-point-and-mark)
- (if (or (not (eobp)) (not (bolp))) (next-line 1))
+ (if (or (not (eobp)) (not (bolp))) (with-no-warnings (next-line 1)))
(beginning-of-line)
(if (> beg end) (exchange-point-and-mark)))
@@ -1050,7 +1050,7 @@ command was invoked with argument > 1."
(defun vip-line (arg)
(let ((val (car arg)) (com (cdr arg)))
(move-marker vip-com-point (point))
- (next-line (1- val))
+ (with-no-warnings (next-line (1- val)))
(vip-execute-com 'vip-line val com)))
(defun vip-yank-line (arg)
@@ -1263,7 +1263,7 @@ beginning of buffer, stop and signal error."
(interactive "P")
(let ((val (vip-p-val arg)) (com (vip-getCom arg)))
(if com (move-marker vip-com-point (point)))
- (next-line val)
+ (with-no-warnings (next-line val))
(back-to-indentation)
(if com (vip-execute-com 'vip-next-line-at-bol val com))))
@@ -1272,7 +1272,7 @@ beginning of buffer, stop and signal error."
(interactive "P")
(let ((val (vip-p-val arg)) (com (vip-getCom arg)))
(if com (move-marker vip-com-point (point)))
- (next-line (- val))
+ (with-no-warnings (next-line (- val)))
(setq this-command 'previous-line)
(if com (vip-execute-com 'vip-previous-line val com))))
@@ -1281,7 +1281,7 @@ beginning of buffer, stop and signal error."
(interactive "P")
(let ((val (vip-p-val arg)) (com (vip-getCom arg)))
(if com (move-marker vip-com-point (point)))
- (next-line (- val))
+ (with-no-warnings (next-line (- val)))
(back-to-indentation)
(if com (vip-execute-com 'vip-previous-line val com))))
@@ -1323,7 +1323,7 @@ after search."
;; forward search begins here
(if (eolp) (error "") (point))
;; forward search ends here
- (progn (next-line 1) (beginning-of-line) (point)))
+ (progn (with-no-warnings (next-line 1)) (beginning-of-line) (point)))
(narrow-to-region
;; backward search begins from here
(if (bolp) (error "") (point))
@@ -1803,7 +1803,7 @@ STRING. Search will be forward if FORWARD, otherwise backward."
(setq vip-use-register nil)
(if (vip-end-with-a-newline-p text)
(progn
- (next-line 1)
+ (with-no-warnings (next-line 1))
(beginning-of-line))
(if (and (not (eolp)) (not (eobp))) (forward-char)))
(setq vip-d-com (list 'vip-put-back val nil vip-use-register))
@@ -2883,7 +2883,7 @@ a token has type \(command, address, end-mark\) and value."
(let ((point (if (null ex-addresses) (point) (car ex-addresses)))
(variant nil) command file)
(goto-char point)
- (if (not (= point 0)) (next-line 1))
+ (if (not (= point 0)) (with-no-warnings (next-line 1)))
(beginning-of-line)
(save-window-excursion
(set-buffer " *ex-working-space*")
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 9c1ccf37e61..2c07017e389 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -106,7 +106,7 @@
;; define viper-charpair-command-p
(viper-test-com-defun viper-charpair-command)
-(defconst viper-movement-commands '(?b ?B ?e ?E ?f ?F ?G ?h ?H ?j ?k ?l
+(defconst viper-movement-commands '(?b ?B ?e ?E ?f ?F ?G ?h ?j ?k ?l
?H ?M ?L ?n ?t ?T ?w ?W ?$ ?%
?^ ?( ?) ?- ?+ ?| ?{ ?} ?[ ?] ?' ?`
?\; ?, ?0 ?? ?/ ?\ ?\C-m
@@ -834,7 +834,7 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
viper-emacs-kbd-minor-mode
ch)
(cond ((and viper-special-input-method
- viper-emacs-p
+ (featurep 'emacs)
(fboundp 'quail-input-method))
;; (let ...) is used to restore unread-command-events to the
;; original state. We don't want anything left in there after
@@ -861,7 +861,7 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
(1- (length quail-current-str)))))
))
((and viper-special-input-method
- viper-xemacs-p
+ (featurep 'xemacs)
(fboundp 'quail-start-translation))
;; same as above but for XEmacs, which doesn't have
;; quail-input-method
@@ -893,7 +893,7 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
(t
;;(setq ch (read-char-exclusive))
(setq ch (aref (read-key-sequence nil) 0))
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(setq ch (event-to-character ch)))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
@@ -902,13 +902,13 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
(progn
;;(setq ch (read-char-exclusive))
(setq ch (aref (read-key-sequence nil) 0))
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(setq ch (event-to-character ch))))
)
(insert ch))
)
(setq last-command-event
- (viper-copy-event (if viper-xemacs-p
+ (viper-copy-event (if (featurep 'xemacs)
(character-to-event ch) ch)))
) ; let
(error nil)
@@ -1080,10 +1080,10 @@ as a Meta key and any number of multiple escapes is allowed."
;; and return ESC as the key-sequence
(viper-set-unread-command-events (viper-subseq keyseq 1))
(setq last-input-event event
- keyseq (if viper-emacs-p
+ keyseq (if (featurep 'emacs)
"\e"
(vector (character-to-event ?\e)))))
- ((and viper-xemacs-p
+ ((and (featurep 'xemacs)
(key-press-event-p first-key)
(equal '(meta) key-mod))
(viper-set-unread-command-events
@@ -1116,7 +1116,7 @@ as a Meta key and any number of multiple escapes is allowed."
"Function that implements ESC key in Viper emulation of Vi."
(interactive)
(let ((cmd (or (key-binding (viper-envelop-ESC-key))
- '(lambda () (interactive) (error "")))))
+ '(lambda () (interactive) (error "Viper bell")))))
;; call the actual function to execute ESC (if no other symbols followed)
;; or the key bound to the ESC sequence (if the sequence was issued
@@ -1238,7 +1238,7 @@ as a Meta key and any number of multiple escapes is allowed."
;; it is an error.
(progn
;; new com is (CHAR . OLDCOM)
- (if (viper-memq-char char '(?# ?\")) (error ""))
+ (if (viper-memq-char char '(?# ?\")) (error "Viper bell"))
(setq com (cons char com))
(setq cont nil))
;; If com is nil we set com as char, and read more. Again, if char is
@@ -1257,7 +1257,7 @@ as a Meta key and any number of multiple escapes is allowed."
(let ((reg (read-char)))
(if (viper-valid-register reg)
(setq viper-use-register reg)
- (error ""))
+ (error "Viper bell"))
(setq char (read-char))))
(t
(setq com char)
@@ -1279,7 +1279,7 @@ as a Meta key and any number of multiple escapes is allowed."
(viper-regsuffix-command-p char)
(viper= char ?!) ; bang command
(viper= char ?g) ; the gg command (like G0)
- (error ""))
+ (error "Viper bell"))
(setq cmd-to-exec-at-end
(viper-exec-form-in-vi
`(key-binding (char-to-string ,char)))))
@@ -1313,18 +1313,18 @@ as a Meta key and any number of multiple escapes is allowed."
((equal com '(?= . ?=)) (viper-line (cons value ?=)))
;; gg acts as G0
((equal (car com) ?g) (viper-goto-line 0))
- (t (error "")))))
+ (t (error "Viper bell")))))
(if cmd-to-exec-at-end
(progn
(setq last-command-char char)
(setq last-command-event
(viper-copy-event
- (if viper-xemacs-p (character-to-event char) char)))
- (condition-case nil
+ (if (featurep 'xemacs) (character-to-event char) char)))
+ (condition-case err
(funcall cmd-to-exec-at-end cmd-info)
(error
- (error "")))))
+ (error "%s" (error-message-string err))))))
))
(defun viper-describe-arg (arg)
@@ -1902,7 +1902,7 @@ With prefix argument, find next destructive command."
(setq viper-intermediate-command
'repeating-display-destructive-command)
;; first search through command history--set temp ring
- (setq viper-temp-command-ring (copy-list viper-command-ring)))
+ (setq viper-temp-command-ring (ring-copy viper-command-ring)))
(setq cmd (if next
(viper-special-ring-rotate1 viper-temp-command-ring 1)
(viper-special-ring-rotate1 viper-temp-command-ring -1)))
@@ -1936,7 +1936,7 @@ to in the global map, instead of cycling through the insertion ring."
(length viper-last-inserted-string-from-insertion-ring))))
)
;;first search through insertion history
- (setq viper-temp-insertion-ring (copy-list viper-insertion-ring)))
+ (setq viper-temp-insertion-ring (ring-copy viper-insertion-ring)))
(setq this-command 'viper-insert-from-insertion-ring)
;; so that things will be undone properly
(setq buffer-undo-list (cons nil buffer-undo-list))
@@ -2738,9 +2738,9 @@ On reaching end of line, stop and signal error."
;; the forward motion before the 'viper-execute-com', but, of
;; course, 'dl' doesn't work on an empty line, so we have to
;; catch that condition before 'viper-execute-com'
- (if (and (eolp) (bolp)) (error "") (forward-char val))
+ (if (and (eolp) (bolp)) (error "Viper bell") (forward-char val))
(if com (viper-execute-com 'viper-forward-char val com))
- (if (eolp) (progn (backward-char 1) (error ""))))
+ (if (eolp) (progn (backward-char 1) (error "Viper bell"))))
(forward-char val)
(if com (viper-execute-com 'viper-forward-char val com)))))
@@ -2755,7 +2755,7 @@ On reaching beginning of line, stop and signal error."
(if com (viper-move-marker-locally 'viper-com-point (point)))
(if viper-ex-style-motion
(progn
- (if (bolp) (error "") (backward-char val))
+ (if (bolp) (error "Viper bell") (backward-char val))
(if com (viper-execute-com 'viper-backward-char val com)))
(backward-char val)
(if com (viper-execute-com 'viper-backward-char val com)))))
@@ -2790,7 +2790,8 @@ On reaching beginning of line, stop and signal error."
(defun viper-next-line-carefully (arg)
(condition-case nil
- (next-line arg)
+ ;; do not use forward-line! need to keep column
+ (with-no-warnings (next-line arg))
(error nil)))
@@ -3078,7 +3079,7 @@ On reaching beginning of line, stop and signal error."
(if com (viper-execute-com 'viper-goto-col val com))
(save-excursion
(end-of-line)
- (if (> val (current-column)) (error "")))
+ (if (> val (current-column)) (error "Viper bell")))
))
@@ -3089,12 +3090,16 @@ On reaching beginning of line, stop and signal error."
(let ((val (viper-p-val arg))
(com (viper-getCom arg)))
(if com (viper-move-marker-locally 'viper-com-point (point)))
- (next-line val)
+ ;; do not use forward-line! need to keep column
+ (with-no-warnings (next-line val))
(if viper-ex-style-motion
(if (and (eolp) (not (bolp))) (backward-char 1)))
(setq this-command 'next-line)
(if com (viper-execute-com 'viper-next-line val com))))
+(declare-function widget-type "../wid-edit" (widget))
+(declare-function widget-button-press "../wid-edit" (pos &optional event))
+(declare-function viper-set-hooks "viper" ())
(defun viper-next-line-at-bol (arg)
"Next line at beginning of line.
@@ -3132,7 +3137,8 @@ If point is on a widget or a button, simulate clicking on that widget/button."
(let ((val (viper-p-val arg))
(com (viper-getCom arg)))
(if com (viper-move-marker-locally 'viper-com-point (point)))
- (previous-line val)
+ ;; do not use forward-line! need to keep column
+ (with-no-warnings (previous-line val))
(if viper-ex-style-motion
(if (and (eolp) (not (bolp))) (backward-char 1)))
(setq this-command 'previous-line)
@@ -3198,7 +3204,7 @@ If point is on a widget or a button, simulate clicking on that widget/button."
;; If FORWARD then search is forward, otherwise backward. OFFSET is used to
;; adjust point after search.
(defun viper-find-char (arg char forward offset)
- (or (char-or-string-p char) (error ""))
+ (or (char-or-string-p char) (error "Viper bell"))
(let ((arg (if forward arg (- arg)))
(cmd (if (eq viper-intermediate-command 'viper-repeat)
(nth 5 viper-d-com)
@@ -3544,7 +3550,7 @@ controlled by the sign of prefix numeric value."
(if com (viper-move-marker-locally 'viper-com-point (point)))
(backward-sexp 1)
(if com (viper-execute-com 'viper-paren-match nil com)))
- (t (error ""))))))
+ (t (error "Viper bell"))))))
(defun viper-toggle-parse-sexp-ignore-comments ()
(interactive)
@@ -4107,7 +4113,7 @@ Null string will repeat previous search."
(let ((reg viper-use-register))
(setq viper-use-register nil)
(error viper-EmptyRegister reg))
- (error "")))
+ (error "Viper bell")))
(setq viper-use-register nil)
(if (viper-end-with-a-newline-p text)
(progn
@@ -4157,7 +4163,7 @@ Null string will repeat previous search."
(let ((reg viper-use-register))
(setq viper-use-register nil)
(error viper-EmptyRegister reg))
- (error "")))
+ (error "Viper bell")))
(setq viper-use-register nil)
(if (viper-end-with-a-newline-p text) (beginning-of-line))
(viper-set-destructive-command
@@ -4202,7 +4208,7 @@ Null string will repeat previous search."
(> val (viper-chars-in-region (point) (viper-line-pos 'end))))
(setq val (viper-chars-in-region (point) (viper-line-pos 'end))))
(if (and viper-ex-style-motion (eolp))
- (if (bolp) (error "") (setq val 0))) ; not bol---simply back 1 ch
+ (if (bolp) (error "Viper bell") (setq val 0))) ; not bol---simply back 1 ch
(save-excursion
(viper-forward-char-carefully val)
(setq end-del-pos (point)))
@@ -4467,7 +4473,7 @@ and regexp replace."
((viper= char ?,) (viper-cycle-through-mark-ring))
((viper= char ?^) (push-mark viper-saved-mark t t))
((viper= char ?D) (mark-defun))
- (t (error ""))
+ (t (error "Viper bell"))
)))
;; Algorithm: If first invocation of this command save mark on ring, goto
@@ -4566,7 +4572,7 @@ One can use `` and '' to temporarily jump 1 step back."
(switch-to-buffer buff)
(goto-char viper-com-point)
(viper-change-state-to-vi)
- (error "")))))
+ (error "Viper bell")))))
((and (not skip-white) (viper= char ?`))
(if com (viper-move-marker-locally 'viper-com-point (point)))
(if (and (viper-same-line (point) viper-last-jump)
diff --git a/lisp/emulation/viper-ex.el b/lisp/emulation/viper-ex.el
index fda882ae6a2..caeecd12c8a 100644
--- a/lisp/emulation/viper-ex.el
+++ b/lisp/emulation/viper-ex.el
@@ -651,17 +651,19 @@ reversed."
(setq initial-str (format "%d,%d" reg-beg-line reg-end-line)))
(setq com-str
- (or string (viper-read-string-with-history
- ":"
- initial-str
- 'viper-ex-history
- ;; no default when working on region
- (if initial-str
- nil
- (car viper-ex-history))
- map
- (if initial-str
- " [Type command to execute on current region]"))))
+ (if string
+ (concat initial-str string)
+ (viper-read-string-with-history
+ ":"
+ initial-str
+ 'viper-ex-history
+ ;; no default when working on region
+ (if initial-str
+ nil
+ (car viper-ex-history))
+ map
+ (if initial-str
+ " [Type command to execute on current region]"))))
(save-window-excursion
;; just a precaution
(setq viper-ex-work-buf (get-buffer-create viper-ex-work-buf-name))
@@ -1101,7 +1103,7 @@ reversed."
beg end cont val)
(viper-add-keymap ex-read-filename-map
- (if viper-emacs-p
+ (if (featurep 'emacs)
minibuffer-local-completion-map
read-file-name-map))
@@ -1236,7 +1238,7 @@ reversed."
(read-string "[Hit return to confirm] ")
(quit
(save-excursion (kill-buffer " *delete text*"))
- (error "")))
+ (error "Viper bell")))
(save-excursion (kill-buffer " *delete text*")))
(if ex-buffer
(cond ((viper-valid-register ex-buffer '(Letter))
@@ -1556,7 +1558,7 @@ reversed."
;; setup buffer
(if (setq wind (viper-get-visible-buffer-window buf))
()
- (setq wind (get-lru-window (if viper-xemacs-p nil 'visible)))
+ (setq wind (get-lru-window (if (featurep 'xemacs) nil 'visible)))
(set-window-buffer wind buf))
(if (viper-window-display-p)
@@ -1876,7 +1878,7 @@ reversed."
(condition-case nil
(progn
(pop-to-buffer (get-buffer-create "*info*"))
- (info (if viper-xemacs-p "viper.info" "viper"))
+ (info (if (featurep 'xemacs) "viper.info" "viper"))
(message "Type `i' to search for a specific topic"))
(error (beep 1)
(with-output-to-temp-buffer " *viper-info*"
@@ -1885,7 +1887,7 @@ The Info file for Viper does not seem to be installed.
This file is part of the standard distribution of %sEmacs.
Please contact your system administrator. "
- (if viper-xemacs-p "X" "")
+ (if (featurep 'xemacs) "X" "")
))))))
;; Ex source command. Loads the file specified as argument or `~/.viper'
diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el
index dc681772c18..1b1e07a0a0c 100644
--- a/lisp/emulation/viper-init.el
+++ b/lisp/emulation/viper-init.el
@@ -49,10 +49,6 @@
(interactive)
(message "Viper version is %s" viper-version))
-;; Is it XEmacs?
-(defconst viper-xemacs-p (string-match "XEmacs" emacs-version))
-;; Is it Emacs?
-(defconst viper-emacs-p (not viper-xemacs-p))
;; Tell whether we are running as a window application or on a TTY
;; This is used to avoid compilation warnings. When emacs/xemacs forms can
@@ -61,7 +57,7 @@
;; compiler at hand.
;; Suggested by rms.
(defmacro viper-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form)
- (if (string-match "XEmacs" emacs-version)
+ (if (featurep 'xemacs)
xemacs-form emacs-form))
@@ -97,6 +93,13 @@
:tag "Is it VMS?"
:group 'viper-misc)
+(defcustom viper-suppress-input-method-change-message nil
+ "If t, the message notifying about changes in the input method is not displayed.
+Normally, a message is displayed each time on enters the vi, insert or replace
+state."
+ :type 'boolean
+ :group 'viper-misc)
+
(defcustom viper-force-faces nil
"If t, Viper will think that it is running on a display that supports faces.
This is provided as a temporary relief for users of graphics-capable terminals
@@ -109,8 +112,8 @@ In all likelihood, you don't need to bother with this setting."
(cond ((viper-window-display-p))
(viper-force-faces)
((viper-color-display-p))
- (viper-emacs-p (memq (viper-device-type) '(pc)))
- (viper-xemacs-p (memq (viper-device-type) '(tty pc)))))
+ ((featurep 'emacs) (memq (viper-device-type) '(pc)))
+ ((featurep 'xemacs) (memq (viper-device-type) '(tty pc)))))
;;; Macros
@@ -326,7 +329,8 @@ Use `M-x viper-set-expert-level' to change this.")
;; turn off special input methods in vi-state
(if (eq viper-current-state 'vi-state)
(viper-set-input-method nil))
- (if (memq viper-current-state '(vi-state insert-state replace-state))
+ (if (and (memq viper-current-state '(vi-state insert-state replace-state))
+ (not viper-suppress-input-method-change-message))
(message "Viper special input method%s: on"
(if (or current-input-method default-input-method)
(format " %S"
@@ -339,7 +343,8 @@ Use `M-x viper-set-expert-level' to change this.")
(if (null viper-mule-hook-flag)
()
(setq viper-special-input-method nil)
- (if (memq viper-current-state '(vi-state insert-state replace-state))
+ (if (and (memq viper-current-state '(vi-state insert-state replace-state))
+ (not viper-suppress-input-method-change-message))
(message "Viper special input method%s: off"
(if (or current-input-method default-input-method)
(format " %S"
@@ -347,9 +352,9 @@ Use `M-x viper-set-expert-level' to change this.")
"")))))
(defun viper-inactivate-input-method ()
- (cond ((and viper-emacs-p (fboundp 'inactivate-input-method))
+ (cond ((and (featurep 'emacs) (fboundp 'inactivate-input-method))
(inactivate-input-method))
- ((and viper-xemacs-p (boundp 'current-input-method))
+ ((and (featurep 'xemacs) (boundp 'current-input-method))
;; XEmacs had broken quil-mode for some time, so we are working around
;; it here
(setq quail-mode nil)
@@ -361,7 +366,7 @@ Use `M-x viper-set-expert-level' to change this.")
(force-mode-line-update))
))
(defun viper-activate-input-method ()
- (cond ((and viper-emacs-p (fboundp 'activate-input-method))
+ (cond ((and (featurep 'emacs) (fboundp 'activate-input-method))
(activate-input-method default-input-method))
((featurep 'xemacs)
(if (fboundp 'quail-mode) (quail-mode 1)))))
@@ -369,7 +374,7 @@ Use `M-x viper-set-expert-level' to change this.")
;; Set quail-mode to ARG
(defun viper-set-input-method (arg)
(setq viper-mule-hook-flag t) ; just a precaution
- (let (viper-mule-hook-flag) ; temporarily inactivate viper mule hooks
+ (let (viper-mule-hook-flag) ; temporarily deactivate viper mule hooks
(cond ((and arg (> (prefix-numeric-value arg) 0) default-input-method)
;; activate input method
(viper-activate-input-method))
@@ -466,7 +471,7 @@ is non-nil."
:group 'viper)
(defcustom viper-use-replace-region-delimiters
(or (not (viper-has-face-support-p))
- (and viper-xemacs-p (eq (viper-device-type) 'tty)))
+ (and (featurep 'xemacs) (eq (viper-device-type) 'tty)))
"*If non-nil, Viper will always use `viper-replace-region-end-delimiter' and
`viper-replace-region-start-delimiter' to delimit replacement regions, even on
color displays. By default, the delimiters are used only on TTYs."
@@ -1009,13 +1014,13 @@ Should be set in `~/.viper' file."
(defun viper-restore-cursor-type ()
(condition-case nil
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(set (make-local-variable 'bar-cursor) nil)
(setq cursor-type default-cursor-type))
(error nil)))
(defun viper-set-insert-cursor-type ()
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(set (make-local-variable 'bar-cursor) 2)
(setq cursor-type '(bar . 2))))
diff --git a/lisp/emulation/viper-keym.el b/lisp/emulation/viper-keym.el
index 086605df79a..ade63b1071c 100644
--- a/lisp/emulation/viper-keym.el
+++ b/lisp/emulation/viper-keym.el
@@ -48,6 +48,9 @@
(require 'viper-util)
+(declare-function viper-ex "viper-ex" (arg &optional string))
+(declare-function viper-normalize-minor-mode-map-alist "viper-cmd" ())
+(declare-function viper-set-mode-vars-for "viper-cmd" (state))
;;; Variables
@@ -170,7 +173,7 @@ Enter as a sexp. Examples: \"\\C-z\", [(control ?z)]."
(let ((old-value (if (boundp 'viper-toggle-key)
viper-toggle-key
[(control ?z)])))
- (mapcar
+ (mapc
(lambda (buf)
(save-excursion
(set-buffer buf)
@@ -210,7 +213,7 @@ If running in a terminal, [(escape)] is not understood, so must use \"\\e\"."
(let ((old-value (if (boundp 'viper-ESC-key)
viper-ESC-key
[(escape)])))
- (mapcar
+ (mapc
(lambda (buf)
(save-excursion
(set-buffer buf)
@@ -339,8 +342,8 @@ If running in a terminal, [(escape)] is not understood, so must use \"\\e\"."
(define-key viper-vi-basic-map "\C-m" 'viper-next-line-at-bol)
(define-key viper-vi-basic-map "\C-u" 'viper-scroll-down)
(define-key viper-vi-basic-map "\C-y" 'viper-scroll-down-one)
-(define-key viper-vi-basic-map "\C-s" 'viper-isearch-forward)
-(define-key viper-vi-basic-map "\C-r" 'viper-isearch-backward)
+;;(define-key viper-vi-basic-map "\C-s" 'viper-isearch-forward)
+;;(define-key viper-vi-basic-map "\C-r" 'viper-isearch-backward)
(define-key viper-vi-basic-map "\C-c/" 'viper-toggle-search-style)
(define-key viper-vi-basic-map "\C-c\C-g" 'viper-info-on-file)
diff --git a/lisp/emulation/viper-macs.el b/lisp/emulation/viper-macs.el
index ff046601a1b..788feaf86e6 100644
--- a/lisp/emulation/viper-macs.el
+++ b/lisp/emulation/viper-macs.el
@@ -466,7 +466,7 @@ If SCOPE is nil, the user is asked to specify the scope."
(viper-array-to-string macro-name)))
(setq lis2 (cons (car lis) lis2))
(setq lis (cdr lis)))
-
+
(setq lis2 (reverse lis2))
(set macro-alist-var (append lis2 (cons new-elt lis)))
(setq old-elt new-elt)))
@@ -658,9 +658,9 @@ name from there."
(interactive)
(with-output-to-temp-buffer " *viper-info*"
(princ "Macros in Vi state:\n===================\n")
- (mapcar 'viper-describe-one-macro viper-vi-kbd-macro-alist)
+ (mapc 'viper-describe-one-macro viper-vi-kbd-macro-alist)
(princ "\n\nMacros in Insert and Replace states:\n====================================\n")
- (mapcar 'viper-describe-one-macro viper-insert-kbd-macro-alist)
+ (mapc 'viper-describe-one-macro viper-insert-kbd-macro-alist)
(princ "\n\nMacros in Emacs state:\n======================\n")
(mapcar 'viper-describe-one-macro viper-emacs-kbd-macro-alist)
))
@@ -670,11 +670,11 @@ name from there."
(viper-display-macro (car macro))))
(princ " ** Buffer-specific:")
(if (viper-kbd-buf-alist macro)
- (mapcar 'viper-describe-one-macro-elt (viper-kbd-buf-alist macro))
+ (mapc 'viper-describe-one-macro-elt (viper-kbd-buf-alist macro))
(princ " none\n"))
(princ "\n ** Mode-specific:")
(if (viper-kbd-mode-alist macro)
- (mapcar 'viper-describe-one-macro-elt (viper-kbd-mode-alist macro))
+ (mapc 'viper-describe-one-macro-elt (viper-kbd-mode-alist macro))
(princ " none\n"))
(princ "\n ** Global:")
(if (viper-kbd-global-definition macro)
@@ -826,7 +826,7 @@ name from there."
(defun viper-char-array-to-macro (array)
(let ((vec (vconcat array))
macro)
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(setq macro (mapcar 'character-to-event vec))
(setq macro vec))
(vconcat (mapcar 'viper-event-key macro))))
diff --git a/lisp/emulation/viper-mous.el b/lisp/emulation/viper-mous.el
index e95e80aa4e0..7a47d321890 100644
--- a/lisp/emulation/viper-mous.el
+++ b/lisp/emulation/viper-mous.el
@@ -79,7 +79,7 @@ or a tripple-click."
;; time interval in millisecond within which successive clicks are
;; considered related
(defcustom viper-multiclick-timeout (if (viper-window-display-p)
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
mouse-track-multi-click-time
double-click-time)
500)
@@ -227,7 +227,7 @@ is ignored."
) ; if
;; XEmacs doesn't have set-text-properties, but there buffer-substring
;; doesn't return properties together with the string, so it's not needed.
- (if viper-emacs-p
+ (if (featurep 'emacs)
(set-text-properties 0 (length result) nil result))
result
))
@@ -273,7 +273,7 @@ See `viper-surrounding-word' for the definition of a word in this case."
'viper-mouse-catch-frame-switch))
(not (eq (key-binding viper-mouse-up-insert-key-parsed)
'viper-mouse-click-insert-word))
- (and viper-xemacs-p (not (event-over-text-area-p click)))))
+ (and (featurep 'xemacs) (not (event-over-text-area-p click)))))
() ; do nothing, if binding isn't right or not over text
;; turn arg into a number
(cond ((integerp arg) nil)
@@ -364,7 +364,7 @@ this command."
'viper-mouse-catch-frame-switch))
(not (eq (key-binding viper-mouse-up-search-key-parsed)
'viper-mouse-click-search-word))
- (and viper-xemacs-p (not (event-over-text-area-p click)))))
+ (and (featurep 'xemacs) (not (event-over-text-area-p click)))))
() ; do nothing, if binding isn't right or not over text
(let ((previous-search-string viper-s-string)
click-word click-count)
@@ -507,19 +507,19 @@ bindings in the Viper manual."
()
(setq button-spec
(cond ((memq 1 key)
- (if viper-emacs-p
+ (if (featurep 'emacs)
(if (eq 'up event-type)
"mouse-1" "down-mouse-1")
(if (eq 'up event-type)
'button1up 'button1)))
((memq 2 key)
- (if viper-emacs-p
+ (if (featurep 'emacs)
(if (eq 'up event-type)
"mouse-2" "down-mouse-2")
(if (eq 'up event-type)
'button2up 'button2)))
((memq 3 key)
- (if viper-emacs-p
+ (if (featurep 'emacs)
(if (eq 'up event-type)
"mouse-3" "down-mouse-3")
(if (eq 'up event-type)
@@ -528,18 +528,18 @@ bindings in the Viper manual."
"%S: invalid button number, %S" key-var key)))
meta-spec
(if (memq 'meta key)
- (if viper-emacs-p "M-" 'meta)
- (if viper-emacs-p "" nil))
+ (if (featurep 'emacs) "M-" 'meta)
+ (if (featurep 'emacs) "" nil))
shift-spec
(if (memq 'shift key)
- (if viper-emacs-p "S-" 'shift)
- (if viper-emacs-p "" nil))
+ (if (featurep 'emacs) "S-" 'shift)
+ (if (featurep 'emacs) "" nil))
control-spec
(if (memq 'control key)
- (if viper-emacs-p "C-" 'control)
- (if viper-emacs-p "" nil)))
+ (if (featurep 'emacs) "C-" 'control)
+ (if (featurep 'emacs) "" nil)))
- (setq key-spec (if viper-emacs-p
+ (setq key-spec (if (featurep 'emacs)
(vector
(intern
(concat
diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el
index 82e9025e75b..6a21fa17e31 100644
--- a/lisp/emulation/viper-util.el
+++ b/lisp/emulation/viper-util.el
@@ -64,48 +64,34 @@
(fset 'x-color-defined-p (symbol-function 'ns-color-defined-p)))
-;;; XEmacs support
-
-
-(viper-cond-compile-for-xemacs-or-emacs
- (progn ; xemacs
- (fset 'viper-overlay-p (symbol-function 'extentp))
- (fset 'viper-make-overlay (symbol-function 'make-extent))
- (fset 'viper-overlay-live-p (symbol-function 'extent-live-p))
- (fset 'viper-move-overlay (symbol-function 'set-extent-endpoints))
- (fset 'viper-overlay-start (symbol-function 'extent-start-position))
- (fset 'viper-overlay-end (symbol-function 'extent-end-position))
- (fset 'viper-overlay-get (symbol-function 'extent-property))
- (fset 'viper-overlay-put (symbol-function 'set-extent-property))
- (fset 'viper-read-event (symbol-function 'next-command-event))
- (fset 'viper-characterp (symbol-function 'characterp))
- (fset 'viper-int-to-char (symbol-function 'int-to-char))
- (if (viper-window-display-p)
- (fset 'viper-iconify (symbol-function 'iconify-frame)))
- (cond ((viper-has-face-support-p)
- (fset 'viper-get-face (symbol-function 'get-face))
- (fset 'viper-color-defined-p (symbol-function 'valid-color-name-p))
- )))
- (progn ; emacs
- (fset 'viper-overlay-p (symbol-function 'overlayp))
- (fset 'viper-make-overlay (symbol-function 'make-overlay))
- (fset 'viper-overlay-live-p (symbol-function 'overlayp))
- (fset 'viper-move-overlay (symbol-function 'move-overlay))
- (fset 'viper-overlay-start (symbol-function 'overlay-start))
- (fset 'viper-overlay-end (symbol-function 'overlay-end))
- (fset 'viper-overlay-get (symbol-function 'overlay-get))
- (fset 'viper-overlay-put (symbol-function 'overlay-put))
- (fset 'viper-read-event (symbol-function 'read-event))
- (fset 'viper-characterp (symbol-function 'integerp))
- (fset 'viper-int-to-char (symbol-function 'identity))
- (if (viper-window-display-p)
- (fset 'viper-iconify (symbol-function 'iconify-or-deiconify-frame)))
- (cond ((viper-has-face-support-p)
- (fset 'viper-get-face (symbol-function 'internal-get-face))
- (fset 'viper-color-defined-p (symbol-function 'x-color-defined-p))
- )))
- )
-
+(defalias 'viper-overlay-p
+ (if (featurep 'xemacs) 'extentp 'overlayp))
+(defalias 'viper-make-overlay
+ (if (featurep 'xemacs) 'make-extent 'make-overlay))
+(defalias 'viper-overlay-live-p
+ (if (featurep 'xemacs) 'extent-live-p 'overlayp))
+(defalias 'viper-move-overlay
+ (if (featurep 'xemacs) 'set-extent-endpoints 'move-overlay))
+(defalias 'viper-overlay-start
+ (if (featurep 'xemacs) 'extent-start-position 'overlay-start))
+(defalias 'viper-overlay-end
+ (if (featurep 'xemacs) 'extent-end-position 'overlay-end))
+(defalias 'viper-overlay-get
+ (if (featurep 'xemacs) 'extent-property 'overlay-get))
+(defalias 'viper-overlay-put
+ (if (featurep 'xemacs) 'set-extent-property 'overlay-put))
+(defalias 'viper-read-event
+ (if (featurep 'xemacs) 'next-command-event 'read-event))
+(defalias 'viper-characterp
+ (if (featurep 'xemacs) 'characterp 'integerp))
+(defalias 'viper-int-to-char
+ (if (featurep 'xemacs) 'int-to-char 'identity))
+(defalias 'viper-get-face
+ (if (featurep 'xemacs) 'get-face 'internal-get-face))
+(defalias 'viper-color-defined-p
+ (if (featurep 'xemacs) 'valid-color-name-p 'x-color-defined-p))
+(defalias 'viper-iconify
+ (if (featurep 'xemacs) 'iconify-frame 'iconify-or-deiconify-frame))
;; CHAR is supposed to be a char or an integer (positive or negative)
@@ -168,7 +154,7 @@
(defun viper-set-cursor-color-according-to-state (&optional frame)
(cond ((eq viper-current-state 'replace-state)
- (viper-change-cursor-color viper-replace-state-cursor-color frame))
+ (viper-change-cursor-color viper-replace-overlay-cursor-color frame))
((and (eq viper-current-state 'emacs-state)
viper-emacs-state-cursor-color)
(viper-change-cursor-color viper-emacs-state-cursor-color frame))
@@ -201,7 +187,7 @@
(defsubst viper-get-saved-cursor-color-in-replace-mode ()
(or
(funcall
- (if viper-emacs-p 'frame-parameter 'frame-property)
+ (if (featurep 'emacs) 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-replace-mode)
(if (and (eq viper-current-state 'emacs-mode) viper-emacs-state-cursor-color)
@@ -211,7 +197,7 @@
(defsubst viper-get-saved-cursor-color-in-insert-mode ()
(or
(funcall
- (if viper-emacs-p 'frame-parameter 'frame-property)
+ (if (featurep 'emacs) 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-insert-mode)
(if (and (eq viper-current-state 'emacs-mode) viper-emacs-state-cursor-color)
@@ -221,7 +207,7 @@
(defsubst viper-get-saved-cursor-color-in-emacs-mode ()
(or
(funcall
- (if viper-emacs-p 'frame-parameter 'frame-property)
+ (if (featurep 'emacs) 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-emacs-mode)
viper-vi-state-cursor-color))
@@ -249,8 +235,8 @@
;; testing for sufficiently high Emacs versions.
(defun viper-check-version (op major minor &optional type-of-emacs)
(if (and (boundp 'emacs-major-version) (boundp 'emacs-minor-version))
- (and (cond ((eq type-of-emacs 'xemacs) viper-xemacs-p)
- ((eq type-of-emacs 'emacs) viper-emacs-p)
+ (and (cond ((eq type-of-emacs 'xemacs) (featurep 'xemacs))
+ ((eq type-of-emacs 'emacs) (featurep 'emacs))
(t t))
(cond ((eq op '=) (and (= emacs-minor-version minor)
(= emacs-major-version major)))
@@ -267,7 +253,7 @@
(defun viper-get-visible-buffer-window (wind)
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(get-buffer-window wind t)
(get-buffer-window wind 'visible)))
@@ -394,6 +380,8 @@
+(declare-function viper-forward-Word "viper-cmd" (arg))
+
;;; Support for :e, :r, :w file globbing
;; Glob the file spec.
@@ -724,13 +712,14 @@
(defsubst viper-file-checked-in-p (file)
(and (featurep 'vc-hooks)
;; CVS files are considered not checked in
+ ;; FIXME: Should this deal with more than CVS?
(not (memq (vc-backend file) '(nil CVS)))
(if (fboundp 'vc-state)
(and
(not (memq (vc-state file) '(edited needs-merge)))
(not (stringp (vc-state file))))
;; XEmacs has no vc-state
- (not (vc-locking-user file)))
+ (if (featurep 'xemacs)(not (vc-locking-user file))))
))
;; checkout if visited file is checked in
@@ -787,7 +776,7 @@
(setq viper-replace-overlay (viper-make-overlay beg end (current-buffer)))
;; never detach
(viper-overlay-put
- viper-replace-overlay (if viper-emacs-p 'evaporate 'detachable) nil)
+ viper-replace-overlay (if (featurep 'emacs) 'evaporate 'detachable) nil)
(viper-overlay-put
viper-replace-overlay 'priority viper-replace-overlay-priority)
;; If Emacs will start supporting overlay maps, as it currently supports
@@ -795,7 +784,7 @@
;; just have keymap attached to replace overlay.
;;(viper-overlay-put
;; viper-replace-overlay
- ;; (if viper-xemacs-p 'keymap 'local-map)
+ ;; (if (featurep 'xemacs) 'keymap 'local-map)
;; viper-replace-map)
)
(if (viper-has-face-support-p)
@@ -811,8 +800,8 @@
(viper-set-replace-overlay (point-min) (point-min)))
(if (or (not (viper-has-face-support-p))
viper-use-replace-region-delimiters)
- (let ((before-name (if viper-xemacs-p 'begin-glyph 'before-string))
- (after-name (if viper-xemacs-p 'end-glyph 'after-string)))
+ (let ((before-name (if (featurep 'xemacs) 'begin-glyph 'before-string))
+ (after-name (if (featurep 'xemacs) 'end-glyph 'after-string)))
(viper-overlay-put viper-replace-overlay before-name before-glyph)
(viper-overlay-put viper-replace-overlay after-name after-glyph))))
@@ -843,11 +832,11 @@
;; never detach
(viper-overlay-put
viper-minibuffer-overlay
- (if viper-emacs-p 'evaporate 'detachable)
+ (if (featurep 'emacs) 'evaporate 'detachable)
nil)
;; make viper-minibuffer-overlay open-ended
;; In emacs, it is made open ended at creation time
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(progn
(viper-overlay-put viper-minibuffer-overlay 'start-open nil)
(viper-overlay-put viper-minibuffer-overlay 'end-open nil)))
@@ -860,7 +849,7 @@
(if (fboundp 'minibuffer-prompt-end) (minibuffer-prompt-end) 1)
(1+ (buffer-size)))
(setq viper-minibuffer-overlay
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(viper-make-overlay 1 (1+ (buffer-size)) (current-buffer))
;; make overlay open-ended
(viper-make-overlay
@@ -889,9 +878,7 @@
;; Sit for VAL milliseconds. XEmacs doesn't support the millisecond arg
;; in sit-for, so this function smoothes out the differences.
(defsubst viper-sit-for-short (val &optional nodisp)
- (if viper-xemacs-p
- (sit-for (/ val 1000.0) nodisp)
- (sit-for 0 val nodisp)))
+ (sit-for (/ val 1000.0) nodisp))
;; EVENT may be a single event of a sequence of events
(defsubst viper-ESC-event-p (event)
@@ -985,7 +972,7 @@
(defun viper-read-key-sequence (prompt &optional continue-echo)
(let (inhibit-quit event keyseq)
(setq keyseq (read-key-sequence prompt continue-echo))
- (setq event (if viper-xemacs-p
+ (setq event (if (featurep 'xemacs)
(elt keyseq 0) ; XEmacs returns vector of events
(elt (listify-key-sequence keyseq) 0)))
(if (viper-ESC-event-p event)
@@ -1080,7 +1067,7 @@
(defun viper-key-to-emacs-key (key)
(let (key-name char-p modifiers mod-char-list base-key base-key-name)
- (cond (viper-xemacs-p key)
+ (cond ((featurep 'xemacs) key)
((symbolp key)
(setq key-name (symbol-name key))
@@ -1088,10 +1075,10 @@
(string-to-char key-name))
;; Emacs doesn't recognize `return' and `escape' as events on
;; dumb terminals, so we translate them into characters
- ((and viper-emacs-p (not (viper-window-display-p))
+ ((and (featurep 'emacs) (not (viper-window-display-p))
(string= key-name "return"))
?\C-m)
- ((and viper-emacs-p (not (viper-window-display-p))
+ ((and (featurep 'emacs) (not (viper-window-display-p))
(string= key-name "escape"))
?\e)
;; pass symbol-event as is
@@ -1125,14 +1112,15 @@
;; LIS is assumed to be a list of events of characters
(defun viper-eventify-list-xemacs (lis)
- (mapcar
- (lambda (elt)
- (cond ((viper-characterp elt) (character-to-event elt))
- ((eventp elt) elt)
- (t (error
- "viper-eventify-list-xemacs: can't convert to event, %S"
- elt))))
- lis))
+ (if (featurep 'xemacs)
+ (mapcar
+ (lambda (elt)
+ (cond ((viper-characterp elt) (character-to-event elt))
+ ((eventp elt) elt)
+ (t (error
+ "viper-eventify-list-xemacs: can't convert to event, %S"
+ elt))))
+ lis)))
;; Smoothes out the difference between Emacs' unread-command-events
@@ -1144,7 +1132,7 @@
;; into an event. Below, we delete nil from event lists, since nil is the most
;; common symbol that might appear in this wrong context.
(defun viper-set-unread-command-events (arg)
- (if viper-emacs-p
+ (if (featurep 'emacs)
(setq
unread-command-events
(let ((new-events
@@ -1262,9 +1250,9 @@ Arguments become related buffers. This function should normally be used in
the `Local variables' section of a file."
(setq viper-related-files-and-buffers-ring
(make-ring (1+ (length other-files-or-buffers))))
- (mapcar '(lambda (elt)
- (viper-ring-insert viper-related-files-and-buffers-ring elt))
- other-files-or-buffers)
+ (mapc '(lambda (elt)
+ (viper-ring-insert viper-related-files-and-buffers-ring elt))
+ other-files-or-buffers)
(viper-ring-insert viper-related-files-and-buffers-ring (buffer-name))
)
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index d03e85d298c..65d40e8bad7 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -9,7 +9,7 @@
;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; Keywords: emulations
-(defconst viper-version "3.13.1 of October 23, 2006"
+(defconst viper-version "3.14 of August 18, 2007"
"The current version of Viper")
;; This file is part of GNU Emacs.
@@ -298,7 +298,6 @@
;;; Code:
(require 'advice)
-(require 'cl)
(require 'ring)
;; compiler pacifier
@@ -457,6 +456,7 @@ unless it is coming up in a wrong Viper state."
(defcustom viper-insert-state-mode-list
'(internal-ange-ftp-mode
comint-mode
+ gud-mode
inferior-emacs-lisp-mode
erc-mode
eshell-mode
@@ -481,6 +481,7 @@ unless it is coming up in a wrong Viper state."
'((help-mode emacs-state viper-slash-and-colon-map)
(comint-mode insert-state viper-comint-mode-modifier-map)
(comint-mode vi-state viper-comint-mode-modifier-map)
+ (gud-mode insert-state viper-comint-mode-modifier-map)
(shell-mode insert-state viper-comint-mode-modifier-map)
(inferior-emacs-lisp-mode insert-state viper-comint-mode-modifier-map)
(shell-mode vi-state viper-comint-mode-modifier-map)
@@ -645,6 +646,11 @@ This startup message appears whenever you load Viper, unless you type `y' now."
(remove-hook symbol 'viper-change-state-to-emacs)
(remove-hook symbol 'viper-change-state-to-insert)
(remove-hook symbol 'viper-change-state-to-vi)
+ (remove-hook symbol 'viper-minibuffer-post-command-hook)
+ (remove-hook symbol 'viper-minibuffer-setup-sentinel)
+ (remove-hook symbol 'viper-major-mode-change-sentinel)
+ (remove-hook symbol 'set-viper-state-in-major-mode)
+ (remove-hook symbol 'viper-post-command-sentinel)
)))
;; Remove local value in all existing buffers
@@ -681,7 +687,10 @@ It also can't undo some Viper settings."
global-mode-string
(delq 'viper-mode-string global-mode-string))
- (if viper-emacs-p
+ (setq default-major-mode
+ (viper-standard-value 'default-major-mode viper-saved-non-viper-variables))
+
+ (if (featurep 'emacs)
(setq-default
mark-even-if-inactive
(viper-standard-value
@@ -692,7 +701,7 @@ It also can't undo some Viper settings."
(and (fboundp 'add-to-ordered-list) (boundp 'emulation-mode-map-alists))
(viper-delocalize-var 'minor-mode-map-alist))
(viper-delocalize-var 'require-final-newline)
- (if viper-xemacs-p (viper-delocalize-var 'bar-cursor))
+ (if (featurep 'xemacs) (viper-delocalize-var 'bar-cursor))
;; deactivate all advices done by Viper.
@@ -771,9 +780,7 @@ It also can't undo some Viper settings."
(mapatoms 'viper-remove-hooks)
(remove-hook 'comint-mode-hook 'viper-comint-mode-hook)
(remove-hook 'erc-mode-hook 'viper-comint-mode-hook)
- (remove-hook 'minibuffer-setup-hook 'viper-minibuffer-setup-sentinel)
(remove-hook 'change-major-mode-hook 'viper-major-mode-change-sentinel)
- (remove-hook 'post-command-hook 'viper-minibuffer-post-command-hook)
;; unbind Viper mouse bindings
(viper-unbind-mouse-search-key)
@@ -781,7 +788,7 @@ It also can't undo some Viper settings."
;; In emacs, we have to advice handle-switch-frame
;; This advice is undone earlier, when all advices matchine "viper-" are
;; deactivated.
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(remove-hook 'mouse-leave-frame-hook 'viper-remember-current-frame))
) ; end viper-go-away
@@ -792,7 +799,7 @@ It also can't undo some Viper settings."
;; set appropriate Viper state in buffers that changed major mode
(defun set-viper-state-in-major-mode ()
- (mapcar
+ (mapc
(lambda (buf)
(if (viper-buffer-live-p buf)
(with-current-buffer buf
@@ -974,7 +981,7 @@ It also can't undo some Viper settings."
)))
;; International input methods
- (if viper-emacs-p
+ (if (featurep 'emacs)
(eval-after-load "mule-cmds"
'(progn
(defadvice inactivate-input-method (after viper-mule-advice activate)
@@ -1015,7 +1022,7 @@ It also can't undo some Viper settings."
require-final-newline t)
;; don't bark when mark is inactive
- (if viper-emacs-p
+ (if (featurep 'emacs)
(setq mark-even-if-inactive t))
(setq scroll-step 1)
@@ -1025,59 +1032,74 @@ It also can't undo some Viper settings."
(setq global-mode-string
(append '("" viper-mode-string) (cdr global-mode-string))))
- (defadvice describe-key (before viper-describe-key-ad protect activate)
- "Force to read key via `viper-read-key-sequence'."
- (interactive (let (key)
- (setq key (viper-read-key-sequence
- "Describe key (or click or menu item): "))
- (list key
- (prefix-numeric-value current-prefix-arg)
- ;; If KEY is a down-event, read also the
- ;; corresponding up-event.
- (and (vectorp key)
- (let ((last-idx (1- (length key))))
- (and (eventp (aref key last-idx))
- (memq 'down (event-modifiers
- (aref key last-idx)))))
- (or (and (eventp (aref key 0))
- (memq 'down (event-modifiers
- (aref key 0)))
- ;; For the C-down-mouse-2 popup
- ;; menu, there is no subsequent up-event.
- (= (length key) 1))
- (and (> (length key) 1)
- (eventp (aref key 1))
- (memq 'down (event-modifiers (aref key 1)))))
- (read-event))))))
-
- (defadvice describe-key-briefly
- (before viper-describe-key-briefly-ad protect activate)
- "Force to read key via `viper-read-key-sequence'."
- (interactive (let (key)
- (setq key (viper-read-key-sequence
- "Describe key (or click or menu item): "))
- ;; If KEY is a down-event, read and discard the
- ;; corresponding up-event.
- (and (vectorp key)
- (let ((last-idx (1- (length key))))
- (and (eventp (aref key last-idx))
- (memq 'down (event-modifiers (aref key last-idx)))))
- (read-event))
- (list key
- (if current-prefix-arg
- (prefix-numeric-value current-prefix-arg))
- 1))))
+ (viper-cond-compile-for-xemacs-or-emacs
+ ;; XEmacs
+ (defadvice describe-key (before viper-describe-key-ad protect activate)
+ "Force to read key via `viper-read-key-sequence'."
+ (interactive (list (viper-read-key-sequence "Describe key: "))))
+ ;; Emacs
+ (defadvice describe-key (before viper-describe-key-ad protect activate)
+ "Force to read key via `viper-read-key-sequence'."
+ (interactive (let (key)
+ (setq key (viper-read-key-sequence
+ "Describe key (or click or menu item): "))
+ (list key
+ (prefix-numeric-value current-prefix-arg)
+ ;; If KEY is a down-event, read also the
+ ;; corresponding up-event.
+ (and (vectorp key)
+ (let ((last-idx (1- (length key))))
+ (and (eventp (aref key last-idx))
+ (memq 'down (event-modifiers
+ (aref key last-idx)))))
+ (or (and (eventp (aref key 0))
+ (memq 'down (event-modifiers
+ (aref key 0)))
+ ;; For the C-down-mouse-2 popup menu,
+ ;; there is no subsequent up-event
+ (= (length key) 1))
+ (and (> (length key) 1)
+ (eventp (aref key 1))
+ (memq 'down (event-modifiers (aref key 1)))))
+ (read-event))))))
+ ) ; viper-cond-compile-for-xemacs-or-emacs
+
+ (viper-cond-compile-for-xemacs-or-emacs
+ ;; XEmacs
+ (defadvice describe-key-briefly
+ (before viper-describe-key-briefly-ad protect activate)
+ "Force to read key via `viper-read-key-sequence'."
+ (interactive (list (viper-read-key-sequence "Describe key briefly: "))))
+ ;; Emacs
+ (defadvice describe-key-briefly
+ (before viper-describe-key-briefly-ad protect activate)
+ "Force to read key via `viper-read-key-sequence'."
+ (interactive (let (key)
+ (setq key (viper-read-key-sequence
+ "Describe key (or click or menu item): "))
+ ;; If KEY is a down-event, read and discard the
+ ;; corresponding up-event.
+ (and (vectorp key)
+ (let ((last-idx (1- (length key))))
+ (and (eventp (aref key last-idx))
+ (memq 'down (event-modifiers (aref key last-idx)))))
+ (read-event))
+ (list key
+ (if current-prefix-arg
+ (prefix-numeric-value current-prefix-arg))
+ 1))))
+ ) ;; viper-cond-compile-for-xemacs-or-emacs
(defadvice find-file (before viper-add-suffix-advice activate)
"Use `read-file-name' for reading arguments."
(interactive (cons (read-file-name "Find file: " nil default-directory)
;; XEmacs: if Mule & prefix arg, ask for coding system
- (cond ((and viper-xemacs-p (featurep 'mule))
+ (cond ((and (featurep 'xemacs) (featurep 'mule))
(list
(and current-prefix-arg
(read-coding-system "Coding-system: "))))
;; Emacs: do wildcards
- ((and viper-emacs-p (boundp 'find-file-wildcards))
+ ((and (featurep 'emacs) (boundp 'find-file-wildcards))
(list find-file-wildcards))))
))
@@ -1086,12 +1108,12 @@ It also can't undo some Viper settings."
(interactive (cons (read-file-name "Find file in other window: "
nil default-directory)
;; XEmacs: if Mule & prefix arg, ask for coding system
- (cond ((and viper-xemacs-p (featurep 'mule))
+ (cond ((and (featurep 'xemacs) (featurep 'mule))
(list
(and current-prefix-arg
(read-coding-system "Coding-system: "))))
;; Emacs: do wildcards
- ((and viper-emacs-p (boundp 'find-file-wildcards))
+ ((and (featurep 'emacs) (boundp 'find-file-wildcards))
(list find-file-wildcards))))
))
@@ -1101,12 +1123,12 @@ It also can't undo some Viper settings."
(interactive (cons (read-file-name "Find file in other frame: "
nil default-directory)
;; XEmacs: if Mule & prefix arg, ask for coding system
- (cond ((and viper-xemacs-p (featurep 'mule))
+ (cond ((and (featurep 'xemacs) (featurep 'mule))
(list
(and current-prefix-arg
(read-coding-system "Coding-system: "))))
;; Emacs: do wildcards
- ((and viper-emacs-p (boundp 'find-file-wildcards))
+ ((and (featurep 'emacs) (boundp 'find-file-wildcards))
(list find-file-wildcards))))
))
@@ -1137,7 +1159,7 @@ It also can't undo some Viper settings."
;; catch frame switching event
(if (viper-window-display-p)
- (if viper-xemacs-p
+ (if (featurep 'xemacs)
(add-hook 'mouse-leave-frame-hook
'viper-remember-current-frame)
(defadvice handle-switch-frame (before viper-frame-advice activate)
@@ -1198,13 +1220,14 @@ These two lines must come in the order given.
(if (null viper-saved-non-viper-variables)
(setq viper-saved-non-viper-variables
(list
+ (cons 'default-major-mode (list default-major-mode))
(cons 'next-line-add-newlines (list next-line-add-newlines))
(cons 'require-final-newline (list require-final-newline))
(cons 'scroll-step (list scroll-step))
(cons 'mode-line-buffer-identification
(list (default-value 'mode-line-buffer-identification)))
(cons 'global-mode-string (list global-mode-string))
- (if viper-emacs-p
+ (if (featurep 'emacs)
(cons 'mark-even-if-inactive (list mark-even-if-inactive)))
)))
diff --git a/lisp/env.el b/lisp/env.el
index d04df5e48b6..90d576dc71d 100644
--- a/lisp/env.el
+++ b/lisp/env.el
@@ -36,6 +36,8 @@
;;; Code:
+(eval-when-compile (require 'cl))
+
;; History list for environment variable names.
(defvar read-envvar-name-history nil)
@@ -45,14 +47,15 @@ Optional second arg MUSTMATCH, if non-nil, means require existing envvar name.
If it is also not t, RET does not exit if it does non-null completion."
(completing-read prompt
(mapcar (lambda (enventry)
- (list (if enable-multibyte-characters
- (decode-coding-string
- (substring enventry 0
- (string-match "=" enventry))
- locale-coding-system t)
- (substring enventry 0
- (string-match "=" enventry)))))
- process-environment)
+ (let ((str (substring enventry 0
+ (string-match "=" enventry))))
+ (if (multibyte-string-p str)
+ (decode-coding-string
+ str locale-coding-system t)
+ str)))
+ (append process-environment
+ ;;(frame-environment)
+ ))
nil mustmatch nil 'read-envvar-name-history))
;; History list for VALUE argument to setenv.
@@ -88,17 +91,52 @@ Use `$$' to insert a single dollar sign."
start (+ (match-beginning 0) 1)))))
string))
-;; Fixme: Should `process-environment' be recoded if LC_CTYPE &c is set?
+
+(defun setenv-internal (env variable value keep-empty)
+ "Set VARIABLE to VALUE in ENV, adding empty entries if KEEP-EMPTY.
+Changes ENV by side-effect, and returns its new value."
+ (let ((pattern (concat "\\`" (regexp-quote variable) "\\(=\\|\\'\\)"))
+ (case-fold-search nil)
+ (scan env)
+ prev found)
+ ;; Handle deletions from the beginning of the list specially.
+ (if (and (null value)
+ (not keep-empty)
+ env
+ (stringp (car env))
+ (string-match pattern (car env)))
+ (cdr env)
+ ;; Try to find existing entry for VARIABLE in ENV.
+ (while (and scan (stringp (car scan)))
+ (when (string-match pattern (car scan))
+ (if value
+ (setcar scan (concat variable "=" value))
+ (if keep-empty
+ (setcar scan variable)
+ (setcdr prev (cdr scan))))
+ (setq found t
+ scan nil))
+ (setq prev scan
+ scan (cdr scan)))
+ (if (and (not found) (or value keep-empty))
+ (cons (if value
+ (concat variable "=" value)
+ variable)
+ env)
+ env))))
+
+;; Fixme: Should the environment be recoded if LC_CTYPE &c is set?
(defun setenv (variable &optional value substitute-env-vars)
"Set the value of the environment variable named VARIABLE to VALUE.
VARIABLE should be a string. VALUE is optional; if not provided or
nil, the environment variable VARIABLE will be removed.
-Interactively, a prefix argument means to unset the variable.
-Interactively, the current value (if any) of the variable
-appears at the front of the history list when you type in the new value.
-Interactively, always replace environment variables in the new value.
+Interactively, a prefix argument means to unset the variable, and
+otherwise the current value (if any) of the variable appears at
+the front of the history list when you type in the new value.
+This function always replaces environment variables in the new
+value when called interactively.
SUBSTITUTE-ENV-VARS, if non-nil, means to substitute environment
variables in VALUE with `substitute-env-vars', which see.
@@ -138,48 +176,86 @@ a side-effect."
(if (and value (multibyte-string-p value))
(setq value (encode-coding-string value locale-coding-system)))
(if (string-match "=" variable)
- (error "Environment variable name `%s' contains `='" variable)
- (let ((pattern (concat "\\`" (regexp-quote (concat variable "="))))
- (case-fold-search nil)
- (scan process-environment)
- found)
- (if (string-equal "TZ" variable)
- (set-time-zone-rule value))
- (while scan
- (cond ((string-match pattern (car scan))
- (setq found t)
- (if (eq nil value)
- (setq process-environment (delq (car scan)
- process-environment))
- (setcar scan (concat variable "=" value)))
- (setq scan nil)))
- (setq scan (cdr scan)))
- (or found
- (if value
- (setq process-environment
- (cons (concat variable "=" value)
- process-environment))))))
+ (error "Environment variable name `%s' contains `='" variable))
+ (if (string-equal "TZ" variable)
+ (set-time-zone-rule value))
+ (setq process-environment (setenv-internal process-environment
+ variable value t))
value)
-(defun getenv (variable)
+(defun getenv (variable &optional frame)
"Get the value of environment variable VARIABLE.
VARIABLE should be a string. Value is nil if VARIABLE is undefined in
the environment. Otherwise, value is a string.
-This function consults the variable `process-environment'
-for its value."
+If optional parameter FRAME is non-nil, then it should be a
+frame. This function will look up VARIABLE in its 'environment
+parameter.
+
+Otherwise, this function searches `process-environment' for
+VARIABLE. If it is not found there, then it continues the search
+in the environment list of the selected frame."
(interactive (list (read-envvar-name "Get environment variable: " t)))
(let ((value (getenv-internal (if (multibyte-string-p variable)
(encode-coding-string
variable locale-coding-system)
- variable))))
+ variable)
+ frame)))
(if (and enable-multibyte-characters value)
(setq value (decode-coding-string value locale-coding-system)))
(when (interactive-p)
(message "%s" (if value value "Not set")))
value))
+(defun environment (&optional frame)
+ "Return a list of environment variables with their values.
+Each entry in the list is a string of the form NAME=VALUE.
+
+The returned list can not be used to change environment
+variables, only read them. See `setenv' to do that.
+
+If optional parameter FRAME is non-nil, then it should be a
+frame. The function returns the environment of that frame.
+
+The list is constructed by concatenating the elements of
+`process-environment' and the 'environment parameter of the
+selected frame, and removing duplicated and empty values.
+
+Non-ASCII characters are encoded according to the initial value of
+`locale-coding-system', i.e. the elements must normally be decoded for use.
+See `setenv' and `getenv'."
+ (let* ((env (append process-environment
+ ;; (frame-environment frame)
+ nil))
+ (scan env)
+ prev seen)
+ ;; Remove unset variables from the beginning of the list.
+ (while (and env
+ (or (not (stringp (car env)))
+ (not (string-match "=" (car env)))))
+ (or (member (car env) seen)
+ (setq seen (cons (car env) seen)))
+ (setq env (cdr env)
+ scan env))
+ (let (name)
+ (while scan
+ (cond ((or (not (stringp (car scan)))
+ (not (string-match "=" (car scan))))
+ ;; Unset variable.
+ (or (member (car scan) seen)
+ (setq seen (cons (car scan) seen)))
+ (setcdr prev (cdr scan)))
+ ((member (setq name (substring (car scan) 0 (string-match "=" (car scan)))) seen)
+ ;; Duplicated variable.
+ (setcdr prev (cdr scan)))
+ (t
+ ;; New variable.
+ (setq seen (cons name seen))))
+ (setq prev scan
+ scan (cdr scan))))
+ env))
+
(provide 'env)
-;;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
+;; arch-tag: b7d6a8f7-bc81-46db-8e39-8d721d4ed0b8
;;; env.el ends here
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index e78222c3254..b7f40c39411 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -5,27 +5,397 @@
* erc-log.el (log):
* erc-match.el (erc-log-matches): Fix typos in docstrings.
+2007-11-01 Michael Olson <mwolson@gnu.org>
+
+ * erc-compat.el (erc-set-write-file-functions): New compatibility
+ function to set the write hooks appropriately.
+
+ * erc-log.el (erc-log-setup-logging): Use
+ erc-set-write-file-functions. This fixes a byte-compiler warning.
+
+ * erc-stamp.el: Silence byte-compiler warning about
+ erc-fill-column.
+
+ * erc.el (erc-with-all-buffers-of-server): Bind the result of
+ mapcar to a variable in order to silence a byte-compiler warning.
+
+2007-10-29 Michael Olson <mwolson@gnu.org>
+
+ * erc-ibuffer.el (erc-modified-channels-alist): Use
+ eval-when-compile, and explain why we are doing this.
+
+2007-10-25 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * erc-ibuffer.el (erc-modified-channels-alist): Pacify
+ byte-compiler.
+
+2007-10-13 Glenn Morris <rgm@gnu.org>
+
+ * erc-track.el (erc-modified-channels-update): Use mapc rather
+ than mapcar.
+
+2007-10-12 Diane Murray <disumu@x3y2z1.net>
+
+ * erc.el (erc-join-channel): Prompt for channel key if C-u or
+ another prefix-arg was typed.
+
+ * NEWS: Noted this change.
+
+2007-10-07 Michael Olson <mwolson@gnu.org>
+
+ * erc.el (erc-cmd-ME'S): New command that handles the case where
+ someone types "/me's". It concatenates the text " 's" to the
+ beginning of the input and then sends the result like a normal
+ "/me" command.
+ (erc-command-regexp): Permit single-quote character.
+
+2007-09-30 Aidan Kehoe <kehoea@parhasard.net> (tiny change)
+
+ * erc-log.el (erc-save-buffer-in-logs): Prevent spurious warnings
+ when looking at a log file and concurrently saving to it.
+
+2007-09-18 Exal de Jesus Garcia Carrillo <exal@gnu.org> (tiny change)
+
+ * erc.texi (Special-Features): Fix small typo.
+
+2007-09-16 Michael Olson <mwolson@gnu.org>
+
+ * erc-track.el (erc-track-switch-direction): Mention
+ erc-track-faces-priority-list. Thanks to Leo for the suggestion.
+
+2007-09-11 Exal de Jesus Garcia Carrillo <exal@gnu.org> (tiny change)
+
+ * erc-sound.el: Fix typo in setting up instructions.
+
+2007-09-10 Michael Olson <mwolson@gnu.org>
+
+ * Makefile (elpa): Copy dir template rather than echoing a few
+ lines. The reason for this is that the ELPA package for ERC was
+ getting a corrupt dir entry.
+
+ * dir-template: Template for the ELPA dir file.
+
+2007-09-08 Michael Olson <mwolson@gnu.org>
+
+ * erc-log.el (erc-log-filter-function): New option that specifies
+ the function to call for filtering text before writing it to a log
+ file. Thanks to David O'Toole for the suggestion.
+ (erc-save-buffer-in-logs): Use erc-log-filter-function. Make sure
+ we carry along the value of coding-system-for-write, because this
+ could potentially be shadowed by the temporary buffer.
+
+ * erc.el (erc-version-string): Update to 5.3, development version.
+
+2007-09-07 Glenn Morris <rgm@gnu.org>
+
+ * erc.el (erc-toggle-debug-irc-protocol): Fix call to
+ erc-view-mode-enter.
+
2007-08-08 Glenn Morris <rgm@gnu.org>
* erc-log.el, erc.el: Replace `iff' in doc-strings and comments.
+2007-09-03 Michael Olson <mwolson@gnu.org>
+
+ * erc.el (erc-default-port): Make this an integer value rather
+ than a string. Thanks to Luca Capello for the report.
+
+2007-08-27 Michael Olson <mwolson@gnu.org>
+
+ * erc.el (erc-cmd-GQUIT): If erc-kill-queries-on-quit is non-nil,
+ kill all query buffers after 4 seconds.
+
+2007-08-16 Michael Olson <mwolson@gnu.org>
+
+ * NEWS: Add ERC 5.3 changes section, and mention jbms' erc-track
+ compatibility note.
+
+ * erc-track.el (erc-track-list-changed-hook): Turn this into a
+ customizable option.
+ (erc-track-switch-direction): Add 'importance option.
+ (erc-modified-channels-display): If erc-track-switch-direction is
+ 'importance, call erc-track-sort-by-importance.
+ (erc-track-face-priority): New function that returns a number
+ indicating the position of a face in
+ erc-track-faces-priority-list.
+ (erc-track-sort-by-importance): New function that sorts
+ erc-modified-channels-list according to erc-track-face-priority.
+ (erc-track-get-active-buffer): Make 'oldest a rough opposite of
+ 'importance.
+
+2007-08-14 Jeremy Maitin-Shepard <jbms@cmu.edu>
+
+ * erc-track.el (erc-track-remove-disconnected-buffers): New
+ variable which controls whether buffers associated with a server
+ that is disconnected should be removed from
+ `erc-modified-channels-alist'. Existing behavior is to
+ unconditionally remove such buffers, which is achieved by setting
+ `erc-track-removed-disconnected-buffers' to t. When set to t,
+ which is the new default value, such buffers remain in the list,
+ which I think is often the desired behavior, since the user may
+ likely wish to find out about activity that occurred in a channel
+ prior to it being disconnected.
+ (erc-track-list-changed-hook): New hook that is run whenever the
+ contents of `erc-modified-channels-alist' changes; it is useful
+ for users such as myself that don't use the default mode-line
+ notification but instead use a separate mechanism (which is tied
+ to my window manager) to provide notification of channel activity.
+ (erc-track-get-buffer-window): New function that acts as a wrapper
+ around `get-buffer-window' that handles the `selected-visible'
+ option of `erc-track-visibility'; previously, the value of
+ `erc-track-visibility' was passed directly to `get-buffer-window',
+ which does not support `selected-visible'; consequently,
+ `selected-visible' was not properly supported.
+ (erc-track-modified-channels): Fix a bug in the logic for removing
+ buffers from the list in certain cases.
+ (erc-track-position-in-mode-line): Add a supported value that
+ specifies that the tracking information should not be added to the
+ mode line at all. The value of nil is used to indicate that the
+ information should not be added at all to the mode line.
+ (erc-track-add-to-mode-line): Check for position eq to t, rather
+ than non-nil.
+ (erc-buffer-visible): Use erc-track-get-buffer-window.
+ (erc-modified-channels-update): Take
+ erc-track-remove-disconnected-buffers into account.
+ (erc-modified-channels-display): Run
+ `erc-track-list-changed-hook'.
+
+ * erc.el (erc-reuse-frames): New option that determines whether
+ new frames are always created. Defaults to t. This only has an
+ effect when erc-join-buffer is set to 'frame.
+ (erc-setup-buffer): Use it.
+
+2007-08-14 Michael Olson <mwolson@gnu.org>
+
+ * erc-backend.el (erc-server-reconnect): If the server buffer has
+ been killed, use the current buffer instead. If the current
+ buffer is not an ERC buffer, give an error. This fixes a bug when
+ /reconnect is run from a channel buffer whose server buffer has
+ been deleted. Thanks to jbms for the report.
+ (erc-process-sentinel-1): Take server buffer as an argument, so
+ that we can make sure that it is current.
+ (erc-process-sentinel): Pass buffer to erc-process-sentinel-1.
+ (erc-process-sentinel-2): New function split from
+ erc-process-sentinel-1. If server buffer is deleted during a
+ reconnect attempt, stop trying to reconnect. Fix bug where
+ reconnect was not happening when erc-server-reconnect-attempts was
+ t. Call erc-server-reconnect-p only once each time. If we are
+ instructed to try connecting indefinitely, tell the user that they
+ can stop this by killing the server buffer. Call the process
+ sentinel by means of run-at-time, so that there is time to kill
+ the buffer if need be; this also removes the need for a while
+ loop. Refuse to reconnect again if erc-server-reconnect-timeout
+ is not an number.
+
+ * erc.el (erc-command-no-process-p): Fix bug: the return value of
+ erc-extract-command-from-line is a list rather than a single
+ symbol. Thanks to jbms for the report.
+ (erc-cmd-RECONNECT): Use simpler logic, and use buffer-live-p
+ rather than bufferp.
+ (erc-send-current-line, erc-display-command, erc-display-msg):
+ Handle case where erc-server-process is nil, so that /reconnect
+ works.
+
+2007-08-12 Michael Olson <mwolson@gnu.org>
+
+ * erc-identd.el (erc-identd-filter): Instead of sending an EOF
+ character, which now confuses freenode, stop the server process,
+ so that no new connections are accepted, and kill the current
+ client process.
+
2007-07-30 Michael Olson <mwolson@gnu.org>
* erc-nicklist.el: Remove from the Emacs source tree. This file
is not release quality, and relies heavily on a module which
cannot be distributed with ERC due to licensing reasons.
+2007-07-29 Michael Olson <mwolson@gnu.org>
+
+ * erc-list.el: Relicense to GPLv3. Since the file was already
+ licensed under version 2 or later, it turns out that we do not
+ need the permission of all of the authors in order to proceed.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
-2007-06-07 Juanma Barranquero <lekktu@gmail.com>
+2007-07-13 Michael Olson <mwolson@gnu.org>
+
+ * erc-goodies.el (erc-get-bg-color-face, erc-get-fg-color-face):
+ Use erc-error rather than message and beep.
+
+ * erc-sound.el: Indentation fix.
+
+ * erc.el (erc-command-no-process-p): New function that determines
+ if its argument is an ERC command that can be run when the server
+ process is not alive.
+ (erc-cmd-SET, erc-cmd-CLEAR, erc-cmd-COUNTRY, erc-cmd-HELP)
+ (erc-cmd-LASTLOG, erc-cmd-QUIT, erc-cmd-GQUIT)
+ (erc-cmd-RECONNECT, erc-cmd-SERVER): Denote that these commands
+ can be run even when the server process is not alive.
+ (erc-send-current-line): Call erc-command-no-process-p if the
+ server process is not alive, to determine if we have a command
+ that can be run anyway. Thanks to Tom Tromey for the bug report.
+ (erc-error): New function that either displays a message or throws
+ an error, depending on whether debug-on-error is non-nil.
+ (erc-cmd-SERVER, erc-send-current-line): Use it.
+
+2007-07-10 Michael Olson <mwolson@gnu.org>
- * erc.el (erc-startup-file-list): Fix typo in docstring.
+ * Relicense all FSF-assigned code to GPLv3.
+
+2007-06-25 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Options): Fix typo.
+ (Getting Help and Reporting Bugs): Update webpage URL. Make Gmane
+ part more readable.
+
+2007-06-20 Michael Olson <mwolson@gnu.org>
+
+ * erc-stamp.el (erc-timestamp-format-left): New option that
+ specifies the left timestamp to use for
+ erc-insert-timestamp-left-and-right.
+ (erc-timestamp-format-right): New option that specifies the right
+ timestamp to use for erc-insert-timestamp-left-and-right.
+ (erc-insert-timestamp-function): Change default to
+ erc-insert-timestamp-left-and-right.
+ (erc-insert-away-timestamp-function): Ditto.
+ (erc-timestamp-last-inserted-left)
+ (erc-timestamp-last-inserted-right): New variables to keep track
+ of data for erc-insert-timestamp-left-and-right.
+ (erc-insert-timestamp-left-and-right): New function that places
+ timestamps on both the left and right sides of the screen, but
+ only if each timestamp has changed since it was last computed.
+ Thanks to offby1 for urging me to merge this.
+
+ * erc.el (erc-open-ssl-stream): Display informative error when
+ ssl.el not found.
+ (erc-tls): New function to connect using tls.el.
+ (erc-open-tls-stream): New function to initiate tls connection.
+ Display informative error when tls.el not found.
+
+2007-06-19 Michael Olson <mwolson@gnu.org>
+
+ * erc-log.el: Update header with accurate instructions.
+
+2007-06-17 Michael Olson <mwolson@gnu.org>
+
+ * erc-pkg.el: Update description to match what is currently in
+ ELPA.
+
+2007-06-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * erc-goodies.el (erc-scroll-to-bottom): Remove redundant check.
+
+2007-06-13 Michael Olson <mwolson@gnu.org>
+
+ * erc-compat.el (erc-with-selected-window): New compatibility
+ macro that implements `with-selected-window'.
+
+ * erc-goodies.el (erc-scroll-to-bottom): Use it. This fixes a bug
+ with buffer ordering where ERC buffers would move to the top.
+ Thanks to Ivan Kanis for the patch.
+
+2007-06-10 Michael Olson <mwolson@gnu.org>
+
+ * erc-log.el (erc-logging-enabled): Fix a bug that occurred when
+ `erc-log-channels-directory' had the name of a function.
2007-06-06 Juanma Barranquero <lekktu@gmail.com>
- * erc.el (erc-show-channel-key-p): Fix typo in docstring.
+ * erc.el (erc-show-channel-key-p, erc-startup-file-list):
+ Fix typo in docstring.
+
+2007-06-03 Michael Olson <mwolson@gnu.org>
+
+ * erc-compat.el (erc-view-mode-enter): Make this its own function,
+ in order to document what we do, and provide sane fallback
+ behavior.
+
+ * erc.el (erc-toggle-debug-irc-protocol): Don't pass any arguments
+ to erc-view-mode-enter, since we don't do anything special with
+ the exit function. This fixes a bug with Emacs 21 and Emacs 22.
+ Thanks to Leo for noticing.
+
+2007-05-30 Michael Olson <mwolson@gnu.org>
+
+ * erc-compat.el (erc-user-emacs-directory): New variable that
+ determines where to find user-specific Emacs settings. For Emacs,
+ this is usually ~/.emacs.d, and for XEmacs this is usually
+ ~/.xemacs.
+
+ * erc.el (erc-startup-file-list): Use erc-user-emacs-directory.
+
+2007-05-28 Michael Olson <mwolson@gnu.org>
+
+ * erc-button.el (erc-button-url-regexp): Recognize parentheses as
+ part of URLs. Thanks to Lawrence Mitchell for the fix.
+
+2007-05-26 Michael Olson <mwolson@gnu.org>
+
+ * erc.texi (Modules): Fix references to completion modules.
+
+2007-05-21 Michael Olson <mwolson@gnu.org>
+
+ * Makefile (SOURCE): Remove erc-pkg.el.
+ (debclean): New rule to clean old Debian packages of ERC.
+ (debprepare): Don't modify the released tarball, but copy it as
+ the .orig.tar.gz file.
+ (debrelease. debrevision): Remove.
+ (debinstall): New target that copies the generated Debian file to
+ a distro-specific location.
+ (deb): New rule that chains together the stages in building a
+ Debian package.
+ (EXTRAS): Add erc-nicklist.el, since it is not release-quality.
+ (extras): Copy images directory.
+
+ * erc-nicklist.el (erc-nicklist-icons-directory): Use
+ locate-library to find the "images" directory. This should be
+ more failsafe. Thanks to Tom Tromey for the idea.
+
+2007-05-19 Michael Olson <mwolson@gnu.org>
+
+ * Makefile (ELPA): New variable that contains the location of my
+ local ELPA repository.
+ (elpa): New rule that makes an ELPA package for ERC.
+
+2007-04-19 Michael Olson <mwolson@gnu.org>
+
+ * erc.el (erc-parse-prefix): New function that retrieves the
+ PREFIX server parameter from the current server and returns an
+ alist of prefix type to prefix character.
+ (erc-channel-receive-names): Use `erc-parse-prefix' to determine
+ whether the first character of a nick is a prefix character or
+ not. This should fix a bug reported by bromine about needing to
+ type "%" first to complete nicks of people who are "hops" on
+ Slashnet. This should also support for very exotic IRC server
+ setups, if any exist.
+ (erc-update-current-channel-member): Indentation.
+
+2007-04-15 Michael Olson <mwolson@gnu.org>
+
+ * erc-log.el (erc-generate-log-file-name-function): Docfix.
+ Mention how to deal with the case for putting log files in
+ different directories. Change a customization type from `symbol'
+ to `function'.
+ (erc-log-channels-directory): Allow this to contain a function
+ name, which is called with the same args as in
+ `erc-generate-log-file-name-function'. Thanks to andrewy for the
+ report and use case.
+ (erc-current-logfile): Detect if `erc-log-channels-directory' is a
+ function and call it with arguments if so.
+
+2007-04-12 Michael Olson <mwolson@gnu.org>
+
+ * erc-backend.el (define-erc-response-handler): Mention that hook
+ processing stops when the function returns non-nil. This should
+ help avoid a nasty "gotcha" when making custom functions. Thanks
+ to John Sullivan for the report.
+
+2007-04-08 Diane Murray <disumu@x3y2z1.net>
+
+ * erc-nicklist.el (erc-nicklist-voiced-position): Fixed
+ customization mismatch.
2007-04-01 Michael Olson <mwolson@gnu.org>
@@ -55,6 +425,10 @@
tarball.
(upload-extras): New rule to upload the extras tarball. It's
yucky to replicate upload, but oh well.
+ (DISTRIBUTOR): New variable used to differentiate between building
+ packages for Ubuntu and Debian.
+ (debrelease, debrevision): Use it.
+ (debbuild): Run linda in addition to lintian.
* NEWS: Mention extras tarball. Note which files have been
renamed. Note that erc-list is enabled by default, except in
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index e03c8964ca3..5b4e79fda32 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -550,11 +550,12 @@ We will store server variables in the buffer given by BUFFER."
(defun erc-server-reconnect ()
"Reestablish the current IRC connection.
Make sure you are in an ERC buffer when running this."
- (let ((server (erc-server-buffer)))
- (unless (and server
- (buffer-live-p server))
- (error "Couldn't switch to server buffer"))
- (with-current-buffer server
+ (let ((buffer (erc-server-buffer)))
+ (unless (buffer-live-p buffer)
+ (if (eq major-mode 'erc-mode)
+ (setq buffer (current-buffer))
+ (error "Reconnect must be run from an ERC buffer")))
+ (with-current-buffer buffer
(erc-update-mode-line)
(erc-set-active-buffer (current-buffer))
(setq erc-server-last-sent-time 0)
@@ -609,39 +610,61 @@ EVENT is the message received from the closed connection process."
;; open-network-stream-nowait error for connection refused
(not (string-match "^failed with code 111" event)))))
-(defun erc-process-sentinel-1 (event)
+(defun erc-process-sentinel-2 (event buffer)
+ "Called when `erc-process-sentinel-1' has detected an unexpected disconnect."
+ (if (not (buffer-live-p buffer))
+ (erc-update-mode-line)
+ (with-current-buffer buffer
+ (let ((reconnect-p (erc-server-reconnect-p event)))
+ (erc-display-message nil 'error (current-buffer)
+ (if reconnect-p 'disconnected
+ 'disconnected-noreconnect))
+ (if (not reconnect-p)
+ ;; terminate, do not reconnect
+ (progn
+ (erc-display-message nil 'error (current-buffer)
+ 'terminated ?e event)
+ ;; Update mode line indicators
+ (erc-update-mode-line)
+ (set-buffer-modified-p nil))
+ ;; reconnect
+ (condition-case err
+ (progn
+ (setq erc-server-reconnecting nil)
+ (erc-server-reconnect)
+ (setq erc-server-reconnect-count 0))
+ (error (when (buffer-live-p buffer)
+ (set-buffer buffer)
+ (if (integerp erc-server-reconnect-attempts)
+ (setq erc-server-reconnect-count
+ (1+ erc-server-reconnect-count))
+ (message "%s ... %s"
+ "Reconnecting until we succeed"
+ "kill the ERC server buffer to stop"))
+ (if (numberp erc-server-reconnect-timeout)
+ (run-at-time erc-server-reconnect-timeout nil
+ #'erc-process-sentinel-2
+ event buffer)
+ (error (concat "`erc-server-reconnect-timeout`"
+ " must be a number")))))))))))
+
+(defun erc-process-sentinel-1 (event buffer)
"Called when `erc-process-sentinel' has decided that we're disconnecting.
Determine whether user has quit or whether erc has been terminated.
Conditionally try to reconnect and take appropriate action."
- (if erc-server-quitting
- ;; normal quit
- (progn
- (erc-display-message nil 'error (current-buffer) 'finished)
- (when erc-kill-server-buffer-on-quit
+ (with-current-buffer buffer
+ (if erc-server-quitting
+ ;; normal quit
+ (progn
+ (erc-display-message nil 'error (current-buffer) 'finished)
+ ;; Update mode line indicators
+ (erc-update-mode-line)
+ ;; Kill server buffer if user wants it
(set-buffer-modified-p nil)
- (kill-buffer (current-buffer))))
- ;; unexpected disconnect
- (let ((again t))
- (while again
- (setq again nil)
- (erc-display-message nil 'error (current-buffer)
- (if (erc-server-reconnect-p event)
- 'disconnected
- 'disconnected-noreconnect))
- (if (erc-server-reconnect-p event)
- (condition-case err
- (progn
- (setq erc-server-reconnecting nil)
- (erc-server-reconnect)
- (setq erc-server-reconnect-count 0))
- (error (when (integerp erc-server-reconnect-attempts)
- (setq erc-server-reconnect-count
- (1+ erc-server-reconnect-count))
- (sit-for erc-server-reconnect-timeout)
- (setq again t))))
- ;; terminate, do not reconnect
- (erc-display-message nil 'error (current-buffer)
- 'terminated ?e event))))))
+ (when erc-kill-server-buffer-on-quit
+ (kill-buffer (current-buffer))))
+ ;; unexpected disconnect
+ (erc-process-sentinel-2 event buffer))))
(defun erc-process-sentinel (cproc event)
"Sentinel function for ERC process."
@@ -668,12 +691,7 @@ Conditionally try to reconnect and take appropriate action."
(delete-region (point) (point-max))
;; Decide what to do with the buffer
;; Restart if disconnected
- (erc-process-sentinel-1 event)
- ;; Make sure we don't write to the buffer if it has been
- ;; killed
- (when (buffer-live-p buf)
- (erc-update-mode-line)
- (set-buffer-modified-p nil))))))
+ (erc-process-sentinel-1 event buf)))))
;;;; Sending messages
@@ -1054,8 +1072,11 @@ Would expand to:
\"Some non-generic variable documentation.
Hook called upon receiving a WHOIS server response.
+
Each function is called with two arguments, the process associated
- with the response and the parsed response.
+ with the response and the parsed response. If the function returns
+ non-nil, stop processing the hook. Otherwise, continue.
+
See also `erc-server-311'.\")
(defalias 'erc-server-WI 'erc-server-311)
@@ -1064,7 +1085,9 @@ Would expand to:
Hook called upon receiving a WI server response.
Each function is called with two arguments, the process associated
- with the response and the parsed response.
+ with the response and the parsed response. If the function returns
+ non-nil, stop processing the hook. Otherwise, continue.
+
See also `erc-server-311'.\"))
\(fn (NAME &rest ALIASES) &optional EXTRA-FN-DOC EXTRA-VAR-DOC &rest FN-BODY)"
@@ -1078,7 +1101,9 @@ Would expand to:
(fn-name (intern (format "erc-server-%s" name)))
(hook-doc (format "%sHook called upon receiving a %%s server response.
Each function is called with two arguments, the process associated
-with the response and the parsed response.
+with the response and the parsed response. If the function returns
+non-nil, stop processing the hook. Otherwise, continue.
+
See also `%s'."
(if extra-var-doc
(concat extra-var-doc "\n\n")
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 35a20d5279f..81c604d0538 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -99,7 +99,7 @@ above them."
(concat "\\(www\\.\\|\\(s?https?\\|"
"ftp\\|file\\|gopher\\|news\\|telnet\\|wais\\|mailto\\):\\)"
"\\(//[-a-zA-Z0-9_.]+:[0-9]*\\)?"
- "[-a-zA-Z0-9_=!?#$@~`%&*+\\/:;.,]+[-a-zA-Z0-9_=#$@~`%&*+\\/]")
+ "[-a-zA-Z0-9_=!?#$@~`%&*+\\/:;.,()]+[-a-zA-Z0-9_=#$@~`%&*+\\/()]")
"Regular expression that matches URLs."
:group 'erc-button
:type 'regexp)
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index 8be3bed1a78..d6591415867 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/erc/erc-compat.el
@@ -50,12 +50,27 @@ See `erc-encoding-coding-alist'."
(defalias 'erc-delete-dups 'delete-dups)
(defalias 'erc-replace-regexp-in-string 'replace-regexp-in-string)
+(defun erc-set-write-file-functions (new-val)
+ (set (make-local-variable 'write-file-functions) new-val))
+
(defvar erc-emacs-build-time
(if (stringp emacs-build-time)
emacs-build-time
(format-time-string "%Y-%m-%d" emacs-build-time))
"Time at which Emacs was dumped out.")
+;; Emacs 21 and XEmacs do not have user-emacs-directory, but XEmacs
+;; has user-init-directory.
+(defvar erc-user-emacs-directory
+ (cond ((boundp 'user-emacs-directory)
+ user-emacs-directory)
+ ((boundp 'user-init-directory)
+ user-init-directory)
+ (t "~/.emacs.d/"))
+ "Directory beneath which additional per-user Emacs-specific files
+are placed.
+Note that this should end with a directory separator.")
+
;; XEmacs' `replace-match' does not replace matching subexpressions in strings.
(defun erc-replace-match-subexpression-in-string
(newtext string match subexp start &optional fixedcase literal)
@@ -68,6 +83,7 @@ See `replace-match' for explanations of FIXEDCASE and LITERAL."
(replace-match newtext fixedcase literal string))
(t (replace-match newtext fixedcase literal string subexp))))
+(defalias 'erc-with-selected-window 'with-selected-window)
(defalias 'erc-cancel-timer 'cancel-timer)
(defalias 'erc-make-obsolete 'make-obsolete)
(defalias 'erc-make-obsolete-variable 'make-obsolete-variable)
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 7d995ebb7bb..9131ce68282 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -77,15 +77,14 @@ You can control which line is recentered to by customizing the
variable `erc-input-line-position'.
DISPLAY-START is ignored."
- (if (and window (window-live-p window))
+ (if (window-live-p window)
;; Temporarily bind resize-mini-windows to nil so that users who have it
;; set to a non-nil value will not suffer from premature minibuffer
;; shrinkage due to the below recenter call. I have no idea why this
;; works, but it solves the problem, and has no negative side effects.
;; (Fran Litterio, 2003/01/07)
(let ((resize-mini-windows nil))
- (save-selected-window
- (select-window window)
+ (erc-with-selected-window window
(save-restriction
(widen)
(when (and erc-insert-marker
@@ -282,10 +281,8 @@ The value `erc-interpret-controls-p' must also be t for this to work."
"Fetches the right face for background color N (0-15)."
(if (stringp n) (setq n (string-to-number n)))
(if (not (numberp n))
- (progn
- (message "erc-get-bg-color-face: n is NaN: %S" n)
- (beep)
- 'default)
+ (prog1 'default
+ (erc-error "erc-get-bg-color-face: n is NaN: %S" n))
(when (> n 16)
(erc-log (format " Wrong color: %s" n))
(setq n (mod n 16)))
@@ -298,10 +295,8 @@ The value `erc-interpret-controls-p' must also be t for this to work."
"Fetches the right face for foreground color N (0-15)."
(if (stringp n) (setq n (string-to-number n)))
(if (not (numberp n))
- (progn
- (message "erc-get-fg-color-face: n is NaN: %S" n)
- (beep)
- 'default)
+ (prog1 'default
+ (erc-error "erc-get-fg-color-face: n is NaN: %S" n))
(when (> n 16)
(erc-log (format " Wrong color: %s" n))
(setq n (mod n 16)))
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index ae256b877fa..76c2d2b18b1 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -71,6 +71,10 @@
(string-match qualifier (or erc-server-announced-name
erc-session-server)))))
+;; Silence the byte-compiler
+(eval-when-compile
+ (defvar erc-modified-channels-alist))
+
(define-ibuffer-column erc-modified (:name "M")
(if (and (boundp 'erc-track-mode)
erc-track-mode)
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index 4b72ee171b3..db933094e19 100644
--- a/lisp/erc/erc-identd.el
+++ b/lisp/erc/erc-identd.el
@@ -74,7 +74,8 @@ This can be either a string or a number."
(format "%s, %s : USERID : %s : %s\n"
port-on-server port-on-client
system-type (user-login-name)))
- (process-send-eof erc-identd-process)))))
+ (stop-process erc-identd-process)
+ (delete-process proc)))))
;;;###autoload
(defun erc-identd-start (&optional port)
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index 651b80399ee..fe3e703f554 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -31,17 +31,26 @@
;; Quick start:
;;
-;; (setq erc-enable-logging t)
+;; (require 'erc-log)
;; (setq erc-log-channels-directory "/path/to/logfiles") ; must be writable
+;; (erc-log-enable)
;;
-;; There are two ways to setup logging. The first will write to the log files
-;; on each incoming or outgoing line - this may not be optimal on a laptop
-;; HDD. To do this, M-x customize-variable erc-modules, and add "log".
+;; Or:
;;
-;; The second method will save buffers on /part, /quit, or killing the
-;; channel buffer. To do this, add the following to your .emacs:
+;; M-x customize-variable erc-modules, and add "log".
;;
-;; (require 'erc-log)
+;; There are two ways to setup logging. The first (default) method
+;; will save buffers on /part, /quit, or killing the channel
+;; buffer.
+;;
+;; The second will write to the log files on each incoming or outgoing
+;; line - this may not be optimal on a laptop HDD. To use this
+;; method, add the following to the above instructions.
+;;
+;; (setq erc-save-buffer-on-part nil
+;; erc-save-queries-on-quit nil
+;; erc-log-write-after-send t
+;; erc-log-write-after-insert t)
;;
;; If you only want to save logs for some buffers, customise the
;; variable `erc-enable-logging'.
@@ -99,15 +108,19 @@ The function must take five arguments: BUFFER, TARGET, NICK, SERVER and PORT.
BUFFER is the buffer to be saved,
TARGET is the name of the channel, or the target of the query,
NICK is the current nick,
-SERVER and PORT are the parameters used to connect BUFFERs
-`erc-server-process'."
+SERVER and PORT are the parameters that were used to connect to BUFFERs
+`erc-server-process'.
+
+If you want to write logs into different directories, make a
+custom function which returns the directory part and set
+`erc-log-channels-directory' to its name."
:group 'erc-log
:type '(choice (const :tag "Long style" erc-generate-log-file-name-long)
(const :tag "Long, but with network name rather than server"
erc-generate-log-file-name-network)
(const :tag "Short" erc-generate-log-file-name-short)
(const :tag "With date" erc-generate-log-file-name-with-date)
- (symbol :tag "Other function")))
+ (function :tag "Other function")))
(defcustom erc-truncate-buffer-on-save nil
"Truncate any ERC (channel, query, server) buffer when it is saved."
@@ -134,10 +147,16 @@ Log files are stored in `erc-log-channels-directory'."
"The directory to place log files for channels.
Leave blank to disable logging. If not nil, all the channel
buffers are logged in separate files in that directory. The
-directory should not end with a trailing slash."
+directory should not end with a trailing slash.
+
+If this is the name of a function, the function will be called
+with the buffer, target, nick, server, and port arguments. See
+`erc-generate-log-file-name-function' for a description of these
+arguments."
:group 'erc-log
:type '(choice directory
- (const nil)))
+ (function "Function")
+ (const :tag "Disable logging" nil)))
(defcustom erc-log-insert-log-on-open nil
"*Insert log file contents into the buffer if a log file exists."
@@ -186,6 +205,16 @@ This should ideally, be a \"catch-all\" coding system, like
`emacs-mule', or `iso-2022-7bit'."
:group 'erc-log)
+(defcustom erc-log-filter-function nil
+ "*If non-nil, pass text through the given function before writing it to
+a log file.
+
+The function should take one argument, which is the text to filter."
+ :group 'erc-log
+ :type '(choice (function "Function")
+ (const :tag "No filtering" nil)))
+
+
;;;###autoload (autoload 'erc-log-mode "erc-log" nil t)
(define-erc-module log nil
"Automatically logs things you receive on IRC into files.
@@ -196,7 +225,7 @@ format is defined through a formatting function on
Since automatic logging is not always a Good Thing (especially if
people say things in different coding systems), you can turn logging
behavior on and off with the variable `erc-enable-logging', which can
-also be a predicate function. To only log when you are not set away, use:
+also be a predicate function. To only log when you are not set away, use:
\(setq erc-enable-logging
(lambda (buffer)
@@ -239,14 +268,7 @@ The current buffer is given by BUFFER."
(with-current-buffer buffer
(auto-save-mode -1)
(setq buffer-file-name nil)
- (cond ((boundp 'write-file-functions)
- (set (make-local-variable 'write-file-functions)
- '(erc-save-buffer-in-logs)))
- ((boundp 'local-write-file-hooks)
- (setq local-write-file-hooks '(erc-save-buffer-in-logs)))
- (t
- (set (make-local-variable 'write-file-hooks)
- '(erc-save-buffer-in-logs))))
+ (erc-set-write-file-functions '(erc-save-buffer-in-logs))
(when erc-log-insert-log-on-open
(ignore-errors (insert-file-contents (erc-current-logfile))
(move-marker erc-last-saved-position
@@ -297,7 +319,8 @@ Logging is enabled if `erc-log-channels-directory' is non-nil, the directory
is writeable (it will be created as necessary) and
`erc-enable-logging' returns a non-nil value."
(and erc-log-channels-directory
- (erc-directory-writable-p erc-log-channels-directory)
+ (or (functionp erc-log-channels-directory)
+ (erc-directory-writable-p erc-log-channels-directory))
(if (functionp erc-enable-logging)
(funcall erc-enable-logging (or buffer (current-buffer)))
erc-enable-logging)))
@@ -316,14 +339,19 @@ filename is downcased."
If BUFFER is nil, the value of `current-buffer' is used.
This is determined by `erc-generate-log-file-name-function'.
The result is converted to lowercase, as IRC is case-insensitive"
- (expand-file-name
- (erc-log-standardize-name
- (funcall erc-generate-log-file-name-function
- (or buffer (current-buffer))
- (or (buffer-name buffer) (erc-default-target))
- (erc-current-nick)
- erc-session-server erc-session-port))
- erc-log-channels-directory))
+ (unless buffer (setq buffer (current-buffer)))
+ (let ((target (or (buffer-name buffer) (erc-default-target)))
+ (nick (erc-current-nick))
+ (server erc-session-server)
+ (port erc-session-port))
+ (expand-file-name
+ (erc-log-standardize-name
+ (funcall erc-generate-log-file-name-function
+ buffer target nick server port))
+ (if (functionp erc-log-channels-directory)
+ (funcall erc-log-channels-directory
+ buffer target nick server port)
+ erc-log-channels-directory))))
(defun erc-generate-log-file-name-with-date (buffer &rest ignore)
"This function computes a short log file name.
@@ -380,7 +408,8 @@ You can save every individual message by putting this function on
(or buffer (setq buffer (current-buffer)))
(when (erc-logging-enabled buffer)
(let ((file (erc-current-logfile buffer))
- (coding-system-for-write erc-log-file-coding-system))
+ (coding-system erc-log-file-coding-system)
+ (inhibit-clash-detection t)) ; needed for XEmacs
(save-excursion
(with-current-buffer buffer
(save-restriction
@@ -388,9 +417,17 @@ You can save every individual message by putting this function on
;; early on in the initialization, don't try and write the log out
(when (and (markerp erc-last-saved-position)
(> erc-insert-marker (1+ erc-last-saved-position)))
- (write-region (1+ (marker-position erc-last-saved-position))
- (marker-position erc-insert-marker)
- file t 'nomessage)
+ (let ((start (1+ (marker-position erc-last-saved-position)))
+ (end (marker-position erc-insert-marker)))
+ (if (functionp erc-log-filter-function)
+ (let ((text (buffer-substring start end)))
+ (with-temp-buffer
+ (insert (funcall erc-log-filter-function text))
+ (let ((coding-system-for-write coding-system))
+ (write-region (point-min) (point-max)
+ file t 'nomessage))))
+ (let ((coding-system-for-write coding-system))
+ (write-region start end file t 'nomessage))))
(if (and erc-truncate-buffer-on-save (interactive-p))
(progn
(let ((inhibit-read-only t)) (erase-buffer))
diff --git a/lisp/erc/erc-sound.el b/lisp/erc/erc-sound.el
index 4d3d792b1b8..7a1a28198bf 100644
--- a/lisp/erc/erc-sound.el
+++ b/lisp/erc/erc-sound.el
@@ -30,7 +30,7 @@
;; Add the following to your .emacs if you want to play sounds.
;;
-;; (require 'erc-soud)
+;; (require 'erc-sound)
;; (erc-sound-enable)
;;
;; To send requests to other users from within query buffers, type the
@@ -125,7 +125,7 @@ See also `play-sound-file'."
(if (and (not filepath) erc-default-sound)
(setq filepath erc-default-sound))
(cond ((and filepath (file-exists-p filepath))
- (play-sound-file filepath))
+ (play-sound-file filepath))
(t (beep)))
(erc-log (format "Playing sound file %S" filepath))))
@@ -142,5 +142,11 @@ See also `play-sound-file'."
(provide 'erc-sound)
-;; arch-tag: 53657d1d-007f-4a20-91c1-588e71cf0cee
;;; erc-sound.el ends here
+;;
+;; Local Variables:
+;; indent-tabs-mode: t
+;; tab-width: 8
+;; End:
+
+;; arch-tag: 53657d1d-007f-4a20-91c1-588e71cf0cee
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index d67dffeaede..64b04051d91 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -58,16 +58,48 @@ If nil, timestamping is turned off."
:type '(choice (const nil)
(string)))
-(defcustom erc-insert-timestamp-function 'erc-insert-timestamp-right
+(defcustom erc-timestamp-format-left "\n[%a %b %e %Y]\n"
+ "*If set to a string, messages will be timestamped.
+This string is processed using `format-time-string'.
+Good examples are \"%T\" and \"%H:%M\".
+
+This timestamp is used for timestamps on the left side of the
+screen when `erc-insert-timestamp-function' is set to
+`erc-insert-timestamp-left-and-right'.
+
+If nil, timestamping is turned off."
+ :group 'erc-stamp
+ :type '(choice (const nil)
+ (string)))
+
+(defcustom erc-timestamp-format-right " [%H:%M]"
+ "*If set to a string, messages will be timestamped.
+This string is processed using `format-time-string'.
+Good examples are \"%T\" and \"%H:%M\".
+
+This timestamp is used for timestamps on the right side of the
+screen when `erc-insert-timestamp-function' is set to
+`erc-insert-timestamp-left-and-right'.
+
+If nil, timestamping is turned off."
+ :group 'erc-stamp
+ :type '(choice (const nil)
+ (string)))
+
+(defcustom erc-insert-timestamp-function 'erc-insert-timestamp-left-and-right
"*Function to use to insert timestamps.
It takes a single argument STRING which is the final string
which all text-properties already appended. This function only cares about
inserting this string at the right position. Narrowing is in effect
while it is called, so (point-min) and (point-max) determine the region to
-operate on."
+operate on.
+
+You will probably want to set
+`erc-insert-away-timestamp-function' to the same value."
:group 'erc-stamp
- :type '(choice (const :tag "Right" erc-insert-timestamp-right)
+ :type '(choice (const :tag "Both sides" erc-insert-timestamp-left-and-right)
+ (const :tag "Right" erc-insert-timestamp-right)
(const :tag "Left" erc-insert-timestamp-left)
function))
@@ -82,12 +114,14 @@ If `erc-timestamp-format' is set, this will not be used."
:type '(choice (const nil)
(string)))
-(defcustom erc-insert-away-timestamp-function 'erc-insert-timestamp-right
+(defcustom erc-insert-away-timestamp-function
+ 'erc-insert-timestamp-left-and-right
"*Function to use to insert the away timestamp.
See `erc-insert-timestamp-function' for details."
:group 'erc-stamp
- :type '(choice (const :tag "Right" erc-insert-timestamp-right)
+ :type '(choice (const :tag "Both sides" erc-insert-timestamp-left-and-right)
+ (const :tag "Right" erc-insert-timestamp-right)
(const :tag "Left" erc-insert-timestamp-left)
function))
@@ -160,6 +194,18 @@ or `erc-send-modify-hook'."
"Last timestamp inserted into the buffer.")
(make-variable-buffer-local 'erc-timestamp-last-inserted)
+(defvar erc-timestamp-last-inserted-left nil
+ "Last timestamp inserted into the left side of the buffer.
+This is used when `erc-insert-timestamp-function' is set to
+`erc-timestamp-left-and-right'")
+(make-variable-buffer-local 'erc-timestamp-last-inserted-left)
+
+(defvar erc-timestamp-last-inserted-right nil
+ "Last timestamp inserted into the right side of the buffer.
+This is used when `erc-insert-timestamp-function' is set to
+`erc-timestamp-left-and-right'")
+(make-variable-buffer-local 'erc-timestamp-last-inserted-right)
+
(defcustom erc-timestamp-only-if-changed-flag t
"*Insert timestamp only if its value changed since last insertion.
If `erc-insert-timestamp-function' is `erc-insert-timestamp-left', a
@@ -218,6 +264,10 @@ property to get to the POSth column."
(list 'space ':align-to pos)))
(insert string))
+;; Silence byte-compiler
+(eval-when-compile
+ (defvar erc-fill-column))
+
(defun erc-insert-timestamp-right (string)
"Insert timestamp on the right side of the screen.
STRING is the timestamp to insert. The function is a possible value
@@ -272,6 +322,26 @@ be printed just before the window-width."
(when erc-timestamp-intangible
(erc-put-text-property from (1+ (point)) 'intangible t)))))
+(defun erc-insert-timestamp-left-and-right (string)
+ "This is another function that can be assigned to
+`erc-insert-timestamp-function'. If the date is changed, it will
+print a blank line, the date, and another blank line. If the time is
+changed, it will then print it off to the right."
+ (let* ((ct (current-time))
+ (ts-left (erc-format-timestamp ct erc-timestamp-format-left))
+ (ts-right (erc-format-timestamp ct erc-timestamp-format-right)))
+ ;; insert left timestamp
+ (unless (string-equal ts-left erc-timestamp-last-inserted-left)
+ (goto-char (point-min))
+ (erc-put-text-property 0 (length ts-left) 'field 'erc-timestamp ts-left)
+ (insert ts-left)
+ (setq erc-timestamp-last-inserted-left ts-left))
+ ;; insert right timestamp
+ (let ((erc-timestamp-only-if-changed-flag t)
+ (erc-timestamp-last-inserted erc-timestamp-last-inserted-right))
+ (erc-insert-timestamp-right ts-right)
+ (setq erc-timestamp-last-inserted-right ts-right))))
+
;; for testing: (setq erc-timestamp-only-if-changed-flag nil)
(defun erc-format-timestamp (time format)
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index f72a5be1de1..ad3eaf73a4b 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -95,6 +95,12 @@ Activity means that there was no user input in the last 10 seconds."
:group 'erc-track
:type '(repeat string))
+(defcustom erc-track-remove-disconnected-buffers nil
+ "*If true, remove buffers associated with a server that is
+disconnected from `erc-modified-channels-alist'."
+ :group 'erc-track
+ :type 'boolean)
+
(defcustom erc-track-exclude-types '("NICK")
"*List of message types to be ignored.
This list could look like '(\"JOIN\" \"PART\")."
@@ -151,6 +157,16 @@ If nil instead of a function, shortening is disabled."
:type '(choice (const :tag "Disabled")
function))
+(defcustom erc-track-list-changed-hook nil
+ "Hook that is run whenever the contents of
+`erc-modified-channels-alist' changes.
+
+This is useful for people that don't use the default mode-line
+notification but instead use a separate mechanism to provide
+notification of channel activity."
+ :group 'erc-track
+ :type 'hook)
+
(defcustom erc-track-use-faces t
"*Use faces in the mode-line.
The faces used are the same as used for text in the buffers.
@@ -192,12 +208,14 @@ Setting this variable only has effects in GNU Emacs versions above 21.3.
Choices are:
'before-modes - add to the beginning of `mode-line-modes'
'after-modes - add to the end of `mode-line-modes'
-
-Any other value means add to the end of `global-mode-string'."
+t - add to the end of `global-mode-string'.
+nil - don't add to mode line
+"
:group 'erc-track
:type '(choice (const :tag "Just before mode information" before-modes)
(const :tag "Just after mode information" after-modes)
- (const :tag "After all other information" nil))
+ (const :tag "After all other information" t)
+ (const :tag "Don't display in mode line" nil))
:set (lambda (sym val)
(set sym val)
(when (and (boundp 'erc-track-mode)
@@ -263,12 +281,18 @@ when there are no more active channels."
(defcustom erc-track-switch-direction 'oldest
"Direction `erc-track-switch-buffer' should switch.
+ importance - find buffer with the most important message
oldest - find oldest active buffer
newest - find newest active buffer
leastactive - find buffer with least unseen messages
- mostactive - find buffer with most unseen messages."
+ mostactive - find buffer with most unseen messages.
+
+If set to 'importance, the importance is determined by position
+in `erc-track-faces-priority-list', where first is most
+important."
:group 'erc-track
- :type '(choice (const oldest)
+ :type '(choice (const importance)
+ (const oldest)
(const newest)
(const leastactive)
(const mostactive)))
@@ -296,7 +320,7 @@ See `erc-track-position-in-mode-line' for possible values."
(boundp 'mode-line-modes))
(add-to-list 'mode-line-modes
'(t erc-modified-channels-object) t))
- (t
+ ((eq position t)
(when (not global-mode-string)
(setq global-mode-string '(""))) ; Padding for mode-line wart
(add-to-list 'global-mode-string
@@ -644,14 +668,21 @@ only consider active buffers visible.")
(setq erc-buffer-activity (erc-current-time))
(erc-track-modified-channels))
+(defun erc-track-get-buffer-window (buffer frame-param)
+ (if (eq frame-param 'selected-visible)
+ (if (eq (frame-visible-p (selected-frame)) t)
+ (get-buffer-window buffer nil)
+ nil)
+ (get-buffer-window buffer frame-param)))
+
(defun erc-buffer-visible (buffer)
"Return non-nil when the buffer is visible."
(if erc-track-when-inactive
(when erc-buffer-activity; could be nil
- (and (get-buffer-window buffer erc-track-visibility)
+ (and (erc-track-get-buffer-window buffer erc-track-visibility)
(<= (erc-time-diff erc-buffer-activity (erc-current-time))
erc-buffer-activity-timeout)))
- (get-buffer-window buffer erc-track-visibility)))
+ (erc-track-get-buffer-window buffer erc-track-visibility)))
;;; Tracking the channel modifications
@@ -668,18 +699,22 @@ called via `window-configuration-change-hook'.
ARGS are ignored."
(interactive)
(unless erc-modified-channels-update-inside
- (let ((erc-modified-channels-update-inside t))
- (mapcar (lambda (elt)
- (let ((buffer (car elt)))
- (when (or (not (bufferp buffer))
- (not (buffer-live-p buffer))
- (erc-buffer-visible buffer)
- (not (with-current-buffer buffer
- erc-server-connected)))
- (erc-modified-channels-remove-buffer buffer))))
- erc-modified-channels-alist)
+ (let ((erc-modified-channels-update-inside t)
+ (removed-channel nil))
+ (mapc (lambda (elt)
+ (let ((buffer (car elt)))
+ (when (or (not (bufferp buffer))
+ (not (buffer-live-p buffer))
+ (erc-buffer-visible buffer)
+ (and erc-track-remove-disconnected-buffers
+ (not (with-current-buffer buffer
+ erc-server-connected))))
+ (setq removed-channel t)
+ (erc-modified-channels-remove-buffer buffer))))
+ erc-modified-channels-alist)
+ (when removed-channel
(erc-modified-channels-display)
- (force-mode-line-update t))))
+ (force-mode-line-update t)))))
(defvar erc-track-mouse-face (if (featurep 'xemacs)
'modeline-mousable
@@ -729,10 +764,13 @@ If FACES are provided, color STRING with them."
"Set `erc-modified-channels-object'
according to `erc-modified-channels-alist'.
Use `erc-make-mode-line-buffer-name' to create buttons."
- (if (or
- (eq 'mostactive erc-track-switch-direction)
- (eq 'leastactive erc-track-switch-direction))
- (erc-track-sort-by-activest))
+ (cond ((or (eq 'mostactive erc-track-switch-direction)
+ (eq 'leastactive erc-track-switch-direction))
+ (erc-track-sort-by-activest))
+ ((eq 'importance erc-track-switch-direction)
+ (erc-track-sort-by-importance)))
+ (run-hooks 'erc-track-list-changed-hook)
+ (unless (eq erc-track-position-in-mode-line nil)
(if (null erc-modified-channels-alist)
(setq erc-modified-channels-object (erc-modified-channels-object nil))
;; erc-modified-channels-alist contains all the data we need. To
@@ -768,7 +806,7 @@ Use `erc-make-mode-line-buffer-name' to create buttons."
(when (featurep 'xemacs)
(erc-modified-channels-object nil))
(setq erc-modified-channels-object
- (erc-modified-channels-object strings)))))
+ (erc-modified-channels-object strings))))))
(defun erc-modified-channels-remove-buffer (buffer)
"Remove BUFFER from `erc-modified-channels-alist'."
@@ -802,8 +840,7 @@ is in `erc-mode'."
(if (and (not (erc-buffer-visible (current-buffer)))
(not (member this-channel erc-track-exclude))
(not (and erc-track-exclude-server-buffer
- (string= this-channel
- (buffer-name (erc-server-buffer)))))
+ (erc-server-buffer-p)))
(not (erc-message-type-member
(or (erc-find-parsed-property)
(point-min))
@@ -847,10 +884,10 @@ is in `erc-mode'."
(erc-modified-channels-display)))
;; Else if the active buffer is the current buffer, remove it
;; from our list.
- (when (or (erc-buffer-visible (current-buffer))
+ (when (and (or (erc-buffer-visible (current-buffer))
(and this-channel
- (assq (current-buffer) erc-modified-channels-alist)
(member this-channel erc-track-exclude)))
+ (assq (current-buffer) erc-modified-channels-alist))
;; Remove it from mode-line if buffer is visible or
;; channel was added to erc-track-exclude recently.
(erc-modified-channels-remove-buffer (current-buffer))
@@ -887,6 +924,29 @@ That means the number of unseen messages in a channel."
(sort erc-modified-channels-alist
(lambda (a b) (> (nth 1 a) (nth 1 b))))))
+(defun erc-track-face-priority (face)
+ "Return a number indicating the priority of FACE in
+`erc-track-faces-priority-list'. Lower number means higher
+priority.
+
+If face is not in `erc-track-faces-priority-list', it will have a
+higher number than any other face in that list."
+ (let ((count 0))
+ (catch 'done
+ (dolist (item erc-track-faces-priority-list)
+ (if (eq item face)
+ (throw 'done t)
+ (setq count (1+ count)))))
+ count))
+
+(defun erc-track-sort-by-importance ()
+ "Sort erc-modified-channels-alist by importance.
+That means the position of the face in `erc-track-faces-priority-list'."
+ (setq erc-modified-channels-alist
+ (sort erc-modified-channels-alist
+ (lambda (a b) (< (erc-track-face-priority (cddr a))
+ (erc-track-face-priority (cddr b)))))))
+
(defun erc-track-get-active-buffer (arg)
"Return the buffer name of ARG in `erc-modified-channels-alist'.
Negative arguments index in the opposite direction. This direction is
@@ -898,7 +958,8 @@ relative to `erc-track-switch-direction'"
(oldest 'newest)
(newest 'oldest)
(mostactive 'leastactive)
- (leastactive 'mostactive)))
+ (leastactive 'mostactive)
+ (importance 'oldest)))
(setq arg (- arg)))
(setq offset (case dir
((oldest leastactive)
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index d5480bd4b19..497b6ffd396 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -66,7 +66,7 @@
;;; Code:
-(defconst erc-version-string "Version 5.2"
+(defconst erc-version-string "Version 5.3 (devel)"
"ERC version. This is used by function `erc-version'.")
(eval-when-compile (require 'cl))
@@ -836,8 +836,9 @@ See `erc-server-flood-margin' for other flood-related parameters.")
;; Script parameters
(defcustom erc-startup-file-list
- '("~/.emacs.d/.ercrc.el" "~/.emacs.d/.ercrc"
- "~/.ercrc.el" "~/.ercrc" ".ercrc.el" ".ercrc")
+ (list (concat erc-user-emacs-directory ".ercrc.el")
+ (concat erc-user-emacs-directory ".ercrc")
+ "~/.ercrc.el" "~/.ercrc" ".ercrc.el" ".ercrc")
"List of files to try for a startup script.
The first existent and readable one will get executed.
@@ -1460,7 +1461,7 @@ Turning on `erc-mode' runs the hook `erc-mode-hook'."
(defconst erc-default-server "irc.freenode.net"
"IRC server to use if it cannot be detected otherwise.")
-(defconst erc-default-port "6667"
+(defconst erc-default-port 6667
"IRC port to use if it cannot be detected otherwise.")
(defcustom erc-join-buffer 'buffer
@@ -1491,6 +1492,14 @@ This only has effect when `erc-join-buffer' is set to `frame'."
:group 'erc-buffers
:type 'boolean)
+(defcustom erc-reuse-frames t
+ "*Determines whether new frames are always created.
+Non-nil means that a new frame is not created to display an ERC
+buffer if there is already a window displaying it. This only has
+effect when `erc-join-buffer' is set to `frame'."
+ :group 'erc-buffers
+ :type 'boolean)
+
(defun erc-channel-p (channel)
"Return non-nil if CHANNEL seems to be an IRC channel name."
(cond ((stringp channel)
@@ -1671,13 +1680,16 @@ nil."
;; Make the evaluation have the correct order
(let ((pre (make-symbol "pre"))
(pro (make-symbol "pro")))
- `(let ((,pro ,process)
- (,pre ,pred))
- (mapcar (lambda (buffer)
- (with-current-buffer buffer
- ,@forms))
- (erc-buffer-list ,pre
- ,pro)))))
+ `(let* ((,pro ,process)
+ (,pre ,pred)
+ (res (mapcar (lambda (buffer)
+ (with-current-buffer buffer
+ ,@forms))
+ (erc-buffer-list ,pre
+ ,pro))))
+ ;; Silence the byte-compiler by binding the result of mapcar to
+ ;; a variable.
+ res)))
(put 'erc-with-all-buffers-of-server 'lisp-indent-function 1)
(put 'erc-with-all-buffers-of-server 'edebug-form-spec '(form form body))
@@ -1888,14 +1900,16 @@ removed from the list will be disabled."
((eq erc-join-buffer 'bury)
nil)
((eq erc-join-buffer 'frame)
- (funcall '(lambda (frame)
+ (when (or (not erc-reuse-frames)
+ (not (get-buffer-window buffer t)))
+ ((lambda (frame)
(raise-frame frame)
(select-frame frame))
(make-frame (or erc-frame-alist
default-frame-alist)))
(switch-to-buffer buffer)
(when erc-frame-dedicated-flag
- (set-window-dedicated-p (selected-window) t)))
+ (set-window-dedicated-p (selected-window) t))))
(t
(if (active-minibuffer-window)
(display-buffer buffer)
@@ -2155,16 +2169,48 @@ Arguments are the same as for `erc'."
"Open an SSL stream to an IRC server.
The process will be given the name NAME, its target buffer will be
BUFFER. HOST and PORT specify the connection target."
- (when (require 'tls)
- (let ((proc (open-tls-stream name buffer host port)))
+ (when (condition-case nil
+ (require 'ssl)
+ (error (message "You don't have ssl.el. %s"
+ "Try using `erc-tls' instead.")
+ nil))
+ (let ((proc (open-ssl-stream name buffer host port)))
;; Ugly hack, but it works for now. Problem is it is
;; very hard to detect when ssl is established, because s_client
;; doesn't give any CONNECTIONESTABLISHED kind of message, and
;; most IRC servers send nothing and wait for you to identify.
- ;; Disabled when switching to tls.el -- jas
- ;(sit-for 5)
+ (sit-for 5)
proc)))
+(defun erc-tls (&rest r)
+ "Interactively select TLS connection parameters and run ERC.
+Arguments are the same as for `erc'."
+ (interactive (erc-select-read-args))
+ (let ((erc-server-connect-function 'erc-open-tls-stream))
+ (apply 'erc r)))
+
+(defun erc-open-tls-stream (name buffer host port)
+ "Open an TLS stream to an IRC server.
+The process will be given the name NAME, its target buffer will be
+BUFFER. HOST and PORT specify the connection target."
+ (when (condition-case nil
+ (require 'tls)
+ (error (message "You don't have tls.el. %s"
+ "Try using `erc-ssl' instead.")
+ nil))
+ (open-tls-stream name buffer host port)))
+
+;;; Displaying error messages
+
+(defun erc-error (&rest args)
+ "Pass ARGS to `format', and display the result as an error message.
+If `debug-on-error' is set to non-nil, then throw a real error with this
+message instead, to make debugging easier."
+ (if debug-on-error
+ (apply #'error args)
+ (apply #'message args)
+ (beep)))
+
;;; Debugging the protocol
(defvar erc-debug-irc-protocol nil
@@ -2228,7 +2274,7 @@ If ARG is non-nil, show the *erc-protocol* buffer."
(interactive "P")
(let* ((buf (get-buffer-create "*erc-protocol*")))
(with-current-buffer buf
- (erc-view-mode-enter 1)
+ (erc-view-mode-enter)
(when (null (current-local-map))
(let ((inhibit-read-only t))
(insert (erc-make-notice "This buffer displays all IRC protocol traffic exchanged with each server.\n"))
@@ -2456,6 +2502,14 @@ See also `erc-server-send'."
(match-string 1 arglist)
arglist)))
+(defun erc-command-no-process-p (str)
+ "Return non-nil if STR is an ERC command that can be run when the process
+is not alive, nil otherwise."
+ (let ((fun (erc-extract-command-from-line str)))
+ (and fun
+ (symbolp (car fun))
+ (get (car fun) 'process-not-needed))))
+
(defun erc-command-name (cmd)
"For CMD being the function name of a ERC command, something like
erc-cmd-FOO, this returns a string /FOO."
@@ -2565,6 +2619,7 @@ VALUE is computed by evaluating the rest of LINE in Lisp."
(defalias 'erc-cmd-VAR 'erc-cmd-SET)
(defalias 'erc-cmd-VARIABLE 'erc-cmd-SET)
(put 'erc-cmd-SET 'do-not-parse-args t)
+(put 'erc-cmd-SET 'process-not-needed t)
(defun erc-cmd-default (line)
"Fallback command.
@@ -2623,6 +2678,7 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
"Clear the window content."
(recenter 0)
t)
+(put 'erc-cmd-CLEAR 'process-not-needed t)
(defun erc-cmd-OPS ()
"Show the ops in the current channel."
@@ -2656,6 +2712,7 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
(erc-display-message
nil 'notice 'active 'country-unknown ?d tld))
t))
+(put 'erc-cmd-COUNTRY 'process-not-needed t)
(defun erc-cmd-AWAY (line)
"Mark the user as being away, the reason being indicated by LINE.
@@ -2736,6 +2793,7 @@ For a list of user commands (/join /part, ...):
t))
(defalias 'erc-cmd-H 'erc-cmd-HELP)
+(put 'erc-cmd-HELP 'process-not-needed t)
(defun erc-cmd-JOIN (channel &optional key)
"Join the channel given in CHANNEL, optionally with KEY.
@@ -2959,6 +3017,11 @@ LINE has the format \"USER ACTION\"."
(t nil)))
(put 'erc-cmd-ME 'do-not-parse-args t)
+(defun erc-cmd-ME\'S (line)
+ "Do a /ME command, but add the string \" 's\" to the beginning."
+ (erc-cmd-ME (concat " 's" line)))
+(put 'erc-cmd-ME\'S 'do-not-parse-args t)
+
(defun erc-cmd-LASTLOG (line)
"Show all lines in the current buffer matching the regexp LINE.
@@ -2973,6 +3036,7 @@ the matching is case-sensitive."
(occur line)
t)
(put 'erc-cmd-LASTLOG 'do-not-parse-args t)
+(put 'erc-cmd-LASTLOG 'process-not-needed t)
(defun erc-send-message (line &optional force)
"Send LINE to the current channel or user and display it.
@@ -3195,20 +3259,34 @@ the message given by REASON."
(defalias 'erc-cmd-EXIT 'erc-cmd-QUIT)
(defalias 'erc-cmd-SIGNOFF 'erc-cmd-QUIT)
(put 'erc-cmd-QUIT 'do-not-parse-args t)
+(put 'erc-cmd-QUIT 'process-not-needed t)
(defun erc-cmd-GQUIT (reason)
"Disconnect from all servers at once with the same quit REASON."
(erc-with-all-buffers-of-server nil #'erc-open-server-buffer-p
- (erc-cmd-QUIT reason)))
+ (erc-cmd-QUIT reason))
+ (when erc-kill-queries-on-quit
+ ;; if the query buffers have not been killed within 4 seconds,
+ ;; kill them
+ (run-at-time
+ 4 nil
+ (lambda ()
+ (dolist (buffer (erc-buffer-list (lambda (buf)
+ (not (erc-server-buffer-p buf)))))
+ (kill-buffer buffer)))))
+ t)
(defalias 'erc-cmd-GQ 'erc-cmd-GQUIT)
(put 'erc-cmd-GQUIT 'do-not-parse-args t)
+(put 'erc-cmd-GQUIT 'process-not-needed t)
(defun erc-cmd-RECONNECT ()
"Try to reconnect to the current IRC server."
- (let ((buffer (or (erc-server-buffer) (current-buffer)))
+ (let ((buffer (erc-server-buffer))
(process nil))
- (with-current-buffer (if (bufferp buffer) buffer (current-buffer))
+ (unless (buffer-live-p buffer)
+ (setq buffer (current-buffer)))
+ (with-current-buffer buffer
(setq erc-server-quitting nil)
(setq erc-server-reconnecting t)
(setq erc-server-reconnect-count 0)
@@ -3218,6 +3296,7 @@ the message given by REASON."
(erc-server-reconnect))
(setq erc-server-reconnecting nil)))
t)
+(put 'erc-cmd-RECONNECT 'process-not-needed t)
(defun erc-cmd-SERVER (server)
"Connect to SERVER, leaving existing connection intact."
@@ -3225,9 +3304,9 @@ the message given by REASON."
(condition-case nil
(erc :server server :nick (erc-current-nick))
(error
- (message "Cannot find host %s." server)
- (beep)))
+ (erc-error "Cannot find host %s." server)))
t)
+(put 'erc-cmd-SERVER 'process-not-needed t)
(eval-when-compile
(defvar motif-version-string)
@@ -3598,7 +3677,7 @@ If `point' is at the beginning of a channel name, use that as default."
(set-buffer (process-buffer erc-server-process))
erc-channel-list)))
(completing-read "Join channel: " table nil nil nil nil chnl))
- (when erc-prompt-for-channel-key
+ (when (or current-prefix-arg erc-prompt-for-channel-key)
(read-from-minibuffer "Channel key (RET for none): " nil))))
(erc-cmd-JOIN channel (when (>= (length key) 1) key)))
@@ -4411,33 +4490,65 @@ See also `erc-channel-begin-receiving-names'."
erc-channel-users)
(setq erc-channel-new-member-names nil))
+(defun erc-parse-prefix ()
+ "Return an alist of valid prefix character types and their representations.
+Example: (operator) o => @, (voiced) v => +."
+ (let ((str (or (cdr (assoc "PREFIX" (erc-with-server-buffer
+ erc-server-parameters)))
+ ;; provide a sane default
+ "(ov)@+"))
+ types chars)
+ (when (string-match "^(\\([^)]+\\))\\(.+\\)$" str)
+ (setq types (match-string 1 str)
+ chars (match-string 2 str))
+ (let ((len (min (length types) (length chars)))
+ (i 0)
+ (alist nil))
+ (while (< i len)
+ (setq alist (cons (cons (elt types i) (elt chars i))
+ alist))
+ (setq i (1+ i)))
+ alist))))
+
(defun erc-channel-receive-names (names-string)
"This function is for internal use only.
Update `erc-channel-users' according to NAMES-STRING.
NAMES-STRING is a string listing some of the names on the
channel."
- (let (names name op voice)
- ;; We need to delete "" because in XEmacs, (split-string "a ")
- ;; returns ("a" "").
- (setq names (delete "" (split-string names-string)))
- (let ((erc-channel-members-changed-hook nil))
- (dolist (item names)
- (cond ((string-match "^@\\(.*\\)$" item)
- (setq name (match-string 1 item)
- op 'on
- voice 'off))
- ((string-match "^+\\(.*\\)$" item)
- (setq name (match-string 1 item)
- op 'off
- voice 'on))
- (t (setq name item
- op 'off
- voice 'off)))
- (puthash (erc-downcase name) t
- erc-channel-new-member-names)
- (erc-update-current-channel-member
- name name t op voice)))
+ (let (prefix op-ch voice-ch names name op voice)
+ (setq prefix (erc-parse-prefix))
+ (setq op-ch (cdr (assq ?o prefix))
+ voice-ch (cdr (assq ?v prefix)))
+ ;; We need to delete "" because in XEmacs, (split-string "a ")
+ ;; returns ("a" "").
+ (setq names (delete "" (split-string names-string)))
+ (let ((erc-channel-members-changed-hook nil))
+ (dolist (item names)
+ (let ((updatep t)
+ ch)
+ (if (rassq (elt item 0) prefix)
+ (cond ((= (length item) 1)
+ (setq updatep nil))
+ ((eq (elt item 0) op-ch)
+ (setq name (substring item 1)
+ op 'on
+ voice 'off))
+ ((eq (elt item 0) voice-ch)
+ (setq name (substring item 1)
+ op 'off
+ voice 'on))
+ (t (setq name (substring item 1)
+ op 'off
+ voice 'off)))
+ (setq name item
+ op 'off
+ voice 'off))
+ (when updatep
+ (puthash (erc-downcase name) t
+ erc-channel-new-member-names)
+ (erc-update-current-channel-member
+ name name t op voice)))))
(run-hooks 'erc-channel-members-changed-hook)))
(defcustom erc-channel-members-changed-hook nil
@@ -4529,15 +4640,15 @@ See also: `erc-update-user' and `erc-update-channel-member'."
(setq changed t)
(setf (erc-channel-user-op cuser)
(cond ((eq op 'on) t)
- ((eq op 'off) nil)
- (t op))))
+ ((eq op 'off) nil)
+ (t op))))
(when (and voice
(not (eq (erc-channel-user-voice cuser) voice)))
(setq changed t)
(setf (erc-channel-user-voice cuser)
(cond ((eq voice 'on) t)
- ((eq voice 'off) nil)
- (t voice))))
+ ((eq voice 'off) nil)
+ (t voice))))
(when update-message-time
(setf (erc-channel-user-last-message-time cuser) (current-time)))
(setq user-changed
@@ -4559,11 +4670,11 @@ See also: `erc-update-user' and `erc-update-channel-member'."
(erc-server-user-buffers user))))
(setq cuser (make-erc-channel-user
:op (cond ((eq op 'on) t)
- ((eq op 'off) nil)
- (t op))
+ ((eq op 'off) nil)
+ (t op))
:voice (cond ((eq voice 'on) t)
- ((eq voice 'off) nil)
- (t voice))
+ ((eq voice 'off) nil)
+ (t voice))
:last-message-time
(if update-message-time (current-time))))
(puthash (erc-downcase nick) (cons user cuser)
@@ -4892,39 +5003,37 @@ Specifically, return the position of `erc-insert-marker'."
(interactive)
(save-restriction
(widen)
- (cond
- ((< (point) (erc-beg-of-input-line))
- (message "Point is not in the input area")
- (beep))
- ((not (erc-server-buffer-live-p))
- (message "ERC: No process running")
- (beep))
- (t
- (erc-set-active-buffer (current-buffer))
+ (if (< (point) (erc-beg-of-input-line))
+ (erc-error "Point is not in the input area")
(let ((inhibit-read-only t)
(str (erc-user-input))
(old-buf (current-buffer)))
-
- ;; Kill the input and the prompt
- (delete-region (erc-beg-of-input-line)
- (erc-end-of-input-line))
-
- (unwind-protect
- (erc-send-input str)
- ;; Fix the buffer if the command didn't kill it
- (when (buffer-live-p old-buf)
- (with-current-buffer old-buf
- (save-restriction
- (widen)
- (goto-char (point-max))
- (set-marker (process-mark erc-server-process) (point))
- (set-marker erc-insert-marker (point))
- (let ((buffer-modified (buffer-modified-p)))
- (erc-display-prompt)
- (set-buffer-modified-p buffer-modified))))))
-
- ;; Only when last hook has been run...
- (run-hook-with-args 'erc-send-completed-hook str))))))
+ (if (and (not (erc-server-buffer-live-p))
+ (not (erc-command-no-process-p str)))
+ (erc-error "ERC: No process running")
+ (erc-set-active-buffer (current-buffer))
+
+ ;; Kill the input and the prompt
+ (delete-region (erc-beg-of-input-line)
+ (erc-end-of-input-line))
+
+ (unwind-protect
+ (erc-send-input str)
+ ;; Fix the buffer if the command didn't kill it
+ (when (buffer-live-p old-buf)
+ (with-current-buffer old-buf
+ (save-restriction
+ (widen)
+ (goto-char (point-max))
+ (when (processp erc-server-process)
+ (set-marker (process-mark erc-server-process) (point)))
+ (set-marker erc-insert-marker (point))
+ (let ((buffer-modified (buffer-modified-p)))
+ (erc-display-prompt)
+ (set-buffer-modified-p buffer-modified))))))
+
+ ;; Only when last hook has been run...
+ (run-hook-with-args 'erc-send-completed-hook str))))))
(defun erc-user-input ()
"Return the input of the user in the current buffer."
@@ -4932,7 +5041,7 @@ Specifically, return the position of `erc-insert-marker'."
erc-input-marker
(erc-end-of-input-line)))
-(defvar erc-command-regexp "^/\\([A-Za-z]+\\)\\(\\s-+.*\\|\\s-*\\)$"
+(defvar erc-command-regexp "^/\\([A-Za-z']+\\)\\(\\s-+.*\\|\\s-*\\)$"
"Regular expression used for matching commands in ERC.")
(defun erc-send-input (input)
@@ -4985,7 +5094,8 @@ This returns non-nil only if we actually send anything."
(erc-put-text-property beg (point)
'face 'erc-command-indicator-face)
(insert "\n"))
- (set-marker (process-mark erc-server-process) (point))
+ (when (processp erc-server-process)
+ (set-marker (process-mark erc-server-process) (point)))
(set-marker erc-insert-marker (point))
(save-excursion
(save-restriction
@@ -5004,7 +5114,8 @@ current position."
(erc-put-text-property beg (point)
'face 'erc-input-face))
(insert "\n")
- (set-marker (process-mark erc-server-process) (point))
+ (when (processp erc-server-process)
+ (set-marker (process-mark erc-server-process) (point)))
(set-marker erc-insert-marker (point))
(save-excursion
(save-restriction
diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el
index 7247033a235..8672885cc60 100644
--- a/lisp/eshell/em-cmpl.el
+++ b/lisp/eshell/em-cmpl.el
@@ -296,7 +296,7 @@ to writing a completion function."
(define-key eshell-mode-map [tab] 'pcomplete)
(define-key eshell-mode-map [(control ?i)] 'pcomplete)
;; jww (1999-10-19): Will this work on anything but X?
- (if (eshell-under-xemacs-p)
+ (if (featurep 'xemacs)
(define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse)
(define-key eshell-mode-map [(shift iso-lefttab)] 'pcomplete-reverse)
(define-key eshell-mode-map [(shift control ?i)] 'pcomplete-reverse))
diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el
index 5d68fdf9437..2e95aaefae0 100644
--- a/lisp/eshell/em-glob.el
+++ b/lisp/eshell/em-glob.el
@@ -258,7 +258,7 @@ the form:
(eshell-glob-entries (file-name-as-directory ".") paths))
(if message-shown
(message nil)))
- (or (and matches (nreverse matches))
+ (or (and matches (sort matches #'string<))
(if eshell-error-if-no-glob
(error "No matches found: %s" glob)
glob))))
@@ -267,6 +267,7 @@ the form:
(defvar matches)
(defvar message-shown))
+;; FIXME does this really need to abuse matches, message-shown?
(defun eshell-glob-entries (path globs &optional recurse-p)
"Glob the entries in PATHS, possibly recursing if RECURSE-P is non-nil."
(let* ((entries (ignore-errors
diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el
index 4c258f1dae5..dc5ef908e56 100644
--- a/lisp/eshell/em-unix.el
+++ b/lisp/eshell/em-unix.el
@@ -78,7 +78,7 @@ receiving side of a command pipeline."
:type 'boolean
:group 'eshell-unix)
-(defcustom eshell-plain-locate-behavior (eshell-under-xemacs-p)
+(defcustom eshell-plain-locate-behavior (featurep 'xemacs)
"*If non-nil, standalone \"locate\" commands will behave normally.
Standalone in this context means not redirected, and not on the
receiving side of a command pipeline."
@@ -168,6 +168,35 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine."
(put 'eshell/man 'eshell-no-numeric-conversions t)
+(defun eshell/info (&rest args)
+ "Run the info command in-frame with the same behavior as command-line `info', ie:
+ 'info' => goes to top info window
+ 'info arg1' => IF arg1 is a file, then visits arg1
+ 'info arg1' => OTHERWISE goes to top info window and then menu item arg1
+ 'info arg1 arg2' => does action for arg1 (either visit-file or menu-item) and then menu item arg2
+ etc."
+ (eval-and-compile (require 'info))
+ (let ((file (cond
+ ((not (stringp (car args)))
+ nil)
+ ((file-exists-p (expand-file-name (car args)))
+ (expand-file-name (car args)))
+ ((file-exists-p (concat (expand-file-name (car args)) ".info"))
+ (concat (expand-file-name (car args)) ".info")))))
+
+ ;; If the first arg is a file, then go to that file's Top node
+ ;; Otherwise, go to the global directory
+ (if file
+ (progn
+ (setq args (cdr args))
+ (Info-find-node file "Top"))
+ (Info-directory))
+
+ ;; Treat all remaining args as menu references
+ (while args
+ (Info-menu (car args))
+ (setq args (cdr args)))))
+
(defun eshell-remove-entries (path files &optional top-level)
"From PATH, remove all of the given FILES, perhaps interactively."
(while files
@@ -945,6 +974,12 @@ Show wall-clock time elapsed during execution of COMMAND.")
(if eshell-diff-window-config
(set-window-configuration eshell-diff-window-config)))
+(defun nil-blank-string (string)
+ "Return STRING, or nil if STRING contains only non-blank characters."
+ (cond
+ ((string-match "[^[:blank:]]" string) string)
+ (nil)))
+
(defun eshell/diff (&rest args)
"Alias \"diff\" to call Emacs `diff' function."
(let ((orig-args (eshell-stringify-list (eshell-flatten-list args))))
@@ -966,7 +1001,8 @@ Show wall-clock time elapsed during execution of COMMAND.")
(setcdr (last args 3) nil))
(with-current-buffer
(condition-case err
- (diff old new (eshell-flatten-and-stringify args))
+ (diff old new
+ (nil-blank-string (eshell-flatten-and-stringify args)))
(error
(throw 'eshell-replace-command
(eshell-parse-command "*diff" orig-args))))
diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el
index f999bdcdf6d..8738ceb39b6 100644
--- a/lisp/eshell/esh-cmd.el
+++ b/lisp/eshell/esh-cmd.el
@@ -222,7 +222,7 @@ return non-nil if the command is complex."
;;; Code:
(require 'esh-util)
-(unless (eshell-under-xemacs-p)
+(unless (featurep 'xemacs)
(require 'eldoc))
(require 'esh-arg)
(require 'esh-proc)
diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el
index 11090f97b83..7e3e8ac9e09 100644
--- a/lisp/eshell/esh-ext.el
+++ b/lisp/eshell/esh-ext.el
@@ -211,7 +211,7 @@ causing the user to wonder if anything's really going on..."
(find-file-name-handler default-directory
'shell-command))))
(if (and handler
- (not (and (eshell-under-xemacs-p)
+ (not (and (featurep 'xemacs)
(eq handler 'dired-handler-fn))))
(eshell-remote-command handler command args))
(let ((interp (eshell-find-interpreter command)))
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 203bab86924..b30c1a80539 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -222,11 +222,6 @@ This is used by `eshell-watch-for-password-prompt'."
(define-abbrev-table 'eshell-mode-abbrev-table ())
-(eval-when-compile
- (unless (eshell-under-xemacs-p)
- (defalias 'characterp 'ignore)
- (defalias 'char-int 'ignore)))
-
(if (not eshell-mode-syntax-table)
(let ((i 0))
(setq eshell-mode-syntax-table (make-syntax-table))
@@ -269,7 +264,7 @@ This is used by `eshell-watch-for-password-prompt'."
(modify-syntax-entry ?\[ "(] " eshell-mode-syntax-table)
(modify-syntax-entry ?\] ")[ " eshell-mode-syntax-table)
;; All non-word multibyte characters should be `symbol'.
- (if (eshell-under-xemacs-p)
+ (if (featurep 'xemacs)
(map-char-table
(function
(lambda (key val)
@@ -467,7 +462,7 @@ This is used by `eshell-watch-for-password-prompt'."
(eshell-deftest mode command-running-p
"Modeline shows no command running"
- (or (eshell-under-xemacs-p)
+ (or (featurep 'xemacs)
(not eshell-status-in-modeline)
(and (memq 'eshell-command-running-string mode-line-format)
(equal eshell-command-running-string "--"))))
@@ -1076,7 +1071,7 @@ This function could be in the list `eshell-output-filter-functions'."
(defun eshell-handle-ansi-color ()
"Handle ANSI color codes."
- (require 'ansi-color)
+ (eval-and-compile (require 'ansi-color))
(ansi-color-apply-on-region eshell-last-output-start
eshell-last-output-end))
diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el
index 17067197909..4ae741a9e66 100644
--- a/lisp/eshell/esh-module.el
+++ b/lisp/eshell/esh-module.el
@@ -68,7 +68,9 @@ customizing the variable `eshell-modules-list'."
(if defgroup
(insert defgroup "\n\n")))
(setq files (cdr files))))
- (save-buffer))))
+ ;; Don't make backups, to avoid prompting the user if there are
+ ;; excess backup versions.
+ (save-buffer 0))))
;; load the defgroup's for the standard extension modules, so that
;; documentation can be provided when the user customize's
diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el
index 41e12e70b43..121f568a9c4 100644
--- a/lisp/eshell/esh-opt.el
+++ b/lisp/eshell/esh-opt.el
@@ -58,6 +58,7 @@ BODY-FORMS. If instead an external command is run, the tag
Lastly, any remaining arguments will be available in a locally
interned variable `args' (created using a `let' form)."
+ (declare (debug (form form sexp body)))
`(let ((temp-args
,(if (memq ':preserve-args (cadr options))
macro-args
@@ -101,7 +102,7 @@ This code doesn't really need to be macro expanded everywhere."
nil))
(error "%s" usage-msg))))
(throw 'eshell-external
- (eshell-external-command ext-command args))
+ (eshell-external-command ext-command args))
last-value))
(defun eshell-show-usage (name options)
diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el
index 25afdc38506..a0495a67434 100644
--- a/lisp/eshell/esh-util.el
+++ b/lisp/eshell/esh-util.el
@@ -139,10 +139,6 @@ function `string-to-number'."
;;; Functions:
-(defsubst eshell-under-xemacs-p ()
- "Return non-nil if we are running under XEmacs."
- (boundp 'xemacs-logo))
-
(defsubst eshell-under-windows-p ()
"Return non-nil if we are running under MS-DOS/Windows."
(memq system-type '(ms-dos windows-nt)))
diff --git a/lisp/facemenu.el b/lisp/facemenu.el
index 26a0231bf1a..968a115c5d1 100644
--- a/lisp/facemenu.el
+++ b/lisp/facemenu.el
@@ -516,7 +516,7 @@ argument BUFFER-NAME is nil, it defaults to *Colors*."
(let ((lc (nthcdr (1- (display-color-cells)) list)))
(if lc
(setcdr lc nil)))))
- (with-output-to-temp-buffer (or buffer-name "*Colors*")
+ (with-help-window (or buffer-name "*Colors*")
(save-excursion
(set-buffer standard-output)
(setq truncate-lines t)
diff --git a/lisp/faces.el b/lisp/faces.el
index ceadb6f764f..88b0c54039a 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -222,11 +222,12 @@ Value is FACE."
(defun face-id (face &optional frame)
"Return the internal ID of face with name FACE.
+If FACE is a face-alias, return the ID of the target face.
The optional argument FRAME is ignored, since the internal face ID
of a face name is the same for all frames."
(check-face face)
- (get face 'face))
-
+ (or (get face 'face)
+ (face-id (get face 'face-alias))))
(defun face-equal (face1 face2 &optional frame)
"Non-nil if faces FACE1 and FACE2 are equal.
@@ -931,7 +932,7 @@ an integer value."
(let ((valid
(case attribute
(:family
- (if window-system
+ (if (window-system frame)
(mapcar #'(lambda (x) (cons (car x) (car x)))
(x-font-family-list))
;; Only one font on TTYs.
@@ -940,7 +941,7 @@ an integer value."
(mapcar #'(lambda (x) (cons (symbol-name x) x))
(internal-lisp-face-attribute-values attribute)))
((:underline :overline :strike-through :box)
- (if window-system
+ (if (window-system frame)
(nconc (mapcar #'(lambda (x) (cons (symbol-name x) x))
(internal-lisp-face-attribute-values attribute))
(mapcar #'(lambda (c) (cons c c))
@@ -953,7 +954,7 @@ an integer value."
((:height)
'integerp)
(:stipple
- (and (memq window-system '(x w32 mac))
+ (and (memq (window-system frame) '(x w32 mac))
(mapcar #'list
(apply #'nconc
(mapcar (lambda (dir)
@@ -1071,7 +1072,7 @@ of a global face. Value is the new attribute value."
;; explicitly in VALID, using color approximation code
;; in tty-colors.el.
(when (and (memq attribute '(:foreground :background))
- (not (memq window-system '(x w32 mac)))
+ (not (memq (window-system frame) '(x w32 mac)))
(not (member new-value
'("unspecified"
"unspecified-fg" "unspecified-bg"))))
@@ -1193,7 +1194,7 @@ arg, prompt for a regular expression."
(error "No faces matching \"%s\"" regexp))
(setq max-length (1+ max-length)
line-format (format "%%-%ds" max-length))
- (with-output-to-temp-buffer "*Faces*"
+ (with-help-window "*Faces*"
(save-excursion
(set-buffer standard-output)
(setq truncate-lines t)
@@ -1234,8 +1235,7 @@ arg, prompt for a regular expression."
(while (not (eobp))
(insert-char ?\s max-length)
(forward-line 1))))
- (goto-char (point-min)))
- (print-help-return-message))
+ (goto-char (point-min))))
;; If the *Faces* buffer appears in a different frame,
;; copy all the face definitions from FRAME,
;; so that the display will reflect the frame that was selected.
@@ -1280,10 +1280,11 @@ If FRAME is omitted or nil, use the selected frame."
(setq face 'default))
(if (not (listp face))
(setq face (list face)))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(save-excursion
(set-buffer standard-output)
(dolist (f face)
+ (if (stringp f) (setq f (intern f)))
(insert "Face: " (symbol-name f))
(if (not (facep f))
(insert " undefined face.\n")
@@ -1326,8 +1327,7 @@ If FRAME is omitted or nil, use the selected frame."
(re-search-backward ": \\([^:]+\\)" nil t)
(help-xref-button 1 'help-face attr)))
(insert "\n")))))
- (terpri)))
- (print-help-return-message))))
+ (terpri))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1367,14 +1367,14 @@ If FRAME is nil, the current FRAME is used."
req (car conjunct)
options (cdr conjunct)
match (cond ((eq req 'type)
- (or (memq window-system options)
+ (or (memq (window-system frame) options)
;; FIXME: This should be revisited to use
;; display-graphic-p, provided that the
;; color selection depends on the number
;; of supported colors, and all defface's
;; are changed to look at number of colors
;; instead of (type graphic) etc.
- (and (null window-system)
+ (and (null (window-system frame))
(memq 'tty options))
(and (memq 'motif options)
(featurep 'motif))
@@ -1443,31 +1443,42 @@ If SPEC is nil, return nil."
(defun face-spec-set (face spec &optional frame)
"Set FACE's attributes according to the first matching entry in SPEC.
FRAME is the frame whose frame-local face is set. FRAME nil means
-do it on all frames. See `defface' for information about SPEC.
-If SPEC is nil, do nothing."
+do it on all frames (and change the default for new frames).
+See `defface' for information about SPEC. If SPEC is nil, do nothing."
(let ((attrs (face-spec-choose spec frame)))
(when spec
- (face-spec-reset-face face frame))
+ (face-spec-reset-face face (or frame t)))
(while attrs
(let ((attribute (car attrs))
(value (car (cdr attrs))))
;; Support some old-style attribute names and values.
(case attribute
- (:bold (setq attribute :weight value (if value 'bold 'normal)))
- (:italic (setq attribute :slant value (if value 'italic 'normal)))
- ((:foreground :background)
- ;; Compatibility with 20.x. Some bogus face specs seem to
- ;; exist containing things like `:foreground nil'.
- (if (null value) (setq value 'unspecified)))
- (t (unless (assq attribute face-x-resources)
- (setq attribute nil))))
+ (:bold (setq attribute :weight value (if value 'bold 'normal)))
+ (:italic (setq attribute :slant value (if value 'italic 'normal)))
+ ((:foreground :background)
+ ;; Compatibility with 20.x. Some bogus face specs seem to
+ ;; exist containing things like `:foreground nil'.
+ (if (null value) (setq value 'unspecified)))
+ (t (unless (assq attribute face-x-resources)
+ (setq attribute nil))))
(when attribute
- (set-face-attribute face frame attribute value)))
+ ;; If frame is nil, set the default for new frames.
+ ;; Existing frames are handled below.
+ (set-face-attribute face (or frame t) attribute value)))
(setq attrs (cdr (cdr attrs)))))
- ;; When we reset the face based on its spec, then it is unmodified
- ;; as far as Custom is concerned.
- (if (null frame)
- (put (or (get face 'face-alias) face) 'face-modified nil)))
+ (unless frame
+ ;; When we reset the face based on its spec, then it is unmodified
+ ;; as far as Custom is concerned.
+ (put (or (get face 'face-alias) face) 'face-modified nil)
+;;; ;; Clear all the new-frame defaults for this face.
+;;; ;; face-spec-reset-face won't do it right.
+;;; (let ((facevec (cdr (assq face face-new-frame-defaults))))
+;;; (dotimes (i (length facevec))
+;;; (unless (= i 0)
+;;; (aset facevec i 'unspecified))))
+ ;; Set each frame according to the rules implied by SPEC.
+ (dolist (frame (frame-list))
+ (face-spec-set face spec frame))))
(defun face-attr-match-p (face attrs &optional frame)
@@ -1569,6 +1580,140 @@ If omitted or nil, that stands for the selected frame's display."
(t
(> (tty-color-gray-shades display) 2)))))
+(defun read-color (&optional prompt convert-to-RGB-p allow-empty-name-p msg-p)
+ "Read a color name or RGB hex value: #RRRRGGGGBBBB.
+Completion is available for color names, but not for RGB hex strings.
+If the user inputs an RGB hex string, it must have the form
+#XXXXXXXXXXXX or XXXXXXXXXXXX, where each X is a hex digit. The
+number of Xs must be a multiple of 3, with the same number of Xs for
+each of red, green, and blue. The order is red, green, blue.
+
+In addition to standard color names and RGB hex values, the following
+are available as color candidates. In each case, the corresponding
+color is used.
+
+ * `foreground at point' - foreground under the cursor
+ * `background at point' - background under the cursor
+
+Checks input to be sure it represents a valid color. If not, raises
+an error (but see exception for empty input with non-nil
+ALLOW-EMPTY-NAME-P).
+
+Optional arg PROMPT is the prompt; if nil, uses a default prompt.
+
+Interactively, or with optional arg CONVERT-TO-RGB-P non-nil, converts
+an input color name to an RGB hex string. Returns the RGB hex string.
+
+Optional arg ALLOW-EMPTY-NAME-P controls what happens if the user
+enters an empty color name (that is, just hits `RET'). If non-nil,
+then returns an empty color name, \"\". If nil, then raises an error.
+Programs must test for \"\" if ALLOW-EMPTY-NAME-P is non-nil. They
+can then perform an appropriate action in case of empty input.
+
+Interactively, or with optional arg MSG-P non-nil, echoes the color in
+a message."
+ (interactive "i\np\ni\np") ; Always convert to RGB interactively.
+ (let* ((completion-ignore-case t)
+ (colors (append '("foreground at point" "background at point")
+ (defined-colors)))
+ (color (completing-read (or prompt "Color (name or #R+G+B+): ")
+ colors))
+ hex-string)
+ (cond ((string= "foreground at point" color)
+ (setq color (foreground-color-at-point)))
+ ((string= "background at point" color)
+ (setq color (background-color-at-point))))
+ (unless color
+ (setq color ""))
+ (setq hex-string
+ (string-match "^#?\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color))
+ (if (and allow-empty-name-p (string= "" color))
+ ""
+ (when (and hex-string (not (eq (aref color 0) ?#)))
+ (setq color (concat "#" color))) ; No #; add it.
+ (unless hex-string
+ (when (or (string= "" color) (not (test-completion color colors)))
+ (error "No such color: %S" color))
+ (when convert-to-RGB-p
+ (let ((components (x-color-values color)))
+ (unless components (error "No such color: %S" color))
+ (unless (string-match "^#\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color)
+ (setq color (format "#%04X%04X%04X"
+ (logand 65535 (nth 0 components))
+ (logand 65535 (nth 1 components))
+ (logand 65535 (nth 2 components))))))))
+ (when msg-p (message "Color: `%s'" color))
+ color)))
+
+;; Commented out because I decided it is better to include the
+;; duplicates in read-color's completion list.
+
+;; (defun defined-colors-without-duplicates ()
+;; "Return the list of defined colors, without the no-space versions.
+;; For each color name, we keep the variant that DOES have spaces."
+;; (let ((result (copy-sequence (defined-colors)))
+;; to-be-rejected)
+;; (save-match-data
+;; (dolist (this result)
+;; (if (string-match " " this)
+;; (push (replace-regexp-in-string " " ""
+;; this)
+;; to-be-rejected)))
+;; (dolist (elt to-be-rejected)
+;; (let ((as-found (car (member-ignore-case elt result))))
+;; (setq result (delete as-found result)))))
+;; result))
+
+(defun face-at-point ()
+ "Return the face of the character after point.
+If it has more than one face, return the first one.
+Return nil if it has no specified face."
+ (let* ((faceprop (or (get-char-property (point) 'read-face-name)
+ (get-char-property (point) 'face)
+ 'default))
+ (face (cond ((symbolp faceprop) faceprop)
+ ;; List of faces (don't treat an attribute spec).
+ ;; Just use the first face.
+ ((and (consp faceprop) (not (keywordp (car faceprop)))
+ (not (memq (car faceprop)
+ '(foreground-color background-color))))
+ (car faceprop))
+ (t nil)))) ; Invalid face value.
+ (if (facep face) face nil)))
+
+(defun foreground-color-at-point ()
+ "Return the foreground color of the character after point."
+ ;; `face-at-point' alone is not sufficient. It only gets named faces.
+ ;; Need also pick up any face properties that are not associated with named faces.
+ (let ((face (or (face-at-point)
+ (get-char-property (point) 'read-face-name)
+ (get-char-property (point) 'face))))
+ (cond ((and face (symbolp face))
+ (let ((value (face-foreground face nil 'default)))
+ (if (member value '("unspecified-fg" "unspecified-bg"))
+ nil
+ value)))
+ ((consp face)
+ (cond ((memq 'foreground-color face) (cdr (memq 'foreground-color face)))
+ ((memq ':foreground face) (cadr (memq ':foreground face)))))
+ (t nil)))) ; Invalid face value.
+
+(defun background-color-at-point ()
+ "Return the background color of the character after point."
+ ;; `face-at-point' alone is not sufficient. It only gets named faces.
+ ;; Need also pick up any face properties that are not associated with named faces.
+ (let ((face (or (face-at-point)
+ (get-char-property (point) 'read-face-name)
+ (get-char-property (point) 'face))))
+ (cond ((and face (symbolp face))
+ (let ((value (face-background face nil 'default)))
+ (if (member value '("unspecified-fg" "unspecified-bg"))
+ nil
+ value)))
+ ((consp face)
+ (cond ((memq 'background-color face) (cdr (memq 'background-color face)))
+ ((memq ':background face) (cadr (memq ':background face)))))
+ (t nil)))) ; Invalid face value.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Background mode.
@@ -1589,35 +1734,40 @@ variable with `setq'; this won't have the expected effect."
(const light)
(const :tag "automatic" nil)))
-(defvar default-frame-background-mode nil
- "Internal variable for the default brightness of the background.
-Emacs sets it automatically depending on the terminal type.
-The value `nil' means `dark'. If Emacs runs in non-windowed
-mode from `xterm' or a similar terminal emulator, the value is
-`light'. On rxvt terminals, the value depends on the environment
-variable COLORFGBG.")
(defun frame-set-background-mode (frame)
"Set up display-dependent faces on FRAME.
Display-dependent faces are those which have different definitions
according to the `background-mode' and `display-type' frame parameters."
(let* ((bg-resource
- (and window-system
+ (and (window-system frame)
(x-get-resource "backgroundMode" "BackgroundMode")))
(bg-color (frame-parameter frame 'background-color))
+ (terminal-bg-mode (terminal-parameter frame 'background-mode))
+ (tty-type (tty-type frame))
(bg-mode
(cond (frame-background-mode)
(bg-resource
(intern (downcase bg-resource)))
- ((and (null window-system) (null bg-color))
- ;; No way to determine this automatically (?).
- (or default-frame-background-mode 'dark))
- ;; Unspecified frame background color can only happen
- ;; on tty's.
- ((member bg-color '(unspecified "unspecified-bg"))
- (or default-frame-background-mode 'dark))
+ (terminal-bg-mode)
+ ((and (null (window-system frame))
+ ;; Unspecified frame background color can only
+ ;; happen on tty's.
+ (member bg-color '(nil unspecified "unspecified-bg")))
+ ;; There is no way to determine the background mode
+ ;; automatically, so we make a guess based on the
+ ;; terminal type.
+ (if (and tty-type
+ (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)"
+ tty-type))
+ 'light
+ 'dark))
((equal bg-color "unspecified-fg") ; inverted colors
- (if (eq default-frame-background-mode 'light) 'dark 'light))
+ (if (and tty-type
+ (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)"
+ tty-type))
+ 'dark
+ 'light))
((>= (apply '+ (color-values bg-color frame))
;; Just looking at the screen, colors whose
;; values add up to .6 of the white total
@@ -1626,7 +1776,7 @@ according to the `background-mode' and `display-type' frame parameters."
'light)
(t 'dark)))
(display-type
- (cond ((null window-system)
+ (cond ((null (window-system frame))
(if (tty-display-color-p frame) 'color 'mono))
((display-color-p frame)
'color)
@@ -1722,15 +1872,19 @@ the X resource ``reverseVideo'' is present, handle that.
Value is the new frame created."
(setq parameters (x-handle-named-frame-geometry parameters))
(let ((visibility-spec (assq 'visibility parameters))
- (frame-list (frame-list))
- (frame (x-create-frame (cons '(visibility . nil) parameters)))
+ (frame (x-create-frame `((visibility . nil) . ,parameters)))
success)
(unwind-protect
(progn
+ (x-setup-function-keys frame)
(x-handle-reverse-video frame parameters)
(frame-set-background-mode frame)
(face-set-after-frame-default frame)
- (if (or (null frame-list) (null visibility-spec))
+ ;; Make sure the tool-bar is ready to be enabled. The
+ ;; `tool-bar-lines' frame parameter will not take effect
+ ;; without this call.
+ (tool-bar-setup frame)
+ (if (null visibility-spec)
(make-frame-visible frame)
(modify-frame-parameters frame (list visibility-spec)))
(setq success t))
@@ -1789,7 +1943,7 @@ Initialize colors of certain faces from frame parameters."
(condition-case ()
(progn
(face-spec-set face (face-user-default-spec face) frame)
- (if (memq window-system '(x w32 mac))
+ (if (memq (window-system frame) '(x w32 mac))
(make-face-x-resource-internal face frame))
(internal-merge-in-global-face face frame))
(error nil)))
@@ -1825,8 +1979,13 @@ created."
(let ((frame (make-terminal-frame parameters))
success)
(unwind-protect
- (progn
+ (with-selected-frame frame
(tty-handle-reverse-video frame (frame-parameters frame))
+
+ (unless (terminal-parameter frame 'terminal-initted)
+ (set-terminal-parameter frame 'terminal-initted t)
+ (set-locale-environment nil frame)
+ (tty-run-terminal-initialization frame))
(frame-set-background-mode frame)
(face-set-after-frame-default frame)
(setq success t))
@@ -1834,6 +1993,49 @@ created."
(delete-frame frame)))
frame))
+(defun tty-find-type (pred type)
+ "Return the longest prefix of TYPE to which PRED returns non-nil.
+TYPE should be a tty type name such as \"xterm-16color\".
+
+The function tries only those prefixes that are followed by a
+dash or underscore in the original type name, like \"xterm\" in
+the above example."
+ (let (hyphend)
+ (while (and type
+ (not (funcall pred type)))
+ ;; Strip off last hyphen and what follows, then try again
+ (setq type
+ (if (setq hyphend (string-match "[-_][^-_]+$" type))
+ (substring type 0 hyphend)
+ nil))))
+ type)
+
+(defun tty-run-terminal-initialization (frame &optional type)
+ "Run the special initialization code for the terminal type of FRAME.
+The optional TYPE parameter may be used to override the autodetected
+terminal type to a different value."
+ (setq type (or type (tty-type frame)))
+ ;; Load library for our terminal type.
+ ;; User init file can set term-file-prefix to nil to prevent this.
+ (with-selected-frame frame
+ (unless (null term-file-prefix)
+ (let* (term-init-func)
+ ;; First, load the terminal initialization file, if it is
+ ;; available and it hasn't been loaded already.
+ (tty-find-type #'(lambda (type)
+ (let ((file (locate-library (concat term-file-prefix type))))
+ (and file
+ (or (assoc file load-history)
+ (load file t t)))))
+ type)
+ ;; Next, try to find a matching initialization function, and call it.
+ (tty-find-type #'(lambda (type)
+ (fboundp (setq term-init-func
+ (intern (concat "terminal-init-" type)))))
+ type)
+ (when (fboundp term-init-func)
+ (funcall term-init-func))
+ (set-terminal-parameter frame 'terminal-initted term-init-func)))))
;; Called from C function init_display to initialize faces of the
;; dumped terminal frame on startup.
diff --git a/lisp/ffap.el b/lisp/ffap.el
index e9ef3e10237..8c338bd947a 100644
--- a/lisp/ffap.el
+++ b/lisp/ffap.el
@@ -482,7 +482,7 @@ Returned values:
"In remote FULLNAME, replace path with NAME. May return nil."
;; Use ange-ftp or efs if loaded, but do not load them otherwise.
(let (found)
- (mapcar
+ (mapc
(function (lambda (sym) (and (fboundp sym) (setq found sym))))
'(
efs-replace-path-component
@@ -1793,7 +1793,11 @@ ffap most of the time."
;; Extra complication for the temporary highlighting.
(unwind-protect
(ffap-read-file-or-url
- (if ffap-url-regexp "Dired file or URL: " "Dired file: ")
+ (cond
+ ((eq ffap-directory-finder 'list-directory)
+ "List directory (brief): ")
+ (ffap-url-regexp "Dired file or URL: ")
+ (t "Dired file: "))
(prog1
(setq guess (or guess
(let ((guess (ffap-guesser)))
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 30c3e50e6af..5138c947b7d 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -280,11 +280,11 @@ be added to the cache."
(dir-files (directory-files dir t regexp))
)
;; Filter out files we don't want to see
- (mapcar
+ (mapc
'(lambda (file)
(if (file-directory-p file)
(setq dir-files (delq file dir-files))
- (mapcar
+ (mapc
'(lambda (regexp)
(if (string-match regexp file)
(setq dir-files (delq file dir-files))))
@@ -386,7 +386,7 @@ in each directory, not to the directory list itself."
(lambda(file)
(or (file-directory-p file)
(let (filtered)
- (mapcar
+ (mapc
(function
(lambda(regexp)
(and (string-match regexp file)
@@ -402,7 +402,7 @@ in each directory, not to the directory list itself."
Each entry matches the regular expression `file-cache-buffer-default-regexp'
or the optional REGEXP argument."
(set-buffer file-cache-buffer)
- (mapcar
+ (mapc
(function (lambda (elt)
(goto-char (point-min))
(delete-matching-lines elt)))
@@ -443,10 +443,10 @@ or the optional REGEXP argument."
"Delete files matching REGEXP from the file cache."
(interactive "sRegexp: ")
(let ((delete-list))
- (mapcar '(lambda (elt)
- (and (string-match regexp (car elt))
- (setq delete-list (cons (car elt) delete-list))))
- file-cache-alist)
+ (mapc '(lambda (elt)
+ (and (string-match regexp (car elt))
+ (setq delete-list (cons (car elt) delete-list))))
+ file-cache-alist)
(file-cache-delete-file-list delete-list)
(message "Filecache: deleted %d files from file cache"
(length delete-list))))
@@ -456,7 +456,7 @@ or the optional REGEXP argument."
(interactive "DDelete directory from file cache: ")
(let ((dir (expand-file-name directory))
(result 0))
- (mapcar
+ (mapc
'(lambda (entry)
(if (file-cache-do-delete-directory dir entry)
(setq result (1+ result))))
@@ -719,7 +719,7 @@ the name is considered already unique; only the second substitution
"Output a list of files whose names (not including directories)
match REGEXP."
(let ((results))
- (mapcar
+ (mapc
(function
(lambda(cache-element)
(and (string-match regexp
@@ -768,11 +768,11 @@ match REGEXP."
(with-current-buffer
(get-buffer-create buf)
(erase-buffer)
- (mapcar
+ (mapc
(function
- (lambda(item)
- (insert (nth 1 item) (nth 0 item) "\n")))
- file-cache-alist)
+ (lambda(item)
+ (insert (nth 1 item) (nth 0 item) "\n")))
+ file-cache-alist)
(pop-to-buffer buf)
)))
diff --git a/lisp/files.el b/lisp/files.el
index 6aff489e0a2..7575948b9db 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -213,6 +213,16 @@ have fast storage with limited space, such as a RAM disk."
;; The system null device. (Should reference NULL_DEVICE from C.)
(defvar null-device "/dev/null" "The system null device.")
+(declare-function msdos-long-file-names) ;; Defined in C.
+(declare-function w32-long-file-name) ;; Defined in C.
+(declare-function msdos-long-file-names) ;; Defined in C.
+(declare-function dired-get-filename "dired" (&optional localp no-error-if-not-filep))
+(declare-function dired-unmark "dired" (arg))
+(declare-function dired-do-flagged-delete "dired" (&optional nomessage))
+(declare-function dos-8+3-filename "dos-fns" (filename))
+(declare-function vms-read-directory "vms-patch" (dirname switches buffer))
+(declare-function view-mode-disable "view" ())
+
(defvar file-name-invalid-regexp
(cond ((and (eq system-type 'ms-dos) (not (msdos-long-file-names)))
(concat "^\\([^A-Z[-`a-z]\\|..+\\)?:\\|" ; colon except after drive
@@ -450,7 +460,7 @@ use `before-save-hook'.")
(defcustom enable-local-variables t
"Control use of local variables in files you visit.
-The value can be t, nil, :safe, :all or something else.
+The value can be t, nil, :safe, :all, or something else.
A value of t means file local variables specifications are obeyed
if all the specified variable values are safe; if any values are
@@ -644,7 +654,7 @@ The path separator is colon in GNU and GNU-like systems."
(let ((trypath (parse-colon-path (getenv "CDPATH"))))
(setq cd-path (or trypath (list "./")))))
(if (not (catch 'found
- (mapcar
+ (mapc
(function (lambda (x)
(let ((f (expand-file-name (concat x dir))))
(if (file-directory-p f)
@@ -712,6 +722,28 @@ PATH-AND-SUFFIXES is a pair of lists, (DIRECTORIES . SUFFIXES)."
((null action) (try-completion string names))
(t (test-completion string names))))))
+(defun locate-dominating-file (file regexp)
+ "Look up the directory hierarchy from FILE for a file matching REGEXP."
+ (while (and file (not (file-directory-p file)))
+ (setq file (file-name-directory (directory-file-name file))))
+ (catch 'found
+ (let ((user (nth 2 (file-attributes file)))
+ ;; Abbreviate, so as to stop when we cross ~/.
+ (dir (abbreviate-file-name (file-name-as-directory file)))
+ files)
+ ;; As a heuristic, we stop looking up the hierarchy of directories as
+ ;; soon as we find a directory belonging to another user. This should
+ ;; save us from looking in things like /net and /afs. This assumes
+ ;; that all the files inside a project belong to the same user.
+ (while (and dir (equal user (nth 2 (file-attributes dir))))
+ (if (setq files (directory-files dir 'full regexp))
+ (throw 'found (car files))
+ (if (equal dir
+ (setq dir (file-name-directory
+ (directory-file-name dir))))
+ (setq dir nil))))
+ nil)))
+
(defun executable-find (command)
"Search for COMMAND in `exec-path' and return the absolute file name.
Return nil if COMMAND is not found anywhere in `exec-path'."
@@ -728,17 +760,28 @@ This is an interface to the function `load'."
(cons load-path (get-load-suffixes)))))
(load library))
-(defun file-remote-p (file)
+(defun file-remote-p (file &optional identification connected)
"Test whether FILE specifies a location on a remote system.
Return an identification of the system if the location is indeed
remote. The identification of the system may comprise a method
to access the system and its hostname, amongst other things.
For example, the filename \"/user@host:/foo\" specifies a location
-on the system \"/user@host:\"."
+on the system \"/user@host:\".
+
+IDENTIFICATION specifies which part of the identification shall
+be returned as string. IDENTIFICATION can be the symbol
+`method', `user' or `host'; any other value is handled like nil
+and means to return the complete identification string.
+
+If CONNECTED is non-nil, the function returns an identification only
+if FILE is located on a remote system, and a connection is established
+to that remote system.
+
+`file-remote-p' will never open a connection on its own."
(let ((handler (find-file-name-handler file 'file-remote-p)))
(if handler
- (funcall handler 'file-remote-p file)
+ (funcall handler 'file-remote-p file identification connected)
nil)))
(defun file-local-copy (file)
@@ -1052,6 +1095,12 @@ Recursive uses of the minibuffer will not be affected."
,@body)
(remove-hook 'minibuffer-setup-hook ,hook)))))
+(defcustom find-file-confirm-nonexistent-file nil
+ "If non-nil, `find-file' requires confirmation before visiting a new file."
+ :group 'find-file
+ :version "23.1"
+ :type 'boolean)
+
(defun find-file-read-args (prompt mustmatch)
(list (let ((find-file-default
(and buffer-file-name
@@ -1082,7 +1131,9 @@ suppress wildcard expansion by setting `find-file-wildcards' to nil.
To visit a file without any kind of conversion and without
automatically choosing a major mode, use \\[find-file-literally]."
- (interactive (find-file-read-args "Find file: " nil))
+ (interactive
+ (find-file-read-args "Find file: "
+ (if find-file-confirm-nonexistent-file 'confirm-only)))
(let ((value (find-file-noselect filename nil nil wildcards)))
(if (listp value)
(mapcar 'switch-to-buffer (nreverse value))
@@ -1100,7 +1151,9 @@ type M-n to pull it into the minibuffer.
Interactively, or if WILDCARDS is non-nil in a call from Lisp,
expand wildcards (if any) and visit multiple files."
- (interactive (find-file-read-args "Find file in other window: " nil))
+ (interactive
+ (find-file-read-args "Find file in other window: "
+ (if find-file-confirm-nonexistent-file 'confirm-only)))
(let ((value (find-file-noselect filename nil nil wildcards)))
(if (listp value)
(progn
@@ -1121,7 +1174,9 @@ type M-n to pull it into the minibuffer.
Interactively, or if WILDCARDS is non-nil in a call from Lisp,
expand wildcards (if any) and visit multiple files."
- (interactive (find-file-read-args "Find file in other frame: " nil))
+ (interactive
+ (find-file-read-args "Find file in other frame: "
+ (if find-file-confirm-nonexistent-file 'confirm-only)))
(let ((value (find-file-noselect filename nil nil wildcards)))
(if (listp value)
(progn
@@ -1144,7 +1199,9 @@ file names with wildcards."
"Edit file FILENAME but don't allow changes.
Like \\[find-file], but marks buffer as read-only.
Use \\[toggle-read-only] to permit editing."
- (interactive (find-file-read-args "Find file read-only: " nil))
+ (interactive
+ (find-file-read-args "Find file read-only: "
+ (if find-file-confirm-nonexistent-file 'confirm-only)))
(unless (or (and wildcards find-file-wildcards
(not (string-match "\\`/:" filename))
(string-match "[[*?]" filename))
@@ -1159,7 +1216,9 @@ Use \\[toggle-read-only] to permit editing."
"Edit file FILENAME in another window but don't allow changes.
Like \\[find-file-other-window], but marks buffer as read-only.
Use \\[toggle-read-only] to permit editing."
- (interactive (find-file-read-args "Find file read-only other window: " nil))
+ (interactive
+ (find-file-read-args "Find file read-only other window: "
+ (if find-file-confirm-nonexistent-file 'confirm-only)))
(unless (or (and wildcards find-file-wildcards
(not (string-match "\\`/:" filename))
(string-match "[[*?]" filename))
@@ -1174,7 +1233,9 @@ Use \\[toggle-read-only] to permit editing."
"Edit file FILENAME in another frame but don't allow changes.
Like \\[find-file-other-frame], but marks buffer as read-only.
Use \\[toggle-read-only] to permit editing."
- (interactive (find-file-read-args "Find file read-only other frame: " nil))
+ (interactive
+ (find-file-read-args "Find file read-only other frame: "
+ (if find-file-confirm-nonexistent-file 'confirm-only)))
(unless (or (and wildcards find-file-wildcards
(not (string-match "\\`/:" filename))
(string-match "[[*?]" filename))
@@ -1282,11 +1343,14 @@ killed."
(defun create-file-buffer (filename)
"Create a suitably named buffer for visiting FILENAME, and return it.
FILENAME (sans directory) is used unchanged if that name is free;
-otherwise a string <2> or <3> or ... is appended to get an unused name."
+otherwise a string <2> or <3> or ... is appended to get an unused name.
+Spaces at the start of FILENAME (sans directory) are removed."
(let ((lastname (file-name-nondirectory filename)))
(if (string= lastname "")
(setq lastname filename))
- (generate-new-buffer lastname)))
+ (save-match-data
+ (string-match "^ *\\(.*\\)" lastname)
+ (generate-new-buffer (match-string 1 lastname)))))
(defun generate-new-buffer (name)
"Create and return a buffer with a name based on NAME.
@@ -1910,6 +1974,7 @@ since only a single case-insensitive search through the alist is made."
("\\.ins\\'" . tex-mode) ;Installation files for TeX packages.
("\\.ltx\\'" . latex-mode)
("\\.dtx\\'" . doctex-mode)
+ ("\\.org\\'" . org-mode)
("\\.el\\'" . emacs-lisp-mode)
("\\.\\(scm\\|stk\\|ss\\|sch\\)\\'" . scheme-mode)
("\\.l\\'" . lisp-mode)
@@ -1973,8 +2038,9 @@ since only a single case-insensitive search through the alist is made."
("\\.tar\\'" . tar-mode)
;; The list of archive file extensions should be in sync with
;; `auto-coding-alist' with `no-conversion' coding system.
- ("\\.\\(arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\)\\'" . archive-mode)
- ("\\.\\(ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . archive-mode)
+ ("\\.\\(\
+arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|rar\\|\
+ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|RAR\\)\\'" . archive-mode)
("\\.\\(sx[dmicw]\\|odt\\)\\'" . archive-mode) ; OpenOffice.org
;; Mailer puts message to be edited in
;; /tmp/Re.... or Message
@@ -1989,7 +2055,6 @@ since only a single case-insensitive search through the alist is made."
("\\.dtd\\'" . sgml-mode)
("\\.ds\\(ss\\)?l\\'" . dsssl-mode)
("\\.js\\'" . java-mode) ; javascript-mode would be better
- ("\\.x[bp]m\\'" . c-mode)
;; .emacs or .gnus or .viper following a directory delimiter in
;; Unix, MSDOG or VMS syntax.
("[]>:/\\]\\..*\\(emacs\\|gnus\\|viper\\)\\'" . emacs-lisp-mode)
@@ -2006,6 +2071,7 @@ since only a single case-insensitive search through the alist is made."
("\\.\\(diffs?\\|patch\\|rej\\)\\'" . diff-mode)
("\\.\\(dif\\|pat\\)\\'" . diff-mode) ; for MSDOG
("\\.[eE]?[pP][sS]\\'" . ps-mode)
+ ("\\.\\(?:PDF\\|DVI\\|pdf\\|dvi\\)" . doc-view-mode)
("configure\\.\\(ac\\|in\\)\\'" . autoconf-mode)
("BROWSE\\'" . ebrowse-tree-mode)
("\\.ebrowse\\'" . ebrowse-tree-mode)
@@ -2372,7 +2438,11 @@ Otherwise, return nil; point may be changed."
;; put them in the first line of
;; such a file without screwing up
;; the interpreter invocation.
- (and (looking-at "^#!") 2)) t)
+ ;; The same holds for
+ ;; '\"
+ ;; in man pages (preprocessor
+ ;; magic for the `man' program).
+ (and (looking-at "^\\(#!\\|'\\\\\"\\)") 2)) t)
(progn
(skip-chars-forward " \t")
(setq beg (point))
@@ -2449,11 +2519,13 @@ asking you for confirmation."
minor-mode-overriding-map-alist
mode-line-buffer-identification
mode-line-format
+ mode-line-client
mode-line-modes
mode-line-modified
mode-line-mule-info
mode-line-position
mode-line-process
+ mode-line-remote
mode-name
outline-level
overriding-local-map
@@ -3147,13 +3219,13 @@ BACKUPNAME is the backup file name, which is the old file renamed."
(set-default-file-modes ?\700)
(when (condition-case nil
;; Try to overwrite old backup first.
- (copy-file from-name to-name t t)
+ (copy-file from-name to-name t t t)
(error t))
(while (condition-case nil
(progn
(when (file-exists-p to-name)
(delete-file to-name))
- (copy-file from-name to-name nil t)
+ (copy-file from-name to-name nil t t)
nil)
(file-already-exists t))
;; The file was somehow created by someone else between
@@ -4050,6 +4122,8 @@ or multiple mail buffers, etc."
(defun make-directory (dir &optional parents)
"Create the directory DIR and any nonexistent parent dirs.
+If DIR already exists as a directory, do nothing.
+
Interactively, the default choice of directory to create
is the current default directory for file names.
That is useful when you have visited a file in a nonexistent directory.
@@ -4421,6 +4495,14 @@ This command is used in the special Dired buffer created by
(message "No files can be recovered from this session now")))
(kill-buffer buffer))))
+(defun kill-buffer-ask (buffer)
+ "Kill buffer if confirmed."
+ (when (yes-or-no-p
+ (format "Buffer %s %s. Kill? " (buffer-name buffer)
+ (if (buffer-modified-p buffer)
+ "HAS BEEN EDITED" "is unmodified")))
+ (kill-buffer buffer)))
+
(defun kill-some-buffers (&optional list)
"Kill some buffers. Asks the user whether to kill each one of them.
Non-interactively, if optional argument LIST is non-nil, it
@@ -4435,13 +4517,20 @@ specifies the list of buffers to kill, asking for approval for each one."
; if we killed the base buffer.
(not (string-equal name ""))
(/= (aref name 0) ?\s)
- (yes-or-no-p
- (format "Buffer %s %s. Kill? "
- name
- (if (buffer-modified-p buffer)
- "HAS BEEN EDITED" "is unmodified")))
- (kill-buffer buffer)))
+ (kill-buffer-ask buffer)))
(setq list (cdr list))))
+
+(defun kill-matching-buffers (regexp &optional internal-too)
+ "Kill buffers whose name matches the specified regexp.
+The optional second argument indicates whether to kill internal buffers too."
+ (interactive "sKill buffers matching this regular expression: \nP")
+ (dolist (buffer (buffer-list))
+ (let ((name (buffer-name buffer)))
+ (when (and name (not (string-equal name ""))
+ (or internal-too (/= (aref name 0) ?\s))
+ (string-match regexp name))
+ (kill-buffer-ask buffer)))))
+
(defun auto-save-mode (arg)
"Toggle auto-saving of contents of current buffer.
@@ -5212,9 +5301,8 @@ message to that effect instead of signaling an error."
(defvar kill-emacs-query-functions nil
"Functions to call with no arguments to query about killing Emacs.
If any of these functions returns nil, killing Emacs is cancelled.
-`save-buffers-kill-emacs' (\\[save-buffers-kill-emacs]) calls these functions,
-but `kill-emacs', the low level primitive, does not.
-See also `kill-emacs-hook'.")
+`save-buffers-kill-emacs' calls these functions, but `kill-emacs',
+the low level primitive, does not. See also `kill-emacs-hook'.")
(defcustom confirm-kill-emacs nil
"How to ask for confirmation when leaving Emacs.
@@ -5253,6 +5341,22 @@ With prefix arg, silently save all file-visiting buffers, then kill."
(or (null confirm-kill-emacs)
(funcall confirm-kill-emacs "Really exit Emacs? "))
(kill-emacs)))
+
+(defun save-buffers-kill-terminal (&optional arg)
+ "Offer to save each buffer, then kill the current connection.
+If the current frame has no client, kill Emacs itself.
+
+With prefix arg, silently save all file-visiting buffers, then kill.
+
+If emacsclient was started with a list of filenames to edit, then
+only these files will be asked to be saved."
+ (interactive "P")
+ (let ((proc (frame-parameter (selected-frame) 'client))
+ (frame (selected-frame)))
+ (if (null proc)
+ (save-buffers-kill-emacs)
+ (server-save-buffers-kill-terminal proc arg))))
+
;; We use /: as a prefix to "quote" a file name
;; so that magic file name handlers will not apply to it.
@@ -5341,6 +5445,98 @@ With prefix arg, silently save all file-visiting buffers, then kill."
(t
(apply operation arguments)))))
+;; Symbolic modes and read-file-modes.
+
+(defun file-modes-char-to-who (char)
+ "Convert CHAR to a who-mask from a symbolic mode notation.
+CHAR is in [ugoa] and represents the users on which rights are applied."
+ (cond ((= char ?u) #o4700)
+ ((= char ?g) #o2070)
+ ((= char ?o) #o1007)
+ ((= char ?a) #o7777)
+ (t (error "%c: bad `who' character" char))))
+
+(defun file-modes-char-to-right (char &optional from)
+ "Convert CHAR to a right-mask from a symbolic mode notation.
+CHAR is in [rwxXstugo] and represents a right.
+If CHAR is in [Xugo], the value is extracted from FROM (or 0 if nil)."
+ (or from (setq from 0))
+ (cond ((= char ?r) #o0444)
+ ((= char ?w) #o0222)
+ ((= char ?x) #o0111)
+ ((= char ?s) #o1000)
+ ((= char ?t) #o6000)
+ ;; Rights relative to the previous file modes.
+ ((= char ?X) (if (= (logand from #o111) 0) 0 #o0111))
+ ((= char ?u) (let ((uright (logand #o4700 from)))
+ (+ uright (/ uright #o10) (/ uright #o100))))
+ ((= char ?g) (let ((gright (logand #o2070 from)))
+ (+ gright (/ gright #o10) (* gright #o10))))
+ ((= char ?o) (let ((oright (logand #o1007 from)))
+ (+ oright (* oright #o10) (* oright #o100))))
+ (t (error "%c: bad right character" char))))
+
+(defun file-modes-rights-to-number (rights who-mask &optional from)
+ "Convert a right string to a right-mask from a symbolic modes notation.
+RIGHTS is the right string, it should match \"([+=-][rwxXstugo]+)+\".
+WHO-MASK is the mask number of the users on which the rights are to be applied.
+FROM (or 0 if nil) is the orginal modes of the file to be chmod'ed."
+ (let* ((num-rights (or from 0))
+ (list-rights (string-to-list rights))
+ (op (pop list-rights)))
+ (while (memq op '(?+ ?- ?=))
+ (let ((num-right 0)
+ char-right)
+ (while (memq (setq char-right (pop list-rights))
+ '(?r ?w ?x ?X ?s ?t ?u ?g ?o))
+ (setq num-right
+ (logior num-right
+ (file-modes-char-to-right char-right num-rights))))
+ (setq num-right (logand who-mask num-right)
+ num-rights
+ (cond ((= op ?+) (logior num-rights num-right))
+ ((= op ?-) (logand num-rights (lognot num-right)))
+ (t (logior (logand num-rights (lognot who-mask)) num-right)))
+ op char-right)))
+ num-rights))
+
+(defun file-modes-symbolic-to-number (modes &optional from)
+ "Convert symbolic file modes to numeric file modes.
+MODES is the string to convert, it should match
+\"[ugoa]*([+-=][rwxXstugo]+)+,...\".
+See (info \"(coreutils)File permissions\") for more information on this
+notation.
+FROM (or 0 if nil) is the orginal modes of the file to be chmod'ed."
+ (save-match-data
+ (let ((case-fold-search nil)
+ (num-modes (or from 0)))
+ (while (/= (string-to-char modes) 0)
+ (if (string-match "^\\([ugoa]*\\)\\([+=-][rwxXstugo]+\\)+\\(,\\|\\)" modes)
+ (let ((num-who (apply 'logior 0
+ (mapcar 'file-modes-char-to-who
+ (match-string 1 modes)))))
+ (when (= num-who 0)
+ (setq num-who (default-file-modes)))
+ (setq num-modes
+ (file-modes-rights-to-number (substring modes (match-end 1))
+ num-who num-modes)
+ modes (substring modes (match-end 3))))
+ (error "Parse error in modes near `%s'" (substring modes 0))))
+ num-modes)))
+
+(defun read-file-modes (&optional prompt orig-file)
+ "Read file modes in octal or symbolic notation.
+PROMPT is used as the prompt, default to `File modes (octal or symbolic): '.
+ORIG-FILE is the original file of which modes will be change."
+ (let* ((modes (or (if orig-file (file-modes orig-file) 0)
+ (error "File not found")))
+ (value (read-string (or prompt "File modes (octal or symbolic): "))))
+ (save-match-data
+ (if (string-match "^[0-7]+" value)
+ (string-to-number value 8)
+ (file-modes-symbolic-to-number value modes)))))
+
+
(define-key ctl-x-map "\C-f" 'find-file)
(define-key ctl-x-map "\C-r" 'find-file-read-only)
(define-key ctl-x-map "\C-v" 'find-alternate-file)
@@ -5350,7 +5546,7 @@ With prefix arg, silently save all file-visiting buffers, then kill."
(define-key ctl-x-map "i" 'insert-file)
(define-key esc-map "~" 'not-modified)
(define-key ctl-x-map "\C-d" 'list-directory)
-(define-key ctl-x-map "\C-c" 'save-buffers-kill-emacs)
+(define-key ctl-x-map "\C-c" 'save-buffers-kill-terminal)
(define-key ctl-x-map "\C-q" 'toggle-read-only)
(define-key ctl-x-4-map "f" 'find-file-other-window)
diff --git a/lisp/filesets.el b/lisp/filesets.el
index d4ec52fb650..d7a7dc9efa0 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -92,9 +92,6 @@
;;; Some variables
-(eval-and-compile
- (defvar filesets-running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)
- "Non-nil means we are running XEmacs."))
(defvar filesets-menu-cache nil
"The whole filesets menu.")
@@ -115,12 +112,11 @@
(defvar filesets-updated-buffers nil
"A list of buffers with updated menu bars.")
(defvar filesets-menu-use-cached-flag nil
- "Use cached data. See `filesets-menu-ensure-use-cached' for details.")
+ "Use cached data. See `filesets-menu-ensure-use-cached' for details.")
(defvar filesets-update-cache-file-flag nil
"Non-nil means the cache needs updating.")
(defvar filesets-ignore-next-set-default nil
- "A list of custom variables for which the next `set-default' will be
-ignored.")
+ "List of custom variables for which the next `set-default' will be ignored.")
(defvar filesets-output-buffer-flag nil
"Non-nil means the current buffer is an output buffer created by filesets.
@@ -131,7 +127,7 @@ Is buffer local variable.")
0 means no messages at all.")
(defvar filesets-menu-ensure-use-cached
- (and filesets-running-xemacs
+ (and (featurep 'xemacs)
(if (fboundp 'emacs-version>=)
(not (emacs-version>= 21 5))))
"Make sure (X)Emacs uses filesets' cache.
@@ -184,7 +180,7 @@ Like `some', return the first value of FSS-PRED that is non-nil."
(defun filesets-member (fsm-item fsm-lst &rest fsm-keys)
"Find the first occurrence of FSM-ITEM in FSM-LST.
-It is supposed to work like cl's `member*'. At the moment only the :test
+It is supposed to work like cl's `member*'. At the moment only the :test
key is supported."
(let ((fsm-test (or (plist-get fsm-keys ':test)
(function equal))))
@@ -214,11 +210,11 @@ key is supported."
(file-name-nondirectory (substring this 0 (- (length this) 1))))))
(defun filesets-which-command (cmd)
- "Calls \"which CMD\"."
+ "Call \"which CMD\"."
(shell-command-to-string (format "which %s" cmd)))
(defun filesets-which-command-p (cmd)
- "Calls \"which CMD\" and returns non-nil if the command was found."
+ "Call \"which CMD\" and return non-nil if the command was found."
(when (string-match (format "\\(/[^/]+\\)?/%s" cmd)
(filesets-which-command cmd))
cmd))
@@ -252,7 +248,7 @@ key is supported."
; (filesets-build-menu))
;; It seems this is a workaround for the XEmacs issue described in the
-;; doc-string of filesets-menu-ensure-use-cached. Under Emacs this is
+;; doc-string of filesets-menu-ensure-use-cached. Under Emacs this is
;; essentially just `set-default'.
(defun filesets-set-default (sym val &optional init-flag)
"Set-default wrapper function used in conjunction with `defcustom'.
@@ -307,55 +303,55 @@ SYM to VAL and return t. If INIT-FLAG is non-nil, set with
:version "22.1")
(defcustom filesets-menu-name "Filesets"
- "*Filesets' menu name."
+ "Filesets' menu name."
:set (function filesets-set-default)
:type 'sexp
:group 'filesets)
(defcustom filesets-menu-path nil
- "*The menu under which the filesets menu should be inserted.
+ "The menu under which the filesets menu should be inserted.
See `add-submenu' for documentation."
:set (function filesets-set-default)
:type 'sexp
:group 'filesets)
(defcustom filesets-menu-before "File"
- "*The name of a menu before which this menu should be added.
+ "The name of a menu before which this menu should be added.
See `add-submenu' for documentation."
:set (function filesets-set-default)
:type 'sexp
:group 'filesets)
(defcustom filesets-menu-in-menu nil
- "*Use that instead of `current-menubar' as the menu to change.
+ "Use that instead of `current-menubar' as the menu to change.
See `add-submenu' for documentation."
:set (function filesets-set-default)
:type 'sexp
:group 'filesets)
(defcustom filesets-menu-shortcuts-flag t
- "*Non-nil means to prepend menus with hopefully unique shortcuts."
+ "Non-nil means to prepend menus with hopefully unique shortcuts."
:set (function filesets-set-default!)
:type 'boolean
:group 'filesets)
(defcustom filesets-menu-shortcuts-marker "%_"
- "*String for marking menu shortcuts."
+ "String for marking menu shortcuts."
:set (function filesets-set-default!)
:type 'string
:group 'filesets)
-;(defcustom filesets-menu-cnvfp-flag nil
-; "*Non-nil means show \"Convert :pattern to :files\" entry for :pattern menus."
-; :set (function filesets-set-default!)
-; :type 'boolean
-; :group 'filesets)
+;;(defcustom filesets-menu-cnvfp-flag nil
+;; "*Non-nil means show \"Convert :pattern to :files\" entry for :pattern menus."
+;; :set (function filesets-set-default!)
+;; :type 'boolean
+;; :group 'filesets)
(defcustom filesets-menu-cache-file
- (if filesets-running-xemacs
+ (if (featurep 'xemacs)
"~/.xemacs/filesets-cache.el"
- "~/.emacs.d/filesets-cache.el")
- "*File to be used for saving the filesets menu between sessions.
+ (concat user-emacs-directory "filesets-cache.el"))
+ "File to be used for saving the filesets menu between sessions.
Set this to \"\", to disable caching of menus.
Don't forget to check out `filesets-menu-ensure-use-cached'."
:set (function filesets-set-default)
@@ -368,16 +364,16 @@ Don't forget to check out `filesets-menu-ensure-use-cached'."
filesets-submenus
filesets-menu-cache
filesets-ingroup-cache)
- "*Stuff we want to save in `filesets-menu-cache-file'.
+ "Stuff we want to save in `filesets-menu-cache-file'.
Possible uses: don't save configuration data in the main startup files
but in filesets's own cache. In this case add `filesets-data' to this
list.
-There is a second reason for putting `filesets-data' on this list. If
+There is a second reason for putting `filesets-data' on this list. If
you frequently add and remove buffers on the fly to :files filesets, you
don't need to save your customizations if `filesets-data' is being
-mirrored in the cache file. In this case the version in the cache file
+mirrored in the cache file. In this case the version in the cache file
is the current one, and the version in your startup file will be
silently updated later on.
@@ -407,7 +403,7 @@ Don't forget to check out `filesets-menu-ensure-use-cached'."
:group 'filesets)
(defcustom filesets-cache-fill-content-hooks nil
- "*Hooks to run when writing the contents of filesets' cache file.
+ "Hooks to run when writing the contents of filesets' cache file.
The hook is called with the cache file as current buffer and the cursor
at the last position. I.e. each hook has to make sure that the cursor is
@@ -429,7 +425,7 @@ Don't forget to check out `filesets-menu-ensure-use-cached'."
:group 'filesets)
(defcustom filesets-cache-hostname-flag nil
- "*Non-nil means cache the hostname.
+ "Non-nil means cache the hostname.
If the current name differs from the cached one,
rebuild the menu and create a new cache file."
:set (function filesets-set-default)
@@ -437,16 +433,16 @@ rebuild the menu and create a new cache file."
:group 'filesets)
(defcustom filesets-cache-save-often-flag nil
- "*Non-nil means save buffer on every change of the filesets menu.
+ "Non-nil means save buffer on every change of the filesets menu.
If this variable is set to nil and if Emacs crashes, the cache and
-filesets-data could get out of sync. Set this to t if this happens from
+filesets-data could get out of sync. Set this to t if this happens from
time to time or if the fileset cache causes troubles."
:set (function filesets-set-default)
:type 'boolean
:group 'filesets)
(defcustom filesets-max-submenu-length 25
- "*Maximum length of submenus.
+ "Maximum length of submenus.
Set this value to 0 to turn menu splitting off. BTW, parts of submenus
will not be rewrapped if their length exceeds this value."
:set (function filesets-set-default)
@@ -454,13 +450,13 @@ will not be rewrapped if their length exceeds this value."
:group 'filesets)
(defcustom filesets-max-entry-length 50
- "*Truncate names of splitted submenus to this length."
+ "Truncate names of splitted submenus to this length."
:set (function filesets-set-default)
:type 'integer
:group 'filesets)
(defcustom filesets-browse-dir-function 'dired
- "*A function or command used for browsing directories.
+ "A function or command used for browsing directories.
When using an external command, \"%s\" will be replaced with the
directory's name.
@@ -478,7 +474,7 @@ Note: You have to manually rebuild the menu if you change this value."
:group 'filesets)
(defcustom filesets-open-file-function 'filesets-find-or-display-file
- "*The function used for opening files.
+ "The function used for opening files.
`filesets-find-or-display-file' ... Filesets' default function for
visiting files. This function checks if an external viewer is defined
@@ -486,7 +482,7 @@ for a specific file type. Either this viewer, if defined, or
`find-file' will be used to visit a file.
`filesets-find-file' ... An alternative function that always uses
-`find-file'. If `filesets-be-docile-flag' is true, a file, which isn't
+`find-file'. If `filesets-be-docile-flag' is true, a file, which isn't
readable, will not be opened.
Caveat: Changes will take effect only after rebuilding the menu."
@@ -501,7 +497,7 @@ Caveat: Changes will take effect only after rebuilding the menu."
:group 'filesets)
(defcustom filesets-save-buffer-function 'save-buffer
- "*The function used to save a buffer.
+ "The function used to save a buffer.
Caveat: Changes will take effect after rebuilding the menu."
:set (function filesets-set-default)
:type '(choice :tag "Function:"
@@ -512,10 +508,10 @@ Caveat: Changes will take effect after rebuilding the menu."
:group 'filesets)
(defcustom filesets-find-file-delay
- (if (and filesets-running-xemacs gutter-buffers-tab-visible-p)
+ (if (and (featurep 'xemacs) gutter-buffers-tab-visible-p)
0.5
0)
- "*Delay before calling find-file.
+ "Delay before calling `find-file'.
This is for calls via `filesets-find-or-display-file'
or `filesets-find-file'.
@@ -525,7 +521,7 @@ Set this to 0, if you don't use XEmacs' buffer tabs."
:group 'filesets)
(defcustom filesets-be-docile-flag nil
- "*Non-nil means don't complain if a file or a directory doesn't exist.
+ "Non-nil means don't complain if a file or a directory doesn't exist.
This is useful if you want to use the same startup files in different
computer environments."
:set (function filesets-set-default)
@@ -533,19 +529,19 @@ computer environments."
:group 'filesets)
(defcustom filesets-sort-menu-flag t
- "*Non-nil means sort the filesets menu alphabetically."
+ "Non-nil means sort the filesets menu alphabetically."
:set (function filesets-set-default)
:type 'boolean
:group 'filesets)
(defcustom filesets-sort-case-sensitive-flag t
- "*Non-nil means sorting of the filesets menu is case sensitive."
+ "Non-nil means sorting of the filesets menu is case sensitive."
:set (function filesets-set-default)
:type 'boolean
:group 'filesets)
(defcustom filesets-tree-max-level 3
- "*Maximum scan depth for directory trees.
+ "Maximum scan depth for directory trees.
A :tree fileset is defined by a base directory the contents of which
will be recursively added to the menu. `filesets-tree-max-level' tells up
to which level the directory structure should be scanned/listed,
@@ -579,7 +575,7 @@ including directory trees to the menu can take a lot of memory."
("Run Shell Command"
filesets-cmd-shell-command
(filesets-cmd-shell-command-getargs)))
- "*Commands to run on filesets.
+ "Commands to run on filesets.
An association list of names, functions, and an argument list (or a
function that returns one) to be run on a filesets' files.
@@ -607,16 +603,16 @@ the filename."
(defcustom filesets-external-viewers
(let
-; ((ps-cmd (or (and (boundp 'my-ps-viewer) my-ps-viewer)
-; (filesets-select-command "ggv gv")))
-; (pdf-cmd (or (and (boundp 'my-ps-viewer) my-pdf-viewer)
-; (filesets-select-command "xpdf acroread")))
-; (dvi-cmd (or (and (boundp 'my-ps-viewer) my-dvi-viewer)
-; (filesets-select-command "xdvi tkdvi")))
-; (doc-cmd (or (and (boundp 'my-ps-viewer) my-doc-viewer)
-; (filesets-select-command "antiword")))
-; (pic-cmd (or (and (boundp 'my-ps-viewer) my-pic-viewer)
-; (filesets-select-command "gqview ee display"))))
+ ;; ((ps-cmd (or (and (boundp 'my-ps-viewer) my-ps-viewer)
+ ;; (filesets-select-command "ggv gv")))
+ ;; (pdf-cmd (or (and (boundp 'my-ps-viewer) my-pdf-viewer)
+ ;; (filesets-select-command "xpdf acroread")))
+ ;; (dvi-cmd (or (and (boundp 'my-ps-viewer) my-dvi-viewer)
+ ;; (filesets-select-command "xdvi tkdvi")))
+ ;; (doc-cmd (or (and (boundp 'my-ps-viewer) my-doc-viewer)
+ ;; (filesets-select-command "antiword")))
+ ;; (pic-cmd (or (and (boundp 'my-ps-viewer) my-pic-viewer)
+ ;; (filesets-select-command "gqview ee display"))))
((ps-cmd "ggv")
(pdf-cmd "xpdf")
(dvi-cmd "xdvi")
@@ -644,7 +640,7 @@ the filename."
((:ignore-on-open-all t)
(:ignore-on-read-text t)
(:constraint-flag ,pic-cmd)))))
- "*Association list of file patterns and external viewers for use with
+ "Association list of file patterns and external viewers for use with
`filesets-find-or-display-file'.
Has the form ((FILE-PATTERN VIEWER PROPERTIES) ...), VIEWER being either a
@@ -674,21 +670,20 @@ variables my-ps-viewer, my-pdf-viewer, my-dvi-viewer, my-pic-viewer.
In order to view pdf or rtf files in an Emacs buffer, you could use these:
- \(\"^.+\\.pdf$\" \"pdftotext\"
+ \(\"^.+\\\\.pdf\\\\'\" \"pdftotext\"
\((:capture-output t)
\(:args (\"%S - | fmt -w \" window-width))
\(:ignore-on-read-text t)
\(:constraintp (lambda ()
\(and \(filesets-which-command-p \"pdftotext\")
\(filesets-which-command-p \"fmt\"))))))
- \(\"^.+\\.rtf$\" \"rtf2htm\"
+ \(\"^.+\\\\.rtf\\\\'\" \"rtf2htm\"
\((:capture-output t)
\(:args (\"%S 2> /dev/null | w3m -dump -T text/html\"))
\(:ignore-on-read-text t)
\(:constraintp (lambda ()
\(and (filesets-which-command-p \"rtf2htm\")
- \(filesets-which-command-p \"w3m\"))))))
-"
+ \(filesets-which-command-p \"w3m\"))))))"
:set (function filesets-set-default)
:type '(repeat :tag "Viewer"
(list :tag "Definition"
@@ -814,7 +809,7 @@ In order to view pdf or rtf files in an Emacs buffer, you could use these:
emacs-wiki-directories
nil))))))))
- "*Inclusion group definitions.
+ "Inclusion group definitions.
Define how to find included file according to a file's mode (being
defined by a file pattern).
@@ -865,8 +860,8 @@ Stubs:
First, a stub is a file that shows up in the menu but will not be
included in an ingroup's file listing -- i.e. filesets will never
-operate on this file automatically. Secondly, in opposition to normal
-files stubs are not scanned for new inclusion groups. This is useful if
+operate on this file automatically. Secondly, in opposition to normal
+files stubs are not scanned for new inclusion groups. This is useful if
you want to have quick access to library headers.
In the menu, an asterisk is appended to the stub's name.
@@ -937,9 +932,8 @@ With duplicates removed, it would be:
:group 'filesets)
(put 'filesets-ingroup-patterns 'risky-local-variable t)
-(defcustom filesets-data
- nil
- "*Fileset definitions.
+(defcustom filesets-data nil
+ "Fileset definitions.
A fileset is either a list of files, a file pattern, a base directory
and a search pattern (for files), or a base file. Changes to this
@@ -1065,27 +1059,27 @@ defined in `filesets-ingroup-patterns'."
(defcustom filesets-query-user-limit 15
- "*Query the user before opening a fileset with that many files."
+ "Query the user before opening a fileset with that many files."
:set (function filesets-set-default)
:type 'integer
:group 'filesets)
;;; Emacs compatibility
(eval-and-compile
- (if filesets-running-xemacs
+ (if (featurep 'xemacs)
(fset 'filesets-error 'error)
(require 'easymenu)
(defun filesets-error (class &rest args)
"`error' wrapper."
- (error (mapconcat 'identity args " ")))
+ (error "%s" (mapconcat 'identity args " ")))
))
(defun filesets-filter-dir-names (lst &optional negative)
- "Remove non-directory names from a list of strings. If NEGATIVE is
-non-nil, remove all directory names."
+ "Remove non-directory names from a list of strings.
+If NEGATIVE is non-nil, remove all directory names."
(filesets-filter-list lst
(lambda (x)
(and (not (string-match "^\\.+/$" x))
@@ -1093,13 +1087,11 @@ non-nil, remove all directory names."
(not (string-match "[:/\\]$" x))
(string-match "[:/\\]$" x))))))
-(defun filesets-conditional-sort (lst &optional access-fn simply-do-it)
+(defun filesets-conditional-sort (lst &optional access-fn)
"Return a sorted copy of LST, LST being a list of strings.
If `filesets-sort-menu-flag' is nil, return LST itself.
-ACCESS-FN ... function to get the string value of LST's elements.
-If SIMPLY-DO-IT is non-nil, the list is sorted regardless of
-`filesets-sort-menu-flag'."
+ACCESS-FN ... function to get the string value of LST's elements."
(if filesets-sort-menu-flag
(let* ((fni (or access-fn
(function identity)))
@@ -1115,10 +1107,11 @@ If SIMPLY-DO-IT is non-nil, the list is sorted regardless of
(defun filesets-directory-files (dir &optional
pattern what full-flag match-dirs-flag)
- "Get WHAT (:files or :dirs) in DIR. If PATTERN is provided return only
-those entries matching this regular expression. If MATCH-DIRS-FLAG is
-non-nil, also match directory entries. Return full path if FULL-FLAG is
-non-nil."
+ "Get WHAT (:files or :dirs) in DIR.
+If PATTERN is provided return only those entries matching this
+regular expression.
+If MATCH-DIRS-FLAG is non-nil, also match directory entries.
+Return full path if FULL-FLAG is non-nil."
(filesets-message 2 "Filesets: scanning %S" dir)
(cond
((file-exists-p dir)
@@ -1261,7 +1254,7 @@ non-nil."
filesets-external-viewers)))
(defun filesets-filetype-property (filename event &optional entry)
- "Returns non-nil if a file of a specific type has special flags/tags.
+ "Return non-nil if a file of a specific type has special flags/tags.
Events (corresponding tag):
@@ -1290,7 +1283,7 @@ on-close-all ... not used"
nil t)))
(defun filesets-filetype-get-prop (property filename &optional entry)
- "Returns PROPERTY for filename -- use ENTRY if provided."
+ "Return PROPERTY for filename -- use ENTRY if provided."
(let ((def (filesets-eviewer-get-props
(or entry
(filesets-get-external-viewer filename)))))
@@ -1410,7 +1403,7 @@ not be opened."
name args)))))
(defun filesets-get-fileset-name (something)
- "Get SOMETHING's name. (Don't ask.)"
+ "Get SOMETHING's name (Don't ask)."
(cond
((listp something)
(car something))
@@ -1533,8 +1526,8 @@ Use FILESET-ENTRY for finding the save function, if provided."
(filesets-data-get entry ':ingroup nil t))
(defun filesets-file-open (open-function file-name &optional fileset-name)
- "Open FILE-NAME using OPEN-FUNCTION. If OPEN-FUNCTION is nil, its
-value will be deduced from FILESET-NAME."
+ "Open FILE-NAME using OPEN-FUNCTION.
+If OPEN-FUNCTION is nil, its value will be deduced from FILESET-NAME."
(let ((open-function (or open-function
(filesets-entry-get-open-fn fileset-name))))
(if (file-readable-p file-name)
@@ -1596,7 +1589,7 @@ SAVE-FUNCTION takes no argument, but works on the current buffer."
(newline))
(defun filesets-run-cmd--repl-fn (arg &optional format-fn)
- "Helper function for `filesets-run-cmd'. Apply FORMAT-FN to arg.
+ "Helper function for `filesets-run-cmd'. Apply FORMAT-FN to arg.
Replace <file-name> or <<file-name>> with filename."
(funcall format-fn (cond
((equal arg "<file-name>")
@@ -1786,7 +1779,7 @@ Use LOOKUP-NAME for deducing the save-function, if provided."
(filesets-error 'error "Filesets: Unknown fileset: " name))))
(defun filesets-add-buffer (&optional name buffer)
- "Add BUFFER (or current-buffer) to the fileset called NAME.
+ "Add BUFFER (or current buffer) to the fileset called NAME.
User will be queried, if no fileset name is provided."
(interactive)
(let* ((buffer (or buffer
@@ -1821,7 +1814,7 @@ User will be queried, if no fileset name is provided."
(message "Filesets: Can't add '%s' to fileset '%s'" this name)))))))
(defun filesets-remove-buffer (&optional name buffer)
- "Remove BUFFER (or current-buffer) to fileset NAME.
+ "Remove BUFFER (or current buffer) to fileset NAME.
User will be queried, if no fileset name is provided."
(interactive)
(let* ((buffer (or buffer
@@ -2013,11 +2006,11 @@ LOOKUP-NAME is used as lookup name for retrieving fileset specific settings."
"Access to `filesets-ingroup-patterns'. Extract remove-duplicates-flag."
(filesets-ingroup-get-data master 1))
-(defun filesets-ingroup-collect-finder (patt case-sencitivep)
+(defun filesets-ingroup-collect-finder (patt case-sensitivep)
"Helper function for `filesets-ingroup-collect'. Find pattern PATT."
(let ((cfs case-fold-search)
(rv (progn
- (setq case-fold-search (not case-sencitivep))
+ (setq case-fold-search (not case-sensitivep))
(re-search-forward patt nil t))))
(setq case-fold-search cfs)
rv))
@@ -2106,8 +2099,8 @@ LOOKUP-NAME is used as lookup name for retrieving fileset specific settings."
(filesets-message 2 "Filesets: no patterns defined for %S" master)))))
(defun filesets-ingroup-collect-build-menu (fs flist &optional other-count)
- "Helper function for `filesets-ingroup-collect'. Build the menu.
-FS is a fileset's name. FLIST is a list returned by
+ "Helper function for `filesets-ingroup-collect'. Build the menu.
+FS is a fileset's name. FLIST is a list returned by
`filesets-ingroup-collect-files'."
(if (null flist)
nil
@@ -2149,7 +2142,7 @@ FS is a fileset's name. FLIST is a list returned by
,@(filesets-get-menu-epilog master ':ingroup fsn)))
`([,nm (filesets-file-open nil ',master ',fsn)])))))))))
-(defun filesets-ingroup-collect (fs remdupl-flag master &optional depth)
+(defun filesets-ingroup-collect (fs remdupl-flag master)
"Collect names of included files and build submenu."
(filesets-ingroup-cache-put master nil)
(filesets-message 2 "Filesets: parsing %S" master)
@@ -2305,7 +2298,7 @@ Construct a shortcut from COUNT."
lookup-name t)))))))))))
(defun filesets-remove-from-ubl (&optional buffer)
- "BUFFER or current-buffer require update of the filesets menu."
+ "BUFFER or current buffer require update of the filesets menu."
(let ((b (or buffer
(current-buffer))))
(if (member b filesets-updated-buffers)
@@ -2469,7 +2462,7 @@ We apologize for the inconvenience."))
(find-file-other-window cf))
(filesets-error 'error msg))))
-(defun filesets-update (version cached-version)
+(defun filesets-update (cached-version)
"Do some cleanup after updating filesets.el."
(cond
((or (not cached-version)
@@ -2491,7 +2484,7 @@ We apologize for the inconvenience."))
(progn
(setq filesets-update-cache-file-flag nil)
t)
- (filesets-update filesets-version filesets-cache-version)))
+ (filesets-update filesets-cache-version)))
(t
(setq filesets-update-cache-file-flag t)
nil)))
@@ -2503,7 +2496,7 @@ We apologize for the inconvenience."))
(defun filesets-init ()
"Filesets initialization.
Set up hooks, load the cache file -- if existing -- and build the menu."
- (add-hook (if filesets-running-xemacs 'activate-menubar-hook 'menu-bar-update-hook)
+ (add-hook (if (featurep 'xemacs) 'activate-menubar-hook 'menu-bar-update-hook)
(function filesets-build-menu-maybe))
(add-hook 'kill-buffer-hook (function filesets-remove-from-ubl))
(add-hook 'first-change-hook (function filesets-reset-filename-on-change))
@@ -2521,9 +2514,9 @@ Set up hooks, load the cache file -- if existing -- and build the menu."
(provide 'filesets)
-;;; Local Variables:
-;;; sentence-end-double-space:t
-;;; End:
+;; Local Variables:
+;; sentence-end-double-space:t
+;; End:
-;;; arch-tag: 2c03f85f-c3df-4cec-b0a3-b46fd5592d70
+;; arch-tag: 2c03f85f-c3df-4cec-b0a3-b46fd5592d70
;;; filesets.el ends here
diff --git a/lisp/find-lisp.el b/lisp/find-lisp.el
index 9b1f3275dfc..4c8d8bea215 100644
--- a/lisp/find-lisp.el
+++ b/lisp/find-lisp.el
@@ -270,7 +270,7 @@ It is a function which takes two arguments, the directory and its parent."
;; No analog for find-lisp?
(insert find-lisp-line-indent "\n")
;; Run the find function
- (mapcar
+ (mapc
(function
(lambda(file)
(find-lisp-find-dired-insert-file
diff --git a/lisp/finder.el b/lisp/finder.el
index 26830ae1c3a..d1438dbf17e 100644
--- a/lisp/finder.el
+++ b/lisp/finder.el
@@ -134,7 +134,7 @@ no arguments compiles from `load-path'."
(insert ";; Don't edit this file. It's generated by finder.el\n\n")
(insert ";;; Code:\n")
(insert "\n(setq finder-package-info '(\n")
- (mapcar
+ (mapc
(lambda (d)
(when (file-exists-p (directory-file-name d))
(message "Directory %s" d)
@@ -179,12 +179,12 @@ no arguments compiles from `load-path'."
\(provide '" (file-name-sans-extension
(file-name-nondirectory generated-finder-keywords-file)) ")
-;;; Local Variables:
-;;; version-control: never
-;;; no-byte-compile: t
-;;; no-update-autoloads: t
-;;; End:
-;;; " (file-name-nondirectory generated-finder-keywords-file) " ends here\n")
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
+\;;; " (file-name-nondirectory generated-finder-keywords-file) " ends here\n")
(kill-buffer "*finder-scratch*")
(eval-buffer) ;; So we get the new keyword list immediately
(basic-save-buffer))))
@@ -207,7 +207,7 @@ no arguments compiles from `load-path'."
(defun finder-mouse-face-on-line ()
"Put `mouse-face' and `help-echo' properties on the previous line."
(save-excursion
- (previous-line 1)
+ (forward-line -1)
(unless finder-help-echo
(setq finder-help-echo
(let* ((keys1 (where-is-internal 'finder-select
@@ -372,5 +372,5 @@ finder directory, \\[finder-exit] = quit, \\[finder-summary] = help")))
(provide 'finder)
-;;; arch-tag: ec85ff49-8cb8-41f5-a63f-9131d53ce2c5
+;; arch-tag: ec85ff49-8cb8-41f5-a63f-9131d53ce2c5
;;; finder.el ends here
diff --git a/lisp/follow.el b/lisp/follow.el
index 7e175e70230..3edc62e5784 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -254,6 +254,8 @@
;; Should someone come up with a better solution, please let me
;; know.
+(require 'easymenu)
+
(eval-when-compile
(if (or (featurep 'bytecomp)
(featurep 'byte-compile))
@@ -335,123 +337,45 @@ After that, changing the prefix key requires manipulating keymaps."
;; the look and feel of Follow mode.)
(define-key mainmap [remap end-of-buffer] 'follow-end-of-buffer)
- ;;
- ;; The menu.
- ;;
-
- (if (not (featurep 'xemacs))
-
- ;;
- ;; Emacs
- ;;
- (let ((menumap (funcall (symbol-function 'make-sparse-keymap)
- "Follow"))
- (count 0)
- id)
- (mapcar
- (function
- (lambda (item)
- (setq id
- (or (cdr item)
- (progn
- (setq count (+ count 1))
- (intern (format "separator-%d" count)))))
- (define-key menumap (vector id) item)
- (or (eq id 'follow-mode)
- (put id 'menu-enable 'follow-mode))))
- ;; In reverse order:
- '(("Toggle Follow mode" . follow-mode)
- ("--")
- ("Recenter" . follow-recenter)
- ("--")
- ("Previous Window" . follow-previous-window)
- ("Next Windows" . follow-next-window)
- ("Last Window" . follow-last-window)
- ("First Window" . follow-first-window)
- ("--")
- ("Switch To Buffer (all windows)"
- . follow-switch-to-buffer-all)
- ("Switch To Buffer" . follow-switch-to-buffer)
- ("--")
- ("Delete Other Windows and Split"
- . follow-delete-other-windows-and-split)
- ("--")
- ("Scroll Down" . follow-scroll-down)
- ("Scroll Up" . follow-scroll-up)))
-
- ;; If there is a `tools' menu, we use it. However, we can't add a
- ;; minor-mode specific item to it (it's broken), so we make the
- ;; contents ghosted when not in use, and add ourselves to the
- ;; global map. If no `tools' menu is present, just make a
- ;; top-level menu visible when the mode is activated.
-
- (let ((tools-map (lookup-key (current-global-map) [menu-bar tools]))
- (last nil))
- (if (sequencep tools-map)
- (progn
- ;; Find the last entry in the menu and store it in `last'.
- (mapcar (function
- (lambda (x)
- (setq last (or (cdr-safe
- (cdr-safe
- (cdr-safe x)))
- last))))
- tools-map)
- (if last
- (progn
- (funcall (symbol-function 'define-key-after)
- tools-map [separator-follow] '("--") last)
- (funcall (symbol-function 'define-key-after)
- tools-map [follow] (cons "Follow" menumap)
- 'separator-follow))
- ;; Didn't find the last item, adding to the top of
- ;; tools. (This will probably never happen...)
- (define-key (current-global-map) [menu-bar tools follow]
- (cons "Follow" menumap))))
- ;; No tools menu, add "Follow" to the menubar.
- (define-key mainmap [menu-bar follow]
- (cons "Follow" menumap)))))
-
- ;;
- ;; XEmacs.
- ;;
-
- ;; place the menu in the `Tools' menu.
- (let ((menu '("Follow"
- :filter follow-menu-filter
- ["Scroll Up" follow-scroll-up t]
- ["Scroll Down" follow-scroll-down t]
- ["Delete Other Windows and Split"
- follow-delete-other-windows-and-split t]
- ["Switch To Buffer" follow-switch-to-buffer t]
- ["Switch To Buffer (all windows)"
- follow-switch-to-buffer-all t]
- ["First Window" follow-first-window t]
- ["Last Window" follow-last-window t]
- ["Next Windows" follow-next-window t]
- ["Previous Window" follow-previous-window t]
- ["Recenter" follow-recenter t]
- ["Deactivate" follow-mode t])))
-
- ;; Why not just `(set-buffer-menubar current-menubar)'? The
- ;; question is a very good question. The reason is that under
- ;; Emacs, neither `set-buffer-menubar' nor
- ;; `current-menubar' is defined, hence the byte-compiler will
- ;; warn.
- (funcall (symbol-function 'set-buffer-menubar)
- (symbol-value 'current-menubar))
- (funcall (symbol-function 'add-submenu) '("Tools") menu))
-
- ;; When the mode is not activated, only one item is visible:
- ;; "Activate".
- (defun follow-menu-filter (menu)
- (if follow-mode
- menu
- '(["Activate " follow-mode t]))))
-
mainmap)
"Minor mode keymap for Follow mode.")
+;; When the mode is not activated, only one item is visible to activate
+;; the mode.
+(defun follow-menu-filter (menu)
+ (if (bound-and-true-p follow-mode)
+ menu
+ '(["Follow mode" follow-mode
+ :style toggle :selected follow-mode])))
+
+;; If there is a `tools' menu, we use it. However, we can't add a
+;; minor-mode specific item to it (it's broken), so we make the
+;; contents ghosted when not in use, and add ourselves to the
+;; global map.
+(easy-menu-add-item nil '("Tools")
+ '("Follow"
+ ;; The Emacs code used to just grey out operations when follow-mode was
+ ;; not enabled, whereas the XEmacs code used to remove it altogether.
+ ;; Not sure which is preferable, but clearly the preference should not
+ ;; depend on the flavor.
+ :filter follow-menu-filter
+ ["Scroll Up" follow-scroll-up follow-mode]
+ ["Scroll Down" follow-scroll-down follow-mode]
+ "--"
+ ["Delete Other Windows and Split" follow-delete-other-windows-and-split follow-mode]
+ "--"
+ ["Switch To Buffer" follow-switch-to-buffer follow-mode]
+ ["Switch To Buffer (all windows)" follow-switch-to-buffer-all follow-mode]
+ "--"
+ ["First Window" follow-first-window follow-mode]
+ ["Last Window" follow-last-window follow-mode]
+ ["Next Window" follow-next-window follow-mode]
+ ["Previous Window" follow-previous-window follow-mode]
+ "--"
+ ["Recenter" follow-recenter follow-mode]
+ "--"
+ ["Follow mode" follow-mode :style toggle :selected follow-mode]))
+
;;}}}
(defcustom follow-mode-line-text " Follow"
@@ -552,14 +476,12 @@ Used by `follow-window-size-change'.")
;;;###autoload
(defun turn-on-follow-mode ()
"Turn on Follow mode. Please see the function `follow-mode'."
- (interactive)
(follow-mode 1))
;;;###autoload
(defun turn-off-follow-mode ()
"Turn off Follow mode. Please see the function `follow-mode'."
- (interactive)
(follow-mode -1))
(put 'follow-mode 'permanent-local t)
@@ -908,7 +830,7 @@ of the way from the true end."
"Return all windows displaying the same buffer as the TESTWIN.
The list contains only windows displayed in the same frame as TESTWIN.
If TESTWIN is nil the selected window is used."
- (or (and testwin (window-live-p testwin))
+ (or (window-live-p testwin)
(setq testwin (selected-window)))
(let* ((top (frame-first-window (window-frame testwin)))
(win top)
@@ -1345,7 +1267,7 @@ position of the first window. Otherwise it is a good guess."
(let ((done nil)
win-start
res)
- ;; Always calculate what happend when no line is displayed in the first
+ ;; Always calculate what happens when no line is displayed in the first
;; window. (The `previous' res is needed below!)
(goto-char guess)
(vertical-motion 0 (car windows))
@@ -1586,9 +1508,9 @@ non-first windows in Follow mode."
(setq win-start-end (follow-windows-start-end windows))
(follow-invalidate-cache)
;; When the point ends up in another window. This
- ;; happends when dest is in the beginning of the
+ ;; happens when dest is in the beginning of the
;; file and the selected window is not the first.
- ;; It can also, in rare situations happend when
+ ;; It can also, in rare situations happen when
;; long lines are used and there is a big
;; difference between the width of the windows.
;; (When scrolling one line in a wide window which
@@ -1898,17 +1820,14 @@ would interfere with some other package. If this happens, please
report this using the `report-emacs-bug' function."
(interactive)
(follow-tidy-process-filter-alist)
- (let ((list (process-list)))
- (while list
- (if (eq (follow-call-process-filter (car list)) 'follow-generic-filter)
- (progn
- (follow-call-set-process-filter
- (car list)
- (cdr-safe (assq (car list) follow-process-filter-alist)))
- (setq follow-process-filter-alist
- (delq (assq (car list) follow-process-filter-alist)
- follow-process-filter-alist))))
- (setq list (cdr list))))
+ (dolist (process (process-list))
+ (when (eq (follow-call-process-filter process) 'follow-generic-filter)
+ (follow-call-set-process-filter
+ process
+ (cdr-safe (assq process follow-process-filter-alist)))
+ (setq follow-process-filter-alist
+ (delq (assq process follow-process-filter-alist)
+ follow-process-filter-alist))))
(setq follow-intercept-processes nil))
;;}}}
@@ -1964,7 +1883,7 @@ report this using the `report-emacs-bug' function."
;; If we're in follow mode, do our stuff. Select a new window and
;; redisplay. (Actually, it is redundant to check `buf', but I
;; feel it's more correct.)
- (if (and buf win (window-live-p win))
+ (if (and buf (window-live-p win))
(progn
(set-buffer buf)
(if (and (boundp 'follow-mode) follow-mode)
@@ -2105,12 +2024,12 @@ report this using the `report-emacs-bug' function."
(setq windows (follow-all-followers win))
(if (memq orig-window windows)
(progn
- ;; Make sure we're redrawing around the
- ;; selected window.
- ;;
- ;; We must be really careful not to do this
- ;; when we are (indirectly) called by
- ;; `post-command-hook'.
+ ;; Make sure we're redrawing around the
+ ;; selected window.
+ ;;
+ ;; We must be really careful not to do this
+ ;; when we are (indirectly) called by
+ ;; `post-command-hook'.
(select-window orig-window)
(follow-post-command-hook)
(setq orig-window (selected-window)))
@@ -2245,6 +2164,7 @@ This prevents `mouse-drag-region' from messing things up."
(defun follow-unload-function ()
"Unload Follow mode library."
+ (easy-menu-remove-item nil '("Tools") "Follow")
(follow-stop-intercept-process-output)
(dolist (group '((before
;; XEmacs
diff --git a/lisp/font-core.el b/lisp/font-core.el
index 7d7a65e83cc..b97550d2693 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -234,7 +234,7 @@ this function onto `change-major-mode-hook'."
;; hook is run, the major mode is in the process of being changed and we do not
;; know what the final major mode will be. So, `font-lock-change-major-mode'
;; only (a) notes the name of the current buffer, and (b) adds our function
-;; `turn-on-font-lock-if-enabled' to the hook variables
+;; `turn-on-font-lock-if-desired' to the hook variables
;; `after-change-major-mode-hook' and `post-command-hook' (for modes
;; that do not yet run `after-change-major-mode-hook'). By the time
;; the functions on the first of these hooks to be run are run, the new major
@@ -281,14 +281,17 @@ means that Font Lock mode is turned on for buffers in C and C++ modes only."
(repeat :inline t (symbol :tag "mode"))))
:group 'font-lock)
-(defun turn-on-font-lock-if-enabled ()
- (unless (and (eq (car-safe font-lock-global-modes) 'not)
- (memq major-mode (cdr font-lock-global-modes)))
+(defun turn-on-font-lock-if-desired ()
+ (when (cond ((eq font-lock-global-modes t)
+ t)
+ ((eq (car-safe font-lock-global-modes) 'not)
+ (not (memq major-mode (cdr font-lock-global-modes))))
+ (t (memq major-mode (cdr font-lock-global-modes))))
(let (inhibit-quit)
(turn-on-font-lock))))
(define-globalized-minor-mode global-font-lock-mode
- font-lock-mode turn-on-font-lock-if-enabled
+ font-lock-mode turn-on-font-lock-if-desired
:extra-args (dummy)
:initialize 'custom-initialize-safe-default
:init-value (not (or noninteractive emacs-basic-display))
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 6bc5fd8716f..7e1fff79772 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -886,6 +886,13 @@ The value of this variable is used when Font Lock mode is turned on."
(defvar lazy-lock-mode)
(defvar jit-lock-mode)
+(declare-function fast-lock-after-fontify-buffer "obsolete/fast-lock")
+(declare-function fast-lock-after-unfontify-buffer "obsolete/fast-lock")
+(declare-function fast-lock-mode "obsolete/fast-lock")
+(declare-function lazy-lock-after-fontify-buffer "obsolete/lazy-lock")
+(declare-function lazy-lock-after-unfontify-buffer "obsolete/lazy-lock")
+(declare-function lazy-lock-mode "obsolete/lazy-lock")
+
(defun font-lock-turn-on-thing-lock ()
(let ((thing-mode (font-lock-value-in-major-mode font-lock-support-mode)))
(cond ((eq thing-mode 'fast-lock-mode)
@@ -2239,7 +2246,7 @@ other modes in which C preprocessor directives are used. e.g. `asm-mode' and
"with-current-buffer" "with-electric-help"
"with-local-quit" "with-no-warnings"
"with-output-to-string" "with-output-to-temp-buffer"
- "with-selected-window" "with-syntax-table"
+ "with-selected-window" "with-selected-frame" "with-syntax-table"
"with-temp-buffer" "with-temp-file" "with-temp-message"
"with-timeout" "with-timeout-handler") t)
"\\>")
@@ -2287,7 +2294,7 @@ other modes in which C preprocessor directives are used. e.g. `asm-mode' and
;; that do not occur in strings. The associated regexp matches one
;; of `\\\\' `\\(' `\\(?:' `\\|' `\\)'. `\\\\' has been included to
;; avoid highlighting, for example, `\\(' in `\\\\('.
- (while (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?:\\)?\\|[|)]\\)\\)" bound t)
+ (while (re-search-forward "\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\\((\\(?:\\?[0-9]*:\\)?\\|[|)]\\)\\)" bound t)
(unless (match-beginning 2)
(let ((face (get-text-property (1- (point)) 'face)))
(when (or (and (listp face)
diff --git a/lisp/format.el b/lisp/format.el
index d029e3d4683..6e0abd7724e 100644
--- a/lisp/format.el
+++ b/lisp/format.el
@@ -145,7 +145,7 @@ MODE-FN, if specified, is called when visiting a file with that format.
that this would turn on some minor mode.
PRESERVE, if non-nil, means that `format-write-file' should not remove
- this format from `buffer-file-formats'.")
+ this format from `buffer-file-format'.")
;;; Basic Functions (called from Lisp)
@@ -429,13 +429,34 @@ a list (ABSOLUTE-FILE-NAME SIZE)."
(fmt (format-read (format "Read file `%s' in format: "
(file-name-nondirectory file)))))
(list file fmt)))
- (let (value size)
- (let ((format-alist nil))
- (setq value (insert-file-contents filename nil beg end))
- (setq size (nth 1 value)))
- (if format
- (setq size (format-decode format size)
- value (list (car value) size)))
+ (let (value size old-undo)
+ ;; Record only one undo entry for the insertion. Inhibit point-motion and
+ ;; modification hooks as with `insert-file-contents'.
+ (let ((inhibit-point-motion-hooks t)
+ (inhibit-modification-hooks t))
+ ;; Don't bind `buffer-undo-list' to t here to assert that
+ ;; `insert-file-contents' may record whether the buffer was unmodified
+ ;; before.
+ (let ((format-alist nil))
+ (setq value (insert-file-contents filename nil beg end))
+ (setq size (nth 1 value)))
+ (when (consp buffer-undo-list)
+ (let ((head (car buffer-undo-list)))
+ (when (and (consp head)
+ (equal (car head) (point))
+ (equal (cdr head) (+ (point) size)))
+ ;; Remove first entry from `buffer-undo-list', we shall insert
+ ;; another one below.
+ (setq old-undo (cdr buffer-undo-list)))))
+ (when format
+ (let ((buffer-undo-list t))
+ (setq size (format-decode format size)
+ value (list (car value) size)))
+ (unless (eq buffer-undo-list t)
+ (setq buffer-undo-list
+ (cons (cons (point) (+ (point) size)) old-undo)))))
+ (unless inhibit-modification-hooks
+ (run-hook-with-args 'after-change-functions (point) (+ (point) size) 0))
value))
(defun format-read (&optional prompt)
diff --git a/lisp/frame.el b/lisp/frame.el
index cbdfa45d4f7..6e660b1b5e5 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -27,10 +27,27 @@
;;; Code:
-(defvar frame-creation-function nil
- "Window-system dependent function to call to create a new frame.
-The window system startup file should set this to its frame creation
-function, which should take an alist of parameters as its argument.")
+(defvar frame-creation-function-alist
+ (list (cons nil
+ (if (fboundp 'tty-create-frame-with-faces)
+ 'tty-create-frame-with-faces
+ (lambda (parameters)
+ (error "Can't create multiple frames without a window system")))))
+ "Alist of window-system dependent functions to call to create a new frame.
+The window system startup file should add its frame creation
+function to this list, which should take an alist of parameters
+as its argument.")
+
+(defvar window-system-default-frame-alist nil
+ "Alist of window-system dependent default frame parameters.
+You can set this in your `.emacs' file; for example,
+
+ ;; Disable menubar and toolbar on the console, but enable them under X.
+ (setq window-system-default-frame-alist
+ '((x (menu-bar-lines . 1) (tool-bar-lines . 1))
+ (nil (menu-bar-lines . 0) (tool-bar-lines . 0))))
+
+Parameters specified here supersede the values given in `default-frame-alist'.")
;; The initial value given here used to ask for a minibuffer.
;; But that's not necessary, because the default is to have one.
@@ -189,7 +206,9 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
(defun frame-initialize ()
"Create an initial frame if necessary."
;; Are we actually running under a window system at all?
- (if (and window-system (not noninteractive) (not (eq window-system 'pc)))
+ (if (and initial-window-system
+ (not noninteractive)
+ (not (eq initial-window-system 'pc)))
(progn
;; Turn on special-display processing only if there's a window system.
(setq special-display-function 'special-display-popup-frame)
@@ -206,6 +225,9 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
(setq frame-initial-frame-alist
(cons '(horizontal-scroll-bars . t)
frame-initial-frame-alist)))
+ (setq frame-initial-frame-alist
+ (cons (cons 'window-system initial-window-system)
+ frame-initial-frame-alist))
(setq default-minibuffer-frame
(setq frame-initial-frame
(make-frame frame-initial-frame-alist)))
@@ -215,21 +237,13 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
;; because that would override explicit user resizing.
(setq initial-frame-alist
(frame-remove-geometry-params initial-frame-alist))))
+ ;; Copy the environment of the Emacs process into the new frame.
+ (set-frame-parameter frame-initial-frame 'environment
+ (frame-parameter terminal-frame 'environment))
;; At this point, we know that we have a frame open, so we
;; can delete the terminal frame.
(delete-frame terminal-frame)
- (setq terminal-frame nil))
-
- ;; No, we're not running a window system. Use make-terminal-frame if
- ;; we support that feature, otherwise arrange to cause errors.
- (or (eq window-system 'pc)
- (setq frame-creation-function
- (if (fboundp 'tty-create-frame-with-faces)
- 'tty-create-frame-with-faces
- (function
- (lambda (parameters)
- (error
- "Can't create multiple frames without a window system"))))))))
+ (setq terminal-frame nil))))
(defvar frame-notice-user-settings t
"Non-nil means function `frame-notice-user-settings' wasn't run yet.")
@@ -239,7 +253,9 @@ Pass it BUFFER as first arg, and (cdr ARGS) gives the rest of the args."
;; information to which we must react; do what needs to be done.
(defun frame-notice-user-settings ()
"Act on user's init file settings of frame parameters.
-React to settings of `default-frame-alist', `initial-frame-alist' there."
+React to settings of `initial-frame-alist',
+`window-system-default-frame-alist' and `default-frame-alist'
+there (in decreasing order of priority)."
;; Make menu-bar-mode and default-frame-alist consistent.
(when (boundp 'menu-bar-mode)
(let ((default (assq 'menu-bar-lines default-frame-alist)))
@@ -254,20 +270,30 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; parameter in default-frame-alist in a dumped Emacs, which is not
;; what we want.
(when (and (boundp 'tool-bar-mode)
- (not noninteractive))
+ (not noninteractive))
(let ((default (assq 'tool-bar-lines default-frame-alist)))
(if default
- (setq tool-bar-mode (not (eq (cdr default) 0)))
- (setq default-frame-alist
- (cons (cons 'tool-bar-lines (if tool-bar-mode 1 0))
- default-frame-alist)))))
+ (setq tool-bar-mode (not (eq (cdr default) 0)))
+ ;; If Emacs was started on a tty, changing default-frame-alist
+ ;; would disable the toolbar on X frames created later. We
+ ;; want to keep the default of showing a toolbar under X even
+ ;; in this case.
+ ;;
+ ;; If the user explicitly called `tool-bar-mode' in .emacs,
+ ;; then default-frame-alist is already changed anyway.
+ (when initial-window-system
+ (setq default-frame-alist
+ (cons (cons 'tool-bar-lines (if tool-bar-mode 1 0))
+ default-frame-alist))))))
;; Creating and deleting frames may shift the selected frame around,
;; and thus the current buffer. Protect against that. We don't
;; want to use save-excursion here, because that may also try to set
;; the buffer of the selected window, which fails when the selected
;; window is the minibuffer.
- (let ((old-buffer (current-buffer)))
+ (let ((old-buffer (current-buffer))
+ (window-system-frame-alist (cdr (assq initial-window-system
+ window-system-default-frame-alist))))
(when (and frame-notice-user-settings
(null frame-initial-frame))
@@ -279,8 +305,9 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; Can't modify the minibuffer parameter, so don't try.
(setq parms (delq (assq 'minibuffer parms) parms))
(modify-frame-parameters nil
- (if (null window-system)
+ (if (null initial-window-system)
(append initial-frame-alist
+ window-system-frame-alist
default-frame-alist
parms
nil)
@@ -288,7 +315,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; default-frame-alist were already
;; applied in pc-win.el.
parms))
- (if (null window-system) ;; MS-DOS does this differently in pc-win.el
+ (if (null initial-window-system) ;; MS-DOS does this differently in pc-win.el
(let ((newparms (frame-parameters))
(frame (selected-frame)))
(tty-handle-reverse-video frame newparms)
@@ -310,6 +337,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; switch `tool-bar-mode' off.
(when (display-graphic-p)
(let ((tool-bar-lines (or (assq 'tool-bar-lines initial-frame-alist)
+ (assq 'tool-bar-lines window-system-frame-alist)
(assq 'tool-bar-lines default-frame-alist))))
(when (and tool-bar-originally-present
(or (null tool-bar-lines)
@@ -370,6 +398,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; create here, so that its new value, gleaned from the user's
;; .emacs file, will be applied to the existing screen.
(if (not (eq (cdr (or (assq 'minibuffer initial-frame-alist)
+ (assq 'minibuffer window-system-frame-alist)
(assq 'minibuffer default-frame-alist)
'(minibuffer . t)))
t))
@@ -389,6 +418,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
(setq parms (delq (assq 'name parms) parms)))
(setq parms (append initial-frame-alist
+ window-system-frame-alist
default-frame-alist
parms
nil))
@@ -424,12 +454,12 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; variable must be handled similarly.
(let ((users-of-initial
(filtered-frame-list
- (function (lambda (frame)
- (and (not (eq frame frame-initial-frame))
- (eq (window-frame
- (minibuffer-window frame))
- frame-initial-frame)))))))
- (if (or users-of-initial
+ (lambda (frame)
+ (and (not (eq frame frame-initial-frame))
+ (eq (window-frame
+ (minibuffer-window frame))
+ frame-initial-frame))))))
+ (if (or users-of-initial
(eq default-minibuffer-frame frame-initial-frame))
;; Choose an appropriate frame. Prefer frames which
@@ -437,11 +467,10 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
(let* ((new-surrogate
(car
(or (filtered-frame-list
- (function
- (lambda (frame)
- (eq (cdr (assq 'minibuffer
- (frame-parameters frame)))
- 'only))))
+ (lambda (frame)
+ (eq (cdr (assq 'minibuffer
+ (frame-parameters frame)))
+ 'only)))
(minibuffer-frame-list))))
(new-minibuffer (minibuffer-window new-surrogate)))
@@ -450,14 +479,11 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; Wean the frames using frame-initial-frame as
;; their minibuffer frame.
- (mapcar
- (function
- (lambda (frame)
- (modify-frame-parameters
- frame (list (cons 'minibuffer new-minibuffer)))))
- users-of-initial))))
-
- ;; Redirect events enqueued at this frame to the new frame.
+ (dolist (frame users-of-initial)
+ (modify-frame-parameters
+ frame (list (cons 'minibuffer new-minibuffer)))))))
+
+ ;; Redirect events enqueued at this frame to the new frame.
;; Is this a good idea?
(redirect-frame-focus frame-initial-frame new)
@@ -468,6 +494,7 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
;; the new parameters.
(let (newparms allparms tail)
(setq allparms (append initial-frame-alist
+ window-system-frame-alist
default-frame-alist nil))
(if (assq 'height frame-initial-geometry-arguments)
(setq allparms (assq-delete-all 'height allparms)))
@@ -524,19 +551,25 @@ React to settings of `default-frame-alist', `initial-frame-alist' there."
(defun modify-all-frames-parameters (alist)
"Modify all current and future frames' parameters according to ALIST.
This changes `default-frame-alist' and possibly `initial-frame-alist'.
+Furthermore, this function removes all parameters in ALIST from
+`window-system-default-frame-alist'.
See help of `modify-frame-parameters' for more information."
- (let (element) ;; temp
- (dolist (frame (frame-list))
- (modify-frame-parameters frame alist))
-
- (dolist (pair alist) ;; conses to add/replace
- ;; initial-frame-alist needs setting only when
- ;; frame-notice-user-settings is true
- (and frame-notice-user-settings
- (setq element (assoc (car pair) initial-frame-alist))
- (setq initial-frame-alist (delq element initial-frame-alist)))
- (and (setq element (assoc (car pair) default-frame-alist))
- (setq default-frame-alist (delq element default-frame-alist)))))
+ (dolist (frame (frame-list))
+ (modify-frame-parameters frame alist))
+
+ (dolist (pair alist) ;; conses to add/replace
+ ;; initial-frame-alist needs setting only when
+ ;; frame-notice-user-settings is true.
+ (and frame-notice-user-settings
+ (setq initial-frame-alist
+ (assq-delete-all (car pair) initial-frame-alist)))
+ (setq default-frame-alist
+ (assq-delete-all (car pair) default-frame-alist))
+ ;; Remove any similar settings from the window-system specific
+ ;; parameters---they would override default-frame-alist.
+ (dolist (w window-system-default-frame-alist)
+ (setcdr w (assq-delete-all (car pair) (cdr w)))))
+
(and frame-notice-user-settings
(setq initial-frame-alist (append initial-frame-alist alist)))
(setq default-frame-alist (append default-frame-alist alist)))
@@ -567,12 +600,58 @@ is not considered (see `next-frame')."
(select-frame-set-input-focus (selected-frame)))
(defun make-frame-on-display (display &optional parameters)
- "Make a frame on display DISPLAY.
+ "Make a frame on X display DISPLAY.
The optional second argument PARAMETERS specifies additional frame parameters."
(interactive "sMake frame on display: ")
(or (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display)
(error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN"))
- (make-frame (cons (cons 'display display) parameters)))
+ (when (and (boundp 'x-initialized) (not x-initialized))
+ (setq x-display-name display)
+ (x-initialize-window-system))
+ (make-frame `((window-system . x) (display . ,display) . ,parameters)))
+
+(defun make-frame-on-tty (tty type &optional parameters)
+ "Make a frame on terminal device TTY.
+TTY should be the file name of the tty device to use. TYPE
+should be the terminal type string of TTY, for example \"xterm\"
+or \"vt100\". The optional third argument PARAMETERS specifies
+additional frame parameters."
+ (interactive "fOpen frame on tty device: \nsTerminal type of %s: ")
+ (unless tty
+ (error "Invalid terminal device"))
+ (unless type
+ (error "Invalid terminal type"))
+ (make-frame `((window-system . nil) (tty . ,tty) (tty-type . ,type) . ,parameters)))
+
+(defun close-display-connection (display)
+ "Close the connection to a display, deleting all its associated frames.
+For DISPLAY, specify either a frame or a display name (a string).
+If DISPLAY is nil, that stands for the selected frame's display."
+ (interactive
+ (list
+ (let* ((default (frame-parameter nil 'display))
+ (display (completing-read
+ (format "Close display (default %s): " default)
+ (delete-dups
+ (mapcar (lambda (frame)
+ (frame-parameter frame 'display))
+ (frame-list)))
+ nil t nil nil
+ default)))
+ (if (zerop (length display)) default display))))
+ (let ((frames (delq nil
+ (mapcar (lambda (frame)
+ (if (equal display
+ (frame-parameter frame 'display))
+ frame))
+ (frame-list)))))
+ (if (and (consp frames)
+ (not (y-or-n-p (if (cdr frames)
+ (format "Delete %s frames? " (length frames))
+ (format "Delete %s ? " (car frames))))))
+ (error "Abort!")
+ (mapc 'delete-frame frames)
+ (x-close-connection display))))
(defun make-frame-command ()
"Make a new frame, and select it if the terminal displays only one frame."
@@ -594,6 +673,10 @@ The functions are run with one arg, the newly created frame.")
;; Alias, kept temporarily.
(define-obsolete-function-alias 'new-frame 'make-frame "22.1")
+(defvar frame-inherited-parameters '()
+ ;; FIXME: Shouldn't we add `font' here as well?
+ "Parameters `make-frame' copies from the `selected-frame' to the new frame.")
+
(defun make-frame (&optional parameters)
"Return a newly created frame displaying the current buffer.
Optional argument PARAMETERS is an alist of parameters for the new frame.
@@ -611,7 +694,12 @@ You cannot specify either `width' or `height', you must use neither or both.
(minibuffer . only) The frame should contain only a minibuffer.
(minibuffer . WINDOW) The frame should use WINDOW as its minibuffer window.
-Before the frame is created (via `frame-creation-function'), functions on the
+ (window-system . nil) The frame should be displayed on a terminal device.
+ (window-system . x) The frame should be displayed in an X window.
+
+ (terminal . ID) The frame should use the terminal identified by ID.
+
+Before the frame is created (via `frame-creation-function-alist'), functions on the
hook `before-make-frame-hook' are run. After the frame is created, functions
on `after-make-frame-functions' are run with one arg, the newly created frame.
@@ -621,8 +709,29 @@ window system may select the new frame for its own reasons, for
instance if the frame appears under the mouse pointer and your
setup is for focus to follow the pointer."
(interactive)
- (run-hooks 'before-make-frame-hook)
- (let ((frame (funcall frame-creation-function parameters)))
+ (let* ((w (cond
+ ((assq 'terminal parameters)
+ (let ((type (terminal-live-p (cdr (assq 'terminal parameters)))))
+ (cond
+ ((eq type t) nil)
+ ((eq type nil) (error "Terminal %s does not exist" (cdr (assq 'terminal parameters))))
+ (t type))))
+ ((assq 'window-system parameters)
+ (cdr (assq 'window-system parameters)))
+ (t window-system)))
+ (frame-creation-function (cdr (assq w frame-creation-function-alist)))
+ (oldframe (selected-frame))
+ frame)
+ (unless frame-creation-function
+ (error "Don't know how to create a frame on window system %s" w))
+ (run-hooks 'before-make-frame-hook)
+ (setq frame (funcall frame-creation-function (append parameters (cdr (assq w window-system-default-frame-alist)))))
+ (normal-erase-is-backspace-setup-frame frame)
+ ;; Inherit the original frame's parameters.
+ (dolist (param frame-inherited-parameters)
+ (unless (assq param parameters) ;Overridden by explicit parameters.
+ (let ((val (frame-parameter oldframe param)))
+ (when val (set-frame-parameter frame param val)))))
(run-hook-with-args 'after-make-frame-functions frame)
frame))
@@ -639,26 +748,51 @@ setup is for focus to follow the pointer."
(defun minibuffer-frame-list ()
"Return a list of all frames with their own minibuffers."
(filtered-frame-list
- (function (lambda (frame)
- (eq frame (window-frame (minibuffer-window frame)))))))
-
-(defun frames-on-display-list (&optional display)
- "Return a list of all frames on DISPLAY.
-DISPLAY is a name of a display, a string of the form HOST:SERVER.SCREEN.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display."
- (let* ((display (or display (frame-parameter nil 'display)))
+ (lambda (frame)
+ (eq frame (window-frame (minibuffer-window frame))))))
+
+;; Used to be called `terminal-id' in termdev.el.
+(defun get-device-terminal (device)
+ "Return the terminal corresponding to DEVICE.
+DEVICE can be a terminal, a frame, nil (meaning the selected frame's terminal),
+the name of an X display device (HOST.SERVER.SCREEN) or a tty device file."
+ (cond
+ ((or (null device) (framep device))
+ (frame-terminal device))
+ ((stringp device)
+ (let ((f (car (filtered-frame-list
+ (lambda (frame)
+ (or (equal (frame-parameter frame 'display) device)
+ (equal (frame-parameter frame 'tty) device)))))))
+ (or f (error "Display %s does not exist" device))
+ (frame-terminal f)))
+ ((terminal-live-p device) device)
+ (t
+ (error "Invalid argument %s in `get-device-terminal'" device))))
+
+(defun frames-on-display-list (&optional device)
+ "Return a list of all frames on DEVICE.
+
+DEVICE should be a terminal, a frame,
+or a name of an X display or tty (a string of the form
+HOST:SERVER.SCREEN).
+
+If DEVICE is omitted or nil, it defaults to the selected
+frame's terminal device."
+ (let* ((terminal (get-device-terminal device))
(func #'(lambda (frame)
- (equal (frame-parameter frame 'display) display))))
+ (eq (frame-terminal frame) terminal))))
(filtered-frame-list func)))
-(defun framep-on-display (&optional display)
- "Return the type of frames on DISPLAY.
-DISPLAY may be a display name or a frame. If it is a frame, its type is
-returned.
-If DISPLAY is omitted or nil, it defaults to the selected frame's display.
-All frames on a given display are of the same type."
- (or (framep display)
- (framep (car (frames-on-display-list display)))))
+(defun framep-on-display (&optional terminal)
+ "Return the type of frames on TERMINAL.
+TERMINAL may be a terminal id, a display name or a frame. If it
+is a frame, its type is returned. If TERMINAL is omitted or nil,
+it defaults to the selected frame's terminal device. All frames
+on a given display are of the same type."
+ (or (terminal-live-p terminal)
+ (framep terminal)
+ (framep (car (frames-on-display-list terminal)))))
(defun frame-remove-geometry-params (param-list)
"Return the parameter list PARAM-LIST, but with geometry specs removed.
@@ -686,12 +820,10 @@ the user during startup."
(select-frame frame)
(raise-frame frame)
;; Ensure, if possible, that frame gets input focus.
- (cond ((memq window-system '(x mac))
- (x-focus-frame frame))
- ((eq window-system 'w32)
- (w32-focus-frame frame)))
- (cond (focus-follows-mouse
- (set-mouse-position (selected-frame) (1- (frame-width)) 0))))
+ (when (memq (window-system frame) '(x mac w32))
+ (x-focus-frame frame))
+ (when focus-follows-mouse
+ (set-mouse-position (selected-frame) (1- (frame-width)) 0)))
(defun other-frame (arg)
"Select the ARGth different visible frame on current display, and raise it.
@@ -725,6 +857,21 @@ Otherwise, that variable should be nil."
(iconify-frame)
(make-frame-visible)))
+(defun suspend-frame ()
+ "Do whatever is right to suspend the current frame.
+Calls `suspend-emacs' if invoked from the controlling tty device,
+`suspend-tty' from a secondary tty device, and
+`iconify-or-deiconify-frame' from an X frame."
+ (interactive)
+ (let ((type (framep (selected-frame))))
+ (cond
+ ((memq type '(x w32)) (iconify-or-deiconify-frame))
+ ((eq type t)
+ (if (controlling-tty-p)
+ (suspend-emacs)
+ (suspend-tty)))
+ (t (suspend-emacs)))))
+
(defun make-frame-names-alist ()
(let* ((current-frame (selected-frame))
(falist
@@ -758,10 +905,8 @@ If there is no frame by that name, signal an error."
(raise-frame frame)
(select-frame frame)
;; Ensure, if possible, that frame gets input focus.
- (cond ((memq window-system '(x mac))
- (x-focus-frame frame))
- ((eq window-system 'w32)
- (w32-focus-frame frame)))
+ (cond ((memq (window-system frame) '(x w32))
+ (x-focus-frame frame)))
(when focus-follows-mouse
(set-mouse-position frame (1- (frame-width frame)) 0))))
@@ -776,11 +921,10 @@ where
ALIST is an association list specifying some of FRAME's parameters, and
WINDOW-CONFIG is a window configuration object for FRAME."
(cons 'frame-configuration
- (mapcar (function
- (lambda (frame)
- (list frame
- (frame-parameters frame)
- (current-window-configuration frame))))
+ (mapcar (lambda (frame)
+ (list frame
+ (frame-parameters frame)
+ (current-window-configuration frame)))
(frame-list))))
(defun set-frame-configuration (configuration &optional nodelete)
@@ -797,36 +941,35 @@ is given and non-nil, the unwanted frames are iconified instead."
(list 'frame-configuration-p configuration)))
(let ((config-alist (cdr configuration))
frames-to-delete)
- (mapcar (function
- (lambda (frame)
- (let ((parameters (assq frame config-alist)))
- (if parameters
- (progn
- (modify-frame-parameters
- frame
- ;; Since we can't set a frame's minibuffer status,
- ;; we might as well omit the parameter altogether.
- (let* ((parms (nth 1 parameters))
- (mini (assq 'minibuffer parms))
- (name (assq 'name parms))
- (explicit-name (cdr (assq 'explicit-name parms))))
- (when mini (setq parms (delq mini parms)))
- ;; Leave name in iff it was set explicitly.
- ;; This should fix the behavior reported in
- ;; http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01632.html
- (when (and name (not explicit-name))
- (setq parms (delq name parms)))
- parms))
- (set-window-configuration (nth 2 parameters)))
- (setq frames-to-delete (cons frame frames-to-delete))))))
- (frame-list))
- (if nodelete
- ;; Note: making frames invisible here was tried
- ;; but led to some strange behavior--each time the frame
- ;; was made visible again, the window manager asked afresh
- ;; for where to put it.
- (mapcar 'iconify-frame frames-to-delete)
- (mapcar 'delete-frame frames-to-delete))))
+ (dolist (frame (frame-list))
+ (let ((parameters (assq frame config-alist)))
+ (if parameters
+ (progn
+ (modify-frame-parameters
+ frame
+ ;; Since we can't set a frame's minibuffer status,
+ ;; we might as well omit the parameter altogether.
+ (let* ((parms (nth 1 parameters))
+ (mini (assq 'minibuffer parms))
+ (name (assq 'name parms))
+ (explicit-name (cdr (assq 'explicit-name parms))))
+ (when mini (setq parms (delq mini parms)))
+ ;; Leave name in iff it was set explicitly.
+ ;; This should fix the behavior reported in
+ ;; http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg01632.html
+ (when (and name (not explicit-name))
+ (setq parms (delq name parms)))
+ parms))
+ (set-window-configuration (nth 2 parameters)))
+ (setq frames-to-delete (cons frame frames-to-delete)))))
+ (mapc (if nodelete
+ ;; Note: making frames invisible here was tried
+ ;; but led to some strange behavior--each time the frame
+ ;; was made visible again, the window manager asked afresh
+ ;; for where to put it.
+ 'iconify-frame
+ 'delete-frame)
+ frames-to-delete)))
;;;; Convenience functions for accessing and interactively changing
;;;; frame parameters.
@@ -854,12 +997,11 @@ pixels) is kept by adjusting the numbers of the lines and columns."
(interactive
(let* ((completion-ignore-case t)
(font (completing-read "Font name: "
- (mapcar #'list
;; x-list-fonts will fail with an error
;; if this frame doesn't support fonts.
- (x-list-fonts "*" nil (selected-frame)))
- nil nil nil nil
- (frame-parameter nil 'font))))
+ (x-list-fonts "*" nil (selected-frame))
+ nil nil nil nil
+ (frame-parameter nil 'font))))
(list font current-prefix-arg)))
(let (fht fwd)
(if keep-size
@@ -980,6 +1122,12 @@ bars (top, bottom, or nil)."
(cons vert hor)))
;;;; Frame/display capabilities.
+(defun selected-terminal ()
+ "Return the terminal that is now selected."
+ (frame-terminal (selected-frame)))
+
+(declare-function msdos-mouse-p) ;; Defined in C only for on platform.
+
(defun display-mouse-p (&optional display)
"Return non-nil if DISPLAY has a mouse available.
DISPLAY can be a display name, a frame, or nil (meaning the selected
@@ -1157,7 +1305,7 @@ the question is inapplicable to a certain kind of display."
((eq frame-type 'pc)
16)
(t
- (tty-display-color-cells)))))
+ (tty-display-color-cells display)))))
(defun display-visual-class (&optional display)
"Returns the visual class of DISPLAY.
diff --git a/lisp/fringe.el b/lisp/fringe.el
index 3160d960ffd..7ea3e8a2b5d 100644
--- a/lisp/fringe.el
+++ b/lisp/fringe.el
@@ -104,40 +104,13 @@ This is usually invoked when setting `fringe-mode' via customize."
See `fringe-mode' for possible values and their effect."
(setq fringe-mode value)
- ;; Apply it to default-frame-alist.
- (let ((parameter (assq 'left-fringe default-frame-alist)))
- (if (consp parameter)
- (setcdr parameter (if (consp fringe-mode)
- (car fringe-mode)
- fringe-mode))
- (setq default-frame-alist
- (cons (cons 'left-fringe (if (consp fringe-mode)
- (car fringe-mode)
- fringe-mode))
- default-frame-alist))))
- (let ((parameter (assq 'right-fringe default-frame-alist)))
- (if (consp parameter)
- (setcdr parameter (if (consp fringe-mode)
- (cdr fringe-mode)
- fringe-mode))
- (setq default-frame-alist
- (cons (cons 'right-fringe (if (consp fringe-mode)
- (cdr fringe-mode)
- fringe-mode))
- default-frame-alist))))
-
- ;; Apply it to existing frames.
- (let ((frames (frame-list)))
- (while frames
- (modify-frame-parameters
- (car frames)
- (list (cons 'left-fringe (if (consp fringe-mode)
- (car fringe-mode)
- fringe-mode))
- (cons 'right-fringe (if (consp fringe-mode)
- (cdr fringe-mode)
- fringe-mode))))
- (setq frames (cdr frames)))))
+ (modify-all-frames-parameters
+ (list (cons 'left-fringe (if (consp fringe-mode)
+ (car fringe-mode)
+ fringe-mode))
+ (cons 'right-fringe (if (consp fringe-mode)
+ (cdr fringe-mode)
+ fringe-mode)))))
;; For initialization of fringe-mode, take account of changes
;; made explicitly to default-frame-alist.
diff --git a/lisp/generic-x.el b/lisp/generic-x.el
index fbabf6e6996..7b65f07e2c1 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -524,6 +524,8 @@ like an INI file. You can add this hook to `find-file-hook'."
(defvar bat-generic-mode-keymap (make-sparse-keymap)
"Keymap for `bat-generic-mode'.")
+(declare-function w32-shell-name "w32-fns" ())
+
(defun bat-generic-mode-compile ()
"Run the current BAT file in a compilation buffer."
(interactive)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 5712ed059f4..8bd32cfc667 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,15 +1,160 @@
+2007-11-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-send-mail-function): Check for smtpmail too.
+
+ * utf7.el (utf7-encode, utf7-decode): Use coding system
+ `utf-7'/`utf-7-imap' from utf-7.el' if available.
+
+ * message.el (message-send-mail-function): New function.
+ (message-send-mail-function): Set default using
+ message-send-mail-function. Adjust doc string.
+ (message-send-mail-with-mailclient): New function.
+
+2007-11-17 Richard Stallman <rms@gnu.org>
+
+ * assistant.el: Remove file.
+
+2007-11-16 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * smime.el (from):
+ * rfc2047.el (message-posting-charset):
+ * qp.el (mm-use-ultra-safe-encoding):
+ * pop3.el (parse-time-months):
+ * nnrss.el (mm-text-html-renderer, mm-text-html-washer-alist):
+ * nnml.el (files):
+ * nnheader.el (gnus-newsgroup-name, nnheader-file-coding-system)
+ (jka-compr-compression-info-list, ange-ftp-path-format)
+ (efs-path-regexp):
+ * nndiary.el (files):
+ * mml2015.el (mc-default-scheme, mc-schemes, pgg-default-user-id)
+ (pgg-errors-buffer, pgg-output-buffer, epg-user-id-alist)
+ (epg-digest-algorithm-alist, inhibit-redisplay)
+ (password-cache-expiry):
+ * mml1991.el (pgg-default-user-id, pgg-errors-buffer)
+ (pgg-output-buffer, password-cache-expiry):
+ * mml.el (mml-dnd-protocol-alist, ange-ftp-name-format)
+ (efs-path-regexp):
+ * mml-smime.el (epg-user-id-alist, epg-digest-algorithm-alist)
+ (inhibit-redisplay):
+ * mm-uu.el (file-name, start-point, end-point, entry)
+ (gnus-newsgroup-name, gnus-newsgroup-charset):
+ * mm-util.el (mm-mime-mule-charset-alist, latin-unity-coding-systems)
+ (latin-unity-ucs-list):
+ * mm-bodies.el (mm-uu-yenc-decode-function, mm-uu-decode-function)
+ (mm-uu-binhex-decode-function):
+ * message.el (gnus-message-group-art, gnus-list-identifiers, )
+ (rmail-enable-mime-composing, gnus-local-organization)
+ (gnus-post-method, gnus-select-method, gnus-active-hashtb)
+ (gnus-read-active-file, facemenu-add-face-function)
+ (facemenu-remove-face-function, gnus-article-decoded-p)
+ (tool-bar-mode):
+ * mail-source.el (display-time-mail-function):
+ * gnus-util.el (nnmail-pathname-coding-system)
+ (nnmail-active-file-coding-system, gnus-emphasize-whitespace-regexp)
+ (gnus-original-article-buffer, gnus-user-agent)
+ (rmail-default-rmail-file, mm-text-coding-system, tool-bar-mode)
+ (xemacs-codename, sxemacs-codename, emacs-program-version):
+ * gnus-sum.el (tool-bar-mode, gnus-tmp-header, number):
+ * gnus-start.el (gnus-agent-covered-methods)
+ (gnus-agent-file-loading-local, gnus-agent-file-loading-cache)
+ (gnus-current-headers, gnus-thread-indent-array, gnus-newsgroup-name)
+ (gnus-newsgroup-headers, gnus-group-list-mode)
+ (gnus-group-mark-positions, gnus-newsgroup-data)
+ (gnus-newsgroup-unreads, nnoo-state-alist)
+ (gnus-current-select-method, mail-sources)
+ (nnmail-scan-directory-mail-source-once, nnmail-split-history)
+ (nnmail-spool-file, gnus-cache-active-hashtb):
+ * gnus-mh.el (mh-lib-progs):
+ * gnus-ems.el (gnus-tmp-unread, gnus-tmp-replied)
+ (gnus-tmp-score-char, gnus-tmp-indentation, gnus-tmp-opening-bracket)
+ (gnus-tmp-lines, gnus-tmp-name, gnus-tmp-closing-bracket)
+ (gnus-tmp-subject-or-nil, gnus-check-before-posting, gnus-mouse-face)
+ (gnus-group-buffer):
+ * gnus-cite.el (font-lock-defaults-computed, font-lock-keywords)
+ (font-lock-set-defaults):
+ * gnus-art.el (tool-bar-map, w3m-minor-mode-map)
+ (gnus-face-properties-alist, charset, gnus-summary-article-menu)
+ (gnus-summary-post-menu, total-parts, type, condition, length):
+ * gnus-agent.el (gnus-agent-read-agentview):
+ * flow-fill.el (show-trailing-whitespace):
+ * gnus-group.el (tool-bar-mode, nnrss-group-alist): Remove unnecessary
+ eval-and-compile wrappers for byte compiler pacifiers.
+
+ * mm-view.el (mm-inline-image-xemacs): Only do something for XEmacs.
+ (mm-display-inline-fontify): Check for featurep 'xemacs not
+ extent-list.
+
+ * mm-decode.el (mm-display-external): Check for featurep 'xemacs not
+ itimer-list.
+ (mm-create-image-xemacs): Only do something for XEmacs.
+ (mm-image-fit-p): Check for featurep 'xemacs not glyph-width.
+
+ * mm-util.el (mm-find-buffer-file-coding-system): Add check for XEmacs.
+
+ * gnus-registry.el (gnus-adaptive-word-syntax-table):
+ * gnus-fun.el (gnus-face-properties-alist): Pacify byte compiler.
+
2007-11-15 Juanma Barranquero <lekktu@gmail.com>
* nnimap.el (nnimap-split-download-body):
- * gnus-demon.el (gnus-demon): Fix typos in docstrings.
+ * gnus-demon.el (gnus-demon):
+ * gnus-uu.el (gnus-uu-default-view-rules): Fix typos in docstrings.
+
+2007-11-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nntp.el (nntp-insert-buffer-substring, nntp-copy-to-buffer): New
+ macros.
+ (nntp-wait-for, nntp-retrieve-articles, nntp-async-trigger)
+ (nntp-retrieve-headers-with-xover): Use nntp-insert-buffer-substring to
+ copy data from unibyte buffer to multibyte current buffer.
+ (nntp-retrieve-headers, nntp-retrieve-groups); Use nntp-copy-to-buffer
+ to copy data from unibyte current buffer to multibyte buffer.
+ (nntp-make-process-buffer): Make process buffer unibyte.
+
+ * pop3.el (pop3-open-server): Fix typo in Lisp code.
+
+2007-11-14 Denys Duchier <denys.duchier@univ-orleans.fr> (tiny change)
+
+ * pop3.el (pop3-open-server): Accept and process data more robustly at
+ connexion start to avoid spurious "POP SSL connexion failed" errors.
+
+2007-11-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-start.el (gnus-active-to-gnus-format): Use unibyte buffer to
+ read group names.
+
+2007-11-12 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-uu.el (gnus-uu-default-view-rules): Fix typos in docstring.
- (gnus-uu-decode-save): Fix typo in prompt.
+ * gnus-msg.el (gnus-confirm-mail-reply-to-news): Adjust :version.
+
+2007-11-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnmail.el (nnmail-parse-active): Make group names unibyte.
+ (nnmail-save-active): Use a unibyte buffer when saving active file,
+ which may contain non-ASCII group names.
+
+ * nnml.el (nnml-request-group): Decode group names in messages.
+
+2007-11-05 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-citation-line-function)
+ (message-insert-formatted-citation-line): Fix spelling of
+ `message-insert-formated-citation-line'.
2007-11-03 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-sum.el (gnus-summary-highlight): Mark as risky local variable.
+2007-11-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnml.el (nnml-request-rename-group): Bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+
+ * gnus-group.el (gnus-group-rename-group): Encode non-ASCII group name
+ that a user enters; decode group names in messages.
+
+ * gnus-msg.el (gnus-inews-do-gcc): Encode non-ASCII group names.
+
2007-11-01 Reiner Steib <Reiner.Steib@gmx.de>
* mm-util.el (mm-charset-eval-alist): Mark as risky local variable.
@@ -21,11 +166,17 @@
* gnus-group.el (gnus-group-icon-list): Mark as risky local variable.
-2007-11-01 ARISAWA Akihiro <ari@mbf.ocn.ne.jp> (tiny change)
+2007-11-01 Teodor Zlatanov <tzz@lifelogs.com>
- * message.el (message-use-alternative-email-as-from): Examine the
- From header as well; use message-make-from in order to include a
- user's full name. [ Backported bug fix from No Gnus. ]
+ * encrypt.el: Improve documentation to fix function name typo.
+ Reported by Daiki Ueno <ueno@unixuser.org>.
+
+2007-11-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-next-page): Honor gnus-article-over-scroll
+ even if the point is not in the last page of an article.
+ (gnus-article-prev-page): Honor gnus-article-over-scroll when moving
+ back to the previous page.
2007-10-30 Reiner Steib <Reiner.Steib@gmx.de>
@@ -35,6 +186,130 @@
* gnus-ems.el (gnus-x-splash): Work even if there's no scroll bar.
+2007-10-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * message.el (message-check-news-body-syntax): Avoid
+ mm-string-as-multibyte.
+ (message-hide-headers): Don't assume (point-min)==1.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-remove-blank-cited-lines): Fix if remove is
+ given.
+ (message-bogus-address-regexp): New variable.
+ (message-bogus-recipient-p): New function.
+ (message-check-recipients): New command.
+ (message-syntax-checks): Add `bogus-recipient'.
+ (message-fix-before-sending): Add `bogus-recipient'.
+
+ * gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): Add "alpine".
+ (gnus-treat-emphasize, gnus-treat-body-boundary): Don't test
+ window-system.
+
+2007-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.el: Bump version to Gnus v5.13.
+
+2007-10-28 Miles Bader <miles@gnu.org>
+
+ * nnheader.el (nnheader-uniquify-message-id): Make sure this is defined
+ at compile-time too.
+
+2007-10-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-msg.el (gnus-message-setup-hook): Add
+ `message-remove-blank-cited-lines' to options.
+
+2007-10-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-remove-blank-cited-lines): New function.
+ Suggested by Karl Pl,Ad(Bsterer.
+
+2007-10-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * hashcash.el (mail-add-payment): Replace mapcar called for effect with
+ mapc.
+
+ * imap.el (imap-open): Replace mapcar called for effect with mapc.
+ (top-level): Use mapc to set functions to be traced for debugging.
+
+ * legacy-gnus-agent.el (gnus-agent-convert-agentview): Replace mapcar
+ called for effect with while loop.
+
+ * message.el (message-talkative-question): Replace mapcar called for
+ effect with mapc.
+
+ * mm-util.el: Use mapc instead of mapcar to make compatible functions.
+ (mm-find-mime-charset-region, mm-find-charset-region): Replace mapcar
+ called for effect with dolist.
+
+ * mml.el (mml-insert-mime): Replace mapcar called for effect with mapc.
+
+ * nndiary.el: Use dolist instead of mapcar to add diary headers to
+ gnus-extra-headers and nnmail-extra-headers.
+
+ * nnimap.el (nnimap-request-update-info-internal): Replace mapcar
+ called for effect with dolist.
+ (top-level): Use mapc to set functions to be traced for debugging.
+
+ * nnmail.el (nnmail-read-incoming-hook): Doc fix.
+ (nnmail-split-fancy-with-parent): Replace mapcar called for effect with
+ dolist.
+
+ * nnmaildir.el (nnmaildir--delete-dir-files, nnmaildir-request-close):
+ Replace mapcar called for effect with mapc.
+ (nnmaildir--scan, nnmaildir-request-scan, nnmaildir-retrieve-groups)
+ (nnmaildir-request-update-info, nnmaildir-request-delete-group)
+ (nnmaildir-retrieve-headers, nnmaildir-request-set-mark)
+ (nnmaildir-close-group): Replace mapcar called for effect with dolist.
+
+ * nnrss.el (nnrss-make-hash-index): Use gnus-remove-if instead of
+ remove-if that's a cl function.
+
+ * webmail.el (webmail-debug): Replace mapcar called for effect with
+ dolist.
+
+ * gnus-xmas.el (gnus-group-add-icon): Replace mapcar called for effect
+ with mapc.
+
+2007-10-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-read-agentview, gnus-agent-save-alist)
+ (gnus-agent-expire-unagentized-dirs): Replace mapcar called for effect
+ with while loop.
+
+ * gnus-art.el: Use mapc instead of mapcar to make gnus-article-*
+ functions from article-* functions.
+ (gnus-multi-decode-header): Replace mapcar called for effect with
+ dolist.
+
+ * gnus-bookmark.el (gnus-bookmark-bmenu-list)
+ (gnus-bookmark-show-details): Replace mapcar called for effect with
+ while loop.
+
+ * gnus-diary.el (gnus-diary-update-group-parameters): Replace mapcar
+ called for effect with while loop.
+
+ * gnus-group.el (gnus-group-suspend): Replace mapcar called for effect
+ with dolist.
+
+ * gnus-registry.el (gnus-registry-split-fancy-with-parent): Replace
+ mapcar called for effect with dolist.
+
+ * gnus-spec.el (gnus-correct-length): Make it simple and fast.
+
+ * gnus-sum.el (gnus-multi-decode-encoded-word-string)
+ (gnus-build-sparse-threads, gnus-summary-limit-include-expunged):
+ Replace mapcar called for effect with dolist.
+ (gnus-simplify-buffer-fuzzy): Replace mapcar called for effect with
+ mapc.
+
+ * gnus-topic.el (gnus-topic-find-groups, gnus-topic-move-group):
+ Replace mapcar called for effect with dolist.
+ (gnus-topic-list): Replace mapcar called for effect with mapc.
+
+ * gnus.el: Use mapc instead of mapcar to add autoloads.
+
2007-10-23 Richard Stallman <rms@gnu.org>
* gnus-group.el (gnus-group-highlight): Mark as risky.
@@ -44,6 +319,17 @@
* gnus.el (gnus-server-to-method): Return method found first in
gnus-newsrc-alist.
+ * gnus-art.el (gnus-article-highlight-signature)
+ (gnus-insert-prev-page-button, gnus-insert-next-page-button): Make a
+ button overlay without the front stickiness.
+
+2007-10-22 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-agent.el (gnus-agent-expire-group-1): The check for an unsorted
+ overview buffer needed a catch to receive its throw.
+ (gnus-agent-flush-cache): Declared as interactive to make this function
+ easier to use.
+
2007-10-20 Reiner Steib <Reiner.Steib@gmx.de>
* html2text.el (html2text-fix-paragraph): Use `forward-line' instead of
@@ -59,21 +345,89 @@
* gnus-util.el (gnus-string<): New function.
* gnus-sum.el (gnus-article-sort-by-author)
- (gnus-article-sort-by-subject): Use it.
+ (gnus-article-sort-by-recipient, gnus-article-sort-by-subject): Use it.
2007-10-15 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-win.el (gnus-configure-windows): Focus on the frame for which
the frame-focus tag is set in gnus-buffer-configuration.
+2007-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-add-button): Make a button overlay without
+ the front stickiness.
+
+2007-10-11 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-button-alist): Exclude newline in RFC2396-compliant
+ url pattern; remove duplicate one.
+ (gnus-article-extend-url-button): New function.
+ (gnus-article-add-buttons): Use it.
+ (gnus-button-push): Use concatenated url that it makes.
+
+2007-10-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * sieve-manage.el (sieve-manage-interactive-login): Doc fix.
+ (sieve-manage-open): Use `mapc' instead of `mapcar'.
+
+2007-10-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * gnus-uu.el (gnus-uu-reginize-string, gnus-uu-expand-numbers):
+ Don't hardcode point-min==1.
+
+2007-09-30 David Kastrup <dak@gnu.org>
+
+ * gnus-art.el (gnus-article-reply-with-original)
+ (gnus-article-followup-with-original): When `transient-mark-mode' is
+ off, refrain from active-region behavior for followups.
+
2007-10-08 Reiner Steib <Reiner.Steib@gmx.de>
* mm-util.el (mm-charset-synonym-alist): Alias gbk to cp936.
+ Fix comment about "iso8859-1".
+
+2007-10-08 Daiki Ueno <ueno@unixuser.org>
+
+ * mm-decode.el (mm-possibly-verify-or-decrypt): Replace PARTS with the
+ ones returned from the verify-function.
+
+ * mm-uu.el (mm-uu-pgp-signed-extract-1): Call
+ mml2015-extract-cleartext-signature if extraction failed.
+
+2007-10-07 Daiki Ueno <ueno@unixuser.org>
+
+ * mm-uu.el (mm-uu-pgp-signed-extract-1): Delete the first line
+ beginning with "-----BEGIN PGP SIGNED MESSAGE-----" if extraction
+ failed.
2007-10-04 Reiner Steib <Reiner.Steib@gmx.de>
* Relicense "GPLv2 or later" files to "GPLv3 or later".
+2007-09-27 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-sum.el (gnus-summary-kill-thread): Allow universal prefix zero
+ to mark a thread as expirable. Add variable `hide' to handle hiding of
+ thread for both the null and zero (kill/expire thread) universal prefix
+ cases.
+ (gnus-summary-expire-thread): Add new function to expire a thread,
+ using gnus-summary-kill-thread.
+ (gnus-summary-mode-map, gnus-summary-thread-map): Add 'M-C-e' and 'T e'
+ shortcuts for gnus-summary-expire-thread.
+ (gnus-summary-mode-map, gnus-summary-thread-map): Remove `M-C-e' and `T
+ e' bindings for gnus-summary-expire-thread. Add `T E' binding.
+
+2007-09-25 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-store-extra-entry): Allow for nil
+ extras value, so an extras entry can be deleted.
+ (gnus-registry-delete-extra-entry): Use it.
+ (gnus-registry-fetch-extra-flags, gnus-registry-has-extra-flag)
+ (gnus-registry-store-extra-flags, gnus-registry-delete-extra-flags)
+ (gnus-registry-delete-all-extra-flags): Allow for arbitrary flag symbol
+ storage through the gnus-registry, and provide an appropriate API for
+ it.
+
2007-09-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sum.el (gnus-newsgroup-maximum-articles): Move from gnus.el.
@@ -105,14 +459,73 @@
(nnmbox-save-mail): Quote lines looking like delimiters at the right
positions; make sure article ends with newline.
+ * message.el (message-display-abbrev): Don't infloop when a user
+ inserts SPC in the beginning of header.
+
+2007-09-12 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-unfollowed-groups): Add INBOX to the
+ list of groups not followed by default. Fix type to be regexp.
+ (gnus-registry-grep-in-list): Fix inverted parameters to string-match.
+
+2007-09-06 Tassilo Horn <tassilo@member.fsf.org>
+
+ * hmac-def.el (define-hmac-function): Switch from old-style to
+ new-style backquotes.
+
+ * md4.el (md4-make-step): likewise.
+
+2007-09-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-start.el (gnus-gnus-to-newsrc-format): Use a unibyte buffer and
+ raw-text coding system when saving .newsrc file, which may contain
+ non-ASCII group names.
+
2007-09-05 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-cus.el (gnus-score-extra): New widget.
(gnus-score-extra-convert): New function.
(gnus-score-customize): Use it for Extra.
+2007-08-31 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-extract-cleartext-signature): New function.
+ (mml2015-mailcrypt-clear-verify): Use it.
+ (mml2015-gpg-clear-verify): Use it.
+ (mml2015-pgg-clear-verify): Use it.
+ (mml2015-epg-clear-verify): Replace the current part with the output
+ from GnuPG; don't extract the plaintext by itself.
+
+ * mm-uu.el (mm-uu-pgp-beginning-signature): Abolish.
+ (mm-uu-pgp-signed-extract-1): Bind coding-system-for-read when calling
+ mml2015-clear-verify-function; don't touch the armor headers or
+ dash-escaped text here.
+
+2007-08-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-edit-part): Don't jump to nonexistent part.
+ (gnus-mime-view-part-as-type-internal): Default to text/plain for text
+ parts, or application/octet-stream as a last resort.
+ (gnus-mime-view-part-as-type): Don't toggle display.
+ (gnus-mime-view-part-as-charset): Don't turn off display before
+ querying charset.
+
+ * mm-view.el (mm-inline-text-html-render-with-w3): Don't add XEmacs
+ stuff to undisplayer function in Emacs.
+ (mm-inline-text-html-render-with-w3m): Remove Emacs/W3 stuff.
+
+ * mml.el (mml-generate-mime-1): Prefer utf-8 when encoding
+ text/calendar parts.
+
2007-08-23 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-art.el (gnus-mime-display-single): Use utf-8 by default for
+ decoding text/calendar parts.
+
+ * message.el (message-forward-make-body-mime): Always mark body as
+ having no illegible text; remove signed-or-encrypted argument.
+ (message-forward-make-body): Don't pass signed-or-encrypted arg to it.
+
* mml.el (mml-generate-mime): Make sure it uses multibyte temp buffer.
(mml-generate-mime-1): Don't encode body if it is specified to be in
raw form; don't make buffer be unibyte when inserting multibyte string.
@@ -131,6 +544,14 @@
2007-08-17 Katsumi Yamaoka <yamaoka@jpl.org>
+ * imap.el (imap-logout-timeout): New variable.
+ (imap-logout, imap-logout-wait): New functions.
+ (imap-kerberos4-open, imap-gssapi-open, imap-close): Use them.
+
+ * nnimap.el (nnimap-logout-timeout): New server variable.
+ (nnimap-open-server, nnimap-close-server): Bind imap-logout-timeout to
+ nnimap-logout-timeout.
+
* gnus-art.el (gnus-article-summary-command-nosave)
(gnus-article-read-summary-keys): Don't use 3rd arg of pop-to-buffer.
@@ -145,20 +566,118 @@
(gnus-list-of-read-articles, gnus-sequence-of-unread-articles):
Limit the range of articles according to gnus-maximum-newsgroup.
+2007-08-14 Tassilo Horn <tassilo@member.fsf.org>
+
+ * gnus-art.el (gnus-sticky-article): Fixed problems described in
+ <b4mps1qitio.fsf@jpl.org> on ding. Thanks to Katsumi.
+ Don't perform gnus-configure-windows here; reuse existing sticky
+ article buffer.
+
+ * gnus-sum.el (gnus-summary-display-article): Setup article buffer if
+ it doesn't exist in gnus-article-mode.
+
+2007-08-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-decoded-group-names): New variable.
+ (gnus-agent-decoded-group-name): New function.
+ (gnus-agent-group-path, gnus-agent-group-pathname): Use it.
+ (gnus-agent-expire-group-1): Use it; decode group name in messages.
+
+2007-08-12 Tassilo Horn <tassilo@member.fsf.org>
+
+ * gnus-sum.el (gnus-summary-article-map, gnus-summary-make-menu-bar):
+ Add binding for gnus-sticky-article.
+ (gnus-summary-exit): Don't kill sticky article buffers.
+
+ * gnus-art.el (gnus-sticky-article-mode): New mode to generate a sticky
+ article buffer.
+ (gnus-sticky-article, gnus-kill-sticky-article-buffer)
+ (gnus-kill-sticky-article-buffers): New commands.
+
2007-08-10 Katsumi Yamaoka <yamaoka@jpl.org>
* nntp.el (nntp-xref-number-is-evil): New server variable.
(nntp-find-group-and-number): If it is non-nil, don't trust article
numbers in the Xref header.
+2007-08-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-read-group): New function.
+ (gnus-agent-flush-group, gnus-agent-expire-group)
+ (gnus-agent-regenerate-group): Use it.
+ (gnus-agent-expire-unagentized-dirs): Bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+
2007-08-06 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-ems.el (gnus-x-splash): Bind inhibit-read-only to t.
+ * gnus-sum.el (gnus-summary-insert-articles): Mark inserted articles
+ that are unread as unread, and also as selected so that information of
+ marks having been changed by a user may be updated when exiting group.
+
2007-08-04 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-art.el (article-hide-headers): Bind inhibit-read-only to t.
+2007-08-03 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-display-single): Pass part number that is
+ calculated ignoring signature parts to gnus-treat-article.
+
+2007-08-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-security-verify-or-decrypt): Don't narrow to
+ a point here in order to keep the window start.
+ (gnus-insert-mime-security-button): Make a button overlay without the
+ front stickiness.
+ (gnus-mime-display-security): Goto the end of a button.
+
+ * gnus-group.el (gnus-group-name-at-point): Fix regexps.
+
+2007-08-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-name-at-point): Rewrite; rename from
+ group-name-at-point.
+ (gnus-group-completing-read): New function that offers decoded
+ non-ASCII group names for completion.
+ (gnus-fetch-group, gnus-group-read-ephemeral-group)
+ (gnus-group-jump-to-group, gnus-group-make-group-simple)
+ (gnus-group-unsubscribe-group, gnus-group-fetch-charter)
+ (gnus-group-fetch-control): Use it.
+ (gnus-fetch-group): Use group-name-at-point for the initial value
+ rather than the default value; use gnus-alive-p.
+
+ * gnus-msg.el (gnus-group-mail, gnus-group-news, gnus-group-post-news)
+ (gnus-summary-mail-other-window, gnus-summary-news-other-window)
+ (gnus-summary-post-news): Use gnus-group-completing-read.
+
+ * gnus-sum.el (gnus-select-newsgroup): Decode group name in error msg.
+ (gnus-read-move-group-name): Decode group name for completion.
+
+2007-07-31 Ted Zlatanov <tzz@lifelogs.com>
+
+ * gnus-srvr.el (gnus-server-close-all-servers): Close servers not only
+ in gnus-inserted-opened-servers but also in gnus-server-alist (Katsumi
+ Yamaoka slightly modified the code).
+
+2007-07-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnmail.el (nnmail-group-names-not-encoded-p): New variable.
+ (nnmail-split-incoming): Bind it.
+
+ * nnml.el (nnml-group-name-charset): New function.
+ (nnml-decoded-group-name): Use it; don't decode group name if
+ nnmail-group-names-not-encoded-p is non-nil.
+ (nnml-encoded-group-name): New function.
+ (nnml-group-pathname): Inline nnml-decoded-group-name.
+ (nnml-request-expire-articles): Decode group name in message.
+ (nnml-request-delete-group): Ditto; bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+ (nnml-save-mail, nnml-active-number): Work with decoded group names and
+ not decoded ones according to nnmail-group-names-not-encoded-p.
+ (nnml-generate-active-info): Use nnml-encoded-group-name.
+
2007-08-08 Glenn Morris <rgm@gnu.org>
* gmm-utils.el, gnus-async.el, gnus-msg.el, gnus-score.el
@@ -169,20 +688,125 @@
* Relicense all FSF files to GPLv3 or later.
-2007-07-24 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus-msg.el (gnus-summary-supersede-article)
- (gnus-summary-resend-message-edit): Add Gcc header.
- (gnus-summary-resend-bounced-mail): Ditto; search whole body for parent
- article's Message-ID; refer parent article in summary buffer.
+2007-07-23 Katsumi Yamaoka <yamaoka@jpl.org>
- * message.el (message-bounce): Call mime-to-mml.
+ * gnus-sum.el (gnus-summary-move-article): Make
+ gnus-summary-respool-article work.
2007-07-21 Reiner Steib <Reiner.Steib@gmx.de>
* mm-uu.el (mm-uu-type-alist): Refer to mm-uu-configure-list in doc
string.
+2007-07-20 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * nnrss.el (nnrss-ignore-article-fields): New variable. List of fields
+ that should be ignored when comparing distant RSS articles with local
+ ones.
+ (nnrss-make-hash-index): New function. Create a hash index according
+ to the ignored fields.
+ (nnrss-check-group): Use it.
+
+2007-07-20 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-group-pathname): Take notice of the method.
+
+ * gnus-art.el (article-decode-group-name): Decode Xref header too.
+
+ * gnus-group.el (gnus-group-make-group): Encode group name here unless
+ the new optional argument ENCODED is non-nil.
+ (gnus-group-make-doc-group): Use gnus-group-name-charset to determine
+ coding system for encoding group name.
+ (gnus-group-make-rss-group): Pass un-encoded group name to
+ gnus-group-make-group.
+ (gnus-group-set-info): Tell gnus-group-make-group that group name is
+ encoded.
+
+ * gnus-sum.el (gnus-summary-move-article, gnus-read-move-group-name):
+ Encode group name to which articles are moved or copied.
+ (gnus-summary-edit-article): Use gnus-group-name-charset to determine
+ coding system for encoding Newsgroup, Followup-To and Xref headers.
+
+ * nnagent.el (nnagent-request-set-mark): Use unibyte buffer to compose
+ marks; use nnheader-file-coding-system to write a file.
+ (nnagent-retrieve-headers): Bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+
+ * nnmail.el (nnmail-insert-xref): Don't break non-ASCII group name.
+
+ * nnml.el (nnml-decoded-group-name, nnml-group-pathname): New functions.
+ (nnml-request-article, nnml-request-create-group)
+ (nnml-request-rename-group, nnml-find-id)
+ (nnml-possibly-change-directory, nnml-possibly-create-directory)
+ (nnml-save-mail, nnml-active-number, nnml-marks-changed-p)
+ (nnml-save-marks): Use nnml-group-pathname instead of
+ nnmail-group-pathname.
+
+ (nnml-request-create-group, nnml-request-expire-articles)
+ (nnml-request-move-article, nnml-request-delete-group)
+ (nnml-deletable-article-p, nnml-possibly-create-directory)
+ (nnml-get-nov-buffer, nnml-generate-nov-databases-directory)
+ (nnml-open-marks): Bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+
+ (nnml-request-article): Pass server argument to nnml-find-group-number.
+ (nnml-request-create-group, nnml-active-number, nnml-save-marks): Pass
+ server argument to nnml-possibly-create-directory.
+ (nnml-request-accept-article): Pass server argument to
+ nnml-active-number and nnml-save-mail.
+ (nnml-find-group-number): Pass server argument to nnml-find-id.
+ (nnml-request-update-info): Pass server argument to
+ nnml-marks-changed-p.
+
+ (nnml-find-id, nnml-find-group-number, nnml-possibly-create-directory)
+ (nnml-save-mail, nnml-active-number): Add server argument.
+
+ (nnml-request-delete-group): Warn if group is missing.
+ (nnml-get-nov-buffer): Decode group name.
+ (nnml-generate-active-info): Encode group name.
+ (nnml-open-marks): Decode group name in messages.
+
+2007-07-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-part-wrapper): Work with the nearest part
+ if it is not specified.
+ (gnus-article-pipe-part, gnus-article-save-part)
+ (gnus-article-interactively-view-part, gnus-article-copy-part)
+ (gnus-article-view-part-as-charset, gnus-article-view-part-externally)
+ (gnus-article-inline-part, gnus-article-save-part-and-strip)
+ (gnus-article-replace-part, gnus-article-delete-part)
+ (gnus-article-view-part-as-type): Pass raw prefix argument to
+ gnus-article-part-wrapper.
+
+2007-07-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-save-active): Bind
+ nnheader-file-coding-system to gnus-agent-file-coding-system.
+
+ * gnus-cache.el (gnus-cache-save-buffers)
+ (gnus-cache-possibly-enter-article, gnus-cache-request-article)
+ (gnus-cache-retrieve-headers, gnus-cache-change-buffer)
+ (gnus-cache-possibly-remove-article, gnus-cache-articles-in-group)
+ (gnus-cache-braid-nov, gnus-cache-braid-heads)
+ (gnus-cache-generate-active, gnus-cache-rename-group)
+ (gnus-cache-delete-group, gnus-cache-update-file-total-fetched-for)
+ (gnus-cache-update-overview-total-fetched-for): Bind
+ file-name-coding-system to nnmail-pathname-coding-system.
+ (gnus-cache-decoded-group-names, gnus-cache-unified-group-names): New
+ variables.
+ (gnus-cache-decoded-group-name): New function.
+ (gnus-cache-file-name): Use it.
+ (gnus-cache-generate-active): Use non-decoded group name for active.
+
+ * gnus-util.el (gnus-write-buffer): Bind file-name-coding-system at the
+ right place.
+ (gnus-write-active-file): Don't break non-ASCII group names.
+
+ * nntp.el (nntp-marks-changed-p): Bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+
+ * gnus-uu.el (gnus-uu-decode-save): Typo.
+
2007-07-16 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-srvr.el (gnus-server-font-lock-keywords): Quote faces.
@@ -194,11 +818,63 @@
2007-07-13 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-agent.el (gnus-agent-rename-group, gnus-agent-delete-group)
+ (gnus-agent-fetch-articles, gnus-agent-unfetch-articles)
+ (gnus-agent-crosspost, gnus-agent-backup-overview-buffer)
+ (gnus-agent-flush-group, gnus-agent-flush-cache)
+ (gnus-agent-fetch-headers, gnus-agent-load-alist)
+ (gnus-agent-read-agentview, gnus-agent-expire-group-1)
+ (gnus-agent-retrieve-headers, gnus-agent-request-article)
+ (gnus-agent-regenerate-group)
+ (gnus-agent-update-files-total-fetched-for)
+ (gnus-agent-update-view-total-fetched-for): Bind
+ file-name-coding-system to nnmail-pathname-coding-system.
+ (gnus-agent-group-pathname): Don't encode file names by
+ nnmail-pathname-coding-system.
+ (gnus-agent-save-local): Bind file-name-coding-system correctly; bind
+ coding-system-for-write instead of buffer-file-coding-system to
+ gnus-agent-file-coding-system.
+
+ * gnus-msg.el (gnus-inews-make-draft, gnus-inews-insert-archive-gcc):
+ Decode group name.
+
+ * gnus-srvr.el (gnus-browse-foreign-server): Make group names unibyte.
+
+ * gnus-start.el (gnus-update-active-hashtb-from-killed)
+ (gnus-read-newsrc-el-file): Make group names unibyte.
+
+ * nnmail.el (nnmail-group-pathname): Don't encode file names by
+ nnmail-pathname-coding-system.
+
+ * nnrss.el (nnrss-file-coding-system): Doc fix; make it begin with *.
+ (nnrss-request-delete-group): Bind file-name-coding-system to
+ nnmail-pathname-coding-system.
+ (nnrss-read-server-data, nnrss-read-group-data): Bind
+ file-name-coding-system correctly.
+ (nnrss-check-group): Pass nnrss-file-coding-system to md5.
+
+ * nntp.el: Require gnus-group for the function gnus-group-name-charset.
+ (nntp-server-to-method-cache): New variable.
+ (nntp-group-pathname): New function that decodes non-ASCII group names.
+ (nntp-possibly-create-directory, nntp-marks-changed-p)
+ (nntp-save-marks, nntp-open-marks): Use it.
+ (nntp-possibly-create-directory, nntp-open-marks):
+ Bind file-name-coding-system to nnmail-pathname-coding-system.
+ (nntp-open-marks): Decode group names when bootstrapping marks.
+
+ * rfc2047.el (rfc2047-encode-message-header): Make XEmacs decode
+ Newsgroups and Folowup-To headers.
+
+2007-07-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
* gnus-srvr.el (gnus-server-agent-face, gnus-server-opened-face)
(gnus-server-closed-face, gnus-server-denied-face)
(gnus-server-offline-face): Remove variable.
(gnus-server-font-lock-keywords): Use faces that are not aliases.
+ * gnus-util.el (gnus-message-with-timestamp-1): Use log-message instead
+ of modifying message-stack directly for XEmacs.
+
* mm-util.el (mm-decode-coding-string, mm-encode-coding-string)
(mm-decode-coding-region, mm-encode-coding-region): Don't modify string
if the coding-system argument is nil for XEmacs.
@@ -211,6 +887,18 @@
(rfc2047-encode-parameter): Use rfc2045-encode-string to quote or not
to quote the parameter value.
+2007-07-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-name-charset): Allow a method of the short
+ form in gnus-group-name-charset-method-alist.
+
+ * gnus-eform.el (gnus-edit-form): Add optional argument layout which
+ overrides the default layout edit-form.
+
+ * gnus-win.el (gnus-buffer-configuration): Add edit-server.
+
+ * gnus-srvr.el (gnus-server-edit-server): Use edit-server layout.
+
2007-07-04 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sum.el (gnus-summary-catchup): Don't recognize cached articles
@@ -220,11 +908,39 @@
* gnus-start.el (gnus-level-unsubscribed): Improve doc string.
+2007-07-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnagent.el (nnagent-request-set-mark): Also set the marks for the
+ original back end that keeps marks in the local system.
+
2007-06-26 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-art.el (gnus-article-summary-command-nosave)
- (gnus-article-read-summary-keys): Don't set the 3rd arg of
- pop-to-buffer for XEmacs.
+ * gnus-art.el (gnus-article-summary-command-nosave): Don't set the 3rd
+ arg of pop-to-buffer for XEmacs.
+ (gnus-article-read-summary-keys): Ditto; don't restore window
+ configuration if summary command ends up with neither article buffer
+ nor summary buffer; describe bindings if summary keys end with C-h.
+
+2007-06-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-fix-before-sending): Skip raw message part to be
+ forwarded while checking illegible text.
+ (message-forward-make-body-mime, message-forward-make-body): Mark
+ signed or encrypted raw message as having no illegible text.
+
+2007-06-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-util.el (gnus-add-timestamp-to-message): New user option.
+ (gnus-message-with-timestamp-1): New macro.
+ (gnus-message-with-timestamp): New function.
+ (gnus-message): Use them.
+
+ * nnheader.el (nnheader-message): Use them.
+
+2007-06-16 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-start.el (gnus-gnus-to-quick-newsrc-format): Add newlines to
+ .newsrc.eld file.
2007-06-14 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -239,14 +955,26 @@
2007-06-08 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-ems.el (gnus-x-splash): Fix calculation; error in tty.
+
+2007-06-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
* gnus-ems.el (gnus-x-splash): Make it work.
* gnus-start.el (gnus-1): Relax restrictions that prevent gnus-x-splash
from being used.
- * gnus-art.el (gnus-article-summary-command-nosave): Correct the order
- of the arguments passed to pop-to-buffer.
- (gnus-article-read-summary-keys): Ditto.
+2007-06-05 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-insert-mime-button): Make a button overlay without
+ the front stickiness.
+ (gnus-article-summary-command-nosave): Correct the order of the
+ arguments passed to pop-to-buffer.
+ (gnus-article-read-summary-keys): Ditto; make it work properly when the
+ summary command ends up with the article buffer.
+
+ * mm-decode.el (mm-insert-part): Separate the extracted parts that have
+ the same faces.
2007-06-07 Juanma Barranquero <lekktu@gmail.com>
@@ -265,29 +993,182 @@
(gnus-mime-view-part-internally): Fix predicate function passed to
completing-read.
- * mm-decode.el (mm-image-fit-p): Return t if argument is not an image;
- return t if image size is just the same as window size.
+ * mm-decode.el (mm-image-fit-p): Return t if argument is not an image.
+
+ * gnus.el (gnus-update-message-archive-method): Add :version.
+
+2007-06-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.el (gnus-update-message-archive-method): New variable.
+
+ * gnus-start.el (gnus-setup-news): Update saved "archive" method
+ according to gnus-message-archive-method if
+ gnus-update-message-archive-method is non-nil.
+
+2007-05-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-sum.el (gnus-summary-limit-to-address): New function. Suggested
+ by Loic Dachary <loic@dachary.org>.
+ (gnus-summary-limit-map, gnus-summary-make-menu-bar): Add it.
2007-05-28 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-pop-to-buffer): Add switch-function argument.
(message-mail): Pass switch-function argument to it.
+2007-05-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-decode.el (mm-file-name-rewrite-functions): Make it customizable.
+ Improve doc string.
+
+2007-05-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-header-from, gnus-header-subject, gnus-header-name)
+ (gnus-header-content)
+ * gnus-cite.el (gnus-cite-10)
+ * gnus-srvr.el (gnus-server-closed)
+ * gnus.el (gnus-group-mail-1, gnus-group-mail-1-empty)
+ (gnus-group-mail-2, gnus-group-mail-2-empty, gnus-group-mail-3)
+ (gnus-group-mail-3-empty, gnus-group-mail-low)
+ (gnus-group-mail-low-empty, gnus-splash)
+ * message.el (message-header-to, message-header-cc)
+ (message-header-subject, message-header-other, message-header-name)
+ (message-header-xheader, message-separator, message-cited-text)
+ (message-mml): Lighten colors of faces used for dark background.
+
+2007-05-24 Simon Josefsson <simon@josefsson.org>
+
+ * nnimap.el (nnimap-need-unselect-to-notice-new-mail): Change default
+ to t as an experiment. Suggested by Greg Troxel <gdt@work.lexort.com>.
+
2007-05-24 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-narrow-to-headers-or-head): Ignore
mail-header-separator in the body.
+2007-05-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-decode.el (mm-image-fit-p): Return t if image size is just the
+ same as window size.
+
+2007-05-22 Kevin Ryde <user42@zip.com.au>
+
+ * message.el (message-font-lock-keywords): Use message-header-xheader
+ face for "X-Foo", its apparent intended purpose. Move "X-" pattern
+ ahead of the anything pattern, to get it recognised.
+
+2007-05-12 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * gnus-sum.el (gnus-articles-to-read)
+ (gnus-summary-insert-old-articles): Don't truncate group name for
+ `read-string'.
+
+ * gnus-util.el (gnus-limit-string): Delete this function.
+
+ * gnus-sum.el (gnus-simplify-subject-fully): Use
+ `truncate-string-to-width' instead.
+
+2007-05-11 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * gnus-sum.el (gnus-summary-next-group-on-exit): New variable. Tell
+ if, on summary exit, the next group has to be selected.
+ (gnus-summary-exit): Use it.
+
2007-05-10 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-art.el (gnus-article-mode): Fix comment about displaying
non-break space.
-2007-05-09 Didier Verna <didier@xemacs.org>
+2007-05-10 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-diary.el, nndiary.el: Remove the description comment (nndiary is
- now properly documented in the Gnus manual). Fix the spelling of "Back
- End".
+ * nnfolder.el (nnfolder-request-group, nnfolder-request-create-group):
+ Check if group is not a directory.
+ (nnfolder-request-expire-articles): Don't delete articles if the target
+ group is not available.
+
+ * nnml.el (nnml-request-create-group): Properly check if group is not a
+ file.
+ (nnml-request-expire-articles): Don't delete articles if the target
+ group is not available.
+
+ * rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings):
+ Don't quote characters that are within parentheses.
+
+2007-05-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-sum.el (gnus-auto-select-on-ephemeral-exit): New variable.
+ (gnus-handle-ephemeral-exit): Select article according to it.
+
+2007-05-08 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-insert-formated-citation-line): Remove newline.
+ (message-citation-line-format): Add final \n here so that the user can
+ avoid a blank line.
+
+2007-05-03 Dan Christensen <jdc@uwo.ca>
+
+ * nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p)
+ (nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head):
+ Update lanl/arXiv support.
+
+2007-05-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.el: Bump version number.
+
+2007-05-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump version.
+
+2007-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+ * gnus.el: No Gnus v0.6 is released.
+
+2007-04-27 Didier Verna <didier@xemacs.org>
+
+ * gnus-util.el (gnus-orify-regexp): Moved and renamed to ...
+ * gmm-utils.el (gmm-regexp-concat): here.
+ * message.el: Don't require 'gnus-util.
+ (message-dont-reply-to-names): Handle name change above.
+ * gnus-sum.el (gnus-ignored-from-addresses): Ditto.
+
+2007-04-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-charset-synonym-alist): Don't make it a user option
+ since the initial value varies according to the system.
+
+2007-04-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-charset-synonym-alist): Defcustom.
+
+2007-04-25 NAKAJI Hiroyuki <nakaji@jp.freebsd.org> (tiny change)
+
+ * mm-util.el (mm-charset-synonym-alist): Map iso8859-1 to iso-8859-1.
+
+2007-04-24 Didier Verna <didier@xemacs.org>
+
+ Improve the type of gnus-ignored-from-addresses.
+ * gnus-util.el (gnus-orify-regexp): New function.
+ * message.el (gnus-util): Require it.
+ * message.el (message-dont-reply-to-names): Use gnus-orify-regexp.
+ * gnus-sum.el (gnus-ignored-from-addresses): New function.
+ * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Use it.
+
+2007-04-24 Didier Verna <didier@xemacs.org>
+
+ * gnus-sum.el:
+ * gnus-utils.el: Fix some trailing whitespaces.
+
+2007-04-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-msg.el (gnus-summary-resend-message-edit): Add Gcc header.
+ (gnus-summary-resend-bounced-mail): Ditto; search whole body for parent
+ article's Message-ID; refer parent article in summary buffer.
+
+ * message.el (message-bounce): Call mime-to-mml.
+
+2007-04-20 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-msg.el (gnus-summary-supersede-article): Add Gcc header.
2007-04-19 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -295,12 +1176,35 @@
(gnus-mime-view-part-as-charset): Use it; redisplay subpart currently
displayed of multipart/alternative part if it is invoked from summary
buffer.
- (gnus-article-part-wrapper): Select article window.
* mm-view.el (mm-inline-text-html-render-with-w3m)
(mm-inline-text-html-render-with-w3m-standalone)
(mm-inline-render-with-function): Use mail-parse-charset by default.
+2007-04-18 Levin Du <zslevin@gmail.com> (tiny change)
+
+ * parse-time.el (parse-time-string-chars): Check if CHAR
+ is less than the length of parse-time-syntax.
+
+2007-04-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-uu.el (gnus-uu-digest-mail-forward): Pull articles processed
+ from gnus-newsgroup-processable.
+
+2007-04-16 Didier Verna <didier@xemacs.org>
+
+ * gnus-msg.el (gnus-configure-posting-styles): Handle
+ message-signature-directory properly with :file syntax. Reported by
+ "Leo".
+
+2007-04-11 Didier Verna <didier@xemacs.org>
+
+ New user option: message-signature-directory.
+ * gnus-msg.el (gnus-configure-posting-styles): Support it.
+ * message.el (message-insert-signature): Ditto.
+ * message.el (message-signature-file): Doc update.
+ * message.el (message-signature-directory): New.
+
2007-04-10 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-inews-yank-articles): Use
@@ -323,6 +1227,9 @@
2007-03-31 Reiner Steib <Reiner.Steib@gmx.de>
+ * message.el (message-fill-column): New variable.
+ (message-mode): Use it. Add comment on a possible new hook.
+
* nnmail.el (nnmail-spool-file): Mark as obsolete.
(nnmail-get-new-mail): Reformat.
@@ -333,8 +1240,37 @@
2007-03-27 Thien-Thi Nguyen <ttn@gnu.org>
- * message.el (message-yank-original): Fix bug:
- Don't switch point and mark unnecessarily.
+ * message.el (message-yank-original): Don't switch point and mark
+ unnecessarily to put point and mark as documented.
+
+2007-03-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-put-addresses-in-ecomplete): Only fetch headers
+ from the message heads.
+
+2007-03-25 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-art.el (gnus-article-set-window-start): Do nothing when the
+ article buffer does not have a window. This may not be the best
+ solution but is certainly better than setting the start of the null,
+ that is the current, window.
+
+2007-03-24 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-draft.el (gnus-draft-setup-hook): New hook.
+ (gnus-draft-setup): Run it.
+
+ * gnus-score.el (gnus-inhibit-slow-scoring): New variable, renamed from
+ gnus-score-fast-scoring. Allow regexp.
+ (gnus-score-headers): Use it.
+
+ * gnus-util.el (gnus-emacs-version): Include "no MULE" in no-MULE
+ XEmacs.
+
+ * gnus-art.el (gnus-article-browse-html-article): Fix typo in doc
+ string.
+ (gnus-button-alist): Also catch `<f1> k ...'.
+ (gnus-treat-display-x-face): Fix doc string.
2007-03-25 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
@@ -342,10 +1278,11 @@
evaluation of gnus-extended-version to ensure correct generation of the
User-Agent header when message-generate-headers-first is used.
-2007-03-24 Reiner Steib <Reiner.Steib@gmx.de>
+2007-03-24 Simon Josefsson <simon@josefsson.org>
- * gnus-art.el (gnus-button-alist): Also catch `<f1> k ...'.
- (gnus-treat-display-x-face): Fix doc string.
+ * hashcash.el (hashcash-generate-payment-async): Don't crash if
+ hashcash-path is nil. Don't call callback with incorrect number of
+ parameters if val is 0.
2007-03-20 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
@@ -371,6 +1308,43 @@
(message-mail-other-window): Adjust argument of message-setup.
(message-mail-other-frame): Ditto.
+2007-03-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (font-lock-set-defaults): Autoload it for Emacs.
+ (gnus-message-citation-mode): Require font-lock for XEmacs; make sure
+ to turn font-lock on when turning gnus-message-citation-mode on.
+
+2007-03-06 Daiki Ueno <ueno@unixuser.org>
+
+ * mml-smime.el (mml-smime-use): New variable; default to use openssl.
+ (mml-smime-function-alist): New variable; add epg as the backend.
+ * mml-sec.el (mml-smime-sign): Don't require mml-smime, autoload
+ mml-smime- functions instead.
+ * mm-view.el: Require smime.
+
+2007-03-05 Didier Verna <didier@xemacs.org>
+
+ * gnus-topic.el (gnus-topic-hierarchical-parameters): Perform merging
+ instead of just inheritance for posting styles.
+ * gnus.el (gnus-group-fast-parameter): Fix typo in comment.
+
+2007-02-24 John Paul Wallington <jpw@pobox.com>
+
+ * tls.el (tls-certtool-program): Fix custom type.
+
+2007-02-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (gnus-message-search-citation-line): Use point-at-bol
+ and point-at-eol instead of line-(beginning|end)-position.
+
+ * assistant.el (assistant-parse-buffer): Ditto.
+
+2007-02-28 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-find-usable-key): New function.
+ (mml2015-epg-sign): Use it.
+ (mml2015-epg-encrypt): Use it.
+
2007-02-28 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-make-in-reply-to): Quote name containing
@@ -378,12 +1352,36 @@
if there are special characters. Reported by NAKAJI Hiroyuki
<nakaji@jp.freebsd.org>.
+2007-02-27 Didier Verna <didier@xemacs.org>
+
+ Include the group parameters as well as the topic ones in the
+ inheritance filter process.
+ * gnus-topic.el (gnus-topic-hierarchical-parameters): New optional
+ argument GROUP-PARAMS-LIST.
+ * gnus-topic.el (gnus-group-topic-parameters): Use it.
+
2007-02-27 Katsumi Yamaoka <yamaoka@jpl.org>
* nntp.el (nntp-never-echoes-commands)
(nntp-open-connection-functions-never-echo-commands): New variables.
(nntp-send-command): Use them.
+2007-02-20 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-verify): Simplified.
+
+2007-02-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mml.el (mml-content-disposition-alist): New user option.
+ (mml-content-disposition): New function.
+ (mml-insert-mime-headers, mml-minibuffer-read-disposition): Use it.
+ (mml-attach-file, mml-dnd-attach-file): Pass file name to it.
+
+2007-02-19 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-verify): Convert LF to CRLF before signature
+ verification.
+
2007-02-15 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* nnweb.el (nnweb-google-parse-1): Fix date parsing to also match on
@@ -393,6 +1391,57 @@
* smiley.el (smiley-regexp-alist): Add "dead" smiley.
+2007-02-14 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
+
+ * nntp.el (nntp-send-command): Don't wait for echoes when
+ nntp-open-ssl-stream is used.
+
+2007-02-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (gnus-test-font-lock-add-keywords)
+ (gnus-message-add-citation-keywords)
+ (gnus-message-remove-citation-keywords): Remove.
+ (gnus-message-citation-mode): Instead of modifying font-lock-keywords
+ directly, make the variables in font-lock-defaults buffer-local, add
+ gnus-message-citation-keywords to them and then update the value of
+ font-lock-keywords.
+
+2007-02-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-cite-original-1): Don't call
+ gnus-article-highlight-citation.
+
+ * gnus-cite.el (gnus-cite-parse): Work with two or more MS-type
+ citations; fix line count.
+
+2007-02-08 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (gnus-test-font-lock-add-keywords): New function.
+ (gnus-message-add-citation-keywords)
+ (gnus-message-remove-citation-keywords): Use it; fix the emulating
+ versions of font-lock-add-keywords and font-lock-remove-keywords to
+ work with XEmacs correctly.
+
+2007-02-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (gnus-cite-face-list): Set the values of
+ gnus-message-max-citation-depth and gnus-message-citation-keywords.
+ (gnus-message-max-citation-depth): Use defvar rather than defconst.
+ (gnus-message-cite-prefix-regexp): New variable.
+ (gnus-message-search-citation-line): Use it; protect against long
+ citation prefix; fill match data with nil rather than 0 for XEmacs; set
+ the 0th match data for Emacs.
+ (gnus-message-citation-keywords): Set LAXMATCH flag in every HIGHLIGHT.
+ (gnus-message-add-citation-keywords): Append keywords rather than
+ prepending; emulate font-lock-add-keywords if it is not available.
+ (gnus-message-remove-citation-keywords): Emulate
+ font-lock-remove-keywords if it is not available.
+
+ * gnus-msg.el (gnus-message-highlight-citation): Default to t.
+
+ * message.el (message-cite-prefix-regexp): Set the value of
+ gnus-message-cite-prefix-regexp.
+
2007-02-01 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* nnweb.el (nnweb-google-parse-1): Update parser.
@@ -419,11 +1468,32 @@
* gnus-art.el (gnus-signature-limit): Fix custom choice.
+2007-01-22 Daiki Ueno <ueno@unixuser.org>
+
+ * mm-util.el (mm-inhibit-file-name-handlers): Add epa-file-handler.
+
+ * mm-decode.el (mm-save-part-to-file): Use `mm-write-region' instead of
+ `write-region' to respect `mm-inhibit-file-name-handlers'.
+
2007-01-19 Reiner Steib <Reiner.Steib@gmx.de>
* nnsoup.el (nnsoup-directory, nnsoup-packer, nnsoup-packet-directory):
Use gnus-home-directory instead of "~/" or "$HOME".
+2007-01-17 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * encrypt.el (encrypt-insert-file-contents): Add better prompt
+ to mention filename.
+ Add comments at beginning regarding usage.
+ (encrypt-write-file-contents): Change interactive so a string is
+ acceptable. If the file has no associated model, show an error instead
+ of a nonsense prompt.
+
+2007-01-16 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * spam.el (spam-bsfilter-ham-switch): Fix typo.
+ Thanks to Yoshihiko Yamada for kind notification of this typo.
+
2007-01-12 Kenichi Handa <handa@m17n.org>
* uudecode.el (uudecode-decode-region-internal): Make it work in a
@@ -431,34 +1501,76 @@
2007-01-14 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-score.el (gnus-score-fast-scoring): New variable.
+ (gnus-score-headers): Use it.
+
* gnus-sum.el (gnus-auto-select-first): Improve doc string.
-2007-01-07 Reiner Steib <Reiner.Steib@gmx.de>
+ * message.el (message-cite-original-1): Call
+ gnus-article-highlight-citation if requested.
+ (message-make-from): Allow name and address as optional arguments.
+
+ * gnus-cite.el (gnus-article-highlight-citation): Add SAME-BUFFER arg.
+
+ * gnus-art.el (gnus-article-browse-html-article): Add warning about web
+ bugs to doc string.
+ (gnus-button-alist): Add mid\\|message-id.
+ (gnus-button-fetch-group): Extend for use in
+ `browse-url-browser-function'.
+ (gnus-button-url-regexp): Try to catch paired parentheses like in
+ Wikipedia URLs.
+
+ * gnus-sum.el (gnus-summary-reparent-children): Another doc string fix.
+ Suggested by Simon Krahnke <overlord@gmx.li>.
+
+2007-01-13 Romain Francoise <romain@orebokech.com>
+
+ * nnml.el (nnml-use-compressed-files): Fix typo in docstring.
+ Update copyright.
+
+2007-01-13 Patric Mueller <bhaak@bigfoot.com> (tiny change)
- * gnus-soup.el: Add missing :group in previous change.
+ * gnus-sum.el (gnus-summary-reparent-children): Fix typo in doc string.
-2007-01-05 Reiner Steib <Reiner.Steib@gmx.de>
+2007-01-09 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-unfollowed-groups)
+ (gnus-registry-split-fancy-with-parent): Fix documentation.
+
+2007-01-08 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * spam-report.el (spam-report-gmane-internal): Speed up spam reporting
+ from nnweb groups.
+
+2006-12-31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * spam-report.el (spam-report-gmane-internal): Add necessary "/" to
+ Xref urls. Erase buffer before requesting head.
+
+ * mm-decode.el (mm-display-external): Use itimer function for XEmacs.
+
+2007-01-07 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-soup.el (gnus-soup): New custom group. Make user variables
customizable.
-2007-01-03 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+2007-01-05 Daiki Ueno <ueno@unixuser.org>
- * nnweb.el (nnweb-gmane-create-mapping): Put back code to merge the
- headers read from disk with the ones newly found in the current search.
- This should no longer cause problems, because the article numbers in
- Gmane's `nov.php' output are ignored since the previous change.
+ * mml2015.el (mml2015-epg-sign): Ask user whether to skip or abort if
+ no signing key is found.
+ (mml2015-epg-encrypt): Ask user whether to skip or abort if
+ no encrypting and/or signing key is found.
-2006-01-03 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+2007-01-03 Reiner Steib <Reiner.Steib@gmx.de>
- * nnweb.el (nnweb-gmane-create-mapping): Keep the mapping stable for
- solid groups.
+ * spam-report.el (spam-report-gmane-spam): Remove redundant message.
-2006-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2007-01-01 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
- * nnweb.el (nnweb-gmane-create-mapping): Use the article number from
- the headers when creating the mapping to avoid mismappings.
- (nnweb-gmane-create-mapping): Always nix out old mapping.
+ * nnweb.el (nnweb-gmane-create-mapping): Put back code to merge the
+ headers read from disk with the ones newly found in the current search.
+ This should no longer cause problems, because the article numbers in
+ Gmane's `nov.php' output are ignored since the previous change.
2007-01-02 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
@@ -468,10 +1580,48 @@
* mm-decode.el (mm-display-external): Use itimer function for XEmacs.
+2007-01-01 Romain Francoise <romain@orebokech.com>
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Fix typo.
+
+2006-12-31 Steve Youngs <steve@sxemacs.org>
+
+ * gnus-cite.el: Load easy-mmode at compile time for (S)XEmacs to get
+ `define-minor-mode' macro definition expanded properly.
+ (gnus-message-citation-mode): This is now OK for (S)XEmacs so don't
+ exclude it there.
+
+ * gnus-msg.el (gnus-message-highlight-citation): Revert Reiner's patch
+ of 2006-12-30. The default is nil on (S)XEmacs already because of the
+ `fboundp' test.
+ (gnus-message-citation-mode): Revert Reiner's patch of 2006-12-30.
+ This is OK to autoload in (S)XEmacs now.
+
+2006-12-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-summary-limit-to-singletons): New command and
+ keystroke.
+ (gnus-summary-limit-to-singletons): Fix typo.
+
+ * spam-report.el (spam-report-gmane-internal): Fall back on Xref if all
+ else fails.
+
2006-12-30 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
- * gnus-sum.el (gnus-summary-insert-dormant-articles): Fix typo in
- message.
+ * gnus-cite.el (turn-off-gnus-message-citation-mode): Fix typo in
+ docstring.
+
+ * gnus-sum.el (gnus-summary-insert-ticked-articles): New command.
+ (gnus-summary-make-menu-bar, gnus-summary-buffer-map): Bind it.
+ (gnus-summary-insert-dormant-articles): Fix typo in message.
+
+2006-12-30 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-msg.el (gnus-message-highlight-citation): Ensure default to be
+ nil for XEmacs.
+ (gnus-message-citation-mode): Don't autoload in XEmacs.
+
+ * gnus-cite.el (gnus-message-citation-mode): Don't define in XEmacs.
2006-12-29 Jouni K. Sepp,Ad(Bnen <jks@iki.fi>
@@ -483,16 +1633,51 @@
* spam.el: Revert to make-obsolete-variable because
define-obsolete-variable-alias is not supported in Emacs 21.
+ * spam.el (spam-ifile-path, spam-ifile-database-path)
+ (spam-bogofilter-path): Use define-obsolete-variable-alias instead of
+ make-obsolete-variable.
+ (spam-bsfilter-path, spam-bsfilter-program)
+ (spam-spamassassin-path, spam-spamassassin-program)
+ (spam-sa-learn-path, spam-sa-learn-program): Rename variables. Don't
+ use "path" inappropriately.
+ (spam-check-spamassassin, spam-spamassassin-register-with-sa-learn)
+ (spam-check-bsfilter, spam-bsfilter-register-with-bsfilter): Use new
+ variable names.
+
2006-12-28 Daiki Ueno <ueno@unixuser.org>
* gnus-sum.el (gnus-summary-next-article): Make sure we are in the
summary buffer.
-2006-12-27 Reiner Steib <Reiner.Steib@gmx.de>
+ * password.el (password-cache-remove): Use clear-string to burn
+ password, if available.
- * spam.el (spam-ifile-path, spam-ifile-database-path)
- (spam-bogofilter-path): Use define-obsolete-variable-alias instead of
- make-obsolete-variable.
+2006-12-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-msg.el (gnus-message-citation-mode): Fix autoload.
+
+ * gnus-cite.el (gnus-message-highlight-citation): Move to gnus-msg.el.
+
+ * gnus-msg.el (gnus-setup-message): Add gnus-message-citation-mode.
+ (gnus-message-highlight-citation): Move defcustom here from
+ gnus-cite.el.
+ (gnus-message-citation-mode): Autoload.
+
+ * gnus-cite.el: Adjust Oliver's code to Gnus namespace. Add some
+ checks to make it compile with XEmacs.
+ (gnus-message-citation-mode): New minor mode.
+ (gnus-message-max-citation-depth, gnus-message-citation-keywords)
+ (gnus-message-highlight-citation): New variables.
+ (gnus-message-search-citation-line)
+ (gnus-message-add-citation-keywords)
+ (gnus-message-remove-citation-keywords)
+ (turn-on-gnus-message-citation-mode)
+ (turn-off-gnus-message-citation-mode): New functions.
+
+2006-12-26 Oliver Scholz <epameinondas@gmx.de>
+
+ * gnus-cite.el: Enable highlighting of different citation levels in
+ message-mode.
2006-12-26 Reiner Steib <Reiner.Steib@gmx.de>
@@ -523,11 +1708,42 @@
them directly in the unibyte buffer that causes unexpected conversion
in Emacs 23 (unicode).
+2006-12-21 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * message.el (message-generate-hashcash): Fix custom type.
+
+2006-12-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-recenter): Remove debug messages.
+
2006-12-20 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-group.el (gnus-group-tool-bar-gnome): Exchange connect and
disconnect icons. Add help text.
+2006-12-20 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-extra-header-to-number): CRM114 spam score is
+ negated to be consistent with the others we handle.
+
+2006-12-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-article-setup-buffer): Actually set the local
+ version of gnus-summary-buffer to something, so that we can use two
+ article buffers at the same time.
+
+2006-12-18 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-necessary-extra-headers): Make spam-use-regex-headers
+ trigger all the extra headers.
+ (spam-extra-header-to-number): Don't require spam-use-crm114 for header
+ sorting.
+
+2006-12-14 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * nnweb.el (nnweb-gmane-create-mapping): Keep the mapping stable for
+ solid groups.
+
2006-12-13 Reiner Steib <Reiner.Steib@gmx.de>
* legacy-gnus-agent.el: Add Copyright notice.
@@ -536,6 +1752,15 @@
* gnus-sum.el (gnus-make-thread-indent-array): Fix last change.
+2006-12-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnweb.el (nnweb-gmane-search): Placeholder TOPDOC setting.
+
+ * gnus-sum.el (gnus-summary-recenter): Force setting the window start
+ to make it work reliably in CVS Emacs.
+ (gnus-summary-limit-strange-charsets-predicate)
+ (gnus-summary-limit-to-predicate): New functions.
+
2006-12-08 Chong Yidong <cyd@stupidchicken.com>
* gnus-sum.el (gnus-make-thread-indent-array): New optional arg
@@ -555,16 +1780,35 @@
* mm-url.el (mm-url-predefined-programs): Call curl with correct
options.
+2006-12-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * spam-report.el (spam-report-url-ping-plain): Wait for output to avoid
+ DOS-ing the recipient.
+
+ * nnweb.el (nnweb-gmane-create-mapping): Use the article number from
+ the headers when creating the mapping to avoid mismappings.
+ (nnweb-gmane-create-mapping): Always nix out old mapping.
+
+2006-11-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-signed-or-encrypted-p): Bind mm-decrypt-option
+ and mm-verify-option to never.
+
2006-11-30 Katsumi Yamaoka <yamaoka@jpl.org>
- * mml2015.el (mml2015-pgg-clear-verify): Replace encode-coding-string
- with mm-encode-coding-string.
+ * message.el (message-signed-or-encrypted-p): New function.
+ (message-forward-make-body): Use it.
+
+ * mml2015.el (mml2015-pgg-clear-verify, mml2015-epg-clear-verify):
+ Replace encode-coding-string with mm-encode-coding-string.
2006-11-29 Katsumi Yamaoka <yamaoka@jpl.org>
* nneething.el (nneething-decode-file-name): Replace
decode-coding-string with mm-decode-coding-string.
+ * gnus-int.el (gnus-open-server): Say failed server's name.
+
2006-11-24 Juanma Barranquero <lekktu@gmail.com>
* gnus-agent.el (gnus-agent-expire-unagentized-dirs)
@@ -581,10 +1825,26 @@
(gnus-valid-select-methods, total-expire, gnus-summary-line-format)
(gnus-group-read-only-p): Fix space/tab mixup in docstrings.
+2006-11-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-sum.el (gnus-summary-limit-to-headers): New command and
+ keystroke.
+ (gnus-summary-limit-to-bodies): Implement headersp.
+
+2006-11-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * dns.el (query-dns): Protect against "Process dns deleted" strings.
+
2006-11-21 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-util.el (mm-string-to-multibyte): Alias to identity in XEmacs.
+2006-11-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-generate-hashcash): Expand range of values to
+ include `opportunistic'.
+ (message-send-mail): Use it.
+
2006-11-18 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* mm-uu.el (mm-uu-pgp-signed-extract-1): Make last fix more thorough
@@ -608,6 +1868,15 @@
`customize-variable'.
(gnus-getenv-nntpserver): Don't autoload.
+2006-11-14 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el: Revert to 7.82 (removed changes since 2006-10-16).
+
+2006-11-14 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-sendmail-extra-arguments): New variable.
+ (message-send-mail-with-sendmail): Use it.
+
2006-11-14 Katsumi Yamaoka <yamaoka@jpl.org>
* mml.el (mml-generate-mime-1): Use mm-string-as-unibyte instead of
@@ -616,16 +1885,39 @@
* mm-decode.el (mm-insert-part): Use mm-string-to-multibyte instead of
mm-string-as-multibyte.
+2006-11-14 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-sign): Prefix "pgp-" to a micalg value.
+ Reported by Werner Koch <wk@gnupg.org>.
+
+2006-11-14 Daiki Ueno <ueno@p360>
+
+ * mml2015.el: Autoload epa-select-keys when compiling.
+
+2006-11-13 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-sign): Save the signing keys in
+ message-options.
+ (mml2015-epg-encrypt): Save the recipient keys in message-options.
+
+2006-11-13 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-encrypt): Removed backward compatibility for
+ EasyPG (< 0.0.6).
+ (mml2015-always-trust): New user option.
+ (mml2015-epg-passphrase-callback): Display key ID on the passphrase
+ prompt.
+
+2006-11-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nntp.el (nntp-authinfo-force): New variable.
+ (nntp-send-authinfo): Use it.
+
2006-11-09 Reiner Steib <Reiner.Steib@gmx.de>
- * message.el: Merge from the trunk to fix the bug WRT double encoded
- subjects.
- (message-replacement-char): New variable.
- (message-fix-before-sending): Use it.
- (message-simplify-subject): New function to remove duplicate code.
- (message-reply, message-followup): Use it.
- (message-simplify-subject-functions): New variable.
- (message-strip-subject-encoded-words): New function.
+ * message.el (message-strip-subject-encoded-words): Allow _not_ to
+ decode encoded words. Improve prompt. Add comment about forwarding.
+ (message-replacement-char): Move up.
2006-11-08 Wolfgang Jenkner <wjenkner@inode.at> (tiny change)
@@ -633,6 +1925,19 @@
instead of gnus-intersection because arguments of gnus-sorted-nunion
must be sorted. This avoids corruption of gnus-newsgroup-unreads.
+2006-11-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-strip-subject-encoded-words): Reformat prompt.
+ (message-simplify-subject-functions): Enable
+ message-strip-subject-encoded-words by default.
+
+2006-11-06 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-strip-subject-encoded-words): New function
+ (message-simplify-subject-functions): New variable.
+ (message-simplify-subject): Use it. Fix typo in doc string.
+ Support message-strip-subject-encoded-words.
+
2006-11-03 Juanma Barranquero <lekktu@gmail.com>
* gnus-diary.el (gnus-diary-delay-format-function):
@@ -668,6 +1973,12 @@
* gnus-agent.el (gnus-agent-make-mode-line-string): Make it compatible
with Emacs 21 and XEmacs.
+2006-10-27 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-parse-address): New function for better parsing,
+ catching errors, etc.
+ (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use it.
+
2006-10-26 Reiner Steib <Reiner.Steib@gmx.de>
* mm-view.el: Add interactive arg to html2text autoload.
@@ -676,6 +1987,27 @@
* gnus-sum.el (gnus-summary-move-article): Use no-encode for `B B'.
+2006-10-24 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-util.el (mm-codepage-iso-8859-list, mm-codepage-ibm-list): New
+ variables.
+ (mm-setup-codepage-iso-8859, mm-setup-codepage-ibm): New functions.
+ (mm-charset-synonym-alist): Move some entries to
+ mm-codepage-iso-8859-list.
+
+ * gnus.el (gnus-getenv-nntpserver, gnus-select-method): Autoload.
+
+2006-10-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-citation-line-format)
+ (message-insert-formated-citation-line): Fix implementation of %E, %N
+ and %n according to the doc string.
+
+2006-10-20 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use
+ car-safe to avoid bad parses.
+
2006-10-20 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-group.el (gnus-group-make-doc-group): Work for non-ASCII group
@@ -685,12 +2017,32 @@
2006-10-19 Katsumi Yamaoka <yamaoka@jpl.org>
- * message.el (message-headers-to-generate): Fix typo in docstring.
+ * gnus-draft.el (gnus-draft-edit-message): Make sure to remove Date
+ header.
+
+ * message.el (message-draft-headers): Add Date.
+ (message-headers-to-generate): Fix typo in docstring.
+
+ * nndraft.el (nndraft-required-headers): New variable.
+ (nndraft-generate-headers): Use it.
+
+ * gnus-registry.el (gnus-registry-wash-for-keywords): Bind `word'.
+
+2006-10-16 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-wash-for-keywords)
+ (gnus-registry-find-keywords): New functions to allow easy searching of
+ articles that are in the registry.
+
+2006-10-16 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-check-BBDB, spam-enter-ham-BBDB, spam-parse-list): Use
+ ietf-drums-parse-address instead of gnus-extract-address-components.
+ Reported by Damien Elmes <damien@repose.cx>.
2006-10-19 Reiner Steib <Reiner.Steib@gmx.de>
* gnus.el (gnus-mime): Remove unused custom group.
- (gnus-getenv-nntpserver, gnus-select-method): Autoload.
2006-10-13 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
@@ -714,36 +2066,50 @@
2006-10-04 Reiner Steib <Reiner.Steib@gmx.de>
+ * mm-util.el (mm-charset-synonym-alist, mm-charset-override-alist): Add
+ iso-8859-8/windows-1255 and iso-8859-9/windows-1254.
+
+ * nnheader.el (nnheader-find-file-noselect): Inhibit version-control.
+
+ * message.el (message-replacement-char): New variable.
+ (message-fix-before-sending): Use it.
+ (message-simplify-subject): New function to remove duplicate code.
+ (message-reply, message-followup): Use it.
+
* 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.
+2006-10-03 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-registry.el: Require gnus-util.
- Use `gnus-alist-to-hashtable' and `gnus-hashtable-to-alist'.
+ * gnus-util.el (gnus-with-local-quit): New macro.
-2006-10-04 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-demon.el (gnus-demon): Replace with-local-quit with it.
- * pop3.el (pop3-authentication-scheme): Clarify doc.
- (pop3-movemail): Warn about pop3-leave-mail-on-server.
+2006-10-02 Teodor Zlatanov <tzz@lifelogs.com>
-2006-10-04 Dave Love <fx@gnu.org>
+ * gnus-util.el (gnus-string-remove-all-properties): Another fix to
+ ignore non-string data.
- * pop3.el (pop3-authentication-scheme): Add custom version.
+2006-09-29 Teodor Zlatanov <tzz@lifelogs.com>
-2006-10-04 Jesper Harder <harder@ifa.au.dk>
+ * gnus-util.el (gnus-string-remove-all-properties): Fix to ignore
+ non-string data (needs to be done in the registry too).
- * pop3.el (pop3-leave-mail-on-server): Don't quote nil in
- doc string. Improve doc string.
+2006-09-28 Teodor Zlatanov <tzz@lifelogs.com>
-2006-10-03 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-registry.el (gnus-registry-save, gnus-registry-cache-save)
+ (gnus-registry-remove-alist-text-properties, gnus-registry-action)
+ (gnus-registry-split-fancy-with-parent)
+ (gnus-registry-fetch-simplified-message-subject-fast)
+ (gnus-registry-fetch-sender-fast, gnus-registry-store-extra-entry):
+ Remove text properties on ingress into the registry and when it's saved.
+ (gnus-registry-clean-empty-function): Fix bug with cleaning the
+ registry from entries with no groups.
- * gnus-util.el (gnus-with-local-quit): New macro.
+2006-09-28 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-demon.el (gnus-demon): Replace with-local-quit with it.
+ * gnus-util.el (gnus-string-remove-all-properties): Add utility
+ function to remove string properties.
2006-09-28 Reiner Steib <Reiner.Steib@gmx.de>
@@ -754,10 +2120,35 @@
* gnus-draft.el (gnus-draft-mode): Don't call `mml-mode'.
+2006-09-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-insert-prev-page-button)
+ (gnus-insert-next-page-button): Simplify. Reformat.
+
+2006-09-27 Maxime Edouard Robert Froumentin <max@lapin-bleu.net>
+
+ * gnus-art.el (gnus-insert-prev-page-button)
+ (gnus-insert-next-page-button): Apply gnus-article-button-face.
+
2006-09-25 Chong Yidong <cyd@stupidchicken.com>
* gnus-demon.el (gnus-demon): Use with-local-quit to avoid hangs.
+2006-09-20 Maxime Edouard Robert Froumentin <max@lapin-bleu.net>
+
+ (gnus-insert-mime-button, gnus-insert-mime-security-button): Apply
+ gnus-article-button-face to MIME and security buttons.
+
+2006-09-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-button-url-regexp): Try to make the value more
+ readable.
+
+2006-09-20 Steve Youngs <steve@sxemacs.org>
+
+ * gnus-art.el (gnus-article-browse-html-parts): They're files, so use
+ `browse-url-of-file' instead of `browse-url'.
+
2006-09-19 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* nnslashdot.el (nnslashdot-request-article): Update end-of-article
@@ -765,31 +2156,67 @@
2006-09-16 Katsumi Yamaoka <yamaoka@jpl.org>
- * message.el (message-cite-original-without-signature): Use nobody by
- default for the value of From header.
- (message-cite-original): Ditto.
+ * message.el (message-cite-original-1): Use nobody by default for the
+ value of From header.
(message-reply): Ditto.
+2006-09-11 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-clear-decrypt): Don't append verify results
+ to the gnus-info. This fixes a bug of inline-PGP message verification.
+ Reported by Michael Piotrowski <mxp@dynalabs.de>.
+
2006-09-09 Reiner Steib <Reiner.Steib@gmx.de>
* pop3.el (pop3-leave-mail-on-server): Mention problem of duplicate
mails in the doc string. Add some URLs in comment.
+ (pop3-movemail): Warn about pop3-leave-mail-on-server.
2006-09-07 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2047.el (rfc2047-quote-special-characters-in-quoted-strings): Fix
backslashes handling and the way to find boundaries of quoted strings.
+2006-09-07 Daiki Ueno <ueno@unixuser.org>
+
+ * mml1991.el (mml1991-epg-encrypt): Simply throw an error if
+ mml1991-encrypt-to-self is set and mml1991-signers is not set.
+ * mml2015.el (mml2015-epg-encrypt): Simply throw an error if
+ mml2015-encrypt-to-self is set and mml2015-signers is not set.
+
2006-09-06 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-art.el (gnus-button-regexp, gnus-button-marker-list)
- (gnus-button-last): Move up. Convert comments into doc strings.
+ * gnus-art.el (gnus-button-marker-list): Move up. Convert comment into
+ doc string.
+ (gnus-button-regexp, gnus-button-last): Remove unused variables.
+
+2006-09-06 Simon Josefsson <jas@extundo.com>
+
+ * mml2015.el (mml2015-use): Doc fix, mention epg.
+
+2006-09-06 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-use): Default to epg, if available.
+
+2006-09-06 Daiki Ueno <ueno@unixuser.org>
+
+ * mml1991.el (mml1991-epg-sign): Don't lookup a private key by
+ message-sender.
+ (mml1991-epg-encrypt): Ditto.
+ * mml2015.el (mml2015-epg-sign): Don't lookup a private key by
+ message-sender.
+ (mml2015-epg-encrypt): Ditto.
2006-09-04 Chong Yidong <cyd@stupidchicken.com>
* message.el (message-send-mail-with-sendmail): Look for sendmail in
several common directories.
+2006-09-05 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-encrypt): Expand group configuration.
+ * mml1991.el (mml1991-epg-encrypt): Expand group configuration.
+
2006-09-04 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (article-decode-encoded-words): Make it fast.
@@ -831,16 +2258,36 @@
(rfc2047-decode-address-region): New function.
(rfc2047-decode-address-string): New function.
-2006-08-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- [ Backported bug fix from No Gnus. ]
-
- * gnus.el (gnus-find-method-for-group): On killed/unknown groups, try
- looking up the method using GROUP's prefix before inventing a new one.
- It is used on killed/unknown groups in various places where returning
- an all-new method isn't expected by the caller.
-
- * gnus-util.el (gnus-group-server): Copy required macro from No Gnus.
+2006-08-31 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-caesar-buffer-body): Allow rotating headers.
+
+ * gnus-sum.el (gnus-summary-caesar-message): Allow rotating headers.
+
+ * message.el (message-insert-formated-citation-line): Fix %f.
+ Reported by Torsten Bronger <bronger@physik.rwth-aachen.de> .
+
+2006-08-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-bookmark.el (gnus-bookmark-file-coding-system): New variable.
+ (gnus-bookmark-mouse-available-p): New macro.
+ (gnus-bookmark-bmenu-list): Use it; use gnus-mouse-2.
+ (gnus-bookmark-bmenu-show-infos): Use it.
+ (gnus-bookmark-insert-details): Use it; use gnus-mouse-2.
+ (gnus-bookmark-bmenu-hide-infos): Ditto.
+ (gnus-bookmark-remove-properties): New function.
+ (gnus-bookmark-set, gnus-bookmark-make-cell): Use it.
+ (gnus-bookmark-set-bookmark-name): Don't use 2nd arg of split-string.
+ (gnus-bookmark-write-file): Bind coding-system-for-write.
+ (gnus-bookmark-insert-file-format-version-stamp): Add coding cookie.
+ (gnus-bookmark-jump): Make completing-read work with XEmacs; activate
+ group before selecting it.
+ (gnus-bookmark-get-bookmark): Use assoc instead of assoc-string.
+ (gnus-bookmark-bmenu-mode-map): Bind `q' to bury-buffer instead of
+ quit-window if it is not available; use gnus-mouse-2 and bind it to
+ gnus-bookmark-bmenu-select-by-mouse.
+ (gnus-bookmark-show-details): Remove unused variable `details-list'.
+ (gnus-bookmark-bmenu-select-by-mouse): New function.
2006-08-13 Romain Francoise <romain@orebokech.com>
@@ -870,11 +2317,66 @@
* nnheader.el (nnheader-insert-head): Make it work with Mac as well.
+2006-07-28 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-epg-sign): If mml2015-signers is not set, use the
+ first matching secret key.
+ (mml2015-epg-encrypt): Ditto.
+
+ * mml1991.el (mml1991-epg-sign): If mml1991-signers is not set, use the
+ first matching secret key.
+ (mml1991-epg-encrypt): Ditto.
+
+ * mml2015.el (mml2015-encrypt-to-self): New user option.
+ (mml2015-epg-encrypt): Append mml2015-signers to recipients list if
+ mml2015-epg-encrypt-to-self is set.
+
+ * mml1991.el (mml1991-encrypt-to-self): New variable.
+ (mml1991-epg-encrypt): Append mml1991-signers to recipients list if
+ mml1991-epg-encrypt-to-self is set.
+
+ * mml2015.el (mml2015-signers): New user option.
+ (mml2015-epg-sign): Reflect the value of mml2015-signers.
+ (mml2015-epg-encrypt): Allow to select signing keys.
+
+ * mml1991.el (mml1991-signers): New variable.
+ (mml1991-epg-sign): Reflect the value of mml1991-signers.
+ (mml1991-epg-encrypt): Allow to select signing keys.
+
2006-07-27 Katsumi Yamaoka <yamaoka@jpl.org>
* nnheader.el (nnheader-insert-head): Make it work even if the file
uses CRLF for the line-break code.
+2006-07-25 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el: Require mml-sec instead of password.
+ (mml2015-verbose): Inherit the default value from mml-secure-verbose.
+ (mml2015-cache-passphrase): Inherit the default value from
+ mml-secure-cache-passphrase.
+ (mml2015-passphrase-cache-expiry): Inherit the default value from
+ mml-secure-passphrase-cache-expiry.
+
+ * mml1991.el: Require mml-sec instead of password.
+ (mml1991-verbose): Inherit the default value from mml-secure-verbose.
+ (mml1991-cache-passphrase): Inherit the default value from
+ mml-secure-cache-passphrase.
+ (mml1991-passphrase-cache-expiry): Inherit the default value from
+ mml-secure-passphrase-cache-expiry.
+
+ * mml-sec.el: Require password.
+ (mml-secure-verbose): New user option.
+ (mml-secure-cache-passphrase): New user option.
+ (mml-secure-passphrase-cache-expiry): New user option.
+
+2006-07-24 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-def.el (pgg-truncate-key-identifier): Truncate the key ID to 8
+ letters from the end. Thanks to "David Smith" <davidsmith@acm.org> and
+ andreas@altroot.de (Andreas V,Av(Bgele)
+
+ FIXME: Use `tiny change'?
+
2006-07-19 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* mm-url.el (mm-url-insert-file-contents): Inhibit Connection: close
@@ -882,25 +2384,17 @@
* nnweb.el (nnweb-google-create-mapping): Update regexp.
+2006-07-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-sum.el (gnus-select-newsgroup): Setup the article buffer
+ correctly. This fixes a bug caused by the 2006-05-12 change.
+
2006-07-18 Karl Fogel <kfogel@red-bean.com>
* nnmail.el (nnmail-article-group): If splitting raises an error, give
some information about the error when saying that the `bogus' mail
group will be used.
-2006-07-18 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- [ Backported bug fixes from No Gnus. ]
-
- * nnweb.el (nnweb-google-parse-1): Update regexp for author and date.
- (nnweb-google-search): Respect nnweb-max-hits as upper bound.
- (nnweb-request-article): Do proper xwfu encoding when fetching articles
- by message-id.
-
- * gnus-srvr.el (gnus-browse-unsubscribe-group): Don't subscribe
- unsubscribed groups as if they were killed ones. It causes duplicate
- entries in gnus-newsrc-alist.
-
2006-07-17 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-sum.el (gnus-summary-delete-article): Don't use TAB in doc
@@ -914,24 +2408,133 @@
* gnus-start.el (gnus-subscribe-options-newsgroup-method): Doc fix.
+2006-07-10 Daiki Ueno <ueno@unixuser.org>
+
+ * mml1991.el (mml1991-function-alist): Add epg.
+ (mml1991-epg-passphrase-callback, mml1991-epg-sign)
+ (mml1991-epg-encrypt): New functions.
+
+2006-07-10 Daiki Ueno <ueno@unixuser.org>
+
+ * mml2015.el (mml2015-verbose): New variable.
+ (mml2015-cache-passphrase): Ditto.
+ (mml2015-passphrase-cache-expiry): Ditto.
+ (mml2015-function-alist): Add epg.
+ (mml2015-epg-passphrase-callback, mml2015-epg-decrypt)
+ (mml2015-epg-clear-decrypt, mml2015-epg-verify)
+ (mml2015-epg-clear-verify, mml2015-epg-sign, mml2015-epg-encrypt): New
+ functions.
+
+2006-07-08 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * message.el (message-cite-original-1): Preserve region when removing
+ quoted text due to X-No-Archive in order to avoid bogus attribution
+ when citing multiple messages.
+
+2006-06-27 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus-group.el (gnus-group-sort-by-unread): Fix typo. Reported by
+ Kenneth Jacker <khj@be.cs.appstate.edu>.
+
2006-06-26 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-diary.el (gnus-user-format-function-d)
(gnus-user-format-function-D): Autoload.
-2006-06-26 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * imap.el (Commentary): Fix typo.
- * gnus-group.el (gnus-group-select-group): Doc fix.
- [ See 2004-05-19 change on the trunk. ]
+ * gnus-util.el (kill-empty-logs, gnus-byte-compile): Remove anonymous
+ 2006-04-22 contribution.
+
+2006-06-26 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.el (gnus-valid-select-methods): Revert last change for nnweb.
+ It didn't really fix the bogosity I'm seeing with solid web groups.
+
+2006-06-26 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.el (gnus-valid-select-methods): Declare nnweb with 'address.
+ Since revision 6.95 (2003-01-05) of gnus-group.el, solid web groups are
+ created using server names. If we use the feature without declaring
+ it, Gnus does not properly manage server and group state.
+
+ * nnweb.el (nnweb-google-search): Respect nnweb-max-hits as upper
+ bound.
+
+2006-06-25 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus.el (gnus-find-method-for-group): On killed/unknown groups, try
+ looking up the method using GROUP's prefix before inventing a new one.
+ It is used on killed/unknown groups in various places where returning
+ an all-new method isn't expected by the caller.
+
+ * gnus-util.el (gnus-group-server): Fix for empty virtual server names
+ and match semantics of gnus-group-real-prefix.
+
+2006-06-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * nnmail.el (nnmail-broken-references-mailers): New variable.
+ (nnmail-ignore-broken-references): New function generalizing
+ nnmail-fix-eudora-headers.
+ (nnmail-fix-eudora-headers): Now obsolete.
+
+ * gnus-art.el (gnus-button-handle-custom): Support
+ `customize-apropos*'.
+
+2006-06-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (article-hide-headers): Inhibit read-only stuff.
+
+ * gnus-group.el (gnus-fetch-group): Document ARTICLES and select those
+ articles.
+
+2006-06-21 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-cite-reply-above): New variable.
+ (message-yank-original): Use it.
2006-06-20 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2231.el (rfc2231-parse-string): Allow `*'s in parameter values.
+2006-06-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-bookmark.el (gnus-bookmark-jump): Don't mark unrelated articles
+ as read.
+
+ * gnus-group.el (gnus-group-quick-select-group): Add GROUP argument.
+
+2006-06-19 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-bookmark.el: Fix Copyright, keywords, whitespace, etc.
+ (gnus-bookmark-default-file): Use gnus-directory.
+ (gnus-bookmark-bmenu-file-column, gnus-bookmark-use-annotations):
+ Remove "*" in doc string.
+ (gnus-bookmark-write-file): Simplify.
+ (gnus-bookmark-maybe-sort-alist): Use `when'.
+ (gnus-bookmark-get-bookmark): Fix typo in doc string.
+ (gnus-bookmark-set-bookmark-name, gnus-bookmark-get-bookmark): Add
+ FIXME about Emacs 21 and XEmacs compatibility.
+ (gnus-bookmark-set-bookmark-name): Use `gnus-replace-in-string' for
+ compatibility.
+ (gnus-bookmark-bmenu-mode): Use `gnus-run-mode-hooks' for
+ compatibility.
+ (gnus-bookmark-menu-heading): Fix version.
+
+2006-06-19 Bastien Guerry <bzg@altern.org>
+
+ * gnus-bookmark.el: New file.
+
2006-06-19 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-syntax-checks): Doc fix.
+2006-06-17 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * gnus-srvr.el (gnus-browse-unsubscribe-group): Don't subscribe
+ unsubscribed groups as if they were killed ones. It causes duplicate
+ entries in gnus-newsrc-alist.
+
2006-06-16 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-syntax-checks): Doc fix.
@@ -943,18 +2546,42 @@
* gnus-art.el (gnus-display-mime): Make sure body ends with newline.
+2006-06-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-article-toggle-truncate-lines): Fix code.
+
+2006-06-11 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-truncate-lines): Default to the value of
+ default-truncate-lines.
+
2006-06-06 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-util.el (mm-mime-mule-charset-alist): Use unicode-precedence-list
to fill the utf-8 entry.
-2006-06-05 Dan Christensen <jdc@uwo.ca>
+2006-06-01 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
- * gnus-sum.el (gnus-summary-read-group-1): When summary is unthreaded,
- respect display group parameter and gnus-summary-expunge-below.
- (gnus-articles-to-read): Remove unused reference to display group
- parameter.
- [ Merge 2004-07-06 change from the trunk. ]
+ * nnweb.el (nnweb-google-parse-1): Update regexp for author and date.
+
+2006-05-30 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-agent.el (directory-files-and-attributes): Move all the way
+ forward (the third and final move).
+ (gnus-agent-read-agentview): Trap reconstruction errors due to
+ nonexistant directory. Handle by returning nil.
+
+2006-05-30 Didier Verna <didier@xemacs.org>
+
+ * message.el (message-dont-reply-to-names): Update the custom type.
+ * message.el (message-dont-reply-to-names): New defsubst: potentially
+ convert a list of regexps into a single one.
+ * message.el (message-get-reply-headers): Use it.
+ * nnmail.el (nnmail-fancy-expiry-target): Ditto.
+
+2006-05-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (directory-files-and-attributes): Move forward.
2006-05-29 Reiner Steib <Reiner.Steib@gmx.de>
@@ -967,64 +2594,162 @@
* gnus-ml.el (gnus-mailing-list-message): Use gnus-url-mailto instead
of doing it manually.
+2006-05-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-article-toggle-truncate-lines): Fix typo in
+ comment.
+
2006-05-29 Kevin Greiner <kevin.greiner@compsol.cc>
- * gnus-agent.el (gnus-agent-possibly-synchronize-flags): A server
- must be explicitly online rather than "not explicitly offline" for
- its flags to be synchronized.
+ * gnus-agent.el (Added gnus-agent-flush*) to purge agent info.
+ (gnus-agent-read-agentview): Fixed handling of end-of-file error.
(gnus-agent-read-local): All symbols allocated in my-obarray
(gnus-agent-set-local): Skip invalid entries (min and/or max is nil).
(gnus-agent-regenerate-group): Check numeric names to see if they are
messages or groups.
+ (gnus-agent-total-fetched-for): Ignore 'dummy.group' (there should be a
+ better way of do this...)
+
+ * gnus-cache.el (gnus-agent-total-fetched-for): Ignore
+ 'dummy.group' (there should be a better way of do this...)
2006-05-29 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-save-all-headers): Mention it might be overridden.
(gnus-saved-headers): Ditto.
- (gnus-default-article-saver): Doc fix; add
- gnus-summary-write-body-to-file; mention functions may have properties.
- (gnus-article-save-coding-system): New variable.
+ (gnus-default-article-saver): Mention functions may have properties.
(gnus-article-save): Override gnus-save-all-headers and
gnus-saved-headers by :headers property which saver function may have.
+ (gnus-summary-save-in-file): Add :headers property.
+ (gnus-summary-write-to-file): Ditto.
+
+ * gnus-sum.el (gnus-summary-save-article): Bind
+ gnus-prompt-before-saving to t when saving many articles in a file;
+ always show all headers.
+
+2006-05-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * deuglify.el (gnus-outlook-rearrange-article): Add missing citation
+ marks.
+
+ * message.el (message-indent-citation): Add optional arguments to allow
+ using it outside of message buffers.
+
+ * gnus-art.el (gnus-article-unfold-long-headers): New variable.
+ (gnus-article-treat-unfold-headers): Use it.
+ (gnus-article-truncate-lines): New variable.
+ (gnus-article-mode): Use it.
+ (gnus-article-toggle-truncate-lines): New function.
+
+ * gnus-sum.el (gnus-summary-wash-map, gnus-summary-make-menu-bar): Add
+ gnus-article-toggle-truncate-lines.
+
+ * uudecode.el (uudecode-decode-region-external): nil isn't a valid
+ coding system in XEmacs, use binary.
+
+2006-05-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Don't edit
+ after-load-alist.
+
+ * gnus-art.el (gnus-summary-save-in-file): Use property to specify
+ this function should save decoded articles.
+ (gnus-summary-write-to-file): Use property to specify this function
+ should save decoded articles and specify gnus-summary-save-in-file
+ should be used to save articles other than the first one when saving
+ many articles.
+ (gnus-summary-save-body-in-file): Use property to specify this
+ function should save decoded articles.
+ (gnus-summary-write-body-to-file): Use property to specify this
+ function should save decoded articles and specify
+ gnus-summary-save-body-in-file should be used to save articles other
+ than the first one when saving many articles.
+
+ * gnus-sum.el (gnus-summary-save-article): Simplify.
+
+2006-05-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-default-article-saver): Add
+ gnus-summary-write-body-to-file.
+ (gnus-article-save-coding-system): Don't use coding system object
+ in XEmacs.
(gnus-read-save-file-name): Add optional `dir-var' argument which
specifies directory in which files are saved; work even if optional
`variable' argument is not specified.
- (gnus-summary-save-in-file): Add properties :decode and :headers.
- (gnus-summary-write-to-file): Add properties :decode, :function, and
- :headers; read file name.
- (gnus-summary-save-body-in-file): Add :decode property; add optional
- `overwrite' argument.
- (gnus-summary-write-body-to-file): New function; add properties
- :decode and :function.
- (gnus-output-to-file): Add coding cookie and encode text according
- to gnus-article-save-coding-system; don't use mm-append-to-file.
+ (gnus-summary-write-to-file): Read file name.
+ (gnus-summary-save-body-in-file): Add optional `overwrite' argument.
+ (gnus-summary-write-body-to-file): New function.
* gnus-sum.el (gnus-newsgroup-last-directory): New variable.
(gnus-summary-local-variables): Add it.
(gnus-summary-save-map): Add gnus-summary-write-article-body-file.
- (gnus-summary-save-article): Require gnus-art; save decoded articles
- if function that gnus-default-article-saver specifies has `:decode'
- property; bind gnus-prompt-before-saving to t when saving many
- articles in a file; move point to article which will be saved.
+ (gnus-summary-save-article): Remove optional `decode' argument;
+ determine whether to decode articles by the value of
+ gnus-default-article-saver; when saving many files using
+ gnus-summary-write-to-file or gnus-summary-write-body-to-file, use
+ it first and use gnus-summary-save-in-file or
+ gnus-summary-save-body-in-file thereafter unless
+ gnus-prompt-before-saving is always; move point to article which
+ will be saved.
+ (gnus-summary-save-article-file): Revert.
+ (gnus-summary-write-article-file): Revert.
+ (gnus-summary-save-article-body-file): Revert.
(gnus-summary-write-article-body-file): New function.
2006-05-26 Reiner Steib <Reiner.Steib@gmx.de>
- * uudecode.el (uudecode-decode-region-external): Fix previous commit.
+ * gnus-art.el (gnus-article-browse-html-article): Remove comment.
-2006-05-26 Katsumi Yamaoka <yamaoka@jpl.org>
+2006-05-24 Katsumi Yamaoka <yamaoka@jpl.org>
- * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Don't edit
- after-load-alist.
+ * gnus-art.el (gnus-default-article-saver): Doc fix.
+ (gnus-article-save-coding-system): Move from gnus-sum.el, rename
+ from gnus-summary-save-article-coding-system, and default to a
+ certain coding system.
+ (gnus-output-to-file): Add coding cookie and encode text according
+ to gnus-article-save-coding-system; don't use mm-append-to-file.
-2006-05-22 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-sum.el (gnus-summary-save-article-coding-system): Move to
+ gnus-art.el and rename to gnus-article-save-coding-system.
+ (gnus-summary-save-article): Require gnus-art; don't show all
+ headers if it decodes articles; don't add coding cookie here;
+ don't bind mm-text-coding-system-for-write.
+ (gnus-summary-save-article-file): Save decoded articles.
+ (gnus-summary-write-article-file): When saving many files, use
+ gnus-summary-write-to-file first and gnus-summary-save-in-file
+ thereafter unless gnus-prompt-before-saving is always.
+ (gnus-summary-save-article-body-file): Save decoded articles.
- * uudecode.el (uudecode-decode-region-external): nil isn't a valid
- coding system in XEmacs, use binary.
+2006-05-23 Reiner Steib <Reiner.Steib@gmx.de>
- * mail-source.el (mail-sources): Fix custom type.
+ * nnrss.el (nnrss-check-group): Bind hash-index.
- * imap.el (Commentary): Fix typo.
+2006-05-23 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * nnrss.el (nnrss-check-group): Use the md5sum of the whole RSS item as
+ its hash index. Store this hash in `nnrss-group-data'.
+ (nnrss-read-group-data): Update accordingly.
+
+2006-05-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-button-alist): Improve gnus-button-handle-symbol
+ entry.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Add
+ gnus-article-browse-html-article.
+
+2006-05-23 Hynek Schlawack <hynek@ularx.de>
+
+ * gnus-sum.el (gnus-summary-mime-map): Add
+ gnus-article-browse-html-article.
+2006-05-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-save-article-coding-system): Offer some
+ suitable coding systems in customize.
+
+2006-05-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mail-source.el (mail-sources): Fix custom type.
2006-05-18 Reiner Steib <Reiner.Steib@gmx.de>
@@ -1036,6 +2761,41 @@
(gmm-image-search-load-path): Use it.
(gmm-image-load-path-for-library): Use it. Sync with `mh-compat.el'.
+2006-05-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-sum.el (gnus-summary-save-article-coding-system): New
+ variable.
+ (gnus-summary-save-article): Add optional `decode' argument. If
+ it is set and gnus-summary-save-article-coding-system is non-nil,
+ save decoded article.
+ (gnus-summary-write-article-file): Save decoded article if
+ gnus-summary-save-article-coding-system is non-nil.
+
+ * ecomplete.el (ecomplete-database-file-coding-system): Fix custom
+ type.
+
+2006-05-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (easy-menu-define): Use :active instead of :enable.
+
+2006-05-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-setup-buffer): Go to summary buffer
+ first to test gnus-single-article-buffer which may be buffer-local.
+
+ * gnus-sum.el (gnus-summary-setup-buffer): Make
+ gnus-single-article-buffer buffer-local and nil in ephemeral
+ group; make gnus-article-buffer, gnus-article-current, and
+ gnus-original-article-buffer always buffer-local.
+ (gnus-summary-exit): Kill article buffer belonging to ephemeral
+ group.
+ (gnus-handle-ephemeral-exit): Don't move to next summary line.
+
+2006-05-08 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * nnml.el (nnml-request-compact-group): Compressed files might not
+ have .gz extension.
+
2006-05-04 Stefan Monnier <monnier@iro.umontreal.ca>
* mm-decode.el (mm-dissect-buffer): Remove spurious double assignment.
@@ -1043,17 +2803,63 @@
(mm-display-part): Simplify.
(mm-inlinable-p): Add optional arg `type'.
+2006-05-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
* gnus-art.el (gnus-mime-view-part-as-type): Add optional PRED arg.
(gnus-mime-view-part-externally, gnus-mime-view-part-internally):
Try harder to show the attachment internally or externally using
gnus-mime-view-part-as-type.
-2006-05-04 Reiner Steib <Reiner.Steib@gmx.de>
+2006-05-02 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-art.el (gnus-mime-view-part-as-type-internal): Try to fetch
- `filename' from Content-Disposition if Content-Type doesn't
- provide `name'.
- (gnus-mime-view-part-as-type): Set default instead of initial-input.
+ * message.el (message-from-style, message-signature-separator)
+ (message-user-organization-file, message-send-mail-function)
+ (message-citation-line-function, message-yank-prefix)
+ (message-indent-citation-function, message-signature)
+ (message-signature-file, message-signature-insert-empty-line):
+ Remove autoloads.
+
+ * gnus-art.el (gnus-buttonized-mime-types): Remove
+ "multipart/signed". Revert 2006-04-26 change.
+
+2006-05-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump version.
+
+2006-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+ * gnus.el: No Gnus v0.5 is released.
+
+2006-04-30 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * nnweb.el (nnweb-request-article): Do proper xwfu encoding when
+ fetching articles by message-id.
+
+2006-04-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (hashcash): Require hashcash as normal.
+
+ * ecomplete.el (ecomplete-highlight-match-line): Use
+ point-at-eol.
+ (ecomplete-highlight-match-line): Use `highlight', because that
+ face exists in both Emacs and XEmacs.
+
+ * message.el (message-display-abbrev): Use point-at-bol.
+
+ * mail-source.el: Don't require timer/timer-funcs.
+
+ * gnus-async.el: Ditto.
+
+ * password.el: Ditto.
+
+ * mm-url.el: Ditto.
+
+ * mm-util.el: Require timer/timer-funcs.
+
+2006-04-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * mm-url.el (mm-url-insert-file-contents): Don't set Connection:
+ Close.
2006-04-28 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -1071,26 +2877,34 @@
2006-04-26 Reiner Steib <Reiner.Steib@gmx.de>
- * deuglify.el (gnus-outlook-deuglify-unwrap-min)
- (gnus-outlook-deuglify-unwrap-max): Remove autoload.
+ * message.el (message-user-organization-file): Check several
+ locations of the organization file.
- * mml-sec.el (mml-secure-method): New internal variable.
- (mml-secure-sign, mml-secure-encrypt, mml-secure-message-sign)
- (mml-secure-message-sign-encrypt, mml-secure-message-encrypt):
- New functions using mml-secure-method. Sync from the trunk.
+ * gnus-sum.el (gnus-summary-mime-map, gnus-summary-make-menu-bar):
+ Add gnus-article-view-part-as-type.
- * mml.el (mml-mode-map): Add key bindings for those functions.
- (mml-menu): Simplify security menu entries. Suggested by Jesper
- Harder <harder@myrealbox.com>. Sync from the trunk.
+ * gnus-art.el (gnus-article-view-part-as-type): New function.
* message.el (message-valid-fqdn-regexp): Add TLDs .cat, jobs,
.mobi and .travel. Remove .nato, .bitnet and .uucp.
- (message-in-body-p): New function. Sync from the trunk.
- * mml.el (mml-mode, mml-dnd-protocol-alist)
- (mml-dnd-attach-options, mml-dnd-attach-file)
- (mml-attach-file, mml-attach-buffer, mml-attach-external):
- Sync DND support and use of message-in-body-p from the trunk.
+ * mml.el: Simplify autoload.
+ (mml-mode): defvar dnd-protocol-alist instead of using
+ symbol-value.
+ (mml-default-directory): New variable.
+ (mml-minibuffer-read-file): Use it.
+ (mml-dnd-protocol-alist, mml-dnd-attach-options): Adjust :version.
+
+ * message.el (message-citation-line-format): New variable.
+ (message-insert-formated-citation-line): New function.
+ (message-citation-line-function): Add
+ `message-insert-formated-citation-line' to custom type.
+
+ * mm-decode.el (mm-verify-option): Add gnus-buttonized-mime-types
+ to doc string.
+
+ * gnus-art.el (gnus-buttonized-mime-types): Add "multipart/signed"
+ depending on mm-verify-option.
2006-04-26 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -1104,12 +2918,10 @@
lines at the top of body; use gnus-newsgroup-charset if there's no
Charset header.
-2006-04-25 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
-
- * nnweb.el (nnweb-google-wash-article): Sync up to new Google HTML.
-
2006-04-25 Katsumi Yamaoka <yamaoka@jpl.org>
+ * message.el (message-self-insert-commands): Doc fix.
+
* mm-uu.el (mm-uu-pgp-signed-test): Erase prompt.
(mm-uu-pgp-encrypted-test): Ditto.
(mm-uu-pgp-encrypted-extract-1): Make sure there's a blank line
@@ -1119,6 +2931,47 @@
* mm-decode.el (mm-automatic-display): Don't make application/pgp
element match to application/pgp-*.
+2006-04-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * nnweb.el (nnweb-google-wash-article): Sync up to new Google
+ HTML.
+
+2006-04-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mail-source.el (mail-source-call-script): Message the error
+ string.
+
+2006-04-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-util.el (gnus-byte-compile): Use it.
+
+2006-04-22 xyblor <fake@invalid.email> (Tiny change.)
+
+ * gnus-util.el (kill-empty-logs): New function.
+
+2006-04-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-mail-alias-type): Doc fix.
+ (message-mail-alias-type-p): New function.
+ (message-send): Use it.
+ (message-mode): Ditto.
+ (message-strip-forbidden-properties): Ditto.
+
+ * ecomplete.el (ecomplete-database-file-coding-system): New
+ variable.
+ (ecomplete-save): Use it.
+ (ecomplete-setup): Use it.
+
+2006-04-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-self-insert-commands): New variable.
+ (message-strip-forbidden-properties): Use it.
+
+2006-04-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-put-addresses-in-ecomplete): Use a regexp
+ that doesn't make XEmacs choke.
+
2006-04-20 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-util.el (gnus-replace-in-string):
@@ -1126,67 +2979,299 @@
2006-04-20 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-group.el: Bind tool-bar-mode instead of tool-bar-map.
-
- * gnus-sum.el: Ditto.
-
* gnus-util.el (gnus-select-frame-set-input-focus):
Use select-frame-set-input-focus if it is available in XEmacs; use
definition defined in Emacs 22 for old Emacsen.
+2006-04-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-view.el (mm-inline-text): Use equal instead of equalp.
+
+2006-04-18 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-cache-save): Remove text
+ properties when saving via the temp buffer.
+
+2006-04-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-generate-hashcash): Honor custom type.
+
+2006-04-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-generate-hashcash): Default to non-nil when
+ hashcash is found.
+
+ * gnus-sum.el (gnus-summary-expire-articles-now): Clarify prompt.
+ (gnus-refer-thread-limit): Increase default to 500.
+
+ * mm-view.el (mm-inline-text): Supply delsp to flow-fill.
+
+ * flow-fill.el (fill-flowed): Allow delete-space.
+
+2006-04-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * deuglify.el (gnus-outlook-deuglify-unwrap-min)
+ (gnus-outlook-deuglify-unwrap-max, gnus-outlook-display-hook):
+ Remove autoloads.
+
+2006-04-18 Simon Josefsson <jas@extundo.com>
+
+ * message.el (message-generate-hashcash): Default to.
+
+2006-04-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2231.el (rfc2231-parse-string): Decode encoded value after
+ concatenating segments rather than before concatenating them.
+
2006-04-17 Reiner Steib <Reiner.Steib@gmx.de>
- [ Merge from Gnus trunk. ]
+ * gnus-group.el: Move comment to gnus-group-update-tool-bar.
- * mm-util.el (mm-charset-synonym-alist): Improve doc string.
- (mm-charset-override-alist): New variable.
- (mm-charset-to-coding-system): Use it.
- (mm-codepage-setup): New helper function.
- (mm-charset-eval-alist): New variable.
- (mm-charset-to-coding-system): Use mm-charset-eval-alist.
- Warn about unknown charsets. Add allow-override.
- Use `mm-charset-override-alist' only when decoding.
- (mm-detect-mime-charset-region): Use :mime-charset.
+ * imap.el (imap-quote-specials): New function.
+ (imap-login-auth): Quote specials.
- * mm-bodies.el (mm-decode-body, mm-decode-string):
- Call `mm-charset-to-coding-system' with allow-override argument.
+2006-04-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * message.el (message-tool-bar-zap-list, message-tool-bar)
- (message-tool-bar-gnome, message-tool-bar-retro): New variables.
- (message-tool-bar-local-item-from-menu): Remove.
- (message-tool-bar-map): Replace by `message-make-tool-bar'.
- (message-make-tool-bar): New function.
- (message-mode): Use `message-make-tool-bar'.
+ * rfc2231.el (rfc2231-parse-string): Sort the parameters first.
- * gnus-sum.el (gnus-summary-tool-bar)
- (gnus-summary-tool-bar-gnome, gnus-summary-tool-bar-retro)
- (gnus-summary-tool-bar-zap-list): New variables.
- (gnus-summary-make-tool-bar): Complete rewrite using
- `gmm-tool-bar-from-list'.
+ * message.el (message-forward-make-body-plain): Allow
+ message-forward-ignored-headers to be a list.
+ (message-remove-ignored-headers): Factor out into function.
+ (message-forward-make-body-mml): Use it.
+ * rfc2231.el (rfc2231-parse-string): Remove dead code.
+ (rfc2231-parse-string): Allow concatanation of parameters that
+ aren't contiguous. The test case is
+ (mail-header-parse-content-type "message/external-body;
+ name*0*=us-ascii''~%2ffoo%2fbar%2fbaz%2fxyzzy%2f;
+ access-type=LOCAL-FILE;
+ name*1*=plugh%2fhello-sailor%2fbing.pdf")
- * gnus-group.el (gnus-group-tool-bar, gnus-group-tool-bar-gnome)
- (gnus-group-tool-bar-retro, gnus-group-tool-bar-zap-list):
- New variables.
- (gnus-group-make-tool-bar): Complete rewrite using
- `gmm-tool-bar-from-list'.
- (gnus-group-tool-bar-update): New function.
+2006-04-17 Stefan Monnier <monnier@iro.umontreal.ca>
- * gmm-utils.el: New file.
+ * nntp.el (nntp-accept-process-output): Return the value of
+ `nnheader-accept-process-output'.
+
+2006-04-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-article-treat-types): Add text/x-patch.
+ (gnus-button-alist): Recognize more diff formats.
+ (gnus-button-patch): Strip directory.
+
+2006-04-17 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-util.el (gnus-select-frame-set-input-focus): Check for
+ Emacs 22 when setting focus.
+
+2006-04-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-article-treat-types): Do treatment of
+ text/x-verbatim parts.
+ (gnus-button-patch): New command.
+
+ * ietf-drums.el (ietf-drums-parse-address): Attempt parsing
+ addresses that contain invalid characters.
+
+2006-04-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-put-addresses-in-ecomplete): Use
+ gnus-replace-in-string.
+ (message-is-yours-p): Use the more correct
+ mail-header-parse-address instead of
+ mail-extract-address-components.
+ (message-put-addresses-in-ecomplete): Fix typo.
+
+ * gnus-sum.el (gnus-summary-limit-to-bodies): New command and
+ keystroke.
+
+ * gnus-art.el (gnus-treatment-function-alist): Change order of
+ newsgroups/generic header folding to avoid double-folding.
+
+ * message.el (message-hidden-headers): Add X-Draft-From.
+
+ * gnus-sum.el (gnus-summary-repeat-search-article-forward): New
+ command.
+ (gnus-summary-repeat-search-article-backward): New command.
+
+ * gnus-topic.el (gnus-topic-display-missing-topic): Skip past
+ groups in the parent topic.
+
+2006-04-16 Jo,Ac(Bo Cachopo <joao.cachopo@inesc-id.pt> (tiny change)
+
+ * spam.el (spam-necessary-extra-headers): Add X-CRM114-Status.
+ (spam-extra-header-to-number): Return the CRM114 number as a
+ number instead of a string.
+
+2006-04-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-face-properties-alist): Moved here from
+ gnus-fun.
+
+ * gnus-fun.el (gnus-face-properties-alist): Move to gnus-art.
+
+2006-04-15 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-strip-forbidden-properties): Only display on
+ self-insert-command.
+
+ * hashcash.el (hashcash-insert-payment-async): Remove dead code;
+ reindent.
+ (hashcash-insert-payment-async-2): Make sure the buffer is alive.
+
+2006-04-15 NAKAJI Hiroyuki <nakaji@takamatsu-nct.ac.jp> (tiny change)
+
+ * smiley.el (smiley-style): Fix typo.
+
+2006-03-23 Kenichi Handa <handa@m17n.org>
+
+ * rfc2231.el (rfc2231-encode-string): Use mm-disable-multibyte
+ instead of set-buffer-multibyte.
+
+2006-03-23 Kenichi Handa <handa@m17n.org>
+
+ * rfc2231.el (rfc2231-decode-encoded-string): Work on unibyte
+ buffer and then decode the buffer text if necessary.
+ (rfc2231-encode-string): Be sure to work on multibyte buffer at
+ first, and after mm-encode-body, change the buffer to unibyte.
+
+2006-04-15 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * hashcash.el (hashcash-insert-payment-async-2): Use
+ message-goto-eoh instead of doing it manually.
+ (mail-add-payment): Use message-narrow-to-header instead of trying
+ to do the same itself.
+
+ * message.el (message-hidden-headers): Add Face.
+
+ * gnus-sum.el (gnus-summary-reparent-thread): Factor out
+ reparenting code.
+ (gnus-summary-reparent-children): Refactored out code.
+ (gnus-summary-thread-map): New keystroke.
+ (gnus-summary-reparent-children): Make into command.
+
+ * smiley.el (smiley-style): Default to `medium' if using a large
+ font.
+
+ * gnus-sum.el (unmorse-region): Remove autoload, because morse.el
+ does it itself.
+
+ * message.el (message-point-in-header-p): Simplify definition.
+
+2006-04-14 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnagent.el (nnagent-request-set-mark): Silence log file
+ writing.
+ (nnagent-request-set-mark): Use write-region instead of
+ append-to-file.
+
+ * gnus-sum.el (gnus-read-header): Fudge article number if using a
+ strange select method.
+
+ * ecomplete.el (ecomplete-display-matches): Get highlightling
+ right.
+ (ecomplete-display-matches): Use literals.
+ (ecomplete-display-matches): Disable message logging.
+
+ * message.el (message-display-abbrev): Small optimization.
+
+ * ecomplete.el (ecomplete-display-matches): Allow automatic
+ display.
+
+ * message.el (message-strip-forbidden-properties): Display
+ abbrevs.
+ (message-display-abbrev): Get automatic display right.
+
+ * ecomplete.el (ecomplete-display-matches): Use M-n/M-p
+ keystrokes.
+
+2006-04-13 Romain Francoise <romain@orebokech.com>
+
+ TODO: Backport to v5-10!
+
+ * 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-04-13 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-catchup-current): Change
+ if-then-else-if-then-else into cond.
+ (gnus-group-catchup): Indent.
+ (group-name-at-point): New function.
+ (gnus-fetch-group): Provide default from thing at point.
+
+2006-04-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-display-abbrev): Fix regexp.
+
+ * ecomplete.el (ecomplete-highlight-match-line): Reimplement
+ choosing.
+ (ecomplete-highlight-match-line): Fix up code rewrite, remove
+ dead variables.
+
+ * message.el (message-newline-and-indent): Remove debugging.
+ (message-display-abbrev): Use new implementation.
+
+2006-04-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-article-mode): Set
+ cursor-in-non-selected-windows to nil.
+
+ * smiley.el: Revert previous change.
+ (smiley-data-directory): defvar it before using it in the
+ defcustom of `smiley-style'.
+
+2006-04-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-newline-and-indent): New function.
+
+ * ecomplete.el: Implement more bits.
+
+ * message.el (message-put-addresses-in-ecomplete): Clean up the
+ string.
+
+ * ecomplete.el (ecomplete-add-item): Chop off decimals.
+
+ * gnus-sum.el (gnus-summary-save-parts): Bind
+ gnus-summary-save-parts-counter and use it to make unique file
+ names.
+
+ * gnus-art.el (gnus-ignored-headers): Add some more headers.
+
+ * ietf-drums.el (ietf-drums-parse-addresses): Take a RAWP
+ parameter to say whether to actually parse the individual
+ addresses.
+
+ * message.el (message-put-addresses-in-ecomplete): New function.
+ (ecomplete): Require.
+ (message-mail-alias-type): Add ecomplete as an option.
2006-04-12 Ralf Angeli <angeli@iwi.uni-sb.de>
* flow-fill.el (fill-flowed): Remove trailing space from blank
quoted lines.
-2006-04-12 Reiner Steib <Reiner.Steib@gmx.de>
+2006-04-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * gnus-art.el (gnus-article-mode):
- Set cursor-in-non-selected-windows to nil.
+ * smiley.el (smiley-style): Move definition later to avoid a
+ compilation warning.
+
+2006-04-12 Kenichi Handa <handa@m17n.org>
+
+ * rfc2231.el (rfc2231-decode-encoded-string): Work on unibyte
+ buffer and then decode the buffer text if necessary.
+ (rfc2231-encode-string): Be sure to work on multibyte buffer at
+ first, and after mm-encode-body, change the buffer to unibyte.
+ Use mm-disable-multibyte instead of set-buffer-multibyte.
2006-04-12 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-art.el (gnus-mime-view-part-as-charset): Ignore charset
- that the part specifies.
+ * gnus-art.el (gnus-mime-copy-part): Find name parameter in
+ Content-Type header instead of Content-Disposition header.
+ (gnus-mime-inline-part): Ditto.
+ (gnus-mime-view-part-as-charset): Ignore charset that the part
+ specifies.
* mm-decode.el (mm-display-part): Work with external parts and
usual parts similarly.
@@ -1194,48 +3279,149 @@
* mm-extern.el (mm-inline-external-body): Use mm-display-part
instead of gnus-display-mime.
+ * mm-util.el (mm-decompress-buffer): Use mm-with-unibyte-buffer
+ instead of with-temp-buffer.
+
* gnus-uu.el (gnus-uu-save-article): Put mml tags instead of part
tag to summarized topics part in order to encode non-ASCII text.
2006-04-11 Reiner Steib <Reiner.Steib@gmx.de>
+ * smiley.el (smiley-style): New variable.
+ (smiley-directory): New function.
+ (smiley-data-directory): Derive from `smiley-style' using
+ `smiley-directory'.
+ (smiley-regexp-alist): Add new entries.
+
* gnus-art.el (gnus-button-valid-localpart-regexp): Exclude `@'.
+ (gnus-article-browse-delete-temp): Add :version.
2006-04-11 Arne J,Ax(Brgensen <arne@arnested.dk>
* gnus-sieve.el (gnus-sieve-generate): Delete from the start of
the sieve region.
+2006-04-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump version.
+
2006-04-11 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus.el: Gnus v5.10.8 is released.
+ * gnus.el: No Gnus v0.4 is released.
2006-04-11 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * nnslashdot.el (nnslashdot-retrieve-headers-1): Fix up to new layout.
+ * nnslashdot.el (nnslashdot-retrieve-headers-1): Fix up to new
+ layout.
* rfc2047.el (rfc2047-decode-encoded-words): Don't message about
unknown charset.
- * message.el (message-header-synonyms): Add Original-To to the default.
+ * message.el (message-header-synonyms): Add Original-To to the
+ default.
- * gnus-sum.el (gnus-get-newsgroup-headers-xover): Group is an
+ * gnus-sum.el (gnus-get-newsgroup-headers-xover): group is an
optional parameter.
2006-04-06 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-fun.el (gnus): Require it for gnus-directory.
+2006-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-fun.el (gnus-face-properties-alist): Add :version.
+
+2006-04-05 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-process-filter): Fix.
+
+2006-04-05 Simon Josefsson <jas@extundo.com>
+
+ * password.el (password-reset): New function.
+
+2006-04-05 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-encrypt-region, pgg-gpg-sign-region): Wait
+ for BEGIN_SIGNING too, new in GnuPG 1.4.3.
+
2006-04-04 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* nnweb.el (nnweb-google-create-mapping): Update regexp.
Some whitespace was matched into the url, which broke browsing hits
> 100 when mm-url-use-external was nil.
+2006-04-04 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Check
+ gnus-extra-headers for 'Newsgroups.
+
+ * message.el (message-tool-bar-gnome): Check if `flyspell-mode' is
+ bound.
+
+2006-04-04 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el: Clean up process buffers every time gpg processes
+ complete.
+
+2006-04-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-fun.el (gnus-convert-image-to-face-command): Fix typo in
+ doc string.
+
+2006-04-03 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-process-filter)
+ (pgg-gpg-wait-for-completion): Check if buffer is alive.
+
+ * pgg-gpg.el (pgg-gpg-process-sentinel): Don't remove GNUPG:
+ lines, temporary fix.
+
2006-03-31 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-group.el (gnus-group-update-tool-bar): Add :initialize and :set.
+2006-03-29 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el (pgg-gpg-start-process): Don't bind
+ default-enable-multibyte-characters. This reverts the change from
+ revision 6.17 which is no longer necessary because the passphrase
+ is sent separately now. GnuPG messages are unreadable under
+ multibyte locales with default-enable-multibyte-characters set to
+ nil.
+
+2006-03-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-tool-bar-gnome): Move "spell".
+
+2006-03-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Don't use
+ XEmacs-only `replace-in-string'. Use `gnus-group-real-name'
+ instead.
+
+2006-03-27 Karl Kleinpaste <karl@charcoal.com>
+
+ * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Improve
+ newsgroups handling for NNTP overviews which don't include
+ Newsgroups.
+
+2006-03-26 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * message.el (message-resend): Bind message-generate-hashcash to nil.
+
+2006-03-26 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * hashcash.el (hashcash-already-paid-p): Bind case-fold-search
+ when searching for already-paid recipients.
+
+2006-03-27 Daiki Ueno <ueno@unixuser.org>
+
+ * pgg-gpg.el: Invoke gpg asynchronous, to avoid querying for
+ passphrases when it is not needed.
+ (pgg-gpg-use-agent): Add, to hard code that pgg shouldn't wait for
+ passphrase stuff from gpg, should only be necessary when you use
+ gpg with a smartcard.
+
2006-03-23 Katsumi Yamaoka <yamaoka@jpl.org>
* mml.el (mml-insert-mime): Ignore cached contents of
@@ -1244,44 +3430,55 @@
* mm-decode.el (mm-get-part): Add optional 'no-cache' argument.
(mm-insert-part): Ditto.
-2006-03-22 Katsumi Yamaoka <yamaoka@jpl.org>
+2006-03-23 Simon Josefsson <jas@extundo.com>
- * gnus-sum.el (gnus-map-articles): Don't funcall symbol macro.
- Reported by Ralf Wachinger <rwachinger@gmx.de>.
+ * pgg-gpg.el (pgg-gpg-update-agent): Add again, with fixes from
+ Reiner.
+ (pgg-gpg-use-agent-p): Use it again.
-2006-03-23 Kenichi Handa <handa@m17n.org>
+2006-03-23 Simon Josefsson <jas@extundo.com>
- * rfc2231.el (rfc2231-encode-string): Use mm-disable-multibyte
- instead of set-buffer-multibyte.
+ * pgg-gpg.el (pgg-gpg-update-agent): Remove, doesn't work with
+ older emacsen.
+ (pgg-gpg-use-agent-p): Don't use it.
-2006-03-23 Kenichi Handa <handa@m17n.org>
+2006-03-23 Reiner Steib <Reiner.Steib@gmx.de>
- * rfc2231.el (rfc2231-decode-encoded-string): Work on unibyte
- buffer and then decode the buffer text if necessary.
- (rfc2231-encode-string): Be sure to work on multibyte buffer at
- first, and after mm-encode-body, change the buffer to unibyte.
+ * pgg-gpg.el (pgg-gpg-update-agent): Only use make-network-process
+ if we can.
-2006-03-21 Daniel Pittman <daniel@rimspace.net>
+2006-03-22 Sascha Wilde <wilde@sha-bang.de>
- * nnimap.el (nnimap-request-update-info-internal): Optimize.
- Don't `gnus-uncompress-range' to avoid excessive memory usage.
+ * pgg-gpg.el (pgg-gpg-use-agent): Disable by default.
+ (pgg-gpg-update-agent): New function.
+ (pgg-gpg-use-agent-p): New function.
+ (pgg-gpg-process-region, pgg-gpg-encrypt-region)
+ (pgg-gpg-encrypt-symmetric-region, pgg-gpg-decrypt-region)
+ (pgg-gpg-sign-region): Use it.
-2006-03-21 Reiner Steib <Reiner.Steib@gmx.de>
+2006-03-22 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-agent.el (gnus-agent-queue-mail): Fix custom tag for `t'.
+ * gnus-sum.el (gnus-map-articles): Don't funcall symbol macro.
+ Reported by Ralf Wachinger <rwachinger@gmx.de>.
- * spam.el (spam-mark-new-messages-in-spam-group-as-spam):
- Add comment on version.
+2006-03-21 Simon Josefsson <jas@extundo.com>
-2006-03-20 Teodor Zlatanov <tzz@lifelogs.com>
+ * pgg-gpg.el: Ideas below based on patch from Sascha Wilde
+ <wilde@sha-bang.de>.
+ (pgg-gpg-use-agent): New variable.
+ (pgg-gpg-process-region): Use it.
+ (pgg-gpg-encrypt-region): Likewise.
+ (pgg-gpg-encrypt-symmetric-region): Likewise.
+ (pgg-gpg-decrypt-region): Likewise.
+ (pgg-gpg-sign-region): Likewise.
+ (pgg-gpg-possibly-cache-passphrase): Don't cache a nil password.
- * spam.el (spam-mark-new-messages-in-spam-group-as-spam): New variable.
- (spam-mark-junk-as-spam-routine): Use it. Allow to disable
- assigning the spam-mark to new messages.
+2006-03-21 Reiner Steib <Reiner.Steib@gmx.de>
-2006-03-20 Adam Sj,Ax(Bgren <asjo@koldfront.dk>
+ * gnus-agent.el (gnus-agent-queue-mail): Fix custom tag for `t'.
- (spam-ham-copy-or-move-routine): Don't declare `todo' twice.
+ * spam.el (spam-mark-new-messages-in-spam-group-as-spam):
+ Add comment on version.
2006-03-20 Reiner Steib <Reiner.Steib@gmx.de>
@@ -1302,6 +3499,26 @@
* gnus-util.el (gnus-tool-bar-update): Bind tool-bar-mode.
+2006-03-16 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gmm-utils.el (gmm-image-load-path-for-library): Prefer user's
+ images in image-load-path. [Sync with image.el at 2006-03-16T16:55:26Z!wohler@newt.com, in
+ Emacs.]
+
+2006-03-15 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gmm-utils.el (gmm-image-load-path-for-library): Pass value of
+ path rather than symbol. Always return list of directories.
+ Guarantee that image directory comes first. [Sync with image.el,
+ , in Emacs2006-03-15T17:06:16Z!wohler@newt.com.]
+
+ * message.el (message-make-tool-bar): Adjust to new API of
+ `gmm-image-load-path-for-library'.
+
+ * gnus-sum.el (gnus-summary-make-tool-bar): Ditto.
+
+ * gnus-group.el (gnus-group-make-tool-bar): Ditto.
+
2006-03-15 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
* gnus-art.el (gnus-article-only-boring-p):
@@ -1309,6 +3526,11 @@
intangible text.
Reported by Ralf Wachinger <rwnewsmampfer@geekmail.de>.
+2006-03-14 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gmm-utils.el (gmm-image-load-path-for-library): Fix typo. Use
+ `defun' instead of `gmm-defun-compat'.
+
2006-03-14 Simon Josefsson <jas@extundo.com>
* message.el (message-unique-id): Don't use message-number-base36
@@ -1355,17 +3577,70 @@
* gnus-topic.el (gnus-topic-prepare-topic): Add gnus-tool-bar-update.
+ * gnus-group.el (gnus-group-redraw-when-idle)
+ (gnus-group-redraw-check): Remove.
+ (gnus-group-make-tool-bar): Remove gnus-group-redraw-check.
+
2006-03-08 Katsumi Yamaoka <yamaoka@jpl.org>
* nnmail.el (nnmail-split-it): Invert match-partial-words behavior
if optional last element is specified in splits (FIELD VALUE...).
+2006-03-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-make-tool-bar): Rename gmm-image-load-path
+ to gmm-image-load-path-for-library. Call with no-error argument.
+ (message-tool-bar-gnome): Rename "mail/attach" to "attach".
+
+ * gnus-sum.el (gnus-summary-make-tool-bar): Ditto.
+
+ * gnus-group.el (gnus-group-make-tool-bar): Ditto.
+
+ * gmm-utils.el (gmm-image-load-path): Remove alias.
+
+2006-03-06 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gmm-utils.el (gmm-image-load-path): Add alias.
+
+ * nnml.el (nnml-generate-nov-databases-directory): Rename from
+ nnml-generate-nov-databases-1.
+ (nnml-generate-nov-databases): Use it.
+ (nnml-generate-nov-databases-directory): Document no-active
+ argument.
+
+ * gmm-utils.el (gmm-image-load-path-for-library): Return single
+ directory if path is t. Add no-error.
+
+ * gnus-group.el (gnus-group-make-tool-bar): Use add-hook.
+ Suggested by Stefan Monnier <monnier@iro.umontreal.ca>.
+
+ * gnus-art.el (gnus-article-browse-delete-temp-files): Simplify
+ resetting gnus-article-browse-html-temp-list.
+
+ * gmm-utils.el (gmm-image-load-path-for-library): Sync with
+ mh-compat.el at 2006-03-04T21:23:21Z!wohler@newt.com in Emacs. Rename `gmm-image-load-path'.
+ Add example to docstring. Rename local variables. Move error
+ checks to default case in cond and simplify.
+
2006-03-06 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-view.el (mm-w3m-cid-retrieve-1): Check carefully whether
handle is multipart when calling it recursively.
(mm-w3m-cid-retrieve): Display warning if retrieving fails.
+2006-03-03 Daniel Pittman <daniel@rimspace.net>
+
+ * nnimap.el (nnimap-request-update-info-internal): Optimize.
+ Don't `gnus-uncompress-range' to avoid excessive memory usage.
+
+2006-03-03 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-tool-bar-gnome): Check if gnus-topic.el
+ is loaded.
+
+ * gnus-sum.el (gnus-summary-tool-bar-gnome): Check if spam.el is
+ loaded.
+
2006-03-03 Reiner Steib <Reiner.Steib@gmx.de>
* mm-util.el (mm-with-unibyte-current-buffer): Change "Emacs 23"
@@ -1381,69 +3656,154 @@
* gnus-sum.el (gnus-summary-set-display-table): Don't nix out
characters 160 through 255 in Emacs 23.
+2006-03-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-article-browse-html-temp-list): Rename from
+ gnus-article-browse-html-temp.
+ (gnus-article-browse-delete-temp): Make it customizable. Add
+ `file'. Adjust doc string.
+ (gnus-article-browse-delete-temp-files): Add argument. Allow
+ query for each file. Adjust doc string.
+ (gnus-article-browse-html-parts): Add
+ `gnus-article-browse-delete-temp-files' to
+ `gnus-summary-prepare-exit-hook' and `gnus-exit-gnus-hook'.
+
+2006-03-02 Hynek Schlawack <hynek@ularx.de>
+
+ * gnus-art.el (gnus-article-browse-html-temp)
+ (gnus-article-browse-delete-temp): New variables.
+ (gnus-article-browse-delete-temp-files): New function.
+ (gnus-article-browse-html-parts): Use it.
+
+2006-03-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-group.el (gnus-group-redraw-check): Remove redundant tests.
+
+ * gmm-utils.el (gmm-image-load-path): Mention ../etc search in doc
+ string.
+
+ * gnus-sum.el (gnus-summary-tool-bar-gnome): Don't use
+ gnus-summary-insert-new-articles when unplugged. Remove
+ gnus-summary-search-article-forward.
+
+ * gmm-utils.el (gmm-tool-bar-style): Test tool-bar-mode and
+ display-visual-class instead of display-color-cells.
+
2006-03-02 Katsumi Yamaoka <yamaoka@jpl.org>
* mml.el (mml-generate-mime-1): Encode parts other than text/* or
message/* containing non-ASCII text properly.
+2006-03-01 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el: Require gmm-utils, remove autoloads.
+ (message-tool-bar): Set default based on
+ gmm-tool-bar-style.
+ (message-tool-bar-gnome): Add gmm-customize-mode.
+
+ * gnus-sum.el (gnus-summary-tool-bar): Set default based on
+ gmm-tool-bar-style.
+ (gnus-summary-tool-bar-gnome): Add gmm-customize-mode.
+
+ * gnus-group.el (gnus-group-tool-bar): Set default based on
+ gmm-tool-bar-style.
+ (gnus-group-tool-bar-gnome): Add gmm-customize-mode.
+
+ * gmm-utils.el (gmm-image-directory): Rename variable from
+ gmm-image-load-path.
+ (gmm-image-load-path): Use gmm-image-directory.
+ (gmm-customize-mode): New function.
+ (gmm-tool-bar-style): New variable.
+
+ * gnus-group.el (gnus-group-redraw-when-idle): Rename from
+ gnus-group-redraw-line-number.
+ (gnus-group-redraw-check): Simplify.
+ (gnus-group-tool-bar-update): Remove redraw check.
+ (gnus-group-make-tool-bar): Add redraw check.
+
+2006-03-01 Michael Piotrowski <mxp@dynalabs.de> (tiny change)
+
+ * gnus-art.el (gnus-button): Add missing parentheses.
+
2006-02-28 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-util.el (mm-with-unibyte-current-buffer): Add note.
-2006-02-28 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+2006-02-28 Reiner Steib <Reiner.Steib@gmx.de>
- * nnweb.el (nnweb-gmane-create-mapping): Don't choke on ^M.
+ * gnus-art.el (gnus-button): New face.
+ (gnus-article-button-face): Use it.
-2006-02-28 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-sum.el (gnus-summary-tool-bar-gnome): Add
+ gnus-summary-next-page. Re-order.
- * nnweb.el (nnweb-type-definition, nnweb-gmane-search):
- Use new nov.php.
+ * gnus-group.el (gnus-group-tool-bar-gnome): prev-node and
+ next-node are now included.
+ (gnus-group-redraw-line-number): New internal variable.
+ (gnus-group-redraw-check): Helper function for updating the tool
+ bar.
+ (gnus-group-tool-bar-update): Add gnus-group-redraw-check.
-2006-02-28 Andreas Seltenreich <uwi7@stud.uni-karlsruhe.de>
+ * gmm-utils.el (gmm-tool-bar-item): Add TODO about modifiers.
- * nnweb.el (nnweb-type-definition, nnweb-gmane-create-mapping)
- (nnweb-gmane-wash-article, nnweb-gmane-search): Fix Gmane web
- groups. Kudos to Olly Betts <olly@survex.com> for providing NOV
- output on the server side.
- (nnweb-google-create-mapping): Update regexps and add some
- progress indication.
+ * spam.el (spam-spamassassin-score-regexp): New internal variable.
+ (spam-extra-header-to-number, spam-check-spamassassin-headers):
+ Use it to match format of Spamassassin 3.0 and later. Reported by
+ IRIE Tetsuya <irie@t.email.ne.jp>.
+ (spam-check-bogofilter)
+ (spam-bogofilter-register-with-bogofilter): Fix args of
+ `gnus-error' calls.
2006-02-28 Reiner Steib <Reiner.Steib@gmx.de>
- * message.el (message-user-fqdn): Remove useless * in doc string.
-
* gnus-draft.el (gnus-draft-send): Bind message-signature to avoid
unnecessary interaction when sending queued mails. Reported by
TAKAHASHI Yoshio <tkh@jp.fujitsu.com>.
-2006-02-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2006-02-27 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-sequence-of-unread-articles): Return nil if
+ first or last are nil.
+
+2006-02-24 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de>
+
+ * nnweb.el (nnweb-gmane-create-mapping): Don't choke on ^M.
+
+2006-02-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-int.el (gnus-open-server): Respect gnus-batch-mode.
- Merge of 2006-02-20 change from the trunk.
-2006-02-28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2006-02-24 Lars Magne Ingebrigtsen <larsi@gnus.org>
* dns.el (query-dns): Protect more against buggy tcp output.
- Merge of 2006-02-20 change from the trunk.
-2006-02-27 Reiner Steib <Reiner.Steib@gmx.de>
+2006-02-24 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-sum.el (gnus-sequence-of-unread-articles): Return nil if
- first or last are nil.
+ * nnweb.el (nnweb-type-definition, nnweb-gmane-search): Use new
+ nov.php.
+
+2006-02-24 Andreas Seltenreich <uwi7@stud.uni-karlsruhe.de>
-2006-02-24 Simon Josefsson <jas@extundo.com>
+ * nnweb.el (nnweb-type-definition, nnweb-gmane-create-mapping)
+ (nnweb-gmane-wash-article, nnweb-gmane-search): Fix Gmane web
+ groups. Kudos to Olly Betts <olly@survex.com> for providing NOV
+ output on the server side.
+ (nnweb-google-create-mapping): Update regexps and add some
+ progress indication.
- * flow-fill.el (fill-flowed): Flow-fill unquoted lines too.
- Merge of 2005-10-26 change from the trunk.
+2006-02-23 Reiner Steib <Reiner.Steib@gmx.de>
-2006-02-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-group.el (gnus-group-tool-bar-gnome): Fix
+ gnus-agent-toggle-plugged. Re-order icons.
+ (gnus-group-tool-bar-gnome): Add
+ gnus-group-{prev,next}-unread-group.
+ (gnus-group-tool-bar-gnome): Re-order icons.
- * flow-fill.el (fill-flowed): Bind adaptive-fill-mode to nil.
- Remove space stuffing, and only do quotes that actually start with
- ">" at the beginning of the lines.
- Merge of 2005-11-17 and 2004-07-25 from the trunk.
+ * gnus-sum.el (gnus-summary-tool-bar-gnome): Move
+ gnus-summary-insert-new-articles.
-2006-02-23 Reiner Steib <Reiner.Steib@gmx.de>
+ * message.el (message-tool-bar-gnome, message-tool-bar-retro): Fix
+ comments.
* utf7.el (utf7-utf-16-coding-system): Fix comment. utf-16-be is
also available in Emacs 21.3.
@@ -1460,16 +3820,78 @@
* mm-view.el (mm-fill-flowed): Add :version.
-2006-02-23 Ralf Angeli <angeli@iwi.uni-sb.de>
+2006-02-23 Katsumi Yamaoka <yamaoka@jpl.org>
- * mm-view.el (mm-fill-flowed): New variable.
- (mm-inline-text): Use it.
+ * gmm-utils.el (gmm-image-load-path): Don't modify image-load-path
+ and load-path.
+
+2006-02-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el: Autoload gmm-image-load-path.
+ (message-tool-bar-retro): Prepend "gnus/" subdirectory to some
+ icon file names. Use old Emacs 21 "mail_send.xpm" icon for
+ consitency.
+
+ * gmm-utils.el (gmm-image-load-path): Also search in
+ "../etc/images". Don't set gmm-image-load-path if we don't find
+ the image.
+
+2006-02-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-image-load-path): Don't make
+ `gmm-image-load-path' include subdirectories which the second arg
+ `image' might specify.
+
+ * gnus-group.el (gnus-group-tool-bar-retro): Prepend the "gnus/"
+ subdirectory to icon file names.
+
+ * gnus-sum.el (gnus-summary-tool-bar-retro): Ditto.
+
+2006-02-21 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-group.el (gnus-group-make-tool-bar): Add IMAGE argument to
+ gmm-image-load-path calls.
+
+ * gnus-sum.el (gnus-summary-make-tool-bar): Ditto.
+
+ * message.el (message-make-tool-bar): Ditto.
+
+ * mml.el (mml-preview): Added comment concerning tool bar icons.
+
+ * gnus-group.el (gnus-group-tool-bar-gnome): Use new icon names.
+ (gnus-group-make-tool-bar): Use `gmm-image-load-path'.
+
+ * gnus-sum.el (gnus-summary-tool-bar-gnome): Use new icon names.
+ (gnus-summary-make-tool-bar): Use `gmm-image-load-path'.
+
+ * message.el (message-tool-bar-gnome): Use new icon names.
+ (message-make-tool-bar): Use `gmm-image-load-path'.
+
+ * gmm-utils.el (gmm-defun-compat, gmm-image-search-load-path): New
+ functions from MH-E.
+ (gmm-image-load-path): New variable from MH-E.
+ (gmm-image-load-path): New function from MH-E. Added arguments
+ LIBRARY, IMAGE and PATH. Don't modify paths. Don't use
+ *-image-load-path-called-flag.
+
+2006-02-21 Milan Zamazal <pdm@brailcom.org>
+
+ * mm-view.el (mm-view-pkcs7-verify): Implement using smime.el.
2006-02-21 Wolfram Fenske <wolfram.fenske@student.uni-magdeburg.de> (tiny change)
* nnimap.el (nnimap-request-move-article): Change folder back to
source group before deleting.
+2006-02-20 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-util.el (mm-charset-override-alist): Fix type in doc string.
+
+ * gnus-art.el (mm-url-insert-file-contents-external): Autoload
+ mm-url.
+
+ * mm-uu.el (mm-uu-type-alist): Improve `LaTeX'.
+
2006-02-20 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2047.el (rfc2047-charset-to-coding-system): Don't check the
@@ -1494,17 +3916,37 @@
* gnus-art.el (article-strip-banner): Use
gnus-extract-address-components instead of
- mail-header-parse-addresses to make it work with non-ASCII text.
+ mail-header-parse-addresses to make it work with non-ASCII text;
+ remove mail-encode-encoded-word-string.
* rfc2231.el (rfc2231-parse-string): Attempt to parse parameter
values which are surrounded with \"...\"; make it never cause a
Lisp error; give up parsing of parameters if it failed in
extracting type.
+2006-02-14 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * smime.el (smime-cert-by-ldap-1): Fix bug where
+ `smime-ldap-search' returns results without userCertificates.
+
2006-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
+ * mm-util.el (mm-make-temp-file): Don't catch file-error in Emacs.
+
+2006-02-14 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * spam.el (spam-check-spamassassin-headers): Adapt format for
+ Spamassassin 3.0 or later. Reported by ARISAWA Akihiro
+ <ari@mbf.ocn.ne.jp>.
+ (spam-list-of-processors): Add spam-use-gmane.
+
+2006-02-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
* mm-util.el (mm-make-temp-file): Import the Emacs 22 version of
- make-temp-file; make it work with Emacs 20 and XEmacs as well.
+ make-temp-file; make it work with XEmacs as well.
+
+ * gnus-art.el (gnus-article-browse-html-parts): Use the 3rd arg of
+ mm-make-temp-file.
* mm-decode.el (mm-display-external): Use the 3rd arg of
mm-make-temp-file.
@@ -1518,6 +3960,18 @@
(gnus-draft-check-draft-articles): New function.
(gnus-draft-edit-message, gnus-draft-send-message): Use it.
+2006-02-13 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-article-browse-html-parts):
+ `hs-show-html-list' should read `gnus-article-browse-html-parts'.
+ Don't use suffix argument for mm-make-temp-file for Emacs 21
+ compatibility. Remove useless `format'.
+
+2006-02-13 Andreas Seltenreich <uwi7@stud.uni-karlsruhe.de>
+
+ * nnweb.el (nnweb-google-wash-article): Update regexps.
+ (nnweb-group-alist): Use defvoo instead of defvar.
+
2006-02-13 Katsumi Yamaoka <yamaoka@jpl.org>
* nnoo.el (nnoo-declare): Don't generate duplicate entries when
@@ -1525,8 +3979,24 @@
2006-02-10 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-group.el (gnus-group-make-tool-bar): Remove duplicate check
+ for `tool-bar-mode' and don't check it's default-value.
+
+ * gnus-sum.el (gnus-summary-make-tool-bar): Ditto.
+
+ * message.el (message-make-tool-bar): Ditto.
+
+ * gnus-art.el (gnus-article-browse-html-parts): Remove useless
+ `substring'. Shorten tmp-file name.
+
* gnus.el: Remove bogus comment.
+2006-02-10 Hynek Schlawack <hynek@ularx.de>
+
+ * gnus-art.el (gnus-article-browse-html-parts): New function.
+ (gnus-article-browse-html-article): New function for viewing html
+ articles with a browser.
+
2006-02-09 Daiki Ueno <ueno@unixuser.org>
* mml2015.el (mml2015-pgg-sign): Enable pgg-text-mode.
@@ -1602,10 +4072,6 @@
Update copyright notices of all files in the gnus directory.
-2006-02-03 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-util.el (gnus-error): Describe `args'.
-
2006-02-03 Andreas Seltenreich <uwi7@stud.uni-karlsruhe.de>
* nnweb.el (nnweb-request-group): Avoid growing overview files.
@@ -1636,20 +4102,13 @@
(nnweb-possibly-change-server, nnweb-request-group): Remove some
initialisations. Let nnoo do the work.
-2006-01-31 Romain Francoise <romain@orebokech.com>
-
- * message.el (message-alternative-emails): Improve docstring.
- (message-setup-1): Call `message-use-alternative-email-as-from'
- after `message-setup-hook' to give it precedence over posting
- styles, etc.
- (message-use-alternative-email-as-from): Add docstring.
- Remove the original From header if present.
-
2006-01-31 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-uu.el (mm-uu-emacs-sources-extract, mm-uu-diff-extract):
Say the part has been decoded.
+ * mm-view.el (mm-display-inline-fontify): Get decoded part rightly.
+
2006-01-31 Kevin Ryde <user42@zip.com.au>
* mailcap.el (mailcap-viewer-passes-test): Don't put "(nil t)" into
@@ -1657,6 +4116,15 @@
will invert the meaning of a "nil" test previously determined by
mailcap-mailcap-entry-passes-test.
+2006-01-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el: Bind tool-bar-mode instead of tool-bar-map when
+ compiling.
+
+ * gnus-sum.el: Ditto.
+
+ * message.el: Don't bind tool-bar-map when compiling.
+
2006-01-30 Reiner Steib <Reiner.Steib@gmx.de>
* nnweb.el (nnweb-google-parse-1): Clarify some comments.
@@ -1667,11 +4135,57 @@
(nnweb-google-create-mapping, nnweb-google-search): Adapt to
current Google Groups.
+2006-01-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-make-tool-bar): Add checks for XEmacs
+ and tool-bar-mode.
+
+ * gnus-group.el (gnus-group-make-tool-bar): Add checks for XEmacs
+ and tool-bar-mode.
+
+ * message.el (message-tool-bar-update): Simplify.
+ (message-make-tool-bar): Add checks for XEmacs and tool-bar-mode.
+
+ * gnus-sum.el (gnus-summary-tool-bar-update): Check for
+ gnus-summary-buffer.
+ (gnus-summary-tool-bar-gnome): Use "reply-author" icon for
+ gnus-summary-reply.
+
+ * gmm-utils.el (gmm): Add :version.
+
2006-01-26 Katsumi Yamaoka <yamaoka@jpl.org>
* Makefile.in (clean): New rule.
(distclean): Use it.
+2006-01-26 Steve Youngs <steve@sxemacs.org>
+
+ * gmm-utils.el (gmm-tool-bar-item, gmm-tool-bar-zap-list): Don't
+ autoload.
+
+2006-01-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gmm-utils.el (gmm-verbose): Add :group.
+
+2006-01-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el: Change some comments WRT tool-bars.
+
+ * gnus-sum.el (gnus-summary-tool-bar)
+ (gnus-summary-tool-bar-gnome, gnus-summary-tool-bar-retro)
+ (gnus-summary-tool-bar-zap-list): New variables.
+ (gnus-summary-make-tool-bar): Complete rewrite using
+ `gmm-tool-bar-from-list'.
+
+ * gnus-group.el (gnus-group-tool-bar, gnus-group-tool-bar-gnome)
+ (gnus-group-tool-bar-retro, gnus-group-tool-bar-zap-list): New
+ variables.
+ (gnus-group-make-tool-bar): Complete rewrite using
+ `gmm-tool-bar-from-list'.
+ (gnus-group-tool-bar-update): New function.
+
+ * message.el (message-mode-field-menu): Add "Show hidden Headers".
+
2006-01-25 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-uu.el (mm-uu-dissect-text-parts): Ignore it if a given part
@@ -1685,10 +4199,28 @@
mailcap-viewer-passes-test and mailcap-mailcap-entry-passes-test
look for.
+2006-01-24 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gmm-utils.el (gmm-tool-bar-item): Add "Separator".
+ (gmm-tool-bar-from-list): Suppress tooltip for `gmm-ignore'.
+
+ * message.el (message-tool-bar-gnome): Use gmm-ignore.
+
2006-01-24 Katsumi Yamaoka <yamaoka@jpl.org>
- * mm-uu.el (mm-uu-dissect-text-parts): Reduce the number of
- recursive calls.
+ * gnus-art.el (gnus-mime-security-button-commands): New variable.
+ (gnus-mime-security-button-menu): New definition.
+ (gnus-mime-security-button-map): Use them.
+ (gnus-mime-security-button-menu): New function.
+ (gnus-insert-mime-security-button): Addition to help echo.
+ (gnus-mime-security-run-function, gnus-mime-security-save-part)
+ (gnus-mime-security-pipe-part): New functions.
+
+ * mm-uu.el (mm-uu-buttonize-original-text-parts): Remove.
+ (mm-uu-dissect-text-parts): Revert a part of 2006-01-23 change.
+
+ * mm-decode.el (mm-handle-set-disposition): Remove.
+ (mm-handle-set-description): Remove.
2006-01-24 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -1700,6 +4232,30 @@
* gnus-art.el (gnus-article-wash-html-with-w3m-standalone): Use
mm-w3m-standalone-supports-m17n-p to alter w3m usage.
+2006-01-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-tool-bar-zap-list): Use
+ gmm-tool-bar-zap-list as custom type.
+ (message-tool-bar-update): New function.
+ (message-tool-bar, message-tool-bar-gnome)
+ (message-tool-bar-retro): Add message-tool-bar-update.
+ (message-tool-bar-gnome): Add flyspell-buffer.
+
+ * gnus-util.el (gnus-error): Describe `args'.
+
+ * gmm-utils.el (gmm-error): Describe `args'.
+ (gmm-tool-bar-zap-list): New widget.
+ (gmm-tool-bar-from-list): Improve description of `zap-list'.
+
+2006-01-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-uu.el (mm-uu-buttonize-original-text-parts): New variable.
+ (mm-uu-dissect-text-parts): Buttonize original text parts; reduce
+ the number of recursive calls.
+
+ * mm-decode.el (mm-handle-set-disposition): New macro.
+ (mm-handle-set-description): New macro.
+
2006-01-23 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-uu.el (mm-uu-dissect-text-parts): Decode content transfer
@@ -1707,15 +4263,53 @@
2006-01-20 Reiner Steib <Reiner.Steib@gmx.de>
+ * message.el (message-tool-bar-zap-list, message-tool-bar)
+ (message-tool-bar-gnome, message-tool-bar-retro): New variables.
+ (message-tool-bar-local-item-from-menu): Remove.
+ (message-tool-bar-map): Replace by `message-make-tool-bar'.
+ (message-make-tool-bar): New function.
+ (message-mode): Use `message-make-tool-bar'.
+
+ * gmm-utils.el: New file.
+ (gmm-verbose, gmm-message, gmm-error): From gnus-utils.el.
+ (gmm-lazy): New widget copied from `nnmail.el'.
+ (gmm-tool-bar-from-list): New function for creating customizable
+ tool bars.
+ (gmm-tool-bar-from-list): Fix typos in doc string. Remove debug
+ output.
+ (gmm): Add :prefix to defgroup.
+
+2006-01-20 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gmm-utils.el (gmm-widget-p): New function.
+
+2006-01-20 Reiner Steib <Reiner.Steib@gmx.de>
+
* mml.el (mml-attach-file): Describe `description' in doc string.
(mml-menu): Add Emacs MIME manual and PGG manual.
-2006-01-19 Reiner Steib <Reiner.Steib@gmx.de>
+2006-01-20 Richard M. Stallman <rms@gnu.org>
+
+ * mm-url.el (mm-url-load-url): Require url-parse and url-vars.
+
+2006-01-20 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * nntp.el (nntp-end-of-line): Doc fix.
+
+2006-01-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * imap.el (imap-open): Handle case where buffer is a buffer
+ object.
+
+2005-01-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * gnus-delay.el (gnus-delay): Don't autoload.
+ It's useless and could trigger a bug in cus-dep.el causing ldefs-boot
+ to be re-loaded when customizing the `gnus-delay' group.
- * spam.el (spam-group-ham-mark-p, spam-group-spam-mark-p)
- (spam-group-spam-marks, spam-list-articles, spam-group-ham-marks):
- Revert 2006-01-08 change because the functions will be used in No
- Gnus.
+2005-01-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * message.el (message-insert-citation-line): Use newlines.
2006-01-19 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -1723,6 +4317,10 @@
* mm-uu.el (mm-uu-dissect-text-parts): Dissect dissected parts.
+2006-01-19 Mark D. Baushke <mdb@gnu.org>
+
+ * pgg-gpg.el (pgg-gpg-encrypt-region): Add --textmode to gpg args.
+
2006-01-17 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-inlined-types): Add application/pgp.
@@ -1737,9 +4335,6 @@
(nnrss-opml-import): Query whether to subscribe to each entry.
* gnus-art.el:
- * gnus-cus.el:
- * gnus-group.el:
- * gnus-start.el:
* gnus-sum.el:
* mm-uu.el:
* mm-view.el: Update copyright.
@@ -1752,19 +4347,11 @@
* ChangeLog: Fix and update copyright.
-2006-01-16 Katsumi Yamaoka <yamaoka@jpl.org>
+2006-01-13 Romain Francoise <romain@orebokech.com>
- * mm-uu.el (mm-uu-text-plain-type): New variable.
- (mm-uu-pgp-signed-extract-1): Use it.
- (mm-uu-pgp-encrypted-extract-1): Use it.
- (mm-uu-dissect): Use it; allow two optional arguments; one is a
- flag specifying whether there's no message header; the other is
- for a MIME type and parameters; bind mm-uu-text-plain-type with
- the later one.
- (mm-uu-dissect-text-parts): New function.
-
- * gnus-art.el (gnus-display-mime): Use mm-uu-dissect-text-parts to
- dissect text parts.
+ * message.el (message-forward-subject-name-subject): Prefer the
+ address to 'nowhere' if the sender has no name.
+ Fix typo. Update copyright year.
2006-01-13 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -1778,6 +4365,11 @@
gnus-article-wash-html-with-w3m-standalone.
(mm-inline-text-html-render-with-w3m-standalone): New function.
+2006-01-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-uu.el (mm-uu-type-alist): Fix previous message-marks commit.
+ Improve LaTeX.
+
2006-01-10 Katsumi Yamaoka <yamaoka@jpl.org>
* nnrss.el (nnrss-wash-html-in-text-plain-parts): New variable.
@@ -1815,6 +4407,12 @@
fetch a feed. Suggested by Mark Plaksin <happy@mcplaksin.org>.
(nnrss-insert-w3): Ditto.
+2005-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-uu.el (gnus-uu-digest-mail-forward): Reverse the order of
+ the articles to be forwarded including the case where neither a
+ number of articles nor a region is specified.
+
2005-12-21 Katsumi Yamaoka <yamaoka@jpl.org>
* nnrss.el (nnrss-request-article): Fix last change; fill
@@ -1826,34 +4424,31 @@
in text/plain part.
(nnrss-check-group): Don't add excessive newline to dc:subject.
-2005-12-19 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * gnus-art.el (gnus-article-delete-text-of-type): Enable it to
- remove MIME buttons associated with multipart/alternative parts.
- (gnus-mime-display-alternative): Tag buttons using `article-type'
- text property.
-
- * gnus-msg.el (gnus-copy-article-buffer): Remove MIME buttons
- associated with multipart/alternative parts.
-
2005-12-19 Mark Plaksin <happy@mcplaksin.org> (tiny change)
* nnrss.el (nnrss-check-group): Put the RSS dc:subject in the
article.
-2005-12-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2005-12-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * nnml.el: Don't require gnus-bcklg. Autoload it.
+ (nnml-use-compressed-files, nnml-save-mail): Support other
+ comression programs such as bzip2.
+
+2005-12-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
* dns.el (query-dns): Make sure we check the buffer size before
removing tcp headers.
-2006-01-08 Chong Yidong <cyd@stupidchicken.com>
+2005-12-16 Katsumi Yamaoka <yamaoka@jpl.org>
- * spam.el (spam-group-ham-mark-p, spam-group-spam-mark-p)
- (spam-group-spam-marks): Delete functions.
- (spam-list-articles): Just call spam-group-ham-marks directly.
- (spam-group-ham-marks): Simplify.
+ * gnus-art.el (gnus-article-delete-text-of-type): Enable it to
+ remove MIME buttons associated with multipart/alternative parts.
+ (gnus-mime-display-alternative): Tag buttons using `article-type'
+ text property.
-2005-12-16 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-msg.el (gnus-copy-article-buffer): Remove MIME buttons
+ associated with multipart/alternative parts.
* gnus-art.el (gnus-signature-separator): Fix custom type.
@@ -1864,6 +4459,22 @@
(mm-inline-override-types): Ditto.
(mm-automatic-external-display): Ditto.
+2005-12-15 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * spam-report.el (spam-report-user-mail-address)
+ (spam-report-user-agent): New variables.
+ (spam-report-url-ping-plain): Use spam-report-user-agent.
+
+2005-12-14 Ralf Angeli <angeli@iwi.uni-sb.de>
+
+ * gnus-art.el (gnus-button-handle-custom): Do not just use
+ `customize-apropos' for any "M-x customize-*" button but the
+ function called for. Accept both the function name and its
+ argument in order to achieve this.
+ (gnus-button-alist): Remove support for "custom:" URL's. Pass
+ function name to `gnus-button-handle-custom' in case of "M-x
+ customize-*" buttons.
+
2005-12-12 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-buttonized-mime-types): Mention addition of
@@ -1873,6 +4484,21 @@
* mm-decode.el (mm-discouraged-alternatives): Add xref to
gnus-buttonized-mime-types in doc string.
+2005-12-08 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-decode.el (mm-discouraged-alternatives): Fix custom type.
+ Suggest image/.* in the doc string.
+
+2005-12-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-uu.el (mm-uu-type-alist): Don't depend on message.el for
+ message-marks (Debian bug #342521).
+
+2005-12-12 Simon Josefsson <jas@extundo.com>
+
+ * password.el (password-read-from-cache): Add.
+ (password-read): Use it.
+
2005-12-12 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2047.el (rfc2047-charset-to-coding-system): Recognize
@@ -1883,34 +4509,14 @@
2005-12-09 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-start.el (gnus-no-server-1): Mention
- `gnus-level-default-subscribed' in doc string.
-
-2005-12-09 Reiner Steib <Reiner.Steib@gmx.de>
-
- * gnus-start.el (gnus-start-draft-setup): Enforce
- `gnus-draft-mode' for nndraft:drafts at startup.
+ * pop3.el (pop3-stream-type): Fix custom version.
- * gnus.el (gnus-splash): Change custom group.
- (gnus-group-get-parameter, gnus-group-parameter-value): Describe
- allow-list argument.
-
- * gnus-agent.el (gnus-agent-article-alist-save-format): Format doc
- string.
+ * mm-uu.el (mm-uu-type-alist): Simplify uu regexp.
2005-12-09 ARISAWA Akihiro <ari@mbf.ocn.ne.jp> (tiny change)
* mm-decode.el (mm-display-external): Add missing cdr.
-2005-12-12 Richard M. Stallman <rms@gnu.org>
-
- * mm-url.el (mm-url-load-url): Require url-parse and url-vars.
-
-2005-12-08 Reiner Steib <Reiner.Steib@gmx.de>
-
- * mm-decode.el (mm-discouraged-alternatives): Fix custom type.
- Suggest image/.* in the doc string.
-
2005-12-07 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-display-external): Use nametemplate (defined in
@@ -1922,27 +4528,58 @@
2005-12-06 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-art.el (gnus-default-article-saver): Add user-defined
- `function' to custom type.
+ * nntp.el (nntp-marks-directory): Fix custom group.
+
+ * gnus-fun.el (gnus-face-from-file): Decrease quant in smaller
+ steps when < 10.
+
+ * gnus-start.el (gnus-no-server-1): Mention
+ `gnus-level-default-subscribed' in doc string.
2005-12-02 ARISAWA Akihiro <ari@mbf.ocn.ne.jp> (tiny change)
* mm-view.el (mm-inline-text-html-render-with-w3m): Fix misplaced
parens.
-2005-11-29 Reiner Steib <Reiner.Steib@gmx.de>
+2005-11-26 Dave Love <fx@gnu.org>
- * gnus-cache.el (gnus-cache-rename-group): Wrap doc strings and
- long lines.
- (gnus-cache-delete-group): Wrap doc strings.
+ * tls.el (open-tls-stream): Rename arg SERVICE to PORT.
+ (tls-program, tls-success): Provide openssl alternative.
- * gnus-agent.el (gnus-agent-rename-group)
- (gnus-agent-delete-group): Wrap doc strings.
+ * starttls.el: Doc fixes.
+ (starttls-open-stream-gnutls, starttls-open-stream): Rename arg
+ SERVICE to PORT.
+
+ * pop3.el (pop3-open-server) <ssl>: Clarify a loop. Deal with
+ port null or service name.
+ (starttls-negotiate): Autoload.
+
+2005-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-kill-to-signature): Fix interactive spec.
+
+2005-11-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * pop3.el (pop3-open-server): Recognize a string as a service name.
2005-11-24 Pascal Rigaux <pixel@mandriva.com> (tiny change)
* rfc2231.el (rfc2231-parse-string): Support non-ascii chars.
+2005-11-23 Dave Love <fx@gnu.org>
+
+ Add pop3s, pop3/starttls.
+
+ * pop3.el (pop3-authentication-scheme): Clarify doc.
+ (open-tls-stream, starttls-open-stream): Autoload.
+ (pop3-stream-type): New.
+ (pop3-open-server): Use it.
+
+ * mail-source.el (mail-sources): Fix some :types. Add stream type
+ for POP.
+ (mail-source-keyword-map): Add :stream for POP.
+ (mail-source-fetch-pop): Use pop3-stream-type.
+
2005-11-22 Katsumi Yamaoka <yamaoka@jpl.org>
* nnmail.el (nnmail-fancy-expiry-target): Use current-time instead
@@ -1953,154 +4590,116 @@
* nnmail.el (nnmail-fancy-expiry-target): Protect against invalid
date header.
+2005-11-19 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-sum.el (gnus-fetch-old-headers): Updated docs to warn that
+ it can seriously impact performance as it bypasses the agent's
+ local caches.
+
+2005-11-19 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-agent.el (gnus-agent-possibly-synchronize-flags): A server
+ must be explicitly online rather than "not explicitly offline" for
+ its flags to be synchronized.
+
+ * gnus-sum.el (gnus-summary-remove-process-mark): Always return t so
+ that gnus-uu-unmark-thread will function correctly.
+
+ * gnus-group.el (gnus-total-fetched-for): Reduced cutoff so that
+ 1024K is instead displayed as 1M.
+
+2005-11-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * flow-fill.el (fill-flowed): Bind adaptive-fill-mode to nil.
+
2005-11-16 Boris Samorodov <bsam@ipt.ru> (tiny change)
* imap.el (imap-kerberos4-open): Ignore SSL stuff.
-2005-11-14 Kevin Greiner <kevin.greiner@compsol.cc>
+2005-11-13 Kevin Greiner <kevin.greiner@compsol.cc>
- * gnus-agent.el (gnus-agent-article-alist-save-format): Changed
- internal variable to a custom variable. Changed default value
- from compressed(2) to uncompressed(1).
- (gnus-agent-read-agentview): Reversed revision 7.8 to restore
- support for uncompressed agentview files. Taken together, reading
- the agentview file should now be 6-7 times faster.
- (gnus-agent-long-article,
- gnus-agent-short-article, gnus-agent-score): Renamed category
- keywords to match gnus-cus.
- (gnus-agent-summary-fetch-series): Modified to protect against
- gnus-agent-summary-fetch-group clearing processable flags.
- (gnus-agent-synchronize-group-flags): Update live group buffer as
- synchronization may occur due to the user toggling the plugged
- status.
- (gnus-agent-braid-nov): Now tests new nov entries
- for duplicates which are removed. The invalid sort check then
- triggers a rescan after the sort as sorting may have moved
- duplicate entries such that they can be cheaply detected.
- (gnus-agent-read-local): Trivial fix to format of
+ * gnus-agent.el (gnus-agent-read-local): Trivial fix to format of
error message to display actual error condition.
(gnus-agent-save-local): Avoid saving symbols that are bound to
nil as they simply result in a warning message in
gnus-agent-read-local.
- (gnus-agent-fetch-group-1): Clear downloadable flag when article
- successfully downloaded.
- (gnus-agent-regenerate-group): Use
- gnus-agent-synchronize-group-flags to reset read status in both
- gnus and server.
-
- * nntp.el (nntp-end-of-line): Doc fix.
- (nntp-authinfo-rejected): New error condition.
- (nntp-wait-for): Use new error condition to signal authentication
- error.
- (nntp-retrieve-data): Rethrow new error condition to break out of
- recursive call to nntp-send-authinfo.
2005-11-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-start.el (gnus-dribble-read-file): Use make-local-variable
rather than make-variable-buffer-local for file-precious-flag.
+2005-11-12 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-agent.el (gnus-agent-braid-nov): Now tests new nov entries
+ for duplicates which are removed. The invalid sort check then
+ triggers a rescan after the sort as sorting may have moved
+ duplicate entries such that they can be cheaply detected.
+
2005-11-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-start.el (gnus-dribble-read-file): Quote file-precious-flag.
+2005-11-12 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-agent.el (gnus-agent-article-alist-save-format): Changed
+ internal variable to a custom variable. Changed default value
+ from compressed(2) to uncompressed(1).
+ (gnus-agent-read-agentview): Reversed revision 7.8 to restore
+ support for uncompressed agentview files. Taken together, reading
+ the agentview file should now be 6-7 times faster.
+
2005-11-11 Jan Nieuwenhuizen <janneke@gnu.org>
* gnus-start.el (gnus-dribble-read-file): Set file-precious-flag,
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>
-
- * pgg-pgp.el (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region)
- (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
- (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
- (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase'
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
- (pgg-pgp-decrypt-region, pgg-pgp-sign-region): Use new name for
- pgg-add-passphrase-to-cache function.
-
- * pgg-pgp5.el (pgg-pgp5-encrypt-region, pgg-pgp5-decrypt-region)
- (pgg-pgp5-encrypt-symmetric-region, pgg-pgp5-encrypt-symmetric)
- (pgg-pgp5-encrypt, pgg-pgp5-decrypt-region, pgg-pgp5-decrypt)
- (pgg-pgp5-sign-region, pgg-pgp5-sign): Add optional 'passphrase'
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
- (pgg-pgp5-sign-region): Use new name of pgg-add-passphrase-to-cache
- function.
+2005-12-09 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-start.el (gnus-start-draft-setup): Enforce
+ `gnus-draft-mode' for nndraft:drafts at startup.
+
+ * gnus.el (gnus-splash): Change custom group.
+ (gnus-group-get-parameter, gnus-group-parameter-value): Describe
+ allow-list argument.
-2005-10-29 Ken Manheimer <ken.manheimer@gmail.com>
-
- * pgg-gpg.el (pgg-gpg-select-matching-key): Fix: look at the right
- part of the decoded armor to find the key-identifier.
- (pgg-gpg-lookup-key-owner): New function to return the
- human-readable identifier of a key owner.
- (pgg-gpg-lookup-id-from-key-owner): Make it easy to identify the
- key itself.
- (pgg-gpg-decrypt-region): Prompt with the key owner (rather than
- the key value) if we have a key and can match it against a secret
- key. Also, added a note pointing out fact that the prompt only
- indicates the first matching key.
-
- * pgg.el (pgg-decrypt): Passing along 'passphrase' in call to
- pgg-decrypt-region.
- (pgg-pending-timers): A new hash for tracking the passphrase cache
- timers, so that new ones supercede old ones.
- (pgg-add-passphrase-to-cache): Rename from
- `pgg-add-passphrase-cache' to reduce confusion (all callers
- changed). Modified to cancel old timers when new ones are added.
- (pgg-remove-passphrase-from-cache): Rename from
- `pgg-remove-passphrase-cache' to reduce confusion (all callers
- changed). Modified to cancel old timers when their keys are
- removed from the cache.
- (pgg-cancel-timer): In Emacs, an alias for cancel-timer; in
- XEmacs, an indirection to delete-itimer.
- (pgg-read-passphrase-from-cache, pgg-read-passphrase):
- Extract pgg-read-passphrase-from-cache from pgg-read-passphrase so
- users can only check cache without risk of prompting. Correct bug in
- notruncate behavior.
- (pgg-read-passphrase-from-cache, pgg-read-passphrase)
- (pgg-add-passphrase-cache, pgg-remove-passphrase-cache):
- Add informative docstrings.
- (pgg-decrypt): Convey provided passphrase in subordinate call to
- pgg-decrypt-region.
-
-2005-10-20 Ken Manheimer <ken.manheimer+emacs@gmail.com>
-
- * pgg.el (pgg-encrypt-region, pgg-encrypt-symmetric-region)
- (pgg-encrypt-symmetric, pgg-encrypt, pgg-decrypt-region)
- (pgg-decrypt, pgg-sign-region, pgg-sign): Add optional
- 'passphrase' argument, so the passphrase can be managed externally
- and then passed in to the system.
-
- * pgg.el (pgg-read-passphrase, pgg-add-passphrase-cache)
- (pgg-remove-passphrase-cache): Add optional 'notruncate' argument,
- so the passphrase cache can be used reliably with identifiers
- besides a pgp packet's key id.
-
- * pgg-gpg.el (pgg-pgp-encrypt-region)
- (pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
- (pgg-pgp-encrypt, pgg-pgp-decrypt-region, pgg-pgp-decrypt)
- (pgg-pgp-sign-region, pgg-pgp-sign): Add optional 'passphrase'
- argument to all these routines, so the passphrase can be managed
- externally and passed in to the system.
-
- * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Add optional
- 'notruncate' argument, so the passphrase cache can be used
- reliably with identifiers besides a pgp packet's key id.
-
-2005-10-29 Sascha Wilde <swilde@sha-bang.de>
-
- * pgg-gpg.el (pgg-gpg-encrypt-symmetric-region): New function for
- symmetric encryption.
- (pgg-gpg-symmetric-key-p): New function to check for an symmetric
- encrypted session key.
- (pgg-gpg-decrypt-region): When decrypting a symmetric encrypted
- message ask for the passphrase in a proper way.
-
- * pgg.el (pgg-encrypt-symmetric, pgg-encrypt-symmetric-region):
- New user commands for symmetric encryption.
+ * gnus-agent.el (gnus-agent-article-alist-save-format): Format doc
+ string.
+
+2005-12-06 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-default-article-saver): Add user-defined
+ `function' to custom type.
+
+2005-10-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * imap.el (imap-open): Handle case where buffer is a buffer
+ object.
+
+2005-11-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-cache.el (gnus-cache-rename-group): Wrap doc strings and
+ long lines.
+ (gnus-cache-delete-group): Wrap doc strings.
+
+ * gnus-agent.el (gnus-agent-rename-group)
+ (gnus-agent-delete-group): Wrap doc strings.
+
+
+2005-11-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-start.el (gnus-1): Add "native" to
+ gnus-predefined-server-alist.
+
+ * gnus.el (gnus-method-to-server): Don't add "native" to the
+ lists here, because that leads to problems when
+ gnus-select-method is bound.
+
+2005-11-09 Simon Josefsson <jas@extundo.com>
+
+ * gnus-sum.el (gnus-article-sort-by-date-reverse): Remove,
+ use (not sort-by-date) instead.
2005-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
@@ -2148,6 +4747,27 @@
* message.el (message-generate-headers): Downcase the argument
given to message-check-element.
+2005-11-08 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * nntp.el (nntp-authinfo-rejected): New error condition.
+ (nntp-wait-for): Use new error condition to signal authentication
+ error.
+ (nntp-retrieve-data): Rethrow new error condition to break out of
+ recursive call to nntp-send-authinfo.
+
+2005-11-08 Romain Francoise <romain@orebokech.com>
+
+ * gnus-sum.el (gnus-summary-catchup-and-goto-prev-group): New function.
+ (gnus-summary-exit-map): Bind to `Z p'.
+ (gnus-summary-make-menu-bar): Add menu item.
+
+2005-11-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-article-treat-custom): Add `first'.
+ (gnus-treat-*): Add `first' in all doc strings.
+
+ * gnus-group.el (gnus-group-compact-group): Fix typo.
+
2005-11-01 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus.el (gnus-parameters-case-fold-search): New variable.
@@ -2161,7 +4781,26 @@
2005-10-31 Katsumi Yamaoka <yamaoka@jpl.org>
- * mml.el (mml-preview): Doc fix.
+ * mm-util.el (mm-special-display-p): New function.
+
+ * mml.el (mml-preview): Use it; doc fix.
+
+2005-10-29 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-fix-before-sending): Fix comment.
+
+2005-10-29 Jari Aalto <jari.aalto@cante.net>
+
+ * gnus-sum.el (gnus-article-sort-by-date-reverse): New function.
+
+2005-10-29 Jari Aalto <jari.aalto@cante.net>
+
+ * score-mode.el (gnus-score-edit-done-hook): Introduce variable.
+ Used in gnus-score.el.
+
+2005-10-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-util.el (mm-codepage-setup): Remove bogus alias test.
2005-10-27 Reiner Steib <Reiner.Steib@gmx.de>
@@ -2177,6 +4816,24 @@
Courier IMAP ("some version from 2004"). Mostly based on similar
code in the same function.
+2005-10-26 Didier Verna <didier@xemacs.org>
+
+ * gnus-group.el (gnus-group-compact-group): invalidate original
+ article buffer.
+ * gnus-srvr.el (gnus-server-compact-server): ditto.
+ * nnml.el (nnml-request-compact-group): handle self Xref: field in
+ NOV database and in article itself.
+ Invalidate article backlog.
+
+2005-10-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-uu.el (mm-uu-hide-markers): Fix XEmacs case.
+
+2005-10-26 Simon Josefsson <jas@extundo.com>
+
+ * flow-fill.el (fill-flowed): Flow-fill unquoted lines too, revert
+ part of 2004-07-25 change.
+
2005-10-26 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-display-completion-list): New function.
@@ -2207,10 +4864,21 @@
* gnus-score.el (gnus-default-adaptive-score-alist): Set defaults
depending on gnus-score-decay-constant.
-2005-10-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * encrypt.el (encrypt-insert-file-contents)
+ (encrypt-write-file-contents): Don't use `gnus-message'.
+
+ * mm-uu.el (mm-uu-verbatim-marks-extract): Add four start and end
+ arguments.
+ (mm-uu-type-alist): Add message-marks and insert-marks. Pass
+ arguments to mm-uu-verbatim-marks-extract.
+ (mm-uu-hide-markers): New variable.
+ (mm-uu-extract): Use face similar to `gnus-cite-3'.
- * nnslashdot.el (nnslashdot-request-article)
- (nnslashdot-retrieve-headers-1): Update to new HTML.
+ * gnus-fun.el (gnus-convert-image-to-x-face-command)
+ (gnus-convert-image-to-face-command): Use "convert" by default to
+ allow other input image formats.
+ (gnus-x-face-from-file, gnus-face-from-file): Adjust doc strings
+ accordingly.
2005-10-23 Simon Josefsson <jas@extundo.com>
@@ -2218,6 +4886,12 @@
with latest GNU SASL.
(imap-gssapi-open): Ignore 'Trying ...' messages from GNU SASL.
+2005-10-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnslashdot.el (nnslashdot-retrieve-headers-1): Update to new
+ HTML.
+ (nnslashdot-request-article): Ditto.
+
2005-10-20 Hiroshi Fujishima <hiroshi.fujishima@gmail.com> (tiny change)
* mail-source.el (mail-source-fetch-pop): Require pop3.
@@ -2235,6 +4909,9 @@
* message.el (message-tool-bar-local-item-from-menu): Fix comment.
+ * mm-bodies.el (mm-decode-string): Call
+ `mm-charset-to-coding-system' with allow-override argument.
+
2005-10-19 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2047.el (rfc2047-allow-incomplete-encoded-text): New variable.
@@ -2268,27 +4945,52 @@
* message.el (message-expand-group): Pass the common
prefix substring of completion to `display-completion-list'.
-2005-10-09 Daniel Brockman <daniel@brockman.se>
+2005-10-13 Reiner Steib <Reiner.Steib@gmx.de>
- * format-spec.el (format-spec): Propagate text properties of % spec.
+ * mml-sec.el (mml-secure-method): New internal variable.
+ (mml-secure-sign, mml-secure-encrypt, mml-secure-message-sign)
+ (mml-secure-message-sign-encrypt, mml-secure-message-encrypt): New
+ functions using mml-secure-method.
-2005-01-21 Derek Atkins <warlord@MIT.EDU> (tiny change)
+ * mml.el (mml-mode-map): Add key bindings for those functions.
+ (mml-menu): Simplify security menu entries. Suggested by Jesper
+ Harder <harder@myrealbox.com>.
+ (mml-attach-file, mml-attach-buffer, mml-attach-external): Goto
+ end of message if point is the headers of the message.
- * pgg-pgp.el (pgg-pgp-decrypt-region): Use passphrase cache.
+ * message.el (message-in-body-p): New function.
-2005-10-08 Simon Josefsson <jas@extundo.com>
+ * assistant.el: Autoload gnus-util and netrc.
- * pgg-parse.el (top-level): Don't require custom, it is
- autoloaded. (To sync with No Gnus.)
+ * mm-util.el (mm-charset-to-coding-system): Add allow-override.
+ Use `mm-charset-override-alist' only when decoding.
-2005-05-09 Georg C. F. Greve <greve@gnu.org> (tiny change)
+ * mm-bodies.el (mm-decode-body): Call
+ `mm-charset-to-coding-system' with allow-override argument.
- * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Fix PIN caching.
+ * gnus-art.el (gnus-mime-view-part-as-type-internal): Try to fetch
+ `filename' from Content-Disposition if Content-Type doesn't
+ provide `name'.
+ (gnus-mime-view-part-as-type): Set default instead of
+ initial-input.
-2005-10-08 Simon Josefsson <jas@extundo.com>
+2005-10-09 Daniel Brockman <daniel@brockman.se>
- * pgg-def.el (top-level): Don't require custom, it is
- autoloaded. (To sync with No Gnus.)
+ * format-spec.el (format-spec): Propagate text properties of % spec.
+
+2005-10-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-treat-predicate): Add `first'.
+
+2005-10-11 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-util.el (mm-charset-synonym-alist): Improve doc string.
+ (mm-charset-override-alist): New variable.
+ (mm-charset-to-coding-system): Use it.
+ (mm-codepage-setup): New helper function.
+ (mm-charset-eval-alist): New variable.
+ (mm-charset-to-coding-system): Use mm-charset-eval-alist. Warn
+ about unknown charsets.
2005-10-04 David Hansen <david.hansen@gmx.net>
@@ -2297,6 +4999,13 @@
2005-10-04 Reiner Steib <Reiner.Steib@gmx.de>
+ * mm-uu.el (mm-uu-verbatim-marks-extract, mm-uu-latex-extract):
+ Rename x-gnus-verbatim to x-verbatim.
+ (mm-uu-type-alist): Fix regexp for verbatim-marks.
+
+ * mm-decode.el (mm-automatic-display): Rename x-gnus-verbatim to
+ x-verbatim.
+
* mm-url.el (mm-url-predefined-programs): Add switches for curl.
* gnus-util.el (gnus-remove-duplicates): Remove.
@@ -2311,6 +5020,22 @@
* mm-util.el (mm-delete-duplicates): Use `delete-dups' if
available, else use implementation from `delete-dups'.
+ * message.el (message-insert-expires): New function.
+ (message-mode-map): Add key binding.
+ (message-mode-field-menu): Add menu entry.
+ (message-mode): Document it.
+ (message-make-expires-date): Use `message-make-date'.
+
+2005-10-04 Josh Huber <huber@alum.wpi.edu>
+
+ * message.el (message-make-expires-date): New function.
+
+2005-10-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * Makefile.in (list-installed-shadows): New entry.
+ (install): Use it.
+ (remove-installed-shadows): New entry.
+
2005-10-02 Katsumi Yamaoka <yamaoka@jpl.org>
* time-date.el: Autoload parse-time-string, XEmacs needs it.
@@ -2323,8 +5048,18 @@
(mm-viewer-completion-map, mm-viewer-completion-map):
Move initialization inside declaration.
+2005-09-29 Simon Josefsson <jas@extundo.com>
+
+ * spam.el: Load hashcash when compiling, to avoid warnings. Don't
+ autoload mail-check-payment.
+ (spam-check-hashcash): Define unconditionally, since hashcash.el
+ is part of Gnus now. Ignore errors from payment checking.
+
2005-09-28 Reiner Steib <Reiner.Steib@gmx.de>
+ * message.el (message-bold-region, message-unbold-region): Rename
+ from `bold-region' and `unbold-region'.
+
* message.el: Remove useless autoloads.
2005-09-28 Simon Josefsson <jas@extundo.com>
@@ -2343,8 +5078,20 @@
(mm-uu-diff-groups-regexp): Change default value.
(mm-uu-type-alist): Add doc string.
(mm-uu-configure): Add doc string. Make it interactive.
+ (mm-uu-tex-groups-regexp): New variable.
+ (mm-uu-latex-extract, mm-uu-latex-test): New functions.
+ (mm-uu-type-alist): Add LaTeX documents.
+ (mm-uu-verbatim-marks-extract): Use "text/x-gnus-verbatim" instead
+ of "text/verbatim".
(mm-uu-diff-groups-regexp): Fix missing quotes from previous commit.
+ * mm-decode.el (mm-automatic-display): Use "text/x-gnus-verbatim"
+ instead of "text/verbatim".
+
+ * message.el (message-mark-inserted-region)
+ (message-mark-insert-file): Use slrn style marks when called with
+ prefix argument.
+
2005-09-27 Simon Josefsson <jas@extundo.com>
* message.el (message-idna-to-ascii-rhs-1): Reformat.
@@ -2369,7 +5116,10 @@
* gnus-art.el (gnus-mime-display-single): Don't modify text if it
has been decoded.
- * mm-decode.el (mm-insert-part): Don't modify text if it has been
+ * mm-decode.el (mm-automatic-display): Add text/verbatim.
+ (mm-insert-part): Don't modify text if it has been decoded.
+
+ * mm-uu.el (mm-uu-verbatim-marks-extract): Say text has been
decoded.
* mm-view.el (mm-inline-text): Don't strip text props unless
@@ -2405,6 +5155,36 @@
* gnus-agent.el (gnus-agent-synchronize-flags): Explain why the
default value is nil.
+ * mm-uu.el (mm-uu-type-alist): Added slrn style verbatim-marks.
+ (mm-uu-verbatim-marks-extract): New function.
+ (mm-uu-extract): New face.
+ (mm-uu-copy-to-buffer): Use it.
+
+ * spam-report.el (spam-report-gmane-ham): Renamed from
+ `spam-report-gmane-unspam'.
+ (spam-report-gmane-internal): Renamed from `spam-report-gmane'.
+ Simplify use of UNSPAM argument. Fetch "X-Report-Unspam" header.
+
+ * spam.el (spam-report-gmane-spam, spam-report-gmane-ham):
+ Autoload.
+ (spam-report-gmane-unregister-routine): Renamed
+ `spam-report-gmane-unspam' to `spam-report-gmane-ham'.
+
+2005-09-21 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-use-gmane, spam-report-gmane-register-routine)
+ (spam-report-gmane-unregister-routine): Add support for gmane
+ unregistration.
+
+ * spam-report.el (spam-report-gmane-unspam)
+ (spam-report-gmane-spam): Add new wrappers around spam-report-gmane.
+ (spam-report-gmane): Change to take a single article and do unspam
+ registration.
+
+2005-09-19 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mm-url.el (mm-url-decode-entities): Fix regexp.
+
2005-09-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
* gnus-agent.el (gnus-agent-synchronize-flags): Switch the
@@ -2412,9 +5192,39 @@
switches to something else, then the function should be fixed not
be exceedingly slow.
+2005-09-20 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-start.el (gnus-activate-group): If the server is nil, don't
+ fail hard.
+
+ * spam-report.el: Add better Keywords line.
+
+ * spam.el: Add Maintainer and better Keywords line.
+
2005-09-19 Reiner Steib <Reiner.Steib@gmx.de>
- * mm-url.el (mm-url-decode-entities): Fix regexp.
+ * gnus-art.el (gnus-article-replace-part)
+ (gnus-mime-replace-part): New functions.
+ (gnus-mime-action-alist, gnus-mime-button-commands)
+ (gnus-mime-save-part-and-strip): Added file argument.
+ (gnus-article-part-wrapper): Added interactive argument.
+
+ * gnus-sum.el (gnus-summary-mime-map): Add
+ `gnus-article-replace-part'.
+
+2005-09-19 Didier Verna <didier@xemacs.org>
+
+ The nnml compaction feature:
+ * nnml.el (nnml-request-compact-group): New function.
+ * nnml.el (nnml-request-compact): New function.
+ * gnus-int.el (gnus-request-compact-group): New function.
+ * gnus-int.el (gnus-request-compact): New function.
+ * gnus-group.el (gnus-group-compact-group): New function.
+ * gnus-group.el (gnus-group-group-map): Bind it to 'G z'.
+ * gnus-group.el (gnus-group-make-menu-bar): Add an entry for it.
+ * gnus-srvr.el (gnus-server-compact-server): New function.
+ * gnus-srvr.el (gnus-server-mode-map): Bind it to 'z'.
+ * gnus-srvr.el (gnus-server-make-menu-bar): Add an entry for it.
2005-09-18 Deepak Goel <deego@gnufans.org>
@@ -2425,6 +5235,10 @@
* gnus.el (gnus-group-startup-message): Bind image-load-path.
+2005-09-15 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-fill-paragraph): Clarify docstring.
+
2005-09-14 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-mime-display-part): Protect against broken
@@ -2435,6 +5249,31 @@
* gnus-sum.el (gnus-summary-edit-article-done): Remove text props
before parsing header.
+2005-09-11 Jari Aalto <jari.aalto@cante.net>
+
+ * html2text.el: (html2text-replace-list): Add new entities.
+
+2005-09-11 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-alternative-emails): Improve docstring.
+ (message-setup-1): Call `message-use-alternative-email-as-from'
+ after `message-setup-hook' to give it precedence over posting
+ styles, etc.
+ (message-use-alternative-email-as-from): Add docstring. Remove
+ the original From header if present.
+
+ * nnml.el (nnml-compressed-files-size-threshold): New variable.
+ (nnml-save-mail): Use it.
+
+ * gnus-uu.el (gnus-uu-mark-series): Return number of marked
+ articles. Add new argument `silent'.
+ (gnus-uu-mark-all): Report the total number of marked articles.
+
+2005-09-10 Romain Francoise <romain@orebokech.com>
+
+ * gnus-uu.el (gnus-message-process-mark): Use gnus-message.
+ (gnus-uu-mark-series): Likewise.
+
2005-09-10 Reiner Steib <Reiner.Steib@gmx.de>
* spam-report.el (spam-report-gmane): Fix generation of spam
@@ -2453,13 +5292,16 @@
This is only used if `spam-report-gmane-use-article-number' is nil.
(spam-report-gmane-spam-header): Remove. Not used anymore.
+ * gnus-sum.el (gnus-thread-sort-by-recipient): New function to
+ make `gnus-summary-sort-by-recipient' work with threading.
+
* nnweb.el (nnweb-google-wash-article): Print a message if article
is not available.
2005-09-07 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
- * gnus-art.el (gnus-mime-display-single): Decode text/* parts
- content before displaying.
+ * gnus-art.el (gnus-mime-display-single): Revert 2004-10-07
+ change. Decode text/* parts content before displaying.
2005-09-06 Reiner Steib <Reiner.Steib@gmx.de>
@@ -2481,8 +5323,22 @@
* gnus-art.el (gnus-signature-limit)
(gnus-article-mime-part-function): Ditto.
+2005-09-05 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mml.el (mml-mode): Silence the byte compiler.
+
+ * gnus-art.el (gnus-article-jump-to-part): Redisplay the article
+ using `(sit-for 0)' before moving the point to the specified part;
+ skip unbuttonized parts.
+ (gnus-article-part-wrapper): Don't use save-window-excursion; don't
+ return to the summary window if gnus-auto-select-part is non-nil.
+
2005-09-04 Reiner Steib <Reiner.Steib@gmx.de>
+ * mml.el (mml-dnd-protocol-alist, mml-dnd-attach-options): New
+ variables.
+ (mml-dnd-attach-file, mml-mode): Use them.
+
* nnweb.el (nnweb-type-definition, nnweb-google-wash-article):
Make fetching article by MID work again for Google Groups. Added
FIXME concerning gnus-group-make-web-group.
@@ -2491,15 +5347,17 @@
Don't depend on Gnus by using mail-extract-address-components if
gnus-extract-address-components is not bound.
- * gnus.el (gnus-user-agent): Use list of symbols instead of
- symbols. Display full version number for (S)XEmacs. Optionally
- display (S)XEmacs codename.
+2005-09-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * gnus-util.el (gnus-emacs-version): Update for new
- `gnus-user-agent'.
+ * gnus-art.el (gnus-mime-display-security): Don't display the
+ signature, but only the signed part.
- * gnus-msg.el (gnus-extended-version): Make it possible to omit
- Gnus version.
+2005-09-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-sum.el (gnus-thread-hide-subtree): Doc fix.
+
+ * gnus-msg.el (gnus-inews-insert-gcc): Fix the mistake of using
+ list, not listp.
2005-09-02 Hrvoje Niksic <hniksic@xemacs.org>
@@ -2510,12 +5368,34 @@
De-canonicalize CRLF for all text content types, not just
text/plain.
-2005-09-02 Katsumi Yamaoka <yamaoka@jpl.org>
+2005-09-01 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-sum.el (gnus-thread-hide-subtree): Doc fix.
+ * gnus-art.el (gnus-article-part-wrapper): Error if there's no
+ valid article; point arrow and cursor at the MIME button.
- * gnus-msg.el (gnus-inews-insert-gcc): Fix the mistake of using
- list, not listp.
+2005-08-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-save-part-and-strip): Clarify prompt.
+ Suggested by Dan Christensen <jdc@uwo.ca>.
+
+ * mm-decode.el (mm-save-part): Enable change of prompt.
+
+2005-08-29 Jari Aalto <jari.aalto@cante.net>
+
+ * gnus-msg.el (gnus-inews-add-send-actions): Made
+ `message-post-method' lambda parameter ARG `&optional'.
+
+2005-08-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-mime-map): Added
+ gnus-article-save-part-and-strip, gnus-article-delete-part and
+ gnus-article-jump-to-part.
+
+ * gnus-art.el (gnus-article-edit-article): Added quiet argument.
+ (gnus-article-edit-part): Use it.
+ (gnus-article-part-wrapper): Added no-handle argument.
+ (gnus-article-save-part-and-strip, gnus-article-delete-part): New
+ functions.
2005-08-29 Romain Francoise <romain@orebokech.com>
@@ -2523,6 +5403,19 @@
docstring.
(gnus-face-from-file): Likewise.
+2005-08-29 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-mime-save-part-and-strip): Don't prompt.
+ (gnus-mime-delete-part): Don't prompt if `gnus-expert-user' is
+ non-nil.
+ (gnus-auto-select-part): New variable.
+ (gnus-article-jump-to-part): New function.
+ (gnus-article-edit-part, gnus-mime-save-part-and-strip)
+ (gnus-mime-delete-part): Allow selecting specified part after
+ deleting or stripping parts.
+ (gnus-article-jump-to-part): Don't use `read-number'. Use last
+ part if argument is bogus.
+
2005-08-31 Juanma Barranquero <lekktu@gmail.com>
* gnus-art.el (w3m-minor-mode-map):
@@ -2569,22 +5462,40 @@
(pgg-insert-url-with-w3): Require url, to get
url-insert-file-contents regardless of where it is defined.
+2005-08-13 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-cite-original-1): New function.
+ (message-cite-original): Use it.
+ (message-cite-original-without-signature): Ditto.
+
+2005-08-08 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-yank-empty-prefix): New variable.
+ (message-indent-citation): Use it.
+ (message-cite-original-without-signature): Respect X-No-Archive.
+
2005-08-08 Simon Josefsson <jas@extundo.com>
* pgg.el: Autoload url-insert-file-contents instead of loading
w3/url.
(pgg-insert-url-with-w3): Don't load url here.
+2005-08-07 Jesper Harder <harder@phys.au.dk>
+
+ * message.el (message-kill-to-signature): Don't insert newline at
+ bol.
+ (message-newline-and-reformat): Bind fill-paragraph-function to nil.
+
+2005-08-06 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-user-fqdn): Fix typo in docstring.
+
2005-08-05 Daiki Ueno <ueno@unixuser.org>
* mml2015.el (mml2015-pgg-sign): Make sure micalg is correct.
* pgg-parse.el (pgg-parse-hash-algorithm-alist): Add SHA-2.
-2005-08-06 Romain Francoise <romain@orebokech.com>
-
- * message.el: Fix typo in docstring.
-
2005-08-05 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-bodies.el (mm-encode-body): Use coding system rather than
@@ -2593,12 +5504,6 @@
* mm-util.el (mm-find-mime-charset-region): Attempt to reduce the
number of charsets if utf-8 is available (XEmacs).
-2005-08-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
-
- * gnus-art.el (article-unsplit-urls): Don't anchor urls to the
- start of the lines.
- (gnus-picon-databases): Add /usr/share/picons.
-
2005-08-04 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-art.el (gnus-button-valid-localpart-regexp): New variable
@@ -2608,9 +5513,6 @@
for news:localpart@domain buttons.
(gnus-button-ctan-directory-regexp): Update.
- * message.el (message-kill-buffer): Raise the current frame.
- (message-bury): Use `window-dedicated-p'.
-
2005-08-02 Katsumi Yamaoka <yamaoka@jpl.org>
* sieve-manage.el (sieve-manage-interactive-login): Use
@@ -2668,9 +5570,8 @@
(gnus-article-beginning-of-window): New macro.
(gnus-article-next-page-1): Use it.
(gnus-article-prev-page): Ditto.
- (gnus-mime-save-part-and-strip): Use insert-buffer-substring
- instead of insert-buffer.
- (gnus-mime-delete-part): Ditto.
+ (gnus-article-edit-part): Use insert-buffer-substring instead of
+ insert-buffer.
(gnus-article-edit-exit): Ditto.
* gnus-util.el (gnus-beginning-of-window): Remove.
@@ -2682,18 +5583,44 @@
to have the url package without w3. Reported by Daiki Ueno
<ueno@unixuser.org> and Luigi Panzeri <matley@muppetslab.org>.
-2005-07-21 Stefan Monnier <monnier@iro.umontreal.ca>
+2005-07-20 Didier Verna <didier@xemacs.org>
- * mml.el (mml-minibuffer-read-disposition): Don't use inline by default
- for text/rtf. Display default in prompt. Pass default for M-n.
+ * gnus-diary.el: Remove the description comment (nndiary is now
+ properly documented in the Gnus manual).
+ Fix the spelling of "Back End".
+ * nndiary.el: Ditto.
+ Fix the copyright notice.
- * mm-uu.el (mm-uu-copy-to-buffer): Use with-current-buffer.
+2005-07-18 Romain Francoise <romain@orebokech.com>
+
+ * gnus-sum.el (gnus-summary-to-prefix,
+ gnus-summary-newsgroup-prefix): New variables.
+ (gnus-summary-from-or-to-or-newsgroups): Use them.
+
+2005-07-17 Romain Francoise <romain@orebokech.com>
+
+ * mml2015.el (mml2015-clean-buffer): Prefix buffer name with a
+ space as it's generally not especially interesting to the user.
2005-07-16 Romain Francoise <romain@orebokech.com>
+ * nnfolder.el (nnfolder-save-buffer): Bind `copyright-update' to
+ nil to avoid prompting and file modification if one of the
+ messages at the top of the nnfolder file contains a copyright
+ notice.
+ Update copyright notice.
+
* gnus-uu.el (gnus-uu-save-article): Use `message-make-date'
instead of `current-time-string' as the latter creates a time
string that is not RFC 2822 compliant (it lacks the zone).
+ Update copyright notice.
+
+2005-07-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mml.el (mml-minibuffer-read-disposition): Don't use inline by default
+ for text/rtf. Display default in prompt. Pass default for M-n.
+
+ * mm-uu.el (mm-uu-copy-to-buffer): Use with-current-buffer.
2005-07-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -2710,10 +5637,22 @@
* gnus-util.el (gnus-beginning-of-window): New function.
(gnus-end-of-window): New function.
+2005-07-14 Hiroshi Fujishima <hiroshi.fujishima@gmail.com> (tiny change)
+
+ * gnus-score.el (gnus-score-edit-all-score): Set
+ gnus-score-edit-exit-function to gnus-score-edit-done and call
+ gnus-message.
+
+2005-07-14 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-button-mailto): Remove
+ save-selected-window-window hackery because it relies on
+ save-selected-window internals.
+
2005-07-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-salt.el (gnus-pick-mode): Remove the 5th arg of
- gnus-add-minor-mode.
+ add-minor-mode.
(gnus-binary-mode): Ditto.
* gnus-topic.el (gnus-topic-mode): Ditto.
@@ -2751,7 +5690,7 @@
2005-06-30 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (article-display-face): Correct the position in
- which Faces are inserted; use dolist.
+ which Faces are inserted.
2005-06-29 Didier Verna <didier@xemacs.org>
@@ -2761,13 +5700,22 @@
2005-06-29 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-nocem.el (gnus-nocem-verifyer): Default to pgg-verify.
+ (gnus-fill-real-hashtb): Use hash table instead of obarray.
(gnus-nocem-check-article): Fetch the Type header.
(gnus-nocem-message-wanted-p): Fix the way to examine types.
(gnus-nocem-verify-issuer): Use functionp instead of fboundp.
- (gnus-nocem-enter-article): Make sure gnus-nocem-hashtb is initialized.
+ (gnus-nocem-enter-article): Use hash tables rather than obarrays;
+ make sure gnus-nocem-hashtb is initialized.
+ (gnus-nocem-alist-to-hashtb): Use hash table instead of obarray.
+ (gnus-nocem-unwanted-article-p): Ditto.
* pgg.el (pgg-verify): Return the verification result.
+2005-06-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-mime-copy-part): Check whether coding-system
+ is ascii.
+
2005-06-24 Juanma Barranquero <lekktu@gmail.com>
* gnus-art.el (gnus-article-mode): Set `nobreak-char-display', not
@@ -2791,8 +5739,18 @@
* mm-extern.el (mm-extern-local-file, mm-inline-external-body):
* pop3.el (pop3-user): Don't use `format' on `error' arguments.
+2005-06-16 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * smime.el (smime-cert-by-ldap-1): Detect PEM format without
+ header by looking for magic "MII" at the beginnig.
+
2005-06-16 Miles Bader <miles@gnu.org>
+ * assistant.el (assistant-field): Remove "-face" suffix from face name.
+ (assistant-field-face): New backward-compatibility alias for renamed
+ face.
+ (assistant-render-text): Use renamed assistant-field face.
+
* spam.el (spam): Remove "-face" suffix from face name.
(spam-face): New backward-compatibility alias for renamed face.
(spam-face, spam-initialize): Use renamed spam face.
@@ -2927,6 +5885,11 @@
* mm-view.el (mm-inline-text): Turn off adaptive-fill-mode while
executing enriched-decode.
+2005-06-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-find-buffer-file-coding-system): Don't examine
+ charset of tar files.
+
2005-06-04 Luc Teirlinck <teirllm@auburn.edu>
* gnus-art.el (article-update-date-lapsed): Use `save-match-data'.
@@ -2940,13 +5903,23 @@
* gnus-art.el (gnus-emphasis-alist): Disable the strikethru thingy.
+2005-06-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * pop3.el (pop3-apop): Run md5 in the binary mode.
+
+ * starttls.el (starttls-set-process-query-on-exit-flag):
+ Use eval-and-compile.
+
+2005-05-31 Simon Josefsson <jas@extundo.com>
+
+ * smime.el (smime-replace-in-string): Define.
+ (smime-cert-by-ldap-1): Use it.
+
2005-05-31 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (article-display-x-face): Replace
process-kill-without-query by gnus-set-process-query-on-exit-flag.
- * gnus-group.el: Bind gnus-cache-active-hashtb when compiling.
-
* gnus-util.el (gnus-set-process-query-on-exit-flag): Alias to
set-process-query-on-exit-flag or process-kill-without-query.
@@ -2975,21 +5948,30 @@
(nntp-open-ssl-stream): Ditto.
(nntp-open-tls-stream): Ditto.
-2005-05-31 Simon Josefsson <jas@extundo.com>
+ * starttls.el (starttls-set-process-query-on-exit-flag): Alias to
+ set-process-query-on-exit-flag or process-kill-without-query.
+ (starttls-open-stream-gnutls): Use it instead of
+ process-kill-without-query.
+ (starttls-open-stream): Ditto.
- * imap.el (imap-ssl-open): Use imap-process-connection-type,
- instead of hard coding to nil.
+2005-05-31 Ulf Stegemann <ulf@zeitform.de> (tiny change)
-2005-05-31 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * smime.el (smime-cert-by-ldap-1): Don't use
+ replace-regexp-in-string.
- * gnus-group.el: Require gnus-sum and autoload functions to
- resolve warnings when gnus-group.el compiled alone.
+2005-05-31 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * smime-ldap.el (smime-ldap-search): Add compatibility for XEmacs.
+
+ * smime.el (smime-cert-by-ldap-1): Handle certificates distributed
+ in PEM format. Adjust to the XEmacs compability.
2005-05-30 Reiner Steib <Reiner.Steib@gmx.de>
+ * encrypt.el (encrypt-xor-process-buffer): Replace `string-to-int'
+ by `string-to-number'.
* gnus-agent.el (gnus-agent-regenerate-group)
- (gnus-agent-fetch-articles): Replace `string-to-int' by
- `string-to-number'.
+ (gnus-agent-fetch-articles): Ditto.
* gnus-art.el (gnus-button-fetch-group): Ditto.
* gnus-cache.el (gnus-cache-generate-active)
(gnus-cache-articles-in-group): Ditto.
@@ -3084,7 +6066,9 @@
* dig.el (dig): Add :group.
- * gnus-art.el (gnus-inhibit-mime-unbuttonizing): Add :group.
+ * dns-mode.el (dns-mode): Add :group.
+
+ * encrypt.el (encrypt): Add :group.
* gnus-cite.el (gnus-cite-attribution-face): Add :group.
(gnus-cite-face-1, gnus-cite-face-2, gnus-cite-face-3): Ditto.
@@ -3122,8 +6106,20 @@
(gnus-summary-high-read-face, gnus-summary-low-read-face): Ditto.
(gnus-summary-normal-read-face, gnus-splash-face): Ditto.
+ * hashcash.el (hashcash): New custom group.
+ (hashcash-default-payment): Add :group.
+ (hashcash-payment-alist): Ditto.
+ (hashcash-default-accept-payment): Ditto.
+ (hashcash-accept-resources): Ditto.
+ (hashcash-path): Ditto.
+ (hashcash-extra-generate-parameters): Ditto.
+ (hashcash-double-spend-database): Ditto.
+ (hashcash-in-news): Ditto.
+
* message.el (message-minibuffer-local-map): Add :group.
+ * netrc.el (netrc): Add :group.
+
* sieve-manage.el (sieve-manage-log): Add :group.
(sieve-manage-default-user): Diito.
(sieve-manage-server-eol, sieve-manage-client-eol): Ditto.
@@ -3143,6 +6139,17 @@
* spam.el (spam, spam-face): Add :group.
+2005-05-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nntp.el (nntp-next-result-arrived-p): Some news servers may
+ return \n.\n.\n at the end of articles. Protect against that.
+ (nntp-with-open-group): Allow debugging.
+
+ * nnheader.el (mail-header-set-extra): Make into a function
+ because I just could't understand how to quote the list properly.
+
+ * dns.el (query-dns-cached): New function.
+
2005-05-26 Lute Kamstra <lute@gnu.org>
* score-mode.el (gnus-score-mode): Use run-mode-hooks.
@@ -3151,7 +6158,10 @@
* gnus-art.el: Don't autoload mail-extract-address-components.
- * gnus.el: Use eval-and-compile to autoload message-y-or-n-p.
+ * gnus.el: Remove duplicated autoload for message-y-or-n-p; use
+ eval-and-compile to evaluate it.
+
+ * hashcash.el: Don't autoload executable-find.
* nndb.el: Don't declare the nndb back end two or more times; don't
autoload news-reply-mode, news-setup, cancel-timer and telnet.
@@ -3159,54 +6169,76 @@
* nntp.el: Autoload format-spec instead of format; use
eval-and-compile to evaluate autoload forms.
- * spam-report.el (spam-report-process-queue): Use gnus-point-at-eol.
+2005-05-09 Georg C. F. Greve <greve@gnu.org> (tiny change)
+
+ * pgg-gpg.el (pgg-gpg-possibly-cache-passphrase): Fix PIN caching.
+
+2005-05-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump version.
+
+2005-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+ * gnus.el: No Gnus v0.3 is released.
2005-04-28 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-art.el (gnus-article-edit-part): Disable undo.
+
+2005-04-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-date-ut): Don't delete X-Sent header when
+ gnus-article-date-lapsed-new-header is t if date timer is active;
+ skip headers in which the original date value is empty.
+ (gnus-article-save-original-date): Redefine it as a macro.
+ (gnus-display-mime): Use it.
+
+2005-04-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
* gnus-art.el (article-date-ut): Support converting date in
forwarded parts as well.
- (gnus-article-save-original-date): New macro.
+ (gnus-article-save-original-date): New function.
(gnus-display-mime): Use it.
-2005-04-28 David Hansen <david.hansen@physik.fu-berlin.de>
+2005-04-22 David Hansen <david.hansen@physik.fu-berlin.de>
* nnrss.el (nnrss-check-group, nnrss-request-article): Support the
enclosure element of <item>.
-2005-04-24 Teodor Zlatanov <tzz@lifelogs.com>
+2005-04-21 Reiner Steib <Reiner.Steib@gmx.de>
- * spam-report.el (spam-report-unplug-agent)
- (spam-report-plug-agent, spam-report-deagentize)
- (spam-report-agentize, spam-report-url-ping-temp-agent-function):
- support for the Agent in spam-report: when unplugged, report to a
- file; when plugged, submit all the requests.
- [Added missing offline functionality from trunk.]
+ * message.el (message-kill-buffer-query): Renamed from
+ `message-kill-buffer-query-if-modified'. Added :version.
-2005-04-24 Reiner Steib <Reiner.Steib@gmx.de>
+2005-04-19 Katsumi Yamaoka <yamaoka@jpl.org>
- * spam-report.el (spam-report-url-to-file)
- (spam-report-requests-file): New function and variable for offline
- reporting.
- (spam-report-url-ping-function): Add `spam-report-url-to-file'
- and user defined function.
- (spam-report-process-queue): New function.
- Process requests from `spam-report-requests-file'.
- (spam-report-url-ping-mm-url): Autoload.
- [Added missing offline functionality from trunk.]
+ * mml.el (mml-preview): Bind gnus-message-buffer while setting the
+ window layout.
+
+2005-04-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mml.el: Autoload dnd when compiling.
+
+2005-04-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mml.el (mml-mode, mml-dnd-attach-file): Use dnd-* instead of
+ x-dnd-*.
2005-04-18 Katsumi Yamaoka <yamaoka@jpl.org>
* qp.el (quoted-printable-encode-region): Save excursion.
+2005-04-14 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * message.el (message-kill-buffer-query-if-modified): Add new variable
+ so the user can kill a modified message buffer quickly.
+ (message-kill-buffer): Use it.
+
2005-04-13 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-mime-inline-part): Use mm-string-to-multibyte.
* qp.el (quoted-printable-encode-region): Use mm-string-to-multibyte.
-2005-04-13 Miles Bader <miles@gnu.org>
-
- * mm-util.el (mm-string-to-multibyte): Use Gnus trunk definition.
-
2005-04-12 Katsumi Yamaoka <yamaoka@jpl.org>
* nnrss.el (nnrss-node-text): Replace CRLFs (which might be
@@ -3214,19 +6246,43 @@
2005-04-11 Lute Kamstra <lute@gnu.org>
- * message.el (message-make-date): Handle byte-compiler warnings
+ * nnimap.el (nnimap-date-days-ago): Handle byte-compiler warnings
differently.
- * nnimap.el (nnimap-date-days-ago): Ditto.
2005-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * mm-util.el (mm-string-to-multibyte): New function.
- (mm-detect-coding-region): Typo.
+ * mm-util.el (mm-detect-coding-region): Typo.
2005-04-11 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-article-read-summary-keys): Fix misplaced parens.
+2005-04-06 D Goel <deego@gnufans.org>
+
+ * spam-stat.el (spam-stat-score-buffer): Add a call to a
+ user-function allow user modifications of the scores.
+ (spam-stat-score-buffer-user): New function, to allow
+ user-computed modifications to the score.
+ (spam-stat-score-buffer-user-functions): list of additional
+ scoring functions
+ (spam-stat-error-holder): global temporary error holder
+ (spam-stat-split-fancy): use the new `spam-stat-error-holder'
+ variable
+
+2005-04-06 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-clean-empty-function)
+ (gnus-registry-trim, gnus-registry-fetch-groups)
+ (gnus-registry-delete-group): Groups that match
+ `gnus-registry-ignored-groups' are removed from the registry
+ entries, not just ignored for splitting. This helps clean up the
+ registry. Also, `gnus-registry-fetch-groups' is a convenient way
+ to get all the groups a message ID is in.
+
+ * spam-stat.el (spam-stat-split-fancy-spam-threshold)
+ (spam-stat-split-fancy): Change "threshhold" to "threshold"
+ (spam-stat-score-buffer-user-functions): Add :number custom type.
+
2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-util.el (mm-coding-system-p): Don't return binary for the nil
@@ -3238,132 +6294,19 @@
failed.
(nnrss-get-encoding): Return a compatible encoding according to
nnrss-compatible-encoding-alist.
- (nnrss-opml-export): Use dolist.
(nnrss-find-el): Use consp instead of listp.
- (nnrss-order-hrefs): Use dolist.
-
-2005-04-06 Arne J,Ax(Brgensen <arne@arnested.dk>
-
- * nnrss.el (nnrss-verbose): Remove.
- (nnrss-request-group): Use `nnheader-message' instead.
-
-2005-04-06 Mark Plaksin <happy@usg.edu> (tiny change)
-
- * nnrss.el (nnrss-verbose): New variable.
- (nnrss-request-group): Make it say nnrss is requesting a group.
+ (nnrss-opml-export, nnrss-order-hrefs, nnrss-find-el): Use dolist.
2005-04-06 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-agent.el (gnus-agent-group-path): Decode group name.
- (gnus-agent-group-pathname): Ditto.
-
- * gnus-cache.el (gnus-cache-file-name): Decode group name.
-
- * gnus-group.el (gnus-group-line-format-alist): Use decoded group
- name for only %g and %c.
- (gnus-group-insert-group-line): Bind gnus-tmp-decoded-group
- instead of gnus-tmp-group to decoded group name.
- (gnus-group-make-group): Decode group name.
- (gnus-group-delete-group): Ditto.
- (gnus-group-make-rss-group): Exclude `/'s from group names;
- register the group data after opening the nnrss group; unify
- non-ASCII group names; encode group name.
- (gnus-group-catchup-current): Decode group name.
- (gnus-group-expire-articles-1): Ditto.
- (gnus-group-set-current-level): Ditto.
- (gnus-group-kill-group): Ditto.
-
- * gnus-spec.el (gnus-update-format-specifications): Flush the
- group format spec cache if it doesn't support decoded group names.
-
- * mm-url.el (mm-url-predefined-programs): Add --silent arg to curl.
-
- * nnrss.el: Require rfc2047 and mml.
- (nnrss-file-coding-system): New variable.
- (nnrss-format-string): Redefine it as an inline function.
- (nnrss-decode-group-name): New function.
- (nnrss-string-as-multibyte): Remove.
- (nnrss-retrieve-headers): Decode group name; don't use
- nnrss-format-string.
- (nnrss-request-group): Decode group name.
- (nnrss-request-article): Decode group name; allow a Message-ID as
- well as an article number; don't use nnrss-format-string; encode a
- Message-ID string which may contain non-ASCII characters; use
- mml-to-mime to compose a MIME article; use search-forward instead
- of re-search-forward.
- (nnrss-request-expire-articles): Decode group name.
- (nnrss-request-delete-group): Delete entries in nnrss-group-alist
- as well; decode group name.
- (nnrss-get-encoding): Fix regexp.
- (nnrss-fetch): Clarify error message.
- (nnrss-read-server-data): Use insert-file-contents instead of load;
- bind file-name-coding-system; use multibyte buffer.
- (nnrss-save-server-data): Insert newline; bind
- coding-system-for-write to the value of nnrss-file-coding-system;
- bind file-name-coding-system; add coding cookie.
- (nnrss-read-group-data): Use insert-file-contents instead of load;
- bind file-name-coding-system; use multibyte buffer.
- (nnrss-save-group-data): Bind coding-system-for-write to the
- value of nnrss-file-coding-system; bind file-name-coding-system.
- (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string;
- make it work with non-ASCII text.
- (nnrss-opml-export): Use mm-set-buffer-file-coding-system instead
- of set-buffer-file-coding-system.
- (nnrss-find-el): Check carefully whether there's a list of string
- which old xml.el may return rather than a string; make it work
- with old xml.el as well.
-
-2005-04-06 Tsuyoshi AKIHO <akiho@kawachi.zaq.ne.jp>
-
- * gnus-sum.el (gnus-summary-walk-group-buffer): Decode group name.
-
- * nnrss.el (nnrss-get-encoding): New function.
- (nnrss-fetch): Use unibyte buffer initially; bind
- coding-system-for-read while performing mm-url-insert; remove ^Ms;
- decode contents according to the encoding attribute.
- (nnrss-save-group-data): Add coding cookie.
- (nnrss-mime-encode-string): New function.
- (nnrss-check-group): Use it to encode subject and author.
-
-2005-04-06 Maciek Pasternacki <maciekp@japhy.fnord.org> (tiny change)
-
- * nnrss.el (nnrss-fetch): Signal an error if w3-parse-buffer also
- failed.
-
-2005-04-06 Joakim Verona <joakim@verona.se> (tiny change)
-
- * nnrss.el (nnrss-read-group-data): Fix off-by-one error.
-
-2005-04-06 Jesper Harder <harder@ifa.au.dk>
-
- * mm-util.el (mm-subst-char-in-string): Support inplace.
-
- * nnrss.el: Pedantic docstring and whitespace fixes (courtesy of
- checkdoc.el).
- (nnrss-request-article): Cleanup.
- (nnrss-request-delete-group): Use nnrss-make-filename.
- (nnrss-read-server-data): Use nnrss-make-filename; use load.
- (nnrss-save-server-data): Use nnrss-make-filename; use gnus-prin1.
- (nnrss-read-group-data): hash on description if link is missing;
- use nnrss-make-filename; use load.
- (nnrss-save-group-data): Use nnrss-make-filename; use gnus-prin1.
- (nnrss-make-filename): New function.
- (nnrss-close): New function.
- (nnrss-check-group): Hash on description if link is missing.
- (nnrss-get-namespace-prefix): Use string= to compare strings!
- Reported by David D. Smith <davidsmith@acm.org>.
- (nnrss-opml-export): Turn on sgml-mode.
-
-2005-04-06 Mark A. Hershberger <mah@everybody.org>
-
- * nnrss.el (nnrss-opml-import, nnrss-opml-export): New functions.
+ * time-date.el (time-to-seconds): Don't use the #xhhhh syntax
+ which Emacs 20 doesn't support.
+ (seconds-to-time, days-to-time, time-subtract, time-add): Ditto.
2005-04-04 Reiner Steib <Reiner.Steib@gmx.de>
- * message.el (message-make-date): Add defvars in order to silence
- the byte compiler inside the defun.
-
- * nnimap.el (nnimap-date-days-ago): Ditto.
+ * nnimap.el (nnimap-date-days-ago): Add defvars in order to
+ silence the byte compiler inside the defun
* gnus-demon.el (parse-time-string): Add autoload.
@@ -3373,84 +6316,13 @@
* nnultimate.el (parse-time): Require for `parse-time-string'.
-2005-04-03 Katsumi Yamaoka <yamaoka@jpl.org>
+2005-03-31 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-sum.el (gnus-summary-make-menu-bar): Avoid the
- "Unrecognized menu descriptor" error in XEmacs.
+ * gnus-art.el (gnus-copy-article-ignored-headers): Update :version.
-2005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-score.el (gnus-adaptive-pretty-print): Ditto.
- * message.el (message-resend): Bind rfc2047-encode-encoded-words.
-
- * mm-util.el (mm-replace-in-string): New function.
- (mm-xemacs-find-mime-charset-1): Ignore errors while loading
- latin-unity, which cannot be used with XEmacs 21.1.
-
- * rfc2047.el (rfc2047-encode-function-alist): Rename from
- rfc2047-encoding-function-alist in order to avoid conflicting with
- the old version.
- (rfc2047-encode-message-header): Remove useless goto-char.
- (rfc2047-encodable-p): Don't move point.
- (rfc2047-syntax-table): Treat `(' and `)' as is.
- (rfc2047-encode-region): Concatenate words containing non-ASCII
- characters in structured fields; don't encode space-delimited
- ASCII words even in unstructured fields; don't break words at
- char-category boundaries; encode encoded words in structured
- fields; treat text within parentheses as special; show the
- original text when error has occurred; move point to the end of
- the region after encoding, suggested by IRIE Tetsuya
- <irie@t.email.ne.jp>; treat backslash-quoted characters as
- non-special; check carefully whether to encode special characters;
- fix some kind of misconfigured headers; signal a real error if
- debug-on-quit or debug-on-error is non-nil; don't infloop,
- suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume
- the close parenthesis may be included in the encoded word; encode
- bogus delimiters.
- (rfc2047-encode-string): Use mm-with-multibyte-buffer.
- (rfc2047-encode-max-chars): New variable.
- (rfc2047-encode-1): New function.
- (rfc2047-encode): Use it; encode text so that it occupies the
- maximum width within 76-column; work correctly on Q encoding for
- iso-2022-* charsets; fold the line before encoding; don't append a
- space if the encoded word includes close parenthesis.
- (rfc2047-fold-region): Use existing whitespace for LWSP; make it
- sure not to break a line just after the header name.
- (rfc2047-b-encode-region): Remove.
- (rfc2047-b-encode-string): New function.
- (rfc2047-q-encode-region): Remove.
- (rfc2047-q-encode-string): New function.
- (rfc2047-encode-parameter): New function.
- (rfc2047-encoded-word-regexp): Don't use shy group.
- (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change.
- (rfc2047-parse-and-decode): Ditto.
- (rfc2047-decode): Treat the ascii coding-system as raw-text by default.
-
-2005-03-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
-
- * rfc2047.el (rfc2047-encode-encoded-words): New variable.
- (rfc2047-field-value): Strip props.
- (rfc2047-encode-message-header): Disable header folding -- not
- all headers can be folded, and this should be done by the message
- composition mode. Probably. I think.
- (rfc2047-encodable-p): Say that =? needs encoding.
- (rfc2047-encode-region): Encode =? strings.
-
-2005-03-25 Jesper Harder <harder@ifa.au.dk>
-
- * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
- language tags; remove unnecessary '+'. Reported by Stefan Wiens
- <s.wi@gmx.net>.
- (rfc2047-decode-string): Don't cons a string unnecessarily.
- (rfc2047-parse-and-decode, rfc2047-decode): Use a character for
- the encoding to avoid consing a string.
- (rfc2047-decode): Use mm-subst-char-in-string instead of
- mm-replace-chars-in-string.
-
-2005-03-25 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
-
- * rfc2047.el (rfc2047-encode): Use uppercase letters to specify
- encodings of MIME-encoded words, in order to improve
- interoperability with several broken MUAs.
+ * smime.el (smime-ldap-host-list): Add :version.
2005-03-21 Reiner Steib <Reiner.Steib@gmx.de>
@@ -3496,22 +6368,13 @@
2005-03-13 Andrey Slusar <anrays@gmail.com> (tiny change)
- * gnus.el: Don't try and mark `gnus-agent-save-groups' as an
- autoloaded function.
-
-2005-03-13 Steve Youngs <steve@sxemacs.org>
-
- * mm-url.el: Require timer-funcs at compile time when in XEmacs
- for `with-timeout'.
-
- * mail-source.el: Require timer-funcs at compile time when in
+ * gnus-async.el: Require timer-funcs at compile time when in
XEmacs for `run-with-idle-timer'.
- * gnus-async.el: Ditto.
-
-2005-03-16 Lute Kamstra <lute@gnu.org>
+2005-03-13 Andrey Slusar <anrays@gmail.com> (tiny change)
- * message.el (message-make-date): Require parse-time.
+ * gnus.el: Don't try and mark `gnus-agent-save-groups' as an
+ autoloaded function.
2005-03-10 Stefan Monnier <monnier@iro.umontreal.ca>
@@ -3521,12 +6384,45 @@
* nnimap.el (nnimap-retrieve-headers-from-server): Fix off-by-one flaw.
+2005-03-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-confirm-mail-reply-to-news): Add
+ gnus-expert-user to default.
+
+2005-03-08 Juergen Kreileder <jk@blackdown.de> (tiny change)
+
+ * nnimap.el (nnimap-open-server): Ditto.
+
+ * imap.el (imap-authenticate): Fix typo.
+
2005-03-08 Bjorn Solberg <bjorn_ding@hekneby.org> (tiny change)
* nnimap.el (nnimap-retrieve-headers-from-server): Sort NOV
buffer (since IMAP server might return FETCH response out of
order, and the nntp buffer must be sorted).
+2005-03-06 Kevin Greiner <kevin.greiner@compsol.cc>
+
+ * gnus-start.el (gnus-convert-old-newsrc): Fixed numeric
+ comparison on string.
+
+ * gnus-agent.el (gnus-agent-long-article,
+ gnus-agent-short-article, gnus-agent-score): Renamed category
+ keywords to match gnus-cus.
+ (gnus-agent-summary-fetch-series): Modified to protect against
+ gnus-agent-summary-fetch-group clearing processable flags.
+ (gnus-agent-synchronize-group-flags): Update live group buffer as
+ synchronization may occur due to the user toggle the plugged
+ status.
+ (gnus-agent-fetch-group-1): Clear downloadable flag when article
+ successfully downloaded.
+ (gnus-agent-expire-group-1): Avoid using markers when the overview
+ is in ascending order; greatly improves performance.
+ (gnus-agent-regenerate-group): Use
+ gnus-agent-synchronize-group-flags to reset read status in both
+ gnus and server.
+ (gnus-agent-update-files-total-fetched-for): Fixed initial size.
+
2005-03-04 Reiner Steib <Reiner.Steib@gmx.de>
* message.el: Don't autoload former message-utils variables.
@@ -3547,12 +6443,59 @@
* nnweb.el (nnweb-type-definition): Use groups.google.de instead
of broken groups(-beta).google.com.
+2005-03-03 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-sum.el (gnus-summary-move-article): Pass move-is-internal
+ parameter to invoked gnus-request-move-article; remove the
+ redundant gnus-sum-hint-move-is-internal variable; apply the marks
+ all at once instead of once per article.
+ (gnus-summary-remove-process-mark): Accept a list of articles as
+ well as a single article for processing.
+
+ * gnus-int.el (gnus-request-move-article): Add move-is-internal
+ parameter.
+
+ * nnml.el (nnml-request-move-article): Add move-is-internal parameter.
+
+ * nnmh.el (nnmh-request-move-article): Add move-is-internal parameter.
+
+ * nnmbox.el (nnmbox-request-move-article): Add move-is-internal
+ parameter.
+
+ * nnmaildir.el (nnmaildir-request-move-article): Add move-is-internal
+ parameter.
+
+ * nnimap.el (nnimap-request-move-article): Add move-is-internal
+ parameter and remove the gnus-sum-hint-move-is-internal variable.
+
+ * nnfolder.el (nnfolder-request-move-article): Add move-is-internal
+ parameter.
+
+ * nndraft.el (nndraft-request-move-article): Add move-is-internal
+ parameter.
+
+ * nndiary.el (nndiary-request-move-article): Add move-is-internal
+ parameter.
+
+ * nndb.el (nndb-request-move-article): Add move-is-internal parameter.
+
+ * nnbabyl.el (nnbabyl-request-move-article): Add move-is-internal
+ parameter.
+
+ * nnagent.el (nnagent-request-move-article): Add move-is-internal
+ parameter.
+
2005-03-01 Stefan Monnier <monnier@iro.umontreal.ca>
* gnus-sum.el (gnus-summary-exit): Undo last change and fix it in
a more conservative way.
-2005-02-27 Arne J,Ax(Brgensen <arne@arnested.dk>
+2005-02-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * gnus-sum.el (gnus-summary-exit): Move point after displaying the
+ buffer, so it moves the window's cursor.
+
+2005-02-26 Arne J,Ax(Brgensen <arne@arnested.dk>
* mm-decode.el (mm-dissect-buffer): Pass the from field on to
`mm-dissect-multipart' and receive the from field as an (optional)
@@ -3561,10 +6504,16 @@
pass it on when we call `mm-dissect-buffer' on MIME parts.
Fixes verification/decryption of signed/encrypted MIME parts.
-2005-02-26 Stefan Monnier <monnier@iro.umontreal.ca>
+2005-02-25 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-sum.el (gnus-summary-exit): Move point after displaying the
- buffer, so it moves the window's cursor.
+ * gnus-sum.el (gnus-summary-move-article): Set
+ gnus-sum-hint-move-is-internal for gnus-request-move-article and
+ whatever it calls (right now, only nnimap-request-move article
+ respects it).
+
+ * nnimap.el (nnimap-request-move-article): When
+ gnus-sum-hint-move-is-internal is set, don't do the extra
+ nnimap-request-article.
2005-02-24 Reiner Steib <Reiner.Steib@gmx.de>
@@ -3579,12 +6528,43 @@
* gnus-group.el (gnus-group-clear-data): Mention process/prefix in
doc string.
+2005-02-22 Simon Josefsson <jas@extundo.com>
+
+ * encrypt.el (encrypt-password-cache-expiry): Remove (use
+ `password-cache-expiry' instead). Reported by Arne J,Ax(Brgensen
+ <arne@arnested.dk>.
+ (encrypt): Add password-cache and password-cache-expiry as group
+ members.
+
2005-02-22 Arne J,Ax(Brgensen <arne@arnested.dk>
- * smime.el (smime-sign-buffer): Signal an error if
- `smime-sign-region' fails.
+ * smime.el (smime-ldap-host-list): Doc fix.
+ (smime-ask-passphrase): Use `password-read-and-add' to read (and
+ cache) password.
+ (smime-sign-region): Use it.
+ (smime-decrypt-region): Use it.
+ (smime-sign-buffer): Signal an error if `smime-sign-region' fails.
(smime-encrypt-buffer): Signal an error if `smime-encrypt-region'
fails.
+ (smime-cert-by-ldap-1): Use `base64-encode-string' to convert
+ certificate from DER to PEM format rather than calling openssl.
+
+ * mml-smime.el (mml-smime-encrypt-query): Remove obsolete comment.
+
+ * mml-sec.el (mml-secure-message): Insert keyfile/certfile tags
+ for signing/encryption.
+
+ * mml.el (mml-parse-1): Use them.
+
+2005-02-21 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * nnrss.el (nnrss-verbose): Removed.
+ (nnrss-request-group): Use `nnheader-message' instead.
+
+2005-02-19 Mark Plaksin <happy@usg.edu> (tiny change)
+
+ * nnrss.el (nnrss-verbose): New variable.
+ (nnrss-request-group): Make it say nnrss is requesting a group.
2005-02-21 Reiner Steib <Reiner.Steib@gmx.de>
@@ -3600,17 +6580,17 @@
* mml.el (mime-to-mml): Ditto.
- * rfc2047.el (rfc2047-quote-decoded-words-containing-tspecials):
- New variable.
+ * rfc2047.el (rfc2047-encode-parameter): Use ietf-drums-tspecials.
+ (rfc2047-quote-decoded-words-containing-tspecials): New variable.
(rfc2047-decode-region): Quote decoded words containing special
characters when rfc2047-quote-decoded-words-containing-tspecials
is non-nil.
2005-02-16 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-registry.el (gnus-registry-delete-group): Minor bug fix.
+ * gnus-registry.el (gnus-registry-delete-group): Add minor bug fix.
- * gnus.el (gnus-install-group-spam-parameters): Doc fix.
+ * gnus.el (gnus-install-group-spam-parameters): Add minor doc fix.
2005-02-15 Simon Josefsson <jas@extundo.com>
@@ -3618,6 +6598,43 @@
* imap.el (imap-debug): Doc fix.
+2005-02-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el: Avoid "Recursive load suspected" error in Emacs 21.1.
+
+2005-02-14 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.el (spam-contents): Improve docs for spam-contents
+ parameter in its variable incarnation.
+
+2005-02-14 Simon Josefsson <jas@extundo.com>
+
+ * smime-ldap.el: Use require instead of load-library for ldap.
+ (smime-ldap-search): Indent.
+ (smime-ldap-search-internal): Shorten line.
+
+ * smime.el (smime-cert-by-dns): Add doc-string.
+ (smime-cert-by-ldap-1): Indent.
+
+ * mml-smime.el (mml-smime-get-ldap-cert): Renamed from
+ mml-smime-get-dns-ldap.
+ (mml-smime-encrypt-query): Use new function. Default to ldap.
+
+2005-02-14 Arne J,Ax(Brgensen <arne@arnested.dk>
+
+ * smime.el: Require smime-ldap.
+ (smime-ldap-host-list): New variable.
+ (smime-cert-by-ldap, smime-cert-by-ldap-1): New functions.
+
+ * mml-smime.el (mml-smime-encrypt-query): New function.
+ (mml-smime-encrypt-query): Use it.
+
+ * smime-ldap.el: New file.
+
+2005-02-13 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el: Remove garbage made while merging the Emacs trunk.
+
2005-02-14 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-group.el (gnus-group-make-doc-group): Mention prefix
@@ -3636,15 +6653,95 @@
Change Emacs release version from 21.4 to 22.1 throughout.
Change Emacs development version from 21.3.50 to 22.0.50.
+2005-02-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-copy-part): Don't decode compressed parts.
+
+ * mm-util.el (mm-coding-system-to-mime-charset): Make it work with
+ non-Mule XEmacs as well.
+ (mm-decompress-buffer): Signal an error intentionally if it does
+ not decompress compressed data because auto-compression-mode is
+ disabled.
+
+2005-02-11 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-delete-group): Fix bug: leaves
+ an ID in the registry even if it has no groups.
+
+2005-02-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-jka-compr-maybe-uncompress): Remove;
+ merge it into mm-decompress-buffer.
+ (gnus-mime-copy-part): Use the MIME part charset, the value which
+ a user specified or gnus-newsgroup-charset for decoding, like
+ gnus-mime-inline-part does; set buffer-file-coding-system to tell
+ save-buffer what was used. Suggested by Kevin Ryde
+ <user42@zip.com.au>.
+ (gnus-mime-inline-part): Allow the name parameter as well as the
+ filename parameter; force decompressing of compressed data; always
+ display contents being not decoded as unibyte.
+
+ * mm-view.el (mm-display-inline-fontify): Allow the name parameter
+ as well as the filename parameter.
+
+ * mm-util.el (mm-decompress-buffer): Merge
+ gnus-mime-jka-compr-maybe-uncompress.
+ (mm-find-buffer-file-coding-system): Doc fix; force decompressing
+ of compressed data.
+
2005-02-08 Simon Josefsson <jas@extundo.com>
* imap.el (imap-log): Doc fix.
+2005-02-07 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-inline-part): Decode parts according to
+ the coding cookies; decompress compressed parts.
+
+ * mml.el (mml-generate-mime-1): Add the charaset parameter according
+ to the value which a user specified manually or the coding cookie.
+
+ * mm-util.el (mm-string-to-multibyte): New function.
+ (mm-detect-mime-charset-region): Work with Emacs 22 as well.
+ (mm-coding-system-to-mime-charset): New function.
+ (mm-decompress-buffer): New function.
+ (mm-find-buffer-file-coding-system): New function.
+
+ * mm-view.el (mm-insert-inline): Make sure a part ends with a newline.
+ (mm-display-inline-fontify): Rewrite for decoding and decompressing
+ parts.
+
+2005-02-07 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * mm-view.el (mm-display-inline-fontify): Decode a part according
+ to the charset parameter.
+
2005-02-03 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-mime-inline-part): Show the raw contents if a
prefix arg is neither nil nor a number, as info specifies.
+2005-02-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nntp.el (nntp-marks-changed-p): Use time-less-p to compare the
+ timestamps.
+
+2005-02-02 Jari Aalto <jari.aalto@cante.net>
+
+ * gnus-sum.el (gnus-list-of-unread-articles): Improve active
+ groups error checking and notify user.
+
+2005-02-02 Jari Aalto <jari.aalto@poboxes.com>
+
+ * message.el (message-send-mail-function): Check existence of
+ sendmail-program first before using default value
+ `message-send-mail-with-sendmail'. Otherwise use more generic
+ `smtpmail-send-it'.
+
+2005-02-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nntp.el (nntp-request-update-info): Always return nil.
+
2005-01-30 Stefan Monnier <monnier@iro.umontreal.ca>
* gnus-art.el (gnus-article-mode): Turn off the "\ " non-break space.
@@ -3665,11 +6762,46 @@
* gnus-art.el (gnus-article-prepare):
Remove message-strip-forbidden-properties from the local hook.
+2005-01-27 Simon Josefsson <jas@extundo.com>
+
+ * password.el (password-cache-add): Only start one timer per key.
+ Reported by Derek Atkins <warlord@MIT.EDU>.
+
+2005-01-26 Steve Youngs <steve@sxemacs.org>
+
+ * run-at-time.el: Removed. It is no longer needed as
+ timer-funcs.el in the xemacs-base package has a working version of
+ `run-at-time'.
+
+ * password.el: Require timer-funcs instead of run-at-time in
+ XEmacs.
+ Remove `password-run-at-time' macro.
+ (password-cache-add): Use `run-at-time' instead of
+ `password-run-at-time'.
+
+ * mail-source.el: Require timer-funcs instead of itimer in XEmacs
+ for `run-with-idle-timer'.
+
+ * gnus-demon.el: Require timer-funcs instead of itimer in XEmacs
+ for `run-at-time'.
+
+ * mm-url.el: Require timer-funcs at compile time when in XEmacs
+ for `with-timeout'.
+
2005-01-24 Katsumi Yamaoka <yamaoka@jpl.org>
* mml.el (mml-generate-mime-1): Convert string into unibyte when
inserting " *mml*" buffer's contents into a unibyte temp buffer.
+2005-01-24 Harald Meland <harald.meland@usit.uio.no> (tiny change)
+
+ * mail-source.el (mail-source-fetch-imap): Search for ^From case
+ sensitively.
+
+2005-01-21 Derek Atkins <warlord@MIT.EDU> (tiny change)
+
+ * pgg-pgp.el (pgg-pgp-decrypt-region): Use passphrase cache.
+
2005-01-20 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-insert-part): Switch the multibyteness of data
@@ -3677,11 +6809,91 @@
rather than the type of contents. Suggested by ARISAWA Akihiro
<ari@mbf.ocn.ne.jp>.
+ * nnrss.el (nnrss-find-el): Check carefully whether there's a list
+ of string which old xml.el may return rather than a string.
+
+2005-01-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-sum.el (gnus-summary-idna-message): Silence byte compiler.
+
+2005-01-16 Simon Josefsson <jas@extundo.com>
+
+ * gnus-sum.el (gnus-summary-idna-message): Fail gracefully if
+ idn/idna.el isn't available.
+ (gnus-summary-idna-message): Doc fix. Suggested by Michael Cook
+ <michael@waxrat.com>.
+
+ * hashcash.el: Remove non-FSF copyright header.
+
+ * hashcash.el (hashcash-extra-generate-parameters): New variable.
+ (hashcash-generate-payment): Use it.
+ (hashcash-generate-payment-async): Use it.
+
+2005-01-15 Simon Josefsson <jas@extundo.com>
+
+ * message.el (message-idna-to-ascii-rhs): Decode Reply-To too.
+ Suggested by Raymond Scholz <ray-2005@zonix.de>.
+
+ * gnus-sum.el (gnus-summary-wash-map): Bind "W i" to
+ gnus-summary-idna-message.
+ (gnus-summary-make-menu-bar): Add De-IDNA menu entry.
+ (gnus-summary-idna-message): New function.
+
+2005-01-13 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-msg.el (gnus-confirm-mail-reply-to-news): Change default to
+ gnus-novice-user.
+
+2005-01-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnrss.el (nnrss-request-delete-group): Delete entries in
+ nnrss-group-alist as well.
+ (nnrss-save-server-data): Insert newline.
+
+2005-01-10 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.el (gnus-user-agent): Use list of symbols instead of
+ symbols. Display full version number for (S)XEmacs. Optionally
+ display (S)XEmacs codename.
+
+ * gnus-util.el (gnus-emacs-version): Update for new
+ `gnus-user-agent'.
+
+ * gnus-msg.el (gnus-extended-version): Make it possible to omit
+ Gnus version.
+
2005-01-05 Reiner Steib <Reiner.Steib@gmx.de>
* spam.el (spam-face): New face. Don't use `gnus-splash-face'
which is unreadable in some setups.
+2005-01-06 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-spec.el (gnus-update-format-specifications): Flush the
+ group format spec cache if it doesn't support decoded group names.
+
+2005-01-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-score.el (gnus-decay-scores, gnus-score-load-file): Allow
+ to apply decay on score files matching a regexp.
+
+2004-12-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-line-format-alist): Keep the forward
+ compatibility in %g and %c.
+
+2004-12-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-line-format-alist): Use decoded group
+ name for only %g and %c.
+ (gnus-group-insert-group-line): Bind gnus-tmp-decoded-group instead
+ of gnus-tmp-group to decoded group name.
+ (gnus-group-make-rss-group): Exclude `/'s from group names.
+
+2004-12-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnrss.el (nnrss-get-encoding): Fix regexp.
+
2004-12-27 Simon Josefsson <jas@extundo.com>
* mm-bodies.el (mm-body-encoding): Don't permit 7-bit to be used when
@@ -3694,17 +6906,95 @@
* gnus-sum.el (gnus-summary-mode-map): Likewise.
+2004-12-26 Tsuyoshi AKIHO <akiho@kawachi.zaq.ne.jp>
+
+ * gnus-sum.el (gnus-summary-walk-group-buffer): Decode group name.
+
+2004-12-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnrss.el: Require rfc2047 and mml.
+ (nnrss-file-coding-system): New variable.
+ (nnrss-format-string): Redefine it as an inline function.
+ (nnrss-decode-group-name): New function.
+ (nnrss-string-as-multibyte): Remove.
+ (nnrss-retrieve-headers): Decode group name; don't use
+ nnrss-format-string.
+ (nnrss-request-group): Decode group name.
+ (nnrss-request-article): Decode group name; allow a Message-ID as
+ well as an article number; don't use nnrss-format-string; encode a
+ Message-ID string which may contain non-ASCII characters; use
+ mml-to-mime to compose a MIME article.
+ (nnrss-request-expire-articles): Decode group name.
+ (nnrss-request-delete-group): Decode group name.
+ (nnrss-fetch): Clarify error message.
+ (nnrss-read-server-data): Use insert-file-contents instead of load;
+ bind file-name-coding-system; use multibyte buffer.
+ (nnrss-save-server-data): Bind coding-system-for-write to the
+ value of nnrss-file-coding-system; bind file-name-coding-system;
+ add coding cookie.
+ (nnrss-read-group-data): Use insert-file-contents instead of load;
+ bind file-name-coding-system; use multibyte buffer.
+ (nnrss-save-group-data): Bind coding-system-for-write to the
+ value of nnrss-file-coding-system; bind file-name-coding-system.
+ (nnrss-decode-entities-string): Rename from n-d-e-unibyte-string;
+ make it work with non-ASCII text.
+ (nnrss-find-el): Make it work with old xml.el as well.
+
+2004-12-26 Tsuyoshi AKIHO <akiho@kawachi.zaq.ne.jp>
+
+ * nnrss.el (nnrss-get-encoding): New function.
+ (nnrss-fetch): Use unibyte buffer initially; bind
+ coding-system-for-read while performing mm-url-insert; remove ^Ms;
+ decode contents according to the encoding attribute.
+ (nnrss-save-group-data): Add coding cookie.
+ (nnrss-mime-encode-string): New function.
+ (nnrss-check-group): Use it to encode subject and author.
+
+2004-12-23 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-check-BBDB): Don't get the symbol-value of an
+ imaginary variable.
+
2004-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-spec.el (gnus-spec-tab): Make a Lisp form which works
correctly even if there are wide characters.
+2004-12-21 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-check-BBDB): Fix the BBDB caching code to use
+ downcased symbol names; make a new cache instead of reusing
+ bbdb-hashtable.
+
2004-12-21 Katsumi Yamaoka <yamaoka@jpl.org>
* rfc2231.el (rfc2231-parse-string): Decode encoded value after
concatenating segments rather than before concatenating them.
Suggested by ARISAWA Akihiro <ari@mbf.ocn.ne.jp>.
+ * message.el (message-get-reply-headers): Bind `extra'.
+
+2004-12-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-extra-wide-headers): New variable.
+ (message-get-reply-headers): Use it.
+
+2004-12-20 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-group-path): Decode group name.
+ (gnus-agent-group-pathname): Ditto.
+
+ * gnus-cache.el (gnus-cache-file-name): Decode group name.
+
+ * gnus-group.el (gnus-group-make-group): Decode group name.
+ (gnus-group-make-rss-group): Register the group data after opening
+ the nnrss group.
+
+2004-12-17 Paul Jarc <prj@po.cwru.edu>
+
+ * nnmaildir.el (nnmaildir-request-expire-articles): Articles moved
+ by expiry now get marked as read.
+
2004-12-17 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-util.el (mm-xemacs-find-mime-charset): New macro.
@@ -3723,6 +7013,34 @@
* gnus-cache.el (gnus-cache-delete-group): Use it.
+2004-12-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-make-rss-group): Unify non-ASCII group
+ names.
+
+2004-12-16 Simon Josefsson <jas@extundo.com>
+
+ * hashcash.el (hashcash-payment-alist): Fix custom :type.
+
+2004-12-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-url.el (mm-url-predefined-programs): Add --silent arg to curl.
+
+ * gnus-group.el (gnus-group-expire-articles-1): Decode group name.
+ (gnus-group-set-current-level): Decode group name.
+
+2004-12-15 Maciek Pasternacki <maciekp@japhy.fnord.org> (tiny change)
+
+ * nnrss.el (nnrss-fetch): Signal an error if w3-parse-buffer also
+ failed.
+
+2004-12-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-delete-group): Decode group name.
+ (gnus-group-make-rss-group): Encode group name.
+ (gnus-group-catchup-current): Decode group name.
+ (gnus-group-kill-group): Decode group name.
+
2004-12-08 Stefan Monnier <monnier@iro.umontreal.ca>
* gnus-art.el (gnus-narrow-to-page): Don't hardcode point-min.
@@ -3736,6 +7054,53 @@
gnus-message-archive-method. Suggested by Lute Kamstra
<lute@gnu.org>.
+2004-12-10 Arnaud Giersch <arnaud.giersch@free.fr> (tiny change)
+
+ * gnus-sum.el (gnus-summary-exit-no-update): Don't clear the
+ global counterparts of the buffer-local variables.
+
+2004-11-16 Romain Francoise <romain@orebokech.com>
+
+ * gnus-sum.el (gnus-summary-exit): Don't clear the global
+ counterparts of the buffer-local variables.
+
+2004-11-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-forbidden-properties): Fixed typo in doc
+ string.
+
+2004-11-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-util.el (gnus-replace-in-string): Added doc string.
+
+ * nnmail.el (nnmail-split-header-length-limit): Increase to 2048
+ to avoid problems when splitting mails with many recipients.
+
+2004-11-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * gnus-sum.el (gnus-summary-exit): Remove redundant and harmful
+ pop-to-buffer, covered by the subsequent gnus-configure-windows.
+
+2004-12-05 Nelson Ferreira <nelson.ferreira@ieee.org>
+
+ * spam-stat.el (spam-stat-save): Load the hashtable from disk only
+ if there is no hashtable in memory or file modification time is
+ newer than cached timestamp.
+
+2004-12-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-limit-to-recipient): Implement
+ not-matching option.
+
+2004-12-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-summary-limit-to-recipient): New function.
+ Suggested David Mazieres in analogy to rmail-summary-by-recipients.
+ (gnus-summary-limit-map, gnus-summary-make-menu-bar): Add it.
+ (gnus-article-sort-by-recipient, gnus-summary-sort-by-recipient):
+ New functions. Suggested by Uwe Brauer <oub@mat.ucm.es>.
+ (gnus-summary-mode-map, gnus-summary-make-menu-bar): Add it.
+
2004-12-02 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-forward-make-body-mml): Remove headers
@@ -3746,16 +7111,36 @@
* message.el (message-forward-make-body-plain): Always remove
headers according to message-forward-ignored-headers.
+2004-12-01 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Remove the
+ gnus-summary-limit pop for now, it has problems with ham marks for
+ me.
+
+2004-11-29 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Use gnus-summary-limit
+ correctly.
+
+2004-11-28 Carl Henrik Lunde <chlunde+bugs+@ping.uio.no> (tiny change)
+
+ * format-spec.el (format-spec): Message the char.
+
+2004-11-26 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-art.el (gnus-split-methods): Reformat comments.
+
+ * spam.el (spam-summary-prepare-exit): Remove article limits
+ before exiting the summary buffer.
+
2004-11-26 Katsumi Yamaoka <yamaoka@jpl.org>
* nnrss.el (nnrss-string-as-multibyte): Redefine it as a macro in
order to silence the byte compiler.
- * pop3.el (pop3-md5): Define it before being used.
-
* spam.el: Fix the way to silence the byte compiler, which
- complained about bbdb-buffer, bbdb-create-internal,
- bbdb-search-simple, mail-check-payment, spam-BBDB-register-routine,
+ complained about bbdb-buffer, bbdb-create-internal, bbdb-records,
+ bbdb-search-simple, spam-BBDB-register-routine,
spam-enter-ham-BBDB, spam-stat-buffer-change-to-non-spam,
spam-stat-buffer-change-to-spam, spam-stat-buffer-is-non-spam,
spam-stat-buffer-is-spam, spam-stat-load,
@@ -3792,21 +7177,40 @@
* spam.el (spam-blackhole-good-server-regex): Ditto.
-2004-11-25 Reiner Steib <Reiner.Steib@gmx.de>
+2004-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
- * message.el (message-forbidden-properties): Fix typo in doc string.
+ * mml.el (mml-preview): Widen the message buffer before copying
+ the contents to the preview buffer; sort headers before previewing.
-2004-11-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * message.el (message-hidden-headers): Fix the way to avoid a bug
+ in the `repeat' widget in Emacs 21.3 or earlier.
- * message.el (message-strip-forbidden-properties):
- Bind buffer-read-only (etc) to nil.
+2004-11-25 Katsumi Yamaoka <yamaoka@jpl.org>
-2004-11-25 Reiner Steib <Reiner.Steib@gmx.de>
+ * message.el (message-hidden-headers): Default to "^References:".
+ Improve customization type. Suggested by Reiner Steib
+ <Reiner.Steib@gmx.de>.
- * gnus-util.el (gnus-replace-in-string): Add doc string.
+2004-11-25 Romain Francoise <romain@orebokech.com>
- * nnmail.el (nnmail-split-header-length-limit): Increase to 2048
- to avoid problems when splitting mails with many recipients.
+ * message.el (message-strip-forbidden-properties): Remove check for
+ obsolete `message-hidden' text property, hidden headers are not
+ accessible in the buffer anymore.
+
+2004-11-22 Romain Francoise <romain@orebokech.com>
+
+ * message.el (message-header-format-alist): Add `From' in list
+ so that it can be sorted.
+ (message-fix-before-sending): Widen and sort headers before
+ sending.
+ (message-hide-headers): Use narrowing to hide headers by moving
+ them to the top of the buffer and narrowing to the region
+ underneath.
+
+2004-11-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-strip-forbidden-properties): Bind
+ buffer-read-only (etc) to nil.
2004-11-23 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -3817,22 +7221,77 @@
* nnfolder.el (nnfolder-request-create-group): Save current buffer.
-2004-11-22 Stefan Monnier <monnier@iro.umontreal.ca>
+2004-11-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * gnus-sum.el (gnus-summary-exit): Remove redundant and harmful
- pop-to-buffer, covered by the subsequent gnus-configure-windows.
+ * dns.el (query-dns): Use sit-for to time instead of
+ accept-process-output, since that doesn't seem to work on udp
+ sockets.
+
+2004-11-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Encode bogus delimiters.
+
+2004-11-15 Jesper Harder <harder@ifa.au.dk>
+
+ * pop3.el (pop3-leave-mail-on-server): Don't quote nil in
+ doc string. Improve doc string.
+
+2004-11-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nntp.el (nntp-request-update-info): Return nil if
+ nntp-marks-is-evil is true so that gnus-get-unread-articles-in-group
+ may not call gnus-activate-group which uselessly issues the GROUP
+ commands for all nntp groups and wastes time. Reported by Romain
+ Francoise <romain@orebokech.com>.
+
+ * gnus-start.el (gnus-get-unread-articles): Remove redundant test.
-2004-11-14 Luc Teirlinck <teirllm@auburn.edu>
+2004-11-15 Simon Josefsson <jas@extundo.com>
- * nnfolder.el (nnfolder-save-marks): Add missing format field in
- call to `error'.
- * nnml.el (nnml-save-marks): Ditto.
+ * gnus-art.el (gnus-header-button-alist): Handle URLs in OpenPGP:
+ headers separately.
+ (gnus-button-openpgp): New function, inspired by Jochen K,A|(Bpper
+ <jochen-+It19tn3Rl9sbm7dSapR3bNAH6kLmebB@public.gmane.org>.
2004-11-14 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-start.el (gnus-convert-old-newsrc):
Assign legacy-gnus-agent to 5.10.7.
+2004-11-14 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (article-unsplit-urls): Don't anchor urls to the
+ start of the lines.
+
+2004-11-14 Magnus Henoch <mange@freemail.hu>
+
+ * hashcash.el (hashcash-default-payment): Change default to 20
+ (hashcash-default-accept-payment): Change default to 20
+ (hashcash-process-alist): New variable
+ (hashcash-generate-payment-async): Add
+ (hashcash-already-paid-p): Add
+ (hashcash-insert-payment): Don't generate payments twice
+ (hashcash-insert-payment-async): Add
+ (hashcash-insert-payment-async-2): Add
+ (hashcash-cancel-async): Add
+ (hashcash-wait-async): Add
+ (hashcash-processes-running-p): Add
+ (hashcash-wait-or-cancel): Add
+ (mail-add-payment): New optional argument. Conditionally start
+ asynchronous calculation.
+ (mail-add-payment-async): Add
+
+ * message.el (message-send-mail): Wait for asynchronous hashcash
+ results. Don't clobber existing X-Hashcash headers.
+ (message-setup-1): Call mail-add-payment-async when
+ message-generate-hashcash is non-nil.
+
+2004-11-11 ARISAWA Akihiro <ari@mbf.ocn.ne.jp> (tiny change)
+
+ * message.el (message-use-alternative-email-as-from): Examine the
+ From header as well; use message-make-from in order to include a
+ user's full name.
+
2004-11-10 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-art.el (gnus-emphasis-alist): Don't hide asterisks by
@@ -3841,12 +7300,26 @@
(gnus-emphasis-custom-value-to-external): New function.
(gnus-emphasis-custom-value-to-internal): New function.
+2004-11-09 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * dns.el (query-dns): Resolve reverse addresses.
+
+2004-10-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-get-new-news): Use it.
+
+ * gnus-start.el (gnus-check-reasonable-setup): New function.
+
2004-11-07 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-configure-posting-styles): Don't cause the
"Args out of range" error. Reported by Arnaud Giersch
<arnaud.giersch@free.fr>.
+2004-11-07 Stefan Wiens <s.wi@gmx.net> (tiny change)
+
+ * gnus-sum.el (gnus-summary-clear-local-variables): Use symbolp.
+
2004-11-04 Richard M. Stallman <rms@gnu.org>
* spam.el (spam group): Add :version.
@@ -3859,35 +7332,11 @@
article buffer with a draft file. This is a temporary measure
against the 2004-08-22 change to gnus-article-edit-mode.
-2004-11-02 Ilya N. Golubev <gin@mo.msk.ru>.
-
- * mm-util.el (mm-mime-mule-charset-alist): Add the windows-1251
- entry.
-
2004-11-02 Katsumi Yamaoka <yamaoka@jpl.org>
* html2text.el (html2text-get-attr): Remove unused argument `tag'.
(html2text-format-tags): Remove unused variable `attr'.
- * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Fix cleaning of
- after-load-alist.
-
- * mm-util.el (mm-enrich-utf-8-by-mule-ucs): New function run when
- Mule-UCS is loaded under XEmacs.
- (mm-mime-mule-charset-alist): Avoid duplicated entries.
-
- * mm-util.el (mm-coding-system-p): Return a coding-system.
- (mm-mime-mule-charset-alist): Use shift_jis instead of
- iso-2022-jp-2 for the katakana-jisx0201 mule charset; add new
- entries for the mime charsets iso-2022-jp-3 and shift_jis.
- (mm-coding-system-priorities): Use shift_jis and iso-8859-1
- instead of japanese-shift-jis and iso-latin-1 respectively in
- order to share the default value with both Emacs and XEmacs-mule.
- (mm-mule-charset-to-mime-charset):
- Make mm-coding-system-priorities effective.
- (mm-sort-coding-systems-predicate): Canonicalize coding-systems
- while predicating of candidates upon the priorities.
-
2004-11-01 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-msg.el (gnus-summary-resend-default-address): Add :version.
@@ -3976,6 +7425,20 @@
* html2text.el (html2text-format-tag-list): Add "strong" and "em".
+2004-10-29 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-hashtb): Create the registry
+ when package is loaded.
+
+ * spam.el (spam-summary-score-preferred-header): Add global preference
+ for people who want to override the default SpamAssassin over
+ Bogofilter preference (when both are set).
+ (spam-necessary-extra-headers): Add spam-use-bogofilter as an option.
+ (spam-user-format-function-S): Check
+ spam-summary-score-preferred-header.
+ (spam-extra-header-to-number): Add X-Bogosity header parsing.
+ (spam-user-format-function-S): Format the score correctly.
+
2004-10-29 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-msg.el (gnus-configure-posting-styles): Work with empty
@@ -3997,526 +7460,523 @@
* gnus-spec.el (gnus-update-format-specifications): Return a list
of updated types.
+2004-10-27 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-start.el (gnus-check-reasonable-setup): Use fboundp instead
+ of boundp to check if display-warning is available.
+
+2004-10-26 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * nnimap.el (nnimap-open-connection): Fix prog1/prog2 bug.
+
2004-10-26 Katsumi Yamaoka <yamaoka@jpl.org>
* nnspool.el (nnspool-spool-directory): Use news-path if the
news-directory variable is not bound.
- * gnus-group.el (gnus-group-line-format-alist): Convert the value
- of gnus-tmp-news-method into string if it may be passed to
- gnus-correct-length which takes only a string argument.
+ * gnus-start.el (gnus-check-reasonable-setup): Use an alternative
+ function instead of display-warning if it is not available.
+
+2004-10-26 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-agent.el (gnus-agent-expire-group-1): Fix last merge from
+ v5-10: Use `point-at-bol'.
+
+2004-10-26 Simon Josefsson <jas@extundo.com>
+
+ * hashcash.el: Fix URL in comment, reported by Cheng Gao
+ <chenggao@gmail.com>.
2004-10-25 Reiner Steib <Reiner.Steib@gmx.de>
* html2text.el (html2text-buffer-head): Remove. Use `goto-char'
instead.
-2004-10-24 Kevin Greiner <kevin.greiner@compsol.cc>
+2004-10-25 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-start.el (gnus-convert-old-newsrc): Fix numeric
- comparison on string.
+ * nnimap.el (nnimap-remove-server-from-buffer-alist): Add function
+ to remove a server from the nnimap-server-buffer-alist.
+ (nnimap-open-connection, nnimap-close-server): Use it.
+
+ * gnus-encrypt.el: Remove file in favor of encrypt.el.
2004-10-21 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-view.el (mm-display-inline-fontify): Inhibit font-lock when
running the major-mode function.
-2004-10-21 Kevin Greiner <kevin.greiner@compsol.cc>
-
- * gnus-start.el (gnus-convert-old-newsrc): Two of the converters
- have been backported to 'Gnus v5.11' from 'No Gnus v0.2'. Added a
- boolean check to not apply converters that apply to future
- versions of gnus.
-
2004-10-19 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-sum.el (gnus-update-summary-mark-positions): Search for
dummy marks in the right way.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+2004-10-18 David Edmondson <dme@dme.org>
- * nnagent.el (nnagent-request-type): Bind gnus-agent to nil to
- avoid infinite recursion via gnus-get-function.
+ * mm-view.el (mm-w3m-cid-retrieve-1): Don't use recursive call
+ excessively.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+2004-10-18 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-agent.el (gnus-agent-synchronize-group-flags):
- When necessary, pass full group name to gnus-request-set-marks.
- (gnus-agent-synchronize-group-flags): Add support for sync'ing
- tick marks.
- (gnus-agent-synchronize-flags-server): Be silent when writing file.
+ * gnus-util.el (gnus-split-references): Accept a nil references
+ string and go on blissfully.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * gnus-registry.el (gnus-registry-split-fancy-with-parent): Catch
+ cases where the references string is non-nil but has no references.
- * gnus-agent.el (gnus-agent-synchronize-group-flags):
- Replace gnus-request-update-info with explicit code to sync the
- in-memory info read flags with the marks being sync'd to the backend.
+ * encrypt.el: Add autoload tags.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * spam.el (spam-resolve-registrations-routine): Remove article
+ from unregistration list too. Reported by David Hanak
+ <dhanak@isis.vanderbilt.edu>
- * gnus-agent.el (gnus-agent-possibly-synchronize-flags): Ignore servers
- that are offline. Avoids having gnus-agent-toggle-plugged first ask if
- you want to open a server and then, even when you responded with no,
- asking if you want to synchronize the server's flags.
- (gnus-agent-synchronize-flags-server): Rewrite read loop to handle
- multi-line expressions.
- (gnus-agent-synchronize-group-flags): New internal function.
- Updates marks in memory (in the info structure) AND in the backend.
- (gnus-agent-check-overview-buffer): Fix range of
- deletion to remove entire duplicate line. Fixes merged article
- number bug.
+2004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-util.el (gnus-remassoc): Fix typo in documentation.
+ * gnus-art.el (gnus-copy-article-ignored-headers): Default to
+ nil. Changed custom type.
- * nnagent.el (nnagent-request-set-mark):
- Use gnus-agent-synchronize-group-flags, not backend's request-set-mark
- method, to ensure that synchronization updates marks in the
- backend and in the info (in memory) structure.
+2004-10-17 Reiner Steib <Reiner.Steib@gmx.de>
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * gnus-art.el (gnus-copy-article-ignored-headers): New variable.
- * gnus-agent.el (gnus-agent-synchronize-flags-server): Do nothing
- unless plugged. Disable the agent so that an open failure causes
- an error.
+ * gnus-sum.el (gnus-summary-move-article): Use it.
-2004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
+2004-10-15 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-agent.el (gnus-agent-fetched-hook): Add :version.
- (gnus-agent-go-online): Change :version.
- (gnus-agent-expire-unagentized-dirs)
- (gnus-agent-auto-agentize-methods): Add :version.
+ * encrypt.el: Add autoload cookies.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * spam.el (spam-backend-article-list-property)
+ (spam-backend-get-article-todo-list)
+ (spam-backend-put-article-todo-list, )
+ (spam-summary-prepare-exit, spam-resolve-registrations-routine):
+ Resolve registrations separately.
+ (spam-register-routine): Format comments.
+ (spam-unregister-routine, spam-register-routine): Always call with
+ specific-articles, no default list.
+ (spam-summary-prepare-exit): Use the spam-classifications function.
- * legacy-gnus-agent.el
- (gnus-agent-convert-to-compressed-agentview-prompt):
- New function. Used internally to only display 'gnus converting
- files' message when actually necessary.
+ * netrc.el (autoload, netrc-parse): Use encrypt.el instead of
+ gnus-encrypt.el.
- * gnus-sum.el: Remove (require 'gnus-agent) as required
- methods now autoloaded.
+ * encrypt.el: copied from gnus-encrypt.el
- * gnus-int.el (gnus-request-move-article):
- Use gnus-agent-unfetch-articles in place of gnus-agent-expire to
- improve performance.
+ * gnus-encrypt.el: commented that it's obsolete
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-agent.el (gnus-agent-cat-groups): Rewrite avoiding defsetf
- to avoid run-time CL dependencies.
- (gnus-agent-unfetch-articles): New function.
- (gnus-agent-fetch-headers): Use gnus-agent-braid-nov to validate
- article numbers even when local .overview file is missing.
- (gnus-agent-read-article-number): New function. Only accepts
- 27-bit article numbers.
- (gnus-agent-copy-nov-line, gnus-agent-uncached-articles):
- Use gnus-agent-read-article-number.
- (gnus-agent-braid-nov): Rewrote to validate article numbers coming
- from backend while recognizing that article numbers in .overview
- must be valid.
+ * gnus-score.el (gnus-adaptive-pretty-print): New variable.
+ (gnus-score-save): Use it.
- * gnus-start.el (gnus-convert-old-newsrc): Change message text as
- some users confused by references to .newsrc when they only have a
- .newsrc.eld file.
- (gnus-convert-mark-converter-prompt)
- (gnus-convert-converter-needs-prompt): Fix use of property list.
+ * message.el (message-bury): Use `window-dedicated-p'.
-2004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
+2004-10-15 Simon Josefsson <jas@extundo.com>
- * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
+ * pop3.el (top-level): Don't require nnheader.
+ (pop3-read-timeout): Add.
+ (pop3-accept-process-output): Add.
+ (pop3-read-response, pop3-retr): Use it.
-2004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2004-10-14 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-start.el (gnus-get-unread-articles-in-group): Don't do
- stuff for non-living groups.
+ * spam.el (spam-register-routine): Move comment.
+ (spam-verify-bogofilter): Use 'unknown for the initial
+ spam-bogofilter-valid state, not 'never.
-2004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * netrc.el (netrc-machine-user-or-password): Add convenience wrapper
+ for netrc-machine.
- * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
- (gnus-agent-regenerate-group): Using nil messages aren't valid.
+ * nnimap.el (nnimap-open-connection): Use
+ netrc-machine-user-or-password.
-2004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2004-10-17 Richard M. Stallman <rms@gnu.org>
- * gnus-agent.el (gnus-agent-read-agentview):
- Inline gnus-uncompress-range.
+ * gnus-registry.el (gnus-registry-unload-hook):
+ Set as a variable with add-hook.
-2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * nnspool.el (nnspool-spool-directory): Use news-directory instead
+ of news-path.
- * legacy-gnus-agent.el
- (gnus-agent-convert-to-compressed-agentview): Fix typos with
- help from Florian Weimer <fw@deneb.enyo.de>
+ * spam-stat.el (spam-stat-unload-hook): Set as a variable w/ add-hook.
- * gnus-agent.el (gnus-agentize):
- gnus-agent-send-mail-real-function no longer set to current value
- of message-send-mail-function but rather a lambda that calls
- message-send-mail-function. The change makes the agent real-time
- responsive to user changes to message-send-mail-function.
+ * spam.el: Delete duplicate `provide'.
+ (spam-unload-hook): Set as a variable with add-hook.
-2004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
+2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-start.el (gnus-get-unread-articles): Fix last commit.
+ * pop3.el (pop3-leave-mail-on-server): Describe possible problems
+ in the doc string.
-2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * message.el (message-ignored-news-headers)
+ (message-ignored-supersedes-headers)
+ (message-ignored-resent-headers)
+ (message-forward-ignored-headers): Improve custom type.
- * gnus-cache.el (gnus-cache-rename-group): New function.
- (gnus-cache-delete-group): New function.
+2004-10-13 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-agent.el (gnus-agent-rename-group): New function.
- (gnus-agent-delete-group): New function.
- (gnus-agent-save-group-info): Use gnus-command-method when
- `method' parameter is nil. Don't write nil entries into the
- active file.
- (gnus-agent-get-group-info): New function.
- (gnus-agent-get-local): Add optional parameters to avoid calling
- gnus-group-real-name and gnus-find-method-for-group.
- (gnus-agent-set-local): Delete stored entry if either min, or max,
- are nil.
- (gnus-agent-fetch-session): Reword error/quit messages.
- On quit, use gnus-agent-regenerate-group to record existance of any
- articles fetched to disk before the quit occurred.
+ * message.el (message-tokenize-header): Fix 2004-09-06 change
+ which used point-min in the wrong place.
- * gnus-int.el (gnus-request-delete-group):
- Use gnus-cache-delete-group and gnus-agent-delete-group to keep the
- local disk in sync with the server.
- (gnus-request-rename-group):
- Use gnus-cache-rename-group and gnus-agent-rename-group to keep the
- local disk in sync with the server.
+2004-10-12 Simon Josefsson <jas@extundo.com>
- * gnus-start.el (gnus-get-unread-articles):
- Cosmetic simplification to logic.
+ * tls.el (tls-certtool-program): New variable.
+ (tls-certificate-information): New function, based on
+ ssl-certificate-information.
- * gnus-group.el (gnus-group-delete-group): No longer update
- gnus-cache-active-altered as gnus-request-delete-group now keeps
- the cache in sync.
- (gnus-group-list-active): Let the agent store a server's active
- list if currently plugged.
+2004-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-util.el (gnus-rename-file): New function.
+ * compface.el: Move the version of ELisp-based uncompface program
+ to the contrib directory because of the copyright problem.
-2004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
+2004-10-12 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-agent.el (gnus-agent-regenerate-group): Activate the group
- when the group's active is not available.
+ * message.el (message-kill-buffer): Raise the current frame.
-2004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
+2004-10-10 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
- error.
+ * gnus-sum.el: Mention that multibyte characters don't work as marks.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * gnus.el (message-y-or-n-p): Autoload.
- * gnus-start.el (gnus-convert-old-newsrc): Only write the conversion
- message to newsrc-dribble when an actual conversion is performed.
+ * pop3.el (pop3-maildrop, pop3-mailhost, pop3-port)
+ (pop3-password-required, pop3-authentication-scheme)
+ (pop3-leave-mail-on-server): Made customizable.
+ (pop3): New custom group.
+ (pop3-retr): Remove `sleep-for' statements.
+ Suggested by Dave Love <fx@gnu.org>.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * nnheader.el (nnheader-read-timeout): Explain 1.0 timeout for
+ Windows/DOS.
- * gnus-agent.el (gnus-agent-read-local):
- Bind nnheader-file-coding-system to gnus-agent-file-coding-system to
- avoid the implicit assumption that they will always be equal.
- (gnus-agent-save-local): Bind buffer-file-coding-system, not
- coding-system-for-write, as the with-temp-file macro first prints
- to a buffer then saves the buffer.
+ * imap.el (imap-parse-flag-list, imap-parse-body-extension)
+ (imap-parse-body): Fix incorrect use of `assert'. Suggested by
+ Dave Love <fx@gnu.org>.
-2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * mml.el (mml-minibuffer-read-disposition): Require match.
+ Suggested by Dave Love <fx@gnu.org>.
- * legacy-gnus-agent.el (): New. Provides converters that are only
- loaded when gnus-convert-old-newsrc needs to call them.
+2004-10-11 Reiner Steib <Reiner.Steib@gmx.de>
- * gnus-agent.el (gnus-agent-read-agentview): Remove support for
- old file versions.
- (gnus-group-prepare-hook): Remove function that converted list
- form of gnus-agent-expire-days to group properties.
+ * gnus-group.el (gnus-group-delete-group): Change "\t." to " " in
+ doc string.
- * gnus-start.el (gnus-convert-old-newsrc): Register new
- converters to handle old agent file formats. Added logic for a
- "backup before upgrading warning".
- (gnus-convert-mark-converter-prompt): Developers can mark
- functions as needing (default), or not needing,
- gnus-convert-old-newsrc's "backup before upgrading warning".
- (gnus-convert-converter-needs-prompt): Tests whether the user
- should be protected from potentially irreversable changes by the
- function.
+2004-10-08 Katsumi Yamaoka <yamaoka@jpl.org>
-2004-10-18 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * mm-uu.el (mm-uu-dissect-text-parts): Support all text/* types.
- * gnus-int.el (gnus-request-accept-article): Inform the agent that
- articles are being added to a group.
- (gnus-request-replace-article): Inform the agent that articles
- need to be uncached as the cached contents are no longer valid.
+2004-10-07 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
- * gnus-agent.el (gnus-agent-file-header-cache): Remove.
- (gnus-agent-possibly-alter-active): Avoid null in numeric comparison.
- (gnus-agent-set-local): Refuse to save null in local object table.
- (gnus-agent-regenerate-group): The REREAD parameter can now be a
- list of articles that will be marked as unread.
+ * gnus-art.el (gnus-mime-display-single): Call `mm-display-inline'
+ instead of calling `mm-insert-inline', to decode text/* parts
+ before displaying them.
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+2004-10-07 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-range.el (gnus-sorted-range-intersection): Now accepts
- single-interval range of the form (min . max). Previously the
- range had to look like ((min . max)). Likewise, return
- (min . max) rather than ((min . max)).
- (gnus-range-map): Use gnus-range-normalize to accept
- single-interval range.
+ * mm-uu.el (mm-uu-text-plain-type): New variable.
+ (mm-uu-pgp-signed-extract-1): Use it.
+ (mm-uu-pgp-encrypted-extract-1): Use it.
+ (mm-uu-dissect): Allow MIME type and parameters as an optional arg;
+ bind mm-uu-text-plain-type with that value.
+ (mm-uu-dissect-text-parts): Pass MIME type and parameters to
+ mm-uu-dissect.
- * gnus-sum.el (gnus-summary-highlight-line): Articles stored in
- the cache, but not the agent, now appear with their usual face.
+2004-10-06 Katsumi Yamaoka <yamaoka@jpl.org>
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * gnus-group.el (gnus-update-group-mark-positions):
+ * gnus-sum.el (gnus-update-summary-mark-positions):
+ * message.el (message-check-news-body-syntax):
+ * gnus-msg.el (gnus-debug): Use mm-string-as-multibyte instead
+ of string-as-multibyte.
- * gnus-sum.el (gnus-adjust-marks): Now correctly handles a list of
- marks consisting of a single range {for example, (3 . 5)} rather
- than a list of a single range { ((3 . 5)) }.
+2004-10-05 Juri Linkov <juri@jurta.org>
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * gnus-group.el (gnus-update-group-mark-positions):
+ * gnus-sum.el (gnus-update-summary-mark-positions):
+ * message.el (message-check-news-body-syntax):
+ * gnus-msg.el (gnus-debug): Use `string-as-multibyte' to convert
+ 8-bit unibyte values to a multibyte string for search functions.
- * gnus-sum.el (gnus-adjust-marks): Avoid splicing null INTO the
- uncompressed list.
+2004-10-06 Katsumi Yamaoka <yamaoka@jpl.org>
-2004-10-18 Kevin Greiner <kevin.greiner@compsol.cc>
+ * mm-uu.el (mm-uu-dissect): Allow optional arg.
+ (mm-uu-dissect-text-parts): New function.
- * gnus-draft.el (gnus-group-send-queue): Pass the group name
- "nndraft:queue" along to gnus-draft-send.
- Use gnus-agent-prompt-send-queue.
- (gnus-draft-send): Rebind gnus-agent-queue-mail to nil when group
- is "nndraft:queue". Suggested by Gaute Strokkenes
- <gs234@srcf.ucam.org>
+ * gnus-art.el (gnus-display-mime): Use mm-uu-dissect-text-parts to
+ dissect text parts.
- * gnus-group.el (gnus-group-catchup): Use new
- gnus-sequence-of-unread-articles, not
- gnus-list-of-unread-articles, to avoid exhausting memory with huge
- numbers of articles. Use gnus-range-map to avoid having to
- uncompress the unread list.
- (gnus-group-archive-directory)
- (gnus-group-recent-archive-directory): Fix invalid ange-ftp reference.
+ * gnus-sum.el (gnus-summary-insert-subject): Remove redundant setq.
+ (gnus-summary-force-verify-and-decrypt): Revert 2004-08-18 change.
- * gnus-range.el (gnus-range-map): Iterate over list or sequence.
- (gnus-sorted-range-intersection): Intersection of two ranges
- without requiring that they first be uncompressed.
+ * mm-decode.el (mm-dissect-singlepart): Revert 2004-08-18 change.
- * gnus-start.el (gnus-activate-group): Unless blocked by the
- caller, possibly expand the active range to include both cached
- and agentized articles.
- (gnus-convert-old-newsrc): Rewrote in anticipation of having
- multiple version-dependent converters.
- (gnus-groups-to-gnus-format): Replace gnus-agent-save-groups with
- gnus-agent-save-active.
- (gnus-save-newsrc-file): Save dirty agent range limits.
+ * gnus-topic.el (gnus-topic-hierarchical-parameters): Use
+ gnus-current-topics instead of gnus-current-topic.
- * gnus-sum.el (gnus-select-newgroup): Replace inline code with
- gnus-agent-possibly-alter-active.
- (gnus-adjust-marked-articles): Faster handling of simple lists.
+2004-10-06 Jesper Harder <harder@ifa.au.dk>
-2004-10-18 David Edmondson <dme@dme.org>
+ * gnus-sum.el (gnus-summary-show-article): Use with-current-buffer.
- * mm-view.el (mm-w3m-cid-retrieve-1): Don't use recursive call
- excessively.
+2004-10-05 Jesper Harder <harder@ifa.au.dk>
-2004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
+ * nnsoup.el (nnsoup-read-active-file): Use dolist, mapc or last
+ where approriate.
- * mml.el (mml-preview): Use `pop-to-buffer'.
+ * nnml.el (nnml-generate-active-info): do.
- * message.el (message-goto-mail-followup-to): Insert after "To".
- (message-carefully-insert-headers): Add comment.
+ * nndiary.el (nndiary-generate-active-info): do.
- * gnus-sum.el (gnus-summary-make-menu-bar): Add help texts.
+ * gnus-topic.el (gnus-topic-hierarchical-parameters): do.
+ (gnus-topic-move): do.
- * gnus-art.el (gnus-button-alist):
- Improve `gnus-button-handle-library' entry.
+ * gnus-sum.el (gnus-data-enter-list, gnus-summary-process-mark-set)
+ (gnus-summary-set-local-parameters, gnus-summary-read-document): do.
- * gnus-art.el (gnus-button-alist): Fix regexp for manual links.
+ * gnus-srvr.el (gnus-server-prepare)
+ (gnus-server-open-all-servers): do.
- * gnus-group.el (gnus-group-get-new-news-this-group): Add doc-string.
+ * gnus-msg.el (gnus-summary-cancel-article)
+ (gnus-summary-resend-message)
+ (gnus-summary-mail-crosspost-complaint): do.
- * gnus-start.el (gnus-activate-group): Add doc-string.
+ * gnus-move.el (gnus-change-server): do.
- * gnus-art.el (gnus-button-handle-man, gnus-button-alist): Try to
- handle manual section.
+ * gnus-group.el (gnus-group-unmark-all-groups)
+ (gnus-group-set-current-level): do.
- * imap.el (imap-store-password): New variable.
- (imap-interactive-login): Use it.
- Suggested by Mark Plaksin <happy@mcplaksin.org>.
+2004-10-04 Simon Josefsson <jas@extundo.com>
- * gnus-art.el (gnus-button-alist, gnus-header-button-alist):
- Allow / in mailto URLs.
+ * message.el (message-generate-hashcash): Doc fix.
- * spam.el (spam-directory): Derive from `gnus-directory'.
+2004-10-02 Kevin Greiner <kgreiner@compsol.cc>
- * gnus-sum.el (gnus-pick-line-number): Add autoload.
+ * nnagent.el (nnagent-request-type): Bind gnus-agent to nil to
+ avoid infinite recursion via gnus-get-function.
-2004-10-17 Richard M. Stallman <rms@gnu.org>
+2004-10-02 Jesper Harder <harder@ifa.au.dk>
- * gnus-registry.el (gnus-registry-unload-hook):
- Set as a variable with add-hook.
+ * mm-partial.el (mm-partial-find-parts): Use with-current-buffer.
- * nnspool.el (nnspool-spool-directory): Use news-directory instead
- of news-path.
+ * nnfolder.el (nnfolder-generate-active-file): Use dolist.
- * spam-stat.el (spam-stat-unload-hook): Set as a variable w/ add-hook.
+ * nnmail.el (nnmail-split-history): do.
- * spam.el: Delete duplicate `provide'.
- (spam-unload-hook): Set as a variable with add-hook.
+ * nnml.el (nnml-generate-nov-databases-1, nnml-request-rename-group)
+ (nnml-request-delete-group): do.
-2004-10-15 Reiner Steib <Reiner.Steib@gmx.de>
+ * nnslashdot.el (nnslashdot-read-groups): do.
- * pop3.el (pop3-leave-mail-on-server): Describe possible problems
- in the doc string.
+ * nnsoup.el (nnsoup-delete-unreferenced-message-files): do.
+ (nnsoup-unpack-packets, nnsoup-make-active): Simplify.
- * message.el (message-ignored-news-headers)
- (message-ignored-supersedes-headers)
- (message-ignored-resent-headers)
- (message-forward-ignored-headers): Improve custom type.
+ * nnspool.el (nnspool-find-id): Use with-temp-buffer.
+ (nnspool-sift-nov-with-sed): Use last
+ (nnspool-retrieve-headers-with-nov): Use mapc.
+ (nnspool-request-newgroups): Use dolist.
+ (nnspool-request-group): Use last.
-2004-10-15 Simon Josefsson <jas@extundo.com>
+ * nntp.el (nntp-read-server-type): Use dolist.
- * pop3.el (top-level): Don't require nnheader.
- (pop3-read-timeout): Add.
- (pop3-accept-process-output): Add.
- (pop3-read-response, pop3-retr): Use it.
+ * nnvirtual.el (nnvirtual-create-mapping)
+ (nnvirtual-update-read-and-marked): Use dolist.
+ (nnvirtual-convert-headers): Simplify.
-2004-10-13 Katsumi Yamaoka <yamaoka@jpl.org>
+2004-10-01 Kevin Greiner <kgreiner@compsol.cc>
- * message.el (message-tokenize-header): Fix 2004-09-06 change
- which used point-min in the wrong place.
+ * gnus-agent.el (gnus-agent-synchronize-group-flags): Added
+ support for sync'ing tick marks.
-2004-10-11 Reiner Steib <Reiner.Steib@gmx.de>
+2004-10-01 Katsumi Yamaoka <yamaoka@jpl.org>
- * message.el (message-bury): Use `window-dedicated-p'.
+ * gnus-sum.el (gnus-summary-toggle-header): Make it work even if
+ there's no visible header.
-2004-10-10 Reiner Steib <Reiner.Steib@gmx.de>
+2004-10-01 Kevin Greiner <kgreiner@compsol.cc>
- * gnus-sum.el: Mention that multibyte characters don't work as marks.
+ * gnus-agent.el (gnus-agent-synchronize-group-flags): When
+ necessary, pass full group name to gnus-request-set-marks.
- * gnus.el (message-y-or-n-p): Autoload.
+2004-10-01 Simon Josefsson <jas@extundo.com>
- * pop3.el (pop3-maildrop, pop3-mailhost, pop3-port)
- (pop3-password-required, pop3-authentication-scheme)
- (pop3-leave-mail-on-server): Made customizable.
- (pop3): New custom group.
- (pop3-retr): Remove `sleep-for' statements.
- Suggested by Dave Love <fx@gnu.org>.
+ * mailcap.el (mailcap-mime-data): Add pdf. Remove non-free
+ acroread.
- * nnheader.el (nnheader-read-timeout): Explain 1.0 timeout for
- Windows/DOS.
+2004-10-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * imap.el (imap-parse-flag-list, imap-parse-body-extension)
- (imap-parse-body): Fix incorrect use of `assert'. Suggested by
- Dave Love <fx@gnu.org>.
+ * spam-report.el (spam-report-gmane): Fix interactive.
- * mml.el (mml-minibuffer-read-disposition): Require match.
- Suggested by Dave Love <fx@gnu.org>.
+ * gnus-art.el (gnus-treat-body-boundary): Only do stuff under X.
-2004-10-06 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-agent.el (gnus-agent-synchronize-flags-server): Be silent
+ when writing file.
+ (gnus-agent-synchronize-flags): Don't default to being
+ interactive.
- * gnus-group.el (gnus-update-group-mark-positions):
- * gnus-sum.el (gnus-update-summary-mark-positions):
- * message.el (message-check-news-body-syntax):
- * gnus-msg.el (gnus-debug): Use mm-string-as-multibyte instead
- of string-as-multibyte.
+2004-09-30 Simon Josefsson <jas@extundo.com>
- * gnus-sum.el (gnus-summary-insert-subject): Remove redundant setq.
+ * message.el (message-generate-hashcash): Add.
+ (message-send-mail): Use it, call mail-add-payment.
-2004-10-05 Juri Linkov <juri@jurta.org>
+2004-09-29 Teodor Zlatanov <tzz@lifelogs.com>
- * gnus-group.el (gnus-update-group-mark-positions):
- * gnus-sum.el (gnus-update-summary-mark-positions):
- * message.el (message-check-news-body-syntax):
- * gnus-msg.el (gnus-debug): Use `string-as-multibyte' to convert
- 8-bit unibyte values to a multibyte string for search functions.
+ * spam.el (spam-verify-bogofilter): Use -V, not -sV option.
-2004-10-01 Katsumi Yamaoka <yamaoka@jpl.org>
+2004-09-28 Kevin Greiner <kgreiner@compsol.cc>
- * gnus-sum.el (gnus-summary-toggle-header): Make it work even if
- there's no visible header.
+ * gnus-agent.el (gnus-agent-synchronize-group-flags): Replaced
+ gnus-requst-update-info with explicit code to sync the in-memory
+ info read flags with the marks being sync'd to the backend.
-2004-10-01 Simon Josefsson <jas@extundo.com>
+ *gnus-util.el (gnus-pp): Added optional stream to match pp API.
- * mailcap.el (mailcap-mime-data): Add pdf. Remove non-free
- acroread.
+2004-09-28 Teodor Zlatanov <tzz@lifelogs.com>
-2004-09-29 Jesper Harder <harder@ifa.au.dk>
+ * spam.el (spam-verify-bogofilter): Add new function.
+ (spam-check-bogofilter)
+ (spam-bogofilter-register-with-bogofilter): Use it.
+ (spam-verify-bogofilter): Add small fixes.
- * gnus.el (gnus-method-to-server): Oops, move it don't delete it.
+2004-09-28 Simon Josefsson <jas@extundo.com>
-2004-09-28 Jesper Harder <harder@ifa.au.dk>
+ * hashcash.el (hashcash-generate-payment): Revert.
- * gnus-picon.el: Require cl.
+2004-09-28 Teodor Zlatanov <tzz@lifelogs.com>
- * mml-sec.el (mml-signencrypt-style): Don't depend on Gnus.
+ * gnus-registry.el (gnus-registry-split-fancy-with-parent): Use
+ gnus-extract-references instead of gnus-split-references.
- * mml-smime.el: Require cl. Autoload message-fetch-field.
+ * gnus-util.el (gnus-extract-references): Add new function, analogous
+ to gnus-split-references but extracts only the message-ID without
+ anything extra.
- * gnus-fun.el: Require gnus-ems and gnus-util.
+ * hashcash.el (hashcash-generate-payment)
+ (hashcash-check-payment): Do the right thing if hashcash-path is
+ nil (because the hashcash program could not be found).
- * gnus-diary.el (gnus-diary-header-schedule): caddr -> car (cddr).
+ * spam.el (spam-use-hashcash): Remove comment.
- * gnus-art.el (gnus-article-edit-mode): Define before first reference.
+2004-09-27 Jesper Harder <harder@ifa.au.dk>
- * gnus.el (gnus-method-to-server): Move defsubst before first use.
+ * gnus-cache.el (gnus-cache-possibly-remove-articles-1)
+ (gnus-cache-enter-article, gnus-cache-remove-article)
+ (gnus-cache-braid-heads, gnus-cache-generate-active): Use dolist.
+
+ * gnus-async.el (gnus-async-prefetch-remove-group): do.
- * spam.el (spam-check-spamoracle, spam-spamoracle-learn):
- Fix format string mismatch.
- * nnml.el (nnml-request-set-mark, nnml-save-marks): Do.
- * nnfolder.el (nnfolder-request-set-mark, nnfolder-save-marks): Do.
+ * gnus-art.el (article-hide-boring-headers)
+ (article-translate-strings, article-display-face)
+ (gnus-article-mime-match-handle-first)
+ (gnus-article-highlight-headers)
+ (gnus-article-add-buttons-to-head): do.
-2004-09-27 Reiner Steib <Reiner.Steib@gmx.de>
+2004-09-27 Simon Josefsson <jas@extundo.com>
- * gnus.el (gnus-version-number): Set to 5.11.
+ * hashcash.el: New version, from
+ http://users.actrix.co.nz/mycroft/hashcash.el. Previously in
+ ../contrib/.
2004-09-27 Katsumi Yamaoka <yamaoka@jpl.org>
* mm-decode.el (mm-copy-to-buffer): Don't use set-buffer-multibyte.
-2004-09-26 Christian Neukirchen <chneukirchen@yahoo.de> (tiny change)
+2004-09-26 Jesper Harder <harder@ifa.au.dk>
- * mm-util.el (mm-image-load-path): Handle nil in load-path.
+ * gnus-dup.el (gnus-dup-open): Use mapc.
+ (gnus-dup-enter-articles, gnus-dup-suppress-articles): Use dolist.
-2004-09-26 Jesper Harder <harder@ifa.au.dk>
+ (gnus-dup-enter-articles): Remove excess ID's from gnus-dup-hashtb.
+ Reported by Stefan Wiens <s.wi@gmx.net>.
- * gnus-msg.el (gnus-post-news): Use blank Newsgroups line if
- GROUP is a virtual group.
+ * gnus.el (gnus-shutdown): Use dolist.
- * mm-util.el (mm-charset-synonym-alist): Remove obsolete entries
- for big5 and gb2312.
+ * gnus-undo.el (gnus-undo): Use mapc.
- * rfc2047.el (rfc2047-pad-base64): Deal with more cases of invalid
- padding.
+ * nnrss.el (nnrss-generate-active): do.
- * mm-bodies.el (mm-7bit-chars): Don't include \r.
+ * message.el (message-cite-original-without-signature)
+ (message-cite-original): Use mapc.
+ (message-do-actions, message-make-forward-subject): Use dolist.
- * mml.el (mml-compute-boundary-1): Don't uncompress files.
+2004-09-25 Kevin Greiner <kgreiner@compsol.cc>
- * rfc2047.el (rfc2047-qp-or-base64): New function to reduce
- dependencies.
- (rfc2047-encode): Use it.
+ * gnus-agent.el (gnus-agent-check-overview-buffer): Fixed range of
+ deletion to remove entire duplicate line. Fixes merged article
+ number bug.
- * flow-fill.el: Typo.
+2004-09-25 Kevin Greiner <kgreiner@compsol.cc>
- * mml.el (mml-generate-mime-1): Don't use format=flowed with
- inline PGP.
+ * gnus-agent.el (gnus-agent-possibly-synchronize-flags): Ignore
+ servers that are offline. Avoids having gnus-agent-toggle-plugged
+ first ask if you want to open a server and then, even when you
+ responded with no, asking if you want to synchronize the server's
+ flags.
+ (gnus-agent-synchronize-flags-server): Rewrote read loop to handle
+ multi-line expressions.
+ (gnus-agent-synchronize-group-flags): New internal function.
+ Updates marks in memory (in the info structure) AND in the
+ backend.
- * gnus.el (gnus-getenv-nntpserver): Strip whitespace.
+ * gnus-util.el (gnus-remassoc): Fixed typo in documentation.
- * gnus-cache.el (gnus-cache-save-buffers): Check if buffer is
- alive. Reported by Laurent Martelli <laurent@aopsys.com>.
+ * nnagent.el (nnagent-request-set-mark): Use
+ gnus-agent-synchronize-group-flags, not backend's request-set-mark
+ method, to ensure that synchronization updates marks in the
+ backend and in the info (in memory) structure.
- * html2text.el (html2text-replace-list): Add &amp; and &apos;.
+2004-09-24 Katsumi Yamaoka <yamaoka@jpl.org>
- * nnheader.el (nnheader-max-head-length): Increase to 8192.
+ * gnus-uu.el (gnus-uu-digest-mail-forward): Obey the process/prefix
+ convention fully; don't miss the root article of a thread; make
+ the X-Draft-From header with correct article numbers.
- * message.el (message-clone-locals): Clone sendmail and smtp
- variables.
+2004-09-23 Kevin Greiner <kgreiner@compsol.cc>
+
+ * gnus-agent.el (gnus-agent-synchronize-flags-server): Do nothing
+ unless plugged. Disable the agent so that an open failure causes
+ an error.
+
+ * gnus-int.el (gnus-request-set-mark, gnus-request-update-mark):
+ Reverted 2004-09-21 change. The backend must be opened while
+ synchronizing flags even when the backend stores the flags
+ locally.
2004-09-23 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-msg.el (gnus-configure-posting-styles): Narrow to headers
in `header' match. Reported by Svend Tollak Munkejord.
+ * message.el (message-cite-original): Fix use of
+ `message-cite-articles-with-x-no-archive'.
+
+2004-09-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-win.el (gnus-buffer-configuration): Add mml-preview.
+ (gnus-window-to-buffer): Ditto.
+
+ * mml.el (mml-preview-buffer): New variable.
+ (mml-preview): Manage window layout with gnus-buffer-configuration.
+
+ * gnus-msg.el (gnus-setup-message): Put article numbers into the
+ X-Draft-From header even if those articles aren't quoted.
+
+2004-09-21 Kevin Greiner <kgreiner@compsol.cc>
+
+ * gnus-int.el (gnus-servers-that-use-local-marks): New variable.
+ (gnus-request-set-mark, gnus-request-update-mark): Use new
+ g-s-t-u-l-m to decide to use backend even when unplugged.
+
+2004-09-21 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-msg.el (gnus-inews-make-draft-meta-information): Don't add
+ a trailing whitespace. Suggested by Cheng Gao <chenggao@gmail.com>.
+
+2004-09-20 Simon Josefsson <jas@extundo.com>
+
+ * mm-util.el (mm-charset-synonym-alist): Map "unicode" to
+ "utf-16-le".
+
2004-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
* mm-decode.el (mm-copy-to-buffer): Preserve the data's unibyteness.
-2004-09-20 Reiner Steib <Reiner.Steib@gmx.de>
+2004-09-19 Reiner Steib <Reiner.Steib@gmx.de>
* uudecode.el (uudecode-use-external): Add :version.
@@ -4668,29 +8128,48 @@
* gnus-sum.el (gnus-fetch-old-headers): Add custom choices `t'
and `invisible'.
+2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-trim): Watch out for negatives
+ in gnus-registry-trim.
+
2004-09-13 Simon Josefsson <jas@extundo.com>
+ * dns-mode.el: Add XEmacs auto-mode-alist autoload cookie.
+
* nnimap.el (nnimap-demule): Revert 2004-08-30 change.
+ * dns-mode.el (dns-mode): Fix menu for XEmacs, reported by Steve
+ Youngs <steve@youngs.au.com> and suggested by Katsumi Yamaoka
+ <yamaoka@jpl.org>.
+ (dns-mode-font-lock-keywords): Fix faces, reported by Steve Youngs
+ <steve@youngs.au.com> and suggested by Katsumi Yamaoka
+ <yamaoka@jpl.org>.
+
+ * sieve.el (sieve-manage-mode): Ditto.
+
2004-09-13 Reiner Steib <Reiner.Steib@gmx.de>
* gnus-sum.el (gnus-summary-copy-article): Fix doc string.
-2004-09-10 Miles Bader <miles@gnu.ai.mit.edu>
+2004-09-11 Simon Josefsson <jas@extundo.com>
- * nnimap.el (nnimap-open-connection): Remove extraneous end-paren.
+ * dns-mode.el: Add.
-2004-09-10 Teodor Zlatanov <tzz@lifelogs.com>
+ * mm-view.el (mm-display-dns-inline): Add.
- * nnimap.el (nnimap-open-connection): Allow 'imaps' as a synonym
- for the 'imap' port in netrc files.
+ * mm-decode.el (mm-inline-media-tests): Add text/dns.
+ (mm-automatic-display): Ditto.
- * gnus-registry.el (gnus-registry-trim): Watch out for negatives
- in gnus-registry-trim.
+ * mailcap.el (mailcap-mime-data): Add text/dns.
+ (mailcap-mime-extensions): Map .soa to text/dns.
-2004-09-10 Simon Josefsson <jas@extundo.com>
+2004-09-10 Miles Bader <miles@gnu.ai.mit.edu>
- * nndb.el (require): Remove tcp and duplicate cl.
+ * gnus-art.el (article-decode-mime-words, article-babel)
+ (gnus-article-highlight-signature, gnus-article-add-buttons)
+ (gnus-signature-toggle): Remove unnecessary bindings of
+ `inhibit-read-only' inherited from v5.10 merge.
2004-09-08 Reiner Steib <Reiner.Steib@gmx.de>
@@ -4707,7 +8186,7 @@
* flow-fill.el (fill-flowed-display-column)
(fill-flowed-encode-column): Ditto.
-2004-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
+2004-09-06 Stefan <monnier@iro.umontreal.ca>
* message.el (message-tokenize-header, message-send-mail-with-qmail):
Use point-min rather than 1.
@@ -4720,14 +8199,59 @@
(gnus-generate-vertical-tree): Usue `bobp' rather than compare to 1.
(gnus-highlight-selected-tree): Use point-min rather than 1 and 2.
+2004-09-10 Simon Josefsson <jas@extundo.com>
+
+ * nndb.el (require): Remove tcp and duplicate cl.
+
+2004-09-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (directory-files-and-attributes): Move forward.
+
+2004-09-09 Kevin Greiner <kgreiner@compsol.cc>
+
+ * gnus-agent.el (directory-files-and-attributes): Optionally
+ defined to support XEmacs.
+
+2004-09-09 Kevin Greiner <kgreiner@compsol.cc>
+
+ * gnus-agent.el (gnus-agent-cat-groups): rewrote avoiding defsetf
+ to avoid run-time CL dependencies.
+ (gnus-agent-unfetch-articles): New function.
+ (gnus-agent-fetch-headers): Use gnus-agent-braid-nov to validate
+ article numbers even when local .overview file is missing.
+ (gnus-agent-read-article-number): New function. Only accepts
+ 27-bit article numbers.
+ (gnus-agent-copy-nov-line, gnus-agent-uncached-articles): Use
+ gnus-agent-read-article-number.
+ (gnus-agent-braid-nov): Rewrote to validate article numbers coming
+ from backend while recognizing that article numbers in .overview
+ must be valid.
+ (gnus-agent-update-files-total-fetched-for): Use
+ directory-files-and-attributes to improve performance.
+ * gnus-int.el (gnus-request-move-article): Use
+ gnus-agent-unfetch-articles in place of gnus-agent-expire to
+ improve performance.
+
+ * gnus-start.el (gnus-convert-old-newsrc): Changed message text as
+ some users confused by references to .newsrc when they only have a
+ .newsrc.eld file.
+ (gnus-convert-mark-converter-prompt,
+ gnus-convert-converter-needs-prompt): Fixed use of property list.
+ * legacy-gnus-agent.el (gnus-agent-convert-to-compressed-agentview-prompt):
+ New function. Used internally to only display 'gnus converting
+ files' message when actually necessary.
+
+ * gnus-sum.el (): Removed (require 'gnus-agent) as required
+ methods now autoloaded.
+
2004-09-03 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus-sum.el (gnus-summary-insert-subject): Remove list identifiers.
+ * gnus-sum.el (gnus-summary-insert-subject): Remove list
+ identifiers.
-2004-09-03 Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp> (tiny change)
+2004-09-02 Reiner Steib <Reiner.Steib@gmx.de>
- * spam-stat.el (spam-stat-reduce-size): Set spam-stat-dirty.
- (spam-stat-save): Accept prefix argument.
+ * gnus-picon.el: Fix indentation and closing parenthesis.
2004-09-01 Simon Josefsson <jas@extundo.com>
@@ -4744,43 +8268,2659 @@
* sha1-el.el: Renamed to sha1.el.
+2004-08-30 Juanma Barranquero <lektu@terra.es>
+
+ * ietf-drums.el (ietf-drums-remove-whitespace): Fix character constant.
+
+2004-08-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * nnimap.el (nnimap-demule): Avoid string-as-multibyte.
+
+2004-08-30 Kim F. Storm <storm@cua.dk>
+
+ * nntp.el (nntp-authinfo-file): Add :group 'nntp.
+
+ * nnimap.el (nnimap-authinfo-file, nnimap-prune-cache):
+ Add :group 'nnimap.
+
+2004-08-30 Andreas Schwab <schwab@suse.de>
+
+ * rfc2231.el (rfc2231-parse-string): Restore whitespace syntax for
+ ?* and ?\;.
+
+ * ietf-drums.el (ietf-drums-syntax-table): Set syntax of ?* ?\;
+ and ?\' to symbol instead of whitespace.
+
+2004-08-30 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
+
+ * gnus-sum.el (gnus-summary-morse-message): Use search-forward
+ instead of re-search-forward.
+
+ * gnus-uu.el (gnus-uu-save-article): Ditto.
+ (gnus-uu-post-encode-uuencode): Ditto.
+
+ * html2text.el (html2text-clean-list-items): Ditto.
+ (html2text-clean-dtdd): Ditto.
+ (html2text-format-tags): Ditto.
+
+ * message.el (message-send-mail-with-sendmail): Fix regexp.
+ (message-fill-field-general): Use search-forward instead of
+ re-search-forward.
+ (unbold-region): Ditto.
+
+ * nnrss.el (nnrss-request-article): Ditto.
+
+ * nnslashdot.el (nnslashdot-request-article): Ditto.
+
+ * nnweb.el (nnweb-gmane-wash-article): Ditto.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Avoid the
+ "Unrecognized menu descriptor" error in XEmacs.
+
+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)
+
+ * nnmail.el (nnmail-split-lowercase-expanded): New user option.
+ (nnmail-expand-newtext): Lowercase expanded entries if
+ nnmail-split-lowercase-expanded is non-nil.
+
+2004-08-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nndoc.el (nndoc-type-alist): Fix regexp in the rfc822-forward
+ entry.
+
+ * gnus-group.el (gnus-group-line-format-alist): Convert the value
+ of gnus-tmp-news-method into string under XEmacs. It will be
+ passed to gnus-correct-length which takes only a string argument.
+
+2004-08-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-util.el (gnus-bind-print-variables): New macro.
+ (gnus-prin1): Use it.
+ (gnus-prin1-to-string): Use it.
+ (gnus-pp): New function.
+ (gnus-pp-to-string): New function.
+
+ * gnus-cus.el (gnus-agent-cat-prepare-category-field): Replace
+ pp-to-string with gnus-pp-to-string.
+ * gnus-eform.el (gnus-edit-form): Replace pp with gnus-pp.
+ * gnus-group.el (gnus-group-make-kiboze-group): Ditto.
+ * gnus-msg.el (gnus-debug): Ditto.
+ * gnus-score.el (gnus-score-save): Ditto.
+ * gnus-spec.el (gnus-update-format): Replace pp-to-string with
+ gnus-pp-to-string.
+ * legacy-gnus-agent.el (gnus-agent-unlist-expire-days): Replace pp
+ with gnus-pp.
+ * score-mode.el (gnus-score-pretty-print): Ditto.
+ * webmail.el (webmail-debug): Ditto.
+
+2004-08-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-display-face, article-display-x-face): Use
+ buffer-read-only.
+
+2004-08-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-hide-list-identifiers): Bind
+ inhibit-read-only as t.
+
+2004-08-22 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-mlspl.el (gnus-group-split-update): Fix docstring.
+
+2004-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * gnus-art.el: Use inhibit-read-only instead of buffer-read-only.
+ (gnus-narrow-to-page): Don't assume point-min == 1.
+ (gnus-article-edit-mode): Derive from message-mode.
+
+ * gnus-score.el (gnus-score-find-bnews): Simplify and don't assume
+ point-min == 1.
+
+ * imap.el (imap-parse-address-list, imap-parse-body-ext):
+ Disable incorrect use of `assert'.
+
+ * message.el (message-mode): Set comment-start-skip.
+
+
+2004-08-22 Sam Steingold <sds@gnu.org>
+
+ * pop3.el (pop3-leave-mail-on-server): New user variable.
+ (pop3-movemail): Delete mail only when it is nil.
+
+2004-08-21 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * nntp.el (nntp-marks-is-evil): Fix typo in docstring.
+
+ * mml.el (mml-preview): Use `pop-to-buffer'.
+
+ * message.el (message-goto-mail-followup-to): Insert after "To".
+ (message-carefully-insert-headers): Add comment.
+
+ * gnus.el: Remove unused variable `gnus-article-check-size'.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Add help texts.
+
+ * gnus-art.el (gnus-button-alist): Improve
+ `gnus-button-handle-library' entry.
+
+2004-08-19 Sebastian Freundt <hroptatyr@gna.org> (tiny change)
+
+ * nnmaildir.el (nnmaildir--emlink-p, nnmaildir--enoent-p): Use
+ downcase, since XEmacs capitalizes error messages differently.
+
+2004-08-18 Jesper Harder <harder@ifa.au.dk>
+
+ * nntp.el: Add (require 'gnus) due to reference to
+ `gnus-directory'. Reported by Matt Swift <swift@alum.mit.edu>.
+
+2004-08-18 Florian Weimer <fw@deneb.enyo.de>
+
+ * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind
+ `mm-fill-flowed'.
+
+ * mm-decode.el (mm-dissect-singlepart): Check it.
+
+2004-08-17 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * nnimap.el (nnimap-open-connection): Add 'imaps' synonym to
+ 'imap' for netrc parsing.
+
+2004-08-16 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mailcap.el (mailcap-mime-data): Mark as risky.
+
+2004-08-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Assume the close parenthesis
+ may be included in the encoded word.
+ (rfc2047-encode): Don't append a space if the encoded word
+ includes close parenthesis.
+
+2004-08-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-1, rfc2047-encode): Improve encoding
+ of text within parentheses.
+
+2004-08-06 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-encrypt.el (gnus-encrypt-insert-file-contents)
+ (gnus-encrypt-write-file-contents): Make the password key the file
+ name PLUS the cipher, not just the cipher. Also remove failed
+ passwords from the cache.
+
+2004-08-06 Simon Josefsson <jas@extundo.com>
+
+ * gnus-sum.el (gnus-article-loose-mime): Change default to t. Doc
+ fix.
+
+2004-08-05 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-fold-region): Use trailing whitespace as
+ LWSP.
+
+2004-08-04 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-split-fancy-with-parent): Try
+ to append in-reply-to: data to the references: header.
+
+ * netrc.el: Remove old encryption support, autoload gnus-encrypt.el
+ (netrc-parse): Use gnus-encrypt.el functions.
+
+ * gnus-encrypt.el: Add new file for encryption support; currently
+ does only a few GPG ciphers and an internal XOR cipher.
+
+ * password.el: Add comments on using password-read-and-add.
+ (password-read-and-add): Add function to read and add the
+ password to the cache at once.
+
+2004-07-28 Simon Josefsson <jas@extundo.com>
+
+ * pgg-pgp5.el (pgg-pgp5-encrypt-region): Accept sign
+ parameter (but don't use it, for now).
+
+ * imap.el (imap-ssl-open): Use imap-process-connection-type,
+ instead of hard coding to nil.
+
+2004-07-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-view.el (mm-inline-image-emacs): Open lines under an image
+ as mm-inline-image-xemacs does.
+
+2004-07-26 Simon Josefsson <jas@extundo.com>
+
+ * gnus-group.el (gnus-group-group-map, gnus-group-make-menu-bar):
+ Revert part of 2004-07-17 change below.
+
+2004-07-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Don't infloop. Suggested by
+ Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
+
+2004-07-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * flow-fill.el (fill-flowed): Remove space stuffing, and only do
+ quotes that actually start with ">" at the beginning of the
+ lines.
+
+2004-07-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Fix last change.
+ (rfc2047-encode-parameter): Remove useless concat.
+
+2004-07-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Check carefully whether to
+ encode special characters; fix some kind of misconfigured headers;
+ signal a real error if debug-on-quit or debug-on-error is non-nil.
+ (rfc2047-encode-max-chars): New variable.
+ (rfc2047-encode-1): Use it.
+ (rfc2047-encode-parameter): New function.
+
+ * mml.el (mml-insert-parameter): Remove an excessive space.
+
+2004-07-17 Simon Josefsson <jas@extundo.com>
+
+ * gnus-group.el (gnus-group-make-group-simple): Add, suggested by
+ Kai Grossjohann <kai@emptydomain.de>.
+ (gnus-group-group-map): Use it, instead of gnus-group-make-group.
+ (gnus-group-make-menu-bar): Ditto.
+
+ * gnus-util.el (gnus-group-server): Add.
+
+2004-07-16 Jesper Harder <harder@ifa.au.dk>
+
+ * message.el (message-clone-locals): Clone sendmail and smtp
+ variables.
+
+2004-07-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Fix last change.
+
+2004-07-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Treat backslash-quoted
+ characters as non-special.
+
+2004-07-09 Simon Josefsson <jas@extundo.com>
+
+ * gnus-agent.el (gnus-agent-synchronize-flags): Revert to ask.
+ Users will lose all flag changes made while unplugged with
+ e.g. nntp unless flag synchronization happens, thus `nil' is not a
+ good default. See numerous reports on ding mailing list.
+
+2004-07-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nndoc.el (nndoc-type-alist): Improve regexp for article-begin,
+ add generate-head-function and generate-article-function to the
+ rfc822-forward entry.
+ (nndoc-rfc822-forward-generate-article): New function.
+ (nndoc-rfc822-forward-generate-head): New function.
+
+ * mm-decode.el (mm-dissect-buffer): Simplify cleaning of CTE.
+
+2004-07-06 Dan Christensen <jdc@uwo.ca>
+
+ * gnus-sum.el (gnus-summary-read-group-1): When summary is unthreaded,
+ respect display group parameter and gnus-summary-expunge-below.
+ (gnus-articles-to-read): Remove unused reference to display group
+ parameter.
+
+2004-07-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nnheader.el (nnheader-uniquify-message-id): New experimental
+ variable.
+ (nnheader-nov-read-message-id): Use it.
+
+ * spam-report.el (spam-report-gmane): Add interactive.
+
+2004-07-02 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-encode.el (mm-content-transfer-encoding-defaults): Use
+ qp-or-base64 for the application/* types.
+
+2004-07-02 Joakim Verona <joakim@verona.se> (tiny change)
+
+ * nnrss.el (nnrss-read-group-data): Fix off-by-one error.
+
+2004-06-30 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-trim): Don't allow a negative
+ trim value.
+
+2004-01-25 Paul Jarc <prj@po.cwru.edu>
+
+ * nnmaildir.el (nnmaildir--condcase, nnmaildir--enoent-p):
+ New macro and function.
+ (nnmaildir--new-number, nnmaildir-request-set-mark): Use them.
+
+2004-06-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-enrich-utf-8-by-mule-ucs): Fix cleaning of
+ after-load-alist.
+
+2004-06-29 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-get-new-news-this-group): Don't
+ update info that isn't there.
+
+2004-06-29 Ilya N. Golubev <gin@mo.msk.ru>.
+
+ * mm-util.el (mm-mime-mule-charset-alist): Add the windows-1251
+ entry.
+
+2004-06-29 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-view.el (mm-inline-render-with-function): Use multibyte
+ buffer; decode html source by charset.
+
+ * mm-encode.el (mm-content-transfer-encoding-defaults): Doc fix.
+
+ * mm-util.el (mm-enrich-utf-8-by-mule-ucs): New function run when
+ Mule-UCS is loaded under XEmacs.
+ (mm-mime-mule-charset-alist): Avoid duplicated entries.
+
+2004-06-28 Jesper Harder <harder@ifa.au.dk>
+
+ * nnheader.el (nnheader-max-head-length): Increase to 8192.
+
+2004-06-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-coding-system-p): Return a coding-system.
+ (mm-mime-mule-charset-alist): Use shift_jis instead of
+ iso-2022-jp-2 for the katakana-jisx0201 mule charset; add new
+ entries for the mime charsets iso-2022-jp-3 and shift_jis.
+ (mm-coding-system-priorities): Use shift_jis and iso-8859-1
+ instead of japanese-shift-jis and iso-latin-1 respectively in
+ order to share the default value with both Emacs and XEmacs-mule.
+ (mm-mule-charset-to-mime-charset): Make
+ mm-coding-system-priorities effective.
+ (mm-sort-coding-systems-predicate): Canonicalize coding-systems
+ while predicating of candidates upon the priorities.
+
+2004-06-27 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Add
+ gnus-uu-invert-processable.
+
+ * gnus.el: Autoload gnus-uu-invert-processable.
+
+2004-06-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-util.el (mm-with-multibyte-buffer): New macro.
+
+ * rfc2047.el (rfc2047-encode-string): Use it.
+ (rfc2047-encode-region): Move point to the end of the region after
+ encoding. Suggested by IRIE Tetsuya <irie@t.email.ne.jp>.
+
+2004-06-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (gnus-cite-parse): Don't ignore case when finding
+ ">From ". Thanks to Reiner Steib <Reiner.Steib@gmx.de>.
+
+2004-06-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cite.el (gnus-cite-ignore-quoted-from): New user option.
+ (gnus-cite-parse): Ignore quoted envelope From_. Suggested by
+ Karl Chen <quarl@nospam.quarl.org>.
+
+2004-06-23 Jesper Harder <harder@ifa.au.dk>
+
+ * message.el (message-idna-to-ascii-rhs-1): Don't choke on
+ invalid addresses.
+
+2004-06-21 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el: Change section markers, revise TODO list.
+ (spam-backends): Make new master list of all installed backends.
+ (spam-summary-exit-behavior): Add new variable to determine how
+ messages moves are done at summary exit.
+ (spam-move-spam-nonspam-groups-only)
+ (spam-process-ham-in-nonham-groups)
+ (spam-process-ham-in-spam-groups): Remove variables, the
+ spam-summary-exit-behavior variable should be used to manage this
+ behavior.
+ (spam-old-ham-articles, spam-old-spam-articles): Remove.
+ (spam-old-articles): Add variable, replacing spam-old-ham-articles
+ and spam-old-spam-articles.
+ (spam-use-copy, spam-use-move, spam-use-gmane, spam-use-resend):
+ Add empty variables, placeholders for the backends they represent.
+ (spam-set-difference): Move, unchanged.
+ (spam-list-of-processors): Declare OBSOLETE, not used anymore
+ unless the user has a processor variable.
+ (spam-classifications, spam-classification-valid-p)
+ (spam-backend-properties, spam-backend-property-valid-p)
+ (spam-backend-function-type-valid-p)
+ (spam-process-type-valid-p, spam-list-articles): Add helper functions.
+ (spam-report-articles-gmane, spam-report-articles-resend):
+ Remove functions, they are not needed.
+ (spam-install-backend-super, spam-backend-list)
+ (spam-backend-check, spam-backend-valid-p, spam-backend-info)
+ (spam-backend-function, spam-backend-ham-registration-function)
+ (spam-backend-spam-registration-function)
+ (spam-backend-ham-unregistration-function)
+ (spam-backend-spam-unregistration-function)
+ (spam-backend-statistical-p, spam-backend-mover-p)
+ (spam-install-backend-alias, spam-install-checkonly-backend)
+ (spam-install-mover-backend, spam-install-nocheck-backend)
+ (spam-install-backend, spam-install-statistical-backend)
+ (spam-install-statistical-checkonly-backend): Add backend installation
+ support.
+ (spam-summary-prepare-exit): Rewrite to use the new backend code.
+ (spam-group-processor-p): Use the new backend code and respect the
+ summary exit behavior.
+ (spam-mark-spam-as-expired-and-move-routine): Remove.
+ (spam-summary-prepare): Change to use the new spam-old-articles
+ variable.
+ (spam-copy-or-move-routine, spam-copy-spam-routine)
+ (spam-move-spam-routine, spam-copy-ham-routine)
+ (spam-move-ham-routine): Add code to copy/move ham or spam.
+ (spam-fetch-field-fast): Improve doc and code, plus allow the
+ 'number request.
+ (spam-list-of-checks, spam-list-of-statistical-checks): Remove
+ variables.
+ (spam-split, spam-find-spam): Use the new backend code.
+ (spam-registration-functions): Remove variable.
+ (spam-unregister-routine): Add convenience wrapper.
+ (spam-log-undo-registration, spam-register-routine)
+ (spam-log-processing-to-registry)
+ (spam-log-unregistration-needed-p): Rename "check" to "backend"
+ where possible.
+ (spam-check-gmane-xref, spam-check-regex-headers)
+ (spam-check-blackholes, spam-check-stat, spam-check-ifile)
+ (spam-check-BBDB, spam-check-whitelist, spam-check-blacklist)
+ (spam-check-bogofilter-headers, spam-check-spamoracle)
+ (spam-check-spamassassin-headers, spam-check-bsfilter-headers)
+ (spam-check-crm114-headers): Use the spam-split-group that
+ spam-split prepares, no need to determine it every time.
+
+ * nnimap.el (nnimap-retrieve-headers-progress): Add the message number
+ to the nnheader-parse-naked-head call.
+
+ * nnheader.el (nnheader-generate-fake-message-id): Fix indentation.
+
+ * gnus-sum.el (gnus-nov-parse-line): Add the message number to
+ the nnheader-nov-read-message-id call.
+
+2004-06-21 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-group.el (gnus-group-get-new-news-this-group): Don't call
+ gnus-activate-group twice. Suggested by Markus Peter
+ <warp@spin.de>.
+
+2004-06-18 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-time-format): Exchange the order of
+ day and month in the default value; fix customization type.
+ (article-date-ut): Use add-text-properties.
+ (article-make-date-line): Use message-make-date instead of
+ current-time-string.
+
+ * message.el (message-fetch-field): Don't use set-text-properties.
+ (message-make-date): Simplify.
+
+2004-06-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-syntax-table): Treat `(' and `)' as is.
+ (rfc2047-encode-region): Treat text within parentheses as special;
+ show the original text when error has occurred.
+
+ * gnus-group.el (gnus-group-get-new-news-this-group): Pass the
+ already-computed method to gnus-activate-group.
+
+ * gnus-start.el (gnus-make-hashtable-from-newsrc-alist): Make the
+ same select-methods identical Lisp objects.
+
+ * gnus-srvr.el (gnus-server-set-info): Don't make a new Lisp
+ object when modifying the info.
+
+2004-06-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-srvr.el (gnus-server-set-info): Remove the server from
+ gnus-opened-servers since it has never been opened with the new
+ configuration yet.
+
+2004-06-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnheader.el (nnheader-nov-read-message-id): Pass the optional
+ arg to nnheader-generate-fake-message-id.
+
+2004-06-14 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * nnheader.el (nnheader-generate-fake-message-id): Accept a
+ number and build a fake message ID localized to a group and
+ article number (so it's repeatable from that point on).
+ (nnheader-fake-message-id-p): Change regex to accomodate new fake
+ ID format.
+
+ * gnus-sum.el (gnus-get-newsgroup-headers): Call
+ nnheader-generate-fake-message-id with the article number.
+
+2004-06-12 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-06-12 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-ignored-supersedes-headers): Add Approved.
+
+2004-06-11 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-message-header): Remove useless
+ goto-char.
+ (rfc2047-encode): Fold the line before encoding.
+
+2004-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * rfc2047.el (rfc2047-encode-message-header): Disabled header
+ folding -- not all headers can be folded, and this should be done
+ by the message composition mode. Probably. I think.
+
+2004-06-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-util.el (gnus-remove-text-with-property): Make it slightly
+ fast.
+
+ * gnus-ems.el (gnus-remove-image): Don't use
+ message-text-with-property; remove only the image found first.
+
+2004-06-09 Jesper Harder <harder@ifa.au.dk>
+
+ * message.el (message-send-mail-with-sendmail): Use with-current-buffer.
+
+2004-06-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-text-with-property): Make it fast and accept
+ optional arguments.
+ (message-strip-forbidden-properties): Use it.
+ (message-fix-before-sending): Follow the m-t-w-p change.
+
+ * gnus-ems.el (gnus-remove-image): Follow the m-t-w-p change.
+
+2004-06-08 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-hide-headers): Don't change the buffer
+ mistakenly when performing mml-preview even if
+ gnus-single-article-buffer is nil.
+
+2004-06-08 Kai Grossjohann <kgrossjo@eu.uu.net>
+
+ * message.el (message-expand-name-databases): New user option.
+ (message-expand-name): Use it.
+
+2004-06-07 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-report-articles-resend)
+ (spam-report-resend-register-routine): Allow ham reporting.
+ (spam-report-resend-register-ham-routine): Add wrapper.
+ (spam-registration-functions): Add ham resending functions.
+ (spam-list-of-processors): Add ham resend processor.
+
+ * gnus.el (ham-resend-to): Add new group parameter.
+ (spam-process): Add ham resend option.
+
+ * spam-report.el (spam-report-resend): Allow reporting ham.
+ (spam-report-resend-ham): Add wrapper.
+
+2004-06-06 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-cite-articles-with-x-no-archive): New
+ variable.
+ (message-cite-original): Use it.
+
+2004-06-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-cite-original): Respect X-No-Archive.
+
+2004-06-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-hide-headers): Refer to the values for
+ gnus-ignored-headers and gnus-visible-headers in the summary
+ buffer since a user may have set them as group parameters.
+
+2004-06-03 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * assistant.el (assistant-node-name): Add convenience function.
+ (assistant-render-text, assistant-render-node): Add error handling,
+ plus handle multiple next nodes.
+ (assistant-find-next-node): Comment out for now.
+ (assistant-find-next-nodes): Add function, returns list of next
+ nodes.
+
+2004-06-02 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * mail-source.el (mail-source-directory): Fix doc-string.
+
+2004-05-29 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * assistant.el (assistant-render-text, assistant-eval): Add :set
+ widget type, which is different because it takes and returns a
+ list. Much hilarity ensues.
+
+2004-05-28 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-button-alist): Fixed regexp for manual links.
+
+ * gnus-group.el (gnus-group-get-new-news-this-group): Added
+ doc-string.
+
+ * gnus-start.el (gnus-activate-group): Added doc-string.
+
+2004-05-28 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-encode.el (mm-safer-encoding): Consider 7bit is safe.
+
+2004-05-27 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * assistant.el (assistant-render-text): Try to add a :set
+ widget, more to come.
+
+ * spam.el (spam-group-spam-contents-p): Handle empty groupname
+ strings.
+ (spam-report-articles-resend)
+ (spam-register-routine): Do registration iff any articles warrant
+ it.
+ (spam-summary-prepare-exit): Change log message for nil group
+ destinations.
+
+2004-05-27 Daniel Pittman <daniel@rimspace.net>
+
+ * spam.el (spam-report-resend-register-routine): Allow
+ spam-report-resend-to to be a group parameter or a global value.
+
+2004-05-26 Simon Josefsson <jas@extundo.com>
+
+ * starttls.el: Merge with my GNUTLS based starttls.el.
+ (starttls-gnutls-program, starttls-use-gnutls)
+ (starttls-extra-arguments, starttls-process-connection-type)
+ (starttls-connect, starttls-failure, starttls-success): New
+ variables.
+ (starttls-program, starttls-extra-args): Doc fix.
+ (starttls-negotiate-gnutls, starttls-open-stream-gnutls): New
+ functions.
+ (starttls-negotiate, starttls-open-stream): Check
+ `starttls-use-gnutls' and pass on to corresponding *-gnutls
+ function if it is set.
+
+2004-05-27 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-region): Encode encoded words in
+ structured fields.
+
+2004-05-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-resend): Bind rfc2047-encode-encoded-words.
+
+2004-05-26 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-mark-new-messages-in-spam-group-as-spam): Add
+ variable.
+ (spam-mark-junk-as-spam-routine): Use it. Allow to disable
+ assigning the spam-mark to new messages.
+
+2004-05-26 Adam Sj,Ax(Bgren <asjo@koldfront.dk> (tiny change)
+
+ (spam-ham-copy-or-move-routine): Don't declare `todo' twice.
+
+2004-05-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encodable-p): Don't move point.
+ (rfc2047-decode): Treat the ascii coding-system as raw-text by
+ default.
+
+2004-05-25 Anand Mitra <mitramc@yahoo.com> (tiny change)
+
+ * gnus-sum.el (gnus-summary-delete-article): invoke hook with
+ correct data.
+
+2004-05-24 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-list-of-processors): Use nil for nonexistent processors.
+ (spam-group-processor-p): Fix function.
+ (spam-group-processor-multiple-p)
+ (spam-group-spam-processor-report-gmane-p)
+ (spam-group-spam-processor-report-resend-p)
+ (spam-group-spam-processor-bogofilter-p)
+ (spam-group-spam-processor-blacklist-p)
+ (spam-group-spam-processor-ifile-p)
+ (spam-group-ham-processor-ifile-p)
+ (spam-group-spam-processor-spamoracle-p)
+ (spam-group-spam-processor-crm114-p)
+ (spam-group-ham-processor-bogofilter-p)
+ (spam-group-spam-processor-stat-p)
+ (spam-group-ham-processor-stat-p)
+ (spam-group-ham-processor-whitelist-p)
+ (spam-group-ham-processor-BBDB-p)
+ (spam-group-ham-processor-spamoracle-p)
+ (spam-group-ham-processor-copy-p): Remove functions with some
+ prejudice against unneeded code.
+ (spam-report-articles-resend)
+ (spam-report-resend-register-routine): Allow the group/topic
+ spam-resend-to value to override spam-report-resend-to.
+ (spam-summary-prepare-exit): Invoke spam-group-processor-p
+ properly now.
+
+ * gnus.el (spam-resend-to): Add group/topic parameter.
+ (spam-process): Move the OBSOLETE processors to the end of the
+ choices.
+
+2004-05-24 Daniel Pittman <daniel@rimspace.net>
+
+ * spam-report.el (spam-report-resend-to, spam-report-resend): Start
+ with resend-to set to nil, and then ask the user if necessary.
+ (spam-report-resend): spam-report-resend takes a list of articles, not
+ separate article numbers.
+
+2004-05-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-decode.el (mm-text-html-renderer): Make sure w3m exists in
+ addition to emacs-w3m.
+
+2004-05-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * assistant.el (assistant-authinfo-data): New function.
+ (assistant-eval): Eval for entire assistant.
+
+ * netrc.el (netrc-services-file): New variable.
+ (netrc-parse-services): New function.
+ (netrc-find-service-name): New function.
+ (netrc-find-service-number): New function.
+ (netrc-port-equal): New function.
+ (netrc-machine): Use it.
+
+ * nnimap.el (nnimap-open-connection): Use netrc.
+
+ * gnus-util.el (gnus-netrc-get): Remove aliases.
+
+ * gnus-sum.el (gnus-auto-center-summary): Change default to 2.
+
+ * assistant.el (wid-edit): Fix compilation.
+
+ * gnus-util.el (gnus-set-file-modes): Just ignore errors.
+
+2004-05-23 Paul Stodghill <stodghil@cs.cornell.edu>
+
+ * gnus-util.el (gnus-set-file-modes): New function. (small
+ patch).
+
+2004-05-23 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-topic.el (gnus-topic-jump-to-topic): Goto missing topic.
+
+ * assistant.el (assistant-render-node): Fix up rendering and
+ read-only text.
+ (assistant-render-node): Reset.
+ (assistant-make-read-only): Not sticky.
+
+2004-05-20 Danny Siu <dsiu@adobe.com>
+
+ * gnus-sum.el (gnus-summary-recenter): Summery buffer was not auto
+ centered even when gnus-auto-center-summary is t
+
+2004-05-22 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * dns.el (dns-get-txt-answer): New function.
+ (dns-read-txt): Ditto.
+ (query-dns): Use it.
+
+2004-05-21 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-start.el (gnus-get-unread-articles): Don't invalidate
+ active for foreign groups even if the group level is higher than
+ the specified value.
+
+2004-05-21 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-group-jump-to-group): Don't prompt for
+ non-active groups.
+
+ * gnus-art.el (gnus-picon-databases): Add /usr/share/picons.
+
+2004-05-20 Magnus Henoch <mange@freemail.hu>
+
+ * dns.el (dns-read-type): Add support for SVR. (small patch)
+
+2004-05-20 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-use-crm114, spam-crm114, spam-crm114-program)
+ (spam-crm114-header, spam-crm114-spam-switch)
+ (spam-crm114-spam-strong-switch, spam-crm114-ham-strong-switch)
+ (spam-crm114-positive-spam-header)
+ (spam-crm114-database-directory, spam-list-of-processors)
+ (spam-group-spam-processor-crm114-p)
+ (spam-group-ham-processor-crm114-p, spam-extra-header-to-number)
+ (spam-generic-score, spam-list-of-checks)
+ (spam-list-of-statistical-checks, spam-registration-functions)
+ (spam-check-crm114-headers, spam-crm114-score)
+ (spam-check-crm114, spam-crm114-register-with-crm114)
+ (spam-crm114-register-spam-routine)
+ (spam-crm114-unregister-spam-routine)
+ (spam-crm114-register-ham-routine)
+ (spam-crm114-unregister-ham-routine): Add CRM114 support. From
+ asjo@koldfront.dk (Adam Sj,Ax(Bgren).
+
+ * gnus.el: Add spam-use-crm114.
+
+ * spam.el (spam-list-of-processors, spam-registration-functions):
+ Add spam-use-resend.
+ (spam-group-spam-processor-report-resend-p): Add utility wrapper.
+ (spam-report-articles-gmane): Add doc fix.
+ (spam-report-articles-resend,
+ spam-report-resend-register-routine): Add wrappers around
+ spam-report-resend-to.
+
+ * spam-report.el (spam-report-resend-to, spam-report-resend):
+ Add support for resending spam.
+ (spam-report-gmane): Fix line length >80.
+
+ * gnus.el (spam-process): Add spam-use-resend.
+
+2004-05-20 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * spam.el (spam-mark-spam-as-expired-and-move-routine): Return the
+ number of processed spam messages.
+ (spam-ham-copy-or-move-routine): Return the number of processed
+ ham messages.
+ (spam-summary-prepare-exit): Use the above values to decide
+ whether status messages shouled be displayed.
+
+2004-05-20 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encode-function-alist): Renamed from
+ `rfc2047-encoding-function-alist' in order to avoid conflicting
+ with the old version.
+ (rfc2047-encode-region): Concatenate words containing non-ASCII
+ characters in structured fields; don't encode space-delimited
+ ASCII words even in unstructured fields; don't break words at
+ char-category boundaries.
+ (rfc2047-encode-1): New function.
+ (rfc2047-encode): Use it; encode text so that it occupies the
+ maximum width within 76-column; work correctly on Q encoding for
+ iso-2022-* charsets.
+ (rfc2047-fold-region): Use existing whitespace for LWSP; make it
+ sure not to break a line just after the header name.
+ (rfc2047-b-encode-region): Removed.
+ (rfc2047-b-encode-string): New function.
+ (rfc2047-q-encode-region): Removed.
+ (rfc2047-q-encode-string): New function.
+
+ * mm-util.el (mm-replace-in-string): New function.
+
+2004-05-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-inews-make-draft-meta-information): Really
+ get it right.
+ (gnus-inews-make-draft): Really.
+
+2004-05-19 Ben Menasha <bmenasha@benmenasha.net>
+
+ * nnmh.el (nnmh-request-list-1): Don't check the link count
+ before descending. (small patch)
+
+2004-05-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-inews-make-draft-meta-information): Fix quote
+ stuff.
+
+ * gnus-start.el (gnus-subscribe-hierarchical-interactive): Match
+ on real group name.
+
+ * gnus-art.el (gnus-signature-limit): Doc fix.
+
+ * gnus-msg.el (gnus-inews-make-draft): Quote list.
+
2004-05-19 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * pgg-pgp.el (pgg-pgp-verify-region): Clean up.
+ * gnus-draft.el (gnus-draft-send): Bind
+ rfc2047-encode-encoded-words.
+
+ * rfc2047.el (rfc2047-encode-region): Encode =? strings.
+ (rfc2047-encodable-p): Say that =? needs encoding.
+ (rfc2047-encode-encoded-words): New variable.
+
+ * gnus-group.el (gnus-group-select-group): Doc fix.
+
+ * gnus-draft.el (gnus-draft-setup): Mark all replied as replied.
+
+ * gnus-group.el (gnus-group-mode): Set show-trailing-whitespace
+ to nil.
+
+ * gnus-cache.el (gnus-cache-possibly-enter-article): Use it.
+
+ * nnheader.el (nnheader-get-lines-and-char): New function.
+
+2004-05-19 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-msg.el (gnus-summary-followup-with-original): Document
+ yanking of region when active.
+
+2004-05-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-start.el (gnus-get-unread-articles): Do nothing for foreign
+ groups if the group level is higher than the specified value.
+
+2004-05-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-group.el (gnus-group-jump-to-group-prompt): Allow an alist.
+ (gnus-group-jump-to-group): Added prefix argument using
+ `gnus-group-jump-to-group-prompt'. Query before jumping to
+ non-active group.
+
+ * compface.el (uncompface): Be verbose when changing
+ `uncompface-use-external'.
+
+ * gnus-art.el (gnus-button-handle-man, gnus-button-alist): Try to
+ handle manual section.
+
+2004-05-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-art.el (gnus-button-alist): Revert previous change.
+
+2004-05-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * message.el (message-idna-to-ascii-rhs-1): Fix typo.
+
+2004-05-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-msg.el (gnus-inews-do-gcc): Don't use read-only-p to see
+ whether backend can accept message.
+
+ * message.el (message-idna-to-ascii-rhs-1): Don't use equalp.
+
+2004-05-18 Kai Grossjohann <kgrossjo@eu.uu.net>
+
+ * nntp.el (nntp-request-set-mark, nntp-request-update-info):
+ Avoid creating directory when nntp-marks-is-evil is true.
+ Reported by Reiner Steib.
+
+2004-05-18 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-picon.el (gnus-picon-style): New variable.
+ (gnus-picon-insert-glyph): Added optional `nostring' argument.
+ (gnus-picon-transform-address): Support `gnus-picon-style'. From
+ Jesper Harder <harder@ifa.au.dk>.
+
+2004-05-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-fill-field): Return point.
+ (message-generate-headers): Go to end of field.
+
+ * gnus-start.el (gnus-get-unread-articles-in-group): Don't do
+ stuff for non-living groups.
+
+2004-05-18 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-art.el (gnus-article-followup-with-original)
+ (gnus-article-reply-with-original): gnus-mark-active-p ->
+ gnus-region-active-p.
+
+2004-05-17 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Fix messages, so they show
+ only when there is spam or ham to be processed.
+
+2004-05-17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mail-source.el (mail-source-delete-crash-box): Refactor.
+ (mail-source-fetch): Use it.
+ (mail-source-fetch-file): Ditto.
+ (mail-source-fetch-directory): Run postscript in loop.
+ (mail-source-fetch-pop): Delete.
+ (mail-source-fetch-maildir): Ditto.
+ (mail-source-fetch-imap): Ditto.
+
+ * imap.el (imap-authenticators): Comment out sasl.
+
+ * message.el (message-skip-to-next-address): New function.
+ (message-fill-header-address): Refactor.
+ (message-fill-address): Use it.
+ (message-delete-address): Use it.
+ (message-fill-header-general): Refactor.
+ (message-fill-field-address): Rename.
+ (message-narrow-to-field): Find the start of the header.
+ (message-header-format-alist): Don't pre-fill.
+ (message-fill-header): Removed.
+ (message-insert-header): New function.
+ (message-shorten-references): Use it.
+
+ * rfc2047.el (rfc2047-field-value): Strip props.
+
+ * mail-parse.el (mail-header-make-address): New alias.
+
+ * ietf-drums.el (ietf-drums-make-address): New function.
+
+ * imap.el: Add compiler directives.
+
+ * gnus-score.el (gnus-score-edit-done): run-hook->run-hooks.
+
+ * gnus-art.el (article-decode-idna-rhs): Don't use
+ message-idna-inside-rhs-p.
+
+2004-05-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * message.el (message-idna-inside-rhs-p): Removed.
+ (message-idna-to-ascii-rhs-1): Use proper address parsing.
+
+ * gnus-art.el (gnus-emphasis-alist): Removed strikethru; too many
+ false positives.
+
+2004-05-16 Kim Minh Kaplan <kmkaplan-AwwS6Bc0PDVoiYX5Tdu9fQ@public.gmane.org>
+
+ * imap.el (imap-sasl-make-mechanisms): Use sasl.
+
+2004-05-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * nneething.el (nneething-file-name): Don't create spurions
+ files.
+
+ * gnus-msg.el (gnus-inews-do-gcc): Ignore read-only groups.
+ (gnus-inews-do-gcc): Remove sleep.
+
+ * gnus-art.el (gnus-mime-delete-part): Error message when no MIME
+ part under point.
+
+ * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
+ (gnus-agent-regenerate-group): Using nil messages aren't valid.
+
+2004-05-15 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Fixed (length).
+
+2004-05-14 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Fix to produce "marking spam
+ as expired without moving it" message when there are spam
+ messages left.
+
+2004-05-14 Nelson Ferreira <nelson.ferreira@verizon.net> (tiny change)
+
+ * gnus-dup.el (gnus-dup-unsuppress-article): don't assume the mail
+ header is not nil.
+
+2004-05-14 Kai Grossjohann <kgrossjo@eu.uu.net>
+
+ * nntp.el (nntp-request-set-mark, nntp-request-update-info): Call
+ nntp-possibly-create-directory, not nntp-possibly-change-group.
+ (nntp-marks-changed-p): New arg SERVER.
+ (nntp-request-update-info): Adjust caller.
+
+2004-05-14 Kai Grossjohann <kai@emptydomain.de>
+
+ * nntp.el (nntp-save-marks): Pass missing arg.
+
+2004-05-13 Kai Grossjohann <kai.grossjohann@gmx.net>
+
+ * nntp.el: Support marks.
+ (nntp-marks-is-evil, nntp-marks-file-name, nntp-marks)
+ (nntp-marks-modtime, nntp-marks-directory): New variables.
+ (nntp-request-set-mark, nntp-request-update-info)
+ (nntp-possibly-create-directory, nntp-marks-changed-p)
+ (nntp-save-marks, nntp-open-marks, nntp-marks-directory): New
+ functions.
+
+2004-05-12 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-score.el (gnus-score-insert-help): Use
+ gnus-select-lowest-window.
+
+ * gnus-ems.el (gnus-select-lowest-window): Copy definition of
+ appt-select-lowest-window and rename to gnus-select-lowest-window.
+
+ * gnus.el: do.
+
+2004-05-12 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * rfc2047.el (rfc2047-encode): Use uppercase letters to specify
+ encodings of MIME-encoded words, in order to improve
+ interoperability with several broken MUAs.
+
+2004-05-07 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * mm-view.el (mm-inline-text-html-render-with-w3): Check META
+ tags, only when charsets are not specified in headers.
+ (mm-inline-text-html-render-with-w3m): Ditto.
+
+2004-05-06 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * gnus-art.el (article-strip-banner): Use MIME-encoded from fields
+ instead of MIME-decoded from fields when checking
+ `gnus-article-address-banner-alist'.
+
+2004-05-03 Jesper Harder <harder@ifa.au.dk>
+
+ * nnrss.el (nnrss-check-group, nnrss-read-group-data): Hash on
+ description rather than subject.
+
+2004-05-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump.
+
+2004-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+ * gnus.el: No Gnus v0.2 is released.
+
+2004-05-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-agent.el (gnus-agent-read-agentview): Inline
+ gnus-uncompress-range.
+
+2004-05-01 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * spam.el (spam-bsfilter-path): Use `executable-find' instead of
+ `exec-installed-p'.
+
+2004-04-30 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+ * gnus.el (spam-process, spam-autodetect-methods): Add
+ bsfilter and bsfilter-headers.
+
+ * spam.el (spam-bsfilter): New customize group.
+ (spam-use-bsfilter, spam-use-bsfilter-headers, spam-bsfilter-path)
+ (spam-bsfilter-header, spam-bsfilter-probability-header)
+ (spam-bsfilter-spam-switch, spam-bsfilter-ham-switch)
+ (spam-bsfilter-spam-strong-switch, spam-bsfilter-ham-strong-switch)
+ (spam-bsfilter-database-directory): New options.
+ (spam-install-hooks, spam-list-of-processors, spam-list-of-checks)
+ (spam-list-of-statistical-checks, spam-registration-functions):
+ Add `spam-use-bsfilter' and `spam-use-bsfilter-headers'.
+ (spam-bsfilter-score): New command.
+ (spam-check-bsfilter-headers, spam-check-bsfilter)
+ (spam-bsfilter-register-with-bsfilter)
+ (spam-bsfilter-register-spam-routine)
+ (spam-bsfilter-unregister-spam-routine)
+ (spam-bsfilter-register-ham-routine)
+ (spam-bsfilter-unregister-ham-routine): New functions.
+ (spam-generic-score): Support bsfilter; Accept an optional argument
+ to recalcurate spam score even if scoring header has already been
+ added.
+ (spam-bogofilter-score, spam-spamassassin-score): Accept an
+ optional argument to recalcurate spam score even if scoring header
+ has already been added.
+
+2004-04-29 Jesper Harder <harder@ifa.au.dk>
+
+ * nnrss.el (nnrss-get-namespace-prefix): Use string= to compare
+ strings! Reported by David D. Smith <davidsmith@acm.org>.
+ (nnrss-check-group, nnrss-read-group-data): Hash on Subject if
+ link is missing.
+
+2004-04-28 Jesper Harder <harder@ifa.au.dk>
+
+ * html2text.el (html2text-replace-list): Add &amp; and &apos;.
+ (html2text-get-attr): Rewrite.
+
+ * message.el (message-setup-1): Remove redundant put-text-property
+ on mail-header-separator.
+
+2004-04-27 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-cache-whitespace)
+ (gnus-registry-action, gnus-registry-spool-action)
+ (gnus-registry-split-fancy-with-parent): Change message levels
+ from 5 to 3 or 7, as needed.
+
+ * spam.el (spam-summary-prepare-exit)
+ (spam-mark-junk-as-spam-routine, spam-fetch-field-fast)
+ (spam-split, spam-find-spam, spam-log-undo-registration)
+ (spam-check-blackholes, spam-enter-ham-BBDB): Changed message
+ level from 5 to 6.
+
+2004-04-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-ems.el: Autoload appt-select-lowest-window (revert
+ 2004-03-04 change).
+
+2004-04-25 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el (spam-stat-score-buffer): Simplify mapcar usage.
+ Use mapc when appropriate.
+
+ * sieve-manage.el (sieve-manage-open): do.
+
+ * nnweb.el (nnweb-insert-html): do.
+
+ * nnvirtual.el (nnvirtual-catchup-group, nnvirtual-partition-sequence)
+ (nnvirtual-partition-sequence, nnvirtual-create-mapping): do.
+
+ * nnspool.el (nnspool-request-group): do.
+
+ * nnrss.el (nnrss-opml-export, nnrss-find-el, nnrss-order-hrefs):
+ do.
+
+ * nnml.el (nnml-request-update-info): do.
+
+ * nnmh.el (nnmh-request-group, nnmh-request-list-1, nnmh-active-number)
+ (nnmh-request-create-group, nnmh-update-gnus-unreads): do.
+
+ * nnimap.el (nnimap-request-close, nnimap-acl-edit)
+ (nnimap-request-set-mark): do.
+
+ * nnfolder.el (nnfolder-request-update-info): do.
+
+ * mm-view.el (mm-pkcs7-signed-magic, mm-pkcs7-enveloped-magic):
+ do.
+
+ * mml.el (mml-destroy-buffers, mml-compute-boundary-1): do.
+
+ * gnus-uu.el (gnus-uu-find-articles-matching): do.
+
+ * gnus-topic.el (gnus-topic-check-topology, gnus-topic-remove-group):
+ do.
+
+ * gnus-sum.el (gnus-summary-fetch-faq, gnus-read-move-group-name):
+ do.
+
+ * gnus-score.el (gnus-score-load-file, gnus-sort-score-files): do.
+
+ * gnus-nocem.el (gnus-nocem-scan-groups): do.
+
+ * gnus-int.el (gnus-start-news-server): do.
+
+ * gnus-group.el (gnus-group-make-kiboze-group)
+ (gnus-group-browse-foreign-server): do.
+
+2004-04-22 Teodor Zlatanov <tzz@lifelogs.com>
+
+ FIXME: Make separate entries for each person.
+
+ From Dan Christensen <jdc@uwo.ca>, asjo@koldfront.dk (Adam
+ Sj,Ax(Bgren), Wes Hardaker <wes@hardakers.net>, and Michael Shields
+ <shields@msrl.com>:
+
+ * spam.el (spam-necessary-extra-headers): Get the extra headers we
+ may need for spam sorting and scoring.
+ (spam-user-format-function-S): Add user format function suitable for
+ general use.
+ (spam-article-sort-by-spam-status): Add sorting function for summary
+ sorting.
+ (spam-extra-header-to-number): Add function to get a score from a
+ header.
+ (spam-summary-score): Add function to get a numeric score from the
+ headers.
+ (spam-generic-score): Fixed function doc, was in wrong place.
+ (spam-initialize): Take symbols when it's run, and install the
+ extra headers that spam-necessary-extra-headers thinks we need.
+
+2004-04-21 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Add logic and message fix.
+ Reported by bojohan+news@dd.chalmers.se (Johan Bockg,Ae(Brd).
+
+2004-04-17 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-sum.el (gnus-set-global-variables)
+ (gnus-build-all-threads, gnus-get-newsgroup-headers)
+ (gnus-article-get-xrefs, gnus-summary-best-group)
+ (gnus-summary-next-article, gnus-summary-enter-digest-group)
+ (gnus-summary-set-bookmark, gnus-offer-save-summaries)
+ (gnus-summary-update-info, gnus-kill-or-deaden-summary): Use
+ with-current-buffer.
+
+2004-04-16 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Simplify logic.
+ (spam-fetch-article-header): Read the article header if it's not
+ available.
+ (spam-list-articles): Simplify logic.
+ (spam-filelist-register-routine): Fix bug with unregister-list.
+
+ * gnus-registry.el: Fix comments at beginning.
+
+2004-04-16 Jesper Harder <harder@ifa.au.dk>
+
+ * message.el (message-cater-to-broken-inn): Remove.
+ (message-shorten-references): Make sure the total folded length of
+ References is shorter than 998 characters to cater to a bug in INN
+ 2.3. Also, don't pretend that references aren't folded -- this
+ hasn't worked for a while.
+
+2004-04-15 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-agent.el (gnus-agentize):
+ gnus-agent-send-mail-real-function no longer set to current value
+ of message-send-mail-function but rather a lambda that calls
+ message-send-mail-function. The change makes the agent real-time
+ responsive to user changes to message-send-mail-function.
+
+2004-04-15 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * legacy-gnus-agent.el
+ (gnus-agent-convert-to-compressed-agentview): Fixed typos with
+ help from Florian Weimer <fw@deneb.enyo.de>
+
+2004-04-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnmail.el (nnmail-cache-insert): Revert last change.
+
+2004-04-14 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nnmail.el (nnmail-cache-insert): Always check whether
+ nnmail-cache-ignore-groups matches a group name.
+
+2004-04-13 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-fetch-field-fast, spam-generate-fake-headers)
+ (spam-find-spam, spam-log-processing-to-registry)
+ (spam-log-registered-p, spam-log-unregistration-needed-p)
+ (spam-log-undo-registration): Use gnus-message instead of
+ gnus-error, none of these errors are fatal.
+
+ * gnus-registry.el (gnus-registry-clean-empty-function)
+ (gnus-registry-clean-empty): Remove only empty entries without
+ extra data.
+
+2004-04-12 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam-stat.el (spam-stat-buffer-change-to-spam)
+ (spam-stat-buffer-change-to-non-spam): Change (error) to
+ (gnus-message 8) invocation.
+
+2004-04-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nntp.el (nntp-via-netcat-command): New variable.
+ (nntp-via-netcat-switches): New variable.
+ (nntp-open-via-rlogin-and-netcat): New function.
+ (nntp-open-connection-function): Doc fix.
+ (nntp-telnet-command): Doc fix.
+ (nntp-end-of-line): Doc fix.
+ (nntp-via-rlogin-command): Doc fix.
+ (nntp-via-user-name): Doc fix.
+ (nntp-via-address): Doc fix.
+
+2004-04-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mml2015.el (mml2015-use): Avoid the "Recursive load suspected"
+ error in Emacs 21.1.
+
+2004-04-08 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-start.el (gnus-get-unread-articles): Fix last commit.
+
+2004-04-07 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * gnus-agent.el (gnus-agent-total-fetched-hashtb): New variable.
+ (gnus-agent-with-refreshed-group): New macro.
+ (gnus-agent-rename-group): New function.
+ (gnus-agent-delete-group): New function.
+ (gnus-agent-save-group-info): Use gnus-command-method when
+ `method' parameter is nil. Don't write nil entries into the
+ active file.
+ (gnus-agent-get-group-info): New function.
+ (gnus-agent-fetch-articles): Use
+ gnus-agent-update-files-total-fetched-for to increment disk space
+ used.
+ (gnus-agent-fetch-headers, gnus-agent-save-alist): Use
+ gnus-agent-update-view-total-fetched-for to increment disk space
+ used.
+ (gnus-agent-get-local): Added optional parameters to avoid calling
+ gnus-group-real-name and gnus-find-method-for-group.
+ (gnus-agent-set-local): Delete stored entry if either min, or max,
+ are nil.
+ (gnus-agent-fetch-session): Reworded error/quit messages. On
+ quit, use gnus-agent-regenerate-group to record existance of any
+ articles fetched to disk before the quit occurred.
+ (gnus-agent-expire-group-1): Use gnus-agent-with-refreshed-group,
+ gnus-agent-update-view-total-fetched-for, and
+ gnus-agent-update-files-total-fetched-for to decrement disk space
+ used.
+ (gnus-agent-retrieve-headers): Use
+ gnus-agent-update-view-total-fetched-for to increment disk space
+ used.
+ (gnus-agent-regenerate-group): Replace gnus-group-update-group
+ with gnus-agent-update-files-total-fetched-for to decrement disk
+ space and fresh group buffer.
+ (gnus-agent-inhibit-update-total-fetched-for): New variable.
+ (gnus-agent-need-update-total-fetched-for): New variable.
+ (gnus-agent-update-files-total-fetched-for): New function.
+ (gnus-agent-update-view-total-fetched-for): New function.
+ (gnus-agent-total-fetched-for): New function.
+
+ * gnus-cache.el (gnus-cache-save-buffers): Use
+ gnus-cache-update-overview-total-fetched-for to change disk space
+ used by this group.
+ (gnus-cache-possibly-enter-article): Use
+ gnus-cache-update-file-total-fetched-for to increment disk space
+ used by this group.
+ (gnus-cache-possibly-remove-article): Use
+ gnus-cache-update-file-total-fetched-for to decrement disk space
+ used by this group.
+ (gnus-cache-generate-nov-databases): Purge total fetched cache.
+ (gnus-cache-rename-group): New function.
+ (gnus-cache-delete-group): New function.
+ (gnus-cache-inhibit-update-total-fetched-for): New variable.
+ (gnus-cache-need-update-total-fetched-for): New variable.
+ (gnus-cache-with-refreshed-group): New macro.
+ (gnus-cache-update-file-total-fetched-for): New function.
+ (gnus-cache-update-overview-total-fetched-for): New function.
+ (gnus-cache-rename-group-total-fetched-for): New function.
+ (gnus-cache-delete-group-total-fetched-for): New function.
+ (gnus-cache-total-fetched-for): New function.
+
+ * gnus-group.el: Require gnus-sum and autoload functions to
+ resolve warnings when gnus-group.el compiled alone.
+ (gnus-group-line-format): Documented new %F
+ (size of Fetched data) group line format; identifies disk space
+ used by agent and cache.
+ (gnus-group-line-format-alist): Defined new F format.
+ (gnus-total-fetched-for): New function.
+ (gnus-group-delete-group): No longer update
+ gnus-cache-active-altered as gnus-request-delete-group now keeps
+ the cache in sync.
+ (gnus-group-list-active): Let the agent store a server's active
+ list if currently plugged.
+
+ * gnus-int.el (gnus-request-delete-group): Use
+ gnus-cache-delete-group and gnus-agent-delete-group to keep the
+ local disk in sync with the server.
+ (gnus-request-rename-group): Use
+ gnus-cache-rename-group and gnus-agent-rename-group to keep the
+ local disk in sync with the server.
+
+ * gnus-start.el (gnus-get-unread-articles): Cosmetic
+ simplification to logic.
+
+ * gnus-util.el (gnus-rename-file): New function.
+
+2004-04-07 Christian Neukirchen <chneukirchen@yahoo.de> (tiny change)
+
+ * mm-util.el (mm-image-load-path): Handle nil in load-path.
+
+2004-04-07 Jesper Harder <harder@ifa.au.dk>
+
+ * rfc2047.el (rfc2047-encoded-word-regexp): Remove unnecessary
+ '+'. Reported by Stefan Wiens <s.wi@gmx.net>.
+
+2004-04-06 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-cache.el (gnus-cache-save-buffers): Check if buffer is
+ alive. Reported by Laurent Martelli <laurent@aopsys.com>.
+
+2004-04-03 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.el (gnus-getenv-nntpserver): Strip whitespace.
+
+2004-04-02 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-set-difference): Add function to replace
+ gnus-set-difference in spam.el.
+ (spam-summary-prepare-exit): Use spam-set-difference.
+
+2004-03-29 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus-registry.el (gnus-registry-cache-file): Update to use
+ gnus-dribble-directory OR gnus-home-directory OR ~.
+ (gnus-registry-split-fancy-with-parent): Fix doc.
+
+2004-03-27 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-exchange-point-and-mark): Use
+ message-mark-active-p. Suggested by Jesper Harder
+ <harder@ifa.au.dk>.
+
+2004-03-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-exchange-point-and-mark): Don't activate
+ region if it was inactive. Suggested by Hiroshi Fujishima
+ <pooh@nature.tsukuba.ac.jp>.
+
+2004-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (article-display-face): Display Faces in the same
+ order as X-Faces.
+
+2004-03-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * nndoc.el (nndoc-forward-type-p): Recognize envelope From_.
+
+2004-03-23 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-recompute-hierarchical-structure): Remove.
+ (gnus-mime-multipart-functions): Revert 2004-03-19 change.
+ (gnus-article-mime-hierarchy): Remove.
+ (gnus-article-mime-hierarchy-next): Remove.
+ (gnus-article-mode): Revert 2004-03-19 change.
+ (gnus-article-setup-buffer): Revert 2004-03-19 change.
+ (gnus-insert-mime-button): Revert 2004-03-19 change.
+ (gnus-mime-accumulate-hierarchy): Remove.
+ (gnus-mime-enter-multipart): Remove.
+ (gnus-mime-leave-multipart): Remove,
+ (gnus-mime-display-part): Revert 2004-03-19 change.
+ (gnus-mime-display-alternative): Revert 2004-03-19 change.
+
+ * mml.el (mml-preview): Revert 2004-03-19 change.
+
+2004-03-18 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change)
+
+ * gnus-sum.el (gnus-newsgroup-variables): Doc fix.
+
+2004-03-22 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-decode.el (mm-save-part): Bind enable-multibyte-characters to
+ t while entering a file name using the mm-with-multibyte macro.
+ Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
+
+ * mm-util.el (mm-with-multibyte): New macro.
+
+2004-03-19 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-mime-recompute-hierarchical-structure): New
+ user option.
+ (gnus-mime-multipart-functions): Doc and customization fix.
+ (gnus-article-mime-hierarchy): New variable.
+ (gnus-article-mime-hierarchy-next): New variable.
+ (gnus-article-mode): Make gnus-article-mime-hierarchy buffer-local.
+ (gnus-article-setup-buffer): Set gnus-article-mime-hierarchy and
+ gnus-article-mime-hierarchy-next to nil.
+ (gnus-insert-mime-button): Show hierarchy numbers.
+ (gnus-mime-accumulate-hierarchy): New function.
+ (gnus-mime-enter-multipart): New function.
+ (gnus-mime-leave-multipart): New function.
+ (gnus-mime-display-part): Recompute hierarchical MIME structure.
+ (gnus-mime-display-alternative): Show hierarchy numbers.
+
+ * mml.el (mml-preview): Set gnus-article-mime-hierarchy and
+ gnus-article-mime-hierarchy-next to nil.
+
+2004-03-19 Steve Youngs <sryoungs@bigpond.net.au>
+
+ * dns.el: Don't require gnus-xmas.
+
+2004-03-17 Jesper Harder <harder@ifa.au.dk>
+
+ * mml.el (mml-generate-mime-1): Don't use format=flowed with
+ inline PGP.
+ (mml-menu): Disable mml-quote-region if mark is inactive.
+
+2004-03-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-regenerate-group): Activate the group
+ when the group's active is not available.
+
+2004-03-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
+ error.
+
+2004-03-12 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * imap.el (imap-store-password): New variable.
+ (imap-interactive-login): Use it.
+ Suggested by Mark Plaksin <happy@mcplaksin.org>.
+
+2004-03-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-read-summary-keys): Restore new
+ window-start and hscroll to summary window.
-2004-05-19 Michael Schierl <schierlm-usenet@gmx.de> (tiny change)
+2004-03-12 Kevin Greiner <kgreiner@xpediantsolutions.com>
- * pgg-pgp.el (pgg-pgp-verify-region): Default when signature
- isn't a string.
+ * gnus-start.el (gnus-convert-old-newsrc): Only write the
+ conversion message to newsrc-dribble when an actual conversion is
+ performed.
+
+2004-03-10 Malcolm Purvis <malcolmpurvis@optushome.com.au> (tiny change)
+
+ * spam-stat.el (spam-stat-coding-system): Use mm-coding-system-p.
+
+2004-03-10 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-decode.el (mm-complicated-handles): New function reviving
+ former definition of mm-multiple-handles.
+
+ * gnus-art.el (gnus-mime-save-part-and-strip): Use it.
+ (gnus-mime-delete-part): Use it.
+
+2004-03-09 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-agent.el (gnus-agent-read-local): Bind
+ nnheader-file-coding-system to gnus-agent-file-coding-system to
+ avoid the implicit assumption that they will always be equal.
+ (gnus-agent-save-local): Bind buffer-file-coding-system, not
+ coding-system-for-write, as the with-temp-file macro first prints
+ to a buffer then saves the buffer.
+
+2004-03-09 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-edit-part): New function.
+ (gnus-mime-save-part-and-strip): Use it; do query instead of
+ signaling an error; don't use mm-multiple-handles.
+ (gnus-mime-delete-part): Ditto.
+
+2004-03-08 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-agent.el (gnus-agent-read-agentview): Removed support for
+ old file versions.
+ (gnus-group-prepare-hook): Removed function that converted list
+ form of gnus-agent-expire-days to group properties.
+
+ * gnus-int.el: Autoload gnus-agent-regenerate-group.
+ (gnus-request-accept-article): Re-indented.
+
+ * gnus-start.el (gnus-convert-old-newsrc): Registered new
+ converters to handle old agent file formats. Added logic for a
+ "backup before upgrading warning".
+ (gnus-convert-mark-converter-prompt): Developers can mark
+ functions as needing (default), or not needing,
+ gnus-convert-old-newsrc's "backup before upgrading warning".
+ (gnus-convert-converter-needs-prompt): Tests whether the user
+ should be protected from potentially irreversable changes by the
+ function.
+
+ * legacy-gnus-agent.el (): New. Provides converters that are only
+ loaded when gnus-convert-old-newsrc needs to call them.
+
+2004-03-08 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mail-source.el (mail-source-touch-pop): Doc fix.
+
+ * message.el (message-smtpmail-send-it): Doc fix.
2004-03-05 Jesper Harder <harder@ifa.au.dk>
* sha1-el.el (sha1-maximum-internal-length): Doc fix.
+ * nnmail.el (nnmail-split-fancy): do.
+
+ * gnus-kill.el (gnus-kill, gnus-execute): do.
+
+2004-03-05 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus-sum.el (gnus-widget-reversible-match)
+ (gnus-widget-reversible-to-internal)
+ (gnus-widget-reversible-to-external): New functions.
+ (gnus-widget-reversible): New widget.
+ (gnus-article-sort-functions, gnus-thread-sort-functions): Use it.
+
+2004-03-05 Kai Grossjohann <kgrossjo@eu.uu.net>
+
+ * gnus-sum.el (gnus-thread-sort-functions)
+ (gnus-article-sort-functions): Document `(not F)' items.
+
+2004-03-04 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-use-gmane-xref): Add new backend.
+ (spam-gmane-xref-spam-group): Add variable to control the name of the
+ Gmane spam group.
+ (spam-blackhole-servers, spam-blackhole-good-server-regex)
+ (spam-regex-headers-spam, spam-regex-headers-ham)
+ (spam-regex-body-spam, spam-regex-body-ham): Clarify docs.
+ (spam-list-of-checks): Add spam-use-gmane-xref to list of
+ backends and checks.
+ (spam-check-gmane-xref): Add function for spam-use-gmane-xref.
+
+ * gnus.el (spam-autodetect-methods): Add spam-use-gmane-xref as
+ an autodetect method.
+
+2004-03-04 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-int.el (gnus-request-accept-article): Inform the agent that
+ articles are being added to a group.
+ (gnus-request-replace-article): Inform the agent that articles
+ need to be uncached as the cached contents are no longer valid.
+
2004-03-04 Katsumi Yamaoka <yamaoka@jpl.org>
+ * binhex.el: Don't autoload executable-find.
+
* canlock.el: Don't autoload mail-fetch-field.
+ * gnus-ems.el: Don't autoload appt-select-lowest-window.
+
+ * gnus-msg.el: Don't autoload news-reply-mode, news-setup,
+ rmail-dont-reply-to and rmail-output.
+
+ * gnus-score.el: Don't autoload ffap-string-at-point.
+
+ * gnus-setup.el: Don't autoload sc-cite-original.
+
+ * imap.el: Don't autoload base64-decode-string,
+ base64-encode-string and md5.
+
+ * message.el: Autoload rmail-dont-reply-to, rmail-msg-is-pruned
+ and rmail-msg-restore-non-pruned-header.
+
+ * mm-decode.el: Don't autoload executable-find.
+
+ * mm-url.el: Don't autoload executable-find.
+
+ * mm-view.el: Don't autoload diff-mode.
+
+ * nndb.el: Don't autoload news-reply-mode, news-setup,
+ cancel-timer and telnet.
+
+ * password.el: Don't autoload run-at-time for Emacs.
+
+ * sha1-el.el: Don't autoload executable-find.
+
+ * sieve-mode.el: Don't autoload c-mode.
+
+ * uudecode.el: Don't autoload executable-find.
+
+2004-03-04 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-agent.el (gnus-agent-file-header-cache): Removed.
+ (gnus-agent-possibly-alter-active): Avoid null in numeric
+ comparison.
+ (gnus-agent-set-local): Refuse to save null in local object table.
+ (gnus-agent-regenerate-group): The REREAD parameter can now be a
+ list of articles that will be marked as unread.
+
+2004-03-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * rfc2047.el (rfc2047-encoded-word-regexp): Mismatched paren.
+
+2004-03-04 Jesper Harder <harder@ifa.au.dk>
+
+ * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
+ language tags.
+
+2004-03-03 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus-agent.el (gnus-agent-read-local, gnus-agent-save-local):
+ Don't bind "obarray".
+
+ * gnus-sum.el (gnus-thread-sort-functions): Added
+ `gnus-thread-sort-by-most-recent-number' and
+ `gnus-thread-sort-by-most-recent-date'.
+ Reported by Kai Grossjohann <kai@emptydomain.de>.
+
+2004-03-03 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-cus.el (gnus-agent-customize-category): Mismatched paren.
+
+2004-03-02 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-cus.el (gnus-agent-customize-category): Removed
+ ignore-errors macro reference that required cl to be loaded at
+ run-time.
+
+ * gnus-range.el (gnus-sorted-range-intersection): Now accepts
+ single-interval range of the form (min . max). Previously the
+ range had to look like ((min . max)). Likewise, return
+ (min . max) rather than ((min . max)).
+ (gnus-range-map): Use gnus-range-normalize to accept
+ single-interval range.
+
+ * gnus-sum.el (gnus-summary-highlight-line): Articles stored in
+ the cache, but not the agent, now appear with their usual face.
+
+2004-03-01 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-wash-html-with-w3m): Don't make the
+ w3m-safe-url-regexp variable buffer-local.
+
+ * mm-view.el (mm-inline-text-html-render-with-w3m): Ditto.
+
+2004-02-27 Simon Josefsson <jas@extundo.com>
+
+ * gnus-sum.el (gnus-move-group-prefix-function): Add, default to
+ gnus-group-real-prefix.
+ (gnus-summary-move-article): Use it, instead of
+ gnus-group-real-prefix.
+
+2004-02-27 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-art.el (gnus-article-wash-html-with-w3m): Make the
+ w3m-safe-url-regexp variable buffer-local and set it as the value
+ of mm-w3m-safe-url-regexp.
+
+ * mm-view.el (mm-inline-text-html-render-with-w3m): Ditto.
+
+ * gnus-msg.el (gnus-setup-message): Ignore an article copy while
+ parsing gnus-posting-styles when the message is not for replying.
+
+ * nnrss.el (nnrss-opml-export): Use
+ mm-set-buffer-file-coding-system instead of
+ set-buffer-file-coding-system.
+
+2004-02-27 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el: Pedantic docstring and whitespace fixes (courtesy
+ of checkdoc.el).
+ * nnrss.el: do.
+ * gnus-mlspl.el: do.
+ * gnus-ml.el: do.
+ * gnus-srvr.el: do.
+
+ * nnrss.el (nnrss-opml-export): Turn on sgml-mode.
+
+2004-02-27 Kevin Ryde <user42@zip.com.au> (tiny change)
+
+ * gnus.el (gnus-group, gnus-summary, gnus-summary-sort):
+ Corrections to custom-manual links.
+
+ * gnus-art.el (gnus-article): Ditto.
+
+ * mm-decode.el (mime-display, mime-security): Ditto.
+
+2004-02-26 Jesper Harder <harder@ifa.au.dk>
+
+ * flow-fill.el: Typo.
+
+2004-02-26 Andrew Cohen <cohen@andy.bu.edu>
+
+ * spam-wash.el: New file.
+
+2004-02-26 Mark A. Hershberger <mah@everybody.org>
+
+ * nnrss.el (nnrss-opml-import, nnrss-opml-export): New functions.
+
+2004-02-26 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-summary-prepare-exit): Fix gnus-set-difference: needs
+ to be run with new-articles as LIST1, not LIST2.
+ (spam-registration-functions): Add spam-use-ham-copy as a nil
+ registration backend.
+
+2004-02-26 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el (spam-stat-washing-hook): New option.
+ (spam-stat-buffer-words): Use it.
+ (spam-stat-process-directory, spam-stat-test-directory): Use
+ insert-file-contents-literally.
+ (spam-stat-coding-system): New variable.
+ (spam-stat-load, spam-stat-save): Use it.
+
+2004-02-25 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * spam-report.el (spam-report-plug-agent): Quote
+ spam-report-url-to-file and spam-report-url-ping-plain.
+
+2004-02-25 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-art.el (gnus-button-alist, gnus-header-button-alist): Allow
+ / in mailto URLs.
+
+2004-02-24 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * spam-report.el (spam-report-process-queue): Fix interactive use.
+ (spam-report-url-ping-temp-agent-function, spam-report-plug-agent)
+ (spam-report-unplug-agent): Doc fixes.
+ (spam-report-url-ping-mm-url, spam-report-url-to-file)
+ (spam-report-agentize, spam-report-deagentize): Autoload
+
+2004-02-24 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * message.el (message-setup-fill-variables): Add mml tags to
+ paragraph-start and paragraph-separate. Suggested by Andrew Korty
+ <ajk@iu.edu>.
+ (message-mode): Don't modify paragraph-separate there.
+
+2004-02-17 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * compface.el (uncompface-use-external): Default to undecided.
+ (uncompface-use-external-threshold): New variable.
+ (uncompface-float-time): New macro.
+ (uncompface): Determine whether to use the external decoder if
+ uncompface-use-external is undecided.
+
+2004-02-15 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * mm-view.el (mm-inline-image-emacs): Don't insert blank lines
+ after images.
+
+ * gnus-art.el (gnus-mime-display-single): Remove dead code.
+
+2004-02-14 Jesper Harder <harder@ifa.au.dk>
+
+ * nnrss.el (nnrss-request-article, nnrss-find-el): Cleanup.
+
+ * html2text.el (html2text-get-attr, html2text-fix-paragraph): do
+
+ * gnus-sum.el (gnus-summary-limit-to-age)
+ (gnus-summary-limit-children): do.
+
+ * gnus-int.el (gnus-request-scan): do.
+
+ * gnus-group.el (gnus-group-suspend): do.
+
+ * gnus-cus.el (gnus-agent-cat-prepare-category-field): do.
+
+ * gnus-cite.el (gnus-cite-parse-attributions): do.
+
+ * gnus-agent.el (gnus-summary-set-agent-mark)
+ (gnus-agent-regenerate-group): do.
+
+ * deuglify.el (gnus-article-outlook-unwrap-lines): do.
+
+ * binhex.el (binhex-decode-region-internal): do.
+
+2004-02-12 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-fun.el (gnus-face-properties-alist): New user option.
+ (gnus-display-x-face-in-from): Use it.
+
+ * gnus-art.el (article-display-face): Ditto.
+
+ * compface.el (uncompface-use-external): Default to nil.
+
+2004-02-12 Jesper Harder <harder@ifa.au.dk>
+
+ * nntp.el (nntp-erase-buffer): New function.
+ (nntp-retrieve-data, nntp-send-command)
+ (nntp-send-buffer, nntp-retrieve-groups, nntp-handle-authinfo)
+ (nntp-possibly-change-group): Use it.
+
+ * nnnil.el (nnnil-retrieve-headers, nnnil-request-list): Use
+ with-current-buffer.
+
+2004-02-12 TAKAI Kousuke <tak@kmc.gr.jp>
+
+ * compface.el: Merge the ELisp-based uncompface program.
+ (compface): New customization group.
+ (uncompface-use-external): New user option.
+ (uncompface): Call uncompface-internal if uncompface-use-external
+ is nil.
+ (uncompface-internal): New function. Note that there are also
+ some other functions and variables added for this function.
+
+2004-02-10 Jesper Harder <harder@ifa.au.dk>
+
+ * nnrss.el (nnrss-read-group-data): Initialize nnrss-group-hashtb
+ if necessary.
+
+2004-02-09 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam-report.el (spam-report-unplug-agent)
+ (spam-report-plug-agent, spam-report-deagentize)
+ (spam-report-agentize, spam-report-url-ping-temp-agent-function):
+ Add support for the Agent in spam-report: when unplugged, report to a
+ file; when plugged, submit all the requests.
+
+ * spam.el (spam-register-routine): Fix message about
+ registration.
+
+2004-02-09 Jesper Harder <harder@ifa.au.dk>
+
+ * rfc2047.el (rfc2047-qp-or-base64): New function to reduce
+ dependencies.
+ (rfc2047-encode): Use it.
+
+ * gnus-art.el (gnus-button-marker-list): Move before first
+ reference.
+
+ * imap.el (imap-parse-flag-list, imap-parse-body-extension)
+ (imap-parse-body): Fix format string mismatch.
+
+ * gnus-score.el (gnus-summary-increase-score): do.
+
+ * nnrss.el (nnrss-close): New function.
+
+2004-02-08 Jesper Harder <harder@ifa.au.dk>
+
+ * nnrss.el (nnrss-make-filename): New function.
+ (nnrss-request-delete-group, nnrss-read-server-data)
+ (nnrss-save-server-data, nnrss-read-group-data)
+ (nnrss-save-group-data): Use it.
+ (nnrss-save-server-data, nnrss-save-group-data): Use gnus-prin1.
+ (nnrss-read-server-data, nnrss-read-group-data): Use load.
+ (nnrss-group-hashtb): Make it a hash table rather than an obarray.
+
+2004-02-07 Jesper Harder <harder@ifa.au.dk>
+
+ * mml.el (mml-compute-boundary-1): Don't uncompress files.
+
+2004-02-06 Jesper Harder <harder@ifa.au.dk>
+
+ * mml.el (mml-mode, mml-x-dnd-attach-file): Attach drop and drag
+ files.
+
+ * message.el (message-generate-headers-first): Don't quote nil
+ and t in docstrings.
+
+ * imap.el (imap-id): do.
+
+ * gnus-agent.el (gnus-agent-consider-all-articles)
+ (gnus-agent-queue-mail): do.
+
+2004-02-05 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * spam-report.el (spam-report-process-queue): New function.
+ Process requests from `spam-report-requests-file'.
+ (spam-report-process-queue): Doc fix.
+
+2004-02-05 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-register-routine)
+ (spam-log-processing-to-registry, spam-log-registered-p)
+ (spam-log-unregistration-needed-p, spam-log-undo-registration):
+ Change "check" to "spam-check" for semi-clarity.
+
+2004-02-05 Jesper Harder <harder@ifa.au.dk>
+
+ * pop3.el: Require nnheader.
+
+ * mml-smime.el: Require cl. Autoload message-fetch-field.
+
+ * mml-sec.el (mml-signencrypt-style): Don't depend on Gnus.
+
+ * gnus-picon.el: Require cl.
+
+ * gnus-fun.el: Require gnus-ems and gnus-util.
+
+ * gnus.el (gnus-method-to-server): Move defsubst before first use.
+
+ * gnus-diary.el (gnus-diary-header-schedule): caddr -> car (cddr
+
+ * gnus-art.el (gnus-article-edit-mode): Define before first
+ reference.
+
+2004-02-04 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-uu.el (gnus-uu-check-correct-stripped-uucode): Simplify.
+ (gnus-uu-post-encoded): Use point-at-bol.
+
+ * gnus-topic.el (gnus-group-active-topic-p): do.
+
+ * gnus-start.el (gnus-newsrc-to-gnus-format): do.
+
+ * gnus-group.el (gnus-group-kill-region): do.
+
+ * gnus-art.el (article-date-ut): do.
+
+ * message.el (message-fetch-field): Remove redundant
+ case-fold-search binding.
+ (message-narrow-to-field): Simplify.
+
+2004-02-03 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * spam.el (spam-directory): Derive from `gnus-directory'.
+
+ * spam-report.el (spam-report-url-to-file)
+ (spam-report-requests-file): New function and variable for offline
+ reporting.
+ (spam-report-url-ping-function): Add `spam-report-url-to-file'
+ and user defined function.
+ (spam-report-url-ping-mm-url): Remove doubled slash.
+
+2004-02-03 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-list-of-processors): Fix spamassassin variable names.
+
+2004-02-03 Jesper Harder <harder@ifa.au.dk>
+
+ * spam.el (spam-check-spamoracle, spam-spamoracle-learn): Fix
+ format string mismatch.
+
+ * sieve.el (sieve-deactivate-all): do.
+
+ * nnfolder.el (nnfolder-request-set-mark, nnfolder-save-marks): do.
+
+ * nnlistserv.el (nnlistserv-kk-wash-article): do.
+
+ * nnml.el (nnml-request-set-mark, nnml-save-marks): do.
+
+ * mm-bodies.el (mm-7bit-chars): Don't include \r.
+
+2004-02-02 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-list-of-checks): Add spam-use-BBDB-eclusive to
+ the list of checks.
+
+2004-01-31 Jesper Harder <harder@ifa.au.dk>
+
+ * rfc2047.el (rfc2047-pad-base64): Deal with more cases of invalid
+ padding.
+
+2004-01-27 Ralf Angeli <angeli@iwi.uni-sb.de>
+
+ * mm-view.el (mm-fill-flowed): New variable.
+ (mm-inline-text): Use it.
+
+2004-01-27 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-spamassassin-register-ham-routine)
+ (spam-spamassassin-register-spam-routine): Fix function names.
+
+2004-01-27 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus.el (gnus-tmp-grouplens): Remove.
+ (gnus-summary-line-format): Remove grouplens.
+
+ * gnus-group.el (gnus-group-line-format): Ditto.
+
+ * gnus-spec.el (gnus-format-specs): Ditto.
+ (gnus-update-format-specifications): Flush the group format spec
+ cache if there's the grouplens stuff.
+ (gnus-parse-simple-format): Replace %l with the empty string.
+
+2004-01-27 Jerry James <james@xemacs.org> (tiny change)
+
+ * gnus-spec.el (gnus-parse-simple-format): Fix setq value
+ omission.
+
+2004-01-26 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * gnus-msg.el (gnus-summary-resend-message-edit): Call mime-to-mml.
+ Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
+
+2004-01-25 Paul Jarc <prj@po.cwru.edu>
+
+ * nnmaildir.el (nnmaildir--num-file, nnmaildir--mkfile,
+ nnmaildir--emlink-p, nnmaildir--eexist-p, nnmaildir--new-number):
+ New macros and functions.
+ * nnmaildir.el (nnmaildir--group-maxnum, nnmaildir--update-nov):
+ Handle > NLINK_MAX messages.
+ * nnmaildir.el (nnmaildir-request-set-mark): Use
+ nnmaildir--emlink-p and nnmaildir--eexist-p.
+
+2004-01-25 Alex Schroeder <alex@gnu.org>
+
+ * spam-stat.el (spam-stat-process-directory-age): New option.
+ (spam-stat-process-directory): Use it.
+
+2004-01-24 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.
+
+2004-01-23 Paul Jarc <prj@po.cwru.edu>
+
+ * nnmaildir.el (nnmaildir-request-set-mark): Handle the "too many
+ links" error.
+
+2004-01-23 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.el (gnus-tmp-grouplens): Define for the sake of backward
+ compatibility with old .newsrc.eld files.
+
+ * gnus-sum.el (gnus-summary-line-format-alist): Remove grouplens.
+
+ * gnus-start.el (gnus-1): do.
+
+ * gnus-group.el (gnus-group-line-format-alist): do.
+
+ * gnus.el (gnus-use-grouplens, gnus-visual): do.
+
+ * gnus-gl.el: Remove.
+
+2004-01-23 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-sum.el (gnus-adjust-marks): Now correctly handles a list of
+ marks consisting of a single range {for example, (3 . 5)} rather
+ than a list of a single range { ((3 . 5)) }.
+
+2004-01-23 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el (spam-stat-store-gnus-article-buffer): Use
+ with-current-buffer.
+ (spam-stat-store-current-buffer): Use insert-buffer-substring to
+ avoid consing a string.
+
+ * mm-util.el (mm-charset-synonym-alist): Add ks_c_5601-1987.
+ Remove obsolete entries for big5 and gb2312.
+
+2004-01-22 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-sum.el (gnus-adjust-marks): Avoid splicing null INTO the
+ uncompressed list.
+
+2004-01-22 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el (spam-stat-strip-xref): New function.
+ (spam-stat-process-directory): Use it.
+
+ * gnus-util.el (gnus-fetch-field): Don't bind case-fold-search
+ here -- it's done in message-fetch-field.
+
+2004-01-21 Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+ * gnus-agent.el (gnus-agent-queue-mail,
+ gnus-agent-prompt-send-queue): New variables.
+ (gnus-agent-send-mail): Use gnus-agent-queue-mail.
+ * gnus-draft.el (gnus-group-send-queue): Pass the group name
+ "nndraft:queue" along to gnus-draft-send. Use
+ gnus-agent-prompt-send-queue.
+ (gnus-draft-send): Rebind gnus-agent-queue-mail to nil when group
+ is "nndraft:queue". Suggested by Gaute Strokkenes
+ <gs234@srcf.ucam.org>
+
+ * gnus-agent.el (agent-disable-undownloaded-faces): Removed
+ (agent-enable-undownloaded-faces): Added
+ (gnus-agent-cat-groups): Use eval-and-compile, not
+ eval-when-compile, to define gnus-agent-set-cat-groups as the setf
+ method of gnus-agent-cat-groups even when the buffer has been
+ evaled.
+ (gnus-agent-save-active,gnus-agent-save-active-1): Merged to
+ delete gnus-agent-save-active-1.
+ (gnus-agent-save-groups): Deleted. Identical to
+ gnus-agent-save-active.
+ (gnus-agent-write-active): No longer adjust agent's copy of active
+ file as agent's adjustments are now stored in their own
+ file. Removed optional parameter.
+ (gnus-agent-possibly-alter-active): Ignore groups of unagentized
+ servers. Add use of min/max range limits from server's local
+ file.
+ (gnus-agent-save-alist): Removed unused optional argument.
+ (gnus-agent-load-local,gnus-agent-read-and-cache-local),
+ (gnus-agent-read-local,gnus-agent-save-local,gnus-agent-get-local),
+ (gnus-agent-set-local): A per-server file that keeps min/max range
+ limits for articles known to the agent. Provides a fast mechanism
+ for altering many active ranges.
+ (gnus-agent-expire-group,gnus-agent-expire): No longer save the
+ active file (local makes it unnecessary).
+ (gnus-agent-regenerate-group): Fixed XEmacs compatibility.
+
+ * gnus-cus.el (agent-disable-undownloaded-faces): Removed
+ (agent-enable-undownloaded-faces): Added
+
+ * gnus-draft.el (gnus-draft-send): Bind gnus-agent-queue-mail to
+ disable it when sending to "nndraft:queue".
+ (gnus-group-send-queue): Add safety check to avoid sending queue
+ when unplugged.
+
+ * gnus-group.el (gnus-group-catchup): Use new
+ gnus-sequence-of-unread-articles, not
+ gnus-list-of-unread-articles, to avoid exhausting memory with huge
+ numbers of articles. Use gnus-range-map to avoid having to
+ uncompress the unread list.
+ (gnus-group-archive-directory,
+ gnus-group-recent-archive-directory): Fixed invalid ange-ftp
+ reference.
+
+ * gnus-range.el (gnus-range-map): Iterate over list or sequence.
+ (gnus-sorted-range-intersection): Intersection of two ranges
+ without requiring that they first be uncompressed.
+
+ * gnus-start.el (gnus-activate-group): Unless blocked by the
+ caller, possibly expand the active range to include both cached
+ and agentized articles.
+ (gnus-convert-old-newsrc): Rewrote in anticipation of having
+ multiple version-dependent converters.
+ (gnus-groups-to-gnus-format): Replaced gnus-agent-save-groups with
+ gnus-agent-save-active.
+ (gnus-save-newsrc-file): Save dirty agent range limits.
+
+ * gnus-sum.el (gnus-select-newgroup): Replaced inline code with
+ gnus-agent-possibly-alter-active.
+ (gnus-adjust-marked-articles): Faster handling of simple lists
+
+2004-01-21 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el (spam-stat-test-directory): New optional argument
+ displays a list of files detected. Suggested by Andrew Cohen
+ <cohen@andy.bu.edu>.
+ (spam-stat-buffer-words-with-scores): Don't narrow and change
+ syntax table here. Reported by Andrew Cohen <cohen@andy.bu.edu>.
+
+2004-01-20 Hubert Chan <hubert@uhoreg.ca>:
+
+ * spam.el (spam-use-spamassassin, spam-use-spamassassin-headers)
+ (spam-install-hooks, spam-spamassassin, spam-spamassassin-path)
+ (spam-spamassassin-arguments)
+ (spam-spamassassin-spam-flag-header)
+ (spam-spamassassin-positive-spam-flag-header)
+ (spam-spamassassin-spam-status-header, spam-sa-learn-path)
+ (spam-sa-learn-rebuild, spam-sa-learn-spam-switch)
+ (spam-sa-learn-ham-switch, spam-sa-learn-unregister-switch)
+ (spam-list-of-processors, spam-list-of-checks)
+ (spam-list-of-statistical-checks, spam-registration-functions)
+ (spam-check-spamassassin-headers, spam-check-spamassassin)
+ (spam-spamassassin-score)
+ (spam-spamassassin-register-with-sa-learn)
+ (spam-spamassassin-register-spam-routine)
+ (spam-spamassassin-register-ham-routine)
+ (spam-assassin-register-spam-routine)
+ (spam-assassin-register-ham-routine): add SpamAssassin support
+ (spam-bogofilter-score): fix to show article before scoring
+
+2004-01-20 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (gnus-summary-mode-map): Make spam-generic-score the
+ default scoring function.
+ (spam-generic-score): Call spam-spamassassin-score if
+ spam-use-spamassassin or spam-use-spamassassin-headers is on;
+ spam-bogofilter-score otherwise.
+
+ * gnus.el (spam-process, spam-autodetect-methods): Add
+ spamassassin and spamassassin-headers.
+
+2004-01-20 Nevin Kapur <nkapur@cs.caltech.edu>
+
+ * gnus-registry.el (gnus-registry-split-fancy-with-parent):
+ Suppress unnecessary messages.
+
+2004-01-20 Jesper Harder <harder@ifa.au.dk>
+
+ * spam-stat.el (spam-stat-to-hash-table): Use :size keyword in
+ make-hash-table.
+
2004-01-19 Katsumi Yamaoka <yamaoka@jpl.org>
* canlock.el (base64-encode-string): Don't autoload it.
+2004-01-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * run-at-time.el: Remove useless (require 'itimer),
+ eval-and-compile and (featurep 'xemacs).
+
+2004-01-16 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-msg.el (gnus-post-news): Use blank Newsgroups line if
+ GROUP is a virtual group.
+
+2004-01-16 Steve Youngs <sryoungs@bigpond.net.au>
+
+ * gnus.el: Autoload `message-y-or-n-p'.
+
+2004-01-15 Jesper Harder <harder@ifa.au.dk>
+
+ * pgg-parse.el: Remove unnecessary (require 'custom).
+
+ * pgg-def.el: do.
+
+ * nnmail.el: do.
+
+ * gnus-undo.el: do.
+
+ * gnus-picon.el: do.
+
+ * gnus-util.el: do.
+
+2004-01-15 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-sum.el (gnus-pick-line-number): Add autoload.
+
+2004-01-15 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mm-decode.el (mm-multiple-handles): Recognize a string as a mime
+ handle, as well as a list.
+
+ * mm-view.el (mm-w3m-cid-retrieve-1): Call itself recursively.
+ Suggested by ARISAWA Akihiro <ari@mbf.sphere.ne.jp>.
+ (mm-w3m-cid-retrieve): Simplify.
+
+2004-01-14 Vasily Korytov <deskpot@myrealbox.com>
+
+ * message.el (message-kill-to-signature): Allow prefix arg to
+ specify number of lines to keep before signature.
+
+2004-01-14 Kai Grossjohann <kai@emptydomain.de>
+
+ (message-kill-to-signature): Change docstring.
+
2004-01-14 Katsumi Yamaoka <yamaoka@jpl.org>
* canlock.el: Always require sha1-el.
(canlock-sha1): Bind sha1-maximum-internal-length to nil.
+ * message.el: Autoload sha1 only when compiling.
+
2004-01-13 Katsumi Yamaoka <yamaoka@jpl.org>
* message.el (message-canlock-generate): Require sha1-el.
+2004-01-13 Jesper Harder <harder@ifa.au.dk>
+
+ * message.el (message-expand-name): Silence the byte compiler.
+
+2004-01-13 Simon Josefsson <jas@extundo.com>
+
+ * gnus-score.el (gnus-score-edit-all-score): Fix prototype.
+ Invoke gnus-score-mode. Reported by
+ bojohan+news@dd.chalmers.se (Johan Bockg,Ae(Brd).
+
+ * gnus-range.el (gnus-compress-sequence): Doc fix. Suggested by
+ Jim Blandy <jimb@redhat.com> (tiny change).
+
+2004-01-12 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-srvr.el (gnus-browse-foreign-server): Reduce consing.
+
+2004-01-12 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-get-article-as-string): Update to use
+ gnus-request-article-this-buffer, much simpler.
+ (spam-get-article-as-buffer): Remove.
+
+2004-01-12 Kai Grossjohann <kai.grossjohann@mci.com>
+
+ * message.el (message-expand-name): Use EUDC if the user uses
+ that.
+
+2004-01-12 Jesper Harder <harder@ifa.au.dk>
+
+ * rfc2047.el (rfc2047-parse-and-decode, rfc2047-decode): Use a
+ character for the encoding to avoid consing a string.
+
+ * rfc2047.el (rfc2047-decode-string): Don't cons a string
+ unnecessarily.
+
+ * mm-util.el (mm-replace-chars-in-string): Remove.
+
+ * rfc2047.el (rfc2047-decode): Use mm-subst-char-in-string instead
+ of mm-replace-chars-in-string.
+
+2004-01-11 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus.sum.el (gnus-remove-odd-characters): Don't cons two new
+ strings.
+
+ * mm-util.el (mm-subst-char-in-string): Support inplace.
+
+ * gnus-sum.el (gnus-summary-remove-list-identifiers): Don't cons
+ a new string in every iteration. Use shy groups.
+
+2004-01-10 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-start.el (gnus-subscribe-newsgroup, gnus-start-draft-setup)
+ (gnus-group-change-level, gnus-kill-newsgroup)
+ (gnus-check-bogus-newsgroups, gnus-get-unread-articles-in-group)
+ (gnus-get-unread-articles, gnus-make-articles-unread)
+ (gnus-make-ascending-articles-unread): Use accessor
+ macros (gnus-group-entry, gnus-group-unread, gnus-info-marks etc.)
+ to get group information for improved readability.
+
+ * gnus-srvr.el (gnus-browse-unsubscribe-group): do.
+
+ * gnus-soup.el (gnus-soup-group-brew): do.
+
+ * gnus-msg.el (gnus-put-message): do.
+
+ * gnus-move.el (gnus-group-move-group-to-server): do.
+
+ * gnus-kill.el (gnus-batch-score): do.
+
+ * gnus-group.el (gnus-group-prepare-flat, gnus-group-delete-group)
+ (gnus-group-update-group-line, gnus-group-insert-group-line-info)
+ (gnus-group-update-group, gnus-group-read-group)
+ (gnus-group-make-group, gnus-group-make-help-group)
+ (gnus-group-make-archive-group, gnus-group-make-directory-group)
+ (gnus-group-make-empty-virtual, gnus-group-sort-selected-flat)
+ (gnus-group-sort-by-unread, gnus-group-catchup)
+ (gnus-group-unsubscribe-group, gnus-group-kill-group)
+ (gnus-group-yank-group, gnus-group-set-info)
+ (gnus-group-list-groups): do.
+
+ * gnus.el (gnus-generate-new-group-name): do.
+
+ * gnus-delay.el (gnus-delay-send-queue): do.
+
+ * nnvirtual.el (nnvirtual-catchup-group): do.
+
+ * nnkiboze.el (nnkiboze-generate-group, nnkiboze-generate-group):
+ do.
+
+ * gnus-topic.el (gnus-topic-find-groups, gnus-topic-clean-alist)
+ (gnus-group-prepare-topics, gnus-topic-check-topology): do.
+
+ * gnus-sum.el (gnus-update-read-articles, gnus-select-newsgroup)
+ (gnus-mark-xrefs-as-read, gnus-compute-read-articles)
+ (gnus-summary-walk-group-buffer, gnus-summary-move-article)
+ (gnus-group-make-articles-read): do.
+
+2004-01-09 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-art.el (article-decode-mime-words, article-babel)
+ (gnus-article-highlight-signature, gnus-article-add-buttons)
+ (gnus-signature-toggle): Use gnus-with-article-buffer.
+
+ * gnus-art.el (gnus-article-highlight-headers)
+ (gnus-article-add-buttons-to-head): Use gnus-with-article-headers.
+
+ * gnus-art.el (gnus-mm-display-part, gnus-article-wash-status)
+ (gnus-article-set-globals, gnus-request-article-this-buffer)
+ (gnus-button-message-id, gnus-article-maybe-hide-headers)
+ (gnus-mime-view-part-externally, gnus-mime-view-part-internally)
+ (gnus-mime-display-alternative): Use with-current-buffer.
+
+2004-01-09 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-generate-fake-headers): Rewrite to be simpler,
+ also under 80 char limit, and call gnus-error if needed.
+ (spam-fetch-article-header): Fix - it was a
+ buffer-local variable (gnus-newsgroup-data).
+ (spam-find-spam): Use spam-generate-fake-headers, forget about
+ spam-insert-fake-headers.
+ (spam-insert-fake-headers): Remove.
+
+2004-01-09 Jesper Harder <harder@ifa.au.dk>
+
+ * deuglify.el (gnus-article-outlook-unwrap-lines)
+ (gnus-outlook-rearrange-article)
+ (gnus-outlook-repair-attribution-outlook)
+ (gnus-outlook-repair-attribution-block)
+ (gnus-outlook-repair-attribution-other): Remove redundant
+ save-excursion.
+
+2004-01-09 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-fetch-field-fast, spam-fetch-field-from-fast)
+ (spam-fetch-field-subject-fast)
+ (spam-fetch-field-message-id-fast, spam-generate-fake-headers)
+ (spam-fetch-article-header): Add functions to deal with Gnus
+ internals for fast retrieval of article header data.
+ (spam-initialize): Put spam-find-spam in the gnus-summary-prepared-hook.
+
+2004-01-09 Jesper Harder <harder@ifa.au.dk>
+
+ * pop3.el (pop3-md5): Remove.
+ (pop3-apop): Replace pop3-md5 with md5.
+
+ * mm-bodies.el: base64 is always built-in.
+
+ * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Use
+ with-current-buffer.
+
2004-01-08 Katsumi Yamaoka <yamaoka@jpl.org>
* canlock.el (canlock-insert-header): Remove excessive grouping in
regexp.
+ * gnus-sum.el (gnus-summary-read-document): Ditto.
+
+ * gnus-uu.el (gnus-uu-part-number): Ditto.
+
+ * html2text.el (html2text-remove-tags): Ditto.
+ (html2text-format-tags): Ditto.
+ (html2text-format-single-elements): Ditto.
+
+ * mml.el (mml-parse-1): Ditto.
+
+2004-01-08 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-sum.el (gnus-summary-update-mark): Revert previous change.
+
+ * gnus-group.el (gnus-group-mark-group): Fix for multibyte marks.
+
+ * gnus-sum.el (gnus-summary-update-mark): Fix for multibyte marks.
+
+ * gnus-util.el (gnus-replace-in-string): Remove Emacs 20 code.
+
+2003-11-15 Simon Josefsson <jas@extundo.com>
+
+ * pgg-gpg.el (pgg-gpg-lookup-all-secret-keys)
+ (pgg-gpg-lookup-key): Use regexp match instead of
+ split-string (split-string is different between emacs 21.2 and
+ 22.1). Reported by ultrasoul@ultrasoul.com (David D. Smith).
+
+2004-01-08 Jesper Harder <harder@ifa.au.dk>
+
+ * gnus-art.el (gnus-mime-view-all-parts)
+ (gnus-article-part-wrapper, gnus-article-view-part): Use
+ with-current-buffer.
+
+2004-01-07 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-disable-spam-split-during-ham-respool)
+ (spam-spamoracle-database, spam-cache-lookups)
+ (spam-split-last-successful-check, spam-clear-cache, spam-xor)
+ (spam-group-ham-mark-p, spam-group-spam-mark-p)
+ (spam-group-ham-marks, spam-group-spam-marks)
+ (spam-group-spam-contents-p, spam-group-ham-contents-p)
+ (spam-list-of-processors, spam-list-of-statistical-checks): Fix doc,
+ also add spam-use-blackholes to the statistical checks.
+ (spam-fetch-field-fast): Add interface to fetching fields, may
+ become a macro.
+ (spam-fetch-field-from-fast, spam-fetch-field-subject-fast)
+ (spam-fetch-field-message-id-fast): Use spam-fetch-field-fast.
+ (spam-insert-fake-headers): Fake an article when needed.
+ (spam-find-spam): Fake article when possible.
+ (spam-check-blackholes, spam-check-BBDB, spam-from-listed-p)
+ (spam-check-bogofilter-headers): Use message-fetch-field instead
+ of nnmail-fetch-field.
+
+2004-01-07 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus-score.el (gnus-score-find-trace): Add `k' (kill-buffer).
+
+2004-01-07 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-split): Do not require spam-use-CHECK to be
+ enabled if that check is passed to spam-split explicitly; also
+ fix so 'spam doesn't get converted to spam-split-group when
+ spam-split-symbolic-return is t.
+ (spam-find-spam): Find registrations of the article and use those
+ instead of re-running spam-split to find the spam/ham
+ classification of the article.
+ (spam-log-processing-to-registry, spam-log-registered-p)
+ (spam-log-unregistration-needed-p, spam-log-undo-registration):
+ Use gnus-error instead of gnus-message.
+ (spam-log-registration-type): Add function to determine the
+ classification of a message based on registry entries; will
+ return nil if both 'spam and 'ham are found.
+ (spam-check-BBDB): Expand all the BBDB macros here so we can have
+ a reasonably fast local cache without the loading errors.
+ (spam-cache-lookups): Set to t by default.
+ (spam-find-spam): Don't try to guess spam-cache-lookups.
+ (spam-enter-whitelist, spam-enter-blacklist): Clear the
+ spam-caches entry.
+ (spam-filelist-build-cache, spam-filelist-check-cache): Fix
+ caching of whitelist/blacklist entries.
+ (spam-check-whitelist, spam-check-blacklist): Invoke
+ spam-from-listed-p with a type, not a cache variable.
+ (spam-from-listed-p): Wrap around spam-filelist-check-cache.
+
+2004-01-07 Jesper Harder <harder@ifa.au.dk>
+
+ * message.el (message-cite-prefix-regexp): Use with-syntax-table.
+
+ * nnmail.el (nnmail-split-fancy): do.
+
+ * mml.el (mml-parse): do.
+
+ * gnus-score.el (gnus-enter-score-words-into-hashtb)
+ (gnus-score-adaptive): do.
+
2004-01-07 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-art.el (gnus-treat-emphasize): Ignore Emacs version number.
+ (gnus-mime-button-map): Don't set keymap parent.
+ (gnus-button-ctan-directory-regexp): Use shy grouping.
+ (gnus-prev-page-map): Don't set keymap parent.
+ (gnus-prev-page-map): Remove duplicated one.
+ (gnus-next-page-map): Don't set keymap parent.
+ (gnus-mime-security-button-map): Ditto.
+
+ * nnheader.el (nnheader-directory-files-is-safe): Ignore Emacs
+ version number.
+
* sha1-el.el (sha1-string-external): Use with-temp-buffer.
2004-01-07 Katsumi Yamaoka <yamaoka@jpl.org>
@@ -4803,275 +10943,346 @@
(sha1-string): Ditto.
(sha1): Ditto.
-2003-11-15 Simon Josefsson <jas@extundo.com>
+2004-01-07 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * pgg-gpg.el (pgg-gpg-lookup-all-secret-keys)
- (pgg-gpg-lookup-key): Use regexp match instead of
- split-string (split-string is different between emacs 21.2 and
- 22.1). Reported by ultrasoul@ultrasoul.com (David D. Smith).
+ * spam.el (spam-report-articles-gmane): New command.
-2004-07-28 Simon Josefsson <jas@extundo.com>
+2004-01-07 Katsumi Yamaoka <yamaoka@jpl.org>
- * pgg-pgp5.el (pgg-pgp5-encrypt-region): Accept sign
- parameter (but don't use it, for now).
+ * gnus.el: Don't make unnecessary *Group* buffer when loading.
-2004-02-03 Jesper Harder <harder@ifa.au.dk>
+ * run-at-time.el (run-at-time-saved): Remove.
+ (run-at-time): Doc fix.
- * sieve.el (sieve-deactivate-all): Fix format string mismatch.
+2004-01-07 Jesper Harder <harder@ifa.au.dk>
-2004-08-30 Andreas Schwab <schwab@suse.de>
+ * gnus-sum.el (gnus-summary-limit-to-replied): New command.
+ (gnus-summary-limit-map): Add it.
+ (gnus-summary-make-menu-bar): do.
- * rfc2231.el (rfc2231-parse-string): Restore whitespace syntax for
- ?* and ?\;.
+2004-01-06 Teodor Zlatanov <tzz@lifelogs.com>
- * ietf-drums.el (ietf-drums-syntax-table): Set syntax of ?* ?\;
- and ?\' to symbol instead of whitespace.
+ * spam.el (spam-cache-lookups, spam-caches, spam-clear-cache):
+ Make attempt at some caching support (done for BBDB only now).
+ (spam-find-spam): Set spam-cache-lookups if there are more than 2
+ addresses to be checked.
+ (spam-clear-cache-BBDB): Add function, to be invoked by
+ bbdb-change-hook, and triggering spam-clear-cache of 'spam-use-BBDB.
+ (spam-check-BBDB): Check and use the caches, if
+ spam-cache-lookups is on, remove superfluous (provide).
-2004-08-31 Jesper Harder <harder@ifa.au.dk>
+2004-01-06 Reiner Steib <Reiner.Steib@gmx.de>
- * message.el (message-idna-to-ascii-rhs-1): Don't choke on
- invalid addresses.
+ * gnus-art.el (gnus-treat-ansi-sequences): Changed default.
-2004-08-31 Reiner Steib <Reiner.Steib@gmx.de>
+2004-01-07 Steve Youngs <sryoungs@bigpond.net.au>
- * message.el (message-idna-to-ascii-rhs-1): Fix typo.
+ * run-at-time.el (run-at-time-saved): Move to after the definition
+ of `run-at-time'.
-2004-08-31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+2004-01-06 Katsumi Yamaoka <yamaoka@jpl.org>
- * message.el (message-idna-to-ascii-rhs-1): Don't use equalp.
+ * gnus-art.el (gnus-article-wash-html-with-w3m): Don't use
+ mm-w3m-local-map-property.
-2004-08-31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * mm-view.el (mm-w3m-mode-map): Remove.
+ (mm-w3m-local-map-property): Remove.
+ (mm-inline-text-html-render-with-w3m): Don't use
+ mm-w3m-local-map-property.
- * gnus-art.el (article-decode-idna-rhs): Don't use
- message-idna-inside-rhs-p.
+2004-01-06 Lars Magne Ingebrigtsen <larsi@gnus.org>
-2004-08-31 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * run-at-time.el: New file.
- * message.el (message-idna-inside-rhs-p): Remove.
- (message-idna-to-ascii-rhs-1): Use proper address parsing.
+ * gnus.el ((fboundp 'gnus-set-text-properties)): Remove definition
+ of gnus-set-text-properties.
-2004-08-31 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-uu.el (gnus-uu-save-article): Ditto.
- * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
+ * gnus-salt.el (gnus-carpal-setup-buffer): Ditto.
-2004-08-30 Helmut Waitzmann <Helmut.Waitzmann@web.de> (tiny change)
+ * gnus-cite.el (gnus-cite-parse): Ditto.
- * gnus-sum.el (gnus-newsgroup-variables): Doc fix.
+ * gnus-art.el (gnus-button-push): Use set-text-properties instead
+ of gnus-.
-2004-08-26 YAGI Tatsuya <ynyaaa@ybb.ne.jp> (tiny change)
+ * gnus.el: Changed calls to nnheader-run-at-time and
+ password-run-at-time throughout to use run-at-time directly.
- * gnus-art.el (gnus-article-next-page): Fix the way to find a real
- end-of-buffer.
+ * password.el: Removed definition of run-at-time.
-2004-08-26 Stefan Wiens <s.wi@gmx.net> (tiny change)
+2004-01-05 Karl Pfl,Ad(Bsterer <sigurd@12move.de> (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.
+ * mml.el (mml-minibuffer-read-disposition): Show attachment type
+ in prompt.
-2004-08-26 David Hedbor <dhedbor@real.com> (tiny change)
+2004-01-06 Steve Youngs <sryoungs@bigpond.net.au>
- * nnmail.el (nnmail-split-lowercase-expanded): New user option.
- (nnmail-expand-newtext): Lowercase expanded entries if
- nnmail-split-lowercase-expanded is non-nil.
+ * gnus-ems.el (gnus-mode-line-modified): Don't conditionalise on
+ XEmacs version.
- * gnus-agent.el (gnus-agent-regenerate-group): Activate the group
- when the group's active is not available.
+ * dns.el (dns-make-network-process): Use `open-network-stream'
+ instead of `gnus-xmas-open-network-stream'.
- * gnus-art.el (article-hide-headers): Refer to the values for
- gnus-ignored-headers and gnus-visible-headers in the summary
- buffer since a user may have set them as group parameters.
- (gnus-article-read-summary-keys): Restore new window-start and
- hscroll to summary window.
- (gnus-prev-page-map): Remove duplicated one.
+ * .cvsignore: Add auto-autoloads.el, custom-load.el.
- * gnus-cite.el (gnus-cite-ignore-quoted-from): New user option.
- (gnus-cite-parse): Ignore quoted envelope From_. Suggested by
- Karl Chen <quarl@nospam.quarl.org> and Reiner Steib
- <Reiner.Steib@gmx.de>.
+2004-01-06 Jesper Harder <harder@ifa.au.dk>
- * gnus-cus.el (gnus-agent-cat-prepare-category-field):
- Replace pp-to-string with gnus-pp-to-string.
+ * gnus-art.el (gnus-mime-display-alternative)
+ (gnus-insert-mime-button, gnus-insert-mime-security-button)
+ (gnus-insert-prev-page-button, gnus-insert-next-page-button):
+ Don't use gnus-local-map-property.
- * gnus-eform.el (gnus-edit-form): Replace pp with gnus-pp.
+ * gnus-util.el (gnus-local-map-property): Remove.
- * gnus-group.el (gnus-group-make-kiboze-group): Replace pp with
- gnus-pp.
+ * mm-view.el (mm-view-pkcs7-decrypt): Replace
+ gnus-completing-read-maybe-default with completing-read.
- * gnus-msg.el (gnus-setup-message): Ignore an article copy while
- parsing gnus-posting-styles when the message is not for replying.
- (gnus-summary-resend-message-edit): Call mime-to-mml.
- Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
- (gnus-debug): Replace pp with gnus-pp.
+ * gnus-util.el (gnus-completing-read): do.
+ (gnus-completing-read-maybe-default): Remove.
- * gnus-score.el (gnus-score-save): Replace pp with gnus-pp.
+2004-01-06 Steve Youngs <sryoungs@bigpond.net.au>
- * gnus-spec.el (gnus-update-format): Replace pp-to-string with
- gnus-pp-to-string.
+ * password.el: Only autoload `run-at-time' if not XEmacs.
+ Only autoload the itimer functions if XEmacs.
- * gnus-util.el (gnus-bind-print-variables): New macro.
- (gnus-prin1): Use it.
- (gnus-prin1-to-string): Use it.
- (gnus-pp): New function.
- (gnus-pp-to-string): New function.
+2004-01-06 Jesper Harder <harder@ifa.au.dk>
- * gnus.el: Don't make unnecessary *Group* buffer when loading.
+ * gnus-art.el (gnus-read-string): Remove.
+ (gnus-summary-pipe-to-muttprint): Replace gnus-read-string with
+ read-string.
- * mail-source.el (mail-source-touch-pop): Doc fix.
+2004-01-05 Teodor Zlatanov <tzz@lifelogs.com>
- * message.el (message-mode): Don't modify paragraph-separate there.
- (message-setup-fill-variables): Add mml tags to paragraph-start
- and paragraph-separate. Suggested by Andrew Korty <ajk@iu.edu>.
- (message-smtpmail-send-it): Doc fix.
- (message-exchange-point-and-mark): Don't activate region if it was
- inactive. Suggested by Hiroshi Fujishima
- <pooh@nature.tsukuba.ac.jp> and Jesper Harder <harder@ifa.au.dk>.
+ * netrc.el: Autoload password-read.
+ (netrc): Add configuration group.
+ (netrc-encoding-method, netrc-openssl-path): Add
+ variables for encoding and decoding of files with symmetric
+ ciphers.
+ (netrc-encode): Add assistant function to encode a file with
+ netrc-encoding-method.
+ (netrc-parse): Add interactive parameter, added optional
+ decoding if netrc-encoding-method is non-nil but otherwise
+ behavior is standard.
+ (netrc-encrypting-method, netrc-encrypt, netrc-parse):
+ Do s/encode/encrypt/ everywhere.
- * mm-decode.el (mm-save-part): Bind enable-multibyte-characters to
- t while entering a file name using the mm-with-multibyte macro.
- Suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>.
+ * spam.el: Remove executable-find autoload.
- * mm-encode.el (mm-content-transfer-encoding-defaults):
- Use qp-or-base64 for the application/* types.
- (mm-safer-encoding): Consider 7bit is safe.
+2004-01-05 Jesper Harder <harder@ifa.au.dk>
- * mm-util.el (mm-with-multibyte-buffer): New macro.
- (mm-with-multibyte): New macro.
+ * gnus-registry.el: Remove Emacs 20 hash table compatibility code.
- * mm-view.el (mm-inline-render-with-function): Use multibyte
- buffer; decode html source by charset.
+ * gnus-uu.el (gnus-uu-post-encoded): bury-buffer is always fbound.
- * nndoc.el (nndoc-type-alist): Improve regexp for article-begin,
- add generate-head-function and generate-article-function to the
- rfc822-forward entry.
- (nndoc-forward-type-p): Recognize envelope From_.
- (nndoc-rfc822-forward-generate-article): New function.
- (nndoc-rfc822-forward-generate-head): New function.
+2004-01-05 Reiner Steib <Reiner.Steib@gmx.de>
- * score-mode.el (gnus-score-pretty-print): Replace pp with gnus-pp.
+ * gnus-art.el (gnus-treat-ansi-sequences,
+ article-treat-ansi-sequences): New variable and function.
+ Suggested by Dan Jacobson <jidanni@jidanni.org>.
- * webmail.el (webmail-debug): Replace pp with gnus-pp.
+ * gnus-sum.el (gnus-summary-wash-map, gnus-summary-make-menu-bar):
+ Use it.
- * gnus-art.el (gnus-article-wash-html-with-w3m):
- Bind w3m-safe-url-regexp as the value for mm-w3m-safe-url-regexp;
- use w3m-minor-mode-map instead of mm-w3m-local-map-property.
- (gnus-mime-save-part-and-strip): Use mm-complicated-handles
- instead of mm-multiple-handles.
- (gnus-mime-delete-part): Ditto.
+2004-01-05 Jesper Harder <harder@ifa.au.dk>
- * mm-decode.el (mm-multiple-handles): Recognize a string as a mime
- handle, as well as a list.
- (mm-complicated-handles): Former definition of mm-multiple-handles.
+ * mm-util.el (mm-quote-arg): Remove.
- * mm-view.el (mm-w3m-mode-map): Remove.
- (mm-w3m-local-map-property): Remove.
- (mm-w3m-cid-retrieve-1): Call itself recursively. Suggested by
- ARISAWA Akihiro <ari@mbf.sphere.ne.jp>.
- (mm-w3m-cid-retrieve): Simplify.
- (mm-inline-text-html-render-with-w3m): Decode html source by
- charset; check META tags only when charsets are not specified in
- headers; specify charset to w3m-region; use w3m-minor-mode-map
- instead of mm-w3m-local-map-property.
+ * mm-decode.el (mm-mailcap-command): Replace mm-quote-arg with
+ shell-quote-argument.
-2004-08-30 Juanma Barranquero <lektu@terra.es>
+ * gnus-uu.el (gnus-uu-command): do.
- * ietf-drums.el (ietf-drums-remove-whitespace): Fix character constant.
+ * gnus-sum.el (gnus-summary-insert-pseudos): do.
-2004-08-30 Andreas Schwab <schwab@suse.de>
+ * ietf-drums.el (ietf-drums-token-to-list): Replace mm-make-char
+ with make-char.
- * nnlistserv.el (nnlistserv-kk-wash-article): Fix paren nesting.
+ * mm-util.el (mm-make-char): Remove.
- * gnus-score.el (gnus-summary-increase-score): Fix format string.
+ * mml.el (mml-mode): Replace gnus-add-minor-mode with
+ add-minor-mode.
-2004-08-30 Stefan Monnier <monnier@iro.umontreal.ca>
+ * gnus-undo.el (gnus-undo-mode): do.
- * nnimap.el (nnimap-demule): Avoid string-as-multibyte.
+ * gnus-topic.el (gnus-topic-mode): do.
-2004-08-30 Kim F. Storm <storm@cua.dk>
+ * gnus-sum.el (gnus-dead-summary-mode): do.
- * nntp.el (nntp-authinfo-file): Add :group 'nntp.
+ * gnus-start.el (gnus-slave-mode): do.
- * nnimap.el (nnimap-authinfo-file, nnimap-prune-cache):
- Add :group 'nnimap.
+ * gnus-salt.el (gnus-binary-mode, gnus-pick-mode): do.
-2004-08-23 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-ml.el (gnus-mailing-list-mode): do.
- * mm-decode.el (mime-display, mime-security): Fix custom-manual
- entries.
+ * gnus-gl.el (gnus-grouplens-mode): do.
- * gnus-art.el (gnus-article): Ditto.
+ * gnus-draft.el (gnus-draft-mode): do.
-2004-08-23 Katsumi Yamaoka <yamaoka@jpl.org>
+ * gnus-dired.el (gnus-dired-mode): do.
- * gnus-art.el (article-hide-list-identifiers):
- Bind inhibit-read-only as t.
+ * gnus-ems.el (gnus-add-minor-mode): Remove.
-2004-08-22 Reiner Steib <Reiner.Steib@gmx.de>
+ * gnus-spec.el (gnus-correct-length, gnus-correct-substring):
+ Replace gnus-char-width with char-width.
- * gnus-mlspl.el (gnus-group-split-update): Fix docstring.
+ * gnus-ems.el (gnus-char-width): Remove.
-2004-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
+ * gnus-spec.el (gnus-correct-length, gnus-correct-substring):
+ Replace gnus-char-width with char-width.
- * gnus-art.el: Use inhibit-read-only instead of buffer-read-only.
- (gnus-narrow-to-page): Don't assume point-min == 1.
- (gnus-article-edit-mode): Derive from message-mode.
+ * gnus-ems.el (gnus-char-width): Remove.
- * gnus-score.el (gnus-score-find-bnews): Simplify and don't assume
- point-min == 1.
+ * spam-stat.el (with-syntax-table): Remove with-syntax-table
+ definition.
+ Remove Emacs 20 hash table compatibility code.
- * imap.el (imap-parse-address-list, imap-parse-body-ext):
- Disable incorrect use of `assert'.
+ * rfc2047.el (with-syntax-table): Remove with-syntax-table Emacs
+ 20 compatibility code.
- * message.el (message-mode): Set comment-start-skip.
+ * spam.el (spam-point-at-eol): Replace with point-at-eol.
-2004-08-22 Sam Steingold <sds@gnu.org>
+ * smime.el (smime-point-at-eol): Replace with point-at-eol.
- * pop3.el (pop3-leave-mail-on-server): New user variable.
- (pop3-movemail): Delete mail only when it is nil.
+ * rfc2047.el (rfc2047-point-at-bol, rfc2047-point-at-eol): Replace
+ with point-at-{eol,bol}.
-2004-08-17 Reiner Steib <Reiner.Steib@gmx.de>
+ * netrc.el (netrc-point-at-eol): Replace with point-at-eol.
- * netrc.el, tls.el: Removed; use files from ../net instead.
+ * imap.el (imap-point-at-eol): Replace with point-at-eol.
-2004-08-16 Reiner Steib <Reiner.Steib@gmx.de>
+ * flow-fill.el (fill-flowed-point-at-bol,
+ fill-flowed-point-at-eol): Replace with point-at-{eol,bol}.
- * gnus-mule.el, smiley-ems.el: Removed obsolete files.
+ * gnus-util.el (gnus-point-at-bol, gnus-point-at-eol): Remove.
+ Replace with point-at-{eol,bol} throughout all files.
- * mailcap.el (mailcap-mime-data): Mark as risky.
+2004-01-05 Katsumi Yamaoka <yamaoka@jpl.org>
- * gnus.el (gnus-group, gnus-summary, gnus-summary-sort):
- Fix custom-manual entries.
+ * ntlm.el (ntlm-string-as-unibyte): New macro.
+ (ntlm-build-auth-response): Use it.
- * time-date.el: Removed. Merged into ../calendar/time-date.el.
+ Remove Emacs 20 stuff:
+ * gnus-msg.el (gnus-summary-news-other-window): Use remove instead
+ of delq and copy-sequence.
+ * gnus-art.el (popup-menu): Remove the compiler macro.
+ * nnmail.el (nnmail-split-fancy): Don't support customizing with
+ Emacs 20.
-2004-08-02 Reiner Steib <Reiner.Steib@gmx.de>
+2004-01-05 Simon Josefsson <jas@extundo.com>
- * blink.pbm, blink.xpm, braindamaged.xpm, cry.xpm, dead.xpm,
- evil.xpm, forced.xpm, frown.xpm, grin.xpm, indifferent.xpm,
- reverse-smile.xpm, sad.pbm, sad.xpm, smile.xpm, time-date.el,
- wry.xpm: Added new files from the v5_10 branch of Gnus.
+ * ntlm.el: Fix namespace. Change smb-passwd-hash into
+ ntlm-smb-passwd-hash, smb-owf-encrypt into ntlm-smb-owf-encrypt,
+ smb-passwd-hash into ntlm-smb-passwd-hash, smbdes-e-p16 into
+ ntlm-smb-des-e-p16, smbdes-e-p24 into ntlm-smb-des-e-p24, smbhash
+ into ntlm-smb-hash, smb-sp8 into ntlm-smb-sp8, smb-str-to-key into
+ ntlm-smb-str-to-key, smb-dohash into ntlm-smb-dohash, smb-perm1
+ into ntlm-smb-perm1, smb-perm2 into ntlm-smb-perm2, smb-perm3 into
+ ntlm-smb-perm3, smb-perm4 into ntlm-smb-perm4, smb-perm5 into
+ ntlm-smb-perm5, smb-perm6 into ntlm-smb-perm6, smb-sc into
+ ntlm-smb-sc, smb-sbox into ntlm-smb-sbox, string-permute into
+ ntlm-string-permute, string-lshift into ntlm-string-lshift,
+ string-xor into ntlm-string-xor. Suggested by
+ Jesper Harder <harder@myrealbox.com>.
-2004-07-22 Andreas Schwab <schwab@suse.de>
+ * ntlm.el: Don't include poem.
- Import Gnus 5.10 from the v5_10 branch of the Gnus repository.
+ * md4.el (print-int32, print-string-hexa): Remove. Suggested by
+ Jesper Harder <harder@myrealbox.com>.
-2004-05-23 Katsumi Yamaoka <yamaoka@jpl.org>
+ * sasl-ntlm.el, ntlm.el, md4.el: New files.
- * mm-decode.el (mm-text-html-renderer): Make sure w3m exists in
- addition to emacs-w3m.
+ * hmac-md5.el (md5-binary): Fix byte compile warning. (This
+ probably breaks emacs with DL patch, but do we care? Is anyone
+ still using the DL stuff?)
-2004-05-19 Reiner Steib <Reiner.Steib@gmx.de>
+ * sieve-manage.el: Use the password package.
+ (sieve-manage-read-passwd): Remove.
+ (sieve-manage-interactive-login): Use password. Re-add
+ condition-case around loop.
+
+ * pgg.el (pgg-passphrase-cache, pgg-run-at-time): Remove.
+ (pgg-add-passphrase-cache, pgg-remove-passphrase-cache): Use
+ the password package.
+
+2003-02-19 Simon Josefsson <jas@extundo.com>
+
+ * sieve-manage.el (sieve-sasl-auth): Quote optional initial SASL
+ token.
+
+2002-08-07 Simon Josefsson <jas@extundo.com>
+
+ * sieve-manage.el (require): Use SASL, not RFC2104/MD5.
+ (sieve-manage-authenticators):
+ (sieve-manage-authenticator-alist): Add some SASL mechs.
+ (sieve-sasl-auth): New function.
+ (sieve-manage-cram-md5-auth):
+ (sieve-manage-plain-auth): Rewrite using SASL library.
+ (sieve-manage-digest-md5-p, sieve-manage-digest-md5-auth)
+ (sieve-manage-scram-md5-p, sieve-manage-scram-md5-auth)
+ (sieve-manage-ntlm-p, sieve-manage-ntlm-auth)
+ (sieve-manage-login-p, sieve-manage-login-auth): Add wrappers.
+
+2004-01-05 Simon Josefsson <jas@extundo.com>
+
+ * sasl.el, sasl-cram.el, sasl-digest.el, hmac-md5.el, hmac-def.el:
+ New files.
+
+2004-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus-group.el (gnus-no-groups-message): Update.
+
+ * gnus-sum.el (gnus-summary-insert-new-articles): Remove .
+
+2003-11-09 Simon Josefsson <jas@extundo.com>
+
+ * imap.el: Support for ID IMAP extension (RFC 2971).
+ (imap-local-variables): Add imap-id.
+ (imap-id): New variable.
+ (imap-id): New function.
+ (imap-parse-response): Parse untagged ID response.
+ * nnimap.el (nnimap-id): New variable.
+ (nnimap-open-connection): Use it.
+
+2003-12-28 Simon Josefsson <jas@extundo.com>
+
+ * gnus-score.el (gnus-score-edit-all-score): New.
+ * gnus-group.el (gnus-group-score-map): Bind it to W e.
+
+2004-01-04 Simon Josefsson <jas@extundo.com>
+
+ * password.el: Add.
+
+2004-01-04 Mario Lang <lang@zid.tugraz.at>
+
+ * dns.el: Add support for AAAA records (see RFC 3596)
+
+ * Fix typo PRT -> PTR
+
+ * Parse MX, PTR and SOA replies (see RFC 1035)
+
+2004-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-logo-color-style): Changed colors to `no'.
+
+ * Moved to Changelog.2.
+
+2004-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump version.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
+ * gnus.el: No Gnus v0.1 is released.
- * gnus-msg.el (gnus-summary-followup-with-original):
- Document yanking of region when active.
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
-2004-04-13 Kevin Greiner <kgreiner@xpediantsolutions.com>
+ * gnus.el: No Gnus v0.0 is released.
- * gnus-agent.el: Merged 7.3 through 7.7 updates into branch.
- Revision 7.2 changes excluded to maintain compatibility with all
- targeted emacs versions.
+2004-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * gnus-cus.el: Merged revisions 7.2 through 7.5 into branch to support
- gnus-agent.el update and incorporate bug fixes.
+ * gnus.el (gnus-version-number): Bump.
+ (gnus-version): No.
See ChangeLog.2 for earlier changes.
diff --git a/lisp/gnus/binhex.el b/lisp/gnus/binhex.el
index 69866a9eacc..88f0e20f17c 100644
--- a/lisp/gnus/binhex.el
+++ b/lisp/gnus/binhex.el
@@ -27,8 +27,6 @@
;;; Code:
-(autoload 'executable-find "executable")
-
(eval-when-compile (require 'cl))
(eval-and-compile
@@ -246,14 +244,13 @@ If HEADER-ONLY is non-nil only decode header and return filename."
(setq file-name-length (char-after (point-min))
data-fork-start (+ (point-min)
file-name-length 22))))
- (if (and (null header)
- (with-current-buffer work-buffer
- (>= (buffer-size) data-fork-start)))
- (progn
- (binhex-verify-crc work-buffer
- (point-min) data-fork-start)
- (setq header (binhex-header work-buffer))
- (if header-only (setq tmp nil counter 0))))
+ (when (and (null header)
+ (with-current-buffer work-buffer
+ (>= (buffer-size) data-fork-start)))
+ (binhex-verify-crc work-buffer
+ (point-min) data-fork-start)
+ (setq header (binhex-header work-buffer))
+ (when header-only (setq tmp nil counter 0)))
(setq tmp (and tmp (not (eq inputpos end)))))
(cond
((= counter 3)
diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el
index b1fdc9a2f0e..4019db2390e 100644
--- a/lisp/gnus/deuglify.el
+++ b/lisp/gnus/deuglify.el
@@ -315,71 +315,77 @@ You can control what lines will be unwrapped by frobbing
indicating the minimum and maximum length of an unwrapped citation line. If
NODISPLAY is non-nil, don't redisplay the article buffer."
(interactive "P")
- (save-excursion
- (let ((case-fold-search nil)
- (inhibit-read-only t)
- (cite-marks gnus-outlook-deuglify-cite-marks)
- (no-wrap gnus-outlook-deuglify-no-wrap-chars)
- (stop-chars gnus-outlook-deuglify-unwrap-stop-chars))
- (gnus-with-article-buffer
- (article-goto-body)
- (while (re-search-forward
- (concat
- "^\\([ \t" cite-marks "]*\\)"
- "\\([" cite-marks "].*[^\n " stop-chars "]\\)[ \t]?\n"
- "\\1\\([^\n " cite-marks no-wrap "]+.*\\)$")
+ (let ((case-fold-search nil)
+ (inhibit-read-only t)
+ (cite-marks gnus-outlook-deuglify-cite-marks)
+ (no-wrap gnus-outlook-deuglify-no-wrap-chars)
+ (stop-chars gnus-outlook-deuglify-unwrap-stop-chars))
+ (gnus-with-article-buffer
+ (article-goto-body)
+ (while (re-search-forward
+ (concat
+ "^\\([ \t" cite-marks "]*\\)"
+ "\\([" cite-marks "].*[^\n " stop-chars "]\\)[ \t]?\n"
+ "\\1\\([^\n " cite-marks no-wrap "]+.*\\)$")
nil t)
- (let ((len12 (- (match-end 2) (match-beginning 1)))
+ (let ((len12 (- (match-end 2) (match-beginning 1)))
(len3 (- (match-end 3) (match-beginning 3))))
- (if (and (> len12 gnus-outlook-deuglify-unwrap-min)
+ (when (and (> len12 gnus-outlook-deuglify-unwrap-min)
(< (+ len12 len3) gnus-outlook-deuglify-unwrap-max))
- (progn
- (replace-match "\\1\\2 \\3")
- (goto-char (match-beginning 0)))))))))
+ (replace-match "\\1\\2 \\3")
+ (goto-char (match-beginning 0)))))))
(unless nodisplay (gnus-outlook-display-article-buffer)))
(defun gnus-outlook-rearrange-article (attr-start)
"Put the text from ATTR-START to the end of buffer at the top of the article buffer."
- (save-excursion
- (let ((inhibit-read-only t)
- (cite-marks gnus-outlook-deuglify-cite-marks))
- (gnus-with-article-buffer
- (article-goto-body)
- ;; article does not start with attribution
- (unless (= (point) attr-start)
- (gnus-kill-all-overlays)
- (let ((cur (point))
- ;; before signature or end of buffer
- (to (if (gnus-article-search-signature)
- (point)
- (point-max))))
- ;; handle the case where the full quote is below the
- ;; signature
- (if (< to attr-start)
- (setq to (point-max)))
- (transpose-regions cur attr-start attr-start to)))))))
+ ;; FIXME: 1. (*) text/plain ( ) text/html
+ (let ((inhibit-read-only t)
+ (cite-marks gnus-outlook-deuglify-cite-marks))
+ (gnus-with-article-buffer
+ (article-goto-body)
+ ;; article does not start with attribution
+ (unless (= (point) attr-start)
+ (gnus-kill-all-overlays)
+ (let ((cur (point))
+ ;; before signature or end of buffer
+ (to (if (gnus-article-search-signature)
+ (point)
+ (point-max))))
+ ;; handle the case where the full quote is below the
+ ;; signature
+ (when (< to attr-start)
+ (setq to (point-max)))
+ (save-excursion
+ (narrow-to-region attr-start to)
+ (goto-char attr-start)
+ (forward-line)
+ (unless (looking-at ">")
+ (message-indent-citation (point) (point-max) 'yank-only)
+ (goto-char (point-max))
+ (newline)
+ (setq to (point-max)))
+ (widen))
+ (transpose-regions cur attr-start attr-start to))))))
;; John Doe <john.doe@some.domain> wrote in message
;; news:a87usw8$dklsssa$2@some.news.server...
(defun gnus-outlook-repair-attribution-outlook ()
"Repair a broken attribution line (Outlook)."
- (save-excursion
- (let ((case-fold-search nil)
- (inhibit-read-only t)
- (cite-marks gnus-outlook-deuglify-cite-marks))
- (gnus-with-article-buffer
- (article-goto-body)
- (if (re-search-forward
+ (let ((case-fold-search nil)
+ (inhibit-read-only t)
+ (cite-marks gnus-outlook-deuglify-cite-marks))
+ (gnus-with-article-buffer
+ (article-goto-body)
+ (when (re-search-forward
(concat "^\\([^" cite-marks "].+\\)"
"\\(" gnus-outlook-deuglify-attrib-verb-regexp "\\)"
"\\(.*\n?[^\n" cite-marks "].*\\)?"
"\\(" gnus-outlook-deuglify-attrib-end-regexp "\\)$")
nil t)
- (progn
- (gnus-kill-all-overlays)
- (replace-match "\\1\\2\\4")
- (match-beginning 0)))))))
+ (gnus-kill-all-overlays)
+ (replace-match "\\1\\2\\4")
+ (match-beginning 0)))))
;; ----- Original Message -----
@@ -390,42 +396,38 @@ NODISPLAY is non-nil, don't redisplay the article buffer."
(defun gnus-outlook-repair-attribution-block ()
"Repair a big broken attribution block."
- (save-excursion
- (let ((case-fold-search nil)
- (inhibit-read-only t)
- (cite-marks gnus-outlook-deuglify-cite-marks))
- (gnus-with-article-buffer
- (article-goto-body)
- (if (re-search-forward
- (concat "^[" cite-marks " \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n"
+ (let ((case-fold-search nil)
+ (inhibit-read-only t)
+ (cite-marks gnus-outlook-deuglify-cite-marks))
+ (gnus-with-article-buffer
+ (article-goto-body)
+ (when (re-search-forward
+ (concat "^[" cite-marks " \t]*--* ?[^-]+ [^-]+ ?--*\\s *\n"
"[^\n:]+:[ \t]*\\([^\n]+\\)\n"
"\\([^\n:]+:[ \t]*[^\n]+\n\\)+")
nil t)
- (progn
- (gnus-kill-all-overlays)
- (replace-match "\\1 wrote:\n")
- (match-beginning 0)))))))
+ (gnus-kill-all-overlays)
+ (replace-match "\\1 wrote:\n")
+ (match-beginning 0)))))
;; On Wed, 16 Jan 2002 23:23:30 +0100, John Doe <john.doe@some.domain> wrote:
(defun gnus-outlook-repair-attribution-other ()
"Repair a broken attribution line (other user agents than Outlook)."
- (save-excursion
- (let ((case-fold-search nil)
- (inhibit-read-only t)
- (cite-marks gnus-outlook-deuglify-cite-marks))
- (gnus-with-article-buffer
- (article-goto-body)
- (if (re-search-forward
+ (let ((case-fold-search nil)
+ (inhibit-read-only t)
+ (cite-marks gnus-outlook-deuglify-cite-marks))
+ (gnus-with-article-buffer
+ (article-goto-body)
+ (when (re-search-forward
(concat "^\\("gnus-outlook-deuglify-attrib-cut-regexp"\\)?"
"\\([^" cite-marks "].+\\)\n\\([^\n" cite-marks "].*\\)?"
"\\(" gnus-outlook-deuglify-attrib-verb-regexp "\\).*"
"\\(" gnus-outlook-deuglify-attrib-end-regexp "\\)$")
nil t)
- (progn
- (gnus-kill-all-overlays)
- (replace-match "\\4 \\5\\6\\7")
- (match-beginning 0)))))))
+ (gnus-kill-all-overlays)
+ (replace-match "\\4 \\5\\6\\7")
+ (match-beginning 0)))))
;;;###autoload
(defun gnus-article-outlook-repair-attribution (&optional nodisplay)
diff --git a/lisp/gnus/dns.el b/lisp/gnus/dns.el
index fdbe9258686..7910261125a 100644
--- a/lisp/gnus/dns.el
+++ b/lisp/gnus/dns.el
@@ -51,11 +51,13 @@ If nil, /etc/resolv.conf will be consulted.")
(MR 9)
(NULL 10)
(WKS 11)
- (PRT 12)
+ (PTR 12)
(HINFO 13)
(MINFO 14)
(MX 15)
(TXT 16)
+ (AAAA 28) ; RFC3596
+ (SRV 33) ; RFC2782
(AXFR 252)
(MAILB 253)
(MAILA 254)
@@ -252,6 +254,12 @@ If TCP-P, the first two bytes of the package with be the length field."
(push (list slot qs) spec)))
(nreverse spec))))
+(defun dns-read-int32 ()
+ ;; Full 32 bit Integers can't be handled by Emacs. If we use
+ ;; floats, it works.
+ (format "%.0f" (+ (* (dns-read-bytes 1) 16777216.0)
+ (dns-read-bytes 3))))
+
(defun dns-read-type (string type)
(let ((buffer (current-buffer))
(point (point)))
@@ -265,9 +273,27 @@ If TCP-P, the first two bytes of the package with be the length field."
(dotimes (i 4)
(push (dns-read-bytes 1) bytes))
(mapconcat 'number-to-string (nreverse bytes) ".")))
- ((eq type 'NS)
- (dns-read-string-name string buffer))
- ((eq type 'CNAME)
+ ((eq type 'AAAA)
+ (let (hextets)
+ (dotimes (i 8)
+ (push (dns-read-bytes 2) hextets))
+ (mapconcat (lambda (n) (format "%x" n)) (nreverse hextets) ":")))
+ ((eq type 'SOA)
+ (list (list 'mname (dns-read-name buffer))
+ (list 'rname (dns-read-name buffer))
+ (list 'serial (dns-read-int32))
+ (list 'refresh (dns-read-int32))
+ (list 'retry (dns-read-int32))
+ (list 'expire (dns-read-int32))
+ (list 'minimum (dns-read-int32))))
+ ((eq type 'SRV)
+ (list (list 'priority (dns-read-bytes 2))
+ (list 'weight (dns-read-bytes 2))
+ (list 'port (dns-read-bytes 2))
+ (list 'target (dns-read-name buffer))))
+ ((eq type 'MX)
+ (cons (dns-read-bytes 2) (dns-read-name buffer)))
+ ((or (eq type 'CNAME) (eq type 'NS) (eq type 'PTR))
(dns-read-string-name string buffer))
(t string)))
(goto-char point))))
@@ -281,17 +307,32 @@ If TCP-P, the first two bytes of the package with be the length field."
(push (match-string 1) dns-servers))
(setq dns-servers (nreverse dns-servers)))))
-;;; Interface functions.
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'gnus-xmas)))
+(defun dns-read-txt (string)
+ (if (> (length string) 1)
+ (substring string 1)
+ string))
+
+(defun dns-get-txt-answer (answers)
+ (let ((result "")
+ (do-next nil))
+ (dolist (answer answers)
+ (dolist (elem answer)
+ (when (consp elem)
+ (cond
+ ((eq (car elem) 'type)
+ (setq do-next (eq (cadr elem) 'TXT)))
+ ((eq (car elem) 'data)
+ (when do-next
+ (setq result (concat result (dns-read-txt (cadr elem))))))))))
+ result))
+;;; Interface functions.
(defmacro dns-make-network-process (server)
(if (featurep 'xemacs)
`(let ((coding-system-for-read 'binary)
(coding-system-for-write 'binary))
- (gnus-xmas-open-network-stream "dns" (current-buffer)
- ,server "domain" 'udp))
+ (open-network-stream "dns" (current-buffer)
+ ,server "domain" 'udp))
`(let ((server ,server)
(coding-system-for-read 'binary)
(coding-system-for-write 'binary))
@@ -308,13 +349,32 @@ If TCP-P, the first two bytes of the package with be the length field."
;; connection to the DNS server.
(open-network-stream "dns" (current-buffer) server "domain")))))
-(defun query-dns (name &optional type fullp)
+(defvar dns-cache (make-vector 4096 0))
+
+(defun query-dns-cached (name &optional type fullp reversep)
+ (let* ((key (format "%s:%s:%s:%s" name type fullp reversep))
+ (sym (intern-soft key dns-cache)))
+ (if (and sym
+ (boundp sym))
+ (symbol-value sym)
+ (let ((result (query-dns name type fullp reversep)))
+ (set (intern key dns-cache) result)
+ result))))
+
+(defun query-dns (name &optional type fullp reversep)
"Query a DNS server for NAME of TYPE.
-If FULLP, return the entire record returned."
+If FULLP, return the entire record returned.
+If REVERSEP, look up an IP address."
(setq type (or type 'A))
(unless dns-servers
(dns-parse-resolv-conf))
+ (when reversep
+ (setq name (concat
+ (mapconcat 'identity (nreverse (split-string name "\\.")) ".")
+ ".in-addr.arpa")
+ type 'PTR))
+
(if (not dns-servers)
(message "No DNS server configuration found")
(mm-with-unibyte-buffer
@@ -339,6 +399,7 @@ If FULLP, return the entire record returned."
tcp-p))
(while (and (zerop (buffer-size))
(> times 0))
+ (sit-for (/ step 1000.0))
(accept-process-output process 0 step)
(decf times step))
(ignore-errors
@@ -347,13 +408,17 @@ If FULLP, return the entire record returned."
(>= (buffer-size) 2))
(goto-char (point-min))
(delete-region (point) (+ (point) 2)))
- (when (>= (buffer-size) 2)
+ (when (and (>= (buffer-size) 2)
+ ;; We had a time-out.
+ (> times 0))
(let ((result (dns-read (buffer-string))))
(if fullp
result
(let ((answer (car (dns-get 'answers result))))
(when (eq type (dns-get 'type answer))
- (dns-get 'data answer)))))))))))
+ (if (eq type 'TXT)
+ (dns-get-txt-answer (dns-get 'answers result))
+ (dns-get 'data answer))))))))))))
(provide 'dns)
diff --git a/lisp/gnus/ecomplete.el b/lisp/gnus/ecomplete.el
new file mode 100644
index 00000000000..1c333fd2e03
--- /dev/null
+++ b/lisp/gnus/ecomplete.el
@@ -0,0 +1,152 @@
+;;; ecomplete.el --- electric completion of addresses and the like
+;; Copyright (C) 2006 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Keywords: mail
+
+;; 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 3, 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:
+
+(eval-when-compile
+ (require 'cl))
+
+(defgroup ecomplete nil
+ "Electric completion of email addresses and the like."
+ :group 'mail)
+
+(defcustom ecomplete-database-file "~/.ecompleterc"
+ "*The name of the file to store the ecomplete data."
+ :group 'ecomplete
+ :type 'file)
+
+(defcustom ecomplete-database-file-coding-system 'iso-2022-7bit
+ "Coding system used for writing the ecomplete database file."
+ :type '(symbol :tag "Coding system")
+ :group 'ecomplete)
+
+;;; Internal variables.
+
+(defvar ecomplete-database nil)
+
+;;;###autoload
+(defun ecomplete-setup ()
+ (when (file-exists-p ecomplete-database-file)
+ (with-temp-buffer
+ (let ((coding-system-for-read ecomplete-database-file-coding-system))
+ (insert-file-contents ecomplete-database-file)
+ (setq ecomplete-database (read (current-buffer)))))))
+
+(defun ecomplete-add-item (type key text)
+ (let ((elems (assq type ecomplete-database))
+ (now (string-to-number
+ (format "%.0f" (time-to-seconds (current-time)))))
+ entry)
+ (unless elems
+ (push (setq elems (list type)) ecomplete-database))
+ (if (setq entry (assoc key (cdr elems)))
+ (setcdr entry (list (1+ (cadr entry)) now text))
+ (nconc elems (list (list key 1 now text))))))
+
+(defun ecomplete-get-item (type key)
+ (assoc key (cdr (assq type ecomplete-database))))
+
+(defun ecomplete-save ()
+ (with-temp-buffer
+ (let ((coding-system-for-write ecomplete-database-file-coding-system))
+ (insert "(")
+ (loop for (type . elems) in ecomplete-database
+ do
+ (insert (format "(%s\n" type))
+ (dolist (entry elems)
+ (prin1 entry (current-buffer))
+ (insert "\n"))
+ (insert ")\n"))
+ (insert ")")
+ (write-region (point-min) (point-max)
+ ecomplete-database-file nil 'silent))))
+
+(defun ecomplete-get-matches (type match)
+ (let* ((elems (cdr (assq type ecomplete-database)))
+ (match (regexp-quote match))
+ (candidates
+ (sort
+ (loop for (key count time text) in elems
+ when (string-match match text)
+ collect (list count time text))
+ (lambda (l1 l2)
+ (> (car l1) (car l2))))))
+ (when (> (length candidates) 10)
+ (setcdr (nthcdr 10 candidates) nil))
+ (unless (zerop (length candidates))
+ (with-temp-buffer
+ (dolist (candidate candidates)
+ (insert (caddr candidate) "\n"))
+ (goto-char (point-min))
+ (put-text-property (point) (1+ (point)) 'ecomplete t)
+ (while (re-search-forward match nil t)
+ (put-text-property (match-beginning 0) (match-end 0)
+ 'face 'isearch))
+ (buffer-string)))))
+
+(defun ecomplete-display-matches (type word &optional choose)
+ (let* ((matches (ecomplete-get-matches type word))
+ (line 0)
+ (max-lines (when matches (- (length (split-string matches "\n")) 2)))
+ (message-log-max nil)
+ command highlight)
+ (if (not matches)
+ (progn
+ (message "No ecomplete matches")
+ nil)
+ (if (not choose)
+ (progn
+ (message matches)
+ nil)
+ (setq highlight (ecomplete-highlight-match-line matches line))
+ (while (not (memq (setq command (read-event highlight)) '(? return)))
+ (cond
+ ((eq command ?\M-n)
+ (setq line (min (1+ line) max-lines)))
+ ((eq command ?\M-p)
+ (setq line (max (1- line) 0))))
+ (setq highlight (ecomplete-highlight-match-line matches line)))
+ (when (eq command 'return)
+ (nth line (split-string matches "\n")))))))
+
+(defun ecomplete-highlight-match-line (matches line)
+ (with-temp-buffer
+ (insert matches)
+ (goto-char (point-min))
+ (forward-line line)
+ (save-restriction
+ (narrow-to-region (point) (point-at-eol))
+ (while (not (eobp))
+ ;; Put the 'region face on any charactes on this line that
+ ;; aren't already highlighted.
+ (unless (get-text-property (point) 'face)
+ (put-text-property (point) (1+ (point)) 'face 'highlight))
+ (forward-char 1)))
+ (buffer-string)))
+
+(provide 'ecomplete)
+
+;; arch-tag: 34622935-bb81-4711-a600-57b89c2ece72
+;;; ecomplete.el ends here
diff --git a/lisp/gnus/encrypt.el b/lisp/gnus/encrypt.el
new file mode 100644
index 00000000000..1fb54a280eb
--- /dev/null
+++ b/lisp/gnus/encrypt.el
@@ -0,0 +1,296 @@
+;;; encrypt.el --- file encryption routines
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+;; Author: Teodor Zlatanov <tzz@lifelogs.com>
+;; Created: 2003/01/24
+;; Keywords: files
+
+;; 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 3, 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:
+
+;;; This module addresses data encryption. Page breaks are used for
+;;; grouping declarations and documentation relating to each
+;;; particular aspect.
+
+;;; Use in Gnus like this:
+;;; (setq
+;;; nnimap-authinfo-file "~/.authinfo.enc"
+;;; nntp-authinfo-file "~/.authinfo.enc"
+;;; smtpmail-auth-credentials "~/.authinfo.enc"
+;;; ;; using the AES256 cipher, feel free to use your own favorite
+;;; encrypt-file-alist (quote (("~/.authinfo.enc" (gpg "AES256"))))
+;;; password-cache-expiry 600)
+
+;;; Then write ~/.authinfo.enc:
+
+;;; 1) open the old authinfo
+;;; C-x C-f ~/.authinfo
+
+;;; 2) write the new authinfo.enc
+;;; M-x encrypt-write-file-contents RET ~/.authinfo.enc
+
+;;; 3) verify the new authinfo is correct (this will show the contents in the minibuffer)
+;;; M-: (encrypt-get-file-contents "~/.authinfo.enc")
+
+
+;;; Code:
+
+;; autoload password
+(eval-and-compile
+ (autoload 'password-read "password"))
+
+(defgroup encrypt '((password-cache custom-variable)
+ (password-cache-expiry custom-variable))
+ "File encryption configuration."
+ :group 'applications)
+
+(defcustom encrypt-file-alist nil
+ "List of file names or regexes matched with encryptions.
+Format example:
+ '((\"beta\"
+ (gpg \"AES\"))
+ (\"/home/tzz/alpha\"
+ (encrypt-xor \"Semi-Secret\")))"
+
+ :type '(repeat
+ (list :tag "Encryption entry"
+ (radio :tag "What to encrypt"
+ (file :tag "Filename")
+ (regexp :tag "Regular expression match"))
+ (radio :tag "How to encrypt it"
+ (list
+ :tag "GPG Encryption"
+ (const :tag "GPG Program" gpg)
+ (radio :tag "Choose a cipher"
+ (const :tag "3DES Encryption" "3DES")
+ (const :tag "CAST5 Encryption" "CAST5")
+ (const :tag "Blowfish Encryption" "BLOWFISH")
+ (const :tag "AES Encryption" "AES")
+ (const :tag "AES192 Encryption" "AES192")
+ (const :tag "AES256 Encryption" "AES256")
+ (const :tag "Twofish Encryption" "TWOFISH")
+ (string :tag "Cipher Name")))
+ (list
+ :tag "Built-in simple XOR"
+ (const :tag "XOR Encryption" encrypt-xor)
+ (string :tag "XOR Cipher Value (seed value)")))))
+ :group 'encrypt)
+
+;; TODO: now, load gencrypt.el and if successful, modify the
+;; custom-type of encrypt-file-alist to add the gencrypt.el options
+
+;; (plist-get (symbol-plist 'encrypt-file-alist) 'custom-type)
+;; then use plist-put
+
+(defcustom encrypt-gpg-path (executable-find "gpg")
+ "Path to the GPG program."
+ :type '(radio
+ (file :tag "Location of the GPG executable")
+ (const :tag "GPG is not installed" nil))
+ :group 'encrypt)
+
+(defvar encrypt-temp-prefix "encrypt"
+ "Prefix for temporary filenames")
+
+;;;###autoload
+(defun encrypt-find-model (filename)
+ "Given a filename, find a encrypt-file-alist entry"
+ (dolist (entry encrypt-file-alist)
+ (let ((match (nth 0 entry))
+ (model (nth 1 entry)))
+ (when (or (eq match filename)
+ (string-match match filename))
+ (return model)))))
+
+;;;###autoload
+(defun encrypt-insert-file-contents (file &optional model)
+ "Decrypt FILE into the current buffer."
+ (interactive "fFile to insert: ")
+ (let* ((model (or model (encrypt-find-model file)))
+ (method (nth 0 model))
+ (cipher (nth 1 model))
+ (password-key (format "encrypt-password-%s-%s %s"
+ (symbol-name method) cipher file))
+ (passphrase
+ (password-read-and-add
+ (format "%s password for cipher %s (file %s)? "
+ file (symbol-name method) cipher)
+ password-key))
+ (buffer-file-coding-system 'binary)
+ (coding-system-for-read 'binary)
+ outdata)
+
+ ;; note we only insert-file-contents if the method is known to be valid
+ (cond
+ ((eq method 'gpg)
+ (insert-file-contents file)
+ (setq outdata (encrypt-gpg-decode-buffer passphrase cipher)))
+ ((eq method 'encrypt-xor)
+ (insert-file-contents file)
+ (setq outdata (encrypt-xor-decode-buffer passphrase cipher))))
+
+ (if outdata
+ (progn
+ (message "%s was decrypted with %s (cipher %s)"
+ file (symbol-name method) cipher)
+ (delete-region (point-min) (point-max))
+ (goto-char (point-min))
+ (insert outdata))
+ ;; the decryption failed, alas
+ (password-cache-remove password-key)
+ (gnus-error 5 "%s was NOT decrypted with %s (cipher %s)"
+ file (symbol-name method) cipher))))
+
+(defun encrypt-get-file-contents (file &optional model)
+ "Decrypt FILE and return the contents."
+ (interactive "fFile to decrypt: ")
+ (with-temp-buffer
+ (encrypt-insert-file-contents file model)
+ (buffer-string)))
+
+(defun encrypt-put-file-contents (file data &optional model)
+ "Encrypt the DATA to FILE, then continue normally."
+ (with-temp-buffer
+ (insert data)
+ (encrypt-write-file-contents file model)))
+
+(defun encrypt-write-file-contents (file &optional model)
+ "Encrypt the current buffer to FILE, then continue normally."
+ (interactive "sFile to write: ")
+ (setq model (or model (encrypt-find-model file)))
+ (if model
+ (let* ((method (nth 0 model))
+ (cipher (nth 1 model))
+ (password-key (format "encrypt-password-%s-%s %s"
+ (symbol-name method) cipher file))
+ (passphrase
+ (password-read
+ (format "%s password for cipher %s? "
+ (symbol-name method) cipher)
+ password-key))
+ outdata)
+
+ (cond
+ ((eq method 'gpg)
+ (setq outdata (encrypt-gpg-encode-buffer passphrase cipher)))
+ ((eq method 'encrypt-xor)
+ (setq outdata (encrypt-xor-encode-buffer passphrase cipher))))
+
+ (if outdata
+ (progn
+ (message "%s was encrypted with %s (cipher %s)"
+ file (symbol-name method) cipher)
+ (delete-region (point-min) (point-max))
+ (goto-char (point-min))
+ (insert outdata)
+ ;; do not confirm overwrites
+ (write-file file nil))
+ ;; the decryption failed, alas
+ (password-cache-remove password-key)
+ (gnus-error 5 "%s was NOT encrypted with %s (cipher %s)"
+ file (symbol-name method) cipher)))
+ (gnus-error 1 "%s has no associated encryption model! See encrypt-file-alist." file)))
+
+(defun encrypt-xor-encode-buffer (passphrase cipher)
+ (encrypt-xor-process-buffer passphrase cipher t))
+
+(defun encrypt-xor-decode-buffer (passphrase cipher)
+ (encrypt-xor-process-buffer passphrase cipher nil))
+
+(defun encrypt-xor-process-buffer (passphrase
+ cipher
+ &optional encode)
+ "Given PASSPHRASE, xor-encode or decode the contents of the current buffer."
+ (let* ((bs (buffer-substring-no-properties (point-min) (point-max)))
+ ;; passphrase-sum is a simple additive checksum of the
+ ;; passphrase and the cipher
+ (passphrase-sum
+ (when (stringp passphrase)
+ (apply '+ (append cipher passphrase nil))))
+ new-list)
+
+ (with-temp-buffer
+ (if encode
+ (progn
+ (dolist (x (append bs nil))
+ (setq new-list (cons (logxor x passphrase-sum) new-list)))
+
+ (dolist (x new-list)
+ (insert (format "%d " x))))
+ (progn
+ (setq new-list (reverse (split-string bs)))
+ (dolist (x new-list)
+ (setq x (string-to-number x))
+ (insert (format "%c" (logxor x passphrase-sum))))))
+ (buffer-substring-no-properties (point-min) (point-max)))))
+
+(defun encrypt-gpg-encode-buffer (passphrase cipher)
+ (encrypt-gpg-process-buffer passphrase cipher t))
+
+(defun encrypt-gpg-decode-buffer (passphrase cipher)
+ (encrypt-gpg-process-buffer passphrase cipher nil))
+
+(defun encrypt-gpg-process-buffer (passphrase
+ cipher
+ &optional encode)
+ "With PASSPHRASE, use GPG to encode or decode the current buffer."
+ (let* ((program encrypt-gpg-path)
+ (input (buffer-substring-no-properties (point-min) (point-max)))
+ (temp-maker (if (fboundp 'make-temp-file)
+ 'make-temp-file
+ 'make-temp-name))
+ (temp-file (funcall temp-maker encrypt-temp-prefix))
+ (default-enable-multibyte-characters nil)
+ (args `("--cipher-algo" ,cipher
+ "--status-fd" "2"
+ "--logger-fd" "2"
+ "--passphrase-fd" "0"
+ "--no-tty"))
+ exit-status exit-data)
+
+ (when encode
+ (setq args
+ (append args
+ '("--symmetric"
+ "--armor"))))
+
+ (if program
+ (with-temp-buffer
+ (when passphrase
+ (insert passphrase "\n"))
+ (insert input)
+ (setq exit-status
+ (apply #'call-process-region (point-min) (point-max) program
+ t `(t ,temp-file) nil args))
+ (if (equal exit-status 0)
+ (setq exit-data
+ (buffer-substring-no-properties (point-min) (point-max)))
+ (with-temp-buffer
+ (when (file-exists-p temp-file)
+ (insert-file-contents temp-file))
+ (gnus-error 5 (format "%s exited abnormally: '%s' [%s]"
+ program exit-status (buffer-string)))))
+ (delete-file temp-file))
+ (gnus-error 5 "GPG is not installed."))
+ exit-data))
+
+(provide 'encrypt)
+;;; encrypt.el ends here
+
+;; arch-tag: d907e4f1-71b5-42b1-a180-fc7b84ff0648
diff --git a/lisp/gnus/flow-fill.el b/lisp/gnus/flow-fill.el
index 5c2cd65b503..a13cd23156d 100644
--- a/lisp/gnus/flow-fill.el
+++ b/lisp/gnus/flow-fill.el
@@ -75,17 +75,6 @@ RFC 2646 suggests 66 characters for readability."
(sexp)
(integer)))
-(eval-and-compile
- (defalias 'fill-flowed-point-at-bol
- (if (fboundp 'point-at-bol)
- 'point-at-bol
- 'line-beginning-position))
-
- (defalias 'fill-flowed-point-at-eol
- (if (fboundp 'point-at-eol)
- 'point-at-eol
- 'line-end-position)))
-
;;;###autoload
(defun fill-flowed-encode (&optional buffer)
(with-current-buffer (or buffer (current-buffer))
@@ -109,7 +98,7 @@ RFC 2646 suggests 66 characters for readability."
t)))
;;;###autoload
-(defun fill-flowed (&optional buffer)
+(defun fill-flowed (&optional buffer delete-space)
(save-excursion
(set-buffer (or (current-buffer) buffer))
(goto-char (point-min))
@@ -119,6 +108,8 @@ RFC 2646 suggests 66 characters for readability."
(forward-line 1))
(goto-char (point-min))
(while (re-search-forward " $" nil t)
+ (when delete-space
+ (delete-char -1))
(when (save-excursion
(beginning-of-line)
(looking-at "^\\(>*\\)\\( ?\\)"))
@@ -153,8 +144,8 @@ RFC 2646 suggests 66 characters for readability."
(fill-column (eval fill-flowed-display-column))
filladapt-mode
adaptive-fill-mode)
- (fill-region (fill-flowed-point-at-bol)
- (min (1+ (fill-flowed-point-at-eol))
+ (fill-region (point-at-bol)
+ (min (1+ (point-at-eol))
(point-max))
'left 'nosqueeze))
(error
@@ -163,8 +154,7 @@ RFC 2646 suggests 66 characters for readability."
;; Test vectors.
-(eval-when-compile
- (defvar show-trailing-whitespace))
+(defvar show-trailing-whitespace)
(defvar fill-flowed-encode-tests
`(
diff --git a/lisp/gnus/format-spec.el b/lisp/gnus/format-spec.el
index 137603e42c9..951f9aecb81 100644
--- a/lisp/gnus/format-spec.el
+++ b/lisp/gnus/format-spec.el
@@ -49,7 +49,7 @@ the text that it generates."
(spec (string-to-char (match-string 2)))
(val (cdr (assq spec specification))))
(unless val
- (error "Invalid format character: %s" spec))
+ (error "Invalid format character: `%%%c'" spec))
;; Pad result to desired length.
(let ((text (format (concat "%" num "s") val)))
;; Insert first, to preserve text properties.
diff --git a/lisp/gnus/gmm-utils.el b/lisp/gnus/gmm-utils.el
index 71a0662f35a..1d9f30c273c 100644
--- a/lisp/gnus/gmm-utils.el
+++ b/lisp/gnus/gmm-utils.el
@@ -50,6 +50,19 @@ jabbering all the time."
:group 'gmm)
;;;###autoload
+(defun gmm-regexp-concat (regexp)
+ "Potentially concat a list of regexps into a single one.
+The concatenation is done with logical ORs."
+ (cond ((null regexp)
+ nil)
+ ((stringp regexp)
+ regexp)
+ ((listp regexp)
+ (mapconcat (lambda (elt) (concat "\\(" elt "\\)"))
+ regexp
+ "\\|"))))
+
+;;;###autoload
(defun gmm-message (level &rest args)
"If LEVEL is lower than `gmm-verbose' print ARGS using `message'.
diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el
index 21b442aebbb..a29d985463f 100644
--- a/lisp/gnus/gnus-agent.el
+++ b/lisp/gnus/gnus-agent.el
@@ -115,7 +115,7 @@ If nil, only read articles will be expired."
:group 'gnus-agent
:type 'function)
-(defcustom gnus-agent-synchronize-flags t
+(defcustom gnus-agent-synchronize-flags nil
"Indicate if flags are synchronized when you plug in.
If this is `ask' the hook will query the user."
;; If the default switches to something else than nil, then the function
@@ -251,11 +251,24 @@ NOTES:
(defvar gnus-agent-send-mail-function nil)
(defvar gnus-agent-file-coding-system 'raw-text)
(defvar gnus-agent-file-loading-cache nil)
+(defvar gnus-agent-total-fetched-hashtb nil)
+(defvar gnus-agent-inhibit-update-total-fetched-for nil)
+(defvar gnus-agent-need-update-total-fetched-for nil)
;; Dynamic variables
(defvar gnus-headers)
(defvar gnus-score)
+;; Added to support XEmacs
+(eval-and-compile
+ (unless (fboundp 'directory-files-and-attributes)
+ (defun directory-files-and-attributes (directory
+ &optional full match nosort)
+ (let (result)
+ (dolist (file (directory-files directory full match nosort))
+ (push (cons file (file-attributes file)) result))
+ (nreverse result)))))
+
;;;
;;; Setup
;;;
@@ -290,6 +303,17 @@ NOTES:
;;; Utility functions
;;;
+(defmacro gnus-agent-with-refreshed-group (group &rest body)
+ "Performs the body then updates the group's line in the group
+buffer. Automatically blocks multiple updates due to recursion."
+`(prog1 (let ((gnus-agent-inhibit-update-total-fetched-for t)) ,@body)
+ (when (and gnus-agent-need-update-total-fetched-for
+ (not gnus-agent-inhibit-update-total-fetched-for))
+ (save-excursion
+ (set-buffer gnus-group-buffer)
+ (setq gnus-agent-need-update-total-fetched-for nil)
+ (gnus-group-update-group ,group t)))))
+
(defun gnus-agent-read-file (file)
"Load FILE and do a `read' there."
(with-temp-buffer
@@ -345,8 +369,8 @@ manipulated as follows:
(let* ((--category--temp-- (make-symbol "--category--"))
(--value--temp-- (make-symbol "--value--")))
(list (list --category--temp--) ; temporary-variables
- (list category) ; value-forms
- (list --value--temp--) ; store-variables
+ (list category) ; value-forms
+ (list --value--temp--) ; store-variables
(let* ((category --category--temp--) ; store-form
(value --value--temp--))
(list (quote gnus-agent-cat-set-property)
@@ -435,6 +459,16 @@ manipulated as follows:
(defsubst gnus-agent-cat-make (name &optional default-agent-predicate)
(list name `(agent-predicate . ,(or default-agent-predicate 'false))))
+(defun gnus-agent-read-group ()
+ "Read a group name in the minibuffer, with completion."
+ (let ((def (or (gnus-group-group-name) gnus-newsgroup-name)))
+ (when def
+ (setq def (gnus-group-decoded-name def)))
+ (gnus-group-completing-read (if def
+ (concat "Group Name (" def "): ")
+ "Group Name: ")
+ nil nil t nil nil def)))
+
;;; Fetching setup functions.
(defun gnus-agent-start-fetch ()
@@ -892,7 +926,8 @@ supported."
(new-command-method (gnus-find-method-for-group new-group))
(new-path (directory-file-name
(let (gnus-command-method new-command-method)
- (gnus-agent-group-pathname new-group)))))
+ (gnus-agent-group-pathname new-group))))
+ (file-name-coding-system nnmail-pathname-coding-system))
(gnus-rename-file old-path new-path t)
(let* ((old-real-group (gnus-group-real-name old-group))
@@ -920,7 +955,8 @@ supported."
(let* ((command-method (gnus-find-method-for-group group))
(path (directory-file-name
(let (gnus-command-method command-method)
- (gnus-agent-group-pathname group)))))
+ (gnus-agent-group-pathname group))))
+ (file-name-coding-system nnmail-pathname-coding-system))
(gnus-delete-directory path)
(let* ((real-group (gnus-group-real-name group)))
@@ -1285,7 +1321,8 @@ This can be added to `gnus-select-article-hook' or
(gnus-active-to-gnus-format nil new)
(gnus-agent-write-active file new)
(erase-buffer)
- (nnheader-insert-file-contents file))))
+ (let ((nnheader-file-coding-system gnus-agent-file-coding-system))
+ (nnheader-insert-file-contents file)))))
(defun gnus-agent-write-active (file new)
(gnus-make-directory (file-name-directory file))
@@ -1398,6 +1435,18 @@ downloaded into the agent."
oactive-min (read (current-buffer))) ;; min
(cons oactive-min oactive-max))))))))
+(defvar gnus-agent-decoded-group-names nil
+ "Alist of non-ASCII group names and decoded ones.")
+
+(defun gnus-agent-decoded-group-name (group)
+ "Return a decoded group name of GROUP."
+ (or (cdr (assoc group gnus-agent-decoded-group-names))
+ (if (string-match "[^\000-\177]" group)
+ (let ((decoded (gnus-group-decoded-name group)))
+ (push (cons group decoded) gnus-agent-decoded-group-names)
+ decoded)
+ group)))
+
(defun gnus-agent-group-path (group)
"Translate GROUP into a file name."
@@ -1409,26 +1458,25 @@ downloaded into the agent."
(nnheader-translate-file-chars
(nnheader-replace-duplicate-chars-in-string
(nnheader-replace-chars-in-string
- (gnus-group-real-name (gnus-group-decoded-name group))
+ (gnus-group-real-name (gnus-agent-decoded-group-name group))
?/ ?_)
?. ?_)))
(if (or nnmail-use-long-file-names
(file-directory-p (expand-file-name group (gnus-agent-directory))))
group
- (mm-encode-coding-string
- (nnheader-replace-chars-in-string group ?. ?/)
- nnmail-pathname-coding-system)))
+ (nnheader-replace-chars-in-string group ?. ?/)))
(defun gnus-agent-group-pathname (group)
"Translate GROUP into a file name."
;; nnagent uses nnmail-group-pathname to read articles while
;; unplugged. The agent must, therefore, use the same directory
;; while plugged.
- (let ((gnus-command-method (or gnus-command-method
- (gnus-find-method-for-group group))))
- (nnmail-group-pathname (gnus-group-real-name
- (gnus-group-decoded-name group))
- (gnus-agent-directory))))
+ (nnmail-group-pathname
+ (gnus-group-real-name (gnus-agent-decoded-group-name group))
+ (if gnus-command-method
+ (gnus-agent-directory)
+ (let ((gnus-command-method (gnus-find-method-for-group group)))
+ (gnus-agent-directory)))))
(defun gnus-agent-get-function (method)
(if (gnus-online method)
@@ -1532,7 +1580,8 @@ downloaded into the agent."
(dir (gnus-agent-group-pathname group))
(date (time-to-days (current-time)))
(case-fold-search t)
- pos crosses id)
+ pos crosses id
+ (file-name-coding-system nnmail-pathname-coding-system))
(setcar selected-sets (nreverse (car selected-sets)))
(setq selected-sets (nreverse selected-sets))
@@ -1601,33 +1650,46 @@ downloaded into the agent."
(setq pos (cdr pos)))))
(gnus-agent-save-alist group (cdr fetched-articles) date)
+ (gnus-agent-update-files-total-fetched-for group (cdr fetched-articles))
+
(gnus-message 7 ""))
(cdr fetched-articles))))))
(defun gnus-agent-unfetch-articles (group articles)
"Delete ARTICLES that were fetched from GROUP into the agent."
(when articles
- (gnus-agent-load-alist group)
- (let* ((alist (cons nil gnus-agent-article-alist))
- (articles (sort articles #'<))
- (next-possibility alist)
- (delete-this (pop articles)))
- (while (and (cdr next-possibility) delete-this)
- (let ((have-this (caar (cdr next-possibility))))
- (cond ((< delete-this have-this)
- (setq delete-this (pop articles)))
- ((= delete-this have-this)
- (let ((timestamp (cdar (cdr next-possibility))))
- (when timestamp
- (let* ((file-name (concat (gnus-agent-group-pathname group)
- (number-to-string have-this))))
- (delete-file file-name))))
-
- (setcdr next-possibility (cddr next-possibility)))
- (t
- (setq next-possibility (cdr next-possibility))))))
- (setq gnus-agent-article-alist (cdr alist))
- (gnus-agent-save-alist group))))
+ (gnus-agent-with-refreshed-group
+ group
+ (gnus-agent-load-alist group)
+ (let* ((alist (cons nil gnus-agent-article-alist))
+ (articles (sort articles #'<))
+ (next-possibility alist)
+ (delete-this (pop articles)))
+ (while (and (cdr next-possibility) delete-this)
+ (let ((have-this (caar (cdr next-possibility))))
+ (cond
+ ((< delete-this have-this)
+ (setq delete-this (pop articles)))
+ ((= delete-this have-this)
+ (let ((timestamp (cdar (cdr next-possibility))))
+ (when timestamp
+ (let* ((file-name (concat (gnus-agent-group-pathname group)
+ (number-to-string have-this)))
+ (size-file
+ (float (or (and gnus-agent-total-fetched-hashtb
+ (nth 7 (file-attributes file-name)))
+ 0)))
+ (file-name-coding-system
+ nnmail-pathname-coding-system))
+ (delete-file file-name)
+ (gnus-agent-update-files-total-fetched-for
+ group (- size-file)))))
+
+ (setcdr next-possibility (cddr next-possibility)))
+ (t
+ (setq next-possibility (cdr next-possibility))))))
+ (setq gnus-agent-article-alist (cdr alist))
+ (gnus-agent-save-alist group)))))
(defun gnus-agent-crosspost (crosses article &optional date)
(setq date (or date t))
@@ -1651,8 +1713,9 @@ downloaded into the agent."
(when (= (point-max) (point-min))
(push (cons group (current-buffer)) gnus-agent-buffer-alist)
(ignore-errors
- (nnheader-insert-file-contents
- (gnus-agent-article-name ".overview" group))))
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (nnheader-insert-file-contents
+ (gnus-agent-article-name ".overview" group)))))
(nnheader-find-nov-line (string-to-number (cdar crosses)))
(insert (string-to-number (cdar crosses)))
(insert-buffer-substring gnus-agent-overview-buffer beg end)
@@ -1663,7 +1726,8 @@ downloaded into the agent."
(when gnus-newsgroup-name
(let ((root (gnus-agent-article-name ".overview" gnus-newsgroup-name))
(cnt 0)
- name)
+ name
+ (file-name-coding-system nnmail-pathname-coding-system))
(while (file-exists-p
(setq name (concat root "~"
(int-to-string (setq cnt (1+ cnt))) "~"))))
@@ -1697,7 +1761,7 @@ and that there are no duplicates."
(gnus-message 1
"Overview buffer contains garbage '%s'."
(buffer-substring
- p (gnus-point-at-eol))))
+ p (point-at-eol))))
((= cur prev-num)
(or backed-up
(setq backed-up (gnus-agent-backup-overview-buffer)))
@@ -1715,25 +1779,71 @@ and that there are no duplicates."
(setq prev-num cur)))
(forward-line 1)))))))
+(defun gnus-agent-flush-server (&optional server-or-method)
+ "Flush all agent index files for every subscribed group within
+ the given SERVER-OR-METHOD. When called with nil, the current
+ value of gnus-command-method identifies the server."
+ (let* ((gnus-command-method (if server-or-method
+ (gnus-server-to-method server-or-method)
+ gnus-command-method))
+ (alist gnus-newsrc-alist))
+ (while alist
+ (let ((entry (pop alist)))
+ (when (gnus-methods-equal-p gnus-command-method (gnus-info-method entry))
+ (gnus-agent-flush-group (gnus-info-group entry)))))))
+
+(defun gnus-agent-flush-group (group)
+ "Flush the agent's index files such that the GROUP no longer
+appears to have any local content. The actual content, the
+article files, may then be deleted using gnus-agent-expire-group.
+If flushing was a mistake, the gnus-agent-regenerate-group method
+provides an undo mechanism by reconstructing the index files from
+the article files."
+ (interactive (list (gnus-agent-read-group)))
+
+ (let* ((gnus-command-method (or gnus-command-method
+ (gnus-find-method-for-group group)))
+ (overview (gnus-agent-article-name ".overview" group))
+ (agentview (gnus-agent-article-name ".agentview" group))
+ (file-name-coding-system nnmail-pathname-coding-system))
+
+ (if (file-exists-p overview)
+ (delete-file overview))
+ (if (file-exists-p agentview)
+ (delete-file agentview))
+
+ (gnus-agent-update-view-total-fetched-for group nil gnus-command-method)
+ (gnus-agent-update-view-total-fetched-for group t gnus-command-method)
+
+ ;(gnus-agent-set-local group nil nil)
+ ;(gnus-agent-save-local t)
+ (gnus-agent-save-group-info nil group nil)))
+
(defun gnus-agent-flush-cache ()
+ "Flush the agent's index files such that the group no longer
+appears to have any local content. The actual content, the
+article files, is then deleted using gnus-agent-expire-group. The
+gnus-agent-regenerate-group method provides an undo mechanism by
+reconstructing the index files from the article files."
+ (interactive)
(save-excursion
- (while gnus-agent-buffer-alist
- (set-buffer (cdar gnus-agent-buffer-alist))
- (let ((coding-system-for-write
- gnus-agent-file-coding-system))
- (write-region (point-min) (point-max)
- (gnus-agent-article-name ".overview"
- (caar gnus-agent-buffer-alist))
- nil 'silent))
- (setq gnus-agent-buffer-alist (cdr gnus-agent-buffer-alist)))
- (while gnus-agent-group-alist
- (with-temp-file (gnus-agent-article-name
- ".agentview" (caar gnus-agent-group-alist))
- (princ (cdar gnus-agent-group-alist))
- (insert "\n")
- (princ 1 (current-buffer))
- (insert "\n"))
- (setq gnus-agent-group-alist (cdr gnus-agent-group-alist)))))
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (while gnus-agent-buffer-alist
+ (set-buffer (cdar gnus-agent-buffer-alist))
+ (let ((coding-system-for-write gnus-agent-file-coding-system))
+ (write-region (point-min) (point-max)
+ (gnus-agent-article-name ".overview"
+ (caar gnus-agent-buffer-alist))
+ nil 'silent))
+ (setq gnus-agent-buffer-alist (cdr gnus-agent-buffer-alist)))
+ (while gnus-agent-group-alist
+ (with-temp-file (gnus-agent-article-name
+ ".agentview" (caar gnus-agent-group-alist))
+ (princ (cdar gnus-agent-group-alist))
+ (insert "\n")
+ (princ 1 (current-buffer))
+ (insert "\n"))
+ (setq gnus-agent-group-alist (cdr gnus-agent-group-alist))))))
;;;###autoload
(defun gnus-agent-find-parameter (group symbol)
@@ -1777,7 +1887,8 @@ article numbers will be returned."
(gnus-list-of-unread-articles group)))
(gnus-decode-encoded-word-function 'identity)
(gnus-decode-encoded-address-function 'identity)
- (file (gnus-agent-article-name ".overview" group)))
+ (file (gnus-agent-article-name ".overview" group))
+ (file-name-coding-system nnmail-pathname-coding-system))
(unless fetch-all
;; Add articles with marks to the list of article headers we want to
@@ -1857,6 +1968,7 @@ article numbers will be returned."
gnus-agent-file-coding-system))
(gnus-agent-check-overview-buffer)
(write-region (point-min) (point-max) file nil 'silent))
+ (gnus-agent-update-view-total-fetched-for group t)
(gnus-agent-save-alist group articles nil)
articles)
(ignore-errors
@@ -1926,21 +2038,21 @@ doesn't exist, to valid the overview buffer."
(gnus-agent-copy-nov-line (pop articles))
(ignore-errors
- (while articles
- (while (let ((art (read (current-buffer))))
- (cond ((< art (car articles))
- (forward-line 1)
- t)
- ((= art (car articles))
- (beginning-of-line)
- (delete-region
- (point) (progn (forward-line 1) (point)))
- nil)
- (t
- (beginning-of-line)
- nil))))
+ (while articles
+ (while (let ((art (read (current-buffer))))
+ (cond ((< art (car articles))
+ (forward-line 1)
+ t)
+ ((= art (car articles))
+ (beginning-of-line)
+ (delete-region
+ (point) (progn (forward-line 1) (point)))
+ nil)
+ (t
+ (beginning-of-line)
+ nil))))
- (gnus-agent-copy-nov-line (pop articles)))))
+ (gnus-agent-copy-nov-line (pop articles)))))
(goto-char (point-max))
@@ -1957,26 +2069,26 @@ doesn't exist, to valid the overview buffer."
(setq last (or last -134217728))
(while (catch 'problems
- (let (sort art)
- (while (not (eobp))
- (setq art (gnus-agent-read-article-number))
- (cond ((not art)
- ;; Bad art num - delete this line
- (beginning-of-line)
- (delete-region (point) (progn (forward-line 1) (point))))
- ((< art last)
- ;; Art num out of order - enable sort
- (setq sort t)
- (forward-line 1))
+ (let (sort art)
+ (while (not (eobp))
+ (setq art (gnus-agent-read-article-number))
+ (cond ((not art)
+ ;; Bad art num - delete this line
+ (beginning-of-line)
+ (delete-region (point) (progn (forward-line 1) (point))))
+ ((< art last)
+ ;; Art num out of order - enable sort
+ (setq sort t)
+ (forward-line 1))
((= art last)
;; Bad repeat of art number - delete this line
(beginning-of-line)
(delete-region (point) (progn (forward-line 1) (point))))
- (t
- ;; Good art num
- (setq last art)
- (forward-line 1))))
- (when sort
+ (t
+ ;; Good art num
+ (setq last art)
+ (forward-line 1))))
+ (when sort
;; something is seriously wrong as we simply shouldn't see out-of-order data.
;; First, we'll fix the sort.
(sort-numeric-fields 1 (point-min) (point-max))
@@ -1992,13 +2104,13 @@ doesn't exist, to valid the overview buffer."
;; Keeps the compiler from warning about the free variable in
;; gnus-agent-read-agentview.
-(eval-when-compile
- (defvar gnus-agent-read-agentview))
+(defvar gnus-agent-read-agentview)
(defun gnus-agent-load-alist (group)
"Load the article-state alist for GROUP."
;; Bind free variable that's used in `gnus-agent-read-agentview'.
- (let ((gnus-agent-read-agentview group))
+ (let ((gnus-agent-read-agentview group)
+ (file-name-coding-system nnmail-pathname-coding-system))
(setq gnus-agent-article-alist
(gnus-cache-file-contents
(gnus-agent-article-name ".agentview" group)
@@ -2009,52 +2121,63 @@ doesn't exist, to valid the overview buffer."
"Load FILE and do a `read' there."
(with-temp-buffer
(condition-case nil
- (progn
- (nnheader-insert-file-contents file)
- (goto-char (point-min))
- (let ((alist (read (current-buffer)))
- (version (condition-case nil (read (current-buffer))
- (end-of-file 0)))
- changed-version)
-
- (cond
- ((= version 0)
- (let ((inhibit-quit t)
- entry)
- (gnus-agent-open-history)
- (set-buffer (gnus-agent-history-buffer))
- (goto-char (point-min))
- (while (not (eobp))
- (if (and (looking-at
- "[^\t\n]+\t\\([0-9]+\\)\t\\([^ \n]+\\) \\([0-9]+\\)")
- (string= (match-string 2)
- gnus-agent-read-agentview)
- (setq entry (assoc (string-to-number (match-string 3)) alist)))
- (setcdr entry (string-to-number (match-string 1))))
- (forward-line 1))
- (gnus-agent-close-history)
- (setq changed-version t)))
- ((= version 1)
- (setq changed-version (not (= 1 gnus-agent-article-alist-save-format))))
- ((= version 2)
- (let (uncomp)
- (mapcar
- (lambda (comp-list)
- (let ((state (car comp-list))
- (sequence (inline
- (gnus-uncompress-range
- (cdr comp-list)))))
- (mapcar (lambda (article-id)
- (setq uncomp (cons (cons article-id state) uncomp)))
- sequence)))
- alist)
+ (progn
+ (nnheader-insert-file-contents file)
+ (goto-char (point-min))
+ (let ((alist (read (current-buffer)))
+ (version (condition-case nil (read (current-buffer))
+ (end-of-file 0)))
+ changed-version)
+
+ (cond
+ ((= version 0)
+ (let ((inhibit-quit t)
+ entry)
+ (gnus-agent-open-history)
+ (set-buffer (gnus-agent-history-buffer))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (if (and (looking-at
+ "[^\t\n]+\t\\([0-9]+\\)\t\\([^ \n]+\\) \\([0-9]+\\)")
+ (string= (match-string 2)
+ gnus-agent-read-agentview)
+ (setq entry (assoc (string-to-number (match-string 3)) alist)))
+ (setcdr entry (string-to-number (match-string 1))))
+ (forward-line 1))
+ (gnus-agent-close-history)
+ (setq changed-version t)))
+ ((= version 1)
+ (setq changed-version (not (= 1 gnus-agent-article-alist-save-format))))
+ ((= version 2)
+ (let (state sequence uncomp)
+ (while alist
+ (setq state (caar alist)
+ sequence (inline (gnus-uncompress-range (cdar alist)))
+ alist (cdr alist))
+ (while sequence
+ (push (cons (pop sequence) state) uncomp)))
(setq alist (sort uncomp 'car-less-than-car)))
(setq changed-version (not (= 2 gnus-agent-article-alist-save-format)))))
- (when changed-version
- (let ((gnus-agent-article-alist alist))
- (gnus-agent-save-alist gnus-agent-read-agentview)))
- alist))
- (file-error nil))))
+ (when changed-version
+ (let ((gnus-agent-article-alist alist))
+ (gnus-agent-save-alist gnus-agent-read-agentview)))
+ alist))
+ ((end-of-file file-error)
+ ;; The agentview file is missing.
+ (condition-case nil
+ ;; If the agent directory exists, attempt to perform a brute-force
+ ;; reconstruction of its contents.
+ (let* (alist
+ (file-name-coding-system nnmail-pathname-coding-system)
+ (file-attributes (directory-files-and-attributes
+ (gnus-agent-article-name ""
+ gnus-agent-read-agentview) nil "^[0-9]+$" t)))
+ (while file-attributes
+ (let ((fa (pop file-attributes)))
+ (unless (nth 1 fa)
+ (push (cons (string-to-number (nth 0 fa)) (time-to-days (nth 5 fa))) alist))))
+ alist)
+ (file-error nil))))))
(defun gnus-agent-save-alist (group &optional articles state)
"Save the article-state alist for GROUP."
@@ -2085,27 +2208,27 @@ doesn't exist, to valid the overview buffer."
(cond ((eq gnus-agent-article-alist-save-format 1)
(princ gnus-agent-article-alist (current-buffer)))
((eq gnus-agent-article-alist-save-format 2)
- (let ((compressed nil))
- (mapcar (lambda (pair)
- (let* ((article-id (car pair))
- (day-of-download (cdr pair))
- (comp-list (assq day-of-download compressed)))
- (if comp-list
- (setcdr comp-list
- (cons article-id (cdr comp-list)))
- (setq compressed
- (cons (list day-of-download article-id)
- compressed)))
- nil)) gnus-agent-article-alist)
- (mapcar (lambda (comp-list)
- (setcdr comp-list
- (gnus-compress-sequence
- (nreverse (cdr comp-list)))))
- compressed)
+ (let ((alist gnus-agent-article-alist)
+ article-id day-of-download comp-list compressed)
+ (while alist
+ (setq article-id (caar alist)
+ day-of-download (cdar alist)
+ comp-list (assq day-of-download compressed)
+ alist (cdr alist))
+ (if comp-list
+ (setcdr comp-list (cons article-id (cdr comp-list)))
+ (push (list day-of-download article-id) compressed)))
+ (setq alist compressed)
+ (while alist
+ (setq comp-list (pop alist))
+ (setcdr comp-list
+ (gnus-compress-sequence (nreverse (cdr comp-list)))))
(princ compressed (current-buffer)))))
(insert "\n")
(princ gnus-agent-article-alist-save-format (current-buffer))
- (insert "\n"))))
+ (insert "\n"))
+
+ (gnus-agent-update-view-total-fetched-for group nil)))
(defvar gnus-agent-article-local nil)
(defvar gnus-agent-file-loading-local nil)
@@ -2183,10 +2306,10 @@ modified) original contents, they are first saved to their own file."
(dest (gnus-agent-lib-file "local")))
(gnus-make-directory (gnus-agent-lib-file ""))
- (let ((buffer-file-coding-system gnus-agent-file-coding-system))
+ (let ((coding-system-for-write gnus-agent-file-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
(with-temp-file dest
(let ((gnus-command-method (symbol-value (intern "+method" my-obarray)))
- (file-name-coding-system nnmail-pathname-coding-system)
print-level print-length item article
(standard-output (current-buffer)))
(mapatoms (lambda (symbol)
@@ -2197,11 +2320,11 @@ modified) original contents, they are first saved to their own file."
(t
(let ((range (symbol-value symbol)))
(when range
- (prin1 symbol)
- (princ " ")
- (princ (car range))
- (princ " ")
- (princ (cdr range))
+ (prin1 symbol)
+ (princ " ")
+ (princ (car range))
+ (princ " ")
+ (princ (cdr range))
(princ "\n"))))))
my-obarray))))))))
@@ -2462,8 +2585,8 @@ modified) original contents, they are first saved to their own file."
(when gnus-agent-mark-unread-after-downloaded
(setq gnus-newsgroup-downloadable
(delq article gnus-newsgroup-downloadable))
- (gnus-summary-mark-article
- article gnus-unread-mark))
+ (gnus-summary-mark-article
+ article gnus-unread-mark))
(when (gnus-summary-goto-subject article nil t)
(gnus-summary-update-download-mark article)))
(dolist (article unfetched-articles)
@@ -2654,7 +2777,7 @@ The following commands are available:
(gnus-category-position-point)))
(defun gnus-category-name ()
- (or (intern (get-text-property (gnus-point-at-bol) 'gnus-category))
+ (or (intern (get-text-property (point-at-bol) 'gnus-category))
(error "No category on the current line")))
(defun gnus-category-read ()
@@ -2975,22 +3098,12 @@ The articles on which the expiration process runs are selected as follows:
if ARTICLES is t, all articles.
if ARTICLES is a list, just those articles.
FORCE is equivalent to setting the expiration predicates to true."
- (interactive
- (list (let ((def (or (gnus-group-group-name)
- gnus-newsgroup-name)))
- (let ((select (read-string (if def
- (concat "Group Name ("
- def "): ")
- "Group Name: "))))
- (if (and (equal "" select)
- def)
- def
- select)))))
+ (interactive (list (gnus-agent-read-group)))
(if (not group)
(gnus-agent-expire articles group force)
(let ( ;; Bind gnus-agent-expire-stats to enable tracking of
- ;; expiration statistics of this single group
+ ;; expiration statistics of this single group
(gnus-agent-expire-stats (list 0 0 0.0)))
(if (or (not (eq articles t))
(yes-or-no-p
@@ -3020,337 +3133,375 @@ FORCE is equivalent to setting the expiration predicates to true."
;; gnus-command-method, initialized overview buffer, and to have
;; provided a non-nil active
- (let ((dir (gnus-agent-group-pathname group)))
- (when (boundp 'gnus-agent-expire-current-dirs)
- (set 'gnus-agent-expire-current-dirs
- (cons dir
- (symbol-value 'gnus-agent-expire-current-dirs))))
-
- (if (and (not force)
- (eq 'DISABLE (gnus-agent-find-parameter group
- 'agent-enable-expiration)))
- (gnus-message 5 "Expiry skipping over %s" group)
- (gnus-message 5 "Expiring articles in %s" group)
- (gnus-agent-load-alist group)
- (let* ((bytes-freed 0)
- (files-deleted 0)
- (nov-entries-deleted 0)
- (info (gnus-get-info group))
- (alist gnus-agent-article-alist)
- (day (- (time-to-days (current-time))
- (gnus-agent-find-parameter group 'agent-days-until-old)))
- (specials (if (and alist
- (not force))
- ;; This could be a bit of a problem. I need to
- ;; keep the last article to avoid refetching
- ;; headers when using nntp in the backend. At
- ;; the same time, if someone uses a backend
- ;; that supports article moving then I may have
- ;; to remove the last article to complete the
- ;; move. Right now, I'm going to assume that
- ;; FORCE overrides specials.
- (list (caar (last alist)))))
- (unreads ;; Articles that are excluded from the
- ;; expiration process
- (cond (gnus-agent-expire-all
- ;; All articles are marked read by global decree
- nil)
- ((eq articles t)
- ;; All articles are marked read by function
- ;; parameter
- nil)
- ((not articles)
- ;; Unread articles are marked protected from
- ;; expiration Don't call
- ;; gnus-list-of-unread-articles as it returns
- ;; articles that have not been fetched into the
- ;; agent.
- (ignore-errors
- (gnus-agent-unread-articles group)))
- (t
- ;; All articles EXCEPT those named by the caller
- ;; are protected from expiration
- (gnus-sorted-difference
- (gnus-uncompress-range
- (cons (caar alist)
- (caar (last alist))))
- (sort articles '<)))))
- (marked ;; More articles that are excluded from the
- ;; expiration process
- (cond (gnus-agent-expire-all
- ;; All articles are unmarked by global decree
- nil)
- ((eq articles t)
- ;; All articles are unmarked by function
- ;; parameter
- nil)
- (articles
- ;; All articles may as well be unmarked as the
- ;; unreads list already names the articles we are
- ;; going to keep
- nil)
- (t
- ;; Ticked and/or dormant articles are excluded
- ;; from expiration
- (nconc
- (gnus-uncompress-range
- (cdr (assq 'tick (gnus-info-marks info))))
- (gnus-uncompress-range
- (cdr (assq 'dormant
- (gnus-info-marks info))))))))
- (nov-file (concat dir ".overview"))
- (cnt 0)
- (completed -1)
- dlist
- type)
-
- ;; The normal article alist contains elements that look like
- ;; (article# . fetch_date) I need to combine other
- ;; information with this list. For example, a flag indicating
- ;; that a particular article MUST BE KEPT. To do this, I'm
- ;; going to transform the elements to look like (article#
- ;; fetch_date keep_flag NOV_entry_marker) Later, I'll reverse
- ;; the process to generate the expired article alist.
-
- ;; Convert the alist elements to (article# fetch_date nil
- ;; nil).
- (setq dlist (mapcar (lambda (e)
- (list (car e) (cdr e) nil nil)) alist))
-
- ;; Convert the keep lists to elements that look like (article#
- ;; nil keep_flag nil) then append it to the expanded dlist
- ;; These statements are sorted by ascending precidence of the
- ;; keep_flag.
- (setq dlist (nconc dlist
- (mapcar (lambda (e)
- (list e nil 'unread nil))
- unreads)))
- (setq dlist (nconc dlist
- (mapcar (lambda (e)
- (list e nil 'marked nil))
- marked)))
- (setq dlist (nconc dlist
- (mapcar (lambda (e)
- (list e nil 'special nil))
- specials)))
-
- (set-buffer overview)
- (erase-buffer)
- (buffer-disable-undo)
- (when (file-exists-p nov-file)
- (gnus-message 7 "gnus-agent-expire: Loading overview...")
- (nnheader-insert-file-contents nov-file)
- (goto-char (point-min))
-
- (let (p)
- (while (< (setq p (point)) (point-max))
- (condition-case nil
- ;; If I successfully read an integer (the plus zero
- ;; ensures a numeric type), prepend a marker entry
- ;; to the list
- (push (list (+ 0 (read (current-buffer))) nil nil
- (set-marker (make-marker) p))
- dlist)
- (error
- (gnus-message 1 "gnus-agent-expire: read error \
+ (let ((dir (gnus-agent-group-pathname group))
+ (file-name-coding-system nnmail-pathname-coding-system)
+ (decoded (gnus-agent-decoded-group-name group)))
+ (gnus-agent-with-refreshed-group
+ group
+ (when (boundp 'gnus-agent-expire-current-dirs)
+ (set 'gnus-agent-expire-current-dirs
+ (cons dir
+ (symbol-value 'gnus-agent-expire-current-dirs))))
+
+ (if (and (not force)
+ (eq 'DISABLE (gnus-agent-find-parameter group
+ 'agent-enable-expiration)))
+ (gnus-message 5 "Expiry skipping over %s" decoded)
+ (gnus-message 5 "Expiring articles in %s" decoded)
+ (gnus-agent-load-alist group)
+ (let* ((bytes-freed 0)
+ (size-files-deleted 0.0)
+ (files-deleted 0)
+ (nov-entries-deleted 0)
+ (info (gnus-get-info group))
+ (alist gnus-agent-article-alist)
+ (day (- (time-to-days (current-time))
+ (gnus-agent-find-parameter group 'agent-days-until-old)))
+ (specials (if (and alist
+ (not force))
+ ;; This could be a bit of a problem. I need to
+ ;; keep the last article to avoid refetching
+ ;; headers when using nntp in the backend. At
+ ;; the same time, if someone uses a backend
+ ;; that supports article moving then I may have
+ ;; to remove the last article to complete the
+ ;; move. Right now, I'm going to assume that
+ ;; FORCE overrides specials.
+ (list (caar (last alist)))))
+ (unreads ;; Articles that are excluded from the
+ ;; expiration process
+ (cond (gnus-agent-expire-all
+ ;; All articles are marked read by global decree
+ nil)
+ ((eq articles t)
+ ;; All articles are marked read by function
+ ;; parameter
+ nil)
+ ((not articles)
+ ;; Unread articles are marked protected from
+ ;; expiration Don't call
+ ;; gnus-list-of-unread-articles as it returns
+ ;; articles that have not been fetched into the
+ ;; agent.
+ (ignore-errors
+ (gnus-agent-unread-articles group)))
+ (t
+ ;; All articles EXCEPT those named by the caller
+ ;; are protected from expiration
+ (gnus-sorted-difference
+ (gnus-uncompress-range
+ (cons (caar alist)
+ (caar (last alist))))
+ (sort articles '<)))))
+ (marked ;; More articles that are excluded from the
+ ;; expiration process
+ (cond (gnus-agent-expire-all
+ ;; All articles are unmarked by global decree
+ nil)
+ ((eq articles t)
+ ;; All articles are unmarked by function
+ ;; parameter
+ nil)
+ (articles
+ ;; All articles may as well be unmarked as the
+ ;; unreads list already names the articles we are
+ ;; going to keep
+ nil)
+ (t
+ ;; Ticked and/or dormant articles are excluded
+ ;; from expiration
+ (nconc
+ (gnus-uncompress-range
+ (cdr (assq 'tick (gnus-info-marks info))))
+ (gnus-uncompress-range
+ (cdr (assq 'dormant
+ (gnus-info-marks info))))))))
+ (nov-file (concat dir ".overview"))
+ (cnt 0)
+ (completed -1)
+ dlist
+ type)
+
+ ;; The normal article alist contains elements that look like
+ ;; (article# . fetch_date) I need to combine other
+ ;; information with this list. For example, a flag indicating
+ ;; that a particular article MUST BE KEPT. To do this, I'm
+ ;; going to transform the elements to look like (article#
+ ;; fetch_date keep_flag NOV_entry_position) Later, I'll reverse
+ ;; the process to generate the expired article alist.
+
+ ;; Convert the alist elements to (article# fetch_date nil
+ ;; nil).
+ (setq dlist (mapcar (lambda (e)
+ (list (car e) (cdr e) nil nil)) alist))
+
+ ;; Convert the keep lists to elements that look like (article#
+ ;; nil keep_flag nil) then append it to the expanded dlist
+ ;; These statements are sorted by ascending precidence of the
+ ;; keep_flag.
+ (setq dlist (nconc dlist
+ (mapcar (lambda (e)
+ (list e nil 'unread nil))
+ unreads)))
+ (setq dlist (nconc dlist
+ (mapcar (lambda (e)
+ (list e nil 'marked nil))
+ marked)))
+ (setq dlist (nconc dlist
+ (mapcar (lambda (e)
+ (list e nil 'special nil))
+ specials)))
+
+ (set-buffer overview)
+ (erase-buffer)
+ (buffer-disable-undo)
+ (when (file-exists-p nov-file)
+ (gnus-message 7 "gnus-agent-expire: Loading overview...")
+ (nnheader-insert-file-contents nov-file)
+ (goto-char (point-min))
+
+ (let (p)
+ (while (< (setq p (point)) (point-max))
+ (condition-case nil
+ ;; If I successfully read an integer (the plus zero
+ ;; ensures a numeric type), append the position
+ ;; to the list
+ (push (list (+ 0 (read (current-buffer))) nil nil
+ p)
+ dlist)
+ (error
+ (gnus-message 1 "gnus-agent-expire: read error \
occurred when reading expression at %s in %s. Skipping to next \
line." (point) nov-file)))
- ;; Whether I succeeded, or failed, it doesn't matter.
- ;; Move to the next line then try again.
- (forward-line 1)))
-
- (gnus-message
- 7 "gnus-agent-expire: Loading overview... Done"))
- (set-buffer-modified-p nil)
-
- ;; At this point, all of the information is in dlist. The
- ;; only problem is that much of it is spread across multiple
- ;; entries. Sort then MERGE!!
- (gnus-message 7 "gnus-agent-expire: Sorting entries... ")
- ;; If two entries have the same article-number then sort by
- ;; ascending keep_flag.
- (let ((special 0)
- (marked 1)
- (unread 2))
- (setq dlist
- (sort dlist
- (lambda (a b)
- (cond ((< (nth 0 a) (nth 0 b))
- t)
- ((> (nth 0 a) (nth 0 b))
- nil)
- (t
- (let ((a (or (symbol-value (nth 2 a))
- 3))
- (b (or (symbol-value (nth 2 b))
- 3)))
- (<= a b))))))))
- (gnus-message 7 "gnus-agent-expire: Sorting entries... Done")
- (gnus-message 7 "gnus-agent-expire: Merging entries... ")
- (let ((dlist dlist))
- (while (cdr dlist) ; I'm not at the end-of-list
- (if (eq (caar dlist) (caadr dlist))
- (let ((first (cdr (car dlist)))
- (secnd (cdr (cadr dlist))))
- (setcar first (or (car first)
- (car secnd))) ; fetch_date
- (setq first (cdr first)
- secnd (cdr secnd))
- (setcar first (or (car first)
- (car secnd))) ; Keep_flag
- (setq first (cdr first)
- secnd (cdr secnd))
- (setcar first (or (car first)
- (car secnd))) ; NOV_entry_marker
-
- (setcdr dlist (cddr dlist)))
- (setq dlist (cdr dlist)))))
- (gnus-message 7 "gnus-agent-expire: Merging entries... Done")
-
- (let* ((len (float (length dlist)))
- (alist (list nil))
- (tail-alist alist))
- (while dlist
- (let ((new-completed (truncate (* 100.0
- (/ (setq cnt (1+ cnt))
- len))))
- message-log-max)
- (when (> new-completed completed)
- (setq completed new-completed)
- (gnus-message 7 "%3d%% completed..." completed)))
- (let* ((entry (car dlist))
- (article-number (nth 0 entry))
- (fetch-date (nth 1 entry))
- (keep (nth 2 entry))
- (marker (nth 3 entry)))
-
- (cond
- ;; Kept articles are unread, marked, or special.
- (keep
- (gnus-agent-message 10
- "gnus-agent-expire: %s:%d: Kept %s article%s."
- group article-number keep (if fetch-date " and file" ""))
- (when fetch-date
- (unless (file-exists-p
- (concat dir (number-to-string
- article-number)))
- (setf (nth 1 entry) nil)
- (gnus-agent-message 3 "gnus-agent-expire cleared \
+ ;; Whether I succeeded, or failed, it doesn't matter.
+ ;; Move to the next line then try again.
+ (forward-line 1)))
+
+ (gnus-message
+ 7 "gnus-agent-expire: Loading overview... Done"))
+ (set-buffer-modified-p nil)
+
+ ;; At this point, all of the information is in dlist. The
+ ;; only problem is that much of it is spread across multiple
+ ;; entries. Sort then MERGE!!
+ (gnus-message 7 "gnus-agent-expire: Sorting entries... ")
+ ;; If two entries have the same article-number then sort by
+ ;; ascending keep_flag.
+ (let ((special 0)
+ (marked 1)
+ (unread 2))
+ (setq dlist
+ (sort dlist
+ (lambda (a b)
+ (cond ((< (nth 0 a) (nth 0 b))
+ t)
+ ((> (nth 0 a) (nth 0 b))
+ nil)
+ (t
+ (let ((a (or (symbol-value (nth 2 a))
+ 3))
+ (b (or (symbol-value (nth 2 b))
+ 3)))
+ (<= a b))))))))
+ (gnus-message 7 "gnus-agent-expire: Sorting entries... Done")
+ (gnus-message 7 "gnus-agent-expire: Merging entries... ")
+ (let ((dlist dlist))
+ (while (cdr dlist) ; I'm not at the end-of-list
+ (if (eq (caar dlist) (caadr dlist))
+ (let ((first (cdr (car dlist)))
+ (secnd (cdr (cadr dlist))))
+ (setcar first (or (car first)
+ (car secnd))) ; fetch_date
+ (setq first (cdr first)
+ secnd (cdr secnd))
+ (setcar first (or (car first)
+ (car secnd))) ; Keep_flag
+ (setq first (cdr first)
+ secnd (cdr secnd))
+ (setcar first (or (car first)
+ (car secnd))) ; NOV_entry_position
+
+ (setcdr dlist (cddr dlist)))
+ (setq dlist (cdr dlist)))))
+
+ ;; Check the order of the entry positions. They should be in
+ ;; ascending order. If they aren't, the positions must be
+ ;; converted to markers.
+ (when (catch 'sort-results
+ (let ((dlist dlist)
+ (prev-pos -1)
+ pos)
+ (while dlist
+ (if (setq pos (nth 3 (pop dlist)))
+ (if (< pos prev-pos)
+ (throw 'sort-results 'unsorted)
+ (setq prev-pos pos))))))
+ (gnus-message 7 "gnus-agent-expire: Unsorted overview; inserting markers to compensate.")
+ (mapc (lambda (entry)
+ (let ((pos (nth 3 entry)))
+ (if pos
+ (setf (nth 3 entry)
+ (set-marker (make-marker)
+ pos)))))
+ dlist))
+
+ (gnus-message 7 "gnus-agent-expire: Merging entries... Done")
+
+ (let* ((len (float (length dlist)))
+ (alist (list nil))
+ (tail-alist alist)
+ (position-offset 0)
+ )
+
+ (while dlist
+ (let ((new-completed (truncate (* 100.0
+ (/ (setq cnt (1+ cnt))
+ len))))
+ message-log-max)
+ (when (> new-completed completed)
+ (setq completed new-completed)
+ (gnus-message 7 "%3d%% completed..." completed)))
+ (let* ((entry (car dlist))
+ (article-number (nth 0 entry))
+ (fetch-date (nth 1 entry))
+ (keep (nth 2 entry))
+ (marker (nth 3 entry)))
+
+ (cond
+ ;; Kept articles are unread, marked, or special.
+ (keep
+ (gnus-agent-message 10
+ "gnus-agent-expire: %s:%d: Kept %s article%s."
+ decoded article-number keep (if fetch-date " and file" ""))
+ (when fetch-date
+ (unless (file-exists-p
+ (concat dir (number-to-string
+ article-number)))
+ (setf (nth 1 entry) nil)
+ (gnus-agent-message 3 "gnus-agent-expire cleared \
download flag on %s:%d as the cached article file is missing."
- group (caar dlist)))
- (unless marker
- (gnus-message 1 "gnus-agent-expire detected a \
+ decoded (caar dlist)))
+ (unless marker
+ (gnus-message 1 "gnus-agent-expire detected a \
missing NOV entry. Run gnus-agent-regenerate-group to restore it.")))
- (gnus-agent-append-to-list
- tail-alist
- (cons article-number fetch-date)))
-
- ;; The following articles are READ, UNMARKED, and
- ;; ORDINARY. See if they can be EXPIRED!!!
- ((setq type
- (cond
- ((not (integerp fetch-date))
+ (gnus-agent-append-to-list
+ tail-alist
+ (cons article-number fetch-date)))
+
+ ;; The following articles are READ, UNMARKED, and
+ ;; ORDINARY. See if they can be EXPIRED!!!
+ ((setq type
+ (cond
+ ((not (integerp fetch-date))
'read) ;; never fetched article (may expire
- ;; right now)
- ((not (file-exists-p
- (concat dir (number-to-string
- article-number))))
- (setf (nth 1 entry) nil)
- 'externally-expired) ;; Can't find the cached
- ;; article. Handle case
- ;; as though this article
- ;; was never fetched.
-
- ;; We now have the arrival day, so we see
- ;; whether it's old enough to be expired.
- ((< fetch-date day)
- 'expired)
- (force
- 'forced)))
-
- ;; I found some reason to expire this entry.
-
- (let ((actions nil))
- (when (memq type '(forced expired))
- (ignore-errors ; Just being paranoid.
- (let* ((file-name (nnheader-concat dir (number-to-string
- article-number)))
- (size (float (nth 7 (file-attributes file-name)))))
- (incf bytes-freed size)
- (incf files-deleted)
- (delete-file file-name))
- (push "expired cached article" actions))
- (setf (nth 1 entry) nil)
- )
-
- (when marker
- (push "NOV entry removed" actions)
- (goto-char marker)
-
- (incf nov-entries-deleted)
-
- (let ((from (gnus-point-at-bol))
- (to (progn (forward-line 1) (point))))
- (incf bytes-freed (- to from))
- (delete-region from to)))
-
- ;; If considering all articles is set, I can only
- ;; expire article IDs that are no longer in the
- ;; active range (That is, articles that preceed the
- ;; first article in the new alist).
- (if (and gnus-agent-consider-all-articles
- (>= article-number (car active)))
- ;; I have to keep this ID in the alist
- (gnus-agent-append-to-list
- tail-alist (cons article-number fetch-date))
- (push (format "Removed %s article number from \
+ ;; right now)
+ ((not (file-exists-p
+ (concat dir (number-to-string
+ article-number))))
+ (setf (nth 1 entry) nil)
+ 'externally-expired) ;; Can't find the cached
+ ;; article. Handle case
+ ;; as though this article
+ ;; was never fetched.
+
+ ;; We now have the arrival day, so we see
+ ;; whether it's old enough to be expired.
+ ((< fetch-date day)
+ 'expired)
+ (force
+ 'forced)))
+
+ ;; I found some reason to expire this entry.
+
+ (let ((actions nil))
+ (when (memq type '(forced expired))
+ (ignore-errors ; Just being paranoid.
+ (let* ((file-name (nnheader-concat dir (number-to-string
+ article-number)))
+ (size (float (nth 7 (file-attributes file-name)))))
+ (incf bytes-freed size)
+ (incf size-files-deleted size)
+ (incf files-deleted)
+ (delete-file file-name))
+ (push "expired cached article" actions))
+ (setf (nth 1 entry) nil)
+ )
+
+ (when marker
+ (push "NOV entry removed" actions)
+
+ (goto-char (if (markerp marker)
+ marker
+ (- marker position-offset)))
+
+ (incf nov-entries-deleted)
+
+ (let* ((from (point-at-bol))
+ (to (progn (forward-line 1) (point)))
+ (freed (- to from)))
+ (incf bytes-freed freed)
+ (incf position-offset freed)
+ (delete-region from to)))
+
+ ;; If considering all articles is set, I can only
+ ;; expire article IDs that are no longer in the
+ ;; active range (That is, articles that preceed the
+ ;; first article in the new alist).
+ (if (and gnus-agent-consider-all-articles
+ (>= article-number (car active)))
+ ;; I have to keep this ID in the alist
+ (gnus-agent-append-to-list
+ tail-alist (cons article-number fetch-date))
+ (push (format "Removed %s article number from \
article alist" type) actions))
- (when actions
- (gnus-agent-message 8 "gnus-agent-expire: %s:%d: %s"
- group article-number
- (mapconcat 'identity actions ", ")))))
- (t
- (gnus-agent-message
- 10 "gnus-agent-expire: %s:%d: Article kept as \
-expiration tests failed." group article-number)
- (gnus-agent-append-to-list
- tail-alist (cons article-number fetch-date)))
- )
-
- ;; Clean up markers as I want to recycle this buffer
- ;; over several groups.
- (when marker
- (set-marker marker nil))
-
- (setq dlist (cdr dlist))))
-
- (setq alist (cdr alist))
-
- (let ((inhibit-quit t))
- (unless (equal alist gnus-agent-article-alist)
- (setq gnus-agent-article-alist alist)
- (gnus-agent-save-alist group))
-
- (when (buffer-modified-p)
- (let ((coding-system-for-write
- gnus-agent-file-coding-system))
- (gnus-make-directory dir)
- (write-region (point-min) (point-max) nov-file nil
- 'silent)
- ;; clear the modified flag as that I'm not confused by
- ;; its status on the next pass through this routine.
- (set-buffer-modified-p nil)))
-
- (when (eq articles t)
- (gnus-summary-update-info))))
-
- (when (boundp 'gnus-agent-expire-stats)
- (let ((stats (symbol-value 'gnus-agent-expire-stats)))
- (incf (nth 2 stats) bytes-freed)
- (incf (nth 1 stats) files-deleted)
- (incf (nth 0 stats) nov-entries-deleted)))
- ))))
+ (when actions
+ (gnus-agent-message 8 "gnus-agent-expire: %s:%d: %s"
+ decoded article-number
+ (mapconcat 'identity actions ", ")))))
+ (t
+ (gnus-agent-message
+ 10 "gnus-agent-expire: %s:%d: Article kept as \
+expiration tests failed." decoded article-number)
+ (gnus-agent-append-to-list
+ tail-alist (cons article-number fetch-date)))
+ )
+
+ ;; Remove markers as I intend to reuse this buffer again.
+ (when (and marker
+ (markerp marker))
+ (set-marker marker nil))
+
+ (setq dlist (cdr dlist))))
+
+ (setq alist (cdr alist))
+
+ (let ((inhibit-quit t))
+ (unless (equal alist gnus-agent-article-alist)
+ (setq gnus-agent-article-alist alist)
+ (gnus-agent-save-alist group))
+
+ (when (buffer-modified-p)
+ (let ((coding-system-for-write
+ gnus-agent-file-coding-system))
+ (gnus-make-directory dir)
+ (write-region (point-min) (point-max) nov-file nil
+ 'silent)
+ ;; clear the modified flag as that I'm not confused by
+ ;; its status on the next pass through this routine.
+ (set-buffer-modified-p nil)
+ (gnus-agent-update-view-total-fetched-for group t)))
+
+ (when (eq articles t)
+ (gnus-summary-update-info))))
+
+ (when (boundp 'gnus-agent-expire-stats)
+ (let ((stats (symbol-value 'gnus-agent-expire-stats)))
+ (incf (nth 2 stats) bytes-freed)
+ (incf (nth 1 stats) files-deleted)
+ (incf (nth 0 stats) nov-entries-deleted)))
+
+ (gnus-agent-update-files-total-fetched-for group (- size-files-deleted)))))))
(defun gnus-agent-expire (&optional articles group force)
"Expire all old articles.
@@ -3428,7 +3579,8 @@ articles in every agentized group? "))
;; compiler will not complain about free references.
(gnus-agent-expire-current-dirs
(symbol-value 'gnus-agent-expire-current-dirs))
- dir)
+ dir
+ (file-name-coding-system nnmail-pathname-coding-system))
(gnus-sethash gnus-agent-directory t keep)
(while gnus-agent-expire-current-dirs
@@ -3485,6 +3637,7 @@ articles in every agentized group? "))
(let ((dir (pop to-remove)))
(if (gnus-y-or-n-p (format "Delete %s? " dir))
(let* (delete-recursive
+ files f
(delete-recursive
(function
(lambda (f-or-d)
@@ -3493,12 +3646,13 @@ articles in every agentized group? "))
(condition-case nil
(delete-directory f-or-d)
(file-error
- (mapcar (lambda (f)
- (or (member f '("." ".."))
- (funcall delete-recursive
- (nnheader-concat
- f-or-d f))))
- (directory-files f-or-d))
+ (setq files (directory-files f-or-d))
+ (while files
+ (setq f (pop files))
+ (or (member f '("." ".."))
+ (funcall delete-recursive
+ (nnheader-concat
+ f-or-d f))))
(delete-directory f-or-d)))
(delete-file f-or-d)))))))
(funcall delete-recursive dir))))))))))
@@ -3582,7 +3736,8 @@ has been fetched."
(let ((gnus-decode-encoded-word-function 'identity)
(gnus-decode-encoded-address-function 'identity)
(file (gnus-agent-article-name ".overview" group))
- cached-articles uncached-articles)
+ cached-articles uncached-articles
+ (file-name-coding-system nnmail-pathname-coding-system))
(gnus-make-directory (nnheader-translate-file-chars
(file-name-directory file) t))
@@ -3685,6 +3840,8 @@ has been fetched."
(gnus-agent-check-overview-buffer)
(write-region (point-min) (point-max) file nil 'silent))
+ (gnus-agent-update-view-total-fetched-for group t)
+
;; Update the group's article alist to include the newly
;; fetched articles.
(gnus-agent-load-alist group)
@@ -3715,7 +3872,8 @@ has been fetched."
(numberp article))
(let* ((gnus-command-method (gnus-find-method-for-group group))
(file (gnus-agent-article-name (number-to-string article) group))
- (buffer-read-only nil))
+ (buffer-read-only nil)
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (and (file-exists-p file)
(> (nth 7 (file-attributes file)) 0))
(erase-buffer)
@@ -3732,16 +3890,7 @@ In addition, their NOV entries in .overview will be refreshed using
the articles' current headers.
If REREAD is not nil, downloaded articles are marked as unread."
(interactive
- (list (let ((def (or (gnus-group-group-name)
- gnus-newsgroup-name)))
- (let ((select (read-string (if def
- (concat "Group Name ("
- def "): ")
- "Group Name: "))))
- (if (and (equal "" select)
- def)
- def
- select)))
+ (list (gnus-agent-read-group)
(catch 'mark
(while (let (c
(cursor-in-echo-area t)
@@ -3759,199 +3908,200 @@ If REREAD is not nil, downloaded articles are marked as unread."
(sit-for 1)
t)))))
(when group
- (gnus-message 5 "Regenerating in %s" group)
- (let* ((gnus-command-method (or gnus-command-method
- (gnus-find-method-for-group group)))
- (file (gnus-agent-article-name ".overview" group))
- (dir (file-name-directory file))
- point
- (downloaded (if (file-exists-p dir)
+ (gnus-message 5 "Regenerating in %s" group)
+ (let* ((gnus-command-method (or gnus-command-method
+ (gnus-find-method-for-group group)))
+ (file (gnus-agent-article-name ".overview" group))
+ (dir (file-name-directory file))
+ point
+ (file-name-coding-system nnmail-pathname-coding-system)
+ (downloaded (if (file-exists-p dir)
(sort (delq nil (mapcar (lambda (name)
(and (not (file-directory-p (nnheader-concat dir name)))
(string-to-number name)))
(directory-files dir nil "^[0-9]+$" t)))
- '>)
- (progn (gnus-make-directory dir) nil)))
- dl nov-arts
- alist header
- regenerated)
-
- (mm-with-unibyte-buffer
- (if (file-exists-p file)
- (let ((nnheader-file-coding-system
- gnus-agent-file-coding-system))
- (nnheader-insert-file-contents file)))
- (set-buffer-modified-p nil)
-
- ;; Load the article IDs found in the overview file. As a
- ;; side-effect, validate the file contents.
- (let ((load t))
- (while load
- (setq load nil)
- (goto-char (point-min))
- (while (< (point) (point-max))
- (cond ((and (looking-at "[0-9]+\t")
- (<= (- (match-end 0) (match-beginning 0)) 9))
- (push (read (current-buffer)) nov-arts)
- (forward-line 1)
- (let ((l1 (car nov-arts))
- (l2 (cadr nov-arts)))
- (cond ((and (listp reread) (memq l1 reread))
- (gnus-delete-line)
- (setq nov-arts (cdr nov-arts))
- (gnus-message 4 "gnus-agent-regenerate-group: NOV\
+ '>)
+ (progn (gnus-make-directory dir) nil)))
+ dl nov-arts
+ alist header
+ regenerated)
+
+ (mm-with-unibyte-buffer
+ (if (file-exists-p file)
+ (let ((nnheader-file-coding-system
+ gnus-agent-file-coding-system))
+ (nnheader-insert-file-contents file)))
+ (set-buffer-modified-p nil)
+
+ ;; Load the article IDs found in the overview file. As a
+ ;; side-effect, validate the file contents.
+ (let ((load t))
+ (while load
+ (setq load nil)
+ (goto-char (point-min))
+ (while (< (point) (point-max))
+ (cond ((and (looking-at "[0-9]+\t")
+ (<= (- (match-end 0) (match-beginning 0)) 9))
+ (push (read (current-buffer)) nov-arts)
+ (forward-line 1)
+ (let ((l1 (car nov-arts))
+ (l2 (cadr nov-arts)))
+ (cond ((and (listp reread) (memq l1 reread))
+ (gnus-delete-line)
+ (setq nov-arts (cdr nov-arts))
+ (gnus-message 4 "gnus-agent-regenerate-group: NOV\
entry of article %s deleted." l1))
- ((not l2)
- nil)
- ((< l1 l2)
- (gnus-message 3 "gnus-agent-regenerate-group: NOV\
+ ((not l2)
+ nil)
+ ((< l1 l2)
+ (gnus-message 3 "gnus-agent-regenerate-group: NOV\
entries are NOT in ascending order.")
- ;; Don't sort now as I haven't verified
- ;; that every line begins with a number
- (setq load t))
- ((= l1 l2)
- (forward-line -1)
- (gnus-message 4 "gnus-agent-regenerate-group: NOV\
- entries contained duplicate of article %s. Duplicate deleted." l1)
- (gnus-delete-line)
- (setq nov-arts (cdr nov-arts))))))
- (t
- (gnus-message 1 "gnus-agent-regenerate-group: NOV\
+ ;; Don't sort now as I haven't verified
+ ;; that every line begins with a number
+ (setq load t))
+ ((= l1 l2)
+ (forward-line -1)
+ (gnus-message 4 "gnus-agent-regenerate-group: NOV\
+ entries contained duplicate of article %s. Duplicate deleted." l1)
+ (gnus-delete-line)
+ (setq nov-arts (cdr nov-arts))))))
+ (t
+ (gnus-message 1 "gnus-agent-regenerate-group: NOV\
entries contained line that did not begin with an article number. Deleted\
line.")
- (gnus-delete-line))))
- (when load
- (gnus-message 5 "gnus-agent-regenerate-group: Sorting NOV\
+ (gnus-delete-line))))
+ (when load
+ (gnus-message 5 "gnus-agent-regenerate-group: Sorting NOV\
entries into ascending order.")
- (sort-numeric-fields 1 (point-min) (point-max))
- (setq nov-arts nil))))
- (gnus-agent-check-overview-buffer)
-
- ;; Construct a new article alist whose nodes match every header
- ;; in the .overview file. As a side-effect, missing headers are
- ;; reconstructed from the downloaded article file.
- (while (or downloaded nov-arts)
- (cond ((and downloaded
- (or (not nov-arts)
- (> (car downloaded) (car nov-arts))))
- ;; This entry is missing from the overview file
- (gnus-message 3 "Regenerating NOV %s %d..." group
- (car downloaded))
- (let ((file (concat dir (number-to-string (car downloaded)))))
- (mm-with-unibyte-buffer
- (nnheader-insert-file-contents file)
- (nnheader-remove-body)
- (setq header (nnheader-parse-naked-head)))
- (mail-header-set-number header (car downloaded))
- (if nov-arts
- (let ((key (concat "^" (int-to-string (car nov-arts))
- "\t")))
- (or (re-search-backward key nil t)
- (re-search-forward key))
- (forward-line 1))
- (goto-char (point-min)))
- (nnheader-insert-nov header))
- (setq nov-arts (cons (car downloaded) nov-arts)))
- ((eq (car downloaded) (car nov-arts))
- ;; This entry in the overview has been downloaded
- (push (cons (car downloaded)
- (time-to-days
- (nth 5 (file-attributes
- (concat dir (number-to-string
- (car downloaded))))))) alist)
- (setq downloaded (cdr downloaded))
- (setq nov-arts (cdr nov-arts)))
- (t
- ;; This entry in the overview has not been downloaded
- (push (cons (car nov-arts) nil) alist)
- (setq nov-arts (cdr nov-arts)))))
-
- ;; When gnus-agent-consider-all-articles is set,
- ;; gnus-agent-regenerate-group should NOT remove article IDs from
- ;; the alist. Those IDs serve as markers to indicate that an
- ;; attempt has been made to fetch that article's header.
-
- ;; When gnus-agent-consider-all-articles is NOT set,
- ;; gnus-agent-regenerate-group can remove the article ID of every
- ;; article (with the exception of the last ID in the list - it's
- ;; special) that no longer appears in the overview. In this
- ;; situtation, the last article ID in the list implies that it,
- ;; and every article ID preceeding it, have been fetched from the
- ;; server.
-
- (if gnus-agent-consider-all-articles
- ;; Restore all article IDs that were not found in the overview file.
- (let* ((n (cons nil alist))
- (merged n)
- (o (gnus-agent-load-alist group)))
- (while o
- (let ((nID (caadr n))
- (oID (caar o)))
- (cond ((not nID)
- (setq n (setcdr n (list (list oID))))
- (setq o (cdr o)))
- ((< oID nID)
- (setcdr n (cons (list oID) (cdr n)))
- (setq o (cdr o)))
- ((= oID nID)
- (setq o (cdr o))
- (setq n (cdr n)))
- (t
- (setq n (cdr n))))))
- (setq alist (cdr merged)))
- ;; Restore the last article ID if it is not already in the new alist
- (let ((n (last alist))
- (o (last (gnus-agent-load-alist group))))
- (cond ((not o)
- nil)
- ((not n)
- (push (cons (caar o) nil) alist))
- ((< (caar n) (caar o))
- (setcdr n (list (car o)))))))
-
- (let ((inhibit-quit t))
- (if (setq regenerated (buffer-modified-p))
- (let ((coding-system-for-write gnus-agent-file-coding-system))
- (write-region (point-min) (point-max) file nil 'silent)))
-
- (setq regenerated (or regenerated
- (and reread gnus-agent-article-alist)
- (not (equal alist gnus-agent-article-alist))))
-
- (setq gnus-agent-article-alist alist)
-
- (when regenerated
- (gnus-agent-save-alist group)
-
- ;; I have to alter the group's active range NOW as
- ;; gnus-make-ascending-articles-unread will use it to
- ;; recalculate the number of unread articles in the group
-
- (let ((group (gnus-group-real-name group))
- (group-active (or (gnus-active group)
- (gnus-activate-group group))))
- (gnus-agent-possibly-alter-active group group-active)))))
-
- (when (and reread gnus-agent-article-alist)
+ (sort-numeric-fields 1 (point-min) (point-max))
+ (setq nov-arts nil))))
+ (gnus-agent-check-overview-buffer)
+
+ ;; Construct a new article alist whose nodes match every header
+ ;; in the .overview file. As a side-effect, missing headers are
+ ;; reconstructed from the downloaded article file.
+ (while (or downloaded nov-arts)
+ (cond ((and downloaded
+ (or (not nov-arts)
+ (> (car downloaded) (car nov-arts))))
+ ;; This entry is missing from the overview file
+ (gnus-message 3 "Regenerating NOV %s %d..." group
+ (car downloaded))
+ (let ((file (concat dir (number-to-string (car downloaded)))))
+ (mm-with-unibyte-buffer
+ (nnheader-insert-file-contents file)
+ (nnheader-remove-body)
+ (setq header (nnheader-parse-naked-head)))
+ (mail-header-set-number header (car downloaded))
+ (if nov-arts
+ (let ((key (concat "^" (int-to-string (car nov-arts))
+ "\t")))
+ (or (re-search-backward key nil t)
+ (re-search-forward key))
+ (forward-line 1))
+ (goto-char (point-min)))
+ (nnheader-insert-nov header))
+ (setq nov-arts (cons (car downloaded) nov-arts)))
+ ((eq (car downloaded) (car nov-arts))
+ ;; This entry in the overview has been downloaded
+ (push (cons (car downloaded)
+ (time-to-days
+ (nth 5 (file-attributes
+ (concat dir (number-to-string
+ (car downloaded))))))) alist)
+ (setq downloaded (cdr downloaded))
+ (setq nov-arts (cdr nov-arts)))
+ (t
+ ;; This entry in the overview has not been downloaded
+ (push (cons (car nov-arts) nil) alist)
+ (setq nov-arts (cdr nov-arts)))))
+
+ ;; When gnus-agent-consider-all-articles is set,
+ ;; gnus-agent-regenerate-group should NOT remove article IDs from
+ ;; the alist. Those IDs serve as markers to indicate that an
+ ;; attempt has been made to fetch that article's header.
+
+ ;; When gnus-agent-consider-all-articles is NOT set,
+ ;; gnus-agent-regenerate-group can remove the article ID of every
+ ;; article (with the exception of the last ID in the list - it's
+ ;; special) that no longer appears in the overview. In this
+ ;; situtation, the last article ID in the list implies that it,
+ ;; and every article ID preceeding it, have been fetched from the
+ ;; server.
+
+ (if gnus-agent-consider-all-articles
+ ;; Restore all article IDs that were not found in the overview file.
+ (let* ((n (cons nil alist))
+ (merged n)
+ (o (gnus-agent-load-alist group)))
+ (while o
+ (let ((nID (caadr n))
+ (oID (caar o)))
+ (cond ((not nID)
+ (setq n (setcdr n (list (list oID))))
+ (setq o (cdr o)))
+ ((< oID nID)
+ (setcdr n (cons (list oID) (cdr n)))
+ (setq o (cdr o)))
+ ((= oID nID)
+ (setq o (cdr o))
+ (setq n (cdr n)))
+ (t
+ (setq n (cdr n))))))
+ (setq alist (cdr merged)))
+ ;; Restore the last article ID if it is not already in the new alist
+ (let ((n (last alist))
+ (o (last (gnus-agent-load-alist group))))
+ (cond ((not o)
+ nil)
+ ((not n)
+ (push (cons (caar o) nil) alist))
+ ((< (caar n) (caar o))
+ (setcdr n (list (car o)))))))
+
+ (let ((inhibit-quit t))
+ (if (setq regenerated (buffer-modified-p))
+ (let ((coding-system-for-write gnus-agent-file-coding-system))
+ (write-region (point-min) (point-max) file nil 'silent)))
+
+ (setq regenerated (or regenerated
+ (and reread gnus-agent-article-alist)
+ (not (equal alist gnus-agent-article-alist))))
+
+ (setq gnus-agent-article-alist alist)
+
+ (when regenerated
+ (gnus-agent-save-alist group)
+
+ ;; I have to alter the group's active range NOW as
+ ;; gnus-make-ascending-articles-unread will use it to
+ ;; recalculate the number of unread articles in the group
+
+ (let ((group (gnus-group-real-name group))
+ (group-active (or (gnus-active group)
+ (gnus-activate-group group))))
+ (gnus-agent-possibly-alter-active group group-active)))))
+
+ (when (and reread gnus-agent-article-alist)
(gnus-agent-synchronize-group-flags
- group
+ group
(list (list
- (if (listp reread)
- reread
- (delq nil (mapcar (function (lambda (c)
- (cond ((eq reread t)
- (car c))
- ((cdr c)
- (car c)))))
+ (if (listp reread)
+ reread
+ (delq nil (mapcar (function (lambda (c)
+ (cond ((eq reread t)
+ (car c))
+ ((cdr c)
+ (car c)))))
gnus-agent-article-alist)))
'del '(read)))
gnus-command-method)
- (when (gnus-buffer-live-p gnus-group-buffer)
- (gnus-group-update-group group t)))
+ (when regenerated
+ (gnus-agent-update-files-total-fetched-for group nil)))
- (gnus-message 5 "")
- regenerated)))
+ (gnus-message 5 "")
+ regenerated)))
;;;###autoload
(defun gnus-agent-regenerate (&optional clean reread)
@@ -3996,6 +4146,84 @@ If CLEAN, obsolete (ignore)."
(defun gnus-agent-group-covered-p (group)
(gnus-agent-method-p (gnus-group-method group)))
+(defun gnus-agent-update-files-total-fetched-for
+ (group delta &optional method path)
+ "Update, or set, the total disk space used by the articles that the
+agent has fetched."
+ (when gnus-agent-total-fetched-hashtb
+ (gnus-agent-with-refreshed-group
+ group
+ ;; if null, gnus-agent-group-pathname will calc method.
+ (let* ((gnus-command-method method)
+ (path (or path (gnus-agent-group-pathname group)))
+ (entry (or (gnus-gethash path gnus-agent-total-fetched-hashtb)
+ (gnus-sethash path (make-list 3 0)
+ gnus-agent-total-fetched-hashtb)))
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (when (listp delta)
+ (if delta
+ (let ((sum 0.0)
+ file)
+ (while (setq file (pop delta))
+ (incf sum (float (or (nth 7 (file-attributes
+ (nnheader-concat
+ path
+ (if (numberp file)
+ (number-to-string file)
+ file)))) 0))))
+ (setq delta sum))
+ (let ((sum (- (nth 2 entry)))
+ (info (directory-files-and-attributes path nil "^-?[0-9]+$" t))
+ file)
+ (while (setq file (pop info))
+ (incf sum (float (or (nth 8 file) 0))))
+ (setq delta sum))))
+
+ (setq gnus-agent-need-update-total-fetched-for t)
+ (incf (nth 2 entry) delta)))))
+
+(defun gnus-agent-update-view-total-fetched-for
+ (group agent-over &optional method path)
+ "Update, or set, the total disk space used by the .agentview and
+.overview files. These files are calculated separately as they can be
+modified."
+ (when gnus-agent-total-fetched-hashtb
+ (gnus-agent-with-refreshed-group
+ group
+ ;; if null, gnus-agent-group-pathname will calc method.
+ (let* ((gnus-command-method method)
+ (path (or path (gnus-agent-group-pathname group)))
+ (entry (or (gnus-gethash path gnus-agent-total-fetched-hashtb)
+ (gnus-sethash path (make-list 3 0)
+ gnus-agent-total-fetched-hashtb)))
+ (file-name-coding-system nnmail-pathname-coding-system)
+ (size (or (nth 7 (file-attributes
+ (nnheader-concat
+ path (if agent-over
+ ".overview"
+ ".agentview"))))
+ 0)))
+ (setq gnus-agent-need-update-total-fetched-for t)
+ (setf (nth (if agent-over 1 0) entry) size)))))
+
+(defun gnus-agent-total-fetched-for (group &optional method no-inhibit)
+ "Get the total disk space used by the specified GROUP."
+ (unless (equal group "dummy.group")
+ (unless gnus-agent-total-fetched-hashtb
+ (setq gnus-agent-total-fetched-hashtb (gnus-make-hashtable 1024)))
+
+ ;; if null, gnus-agent-group-pathname will calc method.
+ (let* ((gnus-command-method method)
+ (path (gnus-agent-group-pathname group))
+ (entry (gnus-gethash path gnus-agent-total-fetched-hashtb)))
+ (if entry
+ (apply '+ entry)
+ (let ((gnus-agent-inhibit-update-total-fetched-for (not no-inhibit)))
+ (+
+ (gnus-agent-update-view-total-fetched-for group nil method path)
+ (gnus-agent-update-view-total-fetched-for group t method path)
+ (gnus-agent-update-files-total-fetched-for group nil method path)))))))
+
(provide 'gnus-agent)
;;; arch-tag: b0ba4afc-5229-4cee-ad25-9956daa4e91e
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 1ab31bb519f..3897f355b29 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -28,12 +28,15 @@
;;; Code:
(eval-when-compile
- (require 'cl)
- (defvar tool-bar-map)
- (defvar w3m-minor-mode-map))
+ (require 'cl))
+(defvar tool-bar-map)
+(defvar w3m-minor-mode-map)
(require 'gnus)
-(require 'gnus-sum)
+;; Avoid the "Recursive load suspected" error in Emacs 21.1.
+(eval-and-compile
+ (let ((recursive-load-depth-limit 100))
+ (require 'gnus-sum)))
(require 'gnus-spec)
(require 'gnus-int)
(require 'gnus-win)
@@ -49,6 +52,8 @@
(autoload 'gnus-button-mailto "gnus-msg")
(autoload 'gnus-button-reply "gnus-msg" nil t)
(autoload 'parse-time-string "parse-time" nil nil)
+(autoload 'ansi-color-apply-on-region "ansi-color")
+(autoload 'mm-url-insert-file-contents-external "mm-url")
(autoload 'mm-extern-cache-contents "mm-extern")
(defgroup gnus-article nil
@@ -153,7 +158,10 @@
"X-Virus-Scanned" "X-Delivery-Agent" "Posted-Date" "X-Gateway"
"X-Local-Origin" "X-Local-Destination" "X-UserInfo1"
"X-Received-Date" "X-Hashcash" "Face" "X-DMCA-Notifications"
- "X-Abuse-and-DMCA-Info" "X-Postfilter" "X-Gpg-.*" "X-Disclaimer"))
+ "X-Abuse-and-DMCA-Info" "X-Postfilter" "X-Gpg-.*" "X-Disclaimer"
+ "Envelope-To" "X-Spam-Score" "System-Type" "X-Injected-Via-Gmane"
+ "X-Gmane-NNTP-Posting-Host" "Jabber-ID" "Archived-At"
+ "Envelope-Sender" "Envelope-Recipients"))
"*All headers that start with this regexp will be hidden.
This variable can also be a list of regexps of headers to be ignored.
If `gnus-visible-headers' is non-nil, this variable will be ignored."
@@ -238,7 +246,9 @@ that number. If it is a floating point number, no signature may be
longer (in lines) than that number. If it is a function, the function
will be called without any parameters, and if it returns nil, there is
no signature in the buffer. If it is a string, it will be used as a
-regexp. If it matches, the text in question is not a signature."
+regexp. If it matches, the text in question is not a signature.
+
+This can also be a list of the above values."
:type '(choice (const nil)
(integer :value 200)
(number :value 4.0)
@@ -412,7 +422,7 @@ is the face used for highlighting."
(widget-group-value-create widget))
regexp
(integer :format "Match group: %v")
- (integer :format "Emphasize group: %v")
+ (integer :format "Emphasize group: %v")
face)
(group :tag "Simple"
:value (("_" . "_") nil default)
@@ -480,14 +490,14 @@ Example: (_/*word*/_)."
"Face used for displaying highlighted words."
:group 'gnus-article-emphasis)
-(defcustom gnus-article-time-format "%a, %b %d %Y %T %Z"
+(defcustom gnus-article-time-format "%a, %d %b %Y %T %Z"
"Format for display of Date headers in article bodies.
See `format-time-string' for the possible values.
The variable can also be function, which should return a complete Date
header. The function is called with one argument, the time, which can
be fed to `format-time-string'."
- :type '(choice string symbol)
+ :type '(choice string function)
:link '(custom-manual "(gnus)Article Date")
:group 'gnus-article-washing)
@@ -645,17 +655,18 @@ you could set this variable to something like:
'((\"^Subject:.*gnus\\|^Newsgroups:.*gnus\" \"gnus-stuff\")
(\"^Subject:.*vm\\|^Xref:.*vm\" \"vm-stuff\"))
-This variable is an alist where the where the key is the match and the
-value is a list of possible files to save in if the match is non-nil.
+This variable is an alist where the key is the match and the
+value is a list of possible files to save in if the match is
+non-nil.
If the match is a string, it is used as a regexp match on the
article. If the match is a symbol, that symbol will be funcalled
from the buffer of the article to be saved with the newsgroup as the
-parameter. If it is a list, it will be evalled in the same buffer.
+parameter. If it is a list, it will be evaled in the same buffer.
-If this form or function returns a string, this string will be used as
-a possible file name; and if it returns a non-nil list, that list will
-be used as possible file names."
+If this form or function returns a string, this string will be used as a
+possible file name; and if it returns a non-nil list, that list will be
+used as possible file names."
:group 'gnus-article-saving
:type '(repeat (choice (list :value (fun) function)
(cons :value ("" "") regexp (repeat string))
@@ -701,10 +712,22 @@ The following additional specs are available:
:type 'hook
:group 'gnus-article-various)
+(defcustom gnus-copy-article-ignored-headers nil
+ "List of headers to be removed when copying an article.
+Each element is a regular expression."
+ :version "23.0" ;; No Gnus
+ :type '(repeat regexp)
+ :group 'gnus-article-various)
+
(make-obsolete-variable 'gnus-article-hide-pgp-hook
"This variable is obsolete in Gnus 5.10.")
-(defcustom gnus-article-button-face 'bold
+(defface gnus-button
+ '((t (:weight bold)))
+ "Face used for highlighting a button in the article buffer."
+ :group 'gnus-article-buttons)
+
+(defcustom gnus-article-button-face 'gnus-button
"Face used for highlighting buttons in the article buffer.
An article button is a piece of text that you can activate by pressing
@@ -739,7 +762,7 @@ Obsolete; use the face `gnus-signature' for customizations instead."
(defface gnus-header-from
'((((class color)
(background dark))
- (:foreground "spring green"))
+ (:foreground "PaleGreen1"))
(((class color)
(background light))
(:foreground "red3"))
@@ -754,7 +777,7 @@ Obsolete; use the face `gnus-signature' for customizations instead."
(defface gnus-header-subject
'((((class color)
(background dark))
- (:foreground "SeaGreen3"))
+ (:foreground "SeaGreen1"))
(((class color)
(background light))
(:foreground "red4"))
@@ -786,7 +809,7 @@ articles."
(defface gnus-header-name
'((((class color)
(background dark))
- (:foreground "SeaGreen"))
+ (:foreground "SpringGreen2"))
(((class color)
(background light))
(:foreground "maroon"))
@@ -801,7 +824,7 @@ articles."
(defface gnus-header-content
'((((class color)
(background dark))
- (:foreground "forest green" :italic t))
+ (:foreground "SpringGreen1" :italic t))
(((class color)
(background light))
(:foreground "indianred4" :italic t))
@@ -838,6 +861,31 @@ be displayed by the first non-nil matching CONTENT face."
(item :tag "skip" nil)
(face :value default)))))
+(defcustom gnus-face-properties-alist (if (featurep 'xemacs)
+ '((xface . (:face gnus-x-face)))
+ '((pbm . (:face gnus-x-face))
+ (png . nil)))
+ "Alist of image types and properties applied to Face and X-Face images.
+Here are examples:
+
+;; Specify the altitude of Face images in the From header.
+\(setq gnus-face-properties-alist
+ '((pbm . (:face gnus-x-face :ascent 80))
+ (png . (:ascent 80))))
+
+;; Show Face images as pressed buttons.
+\(setq gnus-face-properties-alist
+ '((pbm . (:face gnus-x-face :relief -2))
+ (png . (:relief -2))))
+
+See the manual for the valid properties for various image types.
+Currently, `pbm' is used for X-Face images and `png' is used for Face
+images in Emacs. Only the `:face' property is effective on the `xface'
+image type in XEmacs if it is built with the libcompface library."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-article-headers
+ :type '(repeat (cons :format "%v" (symbol :tag "Image type") plist)))
+
(defcustom gnus-article-decode-hook
'(article-decode-charset article-decode-encoded-words
article-decode-group-name article-decode-idna-rhs)
@@ -954,7 +1002,7 @@ on parts -- for instance, adding Vcard info to a database."
"An alist of MIME types to functions to display them."
:version "21.1"
:group 'gnus-article-mime
- :type 'alist)
+ :type '(repeat (cons :format "%v" (string :tag "MIME type") function)))
(defcustom gnus-article-date-lapsed-new-header nil
"Whether the X-Sent and Date headers can coexist.
@@ -985,6 +1033,7 @@ used."
(defcustom gnus-mime-action-alist
'(("save to file" . gnus-mime-save-part)
("save and strip" . gnus-mime-save-part-and-strip)
+ ("replace with file" . gnus-mime-replace-part)
("delete part" . gnus-mime-delete-part)
("display as text" . gnus-mime-inline-part)
("view the part" . gnus-mime-view-part)
@@ -999,6 +1048,19 @@ used."
:type '(repeat (cons (string :tag "name")
(function))))
+(defcustom gnus-auto-select-part 1
+ "Advance to next MIME part when deleting or stripping parts.
+
+When 0, point will be placed on the same part as before. When
+positive (negative), move point forward (backwards) this many
+parts. When nil, redisplay article."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-article-mime
+ :type '(choice (const nil :tag "Redisplay article.")
+ (const 1 :tag "Next part.")
+ (const 0 :tag "Current part.")
+ integer))
+
;;;
;;; The treatment variables
;;;
@@ -1010,6 +1072,7 @@ used."
'(choice (const :tag "Off" nil)
(const :tag "On" t)
(const :tag "Header" head)
+ (const :tag "First" first)
(const :tag "Last" last)
(integer :tag "Less")
(repeat :tag "Groups" regexp)
@@ -1019,7 +1082,8 @@ used."
'(choice (const :tag "Off" nil)
(const :tag "Header" head)))
-(defvar gnus-article-treat-types '("text/plain")
+(defvar gnus-article-treat-types '("text/plain" "text/x-verbatim"
+ "text/x-patch")
"Parts to treat.")
(defvar gnus-inhibit-treatment nil
@@ -1027,8 +1091,8 @@ used."
(defcustom gnus-treat-highlight-signature '(or t (typep "text/x-vcard"))
"Highlight the signature.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles'."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1036,8 +1100,8 @@ See Info node `(gnus)Customizing Articles'."
(defcustom gnus-treat-buttonize 100000
"Add buttons.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles'."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1045,21 +1109,17 @@ See Info node `(gnus)Customizing Articles'."
(defcustom gnus-treat-buttonize-head 'head
"Add buttons to the head.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(put 'gnus-treat-buttonize-head 'highlight t)
-(defcustom gnus-treat-emphasize
- (and (or window-system
- (featurep 'xemacs)
- (>= (string-to-number emacs-version) 21))
- 50000)
+(defcustom gnus-treat-emphasize 50000
"Emphasize text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1067,8 +1127,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-strip-cr nil
"Remove carriage returns.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1076,8 +1136,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-unsplit-urls nil
"Remove newlines from within URLs.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1085,8 +1145,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-leading-whitespace nil
"Remove leading whitespace in headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1094,56 +1154,56 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-hide-headers 'head
"Hide headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-hide-boring-headers nil
"Hide boring headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-hide-signature nil
"Hide the signature.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-fill-article nil
"Fill the article.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-hide-citation nil
"Hide cited text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-hide-citation-maybe nil
"Hide cited text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-strip-list-identifiers 'head
"Strip list identifiers from `gnus-list-identifiers`.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "21.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1154,8 +1214,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-strip-pem nil
"Strip PEM signatures.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1163,16 +1223,16 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-strip-banner t
"Strip banners from articles.
The banner to be stripped is specified in the `banner' group parameter.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-highlight-headers 'head
"Highlight the headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
@@ -1180,8 +1240,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-highlight-citation t
"Highlight cited text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
@@ -1189,24 +1249,24 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-date-ut nil
"Display the Date in UT (GMT).
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-local nil
"Display the Date in the local timezone.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-english nil
"Display the Date in a format that can be read aloud in English.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1214,24 +1274,24 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-date-lapsed nil
"Display the Date header in a way that says how much time has elapsed.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-original nil
"Display the date in the original timezone.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-date-iso8601 nil
"Display the date in the ISO8601 format.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "21.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1240,16 +1300,16 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-date-user-defined nil
"Display the date in a user-defined format.
The format is defined by the `gnus-article-time-format' variable.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-head-custom)
(defcustom gnus-treat-strip-headers-in-body t
"Strip the X-No-Archive header line from the beginning of the body.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "21.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1257,8 +1317,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-strip-trailing-blank-lines nil
"Strip trailing blank lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details.
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'.
When set to t, it also strips trailing blanks in all MIME parts.
Consider to use `last' instead."
@@ -1268,8 +1328,8 @@ Consider to use `last' instead."
(defcustom gnus-treat-strip-leading-blank-lines nil
"Strip leading blank lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details.
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'.
When set to t, it also strips trailing blanks in all MIME parts."
:group 'gnus-article-treat
@@ -1278,25 +1338,37 @@ When set to t, it also strips trailing blanks in all MIME parts."
(defcustom gnus-treat-strip-multiple-blank-lines nil
"Strip multiple blank lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-unfold-headers 'head
"Unfold folded header lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
+(defcustom gnus-article-unfold-long-headers nil
+ "If non-nil, allow unfolding headers even if the header is long.
+If it is a regexp, only long headers matching this regexp are unfolded.
+If it is t, all long headers are unfolded.
+
+This variable has no effect if `gnus-treat-unfold-headers' is nil."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-article-treat
+ :type '(choice (const nil)
+ (const :tag "all" t)
+ (regexp)))
+
(defcustom gnus-treat-fold-headers nil
"Fold headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1304,8 +1376,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-fold-newsgroups 'head
"Fold the Newsgroups and Followup-To headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1313,13 +1385,21 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-overstrike t
"Treat overstrike highlighting.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(put 'gnus-treat-overstrike 'highlight t)
+(defcustom gnus-treat-ansi-sequences (if (locate-library "ansi-color") t)
+ "Treat ANSI SGR control sequences.
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
+ :group 'gnus-article-treat
+ :link '(custom-manual "(gnus)Customizing Articles")
+ :type gnus-article-treat-custom)
+
(make-obsolete-variable 'gnus-treat-display-xface
'gnus-treat-display-x-face)
@@ -1364,9 +1444,9 @@ See Info node `(gnus)Customizing Articles' and Info node
(gnus-image-type-available-p 'png)
'head)
"Display Face headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' and Info node
-`(gnus)X-Face' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles' and Info
+node `(gnus)X-Face' for details."
:group 'gnus-article-treat
:version "22.1"
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1376,9 +1456,9 @@ See Info node `(gnus)Customizing Articles' and Info node
(defcustom gnus-treat-display-smileys (gnus-image-type-available-p 'xpm)
"Display smileys.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' and Info node
-`(gnus)Smileys' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles' and Info
+node `(gnus)Smileys' for details."
:group 'gnus-article-treat
:version "21.1"
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1391,9 +1471,9 @@ See Info node `(gnus)Customizing Articles' and Info node
(gnus-picons-installed-p))
'head nil)
"Display picons in the From header.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' and Info node
-`(gnus)Picons' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles' and Info
+node `(gnus)Picons' for details."
:version "22.1"
:group 'gnus-article-treat
:group 'gnus-picon
@@ -1407,9 +1487,9 @@ See Info node `(gnus)Customizing Articles' and Info node
(gnus-picons-installed-p))
'head nil)
"Display picons in To and Cc headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' and Info node
-`(gnus)Picons' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles' and Info
+node `(gnus)Picons' for details."
:version "22.1"
:group 'gnus-article-treat
:group 'gnus-picon
@@ -1423,9 +1503,9 @@ See Info node `(gnus)Customizing Articles' and Info node
(gnus-picons-installed-p))
'head nil)
"Display picons in the Newsgroups and Followup-To headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' and Info node
-`(gnus)Picons' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles' and Info
+node `(gnus)Picons' for details."
:version "22.1"
:group 'gnus-article-treat
:group 'gnus-picon
@@ -1438,7 +1518,9 @@ See Info node `(gnus)Customizing Articles' and Info node
(if (or gnus-treat-newsgroups-picon
gnus-treat-mail-picon
gnus-treat-from-picon)
- 'head nil)
+ ;; If there's much decoration, the user might prefer a boundery.
+ 'head
+ nil)
"Draw a boundary at the end of the headers.
Valid values are nil and `head'.
See Info node `(gnus)Customizing Articles' for details."
@@ -1449,8 +1531,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-capitalize-sentences nil
"Capitalize sentence-starting words.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "21.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1458,8 +1540,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-wash-html nil
"Format as HTML.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1467,16 +1549,16 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-fill-long-lines nil
"Fill long lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
:type gnus-article-treat-custom)
(defcustom gnus-treat-play-sounds nil
"Play sounds.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "21.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1484,8 +1566,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-translate nil
"Translate articles from one language to another.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "21.1"
:group 'gnus-article-treat
:link '(custom-manual "(gnus)Customizing Articles")
@@ -1494,8 +1576,8 @@ See Info node `(gnus)Customizing Articles' for details."
(defcustom gnus-treat-x-pgp-sig nil
"Verify X-PGP-Sig.
To automatically treat X-PGP-Sig, set it to head.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See Info node `(gnus)Customizing Articles' for details."
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
:version "22.1"
:group 'gnus-article-treat
:group 'mime-security
@@ -1581,9 +1663,10 @@ This requires GNU Libidn, and by default only enabled if it is found."
(gnus-treat-strip-multiple-blank-lines
gnus-article-strip-multiple-blank-lines)
(gnus-treat-overstrike gnus-article-treat-overstrike)
+ (gnus-treat-ansi-sequences gnus-article-treat-ansi-sequences)
(gnus-treat-unfold-headers gnus-article-treat-unfold-headers)
- (gnus-treat-fold-headers gnus-article-treat-fold-headers)
(gnus-treat-fold-newsgroups gnus-article-treat-fold-newsgroups)
+ (gnus-treat-fold-headers gnus-article-treat-fold-headers)
(gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
(gnus-treat-display-smileys gnus-treat-smiley)
(gnus-treat-capitalize-sentences gnus-article-capitalize-sentences)
@@ -1814,12 +1897,9 @@ always hide."
(save-excursion
(save-restriction
(let ((inhibit-read-only t)
- (list gnus-boring-article-headers)
- (inhibit-point-motion-hooks t)
- elem)
+ (inhibit-point-motion-hooks t))
(article-narrow-to-head)
- (while list
- (setq elem (pop list))
+ (dolist (elem gnus-boring-article-headers)
(goto-char (point-min))
(cond
;; Hide empty headers.
@@ -1827,7 +1907,7 @@ always hide."
(while (re-search-forward "^[^: \t]+:[ \t]*\n[^ \t]" nil t)
(forward-line -1)
(gnus-article-hide-text-type
- (gnus-point-at-bol)
+ (point-at-bol)
(progn
(end-of-line)
(if (re-search-forward "^[^ \t]" nil t)
@@ -1957,7 +2037,7 @@ always hide."
(goto-char (point-min))
(when (re-search-forward (concat "^" header ":") nil t)
(gnus-article-hide-text-type
- (gnus-point-at-bol)
+ (point-at-bol)
(progn
(end-of-line)
(if (re-search-forward "^[^ \t]" nil t)
@@ -1978,7 +2058,7 @@ always hide."
(article-narrow-to-head)
(while (not (eobp))
(cond
- ((< (setq column (- (gnus-point-at-eol) (point)))
+ ((< (setq column (- (point-at-eol) (point)))
gnus-article-normalized-header-length)
(end-of-line)
(insert (make-string
@@ -1989,7 +2069,7 @@ always hide."
(progn
(forward-char gnus-article-normalized-header-length)
(point))
- (gnus-point-at-eol)
+ (point-at-eol)
'invisible t))
(t
;; Do nothing.
@@ -2031,9 +2111,8 @@ characters to translate to."
MAP is an alist where the elements are on the form (\"from\" \"to\")."
(save-excursion
(when (article-goto-body)
- (let ((inhibit-read-only t)
- elem)
- (while (setq elem (pop map))
+ (let ((inhibit-read-only t))
+ (dolist (elem map)
(save-excursion
(while (search-forward (car elem) nil t)
(replace-match (cadr elem)))))))))
@@ -2064,6 +2143,14 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
(put-text-property
(point) (1+ (point)) 'face 'underline)))))))))
+(defun article-treat-ansi-sequences ()
+ "Translate ANSI SGR control sequences into overlays or extents."
+ (interactive)
+ (save-excursion
+ (when (article-goto-body)
+ (let ((inhibit-read-only t))
+ (ansi-color-apply-on-region (point) (point-max))))))
+
(defun gnus-article-treat-unfold-headers ()
"Unfold folded message headers.
Only the headers that fit into the current window width will be
@@ -2074,16 +2161,21 @@ unfolded."
(while (not (eobp))
(save-restriction
(mail-header-narrow-to-field)
- (let ((header (buffer-string)))
+ (let* ((header (buffer-string))
+ (unfoldable
+ (or (equal gnus-article-unfold-long-headers t)
+ (and (stringp gnus-article-unfold-long-headers)
+ (string-match gnus-article-unfold-long-headers header)))))
(with-temp-buffer
(insert header)
(goto-char (point-min))
(while (re-search-forward "\n[\t ]" nil t)
(replace-match " " t t)))
- (setq length (- (point-max) (point-min) 1)))
- (when (< length (window-width))
- (while (re-search-forward "\n[\t ]" nil t)
- (replace-match " " t t)))
+ (setq length (- (point-max) (point-min) 1))
+ (when (or unfoldable
+ (< length (window-width)))
+ (while (re-search-forward "\n[\t ]" nil t)
+ (replace-match " " t t))))
(goto-char (point-max)))))))
(defun gnus-article-treat-fold-headers ()
@@ -2130,6 +2222,39 @@ unfolded."
(mail-header-fold-field)
(goto-char (point-max))))))
+(defcustom gnus-article-truncate-lines default-truncate-lines
+ "Value of `truncate-lines' in Gnus Article buffer.
+Valid values are nil, t, `head', `first', `last', an integer or a
+predicate. See Info node `(gnus)Customizing Articles'."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-article
+ ;; :link '(custom-manual "(gnus)Customizing Articles")
+ :type 'boolean)
+
+(defun gnus-article-toggle-truncate-lines (&optional arg)
+ "Toggle whether to fold or truncate long lines in article the buffer.
+If ARG is non-nil and not a number, toggle
+`gnus-article-truncate-lines' too. If ARG is a number, truncate
+long lines iff arg is positive."
+ (interactive "P")
+ (cond
+ ((and (numberp arg) (> arg 0))
+ (setq gnus-article-truncate-lines t))
+ ((numberp arg)
+ (setq gnus-article-truncate-lines nil))
+ (arg
+ (setq gnus-article-truncate-lines
+ (not gnus-article-truncate-lines))))
+ (gnus-with-article-buffer
+ (cond
+ ((and (numberp arg) (> arg 0))
+ (setq truncate-lines nil))
+ ((numberp arg)
+ (setq truncate-lines t)))
+ ;; In versions of Emacs 22 (CVS) before 2006-05-26,
+ ;; `toggle-truncate-lines' needs an argument.
+ (toggle-truncate-lines)))
+
(defun gnus-article-treat-body-boundary ()
"Place a boundary line at the end of the headers."
(interactive)
@@ -2160,7 +2285,7 @@ unfolded."
(end-of-line)
(when (>= (current-column) (min fill-column width))
(narrow-to-region (min (1+ (point)) (point-max))
- (gnus-point-at-bol))
+ (point-at-bol))
(let ((goback (point-marker)))
(fill-paragraph nil)
(goto-char (marker-position goback)))
@@ -2202,11 +2327,13 @@ unfolded."
(while (and (not (bobp))
(looking-at "^[ \t]*$")
(not (gnus-annotation-in-region-p
- (point) (gnus-point-at-eol))))
+ (point) (point-at-eol))))
(forward-line -1))
(forward-line 1)
(point))))))
+(defvar gnus-face-properties-alist)
+
(defun article-display-face ()
"Display any Face headers in the header."
(interactive)
@@ -2239,7 +2366,9 @@ unfolded."
(insert "[no `from' set]\n"))
(while faces
(when (setq png (gnus-convert-face-to-png (pop faces)))
- (setq image (gnus-create-image png 'png t))
+ (setq image
+ (apply 'gnus-create-image png 'png t
+ (cdr (assq 'png gnus-face-properties-alist))))
(goto-char from)
(gnus-add-wash-type 'face)
(gnus-add-image 'face image)
@@ -2311,14 +2440,12 @@ unfolded."
(defun article-decode-mime-words ()
"Decode all MIME-encoded words in the article."
(interactive)
- (save-excursion
- (set-buffer gnus-article-buffer)
+ (gnus-with-article-buffer
(let ((inhibit-point-motion-hooks t)
- (inhibit-read-only t)
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
- (save-excursion (set-buffer gnus-summary-buffer)
- gnus-newsgroup-ignored-charsets)))
+ (with-current-buffer gnus-summary-buffer
+ gnus-newsgroup-ignored-charsets)))
(mail-decode-encoded-word-region (point-min) (point-max)))))
(defun article-decode-charset (&optional prompt)
@@ -2395,44 +2522,31 @@ If PROMPT (the prefix), prompt for a coding system to use."
(goto-char (setq end start)))))
(defun article-decode-group-name ()
- "Decode group names in `Newsgroups:'."
+ "Decode group names in Newsgroups, Followup-To and Xref headers."
(let ((inhibit-point-motion-hooks t)
(inhibit-read-only t)
- (method (gnus-find-method-for-group gnus-newsgroup-name)))
+ (method (gnus-find-method-for-group gnus-newsgroup-name))
+ regexp)
(when (and (or gnus-group-name-charset-method-alist
gnus-group-name-charset-group-alist)
(gnus-buffer-live-p gnus-original-article-buffer))
(save-restriction
(article-narrow-to-head)
- (with-current-buffer gnus-original-article-buffer
- (goto-char (point-min)))
- (while (re-search-forward
- "^Newsgroups:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" nil t)
- (replace-match (save-match-data
- (gnus-decode-newsgroups
- ;; XXX how to use data in article buffer?
- (with-current-buffer gnus-original-article-buffer
- (re-search-forward
- "^Newsgroups:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]"
- nil t)
- (match-string 1))
- gnus-newsgroup-name method))
- t t nil 1))
- (goto-char (point-min))
- (with-current-buffer gnus-original-article-buffer
- (goto-char (point-min)))
- (while (re-search-forward
- "^Followup-To:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]" nil t)
- (replace-match (save-match-data
- (gnus-decode-newsgroups
- ;; XXX how to use data in article buffer?
- (with-current-buffer gnus-original-article-buffer
- (re-search-forward
- "^Followup-To:\\(\\(.\\|\n[\t ]\\)*\\)\n[^\t ]"
- nil t)
- (match-string 1))
- gnus-newsgroup-name method))
- t t nil 1))))))
+ (dolist (header '("Newsgroups" "Followup-To" "Xref"))
+ (with-current-buffer gnus-original-article-buffer
+ (goto-char (point-min)))
+ (setq regexp (concat "^" header
+ ":\\([^\n]*\\(?:\n[\t ]+[^\n]+\\)*\\)\n"))
+ (while (re-search-forward regexp nil t)
+ (replace-match (save-match-data
+ (gnus-decode-newsgroups
+ ;; XXX how to use data in article buffer?
+ (with-current-buffer gnus-original-article-buffer
+ (re-search-forward regexp nil t)
+ (match-string 1))
+ gnus-newsgroup-name method))
+ t t nil 1))
+ (goto-char (point-min)))))))
(autoload 'idna-to-unicode "idna")
@@ -2611,7 +2725,7 @@ charset defined in `gnus-summary-show-article-charset-alist' is used."
;; Put the mark meaning this part was rendered by emacs-w3m.
'mm-inline-text-html-with-w3m t))))
-(eval-when-compile (defvar charset)) ;; Bound by `article-wash-html'.
+(defvar charset) ;; Bound by `article-wash-html'.
(defun gnus-article-wash-html-with-w3m-standalone ()
"Wash the current buffer with w3m."
@@ -2628,6 +2742,104 @@ charset defined in `gnus-summary-show-article-charset-alist' is used."
"-I" (symbol-name charset) "-O" (symbol-name charset))))
(mm-inline-wash-with-stdin nil "w3m" "-dump" "-T" "text/html")))
+(defvar gnus-article-browse-html-temp-list nil
+ "List of temporary files created by `gnus-article-browse-html-parts'.
+Internal variable.")
+
+(defcustom gnus-article-browse-delete-temp 'ask
+ "What to do with temporary files from `gnus-article-browse-html-parts'.
+If nil, don't delete temporary files. If it is t, delete them on
+exit from the summary buffer. If it is the symbol `file', query
+on each file, if it is `ask' ask once when exiting from the
+summary buffer."
+ :group 'gnus-article
+ :version "23.0" ;; No Gnus
+ :type '(choice (const :tag "Don't delete" nil)
+ (const :tag "Don't ask" t)
+ (const :tag "Ask" ask)
+ (const :tag "Ask for each file" file)))
+
+;; Cf. mm-postponed-undisplay-list / mm-destroy-postponed-undisplay-list.
+
+(defun gnus-article-browse-delete-temp-files (&optional how)
+ "Delete temp-files created by `gnus-article-browse-html-parts'."
+ (when (and gnus-article-browse-html-temp-list
+ (or how
+ (setq how gnus-article-browse-delete-temp)))
+ (when (and (eq how 'ask)
+ (y-or-n-p (format
+ "Delete all %s temporary HTML file(s)? "
+ (length gnus-article-browse-html-temp-list)))
+ (setq how t)))
+ (dolist (file gnus-article-browse-html-temp-list)
+ (when (and (file-exists-p file)
+ (or (eq how t)
+ ;; `how' is neither `nil', `ask' nor `t' (i.e. `file'):
+ (gnus-y-or-n-p
+ (format "Delete temporary HTML file `%s'? " file))))
+ (delete-file file)))
+ ;; Also remove file from the list when not deleted or if file doesn't
+ ;; exist anymore.
+ (setq gnus-article-browse-html-temp-list nil))
+ gnus-article-browse-html-temp-list)
+
+(defun gnus-article-browse-html-parts (list)
+ "View all \"text/html\" parts from LIST.
+Recurse into multiparts."
+ ;; Internal function used by `gnus-article-browse-html-article'.
+ (let ((showed))
+ ;; Find and show the html-parts.
+ (dolist (handle list)
+ ;; If HTML, show it:
+ (when (listp handle)
+ (cond ((and (bufferp (car handle))
+ (string-match "text/html" (car (mm-handle-type handle))))
+ (let ((tmp-file (mm-make-temp-file
+ ;; Do we need to care for 8.3 filenames?
+ "mm-" nil ".html")))
+ (mm-save-part-to-file handle tmp-file)
+ (add-to-list 'gnus-article-browse-html-temp-list tmp-file)
+ (add-hook 'gnus-summary-prepare-exit-hook
+ 'gnus-article-browse-delete-temp-files)
+ (add-hook 'gnus-exit-gnus-hook
+ (lambda ()
+ (gnus-article-browse-delete-temp-files t)))
+ ;; FIXME: Warn if there's an <img> tag?
+ (browse-url-of-file tmp-file)
+ (setq showed t)))
+ ;; If multipart, recurse
+ ((and (stringp (car handle))
+ (string-match "^multipart/" (car handle))
+ (setq showed
+ (or showed
+ (gnus-article-browse-html-parts handle))))))))
+ showed))
+
+;; FIXME: Documentation in texi/gnus.texi missing.
+(defun gnus-article-browse-html-article ()
+ "View \"text/html\" parts of the current article with a WWW browser.
+
+Warning: Spammers use links to images in HTML articles to verify
+whether you have read the message. As
+`gnus-article-browse-html-article' passes the unmodified HTML
+content to the browser without eliminating these \"web bugs\" you
+should only use it for mails from trusted senders."
+ ;; Cf. `mm-w3m-safe-url-regexp'
+ (interactive)
+ (save-window-excursion
+ ;; Open raw article and select the buffer
+ (gnus-summary-show-article t)
+ (gnus-summary-select-article-buffer)
+ (let ((parts (mm-dissect-buffer t t)))
+ ;; If singlepart, enforce a list.
+ (when (and (bufferp (car parts))
+ (stringp (car (mm-handle-type parts))))
+ (setq parts (list parts)))
+ ;; Process the list
+ (unless (gnus-article-browse-html-parts parts)
+ (gnus-error 3 "Mail doesn't contain a \"text/html\" part!"))
+ (gnus-summary-show-article))))
+
(defun article-hide-list-identifiers ()
"Remove list identifies from the Subject header.
The `gnus-list-identifiers' variable specifies what to do."
@@ -2732,11 +2944,9 @@ always hide."
"Translate article using an online translation service."
(interactive)
(require 'babel)
- (save-excursion
- (set-buffer gnus-article-buffer)
+ (gnus-with-article-buffer
(when (article-goto-body)
- (let* ((inhibit-read-only t)
- (start (point))
+ (let* ((start (point))
(end (point-max))
(orig (buffer-substring start end))
(trans (babel-as-string orig)))
@@ -3007,22 +3217,20 @@ should replace the \"Date:\" one, or should be added below it."
(point-max)))
(goto-char (point-min))
(when (re-search-forward tdate-regexp nil t)
- (setq bface (get-text-property (gnus-point-at-bol) 'face)
- eface (get-text-property (1- (gnus-point-at-eol)) 'face)))
+ (setq bface (get-text-property (point-at-bol) 'face)
+ eface (get-text-property (1- (point-at-eol)) 'face)))
(goto-char (point-min))
(setq pos nil)
;; Delete any old Date headers.
(while (re-search-forward date-regexp nil t)
(if pos
- (delete-region (gnus-point-at-bol)
- (progn
- (gnus-article-forward-header)
- (point)))
- (delete-region (gnus-point-at-bol)
- (progn
- (gnus-article-forward-header)
- (forward-char -1)
- (point)))
+ (delete-region (point-at-bol) (progn
+ (gnus-article-forward-header)
+ (point)))
+ (delete-region (point-at-bol) (progn
+ (gnus-article-forward-header)
+ (forward-char -1)
+ (point)))
(setq pos (point))))
(when (and (not pos)
(re-search-forward tdate-regexp nil t))
@@ -3052,22 +3260,21 @@ should replace the \"Date:\" one, or should be added below it."
(cond
;; Convert to the local timezone.
((eq type 'local)
- (let ((tz (car (current-time-zone time))))
- (format "Date: %s %s%02d%02d" (current-time-string time)
- (if (> tz 0) "+" "-") (/ (abs tz) 3600)
- (/ (% (abs tz) 3600) 60))))
+ (concat "Date: " (message-make-date time)))
;; Convert to Universal Time.
((eq type 'ut)
(concat "Date: "
- (current-time-string
- (let* ((e (parse-time-string date))
- (tm (apply 'encode-time e))
- (ms (car tm))
- (ls (- (cadr tm) (car (current-time-zone time)))))
- (cond ((< ls 0) (list (1- ms) (+ ls 65536)))
- ((> ls 65535) (list (1+ ms) (- ls 65536)))
- (t (list ms ls)))))
- " UT"))
+ (substring
+ (message-make-date
+ (let* ((e (parse-time-string date))
+ (tm (apply 'encode-time e))
+ (ms (car tm))
+ (ls (- (cadr tm) (car (current-time-zone time)))))
+ (cond ((< ls 0) (list (1- ms) (+ ls 65536)))
+ ((> ls 65535) (list (1+ ms) (- ls 65536)))
+ (t (list ms ls)))))
+ 0 -5)
+ "UT"))
;; Get the original date from the article.
((eq type 'original)
(concat "Date: " (if (string-match "\n+$" date)
@@ -3208,7 +3415,7 @@ is to run."
(setq n 1))
(gnus-stop-date-timer)
(setq article-lapsed-timer
- (nnheader-run-at-time 1 n 'article-update-date-lapsed)))
+ (run-at-time 1 n 'article-update-date-lapsed)))
(defun gnus-stop-date-timer ()
"Stop the X-Sent timer."
@@ -3237,7 +3444,7 @@ This format is defined by the `gnus-article-time-format' variable."
(not (bolp)))
(match-end 0))))
(date (when (and start
- (re-search-forward "[\t ]*\n\\([^\t ]\\|\\'\\)"
+ (re-search-forward "[\t ]*\n\\(?:[^\t ]\\|\\'\\)"
nil t))
(buffer-substring-no-properties start
(match-beginning 0)))))
@@ -3321,9 +3528,8 @@ This format is defined by the `gnus-article-time-format' variable."
gnus-newsgroup-name 'highlight-words t)))
gnus-emphasis-alist)))))
-(eval-when-compile
- (defvar gnus-summary-article-menu)
- (defvar gnus-summary-post-menu))
+(defvar gnus-summary-article-menu)
+(defvar gnus-summary-post-menu)
;;; Saving functions.
@@ -3588,17 +3794,9 @@ The directory to save in defaults to `gnus-article-save-directory'."
(shell-command-on-region (point-min) (point-max) command nil)))
(setq gnus-last-shell-command command))
-(defmacro gnus-read-string (prompt &optional initial-contents history
- default-value)
- "Like `read-string' but allow for older XEmacsen that don't have the 5th arg."
- (if (and (featurep 'xemacs)
- (< emacs-minor-version 2))
- `(read-string ,prompt ,initial-contents ,history)
- `(read-string ,prompt ,initial-contents ,history ,default-value)))
-
(defun gnus-summary-pipe-to-muttprint (&optional command)
"Pipe this article to muttprint."
- (setq command (gnus-read-string
+ (setq command (read-string
"Print using command: " gnus-summary-muttprint-program
nil gnus-summary-muttprint-program))
(gnus-summary-save-in-pipe command))
@@ -3721,8 +3919,8 @@ If variable `gnus-use-long-file-name' is non-nil, it is
(message-narrow-to-head)
(goto-char (point-max))
(forward-line -1)
- (setq bface (get-text-property (gnus-point-at-bol) 'face)
- eface (get-text-property (1- (gnus-point-at-eol)) 'face))
+ (setq bface (get-text-property (point-at-bol) 'face)
+ eface (get-text-property (1- (point-at-eol)) 'face))
(message-remove-header "X-Gnus-PGP-Verify")
(if (re-search-forward "^X-PGP-Sig:" nil t)
(forward-line)
@@ -3750,7 +3948,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
(canlock-verify gnus-original-article-buffer)))
(eval-and-compile
- (mapcar
+ (mapc
(lambda (func)
(let (afunc gfunc)
(if (consp func)
@@ -3773,6 +3971,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
article-verify-cancel-lock
article-hide-boring-headers
article-treat-overstrike
+ article-treat-ansi-sequences
article-fill-long-lines
article-capitalize-sentences
article-remove-cr
@@ -3810,7 +4009,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
article-emphasize
article-treat-dumbquotes
article-normalize-headers
-;; (article-show-all . gnus-article-show-all-headers)
+ ;;(article-show-all . gnus-article-show-all-headers)
)))
;;;
@@ -3873,6 +4072,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
["Hide signature" gnus-article-hide-signature t]
["Hide citation" gnus-article-hide-citation t]
["Treat overstrike" gnus-article-treat-overstrike t]
+ ["Treat ANSI sequences" gnus-article-treat-ansi-sequences t]
["Remove carriage return" gnus-article-remove-cr t]
["Remove leading whitespace" gnus-article-remove-leading-whitespace t]
["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t]
@@ -3929,20 +4129,18 @@ commands:
;; face.
(set (make-local-variable 'nobreak-char-display) nil)
(setq cursor-in-non-selected-windows nil)
+ (setq truncate-lines gnus-article-truncate-lines)
(gnus-set-default-directory)
(buffer-disable-undo)
- (setq buffer-read-only t)
+ (setq buffer-read-only t
+ show-trailing-whitespace nil)
(set-syntax-table gnus-article-mode-syntax-table)
(mm-enable-multibyte)
(gnus-run-mode-hooks 'gnus-article-mode-hook))
-;; Internal variables. Are `gnus-button-regexp' and `gnus-button-last' used
-;; at all?
-(defvar gnus-button-regexp nil)
(defvar gnus-button-marker-list nil
- "Regexp matching any of the regexps from `gnus-button-alist'.")
-(defvar gnus-button-last nil
- "The value of `gnus-button-alist' when `gnus-button-regexp' was build.")
+ "Regexp matching any of the regexps from `gnus-button-alist'.
+Internal variable.")
(defun gnus-article-setup-buffer ()
"Initialize the article buffer."
@@ -3955,10 +4153,9 @@ commands:
(setq gnus-article-buffer name)
(setq gnus-original-article-buffer original)
(setq gnus-article-mime-handle-alist nil)
- ;; This might be a variable local to the summary buffer.
- (unless gnus-single-article-buffer
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
+ ;; This might be a variable local to the summary buffer.
+ (unless gnus-single-article-buffer
(setq gnus-article-buffer name)
(setq gnus-original-article-buffer original)
(gnus-set-global-variables)))
@@ -3999,23 +4196,27 @@ commands:
(set-buffer (gnus-get-buffer-create name))
(gnus-article-mode)
(make-local-variable 'gnus-summary-buffer)
+ (setq gnus-summary-buffer
+ (gnus-summary-buffer-name gnus-newsgroup-name))
(gnus-summary-set-local-parameters gnus-newsgroup-name)
(current-buffer)))))
;; Set article window start at LINE, where LINE is the number of lines
;; from the head of the article.
(defun gnus-article-set-window-start (&optional line)
- (set-window-start
- (gnus-get-buffer-window gnus-article-buffer t)
- (save-excursion
- (set-buffer gnus-article-buffer)
- (goto-char (point-min))
- (if (not line)
- (point-min)
- (gnus-message 6 "Moved to bookmark")
- (search-forward "\n\n" nil t)
- (forward-line line)
- (point)))))
+ (let ((article-window (gnus-get-buffer-window gnus-article-buffer t)))
+ (when article-window
+ (set-window-start
+ article-window
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (goto-char (point-min))
+ (if (not line)
+ (point-min)
+ (gnus-message 6 "Moved to bookmark")
+ (search-forward "\n\n" nil t)
+ (forward-line line)
+ (point)))))))
(defun gnus-article-prepare (article &optional all-headers header)
"Prepare ARTICLE in article mode buffer.
@@ -4147,6 +4348,90 @@ If ALL-HEADERS is non-nil, no headers are hidden."
(gnus-run-hooks 'gnus-article-prepare-hook)))
;;;
+;;; Gnus Sticky Article Mode
+;;;
+
+(define-derived-mode gnus-sticky-article-mode gnus-article-mode "StickyArticle"
+ "Mode for sticky articles."
+ ;; Release bindings that won't work.
+ (substitute-key-definition 'gnus-article-read-summary-keys 'undefined
+ gnus-sticky-article-mode-map)
+ (substitute-key-definition 'gnus-article-refer-article 'undefined
+ gnus-sticky-article-mode-map)
+ (dolist (k '("e" "h" "s" "F" "R"))
+ (define-key gnus-sticky-article-mode-map k nil))
+ (define-key gnus-sticky-article-mode-map "k" 'gnus-kill-sticky-article-buffer)
+ (define-key gnus-sticky-article-mode-map "q" 'bury-buffer)
+ (define-key gnus-sticky-article-mode-map "\C-hc" 'describe-key-briefly)
+ (define-key gnus-sticky-article-mode-map "\C-hk" 'describe-key))
+
+(defun gnus-sticky-article (arg)
+ "Make the current article sticky.
+If a prefix ARG is given, ask for a name for this sticky article buffer."
+ (interactive "P")
+ (gnus-summary-show-thread)
+ (gnus-summary-select-article nil nil 'pseudo)
+ (let (new-art-buf-name)
+ (gnus-eval-in-buffer-window gnus-article-buffer
+ (setq new-art-buf-name
+ (concat
+ "*Sticky Article: "
+ (if arg
+ (read-from-minibuffer "Sticky article buffer name: ")
+ (gnus-with-article-headers
+ (gnus-article-goto-header "subject")
+ (setq new-art-buf-name
+ (buffer-substring-no-properties
+ (line-beginning-position) (line-end-position)))
+ (goto-char (point-min))
+ (gnus-article-goto-header "from")
+ (setq new-art-buf-name
+ (concat
+ new-art-buf-name ", "
+ (buffer-substring-no-properties
+ (line-beginning-position) (line-end-position))))
+ (goto-char (point-min))
+ (gnus-article-goto-header "date")
+ (setq new-art-buf-name
+ (concat
+ new-art-buf-name ", "
+ (buffer-substring-no-properties
+ (line-beginning-position) (line-end-position))))))
+ "*"))
+ (if (and (gnus-buffer-live-p new-art-buf-name)
+ (with-current-buffer new-art-buf-name
+ (eq major-mode 'gnus-sticky-article-mode)))
+ (switch-to-buffer new-art-buf-name)
+ (setq new-art-buf-name (rename-buffer new-art-buf-name t)))
+ (gnus-sticky-article-mode))
+ (setq gnus-article-buffer new-art-buf-name))
+ (gnus-summary-recenter)
+ (gnus-summary-position-point))
+
+(defun gnus-kill-sticky-article-buffer (&optional buffer)
+ "Kill the given sticky article BUFFER.
+If none is given, assume the current buffer and kill it if it has
+`gnus-sticky-article-mode'."
+ (interactive)
+ (unless buffer
+ (setq buffer (current-buffer)))
+ (with-current-buffer buffer
+ (when (eq major-mode 'gnus-sticky-article-mode)
+ (gnus-kill-buffer buffer))))
+
+(defun gnus-kill-sticky-article-buffers (arg)
+ "Kill all sticky article buffers.
+If a prefix ARG is given, ask for confirmation."
+ (interactive "P")
+ (dolist (buf (gnus-buffers))
+ (with-current-buffer buf
+ (when (eq major-mode 'gnus-sticky-article-mode)
+ (if (not arg)
+ (gnus-kill-buffer buf)
+ (when (yes-or-no-p (concat "Kill buffer " (buffer-name buf) "? "))
+ (gnus-kill-buffer buf)))))))
+
+;;;
;;; Gnus MIME viewing functions
;;;
@@ -4181,10 +4466,11 @@ General format specifiers can also be used. See Info node
(gnus-mime-view-part-as-charset "C" "View As charset...")
(gnus-mime-save-part "o" "Save...")
(gnus-mime-save-part-and-strip "\C-o" "Save and Strip")
+ (gnus-mime-replace-part "r" "Replace part")
(gnus-mime-delete-part "d" "Delete part")
(gnus-mime-copy-part "c" "View As Text, In Other Buffer")
(gnus-mime-inline-part "i" "View As Text, In This Buffer")
- (gnus-mime-view-part-internally "E" "View Internally")
+ (gnus-mime-view-part-internally "E" "View Internally") ;; Why `E'?
(gnus-mime-view-part-externally "e" "View Externally")
(gnus-mime-print-part "p" "Print")
(gnus-mime-pipe-part "|" "Pipe To Command...")
@@ -4199,9 +4485,6 @@ General format specifiers can also be used. See Info node
(defvar gnus-mime-button-map
(let ((map (make-sparse-keymap)))
- (unless (>= (string-to-number emacs-version) 21)
- ;; XEmacs doesn't care.
- (set-keymap-parent map gnus-article-mode-map))
(define-key map gnus-mouse-2 'gnus-article-push-button)
(define-key map gnus-down-mouse-3 'gnus-mime-button-menu)
(dolist (c gnus-mime-button-commands)
@@ -4212,25 +4495,9 @@ General format specifiers can also be used. See Info node
gnus-mime-button-menu gnus-mime-button-map "MIME button menu."
`("MIME Part"
,@(mapcar (lambda (c)
- (vector (caddr c) (car c) :enable t))
+ (vector (caddr c) (car c) :active t))
gnus-mime-button-commands)))
-(eval-when-compile
- (define-compiler-macro popup-menu (&whole form
- menu &optional position prefix)
- (if (and (fboundp 'popup-menu)
- (not (memq 'popup-menu (assoc "lmenu" load-history))))
- form
- ;; Gnus is probably running under Emacs 20.
- `(let* ((menu (cdr ,menu))
- (response (x-popup-menu
- t (list (car menu)
- (cons "" (mapcar (lambda (c)
- (cons (caddr c) (car c)))
- (cdr menu)))))))
- (if response
- (call-interactively (nth 3 (assq response menu))))))))
-
(defun gnus-mime-button-menu (event prefix)
"Construct a context-sensitive menu of MIME commands."
(interactive "e\nP")
@@ -4244,8 +4511,7 @@ General format specifiers can also be used. See Info node
(defun gnus-mime-view-all-parts (&optional handles)
"View all the MIME parts."
(interactive)
- (save-current-buffer
- (set-buffer gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
(let ((handles (or handles gnus-article-mime-handles))
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
@@ -4259,8 +4525,102 @@ General format specifiers can also be used. See Info node
(delete-region (point) (point-max))
(mm-display-parts handles))))))
-(defun gnus-mime-save-part-and-strip ()
- "Save the MIME part under point then replace it with an external body."
+(defun gnus-article-jump-to-part (n)
+ "Jump to MIME part N."
+ (interactive "P")
+ (pop-to-buffer gnus-article-buffer)
+ ;; FIXME: why is it necessary?
+ (sit-for 0)
+ (let ((parts (length gnus-article-mime-handle-alist)))
+ (or n (setq n
+ (string-to-number
+ (read-string ;; Emacs 21 doesn't have `read-number'.
+ (format "Jump to part (2..%s): " parts)))))
+ (unless (and (integerp n) (<= n parts) (>= n 1))
+ (setq n
+ (progn
+ (gnus-message 7 "Invalid part `%s', using %s instead."
+ n parts)
+ parts)))
+ (gnus-message 9 "Jumping to part %s." n)
+ (cond ((>= gnus-auto-select-part 1)
+ (while (and (<= n parts)
+ (not (gnus-article-goto-part n)))
+ (setq n (1+ n))))
+ ((< gnus-auto-select-part 0)
+ (while (and (>= n 1)
+ (not (gnus-article-goto-part n)))
+ (setq n (1- n))))
+ (t
+ (gnus-article-goto-part n)))))
+
+(eval-when-compile
+ (defsubst gnus-article-edit-part (handles &optional current-id)
+ "Edit an article in order to delete a mime part.
+This function is exclusively used by `gnus-mime-save-part-and-strip'
+and `gnus-mime-delete-part', and not provided at run-time normally."
+ (gnus-article-edit-article
+ `(lambda ()
+ (buffer-disable-undo)
+ (erase-buffer)
+ (let ((mail-parse-charset (or gnus-article-charset
+ ',gnus-newsgroup-charset))
+ (mail-parse-ignored-charsets
+ (or gnus-article-ignored-charsets
+ ',gnus-newsgroup-ignored-charsets))
+ (mbl mml-buffer-list))
+ (setq mml-buffer-list nil)
+ (insert-buffer-substring gnus-original-article-buffer)
+ (mime-to-mml ',handles)
+ (setq gnus-article-mime-handles nil)
+ (let ((mbl1 mml-buffer-list))
+ (setq mml-buffer-list mbl)
+ (set (make-local-variable 'mml-buffer-list) mbl1))
+ (gnus-make-local-hook 'kill-buffer-hook)
+ (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
+ `(lambda (no-highlight)
+ (let ((mail-parse-charset (or gnus-article-charset
+ ',gnus-newsgroup-charset))
+ (message-options message-options)
+ (message-options-set-recipient)
+ (mail-parse-ignored-charsets
+ (or gnus-article-ignored-charsets
+ ',gnus-newsgroup-ignored-charsets)))
+ (mml-to-mime)
+ (mml-destroy-buffers)
+ (remove-hook 'kill-buffer-hook
+ 'mml-destroy-buffers t)
+ (kill-local-variable 'mml-buffer-list))
+ (gnus-summary-edit-article-done
+ ,(or (mail-header-references gnus-current-headers) "")
+ ,(gnus-group-read-only-p)
+ ,gnus-summary-buffer no-highlight))
+ t)
+ (gnus-article-edit-done)
+ (gnus-summary-expand-window)
+ (gnus-summary-show-article)
+ (when (and current-id (integerp gnus-auto-select-part))
+ (gnus-article-jump-to-part
+ (if (text-property-any (point-min) (point-max)
+ 'gnus-part (+ current-id gnus-auto-select-part))
+ (+ current-id gnus-auto-select-part)
+ (with-current-buffer gnus-article-buffer
+ (length gnus-article-mime-handle-alist)))))))
+
+(defun gnus-mime-replace-part (file)
+ "Replace MIME part under point with an external body."
+ ;; Useful if file has already been saved to disk
+ (interactive
+ (list
+ (mm-with-multibyte
+ (read-file-name "Replace MIME part with file: "
+ (or mm-default-directory default-directory)
+ nil nil))))
+ (gnus-mime-save-part-and-strip file))
+
+(defun gnus-mime-save-part-and-strip (&optional file)
+ "Save the MIME part under point then replace it with an external body.
+If FILE is given, use it for the external part."
(interactive)
(gnus-article-check-buffer)
(when (gnus-group-read-only-p)
@@ -4268,66 +4628,36 @@ General format specifiers can also be used. See Info node
(when (mm-complicated-handles gnus-article-mime-handles)
(error "\
The current article has a complicated MIME structure, giving up..."))
- (when (gnus-yes-or-no-p "\
-Deleting parts may malfunction or destroy the article; continue? ")
- (let* ((data (get-text-property (point) 'gnus-data))
- file param
- (handles gnus-article-mime-handles))
- (setq file (and data (mm-save-part data)))
- (when file
- (with-current-buffer (mm-handle-buffer data)
- (erase-buffer)
- (insert "Content-Type: " (mm-handle-media-type data))
- (mml-insert-parameter-string (cdr (mm-handle-type data))
- '(charset))
- ;; Add a filename for the sake of saving the part again.
- (mml-insert-parameter
- (mail-header-encode-parameter "name" (file-name-nondirectory file)))
- (insert "\n")
- (insert "Content-ID: " (message-make-message-id) "\n")
- (insert "Content-Transfer-Encoding: binary\n")
- (insert "\n"))
- (setcdr data
- (cdr (mm-make-handle nil
- `("message/external-body"
- (access-type . "LOCAL-FILE")
- (name . ,file)))))
- (set-buffer gnus-summary-buffer)
- (gnus-article-edit-article
- `(lambda ()
- (erase-buffer)
- (let ((mail-parse-charset (or gnus-article-charset
- ',gnus-newsgroup-charset))
- (mail-parse-ignored-charsets
- (or gnus-article-ignored-charsets
- ',gnus-newsgroup-ignored-charsets))
- (mbl mml-buffer-list))
- (setq mml-buffer-list nil)
- (insert-buffer-substring gnus-original-article-buffer)
- (mime-to-mml ',handles)
- (setq gnus-article-mime-handles nil)
- (let ((mbl1 mml-buffer-list))
- (setq mml-buffer-list mbl)
- (set (make-local-variable 'mml-buffer-list) mbl1))
- (gnus-make-local-hook 'kill-buffer-hook)
- (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
- `(lambda (no-highlight)
- (let ((mail-parse-charset (or gnus-article-charset
- ',gnus-newsgroup-charset))
- (message-options message-options)
- (message-options-set-recipient)
- (mail-parse-ignored-charsets
- (or gnus-article-ignored-charsets
- ',gnus-newsgroup-ignored-charsets)))
- (mml-to-mime)
- (mml-destroy-buffers)
- (remove-hook 'kill-buffer-hook
- 'mml-destroy-buffers t)
- (kill-local-variable 'mml-buffer-list))
- (gnus-summary-edit-article-done
- ,(or (mail-header-references gnus-current-headers) "")
- ,(gnus-group-read-only-p)
- ,gnus-summary-buffer no-highlight)))))))
+ (let* ((data (get-text-property (point) 'gnus-data))
+ (id (get-text-property (point) 'gnus-part))
+ param
+ (handles gnus-article-mime-handles))
+ (unless file
+ (setq file
+ (and data (mm-save-part data "Delete MIME part and save to: "))))
+ (when file
+ (with-current-buffer (mm-handle-buffer data)
+ (erase-buffer)
+ (insert "Content-Type: " (mm-handle-media-type data))
+ (mml-insert-parameter-string (cdr (mm-handle-type data))
+ '(charset))
+ ;; Add a filename for the sake of saving the part again.
+ (mml-insert-parameter
+ (mail-header-encode-parameter "name" (file-name-nondirectory file)))
+ (insert "\n")
+ (insert "Content-ID: " (message-make-message-id) "\n")
+ (insert "Content-Transfer-Encoding: binary\n")
+ (insert "\n"))
+ (setcdr data
+ (cdr (mm-make-handle nil
+ `("message/external-body"
+ (access-type . "LOCAL-FILE")
+ (name . ,file)))))
+ ;; (set-buffer gnus-summary-buffer)
+ (gnus-article-edit-part handles id))))
+
+;; A function like `gnus-summary-save-parts' (`X m', `<MIME> <Extract all
+;; parts...>') but with stripping would be nice.
(defun gnus-mime-delete-part ()
"Delete the MIME part under point.
@@ -4339,9 +4669,11 @@ Replace it with some information about the removed part."
(when (mm-complicated-handles gnus-article-mime-handles)
(error "\
The current article has a complicated MIME structure, giving up..."))
- (when (gnus-yes-or-no-p "\
-Deleting parts may malfunction or destroy the article; continue? ")
+ (when (or gnus-expert-user
+ (gnus-yes-or-no-p "\
+Deleting parts may malfunction or destroy the article; continue? "))
(let* ((data (get-text-property (point) 'gnus-data))
+ (id (get-text-property (point) 'gnus-part))
(handles gnus-article-mime-handles)
(none "(none)")
(description
@@ -4371,48 +4703,8 @@ Deleting parts may malfunction or destroy the article; continue? ")
nil `("text/plain") nil nil
(list "attachment")
(format "Deleted attachment (%s bytes)" bsize))))))
- (set-buffer gnus-summary-buffer)
- ;; FIXME: maybe some of the following code (borrowed from
- ;; `gnus-mime-save-part-and-strip') isn't necessary?
- (gnus-article-edit-article
- `(lambda ()
- (erase-buffer)
- (let ((mail-parse-charset (or gnus-article-charset
- ',gnus-newsgroup-charset))
- (mail-parse-ignored-charsets
- (or gnus-article-ignored-charsets
- ',gnus-newsgroup-ignored-charsets))
- (mbl mml-buffer-list))
- (setq mml-buffer-list nil)
- (insert-buffer-substring gnus-original-article-buffer)
- (mime-to-mml ',handles)
- (setq gnus-article-mime-handles nil)
- (let ((mbl1 mml-buffer-list))
- (setq mml-buffer-list mbl)
- (set (make-local-variable 'mml-buffer-list) mbl1))
- (gnus-make-local-hook 'kill-buffer-hook)
- (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t)))
- `(lambda (no-highlight)
- (let ((mail-parse-charset (or gnus-article-charset
- ',gnus-newsgroup-charset))
- (message-options message-options)
- (message-options-set-recipient)
- (mail-parse-ignored-charsets
- (or gnus-article-ignored-charsets
- ',gnus-newsgroup-ignored-charsets)))
- (mml-to-mime)
- (mml-destroy-buffers)
- (remove-hook 'kill-buffer-hook
- 'mml-destroy-buffers t)
- (kill-local-variable 'mml-buffer-list))
- (gnus-summary-edit-article-done
- ,(or (mail-header-references gnus-current-headers) "")
- ,(gnus-group-read-only-p)
- ,gnus-summary-buffer no-highlight))))
- ;; Not in `gnus-mime-save-part-and-strip':
- (gnus-article-edit-done)
- (gnus-summary-expand-window)
- (gnus-summary-show-article)))
+ ;; (set-buffer gnus-summary-buffer)
+ (gnus-article-edit-part handles id))))
(defun gnus-mime-save-part ()
"Save the MIME part under point."
@@ -4450,7 +4742,11 @@ Deleting parts may malfunction or destroy the article; continue? ")
;; Content-Disposition: attachment; filename=...
(cdr (assq 'filename (cdr (mm-handle-disposition handle))))))
(def-type (and name (mm-default-file-encoding name))))
- (and def-type (cons def-type 0))))
+ (or (and def-type (cons def-type 0))
+ (and handle
+ (equal (mm-handle-media-supertype handle) "text")
+ '("text/plain" . 0))
+ '("application/octet-stream" . 0))))
(defun gnus-mime-view-part-as-type (&optional mime-type pred)
"Choose a MIME media type, and view the part as such.
@@ -4484,62 +4780,67 @@ available media-types."
(mm-handle-id handle)))
(setq gnus-article-mime-handles
(mm-merge-handles gnus-article-mime-handles handle))
+ (when (mm-handle-displayed-p handle)
+ (mm-remove-part handle))
(gnus-mm-display-part handle))))
-(eval-when-compile
- (require 'jka-compr))
-
-;; jka-compr.el uses a "sh -c" to direct stderr to err-file, but these days
-;; emacs can do that itself.
-;;
-(defun gnus-mime-jka-compr-maybe-uncompress ()
- "Uncompress the current buffer if `auto-compression-mode' is enabled.
-The uncompress method used is derived from `buffer-file-name'."
- (when (and (fboundp 'jka-compr-installed-p)
- (jka-compr-installed-p))
- (let ((info (jka-compr-get-compression-info buffer-file-name)))
- (when info
- (let ((basename (file-name-nondirectory buffer-file-name))
- (args (jka-compr-info-uncompress-args info))
- (prog (jka-compr-info-uncompress-program info))
- (message (jka-compr-info-uncompress-message info))
- (err-file (jka-compr-make-temp-name)))
- (if message
- (message "%s %s..." message basename))
- (unwind-protect
- (unless (memq (apply 'call-process-region
- (point-min) (point-max)
- prog
- t (list t err-file) nil
- args)
- jka-compr-acceptable-retval-list)
- (jka-compr-error prog args basename message err-file))
- (jka-compr-delete-temp-file err-file)))))))
-
-(defun gnus-mime-copy-part (&optional handle)
+(defun gnus-mime-copy-part (&optional handle arg)
"Put the MIME part under point into a new buffer.
If `auto-compression-mode' is enabled, compressed files like .gz and .bz2
are decompressed."
- (interactive)
+ (interactive (list nil current-prefix-arg))
(gnus-article-check-buffer)
- (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
- (contents (and handle (mm-get-part handle)))
- (base (and handle
- (file-name-nondirectory
- (or
- (mail-content-type-get (mm-handle-type handle) 'name)
- (mail-content-type-get (mm-handle-disposition handle)
- 'filename)
- "*decoded*"))))
- (buffer (and base (generate-new-buffer base))))
- (when contents
- (switch-to-buffer buffer)
- (insert contents)
+ (unless handle
+ (setq handle (get-text-property (point) 'gnus-data)))
+ (when handle
+ (let ((filename (or (mail-content-type-get (mm-handle-type handle)
+ 'name)
+ (mail-content-type-get (mm-handle-disposition handle)
+ 'filename)))
+ contents dont-decode charset coding-system)
+ (mm-with-unibyte-buffer
+ (mm-insert-part handle)
+ (setq contents (or (condition-case nil
+ (mm-decompress-buffer filename nil 'sig)
+ (error
+ (setq dont-decode t)
+ nil))
+ (buffer-string))))
+ (setq filename (cond (filename (file-name-nondirectory filename))
+ (dont-decode "*raw data*")
+ (t "*decoded*")))
+ (cond
+ (dont-decode)
+ ((not arg)
+ (unless (setq charset (mail-content-type-get
+ (mm-handle-type handle) 'charset))
+ (unless (setq coding-system (mm-with-unibyte-buffer
+ (insert contents)
+ (mm-find-buffer-file-coding-system)))
+ (setq charset gnus-newsgroup-charset))))
+ ((numberp arg)
+ (setq charset (or (cdr (assq arg
+ gnus-summary-show-article-charset-alist))
+ (mm-read-coding-system "Charset: ")))))
+ (switch-to-buffer (generate-new-buffer filename))
+ (if (or coding-system
+ (and charset
+ (setq coding-system (mm-charset-to-coding-system charset))
+ (not (eq charset 'ascii))))
+ (progn
+ (mm-enable-multibyte)
+ (insert (mm-decode-coding-string contents coding-system))
+ (setq buffer-file-coding-system
+ (if (boundp 'last-coding-system-used)
+ (symbol-value 'last-coding-system-used)
+ coding-system)))
+ (mm-disable-multibyte)
+ (insert contents)
+ (setq buffer-file-coding-system mm-binary-coding-system))
;; We do it this way to make `normal-mode' set the appropriate mode.
(unwind-protect
(progn
- (setq buffer-file-name (expand-file-name base))
- (gnus-mime-jka-compr-maybe-uncompress)
+ (setq buffer-file-name (expand-file-name filename))
(normal-mode))
(setq buffer-file-name nil))
(goto-char (point-min)))))
@@ -4570,22 +4871,37 @@ are decompressed."
(ps-despool filename)))))
(defun gnus-mime-inline-part (&optional handle arg)
- "Insert the MIME part under point into the current buffer."
+ "Insert the MIME part under point into the current buffer.
+Compressed files like .gz and .bz2 are decompressed."
(interactive (list nil current-prefix-arg))
(gnus-article-check-buffer)
- (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
- contents charset
- (b (point))
- (inhibit-read-only t))
- (when handle
+ (unless handle
+ (setq handle (get-text-property (point) 'gnus-data)))
+ (when handle
+ (let ((b (point))
+ (inhibit-read-only t)
+ contents charset coding-system)
(if (and (not arg) (mm-handle-undisplayer handle))
(mm-remove-part handle)
- (setq contents (mm-get-part handle))
+ (mm-with-unibyte-buffer
+ (mm-insert-part handle)
+ (setq contents
+ (or (mm-decompress-buffer
+ (or (mail-content-type-get (mm-handle-type handle)
+ 'name)
+ (mail-content-type-get (mm-handle-disposition handle)
+ 'filename))
+ nil t)
+ (buffer-string))))
(cond
((not arg)
- (setq charset (or (mail-content-type-get
- (mm-handle-type handle) 'charset)
- gnus-newsgroup-charset)))
+ (unless (setq charset (mail-content-type-get
+ (mm-handle-type handle) 'charset))
+ (unless (setq coding-system
+ (mm-with-unibyte-buffer
+ (insert contents)
+ (mm-find-buffer-file-coding-system)))
+ (setq charset gnus-newsgroup-charset))))
((numberp arg)
(if (mm-handle-undisplayer handle)
(mm-remove-part handle))
@@ -4599,11 +4915,12 @@ are decompressed."
(forward-line 2)
(mm-insert-inline
handle
- (if (and charset
- (setq charset (mm-charset-to-coding-system
- charset))
- (not (eq charset 'ascii)))
- (mm-decode-coding-string contents charset)
+ (if (or coding-system
+ (and charset
+ (setq coding-system
+ (mm-charset-to-coding-system charset))
+ (not (eq coding-system 'ascii))))
+ (mm-decode-coding-string contents coding-system)
(mm-string-to-multibyte contents)))
(goto-char b)))))
@@ -4632,12 +4949,15 @@ specified charset."
(gnus-newsgroup-ignored-charsets 'gnus-all)
gnus-newsgroup-charset form preferred parts)
(when handle
- (if (mm-handle-undisplayer handle)
- (mm-remove-part handle))
- (when fun
- (setq gnus-newsgroup-charset
- (or (cdr (assq arg gnus-summary-show-article-charset-alist))
- (mm-read-coding-system "Charset: ")))
+ (when (prog1
+ (and fun
+ (setq gnus-newsgroup-charset
+ (or (cdr (assq
+ arg
+ gnus-summary-show-article-charset-alist))
+ (mm-read-coding-system "Charset: "))))
+ (if (mm-handle-undisplayer handle)
+ (mm-remove-part handle)))
(gnus-mime-strip-charset-parameters handle)
(when (and (consp (setq form (cdr-safe fun)))
(setq form (ignore-errors
@@ -4710,64 +5030,152 @@ If no internal viewer is available, use an external viewer."
(if action-pair
(funcall (cdr action-pair)))))
-(defun gnus-article-part-wrapper (n function)
- (let ((window (get-buffer-window gnus-article-buffer 'visible))
- frame)
- (when window
- ;; It is necessary to select the article window so that
- ;; `gnus-article-goto-part' may really move the point.
- (setq frame (selected-frame))
- (gnus-select-frame-set-input-focus (window-frame window))
- (unwind-protect
- (save-window-excursion
- (select-window window)
- (when (> n (length gnus-article-mime-handle-alist))
- (error "No such part"))
- (gnus-article-goto-part n)
- (let ((handle (cdr (assq n gnus-article-mime-handle-alist))))
- (funcall function handle)))
- (gnus-select-frame-set-input-focus frame)))))
+(defun gnus-article-part-wrapper (n function &optional no-handle interactive)
+ "Call FUNCTION on MIME part N.
+Unless NO-HANDLE, call FUNCTION with N-th MIME handle as it's only argument.
+If INTERACTIVE, call FUNCTION interactivly."
+ (let (window frame)
+ ;; Check whether the article is displayed.
+ (unless (and (gnus-buffer-live-p gnus-article-buffer)
+ (setq window (get-buffer-window gnus-article-buffer t))
+ (frame-visible-p (setq frame (window-frame window))))
+ (error "No article is displayed"))
+ (with-current-buffer gnus-article-buffer
+ ;; Check whether the article displays the right contents.
+ (unless (with-current-buffer gnus-summary-buffer
+ (eq gnus-current-article (gnus-summary-article-number)))
+ (error "You should select the right article first"))
+ (if n
+ (setq n (prefix-numeric-value n))
+ (let ((pt (point)))
+ (setq n (or (get-text-property pt 'gnus-part)
+ (and (not (bobp))
+ (get-text-property (1- pt) 'gnus-part))
+ (get-text-property (prog2
+ (forward-line 1)
+ (point)
+ (goto-char pt))
+ 'gnus-part)
+ (get-text-property
+ (or (and (setq pt (previous-single-property-change
+ pt 'gnus-part))
+ (1- pt))
+ (next-single-property-change (point) 'gnus-part)
+ (point))
+ 'gnus-part)
+ 1))))
+ ;; Check whether the specified part exists.
+ (when (> n (length gnus-article-mime-handle-alist))
+ (error "No such part")))
+ (unless
+ (progn
+ ;; To select the window is needed so that the cursor
+ ;; might be visible on the MIME button.
+ (select-window (prog1
+ window
+ (setq window (selected-window))
+ ;; Article may be displayed in the other frame.
+ (gnus-select-frame-set-input-focus
+ (prog1
+ frame
+ (setq frame (selected-frame))))))
+ (when (gnus-article-goto-part n)
+ ;; We point the cursor and the arrow at the MIME button
+ ;; when the `function' prompt the user for something.
+ (let ((cursor-in-non-selected-windows t)
+ (overlay-arrow-string "=>")
+ (overlay-arrow-position (point-marker)))
+ (unwind-protect
+ (cond
+ ((and no-handle interactive)
+ (call-interactively function))
+ (no-handle
+ (funcall function))
+ (interactive
+ (call-interactively
+ function
+ (cdr (assq n gnus-article-mime-handle-alist))))
+ (t
+ (funcall function
+ (cdr (assq n gnus-article-mime-handle-alist)))))
+ (set-marker overlay-arrow-position nil)
+ (unless gnus-auto-select-part
+ (gnus-select-frame-set-input-focus frame)
+ (select-window window))))
+ t))
+ (if gnus-inhibit-mime-unbuttonizing
+ ;; This is the default though the program shouldn't reach here.
+ (error "No such part")
+ ;; The part which doesn't have the MIME button is selected.
+ ;; So, we display all the buttons and redo it.
+ (let ((gnus-inhibit-mime-unbuttonizing t))
+ (gnus-summary-show-article)
+ (gnus-article-part-wrapper n function no-handle))))))
(defun gnus-article-pipe-part (n)
"Pipe MIME part N, which is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'mm-pipe-part))
(defun gnus-article-save-part (n)
"Save MIME part N, which is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'mm-save-part))
(defun gnus-article-interactively-view-part (n)
"View MIME part N interactively, which is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'mm-interactively-view-part))
(defun gnus-article-copy-part (n)
"Copy MIME part N, which is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'gnus-mime-copy-part))
(defun gnus-article-view-part-as-charset (n)
"View MIME part N using a specified charset.
N is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'gnus-mime-view-part-as-charset))
(defun gnus-article-view-part-externally (n)
"View MIME part N externally, which is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'gnus-mime-view-part-externally))
(defun gnus-article-inline-part (n)
"Inline MIME part N, which is the numerical prefix."
- (interactive "p")
+ (interactive "P")
(gnus-article-part-wrapper n 'gnus-mime-inline-part))
+(defun gnus-article-save-part-and-strip (n)
+ "Save MIME part N and replace it with an external body.
+N is the numerical prefix."
+ (interactive "P")
+ (gnus-article-part-wrapper n 'gnus-mime-save-part-and-strip t))
+
+(defun gnus-article-replace-part (n)
+ "Replace MIME part N with an external body.
+N is the numerical prefix."
+ (interactive "P")
+ (gnus-article-part-wrapper n 'gnus-mime-replace-part t t))
+
+(defun gnus-article-delete-part (n)
+ "Delete MIME part N and add some information about the removed part.
+N is the numerical prefix."
+ (interactive "P")
+ (gnus-article-part-wrapper n 'gnus-mime-delete-part t))
+
+(defun gnus-article-view-part-as-type (n)
+ "Choose a MIME media type, and view part N as such.
+N is the numerical prefix."
+ (interactive "P")
+ (gnus-article-part-wrapper n 'gnus-mime-view-part-as-type t))
+
(defun gnus-article-mime-match-handle-first (condition)
(if condition
- (let ((alist gnus-article-mime-handle-alist) ihandle n)
- (while (setq ihandle (pop alist))
+ (let (n)
+ (dolist (ihandle gnus-article-mime-handle-alist)
(if (and (cond
((functionp condition)
(funcall condition (cdr ihandle)))
@@ -4787,8 +5195,7 @@ N is the numerical prefix."
(defun gnus-article-view-part (&optional n)
"View MIME part N, which is the numerical prefix."
(interactive "P")
- (save-current-buffer
- (set-buffer gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
(or (numberp n) (setq n (gnus-article-mime-match-handle-first
gnus-article-mime-match-handle-function)))
(when (> n (length gnus-article-mime-handle-alist))
@@ -4816,8 +5223,7 @@ N is the numerical prefix."
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
(if (gnus-buffer-live-p gnus-summary-buffer)
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
gnus-newsgroup-ignored-charsets)
nil)))
(save-excursion
@@ -4885,15 +5291,18 @@ N is the numerical prefix."
(setq b (point))
(gnus-eval-format
gnus-mime-button-line-format gnus-mime-button-line-format-alist
- `(,@(gnus-local-map-property gnus-mime-button-map)
- gnus-callback gnus-mm-display-part
- gnus-part ,gnus-tmp-id
- article-type annotation
- gnus-data ,handle))
+ `(keymap ,gnus-mime-button-map
+ gnus-callback gnus-mm-display-part
+ gnus-part ,gnus-tmp-id
+ article-type annotation
+ gnus-data ,handle))
(setq e (if (bolp)
;; Exclude a newline.
(1- (point))
(point)))
+ (when gnus-article-button-face
+ (gnus-overlay-put (gnus-make-overlay b e nil t)
+ 'face gnus-article-button-face))
(widget-convert-button
'link b e
:mime-handle handle
@@ -5121,8 +5530,9 @@ If displaying \"text/html\" is discouraged \(see
(gnus-article-insert-newline)
(mm-insert-inline
handle
- (let ((charset (mail-content-type-get (mm-handle-type handle)
- 'charset)))
+ (let ((charset (or (mail-content-type-get (mm-handle-type handle)
+ 'charset)
+ (and (equal type "text/calendar") 'utf-8))))
(cond ((not charset)
(mm-string-as-multibyte (mm-get-part handle)))
((eq charset 'gnus-decoded)
@@ -5135,10 +5545,21 @@ If displaying \"text/html\" is discouraged \(see
(save-excursion
(save-restriction
(narrow-to-region beg (point))
- (gnus-treat-article
- nil id
- (gnus-article-mime-total-parts)
- (mm-handle-media-type handle)))))))))
+ (if (eq handle gnus-article-mime-handles)
+ ;; The format=flowed case.
+ (gnus-treat-article nil 1 1 (mm-handle-media-type handle))
+ ;; Don't count signature parts that are never displayed.
+ ;; The part number should be re-calculated supposing this
+ ;; might be a message/rfc822 part.
+ (let (handles)
+ (dolist (part gnus-article-mime-handles)
+ (unless (or (stringp part)
+ (equal (car (mm-handle-type part))
+ "application/pgp-signature"))
+ (push part handles)))
+ (gnus-treat-article
+ nil (length (memq handle handles)) (length handles)
+ (mm-handle-media-type handle)))))))))))
(defun gnus-unbuttonized-mime-type-p (type)
"Say whether TYPE is to be unbuttonized."
@@ -5195,7 +5616,7 @@ If displaying \"text/html\" is discouraged \(see
',gnus-article-mime-handle-alist))
(gnus-mime-display-alternative
',ihandles ',not-pref ',begend ,id))
- ,@(gnus-local-map-property gnus-mime-button-map)
+ keymap ,gnus-mime-button-map
,gnus-mouse-face-prop ,gnus-article-mouse-face
face ,gnus-article-button-face
gnus-part ,id
@@ -5219,7 +5640,7 @@ If displaying \"text/html\" is discouraged \(see
',gnus-article-mime-handle-alist))
(gnus-mime-display-alternative
',ihandles ',handle ',begend ,id))
- ,@(gnus-local-map-property gnus-mime-button-map)
+ keymap ,gnus-mime-button-map
,gnus-mouse-face-prop ,gnus-article-mouse-face
face ,gnus-article-button-face
gnus-part ,id
@@ -5234,8 +5655,8 @@ If displaying \"text/html\" is discouraged \(see
(gnus-display-mime preferred)
(let ((mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
- (save-excursion (set-buffer gnus-summary-buffer)
- gnus-newsgroup-ignored-charsets)))
+ (with-current-buffer gnus-summary-buffer
+ gnus-newsgroup-ignored-charsets)))
(mm-display-part preferred)
;; Do highlighting.
(save-excursion
@@ -5285,8 +5706,7 @@ is the string to use when it is inactive.")
(defun gnus-article-wash-status ()
"Return a string which display status of article washing."
- (save-excursion
- (set-buffer gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
(let ((cite (memq 'cite gnus-article-wash-types))
(headers (memq 'headers gnus-article-wash-types))
(boring (memq 'boring-headers gnus-article-wash-types))
@@ -5335,8 +5755,8 @@ is the string to use when it is inactive.")
"Hide unwanted headers if `gnus-have-all-headers' is nil.
Provided for backwards compatibility."
(when (and (or (not (gnus-buffer-live-p gnus-summary-buffer))
- (not (save-excursion (set-buffer gnus-summary-buffer)
- gnus-have-all-headers)))
+ (not (with-current-buffer gnus-summary-buffer
+ gnus-have-all-headers)))
(not gnus-inhibit-hiding))
(gnus-article-hide-headers)))
@@ -5471,10 +5891,16 @@ If end of article, return non-nil. Otherwise return nil.
Argument LINES specifies lines to be scrolled up."
(interactive "p")
(move-to-window-line -1)
- (if (save-excursion
- (end-of-line)
- (and (pos-visible-in-window-p) ;Not continuation line.
- (>= (1+ (point)) (point-max)))) ;Allow for trailing newline.
+ (if (and (not (and gnus-article-over-scroll
+ (> (count-lines (window-start) (point-max))
+ (+ (or lines (1- (window-height)))
+ (or (and (boundp 'scroll-margin)
+ (symbol-value 'scroll-margin))
+ 0)))))
+ (save-excursion
+ (end-of-line)
+ (and (pos-visible-in-window-p) ;Not continuation line.
+ (>= (1+ (point)) (point-max))))) ;Allow for trailing newline.
;; Nothing in this page.
(if (or (not gnus-page-broken)
(save-excursion
@@ -5502,9 +5928,7 @@ specifies."
(min (max 0 scroll-margin)
(max 1 (- (window-height)
(if mode-line-format 1 0)
- (if (and (boundp 'header-line-format)
- (symbol-value 'header-line-format))
- 1 0)))))))
+ (if header-line-format 1 0)))))))
(defun gnus-article-next-page-1 (lines)
(when (and (not (featurep 'xemacs))
@@ -5536,7 +5960,14 @@ Argument LINES specifies lines to be scrolled down."
(progn
(gnus-narrow-to-page -1) ;Go to previous page.
(goto-char (point-max))
- (recenter -1))
+ (recenter (if gnus-article-over-scroll
+ (if lines
+ (max (+ lines (or (and (boundp 'scroll-margin)
+ (symbol-value 'scroll-margin))
+ 0))
+ 3)
+ (- (window-height) 2))
+ -1)))
(prog1
(condition-case ()
(let ((scroll-in-place nil))
@@ -5567,9 +5998,9 @@ not have a face in `gnus-article-boring-faces'."
"Read article specified by message-id around point."
(interactive)
(save-excursion
- (re-search-backward "[ \t]\\|^" (gnus-point-at-bol) t)
- (re-search-forward "<?news:<?\\|<" (gnus-point-at-eol) t)
- (if (re-search-forward "[^@ ]+@[^ \t>]+" (gnus-point-at-eol) t)
+ (re-search-backward "[ \t]\\|^" (point-at-bol) t)
+ (re-search-forward "<?news:<?\\|<" (point-at-eol) t)
+ (if (re-search-forward "[^@ ]+@[^ \t>]+" (point-at-eol) t)
(let ((msg-id (concat "<" (match-string 0) ">")))
(set-buffer gnus-summary-buffer)
(gnus-summary-refer-article msg-id))
@@ -5641,64 +6072,94 @@ not have a face in `gnus-article-boring-faces'."
(message "")
- (if (or (member keys nosaves)
- (member keys nosave-but-article)
- (member keys nosave-in-article))
- (let (func)
- (save-window-excursion
- (pop-to-buffer gnus-article-current-summary)
- ;; We disable the pick minor mode commands.
- (let (gnus-pick-mode)
- (setq func (lookup-key (current-local-map) keys))))
- (if (or (not func)
- (numberp func))
- (ding)
- (unless (member keys nosave-in-article)
- (set-buffer gnus-article-current-summary))
- (call-interactively func)
- (setq new-sum-point (point)))
- (when (member keys nosave-but-article)
- (pop-to-buffer gnus-article-buffer)))
+ (cond
+ ((eq (aref keys (1- (length keys))) ?\C-h)
+ (with-current-buffer gnus-article-current-summary
+ (describe-bindings (substring keys 0 -1))))
+ ((or (member keys nosaves)
+ (member keys nosave-but-article)
+ (member keys nosave-in-article))
+ (let (func)
+ (save-window-excursion
+ (pop-to-buffer gnus-article-current-summary)
+ ;; We disable the pick minor mode commands.
+ (let (gnus-pick-mode)
+ (setq func (lookup-key (current-local-map) keys))))
+ (if (or (not func)
+ (numberp func))
+ (ding)
+ (unless (member keys nosave-in-article)
+ (set-buffer gnus-article-current-summary))
+ (call-interactively func)
+ (setq new-sum-point (point)))
+ (when (member keys nosave-but-article)
+ (pop-to-buffer gnus-article-buffer))))
+ (t
;; These commands should restore window configuration.
(let ((obuf (current-buffer))
(owin (current-window-configuration))
- (opoint (point))
- win func in-buffer selected new-sum-start new-sum-hscroll)
+ win func in-buffer selected new-sum-start new-sum-hscroll err)
(cond (not-restore-window
- (pop-to-buffer gnus-article-current-summary))
+ (pop-to-buffer gnus-article-current-summary)
+ (setq win (selected-window)))
((setq win (get-buffer-window gnus-article-current-summary))
(select-window win))
(t
- (switch-to-buffer gnus-article-current-summary 'norecord)))
+ (let ((summary-buffer gnus-article-current-summary))
+ (gnus-configure-windows 'article)
+ (unless (setq win (get-buffer-window summary-buffer 'visible))
+ (let ((gnus-buffer-configuration
+ '(article ((vertical 1.0
+ (summary 0.25 point)
+ (article 1.0))))))
+ (gnus-configure-windows 'article))
+ (setq win (get-buffer-window summary-buffer 'visible)))
+ (gnus-select-frame-set-input-focus (window-frame win))
+ (select-window win))))
(setq in-buffer (current-buffer))
;; We disable the pick minor mode commands.
(if (and (setq func (let (gnus-pick-mode)
(lookup-key (current-local-map) keys)))
- (functionp func))
+ (functionp func)
+ (condition-case code
+ (progn
+ (call-interactively func)
+ t)
+ (error
+ (setq err code)
+ nil)))
(progn
- (call-interactively func)
(when (eq win (selected-window))
(setq new-sum-point (point)
new-sum-start (window-start win)
new-sum-hscroll (window-hscroll win)))
- (when (eq in-buffer (current-buffer))
+ (when (or (eq in-buffer (current-buffer))
+ (when (eq obuf (current-buffer))
+ (set-buffer in-buffer)
+ t))
(setq selected (gnus-summary-select-article))
(set-buffer obuf)
(unless not-restore-window
(set-window-configuration owin))
- (when (eq selected 'old)
- (article-goto-body)
+ (when (and (eq selected 'old)
+ new-sum-point)
(set-window-start (get-buffer-window (current-buffer))
1)
(set-window-point (get-buffer-window (current-buffer))
- (point)))
+ (if (article-goto-body)
+ (1- (point))
+ (point))))
(when (and (not not-restore-window)
- new-sum-point)
+ new-sum-point
+ (with-current-buffer (window-buffer win)
+ (eq major-mode 'gnus-summary-mode)))
(set-window-point win new-sum-point)
(set-window-start win new-sum-start)
(set-window-hscroll win new-sum-hscroll))))
(set-window-configuration owin)
- (ding))))))
+ (if err
+ (signal (car err) (cdr err))
+ (ding))))))))
(defun gnus-article-describe-key (key)
"Display documentation of the function invoked by KEY. KEY is a string."
@@ -5749,7 +6210,7 @@ the entire article will be yanked."
(interactive "P")
(let ((article (cdr gnus-article-current))
contents)
- (if (not (gnus-mark-active-p))
+ (if (not (gnus-region-active-p))
(with-current-buffer gnus-summary-buffer
(gnus-summary-reply (list (list article)) wide))
(setq contents (buffer-substring (point) (mark t)))
@@ -5768,7 +6229,7 @@ the entire article will be yanked."
(interactive)
(let ((article (cdr gnus-article-current))
contents)
- (if (not (gnus-mark-active-p))
+ (if (not (gnus-region-active-p))
(with-current-buffer gnus-summary-buffer
(gnus-summary-followup (list (list article))))
(setq contents (buffer-substring (point) (mark t)))
@@ -5868,16 +6329,14 @@ If given a prefix, show the hidden text instead."
gnus-summary-buffer
(get-buffer gnus-summary-buffer)
(gnus-buffer-exists-p gnus-summary-buffer)
- (eq (cdr (save-excursion
- (set-buffer gnus-summary-buffer)
+ (eq (cdr (with-current-buffer gnus-summary-buffer
(assq article gnus-newsgroup-reads)))
gnus-canceled-mark))
nil)
;; We first check `gnus-original-article-buffer'.
((and (get-buffer gnus-original-article-buffer)
(numberp article)
- (save-excursion
- (set-buffer gnus-original-article-buffer)
+ (with-current-buffer gnus-original-article-buffer
(and (equal (car gnus-original-article) group)
(eq (cdr gnus-original-article) article))))
(insert-buffer-substring gnus-original-article-buffer)
@@ -5995,7 +6454,6 @@ If given a prefix, show the hidden text instead."
(defvar gnus-article-edit-done-function nil)
(defvar gnus-article-edit-mode-map nil)
-(defvar gnus-article-edit-mode nil)
;; Should we be using derived.el for this?
(unless gnus-article-edit-mode-map
@@ -6095,7 +6553,7 @@ groups."
,(or (mail-header-references gnus-current-headers) "")
,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight))))
-(defun gnus-article-edit-article (start-func exit-func)
+(defun gnus-article-edit-article (start-func exit-func &optional quiet)
"Start editing the contents of the current article buffer."
(let ((winconf (current-window-configuration)))
(set-buffer gnus-article-buffer)
@@ -6108,7 +6566,8 @@ groups."
(gnus-configure-windows 'edit-article)
(setq gnus-article-edit-done-function exit-func)
(setq gnus-prev-winconf winconf)
- (gnus-message 6 "C-c C-c to end edits")))
+ (unless quiet
+ (gnus-message 6 "C-c C-c to end edits"))))
(defun gnus-article-edit-done (&optional arg)
"Update the article edits and exit."
@@ -6135,7 +6594,7 @@ groups."
(car gnus-article-current) (cdr gnus-article-current)))
;; We remove all text props from the article buffer.
(kill-all-local-variables)
- (gnus-set-text-properties (point-min) (point-max) nil)
+ (set-text-properties (point-min) (point-max) nil)
(gnus-article-mode)
(set-window-configuration winconf)
(set-buffer buf)
@@ -6183,9 +6642,24 @@ groups."
;;; Internal Variables:
(defcustom gnus-button-url-regexp
- (if (string-match "[[:digit:]]" "1") ;; support POSIX?
- "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?[-a-z0-9_=!?#$@~%&*+\\/:;.,[:word:]]+[-a-z0-9_=#$@~%&*+\\/[:word:]]\\)"
- "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)\\(//[-a-z0-9_.]+:[0-9]*\\)?\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)\\)")
+ (concat
+ "\\b\\(\\(www\\.\\|\\(s?https?\\|ftp\\|file\\|gopher\\|"
+ "nntp\\|news\\|telnet\\|wais\\|mailto\\|info\\):\\)"
+ "\\(//[-a-z0-9_.]+:[0-9]*\\)?"
+ (if (string-match "[[:digit:]]" "1") ;; Support POSIX?
+ (let ((chars "-a-z0-9_=#$@~%&*+\\/[:word:]")
+ (punct "!?:;.,"))
+ (concat
+ "\\(?:"
+ ;; Match paired parentheses, e.g. in Wikipedia URLs:
+ "[" chars punct "]+" "(" "[" chars punct "]+" "[" chars "]*)" "[" chars "]"
+ "\\|"
+ "[" chars punct "]+" "[" chars "]"
+ "\\)"))
+ (concat ;; XEmacs 21.4 doesn't support POSIX.
+ "\\([-a-z0-9_=!?#$@~%&*+\\/:;.,]\\|\\w\\)+"
+ "\\([-a-z0-9_=#$@~%&*+\\/]\\|\\w\\)"))
+ "\\)")
"Regular expression that matches URLs."
:group 'gnus-article-buttons
:type 'regexp)
@@ -6314,6 +6788,7 @@ must return `mid', `mail', `invalid' or `ask'."
(-20.0 . "\\.fsf@") ;; Gnus
(-20.0 . "^slrn")
(-20.0 . "^Pine")
+ (-20.0 . "^alpine\\.")
(-20.0 . "_-_") ;; Subject change in thread
;;
(-20.0 . "\\.ln@") ;; leafnode
@@ -6437,9 +6912,14 @@ address, `ask' if unsure and `invalid' if the string is invalid."
(gnus-url-mailto url-mailto))
(t (gnus-message 3 "Invalid string.")))))
-(defun gnus-button-handle-custom (url)
- "Follow a Custom URL."
- (customize-apropos (gnus-url-unhex-string url)))
+(defun gnus-button-handle-custom (fun arg)
+ "Call function FUN on argument ARG.
+Both FUN and ARG are supposed to be strings. ARG will be passed
+as a symbol to FUN."
+ (funcall (intern fun)
+ (if (string-match "^customize-apropos" fun)
+ arg
+ (intern arg))))
(defvar gnus-button-handle-describe-prefix "^\\(C-h\\|<?[Ff]1>?\\)")
@@ -6583,6 +7063,8 @@ positives are possible."
0 (>= gnus-button-message-level 0) gnus-button-message-id 2)
("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)"
2 (>= gnus-button-message-level 0) gnus-button-message-id 3)
+ ("\\b\\(mid\\|message-id\\):? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)"
+ 2 (>= gnus-button-message-level 0) gnus-button-message-id 3)
("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>"
0 (>= gnus-button-message-level 0) gnus-url-mailto 2)
;; RFC 2368 (The mailto URL scheme)
@@ -6619,10 +7101,8 @@ positives are possible."
;; Info links like `C-h i d m CC Mode RET'
0 (>= gnus-button-emacs-level 1) gnus-button-handle-info-keystrokes 2)
;; This is custom
- ("\\bcustom:\\(//\\)?\\([^'\">\n\t ]+\\)"
- 0 (>= gnus-button-emacs-level 5) gnus-button-handle-custom 2)
- ("M-x[ \t\n]customize-[^ ]+[ \t\n]RET[ \t\n]\\([^ ]+\\)[ \t\n]RET" 0
- (>= gnus-button-emacs-level 1) gnus-button-handle-custom 1)
+ ("M-x[ \t\n]\\(customize-[^ ]+\\)[ \t\n]RET[ \t\n]\\([^ ]+\\)[ \t\n]RET" 0
+ (>= gnus-button-emacs-level 1) gnus-button-handle-custom 1 2)
;; Emacs help commands
("M-x[ \t\n]+apropos[ \t\n]+RET[ \t\n]+\\([^ \t\n]+\\)[ \t\n]+RET"
;; regexp doesn't match arguments containing ` '.
@@ -6640,7 +7120,7 @@ positives are possible."
1 (>= gnus-button-emacs-level 8) gnus-button-handle-library 1)
("`\\([a-z][-a-z0-9]+\\.el\\)'"
1 (>= gnus-button-emacs-level 8) gnus-button-handle-library 1)
- ("`\\([a-z][a-z0-9]+-[a-z]+-[-a-z]+\\|\\(gnus\\|message\\)-[-a-z]+\\)'"
+ ("`\\([a-z][a-z0-9]+-[a-z0-9]+-[-a-z0-9]*[a-z]\\|\\(gnus\\|message\\)-[-a-z]+\\)'"
0 (>= gnus-button-emacs-level 8) gnus-button-handle-symbol 1)
("`\\([a-z][a-z0-9]+-[a-z]+\\)'"
0 (>= gnus-button-emacs-level 9) gnus-button-handle-symbol 1)
@@ -6657,13 +7137,10 @@ positives are possible."
;; here to determine where it ends.
1 (>= gnus-button-emacs-level 1) gnus-button-handle-describe-key 3)
;; This is how URLs _should_ be embedded in text (RFC 1738, RFC 2396)...
- ("<URL: *\\([^<>]*\\)>"
- 1 (>= gnus-button-browse-level 0) gnus-button-embedded-url 1)
- ;; RFC 2396 (2.4.3., delims) ...
- ("\"URL: *\\([^\"]*\\)\""
+ ("<URL: *\\([^\n<>]*\\)>"
1 (>= gnus-button-browse-level 0) gnus-button-embedded-url 1)
;; RFC 2396 (2.4.3., delims) ...
- ("\"URL: *\\([^\"]*\\)\""
+ ("\"URL: *\\([^\n\"]*\\)\""
1 (>= gnus-button-browse-level 0) gnus-button-embedded-url 1)
;; Raw URLs.
(gnus-button-url-regexp
@@ -6680,6 +7157,13 @@ positives are possible."
;; SoWWWAnchor(3iv), XSelectInput(3X11), X(1), X(7)
("\\b\\(\\(?:[a-z][-+_.:a-z0-9]+([1-9][X1a-z]*)\\)\\|\\b\\(?:X([1-9])\\)\\)\\W"
0 (>= gnus-button-man-level 5) gnus-button-handle-man 1)
+ ;; Recognizing patches to .el files. This is somewhat obscure,
+ ;; but considering the percentage of Gnus users who hack Emacs
+ ;; Lisp files...
+ ("^--- \\([^ .]+\\.el\\).*\n.*\n@@ -?\\([0-9]+\\)" 1
+ (>= gnus-button-message-level 4) gnus-button-patch 1 2)
+ ("^\\*\\*\\* \\([^ .]+\\.el\\).*\n.*\n\\*+\n\\*\\*\\* \\([0-9]+\\)" 1
+ (>= gnus-button-message-level 4) gnus-button-patch 1 2)
;; MID or mail: To avoid too many false positives we don't try to catch
;; all kind of allowed MIDs or mail addresses. Domain part must contain
;; at least one dot. TLD must contain two or three chars or be a know TLD
@@ -6723,6 +7207,8 @@ variable it the real callback function."
0 (>= gnus-button-browse-level 0) browse-url 0)
("^[^:]+:" gnus-button-url-regexp
0 (>= gnus-button-browse-level 0) browse-url 0)
+ ("^OpenPGP:.*url=" gnus-button-url-regexp
+ 0 (>= gnus-button-browse-level 0) gnus-button-openpgp 0)
("^[^:]+:" "\\bmailto:\\([-a-z.@_+0-9%=?&/]+\\)"
0 (>= gnus-button-message-level 0) gnus-url-mailto 1)
("^[^:]+:" "\\(<\\(url: \\)?\\(nntp\\|news\\):\\([^>\n ]*\\)>\\)"
@@ -6799,55 +7285,46 @@ do the highlighting. See the documentation for those functions."
(defun gnus-article-highlight-headers ()
"Highlight article headers as specified by `gnus-header-face-alist'."
(interactive)
- (save-excursion
- (set-buffer gnus-article-buffer)
- (save-restriction
- (let ((alist gnus-header-face-alist)
- (inhibit-read-only t)
- (case-fold-search t)
- (inhibit-point-motion-hooks t)
- entry regexp header-face field-face from hpoints fpoints)
- (article-narrow-to-head)
- (while (setq entry (pop alist))
- (goto-char (point-min))
- (setq regexp (concat "^\\("
- (if (string-equal "" (nth 0 entry))
- "[^\t ]"
- (nth 0 entry))
- "\\)")
- header-face (nth 1 entry)
- field-face (nth 2 entry))
- (while (and (re-search-forward regexp nil t)
- (not (eobp)))
- (beginning-of-line)
- (setq from (point))
- (unless (search-forward ":" nil t)
- (forward-char 1))
- (when (and header-face
- (not (memq (point) hpoints)))
- (push (point) hpoints)
- (gnus-put-text-property from (point) 'face header-face))
- (when (and field-face
- (not (memq (setq from (point)) fpoints)))
- (push from fpoints)
- (if (re-search-forward "^[^ \t]" nil t)
- (forward-char -2)
- (goto-char (point-max)))
- (gnus-put-text-property from (point) 'face field-face))))))))
+ (gnus-with-article-headers
+ (let (regexp header-face field-face from hpoints fpoints)
+ (dolist (entry gnus-header-face-alist)
+ (goto-char (point-min))
+ (setq regexp (concat "^\\("
+ (if (string-equal "" (nth 0 entry))
+ "[^\t ]"
+ (nth 0 entry))
+ "\\)")
+ header-face (nth 1 entry)
+ field-face (nth 2 entry))
+ (while (and (re-search-forward regexp nil t)
+ (not (eobp)))
+ (beginning-of-line)
+ (setq from (point))
+ (unless (search-forward ":" nil t)
+ (forward-char 1))
+ (when (and header-face
+ (not (memq (point) hpoints)))
+ (push (point) hpoints)
+ (gnus-put-text-property from (point) 'face header-face))
+ (when (and field-face
+ (not (memq (setq from (point)) fpoints)))
+ (push from fpoints)
+ (if (re-search-forward "^[^ \t]" nil t)
+ (forward-char -2)
+ (goto-char (point-max)))
+ (gnus-put-text-property from (point) 'face field-face)))))))
(defun gnus-article-highlight-signature ()
"Highlight the signature in an article.
It does this by highlighting everything after
`gnus-signature-separator' using the face `gnus-signature'."
(interactive)
- (save-excursion
- (set-buffer gnus-article-buffer)
- (let ((inhibit-read-only t)
- (inhibit-point-motion-hooks t))
+ (gnus-with-article-buffer
+ (let ((inhibit-point-motion-hooks t))
(save-restriction
(when (and gnus-signature-face
(gnus-article-narrow-to-signature))
- (gnus-overlay-put (gnus-make-overlay (point-min) (point-max))
+ (gnus-overlay-put (gnus-make-overlay (point-min) (point-max) nil t)
'face gnus-signature-face)
(widen)
(gnus-article-search-signature)
@@ -6865,10 +7342,8 @@ It does this by highlighting everything after
\"External references\" are things like Message-IDs and URLs, as
specified by `gnus-button-alist'."
(interactive (list 'force))
- (save-excursion
- (set-buffer gnus-article-buffer)
- (let ((inhibit-read-only t)
- (inhibit-point-motion-hooks t)
+ (gnus-with-article-buffer
+ (let ((inhibit-point-motion-hooks t)
(case-fold-search t)
(alist gnus-button-alist)
beg entry regexp)
@@ -6891,65 +7366,116 @@ specified by `gnus-button-alist'."
(setq regexp (eval (car entry)))
(goto-char beg)
(while (re-search-forward regexp nil t)
- (let* ((start (and entry (match-beginning (nth 1 entry))))
- (end (and entry (match-end (nth 1 entry))))
- (from (match-beginning 0)))
+ (let ((start (match-beginning (nth 1 entry)))
+ (end (match-end (nth 1 entry)))
+ (from (match-beginning 0)))
(when (and (or (eq t (nth 2 entry))
(eval (nth 2 entry)))
(not (gnus-button-in-region-p
start end 'gnus-callback)))
;; That optional form returned non-nil, so we add the
;; button.
- (gnus-article-add-button
- start end 'gnus-button-push
- (car (push (set-marker (make-marker) from)
- gnus-button-marker-list))))))))))
+ (setq from (set-marker (make-marker) from))
+ (push from gnus-button-marker-list)
+ (unless (and (eq (car entry) 'gnus-button-url-regexp)
+ (gnus-article-extend-url-button from start end))
+ (gnus-article-add-button start end
+ 'gnus-button-push from)))))))))
+
+(defun gnus-article-extend-url-button (beg start end)
+ "Extend url button if url is folded into two or more lines.
+Return non-nil if button is extended. BEG is a marker that points to
+the beginning position of a text containing url. START and END are
+the endpoints of a url button before it is extended. The concatenated
+url is put as the `gnus-button-url' overlay property on the button."
+ (let ((opoint (point))
+ (points (list start end))
+ url delim regexp)
+ (prog1
+ (when (and (progn
+ (goto-char end)
+ (not (looking-at "[\t ]*[\">]")))
+ (progn
+ (goto-char start)
+ (string-match
+ "\\(?:\"\\|\\(<\\)\\)[\t ]*\\(?:url[\t ]*:[\t ]*\\)?\\'"
+ (buffer-substring (point-at-bol) start)))
+ (progn
+ (setq url (list (buffer-substring start end))
+ delim (if (match-beginning 1) ">" "\""))
+ (beginning-of-line)
+ (setq regexp (concat
+ (when (and (looking-at
+ message-cite-prefix-regexp)
+ (< (match-end 0) start))
+ (regexp-quote (match-string 0)))
+ "\
+\[\t ]*\\(?:\\([^\t\n \">]+\\)[\t ]*$\\|\\([^\t\n \">]*\\)[\t ]*"
+ delim "\\)"))
+ (while (progn
+ (forward-line 1)
+ (and (looking-at regexp)
+ (prog1
+ (match-beginning 1)
+ (push (or (match-string 2)
+ (match-string 1))
+ url)
+ (push (setq end (or (match-end 2)
+ (match-end 1)))
+ points)
+ (push (or (match-beginning 2)
+ (match-beginning 1))
+ points)))))
+ (match-beginning 2)))
+ (let (gnus-article-mouse-face widget-mouse-face)
+ (while points
+ (gnus-article-add-button (pop points) (pop points)
+ 'gnus-button-push beg)))
+ (let ((overlay (gnus-make-overlay start end)))
+ (gnus-overlay-put overlay 'evaporate t)
+ (gnus-overlay-put overlay 'gnus-button-url
+ (list (mapconcat 'identity (nreverse url) "")))
+ (when gnus-article-mouse-face
+ (gnus-overlay-put overlay 'mouse-face gnus-article-mouse-face)))
+ t)
+ (goto-char opoint))))
;; Add buttons to the head of an article.
(defun gnus-article-add-buttons-to-head ()
"Add buttons to the head of the article."
(interactive)
- (save-excursion
- (set-buffer gnus-article-buffer)
- (save-restriction
- (let ((inhibit-read-only t)
- (inhibit-point-motion-hooks t)
- (case-fold-search t)
- (alist gnus-header-button-alist)
- entry beg end)
- (article-narrow-to-head)
- (while alist
- ;; Each alist entry.
- (setq entry (car alist)
- alist (cdr alist))
- (goto-char (point-min))
- (while (re-search-forward (car entry) nil t)
- ;; Each header matching the entry.
- (setq beg (match-beginning 0))
- (setq end (or (and (re-search-forward "^[^ \t]" nil t)
- (match-beginning 0))
- (point-max)))
- (goto-char beg)
- (while (re-search-forward (eval (nth 1 entry)) end t)
- ;; Each match within a header.
- (let* ((entry (cdr entry))
- (start (match-beginning (nth 1 entry)))
- (end (match-end (nth 1 entry)))
- (form (nth 2 entry)))
- (goto-char (match-end 0))
- (when (eval form)
- (gnus-article-add-button
- start end (nth 3 entry)
- (buffer-substring (match-beginning (nth 4 entry))
- (match-end (nth 4 entry)))))))
- (goto-char end)))))))
+ (gnus-with-article-headers
+ (let (beg end)
+ (dolist (entry gnus-header-button-alist)
+ ;; Each alist entry.
+ (goto-char (point-min))
+ (while (re-search-forward (car entry) nil t)
+ ;; Each header matching the entry.
+ (setq beg (match-beginning 0))
+ (setq end (or (and (re-search-forward "^[^ \t]" nil t)
+ (match-beginning 0))
+ (point-max)))
+ (goto-char beg)
+ (while (re-search-forward (eval (nth 1 entry)) end t)
+ ;; Each match within a header.
+ (let* ((entry (cdr entry))
+ (start (match-beginning (nth 1 entry)))
+ (end (match-end (nth 1 entry)))
+ (form (nth 2 entry)))
+ (goto-char (match-end 0))
+ (when (eval form)
+ (gnus-article-add-button
+ start end (nth 3 entry)
+ (buffer-substring (match-beginning (nth 4 entry))
+ (match-end (nth 4 entry)))))))
+ (goto-char end))))))
;;; External functions:
(defun gnus-article-add-button (from to fun &optional data)
"Create a button between FROM and TO with callback FUN and data DATA."
(when gnus-article-button-face
- (gnus-overlay-put (gnus-make-overlay from to)
+ (gnus-overlay-put (gnus-make-overlay from to nil t)
'face gnus-article-button-face))
(gnus-add-text-properties
from to
@@ -6963,15 +7489,12 @@ specified by `gnus-button-alist'."
;;; Internal functions:
(defun gnus-article-set-globals ()
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
(gnus-set-global-variables)))
(defun gnus-signature-toggle (end)
- (save-excursion
- (set-buffer gnus-article-buffer)
- (let ((inhibit-read-only t)
- (inhibit-point-motion-hooks t))
+ (gnus-with-article-buffer
+ (let ((inhibit-point-motion-hooks t))
(if (text-property-any end (point-max) 'article-type 'signature)
(progn
(gnus-delete-wash-type 'signature)
@@ -7005,12 +7528,14 @@ specified by `gnus-button-alist'."
(let* ((entry (gnus-button-entry))
(inhibit-point-motion-hooks t)
(fun (nth 3 entry))
- (args (mapcar (lambda (group)
- (let ((string (match-string group)))
- (gnus-set-text-properties
- 0 (length string) nil string)
- string))
- (nthcdr 4 entry))))
+ (args (or (and (eq (car entry) 'gnus-button-url-regexp)
+ (get-char-property marker 'gnus-button-url))
+ (mapcar (lambda (group)
+ (let ((string (match-string group)))
+ (set-text-properties
+ 0 (length string) nil string)
+ string))
+ (nthcdr 4 entry)))))
(cond
((fboundp fun)
(apply fun args))
@@ -7068,6 +7593,15 @@ specified by `gnus-button-alist'."
(group
(gnus-button-fetch-group url)))))
+(defun gnus-button-patch (library line)
+ "Visit an Emacs Lisp library LIBRARY on line LINE."
+ (interactive)
+ (let ((file (locate-library (file-name-nondirectory library))))
+ (unless file
+ (error "Couldn't find library %s" library))
+ (find-file file)
+ (goto-line (string-to-number line))))
+
(defun gnus-button-handle-man (url)
"Fetch a man page."
(gnus-message 9 "`%s' `%s'" gnus-button-man-handler url)
@@ -7117,14 +7651,25 @@ specified by `gnus-button-alist'."
(Info-directory)
(Info-menu url))
+(defun gnus-button-openpgp (url)
+ "Retrieve and add an OpenPGP key given URL from an OpenPGP header."
+ (with-temp-buffer
+ (mm-url-insert-file-contents-external url)
+ (pgg-snarf-keys-region (point-min) (point-max))
+ (pgg-display-output-buffer nil nil nil)))
+
(defun gnus-button-message-id (message-id)
"Fetch MESSAGE-ID."
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
(gnus-summary-refer-article message-id)))
-(defun gnus-button-fetch-group (address)
+(defun gnus-button-fetch-group (address &rest ignore)
"Fetch GROUP specified by ADDRESS."
+ (when (string-match "\\`\\(nntp\\|news\\):\\(//\\)?\\(.*\\)\\'"
+ address)
+ ;; Allow to use `gnus-button-fetch-group' in `browse-url-browser-function'
+ ;; for nntp:// and news://
+ (setq address (match-string 3 address)))
(if (not (string-match "[:/]" address))
;; This is just a simple group url.
(gnus-group-read-ephemeral-group address gnus-select-method)
@@ -7200,9 +7745,6 @@ specified by `gnus-button-alist'."
(defvar gnus-prev-page-map
(let ((map (make-sparse-keymap)))
- (unless (>= emacs-major-version 21)
- ;; XEmacs doesn't care.
- (set-keymap-parent map gnus-article-mode-map))
(define-key map gnus-mouse-2 'gnus-button-prev-page)
(define-key map "\r" 'gnus-button-prev-page)
map))
@@ -7217,19 +7759,23 @@ specified by `gnus-button-alist'."
map))
(defun gnus-insert-prev-page-button ()
- (let ((b (point))
+ (let ((b (point)) e
(inhibit-read-only t))
(gnus-eval-format
gnus-prev-page-line-format nil
- `(,@(gnus-local-map-property gnus-prev-page-map)
- gnus-prev t
- gnus-callback gnus-article-button-prev-page
- article-type annotation))
+ `(keymap ,gnus-prev-page-map
+ gnus-prev t
+ gnus-callback gnus-article-button-prev-page
+ article-type annotation))
+ (setq e (if (bolp)
+ ;; Exclude a newline.
+ (1- (point))
+ (point)))
+ (when gnus-article-button-face
+ (gnus-overlay-put (gnus-make-overlay b e nil t)
+ 'face gnus-article-button-face))
(widget-convert-button
- 'link b (if (bolp)
- ;; Exclude a newline.
- (1- (point))
- (point))
+ 'link b e
:action 'gnus-button-prev-page
:button-keymap gnus-prev-page-map)))
@@ -7250,18 +7796,22 @@ specified by `gnus-button-alist'."
(select-window win)))
(defun gnus-insert-next-page-button ()
- (let ((b (point))
+ (let ((b (point)) e
(inhibit-read-only t))
(gnus-eval-format gnus-next-page-line-format nil
- `(,@(gnus-local-map-property gnus-next-page-map)
- gnus-next t
- gnus-callback gnus-article-button-next-page
- article-type annotation))
+ `(keymap ,gnus-next-page-map
+ gnus-next t
+ gnus-callback gnus-article-button-next-page
+ article-type annotation))
+ (setq e (if (bolp)
+ ;; Exclude a newline.
+ (1- (point))
+ (point)))
+ (when gnus-article-button-face
+ (gnus-overlay-put (gnus-make-overlay b e nil t)
+ 'face gnus-article-button-face))
(widget-convert-button
- 'link b (if (bolp)
- ;; Exclude a newline.
- (1- (point))
- (point))
+ 'link b e
:action 'gnus-button-next-page
:button-keymap gnus-next-page-map)))
@@ -7304,14 +7854,13 @@ For example:
(eq gnus-newsgroup-name
(car gnus-decode-header-methods-cache)))
(setq gnus-decode-header-methods-cache (list gnus-newsgroup-name))
- (mapcar (lambda (x)
- (if (symbolp x)
- (nconc gnus-decode-header-methods-cache (list x))
- (if (and gnus-newsgroup-name
- (string-match (car x) gnus-newsgroup-name))
- (nconc gnus-decode-header-methods-cache
- (list (cdr x))))))
- gnus-decode-header-methods))
+ (dolist (x gnus-decode-header-methods)
+ (if (symbolp x)
+ (nconc gnus-decode-header-methods-cache (list x))
+ (if (and gnus-newsgroup-name
+ (string-match (car x) gnus-newsgroup-name))
+ (nconc gnus-decode-header-methods-cache
+ (list (cdr x)))))))
(let ((xlist gnus-decode-header-methods-cache))
(pop xlist)
(save-restriction
@@ -7352,12 +7901,11 @@ For example:
(funcall (cadr elem)))))))
;; Dynamic variables.
-(eval-when-compile
- (defvar part-number)
- (defvar total-parts)
- (defvar type)
- (defvar condition)
- (defvar length))
+(defvar part-number)
+(defvar total-parts)
+(defvar type)
+(defvar condition)
+(defvar length)
(defun gnus-treat-predicate (val)
(cond
@@ -7387,6 +7935,8 @@ For example:
t)
((eq val 'head)
nil)
+ ((eq val 'first)
+ (eq part-number 1))
((eq val 'last)
(eq part-number total-parts))
((numberp val)
@@ -7487,14 +8037,51 @@ For example:
(?d gnus-tmp-details ?s)
(?D gnus-tmp-pressed-details ?s)))
+(defvar gnus-mime-security-button-commands
+ '((gnus-article-press-button "\r" "Show Detail")
+ (undefined "v")
+ (undefined "t")
+ (undefined "C")
+ (gnus-mime-security-save-part "o" "Save...")
+ (undefined "\C-o")
+ (undefined "r")
+ (undefined "d")
+ (undefined "c")
+ (undefined "i")
+ (undefined "E")
+ (undefined "e")
+ (undefined "p")
+ (gnus-mime-security-pipe-part "|" "Pipe To Command...")
+ (undefined ".")))
+
(defvar gnus-mime-security-button-map
(let ((map (make-sparse-keymap)))
- (unless (>= (string-to-number emacs-version) 21)
- (set-keymap-parent map gnus-article-mode-map))
(define-key map gnus-mouse-2 'gnus-article-push-button)
- (define-key map "\r" 'gnus-article-press-button)
+ (define-key map gnus-down-mouse-3 'gnus-mime-security-button-menu)
+ (dolist (c gnus-mime-security-button-commands)
+ (define-key map (cadr c) (car c)))
map))
+(easy-menu-define
+ gnus-mime-security-button-menu gnus-mime-security-button-map
+ "Security button menu."
+ `("Security Part"
+ ,@(delq nil
+ (mapcar (lambda (c)
+ (unless (eq (car c) 'undefined)
+ (vector (caddr c) (car c) :active t)))
+ gnus-mime-security-button-commands))))
+
+(defun gnus-mime-security-button-menu (event prefix)
+ "Construct a context-sensitive menu of security commands."
+ (interactive "e\nP")
+ (save-window-excursion
+ (let ((pos (event-start event)))
+ (select-window (posn-window pos))
+ (goto-char (posn-point pos))
+ (gnus-article-check-buffer)
+ (popup-menu gnus-mime-security-button-menu nil prefix))))
+
(defvar gnus-mime-security-details-buffer nil)
(defvar gnus-mime-security-button-pressed nil)
@@ -7508,18 +8095,15 @@ For example:
point (inhibit-read-only t))
(if region
(goto-char (car region)))
- (save-restriction
- (narrow-to-region (point) (point))
- (with-current-buffer (mm-handle-multipart-original-buffer handle)
- (let* ((mm-verify-option 'known)
- (mm-decrypt-option 'known)
- (nparts (mm-possibly-verify-or-decrypt (cdr handle) handle)))
- (unless (eq nparts (cdr handle))
- (mm-destroy-parts (cdr handle))
- (setcdr handle nparts))))
- (setq point (point))
- (gnus-mime-display-security handle)
- (goto-char (point-max)))
+ (setq point (point))
+ (with-current-buffer (mm-handle-multipart-original-buffer handle)
+ (let* ((mm-verify-option 'known)
+ (mm-decrypt-option 'known)
+ (nparts (mm-possibly-verify-or-decrypt (cdr handle) handle)))
+ (unless (eq nparts (cdr handle))
+ (mm-destroy-parts (cdr handle))
+ (setcdr handle nparts))))
+ (gnus-mime-display-security handle)
(when region
(delete-region (point) (cdr region))
(set-marker (car region) nil)
@@ -7597,7 +8181,7 @@ For example:
(gnus-eval-format
gnus-mime-security-button-line-format
gnus-mime-security-button-line-format-alist
- `(,@(gnus-local-map-property gnus-mime-security-button-map)
+ `(keymap ,gnus-mime-security-button-map
gnus-callback gnus-mime-security-press-button
gnus-line-format ,gnus-mime-security-button-line-format
gnus-mime-details ,gnus-mime-security-button-pressed
@@ -7607,6 +8191,9 @@ For example:
;; Exclude a newline.
(1- (point))
(point)))
+ (when gnus-article-button-face
+ (gnus-overlay-put (gnus-make-overlay b e nil t)
+ 'face gnus-article-button-face))
(widget-convert-button
'link b e
:mime-handle handle
@@ -7619,15 +8206,16 @@ For example:
(when (boundp 'help-echo-owns-message)
(setq help-echo-owns-message t))
(format
- "%S: show detail"
- (aref gnus-mouse-2 0))))))
+ "%S: show detail; %S: more options"
+ (aref gnus-mouse-2 0)
+ (aref gnus-down-mouse-3 0))))))
(defun gnus-mime-display-security (handle)
(save-restriction
(narrow-to-region (point) (point))
(unless (gnus-unbuttonized-mime-type-p (car handle))
(gnus-insert-mime-security-button handle))
- (gnus-mime-display-mixed (cdr handle))
+ (gnus-mime-display-part (cadr handle))
(unless (bolp)
(insert "\n"))
(unless (gnus-unbuttonized-mime-type-p (car handle))
@@ -7637,7 +8225,36 @@ For example:
(mm-set-handle-multipart-parameter
handle 'gnus-region
(cons (set-marker (make-marker) (point-min))
- (set-marker (make-marker) (point-max))))))
+ (set-marker (make-marker) (point-max))))
+ (goto-char (point-max))))
+
+(defun gnus-mime-security-run-function (function)
+ "Run FUNCTION with the security part under point."
+ (gnus-article-check-buffer)
+ (let ((data (get-text-property (point) 'gnus-data))
+ buffer handle)
+ (when (and (stringp (car-safe data))
+ (setq buffer (mm-handle-multipart-original-buffer data))
+ (setq handle (cadr data)))
+ (if (bufferp (mm-handle-buffer handle))
+ (progn
+ (setq handle (cons buffer (copy-sequence (cdr handle))))
+ (mm-handle-set-undisplayer handle nil))
+ (setq handle (mm-make-handle
+ buffer
+ (mm-handle-multipart-ctl-parameter handle 'protocol)
+ nil nil nil nil nil nil)))
+ (funcall function handle))))
+
+(defun gnus-mime-security-save-part ()
+ "Save the security part under point."
+ (interactive)
+ (gnus-mime-security-run-function 'mm-save-part))
+
+(defun gnus-mime-security-pipe-part ()
+ "Pipe the security part under point to a process."
+ (interactive)
+ (gnus-mime-security-run-function 'mm-pipe-part))
(gnus-ems-redefine)
diff --git a/lisp/gnus/gnus-async.el b/lisp/gnus/gnus-async.el
index a06724855c5..65189573da3 100644
--- a/lisp/gnus/gnus-async.el
+++ b/lisp/gnus/gnus-async.el
@@ -33,10 +33,6 @@
(require 'gnus-sum)
(require 'nntp)
-(eval-when-compile
- (when (featurep 'xemacs)
- (require 'timer-funcs)))
-
(defgroup gnus-asynchronous nil
"Support for asynchronous operations."
:group 'gnus)
@@ -274,28 +270,29 @@ It should return non-nil if the article is to be prefetched."
(nntp-server-buffer (current-buffer))
(nntp-have-messaged nil)
(tries 0))
- (condition-case nil
- ;; FIXME: we could stop waiting after some
- ;; timeout, but this is the wrong place to do it.
- ;; rather than checking time-spent-waiting, we
- ;; should check time-since-last-output, which
- ;; needs to be done in nntp.el.
- (while (eq article gnus-async-current-prefetch-article)
- (incf tries)
- (when (nntp-accept-process-output proc)
- (setq tries 0))
- (when (and (not nntp-have-messaged)
- (= tries 3))
- (gnus-message 5 "Waiting for async article...")
- (setq nntp-have-messaged t)))
- (quit
- ;; if the user interrupted on a slow/hung connection,
- ;; do something friendly.
- (when (> tries 3)
- (setq gnus-async-current-prefetch-article nil))
- (signal 'quit nil)))
- (when nntp-have-messaged
- (gnus-message 5 "")))))
+ (when proc
+ (condition-case nil
+ ;; FIXME: we could stop waiting after some
+ ;; timeout, but this is the wrong place to do it.
+ ;; rather than checking time-spent-waiting, we
+ ;; should check time-since-last-output, which
+ ;; needs to be done in nntp.el.
+ (while (eq article gnus-async-current-prefetch-article)
+ (incf tries)
+ (when (nntp-accept-process-output proc)
+ (setq tries 0))
+ (when (and (not nntp-have-messaged)
+ (= tries 3))
+ (gnus-message 5 "Waiting for async article...")
+ (setq nntp-have-messaged t)))
+ (quit
+ ;; if the user interrupted on a slow/hung connection,
+ ;; do something friendly.
+ (when (> tries 3)
+ (setq gnus-async-current-prefetch-article nil))
+ (signal 'quit nil)))
+ (when nntp-have-messaged
+ (gnus-message 5 ""))))))
(defun gnus-async-delete-prefetched-entry (entry)
"Delete ENTRY from buffer and alist."
@@ -311,13 +308,11 @@ It should return non-nil if the article is to be prefetched."
"Remove all articles belonging to GROUP from the prefetch buffer."
(when (and (gnus-group-asynchronous-p group)
(memq 'exit gnus-prefetched-article-deletion-strategy))
- (let ((alist gnus-async-article-alist))
- (save-excursion
- (gnus-async-set-buffer)
- (while alist
- (when (equal group (nth 3 (car alist)))
- (gnus-async-delete-prefetched-entry (car alist)))
- (pop alist))))))
+ (save-excursion
+ (gnus-async-set-buffer)
+ (dolist (entry gnus-async-article-alist)
+ (when (equal group (nth 3 entry))
+ (gnus-async-delete-prefetched-entry entry))))))
(defun gnus-async-prefetched-article-entry (group article)
"Return the entry for ARTICLE in GROUP if it has been prefetched."
diff --git a/lisp/gnus/gnus-bookmark.el b/lisp/gnus/gnus-bookmark.el
new file mode 100644
index 00000000000..1e76e3ac57b
--- /dev/null
+++ b/lisp/gnus/gnus-bookmark.el
@@ -0,0 +1,826 @@
+;;; gnus-bookmark.el --- Bookmarks in Gnus
+
+;; Copyright (C) 2006 Free Software Foundation, Inc.
+
+;; Author: Bastien Guerry <bzg AT altern DOT org>
+;; Keywords: news
+
+;; 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 3, 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:
+
+;; This file implements real bookmarks for Gnus, closely following the way
+;; `bookmark.el' handles bookmarks. Most of the code comes from
+;; `bookmark.el'.
+;;
+;; Set a Gnus bookmark:
+;; M-x `gnus-bookmark-set' from the summary buffer.
+;;
+;; Jump to a Gnus bookmark:
+;; M-x `gnus-bookmark-jump'.
+;;
+;; Display a list of bookmarks
+;; M-x `gnus-bookmark-bmenu-list'.
+;;
+
+;;; Todo:
+
+;; - add tags to bookmarks
+;; - don't write file each time a bookmark is created
+;; - better annotation interactive buffer
+;; - edit annotation in gnus-bookmark-bmenu
+;; - sort gnus-bookmark-buffer by author/subject/date/group/message-id
+;; - auto-bmk-name customizable format
+;; - renaming bookmarks in gnus-bookmark-bmenu-list
+;; - better (formatted string) display in bmenu-list
+
+;; - Integrate the `gnus-summary-*-bookmark' functionality
+;; - Initialize defcustoms from corresponding `bookmark.el' variables?
+
+;;; Code:
+
+(require 'gnus-sum)
+
+;; FIXME: should avoid using C-c (no?)
+;; (define-key gnus-summary-mode-map "\C-crm" 'gnus-bookmark-set)
+;; (define-key global-map "\C-crb" 'gnus-bookmark-jump)
+;; (define-key global-map "\C-crj" 'gnus-bookmark-jump)
+;; (define-key global-map "\C-crl" 'gnus-bookmark-bmenu-list)
+
+(defgroup gnus-bookmark nil
+ "Setting, annotation and jumping to Gnus bookmarks."
+ :group 'gnus)
+
+(defcustom gnus-bookmark-default-file
+ (cond
+ ;; Backward compatibility with previous versions:
+ ((file-exists-p "~/.gnus.bmk") "~/.gnus.bmk")
+ (t (nnheader-concat gnus-directory "bookmarks.el")))
+ "The default Gnus bookmarks file."
+ :type 'string
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-file-coding-system
+ (if (mm-coding-system-p 'iso-2022-7bit)
+ 'iso-2022-7bit)
+ "Coding system used for writing Gnus bookmark files."
+ :type '(symbol :tag "Coding system")
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-sort-flag t
+ "Non-nil means Gnus bookmarks are sorted by bookmark names.
+Otherwise they will be displayed in LIFO order (that is,
+most recently set ones come first, oldest ones come last)."
+ :type 'boolean
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-bmenu-toggle-infos t
+ "Non-nil means show details when listing Gnus bookmarks.
+List of details is defined in `gnus-bookmark-bookmark-inline-details'.
+This may result in truncated bookmark names. To disable this, put the
+following in your `.emacs' file:
+
+\(setq gnus-bookmark-bmenu-toggle-infos nil\)"
+ :type 'boolean
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-bmenu-file-column 30
+ "Column at which to display details in a buffer listing Gnus bookmarks.
+You can toggle whether details are shown with \\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-toggle-infos]."
+ :type 'integer
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-use-annotations nil
+ "If non-nil, ask for an annotation when setting a bookmark."
+ :type 'boolean
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-bookmark-inline-details '(author)
+ "Details to be shown with `gnus-bookmark-bmenu-toggle-infos'.
+The default value is \(subject\)."
+ :type '(list :tag "Gnus bookmark details"
+ (set :inline t
+ (const :tag "Author" author)
+ (const :tag "Subject" subject)
+ (const :tag "Date" date)
+ (const :tag "Group" group)
+ (const :tag "Message-id" message-id)))
+ :group 'gnus-bookmark)
+
+(defcustom gnus-bookmark-bookmark-details
+ '(author subject date group annotation)
+ "Details to be shown with `gnus-bookmark-bmenu-show-details'.
+The default value is \(author subject date group annotation\)."
+ :type '(list :tag "Gnus bookmark details"
+ (set :inline t
+ (const :tag "Author" author)
+ (const :tag "Subject" subject)
+ (const :tag "Date" date)
+ (const :tag "Group" group)
+ (const :tag "Message-id" message-id)
+ (const :tag "Annotation" annotation)))
+ :group 'gnus-bookmark)
+
+(defface gnus-bookmark-menu-heading
+ '((t (:inherit font-lock-type-face)))
+ "Face used to highlight the heading in Gnus bookmark menu buffers."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-bookmark)
+
+(defconst gnus-bookmark-end-of-version-stamp-marker
+ "-*- End Of Bookmark File Format Version Stamp -*-\n"
+ "This string marks the end of the version stamp in a Gnus bookmark file.")
+
+(defconst gnus-bookmark-file-format-version 0
+ "The current version of the format used by bookmark files.
+You should never need to change this.")
+
+(defvar gnus-bookmark-after-jump-hook nil
+ "Hook run after `gnus-bookmark-jump' jumps to a Gnus bookmark.")
+
+(defvar gnus-bookmark-alist ()
+ "Association list of Gnus bookmarks and their records.
+The format of the alist is
+
+ \(BMK1 BMK2 ...\)
+
+where each BMK is of the form
+
+\(NAME
+ \(group . GROUP\)
+ \(message-id . MESSAGE-ID\)
+ \(author . AUTHOR\)
+ \(date . DATE\)
+ \(subject . SUBJECT\)
+ \(annotation . ANNOTATION\)\)
+
+So the cdr of each bookmark is an alist too.")
+
+(defmacro gnus-bookmark-mouse-available-p ()
+ "Return non-nil if a mouse is available."
+ (if (featurep 'xemacs)
+ '(and (eq (device-class) 'color) (device-on-window-system-p))
+ '(and (display-color-p) (display-mouse-p))))
+
+(defun gnus-bookmark-remove-properties (string)
+ "Remove all text properties from STRING."
+ (set-text-properties 0 (length string) nil string)
+ string)
+
+;;;###autoload
+(defun gnus-bookmark-set ()
+ "Set a bookmark for this article."
+ (interactive)
+ (gnus-bookmark-maybe-load-default-file)
+ (if (or (not (eq major-mode 'gnus-summary-mode))
+ (not gnus-article-current))
+ (error "Please select an article in the Gnus summary buffer")
+ (let* ((group (car gnus-article-current))
+ (article (cdr gnus-article-current))
+ (header (gnus-summary-article-header article))
+ (author (mail-header-from header))
+ (message-id (mail-header-id header))
+ (date (mail-header-date header))
+ (subject (gnus-summary-subject-string))
+ (bmk-name (gnus-bookmark-set-bookmark-name group author subject))
+ ;; Maybe ask for annotation
+ (annotation
+ (if gnus-bookmark-use-annotations
+ (read-from-minibuffer
+ (format "Annotation for %s: " bmk-name)) "")))
+ ;; Set the bookmark list
+ (setq gnus-bookmark-alist
+ (cons
+ (list (gnus-bookmark-remove-properties bmk-name)
+ (gnus-bookmark-make-cell
+ group message-id author date subject annotation))
+ gnus-bookmark-alist))))
+ (gnus-bookmark-bmenu-surreptitiously-rebuild-list)
+ (gnus-bookmark-write-file))
+
+(defun gnus-bookmark-make-cell
+ (group message-id author date subject annotation)
+ "Return the record part of a new bookmark, given GROUP MESSAGE-ID AUTHOR DATE SUBJECT and ANNOTATION."
+ (let ((the-record
+ `((group . ,(gnus-bookmark-remove-properties group))
+ (message-id . ,(gnus-bookmark-remove-properties message-id))
+ (author . ,(gnus-bookmark-remove-properties author))
+ (date . ,(gnus-bookmark-remove-properties date))
+ (subject . ,(gnus-bookmark-remove-properties subject))
+ (annotation . ,(gnus-bookmark-remove-properties annotation)))))
+ the-record))
+
+(defun gnus-bookmark-set-bookmark-name (group author subject)
+ "Set bookmark name from GROUP AUTHOR and SUBJECT."
+ (let* ((subject (split-string subject))
+ (default-name-0 ;; Should be merged with -1?
+ (concat (car (nreverse (delete "" (split-string group "[\\.:]"))))
+ "-" (car (split-string author))
+ "-" (car subject) "-" (cadr subject)))
+ (default-name-1
+ ;; Strip "[]" chars from the bookmark name:
+ (gnus-replace-in-string default-name-0 "[]_[]" ""))
+ (name (read-from-minibuffer
+ (format "Set bookmark (%s): " default-name-1)
+ nil nil nil nil
+ default-name-1)))
+ (if (string-equal name "")
+ default-name-1
+ name)))
+
+(defun gnus-bookmark-write-file ()
+ "Write currently defined Gnus bookmarks into `gnus-bookmark-default-file'."
+ (interactive)
+ (save-excursion
+ (save-window-excursion
+ ;; Avoir warnings?
+ ;; (message "Saving Gnus bookmarks to file %s..." gnus-bookmark-default-file)
+ (set-buffer (get-buffer-create " *Gnus bookmarks*"))
+ (erase-buffer)
+ (gnus-bookmark-insert-file-format-version-stamp)
+ (pp gnus-bookmark-alist (current-buffer))
+ (condition-case nil
+ (let ((coding-system-for-write gnus-bookmark-file-coding-system))
+ (write-region (point-min) (point-max)
+ gnus-bookmark-default-file))
+ (file-error (message "Can't write %s"
+ gnus-bookmark-default-file)))
+ (kill-buffer (current-buffer))
+ (message
+ "Saving Gnus bookmarks to file %s...done"
+ gnus-bookmark-default-file))))
+
+(defun gnus-bookmark-insert-file-format-version-stamp ()
+ "Insert text indicating current version of Gnus bookmark file format."
+ (insert
+ (format ";;;; Gnus Bookmark Format Version %d %s;;;;\n"
+ gnus-bookmark-file-format-version
+ (if gnus-bookmark-file-coding-system
+ (concat "-*- coding: "
+ (symbol-name gnus-bookmark-file-coding-system)
+ "; -*- ")
+ "")))
+ (insert ";;; This format is meant to be slightly human-readable;\n"
+ ";;; nevertheless, you probably don't want to edit it.\n"
+ ";;; "
+ gnus-bookmark-end-of-version-stamp-marker))
+
+;;;###autoload
+(defun gnus-bookmark-jump (&optional bmk-name)
+ "Jump to a Gnus bookmark (BMK-NAME)."
+ (interactive)
+ (gnus-bookmark-maybe-load-default-file)
+ (let* ((bookmark (or bmk-name
+ (completing-read "Jump to bookmarked article: "
+ gnus-bookmark-alist)))
+ (bmk-cell (cadr (assoc bookmark gnus-bookmark-alist)))
+ (group (cdr (assoc 'group bmk-cell)))
+ (message-id (cdr (assoc 'message-id bmk-cell))))
+ (when group
+ (unless (get-buffer gnus-group-buffer)
+ (gnus-no-server))
+ (gnus-activate-group group)
+ (gnus-group-quick-select-group 0 group))
+ (if message-id
+ (or (gnus-summary-goto-article message-id nil 'force)
+ (if (fboundp 'gnus-summary-insert-cached-articles)
+ (progn
+ (gnus-summary-insert-cached-articles)
+ (gnus-summary-goto-article message-id nil 'force))
+ (message "Message could not be found."))))))
+
+(defvar gnus-bookmark-already-loaded nil)
+
+(defun gnus-bookmark-alist-from-buffer ()
+ "Return a `gnus-bookmark-alist' from the current buffer.
+The buffer must of course contain Gnus bookmark format information.
+Does not care from where in the buffer it is called, and does not
+affect point."
+ (save-excursion
+ (goto-char (point-min))
+ (if (search-forward
+ gnus-bookmark-end-of-version-stamp-marker nil t)
+ (read (current-buffer))
+ ;; Else no hope of getting information here.
+ (error "Not Gnus bookmark format"))))
+
+(defun gnus-bookmark-load (file)
+ "Load Gnus bookmarks from FILE (which must be in bookmark format)."
+ (interactive
+ (list (read-file-name
+ (format "Load Gnus bookmarks from: (%s) "
+ gnus-bookmark-default-file)
+ "~/" gnus-bookmark-default-file 'confirm)))
+ (setq file (expand-file-name file))
+ (if (file-readable-p file)
+ (save-excursion
+ (save-window-excursion
+ (set-buffer (let ((enable-local-variables nil))
+ (find-file-noselect file)))
+ (goto-char (point-min))
+ (let ((blist (gnus-bookmark-alist-from-buffer)))
+ (if (listp blist)
+ (progn (setq gnus-bookmark-already-loaded t)
+ (setq gnus-bookmark-alist blist))
+ (error "Not Gnus bookmark format")))))))
+
+(defun gnus-bookmark-maybe-load-default-file ()
+ "Maybe load Gnus bookmarks in `gnus-bookmark-alist'."
+ (and (not gnus-bookmark-already-loaded)
+ (null gnus-bookmark-alist)
+ (file-readable-p (expand-file-name gnus-bookmark-default-file))
+ (gnus-bookmark-load gnus-bookmark-default-file)))
+
+(defun gnus-bookmark-maybe-sort-alist ()
+ "Return the gnus-bookmark-alist for display.
+If the gnus-bookmark-sort-flag is non-nil, then return a sorted
+copy of the alist."
+ (when gnus-bookmark-sort-flag
+ (setq gnus-bookmark-alist
+ (sort (copy-alist gnus-bookmark-alist)
+ (function
+ (lambda (x y) (string-lessp (car x) (car y))))))))
+
+;;;###autoload
+(defun gnus-bookmark-bmenu-list ()
+ "Display a list of existing Gnus bookmarks.
+The list is displayed in a buffer named `*Gnus Bookmark List*'.
+The leftmost column displays a D if the bookmark is flagged for
+deletion, or > if it is flagged for displaying."
+ (interactive)
+ (gnus-bookmark-maybe-load-default-file)
+ (if (interactive-p)
+ (switch-to-buffer (get-buffer-create "*Gnus Bookmark List*"))
+ (set-buffer (get-buffer-create "*Gnus Bookmark List*")))
+ (let ((inhibit-read-only t)
+ alist name start end)
+ (erase-buffer)
+ (insert "% Gnus Bookmark\n- --------\n")
+ (add-text-properties (point-min) (point)
+ '(font-lock-face gnus-bookmark-menu-heading))
+ ;; sort before displaying
+ (gnus-bookmark-maybe-sort-alist)
+ ;; Display gnus bookmarks
+ (setq alist gnus-bookmark-alist)
+ (while alist
+ (setq name (gnus-bookmark-name-from-full-record (pop alist)))
+ ;; if a Gnus bookmark has an annotation, prepend a "*"
+ ;; in the list of bookmarks.
+ (insert (if (member (gnus-bookmark-get-annotation name) (list nil ""))
+ " "
+ " *"))
+ (if (gnus-bookmark-mouse-available-p)
+ (add-text-properties
+ (prog1
+ (point)
+ (insert name))
+ (let ((end (point)))
+ (prog2
+ (re-search-backward "[^ \t]")
+ (1+ (point))
+ (goto-char end)
+ (insert "\n")))
+ `(mouse-face highlight follow-link t
+ help-echo ,(format "%s: go to this article"
+ (aref gnus-mouse-2 0))))
+ (insert name "\n")))
+ (goto-char (point-min))
+ (forward-line 2)
+ (gnus-bookmark-bmenu-mode)
+ (if gnus-bookmark-bmenu-toggle-infos
+ (gnus-bookmark-bmenu-toggle-infos t))))
+
+(defun gnus-bookmark-bmenu-surreptitiously-rebuild-list ()
+ "Rebuild the Bookmark List if it exists.
+Don't affect the buffer ring order."
+ (if (get-buffer "*Gnus Bookmark List*")
+ (save-excursion
+ (save-window-excursion
+ (gnus-bookmark-bmenu-list)))))
+
+(defun gnus-bookmark-get-annotation (bookmark)
+ "Return the annotation of Gnus BOOKMARK, or nil if none."
+ (cdr (assq 'annotation (gnus-bookmark-get-bookmark-record bookmark))))
+
+(defun gnus-bookmark-get-bookmark (bookmark)
+ "Return the full entry for Gnus BOOKMARK in `gnus-bookmark-alist'.
+If BOOKMARK is not a string, return nil."
+ (when (stringp bookmark)
+ (assoc bookmark gnus-bookmark-alist)))
+
+(defun gnus-bookmark-get-bookmark-record (bookmark)
+ "Return the guts of the entry for Gnus BOOKMARK in `gnus-bookmark-alist'.
+That is, all information but the name."
+ (car (cdr (gnus-bookmark-get-bookmark bookmark))))
+
+(defun gnus-bookmark-name-from-full-record (full-record)
+ "Return name of FULL-RECORD \(an alist element instead of a string\)."
+ (car full-record))
+
+(defvar gnus-bookmark-bmenu-bookmark-column nil)
+(defvar gnus-bookmark-bmenu-hidden-bookmarks ())
+(defvar gnus-bookmark-bmenu-mode-map nil)
+
+(if gnus-bookmark-bmenu-mode-map
+ nil
+ (setq gnus-bookmark-bmenu-mode-map (make-keymap))
+ (suppress-keymap gnus-bookmark-bmenu-mode-map t)
+ (define-key gnus-bookmark-bmenu-mode-map "q" (if (fboundp 'quit-window)
+ 'quit-window
+ 'bury-buffer))
+ (define-key gnus-bookmark-bmenu-mode-map "\C-m" 'gnus-bookmark-bmenu-select)
+ (define-key gnus-bookmark-bmenu-mode-map "v" 'gnus-bookmark-bmenu-select)
+ (define-key gnus-bookmark-bmenu-mode-map "d" 'gnus-bookmark-bmenu-delete)
+ (define-key gnus-bookmark-bmenu-mode-map "k" 'gnus-bookmark-bmenu-delete)
+ (define-key gnus-bookmark-bmenu-mode-map "\C-d" 'gnus-bookmark-bmenu-delete-backwards)
+ (define-key gnus-bookmark-bmenu-mode-map "x" 'gnus-bookmark-bmenu-execute-deletions)
+ (define-key gnus-bookmark-bmenu-mode-map " " 'next-line)
+ (define-key gnus-bookmark-bmenu-mode-map "n" 'next-line)
+ (define-key gnus-bookmark-bmenu-mode-map "p" 'previous-line)
+ (define-key gnus-bookmark-bmenu-mode-map "\177" 'gnus-bookmark-bmenu-backup-unmark)
+ (define-key gnus-bookmark-bmenu-mode-map "?" 'describe-mode)
+ (define-key gnus-bookmark-bmenu-mode-map "u" 'gnus-bookmark-bmenu-unmark)
+ (define-key gnus-bookmark-bmenu-mode-map "m" 'gnus-bookmark-bmenu-mark)
+ (define-key gnus-bookmark-bmenu-mode-map "l" 'gnus-bookmark-bmenu-load)
+ (define-key gnus-bookmark-bmenu-mode-map "s" 'gnus-bookmark-bmenu-save)
+ (define-key gnus-bookmark-bmenu-mode-map "t" 'gnus-bookmark-bmenu-toggle-infos)
+ (define-key gnus-bookmark-bmenu-mode-map "a" 'gnus-bookmark-bmenu-show-details)
+ (define-key gnus-bookmark-bmenu-mode-map gnus-mouse-2
+ 'gnus-bookmark-bmenu-select-by-mouse))
+
+;; Bookmark Buffer Menu mode is suitable only for specially formatted
+;; data.
+(put 'gnus-bookmark-bmenu-mode 'mode-class 'special)
+
+;; Been to lazy to use gnus-bookmark-save...
+(defalias 'gnus-bookmark-bmenu-save 'gnus-bookmark-write-file)
+
+(defun gnus-bookmark-bmenu-mode ()
+ "Major mode for editing a list of Gnus bookmarks.
+Each line describes one of the bookmarks in Gnus.
+Letters do not insert themselves; instead, they are commands.
+Gnus bookmarks names preceded by a \"*\" have annotations.
+\\<gnus-bookmark-bmenu-mode-map>
+\\[gnus-bookmark-bmenu-mark] -- mark bookmark to be displayed.
+\\[gnus-bookmark-bmenu-select] -- select bookmark of line point is on.
+ Also show bookmarks marked using m in other windows.
+\\[gnus-bookmark-bmenu-toggle-infos] -- toggle displaying of details (they may obscure long bookmark names).
+\\[gnus-bookmark-bmenu-locate] -- display (in minibuffer) location of this bookmark.
+\\[gnus-bookmark-bmenu-rename] -- rename this bookmark \(prompts for new name\).
+\\[gnus-bookmark-bmenu-delete] -- mark this bookmark to be deleted, and move down.
+\\[gnus-bookmark-bmenu-delete-backwards] -- mark this bookmark to be deleted, and move up.
+\\[gnus-bookmark-bmenu-execute-deletions] -- delete bookmarks marked with `\\[gnus-bookmark-bmenu-delete]'.
+\\[gnus-bookmark-bmenu-load] -- load in a file of bookmarks (prompts for file.)
+\\[gnus-bookmark-bmenu-save] -- load in a file of bookmarks (prompts for file.)
+\\[gnus-bookmark-bmenu-unmark] -- remove all kinds of marks from current line.
+ With prefix argument, also move up one line.
+\\[gnus-bookmark-bmenu-backup-unmark] -- back up a line and remove marks.
+\\[gnus-bookmark-bmenu-show-details] -- show the annotation, if it exists, for the current bookmark
+ in another buffer.
+\\[gnus-bookmark-bmenu-show-all-annotations] -- show the annotations of all bookmarks in another buffer.
+\\[gnus-bookmark-bmenu-edit-annotation] -- edit the annotation for the current bookmark."
+ (kill-all-local-variables)
+ (use-local-map gnus-bookmark-bmenu-mode-map)
+ (setq truncate-lines t)
+ (setq buffer-read-only t)
+ (setq major-mode 'gnus-bookmark-bmenu-mode)
+ (setq mode-name "Bookmark Menu")
+ (gnus-run-mode-hooks 'gnus-bookmark-bmenu-mode-hook))
+
+;; avoid compilation warnings
+(defvar gnus-bookmark-bmenu-toggle-infos nil)
+
+(defun gnus-bookmark-bmenu-toggle-infos (&optional show)
+ "Toggle whether details are shown in the Gnus bookmark list.
+Optional argument SHOW means show them unconditionally."
+ (interactive)
+ (cond
+ (show
+ (setq gnus-bookmark-bmenu-toggle-infos nil)
+ (gnus-bookmark-bmenu-show-infos)
+ (setq gnus-bookmark-bmenu-toggle-infos t))
+ (gnus-bookmark-bmenu-toggle-infos
+ (gnus-bookmark-bmenu-hide-infos)
+ (setq gnus-bookmark-bmenu-toggle-infos nil))
+ (t
+ (gnus-bookmark-bmenu-show-infos)
+ (setq gnus-bookmark-bmenu-toggle-infos t))))
+
+(defun gnus-bookmark-bmenu-show-infos (&optional force)
+ "Show infos in bmenu, maybe FORCE display of infos."
+ (if (and (not force) gnus-bookmark-bmenu-toggle-infos)
+ nil ;already shown, so do nothing
+ (save-excursion
+ (save-window-excursion
+ (goto-char (point-min))
+ (forward-line 2)
+ (setq gnus-bookmark-bmenu-hidden-bookmarks ())
+ (let ((inhibit-read-only t))
+ (while (< (point) (point-max))
+ (let ((bmrk (gnus-bookmark-bmenu-bookmark)))
+ (setq gnus-bookmark-bmenu-hidden-bookmarks
+ (cons bmrk gnus-bookmark-bmenu-hidden-bookmarks))
+ (let ((start (save-excursion (end-of-line) (point))))
+ (move-to-column gnus-bookmark-bmenu-file-column t)
+ ;; Strip off `mouse-face' from the white spaces region.
+ (if (gnus-bookmark-mouse-available-p)
+ (remove-text-properties start (point)
+ '(mouse-face nil help-echo nil))))
+ (delete-region (point) (progn (end-of-line) (point)))
+ (insert " ")
+ ;; Pass the NO-HISTORY arg:
+ (gnus-bookmark-insert-details bmrk)
+ (forward-line 1))))))))
+
+(defun gnus-bookmark-insert-details (bmk-name)
+ "Insert the details of the article associated with BMK-NAME."
+ (let ((start (point)))
+ (prog1
+ (insert (gnus-bookmark-get-details
+ bmk-name
+ gnus-bookmark-bookmark-inline-details))
+ (if (gnus-bookmark-mouse-available-p)
+ (add-text-properties
+ start
+ (save-excursion (re-search-backward
+ "[^ \t]")
+ (1+ (point)))
+ `(mouse-face highlight
+ follow-link t
+ help-echo ,(format "%s: go to this article"
+ (aref gnus-mouse-2 0))))))))
+
+(defun gnus-bookmark-kill-line (&optional newline-too)
+ "Kill from point to end of line.
+If optional arg NEWLINE-TOO is non-nil, delete the newline too.
+Does not affect the kill ring."
+ (let ((eol (save-excursion (end-of-line) (point))))
+ (delete-region (point) eol)
+ (if (and newline-too (looking-at "\n"))
+ (delete-char 1))))
+
+(defun gnus-bookmark-get-details (bmk-name details-list)
+ "Get details for a Gnus BMK-NAME depending on DETAILS-LIST."
+ (let ((details (cadr (assoc bmk-name gnus-bookmark-alist))))
+ (mapconcat
+ (lambda (info)
+ (cdr (assoc info details)))
+ details-list " | ")))
+
+(defun gnus-bookmark-bmenu-hide-infos (&optional force)
+ "Hide infos in bmenu, maybe FORCE."
+ (if (and (not force) gnus-bookmark-bmenu-toggle-infos)
+ ;; nothing to hide if above is nil
+ (save-excursion
+ (save-window-excursion
+ (goto-char (point-min))
+ (forward-line 2)
+ (setq gnus-bookmark-bmenu-hidden-bookmarks
+ (nreverse gnus-bookmark-bmenu-hidden-bookmarks))
+ (save-excursion
+ (goto-char (point-min))
+ (search-forward "Gnus Bookmark")
+ (backward-word 2)
+ (setq gnus-bookmark-bmenu-bookmark-column (current-column)))
+ (save-excursion
+ (let ((inhibit-read-only t))
+ (while gnus-bookmark-bmenu-hidden-bookmarks
+ (move-to-column gnus-bookmark-bmenu-bookmark-column t)
+ (gnus-bookmark-kill-line)
+ (let ((start (point)))
+ (insert (car gnus-bookmark-bmenu-hidden-bookmarks))
+ (if (gnus-bookmark-mouse-available-p)
+ (add-text-properties
+ start
+ (save-excursion (re-search-backward
+ "[^ \t]")
+ (1+ (point)))
+ `(mouse-face highlight
+ follow-link t
+ help-echo
+ ,(format "%s: go to this bookmark in other window"
+ (aref gnus-mouse-2 0))))))
+ (setq gnus-bookmark-bmenu-hidden-bookmarks
+ (cdr gnus-bookmark-bmenu-hidden-bookmarks))
+ (forward-line 1))))))))
+
+(defun gnus-bookmark-bmenu-check-position ()
+ "Return non-nil if on a line with a bookmark.
+The actual value returned is gnus-bookmark-alist. Else
+reposition and try again, else return nil."
+ (cond ((< (count-lines (point-min) (point)) 2)
+ (goto-char (point-min))
+ (forward-line 2)
+ gnus-bookmark-alist)
+ ((and (bolp) (eobp))
+ (beginning-of-line 0)
+ gnus-bookmark-alist)
+ (t
+ gnus-bookmark-alist)))
+
+(defun gnus-bookmark-bmenu-bookmark ()
+ "Return a string which is bookmark of this line."
+ (if (gnus-bookmark-bmenu-check-position)
+ (save-excursion
+ (save-window-excursion
+ (goto-char (point-min))
+ (search-forward "Gnus Bookmark")
+ (backward-word 2)
+ (setq gnus-bookmark-bmenu-bookmark-column (current-column)))))
+ (if gnus-bookmark-bmenu-toggle-infos
+ (gnus-bookmark-bmenu-hide-infos))
+ (save-excursion
+ (save-window-excursion
+ (beginning-of-line)
+ (forward-char gnus-bookmark-bmenu-bookmark-column)
+ (prog1
+ (buffer-substring-no-properties (point)
+ (progn
+ (end-of-line)
+ (point)))
+ ;; well, this is certainly crystal-clear:
+ (if gnus-bookmark-bmenu-toggle-infos
+ (gnus-bookmark-bmenu-toggle-infos t))))))
+
+(defun gnus-bookmark-show-details (bookmark)
+ "Display the annotation for BOOKMARK in a buffer."
+ (let ((record (gnus-bookmark-get-bookmark-record bookmark))
+ (old-buf (current-buffer))
+ (details gnus-bookmark-bookmark-details)
+ detail)
+ (save-excursion
+ (pop-to-buffer (get-buffer-create "*Gnus Bookmark Annotation*") t)
+ (erase-buffer)
+ (while details
+ (setq detail (pop details))
+ (unless (equal (cdr (assoc detail record)) "")
+ (insert (symbol-name detail) ": " (cdr (assoc detail record)) "\n")))
+ (goto-char (point-min))
+ (pop-to-buffer old-buf))))
+
+(defun gnus-bookmark-bmenu-show-details ()
+ "Show the annotation for the current bookmark in another window."
+ (interactive)
+ (let ((bookmark (gnus-bookmark-bmenu-bookmark)))
+ (if (gnus-bookmark-bmenu-check-position)
+ (gnus-bookmark-show-details bookmark))))
+
+(defun gnus-bookmark-bmenu-mark ()
+ "Mark bookmark on this line to be displayed by \\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-select]."
+ (interactive)
+ (beginning-of-line)
+ (if (gnus-bookmark-bmenu-check-position)
+ (let ((inhibit-read-only t))
+ (delete-char 1)
+ (insert ?>)
+ (forward-line 1)
+ (gnus-bookmark-bmenu-check-position))))
+
+(defun gnus-bookmark-bmenu-unmark (&optional backup)
+ "Cancel all requested operations on bookmark on this line and move down.
+Optional BACKUP means move up."
+ (interactive "P")
+ (beginning-of-line)
+ (if (gnus-bookmark-bmenu-check-position)
+ (progn
+ (let ((inhibit-read-only t))
+ (delete-char 1)
+ ;; any flags to reset according to circumstances? How about a
+ ;; flag indicating whether this bookmark is being visited?
+ ;; well, we don't have this now, so maybe later.
+ (insert " "))
+ (forward-line (if backup -1 1))
+ (gnus-bookmark-bmenu-check-position))))
+
+(defun gnus-bookmark-bmenu-backup-unmark ()
+ "Move up and cancel all requested operations on bookmark on line above."
+ (interactive)
+ (forward-line -1)
+ (if (gnus-bookmark-bmenu-check-position)
+ (progn
+ (gnus-bookmark-bmenu-unmark)
+ (forward-line -1)
+ (gnus-bookmark-bmenu-check-position))))
+
+(defun gnus-bookmark-bmenu-delete ()
+ "Mark Gnus bookmark on this line to be deleted.
+To carry out the deletions that you've marked, use
+\\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-execute-deletions]."
+ (interactive)
+ (beginning-of-line)
+ (if (gnus-bookmark-bmenu-check-position)
+ (let ((inhibit-read-only t))
+ (delete-char 1)
+ (insert ?D)
+ (forward-line 1)
+ (gnus-bookmark-bmenu-check-position))))
+
+(defun gnus-bookmark-bmenu-delete-backwards ()
+ "Mark bookmark on this line to be deleted, then move up one line.
+To carry out the deletions that you've marked, use
+\\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-execute-deletions]."
+ (interactive)
+ (gnus-bookmark-bmenu-delete)
+ (forward-line -2)
+ (if (gnus-bookmark-bmenu-check-position)
+ (forward-line 1))
+ (gnus-bookmark-bmenu-check-position))
+
+(defun gnus-bookmark-bmenu-select ()
+ "Select this line's bookmark; also display bookmarks marked with `>'.
+You can mark bookmarks with the
+\\<gnus-bookmark-bmenu-mode-map>\\[gnus-bookmark-bmenu-mark]
+command."
+ (interactive)
+ (if (gnus-bookmark-bmenu-check-position)
+ (let ((bmrk (gnus-bookmark-bmenu-bookmark))
+ (menu (current-buffer)))
+ (goto-char (point-min))
+ (delete-other-windows)
+ (gnus-bookmark-jump bmrk)
+ (bury-buffer menu))))
+
+(defun gnus-bookmark-bmenu-select-by-mouse (event)
+ (interactive "e")
+ (mouse-set-point event)
+ (gnus-bookmark-bmenu-select))
+
+(defun gnus-bookmark-bmenu-load ()
+ "Load the Gnus bookmark file and rebuild the bookmark menu-buffer."
+ (interactive)
+ (if (gnus-bookmark-bmenu-check-position)
+ (save-excursion
+ (save-window-excursion
+ ;; This will call `gnus-bookmark-bmenu-list'
+ (call-interactively 'gnus-bookmark-load)))))
+
+(defun gnus-bookmark-bmenu-execute-deletions ()
+ "Delete Gnus bookmarks marked with \\<Buffer-menu-mode-map>\\[Buffer-menu-delete] commands."
+ (interactive)
+ (message "Deleting Gnus bookmarks...")
+ (let ((hide-em gnus-bookmark-bmenu-toggle-infos)
+ (o-point (point))
+ (o-str (save-excursion
+ (beginning-of-line)
+ (if (looking-at "^D")
+ nil
+ (buffer-substring
+ (point)
+ (progn (end-of-line) (point))))))
+ (o-col (current-column)))
+ (if hide-em (gnus-bookmark-bmenu-hide-infos))
+ (setq gnus-bookmark-bmenu-toggle-infos nil)
+ (goto-char (point-min))
+ (forward-line 1)
+ (while (re-search-forward "^D" (point-max) t)
+ (gnus-bookmark-delete (gnus-bookmark-bmenu-bookmark) t)) ; pass BATCH arg
+ (gnus-bookmark-bmenu-list)
+ (setq gnus-bookmark-bmenu-toggle-infos hide-em)
+ (if gnus-bookmark-bmenu-toggle-infos
+ (gnus-bookmark-bmenu-toggle-infos t))
+ (if o-str
+ (progn
+ (goto-char (point-min))
+ (search-forward o-str)
+ (beginning-of-line)
+ (forward-char o-col))
+ (goto-char o-point))
+ (beginning-of-line)
+ (gnus-bookmark-write-file)
+ (message "Deleting bookmarks...done")))
+
+(defun gnus-bookmark-delete (bookmark &optional batch)
+ "Delete BOOKMARK from the bookmark list.
+Removes only the first instance of a bookmark with that name. If
+there are one or more other bookmarks with the same name, they will
+not be deleted. Defaults to the \"current\" bookmark \(that is, the
+one most recently used in this file, if any\).
+Optional second arg BATCH means don't update the bookmark list buffer,
+probably because we were called from there."
+ (gnus-bookmark-maybe-load-default-file)
+ (let ((will-go (gnus-bookmark-get-bookmark bookmark)))
+ (setq gnus-bookmark-alist (delq will-go gnus-bookmark-alist)))
+ ;; Don't rebuild the list
+ (if batch
+ nil
+ (gnus-bookmark-bmenu-surreptitiously-rebuild-list)))
+
+(provide 'gnus-bookmark)
+
+;; arch-tag: 779df694-366f-46e8-84b2-1d0340e6f525
+;;; gnus-bookmark.el ends here
diff --git a/lisp/gnus/gnus-cache.el b/lisp/gnus/gnus-cache.el
index 581a8db3227..fecb0685858 100644
--- a/lisp/gnus/gnus-cache.el
+++ b/lisp/gnus/gnus-cache.el
@@ -30,11 +30,8 @@
(eval-when-compile (require 'cl))
(require 'gnus)
-(require 'gnus-int)
-(require 'gnus-range)
-(require 'gnus-start)
(eval-when-compile
- (if (not (fboundp 'gnus-agent-load-alist))
+ (unless (fboundp 'gnus-agent-load-alist)
(defun gnus-agent-load-alist (group)))
(require 'gnus-sum))
@@ -92,6 +89,7 @@ it's not cached."
(defvar gnus-cache-buffer nil)
(defvar gnus-cache-active-hashtb nil)
(defvar gnus-cache-active-altered nil)
+(defvar gnus-cache-total-fetched-hashtb nil)
(eval-and-compile
(autoload 'nnml-generate-nov-databases-1 "nnml")
@@ -133,16 +131,20 @@ it's not cached."
(let ((coding-system-for-write
gnus-cache-overview-coding-system))
(gnus-write-buffer overview-file))
- ;; Empty overview file, remove it
- (when (file-exists-p overview-file)
- (delete-file overview-file))
- ;; If possible, remove group's cache subdirectory.
- (condition-case nil
- ;; FIXME: we can detect the error type and warn the user
- ;; of any inconsistencies (articles w/o nov entries?).
- ;; for now, just be conservative...delete only if safe -- sj
- (delete-directory (file-name-directory overview-file))
- (error nil)))))
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ ;; Empty overview file, remove it
+ (when (file-exists-p overview-file)
+ (delete-file overview-file))
+ ;; If possible, remove group's cache subdirectory.
+ (condition-case nil
+ ;; FIXME: we can detect the error type and warn the user
+ ;; of any inconsistencies (articles w/o nov entries?).
+ ;; for now, just be conservative...delete only if safe -- sj
+ (delete-directory (file-name-directory overview-file))
+ (error))))
+
+ (gnus-cache-update-overview-total-fetched-for
+ (car gnus-cache-buffer) overview-file)))
;; Kill the buffer -- it's either unmodified or saved.
(gnus-kill-buffer buffer)
(setq gnus-cache-buffer nil))))
@@ -152,7 +154,9 @@ it's not cached."
(when (and (or force (not (eq gnus-use-cache 'passive)))
(numberp article)
(> article 0)) ; This might be a dummy article.
- (let ((number article) file headers)
+ (let ((number article)
+ file headers lines-chars
+ (file-name-coding-system nnmail-pathname-coding-system))
;; If this is a virtual group, we find the real group.
(when (gnus-virtual-group-p group)
(let ((result (nnvirtual-find-group-art
@@ -180,10 +184,14 @@ it's not cached."
(gnus-request-article-this-buffer number group))
(when (> (buffer-size) 0)
(let ((coding-system-for-write gnus-cache-coding-system))
- (gnus-write-buffer file))
+ (gnus-write-buffer file)
+ (gnus-cache-update-file-total-fetched-for group file))
+ (setq lines-chars (nnheader-get-lines-and-char))
(nnheader-remove-body)
(setq headers (nnheader-parse-naked-head))
(mail-header-set-number headers number)
+ (mail-header-set-lines headers (car lines-chars))
+ (mail-header-set-chars headers (cadr lines-chars))
(gnus-cache-change-buffer group)
(set-buffer (cdr gnus-cache-buffer))
(goto-char (point-max))
@@ -236,12 +244,10 @@ it's not cached."
(defun gnus-cache-possibly-remove-articles-1 ()
"Possibly remove some of the removable articles."
(when (gnus-cache-fully-p gnus-newsgroup-name)
- (let ((articles gnus-cache-removable-articles)
- (cache-articles gnus-newsgroup-cached)
- article)
+ (let ((cache-articles gnus-newsgroup-cached))
(gnus-cache-change-buffer gnus-newsgroup-name)
- (while articles
- (when (memq (setq article (pop articles)) cache-articles)
+ (dolist (article gnus-cache-removable-articles)
+ (when (memq article cache-articles)
;; The article was in the cache, so we see whether we are
;; supposed to remove it from the cache.
(gnus-cache-possibly-remove-article
@@ -256,7 +262,8 @@ it's not cached."
(defun gnus-cache-request-article (article group)
"Retrieve ARTICLE in GROUP from the cache."
(let ((file (gnus-cache-file-name group article))
- (buffer-read-only nil))
+ (buffer-read-only nil)
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (file-exists-p file)
(erase-buffer)
(gnus-kill-all-overlays)
@@ -285,7 +292,8 @@ it's not cached."
(gnus-retrieve-headers articles group fetch-old))
(let ((uncached-articles (gnus-sorted-difference articles cached))
(cache-file (gnus-cache-file-name group ".overview"))
- type)
+ type
+ (file-name-coding-system nnmail-pathname-coding-system))
;; We first retrieve all the headers that we don't have in
;; the cache.
(let ((gnus-use-cache nil))
@@ -325,9 +333,8 @@ it's not cached."
If not given a prefix, use the process marked articles instead.
Returns the list of articles entered."
(interactive "P")
- (let ((articles (gnus-summary-work-articles n))
- article out)
- (while (setq article (pop articles))
+ (let (out)
+ (dolist (article (gnus-summary-work-articles n))
(gnus-summary-remove-process-mark article)
(if (natnump article)
(when (gnus-cache-possibly-enter-article
@@ -348,10 +355,8 @@ If not given a prefix, use the process marked articles instead.
Returns the list of articles removed."
(interactive "P")
(gnus-cache-change-buffer gnus-newsgroup-name)
- (let ((articles (gnus-summary-work-articles n))
- article out)
- (while articles
- (setq article (pop articles))
+ (let (out)
+ (dolist (article (gnus-summary-work-articles n))
(gnus-summary-remove-process-mark article)
(when (gnus-cache-possibly-remove-article article nil nil nil t)
(when gnus-newsgroup-agentized
@@ -407,7 +412,8 @@ Returns the list of articles removed."
" *gnus-cache-overview*"))))
;; Insert the contents of this group's cache overview.
(erase-buffer)
- (let ((file (gnus-cache-file-name group ".overview")))
+ (let ((file (gnus-cache-file-name group ".overview"))
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (file-exists-p file)
(nnheader-insert-file-contents file)))
;; We have a fresh (empty/just loaded) buffer,
@@ -421,8 +427,43 @@ Returns the list of articles removed."
(and unread (memq 'unread class))
(and (not unread) (not ticked) (not dormant) (memq 'read class))))
+(defvar gnus-cache-decoded-group-names nil
+ "Alist of original group names and decoded group names.
+Decoding is done according to `gnus-group-name-charset-method-alist'
+or `gnus-group-name-charset-group-alist'.")
+
+(defvar gnus-cache-unified-group-names nil
+ "Alist of unified decoded group names and original group names.
+A group name is decoded according to
+`gnus-group-name-charset-method-alist' or
+`gnus-group-name-charset-group-alist' first, and is encoded and
+decoded again according to `nnmail-pathname-coding-system',
+`file-name-coding-system', or `default-file-name-coding-system'.
+
+It is used when asking for a original group name from a cache
+directory name, in which non-ASCII characters might have been unified
+into the ones of a certain charset particularly if the `utf-8' coding
+system for example was used.")
+
+(defun gnus-cache-decoded-group-name (group)
+ "Return a decoded group name of GROUP."
+ (or (cdr (assoc group gnus-cache-decoded-group-names))
+ (let ((decoded (gnus-group-decoded-name group))
+ (coding (or nnmail-pathname-coding-system
+ (and (boundp 'file-name-coding-system)
+ file-name-coding-system)
+ (and (boundp 'default-file-name-coding-system)
+ default-file-name-coding-system))))
+ (push (cons group decoded) gnus-cache-decoded-group-names)
+ (push (cons (mm-decode-coding-string
+ (mm-encode-coding-string decoded coding)
+ coding)
+ group)
+ gnus-cache-unified-group-names)
+ decoded)))
+
(defun gnus-cache-file-name (group article)
- (setq group (gnus-group-decoded-name group))
+ (setq group (gnus-cache-decoded-group-name group))
(expand-file-name
(if (stringp article) article (int-to-string article))
(file-name-as-directory
@@ -455,7 +496,8 @@ Returns the list of articles removed."
"Possibly remove ARTICLE from the cache."
(let ((group gnus-newsgroup-name)
(number article)
- file)
+ file
+ (file-name-coding-system nnmail-pathname-coding-system))
;; If this is a virtual group, we find the real group.
(when (gnus-virtual-group-p group)
(let ((result (nnvirtual-find-group-art
@@ -468,13 +510,15 @@ Returns the list of articles removed."
(gnus-cache-member-of-class
gnus-cache-remove-articles ticked dormant unread)))
(save-excursion
+ (gnus-cache-update-file-total-fetched-for group file t)
(delete-file file)
+
(set-buffer (cdr gnus-cache-buffer))
(goto-char (point-min))
(when (or (looking-at (concat (int-to-string number) "\t"))
(search-forward (concat "\n" (int-to-string number) "\t")
(point-max) t))
- (gnus-delete-line)))
+ (gnus-delete-line)))
(unless (setq gnus-newsgroup-cached
(delq article gnus-newsgroup-cached))
(gnus-sethash gnus-newsgroup-name nil gnus-cache-active-hashtb)
@@ -485,7 +529,8 @@ Returns the list of articles removed."
(defun gnus-cache-articles-in-group (group)
"Return a sorted list of cached articles in GROUP."
(let ((dir (file-name-directory (gnus-cache-file-name group 1)))
- articles)
+ articles
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (file-exists-p dir)
(setq articles
(sort (mapcar (lambda (name) (string-to-number name))
@@ -508,8 +553,8 @@ Returns the list of articles removed."
(save-excursion
(set-buffer cache-buf)
(erase-buffer)
- (let ((coding-system-for-read
- gnus-cache-overview-coding-system))
+ (let ((coding-system-for-read gnus-cache-overview-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
(insert-file-contents
(or file (gnus-cache-file-name group ".overview"))))
(goto-char (point-min))
@@ -525,7 +570,7 @@ Returns the list of articles removed."
(set-buffer cache-buf)
(if (search-forward (concat "\n" (int-to-string (car cached)) "\t")
nil t)
- (setq beg (gnus-point-at-bol)
+ (setq beg (point-at-bol)
end (progn (end-of-line) (point)))
(setq beg nil))
(set-buffer nntp-server-buffer)
@@ -537,24 +582,23 @@ Returns the list of articles removed."
(defun gnus-cache-braid-heads (group cached)
(let ((cache-buf (gnus-get-buffer-create " *gnus-cache*")))
- (save-excursion
- (set-buffer cache-buf)
+ (with-current-buffer cache-buf
(erase-buffer))
(set-buffer nntp-server-buffer)
(goto-char (point-min))
- (while cached
+ (dolist (entry cached)
(while (and (not (eobp))
(looking-at "2.. +\\([0-9]+\\) ")
(< (progn (goto-char (match-beginning 1))
(read (current-buffer)))
- (car cached)))
+ entry))
(search-forward "\n.\n" nil 'move))
(beginning-of-line)
(set-buffer cache-buf)
(erase-buffer)
- (let ((coding-system-for-read
- gnus-cache-coding-system))
- (insert-file-contents (gnus-cache-file-name group (car cached))))
+ (let ((coding-system-for-read gnus-cache-coding-system)
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (insert-file-contents (gnus-cache-file-name group entry)))
(goto-char (point-min))
(insert "220 ")
(princ (car cached) (current-buffer))
@@ -564,8 +608,7 @@ Returns the list of articles removed."
(forward-char -1)
(insert ".")
(set-buffer nntp-server-buffer)
- (insert-buffer-substring cache-buf)
- (setq cached (cdr cached)))
+ (insert-buffer-substring cache-buf))
(kill-buffer cache-buf)))
;;;###autoload
@@ -661,6 +704,7 @@ If LOW, update the lower bound instead."
(interactive)
(let* ((top (null directory))
(directory (expand-file-name (or directory gnus-cache-directory)))
+ (file-name-coding-system nnmail-pathname-coding-system)
(files (directory-files directory 'full))
(group
(if top
@@ -686,16 +730,21 @@ If LOW, update the lower bound instead."
(push (pop files) alphs)))
;; If we have nums, then this is probably a valid group.
(when (setq nums (sort nums '<))
- (gnus-sethash group (cons (car nums) (gnus-last-element nums))
+ ;; Use non-decoded group name.
+ ;; FIXME: this is kind of a workaround. The active file should
+ ;; be updated at the time articles are cached. It will make
+ ;; `gnus-cache-unified-group-names' needless.
+ (gnus-sethash (or (cdr (assoc group gnus-cache-unified-group-names))
+ group)
+ (cons (car nums) (gnus-last-element nums))
gnus-cache-active-hashtb))
;; Go through all the other files.
- (while alphs
- (when (and (file-directory-p (car alphs))
+ (dolist (file alphs)
+ (when (and (file-directory-p file)
(not (string-match "^\\."
- (file-name-nondirectory (car alphs)))))
+ (file-name-nondirectory file))))
;; We descend directories.
- (gnus-cache-generate-active (car alphs)))
- (setq alphs (cdr alphs)))
+ (gnus-cache-generate-active file)))
;; Write the new active file.
(when top
(gnus-cache-write-active t)
@@ -708,6 +757,9 @@ If LOW, update the lower bound instead."
(gnus-cache-close)
(let ((nnml-generate-active-function 'identity))
(nnml-generate-nov-databases-1 dir))
+
+ (setq gnus-cache-total-fetched-hashtb nil)
+
(gnus-cache-open))
(defun gnus-cache-move-cache (dir)
@@ -736,9 +788,12 @@ files would corrupt Gnus when the cache was next enabled. It
depends on the caller to determine whether group renaming is
supported."
(let ((old-dir (gnus-cache-file-name old-group ""))
- (new-dir (gnus-cache-file-name new-group "")))
+ (new-dir (gnus-cache-file-name new-group ""))
+ (file-name-coding-system nnmail-pathname-coding-system))
(gnus-rename-file old-dir new-dir t))
+ (gnus-cache-rename-group-total-fetched-for old-group new-group)
+
(let ((no-save gnus-cache-active-hashtb))
(unless gnus-cache-active-hashtb
(gnus-cache-read-active))
@@ -762,9 +817,12 @@ Always updates the cache, even when disabled, as the old cache
files would corrupt gnus when the cache was next enabled.
Depends upon the caller to determine whether group deletion is
supported."
- (let ((dir (gnus-cache-file-name group "")))
+ (let ((dir (gnus-cache-file-name group ""))
+ (file-name-coding-system nnmail-pathname-coding-system))
(gnus-delete-directory dir))
+ (gnus-cache-delete-group-total-fetched-for group)
+
(let ((no-save gnus-cache-active-hashtb))
(unless gnus-cache-active-hashtb
(gnus-cache-read-active))
@@ -775,6 +833,85 @@ supported."
(setq gnus-cache-active-altered group-hash-value)
(gnus-cache-write-active group-hash-value)))))
+(defvar gnus-cache-inhibit-update-total-fetched-for nil)
+(defvar gnus-cache-need-update-total-fetched-for nil)
+
+(defmacro gnus-cache-with-refreshed-group (group &rest body)
+ `(prog1 (let ((gnus-cache-inhibit-update-total-fetched-for t))
+ ,@body)
+ (when (and gnus-cache-need-update-total-fetched-for
+ (not gnus-cache-inhibit-update-total-fetched-for))
+ (save-excursion
+ (set-buffer gnus-group-buffer)
+ (setq gnus-cache-need-update-total-fetched-for nil)
+ (gnus-group-update-group ,group t)))))
+
+(defun gnus-cache-update-file-total-fetched-for (group file &optional subtract)
+ (when gnus-cache-total-fetched-hashtb
+ (gnus-cache-with-refreshed-group
+ group
+ (let* ((entry (or (gnus-gethash group gnus-cache-total-fetched-hashtb)
+ (gnus-sethash group (make-vector 2 0)
+ gnus-cache-total-fetched-hashtb)))
+ size)
+
+ (if file
+ (setq size (or (nth 7 (file-attributes file)) 0))
+ (let* ((file-name-coding-system nnmail-pathname-coding-system)
+ (files (directory-files (gnus-cache-file-name group "")
+ t nil t))
+ file attrs)
+ (setq size 0.0)
+ (while (setq file (pop files))
+ (setq attrs (file-attributes file))
+ (unless (nth 0 attrs)
+ (incf size (float (nth 7 attrs)))))))
+
+ (setq gnus-cache-need-update-total-fetched-for t)
+
+ (incf (nth 1 entry) (if subtract (- size) size))))))
+
+(defun gnus-cache-update-overview-total-fetched-for (group file)
+ (when gnus-cache-total-fetched-hashtb
+ (gnus-cache-with-refreshed-group
+ group
+ (let* ((entry (or (gnus-gethash group gnus-cache-total-fetched-hashtb)
+ (gnus-sethash group (make-list 2 0)
+ gnus-cache-total-fetched-hashtb)))
+ (file-name-coding-system nnmail-pathname-coding-system)
+ (size (or (nth 7 (file-attributes
+ (or file
+ (gnus-cache-file-name group ".overview"))))
+ 0)))
+ (setq gnus-cache-need-update-total-fetched-for t)
+ (setf (nth 0 entry) size)))))
+
+(defun gnus-cache-rename-group-total-fetched-for (old-group new-group)
+ "Record of disk space used by OLD-GROUP now associated with NEW-GROUP."
+ (when gnus-cache-total-fetched-hashtb
+ (let ((entry (gnus-gethash old-group gnus-cache-total-fetched-hashtb)))
+ (gnus-sethash new-group entry gnus-cache-total-fetched-hashtb)
+ (gnus-sethash old-group nil gnus-cache-total-fetched-hashtb))))
+
+(defun gnus-cache-delete-group-total-fetched-for (group)
+ "Delete record of disk space used by GROUP being deleted."
+ (when gnus-cache-total-fetched-hashtb
+ (gnus-sethash group nil gnus-cache-total-fetched-hashtb)))
+
+(defun gnus-cache-total-fetched-for (group &optional no-inhibit)
+ "Get total disk space used by the cache for the specified GROUP."
+ (unless (equal group "dummy.group")
+ (unless gnus-cache-total-fetched-hashtb
+ (setq gnus-cache-total-fetched-hashtb (gnus-make-hashtable 1024)))
+
+ (let* ((entry (gnus-gethash group gnus-cache-total-fetched-hashtb)))
+ (if entry
+ (apply '+ entry)
+ (let ((gnus-cache-inhibit-update-total-fetched-for (not no-inhibit)))
+ (+
+ (gnus-cache-update-overview-total-fetched-for group nil)
+ (gnus-cache-update-file-total-fetched-for group nil)))))))
+
(provide 'gnus-cache)
;;; arch-tag: 05a79442-8c58-4e65-bd0a-3cbb1b89a33a
diff --git a/lisp/gnus/gnus-cite.el b/lisp/gnus/gnus-cite.el
index 1611dd235f5..908a75513e4 100644
--- a/lisp/gnus/gnus-cite.el
+++ b/lisp/gnus/gnus-cite.el
@@ -27,6 +27,9 @@
;;; Code:
(eval-when-compile (require 'cl))
+(eval-when-compile
+ (when (featurep 'xemacs)
+ (require 'easy-mmode))) ; for `define-minor-mode'
(require 'gnus)
(require 'gnus-range)
@@ -268,7 +271,7 @@ It is merged with the face for the cited text belonging to the attribution."
(defface gnus-cite-10 '((((class color)
(background dark))
- (:foreground "medium purple"))
+ (:foreground "plum1"))
(((class color)
(background light))
(:foreground "medium purple"))
@@ -294,14 +297,28 @@ It is merged with the face for the cited text belonging to the attribution."
(defcustom gnus-cite-face-list
'(gnus-cite-1 gnus-cite-2 gnus-cite-3 gnus-cite-4 gnus-cite-5 gnus-cite-6
- gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11)
+ gnus-cite-7 gnus-cite-8 gnus-cite-9 gnus-cite-10 gnus-cite-11)
"*List of faces used for highlighting citations.
When there are citations from multiple articles in the same message,
Gnus will try to give each citation from each article its own face.
This should make it easier to see who wrote what."
:group 'gnus-cite
- :type '(repeat face))
+ :type '(repeat face)
+ :set (lambda (symbol value)
+ (prog1
+ (custom-set-default symbol value)
+ (if (boundp 'gnus-message-max-citation-depth)
+ (setq gnus-message-max-citation-depth (length value)))
+ (if (boundp 'gnus-message-citation-keywords)
+ (setq gnus-message-citation-keywords
+ `((gnus-message-search-citation-line
+ ,@(let ((list nil)
+ (count 1))
+ (dolist (face value (nreverse list))
+ (push (list count (list 'quote face) 'prepend t)
+ list)
+ (setq count (1+ count)))))))))))
(defcustom gnus-cite-hide-percentage 50
"Only hide excess citation if above this percentage of the body."
@@ -367,7 +384,7 @@ in a boring face, then the pages will be skipped."
;;; Commands:
-(defun gnus-article-highlight-citation (&optional force)
+(defun gnus-article-highlight-citation (&optional force same-buffer)
"Highlight cited text.
Each citation in the article will be highlighted with a different face.
The faces are taken from `gnus-cite-face-list'.
@@ -381,7 +398,8 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
`gnus-cite-attribution-prefix' are considered attribution lines."
(interactive (list 'force))
(save-excursion
- (set-buffer gnus-article-buffer)
+ (unless same-buffer
+ (set-buffer gnus-article-buffer))
(gnus-cite-parse-maybe force)
(let ((buffer-read-only nil)
(alist gnus-cite-prefix-alist)
@@ -416,7 +434,7 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
(goto-char (point-min))
(forward-line (1- number))
(when (re-search-forward gnus-cite-attribution-suffix
- (gnus-point-at-eol)
+ (point-at-eol)
t)
(gnus-article-add-button (match-beginning 1) (match-end 1)
'gnus-cite-toggle prefix))
@@ -770,7 +788,7 @@ See also the documentation for `gnus-article-highlight-citation'."
;; Each line.
(setq begin (point)
guess-limit (progn (skip-chars-forward "^> \t\r\n") (point))
- end (gnus-point-at-bol 2)
+ end (point-at-bol 2)
start end)
(goto-char begin)
;; Ignore standard Supercite attribution prefix.
@@ -793,7 +811,7 @@ See also the documentation for `gnus-article-highlight-citation'."
;; Each prefix.
(setq end (match-end 0)
prefix (buffer-substring begin end))
- (gnus-set-text-properties 0 (length prefix) nil prefix)
+ (set-text-properties 0 (length prefix) nil prefix)
(setq entry (assoc prefix alist))
(if entry
(setcdr entry (cons line (cdr entry)))
@@ -803,13 +821,24 @@ See also the documentation for `gnus-article-highlight-citation'."
(setq line (1+ line)))
;; Horrible special case for some Microsoft mailers.
(goto-char (point-min))
- (when (re-search-forward gnus-cite-unsightly-citation-regexp max t)
- (setq begin (count-lines (point-min) (point)))
- (setq end (count-lines (point-min) max))
- (setq entry nil)
- (while (< begin end)
- (push begin entry)
- (setq begin (1+ begin)))
+ (setq start t begin nil entry nil)
+ (while start
+ ;; Assume this search ends up at the beginning of a line.
+ (if (re-search-forward gnus-cite-unsightly-citation-regexp max t)
+ (progn
+ (when (number-or-marker-p start)
+ (setq begin (count-lines (point-min) start)
+ end (count-lines (point-min) (match-beginning 0))))
+ (setq start (match-end 0)))
+ (when (number-or-marker-p start)
+ (setq begin (count-lines (point-min) start)
+ end (count-lines (point-min) max)))
+ (setq start nil))
+ (when begin
+ (while (< begin end)
+ ;; Need to do 1+ because we're in the bol.
+ (push (setq begin (1+ begin)) entry))))
+ (when entry
(push (cons "" entry) alist))
;; We got all the potential prefixes. Now create
;; `gnus-cite-prefix-alist' containing the oldest prefix for each
@@ -875,11 +904,10 @@ See also the documentation for `gnus-article-highlight-citation'."
(let ((al (buffer-substring (save-excursion (beginning-of-line 0)
(1+ (point)))
end)))
- (if (not (assoc al al-alist))
- (progn
- (push (list wrote in prefix tag)
- gnus-cite-loose-attribution-alist)
- (push (cons al t) al-alist))))))))
+ (when (not (assoc al al-alist))
+ (push (list wrote in prefix tag)
+ gnus-cite-loose-attribution-alist)
+ (push (cons al t) al-alist)))))))
(defun gnus-cite-connect-attributions ()
;; Connect attributions to citations
@@ -1101,6 +1129,107 @@ See also the documentation for `gnus-article-highlight-citation'."
(setq found t)))
found)))
+
+;; Highlighting of different citation levels in message-mode.
+;; - message-cite-prefix will be overridden if this is enabled.
+
+(defvar gnus-message-max-citation-depth
+ (length gnus-cite-face-list)
+ "Maximum supported level of citation.")
+
+(defvar gnus-message-cite-prefix-regexp
+ (concat "^\\(?:" message-cite-prefix-regexp "\\)"))
+
+(defun gnus-message-search-citation-line (limit)
+ "Search for a cited line and set match data accordingly.
+Returns nil if there is no such line before LIMIT, t otherwise."
+ (when (re-search-forward gnus-message-cite-prefix-regexp limit t)
+ (let ((cdepth (min (length (apply 'concat
+ (split-string
+ (match-string-no-properties 0)
+ "[ \t [:alnum:]]+")))
+ gnus-message-max-citation-depth))
+ (mlist (make-list (* (1+ gnus-message-max-citation-depth) 2) nil))
+ (start (point-at-bol))
+ (end (point-at-eol)))
+ (setcar mlist start)
+ (setcar (cdr mlist) end)
+ (setcar (nthcdr (* cdepth 2) mlist) start)
+ (setcar (nthcdr (1+ (* cdepth 2)) mlist) end)
+ (set-match-data mlist))
+ t))
+
+(defvar gnus-message-citation-keywords
+ ;; eval-when-compile ;; This breaks in XEmacs
+ `((gnus-message-search-citation-line
+ ,@(let ((list nil)
+ (count 1))
+ ;; (require 'gnus-cite)
+ (dolist (face gnus-cite-face-list (nreverse list))
+ (push (list count (list 'quote face) 'prepend t) list)
+ (setq count (1+ count)))))) ;;
+ "Keywords for highlighting different levels of message citations.")
+
+(defvar font-lock-defaults-computed)
+(defvar font-lock-keywords)
+(defvar font-lock-set-defaults)
+
+(eval-and-compile
+ (unless (featurep 'xemacs)
+ (autoload 'font-lock-set-defaults "font-lock")))
+
+(define-minor-mode gnus-message-citation-mode
+ "Toggle `gnus-message-citation-mode' in current buffer.
+This buffer local minor mode provides additional font-lock support for
+nested citations.
+With prefix ARG, turn `gnus-message-citation-mode' on if and only if ARG
+is positive.
+Automatically turn `font-lock-mode' on when `gnus-message-citation-mode'
+is turned on."
+ nil ;; init-value
+ "" ;; lighter
+ nil ;; keymap
+ (when (eq major-mode 'message-mode)
+ (let ((defaults (car (if (featurep 'xemacs)
+ (get 'message-mode 'font-lock-defaults)
+ font-lock-defaults)))
+ default keywords)
+ (while defaults
+ (setq default (if (consp defaults)
+ (pop defaults)
+ (prog1
+ defaults
+ (setq defaults nil))))
+ (if gnus-message-citation-mode
+ ;; `gnus-message-citation-keywords' should be the last
+ ;; elements of the keywords because the others are unlikely
+ ;; to have the OVERRIDE flags -- XEmacs applies a keyword
+ ;; having no OVERRIDE flag to matched text even if it has
+ ;; already other faces, while Emacs doesn't.
+ (set (make-local-variable default)
+ (append (default-value default)
+ gnus-message-citation-keywords))
+ (kill-local-variable default))))
+ ;; Force `font-lock-set-defaults' to update `font-lock-keywords'.
+ (if (featurep 'xemacs)
+ (progn
+ (require 'font-lock)
+ (setq font-lock-defaults-computed nil
+ font-lock-keywords nil))
+ (setq font-lock-set-defaults nil))
+ (font-lock-set-defaults)
+ (cond ((symbol-value 'font-lock-mode)
+ (font-lock-fontify-buffer))
+ (gnus-message-citation-mode
+ (font-lock-mode 1)))))
+
+(defun turn-on-gnus-message-citation-mode ()
+ "Turn on `gnus-message-citation-mode'."
+ (gnus-message-citation-mode 1))
+(defun turn-off-gnus-message-citation-mode ()
+ "Turn off `gnus-message-citation-mode'."
+ (gnus-message-citation-mode -1))
+
(gnus-ems-redefine)
(provide 'gnus-cite)
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index 1470f0cbac1..845a467c574 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -949,20 +949,18 @@ articles in the thread.
(gnus-score-set 'touched '(t) alist))
(bury-buffer))
-(eval-when-compile
- (defvar category-fields nil)
- (defvar gnus-agent-cat-name)
- (defvar gnus-agent-cat-score-file)
- (defvar gnus-agent-cat-length-when-short)
- (defvar gnus-agent-cat-length-when-long)
- (defvar gnus-agent-cat-low-score)
- (defvar gnus-agent-cat-high-score)
- (defvar gnus-agent-cat-enable-expiration)
- (defvar gnus-agent-cat-days-until-old)
- (defvar gnus-agent-cat-predicate)
- (defvar gnus-agent-cat-groups)
- (defvar gnus-agent-cat-enable-undownloaded-faces)
-)
+(defvar category-fields nil)
+(defvar gnus-agent-cat-name)
+(defvar gnus-agent-cat-score-file)
+(defvar gnus-agent-cat-length-when-short)
+(defvar gnus-agent-cat-length-when-long)
+(defvar gnus-agent-cat-low-score)
+(defvar gnus-agent-cat-high-score)
+(defvar gnus-agent-cat-enable-expiration)
+(defvar gnus-agent-cat-days-until-old)
+(defvar gnus-agent-cat-predicate)
+(defvar gnus-agent-cat-groups)
+(defvar gnus-agent-cat-enable-undownloaded-faces)
(defun gnus-trim-whitespace (s)
(when (string-match "\\`[ \n\t]+" s)
@@ -980,7 +978,7 @@ articles in the thread.
(deflt (if (,field defaults)
(concat " [" (gnus-trim-whitespace
(gnus-pp-to-string (,field defaults)))
- "]")))
+ "]")))
symb)
(if (eq (car type) 'radio)
diff --git a/lisp/gnus/gnus-delay.el b/lisp/gnus/gnus-delay.el
index e928dc78c8f..ea38ba0456d 100644
--- a/lisp/gnus/gnus-delay.el
+++ b/lisp/gnus/gnus-delay.el
@@ -152,7 +152,7 @@ DELAY is a string, giving the length of the time. Possible values are:
(message-send-hook (copy-sequence message-send-hook))
articles
article deadline)
- (when (gnus-gethash group gnus-newsrc-hashtb)
+ (when (gnus-group-entry group)
(gnus-activate-group group)
(add-hook 'message-send-hook
'(lambda ()
diff --git a/lisp/gnus/gnus-demon.el b/lisp/gnus/gnus-demon.el
index 7a79adce49a..421d4a07ee7 100644
--- a/lisp/gnus/gnus-demon.el
+++ b/lisp/gnus/gnus-demon.el
@@ -35,10 +35,6 @@
(require 'nntp)
(require 'nnmail)
(require 'gnus-util)
-(eval-and-compile
- (if (featurep 'xemacs)
- (require 'itimer)
- (require 'timer)))
(autoload 'parse-time-string "parse-time" nil nil)
@@ -109,7 +105,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
(when gnus-demon-handlers
;; Set up the timer.
(setq gnus-demon-timer
- (nnheader-run-at-time
+ (run-at-time
gnus-demon-timestep gnus-demon-timestep 'gnus-demon))
;; Reset control variables.
(setq gnus-demon-handler-state
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index cc3c3815a1c..655d652ba27 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -251,32 +251,32 @@ Optional prefix (or REVERSE argument) means sort in reverse order."
;; - a nice summary line format
;; - NNDiary specific sorting by schedule functions
;; In general, try not to mess with what the user might have modified.
- (let ((posting-style (gnus-group-get-parameter group 'posting-style t)))
- ;; Posting style:
- (mapcar (lambda (elt)
- (let ((header (format "X-Diary-%s" (car elt))))
- (unless (assoc header posting-style)
- (setq posting-style (append posting-style
- `((,header "*")))))
- ))
- nndiary-headers)
- (gnus-group-set-parameter group 'posting-style posting-style)
- ;; Summary line format:
- (unless (gnus-group-get-parameter group 'gnus-summary-line-format t)
- (gnus-group-set-parameter group 'gnus-summary-line-format
- `(,gnus-diary-summary-line-format)))
- ;; Sorting by schedule:
- (unless (gnus-group-get-parameter group 'gnus-article-sort-functions)
- (gnus-group-set-parameter group 'gnus-article-sort-functions
- '((append gnus-article-sort-functions
- (list
- 'gnus-article-sort-by-schedule)))))
- (unless (gnus-group-get-parameter group 'gnus-thread-sort-functions)
- (gnus-group-set-parameter group 'gnus-thread-sort-functions
- '((append gnus-thread-sort-functions
- (list
- 'gnus-thread-sort-by-schedule)))))
- ))
+
+ ;; Posting style:
+ (let ((posting-style (gnus-group-get-parameter group 'posting-style t))
+ (headers nndiary-headers)
+ header)
+ (while headers
+ (setq header (format "X-Diary-%s" (caar headers))
+ headers (cdr headers))
+ (unless (assoc header posting-style)
+ (setq posting-style (append posting-style (list (list header "*"))))))
+ (gnus-group-set-parameter group 'posting-style posting-style))
+ ;; Summary line format:
+ (unless (gnus-group-get-parameter group 'gnus-summary-line-format t)
+ (gnus-group-set-parameter group 'gnus-summary-line-format
+ `(,gnus-diary-summary-line-format)))
+ ;; Sorting by schedule:
+ (unless (gnus-group-get-parameter group 'gnus-article-sort-functions)
+ (gnus-group-set-parameter group 'gnus-article-sort-functions
+ '((append gnus-article-sort-functions
+ (list
+ 'gnus-article-sort-by-schedule)))))
+ (unless (gnus-group-get-parameter group 'gnus-thread-sort-functions)
+ (gnus-group-set-parameter group 'gnus-thread-sort-functions
+ '((append gnus-thread-sort-functions
+ (list
+ 'gnus-thread-sort-by-schedule))))))
;; Called when a group is subscribed. This is needed because groups created
;; because of mail splitting are *not* created with the back end function.
@@ -347,7 +347,7 @@ If ARG (or prefix) is non-nil, force prompting for all fields."
(when (re-search-forward (concat "^" header ":") nil t)
(unless (eq (char-after) ? )
(insert " "))
- (setq value (buffer-substring (point) (gnus-point-at-eol)))
+ (setq value (buffer-substring (point) (point-at-eol)))
(and (string-match "[ \t]*\\([^ \t]+\\)[ \t]*" value)
(setq value (match-string 1 value)))
(condition-case ()
diff --git a/lisp/gnus/gnus-dired.el b/lisp/gnus/gnus-dired.el
index 93c89aec3ea..fa9ef21bd1a 100644
--- a/lisp/gnus/gnus-dired.el
+++ b/lisp/gnus/gnus-dired.el
@@ -72,7 +72,7 @@
(if (null arg) (not gnus-dired-mode)
(> (prefix-numeric-value arg) 0)))
(when gnus-dired-mode
- (gnus-add-minor-mode 'gnus-dired-mode "" gnus-dired-mode-map)
+ (add-minor-mode 'gnus-dired-mode "" gnus-dired-mode-map)
(gnus-run-hooks 'gnus-dired-mode-hook))))
;;;###autoload
diff --git a/lisp/gnus/gnus-draft.el b/lisp/gnus/gnus-draft.el
index 287d71844af..344f9c028d6 100644
--- a/lisp/gnus/gnus-draft.el
+++ b/lisp/gnus/gnus-draft.el
@@ -75,7 +75,7 @@
;; Set up the menu.
(when (gnus-visual-p 'draft-menu 'menu)
(gnus-draft-make-menu-bar))
- (gnus-add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
+ (add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
(gnus-run-hooks 'gnus-draft-mode-hook))))
;;; Commands
@@ -105,7 +105,9 @@
(save-restriction
(message-narrow-to-headers)
(message-remove-header "date")))
- (save-buffer)
+ (let ((message-draft-headers
+ (delq 'Date (copy-sequence message-draft-headers))))
+ (save-buffer))
(let ((gnus-verbose-backends nil))
(gnus-request-expire-articles (list article) group t))
(push
@@ -160,7 +162,7 @@
(concat "^" (regexp-quote gnus-agent-target-move-group-header)
":") nil t)
(skip-syntax-forward "-")
- (setq move-to (buffer-substring (point) (gnus-point-at-eol)))
+ (setq move-to (buffer-substring (point) (point-at-eol)))
(message-remove-header gnus-agent-target-move-group-header))
(goto-char (point-min))
(when (re-search-forward
@@ -238,6 +240,12 @@
(throw 'continue t)
(error "Stop!"))))))))
+(defcustom gnus-draft-setup-hook nil
+ "Hook run after setting up a draft buffer."
+ :group 'gnus-message
+ :version "23.0" ;; No Gnus
+ :type 'hook)
+
;;; Utility functions
;;;!!!If this is byte-compiled, it fails miserably.
@@ -285,7 +293,8 @@
(gnus-add-mark ,(car ga) 'replied ,article)
(gnus-request-set-mark ,(car ga) (list (list (list ,article)
'add '(reply)))))
- 'send)))))))
+ 'send))))
+ (run-hooks 'gnus-draft-setup-hook))))
(defun gnus-draft-article-sendable-p (article)
"Say whether ARTICLE is sendable."
diff --git a/lisp/gnus/gnus-dup.el b/lisp/gnus/gnus-dup.el
index 0c2e1af0a94..fa08b443a90 100644
--- a/lisp/gnus/gnus-dup.el
+++ b/lisp/gnus/gnus-dup.el
@@ -85,10 +85,8 @@ seen in the same session."
(setq gnus-dup-list nil))
(setq gnus-dup-hashtb (gnus-make-hashtable gnus-duplicate-list-length))
;; Enter all Message-IDs into the hash table.
- (let ((list gnus-dup-list)
- (obarray gnus-dup-hashtb))
- (while list
- (intern (pop list)))))
+ (let ((obarray gnus-dup-hashtb))
+ (mapc 'intern gnus-dup-list)))
(defun gnus-dup-read ()
"Read the duplicate suppression list."
@@ -113,11 +111,10 @@ seen in the same session."
(unless gnus-dup-list
(gnus-dup-open))
(setq gnus-dup-list-dirty t) ; mark list for saving
- (let ((data gnus-newsgroup-data)
- datum msgid)
+ (let (msgid)
;; Enter the Message-IDs of all read articles into the list
;; and hash table.
- (while (setq datum (pop data))
+ (dolist (datum gnus-newsgroup-data)
(when (and (not (gnus-data-pseudo-p datum))
(> (gnus-data-number datum) 0)
(not (memq (gnus-data-number datum) gnus-newsgroup-unreads))
@@ -130,6 +127,7 @@ seen in the same session."
;; Chop off excess Message-IDs from the list.
(let ((end (nthcdr gnus-duplicate-list-length gnus-dup-list)))
(when end
+ (mapc (lambda (id) (unintern id gnus-dup-hashtb)) (cdr end))
(setcdr end nil))))
(defun gnus-dup-suppress-articles ()
@@ -137,11 +135,10 @@ seen in the same session."
(unless gnus-dup-list
(gnus-dup-open))
(gnus-message 6 "Suppressing duplicates...")
- (let ((headers gnus-newsgroup-headers)
- (auto (and gnus-newsgroup-auto-expire
+ (let ((auto (and gnus-newsgroup-auto-expire
(memq gnus-duplicate-mark gnus-auto-expirable-marks)))
- number header)
- (while (setq header (pop headers))
+ number)
+ (dolist (header gnus-newsgroup-headers)
(when (and (intern-soft (mail-header-id header) gnus-dup-hashtb)
(gnus-summary-article-unread-p (mail-header-number header)))
(setq gnus-newsgroup-unreads
@@ -155,7 +152,8 @@ seen in the same session."
(defun gnus-dup-unsuppress-article (article)
"Stop suppression of ARTICLE."
- (let ((id (mail-header-id (gnus-data-header (gnus-data-find article)))))
+ (let* ((header (gnus-data-header (gnus-data-find article)))
+ (id (when header (mail-header-id header))))
(when id
(setq gnus-dup-list-dirty t)
(setq gnus-dup-list (delete id gnus-dup-list))
diff --git a/lisp/gnus/gnus-eform.el b/lisp/gnus/gnus-eform.el
index 4dc5dde369a..220f9c3ce5c 100644
--- a/lisp/gnus/gnus-eform.el
+++ b/lisp/gnus/gnus-eform.el
@@ -86,13 +86,14 @@ It is a slightly enhanced emacs-lisp-mode.
(make-local-variable 'gnus-prev-winconf)
(gnus-run-mode-hooks 'gnus-edit-form-mode-hook))
-(defun gnus-edit-form (form documentation exit-func)
+(defun gnus-edit-form (form documentation exit-func &optional layout)
"Edit FORM in a new buffer.
Call EXIT-FUNC on exit. Display DOCUMENTATION in the beginning
-of the buffer."
+of the buffer.
+The optional LAYOUT overrides the `edit-form' window layout."
(let ((winconf (current-window-configuration)))
(set-buffer (gnus-get-buffer-create gnus-edit-form-buffer))
- (gnus-configure-windows 'edit-form)
+ (gnus-configure-windows (or layout 'edit-form))
(gnus-edit-form-mode)
(setq gnus-prev-winconf winconf)
(setq gnus-edit-form-done-function exit-func)
diff --git a/lisp/gnus/gnus-ems.el b/lisp/gnus/gnus-ems.el
index a4d24603b4c..79e513b5f05 100644
--- a/lisp/gnus/gnus-ems.el
+++ b/lisp/gnus/gnus-ems.el
@@ -38,21 +38,17 @@
(defvar gnus-down-mouse-2 [down-mouse-2])
(defvar gnus-widget-button-keymap nil)
(defvar gnus-mode-line-modified
- (if (or (featurep 'xemacs)
- (< emacs-major-version 20))
+ (if (featurep 'xemacs)
'("--**-" . "-----")
'("**" "--")))
(eval-and-compile
(autoload 'gnus-xmas-define "gnus-xmas")
(autoload 'gnus-xmas-redefine "gnus-xmas")
- (autoload 'appt-select-lowest-window "appt")
(autoload 'gnus-get-buffer-create "gnus")
(autoload 'nnheader-find-etc-directory "nnheader"))
(autoload 'smiley-region "smiley")
-;; Fixme: shouldn't require message
-(autoload 'message-text-with-property "message")
(defun gnus-kill-all-overlays ()
"Delete all overlays in the current buffer."
@@ -73,30 +69,23 @@
valstr)))
(eval-and-compile
- (defalias 'gnus-char-width
- (if (fboundp 'char-width)
- 'char-width
- (lambda (ch) 1)))) ;; A simple hack.
-
-(eval-and-compile
(if (featurep 'xemacs)
(gnus-xmas-define)
(defvar gnus-mouse-face-prop 'mouse-face
"Property used for highlighting mouse regions.")))
-(eval-when-compile
- (defvar gnus-tmp-unread)
- (defvar gnus-tmp-replied)
- (defvar gnus-tmp-score-char)
- (defvar gnus-tmp-indentation)
- (defvar gnus-tmp-opening-bracket)
- (defvar gnus-tmp-lines)
- (defvar gnus-tmp-name)
- (defvar gnus-tmp-closing-bracket)
- (defvar gnus-tmp-subject-or-nil)
- (defvar gnus-check-before-posting)
- (defvar gnus-mouse-face)
- (defvar gnus-group-buffer))
+(defvar gnus-tmp-unread)
+(defvar gnus-tmp-replied)
+(defvar gnus-tmp-score-char)
+(defvar gnus-tmp-indentation)
+(defvar gnus-tmp-opening-bracket)
+(defvar gnus-tmp-lines)
+(defvar gnus-tmp-name)
+(defvar gnus-tmp-closing-bracket)
+(defvar gnus-tmp-subject-or-nil)
+(defvar gnus-check-before-posting)
+(defvar gnus-mouse-face)
+(defvar gnus-group-buffer)
(defun gnus-ems-redefine ()
(cond
@@ -149,6 +138,18 @@
gnus-mouse-face-prop gnus-mouse-face)
(insert " " gnus-tmp-subject-or-nil "\n")))))
+;; Clone of `appt-select-lowest-window' in appt.el.
+(defun gnus-select-lowest-window ()
+"Select the lowest window on the frame."
+ (let ((lowest-window (selected-window))
+ (bottom-edge (nth 3 (window-edges))))
+ (walk-windows (lambda (w)
+ (let ((next-bottom-edge (nth 3 (window-edges w))))
+ (when (< bottom-edge next-bottom-edge)
+ (setq bottom-edge next-bottom-edge
+ lowest-window w)))))
+ (select-window lowest-window)))
+
(defun gnus-region-active-p ()
"Say whether the region is active."
(and (boundp 'transient-mark-mode)
@@ -160,16 +161,6 @@
"Non-nil means the mark and region are currently active in this buffer."
mark-active) ; aliased to region-exists-p in XEmacs.
-(if (fboundp 'add-minor-mode)
- (defalias 'gnus-add-minor-mode 'add-minor-mode)
- (defun gnus-add-minor-mode (mode name map &rest rest)
- (set (make-local-variable mode) t)
- (unless (assq mode minor-mode-alist)
- (push `(,mode ,name) minor-mode-alist))
- (unless (assq mode minor-mode-map-alist)
- (push (cons mode map)
- minor-mode-map-alist))))
-
(defun gnus-x-splash ()
"Show a splash screen using a pixmap in the current buffer."
(interactive)
@@ -291,13 +282,26 @@
glyph))
(defun gnus-remove-image (image &optional category)
- (dolist (position (message-text-with-property 'display))
- (when (and (equal (get-text-property position 'display) image)
- (equal (get-text-property position 'gnus-image-category)
+ "Remove the image matching IMAGE and CATEGORY found first."
+ (let ((start (point-min))
+ val end)
+ (while (and (not end)
+ (or (setq val (get-text-property start 'display))
+ (and (setq start
+ (next-single-property-change start 'display))
+ (setq val (get-text-property start 'display)))))
+ (setq end (or (next-single-property-change start 'display)
+ (point-max)))
+ (if (and (equal val image)
+ (equal (get-text-property start 'gnus-image-category)
category))
- (put-text-property position (1+ position) 'display nil)
- (when (get-text-property position 'gnus-image-text-deletable)
- (delete-region position (1+ position))))))
+ (progn
+ (put-text-property start end 'display nil)
+ (when (get-text-property start 'gnus-image-text-deletable)
+ (delete-region start end)))
+ (unless (= end (point-max))
+ (setq start end
+ end nil))))))
(provide 'gnus-ems)
diff --git a/lisp/gnus/gnus-fun.el b/lisp/gnus/gnus-fun.el
index 83b5904e80b..05454960e38 100644
--- a/lisp/gnus/gnus-fun.el
+++ b/lisp/gnus/gnus-fun.el
@@ -34,6 +34,8 @@
(require 'gnus-util)
(require 'gnus)
+(defvar gnus-face-properties-alist)
+
(defcustom gnus-x-face-directory (expand-file-name "x-faces" gnus-directory)
"*Directory where X-Face PBM files are stored."
:version "22.1"
@@ -46,21 +48,37 @@
:group 'gnus-fun
:type 'string)
-(defcustom gnus-convert-image-to-x-face-command "giftopnm %s | ppmnorm | pnmscale -width 48 -height 48 | ppmtopgm | pgmtopbm | pbmtoxbm | compface"
+(defcustom gnus-convert-image-to-x-face-command
+ "convert -scale 48x48! %s xbm:- | xbm2xface.pl"
"Command for converting an image to an X-Face.
+The command must take a image filename (use \"%s\") as input.
+The output must be the Face header data on stdout in PNG format.
+
By default it takes a GIF filename and output the X-Face header data
on stdout."
:version "22.1"
:group 'gnus-fun
- :type 'string)
+ :type '(choice (const :tag "giftopnm, netpbm (GIF input only)"
+ "giftopnm %s | ppmnorm | pnmscale -width 48 -height 48 | ppmtopgm | pgmtopbm | pbmtoxbm | compface")
+ (const :tag "convert"
+ "convert -scale 48x48! %s xbm:- | xbm2xface.pl")
+ (string)))
-(defcustom gnus-convert-image-to-face-command "djpeg %s | ppmnorm | pnmscale -width 48 -height 48 | ppmquant %d | pnmtopng"
+(defcustom gnus-convert-image-to-face-command
+ "convert -scale 48x48! %s -colors %d png:-"
"Command for converting an image to a Face.
-By default it takes a JPEG filename and output the Face header data
-on stdout."
+
+The command must take an image filename (first format argument
+\"%s\") and the number of colors (second format argument: \"%d\")
+as input. The output must be the Face header data on stdout in
+PNG format."
:version "22.1"
:group 'gnus-fun
- :type 'string)
+ :type '(choice (const :tag "djpeg, netpbm (JPG input only)"
+ "djpeg %s | ppmnorm | pnmscale -width 48 -height 48 | ppmquant %d | pnmtopng")
+ (const :tag "convert"
+ "convert -scale 48x48! %s -colors %d png:-")
+ (string)))
(defun gnus-shell-command-to-string (command)
"Like `shell-command-to-string' except not mingling ERROR."
@@ -102,8 +120,11 @@ Output to the current buffer, replace text, and don't mingle error."
;;;###autoload
(defun gnus-x-face-from-file (file)
- "Insert an X-Face header based on an image file."
- (interactive "fImage file name (by default GIF): ")
+ "Insert an X-Face header based on an image file.
+
+Depending on `gnus-convert-image-to-x-face-command' it may accept
+different input formats."
+ (interactive "fImage file name: ")
(when (file-exists-p file)
(gnus-shell-command-to-string
(format gnus-convert-image-to-x-face-command
@@ -111,8 +132,11 @@ Output to the current buffer, replace text, and don't mingle error."
;;;###autoload
(defun gnus-face-from-file (file)
- "Return a Face header based on an image file."
- (interactive "fImage file name (by default JPEG): ")
+ "Return a Face header based on an image file.
+
+Depending on `gnus-convert-image-to-face-command' it may accept
+different input formats."
+ (interactive "fImage file name: ")
(when (file-exists-p file)
(let ((done nil)
(attempt "")
@@ -127,7 +151,7 @@ Output to the current buffer, replace text, and don't mingle error."
quant))))
(if (> (length attempt) 726)
(progn
- (setq quant (- quant 2))
+ (setq quant (- quant (if (< quant 10) 1 2)))
(gnus-message 9 "Length %d; trying quant %d"
(length attempt) quant))
(setq done t)))
@@ -197,11 +221,11 @@ colors of the displayed X-Faces."
'xface
(gnus-put-image
(if (gnus-image-type-available-p 'xface)
- (gnus-create-image
- (concat "X-Face: " data)
- 'xface t :face 'gnus-x-face)
- (gnus-create-image
- pbm 'pbm t :face 'gnus-x-face)) nil 'xface))
+ (apply 'gnus-create-image (concat "X-Face: " data) 'xface t
+ (cdr (assq 'xface gnus-face-properties-alist)))
+ (apply 'gnus-create-image pbm 'pbm t
+ (cdr (assq 'pbm gnus-face-properties-alist))))
+ nil 'xface))
(gnus-add-wash-type 'xface))))))
(defun gnus-grab-cam-x-face ()
diff --git a/lisp/gnus/gnus-gl.el b/lisp/gnus/gnus-gl.el
deleted file mode 100644
index 98326ee2923..00000000000
--- a/lisp/gnus/gnus-gl.el
+++ /dev/null
@@ -1,860 +0,0 @@
-;;; gnus-gl.el --- an interface to GroupLens for Gnus
-
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-
-;; Author: Brad Miller <bmiller@cs.umn.edu>
-;; Keywords: news, score
-
-;; 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 3, 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:
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; GroupLens software and documentation is copyright (c) 1995 by Paul
-;; Resnick (Massachusetts Institute of Technology); Brad Miller, John
-;; Riedl, Jon Herlocker, and Joseph Konstan (University of Minnesota),
-;; and David Maltz (Carnegie-Mellon University).
-;;
-;; Permission to use, copy, modify, and distribute this documentation
-;; for non-commercial and commercial purposes without fee is hereby
-;; granted provided that this copyright notice and permission notice
-;; appears in all copies and that the names of the individuals and
-;; institutions holding this copyright are not used in advertising or
-;; publicity pertaining to this software without specific, written
-;; prior permission. The copyright holders make no representations
-;; about the suitability of this software and documentation for any
-;; purpose. It is provided ``as is'' without express or implied
-;; warranty.
-;;
-;; The copyright holders request that they be notified of
-;; modifications of this code. Please send electronic mail to
-;; grouplens@cs.umn.edu for more information or to announce derived
-;; works.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Author: Brad Miller
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; User Documentation:
-;; To use GroupLens you must load this file.
-;; You must also register a pseudonym with the Better Bit Bureau.
-;; http://www.cs.umn.edu/Research/GroupLens
-;;
-;; ---------------- For your .emacs or .gnus file ----------------
-;;
-;; As of version 2.5, grouplens now works as a minor mode of
-;; gnus-summary-mode. To get make that work you just need a couple of
-;; hooks.
-;; (setq gnus-use-grouplens t)
-;; (setq grouplens-pseudonym "")
-;; (setq grouplens-bbb-host "grouplens.cs.umn.edu")
-;;
-;; (setq gnus-summary-default-score 0)
-;;
-;; USING GROUPLENS
-;; How do I Rate an article??
-;; Before you type n to go to the next article, hit a number from 1-5
-;; Type r in the summary buffer and you will be prompted.
-;; Note that when you're in grouplens-minor-mode 'r' masks the
-;; usual reply binding for 'r'
-;;
-;; What if, Gasp, I find a bug???
-;; Please type M-x gnus-gl-submit-bug-report. This will set up a
-;; mail buffer with the state of variables and buffers that will help
-;; me debug the problem. A short description up front would help too!
-;;
-;; How do I display the prediction for an article:
-;; If you set the gnus-summary-line-format as shown above, the score
-;; (prediction) will be shown automatically.
-;;
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Programmer Notes
-;; 10/9/95
-;; gnus-scores-articles contains the articles
-;; When scoring is done, the call tree looks something like:
-;; gnus-possibly-score-headers
-;; ==> gnus-score-headers
-;; ==> gnus-score-load-file
-;; ==> get-all-mids (from the eval form)
-;;
-;; it would be nice to have one that gets called after all the other
-;; headers have been scored.
-;; we may want a variable gnus-grouplens-scale-factor
-;; and gnus-grouplens-offset this would probably be either -3 or 0
-;; to make the scores centered around zero or not.
-;; Notes 10/12/95
-;; According to Lars, Norse god of gnus, the simple way to insert a
-;; call to an external function is to have a function added to the
-;; variable gnus-score-find-files-function This new function
-;; gnus-grouplens-score-alist will return a core alist that
-;; has (("message-id" ("<message-id-xxxx>" score) ("<message-id-xxxy>" score))
-;; This seems like it would be pretty inefficient, though workable.
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; TODO
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;; 3. Add some more ways to rate messages
-;; 4. Better error handling for token timeouts.
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; bugs
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-
-(require 'gnus-score)
-(require 'gnus)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; User variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar gnus-summary-grouplens-line-format
- "%U\%R\%z%l%I\%(%[%4L: %-23,23n%]%) %s\n"
- "*The line format spec in summary GroupLens mode buffers.")
-
-(defvar grouplens-pseudonym ""
- "User's pseudonym.
-This pseudonym is obtained during the registration process")
-
-(defvar grouplens-bbb-host "grouplens.cs.umn.edu"
- "Host where the bbbd is running.")
-
-(defvar grouplens-bbb-port 9000
- "Port where the bbbd is listening.")
-
-(defvar grouplens-newsgroups
- '("comp.groupware" "comp.human-factors" "comp.lang.c++"
- "comp.lang.java" "comp.os.linux.admin" "comp.os.linux.advocacy"
- "comp.os.linux.announce" "comp.os.linux.answers"
- "comp.os.linux.development" "comp.os.linux.development.apps"
- "comp.os.linux.development.system" "comp.os.linux.hardware"
- "comp.os.linux.help" "comp.os.linux.m68k" "comp.os.linux.misc"
- "comp.os.linux.networking" "comp.os.linux.setup" "comp.os.linux.x"
- "mn.general" "rec.arts.movies" "rec.arts.movies.current-films"
- "rec.food.recipes" "rec.humor")
- "*Groups that are part of the GroupLens experiment.")
-
-(defvar grouplens-prediction-display 'prediction-spot
- "valid values are:
- prediction-spot -- an * corresponding to the prediction between 1 and 5,
- confidence-interval -- a numeric confidence interval
- prediction-bar -- |##### | the longer the bar, the better the article,
- confidence-bar -- | ----- } the prediction is in the middle of the bar,
- confidence-spot -- ) * | the spot gets bigger with more confidence,
- prediction-num -- plain-old numeric value,
- confidence-plus-minus -- prediction +/i confidence")
-
-(defvar grouplens-score-offset 0
- "Offset the prediction by this value.
-Setting this variable to -2 would have the following effect on
-GroupLens scores:
-
- 1 --> -2
- 2 --> -1
- 3 --> 0
- 4 --> 1
- 5 --> 2
-
-The reason is that a user might want to do this is to combine
-GroupLens predictions with scores calculated by other score methods.")
-
-(defvar grouplens-score-scale-factor 1
- "This variable allows the user to magnify the effect of GroupLens scores.
-The scale factor is applied after the offset.")
-
-(defvar gnus-grouplens-override-scoring 'override
- "Tell GroupLens to override the normal Gnus scoring mechanism.
-GroupLens scores can be combined with gnus scores in one of three ways.
-'override -- just use grouplens predictions for grouplens groups
-'combine -- combine grouplens scores with gnus scores
-'separate -- treat grouplens scores completely separate from gnus")
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Program global variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar grouplens-bbb-token nil
- "Current session token number.")
-
-(defvar grouplens-bbb-process nil
- "Process Id of current bbbd network stream process.")
-
-(defvar grouplens-bbb-buffer nil
- "Buffer associated with the BBBD process.")
-
-(defvar grouplens-rating-alist nil
- "Current set of message-id rating pairs.")
-
-(defvar grouplens-current-hashtable nil
- "A hashtable to hold predictions from the BBB.")
-
-(defvar grouplens-current-group nil)
-
-;;(defvar bbb-alist nil)
-
-(defvar bbb-timeout-secs 10
- "Number of seconds to wait for some response from the BBB.
-If this times out we give up and assume that something has died..." )
-
-(defvar grouplens-previous-article nil
- "Message-ID of the last article read.")
-
-(defvar bbb-read-point)
-(defvar bbb-response-point)
-
-(defun bbb-renew-hash-table ()
- (setq grouplens-current-hashtable (make-vector 100 0)))
-
-(bbb-renew-hash-table)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Utility Functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun bbb-connect-to-bbbd (host port)
- (unless grouplens-bbb-buffer
- (setq grouplens-bbb-buffer
- (gnus-get-buffer-create (format " *BBBD trace: %s*" host)))
- (save-excursion
- (set-buffer grouplens-bbb-buffer)
- (make-local-variable 'bbb-read-point)
- (make-local-variable 'bbb-response-point)
- (setq bbb-read-point (point-min))))
-
- ;; if an old process is still running for some reason, kill it
- (when grouplens-bbb-process
- (ignore-errors
- (when (eq 'open (process-status grouplens-bbb-process))
- (set-process-buffer grouplens-bbb-process nil)
- (delete-process grouplens-bbb-process))))
-
- ;; clear the trace buffer of old output
- (save-excursion
- (set-buffer grouplens-bbb-buffer)
- (erase-buffer))
-
- ;; open the connection to the server
- (catch 'done
- (condition-case error
- (setq grouplens-bbb-process
- (open-network-stream "BBBD" grouplens-bbb-buffer host port))
- (error (gnus-message 3 "Error: Failed to connect to BBB")
- nil))
- (and (null grouplens-bbb-process)
- (throw 'done nil))
- (save-excursion
- (set-buffer grouplens-bbb-buffer)
- (setq bbb-read-point (point-min))
- (or (bbb-read-response grouplens-bbb-process)
- (throw 'done nil))))
-
- ;; return the process
- grouplens-bbb-process)
-
-(defun bbb-send-command (process command)
- (goto-char (point-max))
- (insert command)
- (insert "\r\n")
- (setq bbb-read-point (point))
- (setq bbb-response-point (point))
- (set-marker (process-mark process) (point)) ; process output also comes here
- (process-send-string process command)
- (process-send-string process "\r\n")
- (process-send-eof process))
-
-(defun bbb-read-response (process)
- "This function eats the initial response of OK or ERROR from the BBB."
- (let ((case-fold-search nil)
- match-end)
- (goto-char bbb-read-point)
- (while (and (not (search-forward "\r\n" nil t))
- (accept-process-output process bbb-timeout-secs))
- (goto-char bbb-read-point))
- (setq match-end (point))
- (goto-char bbb-read-point)
- (setq bbb-read-point match-end)
- (looking-at "OK")))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Login Functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun bbb-login ()
- "return the token number if login is successful, otherwise return nil."
- (interactive)
- (setq grouplens-bbb-token nil)
- (if (not (equal grouplens-pseudonym ""))
- (let ((bbb-process
- (bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port)))
- (if bbb-process
- (save-excursion
- (set-buffer (process-buffer bbb-process))
- (bbb-send-command bbb-process
- (concat "login " grouplens-pseudonym))
- (if (bbb-read-response bbb-process)
- (setq grouplens-bbb-token (bbb-extract-token-number))
- (gnus-message 3 "Error: GroupLens login failed")))))
- (gnus-message 3 "Error: you must set a pseudonym"))
- grouplens-bbb-token)
-
-(defun bbb-extract-token-number ()
- (let ((token-pos (search-forward "token=" nil t)))
- (when (looking-at "[0-9]+")
- (buffer-substring token-pos (match-end 0)))))
-
-(gnus-add-shutdown 'bbb-logout 'gnus)
-
-(defun bbb-logout ()
- "logout of bbb session."
- (when grouplens-bbb-token
- (let ((bbb-process
- (bbb-connect-to-bbbd grouplens-bbb-host grouplens-bbb-port)))
- (when bbb-process
- (save-excursion
- (set-buffer (process-buffer bbb-process))
- (bbb-send-command bbb-process (concat "logout " grouplens-bbb-token))
- (bbb-read-response bbb-process))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Get Predictions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun bbb-build-mid-scores-alist (groupname)
- "this function can be called as part of the function to return the list of score files to use.
-See the gnus variable `gnus-score-find-score-files-function'.
-
-*Note:* If you want to use grouplens scores along with calculated scores,
-you should see the offset and scale variables. At this point, I don't
-recommend using both scores and grouplens predictions together."
- (setq grouplens-current-group groupname)
- (when (member groupname grouplens-newsgroups)
- (setq grouplens-previous-article nil)
- ;; scores-alist should be a list of lists:
- ;; ((("message-id" ("<mid1>" score1 nil s) ("<mid2> score2 nil s))))
- ;;`((("message-id" . ,predict-list))) ; Yes, this is the return value
- (list
- (list
- (list (append (list "message-id")
- (bbb-get-predictions (bbb-get-all-mids) groupname)))))))
-
-(defun bbb-get-predictions (midlist groupname)
- "Ask the bbb for predictions, and build up the score alist."
- (gnus-message 5 "Fetching Predictions...")
- (if grouplens-bbb-token
- (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host
- grouplens-bbb-port)))
- (when bbb-process
- (save-excursion
- (set-buffer (process-buffer bbb-process))
- (bbb-send-command bbb-process
- (bbb-build-predict-command midlist groupname
- grouplens-bbb-token))
- (if (bbb-read-response bbb-process)
- (bbb-get-prediction-response bbb-process)
- (gnus-message 1 "Invalid Token, login and try again")
- (ding)))))
- (gnus-message 3 "Error: You are not logged in to a BBB")
- (ding)))
-
-(defun bbb-get-all-mids ()
- (mapcar (function (lambda (x) (mail-header-id x))) gnus-newsgroup-headers))
-
-(defun bbb-build-predict-command (mlist grpname token)
- (concat "getpredictions " token " " grpname "\r\n"
- (mapconcat 'identity mlist "\r\n") "\r\n.\r\n"))
-
-(defun bbb-get-prediction-response (process)
- (let ((case-fold-search nil))
- (goto-char bbb-read-point)
- (while (and (not (search-forward ".\r\n" nil t))
- (accept-process-output process bbb-timeout-secs))
- (goto-char bbb-read-point))
- (goto-char (+ bbb-response-point 4));; we ought to be right before OK
- (bbb-build-response-alist)))
-
-;; build-response-alist assumes that the cursor has been positioned at
-;; the first line of the list of mid/rating pairs.
-(defun bbb-build-response-alist ()
- (let (resp mid pred)
- (while
- (cond
- ((looking-at "\\(<.*>\\) :nopred=")
- ;;(push `(,(bbb-get-mid) ,gnus-summary-default-score nil s) resp)
- (forward-line 1)
- t)
- ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\) :conflow=\\([0-9]\.[0-9][0-9]\\) :confhigh=\\([0-9]\.[0-9][0-9]\\)")
- (setq mid (bbb-get-mid)
- pred (bbb-get-pred))
- (push `(,mid ,pred nil s) resp)
- (gnus-sethash mid (list pred (bbb-get-confl) (bbb-get-confh))
- grouplens-current-hashtable)
- (forward-line 1)
- t)
- ((looking-at "\\(<.*>\\) :pred=\\([0-9]\.[0-9][0-9]\\)")
- (setq mid (bbb-get-mid)
- pred (bbb-get-pred))
- (push `(,mid ,pred nil s) resp)
- (gnus-sethash mid (list pred 0 0) grouplens-current-hashtable)
- (forward-line 1)
- t)
- (t nil)))
- resp))
-
-;; these "get" functions assume that there is an active match lying
-;; around. Where the first parenthesized expression is the
-;; message-id, and the second is the prediction, the third and fourth
-;; are the confidence interval
-;;
-;; Since gnus assumes that scores are integer values?? we round the
-;; prediction.
-(defun bbb-get-mid ()
- (buffer-substring (match-beginning 1) (match-end 1)))
-
-(defun bbb-get-pred ()
- (let ((tpred (string-to-number (buffer-substring (match-beginning 2)
- (match-end 2)))))
- (if (> tpred 0)
- (round (* grouplens-score-scale-factor
- (+ grouplens-score-offset tpred)))
- 1)))
-
-(defun bbb-get-confl ()
- (string-to-number (buffer-substring (match-beginning 4) (match-end 4))))
-
-(defun bbb-get-confh ()
- (string-to-number (buffer-substring (match-beginning 4) (match-end 4))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Prediction Display
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defconst grplens-rating-range 4.0)
-(defconst grplens-maxrating 5)
-(defconst grplens-minrating 1)
-(defconst grplens-predstringsize 12)
-
-(defvar gnus-tmp-score)
-(defun bbb-grouplens-score (header)
- (if (eq gnus-grouplens-override-scoring 'separate)
- (bbb-grouplens-other-score header)
- (let* ((rate-string (make-string 12 ?\ ))
- (mid (mail-header-id header))
- (hashent (gnus-gethash mid grouplens-current-hashtable))
- (iscore gnus-tmp-score)
- (low (car (cdr hashent)))
- (high (car (cdr (cdr hashent)))))
- (aset rate-string 0 ?|)
- (aset rate-string 11 ?|)
- (unless (member grouplens-current-group grouplens-newsgroups)
- (unless (equal grouplens-prediction-display 'prediction-num)
- (cond ((< iscore 0)
- (setq iscore 1))
- ((> iscore 5)
- (setq iscore 5))))
- (setq low 0)
- (setq high 0))
- (if (and (bbb-valid-score iscore)
- (not (null mid)))
- (cond
- ;; prediction-spot
- ((equal grouplens-prediction-display 'prediction-spot)
- (setq rate-string (bbb-fmt-prediction-spot rate-string iscore)))
- ;; confidence-interval
- ((equal grouplens-prediction-display 'confidence-interval)
- (setq rate-string (bbb-fmt-confidence-interval iscore low high)))
- ;; prediction-bar
- ((equal grouplens-prediction-display 'prediction-bar)
- (setq rate-string (bbb-fmt-prediction-bar rate-string iscore)))
- ;; confidence-bar
- ((equal grouplens-prediction-display 'confidence-bar)
- (setq rate-string (format "| %4.2f |" iscore)))
- ;; confidence-spot
- ((equal grouplens-prediction-display 'confidence-spot)
- (setq rate-string (format "| %4.2f |" iscore)))
- ;; prediction-num
- ((equal grouplens-prediction-display 'prediction-num)
- (setq rate-string (bbb-fmt-prediction-num iscore)))
- ;; confidence-plus-minus
- ((equal grouplens-prediction-display 'confidence-plus-minus)
- (setq rate-string (bbb-fmt-confidence-plus-minus iscore low high))
- )
- (t (gnus-message 3 "Invalid prediction display type")))
- (aset rate-string 5 ?N) (aset rate-string 6 ?A))
- rate-string)))
-
-;; Gnus user format function that doesn't depend on
-;; bbb-build-mid-scores-alist being used as the score function, but is
-;; instead called from gnus-select-group-hook. -- LAB
-(defun bbb-grouplens-other-score (header)
- (if (not (member grouplens-current-group grouplens-newsgroups))
- ;; Return an empty string
- ""
- (let* ((rate-string (make-string 12 ?\ ))
- (mid (mail-header-id header))
- (hashent (gnus-gethash mid grouplens-current-hashtable))
- (pred (or (nth 0 hashent) 0))
- (low (nth 1 hashent))
- (high (nth 2 hashent)))
- ;; Init rate-string
- (aset rate-string 0 ?|)
- (aset rate-string 11 ?|)
- (unless (equal grouplens-prediction-display 'prediction-num)
- (cond ((< pred 0)
- (setq pred 1))
- ((> pred 5)
- (setq pred 5))))
- ;; If no entry in BBB hash mark rate string as NA and return
- (cond
- ((null hashent)
- (aset rate-string 5 ?N)
- (aset rate-string 6 ?A)
- rate-string)
-
- ((equal grouplens-prediction-display 'prediction-spot)
- (bbb-fmt-prediction-spot rate-string pred))
-
- ((equal grouplens-prediction-display 'confidence-interval)
- (bbb-fmt-confidence-interval pred low high))
-
- ((equal grouplens-prediction-display 'prediction-bar)
- (bbb-fmt-prediction-bar rate-string pred))
-
- ((equal grouplens-prediction-display 'confidence-bar)
- (format "| %4.2f |" pred))
-
- ((equal grouplens-prediction-display 'confidence-spot)
- (format "| %4.2f |" pred))
-
- ((equal grouplens-prediction-display 'prediction-num)
- (bbb-fmt-prediction-num pred))
-
- ((equal grouplens-prediction-display 'confidence-plus-minus)
- (bbb-fmt-confidence-plus-minus pred low high))
-
- (t
- (gnus-message 3 "Invalid prediction display type")
- (aset rate-string 0 ?|)
- (aset rate-string 11 ?|)
- rate-string)))))
-
-(defun bbb-valid-score (score)
- (or (equal grouplens-prediction-display 'prediction-num)
- (and (>= score grplens-minrating)
- (<= score grplens-maxrating))))
-
-(defun bbb-requires-confidence (format-type)
- (or (equal format-type 'confidence-plus-minus)
- (equal format-type 'confidence-spot)
- (equal format-type 'confidence-interval)))
-
-(defun bbb-have-confidence (clow chigh)
- (not (or (null clow)
- (null chigh))))
-
-(defun bbb-fmt-prediction-spot (rate-string score)
- (aset rate-string
- (round (* (/ (- score grplens-minrating) grplens-rating-range)
- (+ (- grplens-predstringsize 4) 1.49)))
- ?*)
- rate-string)
-
-(defun bbb-fmt-confidence-interval (score low high)
- (if (bbb-have-confidence low high)
- (format "|%4.2f-%4.2f |" low high)
- (bbb-fmt-prediction-num score)))
-
-(defun bbb-fmt-confidence-plus-minus (score low high)
- (if (bbb-have-confidence low high)
- (format "|%3.1f+/-%4.2f|" score (/ (- high low) 2.0))
- (bbb-fmt-prediction-num score)))
-
-(defun bbb-fmt-prediction-bar (rate-string score)
- (let* ((i 1)
- (step (/ grplens-rating-range (- grplens-predstringsize 4)))
- (half-step (/ step 2))
- (loc (- grplens-minrating half-step)))
- (while (< i (- grplens-predstringsize 2))
- (if (> score loc)
- (aset rate-string i ?#)
- (aset rate-string i ?\ ))
- (setq i (+ i 1))
- (setq loc (+ loc step)))
- )
- rate-string)
-
-(defun bbb-fmt-prediction-num (score)
- (format "| %4.2f |" score))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;; Put Ratings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun bbb-put-ratings ()
- (if (and grouplens-bbb-token
- grouplens-rating-alist
- (member gnus-newsgroup-name grouplens-newsgroups))
- (let ((bbb-process (bbb-connect-to-bbbd grouplens-bbb-host
- grouplens-bbb-port))
- (rate-command (bbb-build-rate-command grouplens-rating-alist)))
- (if bbb-process
- (save-excursion
- (set-buffer (process-buffer bbb-process))
- (gnus-message 5 "Sending Ratings...")
- (bbb-send-command bbb-process rate-command)
- (if (bbb-read-response bbb-process)
- (setq grouplens-rating-alist nil)
- (gnus-message 1
- "Token timed out: call bbb-login and quit again")
- (ding))
- (gnus-message 5 "Sending Ratings...Done"))
- (gnus-message 3 "No BBB connection")))
- (setq grouplens-rating-alist nil)))
-
-(defun bbb-build-rate-command (rate-alist)
- (concat "putratings " grouplens-bbb-token " " grouplens-current-group " \r\n"
- (mapconcat (lambda (this) ; form (mid . (score . time))
- (concat (car this)
- " :rating=" (cadr this) ".00"
- " :time=" (cddr this)))
- rate-alist "\r\n")
- "\r\n.\r\n"))
-
-;; Interactive rating functions.
-(defun bbb-summary-rate-article (rating &optional midin)
- (interactive "nRating: ")
- (when (member gnus-newsgroup-name grouplens-newsgroups)
- (let ((mid (or midin (bbb-get-current-id))))
- (if (and rating
- (>= rating grplens-minrating)
- (<= rating grplens-maxrating)
- mid)
- (let ((oldrating (assoc mid grouplens-rating-alist)))
- (if oldrating
- (setcdr oldrating (cons rating 0))
- (push `(,mid . (,rating . 0)) grouplens-rating-alist))
- (gnus-summary-mark-article nil (int-to-string rating)))
- (gnus-message 3 "Invalid rating")))))
-
-(defun grouplens-next-unread-article (rating)
- "Select unread article after current one."
- (interactive "P")
- (when rating
- (bbb-summary-rate-article rating))
- (gnus-summary-next-unread-article))
-
-(defun grouplens-best-unread-article (rating)
- "Select unread article after current one."
- (interactive "P")
- (when rating
- (bbb-summary-rate-article rating))
- (gnus-summary-best-unread-article))
-
-(defun grouplens-summary-catchup-and-exit (rating)
- "Mark all articles not marked as unread in this newsgroup as read, then exit.
-If prefix argument ALL is non-nil, all articles are marked as read."
- (interactive "P")
- (when rating
- (bbb-summary-rate-article rating))
- (if (numberp rating)
- (gnus-summary-catchup-and-exit)
- (gnus-summary-catchup-and-exit rating)))
-
-(defun grouplens-score-thread (score)
- "Raise the score of the articles in the current thread with SCORE."
- (interactive "nRating: ")
- (let (e)
- (save-excursion
- (let ((articles (gnus-summary-articles-in-thread))
- article)
- (while (setq article (pop articles))
- (gnus-summary-goto-subject article)
- (bbb-summary-rate-article score
- (mail-header-id
- (gnus-summary-article-header article)))))
- (setq e (point)))
- (let ((gnus-summary-check-current t))
- (or (zerop (gnus-summary-next-subject 1 t))
- (goto-char e))))
- (gnus-summary-recenter)
- (gnus-summary-position-point)
- (gnus-set-mode-line 'summary))
-
-(defun bbb-exit-group ()
- (bbb-put-ratings)
- (bbb-renew-hash-table))
-
-(defun bbb-get-current-id ()
- (if gnus-current-headers
- (mail-header-id gnus-current-headers)
- (gnus-message 3 "You must select an article before you rate it")))
-
-(defun bbb-grouplens-group-p (group)
- "Say whether GROUP is a GroupLens group."
- (if (member group grouplens-newsgroups) " (GroupLens Enhanced)" ""))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; TIME SPENT READING
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar grouplens-current-starting-time nil)
-
-(defun grouplens-start-timer ()
- (setq grouplens-current-starting-time (current-time)))
-
-(defun grouplens-elapsed-time ()
- (let ((et (bbb-time-float (current-time))))
- (- et (bbb-time-float grouplens-current-starting-time))))
-
-(defun bbb-time-float (timeval)
- (+ (* (car timeval) 65536)
- (cadr timeval)))
-
-(defun grouplens-do-time ()
- (when (member gnus-newsgroup-name grouplens-newsgroups)
- (when grouplens-previous-article
- (let ((elapsed-time (grouplens-elapsed-time))
- (oldrating (assoc grouplens-previous-article
- grouplens-rating-alist)))
- (if (not oldrating)
- (push `(,grouplens-previous-article . (0 . ,elapsed-time))
- grouplens-rating-alist)
- (setcdr oldrating (cons (cadr oldrating) elapsed-time)))))
- (grouplens-start-timer)
- (setq grouplens-previous-article (bbb-get-current-id))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; BUG REPORTING
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst gnus-gl-version "gnus-gl.el 2.50")
-(defconst gnus-gl-maintainer-address "grouplens-bug@cs.umn.edu")
-(defun gnus-gl-submit-bug-report ()
- "Submit via mail a bug report on gnus-gl."
- (interactive)
- (require 'reporter)
- (reporter-submit-bug-report gnus-gl-maintainer-address
- (concat "gnus-gl.el " gnus-gl-version)
- (list 'grouplens-pseudonym
- 'grouplens-bbb-host
- 'grouplens-bbb-port
- 'grouplens-newsgroups
- 'grouplens-bbb-token
- 'grouplens-bbb-process
- 'grouplens-current-group
- 'grouplens-previous-article)
- nil
- 'gnus-gl-get-trace))
-
-(defun gnus-gl-get-trace ()
- "Insert the contents of the BBBD trace buffer."
- (when grouplens-bbb-buffer
- (insert-buffer-substring grouplens-bbb-buffer)))
-
-;;
-;; GroupLens minor mode
-;;
-
-(defvar gnus-grouplens-mode nil
- "Minor mode for providing a GroupLens interface in Gnus summary buffers.")
-
-(defvar gnus-grouplens-mode-map nil)
-
-(unless gnus-grouplens-mode-map
- (setq gnus-grouplens-mode-map (make-keymap))
- (gnus-define-keys
- gnus-grouplens-mode-map
- "n" grouplens-next-unread-article
- "r" bbb-summary-rate-article
- "k" grouplens-score-thread
- "c" grouplens-summary-catchup-and-exit
- "," grouplens-best-unread-article))
-
-(defun gnus-grouplens-make-menu-bar ()
- (unless (boundp 'gnus-grouplens-menu)
- (easy-menu-define
- gnus-grouplens-menu gnus-grouplens-mode-map ""
- '("GroupLens"
- ["Login" bbb-login t]
- ["Rate" bbb-summary-rate-article t]
- ["Next article" grouplens-next-unread-article t]
- ["Best article" grouplens-best-unread-article t]
- ["Raise thread" grouplens-score-thread t]
- ["Report bugs" gnus-gl-submit-bug-report t]))))
-
-(defun gnus-grouplens-mode (&optional arg)
- "Minor mode for providing a GroupLens interface in Gnus summary buffers."
- (interactive "P")
- (when (and (eq major-mode 'gnus-summary-mode)
- (member gnus-newsgroup-name grouplens-newsgroups))
- (make-local-variable 'gnus-grouplens-mode)
- (setq gnus-grouplens-mode
- (if (null arg) (not gnus-grouplens-mode)
- (> (prefix-numeric-value arg) 0)))
- (when gnus-grouplens-mode
- (gnus-make-local-hook 'gnus-select-article-hook)
- (add-hook 'gnus-select-article-hook 'grouplens-do-time nil 'local)
- (gnus-make-local-hook 'gnus-exit-group-hook)
- (add-hook 'gnus-exit-group-hook 'bbb-exit-group nil 'local)
- (make-local-variable 'gnus-score-find-score-files-function)
-
- (cond
- ((eq gnus-grouplens-override-scoring 'combine)
- ;; either add bbb-buld-mid-scores-alist to a list
- ;; or make a list
- (if (listp gnus-score-find-score-files-function)
- (setq gnus-score-find-score-files-function
- (append 'bbb-build-mid-scores-alist
- gnus-score-find-score-files-function))
- (setq gnus-score-find-score-files-function
- (list gnus-score-find-score-files-function
- 'bbb-build-mid-scores-alist))))
- ;; leave the gnus-score-find-score-files variable alone
- ((eq gnus-grouplens-override-scoring 'separate)
- (add-hook 'gnus-select-group-hook
- (lambda ()
- (bbb-get-predictions (bbb-get-all-mids)
- gnus-newsgroup-name))))
- ;; default is to override
- (t
- (setq gnus-score-find-score-files-function
- 'bbb-build-mid-scores-alist)))
-
- ;; Change how summary lines look
- (make-local-variable 'gnus-summary-line-format)
- (make-local-variable 'gnus-summary-line-format-spec)
- (setq gnus-summary-line-format gnus-summary-grouplens-line-format)
- (setq gnus-summary-line-format-spec nil)
- (gnus-update-format-specifications nil 'summary)
- (gnus-update-summary-mark-positions)
-
- ;; Set up the menu.
- (when (and menu-bar-mode
- (gnus-visual-p 'grouplens-menu 'menu))
- (gnus-grouplens-make-menu-bar))
- (gnus-add-minor-mode
- 'gnus-grouplens-mode " GroupLens" gnus-grouplens-mode-map)
- (gnus-run-hooks 'gnus-grouplens-mode-hook))))
-
-(provide 'gnus-gl)
-
-;;; arch-tag: 6f1bab2c-c2a3-4764-9ef6-0714cd5902a4
-;;; gnus-gl.el ends here
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index e92f463a846..d043a515f49 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -28,8 +28,8 @@
;;; Code:
(eval-when-compile
- (require 'cl)
- (defvar tool-bar-mode))
+ (require 'cl))
+(defvar tool-bar-mode)
(require 'gnus)
(require 'gnus-start)
@@ -47,7 +47,11 @@
(require 'mm-url)
(let ((features (cons 'gnus-group features)))
(require 'gnus-sum))
- (defvar gnus-cache-active-hashtb))
+ (unless (boundp 'gnus-cache-active-hashtb)
+ (defvar gnus-cache-active-hashtb nil)))
+
+(autoload 'gnus-agent-total-fetched-for "gnus-agent")
+(autoload 'gnus-cache-total-fetched-for "gnus-cache")
(defcustom gnus-group-archive-directory
"/ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
@@ -61,7 +65,7 @@
:group 'gnus-group-foreign
:type 'directory)
-(defcustom gnus-no-groups-message "No gnus is bad news"
+(defcustom gnus-no-groups-message "No Gnus is good news"
"*Message displayed by Gnus when no groups are available."
:group 'gnus-start
:type 'string)
@@ -151,7 +155,7 @@ list."
(function-item gnus-group-sort-by-rank)
(function :tag "other" nil))))
-(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y:%B%(%g%)%l %O\n"
+(defcustom gnus-group-line-format "%M\%S\%p\%P\%5y:%B%(%g%)%O\n"
"*Format of group lines.
It works along the same lines as a normal formatting string,
with some simple extensions.
@@ -179,11 +183,11 @@ with some simple extensions.
%O Moderated group (string, \"(m)\" or \"\")
%P Topic indentation (string)
%m Whether there is new(ish) mail in the group (char, \"%\")
-%l Whether there are GroupLens predictions for this group (string)
%n Select from where (string)
%z A string that look like `<%s:%n>' if a foreign select method is used
%d The date the group was last entered.
%E Icon as defined by `gnus-group-icon-list'.
+%F The disk space used by the articles fetched by both the cache and agent.
%u User defined specifier. The next character in the format string should
be a letter. Gnus will call the function gnus-user-format-function-X,
where X is the letter following %u. The function will be passed a
@@ -198,10 +202,10 @@ output may end up looking strange when listing both alive and killed
groups.
If you use %o or %O, reading the active file will be slower and quite
-a bit of extra memory will be used. %D will also worsen performance.
-Also note that if you change the format specification to include any
-of these specs, you must probably re-start Gnus to see them go into
-effect.
+a bit of extra memory will be used. %D and %F will also worsen
+performance. Also note that if you change the format specification to
+include any of these specs, you must probably re-start Gnus to see
+them go into effect.
General format specifiers can also be used.
See Info node `(gnus)Formatting Variables'."
@@ -441,13 +445,20 @@ For example:
(defcustom gnus-group-jump-to-group-prompt nil
"Default prompt for `gnus-group-jump-to-group'.
-If non-nil, the value should be a string, e.g. \"nnml:\",
-in which case `gnus-group-jump-to-group' offers \"Group: nnml:\"
-in the minibuffer prompt."
+
+If non-nil, the value should be a string or an alist. If it is a string,
+e.g. \"nnml:\", in which case `gnus-group-jump-to-group' offers \"Group:
+nnml:\" in the minibuffer prompt.
+
+If it is an alist, it must consist of \(NUMBER . PROMPT\) pairs, for example:
+\((1 . \"\") (2 . \"nnfolder+archive:\")). The element with number 0 is
+used when no prefix argument is given to `gnus-group-jump-to-group'."
:version "22.1"
:group 'gnus-group-various
:type '(choice (string :tag "Prompt string")
- (const :tag "Empty" nil)))
+ (const :tag "Empty" nil)
+ (repeat (cons (integer :tag "Argument")
+ (string :tag "Prompt string")))))
(defvar gnus-group-listing-limit 1000
"*A limit of the number of groups when listing.
@@ -513,11 +524,12 @@ simple manner.")
(?P gnus-group-indentation ?s)
(?E gnus-tmp-group-icon ?s)
(?B gnus-tmp-summary-live ?c)
- (?l gnus-tmp-grouplens ?s)
(?z gnus-tmp-news-method-string ?s)
(?m (gnus-group-new-mail gnus-tmp-group) ?c)
(?d (gnus-group-timestamp-string gnus-tmp-group) ?s)
- (?u gnus-tmp-user-defined ?s)))
+ (?u gnus-tmp-user-defined ?s)
+ (?F (gnus-total-fetched-for gnus-tmp-group) ?s)
+ ))
(defvar gnus-group-mode-line-format-alist
`((?S gnus-tmp-news-server ?s)
@@ -649,6 +661,7 @@ simple manner.")
"r" gnus-group-rename-group
"R" gnus-group-make-rss-group
"c" gnus-group-customize
+ "z" gnus-group-compact-group
"x" gnus-group-nnimap-expunge
"\177" gnus-group-delete-group
[delete] gnus-group-delete-group)
@@ -731,7 +744,8 @@ simple manner.")
"?" gnus-group-list-plus)
(gnus-define-keys (gnus-group-score-map "W" gnus-group-mode-map)
- "f" gnus-score-flush-cache)
+ "f" gnus-score-flush-cache
+ "e" gnus-score-edit-all-score)
(gnus-define-keys (gnus-group-help-map "H" gnus-group-mode-map)
"c" gnus-group-fetch-charter
@@ -826,6 +840,8 @@ simple manner.")
(gnus-group-group-name)]
["Select quick" gnus-group-quick-select-group (gnus-group-group-name)]
["Customize" gnus-group-customize (gnus-group-group-name)]
+ ["Compact" gnus-group-compact-group
+ :active (gnus-group-group-name)]
("Edit"
["Parameters" gnus-group-edit-group-parameters
:included (not (gnus-topic-mode-p))
@@ -1011,7 +1027,7 @@ Pre-defined symbols include `gnus-group-tool-bar-gnome' and
(const :tag "Retro look" gnus-group-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
@@ -1054,7 +1070,7 @@ Pre-defined symbols include `gnus-group-tool-bar-gnome' and
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
@@ -1073,7 +1089,7 @@ See `gmm-tool-bar-from-list' for the format of the list."
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
@@ -1084,7 +1100,7 @@ These items are not displayed in the Gnus group mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-group-tool-bar-update
:group 'gnus-group)
@@ -1144,7 +1160,8 @@ The following commands are available:
(use-local-map gnus-group-mode-map)
(buffer-disable-undo)
(setq truncate-lines t)
- (setq buffer-read-only t)
+ (setq buffer-read-only t
+ show-trailing-whitespace nil)
(gnus-set-default-directory)
(gnus-update-format-specifications nil 'group 'group-mode)
(gnus-update-group-mark-positions)
@@ -1203,7 +1220,10 @@ The following commands are available:
(defun gnus-group-name-charset (method group)
(if (null method)
(setq method (gnus-find-method-for-group group)))
- (let ((item (assoc method gnus-group-name-charset-method-alist))
+ (let ((item (or (assoc method gnus-group-name-charset-method-alist)
+ (and (consp method)
+ (assoc (list (car method) (cadr method))
+ gnus-group-name-charset-method-alist))))
(alist gnus-group-name-charset-group-alist)
result)
(if item
@@ -1245,7 +1265,7 @@ Also see the `gnus-group-use-permanent-levels' variable."
(gnus-group-setup-buffer)
(gnus-update-format-specifications nil 'group 'group-mode)
(let ((case-fold-search nil)
- (props (text-properties-at (gnus-point-at-bol)))
+ (props (text-properties-at (point-at-bol)))
(empty (= (point-min) (point-max)))
(group (gnus-group-group-name))
number)
@@ -1277,7 +1297,7 @@ Also see the `gnus-group-use-permanent-levels' variable."
(point-min) (point-max)
'gnus-group (gnus-intern-safe
group gnus-active-hashtb))))
- (let ((newsrc (cdddr (gnus-gethash group gnus-newsrc-hashtb))))
+ (let ((newsrc (cdddr (gnus-group-entry group))))
(while (and newsrc
(not (gnus-goto-char
(text-property-any
@@ -1332,7 +1352,7 @@ if it is a string, only list groups matching REGEXP."
group (gnus-info-group info)
params (gnus-info-params info)
newsrc (cdr newsrc)
- unread (car (gnus-gethash group gnus-newsrc-hashtb)))
+ unread (gnus-group-unread group))
(when not-in-list
(setq not-in-list (delete group not-in-list)))
(when (gnus-group-prepare-logic
@@ -1432,7 +1452,7 @@ if it is a string, only list groups matching REGEXP."
"Update the current line in the group buffer."
(let* ((buffer-read-only nil)
(group (gnus-group-group-name))
- (entry (and group (gnus-gethash group gnus-newsrc-hashtb)))
+ (entry (and group (gnus-group-entry group)))
gnus-group-indentation)
(when group
(and entry
@@ -1449,7 +1469,7 @@ if it is a string, only list groups matching REGEXP."
(defun gnus-group-insert-group-line-info (group)
"Insert GROUP on the current line."
- (let ((entry (gnus-gethash group gnus-newsrc-hashtb))
+ (let ((entry (gnus-group-entry group))
(gnus-group-indentation (gnus-group-group-indentation))
active info)
(if entry
@@ -1576,10 +1596,6 @@ if it is a string, only list groups matching REGEXP."
(gnus-tmp-process-marked
(if (member gnus-tmp-group gnus-group-marked)
gnus-process-mark ? ))
- (gnus-tmp-grouplens
- (or (and gnus-use-grouplens
- (bbb-grouplens-group-p gnus-tmp-group))
- ""))
(buffer-read-only nil)
beg end
header gnus-tmp-header) ; passed as parameter to user-funcs.
@@ -1616,7 +1632,7 @@ if it is a string, only list groups matching REGEXP."
"Highlight the current line according to `gnus-group-highlight'."
(let* ((list gnus-group-highlight)
(p (point))
- (end (gnus-point-at-eol))
+ (end (point-at-eol))
;; now find out where the line starts and leave point there.
(beg (progn (beginning-of-line) (point)))
(group (gnus-group-group-name))
@@ -1667,7 +1683,7 @@ already."
(loc (point-min))
found buffer-read-only)
;; Enter the current status into the dribble buffer.
- (let ((entry (gnus-gethash group gnus-newsrc-hashtb)))
+ (let ((entry (gnus-group-entry group)))
(when (and entry
(not (gnus-ephemeral-group-p group)))
(gnus-dribble-enter
@@ -1692,7 +1708,7 @@ already."
;; go, and insert it there (or at the end of the buffer).
(if gnus-goto-missing-group-function
(funcall gnus-goto-missing-group-function group)
- (let ((entry (cddr (gnus-gethash group gnus-newsrc-hashtb))))
+ (let ((entry (cddr (gnus-group-entry group))))
(while (and entry (car entry)
(not
(gnus-goto-char
@@ -1752,24 +1768,24 @@ already."
(defun gnus-group-group-name ()
"Get the name of the newsgroup on the current line."
- (let ((group (get-text-property (gnus-point-at-bol) 'gnus-group)))
+ (let ((group (get-text-property (point-at-bol) 'gnus-group)))
(when group
(symbol-name group))))
(defun gnus-group-group-level ()
"Get the level of the newsgroup on the current line."
- (get-text-property (gnus-point-at-bol) 'gnus-level))
+ (get-text-property (point-at-bol) 'gnus-level))
(defun gnus-group-group-indentation ()
"Get the indentation of the newsgroup on the current line."
- (or (get-text-property (gnus-point-at-bol) 'gnus-indentation)
+ (or (get-text-property (point-at-bol) 'gnus-indentation)
(and gnus-group-indentation-function
(funcall gnus-group-indentation-function))
""))
(defun gnus-group-group-unread ()
"Get the number of unread articles of the newsgroup on the current line."
- (get-text-property (gnus-point-at-bol) 'gnus-unread))
+ (get-text-property (point-at-bol) 'gnus-unread))
(defun gnus-group-new-mail (group)
(if (nnmail-new-mail-p (gnus-group-real-name group))
@@ -1827,6 +1843,18 @@ If FIRST-TOO, the current line is also eligible as a target."
(goto-char (or pos beg))
(and pos t))))
+(defun gnus-total-fetched-for (group)
+ (let* ((size-in-cache (or (gnus-cache-total-fetched-for group) 0))
+ (size-in-agent (or (gnus-agent-total-fetched-for group) 0))
+ (size (+ size-in-cache size-in-agent))
+ (suffix '("B" "K" "M" "G"))
+ (scale 1024.0)
+ (cutoff scale))
+ (while (> size cutoff)
+ (setq size (/ size scale)
+ suffix (cdr suffix)))
+ (format "%5.1f%s" size (car suffix))))
+
;;; Gnus group mode commands
;; Group marking.
@@ -1848,15 +1876,14 @@ If FIRST-TOO, the current line is also eligible as a target."
;; Go to the mark position.
(beginning-of-line)
(forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2))
- (subst-char-in-region
- (point) (1+ (point)) (char-after)
- (if unmark
- (progn
- (setq gnus-group-marked (delete group gnus-group-marked))
- ? )
+ (delete-char 1)
+ (if unmark
+ (progn
+ (setq gnus-group-marked (delete group gnus-group-marked))
+ (insert-char ? 1 t))
(setq gnus-group-marked
(cons group (delete group gnus-group-marked)))
- gnus-process-mark)))
+ (insert-char gnus-process-mark 1 t)))
(unless no-advance
(gnus-group-next-group 1))
(decf n))
@@ -1872,10 +1899,8 @@ If FIRST-TOO, the current line is also eligible as a target."
(defun gnus-group-unmark-all-groups ()
"Unmark all groups."
(interactive)
- (let ((groups gnus-group-marked))
- (save-excursion
- (while groups
- (gnus-group-remove-mark (pop groups)))))
+ (save-excursion
+ (mapc 'gnus-group-remove-mark gnus-group-marked))
(gnus-group-position-point))
(defun gnus-group-mark-region (unmark beg end)
@@ -2021,8 +2046,7 @@ group."
(unless group
(error "No group on current line"))
(setq marked (gnus-info-marks
- (nth 2 (setq entry (gnus-gethash
- group gnus-newsrc-hashtb)))))
+ (nth 2 (setq entry (gnus-group-entry group)))))
;; This group might be a dead group. In that case we have to get
;; the number of unread articles from `gnus-active-hashtb'.
(setq number
@@ -2052,11 +2076,11 @@ articles in the group."
(forward-line -1))
(gnus-group-read-group all t))
-(defun gnus-group-quick-select-group (&optional all)
- "Select the current group \"quickly\".
-This means that no highlighting or scoring will be performed.
-If ALL (the prefix argument) is 0, don't even generate the summary
-buffer.
+(defun gnus-group-quick-select-group (&optional all group)
+ "Select the GROUP \"quickly\".
+This means that no highlighting or scoring will be performed. If
+ALL (the prefix argument) is 0, don't even generate the summary
+buffer. If GROUP is nil, use current group.
This might be useful if you want to toggle threading
before entering the group."
@@ -2067,7 +2091,7 @@ before entering the group."
gnus-home-score-file
gnus-apply-kill-hook
gnus-summary-expunge-below)
- (gnus-group-read-group all t)))
+ (gnus-group-read-group all t group)))
(defun gnus-group-visible-select-group (&optional all)
"Select the current group without hiding any articles."
@@ -2091,14 +2115,86 @@ be permanent."
(gnus-group-read-ephemeral-group
(gnus-group-prefixed-name group method) method)))
+(defun gnus-group-name-at-point ()
+ "Return a group name from around point if it exists, or nil."
+ (if (eq major-mode 'gnus-group-mode)
+ (let ((group (gnus-group-group-name)))
+ (when group
+ (gnus-group-decoded-name group)))
+ (let ((regexp "[][\C-@-\t\v-*,/:-@\\^`{-\C-?]*\
+\\(nn[a-z]+\\(?:\\+[^][\C-@-*,/:-@\\^`{-\C-?]+\\)?:\
+\[^][\C-@-*,./:-@\\^`{-\C-?]+\\(?:\\.[^][\C-@-*,./:-@\\^`{-\C-?]+\\)*\
+\\|[^][\C-@-*,./:-@\\^`{-\C-?]+\\(?:\\.[^][\C-@-*,./:-@\\^`{-\C-?]+\\)+\\)")
+ (start (point))
+ (case-fold-search nil))
+ (prog1
+ (if (or (and (not (or (eobp)
+ (looking-at "[][\C-@-*,/;-@\\^`{-\C-?]")))
+ (prog1 t
+ (skip-chars-backward "^][\C-@-\t\v-*,/;-@\\^`{-\C-?"
+ (point-at-bol))))
+ (and (looking-at "[][\C-@-\t\v-*,/;-@\\^`{-\C-?]*$")
+ (prog1 t
+ (skip-chars-backward "][\C-@-\t\v-*,/;-@\\^`{-\C-?")
+ (skip-chars-backward "^][\C-@-\t\v-*,/;-@\\^`{-\C-?"
+ (point-at-bol))))
+ (string-match "\\`[][\C-@-\t\v-*,/;-@\\^`{-\C-?]*\\'"
+ (buffer-substring (point-at-bol) (point))))
+ (when (looking-at regexp)
+ (match-string 1))
+ (let (group distance)
+ (when (looking-at regexp)
+ (setq group (match-string 1)
+ distance (- (match-beginning 1) (match-beginning 0))))
+ (skip-chars-backward "][\C-@-\t\v-*,/;-@\\^`{-\C-?")
+ (skip-chars-backward "^][\C-@-\t\v-*,/;-@\\^`{-\C-?"
+ (point-at-bol))
+ (if (looking-at regexp)
+ (if (and group (<= distance (- start (match-end 0))))
+ group
+ (match-string 1))
+ group)))
+ (goto-char start)))))
+
+(defun gnus-group-completing-read (prompt &optional collection predicate
+ require-match initial-input hist def
+ &rest args)
+ "Read a group name with completion. Non-ASCII group names are allowed.
+The arguments are the same as `completing-read' except that COLLECTION
+and HIST default to `gnus-active-hashtb' and `gnus-group-history'
+respectively if they are omitted."
+ (let (group)
+ (mapatoms (lambda (symbol)
+ (setq group (symbol-name symbol))
+ (set (intern (if (string-match "[^\000-\177]" group)
+ (gnus-group-decoded-name group)
+ group)
+ collection)
+ group))
+ (prog1
+ (or collection
+ (setq collection (or gnus-active-hashtb [0])))
+ (setq collection (gnus-make-hashtable (length collection)))))
+ (setq group (apply 'completing-read prompt collection predicate
+ require-match initial-input
+ (or hist 'gnus-group-history)
+ def args))
+ (or (prog1
+ (symbol-value (intern-soft group collection))
+ (setq collection nil))
+ (mm-encode-coding-string group (gnus-group-name-charset nil group)))))
+
;;;###autoload
(defun gnus-fetch-group (group &optional articles)
"Start Gnus if necessary and enter GROUP.
+If ARTICLES, display those articles.
Returns whether the fetching was successful or not."
- (interactive (list (completing-read "Group name: " gnus-active-hashtb)))
- (unless (get-buffer gnus-group-buffer)
+ (interactive (list (gnus-group-completing-read "Group name: "
+ nil nil nil
+ (gnus-group-name-at-point))))
+ (unless (gnus-alive-p)
(gnus-no-server))
- (gnus-group-read-group articles nil group))
+ (gnus-group-read-group (if articles nil t) nil group articles))
;;;###autoload
(defun gnus-fetch-group-other-frame (group)
@@ -2156,10 +2252,7 @@ Return the name of the group if selection was successful."
(interactive
(list
;; (gnus-read-group "Group name: ")
- (completing-read
- "Group: " gnus-active-hashtb
- nil nil nil
- 'gnus-group-history)
+ (gnus-group-completing-read "Group: ")
(gnus-read-method "From method: ")))
;; Transform the select method into a unique server.
(when (stringp method)
@@ -2205,15 +2298,20 @@ Return the name of the group if selection was successful."
(message "Quit reading the ephemeral group")
nil)))))
-(defun gnus-group-jump-to-group (group)
- "Jump to newsgroup GROUP."
+(defun gnus-group-jump-to-group (group &optional prompt)
+ "Jump to newsgroup GROUP.
+
+If PROMPT (the prefix) is a number, use the prompt specified in
+`gnus-group-jump-to-group-prompt'."
(interactive
- (list (mm-string-make-unibyte
- (completing-read
- "Group: " gnus-active-hashtb nil
- (gnus-read-active-file-p)
- gnus-group-jump-to-group-prompt
- 'gnus-group-history))))
+ (list (gnus-group-completing-read
+ "Group: " nil nil (gnus-read-active-file-p)
+ (if current-prefix-arg
+ (cdr (assq current-prefix-arg gnus-group-jump-to-group-prompt))
+ (or (and (stringp gnus-group-jump-to-group-prompt)
+ gnus-group-jump-to-group-prompt)
+ (let ((p (cdr (assq 0 gnus-group-jump-to-group-prompt))))
+ (and (stringp p) p)))))))
(when (equal group "")
(error "Empty group name"))
@@ -2361,6 +2459,25 @@ If EXCLUDE-GROUP, do not go to that group."
(gnus-group-position-point)
(and best-point (gnus-group-group-name))))
+;; Is there something like an after-point-motion-hook?
+;; (inhibit-point-motion-hooks?). Is there a tool-bar-update function?
+
+;; (defun gnus-group-menu-bar-update ()
+;; (let* ((buf (list (with-current-buffer gnus-group-buffer
+;; (current-buffer))))
+;; (name (buffer-name (car buf))))
+;; (setcdr buf
+;; (if (> (length name) 27)
+;; (concat (substring name 0 12)
+;; "..."
+;; (substring name -12))
+;; name))
+;; (menu-bar-update-buffers-1 buf)))
+
+;; (defun gnus-group-position-point ()
+;; (gnus-goto-colon)
+;; (gnus-group-menu-bar-update))
+
(defun gnus-group-first-unread-group ()
"Go to the first group with unread articles."
(interactive)
@@ -2382,10 +2499,19 @@ If EXCLUDE-GROUP, do not go to that group."
(interactive)
(gnus-enter-server-buffer))
-(defun gnus-group-make-group (name &optional method address args)
+(defun gnus-group-make-group-simple (&optional group)
+ "Add a new newsgroup.
+The user will be prompted for GROUP."
+ (interactive (list (gnus-group-completing-read "Group: ")))
+ (gnus-group-make-group (gnus-group-real-name group)
+ (gnus-group-server group)
+ nil nil t))
+
+(defun gnus-group-make-group (name &optional method address args encoded)
"Add a new newsgroup.
The user will be prompted for a NAME, for a select METHOD, and an
-ADDRESS."
+ADDRESS. NAME should be a human-readable string (i.e., not be encoded
+even if it contains non-ASCII characters) unless ENCODED is non-nil."
(interactive
(list
(gnus-read-group "Group name: ")
@@ -2393,6 +2519,10 @@ ADDRESS."
(when (stringp method)
(setq method (or (gnus-server-to-method method) method)))
+ (unless encoded
+ (setq name (mm-encode-coding-string
+ name
+ (gnus-group-name-charset method name))))
(let* ((meth (gnus-method-simplify
(when (and method
(not (gnus-server-equal method gnus-select-method)))
@@ -2400,15 +2530,14 @@ ADDRESS."
method))))
(nname (if method (gnus-group-prefixed-name name meth) name))
backend info)
- (when (gnus-gethash nname gnus-newsrc-hashtb)
+ (when (gnus-group-entry nname)
(error "Group %s already exists" (gnus-group-decoded-name nname)))
;; Subscribe to the new group.
(gnus-group-change-level
(setq info (list t nname gnus-level-default-subscribed nil nil meth))
gnus-level-default-subscribed gnus-level-killed
(and (gnus-group-group-name)
- (gnus-gethash (gnus-group-group-name)
- gnus-newsrc-hashtb))
+ (gnus-group-entry (gnus-group-group-name)))
t)
;; Make it active.
(gnus-set-active nname (cons 1 0))
@@ -2475,7 +2604,7 @@ be removed from the server, even when it's empty."
(gnus-message 6 "Deleting group %s...done" group-decoded)
(gnus-group-goto-group group)
(gnus-group-kill-group 1 t)
- (gnus-sethash group nil gnus-active-hashtb)
+ (gnus-set-active group nil)
t)))
(gnus-group-position-point)))
@@ -2484,14 +2613,19 @@ be removed from the server, even when it's empty."
When used interactively, GROUP is the group under point
and NEW-NAME will be prompted for."
(interactive
- (list
- (gnus-group-group-name)
- (progn
- (unless (gnus-check-backend-function
- 'request-rename-group (gnus-group-group-name))
- (error "This back end does not support renaming groups"))
- (gnus-read-group "Rename group to: "
- (gnus-group-real-name (gnus-group-group-name))))))
+ (let ((group (gnus-group-group-name))
+ method new-name)
+ (unless (gnus-check-backend-function 'request-rename-group group)
+ (error "This back end does not support renaming groups"))
+ (setq new-name (gnus-read-group
+ "Rename group to: "
+ (gnus-group-real-name (gnus-group-decoded-name group)))
+ method (gnus-info-method (gnus-get-info group)))
+ (list group (mm-encode-coding-string
+ new-name
+ (gnus-group-name-charset
+ method
+ (gnus-group-prefixed-name new-name method))))))
(unless (gnus-check-backend-function 'request-rename-group group)
(error "This back end does not support renaming groups"))
@@ -2510,29 +2644,34 @@ and NEW-NAME will be prompted for."
(gnus-group-real-name new-name)
(gnus-info-method (gnus-get-info group)))))
- (when (gnus-active new-name)
- (error "The group %s already exists" new-name))
-
- (gnus-message 6 "Renaming group %s to %s..." group new-name)
- (prog1
- (if (progn
- (gnus-group-goto-group group)
- (not (when (< (gnus-group-group-level) gnus-level-zombie)
- (gnus-request-rename-group group new-name))))
- (gnus-error 3 "Couldn't rename group %s to %s" group new-name)
- ;; We rename the group internally by killing it...
- (gnus-group-kill-group)
- ;; ... changing its name ...
- (setcar (cdar gnus-list-of-killed-groups) new-name)
- ;; ... and then yanking it. Magic!
- (gnus-group-yank-group)
- (gnus-set-active new-name (gnus-active group))
- (gnus-message 6 "Renaming group %s to %s...done" group new-name)
- new-name)
- (setq gnus-killed-list (delete group gnus-killed-list))
- (gnus-set-active group nil)
- (gnus-dribble-touch)
- (gnus-group-position-point)))
+ (let ((decoded-group (gnus-group-decoded-name group))
+ (decoded-new-name (gnus-group-decoded-name new-name)))
+ (when (gnus-active new-name)
+ (error "The group %s already exists" decoded-new-name))
+
+ (gnus-message 6 "Renaming group %s to %s..."
+ decoded-group decoded-new-name)
+ (prog1
+ (if (progn
+ (gnus-group-goto-group group)
+ (not (when (< (gnus-group-group-level) gnus-level-zombie)
+ (gnus-request-rename-group group new-name))))
+ (gnus-error 3 "Couldn't rename group %s to %s"
+ decoded-group decoded-new-name)
+ ;; We rename the group internally by killing it...
+ (gnus-group-kill-group)
+ ;; ... changing its name ...
+ (setcar (cdar gnus-list-of-killed-groups) new-name)
+ ;; ... and then yanking it. Magic!
+ (gnus-group-yank-group)
+ (gnus-set-active new-name (gnus-active group))
+ (gnus-message 6 "Renaming group %s to %s...done"
+ decoded-group decoded-new-name)
+ new-name)
+ (setq gnus-killed-list (delete group gnus-killed-list))
+ (gnus-set-active group nil)
+ (gnus-dribble-touch)
+ (gnus-group-position-point))))
(defun gnus-group-edit-group (group &optional part)
"Edit the group on the current line."
@@ -2642,7 +2781,7 @@ group already exists:
(interactive)
(let ((name (gnus-group-prefixed-name "gnus-help" '(nndoc "gnus-help")))
(file (nnheader-find-etc-directory "gnus-tut.txt" t)))
- (if (gnus-gethash name gnus-newsrc-hashtb)
+ (if (gnus-group-entry name)
(cond ((eq noerror nil)
(error "Documentation group already exists"))
((eq noerror t)
@@ -2685,19 +2824,17 @@ If called with a prefix argument, ask for the file type."
nil))))
(setq type found)))
(setq file (expand-file-name file))
- (let ((name (gnus-generate-new-group-name
- (gnus-group-prefixed-name
- (file-name-nondirectory file) '(nndoc ""))))
- (encodable (mm-coding-system-p 'utf-8)))
+ (let* ((name (gnus-generate-new-group-name
+ (gnus-group-prefixed-name
+ (file-name-nondirectory file) '(nndoc ""))))
+ (method (list 'nndoc file
+ (list 'nndoc-address file)
+ (list 'nndoc-article-type (or type 'guess))))
+ (coding (gnus-group-name-charset method name)))
+ (setcar (cdr method) (mm-encode-coding-string file coding))
(gnus-group-make-group
- (if encodable
- (mm-encode-coding-string (gnus-group-real-name name) 'utf-8)
- (gnus-group-real-name name))
- (list 'nndoc (if encodable
- (mm-encode-coding-string file 'utf-8)
- file)
- (list 'nndoc-address file)
- (list 'nndoc-article-type (or type 'guess))))))
+ (mm-encode-coding-string (gnus-group-real-name name) coding)
+ method nil nil t)))
(defvar nnweb-type-definition)
(defvar gnus-group-web-type-history nil)
@@ -2738,8 +2875,8 @@ If SOLID (the prefix), create a solid group."
(cons (current-buffer)
(if (eq major-mode 'gnus-summary-mode) 'summary 'group))))))
+(defvar nnrss-group-alist)
(eval-when-compile
- (defvar nnrss-group-alist)
(defun nnrss-discover-feed (arg))
(defun nnrss-save-server-data (arg)))
(defun gnus-group-make-rss-group (&optional url)
@@ -2751,25 +2888,23 @@ If there is, use Gnus to create an nnrss group"
(setq url (read-from-minibuffer "URL to Search for RSS: ")))
(let ((feedinfo (nnrss-discover-feed url)))
(if feedinfo
- (let ((title (gnus-newsgroup-savable-name
- (read-from-minibuffer "Title: "
- (gnus-newsgroup-savable-name
- (or (cdr (assoc 'title
- feedinfo))
- "")))))
- (desc (read-from-minibuffer "Description: "
- (cdr (assoc 'description
- feedinfo))))
- (href (cdr (assoc 'href feedinfo)))
- (encodable (mm-coding-system-p 'utf-8)))
- (when encodable
+ (let* ((title (gnus-newsgroup-savable-name
+ (read-from-minibuffer "Title: "
+ (gnus-newsgroup-savable-name
+ (or (cdr (assoc 'title
+ feedinfo))
+ "")))))
+ (desc (read-from-minibuffer "Description: "
+ (cdr (assoc 'description
+ feedinfo))))
+ (href (cdr (assoc 'href feedinfo)))
+ (coding (gnus-group-name-charset '(nnrss "") title)))
+ (when coding
;; Unify non-ASCII text.
(setq title (mm-decode-coding-string
- (mm-encode-coding-string title 'utf-8) 'utf-8)))
- (gnus-group-make-group (if encodable
- (mm-encode-coding-string title 'utf-8)
- title)
- '(nnrss ""))
+ (mm-encode-coding-string title coding)
+ coding)))
+ (gnus-group-make-group title '(nnrss ""))
(push (list title href desc) nnrss-group-alist)
(nnrss-save-server-data nil))
(error "No feeds found for %s" url))))
@@ -2816,7 +2951,7 @@ Given a prefix, create a full group."
(interactive "P")
(let ((group (gnus-group-prefixed-name
(if all "ding.archives" "ding.recent") '(nndir ""))))
- (when (gnus-gethash group gnus-newsrc-hashtb)
+ (when (gnus-group-entry group)
(error "Archive group already exists"))
(gnus-group-make-group
(gnus-group-real-name group)
@@ -2840,7 +2975,7 @@ mail messages or news articles in files that have numeric names."
(let ((ext "")
(i 0)
group)
- (while (or (not group) (gnus-gethash group gnus-newsrc-hashtb))
+ (while (or (not group) (gnus-group-entry group))
(setq group
(gnus-group-prefixed-name
(expand-file-name ext dir)
@@ -2859,7 +2994,7 @@ score file entries for articles to include in the group."
(list
(read-string "nnkiboze group name: ")
(read-string "Source groups (regexp): ")
- (let ((headers (mapcar (lambda (group) (list group))
+ (let ((headers (mapcar 'list
'("subject" "from" "number" "date" "message-id"
"references" "chars" "lines" "xref"
"followup" "all" "body" "head")))
@@ -2910,7 +3045,7 @@ score file entries for articles to include in the group."
(let* ((method (list 'nnvirtual "^$"))
(pgroup (gnus-group-prefixed-name group method)))
;; Check whether it exists already.
- (when (gnus-gethash pgroup gnus-newsrc-hashtb)
+ (when (gnus-group-entry pgroup)
(error "Group %s already exists" pgroup))
;; Subscribe the new group after the group on the current line.
(gnus-subscribe-group pgroup (gnus-group-group-name) method)
@@ -3082,7 +3217,7 @@ If REVERSE, sort in reverse order."
(let (entries infos)
;; First find all the group entries for these groups.
(while groups
- (push (nthcdr 2 (gnus-gethash (pop groups) gnus-newsrc-hashtb))
+ (push (nthcdr 2 (gnus-group-entry (pop groups)))
entries))
;; Then sort the infos.
(setq infos
@@ -3163,8 +3298,8 @@ sort in reverse order."
(defun gnus-group-sort-by-unread (info1 info2)
"Sort by number of unread articles."
- (let ((n1 (car (gnus-gethash (gnus-info-group info1) gnus-newsrc-hashtb)))
- (n2 (car (gnus-gethash (gnus-info-group info2) gnus-newsrc-hashtb))))
+ (let ((n1 (gnus-group-unread (gnus-info-group info1)))
+ (n2 (gnus-group-unread (gnus-info-group info2))))
(< (or (and (numberp n1) n1) 0)
(or (and (numberp n2) n2) 0))))
@@ -3284,13 +3419,15 @@ up is returned."
(when (eq 'nnvirtual (car method))
(nnvirtual-catchup-group
(gnus-group-real-name group) (nth 1 method) all)))
- (if (>= (gnus-group-level group) gnus-level-zombie)
- (gnus-message 2 "Dead groups can't be caught up")
- (if (prog1
- (gnus-group-goto-group group)
- (gnus-group-catchup group all))
- (gnus-group-update-group-line)
- (setq ret (1+ ret)))))
+ (cond
+ ((>= (gnus-group-level group) gnus-level-zombie)
+ (gnus-message 2 "Dead groups can't be caught up"))
+ ((prog1
+ (gnus-group-goto-group group)
+ (gnus-group-catchup group all))
+ (gnus-group-update-group-line))
+ (t
+ (setq ret (1+ ret)))))
(gnus-group-next-unread-group 1)
ret)))
@@ -3305,9 +3442,9 @@ Cross references (Xref: header) of articles are ignored."
If ALL is non-nil, all articles are marked as read.
The return value is the number of articles that were marked as read,
or nil if no action could be taken."
- (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
+ (let* ((entry (gnus-group-entry group))
(num (car entry))
- (marks (nth 3 (nth 2 entry)))
+ (marks (gnus-info-marks (nth 2 entry)))
(unread (gnus-sequence-of-unread-articles group)))
;; Remove entries for this group.
(nnmail-purge-split-history (gnus-group-real-name group))
@@ -3322,16 +3459,18 @@ or nil if no action could be taken."
(list (cdr (assq 'dormant marks))
'del '(dormant))))
(setq unread (gnus-range-add (gnus-range-add
- unread (cdr (assq 'dormant marks)))
- (cdr (assq 'tick marks))))
+ unread (cdr (assq 'dormant marks)))
+ (cdr (assq 'tick marks))))
(gnus-add-marked-articles group 'tick nil nil 'force)
(gnus-add-marked-articles group 'dormant nil nil 'force))
;; Do auto-expirable marks if that's required.
(when (gnus-group-auto-expirable-p group)
- (gnus-range-map (lambda (article)
- (gnus-add-marked-articles group 'expire (list article))
- (gnus-request-set-mark group (list (list (list article) 'add '(expire)))))
- unread))
+ (gnus-range-map
+ (lambda (article)
+ (gnus-add-marked-articles group 'expire (list article))
+ (gnus-request-set-mark group (list (list (list article)
+ 'add '(expire)))))
+ unread))
(let ((gnus-newsgroup-name group))
(gnus-run-hooks 'gnus-group-catchup-group-hook))
num)))
@@ -3413,17 +3552,15 @@ Uses the process/prefix convention."
s))))))
(unless (and (>= level 1) (<= level gnus-level-killed))
(error "Invalid level: %d" level))
- (let ((groups (gnus-group-process-prefix n))
- group)
- (while (setq group (pop groups))
- (gnus-group-remove-mark group)
- (gnus-message 6 "Changed level of %s from %d to %d"
- (gnus-group-decoded-name group)
- (or (gnus-group-group-level) gnus-level-killed)
- level)
- (gnus-group-change-level
- group level (or (gnus-group-group-level) gnus-level-killed))
- (gnus-group-update-group-line)))
+ (dolist (group (gnus-group-process-prefix n))
+ (gnus-group-remove-mark group)
+ (gnus-message 6 "Changed level of %s from %d to %d"
+ (gnus-group-decoded-name group)
+ (or (gnus-group-group-level) gnus-level-killed)
+ level)
+ (gnus-group-change-level
+ group level (or (gnus-group-group-level) gnus-level-killed))
+ (gnus-group-update-group-line))
(gnus-group-position-point))
(defun gnus-group-unsubscribe (&optional n)
@@ -3461,13 +3598,9 @@ If given numerical prefix, toggle the N next groups."
"Toggle subscription to GROUP.
Killed newsgroups are subscribed. If SILENT, don't try to update the
group line."
- (interactive
- (list (completing-read
- "Group: " gnus-active-hashtb nil
- (gnus-read-active-file-p)
- nil
- 'gnus-group-history)))
- (let ((newsrc (gnus-gethash group gnus-newsrc-hashtb)))
+ (interactive (list (gnus-group-completing-read
+ "Group: " nil nil (gnus-read-active-file-p))))
+ (let ((newsrc (gnus-group-entry group)))
(cond
((string-match "^[ \t]*$" group)
(error "Empty group name"))
@@ -3491,7 +3624,7 @@ group line."
gnus-level-zombie)
gnus-level-killed)
(when (gnus-group-group-name)
- (gnus-gethash (gnus-group-group-name) gnus-newsrc-hashtb)))
+ (gnus-group-entry (gnus-group-group-name))))
(unless silent
(gnus-group-update-group group)))
(t (error "No such newsgroup: %s" group)))
@@ -3530,12 +3663,10 @@ The killed newsgroups can be yanked by using \\[gnus-group-yank-group]."
(count-lines
(progn
(goto-char begin)
- (beginning-of-line)
- (point))
+ (point-at-bol))
(progn
(goto-char end)
- (beginning-of-line)
- (point))))))
+ (point-at-bol))))))
(goto-char begin)
(beginning-of-line) ;Important when LINES < 1
(gnus-group-kill-group lines)))
@@ -3559,7 +3690,7 @@ of groups killed."
(setq level (gnus-group-group-level))
(gnus-delete-line)
(when (and (not discard)
- (setq entry (gnus-gethash group gnus-newsrc-hashtb)))
+ (setq entry (gnus-group-entry group)))
(gnus-undo-register
`(progn
(gnus-group-goto-group ,(gnus-group-group-name))
@@ -3582,7 +3713,7 @@ of groups killed."
(funcall gnus-group-change-level-function
group gnus-level-killed 3))
(cond
- ((setq entry (gnus-gethash group gnus-newsrc-hashtb))
+ ((setq entry (gnus-group-entry group))
(push (cons (car entry) (nth 2 entry))
gnus-list-of-killed-groups)
(setcdr (cdr entry) (cdddr entry)))
@@ -3615,7 +3746,7 @@ yanked) a list of yanked groups is returned."
(setq prev (gnus-group-group-name))
(gnus-group-change-level
info (gnus-info-level (cdr info)) gnus-level-killed
- (and prev (gnus-gethash prev gnus-newsrc-hashtb))
+ (and prev (gnus-group-entry prev))
t)
(gnus-group-insert-group-line-info group)
(gnus-undo-register
@@ -3774,6 +3905,7 @@ re-scanning. If ARG is non-nil and not a number, this will force
(gnus-get-unread-articles arg))
(let ((gnus-read-active-file (if arg nil gnus-read-active-file)))
(gnus-get-unread-articles arg)))
+ (gnus-check-reasonable-setup)
(gnus-run-hooks 'gnus-after-getting-new-news-hook)
(gnus-group-list-groups (and (numberp arg)
(max (car gnus-group-list-mode) arg)))))
@@ -3798,15 +3930,17 @@ If DONT-SCAN is non-nil, scan non-activated groups as well."
(gnus-group-remove-mark group)
;; Bypass any previous denials from the server.
(gnus-remove-denial (setq method (gnus-find-method-for-group group)))
- (if (gnus-activate-group group (if dont-scan nil 'scan))
- (progn
- (gnus-get-unread-articles-in-group
- (gnus-get-info group) (gnus-active group) t)
+ (if (gnus-activate-group group (if dont-scan nil 'scan) nil method)
+ (let ((info (gnus-get-info group))
+ (active (gnus-active group)))
+ (when info
+ (gnus-request-update-info info method))
+ (gnus-get-unread-articles-in-group info active)
(unless (gnus-virtual-group-p group)
(gnus-close-group group))
(when gnus-agent
(gnus-agent-save-group-info
- method (gnus-group-real-name group) (gnus-active group)))
+ method (gnus-group-real-name group) active))
(gnus-group-update-group group))
(if (eq (gnus-server-status (gnus-find-method-for-group group))
'denied)
@@ -3852,7 +3986,7 @@ to use."
If given a prefix argument, prompt for a group."
(interactive
(list (or (when current-prefix-arg
- (completing-read "Group: " gnus-active-hashtb))
+ (gnus-group-completing-read "Group: "))
(gnus-group-group-name)
gnus-newsgroup-name)))
(unless group
@@ -3880,7 +4014,7 @@ If given a prefix argument, prompt for a group."
If given a prefix argument, prompt for a group."
(interactive
(list (or (when current-prefix-arg
- (completing-read "Group: " gnus-active-hashtb))
+ (gnus-group-completing-read "Group: "))
(gnus-group-group-name)
gnus-newsgroup-name)))
(unless group
@@ -4106,14 +4240,12 @@ The hook `gnus-suspend-gnus-hook' is called before actually suspending."
(gnus-offer-save-summaries)
;; Kill Gnus buffers except for group mode buffer.
(let ((group-buf (get-buffer gnus-group-buffer)))
- (mapcar (lambda (buf)
- (unless (or (member buf (list group-buf gnus-dribble-buffer))
- (progn
- (save-excursion
- (set-buffer buf)
- (eq major-mode 'message-mode))))
- (gnus-kill-buffer buf)))
- (gnus-buffers))
+ (dolist (buf (gnus-buffers))
+ (unless (or (eq buf group-buf)
+ (eq buf gnus-dribble-buffer)
+ (with-current-buffer buf
+ (eq major-mode 'message-mode)))
+ (gnus-kill-buffer buf)))
(setq gnus-backlog-articles nil)
(gnus-kill-gnus-frames)
(when group-buf
@@ -4197,17 +4329,15 @@ and the second element is the address."
;; Suggested by mapjph@bath.ac.uk.
(completing-read
"Address: "
- (mapcar (lambda (server) (list server))
- gnus-secondary-servers)))
+ (mapcar 'list gnus-secondary-servers)))
;; We got a server name.
how))))
(gnus-browse-foreign-server method))
(defun gnus-group-set-info (info &optional method-only-group part)
(when (or info part)
- (let* ((entry (gnus-gethash
- (or method-only-group (gnus-info-group info))
- gnus-newsrc-hashtb))
+ (let* ((entry (gnus-group-entry
+ (or method-only-group (gnus-info-group info))))
(part-info info)
(info (if method-only-group (nth 2 entry) info))
method)
@@ -4240,15 +4370,15 @@ and the second element is the address."
(if (stringp method) method
(prin1-to-string (car method)))
(and (consp method)
- (nth 1 (gnus-info-method info))))
+ (nth 1 (gnus-info-method info)))
+ nil t)
;; It's a native group.
- (gnus-group-make-group (gnus-info-group info))))
+ (gnus-group-make-group (gnus-info-group info) nil nil nil t)))
(gnus-message 6 "Note: New group created")
(setq entry
- (gnus-gethash (gnus-group-prefixed-name
- (gnus-group-real-name (gnus-info-group info))
- (or (gnus-info-method info) gnus-select-method))
- gnus-newsrc-hashtb))))
+ (gnus-group-entry (gnus-group-prefixed-name
+ (gnus-group-real-name (gnus-info-group info))
+ (or (gnus-info-method info) gnus-select-method))))))
;; Whether it was a new group or not, we now have the entry, so we
;; can do the update.
(if entry
@@ -4461,6 +4591,40 @@ This command may read the active file."
(gnus-add-marked-articles
group 'expire (list article))))))
+
+;;;
+;;; Group compaction. -- dvl
+;;;
+
+(defun gnus-group-compact-group (group)
+ "Compact the current group.
+Compaction means removing gaps between article numbers. Hence, this
+operation is only meaningful for back ends using one file per article
+\(e.g. nnml).
+
+Note: currently only implemented in nnml."
+ (interactive (list (gnus-group-group-name)))
+ (unless group
+ (error "No group to compact"))
+ (unless (gnus-check-backend-function 'request-compact-group group)
+ (error "This back end does not support group compaction"))
+ (let ((group-decoded (gnus-group-decoded-name group)))
+ (gnus-message 6 "\
+Compacting group %s... (this may take a long time)"
+ group-decoded)
+ (prog1
+ (if (not (gnus-request-compact-group group))
+ (gnus-error 3 "Couldn't compact group %s" group-decoded)
+ (gnus-message 6 "Compacting group %s...done" group-decoded)
+ t)
+ ;; Invalidate the "original article" buffer which might be out of date.
+ ;; #### NOTE: Yes, this might be a bit rude, but since compaction
+ ;; #### will not happen very often, I think this is acceptable.
+ (let ((original (get-buffer gnus-original-article-buffer)))
+ (and original (gnus-kill-buffer original)))
+ ;; Update the group line to reflect new information (art number etc).
+ (gnus-group-update-group-line))))
+
(provide 'gnus-group)
;;; arch-tag: 2eb5440f-0bca-4091-814c-e37817536af6
diff --git a/lisp/gnus/gnus-int.el b/lisp/gnus/gnus-int.el
index bbd997aee8a..52b5e350653 100644
--- a/lisp/gnus/gnus-int.el
+++ b/lisp/gnus/gnus-int.el
@@ -75,7 +75,7 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
;; Read server name with completion.
(setq gnus-nntp-server
(completing-read "NNTP server: "
- (mapcar (lambda (server) (list server))
+ (mapcar 'list
(cons (list gnus-nntp-server)
gnus-secondary-servers))
nil nil gnus-nntp-server)))
@@ -209,11 +209,12 @@ If it is down, start it up (again)."
"Open a connection to GNUS-COMMAND-METHOD."
(when (stringp gnus-command-method)
(setq gnus-command-method (gnus-server-to-method gnus-command-method)))
- (let ((elem (assoc gnus-command-method gnus-opened-servers)))
+ (let ((elem (assoc gnus-command-method gnus-opened-servers))
+ (server (gnus-method-to-server-name gnus-command-method)))
;; If this method was previously denied, we just return nil.
(if (eq (nth 1 elem) 'denied)
(progn
- (gnus-message 1 "Denied server")
+ (gnus-message 1 "Denied server %s" server)
nil)
;; Open the server.
(let* ((open-server-function (gnus-get-function gnus-command-method 'open-server))
@@ -224,11 +225,11 @@ If it is down, start it up (again)."
(nthcdr 2 gnus-command-method))
(error
(gnus-message 1 (format
- "Unable to open server due to: %s"
- (error-message-string err)))
+ "Unable to open server %s due to: %s"
+ server (error-message-string err)))
nil)
(quit
- (gnus-message 1 "Quit trying to open server")
+ (gnus-message 1 "Quit trying to open server %s" server)
nil)))
open-offline)
;; If this hasn't been opened before, we add it to the list.
@@ -253,9 +254,9 @@ If it is down, start it up (again)."
((and
(not gnus-batch-mode)
(gnus-y-or-n-p
- (format "Unable to open %s:%s, go offline? "
- (car gnus-command-method)
- (cadr gnus-command-method))))
+ (format
+ "Unable to open server %s, go offline? "
+ server)))
(setq open-offline t)
'offline)
(t
@@ -335,6 +336,23 @@ name. The method this group uses will be queried."
(funcall (gnus-get-function gnus-command-method 'request-regenerate)
(nth 1 gnus-command-method)))
+(defun gnus-request-compact-group (group)
+ (let* ((method (gnus-find-method-for-group group))
+ (gnus-command-method method)
+ (result
+ (funcall (gnus-get-function gnus-command-method
+ 'request-compact-group)
+ (gnus-group-real-name group)
+ (nth 1 gnus-command-method) t)))
+ result))
+
+(defun gnus-request-compact (gnus-command-method)
+ "Request groups compaction from GNUS-COMMAND-METHOD."
+ (when (stringp gnus-command-method)
+ (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
+ (funcall (gnus-get-function gnus-command-method 'request-compact)
+ (nth 1 gnus-command-method)))
+
(defun gnus-request-group (group &optional dont-check gnus-command-method)
"Request GROUP. If DONT-CHECK, no information is required."
(let ((gnus-command-method
@@ -342,7 +360,7 @@ name. The method this group uses will be queried."
(when (stringp gnus-command-method)
(setq gnus-command-method
(inline (gnus-server-to-method gnus-command-method))))
- (funcall (inline (gnus-get-function gnus-command-method 'request-group))
+ (funcall (inline (gnus-get-function gnus-command-method 'request-group))
(gnus-group-real-name group) (nth 1 gnus-command-method)
dont-check)))
@@ -521,12 +539,11 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
(if group (gnus-find-method-for-group group) gnus-command-method))
(gnus-inhibit-demon t)
(mail-source-plugged gnus-plugged))
- (if (or gnus-plugged (not (gnus-agent-method-p gnus-command-method)))
- (progn
- (setq gnus-internal-registry-spool-current-method gnus-command-method)
- (funcall (gnus-get-function gnus-command-method 'request-scan)
- (and group (gnus-group-real-name group))
- (nth 1 gnus-command-method))))))
+ (when (or gnus-plugged (not (gnus-agent-method-p gnus-command-method)))
+ (setq gnus-internal-registry-spool-current-method gnus-command-method)
+ (funcall (gnus-get-function gnus-command-method 'request-scan)
+ (and group (gnus-group-real-name group))
+ (nth 1 gnus-command-method)))))
(defsubst gnus-request-update-info (info gnus-command-method)
"Request that GNUS-COMMAND-METHOD update INFO."
@@ -566,12 +583,12 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
not-deleted))
(defun gnus-request-move-article (article group server accept-function
- &optional last)
+ &optional last move-is-internal)
(let* ((gnus-command-method (gnus-find-method-for-group group))
(result (funcall (gnus-get-function gnus-command-method
'request-move-article)
article (gnus-group-real-name group)
- (nth 1 gnus-command-method) accept-function last)))
+ (nth 1 gnus-command-method) accept-function last move-is-internal)))
(when (and result gnus-agent
(gnus-agent-method-p gnus-command-method))
(gnus-agent-unfetch-articles group (list article)))
@@ -597,7 +614,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
(let ((mail-parse-charset message-default-charset))
(mail-encode-encoded-word-buffer)))
(message-encode-message-body)))
-(let ((gnus-command-method (or gnus-command-method
+ (let ((gnus-command-method (or gnus-command-method
(gnus-find-method-for-group group)))
(result
(funcall
diff --git a/lisp/gnus/gnus-kill.el b/lisp/gnus/gnus-kill.el
index edf463b8a2e..5778a02e168 100644
--- a/lisp/gnus/gnus-kill.el
+++ b/lisp/gnus/gnus-kill.el
@@ -497,7 +497,7 @@ Optional 1st argument COMMAND is default to
(gnus-summary-mark-as-read nil \"X\").
If optional 2nd argument ALL is non-nil, articles marked are also applied to.
If FIELD is an empty string (or nil), entire article body is searched for.
-COMMAND must be a lisp expression or a string representing a key sequence."
+COMMAND must be a Lisp expression or a string representing a key sequence."
;; We don't want to change current point nor window configuration.
(let ((old-buffer (current-buffer)))
(save-excursion
@@ -625,7 +625,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
did-kill)))
(defun gnus-execute (field regexp form &optional backward unread)
- "If FIELD of article header matches REGEXP, execute lisp FORM (or a string).
+ "If FIELD of article header matches REGEXP, execute Lisp FORM (or a string).
If FIELD is an empty string (or nil), entire article body is searched for.
If optional 1st argument BACKWARD is non-nil, do backward instead.
If optional 2nd argument UNREAD is non-nil, articles which are
@@ -691,7 +691,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
(mail-sources nil)
(gnus-use-dribble-file nil)
(gnus-batch-mode t)
- info group newsrc entry
+ info group newsrc unread
;; Disable verbose message.
gnus-novice-user gnus-large-newsgroup
gnus-options-subscribe gnus-auto-subscribed-groups
@@ -703,11 +703,11 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
(setq newsrc (cdr gnus-newsrc-alist))
(while (setq info (pop newsrc))
(setq group (gnus-info-group info)
- entry (gnus-gethash group gnus-newsrc-hashtb))
+ unread (gnus-group-unread group))
(when (and (<= (gnus-info-level info) gnus-level-subscribed)
- (and (car entry)
- (or (eq (car entry) t)
- (not (zerop (car entry))))))
+ (and unread
+ (or (eq unread t)
+ (not (zerop unread)))))
(ignore-errors
(gnus-summary-read-group group nil t nil t))
(when (eq (current-buffer) (get-buffer gnus-summary-buffer))
diff --git a/lisp/gnus/gnus-mh.el b/lisp/gnus/gnus-mh.el
index 66321c0d3e8..48a85071e67 100644
--- a/lisp/gnus/gnus-mh.el
+++ b/lisp/gnus/gnus-mh.el
@@ -41,8 +41,7 @@
(require 'gnus-msg)
(require 'gnus-sum)
-(eval-when-compile
- (defvar mh-lib-progs))
+(defvar mh-lib-progs)
(defun gnus-summary-save-article-folder (&optional arg)
"Append the current article to an mh folder.
diff --git a/lisp/gnus/gnus-ml.el b/lisp/gnus/gnus-ml.el
index b72179645ac..7f8eb2b2888 100644
--- a/lisp/gnus/gnus-ml.el
+++ b/lisp/gnus/gnus-ml.el
@@ -102,8 +102,8 @@ If FORCE is non-nil, replace the old ones."
;; Set up the menu.
(when (gnus-visual-p 'mailing-list-menu 'menu)
(gnus-mailing-list-make-menu-bar))
- (gnus-add-minor-mode 'gnus-mailing-list-mode " Mailing-List"
- gnus-mailing-list-mode-map)
+ (add-minor-mode 'gnus-mailing-list-mode " Mailing-List"
+ gnus-mailing-list-mode-map)
(gnus-run-hooks 'gnus-mailing-list-mode-hook))))
;;; Commands
diff --git a/lisp/gnus/gnus-mlspl.el b/lisp/gnus/gnus-mlspl.el
index 7f8323258ae..1a3467d42f0 100644
--- a/lisp/gnus/gnus-mlspl.el
+++ b/lisp/gnus/gnus-mlspl.el
@@ -34,31 +34,31 @@
(require 'nnmail)
(defvar gnus-group-split-updated-hook nil
- "Hook called just after nnmail-split-fancy is updated by
-gnus-group-split-update.")
+ "Hook called just after `nnmail-split-fancy' is updated by
+`gnus-group-split-update'.")
(defvar gnus-group-split-default-catch-all-group "mail.misc"
"Group name (or arbitrary fancy split) with default splitting rules.
-Used by gnus-group-split and gnus-group-split-update as a fallback
+Used by `gnus-group-split' and `gnus-group-split-update' as a fallback
split, in case none of the group-based splits matches.")
;;;###autoload
(defun gnus-group-split-setup (&optional auto-update catch-all)
- "Set up the split for nnmail-split-fancy.
+ "Set up the split for `nnmail-split-fancy'.
Sets things up so that nnmail-split-fancy is used for mail
splitting, and defines the variable nnmail-split-fancy according with
group parameters.
If AUTO-UPDATE is non-nil (prefix argument accepted, if called
interactively), it makes sure nnmail-split-fancy is re-computed before
-getting new mail, by adding gnus-group-split-update to
-nnmail-pre-get-new-mail-hook.
+getting new mail, by adding `gnus-group-split-update' to
+`nnmail-pre-get-new-mail-hook'.
A non-nil CATCH-ALL replaces the current value of
-gnus-group-split-default-catch-all-group. This variable is only used
+`gnus-group-split-default-catch-all-group'. This variable is only used
by gnus-group-split-update, and only when its CATCH-ALL argument is
nil. This argument may contain any fancy split, that will be added as
-the last split in a `|' split produced by gnus-group-split-fancy,
+the last split in a `|' split produced by `gnus-group-split-fancy',
unless overridden by any group marked as a catch-all group. Typical
uses are as simple as the name of a default mail group, but more
elaborate fancy splits may also be useful to split mail that doesn't
@@ -78,8 +78,8 @@ match any of the group-specified splitting rules. See
It does this by calling by calling (gnus-group-split-fancy nil
nil CATCH-ALL).
-If CATCH-ALL is nil, gnus-group-split-default-catch-all-group is used
-instead. This variable is set by gnus-group-split-setup."
+If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used
+instead. This variable is set by `gnus-group-split-setup'."
(interactive)
(setq nnmail-split-fancy
(gnus-group-split-fancy
@@ -89,10 +89,10 @@ instead. This variable is set by gnus-group-split-setup."
;;;###autoload
(defun gnus-group-split ()
- "Uses information from group parameters in order to split mail.
+ "Use information from group parameters in order to split mail.
See `gnus-group-split-fancy' for more information.
-gnus-group-split is a valid value for nnmail-split-methods."
+`gnus-group-split' is a valid value for `nnmail-split-methods'."
(let (nnmail-split-fancy)
(gnus-group-split-update)
(nnmail-split-fancy)))
diff --git a/lisp/gnus/gnus-move.el b/lisp/gnus/gnus-move.el
index 93fa5a6be08..0a97f8d5bd6 100644
--- a/lisp/gnus/gnus-move.el
+++ b/lisp/gnus/gnus-move.el
@@ -53,10 +53,8 @@ Update the .newsrc.eld file to reflect the change of nntp server."
(save-excursion
;; Go through all groups and translate.
- (let ((newsrc gnus-newsrc-alist)
- (nntp-nov-gap nil)
- info)
- (while (setq info (pop newsrc))
+ (let ((nntp-nov-gap nil))
+ (dolist (info gnus-newsrc-alist)
(when (gnus-group-native-p (gnus-info-group info))
(gnus-move-group-to-server info from-server to-server))))))
@@ -177,8 +175,7 @@ Update the .newsrc.eld file to reflect the change of nntp server."
(new-name (gnus-group-prefixed-name
(gnus-group-real-name group) to-server)))
(gnus-info-set-group info new-name)
- (gnus-sethash new-name (gnus-gethash group gnus-newsrc-hashtb)
- gnus-newsrc-hashtb)
+ (gnus-sethash new-name (gnus-group-entry group) gnus-newsrc-hashtb)
(gnus-sethash group nil gnus-newsrc-hashtb))))
(provide 'gnus-move)
diff --git a/lisp/gnus/gnus-msg.el b/lisp/gnus/gnus-msg.el
index f8e4a7a67d0..f5bf3a7ef65 100644
--- a/lisp/gnus/gnus-msg.el
+++ b/lisp/gnus/gnus-msg.el
@@ -109,6 +109,7 @@ the second with the current group name."
(defcustom gnus-message-setup-hook nil
"Hook run after setting up a message buffer."
:group 'gnus-message
+ :options '(message-remove-blank-cited-lines)
:type 'hook)
(defcustom gnus-bug-create-help-buffer t
@@ -255,7 +256,8 @@ See also the `mml-default-encrypt-method' variable."
:group 'gnus-message
:type 'boolean)
-(defcustom gnus-confirm-mail-reply-to-news nil
+(defcustom gnus-confirm-mail-reply-to-news (and gnus-novice-user
+ (not gnus-expert-user))
"If non-nil, Gnus requests confirmation when replying to news.
This is done because new users often reply by mistake when reading
news.
@@ -263,7 +265,7 @@ This can also be a function receiving the group name as the only
parameter, which should return non-nil if a confirmation is needed; or
a regexp, in which case a confirmation is asked for if the group name
matches the regexp."
- :version "22.1"
+ :version "23.0" ;; No Gnus (default changed)
:group 'gnus-message
:type '(choice (const :tag "No" nil)
(const :tag "Yes" t)
@@ -288,6 +290,16 @@ If nil, the address field will always be empty after invoking
:group 'gnus-message
:type 'boolean)
+(defcustom gnus-message-highlight-citation
+ t ;; gnus-treat-highlight-citation ;; gnus-cite dependency
+ "Enable highlighting of different citation levels in message-mode."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-cite
+ :group 'gnus-message
+ :type 'boolean)
+
+(autoload 'gnus-message-citation-mode "gnus-cite" nil t)
+
;;; Internal variables.
(defvar gnus-inhibit-posting-styles nil
@@ -324,11 +336,7 @@ Thank you for your help in stamping out bugs.
")
(eval-and-compile
- (autoload 'gnus-uu-post-news "gnus-uu" nil t)
- (autoload 'news-setup "rnewspost")
- (autoload 'news-reply-mode "rnewspost")
- (autoload 'rmail-dont-reply-to "mail-utils")
- (autoload 'rmail-output "rmailout"))
+ (autoload 'gnus-uu-post-news "gnus-uu" nil t))
;;;
@@ -369,10 +377,10 @@ Thank you for your help in stamping out bugs.
;;; Internal functions.
-(defun gnus-inews-make-draft ()
+(defun gnus-inews-make-draft (articles)
`(lambda ()
(gnus-inews-make-draft-meta-information
- ,gnus-newsgroup-name ',gnus-article-reply)))
+ ,(gnus-group-decoded-name gnus-newsgroup-name) ',articles)))
(defvar gnus-article-reply nil)
(defmacro gnus-setup-message (config &rest forms)
@@ -421,7 +429,7 @@ Thank you for your help in stamping out bugs.
(not (string= ,group "")))
(push (cons
(intern gnus-draft-meta-information-header)
- (gnus-inews-make-draft))
+ (gnus-inews-make-draft (or ,yanked ,article)))
message-required-headers))
(unwind-protect
(progn
@@ -432,6 +440,9 @@ Thank you for your help in stamping out bugs.
(set (make-local-variable 'gnus-message-group-art)
(cons ,group ,article))
(set (make-local-variable 'gnus-newsgroup-name) ,group)
+ ;; Enable highlighting of different citation levels
+ (when gnus-message-highlight-citation
+ (gnus-message-citation-mode 1))
(gnus-run-hooks 'gnus-message-setup-hook)
(if (eq major-mode 'message-mode)
(let ((mbl1 mml-buffer-list))
@@ -449,12 +460,20 @@ Thank you for your help in stamping out bugs.
(run-hooks 'post-command-hook)
(set-buffer-modified-p nil))))
-(defun gnus-inews-make-draft-meta-information (group article)
- (concat "(\"" group "\" "
- (if article (number-to-string
- (if (listp article)
- (car article)
- article)) "\"\"")
+(defun gnus-inews-make-draft-meta-information (group articles)
+ (when (numberp articles)
+ (setq articles (list articles)))
+ (concat "(\"" group "\""
+ (if articles
+ (concat " "
+ (mapconcat
+ (lambda (elem)
+ (number-to-string
+ (if (consp elem)
+ (car elem)
+ elem)))
+ articles " "))
+ "")
")"))
;;;###autoload
@@ -519,7 +538,7 @@ Gcc: header for archiving purposes."
(gnus-make-local-hook 'message-header-hook)
(add-hook 'message-header-hook 'gnus-agent-possibly-save-gcc nil t))
(setq message-post-method
- `(lambda (arg)
+ `(lambda (&optional arg)
(gnus-post-method arg ,gnus-newsgroup-name)))
(message-add-action
`(when (gnus-buffer-exists-p ,buffer)
@@ -562,9 +581,9 @@ If ARG is 1, prompt for a group name to find the posting style."
(setq gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
- (completing-read "Use posting style of group: "
- gnus-active-hashtb nil
- (gnus-read-active-file-p))
+ (gnus-group-completing-read
+ "Use posting style of group: "
+ nil nil (gnus-read-active-file-p))
(gnus-group-group-name))
""))
;; #### see comment in gnus-setup-message -- drv
@@ -593,9 +612,9 @@ network. The corresponding back end must have a 'request-post method."
(setq gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
- (completing-read "Use group: "
- gnus-active-hashtb nil
- (gnus-read-active-file-p))
+ (gnus-group-completing-read "Use group: "
+ nil nil
+ (gnus-read-active-file-p))
(gnus-group-group-name))
""))
;; #### see comment in gnus-setup-message -- drv
@@ -615,8 +634,8 @@ a news."
(let ((gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
- (completing-read "Newsgroup: " gnus-active-hashtb nil
- (gnus-read-active-file-p))
+ (gnus-group-completing-read "Newsgroup: " nil nil
+ (gnus-read-active-file-p))
(gnus-group-group-name))
""))
;; make sure last viewed article doesn't affect posting styles:
@@ -641,9 +660,9 @@ posting style."
(setq gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
- (completing-read "Use group: "
- gnus-active-hashtb nil
- (gnus-read-active-file-p))
+ (gnus-group-completing-read "Use group: "
+ nil nil
+ (gnus-read-active-file-p))
"")
gnus-newsgroup-name))
;; #### see comment in gnus-setup-message -- drv
@@ -672,9 +691,9 @@ network. The corresponding back end must have a 'request-post method."
(setq gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
- (completing-read "Use group: "
- gnus-active-hashtb nil
- (gnus-read-active-file-p))
+ (gnus-group-completing-read "Use group: "
+ nil nil
+ (gnus-read-active-file-p))
"")
gnus-newsgroup-name))
;; #### see comment in gnus-setup-message -- drv
@@ -682,9 +701,9 @@ network. The corresponding back end must have a 'request-post method."
(progn
(message-news (gnus-group-real-name gnus-newsgroup-name))
(set (make-local-variable 'gnus-discouraged-post-methods)
- (delq
+ (remove
(car (gnus-find-method-for-group gnus-newsgroup-name))
- (copy-sequence gnus-discouraged-post-methods))))))
+ gnus-discouraged-post-methods)))))
(save-excursion
(set-buffer buffer)
(setq gnus-newsgroup-name group)))))
@@ -699,8 +718,8 @@ a news."
(let ((gnus-newsgroup-name
(if arg
(if (= 1 (prefix-numeric-value arg))
- (completing-read "Newsgroup: " gnus-active-hashtb nil
- (gnus-read-active-file-p))
+ (gnus-group-completing-read "Newsgroup: " nil nil
+ (gnus-read-active-file-p))
"")
gnus-newsgroup-name))
;; make sure last viewed article doesn't affect posting styles:
@@ -784,12 +803,10 @@ Uses the process-prefix convention. If given the symbolic
prefix `a', cancel using the standard posting method; if not
post using the current select method."
(interactive (gnus-interactive "P\ny"))
- (let ((articles (gnus-summary-work-articles n))
- (message-post-method
+ (let ((message-post-method
`(lambda (arg)
- (gnus-post-method (eq ',symp 'a) ,gnus-newsgroup-name)))
- article)
- (while (setq article (pop articles))
+ (gnus-post-method (eq ',symp 'a) ,gnus-newsgroup-name))))
+ (dolist (article (gnus-summary-work-articles n))
(when (gnus-summary-select-article t nil nil article)
(when (gnus-eval-in-buffer-window gnus-original-article-buffer
(message-cancel-news))
@@ -1254,14 +1271,12 @@ For the `inline' alternatives, also see the variable
(with-current-buffer gnus-original-article-buffer
(nnmail-fetch-field "to"))))
current-prefix-arg))
- (let ((articles (gnus-summary-work-articles n))
- article)
- (while (setq article (pop articles))
- (gnus-summary-select-article nil nil nil article)
- (save-excursion
- (set-buffer gnus-original-article-buffer)
- (message-resend address))
- (gnus-summary-mark-article-as-forwarded article))))
+ (dolist (article (gnus-summary-work-articles n))
+ (gnus-summary-select-article nil nil nil article)
+ (save-excursion
+ (set-buffer gnus-original-article-buffer)
+ (message-resend address))
+ (gnus-summary-mark-article-as-forwarded article)))
;; From: Matthieu Moy <Matthieu.Moy@imag.fr>
(defun gnus-summary-resend-message-edit ()
@@ -1322,37 +1337,35 @@ The current group name will be inserted at \"%s\".")
(defun gnus-summary-mail-crosspost-complaint (n)
"Send a complaint about crossposting to the current article(s)."
(interactive "P")
- (let ((articles (gnus-summary-work-articles n))
- article)
- (while (setq article (pop articles))
- (set-buffer gnus-summary-buffer)
- (gnus-summary-goto-subject article)
- (let ((group (gnus-group-real-name gnus-newsgroup-name))
- newsgroups followup-to)
- (gnus-summary-select-article)
- (set-buffer gnus-original-article-buffer)
- (if (and (<= (length (message-tokenize-header
- (setq newsgroups
- (mail-fetch-field "newsgroups"))
- ", "))
- 1)
- (or (not (setq followup-to (mail-fetch-field "followup-to")))
- (not (member group (message-tokenize-header
- followup-to ", ")))))
- (if followup-to
- (gnus-message 1 "Followup-to restricted")
- (gnus-message 1 "Not a crossposted article"))
- (set-buffer gnus-summary-buffer)
- (gnus-summary-reply-with-original 1)
- (set-buffer gnus-message-buffer)
- (message-goto-body)
- (insert (format gnus-crosspost-complaint newsgroups group))
- (message-goto-subject)
- (re-search-forward " *$")
- (replace-match " (crosspost notification)" t t)
- (gnus-deactivate-mark)
- (when (gnus-y-or-n-p "Send this complaint? ")
- (message-send-and-exit)))))))
+ (dolist (article (gnus-summary-work-articles n))
+ (set-buffer gnus-summary-buffer)
+ (gnus-summary-goto-subject article)
+ (let ((group (gnus-group-real-name gnus-newsgroup-name))
+ newsgroups followup-to)
+ (gnus-summary-select-article)
+ (set-buffer gnus-original-article-buffer)
+ (if (and (<= (length (message-tokenize-header
+ (setq newsgroups
+ (mail-fetch-field "newsgroups"))
+ ", "))
+ 1)
+ (or (not (setq followup-to (mail-fetch-field "followup-to")))
+ (not (member group (message-tokenize-header
+ followup-to ", ")))))
+ (if followup-to
+ (gnus-message 1 "Followup-to restricted")
+ (gnus-message 1 "Not a crossposted article"))
+ (set-buffer gnus-summary-buffer)
+ (gnus-summary-reply-with-original 1)
+ (set-buffer gnus-message-buffer)
+ (message-goto-body)
+ (insert (format gnus-crosspost-complaint newsgroups group))
+ (message-goto-subject)
+ (re-search-forward " *$")
+ (replace-match " (crosspost notification)" t t)
+ (gnus-deactivate-mark)
+ (when (gnus-y-or-n-p "Send this complaint? ")
+ (message-send-and-exit))))))
(defun gnus-mail-parse-comma-list ()
(let (accumulated
@@ -1401,7 +1414,7 @@ The current group name will be inserted at \"%s\".")
(not (gnus-group-read-only-p group)))
(setq group (read-string "Put in group: " nil (gnus-writable-groups))))
- (when (gnus-gethash group gnus-newsrc-hashtb)
+ (when (gnus-group-entry group)
(error "No such group: %s" group))
(save-excursion
(save-restriction
@@ -1620,8 +1633,11 @@ this is a reply."
(message-tokenize-header gcc " ,")))
;; Copy the article over to some group(s).
(while (setq group (pop groups))
- (unless (gnus-check-server
- (setq method (gnus-inews-group-method group)))
+ (setq method (gnus-inews-group-method group)
+ group (mm-encode-coding-string
+ group
+ (gnus-group-name-charset method group)))
+ (unless (gnus-check-server method)
(error "Can't open server %s" (if (stringp method) method
(car method))))
(unless (gnus-request-group group nil method)
@@ -1667,11 +1683,13 @@ this is a reply."
(concat "^" (regexp-quote mail-header-separator) "$")
nil t)
(replace-match "" t t ))
- (unless (setq group-art
- (gnus-request-accept-article group method t t))
+ (when (or (not (gnus-check-backend-function
+ 'request-accept-article group))
+ (not (setq group-art
+ (gnus-request-accept-article
+ group method t t))))
(gnus-message 1 "Couldn't store article in group %s: %s"
- group (gnus-status-message method))
- (sit-for 2))
+ group (gnus-status-message method)))
(when (and group-art
;; FIXME: Should gcc-mark-as-read work when
;; Gnus is not running?
@@ -1709,8 +1727,13 @@ this is a reply."
(defun gnus-inews-insert-archive-gcc (&optional group)
"Insert the Gcc to say where the article is to be archived."
+ (setq group (cond (group
+ (gnus-group-decoded-name group))
+ (gnus-newsgroup-name
+ (gnus-group-decoded-name gnus-newsgroup-name))
+ (t
+ "")))
(let* ((var gnus-message-archive-group)
- (group (or group gnus-newsgroup-name ""))
(gcc-self-val
(and gnus-newsgroup-name
(not (equal gnus-newsgroup-name ""))
@@ -1892,6 +1915,13 @@ this is a reply."
((eq element 'x-face-file)
(setq element 'x-face
filep t)))
+ ;; Post-processing for the signature posting-style:
+ (and (eq element 'signature) filep
+ message-signature-directory
+ ;; don't actually use the signature directory
+ ;; if message-signature-file contains a path.
+ (not (file-name-directory v))
+ (setq v (nnheader-concat message-signature-directory v)))
;; Get the contents of file elems.
(when (and filep v)
(setq v (with-temp-buffer
diff --git a/lisp/gnus/gnus-nocem.el b/lisp/gnus/gnus-nocem.el
index 7b54687c84c..f3437c64bee 100644
--- a/lisp/gnus/gnus-nocem.el
+++ b/lisp/gnus/gnus-nocem.el
@@ -129,11 +129,12 @@ valid issuer, which is much faster if you are selective about the issuers."
(defun gnus-fill-real-hashtb ()
"Fill up a hash table with the real-name mappings from the user's active file."
- (setq gnus-nocem-real-group-hashtb (gnus-make-hashtable
- (length gnus-newsrc-alist)))
+ (if (hash-table-p gnus-nocem-real-group-hashtb)
+ (clrhash gnus-nocem-real-group-hashtb)
+ (setq gnus-nocem-real-group-hashtb (make-hash-table :test 'equal)))
(mapcar (lambda (group)
(setq group (gnus-group-real-name (car group)))
- (gnus-sethash group t gnus-nocem-real-group-hashtb))
+ (puthash group t gnus-nocem-real-group-hashtb))
gnus-newsrc-alist))
;;;###autoload
@@ -191,7 +192,7 @@ valid issuer, which is much faster if you are selective about the issuers."
(and gnus-nocem-check-from
(let ((case-fold-search t))
(catch 'ok
- (mapcar
+ (mapc
(lambda (author)
(if (consp author)
(setq author (car author)))
@@ -237,11 +238,11 @@ valid issuer, which is much faster if you are selective about the issuers."
(gnus-request-article-this-buffer (mail-header-number header) group)
(goto-char (point-min))
(when (re-search-forward
- "-----BEGIN PGP\\( SIGNED\\)? MESSAGE-----"
+ "-----BEGIN PGP\\(?: SIGNED\\)? MESSAGE-----"
nil t)
(delete-region (point-min) (match-beginning 0)))
(when (re-search-forward
- "-----END PGP \\(MESSAGE\\|SIGNATURE\\)-----\n?"
+ "-----END PGP \\(?:MESSAGE\\|SIGNATURE\\)-----\n?"
nil t)
(delete-region (match-end 0) (point-max)))
(goto-char (point-min))
@@ -304,34 +305,26 @@ valid issuer, which is much faster if you are selective about the issuers."
(while (search-forward "\t" nil t)
(cond
((not (ignore-errors
- (setq group (let ((obarray gnus-nocem-real-group-hashtb))
- (read buf)))))
+ (setq group (gnus-group-real-name (symbol-name (read buf))))
+ (gethash group gnus-nocem-real-group-hashtb)))
;; An error.
)
- ((not (symbolp group))
- ;; Ignore invalid entries.
- )
- ((not (boundp group))
- ;; Make sure all entries in the hashtb are bound.
- (set group nil))
(t
- (when (gnus-gethash (gnus-group-real-name (symbol-name group))
- gnus-nocem-real-group-hashtb)
- ;; Valid group.
- (beginning-of-line)
- (while (eq (char-after) ?\t)
- (forward-line -1))
- (setq id (buffer-substring (point) (1- (search-forward "\t"))))
- (unless (if gnus-nocem-hashtb
- (gnus-gethash id gnus-nocem-hashtb)
- (setq gnus-nocem-hashtb (gnus-make-hashtable))
- nil)
- ;; only store if not already present
- (gnus-sethash id t gnus-nocem-hashtb)
- (push id ncm))
- (forward-line 1)
- (while (eq (char-after) ?\t)
- (forward-line 1))))))
+ ;; Valid group.
+ (beginning-of-line)
+ (while (eq (char-after) ?\t)
+ (forward-line -1))
+ (setq id (buffer-substring (point) (1- (search-forward "\t"))))
+ (unless (if (hash-table-p gnus-nocem-hashtb)
+ (gethash id gnus-nocem-hashtb)
+ (setq gnus-nocem-hashtb (make-hash-table :test 'equal))
+ nil)
+ ;; only store if not already present
+ (puthash id t gnus-nocem-hashtb)
+ (push id ncm))
+ (forward-line 1)
+ (while (eq (char-after) ?\t)
+ (forward-line 1)))))
(when ncm
(setq gnus-nocem-touched-alist t)
(push (cons (let ((time (current-time))) (setcdr (cdr time) nil) time)
@@ -370,7 +363,9 @@ valid issuer, which is much faster if you are selective about the issuers."
(prev pprev)
(expiry (days-to-time gnus-nocem-expiry-wait))
entry)
- (setq gnus-nocem-hashtb (gnus-make-hashtable (* (length alist) 51)))
+ (if (hash-table-p gnus-nocem-hashtb)
+ (clrhash gnus-nocem-hashtb)
+ (setq gnus-nocem-hashtb (make-hash-table :test 'equal)))
(while (setq entry (car alist))
(if (not (time-less-p (time-since (car entry)) expiry))
;; This entry has expired, so we remove it.
@@ -379,7 +374,7 @@ valid issuer, which is much faster if you are selective about the issuers."
;; This is ok, so we enter it into the hashtable.
(setq entry (cdr entry))
(while entry
- (gnus-sethash (car entry) t gnus-nocem-hashtb)
+ (puthash (car entry) t gnus-nocem-hashtb)
(setq entry (cdr entry))))
(setq alist (cdr alist)))))
@@ -397,7 +392,7 @@ valid issuer, which is much faster if you are selective about the issuers."
(defun gnus-nocem-unwanted-article-p (id)
"Say whether article ID in the current group is wanted."
(and gnus-nocem-hashtb
- (gnus-gethash id gnus-nocem-hashtb)))
+ (gethash id gnus-nocem-hashtb)))
(provide 'gnus-nocem)
diff --git a/lisp/gnus/gnus-picon.el b/lisp/gnus/gnus-picon.el
index a9303af5fc8..e9643399719 100644
--- a/lisp/gnus/gnus-picon.el
+++ b/lisp/gnus/gnus-picon.el
@@ -74,6 +74,15 @@ Some people may want to add \"unknown\" to this list."
:type '(repeat string)
:group 'gnus-picon)
+(defcustom gnus-picon-style 'inline
+ "How should picons be displayed.
+If `inline', the textual representation is replaced. If `right', picons are
+added right to the textual representation."
+ ;; FIXME: `right' needs improvement for XEmacs.
+ :type '(choice (const inline)
+ (const right))
+ :group 'gnus-picon)
+
(defface gnus-picon-xbm '((t (:foreground "black" :background "white")))
"Face to show xbm picon in."
:group 'gnus-picon)
@@ -139,14 +148,17 @@ List of pairs (KEY . GLYPH) where KEY is either a filename or an URL.")
file
nil)))
-(defun gnus-picon-insert-glyph (glyph category)
+(defun gnus-picon-insert-glyph (glyph category &optional nostring)
"Insert GLYPH into the buffer.
-GLYPH can be either a glyph or a string."
+GLYPH can be either a glyph or a string. When NOSTRING, no textual
+replacement is added."
+ ;; Using NOSTRING prevents wrong BBDB entries with `gnus-picon-style' set to
+ ;; 'right.
(if (stringp glyph)
(insert glyph)
(gnus-add-wash-type category)
(gnus-add-image category (car glyph))
- (gnus-put-image (car glyph) (cdr glyph) category)))
+ (gnus-put-image (car glyph) (unless nostring (cdr glyph)) category)))
(defun gnus-picon-create-glyph (file)
(or (cdr (assoc file gnus-picon-glyph-alist))
@@ -157,87 +169,107 @@ GLYPH can be either a glyph or a string."
(defun gnus-picon-transform-address (header category)
(gnus-with-article-headers
- (let ((addresses
- (mail-header-parse-addresses
- ;; mail-header-parse-addresses does not work (reliably) on
- ;; decoded headers.
- (or
- (ignore-errors
- (mail-encode-encoded-word-string
- (or (mail-fetch-field header) "")))
- (mail-fetch-field header))))
- spec file point cache)
- (dolist (address addresses)
- (setq address (car address))
- (when (and (stringp address)
- (setq spec (gnus-picon-split-address address)))
- (if (setq cache (cdr (assoc address gnus-picon-cache)))
- (setq spec cache)
- (when (setq file (or (gnus-picon-find-face
- address gnus-picon-user-directories)
- (gnus-picon-find-face
- (concat "unknown@"
- (mapconcat
- 'identity (cdr spec) "."))
- gnus-picon-user-directories)))
- (setcar spec (cons (gnus-picon-create-glyph file)
- (car spec))))
-
- (dotimes (i (1- (length spec)))
- (when (setq file (gnus-picon-find-face
- (concat "unknown@"
- (mapconcat
- 'identity (nthcdr (1+ i) spec) "."))
- gnus-picon-domain-directories t))
- (setcar (nthcdr (1+ i) spec)
- (cons (gnus-picon-create-glyph file)
- (nth (1+ i) spec)))))
- (setq spec (nreverse spec))
- (push (cons address spec) gnus-picon-cache))
-
- (gnus-article-goto-header header)
- (mail-header-narrow-to-field)
- (when (search-forward address nil t)
- (delete-region (match-beginning 0) (match-end 0))
- (setq point (point))
- (while spec
- (goto-char point)
- (if (> (length spec) 2)
- (insert ".")
- (if (= (length spec) 2)
- (insert "@")))
- (gnus-picon-insert-glyph (pop spec) category))))))))
+ (let ((addresses
+ (mail-header-parse-addresses
+ ;; mail-header-parse-addresses does not work (reliably) on
+ ;; decoded headers.
+ (or
+ (ignore-errors
+ (mail-encode-encoded-word-string
+ (or (mail-fetch-field header) "")))
+ (mail-fetch-field header))))
+ spec file point cache len)
+ (dolist (address addresses)
+ (setq address (car address))
+ (when (and (stringp address)
+ (setq spec (gnus-picon-split-address address)))
+ (if (setq cache (cdr (assoc address gnus-picon-cache)))
+ (setq spec cache)
+ (when (setq file (or (gnus-picon-find-face
+ address gnus-picon-user-directories)
+ (gnus-picon-find-face
+ (concat "unknown@"
+ (mapconcat
+ 'identity (cdr spec) "."))
+ gnus-picon-user-directories)))
+ (setcar spec (cons (gnus-picon-create-glyph file)
+ (car spec))))
+
+ (dotimes (i (1- (length spec)))
+ (when (setq file (gnus-picon-find-face
+ (concat "unknown@"
+ (mapconcat
+ 'identity (nthcdr (1+ i) spec) "."))
+ gnus-picon-domain-directories t))
+ (setcar (nthcdr (1+ i) spec)
+ (cons (gnus-picon-create-glyph file)
+ (nth (1+ i) spec)))))
+ (setq spec (nreverse spec))
+ (push (cons address spec) gnus-picon-cache))
+
+ (gnus-article-goto-header header)
+ (mail-header-narrow-to-field)
+ (case gnus-picon-style
+ (right
+ (when (= (length addresses) 1)
+ (setq len (apply '+ (mapcar (lambda (x)
+ (condition-case nil
+ (car (image-size (car x)))
+ (error 0))) spec)))
+ (when (> len 0)
+ (goto-char (point-at-eol))
+ (insert (propertize
+ " " 'display
+ (cons 'space
+ (list :align-to (- (window-width) 1 len))))))
+ (goto-char (point-at-eol))
+ (setq point (point-at-eol))
+ (dolist (image spec)
+ (unless (stringp image)
+ (goto-char point)
+ (gnus-picon-insert-glyph image category 'nostring)))))
+ (inline
+ (when (search-forward address nil t)
+ (delete-region (match-beginning 0) (match-end 0))
+ (setq point (point))
+ (while spec
+ (goto-char point)
+ (if (> (length spec) 2)
+ (insert ".")
+ (if (= (length spec) 2)
+ (insert "@")))
+ (gnus-picon-insert-glyph (pop spec) category))))))))))
(defun gnus-picon-transform-newsgroups (header)
(interactive)
(gnus-with-article-headers
- (gnus-article-goto-header header)
- (mail-header-narrow-to-field)
- (let ((groups (message-tokenize-header (mail-fetch-field header)))
- spec file point)
- (dolist (group groups)
- (unless (setq spec (cdr (assoc group gnus-picon-cache)))
- (setq spec (nreverse (split-string group "[.]")))
- (dotimes (i (length spec))
- (when (setq file (gnus-picon-find-face
- (concat "unknown@"
- (mapconcat
- 'identity (nthcdr i spec) "."))
- gnus-picon-news-directories t))
- (setcar (nthcdr i spec)
- (cons (gnus-picon-create-glyph file)
- (nth i spec)))))
- (push (cons group spec) gnus-picon-cache))
- (when (search-forward group nil t)
- (delete-region (match-beginning 0) (match-end 0))
- (save-restriction
- (narrow-to-region (point) (point))
- (while spec
- (goto-char (point-min))
- (if (> (length spec) 1)
- (insert "."))
- (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon))
- (goto-char (point-max))))))))
+ (gnus-article-goto-header header)
+ (mail-header-narrow-to-field)
+ (let ((groups (message-tokenize-header (mail-fetch-field header)))
+ spec file point)
+ (dolist (group groups)
+ (unless (setq spec (cdr (assoc group gnus-picon-cache)))
+ (setq spec (nreverse (split-string group "[.]")))
+ (dotimes (i (length spec))
+ (when (setq file (gnus-picon-find-face
+ (concat "unknown@"
+ (mapconcat
+ 'identity (nthcdr i spec) "."))
+ gnus-picon-news-directories t))
+ (setcar (nthcdr i spec)
+ (cons (gnus-picon-create-glyph file)
+ (nth i spec)))))
+ (push (cons group spec) gnus-picon-cache))
+ (when (search-forward group nil t)
+ (delete-region (match-beginning 0) (match-end 0))
+ (save-restriction
+ (narrow-to-region (point) (point))
+ (while spec
+ (goto-char (point-min))
+ (if (> (length spec) 1)
+ (insert "."))
+ (gnus-picon-insert-glyph (pop spec) 'newsgroups-picon))
+ (goto-char (point-max))))))))
;;; Commands:
@@ -251,10 +283,9 @@ If picons are already displayed, remove them."
(interactive)
(let ((wash-picon-p buffer-read-only))
(gnus-with-article-buffer
- (if (and wash-picon-p (memq 'from-picon gnus-article-wash-types))
- (gnus-delete-images 'from-picon)
- (gnus-picon-transform-address "from" 'from-picon)))
- ))
+ (if (and wash-picon-p (memq 'from-picon gnus-article-wash-types))
+ (gnus-delete-images 'from-picon)
+ (gnus-picon-transform-address "from" 'from-picon)))))
;;;###autoload
(defun gnus-treat-mail-picon ()
@@ -263,11 +294,10 @@ If picons are already displayed, remove them."
(interactive)
(let ((wash-picon-p buffer-read-only))
(gnus-with-article-buffer
- (if (and wash-picon-p (memq 'mail-picon gnus-article-wash-types))
- (gnus-delete-images 'mail-picon)
- (gnus-picon-transform-address "cc" 'mail-picon)
- (gnus-picon-transform-address "to" 'mail-picon)))
- ))
+ (if (and wash-picon-p (memq 'mail-picon gnus-article-wash-types))
+ (gnus-delete-images 'mail-picon)
+ (gnus-picon-transform-address "cc" 'mail-picon)
+ (gnus-picon-transform-address "to" 'mail-picon)))))
;;;###autoload
(defun gnus-treat-newsgroups-picon ()
@@ -276,11 +306,10 @@ If picons are already displayed, remove them."
(interactive)
(let ((wash-picon-p buffer-read-only))
(gnus-with-article-buffer
- (if (and wash-picon-p (memq 'newsgroups-picon gnus-article-wash-types))
- (gnus-delete-images 'newsgroups-picon)
- (gnus-picon-transform-newsgroups "newsgroups")
- (gnus-picon-transform-newsgroups "followup-to")))
- ))
+ (if (and wash-picon-p (memq 'newsgroups-picon gnus-article-wash-types))
+ (gnus-delete-images 'newsgroups-picon)
+ (gnus-picon-transform-newsgroups "newsgroups")
+ (gnus-picon-transform-newsgroups "followup-to")))))
(provide 'gnus-picon)
diff --git a/lisp/gnus/gnus-range.el b/lisp/gnus/gnus-range.el
index b9b97797d17..d95269372f5 100644
--- a/lisp/gnus/gnus-range.el
+++ b/lisp/gnus/gnus-range.el
@@ -307,7 +307,7 @@ LIST1 and LIST2 have to be sorted over <."
(cdr top)))
(defun gnus-compress-sequence (numbers &optional always-list)
- "Convert list of numbers to a list of ranges or a single range.
+ "Convert sorted list of numbers to a list of ranges or a single range.
If ALWAYS-LIST is non-nil, this function will always release a list of
ranges."
(let* ((first (car numbers))
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 847cbf0a734..d45cc6c5d6d 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -25,11 +25,11 @@
;;; Commentary:
-;; This is the gnus-registry.el package, works with other backends
-;; besides nnmail. The major issue is that it doesn't go across
-;; backends, so for instance if an article is in nnml:sys and you see
-;; a reference to it in nnimap splitting, the article will end up in
-;; nnimap:sys
+;; This is the gnus-registry.el package, which works with all
+;; backends, not just nnmail (e.g. NNTP). The major issue is that it
+;; doesn't go across backends, so for instance if an article is in
+;; nnml:sys and you see a reference to it in nnimap splitting, the
+;; article will end up in nnimap:sys
;; gnus-registry.el intercepts article respooling, moving, deleting,
;; and copying for all backends. If it doesn't work correctly for
@@ -63,6 +63,8 @@
(require 'gnus-util)
(require 'nnmail)
+(defvar gnus-adaptive-word-syntax-table)
+
(defvar gnus-registry-dirty t
"Boolean set to t when the registry is modified")
@@ -71,14 +73,19 @@
:version "22.1"
:group 'gnus)
-(defvar gnus-registry-hashtb nil
+(defvar gnus-registry-hashtb (make-hash-table
+ :size 256
+ :test 'equal)
"*The article registry by Message ID.")
-(defcustom gnus-registry-unfollowed-groups '("delayed" "drafts" "queue")
- "List of groups that gnus-registry-split-fancy-with-parent won't follow.
-The group names are matched, they don't have to be fully qualified."
+(defcustom gnus-registry-unfollowed-groups '("delayed$" "drafts$" "queue$" "INBOX$")
+ "List of groups that gnus-registry-split-fancy-with-parent won't return.
+The group names are matched, they don't have to be fully
+qualified. This parameter tells the Registry 'never split a
+message into a group that matches one of these, regardless of
+references.'"
:group 'gnus-registry
- :type '(repeat string))
+ :type '(repeat regexp))
(defcustom gnus-registry-install nil
"Whether the registry should be installed."
@@ -87,7 +94,8 @@ The group names are matched, they don't have to be fully qualified."
(defcustom gnus-registry-clean-empty t
"Whether the empty registry entries should be deleted.
-Registry entries are considered empty when they have no groups."
+Registry entries are considered empty when they have no groups
+and no extra data."
:group 'gnus-registry
:type 'boolean)
@@ -121,7 +129,10 @@ way."
:group 'gnus-registry
:type 'boolean)
-(defcustom gnus-registry-cache-file "~/.gnus.registry.eld"
+(defcustom gnus-registry-cache-file
+ (nnheader-concat
+ (or gnus-dribble-directory gnus-home-directory "~/")
+ ".gnus.registry.eld")
"File where the Gnus registry will be stored."
:group 'gnus-registry
:type 'file)
@@ -132,13 +143,6 @@ way."
:type '(radio (const :format "Unlimited " nil)
(integer :format "Maximum number: %v")))
-;; Function(s) missing in Emacs 20
-(when (memq nil (mapcar 'fboundp '(puthash)))
- (require 'cl)
- (unless (fboundp 'puthash)
- ;; alias puthash is missing from Emacs 20 cl-extra.el
- (defalias 'puthash 'cl-puthash)))
-
(defun gnus-registry-track-subject-p ()
(memq 'subject gnus-registry-track-extra))
@@ -210,7 +214,7 @@ way."
;; Replace the existing startup file with the temp file.
(rename-file working-file startup-file t)
- (set-file-modes startup-file setmodes)))
+ (gnus-set-file-modes startup-file setmodes)))
(condition-case nil
(delete-file working-file)
(file-error nil)))))
@@ -221,7 +225,7 @@ way."
;; Idea from Dan Christensen <jdc@chow.mat.jhu.edu>
;; Save the gnus-registry file with extra line breaks.
(defun gnus-registry-cache-whitespace (filename)
- (gnus-message 5 "Adding whitespace to %s" filename)
+ (gnus-message 7 "Adding whitespace to %s" filename)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "^(\\|(\\\"" nil t)
@@ -244,10 +248,12 @@ way."
;; remove empty entries
(when gnus-registry-clean-empty
(gnus-registry-clean-empty-function))
- ;; now trim the registry appropriately
- (setq gnus-registry-alist (gnus-registry-trim
- (gnus-hashtable-to-alist
- gnus-registry-hashtb)))
+ ;; now trim and clean text properties from the registry appropriately
+ (setq gnus-registry-alist
+ (gnus-registry-remove-alist-text-properties
+ (gnus-registry-trim
+ (gnus-hashtable-to-alist
+ gnus-registry-hashtb))))
;; really save
(gnus-registry-cache-save)
(setq gnus-registry-entry-caching caching)
@@ -256,11 +262,36 @@ way."
(defun gnus-registry-clean-empty-function ()
"Remove all empty entries from the registry. Returns count thereof."
(let ((count 0))
+
(maphash
(lambda (key value)
- (unless (gnus-registry-fetch-group key)
- (incf count)
- (remhash key gnus-registry-hashtb)))
+ (when (stringp key)
+ (dolist (group (gnus-registry-fetch-groups key))
+ (when (gnus-parameter-registry-ignore group)
+ (gnus-message
+ 10
+ "gnus-registry: deleted ignored group %s from key %s"
+ group key)
+ (gnus-registry-delete-group key group)))
+
+ (unless (gnus-registry-group-count key)
+ (gnus-registry-delete-id key))
+
+ (unless (or
+ (gnus-registry-fetch-group key)
+ ;; TODO: look for specific extra data here!
+ ;; in this example, we look for 'label
+ (gnus-registry-fetch-extra key 'label))
+ (incf count)
+ (gnus-registry-delete-id key))
+
+ (unless (stringp key)
+ (gnus-message
+ 10
+ "gnus-registry key %s was not a string, removing"
+ key)
+ (gnus-registry-delete-id key))))
+
gnus-registry-hashtb)
count))
@@ -269,8 +300,20 @@ way."
(setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist))
(setq gnus-registry-dirty nil))
+(defun gnus-registry-remove-alist-text-properties (v)
+ "Remove text properties from all strings in alist."
+ (if (stringp v)
+ (gnus-string-remove-all-properties v)
+ (if (and (listp v) (listp (cdr v)))
+ (mapcar 'gnus-registry-remove-alist-text-properties v)
+ (if (and (listp v) (stringp (cdr v)))
+ (cons (gnus-registry-remove-alist-text-properties (car v))
+ (gnus-registry-remove-alist-text-properties (cdr v)))
+ v))))
+
(defun gnus-registry-trim (alist)
- "Trim alist to size, using gnus-registry-max-entries."
+ "Trim alist to size, using gnus-registry-max-entries.
+Also, drop all gnus-registry-ignored-groups matches."
(if (null gnus-registry-max-entries)
alist ; just return the alist
;; else, when given max-entries, trim the alist
@@ -283,27 +326,28 @@ way."
(lambda (key value)
(puthash key (gnus-registry-fetch-extra key 'mtime) timehash))
gnus-registry-hashtb)
-
+
;; we use the return value of this setq, which is the trimmed alist
(setq alist
- (nthcdr
- trim-length
- (sort alist
- (lambda (a b)
- (time-less-p
- (cdr (gethash (car a) timehash))
- (cdr (gethash (car b) timehash))))))))))
+ (nthcdr
+ trim-length
+ (sort alist
+ (lambda (a b)
+ (time-less-p
+ (or (cdr (gethash (car a) timehash)) '(0 0 0))
+ (or (cdr (gethash (car b) timehash)) '(0 0 0))))))))))
(defun gnus-registry-action (action data-header from &optional to method)
(let* ((id (mail-header-id data-header))
- (subject (gnus-registry-simplify-subject
- (mail-header-subject data-header)))
- (sender (mail-header-from data-header))
+ (subject (gnus-string-remove-all-properties
+ (gnus-registry-simplify-subject
+ (mail-header-subject data-header))))
+ (sender (gnus-string-remove-all-properties (mail-header-from data-header)))
(from (gnus-group-guess-full-name-from-command-method from))
(to (if to (gnus-group-guess-full-name-from-command-method to) nil))
(to-name (if to to "the Bit Bucket"))
(old-entry (gethash id gnus-registry-hashtb)))
- (gnus-message 5 "Registry: article %s %s from %s to %s"
+ (gnus-message 7 "Registry: article %s %s from %s to %s"
id
(if method "respooling" "going")
from
@@ -321,7 +365,7 @@ way."
(let ((group (gnus-group-guess-full-name-from-command-method group)))
(when (and (stringp id) (string-match "\r$" id))
(setq id (substring id 0 -1)))
- (gnus-message 5 "Registry: article %s spooled to %s"
+ (gnus-message 7 "Registry: article %s spooled to %s"
id
group)
(gnus-registry-add-group id group subject sender)))
@@ -334,36 +378,46 @@ is obtained from the registry. This function can be used as an entry
in `nnmail-split-fancy' or `nnimap-split-fancy', for example like
this: (: gnus-registry-split-fancy-with-parent)
+This function tracks ALL backends, unlike
+`nnmail-split-fancy-with-parent' which tracks only nnmail
+messages.
+
For a message to be split, it looks for the parent message in the
-References or In-Reply-To header and then looks in the registry to
-see which group that message was put in. This group is returned.
+References or In-Reply-To header and then looks in the registry
+to see which group that message was put in. This group is
+returned, unless it matches one of the entries in
+gnus-registry-unfollowed-groups or
+nnmail-split-fancy-with-parent-ignore-groups.
See the Info node `(gnus)Fancy Mail Splitting' for more details."
- (let ((refstr (or (message-fetch-field "references")
- (message-fetch-field "in-reply-to")))
+ (let* ((refstr (or (message-fetch-field "references") "")) ; guarantee string
+ (reply-to (message-fetch-field "in-reply-to")) ; grab reply-to
+ ;; now, if reply-to is valid, append it to the References
+ (refstr (if reply-to
+ (concat refstr " " reply-to)
+ refstr))
(nnmail-split-fancy-with-parent-ignore-groups
(if (listp nnmail-split-fancy-with-parent-ignore-groups)
nnmail-split-fancy-with-parent-ignore-groups
(list nnmail-split-fancy-with-parent-ignore-groups)))
- references res)
- (if refstr
- (progn
- (setq references (nreverse (gnus-split-references refstr)))
- (mapcar (lambda (x)
- (setq res (or (gnus-registry-fetch-group x) res))
- (when (or (gnus-registry-grep-in-list
- res
- gnus-registry-unfollowed-groups)
- (gnus-registry-grep-in-list
- res
- nnmail-split-fancy-with-parent-ignore-groups))
- (setq res nil)))
- references))
+ res)
+ ;; the references string must be valid and parse to valid references
+ (if (and refstr (gnus-extract-references refstr))
+ (dolist (reference (nreverse (gnus-extract-references refstr)))
+ (setq res (or (gnus-registry-fetch-group reference) res))
+ (when (or (gnus-registry-grep-in-list
+ res
+ gnus-registry-unfollowed-groups)
+ (gnus-registry-grep-in-list
+ res
+ nnmail-split-fancy-with-parent-ignore-groups))
+ (setq res nil)))
;; else: there were no references, now try the extra tracking
- (let ((sender (message-fetch-field "from"))
- (subject (gnus-registry-simplify-subject
- (message-fetch-field "subject")))
+ (let ((sender (gnus-string-remove-all-properties(message-fetch-field "from")))
+ (subject (gnus-string-remove-all-properties
+ (gnus-registry-simplify-subject
+ (message-fetch-field "subject"))))
(single-match t))
(when (and single-match
(gnus-registry-track-sender-p)
@@ -379,13 +433,14 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(unless (equal res (gnus-registry-fetch-group key))
(setq single-match nil))
(setq res (gnus-registry-fetch-group key))
- (gnus-message
- ;; raise level of messaging if gnus-registry-track-extra
- (if gnus-registry-track-extra 5 9)
- "%s (extra tracking) traced sender %s to group %s"
- "gnus-registry-split-fancy-with-parent"
- sender
- (if res res "nil")))))
+ (when (and sender res)
+ (gnus-message
+ ;; raise level of messaging if gnus-registry-track-extra
+ (if gnus-registry-track-extra 7 9)
+ "%s (extra tracking) traced sender %s to group %s"
+ "gnus-registry-split-fancy-with-parent"
+ sender
+ res)))))
gnus-registry-hashtb))
(when (and single-match
(gnus-registry-track-subject-p)
@@ -402,24 +457,26 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(unless (equal res (gnus-registry-fetch-group key))
(setq single-match nil))
(setq res (gnus-registry-fetch-group key))
- (gnus-message
- ;; raise level of messaging if gnus-registry-track-extra
- (if gnus-registry-track-extra 5 9)
- "%s (extra tracking) traced subject %s to group %s"
- "gnus-registry-split-fancy-with-parent"
- subject
- (if res res "nil")))))
+ (when (and subject res)
+ (gnus-message
+ ;; raise level of messaging if gnus-registry-track-extra
+ (if gnus-registry-track-extra 7 9)
+ "%s (extra tracking) traced subject %s to group %s"
+ "gnus-registry-split-fancy-with-parent"
+ subject
+ res)))))
gnus-registry-hashtb))
(unless single-match
(gnus-message
- 5
+ 3
"gnus-registry-split-fancy-with-parent: too many extra matches for %s"
refstr)
(setq res nil))))
- (gnus-message
- 5
- "gnus-registry-split-fancy-with-parent traced %s to group %s"
- refstr (if res res "nil"))
+ (when (and refstr res)
+ (gnus-message
+ 5
+ "gnus-registry-split-fancy-with-parent traced %s to group %s"
+ refstr res))
(when (and res gnus-registry-use-long-group-names)
(let ((m1 (gnus-find-method-for-group res))
@@ -436,12 +493,45 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(setq res short-res))
;; else...
(gnus-message
- 5
+ 7
"gnus-registry-split-fancy-with-parent ignored foreign group %s"
res)
(setq res nil))))
res))
+(defun gnus-registry-wash-for-keywords (&optional force)
+ (interactive)
+ (let ((id (gnus-registry-fetch-message-id-fast gnus-current-article))
+ word words)
+ (if (or (not (gnus-registry-fetch-extra id 'keywords))
+ force)
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (article-goto-body)
+ (save-window-excursion
+ (save-restriction
+ (narrow-to-region (point) (point-max))
+ (with-syntax-table gnus-adaptive-word-syntax-table
+ (while (re-search-forward "\\b\\w+\\b" nil t)
+ (setq word (gnus-registry-remove-alist-text-properties
+ (downcase (buffer-substring
+ (match-beginning 0) (match-end 0)))))
+ (if (> (length word) 3)
+ (push word words))))))
+ (gnus-registry-store-extra-entry id 'keywords words)))))
+
+(defun gnus-registry-find-keywords (keyword)
+ (interactive "skeyword: ")
+ (let (articles)
+ (maphash
+ (lambda (key value)
+ (when (gnus-registry-grep-in-list
+ keyword
+ (cdr (gnus-registry-fetch-extra key 'keywords)))
+ (push key articles)))
+ gnus-registry-hashtb)
+ articles))
+
(defun gnus-registry-register-message-ids ()
"Register the Message-ID of every article in the group"
(unless (gnus-parameter-registry-ignore gnus-newsgroup-name)
@@ -472,17 +562,19 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
"Fetch the Subject quickly, using the internal gnus-data-list function"
(if (and (numberp article)
(assoc article (gnus-data-list nil)))
- (gnus-registry-simplify-subject
- (mail-header-subject (gnus-data-header
- (assoc article (gnus-data-list nil)))))
+ (gnus-string-remove-all-properties
+ (gnus-registry-simplify-subject
+ (mail-header-subject (gnus-data-header
+ (assoc article (gnus-data-list nil))))))
nil))
(defun gnus-registry-fetch-sender-fast (article)
"Fetch the Sender quickly, using the internal gnus-data-list function"
(if (and (numberp article)
(assoc article (gnus-data-list nil)))
- (mail-header-from (gnus-data-header
- (assoc article (gnus-data-list nil))))
+ (gnus-string-remove-all-properties
+ (mail-header-from (gnus-data-header
+ (assoc article (gnus-data-list nil)))))
nil))
(defun gnus-registry-grep-in-list (word list)
@@ -491,9 +583,36 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(mapcar 'not
(mapcar
(lambda (x)
- (string-match x word))
+ (string-match word x))
list)))))
+;;; if this extends to more than 'flags, it should be improved to be more generic.
+(defun gnus-registry-fetch-extra-flags (id)
+ "Get the flags of a message, based on the message ID.
+Returns a list of symbol flags or nil."
+ (car-safe (cdr (gnus-registry-fetch-extra id 'flags))))
+
+(defun gnus-registry-has-extra-flag (id flag)
+ "Checks if a message has `flag', based on the message ID."
+ (memq flag (gnus-registry-fetch-extra-flags id)))
+
+(defun gnus-registry-store-extra-flags (id &rest flag-list)
+ "Set the flags of a message, based on the message ID.
+The `flag-list' can be nil, in which case no flags are left."
+ (gnus-registry-store-extra-entry id 'flags (list flag-list)))
+
+(defun gnus-registry-delete-extra-flags (id &rest flag-delete-list)
+ "Delete the message flags in `flag-delete-list', based on the message ID."
+ (let ((flags (gnus-registry-fetch-extra-flags id)))
+ (when flags
+ (dolist (flag flag-delete-list)
+ (setq flags (delq flag flags))))
+ (gnus-registry-store-extra-flags id (car flags))))
+
+(defun gnus-registry-delete-all-extra-flags (id)
+ "Delete all the flags for a message ID."
+ (gnus-registry-store-extra-flags id nil))
+
(defun gnus-registry-fetch-extra (id &optional entry)
"Get the extra data of a message, based on the message ID.
Returns the first place where the trail finds a nonstring."
@@ -551,11 +670,20 @@ The message must have at least one group name."
gnus-registry-hashtb)
(setq gnus-registry-dirty t)))))
+(defun gnus-registry-delete-extra-entry (id key)
+ "Delete a specific entry in the extras field of the registry entry for id."
+ (gnus-registry-store-extra-entry id key nil))
+
(defun gnus-registry-store-extra-entry (id key value)
"Put a specific entry in the extras field of the registry entry for id."
(let* ((extra (gnus-registry-fetch-extra id))
- (alist (cons (cons key value)
- (gnus-assq-delete-all key (gnus-registry-fetch-extra id)))))
+ ;; all the entries except the one for `key'
+ (the-rest (gnus-assq-delete-all key (gnus-registry-fetch-extra id)))
+ (alist (if value
+ (gnus-registry-remove-alist-text-properties
+ (cons (cons key value)
+ the-rest))
+ the-rest)))
(gnus-registry-store-extra id alist)))
(defun gnus-registry-fetch-group (id)
@@ -570,6 +698,23 @@ Returns the first place where the trail finds a group name."
crumb
(gnus-group-short-name crumb))))))))
+(defun gnus-registry-fetch-groups (id)
+ "Get the groups of a message, based on the message ID."
+ (let ((trail (gethash id gnus-registry-hashtb))
+ groups)
+ (dolist (crumb trail)
+ (when (stringp crumb)
+ ;; push the group name into the list
+ (setq
+ groups
+ (cons
+ (if (or (not (stringp crumb)) gnus-registry-use-long-group-names)
+ crumb
+ (gnus-group-short-name crumb))
+ groups))))
+ ;; return the list of groups
+ groups))
+
(defun gnus-registry-group-count (id)
"Get the number of groups of a message, based on the message ID."
(let ((trail (gethash id gnus-registry-hashtb)))
@@ -579,12 +724,11 @@ Returns the first place where the trail finds a group name."
(defun gnus-registry-delete-group (id group)
"Delete a group for a message, based on the message ID."
- (when group
- (when id
+ (when (and group id)
(let ((trail (gethash id gnus-registry-hashtb))
- (group (gnus-group-short-name group)))
+ (short-group (gnus-group-short-name group)))
(puthash id (if trail
- (delete group trail)
+ (delete short-group (delete group trail))
nil)
gnus-registry-hashtb))
;; now, clear the entry if there are no more groups
@@ -593,7 +737,7 @@ Returns the first place where the trail finds a group name."
(gnus-registry-delete-id id)))
;; is this ID still in the registry?
(when (gethash id gnus-registry-hashtb)
- (gnus-registry-store-extra-entry id 'mtime (current-time))))))
+ (gnus-registry-store-extra-entry id 'mtime (current-time)))))
(defun gnus-registry-delete-id (id)
"Delete a message ID from the registry."
diff --git a/lisp/gnus/gnus-salt.el b/lisp/gnus/gnus-salt.el
index e8d3e332ba3..6ecb7b4f3a6 100644
--- a/lisp/gnus/gnus-salt.el
+++ b/lisp/gnus/gnus-salt.el
@@ -128,7 +128,7 @@ It accepts the same format specs that `gnus-summary-line-format' does."
;; Set up the menu.
(when (gnus-visual-p 'pick-menu 'menu)
(gnus-pick-make-menu-bar))
- (gnus-add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map)
+ (add-minor-mode 'gnus-pick-mode " Pick" gnus-pick-mode-map)
(gnus-run-hooks 'gnus-pick-mode-hook))))
(defun gnus-pick-setup-message ()
@@ -360,7 +360,7 @@ This must be bound to a button-down mouse event."
;; Set up the menu.
(when (gnus-visual-p 'binary-menu 'menu)
(gnus-binary-make-menu-bar))
- (gnus-add-minor-mode 'gnus-binary-mode " Binary" gnus-binary-mode-map)
+ (add-minor-mode 'gnus-binary-mode " Binary" gnus-binary-mode-map)
(gnus-run-hooks 'gnus-binary-mode-hook))))
(defun gnus-binary-display-article (article &optional all-header)
@@ -719,7 +719,7 @@ Two predefined functions are available:
(unless (zerop level)
(gnus-tree-indent level)
(insert (cadr gnus-tree-parent-child-edges))
- (setq col (- (setq beg (point)) (gnus-point-at-bol) 1))
+ (setq col (- (setq beg (point)) (point-at-bol) 1))
;; Draw "|" lines upwards.
(while (progn
(forward-line -1)
@@ -743,7 +743,7 @@ Two predefined functions are available:
(defsubst gnus-tree-indent-vertical ()
(let ((len (- (* (1+ gnus-tree-node-length) gnus-tmp-indent)
- (- (point) (gnus-point-at-bol)))))
+ (- (point) (point-at-bol)))))
(when (> len 0)
(insert (make-string len ? )))))
@@ -1016,11 +1016,11 @@ The following commands are available:
(setq button (car buttons)
buttons (cdr buttons))
(if (stringp button)
- (gnus-set-text-properties
+ (set-text-properties
(point)
(prog2 (insert button) (point) (insert " "))
(list 'face gnus-carpal-header-face))
- (gnus-set-text-properties
+ (set-text-properties
(point)
(prog2 (insert (car button)) (point) (insert " "))
(list 'gnus-callback (cdr button)
diff --git a/lisp/gnus/gnus-score.el b/lisp/gnus/gnus-score.el
index f7ba9222937..f910bfb3ec3 100644
--- a/lisp/gnus/gnus-score.el
+++ b/lisp/gnus/gnus-score.el
@@ -37,8 +37,6 @@
(require 'message)
(require 'score-mode)
-(autoload 'ffap-string-at-point "ffap")
-
(defcustom gnus-global-score-files nil
"List of global score files and directories.
Set this variable if you want to use people's score files. One entry
@@ -149,9 +147,15 @@ will be expired along with non-matching score entries."
:type 'boolean)
(defcustom gnus-decay-scores nil
- "*If non-nil, decay non-permanent scores."
+ "*If non-nil, decay non-permanent scores.
+
+If it is a regexp, only decay score files matching regexp."
:group 'gnus-score-decay
- :type 'boolean)
+ :type `(choice (const :tag "never" nil)
+ (const :tag "always" t)
+ (const :tag "adaptive score files"
+ ,(concat "\\." gnus-adaptive-file-suffix "\\'"))
+ (regexp)))
(defcustom gnus-decay-score-function 'gnus-decay-score
"*Function called to decay a score.
@@ -318,6 +322,13 @@ If this variable is nil, exact matching will always be used."
:group 'gnus-score-files
:type 'regexp)
+(defcustom gnus-adaptive-pretty-print nil
+ "If non-nil, adaptive score files fill are pretty printed."
+ :group 'gnus-score-files
+ :group 'gnus-score-adapt
+ :version "23.0" ;; No Gnus
+ :type 'boolean)
+
(defcustom gnus-score-default-header nil
"Default header when entering new scores.
@@ -411,6 +422,18 @@ If nil, the user will be asked for a duration."
:group 'gnus-score-various
:type 'boolean)
+(defcustom gnus-inhibit-slow-scoring nil
+ "Inhibit slow scoring, e.g. scoring on headers or body.
+
+If a regexp, scoring on headers or body is inhibited if the group
+matches the regexp. If it is t, scoring on headers or body is
+inhibited for all groups."
+ :group 'gnus-score-various
+ :version "23.0" ;; No Gnus
+ :type '(choice (const :tag "All" nil)
+ (const :tag "None" t)
+ regexp))
+
;; Internal variables.
@@ -753,7 +776,7 @@ file for the command instead of the current score file."
(setq i (1+ i))))
(goto-char (point-min))
;; display ourselves in a small window at the bottom
- (gnus-appt-select-lowest-window)
+ (gnus-select-lowest-window)
(if (< (/ (window-height) 2) window-min-height)
(switch-to-buffer "*Score Help*")
(split-window)
@@ -1099,6 +1122,16 @@ EXTRA is the possible non-standard header."
4 (substitute-command-keys
"\\<gnus-score-mode-map>\\[gnus-score-edit-exit] to save edits"))))
+(defun gnus-score-edit-all-score ()
+ "Edit the all.SCORE file."
+ (interactive)
+ (find-file (gnus-score-file-name "all"))
+ (gnus-score-mode)
+ (setq gnus-score-edit-exit-function 'gnus-score-edit-done)
+ (gnus-message
+ 4 (substitute-command-keys
+ "\\<gnus-score-mode-map>\\[gnus-score-edit-exit] to save edits")))
+
(defun gnus-score-edit-file (file)
"Edit a score file."
(interactive
@@ -1128,9 +1161,9 @@ If FORMAT, also format the current score file."
(reg " -> +")
(file (save-excursion
(end-of-line)
- (if (and (re-search-backward reg (gnus-point-at-bol) t)
- (re-search-forward reg (gnus-point-at-eol) t))
- (buffer-substring (point) (gnus-point-at-eol))
+ (if (and (re-search-backward reg (point-at-bol) t)
+ (re-search-forward reg (point-at-eol) t))
+ (buffer-substring (point) (point-at-eol))
nil))))
(if (or (not file)
(string-match "\\<\\(non-file rule\\|A file\\)\\>" file)
@@ -1209,7 +1242,9 @@ If FORMAT, also format the current score file."
(decay (car (gnus-score-get 'decay alist)))
(eval (car (gnus-score-get 'eval alist))))
;; Perform possible decays.
- (when (and gnus-decay-scores
+ (when (and (if (stringp gnus-decay-scores)
+ (string-match gnus-decay-scores file)
+ gnus-decay-scores)
(or cached (file-exists-p file))
(or (not decay)
(gnus-decay-scores alist decay)))
@@ -1219,8 +1254,7 @@ If FORMAT, also format the current score file."
;; files.
(when (and files (not global))
(setq lists (apply 'append lists
- (mapcar (lambda (file)
- (gnus-score-load-file file))
+ (mapcar 'gnus-score-load-file
(if adapt-file (cons adapt-file files)
files)))))
(when (and eval (not global))
@@ -1412,12 +1446,13 @@ If FORMAT, also format the current score file."
(setq score (setcdr entry (gnus-delete-alist 'touched score)))
(erase-buffer)
(let (emacs-lisp-mode-hook)
- (if (string-match
- (concat (regexp-quote gnus-adaptive-file-suffix) "$")
- file)
- ;; This is an adaptive score file, so we do not run
- ;; it through `pp'. These files can get huge, and
- ;; are not meant to be edited by human hands.
+ (if (and (not gnus-adaptive-pretty-print)
+ (string-match
+ (concat (regexp-quote gnus-adaptive-file-suffix) "$")
+ file))
+ ;; This is an adaptive score file, so we do not run it through
+ ;; `pp' unless requested. These files can get huge, and are
+ ;; not meant to be edited by human hands.
(gnus-prin1 score)
;; This is a normal score file, so we print it very
;; prettily.
@@ -1518,8 +1553,21 @@ If FORMAT, also format the current score file."
(length (gnus-score-get header score)))
scores)))
;; Call the scoring function for this type of "header".
- (when (setq new (funcall (nth 2 entry) scores header
- now expire trace))
+ (when (if (and gnus-inhibit-slow-scoring
+ (if (and (stringp gnus-inhibit-slow-scoring)
+ ;; Always true here?
+ ;; (stringp gnus-newsgroup-name)
+ (string-match gnus-inhibit-slow-scoring
+ gnus-newsgroup-name))
+ t
+ nil)
+ (> 0 (nth 1 (assoc header gnus-header-index))))
+ (progn
+ (gnus-message
+ 7 "Scoring on headers or body skipped.")
+ nil)
+ (setq new (funcall (nth 2 entry) scores header
+ now expire trace)))
(push new news))))
(when (gnus-buffer-live-p gnus-summary-buffer)
(let ((scored gnus-newsgroup-scored))
@@ -1860,7 +1908,7 @@ score in `gnus-newsgroup-scored' by SCORE."
(goto-char (point-min))
(if (= dmt ?e)
(while (funcall search-func match nil t)
- (and (= (gnus-point-at-bol)
+ (and (= (point-at-bol)
(match-beginning 0))
(= (progn (end-of-line) (point))
(match-end 0))
@@ -2030,7 +2078,7 @@ score in `gnus-newsgroup-scored' by SCORE."
(funcall search-func match nil t))
;; Is it really exact?
(and (eolp)
- (= (gnus-point-at-bol) (match-beginning 0))
+ (= (point-at-bol) (match-beginning 0))
;; Yup.
(progn
(setq found (setq arts (get-text-property
@@ -2120,7 +2168,7 @@ score in `gnus-newsgroup-scored' by SCORE."
(goto-char (point-min))
(while (and (not (eobp))
(search-forward match nil t))
- (when (and (= (gnus-point-at-bol) (match-beginning 0))
+ (when (and (= (point-at-bol) (match-beginning 0))
(eolp))
(setq found (setq arts (get-text-property (point) 'articles)))
(if trace
@@ -2194,23 +2242,19 @@ score in `gnus-newsgroup-scored' by SCORE."
(defun gnus-enter-score-words-into-hashtb (hashtb)
;; Find all the words in the buffer and enter them into
;; the hashtable.
- (let ((syntab (syntax-table))
- word val)
+ (let (word val)
(goto-char (point-min))
- (unwind-protect
- (progn
- (set-syntax-table gnus-adaptive-word-syntax-table)
- (while (re-search-forward "\\b\\w+\\b" nil t)
- (setq val
- (gnus-gethash
- (setq word (downcase (buffer-substring
- (match-beginning 0) (match-end 0))))
- hashtb))
- (gnus-sethash
- word
- (append (get-text-property (gnus-point-at-eol) 'articles) val)
- hashtb)))
- (set-syntax-table syntab))
+ (with-syntax-table gnus-adaptive-word-syntax-table
+ (while (re-search-forward "\\b\\w+\\b" nil t)
+ (setq val
+ (gnus-gethash
+ (setq word (downcase (buffer-substring
+ (match-beginning 0) (match-end 0))))
+ hashtb))
+ (gnus-sethash
+ word
+ (append (get-text-property (point-at-eol) 'articles) val)
+ hashtb)))
;; Make all the ignorable words ignored.
(let ((ignored (append gnus-ignored-adaptive-words
(if gnus-adaptive-word-no-group-words
@@ -2313,39 +2357,35 @@ score in `gnus-newsgroup-scored' by SCORE."
(let* ((hashtb (gnus-make-hashtable 1000))
(date (date-to-day (current-time-string)))
(data gnus-newsgroup-data)
- (syntab (syntax-table))
word d score val)
- (unwind-protect
- (progn
- (set-syntax-table gnus-adaptive-word-syntax-table)
- ;; Go through all articles.
- (while (setq d (pop data))
- (when (and
- (not (gnus-data-pseudo-p d))
- (setq score
- (cdr (assq
- (gnus-data-mark d)
- gnus-adaptive-word-score-alist))))
- ;; This article has a mark that should lead to
- ;; adaptive word rules, so we insert the subject
- ;; and find all words in that string.
- (insert (mail-header-subject (gnus-data-header d)))
- (downcase-region (point-min) (point-max))
- (goto-char (point-min))
- (while (re-search-forward "\\b\\w+\\b" nil t)
- ;; Put the word and score into the hashtb.
- (setq val (gnus-gethash (setq word (match-string 0))
- hashtb))
- (when (or (not gnus-adaptive-word-length-limit)
- (> (length word)
- gnus-adaptive-word-length-limit))
- (setq val (+ score (or val 0)))
- (if (and gnus-adaptive-word-minimum
- (< val gnus-adaptive-word-minimum))
- (setq val gnus-adaptive-word-minimum))
- (gnus-sethash word val hashtb)))
- (erase-buffer))))
- (set-syntax-table syntab))
+ (with-syntax-table gnus-adaptive-word-syntax-table
+ ;; Go through all articles.
+ (while (setq d (pop data))
+ (when (and
+ (not (gnus-data-pseudo-p d))
+ (setq score
+ (cdr (assq
+ (gnus-data-mark d)
+ gnus-adaptive-word-score-alist))))
+ ;; This article has a mark that should lead to
+ ;; adaptive word rules, so we insert the subject
+ ;; and find all words in that string.
+ (insert (mail-header-subject (gnus-data-header d)))
+ (downcase-region (point-min) (point-max))
+ (goto-char (point-min))
+ (while (re-search-forward "\\b\\w+\\b" nil t)
+ ;; Put the word and score into the hashtb.
+ (setq val (gnus-gethash (setq word (match-string 0))
+ hashtb))
+ (when (or (not gnus-adaptive-word-length-limit)
+ (> (length word)
+ gnus-adaptive-word-length-limit))
+ (setq val (+ score (or val 0)))
+ (if (and gnus-adaptive-word-minimum
+ (< val gnus-adaptive-word-minimum))
+ (setq val gnus-adaptive-word-minimum))
+ (gnus-sethash word val hashtb)))
+ (erase-buffer))))
;; Make all the ignorable words ignored.
(let ((ignored (append gnus-ignored-adaptive-words
(if gnus-adaptive-word-no-group-words
@@ -2373,7 +2413,8 @@ score in `gnus-newsgroup-scored' by SCORE."
(when winconf
(set-window-configuration winconf))
(gnus-score-remove-from-cache bufnam)
- (gnus-score-load-file bufnam)))
+ (gnus-score-load-file bufnam)
+ (run-hooks 'gnus-score-edit-done-hook)))
(defun gnus-score-find-trace ()
"Find all score rules that applies to the current article."
@@ -2401,6 +2442,11 @@ score in `gnus-newsgroup-scored' by SCORE."
(interactive)
(bury-buffer nil)
(gnus-summary-expand-window)))
+ (local-set-key "k"
+ (lambda ()
+ (interactive)
+ (kill-buffer (current-buffer))
+ (gnus-summary-expand-window)))
(local-set-key "e" (lambda ()
"Run `gnus-score-edit-file-at-point'."
(interactive)
@@ -2429,7 +2475,7 @@ score in `gnus-newsgroup-scored' by SCORE."
Type `e' to edit score file corresponding to the score rule on current line,
`f' to format (pretty print) the score file and edit it,
`t' toggle to truncate long lines in this buffer,
-`q' to quit.
+`q' to quit, `k' to kill score trace buffer.
The first sexp on each line is the score rule, followed by the file name of
the score file and its full name, including the directory.")
@@ -2775,9 +2821,7 @@ Destroys the current buffer."
(lambda (file)
(cons (inline (gnus-score-file-rank file)) file))
files)))
- (mapcar
- (lambda (f) (cdr f))
- (sort alist 'car-less-than-car)))))
+ (mapcar 'cdr (sort alist 'car-less-than-car)))))
(defun gnus-score-find-alist (group)
"Return list of score files for GROUP.
diff --git a/lisp/gnus/gnus-setup.el b/lisp/gnus/gnus-setup.el
index 55ab016a59e..fe261e119ee 100644
--- a/lisp/gnus/gnus-setup.el
+++ b/lisp/gnus/gnus-setup.el
@@ -140,8 +140,7 @@
(when gnus-use-sc
(add-hook 'mail-citation-hook 'sc-cite-original)
- (setq message-cite-function 'sc-cite-original)
- (autoload 'sc-cite-original "supercite"))
+ (setq message-cite-function 'sc-cite-original))
;;;### (autoloads (gnus gnus-slave gnus-no-server) "gnus" "lisp/gnus.el" (12473 2137))
;;; Generated autoloads from lisp/gnus.el
diff --git a/lisp/gnus/gnus-soup.el b/lisp/gnus/gnus-soup.el
index 241fb6a2c86..f2aa34b1aa1 100644
--- a/lisp/gnus/gnus-soup.el
+++ b/lisp/gnus/gnus-soup.el
@@ -306,7 +306,7 @@ Note -- this function hasn't been implemented yet."
If NOT-ALL, don't pack ticked articles."
(let ((gnus-expert-user t)
(gnus-large-newsgroup nil)
- (entry (gnus-gethash group gnus-newsrc-hashtb)))
+ (entry (gnus-group-entry group)))
(when (or (null entry)
(eq (car entry) t)
(and (car entry)
diff --git a/lisp/gnus/gnus-spec.el b/lisp/gnus/gnus-spec.el
index 2197e286757..f87377cb1ed 100644
--- a/lisp/gnus/gnus-spec.el
+++ b/lisp/gnus/gnus-spec.el
@@ -140,7 +140,7 @@ text properties. This is only needed on XEmacs, as FSF Emacs does this anyway."
(defvar gnus-format-specs
`((version . ,emacs-version)
(gnus-version . ,(gnus-continuum-version))
- (group "%M\%S\%p\%P\%5y: %(%g%)%l\n" ,gnus-group-line-format-spec)
+ (group "%M\%S\%p\%P\%5y: %(%g%)\n" ,gnus-group-line-format-spec)
(summary-dummy "* %(: :%) %S\n"
,gnus-summary-dummy-line-format-spec)
(summary "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n"
@@ -198,12 +198,13 @@ Return a list of updated types."
(not (equal emacs-version
(cdr (assq 'version gnus-format-specs)))))
(setq gnus-format-specs nil))
- ;; Flush the group format spec cache if it doesn't support decoded
- ;; group names.
+ ;; Flush the group format spec cache if there's the grouplens stuff
+ ;; or it doesn't support decoded group names.
(when (memq 'group types)
- (let ((spec (assq 'group gnus-format-specs)))
- (unless (string-match " gnus-tmp-decoded-group[ )]"
- (gnus-prin1-to-string (nth 2 spec)))
+ (let* ((spec (assq 'group gnus-format-specs))
+ (sspec (gnus-prin1-to-string (nth 2 spec))))
+ (when (or (string-match " gnus-tmp-grouplens[ )]" sspec)
+ (not (string-match " gnus-tmp-decoded-group[ )]" sspec)))
(setq gnus-format-specs (delq spec gnus-format-specs)))))
;; Go through all the formats and see whether they need updating.
@@ -296,9 +297,7 @@ Return a list of updated types."
(defun gnus-correct-length (string)
"Return the correct width of STRING."
- (let ((length 0))
- (mapcar (lambda (char) (incf length (gnus-char-width char))) string)
- length))
+ (apply #'+ (mapcar #'char-width string)))
(defun gnus-correct-substring (string start &optional end)
(let ((wstart 0)
@@ -310,14 +309,14 @@ Return a list of updated types."
;; Find the start position.
(while (and (< seek length)
(< wseek start))
- (incf wseek (gnus-char-width (aref string seek)))
+ (incf wseek (char-width (aref string seek)))
(incf seek))
(setq wstart seek)
;; Find the end position.
(while (and (<= seek length)
(or (not end)
(<= wseek end)))
- (incf wseek (gnus-char-width (aref string seek)))
+ (incf wseek (char-width (aref string seek)))
(incf seek))
(setq wend seek)
(substring string wstart (1- wend))))
@@ -622,6 +621,9 @@ are supported for %s."
?s)))
;; Find the specification from `spec-alist'.
((setq elem (cdr (assq (or extended-spec spec) spec-alist))))
+ ;; We used to use "%l" for displaying the grouplens score.
+ ((eq spec ?l)
+ (setq elem '("" ?s)))
(t
(setq elem '("*" ?s))))
(setq elem-type (cadr elem))
@@ -672,7 +674,7 @@ are supported for %s."
(list (car flist)))
;; A single number.
((string= fstring "%d")
- (setq dontinsert)
+ (setq dontinsert t)
(if insert
(list `(princ ,(car flist)))
(list `(int-to-string ,(car flist)))))
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index 9e709d0916c..ca087f9ca4d 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -52,7 +52,7 @@ with some simple extensions.
The following specs are understood:
-%h backend
+%h back end
%n name
%w address
%s status
@@ -116,6 +116,7 @@ If nil, a faster, but more primitive, buffer is used instead."
["Copy" gnus-server-copy-server t]
["Edit" gnus-server-edit-server t]
["Regenerate" gnus-server-regenerate-server t]
+ ["Compact" gnus-server-compact-server t]
["Exit" gnus-server-exit t]))
(easy-menu-define
@@ -165,6 +166,8 @@ If nil, a faster, but more primitive, buffer is used instead."
"g" gnus-server-regenerate-server
+ "z" gnus-server-compact-server
+
"\C-c\C-i" gnus-info-find-node
"\C-c\C-b" gnus-bug))
@@ -189,7 +192,7 @@ If nil, a faster, but more primitive, buffer is used instead."
(defface gnus-server-closed
'((((class color) (background light)) (:foreground "Steel Blue" :italic t))
(((class color) (background dark))
- (:foreground "Light Steel Blue" :italic t))
+ (:foreground "LightBlue" :italic t))
(t (:italic t)))
"Face used for displaying CLOSED servers"
:group 'gnus-server-visual)
@@ -299,7 +302,6 @@ The following commands are available:
(gnus-set-format 'server t)
(let ((alist gnus-server-alist)
(buffer-read-only nil)
- (opened gnus-opened-servers)
done server op-ser)
(erase-buffer)
(setq gnus-inserted-opened-servers nil)
@@ -314,27 +316,26 @@ The following commands are available:
(pop alist)))
;; Then we insert the list of servers that have been opened in
;; this session.
- (while opened
- (when (and (not (member (caar opened) done))
+ (dolist (open gnus-opened-servers)
+ (when (and (not (member (car open) done))
;; Just ignore ephemeral servers.
- (not (member (caar opened) gnus-ephemeral-servers)))
- (push (caar opened) done)
+ (not (member (car open) gnus-ephemeral-servers)))
+ (push (car open) done)
(gnus-server-insert-server-line
- (setq op-ser (format "%s:%s" (caaar opened) (nth 1 (caar opened))))
- (caar opened))
- (push (list op-ser (caar opened)) gnus-inserted-opened-servers))
- (setq opened (cdr opened))))
+ (setq op-ser (format "%s:%s" (caar open) (nth 1 (car open))))
+ (car open))
+ (push (list op-ser (car open)) gnus-inserted-opened-servers))))
(goto-char (point-min))
(gnus-server-position-point))
(defun gnus-server-server-name ()
- (let ((server (get-text-property (gnus-point-at-bol) 'gnus-server)))
+ (let ((server (get-text-property (point-at-bol) 'gnus-server)))
(and server (symbol-name server))))
(defun gnus-server-named-server ()
- "Returns a server name that matches one of the names returned by
-gnus-method-to-server."
- (let ((server (get-text-property (gnus-point-at-bol) 'gnus-named-server)))
+ "Return a server name that matches one of the names returned by
+`gnus-method-to-server'."
+ (let ((server (get-text-property (point-at-bol) 'gnus-named-server)))
(and server (symbol-name server))))
(defalias 'gnus-server-position-point 'gnus-goto-colon)
@@ -377,7 +378,14 @@ gnus-method-to-server."
(if cached
(setq gnus-server-method-cache
(delq cached gnus-server-method-cache)))
- (if entry (setcdr entry info)
+ (if entry
+ (progn
+ ;; Remove the server from `gnus-opened-servers' since
+ ;; it has never been opened with the new `info' yet.
+ (gnus-opened-servers-remove (cdr entry))
+ ;; Don't make a new Lisp object.
+ (setcar (cdr entry) (car info))
+ (setcdr (cdr entry) (cdr info)))
(setq gnus-server-alist
(nconc gnus-server-alist (list (cons server info))))))))
@@ -478,9 +486,8 @@ gnus-method-to-server."
(defun gnus-server-open-all-servers ()
"Open all servers."
(interactive)
- (let ((servers gnus-inserted-opened-servers))
- (while servers
- (gnus-server-open-server (car (pop servers))))))
+ (dolist (server gnus-inserted-opened-servers)
+ (gnus-server-open-server (car server))))
(defun gnus-server-close-server (server)
"Close SERVER."
@@ -510,6 +517,8 @@ gnus-method-to-server."
"Close all servers."
(interactive)
(dolist (server gnus-inserted-opened-servers)
+ (gnus-server-close-server (car server)))
+ (dolist (server gnus-server-alist)
(gnus-server-close-server (car server))))
(defun gnus-server-deny-server (server)
@@ -586,7 +595,8 @@ gnus-method-to-server."
`(lambda (form)
(gnus-server-set-info ,server form)
(gnus-server-list-servers)
- (gnus-server-position-point)))))
+ (gnus-server-position-point))
+ 'edit-server)))
(defun gnus-server-scan-server (server)
"Request a scan from the current server."
@@ -717,11 +727,12 @@ gnus-method-to-server."
(while (not (eobp))
(ignore-errors
(push (cons
- (buffer-substring
- (point)
- (progn
- (skip-chars-forward "^ \t")
- (point)))
+ (mm-string-as-unibyte
+ (buffer-substring
+ (point)
+ (progn
+ (skip-chars-forward "^ \t")
+ (point))))
(let ((last (read cur)))
(cons (read cur) last)))
groups))
@@ -729,18 +740,19 @@ gnus-method-to-server."
(while (not (eobp))
(ignore-errors
(push (cons
- (if (eq (char-after) ?\")
- (read cur)
- (let ((p (point)) (name ""))
- (skip-chars-forward "^ \t\\\\")
- (setq name (buffer-substring p (point)))
- (while (eq (char-after) ?\\)
- (setq p (1+ (point)))
- (forward-char 2)
- (skip-chars-forward "^ \t\\\\")
- (setq name (concat name (buffer-substring
- p (point)))))
- name))
+ (mm-string-as-unibyte
+ (if (eq (char-after) ?\")
+ (read cur)
+ (let ((p (point)) (name ""))
+ (skip-chars-forward "^ \t\\\\")
+ (setq name (buffer-substring p (point)))
+ (while (eq (char-after) ?\\)
+ (setq p (1+ (point)))
+ (forward-char 2)
+ (skip-chars-forward "^ \t\\\\")
+ (setq name (concat name (buffer-substring
+ p (point)))))
+ name)))
(let ((last (read cur)))
(cons (read cur) last)))
groups))
@@ -783,18 +795,26 @@ gnus-method-to-server."
(prog1 (1+ (point))
(insert
(format "%c%7d: %s\n"
- (let ((level (gnus-group-level
- (concat prefix (setq name (car group))))))
- (cond
- ((<= level gnus-level-subscribed) ? )
- ((<= level gnus-level-unsubscribed) ?U)
- ((= level gnus-level-zombie) ?Z)
- (t ?K)))
+ (let ((level
+ (if (string= prefix "")
+ (gnus-group-level (setq name (car group)))
+ (gnus-group-level
+ (concat prefix (setq name (car group)))))))
+ (cond
+ ((<= level gnus-level-subscribed) ? )
+ ((<= level gnus-level-unsubscribed) ?U)
+ ((= level gnus-level-zombie) ?Z)
+ (t ?K)))
(max 0 (- (1+ (cddr group)) (cadr group)))
- (mm-decode-coding-string
- name
- (inline (gnus-group-name-charset method name))))))
- (list 'gnus-group name))))
+ ;; Don't decode if name is ASCII
+ (if (and (fboundp 'detect-coding-string)
+ (eq (detect-coding-string name t) 'undecided))
+ name
+ (mm-decode-coding-string
+ name
+ (inline (gnus-group-name-charset method name)))))))
+ (list 'gnus-group name)
+ )))
(switch-to-buffer (current-buffer)))
(goto-char (point-min))
(gnus-group-position-point)
@@ -885,7 +905,7 @@ If NUMBER, fetch this number of articles."
(save-excursion
(beginning-of-line)
(let ((name (get-text-property (point) 'gnus-group)))
- (when (re-search-forward ": \\(.*\\)$" (gnus-point-at-eol) t)
+ (when (re-search-forward ": \\(.*\\)$" (point-at-eol) t)
(concat (gnus-method-to-server-name gnus-browse-current-method) ":"
(or name
(match-string-no-properties 1)))))))
@@ -926,8 +946,7 @@ If NUMBER, fetch this number of articles."
gnus-browse-current-method))))
gnus-level-default-subscribed (gnus-group-level group)
(and (car (nth 1 gnus-newsrc-alist))
- (gnus-gethash (car (nth 1 gnus-newsrc-alist))
- gnus-newsrc-hashtb))
+ (gnus-group-entry (car (nth 1 gnus-newsrc-alist))))
(null (gnus-group-entry group)))
(delete-char 1)
(insert ? ))
@@ -966,7 +985,7 @@ If NUMBER, fetch this number of articles."
(gnus-get-function (gnus-server-to-method server)
'request-regenerate)
(error
- (error "This backend doesn't support regeneration")))
+ (error "This back end doesn't support regeneration")))
(gnus-message 5 "Requesting regeneration of %s..." server)
(unless (gnus-open-server server)
(error "Couldn't open server"))
@@ -974,6 +993,40 @@ If NUMBER, fetch this number of articles."
(gnus-message 5 "Requesting regeneration of %s...done" server)
(gnus-message 5 "Couldn't regenerate %s" server))))
+
+;;;
+;;; Server compaction. -- dvl
+;;;
+
+;; #### FIXME: this function currently fails to update the Group buffer's
+;; #### appearance.
+(defun gnus-server-compact-server ()
+ "Issue a command to the server to compact all its groups.
+
+Note: currently only implemented in nnml."
+ (interactive)
+ (let ((server (gnus-server-server-name)))
+ (unless server
+ (error "No server on the current line"))
+ (condition-case ()
+ (gnus-get-function (gnus-server-to-method server)
+ 'request-compact)
+ (error
+ (error "This back end doesn't support compaction")))
+ (gnus-message 5 "\
+Requesting compaction of %s... (this may take a long time)"
+ server)
+ (unless (gnus-open-server server)
+ (error "Couldn't open server"))
+ (if (not (gnus-request-compact server))
+ (gnus-message 5 "Couldn't compact %s" server)
+ (gnus-message 5 "Requesting compaction of %s...done" server)
+ ;; Invalidate the original article buffer which might be out of date.
+ ;; #### NOTE: Yes, this might be a bit rude, but since compaction
+ ;; #### will not happen very often, I think this is acceptable.
+ (let ((original (get-buffer gnus-original-article-buffer)))
+ (and original (gnus-kill-buffer original))))))
+
(provide 'gnus-srvr)
;;; arch-tag: c0117f64-27ca-475d-9406-8da6854c7a25
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index 526e350f592..98994d5aaf7 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -39,11 +39,11 @@
(autoload 'gnus-agent-possibly-alter-active "gnus-agent")
(eval-when-compile
- (require 'cl)
+ (require 'cl))
- (defvar gnus-agent-covered-methods nil)
- (defvar gnus-agent-file-loading-local nil)
- (defvar gnus-agent-file-loading-cache nil))
+(defvar gnus-agent-covered-methods)
+(defvar gnus-agent-file-loading-local)
+(defvar gnus-agent-file-loading-cache)
(defcustom gnus-startup-file (nnheader-concat gnus-home-directory ".newsrc")
"Your `.newsrc' file.
@@ -506,19 +506,23 @@ Can be used to turn version control on or off."
(defun gnus-subscribe-hierarchical-interactive (groups)
(let ((groups (sort groups 'string<))
- prefixes prefix start ans group starts)
+ prefixes prefix start ans group starts real-group)
(while groups
(setq prefixes (list "^"))
(while (and groups prefixes)
- (while (not (string-match (car prefixes) (car groups)))
+ (while (not (string-match (car prefixes)
+ (gnus-group-real-name (car groups))))
(setq prefixes (cdr prefixes)))
(setq prefix (car prefixes))
(setq start (1- (length prefix)))
- (if (and (string-match "[^\\.]\\." (car groups) start)
+ (if (and (string-match "[^\\.]\\." (gnus-group-real-name (car groups))
+ start)
(cdr groups)
(setq prefix
- (concat "^" (substring (car groups) 0 (match-end 0))))
- (string-match prefix (cadr groups)))
+ (concat "^" (substring
+ (gnus-group-real-name (car groups))
+ 0 (match-end 0))))
+ (string-match prefix (gnus-group-real-name (cadr groups))))
(progn
(push prefix prefixes)
(message "Descend hierarchy %s? ([y]nsq): "
@@ -530,16 +534,18 @@ Can be used to turn version control on or off."
(substring prefix 1 (1- (length prefix)))))
(cond ((= ans ?n)
(while (and groups
- (string-match prefix
- (setq group (car groups))))
+ (setq group (car groups)
+ real-group (gnus-group-real-name group))
+ (string-match prefix real-group))
(push group gnus-killed-list)
(gnus-sethash group group gnus-killed-hashtb)
(setq groups (cdr groups)))
(setq starts (cdr starts)))
((= ans ?s)
(while (and groups
- (string-match prefix
- (setq group (car groups))))
+ (setq group (car groups)
+ real-group (gnus-group-real-name group))
+ (string-match prefix real-group))
(gnus-sethash group group gnus-killed-hashtb)
(gnus-subscribe-alphabetically (car groups))
(setq groups (cdr groups)))
@@ -632,8 +638,7 @@ the first newsgroup."
;; We subscribe the group by changing its level to `subscribed'.
(gnus-group-change-level
newsgroup gnus-level-default-subscribed
- gnus-level-killed (gnus-gethash (or next "dummy.group")
- gnus-newsrc-hashtb))
+ gnus-level-killed (gnus-group-entry (or next "dummy.group")))
(gnus-message 5 "Subscribe newsgroup: %s" newsgroup)
(run-hook-with-args 'gnus-subscribe-newsgroup-hooks newsgroup)
t))
@@ -645,21 +650,20 @@ the first newsgroup."
;;; General various misc type functions.
;; Silence byte-compiler.
-(eval-when-compile
- (defvar gnus-current-headers)
- (defvar gnus-thread-indent-array)
- (defvar gnus-newsgroup-name)
- (defvar gnus-newsgroup-headers)
- (defvar gnus-group-list-mode)
- (defvar gnus-group-mark-positions)
- (defvar gnus-newsgroup-data)
- (defvar gnus-newsgroup-unreads)
- (defvar nnoo-state-alist)
- (defvar gnus-current-select-method)
- (defvar mail-sources)
- (defvar nnmail-scan-directory-mail-source-once)
- (defvar nnmail-split-history)
- (defvar nnmail-spool-file))
+(defvar gnus-current-headers)
+(defvar gnus-thread-indent-array)
+(defvar gnus-newsgroup-name)
+(defvar gnus-newsgroup-headers)
+(defvar gnus-group-list-mode)
+(defvar gnus-group-mark-positions)
+(defvar gnus-newsgroup-data)
+(defvar gnus-newsgroup-unreads)
+(defvar nnoo-state-alist)
+(defvar gnus-current-select-method)
+(defvar mail-sources)
+(defvar nnmail-scan-directory-mail-source-once)
+(defvar nnmail-split-history)
+(defvar nnmail-spool-file)
(defun gnus-close-all-servers ()
"Close all servers."
@@ -755,6 +759,13 @@ prompt the user for the name of an NNTP server to use."
(nnheader-init-server-buffer)
(setq gnus-slave slave)
(gnus-read-init-file)
+
+ ;; Add "native" to gnus-predefined-server-alist just to have a
+ ;; name for the native select method.
+ (when gnus-select-method
+ (push (cons "native" gnus-select-method)
+ gnus-predefined-server-alist))
+
(if gnus-agent
(gnus-agentize))
@@ -787,11 +798,6 @@ prompt the user for the name of an NNTP server to use."
(when (or gnus-slave gnus-use-dribble-file)
(gnus-dribble-read-file))
- ;; Allow using GroupLens predictions.
- (when gnus-use-grouplens
- (bbb-login)
- (add-hook 'gnus-summary-mode-hook 'gnus-grouplens-mode))
-
;; Do the actual startup.
(if gnus-agent
(gnus-request-create-group "queue" '(nndraft "")))
@@ -809,8 +815,7 @@ prompt the user for the name of an NNTP server to use."
(defun gnus-start-draft-setup ()
"Make sure the draft group exists."
(gnus-request-create-group "drafts" '(nndraft ""))
- (unless (gnus-gethash "nndraft:drafts" gnus-newsrc-hashtb)
- (gnus-message 3 "Subscribing drafts group")
+ (unless (gnus-group-entry "nndraft:drafts")
(let ((gnus-level-default-subscribed 1))
(gnus-subscribe-group "nndraft:drafts" nil '(nndraft ""))))
(unless (equal (gnus-group-get-parameter "nndraft:drafts" 'gnus-dummy t)
@@ -891,7 +896,7 @@ prompt the user for the name of an NNTP server to use."
(when (and (file-exists-p gnus-current-startup-file)
(file-exists-p dribble-file)
(setq modes (file-modes gnus-current-startup-file)))
- (set-file-modes dribble-file modes))
+ (gnus-set-file-modes dribble-file modes))
(goto-char (point-min))
(when (search-forward "Gnus was exited on purpose" nil t)
(setq purpose t))
@@ -961,30 +966,34 @@ If LEVEL is non-nil, the news will be set up at level LEVEL."
(gnus-read-newsrc-file rawfile))
;; Make sure the archive server is available to all and sundry.
- (when gnus-message-archive-method
- (unless (assoc "archive" gnus-server-alist)
- (let ((method (or (and (stringp gnus-message-archive-method)
- (gnus-server-to-method
- gnus-message-archive-method))
- gnus-message-archive-method)))
- ;; Check whether the archive method is writable.
- (unless (or (stringp method)
- (memq 'respool (assoc (format "%s" (car method))
- gnus-valid-select-methods)))
- (setq method "archive")) ;; The default.
- (push (if (stringp method)
- `("archive"
- nnfolder
- ,method
- (nnfolder-directory
- ,(nnheader-concat message-directory method))
- (nnfolder-active-file
- ,(nnheader-concat message-directory
- (concat method "/active")))
- (nnfolder-get-new-mail nil)
- (nnfolder-inhibit-expiry t))
- (cons "archive" method))
- gnus-server-alist))))
+ (let ((method (or (and (stringp gnus-message-archive-method)
+ (gnus-server-to-method
+ gnus-message-archive-method))
+ gnus-message-archive-method)))
+ ;; Check whether the archive method is writable.
+ (unless (or (not method)
+ (stringp method)
+ (memq 'respool (assoc (format "%s" (car method))
+ gnus-valid-select-methods)))
+ (setq method "archive")) ;; The default.
+ (when (stringp method)
+ (setq method `(nnfolder
+ ,method
+ (nnfolder-directory
+ ,(nnheader-concat message-directory method))
+ (nnfolder-active-file
+ ,(nnheader-concat message-directory
+ (concat method "/active")))
+ (nnfolder-get-new-mail nil)
+ (nnfolder-inhibit-expiry t))))
+ (if (assoc "archive" gnus-server-alist)
+ (when gnus-update-message-archive-method
+ (if method
+ (setcdr (assoc "archive" gnus-server-alist) method)
+ (setq gnus-server-alist (delq (assoc "archive" gnus-server-alist)
+ gnus-server-alist))))
+ (when method
+ (push (cons "archive" method) gnus-server-alist))))
;; If we don't read the complete active file, we fill in the
;; hashtb here.
@@ -1334,16 +1343,16 @@ for new groups, and subscribe the new groups as zombies."
(when (and (stringp entry)
oldlevel
(< oldlevel gnus-level-zombie))
- (setq entry (gnus-gethash entry gnus-newsrc-hashtb)))
+ (setq entry (gnus-group-entry entry)))
(if (and (not oldlevel)
(consp entry))
(setq oldlevel (gnus-info-level (nth 2 entry)))
(setq oldlevel (or oldlevel gnus-level-killed)))
(when (stringp previous)
- (setq previous (gnus-gethash previous gnus-newsrc-hashtb)))
+ (setq previous (gnus-group-entry previous)))
(if (and (>= oldlevel gnus-level-zombie)
- (gnus-gethash group gnus-newsrc-hashtb))
+ (gnus-group-entry group))
;; We are trying to subscribe a group that is already
;; subscribed.
() ; Do nothing.
@@ -1367,8 +1376,7 @@ for new groups, and subscribe the new groups as zombies."
entry)
(gnus-sethash (car (nth 2 entry)) nil gnus-newsrc-hashtb)
(when (nth 3 entry)
- (setcdr (gnus-gethash (car (nth 3 entry))
- gnus-newsrc-hashtb)
+ (setcdr (gnus-group-entry (car (nth 3 entry)))
(cdr entry)))
(setcdr (cdr entry) (cdddr entry)))))
@@ -1428,7 +1436,7 @@ for new groups, and subscribe the new groups as zombies."
(gnus-sethash group (cons num previous)
gnus-newsrc-hashtb))
(when (cdr entry)
- (setcdr (gnus-gethash (caadr entry) gnus-newsrc-hashtb) entry))
+ (setcdr (gnus-group-entry (caadr entry)) entry))
(gnus-dribble-enter
(format
"(gnus-group-set-info '%S)" info)))))
@@ -1439,7 +1447,7 @@ for new groups, and subscribe the new groups as zombies."
(defun gnus-kill-newsgroup (newsgroup)
"Obsolete function. Kills a newsgroup."
(gnus-group-change-level
- (gnus-gethash newsgroup gnus-newsrc-hashtb) gnus-level-killed))
+ (gnus-group-entry newsgroup) gnus-level-killed))
(defun gnus-check-bogus-newsgroups (&optional confirm)
"Remove bogus newsgroups.
@@ -1467,14 +1475,14 @@ newsgroup."
(lambda (group)
;; Remove all bogus subscribed groups by first killing them, and
;; then removing them from the list of killed groups.
- (when (setq entry (gnus-gethash group gnus-newsrc-hashtb))
+ (when (setq entry (gnus-group-entry group))
(gnus-group-change-level entry gnus-level-killed)
(setq gnus-killed-list (delete group gnus-killed-list))))
bogus '("group" "groups" "remove"))
(while (setq group (pop bogus))
;; Remove all bogus subscribed groups by first killing them, and
;; then removing them from the list of killed groups.
- (when (setq entry (gnus-gethash group gnus-newsrc-hashtb))
+ (when (setq entry (gnus-group-entry group))
(gnus-group-change-level entry gnus-level-killed)
(setq gnus-killed-list (delete group gnus-killed-list)))))
;; Then we remove all bogus groups from the list of killed and
@@ -1503,8 +1511,8 @@ newsgroup."
(setq killed (cdr killed)))))
;; We want to inline a function from gnus-cache, so we cheat here:
+(defvar gnus-cache-active-hashtb)
(eval-when-compile
- (defvar gnus-cache-active-hashtb)
(defun gnus-cache-possibly-alter-active (group active)
"Alter the ACTIVE info for GROUP to reflect the articles in the cache."
(when gnus-cache-active-hashtb
@@ -1543,8 +1551,8 @@ If SCAN, request a scan of that group as well."
;; command may have responded with the `(0 . 0)'. We
;; ignore this if we already have an active entry
;; for the group.
- (if (and (zerop (car active))
- (zerop (cdr active))
+ (if (and (zerop (or (car active) 0))
+ (zerop (or (cdr active) 0))
(gnus-active group))
(gnus-active group)
@@ -1652,8 +1660,8 @@ If SCAN, request a scan of that group as well."
(setq num (max 0 (- (cdr active) num)))))
;; Set the number of unread articles.
(when (and info
- (gnus-gethash (gnus-info-group info) gnus-newsrc-hashtb))
- (setcar (gnus-gethash (gnus-info-group info) gnus-newsrc-hashtb) num))
+ (gnus-group-entry (gnus-info-group info)))
+ (setcar (gnus-group-entry (gnus-info-group info)) num))
num)))
;; Go though `gnus-newsrc-alist' and compare with `gnus-active-hashtb'
@@ -1674,12 +1682,12 @@ If SCAN, request a scan of that group as well."
(methods-cache nil)
(type-cache nil)
scanned-methods info group active method retrieve-groups cmethod
- method-type)
+ method-type ignore)
(gnus-message 6 "Checking new news...")
(while newsrc
(setq active (gnus-active (setq group (gnus-info-group
- (setq info (pop newsrc))))))
+ (setq info (pop newsrc))))))
;; Check newsgroups. If the user doesn't want to check them, or
;; they can't be checked (for instance, if the news server can't
@@ -1702,28 +1710,30 @@ If SCAN, request a scan of that group as well."
(when (and method
(not (setq method-type (cdr (assoc method type-cache)))))
(setq method-type
- (cond
- ((gnus-secondary-method-p method)
- 'secondary)
- ((inline (gnus-server-equal gnus-select-method method))
- 'primary)
- (t
- 'foreign)))
+ (cond
+ ((gnus-secondary-method-p method)
+ 'secondary)
+ ((inline (gnus-server-equal gnus-select-method method))
+ 'primary)
+ (t
+ 'foreign)))
(push (cons method method-type) type-cache))
+ (setq ignore nil)
(cond ((and method (eq method-type 'foreign))
;; These groups are foreign. Check the level.
- (when (and (<= (gnus-info-level info) foreign-level)
- (setq active (gnus-activate-group group 'scan)))
- ;; Let the Gnus agent save the active file.
- (when (and gnus-agent active (gnus-online method))
- (gnus-agent-save-group-info
- method (gnus-group-real-name group) active))
- (unless (inline (gnus-virtual-group-p group))
- (inline (gnus-close-group group)))
- (when (fboundp (intern (concat (symbol-name (car method))
- "-request-update-info")))
- (inline (gnus-request-update-info info method)))))
+ (if (<= (gnus-info-level info) foreign-level)
+ (when (setq active (gnus-activate-group group 'scan))
+ ;; Let the Gnus agent save the active file.
+ (when (and gnus-agent active (gnus-online method))
+ (gnus-agent-save-group-info
+ method (gnus-group-real-name group) active))
+ (unless (inline (gnus-virtual-group-p group))
+ (inline (gnus-close-group group)))
+ (when (fboundp (intern (concat (symbol-name (car method))
+ "-request-update-info")))
+ (inline (gnus-request-update-info info method))))
+ (setq ignore t)))
;; These groups are native or secondary.
((> (gnus-info-level info) level)
;; We don't want these groups.
@@ -1762,13 +1772,17 @@ If SCAN, request a scan of that group as well."
((eq active 'ignore)
;; Don't do anything.
)
+ ((and active ignore)
+ ;; The level of the foreign group is higher than the specified
+ ;; value.
+ )
(active
(inline (gnus-get-unread-articles-in-group info active t)))
(t
;; The group couldn't be reached, so we nix out the number of
;; unread articles and stuff.
(gnus-set-active group nil)
- (let ((tmp (gnus-gethash group gnus-newsrc-hashtb)))
+ (let ((tmp (gnus-group-entry group)))
(when tmp
(setcar tmp t))))))
@@ -1782,8 +1796,8 @@ If SCAN, request a scan of that group as well."
(when (gnus-check-backend-function 'request-scan (car method))
(gnus-request-scan nil method))
(gnus-read-active-file-2
- (mapcar (lambda (group) (gnus-group-real-name group)) groups)
- method)
+ (mapcar (lambda (group) (gnus-group-real-name group)) groups)
+ method)
(dolist (group groups)
(cond
((setq active (gnus-active (gnus-info-group
@@ -1793,7 +1807,7 @@ If SCAN, request a scan of that group as well."
;; The group couldn't be reached, so we nix out the number of
;; unread articles and stuff.
(gnus-set-active group nil)
- (setcar (gnus-gethash group gnus-newsrc-hashtb) t)))))))
+ (setcar (gnus-group-entry group) t)))))))
(gnus-message 6 "Checking new news...done")))
@@ -1802,7 +1816,7 @@ If SCAN, request a scan of that group as well."
(defun gnus-make-hashtable-from-newsrc-alist ()
(let ((alist gnus-newsrc-alist)
(ohashtb gnus-newsrc-hashtb)
- prev)
+ prev info method rest methods)
(setq gnus-newsrc-hashtb (gnus-make-hashtable (length alist)))
(setq alist
(setq prev (setq gnus-newsrc-alist
@@ -1811,14 +1825,26 @@ If SCAN, request a scan of that group as well."
gnus-newsrc-alist
(cons (list "dummy.group" 0 nil) alist)))))
(while alist
+ (setq info (car alist))
+ ;; Make the same select-methods identical Lisp objects.
+ (when (setq method (gnus-info-method info))
+ (if (setq rest (member method methods))
+ (gnus-info-set-method info (car rest))
+ (push method methods)))
(gnus-sethash
- (caar alist)
+ (car info)
;; Preserve number of unread articles in groups.
- (cons (and ohashtb (car (gnus-gethash (caar alist) ohashtb)))
+ (cons (and ohashtb (car (gnus-gethash (car info) ohashtb)))
prev)
gnus-newsrc-hashtb)
(setq prev alist
- alist (cdr alist)))))
+ alist (cdr alist)))
+ ;; Make the same select-methods in `gnus-server-alist' identical
+ ;; as well.
+ (while methods
+ (setq method (pop methods))
+ (when (setq rest (rassoc method gnus-server-alist))
+ (setcdr rest method)))))
(defun gnus-make-hashtable-from-killed ()
"Create a hash table from the killed and zombie lists."
@@ -1845,9 +1871,9 @@ If SCAN, request a scan of that group as well."
(defun gnus-make-articles-unread (group articles)
"Mark ARTICLES in GROUP as unread."
- (let* ((info (nth 2 (or (gnus-gethash group gnus-newsrc-hashtb)
- (gnus-gethash (gnus-group-real-name group)
- gnus-newsrc-hashtb))))
+ (let* ((info (nth 2 (or (gnus-group-entry group)
+ (gnus-group-entry
+ (gnus-group-real-name group)))))
(ranges (gnus-info-read info))
news article)
(while articles
@@ -1867,9 +1893,8 @@ If SCAN, request a scan of that group as well."
(defun gnus-make-ascending-articles-unread (group articles)
"Mark ascending ARTICLES in GROUP as unread."
- (let* ((entry (or (gnus-gethash group gnus-newsrc-hashtb)
- (gnus-gethash (gnus-group-real-name group)
- gnus-newsrc-hashtb)))
+ (let* ((entry (or (gnus-group-entry group)
+ (gnus-group-entry (gnus-group-real-name group))))
(info (nth 2 entry))
(ranges (gnus-info-read info))
(r ranges)
@@ -1941,7 +1966,7 @@ If SCAN, request a scan of that group as well."
(while lists
(setq killed (car lists))
(while killed
- (gnus-sethash (car killed) nil hashtb)
+ (gnus-sethash (mm-string-as-unibyte (car killed)) nil hashtb)
(setq killed (cdr killed)))
(setq lists (cdr lists)))))
@@ -2078,7 +2103,8 @@ If SCAN, request a scan of that group as well."
(if (equal method gnus-select-method)
(gnus-make-hashtable
(count-lines (point-min) (point-max)))
- (gnus-make-hashtable 4096)))))))
+ (gnus-make-hashtable 4096))))))
+ group max min)
;; Delete unnecessary lines.
(goto-char (point-min))
(cond
@@ -2113,12 +2139,16 @@ If SCAN, request a scan of that group as well."
(insert prefix)
(zerop (forward-line 1)))))))
;; Store the active file in a hash table.
- (goto-char (point-min))
- (let (group max min)
+ ;; Use a unibyte buffer in order to make `read' read non-ASCII
+ ;; group names (which have been encoded) as unibyte strings.
+ (mm-with-unibyte-buffer
+ (insert-buffer-substring cur)
+ (setq cur (current-buffer))
+ (goto-char (point-min))
(while (not (eobp))
(condition-case ()
(progn
- (narrow-to-region (point) (gnus-point-at-eol))
+ (narrow-to-region (point) (point-at-eol))
;; group gets set to a symbol interned in the hash table
;; (what a hack!!) - jwz
(setq group (let ((obarray hashtb)) (read cur)))
@@ -2150,7 +2180,7 @@ If SCAN, request a scan of that group as well."
(unless ignore-errors
(gnus-message 3 "Warning - invalid active: %s"
(buffer-substring
- (gnus-point-at-bol) (gnus-point-at-eol))))))
+ (point-at-bol) (point-at-eol))))))
(widen)
(forward-line 1)))))
@@ -2387,6 +2417,8 @@ If FORCE is non-nil, the .newsrc file is read."
(setq gnus-format-specs gnus-default-format-specs)))
(when gnus-newsrc-assoc
(setq gnus-newsrc-alist gnus-newsrc-assoc))))
+ (dolist (elem gnus-newsrc-alist)
+ (setcar elem (mm-string-as-unibyte (car elem))))
(gnus-make-hashtable-from-newsrc-alist)
(when (file-newer-than-file-p file ding-file)
;; Old format quick file
@@ -2502,10 +2534,10 @@ If FORCE is non-nil, the .newsrc file is read."
;; don't give a damn, frankly, my dear.
(concat gnus-newsrc-options
(buffer-substring
- (gnus-point-at-bol)
+ (point-at-bol)
;; Options may continue on the next line.
(or (and (re-search-forward "^[^ \t]" nil 'move)
- (progn (beginning-of-line) (point)))
+ (point-at-bol))
(point)))))
(forward-line -1))
(symbol
@@ -2573,8 +2605,8 @@ If FORCE is non-nil, the .newsrc file is read."
;; The line was buggy.
(setq group nil)
(gnus-error 3.1 "Mangled line: %s"
- (buffer-substring (gnus-point-at-bol)
- (gnus-point-at-eol))))
+ (buffer-substring (point-at-bol)
+ (point-at-eol))))
nil))
;; Skip past ", ". Spaces are invalid in these ranges, but
;; we allow them, because it's a common mistake to put a
@@ -2683,9 +2715,9 @@ If FORCE is non-nil, the .newsrc file is read."
(while (re-search-forward "[ \t]-n" nil t)
(setq eol
(or (save-excursion
- (and (re-search-forward "[ \t]-n" (gnus-point-at-eol) t)
+ (and (re-search-forward "[ \t]-n" (point-at-eol) t)
(- (point) 2)))
- (gnus-point-at-eol)))
+ (point-at-eol)))
;; Search for all "words"...
(while (re-search-forward "[^ \t,\n]+" eol t)
(if (eq (char-after (match-beginning 0)) ?!)
@@ -2793,7 +2825,7 @@ If FORCE is non-nil, the .newsrc file is read."
;; Replace the existing startup file with the temp file.
(rename-file working-file startup-file t)
- (set-file-modes startup-file setmodes)))
+ (gnus-set-file-modes startup-file setmodes)))
(condition-case nil
(delete-file working-file)
(file-error nil)))))
@@ -2845,7 +2877,7 @@ If FORCE is non-nil, the .newsrc file is read."
(while variables
(when (and (boundp (setq variable (pop variables)))
(symbol-value variable))
- (princ "(setq ")
+ (princ "\n(setq ")
(princ (symbol-name variable))
(princ " '")
(prin1 (symbol-value variable))
@@ -2872,6 +2904,10 @@ If FORCE is non-nil, the .newsrc file is read."
(setq default-directory (file-name-directory buffer-file-name))
(buffer-disable-undo)
(erase-buffer)
+ ;; Use a unibyte buffer since group names are unibyte strings;
+ ;; in particular, non-ASCII group names are the ones encoded by
+ ;; a certain coding system.
+ (mm-disable-multibyte)
;; Write options.
(when gnus-newsrc-options
(insert gnus-newsrc-options))
@@ -2914,7 +2950,8 @@ If FORCE is non-nil, the .newsrc file is read."
(delete-file gnus-startup-file)
(clear-visited-file-modtime))
(gnus-run-hooks 'gnus-save-standard-newsrc-hook)
- (save-buffer)
+ (let ((coding-system-for-write 'raw-text))
+ (save-buffer))
(kill-buffer (current-buffer)))))
@@ -2926,7 +2963,7 @@ If FORCE is non-nil, the .newsrc file is read."
(defun gnus-slave-mode ()
"Minor mode for slave Gnusae."
- (gnus-add-minor-mode 'gnus-slave-mode " Slave" (make-sparse-keymap))
+ (add-minor-mode 'gnus-slave-mode " Slave" (make-sparse-keymap))
(gnus-run-hooks 'gnus-slave-mode-hook))
(defun gnus-slave-save-newsrc ()
@@ -2939,7 +2976,7 @@ If FORCE is non-nil, the .newsrc file is read."
(let ((coding-system-for-write gnus-ding-file-coding-system))
(gnus-write-buffer slave-name))
(when modes
- (set-file-modes slave-name modes)))))
+ (gnus-set-file-modes slave-name modes)))))
(defun gnus-master-read-slave-newsrc ()
(let ((slave-files
@@ -3117,6 +3154,41 @@ If this variable is nil, don't do anything."
(symbol-value 'nnimap-mailbox-info)
(make-vector 1 0)))))
+(defun gnus-check-reasonable-setup ()
+ ;; Check whether nnml and nnfolder share a directory.
+ (let ((display-warn
+ (if (fboundp 'display-warning)
+ 'display-warning
+ (lambda (type message)
+ (if noninteractive
+ (message "Warning (%s): %s" type message)
+ (let (window)
+ (with-current-buffer (get-buffer-create "*Warnings*")
+ (goto-char (point-max))
+ (unless (bolp)
+ (insert "\n"))
+ (insert (format "Warning (%s): %s\n" type message))
+ (setq window (display-buffer (current-buffer)))
+ (set-window-start
+ window
+ (prog2
+ (forward-line (- 1 (window-height window)))
+ (point)
+ (goto-char (point-max))))))))))
+ method active actives match)
+ (dolist (server gnus-server-alist)
+ (setq method (gnus-server-to-method server)
+ active (intern (format "%s-active-file" (car method))))
+ (when (and (member (car method) '(nnml nnfolder))
+ (gnus-server-opened method)
+ (boundp active))
+ (when (setq match (assoc (symbol-value active) actives))
+ (funcall display-warn 'gnus-server
+ (format "%s and %s share the same active file %s"
+ (car method)
+ (cadr match)
+ (car match))))
+ (push (list (symbol-value active) method) actives)))))
(provide 'gnus-start)
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 96f7ea11c5d..214693ece8c 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -28,8 +28,10 @@
;;; Code:
(eval-when-compile
- (require 'cl)
- (defvar tool-bar-mode))
+ (require 'cl))
+
+(defvar tool-bar-mode)
+(defvar gnus-tmp-header)
(require 'gnus)
(require 'gnus-group)
@@ -62,19 +64,31 @@ it will be killed sometime later."
:group 'gnus-summary-exit
:type 'boolean)
+(defcustom gnus-summary-next-group-on-exit t
+ "If non-nil, go to the next unread newsgroup on summary exit.
+See `gnus-group-goto-unread'."
+ :link '(custom-manual "(gnus)Group Maneuvering")
+ :group 'gnus-summary-exit
+ :version "23.0" ;; No Gnus
+ :type 'boolean)
+
(defcustom gnus-fetch-old-headers nil
"*Non-nil means that Gnus will try to build threads by grabbing old headers.
-If an unread article in the group refers to an older, already read (or
-just marked as read) article, the old article will not normally be
-displayed in the Summary buffer. If this variable is t, Gnus
-will attempt to grab the headers to the old articles, and thereby
-build complete threads. If it has the value `some', only enough
-headers to connect otherwise loose threads will be displayed. This
-variable can also be a number. In that case, no more than that number
-of old headers will be fetched. If it has the value `invisible', all
+If an unread article in the group refers to an older, already
+read (or just marked as read) article, the old article will not
+normally be displayed in the Summary buffer. If this variable is
+t, Gnus will attempt to grab the headers to the old articles, and
+thereby build complete threads. If it has the value `some', all
+old headers will be fetched but only enough headers to connect
+otherwise loose threads will be displayed. This variable can
+also be a number. In that case, no more than that number of old
+headers will be fetched. If it has the value `invisible', all
old headers will be fetched, but none will be displayed.
-The server has to support NOV for any of this to work."
+The server has to support NOV for any of this to work.
+
+This feature can seriously impact performance it ignores all
+locally cached header entries."
:group 'gnus-thread
:type '(choice (const :tag "off" nil)
(const :tag "on" t)
@@ -83,7 +97,7 @@ The server has to support NOV for any of this to work."
number
(sexp :menu-tag "other" t)))
-(defcustom gnus-refer-thread-limit 200
+(defcustom gnus-refer-thread-limit 500
"*The number of old headers to fetch when doing \\<gnus-summary-mode-map>\\[gnus-summary-refer-thread].
If t, fetch all the available old headers."
:group 'gnus-thread
@@ -366,6 +380,28 @@ the first unread article."
:group 'gnus-summary-maneuvering
:type 'boolean)
+(defcustom gnus-auto-select-on-ephemeral-exit 'next-noselect
+ "What article should be selected after exiting an ephemeral group.
+Valid values include:
+
+`next'
+ Select the next article.
+`next-unread'
+ Select the next unread article.
+`next-noselect'
+ Move the cursor to the next article. This is the default.
+`next-unread-noselect'
+ Move the cursor to the next unread article.
+
+If it has any other value or there is no next (unread) article, the
+article selected before entering to the ephemeral group will appear."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-summary-maneuvering
+ :type '(choice :format "%{%t%}:\n %[Value Menu%] %v"
+ (const next) (const next-unread)
+ (const next-noselect) (const next-unread-noselect)
+ (sexp :tag "other" :value nil)))
+
(defcustom gnus-auto-goto-ignores 'unfetched
"*Says how to handle unfetched articles when maneuvering.
@@ -391,7 +427,7 @@ current article is unread."
:group 'gnus-summary-maneuvering
:type 'boolean)
-(defcustom gnus-auto-center-summary t
+(defcustom gnus-auto-center-summary 2
"*If non-nil, always center the current summary buffer.
In particular, if `vertical' do only vertical recentering. If non-nil
and non-`vertical', do both horizontal and vertical recentering."
@@ -438,6 +474,13 @@ this variable specifies group names."
(cons :value ("" "") regexp (repeat string))
(sexp :value nil))))
+(defcustom gnus-move-group-prefix-function 'gnus-group-real-prefix
+ "Function used to compute default prefix for article move/copy/etc prompts.
+The function should take one argument, a group name, and return a
+string with the suggested prefix."
+ :group 'gnus-summary-mail
+ :type 'function)
+
;; FIXME: Although the custom type is `character' for the following variables,
;; using multibyte characters (Latin-1, UTF-8) doesn't work. -- rs
@@ -697,6 +740,40 @@ score file."
:group 'gnus-score-default
:type 'integer)
+(defun gnus-widget-reversible-match (widget value)
+ "Ignoring WIDGET, convert VALUE to internal form.
+VALUE should have the form `FOO' or `(not FOO)', where FOO is an symbol."
+ ;; (debug value)
+ (or (symbolp value)
+ (and (listp value)
+ (eq (length value) 2)
+ (eq (nth 0 value) 'not)
+ (symbolp (nth 1 value)))))
+
+(defun gnus-widget-reversible-to-internal (widget value)
+ "Ignoring WIDGET, convert VALUE to internal form.
+VALUE should have the form `FOO' or `(not FOO)', where FOO is an atom.
+FOO is converted to (FOO nil) and (not FOO) is converted to (FOO t)."
+ ;; (debug value)
+ (if (atom value)
+ (list value nil)
+ (list (nth 1 value) t)))
+
+(defun gnus-widget-reversible-to-external (widget value)
+ "Ignoring WIDGET, convert VALUE to external form.
+VALUE should have the form `(FOO nil)' or `(FOO t)', where FOO is an atom.
+\(FOO nil) is converted to FOO and (FOO t) is converted to (not FOO)."
+ ;; (debug value)
+ (if (nth 1 value)
+ (list 'not (nth 0 value))
+ (nth 0 value)))
+
+(define-widget 'gnus-widget-reversible 'group
+ "A `group' that convert values."
+ :match 'gnus-widget-reversible-match
+ :value-to-internal 'gnus-widget-reversible-to-internal
+ :value-to-external 'gnus-widget-reversible-to-external)
+
(defcustom gnus-article-sort-functions '(gnus-article-sort-by-number)
"*List of functions used for sorting articles in the summary buffer.
@@ -709,6 +786,9 @@ is often much slower than sorting by number, and the sorting order is
very similar. (Sorting by date means sorting by the time the message
was sent, sorting by number means sorting by arrival time.)
+Each item can also be a list `(not F)' where F is a function;
+this reverses the sort order.
+
Ready-made functions include `gnus-article-sort-by-number',
`gnus-article-sort-by-author', `gnus-article-sort-by-subject',
`gnus-article-sort-by-date', `gnus-article-sort-by-random'
@@ -717,13 +797,16 @@ and `gnus-article-sort-by-score'.
When threading is turned on, the variable `gnus-thread-sort-functions'
controls how articles are sorted."
:group 'gnus-summary-sort
- :type '(repeat (choice (function-item gnus-article-sort-by-number)
- (function-item gnus-article-sort-by-author)
- (function-item gnus-article-sort-by-subject)
- (function-item gnus-article-sort-by-date)
- (function-item gnus-article-sort-by-score)
- (function-item gnus-article-sort-by-random)
- (function :tag "other"))))
+ :type '(repeat (gnus-widget-reversible
+ (choice (function-item gnus-article-sort-by-number)
+ (function-item gnus-article-sort-by-author)
+ (function-item gnus-article-sort-by-subject)
+ (function-item gnus-article-sort-by-date)
+ (function-item gnus-article-sort-by-score)
+ (function-item gnus-article-sort-by-random)
+ (function :tag "other"))
+ (boolean :tag "Reverse order"))))
+
(defcustom gnus-thread-sort-functions '(gnus-thread-sort-by-number)
"*List of functions used for sorting threads in the summary buffer.
@@ -738,25 +821,34 @@ is often much slower than sorting by number, and the sorting order is
very similar. (Sorting by date means sorting by the time the message
was sent, sorting by number means sorting by arrival time.)
+Each list item can also be a list `(not F)' where F is a
+function; this specifies reversed sort order.
+
Ready-made functions include `gnus-thread-sort-by-number',
-`gnus-thread-sort-by-author', `gnus-thread-sort-by-subject',
-`gnus-thread-sort-by-date', `gnus-thread-sort-by-score',
-`gnus-thread-sort-by-most-recent-number',
-`gnus-thread-sort-by-most-recent-date',
-`gnus-thread-sort-by-random', and
-`gnus-thread-sort-by-total-score' (see `gnus-thread-score-function').
+`gnus-thread-sort-by-author', `gnus-thread-sort-by-recipient'
+`gnus-thread-sort-by-subject', `gnus-thread-sort-by-date',
+`gnus-thread-sort-by-score', `gnus-thread-sort-by-most-recent-number',
+`gnus-thread-sort-by-most-recent-date', `gnus-thread-sort-by-random',
+and `gnus-thread-sort-by-total-score' (see
+`gnus-thread-score-function').
When threading is turned off, the variable
`gnus-article-sort-functions' controls how articles are sorted."
:group 'gnus-summary-sort
- :type '(repeat (choice (function-item gnus-thread-sort-by-number)
- (function-item gnus-thread-sort-by-author)
- (function-item gnus-thread-sort-by-subject)
- (function-item gnus-thread-sort-by-date)
- (function-item gnus-thread-sort-by-score)
- (function-item gnus-thread-sort-by-total-score)
- (function-item gnus-thread-sort-by-random)
- (function :tag "other"))))
+ :type '(repeat
+ (gnus-widget-reversible
+ (choice (function-item gnus-thread-sort-by-number)
+ (function-item gnus-thread-sort-by-author)
+ (function-item gnus-thread-sort-by-recipient)
+ (function-item gnus-thread-sort-by-subject)
+ (function-item gnus-thread-sort-by-date)
+ (function-item gnus-thread-sort-by-score)
+ (function-item gnus-thread-sort-by-most-recent-number)
+ (function-item gnus-thread-sort-by-most-recent-date)
+ (function-item gnus-thread-sort-by-random)
+ (function-item gnus-thread-sort-by-total-score)
+ (function :tag "other"))
+ (boolean :tag "Reverse order"))))
(defcustom gnus-thread-score-function '+
"*Function used for calculating the total score of a thread.
@@ -1017,10 +1109,29 @@ which it may alter in any way."
(and user-mail-address
(not (string= user-mail-address ""))
(regexp-quote user-mail-address))
- "*Regexp of From headers that may be suppressed in favor of To headers."
+ "*From headers that may be suppressed in favor of To headers.
+This can be a regexp or a list of regexps."
:version "21.1"
:group 'gnus-summary
- :type 'regexp)
+ :type '(choice regexp
+ (repeat :tag "Regexp List" regexp)))
+
+(defsubst gnus-ignored-from-addresses ()
+ (gmm-regexp-concat gnus-ignored-from-addresses))
+
+(defcustom gnus-summary-to-prefix "-> "
+ "*String prefixed to the To field in the summary line when
+using `gnus-ignored-from-addresses'."
+ :version "22.1"
+ :group 'gnus-summary
+ :type 'string)
+
+(defcustom gnus-summary-newsgroup-prefix "=> "
+ "*String prefixed to the Newsgroup field in the summary
+line when using `gnus-ignored-from-addresses'."
+ :version "22.1"
+ :group 'gnus-summary
+ :type 'string)
(defcustom gnus-newsgroup-ignored-charsets '(unknown-8bit x-unknown)
"List of charsets that should be ignored.
@@ -1128,12 +1239,12 @@ that were fetched. Say, for nnultimate groups."
:group 'gnus-summary
:type 'string)
-(defcustom gnus-article-loose-mime nil
+(defcustom gnus-article-loose-mime t
"If non-nil, don't require MIME-Version header.
Some brain-damaged MUA/MTA, e.g. Lotus Domino 5.0.6 clients, does not
supply the MIME-Version header or deliberately strip it from the mail.
-Set it to non-nil, Gnus will treat some articles as MIME even if
-the MIME-Version header is missed."
+If non-nil (the default), Gnus will treat some articles as MIME
+even if the MIME-Version header is missing."
:version "22.1"
:type 'boolean
:group 'gnus-article-mime)
@@ -1215,7 +1326,6 @@ the normal Gnus MIME machinery."
(?\< (make-string (max 0 (- 20 gnus-tmp-level)) ? ) ?s)
(?i gnus-tmp-score ?d)
(?z gnus-tmp-score-char ?c)
- (?l (bbb-grouplens-score gnus-tmp-header) ?s)
(?V (gnus-thread-total-score (and (boundp 'thread) (car thread))) ?d)
(?U gnus-tmp-unread ?c)
(?f (gnus-summary-from-or-to-or-newsgroups gnus-tmp-header gnus-tmp-from)
@@ -1464,7 +1574,6 @@ For example:
nil
(load "gnus-sum.el" t t t))
(require 'gnus)
- (require 'gnus-agent)
(require 'gnus-art)))
;; MIME stuff.
@@ -1491,19 +1600,15 @@ For example:
(eq gnus-newsgroup-name
(car gnus-decode-encoded-word-methods-cache)))
(setq gnus-decode-encoded-word-methods-cache (list gnus-newsgroup-name))
- (mapcar (lambda (x)
- (if (symbolp x)
- (nconc gnus-decode-encoded-word-methods-cache (list x))
- (if (and gnus-newsgroup-name
- (string-match (car x) gnus-newsgroup-name))
- (nconc gnus-decode-encoded-word-methods-cache
- (list (cdr x))))))
- gnus-decode-encoded-word-methods))
- (let ((xlist gnus-decode-encoded-word-methods-cache))
- (pop xlist)
- (while xlist
- (setq string (funcall (pop xlist) string))))
- string)
+ (dolist (method gnus-decode-encoded-word-methods)
+ (if (symbolp method)
+ (nconc gnus-decode-encoded-word-methods-cache (list method))
+ (if (and gnus-newsgroup-name
+ (string-match (car method) gnus-newsgroup-name))
+ (nconc gnus-decode-encoded-word-methods-cache
+ (list (cdr method)))))))
+ (dolist (method (cdr gnus-decode-encoded-word-methods-cache) string)
+ (setq string (funcall method string))))
;; Subject simplification.
@@ -1575,8 +1680,8 @@ matter is removed. Additional things can be deleted by setting
(setq modified-tick (buffer-modified-tick))
(cond
((listp gnus-simplify-subject-fuzzy-regexp)
- (mapcar 'gnus-simplify-buffer-fuzzy-step
- gnus-simplify-subject-fuzzy-regexp))
+ (mapc 'gnus-simplify-buffer-fuzzy-step
+ gnus-simplify-subject-fuzzy-regexp))
(gnus-simplify-subject-fuzzy-regexp
(gnus-simplify-buffer-fuzzy-step gnus-simplify-subject-fuzzy-regexp)))
(gnus-simplify-buffer-fuzzy-step "^ *\\[[-+?*!][-+?*!]\\] *")
@@ -1613,8 +1718,8 @@ See `gnus-simplify-buffer-fuzzy' for details."
((eq gnus-summary-gather-subject-limit 'fuzzy)
(gnus-simplify-subject-fuzzy subject))
((numberp gnus-summary-gather-subject-limit)
- (gnus-limit-string (gnus-simplify-subject-re subject)
- gnus-summary-gather-subject-limit))
+ (truncate-string-to-width (gnus-simplify-subject-re subject)
+ gnus-summary-gather-subject-limit))
(t
subject)))
@@ -1666,6 +1771,8 @@ increase the score of each group you read."
"," gnus-summary-best-unread-article
"\M-s" gnus-summary-search-article-forward
"\M-r" gnus-summary-search-article-backward
+ "\M-S" gnus-summary-repeat-search-article-forward
+ "\M-R" gnus-summary-repeat-search-article-backward
"<" gnus-summary-beginning-of-article
">" gnus-summary-end-of-article
"j" gnus-summary-goto-article
@@ -1705,6 +1812,7 @@ increase the score of each group you read."
"\C-c\C-s\C-l" gnus-summary-sort-by-lines
"\C-c\C-s\C-c" gnus-summary-sort-by-chars
"\C-c\C-s\C-a" gnus-summary-sort-by-author
+ "\C-c\C-s\C-t" gnus-summary-sort-by-recipient
"\C-c\C-s\C-s" gnus-summary-sort-by-subject
"\C-c\C-s\C-d" gnus-summary-sort-by-date
"\C-c\C-s\C-i" gnus-summary-sort-by-score
@@ -1796,6 +1904,8 @@ increase the score of each group you read."
(gnus-define-keys (gnus-summary-limit-map "/" gnus-summary-mode-map)
"/" gnus-summary-limit-to-subject
"n" gnus-summary-limit-to-articles
+ "b" gnus-summary-limit-to-bodies
+ "h" gnus-summary-limit-to-headers
"w" gnus-summary-pop-limit
"s" gnus-summary-limit-to-subject
"a" gnus-summary-limit-to-author
@@ -1815,7 +1925,11 @@ increase the score of each group you read."
"c" gnus-summary-limit-exclude-childless-dormant
"C" gnus-summary-limit-mark-excluded-as-read
"o" gnus-summary-insert-old-articles
- "N" gnus-summary-insert-new-articles)
+ "N" gnus-summary-insert-new-articles
+ "S" gnus-summary-limit-to-singletons
+ "r" gnus-summary-limit-to-replied
+ "R" gnus-summary-limit-to-recipient
+ "A" gnus-summary-limit-to-address)
(gnus-define-keys (gnus-summary-goto-map "G" gnus-summary-mode-map)
"n" gnus-summary-next-unread-article
@@ -1835,11 +1949,13 @@ increase the score of each group you read."
(gnus-define-keys (gnus-summary-thread-map "T" gnus-summary-mode-map)
"k" gnus-summary-kill-thread
+ "E" gnus-summary-expire-thread
"l" gnus-summary-lower-thread
"i" gnus-summary-raise-thread
"T" gnus-summary-toggle-threads
"t" gnus-summary-rethread-current
"^" gnus-summary-reparent-thread
+ "\M-^" gnus-summary-reparent-children
"s" gnus-summary-show-thread
"S" gnus-summary-show-all-threads
"h" gnus-summary-hide-thread
@@ -1855,7 +1971,8 @@ increase the score of each group you read."
(gnus-define-keys (gnus-summary-buffer-map "Y" gnus-summary-mode-map)
"g" gnus-summary-prepare
"c" gnus-summary-insert-cached-articles
- "d" gnus-summary-insert-dormant-articles)
+ "d" gnus-summary-insert-dormant-articles
+ "t" gnus-summary-insert-ticked-articles)
(gnus-define-keys (gnus-summary-exit-map "Z" gnus-summary-mode-map)
"c" gnus-summary-catchup-and-exit
@@ -1864,6 +1981,7 @@ increase the score of each group you read."
"Q" gnus-summary-exit
"Z" gnus-summary-exit
"n" gnus-summary-catchup-and-goto-next-group
+ "p" gnus-summary-catchup-and-goto-prev-group
"R" gnus-summary-reselect-current-group
"G" gnus-summary-rescan-group
"N" gnus-summary-next-group
@@ -1890,6 +2008,7 @@ increase the score of each group you read."
"g" gnus-summary-show-article
"s" gnus-summary-isearch-article
"P" gnus-summary-print-article
+ "S" gnus-sticky-article
"M" gnus-mailing-list-insinuate
"t" gnus-article-babel)
@@ -1900,11 +2019,13 @@ increase the score of each group you read."
"e" gnus-article-emphasize
"w" gnus-article-fill-cited-article
"Q" gnus-article-fill-long-lines
+ "L" gnus-article-toggle-truncate-lines
"C" gnus-article-capitalize-sentences
"c" gnus-article-remove-cr
"q" gnus-article-de-quoted-unreadable
"6" gnus-article-de-base64-unreadable
"Z" gnus-article-decode-HZ
+ "A" gnus-article-treat-ansi-sequences
"h" gnus-article-wash-html
"u" gnus-article-unsplit-urls
"s" gnus-summary-force-verify-and-decrypt
@@ -1917,7 +2038,8 @@ increase the score of each group you read."
"v" gnus-summary-verbose-headers
"a" gnus-article-strip-headers-in-body ;; mnemonic: wash archive
"p" gnus-article-verify-x-pgp-sig
- "d" gnus-article-treat-dumbquotes)
+ "d" gnus-article-treat-dumbquotes
+ "i" gnus-summary-idna-message)
(gnus-define-keys (gnus-summary-wash-deuglify-map "Y" gnus-summary-wash-map)
;; mnemonic: deuglif*Y*
@@ -2029,9 +2151,15 @@ increase the score of each group you read."
"m" gnus-summary-repair-multipart
"v" gnus-article-view-part
"o" gnus-article-save-part
+ "O" gnus-article-save-part-and-strip
+ "r" gnus-article-replace-part
+ "d" gnus-article-delete-part
+ "t" gnus-article-view-part-as-type
+ "j" gnus-article-jump-to-part
"c" gnus-article-copy-part
"C" gnus-article-view-part-as-charset
"e" gnus-article-view-part-externally
+ "H" gnus-article-browse-html-article
"E" gnus-article-encrypt-body
"i" gnus-article-inline-part
"|" gnus-article-pipe-part)
@@ -2175,11 +2303,13 @@ increase the score of each group you read."
["Repair multipart" gnus-summary-repair-multipart t]
["Pipe part..." gnus-article-pipe-part t]
["Inline part" gnus-article-inline-part t]
+ ["View part as type..." gnus-article-view-part-as-type t]
["Encrypt body" gnus-article-encrypt-body
:active (not (gnus-group-read-only-p))
,@(if (featurep 'xemacs) nil
'(:help "Encrypt the message body on disk"))]
["View part externally" gnus-article-view-part-externally t]
+ ["View HTML parts in browser" gnus-article-browse-html-article t]
["View part with charset..." gnus-article-view-part-as-charset t]
["Copy part" gnus-article-copy-part t]
["Save part..." gnus-article-save-part t]
@@ -2234,6 +2364,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Emphasis" gnus-article-emphasize t]
["Word wrap" gnus-article-fill-cited-article t]
["Fill long lines" gnus-article-fill-long-lines t]
+ ["Toggle truncate long lines" gnus-article-toggle-truncate-lines t]
["Capitalize sentences" gnus-article-capitalize-sentences t]
["Remove CR" gnus-article-remove-cr t]
["Quoted-Printable" gnus-article-de-quoted-unreadable t]
@@ -2241,6 +2372,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Rot 13" gnus-summary-caesar-message
,@(if (featurep 'xemacs) '(t)
'(:help "\"Caesar rotate\" article by 13"))]
+ ["De-IDNA" gnus-summary-idna-message t]
["Morse decode" gnus-summary-morse-message t]
["Unix pipe..." gnus-summary-pipe-message t]
["Add buttons" gnus-article-add-buttons t]
@@ -2254,6 +2386,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Unsplit URLs" gnus-article-unsplit-urls t]
["Verify X-PGP-Sig" gnus-article-verify-x-pgp-sig t]
["Decode HZ" gnus-article-decode-HZ t]
+ ["ANSI sequences" gnus-article-treat-ansi-sequences t]
("(Outlook) Deuglify"
["Unwrap lines" gnus-article-outlook-unwrap-lines t]
["Repair attribution" gnus-article-outlook-repair-attribution t]
@@ -2323,6 +2456,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Remove article" gnus-cache-remove-article t])
["Translate" gnus-article-babel t]
["Select article buffer" gnus-summary-select-article-buffer t]
+ ["Make article buffer sticky" gnus-sticky-article t]
["Enter digest buffer" gnus-summary-enter-digest-group t]
["Isearch article..." gnus-summary-isearch-article t]
["Beginning of the article" gnus-summary-beginning-of-article t]
@@ -2363,6 +2497,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Go up thread" gnus-summary-up-thread t]
["Top of thread" gnus-summary-top-thread t]
["Mark thread as read" gnus-summary-kill-thread t]
+ ["Mark thread as expired" gnus-summary-expire-thread t]
["Lower thread score" gnus-summary-lower-thread t]
["Raise thread score" gnus-summary-raise-thread t]
["Rethread current" gnus-summary-rethread-current t]))
@@ -2451,12 +2586,16 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Marks..." gnus-summary-limit-to-marks t]
["Subject..." gnus-summary-limit-to-subject t]
["Author..." gnus-summary-limit-to-author t]
+ ["Recipient..." gnus-summary-limit-to-recipient t]
+ ["Address..." gnus-summary-limit-to-address t]
["Age..." gnus-summary-limit-to-age t]
["Extra..." gnus-summary-limit-to-extra t]
["Score..." gnus-summary-limit-to-score t]
["Display Predicate" gnus-summary-limit-to-display-predicate t]
["Unread" gnus-summary-limit-to-unread t]
["Unseen" gnus-summary-limit-to-unseen t]
+ ["Singletons" gnus-summary-limit-to-singletons t]
+ ["Replied" gnus-summary-limit-to-replied t]
["Non-dormant" gnus-summary-limit-exclude-dormant t]
["Next or process marked articles" gnus-summary-limit-to-articles t]
["Pop limit" gnus-summary-pop-limit t]
@@ -2470,6 +2609,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Set mark" gnus-summary-mark-as-processable t]
["Remove mark" gnus-summary-unmark-as-processable t]
["Remove all marks" gnus-summary-unmark-all-processable t]
+ ["Invert marks" gnus-uu-invert-processable t]
["Mark above" gnus-uu-mark-over t]
["Mark series" gnus-uu-mark-series t]
["Mark region" gnus-uu-mark-region (gnus-mark-active-p)]
@@ -2513,6 +2653,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
("Sort"
["Sort by number" gnus-summary-sort-by-number t]
["Sort by author" gnus-summary-sort-by-author t]
+ ["Sort by recipient" gnus-summary-sort-by-recipient t]
["Sort by subject" gnus-summary-sort-by-subject t]
["Sort by date" gnus-summary-sort-by-date t]
["Sort by score" gnus-summary-sort-by-score t]
@@ -2537,6 +2678,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
["Regenerate" gnus-summary-prepare t]
["Insert cached articles" gnus-summary-insert-cached-articles t]
["Insert dormant articles" gnus-summary-insert-dormant-articles t]
+ ["Insert ticked articles" gnus-summary-insert-ticked-articles t]
["Toggle threading" gnus-summary-toggle-threads t])
["See old articles" gnus-summary-insert-old-articles t]
["See new articles" gnus-summary-insert-new-articles t]
@@ -2560,6 +2702,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
'(:help "Mark unread articles in this group as read, then exit"))]
["Catchup all and exit" gnus-summary-catchup-all-and-exit t]
["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t]
+ ["Catchup and goto prev" gnus-summary-catchup-and-goto-prev-group t]
["Exit group" gnus-summary-exit
,@(if (featurep 'xemacs) '(t)
'(:help "Exit current group, return to group selection mode"))]
@@ -2603,7 +2746,7 @@ Pre-defined symbols include `gnus-summary-tool-bar-gnome' and
(const :tag "Retro look" gnus-summary-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
@@ -2654,7 +2797,7 @@ Pre-defined symbols include `gnus-summary-tool-bar-gnome' and
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
@@ -2689,7 +2832,7 @@ See `gmm-tool-bar-from-list' for the format of the list."
See `gmm-tool-bar-from-list' for the format of the list."
:type '(repeat gmm-tool-bar-item)
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
@@ -2700,7 +2843,7 @@ These items are not displayed in the Gnus summary mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'gnus-summary-tool-bar-update
:group 'gnus-summary)
@@ -2839,12 +2982,13 @@ The following commands are available:
\\{gnus-summary-mode-map}"
(interactive)
(kill-all-local-variables)
+ (let ((gnus-summary-local-variables gnus-newsgroup-variables))
+ (gnus-summary-make-local-variables))
+ (gnus-summary-make-local-variables)
+ (setq gnus-newsgroup-name group)
(when (gnus-visual-p 'summary-menu 'menu)
(gnus-summary-make-menu-bar)
(gnus-summary-make-tool-bar))
- (gnus-summary-make-local-variables)
- (let ((gnus-summary-local-variables gnus-newsgroup-variables))
- (gnus-summary-make-local-variables))
(gnus-make-thread-indent-array)
(gnus-simplify-mode-line)
(setq major-mode 'gnus-summary-mode)
@@ -2852,13 +2996,13 @@ The following commands are available:
(make-local-variable 'minor-mode-alist)
(use-local-map gnus-summary-mode-map)
(buffer-disable-undo)
- (setq buffer-read-only t) ;Disable modification
+ (setq buffer-read-only t ;Disable modification
+ show-trailing-whitespace nil)
(setq truncate-lines t)
(setq selective-display t)
(setq selective-display-ellipses t) ;Display `...'
(gnus-summary-set-display-table)
(gnus-set-default-directory)
- (setq gnus-newsgroup-name group)
(make-local-variable 'gnus-summary-line-format)
(make-local-variable 'gnus-summary-line-format-spec)
(make-local-variable 'gnus-summary-dummy-line-format)
@@ -2891,9 +3035,9 @@ The following commands are available:
(let ((locals gnus-summary-local-variables))
(while locals
(if (consp (car locals))
- (and (vectorp (caar locals))
+ (and (symbolp (caar locals))
(set (caar locals) nil))
- (and (vectorp (car locals))
+ (and (symbolp (car locals))
(set (car locals) nil)))
(setq locals (cdr locals)))))
@@ -2965,10 +3109,9 @@ The following commands are available:
(setq gnus-newsgroup-data (nconc list gnus-newsgroup-data))
(when offset
(gnus-data-update-list odata offset)))
- ;; Find the last element in the list to be spliced into the main
+ ;; Find the last element in the list to be spliced into the main
;; list.
- (while (cdr list)
- (setq list (cdr list)))
+ (setq list (last list))
(if (not data)
(progn
(setcdr list gnus-newsgroup-data)
@@ -3284,10 +3427,11 @@ display only a single character."
(gnus-summary-mode group)
(when gnus-carpal
(gnus-carpal-setup-buffer 'summary))
- (unless gnus-single-article-buffer
- (make-local-variable 'gnus-article-buffer)
- (make-local-variable 'gnus-article-current)
- (make-local-variable 'gnus-original-article-buffer))
+ (when (gnus-group-quit-config group)
+ (set (make-local-variable 'gnus-single-article-buffer) nil))
+ (make-local-variable 'gnus-article-buffer)
+ (make-local-variable 'gnus-article-current)
+ (make-local-variable 'gnus-original-article-buffer)
(setq gnus-newsgroup-name group)
;; Set any local variables in the group parameters.
(gnus-summary-set-local-parameters gnus-newsgroup-name)
@@ -3320,8 +3464,7 @@ buffer that was in action when the last article was fetched."
(push (eval (car locals)) vlist))
(setq locals (cdr locals)))
(setq vlist (nreverse vlist)))
- (save-excursion
- (set-buffer gnus-group-buffer)
+ (with-current-buffer gnus-group-buffer
(setq gnus-newsgroup-name name
gnus-newsgroup-marked marked
gnus-newsgroup-spam-marked spam
@@ -3445,25 +3588,33 @@ buffer that was in action when the last article was fetched."
(defun gnus-summary-from-or-to-or-newsgroups (header gnus-tmp-from)
(let ((mail-parse-charset gnus-newsgroup-charset)
+ (ignored-from-addresses (gnus-ignored-from-addresses))
; Is it really necessary to do this next part for each summary line?
; Luckily, doesn't seem to slow things down much.
(mail-parse-ignored-charsets
- (save-excursion (set-buffer gnus-summary-buffer)
- gnus-newsgroup-ignored-charsets)))
+ (with-current-buffer gnus-summary-buffer
+ gnus-newsgroup-ignored-charsets)))
(or
- (and gnus-ignored-from-addresses
- (string-match gnus-ignored-from-addresses gnus-tmp-from)
+ (and ignored-from-addresses
+ (string-match ignored-from-addresses gnus-tmp-from)
(let ((extra-headers (mail-header-extra header))
to
newsgroups)
(cond
((setq to (cdr (assq 'To extra-headers)))
- (concat "-> "
+ (concat gnus-summary-to-prefix
(inline
(gnus-summary-extract-address-component
(funcall gnus-decode-encoded-address-function to)))))
- ((setq newsgroups (cdr (assq 'Newsgroups extra-headers)))
- (concat "=> " newsgroups)))))
+ ((setq newsgroups
+ (or
+ (cdr (assq 'Newsgroups extra-headers))
+ (and
+ (memq 'Newsgroups gnus-extra-headers)
+ (eq (car (gnus-find-method-for-group
+ gnus-newsgroup-name)) 'nntp)
+ (gnus-group-real-name gnus-newsgroup-name))))
+ (concat gnus-summary-newsgroup-prefix newsgroups)))))
(inline (gnus-summary-extract-address-component gnus-tmp-from)))))
(defun gnus-summary-insert-line (gnus-tmp-header
@@ -3614,12 +3765,8 @@ This function is intended to be used in
(defun gnus-summary-set-local-parameters (group)
"Go through the local params of GROUP and set all variable specs in that list."
- (let ((params (gnus-group-find-parameter group))
- (vars '(quit-config)) ; Ignore quit-config.
- elem)
- (while params
- (setq elem (car params)
- params (cdr params))
+ (let ((vars '(quit-config))) ; Ignore quit-config.
+ (dolist (elem (gnus-group-find-parameter group))
(and (consp elem) ; Has to be a cons.
(consp (cdr elem)) ; The cdr has to be a list.
(symbolp (car elem)) ; Has to be a symbol in there.
@@ -4141,21 +4288,19 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise."
(erase-buffer)))
(kill-buffer (current-buffer)))
;; Sort over trustworthiness.
- (mapcar
- (lambda (relation)
- (when (gnus-dependencies-add-header
- (make-full-mail-header
- gnus-reffed-article-number
- (nth 3 relation) "" (or (nth 4 relation) "")
- (nth 1 relation)
- (or (nth 2 relation) "") 0 0 "")
- gnus-newsgroup-dependencies nil)
- (push gnus-reffed-article-number gnus-newsgroup-limit)
- (push gnus-reffed-article-number gnus-newsgroup-sparse)
- (push (cons gnus-reffed-article-number gnus-sparse-mark)
- gnus-newsgroup-reads)
- (decf gnus-reffed-article-number)))
- (sort relations 'car-less-than-car))
+ (dolist (relation (sort relations 'car-less-than-car))
+ (when (gnus-dependencies-add-header
+ (make-full-mail-header
+ gnus-reffed-article-number
+ (nth 3 relation) "" (or (nth 4 relation) "")
+ (nth 1 relation)
+ (or (nth 2 relation) "") 0 0 "")
+ gnus-newsgroup-dependencies nil)
+ (push gnus-reffed-article-number gnus-newsgroup-limit)
+ (push gnus-reffed-article-number gnus-newsgroup-sparse)
+ (push (cons gnus-reffed-article-number gnus-sparse-mark)
+ gnus-newsgroup-reads)
+ (decf gnus-reffed-article-number)))
(gnus-message 7 "Making sparse threads...done")))
(defun gnus-build-old-threads ()
@@ -4183,13 +4328,12 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise."
"Translate STRING into something that doesn't contain weird characters."
(mm-subst-char-in-string
?\r ?\-
- (mm-subst-char-in-string
- ?\n ?\- string)))
+ (mm-subst-char-in-string ?\n ?\- string t) t))
;; This function has to be called with point after the article number
;; on the beginning of the line.
(defsubst gnus-nov-parse-line (number dependencies &optional force-new)
- (let ((eol (gnus-point-at-eol))
+ (let ((eol (point-at-eol))
(buffer (current-buffer))
header references in-reply-to)
@@ -4214,7 +4358,7 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise."
(setq x (nnheader-nov-field))))
(error x))
(nnheader-nov-field) ; date
- (nnheader-nov-read-message-id) ; id
+ (nnheader-nov-read-message-id number) ; id
(setq references (nnheader-nov-field)) ; refs
(nnheader-nov-read-integer) ; chars
(nnheader-nov-read-integer) ; lines
@@ -4288,8 +4432,7 @@ the id of the parent article (if any)."
(setq article (read (current-buffer))
header (gnus-nov-parse-line article dependencies)))
(when header
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
(push header gnus-newsgroup-headers)
(if (memq (setq article (mail-header-number header))
gnus-newsgroup-unselected)
@@ -4386,7 +4529,7 @@ If LINE, insert the rebuilt thread starting on line LINE."
(setq thread (list (car (gnus-id-to-thread id))))
;; Get the thread this article is part of.
(setq thread (gnus-remove-thread id)))
- (setq old-pos (gnus-point-at-bol))
+ (setq old-pos (point-at-bol))
(setq current (save-excursion
(and (re-search-backward "[\r\n]" nil t)
(gnus-summary-article-number))))
@@ -4568,9 +4711,9 @@ If LINE, insert the rebuilt thread starting on line LINE."
(gnus-summary-show-thread)
(gnus-data-remove
number
- (- (gnus-point-at-bol)
+ (- (point-at-bol)
(prog1
- (1+ (gnus-point-at-eol))
+ (1+ (point-at-eol))
(gnus-delete-line)))))))
(defun gnus-sort-threads-recursive (threads func)
@@ -4690,6 +4833,23 @@ using some other form will lead to serious barfage."
(gnus-article-sort-by-author
(gnus-thread-header h1) (gnus-thread-header h2)))
+(defsubst gnus-article-sort-by-recipient (h1 h2)
+ "Sort articles by recipient."
+ (gnus-string<
+ (let ((extract (funcall
+ gnus-extract-address-components
+ (or (cdr (assq 'To (mail-header-extra h1))) ""))))
+ (or (car extract) (cadr extract)))
+ (let ((extract (funcall
+ gnus-extract-address-components
+ (or (cdr (assq 'To (mail-header-extra h2))) ""))))
+ (or (car extract) (cadr extract)))))
+
+(defun gnus-thread-sort-by-recipient (h1 h2)
+ "Sort threads by root recipient."
+ (gnus-article-sort-by-recipient
+ (gnus-thread-header h1) (gnus-thread-header h2)))
+
(defsubst gnus-article-sort-by-subject (h1 h2)
"Sort articles by root subject."
(gnus-string<
@@ -4796,7 +4956,6 @@ Unscored articles will be counted as having a score of zero."
(defvar gnus-tmp-root-expunged nil)
(defvar gnus-tmp-dummy-line nil)
-(eval-when-compile (defvar gnus-tmp-header))
(defun gnus-extra-header (type &optional header)
"Return the extra header of TYPE."
(or (cdr (assq type (mail-header-extra (or header gnus-tmp-header))))
@@ -4810,33 +4969,39 @@ If nil, use subject instead."
:version "22.1"
:type '(radio (const :format "%v " nil) string)
:group 'gnus-thread)
+
(defcustom gnus-sum-thread-tree-false-root "> "
"With %B spec, used for a false root of a thread.
If nil, use subject instead."
:version "22.1"
:type '(radio (const :format "%v " nil) string)
:group 'gnus-thread)
+
(defcustom gnus-sum-thread-tree-single-indent ""
"With %B spec, used for a thread with just one message.
If nil, use subject instead."
:version "22.1"
:type '(radio (const :format "%v " nil) string)
:group 'gnus-thread)
+
(defcustom gnus-sum-thread-tree-vertical "| "
"With %B spec, used for drawing a vertical line."
:version "22.1"
:type 'string
:group 'gnus-thread)
+
(defcustom gnus-sum-thread-tree-indent " "
"With %B spec, used for indenting."
:version "22.1"
:type 'string
:group 'gnus-thread)
+
(defcustom gnus-sum-thread-tree-leaf-with-other "+-> "
"With %B spec, used for a leaf with brothers."
:version "22.1"
:type 'string
:group 'gnus-thread)
+
(defcustom gnus-sum-thread-tree-single-leaf "\\-> "
"With %B spec, used for a leaf without brothers."
:version "22.1"
@@ -5195,23 +5360,20 @@ or a straight list of headers."
gnus-list-identifiers))
changed subject)
(when regexp
+ (setq regexp (concat "^\\(?:R[Ee]: +\\)*\\(" regexp " *\\)"))
(dolist (header gnus-newsgroup-headers)
(setq subject (mail-header-subject header)
changed nil)
- (while (string-match
- (concat "^\\(R[Ee]: +\\)*\\(" regexp " *\\)")
- subject)
+ (while (string-match regexp subject)
(setq subject
- (concat (substring subject 0 (match-beginning 2))
+ (concat (substring subject 0 (match-beginning 1))
(substring subject (match-end 0)))
changed t))
- (when (and changed
- (string-match
- "^\\(\\(R[Ee]: +\\)+\\)R[Ee]: +" subject))
- (setq subject
- (concat (substring subject 0 (match-beginning 1))
- (substring subject (match-end 1)))))
(when changed
+ (when (string-match "^\\(\\(?:R[Ee]: +\\)+\\)R[Ee]: +" subject)
+ (setq subject
+ (concat (substring subject 0 (match-beginning 1))
+ (substring subject (match-end 1)))))
(mail-header-set-subject header subject))))))
(defun gnus-fetch-headers (articles)
@@ -5239,33 +5401,37 @@ or a straight list of headers."
"Select newsgroup GROUP.
If READ-ALL is non-nil, all articles in the group are selected.
If SELECT-ARTICLES, only select those articles from GROUP."
- (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
+ (let* ((entry (gnus-group-entry group))
;;!!! Dirty hack; should be removed.
(gnus-summary-ignore-duplicates
(if (eq (car (gnus-find-method-for-group group)) 'nnvirtual)
t
gnus-summary-ignore-duplicates))
(info (nth 2 entry))
- articles fetched-articles cached)
+ charset articles fetched-articles cached)
(unless (gnus-check-server
(set (make-local-variable 'gnus-current-select-method)
(gnus-find-method-for-group group)))
(error "Couldn't open server"))
+ (setq charset (gnus-group-name-charset gnus-current-select-method group))
(or (and entry (not (eq (car entry) t))) ; Either it's active...
(gnus-activate-group group) ; Or we can activate it...
(progn ; Or we bug out.
(when (equal major-mode 'gnus-summary-mode)
(gnus-kill-buffer (current-buffer)))
- (error "Couldn't activate group %s: %s"
- (gnus-group-decoded-name group) (gnus-status-message group))))
+ (error
+ "Couldn't activate group %s: %s"
+ (mm-decode-coding-string group charset)
+ (mm-decode-coding-string (gnus-status-message group) charset))))
(unless (gnus-request-group group t)
- (when (equal major-mode 'gnus-summary-mode)
- (gnus-kill-buffer (current-buffer)))
- (error "Couldn't request group %s: %s"
- (gnus-group-decoded-name group) (gnus-status-message group)))
+ (when (equal major-mode 'gnus-summary-mode)
+ (gnus-kill-buffer (current-buffer)))
+ (error "Couldn't request group %s: %s"
+ (mm-decode-coding-string group charset)
+ (mm-decode-coding-string (gnus-status-message group) charset)))
(when gnus-agent
(gnus-agent-possibly-alter-active group (gnus-active group) info)
@@ -5388,7 +5554,8 @@ If SELECT-ARTICLES, only select those articles from GROUP."
(setq gnus-newsgroup-auto-expire
(gnus-group-auto-expirable-p group))
;; Set up the article buffer now, if necessary.
- (unless gnus-single-article-buffer
+ (unless (and gnus-single-article-buffer
+ (equal gnus-article-buffer "*Article*"))
(gnus-article-setup-buffer))
;; First and last article in this newsgroup.
(when gnus-newsgroup-headers
@@ -5426,8 +5593,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
(gnus-get-predicate display)))
;; Uses the dynamically bound `number' variable.
-(eval-when-compile
- (defvar number))
+(defvar number)
(defun gnus-article-marked-p (type &optional article)
(let ((article (or article number)))
(cond
@@ -5522,9 +5688,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
(read-string
(format
"How many articles from %s (%s %d): "
- (gnus-limit-string
- (gnus-group-decoded-name gnus-newsgroup-name)
- 35)
+ (gnus-group-decoded-name gnus-newsgroup-name)
(if initial "max" "default")
number)
(if initial
@@ -5850,7 +6014,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(defun gnus-mark-xrefs-as-read (from-newsgroup headers unreads)
"Look through all the headers and mark the Xrefs as read."
(let ((virtual (gnus-virtual-group-p from-newsgroup))
- name entry info xref-hashtb idlist method nth4)
+ name info xref-hashtb idlist method nth4)
(save-excursion
(set-buffer gnus-group-buffer)
(when (setq xref-hashtb
@@ -5861,8 +6025,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(setq idlist (symbol-value group))
;; Dead groups are not updated.
(and (prog1
- (setq entry (gnus-gethash name gnus-newsrc-hashtb)
- info (nth 2 entry))
+ (setq info (gnus-get-info name))
(when (stringp (setq nth4 (gnus-info-method info)))
(setq nth4 (gnus-server-to-method nth4))))
;; Only do the xrefs if the group has the same
@@ -5884,7 +6047,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
xref-hashtb)))))
(defun gnus-compute-read-articles (group articles)
- (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
+ (let* ((entry (gnus-group-entry group))
(info (nth 2 entry))
(active (gnus-active group))
ninfo)
@@ -5921,14 +6084,13 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(defun gnus-group-make-articles-read (group articles)
"Update the info of GROUP to say that ARTICLES are read."
(let* ((num 0)
- (entry (gnus-gethash group gnus-newsrc-hashtb))
+ (entry (gnus-group-entry group))
(info (nth 2 entry))
(active (gnus-active group))
range)
(when entry
(setq range (gnus-compute-read-articles group articles))
- (save-excursion
- (set-buffer gnus-group-buffer)
+ (with-current-buffer gnus-group-buffer
(gnus-undo-register
`(progn
(gnus-info-set-marks ',info ',(gnus-info-marks info) t)
@@ -5967,9 +6129,9 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(let ((cur nntp-server-buffer)
(dependencies
(or dependencies
- (save-excursion (set-buffer gnus-summary-buffer)
- gnus-newsgroup-dependencies)))
- headers id end ref
+ (with-current-buffer gnus-summary-buffer
+ gnus-newsgroup-dependencies)))
+ headers id end ref number
(mail-parse-charset gnus-newsgroup-charset)
(mail-parse-ignored-charsets
(save-excursion (condition-case nil
@@ -6002,7 +6164,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(vector
;; Number.
(prog1
- (read cur)
+ (setq number (read cur))
(end-of-line)
(setq p (point))
(narrow-to-region (point)
@@ -6039,7 +6201,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
(match-end 1))
;; If there was no message-id, we just fake one
;; to make subsequent routines simpler.
- (nnheader-generate-fake-message-id))))
+ (nnheader-generate-fake-message-id number))))
;; References.
(progn
(goto-char p)
@@ -6186,8 +6348,8 @@ Return a list of headers that match SEQUENCE (see
(defun gnus-article-get-xrefs ()
"Fill in the Xref value in `gnus-current-headers', if necessary.
This is meant to be called in `gnus-article-internal-prepare-hook'."
- (let ((headers (save-excursion (set-buffer gnus-summary-buffer)
- gnus-current-headers)))
+ (let ((headers (with-current-buffer gnus-summary-buffer
+ gnus-current-headers)))
(or (not gnus-use-cross-reference)
(not headers)
(and (mail-header-xref headers)
@@ -6202,7 +6364,7 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
(looking-at "Xref:"))
(search-forward "\nXref:" nil t))
(goto-char (1+ (match-end 0)))
- (setq xref (buffer-substring (point) (gnus-point-at-eol)))
+ (setq xref (buffer-substring (point) (point-at-eol)))
(mail-header-set-xref headers xref)))))))
(defun gnus-summary-insert-subject (id &optional old-header use-old-header)
@@ -6230,9 +6392,9 @@ the subject line on."
(goto-char (gnus-data-pos d))
(gnus-data-remove
number
- (- (gnus-point-at-bol)
+ (- (point-at-bol)
(prog1
- (1+ (gnus-point-at-eol))
+ (1+ (point-at-eol))
(gnus-delete-line))))))
;; Remove list identifiers from subject.
(when gnus-list-identifiers
@@ -6346,8 +6508,7 @@ executed with point over the summary line of the articles."
(defun gnus-summary-process-mark-set (set)
"Make SET into the current process marked articles."
(gnus-summary-unmark-all-processable)
- (while set
- (gnus-summary-set-process-mark (pop set))))
+ (mapc 'gnus-summary-set-process-mark set))
;;; Searching and stuff
@@ -6363,8 +6524,7 @@ If optional argument BACKWARD is non-nil, search backward instead."
(defun gnus-summary-best-group (&optional exclude-group)
"Find the name of the best unread group.
If EXCLUDE-GROUP, do not go to this group."
- (save-excursion
- (set-buffer gnus-group-buffer)
+ (with-current-buffer gnus-group-buffer
(save-excursion
(gnus-group-best-unread-group exclude-group))))
@@ -6495,7 +6655,7 @@ displayed, no centering will be performed."
((< (window-height) 7) 1)
(t (if (numberp gnus-auto-center-summary)
gnus-auto-center-summary
- 2))))
+ (/ (1- (window-height)) 2)))))
(height (1- (window-height)))
(bottom (save-excursion (goto-char (point-max))
(forward-line (- height))
@@ -6509,7 +6669,7 @@ displayed, no centering will be performed."
(let ((top-pos (save-excursion (forward-line (- top)) (point))))
(if (> bottom top-pos)
;; Keep the second line from the top visible
- (set-window-start window top-pos t)
+ (set-window-start window top-pos)
;; Try to keep the bottom line visible; if it's partially
;; obscured, either scroll one more line to make it fully
;; visible, or revert to using TOP-POS.
@@ -6553,7 +6713,8 @@ displayed, no centering will be performed."
(defun gnus-list-of-unread-articles (group)
(let* ((read (gnus-info-read (gnus-get-info group)))
(active (or (gnus-active group) (gnus-activate-group group)))
- (last (cdr active))
+ (last (or (cdr active)
+ (error "Group %s couldn't be activated " group)))
(bottom (if gnus-newsgroup-maximum-articles
(max (car active)
(- last gnus-newsgroup-maximum-articles -1))
@@ -6753,8 +6914,7 @@ The prefix argument ALL means to select all articles."
(setq gnus-newsgroup-killed (list gnus-newsgroup-killed)))
(let ((headers gnus-newsgroup-headers))
;; Set the new ranges of read articles.
- (save-excursion
- (set-buffer gnus-group-buffer)
+ (with-current-buffer gnus-group-buffer
(gnus-undo-force-boundary))
(gnus-update-read-articles
group (gnus-sorted-union
@@ -6814,8 +6974,13 @@ If FORCE (the prefix), also save the .newsrc file(s)."
(gnus-run-hooks 'gnus-summary-prepare-exit-hook)
;; If we have several article buffers, we kill them at exit.
(unless gnus-single-article-buffer
- (gnus-kill-buffer gnus-original-article-buffer)
- (setq gnus-article-current nil))
+ (when (gnus-buffer-live-p gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
+ ;; Don't kill sticky article buffers
+ (unless (eq major-mode 'gnus-sticky-article-mode)
+ (gnus-kill-buffer gnus-article-buffer)
+ (setq gnus-article-current nil))))
+ (gnus-kill-buffer gnus-original-article-buffer))
(when gnus-use-cache
(gnus-cache-possibly-remove-articles)
(gnus-cache-save-buffers))
@@ -6839,6 +7004,7 @@ If FORCE (the prefix), also save the .newsrc file(s)."
(gnus-group-jump-to-group group))
(gnus-run-hooks 'gnus-summary-exit-hook)
(unless (or quit-config
+ (not gnus-summary-next-group-on-exit)
;; If this group has disappeared from the summary
;; buffer, don't skip forwards.
(not (string= group (gnus-group-group-name))))
@@ -6846,11 +7012,6 @@ If FORCE (the prefix), also save the .newsrc file(s)."
(setq group-point (point))
(if temporary
nil ;Nothing to do.
- ;; If we have several article buffers, we kill them at exit.
- (unless gnus-single-article-buffer
- (gnus-kill-buffer gnus-article-buffer)
- (gnus-kill-buffer gnus-original-article-buffer)
- (setq gnus-article-current nil))
(set-buffer buf)
(if (not gnus-kill-summary-on-exit)
(progn
@@ -6865,12 +7026,6 @@ If FORCE (the prefix), also save the .newsrc file(s)."
(gnus-summary-clear-local-variables))
(when (get-buffer gnus-article-buffer)
(bury-buffer gnus-article-buffer))
- ;; We clear the global counterparts of the buffer-local
- ;; variables as well, just to be on the safe side.
- (set-buffer gnus-group-buffer)
- (gnus-summary-clear-local-variables)
- (let ((gnus-summary-local-variables gnus-newsgroup-variables))
- (gnus-summary-clear-local-variables))
;; Return to group mode buffer.
(when (eq mode 'gnus-summary-mode)
(gnus-kill-buffer buf)))
@@ -6920,10 +7075,6 @@ If FORCE (the prefix), also save the .newsrc file(s)."
(gnus-summary-clear-local-variables)
(let ((gnus-summary-local-variables gnus-newsgroup-variables))
(gnus-summary-clear-local-variables))
- (set-buffer gnus-group-buffer)
- (gnus-summary-clear-local-variables)
- (let ((gnus-summary-local-variables gnus-newsgroup-variables))
- (gnus-summary-clear-local-variables))
(gnus-kill-buffer gnus-summary-buffer))
(unless gnus-single-article-buffer
(setq gnus-article-current nil))
@@ -6962,19 +7113,26 @@ The state which existed when entering the ephemeral is reset."
(gnus-set-global-variables))))
(if (or (eq (cdr quit-config) 'article)
(eq (cdr quit-config) 'pick))
- (progn
- ;; The current article may be from the ephemeral group
- ;; thus it is best that we reload this article
- ;;
- ;; If we're exiting from a large digest, this can be
- ;; extremely slow. So, it's better not to reload it. -- jh.
- ;;(gnus-summary-show-article)
- (if (and (boundp 'gnus-pick-mode) (symbol-value 'gnus-pick-mode))
- (gnus-configure-windows 'pick 'force)
- (gnus-configure-windows (cdr quit-config) 'force)))
+ (if (and (boundp 'gnus-pick-mode) (symbol-value 'gnus-pick-mode))
+ (gnus-configure-windows 'pick 'force)
+ (gnus-configure-windows (cdr quit-config) 'force))
(gnus-configure-windows (cdr quit-config) 'force))
(when (eq major-mode 'gnus-summary-mode)
- (gnus-summary-next-subject 1 nil t)
+ (if (memq gnus-auto-select-on-ephemeral-exit '(next-noselect
+ next-unread-noselect))
+ (when (zerop (cond ((eq gnus-auto-select-on-ephemeral-exit
+ 'next-noselect)
+ (gnus-summary-next-subject 1 nil t))
+ ((eq gnus-auto-select-on-ephemeral-exit
+ 'next-unread-noselect)
+ (gnus-summary-next-subject 1 t t))))
+ ;; Hide the article buffer which displays the article different
+ ;; from the one that the cursor points to in the summary buffer.
+ (gnus-configure-windows 'summary 'force))
+ (cond ((eq gnus-auto-select-on-ephemeral-exit 'next)
+ (gnus-summary-next-subject 1))
+ ((eq gnus-auto-select-on-ephemeral-exit 'next-unread)
+ (gnus-summary-next-subject 1 t))))
(gnus-summary-recenter)
(gnus-summary-position-point))))
@@ -7005,7 +7163,7 @@ The state which existed when entering the ephemeral is reset."
(if (null arg) (not gnus-dead-summary-mode)
(> (prefix-numeric-value arg) 0)))
(when gnus-dead-summary-mode
- (gnus-add-minor-mode
+ (add-minor-mode
'gnus-dead-summary-mode " Dead" gnus-dead-summary-mode-map))))
(defun gnus-deaden-summary ()
@@ -7013,8 +7171,7 @@ The state which existed when entering the ephemeral is reset."
;; Kill any previous dead summary buffer.
(when (and gnus-dead-summary
(buffer-name gnus-dead-summary))
- (save-excursion
- (set-buffer gnus-dead-summary)
+ (with-current-buffer gnus-dead-summary
(when gnus-dead-summary-mode
(kill-buffer (current-buffer)))))
;; Make this the current dead summary.
@@ -7033,8 +7190,7 @@ The state which existed when entering the ephemeral is reset."
(save-excursion
(when (and (buffer-name buffer)
(not gnus-single-article-buffer))
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(gnus-kill-buffer gnus-article-buffer)
(gnus-kill-buffer gnus-original-article-buffer)))
(cond
@@ -7074,7 +7230,7 @@ in."
(when current-prefix-arg
(completing-read
"FAQ dir: " (and (listp gnus-group-faq-directory)
- (mapcar (lambda (file) (list file))
+ (mapcar 'list
gnus-group-faq-directory))))))
(let (gnus-faq-buffer)
(when (setq gnus-faq-buffer
@@ -7288,15 +7444,15 @@ Given a prefix, will force an `article' buffer configuration."
(defun gnus-summary-display-article (article &optional all-header)
"Display ARTICLE in article buffer."
- (when (gnus-buffer-live-p gnus-article-buffer)
- (with-current-buffer gnus-article-buffer
- (mm-enable-multibyte)))
+ (unless (and (gnus-buffer-live-p gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
+ (eq major-mode 'gnus-article-mode)))
+ (gnus-article-setup-buffer))
(gnus-set-global-variables)
- (when (gnus-buffer-live-p gnus-article-buffer)
- (with-current-buffer gnus-article-buffer
- (setq gnus-article-charset gnus-newsgroup-charset)
- (setq gnus-article-ignored-charsets gnus-newsgroup-ignored-charsets)
- (mm-enable-multibyte)))
+ (with-current-buffer gnus-article-buffer
+ (setq gnus-article-charset gnus-newsgroup-charset)
+ (setq gnus-article-ignored-charsets gnus-newsgroup-ignored-charsets)
+ (mm-enable-multibyte))
(if (null article)
nil
(prog1
@@ -7403,8 +7559,7 @@ If BACKWARD, the previous article is selected instead of the next."
(gnus-summary-jump-to-group gnus-newsgroup-name))
(let ((cmd last-command-char)
(point
- (save-excursion
- (set-buffer gnus-group-buffer)
+ (with-current-buffer gnus-group-buffer
(point)))
(group
(if (eq gnus-keep-same-level 'best)
@@ -7457,7 +7612,7 @@ If BACKWARD, the previous article is selected instead of the next."
(format " (Type %s for %s [%s])"
(single-key-description cmd)
(gnus-group-decoded-name group)
- (car (gnus-gethash group gnus-newsrc-hashtb)))
+ (gnus-group-unread group))
(format " (Type %s to exit %s)"
(single-key-description cmd)
(gnus-group-decoded-name gnus-newsgroup-name)))))
@@ -7845,6 +8000,123 @@ If NOT-MATCHING, excluding articles that have authors that match a regexp."
current-prefix-arg))
(gnus-summary-limit-to-subject from "from" not-matching))
+(defun gnus-summary-limit-to-recipient (recipient &optional not-matching)
+ "Limit the summary buffer to articles with the given RECIPIENT.
+
+If NOT-MATCHING, exclude RECIPIENT.
+
+To and Cc headers are checked. You need to include them in
+`nnmail-extra-headers'."
+ ;; Unlike `rmail-summary-by-recipients', doesn't include From.
+ (interactive
+ (list (read-string (format "%s recipient (regexp): "
+ (if current-prefix-arg "Exclude" "Limit to")))
+ current-prefix-arg))
+ (when (not (equal "" recipient))
+ (prog1 (let* ((to
+ (if (memq 'To nnmail-extra-headers)
+ (gnus-summary-find-matching
+ (cons 'extra 'To) recipient 'all nil nil
+ not-matching)
+ (gnus-message
+ 1 "`To' isn't present in `nnmail-extra-headers'")
+ (sit-for 1)
+ nil))
+ (cc
+ (if (memq 'Cc nnmail-extra-headers)
+ (gnus-summary-find-matching
+ (cons 'extra 'Cc) recipient 'all nil nil
+ not-matching)
+ (gnus-message
+ 1 "`Cc' isn't present in `nnmail-extra-headers'")
+ (sit-for 1)
+ nil))
+ (articles
+ (if not-matching
+ ;; We need the numbers that are in both lists:
+ (mapcar (lambda (a)
+ (and (memq a to) a))
+ cc)
+ (nconc to cc))))
+ (unless articles
+ (error "Found no matches for \"%s\"" recipient))
+ (gnus-summary-limit articles))
+ (gnus-summary-position-point))))
+
+(defun gnus-summary-limit-to-address (address &optional not-matching)
+ "Limit the summary buffer to articles with the given ADDRESS.
+
+If NOT-MATCHING, exclude ADDRESS.
+
+To, Cc and From headers are checked. You need to include `To' and `Cc'
+in `nnmail-extra-headers'."
+ (interactive
+ (list (read-string (format "%s address (regexp): "
+ (if current-prefix-arg "Exclude" "Limit to")))
+ current-prefix-arg))
+ (when (not (equal "" address))
+ (prog1 (let* ((to
+ (if (memq 'To nnmail-extra-headers)
+ (gnus-summary-find-matching
+ (cons 'extra 'To) address 'all nil nil
+ not-matching)
+ (gnus-message
+ 1 "`To' isn't present in `nnmail-extra-headers'")
+ (sit-for 1)
+ t))
+ (cc
+ (if (memq 'Cc nnmail-extra-headers)
+ (gnus-summary-find-matching
+ (cons 'extra 'Cc) address 'all nil nil
+ not-matching)
+ (gnus-message
+ 1 "`Cc' isn't present in `nnmail-extra-headers'")
+ (sit-for 1)
+ t))
+ (from
+ (gnus-summary-find-matching "from" address
+ 'all nil nil not-matching))
+ (articles
+ (if not-matching
+ ;; We need the numbers that are in all lists:
+ (if (eq cc t)
+ (if (eq to t)
+ from
+ (mapcar (lambda (a) (car (memq a from))) to))
+ (if (eq to t)
+ (mapcar (lambda (a) (car (memq a from))) cc)
+ (mapcar (lambda (a) (car (memq a from)))
+ (mapcar (lambda (a) (car (memq a to)))
+ cc))))
+ (nconc (if (eq to t) nil to)
+ (if (eq cc t) nil cc)
+ from))))
+ (unless articles
+ (error "Found no matches for \"%s\"" address))
+ (gnus-summary-limit articles))
+ (gnus-summary-position-point))))
+
+(defun gnus-summary-limit-strange-charsets-predicate (header)
+ (let ((string (concat (mail-header-subject header)
+ (mail-header-from header)))
+ charset found)
+ (dotimes (i (1- (length string)))
+ (setq charset (format "%s" (char-charset (aref string (1+ i)))))
+ (when (string-match "unicode\\|big\\|japanese" charset)
+ (setq found t)))
+ found))
+
+(defun gnus-summary-limit-to-predicate (predicate)
+ "Limit to articles where PREDICATE returns non-nil.
+PREDICATE will be called with the header structures of the
+articles."
+ (let ((articles nil)
+ (case-fold-search t))
+ (dolist (header gnus-newsgroup-headers)
+ (when (funcall predicate header)
+ (push (mail-header-number header) articles)))
+ (gnus-summary-limit (nreverse articles))))
+
(defun gnus-summary-limit-to-age (age &optional younger-p)
"Limit the summary buffer to articles that are older than (or equal) AGE days.
If YOUNGER-P (the prefix) is non-nil, limit the summary buffer to
@@ -7863,10 +8135,9 @@ articles that are younger than AGE days."
(if (numberp days)
(progn
(setq days-got t)
- (if (< days 0)
- (progn
- (setq younger (not younger))
- (setq days (* days -1)))))
+ (when (< days 0)
+ (setq younger (not younger))
+ (setq days (* days -1))))
(message "Please enter a number.")
(sleep-for 1)))
(list days younger)))
@@ -7951,6 +8222,81 @@ If ALL is non-nil, limit strictly to unread articles."
gnus-duplicate-mark gnus-souped-mark)
'reverse)))
+(defun gnus-summary-limit-to-headers (match &optional reverse)
+ "Limit the summary buffer to articles that have headers that match MATCH.
+If REVERSE (the prefix), limit to articles that don't match."
+ (interactive "sMatch headers (regexp): \nP")
+ (gnus-summary-limit-to-bodies match reverse t))
+
+(defun gnus-summary-limit-to-bodies (match &optional reverse headersp)
+ "Limit the summary buffer to articles that have bodies that match MATCH.
+If REVERSE (the prefix), limit to articles that don't match."
+ (interactive "sMatch body (regexp): \nP")
+ (let ((articles nil)
+ (gnus-select-article-hook nil) ;Disable hook.
+ (gnus-article-prepare-hook nil)
+ (gnus-use-article-prefetch nil)
+ (gnus-keep-backlog nil)
+ (gnus-break-pages nil)
+ (gnus-summary-display-arrow nil)
+ (gnus-updated-mode-lines nil)
+ (gnus-auto-center-summary nil)
+ (gnus-display-mime-function nil))
+ (dolist (data gnus-newsgroup-data)
+ (let (gnus-mark-article-hook)
+ (gnus-summary-select-article t t nil (gnus-data-number data)))
+ (save-excursion
+ (set-buffer gnus-article-buffer)
+ (article-goto-body)
+ (let* ((case-fold-search t)
+ (found (if headersp
+ (re-search-backward match nil t)
+ (re-search-forward match nil t))))
+ (when (or (and found
+ (not reverse))
+ (and (not found)
+ reverse))
+ (push (gnus-data-number data) articles)))))
+ (if (not articles)
+ (message "No messages matched")
+ (gnus-summary-limit articles)))
+ (gnus-summary-position-point))
+
+(defun gnus-summary-limit-to-singletons (&optional threadsp)
+ "Limit the summary buffer to articles that aren't part on any thread.
+If THREADSP (the prefix), limit to articles that are in threads."
+ (interactive "P")
+ (let ((articles nil)
+ thread-articles
+ threads)
+ (dolist (thread gnus-newsgroup-threads)
+ (if (stringp (car thread))
+ (dolist (thread (cdr thread))
+ (push thread threads))
+ (push thread threads)))
+ (dolist (thread threads)
+ (setq thread-articles (gnus-articles-in-thread thread))
+ (when (or (and threadsp
+ (> (length thread-articles) 1))
+ (and (not threadsp)
+ (= (length thread-articles) 1)))
+ (setq articles (nconc thread-articles articles))))
+ (if (not articles)
+ (message "No messages matched")
+ (gnus-summary-limit articles))
+ (gnus-summary-position-point)))
+
+(defun gnus-summary-limit-to-replied (&optional unreplied)
+ "Limit the summary buffer to replied articles.
+If UNREPLIED (the prefix), limit to unreplied articles."
+ (interactive "P")
+ (if unreplied
+ (gnus-summary-limit
+ (gnus-set-difference gnus-newsgroup-articles
+ gnus-newsgroup-replied))
+ (gnus-summary-limit gnus-newsgroup-replied))
+ (gnus-summary-position-point))
+
(defalias 'gnus-summary-delete-marked-with 'gnus-summary-limit-exclude-marks)
(make-obsolete 'gnus-summary-delete-marked-with
'gnus-summary-limit-exclude-marks)
@@ -8036,6 +8382,14 @@ article."
(gnus-message 3 "No dormant articles for this group")
(gnus-summary-goto-subjects gnus-newsgroup-dormant))))
+(defun gnus-summary-insert-ticked-articles ()
+ "Insert ticked articles for this group into the current buffer."
+ (interactive)
+ (let ((gnus-verbose (max 6 gnus-verbose)))
+ (if (not gnus-newsgroup-marked)
+ (gnus-message 3 "No ticked articles for this group")
+ (gnus-summary-goto-subjects gnus-newsgroup-marked))))
+
(defun gnus-summary-limit-include-dormant ()
"Display all the hidden articles that are marked as dormant.
Note that this command only works on a subset of the articles currently
@@ -8296,13 +8650,12 @@ fetch-old-headers verbiage, and so on."
(and gnus-newsgroup-display
(not (funcall gnus-newsgroup-display)))
;; Check NoCeM things.
- (if (and gnus-use-nocem
- (gnus-nocem-unwanted-article-p
- (mail-header-id (car thread))))
- (progn
- (setq gnus-newsgroup-unreads
- (delq number gnus-newsgroup-unreads))
- t))))
+ (when (and gnus-use-nocem
+ (gnus-nocem-unwanted-article-p
+ (mail-header-id (car thread))))
+ (setq gnus-newsgroup-unreads
+ (delq number gnus-newsgroup-unreads))
+ t)))
;; Nope, invisible article.
0
;; Ok, this article is to be visible, so we add it to the limit
@@ -8514,8 +8867,7 @@ to guess what the document format is."
(let* ((name (format "%s-%d"
(gnus-group-prefixed-name
gnus-newsgroup-name (list 'nndoc ""))
- (save-excursion
- (set-buffer gnus-summary-buffer)
+ (with-current-buffer gnus-summary-buffer
gnus-current-article)))
(ogroup gnus-newsgroup-name)
(params (append (gnus-info-params (gnus-get-info ogroup))
@@ -8573,12 +8925,11 @@ This will allow you to read digests and other similar
documents as newsgroups.
Obeys the standard process/prefix convention."
(interactive "P")
- (let* ((articles (gnus-summary-work-articles n))
- (ogroup gnus-newsgroup-name)
+ (let* ((ogroup gnus-newsgroup-name)
(params (append (gnus-info-params (gnus-get-info ogroup))
(list (cons 'to-group ogroup))))
- article group egroup groups vgroup)
- (while (setq article (pop articles))
+ group egroup groups vgroup)
+ (dolist (article (gnus-summary-work-articles n))
(setq group (format "%s-%d" gnus-newsgroup-name article))
(gnus-summary-remove-process-mark article)
(when (gnus-summary-display-article article)
@@ -8589,7 +8940,7 @@ Obeys the standard process/prefix convention."
;; the wrong guess.
(message-narrow-to-head)
(goto-char (point-min))
- (delete-matching-lines "^\\(Path\\):\\|^From ")
+ (delete-matching-lines "^Path:\\|^From ")
(widen)
(if (setq egroup
(gnus-group-read-ephemeral-group
@@ -8628,6 +8979,20 @@ If REGEXP-P (the prefix) is non-nil, do regexp isearch."
(widen)
(isearch-forward regexp-p))))
+(defun gnus-summary-repeat-search-article-forward ()
+ "Repeat the previous search forwards."
+ (interactive)
+ (unless gnus-last-search-regexp
+ (error "No previous search"))
+ (gnus-summary-search-article-forward gnus-last-search-regexp))
+
+(defun gnus-summary-repeat-search-article-backward ()
+ "Repeat the previous search backwards."
+ (interactive)
+ (unless gnus-last-search-regexp
+ (error "No previous search"))
+ (gnus-summary-search-article-forward gnus-last-search-regexp t))
+
(defun gnus-summary-search-article-forward (regexp &optional backward)
"Search for an article containing REGEXP forward.
If BACKWARD, search backward instead."
@@ -8930,8 +9295,7 @@ strokes are `C-u g'."
(or (cdr (assq arg gnus-summary-show-article-charset-alist))
(mm-read-coding-system
"View as charset: " ;; actually it is coding system.
- (save-excursion
- (set-buffer gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
(mm-detect-coding-region (point) (point-max))))))
(gnus-newsgroup-ignored-charsets 'gnus-all))
(gnus-summary-select-article nil 'force)
@@ -9055,8 +9419,8 @@ If ARG is a negative number, hide the unwanted header lines."
(defun gnus-summary-caesar-message (&optional arg)
"Caesar rotate the current article by 13.
-The numerical prefix specifies how many places to rotate each letter
-forward."
+With a non-numerical prefix, also rotate headers. A numerical
+prefix specifies how many places to rotate each letter forward."
(interactive "P")
(gnus-summary-select-article)
(let ((mail-header-separator ""))
@@ -9065,14 +9429,38 @@ forward."
(widen)
(let ((start (window-start))
buffer-read-only)
- (message-caesar-buffer-body arg)
+ (if (equal arg '(4))
+ (message-caesar-buffer-body nil t)
+ (message-caesar-buffer-body arg))
(set-window-start (get-buffer-window (current-buffer)) start)))))
;; Create buttons and stuff...
(gnus-treat-article nil))
-(autoload 'unmorse-region "morse"
- "Convert morse coded text in region to ordinary ASCII text."
- t)
+(defun gnus-summary-idna-message (&optional arg)
+ "Decode IDNA encoded domain names in the current articles.
+IDNA encoded domain names looks like `xn--bar'. If a string
+remain unencoded after running this function, it is likely an
+invalid IDNA string (`xn--bar' is invalid).
+
+You must have GNU Libidn (`http://www.gnu.org/software/libidn/')
+installed for this command to work."
+ (interactive "P")
+ (if (not (and (condition-case nil (require 'idna)
+ (file-error))
+ (mm-coding-system-p 'utf-8)
+ (executable-find (symbol-value 'idna-program))))
+ (gnus-message
+ 5 "GNU Libidn not installed properly (`idn' or `idna.el' missing)")
+ (gnus-summary-select-article)
+ (let ((mail-header-separator ""))
+ (gnus-eval-in-buffer-window gnus-article-buffer
+ (save-restriction
+ (widen)
+ (let ((start (window-start))
+ buffer-read-only)
+ (while (re-search-forward "\\(xn--[-0-9a-z]+\\)" nil t)
+ (replace-match (idna-to-unicode (match-string 1))))
+ (set-window-start (get-buffer-window (current-buffer)) start)))))))
(defun gnus-summary-morse-message (&optional arg)
"Morse decode the current article."
@@ -9089,7 +9477,7 @@ forward."
(when (message-goto-body)
(gnus-narrow-to-body))
(goto-char (point-min))
- (while (re-search-forward "·" (point-max) t)
+ (while (search-forward "·" (point-max) t)
(replace-match "."))
(unmorse-region (point-min) (point-max))
(widen)
@@ -9142,14 +9530,16 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(let ((articles (gnus-summary-work-articles n))
(prefix (if (gnus-check-backend-function
'request-move-article gnus-newsgroup-name)
- (gnus-group-real-prefix gnus-newsgroup-name)
+ (funcall gnus-move-group-prefix-function
+ gnus-newsgroup-name)
""))
(names '((move "Move" "Moving")
(copy "Copy" "Copying")
(crosspost "Crosspost" "Crossposting")))
(copy-buf (save-excursion
(nnheader-set-temp-buffer " *copy article*")))
- art-group to-method new-xref article to-groups)
+ art-group to-method new-xref article to-groups
+ articles-to-update-marks encoded)
(unless (assq action names)
(error "Unknown action %s" action))
;; Read the newsgroup name.
@@ -9167,15 +9557,27 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(gnus-article-prepare-hook nil)
(gnus-mark-article-hook nil))
(gnus-summary-select-article nil nil nil (car articles))))
- (setq to-newsgroup
- (gnus-read-move-group-name
- (cadr (assq action names))
- (symbol-value (intern (format "gnus-current-%s-group" action)))
- articles prefix))
- (set (intern (format "gnus-current-%s-group" action)) to-newsgroup))
- (setq to-method (or select-method
- (gnus-server-to-method
- (gnus-group-method to-newsgroup))))
+ (setq to-newsgroup (gnus-read-move-group-name
+ (cadr (assq action names))
+ (symbol-value
+ (intern (format "gnus-current-%s-group" action)))
+ articles prefix)
+ encoded to-newsgroup
+ to-method (gnus-server-to-method (gnus-group-method to-newsgroup)))
+ (set (intern (format "gnus-current-%s-group" action))
+ (mm-decode-coding-string
+ to-newsgroup
+ (gnus-group-name-charset to-method to-newsgroup))))
+ (unless to-method
+ (setq to-method (or select-method
+ (gnus-server-to-method
+ (gnus-group-method to-newsgroup)))))
+ (setq to-newsgroup
+ (or encoded
+ (and to-newsgroup
+ (mm-encode-coding-string
+ to-newsgroup
+ (gnus-group-name-charset to-method to-newsgroup)))))
;; Check the method we are to move this article to...
(unless (gnus-check-backend-function
'request-accept-article (car to-method))
@@ -9184,7 +9586,9 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(error "Can't open server %s" (car to-method)))
(gnus-message 6 "%s to %s: %s..."
(caddr (assq action names))
- (or (car select-method) to-newsgroup) articles)
+ (or (car select-method)
+ (gnus-group-decoded-name to-newsgroup))
+ articles)
(while articles
(setq article (pop articles))
(setq
@@ -9194,20 +9598,30 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
((eq action 'move)
;; Remove this article from future suppression.
(gnus-dup-unsuppress-article article)
- (gnus-request-move-article
- article ; Article to move
- gnus-newsgroup-name ; From newsgroup
- (nth 1 (gnus-find-method-for-group
- gnus-newsgroup-name)) ; Server
- (list 'gnus-request-accept-article
- to-newsgroup (list 'quote select-method)
- (not articles) t) ; Accept form
- (not articles))) ; Only save nov last time
+ (let* ((from-method (gnus-find-method-for-group
+ gnus-newsgroup-name))
+ (to-method (or select-method
+ (gnus-find-method-for-group to-newsgroup)))
+ (move-is-internal (gnus-method-equal from-method to-method)))
+ (gnus-request-move-article
+ article ; Article to move
+ gnus-newsgroup-name ; From newsgroup
+ (nth 1 (gnus-find-method-for-group
+ gnus-newsgroup-name)) ; Server
+ (list 'gnus-request-accept-article
+ to-newsgroup (list 'quote select-method)
+ (not articles) t) ; Accept form
+ (not articles) ; Only save nov last time
+ move-is-internal))) ; is this move internal?
;; Copy the article.
((eq action 'copy)
(save-excursion
(set-buffer copy-buf)
(when (gnus-request-article-this-buffer article gnus-newsgroup-name)
+ (save-restriction
+ (nnheader-narrow-to-headers)
+ (dolist (hdr gnus-copy-article-ignored-headers)
+ (message-remove-header hdr t)))
(gnus-request-accept-article
to-newsgroup select-method (not articles) t))))
;; Crosspost the article.
@@ -9260,9 +9674,7 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(t
(let* ((pto-group (gnus-group-prefixed-name
(car art-group) to-method))
- (entry
- (gnus-gethash pto-group gnus-newsrc-hashtb))
- (info (nth 2 entry))
+ (info (gnus-get-info pto-group))
(to-group (gnus-info-group info))
to-marks)
;; Update the group that has been moved to.
@@ -9354,7 +9766,9 @@ ACTION can be either `move' (the default), `crosspost' or `copy'."
(gnus-summary-goto-subject article)
(when (eq action 'move)
(gnus-summary-mark-article article gnus-canceled-mark))))
- (gnus-summary-remove-process-mark article))
+ (push article articles-to-update-marks))
+
+ (apply 'gnus-summary-remove-process-mark articles-to-update-marks)
;; Re-activate all groups that have been moved to.
(save-excursion
(set-buffer gnus-group-buffer)
@@ -9630,10 +10044,10 @@ confirmation before the articles are deleted."
(unless (memq (car articles) not-deleted)
(gnus-summary-mark-article (car articles) gnus-canceled-mark))
(let* ((article (car articles))
- (id (mail-header-id (gnus-data-header
- (assoc article (gnus-data-list nil))))))
+ (ghead (gnus-data-header
+ (assoc article (gnus-data-list nil)))))
(run-hook-with-args 'gnus-summary-article-delete-hook
- 'delete id gnus-newsgroup-name nil
+ 'delete ghead gnus-newsgroup-name nil
nil))
(setq articles (cdr articles)))
(when not-deleted
@@ -9706,7 +10120,16 @@ groups."
(message-options message-options)
(message-options-set-recipient)
(mail-parse-ignored-charsets
- ',gnus-newsgroup-ignored-charsets))
+ ',gnus-newsgroup-ignored-charsets)
+ (rfc2047-header-encoding-alist
+ ',(let ((charset (gnus-group-name-charset
+ (gnus-find-method-for-group
+ gnus-newsgroup-name)
+ gnus-newsgroup-name)))
+ (append (list (cons "Newsgroups" charset)
+ (cons "Followup-To" charset)
+ (cons "Xref" charset))
+ rfc2047-header-encoding-alist))))
,(if (not raw) '(progn
(mml-to-mime)
(mml-destroy-buffers)
@@ -10014,8 +10437,7 @@ ARTICLE can also be a list of articles."
;; (article-number . line-number-in-body).
(push
(cons article
- (save-excursion
- (set-buffer gnus-article-buffer)
+ (with-current-buffer gnus-article-buffer
(count-lines
(min (point)
(save-excursion
@@ -10052,13 +10474,15 @@ the actual number of articles marked is returned."
(gnus-summary-goto-subject article)
(gnus-summary-update-secondary-mark article)))
-(defun gnus-summary-remove-process-mark (article)
- "Remove the process mark from ARTICLE and update the summary line."
- (setq gnus-newsgroup-processable (delq article gnus-newsgroup-processable))
- (when (gnus-summary-goto-subject article)
- (gnus-summary-show-thread)
- (gnus-summary-goto-subject article)
- (gnus-summary-update-secondary-mark article)))
+(defun gnus-summary-remove-process-mark (&rest articles)
+ "Remove the process mark from ARTICLES and update the summary line."
+ (dolist (article articles)
+ (setq gnus-newsgroup-processable (delq article gnus-newsgroup-processable))
+ (when (gnus-summary-goto-subject article)
+ (gnus-summary-show-thread)
+ (gnus-summary-goto-subject article)
+ (gnus-summary-update-secondary-mark article)))
+ t)
(defun gnus-summary-set-saved-mark (article)
"Set the process mark on ARTICLE and update the summary line."
@@ -10259,7 +10683,7 @@ If NO-EXPIRE, auto-expiry will be inhibited."
(defun gnus-summary-update-mark (mark type)
(let ((forward (cdr (assq type gnus-summary-mark-positions)))
(buffer-read-only nil))
- (re-search-backward "[\n\r]" (gnus-point-at-bol) 'move-to-limit)
+ (re-search-backward "[\n\r]" (point-at-bol) 'move-to-limit)
(when forward
(when (looking-at "\r")
(incf forward))
@@ -10502,9 +10926,8 @@ even ticked and dormant ones."
(goto-char (point-min))
(push gnus-newsgroup-limit gnus-newsgroup-limits)
(setq gnus-newsgroup-limit (copy-sequence gnus-newsgroup-limit))
- (mapcar (lambda (x) (push (mail-header-number x)
- gnus-newsgroup-limit))
- headers)
+ (dolist (x headers)
+ (push (mail-header-number x) gnus-newsgroup-limit))
(gnus-summary-prepare-unthreaded (nreverse headers))
(goto-char (point-min))
(gnus-summary-position-point)
@@ -10629,6 +11052,15 @@ read."
(gnus-summary-catchup all))
(gnus-summary-next-group))
+(defun gnus-summary-catchup-and-goto-prev-group (&optional all)
+ "Mark all articles in this group as read and select the previous group.
+If given a prefix, mark all articles, unread as well as ticked, as
+read."
+ (interactive "P")
+ (save-excursion
+ (gnus-summary-catchup all))
+ (gnus-summary-next-group nil nil t))
+
;;;
;;; with article
;;;
@@ -10721,41 +11153,51 @@ is non-nil or the Subject: of both articles are the same."
(error "The current newsgroup does not support article editing"))
(unless (<= (length gnus-newsgroup-processable) 1)
(error "No more than one article may be marked"))
- (save-window-excursion
- (let ((gnus-article-buffer " *reparent*")
- (current-article (gnus-summary-article-number))
- ;; First grab the marked article, otherwise one line up.
- (parent-article (if (not (null gnus-newsgroup-processable))
- (car gnus-newsgroup-processable)
- (save-excursion
- (if (eq (forward-line -1) 0)
- (gnus-summary-article-number)
- (error "Beginning of summary buffer"))))))
- (unless (not (eq current-article parent-article))
- (error "An article may not be self-referential"))
- (let ((message-id (mail-header-id
- (gnus-summary-article-header parent-article))))
- (unless (and message-id (not (equal message-id "")))
- (error "No message-id in desired parent"))
- (gnus-with-article current-article
- (save-restriction
- (goto-char (point-min))
- (message-narrow-to-head)
- (if (re-search-forward "^References: " nil t)
- (progn
- (re-search-forward "^[^ \t]" nil t)
- (forward-line -1)
- (end-of-line)
- (insert " " message-id))
- (insert "References: " message-id "\n"))))
- (set-buffer gnus-summary-buffer)
- (gnus-summary-unmark-all-processable)
- (gnus-summary-update-article current-article)
- (if (gnus-summary-goto-subject (cdr gnus-article-current) nil t)
+ (let ((child (gnus-summary-article-number))
+ ;; First grab the marked article, otherwise one line up.
+ (parent (if (not (null gnus-newsgroup-processable))
+ (car gnus-newsgroup-processable)
+ (save-excursion
+ (if (eq (forward-line -1) 0)
+ (gnus-summary-article-number)
+ (error "Beginning of summary buffer"))))))
+ (gnus-summary-reparent-children parent (list child))))
+
+(defun gnus-summary-reparent-children (parent children)
+ "Make PARENT the parent of CHILDREN.
+When called interactively, PARENT is the current article and CHILDREN
+are the process-marked articles."
+ (interactive
+ (list (gnus-summary-article-number)
+ (gnus-summary-work-articles nil)))
+ (dolist (child children)
+ (save-window-excursion
+ (let ((gnus-article-buffer " *reparent*"))
+ (unless (not (eq parent child))
+ (error "An article may not be self-referential"))
+ (let ((message-id (mail-header-id
+ (gnus-summary-article-header parent))))
+ (unless (and message-id (not (equal message-id "")))
+ (error "No message-id in desired parent"))
+ (gnus-with-article child
+ (save-restriction
+ (goto-char (point-min))
+ (message-narrow-to-head)
+ (if (re-search-forward "^References: " nil t)
+ (progn
+ (re-search-forward "^[^ \t]" nil t)
+ (forward-line -1)
+ (end-of-line)
+ (insert " " message-id))
+ (insert "References: " message-id "\n"))))
+ (set-buffer gnus-summary-buffer)
+ (gnus-summary-unmark-all-processable)
+ (gnus-summary-update-article child)
+ (when (gnus-summary-goto-subject (cdr gnus-article-current) nil t)
(gnus-summary-update-secondary-mark (cdr gnus-article-current)))
- (gnus-summary-rethread-current)
- (gnus-message 3 "Article %d is now the child of article %d"
- current-article parent-article)))))
+ (gnus-summary-rethread-current)
+ (gnus-message 3 "Article %d is now the child of article %d"
+ child parent))))))
(defun gnus-summary-toggle-threads (&optional arg)
"Toggle showing conversation threads.
@@ -10784,7 +11226,7 @@ Returns nil if no thread was there to be shown."
(interactive)
(let ((buffer-read-only nil)
(orig (point))
- (end (gnus-point-at-eol))
+ (end (point-at-eol))
;; Leave point at bol
(beg (progn (beginning-of-line) (point))))
(prog1
@@ -10948,14 +11390,21 @@ taken."
(while (gnus-summary-go-up-thread))
(gnus-summary-article-number))
+(defun gnus-summary-expire-thread ()
+ "Mark articles under current thread as expired."
+ (interactive)
+ (gnus-summary-kill-thread 0))
+
(defun gnus-summary-kill-thread (&optional unmark)
"Mark articles under current thread as read.
If the prefix argument is positive, remove any kinds of marks.
+If the prefix argument is zero, mark thread as expired.
If the prefix argument is negative, tick articles instead."
(interactive "P")
(when unmark
(setq unmark (prefix-numeric-value unmark)))
- (let ((articles (gnus-summary-articles-in-thread)))
+ (let ((articles (gnus-summary-articles-in-thread))
+ (hide (or (null unmark) (= unmark 0))))
(save-excursion
;; Expand the thread.
(gnus-summary-show-thread)
@@ -10966,15 +11415,17 @@ If the prefix argument is negative, tick articles instead."
(gnus-summary-mark-article-as-read gnus-killed-mark))
((> unmark 0)
(gnus-summary-mark-article-as-unread gnus-unread-mark))
+ ((= unmark 0)
+ (gnus-summary-mark-article-as-unread gnus-expirable-mark))
(t
(gnus-summary-mark-article-as-unread gnus-ticked-mark)))
(setq articles (cdr articles))))
- ;; Hide killed subtrees.
- (and (null unmark)
+ ;; Hide killed subtrees when hide is true.
+ (and hide
gnus-thread-hide-killed
(gnus-summary-hide-thread))
- ;; If marked as read, go to next unread subject.
- (when (null unmark)
+ ;; If hide is t, go to next unread subject.
+ (when hide
;; Go to next unread subject.
(gnus-summary-next-subject 1 t)))
(gnus-set-mode-line 'summary))
@@ -11000,6 +11451,13 @@ Argument REVERSE means reverse order."
(interactive "P")
(gnus-summary-sort 'author reverse))
+(defun gnus-summary-sort-by-recipient (&optional reverse)
+ "Sort the summary buffer by recipient name alphabetically.
+If `case-fold-search' is non-nil, case of letters is ignored.
+Argument REVERSE means reverse order."
+ (interactive "P")
+ (gnus-summary-sort 'recipient reverse))
+
(defun gnus-summary-sort-by-subject (&optional reverse)
"Sort the summary buffer by subject alphabetically. `Re:'s are ignored.
If `case-fold-search' is non-nil, case of letters is ignored.
@@ -11288,46 +11746,51 @@ save those articles instead."
(format "these %d articles" (length articles))
"this article")))
(to-newsgroup
- (cond
- ((null split-name)
- (gnus-completing-read-with-default
- default prom
- gnus-active-hashtb
- 'gnus-valid-move-group-p
- nil prefix
- 'gnus-group-history))
- ((= 1 (length split-name))
- (gnus-completing-read-with-default
- (car split-name) prom
- gnus-active-hashtb
- 'gnus-valid-move-group-p
- nil nil
- 'gnus-group-history))
- (t
- (gnus-completing-read-with-default
- nil prom
- (mapcar (lambda (el) (list el))
- (nreverse split-name))
- nil nil nil
- 'gnus-group-history))))
- (to-method (gnus-server-to-method (gnus-group-method to-newsgroup))))
+ (let (active group)
+ (when (or (null split-name) (= 1 (length split-name)))
+ (setq active (gnus-make-hashtable (length gnus-active-hashtb)))
+ (mapatoms (lambda (symbol)
+ (setq group (symbol-name symbol))
+ (when (string-match "[^\000-\177]" group)
+ (setq group (gnus-group-decoded-name group)))
+ (set (intern group active) group))
+ gnus-active-hashtb))
+ (cond
+ ((null split-name)
+ (gnus-completing-read-with-default
+ default prom active 'gnus-valid-move-group-p nil prefix
+ 'gnus-group-history))
+ ((= 1 (length split-name))
+ (gnus-completing-read-with-default
+ (car split-name) prom active 'gnus-valid-move-group-p nil nil
+ 'gnus-group-history))
+ (t
+ (gnus-completing-read-with-default
+ nil prom (mapcar 'list (nreverse split-name)) nil nil nil
+ 'gnus-group-history)))))
+ (to-method (gnus-server-to-method (gnus-group-method to-newsgroup)))
+ encoded)
(when to-newsgroup
(if (or (string= to-newsgroup "")
(string= to-newsgroup prefix))
(setq to-newsgroup default))
(unless to-newsgroup
(error "No group name entered"))
- (or (gnus-active to-newsgroup)
- (gnus-activate-group to-newsgroup nil nil to-method)
+ (setq encoded (mm-encode-coding-string
+ to-newsgroup
+ (gnus-group-name-charset to-method to-newsgroup)))
+ (or (gnus-active encoded)
+ (gnus-activate-group encoded nil nil to-method)
(if (gnus-y-or-n-p (format "No such group: %s. Create it? "
to-newsgroup))
- (or (and (gnus-request-create-group to-newsgroup to-method)
- (gnus-activate-group
- to-newsgroup nil nil to-method)
- (gnus-subscribe-group to-newsgroup))
+ (or (and (gnus-request-create-group encoded to-method)
+ (gnus-activate-group encoded nil nil to-method)
+ (gnus-subscribe-group encoded))
(error "Couldn't create group %s" to-newsgroup)))
- (error "No such group: %s" to-newsgroup)))
- to-newsgroup))
+ (error "No such group: %s" to-newsgroup))
+ encoded)))
+
+(defvar gnus-summary-save-parts-counter)
(defun gnus-summary-save-parts (type dir n &optional reverse)
"Save parts matching TYPE to DIR.
@@ -11351,7 +11814,8 @@ If REVERSE, save parts that do not match TYPE."
(let ((handles (or gnus-article-mime-handles
(mm-dissect-buffer nil gnus-article-loose-mime)
(and gnus-article-emulate-mime
- (mm-uu-dissect)))))
+ (mm-uu-dissect))))
+ (gnus-summary-save-parts-counter 1))
(when handles
(gnus-summary-save-parts-1 type dir handles reverse)
(unless gnus-article-mime-handles ;; Don't destroy this case.
@@ -11373,10 +11837,11 @@ If REVERSE, save parts that do not match TYPE."
(mm-handle-disposition handle) 'filename)
(mail-content-type-get
(mm-handle-type handle) 'name)
- (concat gnus-newsgroup-name
- "." (number-to-string
- (cdr gnus-article-current))))))
+ (format "%s.%d.%d" gnus-newsgroup-name
+ (cdr gnus-article-current)
+ gnus-summary-save-parts-counter))))
dir)))
+ (incf gnus-summary-save-parts-counter)
(unless (file-exists-p file)
(mm-save-part-to-file handle file))))))
@@ -11415,7 +11880,7 @@ If REVERSE, save parts that do not match TYPE."
(lambda (f)
(if (equal f " ")
f
- (mm-quote-arg f)))
+ (shell-quote-argument f)))
files " ")))))
(setq ps (cdr ps)))))
(if (and gnus-view-pseudos (not not-view))
@@ -11531,11 +11996,14 @@ If REVERSE, save parts that do not match TYPE."
() ; Malformed head.
(unless (gnus-summary-article-sparse-p (mail-header-number header))
(when (and (stringp id)
- (not (string= (gnus-group-real-name group)
- (car where))))
- ;; If we fetched by Message-ID and the article came
- ;; from a different group, we fudge some bogus article
- ;; numbers for this article.
+ (or
+ (not (string= (gnus-group-real-name group)
+ (car where)))
+ (not (gnus-server-equal gnus-override-method
+ (gnus-group-method group)))))
+ ;; If we fetched by Message-ID and the article came from
+ ;; a different group (or server), we fudge some bogus
+ ;; article numbers for this article.
(mail-header-set-number header gnus-reffed-article-number))
(save-excursion
(set-buffer gnus-summary-buffer)
@@ -11567,8 +12035,8 @@ If REVERSE, save parts that do not match TYPE."
;; Added by Per Abrahamsen <amanda@iesd.auc.dk>.
(when gnus-summary-selected-face
(save-excursion
- (let* ((beg (gnus-point-at-bol))
- (end (gnus-point-at-eol))
+ (let* ((beg (point-at-bol))
+ (end (point-at-eol))
;; Fix by Mike Dugan <dugan@bucrf16.bu.edu>.
(from (if (get-text-property beg gnus-mouse-face-prop)
beg
@@ -11617,7 +12085,7 @@ If REVERSE, save parts that do not match TYPE."
(defun gnus-summary-highlight-line ()
"Highlight current line according to `gnus-summary-highlight'."
- (let* ((beg (gnus-point-at-bol))
+ (let* ((beg (point-at-bol))
(article (or (gnus-summary-article-number) gnus-current-article))
(score (or (cdr (assq article
gnus-newsgroup-scored))
@@ -11633,7 +12101,7 @@ If REVERSE, save parts that do not match TYPE."
(let ((face (funcall (gnus-summary-highlight-line-0))))
(unless (eq face (get-text-property beg 'face))
(gnus-put-text-property-excluding-characters-with-faces
- beg (gnus-point-at-eol) 'face
+ beg (point-at-eol) 'face
(setq face (if (boundp face) (symbol-value face) face)))
(when gnus-summary-highlight-line-function
(funcall gnus-summary-highlight-line-function article face))))))
@@ -11641,11 +12109,10 @@ If REVERSE, save parts that do not match TYPE."
(defun gnus-update-read-articles (group unread &optional compute)
"Update the list of read articles in GROUP.
UNREAD is a sorted list."
- (let* ((active (or gnus-newsgroup-active (gnus-active group)))
- (entry (gnus-gethash group gnus-newsrc-hashtb))
- (info (nth 2 entry))
- (prev 1)
- read)
+ (let ((active (or gnus-newsgroup-active (gnus-active group)))
+ (info (gnus-get-info group))
+ (prev 1)
+ read)
(if (or (not info) (not active))
;; There is no info on this group if it was, in fact,
;; killed. Gnus stores no information on killed groups, so
@@ -11713,8 +12180,7 @@ UNREAD is a sorted list."
(dolist (buffer (buffer-list))
(when (and (setq buffer (buffer-name buffer))
(string-match "Summary" buffer)
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
;; We check that this is, indeed, a summary buffer.
(and (eq major-mode 'gnus-summary-mode)
;; Also make sure this isn't bogus.
@@ -11775,7 +12241,7 @@ treated as multipart/mixed."
(insert "Mime-Version: 1.0\n")
(widen)
(when (search-forward "\n--" nil t)
- (let ((separator (buffer-substring (point) (gnus-point-at-eol))))
+ (let ((separator (buffer-substring (point) (point-at-eol))))
(message-narrow-to-head)
(message-remove-header "Content-Type")
(goto-char (point-max))
@@ -11886,12 +12352,24 @@ returned."
(when gnus-suppress-duplicates
(gnus-dup-suppress-articles))
- ;; We might want to build some more threads first.
- (when (and gnus-fetch-old-headers
- (eq gnus-headers-retrieved-by 'nov))
- (if (eq gnus-fetch-old-headers 'invisible)
- (gnus-build-all-threads)
- (gnus-build-old-threads)))
+ (if (and gnus-fetch-old-headers
+ (eq gnus-headers-retrieved-by 'nov))
+ ;; We might want to build some more threads first.
+ (if (eq gnus-fetch-old-headers 'invisible)
+ (gnus-build-all-threads)
+ (gnus-build-old-threads))
+ ;; Mark the inserted articles that are unread as unread.
+ (setq gnus-newsgroup-unreads
+ (gnus-sorted-nunion
+ gnus-newsgroup-unreads
+ (gnus-sorted-nintersection
+ (gnus-list-of-unread-articles gnus-newsgroup-name)
+ articles)))
+ ;; Mark the inserted articles as selected so that the information
+ ;; of the marks having been changed by a user may be updated when
+ ;; exiting this group. See `gnus-summary-update-info'.
+ (dolist (art articles)
+ (setq gnus-newsgroup-unselected (delq art gnus-newsgroup-unselected))))
;; Let the Gnus agent mark articles as read.
(when gnus-agent
(gnus-agent-get-undownloaded-list))
@@ -11951,8 +12429,7 @@ If ALL is a number, fetch this number of articles."
(read-string
(format
"How many articles from %s (%s %d): "
- (gnus-limit-string
- (gnus-group-decoded-name gnus-newsgroup-name) 35)
+ (gnus-group-decoded-name gnus-newsgroup-name)
(if initial "max" "default")
len)
(if initial
@@ -11995,7 +12472,7 @@ If ALL is a number, fetch this number of articles."
(push i new)
(decf i))
(if (not new)
- (message "No gnus is bad news.")
+ (message "No gnus is bad news")
(gnus-summary-insert-articles new)
(setq gnus-newsgroup-unreads
(gnus-sorted-nunion gnus-newsgroup-unreads new))
diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el
index 3d85d4ccf5c..a05520ea1fd 100644
--- a/lisp/gnus/gnus-topic.el
+++ b/lisp/gnus/gnus-topic.el
@@ -105,16 +105,16 @@ See Info node `(gnus)Formatting Variables'."
(defun gnus-group-topic-name ()
"The name of the topic on the current line."
- (let ((topic (get-text-property (gnus-point-at-bol) 'gnus-topic)))
+ (let ((topic (get-text-property (point-at-bol) 'gnus-topic)))
(and topic (symbol-name topic))))
(defun gnus-group-topic-level ()
"The level of the topic on the current line."
- (get-text-property (gnus-point-at-bol) 'gnus-topic-level))
+ (get-text-property (point-at-bol) 'gnus-topic-level))
(defun gnus-group-topic-unread ()
"The number of unread articles in topic on the current line."
- (get-text-property (gnus-point-at-bol) 'gnus-topic-unread))
+ (get-text-property (point-at-bol) 'gnus-topic-unread))
(defun gnus-topic-unread (topic)
"Return the number of unread articles in TOPIC."
@@ -127,7 +127,7 @@ See Info node `(gnus)Formatting Variables'."
(defun gnus-topic-visible-p ()
"Return non-nil if the current topic is visible."
- (get-text-property (gnus-point-at-bol) 'gnus-topic-visible))
+ (get-text-property (point-at-bol) 'gnus-topic-visible))
(defun gnus-topic-articles-in-topic (entries)
(let ((total 0)
@@ -167,9 +167,11 @@ See Info node `(gnus)Formatting Variables'."
(list (completing-read "Go to topic: "
(mapcar 'list (gnus-topic-list))
nil t)))
- (dolist (topic (gnus-current-topics topic))
- (gnus-topic-goto-topic topic)
- (gnus-topic-fold t))
+ (let ((buffer-read-only nil))
+ (dolist (topic (gnus-current-topics topic))
+ (unless (gnus-topic-goto-topic topic)
+ (gnus-topic-goto-missing-topic topic)
+ (gnus-topic-display-missing-topic topic))))
(gnus-topic-goto-topic topic))
(defun gnus-current-topic ()
@@ -196,9 +198,7 @@ If TOPIC, start with that topic."
(defun gnus-group-active-topic-p ()
"Say whether the current topic comes from the active topics."
- (save-excursion
- (beginning-of-line)
- (get-text-property (point) 'gnus-active)))
+ (get-text-property (point-at-bol) 'gnus-active))
(defun gnus-topic-find-groups (topic &optional level all lowest recursive)
"Return entries for all visible groups in TOPIC.
@@ -210,7 +210,7 @@ If RECURSIVE is t, return groups in its subtopics too."
;; We go through the newsrc to look for matches.
(while groups
(when (setq group (pop groups))
- (setq entry (gnus-gethash group gnus-newsrc-hashtb)
+ (setq entry (gnus-group-entry group)
info (nth 2 entry)
params (gnus-info-params info)
active (gnus-active group)
@@ -244,13 +244,12 @@ If RECURSIVE is t, return groups in its subtopics too."
(when recursive
(if (eq recursive t)
(setq recursive (cdr (gnus-topic-find-topology topic))))
- (mapcar (lambda (topic-topology)
- (setq visible-groups
- (nconc visible-groups
- (gnus-topic-find-groups
- (caar topic-topology)
- level all lowest topic-topology))))
- (cdr recursive)))
+ (dolist (topic-topology (cdr recursive))
+ (setq visible-groups
+ (nconc visible-groups
+ (gnus-topic-find-groups
+ (caar topic-topology)
+ level all lowest topic-topology)))))
visible-groups))
(defun gnus-topic-goto-previous-topic (n)
@@ -351,7 +350,7 @@ If RECURSIVE is t, return groups in its subtopics too."
(setq topology gnus-topic-topology
gnus-tmp-topics nil))
(push (caar topology) gnus-tmp-topics)
- (mapcar 'gnus-topic-list (cdr topology))
+ (mapc 'gnus-topic-list (cdr topology))
gnus-tmp-topics)
;;; Topic parameter jazz
@@ -378,39 +377,50 @@ If RECURSIVE is t, return groups in its subtopics too."
(format "(gnus-topic-set-parameters %S '%S)" topic parameters))))
(defun gnus-group-topic-parameters (group)
- "Compute the group parameters for GROUP taking into account inheritance from topics."
+ "Compute the group parameters for GROUP in topic mode.
+Possibly inherit parameters from topics above GROUP."
(let ((params-list (copy-sequence (gnus-group-get-parameter group))))
(save-excursion
- (nconc params-list
- (gnus-topic-hierarchical-parameters
- ;; First we try to go to the group within the group
- ;; buffer and find the topic for the group that way.
- ;; This hopefully copes well with groups that are in
- ;; more than one topic. Failing that (i.e. when the
- ;; group isn't visible in the group buffer) we find a
- ;; topic for the group via gnus-group-topic.
- (or (and (gnus-group-goto-group group)
- (gnus-current-topic))
- (gnus-group-topic group)))))))
-
-(defun gnus-topic-hierarchical-parameters (topic)
- "Return a topic list computed for TOPIC."
- (let ((topics (gnus-current-topics topic))
- params-list param out params)
- (while topics
- (push (gnus-topic-parameters (pop topics)) params-list))
- ;; We probably have lots of nil elements here, so
- ;; we remove them. Probably faster than doing this "properly".
- (setq params-list (delq nil params-list))
+ (gnus-topic-hierarchical-parameters
+ ;; First we try to go to the group within the group buffer and find the
+ ;; topic for the group that way. This hopefully copes well with groups
+ ;; that are in more than one topic. Failing that (i.e. when the group
+ ;; isn't visible in the group buffer) we find a topic for the group via
+ ;; gnus-group-topic.
+ (or (and (gnus-group-goto-group group)
+ (gnus-current-topic))
+ (gnus-group-topic group))
+ params-list))))
+
+(defun gnus-topic-hierarchical-parameters (topic &optional group-params-list)
+ "Compute the topic parameters for TOPIC.
+Possibly inherit parameters from topics above TOPIC.
+If optional argument GROUP-PARAMS-LIST is non-nil, use it as the basis for
+inheritance."
+ (let ((params-list
+ ;; We probably have lots of nil elements here, so we remove them.
+ ;; Probably faster than doing this "properly".
+ (delq nil (cons group-params-list
+ (mapcar 'gnus-topic-parameters
+ (gnus-current-topics topic)))))
+ param out params)
;; Now we have all the parameters, so we go through them
;; and do inheritance in the obvious way.
- (while (setq params (pop params-list))
- (while (setq param (pop params))
- (when (atom param)
- (setq param (cons param t)))
- ;; Override any old versions of this param.
- (gnus-pull (car param) out)
- (push param out)))
+ (let (posting-style)
+ (while (setq params (pop params-list))
+ (while (setq param (pop params))
+ (when (atom param)
+ (setq param (cons param t)))
+ (cond ((eq (car param) 'posting-style)
+ (let ((param (cdr param))
+ elt)
+ (while (setq elt (pop param))
+ (unless (assoc (car elt) posting-style)
+ (push elt posting-style)))))
+ (t
+ (unless (assq (car param) out)
+ (push param out))))))
+ (and posting-style (push (cons 'posting-style posting-style) out)))
;; Return the resulting parameter list.
out))
@@ -465,7 +475,7 @@ If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
(gnus-make-hashtable-from-killed))
(gnus-group-prepare-flat-list-dead
(gnus-remove-if (lambda (group)
- (or (gnus-gethash group gnus-newsrc-hashtb)
+ (or (gnus-group-entry group)
(gnus-gethash group gnus-killed-hashtb)))
not-in-list)
gnus-level-killed ?K regexp)))
@@ -727,6 +737,9 @@ articles in the topic and its subtopics."
(not (gnus-topic-goto-missing-topic (caadr parent))))
(gnus-topic-display-missing-topic (caadr parent))))
(gnus-topic-goto-missing-topic topic)
+ ;; Skip past all groups in the topic we're in.
+ (while (gnus-group-group-name)
+ (forward-line 1))
(let* ((top (gnus-topic-find-topology topic))
(children (cddr top))
(type (cadr top))
@@ -848,8 +861,7 @@ articles in the topic and its subtopics."
(pop topics)))
;; Go through all living groups and make sure that
;; they belong to some topic.
- (let* ((tgroups (apply 'append (mapcar (lambda (entry) (cdr entry))
- gnus-topic-alist)))
+ (let* ((tgroups (apply 'append (mapcar 'cdr gnus-topic-alist)))
(entry (last (assoc (caar gnus-topic-topology) gnus-topic-alist)))
(newsrc (cdr gnus-newsrc-alist))
group)
@@ -863,7 +875,7 @@ articles in the topic and its subtopics."
(while (setq topic (pop alist))
(while (cdr topic)
(if (and (cadr topic)
- (gnus-gethash (cadr topic) gnus-newsrc-hashtb))
+ (gnus-group-entry (cadr topic)))
(setq topic (cdr topic))
(setcdr topic (cddr topic)))))))
@@ -893,7 +905,7 @@ articles in the topic and its subtopics."
(let ((topic-name (pop topic))
group filtered-topic)
(while (setq group (pop topic))
- (when (and (or (gnus-gethash group gnus-active-hashtb)
+ (when (and (or (gnus-active group)
(gnus-info-method (gnus-get-info group)))
(not (gnus-gethash group gnus-killed-hashtb)))
(push group filtered-topic)))
@@ -1142,7 +1154,7 @@ articles in the topic and its subtopics."
(when (gnus-visual-p 'topic-menu 'menu)
(gnus-topic-make-menu-bar))
(gnus-set-format 'topic t)
- (gnus-add-minor-mode 'gnus-topic-mode " Topic" gnus-topic-mode-map)
+ (add-minor-mode 'gnus-topic-mode " Topic" gnus-topic-mode-map)
(add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
(set (make-local-variable 'gnus-group-prepare-function)
'gnus-group-prepare-topics)
@@ -1297,15 +1309,13 @@ If COPYP, copy the groups instead."
entry)
(if (and (not groups) (not copyp) start-topic)
(gnus-topic-move start-topic topic)
- (mapcar
- (lambda (g)
- (gnus-group-remove-mark g use-marked)
- (when (and
- (setq entry (assoc (gnus-current-topic) gnus-topic-alist))
- (not copyp))
- (setcdr entry (gnus-delete-first g (cdr entry))))
- (nconc topicl (list g)))
- groups)
+ (dolist (g groups)
+ (gnus-group-remove-mark g use-marked)
+ (when (and
+ (setq entry (assoc (gnus-current-topic) gnus-topic-alist))
+ (not copyp))
+ (setcdr entry (gnus-delete-first g (cdr entry))))
+ (nconc topicl (list g)))
(gnus-topic-enter-dribble)
(if start-group
(gnus-group-goto-group start-group)
@@ -1318,7 +1328,7 @@ If COPYP, copy the groups instead."
(let ((use-marked (and (not n) (not (gnus-region-active-p))
gnus-group-marked t))
(groups (gnus-group-process-prefix n)))
- (mapcar
+ (mapc
(lambda (group)
(gnus-group-remove-mark group use-marked)
(let ((topicl (assoc (gnus-current-topic) gnus-topic-alist))
@@ -1735,9 +1745,7 @@ If REVERSE, reverse the sorting order."
(if (gnus-topic-find-topology to current-top 0);; Don't care the level
(error "Can't move `%s' to its sub-level" current))
(gnus-topic-find-topology current nil nil 'delete)
- (while (cdr to-top)
- (setq to-top (cdr to-top)))
- (setcdr to-top (list current-top))
+ (setcdr (last to-top) (list current-top))
(gnus-topic-enter-dribble)
(gnus-group-list-groups)
(gnus-topic-goto-topic current)))
diff --git a/lisp/gnus/gnus-undo.el b/lisp/gnus/gnus-undo.el
index 47106a49aa5..855b527b883 100644
--- a/lisp/gnus/gnus-undo.el
+++ b/lisp/gnus/gnus-undo.el
@@ -50,7 +50,6 @@
(require 'gnus-util)
(require 'gnus)
-(require 'custom)
(defgroup gnus-undo nil
"Undoing in Gnus buffers."
@@ -113,7 +112,7 @@
;; Set up the menu.
(when (gnus-visual-p 'undo-menu 'menu)
(gnus-undo-make-menu-bar))
- (gnus-add-minor-mode 'gnus-undo-mode "" gnus-undo-mode-map)
+ (add-minor-mode 'gnus-undo-mode "" gnus-undo-mode-map)
(gnus-make-local-hook 'post-command-hook)
(add-hook 'post-command-hook 'gnus-undo-boundary nil t)
(gnus-run-hooks 'gnus-undo-mode-hook)))
@@ -187,8 +186,7 @@ A numeric argument serves as a repeat count."
(error "Nothing further to undo"))
(setq gnus-undo-actions (delq action gnus-undo-actions))
(setq gnus-undo-boundary t)
- (while action
- (funcall (pop action)))))
+ (mapc 'funcall action)))
(provide 'gnus-undo)
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el
index 3d3e4148c2d..de01fb2db11 100644
--- a/lisp/gnus/gnus-util.el
+++ b/lisp/gnus/gnus-util.el
@@ -31,22 +31,21 @@
;; Gnus first.
;; [Unfortunately, it does depend on other parts of Gnus, e.g. the
-;; autoloads below...]
+;; autoloads and defvars below...]
;;; Code:
-(require 'custom)
(eval-when-compile
- (require 'cl)
- ;; Fixme: this should be a gnus variable, not nnmail-.
- (defvar nnmail-pathname-coding-system)
- (defvar nnmail-active-file-coding-system)
-
- ;; Inappropriate references to other parts of Gnus.
- (defvar gnus-emphasize-whitespace-regexp)
- (defvar gnus-original-article-buffer)
- (defvar gnus-user-agent)
- )
+ (require 'cl))
+;; Fixme: this should be a gnus variable, not nnmail-.
+(defvar nnmail-pathname-coding-system)
+(defvar nnmail-active-file-coding-system)
+
+;; Inappropriate references to other parts of Gnus.
+(defvar gnus-emphasize-whitespace-regexp)
+(defvar gnus-original-article-buffer)
+(defvar gnus-user-agent)
+
(require 'time-date)
(require 'netrc)
@@ -67,7 +66,7 @@
;; (replace-in-string "foo" "/*$" "/")
;; (replace-in-string "xe" "\\(x\\)?" "")
((fboundp 'replace-regexp-in-string)
- (defun gnus-replace-in-string (string regexp newtext &optional literal)
+ (defun gnus-replace-in-string (string regexp newtext &optional literal)
"Replace all matches for REGEXP with NEWTEXT in STRING.
If LITERAL is non-nil, insert NEWTEXT literally. Return a new
string containing the replacements.
@@ -75,25 +74,7 @@ string containing the replacements.
This is a compatibility function for different Emacsen."
(replace-regexp-in-string regexp newtext string nil literal)))
((fboundp 'replace-in-string)
- (defalias 'gnus-replace-in-string 'replace-in-string))
- (t
- (defun gnus-replace-in-string (string regexp newtext &optional literal)
- "Replace all matches for REGEXP with NEWTEXT in STRING.
-If LITERAL is non-nil, insert NEWTEXT literally. Return a new
-string containing the replacements.
-
-This is a compatibility function for different Emacsen."
- (let ((start 0) tail)
- (while (string-match regexp string start)
- (setq tail (- (length string) (match-end 0)))
- (setq string (replace-match newtext nil literal string))
- (setq start (- (length string) tail))))
- string))))
-
-;;; bring in the netrc functions as aliases
-(defalias 'gnus-netrc-get 'netrc-get)
-(defalias 'gnus-netrc-machine 'netrc-machine)
-(defalias 'gnus-parse-netrc 'netrc-parse)
+ (defalias 'gnus-replace-in-string 'replace-in-string))))
(defun gnus-boundp (variable)
"Return non-nil if VARIABLE is bound and non-nil."
@@ -128,15 +109,6 @@ This is a compatibility function for different Emacsen."
(set symbol nil))
symbol))
-;; Added by Geoffrey T. Dairiki <dairiki@u.washington.edu>. A safe way
-;; to limit the length of a string. This function is necessary since
-;; `(substr "abc" 0 30)' pukes with "Args out of range".
-;; Fixme: Why not `truncate-string-to-width'?
-(defsubst gnus-limit-string (str width)
- (if (> (length str) width)
- (substring str 0 width)
- str))
-
(defsubst gnus-goto-char (point)
(and point (goto-char point)))
@@ -146,16 +118,6 @@ This is a compatibility function for different Emacsen."
(funcall (if (stringp buffer) 'get-buffer 'buffer-name)
buffer))))
-(defalias 'gnus-point-at-bol
- (if (fboundp 'point-at-bol)
- 'point-at-bol
- 'line-beginning-position))
-
-(defalias 'gnus-point-at-eol
- (if (fboundp 'point-at-eol)
- 'point-at-eol
- 'line-end-position))
-
;; The LOCAL arg to `add-hook' is interpreted differently in Emacs and
;; XEmacs. In Emacs we don't need to call `make-local-hook' first.
;; It's harmless, though, so the main purpose of this alias is to shut
@@ -180,7 +142,7 @@ This is a compatibility function for different Emacsen."
;; Delete the current line (and the next N lines).
(defmacro gnus-delete-line (&optional n)
- `(delete-region (gnus-point-at-bol)
+ `(delete-region (point-at-bol)
(progn (forward-line ,(or n 1)) (point))))
(defun gnus-byte-code (func)
@@ -235,8 +197,7 @@ is slower."
"Return the value of the header FIELD of current article."
(save-excursion
(save-restriction
- (let ((case-fold-search t)
- (inhibit-point-motion-hooks t))
+ (let ((inhibit-point-motion-hooks t))
(nnheader-narrow-to-headers)
(message-fetch-field field)))))
@@ -248,7 +209,7 @@ is slower."
(defun gnus-goto-colon ()
(beginning-of-line)
- (let ((eol (gnus-point-at-eol)))
+ (let ((eol (point-at-eol)))
(goto-char (or (text-property-any (point) eol 'gnus-position t)
(search-forward ":" eol t)
(point)))))
@@ -263,12 +224,15 @@ is slower."
(defun gnus-remove-text-with-property (prop)
"Delete all text in the current buffer with text property PROP."
- (save-excursion
- (goto-char (point-min))
- (while (not (eobp))
- (while (get-text-property (point) prop)
- (delete-char 1))
- (goto-char (next-single-property-change (point) prop nil (point-max))))))
+ (let ((start (point-min))
+ end)
+ (unless (get-text-property start prop)
+ (setq start (next-single-property-change start prop)))
+ (while start
+ (setq end (text-property-any start (point-max) prop nil))
+ (delete-region start (or end (point-max)))
+ (setq start (when end
+ (next-single-property-change start prop))))))
(defun gnus-newsgroup-directory-form (newsgroup)
"Make hierarchical directory name from NEWSGROUP name."
@@ -501,6 +465,79 @@ jabbering all the time."
:group 'gnus-start
:type 'integer)
+(defcustom gnus-add-timestamp-to-message nil
+ "Non-nil means add timestamps to messages that Gnus issues.
+If it is `log', add timestamps to only the messages that go into the
+\"*Messages*\" buffer (in XEmacs, it is the \" *Message-Log*\" buffer).
+If it is neither nil nor `log', add timestamps not only to log messages
+but also to the ones displayed in the echo area."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-various
+ :type '(choice :format "%{%t%}:\n %[Value Menu%] %v"
+ (const :tag "Logged messages only" log)
+ (sexp :tag "All messages"
+ :match (lambda (widget value) value)
+ :value t)
+ (const :tag "No timestamp" nil)))
+
+(eval-when-compile
+ (defmacro gnus-message-with-timestamp-1 (format-string args)
+ (let ((timestamp '((format-time-string "%Y%m%dT%H%M%S" time)
+ "." (format "%03d" (/ (nth 2 time) 1000)) "> ")))
+ (if (featurep 'xemacs)
+ `(let (str time)
+ (if (or (and (null ,format-string) (null ,args))
+ (progn
+ (setq str (apply 'format ,format-string ,args))
+ (zerop (length str))))
+ (prog1
+ (and ,format-string str)
+ (clear-message nil))
+ (cond ((eq gnus-add-timestamp-to-message 'log)
+ (setq time (current-time))
+ (display-message 'no-log str)
+ (log-message 'message (concat ,@timestamp str)))
+ (gnus-add-timestamp-to-message
+ (setq time (current-time))
+ (display-message 'message (concat ,@timestamp str)))
+ (t
+ (display-message 'message str))))
+ str)
+ `(let (str time)
+ (cond ((eq gnus-add-timestamp-to-message 'log)
+ (setq str (let (message-log-max)
+ (apply 'message ,format-string ,args)))
+ (when (and message-log-max
+ (> message-log-max 0)
+ (/= (length str) 0))
+ (setq time (current-time))
+ (with-current-buffer (get-buffer-create "*Messages*")
+ (goto-char (point-max))
+ (insert ,@timestamp str "\n")
+ (forward-line (- message-log-max))
+ (delete-region (point-min) (point))
+ (goto-char (point-max))))
+ str)
+ (gnus-add-timestamp-to-message
+ (if (or (and (null ,format-string) (null ,args))
+ (progn
+ (setq str (apply 'format ,format-string ,args))
+ (zerop (length str))))
+ (prog1
+ (and ,format-string str)
+ (message nil))
+ (setq time (current-time))
+ (message "%s" (concat ,@timestamp str))
+ str))
+ (t
+ (apply 'message ,format-string ,args))))))))
+
+(defun gnus-message-with-timestamp (format-string &rest args)
+ "Display message with timestamp. Arguments are the same as `message'.
+The `gnus-add-timestamp-to-message' variable controls how to add
+timestamp to message."
+ (gnus-message-with-timestamp-1 format-string args))
+
(defun gnus-message (level &rest args)
"If LEVEL is lower than `gnus-verbose' print ARGS using `message'.
@@ -509,7 +546,9 @@ Guideline for numbers:
that take a long time, 7 - not very important messages on stuff, 9 - messages
inside loops."
(if (<= level gnus-verbose)
- (apply 'message args)
+ (if gnus-add-timestamp-to-message
+ (apply 'gnus-message-with-timestamp args)
+ (apply 'message args))
;; We have to do this format thingy here even if the result isn't
;; shown - the return value has to be the same as the return value
;; from `message'.
@@ -530,12 +569,23 @@ ARGS are passed to `message'."
(defun gnus-split-references (references)
"Return a list of Message-IDs in REFERENCES."
(let ((beg 0)
+ (references (or references ""))
ids)
(while (string-match "<[^<]+[^< \t]" references beg)
(push (substring references (match-beginning 0) (setq beg (match-end 0)))
ids))
(nreverse ids)))
+(defun gnus-extract-references (references)
+ "Return a list of Message-IDs in REFERENCES (in In-Reply-To
+ format), trimmed to only contain the Message-IDs."
+ (let ((ids (gnus-split-references references))
+ refs)
+ (dolist (id ids)
+ (when (string-match "<[^<>]+>" id)
+ (push (match-string 0 id) refs)))
+ refs))
+
(defsubst gnus-parent-id (references &optional n)
"Return the last Message-ID in REFERENCES.
If N, return the Nth ancestor instead."
@@ -709,11 +759,11 @@ Bind `print-quoted' and `print-readably' to t, and `print-length' and
`print-level' to nil. See also `gnus-bind-print-variables'."
(gnus-bind-print-variables (prin1-to-string form)))
-(defun gnus-pp (form)
+(defun gnus-pp (form &optional stream)
"Use `pp' on FORM in the current buffer.
Bind `print-quoted' and `print-readably' to t, and `print-length' and
`print-level' to nil. See also `gnus-bind-print-variables'."
- (gnus-bind-print-variables (pp form (current-buffer))))
+ (gnus-bind-print-variables (pp form (or stream (current-buffer)))))
(defun gnus-pp-to-string (form)
"The same as `pp-to-string'.
@@ -732,9 +782,9 @@ Bind `print-quoted' and `print-readably' to t, and `print-length' and
(defun gnus-write-buffer (file)
"Write the current buffer's contents to FILE."
- ;; Make sure the directory exists.
- (gnus-make-directory (file-name-directory file))
(let ((file-name-coding-system nnmail-pathname-coding-system))
+ ;; Make sure the directory exists.
+ (gnus-make-directory (file-name-directory file))
;; Write the buffer.
(write-region (point-min) (point-max) file nil 'quietly)))
@@ -932,9 +982,10 @@ with potentially long computations."
;; version fails halfway, however it provides the rmail-select-summary
;; macro which uses the following functions:
(autoload 'rmail-summary-displayed "rmail")
- (autoload 'rmail-maybe-display-summary "rmail")))
- (defvar rmail-default-rmail-file)
- (defvar mm-text-coding-system))
+ (autoload 'rmail-maybe-display-summary "rmail"))))
+
+(defvar rmail-default-rmail-file)
+(defvar mm-text-coding-system)
(defun gnus-output-to-rmail (filename &optional ask)
"Append the current article to an Rmail file named FILENAME."
@@ -1149,8 +1200,12 @@ Return the modified alist."
t))
(defun gnus-write-active-file (file hashtb &optional full-names)
+ ;; `coding-system-for-write' should be `raw-text' or equivalent.
(let ((coding-system-for-write nnmail-active-file-coding-system))
(with-temp-file file
+ ;; The buffer should be in the unibyte mode because group names
+ ;; are ASCII text or encoded non-ASCII text (i.e., unibyte).
+ (mm-disable-multibyte)
(mapatoms
(lambda (sym)
(when (and sym
@@ -1236,6 +1291,13 @@ Return the modified alist."
(remove-text-properties start end properties object))
t))
+(defun gnus-string-remove-all-properties (string)
+ (condition-case ()
+ (let ((s string))
+ (set-text-properties 0 (length string) nil string)
+ s)
+ (error string)))
+
;; This might use `compare-strings' to reduce consing in the
;; case-insensitive case, but it has to cope with null args.
;; (`string-equal' uses symbol print names.)
@@ -1350,32 +1412,12 @@ SPEC is a predicate specifier that contains stuff like `or', `and',
`(,(car spec) ,@(mapcar 'gnus-make-predicate-1 (cdr spec)))
(error "Invalid predicate specifier: %s" spec)))))
-(defun gnus-local-map-property (map)
- "Return a list suitable for a text property list specifying keymap MAP."
- (cond
- ((featurep 'xemacs)
- (list 'keymap map))
- ((>= emacs-major-version 21)
- (list 'keymap map))
- (t
- (list 'local-map map))))
-
-(defmacro gnus-completing-read-maybe-default (prompt table &optional predicate
- require-match initial-contents
- history default)
- "Like `completing-read', allowing for non-existent 7th arg in older XEmacsen."
- `(completing-read ,prompt ,table ,predicate ,require-match
- ,initial-contents ,history
- ,@(if (and (featurep 'xemacs) (< emacs-minor-version 2))
- ()
- (list default))))
-
(defun gnus-completing-read (prompt table &optional predicate require-match
history)
(when (and history
(not (boundp history)))
(set history nil))
- (gnus-completing-read-maybe-default
+ (completing-read
(if (symbol-value history)
(concat prompt " (" (car (symbol-value history)) "): ")
(concat prompt ": "))
@@ -1510,8 +1552,7 @@ Return nil otherwise."
display))
display)))))
-(eval-when-compile
- (defvar tool-bar-mode))
+(defvar tool-bar-mode)
(defun gnus-tool-bar-update (&rest ignore)
"Update the tool bar."
@@ -1580,10 +1621,9 @@ predicate on the elements."
(push (pop list1) res)))
(nconc (nreverse res) list1 list2))))
-(eval-when-compile
- (defvar xemacs-codename)
- (defvar sxemacs-codename)
- (defvar emacs-program-version))
+(defvar xemacs-codename)
+(defvar sxemacs-codename)
+(defvar emacs-program-version)
(defun gnus-emacs-version ()
"Stringified Emacs version."
@@ -1616,13 +1656,16 @@ predicate on the elements."
((or (featurep 'sxemacs) (featurep 'xemacs))
;; XEmacs or SXEmacs:
(concat emacsname "/" emacs-program-version
- " ("
- (when (and (memq 'codename lst)
- codename)
- (concat codename
- (when system-v ", ")))
- (when system-v system-v)
- ")"))
+ (let (plst)
+ (when (memq 'codename lst)
+ (push codename plst))
+ (when system-v
+ (push system-v plst))
+ (unless (featurep 'mule)
+ (push "no MULE" plst))
+ (when (> (length plst) 0)
+ (concat
+ " (" (mapconcat 'identity (reverse plst) ", ") ")")))))
(t emacs-version))))
(defun gnus-rename-file (old-path new-path &optional trim)
@@ -1646,6 +1689,11 @@ empty directories from OLD-PATH."
(file-truename
(concat old-dir "..")))))))))
+(defun gnus-set-file-modes (filename mode)
+ "Wrapper for set-file-modes."
+ (ignore-errors
+ (set-file-modes filename mode)))
+
(if (fboundp 'set-process-query-on-exit-flag)
(defalias 'gnus-set-process-query-on-exit-flag
'set-process-query-on-exit-flag)
diff --git a/lisp/gnus/gnus-uu.el b/lisp/gnus/gnus-uu.el
index 272957702b2..d3b13f3843a 100644
--- a/lisp/gnus/gnus-uu.el
+++ b/lisp/gnus/gnus-uu.el
@@ -482,11 +482,24 @@ didn't work, and overwrite existing files. Otherwise, ask each time."
(setq message-forward-as-mime (not message-forward-as-mime)
n nil))
(let ((gnus-article-reply (gnus-summary-work-articles n)))
+ (when (and (not n)
+ (= (length gnus-article-reply) 1))
+ ;; The case where neither a number of articles nor a region is
+ ;; specified.
+ (gnus-summary-top-thread)
+ (setq gnus-article-reply (nreverse (gnus-uu-find-articles-matching))))
(gnus-setup-message 'forward
(setq gnus-uu-digest-from-subject nil)
(setq gnus-uu-digest-buffer
(gnus-get-buffer-create " *gnus-uu-forward*"))
- (gnus-uu-decode-save n file)
+ ;; Specify articles to be forwarded. Note that they should be
+ ;; reversed; see `gnus-uu-get-list-of-articles'.
+ (let ((gnus-newsgroup-processable (reverse gnus-article-reply)))
+ (gnus-uu-decode-save n file)
+ (setq gnus-article-reply gnus-newsgroup-processable))
+ ;; Restore the value of `gnus-newsgroup-processable' to which
+ ;; it should be set when it is not `let'-bound.
+ (setq gnus-newsgroup-processable (reverse gnus-article-reply))
(switch-to-buffer gnus-uu-digest-buffer)
(let ((fs gnus-uu-digest-from-subject))
(when fs
@@ -511,11 +524,11 @@ didn't work, and overwrite existing files. Otherwise, ask each time."
"Various"))))
(goto-char (point-min))
(when (re-search-forward "^Subject: ")
- (delete-region (point) (gnus-point-at-eol))
+ (delete-region (point) (point-at-eol))
(insert subject))
(goto-char (point-min))
(when (re-search-forward "^From:")
- (delete-region (point) (gnus-point-at-eol))
+ (delete-region (point) (point-at-eol))
(insert " " from))
(let ((message-forward-decoded-p t))
(message-forward post t))))
@@ -530,19 +543,19 @@ didn't work, and overwrite existing files. Otherwise, ask each time."
(defun gnus-message-process-mark (unmarkp new-marked)
(let ((old (- (length gnus-newsgroup-processable) (length new-marked))))
- (message "%d mark%s %s%s"
- (length new-marked)
- (if (= (length new-marked) 1) "" "s")
- (if unmarkp "removed" "added")
- (cond
- ((and (zerop old)
- (not unmarkp))
- "")
- (unmarkp
- (format ", %d remain marked"
- (length gnus-newsgroup-processable)))
- (t
- (format ", %d already marked" old))))))
+ (gnus-message 6 "%d mark%s %s%s"
+ (length new-marked)
+ (if (= (length new-marked) 1) "" "s")
+ (if unmarkp "removed" "added")
+ (cond
+ ((and (zerop old)
+ (not unmarkp))
+ "")
+ (unmarkp
+ (format ", %d remain marked"
+ (length gnus-newsgroup-processable)))
+ (t
+ (format ", %d already marked" old))))))
(defun gnus-new-processable (unmarkp articles)
(if unmarkp
@@ -570,16 +583,18 @@ When called interactively, prompt for REGEXP."
(interactive "sUnmark (regexp): ")
(gnus-uu-mark-by-regexp regexp t))
-(defun gnus-uu-mark-series ()
+(defun gnus-uu-mark-series (&optional silent)
"Mark the current series with the process mark."
(interactive)
(let* ((articles (gnus-uu-find-articles-matching))
- (l (length articles)))
+ (l (length articles)))
(while articles
(gnus-summary-set-process-mark (car articles))
(setq articles (cdr articles)))
- (message "Marked %d articles" l))
- (gnus-summary-position-point))
+ (unless silent
+ (gnus-message 6 "Marked %d articles" l))
+ (gnus-summary-position-point)
+ l))
(defun gnus-uu-mark-region (beg end &optional unmark)
"Set the process mark on all articles between point and mark."
@@ -687,14 +702,16 @@ When called interactively, prompt for REGEXP."
(setq gnus-newsgroup-processable nil)
(save-excursion
(let ((data gnus-newsgroup-data)
+ (count 0)
number)
(while data
(when (and (not (memq (setq number (gnus-data-number (car data)))
gnus-newsgroup-processable))
(vectorp (gnus-data-header (car data))))
(gnus-summary-goto-subject number)
- (gnus-uu-mark-series))
- (setq data (cdr data)))))
+ (setq count (+ count (gnus-uu-mark-series t))))
+ (setq data (cdr data)))
+ (gnus-message 6 "Marked %d articles" count)))
(gnus-summary-position-point))
;; All PostScript functions written by Erik Selberg <speed@cs.washington.edu>.
@@ -852,7 +869,7 @@ When called interactively, prompt for REGEXP."
(save-restriction
(set-buffer buffer)
(let (buffer-read-only)
- (gnus-set-text-properties (point-min) (point-max) nil)
+ (set-text-properties (point-min) (point-max) nil)
;; These two are necessary for XEmacs 19.12 fascism.
(put-text-property (point-min) (point-max) 'invisible nil)
(put-text-property (point-min) (point-max) 'intangible nil))
@@ -862,7 +879,7 @@ When called interactively, prompt for REGEXP."
(mm-enable-multibyte)
(mime-to-mml))
(goto-char (point-min))
- (re-search-forward "\n\n")
+ (search-forward "\n\n")
(unless (and message-forward-as-mime gnus-uu-digest-buffer)
;; Quote all 30-dash lines.
(save-excursion
@@ -1089,7 +1106,7 @@ When called interactively, prompt for REGEXP."
nil t)
(replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
- (goto-char 1)
+ (goto-char (point-min))
(while (re-search-forward "[ \t]+" nil t)
(replace-match "[ \t]+" t t))
@@ -1153,7 +1170,7 @@ When called interactively, prompt for REGEXP."
;; Expand numbers, sort, and return the list of article
;; numbers.
- (mapcar (lambda (sub) (cdr sub))
+ (mapcar 'cdr
(sort (gnus-uu-expand-numbers
list-of-subjects
(not do-not-translate))
@@ -1190,7 +1207,7 @@ When called interactively, prompt for REGEXP."
(format "%06d"
(string-to-number (buffer-substring
(match-beginning 0) (match-end 0)))))))
- (setq string (buffer-substring 1 (point-max)))
+ (setq string (buffer-substring (point-min) (point-max)))
(setcar (car string-list) string)
(setq string-list (cdr string-list))))
out-list))
@@ -1406,7 +1423,7 @@ When called interactively, prompt for REGEXP."
(setq part (match-string 0 subject))
(setq subject (substring subject (match-end 0)))))
(or part
- (while (string-match "\\([0-9]+\\)[^0-9]+\\([0-9]+\\)" subject)
+ (while (string-match "[0-9]+[^0-9]+[0-9]+" subject)
(setq part (match-string 0 subject))
(setq subject (substring subject (match-end 0)))))
(or part "")))
@@ -1708,8 +1725,7 @@ Gnus might fail to display all of it.")
(defun gnus-uu-check-correct-stripped-uucode (start end)
(save-excursion
(let (found beg length)
- (if (not gnus-uu-correct-stripped-uucode)
- ()
+ (unless gnus-uu-correct-stripped-uucode
(goto-char start)
(if (re-search-forward " \\|`" end t)
@@ -1722,19 +1738,15 @@ Gnus might fail to display all of it.")
(forward-line 1))))
(while (not (eobp))
- (if (looking-at (concat gnus-uu-begin-string "\\|"
- gnus-uu-end-string))
- ()
+ (unless (looking-at (concat gnus-uu-begin-string "\\|"
+ gnus-uu-end-string))
(when (not found)
- (beginning-of-line)
- (setq beg (point))
- (end-of-line)
- (setq length (- (point) beg)))
+ (setq length (- (point-at-eol) (point-at-bol))))
(setq found t)
(beginning-of-line)
(setq beg (point))
(end-of-line)
- (when (not (= length (- (point) beg)))
+ (unless (= length (- (point) beg))
(insert (make-string (- length (- (point) beg)) ? ))))
(forward-line 1)))))))
@@ -1759,7 +1771,7 @@ Gnus might fail to display all of it.")
(setq gnus-uu-work-dir
(mm-make-temp-file (concat gnus-uu-tmp-dir "gnus") 'dir))
- (set-file-modes gnus-uu-work-dir 448)
+ (gnus-set-file-modes gnus-uu-work-dir 448)
(setq gnus-uu-work-dir (file-name-as-directory gnus-uu-work-dir))
(push (cons gnus-newsgroup-name gnus-uu-work-dir)
gnus-uu-tmp-alist))))
@@ -1779,7 +1791,7 @@ Gnus might fail to display all of it.")
;; that the filename will be treated as a single argument when the shell
;; executes the command.
(defun gnus-uu-command (action file)
- (let ((quoted-file (mm-quote-arg file)))
+ (let ((quoted-file (shell-quote-argument file)))
(if (string-match "%s" action)
(format action quoted-file)
(concat action " " quoted-file))))
@@ -1903,7 +1915,7 @@ The user will be asked for a file name."
(when (gnus-uu-post-encode-file "uuencode" path file-name)
(goto-char (point-min))
(forward-line 1)
- (while (re-search-forward " " nil t)
+ (while (search-forward " " nil t)
(replace-match "`"))
t))
@@ -2034,8 +2046,7 @@ If no file has been included, the user will be asked for a file."
(goto-char (point-min))
(re-search-forward
(concat "^" (regexp-quote mail-header-separator) "$") nil t)
- (beginning-of-line)
- (setq header (buffer-substring (point-min) (point)))
+ (setq header (buffer-substring (point-min) (point-at-bol)))
(goto-char (point-min))
(when gnus-uu-post-separate-description
@@ -2111,8 +2122,7 @@ If no file has been included, the user will be asked for a file."
(when (not gnus-uu-post-separate-description)
(set-buffer-modified-p nil)
- (when (fboundp 'bury-buffer)
- (bury-buffer)))))
+ (bury-buffer))))
(provide 'gnus-uu)
diff --git a/lisp/gnus/gnus-win.el b/lisp/gnus/gnus-win.el
index 7e1609cc196..60cc5247d05 100644
--- a/lisp/gnus/gnus-win.el
+++ b/lisp/gnus/gnus-win.el
@@ -120,6 +120,10 @@ used to display Gnus windows."
(vertical 1.0
(summary 0.25)
(edit-score 1.0 point)))
+ (edit-server
+ (vertical 1.0
+ (server 0.5)
+ (edit-form 1.0 point)))
(post
(vertical 1.0
(post 1.0 point)))
@@ -166,8 +170,12 @@ used to display Gnus windows."
(article 0.5)
(message 1.0 point)))
(display-term
- (vertical 1.0
- ("*display*" 1.0))))
+ (vertical 1.0
+ ("*display*" 1.0)))
+ (mml-preview
+ (vertical 1.0
+ (message 0.5)
+ (mml-preview 1.0 point))))
"Window configuration for all possible Gnus buffers.
See the Gnus manual for an explanation of the syntax used.")
@@ -195,7 +203,8 @@ See the Gnus manual for an explanation of the syntax used.")
(info . gnus-info-buffer)
(category . gnus-category-buffer)
(article-copy . gnus-article-copy)
- (draft . gnus-draft-buffer))
+ (draft . gnus-draft-buffer)
+ (mml-preview . mml-preview-buffer))
"Mapping from short symbols to buffer names or buffer variables.")
(defcustom gnus-configure-windows-hook nil
diff --git a/lisp/gnus/gnus.el b/lisp/gnus/gnus.el
index 663a417c283..b09511ea9c4 100644
--- a/lisp/gnus/gnus.el
+++ b/lisp/gnus/gnus.el
@@ -289,7 +289,7 @@ is restarted, and sometimes reloaded."
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "5.11"
+(defconst gnus-version-number "5.13"
"Version number for this version of Gnus.")
(defconst gnus-version (format "Gnus v%s" gnus-version-number)
@@ -310,9 +310,6 @@ be set in `.emacs' instead."
(unless (fboundp 'gnus-group-remove-excess-properties)
(defalias 'gnus-group-remove-excess-properties 'ignore))
-(unless (fboundp 'gnus-set-text-properties)
- (defalias 'gnus-set-text-properties 'set-text-properties))
-
(unless (featurep 'gnus-xmas)
(defalias 'gnus-make-overlay 'make-overlay)
(defalias 'gnus-delete-overlay 'delete-overlay)
@@ -323,7 +320,6 @@ be set in `.emacs' instead."
(defalias 'gnus-overlay-end 'overlay-end)
(defalias 'gnus-extent-detached-p 'ignore)
(defalias 'gnus-extent-start-open 'ignore)
- (defalias 'gnus-appt-select-lowest-window 'appt-select-lowest-window)
(defalias 'gnus-mail-strip-quoted-names 'mail-strip-quoted-names)
(defalias 'gnus-character-to-event 'identity)
(defalias 'gnus-assq-delete-all 'assq-delete-all)
@@ -563,7 +559,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-1
'((((class color)
(background dark))
- (:foreground "aquamarine1" :bold t))
+ (:foreground "#e1ffe1" :bold t))
(((class color)
(background light))
(:foreground "DeepPink3" :bold t))
@@ -577,7 +573,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-1-empty
'((((class color)
(background dark))
- (:foreground "aquamarine1"))
+ (:foreground "#e1ffe1"))
(((class color)
(background light))
(:foreground "DeepPink3"))
@@ -591,7 +587,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-2
'((((class color)
(background dark))
- (:foreground "aquamarine2" :bold t))
+ (:foreground "DarkSeaGreen1" :bold t))
(((class color)
(background light))
(:foreground "HotPink3" :bold t))
@@ -605,7 +601,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-2-empty
'((((class color)
(background dark))
- (:foreground "aquamarine2"))
+ (:foreground "DarkSeaGreen1"))
(((class color)
(background light))
(:foreground "HotPink3"))
@@ -619,7 +615,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-3
'((((class color)
(background dark))
- (:foreground "aquamarine3" :bold t))
+ (:foreground "aquamarine1" :bold t))
(((class color)
(background light))
(:foreground "magenta4" :bold t))
@@ -633,7 +629,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-3-empty
'((((class color)
(background dark))
- (:foreground "aquamarine3"))
+ (:foreground "aquamarine1"))
(((class color)
(background light))
(:foreground "magenta4"))
@@ -647,7 +643,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-low
'((((class color)
(background dark))
- (:foreground "aquamarine4" :bold t))
+ (:foreground "aquamarine2" :bold t))
(((class color)
(background light))
(:foreground "DeepPink4" :bold t))
@@ -661,7 +657,7 @@ be set in `.emacs' instead."
(defface gnus-group-mail-low-empty
'((((class color)
(background dark))
- (:foreground "aquamarine4"))
+ (:foreground "aquamarine2"))
(((class color)
(background light))
(:foreground "DeepPink4"))
@@ -923,7 +919,7 @@ be set in `.emacs' instead."
(defface gnus-splash
'((((class color)
(background dark))
- (:foreground "#888888"))
+ (:foreground "#cccccc"))
(((class color)
(background light))
(:foreground "#888888"))
@@ -978,12 +974,12 @@ be set in `.emacs' instead."
(storm "#666699" "#99ccff")
(pdino "#9999cc" "#99ccff")
(purp "#9999cc" "#666699")
- (no "#000000" "#ff0000")
+ (no "#ff0000" "#ffff00")
(neutral "#b4b4b4" "#878787")
(september "#bf9900" "#ffcc00"))
"Color alist used for the Gnus logo.")
-(defcustom gnus-logo-color-style 'oort
+(defcustom gnus-logo-color-style 'no
"*Color styles used for the Gnus logo."
:type `(choice ,@(mapcar (lambda (elem) (list 'const (car elem)))
gnus-logo-color-alist))
@@ -1034,23 +1030,23 @@ be set in `.emacs' instead."
(t
(insert
(format " %s
- _ ___ _ _
- _ ___ __ ___ __ _ ___
- __ _ ___ __ ___
- _ ___ _
- _ _ __ _
- ___ __ _
- __ _
- _ _ _
- _ _ _
- _ _ _
- __ ___
- _ _ _ _
- _ _
- _ _
- _ _
- _
- __
+ _ ___ _ _
+ _ ___ __ ___ __ _ ___
+ __ _ ___ __ ___
+ _ ___ _
+ _ _ __ _
+ ___ __ _
+ __ _
+ _ _ _
+ _ _ _
+ _ _ _
+ __ ___
+ _ _ _ _
+ _ _
+ _ _
+ _ _
+ _
+ __
"
""))
@@ -1294,12 +1290,30 @@ see the manual for details."
(defcustom gnus-message-archive-method "archive"
"*Method used for archiving messages you've sent.
-This should be a mail method."
+This should be a mail method.
+
+See also `gnus-update-message-archive-method'."
:group 'gnus-server
:group 'gnus-message
:type '(choice (const :tag "Default archive method" "archive")
gnus-select-method))
+(defcustom gnus-update-message-archive-method nil
+ "Non-nil means always update the saved \"archive\" method.
+
+The archive method is initially set according to the value of
+`gnus-message-archive-method' and is saved in the \"~/.newsrc.eld\" file
+so that it may be used as a real method of the server which is named
+\"archive\" ever since. If it once has been saved, it will never be
+updated if the value of this variable is nil, even if you change the
+value of `gnus-message-archive-method' afterward. If you want the
+saved \"archive\" method to be updated whenever you change the value of
+`gnus-message-archive-method', set this variable to a non-nil value."
+ :version "23.0" ;; No Gnus
+ :group 'gnus-server
+ :group 'gnus-message
+ :type 'boolean)
+
(defcustom gnus-message-archive-group nil
"*Name of the group in which to save the messages you've written.
This can either be a string; a list of strings; or an alist
@@ -1567,11 +1581,6 @@ cache to the full extent of the law."
:group 'gnus-meta
:type 'boolean)
-(defcustom gnus-use-grouplens nil
- "*If non-nil, use GroupLens ratings."
- :group 'gnus-meta
- :type 'boolean)
-
(defcustom gnus-keep-backlog 20
"*If non-nil, Gnus will keep read articles for later re-retrieval.
If it is a number N, then Gnus will only keep the last N articles
@@ -2008,6 +2017,42 @@ When a spam group is entered, all unread articles are marked as
spam. There is other behavior associated with ham and no
classification when spam.el is loaded - see the manual.")
+ (gnus-define-group-parameter
+ spam-resend-to
+ :type list
+ :function-document
+ "The address to get spam resent (through spam-report-resend)."
+ :variable gnus-spam-resend-to
+ :variable-default nil
+ :variable-document
+ "The address to get spam resent (through spam-report-resend)."
+ :variable-group spam
+ :variable-type '(repeat
+ (list :tag "Group address for resending spam"
+ (regexp :tag "Group")
+ (string :tag "E-mail address for resending spam (requires the spam-use-resend exit processor)")))
+ :parameter-type 'string :tag "E-mail address for resending spam (requires the spam-use-resend exit processor)"
+ :parameter-document
+ "The address to get spam resent (through spam-report-resend).")
+
+ (gnus-define-group-parameter
+ ham-resend-to
+ :type list
+ :function-document
+ "The address to get ham resent (through spam-report-resend)."
+ :variable gnus-ham-resend-to
+ :variable-default nil
+ :variable-document
+ "The address to get ham resent (through spam-report-resend)."
+ :variable-group spam
+ :variable-type '(repeat
+ (list :tag "Group address for resending ham"
+ (regexp :tag "Group")
+ (string :tag "E-mail address for resending ham (requires the spam-use-resend exit processor)")))
+ :parameter-type 'string :tag "E-mail address for resending ham (requires the spam-use-resend exit processor)"
+ :parameter-document
+ "The address to get ham resent (through spam-report-resend).")
+
(defvar gnus-group-spam-exit-processor-ifile "ifile"
"OBSOLETE: The ifile summary exit spam processor.")
@@ -2064,6 +2109,27 @@ Only applicable to non-spam (unclassified and ham) groups.")
:value nil
(list :tag "Spam Summary Exit Processor Choices"
(set
+ (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
+ (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
+ (const :tag "Spam: Bsfilter" (spam spam-use-bsfilter))
+ (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
+ (const :tag "Spam: Resend Message"(spam spam-use-resend))
+ (const :tag "Spam: ifile" (spam spam-use-ifile))
+ (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
+ (const :tag "Spam: Spam-stat" (spam spam-use-stat))
+ (const :tag "Spam: SpamAssassin" (spam spam-use-spamassassin))
+ (const :tag "Spam: CRM114" (spam spam-use-crm114))
+ (const :tag "Ham: BBDB" (ham spam-use-BBDB))
+ (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
+ (const :tag "Ham: Bsfilter" (ham spam-use-bsfilter))
+ (const :tag "Ham: Copy" (ham spam-use-ham-copy))
+ (const :tag "Ham: Resend Message" (ham spam-use-resend))
+ (const :tag "Ham: ifile" (ham spam-use-ifile))
+ (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle))
+ (const :tag "Ham: Spam-stat" (ham spam-use-stat))
+ (const :tag "Ham: SpamAssassin" (ham spam-use-spamassassin))
+ (const :tag "Ham: CRM114" (ham spam-use-crm114))
+ (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
(variable-item gnus-group-spam-exit-processor-ifile)
(variable-item gnus-group-spam-exit-processor-stat)
(variable-item gnus-group-spam-exit-processor-bogofilter)
@@ -2076,20 +2142,7 @@ Only applicable to non-spam (unclassified and ham) groups.")
(variable-item gnus-group-ham-exit-processor-whitelist)
(variable-item gnus-group-ham-exit-processor-BBDB)
(variable-item gnus-group-ham-exit-processor-spamoracle)
- (variable-item gnus-group-ham-exit-processor-copy)
- (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
- (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
- (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
- (const :tag "Spam: ifile" (spam spam-use-ifile))
- (const :tag "Spam: Spam-stat" (spam spam-use-stat))
- (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
- (const :tag "Ham: ifile" (ham spam-use-ifile))
- (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
- (const :tag "Ham: Spam-stat" (ham spam-use-stat))
- (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
- (const :tag "Ham: BBDB" (ham spam-use-BBDB))
- (const :tag "Ham: Copy" (ham spam-use-ham-copy))
- (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle)))))
+ (variable-item gnus-group-ham-exit-processor-copy))))
:function-document
"Which spam or ham processors will be applied when the summary is exited."
:variable gnus-spam-process-newsgroups
@@ -2106,6 +2159,27 @@ spam processing, associated with the appropriate processor."
(regexp :tag "Group Regexp")
(set
:tag "Spam/Ham Summary Exit Processor"
+ (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
+ (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
+ (const :tag "Spam: Bsfilter" (spam spam-use-bsfilter))
+ (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
+ (const :tag "Spam: Resend Message"(spam spam-use-resend))
+ (const :tag "Spam: ifile" (spam spam-use-ifile))
+ (const :tag "Spam: Spam-stat" (spam spam-use-stat))
+ (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
+ (const :tag "Spam: SpamAssassin" (spam spam-use-spamassassin))
+ (const :tag "Spam: CRM114" (spam spam-use-crm114))
+ (const :tag "Ham: BBDB" (ham spam-use-BBDB))
+ (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
+ (const :tag "Ham: Bsfilter" (ham spam-use-bsfilter))
+ (const :tag "Ham: Copy" (ham spam-use-ham-copy))
+ (const :tag "Ham: Resend Message" (ham spam-use-resend))
+ (const :tag "Ham: ifile" (ham spam-use-ifile))
+ (const :tag "Ham: Spam-stat" (ham spam-use-stat))
+ (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle))
+ (const :tag "Ham: SpamAssassin" (ham spam-use-spamassassin))
+ (const :tag "Ham: CRM114" (ham spam-use-crm114))
+ (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
(variable-item gnus-group-spam-exit-processor-ifile)
(variable-item gnus-group-spam-exit-processor-stat)
(variable-item gnus-group-spam-exit-processor-bogofilter)
@@ -2118,20 +2192,7 @@ spam processing, associated with the appropriate processor."
(variable-item gnus-group-ham-exit-processor-whitelist)
(variable-item gnus-group-ham-exit-processor-BBDB)
(variable-item gnus-group-ham-exit-processor-spamoracle)
- (variable-item gnus-group-ham-exit-processor-copy)
- (const :tag "Spam: Gmane Report" (spam spam-use-gmane))
- (const :tag "Spam: Bogofilter" (spam spam-use-bogofilter))
- (const :tag "Spam: Blacklist" (spam spam-use-blacklist))
- (const :tag "Spam: ifile" (spam spam-use-ifile))
- (const :tag "Spam: Spam-stat" (spam spam-use-stat))
- (const :tag "Spam: Spam Oracle" (spam spam-use-spamoracle))
- (const :tag "Ham: ifile" (ham spam-use-ifile))
- (const :tag "Ham: Bogofilter" (ham spam-use-bogofilter))
- (const :tag "Ham: Spam-stat" (ham spam-use-stat))
- (const :tag "Ham: Whitelist" (ham spam-use-whitelist))
- (const :tag "Ham: BBDB" (ham spam-use-BBDB))
- (const :tag "Ham: Copy" (ham spam-use-ham-copy))
- (const :tag "Ham: Spam Oracle" (ham spam-use-spamoracle)))))
+ (variable-item gnus-group-ham-exit-processor-copy))))
:parameter-document
"Which spam or ham processors will be applied when the summary is exited.")
@@ -2170,12 +2231,18 @@ spam-autodetect-recheck-messages is set.")
(const default)
(set :tag "Use specific methods"
(variable-item spam-use-blacklist)
+ (variable-item spam-use-gmane-xref)
(variable-item spam-use-regex-headers)
(variable-item spam-use-regex-body)
(variable-item spam-use-whitelist)
(variable-item spam-use-BBDB)
(variable-item spam-use-ifile)
(variable-item spam-use-spamoracle)
+ (variable-item spam-use-crm114)
+ (variable-item spam-use-spamassassin)
+ (variable-item spam-use-spamassassin-headers)
+ (variable-item spam-use-bsfilter)
+ (variable-item spam-use-bsfilter-headers)
(variable-item spam-use-stat)
(variable-item spam-use-blackholes)
(variable-item spam-use-hashcash)
@@ -2201,15 +2268,21 @@ set."
(const default)
(set :tag "Use specific methods"
(variable-item spam-use-blacklist)
+ (variable-item spam-use-gmane-xref)
(variable-item spam-use-regex-headers)
(variable-item spam-use-regex-body)
(variable-item spam-use-whitelist)
(variable-item spam-use-BBDB)
(variable-item spam-use-ifile)
(variable-item spam-use-spamoracle)
+ (variable-item spam-use-crm114)
(variable-item spam-use-stat)
(variable-item spam-use-blackholes)
(variable-item spam-use-hashcash)
+ (variable-item spam-use-spamassassin)
+ (variable-item spam-use-spamassassin-headers)
+ (variable-item spam-use-bsfilter)
+ (variable-item spam-use-bsfilter-headers)
(variable-item spam-use-bogofilter-headers)
(variable-item spam-use-bogofilter)))))
:parameter-document
@@ -2388,8 +2461,7 @@ It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
summary-menu group-menu article-menu
tree-highlight menu highlight
browse-menu server-menu
- page-marker tree-menu binary-menu pick-menu
- grouplens-menu)
+ page-marker tree-menu binary-menu pick-menu)
"*Enable visual features.
If `visual' is disabled, there will be no menus and few faces. Most of
the visual customization options below will be ignored. Gnus will use
@@ -2403,8 +2475,7 @@ instance, to switch off all visual things except menus, you can say:
Valid elements include `summary-highlight', `group-highlight',
`article-highlight', `mouse-face', `summary-menu', `group-menu',
`article-menu', `tree-highlight', `menu', `highlight', `browse-menu',
-`server-menu', `page-marker', `tree-menu', `binary-menu', `pick-menu',
-and `grouplens-menu'."
+`server-menu', `page-marker', `tree-menu', `binary-menu', and`pick-menu'."
:group 'gnus-meta
:group 'gnus-visual
:type '(set (const summary-highlight)
@@ -2422,8 +2493,7 @@ and `grouplens-menu'."
(const page-marker)
(const tree-menu)
(const binary-menu)
- (const pick-menu)
- (const grouplens-menu)))
+ (const pick-menu)))
;; Byte-compiler warning.
(defvar gnus-visual)
@@ -2528,7 +2598,7 @@ a string, be sure to use a valid format, see RFC 2616."
(const codename :tag "Emacs codename")))
(string)))
-;; Convert old (No Gnus < 2005-01-10, v5-10 < 2005-09-05) symbol type values:
+;; Convert old (< 2005-01-10) symbol type values:
(when (symbolp gnus-user-agent)
(setq gnus-user-agent
(cond ((eq gnus-user-agent 'emacs-gnus-config)
@@ -2643,7 +2713,6 @@ such as a mark that says whether an article is stored in the cache
(defvar gnus-headers-retrieved-by nil)
(defvar gnus-article-reply nil)
(defvar gnus-override-method nil)
-(defvar gnus-article-check-size nil)
(defvar gnus-opened-servers nil)
(defvar gnus-current-kill-article nil)
@@ -2738,7 +2807,7 @@ gnus-registry.el will populate this if it's loaded.")
;; This little mapcar goes through the list below and marks the
;; symbols in question as autoloaded functions.
- (mapcar
+ (mapc
(lambda (package)
(let ((interactive (nth 1 (memq ':interactive package))))
(mapcar
@@ -2837,7 +2906,7 @@ gnus-registry.el will populate this if it's loaded.")
gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view
gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view
gnus-uu-decode-binhex-view gnus-uu-unmark-thread
- gnus-uu-mark-over gnus-uu-post-news)
+ gnus-uu-mark-over gnus-uu-post-news gnus-uu-invert-processable)
("gnus-uu" gnus-uu-delete-work-dir gnus-uu-unmark-thread)
("gnus-msg" (gnus-summary-send-map keymap)
gnus-article-mail gnus-copy-article-buffer gnus-extended-version)
@@ -2855,8 +2924,6 @@ gnus-registry.el will populate this if it's loaded.")
gnus-summary-post-forward gnus-summary-wide-reply-with-original
gnus-summary-post-forward)
("gnus-picon" :interactive t gnus-treat-from-picon)
- ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
- gnus-grouplens-mode)
("smiley" :interactive t smiley-region)
("gnus-win" gnus-configure-windows gnus-add-configuration)
("gnus-sum" gnus-summary-insert-line gnus-summary-read-group
@@ -2891,14 +2958,15 @@ gnus-registry.el will populate this if it's loaded.")
gnus-article-hide-pem gnus-article-hide-signature
gnus-article-strip-leading-blank-lines gnus-article-date-local
gnus-article-date-original gnus-article-date-lapsed
-;; gnus-article-show-all-headers
+ ;;gnus-article-show-all-headers
gnus-article-edit-mode gnus-article-edit-article
gnus-article-edit-done gnus-article-decode-encoded-words
gnus-start-date-timer gnus-stop-date-timer
gnus-mime-view-all-parts)
("gnus-int" gnus-request-type)
("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
- gnus-dribble-enter gnus-read-init-file gnus-dribble-touch)
+ gnus-dribble-enter gnus-read-init-file gnus-dribble-touch
+ gnus-check-reasonable-setup)
("gnus-dup" gnus-dup-suppress-articles gnus-dup-unsuppress-article
gnus-dup-enter-articles)
("gnus-range" gnus-copy-sequence)
@@ -2968,7 +3036,6 @@ with some simple extensions.
%z Article zcore (character)
%t Number of articles under the current thread (number).
%e Whether the thread is empty or not (character).
-%l GroupLens score (string).
%V Total thread score (number).
%P The line number (number).
%O Download mark (character).
@@ -3147,11 +3214,9 @@ Return nil if not defined."
(defun gnus-shutdown (symbol)
"Shut down everything that waits for SYMBOL."
- (let ((alist gnus-shutdown-alist)
- entry)
- (while (setq entry (pop alist))
- (when (memq symbol (cdr entry))
- (funcall (car entry))))))
+ (dolist (entry gnus-shutdown-alist)
+ (when (memq symbol (cdr entry))
+ (funcall (car entry)))))
;;;
@@ -3417,7 +3482,7 @@ that that variable is buffer-local to the summary buffers."
(defun gnus-generate-new-group-name (leaf)
(let ((name leaf)
(num 0))
- (while (gnus-gethash name gnus-newsrc-hashtb)
+ (while (gnus-group-entry name)
(setq name (concat leaf "<" (int-to-string (setq num (1+ num))) ">")))
name))
@@ -3460,30 +3525,27 @@ that that variable is buffer-local to the summary buffers."
;; Perhaps it is already in the cache.
(mapc (lambda (name-method)
- (if (equal (cdr name-method) method)
- (throw 'server-name (car name-method))))
- gnus-server-method-cache)
+ (if (equal (cdr name-method) method)
+ (throw 'server-name (car name-method))))
+ gnus-server-method-cache)
(mapc
(lambda (server-alist)
(mapc (lambda (name-method)
- (when (gnus-methods-equal-p (cdr name-method) method)
- (unless (member name-method gnus-server-method-cache)
- (push name-method gnus-server-method-cache))
- (throw 'server-name (car name-method))))
- server-alist))
- (let ((alists (list gnus-server-alist
- gnus-predefined-server-alist)))
- (if gnus-select-method
- (push (list (cons "native" gnus-select-method)) alists))
- alists))
+ (when (gnus-methods-equal-p (cdr name-method) method)
+ (unless (member name-method gnus-server-method-cache)
+ (push name-method gnus-server-method-cache))
+ (throw 'server-name (car name-method))))
+ server-alist))
+ (list gnus-server-alist
+ gnus-predefined-server-alist))
(let* ((name (if (member (cadr method) '(nil ""))
- (format "%s" (car method))
- (format "%s:%s" (car method) (cadr method))))
- (name-method (cons name method)))
+ (format "%s" (car method))
+ (format "%s:%s" (car method) (cadr method))))
+ (name-method (cons name method)))
(unless (member name-method gnus-server-method-cache)
- (push name-method gnus-server-method-cache))
+ (push name-method gnus-server-method-cache))
name)))
(defsubst gnus-server-to-method (server)
@@ -3796,7 +3858,7 @@ The function `gnus-group-find-parameter' will do that for you."
(if simple-results
;; Found results; return them.
(car simple-results)
- ;; We didn't found it there, try `gnus-parameters'.
+ ;; We didn't find it there, try `gnus-parameters'.
(let ((result nil)
(head nil)
(tail gnus-parameters))
@@ -4083,12 +4145,12 @@ If NEWSGROUP is nil, return the global kill file name instead."
(and (not group)
gnus-select-method)
(and (not (gnus-group-entry group))
- ;; Killed or otherwise unknown group.
- (or
- ;; If we know a virtual server by that name, return its method.
- (gnus-server-to-method (gnus-group-server group))
- ;; Guess a new method as last resort.
- (gnus-group-name-to-method group)))
+ ;; Killed or otherwise unknown group.
+ (or
+ ;; If we know a virtual server by that name, return its method.
+ (gnus-server-to-method (gnus-group-server group))
+ ;; Guess a new method as last resort.
+ (gnus-group-name-to-method group)))
(let ((info (or info (gnus-get-info group)))
method)
(if (or (not info)
@@ -4194,10 +4256,10 @@ Allow completion over sensible values."
"Say whether METHOD is covered by the agent."
(or (eq (car gnus-agent-method-p-cache) method)
(setq gnus-agent-method-p-cache
- (cons method
- (member (if (stringp method)
- method
- (gnus-method-to-server method)) gnus-agent-covered-methods))))
+ (cons method
+ (member (if (stringp method)
+ method
+ (gnus-method-to-server method)) gnus-agent-covered-methods))))
(cdr gnus-agent-method-p-cache))
(defun gnus-online (method)
diff --git a/lisp/gnus/hashcash.el b/lisp/gnus/hashcash.el
new file mode 100644
index 00000000000..737178b8218
--- /dev/null
+++ b/lisp/gnus/hashcash.el
@@ -0,0 +1,370 @@
+;;; hashcash.el --- Add hashcash payments to email
+
+;; Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation
+
+;; Written by: Paul Foley <mycroft@actrix.gen.nz> (1997-2002)
+;; Maintainer: Paul Foley <mycroft@actrix.gen.nz>
+;; Keywords: mail, hashcash
+
+;; 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 3, 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:
+
+;; The hashcash binary is at http://www.hashcash.org/.
+;;
+;; Call mail-add-payment to add a hashcash payment to a mail message
+;; in the current buffer.
+;;
+;; Call mail-add-payment-async after writing the addresses but before
+;; writing the mail to start calculating the hashcash payment
+;; asynchronously.
+;;
+;; The easiest way to do this automatically for all outgoing mail
+;; is to set `message-generate-hashcash' to t. If you want more
+;; control, try the following hooks.
+;;
+;; To automatically add payments to all outgoing mail when sending:
+;; (add-hook 'message-send-hook 'mail-add-payment)
+;;
+;; To start calculations automatically when addresses are prefilled:
+;; (add-hook 'message-setup-hook 'mail-add-payment-async)
+;;
+;; To check whether calculations are done before sending:
+;; (add-hook 'message-send-hook 'hashcash-wait-or-cancel)
+
+;;; Code:
+
+(defgroup hashcash nil
+ "Hashcash configuration."
+ :group 'mail)
+
+(defcustom hashcash-default-payment 20
+ "*The default number of bits to pay to unknown users.
+If this is zero, no payment header will be generated.
+See `hashcash-payment-alist'."
+ :type 'integer
+ :group 'hashcash)
+
+(defcustom hashcash-payment-alist '()
+ "*An association list mapping email addresses to payment amounts.
+Elements may consist of (ADDR AMOUNT) or (ADDR STRING AMOUNT), where
+ADDR is the email address of the intended recipient and AMOUNT is
+the value of hashcash payment to be made to that user. STRING, if
+present, is the string to be hashed; if not present ADDR will be used."
+ :type '(repeat (choice (list :tag "Normal"
+ (string :name "Address")
+ (integer :name "Amount"))
+ (list :tag "Replace hash input"
+ (string :name "Address")
+ (string :name "Hash input")
+ (integer :name "Amount"))))
+ :group 'hashcash)
+
+(defcustom hashcash-default-accept-payment 20
+ "*The default minimum number of bits to accept on incoming payments."
+ :type 'integer
+ :group 'hashcash)
+
+(defcustom hashcash-accept-resources `((,user-mail-address nil))
+ "*An association list mapping hashcash resources to payment amounts.
+Resources named here are to be accepted in incoming payments. If the
+corresponding AMOUNT is NIL, the value of `hashcash-default-accept-payment'
+is used instead."
+ :group 'hashcash)
+
+(defcustom hashcash-path (executable-find "hashcash")
+ "*The path to the hashcash binary."
+ :group 'hashcash)
+
+(defcustom hashcash-extra-generate-parameters nil
+ "*A list of parameter strings passed to `hashcash-path' when minting.
+For example, you may want to set this to '(\"-Z2\") to reduce header length."
+ :type '(repeat string)
+ :group 'hashcash)
+
+(defcustom hashcash-double-spend-database "hashcash.db"
+ "*The path to the double-spending database."
+ :group 'hashcash)
+
+(defcustom hashcash-in-news nil
+ "*Specifies whether or not hashcash payments should be made to newsgroups."
+ :type 'boolean
+ :group 'hashcash)
+
+(defvar hashcash-process-alist nil
+ "Alist of asynchronous hashcash processes and buffers.")
+
+(require 'mail-utils)
+
+(eval-and-compile
+ (if (fboundp 'point-at-bol)
+ (defalias 'hashcash-point-at-bol 'point-at-bol)
+ (defalias 'hashcash-point-at-bol 'line-beginning-position))
+
+ (if (fboundp 'point-at-eol)
+ (defalias 'hashcash-point-at-eol 'point-at-eol)
+ (defalias 'hashcash-point-at-eol 'line-end-position)))
+
+(defun hashcash-strip-quoted-names (addr)
+ (setq addr (mail-strip-quoted-names addr))
+ (if (and addr (string-match "\\`\\([^+@]+\\)\\+[^@]*\\(@.+\\)" addr))
+ (concat (match-string 1 addr) (match-string 2 addr))
+ addr))
+
+(defun hashcash-token-substring ()
+ (save-excursion
+ (let ((token ""))
+ (loop
+ (setq token
+ (concat token (buffer-substring (point) (hashcash-point-at-eol))))
+ (goto-char (hashcash-point-at-eol))
+ (forward-char 1)
+ (unless (looking-at "[ \t]") (return token))
+ (while (looking-at "[ \t]") (forward-char 1))))))
+
+(defun hashcash-payment-required (addr)
+ "Return the hashcash payment value required for the given address."
+ (let ((val (assoc addr hashcash-payment-alist)))
+ (or (nth 2 val) (nth 1 val) hashcash-default-payment)))
+
+(defun hashcash-payment-to (addr)
+ "Return the string with which hashcash payments should collide."
+ (let ((val (assoc addr hashcash-payment-alist)))
+ (or (nth 1 val) (nth 0 val) addr)))
+
+(defun hashcash-generate-payment (str val)
+ "Generate a hashcash payment by finding a VAL-bit collison on STR."
+ (if (and (> val 0)
+ hashcash-path)
+ (save-excursion
+ (set-buffer (get-buffer-create " *hashcash*"))
+ (erase-buffer)
+ (apply 'call-process hashcash-path nil t nil
+ "-m" "-q" "-b" (number-to-string val) str
+ hashcash-extra-generate-parameters)
+ (goto-char (point-min))
+ (hashcash-token-substring))
+ (error "No `hashcash' binary found")))
+
+(defun hashcash-generate-payment-async (str val callback)
+ "Generate a hashcash payment by finding a VAL-bit collison on STR.
+Return immediately. Call CALLBACK with process and result when ready."
+ (if (and (> val 0)
+ hashcash-path)
+ (let ((process (apply 'start-process "hashcash" nil
+ hashcash-path "-m" "-q"
+ "-b" (number-to-string val) str
+ hashcash-extra-generate-parameters)))
+ (setq hashcash-process-alist (cons
+ (cons process (current-buffer))
+ hashcash-process-alist))
+ (set-process-filter process `(lambda (process output)
+ (funcall ,callback process output))))
+ (funcall callback nil nil)))
+
+(defun hashcash-check-payment (token str val)
+ "Check the validity of a hashcash payment."
+ (if hashcash-path
+ (zerop (call-process hashcash-path nil nil nil "-c"
+ "-d" "-f" hashcash-double-spend-database
+ "-b" (number-to-string val)
+ "-r" str
+ token))
+ (progn
+ (message "No hashcash binary found")
+ (sleep-for 1)
+ nil)))
+
+(defun hashcash-version (token)
+ "Find the format version of a hashcash token."
+ ;; Version 1.2 looks like n:yymmdd:rrrrr:xxxxxxxxxxxxxxxx
+ ;; This carries its own version number embedded in the token,
+ ;; so no further format number changes should be necessary
+ ;; in the X-Payment header.
+ ;;
+ ;; Version 1.1 looks like yymmdd:rrrrr:xxxxxxxxxxxxxxxx
+ ;; You need to upgrade your hashcash binary.
+ ;;
+ ;; Version 1.0 looked like nnnnnrrrrrxxxxxxxxxxxxxxxx
+ ;; This is no longer supported.
+ (cond ((equal (aref token 1) ?:) 1.2)
+ ((equal (aref token 6) ?:) 1.1)
+ (t (error "Unknown hashcash format version"))))
+
+(defun hashcash-already-paid-p (recipient)
+ "Check for hashcash token to RECIPIENT in current buffer."
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-headers-or-head)
+ (let ((token (message-fetch-field "x-hashcash"))
+ (case-fold-search t))
+ (and (stringp token)
+ (string-match (regexp-quote recipient) token))))))
+
+;;;###autoload
+(defun hashcash-insert-payment (arg)
+ "Insert X-Payment and X-Hashcash headers with a payment for ARG"
+ (interactive "sPay to: ")
+ (unless (hashcash-already-paid-p arg)
+ (let ((pay (hashcash-generate-payment (hashcash-payment-to arg)
+ (hashcash-payment-required arg))))
+ (when pay
+ (insert-before-markers "X-Hashcash: " pay "\n")))))
+
+;;;###autoload
+(defun hashcash-insert-payment-async (arg)
+ "Insert X-Payment and X-Hashcash headers with a payment for ARG
+Only start calculation. Results are inserted when ready."
+ (interactive "sPay to: ")
+ (unless (hashcash-already-paid-p arg)
+ (hashcash-generate-payment-async
+ (hashcash-payment-to arg)
+ (hashcash-payment-required arg)
+ `(lambda (process payment)
+ (hashcash-insert-payment-async-2 ,(current-buffer) process payment)))))
+
+(defun hashcash-insert-payment-async-2 (buffer process pay)
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (save-excursion
+ (save-restriction
+ (setq hashcash-process-alist (delq
+ (assq process hashcash-process-alist)
+ hashcash-process-alist))
+ (message-goto-eoh)
+ (when pay
+ (insert-before-markers "X-Hashcash: " pay)))))))
+
+(defun hashcash-cancel-async (&optional buffer)
+ "Delete any hashcash processes associated with BUFFER.
+BUFFER defaults to the current buffer."
+ (interactive)
+ (unless buffer (setq buffer (current-buffer)))
+ (let (entry)
+ (while (setq entry (rassq buffer hashcash-process-alist))
+ (delete-process (car entry))
+ (setq hashcash-process-alist
+ (delq entry hashcash-process-alist)))))
+
+(defun hashcash-wait-async (&optional buffer)
+ "Wait for asynchronous hashcash processes in BUFFER to finish.
+BUFFER defaults to the current buffer."
+ (interactive)
+ (unless buffer (setq buffer (current-buffer)))
+ (let (entry)
+ (while (setq entry (rassq buffer hashcash-process-alist))
+ (accept-process-output (car entry)))))
+
+(defun hashcash-processes-running-p (buffer)
+ "Return non-nil if hashcash processes in BUFFER are still running."
+ (rassq buffer hashcash-process-alist))
+
+(defun hashcash-wait-or-cancel ()
+ "Ask user whether to wait for hashcash processes to finish."
+ (interactive)
+ (when (hashcash-processes-running-p (current-buffer))
+ (if (y-or-n-p
+ "Hashcash process(es) still running; wait for them to finish? ")
+ (hashcash-wait-async)
+ (hashcash-cancel-async))))
+
+;;;###autoload
+(defun hashcash-verify-payment (token &optional resource amount)
+ "Verify a hashcash payment"
+ (let* ((split (split-string token ":"))
+ (key (if (< (hashcash-version token) 1.2)
+ (nth 1 split)
+ (case (string-to-number (nth 0 split))
+ (0 (nth 2 split))
+ (1 (nth 3 split))))))
+ (cond ((null resource)
+ (let ((elt (assoc key hashcash-accept-resources)))
+ (and elt (hashcash-check-payment token (car elt)
+ (or (cadr elt) hashcash-default-accept-payment)))))
+ ((equal token key)
+ (hashcash-check-payment token resource
+ (or amount hashcash-default-accept-payment)))
+ (t nil))))
+
+;;;###autoload
+(defun mail-add-payment (&optional arg async)
+ "Add X-Payment: and X-Hashcash: headers with a hashcash payment
+for each recipient address. Prefix arg sets default payment temporarily.
+Set ASYNC to t to start asynchronous calculation. (See
+`mail-add-payment-async')."
+ (interactive "P")
+ (let ((hashcash-default-payment (if arg (prefix-numeric-value arg)
+ hashcash-default-payment))
+ (addrlist nil))
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (let ((to (hashcash-strip-quoted-names (mail-fetch-field "To" nil t)))
+ (cc (hashcash-strip-quoted-names (mail-fetch-field "Cc" nil t)))
+ (ng (hashcash-strip-quoted-names (mail-fetch-field "Newsgroups"
+ nil t))))
+ (when to
+ (setq addrlist (split-string to ",[ \t\n]*")))
+ (when cc
+ (setq addrlist (nconc addrlist (split-string cc ",[ \t\n]*"))))
+ (when (and hashcash-in-news ng)
+ (setq addrlist (nconc addrlist (split-string ng ",[ \t\n]*")))))
+ (when addrlist
+ (mapc (if async
+ #'hashcash-insert-payment-async
+ #'hashcash-insert-payment)
+ addrlist)))))
+ t)
+
+;;;###autoload
+(defun mail-add-payment-async (&optional arg)
+ "Add X-Payment: and X-Hashcash: headers with a hashcash payment
+for each recipient address. Prefix arg sets default payment temporarily.
+Calculation is asynchronous."
+ (interactive "P")
+ (mail-add-payment arg t))
+
+;;;###autoload
+(defun mail-check-payment (&optional arg)
+ "Look for a valid X-Payment: or X-Hashcash: header.
+Prefix arg sets default accept amount temporarily."
+ (interactive "P")
+ (let ((hashcash-default-accept-payment (if arg (prefix-numeric-value arg)
+ hashcash-default-accept-payment))
+ (version (hashcash-version (hashcash-generate-payment "x" 1))))
+ (save-excursion
+ (goto-char (point-min))
+ (search-forward "\n\n")
+ (beginning-of-line)
+ (let ((end (point))
+ (ok nil))
+ (goto-char (point-min))
+ (while (and (not ok) (search-forward "X-Payment: hashcash " end t))
+ (let ((value (split-string (hashcash-token-substring) " ")))
+ (when (equal (car value) (number-to-string version))
+ (setq ok (hashcash-verify-payment (cadr value))))))
+ (goto-char (point-min))
+ (while (and (not ok) (search-forward "X-Hashcash: " end t))
+ (setq ok (hashcash-verify-payment (hashcash-token-substring))))
+ (when ok
+ (message "Payment valid"))
+ ok))))
+
+(provide 'hashcash)
+
+;;; arch-tag: 0e7fe983-a124-4392-9788-0dbcbd2c4d62
diff --git a/lisp/gnus/hmac-def.el b/lisp/gnus/hmac-def.el
new file mode 100644
index 00000000000..58491ec4f4a
--- /dev/null
+++ b/lisp/gnus/hmac-def.el
@@ -0,0 +1,86 @@
+;;; hmac-def.el --- A macro for defining HMAC functions.
+
+;; Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: HMAC, RFC 2104
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 3, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This program is implemented from RFC 2104,
+;; "HMAC: Keyed-Hashing for Message Authentication".
+
+;;; Code:
+
+(defmacro define-hmac-function (name H B L &optional bit)
+ "Define a function NAME(TEXT KEY) which computes HMAC with function H.
+
+HMAC function is H(KEY XOR opad, H(KEY XOR ipad, TEXT)):
+
+H is a cryptographic hash function, such as SHA1 and MD5, which takes
+a string and return a digest of it (in binary form).
+B is a byte-length of a block size of H. (B=64 for both SHA1 and MD5.)
+L is a byte-length of hash outputs. (L=16 for MD5, L=20 for SHA1.)
+If BIT is non-nil, truncate output to specified bits."
+ `(defun ,name (text key)
+ ,(concat "Compute "
+ (upcase (symbol-name name))
+ " over TEXT with KEY.")
+ (let ((key-xor-ipad (make-string ,B ?\x36))
+ (key-xor-opad (make-string ,B ?\x5C))
+ (len (length key))
+ (pos 0))
+ (unwind-protect
+ (progn
+ ;; if `key' is longer than the block size, apply hash function
+ ;; to `key' and use the result as a real `key'.
+ (if (> len ,B)
+ (setq key (,H key)
+ len ,L))
+ (while (< pos len)
+ (aset key-xor-ipad pos (logxor (aref key pos) ?\x36))
+ (aset key-xor-opad pos (logxor (aref key pos) ?\x5C))
+ (setq pos (1+ pos)))
+ (setq key-xor-ipad (unwind-protect
+ (concat key-xor-ipad text)
+ (fillarray key-xor-ipad 0))
+ key-xor-ipad (unwind-protect
+ (,H key-xor-ipad)
+ (fillarray key-xor-ipad 0))
+ key-xor-opad (unwind-protect
+ (concat key-xor-opad key-xor-ipad)
+ (fillarray key-xor-opad 0))
+ key-xor-opad (unwind-protect
+ (,H key-xor-opad)
+ (fillarray key-xor-opad 0)))
+ ;; now `key-xor-opad' contains
+ ;; H(KEY XOR opad, H(KEY XOR ipad, TEXT)).
+ ,(if (and bit (< (/ bit 8) L))
+ `(substring key-xor-opad 0 ,(/ bit 8))
+ ;; return a copy of `key-xor-opad'.
+ `(concat key-xor-opad)))
+ ;; cleanup.
+ (fillarray key-xor-ipad 0)
+ (fillarray key-xor-opad 0)))))
+
+(provide 'hmac-def)
+
+;;; arch-tag: 645adcef-b835-4900-a10a-11f636c982b9
+;;; hmac-def.el ends here
diff --git a/lisp/gnus/hmac-md5.el b/lisp/gnus/hmac-md5.el
new file mode 100644
index 00000000000..21fc91992ad
--- /dev/null
+++ b/lisp/gnus/hmac-md5.el
@@ -0,0 +1,85 @@
+;;; hmac-md5.el --- Compute HMAC-MD5.
+
+;; Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+
+;; Author: Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>
+;; Keywords: HMAC, RFC 2104, HMAC-MD5, MD5, KEYED-MD5, CRAM-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 3, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; Test cases from RFC 2202, "Test Cases for HMAC-MD5 and HMAC-SHA-1".
+;;
+;; (encode-hex-string (hmac-md5 "Hi There" (make-string 16 ?\x0b)))
+;; => "9294727a3638bb1c13f48ef8158bfc9d"
+;;
+;; (encode-hex-string (hmac-md5 "what do ya want for nothing?" "Jefe"))
+;; => "750c783e6ab0b503eaa86e310a5db738"
+;;
+;; (encode-hex-string (hmac-md5 (make-string 50 ?\xdd) (make-string 16 ?\xaa)))
+;; => "56be34521d144c88dbb8c733f0e8b3f6"
+;;
+;; (encode-hex-string
+;; (hmac-md5
+;; (make-string 50 ?\xcd)
+;; (decode-hex-string "0102030405060708090a0b0c0d0e0f10111213141516171819")))
+;; => "697eaf0aca3a3aea3a75164746ffaa79"
+;;
+;; (encode-hex-string
+;; (hmac-md5 "Test With Truncation" (make-string 16 ?\x0c)))
+;; => "56461ef2342edc00f9bab995690efd4c"
+;;
+;; (encode-hex-string
+;; (hmac-md5-96 "Test With Truncation" (make-string 16 ?\x0c)))
+;; => "56461ef2342edc00f9bab995"
+;;
+;; (encode-hex-string
+;; (hmac-md5
+;; "Test Using Larger Than Block-Size Key - Hash Key First"
+;; (make-string 80 ?\xaa)))
+;; => "6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd"
+;;
+;; (encode-hex-string
+;; (hmac-md5
+;; "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
+;; (make-string 80 ?\xaa)))
+;; => "6f630fad67cda0ee1fb1f562db3aa53e"
+
+;;; Code:
+
+(eval-when-compile (require 'hmac-def))
+(require 'hex-util) ; (decode-hex-string STRING)
+(require 'md5) ; expects (md5 STRING)
+
+(defun md5-binary (string)
+ "Return the MD5 of STRING in binary form."
+ (if (condition-case nil
+ ;; `md5' of v21 takes 4th arg CODING (and 5th arg NOERROR).
+ (md5 "" nil nil 'binary) ; => "d41d8cd98f00b204e9800998ecf8427e"
+ (wrong-number-of-arguments nil))
+ (decode-hex-string (md5 string nil nil 'binary))
+ (decode-hex-string (md5 string))))
+
+(define-hmac-function hmac-md5 md5-binary 64 16) ; => (hmac-md5 TEXT KEY)
+(define-hmac-function hmac-md5-96 md5-binary 64 16 96)
+
+(provide 'hmac-md5)
+
+;;; arch-tag: 0ab3f4f6-3d4b-4167-a9fa-635b7fed7f27
+;;; hmac-md5.el ends here
diff --git a/lisp/gnus/html2text.el b/lisp/gnus/html2text.el
index 9f0916f797b..6de2904adb4 100644
--- a/lisp/gnus/html2text.el
+++ b/lisp/gnus/html2text.el
@@ -43,8 +43,42 @@
(defvar html2text-format-single-element-list '(("hr" . html2text-clean-hr)))
(defvar html2text-replace-list
- '(("&nbsp;" . " ") ("&gt;" . ">") ("&lt;" . "<") ("&quot;" . "\"")
- ("&amp;" . "&") ("&apos;" . "'"))
+ '(("&acute;" . "`")
+ ("&amp;" . "&")
+ ("&apos;" . "'")
+ ("&brvbar;" . "|")
+ ("&cent;" . "c")
+ ("&circ;" . "^")
+ ("&copy;" . "(C)")
+ ("&curren;" . "(#)")
+ ("&deg;" . "degree")
+ ("&divide;" . "/")
+ ("&euro;" . "e")
+ ("&frac12;" . "1/2")
+ ("&gt;" . ">")
+ ("&iquest;" . "?")
+ ("&laquo;" . "<<")
+ ("&ldquo" . "\"")
+ ("&lsaquo;" . "(")
+ ("&lsquo;" . "`")
+ ("&lt;" . "<")
+ ("&mdash;" . "--")
+ ("&nbsp;" . " ")
+ ("&ndash;" . "-")
+ ("&permil;" . "%%")
+ ("&plusmn;" . "+-")
+ ("&pound;" . "£")
+ ("&quot;" . "\"")
+ ("&raquo;" . ">>")
+ ("&rdquo" . "\"")
+ ("&reg;" . "(R)")
+ ("&rsaquo;" . ")")
+ ("&rsquo;" . "'")
+ ("&sect;" . "§")
+ ("&sup1;" . "^1")
+ ("&sup2;" . "^2")
+ ("&sup3;" . "^3")
+ ("&tilde;" . "~"))
"The map of entity to text.
This is an alist were each element is a dotted pair consisting of an
@@ -229,12 +263,12 @@ formatting, and then moved afterward.")
(goto-char p1)
(let ((item-nr 0)
(items 0))
- (while (re-search-forward "<li>" p2 t)
+ (while (search-forward "<li>" p2 t)
(setq items (1+ items)))
(goto-char p1)
(while (< item-nr items)
(setq item-nr (1+ item-nr))
- (re-search-forward "<li>" (point-max) t)
+ (search-forward "<li>" (point-max) t)
(cond
((string= list-type "ul") (insert " o "))
((string= list-type "ol") (insert (format " %s: " item-nr)))
@@ -244,7 +278,7 @@ formatting, and then moved afterward.")
(goto-char p1)
(let ((items 0)
(item-nr 0))
- (while (re-search-forward "<dt>" p2 t)
+ (while (search-forward "<dt>" p2 t)
(setq items (1+ items)))
(goto-char p1)
(while (< item-nr items)
@@ -342,8 +376,7 @@ formatting, and then moved afterward.")
(defun html2text-fix-paragraph (p1 p2)
(goto-char p1)
- (let ((has-br-line)
- (refill-start)
+ (let ((refill-start)
(refill-stop))
(when (re-search-forward "<br>$" p2 t)
(goto-char p1)
diff --git a/lisp/gnus/ietf-drums.el b/lisp/gnus/ietf-drums.el
index a02762804f7..81d66aa3093 100644
--- a/lisp/gnus/ietf-drums.el
+++ b/lisp/gnus/ietf-drums.el
@@ -99,14 +99,14 @@ backslash and doublequote.")
(push c out)))
(range
(while (<= b c)
- (push (mm-make-char 'ascii b) out)
+ (push (make-char 'ascii b) out)
(incf b))
(setq range nil))
((= i (length token))
- (push (mm-make-char 'ascii c) out))
+ (push (make-char 'ascii c) out))
(t
(when b
- (push (mm-make-char 'ascii b) out))
+ (push (make-char 'ascii b) out))
(setq b c))))
(nreverse out)))
@@ -200,7 +200,9 @@ backslash and doublequote.")
(buffer-substring
(1+ (point))
(progn (forward-sexp 1) (1- (point))))))))
- (t (error "Unknown symbol: %c" c))))
+ (t
+ (message "Unknown symbol: %c" c)
+ (forward-char 1))))
;; If we found no display-name, then we look for comments.
(if display-name
(setq display-string
@@ -213,8 +215,10 @@ backslash and doublequote.")
(ietf-drums-get-comment string)))
(cons mailbox display-string)))))
-(defun ietf-drums-parse-addresses (string)
- "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs."
+(defun ietf-drums-parse-addresses (string &optional rawp)
+ "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs.
+If RAWP, don't actually parse the addresses, but instead return
+a list of address strings."
(if (null string)
nil
(with-temp-buffer
@@ -231,20 +235,24 @@ backslash and doublequote.")
(skip-chars-forward "^,"))))
((eq c ?,)
(setq address
- (condition-case nil
- (ietf-drums-parse-address
- (buffer-substring beg (point)))
- (error nil)))
+ (if rawp
+ (buffer-substring beg (point))
+ (condition-case nil
+ (ietf-drums-parse-address
+ (buffer-substring beg (point)))
+ (error nil))))
(if address (push address pairs))
(forward-char 1)
(setq beg (point)))
(t
(forward-char 1))))
(setq address
- (condition-case nil
- (ietf-drums-parse-address
- (buffer-substring beg (point)))
- (error nil)))
+ (if rawp
+ (buffer-substring beg (point))
+ (condition-case nil
+ (ietf-drums-parse-address
+ (buffer-substring beg (point)))
+ (error nil))))
(if address (push address pairs))
(nreverse pairs)))))
@@ -274,6 +282,11 @@ backslash and doublequote.")
(concat "\"" string "\"")
string))
+(defun ietf-drums-make-address (name address)
+ (if name
+ (concat (ietf-drums-quote-string name) " <" address ">")
+ address))
+
(provide 'ietf-drums)
;;; arch-tag: 379a0191-dbae-4ca6-a0f5-d4202c209ef9
diff --git a/lisp/gnus/imap.el b/lisp/gnus/imap.el
index f60801e9ba8..7643ef4a53d 100644
--- a/lisp/gnus/imap.el
+++ b/lisp/gnus/imap.el
@@ -74,13 +74,13 @@
;; explanatory for someone that know IMAP. All functions have
;; additional documentation on how to invoke them.
;;
-;; imap.el support RFC1730/2060 (IMAP4/IMAP4rev1), implemented IMAP
-;; extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
+;; imap.el support RFC1730/2060/RFC3501 (IMAP4/IMAP4rev1), implemented
+;; IMAP extensions are RFC2195 (CRAM-MD5), RFC2086 (ACL), RFC2342
;; (NAMESPACE), RFC2359 (UIDPLUS), the IMAP-part of RFC2595 (STARTTLS,
;; LOGINDISABLED) (with use of external library starttls.el and
-;; program starttls) and the GSSAPI / kerberos V4 sections of RFC1731
-;; (with use of external program `imtest'). It also takes advantage of
-;; the UNSELECT extension in Cyrus IMAPD.
+;; program starttls), and the GSSAPI / kerberos V4 sections of RFC1731
+;; (with use of external program `imtest'), RFC2971 (ID). It also
+;; takes advantage of the UNSELECT extension in Cyrus IMAPD.
;;
;; Without the work of John McClary Prevost and Jim Radford this library
;; would not have seen the light of day. Many thanks.
@@ -140,29 +140,19 @@
(eval-when-compile (require 'cl))
(eval-and-compile
- (autoload 'base64-decode-string "base64")
- (autoload 'base64-encode-string "base64")
(autoload 'starttls-open-stream "starttls")
(autoload 'starttls-negotiate "starttls")
+ (autoload 'sasl-find-mechanism "sasl")
(autoload 'digest-md5-parse-digest-challenge "digest-md5")
(autoload 'digest-md5-digest-response "digest-md5")
(autoload 'digest-md5-digest-uri "digest-md5")
(autoload 'digest-md5-challenge "digest-md5")
(autoload 'rfc2104-hash "rfc2104")
- (autoload 'md5 "md5")
(autoload 'utf7-encode "utf7")
(autoload 'utf7-decode "utf7")
(autoload 'format-spec "format-spec")
(autoload 'format-spec-make "format-spec")
- (autoload 'open-tls-stream "tls")
- ;; Avoid use gnus-point-at-eol so we're independent of Gnus. These
- ;; days we have point-at-eol anyhow.
- (if (fboundp 'point-at-eol)
- (defalias 'imap-point-at-eol 'point-at-eol)
- (defun imap-point-at-eol ()
- (save-excursion
- (end-of-line)
- (point)))))
+ (autoload 'open-tls-stream "tls"))
;; User variables.
@@ -311,6 +301,7 @@ stream.")
kerberos4
digest-md5
cram-md5
+ ;;sasl
login
anonymous)
"Priority of authenticators to consider when authenticating to server.")
@@ -318,6 +309,7 @@ stream.")
(defvar imap-authenticator-alist
'((gssapi imap-gssapi-auth-p imap-gssapi-auth)
(kerberos4 imap-kerberos4-auth-p imap-kerberos4-auth)
+ (sasl imap-sasl-auth-p imap-sasl-auth)
(cram-md5 imap-cram-md5-p imap-cram-md5-auth)
(login imap-login-p imap-login-auth)
(anonymous imap-anonymous-p imap-anonymous-auth)
@@ -333,6 +325,13 @@ for doing the actual authentication.")
(defvar imap-error nil
"Error codes from the last command.")
+(defvar imap-logout-timeout nil
+ "Close server immediately if it can't logout in this number of seconds.
+If it is nil, never close server until logout completes. Normally,
+the value of this variable will be bound to a certain value to which
+an application program that uses this module specifies on a per-server
+basis.")
+
;; Internal constants. Change these and die.
(defconst imap-default-port 143)
@@ -353,6 +352,7 @@ for doing the actual authentication.")
imap-current-target-mailbox
imap-message-data
imap-capability
+ imap-id
imap-namespace
imap-state
imap-reached-tag
@@ -408,6 +408,10 @@ and `examine'.")
(defvar imap-capability nil
"Capability for server.")
+(defvar imap-id nil
+ "Identity of server.
+See RFC 2971.")
+
(defvar imap-namespace nil
"Namespace for current server.")
@@ -557,7 +561,7 @@ sure of changing the value of `foo'."
(not (string-match "failed" response))))
(setq done process)
(if (memq (process-status process) '(open run))
- (imap-send-command "LOGOUT"))
+ (imap-logout))
(delete-process process)
nil)))))
done))
@@ -632,7 +636,7 @@ sure of changing the value of `foo'."
(not (string-match "failed" response))))
(setq done process)
(if (memq (process-status process) '(open run))
- (imap-send-command "LOGOUT"))
+ (imap-logout))
(delete-process process)
nil)))))
done))
@@ -915,14 +919,27 @@ Returns t if login was successful, nil otherwise."
(and (not (imap-capability 'LOGINDISABLED buffer))
(not (imap-capability 'X-LOGIN-CMD-DISABLED buffer))))
+(defun imap-quote-specials (string)
+ (with-temp-buffer
+ (insert string)
+ (goto-char (point-min))
+ (while (re-search-forward "[\\\"]" nil t)
+ (forward-char -1)
+ (insert "\\")
+ (forward-char 1))
+ (buffer-string)))
+
(defun imap-login-auth (buffer)
"Login to server using the LOGIN command."
(message "imap: Plaintext authentication...")
(imap-interactive-login buffer
(lambda (user passwd)
(imap-ok-p (imap-send-command-wait
- (concat "LOGIN \"" user "\" \""
- passwd "\""))))))
+ (concat "LOGIN \""
+ (imap-quote-specials user)
+ "\" \""
+ (imap-quote-specials passwd)
+ "\""))))))
(defun imap-anonymous-p (buffer)
t)
@@ -934,6 +951,66 @@ Returns t if login was successful, nil otherwise."
(concat "LOGIN anonymous \"" (concat (user-login-name) "@"
(system-name)) "\"")))))
+;;; Compiler directives.
+
+(defvar imap-sasl-client)
+(defvar imap-sasl-step)
+
+(defun imap-sasl-make-mechanisms (buffer)
+ (let ((mecs '()))
+ (mapc (lambda (sym)
+ (let ((name (symbol-name sym)))
+ (if (and (> (length name) 5)
+ (string-equal "AUTH=" (substring name 0 5 )))
+ (setq mecs (cons (substring name 5) mecs)))))
+ (imap-capability nil buffer))
+ mecs))
+
+(defun imap-sasl-auth-p (buffer)
+ (and (condition-case ()
+ (require 'sasl)
+ (error nil))
+ (sasl-find-mechanism (imap-sasl-make-mechanisms buffer))))
+
+(defun imap-sasl-auth (buffer)
+ "Login to server using the SASL method."
+ (message "imap: Authenticating using SASL...")
+ (with-current-buffer buffer
+ (make-local-variable 'imap-username)
+ (make-local-variable 'imap-sasl-client)
+ (make-local-variable 'imap-sasl-step)
+ (let ((mechanism (sasl-find-mechanism (imap-sasl-make-mechanisms buffer)))
+ logged user)
+ (while (not logged)
+ (setq user (or imap-username
+ (read-from-minibuffer
+ (concat "IMAP username for " imap-server " using SASL "
+ (sasl-mechanism-name mechanism) ": ")
+ (or user imap-default-user))))
+ (when user
+ (setq imap-sasl-client (sasl-make-client mechanism user "imap2" imap-server)
+ imap-sasl-step (sasl-next-step imap-sasl-client nil))
+ (let ((tag (imap-send-command
+ (if (sasl-step-data imap-sasl-step)
+ (format "AUTHENTICATE %s %s"
+ (sasl-mechanism-name mechanism)
+ (sasl-step-data imap-sasl-step))
+ (format "AUTHENTICATE %s" (sasl-mechanism-name mechanism)))
+ buffer)))
+ (while (eq (imap-wait-for-tag tag) 'INCOMPLETE)
+ (sasl-step-set-data imap-sasl-step (base64-decode-string imap-continuation))
+ (setq imap-continuation nil
+ imap-sasl-step (sasl-next-step imap-sasl-client imap-sasl-step))
+ (imap-send-command-1 (if (sasl-step-data imap-sasl-step)
+ (base64-encode-string (sasl-step-data imap-sasl-step) t)
+ "")))
+ (if (imap-ok-p (imap-wait-for-tag tag))
+ (setq imap-username user
+ logged t)
+ (message "Login failed...")
+ (sit-for 1)))))
+ logged)))
+
(defun imap-digest-md5-p (buffer)
(and (imap-capability 'AUTH=DIGEST-MD5 buffer)
(condition-case ()
@@ -1006,7 +1083,7 @@ necessary. If nil, the buffer name is generated."
(with-current-buffer (get-buffer-create buffer)
(if (imap-opened buffer)
(imap-close buffer))
- (mapcar 'make-local-variable imap-local-variables)
+ (mapc 'make-local-variable imap-local-variables)
(imap-disable-multibyte)
(buffer-disable-undo)
(setq imap-server (or server imap-server))
@@ -1029,7 +1106,7 @@ necessary. If nil, the buffer name is generated."
(if (not (eq imap-default-stream stream))
(with-current-buffer (get-buffer-create
(generate-new-buffer-name " *temp*"))
- (mapcar 'make-local-variable imap-local-variables)
+ (mapc 'make-local-variable imap-local-variables)
(imap-disable-multibyte)
(buffer-disable-undo)
(setq imap-server (or server imap-server))
@@ -1084,7 +1161,7 @@ password is remembered in the buffer."
(with-current-buffer (or buffer (current-buffer))
(if (not (eq imap-state 'nonauth))
(or (eq imap-state 'auth)
- (eq imap-state 'select)
+ (eq imap-state 'selected)
(eq imap-state 'examine))
(make-local-variable 'imap-username)
(make-local-variable 'imap-password)
@@ -1118,7 +1195,7 @@ If BUFFER is nil, the current buffer is used."
(with-current-buffer (or buffer (current-buffer))
(when (imap-opened)
(condition-case nil
- (imap-send-command-wait "LOGOUT")
+ (imap-logout-wait)
(quit nil)))
(when (and imap-process
(memq (process-status imap-process) '(open run)))
@@ -1141,6 +1218,26 @@ If BUFFER is nil, the current buffer is assumed."
(memq (intern (upcase (symbol-name identifier))) imap-capability)
imap-capability)))
+(defun imap-id (&optional list-of-values buffer)
+ "Identify client to server in BUFFER, and return server identity.
+LIST-OF-VALUES is nil, or a plist with identifier and value
+strings to send to the server to identify the client.
+
+Return a list of identifiers which server in BUFFER support, or
+nil if it doesn't support ID or returns no information.
+
+If BUFFER is nil, the current buffer is assumed."
+ (with-current-buffer (or buffer (current-buffer))
+ (when (and (imap-capability 'ID)
+ (imap-ok-p (imap-send-command-wait
+ (if (null list-of-values)
+ "ID NIL"
+ (concat "ID (" (mapconcat (lambda (el)
+ (concat "\"" el "\""))
+ list-of-values
+ " ") ")")))))
+ imap-id)))
+
(defun imap-namespace (&optional buffer)
"Return a namespace hierarchy at server in BUFFER.
If BUFFER is nil, the current buffer is assumed."
@@ -1153,6 +1250,28 @@ If BUFFER is nil, the current buffer is assumed."
(defun imap-send-command-wait (command &optional buffer)
(imap-wait-for-tag (imap-send-command command buffer) buffer))
+(defun imap-logout (&optional buffer)
+ (or buffer (setq buffer (current-buffer)))
+ (if imap-logout-timeout
+ (with-timeout (imap-logout-timeout
+ (condition-case nil
+ (with-current-buffer buffer
+ (delete-process imap-process))
+ (error)))
+ (imap-send-command "LOGOUT" buffer))
+ (imap-send-command "LOGOUT" buffer)))
+
+(defun imap-logout-wait (&optional buffer)
+ (or buffer (setq buffer (current-buffer)))
+ (if imap-logout-timeout
+ (with-timeout (imap-logout-timeout
+ (condition-case nil
+ (with-current-buffer buffer
+ (delete-process imap-process))
+ (error)))
+ (imap-send-command-wait "LOGOUT" buffer))
+ (imap-send-command-wait "LOGOUT" buffer)))
+
;; Mailbox functions:
@@ -2106,6 +2225,8 @@ Return nil if no complete line has arrived."
(read (concat "(" (upcase (buffer-substring
(point) (point-max)))
")"))))
+ (ID (setq imap-id (read (buffer-substring (point)
+ (point-max)))))
(ACL (imap-parse-acl))
(t (case (prog1 (read (current-buffer))
(imap-forward))
@@ -2460,7 +2581,7 @@ Return nil if no complete line has arrived."
;; next line for Courier IMAP bug.
(skip-chars-forward " ")
(point)))
- (> (skip-chars-forward "^ )" (imap-point-at-eol)) 0))
+ (> (skip-chars-forward "^ )" (point-at-eol)) 0))
(push (buffer-substring start (point)) flag-list))
(assert (eq (char-after) ?\)) nil "In imap-parse-flag-list")
(imap-forward)
@@ -2740,99 +2861,99 @@ Return nil if no complete line has arrived."
(when imap-debug ; (untrace-all)
(require 'trace)
(buffer-disable-undo (get-buffer-create imap-debug-buffer))
- (mapcar (lambda (f) (trace-function-background f imap-debug-buffer))
- '(
- imap-utf7-encode
- imap-utf7-decode
- imap-error-text
- imap-kerberos4s-p
- imap-kerberos4-open
- imap-ssl-p
- imap-ssl-open
- imap-network-p
- imap-network-open
- imap-interactive-login
- imap-kerberos4a-p
- imap-kerberos4-auth
- imap-cram-md5-p
- imap-cram-md5-auth
- imap-login-p
- imap-login-auth
- imap-anonymous-p
- imap-anonymous-auth
- imap-open-1
- imap-open
- imap-opened
- imap-authenticate
- imap-close
- imap-capability
- imap-namespace
- imap-send-command-wait
- imap-mailbox-put
- imap-mailbox-get
- imap-mailbox-map-1
- imap-mailbox-map
- imap-current-mailbox
- imap-current-mailbox-p-1
- imap-current-mailbox-p
- imap-mailbox-select-1
- imap-mailbox-select
- imap-mailbox-examine-1
- imap-mailbox-examine
- imap-mailbox-unselect
- imap-mailbox-expunge
- imap-mailbox-close
- imap-mailbox-create-1
- imap-mailbox-create
- imap-mailbox-delete
- imap-mailbox-rename
- imap-mailbox-lsub
- imap-mailbox-list
- imap-mailbox-subscribe
- imap-mailbox-unsubscribe
- imap-mailbox-status
- imap-mailbox-acl-get
- imap-mailbox-acl-set
- imap-mailbox-acl-delete
- imap-current-message
- imap-list-to-message-set
- imap-fetch-asynch
- imap-fetch
- imap-message-put
- imap-message-get
- imap-message-map
- imap-search
- imap-message-flag-permanent-p
- imap-message-flags-set
- imap-message-flags-del
- imap-message-flags-add
- imap-message-copyuid-1
- imap-message-copyuid
- imap-message-copy
- imap-message-appenduid-1
- imap-message-appenduid
- imap-message-append
- imap-body-lines
- imap-envelope-from
- imap-send-command-1
- imap-send-command
- imap-wait-for-tag
- imap-sentinel
- imap-find-next-line
- imap-arrival-filter
- imap-parse-greeting
- imap-parse-response
- imap-parse-resp-text
- imap-parse-resp-text-code
- imap-parse-data-list
- imap-parse-fetch
- imap-parse-status
- imap-parse-acl
- imap-parse-flag-list
- imap-parse-envelope
- imap-parse-body-extension
- imap-parse-body
- )))
+ (mapc (lambda (f) (trace-function-background f imap-debug-buffer))
+ '(
+ imap-utf7-encode
+ imap-utf7-decode
+ imap-error-text
+ imap-kerberos4s-p
+ imap-kerberos4-open
+ imap-ssl-p
+ imap-ssl-open
+ imap-network-p
+ imap-network-open
+ imap-interactive-login
+ imap-kerberos4a-p
+ imap-kerberos4-auth
+ imap-cram-md5-p
+ imap-cram-md5-auth
+ imap-login-p
+ imap-login-auth
+ imap-anonymous-p
+ imap-anonymous-auth
+ imap-open-1
+ imap-open
+ imap-opened
+ imap-authenticate
+ imap-close
+ imap-capability
+ imap-namespace
+ imap-send-command-wait
+ imap-mailbox-put
+ imap-mailbox-get
+ imap-mailbox-map-1
+ imap-mailbox-map
+ imap-current-mailbox
+ imap-current-mailbox-p-1
+ imap-current-mailbox-p
+ imap-mailbox-select-1
+ imap-mailbox-select
+ imap-mailbox-examine-1
+ imap-mailbox-examine
+ imap-mailbox-unselect
+ imap-mailbox-expunge
+ imap-mailbox-close
+ imap-mailbox-create-1
+ imap-mailbox-create
+ imap-mailbox-delete
+ imap-mailbox-rename
+ imap-mailbox-lsub
+ imap-mailbox-list
+ imap-mailbox-subscribe
+ imap-mailbox-unsubscribe
+ imap-mailbox-status
+ imap-mailbox-acl-get
+ imap-mailbox-acl-set
+ imap-mailbox-acl-delete
+ imap-current-message
+ imap-list-to-message-set
+ imap-fetch-asynch
+ imap-fetch
+ imap-message-put
+ imap-message-get
+ imap-message-map
+ imap-search
+ imap-message-flag-permanent-p
+ imap-message-flags-set
+ imap-message-flags-del
+ imap-message-flags-add
+ imap-message-copyuid-1
+ imap-message-copyuid
+ imap-message-copy
+ imap-message-appenduid-1
+ imap-message-appenduid
+ imap-message-append
+ imap-body-lines
+ imap-envelope-from
+ imap-send-command-1
+ imap-send-command
+ imap-wait-for-tag
+ imap-sentinel
+ imap-find-next-line
+ imap-arrival-filter
+ imap-parse-greeting
+ imap-parse-response
+ imap-parse-resp-text
+ imap-parse-resp-text-code
+ imap-parse-data-list
+ imap-parse-fetch
+ imap-parse-status
+ imap-parse-acl
+ imap-parse-flag-list
+ imap-parse-envelope
+ imap-parse-body-extension
+ imap-parse-body
+ )))
(provide 'imap)
diff --git a/lisp/gnus/legacy-gnus-agent.el b/lisp/gnus/legacy-gnus-agent.el
index 7ee6ac7f744..d0b4d10d680 100644
--- a/lisp/gnus/legacy-gnus-agent.el
+++ b/lisp/gnus/legacy-gnus-agent.el
@@ -110,23 +110,20 @@ converted to the compressed format."
(throw 'found-file-to-convert t))
(erase-buffer)
- (let ((compressed nil))
- (mapcar (lambda (pair)
- (let* ((article-id (car pair))
- (day-of-download (cdr pair))
- (comp-list (assq day-of-download compressed)))
- (if comp-list
- (setcdr comp-list
- (cons article-id (cdr comp-list)))
- (setq compressed
- (cons (list day-of-download article-id)
- compressed)))
- nil)) alist)
- (mapcar (lambda (comp-list)
- (setcdr comp-list
- (gnus-compress-sequence
- (nreverse (cdr comp-list)))))
- compressed)
+ (let (article-id day-of-download comp-list compressed)
+ (while alist
+ (setq article-id (caar alist)
+ day-of-download (cdar alist)
+ comp-list (assq day-of-download compressed)
+ alist (cdr alist))
+ (if comp-list
+ (setcdr comp-list (cons article-id (cdr comp-list)))
+ (push (list day-of-download article-id) compressed)))
+ (setq alist compressed)
+ (while alist
+ (setq comp-list (pop alist))
+ (setcdr comp-list
+ (gnus-compress-sequence (nreverse (cdr comp-list)))))
(princ compressed (current-buffer)))
(insert "\n2\n")
(write-file file)
diff --git a/lisp/gnus/mail-parse.el b/lisp/gnus/mail-parse.el
index d9f3d08537b..9868370ce6d 100644
--- a/lisp/gnus/mail-parse.el
+++ b/lisp/gnus/mail-parse.el
@@ -59,6 +59,7 @@
(defalias 'mail-header-parse-date 'ietf-drums-parse-date)
(defalias 'mail-narrow-to-head 'ietf-drums-narrow-to-header)
(defalias 'mail-quote-string 'ietf-drums-quote-string)
+(defalias 'mail-header-make-address 'ietf-drums-make-address)
(defalias 'mail-header-fold-field 'rfc2047-fold-field)
(defalias 'mail-header-unfold-field 'rfc2047-unfold-field)
diff --git a/lisp/gnus/mail-source.el b/lisp/gnus/mail-source.el
index 0dc77f59e96..6603f5e26b9 100644
--- a/lisp/gnus/mail-source.el
+++ b/lisp/gnus/mail-source.el
@@ -29,17 +29,18 @@
(eval-when-compile
(require 'cl)
- (require 'imap)
- (eval-when-compile (defvar display-time-mail-function)))
+ (require 'imap))
(eval-and-compile
(autoload 'pop3-movemail "pop3")
(autoload 'pop3-get-message-count "pop3")
- (autoload 'nnheader-cancel-timer "nnheader")
- (autoload 'nnheader-run-at-time "nnheader"))
+ (autoload 'nnheader-cancel-timer "nnheader"))
(require 'format-spec)
(require 'mm-util)
(require 'message) ;; for `message-directory'
+(defvar display-time-mail-function)
+
+
(defgroup mail-source nil
"The mail-fetching library."
:version "21.1"
@@ -111,7 +112,7 @@ See Info node `(gnus)Mail Source Specifiers'."
(const :format "" :value :port)
(choice :tag "Port"
:value "pop3"
- (number :format "%v")
+ (integer :format "%v")
(string :format "%v")))
(group :inline t
(const :format "" :value :user)
@@ -127,13 +128,15 @@ See Info node `(gnus)Mail Source Specifiers'."
(choice :tag "Prescript"
:value nil
(string :format "%v")
- (function :format "%v")))
+ (function :format "%v")
+ (const :tag "None" nil)))
(group :inline t
(const :format "" :value :postscript)
(choice :tag "Postscript"
:value nil
(string :format "%v")
- (function :format "%v")))
+ (function :format "%v")
+ (const :tag "None" nil)))
(group :inline t
(const :format "" :value :function)
(function :tag "Function"))
@@ -146,7 +149,14 @@ See Info node `(gnus)Mail Source Specifiers'."
(const apop)))
(group :inline t
(const :format "" :value :plugged)
- (boolean :tag "Plugged"))))
+ (boolean :tag "Plugged"))
+ (group :inline t
+ (const :format "" :value :stream)
+ (choice :tag "Stream"
+ :value nil
+ (const :tag "Clear" nil)
+ (const starttls)
+ (const :tag "SSL/TLS" ssl)))))
(cons :tag "Maildir (qmail, postfix...)"
(const :format "" maildir)
(checklist :tag "Options" :greedy t
@@ -166,7 +176,7 @@ See Info node `(gnus)Mail Source Specifiers'."
(const :format "" :value :port)
(choice :tag "Port"
:value 143
- number string))
+ integer string))
(group :inline t
(const :format "" :value :user)
(string :tag "User"))
@@ -210,17 +220,17 @@ See Info node `(gnus)Mail Source Specifiers'."
(const :format "" webmail)
(checklist :tag "Options" :greedy t
(group :inline t
- (const :format "" :value :subtype)
- ;; Should be generated from
- ;; `webmail-type-definition', but we
- ;; can't require webmail without W3.
- (choice :tag "Subtype"
- :value hotmail
- (const hotmail)
- (const yahoo)
- (const netaddress)
- (const netscape)
- (const my-deja)))
+ (const :format "" :value :subtype)
+ ;; Should be generated from
+ ;; `webmail-type-definition', but we
+ ;; can't require webmail without W3.
+ (choice :tag "Subtype"
+ :value hotmail
+ (const hotmail)
+ (const yahoo)
+ (const netaddress)
+ (const netscape)
+ (const my-deja)))
(group :inline t
(const :format "" :value :user)
(string :tag "User"))
@@ -269,7 +279,7 @@ If non-nil, this maildrop will be checked periodically for new mail."
:group 'mail-source
:type 'integer)
-(defcustom mail-source-delete-incoming t
+(defcustom mail-source-delete-incoming nil
"*If non-nil, delete incoming files after handling.
If t, delete immediately, if nil, never delete. If a positive number, delete
files older than number of days."
@@ -350,7 +360,8 @@ Common keywords should be listed here.")
(:program)
(:function)
(:password)
- (:authentication password))
+ (:authentication password)
+ (:stream nil))
(maildir
(:path (or (getenv "MAILDIR") "~/Maildir/"))
(:subdirs ("cur" "new"))
@@ -502,7 +513,8 @@ Return the number of files that were found."
(when (file-exists-p mail-source-crash-box)
(message "Processing mail from %s..." mail-source-crash-box)
(setq found (mail-source-callback
- callback mail-source-crash-box)))
+ callback mail-source-crash-box))
+ (mail-source-delete-crash-box))
(+ found
(if (or debug-on-quit debug-on-error)
(funcall function source callback)
@@ -552,33 +564,33 @@ If CONFIRM is non-nil, ask for confirmation before removing a file."
(delete-file ffile))))))
(defun mail-source-callback (callback info)
- "Call CALLBACK on the mail file, and then remove the mail file.
-Pass INFO on to CALLBACK."
+ "Call CALLBACK on the mail file. Pass INFO on to CALLBACK."
(if (or (not (file-exists-p mail-source-crash-box))
(zerop (nth 7 (file-attributes mail-source-crash-box))))
(progn
(when (file-exists-p mail-source-crash-box)
(delete-file mail-source-crash-box))
0)
- (prog1
- (funcall callback mail-source-crash-box info)
- (when (file-exists-p mail-source-crash-box)
- ;; Delete or move the incoming mail out of the way.
- (if (eq mail-source-delete-incoming t)
- (delete-file mail-source-crash-box)
- (let ((incoming
- (mm-make-temp-file
- (expand-file-name
- mail-source-incoming-file-prefix
- mail-source-directory))))
- (unless (file-exists-p (file-name-directory incoming))
- (make-directory (file-name-directory incoming) t))
- (rename-file mail-source-crash-box incoming t)
- ;; remove old incoming files?
- (when (natnump mail-source-delete-incoming)
- (mail-source-delete-old-incoming
- mail-source-delete-incoming
- mail-source-delete-old-incoming-confirm))))))))
+ (funcall callback mail-source-crash-box info)))
+
+(defun mail-source-delete-crash-box ()
+ (when (file-exists-p mail-source-crash-box)
+ ;; Delete or move the incoming mail out of the way.
+ (if (eq mail-source-delete-incoming t)
+ (delete-file mail-source-crash-box)
+ (let ((incoming
+ (mm-make-temp-file
+ (expand-file-name
+ mail-source-incoming-file-prefix
+ mail-source-directory))))
+ (unless (file-exists-p (file-name-directory incoming))
+ (make-directory (file-name-directory incoming) t))
+ (rename-file mail-source-crash-box incoming t)
+ ;; remove old incoming files?
+ (when (natnump mail-source-delete-incoming)
+ (mail-source-delete-old-incoming
+ mail-source-delete-incoming
+ mail-source-delete-old-incoming-confirm))))))
(defun mail-source-movemail (from to)
"Move FROM to TO using movemail."
@@ -670,12 +682,20 @@ Pass INFO on to CALLBACK."
(sleep-for delay)))
(defun mail-source-call-script (script)
- (let ((background nil))
+ (let ((background nil)
+ (stderr (get-buffer-create " *mail-source-stderr*"))
+ result)
(when (string-match "& *$" script)
(setq script (substring script 0 (match-beginning 0))
background 0))
- (call-process shell-file-name nil background nil
- shell-command-switch script)))
+ (setq result
+ (call-process shell-file-name nil background nil
+ shell-command-switch script))
+ (when (and result
+ (not (zerop result)))
+ (set-buffer stderr)
+ (message "Mail source error: %s" (buffer-string)))
+ (kill-buffer stderr)))
;;;
;;; Different fetchers
@@ -692,7 +712,8 @@ Pass INFO on to CALLBACK."
(prog1
(mail-source-callback callback path)
(mail-source-run-script
- postscript (format-spec-make ?t mail-source-crash-box)))
+ postscript (format-spec-make ?t mail-source-crash-box))
+ (mail-source-delete-crash-box))
0))))
(defun mail-source-fetch-directory (source callback)
@@ -707,13 +728,15 @@ Pass INFO on to CALLBACK."
(when (and (file-regular-p file)
(funcall predicate file)
(mail-source-movemail file mail-source-crash-box))
- (incf found (mail-source-callback callback file))))
- (mail-source-run-script postscript (format-spec-make ?t path))
+ (incf found (mail-source-callback callback file))
+ (mail-source-run-script postscript (format-spec-make ?t path))
+ (mail-source-delete-crash-box)))
found)))
(defun mail-source-fetch-pop (source callback)
"Fetcher for single-file sources."
(mail-source-bind (pop source)
+ ;; fixme: deal with stream type in format specs
(mail-source-run-script
prescript
(format-spec-make ?p password ?t mail-source-crash-box
@@ -748,7 +771,8 @@ Pass INFO on to CALLBACK."
(pop3-mailhost server)
(pop3-port port)
(pop3-authentication-scheme
- (if (eq authentication 'apop) 'apop 'pass)))
+ (if (eq authentication 'apop) 'apop 'pass))
+ (pop3-stream-type stream))
(if (or debug-on-quit debug-on-error)
(save-excursion (pop3-movemail mail-source-crash-box))
(condition-case err
@@ -773,7 +797,8 @@ Pass INFO on to CALLBACK."
(mail-source-run-script
postscript
(format-spec-make ?p password ?t mail-source-crash-box
- ?s server ?P port ?u user))))
+ ?s server ?P port ?u user))
+ (mail-source-delete-crash-box)))
;; We nix out the password in case the error
;; was because of a wrong password being given.
(setq mail-source-password-cache
@@ -865,11 +890,6 @@ See the Gnus manual for details."
(defvar mail-source-report-new-mail-timer nil)
(defvar mail-source-report-new-mail-idle-timer nil)
-(eval-when-compile
- (if (featurep 'xemacs)
- (require 'timer-funcs)
- (require 'timer)))
-
(defun mail-source-start-idle-timer ()
;; Start our idle timer if necessary, so we delay the check until the
;; user isn't typing.
@@ -912,7 +932,7 @@ This only works when `display-time' is enabled."
(setq display-time-mail-function #'mail-source-new-mail-p)
;; Set up the main timer.
(setq mail-source-report-new-mail-timer
- (nnheader-run-at-time
+ (run-at-time
(* 60 mail-source-report-new-mail-interval)
(* 60 mail-source-report-new-mail-interval)
#'mail-source-start-idle-timer))
@@ -957,7 +977,8 @@ This only works when `display-time' is enabled."
;; MMDF mail format
(insert "\001\001\001\001\n"))
(delete-file file)))))
- (incf found (mail-source-callback callback file))))))
+ (incf found (mail-source-callback callback file))
+ (mail-source-delete-crash-box)))))
found)))
(eval-and-compile
@@ -1018,11 +1039,13 @@ This only works when `display-time' is enabled."
(insert "From imap " (current-time-string) "\n")
(save-excursion
(insert str "\n\n"))
- (while (re-search-forward "^From " nil t)
+ (while (let ((case-fold-search nil))
+ (re-search-forward "^From " nil t))
(replace-match ">From "))
(goto-char (point-max))))
(nnheader-ms-strip-cr))
(incf found (mail-source-callback callback server))
+ (mail-source-delete-crash-box)
(when (and remove fetchflag)
(setq remove (nreverse remove))
(imap-message-flags-add
@@ -1068,7 +1091,8 @@ This only works when `display-time' is enabled."
(push (cons (format "webmail:%s:%s" subtype user) password)
mail-source-password-cache)))
(webmail-fetch mail-source-crash-box subtype user password)
- (mail-source-callback callback (symbol-name subtype)))))
+ (mail-source-callback callback (symbol-name subtype))
+ (mail-source-delete-crash-box))))
(provide 'mail-source)
diff --git a/lisp/gnus/mailcap.el b/lisp/gnus/mailcap.el
index e8b624aa546..6839a6472b7 100644
--- a/lisp/gnus/mailcap.el
+++ b/lisp/gnus/mailcap.el
@@ -254,7 +254,11 @@
("html"
(viewer . mm-w3-prepare-buffer)
(test . (fboundp 'w3-prepare-buffer))
- (type . "text/html")))
+ (type . "text/html"))
+ ("dns"
+ (viewer . dns-mode)
+ (test . (fboundp 'dns-mode))
+ (type . "text/dns")))
("video"
("mpeg"
(viewer . "mpeg_play %s")
@@ -852,6 +856,7 @@ this type is returned."
(".sit" . "application/x-stuffit")
(".siv" . "application/sieve")
(".snd" . "audio/basic")
+ (".soa" . "text/dns")
(".src" . "application/x-wais-source")
(".tar" . "archive/tar")
(".tcl" . "application/x-tcl")
diff --git a/lisp/gnus/md4.el b/lisp/gnus/md4.el
new file mode 100644
index 00000000000..aa9bc543203
--- /dev/null
+++ b/lisp/gnus/md4.el
@@ -0,0 +1,228 @@
+;;; md4.el --- MD4 Message Digest Algorithm.
+
+;; Copyright (C) 2004 Free Software Foundation, Inc.
+;; Copyright (C) 2001 Taro Kawagishi
+;; Author: Taro Kawagishi <tarok@transpulse.org>
+;; Keywords: MD4
+;; Version: 1.00
+;; Created: February 2001
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Code:
+
+;;;
+;;; MD4 hash calculation
+
+(defvar md4-buffer (make-vector 4 '(0 . 0))
+ "work buffer of four 32-bit integers")
+
+(defun md4 (in n)
+ "Returns the MD4 hash string of 16 bytes long for a string IN of N
+bytes long. N is required to handle strings containing character 0."
+ (let (m
+ (b (cons 0 (* n 8)))
+ (i 0)
+ (buf (make-string 128 0)) c4)
+ ;; initial values
+ (aset md4-buffer 0 '(26437 . 8961)) ;0x67452301
+ (aset md4-buffer 1 '(61389 . 43913)) ;0xefcdab89
+ (aset md4-buffer 2 '(39098 . 56574)) ;0x98badcfe
+ (aset md4-buffer 3 '(4146 . 21622)) ;0x10325476
+
+ ;; process the string in 64 bits chunks
+ (while (> n 64)
+ (setq m (md4-copy64 (substring in 0 64)))
+ (md4-64 m)
+ (setq in (substring in 64))
+ (setq n (- n 64)))
+
+ ;; process the rest of the string (length is now n <= 64)
+ (setq i 0)
+ (while (< i n)
+ (aset buf i (aref in i))
+ (setq i (1+ i)))
+ (aset buf n 128) ;0x80
+ (if (<= n 55)
+ (progn
+ (setq c4 (md4-pack-int32 b))
+ (aset buf 56 (aref c4 0))
+ (aset buf 57 (aref c4 1))
+ (aset buf 58 (aref c4 2))
+ (aset buf 59 (aref c4 3))
+ (setq m (md4-copy64 buf))
+ (md4-64 m))
+ ;; else
+ (setq c4 (md4-pack-int32 b))
+ (aset buf 120 (aref c4 0))
+ (aset buf 121 (aref c4 1))
+ (aset buf 122 (aref c4 2))
+ (aset buf 123 (aref c4 3))
+ (setq m (md4-copy64 buf))
+ (md4-64 m)
+ (setq m (md4-copy64 (substring buf 64)))
+ (md4-64 m)))
+
+ (concat (md4-pack-int32 (aref md4-buffer 0))
+ (md4-pack-int32 (aref md4-buffer 1))
+ (md4-pack-int32 (aref md4-buffer 2))
+ (md4-pack-int32 (aref md4-buffer 3))))
+
+(defsubst md4-F (x y z) (logior (logand x y) (logand (lognot x) z)))
+(defsubst md4-G (x y z) (logior (logand x y) (logand x z) (logand y z)))
+(defsubst md4-H (x y z) (logxor x y z))
+
+(defmacro md4-make-step (name func)
+ `(defun ,name (a b c d xk s ac)
+ (let*
+ ((h1 (+ (car a) (,func (car b) (car c) (car d)) (car xk) (car ac)))
+ (l1 (+ (cdr a) (,func (cdr b) (cdr c) (cdr d)) (cdr xk) (cdr ac)))
+ (h2 (logand 65535 (+ h1 (lsh l1 -16))))
+ (l2 (logand 65535 l1))
+ ;; cyclic shift of 32 bits integer
+ (h3 (logand 65535 (if (> s 15)
+ (+ (lsh h2 (- s 32)) (lsh l2 (- s 16)))
+ (+ (lsh h2 s) (lsh l2 (- s 16))))))
+ (l3 (logand 65535 (if (> s 15)
+ (+ (lsh l2 (- s 32)) (lsh h2 (- s 16)))
+ (+ (lsh l2 s) (lsh h2 (- s 16)))))))
+ (cons h3 l3))))
+
+(md4-make-step md4-round1 md4-F)
+(md4-make-step md4-round2 md4-G)
+(md4-make-step md4-round3 md4-H)
+
+(defsubst md4-add (x y)
+ "Return 32-bit sum of 32-bit integers X and Y."
+ (let ((h (+ (car x) (car y)))
+ (l (+ (cdr x) (cdr y))))
+ (cons (logand 65535 (+ h (lsh l -16))) (logand 65535 l))))
+
+(defsubst md4-and (x y)
+ (cons (logand (car x) (car y)) (logand (cdr x) (cdr y))))
+
+(defun md4-64 (m)
+ "Calculate md4 of 64 bytes chunk M which is represented as 16 pairs of
+32 bits integers. The resulting md4 value is placed in md4-buffer."
+ (let ((a (aref md4-buffer 0))
+ (b (aref md4-buffer 1))
+ (c (aref md4-buffer 2))
+ (d (aref md4-buffer 3)))
+ (setq a (md4-round1 a b c d (aref m 0) 3 '(0 . 0))
+ d (md4-round1 d a b c (aref m 1) 7 '(0 . 0))
+ c (md4-round1 c d a b (aref m 2) 11 '(0 . 0))
+ b (md4-round1 b c d a (aref m 3) 19 '(0 . 0))
+ a (md4-round1 a b c d (aref m 4) 3 '(0 . 0))
+ d (md4-round1 d a b c (aref m 5) 7 '(0 . 0))
+ c (md4-round1 c d a b (aref m 6) 11 '(0 . 0))
+ b (md4-round1 b c d a (aref m 7) 19 '(0 . 0))
+ a (md4-round1 a b c d (aref m 8) 3 '(0 . 0))
+ d (md4-round1 d a b c (aref m 9) 7 '(0 . 0))
+ c (md4-round1 c d a b (aref m 10) 11 '(0 . 0))
+ b (md4-round1 b c d a (aref m 11) 19 '(0 . 0))
+ a (md4-round1 a b c d (aref m 12) 3 '(0 . 0))
+ d (md4-round1 d a b c (aref m 13) 7 '(0 . 0))
+ c (md4-round1 c d a b (aref m 14) 11 '(0 . 0))
+ b (md4-round1 b c d a (aref m 15) 19 '(0 . 0))
+
+ a (md4-round2 a b c d (aref m 0) 3 '(23170 . 31129)) ;0x5A827999
+ d (md4-round2 d a b c (aref m 4) 5 '(23170 . 31129))
+ c (md4-round2 c d a b (aref m 8) 9 '(23170 . 31129))
+ b (md4-round2 b c d a (aref m 12) 13 '(23170 . 31129))
+ a (md4-round2 a b c d (aref m 1) 3 '(23170 . 31129))
+ d (md4-round2 d a b c (aref m 5) 5 '(23170 . 31129))
+ c (md4-round2 c d a b (aref m 9) 9 '(23170 . 31129))
+ b (md4-round2 b c d a (aref m 13) 13 '(23170 . 31129))
+ a (md4-round2 a b c d (aref m 2) 3 '(23170 . 31129))
+ d (md4-round2 d a b c (aref m 6) 5 '(23170 . 31129))
+ c (md4-round2 c d a b (aref m 10) 9 '(23170 . 31129))
+ b (md4-round2 b c d a (aref m 14) 13 '(23170 . 31129))
+ a (md4-round2 a b c d (aref m 3) 3 '(23170 . 31129))
+ d (md4-round2 d a b c (aref m 7) 5 '(23170 . 31129))
+ c (md4-round2 c d a b (aref m 11) 9 '(23170 . 31129))
+ b (md4-round2 b c d a (aref m 15) 13 '(23170 . 31129))
+
+ a (md4-round3 a b c d (aref m 0) 3 '(28377 . 60321)) ;0x6ED9EBA1
+ d (md4-round3 d a b c (aref m 8) 9 '(28377 . 60321))
+ c (md4-round3 c d a b (aref m 4) 11 '(28377 . 60321))
+ b (md4-round3 b c d a (aref m 12) 15 '(28377 . 60321))
+ a (md4-round3 a b c d (aref m 2) 3 '(28377 . 60321))
+ d (md4-round3 d a b c (aref m 10) 9 '(28377 . 60321))
+ c (md4-round3 c d a b (aref m 6) 11 '(28377 . 60321))
+ b (md4-round3 b c d a (aref m 14) 15 '(28377 . 60321))
+ a (md4-round3 a b c d (aref m 1) 3 '(28377 . 60321))
+ d (md4-round3 d a b c (aref m 9) 9 '(28377 . 60321))
+ c (md4-round3 c d a b (aref m 5) 11 '(28377 . 60321))
+ b (md4-round3 b c d a (aref m 13) 15 '(28377 . 60321))
+ a (md4-round3 a b c d (aref m 3) 3 '(28377 . 60321))
+ d (md4-round3 d a b c (aref m 11) 9 '(28377 . 60321))
+ c (md4-round3 c d a b (aref m 7) 11 '(28377 . 60321))
+ b (md4-round3 b c d a (aref m 15) 15 '(28377 . 60321)))
+
+ (aset md4-buffer 0 (md4-add a (aref md4-buffer 0)))
+ (aset md4-buffer 1 (md4-add b (aref md4-buffer 1)))
+ (aset md4-buffer 2 (md4-add c (aref md4-buffer 2)))
+ (aset md4-buffer 3 (md4-add d (aref md4-buffer 3)))
+ ))
+
+(defun md4-copy64 (seq)
+ "Unpack a 64 bytes string into 16 pairs of 32 bits integers."
+ (let ((int32s (make-vector 16 0)) (i 0) j)
+ (while (< i 16)
+ (setq j (* i 4))
+ (aset int32s i (cons (+ (aref seq (+ j 2)) (lsh (aref seq (+ j 3)) 8))
+ (+ (aref seq j) (lsh (aref seq (1+ j)) 8))))
+ (setq i (1+ i)))
+ int32s))
+
+;;;
+;;; sub functions
+
+(defun md4-pack-int16 (int16)
+ "Pack 16 bits integer in 2 bytes string as little endian."
+ (let ((str (make-string 2 0)))
+ (aset str 0 (logand int16 255))
+ (aset str 1 (lsh int16 -8))
+ str))
+
+(defun md4-pack-int32 (int32)
+ "Pack 32 bits integer in a 4 bytes string as little endian. A 32 bits
+integer is represented as a pair of two 16 bits integers (cons high low)."
+ (let ((str (make-string 4 0))
+ (h (car int32)) (l (cdr int32)))
+ (aset str 0 (logand l 255))
+ (aset str 1 (lsh l -8))
+ (aset str 2 (logand h 255))
+ (aset str 3 (lsh h -8))
+ str))
+
+(defun md4-unpack-int16 (str)
+ (if (eq 2 (length str))
+ (+ (lsh (aref str 1) 8) (aref str 0))
+ (error "%s is not 2 bytes long" str)))
+
+(defun md4-unpack-int32 (str)
+ (if (eq 4 (length str))
+ (cons (+ (lsh (aref str 3) 8) (aref str 2))
+ (+ (lsh (aref str 1) 8) (aref str 0)))
+ (error "%s is not 4 bytes long" str)))
+
+(provide 'md4)
+
+;;; arch-tag: 99d706fe-089b-42ea-9507-67ae41091e6e
+;;; md4.el ends here
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 8b282dacc96..157c6f08b19 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -32,9 +32,9 @@
;;; Code:
(eval-when-compile
- (require 'cl)
- (defvar gnus-message-group-art)
- (defvar gnus-list-identifiers)) ; gnus-sum is required where necessary
+ (require 'cl))
+
+(require 'hashcash)
(require 'canlock)
(require 'mailheader)
(require 'gmm-utils)
@@ -48,10 +48,13 @@
(require 'mail-parse)
(require 'mml)
(require 'rfc822)
-(eval-and-compile
- (autoload 'gnus-find-method-for-group "gnus")
- (autoload 'nnvirtual-find-group-art "nnvirtual")
- (autoload 'gnus-group-decoded-name "gnus-group"))
+(require 'ecomplete)
+
+(autoload 'mailclient-send-it "mailclient") ;; Emacs 22 or contrib/
+
+(defvar gnus-message-group-art)
+(defvar gnus-list-identifiers) ; gnus-sum is required where necessary
+(defvar rmail-enable-mime-composing)
(defgroup message '((user-mail-address custom-variable)
(user-full-name custom-variable))
@@ -156,7 +159,6 @@ If this variable is nil, no such courtesy message will be added."
:group 'message-interface
:type 'regexp)
-;;;###autoload
(defcustom message-from-style 'default
"*Specifies how \"From\" headers look.
@@ -190,8 +192,8 @@ To disable checking of long signatures, for instance, add
Don't touch this variable unless you really know what you're doing.
-Checks include `approved', `continuation-headers', `control-chars',
-`empty', `existing-newsgroups', `from', `illegible-text',
+Checks include `approved', `bogus-recipient', `continuation-headers',
+`control-chars', `empty', `existing-newsgroups', `from', `illegible-text',
`invisible-text', `long-header-lines', `long-lines', `message-id',
`multiple-headers', `new-text', `newsgroups', `quoting-style',
`repeated-newsgroups', `reply-to', `sender', `sendsys', `shoot',
@@ -211,7 +213,7 @@ Also see `message-required-news-headers' and
:link '(custom-manual "(message)Message Headers")
:type '(repeat sexp))
-(defcustom message-draft-headers '(References From)
+(defcustom message-draft-headers '(References From Date)
"*Headers to be generated when saving a draft message."
:version "22.1"
:group 'message-news
@@ -271,7 +273,7 @@ included. Organization and User-Agent are optional."
:link '(custom-manual "(message)Mail Headers")
:type 'regexp)
-(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|^X-Payment:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|^X-Payment:\\|^Approved:"
"*Header lines matching this regexp will be deleted before posting.
It's best to delete old Path and Date headers before posting to avoid
any confusion."
@@ -304,7 +306,7 @@ used."
:version "22.1"
:type '(choice (const :tag "never" nil)
(const :tag "always strip" t)
- (const ask))
+ (const ask))
:link '(custom-manual "(message)Message Headers")
:group 'message-various)
@@ -411,7 +413,6 @@ for `message-cross-post-insert-note'."
;;; End of variables adopted from `message-utils.el'.
-;;;###autoload
(defcustom message-signature-separator "^-- *$"
"Regexp matching the signature separator."
:type 'regexp
@@ -470,8 +471,14 @@ function
:link '(custom-manual "(message)Message Buffers")
:type 'boolean)
-(eval-when-compile
- (defvar gnus-local-organization))
+(defcustom message-kill-buffer-query t
+ "*Non-nil means that killing a modified message buffer has to be confirmed.
+This is used by `message-kill-buffer'."
+ :version "23.0" ;; No Gnus
+ :group 'message-buffers
+ :type 'boolean)
+
+(defvar gnus-local-organization)
(defcustom message-user-organization
(or (and (boundp 'gnus-local-organization)
(stringp gnus-local-organization)
@@ -484,8 +491,14 @@ If t, use `message-user-organization-file'."
:type '(choice string
(const :tag "consult file" t)))
-;;;###autoload
-(defcustom message-user-organization-file "/usr/lib/news/organization"
+(defcustom message-user-organization-file
+ (let (orgfile)
+ (dolist (f (list "/etc/organization"
+ "/etc/news/organization"
+ "/usr/lib/news/organization"))
+ (when (file-readable-p f)
+ (setq orgfile f)))
+ orgfile)
"*Local news organization file."
:type 'file
:link '(custom-manual "(message)News Headers")
@@ -578,15 +591,13 @@ Done before generating the new subject of a forward."
(if (string-match "[[:digit:]]" "1") ;; support POSIX?
"\\([ \t]*[-_.[:word:]]+>+\\|[ \t]*[]>|}+]\\)+"
;; ?-, ?_ or ?. MUST NOT be in syntax entry w.
- (let ((old-table (syntax-table))
- non-word-constituents)
- (set-syntax-table text-mode-syntax-table)
- (setq non-word-constituents
- (concat
- (if (string-match "\\w" "-") "" "-")
- (if (string-match "\\w" "_") "" "_")
- (if (string-match "\\w" ".") "" ".")))
- (set-syntax-table old-table)
+ (let (non-word-constituents)
+ (with-syntax-table text-mode-syntax-table
+ (setq non-word-constituents
+ (concat
+ (if (string-match "\\w" "-") "" "-")
+ (if (string-match "\\w" "_") "" "_")
+ (if (string-match "\\w" ".") "" "."))))
(if (equal non-word-constituents "")
"\\([ \t]*\\(\\w\\)+>+\\|[ \t]*[]>|}+]\\)+"
(concat "\\([ \t]*\\(\\w\\|["
@@ -596,7 +607,13 @@ Done before generating the new subject of a forward."
:version "22.1"
:group 'message-insertion
:link '(custom-manual "(message)Insertion Variables")
- :type 'regexp)
+ :type 'regexp
+ :set (lambda (symbol value)
+ (prog1
+ (custom-set-default symbol value)
+ (if (boundp 'gnus-message-cite-prefix-regexp)
+ (setq gnus-message-cite-prefix-regexp
+ (concat "^\\(?:" value "\\)"))))))
(defcustom message-cancel-message "I am canceling my own article.\n"
"Message to be inserted in the cancel message."
@@ -604,16 +621,34 @@ Done before generating the new subject of a forward."
:link '(custom-manual "(message)Canceling News")
:type 'string)
+(defvar smtpmail-default-smtp-server)
+
+(defun message-send-mail-function ()
+ "Return suitable value for the variable `message-send-mail-function'."
+ (cond ((and sendmail-program
+ (executable-find sendmail-program))
+ 'message-send-mail-with-sendmail)
+ ((and (locate-library "smtpmail")
+ (require 'smtpmail)
+ smtpmail-default-smtp-server)
+ 'message-smtpmail-send-it)
+ ((locate-library "mailclient")
+ 'message-send-mail-with-mailclient)
+ (t
+ (lambda ()
+ (error "Don't know how to send mail. Please customize `message-send-mail-function'.")))))
+
;; Useful to set in site-init.el
-;;;###autoload
-(defcustom message-send-mail-function 'message-send-mail-with-sendmail
+(defcustom message-send-mail-function (message-send-mail-function)
"Function to call to send the current buffer as mail.
The headers should be delimited by a line whose contents match the
variable `mail-header-separator'.
-Valid values include `message-send-mail-with-sendmail' (the default),
+Valid values include `message-send-mail-with-sendmail'
`message-send-mail-with-mh', `message-send-mail-with-qmail',
-`message-smtpmail-send-it', `smtpmail-send-it' and `feedmail-send-it'.
+`message-smtpmail-send-it', `smtpmail-send-it',
+`feedmail-send-it' and `message-send-mail-with-mailclient'. The
+default is system dependent.
See also `send-mail-function'."
:type '(radio (function-item message-send-mail-with-sendmail)
@@ -622,8 +657,12 @@ See also `send-mail-function'."
(function-item message-smtpmail-send-it)
(function-item smtpmail-send-it)
(function-item feedmail-send-it)
- (function :tag "Other"))
+ (function :tag "Other")
+ (function-item message-send-mail-with-mailclient
+ :tag "Use Mailclient package")
+ (function :tag "Other"))
:group 'message-sending
+ :initialize 'custom-initialize-default
:link '(custom-manual "(message)Mail Variables")
:group 'message-mail)
@@ -660,6 +699,12 @@ and respond with new To and Cc headers."
:link '(custom-manual "(message)Followup")
:type '(choice function (const nil)))
+(defcustom message-extra-wide-headers nil
+ "If non-nil, a list of additional address headers.
+These are used when composing a wide reply."
+ :group 'message-sending
+ :type '(repeat string))
+
(defcustom message-use-followup-to 'ask
"*Specifies what to do with Followup-To header.
If nil, always ignore the header. If it is t, use its value, but
@@ -756,6 +801,14 @@ If this is nil, use `user-mail-address'. If it is the symbol
:link '(custom-manual "(message)Mail Variables")
:group 'message-sending)
+(defcustom message-sendmail-extra-arguments nil
+ "Additional arguments to `sendmail-program'."
+ ;; E.g. '("-a" "account") for msmtp
+ :version "23.0" ;; No Gnus
+ :type '(repeat string)
+ ;; :link '(custom-manual "(message)Mail Variables")
+ :group 'message-sending)
+
;; qmail-related stuff
(defcustom message-qmail-inject-program "/var/qmail/bin/qmail-inject"
"Location of the qmail-inject program."
@@ -776,14 +829,8 @@ might set this variable to '(\"-f\" \"you@some.where\")."
:type '(choice (function)
(repeat string)))
-(defvar message-cater-to-broken-inn t
- "Non-nil means Gnus should not fold the `References' header.
-Folding `References' makes ancient versions of INN create incorrect
-NOV lines.")
-
-(eval-when-compile
- (defvar gnus-post-method)
- (defvar gnus-select-method))
+(defvar gnus-post-method)
+(defvar gnus-select-method)
(defcustom message-post-method
(cond ((and (boundp 'gnus-post-method)
(listp gnus-post-method)
@@ -817,9 +864,18 @@ will not have a visible effect for those headers."
:group 'message-headers
:link '(custom-manual "(message)Message Headers")
:type '(choice (const :tag "None" nil)
- (const :tag "References" '(references))
- (const :tag "All" t)
- (repeat (sexp :tag "Header"))))
+ (const :tag "References" '(references))
+ (const :tag "All" t)
+ (repeat (sexp :tag "Header"))))
+
+(defcustom message-fill-column 72
+ "Column beyond which automatic line-wrapping should happen.
+Local value for message buffers. If non-nil, also turn on
+auto-fill in message buffers."
+ :group 'message-various
+ ;; :link '(custom-manual "(message)Message Headers")
+ :type '(choice (const :tag "Don't turn on auto fill" nil)
+ (integer)))
(defcustom message-setup-hook nil
"Normal hook, run each time a new outgoing message is initialized.
@@ -866,31 +922,71 @@ the signature is inserted."
:version "22.1"
:group 'message-various)
-;;;###autoload
(defcustom message-citation-line-function 'message-insert-citation-line
"*Function called to insert the \"Whomever writes:\" line.
+Predefined functions include `message-insert-citation-line' and
+`message-insert-formatted-citation-line' (see the variable
+`message-citation-line-format').
+
Note that Gnus provides a feature where the reader can click on
`writes:' to hide the cited text. If you change this line too much,
people who read your message will have to change their Gnus
configuration. See the variable `gnus-cite-attribution-suffix'."
- :type 'function
+ :type '(choice
+ (function-item :tag "plain" message-insert-citation-line)
+ (function-item :tag "formatted" message-insert-formatted-citation-line)
+ (function :tag "Other"))
:link '(custom-manual "(message)Insertion Variables")
:group 'message-insertion)
-;;;###autoload
+(defcustom message-citation-line-format "On %a, %b %d %Y, %N wrote:\n"
+ "Format of the \"Whomever writes:\" line.
+
+The string is formatted using `format-spec'. The following
+constructs are replaced:
+
+ %f The full From, e.g. \"John Doe <john.doe@example.invalid>\".
+ %n The mail address, e.g. \"john.doe@example.invalid\".
+ %N The real name if present, e.g.: \"John Doe\", else fall
+ back to the mail address.
+ %F The first name if present, e.g.: \"John\".
+ %L The last name if present, e.g.: \"Doe\".
+
+All other format specifiers are passed to `format-time-string'
+which is called using the date from the article your replying to.
+Extracting the first (%F) and last name (%L) is done
+heuristically, so you should always check it yourself.
+
+Please also read the note in the documentation of
+`message-citation-line-function'."
+ :type '(choice (const :tag "Plain" "%f writes:")
+ (const :tag "Include date" "On %a, %b %d %Y, %n wrote:")
+ string)
+ :link '(custom-manual "(message)Insertion Variables")
+ :version "23.0" ;; No Gnus
+ :group 'message-insertion)
+
(defcustom message-yank-prefix "> "
"*Prefix inserted on the lines of yanked messages.
Fix `message-cite-prefix-regexp' if it is set to an abnormal value.
-See also `message-yank-cited-prefix'."
+See also `message-yank-cited-prefix' and `message-yank-empty-prefix'."
:type 'string
:link '(custom-manual "(message)Insertion Variables")
:group 'message-insertion)
(defcustom message-yank-cited-prefix ">"
- "*Prefix inserted on cited or empty lines of yanked messages.
+ "*Prefix inserted on cited lines of yanked messages.
Fix `message-cite-prefix-regexp' if it is set to an abnormal value.
-See also `message-yank-prefix'."
+See also `message-yank-prefix' and `message-yank-empty-prefix'."
+ :version "22.1"
+ :type 'string
+ :link '(custom-manual "(message)Insertion Variables")
+ :group 'message-insertion)
+
+(defcustom message-yank-empty-prefix ">"
+ "*Prefix inserted on empty lines of yanked messages.
+See also `message-yank-prefix' and `message-yank-cited-prefix'."
:version "22.1"
:type 'string
:link '(custom-manual "(message)Insertion Variables")
@@ -903,12 +999,11 @@ Used by `message-yank-original' via `message-yank-cite'."
:link '(custom-manual "(message)Insertion Variables")
:type 'integer)
-;;;###autoload
(defcustom message-cite-function 'message-cite-original
"*Function for citing an original message.
Predefined functions include `message-cite-original' and
`message-cite-original-without-signature'.
-Note that `message-cite-original' uses `mail-citation-hook' if that is non-nil."
+Note that these functions use `mail-citation-hook' if that is non-nil."
:type '(radio (function-item message-cite-original)
(function-item message-cite-original-without-signature)
(function-item sc-cite-original)
@@ -916,7 +1011,6 @@ Note that `message-cite-original' uses `mail-citation-hook' if that is non-nil."
:link '(custom-manual "(message)Insertion Variables")
:group 'message-insertion)
-;;;###autoload
(defcustom message-indent-citation-function 'message-indent-citation
"*Function for modifying a citation just inserted in the mail buffer.
This can also be a list of functions. Each function can find the
@@ -926,7 +1020,6 @@ point and mark around the citation text as modified."
:link '(custom-manual "(message)Insertion Variables")
:group 'message-insertion)
-;;;###autoload
(defcustom message-signature t
"*String to be inserted at the end of the message buffer.
If t, the `message-signature-file' file will be inserted instead.
@@ -936,16 +1029,26 @@ If a form, the result from the form will be used instead."
:link '(custom-manual "(message)Insertion Variables")
:group 'message-insertion)
-;;;###autoload
(defcustom message-signature-file "~/.signature"
"*Name of file containing the text inserted at end of message buffer.
Ignored if the named file doesn't exist.
-If nil, don't insert a signature."
+If nil, don't insert a signature.
+If a path is specified, the value of `message-signature-directory' is ignored,
+even if set."
:type '(choice file (const :tags "None" nil))
:link '(custom-manual "(message)Insertion Variables")
:group 'message-insertion)
-;;;###autoload
+(defcustom message-signature-directory nil
+ "*Name of directory containing signature files.
+Comes in handy if you have many such files, handled via posting styles for
+instance.
+If nil, `message-signature-file' is expected to specify the directory if
+needed."
+ :type '(choice string (const :tags "None" nil))
+ :link '(custom-manual "(message)Insertion Variables")
+ :group 'message-insertion)
+
(defcustom message-signature-insert-empty-line t
"*If non-nil, insert an empty line before the signature separator."
:version "22.1"
@@ -1075,13 +1178,25 @@ the prefix.")
(defcustom message-mail-alias-type 'abbrev
"*What alias expansion type to use in Message buffers.
-The default is `abbrev', which uses mailabbrev. nil switches
-mail aliases off."
+The default is `abbrev', which uses mailabbrev. `ecomplete' uses
+an electric completion mode. nil switches mail aliases off.
+This can also be a list of values."
:group 'message
:link '(custom-manual "(message)Mail Aliases")
:type '(choice (const :tag "Use Mailabbrev" abbrev)
+ (const :tag "Use ecomplete" ecomplete)
(const :tag "No expansion" nil)))
+(defcustom message-self-insert-commands '(self-insert-command)
+ "List of `self-insert-command's used to trigger ecomplete.
+When one of those commands is invoked to enter a character in To or Cc
+header, ecomplete will suggest the candidates of recipients (see also
+`message-mail-alias-type'). If you use some tool to enter non-ASCII
+text and it replaces `self-insert-command' with the other command, e.g.
+`egg-self-insert-command', you may want to add it to this list."
+ :group 'message-various
+ :type '(repeat function))
+
(defcustom message-auto-save-directory
(file-name-as-directory (nnheader-concat message-directory "drafts"))
"*Directory where Message auto-saves buffers if Gnus isn't running.
@@ -1101,13 +1216,18 @@ If nil, you might be asked to input the charset."
(defcustom message-dont-reply-to-names
(and (boundp 'rmail-dont-reply-to-names) rmail-dont-reply-to-names)
- "*A regexp specifying addresses to prune when doing wide replies.
-A value of nil means exclude your own user name only."
+ "*Addresses to prune when doing wide replies.
+This can be a regexp or a list of regexps. Also, a value of nil means
+exclude your own user name only."
:version "21.1"
:group 'message
:link '(custom-manual "(message)Wide Reply")
:type '(choice (const :tag "Yourself" nil)
- regexp))
+ regexp
+ (repeat :tag "Regexp List" regexp)))
+
+(defsubst message-dont-reply-to-names ()
+ (gmm-regexp-concat message-dont-reply-to-names))
(defvar message-shoot-gnksa-feet nil
"*A list of GNKSA feet you are allowed to shoot.
@@ -1119,20 +1239,34 @@ candidates:
`quoted-text-only' Allow you to post quoted text only;
`multiple-copies' Allow you to post multiple copies;
`cancel-messages' Allow you to cancel or supersede messages from
- your other email addresses.")
+ your other email addresses.")
(defsubst message-gnksa-enable-p (feature)
(or (not (listp message-shoot-gnksa-feet))
(memq feature message-shoot-gnksa-feet)))
-(defcustom message-hidden-headers nil
+(defcustom message-hidden-headers '("^References:" "^Face:" "^X-Face:"
+ "^X-Draft-From:")
"Regexp of headers to be hidden when composing new messages.
This can also be a list of regexps to match headers. Or a list
starting with `not' and followed by regexps."
:version "22.1"
:group 'message
:link '(custom-manual "(message)Message Headers")
- :type '(repeat regexp))
+ :type '(choice
+ :format "%{%t%}: %[Value Type%] %v"
+ (regexp :menu-tag "regexp" :format "regexp\n%t: %v")
+ (repeat :menu-tag "(regexp ...)" :format "(regexp ...)\n%v%i"
+ (regexp :format "%t: %v"))
+ (cons :menu-tag "(not regexp ...)" :format "(not regexp ...)\n%v"
+ (const not)
+ (repeat :format "%v%i"
+ (regexp :format "%t: %v")))))
+
+(defcustom message-cite-articles-with-x-no-archive t
+ "If non-nil, cite text from articles that has X-No-Archive set."
+ :group 'message
+ :type 'boolean)
;;; Internal variables.
;;; Well, not really internal.
@@ -1148,7 +1282,7 @@ starting with `not' and followed by regexps."
(defface message-header-to
'((((class color)
(background dark))
- (:foreground "green2" :bold t))
+ (:foreground "DarkOliveGreen1" :bold t))
(((class color)
(background light))
(:foreground "MidnightBlue" :bold t))
@@ -1162,7 +1296,7 @@ starting with `not' and followed by regexps."
(defface message-header-cc
'((((class color)
(background dark))
- (:foreground "green4" :bold t))
+ (:foreground "chartreuse1" :bold t))
(((class color)
(background light))
(:foreground "MidnightBlue"))
@@ -1176,7 +1310,7 @@ starting with `not' and followed by regexps."
(defface message-header-subject
'((((class color)
(background dark))
- (:foreground "green3"))
+ (:foreground "OliveDrab1"))
(((class color)
(background light))
(:foreground "navy blue" :bold t))
@@ -1204,7 +1338,7 @@ starting with `not' and followed by regexps."
(defface message-header-other
'((((class color)
(background dark))
- (:foreground "#b00000"))
+ (:foreground "VioletRed1"))
(((class color)
(background light))
(:foreground "steel blue"))
@@ -1218,7 +1352,7 @@ starting with `not' and followed by regexps."
(defface message-header-name
'((((class color)
(background dark))
- (:foreground "DarkGreen"))
+ (:foreground "green"))
(((class color)
(background light))
(:foreground "cornflower blue"))
@@ -1232,7 +1366,7 @@ starting with `not' and followed by regexps."
(defface message-header-xheader
'((((class color)
(background dark))
- (:foreground "blue"))
+ (:foreground "DeepSkyBlue1"))
(((class color)
(background light))
(:foreground "blue"))
@@ -1246,7 +1380,7 @@ starting with `not' and followed by regexps."
(defface message-separator
'((((class color)
(background dark))
- (:foreground "blue3"))
+ (:foreground "LightSkyBlue1"))
(((class color)
(background light))
(:foreground "brown"))
@@ -1260,7 +1394,7 @@ starting with `not' and followed by regexps."
(defface message-cited-text
'((((class color)
(background dark))
- (:foreground "red"))
+ (:foreground "LightPink1"))
(((class color)
(background light))
(:foreground "red"))
@@ -1274,7 +1408,7 @@ starting with `not' and followed by regexps."
(defface message-mml
'((((class color)
(background dark))
- (:foreground "ForestGreen"))
+ (:foreground "MediumSpringGreen"))
(((class color)
(background light))
(:foreground "ForestGreen"))
@@ -1322,13 +1456,13 @@ starting with `not' and followed by regexps."
(1 'message-header-name)
(2 'message-header-newsgroups nil t))
(,(message-font-lock-make-header-matcher
- (concat "^\\([A-Z][^: \n\t]+:\\)" content))
+ (concat "^\\(X-[A-Za-z0-9-]+:\\|In-Reply-To:\\)" content))
(1 'message-header-name)
- (2 'message-header-other nil t))
+ (2 'message-header-xheader))
(,(message-font-lock-make-header-matcher
- (concat "^\\(X-[A-Za-z0-9-]+:\\|In-Reply-To:\\)" content))
+ (concat "^\\([A-Z][^: \n\t]+:\\)" content))
(1 'message-header-name)
- (2 'message-header-name))
+ (2 'message-header-other nil t))
,@(if (and mail-header-separator
(not (equal mail-header-separator "")))
`((,(concat "^\\(" (regexp-quote mail-header-separator) "\\)$")
@@ -1350,10 +1484,10 @@ starting with `not' and followed by regexps."
(put 'message-mode 'font-lock-defaults '(message-font-lock-keywords t))
(defvar message-face-alist
- '((bold . bold-region)
+ '((bold . message-bold-region)
(underline . underline-region)
(default . (lambda (b e)
- (unbold-region b e)
+ (message-unbold-region b e)
(ununderline-region b e))))
"Alist of mail and news faces for facemenu.
The cdr of each entry is a function for applying the face to a region.")
@@ -1493,6 +1627,19 @@ functionality to work."
(const :tag "Never" nil)
(const :tag "Always" t)))
+(defcustom message-generate-hashcash (if (executable-find "hashcash") t)
+ "*Whether to generate X-Hashcash: headers.
+If `t', always generate hashcash headers. If `opportunistic',
+only generate hashcash headers if it can be done without the user
+waiting (i.e., only asynchronously).
+
+You must have the \"hashcash\" binary installed, see `hashcash-path'."
+ :group 'message-headers
+ :link '(custom-manual "(message)Mail Headers")
+ :type '(choice (const :tag "Always" t)
+ (const :tag "Never" nil)
+ (const :tag "Opportunistic" opportunistic)))
+
;;; Internal variables.
(defvar message-sending-message "Sending...")
@@ -1505,9 +1652,8 @@ functionality to work."
(defvar message-inserted-headers nil)
;; Byte-compiler warning
-(eval-when-compile
- (defvar gnus-active-hashtb)
- (defvar gnus-read-active-file))
+(defvar gnus-active-hashtb)
+(defvar gnus-read-active-file)
;;; Regexp matching the delimiter of messages in UNIX mail format
;;; (UNIX From lines), minus the initial ^. It should be a copy
@@ -1575,10 +1721,17 @@ functionality to work."
"^|? *---+ +Message text follows: +---+ *|?$")
"A regexp that matches the separator before the text of a failed message.")
+(defvar message-field-fillers
+ '((To message-fill-field-address)
+ (Cc message-fill-field-address)
+ (From message-fill-field-address))
+ "Alist of header names/filler functions.")
+
(defvar message-header-format-alist
- `((Newsgroups)
- (To . message-fill-address)
- (Cc . message-fill-address)
+ `((From)
+ (Newsgroups)
+ (To)
+ (Cc)
(Subject)
(In-Reply-To)
(Fcc)
@@ -1622,28 +1775,32 @@ functionality to work."
:type 'regexp)
(eval-and-compile
+ (autoload 'gnus-alive-p "gnus-util")
+ (autoload 'gnus-delay-article "gnus-delay")
+ (autoload 'gnus-extract-address-components "gnus-util")
+ (autoload 'gnus-find-method-for-group "gnus")
+ (autoload 'gnus-group-decoded-name "gnus-group")
+ (autoload 'gnus-group-name-charset "gnus-group")
+ (autoload 'gnus-group-name-decode "gnus-group")
+ (autoload 'gnus-groups-from-server "gnus")
+ (autoload 'gnus-make-local-hook "gnus-util")
+ (autoload 'gnus-open-server "gnus-int")
+ (autoload 'gnus-output-to-mail "gnus-util")
+ (autoload 'gnus-output-to-rmail "gnus-util")
+ (autoload 'gnus-request-post "gnus-int")
+ (autoload 'gnus-select-frame-set-input-focus "gnus-util")
+ (autoload 'gnus-server-string "gnus")
(autoload 'idna-to-ascii "idna")
(autoload 'message-setup-toolbar "messagexmas")
(autoload 'mh-new-draft-name "mh-comp")
(autoload 'mh-send-letter "mh-comp")
- (autoload 'gnus-point-at-eol "gnus-util")
- (autoload 'gnus-point-at-bol "gnus-util")
- (autoload 'gnus-output-to-rmail "gnus-util")
- (autoload 'gnus-output-to-mail "gnus-util")
(autoload 'nndraft-request-associate-buffer "nndraft")
(autoload 'nndraft-request-expire-articles "nndraft")
- (autoload 'gnus-open-server "gnus-int")
- (autoload 'gnus-request-post "gnus-int")
- (autoload 'gnus-alive-p "gnus-util")
- (autoload 'gnus-server-string "gnus")
- (autoload 'gnus-group-name-charset "gnus-group")
- (autoload 'gnus-group-name-decode "gnus-group")
- (autoload 'gnus-groups-from-server "gnus")
- (autoload 'rmail-output "rmailout")
- (autoload 'gnus-delay-article "gnus-delay")
- (autoload 'gnus-make-local-hook "gnus-util")
- (autoload 'gnus-extract-address-components "gnus-util")
- (autoload 'gnus-select-frame-set-input-focus "gnus-util"))
+ (autoload 'nnvirtual-find-group-art "nnvirtual")
+ (autoload 'rmail-dont-reply-to "mail-utils")
+ (autoload 'rmail-msg-is-pruned "rmail")
+ (autoload 'rmail-msg-restore-non-pruned-header "rmail")
+ (autoload 'rmail-output "rmailout"))
@@ -1723,12 +1880,10 @@ is used by default."
The buffer is expected to be narrowed to just the header of the message;
see `message-narrow-to-headers-or-head'."
(let* ((inhibit-point-motion-hooks t)
- (case-fold-search t)
(value (mail-fetch-field header nil (not not-all))))
(when value
(while (string-match "\n[\t ]+" value)
(setq value (replace-match " " t t value)))
- (set-text-properties 0 (length value) nil value)
value)))
(defun message-field-value (header &optional not-all)
@@ -1741,14 +1896,14 @@ see `message-narrow-to-headers-or-head'."
(defun message-narrow-to-field ()
"Narrow the buffer to the header on the current line."
(beginning-of-line)
+ (while (looking-at "[ \t]")
+ (forward-line -1))
(narrow-to-region
(point)
(progn
(forward-line 1)
(if (re-search-forward "^[^ \n\t]" nil t)
- (progn
- (beginning-of-line)
- (point))
+ (point-at-bol)
(point-max))))
(goto-char (point-min)))
@@ -1964,28 +2119,30 @@ Leading \"Re: \" is not stripped by this function. Use the function
" (was: "
old-subject ")\n")))))))))
-(defun message-mark-inserted-region (beg end)
+(defun message-mark-inserted-region (beg end &optional verbatim)
"Mark some region in the current article with enclosing tags.
-See `message-mark-insert-begin' and `message-mark-insert-end'."
- (interactive "r")
+See `message-mark-insert-begin' and `message-mark-insert-end'.
+If VERBATIM, use slrn style verbatim marks (\"#v+\" and \"#v-\")."
+ (interactive "r\nP")
(save-excursion
;; add to the end of the region first, otherwise end would be invalid
(goto-char end)
- (insert message-mark-insert-end)
+ (insert (if verbatim "#v-\n" message-mark-insert-end))
(goto-char beg)
- (insert message-mark-insert-begin)))
+ (insert (if verbatim "#v+\n" message-mark-insert-begin))))
-(defun message-mark-insert-file (file)
+(defun message-mark-insert-file (file &optional verbatim)
"Insert FILE at point, marking it with enclosing tags.
-See `message-mark-insert-begin' and `message-mark-insert-end'."
- (interactive "fFile to insert: ")
+See `message-mark-insert-begin' and `message-mark-insert-end'.
+If VERBATIM, use slrn style verbatim marks (\"#v+\" and \"#v-\")."
+ (interactive "fFile to insert: \nP")
;; reverse insertion to get correct result.
(let ((p (point)))
- (insert message-mark-insert-end)
+ (insert (if verbatim "#v-\n" message-mark-insert-end))
(goto-char p)
(insert-file-contents file)
(goto-char p)
- (insert message-mark-insert-begin)))
+ (insert (if verbatim "#v+\n" message-mark-insert-begin))))
(defun message-add-archive-header ()
"Insert \"X-No-Archive: Yes\" in the header and a note in the body.
@@ -2304,6 +2461,14 @@ Point is left at the beginning of the narrowed-to region."
(1+ max)))))
(message-sort-headers-1))))
+(defun message-kill-address ()
+ "Kill the address under point."
+ (interactive)
+ (let ((start (point)))
+ (message-skip-to-next-address)
+ (kill-region start (point))))
+
+
(defun message-info (&optional arg)
"Display the Message manual.
@@ -2365,6 +2530,7 @@ Prefixed with two \\[universal-argument]'s, display the PGG manual."
(define-key message-mode-map "\C-c\C-fw" 'message-insert-wide-reply)
(define-key message-mode-map "\C-c\C-n" 'message-insert-newsgroups)
(define-key message-mode-map "\C-c\C-l" 'message-to-list-only)
+ (define-key message-mode-map "\C-c\C-f\C-e" 'message-insert-expires)
(define-key message-mode-map "\C-c\C-u" 'message-insert-or-toggle-importance)
(define-key message-mode-map "\C-c\M-n"
@@ -2385,18 +2551,20 @@ Prefixed with two \\[universal-argument]'s, display the PGG manual."
(define-key message-mode-map "\C-c\C-d" 'message-dont-send)
(define-key message-mode-map "\C-c\n" 'gnus-delay-article)
+ (define-key message-mode-map "\C-c\M-k" 'message-kill-address)
(define-key message-mode-map "\C-c\C-e" 'message-elide-region)
(define-key message-mode-map "\C-c\C-v" 'message-delete-not-region)
(define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature)
(define-key message-mode-map "\M-\r" 'message-newline-and-reformat)
- ;;(define-key message-mode-map "\M-q" 'message-fill-paragraph)
(define-key message-mode-map [remap split-line] 'message-split-line)
(define-key message-mode-map "\C-c\C-a" 'mml-attach-file)
(define-key message-mode-map "\C-a" 'message-beginning-of-line)
(define-key message-mode-map "\t" 'message-tab)
- (define-key message-mode-map "\M-;" 'comment-region))
+ (define-key message-mode-map "\M-;" 'comment-region)
+
+ (define-key message-mode-map "\M-n" 'message-display-abbrev))
(easy-menu-define
message-mode-menu message-mode-map "Message Menu."
@@ -2477,7 +2645,8 @@ Prefixed with two \\[universal-argument]'s, display the PGG manual."
;; ["Followup-To (with note in body)" message-cross-post-followup-to t]
["Crosspost / Followup-To..." message-cross-post-followup-to t]
["Distribution" message-goto-distribution t]
- ["X-No-Archive:" message-add-archive-header t ]
+ ["Expires" message-insert-expires t ]
+ ["X-No-Archive" message-add-archive-header t ]
"----"
;; (typical) mailing-lists stuff
["Fetch To" message-insert-to
@@ -2497,14 +2666,15 @@ Prefixed with two \\[universal-argument]'s, display the PGG manual."
"----"
["Sort Headers" message-sort-headers t]
["Encode non-ASCII domain names" message-idna-to-ascii-rhs t]
+ ;; We hide `message-hidden-headers' by narrowing the buffer.
+ ["Show Hidden Headers" widen t]
["Goto Body" message-goto-body t]
["Goto Signature" message-goto-signature t]))
(defvar message-tool-bar-map nil)
-(eval-when-compile
- (defvar facemenu-add-face-function)
- (defvar facemenu-remove-face-function))
+(defvar facemenu-add-face-function)
+(defvar facemenu-remove-face-function)
;;; Forbidden properties
;;
@@ -2555,19 +2725,23 @@ These properties are essential to work, so we should never strip them."
(get-text-property pos 'egg-lang)
(get-text-property pos 'egg-start)))))
+(defsubst message-mail-alias-type-p (type)
+ (if (atom message-mail-alias-type)
+ (eq message-mail-alias-type type)
+ (memq type message-mail-alias-type)))
+
(defun message-strip-forbidden-properties (begin end &optional old-length)
"Strip forbidden properties between BEGIN and END, ignoring the third arg.
This function is intended to be called from `after-change-functions'.
See also `message-forbidden-properties'."
+ (when (and (message-mail-alias-type-p 'ecomplete)
+ (memq this-command message-self-insert-commands))
+ (message-display-abbrev))
(when (and message-strip-special-text-properties
(message-tamago-not-in-use-p begin))
(let ((buffer-read-only nil)
(inhibit-read-only t))
- (while (not (= begin end))
- (when (not (get-text-property begin 'message-hidden))
- (remove-text-properties begin (1+ begin)
- message-forbidden-properties))
- (incf begin)))))
+ (remove-text-properties begin end message-forbidden-properties))))
;;;###autoload
(define-derived-mode message-mode text-mode "Message"
@@ -2581,9 +2755,10 @@ C-c C-f move to a header field (and create it if there isn't):
C-c C-f C-w move to Fcc C-c C-f C-r move to Reply-To
C-c C-f C-u move to Summary C-c C-f C-n move to Newsgroups
C-c C-f C-k move to Keywords C-c C-f C-d move to Distribution
- C-c C-f C-o move to From (\"Originator\")
+ C-c C-f C-o move to From (\"Originator\")
C-c C-f C-f move to Followup-To
C-c C-f C-m move to Mail-Followup-To
+ C-c C-f C-e move to Expires
C-c C-f C-i cycle through Importance values
C-c C-f s change subject and append \"(was: <Old Subject>)\"
C-c C-f x crossposting with FollowUp-To header and note in body
@@ -2632,6 +2807,9 @@ M-RET `message-newline-and-reformat' (break the line and reformat)."
(set (make-local-variable 'message-checksum) nil)
(set (make-local-variable 'message-mime-part) 0)
(message-setup-fill-variables)
+ (when message-fill-column
+ (setq fill-column message-fill-column)
+ (turn-on-auto-fill))
;; Allow using comment commands to add/remove quoting.
;; (set (make-local-variable 'comment-start) message-yank-prefix)
(when message-yank-prefix
@@ -2651,11 +2829,14 @@ M-RET `message-newline-and-reformat' (break the line and reformat)."
(add-hook 'after-change-functions 'message-strip-forbidden-properties
nil 'local)
;; Allow mail alias things.
- (when (eq message-mail-alias-type 'abbrev)
+ (cond
+ ((message-mail-alias-type-p 'abbrev)
(if (fboundp 'mail-abbrevs-setup)
(mail-abbrevs-setup)
(if (fboundp 'mail-aliases-setup) ; warning avoidance
(mail-aliases-setup))))
+ ((message-mail-alias-type-p 'ecomplete)
+ (ecomplete-setup)))
(unless buffer-file-name
(message-set-auto-save-file-name))
(unless (buffer-base-buffer)
@@ -2706,6 +2887,8 @@ M-RET `message-newline-and-reformat' (break the line and reformat)."
;; solution would be not to use `define-derived-mode', and run
;; `text-mode-hook' ourself at the end of the mode.
;; -- Per Abrahamsen <abraham@dina.kvl.dk> Date: 2001-10-19.
+ ;; This kludge is unneeded in Emacs>=21 since define-derived-mode is
+ ;; now careful to run parent hooks after the body. --Stef
(when auto-fill-function
(setq auto-fill-function normal-auto-fill-function)))
@@ -2845,11 +3028,11 @@ If the original author requested not to be sent mail, don't insert unless the
prefix FORCE is given."
(interactive "P")
(let* ((mct (message-fetch-reply-field "mail-copies-to"))
- (dont (and mct (or (equal (downcase mct) "never")
+ (dont (and mct (or (equal (downcase mct) "never")
(equal (downcase mct) "nobody"))))
- (to (or (message-fetch-reply-field "mail-reply-to")
- (message-fetch-reply-field "reply-to")
- (message-fetch-reply-field "from"))))
+ (to (or (message-fetch-reply-field "mail-reply-to")
+ (message-fetch-reply-field "reply-to")
+ (message-fetch-reply-field "from"))))
(when (and dont to)
(message
(if force
@@ -2889,21 +3072,21 @@ or in the synonym headers, defined by `message-header-synonyms'."
;; (mail-strip-quoted-names "Foo Bar <foo@bar>, bla@fasel (Bla Fasel)")
(dolist (header headers)
(let* ((header-name (symbol-name (car header)))
- (new-header (cdr header))
- (synonyms (loop for synonym in message-header-synonyms
+ (new-header (cdr header))
+ (synonyms (loop for synonym in message-header-synonyms
when (memq (car header) synonym) return synonym))
- (old-header
- (loop for synonym in synonyms
+ (old-header
+ (loop for synonym in synonyms
for old-header = (mail-fetch-field (symbol-name synonym))
when (and old-header (string-match new-header old-header))
return synonym)))
(if old-header
- (message "already have `%s' in `%s'" new-header old-header)
+ (message "already have `%s' in `%s'" new-header old-header)
(when (and (message-position-on-field header-name)
- (setq old-header (mail-fetch-field header-name))
- (not (string-match "\\` *\\'" old-header)))
+ (setq old-header (mail-fetch-field header-name))
+ (not (string-match "\\` *\\'" old-header)))
(insert ", "))
- (insert new-header)))))
+ (insert new-header)))))
(defun message-widen-reply ()
"Widen the reply to include maximum recipients."
@@ -2961,22 +3144,30 @@ or in the synonym headers, defined by `message-header-synonyms'."
(when (message-goto-signature)
(forward-line -2)))
-(defun message-kill-to-signature ()
- "Deletes all text up to the signature."
- (interactive)
- (let ((point (point)))
- (message-goto-signature)
- (unless (eobp)
- (end-of-line -1))
- (kill-region point (point))
- (unless (bolp)
- (insert "\n"))))
+(defun message-kill-to-signature (&optional arg)
+ "Kill all text up to the signature.
+If a numberic argument or prefix arg is given, leave that number
+of lines before the signature intact."
+ (interactive "P")
+ (save-excursion
+ (save-restriction
+ (let ((point (point)))
+ (narrow-to-region point (point-max))
+ (message-goto-signature)
+ (unless (eobp)
+ (if (and arg (numberp arg))
+ (forward-line (- -1 arg))
+ (end-of-line -1)))
+ (unless (= point (point))
+ (kill-region point (point))
+ (unless (bolp)
+ (insert "\n")))))))
(defun message-newline-and-reformat (&optional arg not-break)
"Insert four newlines, and then reformat if inside quoted text.
Prefix arg means justify as well."
(interactive (list (if current-prefix-arg 'full)))
- (let (quoted point beg end leading-space bolp)
+ (let (quoted point beg end leading-space bolp fill-paragraph-function)
(setq point (point))
(beginning-of-line)
(setq beg (point))
@@ -3061,22 +3252,22 @@ Prefix arg means justify as well."
(if point (goto-char point)))))
(defun message-fill-paragraph (&optional arg)
- "Like `fill-paragraph'."
+ "Message specific function to fill a paragraph.
+This function is used as the value of `fill-paragraph-function' in
+Message buffers and is not meant to be called directly."
(interactive (list (if current-prefix-arg 'full)))
(if (if (boundp 'filladapt-mode) filladapt-mode)
nil
- (message-newline-and-reformat arg t)
+ (if (message-point-in-header-p)
+ (message-fill-field)
+ (message-newline-and-reformat arg t))
t))
-;; Is it better to use `mail-header-end'?
(defun message-point-in-header-p ()
"Return t if point is in the header."
(save-excursion
- (let ((p (point)))
- (goto-char (point-min))
- (not (re-search-forward
- (concat "^" (regexp-quote mail-header-separator) "\n")
- p t)))))
+ (not (re-search-backward
+ (concat "^" (regexp-quote mail-header-separator) "\n") nil t))))
(defun message-do-auto-fill ()
"Like `do-auto-fill', but don't fill in message header."
@@ -3101,13 +3292,21 @@ Prefix arg means justify as well."
((listp message-signature)
(eval message-signature))
(t message-signature)))
- (signature
+ signature-file)
+ (setq signature
(cond ((stringp signature)
signature)
- ((and (eq t signature)
- message-signature-file
- (file-exists-p message-signature-file))
- signature))))
+ ((and (eq t signature) message-signature-file)
+ (setq signature-file
+ (if (and message-signature-directory
+ ;; don't actually use the signature directory
+ ;; if message-signature-file contains a path.
+ (not (file-name-directory
+ message-signature-file)))
+ (nnheader-concat message-signature-directory
+ message-signature-file)
+ message-signature-file))
+ (file-exists-p signature-file))))
(when signature
(goto-char (point-max))
;; Insert the signature.
@@ -3117,7 +3316,7 @@ Prefix arg means justify as well."
(insert "\n"))
(insert "-- \n")
(if (eq signature t)
- (insert-file-contents message-signature-file)
+ (insert-file-contents signature-file)
(insert signature))
(goto-char (point-max))
(or (bolp) (insert "\n")))))
@@ -3222,17 +3421,17 @@ text was killed."
(substring table ?a (+ ?a n))
(substring table (+ ?a 26) 255))))
-(defun message-caesar-buffer-body (&optional rotnum)
+(defun message-caesar-buffer-body (&optional rotnum wide)
"Caesar rotate all letters in the current buffer by 13 places.
Used to encode/decode possibly offensive messages (commonly in rec.humor).
With prefix arg, specifies the number of places to rotate each letter forward.
-Mail and USENET news headers are not rotated."
+Mail and USENET news headers are not rotated unless WIDE is non-nil."
(interactive (if current-prefix-arg
(list (prefix-numeric-value current-prefix-arg))
(list nil)))
(save-excursion
(save-restriction
- (when (message-goto-body)
+ (when (and (not wide) (message-goto-body))
(narrow-to-region (point) (point-max)))
(message-caesar-region (point-min) (point-max) rotnum))))
@@ -3279,14 +3478,15 @@ Numeric argument means justify as well."
(let ((fill-prefix message-yank-prefix))
(fill-individual-paragraphs (point) (point-max) justifyp))))
-(defun message-indent-citation ()
+(defun message-indent-citation (&optional start end yank-only)
"Modify text just inserted from a message to be cited.
The inserted text should be the region.
When this function returns, the region is again around the modified text.
Normally, indent each nonblank line `message-indentation-spaces' spaces.
However, if `message-yank-prefix' is non-nil, insert that prefix on each line."
- (let ((start (point)))
+ (unless start (setq start (point)))
+ (unless yank-only
;; Remove unwanted headers.
(when message-ignored-cited-headers
(let (all-removed)
@@ -3314,18 +3514,53 @@ However, if `message-yank-prefix' is non-nil, insert that prefix on each line."
(insert "\n"))
(while (and (zerop (forward-line -1))
(looking-at "$"))
- (message-delete-line))
- ;; Do the indentation.
- (if (null message-yank-prefix)
- (indent-rigidly start (mark t) message-indentation-spaces)
- (save-excursion
- (goto-char start)
- (while (< (point) (mark t))
- (if (or (looking-at ">") (looking-at "^$"))
- (insert message-yank-cited-prefix)
- (insert message-yank-prefix))
- (forward-line 1))))
- (goto-char start)))
+ (message-delete-line)))
+ ;; Do the indentation.
+ (if (null message-yank-prefix)
+ (indent-rigidly start (or end (mark t)) message-indentation-spaces)
+ (save-excursion
+ (goto-char start)
+ (while (< (point) (or end (mark t)))
+ (cond ((looking-at ">")
+ (insert message-yank-cited-prefix))
+ ((looking-at "^$")
+ (insert message-yank-empty-prefix))
+ (t
+ (insert message-yank-prefix)))
+ (forward-line 1))))
+ (goto-char start))
+
+(defun message-remove-blank-cited-lines (&optional remove)
+ "Remove cited lines containing only blanks.
+If REMOVE is non-nil, remove newlines, too.
+
+To use this automatically, you may add this function to
+`gnus-message-setup-hook'."
+ (interactive "P")
+ (let ((citexp
+ (concat
+ "^\\("
+ (when (boundp 'message-yank-cited-prefix)
+ (concat message-yank-cited-prefix "\\|"))
+ message-yank-prefix
+ "\\)+ *\n"
+ )))
+ (gnus-message 8 "removing `%s'" citexp)
+ (save-excursion
+ (message-goto-body)
+ (while (re-search-forward citexp nil t)
+ (replace-match (if remove "" "\n"))))))
+
+(defvar message-cite-reply-above nil
+ "If non-nil, start own text above the quote.
+
+Note: Top posting is bad netiquette. Don't use it unless you
+really must. You probably want to set variable only for specific
+groups, e.g. using `gnus-posting-styles':
+
+ (eval (set (make-local-variable 'message-cite-reply-above) t))
+
+This variable has no effect in news postings.")
(defun message-yank-original (&optional arg)
"Insert the message being replied to, if any.
@@ -3338,9 +3573,22 @@ This function uses `message-cite-function' to do the actual citing.
Just \\[universal-argument] as argument means don't indent, insert no
prefix, and don't delete any headers."
(interactive "P")
- (let ((modified (buffer-modified-p)))
+ (let ((modified (buffer-modified-p))
+ body-text)
(when (and message-reply-buffer
message-cite-function)
+ (when message-cite-reply-above
+ (if (and (not (message-news-p))
+ (or (eq message-cite-reply-above 'is-evil)
+ (y-or-n-p "\
+Top posting is bad netiquette. Please don't top post unless you really must.
+Really top post? ")))
+ (save-excursion
+ (setq body-text
+ (buffer-substring (message-goto-body)
+ (point-max)))
+ (delete-region (message-goto-body) (point-max)))
+ (set (make-local-variable 'message-cite-reply-above) nil)))
(delete-windows-on message-reply-buffer t)
(push-mark (save-excursion
(insert-buffer-substring message-reply-buffer)
@@ -3354,6 +3602,13 @@ prefix, and don't delete any headers."
(goto-char (mark t))
(insert-before-markers ?\n)
(goto-char pt))))
+ (when message-cite-reply-above
+ (message-goto-body)
+ (insert body-text)
+ (insert (if (bolp) "\n" "\n\n"))
+ (message-goto-body))
+ ;; Add a `message-setup-very-last-hook' here?
+ ;; Add `gnus-article-highlight-citation' here?
(unless modified
(setq message-checksum (message-checksum))))))
@@ -3375,59 +3630,18 @@ prefix, and don't delete any headers."
(push (buffer-name buffer) buffers))))
(nreverse buffers)))
-(defun message-cite-original-without-signature ()
- "Cite function in the standard Message manner."
- (let* ((start (point))
- (end (mark t))
- (functions
- (when message-indent-citation-function
- (if (listp message-indent-citation-function)
- message-indent-citation-function
- (list message-indent-citation-function))))
- ;; This function may be called by `gnus-summary-yank-message' and
- ;; may insert a different article from the original. So, we will
- ;; modify the value of `message-reply-headers' with that article.
- (message-reply-headers
- (save-restriction
- (narrow-to-region start end)
- (message-narrow-to-head-1)
- (vector 0
- (or (message-fetch-field "subject") "none")
- (or (message-fetch-field "from") "nobody")
- (message-fetch-field "date")
- (message-fetch-field "message-id" t)
- (message-fetch-field "references")
- 0 0 ""))))
- (mml-quote-region start end)
- ;; Allow undoing.
- (undo-boundary)
- (goto-char end)
- (when (re-search-backward message-signature-separator start t)
- ;; Also peel off any blank lines before the signature.
- (forward-line -1)
- (while (looking-at "^[ \t]*$")
- (forward-line -1))
- (forward-line 1)
- (delete-region (point) end)
- (unless (search-backward "\n\n" start t)
- ;; Insert a blank line if it is peeled off.
- (insert "\n")))
- (goto-char start)
- (while functions
- (funcall (pop functions)))
- (when message-citation-line-function
- (unless (bolp)
- (insert "\n"))
- (funcall message-citation-line-function))))
+(defun message-cite-original-1 (strip-signature)
+ "Cite an original message.
+If STRIP-SIGNATURE is non-nil, strips off the signature from the
+original message.
-(eval-when-compile (defvar mail-citation-hook)) ;Compiler directive
-(defun message-cite-original ()
- "Cite function in the standard Message manner."
+This function uses `mail-citation-hook' if that is non-nil."
(if (and (boundp 'mail-citation-hook)
mail-citation-hook)
(run-hooks 'mail-citation-hook)
(let* ((start (point))
(end (mark t))
+ (x-no-archive nil)
(functions
(when message-indent-citation-function
(if (listp message-indent-citation-function)
@@ -3440,6 +3654,7 @@ prefix, and don't delete any headers."
(save-restriction
(narrow-to-region start end)
(message-narrow-to-head-1)
+ (setq x-no-archive (message-fetch-field "x-no-archive"))
(vector 0
(or (message-fetch-field "subject") "none")
(or (message-fetch-field "from") "nobody")
@@ -3448,13 +3663,129 @@ prefix, and don't delete any headers."
(message-fetch-field "references")
0 0 ""))))
(mml-quote-region start end)
+ (when strip-signature
+ ;; Allow undoing.
+ (undo-boundary)
+ (goto-char end)
+ (when (re-search-backward message-signature-separator start t)
+ ;; Also peel off any blank lines before the signature.
+ (forward-line -1)
+ (while (looking-at "^[ \t]*$")
+ (forward-line -1))
+ (forward-line 1)
+ (delete-region (point) end)
+ (unless (search-backward "\n\n" start t)
+ ;; Insert a blank line if it is peeled off.
+ (insert "\n"))))
(goto-char start)
- (while functions
- (funcall (pop functions)))
+ (mapc 'funcall functions)
(when message-citation-line-function
(unless (bolp)
(insert "\n"))
- (funcall message-citation-line-function)))))
+ (funcall message-citation-line-function))
+ (when (and x-no-archive
+ (not message-cite-articles-with-x-no-archive)
+ (string-match "yes" x-no-archive))
+ (undo-boundary)
+ (delete-region (point) (mark t))
+ (insert "> [Quoted text removed due to X-No-Archive]\n")
+ (push-mark)
+ (forward-line -1)))))
+
+(defun message-cite-original ()
+ "Cite function in the standard Message manner."
+ (message-cite-original-1 nil))
+
+(defun message-insert-formatted-citation-line (&optional from date)
+ "Function that inserts a formatted citation line.
+
+See `message-citation-line-format'."
+ ;; The optional args are for testing/debugging. They will disappear later.
+ ;; Example:
+ ;; (with-temp-buffer
+ ;; (message-insert-formatted-citation-line
+ ;; "John Doe <john.doe@example.invalid>"
+ ;; (current-time))
+ ;; (buffer-string))
+ (when (or message-reply-headers (and from date))
+ (unless from
+ (setq from (mail-header-from message-reply-headers)))
+ (let* ((data (condition-case ()
+ (funcall (if (boundp gnus-extract-address-components)
+ gnus-extract-address-components
+ 'mail-extract-address-components)
+ from)
+ (error nil)))
+ (name (car data))
+ (fname name)
+ (lname name)
+ (net (car (cdr data)))
+ (name-or-net (or (car data)
+ (car (cdr data)) from))
+ (replydate
+ (or
+ date
+ ;; We need Gnus functionality if the user wants date or time from
+ ;; the original article:
+ (when (string-match "%[^fnNFL]" message-citation-line-format)
+ (autoload 'gnus-date-get-time "gnus-util")
+ (gnus-date-get-time (mail-header-date message-reply-headers)))))
+ (flist
+ (let ((i ?A) lst)
+ (when (stringp name)
+ ;; Guess first name and last name:
+ (cond ((string-match
+ "\\`\\(\\w\\|[-.]\\)+ \\(\\w\\|[-.]\\)+\\'" name)
+ (setq fname (nth 0 (split-string name "[ \t]+"))
+ lname (nth 1 (split-string name "[ \t]+"))))
+ ((string-match
+ "\\`\\(\\w\\|[-.]\\)+, \\(\\w\\|[-.]\\)+\\'" name)
+ (setq fname (nth 1 (split-string name "[ \t,]+"))
+ lname (nth 0 (split-string name "[ \t,]+"))))
+ ((string-match
+ "\\`\\(\\w\\|[-.]\\)+\\'" name)
+ (setq fname name
+ lname ""))))
+ ;; The following letters are not used in `format-time-string':
+ (push ?E lst) (push "<E>" lst)
+ (push ?F lst) (push fname lst)
+ ;; We might want to use "" instead of "<X>" later.
+ (push ?J lst) (push "<J>" lst)
+ (push ?K lst) (push "<K>" lst)
+ (push ?L lst) (push lname lst)
+ (push ?N lst) (push name-or-net lst)
+ (push ?O lst) (push "<O>" lst)
+ (push ?P lst) (push "<P>" lst)
+ (push ?Q lst) (push "<Q>" lst)
+ (push ?f lst) (push from lst)
+ (push ?i lst) (push "<i>" lst)
+ (push ?n lst) (push net lst)
+ (push ?o lst) (push "<o>" lst)
+ (push ?q lst) (push "<q>" lst)
+ (push ?t lst) (push "<t>" lst)
+ (push ?v lst) (push "<v>" lst)
+ ;; Delegate the rest to `format-time-string':
+ (while (<= i ?z)
+ (when (and (not (memq i lst))
+ ;; Skip (Z,a)
+ (or (<= i ?Z)
+ (>= i ?a)))
+ (push i lst)
+ (push (condition-case nil
+ (progn (format-time-string (format "%%%c" i)
+ replydate))
+ (format ">%c<" i))
+ lst))
+ (setq i (1+ i)))
+ (reverse lst)))
+ (spec (apply 'format-spec-make flist)))
+ (insert (format-spec message-citation-line-format spec)))
+ (newline)))
+
+(defun message-cite-original-without-signature ()
+ "Cite function in the standard Message manner.
+This function strips off the signature from the original message."
+ (message-cite-original-1 t))
(defun message-insert-citation-line ()
"Insert a simple citation line."
@@ -3548,6 +3879,7 @@ Instead, just auto-save the buffer and then bury it."
"Kill the current buffer."
(interactive)
(when (or (not (buffer-modified-p))
+ (not message-kill-buffer-query)
(yes-or-no-p "Message modified; kill anyway? "))
(let ((actions message-kill-actions)
(draft-article message-draft-article)
@@ -3640,6 +3972,9 @@ It should typically alter the sending method in some way or other."
(save-excursion
(run-hooks 'message-sent-hook))
(message "Sending...done")
+ ;; Do ecomplete address snarfing.
+ (when (message-mail-alias-type-p 'ecomplete)
+ (message-put-addresses-in-ecomplete))
;; Mark the buffer as unmodified and delete auto-save.
(set-buffer-modified-p nil)
(delete-auto-save-file-if-necessary t)
@@ -3667,16 +4002,37 @@ It should typically alter the sending method in some way or other."
(put 'message-check 'lisp-indent-function 1)
(put 'message-check 'edebug-form-spec '(form body))
-(defun message-text-with-property (prop)
- "Return a list of all points where the text has PROP."
- (let ((points nil)
- (point (point-min)))
- (save-excursion
- (while (< point (point-max))
- (when (get-text-property point prop)
- (push point points))
- (incf point)))
- (nreverse points)))
+(defun message-text-with-property (prop &optional start end reverse)
+ "Return a list of start and end positions where the text has PROP.
+START and END bound the search, they default to `point-min' and
+`point-max' respectively. If REVERSE is non-nil, find text which does
+not have PROP."
+ (unless start
+ (setq start (point-min)))
+ (unless end
+ (setq end (point-max)))
+ (let (next regions)
+ (if reverse
+ (while (and start
+ (setq start (text-property-any start end prop nil)))
+ (setq next (next-single-property-change start prop nil end))
+ (push (cons start (or next end)) regions)
+ (setq start next))
+ (while (and start
+ (or (get-text-property start prop)
+ (and (setq start (next-single-property-change
+ start prop nil end))
+ (get-text-property start prop))))
+ (setq next (text-property-any start end prop nil))
+ (push (cons start (or next end)) regions)
+ (setq start next)))
+ (nreverse regions)))
+
+(defcustom message-bogus-address-regexp nil ;; "noreply\\|nospam\\|invalid"
+ "Regexp of potentially bogus mail addresses."
+ :version "23.0" ;; No Gnus
+ :group 'message-headers
+ :type 'regexp)
(defun message-fix-before-sending ()
"Do various things to make the message nice before sending it."
@@ -3685,44 +4041,49 @@ It should typically alter the sending method in some way or other."
(unless (bolp)
(insert "\n"))
;; Make the hidden headers visible.
- (let ((points (message-text-with-property 'message-hidden)))
- (when points
- (goto-char (car points))
- (dolist (point points)
- (add-text-properties point (1+ point)
- '(invisible nil intangible nil)))))
+ (widen)
+ ;; Sort headers before sending the message.
+ (message-sort-headers)
;; Make invisible text visible.
;; It doesn't seem as if this is useful, since the invisible property
;; is clobbered by an after-change hook anyhow.
(message-check 'invisible-text
- (let ((points (message-text-with-property 'invisible)))
- (when points
- (goto-char (car points))
- (dolist (point points)
- (put-text-property point (1+ point) 'invisible nil)
- (message-overlay-put (message-make-overlay point (1+ point))
+ (let ((regions (message-text-with-property 'invisible))
+ from to)
+ (when regions
+ (while regions
+ (setq from (caar regions)
+ to (cdar regions)
+ regions (cdr regions))
+ (put-text-property from to 'invisible nil)
+ (message-overlay-put (message-make-overlay from to)
'face 'highlight))
(unless (yes-or-no-p
"Invisible text found and made visible; continue sending? ")
(error "Invisible text found and made visible")))))
(message-check 'illegible-text
- (let (found choice)
+ (let (char found choice)
(message-goto-body)
- (skip-chars-forward mm-7bit-chars)
- (while (not (eobp))
- (when (let ((char (char-after)))
- (or (< (mm-char-int char) 128)
- (and (mm-multibyte-p)
- (memq (char-charset char)
- '(eight-bit-control eight-bit-graphic
- control-1))
- (not (get-text-property
- (point) 'untranslated-utf-8)))))
+ (while (progn
+ (skip-chars-forward mm-7bit-chars)
+ (when (get-text-property (point) 'no-illegible-text)
+ ;; There is a signed or encrypted raw message part
+ ;; that is considered to be safe.
+ (goto-char (or (next-single-property-change
+ (point) 'no-illegible-text)
+ (point-max))))
+ (setq char (char-after)))
+ (when (or (< (mm-char-int char) 128)
+ (and (mm-multibyte-p)
+ (memq (char-charset char)
+ '(eight-bit-control eight-bit-graphic
+ control-1))
+ (not (get-text-property
+ (point) 'untranslated-utf-8))))
(message-overlay-put (message-make-overlay (point) (1+ (point)))
'face 'highlight)
(setq found t))
- (forward-char)
- (skip-chars-forward mm-7bit-chars))
+ (forward-char))
(when found
(setq choice
(gnus-multiple-choice
@@ -3755,7 +4116,54 @@ It should typically alter the sending method in some way or other."
(when (eq choice ?r)
(insert message-replacement-char))))
(forward-char)
- (skip-chars-forward mm-7bit-chars))))))
+ (skip-chars-forward mm-7bit-chars)))))
+ (message-check 'bogus-recipient
+ ;; Warn before composing or sending a mail to an invalid address.
+ (message-check-recipients)))
+
+(defun message-bogus-recipient-p (recipients)
+ "Check if a mail address in RECIPIENTS looks bogus.
+
+RECIPIENTS is a mail header. Return a list of potentially bogus
+addresses. If none is found, return nil.
+
+An addresses might be bogus if the domain part is not fully
+qualified, see `message-valid-fqdn-regexp', or if it matches
+`message-bogus-address-regexp'."
+ ;; FIXME: How about "foo@subdomain", when the MTA adds ".domain.tld"?
+ (let (found)
+ (mapc (lambda (address)
+ (setq address (cadr address))
+ (when
+ (or (not
+ (or
+ (not (string-match "@" address))
+ (string-match
+ (concat ".@.*\\("
+ message-valid-fqdn-regexp "\\)\\'") address)))
+ (and (stringp message-bogus-address-regexp)
+ (string-match message-bogus-address-regexp address)))
+ (push address found)))
+ ;;
+ (mail-extract-address-components recipients t))
+ found))
+
+(defun message-check-recipients ()
+ "Warn before composing or sending a mail to an invalid address.
+
+This function could be useful in `message-setup-hook'."
+ (interactive)
+ (save-restriction
+ (message-narrow-to-headers)
+ (dolist (hdr '("To" "Cc" "Bcc"))
+ (let ((addr (message-fetch-field hdr)))
+ (when (stringp addr)
+ (dolist (bog (message-bogus-recipient-p addr))
+ (and bog
+ (not (y-or-n-p
+ (format
+ "Address `%s' might be bogus. Continue? " bog)))
+ (error "Bogus address."))))))))
(defun message-add-action (action &rest types)
"Add ACTION to be performed when doing an exit of type TYPES."
@@ -3773,16 +4181,15 @@ It should typically alter the sending method in some way or other."
(defun message-do-actions (actions)
"Perform all actions in ACTIONS."
;; Now perform actions on successful sending.
- (while actions
+ (dolist (action actions)
(ignore-errors
(cond
;; A simple function.
- ((functionp (car actions))
- (funcall (car actions)))
+ ((functionp action)
+ (funcall action))
;; Something to be evaled.
(t
- (eval (car actions)))))
- (pop actions)))
+ (eval action))))))
(defun message-send-mail-partially ()
"Send mail as message/partial."
@@ -3867,6 +4274,15 @@ It should typically alter the sending method in some way or other."
(gnus-setup-posting-charset nil)
message-posting-charset))
(headers message-required-mail-headers))
+ (when (and message-generate-hashcash
+ (not (eq message-generate-hashcash 'opportunistic)))
+ (message "Generating hashcash...")
+ ;; Wait for calculations already started to finish...
+ (hashcash-wait-async)
+ ;; ...and do calculations not already done. mail-add-payment
+ ;; will leave existing X-Hashcash headers alone.
+ (mail-add-payment)
+ (message "Generating hashcash...done"))
(save-restriction
(message-narrow-to-headers)
;; Generate the Mail-Followup-To header if the header is not there...
@@ -4003,8 +4419,7 @@ If you always want Gnus to send messages in one piece, set
(when (eval message-mailer-swallows-blank-line)
(newline))
(when message-interactive
- (save-excursion
- (set-buffer errbuf)
+ (with-current-buffer errbuf
(erase-buffer))))
(let* ((default-directory "/")
(coding-system-for-write message-send-coding-system)
@@ -4022,6 +4437,7 @@ If you always want Gnus to send messages in one piece, set
"/usr/ucblib/sendmail")
(t "fakemail"))
nil errbuf nil "-oi")
+ message-sendmail-extra-arguments
;; Always specify who from,
;; since some systems have broken sendmails.
;; But some systems are more broken with -f, so
@@ -4045,7 +4461,7 @@ If you always want Gnus to send messages in one piece, set
(save-excursion
(set-buffer errbuf)
(goto-char (point-min))
- (while (re-search-forward "\n\n* *" nil t)
+ (while (re-search-forward "\n+ *" nil t)
(replace-match "; "))
(if (not (zerop (buffer-size)))
(error "Sending...failed to %s"
@@ -4086,9 +4502,9 @@ to find out how to use this."
;; free for -inject-arguments -- a big win for the user and for us
;; since we don't have to play that double-guessing game and the user
;; gets full control (no gestapo'ish -f's, for instance). --sj
- (if (functionp message-qmail-inject-args)
- (funcall message-qmail-inject-args)
- message-qmail-inject-args)))
+ (if (functionp message-qmail-inject-args)
+ (funcall message-qmail-inject-args)
+ message-qmail-inject-args)))
;; qmail-inject doesn't say anything on it's stdout/stderr,
;; we have to look at the retval instead
(0 nil)
@@ -4124,6 +4540,13 @@ manual for details."
(run-hooks 'message-send-mail-hook)
(smtpmail-send-it))
+(defun message-send-mail-with-mailclient ()
+ "Send the prepared message buffer with `mailclient-send-it'.
+This only differs from `smtpmail-send-it' that this command evaluates
+`message-send-mail-hook' just before sending a message."
+ (run-hooks 'message-send-mail-hook)
+ (mailclient-send-it))
+
(defun message-canlock-generate ()
"Return a string that is non-trivial to guess.
Do not use this for anything important, it is cryptographically weak."
@@ -4599,7 +5022,7 @@ Otherwise, generate and save a value for `canlock-password' first."
;; Check for control characters.
(message-check 'control-chars
(if (re-search-forward
- (mm-string-as-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]")
+ (mm-string-to-multibyte "[\000-\007\013\015-\032\034-\037\200-\237]")
nil t)
(y-or-n-p
"The article contains control characters. Really post? ")
@@ -4753,29 +5176,27 @@ Otherwise, generate and save a value for `canlock-password' first."
(when (re-search-forward ",+$" nil t)
(replace-match "" t t))))))
-(eval-when-compile (require 'parse-time))
(defun message-make-date (&optional now)
"Make a valid data header.
If NOW, use that time instead."
- (require 'parse-time)
- (let* ((now (or now (current-time)))
- (zone (nth 8 (decode-time now)))
- (sign "+"))
- (when (< zone 0)
- (setq sign "-")
- (setq zone (- zone)))
- (concat
- ;; The day name of the %a spec is locale-specific. Pfff.
- (format "%s, " (capitalize (car (rassoc (nth 6 (decode-time now))
- parse-time-weekdays))))
- (format-time-string "%d" now)
- ;; The month name of the %b spec is locale-specific. Pfff.
- (format " %s "
- (capitalize (car (rassoc (nth 4 (decode-time now))
- parse-time-months))))
- (format-time-string "%Y %H:%M:%S " now)
- ;; We do all of this because XEmacs doesn't have the %z spec.
- (format "%s%02d%02d" sign (/ zone 3600) (/ (% zone 3600) 60)))))
+ (let ((system-time-locale "C"))
+ (format-time-string "%a, %d %b %Y %T %z" now)))
+
+(defun message-insert-expires (days)
+ "Insert the Expires header. Expiry in DAYS days."
+ (interactive "NExpire article in how many days? ")
+ (save-excursion
+ (message-position-on-field "Expires" "X-Draft-From")
+ (insert (message-make-expires-date days))))
+
+(defun message-make-expires-date (days)
+ "Make date string for the Expires header. Expiry in DAYS days.
+
+In posting styles use `(\"Expires\" (make-expires-date 30))'."
+ (let* ((cur (decode-time (current-time)))
+ (nday (+ days (nth 3 cur))))
+ (setf (nth 3 cur) nday)
+ (message-make-date (apply 'encode-time cur))))
(defun message-make-message-id ()
"Make a unique Message-ID."
@@ -4940,14 +5361,14 @@ If NOW, use that time instead."
(concat message-user-path "!" login-name))
(t login-name))))
-(defun message-make-from ()
+(defun message-make-from (&optional name address)
"Make a From header."
(let* ((style message-from-style)
- (login (message-make-address))
- (fullname
- (or (and (boundp 'user-full-name)
- user-full-name)
- (user-full-name))))
+ (login (or address (message-make-address)))
+ (fullname (or name
+ (and (boundp 'user-full-name)
+ user-full-name)
+ (user-full-name))))
(when (string= fullname "&")
(setq fullname (user-login-name)))
(with-temp-buffer
@@ -4968,15 +5389,15 @@ If NOW, use that time instead."
(string-match "[\\()]" tmp)))))
(insert fullname)
(goto-char (point-min))
- ;; Look for a character that cannot appear unquoted
- ;; according to RFC 822.
- (when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1)
- ;; Quote fullname, escaping specials.
- (goto-char (point-min))
- (insert "\"")
- (while (re-search-forward "[\"\\]" nil 1)
- (replace-match "\\\\\\&" t))
- (insert "\""))
+ ;; Look for a character that cannot appear unquoted
+ ;; according to RFC 822.
+ (when (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]" nil 1)
+ ;; Quote fullname, escaping specials.
+ (goto-char (point-min))
+ (insert "\"")
+ (while (re-search-forward "[\"\\]" nil 1)
+ (replace-match "\\\\\\&" t))
+ (insert "\""))
(insert " <" login ">"))
(t ; 'parens or default
(insert login " (")
@@ -5279,19 +5700,21 @@ Headers already prepared in the buffer are not modified."
(if formatter
(funcall formatter header value)
(insert header-string ": " value))
+ (goto-char (message-fill-field))
;; We check whether the value was ended by a
- ;; newline. If now, we insert one.
+ ;; newline. If not, we insert one.
(unless (bolp)
(insert "\n"))
(forward-line -1)))
;; The value of this header was empty, so we clear
;; totally and insert the new value.
- (delete-region (point) (gnus-point-at-eol))
+ (delete-region (point) (point-at-eol))
;; If the header is optional, and the header was
- ;; empty, we con't insert it anyway.
+ ;; empty, we can't insert it anyway.
(unless optionalp
(push header-string message-inserted-headers)
- (insert value)))
+ (insert value)
+ (message-fill-field)))
;; Add the deletable property to the headers that require it.
(and (memq header message-deletable-headers)
(progn (beginning-of-line) (looking-at "[^:]+: "))
@@ -5347,35 +5770,29 @@ Headers already prepared in the buffer are not modified."
;;; Setting up a message buffer
;;;
+(defun message-skip-to-next-address ()
+ (let ((end (save-excursion
+ (message-next-header)
+ (point)))
+ quoted char)
+ (when (looking-at ",")
+ (forward-char 1))
+ (while (and (not (= (point) end))
+ (or (not (eq char ?,))
+ quoted))
+ (skip-chars-forward "^,\"" (point-max))
+ (when (eq (setq char (following-char)) ?\")
+ (setq quoted (not quoted)))
+ (unless (= (point) end)
+ (forward-char 1)))
+ (skip-chars-forward " \t\n")))
+
(defun message-fill-address (header value)
- (save-restriction
- (narrow-to-region (point) (point))
- (insert (capitalize (symbol-name header))
- ": "
- (if (consp value) (car value) value)
- "\n")
- (narrow-to-region (point-min) (1- (point-max)))
- (let (quoted last)
- (goto-char (point-min))
- (while (not (eobp))
- (skip-chars-forward "^,\"" (point-max))
- (if (or (eq (char-after) ?,)
- (eobp))
- (when (not quoted)
- (if (and (> (current-column) 78)
- last)
- (progn
- (save-excursion
- (goto-char last)
- (insert "\n\t"))
- (setq last (1+ (point))))
- (setq last (1+ (point)))))
- (setq quoted (not quoted)))
- (unless (eobp)
- (forward-char 1))))
- (goto-char (point-max))
- (widen)
- (forward-line 1)))
+ (insert (capitalize (symbol-name header))
+ ": "
+ (if (consp value) (car value) value)
+ "\n")
+ (message-fill-field-address))
(defun message-split-line ()
"Split current line, moving portion beyond point vertically down.
@@ -5386,26 +5803,56 @@ If the current line has `message-yank-prefix', insert it on the new line."
(error
(split-line))))
-(defun message-fill-header (header value)
+(defun message-insert-header (header value)
+ (insert (capitalize (symbol-name header))
+ ": "
+ (if (consp value) (car value) value)))
+
+(defun message-field-name ()
+ (save-excursion
+ (goto-char (point-min))
+ (when (looking-at "\\([^:]+\\):")
+ (intern (capitalize (match-string 1))))))
+
+(defun message-fill-field ()
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-field)
+ (let ((field-name (message-field-name)))
+ (funcall (or (cadr (assq field-name message-field-fillers))
+ 'message-fill-field-general)))
+ (point-max))))
+
+(defun message-fill-field-address ()
+ (while (not (eobp))
+ (message-skip-to-next-address)
+ (let (last)
+ (if (and (> (current-column) 78)
+ last)
+ (progn
+ (save-excursion
+ (goto-char last)
+ (insert "\n\t"))
+ (setq last (1+ (point))))
+ (setq last (1+ (point)))))))
+
+(defun message-fill-field-general ()
(let ((begin (point))
(fill-column 78)
(fill-prefix "\t"))
- (insert (capitalize (symbol-name header))
- ": "
- (if (consp value) (car value) value)
- "\n")
- (save-restriction
- (narrow-to-region begin (point))
- (fill-region-as-paragraph begin (point))
- ;; Tapdance around looong Message-IDs.
- (forward-line -1)
- (when (looking-at "[ \t]*$")
- (message-delete-line))
- (goto-char begin)
- (re-search-forward ":" nil t)
- (when (looking-at "\n[ \t]+")
- (replace-match " " t t))
- (goto-char (point-max)))))
+ (while (and (search-forward "\n" nil t)
+ (not (eobp)))
+ (replace-match " " t t))
+ (fill-region-as-paragraph begin (point-max))
+ ;; Tapdance around looong Message-IDs.
+ (forward-line -1)
+ (when (looking-at "[ \t]*$")
+ (message-delete-line))
+ (goto-char begin)
+ (search-forward ":" nil t)
+ (when (looking-at "\n[ \t]+")
+ (replace-match " " t t))
+ (goto-char (point-max))))
(defun message-shorten-1 (list cut surplus)
"Cut SURPLUS elements out of LIST, beginning with CUTth one."
@@ -5414,8 +5861,9 @@ If the current line has `message-yank-prefix', insert it on the new line."
(defun message-shorten-references (header references)
"Trim REFERENCES to be 21 Message-ID long or less, and fold them.
-If folding is disallowed, also check that the REFERENCES are less
-than 988 characters long, and if they are not, trim them until they are."
+When sending via news, also check that the REFERENCES are less
+than 988 characters long, and if they are not, trim them until
+they are."
(let ((maxcount 21)
(count 0)
(cut 2)
@@ -5437,33 +5885,26 @@ than 988 characters long, and if they are not, trim them until they are."
(message-shorten-1 refs cut surplus)
(decf count surplus)))
- ;; If folding is disallowed, make sure the total length (including
- ;; the spaces between) will be less than MAXSIZE characters.
+ ;; When sending via news, make sure the total folded length will
+ ;; be less than 998 characters. This is to cater to broken INN
+ ;; 2.3 which counts the total number of characters in a header
+ ;; rather than the physical line length of each line, as it should.
;;
- ;; Only disallow folding for News messages. At this point the headers
- ;; have not been generated, thus we use message-this-is-news directly.
- (when (and message-this-is-news message-cater-to-broken-inn)
- (let ((maxsize 988)
- (totalsize (+ (apply #'+ (mapcar #'length refs))
- (1- count)))
- (surplus 0)
- (ptr (nthcdr (1- cut) refs)))
- ;; Decide how many elements to cut off...
- (while (> totalsize maxsize)
- (decf totalsize (1+ (length (car ptr))))
- (incf surplus)
- (setq ptr (cdr ptr)))
- ;; ...and do it.
- (when (> surplus 0)
- (message-shorten-1 refs cut surplus))))
-
+ ;; This hack should be removed when it's believed than INN 2.3 is
+ ;; no longer widely used.
+ ;;
+ ;; At this point the headers have not been generated, thus we use
+ ;; message-this-is-news directly.
+ (when message-this-is-news
+ (while (< 998
+ (with-temp-buffer
+ (message-insert-header
+ header (mapconcat #'identity refs " "))
+ (buffer-size)))
+ (message-shorten-1 refs cut 1)))
;; Finally, collect the references back into a string and insert
;; it into the buffer.
- (let ((refstring (mapconcat #'identity refs " ")))
- (if (and message-this-is-news message-cater-to-broken-inn)
- (insert (capitalize (symbol-name header)) ": "
- refstring "\n")
- (message-fill-header header refstring)))))
+ (message-insert-header header (mapconcat #'identity refs " "))))
(defun message-position-point ()
"Move point to where the user probably wants to find it."
@@ -5513,7 +5954,7 @@ between beginning of field and beginning of line."
(message-point-in-header-p))
(let* ((here (point))
(bol (progn (beginning-of-line n) (point)))
- (eol (gnus-point-at-eol))
+ (eol (point-at-eol))
(eoh (re-search-forward ": *" eol t)))
(goto-char
(if (and eoh (or (< eoh here) (= bol here)))
@@ -5726,12 +6167,7 @@ are not included."
(when message-default-headers
(insert message-default-headers)
(or (bolp) (insert ?\n)))
- (put-text-property
- (point)
- (progn
- (insert mail-header-separator "\n")
- (1- (point)))
- 'read-only nil)
+ (insert mail-header-separator "\n")
(forward-line -1)
(when (message-news-p)
(when message-default-news-headers
@@ -5762,6 +6198,9 @@ are not included."
(run-hooks 'message-header-setup-hook))
(set-buffer-modified-p nil)
(setq buffer-undo-list nil)
+ (when message-generate-hashcash
+ ;; Generate hashcash headers for recipients already known
+ (mail-add-payment-async))
(run-hooks 'message-setup-hook)
;; Do this last to give it precedence over posting styles, etc.
(when (message-mail-p)
@@ -5864,8 +6303,8 @@ is a function used to switch to and display the mail buffer."
(Subject . ,(or subject ""))))))
(defun message-get-reply-headers (wide &optional to-address address-headers)
- (let (follow-to mct never-mct to cc author mft recipients)
- ;; Find all relevant headers we need.
+ (let (follow-to mct never-mct to cc author mft recipients extra)
+ ;; Find all relevant headers we need.
(save-restriction
(message-narrow-to-headers-or-head)
;; Gmane renames "To". Look at "Original-To", too, if it is present in
@@ -5876,6 +6315,11 @@ is a function used to switch to and display the mail buffer."
return t)
(message-fetch-field "original-to")))
cc (message-fetch-field "cc")
+ extra (when message-extra-wide-headers
+ (mapconcat 'identity
+ (mapcar 'message-fetch-field
+ message-extra-wide-headers)
+ ", "))
mct (message-fetch-field "mail-copies-to")
author (or (message-fetch-field "mail-reply-to")
(message-fetch-field "reply-to")
@@ -5938,8 +6382,9 @@ want to get rid of this query permanently.")))
(if mct (setq recipients (concat recipients ", " mct))))
(t
(setq recipients (if never-mct "" (concat ", " author)))
- (if to (setq recipients (concat recipients ", " to)))
- (if cc (setq recipients (concat recipients ", " cc)))
+ (if to (setq recipients (concat recipients ", " to)))
+ (if cc (setq recipients (concat recipients ", " cc)))
+ (if extra (setq recipients (concat recipients ", " extra)))
(if mct (setq recipients (concat recipients ", " mct)))))
(if (>= (length recipients) 2)
;; Strip the leading ", ".
@@ -5948,7 +6393,7 @@ want to get rid of this query permanently.")))
(while (string-match "[ \t][ \t]+" recipients)
(setq recipients (replace-match " " t t recipients)))
;; Remove addresses that match `rmail-dont-reply-to-names'.
- (let ((rmail-dont-reply-to-names message-dont-reply-to-names))
+ (let ((rmail-dont-reply-to-names (message-dont-reply-to-names)))
(setq recipients (rmail-dont-reply-to recipients)))
;; Perhaps "Mail-Copies-To: never" removed the only address?
(if (string-equal recipients "")
@@ -6233,16 +6678,16 @@ regexp to match all of yours addresses."
;; Email address in From field equals to our address
(and (setq from (message-fetch-field "from"))
(string-equal
- (downcase (cadr (mail-extract-address-components from)))
- (downcase (cadr (mail-extract-address-components
- (message-make-from))))))
+ (downcase (car (mail-header-parse-address from)))
+ (downcase (car (mail-header-parse-address
+ (message-make-from))))))
;; Email address in From field matches
;; 'message-alternative-emails' regexp
(and from
message-alternative-emails
(string-match
message-alternative-emails
- (cadr (mail-extract-address-components from))))))))))
+ (car (mail-header-parse-address from))))))))))
;;;###autoload
(defun message-cancel-news (&optional arg)
@@ -6382,7 +6827,9 @@ news, Source is the list of newsgroups is was posted to."
(prefix
(if group
(gnus-group-decoded-name group)
- (or (and from (car (gnus-extract-address-components from)))
+ (or (and from (or
+ (car (gnus-extract-address-components from))
+ (cadr (gnus-extract-address-components from))))
"(nowhere)"))))
(concat "["
(if message-forward-decoded-p
@@ -6428,22 +6875,20 @@ the message."
subject
(mail-decode-encoded-word-string subject))
""))
- (if message-wash-forwarded-subjects
- (setq subject (message-wash-subject subject)))
+ (when message-wash-forwarded-subjects
+ (setq subject (message-wash-subject subject)))
;; Make sure funcs is a list.
(and funcs
(not (listp funcs))
(setq funcs (list funcs)))
;; Apply funcs in order, passing subject generated by previous
;; func to the next one.
- (while funcs
- (when (functionp (car funcs))
- (setq subject (funcall (car funcs) subject)))
- (setq funcs (cdr funcs)))
+ (dolist (func funcs)
+ (when (functionp func)
+ (setq subject (funcall func subject))))
subject))))
-(eval-when-compile
- (defvar gnus-article-decoded-p))
+(defvar gnus-article-decoded-p)
;;;###autoload
@@ -6482,17 +6927,24 @@ Optional DIGEST will use digest to forward."
(setq e (point))
(insert
"\n-------------------- End of forwarded message --------------------\n")
- (when message-forward-ignored-headers
- (save-restriction
- (narrow-to-region b e)
- (goto-char b)
- (narrow-to-region (point)
- (or (search-forward "\n\n" nil t) (point)))
- (message-remove-header message-forward-ignored-headers t)))))
+ (message-remove-ignored-headers b e)))
+
+(defun message-remove-ignored-headers (b e)
+ (when message-forward-ignored-headers
+ (save-restriction
+ (narrow-to-region b e)
+ (goto-char b)
+ (narrow-to-region (point)
+ (or (search-forward "\n\n" nil t) (point)))
+ (let ((ignored (if (stringp message-forward-ignored-headers)
+ (list message-forward-ignored-headers)
+ message-forward-ignored-headers)))
+ (dolist (elem ignored)
+ (message-remove-header elem t))))))
(defun message-forward-make-body-mime (forward-buffer)
- (insert "\n\n<#part type=message/rfc822 disposition=inline raw=t>\n")
- (let ((b (point)) e)
+ (let ((b (point)))
+ (insert "\n\n<#part type=message/rfc822 disposition=inline raw=t>\n")
(save-restriction
(narrow-to-region (point) (point))
(mml-insert-buffer forward-buffer)
@@ -6500,8 +6952,11 @@ Optional DIGEST will use digest to forward."
(when (looking-at "From ")
(replace-match "X-From-Line: "))
(goto-char (point-max)))
- (setq e (point))
- (insert "<#/part>\n")))
+ (insert "<#/part>\n")
+ ;; Consider there is no illegible text.
+ (add-text-properties
+ b (point)
+ `(no-illegible-text t rear-nonsticky t start-open t))))
(defun message-forward-make-body-mml (forward-buffer)
(insert "\n\n<#mml type=message/rfc822 disposition=inline>\n")
@@ -6530,12 +6985,7 @@ Optional DIGEST will use digest to forward."
(insert "<#/mml>\n")
(when (and (not message-forward-decoded-p)
message-forward-ignored-headers)
- (save-restriction
- (narrow-to-region b e)
- (goto-char b)
- (narrow-to-region (point)
- (or (search-forward "\n\n" nil t) (point)))
- (message-remove-header message-forward-ignored-headers t)))))
+ (message-remove-ignored-headers b e))))
(defun message-forward-make-body-digest-plain (forward-buffer)
(insert
@@ -6564,6 +7014,62 @@ Optional DIGEST will use digest to forward."
(message-forward-make-body-digest-mime forward-buffer)
(message-forward-make-body-digest-plain forward-buffer)))
+(eval-and-compile
+ (autoload 'mm-uu-dissect-text-parts "mm-uu")
+ (autoload 'mm-uu-dissect "mm-uu"))
+
+(defun message-signed-or-encrypted-p (&optional dont-emulate-mime handles)
+ "Say whether the current buffer contains signed or encrypted message.
+If DONT-EMULATE-MIME is nil, this function does the MIME emulation on
+messages that don't conform to PGP/MIME described in RFC2015. HANDLES
+is for the internal use."
+ (unless handles
+ (let ((mm-decrypt-option 'never)
+ (mm-verify-option 'never))
+ (if (setq handles (mm-dissect-buffer nil t))
+ (unless dont-emulate-mime
+ (mm-uu-dissect-text-parts handles))
+ (unless dont-emulate-mime
+ (setq handles (mm-uu-dissect))))))
+ ;; Check text/plain message in which there is a signed or encrypted
+ ;; body that has been encoded by B or Q.
+ (unless (or handles dont-emulate-mime)
+ (let ((cur (current-buffer))
+ (mm-decrypt-option 'never)
+ (mm-verify-option 'never))
+ (with-temp-buffer
+ (insert-buffer-substring cur)
+ (when (setq handles (mm-dissect-buffer t t))
+ (if (and (prog1
+ (bufferp (car handles))
+ (mm-destroy-parts handles))
+ (equal (mm-handle-media-type handles) "text/plain"))
+ (progn
+ (mm-decode-content-transfer-encoding
+ (mm-handle-encoding handles))
+ (setq handles (mm-uu-dissect)))
+ (setq handles nil))))))
+ (when handles
+ (prog1
+ (catch 'found
+ (dolist (handle (if (stringp (car handles))
+ (if (member (car handles)
+ '("multipart/signed"
+ "multipart/encrypted"))
+ (throw 'found t)
+ (cdr handles))
+ (list handles)))
+ (if (stringp (car handle))
+ (when (message-signed-or-encrypted-p dont-emulate-mime handle)
+ (throw 'found t))
+ (when (and (bufferp (car handle))
+ (equal (mm-handle-media-type handle)
+ "message/rfc822"))
+ (with-current-buffer (mm-handle-buffer handle)
+ (when (message-signed-or-encrypted-p dont-emulate-mime)
+ (throw 'found t)))))))
+ (mm-destroy-parts handles))))
+
;;;###autoload
(defun message-forward-make-body (forward-buffer &optional digest)
;; Put point where we want it before inserting the forwarded
@@ -6576,11 +7082,13 @@ Optional DIGEST will use digest to forward."
(if message-forward-as-mime
(if (and message-forward-show-mml
(not (and (eq message-forward-show-mml 'best)
+ ;; Use the raw form in the body if it contains
+ ;; signed or encrypted message so as not to be
+ ;; destroyed by re-encoding.
(with-current-buffer forward-buffer
- (goto-char (point-min))
- (re-search-forward
- "Content-Type: *multipart/\\(signed\\|encrypted\\)"
- nil t)))))
+ (condition-case nil
+ (message-signed-or-encrypted-p)
+ (error t))))))
(message-forward-make-body-mml forward-buffer)
(message-forward-make-body-mime forward-buffer))
(message-forward-make-body-plain forward-buffer)))
@@ -6590,14 +7098,10 @@ Optional DIGEST will use digest to forward."
(defun message-forward-rmail-make-body (forward-buffer)
(save-window-excursion
(set-buffer forward-buffer)
- ;; Rmail doesn't have rmail-msg-restore-non-pruned-header in Emacs
- ;; 20. FIXIT, or we drop support for rmail in Emacs 20.
(if (rmail-msg-is-pruned)
(rmail-msg-restore-non-pruned-header)))
(message-forward-make-body forward-buffer))
-(eval-when-compile (defvar rmail-enable-mime-composing))
-
;; Fixme: Should have defcustom.
;;;###autoload
(defun message-insinuate-rmail ()
@@ -6621,6 +7125,7 @@ Optional DIGEST will use digest to forward."
(set-buffer (get-buffer-create " *message resend*"))
(erase-buffer))
(let ((message-this-is-mail t)
+ message-generate-hashcash
message-setup-hook)
(message-setup `((To . ,address))))
;; Insert our usual headers.
@@ -6658,6 +7163,7 @@ Optional DIGEST will use digest to forward."
;; Send it.
(let ((message-inhibit-body-encoding t)
message-required-mail-headers
+ message-generate-hashcash
rfc2047-encode-encoded-words)
(message-send-mail))
(kill-buffer (current-buffer)))
@@ -6772,7 +7278,7 @@ you."
;; This code should be moved to underline.el (from which it is stolen).
;;;###autoload
-(defun bold-region (start end)
+(defun message-bold-region (start end)
"Bold all nonblank characters in the region.
Works by overstriking characters.
Called from program, takes two arguments START and END
@@ -6788,7 +7294,7 @@ which specify the range to operate on."
(forward-char 1)))))
;;;###autoload
-(defun unbold-region (start end)
+(defun message-unbold-region (start end)
"Remove all boldness (overstruck characters) in the region.
Called from program, takes two arguments START and END
which specify the range to operate on."
@@ -6797,7 +7303,7 @@ which specify the range to operate on."
(let ((end1 (make-marker)))
(move-marker end1 (max start end))
(goto-char (min start end))
- (while (re-search-forward "\b" end1 t)
+ (while (search-forward "\b" end1 t)
(if (eq (char-after) (char-after (- (point) 2)))
(delete-char -2))))))
@@ -6817,8 +7323,7 @@ which specify the range to operate on."
(mapcar #'delete-overlay (overlays-in (point-min) (point-max)))))
;; Support for toolbar
-(eval-when-compile
- (defvar tool-bar-mode))
+(defvar tool-bar-mode)
;; Note: The :set function in the `message-tool-bar*' variables will only
;; affect _new_ message buffers. We might add a function that walks thru all
@@ -6847,7 +7352,7 @@ Pre-defined symbols include `message-tool-bar-gnome' and
(const :tag "Retro look" message-tool-bar-retro)
(repeat :tag "User defined list" gmm-tool-bar-item)
(symbol))
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
@@ -6866,7 +7371,7 @@ Pre-defined symbols include `message-tool-bar-gnome' and
(message-kill-buffer "close") ;; stock_cancel
(mml-attach-file "attach" mml-mode-map)
(mml-preview "mail/preview" mml-mode-map)
- ;; (mml-secure-message-sign-encrypt "lock" mml-mode-map :visible nil)
+ (mml-secure-message-sign-encrypt "lock" mml-mode-map :visible nil)
(message-insert-importance-high "important" nil :visible nil)
(message-insert-importance-low "unimportant" nil :visible nil)
(message-insert-disposition-notification-to "receipt" nil :visible nil)
@@ -6876,7 +7381,7 @@ Pre-defined symbols include `message-tool-bar-gnome' and
See `gmm-tool-bar-from-list' for details on the format of the list."
:type '(repeat gmm-tool-bar-item)
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
@@ -6896,7 +7401,7 @@ See `gmm-tool-bar-from-list' for details on the format of the list."
See `gmm-tool-bar-from-list' for details on the format of the list."
:type '(repeat gmm-tool-bar-item)
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
@@ -6909,7 +7414,7 @@ These items are not displayed on the message mode tool bar.
See `gmm-tool-bar-from-list' for the format of the list."
:type 'gmm-tool-bar-zap-list
- :version "22.1" ;; Gnus 5.10.9
+ :version "23.0" ;; No Gnus
:initialize 'custom-initialize-default
:set 'message-tool-bar-update
:group 'message)
@@ -6956,6 +7461,13 @@ When FORCE, rebuild the tool bar."
:group 'message
:type '(alist :key-type regexp :value-type function))
+(defcustom message-expand-name-databases
+ (list 'bbdb 'eudc)
+ "List of databases to try for name completion (`message-expand-name').
+Each element is a symbol and can be `bbdb' or `eudc'."
+ :group 'message
+ :type '(set (const bbdb) (const eudc)))
+
(defcustom message-tab-body-function nil
"*Function to execute when `message-tab' (TAB) is executed in the body.
If nil, the function bound in `text-mode-map' or `global-map' is executed."
@@ -7036,9 +7548,15 @@ those headers."
(delete-region (point) (progn (forward-line 3) (point))))))))))
(defun message-expand-name ()
- (if (fboundp 'bbdb-complete-name)
- (bbdb-complete-name)
- (expand-abbrev)))
+ (cond ((and (memq 'eudc message-expand-name-databases)
+ (boundp 'eudc-protocol)
+ eudc-protocol)
+ (eudc-expand-inline))
+ ((and (memq 'bbdb message-expand-name-databases)
+ (fboundp 'bbdb-complete-name))
+ (bbdb-complete-name))
+ (t
+ (expand-abbrev))))
;;; Help stuff.
@@ -7053,7 +7571,7 @@ The following arguments may contain lists of values."
(with-output-to-temp-buffer " *MESSAGE information message*"
(set-buffer " *MESSAGE information message*")
(fundamental-mode) ; for Emacs 20.4+
- (mapcar 'princ text)
+ (mapc 'princ text)
(goto-char (point-min))))
(funcall ask question))
(funcall ask question)))
@@ -7219,7 +7737,8 @@ From headers in the original article."
(list message-hidden-headers)
message-hidden-headers))
(inhibit-point-motion-hooks t)
- (after-change-functions nil))
+ (after-change-functions nil)
+ (end-of-headers (point-min)))
(when regexps
(save-excursion
(save-restriction
@@ -7228,11 +7747,17 @@ From headers in the original article."
(while (not (eobp))
(if (not (message-hide-header-p regexps))
(message-next-header)
- (let ((begin (point)))
+ (let ((begin (point))
+ header header-len)
(message-next-header)
- (add-text-properties
- begin (point)
- '(invisible t message-hidden t))))))))))
+ (setq header (buffer-substring begin (point))
+ header-len (- (point) begin))
+ (delete-region begin (point))
+ (goto-char end-of-headers)
+ (insert header)
+ (setq end-of-headers
+ (+ end-of-headers header-len))))))))
+ (narrow-to-region end-of-headers (point-max))))
(defun message-hide-header-p (regexps)
(let ((result nil)
@@ -7246,6 +7771,39 @@ From headers in the original article."
(not result)
result)))
+(defun message-put-addresses-in-ecomplete ()
+ (dolist (header '("to" "cc" "from" "reply-to"))
+ (let ((value (message-field-value header)))
+ (dolist (string (mail-header-parse-addresses value 'raw))
+ (setq string
+ (gnus-replace-in-string
+ (gnus-replace-in-string string "^ +\\| +$" "") "\n" ""))
+ (ecomplete-add-item 'mail (car (mail-header-parse-address string))
+ string))))
+ (ecomplete-save))
+
+(defun message-display-abbrev (&optional choose)
+ "Display the next possible abbrev for the text before point."
+ (interactive (list t))
+ (when (and (memq (char-after (point-at-bol)) '(?C ?T ?\t ? ))
+ (message-point-in-header-p)
+ (save-excursion
+ (beginning-of-line)
+ (while (and (memq (char-after) '(?\t ? ))
+ (zerop (forward-line -1))))
+ (looking-at "To:\\|Cc:")))
+ (let* ((end (point))
+ (start (save-excursion
+ (and (re-search-backward "[\n\t ]" nil t)
+ (1+ (point)))))
+ (word (when start (buffer-substring start end)))
+ (match (when (and word
+ (not (zerop (length word))))
+ (ecomplete-display-matches 'mail word choose))))
+ (when (and choose match)
+ (delete-region start end)
+ (insert match)))))
+
(when (featurep 'xemacs)
(require 'messagexmas)
(message-xmas-redefine))
diff --git a/lisp/gnus/mm-bodies.el b/lisp/gnus/mm-bodies.el
index 0872008e48d..557bd132ed5 100644
--- a/lisp/gnus/mm-bodies.el
+++ b/lisp/gnus/mm-bodies.el
@@ -26,18 +26,14 @@
;;; Code:
-(eval-and-compile
- (or (fboundp 'base64-decode-region)
- (require 'base64)))
-
-(eval-when-compile
- (defvar mm-uu-decode-function)
- (defvar mm-uu-binhex-decode-function))
-
(require 'mm-util)
(require 'rfc2047)
(require 'mm-encode)
+(defvar mm-uu-yenc-decode-function)
+(defvar mm-uu-decode-function)
+(defvar mm-uu-binhex-decode-function)
+
;; 8bit treatment gets any char except: 0x32 - 0x7f, LF, TAB, BEL,
;; BS, vertical TAB, form feed, and ^_
;;
@@ -175,8 +171,6 @@ If no encoding was done, nil is returned."
;;; Functions for decoding
;;;
-(eval-when-compile (defvar mm-uu-yenc-decode-function))
-
(defun mm-decode-content-transfer-encoding (encoding &optional type)
"Decodes buffer encoded with ENCODING, returning success status.
If TYPE is `text/plain' CRLF->LF translation may occur."
diff --git a/lisp/gnus/mm-decode.el b/lisp/gnus/mm-decode.el
index f8de1a77f71..71ef9bcdf55 100644
--- a/lisp/gnus/mm-decode.el
+++ b/lisp/gnus/mm-decode.el
@@ -33,7 +33,6 @@
(require 'term))
(eval-and-compile
- (autoload 'executable-find "executable")
(autoload 'mm-inline-partial "mm-partial")
(autoload 'mm-inline-external-body "mm-extern")
(autoload 'mm-extern-cache-contents "mm-extern")
@@ -231,6 +230,7 @@ before the external MIME handler is invoked."
(fboundp 'diff-mode)))
("application/emacs-lisp" mm-display-elisp-inline identity)
("application/x-emacs-lisp" mm-display-elisp-inline identity)
+ ("text/dns" mm-display-dns-inline identity)
("text/html"
mm-inline-text-html
(lambda (handle)
@@ -299,9 +299,9 @@ when selecting a different article."
:group 'mime-display)
(defcustom mm-automatic-display
- '("text/plain" "text/enriched" "text/richtext" "text/html"
+ '("text/plain" "text/enriched" "text/richtext" "text/html" "text/x-verbatim"
"text/x-vcard" "image/.*" "message/delivery-status" "multipart/.*"
- "message/rfc822" "text/x-patch" "application/pgp-signature"
+ "message/rfc822" "text/x-patch" "text/dns" "application/pgp-signature"
"application/emacs-lisp" "application/x-emacs-lisp"
"application/x-pkcs7-signature"
"application/pkcs7-signature" "application/x-pkcs7-mime"
@@ -364,20 +364,34 @@ enables you to choose manually one of two types those mails include."
:type 'boolean
:group 'mime-display)
-(defvar mm-file-name-rewrite-functions
+(defcustom mm-file-name-rewrite-functions
'(mm-file-name-delete-control mm-file-name-delete-gotchas)
- "*List of functions used for rewriting file names of MIME parts.
+ "List of functions used for rewriting file names of MIME parts.
Each function takes a file name as input and returns a file name.
-Ready-made functions include
-`mm-file-name-delete-control'
-`mm-file-name-delete-gotchas'
-`mm-file-name-delete-whitespace',
-`mm-file-name-trim-whitespace',
-`mm-file-name-collapse-whitespace',
-`mm-file-name-replace-whitespace',
-`capitalize', `downcase', `upcase', and
-`upcase-initials'.")
+Ready-made functions include `mm-file-name-delete-control',
+`mm-file-name-delete-gotchas' (you should not remove these two
+functions), `mm-file-name-delete-whitespace',
+`mm-file-name-trim-whitespace', `mm-file-name-collapse-whitespace',
+`mm-file-name-replace-whitespace', `capitalize', `downcase',
+`upcase', and `upcase-initials'."
+ :type '(list (set :inline t
+ (const mm-file-name-delete-control)
+ (const mm-file-name-delete-gotchas)
+ (const mm-file-name-delete-whitespace)
+ (const mm-file-name-trim-whitespace)
+ (const mm-file-name-collapse-whitespace)
+ (const mm-file-name-replace-whitespace)
+ (const capitalize)
+ (const downcase)
+ (const upcase)
+ (const upcase-initials)
+ (repeat :inline t
+ :tag "Function"
+ function)))
+ :version "23.0" ;; No Gnus
+ :group 'mime-display)
+
(defvar mm-path-name-rewrite-functions nil
"*List of functions for rewriting the full file names of MIME parts.
@@ -436,7 +450,11 @@ If not set, `default-directory' will be used."
(defcustom mm-verify-option 'never
"Option of verifying signed parts.
`never', not verify; `always', always verify;
-`known', only verify known protocols. Otherwise, ask user."
+`known', only verify known protocols. Otherwise, ask user.
+
+When set to `always' or `known', you should add
+\"multipart/signed\" to `gnus-buttonized-mime-types' to see
+result of the verification."
:version "22.1"
:type '(choice (item always)
(item never)
@@ -548,15 +566,11 @@ Postpone undisplaying of viewers for types in
;; solution, avoids most of them.
(if from
(setq from (cadr (mail-extract-address-components from))))))
- (when cte
- (setq cte (mail-header-strip cte)))
(if (or (not ctl)
(not (string-match "/" (car ctl))))
(mm-dissect-singlepart
(list mm-dissect-default-type)
- (and cte (intern (downcase (mail-header-remove-whitespace
- (mail-header-remove-comments
- cte)))))
+ (and cte (intern (downcase (mail-header-strip cte))))
no-strict-mime
(and cd (mail-header-parse-content-disposition cd))
description)
@@ -589,9 +603,7 @@ Postpone undisplaying of viewers for types in
(mm-possibly-verify-or-decrypt
(mm-dissect-singlepart
ctl
- (and cte (intern (downcase (mail-header-remove-whitespace
- (mail-header-remove-comments
- cte)))))
+ (and cte (intern (downcase (mail-header-strip cte))))
no-strict-mime
(and cd (mail-header-parse-content-disposition cd))
description id)
@@ -883,7 +895,7 @@ external if displayed external."
;; a vector in Emacs but is a list in XEmacs)
;; requires that it is lexically scoped.
(timer (run-at-time 2.0 nil 'ignore)))
- (if (boundp 'itimer-list)
+ (if (featurep 'xemacs)
(lambda (process state)
(when (eq 'exit (process-status process))
(if (memq timer itimer-list)
@@ -922,16 +934,16 @@ external if displayed external."
(string= total "'%s'")
(string= total "\"%s\""))
(setq uses-stdin nil)
- (push (mm-quote-arg
+ (push (shell-quote-argument
(gnus-map-function mm-path-name-rewrite-functions file)) out))
((string= total "%t")
- (push (mm-quote-arg (car type-list)) out))
+ (push (shell-quote-argument (car type-list)) out))
(t
- (push (mm-quote-arg (or (cdr (assq (intern sub) ctl)) "")) out))))
+ (push (shell-quote-argument (or (cdr (assq (intern sub) ctl)) "")) out))))
(push (substring method beg (length method)) out)
(when uses-stdin
(push "<" out)
- (push (mm-quote-arg
+ (push (shell-quote-argument
(gnus-map-function mm-path-name-rewrite-functions file))
out))
(mapconcat 'identity (nreverse out) "")))
@@ -1136,16 +1148,26 @@ are ignored."
"Insert the contents of HANDLE in the current buffer.
If NO-CACHE is non-nil, cached contents of a message/external-body part
are ignored."
- (save-excursion
- (insert
- (cond ((eq (mail-content-type-get (mm-handle-type handle) 'charset)
- 'gnus-decoded)
- (with-current-buffer (mm-handle-buffer handle)
- (buffer-string)))
- ((mm-multibyte-p)
- (mm-string-to-multibyte (mm-get-part handle no-cache)))
- (t
- (mm-get-part handle no-cache))))))
+ (let ((text (cond ((eq (mail-content-type-get (mm-handle-type handle)
+ 'charset)
+ 'gnus-decoded)
+ (with-current-buffer (mm-handle-buffer handle)
+ (buffer-string)))
+ ((mm-multibyte-p)
+ (mm-string-to-multibyte (mm-get-part handle no-cache)))
+ (t
+ (mm-get-part handle no-cache)))))
+ (save-restriction
+ (widen)
+ (goto-char
+ (prog1
+ (point)
+ (if (and (eq (get-char-property (max (point-min) (1- (point))) 'face)
+ 'mm-uu-extract)
+ (eq (get-char-property 0 'face text) 'mm-uu-extract))
+ ;; Separate the extracted parts that have the same faces.
+ (insert "\n" text)
+ (insert text)))))))
(defun mm-file-name-delete-whitespace (file-name)
"Remove all whitespace characters from FILE-NAME."
@@ -1185,8 +1207,9 @@ string if you do not like underscores."
(setq filename (gnus-replace-in-string filename "[<>|]" ""))
(gnus-replace-in-string filename "^[.-]+" ""))
-(defun mm-save-part (handle)
- "Write HANDLE to a file."
+(defun mm-save-part (handle &optional prompt)
+ "Write HANDLE to a file.
+PROMPT overrides the default one used to ask user for a file name."
(let ((filename (or (mail-content-type-get
(mm-handle-disposition handle) 'filename)
(mail-content-type-get
@@ -1197,7 +1220,7 @@ string if you do not like underscores."
(file-name-nondirectory filename))))
(setq file
(mm-with-multibyte
- (read-file-name "Save MIME part to: "
+ (read-file-name (or prompt "Save MIME part to: ")
(or mm-default-directory default-directory)
nil nil (or filename ""))))
(setq mm-default-directory (file-name-directory file))
@@ -1211,17 +1234,13 @@ string if you do not like underscores."
(defun mm-save-part-to-file (handle file)
(mm-with-unibyte-buffer
(mm-insert-part handle)
- (let ((coding-system-for-write 'binary)
- (current-file-modes (default-file-modes))
+ (let ((current-file-modes (default-file-modes)))
+ (set-default-file-modes mm-attachment-file-modes)
+ (unwind-protect
;; Don't re-compress .gz & al. Arguably we should make
;; `file-name-handler-alist' nil, but that would chop
;; ange-ftp, which is reasonable to use here.
- (inhibit-file-name-operation 'write-region)
- (inhibit-file-name-handlers
- (cons 'jka-compr-handler inhibit-file-name-handlers)))
- (set-default-file-modes mm-attachment-file-modes)
- (unwind-protect
- (write-region (point-min) (point-max) file)
+ (mm-write-region (point-min) (point-max) file nil nil nil 'binary t)
(set-default-file-modes current-file-modes)))))
(defun mm-pipe-part (handle)
@@ -1345,34 +1364,35 @@ be determined."
(mm-handle-set-cache handle spec))))))
(defun mm-create-image-xemacs (type)
- (cond
- ((equal type "xbm")
- ;; xbm images require special handling, since
- ;; the only way to create glyphs from these
- ;; (without a ton of work) is to write them
- ;; out to a file, and then create a file
- ;; specifier.
- (let ((file (mm-make-temp-file
- (expand-file-name "emm" mm-tmp-directory)
- nil ".xbm")))
- (unwind-protect
- (progn
- (write-region (point-min) (point-max) file)
- (make-glyph (list (cons 'x file))))
- (ignore-errors
- (delete-file file)))))
- (t
- (make-glyph
- (vector
- (or (mm-image-type-from-buffer)
- (intern type))
- :data (buffer-string))))))
+ (when (featurep 'xemacs)
+ (cond
+ ((equal type "xbm")
+ ;; xbm images require special handling, since
+ ;; the only way to create glyphs from these
+ ;; (without a ton of work) is to write them
+ ;; out to a file, and then create a file
+ ;; specifier.
+ (let ((file (mm-make-temp-file
+ (expand-file-name "emm" mm-tmp-directory)
+ nil ".xbm")))
+ (unwind-protect
+ (progn
+ (write-region (point-min) (point-max) file)
+ (make-glyph (list (cons 'x file))))
+ (ignore-errors
+ (delete-file file)))))
+ (t
+ (make-glyph
+ (vector
+ (or (mm-image-type-from-buffer)
+ (intern type))
+ :data (buffer-string)))))))
(defun mm-image-fit-p (handle)
"Say whether the image in HANDLE will fit the current window."
(let ((image (mm-get-image handle)))
(or (not image)
- (if (fboundp 'glyph-width)
+ (if (featurep 'xemacs)
;; XEmacs' glyphs can actually tell us about their width, so
;; lets be nice and smart about them.
(or mm-inline-large-images
@@ -1517,7 +1537,7 @@ If RECURSIVE, search recursively."
(format "protocol=%s" protocol))))))
(save-excursion
(if func
- (funcall func parts ctl)
+ (setq parts (funcall func parts ctl))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details
(format "Unknown sign protocol (%s)" protocol))))))
diff --git a/lisp/gnus/mm-partial.el b/lisp/gnus/mm-partial.el
index 1fa3e6967e7..f59ca10d783 100644
--- a/lisp/gnus/mm-partial.el
+++ b/lisp/gnus/mm-partial.el
@@ -34,8 +34,7 @@
(require 'mm-decode)
(defun mm-partial-find-parts (id &optional art)
- (let ((headers (save-excursion
- (set-buffer gnus-summary-buffer)
+ (let ((headers (with-current-buffer gnus-summary-buffer
gnus-newsgroup-headers))
phandles header)
(while (setq header (pop headers))
diff --git a/lisp/gnus/mm-url.el b/lisp/gnus/mm-url.el
index dedc03a2edf..a143089750c 100644
--- a/lisp/gnus/mm-url.el
+++ b/lisp/gnus/mm-url.el
@@ -35,14 +35,6 @@
(require 'mm-util)
(require 'gnus)
-(eval-and-compile
- (autoload 'executable-find "executable"))
-
-(eval-when-compile
- (if (featurep 'xemacs)
- (require 'timer-funcs)
- (require 'timer)))
-
(defvar url-current-object)
(defvar url-package-name)
(defvar url-package-version)
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index 4f41cf3645b..69dd40d2044 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -30,7 +30,16 @@
(require 'mail-prsvr)
(eval-and-compile
- (mapcar
+ (if (featurep 'xemacs)
+ (unless (ignore-errors
+ (require 'timer-funcs))
+ (require 'timer))
+ (require 'timer)))
+
+(defvar mm-mime-mule-charset-alist )
+
+(eval-and-compile
+ (mapc
(lambda (elem)
(let ((nfunc (intern (format "mm-%s" (car elem)))))
(if (fboundp (car elem))
@@ -41,9 +50,6 @@
(coding-system-equal . equal)
(annotationp . ignore)
(set-buffer-file-coding-system . ignore)
- (make-char
- . (lambda (charset int)
- (int-to-char int)))
(read-charset
. (lambda (prompt)
"Return a charset."
@@ -67,6 +73,10 @@
(aset string idx to))
(setq idx (1+ idx)))
string)))
+ (replace-in-string
+ . (lambda (string regexp rep &optional literal)
+ "See `replace-regexp-in-string', only the order of args differs."
+ (replace-regexp-in-string regexp rep string nil literal)))
(string-as-unibyte . identity)
(string-make-unibyte . identity)
;; string-as-multibyte often doesn't really do what you think it does.
@@ -90,7 +100,22 @@
(string-as-multibyte . identity)
(multibyte-string-p . ignore)
(insert-byte . insert-char)
- (multibyte-char-to-unibyte . identity))))
+ (multibyte-char-to-unibyte . identity)
+ (special-display-p
+ . (lambda (buffer-name)
+ "Returns non-nil if a buffer named BUFFER-NAME gets a special frame."
+ (and special-display-function
+ (or (and (member buffer-name special-display-buffer-names) t)
+ (cdr (assoc buffer-name special-display-buffer-names))
+ (catch 'return
+ (dolist (elem special-display-regexps)
+ (and (stringp elem)
+ (string-match elem buffer-name)
+ (throw 'return t))
+ (and (consp elem)
+ (stringp (car elem))
+ (string-match (car elem) buffer-name)
+ (throw 'return (cdr elem))))))))))))
(eval-and-compile
(if (featurep 'xemacs)
@@ -120,32 +145,6 @@
(defalias 'mm-decode-coding-region 'decode-coding-region)
(defalias 'mm-encode-coding-region 'encode-coding-region)))
-(eval-and-compile
- (cond
- ((fboundp 'replace-in-string)
- (defalias 'mm-replace-in-string 'replace-in-string))
- ((fboundp 'replace-regexp-in-string)
- (defun mm-replace-in-string (string regexp newtext &optional literal)
- "Replace all matches for REGEXP with NEWTEXT in STRING.
-If LITERAL is non-nil, insert NEWTEXT literally. Return a new
-string containing the replacements.
-
-This is a compatibility function for different Emacsen."
- (replace-regexp-in-string regexp newtext string nil literal)))
- (t
- (defun mm-replace-in-string (string regexp newtext &optional literal)
- "Replace all matches for REGEXP with NEWTEXT in STRING.
-If LITERAL is non-nil, insert NEWTEXT literally. Return a new
-string containing the replacements.
-
-This is a compatibility function for different Emacsen."
- (let ((start 0) tail)
- (while (string-match regexp string start)
- (setq tail (- (length string) (match-end 0)))
- (setq string (replace-match newtext nil literal string))
- (setq start (- (length string) tail))))
- string))))
-
(defalias 'mm-string-to-multibyte
(cond
((featurep 'xemacs)
@@ -262,6 +261,10 @@ the alias. Else windows-NUMBER is used."
,@(when (and (not (mm-coding-system-p 'gbk))
(mm-coding-system-p 'cp936))
'((gbk . cp936)))
+ ;; ISO8859-1 is a bogus name for ISO-8859-1
+ ,@(when (and (not (mm-coding-system-p 'iso8859-1))
+ (mm-coding-system-p 'iso-8859-1))
+ '((iso8859-1 . iso-8859-1)))
)
"A mapping from unknown or invalid charset names to the real charset names.
@@ -378,7 +381,9 @@ Unless LIST is given, `mm-codepage-ibm-list' is used."
(mm-setup-codepage-ibm)
(defcustom mm-charset-override-alist
- `((iso-8859-1 . windows-1252))
+ '((iso-8859-1 . windows-1252)
+ (iso-8859-8 . windows-1255)
+ (iso-8859-9 . windows-1254))
"A mapping from undesired charset names to their replacement.
You may add pairs like (iso-8859-1 . windows-1252) here,
@@ -386,6 +391,8 @@ i.e. treat iso-8859-1 as windows-1252. windows-1252 is a
superset of iso-8859-1."
:type '(list (set :inline t
(const (iso-8859-1 . windows-1252))
+ (const (iso-8859-8 . windows-1255))
+ (const (iso-8859-9 . windows-1254))
(const (undecided . windows-1252)))
(repeat :inline t
:tag "Other options"
@@ -722,9 +729,6 @@ only be used for decoding, not for encoding."
(message "Unknown charset: %s" charset)))
cs))))
-(defsubst mm-replace-chars-in-string (string from to)
- (mm-subst-char-in-string from to string))
-
(eval-and-compile
(defvar mm-emacs-mule (and (not (featurep 'xemacs))
(boundp 'default-enable-multibyte-characters)
@@ -882,9 +886,10 @@ This affects whether coding conversion should be attempted generally."
(autoload 'latin-unity-massage-name "latin-unity")
(autoload 'latin-unity-maybe-remap "latin-unity")
(autoload 'latin-unity-representations-feasible-region "latin-unity")
- (autoload 'latin-unity-representations-present-region "latin-unity")
- (defvar latin-unity-coding-systems)
- (defvar latin-unity-ucs-list))
+ (autoload 'latin-unity-representations-present-region "latin-unity"))
+
+(defvar latin-unity-coding-systems)
+(defvar latin-unity-ucs-list)
(defun mm-xemacs-find-mime-charset-1 (begin end)
"Determine which MIME charset to use to send region as message.
@@ -908,7 +913,7 @@ But this is very much a corner case, so don't worry about it."
;; Load the Latin Unity library, if available.
(when (and (not (featurep 'latin-unity)) (locate-library "latin-unity"))
- (ignore-errors (require 'latin-unity)))
+ (require 'latin-unity))
;; Now, can we use it?
(if (featurep 'latin-unity)
@@ -1011,8 +1016,8 @@ charset, and a longer list means no appropriate charset."
(memq 'iso-8859-15 charsets)
(memq 'iso-8859-15 hack-charsets)
(save-excursion (mm-iso-8859-x-to-15-region b e)))
- (mapcar (lambda (x) (setq charsets (delq (car x) charsets)))
- mm-iso-8859-15-compatible))
+ (dolist (x mm-iso-8859-15-compatible)
+ (setq charsets (delq (car x) charsets))))
(if (and (memq 'iso-2022-jp-2 charsets)
(memq 'iso-2022-jp-2 hack-charsets))
(setq charsets (delq 'iso-2022-jp charsets)))
@@ -1094,10 +1099,10 @@ Emacs 23 (unicode)."
;; Remove composition since the base charsets have been included.
;; Remove eight-bit-*, treat them as ascii.
(let ((css (find-charset-region b e)))
- (mapcar (lambda (cs) (setq css (delq cs css)))
- '(composition eight-bit-control eight-bit-graphic
- control-1))
- css))
+ (dolist (cs
+ '(composition eight-bit-control eight-bit-graphic control-1)
+ css)
+ (setq css (delq cs css)))))
(t
;; We are in a unibyte buffer or XEmacs non-mule, so we futz around a bit.
(save-excursion
@@ -1120,21 +1125,6 @@ Emacs 23 (unicode)."
mm-mime-mule-charset-alist)))))
(list 'ascii (or charset 'latin-iso8859-1)))))))))
-(if (fboundp 'shell-quote-argument)
- (defalias 'mm-quote-arg 'shell-quote-argument)
- (defun mm-quote-arg (arg)
- "Return a version of ARG that is safe to evaluate in a shell."
- (let ((pos 0) new-pos accum)
- ;; *** bug: we don't handle newline characters properly
- (while (setq new-pos (string-match "[]*[;!'`\"$\\& \t{} |()<>]" arg pos))
- (push (substring arg pos new-pos) accum)
- (push "\\" accum)
- (push (list (aref arg new-pos)) accum)
- (setq pos (1+ new-pos)))
- (if (= pos 0)
- arg
- (apply 'concat (nconc (nreverse accum) (list (substring arg pos))))))))
-
(defun mm-auto-mode-alist ()
"Return an `auto-mode-alist' with only the .gz (etc) thingies."
(let ((alist auto-mode-alist)
@@ -1146,7 +1136,7 @@ Emacs 23 (unicode)."
(nreverse out)))
(defvar mm-inhibit-file-name-handlers
- '(jka-compr-handler image-file-handler)
+ '(jka-compr-handler image-file-handler epa-file-handler)
"A list of handlers doing (un)compression (etc) thingies.")
(defun mm-insert-file-contents (filename &optional visit beg end replace
@@ -1232,7 +1222,7 @@ If INHIBIT is non-nil, inhibit `mm-inhibit-file-name-handlers'."
(>= (length def) 4)
(eq (nth 3 def) 'suffix)))))
(defalias 'mm-make-temp-file 'make-temp-file)
- ;; Stolen (and modified for Emacs 20 and XEmacs) from Emacs 22.
+ ;; Stolen (and modified for XEmacs) from Emacs 22.
(defun mm-make-temp-file (prefix &optional dir-flag suffix)
"Create a temporary file.
The returned file name (created by appending some random characters at the end
@@ -1272,10 +1262,9 @@ If SUFFIX is non-nil, add that at the end of the file name."
nil 'excl))
nil)
(file-already-exists t)
- ;; The Emacs 20 and XEmacs versions of
- ;; `make-directory' issue `file-error'.
- (file-error (or (and (or (featurep 'xemacs)
- (= emacs-major-version 20))
+ ;; The XEmacs version of `make-directory' issues
+ ;; `file-error'.
+ (file-error (or (and (featurep 'xemacs)
(file-exists-p file))
(signal (car err) (cdr err)))))
;; the file was somehow created by someone else between
@@ -1323,6 +1312,187 @@ If SUFFIX is non-nil, add that at the end of the file name."
(let ((cs (mm-detect-coding-region start end)))
cs)))
+(eval-when-compile
+ (unless (fboundp 'coding-system-to-mime-charset)
+ (defalias 'coding-system-to-mime-charset 'ignore)))
+
+(defun mm-coding-system-to-mime-charset (coding-system)
+ "Return the MIME charset corresponding to CODING-SYSTEM.
+To make this function work with XEmacs, the APEL package is required."
+ (when coding-system
+ (or (and (fboundp 'coding-system-get)
+ (or (coding-system-get coding-system :mime-charset)
+ (coding-system-get coding-system 'mime-charset)))
+ (and (featurep 'xemacs)
+ (or (and (fboundp 'coding-system-to-mime-charset)
+ (not (eq (symbol-function 'coding-system-to-mime-charset)
+ 'ignore)))
+ (and (condition-case nil
+ (require 'mcharset)
+ (error nil))
+ (fboundp 'coding-system-to-mime-charset)))
+ (coding-system-to-mime-charset coding-system)))))
+
+(eval-when-compile
+ (require 'jka-compr))
+
+(defun mm-decompress-buffer (filename &optional inplace force)
+ "Decompress buffer's contents, depending on jka-compr.
+Only when FORCE is t or `auto-compression-mode' is enabled and FILENAME
+agrees with `jka-compr-compression-info-list', decompression is done.
+Signal an error if FORCE is neither nil nor t and compressed data are
+not decompressed because `auto-compression-mode' is disabled.
+If INPLACE is nil, return decompressed data or nil without modifying
+the buffer. Otherwise, replace the buffer's contents with the
+decompressed data. The buffer's multibyteness must be turned off."
+ (when (and filename
+ (if force
+ (prog1 t (require 'jka-compr))
+ (and (fboundp 'jka-compr-installed-p)
+ (jka-compr-installed-p))))
+ (let ((info (jka-compr-get-compression-info filename)))
+ (when info
+ (unless (or (memq force (list nil t))
+ (jka-compr-installed-p))
+ (error ""))
+ (let ((prog (jka-compr-info-uncompress-program info))
+ (args (jka-compr-info-uncompress-args info))
+ (msg (format "%s %s..."
+ (jka-compr-info-uncompress-message info)
+ filename))
+ (err-file (jka-compr-make-temp-name))
+ (cur (current-buffer))
+ (coding-system-for-read mm-binary-coding-system)
+ (coding-system-for-write mm-binary-coding-system)
+ retval err-msg)
+ (message "%s" msg)
+ (mm-with-unibyte-buffer
+ (insert-buffer-substring cur)
+ (condition-case err
+ (progn
+ (unless (memq (apply 'call-process-region
+ (point-min) (point-max)
+ prog t (list t err-file) nil args)
+ jka-compr-acceptable-retval-list)
+ (erase-buffer)
+ (insert (mapconcat
+ 'identity
+ (delete "" (split-string
+ (prog2
+ (insert-file-contents err-file)
+ (buffer-string)
+ (erase-buffer))))
+ " ")
+ "\n")
+ (setq err-msg
+ (format "Error while executing \"%s %s < %s\""
+ prog (mapconcat 'identity args " ")
+ filename)))
+ (setq retval (buffer-string)))
+ (error
+ (setq err-msg (error-message-string err)))))
+ (when (file-exists-p err-file)
+ (ignore-errors (jka-compr-delete-temp-file err-file)))
+ (when inplace
+ (unless err-msg
+ (delete-region (point-min) (point-max))
+ (insert retval))
+ (setq retval nil))
+ (message "%s" (or err-msg (concat msg "done")))
+ retval)))))
+
+(eval-when-compile
+ (unless (fboundp 'coding-system-name)
+ (defalias 'coding-system-name 'ignore))
+ (unless (fboundp 'find-file-coding-system-for-read-from-filename)
+ (defalias 'find-file-coding-system-for-read-from-filename 'ignore))
+ (unless (fboundp 'find-operation-coding-system)
+ (defalias 'find-operation-coding-system 'ignore)))
+
+(defun mm-find-buffer-file-coding-system (&optional filename)
+ "Find coding system used to decode the contents of the current buffer.
+This function looks for the coding system magic cookie or examines the
+coding system specified by `file-coding-system-alist' being associated
+with FILENAME which defaults to `buffer-file-name'. Data compressed by
+gzip, bzip2, etc. are allowed."
+ (unless filename
+ (setq filename buffer-file-name))
+ (save-excursion
+ (let ((decomp (unless ;; No worth to examine charset of tar files.
+ (and filename
+ (string-match
+ "\\.\\(?:tar\\.[^.]+\\|tbz\\|tgz\\)\\'"
+ filename))
+ (mm-decompress-buffer filename nil t))))
+ (when decomp
+ (set-buffer (let (default-enable-multibyte-characters)
+ (generate-new-buffer " *temp*")))
+ (insert decomp)
+ (setq filename (file-name-sans-extension filename)))
+ (goto-char (point-min))
+ (prog1
+ (cond
+ ((boundp 'set-auto-coding-function) ;; Emacs
+ (if filename
+ (or (funcall (symbol-value 'set-auto-coding-function)
+ filename (- (point-max) (point-min)))
+ (car (find-operation-coding-system 'insert-file-contents
+ filename)))
+ (let (auto-coding-alist)
+ (condition-case nil
+ (funcall (symbol-value 'set-auto-coding-function)
+ nil (- (point-max) (point-min)))
+ (error nil)))))
+ ((and (featurep 'xemacs) (featurep 'file-coding)) ;; XEmacs
+ (let ((case-fold-search t)
+ (end (point-at-eol))
+ codesys start)
+ (or
+ (and (re-search-forward "-\\*-+[\t ]*" end t)
+ (progn
+ (setq start (match-end 0))
+ (re-search-forward "[\t ]*-+\\*-" end t))
+ (progn
+ (setq end (match-beginning 0))
+ (goto-char start)
+ (or (looking-at "coding:[\t ]*\\([^\t ;]+\\)")
+ (re-search-forward
+ "[\t ;]+coding:[\t ]*\\([^\t ;]+\\)"
+ end t)))
+ (find-coding-system (setq codesys
+ (intern (match-string 1))))
+ codesys)
+ (and (re-search-forward "^[\t ]*;+[\t ]*Local[\t ]+Variables:"
+ nil t)
+ (progn
+ (setq start (match-end 0))
+ (re-search-forward "^[\t ]*;+[\t ]*End:" nil t))
+ (progn
+ (setq end (match-beginning 0))
+ (goto-char start)
+ (re-search-forward
+ "^[\t ]*;+[\t ]*coding:[\t ]*\\([^\t\n\r ]+\\)"
+ end t))
+ (find-coding-system (setq codesys
+ (intern (match-string 1))))
+ codesys)
+ (and (progn
+ (goto-char (point-min))
+ (setq case-fold-search nil)
+ (re-search-forward "^;;;coding system: "
+ ;;(+ (point-min) 3000) t))
+ nil t))
+ (looking-at "[^\t\n\r ]+")
+ (find-coding-system
+ (setq codesys (intern (match-string 0))))
+ codesys)
+ (and filename
+ (setq codesys
+ (find-file-coding-system-for-read-from-filename
+ filename))
+ (coding-system-name (coding-system-base codesys)))))))
+ (when decomp
+ (kill-buffer (current-buffer)))))))
(provide 'mm-util)
diff --git a/lisp/gnus/mm-uu.el b/lisp/gnus/mm-uu.el
index 81d8088535f..18ff2ae0838 100644
--- a/lisp/gnus/mm-uu.el
+++ b/lisp/gnus/mm-uu.el
@@ -68,9 +68,6 @@ decoder, such as hexbin."
(defvar mm-uu-yenc-decode-function 'yenc-decode-region)
-(defvar mm-uu-pgp-beginning-signature
- "^-----BEGIN PGP SIGNATURE-----")
-
(defvar mm-uu-beginning-regexp nil)
(defvar mm-dissect-disposition "inline"
@@ -90,19 +87,25 @@ This can be either \"inline\" or \"attachment\".")
:type 'regexp
:group 'gnus-article-mime)
+(defcustom mm-uu-tex-groups-regexp "\\.tex\\>"
+ "*Regexp matching TeX groups."
+ :version "23.0"
+ :type 'regexp
+ :group 'gnus-article-mime)
+
(defvar mm-uu-type-alist
'((postscript
"^%!PS-"
"^%%EOF$"
mm-uu-postscript-extract
nil)
- (uu
+ (uu ;; Maybe we should have a more strict test here.
"^begin[ \t]+0?[0-7][0-7][0-7][ \t]+"
"^end[ \t]*$"
mm-uu-uu-extract
mm-uu-uu-filename)
(binhex
- "^:...............................................................$"
+ "^:.\\{63,63\\}$"
":$"
mm-uu-binhex-extract
nil
@@ -157,7 +160,35 @@ This can be either \"inline\" or \"attachment\".")
nil
mm-uu-diff-extract
nil
- mm-uu-diff-test))
+ mm-uu-diff-test)
+ (message-marks
+ ;; Text enclosed with tags similar to `message-mark-insert-begin' and
+ ;; `message-mark-insert-end'. Don't use those variables to avoid
+ ;; dependency on `message.el'.
+ "^-+[8<>]*-\\{9,\\}[a-z ]+-\\{9,\\}[a-z ]+-\\{9,\\}[8<>]*-+$"
+ "^-+[8<>]*-\\{9,\\}[a-z ]+-\\{9,\\}[a-z ]+-\\{9,\\}[8<>]*-+$"
+ (lambda () (mm-uu-verbatim-marks-extract 0 -1 1 -1))
+ nil)
+ ;; Omitting [a-z8<] leads to false positives (bogus signature separators
+ ;; and mailing list banners).
+ (insert-marks
+ "^ *\\(-\\|_\\)\\{30,\\}.*[a-z8<].*\\(-\\|_\\)\\{30,\\} *$"
+ "^ *\\(-\\|_\\)\\{30,\\}.*[a-z8<].*\\(-\\|_\\)\\{30,\\} *$"
+ (lambda () (mm-uu-verbatim-marks-extract 0 0 1 -1))
+ nil)
+ (verbatim-marks
+ ;; slrn-style verbatim marks, see
+ ;; http://www.slrn.org/manual/slrn-manual-6.html#ss6.81
+ "^#v\\+"
+ "^#v\\-$"
+ (lambda () (mm-uu-verbatim-marks-extract 0 0))
+ nil)
+ (LaTeX
+ "^\\([\\\\%][^\n]+\n\\)*\\\\documentclass.*[[{%]"
+ "^\\\\end{document}"
+ mm-uu-latex-extract
+ nil
+ mm-uu-latex-test))
"A list of specifications for non-MIME attachments.
Each element consist of the following entries: label,
start-regexp, end-regexp, extract-function, test-function.
@@ -201,9 +232,45 @@ To disable dissecting shar codes, for instance, add
(defsubst mm-uu-function-2 (entry)
(nth 5 entry))
-(defun mm-uu-copy-to-buffer (&optional from to)
+;; In Emacs 22, we could use `min-colors' in the face definition. But Emacs
+;; 21 and XEmacs don't support it.
+(defcustom mm-uu-hide-markers
+ (< 16 (or (and (fboundp 'defined-colors)
+ (length (defined-colors)))
+ (and (fboundp 'device-color-cells)
+ (device-color-cells))
+ 0))
+ "If non-nil, hide verbatim markers.
+The value should be nil on displays where the face
+`mm-uu-extract' isn't distinguishable to the face `default'."
+ :type '(choice (const :tag "Hide" t)
+ (const :tag "Don't hide" nil))
+ :version "23.0" ;; No Gnus
+ :group 'gnus-article-mime)
+
+(defface mm-uu-extract '(;; Colors from `gnus-cite-3' plus background:
+ (((class color)
+ (background dark))
+ (:foreground "light yellow"
+ :background "dark green"))
+ (((class color)
+ (background light))
+ (:foreground "dark green"
+ :background "light yellow"))
+ (t
+ ()))
+ "Face for extracted buffers."
+ ;; See `mm-uu-verbatim-marks-extract'.
+ :version "23.0" ;; No Gnus
+ :group 'gnus-article-mime)
+
+(defun mm-uu-copy-to-buffer (&optional from to properties)
"Copy the contents of the current buffer to a fresh buffer.
-Return that buffer."
+Return that buffer.
+
+If PROPERTIES is non-nil, PROPERTIES are applied to the buffer,
+see `set-text-properties'. If PROPERTIES equals t, this means to
+apply the face `mm-uu-extract'."
(let ((obuf (current-buffer))
(coding-system
;; Might not exist in non-MULE XEmacs
@@ -212,6 +279,11 @@ Return that buffer."
(with-current-buffer (generate-new-buffer " *mm-uu*")
(setq buffer-file-coding-system coding-system)
(insert-buffer-substring obuf from to)
+ (cond ((eq properties t)
+ (set-text-properties (point-min) (point-max)
+ '(face mm-uu-extract)))
+ (properties
+ (set-text-properties (point-min) (point-max) properties)))
(current-buffer))))
(defun mm-uu-configure-p (key val)
@@ -233,11 +305,10 @@ Return that buffer."
(mm-uu-configure)
-(eval-when-compile
- (defvar file-name)
- (defvar start-point)
- (defvar end-point)
- (defvar entry))
+(defvar file-name)
+(defvar start-point)
+(defvar end-point)
+(defvar entry)
(defun mm-uu-uu-filename ()
(if (looking-at ".+")
@@ -267,6 +338,35 @@ Return that buffer."
(mm-make-handle (mm-uu-copy-to-buffer start-point end-point)
'("application/postscript")))
+(defun mm-uu-verbatim-marks-extract (start-offset end-offset
+ &optional
+ start-hide
+ end-hide)
+ (let ((start (or (and mm-uu-hide-markers
+ start-hide)
+ start-offset
+ 1))
+ (end (or (and mm-uu-hide-markers
+ end-hide)
+ end-offset
+ -1)))
+ (mm-make-handle
+ (mm-uu-copy-to-buffer
+ (progn (goto-char start-point)
+ (forward-line start)
+ (point))
+ (progn (goto-char end-point)
+ (forward-line end)
+ (point))
+ t)
+ '("text/x-verbatim" (charset . gnus-decoded)))))
+
+(defun mm-uu-latex-extract ()
+ (mm-make-handle
+ (mm-uu-copy-to-buffer start-point end-point t)
+ ;; application/x-tex?
+ '("text/x-verbatim" (charset . gnus-decoded))))
+
(defun mm-uu-emacs-sources-extract ()
(mm-make-handle (mm-uu-copy-to-buffer start-point end-point)
'("application/emacs-lisp" (charset . gnus-decoded))
@@ -274,8 +374,7 @@ Return that buffer."
(list mm-dissect-disposition
(cons 'filename file-name))))
-(eval-when-compile
- (defvar gnus-newsgroup-name))
+(defvar gnus-newsgroup-name)
(defun mm-uu-emacs-sources-test ()
(setq file-name (match-string 1))
@@ -292,6 +391,11 @@ Return that buffer."
mm-uu-diff-groups-regexp
(string-match mm-uu-diff-groups-regexp gnus-newsgroup-name)))
+(defun mm-uu-latex-test ()
+ (and gnus-newsgroup-name
+ mm-uu-tex-groups-regexp
+ (string-match mm-uu-tex-groups-regexp gnus-newsgroup-name)))
+
(defun mm-uu-forward-extract ()
(mm-make-handle (mm-uu-copy-to-buffer
(progn (goto-char start-point) (forward-line) (point))
@@ -359,8 +463,7 @@ Return that buffer."
(y-or-n-p "Verify pgp signed part? ")
(message ""))))))
-(eval-when-compile
- (defvar gnus-newsgroup-charset))
+(defvar gnus-newsgroup-charset)
(defun mm-uu-pgp-signed-extract-1 (handles ctl)
(let ((buf (mm-uu-copy-to-buffer (point-min) (point-max))))
@@ -369,30 +472,16 @@ Return that buffer."
(progn
(mml2015-clean-buffer)
(let ((coding-system-for-write (or gnus-newsgroup-charset
- 'iso-8859-1)))
+ 'iso-8859-1))
+ (coding-system-for-read (or gnus-newsgroup-charset
+ 'iso-8859-1)))
(funcall (mml2015-clear-verify-function))))
(when (and mml2015-use (null (mml2015-clear-verify-function)))
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-details
- (format "Clear verification not supported by `%s'.\n" mml2015-use))))
- (goto-char (point-min))
- (forward-line)
- ;; We need to be careful not to strip beyond the armor headers.
- ;; Previously, an attacker could replace the text inside our
- ;; markup with trailing garbage by injecting whitespace into the
- ;; message.
- (while (looking-at "Hash:") ; The only header allowed in cleartext
- (forward-line)) ; signatures according to RFC2440.
- (when (looking-at "[\t ]*$")
- (forward-line))
- (delete-region (point-min) (point))
- (if (re-search-forward mm-uu-pgp-beginning-signature nil t)
- (delete-region (match-beginning 0) (point-max)))
- (goto-char (point-min))
- (while (re-search-forward "^- " nil t)
- (replace-match "" t t)
- (forward-line 1)))
- (list (mm-make-handle buf mm-uu-text-plain-type))))
+ (format "Clear verification not supported by `%s'.\n" mml2015-use)))
+ (mml2015-extract-cleartext-signature))
+ (list (mm-make-handle buf mm-uu-text-plain-type)))))
(defun mm-uu-pgp-signed-extract ()
(let ((mm-security-handle (list (format "multipart/signed"))))
diff --git a/lisp/gnus/mm-view.el b/lisp/gnus/mm-view.el
index c8a672928c0..cb4f42dabcf 100644
--- a/lisp/gnus/mm-view.el
+++ b/lisp/gnus/mm-view.el
@@ -30,15 +30,14 @@
(require 'mailcap)
(require 'mm-bodies)
(require 'mm-decode)
+(require 'smime)
(eval-and-compile
(autoload 'gnus-article-prepare-display "gnus-art")
(autoload 'vcard-parse-string "vcard")
(autoload 'vcard-format-string "vcard")
(autoload 'fill-flowed "flow-fill")
- (autoload 'html2text "html2text" nil t)
- (unless (fboundp 'diff-mode)
- (autoload 'diff-mode "diff-mode" "" t nil)))
+ (autoload 'html2text "html2text" nil t))
(defvar gnus-article-mime-handles)
(defvar gnus-newsgroup-charset)
@@ -73,7 +72,7 @@
"The attributes of washer types for text/html.")
(defcustom mm-fill-flowed t
- "If non-nil an format=flowed article will be displayed flowed."
+ "If non-nil a format=flowed article will be displayed flowed."
:type 'boolean
:version "22.1"
:group 'mime-display)
@@ -98,19 +97,20 @@
(delete-region b (+ b 2)))))))
(defun mm-inline-image-xemacs (handle)
- (insert "\n\n")
- (forward-char -2)
- (let ((annot (make-annotation (mm-get-image handle) nil 'text))
- buffer-read-only)
- (mm-handle-set-undisplayer
- handle
- `(lambda ()
- (let ((b ,(point-marker))
- buffer-read-only)
- (delete-annotation ,annot)
- (delete-region (- b 2) b))))
- (set-extent-property annot 'mm t)
- (set-extent-property annot 'duplicable t)))
+ (when (featurep 'xemacs)
+ (insert "\n\n")
+ (forward-char -2)
+ (let ((annot (make-annotation (mm-get-image handle) nil 'text))
+ buffer-read-only)
+ (mm-handle-set-undisplayer
+ handle
+ `(lambda ()
+ (let ((b ,(point-marker))
+ buffer-read-only)
+ (delete-annotation ,annot)
+ (delete-region (- b 2) b))))
+ (set-extent-property annot 'mm t)
+ (set-extent-property annot 'duplicable t))))
(eval-and-compile
(if (featurep 'xemacs)
@@ -140,26 +140,26 @@
(charset (mail-content-type-get
(mm-handle-type handle) 'charset)))
(save-excursion
- (insert text)
+ (insert (if charset (mm-decode-string text charset) text))
(save-restriction
(narrow-to-region b (point))
- (goto-char (point-min))
- (if (or (and (boundp 'w3-meta-content-type-charset-regexp)
- (re-search-forward
- w3-meta-content-type-charset-regexp nil t))
- (and (boundp 'w3-meta-charset-content-type-regexp)
- (re-search-forward
- w3-meta-charset-content-type-regexp nil t)))
+ (unless charset
+ (goto-char (point-min))
+ (when (or (and (boundp 'w3-meta-content-type-charset-regexp)
+ (re-search-forward
+ w3-meta-content-type-charset-regexp nil t))
+ (and (boundp 'w3-meta-charset-content-type-regexp)
+ (re-search-forward
+ w3-meta-charset-content-type-regexp nil t)))
(setq charset
- (or (let ((bsubstr (buffer-substring-no-properties
- (match-beginning 2)
- (match-end 2))))
- (if (fboundp 'w3-coding-system-for-mime-charset)
- (w3-coding-system-for-mime-charset bsubstr)
- (mm-charset-to-coding-system bsubstr)))
- charset)))
- (delete-region (point-min) (point-max))
- (insert (mm-decode-string text charset))
+ (let ((bsubstr (buffer-substring-no-properties
+ (match-beginning 2)
+ (match-end 2))))
+ (if (fboundp 'w3-coding-system-for-mime-charset)
+ (w3-coding-system-for-mime-charset bsubstr)
+ (mm-charset-to-coding-system bsubstr))))
+ (delete-region (point-min) (point-max))
+ (insert (mm-decode-string text charset))))
(save-window-excursion
(save-restriction
(let ((w3-strict-width width)
@@ -189,12 +189,12 @@
handle
`(lambda ()
(let (buffer-read-only)
- (if (functionp 'remove-specifier)
- (mapcar (lambda (prop)
- (remove-specifier
- (face-property 'default prop)
- (current-buffer)))
- '(background background-pixmap foreground)))
+ ,@(if (functionp 'remove-specifier)
+ '((mapcar (lambda (prop)
+ (remove-specifier
+ (face-property 'default prop)
+ (current-buffer)))
+ '(background background-pixmap foreground))))
(delete-region ,(point-min-marker)
,(point-max-marker)))))))))
@@ -263,13 +263,7 @@
(mm-handle-set-undisplayer
handle
`(lambda ()
- (let (buffer-read-only)
- (if (functionp 'remove-specifier)
- (mapcar (lambda (prop)
- (remove-specifier
- (face-property 'default prop)
- (current-buffer)))
- '(background background-pixmap foreground)))
+ (let ((inhibit-read-only t))
(delete-region ,(point-min-marker)
,(point-max-marker)))))))))
@@ -428,7 +422,8 @@
(save-restriction
(narrow-to-region b (point))
(goto-char b)
- (fill-flowed)
+ (fill-flowed nil (equal (cdr (assoc 'delsp (mm-handle-type handle)))
+ "yes"))
(goto-char (point-max))))
(save-restriction
(narrow-to-region b (point))
@@ -448,6 +443,8 @@
"Insert TEXT inline from HANDLE."
(let ((b (point)))
(insert text)
+ (unless (bolp)
+ (insert "\n"))
(mm-handle-set-undisplayer
handle
`(lambda ()
@@ -530,38 +527,55 @@
(delete-region ,(point-min-marker) ,(point-max-marker)))))))))
(defun mm-display-inline-fontify (handle mode)
- (let (text)
+ (let ((charset (mail-content-type-get (mm-handle-type handle) 'charset))
+ text coding-system)
+ (unless (eq charset 'gnus-decoded)
+ (mm-with-unibyte-buffer
+ (mm-insert-part handle)
+ (mm-decompress-buffer
+ (or (mail-content-type-get (mm-handle-disposition handle) 'name)
+ (mail-content-type-get (mm-handle-disposition handle) 'filename))
+ t t)
+ (unless charset
+ (setq coding-system (mm-find-buffer-file-coding-system)))
+ (setq text (buffer-string))))
;; XEmacs @#$@ version of font-lock refuses to fully turn itself
;; on for buffers whose name begins with " ". That's why we use
- ;; save-current-buffer/get-buffer-create rather than
- ;; with-temp-buffer.
- (save-current-buffer
- (set-buffer (generate-new-buffer "*fontification*"))
- (unwind-protect
- (progn
- (buffer-disable-undo)
- (mm-insert-part handle)
- (require 'font-lock)
- (let ((font-lock-maximum-size nil)
- ;; Disable support modes, e.g., jit-lock, lazy-lock, etc.
- (font-lock-mode-hook nil)
- (font-lock-support-mode nil)
- ;; I find font-lock a bit too verbose.
- (font-lock-verbose nil))
- (funcall mode)
- ;; The mode function might have already turned on font-lock.
- (unless (symbol-value 'font-lock-mode)
- (font-lock-fontify-buffer)))
- ;; By default, XEmacs font-lock uses non-duplicable text
- ;; properties. This code forces all the text properties
- ;; to be copied along with the text.
- (when (fboundp 'extent-list)
- (map-extents (lambda (ext ignored)
- (set-extent-property ext 'duplicable t)
- nil)
- nil nil nil nil nil 'text-prop))
- (setq text (buffer-string)))
- (kill-buffer (current-buffer))))
+ ;; `with-current-buffer'/`generate-new-buffer' rather than
+ ;; `with-temp-buffer'.
+ (with-current-buffer (generate-new-buffer "*fontification*")
+ (buffer-disable-undo)
+ (mm-enable-multibyte)
+ (insert (cond ((eq charset 'gnus-decoded)
+ (with-current-buffer (mm-handle-buffer handle)
+ (buffer-string)))
+ (coding-system
+ (mm-decode-coding-string text coding-system))
+ (charset
+ (mm-decode-string text charset))
+ (t
+ text)))
+ (require 'font-lock)
+ (let ((font-lock-maximum-size nil)
+ ;; Disable support modes, e.g., jit-lock, lazy-lock, etc.
+ (font-lock-mode-hook nil)
+ (font-lock-support-mode nil)
+ ;; I find font-lock a bit too verbose.
+ (font-lock-verbose nil))
+ (funcall mode)
+ ;; The mode function might have already turned on font-lock.
+ (unless (symbol-value 'font-lock-mode)
+ (font-lock-fontify-buffer)))
+ ;; By default, XEmacs font-lock uses non-duplicable text
+ ;; properties. This code forces all the text properties
+ ;; to be copied along with the text.
+ (when (featurep 'xemacs)
+ (map-extents (lambda (ext ignored)
+ (set-extent-property ext 'duplicable t)
+ nil)
+ nil nil nil nil nil 'text-prop))
+ (setq text (buffer-string))
+ (kill-buffer (current-buffer)))
(mm-insert-inline handle text)))
;; Shouldn't these functions check whether the user even wants to use
@@ -575,27 +589,28 @@
(defun mm-display-elisp-inline (handle)
(mm-display-inline-fontify handle 'emacs-lisp-mode))
+(defun mm-display-dns-inline (handle)
+ (mm-display-inline-fontify handle 'dns-mode))
+
;; id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
;; us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }
(defvar mm-pkcs7-signed-magic
(mm-string-as-unibyte
- (apply 'concat
- (mapcar 'char-to-string
- (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
- ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
- ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
- ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x02)))))
+ (mapconcat 'char-to-string
+ (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
+ ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
+ ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
+ ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x02) "")))
;; id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
;; us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 }
(defvar mm-pkcs7-enveloped-magic
(mm-string-as-unibyte
- (apply 'concat
- (mapcar 'char-to-string
- (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
- ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
- ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
- ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x03)))))
+ (mapconcat 'char-to-string
+ (list ?\x30 ?\x5c ?\x28 ?\x80 ?\x5c ?\x7c ?\x81 ?\x2e ?\x5c
+ ?\x7c ?\x82 ?\x2e ?\x2e ?\x5c ?\x7c ?\x83 ?\x2e ?\x2e
+ ?\x2e ?\x5c ?\x29 ?\x06 ?\x09 ?\x5c ?\x2a ?\x86 ?\x48
+ ?\x86 ?\xf7 ?\x0d ?\x01 ?\x07 ?\x03) "")))
(defun mm-view-pkcs7-get-type (handle)
(mm-with-unibyte-buffer
@@ -614,23 +629,26 @@
(otherwise (error "Unknown or unimplemented PKCS#7 type"))))
(defun mm-view-pkcs7-verify (handle)
- ;; A bogus implementation of PKCS#7. FIXME::
- (mm-insert-part handle)
- (goto-char (point-min))
- (if (search-forward "Content-Type: " nil t)
- (delete-region (point-min) (match-beginning 0)))
- (goto-char (point-max))
- (if (re-search-backward "--\r?\n?" nil t)
- (delete-region (match-end 0) (point-max)))
+ (let ((verified nil))
+ (with-temp-buffer
+ (insert "MIME-Version: 1.0\n")
+ (mm-insert-headers "application/pkcs7-mime" "base64" "smime.p7m")
+ (insert-buffer-substring (mm-handle-buffer handle))
+ (setq verified (smime-verify-region (point-min) (point-max))))
+ (goto-char (point-min))
+ (mm-insert-part handle)
+ (if (search-forward "Content-Type: " nil t)
+ (delete-region (point-min) (match-beginning 0)))
+ (goto-char (point-max))
+ (if (re-search-backward "--\r?\n?" nil t)
+ (delete-region (match-end 0) (point-max)))
+ (unless verified
+ (insert-buffer-substring smime-details-buffer)))
(goto-char (point-min))
(while (search-forward "\r\n" nil t)
(replace-match "\n"))
- (message "Verify signed PKCS#7 message is unimplemented.")
- (sit-for 1)
t)
-(autoload 'gnus-completing-read-maybe-default "gnus-util" nil nil 'macro)
-
(defun mm-view-pkcs7-decrypt (handle)
(insert-buffer-substring (mm-handle-buffer handle))
(goto-char (point-min))
@@ -641,10 +659,9 @@
(if (= (length smime-keys) 1)
(cadar smime-keys)
(smime-get-key-by-email
- (gnus-completing-read-maybe-default
+ (completing-read
(concat "Decipher using key"
- (if smime-keys
- (concat " (default " (caar smime-keys) "): ")
+ (if smime-keys (concat "(default " (caar smime-keys) "): ")
": "))
smime-keys nil nil nil nil (car-safe (car-safe smime-keys))))))
(goto-char (point-min))
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index 68df6b64c4b..29bc0d41a1b 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -26,14 +26,20 @@
;;; Code:
-(require 'mml-smime)
(eval-when-compile (require 'cl))
+(require 'password)
(autoload 'mml2015-sign "mml2015")
(autoload 'mml2015-encrypt "mml2015")
(autoload 'mml1991-sign "mml1991")
(autoload 'mml1991-encrypt "mml1991")
(autoload 'message-goto-body "message")
(autoload 'mml-insert-tag "mml")
+(autoload 'mml-smime-sign "mml-smime")
+(autoload 'mml-smime-encrypt "mml-smime")
+(autoload 'mml-smime-sign-query "mml-smime")
+(autoload 'mml-smime-encrypt-query "mml-smime")
+(autoload 'mml-smime-verify "mml-smime")
+(autoload 'mml-smime-verify-test "mml-smime")
(defvar mml-sign-alist
'(("smime" mml-smime-sign-buffer mml-smime-sign-query)
@@ -96,6 +102,23 @@ details."
(choice (const :tag "Separate" separate)
(const :tag "Combined" combined)))))
+(defcustom mml-secure-verbose nil
+ "If non-nil, ask the user about the current operation more verbosely."
+ :group 'message
+ :type 'boolean)
+
+(defcustom mml-secure-cache-passphrase password-cache
+ "If t, cache passphrase."
+ :group 'message
+ :type 'boolean)
+
+(defcustom mml-secure-passphrase-cache-expiry password-cache-expiry
+ "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml-secure-cache-passphrase'."
+ :group 'message
+ :type 'integer)
+
;;; Configuration/helper functions
(defun mml-signencrypt-style (method &optional style)
@@ -249,6 +272,13 @@ Use METHOD if given. Else use `mml-secure-method' or
;; defuns that add the proper <#secure ...> tag to the top of the message body
(defun mml-secure-message (method &optional modesym)
(let ((mode (prin1-to-string modesym))
+ (tags (append
+ (if (or (eq modesym 'sign)
+ (eq modesym 'signencrypt))
+ (funcall (nth 2 (assoc method mml-sign-alist))))
+ (if (or (eq modesym 'encrypt)
+ (eq modesym 'signencrypt))
+ (funcall (nth 2 (assoc method mml-encrypt-alist))))))
insert-loc)
(mml-unsecure-message)
(save-excursion
@@ -257,8 +287,8 @@ Use METHOD if given. Else use `mml-secure-method' or
(concat "^" (regexp-quote mail-header-separator) "\n") nil t)
(goto-char (setq insert-loc (match-end 0)))
(unless (looking-at "<#secure")
- (mml-insert-tag
- 'secure 'method method 'mode mode)))
+ (apply 'mml-insert-tag
+ 'secure 'method method 'mode mode tags)))
(t (error
"The message is corrupted. No mail header separator"))))
(when (eql insert-loc (point))
diff --git a/lisp/gnus/mml-smime.el b/lisp/gnus/mml-smime.el
index 3762c2303b3..7b9f2c0bd13 100644
--- a/lisp/gnus/mml-smime.el
+++ b/lisp/gnus/mml-smime.el
@@ -31,10 +31,82 @@
(require 'smime)
(require 'mm-decode)
+(require 'mml-sec)
(autoload 'message-narrow-to-headers "message")
(autoload 'message-fetch-field "message")
+(defvar mml-smime-use 'openssl)
+
+(defvar mml-smime-function-alist
+ '((openssl mml-smime-openssl-sign
+ mml-smime-openssl-encrypt
+ mml-smime-openssl-sign-query
+ mml-smime-openssl-encrypt-query
+ mml-smime-openssl-verify
+ mml-smime-openssl-verify-test)
+ (epg mml-smime-epg-sign
+ mml-smime-epg-encrypt
+ nil
+ nil
+ mml-smime-epg-verify
+ mml-smime-epg-verify-test)))
+
+(defcustom mml-smime-verbose mml-secure-verbose
+ "If non-nil, ask the user about the current operation more verbosely."
+ :group 'mime-security
+ :type 'boolean)
+
+(defcustom mml-smime-cache-passphrase mml-secure-cache-passphrase
+ "If t, cache passphrase."
+ :group 'mime-security
+ :type 'boolean)
+
+(defcustom mml-smime-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
+ "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml-smime-cache-passphrase'."
+ :group 'mime-security
+ :type 'integer)
+
+(defcustom mml-smime-signers nil
+ "A list of your own key ID which will be used to sign a message."
+ :group 'mime-security
+ :type '(repeat (string :tag "Key ID")))
+
(defun mml-smime-sign (cont)
+ (let ((func (nth 1 (assq mml-smime-use mml-smime-function-alist))))
+ (if func
+ (funcall func cont)
+ (error "Cannot find sign function"))))
+
+(defun mml-smime-encrypt (cont)
+ (let ((func (nth 2 (assq mml-smime-use mml-smime-function-alist))))
+ (if func
+ (funcall func cont)
+ (error "Cannot find encrypt function"))))
+
+(defun mml-smime-sign-query ()
+ (let ((func (nth 3 (assq mml-smime-use mml-smime-function-alist))))
+ (if func
+ (funcall func))))
+
+(defun mml-smime-encrypt-query ()
+ (let ((func (nth 4 (assq mml-smime-use mml-smime-function-alist))))
+ (if func
+ (funcall func))))
+
+(defun mml-smime-verify (handle ctl)
+ (let ((func (nth 5 (assq mml-smime-use mml-smime-function-alist))))
+ (if func
+ (funcall func handle ctl)
+ handle)))
+
+(defun mml-smime-verify-test (handle ctl)
+ (let ((func (nth 6 (assq mml-smime-use mml-smime-function-alist))))
+ (if func
+ (funcall func handle ctl))))
+
+(defun mml-smime-openssl-sign (cont)
(when (null smime-keys)
(customize-variable 'smime-keys)
(error "No S/MIME keys configured, use customize to add your key"))
@@ -44,7 +116,7 @@
(replace-match "\n" t t))
(goto-char (point-max)))
-(defun mml-smime-encrypt (cont)
+(defun mml-smime-openssl-encrypt (cont)
(let (certnames certfiles tmp file tmpfiles)
;; xxx tmp files are always an security issue
(while (setq tmp (pop cont))
@@ -70,7 +142,7 @@
nil))
(goto-char (point-max)))
-(defun mml-smime-sign-query ()
+(defun mml-smime-openssl-sign-query ()
;; query information (what certificate) from user when MML tag is
;; added, for use later by the signing process
(when (null smime-keys)
@@ -123,22 +195,42 @@
(quit))
result))
-(defun mml-smime-encrypt-query ()
- ;; todo: add ldap support (xemacs ldap api?)
+(defun mml-smime-get-ldap-cert ()
+ ;; todo: deal with comma separated multiple recipients
+ (let (result who bad cert)
+ (condition-case ()
+ (while (not result)
+ (setq who (read-from-minibuffer
+ (format "%sLookup certificate for: " (or bad ""))
+ (cadr (funcall gnus-extract-address-components
+ (or (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (message-fetch-field "to")))
+ "")))))
+ (if (setq cert (smime-cert-by-ldap who))
+ (setq result (list 'certfile (buffer-name cert)))
+ (setq bad (format "`%s' not found. " who))))
+ (quit))
+ result))
+
+(defun mml-smime-openssl-encrypt-query ()
;; todo: try dns/ldap automatically first, before prompting user
(let (certs done)
(while (not done)
(ecase (read (gnus-completing-read-with-default
- "dns" "Fetch certificate from"
- '(("dns") ("file")) nil t))
+ "ldap" "Fetch certificate from"
+ '(("dns") ("ldap") ("file")) nil t))
(dns (setq certs (append certs
(mml-smime-get-dns-cert))))
+ (ldap (setq certs (append certs
+ (mml-smime-get-ldap-cert))))
(file (setq certs (append certs
(mml-smime-get-file-cert)))))
(setq done (not (y-or-n-p "Add more recipients? "))))
certs))
-(defun mml-smime-verify (handle ctl)
+(defun mml-smime-openssl-verify (handle ctl)
(with-temp-buffer
(insert-buffer-substring (mm-handle-multipart-original-buffer ctl))
(goto-char (point-min))
@@ -203,9 +295,246 @@
(buffer-string) "\n")))))
handle)
-(defun mml-smime-verify-test (handle ctl)
+(defun mml-smime-openssl-verify-test (handle ctl)
smime-openssl-program)
+(defvar epg-user-id-alist)
+(defvar epg-digest-algorithm-alist)
+(defvar inhibit-redisplay)
+(defvar password-cache-expiry)
+
+(eval-when-compile
+ (autoload 'epg-make-context "epg")
+ (autoload 'epg-context-set-armor "epg")
+ (autoload 'epg-context-set-signers "epg")
+ (autoload 'epg-context-result-for "epg")
+ (autoload 'epg-new-signature-digest-algorithm "epg")
+ (autoload 'epg-verify-result-to-string "epg")
+ (autoload 'epg-list-keys "epg")
+ (autoload 'epg-decrypt-string "epg")
+ (autoload 'epg-verify-string "epg")
+ (autoload 'epg-sign-string "epg")
+ (autoload 'epg-encrypt-string "epg")
+ (autoload 'epg-passphrase-callback-function "epg")
+ (autoload 'epg-context-set-passphrase-callback "epg")
+ (autoload 'epg-configuration "epg-config")
+ (autoload 'epg-expand-group "epg-config")
+ (autoload 'epa-select-keys "epa")
+ (autoload 'password-read "password")
+ (autoload 'password-cache-add "password")
+ (autoload 'password-cache-remove "password"))
+
+(defvar mml-smime-epg-secret-key-id-list nil)
+
+(defun mml-smime-epg-passphrase-callback (context key-id ignore)
+ (if (eq key-id 'SYM)
+ (epg-passphrase-callback-function context key-id nil)
+ (let* (entry
+ (passphrase
+ (password-read
+ (if (eq key-id 'PIN)
+ "Passphrase for PIN: "
+ (if (setq entry (assoc key-id epg-user-id-alist))
+ (format "Passphrase for %s %s: " key-id (cdr entry))
+ (format "Passphrase for %s: " key-id)))
+ (if (eq key-id 'PIN)
+ "PIN"
+ key-id))))
+ (when passphrase
+ (let ((password-cache-expiry mml-smime-passphrase-cache-expiry))
+ (password-cache-add key-id passphrase))
+ (setq mml-smime-epg-secret-key-id-list
+ (cons key-id mml-smime-epg-secret-key-id-list))
+ (copy-sequence passphrase)))))
+
+(defun mml-smime-epg-find-usable-key (keys usage)
+ (catch 'found
+ (while keys
+ (let ((pointer (epg-key-sub-key-list (car keys))))
+ (while pointer
+ (if (and (memq usage (epg-sub-key-capability (car pointer)))
+ (not (memq (epg-sub-key-validity (car pointer))
+ '(revoked expired))))
+ (throw 'found (car keys)))
+ (setq pointer (cdr pointer))))
+ (setq keys (cdr keys)))))
+
+(defun mml-smime-epg-sign (cont)
+ (let* ((inhibit-redisplay t)
+ (context (epg-make-context 'CMS))
+ (boundary (mml-compute-boundary cont))
+ signer-key
+ (signers
+ (or (message-options-get 'mml-smime-epg-signers)
+ (message-options-set
+ 'mml-smime-epg-signers
+ (if mml-smime-verbose
+ (epa-select-keys context "\
+Select keys for signing.
+If no one is selected, default secret key is used. "
+ mml-smime-signers t)
+ (if mml-smime-signers
+ (mapcar
+ (lambda (signer)
+ (setq signer-key (mml-smime-epg-find-usable-key
+ (epg-list-keys context signer t)
+ 'sign))
+ (unless (or signer-key
+ (y-or-n-p
+ (format "No secret key for %s; skip it? "
+ signer)))
+ (error "No secret key for %s" signer))
+ signer-key)
+ mml-smime-signers))))))
+ signature micalg)
+ (epg-context-set-signers context signers)
+ (if mml-smime-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml-smime-epg-passphrase-callback))
+ (condition-case error
+ (setq signature (epg-sign-string context
+ (mm-replace-in-string (buffer-string)
+ "\n" "\r\n")
+ t)
+ mml-smime-epg-secret-key-id-list nil)
+ (error
+ (while mml-smime-epg-secret-key-id-list
+ (password-cache-remove (car mml-smime-epg-secret-key-id-list))
+ (setq mml-smime-epg-secret-key-id-list
+ (cdr mml-smime-epg-secret-key-id-list)))
+ (signal (car error) (cdr error))))
+ (if (epg-context-result-for context 'sign)
+ (setq micalg (epg-new-signature-digest-algorithm
+ (car (epg-context-result-for context 'sign)))))
+ (goto-char (point-min))
+ (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n"
+ boundary))
+ (if micalg
+ (insert (format "\tmicalg=%s; "
+ (downcase
+ (cdr (assq micalg
+ epg-digest-algorithm-alist))))))
+ (insert "protocol=\"application/pkcs7-signature\"\n")
+ (insert (format "\n--%s\n" boundary))
+ (goto-char (point-max))
+ (insert (format "\n--%s\n" boundary))
+ (insert "Content-Type: application/pkcs7-signature; name=smime.p7s
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename=smime.p7s
+
+")
+ (insert (base64-encode-string signature) "\n")
+ (goto-char (point-max))
+ (insert (format "--%s--\n" boundary))
+ (goto-char (point-max))))
+
+(defun mml-smime-epg-encrypt (cont)
+ (let ((inhibit-redisplay t)
+ (context (epg-make-context 'CMS))
+ (config (epg-configuration))
+ (recipients (message-options-get 'mml-smime-epg-recipients))
+ cipher signers
+ (boundary (mml-compute-boundary cont))
+ recipient-key)
+ (unless recipients
+ (setq recipients
+ (apply #'nconc
+ (mapcar
+ (lambda (recipient)
+ (or (epg-expand-group config recipient)
+ (list recipient)))
+ (split-string
+ (or (message-options-get 'message-recipients)
+ (message-options-set 'message-recipients
+ (read-string "Recipients: ")))
+ "[ \f\t\n\r\v,]+"))))
+ (if mml-smime-verbose
+ (setq recipients
+ (epa-select-keys context "\
+Select recipients for encryption.
+If no one is selected, symmetric encryption will be performed. "
+ recipients))
+ (setq recipients
+ (mapcar
+ (lambda (recipient)
+ (setq recipient-key (mml-smime-epg-find-usable-key
+ (epg-list-keys context recipient)
+ 'encrypt))
+ (unless (or recipient-key
+ (y-or-n-p
+ (format "No public key for %s; skip it? "
+ recipient)))
+ (error "No public key for %s" recipient))
+ recipient-key)
+ recipients))
+ (unless recipients
+ (error "No recipient specified")))
+ (message-options-set 'mml-smime-epg-recipients recipients))
+ (if mml-smime-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml-smime-epg-passphrase-callback))
+ (condition-case error
+ (setq cipher
+ (epg-encrypt-string context (buffer-string) recipients)
+ mml-smime-epg-secret-key-id-list nil)
+ (error
+ (while mml-smime-epg-secret-key-id-list
+ (password-cache-remove (car mml-smime-epg-secret-key-id-list))
+ (setq mml-smime-epg-secret-key-id-list
+ (cdr mml-smime-epg-secret-key-id-list)))
+ (signal (car error) (cdr error))))
+ (delete-region (point-min) (point-max))
+ (goto-char (point-min))
+ (insert "\
+Content-Type: application/pkcs7-mime;
+ smime-type=enveloped-data;
+ name=smime.p7m
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment; filename=smime.p7m
+
+")
+ (insert (base64-encode-string cipher))
+ (goto-char (point-max))))
+
+(defun mml-smime-epg-verify (handle ctl)
+ (catch 'error
+ (let ((inhibit-redisplay t)
+ context plain signature-file part signature)
+ (when (or (null (setq part (mm-find-raw-part-by-type
+ ctl (or (mm-handle-multipart-ctl-parameter
+ ctl 'protocol)
+ "application/pkcs7-signature")
+ t)))
+ (null (setq signature (mm-find-part-by-type
+ (cdr handle)
+ "application/pkcs7-signature"
+ nil t))))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Corrupted")
+ (throw 'error handle))
+ (setq part (mm-replace-in-string part "\n" "\r\n" t)
+ context (epg-make-context 'CMS))
+ (condition-case error
+ (setq plain (epg-verify-string context (mm-get-part signature) part))
+ (error
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Failed")
+ (if (eq (car error) 'quit)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details "Quit.")
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details (format "%S" error)))
+ (throw 'error handle)))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info
+ (epg-verify-result-to-string (epg-context-result-for context 'verify)))
+ handle)))
+
+(defun mml-smime-epg-verify-test (handle ctl)
+ t)
+
(provide 'mml-smime)
;;; arch-tag: f1bf94d4-f2cd-4c6f-b059-ad69492817e2
diff --git a/lisp/gnus/mml.el b/lisp/gnus/mml.el
index 0c60bed409f..092827c570d 100644
--- a/lisp/gnus/mml.el
+++ b/lisp/gnus/mml.el
@@ -35,9 +35,9 @@
(eval-and-compile
(autoload 'message-make-message-id "message")
(autoload 'gnus-setup-posting-charset "gnus-msg")
- (autoload 'gnus-add-minor-mode "gnus-ems")
(autoload 'gnus-make-local-hook "gnus-util")
(autoload 'message-fetch-field "message")
+ (autoload 'message-mark-active-p "message")
(autoload 'message-info "message")
(autoload 'fill-flowed-encode "flow-fill")
(autoload 'message-posting-charset "message")
@@ -53,6 +53,7 @@
(defvar message-required-mail-headers)
(defvar message-required-news-headers)
(defvar dnd-protocol-alist)
+(defvar mml-dnd-protocol-alist)
(defcustom mml-content-type-parameters
'(name access-type expiration size permission format)
@@ -70,6 +71,46 @@ These parameters are generated in Content-Disposition header if exists."
:type '(repeat (symbol :tag "Parameter"))
:group 'message)
+(defcustom mml-content-disposition-alist
+ '((text (rtf . "attachment") (t . "inline"))
+ (t . "attachment"))
+ "Alist of MIME types or regexps matching file names and default dispositions.
+Each element should be one of the following three forms:
+
+ (REGEXP . DISPOSITION)
+ (SUPERTYPE (SUBTYPE . DISPOSITION) (SUBTYPE . DISPOSITION)...)
+ (TYPE . DISPOSITION)
+
+Where REGEXP is a string which matches the file name (if any) of an
+attachment, SUPERTYPE, SUBTYPE and TYPE should be symbols which are a
+MIME supertype (e.g., text), a MIME subtype (e.g., plain) and a MIME
+type (e.g., text/plain) respectively, and DISPOSITION should be either
+the string \"attachment\" or the string \"inline\". The value t for
+SUPERTYPE, SUBTYPE or TYPE matches any of those types. The first
+match found will be used."
+ :version "23.0" ;; No Gnus
+ :type (let ((dispositions '(radio :format "DISPOSITION: %v"
+ :value "attachment"
+ (const :format "%v " "attachment")
+ (const :format "%v\n" "inline"))))
+ `(repeat
+ :offset 0
+ (choice :format "%[Value Menu%]%v"
+ (cons :tag "(REGEXP . DISPOSITION)" :extra-offset 4
+ (regexp :tag "REGEXP" :value ".*")
+ ,dispositions)
+ (cons :tag "(SUPERTYPE (SUBTYPE . DISPOSITION)...)"
+ :indent 0
+ (symbol :tag " SUPERTYPE" :value text)
+ (repeat :format "%v%i\n" :offset 0 :extra-offset 4
+ (cons :format "%v" :extra-offset 5
+ (symbol :tag "SUBTYPE" :value t)
+ ,dispositions)))
+ (cons :tag "(TYPE . DISPOSITION)" :extra-offset 4
+ (symbol :tag "TYPE" :value t)
+ ,dispositions))))
+ :group 'message)
+
(defcustom mml-insert-mime-headers-always nil
"If non-nil, always put Content-Type: text/plain at top of empty parts.
It is necessary to work against a bug in certain clients."
@@ -154,19 +195,15 @@ part. This is for the internal use, you should never modify the value.")
(defun mml-destroy-buffers ()
(let (kill-buffer-hook)
- (mapcar 'kill-buffer mml-buffer-list)
+ (mapc 'kill-buffer mml-buffer-list)
(setq mml-buffer-list nil)))
(defun mml-parse ()
"Parse the current buffer as an MML document."
(save-excursion
(goto-char (point-min))
- (let ((table (syntax-table)))
- (unwind-protect
- (progn
- (set-syntax-table mml-syntax-table)
- (mml-parse-1))
- (set-syntax-table table)))))
+ (with-syntax-table mml-syntax-table
+ (mml-parse-1))))
(defun mml-parse-1 ()
"Parse the current buffer as an MML document."
@@ -181,6 +218,8 @@ part. This is for the internal use, you should never modify the value.")
;; included in the message
(let* (secure-mode
(taginfo (mml-read-tag))
+ (keyfile (cdr (assq 'keyfile taginfo)))
+ (certfile (cdr (assq 'certfile taginfo)))
(recipients (cdr (assq 'recipients taginfo)))
(sender (cdr (assq 'sender taginfo)))
(location (cdr (assq 'tag-location taginfo)))
@@ -188,9 +227,8 @@ part. This is for the internal use, you should never modify the value.")
(method (cdr (assq 'method taginfo)))
tags)
(save-excursion
- (if
- (re-search-forward
- "<#\\(/\\)?\\(multipart\\|part\\|external\\|mml\\)." nil t)
+ (if (re-search-forward
+ "<#/?\\(multipart\\|part\\|external\\|mml\\)." nil t)
(setq secure-mode "multipart")
(setq secure-mode "part")))
(save-excursion
@@ -205,6 +243,10 @@ part. This is for the internal use, you should never modify the value.")
(setq tags (list "sign" method "encrypt" method))))
(eval `(mml-insert-tag ,secure-mode
,@tags
+ ,(if keyfile "keyfile")
+ ,keyfile
+ ,(if certfile "certfile")
+ ,certfile
,(if recipients "recipients")
,recipients
,(if sender "sender")
@@ -427,21 +469,24 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
(or (mm-default-file-encoding filename)
"application/octet-stream")
"text/plain")))
- coded encoding charset flowed)
+ (charset (cdr (assq 'charset cont)))
+ (coding (mm-charset-to-coding-system charset))
+ encoding flowed coded)
+ (cond ((eq coding 'ascii)
+ (setq charset nil
+ coding nil))
+ (charset
+ (setq charset (intern (downcase charset)))))
(if (and (not raw)
(member (car (split-string type "/")) '("text" "message")))
(progn
(with-temp-buffer
- (setq charset (mm-charset-to-coding-system
- (cdr (assq 'charset cont))))
- (when (eq charset 'ascii)
- (setq charset nil))
(cond
((cdr (assq 'buffer cont))
(insert-buffer-substring (cdr (assq 'buffer cont))))
((and filename
(not (equal (cdr (assq 'nofile cont)) "yes")))
- (let ((coding-system-for-read charset))
+ (let ((coding-system-for-read coding))
(mm-insert-file-contents filename)))
((eq 'mml (car cont))
(insert (cdr (assq 'contents cont))))
@@ -491,7 +536,13 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
;; insert a "; format=flowed" string unless the
;; user has already specified it.
(setq flowed (null (assq 'format cont)))))
- (setq charset (mm-encode-body charset))
+ ;; Prefer `utf-8' for text/calendar parts.
+ (if (or charset
+ (not (string= type "text/calendar")))
+ (setq charset (mm-encode-body charset))
+ (let ((mm-coding-system-priorities
+ (cons 'utf-8 mm-coding-system-priorities)))
+ (setq charset (mm-encode-body))))
(setq encoding (mm-body-encoding
charset (cdr (assq 'encoding cont))))))
(setq coded (buffer-string)))
@@ -507,7 +558,11 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
((and filename
(not (equal (cdr (assq 'nofile cont)) "yes")))
(let ((coding-system-for-read mm-binary-coding-system))
- (mm-insert-file-contents filename nil nil nil nil t)))
+ (mm-insert-file-contents filename nil nil nil nil t))
+ (unless charset
+ (setq charset (mm-coding-system-to-mime-charset
+ (mm-find-buffer-file-coding-system
+ filename)))))
(t
(let ((contents (cdr (assq 'contents cont))))
(if (if (featurep 'xemacs)
@@ -517,7 +572,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
(mm-enable-multibyte)
(insert contents)
(unless raw
- (setq charset (mm-encode-body))))
+ (setq charset (mm-encode-body charset))))
(insert contents)))))
(setq encoding (mm-encode-buffer type)
coded (mm-string-as-multibyte (buffer-string))))
@@ -648,7 +703,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
(incf mml-multipart-number)))
(throw 'not-unique nil))))
((eq (car cont) 'multipart)
- (mapcar 'mml-compute-boundary-1 (cddr cont))))
+ (mapc 'mml-compute-boundary-1 (cddr cont))))
t))
(defun mml-make-boundary (number)
@@ -658,6 +713,30 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
"")
mml-base-boundary))
+(defun mml-content-disposition (type &optional filename)
+ "Return a default disposition name suitable to TYPE or FILENAME."
+ (let ((defs mml-content-disposition-alist)
+ disposition def types)
+ (while (and (not disposition) defs)
+ (setq def (pop defs))
+ (cond ((stringp (car def))
+ (when (and filename
+ (string-match (car def) filename))
+ (setq disposition (cdr def))))
+ ((consp (cdr def))
+ (when (string= (car (setq types (split-string type "/")))
+ (car def))
+ (setq type (cadr types)
+ types (cdr def))
+ (while (and (not disposition) types)
+ (setq def (pop types))
+ (when (or (eq (car def) t) (string= type (car def)))
+ (setq disposition (cdr def))))))
+ (t
+ (when (or (eq (car def) t) (string= type (car def)))
+ (setq disposition (cdr def))))))
+ (or disposition "attachment")))
+
(defun mml-insert-mime-headers (cont type charset encoding flowed)
(let (parameters id disposition description)
(setq parameters
@@ -688,7 +767,9 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
cont mml-content-disposition-parameters))
(when (or (setq disposition (cdr (assq 'disposition cont)))
parameters)
- (insert "Content-Disposition: " (or disposition "inline"))
+ (insert "Content-Disposition: "
+ (or disposition
+ (mml-content-disposition type (cdr (assq 'filename cont)))))
(when parameters
(mml-insert-parameter-string
cont mml-content-disposition-parameters))
@@ -727,9 +808,9 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
(mail-header-encode-parameter
(symbol-name type) value))))))
-(eval-when-compile
- (defvar ange-ftp-name-format)
- (defvar efs-path-regexp))
+(defvar ange-ftp-name-format)
+(defvar efs-path-regexp)
+
(defun mml-parse-file-name (path)
(if (if (boundp 'efs-path-regexp)
(string-match efs-path-regexp path)
@@ -809,7 +890,7 @@ If HANDLES is non-nil, use it instead reparsing the buffer."
(goto-char (point-max))
(insert "<#/mml>\n"))
((stringp (car handle))
- (mapcar 'mml-insert-mime (cdr handle))
+ (mapc 'mml-insert-mime (cdr handle))
(insert "<#/multipart>\n"))
(textp
(let ((charset (mail-content-type-get
@@ -1004,9 +1085,18 @@ See Info node `(emacs-mime)Composing'.
;;; inserting stuff to the buffer.
;;;
+(defcustom mml-default-directory mm-default-directory
+ "The default directory where mml will find files.
+If not set, `default-directory' will be used."
+ :type '(choice directory (const :tag "Default" nil))
+ :version "23.0" ;; No Gnus
+ :group 'message)
+
(defun mml-minibuffer-read-file (prompt)
(let* ((completion-ignored-extensions nil)
- (file (read-file-name prompt nil nil t)))
+ (file (read-file-name prompt
+ (or mml-default-directory default-directory)
+ nil t)))
;; Prevent some common errors. This is inspired by similar code in
;; VM.
(when (file-directory-p file)
@@ -1038,16 +1128,13 @@ See Info node `(emacs-mime)Composing'.
(setq description nil))
description))
-(defun mml-minibuffer-read-disposition (type &optional default)
- (unless default (setq default
- (if (and (string-match "\\`text/" type)
- (not (string-match "\\`text/rtf\\'" type)))
- "inline"
- "attachment")))
+(defun mml-minibuffer-read-disposition (type &optional default filename)
+ (unless default
+ (setq default (mml-content-disposition type filename)))
(let ((disposition (completing-read
- (format "Disposition (default %s): " default)
- '(("attachment") ("inline") (""))
- nil t nil nil default)))
+ (format "Disposition (default %s): " default)
+ '(("attachment") ("inline") (""))
+ nil t nil nil default)))
(if (not (equal disposition ""))
disposition
default)))
@@ -1139,7 +1226,7 @@ body) or \"attachment\" (separate from the body)."
(let* ((file (mml-minibuffer-read-file "Attach file: "))
(type (mml-minibuffer-read-type file))
(description (mml-minibuffer-read-description))
- (disposition (mml-minibuffer-read-disposition type)))
+ (disposition (mml-minibuffer-read-disposition type nil file)))
(list file type description disposition)))
(save-excursion
(unless (message-in-body-p) (goto-char (point-max)))
@@ -1170,7 +1257,7 @@ Ask for type, description or disposition according to
(when (memq 'description mml-dnd-attach-options)
(setq description (mml-minibuffer-read-description)))
(when (memq 'disposition mml-dnd-attach-options)
- (setq disposition (mml-minibuffer-read-disposition type)))
+ (setq disposition (mml-minibuffer-read-disposition type nil file)))
(mml-attach-file file type description disposition)))))
(defun mml-attach-buffer (buffer &optional type description)
@@ -1227,10 +1314,20 @@ Should be adopted if code in `message-send-mail' is changed."
(message-position-on-field "Mail-Followup-To" "X-Draft-From")
(insert (message-make-mail-followup-to))))
+(defvar mml-preview-buffer nil)
+
(defun mml-preview (&optional raw)
"Display current buffer with Gnus, in a new buffer.
-If RAW, display a raw encoded MIME message."
+If RAW, display a raw encoded MIME message.
+
+The window layout for the preview buffer is controled by the variables
+`special-display-buffer-names', `special-display-regexps', or
+`gnus-buffer-configuration' (the first match made will be used),
+or the `pop-to-buffer' function."
(interactive "P")
+ (setq mml-preview-buffer (generate-new-buffer
+ (concat (if raw "*Raw MIME preview of "
+ "*MIME preview of ") (buffer-name))))
(save-excursion
(let* ((buf (current-buffer))
(message-options message-options)
@@ -1242,13 +1339,13 @@ If RAW, display a raw encoded MIME message."
(message-fetch-field "Newsgroups")))
message-posting-charset)))
(message-options-set-recipient)
- (pop-to-buffer (generate-new-buffer
- (concat (if raw "*Raw MIME preview of "
- "*MIME preview of ") (buffer-name))))
(when (boundp 'gnus-buffers)
- (push (current-buffer) gnus-buffers))
- (erase-buffer)
- (insert-buffer-substring buf)
+ (push mml-preview-buffer gnus-buffers))
+ (save-restriction
+ (widen)
+ (set-buffer mml-preview-buffer)
+ (erase-buffer)
+ (insert-buffer-substring buf))
(mml-preview-insert-mail-followup-to)
(let ((message-deletable-headers (if (message-news-p)
nil
@@ -1261,6 +1358,7 @@ If RAW, display a raw encoded MIME message."
(concat "^" (regexp-quote mail-header-separator) "\n") nil t)
(replace-match "\n"))
(let ((mail-header-separator ""));; mail-header-separator is removed.
+ (message-sort-headers)
(mml-to-mime))
(if raw
(when (fboundp 'set-buffer-multibyte)
@@ -1293,7 +1391,15 @@ If RAW, display a raw encoded MIME message."
(lambda (event)
(interactive "@e")
(widget-button-press (widget-event-point event) event)))
- (goto-char (point-min)))))
+ ;; FIXME: Buffer is in article mode, but most tool bar commands won't
+ ;; work. Maybe only keep the following icons: search, print, quit
+ (goto-char (point-min))))
+ (if (and (not (mm-special-display-p (buffer-name mml-preview-buffer)))
+ (boundp 'gnus-buffer-configuration)
+ (assq 'mml-preview gnus-buffer-configuration))
+ (let ((gnus-message-buffer (current-buffer)))
+ (gnus-configure-windows 'mml-preview))
+ (pop-to-buffer mml-preview-buffer)))
(defun mml-validate ()
"Validate the current MML document."
diff --git a/lisp/gnus/mml1991.el b/lisp/gnus/mml1991.el
index 104fb9cfaa3..234f1fe2147 100644
--- a/lisp/gnus/mml1991.el
+++ b/lisp/gnus/mml1991.el
@@ -3,7 +3,7 @@
;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
;; 2005, 2006, 2007 Free Software Foundation, Inc.
-;; Author: Sascha Lüdecke <sascha@meta-x.de>,
+;; Author: Sascha Ldecke <sascha@meta-x.de>,
;; Simon Josefsson <simon@josefsson.org> (Mailcrypt interface, Gnus glue)
;; Keywords PGP
@@ -32,6 +32,8 @@
(require 'cl)
(require 'mm-util))
+(require 'mml-sec)
+
(defvar mc-pgp-always-sign)
(autoload 'quoted-printable-decode-region "qp")
@@ -46,9 +48,28 @@
(gpg mml1991-gpg-sign
mml1991-gpg-encrypt)
(pgg mml1991-pgg-sign
- mml1991-pgg-encrypt))
+ mml1991-pgg-encrypt)
+ (epg mml1991-epg-sign
+ mml1991-epg-encrypt))
"Alist of PGP functions.")
+(defvar mml1991-verbose mml-secure-verbose
+ "If non-nil, ask the user about the current operation more verbosely.")
+
+(defvar mml1991-cache-passphrase mml-secure-cache-passphrase
+ "If t, cache passphrase.")
+
+(defvar mml1991-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
+ "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml1991-cache-passphrase'.")
+
+(defvar mml1991-signers nil
+ "A list of your own key ID which will be used to sign a message.")
+
+(defvar mml1991-encrypt-to-self nil
+ "If t, add your own key ID to recipient list when encryption.")
+
;;; mailcrypt wrapper
(eval-and-compile
@@ -223,10 +244,9 @@
;; pgg wrapper
-(eval-when-compile
- (defvar pgg-default-user-id)
- (defvar pgg-errors-buffer)
- (defvar pgg-output-buffer))
+(defvar pgg-default-user-id)
+(defvar pgg-errors-buffer)
+(defvar pgg-output-buffer)
(defun mml1991-pgg-sign (cont)
(let ((pgg-text-mode t)
@@ -290,6 +310,180 @@
(insert-buffer-substring pgg-output-buffer)
t)
+;; epg wrapper
+
+(defvar epg-user-id-alist)
+(defvar password-cache-expiry)
+
+(eval-and-compile
+ (autoload 'epg-make-context "epg")
+ (autoload 'epg-passphrase-callback-function "epg")
+ (autoload 'epa-select-keys "epa")
+ (autoload 'epg-list-keys "epg")
+ (autoload 'epg-context-set-armor "epg")
+ (autoload 'epg-context-set-textmode "epg")
+ (autoload 'epg-context-set-signers "epg")
+ (autoload 'epg-context-set-passphrase-callback "epg")
+ (autoload 'epg-sign-string "epg")
+ (autoload 'epg-encrypt-string "epg")
+ (autoload 'epg-configuration "epg-config")
+ (autoload 'epg-expand-group "epg-config")
+ (autoload 'password-read "password")
+ (autoload 'password-cache-add "password")
+ (autoload 'password-cache-remove "password"))
+
+(defvar mml1991-epg-secret-key-id-list nil)
+
+(defun mml1991-epg-passphrase-callback (context key-id ignore)
+ (if (eq key-id 'SYM)
+ (epg-passphrase-callback-function context key-id nil)
+ (let* ((entry (assoc key-id epg-user-id-alist))
+ (passphrase
+ (password-read
+ (format "GnuPG passphrase for %s: "
+ (if entry
+ (cdr entry)
+ key-id))
+ (if (eq key-id 'PIN)
+ "PIN"
+ key-id))))
+ (when passphrase
+ (let ((password-cache-expiry mml1991-passphrase-cache-expiry))
+ (password-cache-add key-id passphrase))
+ (setq mml1991-epg-secret-key-id-list
+ (cons key-id mml1991-epg-secret-key-id-list))
+ (copy-sequence passphrase)))))
+
+(defun mml1991-epg-sign (cont)
+ (let ((context (epg-make-context))
+ headers cte signers signature)
+ (if mml1991-verbose
+ (setq signers (epa-select-keys context "Select keys for signing.
+If no one is selected, default secret key is used. "
+ mml1991-signers t))
+ (if mml1991-signers
+ (setq signers (mapcar (lambda (name)
+ (car (epg-list-keys context name t)))
+ mml1991-signers))))
+ (epg-context-set-armor context t)
+ (epg-context-set-textmode context t)
+ (epg-context-set-signers context signers)
+ (if mml1991-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml1991-epg-passphrase-callback))
+ ;; Don't sign headers.
+ (goto-char (point-min))
+ (when (re-search-forward "^$" nil t)
+ (setq headers (buffer-substring (point-min) (point)))
+ (save-restriction
+ (narrow-to-region (point-min) (point))
+ (setq cte (mail-fetch-field "content-transfer-encoding")))
+ (forward-line 1)
+ (delete-region (point-min) (point))
+ (when cte
+ (setq cte (intern (downcase cte)))
+ (mm-decode-content-transfer-encoding cte)))
+ (condition-case error
+ (setq signature (epg-sign-string context (buffer-string) 'clear)
+ mml1991-epg-secret-key-id-list nil)
+ (error
+ (while mml1991-epg-secret-key-id-list
+ (password-cache-remove (car mml1991-epg-secret-key-id-list))
+ (setq mml1991-epg-secret-key-id-list
+ (cdr mml1991-epg-secret-key-id-list)))
+ (signal (car error) (cdr error))))
+ (delete-region (point-min) (point-max))
+ (mm-with-unibyte-current-buffer
+ (insert signature)
+ (goto-char (point-min))
+ (while (re-search-forward "\r+$" nil t)
+ (replace-match "" t t))
+ (when cte
+ (mm-encode-content-transfer-encoding cte))
+ (goto-char (point-min))
+ (when headers
+ (insert headers))
+ (insert "\n"))
+ t))
+
+(defun mml1991-epg-encrypt (cont &optional sign)
+ (goto-char (point-min))
+ (when (re-search-forward "^$" nil t)
+ (let ((cte (save-restriction
+ (narrow-to-region (point-min) (point))
+ (mail-fetch-field "content-transfer-encoding"))))
+ ;; Strip MIME headers since it will be ASCII armoured.
+ (forward-line 1)
+ (delete-region (point-min) (point))
+ (when cte
+ (mm-decode-content-transfer-encoding (intern (downcase cte))))))
+ (let ((context (epg-make-context))
+ (recipients
+ (if (message-options-get 'message-recipients)
+ (split-string
+ (message-options-get 'message-recipients)
+ "[ \f\t\n\r\v,]+")))
+ cipher signers config)
+ ;; We should remove this check if epg-0.0.6 is released.
+ (if (and (condition-case nil
+ (require 'epg-config)
+ (error))
+ (functionp #'epg-expand-group))
+ (setq config (epg-configuration)
+ recipients
+ (apply #'nconc
+ (mapcar (lambda (recipient)
+ (or (epg-expand-group config recipient)
+ (list recipient)))
+ recipients))))
+ (if mml1991-verbose
+ (setq recipients
+ (epa-select-keys context "Select recipients for encryption.
+If no one is selected, symmetric encryption will be performed. "
+ recipients))
+ (setq recipients
+ (delq nil (mapcar (lambda (name)
+ (car (epg-list-keys context name)))
+ recipients))))
+ (if mml1991-encrypt-to-self
+ (if mml1991-signers
+ (setq recipients
+ (nconc recipients
+ (mapcar (lambda (name)
+ (car (epg-list-keys context name)))
+ mml1991-signers)))
+ (error "mml1991-signers not set")))
+ (when sign
+ (if mml1991-verbose
+ (setq signers (epa-select-keys context "Select keys for signing.
+If no one is selected, default secret key is used. "
+ mml1991-signers t))
+ (if mml1991-signers
+ (setq signers (mapcar (lambda (name)
+ (car (epg-list-keys context name t)))
+ mml1991-signers))))
+ (epg-context-set-signers context signers))
+ (epg-context-set-armor context t)
+ (epg-context-set-textmode context t)
+ (if mml1991-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml1991-epg-passphrase-callback))
+ (condition-case error
+ (setq cipher
+ (epg-encrypt-string context (buffer-string) recipients sign)
+ mml1991-epg-secret-key-id-list nil)
+ (error
+ (while mml1991-epg-secret-key-id-list
+ (password-cache-remove (car mml1991-epg-secret-key-id-list))
+ (setq mml1991-epg-secret-key-id-list
+ (cdr mml1991-epg-secret-key-id-list)))
+ (signal (car error) (cdr error))))
+ (delete-region (point-min) (point-max))
+ (insert "\n" cipher))
+ t)
+
;;;###autoload
(defun mml1991-encrypt (cont &optional sign)
(let ((func (nth 2 (assq mml1991-use mml1991-function-alist))))
diff --git a/lisp/gnus/mml2015.el b/lisp/gnus/mml2015.el
index 4edf595faae..0faba787b09 100644
--- a/lisp/gnus/mml2015.el
+++ b/lisp/gnus/mml2015.el
@@ -34,13 +34,23 @@
(require 'mm-decode)
(require 'mm-util)
(require 'mml)
+(require 'mml-sec)
(defvar mc-pgp-always-sign)
(defvar mml2015-use (or
+ (condition-case nil
+ (progn
+ (require 'epg-config)
+ (epg-check-configuration (epg-configuration))
+ 'epg)
+ (error))
(progn
(ignore-errors
- (require 'pgg))
+ ;; Avoid the "Recursive load suspected" error
+ ;; in Emacs 21.1.
+ (let ((recursive-load-depth-limit 100))
+ (require 'pgg)))
(and (fboundp 'pgg-sign-region)
'pgg))
(progn
@@ -54,7 +64,8 @@
(fboundp 'mc-sign-generic)
(fboundp 'mc-cleanup-recipient-headers)
'mailcrypt)))
- "The package used for PGP/MIME.")
+ "The package used for PGP/MIME.
+Valid packages include `epg', `pgg', `gpg' and `mailcrypt'.")
;; Something is not RFC2015.
(defvar mml2015-function-alist
@@ -75,7 +86,13 @@
mml2015-pgg-verify
mml2015-pgg-decrypt
mml2015-pgg-clear-verify
- mml2015-pgg-clear-decrypt))
+ mml2015-pgg-clear-decrypt)
+ (epg mml2015-epg-sign
+ mml2015-epg-encrypt
+ mml2015-epg-verify
+ mml2015-epg-decrypt
+ mml2015-epg-clear-verify
+ mml2015-epg-clear-decrypt))
"Alist of PGP/MIME functions.")
(defvar mml2015-result-buffer nil)
@@ -92,6 +109,60 @@
:type '(repeat (cons (regexp :tag "GnuPG output regexp")
(boolean :tag "Trust key"))))
+(defcustom mml2015-verbose mml-secure-verbose
+ "If non-nil, ask the user about the current operation more verbosely."
+ :group 'mime-security
+ :type 'boolean)
+
+(defcustom mml2015-cache-passphrase mml-secure-cache-passphrase
+ "If t, cache passphrase."
+ :group 'mime-security
+ :type 'boolean)
+
+(defcustom mml2015-passphrase-cache-expiry mml-secure-passphrase-cache-expiry
+ "How many seconds the passphrase is cached.
+Whether the passphrase is cached at all is controlled by
+`mml2015-cache-passphrase'."
+ :group 'mime-security
+ :type 'integer)
+
+(defcustom mml2015-signers nil
+ "A list of your own key ID which will be used to sign a message."
+ :group 'mime-security
+ :type '(repeat (string :tag "Key ID")))
+
+(defcustom mml2015-encrypt-to-self nil
+ "If t, add your own key ID to recipient list when encryption."
+ :group 'mime-security
+ :type 'boolean)
+
+(defcustom mml2015-always-trust t
+ "If t, GnuPG skip key validation on encryption."
+ :group 'mime-security
+ :type 'boolean)
+
+;; Extract plaintext from cleartext signature. IMO, this kind of task
+;; should be done by GnuPG rather than Elisp, but older PGP backends
+;; (such as Mailcrypt, PGG, and gpg.el) discard the output from GnuPG.
+(defun mml2015-extract-cleartext-signature ()
+ (goto-char (point-min))
+ (forward-line)
+ ;; We need to be careful not to strip beyond the armor headers.
+ ;; Previously, an attacker could replace the text inside our
+ ;; markup with trailing garbage by injecting whitespace into the
+ ;; message.
+ (while (looking-at "Hash:") ; The only header allowed in cleartext
+ (forward-line)) ; signatures according to RFC2440.
+ (when (looking-at "[\t ]*$")
+ (forward-line))
+ (delete-region (point-min) (point))
+ (if (re-search-forward "^-----BEGIN PGP SIGNATURE-----" nil t)
+ (delete-region (match-beginning 0) (point-max)))
+ (goto-char (point-min))
+ (while (re-search-forward "^- " nil t)
+ (replace-match "" t t)
+ (forward-line 1)))
+
;;; mailcrypt wrapper
(eval-and-compile
@@ -102,9 +173,8 @@
(autoload 'mc-cleanup-recipient-headers "mc-toplev")
(autoload 'mc-sign-generic "mc-toplev"))
-(eval-when-compile
- (defvar mc-default-scheme)
- (defvar mc-schemes))
+(defvar mc-default-scheme)
+(defvar mc-schemes)
(defvar mml2015-decrypt-function 'mailcrypt-decrypt)
(defvar mml2015-verify-function 'mailcrypt-verify)
@@ -278,7 +348,8 @@
(mm-set-handle-multipart-parameter
mm-security-handle 'gnus-info "OK")
(mm-set-handle-multipart-parameter
- mm-security-handle 'gnus-info "Failed"))))
+ mm-security-handle 'gnus-info "Failed")))
+ (mml2015-extract-cleartext-signature))
(defun mml2015-mailcrypt-sign (cont)
(mc-sign-generic (message-options-get 'message-sender)
@@ -475,9 +546,8 @@
(with-temp-buffer
(setq message (current-buffer))
(insert part)
- ;; Convert <LF> to <CR><LF> in verify mode. Sign and
- ;; clearsign use --textmode. The conversion is not necessary.
- ;; In clearverify, the conversion is not necessary either.
+ ;; Convert <LF> to <CR><LF> in signed text. If --textmode is
+ ;; specified when signing, the conversion is not necessary.
(goto-char (point-min))
(end-of-line)
(while (not (eobp))
@@ -545,7 +615,8 @@
(with-current-buffer mml2015-result-buffer
(mml2015-gpg-extract-signature-details)))
(mm-set-handle-multipart-parameter
- mm-security-handle 'gnus-info "Failed")))
+ mm-security-handle 'gnus-info "Failed"))
+ (mml2015-extract-cleartext-signature))
(defun mml2015-gpg-sign (cont)
(let ((boundary (mml-compute-boundary cont))
@@ -635,10 +706,9 @@
;;; pgg wrapper
-(eval-when-compile
- (defvar pgg-default-user-id)
- (defvar pgg-errors-buffer)
- (defvar pgg-output-buffer))
+(defvar pgg-default-user-id)
+(defvar pgg-errors-buffer)
+(defvar pgg-output-buffer)
(eval-and-compile
(autoload 'pgg-decrypt-region "pgg")
@@ -734,9 +804,8 @@
handle)
(with-temp-buffer
(insert part)
- ;; Convert <LF> to <CR><LF> in verify mode. Sign and
- ;; clearsign use --textmode. The conversion is not necessary.
- ;; In clearverify, the conversion is not necessary either.
+ ;; Convert <LF> to <CR><LF> in signed text. If --textmode is
+ ;; specified when signing, the conversion is not necessary.
(goto-char (point-min))
(end-of-line)
(while (not (eobp))
@@ -809,7 +878,8 @@
(with-current-buffer pgg-errors-buffer
(mml2015-gpg-extract-signature-details)))
(mm-set-handle-multipart-parameter
- mm-security-handle 'gnus-info "Failed"))))
+ mm-security-handle 'gnus-info "Failed")))
+ (mml2015-extract-cleartext-signature))
(defun mml2015-pgg-sign (cont)
(let ((pgg-errors-buffer mml2015-result-buffer)
@@ -871,6 +941,397 @@
(insert (format "--%s--\n" boundary))
(goto-char (point-max))))
+;;; epg wrapper
+
+(defvar epg-user-id-alist)
+(defvar epg-digest-algorithm-alist)
+(defvar inhibit-redisplay)
+
+(eval-and-compile
+ (autoload 'epg-make-context "epg")
+ (autoload 'epg-context-set-armor "epg")
+ (autoload 'epg-context-set-textmode "epg")
+ (autoload 'epg-context-set-signers "epg")
+ (autoload 'epg-context-result-for "epg")
+ (autoload 'epg-new-signature-digest-algorithm "epg")
+ (autoload 'epg-verify-result-to-string "epg")
+ (autoload 'epg-list-keys "epg")
+ (autoload 'epg-decrypt-string "epg")
+ (autoload 'epg-verify-string "epg")
+ (autoload 'epg-sign-string "epg")
+ (autoload 'epg-encrypt-string "epg")
+ (autoload 'epg-passphrase-callback-function "epg")
+ (autoload 'epg-context-set-passphrase-callback "epg")
+ (autoload 'epg-key-sub-key-list "epg")
+ (autoload 'epg-sub-key-capability "epg")
+ (autoload 'epg-sub-key-validity "epg")
+ (autoload 'epg-configuration "epg-config")
+ (autoload 'epg-expand-group "epg-config")
+ (autoload 'epa-select-keys "epa"))
+
+(defvar password-cache-expiry)
+
+(eval-when-compile
+ (autoload 'password-read "password")
+ (autoload 'password-cache-add "password")
+ (autoload 'password-cache-remove "password"))
+
+(defvar mml2015-epg-secret-key-id-list nil)
+
+(defun mml2015-epg-passphrase-callback (context key-id ignore)
+ (if (eq key-id 'SYM)
+ (epg-passphrase-callback-function context key-id nil)
+ (let* (entry
+ (passphrase
+ (password-read
+ (if (eq key-id 'PIN)
+ "Passphrase for PIN: "
+ (if (setq entry (assoc key-id epg-user-id-alist))
+ (format "Passphrase for %s %s: " key-id (cdr entry))
+ (format "Passphrase for %s: " key-id)))
+ (if (eq key-id 'PIN)
+ "PIN"
+ key-id))))
+ (when passphrase
+ (let ((password-cache-expiry mml2015-passphrase-cache-expiry))
+ (password-cache-add key-id passphrase))
+ (setq mml2015-epg-secret-key-id-list
+ (cons key-id mml2015-epg-secret-key-id-list))
+ (copy-sequence passphrase)))))
+
+(defun mml2015-epg-find-usable-key (keys usage)
+ (catch 'found
+ (while keys
+ (let ((pointer (epg-key-sub-key-list (car keys))))
+ (while pointer
+ (if (and (memq usage (epg-sub-key-capability (car pointer)))
+ (not (memq (epg-sub-key-validity (car pointer))
+ '(revoked expired))))
+ (throw 'found (car keys)))
+ (setq pointer (cdr pointer))))
+ (setq keys (cdr keys)))))
+
+(defun mml2015-epg-decrypt (handle ctl)
+ (catch 'error
+ (let ((inhibit-redisplay t)
+ context plain child handles result decrypt-status)
+ (unless (setq child (mm-find-part-by-type
+ (cdr handle)
+ "application/octet-stream" nil t))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Corrupted")
+ (throw 'error handle))
+ (setq context (epg-make-context))
+ (if mml2015-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml2015-epg-passphrase-callback))
+ (condition-case error
+ (setq plain (epg-decrypt-string context (mm-get-part child))
+ mml2015-epg-secret-key-id-list nil)
+ (error
+ (while mml2015-epg-secret-key-id-list
+ (password-cache-remove (car mml2015-epg-secret-key-id-list))
+ (setq mml2015-epg-secret-key-id-list
+ (cdr mml2015-epg-secret-key-id-list)))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Failed")
+ (if (eq (car error) 'quit)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details "Quit.")
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details (mml2015-format-error error)))
+ (throw 'error handle)))
+ (with-temp-buffer
+ (insert plain)
+ (goto-char (point-min))
+ (while (search-forward "\r\n" nil t)
+ (replace-match "\n" t t))
+ (setq handles (mm-dissect-buffer t))
+ (mm-destroy-parts handle)
+ (if (epg-context-result-for context 'verify)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info
+ (concat "OK\n"
+ (epg-verify-result-to-string
+ (epg-context-result-for context 'verify))))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "OK"))
+ (if (stringp (car handles))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details
+ (mm-handle-multipart-ctl-parameter handles 'gnus-details))))
+ (if (listp (car handles))
+ handles
+ (list handles)))))
+
+(defun mml2015-epg-clear-decrypt ()
+ (let ((inhibit-redisplay t)
+ (context (epg-make-context))
+ plain)
+ (if mml2015-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml2015-epg-passphrase-callback))
+ (condition-case error
+ (setq plain (epg-decrypt-string context (buffer-string))
+ mml2015-epg-secret-key-id-list nil)
+ (error
+ (while mml2015-epg-secret-key-id-list
+ (password-cache-remove (car mml2015-epg-secret-key-id-list))
+ (setq mml2015-epg-secret-key-id-list
+ (cdr mml2015-epg-secret-key-id-list)))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Failed")
+ (if (eq (car error) 'quit)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details "Quit.")
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details (mml2015-format-error error)))))
+ (when plain
+ (erase-buffer)
+ ;; Treat data which epg returns as a unibyte string.
+ (mm-disable-multibyte)
+ (insert plain)
+ (goto-char (point-min))
+ (while (search-forward "\r\n" nil t)
+ (replace-match "\n" t t))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "OK")
+ (if (epg-context-result-for context 'verify)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details
+ (epg-verify-result-to-string
+ (epg-context-result-for context 'verify)))))))
+
+(defun mml2015-epg-verify (handle ctl)
+ (catch 'error
+ (let ((inhibit-redisplay t)
+ context plain signature-file part signature)
+ (when (or (null (setq part (mm-find-raw-part-by-type
+ ctl (or (mm-handle-multipart-ctl-parameter
+ ctl 'protocol)
+ "application/pgp-signature")
+ t)))
+ (null (setq signature (mm-find-part-by-type
+ (cdr handle) "application/pgp-signature"
+ nil t))))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Corrupted")
+ (throw 'error handle))
+ (setq part (mm-replace-in-string part "\n" "\r\n" t)
+ signature (mm-get-part signature)
+ context (epg-make-context))
+ (condition-case error
+ (setq plain (epg-verify-string context signature part))
+ (error
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Failed")
+ (if (eq (car error) 'quit)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details "Quit.")
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details (mml2015-format-error error)))
+ (throw 'error handle)))
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info
+ (epg-verify-result-to-string (epg-context-result-for context 'verify)))
+ handle)))
+
+(defun mml2015-epg-clear-verify ()
+ (let ((inhibit-redisplay t)
+ (context (epg-make-context))
+ (signature (mm-encode-coding-string (buffer-string)
+ coding-system-for-write))
+ plain)
+ (condition-case error
+ (setq plain (epg-verify-string context signature))
+ (error
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info "Failed")
+ (if (eq (car error) 'quit)
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details "Quit.")
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-details (mml2015-format-error error)))))
+ (if plain
+ (progn
+ (mm-set-handle-multipart-parameter
+ mm-security-handle 'gnus-info
+ (epg-verify-result-to-string
+ (epg-context-result-for context 'verify)))
+ (delete-region (point-min) (point-max))
+ (insert (mm-decode-coding-string plain coding-system-for-read)))
+ (mml2015-extract-cleartext-signature))))
+
+(defun mml2015-epg-sign (cont)
+ (let* ((inhibit-redisplay t)
+ (context (epg-make-context))
+ (boundary (mml-compute-boundary cont))
+ signer-key
+ (signers
+ (or (message-options-get 'mml2015-epg-signers)
+ (message-options-set
+ 'mml2015-epg-signers
+ (if mml2015-verbose
+ (epa-select-keys context "\
+Select keys for signing.
+If no one is selected, default secret key is used. "
+ mml2015-signers t)
+ (if mml2015-signers
+ (mapcar
+ (lambda (signer)
+ (setq signer-key (mml2015-epg-find-usable-key
+ (epg-list-keys context signer t)
+ 'sign))
+ (unless (or signer-key
+ (y-or-n-p
+ (format "No secret key for %s; skip it? "
+ signer)))
+ (error "No secret key for %s" signer))
+ signer-key)
+ mml2015-signers))))))
+ signature micalg)
+ (epg-context-set-armor context t)
+ (epg-context-set-textmode context t)
+ (epg-context-set-signers context signers)
+ (if mml2015-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml2015-epg-passphrase-callback))
+ (condition-case error
+ (setq signature (epg-sign-string context (buffer-string) t)
+ mml2015-epg-secret-key-id-list nil)
+ (error
+ (while mml2015-epg-secret-key-id-list
+ (password-cache-remove (car mml2015-epg-secret-key-id-list))
+ (setq mml2015-epg-secret-key-id-list
+ (cdr mml2015-epg-secret-key-id-list)))
+ (signal (car error) (cdr error))))
+ (if (epg-context-result-for context 'sign)
+ (setq micalg (epg-new-signature-digest-algorithm
+ (car (epg-context-result-for context 'sign)))))
+ (goto-char (point-min))
+ (insert (format "Content-Type: multipart/signed; boundary=\"%s\";\n"
+ boundary))
+ (if micalg
+ (insert (format "\tmicalg=pgp-%s; "
+ (downcase
+ (cdr (assq micalg
+ epg-digest-algorithm-alist))))))
+ (insert "protocol=\"application/pgp-signature\"\n")
+ (insert (format "\n--%s\n" boundary))
+ (goto-char (point-max))
+ (insert (format "\n--%s\n" boundary))
+ (insert "Content-Type: application/pgp-signature\n\n")
+ (insert signature)
+ (goto-char (point-max))
+ (insert (format "--%s--\n" boundary))
+ (goto-char (point-max))))
+
+(defun mml2015-epg-encrypt (cont &optional sign)
+ (let ((inhibit-redisplay t)
+ (context (epg-make-context))
+ (config (epg-configuration))
+ (recipients (message-options-get 'mml2015-epg-recipients))
+ cipher signers
+ (boundary (mml-compute-boundary cont))
+ recipient-key signer-key)
+ (unless recipients
+ (setq recipients
+ (apply #'nconc
+ (mapcar
+ (lambda (recipient)
+ (or (epg-expand-group config recipient)
+ (list (concat "<" recipient ">"))))
+ (split-string
+ (or (message-options-get 'message-recipients)
+ (message-options-set 'message-recipients
+ (read-string "Recipients: ")))
+ "[ \f\t\n\r\v,]+"))))
+ (when mml2015-encrypt-to-self
+ (unless mml2015-signers
+ (error "mml2015-signers not set"))
+ (setq recipients (nconc recipients mml2015-signers)))
+ (if mml2015-verbose
+ (setq recipients
+ (epa-select-keys context "\
+Select recipients for encryption.
+If no one is selected, symmetric encryption will be performed. "
+ recipients))
+ (setq recipients
+ (mapcar
+ (lambda (recipient)
+ (setq recipient-key (mml2015-epg-find-usable-key
+ (epg-list-keys context recipient)
+ 'encrypt))
+ (unless (or recipient-key
+ (y-or-n-p
+ (format "No public key for %s; skip it? "
+ recipient)))
+ (error "No public key for %s" recipient))
+ recipient-key)
+ recipients))
+ (unless recipients
+ (error "No recipient specified")))
+ (message-options-set 'mml2015-epg-recipients recipients))
+ (when sign
+ (setq signers
+ (or (message-options-get 'mml2015-epg-signers)
+ (message-options-set
+ 'mml2015-epg-signers
+ (if mml2015-verbose
+ (epa-select-keys context "\
+Select keys for signing.
+If no one is selected, default secret key is used. "
+ mml2015-signers t)
+ (if mml2015-signers
+ (mapcar
+ (lambda (signer)
+ (setq signer-key (mml2015-epg-find-usable-key
+ (epg-list-keys context signer t)
+ 'sign))
+ (unless (or signer-key
+ (y-or-n-p
+ (format
+ "No secret key for %s; skip it? "
+ signer)))
+ (error "No secret key for %s" signer))
+ signer-key)
+ mml2015-signers))))))
+ (epg-context-set-signers context signers))
+ (epg-context-set-armor context t)
+ (epg-context-set-textmode context t)
+ (if mml2015-cache-passphrase
+ (epg-context-set-passphrase-callback
+ context
+ #'mml2015-epg-passphrase-callback))
+ (condition-case error
+ (setq cipher
+ (epg-encrypt-string context (buffer-string) recipients sign
+ mml2015-always-trust)
+ mml2015-epg-secret-key-id-list nil)
+ (error
+ (while mml2015-epg-secret-key-id-list
+ (password-cache-remove (car mml2015-epg-secret-key-id-list))
+ (setq mml2015-epg-secret-key-id-list
+ (cdr mml2015-epg-secret-key-id-list)))
+ (signal (car error) (cdr error))))
+ (delete-region (point-min) (point-max))
+ (goto-char (point-min))
+ (insert (format "Content-Type: multipart/encrypted; boundary=\"%s\";\n"
+ boundary))
+ (insert "\tprotocol=\"application/pgp-encrypted\"\n\n")
+ (insert (format "--%s\n" boundary))
+ (insert "Content-Type: application/pgp-encrypted\n\n")
+ (insert "Version: 1\n\n")
+ (insert (format "--%s\n" boundary))
+ (insert "Content-Type: application/octet-stream\n\n")
+ (insert cipher)
+ (goto-char (point-max))
+ (insert (format "--%s--\n" boundary))
+ (goto-char (point-max))))
+
;;; General wrapper
(defun mml2015-clean-buffer ()
@@ -879,7 +1340,7 @@
(erase-buffer)
t)
(setq mml2015-result-buffer
- (gnus-get-buffer-create "*MML2015 Result*"))
+ (gnus-get-buffer-create " *MML2015 Result*"))
nil))
(defsubst mml2015-clear-decrypt-function ()
diff --git a/lisp/gnus/nnagent.el b/lisp/gnus/nnagent.el
index 7d11329f81f..0c1dbc6817e 100644
--- a/lisp/gnus/nnagent.el
+++ b/lisp/gnus/nnagent.el
@@ -121,7 +121,7 @@
(gnus-request-accept-article "nndraft:queue" nil t t))
(deffoo nnagent-request-set-mark (group action server)
- (with-temp-buffer
+ (mm-with-unibyte-buffer
(insert "(gnus-agent-synchronize-group-flags \""
group
"\" '")
@@ -130,7 +130,17 @@
(gnus-method-to-server gnus-command-method)
"\"")
(insert ")\n")
- (append-to-file (point-min) (point-max) (gnus-agent-lib-file "flags")))
+ (let ((coding-system-for-write nnheader-file-coding-system))
+ (write-region (point-min) (point-max) (gnus-agent-lib-file "flags")
+ t 'silent)))
+ ;; Also set the marks for the original back end that keeps marks in
+ ;; the local system.
+ (let ((gnus-agent nil))
+ (when (and (memq (car gnus-command-method) '(nntp))
+ (gnus-check-backend-function 'request-set-mark
+ (car gnus-command-method)))
+ (funcall (gnus-get-function gnus-command-method 'request-set-mark)
+ group action server)))
nil)
(deffoo nnagent-retrieve-headers (articles &optional group server fetch-old)
@@ -148,7 +158,8 @@
(pop arts)))
(set-buffer nntp-server-buffer)
(erase-buffer)
- (nnheader-insert-nov-file file (car articles))
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (nnheader-insert-nov-file file (car articles)))
(goto-char (point-min))
(gnus-parse-without-error
(while (and arts (not (eobp)))
@@ -214,10 +225,10 @@
(list (nnagent-server server))))
(deffoo nnagent-request-move-article
- (article group server accept-form &optional last)
+ (article group server accept-form &optional last move-is-internal)
(nnoo-parent-function 'nnagent 'nnml-request-move-article
(list article group (nnagent-server server)
- accept-form last)))
+ accept-form last move-is-internal)))
(deffoo nnagent-request-rename-group (group new-name &optional server)
(nnoo-parent-function 'nnagent 'nnml-request-rename-group
diff --git a/lisp/gnus/nnbabyl.el b/lisp/gnus/nnbabyl.el
index 3f0631c152d..38d4a7227c2 100644
--- a/lisp/gnus/nnbabyl.el
+++ b/lisp/gnus/nnbabyl.el
@@ -70,9 +70,6 @@
(defvoo nnbabyl-previous-buffer-mode nil)
-(eval-and-compile
- (autoload 'gnus-set-text-properties "gnus-ems"))
-
;;; Interface functions
@@ -271,7 +268,7 @@
(save-excursion
(set-buffer nnbabyl-mbox-buffer)
- (gnus-set-text-properties (point-min) (point-max) nil)
+ (set-text-properties (point-min) (point-max) nil)
(while (and articles is-old)
(goto-char (point-min))
(when (search-forward (nnbabyl-article-string (car articles)) nil t)
@@ -308,7 +305,7 @@
(nconc rest articles))))
(deffoo nnbabyl-request-move-article
- (article group server accept-form &optional last)
+ (article group server accept-form &optional last move-is-internal)
(let ((buf (get-buffer-create " *nnbabyl move*"))
result)
(and
diff --git a/lisp/gnus/nndb.el b/lisp/gnus/nndb.el
index e8421cb2074..70d395ba986 100644
--- a/lisp/gnus/nndb.el
+++ b/lisp/gnus/nndb.el
@@ -241,7 +241,7 @@ expiry mechanism."
(nndb-request-expire-articles-local articles group server force)))
(deffoo nndb-request-move-article
- (article group server accept-form &optional last)
+ (article group server accept-form &optional last move-is-internal)
"Move ARTICLE (a number) from GROUP on SERVER.
Evals ACCEPT-FORM in current buffer, where the article is.
Optional LAST is ignored."
diff --git a/lisp/gnus/nndiary.el b/lisp/gnus/nndiary.el
index eaa425239d2..3767828a766 100644
--- a/lisp/gnus/nndiary.el
+++ b/lisp/gnus/nndiary.el
@@ -606,7 +606,7 @@ all. This may very well take some time.")
(nconc rest articles)))
(deffoo nndiary-request-move-article
- (article group server accept-form &optional last)
+ (article group server accept-form &optional last move-is-internal)
(let ((buf (get-buffer-create " *nndiary move*"))
result)
(nndiary-possibly-change-directory group server)
@@ -875,7 +875,7 @@ all. This may very well take some time.")
(search-forward id nil t)) ; We find the ID.
;; And the id is in the fourth field.
(if (not (and (search-backward "\t" nil t 4)
- (not (search-backward"\t" (gnus-point-at-bol) t))))
+ (not (search-backward"\t" (point-at-bol) t))))
(forward-line 1)
(beginning-of-line)
(setq found t)
@@ -1085,7 +1085,7 @@ all. This may very well take some time.")
(unless no-active
(nnmail-save-active nndiary-group-alist nndiary-active-file))))))
-(eval-when-compile (defvar files))
+(defvar files)
(defun nndiary-generate-active-info (dir)
;; Update the active info for this group.
(let* ((group (nnheader-file-to-group
@@ -1096,9 +1096,7 @@ all. This may very well take some time.")
(push (list group
(cons (or (caar files) (1+ last))
(max last
- (or (let ((f files))
- (while (cdr f) (setq f (cdr f)))
- (caar f))
+ (or (caar (last files))
0))))
nndiary-group-alist)))
@@ -1577,13 +1575,11 @@ all. This may very well take some time.")
;; The end... ===============================================================
-(mapcar
- (lambda (elt)
- (let ((header (intern (format "X-Diary-%s" (car elt)))))
- ;; Required for building NOV databases and some other stuff
- (add-to-list 'gnus-extra-headers header)
- (add-to-list 'nnmail-extra-headers header)))
- nndiary-headers)
+(dolist (header nndiary-headers)
+ (setq header (intern (format "X-Diary-%s" (car header))))
+ ;; Required for building NOV databases and some other stuff.
+ (add-to-list 'gnus-extra-headers header)
+ (add-to-list 'nnmail-extra-headers header))
(unless (assoc "nndiary" gnus-valid-select-methods)
(gnus-declare-backend "nndiary" 'post-mail 'respool 'address))
diff --git a/lisp/gnus/nndoc.el b/lisp/gnus/nndoc.el
index ea32a8f4183..1de9a2083b0 100644
--- a/lisp/gnus/nndoc.el
+++ b/lisp/gnus/nndoc.el
@@ -122,7 +122,7 @@ from the document.")
(subtype digest guess))
(lanl-gov-announce
(article-begin . "^\\\\\\\\\n")
- (head-begin . "^Paper.*:")
+ (head-begin . "^\\(Paper.*:\\|arXiv:\\)")
(head-end . "\\(^\\\\\\\\.*\n\\|-----------------\\)")
(body-begin . "")
(body-end . "\\(-------------------------------------------------\\|%-%-%-%-%-%-%-%-%-%-%-%-%-%-\\|%%--%%--%%--%%--%%--%%--%%--%%--\\|%%%---%%%---%%%---%%%---\\)")
@@ -624,25 +624,28 @@ from the document.")
(defun nndoc-lanl-gov-announce-type-p ()
(when (let ((case-fold-search nil))
- (re-search-forward "^\\\\\\\\\nPaper\\( (\\*cross-listing\\*)\\)?: [a-zA-Z-\\.]+/[0-9]+" nil t))
+ (re-search-forward "^\\\\\\\\\n\\(Paper\\( (\\*cross-listing\\*)\\)?: [a-zA-Z-\\.]+/[0-9]+\\|arXiv:\\)" nil t))
t))
(defun nndoc-transform-lanl-gov-announce (article)
- (goto-char (point-max))
- (when (re-search-backward "^\\\\\\\\ +( *\\([^ ]*\\) , *\\([^ ]*\\))" nil t)
- (replace-match "\n\nGet it at \\1 (\\2)" t nil))
- (goto-char (point-min))
- (while (re-search-forward "^\\\\\\\\$" nil t)
- (replace-match "" t nil))
- (goto-char (point-min))
- (when (re-search-forward "^replaced with revised version +\\(.*[^ ]\\) +" nil t)
- (replace-match "Date: \\1 (revised) " t nil))
- (goto-char (point-min))
- (unless (re-search-forward "^From" nil t)
+ (let ((case-fold-search nil))
+ (goto-char (point-max))
+ (when (re-search-backward "^\\\\\\\\ +( *\\([^ ]*\\) , *\\([^ ]*\\))" nil t)
+ (replace-match "\n\nGet it at \\1 (\\2)" t nil))
(goto-char (point-min))
- (when (re-search-forward "^Authors?: \\(.*\\)" nil t)
+ (while (re-search-forward "^\\\\\\\\$" nil t)
+ (replace-match "" t nil))
+ (goto-char (point-min))
+ (when (re-search-forward "^replaced with revised version +\\(.*[^ ]\\) +" nil t)
+ (replace-match "Date: \\1 (revised) " t nil))
+ (goto-char (point-min))
+ (unless (re-search-forward "^From" nil t)
(goto-char (point-min))
- (insert "From: " (match-string 1) "\n"))))
+ (when (re-search-forward "^Authors?: \\(.*\\)" nil t)
+ (goto-char (point-min))
+ (insert "From: " (match-string 1) "\n")))
+ (when (re-search-forward "^arXiv:" nil t)
+ (replace-match "Paper: arXiv:" t nil))))
(defun nndoc-generate-lanl-gov-head (article)
(let ((entry (cdr (assq article nndoc-dissection-alist)))
@@ -653,8 +656,8 @@ from the document.")
(save-restriction
(narrow-to-region (car entry) (nth 1 entry))
(goto-char (point-min))
- (when (looking-at "^Paper.*: \\([a-zA-Z-\\.]+/[0-9]+\\)")
- (setq subject (concat " (" (match-string 1) ")"))
+ (when (looking-at "^\\(Paper.*: \\|arXiv:\\)\\([0-9a-zA-Z-\\./]+\\)")
+ (setq subject (concat " (" (match-string 2) ")"))
(when (re-search-forward "^From: \\(.*\\)" nil t)
(setq from (concat "<"
(cadr (funcall gnus-extract-address-components
diff --git a/lisp/gnus/nndraft.el b/lisp/gnus/nndraft.el
index 37bd3c1aa96..7fc0993a520 100644
--- a/lisp/gnus/nndraft.el
+++ b/lisp/gnus/nndraft.el
@@ -42,6 +42,11 @@
"Where nndraft will store its files."
nnmh-directory)
+(defvar nndraft-required-headers '(Date)
+ "*Headers to be generated when saving a draft message.
+The headers in this variable and the ones in `message-required-headers'
+are generated if and only if they are also in `message-draft-headers'.")
+
(defvoo nndraft-current-group "" nil nnmh-current-group)
@@ -156,7 +161,7 @@
(save-excursion
(message-generate-headers
(message-headers-to-generate
- message-required-headers message-draft-headers nil))))
+ nndraft-required-headers message-draft-headers nil))))
(deffoo nndraft-request-associate-buffer (group)
"Associate the current buffer with some article in the draft group."
@@ -199,8 +204,8 @@
'nnmh-request-group
(list group server dont-check)))
-(deffoo nndraft-request-move-article (article group server
- accept-form &optional last)
+(deffoo nndraft-request-move-article (article group server accept-form
+ &optional last move-is-internal)
(nndraft-possibly-change-group group)
(let ((buf (get-buffer-create " *nndraft move*"))
result)
diff --git a/lisp/gnus/nneething.el b/lisp/gnus/nneething.el
index 8d1fa98d81f..143ddcfdf62 100644
--- a/lisp/gnus/nneething.el
+++ b/lisp/gnus/nneething.el
@@ -423,7 +423,7 @@ included.")
(if (numberp article)
(if (setq fname (cadr (assq article nneething-map)))
(expand-file-name fname dir)
- (mm-make-temp-file (expand-file-name "nneething" dir)))
+ (make-temp-name (expand-file-name "nneething" dir)))
(expand-file-name article dir))))
(provide 'nneething)
diff --git a/lisp/gnus/nnfolder.el b/lisp/gnus/nnfolder.el
index 4127f11463e..bf82791fea6 100644
--- a/lisp/gnus/nnfolder.el
+++ b/lisp/gnus/nnfolder.el
@@ -203,7 +203,7 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(goto-char (match-end 0))
(setq num (string-to-number
(buffer-substring
- (point) (gnus-point-at-eol))))
+ (point) (point-at-eol))))
(goto-char start)
(< num article)))
;; Check that we are before an article with a
@@ -213,7 +213,7 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(progn
(setq num (string-to-number
(buffer-substring
- (point) (gnus-point-at-eol))))
+ (point) (point-at-eol))))
(> num article))
;; Discard any article numbers before the one we're
;; now looking at.
@@ -287,31 +287,36 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(if (search-forward (concat "\n" nnfolder-article-marker)
nil t)
(string-to-number (buffer-substring
- (point) (gnus-point-at-eol)))
+ (point) (point-at-eol)))
-1))))))))
(deffoo nnfolder-request-group (group &optional server dont-check)
(nnfolder-possibly-change-group group server t)
(save-excursion
- (if (not (assoc group nnfolder-group-alist))
- (nnheader-report 'nnfolder "No such group: %s" group)
- (if dont-check
- (progn
- (nnheader-report 'nnfolder "Selected group %s" group)
- t)
- (let* ((active (assoc group nnfolder-group-alist))
- (group (car active))
- (range (cadr active)))
- (cond
- ((null active)
- (nnheader-report 'nnfolder "No such group: %s" group))
- ((null nnfolder-current-group)
- (nnheader-report 'nnfolder "Empty group: %s" group))
- (t
- (nnheader-report 'nnfolder "Selected group %s" group)
- (nnheader-insert "211 %d %d %d %s\n"
- (1+ (- (cdr range) (car range)))
- (car range) (cdr range) group))))))))
+ (cond ((not (assoc group nnfolder-group-alist))
+ (nnheader-report 'nnfolder "No such group: %s" group))
+ ((file-directory-p (nnfolder-group-pathname group))
+ (nnheader-report 'nnfolder "%s is a directory"
+ (file-name-as-directory
+ (let ((nnmail-pathname-coding-system nil))
+ (nnfolder-group-pathname group)))))
+ (dont-check
+ (nnheader-report 'nnfolder "Selected group %s" group)
+ t)
+ (t
+ (let* ((active (assoc group nnfolder-group-alist))
+ (group (car active))
+ (range (cadr active)))
+ (cond
+ ((null active)
+ (nnheader-report 'nnfolder "No such group: %s" group))
+ ((null nnfolder-current-group)
+ (nnheader-report 'nnfolder "Empty group: %s" group))
+ (t
+ (nnheader-report 'nnfolder "Selected group %s" group)
+ (nnheader-insert "211 %d %d %d %s\n"
+ (1+ (- (cdr range) (car range)))
+ (car range) (cdr range) group))))))))
(deffoo nnfolder-request-scan (&optional group server)
(nnfolder-possibly-change-group nil server)
@@ -371,13 +376,21 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(deffoo nnfolder-request-create-group (group &optional server args)
(nnfolder-possibly-change-group nil server)
(nnmail-activate 'nnfolder)
- (when (and group
- (not (assoc group nnfolder-group-alist)))
- (push (list group (cons 1 0)) nnfolder-group-alist)
- (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
- (save-current-buffer
- (nnfolder-read-folder group)))
- t)
+ (cond ((zerop (length group))
+ (nnheader-report 'nnfolder "Invalid (empty) group name"))
+ ((file-directory-p (nnfolder-group-pathname group))
+ (nnheader-report 'nnfolder "%s is a directory"
+ (file-name-as-directory
+ (let ((nnmail-pathname-coding-system nil))
+ (nnfolder-group-pathname group)))))
+ ((assoc group nnfolder-group-alist)
+ t)
+ (t
+ (push (list group (cons 1 0)) nnfolder-group-alist)
+ (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+ (save-current-buffer
+ (nnfolder-read-folder group))
+ t)))
(deffoo nnfolder-request-list (&optional server)
(nnfolder-possibly-change-group nil server)
@@ -416,16 +429,17 @@ the group. Then the marks file will be regenerated properly by Gnus.")
;; The article numbers are increasing, so this result is sorted.
(nreverse numbers)))))
-(deffoo nnfolder-request-expire-articles
- (articles newsgroup &optional server force)
+(deffoo nnfolder-request-expire-articles (articles newsgroup
+ &optional server force)
(nnfolder-possibly-change-group newsgroup server)
- (let* ((is-old t)
- ;; The articles we have deleted so far.
- (deleted-articles nil)
- ;; The articles that really exist and will
- ;; be expired if they are old enough.
- (maybe-expirable
- (gnus-sorted-intersection articles (nnfolder-existing-articles))))
+ (let ((is-old t)
+ ;; The articles we have deleted so far.
+ (deleted-articles nil)
+ ;; The articles that really exist and will
+ ;; be expired if they are old enough.
+ (maybe-expirable
+ (gnus-sorted-intersection articles (nnfolder-existing-articles)))
+ target)
(nnmail-activate 'nnfolder)
(save-excursion
@@ -445,21 +459,28 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(buffer-substring
(point) (progn (end-of-line) (point)))
force nnfolder-inhibit-expiry))
- (unless (eq nnmail-expiry-target 'delete)
+ (setq target nnmail-expiry-target)
+ (unless (eq target 'delete)
(with-temp-buffer
(nnfolder-request-article (car maybe-expirable)
newsgroup server (current-buffer))
(let ((nnfolder-current-directory nil))
- (nnmail-expiry-target-group
- nnmail-expiry-target newsgroup)))
+ (when (functionp target)
+ (setq target (funcall target newsgroup)))
+ (if (and target
+ (or (gnus-request-group target)
+ (gnus-request-create-group target)))
+ (nnmail-expiry-target-group target newsgroup)
+ (setq target nil))))
(nnfolder-possibly-change-group newsgroup server))
- (nnheader-message 5 "Deleting article %d in %s..."
- (car maybe-expirable) newsgroup)
- (nnfolder-delete-mail)
- (unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
- (nnfolder-nov-delete-article newsgroup (car maybe-expirable)))
- ;; Must remember which articles were actually deleted
- (push (car maybe-expirable) deleted-articles)))
+ (when target
+ (nnheader-message 5 "Deleting article %d in %s..."
+ (car maybe-expirable) newsgroup)
+ (nnfolder-delete-mail)
+ (unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
+ (nnfolder-nov-delete-article newsgroup (car maybe-expirable)))
+ ;; Must remember which articles were actually deleted
+ (push (car maybe-expirable) deleted-articles))))
(setq maybe-expirable (cdr maybe-expirable)))
(unless nnfolder-inhibit-expiry
(nnheader-message 5 "Deleting articles...done"))
@@ -468,8 +489,8 @@ the group. Then the marks file will be regenerated properly by Gnus.")
(nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
(gnus-sorted-difference articles (nreverse deleted-articles)))))
-(deffoo nnfolder-request-move-article (article group server
- accept-form &optional last)
+(deffoo nnfolder-request-move-article (article group server accept-form
+ &optional last move-is-internal)
(save-excursion
(let ((buf (get-buffer-create " *nnfolder move*"))
result)
@@ -1029,9 +1050,7 @@ This command does not work if you use short group names."
(when (not (message-mail-file-mbox-p file))
(ignore-errors
(delete-file file)))))
- (let ((files (directory-files nnfolder-directory))
- file)
- (while (setq file (pop files))
+ (dolist (file (directory-files nnfolder-directory))
(when (and (not (backup-file-name-p file))
(message-mail-file-mbox-p
(nnheader-concat nnfolder-directory file)))
@@ -1046,7 +1065,7 @@ This command does not work if you use short group names."
(nnfolder-possibly-change-folder file)
(nnfolder-possibly-change-group file)
(nnfolder-close-group file))))
- (nnheader-message 5 "")))
+ (nnheader-message 5 ""))
(defun nnfolder-group-pathname (group)
"Make file name for GROUP."
@@ -1073,7 +1092,8 @@ This command does not work if you use short group names."
(gnus-make-directory (file-name-directory (buffer-file-name)))
(let ((coding-system-for-write
(or nnfolder-file-coding-system-for-write
- nnfolder-file-coding-system)))
+ nnfolder-file-coding-system))
+ (copyright-update nil))
(save-buffer)))
(unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
(nnfolder-save-nov)))
@@ -1197,16 +1217,16 @@ This command does not work if you use short group names."
(nnheader-message 8 "Updating marks for %s..." group)
(nnfolder-open-marks group server)
;; Update info using `nnfolder-marks'.
- (mapcar (lambda (pred)
- (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
- (gnus-info-set-marks
- info
- (gnus-update-alist-soft
- (cdr pred)
- (cdr (assq (cdr pred) nnfolder-marks))
- (gnus-info-marks info))
- t)))
- gnus-article-mark-lists)
+ (mapc (lambda (pred)
+ (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
+ (gnus-info-set-marks
+ info
+ (gnus-update-alist-soft
+ (cdr pred)
+ (cdr (assq (cdr pred) nnfolder-marks))
+ (gnus-info-marks info))
+ t)))
+ gnus-article-mark-lists)
(let ((seen (cdr (assq 'read nnfolder-marks))))
(gnus-info-set-read info
(if (and (integerp (car seen))
diff --git a/lisp/gnus/nnheader.el b/lisp/gnus/nnheader.el
index aa19967b412..11cb4bff55c 100644
--- a/lisp/gnus/nnheader.el
+++ b/lisp/gnus/nnheader.el
@@ -32,6 +32,9 @@
(eval-when-compile (require 'cl))
(defvar nnmail-extra-headers)
+(defvar gnus-newsgroup-name)
+(defvar nnheader-file-coding-system)
+(defvar jka-compr-compression-info-list)
;; Requiring `gnus-util' at compile time creates a circular
;; dependency between nnheader.el and gnus-util.el.
@@ -115,7 +118,6 @@ on your system, you could say something like:
(autoload 'nnmail-message-id "nnmail")
(autoload 'mail-position-on-field "sendmail")
(autoload 'message-remove-header "message")
- (autoload 'gnus-point-at-eol "gnus-util")
(autoload 'gnus-buffer-live-p "gnus-util"))
;;; Header access macros.
@@ -209,9 +211,9 @@ on your system, you could say something like:
"Return the extra headers in HEADER."
`(aref ,header 9))
-(defmacro mail-header-set-extra (header extra)
+(defun mail-header-set-extra (header extra)
"Set the extra headers in HEADER to EXTRA."
- `(aset ,header 9 ',extra))
+ (aset header 9 extra))
(defsubst make-mail-header (&optional init)
"Create a new mail header structure initialized with INIT."
@@ -227,12 +229,16 @@ on your system, you could say something like:
(defvar nnheader-fake-message-id 1)
-(defsubst nnheader-generate-fake-message-id ()
- (concat "fake+none+" (int-to-string (incf nnheader-fake-message-id))))
+(defsubst nnheader-generate-fake-message-id (&optional number)
+ (if (numberp number)
+ (format "fake+none+%s+%d" gnus-newsgroup-name number)
+ (format "fake+none+%s+%s"
+ gnus-newsgroup-name
+ (int-to-string (incf nnheader-fake-message-id)))))
(defsubst nnheader-fake-message-id-p (id)
(save-match-data ; regular message-id's are <.*>
- (string-match "\\`fake\\+none\\+[0-9]+\\'" id)))
+ (string-match "\\`fake\\+none\\+.*\\+[0-9]+\\'" id)))
;; Parsing headers and NOV lines.
@@ -243,7 +249,7 @@ on your system, you could say something like:
(defsubst nnheader-header-value ()
(skip-chars-forward " \t")
- (buffer-substring (point) (gnus-point-at-eol)))
+ (buffer-substring (point) (point-at-eol)))
(defun nnheader-parse-naked-head (&optional number)
;; This function unfolds continuation lines in this buffer
@@ -289,12 +295,12 @@ on your system, you could say something like:
(goto-char p)
(if (search-forward "\nmessage-id:" nil t)
(buffer-substring
- (1- (or (search-forward "<" (gnus-point-at-eol) t)
+ (1- (or (search-forward "<" (point-at-eol) t)
(point)))
- (or (search-forward ">" (gnus-point-at-eol) t) (point)))
+ (or (search-forward ">" (point-at-eol) t) (point)))
;; If there was no message-id, we just fake one to make
;; subsequent routines simpler.
- (nnheader-generate-fake-message-id)))
+ (nnheader-generate-fake-message-id number)))
;; References.
(progn
(goto-char p)
@@ -392,20 +398,29 @@ on your system, you could say something like:
out)))
out))
-(defmacro nnheader-nov-read-message-id ()
- '(let ((id (nnheader-nov-field)))
+(eval-and-compile
+ (defvar nnheader-uniquify-message-id nil))
+
+(defmacro nnheader-nov-read-message-id (&optional number)
+ `(let ((id (nnheader-nov-field)))
(if (string-match "^<[^>]+>$" id)
- id
- (nnheader-generate-fake-message-id))))
+ ,(if nnheader-uniquify-message-id
+ `(if (string-match "__[^@]+@" id)
+ (concat (substring id 0 (match-beginning 0))
+ (substring id (1- (match-end 0))))
+ id)
+ 'id)
+ (nnheader-generate-fake-message-id ,number))))
(defun nnheader-parse-nov ()
- (let ((eol (gnus-point-at-eol)))
+ (let ((eol (point-at-eol))
+ (number (nnheader-nov-read-integer)))
(vector
- (nnheader-nov-read-integer) ; number
+ number ; number
(nnheader-nov-field) ; subject
(nnheader-nov-field) ; from
(nnheader-nov-field) ; date
- (nnheader-nov-read-message-id) ; id
+ (nnheader-nov-read-message-id number) ; id
(nnheader-nov-field) ; refs
(nnheader-nov-read-integer) ; chars
(nnheader-nov-read-integer) ; lines
@@ -628,7 +643,7 @@ the line could be found."
;; This is invalid, but not all articles have Message-IDs.
()
(mail-position-on-field "References")
- (let ((begin (gnus-point-at-bol))
+ (let ((begin (point-at-bol))
(fill-column 78)
(fill-prefix "\t"))
(when references
@@ -662,6 +677,14 @@ the line could be found."
(point-max)))
(goto-char (point-min)))
+(defun nnheader-get-lines-and-char ()
+ "Return the number of lines and chars in the article body."
+ (goto-char (point-min))
+ (if (not (re-search-forward "\n\r?\n" nil t))
+ (list 0 0)
+ (list (count-lines (point) (point-max))
+ (- (point-max) (point)))))
+
(defun nnheader-remove-body ()
"Remove the body from an article in this current buffer."
(goto-char (point-min))
@@ -676,7 +699,6 @@ the line could be found."
(erase-buffer))
(current-buffer))
-(eval-when-compile (defvar jka-compr-compression-info-list))
(defvar nnheader-numerical-files
(if (boundp 'jka-compr-compression-info-list)
(concat "\\([0-9]+\\)\\("
@@ -701,8 +723,7 @@ the line could be found."
(defvar nnheader-directory-files-is-safe
(or (eq system-type 'windows-nt)
- (and (not (featurep 'xemacs))
- (> emacs-major-version 20)))
+ (not (featurep 'xemacs)))
"If non-nil, Gnus believes `directory-files' is safe.
It has been reported numerous times that `directory-files' fails with
an alarming frequency on NFS mounted file systems. If it is nil,
@@ -848,7 +869,9 @@ without formatting."
"Message if the Gnus backends are talkative."
(if (or (not (numberp gnus-verbose-backends))
(<= level gnus-verbose-backends))
- (apply 'message args)
+ (if gnus-add-timestamp-to-message
+ (apply 'gnus-message-with-timestamp args)
+ (apply 'message args))
(apply 'format args)))
(defun nnheader-be-verbose (level)
@@ -918,9 +941,8 @@ first. Otherwise, find the newest one, though it may take a time."
(car results)
(car (sort results 'file-newer-than-file-p)))))
-(eval-when-compile
- (defvar ange-ftp-path-format)
- (defvar efs-path-regexp))
+(defvar ange-ftp-path-format)
+(defvar efs-path-regexp)
(defun nnheader-re-read-dir (path)
"Re-read directory PATH if PATH is on a remote system."
(if (and (fboundp 'efs-re-read-dir) (boundp 'efs-path-regexp))
@@ -972,6 +994,7 @@ See `find-file-noselect' for the arguments."
(after-insert-file-functions nil)
(enable-local-eval nil)
(coding-system-for-read nnheader-file-coding-system)
+ (version-control 'never)
(ffh (if (boundp 'find-file-hook)
'find-file-hook
'find-file-hooks))
@@ -1033,7 +1056,6 @@ See `find-file-noselect' for the arguments."
"Strip all \r's from the current buffer."
(nnheader-skeleton-replace "\r"))
-(defalias 'nnheader-run-at-time 'run-at-time)
(defalias 'nnheader-cancel-timer 'cancel-timer)
(defalias 'nnheader-cancel-function-timers 'cancel-function-timers)
(defalias 'nnheader-string-as-multibyte 'string-as-multibyte)
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index dad6758300b..9b0fab70469 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -250,10 +250,15 @@ it O(n). If p is small, then the default is probably faster."
:type 'boolean
:group 'nnimap)
-(defvoo nnimap-need-unselect-to-notice-new-mail nil
+(defvoo nnimap-need-unselect-to-notice-new-mail t
"Unselect mailboxes before looking for new mail in them.
Some servers seem to need this under some circumstances.")
+(defvoo nnimap-logout-timeout nil
+ "Close server immediately if it can't logout in this number of seconds.
+If it is nil, never close server until logout completes. This variable
+overrides `imap-logout-timeout' on a per-server basis.")
+
;; Authorization / Privacy variables
(defvoo nnimap-auth-method nil
@@ -417,6 +422,43 @@ just like \"ticked\" articles, in other IMAP clients.")
If this is 'imap-mailbox-lsub, then use a server-side subscription list to
restrict visible folders.")
+(defcustom nnimap-id nil
+ "Plist with client identity to send to server upon login.
+Nil means no information is sent, symbol `no' to disable ID query
+alltogheter, or plist with identifier-value pairs to send to
+server. RFC 2971 describes the list as follows:
+
+ Any string may be sent as a field, but the following are defined to
+ describe certain values that might be sent. Implementations are free
+ to send none, any, or all of these. Strings are not case-sensitive.
+ Field strings MUST NOT be longer than 30 octets. Value strings MUST
+ NOT be longer than 1024 octets. Implementations MUST NOT send more
+ than 30 field-value pairs.
+
+ name Name of the program
+ version Version number of the program
+ os Name of the operating system
+ os-version Version of the operating system
+ vendor Vendor of the client/server
+ support-url URL to contact for support
+ address Postal address of contact/vendor
+ date Date program was released, specified as a date-time
+ in IMAP4rev1
+ command Command used to start the program
+ arguments Arguments supplied on the command line, if any
+ if any
+ environment Description of environment, i.e., UNIX environment
+ variables or Windows registry settings
+
+ Implementations MUST NOT send the same field name more than once.
+
+An example plist would be '(\"name\" \"Gnus\" \"version\" gnus-version-number
+\"os\" system-configuration \"vendor\" \"GNU\")."
+ :group 'nnimap
+ :type '(choice (const :tag "No information" nil)
+ (const :tag "Disable ID query" no)
+ (plist :key-type string :value-type string)))
+
(defcustom nnimap-debug nil
"If non-nil, random debug spews are placed in *nnimap-debug* buffer.
Note that username, passwords and other privacy sensitive
@@ -451,6 +493,14 @@ variable unless you are comfortable with that."
"Return buffer for SERVER, if nil use current server."
(cadr (assoc (or server nnimap-current-server) nnimap-server-buffer-alist)))
+(defun nnimap-remove-server-from-buffer-alist (server list)
+ "Remove SERVER from LIST."
+ (let (l)
+ (dolist (e list)
+ (unless (equal server (car-safe e))
+ (push e l)))
+ l))
+
(defun nnimap-possibly-change-server (server)
"Return buffer for SERVER, changing the current server as a side-effect.
If SERVER is nil, uses the current server."
@@ -569,7 +619,7 @@ If EXAMINE is non-nil the group is selected read-only."
(with-temp-buffer
(buffer-disable-undo)
(insert headers)
- (let ((head (nnheader-parse-naked-head)))
+ (let ((head (nnheader-parse-naked-head uid)))
(mail-header-set-number head uid)
(mail-header-set-chars head chars)
(mail-header-set-lines head lines)
@@ -730,6 +780,8 @@ If EXAMINE is non-nil the group is selected read-only."
'nov)))
(defun nnimap-open-connection (server)
+ ;; Note: `nnimap-open-server' that calls this function binds
+ ;; `imap-logout-timeout' to `nnimap-logout-timeout'.
(if (not (imap-open nnimap-address nnimap-server-port nnimap-stream
nnimap-authenticator nnimap-server-buffer))
(nnheader-report 'nnimap "Can't open connection to server %s" server)
@@ -739,26 +791,35 @@ If EXAMINE is non-nil the group is selected read-only."
(nnheader-report 'nnimap "Server %s is not IMAP4 compliant" server))
(let* ((list (progn (gnus-message 7 "Parsing authinfo file `%s'."
nnimap-authinfo-file)
- (gnus-parse-netrc nnimap-authinfo-file)))
- (port (if nnimap-server-port
- (int-to-string nnimap-server-port)
- "imap"))
- (alist (or (gnus-netrc-machine list server port "imap")
- (gnus-netrc-machine list server port "imaps")
- (gnus-netrc-machine list
- (or nnimap-server-address
- nnimap-address)
- port "imap")
- (gnus-netrc-machine list
- (or nnimap-server-address
- nnimap-address)
- port "imaps")))
- (user (gnus-netrc-get alist "login"))
- (passwd (gnus-netrc-get alist "password")))
+ (netrc-parse nnimap-authinfo-file)))
+ (port (if nnimap-server-port
+ (int-to-string nnimap-server-port)
+ "imap"))
+ (user (netrc-machine-user-or-password
+ "login"
+ list
+ (list server
+ (or nnimap-server-address
+ nnimap-address))
+ (list port)
+ (list "imap" "imaps")))
+ (passwd (netrc-machine-user-or-password
+ "password"
+ list
+ (list server
+ (or nnimap-server-address
+ nnimap-address))
+ (list port)
+ (list "imap" "imaps"))))
(if (imap-authenticate user passwd nnimap-server-buffer)
- (prog1
+ (prog2
+ (setq nnimap-server-buffer-alist
+ (nnimap-remove-server-from-buffer-alist
+ server
+ nnimap-server-buffer-alist))
(push (list server nnimap-server-buffer)
nnimap-server-buffer-alist)
+ (imap-id nnimap-id nnimap-server-buffer)
(nnimap-possibly-change-server server))
(imap-close nnimap-server-buffer)
(kill-buffer nnimap-server-buffer)
@@ -782,14 +843,15 @@ If EXAMINE is non-nil the group is selected read-only."
(setq nnimap-server-buffer (cadr (assq 'nnimap-server-buffer defs))))
(with-current-buffer (get-buffer-create nnimap-server-buffer)
(nnoo-change-server 'nnimap server defs))
- (or (and nnimap-server-buffer
- (imap-opened nnimap-server-buffer)
- (if (with-current-buffer nnimap-server-buffer
- (memq imap-state '(auth select examine)))
- t
- (imap-close nnimap-server-buffer)
- (nnimap-open-connection server)))
- (nnimap-open-connection server))))
+ (let ((imap-logout-timeout nnimap-logout-timeout))
+ (or (and nnimap-server-buffer
+ (imap-opened nnimap-server-buffer)
+ (if (with-current-buffer nnimap-server-buffer
+ (memq imap-state '(auth selected examine)))
+ t
+ (imap-close nnimap-server-buffer)
+ (nnimap-open-connection server)))
+ (nnimap-open-connection server)))))
(deffoo nnimap-server-opened (&optional server)
"Whether SERVER is opened.
@@ -804,7 +866,8 @@ SERVER is nil, it is treated as the current server."
(deffoo nnimap-close-server (&optional server)
"Close connection to server and free all resources connected to it.
Return nil if the server couldn't be closed for some reason."
- (let ((server (or server nnimap-current-server)))
+ (let ((server (or server nnimap-current-server))
+ (imap-logout-timeout nnimap-logout-timeout))
(when (or (nnimap-server-opened server)
(imap-opened (nnimap-get-server-buffer server)))
(imap-close (nnimap-get-server-buffer server))
@@ -812,7 +875,9 @@ Return nil if the server couldn't be closed for some reason."
(setq nnimap-server-buffer nil
nnimap-current-server nil
nnimap-server-buffer-alist
- (delq server nnimap-server-buffer-alist)))
+ (nnimap-remove-server-from-buffer-alist
+ server
+ nnimap-server-buffer-alist)))
(nnoo-close-server 'nnimap server)))
(deffoo nnimap-request-close ()
@@ -820,8 +885,8 @@ Return nil if the server couldn't be closed for some reason."
All buffers that have been created by that
backend should be killed. (Not the nntp-server-buffer, though.) This
function is generally only called when Gnus is shutting down."
- (mapcar (lambda (server) (nnimap-close-server (car server)))
- nnimap-server-buffer-alist)
+ (mapc (lambda (server) (nnimap-close-server (car server)))
+ nnimap-server-buffer-alist)
(setq nnimap-server-buffer-alist nil))
(deffoo nnimap-status-message (&optional server)
@@ -1142,20 +1207,19 @@ function is generally only called when Gnus is shutting down."
seen))
(gnus-info-set-read info seen)))
- (mapcar (lambda (pred)
- (when (or (eq (cdr pred) 'recent)
- (and (nnimap-mark-permanent-p (cdr pred))
- (member (nnimap-mark-to-flag (cdr pred))
- (imap-mailbox-get 'flags))))
- (gnus-info-set-marks
- info
- (gnus-update-alist-soft
- (cdr pred)
- (gnus-compress-sequence
- (imap-search (nnimap-mark-to-predicate (cdr pred))))
- (gnus-info-marks info))
- t)))
- gnus-article-mark-lists)
+ (dolist (pred gnus-article-mark-lists)
+ (when (or (eq (cdr pred) 'recent)
+ (and (nnimap-mark-permanent-p (cdr pred))
+ (member (nnimap-mark-to-flag (cdr pred))
+ (imap-mailbox-get 'flags))))
+ (gnus-info-set-marks
+ info
+ (gnus-update-alist-soft
+ (cdr pred)
+ (gnus-compress-sequence
+ (imap-search (nnimap-mark-to-predicate (cdr pred))))
+ (gnus-info-marks info))
+ t)))
(when nnimap-importantize-dormant
;; nnimap mark dormant article as ticked too (for other clients)
@@ -1207,11 +1271,11 @@ function is generally only called when Gnus is shutting down."
(if (memq 'dormant cmdmarks)
(setq cmdmarks (cons 'tick cmdmarks))))
;; remove stuff we are forbidden to store
- (mapcar (lambda (mark)
- (if (imap-message-flag-permanent-p
- (nnimap-mark-to-flag mark))
- (setq marks (cons mark marks))))
- cmdmarks)
+ (mapc (lambda (mark)
+ (if (imap-message-flag-permanent-p
+ (nnimap-mark-to-flag mark))
+ (setq marks (cons mark marks))))
+ cmdmarks)
(when (and range marks)
(cond ((eq what 'del)
(imap-message-flags-del
@@ -1472,8 +1536,8 @@ function is generally only called when Gnus is shutting down."
;; return articles not deleted
articles)
-(deffoo nnimap-request-move-article (article group server
- accept-form &optional last)
+(deffoo nnimap-request-move-article (article group server accept-form
+ &optional last move-is-internal)
(when (nnimap-possibly-change-server server)
(save-excursion
(let ((buf (get-buffer-create " *nnimap move*"))
@@ -1481,7 +1545,13 @@ function is generally only called when Gnus is shutting down."
(nnimap-current-move-group group)
(nnimap-current-move-server nnimap-current-server)
result)
- (and (nnimap-request-article article group server)
+ (gnus-message 10 "nnimap-request-move-article: this is an %s move"
+ (if move-is-internal
+ "internal"
+ "external"))
+ ;; request the article only when the move is NOT internal
+ (and (or move-is-internal
+ (nnimap-request-article article group server))
(save-excursion
(set-buffer buf)
(buffer-disable-undo (current-buffer))
@@ -1558,21 +1628,21 @@ function is generally only called when Gnus is shutting down."
(error "Your server does not support ACL editing"))
(with-current-buffer nnimap-server-buffer
;; delete all removed identifiers
- (mapcar (lambda (old-acl)
- (unless (assoc (car old-acl) new-acls)
- (or (imap-mailbox-acl-delete (car old-acl) mailbox)
- (error "Can't delete ACL for %s" (car old-acl)))))
- old-acls)
+ (mapc (lambda (old-acl)
+ (unless (assoc (car old-acl) new-acls)
+ (or (imap-mailbox-acl-delete (car old-acl) mailbox)
+ (error "Can't delete ACL for %s" (car old-acl)))))
+ old-acls)
;; set all changed acl's
- (mapcar (lambda (new-acl)
- (let ((new-rights (cdr new-acl))
- (old-rights (cdr (assoc (car new-acl) old-acls))))
- (unless (and old-rights new-rights
- (string= old-rights new-rights))
- (or (imap-mailbox-acl-set (car new-acl) new-rights mailbox)
- (error "Can't set ACL for %s to %s" (car new-acl)
- new-rights)))))
- new-acls)
+ (mapc (lambda (new-acl)
+ (let ((new-rights (cdr new-acl))
+ (old-rights (cdr (assoc (car new-acl) old-acls))))
+ (unless (and old-rights new-rights
+ (string= old-rights new-rights))
+ (or (imap-mailbox-acl-set (car new-acl) new-rights mailbox)
+ (error "Can't set ACL for %s to %s" (car new-acl)
+ new-rights)))))
+ new-acls)
t)))
@@ -1651,64 +1721,64 @@ be used in a STORE FLAGS command."
(when nnimap-debug
(require 'trace)
(buffer-disable-undo (get-buffer-create nnimap-debug-buffer))
- (mapcar (lambda (f) (trace-function-background f nnimap-debug-buffer))
- '(
- nnimap-possibly-change-server
- nnimap-verify-uidvalidity
- nnimap-find-minmax-uid
- nnimap-before-find-minmax-bugworkaround
- nnimap-possibly-change-group
- ;;nnimap-replace-whitespace
- nnimap-retrieve-headers-progress
- nnimap-retrieve-which-headers
- nnimap-group-overview-filename
- nnimap-retrieve-headers-from-file
- nnimap-retrieve-headers-from-server
- nnimap-retrieve-headers
- nnimap-open-connection
- nnimap-open-server
- nnimap-server-opened
- nnimap-close-server
- nnimap-request-close
- nnimap-status-message
- ;;nnimap-demule
- nnimap-request-article-part
- nnimap-request-article
- nnimap-request-head
- nnimap-request-body
- nnimap-request-group
- nnimap-close-group
- nnimap-pattern-to-list-arguments
- nnimap-request-list
- nnimap-request-post
- nnimap-retrieve-groups
- nnimap-request-update-info-internal
- nnimap-request-type
- nnimap-request-set-mark
- nnimap-split-to-groups
- nnimap-split-find-rule
- nnimap-split-find-inbox
- nnimap-split-articles
- nnimap-request-scan
- nnimap-request-newgroups
- nnimap-request-create-group
- nnimap-time-substract
- nnimap-date-days-ago
- nnimap-request-expire-articles-progress
- nnimap-request-expire-articles
- nnimap-request-move-article
- nnimap-request-accept-article
- nnimap-request-delete-group
- nnimap-request-rename-group
- gnus-group-nnimap-expunge
- gnus-group-nnimap-edit-acl
- gnus-group-nnimap-edit-acl-done
- nnimap-group-mode-hook
- nnimap-mark-to-predicate
- nnimap-mark-to-flag-1
- nnimap-mark-to-flag
- nnimap-mark-permanent-p
- )))
+ (mapc (lambda (f) (trace-function-background f nnimap-debug-buffer))
+ '(
+ nnimap-possibly-change-server
+ nnimap-verify-uidvalidity
+ nnimap-find-minmax-uid
+ nnimap-before-find-minmax-bugworkaround
+ nnimap-possibly-change-group
+ ;;nnimap-replace-whitespace
+ nnimap-retrieve-headers-progress
+ nnimap-retrieve-which-headers
+ nnimap-group-overview-filename
+ nnimap-retrieve-headers-from-file
+ nnimap-retrieve-headers-from-server
+ nnimap-retrieve-headers
+ nnimap-open-connection
+ nnimap-open-server
+ nnimap-server-opened
+ nnimap-close-server
+ nnimap-request-close
+ nnimap-status-message
+ ;;nnimap-demule
+ nnimap-request-article-part
+ nnimap-request-article
+ nnimap-request-head
+ nnimap-request-body
+ nnimap-request-group
+ nnimap-close-group
+ nnimap-pattern-to-list-arguments
+ nnimap-request-list
+ nnimap-request-post
+ nnimap-retrieve-groups
+ nnimap-request-update-info-internal
+ nnimap-request-type
+ nnimap-request-set-mark
+ nnimap-split-to-groups
+ nnimap-split-find-rule
+ nnimap-split-find-inbox
+ nnimap-split-articles
+ nnimap-request-scan
+ nnimap-request-newgroups
+ nnimap-request-create-group
+ nnimap-time-substract
+ nnimap-date-days-ago
+ nnimap-request-expire-articles-progress
+ nnimap-request-expire-articles
+ nnimap-request-move-article
+ nnimap-request-accept-article
+ nnimap-request-delete-group
+ nnimap-request-rename-group
+ gnus-group-nnimap-expunge
+ gnus-group-nnimap-edit-acl
+ gnus-group-nnimap-edit-acl-done
+ nnimap-group-mode-hook
+ nnimap-mark-to-predicate
+ nnimap-mark-to-flag-1
+ nnimap-mark-to-flag
+ nnimap-mark-permanent-p
+ )))
(provide 'nnimap)
diff --git a/lisp/gnus/nnkiboze.el b/lisp/gnus/nnkiboze.el
index 7c7fb5a54ab..78e35c410bb 100644
--- a/lisp/gnus/nnkiboze.el
+++ b/lisp/gnus/nnkiboze.el
@@ -227,7 +227,7 @@ Finds out what articles are to be part of the nnkiboze groups."
"." gnus-score-file-suffix))))))
(defun nnkiboze-generate-group (group &optional inhibit-list-groups)
- (let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
+ (let* ((info (gnus-get-info group))
(newsrc-file (concat nnkiboze-directory
(nnheader-translate-file-chars
(concat group ".newsrc"))))
@@ -269,8 +269,7 @@ Finds out what articles are to be part of the nnkiboze groups."
(numberp (car (symbol-value group))) ; It is active
(or (> nnkiboze-level 7)
(and (setq glevel
- (nth 1 (nth 2 (gnus-gethash
- gname gnus-newsrc-hashtb))))
+ (gnus-info-level (gnus-get-info gname)))
(>= nnkiboze-level glevel)))
(not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
(push (cons gname (1- (car (symbol-value group))))
@@ -282,8 +281,7 @@ Finds out what articles are to be part of the nnkiboze groups."
;; number that has been kibozed in GROUP in this kiboze group.
(setq newsrc nnkiboze-newsrc)
(while newsrc
- (if (not (setq active (gnus-gethash
- (caar newsrc) gnus-active-hashtb)))
+ (if (not (setq active (gnus-active (caar newsrc))))
;; This group isn't active after all, so we remove it from
;; the list of component groups.
(setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
@@ -294,8 +292,7 @@ Finds out what articles are to be part of the nnkiboze groups."
(gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
(setq ginfo (gnus-get-info (gnus-group-group-name))
orig-info (gnus-copy-sequence ginfo)
- num-unread (car (gnus-gethash (caar newsrc)
- gnus-newsrc-hashtb)))
+ num-unread (gnus-group-unread (caar newsrc)))
(unwind-protect
(progn
;; We set all list of article marks to nil. Since we operate
@@ -338,8 +335,7 @@ Finds out what articles are to be part of the nnkiboze groups."
;; Restore the proper info.
(when ginfo
(setcdr ginfo (cdr orig-info)))
- (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
- num-unread)))
+ (setcar (gnus-group-entry (caar newsrc)) num-unread)))
(setcdr (car newsrc) (cdr active))
(gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
(setq newsrc (cdr newsrc)))))
diff --git a/lisp/gnus/nnmail.el b/lisp/gnus/nnmail.el
index 35f5476f9b4..8ff6d1d1459 100644
--- a/lisp/gnus/nnmail.el
+++ b/lisp/gnus/nnmail.el
@@ -32,7 +32,6 @@
(require 'gnus) ; for macro gnus-kill-buffer, at least
(require 'nnheader)
(require 'message)
-(require 'custom)
(require 'gnus-util)
(require 'mail-source)
(require 'mm-util)
@@ -298,7 +297,10 @@ Eg.
\(add-hook 'nnmail-read-incoming-hook
(lambda ()
(call-process \"/local/bin/mailsend\" nil nil nil
- \"read\" nnmail-spool-file)))
+ \"read\"
+ ;; The incoming mail box file.
+ (expand-file-name (user-login-name)
+ rmail-spool-directory))))
If you have xwatch running, this will alert it that mail has been
read.
@@ -412,13 +414,13 @@ This is copy of the `lazy' widget in Emacs 22.1 provided for compatibility."
(const :format "" &)
(editable-list :inline t nnmail-split-fancy))
(list :tag "Function with fixed arguments (:)"
- :value (: nil)
+ :value (:)
(const :format "" :value :)
function
(editable-list :inline t (sexp :tag "Arg"))
)
(list :tag "Function with split arguments (!)"
- :value (! nil)
+ :value (!)
(const :format "" !)
function
(editable-list :inline t nnmail-split-fancy))
@@ -476,7 +478,7 @@ FIELD must match a complete field name. VALUE must match a complete
word according to the `nnmail-split-fancy-syntax-table' syntax table.
You can use \".*\" in the regexps to match partial field names or words.
-FIELD and VALUE can also be lisp symbols, in that case they are expanded
+FIELD and VALUE can also be Lisp symbols, in that case they are expanded
as specified in `nnmail-split-abbrev-alist'.
GROUP can contain \\& and \\N which will substitute from matching
@@ -660,9 +662,7 @@ using different case (i.e. mailing-list@domain vs Mailing-List@Domain)."
(expand-file-name group dir)
;; If not, we translate dots into slashes.
(expand-file-name
- (mm-encode-coding-string
- (nnheader-replace-chars-in-string group ?. ?/)
- nnmail-pathname-coding-system)
+ (nnheader-replace-chars-in-string group ?. ?/)
dir))))
(or file "")))
@@ -687,13 +687,13 @@ nn*-request-list should have been called before calling this function."
(while (not (eobp))
(condition-case err
(progn
- (narrow-to-region (point) (gnus-point-at-eol))
+ (narrow-to-region (point) (point-at-eol))
(setq group (read buffer))
(unless (stringp group)
(setq group (symbol-name group)))
(if (and (numberp (setq max (read buffer)))
(numberp (setq min (read buffer))))
- (push (list group (cons min max))
+ (push (list (mm-string-as-unibyte group) (cons min max))
group-assoc)))
(error nil))
(widen)
@@ -708,6 +708,7 @@ nn*-request-list should have been called before calling this function."
(let ((coding-system-for-write nnmail-active-file-coding-system))
(when file-name
(with-temp-file file-name
+ (mm-disable-multibyte)
(nnmail-generate-active group-assoc)))))
(defun nnmail-generate-active (alist)
@@ -1047,6 +1048,9 @@ If SOURCE is a directory spec, try to return the group name component."
(nnmail-check-duplication message-id func artnum-func))
1))
+(defvar nnmail-group-names-not-encoded-p nil
+ "Non-nil means group names are not encoded.")
+
(defun nnmail-split-incoming (incoming func &optional exit-func
group artnum-func)
"Go through the entire INCOMING file and pick out each individual mail.
@@ -1056,7 +1060,8 @@ FUNC will be called with the buffer narrowed to each mail."
(nnmail-split-methods (if (and group
(not nnmail-resplit-incoming))
(list (list group ""))
- nnmail-split-methods)))
+ nnmail-split-methods))
+ (nnmail-group-names-not-encoded-p t))
(save-excursion
;; Insert the incoming file.
(set-buffer (get-buffer-create nnmail-article-buffer))
@@ -1125,7 +1130,7 @@ FUNC will be called with the group name to determine the article number."
(while (not (eobp))
(unless (< (move-to-column nnmail-split-header-length-limit)
nnmail-split-header-length-limit)
- (delete-region (point) (gnus-point-at-eol)))
+ (delete-region (point) (point-at-eol)))
(forward-line 1))
;; Allow washing.
(goto-char (point-min))
@@ -1247,11 +1252,11 @@ Return the number of characters in the body."
(progn (forward-line 1) (point))))
(insert (format "Xref: %s" (system-name)))
(while group-alist
- (insert (format " %s:%d"
- (mm-encode-coding-string
- (caar group-alist)
- nnmail-pathname-coding-system)
- (cdar group-alist)))
+ (insert (if (mm-multibyte-p)
+ (mm-string-as-multibyte
+ (format " %s:%d" (caar group-alist) (cdar group-alist)))
+ (mm-string-as-unibyte
+ (format " %s:%d" (caar group-alist) (cdar group-alist)))))
(setq group-alist (cdr group-alist)))
(insert "\n")))
@@ -1285,10 +1290,20 @@ Return the number of characters in the body."
"Translate TAB characters into SPACE characters."
(subst-char-in-region (point-min) (point-max) ?\t ? t))
-(defun nnmail-fix-eudora-headers ()
- "Eudora has a broken References line, but an OK In-Reply-To."
+(defcustom nnmail-broken-references-mailers
+ "^X-Mailer:.*\\(Eudora\\|Pegasus\\)"
+ "Header line matching mailer producing bogus References lines.
+See `nnmail-ignore-broken-references'."
+ :group 'nnmail-prepare
+ :version "23.0" ;; No Gnus
+ :type 'regexp)
+
+(defun nnmail-ignore-broken-references ()
+ "Ignore the References line and use In-Reply-To
+
+Eudora has a broken References line, but an OK In-Reply-To."
(goto-char (point-min))
- (when (re-search-forward "^X-Mailer:.*Eudora" nil t)
+ (when (re-search-forward nnmail-broken-references-mailers nil t)
(goto-char (point-min))
(when (re-search-forward "^References:" nil t)
(beginning-of-line)
@@ -1297,8 +1312,11 @@ Return the number of characters in the body."
(when (re-search-forward "^\\(In-Reply-To:[^\n]+\\)\n[ \t]+" nil t)
(replace-match "\\1" t))))
+(defalias 'nnmail-fix-eudora-headers 'nnmail-ignore-broken-references)
+(make-obsolete 'nnmail-fix-eudora-headers 'nnmail-ignore-broken-references)
+
(custom-add-option 'nnmail-prepare-incoming-header-hook
- 'nnmail-fix-eudora-headers)
+ 'nnmail-ignore-broken-references)
;;; Utility functions
@@ -1327,12 +1345,8 @@ to actually put the message in the right group."
(defun nnmail-split-fancy ()
"Fancy splitting method.
See the documentation for the variable `nnmail-split-fancy' for details."
- (let ((syntab (syntax-table)))
- (unwind-protect
- (progn
- (set-syntax-table nnmail-split-fancy-syntax-table)
- (nnmail-split-it nnmail-split-fancy))
- (set-syntax-table syntab))))
+ (with-syntax-table nnmail-split-fancy-syntax-table
+ (nnmail-split-it nnmail-split-fancy)))
(defvar nnmail-split-cache nil)
;; Alist of split expressions their equivalent regexps.
@@ -1644,7 +1658,7 @@ See the documentation for the variable `nnmail-split-fancy' for details."
(skip-chars-forward "^\n\r\t")
(unless (looking-at "[\r\n]")
(forward-char 1)
- (buffer-substring (point) (gnus-point-at-eol)))))))
+ (buffer-substring (point) (point-at-eol)))))))
;; Function for nnmail-split-fancy: look up all references in the
;; cache and if a match is found, return that group.
@@ -1672,12 +1686,11 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(setq references (nreverse (gnus-split-references refstr)))
(unless (gnus-buffer-live-p nnmail-cache-buffer)
(nnmail-cache-open))
- (mapcar (lambda (x)
- (setq res (or (nnmail-cache-fetch-group x) res))
- (when (or (member res '("delayed" "drafts" "queue"))
- (and regexp res (string-match regexp res)))
- (setq res nil)))
- references)
+ (dolist (x references)
+ (setq res (or (nnmail-cache-fetch-group x) res))
+ (when (or (member res '("delayed" "drafts" "queue"))
+ (and regexp res (string-match regexp res)))
+ (setq res nil)))
res)))
(defun nnmail-cache-id-exists-p (id)
@@ -1902,7 +1915,7 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(or (string-match (cadr regexp-target-pair) from)
(and (string-match (cadr regexp-target-pair) to)
(let ((rmail-dont-reply-to-names
- message-dont-reply-to-names))
+ (message-dont-reply-to-names)))
(equal (rmail-dont-reply-to from) "")))))
(setq target (format-time-string (caddr regexp-target-pair) date)))
((and (not (equal header 'to-from))
@@ -1995,14 +2008,12 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(with-output-to-temp-buffer "*nnmail split history*"
(with-current-buffer standard-output
(fundamental-mode)) ; for Emacs 20.4+
- (let ((history nnmail-split-history)
- elem)
- (while (setq elem (pop history))
+ (dolist (elem nnmail-split-history)
(princ (mapconcat (lambda (ga)
(concat (car ga) ":" (int-to-string (cdr ga))))
elem
", "))
- (princ "\n")))))
+ (princ "\n"))))
(defun nnmail-purge-split-history (group)
"Remove all instances of GROUP from `nnmail-split-history'."
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 6769c902e2b..04b6af72aed 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -41,6 +41,8 @@
;; copying, restoring, etc.
;;
;; Todo:
+;; * When moving an article for expiry, copy all the marks except 'expire
+;; from the original article.
;; * Add a hook for when moving messages from new/ to cur/, to support
;; nnmail's duplicate detection.
;; * Improve generated Xrefs, so crossposts are detectable.
@@ -54,6 +56,7 @@
(put 'nnmaildir--with-work-buffer 'lisp-indent-function 0)
(put 'nnmaildir--with-nov-buffer 'lisp-indent-function 0)
(put 'nnmaildir--with-move-buffer 'lisp-indent-function 0)
+ (put 'nnmaildir--condcase 'lisp-indent-function 2)
)
]
@@ -229,7 +232,6 @@ by nnmaildir-request-article.")
(defmacro nnmaildir--nov-dir (dir) `(nnmaildir--subdir ,dir "nov"))
(defmacro nnmaildir--marks-dir (dir) `(nnmaildir--subdir ,dir "marks"))
(defmacro nnmaildir--num-dir (dir) `(nnmaildir--subdir ,dir "num"))
-(defmacro nnmaildir--num-file (dir) `(concat ,dir ":"))
(defmacro nnmaildir--unlink (file-arg)
`(let ((file ,file-arg))
@@ -237,20 +239,36 @@ by nnmaildir-request-article.")
(defun nnmaildir--mkdir (dir)
(or (file-exists-p (file-name-as-directory dir))
(make-directory-internal (directory-file-name dir))))
+(defun nnmaildir--mkfile (file)
+ (write-region "" nil file nil 'no-message))
(defun nnmaildir--delete-dir-files (dir ls)
(when (file-attributes dir)
- (mapcar 'delete-file (funcall ls dir 'full "\\`[^.]" 'nosort))
+ (mapc 'delete-file (funcall ls dir 'full "\\`[^.]" 'nosort))
(delete-directory dir)))
(defun nnmaildir--group-maxnum (server group)
- (if (zerop (nnmaildir--grp-count group)) 0
- (let ((x (nnmaildir--srvgrp-dir (nnmaildir--srv-dir server)
- (nnmaildir--grp-name group))))
- (setq x (nnmaildir--nndir x)
- x (nnmaildir--num-dir x)
- x (nnmaildir--num-file x)
- x (file-attributes x))
- (if x (1- (nth 1 x)) 0))))
+ (catch 'return
+ (if (zerop (nnmaildir--grp-count group)) (throw 'return 0))
+ (let ((dir (nnmaildir--srvgrp-dir (nnmaildir--srv-dir server)
+ (nnmaildir--grp-name group)))
+ (number-opened 1)
+ attr ino-opened nlink number-linked)
+ (setq dir (nnmaildir--nndir dir)
+ dir (nnmaildir--num-dir dir))
+ (while t
+ (setq attr (file-attributes
+ (concat dir (number-to-string number-opened))))
+ (or attr (throw 'return (1- number-opened)))
+ (setq ino-opened (nth 10 attr)
+ nlink (nth 1 attr)
+ number-linked (+ number-opened nlink))
+ (if (or (< nlink 1) (< number-linked nlink))
+ (signal 'error '("Arithmetic overflow")))
+ (setq attr (file-attributes
+ (concat dir (number-to-string number-linked))))
+ (or attr (throw 'return (1- number-linked)))
+ (if (/= ino-opened (nth 10 attr))
+ (setq number-opened number-linked))))))
;; Make the given server, if non-nil, be the current server. Then make the
;; given group, if non-nil, be the current group of the current server. Then
@@ -287,6 +305,64 @@ by nnmaildir-request-article.")
(setq pos (match-end 0))))
string)
+(defmacro nnmaildir--condcase (errsym body &rest handler)
+ `(condition-case ,errsym
+ (let ((system-messages-locale "C")) ,body)
+ (error . ,handler)))
+
+(defun nnmaildir--emlink-p (err)
+ (and (eq (car err) 'file-error)
+ (string= (downcase (caddr err)) "too many links")))
+
+(defun nnmaildir--enoent-p (err)
+ (and (eq (car err) 'file-error)
+ (string= (downcase (caddr err)) "no such file or directory")))
+
+(defun nnmaildir--eexist-p (err)
+ (eq (car err) 'file-already-exists))
+
+(defun nnmaildir--new-number (nndir)
+ "Allocate a new article number by atomically creating a file under NNDIR."
+ (let ((numdir (nnmaildir--num-dir nndir))
+ (make-new-file t)
+ (number-open 1)
+ number-link previous-number-link path-open path-link ino-open)
+ (nnmaildir--mkdir numdir)
+ (catch 'return
+ (while t
+ (setq path-open (concat numdir (number-to-string number-open)))
+ (if (not make-new-file)
+ (setq previous-number-link number-link)
+ (nnmaildir--mkfile path-open)
+ ;; If Emacs had O_CREAT|O_EXCL, we could return number-open here.
+ (setq make-new-file nil
+ previous-number-link 0))
+ (let* ((attr (file-attributes path-open))
+ (nlink (nth 1 attr)))
+ (setq ino-open (nth 10 attr)
+ number-link (+ number-open nlink))
+ (if (or (< nlink 1) (< number-link nlink))
+ (signal 'error '("Arithmetic overflow"))))
+ (if (= number-link previous-number-link)
+ ;; We've already tried this number, in the previous loop iteration,
+ ;; and failed.
+ (signal 'error `("Corrupt internal nnmaildir data" ,path-open)))
+ (setq path-link (concat numdir (number-to-string number-link)))
+ (nnmaildir--condcase err
+ (progn
+ (add-name-to-file path-open path-link)
+ (throw 'return number-link))
+ (cond
+ ((nnmaildir--emlink-p err)
+ (setq make-new-file t
+ number-open number-link))
+ ((nnmaildir--eexist-p err)
+ (let ((attr (file-attributes path-link)))
+ (if (/= (nth 10 attr) ino-open)
+ (setq number-open number-link
+ number-link 0))))
+ (t (signal (car err) (cdr err)))))))))
+
(defun nnmaildir--update-nov (server group article)
(let ((nnheader-file-coding-system 'binary)
(srv-dir (nnmaildir--srv-dir server))
@@ -398,30 +474,7 @@ by nnmaildir-request-article.")
nnmaildir--extra)
num (nnmaildir--art-num article))
(unless num
- ;; Allocate a new article number.
- (erase-buffer)
- (setq numdir (nnmaildir--num-dir dir)
- file (nnmaildir--num-file numdir)
- num -1)
- (nnmaildir--mkdir numdir)
- (write-region "" nil file nil 'no-message)
- (while file
- ;; Get the number of links to file.
- (setq attr (nth 1 (file-attributes file)))
- (if (= attr num)
- ;; We've already tried this number, in the previous loop
- ;; iteration, and failed.
- (signal 'error `("Corrupt internal nnmaildir data" ,numdir)))
- ;; If attr is 123, try to link file to "123". This atomically
- ;; increases the link count and creates the "123" link, failing
- ;; if that link was already created by another Gnus, just after
- ;; we stat()ed file.
- (condition-case nil
- (progn
- (add-name-to-file file (concat numdir (format "%x" attr)))
- (setq file nil)) ;; Stop looping.
- (file-already-exists nil))
- (setq num attr))
+ (setq num (nnmaildir--new-number dir))
(setf (nnmaildir--art-num article) num))
;; Store this new NOV data in a file
(erase-buffer)
@@ -683,8 +736,7 @@ by nnmaildir-request-article.")
group (make-nnmaildir--grp :name gname :index 0))
(nnmaildir--mkdir nndir)
(nnmaildir--mkdir (nnmaildir--nov-dir nndir))
- (nnmaildir--mkdir (nnmaildir--marks-dir nndir))
- (write-region "" nil (concat nndir "markfile") nil 'no-message))
+ (nnmaildir--mkdir (nnmaildir--marks-dir nndir)))
(setq read-only (nnmaildir--param pgname 'read-only)
ls (or (nnmaildir--param pgname 'directory-files) srv-ls))
(unless read-only
@@ -693,12 +745,10 @@ by nnmaildir-request-article.")
(setf (nnmaildir--srv-error nnmaildir--cur-server)
(concat "Maildir spans filesystems: " absdir))
(throw 'return nil))
- (mapcar
- (lambda (file)
- (setq x (file-attributes file))
- (if (or (> (cadr x) 1) (< (car (nth 4 x)) 36h-ago))
- (delete-file file)))
- (funcall ls tdir 'full "\\`[^.]" 'nosort)))
+ (dolist (file (funcall ls tdir 'full "\\`[^.]" 'nosort))
+ (setq x (file-attributes file))
+ (if (or (> (cadr x) 1) (< (car (nth 4 x)) 36h-ago))
+ (delete-file file))))
(or scan-msgs
isnew
(throw 'return t))
@@ -707,12 +757,10 @@ by nnmaildir-request-article.")
(setq nattr nil))
(if read-only (setq dir (and (or isnew nattr) ndir))
(when (or isnew nattr)
- (mapcar
- (lambda (file)
- (let ((path (concat ndir file)))
- (and (time-less-p (nth 5 (file-attributes path)) (current-time))
- (rename-file path (concat cdir file ":2,")))))
- (funcall ls ndir nil "\\`[^.]" 'nosort))
+ (dolist (file (funcall ls ndir nil "\\`[^.]" 'nosort))
+ (setq x (concat ndir file))
+ (and (time-less-p (nth 5 (file-attributes x)) (current-time))
+ (rename-file x (concat cdir file ":2,"))))
(setf (nnmaildir--grp-new group) nattr))
(setq cattr (nth 5 (file-attributes cdir)))
(if (equal cattr (nnmaildir--grp-cur group))
@@ -737,13 +785,11 @@ by nnmaildir-request-article.")
cdir (nnmaildir--marks-dir nndir)
ndir (nnmaildir--subdir cdir "tick")
cdir (nnmaildir--subdir cdir "read"))
- (mapcar
- (lambda (file)
- (setq file (car file))
- (if (or (not (file-exists-p (concat cdir file)))
- (file-exists-p (concat ndir file)))
- (setq num (1+ num))))
- files))
+ (dolist (file files)
+ (setq file (car file))
+ (if (or (not (file-exists-p (concat cdir file)))
+ (file-exists-p (concat ndir file)))
+ (setq num (1+ num)))))
(setf (nnmaildir--grp-cache group) (make-vector num nil))
(let ((inhibit-quit t))
(set (intern gname groups) group))
@@ -757,12 +803,10 @@ by nnmaildir-request-article.")
files (delq nil files)
files (mapcar 'nnmaildir--parse-filename files)
files (sort files 'nnmaildir--sort-files))
- (mapcar
- (lambda (file)
- (setq file (if (consp file) file (aref file 3))
- x (make-nnmaildir--art :prefix (car file) :suffix (cdr file)))
- (nnmaildir--grp-add-art nnmaildir--cur-server group x))
- files)
+ (dolist (file files)
+ (setq file (if (consp file) file (aref file 3))
+ x (make-nnmaildir--art :prefix (car file) :suffix (cdr file)))
+ (nnmaildir--grp-add-art nnmaildir--cur-server group x))
(if read-only (setf (nnmaildir--grp-new group) nattr)
(setf (nnmaildir--grp-cur group) cattr)))
t))
@@ -809,19 +853,18 @@ by nnmaildir-request-article.")
dirs))
seen (nnmaildir--up2-1 (length dirs))
seen (make-vector seen 0))
- (mapcar
- (lambda (grp-dir)
- (if (nnmaildir--scan grp-dir scan-group groups method srv-dir
- srv-ls)
- (intern grp-dir seen)))
- dirs)
+ (dolist (grp-dir dirs)
+ (if (nnmaildir--scan grp-dir scan-group groups method srv-dir
+ srv-ls)
+ (intern grp-dir seen)))
(setq x nil)
(mapatoms (lambda (group)
(setq group (symbol-name group))
(unless (intern-soft group seen)
(setq x (cons group x))))
groups)
- (mapcar (lambda (grp) (unintern grp groups)) x)
+ (dolist (grp x)
+ (unintern grp groups))
(setf (nnmaildir--srv-mtime nnmaildir--cur-server)
(nth 5 (file-attributes srv-dir))))
(and scan-group
@@ -857,19 +900,17 @@ by nnmaildir-request-article.")
(nnmaildir--prepare server nil)
(nnmaildir--with-nntp-buffer
(erase-buffer)
- (mapcar
- (lambda (gname)
- (setq group (nnmaildir--prepare nil gname))
- (if (null group) (insert "411 no such news group\n")
- (insert "211 ")
- (princ (nnmaildir--grp-count group) nntp-server-buffer)
- (insert " ")
- (princ (nnmaildir--grp-min group) nntp-server-buffer)
- (insert " ")
- (princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
- nntp-server-buffer)
- (insert " " gname "\n")))
- groups)))
+ (dolist (gname groups)
+ (setq group (nnmaildir--prepare nil gname))
+ (if (null group) (insert "411 no such news group\n")
+ (insert "211 ")
+ (princ (nnmaildir--grp-count group) nntp-server-buffer)
+ (insert " ")
+ (princ (nnmaildir--grp-min group) nntp-server-buffer)
+ (insert " ")
+ (princ (nnmaildir--group-maxnum nnmaildir--cur-server group)
+ nntp-server-buffer)
+ (insert " " gname "\n")))))
'group)
(defun nnmaildir-request-update-info (gname info &optional server)
@@ -909,33 +950,29 @@ by nnmaildir-request-article.")
new-mmth (nnmaildir--up2-1 (length markdirs))
new-mmth (make-vector new-mmth 0)
old-mmth (nnmaildir--grp-mmth group))
- (mapcar
- (lambda (mark)
- (setq markdir (nnmaildir--subdir dir mark)
- mark-sym (intern mark)
- ranges nil)
- (catch 'got-ranges
- (if (memq mark-sym never-marks) (throw 'got-ranges nil))
- (when (memq mark-sym always-marks)
- (setq ranges existing)
- (throw 'got-ranges nil))
- (setq mtime (nth 5 (file-attributes markdir)))
- (set (intern mark new-mmth) mtime)
- (when (equal mtime (symbol-value (intern-soft mark old-mmth)))
- (setq ranges (assq mark-sym old-marks))
- (if ranges (setq ranges (cdr ranges)))
- (throw 'got-ranges nil))
- (mapcar
- (lambda (prefix)
- (setq article (nnmaildir--flist-art flist prefix))
- (if article
- (setq ranges
- (gnus-add-to-range ranges
- `(,(nnmaildir--art-num article))))))
- (funcall ls markdir nil "\\`[^.]" 'nosort)))
- (if (eq mark-sym 'read) (setq read ranges)
- (if ranges (setq marks (cons (cons mark-sym ranges) marks)))))
- markdirs)
+ (dolist (mark markdirs)
+ (setq markdir (nnmaildir--subdir dir mark)
+ mark-sym (intern mark)
+ ranges nil)
+ (catch 'got-ranges
+ (if (memq mark-sym never-marks) (throw 'got-ranges nil))
+ (when (memq mark-sym always-marks)
+ (setq ranges existing)
+ (throw 'got-ranges nil))
+ (setq mtime (nth 5 (file-attributes markdir)))
+ (set (intern mark new-mmth) mtime)
+ (when (equal mtime (symbol-value (intern-soft mark old-mmth)))
+ (setq ranges (assq mark-sym old-marks))
+ (if ranges (setq ranges (cdr ranges)))
+ (throw 'got-ranges nil))
+ (dolist (prefix (funcall ls markdir nil "\\`[^.]" 'nosort))
+ (setq article (nnmaildir--flist-art flist prefix))
+ (if article
+ (setq ranges
+ (gnus-add-to-range ranges
+ `(,(nnmaildir--art-num article)))))))
+ (if (eq mark-sym 'read) (setq read ranges)
+ (if ranges (setq marks (cons (cons mark-sym ranges) marks)))))
(gnus-info-set-read info (gnus-range-add read missing))
(gnus-info-set-marks info marks 'extend)
(setf (nnmaildir--grp-mmth group) new-mmth)
@@ -1087,10 +1124,10 @@ by nnmaildir-request-article.")
(nnmaildir--delete-dir-files (nnmaildir--new grp-dir) ls)
(nnmaildir--delete-dir-files (nnmaildir--cur grp-dir) ls))
(setq dir (nnmaildir--nndir grp-dir))
- (mapcar (lambda (subdir) (nnmaildir--delete-dir-files subdir ls))
- `(,(nnmaildir--nov-dir dir) ,(nnmaildir--num-dir dir)
- ,@(funcall ls (nnmaildir--marks-dir dir) 'full "\\`[^.]"
- 'nosort)))
+ (dolist (subdir `(,(nnmaildir--nov-dir dir) ,(nnmaildir--num-dir dir)
+ ,@(funcall ls (nnmaildir--marks-dir dir)
+ 'full "\\`[^.]" 'nosort)))
+ (nnmaildir--delete-dir-files subdir ls))
(setq dir (nnmaildir--nndir grp-dir))
(nnmaildir--unlink (concat dir "markfile"))
(nnmaildir--unlink (concat dir "markfile{new}"))
@@ -1144,11 +1181,9 @@ by nnmaildir-request-article.")
(nnmaildir--nlist-iterate nlist 'all insert-nov))
((null articles))
((stringp (car articles))
- (mapcar
- (lambda (msgid)
- (setq article (nnmaildir--mlist-art mlist msgid))
- (if article (funcall insert-nov article)))
- articles))
+ (dolist (msgid articles)
+ (setq article (nnmaildir--mlist-art mlist msgid))
+ (if article (funcall insert-nov article))))
(t
(if fetch-old
;; Assume the article range list is sorted ascending
@@ -1254,7 +1289,7 @@ by nnmaildir-request-article.")
t)))
(defun nnmaildir-request-move-article (article gname server accept-form
- &optional last)
+ &optional last move-is-internal)
(let ((group (nnmaildir--prepare server gname))
pgname suffix result nnmaildir--file deactivate-mark)
(catch 'return
@@ -1339,8 +1374,7 @@ by nnmaildir-request-article.")
nnmaildir--cur-server)
"24-hour timer expired")
(throw 'return nil))))
- (condition-case nil
- (add-name-to-file nnmaildir--file tmpfile)
+ (condition-case nil (add-name-to-file nnmaildir--file tmpfile)
(error
(gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
'excl)
@@ -1470,7 +1504,12 @@ by nnmaildir-request-article.")
(not (string-equal target pgname))) ;; Move it.
(erase-buffer)
(nnheader-insert-file-contents nnmaildir--file)
- (gnus-request-accept-article target nil nil 'no-encode))
+ (let ((group-art (gnus-request-accept-article
+ target nil nil 'no-encode)))
+ (when (consp group-art)
+ ;; Maybe also copy: dormant forward reply save tick
+ ;; (gnus-add-mark? gnus-request-set-mark?)
+ (gnus-group-mark-article-read target (cdr group-art)))))
(if (equal target pgname)
;; Leave it here.
(setq didnt (cons (nnmaildir--art-num article) didnt))
@@ -1484,8 +1523,8 @@ by nnmaildir-request-article.")
(coding-system-for-write nnheader-file-coding-system)
(buffer-file-coding-system nil)
(file-coding-system-alist nil)
- del-mark del-action add-action set-action marksdir markfile nlist
- ranges begin end article all-marks todo-marks did-marks mdir mfile
+ del-mark del-action add-action set-action marksdir nlist
+ ranges begin end article all-marks todo-marks mdir mfile
pgname ls permarkfile deactivate-mark)
(setq del-mark
(lambda (mark)
@@ -1500,17 +1539,19 @@ by nnmaildir-request-article.")
(setq mdir (nnmaildir--subdir marksdir (symbol-name mark))
permarkfile (concat mdir ":")
mfile (concat mdir (nnmaildir--art-prefix article)))
- (unless (memq mark did-marks)
- (setq did-marks (cons mark did-marks))
- (nnmaildir--mkdir mdir)
- (unless (file-attributes permarkfile)
- (condition-case nil
- (add-name-to-file markfile permarkfile)
- (file-error
- ;; AFS can't make hard links in separate directories
- (write-region "" nil permarkfile nil 'no-message)))))
- (unless (file-exists-p mfile)
- (add-name-to-file permarkfile mfile)))
+ (nnmaildir--condcase err (add-name-to-file permarkfile mfile)
+ (cond
+ ((nnmaildir--eexist-p err))
+ ((nnmaildir--enoent-p err)
+ (nnmaildir--mkdir mdir)
+ (nnmaildir--mkfile permarkfile)
+ (add-name-to-file permarkfile mfile))
+ ((nnmaildir--emlink-p err)
+ (let ((permarkfilenew (concat permarkfile "{new}")))
+ (nnmaildir--mkfile permarkfilenew)
+ (rename-file permarkfilenew permarkfile 'replace)
+ (add-name-to-file permarkfile mfile)))
+ (t (signal (car err) (cdr err))))))
todo-marks))
set-action (lambda (article)
(funcall add-action)
@@ -1522,32 +1563,29 @@ by nnmaildir-request-article.")
(unless group
(setf (nnmaildir--srv-error nnmaildir--cur-server)
(concat "No such group: " gname))
- (mapcar (lambda (action)
- (setq ranges (gnus-range-add ranges (car action))))
- actions)
+ (dolist (action actions)
+ (setq ranges (gnus-range-add ranges (car action))))
(throw 'return ranges))
(setq nlist (nnmaildir--grp-nlist group)
marksdir (nnmaildir--srv-dir nnmaildir--cur-server)
marksdir (nnmaildir--srvgrp-dir marksdir gname)
marksdir (nnmaildir--nndir marksdir)
- markfile (concat marksdir "markfile")
marksdir (nnmaildir--marks-dir marksdir)
gname (nnmaildir--grp-name group)
pgname (nnmaildir--pgname nnmaildir--cur-server gname)
ls (nnmaildir--group-ls nnmaildir--cur-server pgname)
all-marks (funcall ls marksdir nil "\\`[^.]" 'nosort)
all-marks (mapcar 'intern all-marks))
- (mapcar
- (lambda (action)
- (setq ranges (car action)
- todo-marks (caddr action))
- (mapcar (lambda (mark) (add-to-list 'all-marks mark)) todo-marks)
- (if (numberp (cdr ranges)) (setq ranges (list ranges)))
- (nnmaildir--nlist-iterate nlist ranges
- (cond ((eq 'del (cadr action)) del-action)
- ((eq 'add (cadr action)) add-action)
- (t set-action))))
- actions)
+ (dolist (action actions)
+ (setq ranges (car action)
+ todo-marks (caddr action))
+ (dolist (mark todo-marks)
+ (add-to-list 'all-marks mark))
+ (if (numberp (cdr ranges)) (setq ranges (list ranges)))
+ (nnmaildir--nlist-iterate nlist ranges
+ (cond ((eq 'del (cadr action)) del-action)
+ ((eq 'add (cadr action)) add-action)
+ (t set-action))))
nil)))
(defun nnmaildir-close-group (gname &optional server)
@@ -1576,22 +1614,16 @@ by nnmaildir-request-article.")
flist (nnmaildir--up2-1 (length files))
flist (make-vector flist 0))
(save-match-data
- (mapcar
- (lambda (file)
- (string-match "\\`\\([^:]*\\)\\(:.*\\)?\\'" file)
- (intern (match-string 1 file) flist))
- files))
- (mapcar
- (lambda (dir)
- (setq files (cdr dir)
- dir (file-name-as-directory (car dir)))
- (mapcar
- (lambda (file)
- (unless (or (intern-soft file flist) (string= file ":"))
- (setq file (concat dir file))
- (delete-file file)))
- files))
- dirs)
+ (dolist (file files)
+ (string-match "\\`\\([^:]*\\)\\(:.*\\)?\\'" file)
+ (intern (match-string 1 file) flist)))
+ (dolist (dir dirs)
+ (setq files (cdr dir)
+ dir (file-name-as-directory (car dir)))
+ (dolist (file files)
+ (unless (or (intern-soft file flist) (string= file ":"))
+ (setq file (concat dir file))
+ (delete-file file))))
t)))
(defun nnmaildir-close-server (&optional server)
@@ -1608,7 +1640,7 @@ by nnmaildir-request-article.")
(mapatoms (lambda (server)
(setq servers (cons (symbol-name server) servers)))
nnmaildir--servers)
- (mapcar 'nnmaildir-close-server servers)
+ (mapc 'nnmaildir-close-server servers)
(setq buffer (get-buffer " *nnmaildir work*"))
(if buffer (kill-buffer buffer))
(setq buffer (get-buffer " *nnmaildir nov*"))
diff --git a/lisp/gnus/nnmbox.el b/lisp/gnus/nnmbox.el
index fd8ec27d225..d7dddc96362 100644
--- a/lisp/gnus/nnmbox.el
+++ b/lisp/gnus/nnmbox.el
@@ -284,7 +284,7 @@
(nconc rest articles))))
(deffoo nnmbox-request-move-article
- (article group server accept-form &optional last)
+ (article group server accept-form &optional last move-is-internal)
(let ((buf (get-buffer-create " *nnmbox move*"))
result)
(and
diff --git a/lisp/gnus/nnmh.el b/lisp/gnus/nnmh.el
index 3eeea7487dc..a7735edc513 100644
--- a/lisp/gnus/nnmh.el
+++ b/lisp/gnus/nnmh.el
@@ -176,7 +176,7 @@ as unread by Gnus.")
(nnheader-re-read-dir pathname)
(setq dir
(sort
- (mapcar (lambda (name) (string-to-number name))
+ (mapcar 'string-to-number
(directory-files pathname nil "^[0-9]+$" t))
'<))
(cond
@@ -211,7 +211,6 @@ as unread by Gnus.")
(setq dir (expand-file-name dir))
;; Recurse down all directories.
(let ((dirs (and (file-readable-p dir)
- (> (nth 1 (file-attributes (file-chase-links dir))) 2)
(nnheader-directory-files dir t nil t)))
rdir)
;; Recurse down directories.
@@ -223,9 +222,8 @@ as unread by Gnus.")
(nnmh-request-list-1 rdir))))
;; For each directory, generate an active file line.
(unless (string= (expand-file-name nnmh-toplev) dir)
- (let ((files (mapcar
- (lambda (name) (string-to-number name))
- (directory-files dir nil "^[0-9]+$" t))))
+ (let ((files (mapcar 'string-to-number
+ (directory-files dir nil "^[0-9]+$" t))))
(when files
(save-excursion
(set-buffer nntp-server-buffer)
@@ -290,8 +288,8 @@ as unread by Gnus.")
(deffoo nnmh-close-group (group &optional server)
t)
-(deffoo nnmh-request-move-article (article group server
- accept-form &optional last)
+(deffoo nnmh-request-move-article (article group server accept-form
+ &optional last move-is-internal)
(let ((buf (get-buffer-create " *nnmh move*"))
result)
(and
@@ -356,11 +354,9 @@ as unread by Gnus.")
nnmh-group-alist)
(nnmh-possibly-create-directory group)
(nnmh-possibly-change-directory group server)
- (let ((articles (mapcar
- (lambda (file)
- (string-to-number file))
- (directory-files
- nnmh-current-directory nil "^[0-9]+$"))))
+ (let ((articles (mapcar 'string-to-number
+ (directory-files
+ nnmh-current-directory nil "^[0-9]+$"))))
(when articles
(setcar active (apply 'min articles))
(setcdr active (apply 'max articles))))))
@@ -484,10 +480,8 @@ as unread by Gnus.")
(gnus-make-directory dir))
;; Find the highest number in the group.
(let ((files (sort
- (mapcar
- (lambda (f)
- (string-to-number f))
- (directory-files dir nil "^[0-9]+$"))
+ (mapcar 'string-to-number
+ (directory-files dir nil "^[0-9]+$"))
'>)))
(when files
(setcdr active (car files)))))
@@ -509,7 +503,7 @@ as unread by Gnus.")
;; articles in this folder. The articles that are "new" will be
;; marked as unread by Gnus.
(let* ((dir nnmh-current-directory)
- (files (sort (mapcar (function (lambda (name) (string-to-number name)))
+ (files (sort (mapcar 'string-to-number
(directory-files nnmh-current-directory
nil "^[0-9]+$" t))
'<))
diff --git a/lisp/gnus/nnml.el b/lisp/gnus/nnml.el
index 8396c174a3f..8a5afbe5b60 100644
--- a/lisp/gnus/nnml.el
+++ b/lisp/gnus/nnml.el
@@ -3,8 +3,9 @@
;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-;; Author: Simon Josefsson <simon@josefsson.org> (adding MARKS)
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Authors: Didier Verna <didier@xemacs.org> (adding compaction)
+;; Simon Josefsson <simon@josefsson.org> (adding MARKS)
+;; Lars Magne Ingebrigtsen <larsi@gnus.org>
;; Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Keywords: news, mail
@@ -40,7 +41,8 @@
(eval-when-compile (require 'cl))
(eval-and-compile
- (autoload 'gnus-article-unpropagatable-p "gnus-sum"))
+ (autoload 'gnus-article-unpropagatable-p "gnus-sum")
+ (autoload 'gnus-backlog-remove-article "gnus-bcklg"))
(nnoo-declare nnml)
@@ -83,7 +85,18 @@ marks file will be regenerated properly by Gnus.")
"If non-nil, inhibit expiry.")
(defvoo nnml-use-compressed-files nil
- "If non-nil, allow using compressed message files.")
+ "If non-nil, allow using compressed message files.
+
+If it is a string, use it as the file extension which specifies
+the compression program. You can set it to \".bz2\" if your Emacs
+supports auto-compression using the bzip2 program. A value of t
+is equivalent to \".gz\".")
+
+(defvoo nnml-compressed-files-size-threshold 1000
+ "Default size threshold for compressed message files.
+Message files with bodies larger than that many characters will
+be automatically compressed if `nnml-use-compressed-files' is
+non-nil.")
@@ -116,6 +129,37 @@ marks file will be regenerated properly by Gnus.")
(nnoo-define-basics nnml)
+(eval-when-compile
+ (defsubst nnml-group-name-charset (group server-or-method)
+ (gnus-group-name-charset
+ (if (stringp server-or-method)
+ (gnus-server-to-method
+ (if (string-match "\\+" server-or-method)
+ (concat (substring server-or-method 0 (match-beginning 0))
+ ":" (substring server-or-method (match-end 0)))
+ (concat "nnml:" server-or-method)))
+ (or server-or-method gnus-command-method '(nnml "")))
+ group)))
+
+(defun nnml-decoded-group-name (group &optional server-or-method)
+ "Return a decoded group name of GROUP on SERVER-OR-METHOD."
+ (if nnmail-group-names-not-encoded-p
+ group
+ (mm-decode-coding-string
+ group
+ (nnml-group-name-charset group server-or-method))))
+
+(defun nnml-encoded-group-name (group &optional server-or-method)
+ "Return an encoded group name of GROUP on SERVER-OR-METHOD."
+ (mm-encode-coding-string
+ group
+ (nnml-group-name-charset group server-or-method)))
+
+(defun nnml-group-pathname (group &optional file server)
+ "Return an absolute file name of FILE for GROUP on SERVER."
+ (nnmail-group-pathname (inline (nnml-decoded-group-name group server))
+ nnml-directory file))
+
(deffoo nnml-retrieve-headers (sequence &optional group server fetch-old)
(when (nnml-possibly-change-directory group server)
(save-excursion
@@ -188,14 +232,12 @@ marks file will be regenerated properly by Gnus.")
(file-name-coding-system nnmail-pathname-coding-system)
path gpath group-num)
(if (stringp id)
- (when (and (setq group-num (nnml-find-group-number id))
+ (when (and (setq group-num (nnml-find-group-number id server))
(cdr
(assq (cdr group-num)
(nnheader-article-to-file-alist
- (setq gpath
- (nnmail-group-pathname
- (car group-num)
- nnml-directory))))))
+ (setq gpath (nnml-group-pathname (car group-num)
+ nil server))))))
(setq path (concat gpath (int-to-string (cdr group-num)))))
(setq path (nnml-article-to-file id)))
(cond
@@ -216,7 +258,8 @@ marks file will be regenerated properly by Gnus.")
(string-to-number (file-name-nondirectory path)))))))
(deffoo nnml-request-group (group &optional server dont-check)
- (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (let ((file-name-coding-system nnmail-pathname-coding-system)
+ (decoded (nnml-decoded-group-name group server)))
(cond
((not (nnml-possibly-change-directory group server))
(nnheader-report 'nnml "Invalid group (no such directory)"))
@@ -226,15 +269,15 @@ marks file will be regenerated properly by Gnus.")
((not (file-directory-p nnml-current-directory))
(nnheader-report 'nnml "%s is not a directory" nnml-current-directory))
(dont-check
- (nnheader-report 'nnml "Group %s selected" group)
+ (nnheader-report 'nnml "Group %s selected" decoded)
t)
(t
(nnheader-re-read-dir nnml-current-directory)
(nnmail-activate 'nnml)
(let ((active (nth 1 (assoc group nnml-group-alist))))
(if (not active)
- (nnheader-report 'nnml "No such group: %s" group)
- (nnheader-report 'nnml "Selected group %s" group)
+ (nnheader-report 'nnml "No such group: %s" decoded)
+ (nnheader-report 'nnml "Selected group %s" decoded)
(nnheader-insert "211 %d %d %d %s\n"
(max (1+ (- (cdr active) (car active))) 0)
(car active) (cdr active) group)))))))
@@ -252,19 +295,23 @@ marks file will be regenerated properly by Gnus.")
(nnml-possibly-change-directory nil server)
(nnmail-activate 'nnml)
(cond
+ ((let ((file (directory-file-name (nnml-group-pathname group nil server)))
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (and (file-exists-p file)
+ (not (file-directory-p file))))
+ (nnheader-report 'nnml "%s is a file"
+ (directory-file-name (nnml-group-pathname group
+ nil server))))
((assoc group nnml-group-alist)
t)
- ((and (file-exists-p (nnmail-group-pathname group nnml-directory))
- (not (file-directory-p (nnmail-group-pathname group nnml-directory))))
- (nnheader-report 'nnml "%s is a file"
- (nnmail-group-pathname group nnml-directory)))
(t
(let (active)
(push (list group (setq active (cons 1 0)))
nnml-group-alist)
- (nnml-possibly-create-directory group)
+ (nnml-possibly-create-directory group server)
(nnml-possibly-change-directory group server)
- (let ((articles (nnml-directory-articles nnml-current-directory)))
+ (let* ((file-name-coding-system nnmail-pathname-coding-system)
+ (articles (nnml-directory-articles nnml-current-directory)))
(when articles
(setcar active (apply 'min articles))
(setcdr active (apply 'max articles))))
@@ -288,10 +335,12 @@ marks file will be regenerated properly by Gnus.")
(deffoo nnml-request-expire-articles (articles group &optional server force)
(nnml-possibly-change-directory group server)
- (let ((active-articles
- (nnml-directory-articles nnml-current-directory))
- (is-old t)
- article rest mod-time number)
+ (let* ((file-name-coding-system nnmail-pathname-coding-system)
+ (active-articles
+ (nnml-directory-articles nnml-current-directory))
+ (is-old t)
+ (decoded (nnml-decoded-group-name group server))
+ article rest mod-time number target)
(nnmail-activate 'nnml)
(setq active-articles (sort active-articles '<))
@@ -308,23 +357,33 @@ marks file will be regenerated properly by Gnus.")
nnml-inhibit-expiry)))
(progn
;; Allow a special target group.
- (unless (eq nnmail-expiry-target 'delete)
+ (setq target nnmail-expiry-target)
+ (unless (eq target 'delete)
(with-temp-buffer
(nnml-request-article number group server (current-buffer))
(let (nnml-current-directory
nnml-current-group
nnml-article-file-alist)
- (nnmail-expiry-target-group nnmail-expiry-target group)))
+ (when (functionp target)
+ (setq target (funcall target group)))
+ (if (and target
+ (or (gnus-request-group target)
+ (gnus-request-create-group target)))
+ (nnmail-expiry-target-group target group)
+ (setq target nil))))
;; Maybe directory is changed during nnmail-expiry-target-group.
(nnml-possibly-change-directory group server))
- (nnheader-message 5 "Deleting article %s in %s"
- number group)
- (condition-case ()
- (funcall nnmail-delete-file-function article)
- (file-error
- (push number rest)))
- (setq active-articles (delq number active-articles))
- (nnml-nov-delete-article group number))
+ (if target
+ (progn
+ (nnheader-message 5 "Deleting article %s in %s"
+ number decoded)
+ (condition-case ()
+ (funcall nnmail-delete-file-function article)
+ (file-error
+ (push number rest)))
+ (setq active-articles (delq number active-articles))
+ (nnml-nov-delete-article group number))
+ (push number rest)))
(push number rest)))
(let ((active (nth 1 (assoc group nnml-group-alist))))
(when active
@@ -336,8 +395,9 @@ marks file will be regenerated properly by Gnus.")
(nconc rest articles)))
(deffoo nnml-request-move-article
- (article group server accept-form &optional last)
+ (article group server accept-form &optional last move-is-internal)
(let ((buf (get-buffer-create " *nnml move*"))
+ (file-name-coding-system nnmail-pathname-coding-system)
result)
(nnml-possibly-change-directory group server)
(nnml-update-file-alist)
@@ -370,7 +430,7 @@ marks file will be regenerated properly by Gnus.")
(nnmail-check-syntax)
(let (result)
(when nnmail-cache-accepted-message-ids
- (nnmail-cache-insert (nnmail-fetch-field "message-id")
+ (nnmail-cache-insert (nnmail-fetch-field "message-id")
group
(nnmail-fetch-field "subject")
(nnmail-fetch-field "from")))
@@ -378,16 +438,20 @@ marks file will be regenerated properly by Gnus.")
(and
(nnmail-activate 'nnml)
(setq result (car (nnml-save-mail
- (list (cons group (nnml-active-number group))))))
+ (list (cons group (nnml-active-number group
+ server)))
+ server)))
(progn
(nnmail-save-active nnml-group-alist nnml-active-file)
(and last (nnml-save-nov))))
(and
(nnmail-activate 'nnml)
- (if (and (not (setq result (nnmail-article-group 'nnml-active-number)))
+ (if (and (not (setq result (nnmail-article-group
+ `(lambda (group)
+ (nnml-active-number group ,server)))))
(yes-or-no-p "Moved to `junk' group; delete article? "))
(setq result 'junk)
- (setq result (car (nnml-save-mail result))))
+ (setq result (car (nnml-save-mail result server))))
(when last
(nnmail-save-active nnml-group-alist nnml-active-file)
(when nnmail-cache-accepted-message-ids
@@ -439,47 +503,55 @@ marks file will be regenerated properly by Gnus.")
(deffoo nnml-request-delete-group (group &optional force server)
(nnml-possibly-change-directory group server)
- (when force
- ;; Delete all articles in GROUP.
- (let ((articles
- (directory-files
- nnml-current-directory t
- (concat nnheader-numerical-short-files
- "\\|" (regexp-quote nnml-nov-file-name) "$"
- "\\|" (regexp-quote nnml-marks-file-name) "$")))
- article)
- (while articles
- (setq article (pop articles))
- (when (file-writable-p article)
- (nnheader-message 5 "Deleting article %s in %s..." article group)
- (funcall nnmail-delete-file-function article))))
- ;; Try to delete the directory itself.
- (ignore-errors (delete-directory nnml-current-directory)))
- ;; Remove the group from all structures.
- (setq nnml-group-alist
- (delq (assoc group nnml-group-alist) nnml-group-alist)
- nnml-current-group nil
- nnml-current-directory nil)
- ;; Save the active file.
- (nnmail-save-active nnml-group-alist nnml-active-file)
+ (let ((file (directory-file-name nnml-current-directory))
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (if (file-exists-p file)
+ (if (file-directory-p file)
+ (progn
+ (when force
+ ;; Delete all articles in GROUP.
+ (let ((articles
+ (directory-files
+ nnml-current-directory t
+ (concat
+ nnheader-numerical-short-files
+ "\\|" (regexp-quote nnml-nov-file-name) "$"
+ "\\|" (regexp-quote nnml-marks-file-name) "$")))
+ (decoded (nnml-decoded-group-name group server)))
+ (dolist (article articles)
+ (when (file-writable-p article)
+ (nnheader-message 5 "Deleting article %s in %s..."
+ (file-name-nondirectory article)
+ decoded)
+ (funcall nnmail-delete-file-function article))))
+ ;; Try to delete the directory itself.
+ (ignore-errors (delete-directory nnml-current-directory))))
+ (nnheader-report 'nnml "%s is not a directory" file))
+ (nnheader-report 'nnml "No such directory: %s/" file))
+ ;; Remove the group from all structures.
+ (setq nnml-group-alist
+ (delq (assoc group nnml-group-alist) nnml-group-alist)
+ nnml-current-group nil
+ nnml-current-directory nil)
+ ;; Save the active file.
+ (nnmail-save-active nnml-group-alist nnml-active-file))
t)
(deffoo nnml-request-rename-group (group new-name &optional server)
(nnml-possibly-change-directory group server)
- (let ((new-dir (nnmail-group-pathname new-name nnml-directory))
- (old-dir (nnmail-group-pathname group nnml-directory)))
+ (let ((new-dir (nnml-group-pathname new-name nil server))
+ (old-dir (nnml-group-pathname group nil server))
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (ignore-errors
(make-directory new-dir t)
t)
;; We move the articles file by file instead of renaming
;; the directory -- there may be subgroups in this group.
;; One might be more clever, I guess.
- (let ((files (nnheader-article-to-file-alist old-dir)))
- (while files
- (rename-file
- (concat old-dir (cdar files))
- (concat new-dir (cdar files)))
- (pop files)))
+ (dolist (file (nnheader-article-to-file-alist old-dir))
+ (rename-file
+ (concat old-dir (cdr file))
+ (concat new-dir (cdr file))))
;; Move .overview file.
(let ((overview (concat old-dir nnml-nov-file-name)))
(when (file-exists-p overview)
@@ -534,7 +606,8 @@ marks file will be regenerated properly by Gnus.")
(defun nnml-deletable-article-p (group article)
"Say whether ARTICLE in GROUP can be deleted."
- (let (path)
+ (let ((file-name-coding-system nnmail-pathname-coding-system)
+ path)
(when (setq path (nnml-article-to-file article))
(when (file-writable-p path)
(or (not nnmail-keep-last-article)
@@ -542,7 +615,7 @@ marks file will be regenerated properly by Gnus.")
article)))))))
;; Find an article number in the current group given the Message-ID.
-(defun nnml-find-group-number (id)
+(defun nnml-find-group-number (id server)
(save-excursion
(set-buffer (get-buffer-create " *nnml id*"))
(let ((alist nnml-group-alist)
@@ -550,22 +623,21 @@ marks file will be regenerated properly by Gnus.")
;; We want to look through all .overview files, but we want to
;; start with the one in the current directory. It seems most
;; likely that the article we are looking for is in that group.
- (if (setq number (nnml-find-id nnml-current-group id))
+ (if (setq number (nnml-find-id nnml-current-group id server))
(cons nnml-current-group number)
;; It wasn't there, so we look through the other groups as well.
(while (and (not number)
alist)
(or (string= (caar alist) nnml-current-group)
- (setq number (nnml-find-id (caar alist) id)))
+ (setq number (nnml-find-id (caar alist) id server)))
(or number
(setq alist (cdr alist))))
(and number
(cons (caar alist) number))))))
-(defun nnml-find-id (group id)
+(defun nnml-find-id (group id server)
(erase-buffer)
- (let ((nov (expand-file-name nnml-nov-file-name
- (nnmail-group-pathname group nnml-directory)))
+ (let ((nov (nnml-group-pathname group nnml-nov-file-name server))
number found)
(when (file-exists-p nov)
(nnheader-insert-file-contents nov)
@@ -573,7 +645,7 @@ marks file will be regenerated properly by Gnus.")
(search-forward id nil t)) ; We find the ID.
;; And the id is in the fourth field.
(if (not (and (search-backward "\t" nil t 4)
- (not (search-backward"\t" (gnus-point-at-bol) t))))
+ (not (search-backward "\t" (point-at-bol) t))))
(forward-line 1)
(beginning-of-line)
(setq found t)
@@ -606,7 +678,7 @@ marks file will be regenerated properly by Gnus.")
(nnml-open-server server))
(if (not group)
t
- (let ((pathname (nnmail-group-pathname group nnml-directory))
+ (let ((pathname (nnml-group-pathname group nil server))
(file-name-coding-system nnmail-pathname-coding-system))
(when (not (equal pathname nnml-current-directory))
(setq nnml-current-directory pathname
@@ -614,20 +686,32 @@ marks file will be regenerated properly by Gnus.")
nnml-article-file-alist nil))
(file-exists-p nnml-current-directory))))
-(defun nnml-possibly-create-directory (group)
- (let ((dir (nnmail-group-pathname group nnml-directory)))
+(defun nnml-possibly-create-directory (group &optional server)
+ (let ((dir (nnml-group-pathname group nil server))
+ (file-name-coding-system nnmail-pathname-coding-system))
(unless (file-exists-p dir)
(make-directory (directory-file-name dir) t)
(nnheader-message 5 "Creating mail directory %s" dir))))
-(defun nnml-save-mail (group-art)
- "Called narrowed to an article."
- (let (chars headers extension)
- (setq chars (nnmail-insert-lines))
- (setq extension
- (and nnml-use-compressed-files
- (> chars 1000)
- ".gz"))
+(defun nnml-save-mail (group-art &optional server)
+ "Save a mail into the groups GROUP-ART in the nnml server SERVER.
+GROUP-ART is a list that each element is a cons of a group name and an
+article number. This function is called narrowed to an article."
+ (let* ((chars (nnmail-insert-lines))
+ (extension (and nnml-use-compressed-files
+ (> chars nnml-compressed-files-size-threshold)
+ (if (stringp nnml-use-compressed-files)
+ nnml-use-compressed-files
+ ".gz")))
+ decoded dec file first headers)
+ (when nnmail-group-names-not-encoded-p
+ (dolist (ga (prog1 group-art (setq group-art nil)))
+ (setq group-art (nconc group-art
+ (list (cons (nnml-encoded-group-name (car ga)
+ server)
+ (cdr ga))))
+ decoded (nconc decoded (list (car ga)))))
+ (setq dec decoded))
(nnmail-insert-xref group-art)
(run-hooks 'nnmail-prepare-save-mail-hook)
(run-hooks 'nnml-prepare-save-mail-hook)
@@ -636,43 +720,50 @@ marks file will be regenerated properly by Gnus.")
(replace-match "X-From-Line: ")
(forward-line 1))
;; We save the article in all the groups it belongs in.
- (let ((ga group-art)
- first)
- (while ga
- (nnml-possibly-create-directory (caar ga))
- (let ((file (concat (nnmail-group-pathname
- (caar ga) nnml-directory)
- (int-to-string (cdar ga))
- extension)))
- (if first
- ;; It was already saved, so we just make a hard link.
- (funcall nnmail-crosspost-link-function first file t)
- ;; Save the article.
- (nnmail-write-region (point-min) (point-max) file nil
- (if (nnheader-be-verbose 5) nil 'nomesg))
- (setq first file)))
- (setq ga (cdr ga))))
+ (dolist (ga group-art)
+ (if nnmail-group-names-not-encoded-p
+ (progn
+ (nnml-possibly-create-directory (car decoded) server)
+ (setq file (nnmail-group-pathname
+ (pop decoded) nnml-directory
+ (concat (number-to-string (cdr ga)) extension))))
+ (nnml-possibly-create-directory (car ga) server)
+ (setq file (nnml-group-pathname
+ (car ga) (concat (number-to-string (cdr ga)) extension)
+ server)))
+ (if first
+ ;; It was already saved, so we just make a hard link.
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (funcall nnmail-crosspost-link-function first file t))
+ ;; Save the article.
+ (nnmail-write-region (point-min) (point-max) file nil
+ (if (nnheader-be-verbose 5) nil 'nomesg))
+ (setq first file)))
;; Generate a nov line for this article. We generate the nov
;; line after saving, because nov generation destroys the
;; header.
(setq headers (nnml-parse-head chars))
;; Output the nov line to all nov databases that should have it.
- (let ((ga group-art))
- (while ga
- (nnml-add-nov (caar ga) (cdar ga) headers)
- (setq ga (cdr ga))))
- group-art))
-
-(defun nnml-active-number (group)
- "Compute the next article number in GROUP."
- (let ((active (cadr (assoc group nnml-group-alist))))
+ (if nnmail-group-names-not-encoded-p
+ (dolist (ga group-art)
+ (nnml-add-nov (pop dec) (cdr ga) headers))
+ (dolist (ga group-art)
+ (nnml-add-nov (car ga) (cdr ga) headers))))
+ group-art)
+
+(defun nnml-active-number (group &optional server)
+ "Compute the next article number in GROUP on SERVER."
+ (let ((active (cadr (assoc (if nnmail-group-names-not-encoded-p
+ (nnml-encoded-group-name group server)
+ group)
+ nnml-group-alist))))
;; The group wasn't known to nnml, so we just create an active
;; entry for it.
(unless active
;; Perhaps the active file was corrupt? See whether
;; there are any articles in this group.
- (nnml-possibly-create-directory group)
- (nnml-possibly-change-directory group)
+ (nnml-possibly-create-directory group server)
+ (nnml-possibly-change-directory group server)
(unless nnml-article-file-alist
(setq nnml-article-file-alist
(sort
@@ -686,8 +777,7 @@ marks file will be regenerated properly by Gnus.")
(push (list group active) nnml-group-alist))
(setcdr active (1+ (cdr active)))
(while (file-exists-p
- (expand-file-name (int-to-string (cdr active))
- (nnmail-group-pathname group nnml-directory)))
+ (nnml-group-pathname group (int-to-string (cdr active)) server))
(setcdr active (1+ (cdr active))))
(cdr active)))
@@ -700,7 +790,7 @@ marks file will be regenerated properly by Gnus.")
(nnheader-insert-nov headers)))
(defsubst nnml-header-value ()
- (buffer-substring (match-end 0) (gnus-point-at-eol)))
+ (buffer-substring (match-end 0) (point-at-eol)))
(defun nnml-parse-head (chars &optional number)
"Parse the head of the current buffer."
@@ -718,13 +808,13 @@ marks file will be regenerated properly by Gnus.")
headers))))
(defun nnml-get-nov-buffer (group)
- (let ((buffer (get-buffer-create (format " *nnml overview %s*" group))))
+ (let* ((decoded (nnml-decoded-group-name group))
+ (buffer (get-buffer-create (format " *nnml overview %s*" decoded)))
+ (file-name-coding-system nnmail-pathname-coding-system))
(save-excursion
(set-buffer buffer)
(set (make-local-variable 'nnml-nov-buffer-file-name)
- (expand-file-name
- nnml-nov-file-name
- (nnmail-group-pathname group nnml-directory)))
+ (nnmail-group-pathname decoded nnml-directory nnml-nov-file-name))
(erase-buffer)
(when (file-exists-p nnml-nov-buffer-file-name)
(nnheader-insert-file-contents nnml-nov-buffer-file-name)))
@@ -759,53 +849,57 @@ marks file will be regenerated properly by Gnus.")
(nnml-open-server server))
(setq nnml-directory (expand-file-name nnml-directory))
;; Recurse down the directories.
- (nnml-generate-nov-databases-1 nnml-directory nil t)
+ (nnml-generate-nov-databases-directory nnml-directory nil t)
;; Save the active file.
(nnmail-save-active nnml-group-alist nnml-active-file))
-(defun nnml-generate-nov-databases-1 (dir &optional seen no-active)
- "Regenerate the NOV database in DIR."
- (interactive "DRegenerate NOV in: ")
+(defun nnml-generate-nov-databases-directory (dir &optional seen no-active)
+ "Regenerate the NOV database in DIR.
+
+Unless no-active is non-nil, update the active file too."
+ (interactive (list (let ((file-name-coding-system
+ nnmail-pathname-coding-system))
+ (read-directory-name "Regenerate NOV in: "
+ nnml-directory nil t))))
(setq dir (file-name-as-directory dir))
- ;; Only scan this sub-tree if we haven't been here yet.
- (unless (member (file-truename dir) seen)
- (push (file-truename dir) seen)
- ;; We descend recursively
- (let ((dirs (directory-files dir t nil t))
- dir)
- (while (setq dir (pop dirs))
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ ;; Only scan this sub-tree if we haven't been here yet.
+ (unless (member (file-truename dir) seen)
+ (push (file-truename dir) seen)
+ ;; We descend recursively
+ (dolist (dir (directory-files dir t nil t))
(when (and (not (string-match "^\\." (file-name-nondirectory dir)))
(file-directory-p dir))
- (nnml-generate-nov-databases-1 dir seen))))
- ;; Do this directory.
- (let ((files (sort (nnheader-article-to-file-alist dir)
- 'car-less-than-car)))
- (if (not files)
- (let* ((group (nnheader-file-to-group
- (directory-file-name dir) nnml-directory))
- (info (cadr (assoc group nnml-group-alist))))
- (when info
- (setcar info (1+ (cdr info)))))
- (funcall nnml-generate-active-function dir)
- ;; Generate the nov file.
- (nnml-generate-nov-file dir files)
- (unless no-active
- (nnmail-save-active nnml-group-alist nnml-active-file))))))
-
-(eval-when-compile (defvar files))
+ (nnml-generate-nov-databases-directory dir seen)))
+ ;; Do this directory.
+ (let ((files (sort (nnheader-article-to-file-alist dir)
+ 'car-less-than-car)))
+ (if (not files)
+ (let* ((group (nnheader-file-to-group
+ (directory-file-name dir) nnml-directory))
+ (info (cadr (assoc group nnml-group-alist))))
+ (when info
+ (setcar info (1+ (cdr info)))))
+ (funcall nnml-generate-active-function dir)
+ ;; Generate the nov file.
+ (nnml-generate-nov-file dir files)
+ (unless no-active
+ (nnmail-save-active nnml-group-alist nnml-active-file)))))))
+
+(defvar files)
(defun nnml-generate-active-info (dir)
;; Update the active info for this group.
- (let* ((group (nnheader-file-to-group
- (directory-file-name dir) nnml-directory))
- (entry (assoc group nnml-group-alist))
- (last (or (caadr entry) 0)))
- (setq nnml-group-alist (delq entry nnml-group-alist))
+ (let ((group (directory-file-name dir))
+ entry last)
+ (setq group (nnheader-file-to-group (nnml-encoded-group-name group)
+ nnml-directory)
+ entry (assoc group nnml-group-alist)
+ last (or (caadr entry) 0)
+ nnml-group-alist (delq entry nnml-group-alist))
(push (list group
(cons (or (caar files) (1+ last))
(max last
- (or (let ((f files))
- (while (cdr f) (setq f (cdr f)))
- (caar f))
+ (or (caar (last files))
0))))
nnml-group-alist)))
@@ -938,20 +1032,20 @@ Use the nov database for the current group if available."
(deffoo nnml-request-update-info (group info &optional server)
(nnml-possibly-change-directory group server)
- (when (and (not nnml-marks-is-evil) (nnml-marks-changed-p group))
+ (when (and (not nnml-marks-is-evil) (nnml-marks-changed-p group server))
(nnheader-message 8 "Updating marks for %s..." group)
(nnml-open-marks group server)
;; Update info using `nnml-marks'.
- (mapcar (lambda (pred)
- (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
- (gnus-info-set-marks
- info
- (gnus-update-alist-soft
- (cdr pred)
- (cdr (assq (cdr pred) nnml-marks))
- (gnus-info-marks info))
- t)))
- gnus-article-mark-lists)
+ (mapc (lambda (pred)
+ (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
+ (gnus-info-set-marks
+ info
+ (gnus-update-alist-soft
+ (cdr pred)
+ (cdr (assq (cdr pred) nnml-marks))
+ (gnus-info-marks info))
+ t)))
+ gnus-article-mark-lists)
(let ((seen (cdr (assq 'read nnml-marks))))
(gnus-info-set-read info
(if (and (integerp (car seen))
@@ -961,9 +1055,8 @@ Use the nov database for the current group if available."
(nnheader-message 8 "Updating marks for %s...done" group))
info)
-(defun nnml-marks-changed-p (group)
- (let ((file (expand-file-name nnml-marks-file-name
- (nnmail-group-pathname group nnml-directory))))
+(defun nnml-marks-changed-p (group server)
+ (let ((file (nnml-group-pathname group nnml-marks-file-name server)))
(if (null (gnus-gethash file nnml-marks-modtime))
t ;; never looked at marks file, assume it has changed
(not (equal (gnus-gethash file nnml-marks-modtime)
@@ -971,11 +1064,10 @@ Use the nov database for the current group if available."
(defun nnml-save-marks (group server)
(let ((file-name-coding-system nnmail-pathname-coding-system)
- (file (expand-file-name nnml-marks-file-name
- (nnmail-group-pathname group nnml-directory))))
+ (file (nnml-group-pathname group nnml-marks-file-name server)))
(condition-case err
(progn
- (nnml-possibly-create-directory group)
+ (nnml-possibly-create-directory group server)
(with-temp-file file
(erase-buffer)
(gnus-prin1 nnml-marks)
@@ -988,9 +1080,10 @@ Use the nov database for the current group if available."
(error "Cannot write to %s (%s)" file err))))))
(defun nnml-open-marks (group server)
- (let ((file (expand-file-name
- nnml-marks-file-name
- (nnmail-group-pathname group nnml-directory))))
+ (let* ((decoded (nnml-decoded-group-name group server))
+ (file (nnmail-group-pathname decoded nnml-directory
+ nnml-marks-file-name))
+ (file-name-coding-system nnmail-pathname-coding-system))
(if (file-exists-p file)
(condition-case err
(with-temp-buffer
@@ -1008,14 +1101,211 @@ Use the nov database for the current group if available."
(let ((info (gnus-get-info
(gnus-group-prefixed-name
group
- (gnus-server-to-method (format "nnml:%s" server))))))
- (nnheader-message 7 "Bootstrapping marks for %s..." group)
+ (gnus-server-to-method
+ (format "nnml:%s" (or server "")))))))
+ (setq decoded (if (member server '(nil ""))
+ (concat "nnml:" decoded)
+ (format "nnml+%s:%s" server decoded)))
+ (nnheader-message 7 "Bootstrapping marks for %s..." decoded)
(setq nnml-marks (gnus-info-marks info))
(push (cons 'read (gnus-info-read info)) nnml-marks)
(dolist (el gnus-article-unpropagated-mark-lists)
(setq nnml-marks (gnus-remassoc el nnml-marks)))
(nnml-save-marks group server)
- (nnheader-message 7 "Bootstrapping marks for %s...done" group)))))
+ (nnheader-message 7 "Bootstrapping marks for %s...done" decoded)))))
+
+
+;;;
+;;; Group and server compaction. -- dvl
+;;;
+
+;; #### FIXME: this function handles self Xref: entry correctly, but I don't
+;; #### know how to handle external cross-references. I actually don't know if
+;; #### this is handled correctly elsewhere. For instance, what happens if you
+;; #### move all articles to a new group (that's what people do for manual
+;; #### compaction) ?
+
+;; #### NOTE: the function below handles the article backlog. This is
+;; #### conceptually the wrong place to do it because the backend is at a
+;; #### lower level. However, this is the only place where we have the needed
+;; #### information to do the job. Ideally, this function should not handle
+;; #### the backlog by itself, but return a list of moved groups / articles to
+;; #### the caller. This will become important to avoid code duplication when
+;; #### other backends get a compaction feature. Also, note that invalidating
+;; #### the "original article buffer" is already done at an upper level.
+
+;; Shouldn't `nnml-request-compact-group' be interactive? --rsteib
+
+(defun nnml-request-compact-group (group &optional server save)
+ (nnml-possibly-change-directory group server)
+ (unless nnml-article-file-alist
+ (setq nnml-article-file-alist
+ (sort (nnml-current-group-article-to-file-alist)
+ 'car-less-than-car)))
+ (if (not nnml-article-file-alist)
+ ;; The group is empty: do nothing but return t
+ t
+ ;; The group is not empty:
+ (let* ((group-full-name
+ (gnus-group-prefixed-name
+ group
+ (gnus-server-to-method (format "nnml:%s" server))))
+ (info (gnus-get-info group-full-name))
+ (new-number 1)
+ compacted)
+ (let ((articles nnml-article-file-alist)
+ article)
+ (while (setq article (pop articles))
+ (let ((old-number (car article)))
+ (when (> old-number new-number)
+ ;; There is a gap here:
+ (let ((old-number-string (int-to-string old-number))
+ (new-number-string (int-to-string new-number)))
+ (setq compacted t)
+ ;; #### NOTE: `nnml-article-to-file' calls
+ ;; #### `nnml-update-file-alist' (which in turn calls
+ ;; #### `nnml-current-group-article-to-file-alist', which
+ ;; #### might use the NOV database). This might turn out to be
+ ;; #### inefficient. In that case, we will do the work
+ ;; #### manually.
+ ;; 1/ Move the article to a new file:
+ (let* ((oldfile (nnml-article-to-file old-number))
+ (newfile
+ (gnus-replace-in-string
+ oldfile
+ ;; nnml-use-compressed-files might be any string, but
+ ;; probably it's sufficient to take into account only
+ ;; "\\.[a-z0-9]+". Note that we can't only use the
+ ;; value of nnml-use-compressed-files because old
+ ;; articles might have been saved with a different
+ ;; value.
+ (concat
+ "\\(" old-number-string "\\)\\(\\(\\.[a-z0-9]+\\)?\\)$")
+ (concat new-number-string "\\2"))))
+ (with-current-buffer nntp-server-buffer
+ (nnmail-find-file oldfile)
+ ;; Update the Xref header in the article itself:
+ (when (and (re-search-forward "^Xref: [^ ]+ " nil t)
+ (re-search-forward
+ (concat "\\<"
+ (regexp-quote
+ (concat group ":" old-number-string))
+ "\\>")
+ (point-at-eol) t))
+ (replace-match
+ (concat group ":" new-number-string)))
+ ;; Save to the new file:
+ (nnmail-write-region (point-min) (point-max) newfile))
+ (funcall nnmail-delete-file-function oldfile))
+ ;; 2/ Update all marks for this article:
+ ;; #### NOTE: it is possible that the new article number
+ ;; #### already belongs to a range, whereas the corresponding
+ ;; #### article doesn't exist (for example, if you delete an
+ ;; #### article). For that reason, it is important to update
+ ;; #### the ranges (meaning remove inexistant articles) before
+ ;; #### doing anything on them.
+ ;; 2 a/ read articles:
+ (let ((read (gnus-info-read info)))
+ (setq read (gnus-remove-from-range read (list new-number)))
+ (when (gnus-member-of-range old-number read)
+ (setq read (gnus-remove-from-range read (list old-number)))
+ (setq read (gnus-add-to-range read (list new-number))))
+ (gnus-info-set-read info read))
+ ;; 2 b/ marked articles:
+ (let ((oldmarks (gnus-info-marks info))
+ mark newmarks)
+ (while (setq mark (pop oldmarks))
+ (setcdr mark (gnus-remove-from-range (cdr mark)
+ (list new-number)))
+ (when (gnus-member-of-range old-number (cdr mark))
+ (setcdr mark (gnus-remove-from-range (cdr mark)
+ (list old-number)))
+ (setcdr mark (gnus-add-to-range (cdr mark)
+ (list new-number))))
+ (push mark newmarks))
+ (gnus-info-set-marks info newmarks))
+ ;; 3/ Update the NOV entry for this article:
+ (unless nnml-nov-is-evil
+ (save-excursion
+ (set-buffer (nnml-open-nov group))
+ (when (nnheader-find-nov-line old-number)
+ ;; Replace the article number:
+ (looking-at old-number-string)
+ (replace-match new-number-string nil t)
+ ;; Update the Xref header:
+ (when (re-search-forward
+ (concat "\\(Xref:[^\t\n]* \\)\\<"
+ (regexp-quote
+ (concat group ":" old-number-string))
+ "\\>")
+ (point-at-eol) t)
+ (replace-match
+ (concat "\\1" group ":" new-number-string))))))
+ ;; 4/ Possibly remove the article from the backlog:
+ (when gnus-keep-backlog
+ ;; #### NOTE: instead of removing the article, we could
+ ;; #### modify the backlog to reflect the numbering change,
+ ;; #### but I don't think it's worth it.
+ (gnus-backlog-remove-article group-full-name old-number)
+ (gnus-backlog-remove-article group-full-name new-number))))
+ (setq new-number (1+ new-number)))))
+ (if (not compacted)
+ ;; No compaction had to be done:
+ t
+ ;; Some articles have actually been renamed:
+ ;; 1/ Rebuild active information:
+ (let ((entry (assoc group nnml-group-alist))
+ (active (cons 1 (1- new-number))))
+ (setq nnml-group-alist (delq entry nnml-group-alist))
+ (push (list group active) nnml-group-alist)
+ ;; Update the active hashtable to let the *Group* buffer display
+ ;; up-to-date lines. I don't think that either gnus-newsrc-hashtb or
+ ;; gnus-newwrc-alist are out of date, since all we did is to modify
+ ;; the info of the group internally.
+ (gnus-set-active group-full-name active))
+ ;; 1 bis/
+ ;; #### NOTE: normally, we should save the overview (NOV) file
+ ;; #### here, just like we save the marks file. However, there is no
+ ;; #### such function as nnml-save-nov for a single group. Only for
+ ;; #### all groups. Gnus inconsistency is getting worse every day...
+ ;; 2/ Rebuild marks file:
+ (unless nnml-marks-is-evil
+ ;; #### NOTE: this constant use of global variables everywhere is
+ ;; #### truly disgusting. Gnus really needs a *major* cleanup.
+ (setq nnml-marks (gnus-info-marks info))
+ (push (cons 'read (gnus-info-read info)) nnml-marks)
+ (dolist (el gnus-article-unpropagated-mark-lists)
+ (setq nnml-marks (gnus-remassoc el nnml-marks)))
+ (nnml-save-marks group server))
+ ;; 3/ Save everything if this was not part of a bigger operation:
+ (if (not save)
+ ;; Nothing to save (yet):
+ t
+ ;; Something to save:
+ ;; a/ Save the NOV databases:
+ ;; #### NOTE: this should be done directory per directory in 1bis
+ ;; #### above. See comment there.
+ (nnml-save-nov)
+ ;; b/ Save the active file:
+ (nnmail-save-active nnml-group-alist nnml-active-file)
+ t)))))
+
+(defun nnml-request-compact (&optional server)
+ "Request compaction of all SERVER nnml groups."
+ (interactive (list (or (nnoo-current-server 'nnml) "")))
+ (nnmail-activate 'nnml)
+ (unless (nnml-server-opened server)
+ (nnml-open-server server))
+ (setq nnml-directory (expand-file-name nnml-directory))
+ (let* ((groups (gnus-groups-from-server
+ (gnus-server-to-method (format "nnml:%s" server))))
+ (first (pop groups))
+ group)
+ (when first
+ (while (setq group (pop groups))
+ (nnml-request-compact-group (gnus-group-real-name group) server))
+ (nnml-request-compact-group (gnus-group-real-name first) server t))))
+
(provide 'nnml)
diff --git a/lisp/gnus/nnnil.el b/lisp/gnus/nnnil.el
index 3508a7dd94f..926553365d3 100644
--- a/lisp/gnus/nnnil.el
+++ b/lisp/gnus/nnnil.el
@@ -32,8 +32,7 @@
(defvar nnnil-status-string "")
(defun nnnil-retrieve-headers (articles &optional group server fetch-old)
- (save-excursion
- (set-buffer nntp-server-buffer)
+ (with-current-buffer nntp-server-buffer
(erase-buffer))
'nov)
@@ -69,8 +68,7 @@
t)
(defun nnnil-request-list (&optional server)
- (save-excursion
- (set-buffer nntp-server-buffer)
+ (with-current-buffer nntp-server-buffer
(erase-buffer))
t)
diff --git a/lisp/gnus/nnrss.el b/lisp/gnus/nnrss.el
index af2a3e2ea62..f72166b0455 100644
--- a/lisp/gnus/nnrss.el
+++ b/lisp/gnus/nnrss.el
@@ -50,6 +50,15 @@
(defvoo nnrss-directory (nnheader-concat gnus-directory "rss/")
"Where nnrss will save its files.")
+(defvoo nnrss-ignore-article-fields '(slash:comments)
+ "*List of fields that should be ignored when comparing RSS articles.
+Some RSS feeds update article fields during their lives, e.g. to
+indicate the number of comments or the number of times the
+articles have been seen. However, if there is a difference
+between the local article and the distant one, the latter is
+considered to be new. To avoid this and discard some fields, set
+this variable to the list of fields to be ignored.")
+
;; (group max rss-url)
(defvoo nnrss-server-data nil)
@@ -58,7 +67,7 @@
(defvoo nnrss-group-max 0)
(defvoo nnrss-group-min 1)
(defvoo nnrss-group nil)
-(defvoo nnrss-group-hashtb nil)
+(defvoo nnrss-group-hashtb (make-hash-table :test 'equal))
(defvoo nnrss-status-string "")
(defconst nnrss-version "nnrss 1.0")
@@ -83,7 +92,13 @@ ENTRY is the record of the current headline. GROUP is the group name.
ARTICLE is the article number of the current headline.")
(defvar nnrss-file-coding-system mm-universal-coding-system
- "Coding system used when reading and writing files.")
+ "*Coding system used when reading and writing files.
+If you run Gnus with various versions of Emacsen, the value of this
+variable should be the coding system that all those Emacsen support.
+Note that you have to regenerate all the nnrss groups if you change
+the value. Moreover, you should be patient even if you are made to
+read the same articles twice, that arises for the difference of the
+versions of xml.el.")
(defvar nnrss-compatible-encoding-alist
(delq nil (mapcar (lambda (elem)
@@ -180,9 +195,8 @@ used to render text. If it is nil, text will simply be folded.")
(deffoo nnrss-close-group (group &optional server)
t)
-(eval-when-compile
- (defvar mm-text-html-renderer)
- (defvar mm-text-html-washer-alist))
+(defvar mm-text-html-renderer)
+(defvar mm-text-html-washer-alist)
(deffoo nnrss-request-article (article &optional group server buffer)
(setq group (nnrss-decode-group-name group))
@@ -365,7 +379,8 @@ used to render text. If it is nil, text will simply be folded.")
(delq (assoc group nnrss-server-data) nnrss-server-data))
(nnrss-save-server-data server)
(ignore-errors
- (delete-file (nnrss-make-filename group server)))
+ (let ((file-name-coding-system nnmail-pathname-coding-system))
+ (delete-file (nnrss-make-filename group server))))
t)
(deffoo nnrss-request-list-newsgroups (&optional server)
@@ -391,10 +406,10 @@ return `utf-8' which is the default encoding for xml if it is available,
otherwise return nil."
(goto-char (point-min))
(if (re-search-forward
- "<\\?[^>]*encoding=\\(\"\\([^\">]+\\)\"\\|'\\([^'>]+\\)'\\)"
+ "<\\?[^>]*encoding=\\(?:\"\\([^\">]+\\)\"\\|'\\([^'>]+\\)'\\)"
nil t)
- (let ((encoding (intern (downcase (or (match-string 2)
- (match-string 3))))))
+ (let ((encoding (intern (downcase (or (match-string 1)
+ (match-string 2))))))
(or
(mm-coding-system-p (cdr (assq encoding
nnrss-compatible-encoding-alist)))
@@ -462,8 +477,7 @@ nnrss: %s: Not valid XML %s and w3-parse doesn't work %s"
(defun nnrss-generate-active ()
(when (y-or-n-p "Fetch extra categories? ")
- (dolist (func nnrss-extra-categories)
- (funcall func)))
+ (mapc 'funcall nnrss-extra-categories))
(save-excursion
(set-buffer nntp-server-buffer)
(erase-buffer)
@@ -500,37 +514,37 @@ which RSS 2.0 allows."
(concat
;; 1. year
"\\(199[0-9]\\|20[0-9][0-9]\\)"
- "\\(-"
- ;; 3. month
+ "\\(?:-"
+ ;; 2. month
"\\([01][0-9]\\)"
- "\\(-"
- ;; 5. day
+ "\\(?:-"
+ ;; 3. day
"\\([0-3][0-9]\\)"
- "\\)?\\)?\\(T"
- ;; 7. hh:mm
+ "\\)?\\)?\\(?:T"
+ ;; 4. hh:mm
"\\([012][0-9]:[0-5][0-9]\\)"
- "\\("
- ;; 9. :ss
+ "\\(?:"
+ ;; 5. :ss
"\\(:[0-5][0-9]\\)"
- "\\(\\.[0-9]+\\)?\\)?\\)?"
- ;; 13+14,15,16. zone
- "\\(\\(\\([+-][012][0-9]\\):\\([0-5][0-9]\\)\\)"
+ "\\(?:\\.[0-9]+\\)?\\)?\\)?"
+ ;; 6+7,8,9. zone
+ "\\(?:\\(?:\\([+-][012][0-9]\\):\\([0-5][0-9]\\)\\)"
"\\|\\([+-][012][0-9][0-5][0-9]\\)"
"\\|\\(Z\\)\\)?"))
date)
(setq year (string-to-number (match-string 1 date))
- month (string-to-number (or (match-string 3 date) "1"))
- day (string-to-number (or (match-string 5 date) "1"))
- time (if (match-beginning 9)
- (substring date (match-beginning 7) (match-end 9))
- (concat (or (match-string 7 date) "00:00") ":00"))
- zone (cond ((match-beginning 13)
- (concat (match-string 13 date)
- (match-string 14 date)))
- ((match-beginning 16) ;; Z
+ month (string-to-number (or (match-string 2 date) "1"))
+ day (string-to-number (or (match-string 3 date) "1"))
+ time (if (match-beginning 5)
+ (substring date (match-beginning 4) (match-end 5))
+ (concat (or (match-string 4 date) "00:00") ":00"))
+ zone (cond ((match-beginning 6)
+ (concat (match-string 6 date)
+ (match-string 7 date)))
+ ((match-beginning 9) ;; Z
"+0000")
(t ;; nil if zone is not provided.
- (match-string 15 date))))))
+ (match-string 8 date))))))
(if month
(progn
(setq cts (current-time-string (encode-time 0 0 0 day month year)))
@@ -545,13 +559,13 @@ which RSS 2.0 allows."
(defun nnrss-read-server-data (server)
(setq nnrss-server-data nil)
- (let ((file (nnrss-make-filename "nnrss" server)))
+ (let ((file (nnrss-make-filename "nnrss" server))
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (file-exists-p file)
;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
;; file names. So, we use `insert-file-contents' instead.
(mm-with-multibyte-buffer
- (let ((coding-system-for-read nnrss-file-coding-system)
- (file-name-coding-system nnmail-pathname-coding-system))
+ (let ((coding-system-for-read nnrss-file-coding-system))
(insert-file-contents file)
(eval-region (point-min) (point-max)))))))
@@ -568,21 +582,23 @@ which RSS 2.0 allows."
(defun nnrss-read-group-data (group server)
(setq nnrss-group-data nil)
- (setq nnrss-group-hashtb (gnus-make-hashtable))
+ (if (hash-table-p nnrss-group-hashtb)
+ (clrhash nnrss-group-hashtb)
+ (setq nnrss-group-hashtb (make-hash-table :test 'equal)))
(let ((pair (assoc group nnrss-server-data)))
(setq nnrss-group-max (or (cadr pair) 0))
(setq nnrss-group-min (+ nnrss-group-max 1)))
- (let ((file (nnrss-make-filename group server)))
+ (let ((file (nnrss-make-filename group server))
+ (file-name-coding-system nnmail-pathname-coding-system))
(when (file-exists-p file)
;; In Emacs 21.3 and earlier, `load' doesn't support non-ASCII
;; file names. So, we use `insert-file-contents' instead.
(mm-with-multibyte-buffer
- (let ((coding-system-for-read nnrss-file-coding-system)
- (file-name-coding-system nnmail-pathname-coding-system))
+ (let ((coding-system-for-read nnrss-file-coding-system))
(insert-file-contents file)
(eval-region (point-min) (point-max))))
(dolist (e nnrss-group-data)
- (gnus-sethash (or (nth 2 e) (nth 6 e)) t nnrss-group-hashtb)
+ (puthash (nth 9 e) t nnrss-group-hashtb)
(when (and (car e) (> nnrss-group-min (car e)))
(setq nnrss-group-min (car e)))
(when (and (car e) (< nnrss-group-max (car e)))
@@ -662,9 +678,20 @@ which RSS 2.0 allows."
;;; Snarf functions
+(defun nnrss-make-hash-index (item)
+ (setq item (gnus-remove-if
+ (lambda (field)
+ (when (listp field)
+ (memq (car field) nnrss-ignore-article-fields)))
+ item))
+ (md5 (gnus-prin1-to-string item)
+ nil nil
+ nnrss-file-coding-system))
+
(defun nnrss-check-group (group server)
(let (file xml subject url extra changed author date feed-subject
- enclosure comments rss-ns rdf-ns content-ns dc-ns)
+ enclosure comments rss-ns rdf-ns content-ns dc-ns
+ hash-index)
(if (and nnrss-use-local
(file-exists-p (setq file (expand-file-name
(nnrss-translate-file-chars
@@ -696,15 +723,12 @@ which RSS 2.0 allows."
(dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml)))
(when (and (listp item)
(string= (concat rss-ns "item") (car item))
- (if (setq url (nnrss-decode-entities-string
- (nnrss-node-text rss-ns 'link (cddr item))))
- (not (gnus-gethash url nnrss-group-hashtb))
- (setq extra (or (nnrss-node-text content-ns 'encoded item)
- (nnrss-node-text rss-ns 'description item)))
- (not (gnus-gethash extra nnrss-group-hashtb))))
+ (progn (setq hash-index (nnrss-make-hash-index item))
+ (not (gethash hash-index nnrss-group-hashtb))))
(setq subject (nnrss-node-text rss-ns 'title item))
- (setq extra (or extra
- (nnrss-node-text content-ns 'encoded item)
+ (setq url (nnrss-decode-entities-string
+ (nnrss-node-text rss-ns 'link (cddr item))))
+ (setq extra (or (nnrss-node-text content-ns 'encoded item)
(nnrss-node-text rss-ns 'description item)))
(if (setq feed-subject (nnrss-node-text dc-ns 'subject item))
(setq extra (concat feed-subject "<br /><br />" extra)))
@@ -746,9 +770,10 @@ which RSS 2.0 allows."
date
(and extra (nnrss-decode-entities-string extra))
enclosure
- comments)
+ comments
+ hash-index)
nnrss-group-data)
- (gnus-sethash (or url extra) t nnrss-group-hashtb)
+ (puthash hash-index t nnrss-group-hashtb)
(setq changed t))
(setq extra nil))
(when changed
@@ -947,7 +972,7 @@ whether they are `offsite' or `onsite'."
(let (rss-onsite-end rdf-onsite-end xml-onsite-end
rss-onsite-in rdf-onsite-in xml-onsite-in
rss-offsite-end rdf-offsite-end xml-offsite-end
- rss-offsite-in rdf-offsite-in xml-offsite-in)
+ rss-offsite-in rdf-offsite-in xml-offsite-in)
(dolist (href hrefs)
(cond ((null href))
((string-match "\\.rss$" href)
diff --git a/lisp/gnus/nnslashdot.el b/lisp/gnus/nnslashdot.el
index ee97f7085c8..04e998c76ba 100644
--- a/lisp/gnus/nnslashdot.el
+++ b/lisp/gnus/nnslashdot.el
@@ -459,11 +459,9 @@
(insert-file-contents file)
(goto-char (point-min))
(setq nnslashdot-groups (read (current-buffer))))
- (if (and nnslashdot-groups (< (length (car nnslashdot-groups)) 5))
- (let ((groups nnslashdot-groups))
- (while groups
- (nnslashdot-make-tuple (car groups) 5)
- (setq groups (cdr groups))))))))
+ (when (and nnslashdot-groups (< (length (car nnslashdot-groups)) 5))
+ (dolist (group nnslashdot-groups)
+ (nnslashdot-make-tuple group 5))))))
(defun nnslashdot-write-groups ()
(with-temp-file (expand-file-name "groups" nnslashdot-directory)
diff --git a/lisp/gnus/nnsoup.el b/lisp/gnus/nnsoup.el
index 8167ba2bf4e..1053ecc413c 100644
--- a/lisp/gnus/nnsoup.el
+++ b/lisp/gnus/nnsoup.el
@@ -371,9 +371,7 @@ backend for the messages.")
entry e min max)
(while (setq e (cdr (setq entry (pop alist))))
(setq min (caaar e))
- (while (cdr e)
- (setq e (cdr e)))
- (setq max (cdar (car e)))
+ (setq max (cdar (car (last e))))
(setcdr entry (cons (cons min max) (cdr entry)))))
(setq nnsoup-group-alist-touched t))
nnsoup-group-alist))
@@ -558,9 +556,8 @@ backend for the messages.")
(defun nnsoup-unpack-packets ()
"Unpack all packets in `nnsoup-packet-directory'."
(let ((packets (directory-files
- nnsoup-packet-directory t nnsoup-packet-regexp))
- packet)
- (while (setq packet (pop packets))
+ nnsoup-packet-directory t nnsoup-packet-regexp)))
+ (dolist (packet packets)
(nnheader-message 5 "nnsoup: unpacking %s..." packet)
(if (not (gnus-soup-unpack-packet
nnsoup-tmp-directory nnsoup-unpacker packet))
@@ -759,20 +756,18 @@ backend for the messages.")
(string-to-number (match-string 1 f2)))))))
active group lines ident elem min)
(set-buffer (get-buffer-create " *nnsoup work*"))
- (while files
- (nnheader-message 5 "Doing %s..." (car files))
+ (dolist (file files)
+ (nnheader-message 5 "Doing %s..." file)
(erase-buffer)
- (nnheader-insert-file-contents (car files))
+ (nnheader-insert-file-contents file)
(goto-char (point-min))
(if (not (re-search-forward "^[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t *\\(Xref: \\)? *[^ ]* \\([^ ]+\\):[0-9]" nil t))
(setq group "unknown")
(setq group (match-string 2)))
(setq lines (count-lines (point-min) (point-max)))
(setq ident (progn (string-match
- "/\\([0-9]+\\)\\." (car files))
- (substring
- (car files) (match-beginning 1)
- (match-end 1))))
+ "/\\([0-9]+\\)\\." file)
+ (match-string 1 file)))
(if (not (setq elem (assoc group active)))
(push (list group (cons 1 lines)
(list (cons 1 lines)
@@ -783,8 +778,7 @@ backend for the messages.")
(list (cons (1+ (setq min (cdadr elem)))
(+ min lines))
(vector ident group "ucm" "" lines))))
- (setcdr (cadr elem) (+ min lines)))
- (setq files (cdr files)))
+ (setcdr (cadr elem) (+ min lines))))
(nnheader-message 5 "")
(setq nnsoup-group-alist active)
(nnsoup-write-active-file t)))
@@ -801,9 +795,9 @@ backend for the messages.")
nnsoup-group-alist)))
(regexp "\\.MSG$\\|\\.IDX$")
(files (directory-files nnsoup-directory nil regexp))
- non-files file)
+ non-files)
;; Find all files that aren't known by nnsoup.
- (while (setq file (pop files))
+ (dolist (file files)
(string-match regexp file)
(unless (member (substring file 0 (match-beginning 0)) known)
(push file non-files)))
diff --git a/lisp/gnus/nnspool.el b/lisp/gnus/nnspool.el
index 39fa1874d3b..0861f5c85a3 100644
--- a/lisp/gnus/nnspool.el
+++ b/lisp/gnus/nnspool.el
@@ -246,13 +246,11 @@ there.")
;; Yes, completely empty spool directories *are* possible.
;; Fix by Sudish Joseph <joseph@cis.ohio-state.edu>
(when (setq dir (directory-files pathname nil "^[0-9]+$" t))
- (setq dir
- (sort (mapcar (lambda (name) (string-to-number name)) dir) '<)))
+ (setq dir (sort (mapcar 'string-to-number dir) '<)))
(if dir
(nnheader-insert
"211 %d %d %d %s\n" (length dir) (car dir)
- (progn (while (cdr dir) (setq dir (cdr dir))) (car dir))
- group)
+ (car (last dir)) group)
(nnheader-report 'nnspool "Empty group %s" group)
(nnheader-insert "211 0 0 0 %s\n" group))))))
@@ -311,9 +309,8 @@ there.")
groups)
(zerop (forward-line -1))))
(erase-buffer)
- (while groups
- (insert (car groups) " 0 0 y\n")
- (setq groups (cdr groups))))
+ (dolist (group groups)
+ (insert group " 0 0 y\n")))
t)
nil))
@@ -400,8 +397,7 @@ there.")
(<= last (car arts)))
(pop arts))
;; The articles in `arts' are missing from the buffer.
- (while arts
- (nnspool-insert-nov-head (pop arts)))
+ (mapc 'nnspool-insert-nov-head arts)
t))))))))))
(defun nnspool-insert-nov-head (article)
@@ -421,8 +417,7 @@ there.")
(defun nnspool-sift-nov-with-sed (articles file)
(let ((first (car articles))
- (last (progn (while (cdr articles) (setq articles (cdr articles)))
- (car articles))))
+ (last (car (last articles))))
(call-process "awk" nil t nil
(format "BEGIN {firstmsg=%d; lastmsg=%d;}\n $1 >= firstmsg && $1 <= lastmsg {print;}"
(1- first) (1+ last))
@@ -431,16 +426,12 @@ there.")
;; Fixed by fdc@cliwe.ping.de (Frank D. Cringle).
;; Find out what group an article identified by a Message-ID is in.
(defun nnspool-find-id (id)
- (save-excursion
- (set-buffer (get-buffer-create " *nnspool work*"))
- (erase-buffer)
+ (with-temp-buffer
(ignore-errors
(call-process "grep" nil t nil (regexp-quote id) nnspool-history-file))
(goto-char (point-min))
- (prog1
- (when (looking-at "<[^>]+>[ \t]+[-0-9~]+[ \t]+\\([^ /\t\n]+\\)/\\([0-9]+\\)[ \t\n]")
- (cons (match-string 1) (string-to-number (match-string 2))))
- (kill-buffer (current-buffer)))))
+ (when (looking-at "<[^>]+>[ \t]+[-0-9~]+[ \t]+\\([^ /\t\n]+\\)/\\([0-9]+\\)[ \t\n]")
+ (cons (match-string 1) (string-to-number (match-string 2))))))
(defun nnspool-find-file (file)
"Insert FILE in server buffer safely."
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index 2623df58e4d..356ffefddeb 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -31,6 +31,8 @@
(require 'nnheader)
(require 'nnoo)
(require 'gnus-util)
+(require 'gnus)
+(require 'gnus-group) ;; gnus-group-name-charset
(nnoo-declare nntp)
@@ -86,6 +88,7 @@ Direct connections:
Indirect connections:
- `nntp-open-via-rlogin-and-telnet',
+- `nntp-open-via-rlogin-and-netcat',
- `nntp-open-via-telnet-and-telnet'.")
(defvoo nntp-never-echoes-commands nil
@@ -109,20 +112,22 @@ This is where you would put \"runsocks\" or stuff like that.")
(defvoo nntp-telnet-command "telnet"
"*Telnet command used to connect to the nntp server.
-This command is used by the various nntp-open-via-* methods.")
+This command is used by the methods `nntp-open-telnet-stream',
+`nntp-open-via-rlogin-and-telnet' and `nntp-open-via-telnet-and-telnet'.")
(defvoo nntp-telnet-switches '("-8")
"*Switches given to the telnet command `nntp-telnet-command'.")
(defvoo nntp-end-of-line "\r\n"
"*String to use on the end of lines when talking to the NNTP server.
-This is \"\\r\\n\" by default, but should be \"\\n\" when
-using an indirect connection method (nntp-open-via-*).")
+This is \"\\r\\n\" by default, but should be \"\\n\" when using an indirect
+connection method (nntp-open-via-*).")
(defvoo nntp-via-rlogin-command "rsh"
"*Rlogin command used to connect to an intermediate host.
-This command is used by the `nntp-open-via-rlogin-and-telnet' method.
-The default is \"rsh\", but \"ssh\" is a popular alternative.")
+This command is used by the methods `nntp-open-via-rlogin-and-telnet'
+and `nntp-open-via-rlogin-and-netcat'. The default is \"rsh\", but \"ssh\"
+is a popular alternative.")
(defvoo nntp-via-rlogin-command-switches nil
"*Switches given to the rlogin command `nntp-via-rlogin-command'.
@@ -138,9 +143,16 @@ This command is used by the `nntp-open-via-telnet-and-telnet' method.")
(defvoo nntp-via-telnet-switches '("-8")
"*Switches given to the telnet command `nntp-via-telnet-command'.")
+(defvoo nntp-via-netcat-command "nc"
+ "*Netcat command used to connect to the nntp server.
+This command is used by the `nntp-open-via-rlogin-and-netcat' method.")
+
+(defvoo nntp-via-netcat-switches nil
+ "*Switches given to the netcat command `nntp-via-netcat-command'.")
+
(defvoo nntp-via-user-name nil
"*User name to log in on an intermediate host with.
-This variable is used by the `nntp-open-via-telnet-and-telnet' method.")
+This variable is used by the various nntp-open-via-* methods.")
(defvoo nntp-via-user-password nil
"*Password to use to log in on an intermediate host with.
@@ -148,8 +160,7 @@ This variable is used by the `nntp-open-via-telnet-and-telnet' method.")
(defvoo nntp-via-address nil
"*Address of an intermediate host to connect to.
-This variable is used by the `nntp-open-via-rlogin-and-telnet' and
-`nntp-open-via-telnet-and-telnet' methods.")
+This variable is used by the various nntp-open-via-* methods.")
(defvoo nntp-via-envuser nil
"*Whether both telnet client and server support the ENVIRON option.
@@ -206,6 +217,21 @@ server there that you can connect to. See also
(defvoo nntp-coding-system-for-write 'binary
"*Coding system to write to NNTP.")
+;; Marks
+(defvoo nntp-marks-is-evil nil
+ "*If non-nil, Gnus will never generate and use marks file for nntp groups.
+See `nnml-marks-is-evil' for more information.")
+
+(defvoo nntp-marks-file-name ".marks")
+(defvoo nntp-marks nil)
+(defvar nntp-marks-modtime (gnus-make-hashtable))
+
+(defcustom nntp-marks-directory
+ (nnheader-concat gnus-directory "marks/")
+ "*The directory where marks for nntp groups will be stored."
+ :group 'nntp
+ :type 'directory)
+
(defcustom nntp-authinfo-file "~/.authinfo"
".netrc-like file that holds nntp authinfo passwords."
:group 'nntp
@@ -252,6 +278,7 @@ to insert Cancel-Lock headers.")
(defvoo nntp-last-command nil)
(defvoo nntp-authinfo-password nil)
(defvoo nntp-authinfo-user nil)
+(defvoo nntp-authinfo-force nil)
(defvar nntp-connection-list nil)
@@ -337,16 +364,44 @@ be restored and the command retried."
(throw 'nntp-with-open-group-error t))
+(defmacro nntp-insert-buffer-substring (buffer &optional start end)
+ "Copy string from unibyte buffer to multibyte current buffer."
+ (if (featurep 'xemacs)
+ `(insert-buffer-substring ,buffer ,start ,end)
+ `(if enable-multibyte-characters
+ (insert (with-current-buffer ,buffer
+ (mm-string-to-multibyte
+ ,(if (or start end)
+ `(buffer-substring (or ,start (point-min))
+ (or ,end (point-max)))
+ '(buffer-string)))))
+ (insert-buffer-substring ,buffer ,start ,end))))
+
+(defmacro nntp-copy-to-buffer (buffer start end)
+ "Copy string from unibyte current buffer to multibyte buffer."
+ (if (featurep 'xemacs)
+ `(copy-to-buffer ,buffer ,start ,end)
+ `(let ((string (buffer-substring ,start ,end)))
+ (with-current-buffer ,buffer
+ (erase-buffer)
+ (insert (if enable-multibyte-characters
+ (mm-string-to-multibyte string)
+ string))
+ (goto-char (point-min))
+ nil))))
+
(defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
"Wait for WAIT-FOR to arrive from PROCESS."
+
(save-excursion
(set-buffer (process-buffer process))
(goto-char (point-min))
+
(while (and (or (not (memq (char-after (point)) '(?2 ?3 ?4 ?5)))
(looking-at "48[02]"))
(memq (process-status process) '(open run)))
(cond ((looking-at "480")
- (nntp-handle-authinfo process))
+ (nntp-handle-authinfo process))
((looking-at "482")
(nnheader-report 'nntp (get 'nntp-authinfo-rejected 'error-message))
(signal 'nntp-authinfo-rejected nil))
@@ -380,7 +435,7 @@ be restored and the command retried."
(save-excursion
(set-buffer buffer)
(goto-char (point-max))
- (insert-buffer-substring (process-buffer process))
+ (nntp-insert-buffer-substring (process-buffer process))
;; Nix out "nntp reading...." message.
(when nntp-have-messaged
(setq nntp-have-messaged nil)
@@ -394,6 +449,11 @@ be restored and the command retried."
(kill-buffer buffer)
(nnheader-init-server-buffer)))
+(defun nntp-erase-buffer (buffer)
+ "Erase contents of BUFFER."
+ (with-current-buffer buffer
+ (erase-buffer)))
+
(defsubst nntp-find-connection (buffer)
"Find the connection delivering to BUFFER."
(let ((alist nntp-connection-alist)
@@ -428,9 +488,7 @@ be restored and the command retried."
(if process
(progn
(unless (or nntp-inhibit-erase nnheader-callback-function)
- (save-excursion
- (set-buffer (process-buffer process))
- (erase-buffer)))
+ (nntp-erase-buffer (process-buffer process)))
(condition-case err
(progn
(when command
@@ -459,9 +517,7 @@ be restored and the command retried."
"Send STRINGS to server and wait until WAIT-FOR returns."
(when (and (not nnheader-callback-function)
(not nntp-inhibit-output))
- (save-excursion
- (set-buffer nntp-server-buffer)
- (erase-buffer)))
+ (nntp-erase-buffer nntp-server-buffer))
(let* ((command (mapconcat 'identity strings " "))
(process (nntp-find-connection nntp-server-buffer))
(buffer (and process (process-buffer process)))
@@ -488,8 +544,7 @@ be restored and the command retried."
(goto-char pos)
(if (looking-at (regexp-quote command))
(delete-region pos (progn (forward-line 1)
- (gnus-point-at-bol))))
- )))
+ (point-at-bol)))))))
(nnheader-report 'nntp "Couldn't open connection to %s."
nntp-address))))
@@ -513,7 +568,7 @@ be restored and the command retried."
(goto-char pos)
(if (looking-at (regexp-quote command))
(delete-region pos (progn (forward-line 1)
- (gnus-point-at-bol)))))))
+ (point-at-bol)))))))
(nnheader-report 'nntp "Couldn't open connection to %s."
nntp-address))))
@@ -521,9 +576,7 @@ be restored and the command retried."
"Send STRINGS to server and wait until WAIT-FOR returns."
(when (and (not nnheader-callback-function)
(not nntp-inhibit-output))
- (save-excursion
- (set-buffer nntp-server-buffer)
- (erase-buffer)))
+ (nntp-erase-buffer nntp-server-buffer))
(let* ((command (mapconcat 'identity strings " "))
(process (nntp-find-connection nntp-server-buffer))
(buffer (and process (process-buffer process)))
@@ -538,11 +591,11 @@ be restored and the command retried."
(unless wait-for
(nntp-accept-response)
(save-excursion
- (set-buffer buffer)
- (goto-char pos)
- (if (looking-at (regexp-quote command))
- (delete-region pos (progn (forward-line 1) (gnus-point-at-bol))))
- )))
+ (set-buffer buffer)
+ (goto-char pos)
+ (if (looking-at (regexp-quote command))
+ (delete-region pos (progn (forward-line 1) (point-at-bol))))
+ )))
(nnheader-report 'nntp "Couldn't open connection to %s."
nntp-address))))
@@ -551,9 +604,8 @@ be restored and the command retried."
"Send the current buffer to server and wait until WAIT-FOR returns."
(when (and (not nnheader-callback-function)
(not nntp-inhibit-output))
- (save-excursion
- (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
- (erase-buffer)))
+ (nntp-erase-buffer
+ (nntp-find-connection-buffer nntp-server-buffer)))
(nntp-encode-text)
(mm-with-unibyte-current-buffer
;; Some encoded unicode text contains character 0x80-0x9f e.g. Euro.
@@ -575,7 +627,12 @@ be restored and the command retried."
;; a line with only a "." on it.
((eq (char-after) ?2)
(if (re-search-forward "\n\\.\r?\n" nil t)
- t
+ (progn
+ ;; Some broken news servers add another dot at the end.
+ ;; Protect against inflooping there.
+ (while (looking-at "^\\.\r?\n")
+ (forward-line 1))
+ t)
nil))
;; A result that starts with a 3xx or 4xx code is terminated
;; by a newline.
@@ -615,14 +672,14 @@ command whose response triggered the error."
(let ((timer
(and nntp-connection-timeout
- (nnheader-run-at-time
+ (run-at-time
nntp-connection-timeout nil
'(lambda ()
(let ((process (nntp-find-connection
nntp-server-buffer))
(buffer (and process
(process-buffer process))))
- ;; When I an able to identify the
+ ;; When I am able to identify the
;; connection to the server AND I've
;; received NO reponse for
;; nntp-connection-timeout seconds.
@@ -637,7 +694,8 @@ command whose response triggered the error."
(condition-case nil
(progn ,@forms)
(quit
- (nntp-close-server)
+ (unless debug-on-quit
+ (nntp-close-server))
(signal 'quit nil))))
(when timer
(nnheader-cancel-timer timer)))
@@ -706,7 +764,7 @@ command whose response triggered the error."
(nnheader-fold-continuation-lines)
;; Remove all "\r"'s.
(nnheader-strip-cr)
- (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+ (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max))
'headers)))))
(deffoo nntp-retrieve-groups (groups &optional server)
@@ -717,8 +775,7 @@ command whose response triggered the error."
(catch 'done
(save-excursion
;; Erase nntp-server-buffer before nntp-inhibit-erase.
- (set-buffer nntp-server-buffer)
- (erase-buffer)
+ (nntp-erase-buffer nntp-server-buffer)
(set-buffer (nntp-find-connection-buffer nntp-server-buffer))
;; The first time this is run, this variable is `try'. So we
;; try.
@@ -789,7 +846,8 @@ command whose response triggered the error."
(if (not nntp-server-list-active-group)
(progn
- (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+ (nntp-copy-to-buffer nntp-server-buffer
+ (point-min) (point-max))
'group)
;; We have read active entries, so we just delete the
;; superfluous gunk.
@@ -797,7 +855,7 @@ command whose response triggered the error."
(while (re-search-forward "^[.2-5]" nil t)
(delete-region (match-beginning 0)
(progn (forward-line 1) (point))))
- (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+ (nntp-copy-to-buffer nntp-server-buffer (point-min) (point-max))
'active)))))))
(deffoo nntp-retrieve-articles (articles &optional group server)
@@ -862,7 +920,7 @@ command whose response triggered the error."
(narrow-to-region
(setq point (goto-char (point-max)))
(progn
- (insert-buffer-substring buf last-point (cdr entry))
+ (nntp-insert-buffer-substring buf last-point (cdr entry))
(point-max)))
(setq last-point (cdr entry))
(nntp-decode-text)
@@ -1046,6 +1104,54 @@ command whose response triggered the error."
(deffoo nntp-asynchronous-p ()
t)
+(deffoo nntp-request-set-mark (group actions &optional server)
+ (unless nntp-marks-is-evil
+ (nntp-possibly-create-directory group server)
+ (nntp-open-marks group server)
+ (dolist (action actions)
+ (let ((range (nth 0 action))
+ (what (nth 1 action))
+ (marks (nth 2 action)))
+ (assert (or (eq what 'add) (eq what 'del)) nil
+ "Unknown request-set-mark action: %s" what)
+ (dolist (mark marks)
+ (setq nntp-marks (gnus-update-alist-soft
+ mark
+ (funcall (if (eq what 'add) 'gnus-range-add
+ 'gnus-remove-from-range)
+ (cdr (assoc mark nntp-marks)) range)
+ nntp-marks)))))
+ (nntp-save-marks group server))
+ nil)
+
+(deffoo nntp-request-update-info (group info &optional server)
+ (unless nntp-marks-is-evil
+ (nntp-possibly-create-directory group server)
+ (when (nntp-marks-changed-p group server)
+ (nnheader-message 8 "Updating marks for %s..." group)
+ (nntp-open-marks group server)
+ ;; Update info using `nntp-marks'.
+ (mapc (lambda (pred)
+ (unless (memq (cdr pred) gnus-article-unpropagated-mark-lists)
+ (gnus-info-set-marks
+ info
+ (gnus-update-alist-soft
+ (cdr pred)
+ (cdr (assq (cdr pred) nntp-marks))
+ (gnus-info-marks info))
+ t)))
+ gnus-article-mark-lists)
+ (let ((seen (cdr (assq 'read nntp-marks))))
+ (gnus-info-set-read info
+ (if (and (integerp (car seen))
+ (null (cdr seen)))
+ (list (cons (car seen) (car seen)))
+ seen)))
+ (nnheader-message 8 "Updating marks for %s...done" group)))
+ nil)
+
+
+
;;; Hooky functions.
(defun nntp-send-mode-reader ()
@@ -1063,11 +1169,11 @@ and a password.
If SEND-IF-FORCE, only send authinfo to the server if the
.authinfo file has the FORCE token."
- (let* ((list (gnus-parse-netrc nntp-authinfo-file))
- (alist (gnus-netrc-machine list nntp-address "nntp"))
- (force (gnus-netrc-get alist "force"))
- (user (or (gnus-netrc-get alist "login") nntp-authinfo-user))
- (passwd (gnus-netrc-get alist "password")))
+ (let* ((list (netrc-parse nntp-authinfo-file))
+ (alist (netrc-machine list nntp-address "nntp"))
+ (force (or (netrc-get alist "force") nntp-authinfo-force))
+ (user (or (netrc-get alist "login") nntp-authinfo-user))
+ (passwd (netrc-get alist "password")))
(when (or (not send-if-force)
force)
(unless user
@@ -1106,7 +1212,7 @@ password contained in '~/.nntp-authinfo'."
(nntp-send-command "^3.*\r?\n" "AUTHINFO USER" (user-login-name))
(nntp-send-command
"^2.*\r?\n" "AUTHINFO PASS"
- (buffer-substring (point) (gnus-point-at-eol))))))
+ (buffer-substring (point) (point-at-eol))))))
;;; Internal functions.
@@ -1116,9 +1222,7 @@ password contained in '~/.nntp-authinfo'."
(funcall nntp-authinfo-function)
;; We have to re-send the function that was interrupted by
;; the authinfo request.
- (save-excursion
- (set-buffer nntp-server-buffer)
- (erase-buffer))
+ (nntp-erase-buffer nntp-server-buffer)
(nntp-send-string process last)))
(defun nntp-make-process-buffer (buffer)
@@ -1129,7 +1233,7 @@ password contained in '~/.nntp-authinfo'."
(format " *server %s %s %s*"
nntp-address nntp-port-number
(gnus-buffer-exists-p buffer))))
- (mm-enable-multibyte)
+ (mm-disable-multibyte)
(set (make-local-variable 'after-change-functions) nil)
(set (make-local-variable 'nntp-process-wait-for) nil)
(set (make-local-variable 'nntp-process-callback) nil)
@@ -1144,7 +1248,7 @@ password contained in '~/.nntp-authinfo'."
(let* ((pbuffer (nntp-make-process-buffer buffer))
(timer
(and nntp-connection-timeout
- (nnheader-run-at-time
+ (run-at-time
nntp-connection-timeout nil
`(lambda ()
(nntp-kill-buffer ,pbuffer)))))
@@ -1155,7 +1259,7 @@ password contained in '~/.nntp-authinfo'."
(funcall nntp-open-connection-function pbuffer))
(error nil)
(quit
- (message "Quit opening connection")
+ (message "Quit opening connection to %s" nntp-address)
(nntp-kill-buffer pbuffer)
(signal 'quit nil)
nil))))
@@ -1223,12 +1327,9 @@ password contained in '~/.nntp-authinfo'."
"Find out what the name of the server we have connected to is."
;; Wait for the status string to arrive.
(setq nntp-server-type (buffer-string))
- (let ((alist nntp-server-action-alist)
- (case-fold-search t)
- entry)
+ (let ((case-fold-search t))
;; Run server-specific commands.
- (while alist
- (setq entry (pop alist))
+ (dolist (entry nntp-server-action-alist)
(when (string-match (car entry) nntp-server-type)
(if (and (listp (cadr entry))
(not (eq 'lambda (caadr entry))))
@@ -1254,7 +1355,7 @@ password contained in '~/.nntp-authinfo'."
;; doesn't trigger after-change-functions.
(unless nntp-async-timer
(setq nntp-async-timer
- (nnheader-run-at-time 1 1 'nntp-async-timer-handler)))
+ (run-at-time 1 1 'nntp-async-timer-handler)))
(add-to-list 'nntp-async-process-list process))
(defun nntp-async-timer-handler ()
@@ -1316,7 +1417,7 @@ password contained in '~/.nntp-authinfo'."
(goto-char (point-max))
(save-restriction
(narrow-to-region (point) (point))
- (insert-buffer-substring buf start)
+ (nntp-insert-buffer-substring buf start)
(when decode
(nntp-decode-text))))))
;; report it.
@@ -1340,22 +1441,22 @@ password contained in '~/.nntp-authinfo'."
(defun nntp-accept-process-output (process)
"Wait for output from PROCESS and message some dots."
- (save-excursion
- (set-buffer (or (nntp-find-connection-buffer nntp-server-buffer)
- nntp-server-buffer))
+ (with-current-buffer (or (nntp-find-connection-buffer nntp-server-buffer)
+ nntp-server-buffer)
(let ((len (/ (buffer-size) 1024))
message-log-max)
(unless (< len 10)
(setq nntp-have-messaged t)
(nnheader-message 7 "nntp read: %dk" len)))
- (nnheader-accept-process-output process)
- ;; accept-process-output may update status of process to indicate
- ;; that the server has closed the connection. This MUST be
- ;; handled here as the buffer restored by the save-excursion may
- ;; be the process's former output buffer (i.e. now killed)
- (or (and process
- (memq (process-status process) '(open run)))
- (nntp-report "Server closed connection"))))
+ (prog1
+ (nnheader-accept-process-output process)
+ ;; accept-process-output may update status of process to indicate
+ ;; that the server has closed the connection. This MUST be
+ ;; handled here as the buffer restored by the save-excursion may
+ ;; be the process's former output buffer (i.e. now killed)
+ (or (and process
+ (memq (process-status process) '(open run)))
+ (nntp-report "Server closed connection")))))
(defun nntp-accept-response ()
"Wait for output from the process that outputs to BUFFER."
@@ -1382,9 +1483,7 @@ password contained in '~/.nntp-authinfo'."
(nntp-send-command "^[245].*\n" "GROUP" group)
(setcar (cddr entry) group)
(erase-buffer)
- (save-excursion
- (set-buffer nntp-server-buffer)
- (erase-buffer))))))))
+ (nntp-erase-buffer nntp-server-buffer)))))))
(defun nntp-decode-text (&optional cr-only)
"Decode the text in the current buffer."
@@ -1547,7 +1646,7 @@ password contained in '~/.nntp-authinfo'."
(when in-process-buffer-p
(set-buffer buf)
(goto-char (point-max))
- (insert-buffer-substring process-buffer)
+ (nntp-insert-buffer-substring process-buffer)
(set-buffer process-buffer)
(erase-buffer)
(set-buffer buf))
@@ -1594,10 +1693,8 @@ password contained in '~/.nntp-authinfo'."
(setq commands (cdr commands)))
;; If none of the commands worked, we disable XOVER.
(when (eq nntp-server-xover 'try)
- (save-excursion
- (set-buffer nntp-server-buffer)
- (erase-buffer)
- (setq nntp-server-xover nil)))
+ (nntp-erase-buffer nntp-server-buffer)
+ (setq nntp-server-xover nil))
nntp-server-xover))))
(defun nntp-find-group-and-number (&optional group)
@@ -1847,6 +1944,36 @@ Please refer to the following variables to customize the connection:
(delete-region (point) (point-max)))
proc))
+(defun nntp-open-via-rlogin-and-netcat (buffer)
+ "Open a connection to an nntp server through an intermediate host.
+First rlogin to the remote host, and then connect to the real news
+server from there using the netcat command.
+
+Please refer to the following variables to customize the connection:
+- `nntp-pre-command',
+- `nntp-via-rlogin-command',
+- `nntp-via-rlogin-command-switches',
+- `nntp-via-user-name',
+- `nntp-via-address',
+- `nntp-via-netcat-command',
+- `nntp-via-netcat-switches',
+- `nntp-address',
+- `nntp-port-number',
+- `nntp-end-of-line'."
+ (let ((command `(,@(when nntp-pre-command
+ (list nntp-pre-command))
+ ,nntp-via-rlogin-command
+ ,@(when nntp-via-rlogin-command-switches
+ nntp-via-rlogin-command-switches)
+ ,@(when nntp-via-user-name
+ (list "-l" nntp-via-user-name))
+ ,nntp-via-address
+ ,nntp-via-netcat-command
+ ,@nntp-via-netcat-switches
+ ,nntp-address
+ ,nntp-port-number)))
+ (apply 'start-process "nntpd" buffer command)))
+
(defun nntp-open-via-telnet-and-telnet (buffer)
"Open a connection to an nntp server through an intermediate host.
First telnet the remote host, and then telnet the real news server
@@ -1922,6 +2049,96 @@ Please refer to the following variables to customize the connection:
(delete-region (point) (point-max)))
proc)))
+;; Marks handling
+
+(defun nntp-marks-directory (server)
+ (expand-file-name server nntp-marks-directory))
+
+(defvar nntp-server-to-method-cache nil
+ "Alist of servers and select methods.")
+
+(defun nntp-group-pathname (server group &optional file)
+ "Return an absolute file name of FILE for GROUP on SERVER."
+ (let ((method (cdr (assoc server nntp-server-to-method-cache))))
+ (unless method
+ (push (cons server (setq method (or (gnus-server-to-method server)
+ (gnus-find-method-for-group group))))
+ nntp-server-to-method-cache))
+ (nnmail-group-pathname
+ (mm-decode-coding-string group
+ (inline (gnus-group-name-charset method group)))
+ (nntp-marks-directory server)
+ file)))
+
+(defun nntp-possibly-create-directory (group server)
+ (let ((dir (nntp-group-pathname server group))
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (unless (file-exists-p dir)
+ (make-directory (directory-file-name dir) t)
+ (nnheader-message 5 "Creating nntp marks directory %s" dir))))
+
+(eval-and-compile
+ (autoload 'time-less-p "time-date"))
+
+(defun nntp-marks-changed-p (group server)
+ (let ((file (nntp-group-pathname server group nntp-marks-file-name))
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (if (null (gnus-gethash file nntp-marks-modtime))
+ t ;; never looked at marks file, assume it has changed
+ (time-less-p (gnus-gethash file nntp-marks-modtime)
+ (nth 5 (file-attributes file))))))
+
+(defun nntp-save-marks (group server)
+ (let ((file-name-coding-system nnmail-pathname-coding-system)
+ (file (nntp-group-pathname server group nntp-marks-file-name)))
+ (condition-case err
+ (progn
+ (nntp-possibly-create-directory group server)
+ (with-temp-file file
+ (erase-buffer)
+ (gnus-prin1 nntp-marks)
+ (insert "\n"))
+ (gnus-sethash file
+ (nth 5 (file-attributes file))
+ nntp-marks-modtime))
+ (error (or (gnus-yes-or-no-p
+ (format "Could not write to %s (%s). Continue? " file err))
+ (error "Cannot write to %s (%s)" file err))))))
+
+(defun nntp-open-marks (group server)
+ (let ((file (nntp-group-pathname server group nntp-marks-file-name))
+ (file-name-coding-system nnmail-pathname-coding-system))
+ (if (file-exists-p file)
+ (condition-case err
+ (with-temp-buffer
+ (gnus-sethash file (nth 5 (file-attributes file))
+ nntp-marks-modtime)
+ (nnheader-insert-file-contents file)
+ (setq nntp-marks (read (current-buffer)))
+ (dolist (el gnus-article-unpropagated-mark-lists)
+ (setq nntp-marks (gnus-remassoc el nntp-marks))))
+ (error (or (gnus-yes-or-no-p
+ (format "Error reading nntp marks file %s (%s). Continuing will use marks from .newsrc.eld. Continue? " file err))
+ (error "Cannot read nntp marks file %s (%s)" file err))))
+ ;; User didn't have a .marks file. Probably first time
+ ;; user of the .marks stuff. Bootstrap it from .newsrc.eld.
+ (let ((info (gnus-get-info
+ (gnus-group-prefixed-name
+ group
+ (gnus-server-to-method (format "nntp:%s" server)))))
+ (decoded-name (mm-decode-coding-string
+ group
+ (gnus-group-name-charset
+ (gnus-server-to-method server) group))))
+ (nnheader-message 7 "Bootstrapping marks for %s..." decoded-name)
+ (setq nntp-marks (gnus-info-marks info))
+ (push (cons 'read (gnus-info-read info)) nntp-marks)
+ (dolist (el gnus-article-unpropagated-mark-lists)
+ (setq nntp-marks (gnus-remassoc el nntp-marks)))
+ (nntp-save-marks group server)
+ (nnheader-message 7 "Bootstrapping marks for %s...done"
+ decoded-name)))))
+
(provide 'nntp)
;;; arch-tag: 8655466a-b1b5-4929-9c45-7b1b2e767271
diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el
index fc2500df2f5..4905e7631b3 100644
--- a/lisp/gnus/nnvirtual.el
+++ b/lisp/gnus/nnvirtual.el
@@ -339,9 +339,9 @@ component group will show up when you enter the virtual group.")
(let ((gnus-group-marked (copy-sequence nnvirtual-component-groups))
(gnus-expert-user t))
;; Make sure all groups are activated.
- (mapcar
+ (mapc
(lambda (g)
- (when (not (numberp (car (gnus-gethash g gnus-newsrc-hashtb))))
+ (when (not (numberp (gnus-group-unread g)))
(gnus-activate-group g)))
nnvirtual-component-groups)
(save-excursion
@@ -384,14 +384,11 @@ component group will show up when you enter the virtual group.")
(defun nnvirtual-convert-headers ()
"Convert HEAD headers into NOV headers."
- (save-excursion
- (set-buffer nntp-server-buffer)
+ (with-current-buffer nntp-server-buffer
(let* ((dependencies (make-vector 100 0))
- (headers (gnus-get-newsgroup-headers dependencies))
- header)
+ (headers (gnus-get-newsgroup-headers dependencies)))
(erase-buffer)
- (while (setq header (pop headers))
- (nnheader-insert-nov header)))))
+ (mapc 'nnheader-insert-nov headers))))
(defun nnvirtual-update-xref-header (group article prefix system-name)
@@ -401,7 +398,7 @@ component group will show up when you enter the virtual group.")
(looking-at
"[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t")
(goto-char (match-end 0))
- (unless (search-forward "\t" (gnus-point-at-eol) 'move)
+ (unless (search-forward "\t" (point-at-eol) 'move)
(insert "\t"))
;; Remove any spaces at the beginning of the Xref field.
@@ -417,8 +414,8 @@ component group will show up when you enter the virtual group.")
;; component server prefix.
(save-restriction
(narrow-to-region (point)
- (or (search-forward "\t" (gnus-point-at-eol) t)
- (gnus-point-at-eol)))
+ (or (search-forward "\t" (point-at-eol) t)
+ (point-at-eol)))
(goto-char (point-min))
(when (re-search-forward "Xref: *[^\n:0-9 ]+ *" nil t)
(replace-match "" t t))
@@ -465,7 +462,7 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
(nnvirtual-partition-sequence (cdr ml)))))
(gnus-info-marks (gnus-get-info
(nnvirtual-current-group))))))
- mark type groups carticles info entry)
+ type groups info)
;; Ok, atomically move all of the (un)read info, clear any old
;; marks, and move all of the current marks. This way if someone
@@ -474,13 +471,12 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
;; move (un)read
;; bind for workaround guns-update-read-articles
(let ((gnus-newsgroup-active nil))
- (while (setq entry (pop unreads))
+ (dolist (entry unreads)
(gnus-update-read-articles (car entry) (cdr entry))))
;; clear all existing marks on the component groups
- (setq groups nnvirtual-component-groups)
- (while groups
- (when (and (setq info (gnus-get-info (pop groups)))
+ (dolist (group nnvirtual-component-groups)
+ (when (and (setq info (gnus-get-info group))
(gnus-info-marks info))
(gnus-info-set-marks
info
@@ -491,18 +487,17 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
;; Ok, currently type-marks is an assq list with keys of a mark type,
;; with data of an assq list with keys of component group names
;; and the articles which correspond to that key/group pair.
- (while (setq mark (pop type-marks))
+ (dolist (mark type-marks)
(setq type (car mark))
(setq groups (cdr mark))
- (while (setq carticles (pop groups))
+ (dolist (carticles groups)
(gnus-add-marked-articles (car carticles) type (cdr carticles)
nil t))))
;; possibly update the display, it is really slow
(when update-p
- (setq groups nnvirtual-component-groups)
- (while groups
- (gnus-group-update-group (pop groups) t))))))
+ (dolist (group nnvirtual-component-groups)
+ (gnus-group-update-group group t))))))
(defun nnvirtual-current-group ()
@@ -664,8 +659,7 @@ numbers has no corresponding component article, then it is left out of
the result."
(when (numberp (cdr-safe articles))
(setq articles (list articles)))
- (let ((carticles (mapcar (lambda (g) (list g))
- nnvirtual-component-groups))
+ (let ((carticles (mapcar 'list nnvirtual-component-groups))
a i j article entry)
(while (setq a (pop articles))
(if (atom a)
@@ -678,8 +672,8 @@ the result."
(setq entry (assoc (car article) carticles))
(setcdr entry (cons (cdr article) (cdr entry))))
(setq i (1+ i))))
- (mapcar (lambda (x) (setcdr x (nreverse (cdr x))))
- carticles)
+ (mapc (lambda (x) (setcdr x (nreverse (cdr x))))
+ carticles)
carticles))
@@ -701,29 +695,29 @@ based on the marks on the component groups."
;; Into all-unreads we put (g unreads).
;; Into all-marks we put (g marks).
;; We also increment cnt and tot here, and compute M (max of sizes).
- (mapcar (lambda (g)
- (setq active (gnus-activate-group g)
- min (car active)
- max (cdr active))
- (when (and active (>= max min) (not (zerop max)))
- ;; store active information
- (push (list g (- max min -1) max) actives)
- ;; collect unread/mark info for later
- (setq unreads (gnus-list-of-unread-articles g))
- (setq marks (gnus-info-marks (gnus-get-info g)))
- (when gnus-use-cache
- (push (cons 'cache
- (gnus-cache-articles-in-group g))
- marks))
- (push (cons g unreads) all-unreads)
- (push (cons g marks) all-marks)
- ;; count groups, total #articles, and max size
- (setq size (- max min -1))
- (setq cnt (1+ cnt)
- tot (+ tot size)
- M (max M size))))
- nnvirtual-component-groups)
-
+ (mapc (lambda (g)
+ (setq active (gnus-activate-group g)
+ min (car active)
+ max (cdr active))
+ (when (and active (>= max min) (not (zerop max)))
+ ;; store active information
+ (push (list g (- max min -1) max) actives)
+ ;; collect unread/mark info for later
+ (setq unreads (gnus-list-of-unread-articles g))
+ (setq marks (gnus-info-marks (gnus-get-info g)))
+ (when gnus-use-cache
+ (push (cons 'cache
+ (gnus-cache-articles-in-group g))
+ marks))
+ (push (cons g unreads) all-unreads)
+ (push (cons g marks) all-marks)
+ ;; count groups, total #articles, and max size
+ (setq size (- max min -1))
+ (setq cnt (1+ cnt)
+ tot (+ tot size)
+ M (max M size))))
+ nnvirtual-component-groups)
+
;; Number of articles in the virtual group.
(setq nnvirtual-mapping-len tot)
@@ -785,10 +779,9 @@ based on the marks on the component groups."
;; Remove any empty marks lists, and store.
(setq nnvirtual-mapping-marks nil)
- (while marks
- (if (cdr (car marks))
- (push (car marks) nnvirtual-mapping-marks))
- (setq marks (cdr marks)))
+ (dolist (mark marks)
+ (when (cdr mark)
+ (push mark nnvirtual-mapping-marks)))
;; We need to convert the unreads to reads. We compress the
;; sequence as we go, otherwise it could be huge.
diff --git a/lisp/gnus/nnweb.el b/lisp/gnus/nnweb.el
index 0d1fb193082..4729e7216be 100644
--- a/lisp/gnus/nnweb.el
+++ b/lisp/gnus/nnweb.el
@@ -523,7 +523,9 @@ Valid types include `google', `dejanews', and `gmane'.")
"?"
(mm-url-encode-www-form-urlencoded
`(("query" . ,search)
- ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits))))))
+ ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits))
+ ;;("TOPDOC" . "1000")
+ ))))
(setq buffer-file-name nil)
(set-buffer-multibyte t)
(mm-decode-coding-region (point-min) (point-max) 'utf-8)
@@ -554,7 +556,7 @@ Valid types include `google', `dejanews', and `gmane'.")
(nth 1 parse)
" "))
(insert ">\n")
- (mapcar 'nnweb-insert-html (nth 2 parse))
+ (mapc 'nnweb-insert-html (nth 2 parse))
(insert "</" (symbol-name (car parse)) ">\n")))
(defun nnweb-parse-find (type parse &optional maxdepth)
diff --git a/lisp/gnus/ntlm.el b/lisp/gnus/ntlm.el
new file mode 100644
index 00000000000..edea2c3048a
--- /dev/null
+++ b/lisp/gnus/ntlm.el
@@ -0,0 +1,537 @@
+;;; ntlm.el --- NTLM (NT LanManager) authentication support
+
+;; Copyright (C) 2001 Taro Kawagishi
+;; Author: Taro Kawagishi <tarok@transpulse.org>
+;; Keywords: NTLM, SASL
+;; Version: 1.00
+;; Created: February 2001
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This library is a direct translation of the Samba release 2.2.0
+;; implementation of Windows NT and LanManager compatible password
+;; encryption.
+;;
+;; Interface functions:
+;;
+;; ntlm-build-auth-request
+;; This will return a binary string, which should be used in the
+;; base64 encoded form and it is the caller's responsibility to encode
+;; the returned string with base64.
+;;
+;; ntlm-build-auth-response
+;; It is the caller's responsibility to pass a base64 decoded string
+;; (which will be a binary string) as the first argument and to
+;; encode the returned string with base64. The second argument user
+;; should be given in user@domain format.
+;;
+;; ntlm-get-password-hashes
+;;
+;;
+;; NTLM authentication procedure example:
+;;
+;; 1. Open a network connection to the Exchange server at the IMAP port (143)
+;; 2. Receive an opening message such as:
+;; "* OK Microsoft Exchange IMAP4rev1 server version 5.5.2653.7 (XXXX) ready"
+;; 3. Ask for IMAP server capability by sending "NNN capability"
+;; 4. Receive a capability message such as:
+;; "* CAPABILITY IMAP4 IMAP4rev1 IDLE LITERAL+ LOGIN-REFERRALS MAILBOX-REFERRALS NAMESPACE AUTH=NTLM"
+;; 5. Ask for NTLM authentication by sending a string
+;; "NNN authenticate ntlm"
+;; 6. Receive continuation acknowledgment "+"
+;; 7. Send NTLM authentication request generated by 'ntlm-build-auth-request
+;; 8. Receive NTLM challenge string following acknowledgment "+"
+;; 9. Generate response to challenge by 'ntlm-build-auth-response
+;; (here two hash function values of the user password are encrypted)
+;; 10. Receive authentication completion message such as
+;; "NNN OK AUTHENTICATE NTLM completed."
+
+;;; Code:
+
+(require 'md4)
+
+;;;
+;;; NTLM authentication interface functions
+
+(defun ntlm-build-auth-request (user &optional domain)
+ "Return the NTLM authentication request string for USER and DOMAIN.
+USER is a string representing a user name to be authenticated and
+DOMAIN is a NT domain. USER can include a NT domain part as in
+user@domain where the string after @ is used as the domain if DOMAIN
+is not given."
+ (interactive)
+ (let ((request-ident (concat "NTLMSSP" (make-string 1 0)))
+ (request-msgType (concat (make-string 1 1) (make-string 3 0)))
+ ;0x01 0x00 0x00 0x00
+ (request-flags (concat (make-string 1 7) (make-string 1 178)
+ (make-string 2 0)))
+ ;0x07 0xb2 0x00 0x00
+ lu ld off-d off-u)
+ (when (string-match "@" user)
+ (unless domain
+ (setq domain (substring user (1+ (match-beginning 0)))))
+ (setq user (substring user 0 (match-beginning 0))))
+ ;; set fields offsets within the request struct
+ (setq lu (length user))
+ (setq ld (length domain))
+ (setq off-u 32) ;offset to the string 'user
+ (setq off-d (+ 32 lu)) ;offset to the string 'domain
+ ;; pack the request struct in a string
+ (concat request-ident ;8 bytes
+ request-msgType ;4 bytes
+ request-flags ;4 bytes
+ (md4-pack-int16 lu) ;user field, count field
+ (md4-pack-int16 lu) ;user field, max count field
+ (md4-pack-int32 (cons 0 off-u)) ;user field, offset field
+ (md4-pack-int16 ld) ;domain field, count field
+ (md4-pack-int16 ld) ;domain field, max count field
+ (md4-pack-int32 (cons 0 off-d)) ;domain field, offset field
+ user ;bufer field
+ domain ;bufer field
+ )))
+
+(eval-when-compile
+ (defmacro ntlm-string-as-unibyte (string)
+ (if (fboundp 'string-as-unibyte)
+ `(string-as-unibyte ,string)
+ string)))
+
+(defun ntlm-build-auth-response (challenge user password-hashes)
+ "Return the response string to a challenge string CHALLENGE given by
+the NTLM based server for the user USER and the password hash list
+PASSWORD-HASHES. NTLM uses two hash values which are represented
+by PASSWORD-HASHES. PASSWORD-HASHES should be a return value of
+ (list (ntlm-smb-passwd-hash password) (ntlm-md4hash password))"
+ (let* ((rchallenge (ntlm-string-as-unibyte challenge))
+ ;; get fields within challenge struct
+ ;;(ident (substring rchallenge 0 8)) ;ident, 8 bytes
+ ;;(msgType (substring rchallenge 8 12)) ;msgType, 4 bytes
+ (uDomain (substring rchallenge 12 20)) ;uDomain, 8 bytes
+ (flags (substring rchallenge 20 24)) ;flags, 4 bytes
+ (challengeData (substring rchallenge 24 32)) ;challengeData, 8 bytes
+ uDomain-len uDomain-offs
+ ;; response struct and its fields
+ lmRespData ;lmRespData, 24 bytes
+ ntRespData ;ntRespData, 24 bytes
+ domain ;ascii domain string
+ lu ld off-lm off-nt off-d off-u off-w off-s)
+ ;; extract domain string from challenge string
+ (setq uDomain-len (md4-unpack-int16 (substring uDomain 0 2)))
+ (setq uDomain-offs (md4-unpack-int32 (substring uDomain 4 8)))
+ (setq domain
+ (ntlm-unicode2ascii (substring challenge
+ (cdr uDomain-offs)
+ (+ (cdr uDomain-offs) uDomain-len))
+ (/ uDomain-len 2)))
+ ;; overwrite domain in case user is given in <user>@<domain> format
+ (when (string-match "@" user)
+ (setq domain (substring user (1+ (match-beginning 0))))
+ (setq user (substring user 0 (match-beginning 0))))
+
+ ;; generate response data
+ (setq lmRespData
+ (ntlm-smb-owf-encrypt (car password-hashes) challengeData))
+ (setq ntRespData
+ (ntlm-smb-owf-encrypt (cadr password-hashes) challengeData))
+
+ ;; get offsets to fields to pack the response struct in a string
+ (setq lu (length user))
+ (setq ld (length domain))
+ (setq off-lm 64) ;offset to string 'lmResponse
+ (setq off-nt (+ 64 24)) ;offset to string 'ntResponse
+ (setq off-d (+ 64 48)) ;offset to string 'uDomain
+ (setq off-u (+ 64 48 (* 2 ld))) ;offset to string 'uUser
+ (setq off-w (+ 64 48 (* 2 (+ ld lu)))) ;offset to string 'uWks
+ (setq off-s (+ 64 48 (* 2 (+ ld lu lu)))) ;offset to string 'sessionKey
+ ;; pack the response struct in a string
+ (concat "NTLMSSP\0" ;response ident field, 8 bytes
+ (md4-pack-int32 '(0 . 3)) ;response msgType field, 4 bytes
+
+ ;; lmResponse field, 8 bytes
+ ;;AddBytes(response,lmResponse,lmRespData,24);
+ (md4-pack-int16 24) ;len field
+ (md4-pack-int16 24) ;maxlen field
+ (md4-pack-int32 (cons 0 off-lm)) ;field offset
+
+ ;; ntResponse field, 8 bytes
+ ;;AddBytes(response,ntResponse,ntRespData,24);
+ (md4-pack-int16 24) ;len field
+ (md4-pack-int16 24) ;maxlen field
+ (md4-pack-int32 (cons 0 off-nt)) ;field offset
+
+ ;; uDomain field, 8 bytes
+ ;;AddUnicodeString(response,uDomain,domain);
+ ;;AddBytes(response, uDomain, udomain, 2*ld);
+ (md4-pack-int16 (* 2 ld)) ;len field
+ (md4-pack-int16 (* 2 ld)) ;maxlen field
+ (md4-pack-int32 (cons 0 off-d)) ;field offset
+
+ ;; uUser field, 8 bytes
+ ;;AddUnicodeString(response,uUser,u);
+ ;;AddBytes(response, uUser, uuser, 2*lu);
+ (md4-pack-int16 (* 2 lu)) ;len field
+ (md4-pack-int16 (* 2 lu)) ;maxlen field
+ (md4-pack-int32 (cons 0 off-u)) ;field offset
+
+ ;; uWks field, 8 bytes
+ ;;AddUnicodeString(response,uWks,u);
+ (md4-pack-int16 (* 2 lu)) ;len field
+ (md4-pack-int16 (* 2 lu)) ;maxlen field
+ (md4-pack-int32 (cons 0 off-w)) ;field offset
+
+ ;; sessionKey field, 8 bytes
+ ;;AddString(response,sessionKey,NULL);
+ (md4-pack-int16 0) ;len field
+ (md4-pack-int16 0) ;maxlen field
+ (md4-pack-int32 (cons 0 (- off-s off-lm))) ;field offset
+
+ ;; flags field, 4 bytes
+ flags ;
+
+ ;; buffer field
+ lmRespData ;lmResponse, 24 bytes
+ ntRespData ;ntResponse, 24 bytes
+ (ntlm-ascii2unicode domain ;unicode domain string, 2*ld bytes
+ (length domain)) ;
+ (ntlm-ascii2unicode user ;unicode user string, 2*lu bytes
+ (length user)) ;
+ (ntlm-ascii2unicode user ;unicode user string, 2*lu bytes
+ (length user)) ;
+ )))
+
+(defun ntlm-get-password-hashes (password)
+ "Return a pair of SMB hash and NT MD4 hash of the given password PASSWORD"
+ (list (ntlm-smb-passwd-hash password)
+ (ntlm-md4hash password)))
+
+(defun ntlm-ascii2unicode (str len)
+ "Convert an ASCII string into a NT Unicode string, which is
+little-endian utf16."
+ (let ((utf (make-string (* 2 len) 0)) (i 0) val)
+ (while (and (< i len)
+ (not (zerop (setq val (aref str i)))))
+ (aset utf (* 2 i) val)
+ (aset utf (1+ (* 2 i)) 0)
+ (setq i (1+ i)))
+ utf))
+
+(defun ntlm-unicode2ascii (str len)
+ "Extract 7 bits ASCII part of a little endian utf16 string STR of length LEN."
+ (let ((buf (make-string len 0)) (i 0) (j 0))
+ (while (< i len)
+ (aset buf i (logand (aref str j) 127)) ;(string-to-number "7f" 16)
+ (setq i (1+ i)
+ j (+ 2 j)))
+ buf))
+
+(defun ntlm-smb-passwd-hash (passwd)
+ "Return the SMB password hash string of 16 bytes long for the given password
+string PASSWD. PASSWD is truncated to 14 bytes if longer."
+ (let ((len (min (length passwd) 14)))
+ (ntlm-smb-des-e-p16
+ (concat (substring (upcase passwd) 0 len) ;fill top 14 bytes with passwd
+ (make-string (- 15 len) 0)))))
+
+(defun ntlm-smb-owf-encrypt (passwd c8)
+ "Return the response string of 24 bytes long for the given password
+string PASSWD based on the DES encryption. PASSWD is of at most 14
+bytes long and the challenge string C8 of 8 bytes long."
+ (let ((len (min (length passwd) 16)) p22)
+ (setq p22 (concat (substring passwd 0 len) ;fill top 16 bytes with passwd
+ (make-string (- 22 len) 0)))
+ (ntlm-smb-des-e-p24 p22 c8)))
+
+(defun ntlm-smb-des-e-p24 (p22 c8)
+ "Return a 24 bytes hashed string for a 21 bytes string P22 and a 8 bytes
+string C8."
+ (concat (ntlm-smb-hash c8 p22 t) ;hash first 8 bytes of p22
+ (ntlm-smb-hash c8 (substring p22 7) t)
+ (ntlm-smb-hash c8 (substring p22 14) t)))
+
+(defconst ntlm-smb-sp8 [75 71 83 33 64 35 36 37])
+
+(defun ntlm-smb-des-e-p16 (p15)
+ "Return a 16 bytes hashed string for a 15 bytes string P15."
+ (concat (ntlm-smb-hash ntlm-smb-sp8 p15 t) ;hash of first 8 bytes of p15
+ (ntlm-smb-hash ntlm-smb-sp8 ;hash of last 8 bytes of p15
+ (substring p15 7) t)))
+
+(defun ntlm-smb-hash (in key forw)
+ "Return the hash string of length 8 for a string IN of length 8 and
+a string KEY of length 8. FORW is t or nil."
+ (let ((out (make-string 8 0))
+ outb ;string of length 64
+ (inb (make-string 64 0))
+ (keyb (make-string 64 0))
+ (key2 (ntlm-smb-str-to-key key))
+ (i 0) aa)
+ (while (< i 64)
+ (unless (zerop (logand (aref in (/ i 8)) (lsh 1 (- 7 (% i 8)))))
+ (aset inb i 1))
+ (unless (zerop (logand (aref key2 (/ i 8)) (lsh 1 (- 7 (% i 8)))))
+ (aset keyb i 1))
+ (setq i (1+ i)))
+ (setq outb (ntlm-smb-dohash inb keyb forw))
+ (setq i 0)
+ (while (< i 64)
+ (unless (zerop (aref outb i))
+ (setq aa (aref out (/ i 8)))
+ (aset out (/ i 8)
+ (logior aa (lsh 1 (- 7 (% i 8))))))
+ (setq i (1+ i)))
+ out))
+
+(defun ntlm-smb-str-to-key (str)
+ "Return a string of length 8 for the given string STR of length 7."
+ (let ((key (make-string 8 0))
+ (i 7))
+ (aset key 0 (lsh (aref str 0) -1))
+ (aset key 1 (logior
+ (lsh (logand (aref str 0) 1) 6)
+ (lsh (aref str 1) -2)))
+ (aset key 2 (logior
+ (lsh (logand (aref str 1) 3) 5)
+ (lsh (aref str 2) -3)))
+ (aset key 3 (logior
+ (lsh (logand (aref str 2) 7) 4)
+ (lsh (aref str 3) -4)))
+ (aset key 4 (logior
+ (lsh (logand (aref str 3) 15) 3)
+ (lsh (aref str 4) -5)))
+ (aset key 5 (logior
+ (lsh (logand (aref str 4) 31) 2)
+ (lsh (aref str 5) -6)))
+ (aset key 6 (logior
+ (lsh (logand (aref str 5) 63) 1)
+ (lsh (aref str 6) -7)))
+ (aset key 7 (logand (aref str 6) 127))
+ (while (>= i 0)
+ (aset key i (lsh (aref key i) 1))
+ (setq i (1- i)))
+ key))
+
+(defconst ntlm-smb-perm1 [57 49 41 33 25 17 9
+ 1 58 50 42 34 26 18
+ 10 2 59 51 43 35 27
+ 19 11 3 60 52 44 36
+ 63 55 47 39 31 23 15
+ 7 62 54 46 38 30 22
+ 14 6 61 53 45 37 29
+ 21 13 5 28 20 12 4])
+
+(defconst ntlm-smb-perm2 [14 17 11 24 1 5
+ 3 28 15 6 21 10
+ 23 19 12 4 26 8
+ 16 7 27 20 13 2
+ 41 52 31 37 47 55
+ 30 40 51 45 33 48
+ 44 49 39 56 34 53
+ 46 42 50 36 29 32])
+
+(defconst ntlm-smb-perm3 [58 50 42 34 26 18 10 2
+ 60 52 44 36 28 20 12 4
+ 62 54 46 38 30 22 14 6
+ 64 56 48 40 32 24 16 8
+ 57 49 41 33 25 17 9 1
+ 59 51 43 35 27 19 11 3
+ 61 53 45 37 29 21 13 5
+ 63 55 47 39 31 23 15 7])
+
+(defconst ntlm-smb-perm4 [32 1 2 3 4 5
+ 4 5 6 7 8 9
+ 8 9 10 11 12 13
+ 12 13 14 15 16 17
+ 16 17 18 19 20 21
+ 20 21 22 23 24 25
+ 24 25 26 27 28 29
+ 28 29 30 31 32 1])
+
+(defconst ntlm-smb-perm5 [16 7 20 21
+ 29 12 28 17
+ 1 15 23 26
+ 5 18 31 10
+ 2 8 24 14
+ 32 27 3 9
+ 19 13 30 6
+ 22 11 4 25])
+
+(defconst ntlm-smb-perm6 [40 8 48 16 56 24 64 32
+ 39 7 47 15 55 23 63 31
+ 38 6 46 14 54 22 62 30
+ 37 5 45 13 53 21 61 29
+ 36 4 44 12 52 20 60 28
+ 35 3 43 11 51 19 59 27
+ 34 2 42 10 50 18 58 26
+ 33 1 41 9 49 17 57 25])
+
+(defconst ntlm-smb-sc [1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1])
+
+(defconst ntlm-smb-sbox [[[14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7]
+ [ 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8]
+ [ 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0]
+ [15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13]]
+ [[15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10]
+ [ 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5]
+ [ 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15]
+ [13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9]]
+ [[10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8]
+ [13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1]
+ [13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7]
+ [ 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12]]
+ [[ 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15]
+ [13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9]
+ [10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4]
+ [ 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14]]
+ [[ 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9]
+ [14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6]
+ [ 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14]
+ [11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3]]
+ [[12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11]
+ [10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8]
+ [ 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6]
+ [ 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13]]
+ [[ 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1]
+ [13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6]
+ [ 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2]
+ [ 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12]]
+ [[13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7]
+ [ 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2]
+ [ 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8]
+ [ 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11]]])
+
+(defsubst ntlm-string-permute (in perm n)
+ "Return a string of length N for a string IN and a permutation vector
+PERM of size N. The length of IN should be height of PERM."
+ (let ((i 0) (out (make-string n 0)))
+ (while (< i n)
+ (aset out i (aref in (- (aref perm i) 1)))
+ (setq i (1+ i)))
+ out))
+
+(defsubst ntlm-string-lshift (str count len)
+ "Return a string by circularly shifting a string STR by COUNT to the left.
+length of STR is LEN."
+ (let ((c (% count len)))
+ (concat (substring str c len) (substring str 0 c))))
+
+(defsubst ntlm-string-xor (in1 in2 n)
+ "Return exclusive-or of sequences in1 and in2"
+ (let ((w (make-string n 0)) (i 0))
+ (while (< i n)
+ (aset w i (logxor (aref in1 i) (aref in2 i)))
+ (setq i (1+ i)))
+ w))
+
+(defun ntlm-smb-dohash (in key forw)
+ "Return the hash value for a string IN and a string KEY.
+Length of IN and KEY are 64. FORW non nill means forward, nil means
+backward."
+ (let (pk1 ;string of length 56
+ c ;string of length 28
+ d ;string of length 28
+ cd ;string of length 56
+ (ki (make-vector 16 0)) ;vector of string of length 48
+ pd1 ;string of length 64
+ l ;string of length 32
+ r ;string of length 32
+ rl ;string of length 64
+ (i 0) (j 0) (k 0))
+ (setq pk1 (ntlm-string-permute key ntlm-smb-perm1 56))
+ (setq c (substring pk1 0 28))
+ (setq d (substring pk1 28 56))
+
+ (setq i 0)
+ (while (< i 16)
+ (setq c (ntlm-string-lshift c (aref ntlm-smb-sc i) 28))
+ (setq d (ntlm-string-lshift d (aref ntlm-smb-sc i) 28))
+ (setq cd (concat (substring c 0 28) (substring d 0 28)))
+ (aset ki i (ntlm-string-permute cd ntlm-smb-perm2 48))
+ (setq i (1+ i)))
+
+ (setq pd1 (ntlm-string-permute in ntlm-smb-perm3 64))
+
+ (setq l (substring pd1 0 32))
+ (setq r (substring pd1 32 64))
+
+ (setq i 0)
+ (let (er ;string of length 48
+ erk ;string of length 48
+ (b (make-vector 8 0)) ;vector of strings of length 6
+ cb ;string of length 32
+ pcb ;string of length 32
+ r2 ;string of length 32
+ jj m n bj sbox-jmn)
+ (while (< i 16)
+ (setq er (ntlm-string-permute r ntlm-smb-perm4 48))
+ (setq erk (ntlm-string-xor er
+ (aref ki (if forw i (- 15 i)))
+ 48))
+ (setq j 0)
+ (while (< j 8)
+ (setq jj (* 6 j))
+ (aset b j (substring erk jj (+ jj 6)))
+ (setq j (1+ j)))
+ (setq j 0)
+ (while (< j 8)
+ (setq bj (aref b j))
+ (setq m (logior (lsh (aref bj 0) 1) (aref bj 5)))
+ (setq n (logior (lsh (aref bj 1) 3)
+ (lsh (aref bj 2) 2)
+ (lsh (aref bj 3) 1)
+ (aref bj 4)))
+ (setq k 0)
+ (setq sbox-jmn (aref (aref (aref ntlm-smb-sbox j) m) n))
+ (while (< k 4)
+ (aset bj k
+ (if (zerop (logand sbox-jmn (lsh 1 (- 3 k))))
+ 0 1))
+ (setq k (1+ k)))
+ (setq j (1+ j)))
+
+ (setq j 0)
+ (setq cb nil)
+ (while (< j 8)
+ (setq cb (concat cb (substring (aref b j) 0 4)))
+ (setq j (1+ j)))
+
+ (setq pcb (ntlm-string-permute cb ntlm-smb-perm5 32))
+ (setq r2 (ntlm-string-xor l pcb 32))
+ (setq l r)
+ (setq r r2)
+ (setq i (1+ i))))
+ (setq rl (concat r l))
+ (ntlm-string-permute rl ntlm-smb-perm6 64)))
+
+(defun ntlm-md4hash (passwd)
+ "Return the 16 bytes MD4 hash of a string PASSWD after converting it
+into a Unicode string. PASSWD is truncated to 128 bytes if longer."
+ (let (len wpwd)
+ ;; Password cannot be longer than 128 characters
+ (setq len (length passwd))
+ (if (> len 128)
+ (setq len 128))
+ ;; Password must be converted to NT unicode
+ (setq wpwd (ntlm-ascii2unicode passwd len))
+ ;; Calculate length in bytes
+ (setq len (* len 2))
+ (md4 wpwd len)))
+
+(provide 'ntlm)
+
+;;; arch-tag: 348ace18-f8e2-4176-8fe9-d9ab4e96f296
+;;; ntlm.el ends here
diff --git a/lisp/gnus/password.el b/lisp/gnus/password.el
new file mode 100644
index 00000000000..32ab76052d9
--- /dev/null
+++ b/lisp/gnus/password.el
@@ -0,0 +1,140 @@
+;;; password.el --- Read passwords from user, possibly using a password cache.
+
+;; Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+;; Author: Simon Josefsson <simon@josefsson.org>
+;; Created: 2003-12-21
+;; Keywords: password cache passphrase key
+
+;; 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 3, 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:
+
+;; Greatly influenced by pgg.el written by Daiki Ueno, with timer
+;; fixes for XEmacs by Katsumi Yamaoka. In fact, this is mostly just
+;; a rip-off.
+;;
+;; (password-read "Password? " "test")
+;; ;; Minibuffer prompt for password.
+;; => "foo"
+;;
+;; (password-cache-add "test" "foo")
+;; => nil
+
+;; Note the previous two can be replaced with:
+;; (password-read-and-add "Password? " "test")
+;; ;; Minibuffer prompt for password.
+;; => "foo"
+;; ;; "foo" is now cached with key "test"
+
+
+;; (password-read "Password? " "test")
+;; ;; No minibuffer prompt
+;; => "foo"
+;;
+;; (password-read "Password? " "test")
+;; ;; No minibuffer prompt
+;; => "foo"
+;;
+;; ;; Wait `password-cache-expiry' seconds.
+;;
+;; (password-read "Password? " "test")
+;; ;; Minibuffer prompt for password is back.
+;; => "foo"
+
+;;; Code:
+
+(eval-when-compile
+ (require 'cl))
+
+(defcustom password-cache t
+ "Whether to cache passwords."
+ :group 'password
+ :type 'boolean)
+
+(defcustom password-cache-expiry 16
+ "How many seconds passwords are cached, or nil to disable expiring.
+Whether passwords are cached at all is controlled by `password-cache'."
+ :group 'password
+ :type '(choice (const :tag "Never" nil)
+ (integer :tag "Seconds")))
+
+(defvar password-data (make-vector 7 0))
+
+(defun password-read-from-cache (key)
+ "Obtain passphrase for KEY from time-limited passphrase cache.
+Custom variables `password-cache' and `password-cache-expiry'
+regulate cache behavior."
+ (and password-cache
+ key
+ (symbol-value (intern-soft key password-data))))
+
+(defun password-read (prompt &optional key)
+ "Read password, for use with KEY, from user, or from cache if wanted.
+KEY indicate the purpose of the password, so the cache can
+separate passwords. The cache is not used if KEY is nil. It is
+typically a string.
+The variable `password-cache' control whether the cache is used."
+ (or (password-read-from-cache key)
+ (read-passwd prompt)))
+
+(defun password-read-and-add (prompt &optional key)
+ "Read password, for use with KEY, from user, or from cache if wanted.
+Then store the password in the cache. Uses `password-read' and
+`password-cache-add'.
+Custom variables `password-cache' and `password-cache-expiry'
+regulate cache behavior."
+ (let ((password (password-read prompt key)))
+ (when (and password key)
+ (password-cache-add key password))
+ password))
+
+(defun password-cache-remove (key)
+ "Remove password indexed by KEY from password cache.
+This is typically run be a timer setup from `password-cache-add',
+but can be invoked at any time to forcefully remove passwords
+from the cache. This may be useful when it has been detected
+that a password is invalid, so that `password-read' query the
+user again."
+ (let ((password (symbol-value (intern-soft key password-data))))
+ (when password
+ (if (fboundp 'clear-string)
+ (clear-string password)
+ (fillarray password ?_))
+ (unintern key password-data))))
+
+(defun password-cache-add (key password)
+ "Add password to cache.
+The password is removed by a timer after `password-cache-expiry'
+seconds."
+ (when (and password-cache-expiry (null (intern-soft key password-data)))
+ (run-at-time password-cache-expiry nil
+ #'password-cache-remove
+ key))
+ (set (intern key password-data) password)
+ nil)
+
+(defun password-reset ()
+ "Clear the password cache."
+ (interactive)
+ (fillarray password-data 0))
+
+(provide 'password)
+
+;;; arch-tag: ab160494-16c8-4c68-a4a1-73eebf6686e5
+;;; password.el ends here
diff --git a/lisp/gnus/pop3.el b/lisp/gnus/pop3.el
index 97d6af02cde..d152c2480ad 100644
--- a/lisp/gnus/pop3.el
+++ b/lisp/gnus/pop3.el
@@ -36,6 +36,7 @@
;;; Code:
(require 'mail-utils)
+(defvar parse-time-months)
(defgroup pop3 nil
"Post Office Protocol."
@@ -201,6 +202,23 @@ to %s might not give the result you'd expect." pop3-leave-mail-on-server)
(pop3-quit process)
message-count))
+(autoload 'open-tls-stream "tls")
+(autoload 'starttls-open-stream "starttls")
+(autoload 'starttls-negotiate "starttls") ; avoid warning
+
+(defcustom pop3-stream-type nil
+ "*Transport security type for POP3 connexions.
+This may be either nil (plain connexion), `ssl' (use an
+SSL/TSL-secured stream) or `starttls' (use the starttls mechanism
+to turn on TLS security after opening the stream). However, if
+this is nil, `ssl' is assumed for connexions to port
+995 (pop3s)."
+ :version "23.0" ;; No Gnus
+ :group 'pop3
+ :type '(choice (const :tag "Plain" nil)
+ (const :tag "SSL/TLS" ssl)
+ (const starttls)))
+
(defun pop3-open-server (mailhost port)
"Open TCP connection to MAILHOST on PORT.
Returns the process associated with the connection."
@@ -212,7 +230,51 @@ Returns the process associated with the connection."
mailhost)))
(erase-buffer)
(setq pop3-read-point (point-min))
- (setq process (open-network-stream "POP" (current-buffer) mailhost port))
+ (setq process
+ (cond
+ ((or (eq pop3-stream-type 'ssl)
+ (and (not pop3-stream-type) (member port '(995 "pop3s"))))
+ ;; gnutls-cli, openssl don't accept service names
+ (if (or (equal port "pop3s")
+ (null port))
+ (setq port 995))
+ (let ((process (open-tls-stream "POP" (current-buffer)
+ mailhost port)))
+ (when process
+ ;; There's a load of info printed that needs deleting.
+ (let ((again 't))
+ ;; repeat until
+ ;; - either we received the +OK line
+ ;; - or accept-process-output timed out without getting
+ ;; anything
+ (while (and again
+ (setq again (memq (process-status process)
+ '(open run))))
+ (setq again (pop3-accept-process-output process))
+ (goto-char (point-max))
+ (forward-line -1)
+ (cond ((looking-at "\\+OK")
+ (setq again nil)
+ (delete-region (point-min) (point)))
+ ((not again)
+ (pop3-quit process)
+ (error "POP SSL connexion failed")))))
+ process)))
+ ((eq pop3-stream-type 'starttls)
+ ;; gnutls-cli, openssl don't accept service names
+ (if (equal port "pop3")
+ (setq port 110))
+ (let ((process (starttls-open-stream "POP" (current-buffer)
+ mailhost (or port 110))))
+ (pop3-send-command process "STLS")
+ (let ((response (pop3-read-response process t)))
+ (if (and response (string-match "+OK" response))
+ (starttls-negotiate process)
+ (pop3-quit process)
+ (error "POP server doesn't support starttls")))
+ process))
+ (t
+ (open-network-stream "POP" (current-buffer) mailhost port))))
(let ((response (pop3-read-response process t)))
(setq pop3-timestamp
(substring response (or (string-match "<" response) 0)
@@ -273,8 +335,6 @@ Return the response string if optional second argument is non-nil."
(forward-char)))
(set-marker end nil))
-(eval-when-compile (defvar parse-time-months))
-
;; Copied from message-make-date.
(defun pop3-make-date (&optional now)
"Make a valid date header.
@@ -357,37 +417,6 @@ If NOW, use that time instead."
;; AUTHORIZATION STATE
-(eval-when-compile
- (if (not (fboundp 'md5)) ;; Emacs 20
- (defalias 'md5 'ignore)))
-
-(eval-and-compile
- (if (and (fboundp 'md5)
- ;; There might be an incompatible implementation.
- (condition-case nil
- (md5 "Check whether the 4th argument is allowed"
- nil nil 'binary)
- (error nil)))
- (defun pop3-md5 (string)
- (md5 string nil nil 'binary))
- (defvar pop3-md5-program "md5"
- "*Program to encode its input in MD5.
-\"openssl\" is a popular alternative; set `pop3-md5-program-args' to
-'(\"md5\") if you use it.")
- (defvar pop3-md5-program-args nil
- "*List of arguments passed to `pop3-md5-program'.")
- (defun pop3-md5 (string)
- (let ((default-enable-multibyte-characters t)
- (coding-system-for-write 'binary))
- (with-temp-buffer
- (insert string)
- (apply 'call-process-region (point-min) (point-max)
- pop3-md5-program t (current-buffer) nil
- pop3-md5-program-args)
- ;; The meaningful output is the first 32 characters.
- ;; Don't return the newline that follows them!
- (buffer-substring (point-min) (+ 32 (point-min))))))))
-
(defun pop3-user (process user)
"Send USER information to POP3 server."
(pop3-send-command process (format "USER %s" user))
@@ -409,7 +438,7 @@ If NOW, use that time instead."
(setq pass
(read-passwd (format "Password for %s: " pop3-maildrop))))
(if pass
- (let ((hash (pop3-md5 (concat pop3-timestamp pass))))
+ (let ((hash (md5 (concat pop3-timestamp pass) nil nil 'binary)))
(pop3-send-command process (format "APOP %s %s" user hash))
(let ((response (pop3-read-response process t)))
(if (not (and response (string-match "+OK" response)))
@@ -520,6 +549,13 @@ and close the connection."
;; -ERR [invalid password]
;; -ERR [unable to lock maildrop]
+;; STLS (RFC 2595)
+;; Arguments: none
+;; Restrictions: Only permitted in AUTHORIZATION state.
+;; Possible responses:
+;; +OK
+;; -ERR
+
;;; TRANSACTION STATE
;; STAT
diff --git a/lisp/gnus/qp.el b/lisp/gnus/qp.el
index cb9c779e4b5..8ae34f193a1 100644
--- a/lisp/gnus/qp.el
+++ b/lisp/gnus/qp.el
@@ -31,7 +31,7 @@
;;; Code:
(require 'mm-util)
-(eval-when-compile (defvar mm-use-ultra-safe-encoding))
+(defvar mm-use-ultra-safe-encoding)
;;;###autoload
(defun quoted-printable-decode-region (from to &optional coding-system)
@@ -70,8 +70,8 @@ them into characters should be done separately."
(delete-char 2))
((looking-at "=[0-9A-F][0-9A-F]")
(let ((byte (string-to-number (buffer-substring (1+ (point))
- (+ 3 (point)))
- 16)))
+ (+ 3 (point)))
+ 16)))
(mm-insert-byte byte 1)
(delete-char 3)))
(t
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el
index 2ad57323d47..3ef8af0f10b 100644
--- a/lisp/gnus/rfc2047.el
+++ b/lisp/gnus/rfc2047.el
@@ -30,25 +30,8 @@
;;; Code:
(eval-when-compile
- (require 'cl)
- (defvar message-posting-charset)
- (unless (fboundp 'with-syntax-table) ; not in Emacs 20
- (defmacro with-syntax-table (table &rest body)
- "Evaluate BODY with syntax table of current buffer set to TABLE.
-The syntax table of the current buffer is saved, BODY is evaluated, and the
-saved table is restored, even in case of an abnormal exit.
-Value is what BODY returns."
- (let ((old-table (make-symbol "table"))
- (old-buffer (make-symbol "buffer")))
- `(let ((,old-table (syntax-table))
- (,old-buffer (current-buffer)))
- (unwind-protect
- (progn
- (set-syntax-table ,table)
- ,@body)
- (save-current-buffer
- (set-buffer ,old-buffer)
- (set-syntax-table ,old-table))))))))
+ (require 'cl))
+(defvar message-posting-charset)
(require 'qp)
(require 'mm-util)
@@ -58,18 +41,6 @@ Value is what BODY returns."
(require 'rfc2045) ;; rfc2045-encode-string
(autoload 'mm-body-7-or-8 "mm-bodies")
-(eval-and-compile
- ;; Avoid gnus-util for mm- code.
- (defalias 'rfc2047-point-at-bol
- (if (fboundp 'point-at-bol)
- 'point-at-bol
- 'line-beginning-position))
-
- (defalias 'rfc2047-point-at-eol
- (if (fboundp 'point-at-eol)
- 'point-at-eol
- 'line-end-position)))
-
(defvar rfc2047-header-encoding-alist
'(("Newsgroups" . nil)
("Followup-To" . nil)
@@ -159,7 +130,7 @@ This is either `base64' or `quoted-printable'."
(progn
(forward-line 1)
(if (re-search-forward "^[^ \n\t]" nil t)
- (rfc2047-point-at-bol)
+ (point-at-bol)
(point-max))))
(goto-char (point-min)))
@@ -175,37 +146,50 @@ This is either `base64' or `quoted-printable'."
encodable-regexp)
"Quote special characters with `\\'s in quoted strings.
Quoting will not be done in a quoted string if it contains characters
-matching ENCODABLE-REGEXP."
+matching ENCODABLE-REGEXP or it is within parentheses."
(goto-char (point-min))
(let ((tspecials (concat "[" ietf-drums-tspecials "]"))
+ (start (point))
beg end)
(with-syntax-table (standard-syntax-table)
- (while (search-forward "\"" nil t)
- (setq beg (match-beginning 0))
- (unless (eq (char-before beg) ?\\)
- (goto-char beg)
- (setq beg (1+ beg))
- (condition-case nil
- (progn
- (forward-sexp)
- (setq end (1- (point)))
- (goto-char beg)
- (if (and encodable-regexp
- (re-search-forward encodable-regexp end t))
- (goto-char (1+ end))
- (save-restriction
- (narrow-to-region beg end)
- (while (re-search-forward tspecials nil 'move)
- (if (eq (char-before) ?\\)
- (if (looking-at tspecials) ;; Already quoted.
- (forward-char)
- (insert "\\"))
- (goto-char (match-beginning 0))
- (insert "\\")
- (forward-char))))
- (forward-char)))
- (error
- (goto-char beg))))))))
+ (while (not (eobp))
+ (if (ignore-errors
+ (forward-list 1)
+ (eq (char-before) ?\)))
+ (forward-list -1)
+ (goto-char (point-max)))
+ (save-restriction
+ (narrow-to-region start (point))
+ (goto-char start)
+ (while (search-forward "\"" nil t)
+ (setq beg (match-beginning 0))
+ (unless (eq (char-before beg) ?\\)
+ (goto-char beg)
+ (setq beg (1+ beg))
+ (condition-case nil
+ (progn
+ (forward-sexp)
+ (setq end (1- (point)))
+ (goto-char beg)
+ (if (and encodable-regexp
+ (re-search-forward encodable-regexp end t))
+ (goto-char (1+ end))
+ (save-restriction
+ (narrow-to-region beg end)
+ (while (re-search-forward tspecials nil 'move)
+ (if (eq (char-before) ?\\)
+ (if (looking-at tspecials) ;; Already quoted.
+ (forward-char)
+ (insert "\\"))
+ (goto-char (match-beginning 0))
+ (insert "\\")
+ (forward-char))))
+ (forward-char)))
+ (error
+ (goto-char beg)))))
+ (goto-char (point-max)))
+ (forward-list 1)
+ (setq start (point))))))
(defvar rfc2047-encoding-type 'address-mime
"The type of encoding done by `rfc2047-encode-region'.
@@ -290,9 +274,10 @@ Should be called narrowed to the head of the message."
;;; (rfc2047-encode-region (point-min) (point-max))
;;; (error "Cannot send unencoded text")))
((mm-coding-system-p method)
- (if (and (featurep 'mule)
- (if (boundp 'default-enable-multibyte-characters)
- default-enable-multibyte-characters))
+ (if (or (and (featurep 'mule)
+ (if (boundp 'default-enable-multibyte-characters)
+ default-enable-multibyte-characters))
+ (featurep 'file-coding))
(mm-encode-coding-region (point) (point-max) method)))
;; Hm.
(t)))
@@ -300,7 +285,6 @@ Should be called narrowed to the head of the message."
;; Fixme: This, and the require below may not be the Right Thing, but
;; should be safe just before release. -- fx 2001-02-08
-(eval-when-compile (defvar message-posting-charset))
(defun rfc2047-encodable-p ()
"Return non-nil if any characters in current buffer need encoding in headers.
@@ -656,14 +640,14 @@ Point moves to the end of the region."
(goto-char b)
(setq b (point-marker)
e (set-marker (make-marker) e))
- (rfc2047-fold-region (rfc2047-point-at-bol) b)
+ (rfc2047-fold-region (point-at-bol) b)
(goto-char b)
(skip-chars-backward "^ \t\n")
(unless (= 0 (skip-chars-backward " \t"))
;; `crest' may contain whitespace and an open parenthesis.
(setq crest (buffer-substring-no-properties (point) b)))
(setq eword (rfc2047-encode-1
- (- b (rfc2047-point-at-bol))
+ (- b (point-at-bol))
(mm-replace-in-string
(buffer-substring-no-properties b e)
"\n\\([ \t]?\\)" "\\1")
@@ -710,7 +694,7 @@ Point moves to the end of the region."
(first t)
(bol (save-restriction
(widen)
- (rfc2047-point-at-bol))))
+ (point-at-bol))))
(while (not (eobp))
(when (and (or break qword-break)
(> (- (point) bol) 76))
@@ -782,18 +766,18 @@ Point moves to the end of the region."
(goto-char (point-min))
(let ((bol (save-restriction
(widen)
- (rfc2047-point-at-bol)))
- (eol (rfc2047-point-at-eol)))
+ (point-at-bol)))
+ (eol (point-at-eol)))
(forward-line 1)
(while (not (eobp))
(if (and (looking-at "[ \t]")
- (< (- (rfc2047-point-at-eol) bol) 76))
+ (< (- (point-at-eol) bol) 76))
(delete-region eol (progn
(goto-char eol)
(skip-chars-forward "\r\n")
(point)))
- (setq bol (rfc2047-point-at-bol)))
- (setq eol (rfc2047-point-at-eol))
+ (setq bol (point-at-bol)))
+ (setq eol (point-at-eol))
(forward-line 1)))))
(defun rfc2047-b-encode-string (string)
@@ -842,7 +826,7 @@ it, put the following line in your ~/.gnus.el file:
(eval-and-compile
(defconst rfc2047-encoded-word-regexp
- "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\
+ "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(?:\\*[^?]+\\)?\
\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?="))
(defvar rfc2047-quote-decoded-words-containing-tspecials nil
@@ -981,8 +965,8 @@ other than `\"' and `\\' in quoted strings."
words nil)
(while match
(push (list (match-string 2) ;; charset
- (char-after (match-beginning 4)) ;; encoding
- (match-string 5) ;; encoded-text
+ (char-after (match-beginning 3)) ;; encoding
+ (match-string 4) ;; encoded-text
(match-string 1)) ;; encoded-word
words)
;; Look for the subsequent encoded-words.
diff --git a/lisp/gnus/rfc2231.el b/lisp/gnus/rfc2231.el
index 51d7523a648..6e9963c5321 100644
--- a/lisp/gnus/rfc2231.el
+++ b/lisp/gnus/rfc2231.el
@@ -53,8 +53,7 @@ must never cause a Lisp error."
(let ((ttoken (ietf-drums-token-to-list ietf-drums-text-token))
(stoken (ietf-drums-token-to-list ietf-drums-tspecials))
(ntoken (ietf-drums-token-to-list "0-9"))
- c type attribute encoded number prev-attribute vals
- prev-encoded parameters value)
+ c type attribute encoded number parameters value)
(ietf-drums-init
(condition-case nil
(mail-header-remove-whitespace
@@ -81,8 +80,8 @@ must never cause a Lisp error."
;; Finally, attempt to extract only type.
(if (string-match
(concat "\\`[\t\n ]*\\([^" ietf-drums-tspecials "\t\n ]+"
- "\\(/[^" ietf-drums-tspecials
- "\t\n ]+\\)?\\)\\([\t\n ;]\\|\\'\\)")
+ "\\(?:/[^" ietf-drums-tspecials
+ "\t\n ]+\\)?\\)\\(?:[\t\n ;]\\|\\'\\)")
string)
(match-string 1 string)
""))))))
@@ -142,19 +141,6 @@ must never cause a Lisp error."
(setq c (char-after)))))
(setq number nil
encoded nil))
- ;; See if we have any previous continuations.
- (when (and prev-attribute
- (not (eq prev-attribute attribute)))
- (setq vals
- (mapconcat 'cdr (sort vals 'car-less-than-car) ""))
- (push (cons prev-attribute
- (if prev-encoded
- (rfc2231-decode-encoded-string vals)
- vals))
- parameters)
- (setq prev-attribute nil
- vals nil
- prev-encoded nil))
(unless (eq c ?=)
(error "Invalid header: %s" string))
(forward-char 1)
@@ -187,33 +173,33 @@ must never cause a Lisp error."
(point)))))
(t
(error "Invalid header: %s" string)))
- (if number
- (progn
- (push (cons number value) vals)
- (setq prev-attribute attribute
- prev-encoded encoded))
- (push (cons attribute
- (if encoded
- (rfc2231-decode-encoded-string value)
- value))
- parameters))))
-
- ;; Take care of any final continuations.
- (when prev-attribute
- (setq vals (mapconcat 'cdr (sort vals 'car-less-than-car) ""))
- (push (cons prev-attribute
- (if prev-encoded
- (rfc2231-decode-encoded-string vals)
- vals))
- parameters)))
+ (push (list attribute value number encoded)
+ parameters))))
(error
(setq parameters nil)
- (if signal-error
- (signal (car err) (cdr err))
- ;;(message "%s" (error-message-string err))
- )))
+ (when signal-error
+ (signal (car err) (cdr err)))))
- (cons type (nreverse parameters))))))
+ ;; Now collect and concatenate continuation parameters.
+ (let ((cparams nil)
+ elem)
+ (loop for (attribute value part encoded)
+ in (sort parameters (lambda (e1 e2)
+ (< (or (caddr e1) 0)
+ (or (caddr e2) 0))))
+ do (if (or (not (setq elem (assq attribute cparams)))
+ (and (numberp part)
+ (zerop part)))
+ (push (list attribute value encoded) cparams)
+ (setcar (cdr elem) (concat (cadr elem) value))))
+ ;; Finally decode encoded values.
+ (cons type (mapcar
+ (lambda (elem)
+ (cons (car elem)
+ (if (nth 2 elem)
+ (rfc2231-decode-encoded-string (nth 1 elem))
+ (nth 1 elem))))
+ (nreverse cparams))))))))
(defun rfc2231-decode-encoded-string (string)
"Decode an RFC2231-encoded string.
@@ -223,10 +209,10 @@ These look like:
\"'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\",
\"''This%20is%20%2A%2A%2Afun%2A%2A%2A\", or
\"This is ***fun***\"."
- (string-match "\\`\\(\\([^']+\\)?'\\([^']+\\)?'\\)?\\(.+\\)" string)
- (let ((coding-system (mm-charset-to-coding-system (match-string 2 string)))
- ;;(language (match-string 3 string))
- (value (match-string 4 string)))
+ (string-match "\\`\\(?:\\([^']+\\)?'\\([^']+\\)?'\\)?\\(.+\\)" string)
+ (let ((coding-system (mm-charset-to-coding-system (match-string 1 string)))
+ ;;(language (match-string 2 string))
+ (value (match-string 3 string)))
(mm-with-unibyte-buffer
(insert value)
(goto-char (point-min))
diff --git a/lisp/gnus/sasl-cram.el b/lisp/gnus/sasl-cram.el
new file mode 100644
index 00000000000..b8b1ced82ac
--- /dev/null
+++ b/lisp/gnus/sasl-cram.el
@@ -0,0 +1,52 @@
+;;; sasl-cram.el --- CRAM-MD5 module for the SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;; Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SASL, CRAM-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 3, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+(require 'sasl)
+(require 'hmac-md5)
+
+(defconst sasl-cram-md5-steps
+ '(ignore ;no initial response
+ sasl-cram-md5-response))
+
+(defun sasl-cram-md5-response (client step)
+ (let ((passphrase
+ (sasl-read-passphrase
+ (format "CRAM-MD5 passphrase for %s: "
+ (sasl-client-name client)))))
+ (unwind-protect
+ (concat (sasl-client-name client) " "
+ (encode-hex-string
+ (hmac-md5 (sasl-step-data step) passphrase)))
+ (fillarray passphrase 0))))
+
+(put 'sasl-cram 'sasl-mechanism
+ (sasl-make-mechanism "CRAM-MD5" sasl-cram-md5-steps))
+
+(provide 'sasl-cram)
+
+;;; arch-tag: 46cb281b-975a-4fe0-a39f-3018691b1b05
+;;; sasl-cram.el ends here
diff --git a/lisp/gnus/sasl-digest.el b/lisp/gnus/sasl-digest.el
new file mode 100644
index 00000000000..c290c7524c8
--- /dev/null
+++ b/lisp/gnus/sasl-digest.el
@@ -0,0 +1,157 @@
+;;; sasl-digest.el --- DIGEST-MD5 module for the SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;; Kenichi OKADA <okada@opaopa.org>
+;; Keywords: SASL, DIGEST-MD5
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 3, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;; This program is implemented from draft-leach-digest-sasl-05.txt.
+;;
+;; It is caller's responsibility to base64-decode challenges and
+;; base64-encode responses in IMAP4 AUTHENTICATE command.
+;;
+;; Passphrase should be longer than 16 bytes. (See RFC 2195)
+
+;;; Commentary:
+
+(require 'sasl)
+(require 'hmac-md5)
+
+(defvar sasl-digest-md5-nonce-count 1)
+(defvar sasl-digest-md5-unique-id-function
+ sasl-unique-id-function)
+
+(defvar sasl-digest-md5-syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?= "." table)
+ (modify-syntax-entry ?, "." table)
+ table)
+ "A syntax table for parsing digest-challenge attributes.")
+
+(defconst sasl-digest-md5-steps
+ '(ignore ;no initial response
+ sasl-digest-md5-response
+ ignore)) ;""
+
+(defun sasl-digest-md5-parse-string (string)
+ "Parse STRING and return a property list.
+The value is a cons cell of the form \(realm nonce qop-options stale maxbuf
+charset algorithm cipher-opts auth-param)."
+ (with-temp-buffer
+ (set-syntax-table sasl-digest-md5-syntax-table)
+ (save-excursion
+ (insert string)
+ (goto-char (point-min))
+ (insert "(")
+ (while (progn (forward-sexp) (not (eobp)))
+ (delete-char 1)
+ (insert " "))
+ (insert ")")
+ (read (point-min-marker)))))
+
+(defun sasl-digest-md5-digest-uri (serv-type host &optional serv-name)
+ (concat serv-type "/" host
+ (if (and serv-name
+ (not (string= host serv-name)))
+ (concat "/" serv-name))))
+
+(defun sasl-digest-md5-cnonce ()
+ (let ((sasl-unique-id-function sasl-digest-md5-unique-id-function))
+ (sasl-unique-id)))
+
+(defun sasl-digest-md5-response-value (username
+ realm
+ nonce
+ cnonce
+ nonce-count
+ qop
+ digest-uri
+ authzid)
+ (let ((passphrase
+ (sasl-read-passphrase
+ (format "DIGEST-MD5 passphrase for %s: "
+ username))))
+ (unwind-protect
+ (encode-hex-string
+ (md5-binary
+ (concat
+ (encode-hex-string
+ (md5-binary (concat (md5-binary
+ (concat username ":" realm ":" passphrase))
+ ":" nonce ":" cnonce
+ (if authzid
+ (concat ":" authzid)))))
+ ":" nonce
+ ":" (format "%08x" nonce-count) ":" cnonce ":" qop ":"
+ (encode-hex-string
+ (md5-binary
+ (concat "AUTHENTICATE:" digest-uri
+ (if (member qop '("auth-int" "auth-conf"))
+ ":00000000000000000000000000000000")))))))
+ (fillarray passphrase 0))))
+
+(defun sasl-digest-md5-response (client step)
+ (let* ((plist
+ (sasl-digest-md5-parse-string (sasl-step-data step)))
+ (realm
+ (or (sasl-client-property client 'realm)
+ (plist-get plist 'realm))) ;need to check
+ (nonce-count
+ (or (sasl-client-property client 'nonce-count)
+ sasl-digest-md5-nonce-count))
+ (qop
+ (or (sasl-client-property client 'qop)
+ "auth"))
+ (digest-uri
+ (sasl-digest-md5-digest-uri
+ (sasl-client-service client)(sasl-client-server client)))
+ (cnonce
+ (or (sasl-client-property client 'cnonce)
+ (sasl-digest-md5-cnonce))))
+ (sasl-client-set-property client 'nonce-count (1+ nonce-count))
+ (unless (string= qop "auth")
+ (sasl-error (format "Unsupported \"qop-value\": %s" qop)))
+ (concat
+ "username=\"" (sasl-client-name client) "\","
+ "realm=\"" realm "\","
+ "nonce=\"" (plist-get plist 'nonce) "\","
+ "cnonce=\"" cnonce "\","
+ (format "nc=%08x," nonce-count)
+ "digest-uri=\"" digest-uri "\","
+ "qop=" qop ","
+ "response="
+ (sasl-digest-md5-response-value
+ (sasl-client-name client)
+ realm
+ (plist-get plist 'nonce)
+ cnonce
+ nonce-count
+ qop
+ digest-uri
+ (plist-get plist 'authzid)))))
+
+(put 'sasl-digest 'sasl-mechanism
+ (sasl-make-mechanism "DIGEST-MD5" sasl-digest-md5-steps))
+
+(provide 'sasl-digest)
+
+;;; arch-tag: 786e02ed-1bc4-4b3c-bf34-96c27e31084d
+;;; sasl-digest.el ends here
diff --git a/lisp/gnus/sasl-ntlm.el b/lisp/gnus/sasl-ntlm.el
new file mode 100644
index 00000000000..784b373c056
--- /dev/null
+++ b/lisp/gnus/sasl-ntlm.el
@@ -0,0 +1,66 @@
+;;; sasl-ntlm.el --- NTLM (NT Lan Manager) module for the SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Taro Kawagishi <tarok@transpulse.org>
+;; Keywords: SASL, NTLM
+;; Version: 1.00
+;; Created: February 2001
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This is a SASL interface layer for NTLM authentication message
+;; generation by ntlm.el
+
+;;; Code:
+
+(require 'sasl)
+(require 'ntlm)
+
+(defconst sasl-ntlm-steps
+ '(ignore ;nothing to do before making
+ sasl-ntlm-request ;authentication request
+ sasl-ntlm-response) ;response to challenge
+ "A list of functions to be called in sequnece for the NTLM
+authentication steps. Ther are called by 'sasl-next-step.")
+
+(defun sasl-ntlm-request (client step)
+ "SASL step function to generate a NTLM authentication request to the server.
+Called from 'sasl-next-step.
+CLIENT is a vector [mechanism user service server sasl-client-properties]
+STEP is a vector [<previous step function> <result of previous step function>]"
+ (let ((user (sasl-client-name client)))
+ (ntlm-build-auth-request user)))
+
+(defun sasl-ntlm-response (client step)
+ "SASL step function to generate a NTLM response against the server
+challenge stored in the 2nd element of STEP. Called from 'sasl-next-step."
+ (let* ((user (sasl-client-name client))
+ (passphrase
+ (sasl-read-passphrase (format "NTLM passphrase for %s: " user)))
+ (challenge (sasl-step-data step)))
+ (ntlm-build-auth-response challenge user
+ (ntlm-get-password-hashes passphrase))))
+
+(put 'sasl-ntlm 'sasl-mechanism
+ (sasl-make-mechanism "NTLM" sasl-ntlm-steps))
+
+(provide 'sasl-ntlm)
+
+;;; arch-tag: 1d9164c1-1df0-418f-b7ab-360157fd05dc
+;;; sasl-ntlm.el ends here
diff --git a/lisp/gnus/sasl.el b/lisp/gnus/sasl.el
new file mode 100644
index 00000000000..d730dddcb20
--- /dev/null
+++ b/lisp/gnus/sasl.el
@@ -0,0 +1,273 @@
+;;; sasl.el --- SASL client framework
+
+;; Copyright (C) 2000 Free Software Foundation, Inc.
+
+;; Author: Daiki Ueno <ueno@unixuser.org>
+;; Keywords: SASL
+
+;; This file is part of FLIM (Faithful Library about Internet Message).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 3, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; This module provides common interface functions to share several
+;; SASL mechanism drivers. The toplevel is designed to be mostly
+;; compatible with [Java-SASL].
+;;
+;; [SASL] J. Myers, "Simple Authentication and Security Layer (SASL)",
+;; RFC 2222, October 1997.
+;;
+;; [Java-SASL] R. Weltman & R. Lee, "The Java SASL Application Program
+;; Interface", draft-weltman-java-sasl-03.txt, March 2000.
+
+;;; Code:
+
+(defvar sasl-mechanisms
+ '("CRAM-MD5" "DIGEST-MD5" "PLAIN" "LOGIN" "ANONYMOUS"
+ "NTLM" "SCRAM-MD5"))
+
+(defvar sasl-mechanism-alist
+ '(("CRAM-MD5" sasl-cram)
+ ("DIGEST-MD5" sasl-digest)
+ ("PLAIN" sasl-plain)
+ ("LOGIN" sasl-login)
+ ("ANONYMOUS" sasl-anonymous)
+ ("NTLM" sasl-ntlm)
+ ("SCRAM-MD5" sasl-scram)))
+
+(defvar sasl-unique-id-function #'sasl-unique-id-function)
+
+(put 'sasl-error 'error-message "SASL error")
+(put 'sasl-error 'error-conditions '(sasl-error error))
+
+(defun sasl-error (datum)
+ (signal 'sasl-error (list datum)))
+
+;;; @ SASL client
+;;;
+
+(defun sasl-make-client (mechanism name service server)
+ "Return a newly allocated SASL client.
+NAME is name of the authorization. SERVICE is name of the service desired.
+SERVER is the fully qualified host name of the server to authenticate to."
+ (vector mechanism name service server (make-symbol "sasl-client-properties")))
+
+(defun sasl-client-mechanism (client)
+ "Return the authentication mechanism driver of CLIENT."
+ (aref client 0))
+
+(defun sasl-client-name (client)
+ "Return the authorization name of CLIENT, a string."
+ (aref client 1))
+
+(defun sasl-client-service (client)
+ "Return the service name of CLIENT, a string."
+ (aref client 2))
+
+(defun sasl-client-server (client)
+ "Return the server name of CLIENT, a string."
+ (aref client 3))
+
+(defun sasl-client-set-properties (client plist)
+ "Destructively set the properties of CLIENT.
+The second argument PLIST is the new property list."
+ (setplist (aref client 4) plist))
+
+(defun sasl-client-set-property (client property value)
+ "Add the given property/value to CLIENT."
+ (put (aref client 4) property value))
+
+(defun sasl-client-property (client property)
+ "Return the value of the PROPERTY of CLIENT."
+ (get (aref client 4) property))
+
+(defun sasl-client-properties (client)
+ "Return the properties of CLIENT."
+ (symbol-plist (aref client 4)))
+
+;;; @ SASL mechanism
+;;;
+
+(defun sasl-make-mechanism (name steps)
+ "Make an authentication mechanism.
+NAME is a IANA registered SASL mechanism name.
+STEPS is list of continuation function."
+ (vector name
+ (mapcar
+ (lambda (step)
+ (let ((symbol (make-symbol (symbol-name step))))
+ (fset symbol (symbol-function step))
+ symbol))
+ steps)))
+
+(defun sasl-mechanism-name (mechanism)
+ "Return name of MECHANISM, a string."
+ (aref mechanism 0))
+
+(defun sasl-mechanism-steps (mechanism)
+ "Return the authentication steps of MECHANISM, a list of functions."
+ (aref mechanism 1))
+
+(defun sasl-find-mechanism (mechanisms)
+ "Retrieve an apropriate mechanism object from MECHANISMS hints."
+ (let* ((sasl-mechanisms sasl-mechanisms)
+ (mechanism
+ (catch 'done
+ (while sasl-mechanisms
+ (if (member (car sasl-mechanisms) mechanisms)
+ (throw 'done (nth 1 (assoc (car sasl-mechanisms)
+ sasl-mechanism-alist))))
+ (setq sasl-mechanisms (cdr sasl-mechanisms))))))
+ (if mechanism
+ (require mechanism))
+ (get mechanism 'sasl-mechanism)))
+
+;;; @ SASL authentication step
+;;;
+
+(defun sasl-step-data (step)
+ "Return the data which STEP holds, a string."
+ (aref step 1))
+
+(defun sasl-step-set-data (step data)
+ "Store DATA string to STEP."
+ (aset step 1 data))
+
+(defun sasl-next-step (client step)
+ "Evaluate the challenge and prepare an appropriate next response.
+The data type of the value and optional 2nd argument STEP is nil or
+opaque authentication step which holds the reference to the next action
+and the current challenge. At the first time STEP should be set to nil."
+ (let* ((steps
+ (sasl-mechanism-steps
+ (sasl-client-mechanism client)))
+ (function
+ (if (vectorp step)
+ (nth 1 (memq (aref step 0) steps))
+ (car steps))))
+ (if function
+ (vector function (funcall function client step)))))
+
+(defvar sasl-read-passphrase nil)
+(defun sasl-read-passphrase (prompt)
+ (if (not sasl-read-passphrase)
+ (if (functionp 'read-passwd)
+ (setq sasl-read-passphrase 'read-passwd)
+ (if (load "passwd" t)
+ (setq sasl-read-passphrase 'read-passwd)
+ (autoload 'ange-ftp-read-passwd "ange-ftp")
+ (setq sasl-read-passphrase 'ange-ftp-read-passwd))))
+ (funcall sasl-read-passphrase prompt))
+
+(defun sasl-unique-id ()
+ "Compute a data string which must be different each time.
+It contain at least 64 bits of entropy."
+ (concat (funcall sasl-unique-id-function)(funcall sasl-unique-id-function)))
+
+(defvar sasl-unique-id-char nil)
+
+;; stolen (and renamed) from message.el
+(defun sasl-unique-id-function ()
+ ;; Don't use microseconds from (current-time), they may be unsupported.
+ ;; Instead we use this randomly inited counter.
+ (setq sasl-unique-id-char
+ (% (1+ (or sasl-unique-id-char (logand (random t) (1- (lsh 1 20)))))
+ ;; (current-time) returns 16-bit ints,
+ ;; and 2^16*25 just fits into 4 digits i base 36.
+ (* 25 25)))
+ (let ((tm (current-time)))
+ (concat
+ (sasl-unique-id-number-base36
+ (+ (car tm)
+ (lsh (% sasl-unique-id-char 25) 16)) 4)
+ (sasl-unique-id-number-base36
+ (+ (nth 1 tm)
+ (lsh (/ sasl-unique-id-char 25) 16)) 4))))
+
+(defun sasl-unique-id-number-base36 (num len)
+ (if (if (< len 0)
+ (<= num 0)
+ (= len 0))
+ ""
+ (concat (sasl-unique-id-number-base36 (/ num 36) (1- len))
+ (char-to-string (aref "zyxwvutsrqponmlkjihgfedcba9876543210"
+ (% num 36))))))
+
+;;; PLAIN (RFC2595 Section 6)
+(defconst sasl-plain-steps
+ '(sasl-plain-response))
+
+(defun sasl-plain-response (client step)
+ (let ((passphrase
+ (sasl-read-passphrase
+ (format "PLAIN passphrase for %s: " (sasl-client-name client))))
+ (authenticator-name
+ (sasl-client-property
+ client 'authenticator-name))
+ (name (sasl-client-name client)))
+ (unwind-protect
+ (if (and authenticator-name
+ (not (string= authenticator-name name)))
+ (concat authenticator-name "\0" name "\0" passphrase)
+ (concat "\0" name "\0" passphrase))
+ (fillarray passphrase 0))))
+
+(put 'sasl-plain 'sasl-mechanism
+ (sasl-make-mechanism "PLAIN" sasl-plain-steps))
+
+(provide 'sasl-plain)
+
+;;; LOGIN (No specification exists)
+(defconst sasl-login-steps
+ '(ignore ;no initial response
+ sasl-login-response-1
+ sasl-login-response-2))
+
+(defun sasl-login-response-1 (client step)
+;;; (unless (string-match "^Username:" (sasl-step-data step))
+;;; (sasl-error (format "Unexpected response: %s" (sasl-step-data step))))
+ (sasl-client-name client))
+
+(defun sasl-login-response-2 (client step)
+;;; (unless (string-match "^Password:" (sasl-step-data step))
+;;; (sasl-error (format "Unexpected response: %s" (sasl-step-data step))))
+ (sasl-read-passphrase
+ (format "LOGIN passphrase for %s: " (sasl-client-name client))))
+
+(put 'sasl-login 'sasl-mechanism
+ (sasl-make-mechanism "LOGIN" sasl-login-steps))
+
+(provide 'sasl-login)
+
+;;; ANONYMOUS (RFC2245)
+(defconst sasl-anonymous-steps
+ '(ignore ;no initial response
+ sasl-anonymous-response))
+
+(defun sasl-anonymous-response (client step)
+ (or (sasl-client-property client 'trace)
+ (sasl-client-name client)))
+
+(put 'sasl-anonymous 'sasl-mechanism
+ (sasl-make-mechanism "ANONYMOUS" sasl-anonymous-steps))
+
+(provide 'sasl-anonymous)
+
+(provide 'sasl)
+
+;;; arch-tag: 8b3326fa-4978-4fda-93e2-cb2c6255f887
+;;; sasl.el ends here
diff --git a/lisp/gnus/score-mode.el b/lisp/gnus/score-mode.el
index 33cdfe55944..c71ef32f22c 100644
--- a/lisp/gnus/score-mode.el
+++ b/lisp/gnus/score-mode.el
@@ -31,6 +31,9 @@
(require 'mm-util) ; for mm-universal-coding-system
(require 'gnus-util) ; for gnus-pp, gnus-run-mode-hooks
+(defvar gnus-score-edit-done-hook nil
+ "*Hook run at the end of closing the score buffer.")
+
(defvar gnus-score-mode-hook nil
"*Hook run in score mode buffers.")
diff --git a/lisp/gnus/sieve-manage.el b/lisp/gnus/sieve-manage.el
index e33e5d87ca6..d8bd965718d 100644
--- a/lisp/gnus/sieve-manage.el
+++ b/lisp/gnus/sieve-manage.el
@@ -27,7 +27,10 @@
;; This library provides an elisp API for the managesieve network
;; protocol.
;;
-;; Currently only the CRAM-MD5 authentication mechanism is supported.
+;; It uses the SASL library for authentication, which means it
+;; supports DIGEST-MD5, CRAM-MD5, SCRAM-MD5, NTLM, PLAIN and LOGIN
+;; methods. STARTTLS is not well tested, but should be easy to get to
+;; work if someone wants.
;;
;; The API should be fairly obvious for anyone familiar with the
;; managesieve protocol, interface functions include:
@@ -69,15 +72,17 @@
;;
;; 2001-10-31 Committed to Oort Gnus.
;; 2002-07-27 Added DELETESCRIPT. Suggested by Ned Ludd.
+;; 2002-08-03 Use SASL library.
;;; Code:
-(require 'rfc2104)
-(or (fboundp 'md5)
- (require 'md5))
+(require 'password)
+(eval-when-compile
+ (require 'sasl)
+ (require 'starttls))
(eval-and-compile
- (autoload 'starttls-open-stream "starttls")
- (autoload 'starttls-negotiate "starttls"))
+ (autoload 'sasl-find-mechanism "sasl")
+ (autoload 'starttls-open-stream "starttls"))
;; User customizable variables:
@@ -123,13 +128,22 @@ server support the stream and OPEN is a function for opening the
stream."
:group 'sieve-manage)
-(defcustom sieve-manage-authenticators '(cram-md5 plain)
+(defcustom sieve-manage-authenticators '(digest-md5
+ cram-md5
+ scram-md5
+ ntlm
+ plain
+ login)
"Priority of authenticators to consider when authenticating to server."
:group 'sieve-manage)
(defcustom sieve-manage-authenticator-alist
'((cram-md5 sieve-manage-cram-md5-p sieve-manage-cram-md5-auth)
- (plain sieve-manage-plain-p sieve-manage-plain-auth))
+ (digest-md5 sieve-manage-digest-md5-p sieve-manage-digest-md5-auth)
+ (scram-md5 sieve-manage-scram-md5-p sieve-manage-scram-md5-auth)
+ (ntlm sieve-manage-ntlm-p sieve-manage-ntlm-auth)
+ (plain sieve-manage-plain-p sieve-manage-plain-auth)
+ (login sieve-manage-login-p sieve-manage-login-auth))
"Definition of authenticators.
\(NAME CHECK AUTHENTICATE)
@@ -183,43 +197,50 @@ Valid states are `closed', `initial', `nonauth', and `auth'.")
(defun sieve-manage-interactive-login (buffer loginfunc)
"Login to server in BUFFER.
LOGINFUNC is passed a username and a password, it should return t if
-it where sucessful authenticating itself to the server, nil otherwise.
+it was successful authenticating itself to the server, nil otherwise.
Returns t if login was successful, nil otherwise."
(with-current-buffer buffer
(make-local-variable 'sieve-manage-username)
(make-local-variable 'sieve-manage-password)
- (let (user passwd ret reason)
- ;; (condition-case ()
- (while (or (not user) (not passwd))
- (setq user (or sieve-manage-username
- (read-from-minibuffer
- (concat "Managesieve username for "
- sieve-manage-server ": ")
- (or user sieve-manage-default-user))))
- (setq passwd (or sieve-manage-password
- (read-passwd
- (concat "Managesieve password for " user "@"
- sieve-manage-server ": "))))
- (when (and user passwd)
- (if (funcall loginfunc user passwd)
- (progn
- (setq ret t
- sieve-manage-username user)
- (if (and (not sieve-manage-password)
- (y-or-n-p "Store password for this session? "))
- (setq sieve-manage-password passwd)))
- (if reason
- (message "Login failed (reason given: %s)..." reason)
- (message "Login failed..."))
- (setq reason nil)
- (setq passwd nil)
- (sit-for 1))))
- ;; (quit (with-current-buffer buffer
- ;; (setq user nil
- ;; passwd nil)))
- ;; (error (with-current-buffer buffer
- ;; (setq user nil
- ;; passwd nil))))
+ (let (user passwd ret reason passwd-key)
+ (condition-case ()
+ (while (or (not user) (not passwd))
+ (setq user (or sieve-manage-username
+ (read-from-minibuffer
+ (concat "Managesieve username for "
+ sieve-manage-server ": ")
+ (or user sieve-manage-default-user)))
+ passwd-key (concat "managesieve:" user "@" sieve-manage-server
+ ":" sieve-manage-port)
+ passwd (or sieve-manage-password
+ (password-read (concat "Managesieve password for "
+ user "@" sieve-manage-server
+ ": ")
+ passwd-key)))
+ (when (y-or-n-p "Store password for this session? ")
+ (password-cache-add passwd-key (copy-sequence passwd)))
+ (when (and user passwd)
+ (if (funcall loginfunc user passwd)
+ (setq ret t
+ sieve-manage-username user)
+ (if reason
+ (message "Login failed (reason given: %s)..." reason)
+ (message "Login failed..."))
+ (password-cache-remove passwd-key)
+ (setq sieve-manage-password nil)
+ (setq passwd nil)
+ (setq reason nil)
+ (sit-for 1))))
+ (quit (with-current-buffer buffer
+ (password-cache-remove passwd-key)
+ (setq user nil
+ passwd nil
+ sieve-manage-password nil)))
+ (error (with-current-buffer buffer
+ (password-cache-remove passwd-key)
+ (setq user nil
+ passwd nil
+ sieve-manage-password nil))))
ret)))
(defun sieve-manage-erase (&optional p buffer)
@@ -304,60 +325,111 @@ Returns t if login was successful, nil otherwise."
;; Authenticators
+(defun sieve-sasl-auth (buffer mech)
+ "Login to server using the SASL MECH method."
+ (message "sieve: Authenticating using %s..." mech)
+ (if (sieve-manage-interactive-login
+ buffer
+ (lambda (user passwd)
+ (let (client step tag data rsp)
+ (setq client (sasl-make-client (sasl-find-mechanism (list mech))
+ user "sieve" sieve-manage-server))
+ (setq sasl-read-passphrase (function (lambda (prompt) passwd)))
+ (setq step (sasl-next-step client nil))
+ (setq tag
+ (sieve-manage-send
+ (concat
+ "AUTHENTICATE \""
+ mech
+ "\""
+ (and (sasl-step-data step)
+ (concat
+ " \""
+ (base64-encode-string
+ (sasl-step-data step)
+ 'no-line-break)
+ "\"")))))
+ (catch 'done
+ (while t
+ (setq rsp nil)
+ (goto-char (point-min))
+ (while (null (or (progn
+ (setq rsp (sieve-manage-is-string))
+ (if (not (and rsp (looking-at
+ sieve-manage-server-eol)))
+ (setq rsp nil)
+ (goto-char (match-end 0))
+ rsp))
+ (setq rsp (sieve-manage-is-okno))))
+ (accept-process-output sieve-manage-process 1)
+ (goto-char (point-min)))
+ (sieve-manage-erase)
+ (when (sieve-manage-ok-p rsp)
+ (when (string-match "^SASL \"\\([^\"]+\\)\"" (cadr rsp))
+ (sasl-step-set-data
+ step (base64-decode-string (match-string 1 (cadr rsp)))))
+ (if (and (setq step (sasl-next-step client step))
+ (setq data (sasl-step-data step)))
+ ;; We got data for server but it's finished
+ (error "Server not ready for SASL data: %s" data)
+ ;; The authentication process is finished.
+ (throw 'done t)))
+ (unless (stringp rsp)
+ (apply 'error "Server aborted SASL authentication: %s %s %s"
+ rsp))
+ (sasl-step-set-data step (base64-decode-string rsp))
+ (setq step (sasl-next-step client step))
+ (sieve-manage-send
+ (if (sasl-step-data step)
+ (concat "\""
+ (base64-encode-string (sasl-step-data step)
+ 'no-line-break)
+ "\"")
+ "")))))))
+ (message "sieve: Authenticating using %s...done" mech)
+ (message "sieve: Authenticating using %s...failed" mech)))
+
+(defun sieve-manage-cram-md5-p (buffer)
+ (sieve-manage-capability "SASL" "CRAM-MD5" buffer))
+
+(defun sieve-manage-cram-md5-auth (buffer)
+ "Login to managesieve server using the CRAM-MD5 SASL method."
+ (sieve-sasl-auth buffer "CRAM-MD5"))
+
+(defun sieve-manage-digest-md5-p (buffer)
+ (sieve-manage-capability "SASL" "DIGEST-MD5" buffer))
+
+(defun sieve-manage-digest-md5-auth (buffer)
+ "Login to managesieve server using the DIGEST-MD5 SASL method."
+ (sieve-sasl-auth buffer "DIGEST-MD5"))
+
+(defun sieve-manage-scram-md5-p (buffer)
+ (sieve-manage-capability "SASL" "SCRAM-MD5" buffer))
+
+(defun sieve-manage-scram-md5-auth (buffer)
+ "Login to managesieve server using the SCRAM-MD5 SASL method."
+ (sieve-sasl-auth buffer "SCRAM-MD5"))
+
+(defun sieve-manage-ntlm-p (buffer)
+ (sieve-manage-capability "SASL" "NTLM" buffer))
+
+(defun sieve-manage-ntlm-auth (buffer)
+ "Login to managesieve server using the NTLM SASL method."
+ (sieve-sasl-auth buffer "NTLM"))
+
(defun sieve-manage-plain-p (buffer)
(sieve-manage-capability "SASL" "PLAIN" buffer))
(defun sieve-manage-plain-auth (buffer)
"Login to managesieve server using the PLAIN SASL method."
- (let* ((done (sieve-manage-interactive-login
- buffer
- (lambda (user passwd)
- (sieve-manage-send (concat "AUTHENTICATE \"PLAIN\" \""
- (base64-encode-string
- (concat (char-to-string 0)
- user
- (char-to-string 0)
- passwd))
- "\""))
- (let ((rsp (sieve-manage-parse-okno)))
- (if (sieve-manage-ok-p rsp)
- t
- (setq reason (cdr-safe rsp))
- nil))))))
- (if done
- (message "sieve: Authenticating using PLAIN...done")
- (message "sieve: Authenticating using PLAIN...failed"))))
+ (sieve-sasl-auth buffer "PLAIN"))
-(defun sieve-manage-cram-md5-p (buffer)
- (sieve-manage-capability "SASL" "CRAM-MD5" buffer))
+(defun sieve-manage-login-p (buffer)
+ (sieve-manage-capability "SASL" "LOGIN" buffer))
-(defun sieve-manage-cram-md5-auth (buffer)
- "Login to managesieve server using the CRAM-MD5 SASL method."
- (message "sieve: Authenticating using CRAM-MD5...")
- (let* ((done (sieve-manage-interactive-login
- buffer
- (lambda (user passwd)
- (sieve-manage-send "AUTHENTICATE \"CRAM-MD5\"")
- (sieve-manage-send
- (concat
- "\""
- (base64-encode-string
- (concat
- user " "
- (rfc2104-hash 'md5 64 16 passwd
- (base64-decode-string
- (prog1
- (sieve-manage-parse-string)
- (sieve-manage-erase))))))
- "\""))
- (let ((rsp (sieve-manage-parse-okno)))
- (if (sieve-manage-ok-p rsp)
- t
- (setq reason (cdr-safe rsp))
- nil))))))
- (if done
- (message "sieve: Authenticating using CRAM-MD5...done")
- (message "sieve: Authenticating using CRAM-MD5...failed"))))
+(defun sieve-manage-login-auth (buffer)
+ "Login to managesieve server using the LOGIN SASL method."
+ (sieve-sasl-auth buffer "LOGIN"))
;; Managesieve API
@@ -372,7 +444,7 @@ Optional variable BUFFER is buffer (buffer, or string naming buffer)
to work in."
(setq buffer (or buffer (format " *sieve* %s:%d" server (or port 2000))))
(with-current-buffer (get-buffer-create buffer)
- (mapcar 'make-local-variable sieve-manage-local-variables)
+ (mapc 'make-local-variable sieve-manage-local-variables)
(sieve-manage-disable-multibyte)
(buffer-disable-undo)
(setq sieve-manage-server (or server sieve-manage-server))
diff --git a/lisp/gnus/sieve-mode.el b/lisp/gnus/sieve-mode.el
index 694cad6e77c..d12045627fb 100644
--- a/lisp/gnus/sieve-mode.el
+++ b/lisp/gnus/sieve-mode.el
@@ -51,7 +51,6 @@
(autoload 'sieve-manage "sieve")
(autoload 'sieve-upload "sieve")
-(autoload 'c-mode "cc-mode")
(require 'easymenu)
(eval-when-compile
(require 'font-lock))
diff --git a/lisp/gnus/sieve.el b/lisp/gnus/sieve.el
index 3605da590de..2d4dfba4ee6 100644
--- a/lisp/gnus/sieve.el
+++ b/lisp/gnus/sieve.el
@@ -145,7 +145,7 @@ require \"fileinto\";
(setq mode-name "SIEVE")
(buffer-disable-undo (current-buffer))
(setq truncate-lines t)
- (easy-menu-add-item nil nil sieve-manage-mode-menu))
+ (easy-menu-add sieve-manage-mode-menu sieve-manage-mode-map))
(put 'sieve-manage-mode 'mode-class 'special)
diff --git a/lisp/gnus/smiley.el b/lisp/gnus/smiley.el
index 2b13ecd7388..b0f194893b5 100644
--- a/lisp/gnus/smiley.el
+++ b/lisp/gnus/smiley.el
@@ -58,24 +58,65 @@
"Turn :-)'s into real images."
:group 'gnus-visual)
-;; Maybe this should go.
-(defcustom smiley-data-directory
- (nnheader-find-etc-directory "images/smilies")
- "Location of the smiley faces files."
+(defvar smiley-data-directory)
+
+(defcustom smiley-style
+ (if (or (and (fboundp 'face-attribute)
+ (>= (face-attribute 'default :height) 160))
+ (and (fboundp 'face-height)
+ (>= (face-height 'default) 14)))
+ 'medium
+ 'low-color)
+ "Smiley style."
+ :type '(choice (const :tag "small, 3 colors" low-color) ;; 13x14
+ (const :tag "medium, ~10 colors" medium) ;; 16x16
+ (const :tag "dull, grayscale" grayscale));; 14x14
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (setq smiley-data-directory (smiley-directory))
+ (smiley-update-cache))
+ :initialize 'custom-initialize-default
+ :version "23.0" ;; No Gnus
+ :group 'smiley)
+
+;; For compatibility, honor the variable `smiley-data-directory' if the user
+;; has set it.
+
+(defun smiley-directory (&optional style)
+ "Return a the location of the smiley faces files.
+STYLE specifies which style to use, see `smiley-style'. If STYLE
+is nil, use `smiley-style'."
+ (unless style (setq style smiley-style))
+ (nnheader-find-etc-directory
+ (concat "images/smilies"
+ (cond ((eq smiley-style 'low-color) "")
+ ((eq smiley-style 'medium) "/medium")
+ ((eq smiley-style 'grayscale) "/grayscale")))))
+
+(defcustom smiley-data-directory (smiley-directory)
+ "*Location of the smiley faces files."
+ :set (lambda (symbol value)
+ (set-default symbol value)
+ (smiley-update-cache))
+ :initialize 'custom-initialize-default
:type 'directory
:group 'smiley)
;; The XEmacs version has a baroque, if not rococo, set of these.
(defcustom smiley-regexp-alist
- '(("\\(:-?)\\)\\W" 1 "smile")
- ("\\(;-?)\\)\\W" 1 "blink")
+ '(("\\(;-?)\\)\\W" 1 "blink")
("\\(:-]\\)\\W" 1 "forced")
("\\(8-)\\)\\W" 1 "braindamaged")
("\\(:-|\\)\\W" 1 "indifferent")
("\\(:-[/\\]\\)\\W" 1 "wry")
("\\(:-(\\)\\W" 1 "sad")
("\\(X-)\\)\\W" 1 "dead")
- ("\\(:-{\\)\\W" 1 "frown"))
+ ("\\(:-{\\)\\W" 1 "frown")
+ ("\\(>:-)\\)\\W" 1 "evil")
+ ("\\(;-(\\)\\W" 1 "cry")
+ ("\\(:-D\\)\\W" 1 "grin")
+ ;; "smile" must be come after "evil"
+ ("\\(\\^?:-?)\\)\\W" 1 "smile"))
"*A list of regexps to map smilies to images.
The elements are (REGEXP MATCH IMAGE), where MATCH is the submatch in
regexp to replace with IMAGE. IMAGE is the name of an image file in
diff --git a/lisp/gnus/smime-ldap.el b/lisp/gnus/smime-ldap.el
new file mode 100644
index 00000000000..882f9f80c6f
--- /dev/null
+++ b/lisp/gnus/smime-ldap.el
@@ -0,0 +1,206 @@
+;;; smime-ldap.el --- client interface to LDAP for Emacs
+
+;; Copyright (C) 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
+
+;; Author: Oscar Figueiredo <Oscar.Figueiredo@di.epfl.ch>
+;; Maintainer: Arne J,Ax(Brgensen <arne@arnested.dk>
+;; Created: February 2005
+;; Keywords: comm
+
+;; 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 3, 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:
+
+;; This file has a slightly changed implementation of Emacs 21.3's
+;; ldap-search and ldap-search-internal from ldap.el. The changes are
+;; made to achieve compatibility with OpenLDAP v2 and to make it
+;; possible to retrieve LDAP attributes that are tagged ie ";binary".
+
+;; The file also adds a compatibility layer for Emacs and XEmacs.
+
+;;; Code:
+
+(require 'ldap)
+
+(defun smime-ldap-search (filter &optional host attributes attrsonly withdn)
+ "Perform an LDAP search.
+FILTER is the search filter in RFC1558 syntax.
+HOST is the LDAP host on which to perform the search.
+ATTRIBUTES are the specific attributes to retrieve, nil means
+retrieve all.
+ATTRSONLY, if non-nil, retrieves the attributes only, without
+the associated values.
+If WITHDN is non-nil, each entry in the result will be prepended with
+its distinguished name WITHDN.
+Additional search parameters can be specified through
+`ldap-host-parameters-alist', which see."
+ (interactive "sFilter:")
+ ;; for XEmacs
+ (if (fboundp 'ldap-search-entries)
+ (ldap-search-entries filter host attributes attrsonly)
+ ;; for Emacs 22
+ (if (>= emacs-major-version 22)
+ (cdr (ldap-search filter host attributes attrsonly))
+ ;; for Emacs 21.x
+ (or host
+ (setq host ldap-default-host)
+ (error "No LDAP host specified"))
+ (let ((host-plist (cdr (assoc host ldap-host-parameters-alist)))
+ result)
+ (setq result (smime-ldap-search-internal
+ (append host-plist
+ (list 'host host
+ 'filter filter
+ 'attributes attributes
+ 'attrsonly attrsonly
+ 'withdn withdn))))
+ (cdr (if ldap-ignore-attribute-codings
+ result
+ (mapcar (function
+ (lambda (record)
+ (mapcar 'ldap-decode-attribute record)))
+ result)))))))
+
+(defun smime-ldap-search-internal (search-plist)
+ "Perform a search on a LDAP server.
+SEARCH-PLIST is a property list describing the search request.
+Valid keys in that list are:
+`host' is a string naming one or more (blank-separated) LDAP servers to
+to try to connect to. Each host name may optionally be of the form HOST:PORT.
+`filter' is a filter string for the search as described in RFC 1558.
+`attributes' is a list of strings indicating which attributes to retrieve
+for each matching entry. If nil, return all available attributes.
+`attrsonly', if non-nil, indicates that only attributes are retrieved,
+not their associated values.
+`base' is the base for the search as described in RFC 1779.
+`scope' is one of the three symbols `sub', `base' or `one'.
+`binddn' is the distinguished name of the user to bind as (in RFC 1779 syntax).
+`passwd' is the password to use for simple authentication.
+`deref' is one of the symbols `never', `always', `search' or `find'.
+`timelimit' is the timeout limit for the connection in seconds.
+`sizelimit' is the maximum number of matches to return.
+`withdn' if non-nil each entry in the result will be prepended with
+its distinguished name DN.
+The function returns a list of matching entries. Each entry is itself
+an alist of attribute/value pairs."
+ (let ((buf (get-buffer-create " *ldap-search*"))
+ (bufval (get-buffer-create " *ldap-value*"))
+ (host (or (plist-get search-plist 'host)
+ ldap-default-host))
+ (filter (plist-get search-plist 'filter))
+ (attributes (plist-get search-plist 'attributes))
+ (attrsonly (plist-get search-plist 'attrsonly))
+ (base (or (plist-get search-plist 'base)
+ ldap-default-base))
+ (scope (plist-get search-plist 'scope))
+ (binddn (plist-get search-plist 'binddn))
+ (passwd (plist-get search-plist 'passwd))
+ (deref (plist-get search-plist 'deref))
+ (timelimit (plist-get search-plist 'timelimit))
+ (sizelimit (plist-get search-plist 'sizelimit))
+ (withdn (plist-get search-plist 'withdn))
+ (numres 0)
+ arglist dn name value record result)
+ (if (or (null filter)
+ (equal "" filter))
+ (error "No search filter"))
+ (setq filter (cons filter attributes))
+ (save-excursion
+ (set-buffer buf)
+ (erase-buffer)
+ (if (and host
+ (not (equal "" host)))
+ (setq arglist (nconc arglist (list (format "-h%s" host)))))
+ (if (and attrsonly
+ (not (equal "" attrsonly)))
+ (setq arglist (nconc arglist (list "-A"))))
+ (if (and base
+ (not (equal "" base)))
+ (setq arglist (nconc arglist (list (format "-b%s" base)))))
+ (if (and scope
+ (not (equal "" scope)))
+ (setq arglist (nconc arglist (list (format "-s%s" scope)))))
+ (if (and binddn
+ (not (equal "" binddn)))
+ (setq arglist (nconc arglist (list (format "-D%s" binddn)))))
+ (if (and passwd
+ (not (equal "" passwd)))
+ (setq arglist (nconc arglist (list (format "-w%s" passwd)))))
+ (if (and deref
+ (not (equal "" deref)))
+ (setq arglist (nconc arglist (list (format "-a%s" deref)))))
+ (if (and timelimit
+ (not (equal "" timelimit)))
+ (setq arglist (nconc arglist (list (format "-l%s" timelimit)))))
+ (if (and sizelimit
+ (not (equal "" sizelimit)))
+ (setq arglist (nconc arglist (list (format "-z%s" sizelimit)))))
+ (eval `(call-process ldap-ldapsearch-prog
+ nil
+ buf
+ nil
+ ,@arglist
+ "-tt" ; Write values to temp files
+ "-x"
+ "-LL"
+ ; ,@ldap-ldapsearch-args
+ ,@filter))
+ (insert "\n")
+ (goto-char (point-min))
+
+ (while (re-search-forward "[\t\n\f]+ " nil t)
+ (replace-match "" nil nil))
+ (goto-char (point-min))
+
+ (if (looking-at "usage")
+ (error "Incorrect ldapsearch invocation")
+ (message "Parsing results... ")
+ (while (progn
+ (skip-chars-forward " \t\n")
+ (not (eobp)))
+ (setq dn (buffer-substring (point) (save-excursion
+ (end-of-line)
+ (point))))
+ (forward-line 1)
+ (while (looking-at (concat "^\\(\\w*\\)\\(;\\w*\\)?[=:\t ]+"
+ "\\(<[\t ]*file://\\)?\\(.*\\)$"))
+ (setq name (match-string 1)
+ value (match-string 4))
+ (save-excursion
+ (set-buffer bufval)
+ (erase-buffer)
+ (insert-file-contents-literally value)
+ (delete-file value)
+ (setq value (buffer-substring (point-min) (point-max))))
+ (setq record (cons (list name value)
+ record))
+ (forward-line 1))
+ (setq result (cons (if withdn
+ (cons dn (nreverse record))
+ (nreverse record)) result))
+ (setq record nil)
+ (skip-chars-forward " \t\n")
+ (message "Parsing results... %d" numres)
+ (1+ numres))
+ (message "Parsing results... done")
+ (nreverse result)))))
+
+(provide 'smime-ldap)
+
+;; arch-tag: 87e6bc44-21fc-4e9b-a89b-f55f031f78f8
+;;; smime-ldap.el ends here
diff --git a/lisp/gnus/smime.el b/lisp/gnus/smime.el
index 62d1f27b4b5..592500d5dec 100644
--- a/lisp/gnus/smime.el
+++ b/lisp/gnus/smime.el
@@ -28,7 +28,7 @@
;; This library perform S/MIME operations from within Emacs.
;;
;; Functions for fetching certificates from public repositories are
-;; provided, currently only from DNS. LDAP support (via EUDC) is planned.
+;; provided, currently from DNS and LDAP.
;;
;; It uses OpenSSL (tested with version 0.9.5a and 0.9.6) for signing,
;; encryption and decryption.
@@ -117,12 +117,28 @@
;; 2000-06-05 initial version, committed to Gnus CVS contrib/
;; 2000-10-28 retrieve certificates via DNS CERT RRs
;; 2001-10-14 posted to gnu.emacs.sources
+;; 2005-02-13 retrieve certificates via LDAP
;;; Code:
(require 'dig)
+(require 'smime-ldap)
+(require 'password)
(eval-when-compile (require 'cl))
+(eval-and-compile
+ (cond
+ ((fboundp 'replace-in-string)
+ (defalias 'smime-replace-in-string 'replace-in-string))
+ ((fboundp 'replace-regexp-in-string)
+ (defun smime-replace-in-string (string regexp newtext &optional literal)
+ "Replace all matches for REGEXP with NEWTEXT in STRING.
+If LITERAL is non-nil, insert NEWTEXT literally. Return a new
+string containing the replacements.
+
+This is a compatibility function for different Emacsen."
+ (replace-regexp-in-string regexp newtext string nil literal)))))
+
(defgroup smime nil
"S/MIME configuration."
:group 'mime)
@@ -218,6 +234,14 @@ If nil, use system defaults."
string)
:group 'smime)
+(defcustom smime-ldap-host-list nil
+ "A list of LDAP hosts with S/MIME user certificates.
+If needed search base, binddn, passwd, etc. for the LDAP host
+must be set in `ldap-host-parameters-alist'."
+ :type '(repeat (string :tag "Host name"))
+ :version "23.0" ;; No Gnus
+ :group 'smime)
+
(defvar smime-details-buffer "*OpenSSL output*")
;; Use mm-util?
@@ -234,11 +258,13 @@ If nil, use system defaults."
;; Password dialog function
-(defun smime-ask-passphrase ()
- "Asks the passphrase to unlock the secret key."
+(defun smime-ask-passphrase (&optional cache-key)
+ "Asks the passphrase to unlock the secret key.
+If `cache-key' and `password-cache' is non-nil then cache the
+password under `cache-key'."
(let ((passphrase
- (read-passwd
- "Passphrase for secret key (RET for no passphrase): ")))
+ (password-read-and-add
+ "Passphrase for secret key (RET for no passphrase): " cache-key)))
(if (string= passphrase "")
nil
passphrase)))
@@ -270,11 +296,11 @@ certificates to include in its caar. If no additional certificates is
included, KEYFILE may be the file containing the PEM encoded private
key and certificate itself."
(smime-new-details-buffer)
- (let ((keyfile (or (car-safe keyfile) keyfile))
- (certfiles (and (cdr-safe keyfile) (cadr keyfile)))
- (buffer (generate-new-buffer (generate-new-buffer-name " *smime*")))
- (passphrase (smime-ask-passphrase))
- (tmpfile (smime-make-temp-file "smime")))
+ (let* ((certfiles (and (cdr-safe keyfile) (cadr keyfile)))
+ (keyfile (or (car-safe keyfile) keyfile))
+ (buffer (generate-new-buffer (generate-new-buffer-name " *smime*")))
+ (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
+ (tmpfile (smime-make-temp-file "smime")))
(if passphrase
(setenv "GNUS_SMIME_PASSPHRASE" passphrase))
(prog1
@@ -398,8 +424,7 @@ Any details (stdout and stderr) are left in the buffer specified by
(insert-buffer-substring smime-details-buffer)
nil))
-(eval-when-compile
- (defvar from))
+(defvar from)
(defun smime-decrypt-region (b e keyfile)
"Decrypt S/MIME message in region between B and E with key in KEYFILE.
@@ -408,7 +433,7 @@ Any details (stderr on success, stdout and stderr on error) are left
in the buffer specified by `smime-details-buffer'."
(smime-new-details-buffer)
(let ((buffer (generate-new-buffer (generate-new-buffer-name " *smime*")))
- CAs (passphrase (smime-ask-passphrase))
+ CAs (passphrase (smime-ask-passphrase (expand-file-name keyfile)))
(tmpfile (smime-make-temp-file "smime")))
(if passphrase
(setenv "GNUS_SMIME_PASSPHRASE" passphrase))
@@ -521,20 +546,13 @@ A string or a list of strings is returned."
(caddr curkey)
(smime-get-certfiles keyfile otherkeys)))))
-;; Use mm-util?
-(eval-and-compile
- (defalias 'smime-point-at-eol
- (if (fboundp 'point-at-eol)
- 'point-at-eol
- 'line-end-position)))
-
(defun smime-buffer-as-string-region (b e)
"Return each line in region between B and E as a list of strings."
(save-excursion
(goto-char b)
(let (res)
(while (< (point) e)
- (let ((str (buffer-substring (point) (smime-point-at-eol))))
+ (let ((str (buffer-substring (point) (point-at-eol))))
(unless (string= "" str)
(push str res)))
(forward-line))
@@ -548,6 +566,7 @@ A string or a list of strings is returned."
mailaddr))
(defun smime-cert-by-dns (mail)
+ "Find certificate via DNS for address MAIL."
(let* ((dig-dns-server smime-dns-server)
(digbuf (dig-invoke (smime-mail-to-domain mail) "cert" nil nil "+vc"))
(retbuf (generate-new-buffer (format "*certificate for %s*" mail)))
@@ -568,6 +587,50 @@ A string or a list of strings is returned."
(kill-buffer digbuf)
retbuf))
+(defun smime-cert-by-ldap-1 (mail host)
+ "Get cetificate for MAIL from the ldap server at HOST."
+ (let ((ldapresult (smime-ldap-search (concat "mail=" mail)
+ host '("userCertificate") nil))
+ (retbuf (generate-new-buffer (format "*certificate for %s*" mail)))
+ cert)
+ (if (and (>= (length ldapresult) 1)
+ (> (length (cadaar ldapresult)) 0))
+ (with-current-buffer retbuf
+ ;; Certificates on LDAP servers _should_ be in DER format,
+ ;; but there are some servers out there that distributes the
+ ;; certificates in PEM format (with or without
+ ;; header/footer) so we try to handle them anyway.
+ (if (or (string= (substring (cadaar ldapresult) 0 27)
+ "-----BEGIN CERTIFICATE-----")
+ (string= (substring (cadaar ldapresult) 0 3)
+ "MII"))
+ (setq cert
+ (smime-replace-in-string
+ (cadaar ldapresult)
+ (concat "\\(\n\\|\r\\|-----BEGIN CERTIFICATE-----\\|"
+ "-----END CERTIFICATE-----\\)")
+ "" t))
+ (setq cert (base64-encode-string (cadaar ldapresult) t)))
+ (insert "-----BEGIN CERTIFICATE-----\n")
+ (let ((i 0) (len (length cert)))
+ (while (> (- len 64) i)
+ (insert (substring cert i (+ i 64)) "\n")
+ (setq i (+ i 64)))
+ (insert (substring cert i len) "\n"))
+ (insert "-----END CERTIFICATE-----\n"))
+ (kill-buffer retbuf)
+ (setq retbuf nil))
+ retbuf))
+
+(defun smime-cert-by-ldap (mail)
+ "Find certificate via LDAP for address MAIL."
+ (if smime-ldap-host-list
+ (catch 'certbuf
+ (dolist (host smime-ldap-host-list)
+ (let ((retbuf (smime-cert-by-ldap-1 mail host)))
+ (when retbuf
+ (throw 'certbuf retbuf)))))))
+
;; User interface.
(defvar smime-buffer "*SMIME*")
diff --git a/lisp/gnus/spam-report.el b/lisp/gnus/spam-report.el
index ce891a11d49..51ad9b8649e 100644
--- a/lisp/gnus/spam-report.el
+++ b/lisp/gnus/spam-report.el
@@ -2,8 +2,8 @@
;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-;; Author: Teodor Zlatanov <tzz@lifelogs.com>
-;; Keywords: network
+;; Author: Ted Zlatanov <tzz@lifelogs.com>
+;; Keywords: network, spam, mail, gmane, report
;; This file is part of GNU Emacs.
@@ -80,26 +80,92 @@ The function must accept the arguments `host' and `report'."
:type 'file
:group 'spam-report)
+(defcustom spam-report-resend-to nil
+ "Email address that spam articles are resent to when reporting.
+If not set, the user will be prompted to enter a value which will be
+saved for future use."
+ :type 'string
+ :group 'spam-report)
+
(defvar spam-report-url-ping-temp-agent-function nil
"Internal variable for `spam-report-agentize' and `spam-report-deagentize'.
This variable will store the value of `spam-report-url-ping-function' from
before `spam-report-agentize' was run, so that `spam-report-deagentize' can
undo that change.")
-(defun spam-report-gmane (&rest articles)
- "Report an article as spam through Gmane"
+(defun spam-report-resend (articles &optional ham)
+ "Report an article as spam by resending via email.
+Reports is as ham when HAM is set."
+ (dolist (article articles)
+ (gnus-message 6
+ "Reporting %s article %d to <%s>..."
+ (if ham "ham" "spam")
+ article spam-report-resend-to)
+ (unless spam-report-resend-to
+ (customize-set-variable
+ spam-report-resend-to
+ (read-from-minibuffer "email address to resend SPAM/HAM to? ")))
+ ;; This is ganked from the `gnus-summary-resend-message' function.
+ ;; It involves rendering the SPAM, which is undesirable, but there does
+ ;; not seem to be a nicer way to achieve this.
+ ;; select this particular article
+ (gnus-summary-select-article nil nil nil article)
+ ;; resend it to the destination address
+ (save-excursion
+ (set-buffer gnus-original-article-buffer)
+ (message-resend spam-report-resend-to))))
+
+(defun spam-report-resend-ham (articles)
+ "Report an article as ham by resending via email."
+ (spam-report-resend articles t))
+
+(defun spam-report-gmane-ham (&rest articles)
+ "Report ARTICLES as ham (unregister) through Gmane."
+ (interactive (gnus-summary-work-articles current-prefix-arg))
+ (dolist (article articles)
+ (spam-report-gmane-internal t article)))
+
+(defun spam-report-gmane-spam (&rest articles)
+ "Report ARTICLES as spam through Gmane."
+ (interactive (gnus-summary-work-articles current-prefix-arg))
(dolist (article articles)
- (when (and gnus-newsgroup-name
- (or (null spam-report-gmane-regex)
- (string-match spam-report-gmane-regex gnus-newsgroup-name)))
- (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article)
- (if spam-report-gmane-use-article-number
- (spam-report-url-ping
- "spam.gmane.org"
- (format "/%s:%d"
- (gnus-group-real-name gnus-newsgroup-name)
- article))
+ (spam-report-gmane-internal nil article)))
+
+;; `spam-report-gmane' was an interactive entry point, so we should provide an
+;; alias.
+(defalias 'spam-report-gmane 'spam-report-gmane-spam)
+
+(defun spam-report-gmane-internal (unspam article)
+ "Report ARTICLE as spam or not-spam through Gmane, depending on UNSPAM."
+ (when (and gnus-newsgroup-name
+ (or (null spam-report-gmane-regex)
+ (string-match spam-report-gmane-regex gnus-newsgroup-name)))
+ (let ((rpt-host (if unspam "unspam.gmane.org" "spam.gmane.org")))
+ (gnus-message 6 "Reporting article %d to %s..." article rpt-host)
+ (cond
+ ;; Special-case nnweb groups -- these have the URL to use in
+ ;; the Xref headers.
+ ((eq (car (gnus-find-method-for-group gnus-newsgroup-name)) 'nnweb)
+ (spam-report-url-ping
+ rpt-host
+ (concat
+ "/"
+ (gnus-replace-in-string
+ (gnus-replace-in-string
+ (gnus-replace-in-string
+ (mail-header-xref (gnus-summary-article-header article))
+ "/raw" ":silent")
+ "^.*article.gmane.org/" "")
+ "/" ":"))))
+ (spam-report-gmane-use-article-number
+ (spam-report-url-ping
+ rpt-host
+ (format "/%s:%d"
+ (gnus-group-real-name gnus-newsgroup-name)
+ article)))
+ (t
(with-current-buffer nntp-server-buffer
+ (erase-buffer)
(gnus-request-head article gnus-newsgroup-name)
(let ((case-fold-search t)
field host report url)
@@ -111,25 +177,33 @@ undo that change.")
;; There might be more than one Archived-At header so we need to
;; find (and transform) the one related to Gmane.
(setq field (or (gnus-fetch-field "X-Report-Spam")
+ (gnus-fetch-field "X-Report-Unspam")
(gnus-fetch-field "Archived-At")))
- (setq host (progn
- (string-match
- (concat "http://\\([a-z]+\\.gmane\\.org\\)"
- "\\(/[^:/]+[:/][0-9]+\\)")
- field)
- (match-string 1 field)))
- (setq report (match-string 2 field))
- (when (string-equal "permalink.gmane.org" host)
- (setq host "spam.gmane.org")
- (setq report (gnus-replace-in-string
- report "/\\([0-9]+\\)$" ":\\1")))
- (setq url (format "http://%s%s" host report))
+ (if (not (stringp field))
+ (if (and (setq field (gnus-fetch-field "Xref"))
+ (string-match "[^ ]+ +\\([^ ]+\\)" field))
+ (setq report (concat "/" (match-string 1 field))
+ host rpt-host))
+ (setq host
+ (progn
+ (string-match
+ (concat "http://\\([a-z]+\\.gmane\\.org\\)"
+ "\\(/[^:/]+[:/][0-9]+\\)")
+ field)
+ (match-string 1 field)))
+ (setq report (match-string 2 field)))
+ (when host
+ (when (string-equal "permalink.gmane.org" host)
+ (setq host rpt-host)
+ (setq report (gnus-replace-in-string
+ report "/\\([0-9]+\\)$" ":\\1")))
+ (setq url (format "http://%s%s" host report)))
(if (not (and host report url))
(gnus-message
3 "Could not find a spam report header in article %d..."
article)
- (gnus-message 7 "Reporting spam through URL %s..." url)
- (spam-report-url-ping host report))))))))
+ (gnus-message 7 "Reporting article through URL %s..." url)
+ (spam-report-url-ping host report)))))))))
(defun spam-report-url-ping (host report)
"Ping a host through HTTP, addressing a specific GET resource using
@@ -139,6 +213,24 @@ the function specified by `spam-report-url-ping-function'."
;; report: "/gmane.some.group:123456"
(funcall spam-report-url-ping-function host report))
+(defcustom spam-report-user-mail-address
+ (and (stringp user-mail-address)
+ (gnus-replace-in-string user-mail-address "@" "<at>"))
+ "Mail address of this user used for spam reports to Gmane.
+This is initialized based on `user-mail-address'."
+ :type '(choice string
+ (const :tag "Don't expose address" nil))
+ :version "23.0" ;; No Gnus
+ :group 'spam-report)
+
+(defvar spam-report-user-agent
+ (if spam-report-user-mail-address
+ (format "%s (%s) %s" "spam-report.el"
+ spam-report-user-mail-address
+ (gnus-extended-version))
+ (format "%s %s" "spam-report.el"
+ (gnus-extended-version))))
+
(defun spam-report-url-ping-plain (host report)
"Ping a host through HTTP, addressing a specific GET resource."
(let ((tcp-connection))
@@ -153,8 +245,12 @@ the function specified by `spam-report-url-ping-function'."
(set-marker (process-mark tcp-connection) (point-min))
(process-send-string
tcp-connection
- (format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost: %s\n\n"
- report (gnus-extended-version) host)))))
+ (format "GET %s HTTP/1.1\nUser-Agent: %s\nHost: %s\n\n"
+ report spam-report-user-agent host))
+ ;; Wait until we get something so we don't DOS the host.
+ (while (and (memq (process-status tcp-connection) '(open run))
+ (zerop (buffer-size)))
+ (accept-process-output tcp-connection)))))
;;;###autoload
(defun spam-report-process-queue (&optional file keep)
@@ -183,7 +279,7 @@ symbol `ask', query before flushing the queue file."
(goto-char (point-min))
(while (and (not (eobp))
(re-search-forward
- "http://\\([^/]+\\)\\(/.*\\) *$" (gnus-point-at-eol) t))
+ "http://\\([^/]+\\)\\(/.*\\) *$" (point-at-eol) t))
(funcall spam-report-url-ping-function (match-string 1) (match-string 2))
(forward-line 1))
(if (or (eq keep nil)
diff --git a/lisp/gnus/spam-stat.el b/lisp/gnus/spam-stat.el
index 4a13548fcab..5b57f376cf8 100644
--- a/lisp/gnus/spam-stat.el
+++ b/lisp/gnus/spam-stat.el
@@ -122,6 +122,7 @@
;;; Code:
+(require 'mail-parse)
(defvar gnus-original-article-buffer)
@@ -163,17 +164,53 @@ This variable says how many characters this will be."
:group 'spam-stat)
(defcustom spam-stat-split-fancy-spam-group "mail.spam"
- "Name of the group where spam should be stored, if
-`spam-stat-split-fancy' is used in fancy splitting rules. Has no
-effect when spam-stat is invoked through spam.el."
+ "Name of the group where spam should be stored.
+If `spam-stat-split-fancy' is used in fancy splitting rules. Has
+no effect when spam-stat is invoked through spam.el."
:type 'string
:group 'spam-stat)
-(defcustom spam-stat-split-fancy-spam-threshhold 0.9
- "Spam score threshhold in spam-stat-split-fancy."
+(defcustom spam-stat-split-fancy-spam-threshold 0.9
+ "Spam score threshold in spam-stat-split-fancy."
:type 'number
:group 'spam-stat)
+(defcustom spam-stat-washing-hook nil
+ "Hook applied to each message before analysis."
+ :type 'hook
+ :group 'spam-stat)
+
+(defcustom spam-stat-score-buffer-user-functions nil
+ "List of additional scoring functions.
+Called one by one on the buffer.
+
+If all of these functions return non-nil answers, these numerical
+answers are added to the computed spam stat score on the buffer. If
+you defun such functions, make sure they don't return the buffer in a
+narrowed state or such: use, for example, `save-excursion'. Each of
+your functions is also passed the initial spam-stat score which might
+aid in your scoring.
+
+Also be careful when defining such functions. If they take a long
+time, they will slow down your mail splitting. Thus, if the buffer is
+large, don't forget to use smaller regions, by wrapping your work in,
+say, `with-spam-stat-max-buffer-size'."
+ :type '(repeat sexp)
+ :group 'spam-stat)
+
+(defcustom spam-stat-process-directory-age 90
+ "Max. age of files to be processed in directory, in days.
+When using `spam-stat-process-spam-directory' or
+`spam-stat-process-non-spam-directory', only files that have
+been touched in this many days will be considered. Without
+this filter, re-training spam-stat with several thousand messages
+will start to take a very long time."
+ :type 'number
+ :group 'spam-stat)
+
+(defvar spam-stat-last-saved-at nil
+ "Time stamp of last change of spam-stat-file on this run")
+
(defvar spam-stat-syntax-table
(let ((table (copy-syntax-table text-mode-syntax-table)))
(modify-syntax-entry ?- "w" table)
@@ -196,52 +233,24 @@ This is set by hooking into Gnus.")
(defvar spam-stat-buffer-name " *spam stat buffer*"
"Name of the `spam-stat-buffer'.")
-;; Functions missing in Emacs 20
-
-(when (memq nil (mapcar 'fboundp
- '(gethash hash-table-count make-hash-table
- mapc puthash)))
- (require 'cl)
- (unless (fboundp 'puthash)
- ;; alias puthash is missing from Emacs 20 cl-extra.el
- (defalias 'puthash 'cl-puthash)))
-
-(eval-when-compile
- (unless (fboundp 'with-syntax-table)
- ;; Imported from Emacs 21.2
- (defmacro with-syntax-table (table &rest body) "\
-Evaluate BODY with syntax table of current buffer set to a copy of TABLE.
-The syntax table of the current buffer is saved, BODY is evaluated, and the
-saved table is restored, even in case of an abnormal exit.
-Value is what BODY returns."
- (let ((old-table (make-symbol "table"))
- (old-buffer (make-symbol "buffer")))
- `(let ((,old-table (syntax-table))
- (,old-buffer (current-buffer)))
- (unwind-protect
- (progn
- (set-syntax-table (copy-syntax-table ,table))
- ,@body)
- (save-current-buffer
- (set-buffer ,old-buffer)
- (set-syntax-table ,old-table))))))))
+(defvar spam-stat-coding-system
+ (if (mm-coding-system-p 'emacs-mule) 'emacs-mule 'raw-text)
+ "Coding system used for `spam-stat-file'.")
;; Hooking into Gnus
(defun spam-stat-store-current-buffer ()
"Store a copy of the current buffer in `spam-stat-buffer'."
- (save-excursion
- (let ((str (buffer-string)))
- (set-buffer (get-buffer-create spam-stat-buffer-name))
+ (let ((buf (current-buffer)))
+ (with-current-buffer (get-buffer-create spam-stat-buffer-name)
(erase-buffer)
- (insert str)
+ (insert-buffer-substring buf)
(setq spam-stat-buffer (current-buffer)))))
(defun spam-stat-store-gnus-article-buffer ()
"Store a copy of the current article in `spam-stat-buffer'.
This uses `gnus-article-buffer'."
- (save-excursion
- (set-buffer gnus-original-article-buffer)
+ (with-current-buffer gnus-original-article-buffer
(spam-stat-store-current-buffer)))
;; Data -- not using defstruct in order to save space and time
@@ -259,6 +268,9 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
(defvar spam-stat-nbad 0
"The number of bad mails in the dictionary.")
+(defvar spam-stat-error-holder nil
+ "A holder for condition-case errors while scoring buffers.")
+
(defsubst spam-stat-good (entry)
"Return the number of times this word belongs to good mails."
(aref entry 0))
@@ -313,7 +325,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
;; Parsing
(defmacro with-spam-stat-max-buffer-size (&rest body)
- "Narrows the buffer down to the first 4k characters, then evaluates BODY."
+ "Narrow the buffer down to the first 4k characters, then evaluate BODY."
`(save-restriction
(when (> (- (point-max)
(point-min))
@@ -324,6 +336,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
(defun spam-stat-buffer-words ()
"Return a hash table of words and number of occurrences in the buffer."
+ (run-hooks 'spam-stat-washing-hook)
(with-spam-stat-max-buffer-size
(with-syntax-table spam-stat-syntax-table
(goto-char (point-min))
@@ -372,7 +385,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
(lambda (word count)
(let ((entry (gethash word spam-stat)))
(if (not entry)
- (error "This buffer has unknown words in it")
+ (gnus-message 8 "This buffer has unknown words in it")
(spam-stat-set-good entry (- (spam-stat-good entry) count))
(spam-stat-set-bad entry (+ (spam-stat-bad entry) count))
(spam-stat-set-score entry (spam-stat-compute-score entry))
@@ -388,7 +401,7 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
(lambda (word count)
(let ((entry (gethash word spam-stat)))
(if (not entry)
- (error "This buffer has unknown words in it")
+ (gnus-message 8 "This buffer has unknown words in it")
(spam-stat-set-good entry (+ (spam-stat-good entry) count))
(spam-stat-set-bad entry (- (spam-stat-bad entry) count))
(spam-stat-set-score entry (spam-stat-compute-score entry))
@@ -403,28 +416,38 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good',
With a prefix argument save unconditionally."
(interactive "P")
(when (or force spam-stat-dirty)
- (with-temp-buffer
- (let ((standard-output (current-buffer))
- (font-lock-maximum-size 0))
- (insert "(setq spam-stat-ngood "
- (number-to-string spam-stat-ngood)
- " spam-stat-nbad "
- (number-to-string spam-stat-nbad)
- " spam-stat (spam-stat-to-hash-table '(")
- (maphash (lambda (word entry)
- (prin1 (list word
- (spam-stat-good entry)
- (spam-stat-bad entry))))
- spam-stat)
- (insert ")))")
- (write-file spam-stat-file)))
- (setq spam-stat-dirty nil)))
+ (let ((coding-system-for-write spam-stat-coding-system))
+ (with-temp-file spam-stat-file
+ (let ((standard-output (current-buffer))
+ (font-lock-maximum-size 0))
+ (insert (format ";-*- coding: %s; -*-\n" spam-stat-coding-system))
+ (insert (format "(setq spam-stat-ngood %d spam-stat-nbad %d
+spam-stat (spam-stat-to-hash-table '(" spam-stat-ngood spam-stat-nbad))
+ (maphash (lambda (word entry)
+ (prin1 (list word
+ (spam-stat-good entry)
+ (spam-stat-bad entry))))
+ spam-stat)
+ (insert ")))"))))
+ (message "Saved %s." spam-stat-file)
+ (setq spam-stat-dirty nil
+ spam-stat-last-saved-at (nth 5 (file-attributes spam-stat-file)))))
(defun spam-stat-load ()
"Read the `spam-stat' hash table from disk."
;; TODO: maybe we should warn the user if spam-stat-dirty is t?
- (load-file spam-stat-file)
- (setq spam-stat-dirty nil))
+ (let ((coding-system-for-read spam-stat-coding-system))
+ (cond (spam-stat-dirty (message "Spam stat not loaded: spam-stat-dirty t"))
+ ((or (not (boundp 'spam-stat-last-saved-at))
+ (null spam-stat-last-saved-at)
+ (not (equal spam-stat-last-saved-at
+ (nth 5 (file-attributes spam-stat-file)))))
+ (progn
+ (load-file spam-stat-file)
+ (setq spam-stat-dirty nil
+ spam-stat-last-saved-at
+ (nth 5 (file-attributes spam-stat-file)))))
+ (t (message "Spam stat file not loaded: no change in disk..")))))
(defun spam-stat-to-hash-table (entries)
"Turn list ENTRIES into a hash table and store as `spam-stat'.
@@ -433,7 +456,8 @@ the word string, NGOOD is the number of good mails it has appeared in,
NBAD is the number of bad mails it has appeared in, GOOD is the number
of times it appeared in good mails, and BAD is the number of times it
has appeared in bad mails."
- (let ((table (make-hash-table :test 'equal)))
+ (let ((table (make-hash-table :size (length entries)
+ :test 'equal)))
(mapc (lambda (l)
(puthash (car l)
(spam-stat-make-entry (nth 1 l) (nth 2 l))
@@ -466,46 +490,73 @@ The default score for unknown words is stored in
These are the words whose spam-stat differs the most from 0.5.
The list returned contains elements of the form \(WORD SCORE DIFF),
where DIFF is the difference between SCORE and 0.5."
- (with-spam-stat-max-buffer-size
- (with-syntax-table spam-stat-syntax-table
- (let (result word score)
- (maphash (lambda (word ignore)
- (setq score (spam-stat-score-word word)
- result (cons (list word score (abs (- score 0.5)))
- result)))
- (spam-stat-buffer-words))
- (setq result (sort result (lambda (a b) (< (nth 2 b) (nth 2 a)))))
- (setcdr (nthcdr 14 result) nil)
- result))))
+ (let (result word score)
+ (maphash (lambda (word ignore)
+ (setq score (spam-stat-score-word word)
+ result (cons (list word score (abs (- score 0.5)))
+ result)))
+ (spam-stat-buffer-words))
+ (setq result (sort result (lambda (a b) (< (nth 2 b) (nth 2 a)))))
+ (setcdr (nthcdr 14 result) nil)
+ result))
(defun spam-stat-score-buffer ()
- "Return a score describing the spam-probability for this buffer."
+ "Return a score describing the spam-probability for this buffer.
+Add user supplied modifications if supplied."
+ (interactive) ; helps in debugging.
(setq spam-stat-score-data (spam-stat-buffer-words-with-scores))
- (let* ((probs (mapcar (lambda (e) (cadr e)) spam-stat-score-data))
- (prod (apply #'* probs)))
- (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x))
- probs))))))
+ (let* ((probs (mapcar 'cadr spam-stat-score-data))
+ (prod (apply #'* probs))
+ (score0
+ (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x))
+ probs)))))
+ (score1s
+ (condition-case
+ spam-stat-error-holder
+ (spam-stat-score-buffer-user score0)
+ (error nil)))
+ (ans
+ (if score1s (+ score0 score1s) score0)))
+ (when (interactive-p)
+ (message "%S" ans))
+ ans))
+
+(defun spam-stat-score-buffer-user (&rest args)
+ (let* ((scores
+ (mapcar
+ (lambda (fn)
+ (apply fn args))
+ spam-stat-score-buffer-user-functions)))
+ (if (memq nil scores) nil
+ (apply #'+ scores))))
(defun spam-stat-split-fancy ()
"Return the name of the spam group if the current mail is spam.
Use this function on `nnmail-split-fancy'. If you are interested in
the raw data used for the last run of `spam-stat-score-buffer',
check the variable `spam-stat-score-data'."
- (condition-case var
+ (condition-case spam-stat-error-holder
(progn
(set-buffer spam-stat-buffer)
(goto-char (point-min))
- (when (> (spam-stat-score-buffer) spam-stat-split-fancy-spam-threshhold)
+ (when (> (spam-stat-score-buffer) spam-stat-split-fancy-spam-threshold)
(when (boundp 'nnmail-split-trace)
(mapc (lambda (entry)
(push entry nnmail-split-trace))
spam-stat-score-data))
spam-stat-split-fancy-spam-group))
- (error (message "Error in spam-stat-split-fancy: %S" var)
+ (error (message "Error in spam-stat-split-fancy: %S" spam-stat-error-holder)
nil)))
;; Testing
+(defun spam-stat-strip-xref ()
+ "Strip the the Xref header."
+ (save-restriction
+ (mail-narrow-to-head)
+ (when (re-search-forward "^Xref:.*\n" nil t)
+ (delete-region (match-beginning 0) (match-end 0)))))
+
(defun spam-stat-process-directory (dir func)
"Process all the regular files in directory DIR using function FUNC."
(let* ((files (directory-files dir t "^[^.]"))
@@ -515,10 +566,13 @@ check the variable `spam-stat-score-data'."
(dolist (f files)
(when (and (file-readable-p f)
(file-regular-p f)
- (> (nth 7 (file-attributes f)) 0))
+ (> (nth 7 (file-attributes f)) 0)
+ (< (time-to-number-of-days (time-since (nth 5 (file-attributes f))))
+ spam-stat-process-directory-age))
(setq count (1+ count))
(message "Reading %s: %.2f%%" dir (/ count max))
- (insert-file-contents f)
+ (insert-file-contents-literally f)
+ (spam-stat-strip-xref)
(funcall func)
(erase-buffer))))))
@@ -537,13 +591,19 @@ check the variable `spam-stat-score-data'."
(interactive)
(hash-table-count spam-stat))
-(defun spam-stat-test-directory (dir)
+(defun spam-stat-test-directory (dir &optional verbose)
"Test all the regular files in directory DIR for spam.
If the result is 1.0, then all files are considered spam.
If the result is 0.0, non of the files is considered spam.
-You can use this to determine error rates."
- (interactive "D")
+You can use this to determine error rates.
+
+If VERBOSE is non-nil display names of files detected as spam or
+non-spam in a temporary buffer. If it is the symbol `ham',
+display non-spam files; otherwise display spam files."
+ (interactive "DDirectory: ")
(let* ((files (directory-files dir t "^[^.]"))
+ display-files
+ buffer-score
(total (length files))
(score 0.0); float
(max (/ total 100.0)); float
@@ -554,12 +614,22 @@ You can use this to determine error rates."
(file-regular-p f)
(> (nth 7 (file-attributes f)) 0))
(setq count (1+ count))
- (message "Reading %.2f%%, score %.2f%%"
- (/ count max) (/ score count))
- (insert-file-contents f)
- (when (> (spam-stat-score-buffer) 0.9)
+ (message "Reading %.2f%%, score %.2f"
+ (/ count max) (/ score count))
+ (insert-file-contents-literally f)
+ (setq buffer-score (spam-stat-score-buffer))
+ (when (> buffer-score 0.9)
(setq score (1+ score)))
+ (when verbose
+ (if (> buffer-score 0.9)
+ (unless (eq verbose 'ham) (push f display-files))
+ (when (eq verbose 'ham) (push f display-files))))
(erase-buffer))))
+ (when display-files
+ (with-output-to-temp-buffer "*spam-stat results*"
+ (dolist (file display-files)
+ (princ file)
+ (terpri))))
(message "Final score: %d / %d = %f" score total (/ score total))))
;; Shrinking the dictionary
@@ -579,7 +649,7 @@ COUNT defaults to 5"
(setq spam-stat-dirty t))
(defun spam-stat-install-hooks-function ()
- "Install the spam-stat function hooks"
+ "Install the spam-stat function hooks."
(interactive)
(add-hook 'nnmail-prepare-incoming-message-hook
'spam-stat-store-current-buffer)
@@ -590,7 +660,7 @@ COUNT defaults to 5"
(spam-stat-install-hooks-function))
(defun spam-stat-unload-hook ()
- "Uninstall the spam-stat function hooks"
+ "Uninstall the spam-stat function hooks."
(interactive)
(remove-hook 'nnmail-prepare-incoming-message-hook
'spam-stat-store-current-buffer)
diff --git a/lisp/gnus/spam-wash.el b/lisp/gnus/spam-wash.el
new file mode 100644
index 00000000000..d1be1816a4f
--- /dev/null
+++ b/lisp/gnus/spam-wash.el
@@ -0,0 +1,75 @@
+;;; spam-wash.el --- wash spam before analysis
+
+;; Copyright (C) 2004 Free Software Foundation, Inc.
+
+;; Author: Andrew Cohen <cohen@andy.bu.edu>
+;; Keywords: mail
+
+;; This file is part of GNU Emacs.
+
+;; This 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 3, or (at your option)
+;; any later version.
+
+;; This 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:
+
+;; This library decodes MIME encodings such as base64 and
+;; quoted-printable to allow for better spam analysis.
+;;
+;; `spam-wash' should be called in a buffer containing the message.
+
+;;; Code:
+
+(require 'gnus-art)
+
+(defun spam-wash ()
+ "Treat the current buffer prior to spam analysis."
+ (interactive)
+ (run-hooks 'gnus-article-decode-hook)
+ (save-excursion
+ (save-restriction
+ (let* ((buffer-read-only nil)
+ (gnus-inhibit-treatment t)
+ (gnus-article-buffer (current-buffer))
+ (handles (or (mm-dissect-buffer nil gnus-article-loose-mime)
+ (and gnus-article-emulate-mime
+ (mm-uu-dissect))))
+ handle)
+ (when gnus-article-mime-handles
+ (mm-destroy-parts gnus-article-mime-handles)
+ (setq gnus-article-mime-handle-alist nil))
+ (setq gnus-article-mime-handles handles)
+ (when (and handles
+ (or (not (stringp (car handles)))
+ (cdr handles)))
+ (article-goto-body)
+ (delete-region (point) (point-max))
+ (spam-treat-parts handles))))))
+
+(defun spam-treat-parts (handle)
+ (if (stringp (car handle))
+ (mapcar 'spam-treat-parts (cdr handle))
+ (if (bufferp (car handle))
+ (save-restriction
+ (narrow-to-region (point) (point))
+ (when (let ((case-fold-search t))
+ (string-match "text" (car (mm-handle-type handle))))
+ (mm-insert-part handle))
+ (goto-char (point-max)))
+ (mapcar 'spam-treat-parts handle))))
+
+(provide 'spam-wash)
+
+;;; arch-tag: 3c7f94a7-c96d-4c77-bb59-950df12bc85f
+;;; spam-wash.el ends here
diff --git a/lisp/gnus/spam.el b/lisp/gnus/spam.el
index b19ce8cd285..4164d3f718b 100644
--- a/lisp/gnus/spam.el
+++ b/lisp/gnus/spam.el
@@ -3,7 +3,8 @@
;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: network
+;; Maintainer: Ted Zlatanov <tzz@lifelogs.com>
+;; Keywords: network, spam, mail, bogofilter, BBDB, dspam, dig, whitelist, blacklist, gmane, hashcash, spamassassin, bsfilter, ifile, stat, crm114, spamoracle
;; This file is part of GNU Emacs.
@@ -33,12 +34,15 @@
;;; Several TODO items are marked as such
-;; TODO: spam scores, detection of spam in newsgroups, cross-server splitting,
-;; remote processing, training through files
+;; TODO: cross-server splitting, remote processing, training through files
;;; Code:
+;;{{{ compilation directives and autoloads/requires
+
(eval-when-compile (require 'cl))
+(eval-when-compile (require 'spam-report))
+(eval-when-compile (require 'hashcash))
(require 'gnus-sum)
@@ -50,18 +54,16 @@
;; for nnimap-split-download-body-default
(eval-when-compile (require 'nnimap))
-;; autoload executable-find
-(eval-and-compile
- ;; executable-find is not autoloaded in Emacs 20
- (autoload 'executable-find "executable"))
-
;; autoload query-dig
(eval-and-compile
(autoload 'query-dig "dig"))
;; autoload spam-report
(eval-and-compile
- (autoload 'spam-report-gmane "spam-report"))
+ (autoload 'spam-report-gmane "spam-report")
+ (autoload 'spam-report-gmane-spam "spam-report")
+ (autoload 'spam-report-gmane-ham "spam-report")
+ (autoload 'spam-report-resend "spam-report"))
;; autoload gnus-registry
(eval-and-compile
@@ -74,7 +76,12 @@
(eval-and-compile
(autoload 'query-dns "dns"))
-;;; Main parameters.
+;;}}}
+
+;;{{{ Main parameters.
+(defvar spam-backends nil
+ "List of spam.el backends with all the pertinent data.
+Populated by spam-install-backend-super.")
(defgroup spam nil
"Spam configuration."
@@ -82,24 +89,23 @@
:group 'mail
:group 'news)
+(defcustom spam-summary-exit-behavior 'default
+ "Exit behavior at the time of summary exit.
+Note that setting the spam-use-move or spam-use-copy backends on
+a group through group/topic parameters overrides this mechanism."
+ :type '(choice (const 'default :tag
+ "Move spam out of all groups. Move ham out of spam groups.")
+ (const 'move-all :tag
+ "Move spam out of all groups. Move ham out of all groups.")
+ (const 'move-none :tag
+ "Never move spam or ham out of any groups."))
+ :group 'spam)
+
(defcustom spam-directory (nnheader-concat gnus-directory "spam/")
"Directory for spam whitelists and blacklists."
:type 'directory
:group 'spam)
-(defcustom spam-move-spam-nonspam-groups-only t
- "Whether spam should be moved in non-spam groups only.
-When t, only ham and unclassified groups will have their spam moved
-to the spam-process-destination. When nil, spam will also be moved from
-spam groups."
- :type 'boolean
- :group 'spam)
-
-(defcustom spam-process-ham-in-nonham-groups nil
- "Whether ham should be processed in non-ham groups."
- :type 'boolean
- :group 'spam)
-
(defcustom spam-mark-new-messages-in-spam-group-as-spam t
"Whether new messages in a spam group should get the spam-mark."
:type 'boolean
@@ -123,11 +129,6 @@ Do not set this if you use `spam-split' in a fancy split
:type 'boolean
:group 'spam)
-(defcustom spam-process-ham-in-spam-groups nil
- "Whether ham should be processed in spam groups."
- :type 'boolean
- :group 'spam)
-
(defcustom spam-mark-only-unseen-as-spam t
"Whether only unseen articles should be marked as spam in spam groups.
When nil, all unread articles in a spam group are marked as
@@ -145,9 +146,9 @@ Competition."
:group 'spam)
(defcustom spam-disable-spam-split-during-ham-respool nil
- "Whether `spam-split' should be ignored while resplitting ham in a process
-destination. This is useful to prevent ham from ending up in the same spam
-group after the resplit. Don't set this to t if you have spam-split as the
+ "Whether `spam-split' should be ignored while resplitting ham.
+This is useful to prevent ham from ending up in the same spam
+group after the resplit. Don't set this to t if you have `spam-split' as the
last rule in your split configuration."
:type 'boolean
:group 'spam)
@@ -177,6 +178,11 @@ The regular expression is matched against the address."
:type 'boolean
:group 'spam)
+(defcustom spam-use-gmane-xref nil
+ "Whether the Gmane spam xref should be used by `spam-split'."
+ :type 'boolean
+ :group 'spam)
+
(defcustom spam-use-blacklist nil
"Whether the blacklist should be used by `spam-split'."
:type 'boolean
@@ -233,6 +239,18 @@ Enable this if you want Gnus to invoke Bogofilter on new messages."
:type 'boolean
:group 'spam)
+(defcustom spam-use-bsfilter-headers nil
+ "Whether bsfilter headers should be used by `spam-split'.
+Enable this if you pre-process messages with Bsfilter BEFORE Gnus sees them."
+ :type 'boolean
+ :group 'spam)
+
+(defcustom spam-use-bsfilter nil
+ "Whether bsfilter should be invoked by `spam-split'.
+Enable this if you want Gnus to invoke Bsfilter on new messages."
+ :type 'boolean
+ :group 'spam)
+
(defcustom spam-use-BBDB nil
"Whether BBDB should be used by `spam-split'."
:type 'boolean
@@ -260,8 +278,27 @@ considered spam."
:type 'boolean
:group 'spam)
+(defcustom spam-use-spamassassin nil
+ "Whether spamassassin should be invoked by `spam-split'.
+Enable this if you want Gnus to invoke SpamAssassin on new messages."
+ :type 'boolean
+ :group 'spam)
+
+(defcustom spam-use-spamassassin-headers nil
+ "Whether spamassassin headers should be checked by `spam-split'.
+Enable this if you pre-process messages with SpamAssassin BEFORE Gnus sees
+them."
+ :type 'boolean
+ :group 'spam)
+
+(defcustom spam-use-crm114 nil
+ "Whether the CRM114 Mailfilter should be used by `spam-split'."
+ :type 'boolean
+ :group 'spam)
+
(defcustom spam-install-hooks (or
spam-use-dig
+ spam-use-gmane-xref
spam-use-blacklist
spam-use-whitelist
spam-use-whitelist-exclusive
@@ -269,13 +306,18 @@ considered spam."
spam-use-hashcash
spam-use-regex-headers
spam-use-regex-body
- spam-use-bogofilter-headers
spam-use-bogofilter
+ spam-use-bogofilter-headers
+ spam-use-spamassassin
+ spam-use-spamassassin-headers
+ spam-use-bsfilter
+ spam-use-bsfilter-headers
spam-use-BBDB
spam-use-BBDB-exclusive
spam-use-ifile
spam-use-stat
- spam-use-spamoracle)
+ spam-use-spamoracle
+ spam-use-crm114)
"Whether the spam hooks should be installed.
Default to t if one of the spam-use-* variables is set."
:group 'spam
@@ -296,14 +338,23 @@ All unmarked article in such group receive the spam mark on group entry."
:type '(repeat (string :tag "Group"))
:group 'spam)
+
+(defcustom spam-gmane-xref-spam-group "gmane.spam.detected"
+ "The group where spam xrefs can be found on Gmane.
+Only meaningful if you enable `spam-use-gmane-xref'."
+ :type 'string
+ :group 'spam)
+
(defcustom spam-blackhole-servers '("bl.spamcop.net" "relays.ordb.org"
"dev.null.dk" "relays.visi.com")
- "List of blackhole servers."
+ "List of blackhole servers.
+Only meaningful if you enable `spam-use-blackholes'."
:type '(repeat (string :tag "Server"))
:group 'spam)
(defcustom spam-blackhole-good-server-regex nil
- "String matching IP addresses that should not be checked in the blackholes."
+ "String matching IP addresses that should not be checked in the blackholes.
+Only meaningful if you enable `spam-use-blackholes'."
:type '(radio (const nil) regexp)
:group 'spam)
@@ -328,25 +379,37 @@ All unmarked article in such group receive the spam mark on group entry."
:group 'spam)
(defcustom spam-regex-headers-spam '("^X-Spam-Flag: YES")
- "Regular expression for positive header spam matches."
+ "Regular expression for positive header spam matches.
+Only meaningful if you enable `spam-use-regex-headers'."
:type '(repeat (regexp :tag "Regular expression to match spam header"))
:group 'spam)
(defcustom spam-regex-headers-ham '("^X-Spam-Flag: NO")
- "Regular expression for positive header ham matches."
+ "Regular expression for positive header ham matches.
+Only meaningful if you enable `spam-use-regex-headers'."
:type '(repeat (regexp :tag "Regular expression to match ham header"))
:group 'spam)
(defcustom spam-regex-body-spam '()
- "Regular expression for positive body spam matches."
+ "Regular expression for positive body spam matches.
+Only meaningful if you enable `spam-use-regex-body'."
:type '(repeat (regexp :tag "Regular expression to match spam body"))
:group 'spam)
(defcustom spam-regex-body-ham '()
- "Regular expression for positive body ham matches."
+ "Regular expression for positive body ham matches.
+Only meaningful if you enable `spam-use-regex-body'."
:type '(repeat (regexp :tag "Regular expression to match ham body"))
:group 'spam)
+(defcustom spam-summary-score-preferred-header nil
+ "Preferred header to use for spam-summary-score."
+ :type '(choice :tag "Header name"
+ (symbol :tag "SpamAssassin etc" X-Spam-Status)
+ (symbol :tag "Bogofilter" X-Bogosity)
+ (const :tag "No preference, take best guess." nil))
+ :group 'spam)
+
(defgroup spam-ifile nil
"Spam ifile configuration."
:group 'spam)
@@ -398,6 +461,8 @@ your main source of newsgroup names."
(const :tag "Bogofilter is not installed"))
:group 'spam-bogofilter)
+(defvar spam-bogofilter-valid 'unknown "Is the bogofilter version valid?")
+
(defcustom spam-bogofilter-header "X-Bogosity"
"The header that Bogofilter inserts in messages."
:type 'string
@@ -436,6 +501,55 @@ When nil, use the default location."
(const :tag "Use the default"))
:group 'spam-bogofilter)
+(defgroup spam-bsfilter nil
+ "Spam bsfilter configuration."
+ :group 'spam)
+
+(make-obsolete-variable 'spam-bsfilter-path 'spam-bsfilter-program)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-bsfilter-program (executable-find "bsfilter")
+ "Name of the Bsfilter program."
+ :type '(choice (file :tag "Location of bsfilter")
+ (const :tag "Bsfilter is not installed"))
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-header "X-Spam-Flag"
+ "The header inserted by Bsfilter to flag spam."
+ :type 'string
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-probability-header "X-Spam-Probability"
+ "The header that Bsfilter inserts in messages."
+ :type 'string
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-spam-switch "--add-spam"
+ "The switch that Bsfilter uses to register spam messages."
+ :type 'string
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-ham-switch "--add-clean"
+ "The switch that Bsfilter uses to register ham messages."
+ :type 'string
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-spam-strong-switch "--sub-spam"
+ "The switch that Bsfilter uses to unregister ham messages."
+ :type 'string
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-ham-strong-switch "--sub-clean"
+ "The switch that Bsfilter uses to unregister spam messages."
+ :type 'string
+ :group 'spam-bsfilter)
+
+(defcustom spam-bsfilter-database-directory nil
+ "Directory path of the Bsfilter databases."
+ :type '(choice (directory
+ :tag "Location of the Bsfilter database directory")
+ (const :tag "Use the default"))
+ :group 'spam-bsfilter)
+
(defgroup spam-spamoracle nil
"Spam spamoracle configuration."
:group 'spam)
@@ -453,34 +567,184 @@ When nil, use the default spamoracle database."
(const :tag "Use the default"))
:group 'spam-spamoracle)
+(defgroup spam-spamassassin nil
+ "Spam SpamAssassin configuration."
+ :group 'spam)
+
+(make-obsolete-variable 'spam-spamassassin-path
+ 'spam-spamassassin-program) ;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-assassin-program (executable-find "spamassassin")
+ "Name of the spamassassin program.
+Hint: set this to \"spamc\" if you have spamd running. See the spamc and
+spamd man pages for more information on these programs."
+ :type '(choice (file :tag "Location of spamc")
+ (const :tag "spamassassin is not installed"))
+ :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-arguments ()
+ "Arguments to pass to the spamassassin executable.
+This must be a list. For example, `(\"-C\" \"configfile\")'."
+ :type '(restricted-sexp :match-alternatives (listp))
+ :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-spam-flag-header "X-Spam-Flag"
+ "The header inserted by SpamAssassin to flag spam."
+ :type 'string
+ :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-positive-spam-flag-header "YES"
+ "The regex on `spam-spamassassin-spam-flag-header' for positive spam
+identification"
+ :type 'string
+ :group 'spam-spamassassin)
+
+(defcustom spam-spamassassin-spam-status-header "X-Spam-Status"
+ "The header inserted by SpamAssassin, giving extended scoring information"
+ :type 'string
+ :group 'spam-spamassassin)
+
+(make-obsolete-variable 'spam-sa-learn-path 'spam-sa-learn-program)
+;; "22.1" ;; Gnus 5.10.9
+(defcustom spam-sa-learn-program (executable-find "sa-learn")
+ "Name of the sa-learn program."
+ :type '(choice (file :tag "Location of spamassassin")
+ (const :tag "spamassassin is not installed"))
+ :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-rebuild t
+ "Whether sa-learn should rebuild the database every time it is called
+Enable this if you want sa-learn to rebuild the database automatically. Doing
+this will slightly increase the running time of the spam registration process.
+If you choose not to do this, you will have to run \"sa-learn --rebuild\" in
+order for SpamAssassin to recognize the new registered spam."
+ :type 'boolean
+ :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-spam-switch "--spam"
+ "The switch that sa-learn uses to register spam messages"
+ :type 'string
+ :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-ham-switch "--ham"
+ "The switch that sa-learn uses to register ham messages"
+ :type 'string
+ :group 'spam-spamassassin)
+
+(defcustom spam-sa-learn-unregister-switch "--forget"
+ "The switch that sa-learn uses to unregister messages messages"
+ :type 'string
+ :group 'spam-spamassassin)
+
+(defgroup spam-crm114 nil
+ "Spam CRM114 Mailfilter configuration."
+ :group 'spam)
+
+(defcustom spam-crm114-program (executable-find "mailfilter.crm")
+ "File path of the CRM114 Mailfilter executable program."
+ :type '(choice (file :tag "Location of CRM114 Mailfilter")
+ (const :tag "CRM114 Mailfilter is not installed"))
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-header "X-CRM114-Status"
+ "The header that CRM114 Mailfilter inserts in messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-spam-switch "--learnspam"
+ "The switch that CRM114 Mailfilter uses to register spam messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-ham-switch "--learnnonspam"
+ "The switch that CRM114 Mailfilter uses to register ham messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-spam-strong-switch "--UNKNOWN"
+ "The switch that CRM114 Mailfilter uses to unregister ham messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-ham-strong-switch "--UNKNOWN"
+ "The switch that CRM114 Mailfilter uses to unregister spam messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-positive-spam-header "^SPAM"
+ "The regex on `spam-crm114-header' for positive spam identification."
+ :type 'regexp
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-database-directory nil
+ "Directory path of the CRM114 Mailfilter databases."
+ :type '(choice (directory
+ :tag "Location of the CRM114 Mailfilter database directory")
+ (const :tag "Use the default"))
+ :group 'spam-crm114)
+
;;; Key bindings for spam control.
(gnus-define-keys gnus-summary-mode-map
- "St" spam-bogofilter-score
+ "St" spam-generic-score
"Sx" gnus-summary-mark-as-spam
- "Mst" spam-bogofilter-score
+ "Mst" spam-generic-score
"Msx" gnus-summary-mark-as-spam
"\M-d" gnus-summary-mark-as-spam)
-(defvar spam-old-ham-articles nil
- "List of old ham articles, generated when a group is entered.")
+(defvar spam-cache-lookups t
+ "Whether spam.el will try to cache lookups using `spam-caches'.")
-(defvar spam-old-spam-articles nil
- "List of old spam articles, generated when a group is entered.")
+(defvar spam-caches (make-hash-table
+ :size 10
+ :test 'equal)
+ "Cache of spam detection entries.")
+
+(defvar spam-old-articles nil
+ "List of old ham and spam articles, generated when a group is entered.")
(defvar spam-split-disabled nil
"If non-nil, `spam-split' is disabled, and always returns nil.")
(defvar spam-split-last-successful-check nil
- "`spam-split' will set this to nil or a spam-use-XYZ check if it
- finds ham or spam.")
+ "Internal variable.
+`spam-split' will set this to nil or a spam-use-XYZ check if it
+finds ham or spam.")
+
+;; internal variables for backends
+;; TODO: find a way to create these on the fly in spam-install-backend-super
+(defvar spam-use-copy nil)
+(defvar spam-use-move nil)
+(defvar spam-use-gmane nil)
+(defvar spam-use-resend nil)
+
+;;}}}
+
+;;{{{ convenience functions
+
+(defun spam-clear-cache (symbol)
+ "Clear the spam-caches entry for a check."
+ (remhash symbol spam-caches))
-;; convenience functions
(defun spam-xor (a b)
- "Logical exclusive `or'."
+ "Logical A xor B."
(and (or a b) (not (and a b))))
+(defun spam-set-difference (list1 list2)
+ "Return a set difference of LIST1 and LIST2.
+When either list is nil, the other is returned."
+ (if (and list1 list2)
+ ;; we have two non-nil lists
+ (progn
+ (dolist (item (append list1 list2))
+ (when (and (memq item list1) (memq item list2))
+ (setq list1 (delq item list1))
+ (setq list2 (delq item list2))))
+ (append list1 list2))
+ ;; if either of the lists was nil, return the other one
+ (if list1 list1 list2)))
+
(defun spam-group-ham-mark-p (group mark &optional spam)
+ "Checks if MARK is considered a ham mark in GROUP."
(when (stringp group)
(let* ((marks (spam-group-ham-marks group spam))
(marks (if (symbolp mark)
@@ -489,9 +753,11 @@ When nil, use the default spamoracle database."
(memq mark marks))))
(defun spam-group-spam-mark-p (group mark)
+ "Checks if MARK is considered a spam mark in GROUP."
(spam-group-ham-mark-p group mark t))
(defun spam-group-ham-marks (group &optional spam)
+ "In GROUP, get all the ham marks."
(when (stringp group)
(let* ((marks (if spam
(gnus-parameter-spam-marks group)
@@ -501,107 +767,594 @@ When nil, use the default spamoracle database."
marks)))
(defun spam-group-spam-marks (group)
+ "In GROUP, get all the spam marks."
(spam-group-ham-marks group t))
(defun spam-group-spam-contents-p (group)
- (if (stringp group)
+ "Is GROUP a spam group?"
+ (if (and (stringp group) (< 0 (length group)))
(or (member group spam-junk-mailgroups)
(memq 'gnus-group-spam-classification-spam
(gnus-parameter-spam-contents group)))
nil))
(defun spam-group-ham-contents-p (group)
+ "Is GROUP a ham group?"
(if (stringp group)
(memq 'gnus-group-spam-classification-ham
(gnus-parameter-spam-contents group))
nil))
+(defun spam-classifications ()
+ "Return list of valid classifications"
+ '(spam ham))
+
+(defun spam-classification-valid-p (classification)
+ "Is CLASSIFICATION a valid spam/ham classification?"
+ (memq classification (spam-classifications)))
+
+(defun spam-backend-properties ()
+ "Return list of valid classifications."
+ '(statistical mover check hrf srf huf suf))
+
+(defun spam-backend-property-valid-p (property)
+ "Is PROPERTY a valid backend property?"
+ (memq property (spam-backend-properties)))
+
+(defun spam-backend-function-type-valid-p (type)
+ (or (eq type 'registration)
+ (eq type 'unregistration)))
+
+(defun spam-process-type-valid-p (process-type)
+ (or (eq process-type 'incoming)
+ (eq process-type 'process)))
+
+(defun spam-list-articles (articles classification)
+ (let ((mark-check (if (eq classification 'spam)
+ 'spam-group-spam-mark-p
+ 'spam-group-ham-mark-p))
+ alist mark-cache-yes mark-cache-no)
+ (dolist (article articles)
+ (let ((mark (gnus-summary-article-mark article)))
+ (unless (or (memq mark mark-cache-yes)
+ (memq mark mark-cache-no))
+ (if (funcall mark-check
+ gnus-newsgroup-name
+ mark)
+ (push mark mark-cache-yes)
+ (push mark mark-cache-no)))
+ (when (memq mark mark-cache-yes)
+ (push article alist))))
+ alist))
+
+;;}}}
+
+;;{{{ backend installation functions and procedures
+
+(defun spam-install-backend-super (backend &rest properties)
+ "Install BACKEND for spam.el.
+Accepts incoming CHECK, ham registration function HRF, spam
+registration function SRF, ham unregistration function HUF, spam
+unregistration function SUF, and an indication whether the
+backend is STATISTICAL."
+
+ (setq spam-backends (add-to-list 'spam-backends backend))
+ (while properties
+ (let ((property (pop properties))
+ (value (pop properties)))
+ (if (spam-backend-property-valid-p property)
+ (put backend property value)
+ (gnus-error
+ 5
+ "spam-install-backend-super got an invalid property %s"
+ property)))))
+
+(defun spam-backend-list (&optional type)
+ "Return a list of all the backend symbols, constrained by TYPE.
+When TYPE is 'non-mover, only non-mover backends are returned.
+When TYPE is 'mover, only mover backends are returned."
+ (let (list)
+ (dolist (backend spam-backends)
+ (when (or
+ (null type) ;either no type was requested
+ ;; or the type is 'mover and the backend is a mover
+ (and
+ (eq type 'mover)
+ (spam-backend-mover-p backend))
+ ;; or the type is 'non-mover and the backend is not a mover
+ (and
+ (eq type 'non-mover)
+ (not (spam-backend-mover-p backend))))
+ (push backend list)))
+ list))
+
+(defun spam-backend-check (backend)
+ "Get the check function for BACKEND.
+Each individual check may return nil, t, or a mailgroup name.
+The value nil means that the check does not yield a decision, and
+so, that further checks are needed. The value t means that the
+message is definitely not spam, and that further spam checks
+should be inhibited. Otherwise, a mailgroup name or the symbol
+'spam (depending on spam-split-symbolic-return) is returned where
+the mail should go, and further checks are also inhibited. The
+usual mailgroup name is the value of `spam-split-group', meaning
+that the message is definitely a spam."
+ (get backend 'check))
+
+(defun spam-backend-valid-p (backend)
+ "Is BACKEND valid?"
+ (member backend (spam-backend-list)))
+
+(defun spam-backend-info (backend)
+ "Return information about BACKEND."
+ (if (spam-backend-valid-p backend)
+ (let (info)
+ (setq info (format "Backend %s has the following properties:\n"
+ backend))
+ (dolist (property (spam-backend-properties))
+ (setq info (format "%s%s=%s\n"
+ info
+ property
+ (get backend property))))
+ info)
+ (gnus-error 5 "spam-backend-info was asked about an invalid backend %s"
+ backend)))
+
+(defun spam-backend-function (backend classification type)
+ "Get the BACKEND function for CLASSIFICATION and TYPE.
+TYPE is 'registration or 'unregistration.
+CLASSIFICATION is 'ham or 'spam."
+ (if (and
+ (spam-classification-valid-p classification)
+ (spam-backend-function-type-valid-p type))
+ (let ((retrieval
+ (intern
+ (format "spam-backend-%s-%s-function"
+ classification
+ type))))
+ (funcall retrieval backend))
+ (gnus-error
+ 5
+ "%s was passed invalid backend %s, classification %s, or type %s"
+ "spam-backend-function"
+ backend
+ classification
+ type)))
+
+(defun spam-backend-article-list-property (classification
+ &optional unregister)
+ "Property name of article list with CLASSIFICATION and UNREGISTER."
+ (let* ((r (if unregister "unregister" "register"))
+ (prop (format "%s-%s" classification r)))
+ prop))
+
+(defun spam-backend-get-article-todo-list (backend
+ classification
+ &optional unregister)
+ "Get the articles to be processed for BACKEND and CLASSIFICATION.
+With UNREGISTER, get articles to be unregistered.
+This is a temporary storage function - nothing here persists."
+ (get
+ backend
+ (intern (spam-backend-article-list-property classification unregister))))
+
+(defun spam-backend-put-article-todo-list (backend classification list &optional unregister)
+ "Set the LIST of articles to be processed for BACKEND and CLASSIFICATION.
+With UNREGISTER, set articles to be unregistered.
+This is a temporary storage function - nothing here persists."
+ (put
+ backend
+ (intern (spam-backend-article-list-property classification unregister))
+ list))
+
+(defun spam-backend-ham-registration-function (backend)
+ "Get the ham registration function for BACKEND."
+ (get backend 'hrf))
+
+(defun spam-backend-spam-registration-function (backend)
+ "Get the spam registration function for BACKEND."
+ (get backend 'srf))
+
+(defun spam-backend-ham-unregistration-function (backend)
+ "Get the ham unregistration function for BACKEND."
+ (get backend 'huf))
+
+(defun spam-backend-spam-unregistration-function (backend)
+ "Get the spam unregistration function for BACKEND."
+ (get backend 'suf))
+
+(defun spam-backend-statistical-p (backend)
+ "Is BACKEND statistical?"
+ (get backend 'statistical))
+
+(defun spam-backend-mover-p (backend)
+ "Is BACKEND a mover?"
+ (get backend 'mover))
+
+(defun spam-install-backend-alias (backend alias)
+ "Add ALIAS to an existing BACKEND.
+The previous backend settings for ALIAS are erased."
+
+ ;; install alias with no properties at first
+ (spam-install-backend-super alias)
+
+ (dolist (property (spam-backend-properties))
+ (put alias property (get backend property))))
+
+(defun spam-install-checkonly-backend (backend check)
+ "Install a BACKEND than can only CHECK for spam."
+ (spam-install-backend-super backend 'check check))
+
+(defun spam-install-mover-backend (backend hrf srf huf suf)
+ "Install a BACKEND than can move articles at summary exit.
+Accepts ham registration function HRF, spam registration function
+SRF, ham unregistration function HUF, spam unregistration
+function SUF. The backend has no incoming check and can't be
+statistical."
+ (spam-install-backend-super
+ backend
+ 'hrf hrf 'srf srf 'huf huf 'suf suf 'mover t))
+
+(defun spam-install-nocheck-backend (backend hrf srf huf suf)
+ "Install a BACKEND than has no check.
+Accepts ham registration function HRF, spam registration function
+SRF, ham unregistration function HUF, spam unregistration
+function SUF. The backend has no incoming check and can't be
+statistical (it could be, but in practice that doesn't happen)."
+ (spam-install-backend-super
+ backend
+ 'hrf hrf 'srf srf 'huf huf 'suf suf))
+
+(defun spam-install-backend (backend check hrf srf huf suf)
+ "Install a BACKEND.
+Accepts incoming CHECK, ham registration function HRF, spam
+registration function SRF, ham unregistration function HUF, spam
+unregistration function SUF. The backend won't be
+statistical (use spam-install-statistical-backend for that)."
+ (spam-install-backend-super
+ backend
+ 'check check 'hrf hrf 'srf srf 'huf huf 'suf suf))
+
+(defun spam-install-statistical-backend (backend check hrf srf huf suf)
+ "Install a BACKEND.
+Accepts incoming CHECK, ham registration function HRF, spam
+registration function SRF, ham unregistration function HUF, spam
+unregistration function SUF. The backend will be
+statistical (use spam-install-backend for non-statistical
+backends)."
+ (spam-install-backend-super
+ backend
+ 'check check 'statistical t 'hrf hrf 'srf srf 'huf huf 'suf suf))
+
+(defun spam-install-statistical-checkonly-backend (backend check)
+ "Install a statistical BACKEND than can only CHECK for spam."
+ (spam-install-backend-super
+ backend
+ 'check check 'statistical t))
+
+;;}}}
+
+;;{{{ backend installations
+(spam-install-checkonly-backend 'spam-use-blackholes
+ 'spam-check-blackholes)
+
+(spam-install-checkonly-backend 'spam-use-hashcash
+ 'spam-check-hashcash)
+
+(spam-install-checkonly-backend 'spam-use-spamassassin-headers
+ 'spam-check-spamassassin-headers)
+
+(spam-install-checkonly-backend 'spam-use-bogofilter-headers
+ 'spam-check-bogofilter-headers)
+
+(spam-install-checkonly-backend 'spam-use-bsfilter-headers
+ 'spam-check-bsfilter-headers)
+
+(spam-install-checkonly-backend 'spam-use-gmane-xref
+ 'spam-check-gmane-xref)
+
+(spam-install-checkonly-backend 'spam-use-regex-headers
+ 'spam-check-regex-headers)
+
+(spam-install-statistical-checkonly-backend 'spam-use-regex-body
+ 'spam-check-regex-body)
+
+;; TODO: NOTE: spam-use-ham-copy is now obsolete, use (ham spam-use-copy) instead
+(spam-install-mover-backend 'spam-use-move
+ 'spam-move-ham-routine
+ 'spam-move-spam-routine
+ nil
+ nil)
+
+(spam-install-nocheck-backend 'spam-use-copy
+ 'spam-copy-ham-routine
+ 'spam-copy-spam-routine
+ nil
+ nil)
+
+(spam-install-nocheck-backend 'spam-use-gmane
+ 'spam-report-gmane-unregister-routine
+ 'spam-report-gmane-register-routine
+ 'spam-report-gmane-register-routine
+ 'spam-report-gmane-unregister-routine)
+
+(spam-install-nocheck-backend 'spam-use-resend
+ 'spam-report-resend-register-ham-routine
+ 'spam-report-resend-register-routine
+ nil
+ nil)
+
+(spam-install-backend 'spam-use-BBDB
+ 'spam-check-BBDB
+ 'spam-BBDB-register-routine
+ nil
+ 'spam-BBDB-unregister-routine
+ nil)
+
+(spam-install-backend-alias 'spam-use-BBDB 'spam-use-BBDB-exclusive)
+
+(spam-install-backend 'spam-use-blacklist
+ 'spam-check-blacklist
+ nil
+ 'spam-blacklist-register-routine
+ nil
+ 'spam-blacklist-unregister-routine)
+
+(spam-install-backend 'spam-use-whitelist
+ 'spam-check-whitelist
+ 'spam-whitelist-register-routine
+ nil
+ 'spam-whitelist-unregister-routine
+ nil)
+
+(spam-install-statistical-backend 'spam-use-ifile
+ 'spam-check-ifile
+ 'spam-ifile-register-ham-routine
+ 'spam-ifile-register-spam-routine
+ 'spam-ifile-unregister-ham-routine
+ 'spam-ifile-unregister-spam-routine)
+
+(spam-install-statistical-backend 'spam-use-spamoracle
+ 'spam-check-spamoracle
+ 'spam-spamoracle-learn-ham
+ 'spam-spamoracle-learn-spam
+ 'spam-spamoracle-unlearn-ham
+ 'spam-spamoracle-unlearn-spam)
+
+(spam-install-statistical-backend 'spam-use-stat
+ 'spam-check-stat
+ 'spam-stat-register-ham-routine
+ 'spam-stat-register-spam-routine
+ 'spam-stat-unregister-ham-routine
+ 'spam-stat-unregister-spam-routine)
+
+(spam-install-statistical-backend 'spam-use-spamassassin
+ 'spam-check-spamassassin
+ 'spam-spamassassin-register-ham-routine
+ 'spam-spamassassin-register-spam-routine
+ 'spam-spamassassin-unregister-ham-routine
+ 'spam-spamassassin-unregister-spam-routine)
+
+(spam-install-statistical-backend 'spam-use-bogofilter
+ 'spam-check-bogofilter
+ 'spam-bogofilter-register-ham-routine
+ 'spam-bogofilter-register-spam-routine
+ 'spam-bogofilter-unregister-ham-routine
+ 'spam-bogofilter-unregister-spam-routine)
+
+(spam-install-statistical-backend 'spam-use-bsfilter
+ 'spam-check-bsfilter
+ 'spam-bsfilter-register-ham-routine
+ 'spam-bsfilter-register-spam-routine
+ 'spam-bsfilter-unregister-ham-routine
+ 'spam-bsfilter-unregister-spam-routine)
+
+(spam-install-statistical-backend 'spam-use-crm114
+ 'spam-check-crm114
+ 'spam-crm114-register-ham-routine
+ 'spam-crm114-register-spam-routine
+ ;; does CRM114 Mailfilter support unregistration?
+ nil
+ nil)
+
+;;}}}
+
+;;{{{ scoring and summary formatting
+(defun spam-necessary-extra-headers ()
+ "Return the extra headers spam.el thinks are necessary."
+ (let (list)
+ (when (or spam-use-spamassassin
+ spam-use-spamassassin-headers
+ spam-use-regex-headers)
+ (push 'X-Spam-Status list))
+ (when (or spam-use-bogofilter
+ spam-use-regex-headers)
+ (push 'X-Bogosity list))
+ (when (or spam-use-crm114
+ spam-use-regex-headers)
+ (push 'X-CRM114-Status list))
+ list))
+
+(defun spam-user-format-function-S (headers)
+ (when headers
+ (format "%3.2f"
+ (spam-summary-score headers spam-summary-score-preferred-header))))
+
+(defun spam-article-sort-by-spam-status (h1 h2)
+ "Sort articles by score."
+ (let (result)
+ (dolist (header (spam-necessary-extra-headers))
+ (let ((s1 (spam-summary-score h1 header))
+ (s2 (spam-summary-score h2 header)))
+ (unless (= s1 s2)
+ (setq result (< s1 s2))
+ (return))))
+ result))
+
+(defvar spam-spamassassin-score-regexp
+ ".*\\b\\(?:score\\|hits\\)=\\(-?[0-9.]+\\)"
+ "Regexp matching SpamAssassin score header.
+The first group must match the number.")
+
+(defun spam-extra-header-to-number (header headers)
+ "Transform an extra HEADER to a number, using list of HEADERS.
+Note this has to be fast."
+ (let ((header-content (gnus-extra-header header headers)))
+ (if header-content
+ (cond
+ ((eq header 'X-Spam-Status)
+ (string-to-number (gnus-replace-in-string
+ header-content
+ spam-spamassassin-score-regexp
+ "\\1")))
+ ;; for CRM checking, it's probably faster to just do the string match
+ ((string-match "( pR: \\([0-9.-]+\\)" header-content)
+ (- (string-to-number (match-string 1 header-content))))
+ ((eq header 'X-Bogosity)
+ (string-to-number (gnus-replace-in-string
+ (gnus-replace-in-string
+ header-content
+ ".*spamicity=" "")
+ ",.*" "")))
+ (t nil))
+ nil)))
+
+(defun spam-summary-score (headers &optional specific-header)
+ "Score an article for the summary buffer, as fast as possible.
+With SPECIFIC-HEADER, returns only that header's score.
+Will not return a nil score."
+ (let (score)
+ (dolist (header
+ (if specific-header
+ (list specific-header)
+ (spam-necessary-extra-headers)))
+ (setq score
+ (spam-extra-header-to-number header headers))
+ (when score
+ (return)))
+ (or score 0)))
+
+(defun spam-generic-score (&optional recheck)
+ "Invoke whatever scoring method we can."
+ (interactive "P")
+ (cond
+ ((or spam-use-spamassassin spam-use-spamassassin-headers)
+ (spam-spamassassin-score recheck))
+ ((or spam-use-bsfilter spam-use-bsfilter-headers)
+ (spam-bsfilter-score recheck))
+ (spam-use-crm114
+ (spam-crm114-score))
+ (t (spam-bogofilter-score recheck))))
+;;}}}
+
+;;{{{ set up widening, processor checks
+
+;;; set up IMAP widening if it's necessary
+(defun spam-setup-widening ()
+ (when (spam-widening-needed-p)
+ (setq nnimap-split-download-body-default t)))
+
+(defun spam-widening-needed-p (&optional force-symbols)
+ (let (found)
+ (dolist (backend (spam-backend-list))
+ (when (and (spam-backend-statistical-p backend)
+ (or (symbol-value backend)
+ (memq backend force-symbols)))
+ (setq found backend)))
+ found))
+
(defvar spam-list-of-processors
- '((gnus-group-spam-exit-processor-report-gmane spam spam-use-gmane)
- (gnus-group-spam-exit-processor-bogofilter spam spam-use-bogofilter)
+ ;; note the nil processors are not defined in gnus.el
+ '((gnus-group-spam-exit-processor-bogofilter spam spam-use-bogofilter)
+ (gnus-group-spam-exit-processor-bsfilter spam spam-use-bsfilter)
(gnus-group-spam-exit-processor-blacklist spam spam-use-blacklist)
(gnus-group-spam-exit-processor-ifile spam spam-use-ifile)
(gnus-group-spam-exit-processor-stat spam spam-use-stat)
(gnus-group-spam-exit-processor-spamoracle spam spam-use-spamoracle)
+ (gnus-group-spam-exit-processor-spamassassin spam spam-use-spamassassin)
+ (gnus-group-spam-exit-processor-report-gmane spam spam-use-gmane) ;; Buggy?
(gnus-group-ham-exit-processor-ifile ham spam-use-ifile)
(gnus-group-ham-exit-processor-bogofilter ham spam-use-bogofilter)
+ (gnus-group-ham-exit-processor-bsfilter ham spam-use-bsfilter)
(gnus-group-ham-exit-processor-stat ham spam-use-stat)
(gnus-group-ham-exit-processor-whitelist ham spam-use-whitelist)
(gnus-group-ham-exit-processor-BBDB ham spam-use-BBDB)
(gnus-group-ham-exit-processor-copy ham spam-use-ham-copy)
+ (gnus-group-ham-exit-processor-spamassassin ham spam-use-spamassassin)
(gnus-group-ham-exit-processor-spamoracle ham spam-use-spamoracle))
- "The spam-list-of-processors list contains pairs associating a
-ham/spam exit processor variable with a classification and a
-spam-use-* variable.")
-
-(defun spam-group-processor-p (group processor)
+ "The OBSOLETE `spam-list-of-processors' list.
+This list contains pairs associating the obsolete ham/spam exit
+processor variables with a classification and a spam-use-*
+variable. When the processor variable is nil, just the
+classification and spam-use-* check variable are used. This is
+superceded by the new spam backend code, so it's only consulted
+for backwards compatibility.")
+
+(defun spam-group-processor-p (group backend &optional classification)
+ "Checks if GROUP has a BACKEND with CLASSIFICATION registered.
+Also accepts the obsolete processors, which can be found in
+gnus.el and in spam-list-of-processors. In the case of mover
+backends, checks the setting of spam-summary-exit-behavior in
+addition to the set values for the group."
(if (and (stringp group)
- (symbolp processor))
- (or (member processor (nth 0 (gnus-parameter-spam-process group)))
- (spam-group-processor-multiple-p
- group
- (cdr-safe (assoc processor spam-list-of-processors))))
+ (symbolp backend))
+ (let ((old-style (assq backend spam-list-of-processors))
+ (parameters (nth 0 (gnus-parameter-spam-process group)))
+ found)
+ (if old-style ; old-style processor
+ (spam-group-processor-p group (nth 2 old-style) (nth 1 old-style))
+ ;; now search for the parameter
+ (dolist (parameter parameters)
+ (when (and (null found)
+ (listp parameter)
+ (eq classification (nth 0 parameter))
+ (eq backend (nth 1 parameter)))
+ (setq found t)))
+
+ ;; now, if the parameter was not found, do the
+ ;; spam-summary-exit-behavior-logic for mover backends
+ (unless found
+ (when (spam-backend-mover-p backend)
+ (setq
+ found
+ (cond
+ ((eq spam-summary-exit-behavior 'move-all) t)
+ ((eq spam-summary-exit-behavior 'move-none) nil)
+ ((eq spam-summary-exit-behavior 'default)
+ (or (eq classification 'spam) ;move spam out of all groups
+ ;; move ham out of spam groups
+ (and (eq classification 'ham)
+ (spam-group-spam-contents-p group))))
+ (t (gnus-error 5 "Unknown spam-summary-exit-behavior: %s"
+ spam-summary-exit-behavior))))))
+
+ found))
nil))
-(defun spam-group-processor-multiple-p (group processor-info)
- (let* ((classification (nth 0 processor-info))
- (check (nth 1 processor-info))
- (parameters (nth 0 (gnus-parameter-spam-process group)))
- found)
- (dolist (parameter parameters)
- (when (and (null found)
- (listp parameter)
- (eq classification (nth 0 parameter))
- (eq check (nth 1 parameter)))
- (setq found t)))
- found))
-
-(defun spam-group-spam-processor-report-gmane-p (group)
- (spam-group-processor-p group 'gnus-group-spam-exit-processor-report-gmane))
-
-(defun spam-group-spam-processor-bogofilter-p (group)
- (spam-group-processor-p group 'gnus-group-spam-exit-processor-bogofilter))
-
-(defun spam-group-spam-processor-blacklist-p (group)
- (spam-group-processor-p group 'gnus-group-spam-exit-processor-blacklist))
-
-(defun spam-group-spam-processor-ifile-p (group)
- (spam-group-processor-p group 'gnus-group-spam-exit-processor-ifile))
-
-(defun spam-group-ham-processor-ifile-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-ifile))
+;;}}}
-(defun spam-group-spam-processor-spamoracle-p (group)
- (spam-group-processor-p group 'gnus-group-spam-exit-processor-spamoracle))
+;;{{{ Summary entry and exit processing.
-(defun spam-group-ham-processor-bogofilter-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-bogofilter))
-
-(defun spam-group-spam-processor-stat-p (group)
- (spam-group-processor-p group 'gnus-group-spam-exit-processor-stat))
-
-(defun spam-group-ham-processor-stat-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-stat))
-
-(defun spam-group-ham-processor-whitelist-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-whitelist))
-
-(defun spam-group-ham-processor-BBDB-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-BBDB))
-
-(defun spam-group-ham-processor-copy-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-copy))
-
-(defun spam-group-ham-processor-spamoracle-p (group)
- (spam-group-processor-p group 'gnus-group-ham-exit-processor-spamoracle))
-
-;;; Summary entry and exit processing.
+(defun spam-mark-junk-as-spam-routine ()
+ ;; check the global list of group names spam-junk-mailgroups and the
+ ;; group parameters
+ (when (spam-group-spam-contents-p gnus-newsgroup-name)
+ (gnus-message 6 "Marking %s articles as spam"
+ (if spam-mark-only-unseen-as-spam
+ "unseen"
+ "unread"))
+ (let ((articles (if spam-mark-only-unseen-as-spam
+ gnus-newsgroup-unseen
+ gnus-newsgroup-unreads)))
+ (if spam-mark-new-messages-in-spam-group-as-spam
+ (dolist (article articles)
+ (gnus-summary-mark-article article gnus-spam-mark))
+ (gnus-message 9 "Did not mark new messages as spam.")))))
(defun spam-summary-prepare ()
- (setq spam-old-ham-articles
- (spam-list-articles gnus-newsgroup-articles 'ham))
- (setq spam-old-spam-articles
- (spam-list-articles gnus-newsgroup-articles 'spam))
+ (setq spam-old-articles
+ (list (cons 'ham (spam-list-articles gnus-newsgroup-articles 'ham))
+ (cons 'spam (spam-list-articles gnus-newsgroup-articles 'spam))))
(spam-mark-junk-as-spam-routine))
;; The spam processors are invoked for any group, spam or ham or neither
@@ -609,141 +1362,74 @@ spam-use-* variable.")
(unless gnus-group-is-exiting-without-update-p
(gnus-message 6 "Exiting summary buffer and applying spam rules")
+ ;; before we begin, remove any article limits
+; (ignore-errors
+; (gnus-summary-pop-limit t))
+
;; first of all, unregister any articles that are no longer ham or spam
;; we have to iterate over the processors, or else we'll be too slow
- (dolist (classification '(spam ham))
- (let* ((old-articles (if (eq classification 'spam)
- spam-old-spam-articles
- spam-old-ham-articles))
+ (dolist (classification (spam-classifications))
+ (let* ((old-articles (cdr-safe (assq classification spam-old-articles)))
(new-articles (spam-list-articles
gnus-newsgroup-articles
classification))
- (changed-articles (gnus-set-difference old-articles new-articles)))
+ (changed-articles (spam-set-difference new-articles old-articles)))
;; now that we have the changed articles, we go through the processors
- (dolist (processor-param spam-list-of-processors)
- (let ((processor (nth 0 processor-param))
- (processor-classification (nth 1 processor-param))
- (check (nth 2 processor-param))
- unregister-list)
+ (dolist (backend (spam-backend-list))
+ (let (unregister-list)
(dolist (article changed-articles)
(let ((id (spam-fetch-field-message-id-fast article)))
(when (spam-log-unregistration-needed-p
- id 'process classification check)
+ id 'process classification backend)
(push article unregister-list))))
;; call spam-register-routine with specific articles to unregister,
;; when there are articles to unregister and the check is enabled
- (when (and unregister-list (symbol-value check))
- (spam-register-routine classification check t unregister-list))))))
-
- ;; find all the spam processors applicable to this group
- (dolist (processor-param spam-list-of-processors)
- (let ((processor (nth 0 processor-param))
- (classification (nth 1 processor-param))
- (check (nth 2 processor-param)))
- (when (and (eq 'spam classification)
- (spam-group-processor-p gnus-newsgroup-name processor))
- (spam-register-routine classification check))))
-
- (if spam-move-spam-nonspam-groups-only
- (when (not (spam-group-spam-contents-p gnus-newsgroup-name))
- (spam-mark-spam-as-expired-and-move-routine
- (gnus-parameter-spam-process-destination gnus-newsgroup-name)))
- (gnus-message 5 "Marking spam as expired and moving it to %s"
- gnus-newsgroup-name)
- (spam-mark-spam-as-expired-and-move-routine
- (gnus-parameter-spam-process-destination gnus-newsgroup-name)))
-
- ;; now we redo spam-mark-spam-as-expired-and-move-routine to only
- ;; expire spam, in case the above did not expire them
- (gnus-message 5 "Marking spam as expired without moving it")
- (spam-mark-spam-as-expired-and-move-routine nil)
-
- (when (or (spam-group-ham-contents-p gnus-newsgroup-name)
- (and (spam-group-spam-contents-p gnus-newsgroup-name)
- spam-process-ham-in-spam-groups)
- spam-process-ham-in-nonham-groups)
- ;; find all the ham processors applicable to this group
- (dolist (processor-param spam-list-of-processors)
- (let ((processor (nth 0 processor-param))
- (classification (nth 1 processor-param))
- (check (nth 2 processor-param)))
- (when (and (eq 'ham classification)
- (spam-group-processor-p gnus-newsgroup-name processor))
- (spam-register-routine classification check)))))
-
- (when (spam-group-ham-processor-copy-p gnus-newsgroup-name)
- (gnus-message 5 "Copying ham")
- (spam-ham-copy-routine
- (gnus-parameter-ham-process-destination gnus-newsgroup-name)))
-
- ;; now move all ham articles out of spam groups
- (when (spam-group-spam-contents-p gnus-newsgroup-name)
- (gnus-message 5 "Moving ham messages from spam group")
- (spam-ham-move-routine
- (gnus-parameter-ham-process-destination gnus-newsgroup-name))))
-
- (setq spam-old-ham-articles nil)
- (setq spam-old-spam-articles nil))
+ (when (and unregister-list (symbol-value backend))
+ (spam-backend-put-article-todo-list backend
+ classification
+ unregister-list
+ t))))))
-(defun spam-mark-junk-as-spam-routine ()
- ;; check the global list of group names spam-junk-mailgroups and the
- ;; group parameters
- (when (spam-group-spam-contents-p gnus-newsgroup-name)
- (gnus-message 6 "Marking %s articles as spam"
- (if spam-mark-only-unseen-as-spam
- "unseen"
- "unread"))
- (let ((articles (if spam-mark-only-unseen-as-spam
- gnus-newsgroup-unseen
- gnus-newsgroup-unreads)))
- (if spam-mark-new-messages-in-spam-group-as-spam
- (dolist (article articles)
- (gnus-summary-mark-article article gnus-spam-mark))
- (gnus-message 9 "Did not mark new messages as spam.")))))
+ ;; do the non-moving backends first, then the moving ones
+ (dolist (backend-type '(non-mover mover))
+ (dolist (classification (spam-classifications))
+ (dolist (backend (spam-backend-list backend-type))
+ (when (spam-group-processor-p
+ gnus-newsgroup-name
+ backend
+ classification)
+ (spam-backend-put-article-todo-list backend
+ classification
+ (spam-list-articles
+ gnus-newsgroup-articles
+ classification))))))
-(defun spam-mark-spam-as-expired-and-move-routine (&rest groups)
- (if (and (car-safe groups) (listp (car-safe groups)))
- (apply 'spam-mark-spam-as-expired-and-move-routine (car groups))
- (gnus-summary-kill-process-mark)
- (let ((articles gnus-newsgroup-articles)
- (backend-supports-deletions
- (gnus-check-backend-function
- 'request-move-article gnus-newsgroup-name))
- article tomove deletep)
- (dolist (article articles)
- (when (eq (gnus-summary-article-mark article) gnus-spam-mark)
- (gnus-summary-mark-article article gnus-expirable-mark)
- (push article tomove)))
-
- ;; now do the actual copies
- (dolist (group groups)
- (when (and tomove
- (stringp group))
- (dolist (article tomove)
- (gnus-summary-set-process-mark article))
- (when tomove
- (if (or (not backend-supports-deletions)
- (> (length groups) 1))
- (progn
- (gnus-summary-copy-article nil group)
- (setq deletep t))
- (gnus-summary-move-article nil group)))))
+ (spam-resolve-registrations-routine) ; do the registrations now
+
+ ;; we mark all the leftover spam articles as expired at the end
+ (dolist (article (spam-list-articles
+ gnus-newsgroup-articles
+ 'spam))
+ (gnus-summary-mark-article article gnus-expirable-mark)))
+
+ (setq spam-old-articles nil))
+
+;;}}}
- ;; now delete the articles, if there was a copy done, and the
- ;; backend allows it
- (when (and deletep backend-supports-deletions)
- (dolist (article tomove)
- (gnus-summary-set-process-mark article))
- (when tomove
- (let ((gnus-novice-user nil)) ; don't ask me if I'm sure
- (gnus-summary-delete-article nil))))
+;;{{{ spam-use-move and spam-use-copy backend support functions
- (gnus-summary-yank-process-mark))))
+(defun spam-copy-or-move-routine (copy groups articles classification)
-(defun spam-ham-copy-or-move-routine (copy groups)
+ (when (and (car-safe groups) (listp (car-safe groups)))
+ (setq groups (pop groups)))
+
+ (unless (listp groups)
+ (setq groups (list groups)))
+
+ ;; remove the current process mark
(gnus-summary-kill-process-mark)
- (let ((todo (spam-list-articles gnus-newsgroup-articles 'ham))
- (backend-supports-deletions
+
+ (let ((backend-supports-deletions
(gnus-check-backend-function
'request-move-article gnus-newsgroup-name))
(respool-method (gnus-find-method-for-group gnus-newsgroup-name))
@@ -755,69 +1441,95 @@ spam-use-* variable.")
;; now do the actual move
(dolist (group groups)
- (when (and todo (stringp group))
- (dolist (article todo)
- (when spam-mark-ham-unread-before-move-from-spam-group
- (gnus-summary-mark-article article gnus-unread-mark))
- (gnus-summary-set-process-mark article))
-
- (if respool ; respooling is with a "fake" group
- (let ((spam-split-disabled
- (or spam-split-disabled
- spam-disable-spam-split-during-ham-respool)))
- (gnus-summary-respool-article nil respool-method))
- (if (or (not backend-supports-deletions) ; else, we are not respooling
- (> (length groups) 1))
- (progn ; if copying, copy and set deletep
- (gnus-summary-copy-article nil group)
- (setq deletep t))
- (gnus-summary-move-article nil group))))) ; else move articles
-
- ;; now delete the articles, unless a) copy is t, and there was a copy done
- ;; b) a move was done to a single group
- ;; c) backend-supports-deletions is nil
- (unless copy
- (when (and deletep backend-supports-deletions)
- (dolist (article todo)
- (gnus-summary-set-process-mark article))
- (when todo
- (let ((gnus-novice-user nil)) ; don't ask me if I'm sure
- (gnus-summary-delete-article nil))))))
-
- (gnus-summary-yank-process-mark))
-
-(defun spam-ham-copy-routine (&rest groups)
- (if (and (car-safe groups) (listp (car-safe groups)))
- (apply 'spam-ham-copy-routine (car groups))
- (spam-ham-copy-or-move-routine t groups)))
-
-(defun spam-ham-move-routine (&rest groups)
- (if (and (car-safe groups) (listp (car-safe groups)))
- (apply 'spam-ham-move-routine (car groups))
- (spam-ham-copy-or-move-routine nil groups)))
-
-(eval-and-compile
- (defalias 'spam-point-at-eol (if (fboundp 'point-at-eol)
- 'point-at-eol
- 'line-end-position)))
+ (when (and articles (stringp group))
+ ;; first, mark the article with the process mark and, if needed,
+ ;; the unread or expired mark (for ham and spam respectively)
+ (dolist (article articles)
+ (when (and (eq classification 'ham)
+ spam-mark-ham-unread-before-move-from-spam-group)
+ (gnus-message 9 "Marking ham article %d unread before move"
+ article)
+ (gnus-summary-mark-article article gnus-unread-mark))
+ (when (and (eq classification 'spam)
+ (not copy))
+ (gnus-message 9 "Marking spam article %d expirable before move"
+ article)
+ (gnus-summary-mark-article article gnus-expirable-mark))
+ (gnus-summary-set-process-mark article)
+
+ (if respool ; respooling is with a "fake" group
+ (let ((spam-split-disabled
+ (or spam-split-disabled
+ (and (eq classification 'ham)
+ spam-disable-spam-split-during-ham-respool))))
+ (gnus-message 9 "Respooling article %d with method %s"
+ article respool-method)
+ (gnus-summary-respool-article nil respool-method))
+ (if (or (not backend-supports-deletions) ; else, we are not respooling
+ (> (length groups) 1))
+ (progn ; if copying, copy and set deletep
+ (gnus-message 9 "Copying article %d to group %s"
+ article group)
+ (gnus-summary-copy-article nil group)
+ (setq deletep t))
+ (gnus-message 9 "Moving article %d to group %s"
+ article group)
+ (gnus-summary-move-article nil group))))) ; else move articles
+
+ ;; now delete the articles, unless a) copy is t, and there was a copy done
+ ;; b) a move was done to a single group
+ ;; c) backend-supports-deletions is nil
+ (unless copy
+ (when (and deletep backend-supports-deletions)
+ (dolist (article articles)
+ (gnus-summary-set-process-mark article)
+ (gnus-message 9 "Deleting article %d" article))
+ (when articles
+ (let ((gnus-novice-user nil)) ; don't ask me if I'm sure
+ (gnus-summary-delete-article nil)))))
+
+ (gnus-summary-yank-process-mark)
+ (length articles))))
+
+(defun spam-copy-spam-routine (articles)
+ (spam-copy-or-move-routine
+ t
+ (gnus-parameter-spam-process-destination gnus-newsgroup-name)
+ articles
+ 'spam))
+
+(defun spam-move-spam-routine (articles)
+ (spam-copy-or-move-routine
+ nil
+ (gnus-parameter-spam-process-destination gnus-newsgroup-name)
+ articles
+ 'spam))
+
+(defun spam-copy-ham-routine (articles)
+ (spam-copy-or-move-routine
+ t
+ (gnus-parameter-ham-process-destination gnus-newsgroup-name)
+ articles
+ 'ham))
+
+(defun spam-move-ham-routine (articles)
+ (spam-copy-or-move-routine
+ nil
+ (gnus-parameter-ham-process-destination gnus-newsgroup-name)
+ articles
+ 'ham))
+
+;;}}}
+
+;;{{{ article and field retrieval code
(defun spam-get-article-as-string (article)
- (let ((article-buffer (spam-get-article-as-buffer article))
- article-string)
- (when article-buffer
- (save-window-excursion
- (set-buffer article-buffer)
- (setq article-string (buffer-string))))
- article-string))
-
-(defun spam-get-article-as-buffer (article)
- (let ((article-buffer))
- (when (numberp article)
- (save-window-excursion
- (gnus-summary-goto-subject article)
- (gnus-summary-show-article t)
- (setq article-buffer (get-buffer gnus-article-buffer))))
- article-buffer))
+ (when (numberp article)
+ (with-temp-buffer
+ (gnus-request-article-this-buffer
+ article
+ gnus-newsgroup-name)
+ (buffer-string))))
;; disabled for now
;; (defun spam-get-article-as-filename (article)
@@ -831,72 +1543,79 @@ spam-use-* variable.")
;; article-filename
;; nil)))
-(defun spam-fetch-field-from-fast (article)
- "Fetch the `from' field quickly, using the internal gnus-data-list function"
- (if (and (numberp article)
- (assoc article (gnus-data-list nil)))
- (mail-header-from
- (gnus-data-header (assoc article (gnus-data-list nil))))
- nil))
-
-(defun spam-fetch-field-subject-fast (article)
- "Fetch the `subject' field quickly, using the internal
- gnus-data-list function"
- (if (and (numberp article)
- (assoc article (gnus-data-list nil)))
- (mail-header-subject
- (gnus-data-header (assoc article (gnus-data-list nil))))
- nil))
-
-(defun spam-fetch-field-message-id-fast (article)
- "Fetch the `Message-ID' field quickly, using the internal
- gnus-data-list function"
- (if (and (numberp article)
- (assoc article (gnus-data-list nil)))
- (mail-header-message-id
- (gnus-data-header (assoc article (gnus-data-list nil))))
- nil))
+(defun spam-fetch-field-fast (article field &optional prepared-data-header)
+ "Fetch a FIELD for ARTICLE quickly, using the internal gnus-data-list function.
+When PREPARED-DATA-HEADER is given, don't look in the Gnus data.
+When FIELD is 'number, ARTICLE can be any number (since we want
+to find it out)."
+ (when (numberp article)
+ (let* ((data-header (or prepared-data-header
+ (spam-fetch-article-header article))))
+ (if (arrayp data-header)
+ (cond
+ ((equal field 'number)
+ (mail-header-number data-header))
+ ((equal field 'from)
+ (mail-header-from data-header))
+ ((equal field 'message-id)
+ (mail-header-message-id data-header))
+ ((equal field 'subject)
+ (mail-header-subject data-header))
+ ((equal field 'references)
+ (mail-header-references data-header))
+ ((equal field 'date)
+ (mail-header-date data-header))
+ ((equal field 'xref)
+ (mail-header-xref data-header))
+ ((equal field 'extra)
+ (mail-header-extra data-header))
+ (t
+ (gnus-error
+ 5
+ "spam-fetch-field-fast: unknown field %s requested"
+ field)
+ nil))
+ (gnus-message 6 "Article %d has a nil data header" article)))))
+
+(defun spam-fetch-field-from-fast (article &optional prepared-data-header)
+ (spam-fetch-field-fast article 'from prepared-data-header))
+
+(defun spam-fetch-field-subject-fast (article &optional prepared-data-header)
+ (spam-fetch-field-fast article 'subject prepared-data-header))
+
+(defun spam-fetch-field-message-id-fast (article &optional prepared-data-header)
+ (spam-fetch-field-fast article 'message-id prepared-data-header))
+
+(defun spam-generate-fake-headers (article)
+ (let ((dh (spam-fetch-article-header article)))
+ (if dh
+ (concat
+ (format
+ ;; 80-character limit makes for strange constructs
+ (concat "From: %s\nSubject: %s\nMessage-ID: %s\n"
+ "Date: %s\nReferences: %s\nXref: %s\n")
+ (spam-fetch-field-fast article 'from dh)
+ (spam-fetch-field-fast article 'subject dh)
+ (spam-fetch-field-fast article 'message-id dh)
+ (spam-fetch-field-fast article 'date dh)
+ (spam-fetch-field-fast article 'references dh)
+ (spam-fetch-field-fast article 'xref dh))
+ (when (spam-fetch-field-fast article 'extra dh)
+ (format "%s\n" (spam-fetch-field-fast article 'extra dh))))
+ (gnus-message
+ 5
+ "spam-generate-fake-headers: article %d didn't have a valid header"
+ article))))
+
+(defun spam-fetch-article-header (article)
+ (save-excursion
+ (set-buffer gnus-summary-buffer)
+ (gnus-read-header article)
+ (nth 3 (assq article gnus-newsgroup-data))))
+;;}}}
+
+;;{{{ Spam determination.
-
-;;;; Spam determination.
-
-(defvar spam-list-of-checks
- '((spam-use-blacklist . spam-check-blacklist)
- (spam-use-regex-headers . spam-check-regex-headers)
- (spam-use-regex-body . spam-check-regex-body)
- (spam-use-whitelist . spam-check-whitelist)
- (spam-use-BBDB . spam-check-BBDB)
- (spam-use-ifile . spam-check-ifile)
- (spam-use-spamoracle . spam-check-spamoracle)
- (spam-use-stat . spam-check-stat)
- (spam-use-blackholes . spam-check-blackholes)
- (spam-use-hashcash . spam-check-hashcash)
- (spam-use-bogofilter-headers . spam-check-bogofilter-headers)
- (spam-use-bogofilter . spam-check-bogofilter))
- "The spam-list-of-checks list contains pairs associating a
-parameter variable with a spam checking function. If the
-parameter variable is true, then the checking function is called,
-and its value decides what happens. Each individual check may
-return nil, t, or a mailgroup name. The value nil means that the
-check does not yield a decision, and so, that further checks are
-needed. The value t means that the message is definitely not
-spam, and that further spam checks should be inhibited.
-Otherwise, a mailgroup name or the symbol 'spam (depending on
-spam-split-symbolic-return) is returned where the mail should go,
-and further checks are also inhibited. The usual mailgroup name
-is the value of `spam-split-group', meaning that the message is
-definitely a spam.")
-
-(defvar spam-list-of-statistical-checks
- '(spam-use-ifile
- spam-use-regex-body
- spam-use-stat
- spam-use-bogofilter
- spam-use-spamoracle)
- "The spam-list-of-statistical-checks list contains all the mail
-splitters that need to have the full message body available.")
-
-;;;TODO: modify to invoke self with each check if invoked without specifics
(defun spam-split (&rest specific-checks)
"Split this message into the `spam' group if it is spam.
This function can be used as an entry in the variable `nnmail-split-fancy',
@@ -914,38 +1633,41 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(setq spam-split-group-choice check)
(setq specific-checks (delq check specific-checks))))
- (let ((spam-split-group spam-split-group-choice))
+ (let ((spam-split-group spam-split-group-choice)
+ (widening-needed-check (spam-widening-needed-p specific-checks)))
(save-excursion
(save-restriction
- (dolist (check spam-list-of-statistical-checks)
- (when (and (symbolp check) (symbol-value check))
- (widen)
- (gnus-message 8 "spam-split: widening the buffer (%s requires it)"
- (symbol-name check))
- (return)))
- ;; (progn (widen) (debug (buffer-string)))
- (let ((list-of-checks spam-list-of-checks)
+ (when widening-needed-check
+ (widen)
+ (gnus-message 8 "spam-split: widening the buffer (%s requires it)"
+ widening-needed-check))
+ (let ((backends (spam-backend-list))
decision)
- (while (and list-of-checks (not decision))
- (let ((pair (pop list-of-checks)))
- (when (and (symbol-value (car pair))
- (or (null specific-checks)
- (memq (car pair) specific-checks)))
- (gnus-message 5 "spam-split: calling the %s function"
- (symbol-name (cdr pair)))
- (setq decision (funcall (cdr pair)))
+ (while (and backends (not decision))
+ (let* ((backend (pop backends))
+ (check-function (spam-backend-check backend))
+ (spam-split-group (if spam-split-symbolic-return
+ 'spam
+ spam-split-group)))
+ (when (or
+ ;; either, given specific checks, this is one of them
+ (memq backend specific-checks)
+ ;; or, given no specific checks, spam-use-CHECK is set
+ (and (null specific-checks) (symbol-value backend)))
+ (gnus-message 6 "spam-split: calling the %s function"
+ check-function)
+ (setq decision (funcall check-function))
;; if we got a decision at all, save the current check
(when decision
- (setq spam-split-last-successful-check (car pair)))
+ (setq spam-split-last-successful-check backend))
(when (eq decision 'spam)
- (if spam-split-symbolic-return
- (setq decision spam-split-group)
+ (unless spam-split-symbolic-return
(gnus-error
5
(format "spam-split got %s but %s is nil"
- (symbol-name decision)
- (symbol-name spam-split-symbolic-return))))))))
+ decision
+ spam-split-symbolic-return)))))))
(if (eq decision t)
(if spam-split-symbolic-return-positive 'ham nil)
decision))))))))
@@ -957,143 +1679,149 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details."
(let* ((group gnus-newsgroup-name)
(autodetect (gnus-parameter-spam-autodetect group))
(methods (gnus-parameter-spam-autodetect-methods group))
- (first-method (nth 0 methods)))
- (when (and autodetect
- (not (equal first-method 'none)))
- (mapcar
- (lambda (article)
- (let ((id (spam-fetch-field-message-id-fast article))
- (subject (spam-fetch-field-subject-fast article))
- (sender (spam-fetch-field-from-fast article)))
- (unless (and spam-log-to-registry
- (spam-log-registered-p id 'incoming))
+ (first-method (nth 0 methods))
+ (articles (if spam-autodetect-recheck-messages
+ gnus-newsgroup-articles
+ gnus-newsgroup-unseen))
+ article-cannot-be-faked)
+
+
+ (dolist (backend methods)
+ (when (spam-backend-statistical-p backend)
+ (setq article-cannot-be-faked t)
+ (return)))
+
+ (when (memq 'default methods)
+ (setq article-cannot-be-faked t))
+
+ (when (and autodetect
+ (not (equal first-method 'none)))
+ (mapcar
+ (lambda (article)
+ (let ((id (spam-fetch-field-message-id-fast article))
+ (subject (spam-fetch-field-subject-fast article))
+ (sender (spam-fetch-field-from-fast article))
+ registry-lookup)
+
+ (unless id
+ (gnus-message 6 "Article %d has no message ID!" article))
+
+ (when (and id spam-log-to-registry)
+ (setq registry-lookup (spam-log-registration-type id 'incoming))
+ (when registry-lookup
+ (gnus-message
+ 9
+ "spam-find-spam: message %s was already registered incoming"
+ id)))
+
(let* ((spam-split-symbolic-return t)
(spam-split-symbolic-return-positive t)
+ (fake-headers (spam-generate-fake-headers article))
(split-return
- (with-temp-buffer
- (gnus-request-article-this-buffer
- article
- group)
- (if (or (null first-method)
- (equal first-method 'default))
- (spam-split)
- (apply 'spam-split methods)))))
+ (or registry-lookup
+ (with-temp-buffer
+ (if article-cannot-be-faked
+ (gnus-request-article-this-buffer
+ article
+ group)
+ ;; else, we fake the article
+ (when fake-headers (insert fake-headers)))
+ (if (or (null first-method)
+ (equal first-method 'default))
+ (spam-split)
+ (apply 'spam-split methods))))))
(if (equal split-return 'spam)
(gnus-summary-mark-article article gnus-spam-mark))
-
- (when (and split-return spam-log-to-registry)
+
+ (when (and id split-return spam-log-to-registry)
(when (zerop (gnus-registry-group-count id))
(gnus-registry-add-group
id group subject sender))
+
+ (unless registry-lookup
+ (spam-log-processing-to-registry
+ id
+ 'incoming
+ split-return
+ spam-split-last-successful-check
+ group))))))
+ articles))))
+
+;;}}}
+
+;;{{{ registration/unregistration functions
+
+(defun spam-resolve-registrations-routine ()
+ "Go through the backends and register or unregister articles as needed."
+ (dolist (backend-type '(non-mover mover))
+ (dolist (classification (spam-classifications))
+ (dolist (backend (spam-backend-list backend-type))
+ (let ((rlist (spam-backend-get-article-todo-list
+ backend classification))
+ (ulist (spam-backend-get-article-todo-list
+ backend classification t))
+ (delcount 0))
+
+ ;; clear the old lists right away
+ (spam-backend-put-article-todo-list backend
+ classification
+ nil
+ nil)
+ (spam-backend-put-article-todo-list backend
+ classification
+ nil
+ t)
+
+ ;; eliminate duplicates
+ (dolist (article (copy-sequence ulist))
+ (when (memq article rlist)
+ (incf delcount)
+ (setq rlist (delq article rlist))
+ (setq ulist (delq article ulist))))
+
+ (unless (zerop delcount)
+ (gnus-message
+ 9
+ "%d messages were saved the trouble of unregistering and then registering"
+ delcount))
+
+ ;; unregister articles
+ (unless (zerop (length ulist))
+ (let ((num (spam-unregister-routine classification backend ulist)))
+ (when (> num 0)
+ (gnus-message
+ 6
+ "%d %s messages were unregistered by backend %s."
+ num
+ classification
+ backend))))
+
+ ;; register articles
+ (unless (zerop (length rlist))
+ (let ((num (spam-register-routine classification backend rlist)))
+ (when (> num 0)
+ (gnus-message
+ 6
+ "%d %s messages were registered by backend %s."
+ num
+ classification
+ backend)))))))))
- (spam-log-processing-to-registry
- id
- 'incoming
- split-return
- spam-split-last-successful-check
- group))))))
- (if spam-autodetect-recheck-messages
- gnus-newsgroup-articles
- gnus-newsgroup-unseen)))))
-
-(defvar spam-registration-functions
- ;; first the ham register, second the spam register function
- ;; third the ham unregister, fourth the spam unregister function
- '((spam-use-blacklist nil
- spam-blacklist-register-routine
- nil
- spam-blacklist-unregister-routine)
- (spam-use-whitelist spam-whitelist-register-routine
- nil
- spam-whitelist-unregister-routine
- nil)
- (spam-use-BBDB spam-BBDB-register-routine
- nil
- spam-BBDB-unregister-routine
- nil)
- (spam-use-ifile spam-ifile-register-ham-routine
- spam-ifile-register-spam-routine
- spam-ifile-unregister-ham-routine
- spam-ifile-unregister-spam-routine)
- (spam-use-spamoracle spam-spamoracle-learn-ham
- spam-spamoracle-learn-spam
- spam-spamoracle-unlearn-ham
- spam-spamoracle-unlearn-spam)
- (spam-use-stat spam-stat-register-ham-routine
- spam-stat-register-spam-routine
- spam-stat-unregister-ham-routine
- spam-stat-unregister-spam-routine)
- ;; note that spam-use-gmane is not a legitimate check
- (spam-use-gmane nil
- spam-report-gmane-register-routine
- ;; does Gmane support unregistration?
- nil
- nil)
- (spam-use-bogofilter spam-bogofilter-register-ham-routine
- spam-bogofilter-register-spam-routine
- spam-bogofilter-unregister-ham-routine
- spam-bogofilter-unregister-spam-routine))
- "The spam-registration-functions list contains pairs
-associating a parameter variable with the ham and spam
-registration functions, and the ham and spam unregistration
-functions")
-
-(defun spam-classification-valid-p (classification)
- (or (eq classification 'spam)
- (eq classification 'ham)))
-
-(defun spam-process-type-valid-p (process-type)
- (or (eq process-type 'incoming)
- (eq process-type 'process)))
-
-(defun spam-registration-check-valid-p (check)
- (assoc check spam-registration-functions))
-
-(defun spam-unregistration-check-valid-p (check)
- (assoc check spam-registration-functions))
-
-(defun spam-registration-function (classification check)
- (let ((flist (cdr-safe (assoc check spam-registration-functions))))
- (if (eq classification 'spam)
- (nth 1 flist)
- (nth 0 flist))))
-
-(defun spam-unregistration-function (classification check)
- (let ((flist (cdr-safe (assoc check spam-registration-functions))))
- (if (eq classification 'spam)
- (nth 3 flist)
- (nth 2 flist))))
-
-(defun spam-list-articles (articles classification)
- (let ((mark-check (if (eq classification 'spam)
- 'spam-group-spam-mark-p
- 'spam-group-ham-mark-p))
- list mark-cache-yes mark-cache-no)
- (dolist (article articles)
- (let ((mark (gnus-summary-article-mark article)))
- (unless (memq mark mark-cache-no)
- (if (memq mark mark-cache-yes)
- (push article list)
- ;; else, we have to actually check the mark
- (if (funcall mark-check
- gnus-newsgroup-name
- mark)
- (progn
- (push article list)
- (push mark mark-cache-yes))
- (push mark mark-cache-no))))))
- list))
+(defun spam-unregister-routine (classification
+ backend
+ specific-articles)
+ (spam-register-routine classification backend specific-articles t))
(defun spam-register-routine (classification
- check
- &optional unregister
- specific-articles)
+ backend
+ specific-articles
+ &optional unregister)
(when (and (spam-classification-valid-p classification)
- (spam-registration-check-valid-p check))
+ (spam-backend-valid-p backend))
(let* ((register-function
- (spam-registration-function classification check))
+ (spam-backend-function backend classification 'registration))
(unregister-function
- (spam-unregistration-function classification check))
+ (spam-backend-function backend classification 'unregistration))
(run-function (if unregister
unregister-function
register-function))
@@ -1109,40 +1837,46 @@ functions")
gnus-newsgroup-articles
classification)))
;; process them
- (gnus-message 5 "%s %d %s articles with classification %s, check %s"
- (if unregister "Unregistering" "Registering")
- (length articles)
- (if specific-articles "specific" "")
- (symbol-name classification)
- (symbol-name check))
- (funcall run-function articles)
- ;; now log all the registrations (or undo them, depending on unregister)
- (dolist (article articles)
- (funcall log-function
- (spam-fetch-field-message-id-fast article)
- 'process
- classification
- check
- gnus-newsgroup-name))))))
+ (when (> (length articles) 0)
+ (gnus-message 5 "%s %d %s articles as %s using backend %s"
+ (if unregister "Unregistering" "Registering")
+ (length articles)
+ (if specific-articles "specific" "")
+ classification
+ backend)
+ (funcall run-function articles)
+ ;; now log all the registrations (or undo them, depending on
+ ;; unregister)
+ (dolist (article articles)
+ (funcall log-function
+ (spam-fetch-field-message-id-fast article)
+ 'process
+ classification
+ backend
+ gnus-newsgroup-name))))
+ ;; return the number of articles processed
+ (length articles))))
;;; log a ham- or spam-processor invocation to the registry
-(defun spam-log-processing-to-registry (id type classification check group)
+(defun spam-log-processing-to-registry (id type classification backend group)
(when spam-log-to-registry
(if (and (stringp id)
(stringp group)
(spam-process-type-valid-p type)
(spam-classification-valid-p classification)
- (spam-registration-check-valid-p check))
+ (spam-backend-valid-p backend))
(let ((cell-list (cdr-safe (gnus-registry-fetch-extra id type)))
- (cell (list classification check group)))
+ (cell (list classification backend group)))
(push cell cell-list)
(gnus-registry-store-extra-entry
id
type
cell-list))
- (gnus-message 5 (format "%s called with bad ID, type, classification, check, or group"
- "spam-log-processing-to-registry")))))
+ (gnus-error
+ 7
+ (format "%s call with bad ID, type, classification, spam-backend, or group"
+ "spam-log-processing-to-registry")))))
;;; check if a ham- or spam-processor registration has been done
(defun spam-log-registered-p (id type)
@@ -1151,76 +1885,104 @@ functions")
(spam-process-type-valid-p type))
(cdr-safe (gnus-registry-fetch-extra id type))
(progn
- (gnus-message 5 (format "%s called with bad ID, type, classification, or check"
- "spam-log-registered-p"))
+ (gnus-error
+ 7
+ (format "%s called with bad ID, type, classification, or spam-backend"
+ "spam-log-registered-p"))
nil))))
+;;; check what a ham- or spam-processor registration says
+;;; returns nil if conflicting registrations are found
+(defun spam-log-registration-type (id type)
+ (let ((count 0)
+ decision)
+ (dolist (reg (spam-log-registered-p id type))
+ (let ((classification (nth 0 reg)))
+ (when (spam-classification-valid-p classification)
+ (when (and decision
+ (not (eq classification decision)))
+ (setq count (+ 1 count)))
+ (setq decision classification))))
+ (if (< 0 count)
+ nil
+ decision)))
+
+
;;; check if a ham- or spam-processor registration needs to be undone
-(defun spam-log-unregistration-needed-p (id type classification check)
+(defun spam-log-unregistration-needed-p (id type classification backend)
(when spam-log-to-registry
(if (and (stringp id)
(spam-process-type-valid-p type)
(spam-classification-valid-p classification)
- (spam-registration-check-valid-p check))
+ (spam-backend-valid-p backend))
(let ((cell-list (cdr-safe (gnus-registry-fetch-extra id type)))
found)
(dolist (cell cell-list)
(unless found
(when (and (eq classification (nth 0 cell))
- (eq check (nth 1 cell)))
+ (eq backend (nth 1 cell)))
(setq found t))))
found)
(progn
- (gnus-message 5 (format "%s called with bad ID, type, classification, or check"
- "spam-log-unregistration-needed-p"))
+ (gnus-error
+ 7
+ (format "%s called with bad ID, type, classification, or spam-backend"
+ "spam-log-unregistration-needed-p"))
nil))))
;;; undo a ham- or spam-processor registration (the group is not used)
-(defun spam-log-undo-registration (id type classification check &optional group)
+(defun spam-log-undo-registration (id type classification backend &optional group)
(when (and spam-log-to-registry
- (spam-log-unregistration-needed-p id type classification check))
+ (spam-log-unregistration-needed-p id type classification backend))
(if (and (stringp id)
(spam-process-type-valid-p type)
(spam-classification-valid-p classification)
- (spam-registration-check-valid-p check))
+ (spam-backend-valid-p backend))
(let ((cell-list (cdr-safe (gnus-registry-fetch-extra id type)))
new-cell-list found)
(dolist (cell cell-list)
(unless (and (eq classification (nth 0 cell))
- (eq check (nth 1 cell)))
+ (eq backend (nth 1 cell)))
(push cell new-cell-list)))
(gnus-registry-store-extra-entry
id
type
new-cell-list))
(progn
- (gnus-message 5 (format "%s called with bad ID, type, check, or group"
- "spam-log-undo-registration"))
+ (gnus-error 7 (format "%s call with bad ID, type, spam-backend, or group"
+ "spam-log-undo-registration"))
nil))))
-;;; set up IMAP widening if it's necessary
-(defun spam-setup-widening ()
- (dolist (check spam-list-of-statistical-checks)
- (when (symbol-value check)
- (setq nnimap-split-download-body-default t))))
+;;}}}
+
+;;{{{ backend functions
-
-;;;; Regex body
+;;{{{ Gmane xrefs
+(defun spam-check-gmane-xref ()
+ (let ((header (or
+ (message-fetch-field "Xref")
+ (message-fetch-field "Newsgroups"))))
+ (when header ; return nil when no header
+ (when (string-match spam-gmane-xref-spam-group
+ header)
+ spam-split-group))))
+
+;;}}}
+
+;;{{{ Regex body
(defun spam-check-regex-body ()
(let ((spam-regex-headers-ham spam-regex-body-ham)
(spam-regex-headers-spam spam-regex-body-spam))
(spam-check-regex-headers t)))
-
-;;;; Regex headers
+;;}}}
+
+;;{{{ Regex headers
(defun spam-check-regex-headers (&optional body)
(let ((type (if body "body" "header"))
- (spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group))
ret found)
(dolist (h-regex spam-regex-headers-ham)
(unless found
@@ -1237,8 +1999,9 @@ functions")
(setq ret spam-split-group))))
ret))
-
-;;;; Blackholes.
+;;}}}
+
+;;{{{ Blackholes.
(defun spam-reverse-ip-string (ip)
(when (stringp ip)
@@ -1248,16 +2011,13 @@ functions")
(defun spam-check-blackholes ()
"Check the Received headers for blackholed relays."
- (let ((headers (nnmail-fetch-field "received"))
- (spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group))
+ (let ((headers (message-fetch-field "received"))
ips matches)
(when headers
(with-temp-buffer
(insert headers)
(goto-char (point-min))
- (gnus-message 5 "Checking headers for relay addresses")
+ (gnus-message 6 "Checking headers for relay addresses")
(while (re-search-forward
"\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" nil t)
(gnus-message 9 "Blackhole search found host IP %s." (match-string 1))
@@ -1275,34 +2035,28 @@ functions")
(if spam-use-dig
(let ((query-result (query-dig query-string)))
(when query-result
- (gnus-message 5 "(DIG): positive blackhole check '%s'"
+ (gnus-message 6 "(DIG): positive blackhole check '%s'"
query-result)
(push (list ip server query-result)
matches)))
;; else, if not using dig.el
(when (query-dns query-string)
- (gnus-message 5 "positive blackhole check")
+ (gnus-message 6 "positive blackhole check")
(push (list ip server (query-dns query-string 'TXT))
matches)))))))))
(when matches
spam-split-group)))
-
-;;;; Hashcash.
+;;}}}
-(eval-when-compile
- (autoload 'mail-check-payment "hashcash"))
+;;{{{ Hashcash.
-(condition-case nil
- (progn
- (require 'hashcash)
+(defun spam-check-hashcash ()
+ "Check the headers for hashcash payments."
+ (ignore-errors (mail-check-payment))) ;mail-check-payment returns a boolean
- (defun spam-check-hashcash ()
- "Check the headers for hashcash payments."
- (mail-check-payment))) ;mail-check-payment returns a boolean
+;;}}}
- (file-error))
-
-;;;; BBDB
+;;{{{ BBDB
;;; original idea for spam-check-BBDB from Alexander Kotelnikov
;;; <sacha@giotto.sj.ru>
@@ -1320,10 +2074,19 @@ functions")
(require 'bbdb)
(require 'bbdb-com))
(file-error
+ ;; `bbdb-records' should not be bound as an autoload function
+ ;; before loading bbdb because of `bbdb-hashtable-size'.
+ (defalias 'bbdb-records 'ignore)
(defalias 'spam-BBDB-register-routine 'ignore)
(defalias 'spam-enter-ham-BBDB 'ignore)
nil))
+ ;; when the BBDB changes, we want to clear out our cache
+ (defun spam-clear-cache-BBDB (&rest immaterial)
+ (spam-clear-cache 'spam-use-BBDB))
+
+ (add-hook 'bbdb-change-hook 'spam-clear-cache-BBDB)
+
(defun spam-enter-ham-BBDB (addresses &optional remove)
"Enter an address into the BBDB; implies ham (non-spam) sender"
(dolist (from addresses)
@@ -1337,7 +2100,7 @@ functions")
(record (and net-address
(bbdb-search-simple nil net-address))))
(when net-address
- (gnus-message 5 "%s address %s %s BBDB"
+ (gnus-message 6 "%s address %s %s BBDB"
(if remove "Deleting" "Adding")
from
(if remove "from" "to"))
@@ -1359,20 +2122,37 @@ functions")
(defun spam-check-BBDB ()
"Mail from people in the BBDB is classified as ham or non-spam"
- (let ((who (nnmail-fetch-field "from"))
- (spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group)))
+ (let ((who (message-fetch-field "from"))
+ bbdb-cache bbdb-hashtable)
+ (when spam-cache-lookups
+ (setq bbdb-cache (gethash 'spam-use-BBDB spam-caches))
+ (unless bbdb-cache
+ (setq bbdb-cache (make-vector 17 0)) ; a good starting hash value
+ ;; this is based on the expanded (bbdb-hashtable) macro
+ ;; without the debugging support
+ (with-current-buffer (bbdb-buffer)
+ (save-excursion
+ (save-window-excursion
+ (bbdb-records nil t)
+ (mapatoms
+ (lambda (symbol)
+ (intern (downcase (symbol-name symbol)) bbdb-cache))
+ bbdb-hashtable))))
+ (puthash 'spam-use-BBDB bbdb-cache spam-caches)))
(when who
(setq who (nth 1 (gnus-extract-address-components who)))
- (if (bbdb-search-simple nil who)
+ (if
+ (if spam-cache-lookups
+ (intern-soft (downcase who) bbdb-cache)
+ (bbdb-search-simple nil who))
t
(if spam-use-BBDB-exclusive
spam-split-group
nil)))))))
-
-;;;; ifile
+;;}}}
+
+;;{{{ ifile
;;; check the ifile backend; return nil if the mail was NOT classified
;;; as spam
@@ -1388,9 +2168,6 @@ See `spam-ifile-database'."
(defun spam-check-ifile ()
"Check the ifile backend for the classification of this message."
(let ((article-buffer-name (buffer-name))
- (spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group))
category return)
(with-temp-buffer
(let ((temp-buffer-name (buffer-name))
@@ -1404,7 +2181,7 @@ See `spam-ifile-database'."
;; check the return now (we're back in the temp buffer)
(goto-char (point-min))
(if (not (eobp))
- (setq category (buffer-substring (point) (spam-point-at-eol))))
+ (setq category (buffer-substring (point) (point-at-eol))))
(when (not (zerop (length category))) ; we need a category here
(if spam-ifile-all-categories
(setq return category)
@@ -1443,8 +2220,9 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)."
(defun spam-ifile-unregister-ham-routine (articles)
(spam-ifile-register-ham-routine articles t))
-
-;;;; spam-stat
+;;}}}
+
+;;{{{ spam-stat
(eval-when-compile
(autoload 'spam-stat-buffer-change-to-non-spam "spam-stat")
@@ -1466,10 +2244,7 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)."
(defun spam-check-stat ()
"Check the spam-stat backend for the classification of this message"
- (let ((spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group))
- (spam-stat-split-fancy-spam-group spam-split-group) ; override
+ (let ((spam-stat-split-fancy-spam-group spam-split-group) ; override
(spam-stat-buffer (buffer-name)) ; stat the current buffer
category return)
(spam-stat-split-fancy)))
@@ -1504,9 +2279,9 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)."
(defun spam-maybe-spam-stat-save ()
(when spam-use-stat (spam-stat-save)))))
-
+;;}}}
-;;;; Blacklists and whitelists.
+;;{{{ Blacklists and whitelists.
(defvar spam-whitelist-cache nil)
(defvar spam-blacklist-cache nil)
@@ -1522,7 +2297,8 @@ Uses `gnus-newsgroup-name' if category is nil (for ham registration)."
With a non-nil REMOVE, remove them."
(interactive "sAddress: ")
(spam-enter-list address spam-whitelist remove)
- (setq spam-whitelist-cache nil))
+ (setq spam-whitelist-cache nil)
+ (spam-clear-cache 'spam-use-whitelist))
;;; address can be a list, too
(defun spam-enter-blacklist (address &optional remove)
@@ -1530,7 +2306,8 @@ With a non-nil REMOVE, remove them."
With a non-nil REMOVE, remove them."
(interactive "sAddress: ")
(spam-enter-list address spam-blacklist remove)
- (setq spam-blacklist-cache nil))
+ (setq spam-blacklist-cache nil)
+ (spam-clear-cache 'spam-use-whitelist))
(defun spam-enter-list (addresses file &optional remove)
"Enter ADDRESSES into the given FILE.
@@ -1559,29 +2336,50 @@ REMOVE not nil, remove the ADDRESSES."
(insert a "\n")))))
(save-buffer))))
+(defun spam-filelist-build-cache (type)
+ (let ((cache (if (eq type 'spam-use-blacklist)
+ spam-blacklist-cache
+ spam-whitelist-cache))
+ parsed-cache)
+ (unless (gethash type spam-caches)
+ (while cache
+ (let ((address (pop cache)))
+ (unless (zerop (length address)) ; 0 for a nil address too
+ (setq address (regexp-quote address))
+ ;; fix regexp-quote's treatment of user-intended regexes
+ (while (string-match "\\\\\\*" address)
+ (setq address (replace-match ".*" t t address))))
+ (push address parsed-cache)))
+ (puthash type parsed-cache spam-caches))))
+
+(defun spam-filelist-check-cache (type from)
+ (when (stringp from)
+ (spam-filelist-build-cache type)
+ (let (found)
+ (dolist (address (gethash type spam-caches))
+ (when (and address (string-match address from))
+ (setq found t)
+ (return)))
+ found)))
+
;;; returns t if the sender is in the whitelist, nil or
;;; spam-split-group otherwise
(defun spam-check-whitelist ()
;; FIXME! Should it detect when file timestamps change?
- (let ((spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group)))
- (unless spam-whitelist-cache
- (setq spam-whitelist-cache (spam-parse-list spam-whitelist)))
- (if (spam-from-listed-p spam-whitelist-cache)
- t
- (if spam-use-whitelist-exclusive
- spam-split-group
- nil))))
+ (unless spam-whitelist-cache
+ (setq spam-whitelist-cache (spam-parse-list spam-whitelist)))
+ (if (spam-from-listed-p 'spam-use-whitelist)
+ t
+ (if spam-use-whitelist-exclusive
+ spam-split-group
+ nil)))
(defun spam-check-blacklist ()
;; FIXME! Should it detect when file timestamps change?
- (let ((spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group)))
- (unless spam-blacklist-cache
- (setq spam-blacklist-cache (spam-parse-list spam-blacklist)))
- (and (spam-from-listed-p spam-blacklist-cache) spam-split-group)))
+ (unless spam-blacklist-cache
+ (setq spam-blacklist-cache (spam-parse-list spam-blacklist)))
+ (and (spam-from-listed-p 'spam-use-blacklist)
+ spam-split-group))
(defun spam-parse-list (file)
(when (file-readable-p file)
@@ -1589,7 +2387,7 @@ REMOVE not nil, remove the ADDRESSES."
(with-temp-buffer
(insert-file-contents file)
(while (not (eobp))
- (setq address (buffer-substring (point) (spam-point-at-eol)))
+ (setq address (buffer-substring (point) (point-at-eol)))
(forward-line 1)
;; insert the e-mail address if detected, otherwise the raw data
(unless (zerop (length address))
@@ -1597,20 +2395,10 @@ REMOVE not nil, remove the ADDRESSES."
(push (or pure-address address) contents)))))
(nreverse contents))))
-(defun spam-from-listed-p (cache)
- (let ((from (nnmail-fetch-field "from"))
+(defun spam-from-listed-p (type)
+ (let ((from (message-fetch-field "from"))
found)
- (while cache
- (let ((address (pop cache)))
- (unless (zerop (length address)) ; 0 for a nil address too
- (setq address (regexp-quote address))
- ;; fix regexp-quote's treatment of user-intended regexes
- (while (string-match "\\\\\\*" address)
- (setq address (replace-match ".*" t t address))))
- (when (and address (string-match address from))
- (setq found t
- cache nil))))
- found))
+ (spam-filelist-check-cache type from)))
(defun spam-filelist-register-routine (articles blacklist &optional unregister)
(let ((de-symbol (if blacklist 'spam-use-whitelist 'spam-use-blacklist))
@@ -1619,7 +2407,7 @@ REMOVE not nil, remove the ADDRESSES."
(if blacklist 'spam-enter-blacklist 'spam-enter-whitelist))
(remove-function
(if blacklist 'spam-enter-whitelist 'spam-enter-blacklist))
- from addresses unregister-list)
+ from addresses unregister-list article-unregister-list)
(dolist (article articles)
(let ((from (spam-fetch-field-from-fast article))
(id (spam-fetch-field-message-id-fast article))
@@ -1635,6 +2423,7 @@ REMOVE not nil, remove the ADDRESSES."
(null unregister)
(spam-log-unregistration-needed-p
id 'process declassification de-symbol))
+ (push article article-unregister-list)
(push from unregister-list))
(unless sender-ignored
(push from addresses)))))
@@ -1643,7 +2432,7 @@ REMOVE not nil, remove the ADDRESSES."
(funcall enter-function addresses t) ; unregister all these addresses
;; else, register normally and unregister what we need to
(funcall remove-function unregister-list t)
- (dolist (article unregister-list)
+ (dolist (article article-unregister-list)
(spam-log-undo-registration
(spam-fetch-field-message-id-fast article)
'process
@@ -1663,19 +2452,34 @@ REMOVE not nil, remove the ADDRESSES."
(defun spam-whitelist-register-routine (articles &optional unregister)
(spam-filelist-register-routine articles nil unregister))
-
-;;;; Spam-report glue
+;;}}}
+
+;;{{{ Spam-report glue (gmane and resend reporting)
(defun spam-report-gmane-register-routine (articles)
(when articles
- (apply 'spam-report-gmane articles)))
+ (apply 'spam-report-gmane-spam articles)))
+
+(defun spam-report-gmane-unregister-routine (articles)
+ (when articles
+ (apply 'spam-report-gmane-ham articles)))
+
+(defun spam-report-resend-register-ham-routine (articles)
+ (spam-report-resend-register-routine articles t))
+
+(defun spam-report-resend-register-routine (articles &optional ham)
+ (let* ((resend-to-gp
+ (if ham
+ (gnus-parameter-ham-resend-to gnus-newsgroup-name)
+ (gnus-parameter-spam-resend-to gnus-newsgroup-name)))
+ (spam-report-resend-to (or (car-safe resend-to-gp)
+ spam-report-resend-to)))
+ (spam-report-resend articles ham)))
-
-;;;; Bogofilter
+;;}}}
+
+;;{{{ Bogofilter
(defun spam-check-bogofilter-headers (&optional score)
- (let ((header (nnmail-fetch-field spam-bogofilter-header))
- (spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group)))
+ (let ((header (message-fetch-field spam-bogofilter-header)))
(when header ; return nil when no header
(if score ; scoring mode
(if (string-match "spamicity=\\([0-9.]+\\)" header)
@@ -1687,58 +2491,72 @@ REMOVE not nil, remove the ADDRESSES."
spam-split-group)))))
;; return something sensible if the score can't be determined
-(defun spam-bogofilter-score ()
+(defun spam-bogofilter-score (&optional recheck)
"Get the Bogofilter spamicity score"
- (interactive)
+ (interactive "P")
(save-window-excursion
(gnus-summary-show-article t)
(set-buffer gnus-article-buffer)
- (let ((score (or (spam-check-bogofilter-headers t)
+ (let ((score (or (unless recheck
+ (spam-check-bogofilter-headers t))
(spam-check-bogofilter t))))
+ (gnus-summary-show-article)
(message "Spamicity score %s" score)
- (or score "0"))
- (gnus-summary-show-article)))
-
+ (or score "0"))))
+
+(defun spam-verify-bogofilter ()
+ "Verify the Bogofilter version is sufficient."
+ (when (eq spam-bogofilter-valid 'unknown)
+ (setq spam-bogofilter-valid
+ (not (string-match "^bogofilter version 0\\.\\([0-9]\\|1[01]\\)\\."
+ (shell-command-to-string
+ (format "%s -V" spam-bogofilter-program))))))
+ spam-bogofilter-valid)
+
(defun spam-check-bogofilter (&optional score)
- "Check the Bogofilter backend for the classification of this message"
- (let ((article-buffer-name (buffer-name))
- (db spam-bogofilter-database-directory)
+ "Check the Bogofilter backend for the classification of this message."
+ (if (spam-verify-bogofilter)
+ (let ((article-buffer-name (buffer-name))
+ (db spam-bogofilter-database-directory)
+ return)
+ (with-temp-buffer
+ (let ((temp-buffer-name (buffer-name)))
+ (save-excursion
+ (set-buffer article-buffer-name)
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-bogofilter-program
+ nil temp-buffer-name nil
+ (if db `("-d" ,db "-v") `("-v"))))
+ (setq return (spam-check-bogofilter-headers score))))
return)
- (with-temp-buffer
- (let ((temp-buffer-name (buffer-name)))
- (save-excursion
- (set-buffer article-buffer-name)
- (apply 'call-process-region
- (point-min) (point-max)
- spam-bogofilter-program
- nil temp-buffer-name nil
- (if db `("-d" ,db "-v") `("-v"))))
- (setq return (spam-check-bogofilter-headers score))))
- return))
+ (gnus-error 5 "`spam.el' doesn't support obsolete bogofilter versions")))
(defun spam-bogofilter-register-with-bogofilter (articles
spam
&optional unregister)
"Register an article, given as a string, as spam or non-spam."
- (dolist (article articles)
- (let ((article-string (spam-get-article-as-string article))
- (db spam-bogofilter-database-directory)
- (switch (if unregister
- (if spam
- spam-bogofilter-spam-strong-switch
- spam-bogofilter-ham-strong-switch)
- (if spam
- spam-bogofilter-spam-switch
- spam-bogofilter-ham-switch))))
- (when (stringp article-string)
- (with-temp-buffer
- (insert article-string)
-
- (apply 'call-process-region
- (point-min) (point-max)
- spam-bogofilter-program
- nil nil nil switch
- (if db `("-d" ,db "-v") `("-v"))))))))
+ (if (spam-verify-bogofilter)
+ (dolist (article articles)
+ (let ((article-string (spam-get-article-as-string article))
+ (db spam-bogofilter-database-directory)
+ (switch (if unregister
+ (if spam
+ spam-bogofilter-spam-strong-switch
+ spam-bogofilter-ham-strong-switch)
+ (if spam
+ spam-bogofilter-spam-switch
+ spam-bogofilter-ham-switch))))
+ (when (stringp article-string)
+ (with-temp-buffer
+ (insert article-string)
+
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-bogofilter-program
+ nil nil nil switch
+ (if db `("-d" ,db "-v") `("-v")))))))
+ (gnus-error 5 "`spam.el' doesn't support obsolete bogofilter versions")))
(defun spam-bogofilter-register-spam-routine (articles &optional unregister)
(spam-bogofilter-register-with-bogofilter articles t unregister))
@@ -1753,14 +2571,12 @@ REMOVE not nil, remove the ADDRESSES."
(spam-bogofilter-register-ham-routine articles t))
-
-;;;; spamoracle
+;;}}}
+
+;;{{{ spamoracle
(defun spam-check-spamoracle ()
"Run spamoracle on an article to determine whether it's spam."
- (let ((article-buffer-name (buffer-name))
- (spam-split-group (if spam-split-symbolic-return
- 'spam
- spam-split-group)))
+ (let ((article-buffer-name (buffer-name)))
(with-temp-buffer
(let ((temp-buffer-name (buffer-name)))
(save-excursion
@@ -1816,13 +2632,283 @@ REMOVE not nil, remove the ADDRESSES."
(defun spam-spamoracle-unlearn-spam (articles &optional unregister)
(spam-spamoracle-learn-spam articles t))
-
-;;;; Hooks
+;;}}}
+
+;;{{{ SpamAssassin
+;;; based mostly on the bogofilter code
+(defun spam-check-spamassassin-headers (&optional score)
+ "Check the SpamAssassin headers for the classification of this message."
+ (if score ; scoring mode
+ (let ((header (message-fetch-field spam-spamassassin-spam-status-header)))
+ (when header
+ (if (string-match spam-spamassassin-score-regexp header)
+ (match-string 1 header)
+ "0")))
+ ;; spam detection mode
+ (let ((header (message-fetch-field spam-spamassassin-spam-flag-header)))
+ (when header ; return nil when no header
+ (when (string-match spam-spamassassin-positive-spam-flag-header
+ header)
+ spam-split-group)))))
+
+(defun spam-check-spamassassin (&optional score)
+ "Check the SpamAssassin backend for the classification of this message."
+ (let ((article-buffer-name (buffer-name)))
+ (with-temp-buffer
+ (let ((temp-buffer-name (buffer-name)))
+ (save-excursion
+ (set-buffer article-buffer-name)
+ (apply 'call-process-region
+ (point-min) (point-max) spam-assassin-program
+ nil temp-buffer-name nil spam-spamassassin-arguments))
+ ;; check the return now (we're back in the temp buffer)
+ (goto-char (point-min))
+ (spam-check-spamassassin-headers score)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-spamassassin-score (&optional recheck)
+ "Get the SpamAssassin score"
+ (interactive "P")
+ (save-window-excursion
+ (gnus-summary-show-article t)
+ (set-buffer gnus-article-buffer)
+ (let ((score (or (unless recheck
+ (spam-check-spamassassin-headers t))
+ (spam-check-spamassassin t))))
+ (gnus-summary-show-article)
+ (message "SpamAssassin score %s" score)
+ (or score "0"))))
+
+(defun spam-spamassassin-register-with-sa-learn (articles spam
+ &optional unregister)
+ "Register articles with spamassassin's sa-learn as spam or non-spam."
+ (if articles
+ (let ((action (if unregister spam-sa-learn-unregister-switch
+ (if spam spam-sa-learn-spam-switch
+ spam-sa-learn-ham-switch)))
+ (summary-buffer-name (buffer-name)))
+ (with-temp-buffer
+ ;; group the articles into mbox format
+ (dolist (article articles)
+ (let (article-string)
+ (save-excursion
+ (set-buffer summary-buffer-name)
+ (setq article-string (spam-get-article-as-string article)))
+ (when (stringp article-string)
+ (insert "From \n") ; mbox separator (sa-learn only checks the
+ ; first five chars, so we can get away with
+ ; a bogus line))
+ (insert article-string)
+ (insert "\n"))))
+ ;; call sa-learn on all messages at the same time
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-sa-learn-program
+ nil nil nil "--mbox"
+ (if spam-sa-learn-rebuild
+ (list action)
+ `("--no-rebuild" ,action)))))))
+
+(defun spam-spamassassin-register-spam-routine (articles &optional unregister)
+ (spam-spamassassin-register-with-sa-learn articles t unregister))
+
+(defun spam-spamassassin-register-ham-routine (articles &optional unregister)
+ (spam-spamassassin-register-with-sa-learn articles nil unregister))
+
+(defun spam-spamassassin-unregister-spam-routine (articles)
+ (spam-spamassassin-register-with-sa-learn articles t t))
+
+(defun spam-spamassassin-unregister-ham-routine (articles)
+ (spam-spamassassin-register-with-sa-learn articles nil t))
+
+;;}}}
+
+;;{{{ Bsfilter
+;;; based mostly on the bogofilter code
+(defun spam-check-bsfilter-headers (&optional score)
+ (if score
+ (or (nnmail-fetch-field spam-bsfilter-probability-header)
+ "0")
+ (let ((header (nnmail-fetch-field spam-bsfilter-header)))
+ (when header ; return nil when no header
+ (when (string-match "YES" header)
+ spam-split-group)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-bsfilter-score (&optional recheck)
+ "Get the Bsfilter spamicity score"
+ (interactive "P")
+ (save-window-excursion
+ (gnus-summary-show-article t)
+ (set-buffer gnus-article-buffer)
+ (let ((score (or (unless recheck
+ (spam-check-bsfilter-headers t))
+ (spam-check-bsfilter t))))
+ (gnus-summary-show-article)
+ (message "Spamicity score %s" score)
+ (or score "0"))))
+
+(defun spam-check-bsfilter (&optional score)
+ "Check the Bsfilter backend for the classification of this message"
+ (let ((article-buffer-name (buffer-name))
+ (dir spam-bsfilter-database-directory)
+ return)
+ (with-temp-buffer
+ (let ((temp-buffer-name (buffer-name)))
+ (save-excursion
+ (set-buffer article-buffer-name)
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-bsfilter-program
+ nil temp-buffer-name nil
+ "--pipe"
+ "--insert-flag"
+ "--insert-probability"
+ (when dir
+ (list "--homedir" dir))))
+ (setq return (spam-check-bsfilter-headers score))))
+ return))
+
+(defun spam-bsfilter-register-with-bsfilter (articles
+ spam
+ &optional unregister)
+ "Register an article, given as a string, as spam or non-spam."
+ (dolist (article articles)
+ (let ((article-string (spam-get-article-as-string article))
+ (switch (if unregister
+ (if spam
+ spam-bsfilter-spam-strong-switch
+ spam-bsfilter-ham-strong-switch)
+ (if spam
+ spam-bsfilter-spam-switch
+ spam-bsfilter-ham-switch))))
+ (when (stringp article-string)
+ (with-temp-buffer
+ (insert article-string)
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-bsfilter-program
+ nil nil nil switch
+ "--update"
+ (when spam-bsfilter-database-directory
+ (list "--homedir"
+ spam-bsfilter-database-directory))))))))
+
+(defun spam-bsfilter-register-spam-routine (articles &optional unregister)
+ (spam-bsfilter-register-with-bsfilter articles t unregister))
+
+(defun spam-bsfilter-unregister-spam-routine (articles)
+ (spam-bsfilter-register-spam-routine articles t))
+
+(defun spam-bsfilter-register-ham-routine (articles &optional unregister)
+ (spam-bsfilter-register-with-bsfilter articles nil unregister))
+
+(defun spam-bsfilter-unregister-ham-routine (articles)
+ (spam-bsfilter-register-ham-routine articles t))
+
+;;}}}
+
+;;{{{ CRM114 Mailfilter
+(defun spam-check-crm114-headers (&optional score)
+ (let ((header (message-fetch-field spam-crm114-header)))
+ (when header ; return nil when no header
+ (if score ; scoring mode
+ (if (string-match "( pR: \\([0-9.-]+\\)" header)
+ (match-string 1 header)
+ "0")
+ ;; spam detection mode
+ (when (string-match spam-crm114-positive-spam-header
+ header)
+ spam-split-group)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-crm114-score ()
+ "Get the CRM114 Mailfilter pR"
+ (interactive)
+ (save-window-excursion
+ (gnus-summary-show-article t)
+ (set-buffer gnus-article-buffer)
+ (let ((score (or (spam-check-crm114-headers t)
+ (spam-check-crm114 t))))
+ (gnus-summary-show-article)
+ (message "pR: %s" score)
+ (or score "0"))))
+
+(defun spam-check-crm114 (&optional score)
+ "Check the CRM114 Mailfilter backend for the classification of this message"
+ (let ((article-buffer-name (buffer-name))
+ (db spam-crm114-database-directory)
+ return)
+ (with-temp-buffer
+ (let ((temp-buffer-name (buffer-name)))
+ (save-excursion
+ (set-buffer article-buffer-name)
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-crm114-program
+ nil temp-buffer-name nil
+ (when db (list (concat "--fileprefix=" db)))))
+ (setq return (spam-check-crm114-headers score))))
+ return))
+
+(defun spam-crm114-register-with-crm114 (articles
+ spam
+ &optional unregister)
+ "Register an article, given as a string, as spam or non-spam."
+ (dolist (article articles)
+ (let ((article-string (spam-get-article-as-string article))
+ (db spam-crm114-database-directory)
+ (switch (if unregister
+ (if spam
+ spam-crm114-spam-strong-switch
+ spam-crm114-ham-strong-switch)
+ (if spam
+ spam-crm114-spam-switch
+ spam-crm114-ham-switch))))
+ (when (stringp article-string)
+ (with-temp-buffer
+ (insert article-string)
+
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-crm114-program
+ nil nil nil
+ (when db (list switch (concat "--fileprefix=" db)))))))))
+
+(defun spam-crm114-register-spam-routine (articles &optional unregister)
+ (spam-crm114-register-with-crm114 articles t unregister))
+
+(defun spam-crm114-unregister-spam-routine (articles)
+ (spam-crm114-register-spam-routine articles t))
+
+(defun spam-crm114-register-ham-routine (articles &optional unregister)
+ (spam-crm114-register-with-crm114 articles nil unregister))
+
+(defun spam-crm114-unregister-ham-routine (articles)
+ (spam-crm114-register-ham-routine articles t))
+
+;;}}}
+
+;;}}}
+
+;;{{{ Hooks
;;;###autoload
-(defun spam-initialize ()
- "Install the spam.el hooks and do other initialization"
+(defun spam-initialize (&rest symbols)
+ "Install the spam.el hooks and do other initialization.
+When SYMBOLS is given, set those variables to t. This is so you
+can call spam-initialize before you set spam-use-* variables on
+explicitly, and matters only if you need the extra headers
+installed through spam-necessary-extra-headers."
(interactive)
+
+ (dolist (var symbols)
+ (set var t))
+
+ (dolist (header (spam-necessary-extra-headers))
+ (add-to-list 'nnmail-extra-headers header)
+ (add-to-list 'gnus-extra-headers header))
+
(setq spam-install-hooks t)
;; TODO: How do we redo this every time the `spam' face is customized?
(push '((eq mark gnus-spam-mark) . spam)
@@ -1834,7 +2920,7 @@ REMOVE not nil, remove the ADDRESSES."
(add-hook 'gnus-summary-prepare-exit-hook 'spam-summary-prepare-exit)
(add-hook 'gnus-summary-prepare-hook 'spam-summary-prepare)
(add-hook 'gnus-get-new-news-hook 'spam-setup-widening)
- (add-hook 'gnus-summary-prepare-hook 'spam-find-spam))
+ (add-hook 'gnus-summary-prepared-hook 'spam-find-spam))
(defun spam-unload-hook ()
"Uninstall the spam.el hooks"
@@ -1851,6 +2937,7 @@ REMOVE not nil, remove the ADDRESSES."
(when spam-install-hooks
(spam-initialize))
+;;}}}
(provide 'spam)
diff --git a/lisp/gnus/utf7.el b/lisp/gnus/utf7.el
index dbe749cad69..deba6d131e4 100644
--- a/lisp/gnus/utf7.el
+++ b/lisp/gnus/utf7.el
@@ -209,20 +209,26 @@ Characters are in raw byte pairs in narrowed buffer."
(defun utf7-encode (string &optional for-imap)
"Encode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil."
- (let ((default-enable-multibyte-characters t))
- (with-temp-buffer
- (insert string)
- (utf7-encode-internal for-imap)
- (buffer-string))))
+ (if (and (coding-system-p 'utf-7) (coding-system-p 'utf-7-imap))
+ ;; Emacs 23 with proper support for IMAP
+ (encode-coding-string string (if for-imap 'utf-7-imap 'utf-7))
+ (let ((default-enable-multibyte-characters t))
+ (with-temp-buffer
+ (insert string)
+ (utf7-encode-internal for-imap)
+ (buffer-string)))))
(defun utf7-decode (string &optional for-imap)
"Decode UTF-7 STRING. Use IMAP modification if FOR-IMAP is non-nil."
- (let ((default-enable-multibyte-characters nil))
- (with-temp-buffer
- (insert string)
- (utf7-decode-internal for-imap)
- (mm-enable-multibyte)
- (buffer-string))))
+ (if (and (coding-system-p 'utf-7) (coding-system-p 'utf-7-imap))
+ ;; Emacs 23 with proper support for IMAP
+ (decode-coding-string string (if for-imap 'utf-7-imap 'utf-7))
+ (let ((default-enable-multibyte-characters nil))
+ (with-temp-buffer
+ (insert string)
+ (utf7-decode-internal for-imap)
+ (mm-enable-multibyte)
+ (buffer-string)))))
(provide 'utf7)
diff --git a/lisp/gnus/uudecode.el b/lisp/gnus/uudecode.el
index 1d1860d9a7e..74abeff6621 100644
--- a/lisp/gnus/uudecode.el
+++ b/lisp/gnus/uudecode.el
@@ -27,8 +27,6 @@
;;; Code:
-(autoload 'executable-find "executable")
-
(eval-when-compile (require 'cl))
(eval-and-compile
diff --git a/lisp/gnus/webmail.el b/lisp/gnus/webmail.el
index c238134749a..52b2ed82a79 100644
--- a/lisp/gnus/webmail.el
+++ b/lisp/gnus/webmail.el
@@ -196,10 +196,9 @@
(defun webmail-debug (str)
(with-temp-buffer
(insert "\n---------------- A bug at " str " ------------------\n")
- (mapcar #'(lambda (sym)
- (if (boundp sym)
- (gnus-pp `(setq ,sym ',(eval sym)))))
- '(webmail-type user))
+ (dolist (sym '(webmail-type user))
+ (if (boundp sym)
+ (gnus-pp `(setq ,sym ',(eval sym)))))
(insert "---------------- webmail buffer ------------------\n\n")
(insert-buffer-substring webmail-buffer)
(insert "\n---------------- end of buffer ------------------\n\n")
diff --git a/lisp/help-at-pt.el b/lisp/help-at-pt.el
index ee35e04dec0..f14b00ca83a 100644
--- a/lisp/help-at-pt.el
+++ b/lisp/help-at-pt.el
@@ -350,8 +350,6 @@ different regions. With numeric argument ARG, behaves like
(interactive "p")
(scan-buf-move-to-region 'help-echo (- arg) 'scan-buf-move-hook))
-(add-hook 'help-at-pt-unload-hook 'help-at-pt-cancel-timer)
-
(provide 'help-at-pt)
;;; arch-tag: d0b8b86d-d23f-45d0-a82d-208d6205a583
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index d84a861a019..0643b85672c 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -55,13 +55,12 @@
(message "You didn't specify a function")
(help-setup-xref (list #'describe-function function) (interactive-p))
(save-excursion
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(prin1 function)
;; Use " is " instead of a colon so that
;; it is easier to get out the function name using forward-sexp.
(princ " is ")
(describe-function-1 function)
- (print-help-return-message)
(with-current-buffer standard-output
;; Return the text we displayed.
(buffer-string))))))
@@ -232,10 +231,39 @@ face (according to `face-differs-from-default-p')."
libname)
file))))
+(defun find-source-lisp-file (file-name)
+ (let* ((elc-file (locate-file (concat file-name
+ (if (string-match "\\.el" file-name)
+ "c"
+ ".elc"))
+ load-path))
+ (str (if (and elc-file (file-readable-p elc-file))
+ (with-temp-buffer
+ (insert-file-contents-literally elc-file nil 0 256)
+ (buffer-string))))
+ (src-file (and str
+ (string-match ";;; from file \\(.*\\.el\\)" str)
+ (match-string 1 str))))
+ (if (and src-file (file-readable-p src-file))
+ src-file
+ file-name)))
+
+(declare-function ad-get-advice-info "emacs-lisp/advice" (function))
+
;;;###autoload
(defun describe-function-1 (function)
- (let* ((def (if (symbolp function)
- (symbol-function function)
+ (let* ((advised (and (featurep 'advice) (ad-get-advice-info function)))
+ ;; If the function is advised, use the symbol that has the
+ ;; real definition, if that symbol is already set up.
+ (real-function
+ (or (and advised
+ (cdr (assq 'origname advised))
+ (fboundp (cdr (assq 'origname advised)))
+ (cdr (assq 'origname advised)))
+ function))
+ ;; Get the real definition.
+ (def (if (symbolp real-function)
+ (symbol-function real-function)
function))
file-name string
(beg (if (commandp def) "an interactive " "a ")))
@@ -309,11 +337,15 @@ face (according to `face-differs-from-default-p')."
;; but that's completely wrong when the user used load-file.
(princ (if (eq file-name 'C-source) "C source code" file-name))
(princ "'")
+ ;; See if lisp files are present where they where installed from.
+ (if (not (eq file-name 'C-source))
+ (setq file-name (find-source-lisp-file file-name)))
+
;; Make a hyperlink to the library.
(with-current-buffer standard-output
(save-excursion
(re-search-backward "`\\([^`']+\\)'" nil t)
- (help-xref-button 1 'help-function-def function file-name))))
+ (help-xref-button 1 'help-function-def real-function file-name))))
(princ ".")
(terpri)
(when (commandp function)
@@ -362,8 +394,9 @@ face (according to `face-differs-from-default-p')."
((listp arglist)
(format "%S" (help-make-usage function arglist)))
((stringp arglist) arglist)
- ;; Maybe the arglist is in the docstring of the alias.
- ((let ((fun function))
+ ;; Maybe the arglist is in the docstring of a symbol
+ ;; this one is aliased to.
+ ((let ((fun real-function))
(while (and (symbolp fun)
(setq fun (symbol-function fun))
(not (setq usage (help-split-fundoc
@@ -424,11 +457,34 @@ If ANY-SYMBOL is non-nil, don't insist the symbol be bound."
(and (or any-symbol (boundp sym)) sym)))))
0))
+(defun describe-variable-custom-version-info (variable)
+ (let ((custom-version (get variable 'custom-version))
+ (cpv (get variable 'custom-package-version))
+ (output nil))
+ (if custom-version
+ (setq output
+ (format "This variable was introduced, or its default value was changed, in\nversion %s of Emacs.\n"
+ custom-version))
+ (when cpv
+ (let* ((package (car-safe cpv))
+ (version (car (cdr-safe cpv)))
+ (pkg-versions (assq package customize-package-emacs-version-alist))
+ (emacsv (cdr (assoc version pkg-versions))))
+ (if (and package version)
+ (setq output
+ (format (concat "This variable was introduced, or its default value was changed, in\nversion %s of the %s package"
+ (if emacsv
+ (format " that is part of Emacs %s" emacsv))
+ ".\n")
+ version package))))))
+ output))
+
;;;###autoload
-(defun describe-variable (variable &optional buffer)
+(defun describe-variable (variable &optional buffer frame)
"Display the full documentation of VARIABLE (a symbol).
Returns the documentation as a string, also.
-If VARIABLE has a buffer-local value in BUFFER (default to the current buffer),
+If VARIABLE has a buffer-local value in BUFFER or FRAME
+\(default to the current buffer and current frame),
it is displayed along with the global value."
(interactive
(let ((v (variable-at-point))
@@ -447,17 +503,22 @@ it is displayed along with the global value."
(list (if (equal val "")
v (intern val)))))
(unless (buffer-live-p buffer) (setq buffer (current-buffer)))
+ (unless (frame-live-p frame) (setq frame (selected-frame)))
(if (not (symbolp variable))
(message "You did not specify a variable")
(save-excursion
- (let* ((valvoid (not (with-current-buffer buffer (boundp variable))))
- ;; Extract the value before setting up the output buffer,
- ;; in case `buffer' *is* the output buffer.
- (val (unless valvoid (buffer-local-value variable buffer)))
- val-start-pos)
+ (let ((valvoid (not (with-current-buffer buffer (boundp variable))))
+ val val-start-pos locus)
+ ;; Extract the value before setting up the output buffer,
+ ;; in case `buffer' *is* the output buffer.
+ (unless valvoid
+ (with-selected-frame frame
+ (with-current-buffer buffer
+ (setq val (symbol-value variable)
+ locus (variable-binding-locus variable)))))
(help-setup-xref (list #'describe-variable variable buffer)
(interactive-p))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(with-current-buffer buffer
(prin1 variable)
;; Make a hyperlink to the library if appropriate. (Don't
@@ -516,11 +577,13 @@ it is displayed along with the global value."
(delete-region (1- from) from)))))
(terpri)
- (when (local-variable-p variable)
- (princ (format "%socal in buffer %s; "
- (if (get variable 'permanent-local)
- "Permanently l" "L")
- (buffer-name)))
+ (when locus
+ (if (bufferp locus)
+ (princ (format "%socal in buffer %s; "
+ (if (get variable 'permanent-local)
+ "Permanently l" "L")
+ (buffer-name)))
+ (princ (format "It is a frame-local variable; ")))
(if (not (default-boundp variable))
(princ "globally void")
(let ((val (default-value variable)))
@@ -536,14 +599,8 @@ it is displayed along with the global value."
;; See previous comment for this function.
;; (help-xref-on-pp from (point))
(if (< (point) (+ from 20))
- (delete-region (1- from) from)))))))
- ;; Add a note for variables that have been make-var-buffer-local.
- (when (and (local-variable-if-set-p variable)
- (or (not (local-variable-p variable))
- (with-temp-buffer
- (local-variable-if-set-p variable))))
- (princ "\nAutomatically becomes buffer-local when set in any fashion.\n"))
- (terpri)
+ (delete-region (1- from) from))))))
+ (terpri))
;; If the value is large, move it to the end.
(with-current-buffer standard-output
@@ -568,47 +625,67 @@ it is displayed along with the global value."
'follow-link t
'help-echo "mouse-2, RET: show value")
(insert ".\n")))
+ (terpri)
- ;; Mention if it's an alias
(let* ((alias (condition-case nil
(indirect-variable variable)
(error variable)))
(obsolete (get variable 'byte-obsolete-variable))
(safe-var (get variable 'safe-local-variable))
(doc (or (documentation-property variable 'variable-documentation)
- (documentation-property alias 'variable-documentation))))
+ (documentation-property alias 'variable-documentation)))
+ (extra-line nil))
+ ;; Add a note for variables that have been make-var-buffer-local.
+ (when (and (local-variable-if-set-p variable)
+ (or (not (local-variable-p variable))
+ (with-temp-buffer
+ (local-variable-if-set-p variable))))
+ (setq extra-line t)
+ (princ " Automatically becomes buffer-local when set in any fashion.\n"))
+
+ ;; Mention if it's an alias
(unless (eq alias variable)
- (princ (format "\nThis variable is an alias for `%s'.\n" alias)))
- (if (or obsolete safe-var)
- (terpri))
+ (setq extra-line t)
+ (princ (format " This variable is an alias for `%s'.\n" alias)))
(when obsolete
- (princ "This variable is obsolete")
+ (setq extra-line t)
+ (princ " This variable is obsolete")
(if (cdr obsolete) (princ (format " since %s" (cdr obsolete))))
- (princ ";") (terpri)
+ (princ ";\n ")
(princ (if (stringp (car obsolete)) (car obsolete)
(format "use `%s' instead." (car obsolete))))
(terpri))
(when safe-var
- (princ "This variable is safe as a file local variable ")
- (princ "if its value\nsatisfies the predicate ")
+ (setq extra-line t)
+ (princ " This variable is safe as a file local variable ")
+ (princ "if its value\n satisfies the predicate ")
(princ (if (byte-code-function-p safe-var)
"which is byte-compiled expression.\n"
(format "`%s'.\n" safe-var))))
- (princ "\nDocumentation:\n")
- (princ (or doc "Not documented as a variable.")))
+
+ (if extra-line (terpri))
+ (princ "Documentation:\n")
+ (with-current-buffer standard-output
+ (insert (or doc "Not documented as a variable."))))
;; Make a link to customize if this variable can be customized.
- (if (custom-variable-p variable)
- (let ((customize-label "customize"))
+ (when (custom-variable-p variable)
+ (let ((customize-label "customize"))
+ (terpri)
+ (terpri)
+ (princ (concat "You can " customize-label " this variable."))
+ (with-current-buffer standard-output
+ (save-excursion
+ (re-search-backward
+ (concat "\\(" customize-label "\\)") nil t)
+ (help-xref-button 1 'help-customize-variable variable))))
+ ;; Note variable's version or package version
+ (let ((output (describe-variable-custom-version-info variable)))
+ (when output
(terpri)
(terpri)
- (princ (concat "You can " customize-label " this variable."))
- (with-current-buffer standard-output
- (save-excursion
- (re-search-backward
- (concat "\\(" customize-label "\\)") nil t)
- (help-xref-button 1 'help-customize-variable variable)))))
- (print-help-return-message)
+ (princ output))))
+
(save-excursion
(set-buffer standard-output)
;; Return the text we displayed.
@@ -623,7 +700,7 @@ BUFFER defaults to the current buffer."
(interactive)
(setq buffer (or buffer (current-buffer)))
(help-setup-xref (list #'describe-syntax buffer) (interactive-p))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(let ((table (with-current-buffer buffer (syntax-table))))
(with-current-buffer standard-output
(describe-vector table 'internal-describe-syntax-value)
@@ -648,7 +725,7 @@ BUFFER should be a buffer or a buffer name."
(interactive)
(setq buffer (or buffer (current-buffer)))
(help-setup-xref (list #'describe-categories buffer) (interactive-p))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(let ((table (with-current-buffer buffer (category-table))))
(with-current-buffer standard-output
(describe-vector table 'help-describe-category-set)
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index 74daa9b8afb..bca0b5b65e6 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -40,6 +40,7 @@
(define-key help-mode-map [mouse-2] 'help-follow-mouse)
(define-key help-mode-map "\C-c\C-b" 'help-go-back)
+(define-key help-mode-map "\C-c\C-f" 'help-go-forward)
(define-key help-mode-map "\C-c\C-c" 'help-follow-symbol)
;; Documentation only, since we use minor-mode-overriding-map-alist.
(define-key help-mode-map "\r" 'help-follow)
@@ -52,13 +53,28 @@ To use the element, do (apply FUNCTION ARGS) then goto the point.")
(put 'help-xref-stack 'permanent-local t)
(make-variable-buffer-local 'help-xref-stack)
+(defvar help-xref-forward-stack nil
+ "The stack of used to navigate help forwards after using the back button.
+Used by `help-follow' and `help-xref-go-forward'.
+An element looks like (POSITION FUNCTION ARGS...).
+To use the element, do (apply FUNCTION ARGS) then goto the point.")
+(put 'help-xref-forward-stack 'permanent-local t)
+(make-variable-buffer-local 'help-xref-forward-stack)
+
(defvar help-xref-stack-item nil
"An item for `help-follow' in this buffer to push onto `help-xref-stack'.
The format is (FUNCTION ARGS...).")
(put 'help-xref-stack-item 'permanent-local t)
(make-variable-buffer-local 'help-xref-stack-item)
+(defvar help-xref-stack-forward-item nil
+ "An item for `help-go-back' to push onto `help-xref-forward-stack'.
+The format is (FUNCTION ARGS...).")
+(put 'help-xref-stack-forward-item 'permanent-local t)
+(make-variable-buffer-local 'help-xref-stack-forward-item)
+
(setq-default help-xref-stack nil help-xref-stack-item nil)
+(setq-default help-xref-forward-stack nil help-xref-forward-stack-item nil)
(defcustom help-mode-hook nil
"Hook run by `help-mode'."
@@ -123,6 +139,11 @@ The format is (FUNCTION ARGS...).")
'help-function #'help-xref-go-back
'help-echo (purecopy "mouse-2, RET: go back to previous help buffer"))
+(define-button-type 'help-forward
+ :supertype 'help-xref
+ 'help-function #'help-xref-go-forward
+ 'help-echo (purecopy "mouse-2, RET: move forward to next help buffer"))
+
(define-button-type 'help-info
:supertype 'help-xref
'help-function #'info
@@ -200,13 +221,22 @@ Commands:
(use-local-map help-mode-map)
(setq mode-name "Help")
(setq major-mode 'help-mode)
+
(view-mode)
- (make-local-variable 'view-no-disable-on-exit)
- (setq view-no-disable-on-exit t)
- (setq view-exit-action (lambda (buffer)
- (or (window-minibuffer-p (selected-window))
- (one-window-p t)
- (delete-window))))
+ (set (make-local-variable 'view-no-disable-on-exit) t)
+ ;; With Emacs 22 `view-exit-action' could delete the selected window
+ ;; disregarding whether the help buffer was shown in that window at
+ ;; all. Since `view-exit-action' is called with the help buffer as
+ ;; argument it seems more appropriate to have it work on the buffer
+ ;; only and leave it to `view-mode-exit' to delete any associated
+ ;; window(s).
+ (setq view-exit-action
+ (lambda (buffer)
+ ;; Use `with-current-buffer' to make sure that `bury-buffer'
+ ;; also removes BUFFER from the selected window.
+ (with-current-buffer buffer
+ (bury-buffer))))
+
(run-mode-hooks 'help-mode-hook))
;;;###autoload
@@ -216,16 +246,23 @@ Commands:
;;;###autoload
(defun help-mode-finish ()
- (let ((entry (assq (selected-window) view-return-to-alist)))
- (if entry
- ;; When entering Help mode from the Help window,
- ;; such as by following a link, preserve the same
- ;; meaning for the q command.
- ;; (setcdr entry (cons (selected-window) help-return-method))
- nil
- (setq view-return-to-alist
- (cons (cons (selected-window) help-return-method)
- view-return-to-alist))))
+ (if (eq help-window t)
+ ;; If `help-window' is t, `view-return-to-alist' is handled by
+ ;; `with-help-window'. In this case set `help-window' to the
+ ;; selected window since now is the only moment where we can
+ ;; unambiguously identify it.
+ (setq help-window (selected-window))
+ (let ((entry (assq (selected-window) view-return-to-alist)))
+ (if entry
+ ;; When entering Help mode from the Help window,
+ ;; such as by following a link, preserve the same
+ ;; meaning for the q command.
+ ;; (setcdr entry (cons (selected-window) help-return-method))
+ nil
+ (setq view-return-to-alist
+ (cons (cons (selected-window) help-return-method)
+ view-return-to-alist)))))
+
(when (eq major-mode 'help-mode)
;; View mode's read-only status of existing *Help* buffer is lost
;; by with-output-to-temp-buffer.
@@ -242,6 +279,9 @@ Commands:
(defvar help-back-label (purecopy "[back]")
"Label to use by `help-make-xrefs' for the go-back reference.")
+(defvar help-forward-label (purecopy "[forward]")
+ "Label to use by `help-make-xrefs' for the go-forward reference.")
+
(defconst help-xref-symbol-regexp
(purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|" ; Link to var
"\\(function\\|command\\)\\|" ; Link to function
@@ -286,7 +326,8 @@ because we want to record the \"previous\" position of point so we can
restore it properly when going back."
(with-current-buffer (help-buffer)
(when help-xref-stack-item
- (push (cons (point) help-xref-stack-item) help-xref-stack))
+ (push (cons (point) help-xref-stack-item) help-xref-stack)
+ (setq help-xref-forward-stack nil))
(when interactive-p
(let ((tail (nthcdr 10 help-xref-stack)))
;; Truncate the stack.
@@ -296,6 +337,7 @@ restore it properly when going back."
(defvar help-xref-following nil
"Non-nil when following a help cross-reference.")
+;;;###autoload
(defun help-buffer ()
(buffer-name ;for with-output-to-temp-buffer
(if help-xref-following
@@ -477,11 +519,19 @@ that."
(while (and (not (bobp)) (bolp))
(delete-char -1))
(insert "\n")
+ (when (or help-xref-stack help-xref-forward-stack)
+ (insert "\n"))
;; Make a back-reference in this buffer if appropriate.
(when help-xref-stack
- (insert "\n")
(help-insert-xref-button help-back-label 'help-back
- (current-buffer))
+ (current-buffer)))
+ ;; Make a forward-reference in this buffer if appropriate.
+ (when help-xref-forward-stack
+ (when help-xref-stack
+ (insert "\t"))
+ (help-insert-xref-button help-forward-label 'help-forward
+ (current-buffer)))
+ (when (or help-xref-stack help-xref-forward-stack)
(insert "\n")))
;; View mode steals RET from us.
(set (make-local-variable 'minor-mode-overriding-map-alist)
@@ -600,6 +650,7 @@ help buffer."
"From BUFFER, go back to previous help buffer text using `help-xref-stack'."
(let (item position method args)
(with-current-buffer buffer
+ (push (cons (point) help-xref-stack-item) help-xref-forward-stack)
(when help-xref-stack
(setq item (pop help-xref-stack)
;; Clear the current item so that it won't get pushed
@@ -615,6 +666,26 @@ help buffer."
(set-window-point (get-buffer-window buffer) position)
(goto-char position)))))
+(defun help-xref-go-forward (buffer)
+ "From BUFFER, go forward to next help buffer."
+ (let (item position method args)
+ (with-current-buffer buffer
+ (push (cons (point) help-xref-stack-item) help-xref-stack)
+ (when help-xref-forward-stack
+ (setq item (pop help-xref-forward-stack)
+ ;; Clear the current item so that it won't get pushed
+ ;; by the function we're about to call. TODO: We could also
+ ;; push it onto a "forward" stack and add a `forw' button.
+ help-xref-stack-item nil
+ position (car item)
+ method (cadr item)
+ args (cddr item))))
+ (apply method args)
+ (with-current-buffer buffer
+ (if (get-buffer-window buffer)
+ (set-window-point (get-buffer-window buffer) position)
+ (goto-char position)))))
+
(defun help-go-back ()
"Go back to previous topic in this help buffer."
(interactive)
@@ -622,6 +693,13 @@ help buffer."
(help-xref-go-back (current-buffer))
(error "No previous help buffer")))
+(defun help-go-forward ()
+ "Go back to next topic in this help buffer."
+ (interactive)
+ (if help-xref-forward-stack
+ (help-xref-go-forward (current-buffer))
+ (error "No next help buffer")))
+
(defun help-do-xref (pos function args)
"Call the help cross-reference function FUNCTION with args ARGS.
Things are set up properly so that the resulting help-buffer has
diff --git a/lisp/help.el b/lisp/help.el
index 8d8ea7c206f..ac6af2d9e50 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -38,6 +38,26 @@
(add-hook 'temp-buffer-setup-hook 'help-mode-setup)
(add-hook 'temp-buffer-show-hook 'help-mode-finish)
+;; The variable `help-window' below is used by `help-mode-finish' to
+;; communicate the window displaying help (the "help window") to the
+;; macro `with-help-window'. The latter sets `help-window' to t before
+;; invoking `with-output-to-temp-buffer'. If and only if `help-window'
+;; is eq to t, `help-mode-finish' (called by `temp-buffer-setup-hook')
+;; sets `help-window' to the window selected by `display-buffer'.
+;; Exiting `with-help-window' and calling `print-help-return-message'
+;; reset `help-window' to nil.
+(defvar help-window nil
+ "Window chosen for displaying help.")
+
+;; `help-window-point-marker' is a marker you can move to a valid
+;; position of the buffer shown in the help window in order to override
+;; the standard positioning mechanism (`point-min') chosen by
+;; `with-output-to-temp-buffer'. `with-help-window' has this point
+;; nowhere before exiting. Currently used by `view-lossage' to assert
+;; that the last keystrokes are always visible.
+(defvar help-window-point-marker (make-marker)
+ "Marker to override default `window-point' of `help-window'.")
+
(defvar help-map
(let ((map (make-sparse-keymap)))
(define-key map (char-to-string help-char) 'help-for-help)
@@ -124,6 +144,8 @@ It computes a message, and applies the optional argument FUNCTION to it.
If FUNCTION is nil, it applies `message', thus displaying the message.
In addition, this function sets up `help-return-method', which see, that
specifies what to do when the user exits the help buffer."
+ ;; Reset `help-window' here to avoid confusing `help-mode-finish'.
+ (setq help-window nil)
(and (not (get-buffer-window standard-output))
(let ((first-message
(cond ((or
@@ -334,7 +356,7 @@ With argument, display info only for the selected version."
(when (consp version)
(let* ((all-versions
(let (res)
- (mapcar
+ (mapc
(lambda (file)
(with-temp-buffer
(insert-file-contents
@@ -431,7 +453,7 @@ is specified by the variable `message-log-max'."
To record all your input on a file, use `open-dribble-file'."
(interactive)
(help-setup-xref (list #'view-lossage) (interactive-p))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(princ (mapconcat (lambda (key)
(if (or (integerp key) (symbolp key) (listp key))
(single-key-description key)
@@ -443,8 +465,9 @@ To record all your input on a file, use `open-dribble-file'."
(while (progn (move-to-column 50) (not (eobp)))
(when (search-forward " " nil t)
(delete-char -1))
- (insert "\n")))
- (print-help-return-message)))
+ (insert "\n"))
+ ;; jidanni wants to see the last keystrokes immediately.
+ (set-marker help-window-point-marker (point)))))
;; Key bindings
@@ -475,7 +498,7 @@ The optional argument PREFIX, if non-nil, should be a key sequence;
then we display only bindings that start with that prefix."
(interactive)
(let ((buf (current-buffer)))
- (with-output-to-temp-buffer "*Help*"
+ (with-help-window "*Help*"
(with-current-buffer standard-output
(describe-buffer-bindings buf prefix menus)))))
@@ -719,7 +742,7 @@ temporarily enables it to allow getting help on disabled items and buttons."
(setq sequence (vector up-event))
(aset sequence 0 'mouse-1)
(setq defn-up-tricky (key-binding sequence nil nil (event-start up-event))))))
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(princ (help-key-description key untranslated))
(princ (format "\
%s runs the command %S
@@ -755,8 +778,7 @@ runs the command %S
ev-type mouse-msg
mouse-1-click-follows-link
defn-up-tricky))
- (describe-function-1 defn-up-tricky)))
- (print-help-return-message)))))
+ (describe-function-1 defn-up-tricky)))))))
(defun describe-mode (&optional buffer)
"Display documentation of current major mode and minor modes.
@@ -773,7 +795,7 @@ whose documentation describes the minor mode."
(interactive-p))
;; For the sake of help-do-xref and help-xref-go-back,
;; don't switch buffers before calling `help-buffer'.
- (with-output-to-temp-buffer (help-buffer)
+ (with-help-window (help-buffer)
(with-current-buffer buffer
(let (minor-modes)
;; Older packages do not register in minor-mode-list but only in
@@ -841,8 +863,7 @@ whose documentation describes the minor mode."
(insert (format-mode-line mode))
(add-text-properties start (point) '(face bold)))))
(princ " mode:\n")
- (princ (documentation major-mode)))
- (print-help-return-message))))
+ (princ (documentation major-mode))))))
(defun describe-minor-mode (minor-mode)
@@ -975,6 +996,248 @@ out of view."
temp-buffer-max-height))))
+;;; help-window
+
+(defcustom help-window-select 'other
+ "Non-nil means select help window for viewing.
+Choices are:
+ never (nil) Select help window only if there is no other window
+ on its frame.
+ other Select help window unless the selected window is the
+ only other window on its frame.
+ always (t) Always select the help window.
+
+This option has effect if and only if the help window was created
+by `with-help-window'"
+ :type '(choice (const :tag "never (nil)" nil)
+ (const :tag "other" other)
+ (const :tag "always (t)" t))
+ :group 'help
+ :version "23.1")
+
+(defun help-window-display-message (quit-part window &optional other)
+ "Display message telling how to quit and scroll help window.
+QUIT-PART is a string telling how to quit the help window WINDOW.
+Optional argument OTHER non-nil means return text telling how to
+scroll the \"other\" window."
+ (let ((scroll-part
+ (cond
+ ((pos-visible-in-window-p
+ (with-current-buffer (window-buffer window)
+ (point-max)) window)
+ ;; Buffer end is visible.
+ ".")
+ (other ", \\[scroll-other-window] to scroll help.")
+ (t ", \\[scroll-up] to scroll help."))))
+ (message
+ (substitute-command-keys (concat quit-part scroll-part)))))
+
+(defun help-window-setup-finish (window &optional reuse keep-frame)
+ "Finish setting up help window WINDOW.
+Select WINDOW according to the value of `help-window-select'.
+Display message telling how to scroll and eventually quit WINDOW.
+
+Optional argument REUSE non-nil means WINDOW has been reused \(by
+`display-buffer'\) for displaying help. Optional argument
+KEEP-FRAME non-nil means that quitting must no delete the frame
+of WINDOW."
+ (let ((number-of-windows
+ (length (window-list (window-frame window) 'no-mini window))))
+ (cond
+ ((eq window (selected-window))
+ ;; The help window is the selected window, probably the
+ ;; `pop-up-windows' nil case.
+ (help-window-display-message
+ (if reuse
+ "Type \"q\" to restore this window"
+ ;; This should not be taken.
+ "Type \"q\" to quit") window))
+ ((= number-of-windows 1)
+ ;; The help window is alone on a frame and not the selected
+ ;; window, could be the `pop-up-frames' t case.
+ (help-window-display-message
+ (cond
+ (keep-frame "Type \"q\" to delete this window")
+ (reuse "Type \"q\" to restore this window")
+ (view-remove-frame-by-deleting "Type \"q\" to delete this frame")
+ (t "Type \"q\" to iconify this frame"))
+ window))
+ ((and (= number-of-windows 2)
+ (eq (window-frame window) (window-frame (selected-window))))
+ ;; There are two windows on the help window's frame and the other
+ ;; window is the selected one.
+ (if (memq help-window-select '(nil other))
+ ;; Do not select the help window.
+ (help-window-display-message
+ (if reuse
+ ;; Offer `display-buffer' for consistency with
+ ;; `print-help-return-message'. This is hardly TRT when
+ ;; the other window and the selected window display the
+ ;; same buffer but has been handled this way ever since.
+ "Type \\[display-buffer] RET to restore the other window"
+ ;; The classic "two windows" configuration.
+ "Type \\[delete-other-windows] to delete the help window")
+ window t)
+ ;; Select help window and tell how to quit.
+ (select-window window)
+ (help-window-display-message
+ (if reuse
+ "Type \"q\" to restore this window"
+ "Type \"q\" to delete this window") window)))
+ (help-window-select
+ ;; Issuing a message with 3 or more windows on the same frame
+ ;; without selecting the help window doesn't make any sense.
+ (select-window window)
+ (help-window-display-message
+ (if reuse
+ "Type \"q\" to restore this window"
+ "Type \"q\" to delete this window") window)))))
+
+(defun help-window-setup (list-of-frames list-of-window-tuples)
+ "Set up help window.
+LIST-OF-FRAMES and LIST-OF-WINDOW-TUPLES are the lists of frames
+and window quadruples built by `with-help-window'. The help
+window itself is specified by the variable `help-window'."
+ (let* ((help-buffer (window-buffer help-window))
+ ;; `help-buffer' now denotes the help window's buffer.
+ (view-entry
+ (assq help-window
+ (buffer-local-value 'view-return-to-alist help-buffer)))
+ (help-entry (assq help-window list-of-window-tuples)))
+
+ ;; Handle `help-window-point-marker'.
+ (when (eq (marker-buffer help-window-point-marker) help-buffer)
+ (set-window-point help-window help-window-point-marker)
+ ;; Reset `help-window-point-marker'.
+ (set-marker help-window-point-marker nil))
+
+ (cond
+ (view-entry
+ ;; `view-return-to-alist' has an entry for the help window.
+ (cond
+ ((eq help-window (selected-window))
+ ;; The help window is the selected window, probably because the
+ ;; user followed a backward/forward button or a cross reference.
+ ;; In this case just purge stale entries from
+ ;; `view-return-to-alist' but leave the entry alone and don't
+ ;; display a message.
+ (view-return-to-alist-update help-buffer))
+ ((and help-entry (eq (cadr help-entry) help-buffer))
+ ;; The help window was not selected but displayed the help
+ ;; buffer. In this case reuse existing exit information but try
+ ;; to get back to the selected window when quitting. Don't
+ ;; display a message since the user must have seen one before.
+ (view-return-to-alist-update
+ help-buffer (cons help-window
+ (cons (selected-window) (cddr view-entry)))))
+ (help-entry
+ ;; The help window was not selected, did display the help buffer
+ ;; earlier, but displayed another buffer when help was invoked.
+ ;; Set up things so that quitting will show that buffer again.
+ (view-return-to-alist-update
+ help-buffer (cons help-window
+ (cons (selected-window) (cdr help-entry))))
+ (help-window-setup-finish help-window t))
+ (t
+ ;; The help window is new but `view-return-to-alist' had an
+ ;; entry for it. This should never happen.
+ (view-return-to-alist-update
+ help-buffer (cons help-window
+ (cons (selected-window) 'quit-window)))
+ (help-window-setup-finish help-window t))))
+ (help-entry
+ ;; `view-return-to-alist' does not have an entry for help window
+ ;; but `list-of-window-tuples' does. Hence `display-buffer' must
+ ;; have reused an existing window.
+ (if (eq (cadr help-entry) help-buffer)
+ ;; The help window displayed `help-buffer' before but no
+ ;; `view-return-to-alist' entry was found probably because the
+ ;; user manually switched to the help buffer. Set up things
+ ;; for `quit-window' although `view-exit-action' should be
+ ;; able to handle this case all by itself.
+ (progn
+ (view-return-to-alist-update
+ help-buffer (cons help-window
+ (cons (selected-window) 'quit-window)))
+ (help-window-setup-finish help-window t))
+ ;; The help window displayed another buffer before. Set up
+ ;; things in a way that quitting can orderly show that buffer
+ ;; again. The window-start and window-point information from
+ ;; `list-of-window-tuples' provide the necessary information.
+ (view-return-to-alist-update
+ help-buffer (cons help-window
+ (cons (selected-window) (cdr help-entry))))
+ (help-window-setup-finish help-window t)))
+ ((memq (window-frame help-window) list-of-frames)
+ ;; The help window is a new window on an existing frame. This
+ ;; case must be handled specially by `help-window-setup-finish'
+ ;; and `view-mode-exit' to ascertain that quitting does _not_
+ ;; inadvertently delete the frame.
+ (view-return-to-alist-update
+ help-buffer (cons help-window
+ (cons (selected-window) 'keep-frame)))
+ (help-window-setup-finish help-window nil t))
+ (t
+ ;; The help window is shown on a new frame. In this case quitting
+ ;; shall handle both, the help window _and_ its frame. We changed
+ ;; the default of `view-remove-frame-by-deleting' to t in order to
+ ;; intuitively DTRT here.
+ (view-return-to-alist-update
+ help-buffer (cons help-window (cons (selected-window) t)))
+ (help-window-setup-finish help-window)))))
+
+;; `with-help-window' is a wrapper for `with-output-to-temp-buffer'
+;; providing the following additional twists:
+
+;; (1) Issue more accurate messages telling how to scroll and quit the
+;; help window.
+
+;; (2) Make `view-mode-exit' DTRT in more cases.
+
+;; (3) An option (customizable via `help-window-select') to select the
+;; help window automatically.
+
+;; (4) A marker (`help-window-point-marker') to move point in the help
+;; window to an arbitrary buffer position.
+
+;; Note: It's usually always wrong to use `print-help-return-message' in
+;; the body of `with-help-window'.
+(defmacro with-help-window (buffer-name &rest body)
+ "Display buffer BUFFER-NAME in a help window evaluating BODY.
+Select help window if the actual value of the user option
+`help-window-select' says so."
+ (declare (indent 1) (debug t))
+ ;; Bind list-of-frames to `frame-list' and list-of-window-tuples to a
+ ;; list of one <window window-buffer window-start window-point> tuple
+ ;; for each live window.
+ `(let ((list-of-frames (frame-list))
+ (list-of-window-tuples
+ (let (list)
+ (walk-windows
+ (lambda (window)
+ (push (list window (window-buffer window)
+ (window-start window) (window-point window))
+ list))
+ 'no-mini t)
+ list)))
+ ;; We set `help-window' to t in order to trigger `help-mode-finish'
+ ;; to set `help-window' to the actual help window.
+ (setq help-window t)
+ ;; Make `help-window-point-marker' point nowhere (the only place
+ ;; where this should be set to a buffer position is within BODY).
+ (set-marker help-window-point-marker nil)
+
+ (with-output-to-temp-buffer ,buffer-name
+ (progn ,@body))
+
+ (when (windowp help-window)
+ ;; Set up help window.
+ (help-window-setup list-of-frames list-of-window-tuples))
+
+ ;; Reset `help-window' to nil to avoid confusing future calls of
+ ;; `help-mode-finish' by "plain" `with-output-to-temp-buffer'.
+ (setq help-window nil)))
+
(provide 'help)
;; arch-tag: cf427352-27e9-49b7-9a6f-741ebab02423
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 522a50b9a7f..d65dd01ee1c 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -309,7 +309,7 @@ called interactively, are:
Write active REGEXPs into buffer as comments (if possible). They may
be read the next time file is loaded or when the \\[hi-lock-find-patterns] command
is issued. The inserted regexps are in the form of font lock keywords.
- (See `font-lock-keywords'.) They may be edited and re-loaded with \\[hi-lock-find-patterns],
+ (See `font-lock-keywords'.) They may be edited and re-loaded with \\[hi-lock-find-patterns],
any valid `font-lock-keywords' form is acceptable. When a file is
loaded the patterns are read if `hi-lock-file-patterns-policy is
'ask and the user responds y to the prompt, or if
@@ -462,7 +462,7 @@ interactive functions. \(See `hi-lock-interactive-patterns'.\)
\\<minibuffer-local-must-match-map>Use \\[minibuffer-complete] to complete a partially typed regexp.
\(See info node `Minibuffer History'.\)"
(interactive
- (if (and (display-popup-menus-p) (vectorp (this-command-keys)))
+ (if (and (display-popup-menus-p) (not last-nonmenu-event))
(catch 'snafu
(or
(x-popup-menu
@@ -515,7 +515,7 @@ be found in variable `hi-lock-interactive-patterns'."
(if (null hi-lock-interactive-patterns)
(error "There are no interactive patterns"))
(let ((beg (point)))
- (mapcar
+ (mapc
(lambda (pattern)
(insert (format "%s: (%s)\n"
hi-lock-file-patterns-prefix
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index feebab40b43..6a34ca0f4e4 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -224,13 +224,12 @@ Currently, this only applies to `ibuffer-saved-filters' and
(defun ibuffer-auto-update-changed ()
(when (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed)
- (mapcar #'(lambda (buf)
- (ignore-errors
- (with-current-buffer buf
- (when (and ibuffer-auto-mode
- (eq major-mode 'ibuffer-mode))
- (ibuffer-update nil t)))))
- (buffer-list))))
+ (dolist (buf (buffer-list))
+ (ignore-errors
+ (with-current-buffer buf
+ (when (and ibuffer-auto-mode
+ (eq major-mode 'ibuffer-mode))
+ (ibuffer-update nil t)))))))
;;;###autoload
(defun ibuffer-auto-mode (&optional arg)
@@ -243,7 +242,7 @@ With numeric ARG, enable auto-update if and only if ARG is positive."
(if arg
(plusp arg)
(not ibuffer-auto-mode)))
- (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed)
+ (frame-or-buffer-changed-p 'ibuffer-auto-buffers-changed) ; Initialize state vector
(add-hook 'post-command-hook 'ibuffer-auto-update-changed)
(ibuffer-update-mode-name))
diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el
index 80133d227ab..b09a3e26979 100644
--- a/lisp/ibuffer.el
+++ b/lisp/ibuffer.el
@@ -55,6 +55,13 @@
(defvar ibuffer-tmp-hide-regexps)
(defvar ibuffer-tmp-show-regexps)
+(declare-function ibuffer-mark-on-buffer "ibuf-ext"
+ (func &optional ibuffer-mark-on-buffer-mark group))
+(declare-function ibuffer-format-qualifier "ibuf-ext" (qualifier))
+(declare-function ibuffer-generate-filter-groups "ibuf-ext"
+ (bmarklist &optional noempty nodefault))
+(declare-function ibuffer-format-filter-group-data "ibuf-ext" (filter))
+
(defgroup ibuffer nil
"An advanced replacement for `buffer-menu'.
diff --git a/lisp/ido.el b/lisp/ido.el
index 9b1f6a634aa..af8936b86d9 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -2281,9 +2281,10 @@ If cursor is not at the end of the user input, move to end of input."
filename t))
((and ido-use-filename-at-point
- (setq fn (if (eq ido-use-filename-at-point 'guess)
- (with-no-warnings (ffap-guesser))
- (ffap-string-at-point)))
+ (setq fn (with-no-warnings
+ (if (eq ido-use-filename-at-point 'guess)
+ (ffap-guesser)
+ (ffap-string-at-point))))
(not (string-match "^http:/" fn))
(setq d (file-name-directory fn))
(file-directory-p d))
@@ -3355,7 +3356,7 @@ for first matching file."
(defun ido-to-end (items)
;; Move the elements from ITEMS to the end of `ido-temp-list'
- (mapcar
+ (mapc
(lambda (elem)
(setq ido-temp-list (delq elem ido-temp-list)))
items)
@@ -3363,6 +3364,8 @@ for first matching file."
(nconc ido-temp-list items)
(setq ido-temp-list items)))
+(declare-function tramp-tramp-file-p "net/tramp" (name))
+
(defun ido-file-name-all-completions-1 (dir)
(cond
((ido-nonreadable-directory-p dir) '())
@@ -3604,7 +3607,7 @@ for first matching file."
full-matches suffix-matches prefix-matches matches)
(setq ido-incomplete-regexp nil)
(condition-case error
- (mapcar
+ (mapc
(lambda (item)
(let ((name (ido-name item)))
(if (and (or non-prefix-dot
@@ -3649,7 +3652,7 @@ for first matching file."
(setq re (mapconcat #'regexp-quote (split-string ido-text "") ".*"))
(if ido-enable-prefix
(setq re (concat "\\`" re)))
- (mapcar
+ (mapc
(lambda (item)
(let ((name (ido-name item)))
(if (string-match re name)
diff --git a/lisp/ielm.el b/lisp/ielm.el
index 98df0d1e3d4..a734f87ad92 100644
--- a/lisp/ielm.el
+++ b/lisp/ielm.el
@@ -169,7 +169,7 @@ This variable is buffer-local.")
(defvar ielm-map nil)
(if ielm-map nil
- (if (string-match "Lucid" emacs-version)
+ (if (featurep 'xemacs)
;; Lemacs
(progn
(setq ielm-map (make-sparse-keymap))
diff --git a/lisp/iimage.el b/lisp/iimage.el
index 29d98cbda69..f662d9f1042 100644
--- a/lisp/iimage.el
+++ b/lisp/iimage.el
@@ -109,11 +109,7 @@ Examples of image filename regexps:
(interactive)
(iimage-mode 0))
-;; Emacs21.3 or earlier does not heve locate-file.
-(if (fboundp 'locate-file)
- (defalias 'iimage-locate-file 'locate-file)
- (defun iimage-locate-file (filename path)
- (locate-library filename t path)))
+(defalias 'iimage-locate-file 'locate-file)
(defun iimage-mode-buffer (arg)
"Display/undisplay images.
diff --git a/lisp/image-dired.el b/lisp/image-dired.el
index 266096858e7..82bfbfb20af 100644
--- a/lisp/image-dired.el
+++ b/lisp/image-dired.el
@@ -166,7 +166,7 @@
:prefix "image-dired-"
:group 'multimedia)
-(defcustom image-dired-dir "~/.emacs.d/image-dired/"
+(defcustom image-dired-dir (concat user-emacs-directory "image-dired/")
"Directory where thumbnail images are stored."
:type 'string
:group 'image-dired)
@@ -187,17 +187,20 @@ that allows sharing of thumbnails across different programs."
(const :tag "Per-directory" per-directory))
:group 'image-dired)
-(defcustom image-dired-db-file "~/.emacs.d/image-dired/.image-dired_db"
+(defcustom image-dired-db-file
+ (concat user-emacs-directory "image-dired/.image-dired_db")
"Database file where file names and their associated tags are stored."
:type 'string
:group 'image-dired)
-(defcustom image-dired-temp-image-file "~/.emacs.d/image-dired/.image-dired_temp"
+(defcustom image-dired-temp-image-file
+ (concat user-emacs-directory "image-dired/.image-dired_temp")
"Name of temporary image file used by various commands."
:type 'string
:group 'image-dired)
-(defcustom image-dired-gallery-dir "~/.emacs.d/image-dired/.image-dired_gallery"
+(defcustom image-dired-gallery-dir
+ (concat user-emacs-directory "image-dired/.image-dired_gallery")
"Directory to store generated gallery html pages.
This path needs to be \"shared\" to the public so that it can access
the index.html page that image-dired creates."
@@ -342,7 +345,7 @@ original image file name and %t which is replaced by
:group 'image-dired)
(defcustom image-dired-temp-rotate-image-file
- "~/.emacs.d/image-dired/.image-dired_rotate_temp"
+ (concat user-emacs-directory "image-dired/.image-dired_rotate_temp")
"Temporary file for rotate operations."
:type 'string
:group 'image-dired)
@@ -817,7 +820,7 @@ thumbnail buffer to be selected."
(if (not append)
(erase-buffer)
(goto-char (point-max)))
- (mapcar
+ (mapc
(lambda (curr-file)
(setq thumb-name (image-dired-thumb-name curr-file))
(if (and (not (file-exists-p thumb-name))
@@ -915,7 +918,7 @@ is an alist in the following form:
(if (stringp files)
(setq files (list files))
(error "Files must be a string or a list of strings!")))
- (mapcar
+ (mapc
(lambda (file)
(goto-char (point-min))
(when (search-forward-regexp
@@ -1134,7 +1137,7 @@ image."
(defun image-dired-next-line ()
"Move to next line and display properties."
(interactive)
- (next-line 1)
+ (forward-line 1)
;; If we end up in an empty spot, back up to the next thumbnail.
(if (not (image-dired-image-at-point-p))
(image-dired-backward-image))
@@ -1146,7 +1149,7 @@ image."
(defun image-dired-previous-line ()
"Move to previous line and display properties."
(interactive)
- (previous-line 1)
+ (forward-line -1)
;; If we end up in an empty spot, back up to the next
;; thumbnail. This should only happen if the user deleted a
;; thumbnail and did not refresh, so it is not very common. But we
@@ -2167,7 +2170,7 @@ matching tags will be marked in the dired buffer."
(setq files (append (list (match-string 1)) files)))
(kill-buffer buf)
;; Mark files
- (mapcar
+ (mapc
;; I tried using `dired-mark-files-regexp' but it was
;; waaaay to slow.
(lambda (curr-file)
diff --git a/lisp/image-file.el b/lisp/image-file.el
index db6c925520a..fd33033b80d 100644
--- a/lisp/image-file.el
+++ b/lisp/image-file.el
@@ -39,7 +39,7 @@
;;;###autoload
(defcustom image-file-name-extensions
- '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm")
+ '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg")
"*A list of image-file filename extensions.
Filenames having one of these extensions are considered image files,
in addition to those matching `image-file-name-regexps'.
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index fdfbc145ace..283f6ae3ff1 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -41,8 +41,13 @@
;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist)
;;;###autoload (push '("\\.tiff?\\'" . image-mode) auto-mode-alist)
;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist)
+
+;;;###autoload (push '("\\.x[bp]m\\'" . c-mode) auto-mode-alist)
;;;###autoload (push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist)
+;;;###autoload (push '("\\.svgz?\\'" . xml-mode) auto-mode-alist)
+;;;###autoload (push '("\\.svgz?\\'" . image-mode-maybe) auto-mode-alist)
+
;;; Image scrolling functions
(defun image-forward-hscroll (&optional n)
@@ -51,13 +56,14 @@ Stop if the right edge of the image is reached."
(interactive "p")
(cond ((= n 0) nil)
((< n 0)
- (set-window-hscroll nil (max 0 (+ (window-hscroll) n))))
+ (set-window-hscroll (selected-window)
+ (max 0 (+ (window-hscroll) n))))
(t
- (let* ((image (get-text-property 1 'display))
- (img-width (ceiling (car (image-size image))))
+ (let* ((image (get-char-property (point-min) 'display))
(edges (window-inside-edges))
- (win-width (- (nth 2 edges) (nth 0 edges))))
- (set-window-hscroll nil
+ (win-width (- (nth 2 edges) (nth 0 edges)))
+ (img-width (ceiling (car (image-size image)))))
+ (set-window-hscroll (selected-window)
(min (max 0 (- img-width win-width))
(+ n (window-hscroll))))))))
@@ -73,13 +79,14 @@ Stop if the bottom edge of the image is reached."
(interactive "p")
(cond ((= n 0) nil)
((< n 0)
- (set-window-vscroll nil (max 0 (+ (window-vscroll) n))))
+ (set-window-vscroll (selected-window)
+ (max 0 (+ (window-vscroll) n))))
(t
- (let* ((image (get-text-property 1 'display))
- (img-height (ceiling (cdr (image-size image))))
+ (let* ((image (get-char-property (point-min) 'display))
(edges (window-inside-edges))
- (win-height (- (nth 3 edges) (nth 1 edges))))
- (set-window-vscroll nil
+ (win-height (- (nth 3 edges) (nth 1 edges)))
+ (img-height (ceiling (cdr (image-size image)))))
+ (set-window-vscroll (selected-window)
(min (max 0 (- img-height win-height))
(+ n (window-vscroll))))))))
@@ -149,7 +156,7 @@ stopping if the top or bottom edge of the image is reached."
(and arg
(/= (setq arg (prefix-numeric-value arg)) 1)
(image-next-line (- arg 1)))
- (let* ((image (get-text-property 1 'display))
+ (let* ((image (get-char-property (point-min) 'display))
(edges (window-inside-edges))
(win-width (- (nth 2 edges) (nth 0 edges)))
(img-width (ceiling (car (image-size image)))))
@@ -165,7 +172,7 @@ stopping if the top or bottom edge of the image is reached."
(defun image-eob ()
"Scroll to the bottom-right corner of the image in the current window."
(interactive)
- (let* ((image (get-text-property 1 'display))
+ (let* ((image (get-char-property (point-min) 'display))
(edges (window-inside-edges))
(win-width (- (nth 2 edges) (nth 0 edges)))
(img-width (ceiling (car (image-size image))))
@@ -176,6 +183,11 @@ stopping if the top or bottom edge of the image is reached."
;;; Image Mode setup
+(defvar image-type nil
+ "Current image type.
+This variable is used to display the current image type in the mode line.")
+(make-variable-buffer-local 'image-type)
+
(defvar image-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-c\C-c" 'image-toggle-display)
@@ -205,11 +217,11 @@ You can use \\<image-mode-map>\\[image-toggle-display]
to toggle between display as an image and display as text."
(interactive)
(kill-all-local-variables)
- (setq mode-name "Image")
+ (setq mode-name "Image[text]")
(setq major-mode 'image-mode)
(add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
(if (and (display-images-p)
- (not (get-text-property (point-min) 'display)))
+ (not (get-char-property (point-min) 'display)))
(image-toggle-display)
;; Set next vars when image is already displayed but local
;; variables were cleared by kill-all-local-variables
@@ -220,7 +232,7 @@ to toggle between display as an image and display as text."
(message "%s" (concat
(substitute-command-keys
"Type \\[image-toggle-display] to view as ")
- (if (get-text-property (point-min) 'display)
+ (if (get-char-property (point-min) 'display)
"text" "an image") "."))))
;;;###autoload
@@ -228,17 +240,18 @@ to toggle between display as an image and display as text."
"Toggle Image minor mode.
With arg, turn Image minor mode on if arg is positive, off otherwise.
See the command `image-mode' for more information on this mode."
- nil " Image" image-mode-text-map
+ nil (:eval (format " Image[%s]" image-type)) image-mode-text-map
:group 'image
:version "22.1"
(if (not image-minor-mode)
(image-toggle-display-text)
- (if (get-text-property (point-min) 'display)
- (setq cursor-type nil truncate-lines t))
+ (if (get-char-property (point-min) 'display)
+ (setq cursor-type nil truncate-lines t)
+ (setq image-type "text"))
(add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t)
(message "%s" (concat (substitute-command-keys
"Type \\[image-toggle-display] to view the image as ")
- (if (get-text-property (point-min) 'display)
+ (if (get-char-property (point-min) 'display)
"text" "an image") "."))))
;;;###autoload
@@ -268,7 +281,7 @@ information on these modes."
(defun image-toggle-display-text ()
"Showing the text of the image file."
- (if (get-text-property (point-min) 'display)
+ (if (get-char-property (point-min) 'display)
(image-toggle-display)))
(defvar archive-superior-buffer)
@@ -279,7 +292,7 @@ information on these modes."
This command toggles between showing the text of the image file
and showing the image as an image."
(interactive)
- (if (get-text-property (point-min) 'display)
+ (if (get-char-property (point-min) 'display)
(let ((inhibit-read-only t)
(buffer-undo-list t)
(modified (buffer-modified-p)))
@@ -291,30 +304,33 @@ and showing the image as an image."
(kill-local-variable 'truncate-lines)
(kill-local-variable 'auto-hscroll-mode)
(use-local-map image-mode-text-map)
+ (setq image-type "text")
+ (if (eq major-mode 'image-mode)
+ (setq mode-name "Image[text]"))
(if (called-interactively-p)
(message "Repeat this command to go back to displaying the image")))
;; Turn the image data into a real image, but only if the whole file
;; was inserted
(let* ((filename (buffer-file-name))
- (image
- (if (and filename
- (file-readable-p filename)
- (not (file-remote-p filename))
- (not (buffer-modified-p))
- (not (and (boundp 'archive-superior-buffer)
- archive-superior-buffer))
- (not (and (boundp 'tar-superior-buffer)
- tar-superior-buffer)))
- (create-image filename)
- (create-image
- (string-make-unibyte
- (buffer-substring-no-properties (point-min) (point-max)))
- nil t)))
+ (data-p (not (and filename
+ (file-readable-p filename)
+ (not (file-remote-p filename))
+ (not (buffer-modified-p))
+ (not (and (boundp 'archive-superior-buffer)
+ archive-superior-buffer))
+ (not (and (boundp 'tar-superior-buffer)
+ tar-superior-buffer)))))
+ (file-or-data (if data-p
+ (string-make-unibyte
+ (buffer-substring-no-properties (point-min) (point-max)))
+ filename))
+ (type (image-type file-or-data nil data-p))
+ (image (create-image file-or-data type data-p))
(props
`(display ,image
- intangible ,image
- rear-nonsticky (display intangible)
- read-only t front-sticky (read-only)))
+ intangible ,image
+ rear-nonsticky (display intangible)
+ read-only t front-sticky (read-only)))
(inhibit-read-only t)
(buffer-undo-list t)
(modified (buffer-modified-p)))
@@ -330,6 +346,9 @@ and showing the image as an image."
;; Allow navigation of large images
(set (make-local-variable 'auto-hscroll-mode) nil)
(use-local-map image-mode-map)
+ (setq image-type type)
+ (if (eq major-mode 'image-mode)
+ (setq mode-name (format "Image[%s]" type)))
(if (called-interactively-p)
(message "Repeat this command to go back to displaying the file as text")))))
diff --git a/lisp/image.el b/lisp/image.el
index 480b5610311..99632b84307 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -34,7 +34,7 @@
(defconst image-type-header-regexps
- '(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
+ `(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
("\\`P[1-6][[:space:]]+\\(?:#.*[[:space:]]+\\)*[0-9]+[[:space:]]+[0-9]+" . pbm)
("\\`GIF8[79]a" . gif)
("\\`\x89PNG\r\n\x1a\n" . png)
@@ -43,7 +43,15 @@
static char \\1_bits" . xbm)
("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . tiff)
("\\`[\t\n\r ]*%!PS" . postscript)
- ("\\`\xff\xd8" . (image-jpeg-p . jpeg)))
+ ("\\`\xff\xd8" . (image-jpeg-p . jpeg))
+ (,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)")
+ (comment-re (concat "\\(?:!--" incomment-re "*-->[ \t\r\n]*<\\)")))
+ (concat "\\(?:<\\?xml[ \t\r\n]+[^>]*>\\)?[ \t\r\n]*<"
+ comment-re "*"
+ "\\(?:!DOCTYPE[ \t\r\n]+[^>]*>[ \t\r\n]*<[ \t\r\n]*" comment-re "*\\)?"
+ "[Ss][Vv][Gg]"))
+ . svg)
+ )
"Alist of (REGEXP . IMAGE-TYPE) pairs used to auto-detect image types.
When the first bytes of an image file match REGEXP, it is assumed to
be of image type IMAGE-TYPE if IMAGE-TYPE is a symbol. If not a symbol,
@@ -60,7 +68,9 @@ a non-nil value, TYPE is the image's type.")
("\\.pbm\\'" . pbm)
("\\.xbm\\'" . xbm)
("\\.ps\\'" . postscript)
- ("\\.tiff?\\'" . tiff))
+ ("\\.tiff?\\'" . tiff)
+ ("\\.svgz?\\'" . svg)
+ )
"Alist of (REGEXP . IMAGE-TYPE) pairs used to identify image files.
When the name of an image file match REGEXP, it is assumed to
be of image type IMAGE-TYPE.")
@@ -77,6 +87,7 @@ be of image type IMAGE-TYPE.")
(xpm . nil)
(jpeg . maybe)
(tiff . maybe)
+ (svg . maybe)
(postscript . nil))
"Alist of (IMAGE-TYPE . AUTODETECT) pairs used to auto-detect image files.
\(See `image-type-auto-detected-p').
@@ -292,43 +303,28 @@ be determined."
"Determine the type of image file FILE from its name.
Value is a symbol specifying the image type, or nil if type cannot
be determined."
- (let ((types image-type-file-name-regexps)
- type)
- (while types
- (if (string-match (car (car types)) file)
- (setq type (cdr (car types))
- types nil)
- (setq types (cdr types))))
- type))
+ (assoc-default file image-type-file-name-regexps 'string-match))
;;;###autoload
-(defun image-type (file-or-data &optional type data-p)
+(defun image-type (source &optional type data-p)
"Determine and return image type.
-FILE-OR-DATA is an image file name or image data.
+SOURCE is an image file name or image data.
Optional TYPE is a symbol describing the image type. If TYPE is omitted
or nil, try to determine the image type from its first few bytes
-of image data. If that doesn't work, and FILE-OR-DATA is a file name,
+of image data. If that doesn't work, and SOURCE is a file name,
use its file extension as image type.
-Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data."
- (when (and (not data-p) (not (stringp file-or-data)))
- (error "Invalid image file name `%s'" file-or-data))
- (cond ((null data-p)
- ;; FILE-OR-DATA is a file name.
- (unless (or type
- (setq type (image-type-from-file-header file-or-data)))
- (let ((extension (file-name-extension file-or-data)))
- (unless extension
- (error "Cannot determine image type"))
- (setq type (intern extension)))))
- (t
- ;; FILE-OR-DATA contains image data.
- (unless type
- (setq type (image-type-from-data file-or-data)))))
+Optional DATA-P non-nil means SOURCE is a string containing image data."
+ (when (and (not data-p) (not (stringp source)))
+ (error "Invalid image file name `%s'" source))
(unless type
- (error "Cannot determine image type"))
- (unless (symbolp type)
- (error "Invalid image type `%s'" type))
+ (setq type (if data-p
+ (image-type-from-data source)
+ (or (image-type-from-file-header source)
+ (image-type-from-file-name source))))
+ (or type (error "Cannot determine image type")))
+ (or (memq type (and (boundp 'image-types) image-types))
+ (error "Invalid image type `%s'" type))
type)
@@ -347,7 +343,9 @@ This function is intended to be used from `magic-fallback-mode-alist'.
The buffer is considered to contain an auto-detectable image if
its beginning matches an image type in `image-type-header-regexps',
-and that image type is present in `image-type-auto-detectable'."
+and that image type is present in `image-type-auto-detectable' with a
+non-nil value. If that value is non-nil, but not t, then the image type
+must be available."
(let* ((type (image-type-from-buffer))
(auto (and type (cdr (assq type image-type-auto-detectable)))))
(and auto
@@ -367,7 +365,12 @@ Optional PROPS are additional image attributes to assign to the image,
like, e.g. `:mask MASK'.
Value is the image created, or nil if images of type TYPE are not supported.
-Images should not be larger than specified by `max-image-size'."
+Images should not be larger than specified by `max-image-size'.
+
+Image file names that are not absolute are searched for in the
+\"images\" sub-directory of `data-directory' and
+`x-bitmap-file-path' (in that order)."
+ ;; It is x_find_image_file in image.c that sets the search path.
(setq type (image-type file-or-data type data-p))
(when (image-type-available-p type)
(append (list 'image :type type (if data-p :data :file) file-or-data)
diff --git a/lisp/indent.el b/lisp/indent.el
index 3c51b4f37a8..30ba4ec2b88 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -50,8 +50,8 @@ Don't rebind TAB unless you really need to.")
"*Controls the operation of the TAB key.
If t, hitting TAB always just indents the current line.
If nil, hitting TAB indents the current line if point is at the left margin
-or in the line's indentation, otherwise it insert a \"real\" TAB character.
-Most programming language modes have their own variable to control this,
+or in the line's indentation, otherwise it inserts a \"real\" TAB character.
+Some programming language modes have their own variable to control this,
e.g., `c-tab-always-indent', and do not respect this variable."
:group 'indent
:type '(choice (const nil) (const t) (const always)))
@@ -78,14 +78,20 @@ special; we don't actually use them here."
(funcall indent-line-function)))
(defun indent-for-tab-command (&optional arg)
- "Indent line in proper way for current major mode or insert a tab.
+ "Indent line or region in proper way for current major mode or insert a tab.
Depending on `tab-always-indent', either insert a tab or indent.
If initial point was within line's indentation, position after
the indentation. Else stay at same point in text.
-The function actually called to indent is determined by the value of
+If `transient-mark-mode' is turned on the region is active,
+indent the region.
+The function actually called to indent the line is determined by the value of
`indent-line-function'."
- (interactive "P")
+ (interactive "p")
(cond
+ ;; The region is active, indent it.
+ ((and arg transient-mark-mode mark-active
+ (not (eq (region-beginning) (region-end))))
+ (indent-region (region-beginning) (region-end)))
((or ;; indent-to-left-margin is only meant for indenting,
;; so we force it to always insert a tab here.
(eq indent-line-function 'indent-to-left-margin)
@@ -97,7 +103,8 @@ The function actually called to indent is determined by the value of
;; indenting, so we can't pass them to indent-according-to-mode.
((memq indent-line-function '(indent-relative indent-relative-maybe))
(funcall indent-line-function))
- (t ;; The normal case.
+ ;; Indent the line.
+ (t
(indent-according-to-mode))))
(defun insert-tab (&optional arg)
diff --git a/lisp/info.el b/lisp/info.el
index 07bce5bd487..2d396a105d8 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -706,8 +706,8 @@ otherwise, that defaults to `Top'."
(Info-find-node-2 nil nodename))
;; It's perhaps a bit nasty to kill the *info* buffer to force a re-read,
-;; but at least it keeps this routine (which is only for the benefit of
-;; makeinfo-buffer) out of the way of normal operations.
+;; but at least it keeps this routine (which is for makeinfo-buffer and
+;; Info-revert-buffer-function) out of the way of normal operations.
;;
(defun Info-revert-find-node (filename nodename)
"Go to an Info node FILENAME and NODENAME, re-reading disk contents.
@@ -739,6 +739,11 @@ is preserved, if possible."
(if new-history
(setq Info-history (cons new-history Info-history))))))
+(defun Info-revert-buffer-function (ignore-auto noconfirm)
+ (when (or noconfirm (y-or-n-p "Revert info buffer? "))
+ (Info-revert-find-node Info-current-file Info-current-node)
+ (message "Reverted %s" Info-current-file)))
+
(defun Info-find-in-tag-table-1 (marker regexp case-fold)
"Find a node in a tag table.
MARKER specifies the buffer and position to start searching at.
@@ -3353,7 +3358,7 @@ With a zero prefix arg, put the name inside a function call to `info'."
(unless Info-current-node
(error "No current Info node"))
(let ((node (if (stringp Info-current-file)
- (concat "(" (file-name-nondirectory Info-current-file) ")"
+ (concat "(" (file-name-nondirectory Info-current-file) ") "
Info-current-node))))
(if (zerop (prefix-numeric-value arg))
(setq node (concat "(info \"" node "\")")))
@@ -3478,6 +3483,8 @@ Advanced commands:
'Info-isearch-push-state)
(set (make-local-variable 'search-whitespace-regexp)
Info-search-whitespace-regexp)
+ (set (make-local-variable 'revert-buffer-function)
+ 'Info-revert-buffer-function)
(Info-set-mode-line)
(run-mode-hooks 'Info-mode-hook))
@@ -4078,7 +4085,8 @@ the variable `Info-file-list-for-emacs'."
;; Fontify http and ftp references
(goto-char (point-min))
(when not-fontified-p
- (while (re-search-forward "\\(https?\\|ftp\\)://[^ \t\n\"`({<>})']+" nil t)
+ (while (re-search-forward "\\(https?\\|ftp\\)://[^ \t\n\"`({<>})']+"
+ nil t)
(add-text-properties (match-beginning 0) (match-end 0)
'(font-lock-face info-xref
mouse-face highlight
diff --git a/lisp/informat.el b/lisp/informat.el
index 18a459ba0fe..747d57c4f38 100644
--- a/lisp/informat.el
+++ b/lisp/informat.el
@@ -32,6 +32,8 @@
(require 'info)
+(declare-function texinfo-format-refill "textmodes/texinfmt" ())
+
;;;###autoload
(defun Info-tagify (&optional input-buffer-name)
"Create or update Info file tag table in current buffer or in a region."
diff --git a/lisp/international/characters.el b/lisp/international/characters.el
index 30c8a267e25..8d86043646c 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -1353,9 +1353,9 @@
(setq utf-translate-cjk-mode saved-utf-translate-cjk-mode)
(makunbound 'saved-utf-translate-cjk-mode)
-;;; Local Variables:
-;;; coding: iso-2022-7bit
-;;; End:
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; End:
-;;; arch-tag: 85889c35-9f4d-4912-9bf5-82de31b0d42d
+;; arch-tag: 85889c35-9f4d-4912-9bf5-82de31b0d42d
;;; characters.el ends here
diff --git a/lisp/international/encoded-kb.el b/lisp/international/encoded-kb.el
index 7b3e6746b4a..5e690048aeb 100644
--- a/lisp/international/encoded-kb.el
+++ b/lisp/international/encoded-kb.el
@@ -31,7 +31,7 @@
;; Usually this map is empty (even if Encoded-kbd mode is on), but if
;; the keyboard coding system is iso-2022-based, it defines dummy key
;; bindings for ESC $ ..., etc. so that those bindings in
-;; key-translation-map take effect.
+;; input-decode-map take effect.
(defconst encoded-kbd-mode-map (make-sparse-keymap)
"Keymap for Encoded-kbd minor mode.")
@@ -175,7 +175,7 @@ The following key sequence may cause multilingual text insertion."
(setq str (format "%s%c" str (read-char-exclusive))))
(vector (aref result 0))))
-(defun encoded-kbd-setup-keymap (coding)
+(defun encoded-kbd-setup-keymap (keymap coding)
;; At first, reset the keymap.
(define-key encoded-kbd-mode-map "\e" nil)
;; Then setup the keymap according to the keyboard coding system.
@@ -183,7 +183,7 @@ The following key sequence may cause multilingual text insertion."
((eq (coding-system-type coding) 1) ; SJIS
(let ((i 128))
(while (< i 256)
- (define-key key-translation-map
+ (define-key keymap
(vector i) 'encoded-kbd-self-insert-sjis)
(setq i (1+ i))))
8)
@@ -191,7 +191,7 @@ The following key sequence may cause multilingual text insertion."
((eq (coding-system-type coding) 3) ; Big5
(let ((i 161))
(while (< i 255)
- (define-key key-translation-map
+ (define-key keymap
(vector i) 'encoded-kbd-self-insert-big5)
(setq i (1+ i))))
8)
@@ -217,20 +217,20 @@ The following key sequence may cause multilingual text insertion."
(aset encoded-kbd-iso2022-invocations 1 1))
(when use-designation
(define-key encoded-kbd-mode-map "\e" 'encoded-kbd-iso2022-esc-prefix)
- (define-key key-translation-map "\e" 'encoded-kbd-iso2022-esc-prefix))
+ (define-key keymap "\e" 'encoded-kbd-iso2022-esc-prefix))
(when (or (aref flags 2) (aref flags 3))
- (define-key key-translation-map
+ (define-key keymap
[?\216] 'encoded-kbd-iso2022-single-shift)
- (define-key key-translation-map
+ (define-key keymap
[?\217] 'encoded-kbd-iso2022-single-shift))
(or (eq (aref flags 0) 'ascii)
(dotimes (i 96)
- (define-key key-translation-map
+ (define-key keymap
(vector (+ 32 i)) 'encoded-kbd-self-insert-iso2022-7bit)))
(if (aref flags 7)
t
(dotimes (i 96)
- (define-key key-translation-map
+ (define-key keymap
(vector (+ 160 i)) 'encoded-kbd-self-insert-iso2022-8bit))
8))))
@@ -245,7 +245,7 @@ The following key sequence may cause multilingual text insertion."
(setq from (setq to elt)))
(while (<= from to)
(if (>= from 128)
- (define-key key-translation-map
+ (define-key keymap
(vector from) 'encoded-kbd-self-insert-ccl))
(setq from (1+ from))))
8))
@@ -253,61 +253,74 @@ The following key sequence may cause multilingual text insertion."
(t
nil)))
-;; key-translation-map at the time Encoded-kbd mode is turned on is
-;; saved here.
-(defvar saved-key-translation-map nil)
-
-;; Input mode at the time Encoded-kbd mode is turned on is saved here.
-(defvar saved-input-mode nil)
-
-(put 'encoded-kbd-mode 'permanent-local t)
;;;###autoload
-(define-minor-mode encoded-kbd-mode
- "Toggle Encoded-kbd minor mode.
-With arg, turn Encoded-kbd mode on if and only if arg is positive.
-
-You should not turn this mode on manually, instead use the command
-\\[set-keyboard-coding-system] which turns on or off this mode
-automatically.
-
-In Encoded-kbd mode, a text sent from keyboard is accepted
-as a multilingual text encoded in a coding system set by
-\\[set-keyboard-coding-system]."
- :global t :group 'keyboard :group 'mule
-
- (if encoded-kbd-mode
- ;; We are turning on Encoded-kbd mode.
- (let ((coding (keyboard-coding-system))
- result)
- (or saved-key-translation-map
- (if (keymapp key-translation-map)
- (setq saved-key-translation-map
- (copy-keymap key-translation-map))
- (setq key-translation-map (make-sparse-keymap))))
- (or saved-input-mode
- (setq saved-input-mode
- (current-input-mode)))
- (setq result (and coding (encoded-kbd-setup-keymap coding)))
- (if result
- (if (eq result 8)
- (set-input-mode
- (nth 0 saved-input-mode)
- (nth 1 saved-input-mode)
- 'use-8th-bit
- (nth 3 saved-input-mode)))
- (setq encoded-kbd-mode nil
- saved-key-translation-map nil
- saved-input-mode nil)
- (error "Unsupported coding system in Encoded-kbd mode: %S"
- coding)))
-
- ;; We are turning off Encoded-kbd mode.
- (setq key-translation-map saved-key-translation-map
- saved-key-translation-map nil)
- (apply 'set-input-mode saved-input-mode)
- (setq saved-input-mode nil)))
+(defun encoded-kbd-setup-display (display)
+ "Set up a `input-decode-map' for `keyboard-coding-system' on DISPLAY.
+
+DISPLAY may be a display id, a frame, or nil for the selected frame's display."
+ (let ((frame (if (framep display) display (car (frames-on-display-list display)))))
+ (when frame
+ (with-selected-frame frame
+ ;; Remove any previous encoded-kb keymap from input-decode-map.
+ (let ((m input-decode-map)
+ (child nil))
+ (while (keymapp m)
+ (if (not (equal (keymap-prompt m) "encoded-kb"))
+ (progn
+ (setq child m)
+ (setq m (keymap-parent m)))
+ ;; We've found an encoded-kb map, but maybe the prompt we get
+ ;; is really inherited from the encoded-kb map.
+ (let (mp)
+ (while (and (keymapp (setq mp (keymap-parent m)))
+ (equal (keymap-prompt mp) "encoded-kb"))
+ (setq child m)
+ (setq m mp))
+ ;; (assert (equal (keymap-prompt m) "encoded-kb"))
+ ;; (assert (eq mp (keymap-parent m)))
+ ;; (assert (not (and (keymapp mp)
+ ;; (equal (keymap-prompt mp) "encoded-kb"))))
+ ;; (assert (eq m (if child
+ ;; (keymap-parent child) input-decode-map)))
+ ;; We can finally do the actual removal.
+ (if child
+ (set-keymap-parent child mp)
+ (setq input-decode-map mp))
+ (setq m mp))))))
+
+ (if (keyboard-coding-system)
+ ;; We are turning on Encoded-kbd mode.
+ (let ((coding (keyboard-coding-system))
+ (keymap (make-sparse-keymap "encoded-kb"))
+ (cim (current-input-mode))
+ result)
+ ;; Place `keymap' as the immediate parent of input-decode-map
+ ;; rather than on top, so that later `define-key' on
+ ;; input-decode-map don't end up accidentally changing our
+ ;; part of the keymap, which would lead to bugs when/if we later
+ ;; on remove that part.
+ (set-keymap-parent keymap (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map keymap)
+ (unless (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)
+ (set-terminal-parameter nil 'encoded-kbd-saved-input-mode
+ (nth 2 cim)))
+ (setq result (and coding (encoded-kbd-setup-keymap keymap coding)))
+ (if result
+ (when (and (eq result 8)
+ (memq (nth 2 cim) '(t nil)))
+ (set-input-meta-mode 'use-8th-bit))
+ (set-terminal-parameter
+ nil 'encoded-kbd-saved-input-meta-mode nil)
+ (error "Unsupported coding system in Encoded-kbd mode: %S"
+ coding)))
+ ;; We are turning off Encoded-kbd mode.
+ (let ((old (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)))
+ (when (and old (not (equal (nth 2 (current-input-mode)) old)))
+ (set-input-meta-mode old))
+ (set-terminal-parameter
+ nil 'encoded-kbd-saved-input-meta-mode nil))))))
(provide 'encoded-kb)
-;;; arch-tag: 76f0f9b3-65e7-45c3-b692-59509a87ad44
+;; arch-tag: 76f0f9b3-65e7-45c3-b692-59509a87ad44
;;; encoded-kb.el ends here
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 6dd1bf07213..ca76d4f5054 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -148,7 +148,7 @@
t)
(define-key-after set-coding-system-map [set-terminal-coding-system]
'(menu-item "For Terminal" set-terminal-coding-system
- :enable (null (memq window-system '(x w32 mac)))
+ :enable (null (memq initial-window-system '(x w32 mac)))
:help "How to encode terminal output")
t)
(define-key-after set-coding-system-map [separator-3]
@@ -1830,7 +1830,7 @@ The default status is as follows:
(reset-language-environment)
-(defun set-display-table-and-terminal-coding-system (language-name &optional coding-system)
+(defun set-display-table-and-terminal-coding-system (language-name &optional coding-system display)
"Set up the display table and terminal coding system for LANGUAGE-NAME."
(let ((coding (get-language-info language-name 'unibyte-display)))
(if (and coding
@@ -1846,7 +1846,7 @@ The default status is as follows:
(dotimes (i 128)
(aset standard-display-table (+ i 128) nil))))
(or (eq window-system 'pc)
- (set-terminal-coding-system (or coding-system coding)))))
+ (set-terminal-coding-system (or coding-system coding) display))))
(defun set-language-environment (language-name)
"Set up multi-lingual environment for using LANGUAGE-NAME.
@@ -2454,7 +2454,7 @@ is returned. Thus, for instance, if charset \"ISO8859-2\",
;; too, for setting things such as calendar holidays, ps-print paper
;; size, spelling dictionary.
-(defun set-locale-environment (&optional locale-name)
+(defun set-locale-environment (&optional locale-name frame)
"Set up multi-lingual environment for using LOCALE-NAME.
This sets the language environment, the coding system priority,
the default input method and sometimes other things.
@@ -2475,6 +2475,10 @@ directory named `/usr/share/locale' or `/usr/lib/locale'. LOCALE-NAME
will be translated according to the table specified by
`locale-translation-file-name'.
+If FRAME is non-nil, only set the keyboard coding system and the
+terminal coding system for the terminal of that frame, and don't
+touch session-global parameters like the language environment.
+
See also `locale-charset-language-names', `locale-language-names',
`locale-preferred-coding-systems' and `locale-coding-system'."
(interactive "sSet environment for locale: ")
@@ -2504,7 +2508,7 @@ See also `locale-charset-language-names', `locale-language-names',
(let ((vars '("LC_ALL" "LC_CTYPE" "LANG")))
(while (and vars
(= 0 (length locale))) ; nil or empty string
- (setq locale (getenv (pop vars))))))
+ (setq locale (getenv (pop vars) frame)))))
(unless locale
;; The two tests are kept separate so the byte-compiler sees
@@ -2578,28 +2582,34 @@ See also `locale-charset-language-names', `locale-language-names',
;; Set up for this character set. This is now the right way
;; to do it for both unibyte and multibyte modes.
- (set-language-environment language-name)
+ (unless frame
+ (set-language-environment language-name))
;; If default-enable-multibyte-characters is nil,
;; we are using single-byte characters,
;; so the display table and terminal coding system are irrelevant.
(when default-enable-multibyte-characters
(set-display-table-and-terminal-coding-system
- language-name coding-system))
+ language-name coding-system frame))
;; Set the `keyboard-coding-system' if appropriate (tty
;; only). At least X and MS Windows can generate
;; multilingual input.
- (unless window-system
- (let ((kcs (or coding-system
- (car (get-language-info language-name
- 'coding-system)))))
- (if kcs (set-keyboard-coding-system kcs))))
-
- (setq locale-coding-system
- (car (get-language-info language-name 'coding-priority))))
-
- (when (and coding-system
+ ;; XXX This was disabled unless `window-system', but that
+ ;; leads to buggy behaviour when a tty frame is opened
+ ;; later. Setting the keyboard coding system has no adverse
+ ;; effect on X, so let's do it anyway. -- Lorentey
+ (let ((kcs (or coding-system
+ (car (get-language-info language-name
+ 'coding-system)))))
+ (if kcs (set-keyboard-coding-system kcs frame)))
+
+ (unless frame
+ (setq locale-coding-system
+ (car (get-language-info language-name 'coding-priority)))))
+
+ (when (and (not frame)
+ coding-system
(not (coding-system-equal coding-system
locale-coding-system)))
(prefer-coding-system coding-system)
@@ -2614,9 +2624,9 @@ See also `locale-charset-language-names', `locale-language-names',
(when (boundp 'w32-ansi-code-page)
(let ((code-page-coding (intern (format "cp%d" w32-ansi-code-page))))
(when (coding-system-p code-page-coding)
- (setq locale-coding-system code-page-coding)
- (set-keyboard-coding-system code-page-coding)
- (set-terminal-coding-system code-page-coding)
+ (unless frame (setq locale-coding-system code-page-coding))
+ (set-keyboard-coding-system code-page-coding frame)
+ (set-terminal-coding-system code-page-coding frame)
;; Set default-file-name-coding-system last, so that Emacs
;; doesn't try to use cpNNNN when it defines keyboard and
;; terminal encoding. That's because the above two lines
@@ -2635,38 +2645,39 @@ See also `locale-charset-language-names', `locale-language-names',
;; Mac OS X's Terminal.app by default uses utf-8 regardless of
;; the locale.
(when (and (null window-system)
- (equal (getenv "TERM_PROGRAM") "Apple_Terminal"))
+ (equal (getenv "TERM_PROGRAM" frame) "Apple_Terminal"))
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)))
;; Default to A4 paper if we're not in a C, POSIX or US locale.
;; (See comments in Flocale_info.)
- (let ((locale locale)
- (paper (locale-info 'paper)))
- (if paper
- ;; This will always be null at the time of writing.
- (cond
- ((equal paper '(216 279))
- (setq ps-paper-type 'letter))
- ((equal paper '(210 297))
- (setq ps-paper-type 'a4)))
- (let ((vars '("LC_ALL" "LC_PAPER" "LANG")))
- (while (and vars (= 0 (length locale)))
- (setq locale (getenv (pop vars)))))
- (when locale
- ;; As of glibc 2.2.5, these are the only US Letter locales,
- ;; and the rest are A4.
- (setq ps-paper-type
- (or (locale-name-match locale '(("c$" . letter)
- ("posix$" . letter)
- (".._us" . letter)
- (".._pr" . letter)
- (".._ca" . letter)
- ("enu$" . letter) ; Windows
- ("esu$" . letter)
- ("enc$" . letter)
- ("frc$" . letter)))
- 'a4))))))
+ (unless frame
+ (let ((locale locale)
+ (paper (locale-info 'paper)))
+ (if paper
+ ;; This will always be null at the time of writing.
+ (cond
+ ((equal paper '(216 279))
+ (setq ps-paper-type 'letter))
+ ((equal paper '(210 297))
+ (setq ps-paper-type 'a4)))
+ (let ((vars '("LC_ALL" "LC_PAPER" "LANG")))
+ (while (and vars (= 0 (length locale)))
+ (setq locale (getenv (pop vars) frame))))
+ (when locale
+ ;; As of glibc 2.2.5, these are the only US Letter locales,
+ ;; and the rest are A4.
+ (setq ps-paper-type
+ (or (locale-name-match locale '(("c$" . letter)
+ ("posix$" . letter)
+ (".._us" . letter)
+ (".._pr" . letter)
+ (".._ca" . letter)
+ ("enu$" . letter) ; Windows
+ ("esu$" . letter)
+ ("enc$" . letter)
+ ("frc$" . letter)))
+ 'a4)))))))
nil)
;;; Charset property
diff --git a/lisp/international/mule-diag.el b/lisp/international/mule-diag.el
index 21b0b3485f1..df01247cd01 100644
--- a/lisp/international/mule-diag.el
+++ b/lisp/international/mule-diag.el
@@ -839,7 +839,7 @@ Priority order for recognizing coding systems when reading files:\n")
coding-system codings)
(while categories
(setq coding-system (symbol-value (car categories)))
- (mapcar
+ (mapc
(lambda (x)
(if (and (not (eq x coding-system))
(coding-system-get x 'no-initial-designation)
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 2d6a0ce5e88..b19797f267e 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -505,7 +505,7 @@ See also `coding-category-list'."
(defun coding-system-base (coding-system)
"Return the base coding system of CODING-SYSTEM.
A base coding system is what made by `make-coding-system'.
-Any alias nor subsidiary coding systems are not base coding system."
+Neither aliases nor subsidiary coding systems are base coding systems."
(car (coding-system-get coding-system 'alias-coding-systems)))
;; Coding system also has a property `eol-type'.
@@ -1233,13 +1233,17 @@ see) to CODING-SYSTEM."
This is normally set according to the selected language environment.
See also the command `set-terminal-coding-system'.")
-(defun set-terminal-coding-system (coding-system)
- "Set coding system of your terminal to CODING-SYSTEM.
-All text output to the terminal will be encoded
+(defun set-terminal-coding-system (coding-system &optional display)
+ "Set coding system of terminal output to CODING-SYSTEM.
+All text output to DISPLAY will be encoded
with the specified coding system.
+
For a list of possible values of CODING-SYSTEM, use \\[list-coding-systems].
The default is determined by the selected language environment
-or by the previous use of this command."
+or by the previous use of this command.
+
+DISPLAY may be a display id, a frame, or nil for the selected frame's display.
+The setting has no effect on graphical displays."
(interactive
(list (let ((default (if (and (not (terminal-coding-system))
default-terminal-coding-system)
@@ -1253,7 +1257,7 @@ or by the previous use of this command."
(setq coding-system default-terminal-coding-system))
(if coding-system
(setq default-terminal-coding-system coding-system))
- (set-terminal-coding-system-internal coding-system)
+ (set-terminal-coding-system-internal coding-system display)
(redraw-frame (selected-frame)))
(defvar default-keyboard-coding-system nil
@@ -1261,14 +1265,17 @@ or by the previous use of this command."
This is normally set according to the selected language environment.
See also the command `set-keyboard-coding-system'.")
-(defun set-keyboard-coding-system (coding-system)
- "Set coding system for keyboard input to CODING-SYSTEM.
-In addition, this command enables Encoded-kbd minor mode.
-\(If CODING-SYSTEM is nil, Encoded-kbd mode is turned off -- see
-`encoded-kbd-mode'.)
+(defun set-keyboard-coding-system (coding-system &optional display)
+ "Set coding system for keyboard input on DISPLAY to CODING-SYSTEM.
+In addition, this command calls `encoded-kbd-setup-display' to set up the
+translation of keyboard input events to the specified coding system.
+
For a list of possible values of CODING-SYSTEM, use \\[list-coding-systems].
The default is determined by the selected language environment
-or by the previous use of this command."
+or by the previous use of this command.
+
+DISPLAY may be a display id, a frame, or nil for the selected frame's display.
+The setting has no effect on graphical displays."
(interactive
(list (let ((default (if (and (not (keyboard-coding-system))
default-keyboard-coding-system)
@@ -1285,9 +1292,9 @@ or by the previous use of this command."
(if (and coding-system
(coding-system-get coding-system 'ascii-incompatible))
(error "%s is not ASCII-compatible" coding-system))
- (set-keyboard-coding-system-internal coding-system)
+ (set-keyboard-coding-system-internal coding-system display)
(setq keyboard-coding-system coding-system)
- (encoded-kbd-mode (if coding-system 1 0)))
+ (encoded-kbd-setup-display display))
(defcustom keyboard-coding-system nil
"Specify coding system for keyboard input.
@@ -1303,8 +1310,8 @@ use either \\[customize] or \\[set-keyboard-coding-system]."
:link '(info-link "(emacs)Terminal Coding")
:link '(info-link "(emacs)Unibyte Mode")
:set (lambda (symbol value)
- ;; Don't load encoded-kbd-mode unnecessarily.
- (if (or value (boundp 'encoded-kbd-mode))
+ ;; Don't load encoded-kb unnecessarily.
+ (if (or value (boundp 'encoded-kbd-setup-display))
(set-keyboard-coding-system value)
(set-default 'keyboard-coding-system nil))) ; must initialize
:version "22.1"
@@ -1581,8 +1588,9 @@ text, and convert it in the temporary buffer. Otherwise, convert in-place."
(defcustom auto-coding-alist
;; .exe and .EXE are added to support archive-mode looking at DOS
;; self-extracting exe archives.
- '(("\\.\\(arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|exe\\)\\'" . no-conversion)
- ("\\.\\(ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|EXE\\)\\'" . no-conversion)
+ '(("\\.\\(\
+arc\\|zip\\|lzh\\|lha\\|zoo\\|[jew]ar\\|xpi\\|exe\\|rar\\|\
+ARC\\|ZIP\\|LZH\\|LHA\\|ZOO\\|[JEW]AR\\|XPI\\|EXE\\|RAR\\)\\'" . no-conversion)
("\\.\\(sx[dmicw]\\|odt\\|tar\\|tgz\\)\\'" . no-conversion)
("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion)
("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion)
diff --git a/lisp/international/quail.el b/lisp/international/quail.el
index f9f497699a0..cddcf9867c2 100644
--- a/lisp/international/quail.el
+++ b/lisp/international/quail.el
@@ -55,7 +55,7 @@
;;; Code:
-(require 'help-mode)
+(eval-when-compile (require 'help-mode))
(defgroup quail nil
"Quail: multilingual input method."
@@ -2431,22 +2431,27 @@ should be made by `quail-build-decode-map' (which see)."
(insert ?\n))
(insert ?\n))))
-(define-button-type 'quail-keyboard-layout-button
- :supertype 'help-xref
- 'help-function '(lambda (layout)
- (help-setup-xref `(quail-keyboard-layout-button ,layout) nil)
- (quail-show-keyboard-layout layout))
- 'help-echo (purecopy "mouse-2, RET: show keyboard layout"))
-
-(define-button-type 'quail-keyboard-customize-button
- :supertype 'help-customize-variable
- 'help-echo (purecopy "mouse-2, RET: customize keyboard layout"))
+(defun quail-help-init ()
+ (unless (featurep 'help-mode)
+ (require 'help-mode)
+ (define-button-type 'quail-keyboard-layout-button
+ :supertype 'help-xref
+ 'help-function '(lambda (layout)
+ (help-setup-xref `(quail-keyboard-layout-button ,layout)
+ nil)
+ (quail-show-keyboard-layout layout))
+ 'help-echo (purecopy "mouse-2, RET: show keyboard layout"))
+
+ (define-button-type 'quail-keyboard-customize-button
+ :supertype 'help-customize-variable
+ 'help-echo (purecopy "mouse-2, RET: customize keyboard layout"))))
(defun quail-help (&optional package)
"Show brief description of the current Quail package.
Optional arg PACKAGE specifies the name of alternative Quail
package to describe."
(interactive)
+ (quail-help-init)
(let ((help-xref-mule-regexp help-xref-mule-regexp-template)
(default-enable-multibyte-characters enable-multibyte-characters)
(package-def
@@ -2629,7 +2634,7 @@ KEY BINDINGS FOR CONVERSION
;; it is not yet stored. As a result, the element is a string or a
;; list of strings.
-(defsubst quail-store-decode-map-key (table char key)
+(defun quail-store-decode-map-key (table char key)
(let ((elt (aref table char)))
(if elt
(if (consp elt)
diff --git a/lisp/international/utf-7.el b/lisp/international/utf-7.el
index 0fff064ace8..09db420b565 100644
--- a/lisp/international/utf-7.el
+++ b/lisp/international/utf-7.el
@@ -46,13 +46,14 @@
(pre-write-conversion . utf-7-pre-write-conversion)
(post-read-conversion . utf-7-post-read-conversion)))
-;; (make-coding-system
-;; 'utf-7-imap 0 ?u
-;; "UTF-7 encoding of Unicode, IMAP version (RFC 2060)"
-;; nil
-;; `((safe-chars . ,(coding-system-get 'utf-16be 'safe-chars))
-;; (pre-write-conversion . utf-7-imap-pre-write-conversion)
-;; (post-read-conversion . utf-7-imap-post-read-conversion)))
+;;;###autoload(autoload-coding-system 'utf-7-imap '(require 'utf-7))
+(make-coding-system
+ 'utf-7-imap 0 ?u
+ "UTF-7 encoding of Unicode, IMAP version (RFC 2060)"
+ nil
+ `((safe-chars . ,(coding-system-get 'utf-16be 'safe-chars))
+ (pre-write-conversion . utf-7-imap-pre-write-conversion)
+ (post-read-conversion . utf-7-imap-post-read-conversion)))
(defun utf-7-decode (len imap)
"Decode LEN bytes of UTF-7 at point.
@@ -85,8 +86,8 @@ IMAP non-nil means use the IMAP version."
(defun utf-7-post-read-conversion (len)
(utf-7-decode len nil))
-;; (defun utf-7-imap-post-read-conversion (len)
-;; (utf-7-decode len t))
+(defun utf-7-imap-post-read-conversion (len)
+ (utf-7-decode len t))
(defun utf-7-encode (from to imap)
"Encode bytes between FROM and TO to UTF-7.
@@ -133,8 +134,8 @@ ESC and SKIP-CHARS are adjusted for the normal and IMAP versions."
(defun utf-7-pre-write-conversion (from to)
(utf-7-encode from to nil))
-;; (defun utf-7-imap-pre-write-conversion (from to)
-;; (utf-7-encode from to t))
+(defun utf-7-imap-pre-write-conversion (from to)
+ (utf-7-encode from to t))
(provide 'utf-7)
diff --git a/lisp/international/utf-8.el b/lisp/international/utf-8.el
index 681d2454dc1..39dd3239bf7 100644
--- a/lisp/international/utf-8.el
+++ b/lisp/international/utf-8.el
@@ -991,16 +991,20 @@ Also compose particular scripts if `utf-8-compose-scripts' is non-nil."
(set-buffer-multibyte nil)))
(when (and utf-8-compose-scripts (> length 1))
- ;; These currently have definitions which cover the relevant
- ;; unicodes. We could avoid loading thai-util &c by checking
- ;; whether the region contains any characters with the appropriate
- ;; categories. There aren't yet Unicode-based rules for Tibetan.
- (diacritic-compose-region (point-max) (point-min))
- (thai-compose-region (point-max) (point-min))
- (lao-compose-region (point-max) (point-min))
- (devanagari-compose-region (point-max) (point-min))
- (malayalam-compose-region (point-max) (point-min))
- (tamil-compose-region (point-max) (point-min)))
+ ;; This let-binding avoids recursive auto-loading. And, we
+ ;; anyway don't have to run the following code while
+ ;; auto-loading.
+ (let ((utf-8-compose-scripts nil))
+ ;; These currently have definitions which cover the relevant
+ ;; unicodes. We could avoid loading thai-util &c by checking
+ ;; whether the region contains any characters with the appropriate
+ ;; categories. There aren't yet Unicode-based rules for Tibetan.
+ (diacritic-compose-region (point-max) (point-min))
+ (thai-compose-region (point-max) (point-min))
+ (lao-compose-region (point-max) (point-min))
+ (devanagari-compose-region (point-max) (point-min))
+ (malayalam-compose-region (point-max) (point-min))
+ (tamil-compose-region (point-max) (point-min))))
(- (point-max) (point-min)))))
(defun utf-8-pre-write-conversion (beg end)
diff --git a/lisp/isearch-multi.el b/lisp/isearch-multi.el
new file mode 100644
index 00000000000..9161ef82c7e
--- /dev/null
+++ b/lisp/isearch-multi.el
@@ -0,0 +1,191 @@
+;;; isearch-multi.el --- isearch extensions for multi-buffer search
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: Juri Linkov <juri@jurta.org>
+;; Keywords: matching
+
+;; 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 3, 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:
+
+;; This file adds more dimensions to the search space. It implements
+;; various features that extend isearch. One of them is an ability to
+;; search through multiple buffers.
+
+;;; Code:
+
+;;; Search multiple buffers
+
+(defgroup isearch-buffers nil
+ "Using isearch to search through multiple buffers."
+ :version "23.1"
+ :group 'isearch)
+
+(defcustom isearch-buffers-multi t
+ "Non-nil enables searching multiple related buffers, in certain modes."
+ :type 'boolean
+ :version "23.1"
+ :group 'isearch-buffers)
+
+(defcustom isearch-buffers-pause t
+ "A choice defining where to pause the search.
+If the value is nil, don't pause before going to the next buffer.
+If the value is `initial', pause only after a failing search in the
+initial buffer.
+If t, pause in all buffers that contain the search string."
+ :type '(choice
+ (const :tag "Don't pause" nil)
+ (const :tag "Only in initial buffer" initial)
+ (const :tag "All buffers" t))
+ :version "23.1"
+ :group 'isearch-buffers)
+
+;;;###autoload
+(defvar isearch-buffers-current-buffer nil
+ "The buffer where the search is currently searching.
+The value is nil when the search still is in the initial buffer.")
+
+;;;###autoload
+(defvar isearch-buffers-next-buffer-function nil
+ "Function to call to get the next buffer to search.
+
+When this variable is set to a function that returns a buffer, then
+after typing another \\[isearch-forward] or \\[isearch-backward] \
+at a failing search, the search goes
+to the next buffer in the series and continues searching for the
+next occurrence.
+
+The first argument of this function is the current buffer where the
+search is currently searching. It defines the base buffer relative to
+which this function should find the next buffer. When the isearch
+direction is backward (when `isearch-forward' is nil), this function
+should return the previous buffer to search. If the second argument of
+this function WRAP is non-nil, then it should return the first buffer
+in the series; and for the backward search, it should return the last
+buffer in the series.")
+
+;;;###autoload
+(define-minor-mode isearch-buffers-minor-mode
+ "Minor mode for using isearch to search through multiple buffers.
+With arg, turn isearch-buffers minor mode on if arg is positive, off otherwise."
+ :group 'isearch-buffers ;; :lighter " X"
+ (if isearch-buffers-minor-mode
+ (progn
+ (add-hook 'isearch-mode-hook 'isearch-buffers-init nil t)
+ (set (make-local-variable 'isearch-search-fun-function)
+ 'isearch-buffers-search-fun)
+ (set (make-local-variable 'isearch-wrap-function)
+ 'isearch-buffers-wrap)
+ (set (make-local-variable 'isearch-push-state-function)
+ 'isearch-buffers-push-state))
+ (remove-hook 'isearch-mode-hook 'isearch-buffers-init t)
+ (kill-local-variable 'isearch-search-fun-function)
+ (kill-local-variable 'isearch-wrap-function)
+ (kill-local-variable 'isearch-push-state-function)))
+
+(defun isearch-buffers-init ()
+ "Set up isearch to search multiple buffers.
+Intended to be added to `isearch-mode-hook'."
+ (setq isearch-buffers-current-buffer nil))
+
+(defun isearch-buffers-search-fun ()
+ "Return the proper search function, for isearch in multiple buffers."
+ (lambda (string bound noerror)
+ (let ((search-fun
+ ;; Use standard functions to search within one buffer
+ (cond
+ (isearch-word
+ (if isearch-forward 'word-search-forward 'word-search-backward))
+ (isearch-regexp
+ (if isearch-forward 're-search-forward 're-search-backward))
+ (t
+ (if isearch-forward 'search-forward 'search-backward))))
+ found buffer)
+ (or
+ ;; 1. First try searching in the initial buffer
+ (let ((res (funcall search-fun string bound noerror)))
+ ;; Reset wrapping for all-buffers pause after successful search
+ (if (and res (eq isearch-buffers-pause t))
+ (setq isearch-buffers-current-buffer nil))
+ res)
+ ;; 2. If the above search fails, start visiting next/prev buffers
+ ;; successively, and search the string in them. Do this only
+ ;; when bound is nil (i.e. not while lazy-highlighting search
+ ;; strings in the current buffer).
+ (when (and (not bound) isearch-buffers-multi)
+ ;; If no-pause or there was one attempt to leave the current buffer
+ (if (or (null isearch-buffers-pause)
+ (and isearch-buffers-pause isearch-buffers-current-buffer))
+ (condition-case nil
+ (progn
+ (while (not found)
+ ;; Find the next buffer to search
+ (setq buffer (funcall isearch-buffers-next-buffer-function
+ buffer))
+ (with-current-buffer buffer
+ (goto-char (if isearch-forward (point-min) (point-max)))
+ (setq isearch-barrier (point) isearch-opoint (point))
+ ;; After visiting the next/prev buffer search the
+ ;; string in it again, until the function in
+ ;; isearch-buffers-next-buffer-function raises an error
+ ;; at the beginning/end of the buffer sequence.
+ (setq found (funcall search-fun string bound noerror))))
+ ;; Set buffer for isearch-search-string to switch
+ (if buffer (setq isearch-buffers-current-buffer buffer))
+ ;; Return point of the new search result
+ found)
+ ;; Return nil when isearch-buffers-next-buffer-function fails
+ (error nil))
+ (signal 'search-failed (list string "Repeat for next buffer"))))))))
+
+(defun isearch-buffers-wrap ()
+ "Wrap the multiple buffers search when search is failed.
+Switch buffer to the first buffer for a forward search,
+or to the last buffer for a backward search.
+Set `isearch-buffers-current-buffer' to the current buffer to display
+the isearch suffix message [initial buffer] only when isearch leaves
+the initial buffer."
+ (if (or (null isearch-buffers-pause)
+ (and isearch-buffers-pause isearch-buffers-current-buffer))
+ (progn
+ (switch-to-buffer
+ (setq isearch-buffers-current-buffer
+ (funcall isearch-buffers-next-buffer-function
+ (current-buffer) t)))
+ (goto-char (if isearch-forward (point-min) (point-max))))
+ (setq isearch-buffers-current-buffer (current-buffer))
+ (setq isearch-wrapped nil)))
+
+(defun isearch-buffers-push-state ()
+ "Save a function restoring the state of multiple buffers search.
+Save the current buffer to the additional state parameter in the
+search status stack."
+ `(lambda (cmd)
+ (isearch-buffers-pop-state cmd ,(current-buffer))))
+
+(defun isearch-buffers-pop-state (cmd buffer)
+ "Restore the multiple buffers search state.
+Switch to the buffer restored from the search status stack."
+ (unless (equal buffer (current-buffer))
+ (switch-to-buffer (setq isearch-buffers-current-buffer buffer))))
+
+(provide 'isearch-multi)
+
+;; arch-tag: a6d38ffa-4d14-4e39-8ac6-46af9d6a6773
+;;; isearch-multi.el ends here
diff --git a/lisp/isearch.el b/lisp/isearch.el
index cc68ee297bd..7c5585d6ea6 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -159,10 +159,14 @@ command history."
(defvar isearch-mode-end-hook nil
"Function(s) to call after terminating an incremental search.
When these functions are called, `isearch-mode-end-hook-quit'
-is non-nil if the user quit the search.")
+is non-nil if the user quits the search.")
(defvar isearch-mode-end-hook-quit nil
- "Non-nil while running `isearch-mode-end-hook' if user quit the search.")
+ "Non-nil while running `isearch-mode-end-hook' if the user quits the search.")
+
+(defvar isearch-message-function nil
+ "Function to call to display the search prompt.
+If nil, use `isearch-message'.")
(defvar isearch-wrap-function nil
"Function to call to wrap the search when search is failed.
@@ -715,7 +719,9 @@ is treated as a regexp. See \\[isearch-forward] for more info."
(null executing-kbd-macro))
(progn
(if (not (input-pending-p))
- (isearch-message))
+ (if isearch-message-function
+ (funcall isearch-message-function)
+ (isearch-message)))
(if (and isearch-slow-terminal-mode
(not (or isearch-small-window
(pos-visible-in-window-p))))
@@ -1661,7 +1667,7 @@ Isearch mode."
(keylist (listify-key-sequence key))
scroll-command isearch-point)
(cond ((and (= (length key) 1)
- (let ((lookup (lookup-key function-key-map key)))
+ (let ((lookup (lookup-key local-function-key-map key)))
(not (or (null lookup) (integerp lookup)
(keymapp lookup)))))
;; Handle a function key that translates into something else.
@@ -1675,7 +1681,7 @@ Isearch mode."
(isearch-done)
(apply 'isearch-unread keylist))
(setq keylist
- (listify-key-sequence (lookup-key function-key-map key)))
+ (listify-key-sequence (lookup-key local-function-key-map key)))
(while keylist
(setq key (car keylist))
;; If KEY is a printing char, we handle it here
@@ -1732,6 +1738,12 @@ Isearch mode."
(isearch-back-into-window (eq ab-bel 'above) isearch-point)
(goto-char isearch-point)))
(isearch-update))
+ ;; A mouse click on the isearch message starts editing the search string
+ ((and (eq (car-safe main-event) 'down-mouse-1)
+ (window-minibuffer-p (posn-window (event-start main-event))))
+ ;; Swallow the up-event.
+ (read-event)
+ (isearch-edit-string))
(search-exit-option
(let (window)
(isearch-unread-key-sequence keylist)
@@ -2029,13 +2041,20 @@ Can be changed via `isearch-search-fun-function' for special needs."
(if isearch-forward (< pos2 pos1) (> pos2 pos1))))
(setq pos1 pos2)
(set-match-data match-data)))))
- (if pos1
- (goto-char pos1))
+ (when pos1
+ ;; When using multiple buffers isearch, switch to the new buffer here,
+ ;; because `save-excursion' above doesn't allow doing it inside funcall.
+ (if (and isearch-buffers-next-buffer-function
+ (buffer-live-p isearch-buffers-current-buffer))
+ (switch-to-buffer isearch-buffers-current-buffer))
+ (goto-char pos1))
pos1))
(defun isearch-search ()
;; Do the search with the current search string.
- (isearch-message nil t)
+ (if isearch-message-function
+ (funcall isearch-message-function nil t)
+ (isearch-message nil t))
(if (and (eq isearch-case-fold-search t) search-upper-case)
(setq isearch-case-fold-search
(isearch-no-upper-case-p isearch-string isearch-regexp)))
@@ -2486,19 +2505,20 @@ Attempt to do the search exactly the way the pending isearch would."
(run-at-time lazy-highlight-interval nil
'isearch-lazy-highlight-update)))))))))
-(defun isearch-resume (search regexp word forward message case-fold)
+(defun isearch-resume (string regexp word forward message case-fold)
"Resume an incremental search.
-SEARCH is the string or regexp searched for.
+STRING is the string or regexp searched for.
REGEXP non-nil means the resumed search was a regexp search.
WORD non-nil means resume a word search.
FORWARD non-nil means resume a forward search.
MESSAGE is the echo-area message recorded for the search resumed.
CASE-FOLD non-nil means the search was case-insensitive."
(isearch-mode forward regexp nil nil word)
- (setq isearch-string search
+ (setq isearch-string string
isearch-message message
isearch-case-fold-search case-fold)
- (isearch-search))
+ (isearch-search)
+ (isearch-update))
;; arch-tag: 74850515-f7d8-43a6-8a2c-ca90a4c1e675
;;; isearch.el ends here
diff --git a/lisp/jka-cmpr-hook.el b/lisp/jka-cmpr-hook.el
index 7e15af0d75f..8c388d0cb34 100644
--- a/lisp/jka-cmpr-hook.el
+++ b/lisp/jka-cmpr-hook.el
@@ -97,7 +97,7 @@ The determination as to which compression scheme, if any, to use is
based on the filename itself and `jka-compr-compression-info-list'."
(catch 'compression-info
(let ((case-fold-search nil))
- (mapcar
+ (mapc
(function (lambda (x)
(and (string-match (jka-compr-info-regexp x) filename)
(throw 'compression-info x))))
@@ -183,10 +183,11 @@ options through Custom does this automatically."
;;[regexp
;; compr-message compr-prog compr-args
;; uncomp-message uncomp-prog uncomp-args
- ;; can-append auto-mode-flag strip-extension-flag file-magic-bytes]
+ ;; can-append strip-extension-flag file-magic-bytes]
'(["\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'"
"compressing" "compress" ("-c")
- "uncompressing" "uncompress" ("-c")
+ ;; gzip is more common than uncompress. It can only read, not write.
+ "uncompressing" "gzip" ("-c" "-q" "-d")
nil t "\037\235"]
;; Formerly, these had an additional arg "-c", but that fails with
;; "Version 0.1pl2, 29-Aug-97." (RedHat 5.1 GNU/Linux) and
@@ -199,7 +200,7 @@ options through Custom does this automatically."
"bzip2ing" "bzip2" nil
"bunzip2ing" "bzip2" ("-d")
nil nil "BZh"]
- ["\\.tgz\\'"
+ ["\\.\\(?:tgz\\|svgz\\)\\'"
"compressing" "gzip" ("-c" "-q")
"uncompressing" "gzip" ("-c" "-q" "-d")
t nil "\037\213"]
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index c9c5066f88c..096d35bebbd 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -606,8 +606,11 @@ An argument of zero means repeat until error."
(unless executing-kbd-macro
(end-kbd-macro arg #'kmacro-loop-setup-function)
(when (and last-kbd-macro (= (length last-kbd-macro) 0))
+ (setq last-kbd-macro nil)
(message "Ignore empty macro")
- (kmacro-pop-ring))))
+ ;; Don't call `kmacro-ring-empty-p' to avoid its messages.
+ (while (and (null last-kbd-macro) kmacro-ring)
+ (kmacro-pop-ring1)))))
;;;###autoload
diff --git a/lisp/language/ethio-util.el b/lisp/language/ethio-util.el
index 16b0b2152e1..195a18a10fd 100644
--- a/lisp/language/ethio-util.el
+++ b/lisp/language/ethio-util.el
@@ -1061,7 +1061,7 @@ See also the descriptions of the variables
(aset ethio-fidel-to-sera-map 359 "`?")
(aset ethio-fidel-to-sera-map 463 "?"))
- (mapcar
+ (mapc
'(lambda (x)
(aset (aref ethio-fidel-to-sera-map x)
2
diff --git a/lisp/ldefs-boot.el b/lisp/ldefs-boot.el
index 25df6135e3e..8704a6d8ccb 100644
--- a/lisp/ldefs-boot.el
+++ b/lisp/ldefs-boot.el
@@ -4,10 +4,10 @@
;;;### (autoloads (5x5-crack 5x5-crack-xor-mutate 5x5-crack-mutating-best
;;;;;; 5x5-crack-mutating-current 5x5-crack-randomly 5x5) "5x5"
-;;;;;; "play/5x5.el" (17941 38806))
+;;;;;; "play/5x5.el" (18088 55113))
;;; Generated autoloads from play/5x5.el
-(autoload (quote 5x5) "5x5" "\
+(autoload '5x5 "5x5" "\
Play 5x5.
The object of 5x5 is very simple, by moving around the grid and flipping
@@ -30,28 +30,28 @@ Quit current game \\[5x5-quit-game]
\(fn &optional SIZE)" t nil)
-(autoload (quote 5x5-crack-randomly) "5x5" "\
+(autoload '5x5-crack-randomly "5x5" "\
Attempt to crack 5x5 using random solutions.
\(fn)" t nil)
-(autoload (quote 5x5-crack-mutating-current) "5x5" "\
+(autoload '5x5-crack-mutating-current "5x5" "\
Attempt to crack 5x5 by mutating the current solution.
\(fn)" t nil)
-(autoload (quote 5x5-crack-mutating-best) "5x5" "\
+(autoload '5x5-crack-mutating-best "5x5" "\
Attempt to crack 5x5 by mutating the best solution.
\(fn)" t nil)
-(autoload (quote 5x5-crack-xor-mutate) "5x5" "\
+(autoload '5x5-crack-xor-mutate "5x5" "\
Attempt to crack 5x5 by xoring the current and best solution.
Mutate the result.
\(fn)" t nil)
-(autoload (quote 5x5-crack) "5x5" "\
+(autoload '5x5-crack "5x5" "\
Attempt to find a solution for 5x5.
5x5-crack takes the argument BREEDER which should be a function that takes
@@ -63,17 +63,17 @@ should return a grid vector array that is the new solution.
;;;***
-;;;### (autoloads nil "abbrev" "abbrev.el" (17905 55681))
+;;;### (autoloads nil "abbrev" "abbrev.el" (18212 46004))
;;; Generated autoloads from abbrev.el
(put 'abbrev-mode 'safe-local-variable 'booleanp)
;;;***
;;;### (autoloads (list-one-abbrev-table) "abbrevlist" "abbrevlist.el"
-;;;;;; (17842 58280))
+;;;;;; (18088 55079))
;;; Generated autoloads from abbrevlist.el
-(autoload (quote list-one-abbrev-table) "abbrevlist" "\
+(autoload 'list-one-abbrev-table "abbrevlist" "\
Display alphabetical listing of ABBREV-TABLE in buffer OUTPUT-BUFFER.
\(fn ABBREV-TABLE OUTPUT-BUFFER)" nil nil)
@@ -81,10 +81,10 @@ Display alphabetical listing of ABBREV-TABLE in buffer OUTPUT-BUFFER.
;;;***
;;;### (autoloads (ada-mode ada-add-extensions) "ada-mode" "progmodes/ada-mode.el"
-;;;;;; (17842 56333))
+;;;;;; (18173 8195))
;;; Generated autoloads from progmodes/ada-mode.el
-(autoload (quote ada-add-extensions) "ada-mode" "\
+(autoload 'ada-add-extensions "ada-mode" "\
Define SPEC and BODY as being valid extensions for Ada files.
Going from body to spec with `ff-find-other-file' used these
extensions.
@@ -93,7 +93,7 @@ the file name.
\(fn SPEC BODY)" nil nil)
-(autoload (quote ada-mode) "ada-mode" "\
+(autoload 'ada-mode "ada-mode" "\
Ada mode is the major mode for editing Ada code.
Bindings are as follows: (Note: 'LFD' is control-j.)
@@ -142,10 +142,10 @@ If you use ada-xref.el:
;;;***
;;;### (autoloads (ada-header) "ada-stmt" "progmodes/ada-stmt.el"
-;;;;;; (17842 56333))
+;;;;;; (18088 55114))
;;; Generated autoloads from progmodes/ada-stmt.el
-(autoload (quote ada-header) "ada-stmt" "\
+(autoload 'ada-header "ada-stmt" "\
Insert a descriptive header at the top of the file.
\(fn)" t nil)
@@ -153,10 +153,10 @@ Insert a descriptive header at the top of the file.
;;;***
;;;### (autoloads (ada-find-file) "ada-xref" "progmodes/ada-xref.el"
-;;;;;; (17842 56333))
+;;;;;; (18201 33327))
;;; Generated autoloads from progmodes/ada-xref.el
-(autoload (quote ada-find-file) "ada-xref" "\
+(autoload 'ada-find-file "ada-xref" "\
Open FILENAME, from anywhere in the source path.
Completion is available.
@@ -164,25 +164,25 @@ Completion is available.
;;;***
-;;;### (autoloads (change-log-redate change-log-merge add-log-current-defun
-;;;;;; change-log-mode add-change-log-entry-other-window add-change-log-entry
-;;;;;; find-change-log prompt-for-change-log-name add-log-mailing-address
-;;;;;; add-log-full-name add-log-current-defun-function) "add-log"
-;;;;;; "add-log.el" (17851 44469))
+;;;### (autoloads (change-log-merge add-log-current-defun change-log-mode
+;;;;;; add-change-log-entry-other-window add-change-log-entry find-change-log
+;;;;;; prompt-for-change-log-name add-log-mailing-address add-log-full-name
+;;;;;; add-log-current-defun-function) "add-log" "add-log.el" (18210
+;;;;;; 13714))
;;; Generated autoloads from add-log.el
(defvar add-log-current-defun-function nil "\
-*If non-nil, function to guess name of surrounding function.
+If non-nil, function to guess name of surrounding function.
It is used by `add-log-current-defun' in preference to built-in rules.
Returns function's name as a string, or nil if outside a function.")
-(custom-autoload (quote add-log-current-defun-function) "add-log" t)
+(custom-autoload 'add-log-current-defun-function "add-log" t)
(defvar add-log-full-name nil "\
-*Full name of user, for inclusion in ChangeLog daily headers.
+Full name of user, for inclusion in ChangeLog daily headers.
This defaults to the value returned by the function `user-full-name'.")
-(custom-autoload (quote add-log-full-name) "add-log" t)
+(custom-autoload 'add-log-full-name "add-log" t)
(defvar add-log-mailing-address nil "\
Email addresses of user, for inclusion in ChangeLog headers.
@@ -191,14 +191,14 @@ being a simple string, this value can also be a list. All elements
will be recognized as referring to the same user; when creating a new
ChangeLog entry, one element will be chosen at random.")
-(custom-autoload (quote add-log-mailing-address) "add-log" t)
+(custom-autoload 'add-log-mailing-address "add-log" t)
-(autoload (quote prompt-for-change-log-name) "add-log" "\
+(autoload 'prompt-for-change-log-name "add-log" "\
Prompt for a change log name.
\(fn)" nil nil)
-(autoload (quote find-change-log) "add-log" "\
+(autoload 'find-change-log "add-log" "\
Find a change log file for \\[add-change-log-entry] and return the name.
Optional arg FILE-NAME specifies the file to use.
@@ -216,7 +216,7 @@ Optional arg BUFFER-FILE overrides `buffer-file-name'.
\(fn &optional FILE-NAME BUFFER-FILE)" nil nil)
-(autoload (quote add-change-log-entry) "add-log" "\
+(autoload 'add-change-log-entry "add-log" "\
Find change log file, and add an entry for today and an item for this file.
Optional arg WHOAMI (interactive prefix) non-nil means prompt for user
name and email (stored in `add-log-full-name' and `add-log-mailing-address').
@@ -243,7 +243,7 @@ non-nil, otherwise in local time.
\(fn &optional WHOAMI FILE-NAME OTHER-WINDOW NEW-ENTRY)" t nil)
-(autoload (quote add-change-log-entry-other-window) "add-log" "\
+(autoload 'add-change-log-entry-other-window "add-log" "\
Find change log file in other window and add entry and item.
This is just like `add-change-log-entry' except that it displays
the change log file in another window.
@@ -251,7 +251,7 @@ the change log file in another window.
\(fn &optional WHOAMI FILE-NAME)" t nil)
(define-key ctl-x-4-map "a" 'add-change-log-entry-other-window)
-(autoload (quote change-log-mode) "add-log" "\
+(autoload 'change-log-mode "add-log" "\
Major mode for editing change logs; like Indented Text Mode.
Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74.
New log entries are usually made with \\[add-change-log-entry] or \\[add-change-log-entry-other-window].
@@ -261,16 +261,16 @@ Runs `change-log-mode-hook'.
\(fn)" t nil)
-(defvar add-log-lisp-like-modes (quote (emacs-lisp-mode lisp-mode scheme-mode dsssl-mode lisp-interaction-mode)) "\
+(defvar add-log-lisp-like-modes '(emacs-lisp-mode lisp-mode scheme-mode dsssl-mode lisp-interaction-mode) "\
*Modes that look like Lisp to `add-log-current-defun'.")
-(defvar add-log-c-like-modes (quote (c-mode c++-mode c++-c-mode objc-mode)) "\
+(defvar add-log-c-like-modes '(c-mode c++-mode c++-c-mode objc-mode) "\
*Modes that look like C to `add-log-current-defun'.")
-(defvar add-log-tex-like-modes (quote (TeX-mode plain-TeX-mode LaTeX-mode plain-tex-mode latex-mode)) "\
+(defvar add-log-tex-like-modes '(TeX-mode plain-TeX-mode LaTeX-mode tex-mode) "\
*Modes that look like TeX to `add-log-current-defun'.")
-(autoload (quote add-log-current-defun) "add-log" "\
+(autoload 'add-log-current-defun "add-log" "\
Return name of function definition point is in, or nil.
Understands C, Lisp, LaTeX (\"functions\" are chapters, sections, ...),
@@ -286,7 +286,7 @@ Has a preference of looking backwards.
\(fn)" nil nil)
-(autoload (quote change-log-merge) "add-log" "\
+(autoload 'change-log-merge "add-log" "\
Merge the contents of change log file OTHER-LOG with this buffer.
Both must be found in Change Log mode (since the merging depends on
the appropriate motion commands). OTHER-LOG can be either a file name
@@ -297,19 +297,14 @@ old-style time formats for entries are supported.
\(fn OTHER-LOG)" t nil)
-(autoload (quote change-log-redate) "add-log" "\
-Fix any old-style date entries in the current log file to default format.
-
-\(fn)" t nil)
-
;;;***
;;;### (autoloads (defadvice ad-activate ad-add-advice ad-disable-advice
;;;;;; ad-enable-advice ad-default-compilation-action ad-redefinition-action)
-;;;;;; "advice" "emacs-lisp/advice.el" (17992 30878))
+;;;;;; "advice" "emacs-lisp/advice.el" (18213 13926))
;;; Generated autoloads from emacs-lisp/advice.el
-(defvar ad-redefinition-action (quote warn) "\
+(defvar ad-redefinition-action 'warn "\
*Defines what to do with redefinitions during Advice de/activation.
Redefinition occurs if a previously activated function that already has an
original definition associated with it gets redefined and then de/activated.
@@ -320,9 +315,9 @@ old original, or keep it and raise an error. The values `accept', `discard',
it additionally prints a warning message. All other values will be
interpreted as `error'.")
-(custom-autoload (quote ad-redefinition-action) "advice" t)
+(custom-autoload 'ad-redefinition-action "advice" t)
-(defvar ad-default-compilation-action (quote maybe) "\
+(defvar ad-default-compilation-action 'maybe "\
*Defines whether to compile advised definitions during activation.
A value of `always' will result in unconditional compilation, `never' will
always avoid compilation, `maybe' will compile if the byte-compiler is already
@@ -331,19 +326,19 @@ advised function is compiled or a built-in function. Every other value will
be interpreted as `maybe'. This variable will only be considered if the
COMPILE argument of `ad-activate' was supplied as nil.")
-(custom-autoload (quote ad-default-compilation-action) "advice" t)
+(custom-autoload 'ad-default-compilation-action "advice" t)
-(autoload (quote ad-enable-advice) "advice" "\
+(autoload 'ad-enable-advice "advice" "\
Enables the advice of FUNCTION with CLASS and NAME.
\(fn FUNCTION CLASS NAME)" t nil)
-(autoload (quote ad-disable-advice) "advice" "\
+(autoload 'ad-disable-advice "advice" "\
Disable the advice of FUNCTION with CLASS and NAME.
\(fn FUNCTION CLASS NAME)" t nil)
-(autoload (quote ad-add-advice) "advice" "\
+(autoload 'ad-add-advice "advice" "\
Add a piece of ADVICE to FUNCTION's list of advices in CLASS.
If FUNCTION already has one or more pieces of advice of the specified
CLASS then POSITION determines where the new piece will go. The value
@@ -358,7 +353,7 @@ will clear the cache.
\(fn FUNCTION ADVICE CLASS POSITION)" nil nil)
-(autoload (quote ad-activate) "advice" "\
+(autoload 'ad-activate "advice" "\
Activate all the advice information of an advised FUNCTION.
If FUNCTION has a proper original definition then an advised
definition will be generated from FUNCTION's advice info and the
@@ -377,13 +372,13 @@ definition will always be cached for later usage.
\(fn FUNCTION &optional COMPILE)" t nil)
-(autoload (quote defadvice) "advice" "\
+(autoload 'defadvice "advice" "\
Define a piece of advice for FUNCTION (a symbol).
The syntax of `defadvice' is as follows:
(defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
[DOCSTRING] [INTERACTIVE-FORM]
- BODY... )
+ BODY...)
FUNCTION ::= Name of the function to be advised.
CLASS ::= `before' | `around' | `after' | `activation' | `deactivation'.
@@ -434,10 +429,10 @@ See Info node `(elisp)Advising Functions' for comprehensive documentation.
;;;### (autoloads (align-newline-and-indent align-unhighlight-rule
;;;;;; align-highlight-rule align-current align-entire align-regexp
-;;;;;; align) "align" "align.el" (17842 58280))
+;;;;;; align) "align" "align.el" (18088 55079))
;;; Generated autoloads from align.el
-(autoload (quote align) "align" "\
+(autoload 'align "align" "\
Attempt to align a region based on a set of alignment rules.
BEG and END mark the region. If BEG and END are specifically set to
nil (this can only be done programmatically), the beginning and end of
@@ -456,7 +451,7 @@ on the format of these lists.
\(fn BEG END &optional SEPARATE RULES EXCLUDE-RULES)" t nil)
-(autoload (quote align-regexp) "align" "\
+(autoload 'align-regexp "align" "\
Align the current region using an ad-hoc rule read from the minibuffer.
BEG and END mark the limits of the region. This function will prompt
for the REGEXP to align with. If no prefix arg was specified, you
@@ -482,7 +477,7 @@ region, call `align-regexp' and type in that regular expression.
\(fn BEG END REGEXP &optional GROUP SPACING REPEAT)" t nil)
-(autoload (quote align-entire) "align" "\
+(autoload 'align-entire "align" "\
Align the selected region as if it were one alignment section.
BEG and END mark the extent of the region. If RULES or EXCLUDE-RULES
is set to a list of rules (see `align-rules-list'), it can be used to
@@ -491,7 +486,7 @@ align that section.
\(fn BEG END &optional RULES EXCLUDE-RULES)" t nil)
-(autoload (quote align-current) "align" "\
+(autoload 'align-current "align" "\
Call `align' on the current alignment section.
This function assumes you want to align only the current section, and
so saves you from having to specify the region. If RULES or
@@ -501,7 +496,7 @@ been used to align that section.
\(fn &optional RULES EXCLUDE-RULES)" t nil)
-(autoload (quote align-highlight-rule) "align" "\
+(autoload 'align-highlight-rule "align" "\
Highlight the whitespace which a given rule would have modified.
BEG and END mark the extent of the region. TITLE identifies the rule
that should be highlighted. If RULES or EXCLUDE-RULES is set to a
@@ -511,12 +506,12 @@ to be colored.
\(fn BEG END TITLE &optional RULES EXCLUDE-RULES)" t nil)
-(autoload (quote align-unhighlight-rule) "align" "\
+(autoload 'align-unhighlight-rule "align" "\
Remove any highlighting that was added by `align-highlight-rule'.
\(fn)" t nil)
-(autoload (quote align-newline-and-indent) "align" "\
+(autoload 'align-newline-and-indent "align" "\
A replacement function for `newline-and-indent', aligning as it goes.
\(fn)" t nil)
@@ -524,47 +519,48 @@ A replacement function for `newline-and-indent', aligning as it goes.
;;;***
;;;### (autoloads (outlineify-sticky allout-mode) "allout" "allout.el"
-;;;;;; (17892 52945))
+;;;;;; (18187 36838))
;;; Generated autoloads from allout.el
-(put (quote allout-show-bodies) (quote safe-local-variable) (if (fboundp (quote booleanp)) (quote booleanp) (quote (lambda (x) (member x (quote (t nil)))))))
+(put 'allout-show-bodies 'safe-local-variable (if (fboundp 'booleanp) 'booleanp '(lambda (x) (member x '(t nil)))))
-(put (quote allout-header-prefix) (quote safe-local-variable) (quote stringp))
+(put 'allout-header-prefix 'safe-local-variable 'stringp)
-(put (quote allout-primary-bullet) (quote safe-local-variable) (quote stringp))
+(put 'allout-primary-bullet 'safe-local-variable 'stringp)
-(put (quote allout-plain-bullets-string) (quote safe-local-variable) (quote stringp))
+(put 'allout-plain-bullets-string 'safe-local-variable 'stringp)
-(put (quote allout-distinctive-bullets-string) (quote safe-local-variable) (quote stringp))
+(put 'allout-distinctive-bullets-string 'safe-local-variable 'stringp)
-(put (quote allout-use-mode-specific-leader) (quote safe-local-variable) (quote (lambda (x) (or (memq x (quote (t nil allout-mode-leaders comment-start))) (stringp x)))))
+(put 'allout-use-mode-specific-leader 'safe-local-variable '(lambda (x) (or (memq x '(t nil allout-mode-leaders comment-start)) (stringp x))))
-(put (quote allout-old-style-prefixes) (quote safe-local-variable) (if (fboundp (quote booleanp)) (quote booleanp) (quote (lambda (x) (member x (quote (t nil)))))))
+(put 'allout-old-style-prefixes 'safe-local-variable (if (fboundp 'booleanp) 'booleanp '(lambda (x) (member x '(t nil)))))
-(put (quote allout-stylish-prefixes) (quote safe-local-variable) (if (fboundp (quote booleanp)) (quote booleanp) (quote (lambda (x) (member x (quote (t nil)))))))
+(put 'allout-stylish-prefixes 'safe-local-variable (if (fboundp 'booleanp) 'booleanp '(lambda (x) (member x '(t nil)))))
-(put (quote allout-numbered-bullet) (quote safe-local-variable) (if (fboundp (quote string-or-null-p)) (quote string-or-null-p) (quote (lambda (x) (or (stringp x) (null x))))))
+(put 'allout-numbered-bullet 'safe-local-variable (if (fboundp 'string-or-null-p) 'string-or-null-p '(lambda (x) (or (stringp x) (null x)))))
-(put (quote allout-file-xref-bullet) (quote safe-local-variable) (if (fboundp (quote string-or-null-p)) (quote string-or-null-p) (quote (lambda (x) (or (stringp x) (null x))))))
+(put 'allout-file-xref-bullet 'safe-local-variable (if (fboundp 'string-or-null-p) 'string-or-null-p '(lambda (x) (or (stringp x) (null x)))))
-(put (quote allout-presentation-padding) (quote safe-local-variable) (quote integerp))
+(put 'allout-presentation-padding 'safe-local-variable 'integerp)
-(put (quote allout-use-hanging-indents) (quote safe-local-variable) (if (fboundp (quote booleanp)) (quote booleanp) (quote (lambda (x) (member x (quote (t nil)))))))
+(put 'allout-use-hanging-indents 'safe-local-variable (if (fboundp 'booleanp) 'booleanp '(lambda (x) (member x '(t nil)))))
-(put (quote allout-reindent-bodies) (quote safe-local-variable) (quote (lambda (x) (memq x (quote (nil t text force))))))
+(put 'allout-reindent-bodies 'safe-local-variable '(lambda (x) (memq x '(nil t text force))))
-(put (quote allout-layout) (quote safe-local-variable) (quote (lambda (x) (or (numberp x) (listp x) (memq x (quote (: * + -)))))))
+(put 'allout-layout 'safe-local-variable '(lambda (x) (or (numberp x) (listp x) (memq x '(: * + -)))))
-(put (quote allout-passphrase-verifier-string) (quote safe-local-variable) (quote stringp))
+(put 'allout-passphrase-verifier-string 'safe-local-variable 'stringp)
-(put (quote allout-passphrase-hint-string) (quote safe-local-variable) (quote stringp))
+(put 'allout-passphrase-hint-string 'safe-local-variable 'stringp)
-(autoload (quote allout-mode) "allout" "\
+(autoload 'allout-mode "allout" "\
Toggle minor mode for controlling exposure and editing of text outlines.
\\<allout-mode-map>
-Optional arg forces mode to re-initialize iff arg is positive num or
-symbol. Allout outline mode always runs as a minor mode.
+Optional prefix argument TOGGLE forces the mode to re-initialize
+if it is positive, otherwise it turns the mode off. Allout
+outline mode always runs as a minor mode.
Allout outline mode provides extensive outline oriented formatting and
manipulation. It enables structural editing of outlines, as well as
@@ -817,9 +813,9 @@ OPEN: A TOPIC that is not CLOSED, though its OFFSPRING or BODY may be.
\(fn &optional TOGGLE)" t nil)
-(defalias (quote outlinify-sticky) (quote outlineify-sticky))
+(defalias 'outlinify-sticky 'outlineify-sticky)
-(autoload (quote outlineify-sticky) "allout" "\
+(autoload 'outlineify-sticky "allout" "\
Activate outline mode and establish file var so it is started subsequently.
See doc-string for `allout-layout' and `allout-init' for details on
@@ -830,12 +826,12 @@ setup for auto-startup.
;;;***
;;;### (autoloads (ange-ftp-hook-function ange-ftp-reread-dir) "ange-ftp"
-;;;;;; "net/ange-ftp.el" (17905 9579))
+;;;;;; "net/ange-ftp.el" (18203 37788))
;;; Generated autoloads from net/ange-ftp.el
-(defalias (quote ange-ftp-re-read-dir) (quote ange-ftp-reread-dir))
+(defalias 'ange-ftp-re-read-dir 'ange-ftp-reread-dir)
-(autoload (quote ange-ftp-reread-dir) "ange-ftp" "\
+(autoload 'ange-ftp-reread-dir "ange-ftp" "\
Reread remote directory DIR to update the directory cache.
The implementation of remote ftp file names caches directory contents
for speed. Therefore, when new remote files are created, Emacs
@@ -844,7 +840,7 @@ directory, so that Emacs will know its current contents.
\(fn &optional DIR)" t nil)
-(autoload (quote ange-ftp-hook-function) "ange-ftp" "\
+(autoload 'ange-ftp-hook-function "ange-ftp" "\
Not documented
\(fn OPERATION &rest ARGS)" nil nil)
@@ -852,10 +848,10 @@ Not documented
;;;***
;;;### (autoloads (animate-birthday-present animate-sequence animate-string)
-;;;;;; "animate" "play/animate.el" (17941 38806))
+;;;;;; "animate" "play/animate.el" (18088 55113))
;;; Generated autoloads from play/animate.el
-(autoload (quote animate-string) "animate" "\
+(autoload 'animate-string "animate" "\
Display STRING starting at position VPOS, HPOS, using animation.
The characters start at randomly chosen places,
and all slide in parallel to their final positions,
@@ -865,13 +861,13 @@ in the current window.
\(fn STRING VPOS &optional HPOS)" nil nil)
-(autoload (quote animate-sequence) "animate" "\
+(autoload 'animate-sequence "animate" "\
Display strings from LIST-OF-STRING with animation in a new buffer.
Strings will be separated from each other by SPACE lines.
\(fn LIST-OF-STRINGS SPACE)" nil nil)
-(autoload (quote animate-birthday-present) "animate" "\
+(autoload 'animate-birthday-present "animate" "\
Display one's birthday present in a new buffer.
You can specify the one's name by NAME; the default value is \"Sarah\".
@@ -880,15 +876,15 @@ You can specify the one's name by NAME; the default value is \"Sarah\".
;;;***
;;;### (autoloads (ansi-color-process-output ansi-color-for-comint-mode-on)
-;;;;;; "ansi-color" "ansi-color.el" (17842 58280))
+;;;;;; "ansi-color" "ansi-color.el" (18169 11930))
;;; Generated autoloads from ansi-color.el
-(autoload (quote ansi-color-for-comint-mode-on) "ansi-color" "\
+(autoload 'ansi-color-for-comint-mode-on "ansi-color" "\
Set `ansi-color-for-comint-mode' to t.
\(fn)" t nil)
-(autoload (quote ansi-color-process-output) "ansi-color" "\
+(autoload 'ansi-color-process-output "ansi-color" "\
Maybe translate SGR control sequences of comint output into text-properties.
Depending on variable `ansi-color-for-comint-mode' the comint output is
@@ -906,10 +902,10 @@ This is a good function to put in `comint-output-filter-functions'.
;;;***
;;;### (autoloads (antlr-set-tabs antlr-mode antlr-show-makefile-rules)
-;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (17833 42928))
+;;;;;; "antlr-mode" "progmodes/antlr-mode.el" (18203 37788))
;;; Generated autoloads from progmodes/antlr-mode.el
-(autoload (quote antlr-show-makefile-rules) "antlr-mode" "\
+(autoload 'antlr-show-makefile-rules "antlr-mode" "\
Show Makefile rules for all grammar files in the current directory.
If the `major-mode' of the current buffer has the value `makefile-mode',
the rules are directory inserted at point. Otherwise, a *Help* buffer
@@ -928,13 +924,13 @@ commentary with value `antlr-help-unknown-file-text' is added. The
\(fn)" t nil)
-(autoload (quote antlr-mode) "antlr-mode" "\
+(autoload 'antlr-mode "antlr-mode" "\
Major mode for editing ANTLR grammar files.
\\{antlr-mode-map}
\(fn)" t nil)
-(autoload (quote antlr-set-tabs) "antlr-mode" "\
+(autoload 'antlr-set-tabs "antlr-mode" "\
Use ANTLR's convention for TABs according to `antlr-tab-offset-alist'.
Used in `antlr-mode'. Also a useful function in `java-mode-hook'.
@@ -945,7 +941,7 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'.
;;;### (autoloads (appt-activate appt-make-list appt-delete appt-add
;;;;;; appt-display-diary appt-display-duration appt-display-mode-line
;;;;;; appt-msg-window appt-visible appt-audible appt-message-warning-time
-;;;;;; appt-issue-message) "appt" "calendar/appt.el" (17952 17513))
+;;;;;; appt-issue-message) "appt" "calendar/appt.el" (18090 40233))
;;; Generated autoloads from calendar/appt.el
(defvar appt-issue-message t "\
@@ -953,60 +949,60 @@ Used in `antlr-mode'. Also a useful function in `java-mode-hook'.
To be detected, the diary entry must have the format described in the
documentation of the function `appt-check'.")
-(custom-autoload (quote appt-issue-message) "appt" t)
+(custom-autoload 'appt-issue-message "appt" t)
(defvar appt-message-warning-time 12 "\
*Time in minutes before an appointment that the warning begins.")
-(custom-autoload (quote appt-message-warning-time) "appt" t)
+(custom-autoload 'appt-message-warning-time "appt" t)
(defvar appt-audible t "\
*Non-nil means beep to indicate appointment.")
-(custom-autoload (quote appt-audible) "appt" t)
+(custom-autoload 'appt-audible "appt" t)
(defvar appt-visible t "\
*Non-nil means display appointment message in echo area.
This variable is only relevant if `appt-msg-window' is nil.")
-(custom-autoload (quote appt-visible) "appt" t)
+(custom-autoload 'appt-visible "appt" t)
(defvar appt-msg-window t "\
*Non-nil means display appointment message in another window.
If non-nil, this variable overrides `appt-visible'.")
-(custom-autoload (quote appt-msg-window) "appt" t)
+(custom-autoload 'appt-msg-window "appt" t)
(defvar appt-display-mode-line t "\
*Non-nil means display minutes to appointment and time on the mode line.
This is in addition to any other display of appointment messages.")
-(custom-autoload (quote appt-display-mode-line) "appt" t)
+(custom-autoload 'appt-display-mode-line "appt" t)
(defvar appt-display-duration 10 "\
*The number of seconds an appointment message is displayed.
Only relevant if reminders are to be displayed in their own window.")
-(custom-autoload (quote appt-display-duration) "appt" t)
+(custom-autoload 'appt-display-duration "appt" t)
(defvar appt-display-diary t "\
*Non-nil displays the diary when the appointment list is first initialized.
This will occur at midnight when the appointment list is updated.")
-(custom-autoload (quote appt-display-diary) "appt" t)
+(custom-autoload 'appt-display-diary "appt" t)
-(autoload (quote appt-add) "appt" "\
+(autoload 'appt-add "appt" "\
Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG.
The time should be in either 24 hour format or am/pm format.
\(fn NEW-APPT-TIME NEW-APPT-MSG)" t nil)
-(autoload (quote appt-delete) "appt" "\
+(autoload 'appt-delete "appt" "\
Delete an appointment from the list of appointments.
\(fn)" t nil)
-(autoload (quote appt-make-list) "appt" "\
+(autoload 'appt-make-list "appt" "\
Update the appointments list from today's diary buffer.
The time must be at the beginning of a line for it to be
put in the appointments list (see examples in documentation of
@@ -1022,7 +1018,7 @@ appointment package (if it is not already active).
\(fn)" nil nil)
-(autoload (quote appt-activate) "appt" "\
+(autoload 'appt-activate "appt" "\
Toggle checking of appointments.
With optional numeric argument ARG, turn appointment checking on if
ARG is positive, otherwise off.
@@ -1033,10 +1029,10 @@ ARG is positive, otherwise off.
;;;### (autoloads (apropos-documentation apropos-value apropos apropos-documentation-property
;;;;;; apropos-command apropos-variable apropos-read-pattern) "apropos"
-;;;;;; "apropos.el" (17842 58280))
+;;;;;; "apropos.el" (18088 55080))
;;; Generated autoloads from apropos.el
-(autoload (quote apropos-read-pattern) "apropos" "\
+(autoload 'apropos-read-pattern "apropos" "\
Read an apropos pattern, either a word list or a regexp.
Returns the user pattern, either a list of words which are matched
literally, or a string which is used as a regexp to search for.
@@ -1046,7 +1042,7 @@ kind of objects to search.
\(fn SUBJECT)" nil nil)
-(autoload (quote apropos-variable) "apropos" "\
+(autoload 'apropos-variable "apropos" "\
Show user variables that match PATTERN.
PATTERN can be a word, a list of words (separated by spaces),
or a regexp (using some regexp special characters). If it is a word,
@@ -1058,9 +1054,9 @@ normal variables.
\(fn PATTERN &optional DO-ALL)" t nil)
-(defalias (quote command-apropos) (quote apropos-command))
+(defalias 'command-apropos 'apropos-command)
-(autoload (quote apropos-command) "apropos" "\
+(autoload 'apropos-command "apropos" "\
Show commands (interactively callable functions) that match PATTERN.
PATTERN can be a word, a list of words (separated by spaces),
or a regexp (using some regexp special characters). If it is a word,
@@ -1078,12 +1074,12 @@ while a list of strings is used as a word list.
\(fn PATTERN &optional DO-ALL VAR-PREDICATE)" t nil)
-(autoload (quote apropos-documentation-property) "apropos" "\
+(autoload 'apropos-documentation-property "apropos" "\
Like (documentation-property SYMBOL PROPERTY RAW) but handle errors.
\(fn SYMBOL PROPERTY RAW)" nil nil)
-(autoload (quote apropos) "apropos" "\
+(autoload 'apropos "apropos" "\
Show all meaningful Lisp symbols whose names match PATTERN.
Symbols are shown if they are defined as functions, variables, or
faces, or if they have nonempty property lists.
@@ -1100,7 +1096,7 @@ Returns list of symbols and documentation found.
\(fn PATTERN &optional DO-ALL)" t nil)
-(autoload (quote apropos-value) "apropos" "\
+(autoload 'apropos-value "apropos" "\
Show all symbols whose value's printed representation matches PATTERN.
PATTERN can be a word, a list of words (separated by spaces),
or a regexp (using some regexp special characters). If it is a word,
@@ -1113,7 +1109,7 @@ Returns list of symbols and values found.
\(fn PATTERN &optional DO-ALL)" t nil)
-(autoload (quote apropos-documentation) "apropos" "\
+(autoload 'apropos-documentation "apropos" "\
Show symbols whose documentation contains matches for PATTERN.
PATTERN can be a word, a list of words (separated by spaces),
or a regexp (using some regexp special characters). If it is a word,
@@ -1129,11 +1125,11 @@ Returns list of symbols and documentation found.
;;;***
-;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (17960
-;;;;;; 49045))
+;;;### (autoloads (archive-mode) "arc-mode" "arc-mode.el" (18163
+;;;;;; 2859))
;;; Generated autoloads from arc-mode.el
-(autoload (quote archive-mode) "arc-mode" "\
+(autoload 'archive-mode "arc-mode" "\
Major mode for viewing an archive file in a dired-like way.
You can move around using the usual cursor motion commands.
Letters no longer insert themselves.
@@ -1150,10 +1146,10 @@ archive.
;;;***
-;;;### (autoloads (array-mode) "array" "array.el" (17842 58280))
+;;;### (autoloads (array-mode) "array" "array.el" (18088 55080))
;;; Generated autoloads from array.el
-(autoload (quote array-mode) "array" "\
+(autoload 'array-mode "array" "\
Major mode for editing arrays.
Array mode is a specialized mode for editing arrays. An array is
@@ -1221,11 +1217,11 @@ Entering array mode calls the function `array-mode-hook'.
;;;***
-;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (17842
-;;;;;; 58277))
+;;;### (autoloads (artist-mode) "artist" "textmodes/artist.el" (18200
+;;;;;; 51267))
;;; Generated autoloads from textmodes/artist.el
-(autoload (quote artist-mode) "artist" "\
+(autoload 'artist-mode "artist" "\
Toggle artist mode. With arg, turn artist mode on if arg is positive.
Artist lets you draw lines, squares, rectangles and poly-lines, ellipses
and circles with your mouse and/or keyboard.
@@ -1427,11 +1423,11 @@ Keymap summary
;;;***
-;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (17842
-;;;;;; 56333))
+;;;### (autoloads (asm-mode) "asm-mode" "progmodes/asm-mode.el" (18088
+;;;;;; 55114))
;;; Generated autoloads from progmodes/asm-mode.el
-(autoload (quote asm-mode) "asm-mode" "\
+(autoload 'asm-mode "asm-mode" "\
Major mode for editing typical assembler code.
Features a private abbrev table and the following bindings:
@@ -1455,17 +1451,28 @@ Special commands:
;;;***
+;;;### (autoloads (assistant) "assistant" "gnus/assistant.el" (18212
+;;;;;; 21478))
+;;; Generated autoloads from gnus/assistant.el
+
+(autoload 'assistant "assistant" "\
+Assist setting up Emacs based on FILE.
+
+\(fn FILE)" t nil)
+
+;;;***
+
;;;### (autoloads (autoarg-kp-mode autoarg-mode) "autoarg" "autoarg.el"
-;;;;;; (17842 58280))
+;;;;;; (18088 55080))
;;; Generated autoloads from autoarg.el
(defvar autoarg-mode nil "\
Non-nil if Autoarg mode is enabled.
See the command `autoarg-mode' for a description of this minor mode.")
-(custom-autoload (quote autoarg-mode) "autoarg" nil)
+(custom-autoload 'autoarg-mode "autoarg" nil)
-(autoload (quote autoarg-mode) "autoarg" "\
+(autoload 'autoarg-mode "autoarg" "\
Toggle Autoarg minor mode globally.
With ARG, turn Autoarg mode on if ARG is positive, off otherwise.
\\<autoarg-mode-map>
@@ -1494,9 +1501,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `autoarg-kp-mode'.")
-(custom-autoload (quote autoarg-kp-mode) "autoarg" nil)
+(custom-autoload 'autoarg-kp-mode "autoarg" nil)
-(autoload (quote autoarg-kp-mode) "autoarg" "\
+(autoload 'autoarg-kp-mode "autoarg" "\
Toggle Autoarg-KP minor mode globally.
With ARG, turn Autoarg mode on if ARG is positive, off otherwise.
\\<autoarg-kp-mode-map>
@@ -1510,10 +1517,10 @@ etc. to supply digit arguments.
;;;***
;;;### (autoloads (autoconf-mode) "autoconf" "progmodes/autoconf.el"
-;;;;;; (17842 56333))
+;;;;;; (18147 59473))
;;; Generated autoloads from progmodes/autoconf.el
-(autoload (quote autoconf-mode) "autoconf" "\
+(autoload 'autoconf-mode "autoconf" "\
Major mode for editing Autoconf configure.in files.
\(fn)" t nil)
@@ -1521,16 +1528,16 @@ Major mode for editing Autoconf configure.in files.
;;;***
;;;### (autoloads (auto-insert-mode define-auto-insert auto-insert)
-;;;;;; "autoinsert" "autoinsert.el" (17842 58280))
+;;;;;; "autoinsert" "autoinsert.el" (18183 58476))
;;; Generated autoloads from autoinsert.el
-(autoload (quote auto-insert) "autoinsert" "\
+(autoload 'auto-insert "autoinsert" "\
Insert default contents into new files if variable `auto-insert' is non-nil.
Matches the visited file name against the elements of `auto-insert-alist'.
\(fn)" t nil)
-(autoload (quote define-auto-insert) "autoinsert" "\
+(autoload 'define-auto-insert "autoinsert" "\
Associate CONDITION with (additional) ACTION in `auto-insert-alist'.
Optional AFTER means to insert action after all existing actions for CONDITION,
or if CONDITION had no actions, after all other CONDITIONs.
@@ -1544,9 +1551,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `auto-insert-mode'.")
-(custom-autoload (quote auto-insert-mode) "autoinsert" nil)
+(custom-autoload 'auto-insert-mode "autoinsert" nil)
-(autoload (quote auto-insert-mode) "autoinsert" "\
+(autoload 'auto-insert-mode "autoinsert" "\
Toggle Auto-insert mode.
With prefix ARG, turn Auto-insert mode on if and only if ARG is positive.
Returns the new status of Auto-insert mode (non-nil means on).
@@ -1560,10 +1567,12 @@ insert a template for the file depending on the mode of the buffer.
;;;### (autoloads (batch-update-autoloads update-directory-autoloads
;;;;;; update-file-autoloads) "autoload" "emacs-lisp/autoload.el"
-;;;;;; (17860 50557))
+;;;;;; (18120 34750))
;;; Generated autoloads from emacs-lisp/autoload.el
-(autoload (quote update-file-autoloads) "autoload" "\
+(put 'generated-autoload-file 'safe-local-variable 'stringp)
+
+(autoload 'update-file-autoloads "autoload" "\
Update the autoloads for FILE in `generated-autoload-file'
\(which FILE might bind in its local variables).
If SAVE-AFTER is non-nil (which is always, when called interactively),
@@ -1573,7 +1582,7 @@ Return FILE if there was no autoload cookie in it, else nil.
\(fn FILE &optional SAVE-AFTER)" t nil)
-(autoload (quote update-directory-autoloads) "autoload" "\
+(autoload 'update-directory-autoloads "autoload" "\
Update loaddefs.el with all the current autoloads from DIRS, and no old ones.
This uses `update-file-autoloads' (which see) to do its work.
In an interactive call, you must give one argument, the name
@@ -1585,7 +1594,7 @@ directory or directories specified.
\(fn &rest DIRS)" t nil)
-(autoload (quote batch-update-autoloads) "autoload" "\
+(autoload 'batch-update-autoloads "autoload" "\
Update loaddefs.el autoloads in batch mode.
Calls `update-directory-autoloads' on the command line arguments.
@@ -1595,10 +1604,10 @@ Calls `update-directory-autoloads' on the command line arguments.
;;;### (autoloads (global-auto-revert-mode turn-on-auto-revert-tail-mode
;;;;;; auto-revert-tail-mode turn-on-auto-revert-mode auto-revert-mode)
-;;;;;; "autorevert" "autorevert.el" (17925 15265))
+;;;;;; "autorevert" "autorevert.el" (18177 7730))
;;; Generated autoloads from autorevert.el
-(autoload (quote auto-revert-mode) "autorevert" "\
+(autoload 'auto-revert-mode "autorevert" "\
Toggle reverting buffer when file on disk changes.
With arg, turn Auto Revert mode on if and only if arg is positive.
@@ -1609,7 +1618,7 @@ without being changed in the part that is already in the buffer.
\(fn &optional ARG)" t nil)
-(autoload (quote turn-on-auto-revert-mode) "autorevert" "\
+(autoload 'turn-on-auto-revert-mode "autorevert" "\
Turn on Auto-Revert Mode.
This function is designed to be added to hooks, for example:
@@ -1617,9 +1626,9 @@ This function is designed to be added to hooks, for example:
\(fn)" nil nil)
-(autoload (quote auto-revert-tail-mode) "autorevert" "\
+(autoload 'auto-revert-tail-mode "autorevert" "\
Toggle reverting tail of buffer when file on disk grows.
-With arg, turn Tail mode on iff arg is positive.
+With arg, turn Tail mode on if arg is positive, otherwise turn it off.
When Tail mode is enabled, the tail of the file is constantly
followed, as with the shell command `tail -f'. This means that
@@ -1635,7 +1644,7 @@ Use `auto-revert-mode' for changes other than appends!
\(fn &optional ARG)" t nil)
-(autoload (quote turn-on-auto-revert-tail-mode) "autorevert" "\
+(autoload 'turn-on-auto-revert-tail-mode "autorevert" "\
Turn on Auto-Revert Tail Mode.
This function is designed to be added to hooks, for example:
@@ -1650,9 +1659,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-auto-revert-mode'.")
-(custom-autoload (quote global-auto-revert-mode) "autorevert" nil)
+(custom-autoload 'global-auto-revert-mode "autorevert" nil)
-(autoload (quote global-auto-revert-mode) "autorevert" "\
+(autoload 'global-auto-revert-mode "autorevert" "\
Revert any buffer when file on disk changes.
With arg, turn Auto Revert mode on globally if and only if arg is positive.
@@ -1664,7 +1673,7 @@ Use `auto-revert-mode' to revert a particular buffer.
;;;***
;;;### (autoloads (mouse-avoidance-mode mouse-avoidance-mode) "avoid"
-;;;;;; "avoid.el" (17842 58280))
+;;;;;; "avoid.el" (18088 55080))
;;; Generated autoloads from avoid.el
(defvar mouse-avoidance-mode nil "\
@@ -1673,9 +1682,9 @@ See function `mouse-avoidance-mode' for possible values.
Setting this variable directly does not take effect;
use either \\[customize] or the function `mouse-avoidance-mode'.")
-(custom-autoload (quote mouse-avoidance-mode) "avoid" nil)
+(custom-autoload 'mouse-avoidance-mode "avoid" nil)
-(autoload (quote mouse-avoidance-mode) "avoid" "\
+(autoload 'mouse-avoidance-mode "avoid" "\
Set cursor avoidance mode to MODE.
MODE should be one of the symbols `banish', `exile', `jump', `animate',
`cat-and-mouse', `proteus', or `none'.
@@ -1705,10 +1714,10 @@ definition of \"random distance\".)
;;;***
;;;### (autoloads (backquote) "backquote" "emacs-lisp/backquote.el"
-;;;;;; (17842 54152))
+;;;;;; (18130 62047))
;;; Generated autoloads from emacs-lisp/backquote.el
-(autoload (quote backquote) "backquote" "\
+(autoload 'backquote "backquote" "\
Argument STRUCTURE describes a template to build.
The whole structure acts as if it were quoted except for certain
@@ -1725,16 +1734,16 @@ Vectors work just like lists. Nested backquotes are permitted.
\(fn ARG)" nil (quote macro))
-(defalias (quote \`) (symbol-function (quote backquote)))
+(defalias '\` (symbol-function 'backquote))
;;;***
;;;### (autoloads (display-battery-mode battery) "battery" "battery.el"
-;;;;;; (17842 58280))
+;;;;;; (18088 55080))
;;; Generated autoloads from battery.el
(put 'battery-mode-line-string 'risky-local-variable t)
-(autoload (quote battery) "battery" "\
+(autoload 'battery "battery" "\
Display battery status information in the echo area.
The text being displayed in the echo area is controlled by the variables
`battery-echo-area-format' and `battery-status-function'.
@@ -1748,9 +1757,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `display-battery-mode'.")
-(custom-autoload (quote display-battery-mode) "battery" nil)
+(custom-autoload 'display-battery-mode "battery" nil)
-(autoload (quote display-battery-mode) "battery" "\
+(autoload 'display-battery-mode "battery" "\
Display battery status information in the mode line.
The text being displayed in the mode line is controlled by the variables
`battery-mode-line-format' and `battery-status-function'.
@@ -1762,10 +1771,10 @@ seconds.
;;;***
;;;### (autoloads (benchmark benchmark-run-compiled benchmark-run)
-;;;;;; "benchmark" "emacs-lisp/benchmark.el" (17842 54152))
+;;;;;; "benchmark" "emacs-lisp/benchmark.el" (18088 55094))
;;; Generated autoloads from emacs-lisp/benchmark.el
-(autoload (quote benchmark-run) "benchmark" "\
+(autoload 'benchmark-run "benchmark" "\
Time execution of FORMS.
If REPETITIONS is supplied as a number, run forms that many times,
accounting for the overhead of the resulting loop. Otherwise run
@@ -1776,7 +1785,7 @@ See also `benchmark-run-compiled'.
\(fn &optional REPETITIONS &rest FORMS)" nil (quote macro))
-(autoload (quote benchmark-run-compiled) "benchmark" "\
+(autoload 'benchmark-run-compiled "benchmark" "\
Time execution of compiled version of FORMS.
This is like `benchmark-run', but what is timed is a funcall of the
byte code obtained by wrapping FORMS in a `lambda' and compiling the
@@ -1784,7 +1793,7 @@ result. The overhead of the `lambda's is accounted for.
\(fn &optional REPETITIONS &rest FORMS)" nil (quote macro))
-(autoload (quote benchmark) "benchmark" "\
+(autoload 'benchmark "benchmark" "\
Print the time taken for REPETITIONS executions of FORM.
Interactively, REPETITIONS is taken from the prefix arg. For
non-interactive use see also `benchmark-run' and
@@ -1794,11 +1803,11 @@ non-interactive use see also `benchmark-run' and
;;;***
-;;;### (autoloads (bibtex-mode) "bibtex" "textmodes/bibtex.el" (17956
-;;;;;; 21270))
+;;;### (autoloads (bibtex-mode) "bibtex" "textmodes/bibtex.el" (18088
+;;;;;; 55119))
;;; Generated autoloads from textmodes/bibtex.el
-(autoload (quote bibtex-mode) "bibtex" "\
+(autoload 'bibtex-mode "bibtex" "\
Major mode for editing BibTeX files.
General information on working with BibTeX mode:
@@ -1855,36 +1864,48 @@ if that value is non-nil.
;;;***
+;;;### (autoloads (bibtex-style-mode) "bibtex-style" "textmodes/bibtex-style.el"
+;;;;;; (18157 34340))
+;;; Generated autoloads from textmodes/bibtex-style.el
+ (add-to-list 'auto-mode-alist '("\\.bst\\'" . bibtex-style-mode))
+
+(autoload 'bibtex-style-mode "bibtex-style" "\
+Major mode for editing BibTeX style files.
+
+\(fn)" t nil)
+
+;;;***
+
;;;### (autoloads (binhex-decode-region binhex-decode-region-external
;;;;;; binhex-decode-region-internal) "binhex" "gnus/binhex.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/binhex.el
(defconst binhex-begin-line "^:...............................................................$")
-(autoload (quote binhex-decode-region-internal) "binhex" "\
+(autoload 'binhex-decode-region-internal "binhex" "\
Binhex decode region between START and END without using an external program.
If HEADER-ONLY is non-nil only decode header and return filename.
\(fn START END &optional HEADER-ONLY)" t nil)
-(autoload (quote binhex-decode-region-external) "binhex" "\
+(autoload 'binhex-decode-region-external "binhex" "\
Binhex decode region between START and END using external decoder.
\(fn START END)" t nil)
-(autoload (quote binhex-decode-region) "binhex" "\
+(autoload 'binhex-decode-region "binhex" "\
Binhex decode region between START and END.
\(fn START END)" t nil)
;;;***
-;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (17842
-;;;;;; 55395))
+;;;### (autoloads (blackbox) "blackbox" "play/blackbox.el" (18203
+;;;;;; 37788))
;;; Generated autoloads from play/blackbox.el
-(autoload (quote blackbox) "blackbox" "\
+(autoload 'blackbox "blackbox" "\
Play blackbox.
Optional prefix argument is the number of balls; the default is 4.
@@ -2002,8 +2023,9 @@ a reflection.
;;;### (autoloads (bookmark-bmenu-list bookmark-load bookmark-save
;;;;;; bookmark-write bookmark-delete bookmark-insert bookmark-rename
-;;;;;; bookmark-insert-location bookmark-relocate bookmark-jump
-;;;;;; bookmark-set) "bookmark" "bookmark.el" (17842 58280))
+;;;;;; bookmark-insert-location bookmark-relocate bookmark-jump-other-window
+;;;;;; bookmark-jump bookmark-set) "bookmark" "bookmark.el" (18169
+;;;;;; 11930))
;;; Generated autoloads from bookmark.el
(define-key ctl-x-map "rb" 'bookmark-jump)
(define-key ctl-x-map "rm" 'bookmark-set)
@@ -2017,19 +2039,20 @@ key of your choice to `bookmark-map'. All interactive bookmark
functions have a binding in this keymap.")
(define-prefix-command 'bookmark-map)
(define-key bookmark-map "x" 'bookmark-set)
- (define-key bookmark-map "m" 'bookmark-set) ; "m" for "mark"
+ (define-key bookmark-map "m" 'bookmark-set) ;"m"ark
(define-key bookmark-map "j" 'bookmark-jump)
- (define-key bookmark-map "g" 'bookmark-jump) ; "g" for "go"
+ (define-key bookmark-map "g" 'bookmark-jump) ;"g"o
+ (define-key bookmark-map "o" 'bookmark-jump-other-window)
(define-key bookmark-map "i" 'bookmark-insert)
(define-key bookmark-map "e" 'edit-bookmarks)
- (define-key bookmark-map "f" 'bookmark-insert-location) ; "f" for "find"
+ (define-key bookmark-map "f" 'bookmark-insert-location) ;"f"ind
(define-key bookmark-map "r" 'bookmark-rename)
(define-key bookmark-map "d" 'bookmark-delete)
(define-key bookmark-map "l" 'bookmark-load)
(define-key bookmark-map "w" 'bookmark-write)
(define-key bookmark-map "s" 'bookmark-save)
-(autoload (quote bookmark-set) "bookmark" "\
+(autoload 'bookmark-set "bookmark" "\
Set a bookmark named NAME inside a file.
If name is nil, then the user will be prompted.
With prefix arg, will not overwrite a bookmark that has the same name
@@ -2054,7 +2077,7 @@ the list of bookmarks.)
\(fn &optional NAME PARG)" t nil)
-(autoload (quote bookmark-jump) "bookmark" "\
+(autoload 'bookmark-jump "bookmark" "\
Jump to bookmark BOOKMARK (a point in some file).
You may have a problem using this function if the value of variable
`bookmark-alist' is nil. If that happens, you need to load in some
@@ -2068,7 +2091,13 @@ of the old one in the permanent bookmark record.
\(fn BOOKMARK)" t nil)
-(autoload (quote bookmark-relocate) "bookmark" "\
+(autoload 'bookmark-jump-other-window "bookmark" "\
+Jump to BOOKMARK (a point in some file) in another window.
+See `bookmark-jump'.
+
+\(fn BOOKMARK)" t nil)
+
+(autoload 'bookmark-relocate "bookmark" "\
Relocate BOOKMARK to another file (reading file name with minibuffer).
This makes an already existing bookmark point to that file, instead of
the one it used to point at. Useful when a file has been renamed
@@ -2076,16 +2105,16 @@ after a bookmark was set in it.
\(fn BOOKMARK)" t nil)
-(autoload (quote bookmark-insert-location) "bookmark" "\
+(autoload 'bookmark-insert-location "bookmark" "\
Insert the name of the file associated with BOOKMARK.
Optional second arg NO-HISTORY means don't record this in the
minibuffer history list `bookmark-history'.
\(fn BOOKMARK &optional NO-HISTORY)" t nil)
-(defalias (quote bookmark-locate) (quote bookmark-insert-location))
+(defalias 'bookmark-locate 'bookmark-insert-location)
-(autoload (quote bookmark-rename) "bookmark" "\
+(autoload 'bookmark-rename "bookmark" "\
Change the name of OLD bookmark to NEW name.
If called from keyboard, prompt for OLD and NEW. If called from
menubar, select OLD from a menu and prompt for NEW.
@@ -2100,7 +2129,7 @@ name.
\(fn OLD &optional NEW)" t nil)
-(autoload (quote bookmark-insert) "bookmark" "\
+(autoload 'bookmark-insert "bookmark" "\
Insert the text of the file pointed to by bookmark BOOKMARK.
You may have a problem using this function if the value of variable
`bookmark-alist' is nil. If that happens, you need to load in some
@@ -2109,7 +2138,7 @@ this.
\(fn BOOKMARK)" t nil)
-(autoload (quote bookmark-delete) "bookmark" "\
+(autoload 'bookmark-delete "bookmark" "\
Delete BOOKMARK from the bookmark list.
Removes only the first instance of a bookmark with that name. If
there are one or more other bookmarks with the same name, they will
@@ -2120,13 +2149,13 @@ probably because we were called from there.
\(fn BOOKMARK &optional BATCH)" t nil)
-(autoload (quote bookmark-write) "bookmark" "\
+(autoload 'bookmark-write "bookmark" "\
Write bookmarks to a file (reading the file name with the minibuffer).
Don't use this in Lisp programs; use `bookmark-save' instead.
\(fn)" t nil)
-(autoload (quote bookmark-save) "bookmark" "\
+(autoload 'bookmark-save "bookmark" "\
Save currently defined bookmarks.
Saves by default in the file defined by the variable
`bookmark-default-file'. With a prefix arg, save it in file FILE
@@ -2145,7 +2174,7 @@ for a file, defaulting to the file defined by variable
\(fn &optional PARG FILE)" t nil)
-(autoload (quote bookmark-load) "bookmark" "\
+(autoload 'bookmark-load "bookmark" "\
Load bookmarks from FILE (which must be in bookmark format).
Appends loaded bookmarks to the front of the list of bookmarks. If
optional second argument OVERWRITE is non-nil, existing bookmarks are
@@ -2166,7 +2195,7 @@ method buffers use to resolve name collisions.
\(fn FILE &optional OVERWRITE NO-MSG)" t nil)
-(autoload (quote bookmark-bmenu-list) "bookmark" "\
+(autoload 'bookmark-bmenu-list "bookmark" "\
Display a list of existing bookmarks.
The list is displayed in a buffer named `*Bookmark List*'.
The leftmost column displays a D if the bookmark is flagged for
@@ -2174,30 +2203,30 @@ deletion, or > if it is flagged for displaying.
\(fn)" t nil)
-(defalias (quote list-bookmarks) (quote bookmark-bmenu-list))
+(defalias 'list-bookmarks 'bookmark-bmenu-list)
-(defalias (quote edit-bookmarks) (quote bookmark-bmenu-list))
+(defalias 'edit-bookmarks 'bookmark-bmenu-list)
-(defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark functions"))) (define-key map [load] (quote ("Load a Bookmark File..." . bookmark-load))) (define-key map [write] (quote ("Save Bookmarks As..." . bookmark-write))) (define-key map [save] (quote ("Save Bookmarks" . bookmark-save))) (define-key map [edit] (quote ("Edit Bookmark List" . bookmark-bmenu-list))) (define-key map [delete] (quote ("Delete Bookmark..." . bookmark-delete))) (define-key map [rename] (quote ("Rename Bookmark..." . bookmark-rename))) (define-key map [locate] (quote ("Insert Location..." . bookmark-locate))) (define-key map [insert] (quote ("Insert Contents..." . bookmark-insert))) (define-key map [set] (quote ("Set Bookmark..." . bookmark-set))) (define-key map [jump] (quote ("Jump to Bookmark..." . bookmark-jump))) map))
+(defvar menu-bar-bookmark-map (let ((map (make-sparse-keymap "Bookmark functions"))) (define-key map [load] '("Load a Bookmark File..." . bookmark-load)) (define-key map [write] '("Save Bookmarks As..." . bookmark-write)) (define-key map [save] '("Save Bookmarks" . bookmark-save)) (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list)) (define-key map [delete] '("Delete Bookmark..." . bookmark-delete)) (define-key map [rename] '("Rename Bookmark..." . bookmark-rename)) (define-key map [locate] '("Insert Location..." . bookmark-locate)) (define-key map [insert] '("Insert Contents..." . bookmark-insert)) (define-key map [set] '("Set Bookmark..." . bookmark-set)) (define-key map [jump] '("Jump to Bookmark..." . bookmark-jump)) map))
-(defalias (quote menu-bar-bookmark-map) menu-bar-bookmark-map)
+(defalias 'menu-bar-bookmark-map menu-bar-bookmark-map)
;;;***
-;;;### (autoloads (browse-url-kde browse-url-generic browse-url-mail
-;;;;;; browse-url-mmm browse-url-lynx-emacs browse-url-lynx-xterm
-;;;;;; browse-url-w3-gnudoit browse-url-w3 browse-url-iximosaic
-;;;;;; browse-url-cci browse-url-grail browse-url-mosaic browse-url-gnome-moz
-;;;;;; browse-url-galeon browse-url-firefox browse-url-mozilla browse-url-netscape
-;;;;;; browse-url-default-browser browse-url-at-mouse browse-url-at-point
-;;;;;; browse-url browse-url-of-region browse-url-of-dired-file
-;;;;;; browse-url-of-buffer browse-url-of-file browse-url-url-at-point
-;;;;;; browse-url-galeon-program browse-url-firefox-program browse-url-browser-function)
-;;;;;; "browse-url" "net/browse-url.el" (17842 55218))
+;;;### (autoloads (browse-url-elinks browse-url-kde browse-url-generic
+;;;;;; browse-url-mail browse-url-text-emacs browse-url-text-xterm
+;;;;;; browse-url-w3-gnudoit browse-url-w3 browse-url-cci browse-url-mosaic
+;;;;;; browse-url-gnome-moz browse-url-emacs browse-url-galeon browse-url-firefox
+;;;;;; browse-url-mozilla browse-url-netscape browse-url-default-browser
+;;;;;; browse-url-at-mouse browse-url-at-point browse-url browse-url-of-region
+;;;;;; browse-url-of-dired-file browse-url-of-buffer browse-url-of-file
+;;;;;; browse-url-url-at-point browse-url-galeon-program browse-url-firefox-program
+;;;;;; browse-url-browser-function) "browse-url" "net/browse-url.el"
+;;;;;; (18214 4479))
;;; Generated autoloads from net/browse-url.el
-(defvar browse-url-browser-function (cond ((memq system-type (quote (windows-nt ms-dos cygwin))) (quote browse-url-default-windows-browser)) ((memq system-type (quote (darwin))) (quote browse-url-default-macosx-browser)) (t (quote browse-url-default-browser))) "\
-*Function to display the current buffer in a WWW browser.
+(defvar browse-url-browser-function (cond ((memq system-type '(windows-nt ms-dos cygwin)) 'browse-url-default-windows-browser) ((memq system-type '(darwin)) 'browse-url-default-macosx-browser) (t 'browse-url-default-browser)) "\
+Function to display the current buffer in a WWW browser.
This is used by the `browse-url-at-point', `browse-url-at-mouse', and
`browse-url-of-file' commands.
@@ -2207,24 +2236,24 @@ associated with the first REGEXP which matches the current URL. The
function is passed the URL and any other args of `browse-url'. The last
regexp should probably be \".\" to specify a default browser.")
-(custom-autoload (quote browse-url-browser-function) "browse-url" t)
+(custom-autoload 'browse-url-browser-function "browse-url" t)
(defvar browse-url-firefox-program "firefox" "\
-*The name by which to invoke Firefox.")
+The name by which to invoke Firefox.")
-(custom-autoload (quote browse-url-firefox-program) "browse-url" t)
+(custom-autoload 'browse-url-firefox-program "browse-url" t)
(defvar browse-url-galeon-program "galeon" "\
-*The name by which to invoke Galeon.")
+The name by which to invoke Galeon.")
-(custom-autoload (quote browse-url-galeon-program) "browse-url" t)
+(custom-autoload 'browse-url-galeon-program "browse-url" t)
-(autoload (quote browse-url-url-at-point) "browse-url" "\
+(autoload 'browse-url-url-at-point "browse-url" "\
Not documented
\(fn)" nil nil)
-(autoload (quote browse-url-of-file) "browse-url" "\
+(autoload 'browse-url-of-file "browse-url" "\
Ask a WWW browser to display FILE.
Display the current buffer's file if FILE is nil or if called
interactively. Turn the filename into a URL with function
@@ -2233,7 +2262,7 @@ interactively. Turn the filename into a URL with function
\(fn &optional FILE)" t nil)
-(autoload (quote browse-url-of-buffer) "browse-url" "\
+(autoload 'browse-url-of-buffer "browse-url" "\
Ask a WWW browser to display BUFFER.
Display the current buffer if BUFFER is nil. Display only the
currently visible part of BUFFER (from a temporary file) if buffer is
@@ -2241,31 +2270,31 @@ narrowed.
\(fn &optional BUFFER)" t nil)
-(autoload (quote browse-url-of-dired-file) "browse-url" "\
+(autoload 'browse-url-of-dired-file "browse-url" "\
In Dired, ask a WWW browser to display the file named on this line.
\(fn)" t nil)
-(autoload (quote browse-url-of-region) "browse-url" "\
+(autoload 'browse-url-of-region "browse-url" "\
Ask a WWW browser to display the current region.
\(fn MIN MAX)" t nil)
-(autoload (quote browse-url) "browse-url" "\
+(autoload 'browse-url "browse-url" "\
Ask a WWW browser to load URL.
Prompts for a URL, defaulting to the URL at or before point. Variable
`browse-url-browser-function' says which browser to use.
\(fn URL &rest ARGS)" t nil)
-(autoload (quote browse-url-at-point) "browse-url" "\
+(autoload 'browse-url-at-point "browse-url" "\
Ask a WWW browser to load the URL at or before point.
Doesn't let you edit the URL like `browse-url'. Variable
`browse-url-browser-function' says which browser to use.
\(fn &optional ARG)" t nil)
-(autoload (quote browse-url-at-mouse) "browse-url" "\
+(autoload 'browse-url-at-mouse "browse-url" "\
Ask a WWW browser to load a URL clicked with the mouse.
The URL is the one around or before the position of the mouse click
but point is not changed. Doesn't let you edit the URL like
@@ -2274,7 +2303,7 @@ to use.
\(fn EVENT)" t nil)
-(autoload (quote browse-url-default-browser) "browse-url" "\
+(autoload 'browse-url-default-browser "browse-url" "\
Find a suitable browser and ask it to load URL.
Default to the URL around or before point.
@@ -2287,12 +2316,11 @@ When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'.
The order attempted is gnome-moz-remote, Mozilla, Firefox,
-Galeon, Konqueror, Netscape, Mosaic, IXI Mosaic, Lynx in an
-xterm, MMM, and then W3.
+Galeon, Konqueror, Netscape, Mosaic, Lynx in an xterm, and then W3.
\(fn URL &rest ARGS)" nil nil)
-(autoload (quote browse-url-netscape) "browse-url" "\
+(autoload 'browse-url-netscape "browse-url" "\
Ask the Netscape WWW browser to load URL.
Default to the URL around or before point. The strings in variable
`browse-url-netscape-arguments' are also passed to Netscape.
@@ -2311,7 +2339,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-mozilla) "browse-url" "\
+(autoload 'browse-url-mozilla "browse-url" "\
Ask the Mozilla WWW browser to load URL.
Default to the URL around or before point. The strings in variable
`browse-url-mozilla-arguments' are also passed to Mozilla.
@@ -2330,7 +2358,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-firefox) "browse-url" "\
+(autoload 'browse-url-firefox "browse-url" "\
Ask the Firefox WWW browser to load URL.
Default to the URL around or before point. The strings in
variable `browse-url-firefox-arguments' are also passed to
@@ -2358,7 +2386,7 @@ URL in a new window.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-galeon) "browse-url" "\
+(autoload 'browse-url-galeon "browse-url" "\
Ask the Galeon WWW browser to load URL.
Default to the URL around or before point. The strings in variable
`browse-url-galeon-arguments' are also passed to Galeon.
@@ -2377,7 +2405,12 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-gnome-moz) "browse-url" "\
+(autoload 'browse-url-emacs "browse-url" "\
+Ask Emacs to load URL into a buffer and show it in another window.
+
+\(fn URL &optional NEW-WINDOW)" t nil)
+
+(autoload 'browse-url-gnome-moz "browse-url" "\
Ask Mozilla/Netscape to load URL via the GNOME program `gnome-moz-remote'.
Default to the URL around or before point. The strings in variable
`browse-url-gnome-moz-arguments' are also passed.
@@ -2392,7 +2425,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-mosaic) "browse-url" "\
+(autoload 'browse-url-mosaic "browse-url" "\
Ask the XMosaic WWW browser to load URL.
Default to the URL around or before point. The strings in variable
@@ -2410,14 +2443,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-grail) "browse-url" "\
-Ask the Grail WWW browser to load URL.
-Default to the URL around or before point. Runs the program in the
-variable `browse-url-grail'.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(autoload (quote browse-url-cci) "browse-url" "\
+(autoload 'browse-url-cci "browse-url" "\
Ask the XMosaic WWW browser to load URL.
Default to the URL around or before point.
@@ -2435,13 +2461,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-iximosaic) "browse-url" "\
-Ask the IXIMosaic WWW browser to load URL.
-Default to the URL around or before point.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(autoload (quote browse-url-w3) "browse-url" "\
+(autoload 'browse-url-w3 "browse-url" "\
Ask the w3 WWW browser to load URL.
Default to the URL around or before point.
@@ -2454,28 +2474,30 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-w3-gnudoit) "browse-url" "\
+(autoload 'browse-url-w3-gnudoit "browse-url" "\
Ask another Emacs running gnuserv to load the URL using the W3 browser.
The `browse-url-gnudoit-program' program is used with options given by
`browse-url-gnudoit-args'. Default to the URL around or before point.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-lynx-xterm) "browse-url" "\
-Ask the Lynx WWW browser to load URL.
-Default to the URL around or before point. A new Lynx process is run
+(autoload 'browse-url-text-xterm "browse-url" "\
+Ask a text browser to load URL.
+URL defaults to the URL around or before point.
+This runs the text browser specified by `browse-url-text-browser'.
in an Xterm window using the Xterm program named by `browse-url-xterm-program'
with possible additional arguments `browse-url-xterm-args'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-lynx-emacs) "browse-url" "\
-Ask the Lynx WWW browser to load URL.
-Default to the URL around or before point. With a prefix argument, run
-a new Lynx process in a new buffer.
+(autoload 'browse-url-text-emacs "browse-url" "\
+Ask a text browser to load URL.
+URL defaults to the URL around or before point.
+This runs the text browser specified by `browse-url-text-browser'.
+With a prefix argument, it runs a new browser process in a new buffer.
When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new lynx in a new term window,
+non-nil, load the document in a new browser process in a new term window,
otherwise use any existing one. A non-nil interactive prefix argument
reverses the effect of `browse-url-new-window-flag'.
@@ -2484,13 +2506,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-BUFFER)" t nil)
-(autoload (quote browse-url-mmm) "browse-url" "\
-Ask the MMM WWW browser to load URL.
-Default to the URL around or before point.
-
-\(fn URL &optional NEW-WINDOW)" t nil)
-
-(autoload (quote browse-url-mail) "browse-url" "\
+(autoload 'browse-url-mail "browse-url" "\
Open a new mail message buffer within Emacs for the RFC 2368 URL.
Default to using the mailto: URL around or before point as the
recipient's address. Supplying a non-nil interactive prefix argument
@@ -2507,7 +2523,7 @@ used instead of `browse-url-new-window-flag'.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-generic) "browse-url" "\
+(autoload 'browse-url-generic "browse-url" "\
Ask the WWW browser defined by `browse-url-generic-program' to load URL.
Default to the URL around or before point. A fresh copy of the
browser is started up in a new process with possible additional arguments
@@ -2516,24 +2532,36 @@ don't offer a form of remote control.
\(fn URL &optional NEW-WINDOW)" t nil)
-(autoload (quote browse-url-kde) "browse-url" "\
+(autoload 'browse-url-kde "browse-url" "\
Ask the KDE WWW browser to load URL.
Default to the URL around or before point.
\(fn URL &optional NEW-WINDOW)" t nil)
+(autoload 'browse-url-elinks "browse-url" "\
+Ask the Elinks WWW browser to load URL.
+Default to the URL around the point.
+
+The document is loaded in a new tab of a running Elinks or, if
+none yet running, a newly started instance.
+
+The Elinks command will be prepended by the program+arguments
+from `browse-url-elinks-wrapper'.
+
+\(fn URL &optional NEW-WINDOW)" t nil)
+
;;;***
-;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (17842
-;;;;;; 55395))
+;;;### (autoloads (snarf-bruces bruce) "bruce" "play/bruce.el" (18088
+;;;;;; 55113))
;;; Generated autoloads from play/bruce.el
-(autoload (quote bruce) "bruce" "\
+(autoload 'bruce "bruce" "\
Adds that special touch of class to your outgoing mail.
\(fn)" t nil)
-(autoload (quote snarf-bruces) "bruce" "\
+(autoload 'snarf-bruces "bruce" "\
Return a vector containing the lines from `bruce-phrases-file'.
\(fn)" nil nil)
@@ -2541,33 +2569,33 @@ Return a vector containing the lines from `bruce-phrases-file'.
;;;***
;;;### (autoloads (bs-show bs-customize bs-cycle-previous bs-cycle-next)
-;;;;;; "bs" "bs.el" (17842 58280))
+;;;;;; "bs" "bs.el" (18211 32385))
;;; Generated autoloads from bs.el
-(autoload (quote bs-cycle-next) "bs" "\
+(autoload 'bs-cycle-next "bs" "\
Select next buffer defined by buffer cycling.
The buffers taking part in buffer cycling are defined
by buffer configuration `bs-cycle-configuration-name'.
\(fn)" t nil)
-(autoload (quote bs-cycle-previous) "bs" "\
+(autoload 'bs-cycle-previous "bs" "\
Select previous buffer defined by buffer cycling.
The buffers taking part in buffer cycling are defined
by buffer configuration `bs-cycle-configuration-name'.
\(fn)" t nil)
-(autoload (quote bs-customize) "bs" "\
+(autoload 'bs-customize "bs" "\
Customization of group bs for Buffer Selection Menu.
\(fn)" t nil)
-(autoload (quote bs-show) "bs" "\
+(autoload 'bs-show "bs" "\
Make a menu of buffers so you can manipulate buffers or the buffer list.
\\<bs-mode-map>
There are many key commands similar to `Buffer-menu-mode' for
-manipulating buffer list and buffers itself.
+manipulating the buffer list and the buffers themselves.
User can move with [up] or [down], select a buffer
by \\[bs-select] or [SPC]
@@ -2581,19 +2609,29 @@ name of buffer configuration.
;;;***
+;;;### (autoloads (bubbles) "bubbles" "play/bubbles.el" (18157 34340))
+;;; Generated autoloads from play/bubbles.el
+
+(autoload 'bubbles "bubbles" "\
+Play Bubbles game.
+
+\(fn)" t nil)
+
+;;;***
+
;;;### (autoloads (insert-text-button make-text-button insert-button
-;;;;;; make-button define-button-type) "button" "button.el" (17992
-;;;;;; 30877))
+;;;;;; make-button define-button-type) "button" "button.el" (18133
+;;;;;; 60495))
;;; Generated autoloads from button.el
-(defvar button-map (let ((map (make-sparse-keymap))) (define-key map " " (quote push-button)) (define-key map [mouse-2] (quote push-button)) map) "\
+(defvar button-map (let ((map (make-sparse-keymap))) (define-key map " " 'push-button) (define-key map [mouse-2] 'push-button) map) "\
Keymap used by buttons.")
-(defvar button-buffer-map (let ((map (make-sparse-keymap))) (define-key map [9] (quote forward-button)) (define-key map " " (quote backward-button)) (define-key map [backtab] (quote backward-button)) map) "\
+(defvar button-buffer-map (let ((map (make-sparse-keymap))) (define-key map [9] 'forward-button) (define-key map " " 'backward-button) (define-key map [backtab] 'backward-button) map) "\
Keymap useful for buffers containing buttons.
Mode-specific keymaps may want to use this as their parent keymap.")
-(autoload (quote define-button-type) "button" "\
+(autoload 'define-button-type "button" "\
Define a `button type' called NAME.
The remaining arguments form a sequence of PROPERTY VALUE pairs,
specifying properties to use as defaults for buttons with this type
@@ -2607,7 +2645,7 @@ changes to a supertype are not reflected in its subtypes).
\(fn NAME &rest PROPERTIES)" nil nil)
-(autoload (quote make-button) "button" "\
+(autoload 'make-button "button" "\
Make a button from BEG to END in the current buffer.
The remaining arguments form a sequence of PROPERTY VALUE pairs,
specifying properties to add to the button.
@@ -2619,7 +2657,7 @@ Also see `make-text-button', `insert-button'.
\(fn BEG END &rest PROPERTIES)" nil nil)
-(autoload (quote insert-button) "button" "\
+(autoload 'insert-button "button" "\
Insert a button with the label LABEL.
The remaining arguments form a sequence of PROPERTY VALUE pairs,
specifying properties to add to the button.
@@ -2631,7 +2669,7 @@ Also see `insert-text-button', `make-button'.
\(fn LABEL &rest PROPERTIES)" nil nil)
-(autoload (quote make-text-button) "button" "\
+(autoload 'make-text-button "button" "\
Make a button from BEG to END in the current buffer.
The remaining arguments form a sequence of PROPERTY VALUE pairs,
specifying properties to add to the button.
@@ -2648,7 +2686,7 @@ Also see `insert-text-button'.
\(fn BEG END &rest PROPERTIES)" nil nil)
-(autoload (quote insert-text-button) "button" "\
+(autoload 'insert-text-button "button" "\
Insert a button with the label LABEL.
The remaining arguments form a sequence of PROPERTY VALUE pairs,
specifying properties to add to the button.
@@ -2670,25 +2708,41 @@ Also see `make-text-button'.
;;;### (autoloads (batch-byte-recompile-directory batch-byte-compile
;;;;;; batch-byte-compile-if-not-done display-call-tree byte-compile
;;;;;; compile-defun byte-compile-file byte-recompile-directory
-;;;;;; byte-force-recompile byte-compile-warnings-safe-p) "bytecomp"
-;;;;;; "emacs-lisp/bytecomp.el" (17949 41467))
+;;;;;; byte-force-recompile byte-compile-enable-warning byte-compile-disable-warning
+;;;;;; byte-compile-warnings-safe-p) "bytecomp" "emacs-lisp/bytecomp.el"
+;;;;;; (18213 13926))
;;; Generated autoloads from emacs-lisp/bytecomp.el
(put 'byte-compile-dynamic 'safe-local-variable 'booleanp)
(put 'byte-compile-disable-print-circle 'safe-local-variable 'booleanp)
(put 'byte-compile-dynamic-docstrings 'safe-local-variable 'booleanp)
+(put 'byte-compile-warnings 'safe-local-variable 'byte-compile-warnings-safe-p)
-(autoload (quote byte-compile-warnings-safe-p) "bytecomp" "\
+(autoload 'byte-compile-warnings-safe-p "bytecomp" "\
Not documented
\(fn X)" nil nil)
-(autoload (quote byte-force-recompile) "bytecomp" "\
+(autoload 'byte-compile-disable-warning "bytecomp" "\
+Change `byte-compile-warnings' to disable WARNING.
+If `byte-compile-warnings' is t, set it to `(not WARNING)'.
+Otherwise, if the first element is `not', add WARNING, else remove it.
+
+\(fn WARNING)" nil nil)
+
+(autoload 'byte-compile-enable-warning "bytecomp" "\
+Change `byte-compile-warnings' to enable WARNING.
+If `byte-compile-warnings' is `t', do nothing. Otherwise, if the
+first element is `not', remove WARNING, else add it.
+
+\(fn WARNING)" nil nil)
+
+(autoload 'byte-force-recompile "bytecomp" "\
Recompile every `.el' file in DIRECTORY that already has a `.elc' file.
Files in subdirectories of DIRECTORY are processed also.
\(fn DIRECTORY)" t nil)
-(autoload (quote byte-recompile-directory) "bytecomp" "\
+(autoload 'byte-recompile-directory "bytecomp" "\
Recompile every `.el' file in DIRECTORY that needs recompilation.
This is if a `.elc' file exists but is older than the `.el' file.
Files in subdirectories of DIRECTORY are processed also.
@@ -2707,7 +2761,7 @@ recompile every `.el' file that already has a `.elc' file.
\(fn DIRECTORY &optional ARG FORCE)" t nil)
(put 'no-byte-compile 'safe-local-variable 'booleanp)
-(autoload (quote byte-compile-file) "bytecomp" "\
+(autoload 'byte-compile-file "bytecomp" "\
Compile a file of Lisp code named FILENAME into a file of byte code.
The output file's name is generated by passing FILENAME to the
`byte-compile-dest-file' function (which see).
@@ -2716,20 +2770,20 @@ The value is non-nil if there were no errors, nil if errors.
\(fn FILENAME &optional LOAD)" t nil)
-(autoload (quote compile-defun) "bytecomp" "\
+(autoload 'compile-defun "bytecomp" "\
Compile and evaluate the current top-level form.
Print the result in the echo area.
With argument, insert value in current buffer after the form.
\(fn &optional ARG)" t nil)
-(autoload (quote byte-compile) "bytecomp" "\
+(autoload 'byte-compile "bytecomp" "\
If FORM is a symbol, byte-compile its function definition.
If FORM is a lambda or a macro, byte-compile it as a function.
\(fn FORM)" nil nil)
-(autoload (quote display-call-tree) "bytecomp" "\
+(autoload 'display-call-tree "bytecomp" "\
Display a call graph of a specified file.
This lists which functions have been called, what functions called
them, and what functions they call. The list includes all functions
@@ -2746,14 +2800,14 @@ invoked interactively.
\(fn &optional FILENAME)" t nil)
-(autoload (quote batch-byte-compile-if-not-done) "bytecomp" "\
+(autoload 'batch-byte-compile-if-not-done "bytecomp" "\
Like `byte-compile-file' but doesn't recompile if already up to date.
Use this from the command line, with `-batch';
it won't work in an interactive Emacs.
\(fn)" nil nil)
-(autoload (quote batch-byte-compile) "bytecomp" "\
+(autoload 'batch-byte-compile "bytecomp" "\
Run `byte-compile-file' on the files remaining on the command line.
Use this from the command line, with `-batch';
it won't work in an interactive Emacs.
@@ -2764,7 +2818,7 @@ already up-to-date.
\(fn &optional NOFORCE)" nil nil)
-(autoload (quote batch-byte-recompile-directory) "bytecomp" "\
+(autoload 'batch-byte-recompile-directory "bytecomp" "\
Run `byte-recompile-directory' on the dirs remaining on the command line.
Must be used only with `-batch', and kills Emacs on completion.
For example, invoke `emacs -batch -f batch-byte-recompile-directory .'.
@@ -2777,20 +2831,20 @@ and corresponding effects.
;;;***
-;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (17956 13479))
+;;;### (autoloads nil "cal-dst" "calendar/cal-dst.el" (18088 55093))
;;; Generated autoloads from calendar/cal-dst.el
-(put (quote calendar-daylight-savings-starts) (quote risky-local-variable) t)
+(put 'calendar-daylight-savings-starts 'risky-local-variable t)
-(put (quote calendar-daylight-savings-ends) (quote risky-local-variable) t)
+(put 'calendar-daylight-savings-ends 'risky-local-variable t)
;;;***
;;;### (autoloads (list-yahrzeit-dates) "cal-hebrew" "calendar/cal-hebrew.el"
-;;;;;; (17956 13479))
+;;;;;; (18203 38492))
;;; Generated autoloads from calendar/cal-hebrew.el
-(autoload (quote list-yahrzeit-dates) "cal-hebrew" "\
+(autoload 'list-yahrzeit-dates "cal-hebrew" "\
List Yahrzeit dates for *Gregorian* DEATH-DATE from START-YEAR to END-YEAR.
When called interactively from the calendar window, the date of death is taken
from the cursor position.
@@ -2802,43 +2856,43 @@ from the cursor position.
;;;### (autoloads (defmath calc-embedded-activate calc-embedded calc-grab-rectangle
;;;;;; calc-grab-region full-calc-keypad calc-keypad calc-eval quick-calc
;;;;;; full-calc calc calc-dispatch calc-settings-file) "calc" "calc/calc.el"
-;;;;;; (17965 11665))
+;;;;;; (18214 4479))
;;; Generated autoloads from calc/calc.el
(defvar calc-settings-file (convert-standard-filename "~/.calc.el") "\
*File in which to record permanent settings.")
-(custom-autoload (quote calc-settings-file) "calc" t)
+(custom-autoload 'calc-settings-file "calc" t)
(define-key ctl-x-map "*" 'calc-dispatch)
-(autoload (quote calc-dispatch) "calc" "\
+(autoload 'calc-dispatch "calc" "\
Invoke the GNU Emacs Calculator. See `calc-dispatch-help' for details.
\(fn &optional ARG)" t nil)
-(autoload (quote calc) "calc" "\
+(autoload 'calc "calc" "\
The Emacs Calculator. Full documentation is listed under \"calc-mode\".
\(fn &optional ARG FULL-DISPLAY INTERACTIVE)" t nil)
-(autoload (quote full-calc) "calc" "\
+(autoload 'full-calc "calc" "\
Invoke the Calculator and give it a full-sized window.
\(fn &optional INTERACTIVE)" t nil)
-(autoload (quote quick-calc) "calc" "\
+(autoload 'quick-calc "calc" "\
Do a quick calculation in the minibuffer without invoking full Calculator.
\(fn)" t nil)
-(autoload (quote calc-eval) "calc" "\
+(autoload 'calc-eval "calc" "\
Do a quick calculation and return the result as a string.
Return value will either be the formatted result in string form,
or a list containing a character position and an error message in string form.
\(fn STR &optional SEPARATOR &rest ARGS)" nil nil)
-(autoload (quote calc-keypad) "calc" "\
+(autoload 'calc-keypad "calc" "\
Invoke the Calculator in \"visual keypad\" mode.
This is most useful in the X window system.
In this mode, click on the Calc \"buttons\" using the left mouse button.
@@ -2846,45 +2900,45 @@ Or, position the cursor manually and do M-x calc-keypad-press.
\(fn &optional INTERACTIVE)" t nil)
-(autoload (quote full-calc-keypad) "calc" "\
+(autoload 'full-calc-keypad "calc" "\
Invoke the Calculator in full-screen \"visual keypad\" mode.
See calc-keypad for details.
\(fn &optional INTERACTIVE)" t nil)
-(autoload (quote calc-grab-region) "calc" "\
+(autoload 'calc-grab-region "calc" "\
Parse the region as a vector of numbers and push it on the Calculator stack.
\(fn TOP BOT ARG)" t nil)
-(autoload (quote calc-grab-rectangle) "calc" "\
+(autoload 'calc-grab-rectangle "calc" "\
Parse a rectangle as a matrix of numbers and push it on the Calculator stack.
\(fn TOP BOT ARG)" t nil)
-(autoload (quote calc-embedded) "calc" "\
+(autoload 'calc-embedded "calc" "\
Start Calc Embedded mode on the formula surrounding point.
\(fn ARG &optional END OBEG OEND)" t nil)
-(autoload (quote calc-embedded-activate) "calc" "\
+(autoload 'calc-embedded-activate "calc" "\
Scan the current editing buffer for all embedded := and => formulas.
Also looks for the equivalent TeX words, \\gets and \\evalto.
\(fn &optional ARG CBUF)" t nil)
-(autoload (quote defmath) "calc" "\
+(autoload 'defmath "calc" "\
Not documented
\(fn FUNC ARGS &rest BODY)" nil (quote macro))
;;;***
-;;;### (autoloads (calculator) "calculator" "calculator.el" (17870
-;;;;;; 28179))
+;;;### (autoloads (calculator) "calculator" "calculator.el" (18203
+;;;;;; 37786))
;;; Generated autoloads from calculator.el
-(autoload (quote calculator) "calculator" "\
+(autoload 'calculator "calculator" "\
Run the Emacs calculator.
See the documentation for `calculator-mode' for more information.
@@ -2909,7 +2963,7 @@ See the documentation for `calculator-mode' for more information.
;;;;;; mark-holidays-in-calendar view-calendar-holidays-initially
;;;;;; calendar-remove-frame-by-deleting mark-diary-entries-in-calendar
;;;;;; view-diary-entries-initially calendar-offset) "calendar"
-;;;;;; "calendar/calendar.el" (17956 13479))
+;;;;;; "calendar/calendar.el" (18157 34340))
;;; Generated autoloads from calendar/calendar.el
(defvar calendar-offset 0 "\
@@ -2918,7 +2972,7 @@ The offset of the principal month from the center of the calendar window.
+1 means on the right. Larger (or smaller) values push the principal month off
the screen.")
-(custom-autoload (quote calendar-offset) "calendar" t)
+(custom-autoload 'calendar-offset "calendar" t)
(defvar view-diary-entries-initially nil "\
Non-nil means display current date's diary entries on entry to calendar.
@@ -2927,32 +2981,32 @@ if the current date is visible. The number of days of diary entries displayed
is governed by the variable `number-of-diary-entries'. This variable can
be overridden by the value of `calendar-setup'.")
-(custom-autoload (quote view-diary-entries-initially) "calendar" t)
+(custom-autoload 'view-diary-entries-initially "calendar" t)
(defvar mark-diary-entries-in-calendar nil "\
Non-nil means mark dates with diary entries, in the calendar window.
The marking symbol is specified by the variable `diary-entry-marker'.")
-(custom-autoload (quote mark-diary-entries-in-calendar) "calendar" t)
+(custom-autoload 'mark-diary-entries-in-calendar "calendar" t)
(defvar calendar-remove-frame-by-deleting nil "\
Determine how the calendar mode removes a frame no longer needed.
If nil, make an icon of the frame. If non-nil, delete the frame.")
-(custom-autoload (quote calendar-remove-frame-by-deleting) "calendar" t)
+(custom-autoload 'calendar-remove-frame-by-deleting "calendar" t)
(defvar view-calendar-holidays-initially nil "\
Non-nil means display holidays for current three month period on entry.
The holidays are displayed in another window when the calendar is first
displayed.")
-(custom-autoload (quote view-calendar-holidays-initially) "calendar" t)
+(custom-autoload 'view-calendar-holidays-initially "calendar" t)
(defvar mark-holidays-in-calendar nil "\
Non-nil means mark dates of holidays in the calendar window.
The marking symbol is specified by the variable `calendar-holiday-marker'.")
-(custom-autoload (quote mark-holidays-in-calendar) "calendar" t)
+(custom-autoload 'mark-holidays-in-calendar "calendar" t)
(defvar all-hebrew-calendar-holidays nil "\
If nil, show only major holidays from the Hebrew calendar.
@@ -2960,7 +3014,7 @@ This means only those Jewish holidays that appear on secular calendars.
If t, show all the holidays that would appear in a complete Hebrew calendar.")
-(custom-autoload (quote all-hebrew-calendar-holidays) "calendar" t)
+(custom-autoload 'all-hebrew-calendar-holidays "calendar" t)
(defvar all-christian-calendar-holidays nil "\
If nil, show only major holidays from the Christian calendar.
@@ -2969,7 +3023,7 @@ This means only those Christian holidays that appear on secular calendars.
If t, show all the holidays that would appear in a complete Christian
calendar.")
-(custom-autoload (quote all-christian-calendar-holidays) "calendar" t)
+(custom-autoload 'all-christian-calendar-holidays "calendar" t)
(defvar all-islamic-calendar-holidays nil "\
If nil, show only major holidays from the Islamic calendar.
@@ -2978,7 +3032,7 @@ This means only those Islamic holidays that appear on secular calendars.
If t, show all the holidays that would appear in a complete Islamic
calendar.")
-(custom-autoload (quote all-islamic-calendar-holidays) "calendar" t)
+(custom-autoload 'all-islamic-calendar-holidays "calendar" t)
(defvar all-bahai-calendar-holidays nil "\
If nil, show only major holidays from the Baha'i calendar.
@@ -2987,13 +3041,13 @@ These are the days on which work and school must be suspended.
If t, show all the holidays that would appear in a complete Baha'i
calendar.")
-(custom-autoload (quote all-bahai-calendar-holidays) "calendar" t)
+(custom-autoload 'all-bahai-calendar-holidays "calendar" t)
(defvar calendar-load-hook nil "\
List of functions to be called after the calendar is first loaded.
This is the place to add key bindings to `calendar-mode-map'.")
-(custom-autoload (quote calendar-load-hook) "calendar" t)
+(custom-autoload 'calendar-load-hook "calendar" t)
(defvar initial-calendar-window-hook nil "\
List of functions to be called when the calendar window is first opened.
@@ -3001,7 +3055,7 @@ The functions invoked are called after the calendar window is opened, but
once opened is never called again. Leaving the calendar with the `q' command
and reentering it will cause these functions to be called again.")
-(custom-autoload (quote initial-calendar-window-hook) "calendar" t)
+(custom-autoload 'initial-calendar-window-hook "calendar" t)
(defvar today-visible-calendar-hook nil "\
List of functions called whenever the current date is visible.
@@ -3020,7 +3074,7 @@ Other than the use of the provided functions, the changing of any
characters in the calendar buffer by the hooks may cause the failure of the
functions that move by days and weeks.")
-(custom-autoload (quote today-visible-calendar-hook) "calendar" t)
+(custom-autoload 'today-visible-calendar-hook "calendar" t)
(defvar today-invisible-calendar-hook nil "\
List of functions called whenever the current date is not visible.
@@ -3033,7 +3087,7 @@ Other than the use of the provided functions, the changing of any
characters in the calendar buffer by the hooks may cause the failure of the
functions that move by days and weeks.")
-(custom-autoload (quote today-invisible-calendar-hook) "calendar" t)
+(custom-autoload 'today-invisible-calendar-hook "calendar" t)
(defvar calendar-move-hook nil "\
List of functions called whenever the cursor moves in the calendar.
@@ -3044,7 +3098,7 @@ For example,
redisplays the diary for whatever date the cursor is moved to.")
-(custom-autoload (quote calendar-move-hook) "calendar" t)
+(custom-autoload 'calendar-move-hook "calendar" t)
(defvar diary-file "~/diary" "\
Name of the file in which one's personal diary of dates is kept.
@@ -3151,39 +3205,39 @@ documentation for these functions for details.
Diary files can contain directives to include the contents of other files; for
details, see the documentation for the variable `list-diary-entries-hook'.")
-(custom-autoload (quote diary-file) "calendar" t)
+(custom-autoload 'diary-file "calendar" t)
(defvar diary-nonmarking-symbol "&" "\
Symbol indicating that a diary entry is not to be marked in the calendar.")
-(custom-autoload (quote diary-nonmarking-symbol) "calendar" t)
+(custom-autoload 'diary-nonmarking-symbol "calendar" t)
(defvar hebrew-diary-entry-symbol "H" "\
Symbol indicating a diary entry according to the Hebrew calendar.")
-(custom-autoload (quote hebrew-diary-entry-symbol) "calendar" t)
+(custom-autoload 'hebrew-diary-entry-symbol "calendar" t)
(defvar islamic-diary-entry-symbol "I" "\
Symbol indicating a diary entry according to the Islamic calendar.")
-(custom-autoload (quote islamic-diary-entry-symbol) "calendar" t)
+(custom-autoload 'islamic-diary-entry-symbol "calendar" t)
(defvar bahai-diary-entry-symbol "B" "\
Symbol indicating a diary entry according to the Baha'i calendar.")
-(custom-autoload (quote bahai-diary-entry-symbol) "calendar" t)
+(custom-autoload 'bahai-diary-entry-symbol "calendar" t)
(defvar diary-include-string "#include" "\
The string indicating inclusion of another file of diary entries.
See the documentation for the function `include-other-diary-files'.")
-(custom-autoload (quote diary-include-string) "calendar" t)
+(custom-autoload 'diary-include-string "calendar" t)
(defvar sexp-diary-entry-symbol "%%" "\
The string used to indicate a sexp diary entry in `diary-file'.
See the documentation for the function `list-sexp-diary-entries'.")
-(custom-autoload (quote sexp-diary-entry-symbol) "calendar" t)
+(custom-autoload 'sexp-diary-entry-symbol "calendar" t)
(defvar abbreviated-calendar-year t "\
Interpret a two-digit year DD in a diary entry as either 19DD or 20DD.
@@ -3191,7 +3245,7 @@ For the Gregorian calendar; similarly for the Hebrew, Islamic and
Baha'i calendars. If this variable is nil, years must be written in
full.")
-(custom-autoload (quote abbreviated-calendar-year) "calendar" t)
+(custom-autoload 'abbreviated-calendar-year "calendar" t)
(defvar european-calendar-style nil "\
Use the European style of dates in the diary and in any displays.
@@ -3214,40 +3268,40 @@ calendar package is already loaded). Rather, use either
\\[customize] or the functions `european-calendar' and
`american-calendar'.")
-(custom-autoload (quote european-calendar-style) "calendar" nil)
+(custom-autoload 'european-calendar-style "calendar" nil)
-(defvar american-date-diary-pattern (quote ((month "/" day "[^/0-9]") (month "/" day "/" year "[^0-9]") (monthname " *" day "[^,0-9]") (monthname " *" day ", *" year "[^0-9]") (dayname "\\W"))) "\
+(defvar american-date-diary-pattern '((month "/" day "[^/0-9]") (month "/" day "/" year "[^0-9]") (monthname " *" day "[^,0-9]") (monthname " *" day ", *" year "[^0-9]") (dayname "\\W")) "\
List of pseudo-patterns describing the American patterns of date used.
See the documentation of `diary-date-forms' for an explanation.")
-(custom-autoload (quote american-date-diary-pattern) "calendar" t)
+(custom-autoload 'american-date-diary-pattern "calendar" t)
-(defvar european-date-diary-pattern (quote ((day "/" month "[^/0-9]") (day "/" month "/" year "[^0-9]") (backup day " *" monthname "\\W+\\<\\([^*0-9]\\|\\([0-9]+[:aApP]\\)\\)") (day " *" monthname " *" year "[^0-9]") (dayname "\\W"))) "\
+(defvar european-date-diary-pattern '((day "/" month "[^/0-9]") (day "/" month "/" year "[^0-9]") (backup day " *" monthname "\\W+\\<\\([^*0-9]\\|\\([0-9]+[:aApP]\\)\\)") (day " *" monthname " *" year "[^0-9]") (dayname "\\W")) "\
List of pseudo-patterns describing the European patterns of date used.
See the documentation of `diary-date-forms' for an explanation.")
-(custom-autoload (quote european-date-diary-pattern) "calendar" t)
+(custom-autoload 'european-date-diary-pattern "calendar" t)
-(defvar european-calendar-display-form (quote ((if dayname (concat dayname ", ")) day " " monthname " " year)) "\
+(defvar european-calendar-display-form '((if dayname (concat dayname ", ")) day " " monthname " " year) "\
Pseudo-pattern governing the way a date appears in the European style.
See the documentation of `calendar-date-display-form' for an explanation.")
-(custom-autoload (quote european-calendar-display-form) "calendar" t)
+(custom-autoload 'european-calendar-display-form "calendar" t)
-(defvar american-calendar-display-form (quote ((if dayname (concat dayname ", ")) monthname " " day ", " year)) "\
+(defvar american-calendar-display-form '((if dayname (concat dayname ", ")) monthname " " day ", " year) "\
Pseudo-pattern governing the way a date appears in the American style.
See the documentation of `calendar-date-display-form' for an explanation.")
-(custom-autoload (quote american-calendar-display-form) "calendar" t)
+(custom-autoload 'american-calendar-display-form "calendar" t)
-(defvar print-diary-entries-hook (quote lpr-buffer) "\
+(defvar print-diary-entries-hook 'lpr-buffer "\
List of functions called after a temporary diary buffer is prepared.
The buffer shows only the diary entries currently visible in the diary
buffer. The default just does the printing. Other uses might include, for
example, rearranging the lines into order by day and time, saving the buffer
instead of deleting it, or changing the function used to do the printing.")
-(custom-autoload (quote print-diary-entries-hook) "calendar" t)
+(custom-autoload 'print-diary-entries-hook "calendar" t)
(defvar list-diary-entries-hook nil "\
List of functions called after diary file is culled for relevant entries.
@@ -3276,13 +3330,13 @@ in your `.emacs' file to cause the fancy diary buffer to be displayed with
diary entries from various included files, each day's entries sorted into
lexicographic order.")
-(custom-autoload (quote list-diary-entries-hook) "calendar" t)
+(custom-autoload 'list-diary-entries-hook "calendar" t)
(defvar diary-hook nil "\
List of functions called after the display of the diary.
Can be used for appointment notification.")
-(custom-autoload (quote diary-hook) "calendar" t)
+(custom-autoload 'diary-hook "calendar" t)
(defvar diary-display-hook nil "\
List of functions that handle the display of the diary.
@@ -3306,7 +3360,7 @@ diary buffer will not show days for which there are no diary entries, even
if that day is a holiday; if you want such days to be shown in the fancy
diary buffer, set the variable `diary-list-include-blanks' to t.")
-(custom-autoload (quote diary-display-hook) "calendar" nil)
+(custom-autoload 'diary-display-hook "calendar" nil)
(defvar nongregorian-diary-listing-hook nil "\
List of functions called for listing diary file and included files.
@@ -3316,7 +3370,7 @@ to cull relevant entries. You can use either or both of
`list-bahai-diary-entries'. The documentation for these functions
describes the style of such diary entries.")
-(custom-autoload (quote nongregorian-diary-listing-hook) "calendar" t)
+(custom-autoload 'nongregorian-diary-listing-hook "calendar" t)
(defvar mark-diary-entries-hook nil "\
List of functions called after marking diary entries in the calendar.
@@ -3332,7 +3386,7 @@ variable `diary-include-string'. When you use `mark-included-diary-files' as
part of the mark-diary-entries-hook, you will probably also want to use the
function `include-other-diary-files' as part of `list-diary-entries-hook'.")
-(custom-autoload (quote mark-diary-entries-hook) "calendar" t)
+(custom-autoload 'mark-diary-entries-hook "calendar" t)
(defvar nongregorian-diary-marking-hook nil "\
List of functions called for marking diary file and included files.
@@ -3342,14 +3396,14 @@ to cull relevant entries. You can use either or both of
`mark-bahai-diary-entries'. The documentation for these functions
describes the style of such diary entries.")
-(custom-autoload (quote nongregorian-diary-marking-hook) "calendar" t)
+(custom-autoload 'nongregorian-diary-marking-hook "calendar" t)
(defvar diary-list-include-blanks nil "\
If nil, do not include days with no diary entry in the list of diary entries.
Such days will then not be shown in the fancy diary buffer, even if they
are holidays.")
-(custom-autoload (quote diary-list-include-blanks) "calendar" t)
+(custom-autoload 'diary-list-include-blanks "calendar" t)
(defvar holidays-in-diary-buffer t "\
Non-nil means include holidays in the diary display.
@@ -3357,97 +3411,97 @@ The holidays appear in the mode line of the diary buffer, or in the
fancy diary buffer next to the date. This slows down the diary functions
somewhat; setting it to nil makes the diary display faster.")
-(custom-autoload (quote holidays-in-diary-buffer) "calendar" t)
+(custom-autoload 'holidays-in-diary-buffer "calendar" t)
-(put (quote general-holidays) (quote risky-local-variable) t)
+(put 'general-holidays 'risky-local-variable t)
-(defvar general-holidays (quote ((holiday-fixed 1 1 "New Year's Day") (holiday-float 1 1 3 "Martin Luther King Day") (holiday-fixed 2 2 "Groundhog Day") (holiday-fixed 2 14 "Valentine's Day") (holiday-float 2 1 3 "President's Day") (holiday-fixed 3 17 "St. Patrick's Day") (holiday-fixed 4 1 "April Fools' Day") (holiday-float 5 0 2 "Mother's Day") (holiday-float 5 1 -1 "Memorial Day") (holiday-fixed 6 14 "Flag Day") (holiday-float 6 0 3 "Father's Day") (holiday-fixed 7 4 "Independence Day") (holiday-float 9 1 1 "Labor Day") (holiday-float 10 1 2 "Columbus Day") (holiday-fixed 10 31 "Halloween") (holiday-fixed 11 11 "Veteran's Day") (holiday-float 11 4 4 "Thanksgiving"))) "\
+(defvar general-holidays '((holiday-fixed 1 1 "New Year's Day") (holiday-float 1 1 3 "Martin Luther King Day") (holiday-fixed 2 2 "Groundhog Day") (holiday-fixed 2 14 "Valentine's Day") (holiday-float 2 1 3 "President's Day") (holiday-fixed 3 17 "St. Patrick's Day") (holiday-fixed 4 1 "April Fools' Day") (holiday-float 5 0 2 "Mother's Day") (holiday-float 5 1 -1 "Memorial Day") (holiday-fixed 6 14 "Flag Day") (holiday-float 6 0 3 "Father's Day") (holiday-fixed 7 4 "Independence Day") (holiday-float 9 1 1 "Labor Day") (holiday-float 10 1 2 "Columbus Day") (holiday-fixed 10 31 "Halloween") (holiday-fixed 11 11 "Veteran's Day") (holiday-float 11 4 4 "Thanksgiving")) "\
General holidays. Default value is for the United States.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote general-holidays) "calendar" t)
+(custom-autoload 'general-holidays "calendar" t)
-(put (quote oriental-holidays) (quote risky-local-variable) t)
+(put 'oriental-holidays 'risky-local-variable t)
-(defvar oriental-holidays (quote ((if (fboundp (quote atan)) (holiday-chinese-new-year)))) "\
+(defvar oriental-holidays '((if (fboundp 'atan) (holiday-chinese-new-year))) "\
Oriental holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote oriental-holidays) "calendar" t)
+(custom-autoload 'oriental-holidays "calendar" t)
-(put (quote local-holidays) (quote risky-local-variable) t)
+(put 'local-holidays 'risky-local-variable t)
(defvar local-holidays nil "\
Local holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote local-holidays) "calendar" t)
+(custom-autoload 'local-holidays "calendar" t)
-(put (quote other-holidays) (quote risky-local-variable) t)
+(put 'other-holidays 'risky-local-variable t)
(defvar other-holidays nil "\
User defined holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote other-holidays) "calendar" t)
+(custom-autoload 'other-holidays "calendar" t)
-(put (quote hebrew-holidays-1) (quote risky-local-variable) t)
+(put 'hebrew-holidays-1 'risky-local-variable t)
-(defvar hebrew-holidays-1 (quote ((holiday-rosh-hashanah-etc) (if all-hebrew-calendar-holidays (holiday-julian 11 (let* ((m displayed-month) (y displayed-year) (year)) (increment-calendar-month m y -1) (let ((year (extract-calendar-year (calendar-julian-from-absolute (calendar-absolute-from-gregorian (list m 1 y)))))) (if (zerop (% (1+ year) 4)) 22 21))) "\"Tal Umatar\" (evening)")))))
+(defvar hebrew-holidays-1 '((holiday-rosh-hashanah-etc) (if all-hebrew-calendar-holidays (holiday-julian 11 (let* ((m displayed-month) (y displayed-year) (year)) (increment-calendar-month m y -1) (let ((year (extract-calendar-year (calendar-julian-from-absolute (calendar-absolute-from-gregorian (list m 1 y)))))) (if (zerop (% (1+ year) 4)) 22 21))) "\"Tal Umatar\" (evening)"))))
-(put (quote hebrew-holidays-2) (quote risky-local-variable) t)
+(put 'hebrew-holidays-2 'risky-local-variable t)
-(defvar hebrew-holidays-2 (quote ((if all-hebrew-calendar-holidays (holiday-hanukkah) (holiday-hebrew 9 25 "Hanukkah")) (if all-hebrew-calendar-holidays (holiday-hebrew 10 (let ((h-year (extract-calendar-year (calendar-hebrew-from-absolute (calendar-absolute-from-gregorian (list displayed-month 28 displayed-year)))))) (if (= (% (calendar-absolute-from-hebrew (list 10 10 h-year)) 7) 6) 11 10)) "Tzom Teveth")) (if all-hebrew-calendar-holidays (holiday-hebrew 11 15 "Tu B'Shevat")))))
+(defvar hebrew-holidays-2 '((if all-hebrew-calendar-holidays (holiday-hanukkah) (holiday-hebrew 9 25 "Hanukkah")) (if all-hebrew-calendar-holidays (holiday-hebrew 10 (let ((h-year (extract-calendar-year (calendar-hebrew-from-absolute (calendar-absolute-from-gregorian (list displayed-month 28 displayed-year)))))) (if (= (% (calendar-absolute-from-hebrew (list 10 10 h-year)) 7) 6) 11 10)) "Tzom Teveth")) (if all-hebrew-calendar-holidays (holiday-hebrew 11 15 "Tu B'Shevat"))))
-(put (quote hebrew-holidays-3) (quote risky-local-variable) t)
+(put 'hebrew-holidays-3 'risky-local-variable t)
-(defvar hebrew-holidays-3 (quote ((if all-hebrew-calendar-holidays (holiday-hebrew 11 (let ((m displayed-month) (y displayed-year)) (increment-calendar-month m y 1) (let* ((h-year (extract-calendar-year (calendar-hebrew-from-absolute (calendar-absolute-from-gregorian (list m (calendar-last-day-of-month m y) y))))) (s-s (calendar-hebrew-from-absolute (if (= (% (calendar-absolute-from-hebrew (list 7 1 h-year)) 7) 6) (calendar-dayname-on-or-before 6 (calendar-absolute-from-hebrew (list 11 17 h-year))) (calendar-dayname-on-or-before 6 (calendar-absolute-from-hebrew (list 11 16 h-year)))))) (day (extract-calendar-day s-s))) day)) "Shabbat Shirah")))))
+(defvar hebrew-holidays-3 '((if all-hebrew-calendar-holidays (holiday-hebrew 11 (let ((m displayed-month) (y displayed-year)) (increment-calendar-month m y 1) (let* ((h-year (extract-calendar-year (calendar-hebrew-from-absolute (calendar-absolute-from-gregorian (list m (calendar-last-day-of-month m y) y))))) (s-s (calendar-hebrew-from-absolute (if (= (% (calendar-absolute-from-hebrew (list 7 1 h-year)) 7) 6) (calendar-dayname-on-or-before 6 (calendar-absolute-from-hebrew (list 11 17 h-year))) (calendar-dayname-on-or-before 6 (calendar-absolute-from-hebrew (list 11 16 h-year)))))) (day (extract-calendar-day s-s))) day)) "Shabbat Shirah"))))
-(put (quote hebrew-holidays-4) (quote risky-local-variable) t)
+(put 'hebrew-holidays-4 'risky-local-variable t)
-(defvar hebrew-holidays-4 (quote ((holiday-passover-etc) (if (and all-hebrew-calendar-holidays (let* ((m displayed-month) (y displayed-year) (year)) (increment-calendar-month m y -1) (let ((year (extract-calendar-year (calendar-julian-from-absolute (calendar-absolute-from-gregorian (list m 1 y)))))) (= 21 (% year 28))))) (holiday-julian 3 26 "Kiddush HaHamah")) (if all-hebrew-calendar-holidays (holiday-tisha-b-av-etc)))))
+(defvar hebrew-holidays-4 '((holiday-passover-etc) (if (and all-hebrew-calendar-holidays (let* ((m displayed-month) (y displayed-year) (year)) (increment-calendar-month m y -1) (let ((year (extract-calendar-year (calendar-julian-from-absolute (calendar-absolute-from-gregorian (list m 1 y)))))) (= 21 (% year 28))))) (holiday-julian 3 26 "Kiddush HaHamah")) (if all-hebrew-calendar-holidays (holiday-tisha-b-av-etc))))
-(put (quote hebrew-holidays) (quote risky-local-variable) t)
+(put 'hebrew-holidays 'risky-local-variable t)
(defvar hebrew-holidays (append hebrew-holidays-1 hebrew-holidays-2 hebrew-holidays-3 hebrew-holidays-4) "\
Jewish holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote hebrew-holidays) "calendar" t)
+(custom-autoload 'hebrew-holidays "calendar" t)
-(put (quote christian-holidays) (quote risky-local-variable) t)
+(put 'christian-holidays 'risky-local-variable t)
-(defvar christian-holidays (quote ((if all-christian-calendar-holidays (holiday-fixed 1 6 "Epiphany")) (holiday-easter-etc 0 "Easter Sunday") (holiday-easter-etc -2 "Good Friday") (holiday-easter-etc -46 "Ash Wednesday") (if all-christian-calendar-holidays (holiday-easter-etc -63 "Septuagesima Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -56 "Sexagesima Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -49 "Shrove Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -48 "Shrove Monday")) (if all-christian-calendar-holidays (holiday-easter-etc -47 "Shrove Tuesday")) (if all-christian-calendar-holidays (holiday-easter-etc -14 "Passion Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -7 "Palm Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -3 "Maundy Thursday")) (if all-christian-calendar-holidays (holiday-easter-etc 35 "Rogation Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc 39 "Ascension Day")) (if all-christian-calendar-holidays (holiday-easter-etc 49 "Pentecost (Whitsunday)")) (if all-christian-calendar-holidays (holiday-easter-etc 50 "Whitmonday")) (if all-christian-calendar-holidays (holiday-easter-etc 56 "Trinity Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc 60 "Corpus Christi")) (if all-christian-calendar-holidays (holiday-greek-orthodox-easter)) (if all-christian-calendar-holidays (holiday-fixed 8 15 "Assumption")) (if all-christian-calendar-holidays (holiday-advent 0 "Advent")) (holiday-fixed 12 25 "Christmas") (if all-christian-calendar-holidays (holiday-julian 12 25 "Eastern Orthodox Christmas")))) "\
+(defvar christian-holidays '((if all-christian-calendar-holidays (holiday-fixed 1 6 "Epiphany")) (holiday-easter-etc 0 "Easter Sunday") (holiday-easter-etc -2 "Good Friday") (holiday-easter-etc -46 "Ash Wednesday") (if all-christian-calendar-holidays (holiday-easter-etc -63 "Septuagesima Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -56 "Sexagesima Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -49 "Shrove Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -48 "Shrove Monday")) (if all-christian-calendar-holidays (holiday-easter-etc -47 "Shrove Tuesday")) (if all-christian-calendar-holidays (holiday-easter-etc -14 "Passion Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -7 "Palm Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc -3 "Maundy Thursday")) (if all-christian-calendar-holidays (holiday-easter-etc 35 "Rogation Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc 39 "Ascension Day")) (if all-christian-calendar-holidays (holiday-easter-etc 49 "Pentecost (Whitsunday)")) (if all-christian-calendar-holidays (holiday-easter-etc 50 "Whitmonday")) (if all-christian-calendar-holidays (holiday-easter-etc 56 "Trinity Sunday")) (if all-christian-calendar-holidays (holiday-easter-etc 60 "Corpus Christi")) (if all-christian-calendar-holidays (holiday-greek-orthodox-easter)) (if all-christian-calendar-holidays (holiday-fixed 8 15 "Assumption")) (if all-christian-calendar-holidays (holiday-advent 0 "Advent")) (holiday-fixed 12 25 "Christmas") (if all-christian-calendar-holidays (holiday-julian 12 25 "Eastern Orthodox Christmas"))) "\
Christian holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote christian-holidays) "calendar" t)
+(custom-autoload 'christian-holidays "calendar" t)
-(put (quote islamic-holidays) (quote risky-local-variable) t)
+(put 'islamic-holidays 'risky-local-variable t)
-(defvar islamic-holidays (quote ((holiday-islamic 1 1 (format "Islamic New Year %d" (let ((m displayed-month) (y displayed-year)) (increment-calendar-month m y 1) (extract-calendar-year (calendar-islamic-from-absolute (calendar-absolute-from-gregorian (list m (calendar-last-day-of-month m y) y))))))) (if all-islamic-calendar-holidays (holiday-islamic 1 10 "Ashura")) (if all-islamic-calendar-holidays (holiday-islamic 3 12 "Mulad-al-Nabi")) (if all-islamic-calendar-holidays (holiday-islamic 7 26 "Shab-e-Mi'raj")) (if all-islamic-calendar-holidays (holiday-islamic 8 15 "Shab-e-Bara't")) (holiday-islamic 9 1 "Ramadan Begins") (if all-islamic-calendar-holidays (holiday-islamic 9 27 "Shab-e Qadr")) (if all-islamic-calendar-holidays (holiday-islamic 10 1 "Id-al-Fitr")) (if all-islamic-calendar-holidays (holiday-islamic 12 10 "Id-al-Adha")))) "\
+(defvar islamic-holidays '((holiday-islamic 1 1 (format "Islamic New Year %d" (let ((m displayed-month) (y displayed-year)) (increment-calendar-month m y 1) (extract-calendar-year (calendar-islamic-from-absolute (calendar-absolute-from-gregorian (list m (calendar-last-day-of-month m y) y))))))) (if all-islamic-calendar-holidays (holiday-islamic 1 10 "Ashura")) (if all-islamic-calendar-holidays (holiday-islamic 3 12 "Mulad-al-Nabi")) (if all-islamic-calendar-holidays (holiday-islamic 7 26 "Shab-e-Mi'raj")) (if all-islamic-calendar-holidays (holiday-islamic 8 15 "Shab-e-Bara't")) (holiday-islamic 9 1 "Ramadan Begins") (if all-islamic-calendar-holidays (holiday-islamic 9 27 "Shab-e Qadr")) (if all-islamic-calendar-holidays (holiday-islamic 10 1 "Id-al-Fitr")) (if all-islamic-calendar-holidays (holiday-islamic 12 10 "Id-al-Adha"))) "\
Islamic holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote islamic-holidays) "calendar" t)
+(custom-autoload 'islamic-holidays "calendar" t)
-(put (quote bahai-holidays) (quote risky-local-variable) t)
+(put 'bahai-holidays 'risky-local-variable t)
-(defvar bahai-holidays (quote ((holiday-fixed 3 21 (format "Baha'i New Year (Naw-Ruz) %d" (- displayed-year (1- 1844)))) (holiday-fixed 4 21 "First Day of Ridvan") (if all-bahai-calendar-holidays (holiday-fixed 4 22 "Second Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 23 "Third Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 24 "Fourth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 25 "Fifth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 26 "Sixth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 27 "Seventh Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 28 "Eighth Day of Ridvan")) (holiday-fixed 4 29 "Ninth Day of Ridvan") (if all-bahai-calendar-holidays (holiday-fixed 4 30 "Tenth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 5 1 "Eleventh Day of Ridvan")) (holiday-fixed 5 2 "Twelfth Day of Ridvan") (holiday-fixed 5 23 "Declaration of the Bab") (holiday-fixed 5 29 "Ascension of Baha'u'llah") (holiday-fixed 7 9 "Martyrdom of the Bab") (holiday-fixed 10 20 "Birth of the Bab") (holiday-fixed 11 12 "Birth of Baha'u'llah") (if all-bahai-calendar-holidays (holiday-fixed 11 26 "Day of the Covenant")) (if all-bahai-calendar-holidays (holiday-fixed 11 28 "Ascension of `Abdu'l-Baha")))) "\
+(defvar bahai-holidays '((holiday-fixed 3 21 (format "Baha'i New Year (Naw-Ruz) %d" (- displayed-year (1- 1844)))) (holiday-fixed 4 21 "First Day of Ridvan") (if all-bahai-calendar-holidays (holiday-fixed 4 22 "Second Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 23 "Third Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 24 "Fourth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 25 "Fifth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 26 "Sixth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 27 "Seventh Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 4 28 "Eighth Day of Ridvan")) (holiday-fixed 4 29 "Ninth Day of Ridvan") (if all-bahai-calendar-holidays (holiday-fixed 4 30 "Tenth Day of Ridvan")) (if all-bahai-calendar-holidays (holiday-fixed 5 1 "Eleventh Day of Ridvan")) (holiday-fixed 5 2 "Twelfth Day of Ridvan") (holiday-fixed 5 23 "Declaration of the Bab") (holiday-fixed 5 29 "Ascension of Baha'u'llah") (holiday-fixed 7 9 "Martyrdom of the Bab") (holiday-fixed 10 20 "Birth of the Bab") (holiday-fixed 11 12 "Birth of Baha'u'llah") (if all-bahai-calendar-holidays (holiday-fixed 11 26 "Day of the Covenant")) (if all-bahai-calendar-holidays (holiday-fixed 11 28 "Ascension of `Abdu'l-Baha"))) "\
Baha'i holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote bahai-holidays) "calendar" t)
+(custom-autoload 'bahai-holidays "calendar" t)
-(put (quote solar-holidays) (quote risky-local-variable) t)
+(put 'solar-holidays 'risky-local-variable t)
-(defvar solar-holidays (quote ((if (fboundp (quote atan)) (solar-equinoxes-solstices)) (if (progn (require (quote cal-dst)) t) (funcall (quote holiday-sexp) calendar-daylight-savings-starts (quote (format "Daylight Saving Time Begins %s" (if (fboundp (quote atan)) (solar-time-string (/ calendar-daylight-savings-starts-time (float 60)) calendar-standard-time-zone-name) ""))))) (funcall (quote holiday-sexp) calendar-daylight-savings-ends (quote (format "Daylight Saving Time Ends %s" (if (fboundp (quote atan)) (solar-time-string (/ calendar-daylight-savings-ends-time (float 60)) calendar-daylight-time-zone-name) "")))))) "\
+(defvar solar-holidays '((if (fboundp 'atan) (solar-equinoxes-solstices)) (if (progn (require 'cal-dst) t) (funcall 'holiday-sexp calendar-daylight-savings-starts '(format "Daylight Saving Time Begins %s" (if (fboundp 'atan) (solar-time-string (/ calendar-daylight-savings-starts-time (float 60)) calendar-standard-time-zone-name) "")))) (funcall 'holiday-sexp calendar-daylight-savings-ends '(format "Daylight Saving Time Ends %s" (if (fboundp 'atan) (solar-time-string (/ calendar-daylight-savings-ends-time (float 60)) calendar-daylight-time-zone-name) "")))) "\
Sun-related holidays.
See the documentation for `calendar-holidays' for details.")
-(custom-autoload (quote solar-holidays) "calendar" t)
+(custom-autoload 'solar-holidays "calendar" t)
-(put (quote calendar-holidays) (quote risky-local-variable) t)
+(put 'calendar-holidays 'risky-local-variable t)
(defvar calendar-setup nil "\
The frame setup of the calendar.
@@ -3457,9 +3511,9 @@ frames); `calendar-only' (calendar in a separate, dedicated frame); with
any other value the current frame is used. Using any of the first
three options overrides the value of `view-diary-entries-initially'.")
-(custom-autoload (quote calendar-setup) "calendar" t)
+(custom-autoload 'calendar-setup "calendar" t)
-(autoload (quote calendar) "calendar" "\
+(autoload 'calendar "calendar" "\
Choose between the one frame, two frame, or basic calendar displays.
If called with an optional prefix argument, prompts for month and year.
@@ -3477,20 +3531,20 @@ after starting `calendar', you should call `redraw-calendar' to
update the calendar display to reflect the change, otherwise
movement commands will not work correctly.")
-(custom-autoload (quote calendar-week-start-day) "calendar" nil)
+(custom-autoload 'calendar-week-start-day "calendar" nil)
;;;***
;;;### (autoloads (canlock-verify canlock-insert-header) "canlock"
-;;;;;; "gnus/canlock.el" (17842 54741))
+;;;;;; "gnus/canlock.el" (18088 55101))
;;; Generated autoloads from gnus/canlock.el
-(autoload (quote canlock-insert-header) "canlock" "\
+(autoload 'canlock-insert-header "canlock" "\
Insert a Cancel-Key and/or a Cancel-Lock header if possible.
\(fn &optional ID-FOR-KEY ID-FOR-LOCK PASSWORD)" nil nil)
-(autoload (quote canlock-verify) "canlock" "\
+(autoload 'canlock-verify "canlock" "\
Verify Cancel-Lock or Cancel-Key in BUFFER.
If BUFFER is nil, the current buffer is assumed. Signal an error if
it fails.
@@ -3499,18 +3553,18 @@ it fails.
;;;***
-;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (17842
-;;;;;; 56333))
+;;;### (autoloads nil "cc-compat" "progmodes/cc-compat.el" (18088
+;;;;;; 55114))
;;; Generated autoloads from progmodes/cc-compat.el
(put 'c-indent-level 'safe-local-variable 'integerp)
;;;***
;;;### (autoloads (c-guess-basic-syntax) "cc-engine" "progmodes/cc-engine.el"
-;;;;;; (17942 63381))
+;;;;;; (18203 37789))
;;; Generated autoloads from progmodes/cc-engine.el
-(autoload (quote c-guess-basic-syntax) "cc-engine" "\
+(autoload 'c-guess-basic-syntax "cc-engine" "\
Return the syntactic context of the current line.
\(fn)" nil nil)
@@ -3519,10 +3573,10 @@ Return the syntactic context of the current line.
;;;### (autoloads (pike-mode idl-mode java-mode objc-mode c++-mode
;;;;;; c-mode c-initialize-cc-mode) "cc-mode" "progmodes/cc-mode.el"
-;;;;;; (17992 30878))
+;;;;;; (18191 7159))
;;; Generated autoloads from progmodes/cc-mode.el
-(autoload (quote c-initialize-cc-mode) "cc-mode" "\
+(autoload 'c-initialize-cc-mode "cc-mode" "\
Initialize CC Mode for use in the current buffer.
If the optional NEW-STYLE-INIT is nil or left out then all necessary
initialization to run CC Mode for the C language is done. Otherwise
@@ -3541,7 +3595,7 @@ Syntax table used in c-mode buffers.")
(add-to-list 'auto-mode-alist '("\\.y\\(acc\\)?\\'" . c-mode))
(add-to-list 'auto-mode-alist '("\\.lex\\'" . c-mode))
-(autoload (quote c-mode) "cc-mode" "\
+(autoload 'c-mode "cc-mode" "\
Major mode for editing K&R and ANSI C code.
To submit a problem report, enter `\\[c-submit-bug-report]' from a
c-mode buffer. This automatically sets up a mail buffer with version
@@ -3561,7 +3615,7 @@ Key bindings:
(defvar c++-mode-syntax-table nil "\
Syntax table used in c++-mode buffers.")
-(autoload (quote c++-mode) "cc-mode" "\
+(autoload 'c++-mode "cc-mode" "\
Major mode for editing C++ code.
To submit a problem report, enter `\\[c-submit-bug-report]' from a
c++-mode buffer. This automatically sets up a mail buffer with
@@ -3583,7 +3637,7 @@ Key bindings:
Syntax table used in objc-mode buffers.")
(add-to-list 'auto-mode-alist '("\\.m\\'" . objc-mode))
-(autoload (quote objc-mode) "cc-mode" "\
+(autoload 'objc-mode "cc-mode" "\
Major mode for editing Objective C code.
To submit a problem report, enter `\\[c-submit-bug-report]' from an
objc-mode buffer. This automatically sets up a mail buffer with
@@ -3605,7 +3659,7 @@ Key bindings:
Syntax table used in java-mode buffers.")
(add-to-list 'auto-mode-alist '("\\.java\\'" . java-mode))
-(autoload (quote java-mode) "cc-mode" "\
+(autoload 'java-mode "cc-mode" "\
Major mode for editing Java code.
To submit a problem report, enter `\\[c-submit-bug-report]' from a
java-mode buffer. This automatically sets up a mail buffer with
@@ -3627,7 +3681,7 @@ Key bindings:
Syntax table used in idl-mode buffers.")
(add-to-list 'auto-mode-alist '("\\.idl\\'" . idl-mode))
-(autoload (quote idl-mode) "cc-mode" "\
+(autoload 'idl-mode "cc-mode" "\
Major mode for editing CORBA's IDL, PSDL and CIDL code.
To submit a problem report, enter `\\[c-submit-bug-report]' from an
idl-mode buffer. This automatically sets up a mail buffer with
@@ -3650,7 +3704,7 @@ Syntax table used in pike-mode buffers.")
(add-to-list 'auto-mode-alist '("\\.\\(u?lpc\\|pike\\|pmod\\(.in\\)?\\)\\'" . pike-mode))
(add-to-list 'interpreter-mode-alist '("pike" . pike-mode))
-(autoload (quote pike-mode) "cc-mode" "\
+(autoload 'pike-mode "cc-mode" "\
Major mode for editing Pike code.
To submit a problem report, enter `\\[c-submit-bug-report]' from a
pike-mode buffer. This automatically sets up a mail buffer with
@@ -3677,10 +3731,10 @@ Key bindings:
;;;***
;;;### (autoloads (c-set-offset c-add-style c-set-style) "cc-styles"
-;;;;;; "progmodes/cc-styles.el" (17842 56333))
+;;;;;; "progmodes/cc-styles.el" (18192 17587))
;;; Generated autoloads from progmodes/cc-styles.el
-(autoload (quote c-set-style) "cc-styles" "\
+(autoload 'c-set-style "cc-styles" "\
Set the current buffer to use the style STYLENAME.
STYLENAME, a string, must be an existing CC Mode style - These are contained
in the variable `c-style-alist'.
@@ -3705,7 +3759,7 @@ a null operation.
\(fn STYLENAME &optional DONT-OVERRIDE)" t nil)
-(autoload (quote c-add-style) "cc-styles" "\
+(autoload 'c-add-style "cc-styles" "\
Adds a style to `c-style-alist', or updates an existing one.
STYLE is a string identifying the style to add or update. DESCRIPTION
is an association list describing the style and must be of the form:
@@ -3718,7 +3772,7 @@ STYLE using `c-set-style' if the optional SET-P flag is non-nil.
\(fn STYLE DESCRIPTION &optional SET-P)" t nil)
-(autoload (quote c-set-offset) "cc-styles" "\
+(autoload 'c-set-offset "cc-styles" "\
Change the value of a syntactic element symbol in `c-offsets-alist'.
SYMBOL is the syntactic element symbol to change and OFFSET is the new
offset for that syntactic element. The optional argument is not used
@@ -3728,14 +3782,14 @@ and exists only for compatibility reasons.
;;;***
-;;;### (autoloads nil "cc-subword" "progmodes/cc-subword.el" (17949
-;;;;;; 41467))
+;;;### (autoloads nil "cc-subword" "progmodes/cc-subword.el" (18088
+;;;;;; 55115))
;;; Generated autoloads from progmodes/cc-subword.el
(autoload 'c-subword-mode "cc-subword" "Mode enabling subword movement and editing keys." t)
;;;***
-;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (17941 38806))
+;;;### (autoloads nil "cc-vars" "progmodes/cc-vars.el" (18120 34752))
;;; Generated autoloads from progmodes/cc-vars.el
(put 'c-basic-offset 'safe-local-variable 'integerp)
(put 'c-backslash-column 'safe-local-variable 'integerp)
@@ -3745,20 +3799,20 @@ and exists only for compatibility reasons.
;;;### (autoloads (ccl-execute-with-args check-ccl-program define-ccl-program
;;;;;; declare-ccl-program ccl-dump ccl-compile) "ccl" "international/ccl.el"
-;;;;;; (17842 54888))
+;;;;;; (18088 55107))
;;; Generated autoloads from international/ccl.el
-(autoload (quote ccl-compile) "ccl" "\
+(autoload 'ccl-compile "ccl" "\
Return the compiled code of CCL-PROGRAM as a vector of integers.
\(fn CCL-PROGRAM)" nil nil)
-(autoload (quote ccl-dump) "ccl" "\
+(autoload 'ccl-dump "ccl" "\
Disassemble compiled CCL-CODE.
\(fn CCL-CODE)" nil nil)
-(autoload (quote declare-ccl-program) "ccl" "\
+(autoload 'declare-ccl-program "ccl" "\
Declare NAME as a name of CCL program.
This macro exists for backward compatibility. In the old version of
@@ -3771,7 +3825,7 @@ Optional arg VECTOR is a compiled CCL code of the CCL program.
\(fn NAME &optional VECTOR)" nil (quote macro))
-(autoload (quote define-ccl-program) "ccl" "\
+(autoload 'define-ccl-program "ccl" "\
Set NAME the compiled code of CCL-PROGRAM.
CCL-PROGRAM has this form:
@@ -3984,7 +4038,7 @@ MAP-ID := integer
\(fn NAME CCL-PROGRAM &optional DOC)" nil (quote macro))
-(autoload (quote check-ccl-program) "ccl" "\
+(autoload 'check-ccl-program "ccl" "\
Check validity of CCL-PROGRAM.
If CCL-PROGRAM is a symbol denoting a CCL program, return
CCL-PROGRAM, else return nil.
@@ -3993,7 +4047,7 @@ register CCL-PROGRAM by name NAME, and return NAME.
\(fn CCL-PROGRAM &optional NAME)" nil (quote macro))
-(autoload (quote ccl-execute-with-args) "ccl" "\
+(autoload 'ccl-execute-with-args "ccl" "\
Execute CCL-PROGRAM with registers initialized by the remaining args.
The return value is a vector of resulting CCL registers.
@@ -4004,10 +4058,10 @@ See the documentation of `define-ccl-program' for the detail of CCL program.
;;;***
;;;### (autoloads (cfengine-mode) "cfengine" "progmodes/cfengine.el"
-;;;;;; (17842 56333))
+;;;;;; (18088 55115))
;;; Generated autoloads from progmodes/cfengine.el
-(autoload (quote cfengine-mode) "cfengine" "\
+(autoload 'cfengine-mode "cfengine" "\
Major mode for editing cfengine input.
There are no special keybindings by default.
@@ -4026,17 +4080,19 @@ to the action header.
;;;;;; checkdoc-comments checkdoc-continue checkdoc-start checkdoc-current-buffer
;;;;;; checkdoc-eval-current-buffer checkdoc-message-interactive
;;;;;; checkdoc-interactive checkdoc) "checkdoc" "emacs-lisp/checkdoc.el"
-;;;;;; (17842 54152))
+;;;;;; (18203 37787))
;;; Generated autoloads from emacs-lisp/checkdoc.el
+(put 'checkdoc-force-docstrings-flag 'safe-local-variable 'booleanp)
+(put 'checkdoc-permit-comma-termination-flag 'safe-local-variable 'booleanp)
-(autoload (quote checkdoc) "checkdoc" "\
+(autoload 'checkdoc "checkdoc" "\
Interactively check the entire buffer for style errors.
The current status of the check will be displayed in a buffer which
the users will view as each check is completed.
\(fn)" t nil)
-(autoload (quote checkdoc-interactive) "checkdoc" "\
+(autoload 'checkdoc-interactive "checkdoc" "\
Interactively check the current buffer for doc string errors.
Prefix argument START-HERE will start the checking from the current
point, otherwise the check starts at the beginning of the current
@@ -4047,7 +4103,7 @@ checkdoc status window instead of the usual behavior.
\(fn &optional START-HERE SHOWSTATUS)" t nil)
-(autoload (quote checkdoc-message-interactive) "checkdoc" "\
+(autoload 'checkdoc-message-interactive "checkdoc" "\
Interactively check the current buffer for message string errors.
Prefix argument START-HERE will start the checking from the current
point, otherwise the check starts at the beginning of the current
@@ -4058,7 +4114,7 @@ checkdoc status window instead of the usual behavior.
\(fn &optional START-HERE SHOWSTATUS)" t nil)
-(autoload (quote checkdoc-eval-current-buffer) "checkdoc" "\
+(autoload 'checkdoc-eval-current-buffer "checkdoc" "\
Evaluate and check documentation for the current buffer.
Evaluation is done first because good documentation for something that
doesn't work is just not useful. Comments, doc strings, and rogue
@@ -4066,7 +4122,7 @@ spacing are all verified.
\(fn)" t nil)
-(autoload (quote checkdoc-current-buffer) "checkdoc" "\
+(autoload 'checkdoc-current-buffer "checkdoc" "\
Check current buffer for document, comment, error style, and rogue spaces.
With a prefix argument (in Lisp, the argument TAKE-NOTES),
store all errors found in a warnings buffer,
@@ -4074,7 +4130,7 @@ otherwise stop after the first error.
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-start) "checkdoc" "\
+(autoload 'checkdoc-start "checkdoc" "\
Start scanning the current buffer for documentation string style errors.
Only documentation strings are checked.
Use `checkdoc-continue' to continue checking if an error cannot be fixed.
@@ -4083,7 +4139,7 @@ a separate buffer.
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-continue) "checkdoc" "\
+(autoload 'checkdoc-continue "checkdoc" "\
Find the next doc string in the current buffer which has a style error.
Prefix argument TAKE-NOTES means to continue through the whole buffer and
save warnings in a separate buffer. Second optional argument START-POINT
@@ -4091,7 +4147,7 @@ is the starting location. If this is nil, `point-min' is used instead.
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-comments) "checkdoc" "\
+(autoload 'checkdoc-comments "checkdoc" "\
Find missing comment sections in the current Emacs Lisp file.
Prefix argument TAKE-NOTES non-nil means to save warnings in a
separate buffer. Otherwise print a message. This returns the error
@@ -4099,7 +4155,7 @@ if there is one.
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-rogue-spaces) "checkdoc" "\
+(autoload 'checkdoc-rogue-spaces "checkdoc" "\
Find extra spaces at the end of lines in the current file.
Prefix argument TAKE-NOTES non-nil means to save warnings in a
separate buffer. Otherwise print a message. This returns the error
@@ -4108,13 +4164,13 @@ Optional argument INTERACT permits more interactive fixing.
\(fn &optional TAKE-NOTES INTERACT)" t nil)
-(autoload (quote checkdoc-message-text) "checkdoc" "\
+(autoload 'checkdoc-message-text "checkdoc" "\
Scan the buffer for occurrences of the error function, and verify text.
Optional argument TAKE-NOTES causes all errors to be logged.
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-eval-defun) "checkdoc" "\
+(autoload 'checkdoc-eval-defun "checkdoc" "\
Evaluate the current form with `eval-defun' and check its documentation.
Evaluation is done first so the form will be read before the
documentation is checked. If there is a documentation error, then the display
@@ -4122,7 +4178,7 @@ of what was evaluated will be overwritten by the diagnostic message.
\(fn)" t nil)
-(autoload (quote checkdoc-defun) "checkdoc" "\
+(autoload 'checkdoc-defun "checkdoc" "\
Examine the doc string of the function or variable under point.
Call `error' if the doc string has problems. If NO-ERROR is
non-nil, then do not call error, but call `message' instead.
@@ -4131,72 +4187,73 @@ space at the end of each line.
\(fn &optional NO-ERROR)" t nil)
-(autoload (quote checkdoc-ispell) "checkdoc" "\
+(autoload 'checkdoc-ispell "checkdoc" "\
Check the style and spelling of everything interactively.
Calls `checkdoc' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-current-buffer) "checkdoc" "\
+(autoload 'checkdoc-ispell-current-buffer "checkdoc" "\
Check the style and spelling of the current buffer.
Calls `checkdoc-current-buffer' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-current-buffer'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-interactive) "checkdoc" "\
+(autoload 'checkdoc-ispell-interactive "checkdoc" "\
Check the style and spelling of the current buffer interactively.
Calls `checkdoc-interactive' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-interactive'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-message-interactive) "checkdoc" "\
+(autoload 'checkdoc-ispell-message-interactive "checkdoc" "\
Check the style and spelling of message text interactively.
Calls `checkdoc-message-interactive' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-message-interactive'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-message-text) "checkdoc" "\
+(autoload 'checkdoc-ispell-message-text "checkdoc" "\
Check the style and spelling of message text interactively.
Calls `checkdoc-message-text' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-message-text'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-start) "checkdoc" "\
+(autoload 'checkdoc-ispell-start "checkdoc" "\
Check the style and spelling of the current buffer.
Calls `checkdoc-start' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-start'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-continue) "checkdoc" "\
+(autoload 'checkdoc-ispell-continue "checkdoc" "\
Check the style and spelling of the current buffer after point.
Calls `checkdoc-continue' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-continue'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-comments) "checkdoc" "\
+(autoload 'checkdoc-ispell-comments "checkdoc" "\
Check the style and spelling of the current buffer's comments.
Calls `checkdoc-comments' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-comments'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-ispell-defun) "checkdoc" "\
+(autoload 'checkdoc-ispell-defun "checkdoc" "\
Check the style and spelling of the current defun with Ispell.
Calls `checkdoc-defun' with spell-checking turned on.
Prefix argument TAKE-NOTES is the same as for `checkdoc-defun'
\(fn &optional TAKE-NOTES)" t nil)
-(autoload (quote checkdoc-minor-mode) "checkdoc" "\
+(autoload 'checkdoc-minor-mode "checkdoc" "\
Toggle Checkdoc minor mode, a mode for checking Lisp doc strings.
-With prefix ARG, turn Checkdoc minor mode on iff ARG is positive.
+With prefix ARG, turn Checkdoc minor mode on if ARG is positive, otherwise
+turn it off.
In Checkdoc minor mode, the usual bindings for `eval-defun' which is
bound to \\<checkdoc-minor-mode-map>\\[checkdoc-eval-defun] and `checkdoc-eval-current-buffer' are overridden to include
@@ -4209,28 +4266,28 @@ checking of documentation strings.
;;;***
;;;### (autoloads (encode-hz-buffer encode-hz-region decode-hz-buffer
-;;;;;; decode-hz-region) "china-util" "language/china-util.el" (17842
-;;;;;; 58278))
+;;;;;; decode-hz-region) "china-util" "language/china-util.el" (18088
+;;;;;; 55108))
;;; Generated autoloads from language/china-util.el
-(autoload (quote decode-hz-region) "china-util" "\
+(autoload 'decode-hz-region "china-util" "\
Decode HZ/ZW encoded text in the current region.
Return the length of resulting text.
\(fn BEG END)" t nil)
-(autoload (quote decode-hz-buffer) "china-util" "\
+(autoload 'decode-hz-buffer "china-util" "\
Decode HZ/ZW encoded text in the current buffer.
\(fn)" t nil)
-(autoload (quote encode-hz-region) "china-util" "\
+(autoload 'encode-hz-region "china-util" "\
Encode the text in the current region to HZ.
Return the length of resulting text.
\(fn BEG END)" t nil)
-(autoload (quote encode-hz-buffer) "china-util" "\
+(autoload 'encode-hz-buffer "china-util" "\
Encode the text in the current buffer to HZ.
\(fn)" t nil)
@@ -4238,10 +4295,10 @@ Encode the text in the current buffer to HZ.
;;;***
;;;### (autoloads (command-history list-command-history repeat-matching-complex-command)
-;;;;;; "chistory" "chistory.el" (17842 58280))
+;;;;;; "chistory" "chistory.el" (18088 55080))
;;; Generated autoloads from chistory.el
-(autoload (quote repeat-matching-complex-command) "chistory" "\
+(autoload 'repeat-matching-complex-command "chistory" "\
Edit and re-evaluate complex command with name matching PATTERN.
Matching occurrences are displayed, most recent first, until you select
a form for evaluation. If PATTERN is empty (or nil), every form in the
@@ -4250,7 +4307,7 @@ editing and the result is evaluated.
\(fn &optional PATTERN)" t nil)
-(autoload (quote list-command-history) "chistory" "\
+(autoload 'list-command-history "chistory" "\
List history of commands typed to minibuffer.
The number of commands listed is controlled by `list-command-history-max'.
Calls value of `list-command-history-filter' (if non-nil) on each history
@@ -4260,7 +4317,7 @@ The buffer is left in Command History mode.
\(fn)" t nil)
-(autoload (quote command-history) "chistory" "\
+(autoload 'command-history "chistory" "\
Examine commands from `command-history' in a buffer.
The number of commands listed is controlled by `list-command-history-max'.
The command history is filtered by `list-command-history-filter' if non-nil.
@@ -4277,7 +4334,7 @@ and runs the normal hook `command-history-hook'.
;;;***
-;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (17842 54152))
+;;;### (autoloads nil "cl" "emacs-lisp/cl.el" (18213 13926))
;;; Generated autoloads from emacs-lisp/cl.el
(defvar custom-print-functions nil "\
@@ -4293,10 +4350,10 @@ a future Emacs interpreter will be able to use it.")
;;;***
;;;### (autoloads (common-lisp-indent-function) "cl-indent" "emacs-lisp/cl-indent.el"
-;;;;;; (17842 54152))
+;;;;;; (18088 55095))
;;; Generated autoloads from emacs-lisp/cl-indent.el
-(autoload (quote common-lisp-indent-function) "cl-indent" "\
+(autoload 'common-lisp-indent-function "cl-indent" "\
Not documented
\(fn INDENT-POINT STATE)" nil nil)
@@ -4304,10 +4361,10 @@ Not documented
;;;***
;;;### (autoloads (c-macro-expand) "cmacexp" "progmodes/cmacexp.el"
-;;;;;; (17842 56333))
+;;;;;; (18088 55115))
;;; Generated autoloads from progmodes/cmacexp.el
-(autoload (quote c-macro-expand) "cmacexp" "\
+(autoload 'c-macro-expand "cmacexp" "\
Expand C macros in the region, using the C preprocessor.
Normally display output in temp buffer, but
prefix arg means replace the region with it.
@@ -4324,11 +4381,11 @@ For use inside Lisp programs, see also `c-macro-expansion'.
;;;***
-;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (17842
-;;;;;; 58280))
+;;;### (autoloads (run-scheme) "cmuscheme" "cmuscheme.el" (18088
+;;;;;; 55080))
;;; Generated autoloads from cmuscheme.el
-(autoload (quote run-scheme) "cmuscheme" "\
+(autoload 'run-scheme "cmuscheme" "\
Run an inferior Scheme process, input and output via buffer `*scheme*'.
If there is a process already running in `*scheme*', switch to that buffer.
With argument, allows you to edit the command line (default is value
@@ -4347,10 +4404,10 @@ is run).
;;;***
;;;### (autoloads (cp-make-coding-system) "code-pages" "international/code-pages.el"
-;;;;;; (17842 54888))
+;;;;;; (18088 55107))
;;; Generated autoloads from international/code-pages.el
-(autoload (quote cp-make-coding-system) "code-pages" "\
+(autoload 'cp-make-coding-system "code-pages" "\
Make coding system NAME for and 8-bit, extended-ASCII character set.
V is a 128-long vector of characters to translate the upper half of
the character set. DOC-STRING and MNEMONIC are used as the
@@ -4408,10 +4465,10 @@ Return an updated `non-iso-charset-alist'.
;;;### (autoloads (codepage-setup cp-supported-codepages cp-offset-for-codepage
;;;;;; cp-language-for-codepage cp-charset-for-codepage cp-make-coding-systems-for-codepage)
-;;;;;; "codepage" "international/codepage.el" (17842 54888))
+;;;;;; "codepage" "international/codepage.el" (18088 55107))
;;; Generated autoloads from international/codepage.el
-(autoload (quote cp-make-coding-systems-for-codepage) "codepage" "\
+(autoload 'cp-make-coding-systems-for-codepage "codepage" "\
Create a coding system to convert IBM CODEPAGE into charset ISO-NAME
whose first character is at offset OFFSET from the beginning of 8-bit
ASCII table.
@@ -4423,25 +4480,25 @@ decoder and encoder created by this function.
\(fn CODEPAGE ISO-NAME OFFSET)" nil nil)
-(autoload (quote cp-charset-for-codepage) "codepage" "\
+(autoload 'cp-charset-for-codepage "codepage" "\
Return the charset for which there is a translation table to DOS CODEPAGE.
CODEPAGE must be the name of a DOS codepage, a string.
\(fn CODEPAGE)" nil nil)
-(autoload (quote cp-language-for-codepage) "codepage" "\
+(autoload 'cp-language-for-codepage "codepage" "\
Return the name of the MULE language environment for CODEPAGE.
CODEPAGE must be the name of a DOS codepage, a string.
\(fn CODEPAGE)" nil nil)
-(autoload (quote cp-offset-for-codepage) "codepage" "\
+(autoload 'cp-offset-for-codepage "codepage" "\
Return the offset to be used in setting up coding systems for CODEPAGE.
CODEPAGE must be the name of a DOS codepage, a string.
\(fn CODEPAGE)" nil nil)
-(autoload (quote cp-supported-codepages) "codepage" "\
+(autoload 'cp-supported-codepages "codepage" "\
Return an alist of supported codepages.
Each association in the alist has the form (NNN . CHARSET), where NNN is the
@@ -4453,7 +4510,7 @@ is a vector, and has a charset property.
\(fn)" nil nil)
-(autoload (quote codepage-setup) "codepage" "\
+(autoload 'codepage-setup "codepage" "\
Create a coding system cpCODEPAGE to support the IBM codepage CODEPAGE.
These coding systems are meant for encoding and decoding 8-bit non-ASCII
@@ -4467,10 +4524,10 @@ read/written by MS-DOS software, or for display on the MS-DOS terminal.
;;;### (autoloads (comint-redirect-results-list-from-process comint-redirect-results-list
;;;;;; comint-redirect-send-command-to-process comint-redirect-send-command
;;;;;; comint-run make-comint make-comint-in-buffer) "comint" "comint.el"
-;;;;;; (17937 3189))
+;;;;;; (18208 48750))
;;; Generated autoloads from comint.el
-(defvar comint-output-filter-functions (quote (comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt)) "\
+(defvar comint-output-filter-functions '(comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "\
Functions to call after output is inserted into the buffer.
One possible function is `comint-postoutput-scroll-to-bottom'.
These functions get one argument, a string containing the text as originally
@@ -4483,35 +4540,35 @@ See also `comint-preoutput-filter-functions'.
You can use `add-hook' to add functions to this list
either globally or locally.")
-(define-obsolete-variable-alias (quote comint-use-prompt-regexp-instead-of-fields) (quote comint-use-prompt-regexp) "22.1")
+(define-obsolete-variable-alias 'comint-use-prompt-regexp-instead-of-fields 'comint-use-prompt-regexp "22.1")
-(autoload (quote make-comint-in-buffer) "comint" "\
+(autoload 'make-comint-in-buffer "comint" "\
Make a Comint process NAME in BUFFER, running PROGRAM.
If BUFFER is nil, it defaults to NAME surrounded by `*'s.
PROGRAM should be either a string denoting an executable program to create
-via `start-process', or a cons pair of the form (HOST . SERVICE) denoting a TCP
-connection to be opened via `open-network-stream'. If there is already a
-running process in that buffer, it is not restarted. Optional fourth arg
+via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting
+a TCP connection to be opened via `open-network-stream'. If there is already
+a running process in that buffer, it is not restarted. Optional fourth arg
STARTFILE is the name of a file to send the contents of to the process.
If PROGRAM is a string, any more args are arguments to PROGRAM.
\(fn NAME BUFFER PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil)
-(autoload (quote make-comint) "comint" "\
+(autoload 'make-comint "comint" "\
Make a Comint process NAME in a buffer, running PROGRAM.
The name of the buffer is made by surrounding NAME with `*'s.
PROGRAM should be either a string denoting an executable program to create
-via `start-process', or a cons pair of the form (HOST . SERVICE) denoting a TCP
-connection to be opened via `open-network-stream'. If there is already a
-running process in that buffer, it is not restarted. Optional third arg
+via `start-file-process', or a cons pair of the form (HOST . SERVICE) denoting
+a TCP connection to be opened via `open-network-stream'. If there is already
+a running process in that buffer, it is not restarted. Optional third arg
STARTFILE is the name of a file to send the contents of the process to.
If PROGRAM is a string, any more args are arguments to PROGRAM.
\(fn NAME PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil)
-(autoload (quote comint-run) "comint" "\
+(autoload 'comint-run "comint" "\
Run PROGRAM in a Comint buffer and switch to it.
The buffer name is made by surrounding the file name of PROGRAM with `*'s.
The file name is used to make a symbol name, such as `comint-sh-hook', and any
@@ -4525,7 +4582,7 @@ Prefix prepended to absolute file names taken from process input.
This is used by Comint's and shell's completion functions, and by shell's
directory tracking functions.")
-(autoload (quote comint-redirect-send-command) "comint" "\
+(autoload 'comint-redirect-send-command "comint" "\
Send COMMAND to process in current buffer, with output to OUTPUT-BUFFER.
With prefix arg ECHO, echo output in process buffer.
@@ -4533,7 +4590,7 @@ If NO-DISPLAY is non-nil, do not show the output buffer.
\(fn COMMAND OUTPUT-BUFFER ECHO &optional NO-DISPLAY)" t nil)
-(autoload (quote comint-redirect-send-command-to-process) "comint" "\
+(autoload 'comint-redirect-send-command-to-process "comint" "\
Send COMMAND to PROCESS, with output to OUTPUT-BUFFER.
With prefix arg, echo output in process buffer.
@@ -4541,14 +4598,14 @@ If NO-DISPLAY is non-nil, do not show the output buffer.
\(fn COMMAND OUTPUT-BUFFER PROCESS ECHO &optional NO-DISPLAY)" t nil)
-(autoload (quote comint-redirect-results-list) "comint" "\
+(autoload 'comint-redirect-results-list "comint" "\
Send COMMAND to current process.
Return a list of expressions in the output which match REGEXP.
REGEXP-GROUP is the regular expression group in REGEXP to use.
\(fn COMMAND REGEXP REGEXP-GROUP)" nil nil)
-(autoload (quote comint-redirect-results-list-from-process) "comint" "\
+(autoload 'comint-redirect-results-list-from-process "comint" "\
Send COMMAND to PROCESS.
Return a list of expressions in the output which match REGEXP.
REGEXP-GROUP is the regular expression group in REGEXP to use.
@@ -4557,11 +4614,11 @@ REGEXP-GROUP is the regular expression group in REGEXP to use.
;;;***
-;;;### (autoloads (compare-windows) "compare-w" "compare-w.el" (17926
-;;;;;; 45410))
+;;;### (autoloads (compare-windows) "compare-w" "compare-w.el" (18088
+;;;;;; 55080))
;;; Generated autoloads from compare-w.el
-(autoload (quote compare-windows) "compare-w" "\
+(autoload 'compare-windows "compare-w" "\
Compare text in current window with text in next window.
Compares the text starting at point in each window,
moving over text in each one as far as they match.
@@ -4595,18 +4652,18 @@ on third call it again advances points to the next difference and so on.
;;;;;; compilation-shell-minor-mode compilation-mode compilation-start
;;;;;; compile compilation-disable-input compile-command compilation-search-path
;;;;;; compilation-ask-about-save compilation-window-height compilation-mode-hook)
-;;;;;; "compile" "progmodes/compile.el" (18006 55797))
+;;;;;; "compile" "progmodes/compile.el" (18202 4003))
;;; Generated autoloads from progmodes/compile.el
(defvar compilation-mode-hook nil "\
-*List of hook functions run by `compilation-mode' (see `run-mode-hooks').")
+List of hook functions run by `compilation-mode' (see `run-mode-hooks').")
-(custom-autoload (quote compilation-mode-hook) "compile" t)
+(custom-autoload 'compilation-mode-hook "compile" t)
(defvar compilation-window-height nil "\
-*Number of lines in a compilation window. If nil, use Emacs default.")
+Number of lines in a compilation window. If nil, use Emacs default.")
-(custom-autoload (quote compilation-window-height) "compile" t)
+(custom-autoload 'compilation-window-height "compile" t)
(defvar compilation-process-setup-function nil "\
*Function to call to customize the compilation process.
@@ -4620,7 +4677,7 @@ bound to the compilation buffer and window, respectively.")
Function to compute the name of a compilation buffer.
The function receives one argument, the name of the major mode of the
compilation buffer. It should return a string.
-nil means compute the name with `(concat \"*\" (downcase major-mode) \"*\")'.")
+If nil, compute the name with `(concat \"*\" (downcase major-mode) \"*\")'.")
(defvar compilation-finish-function nil "\
Function to call when a compilation process finishes.
@@ -4634,20 +4691,20 @@ and a string describing how the process finished.")
(put 'compilation-directory 'safe-local-variable 'stringp)
(defvar compilation-ask-about-save t "\
-*Non-nil means \\[compile] asks which buffers to save before compiling.
+Non-nil means \\[compile] asks which buffers to save before compiling.
Otherwise, it saves all modified buffers without asking.")
-(custom-autoload (quote compilation-ask-about-save) "compile" t)
+(custom-autoload 'compilation-ask-about-save "compile" t)
-(defvar compilation-search-path (quote (nil)) "\
-*List of directories to search for source files named in error messages.
+(defvar compilation-search-path '(nil) "\
+List of directories to search for source files named in error messages.
Elements should be directory names, not file names of directories.
-nil as an element means to try the default directory.")
+The value nil as an element means to try the default directory.")
-(custom-autoload (quote compilation-search-path) "compile" t)
+(custom-autoload 'compilation-search-path "compile" t)
(defvar compile-command "make -k " "\
-*Last shell command used to do a compilation; default for next compilation.
+Last shell command used to do a compilation; default for next compilation.
Sometimes it is useful for files to supply local values for this variable.
You might also use mode hooks to specify it in certain modes, like this:
@@ -4660,17 +4717,17 @@ You might also use mode hooks to specify it in certain modes, like this:
(concat \"make -k \"
(file-name-sans-extension buffer-file-name))))))")
-(custom-autoload (quote compile-command) "compile" t)
+(custom-autoload 'compile-command "compile" t)
(put 'compile-command 'safe-local-variable 'stringp)
(defvar compilation-disable-input nil "\
-*If non-nil, send end-of-file as compilation process input.
+If non-nil, send end-of-file as compilation process input.
This only affects platforms that support asynchronous processes (see
`start-process'); synchronous compilation processes never accept input.")
-(custom-autoload (quote compilation-disable-input) "compile" t)
+(custom-autoload 'compilation-disable-input "compile" t)
-(autoload (quote compile) "compile" "\
+(autoload 'compile "compile" "\
Compile the program including the current buffer. Default: run `make'.
Runs COMMAND, a shell command, in a separate process asynchronously
with output going to the buffer `*compilation*'.
@@ -4686,11 +4743,13 @@ non-nil; otherwise uses `compile-command'. With prefix arg, always prompts.
Additionally, with universal prefix arg, compilation buffer will be in
comint mode, i.e. interactive.
-To run more than one compilation at once, start one and rename
+To run more than one compilation at once, start one then rename
the `*compilation*' buffer to some other name with
-\\[rename-buffer]. Then start the next one. On most systems,
-termination of the main compilation process kills its
-subprocesses.
+\\[rename-buffer]. Then _switch buffers_ and start the new compilation.
+It will create a new `*compilation*' buffer.
+
+On most systems, termination of the main compilation process
+kills its subprocesses.
The name used for the buffer is actually whatever is returned by
the function in `compilation-buffer-name-function', so you can set that
@@ -4698,15 +4757,18 @@ to a function that generates a unique name.
\(fn COMMAND &optional COMINT)" t nil)
-(autoload (quote compilation-start) "compile" "\
+(autoload 'compilation-start "compile" "\
Run compilation command COMMAND (low level interface).
If COMMAND starts with a cd command, that becomes the `default-directory'.
The rest of the arguments are optional; for them, nil means use the default.
MODE is the major mode to set in the compilation buffer. Mode
may also be t meaning use `compilation-shell-minor-mode' under `comint-mode'.
+
If NAME-FUNCTION is non-nil, call it with one argument (the mode name)
-to determine the buffer name.
+to determine the buffer name. Otherwise, the default is to
+reuses the current buffer if it has the proper major mode,
+else use or create a buffer with name based on the major mode.
If HIGHLIGHT-REGEXP is non-nil, `next-error' will temporarily highlight
the matching section of the visited source line; the default is to use the
@@ -4716,7 +4778,7 @@ Returns the compilation buffer created.
\(fn COMMAND &optional MODE NAME-FUNCTION HIGHLIGHT-REGEXP)" nil nil)
-(autoload (quote compilation-mode) "compile" "\
+(autoload 'compilation-mode "compile" "\
Major mode for compilation log buffers.
\\<compilation-mode-map>To visit the source for a line-numbered error,
move point to the error message line and type \\[compile-goto-error].
@@ -4728,7 +4790,7 @@ Runs `compilation-mode-hook' with `run-mode-hooks' (which see).
\(fn &optional NAME-OF-MODE)" t nil)
-(autoload (quote compilation-shell-minor-mode) "compile" "\
+(autoload 'compilation-shell-minor-mode "compile" "\
Toggle compilation shell minor mode.
With arg, turn compilation mode on if and only if arg is positive.
In this minor mode, all the error-parsing commands of the
@@ -4738,7 +4800,7 @@ Turning the mode on runs the normal hook `compilation-shell-minor-mode-hook'.
\(fn &optional ARG)" t nil)
-(autoload (quote compilation-minor-mode) "compile" "\
+(autoload 'compilation-minor-mode "compile" "\
Toggle compilation minor mode.
With arg, turn compilation mode on if and only if arg is positive.
In this minor mode, all the error-parsing commands of the
@@ -4747,18 +4809,18 @@ Turning the mode on runs the normal hook `compilation-minor-mode-hook'.
\(fn &optional ARG)" t nil)
-(autoload (quote compilation-next-error-function) "compile" "\
+(autoload 'compilation-next-error-function "compile" "\
Advance to the next error message and visit the file where the error was.
This is the value of `next-error-function' in Compilation buffers.
\(fn N &optional RESET)" t nil)
-(add-to-list (quote auto-mode-alist) (quote ("\\.gcov\\'" . compilation-mode)))
+(add-to-list 'auto-mode-alist '("\\.gcov\\'" . compilation-mode))
;;;***
;;;### (autoloads (partial-completion-mode) "complete" "complete.el"
-;;;;;; (17954 15344))
+;;;;;; (18204 59927))
;;; Generated autoloads from complete.el
(defvar partial-completion-mode nil "\
@@ -4768,9 +4830,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `partial-completion-mode'.")
-(custom-autoload (quote partial-completion-mode) "complete" nil)
+(custom-autoload 'partial-completion-mode "complete" nil)
-(autoload (quote partial-completion-mode) "complete" "\
+(autoload 'partial-completion-mode "complete" "\
Toggle Partial Completion mode.
With prefix ARG, turn Partial Completion mode on if ARG is positive.
@@ -4800,7 +4862,7 @@ second TAB brings up the `*Completions*' buffer.
;;;***
;;;### (autoloads (dynamic-completion-mode) "completion" "completion.el"
-;;;;;; (17842 58280))
+;;;;;; (18169 11930))
;;; Generated autoloads from completion.el
(defvar dynamic-completion-mode nil "\
@@ -4810,9 +4872,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `dynamic-completion-mode'.")
-(custom-autoload (quote dynamic-completion-mode) "completion" nil)
+(custom-autoload 'dynamic-completion-mode "completion" nil)
-(autoload (quote dynamic-completion-mode) "completion" "\
+(autoload 'dynamic-completion-mode "completion" "\
Enable dynamic word-completion.
\(fn &optional ARG)" t nil)
@@ -4822,10 +4884,10 @@ Enable dynamic word-completion.
;;;### (autoloads (decompose-composite-char compose-last-chars compose-chars-after
;;;;;; find-composition compose-chars decompose-string compose-string
;;;;;; decompose-region compose-region encode-composition-rule)
-;;;;;; "composite" "composite.el" (17842 58280))
+;;;;;; "composite" "composite.el" (18088 55081))
;;; Generated autoloads from composite.el
-(defconst reference-point-alist (quote ((tl . 0) (tc . 1) (tr . 2) (Bl . 3) (Bc . 4) (Br . 5) (bl . 6) (bc . 7) (br . 8) (cl . 9) (cc . 10) (cr . 11) (top-left . 0) (top-center . 1) (top-right . 2) (base-left . 3) (base-center . 4) (base-right . 5) (bottom-left . 6) (bottom-center . 7) (bottom-right . 8) (center-left . 9) (center-center . 10) (center-right . 11) (ml . 3) (mc . 10) (mr . 5) (mid-left . 3) (mid-center . 10) (mid-right . 5))) "\
+(defconst reference-point-alist '((tl . 0) (tc . 1) (tr . 2) (Bl . 3) (Bc . 4) (Br . 5) (bl . 6) (bc . 7) (br . 8) (cl . 9) (cc . 10) (cr . 11) (top-left . 0) (top-center . 1) (top-right . 2) (base-left . 3) (base-center . 4) (base-right . 5) (bottom-left . 6) (bottom-center . 7) (bottom-right . 8) (center-left . 9) (center-center . 10) (center-right . 11) (ml . 3) (mc . 10) (mr . 5) (mid-left . 3) (mid-center . 10) (mid-right . 5)) "\
Alist of symbols vs integer codes of glyph reference points.
A glyph reference point symbol is to be used to specify a composition
rule in COMPONENTS argument to such functions as `compose-region' and
@@ -4864,14 +4926,14 @@ follows (the point `*' corresponds to both reference points):
+----+-----+ <--- new descent
")
-(autoload (quote encode-composition-rule) "composite" "\
+(autoload 'encode-composition-rule "composite" "\
Encode composition rule RULE into an integer value.
RULE is a cons of global and new reference point symbols
\(see `reference-point-alist').
\(fn RULE)" nil nil)
-(autoload (quote compose-region) "composite" "\
+(autoload 'compose-region "composite" "\
Compose characters in the current region.
Characters are composed relatively, i.e. composed by overstricking or
@@ -4906,7 +4968,7 @@ text in the composition.
\(fn START END &optional COMPONENTS MODIFICATION-FUNC)" t nil)
-(autoload (quote decompose-region) "composite" "\
+(autoload 'decompose-region "composite" "\
Decompose text in the current region.
When called from a program, expects two arguments,
@@ -4914,7 +4976,7 @@ positions (integers or markers) specifying the region.
\(fn START END)" t nil)
-(autoload (quote compose-string) "composite" "\
+(autoload 'compose-string "composite" "\
Compose characters in string STRING.
The return value is STRING where `composition' property is put on all
@@ -4934,12 +4996,12 @@ text in the composition.
\(fn STRING &optional START END COMPONENTS MODIFICATION-FUNC)" nil nil)
-(autoload (quote decompose-string) "composite" "\
+(autoload 'decompose-string "composite" "\
Return STRING where `composition' property is removed.
\(fn STRING)" nil nil)
-(autoload (quote compose-chars) "composite" "\
+(autoload 'compose-chars "composite" "\
Return a string from arguments in which all characters are composed.
For relative composition, arguments are characters.
For rule-based composition, Mth (where M is odd) arguments are
@@ -4950,7 +5012,7 @@ A composition rule is a cons of glyph reference points of the form
\(fn &rest ARGS)" nil nil)
-(autoload (quote find-composition) "composite" "\
+(autoload 'find-composition "composite" "\
Return information about a composition at or nearest to buffer position POS.
If the character at POS has `composition' property, the value is a list
@@ -4985,7 +5047,7 @@ WIDTH is a number of columns the composition occupies on the screen.
\(fn POS &optional LIMIT STRING DETAIL-P)" nil nil)
-(autoload (quote compose-chars-after) "composite" "\
+(autoload 'compose-chars-after "composite" "\
Compose characters in current buffer after position POS.
It looks up the char-table `composition-function-table' (which see) by
@@ -5011,7 +5073,7 @@ This function is the default value of `compose-chars-after-function'.
\(fn POS &optional LIMIT OBJECT)" nil nil)
-(autoload (quote compose-last-chars) "composite" "\
+(autoload 'compose-last-chars "composite" "\
Compose last characters.
The argument is a parameterized event of the form
(compose-last-chars N COMPONENTS),
@@ -5027,7 +5089,7 @@ after a sequence of character events.
\(fn ARGS)" t nil)
(global-set-key [compose-last-chars] 'compose-last-chars)
-(autoload (quote decompose-composite-char) "composite" "\
+(autoload 'decompose-composite-char "composite" "\
Convert CHAR to string.
If optional 2nd arg TYPE is non-nil, it is `string', `list', or
@@ -5037,17 +5099,17 @@ Optional 3rd arg WITH-COMPOSITION-RULE is ignored.
\(fn CHAR &optional TYPE WITH-COMPOSITION-RULE)" nil nil)
-(make-obsolete (quote decompose-composite-char) (quote char-to-string) "21.1")
+(make-obsolete 'decompose-composite-char 'char-to-string "21.1")
;;;***
;;;### (autoloads (conf-xdefaults-mode conf-ppd-mode conf-colon-mode
;;;;;; conf-space-keywords conf-space-mode conf-javaprop-mode conf-windows-mode
;;;;;; conf-unix-mode conf-mode) "conf-mode" "textmodes/conf-mode.el"
-;;;;;; (17842 58277))
+;;;;;; (18208 48754))
;;; Generated autoloads from textmodes/conf-mode.el
-(autoload (quote conf-mode) "conf-mode" "\
+(autoload 'conf-mode "conf-mode" "\
Mode for Unix and Windows Conf files and Java properties.
Most conf files know only three kinds of constructs: parameter
assignments optionally grouped into sections and comments. Yet
@@ -5080,7 +5142,7 @@ See also `conf-space-mode', `conf-colon-mode', `conf-javaprop-mode',
\(fn)" t nil)
-(autoload (quote conf-unix-mode) "conf-mode" "\
+(autoload 'conf-unix-mode "conf-mode" "\
Conf Mode starter for Unix style Conf files.
Comments start with `#'.
For details see `conf-mode'. Example:
@@ -5095,7 +5157,7 @@ For details see `conf-mode'. Example:
\(fn)" t nil)
-(autoload (quote conf-windows-mode) "conf-mode" "\
+(autoload 'conf-windows-mode "conf-mode" "\
Conf Mode starter for Windows style Conf files.
Comments start with `;'.
For details see `conf-mode'. Example:
@@ -5111,7 +5173,7 @@ PersistMoniker=file://Folder.htt
\(fn)" t nil)
-(autoload (quote conf-javaprop-mode) "conf-mode" "\
+(autoload 'conf-javaprop-mode "conf-mode" "\
Conf Mode starter for Java properties files.
Comments start with `#' but are also recognized with `//' or
between `/*' and `*/'.
@@ -5130,7 +5192,7 @@ x.2.y.1.z.2.zz =
\(fn)" t nil)
-(autoload (quote conf-space-mode) "conf-mode" "\
+(autoload 'conf-space-mode "conf-mode" "\
Conf Mode starter for space separated conf files.
\"Assignments\" are with ` '. Keywords before the parameters are
recognized according to the variable `conf-space-keywords-alist'.
@@ -5155,13 +5217,13 @@ add /dev/mixer desktop
\(fn)" t nil)
-(autoload (quote conf-space-keywords) "conf-mode" "\
+(autoload 'conf-space-keywords "conf-mode" "\
Enter Conf Space mode using regexp KEYWORDS to match the keywords.
See `conf-space-mode'.
\(fn KEYWORDS)" t nil)
-(autoload (quote conf-colon-mode) "conf-mode" "\
+(autoload 'conf-colon-mode "conf-mode" "\
Conf Mode starter for Colon files.
\"Assignments\" are with `:'.
For details see `conf-mode'. Example:
@@ -5173,7 +5235,7 @@ For details see `conf-mode'. Example:
\(fn)" t nil)
-(autoload (quote conf-ppd-mode) "conf-mode" "\
+(autoload 'conf-ppd-mode "conf-mode" "\
Conf Mode starter for Adobe/CUPS PPD files.
Comments start with `*%' and \"assignments\" are with `:'.
For details see `conf-mode'. Example:
@@ -5185,7 +5247,7 @@ For details see `conf-mode'. Example:
\(fn)" t nil)
-(autoload (quote conf-xdefaults-mode) "conf-mode" "\
+(autoload 'conf-xdefaults-mode "conf-mode" "\
Conf Mode starter for Xdefaults files.
Comments start with `!' and \"assignments\" are with `:'.
For details see `conf-mode'. Example:
@@ -5200,31 +5262,31 @@ For details see `conf-mode'. Example:
;;;***
;;;### (autoloads (shuffle-vector cookie-snarf cookie-insert cookie)
-;;;;;; "cookie1" "play/cookie1.el" (17842 55395))
+;;;;;; "cookie1" "play/cookie1.el" (18088 55113))
;;; Generated autoloads from play/cookie1.el
-(autoload (quote cookie) "cookie1" "\
+(autoload 'cookie "cookie1" "\
Return a random phrase from PHRASE-FILE.
When the phrase file is read in, display STARTMSG at the beginning
of load, ENDMSG at the end.
\(fn PHRASE-FILE STARTMSG ENDMSG)" nil nil)
-(autoload (quote cookie-insert) "cookie1" "\
+(autoload 'cookie-insert "cookie1" "\
Insert random phrases from PHRASE-FILE; COUNT of them.
When the phrase file is read in, display STARTMSG at the beginning
of load, ENDMSG at the end.
\(fn PHRASE-FILE &optional COUNT STARTMSG ENDMSG)" nil nil)
-(autoload (quote cookie-snarf) "cookie1" "\
+(autoload 'cookie-snarf "cookie1" "\
Reads in the PHRASE-FILE, returns it as a vector of strings.
Emit STARTMSG and ENDMSG before and after. Caches the result; second
and subsequent calls on the same file won't go to disk.
\(fn PHRASE-FILE STARTMSG ENDMSG)" nil nil)
-(autoload (quote shuffle-vector) "cookie1" "\
+(autoload 'shuffle-vector "cookie1" "\
Randomly permute the elements of VECTOR (all permutations equally likely).
\(fn VECTOR)" nil nil)
@@ -5232,10 +5294,10 @@ Randomly permute the elements of VECTOR (all permutations equally likely).
;;;***
;;;### (autoloads (copyright copyright-fix-years copyright-update)
-;;;;;; "copyright" "emacs-lisp/copyright.el" (17842 54152))
+;;;;;; "copyright" "emacs-lisp/copyright.el" (18183 58476))
;;; Generated autoloads from emacs-lisp/copyright.el
-(autoload (quote copyright-update) "copyright" "\
+(autoload 'copyright-update "copyright" "\
Update copyright notice at beginning of buffer to indicate the current year.
With prefix ARG, replace the years in the notice rather than adding
the current year after them. If necessary, and
@@ -5246,13 +5308,13 @@ interactively.
\(fn &optional ARG INTERACTIVEP)" t nil)
-(autoload (quote copyright-fix-years) "copyright" "\
+(autoload 'copyright-fix-years "copyright" "\
Convert 2 digit years to 4 digit years.
Uses heuristic: year >= 50 means 19xx, < 50 means 20xx.
\(fn)" t nil)
-(autoload (quote copyright) "copyright" "\
+(autoload 'copyright "copyright" "\
Insert a copyright by $ORGANIZATION notice at cursor.
\(fn &optional STR ARG)" t nil)
@@ -5260,10 +5322,11 @@ Insert a copyright by $ORGANIZATION notice at cursor.
;;;***
;;;### (autoloads (cperl-perldoc-at-point cperl-perldoc cperl-mode)
-;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (17955 36604))
+;;;;;; "cperl-mode" "progmodes/cperl-mode.el" (18214 4479))
;;; Generated autoloads from progmodes/cperl-mode.el
+(put 'cperl-indent-level 'safe-local-variable 'integerp)
-(autoload (quote cperl-mode) "cperl-mode" "\
+(autoload 'cperl-mode "cperl-mode" "\
Major mode for editing Perl code.
Expression and list commands understand all C brackets.
Tab indents for Perl code.
@@ -5438,12 +5501,12 @@ or as help on variables `cperl-tips', `cperl-problems',
\(fn)" t nil)
-(autoload (quote cperl-perldoc) "cperl-mode" "\
+(autoload 'cperl-perldoc "cperl-mode" "\
Run `perldoc' on WORD.
\(fn WORD)" t nil)
-(autoload (quote cperl-perldoc-at-point) "cperl-mode" "\
+(autoload 'cperl-perldoc-at-point "cperl-mode" "\
Run a `perldoc' on the word around point.
\(fn)" t nil)
@@ -5451,10 +5514,10 @@ Run a `perldoc' on the word around point.
;;;***
;;;### (autoloads (cpp-parse-edit cpp-highlight-buffer) "cpp" "progmodes/cpp.el"
-;;;;;; (17842 56333))
+;;;;;; (18120 34752))
;;; Generated autoloads from progmodes/cpp.el
-(autoload (quote cpp-highlight-buffer) "cpp" "\
+(autoload 'cpp-highlight-buffer "cpp" "\
Highlight C code according to preprocessor conditionals.
This command pops up a buffer which you should edit to specify
what kind of highlighting to use, and the criteria for highlighting.
@@ -5462,7 +5525,7 @@ A prefix arg suppresses display of that buffer.
\(fn ARG)" t nil)
-(autoload (quote cpp-parse-edit) "cpp" "\
+(autoload 'cpp-parse-edit "cpp" "\
Edit display information for cpp conditionals.
\(fn)" t nil)
@@ -5470,7 +5533,7 @@ Edit display information for cpp conditionals.
;;;***
;;;### (autoloads (crisp-mode crisp-mode) "crisp" "emulation/crisp.el"
-;;;;;; (17842 54264))
+;;;;;; (18088 55097))
;;; Generated autoloads from emulation/crisp.el
(defvar crisp-mode nil "\
@@ -5481,23 +5544,23 @@ indicates CRiSP mode is enabled.
Setting this variable directly does not take effect;
use either M-x customize or the function `crisp-mode'.")
-(custom-autoload (quote crisp-mode) "crisp" nil)
+(custom-autoload 'crisp-mode "crisp" nil)
-(autoload (quote crisp-mode) "crisp" "\
+(autoload 'crisp-mode "crisp" "\
Toggle CRiSP/Brief emulation minor mode.
With ARG, turn CRiSP mode on if ARG is positive, off otherwise.
\(fn &optional ARG)" t nil)
-(defalias (quote brief-mode) (quote crisp-mode))
+(defalias 'brief-mode 'crisp-mode)
;;;***
;;;### (autoloads (completing-read-multiple) "crm" "emacs-lisp/crm.el"
-;;;;;; (17842 54152))
+;;;;;; (18088 55095))
;;; Generated autoloads from emacs-lisp/crm.el
-(autoload (quote completing-read-multiple) "crm" "\
+(autoload 'completing-read-multiple "crm" "\
Read multiple strings in the minibuffer, with completion.
By using this functionality, a user may specify multiple strings at a
single prompt, optionally using completion.
@@ -5529,8 +5592,20 @@ INHERIT-INPUT-METHOD.
;;;***
+;;;### (autoloads (css-mode) "css-mode" "textmodes/css-mode.el" (18211
+;;;;;; 32385))
+;;; Generated autoloads from textmodes/css-mode.el
+ (add-to-list 'auto-mode-alist '("\\.css\\'" . css-mode))
+
+(autoload 'css-mode "css-mode" "\
+Major mode to edit Cascading Style Sheets.
+
+\(fn)" t nil)
+
+;;;***
+
;;;### (autoloads (cua-selection-mode cua-mode) "cua-base" "emulation/cua-base.el"
-;;;;;; (17888 45995))
+;;;;;; (18186 14736))
;;; Generated autoloads from emulation/cua-base.el
(defvar cua-mode nil "\
@@ -5540,9 +5615,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `cua-mode'.")
-(custom-autoload (quote cua-mode) "cua-base" nil)
+(custom-autoload 'cua-mode "cua-base" nil)
-(autoload (quote cua-mode) "cua-base" "\
+(autoload 'cua-mode "cua-base" "\
Toggle CUA key-binding mode.
When enabled, using shifted movement keys will activate the
region (and highlight the region using `transient-mark-mode'),
@@ -5572,19 +5647,10 @@ shifted movement key, set `cua-highlight-region-shift-only'.
\(fn &optional ARG)" t nil)
-(autoload (quote cua-selection-mode) "cua-base" "\
+(autoload 'cua-selection-mode "cua-base" "\
Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings.
\(fn ARG)" t nil)
- (eval-after-load 'CUA-mode
- '(error (concat "\n\n"
- "CUA-mode is now part of the standard GNU Emacs distribution, so you may\n"
- "now enable CUA via the Options menu or by customizing option `cua-mode'.\n\n"
- "You have loaded an older version of CUA-mode which does\n"
- "not work correctly with this version of GNU Emacs.\n\n"
- (if user-init-file (concat
- "To correct this, remove the loading and customization of the\n"
- "old version from the " user-init-file " file.\n\n")))))
;;;***
@@ -5598,26 +5664,26 @@ Enable CUA selection mode without the C-z/C-x/C-c/C-v bindings.
;;;;;; customize-mode customize customize-save-variable customize-set-variable
;;;;;; customize-set-value custom-menu-sort-alphabetically custom-buffer-sort-alphabetically
;;;;;; custom-browse-sort-alphabetically) "cus-edit" "cus-edit.el"
-;;;;;; (17952 11093))
+;;;;;; (18212 54459))
;;; Generated autoloads from cus-edit.el
(defvar custom-browse-sort-alphabetically nil "\
If non-nil, sort customization group alphabetically in `custom-browse'.")
-(custom-autoload (quote custom-browse-sort-alphabetically) "cus-edit" t)
+(custom-autoload 'custom-browse-sort-alphabetically "cus-edit" t)
(defvar custom-buffer-sort-alphabetically nil "\
If non-nil, sort each customization group alphabetically in Custom buffer.")
-(custom-autoload (quote custom-buffer-sort-alphabetically) "cus-edit" t)
+(custom-autoload 'custom-buffer-sort-alphabetically "cus-edit" t)
(defvar custom-menu-sort-alphabetically nil "\
If non-nil, sort each customization group alphabetically in menus.")
-(custom-autoload (quote custom-menu-sort-alphabetically) "cus-edit" t)
+(custom-autoload 'custom-menu-sort-alphabetically "cus-edit" t)
(add-hook 'same-window-regexps "\\`\\*Customiz.*\\*\\'")
-(autoload (quote customize-set-value) "cus-edit" "\
+(autoload 'customize-set-value "cus-edit" "\
Set VARIABLE to VALUE, and return VALUE. VALUE is a Lisp object.
If VARIABLE has a `variable-interactive' property, that is used as if
@@ -5630,7 +5696,7 @@ If given a prefix (or a COMMENT argument), also prompt for a comment.
\(fn VARIABLE VALUE &optional COMMENT)" t nil)
-(autoload (quote customize-set-variable) "cus-edit" "\
+(autoload 'customize-set-variable "cus-edit" "\
Set the default for VARIABLE to VALUE, and return VALUE.
VALUE is a Lisp object.
@@ -5647,7 +5713,7 @@ If given a prefix (or a COMMENT argument), also prompt for a comment.
\(fn VARIABLE VALUE &optional COMMENT)" t nil)
-(autoload (quote customize-save-variable) "cus-edit" "\
+(autoload 'customize-save-variable "cus-edit" "\
Set the default for VARIABLE to VALUE, and save it for future sessions.
Return VALUE.
@@ -5664,7 +5730,7 @@ If given a prefix (or a COMMENT argument), also prompt for a comment.
\(fn VARIABLE VALUE &optional COMMENT)" t nil)
-(autoload (quote customize) "cus-edit" "\
+(autoload 'customize "cus-edit" "\
Select a customization buffer which you can use to set user options.
User options are structured into \"groups\".
Initially the top-level group `Emacs' and its immediate subgroups
@@ -5672,33 +5738,33 @@ are shown; the contents of those subgroups are initially hidden.
\(fn)" t nil)
-(autoload (quote customize-mode) "cus-edit" "\
+(autoload 'customize-mode "cus-edit" "\
Customize options related to the current major mode.
If a prefix \\[universal-argument] was given (or if the current major mode has no known group),
then prompt for the MODE to customize.
\(fn MODE)" t nil)
-(autoload (quote customize-group) "cus-edit" "\
+(autoload 'customize-group "cus-edit" "\
Customize GROUP, which must be a customization group.
-\(fn GROUP)" t nil)
+\(fn &optional GROUP)" t nil)
-(autoload (quote customize-group-other-window) "cus-edit" "\
-Customize GROUP, which must be a customization group.
+(autoload 'customize-group-other-window "cus-edit" "\
+Customize GROUP, which must be a customization group, in another window.
-\(fn GROUP)" t nil)
+\(fn &optional GROUP)" t nil)
-(defalias (quote customize-variable) (quote customize-option))
+(defalias 'customize-variable 'customize-option)
-(autoload (quote customize-option) "cus-edit" "\
+(autoload 'customize-option "cus-edit" "\
Customize SYMBOL, which must be a user option variable.
\(fn SYMBOL)" t nil)
-(defalias (quote customize-variable-other-window) (quote customize-option-other-window))
+(defalias 'customize-variable-other-window 'customize-option-other-window)
-(autoload (quote customize-option-other-window) "cus-edit" "\
+(autoload 'customize-option-other-window "cus-edit" "\
Customize SYMBOL, which must be a user option variable.
Show the buffer in another window, but don't select it.
@@ -5735,9 +5801,9 @@ PACKAGE value appearing in the :package-version keyword. Since
the user might see the value in a error message, a good choice is
the official name of the package, such as MH-E or Gnus.")
-(defalias (quote customize-changed) (quote customize-changed-options))
+(defalias 'customize-changed 'customize-changed-options)
-(autoload (quote customize-changed-options) "cus-edit" "\
+(autoload 'customize-changed-options "cus-edit" "\
Customize all settings whose meanings have changed in Emacs itself.
This includes new user option variables and faces, and new
customization groups, as well as older options and faces whose meanings
@@ -5746,9 +5812,9 @@ or default values have changed since the previous major Emacs release.
With argument SINCE-VERSION (a string), customize all settings
that were added or redefined since that version.
-\(fn SINCE-VERSION)" t nil)
+\(fn &optional SINCE-VERSION)" t nil)
-(autoload (quote customize-face) "cus-edit" "\
+(autoload 'customize-face "cus-edit" "\
Customize FACE, which should be a face name or nil.
If FACE is nil, customize all faces. If FACE is actually a
face-alias, customize the face it is aliased to.
@@ -5758,7 +5824,7 @@ suggest to customize that face, if it's customizable.
\(fn &optional FACE)" t nil)
-(autoload (quote customize-face-other-window) "cus-edit" "\
+(autoload 'customize-face-other-window "cus-edit" "\
Show customization buffer for face FACE in other window.
If FACE is actually a face-alias, customize the face it is aliased to.
@@ -5767,22 +5833,22 @@ suggest to customize that face, if it's customizable.
\(fn &optional FACE)" t nil)
-(autoload (quote customize-unsaved) "cus-edit" "\
+(autoload 'customize-unsaved "cus-edit" "\
Customize all user options set in this session but not saved.
\(fn)" t nil)
-(autoload (quote customize-rogue) "cus-edit" "\
+(autoload 'customize-rogue "cus-edit" "\
Customize all user variables modified outside customize.
\(fn)" t nil)
-(autoload (quote customize-saved) "cus-edit" "\
+(autoload 'customize-saved "cus-edit" "\
Customize all already saved user options.
\(fn)" t nil)
-(autoload (quote customize-apropos) "cus-edit" "\
+(autoload 'customize-apropos "cus-edit" "\
Customize all loaded options, faces and groups matching REGEXP.
If ALL is `options', include only options.
If ALL is `faces', include only faces.
@@ -5793,24 +5859,24 @@ that are not customizable options, as well as faces and groups
\(fn REGEXP &optional ALL)" t nil)
-(autoload (quote customize-apropos-options) "cus-edit" "\
+(autoload 'customize-apropos-options "cus-edit" "\
Customize all loaded customizable options matching REGEXP.
With prefix arg, include variables that are not customizable options
\(but we recommend using `apropos-variable' instead).
\(fn REGEXP &optional ARG)" t nil)
-(autoload (quote customize-apropos-faces) "cus-edit" "\
+(autoload 'customize-apropos-faces "cus-edit" "\
Customize all loaded faces matching REGEXP.
\(fn REGEXP)" t nil)
-(autoload (quote customize-apropos-groups) "cus-edit" "\
+(autoload 'customize-apropos-groups "cus-edit" "\
Customize all loaded groups matching REGEXP.
\(fn REGEXP)" t nil)
-(autoload (quote custom-buffer-create) "cus-edit" "\
+(autoload 'custom-buffer-create "cus-edit" "\
Create a buffer containing OPTIONS.
Optional NAME is the name of the buffer.
OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where
@@ -5819,7 +5885,7 @@ that option.
\(fn OPTIONS &optional NAME DESCRIPTION)" nil nil)
-(autoload (quote custom-buffer-create-other-window) "cus-edit" "\
+(autoload 'custom-buffer-create-other-window "cus-edit" "\
Create a buffer containing OPTIONS, and display it in another window.
The result includes selecting that window.
Optional NAME is the name of the buffer.
@@ -5829,7 +5895,7 @@ that option.
\(fn OPTIONS &optional NAME DESCRIPTION)" nil nil)
-(autoload (quote customize-browse) "cus-edit" "\
+(autoload 'customize-browse "cus-edit" "\
Create a tree browser for the customize hierarchy.
\(fn &optional GROUP)" t nil)
@@ -5867,25 +5933,25 @@ in your init file, where CUSTOM-FILE is the actual name of the
file. Otherwise, Emacs will not load the file when it starts up,
and hence will not set `custom-file' to that file either.")
-(custom-autoload (quote custom-file) "cus-edit" t)
+(custom-autoload 'custom-file "cus-edit" t)
-(autoload (quote custom-save-all) "cus-edit" "\
+(autoload 'custom-save-all "cus-edit" "\
Save all customizations in `custom-file'.
\(fn)" nil nil)
-(autoload (quote customize-save-customized) "cus-edit" "\
+(autoload 'customize-save-customized "cus-edit" "\
Save all user options which have been set in this session.
\(fn)" t nil)
-(autoload (quote custom-menu-create) "cus-edit" "\
+(autoload 'custom-menu-create "cus-edit" "\
Create menu for customization group SYMBOL.
The menu is in a format applicable to `easy-menu-define'.
\(fn SYMBOL)" nil nil)
-(autoload (quote customize-menu-create) "cus-edit" "\
+(autoload 'customize-menu-create "cus-edit" "\
Return a customize menu for customization group SYMBOL.
If optional NAME is given, use that as the name of the menu.
Otherwise the menu will be named `Customize'.
@@ -5896,15 +5962,15 @@ The format is suitable for use with `easy-menu-define'.
;;;***
;;;### (autoloads (custom-reset-faces custom-theme-reset-faces custom-set-faces
-;;;;;; custom-declare-face) "cus-face" "cus-face.el" (17842 58280))
+;;;;;; custom-declare-face) "cus-face" "cus-face.el" (18157 61328))
;;; Generated autoloads from cus-face.el
-(autoload (quote custom-declare-face) "cus-face" "\
+(autoload 'custom-declare-face "cus-face" "\
Like `defface', but FACE is evaluated as a normal argument.
\(fn FACE SPEC DOC &rest ARGS)" nil nil)
-(defconst custom-face-attributes (quote ((:family (string :tag "Font Family" :help-echo "Font family or fontset alias name.")) (:width (choice :tag "Width" :help-echo "Font width." :value normal (const :tag "compressed" condensed) (const :tag "condensed" condensed) (const :tag "demiexpanded" semi-expanded) (const :tag "expanded" expanded) (const :tag "extracondensed" extra-condensed) (const :tag "extraexpanded" extra-expanded) (const :tag "medium" normal) (const :tag "narrow" condensed) (const :tag "normal" normal) (const :tag "regular" normal) (const :tag "semicondensed" semi-condensed) (const :tag "semiexpanded" semi-expanded) (const :tag "ultracondensed" ultra-condensed) (const :tag "ultraexpanded" ultra-expanded) (const :tag "wide" extra-expanded))) (:height (choice :tag "Height" :help-echo "Face's font height." :value 1.0 (integer :tag "Height in 1/10 pt") (number :tag "Scale" 1.0))) (:weight (choice :tag "Weight" :help-echo "Font weight." :value normal (const :tag "black" ultra-bold) (const :tag "bold" bold) (const :tag "book" semi-light) (const :tag "demibold" semi-bold) (const :tag "extralight" extra-light) (const :tag "extrabold" extra-bold) (const :tag "heavy" extra-bold) (const :tag "light" light) (const :tag "medium" normal) (const :tag "normal" normal) (const :tag "regular" normal) (const :tag "semibold" semi-bold) (const :tag "semilight" semi-light) (const :tag "ultralight" ultra-light) (const :tag "ultrabold" ultra-bold))) (:slant (choice :tag "Slant" :help-echo "Font slant." :value normal (const :tag "italic" italic) (const :tag "oblique" oblique) (const :tag "normal" normal))) (:underline (choice :tag "Underline" :help-echo "Control text underlining." (const :tag "Off" nil) (const :tag "On" t) (color :tag "Colored"))) (:overline (choice :tag "Overline" :help-echo "Control text overlining." (const :tag "Off" nil) (const :tag "On" t) (color :tag "Colored"))) (:strike-through (choice :tag "Strike-through" :help-echo "Control text strike-through." (const :tag "Off" nil) (const :tag "On" t) (color :tag "Colored"))) (:box (choice :tag "Box around text" :help-echo "Control box around text." (const :tag "Off" nil) (list :tag "Box" :value (:line-width 2 :color "grey75" :style released-button) (const :format "" :value :line-width) (integer :tag "Width") (const :format "" :value :color) (choice :tag "Color" (const :tag "*" nil) color) (const :format "" :value :style) (choice :tag "Style" (const :tag "Raised" released-button) (const :tag "Sunken" pressed-button) (const :tag "None" nil)))) (lambda (real-value) (and real-value (let ((lwidth (or (and (consp real-value) (plist-get real-value :line-width)) (and (integerp real-value) real-value) 1)) (color (or (and (consp real-value) (plist-get real-value :color)) (and (stringp real-value) real-value) nil)) (style (and (consp real-value) (plist-get real-value :style)))) (list :line-width lwidth :color color :style style)))) (lambda (cus-value) (and cus-value (let ((lwidth (plist-get cus-value :line-width)) (color (plist-get cus-value :color)) (style (plist-get cus-value :style))) (cond ((and (null color) (null style)) lwidth) ((and (null lwidth) (null style)) color) (t (nconc (and lwidth (\` (:line-width (\, lwidth)))) (and color (\` (:color (\, color)))) (and style (\` (:style (\, style))))))))))) (:inverse-video (choice :tag "Inverse-video" :help-echo "Control whether text should be in inverse-video." (const :tag "Off" nil) (const :tag "On" t))) (:foreground (color :tag "Foreground" :help-echo "Set foreground color (name or #RRGGBB hex spec).")) (:background (color :tag "Background" :help-echo "Set background color (name or #RRGGBB hex spec).")) (:stipple (choice :tag "Stipple" :help-echo "Background bit-mask" (const :tag "None" nil) (file :tag "File" :help-echo "Name of bitmap file." :must-match t))) (:inherit (repeat :tag "Inherit" :help-echo "List of faces to inherit attributes from." (face :Tag "Face" default)) (lambda (real-value) (cond ((or (null real-value) (eq real-value (quote unspecified))) nil) ((symbolp real-value) (list real-value)) (t real-value))) (lambda (cus-value) (if (and (consp cus-value) (null (cdr cus-value))) (car cus-value) cus-value))))) "\
+(defconst custom-face-attributes '((:family (string :tag "Font Family" :help-echo "Font family or fontset alias name.")) (:width (choice :tag "Width" :help-echo "Font width." :value normal (const :tag "compressed" condensed) (const :tag "condensed" condensed) (const :tag "demiexpanded" semi-expanded) (const :tag "expanded" expanded) (const :tag "extracondensed" extra-condensed) (const :tag "extraexpanded" extra-expanded) (const :tag "medium" normal) (const :tag "narrow" condensed) (const :tag "normal" normal) (const :tag "regular" normal) (const :tag "semicondensed" semi-condensed) (const :tag "semiexpanded" semi-expanded) (const :tag "ultracondensed" ultra-condensed) (const :tag "ultraexpanded" ultra-expanded) (const :tag "wide" extra-expanded))) (:height (choice :tag "Height" :help-echo "Face's font height." :value 1.0 (integer :tag "Height in 1/10 pt") (number :tag "Scale" 1.0))) (:weight (choice :tag "Weight" :help-echo "Font weight." :value normal (const :tag "black" ultra-bold) (const :tag "bold" bold) (const :tag "book" semi-light) (const :tag "demibold" semi-bold) (const :tag "extralight" extra-light) (const :tag "extrabold" extra-bold) (const :tag "heavy" extra-bold) (const :tag "light" light) (const :tag "medium" normal) (const :tag "normal" normal) (const :tag "regular" normal) (const :tag "semibold" semi-bold) (const :tag "semilight" semi-light) (const :tag "ultralight" ultra-light) (const :tag "ultrabold" ultra-bold))) (:slant (choice :tag "Slant" :help-echo "Font slant." :value normal (const :tag "italic" italic) (const :tag "oblique" oblique) (const :tag "normal" normal))) (:underline (choice :tag "Underline" :help-echo "Control text underlining." (const :tag "Off" nil) (const :tag "On" t) (color :tag "Colored"))) (:overline (choice :tag "Overline" :help-echo "Control text overlining." (const :tag "Off" nil) (const :tag "On" t) (color :tag "Colored"))) (:strike-through (choice :tag "Strike-through" :help-echo "Control text strike-through." (const :tag "Off" nil) (const :tag "On" t) (color :tag "Colored"))) (:box (choice :tag "Box around text" :help-echo "Control box around text." (const :tag "Off" nil) (list :tag "Box" :value (:line-width 2 :color "grey75" :style released-button) (const :format "" :value :line-width) (integer :tag "Width") (const :format "" :value :color) (choice :tag "Color" (const :tag "*" nil) color) (const :format "" :value :style) (choice :tag "Style" (const :tag "Raised" released-button) (const :tag "Sunken" pressed-button) (const :tag "None" nil)))) (lambda (real-value) (and real-value (let ((lwidth (or (and (consp real-value) (plist-get real-value :line-width)) (and (integerp real-value) real-value) 1)) (color (or (and (consp real-value) (plist-get real-value :color)) (and (stringp real-value) real-value) nil)) (style (and (consp real-value) (plist-get real-value :style)))) (list :line-width lwidth :color color :style style)))) (lambda (cus-value) (and cus-value (let ((lwidth (plist-get cus-value :line-width)) (color (plist-get cus-value :color)) (style (plist-get cus-value :style))) (cond ((and (null color) (null style)) lwidth) ((and (null lwidth) (null style)) color) (t (nconc (and lwidth `(:line-width ,lwidth)) (and color `(:color ,color)) (and style `(:style ,style))))))))) (:inverse-video (choice :tag "Inverse-video" :help-echo "Control whether text should be in inverse-video." (const :tag "Off" nil) (const :tag "On" t))) (:foreground (color :tag "Foreground" :help-echo "Set foreground color (name or #RRGGBB hex spec).")) (:background (color :tag "Background" :help-echo "Set background color (name or #RRGGBB hex spec).")) (:stipple (choice :tag "Stipple" :help-echo "Background bit-mask" (const :tag "None" nil) (file :tag "File" :help-echo "Name of bitmap file." :must-match t))) (:inherit (repeat :tag "Inherit" :help-echo "List of faces to inherit attributes from." (face :Tag "Face" default)) (lambda (real-value) (cond ((or (null real-value) (eq real-value 'unspecified)) nil) ((symbolp real-value) (list real-value)) (t real-value))) (lambda (cus-value) (if (and (consp cus-value) (null (cdr cus-value))) (car cus-value) cus-value)))) "\
Alist of face attributes.
The elements are of the form (KEY TYPE PRE-FILTER POST-FILTER),
@@ -5922,7 +5988,7 @@ The POST-FILTER should also take a single argument, the value after
being customized, and should return a value suitable for setting the
given face attribute.")
-(autoload (quote custom-set-faces) "cus-face" "\
+(autoload 'custom-set-faces "cus-face" "\
Initialize faces according to user preferences.
This associates the settings with the `user' theme.
The arguments should be a list where each entry has the form:
@@ -5941,7 +6007,7 @@ COMMENT is a string comment about FACE.
\(fn &rest ARGS)" nil nil)
-(autoload (quote custom-theme-reset-faces) "cus-face" "\
+(autoload 'custom-theme-reset-faces "cus-face" "\
Reset the specs in THEME of some faces to their specs in other themes.
Each of the arguments ARGS has this form:
@@ -5951,7 +6017,7 @@ This means reset FACE. The argument IGNORED is ignored.
\(fn THEME &rest ARGS)" nil nil)
-(autoload (quote custom-reset-faces) "cus-face" "\
+(autoload 'custom-reset-faces "cus-face" "\
Reset the specs of some faces to their specs in specified themes.
This creates settings in the `user' theme.
@@ -5966,10 +6032,10 @@ This means reset FACE to its value in FROM-THEME.
;;;***
;;;### (autoloads (customize-create-theme) "cus-theme" "cus-theme.el"
-;;;;;; (17842 58280))
+;;;;;; (18088 55081))
;;; Generated autoloads from cus-theme.el
-(autoload (quote customize-create-theme) "cus-theme" "\
+(autoload 'customize-create-theme "cus-theme" "\
Create a custom theme.
\(fn)" t nil)
@@ -5977,10 +6043,10 @@ Create a custom theme.
;;;***
;;;### (autoloads (cvs-status-mode) "cvs-status" "cvs-status.el"
-;;;;;; (17842 58280))
+;;;;;; (18088 55081))
;;; Generated autoloads from cvs-status.el
-(autoload (quote cvs-status-mode) "cvs-status" "\
+(autoload 'cvs-status-mode "cvs-status" "\
Mode used for cvs status output.
\(fn)" t nil)
@@ -5988,10 +6054,10 @@ Mode used for cvs status output.
;;;***
;;;### (autoloads (global-cwarn-mode turn-on-cwarn-mode cwarn-mode)
-;;;;;; "cwarn" "progmodes/cwarn.el" (17860 50532))
+;;;;;; "cwarn" "progmodes/cwarn.el" (18088 55115))
;;; Generated autoloads from progmodes/cwarn.el
-(autoload (quote cwarn-mode) "cwarn" "\
+(autoload 'cwarn-mode "cwarn" "\
Minor mode that highlights suspicious C and C++ constructions.
Note, in addition to enabling this minor mode, the major mode must
@@ -6002,7 +6068,7 @@ With ARG, turn CWarn mode on if and only if arg is positive.
\(fn &optional ARG)" t nil)
-(autoload (quote turn-on-cwarn-mode) "cwarn" "\
+(autoload 'turn-on-cwarn-mode "cwarn" "\
Turn on CWarn mode.
This function is designed to be added to hooks, for example:
@@ -6017,9 +6083,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-cwarn-mode'.")
-(custom-autoload (quote global-cwarn-mode) "cwarn" nil)
+(custom-autoload 'global-cwarn-mode "cwarn" nil)
-(autoload (quote global-cwarn-mode) "cwarn" "\
+(autoload 'global-cwarn-mode "cwarn" "\
Toggle Cwarn mode in every possible buffer.
With prefix ARG, turn Global-Cwarn mode on if and only if ARG is positive.
Cwarn mode is enabled in all buffers where `turn-on-cwarn-mode-if-enabled' would do it.
@@ -6031,20 +6097,20 @@ See `cwarn-mode' for more information on Cwarn mode.
;;;### (autoloads (standard-display-cyrillic-translit cyrillic-encode-alternativnyj-char
;;;;;; cyrillic-encode-koi8-r-char) "cyril-util" "language/cyril-util.el"
-;;;;;; (17842 58278))
+;;;;;; (18088 55108))
;;; Generated autoloads from language/cyril-util.el
-(autoload (quote cyrillic-encode-koi8-r-char) "cyril-util" "\
+(autoload 'cyrillic-encode-koi8-r-char "cyril-util" "\
Return KOI8-R external character code of CHAR if appropriate.
\(fn CHAR)" nil nil)
-(autoload (quote cyrillic-encode-alternativnyj-char) "cyril-util" "\
+(autoload 'cyrillic-encode-alternativnyj-char "cyril-util" "\
Return ALTERNATIVNYJ external character code of CHAR if appropriate.
\(fn CHAR)" nil nil)
-(autoload (quote standard-display-cyrillic-translit) "cyril-util" "\
+(autoload 'standard-display-cyrillic-translit "cyril-util" "\
Display a cyrillic buffer using a transliteration.
For readability, the table is slightly
different from the one used for the input method `cyrillic-translit'.
@@ -6060,12 +6126,12 @@ If the argument is nil, we return the display table to its standard state.
;;;***
;;;### (autoloads (dabbrev-expand dabbrev-completion) "dabbrev" "dabbrev.el"
-;;;;;; (18006 55794))
+;;;;;; (18126 18419))
;;; Generated autoloads from dabbrev.el
(define-key esc-map "/" 'dabbrev-expand)
(define-key esc-map [?\C-/] 'dabbrev-completion)
-(autoload (quote dabbrev-completion) "dabbrev" "\
+(autoload 'dabbrev-completion "dabbrev" "\
Completion on current word.
Like \\[dabbrev-expand] but finds all expansions in the current buffer
and presents suggestions for completion.
@@ -6079,7 +6145,7 @@ then it searches *all* buffers.
\(fn &optional ARG)" t nil)
-(autoload (quote dabbrev-expand) "dabbrev" "\
+(autoload 'dabbrev-expand "dabbrev" "\
Expand previous word \"dynamically\".
Expands to the most recent, preceding word for which this is a prefix.
@@ -6104,11 +6170,11 @@ See also `dabbrev-abbrev-char-regexp' and \\[dabbrev-completion].
;;;***
-;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (17949
-;;;;;; 41468))
+;;;### (autoloads (dcl-mode) "dcl-mode" "progmodes/dcl-mode.el" (18203
+;;;;;; 37789))
;;; Generated autoloads from progmodes/dcl-mode.el
-(autoload (quote dcl-mode) "dcl-mode" "\
+(autoload 'dcl-mode "dcl-mode" "\
Major mode for editing DCL-files.
This mode indents command lines in blocks. (A block is commands between
@@ -6232,12 +6298,12 @@ There is some minimal font-lock support (see vars
;;;***
;;;### (autoloads (cancel-debug-on-entry debug-on-entry debug) "debug"
-;;;;;; "emacs-lisp/debug.el" (17842 54152))
+;;;;;; "emacs-lisp/debug.el" (18197 21672))
;;; Generated autoloads from emacs-lisp/debug.el
-(setq debugger (quote debug))
+(setq debugger 'debug)
-(autoload (quote debug) "debug" "\
+(autoload 'debug "debug" "\
Enter debugger. To return, type \\<debugger-mode-map>`\\[debugger-continue]'.
Arguments are mainly for use when this is called from the internals
of the evaluator.
@@ -6248,7 +6314,7 @@ first will be printed into the backtrace buffer.
\(fn &rest DEBUGGER-ARGS)" t nil)
-(autoload (quote debug-on-entry) "debug" "\
+(autoload 'debug-on-entry "debug" "\
Request FUNCTION to invoke debugger each time it is called.
When called interactively, prompt for FUNCTION in the minibuffer.
@@ -6265,7 +6331,7 @@ Redefining FUNCTION also cancels it.
\(fn FUNCTION)" t nil)
-(autoload (quote cancel-debug-on-entry) "debug" "\
+(autoload 'cancel-debug-on-entry "debug" "\
Undo effect of \\[debug-on-entry] on FUNCTION.
If FUNCTION is nil, cancel debug-on-entry for all functions.
When called interactively, prompt for FUNCTION in the minibuffer.
@@ -6276,15 +6342,15 @@ To specify a nil argument interactively, exit with an empty minibuffer.
;;;***
;;;### (autoloads (decipher-mode decipher) "decipher" "play/decipher.el"
-;;;;;; (17842 55395))
+;;;;;; (18202 4002))
;;; Generated autoloads from play/decipher.el
-(autoload (quote decipher) "decipher" "\
+(autoload 'decipher "decipher" "\
Format a buffer of ciphertext for cryptanalysis and enter Decipher mode.
\(fn)" t nil)
-(autoload (quote decipher-mode) "decipher" "\
+(autoload 'decipher-mode "decipher" "\
Major mode for decrypting monoalphabetic substitution ciphers.
Lower-case letters enter plaintext.
Upper-case letters are commands.
@@ -6305,23 +6371,23 @@ The most useful commands are:
;;;***
;;;### (autoloads (delimit-columns-rectangle delimit-columns-region
-;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (17842
-;;;;;; 58280))
+;;;;;; delimit-columns-customize) "delim-col" "delim-col.el" (18088
+;;;;;; 55081))
;;; Generated autoloads from delim-col.el
-(autoload (quote delimit-columns-customize) "delim-col" "\
+(autoload 'delimit-columns-customize "delim-col" "\
Customization of `columns' group.
\(fn)" t nil)
-(autoload (quote delimit-columns-region) "delim-col" "\
+(autoload 'delimit-columns-region "delim-col" "\
Prettify all columns in a text region.
START and END delimits the text region.
\(fn START END)" t nil)
-(autoload (quote delimit-columns-rectangle) "delim-col" "\
+(autoload 'delimit-columns-rectangle "delim-col" "\
Prettify all columns in a text rectangle.
START and END delimits the corners of text rectangle.
@@ -6330,11 +6396,11 @@ START and END delimits the corners of text rectangle.
;;;***
-;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (17842
-;;;;;; 56333))
+;;;### (autoloads (delphi-mode) "delphi" "progmodes/delphi.el" (18200
+;;;;;; 51266))
;;; Generated autoloads from progmodes/delphi.el
-(autoload (quote delphi-mode) "delphi" "\
+(autoload 'delphi-mode "delphi" "\
Major mode for editing Delphi code. \\<delphi-mode-map>
\\[delphi-tab] - Indents the current line for Delphi code.
\\[delphi-find-unit] - Search for a Delphi source file.
@@ -6381,11 +6447,11 @@ no args, if that value is non-nil.
;;;***
-;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (17842
-;;;;;; 58280))
+;;;### (autoloads (delete-selection-mode) "delsel" "delsel.el" (18186
+;;;;;; 14736))
;;; Generated autoloads from delsel.el
-(defalias (quote pending-delete-mode) (quote delete-selection-mode))
+(defalias 'pending-delete-mode 'delete-selection-mode)
(defvar delete-selection-mode nil "\
Non-nil if Delete-Selection mode is enabled.
@@ -6394,9 +6460,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `delete-selection-mode'.")
-(custom-autoload (quote delete-selection-mode) "delsel" nil)
+(custom-autoload 'delete-selection-mode "delsel" nil)
-(autoload (quote delete-selection-mode) "delsel" "\
+(autoload 'delete-selection-mode "delsel" "\
Toggle Delete Selection mode.
With prefix ARG, turn Delete Selection mode on if and only if ARG is
positive.
@@ -6411,10 +6477,10 @@ any selection.
;;;***
;;;### (autoloads (derived-mode-init-mode-variables define-derived-mode)
-;;;;;; "derived" "emacs-lisp/derived.el" (17842 54152))
+;;;;;; "derived" "emacs-lisp/derived.el" (18088 55095))
;;; Generated autoloads from emacs-lisp/derived.el
-(autoload (quote define-derived-mode) "derived" "\
+(autoload 'define-derived-mode "derived" "\
Create a new mode as a variant of an existing mode.
The arguments to this command are as follow:
@@ -6465,7 +6531,7 @@ See Info node `(elisp)Derived Modes' for more details.
\(fn CHILD PARENT NAME &optional DOCSTRING &rest BODY)" nil (quote macro))
-(autoload (quote derived-mode-init-mode-variables) "derived" "\
+(autoload 'derived-mode-init-mode-variables "derived" "\
Initialize variables for a new MODE.
Right now, if they don't already exist, set up a blank keymap, an
empty syntax table, and an empty abbrev table -- these will be merged
@@ -6476,10 +6542,10 @@ the first time the mode is used.
;;;***
;;;### (autoloads (describe-char describe-text-properties) "descr-text"
-;;;;;; "descr-text.el" (17874 62047))
+;;;;;; "descr-text.el" (18088 55081))
;;; Generated autoloads from descr-text.el
-(autoload (quote describe-text-properties) "descr-text" "\
+(autoload 'describe-text-properties "descr-text" "\
Describe widgets, buttons, overlays and text properties at POS.
Interactively, describe them for the character after point.
If optional second argument OUTPUT-BUFFER is non-nil,
@@ -6488,7 +6554,7 @@ otherwise.
\(fn POS &optional OUTPUT-BUFFER)" t nil)
-(autoload (quote describe-char) "descr-text" "\
+(autoload 'describe-char "descr-text" "\
Describe the character after POS (interactively, the character after point).
The information includes character code, charset and code points in it,
syntax, category, how the character is encoded in a file,
@@ -6502,16 +6568,16 @@ as well as widgets, buttons, overlays, and text properties.
;;;### (autoloads (desktop-revert desktop-save-in-desktop-dir desktop-change-dir
;;;;;; desktop-load-default desktop-read desktop-remove desktop-save
;;;;;; desktop-clear desktop-locals-to-save desktop-save-mode) "desktop"
-;;;;;; "desktop.el" (17949 41467))
+;;;;;; "desktop.el" (18211 32385))
;;; Generated autoloads from desktop.el
(defvar desktop-save-mode nil "\
Non-nil if Desktop-Save mode is enabled.
See the command `desktop-save-mode' for a description of this minor mode.")
-(custom-autoload (quote desktop-save-mode) "desktop" nil)
+(custom-autoload 'desktop-save-mode "desktop" nil)
-(autoload (quote desktop-save-mode) "desktop" "\
+(autoload 'desktop-save-mode "desktop" "\
Toggle desktop saving mode.
With numeric ARG, turn desktop saving on if ARG is positive, off
otherwise. If desktop saving is turned on, the state of Emacs is
@@ -6520,12 +6586,12 @@ and function `desktop-read' for details.
\(fn &optional ARG)" t nil)
-(defvar desktop-locals-to-save (quote (desktop-locals-to-save truncate-lines case-fold-search case-replace fill-column overwrite-mode change-log-default-name line-number-mode column-number-mode size-indication-mode buffer-file-coding-system indent-tabs-mode tab-width indicate-buffer-boundaries indicate-empty-lines show-trailing-whitespace)) "\
+(defvar desktop-locals-to-save '(desktop-locals-to-save truncate-lines case-fold-search case-replace fill-column overwrite-mode change-log-default-name line-number-mode column-number-mode size-indication-mode buffer-file-coding-system indent-tabs-mode tab-width indicate-buffer-boundaries indicate-empty-lines show-trailing-whitespace) "\
List of local variables to save for each buffer.
The variables are saved only when they really are local. Conventional minor
modes are restored automatically; they should not be listed here.")
-(custom-autoload (quote desktop-locals-to-save) "desktop" t)
+(custom-autoload 'desktop-locals-to-save "desktop" t)
(defvar desktop-save-buffer nil "\
When non-nil, save buffer status in desktop file.
@@ -6579,7 +6645,7 @@ code like
Furthermore the major mode function must be autoloaded.")
-(put (quote desktop-buffer-mode-handlers) (quote risky-local-variable) t)
+(put 'desktop-buffer-mode-handlers 'risky-local-variable t)
(defvar desktop-minor-mode-handlers nil "\
Alist of functions to restore non-standard minor modes.
@@ -6623,9 +6689,9 @@ Furthermore the minor mode function must be autoloaded.
See also `desktop-minor-mode-table'.")
-(put (quote desktop-minor-mode-handlers) (quote risky-local-variable) t)
+(put 'desktop-minor-mode-handlers 'risky-local-variable t)
-(autoload (quote desktop-clear) "desktop" "\
+(autoload 'desktop-clear "desktop" "\
Empty the Desktop.
This kills all buffers except for internal ones and those with names matched by
a regular expression in the list `desktop-clear-preserve-buffers'.
@@ -6633,20 +6699,21 @@ Furthermore, it clears the variables listed in `desktop-globals-to-clear'.
\(fn)" t nil)
-(autoload (quote desktop-save) "desktop" "\
+(autoload 'desktop-save "desktop" "\
Save the desktop in a desktop file.
Parameter DIRNAME specifies where to save the desktop file.
+Optional parameter RELEASE says whether we're done with this desktop.
See also `desktop-base-file-name'.
-\(fn DIRNAME)" t nil)
+\(fn DIRNAME &optional RELEASE)" t nil)
-(autoload (quote desktop-remove) "desktop" "\
+(autoload 'desktop-remove "desktop" "\
Delete desktop file in `desktop-dirname'.
This function also sets `desktop-dirname' to nil.
\(fn)" t nil)
-(autoload (quote desktop-read) "desktop" "\
+(autoload 'desktop-read "desktop" "\
Read and process the desktop file in directory DIRNAME.
Look for a desktop file in DIRNAME, or if DIRNAME is omitted, look in
directories listed in `desktop-path'. If a desktop file is found, it
@@ -6657,13 +6724,13 @@ It returns t if a desktop file was loaded, nil otherwise.
\(fn &optional DIRNAME)" t nil)
-(autoload (quote desktop-load-default) "desktop" "\
+(autoload 'desktop-load-default "desktop" "\
Load the `default' start-up library manually.
Also inhibit further loading of it.
\(fn)" nil nil)
-(autoload (quote desktop-change-dir) "desktop" "\
+(autoload 'desktop-change-dir "desktop" "\
Change to desktop saved in DIRNAME.
Kill the desktop as specified by variables `desktop-save-mode' and
`desktop-save', then clear the desktop and load the desktop file in
@@ -6671,12 +6738,12 @@ directory DIRNAME.
\(fn DIRNAME)" t nil)
-(autoload (quote desktop-save-in-desktop-dir) "desktop" "\
+(autoload 'desktop-save-in-desktop-dir "desktop" "\
Save the desktop in directory `desktop-dirname'.
\(fn)" t nil)
-(autoload (quote desktop-revert) "desktop" "\
+(autoload 'desktop-revert "desktop" "\
Revert to the last loaded desktop.
\(fn)" t nil)
@@ -6685,10 +6752,10 @@ Revert to the last loaded desktop.
;;;### (autoloads (gnus-article-outlook-deuglify-article gnus-outlook-deuglify-article
;;;;;; gnus-article-outlook-repair-attribution gnus-article-outlook-unwrap-lines)
-;;;;;; "deuglify" "gnus/deuglify.el" (17842 54741))
+;;;;;; "deuglify" "gnus/deuglify.el" (18212 46006))
;;; Generated autoloads from gnus/deuglify.el
-(autoload (quote gnus-article-outlook-unwrap-lines) "deuglify" "\
+(autoload 'gnus-article-outlook-unwrap-lines "deuglify" "\
Unwrap lines that appear to be wrapped citation lines.
You can control what lines will be unwrapped by frobbing
`gnus-outlook-deuglify-unwrap-min' and `gnus-outlook-deuglify-unwrap-max',
@@ -6697,20 +6764,20 @@ NODISPLAY is non-nil, don't redisplay the article buffer.
\(fn &optional NODISPLAY)" t nil)
-(autoload (quote gnus-article-outlook-repair-attribution) "deuglify" "\
+(autoload 'gnus-article-outlook-repair-attribution "deuglify" "\
Repair a broken attribution line.
If NODISPLAY is non-nil, don't redisplay the article buffer.
\(fn &optional NODISPLAY)" t nil)
-(autoload (quote gnus-outlook-deuglify-article) "deuglify" "\
+(autoload 'gnus-outlook-deuglify-article "deuglify" "\
Full deuglify of broken Outlook (Express) articles.
Treat dumbquotes, unwrap lines, repair attribution and rearrange citation. If
NODISPLAY is non-nil, don't redisplay the article buffer.
\(fn &optional NODISPLAY)" t nil)
-(autoload (quote gnus-article-outlook-deuglify-article) "deuglify" "\
+(autoload 'gnus-article-outlook-deuglify-article "deuglify" "\
Deuglify broken Outlook (Express) articles and redisplay.
\(fn)" t nil)
@@ -6718,17 +6785,17 @@ Deuglify broken Outlook (Express) articles and redisplay.
;;;***
;;;### (autoloads (devanagari-post-read-conversion devanagari-compose-region)
-;;;;;; "devan-util" "language/devan-util.el" (17842 58278))
+;;;;;; "devan-util" "language/devan-util.el" (18088 55109))
;;; Generated autoloads from language/devan-util.el
(defconst devanagari-consonant "[\x51ad5-\x51af9\x51b38-\x51b3f]")
-(autoload (quote devanagari-compose-region) "devan-util" "\
+(autoload 'devanagari-compose-region "devan-util" "\
Not documented
\(fn FROM TO)" t nil)
-(autoload (quote devanagari-post-read-conversion) "devan-util" "\
+(autoload 'devanagari-post-read-conversion "devan-util" "\
Not documented
\(fn LEN)" nil nil)
@@ -6736,10 +6803,10 @@ Not documented
;;;***
;;;### (autoloads (diary-mode diary-mail-entries diary) "diary-lib"
-;;;;;; "calendar/diary-lib.el" (17958 11887))
+;;;;;; "calendar/diary-lib.el" (18157 34340))
;;; Generated autoloads from calendar/diary-lib.el
-(autoload (quote diary) "diary-lib" "\
+(autoload 'diary "diary-lib" "\
Generate the diary window for ARG days starting with the current date.
If no argument is provided, the number of days of diary entries is governed
by the variable `number-of-diary-entries'. A value of ARG less than 1
@@ -6747,7 +6814,7 @@ does nothing. This function is suitable for execution in a `.emacs' file.
\(fn &optional ARG)" t nil)
-(autoload (quote diary-mail-entries) "diary-lib" "\
+(autoload 'diary-mail-entries "diary-lib" "\
Send a mail message showing diary entries for next NDAYS days.
If no prefix argument is given, NDAYS is set to `diary-mail-days'.
Mail is sent to the address specified by `diary-mail-addr'.
@@ -6774,7 +6841,7 @@ to run it every morning at 1am.
\(fn &optional NDAYS)" t nil)
-(autoload (quote diary-mode) "diary-lib" "\
+(autoload 'diary-mode "diary-lib" "\
Major mode for editing the diary file.
\(fn)" t nil)
@@ -6782,20 +6849,20 @@ Major mode for editing the diary file.
;;;***
;;;### (autoloads (diff-backup diff diff-command diff-switches) "diff"
-;;;;;; "diff.el" (17992 30877))
+;;;;;; "diff.el" (18210 30826))
;;; Generated autoloads from diff.el
(defvar diff-switches "-c" "\
*A string or list of strings specifying switches to be passed to diff.")
-(custom-autoload (quote diff-switches) "diff" t)
+(custom-autoload 'diff-switches "diff" t)
(defvar diff-command "diff" "\
*The command to use to run diff.")
-(custom-autoload (quote diff-command) "diff" t)
+(custom-autoload 'diff-command "diff" t)
-(autoload (quote diff) "diff" "\
+(autoload 'diff "diff" "\
Find and display the differences between OLD and NEW files.
Interactively the current buffer's file name is the default for NEW
and a backup file for NEW is the default for OLD.
@@ -6804,7 +6871,7 @@ With prefix arg, prompt for diff switches.
\(fn OLD NEW &optional SWITCHES NO-ASYNC)" t nil)
-(autoload (quote diff-backup) "diff" "\
+(autoload 'diff-backup "diff" "\
Diff this file with its backup file or vice versa.
Uses the latest backup, if there are several numerical backups.
If this file is a backup, diff it with its original.
@@ -6816,10 +6883,10 @@ With prefix arg, prompt for diff switches.
;;;***
;;;### (autoloads (diff-minor-mode diff-mode) "diff-mode" "diff-mode.el"
-;;;;;; (17992 30877))
+;;;;;; (18203 37786))
;;; Generated autoloads from diff-mode.el
-(autoload (quote diff-mode) "diff-mode" "\
+(autoload 'diff-mode "diff-mode" "\
Major mode for viewing/editing context diffs.
Supports unified and context diffs as well as (to a lesser extent)
normal diffs.
@@ -6836,7 +6903,7 @@ a diff with \\[diff-reverse-direction].
\(fn)" t nil)
-(autoload (quote diff-minor-mode) "diff-mode" "\
+(autoload 'diff-minor-mode "diff-mode" "\
Minor mode for viewing/editing context diffs.
\\{diff-minor-mode-map}
@@ -6848,7 +6915,7 @@ Minor mode for viewing/editing context diffs.
;;;;;; dired dired-copy-preserve-time dired-dwim-target dired-keep-marker-symlink
;;;;;; dired-keep-marker-hardlink dired-keep-marker-copy dired-keep-marker-rename
;;;;;; dired-trivial-filenames dired-ls-F-marks-symlinks dired-listing-switches)
-;;;;;; "dired" "dired.el" (18015 32019))
+;;;;;; "dired" "dired.el" (18200 51263))
;;; Generated autoloads from dired.el
(defvar dired-listing-switches "-al" "\
@@ -6860,9 +6927,9 @@ On systems such as MS-DOS and MS-Windows, which use `ls' emulation in Lisp,
some of the `ls' switches are not supported; see the doc string of
`insert-directory' in `ls-lisp.el' for more details.")
-(custom-autoload (quote dired-listing-switches) "dired" t)
+(custom-autoload 'dired-listing-switches "dired" t)
-(defvar dired-chown-program (if (memq system-type (quote (hpux dgux usg-unix-v irix linux gnu/linux cygwin))) "chown" (if (file-exists-p "/usr/sbin/chown") "/usr/sbin/chown" "/etc/chown")) "\
+(defvar dired-chown-program (if (memq system-type '(hpux dgux usg-unix-v irix linux gnu/linux cygwin)) "chown" (if (file-exists-p "/usr/sbin/chown") "/usr/sbin/chown" "/etc/chown")) "\
Name of chown command (usually `chown' or `/etc/chown').")
(defvar dired-ls-F-marks-symlinks nil "\
@@ -6879,14 +6946,14 @@ marking `ls' program on one host and a non-marking on another host, and
don't care about symbolic links which really end in a @, you can
always set this variable to t.")
-(custom-autoload (quote dired-ls-F-marks-symlinks) "dired" t)
+(custom-autoload 'dired-ls-F-marks-symlinks "dired" t)
(defvar dired-trivial-filenames "^\\.\\.?$\\|^#" "\
*Regexp of files to skip when finding first file of a directory.
A value of nil means move to the subdir line.
A value of t means move to first file.")
-(custom-autoload (quote dired-trivial-filenames) "dired" t)
+(custom-autoload 'dired-trivial-filenames "dired" t)
(defvar dired-keep-marker-rename t "\
*Controls marking of renamed files.
@@ -6894,28 +6961,28 @@ If t, files keep their previous marks when they are renamed.
If a character, renamed files (whether previously marked or not)
are afterward marked with that character.")
-(custom-autoload (quote dired-keep-marker-rename) "dired" t)
+(custom-autoload 'dired-keep-marker-rename "dired" t)
(defvar dired-keep-marker-copy 67 "\
*Controls marking of copied files.
If t, copied files are marked if and as the corresponding original files were.
If a character, copied files are unconditionally marked with that character.")
-(custom-autoload (quote dired-keep-marker-copy) "dired" t)
+(custom-autoload 'dired-keep-marker-copy "dired" t)
(defvar dired-keep-marker-hardlink 72 "\
*Controls marking of newly made hard links.
If t, they are marked if and as the files linked to were marked.
If a character, new links are unconditionally marked with that character.")
-(custom-autoload (quote dired-keep-marker-hardlink) "dired" t)
+(custom-autoload 'dired-keep-marker-hardlink "dired" t)
(defvar dired-keep-marker-symlink 89 "\
*Controls marking of newly made symbolic links.
If t, they are marked if and as the files linked to were marked.
If a character, new links are unconditionally marked with that character.")
-(custom-autoload (quote dired-keep-marker-symlink) "dired" t)
+(custom-autoload 'dired-keep-marker-symlink "dired" t)
(defvar dired-dwim-target nil "\
*If non-nil, Dired tries to guess a default target directory.
@@ -6924,13 +6991,13 @@ use its current subdir, instead of the current subdir of this dired buffer.
The target is used in the prompt for file copy, rename etc.")
-(custom-autoload (quote dired-dwim-target) "dired" t)
+(custom-autoload 'dired-dwim-target "dired" t)
(defvar dired-copy-preserve-time t "\
*If non-nil, Dired preserves the last-modified time in a file copy.
\(This works on only some systems.)")
-(custom-autoload (quote dired-copy-preserve-time) "dired" t)
+(custom-autoload 'dired-copy-preserve-time "dired" t)
(defvar dired-directory nil "\
The directory name or wildcard spec that this dired directory lists.
@@ -6939,7 +7006,7 @@ directory name and the cdr is the list of files to mention.
The directory name must be absolute, but need not be fully expanded.")
(define-key ctl-x-map "d" 'dired)
-(autoload (quote dired) "dired" "\
+(autoload 'dired "dired" "\
\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it.
Optional second argument SWITCHES specifies the `ls' options used.
\(Interactively, use a prefix argument to be able to specify SWITCHES.)
@@ -6957,23 +7024,23 @@ If DIRNAME is already in a dired buffer, that buffer is used without refresh.
\(fn DIRNAME &optional SWITCHES)" t nil)
(define-key ctl-x-4-map "d" 'dired-other-window)
-(autoload (quote dired-other-window) "dired" "\
+(autoload 'dired-other-window "dired" "\
\"Edit\" directory DIRNAME. Like `dired' but selects in another window.
\(fn DIRNAME &optional SWITCHES)" t nil)
(define-key ctl-x-5-map "d" 'dired-other-frame)
-(autoload (quote dired-other-frame) "dired" "\
+(autoload 'dired-other-frame "dired" "\
\"Edit\" directory DIRNAME. Like `dired' but makes a new frame.
\(fn DIRNAME &optional SWITCHES)" t nil)
-(autoload (quote dired-noselect) "dired" "\
+(autoload 'dired-noselect "dired" "\
Like `dired' but returns the dired buffer as value, does not select it.
\(fn DIR-OR-LIST &optional SWITCHES)" nil nil)
-(autoload (quote dired-mode) "dired" "\
+(autoload 'dired-mode "dired" "\
Mode for \"editing\" directory listings.
In Dired, you are \"editing\" a list of the files in a directory and
(optionally) its subdirectories, in the format of `ls -lR'.
@@ -7053,10 +7120,10 @@ Keybindings:
;;;;;; dired-run-shell-command dired-do-shell-command dired-clean-directory
;;;;;; dired-do-print dired-do-touch dired-do-chown dired-do-chgrp
;;;;;; dired-do-chmod dired-compare-directories dired-backup-diff
-;;;;;; dired-diff) "dired-aux" "dired-aux.el" (17859 20444))
+;;;;;; dired-diff) "dired-aux" "dired-aux.el" (18169 11930))
;;; Generated autoloads from dired-aux.el
-(autoload (quote dired-diff) "dired-aux" "\
+(autoload 'dired-diff "dired-aux" "\
Compare file at point with file FILE using `diff'.
FILE defaults to the file at the mark. (That's the mark set by
\\[set-mark-command], not by Dired's \\[dired-mark] command.)
@@ -7066,7 +7133,7 @@ which is options for `diff'.
\(fn FILE &optional SWITCHES)" t nil)
-(autoload (quote dired-backup-diff) "dired-aux" "\
+(autoload 'dired-backup-diff "dired-aux" "\
Diff this file with its backup file or vice versa.
Uses the latest backup, if there are several numerical backups.
If this file is a backup, diff it with its original.
@@ -7075,7 +7142,7 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'.
\(fn &optional SWITCHES)" t nil)
-(autoload (quote dired-compare-directories) "dired-aux" "\
+(autoload 'dired-compare-directories "dired-aux" "\
Mark files with different file attributes in two dired buffers.
Compare file attributes of files in the current directory
with file attributes in directory DIR2 using PREDICATE on pairs of files
@@ -7103,36 +7170,36 @@ Examples of PREDICATE:
\(fn DIR2 PREDICATE)" t nil)
-(autoload (quote dired-do-chmod) "dired-aux" "\
+(autoload 'dired-do-chmod "dired-aux" "\
Change the mode of the marked (or next ARG) files.
-This calls chmod, thus symbolic modes like `g+w' are allowed.
+Symbolic modes like `g+w' are allowed.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-chgrp) "dired-aux" "\
+(autoload 'dired-do-chgrp "dired-aux" "\
Change the group of the marked (or next ARG) files.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-chown) "dired-aux" "\
+(autoload 'dired-do-chown "dired-aux" "\
Change the owner of the marked (or next ARG) files.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-touch) "dired-aux" "\
+(autoload 'dired-do-touch "dired-aux" "\
Change the timestamp of the marked (or next ARG) files.
This calls touch.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-print) "dired-aux" "\
+(autoload 'dired-do-print "dired-aux" "\
Print the marked (or next ARG) files.
Uses the shell command coming from variables `lpr-command' and
`lpr-switches' as default.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-clean-directory) "dired-aux" "\
+(autoload 'dired-clean-directory "dired-aux" "\
Flag numerical backups for deletion.
Spares `dired-kept-versions' latest versions, and `kept-old-versions' oldest.
Positive prefix arg KEEP overrides `dired-kept-versions';
@@ -7143,7 +7210,7 @@ with a prefix argument.
\(fn KEEP)" t nil)
-(autoload (quote dired-do-shell-command) "dired-aux" "\
+(autoload 'dired-do-shell-command "dired-aux" "\
Run a shell command COMMAND on the marked files.
If no files are marked or a specific numeric prefix arg is given,
the next ARG files are used. Just \\[universal-argument] means the current file.
@@ -7180,12 +7247,12 @@ can be produced by `dired-get-marked-files', for example.
\(fn COMMAND &optional ARG FILE-LIST)" t nil)
-(autoload (quote dired-run-shell-command) "dired-aux" "\
+(autoload 'dired-run-shell-command "dired-aux" "\
Not documented
\(fn COMMAND)" nil nil)
-(autoload (quote dired-do-kill-lines) "dired-aux" "\
+(autoload 'dired-do-kill-lines "dired-aux" "\
Kill all marked lines (not the files).
With a prefix argument, kill that many lines starting with the current line.
\(A negative argument kills backward.)
@@ -7199,32 +7266,32 @@ command with a prefix argument (the value does not matter).
\(fn &optional ARG FMT)" t nil)
-(autoload (quote dired-compress-file) "dired-aux" "\
+(autoload 'dired-compress-file "dired-aux" "\
Not documented
\(fn FILE)" nil nil)
-(autoload (quote dired-query) "dired-aux" "\
+(autoload 'dired-query "dired-aux" "\
Not documented
\(fn QS-VAR QS-PROMPT &rest QS-ARGS)" nil nil)
-(autoload (quote dired-do-compress) "dired-aux" "\
+(autoload 'dired-do-compress "dired-aux" "\
Compress or uncompress marked (or next ARG) files.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-byte-compile) "dired-aux" "\
+(autoload 'dired-do-byte-compile "dired-aux" "\
Byte compile marked (or next ARG) Emacs Lisp files.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-load) "dired-aux" "\
+(autoload 'dired-do-load "dired-aux" "\
Load the marked (or next ARG) Emacs Lisp files.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-redisplay) "dired-aux" "\
+(autoload 'dired-do-redisplay "dired-aux" "\
Redisplay all marked (or next ARG) files.
If on a subdir line, redisplay that subdirectory. In that case,
a prefix arg lets you edit the `ls' switches used for the new listing.
@@ -7239,37 +7306,37 @@ See Info node `(emacs)Subdir switches' for more details.
\(fn &optional ARG TEST-FOR-SUBDIR)" t nil)
-(autoload (quote dired-add-file) "dired-aux" "\
+(autoload 'dired-add-file "dired-aux" "\
Not documented
\(fn FILENAME &optional MARKER-CHAR)" nil nil)
-(autoload (quote dired-remove-file) "dired-aux" "\
+(autoload 'dired-remove-file "dired-aux" "\
Not documented
\(fn FILE)" nil nil)
-(autoload (quote dired-relist-file) "dired-aux" "\
+(autoload 'dired-relist-file "dired-aux" "\
Create or update the line for FILE in all Dired buffers it would belong in.
\(fn FILE)" nil nil)
-(autoload (quote dired-copy-file) "dired-aux" "\
+(autoload 'dired-copy-file "dired-aux" "\
Not documented
\(fn FROM TO OK-FLAG)" nil nil)
-(autoload (quote dired-rename-file) "dired-aux" "\
+(autoload 'dired-rename-file "dired-aux" "\
Not documented
\(fn FILE NEWNAME OK-IF-ALREADY-EXISTS)" nil nil)
-(autoload (quote dired-create-directory) "dired-aux" "\
+(autoload 'dired-create-directory "dired-aux" "\
Create a directory called DIRECTORY.
\(fn DIRECTORY)" t nil)
-(autoload (quote dired-do-copy) "dired-aux" "\
+(autoload 'dired-do-copy "dired-aux" "\
Copy all marked (or next ARG) files, or copy the current file.
This normally preserves the last-modified date when copying.
When operating on just the current file, you specify the new name.
@@ -7284,7 +7351,7 @@ like `cp -d'.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-symlink) "dired-aux" "\
+(autoload 'dired-do-symlink "dired-aux" "\
Make symbolic links to current file or all marked (or next ARG) files.
When operating on just the current file, you specify the new name.
When operating on multiple or marked files, you specify a directory
@@ -7297,7 +7364,7 @@ For relative symlinks, use \\[dired-do-relsymlink].
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-hardlink) "dired-aux" "\
+(autoload 'dired-do-hardlink "dired-aux" "\
Add names (hard links) current file or all marked (or next ARG) files.
When operating on just the current file, you specify the new name.
When operating on multiple or marked files, you specify a directory
@@ -7308,7 +7375,7 @@ suggested for the target directory depends on the value of
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-rename) "dired-aux" "\
+(autoload 'dired-do-rename "dired-aux" "\
Rename current file or all marked (or next ARG) files.
When renaming just the current file, you specify the new name.
When renaming multiple or marked files, you specify a directory.
@@ -7318,7 +7385,7 @@ of `dired-dwim-target', which see.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-do-rename-regexp) "dired-aux" "\
+(autoload 'dired-do-rename-regexp "dired-aux" "\
Rename selected files whose names match REGEXP to NEWNAME.
With non-zero prefix argument ARG, the command operates on the next ARG
@@ -7335,35 +7402,35 @@ Normally, only the non-directory part of the file name is used and changed.
\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-(autoload (quote dired-do-copy-regexp) "dired-aux" "\
+(autoload 'dired-do-copy-regexp "dired-aux" "\
Copy selected files whose names match REGEXP to NEWNAME.
See function `dired-do-rename-regexp' for more info.
\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-(autoload (quote dired-do-hardlink-regexp) "dired-aux" "\
+(autoload 'dired-do-hardlink-regexp "dired-aux" "\
Hardlink selected files whose names match REGEXP to NEWNAME.
See function `dired-do-rename-regexp' for more info.
\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-(autoload (quote dired-do-symlink-regexp) "dired-aux" "\
+(autoload 'dired-do-symlink-regexp "dired-aux" "\
Symlink selected files whose names match REGEXP to NEWNAME.
See function `dired-do-rename-regexp' for more info.
\(fn REGEXP NEWNAME &optional ARG WHOLE-NAME)" t nil)
-(autoload (quote dired-upcase) "dired-aux" "\
+(autoload 'dired-upcase "dired-aux" "\
Rename all marked (or next ARG) files to upper case.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-downcase) "dired-aux" "\
+(autoload 'dired-downcase "dired-aux" "\
Rename all marked (or next ARG) files to lower case.
\(fn &optional ARG)" t nil)
-(autoload (quote dired-maybe-insert-subdir) "dired-aux" "\
+(autoload 'dired-maybe-insert-subdir "dired-aux" "\
Insert this subdirectory into the same dired buffer.
If it is already present, just move to it (type \\[dired-do-redisplay] to refresh),
else inserts it at its natural place (as `ls -lR' would have done).
@@ -7382,7 +7449,7 @@ See Info node `(emacs)Subdir switches' for more details.
\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-(autoload (quote dired-insert-subdir) "dired-aux" "\
+(autoload 'dired-insert-subdir "dired-aux" "\
Insert this subdirectory into the same dired buffer.
If it is already present, overwrites previous entry,
else inserts it at its natural place (as `ls -lR' would have done).
@@ -7393,64 +7460,64 @@ This function takes some pains to conform to `ls -lR' output.
\(fn DIRNAME &optional SWITCHES NO-ERROR-IF-NOT-DIR-P)" t nil)
-(autoload (quote dired-prev-subdir) "dired-aux" "\
+(autoload 'dired-prev-subdir "dired-aux" "\
Go to previous subdirectory, regardless of level.
When called interactively and not on a subdir line, go to this subdir's line.
\(fn ARG &optional NO-ERROR-IF-NOT-FOUND NO-SKIP)" t nil)
-(autoload (quote dired-goto-subdir) "dired-aux" "\
+(autoload 'dired-goto-subdir "dired-aux" "\
Go to end of header line of DIR in this dired buffer.
Return value of point on success, otherwise return nil.
The next char is either \\n, or \\r if DIR is hidden.
\(fn DIR)" t nil)
-(autoload (quote dired-mark-subdir-files) "dired-aux" "\
+(autoload 'dired-mark-subdir-files "dired-aux" "\
Mark all files except `.' and `..' in current subdirectory.
If the Dired buffer shows multiple directories, this command
marks the files listed in the subdirectory that point is in.
\(fn)" t nil)
-(autoload (quote dired-kill-subdir) "dired-aux" "\
+(autoload 'dired-kill-subdir "dired-aux" "\
Remove all lines of current subdirectory.
Lower levels are unaffected.
\(fn &optional REMEMBER-MARKS)" t nil)
-(autoload (quote dired-tree-up) "dired-aux" "\
+(autoload 'dired-tree-up "dired-aux" "\
Go up ARG levels in the dired tree.
\(fn ARG)" t nil)
-(autoload (quote dired-tree-down) "dired-aux" "\
+(autoload 'dired-tree-down "dired-aux" "\
Go down in the dired tree.
\(fn)" t nil)
-(autoload (quote dired-hide-subdir) "dired-aux" "\
+(autoload 'dired-hide-subdir "dired-aux" "\
Hide or unhide the current subdirectory and move to next directory.
Optional prefix arg is a repeat factor.
Use \\[dired-hide-all] to (un)hide all directories.
\(fn ARG)" t nil)
-(autoload (quote dired-hide-all) "dired-aux" "\
+(autoload 'dired-hide-all "dired-aux" "\
Hide all subdirectories, leaving only their header lines.
If there is already something hidden, make everything visible again.
Use \\[dired-hide-subdir] to (un)hide a particular subdirectory.
\(fn ARG)" t nil)
-(autoload (quote dired-do-search) "dired-aux" "\
+(autoload 'dired-do-search "dired-aux" "\
Search through all marked files for a match for REGEXP.
Stops when a match is found.
To continue searching for next match, use command \\[tags-loop-continue].
\(fn REGEXP)" t nil)
-(autoload (quote dired-do-query-replace-regexp) "dired-aux" "\
+(autoload 'dired-do-query-replace-regexp "dired-aux" "\
Do `query-replace-regexp' of FROM with TO, on all marked files.
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
@@ -7458,7 +7525,7 @@ with the command \\[tags-loop-continue].
\(fn FROM TO &optional DELIMITED)" t nil)
-(autoload (quote dired-show-file-type) "dired-aux" "\
+(autoload 'dired-show-file-type "dired-aux" "\
Print the type of FILE, according to the `file' command.
If FILE is a symbolic link and the optional argument DEREF-SYMLINKS is
true then the type of the file linked to by FILE is printed instead.
@@ -7468,10 +7535,10 @@ true then the type of the file linked to by FILE is printed instead.
;;;***
;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el"
-;;;;;; (17992 30877))
+;;;;;; (18212 46004))
;;; Generated autoloads from dired-x.el
-(autoload (quote dired-jump) "dired-x" "\
+(autoload 'dired-jump "dired-x" "\
Jump to dired buffer corresponding to current buffer.
If in a file, dired the current directory and move to file's line.
If in Dired already, pop up a level and goto old directory's line.
@@ -7480,7 +7547,7 @@ buffer and try again.
\(fn &optional OTHER-WINDOW)" t nil)
-(autoload (quote dired-do-relsymlink) "dired-x" "\
+(autoload 'dired-do-relsymlink "dired-x" "\
Relative symlink all marked (or next ARG) files into a directory.
Otherwise make a relative symbolic link to the current file.
This creates relative symbolic links like
@@ -7497,30 +7564,34 @@ For absolute symlinks, use \\[dired-do-symlink].
;;;***
-;;;### (autoloads (dirtrack) "dirtrack" "dirtrack.el" (17842 58280))
+;;;### (autoloads (dirtrack dirtrack-mode) "dirtrack" "dirtrack.el"
+;;;;;; (18213 13926))
;;; Generated autoloads from dirtrack.el
-(autoload (quote dirtrack) "dirtrack" "\
+(autoload 'dirtrack-mode "dirtrack" "\
+Enable or disable Dirtrack directory tracking in a shell buffer.
+This provides an alternative to `shell-dirtrack-mode'.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'dirtrack "dirtrack" "\
Determine the current directory by scanning the process output for a prompt.
The prompt to look for is the first item in `dirtrack-list'.
-You can toggle directory tracking by using the function `dirtrack-toggle'.
+You can toggle directory tracking by using the function `dirtrack-mode'.
If directory tracking does not seem to be working, you can use the
-function `dirtrack-debug-toggle' to turn on debugging output.
-
-You can enable directory tracking by adding this function to
-`comint-output-filter-functions'.
+function `dirtrack-debug-mode' to turn on debugging output.
\(fn INPUT)" nil nil)
;;;***
-;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (17842
-;;;;;; 54152))
+;;;### (autoloads (disassemble) "disass" "emacs-lisp/disass.el" (18173
+;;;;;; 8195))
;;; Generated autoloads from emacs-lisp/disass.el
-(autoload (quote disassemble) "disass" "\
+(autoload 'disassemble "disass" "\
Print disassembled code for OBJECT in (optional) BUFFER.
OBJECT can be a symbol defined as a function, or a function itself
\(a lambda expression or a compiled-function object).
@@ -7536,15 +7607,15 @@ redefine OBJECT if it is a symbol.
;;;;;; standard-display-g1 standard-display-ascii standard-display-default
;;;;;; standard-display-8bit describe-current-display-table describe-display-table
;;;;;; set-display-table-slot display-table-slot make-display-table)
-;;;;;; "disp-table" "disp-table.el" (17874 62056))
+;;;;;; "disp-table" "disp-table.el" (18088 55082))
;;; Generated autoloads from disp-table.el
-(autoload (quote make-display-table) "disp-table" "\
+(autoload 'make-display-table "disp-table" "\
Return a new, empty display table.
\(fn)" nil nil)
-(autoload (quote display-table-slot) "disp-table" "\
+(autoload 'display-table-slot "disp-table" "\
Return the value of the extra slot in DISPLAY-TABLE named SLOT.
SLOT may be a number from 0 to 5 inclusive, or a slot name (symbol).
Valid symbols are `truncation', `wrap', `escape', `control',
@@ -7552,7 +7623,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
\(fn DISPLAY-TABLE SLOT)" nil nil)
-(autoload (quote set-display-table-slot) "disp-table" "\
+(autoload 'set-display-table-slot "disp-table" "\
Set the value of the extra slot in DISPLAY-TABLE named SLOT to VALUE.
SLOT may be a number from 0 to 5 inclusive, or a name (symbol).
Valid symbols are `truncation', `wrap', `escape', `control',
@@ -7560,71 +7631,71 @@ Valid symbols are `truncation', `wrap', `escape', `control',
\(fn DISPLAY-TABLE SLOT VALUE)" nil nil)
-(autoload (quote describe-display-table) "disp-table" "\
+(autoload 'describe-display-table "disp-table" "\
Describe the display table DT in a help buffer.
\(fn DT)" nil nil)
-(autoload (quote describe-current-display-table) "disp-table" "\
+(autoload 'describe-current-display-table "disp-table" "\
Describe the display table in use in the selected window and buffer.
\(fn)" t nil)
-(autoload (quote standard-display-8bit) "disp-table" "\
+(autoload 'standard-display-8bit "disp-table" "\
Display characters in the range L to H literally.
\(fn L H)" nil nil)
-(autoload (quote standard-display-default) "disp-table" "\
+(autoload 'standard-display-default "disp-table" "\
Display characters in the range L to H using the default notation.
\(fn L H)" nil nil)
-(autoload (quote standard-display-ascii) "disp-table" "\
+(autoload 'standard-display-ascii "disp-table" "\
Display character C using printable string S.
\(fn C S)" nil nil)
-(autoload (quote standard-display-g1) "disp-table" "\
+(autoload 'standard-display-g1 "disp-table" "\
Display character C as character SC in the g1 character set.
This function assumes that your terminal uses the SO/SI characters;
it is meaningless for an X frame.
\(fn C SC)" nil nil)
-(autoload (quote standard-display-graphic) "disp-table" "\
+(autoload 'standard-display-graphic "disp-table" "\
Display character C as character GC in graphics character set.
This function assumes VT100-compatible escapes; it is meaningless for an
X frame.
\(fn C GC)" nil nil)
-(autoload (quote standard-display-underline) "disp-table" "\
+(autoload 'standard-display-underline "disp-table" "\
Display character C as character UC plus underlining.
\(fn C UC)" nil nil)
-(autoload (quote create-glyph) "disp-table" "\
+(autoload 'create-glyph "disp-table" "\
Allocate a glyph code to display by sending STRING to the terminal.
\(fn STRING)" nil nil)
-(autoload (quote make-glyph-code) "disp-table" "\
+(autoload 'make-glyph-code "disp-table" "\
Return a glyph code representing char CHAR with face FACE.
\(fn CHAR &optional FACE)" nil nil)
-(autoload (quote glyph-char) "disp-table" "\
+(autoload 'glyph-char "disp-table" "\
Return the character of glyph code GLYPH.
\(fn GLYPH)" nil nil)
-(autoload (quote glyph-face) "disp-table" "\
+(autoload 'glyph-face "disp-table" "\
Return the face of glyph code GLYPH, or nil if glyph has default face.
\(fn GLYPH)" nil nil)
-(autoload (quote standard-display-european) "disp-table" "\
+(autoload 'standard-display-european "disp-table" "\
Semi-obsolete way to toggle display of ISO 8859 European characters.
This function is semi-obsolete; if you want to do your editing with
@@ -7633,7 +7704,7 @@ with either the `--unibyte' option or the EMACS_UNIBYTE environment
variable, or else customize `enable-multibyte-characters'.
With prefix argument, this command enables European character display
-if arg is positive, disables it otherwise. Otherwise, it toggles
+if ARG is positive, disables it otherwise. Otherwise, it toggles
European character display.
When this mode is enabled, characters in the range of 160 to 255
@@ -7652,10 +7723,10 @@ for users who call this function in `.emacs'.
;;;***
;;;### (autoloads (dissociated-press) "dissociate" "play/dissociate.el"
-;;;;;; (17941 38806))
+;;;;;; (18088 55113))
;;; Generated autoloads from play/dissociate.el
-(autoload (quote dissociated-press) "dissociate" "\
+(autoload 'dissociated-press "dissociate" "\
Dissociate the text of the current buffer.
Output goes in buffer named *Dissociation*,
which is redisplayed each time text is added to it.
@@ -7668,10 +7739,10 @@ Default is 2.
;;;***
-;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (17949 41467))
+;;;### (autoloads (dnd-protocol-alist) "dnd" "dnd.el" (18088 55082))
;;; Generated autoloads from dnd.el
-(defvar dnd-protocol-alist (quote (("^file:///" . dnd-open-local-file) ("^file://" . dnd-open-file) ("^file:" . dnd-open-local-file) ("^\\(https?\\|ftp\\|file\\|nfs\\)://" . dnd-open-file))) "\
+(defvar dnd-protocol-alist '(("^file:///" . dnd-open-local-file) ("^file://" . dnd-open-file) ("^file:" . dnd-open-local-file) ("^\\(https?\\|ftp\\|file\\|nfs\\)://" . dnd-open-file)) "\
The functions to call for different protocols when a drop is made.
This variable is used by `dnd-handle-one-url' and `dnd-handle-file-name'.
The list contains of (REGEXP . FUNCTION) pairs.
@@ -7684,15 +7755,15 @@ If no match is found, the URL is inserted as text by calling `dnd-insert-text'.
The function shall return the action done (move, copy, link or private)
if some action was made, or nil if the URL is ignored.")
-(custom-autoload (quote dnd-protocol-alist) "dnd" t)
+(custom-autoload 'dnd-protocol-alist "dnd" t)
;;;***
;;;### (autoloads (dns-mode-soa-increment-serial dns-mode) "dns-mode"
-;;;;;; "textmodes/dns-mode.el" (17842 58277))
+;;;;;; "textmodes/dns-mode.el" (18088 55119))
;;; Generated autoloads from textmodes/dns-mode.el
-(autoload (quote dns-mode) "dns-mode" "\
+(autoload 'dns-mode "dns-mode" "\
Major mode for viewing and editing DNS master files.
This mode is inherited from text mode. It add syntax
highlighting, and some commands for handling DNS master files.
@@ -7705,7 +7776,7 @@ Turning on DNS mode runs `dns-mode-hook'.
\(fn)" t nil)
(defalias 'zone-mode 'dns-mode)
-(autoload (quote dns-mode-soa-increment-serial) "dns-mode" "\
+(autoload 'dns-mode-soa-increment-serial "dns-mode" "\
Locate SOA record and increment the serial field.
\(fn)" t nil)
@@ -7713,42 +7784,48 @@ Locate SOA record and increment the serial field.
;;;***
-;;;### (autoloads (doctor) "doctor" "play/doctor.el" (17941 38806))
+;;;### (autoloads (doc-view-mode) "doc-view" "doc-view.el" (18201
+;;;;;; 33325))
+;;; Generated autoloads from doc-view.el
+
+(autoload 'doc-view-mode "doc-view" "\
+Major mode in DocView buffers.
+You can use \\<doc-view-mode-map>\\[doc-view-toggle-display] to
+toggle between display as a set of images and display as text.
+
+\(fn)" t nil)
+
+;;;***
+
+;;;### (autoloads (doctor) "doctor" "play/doctor.el" (18088 55113))
;;; Generated autoloads from play/doctor.el
-(autoload (quote doctor) "doctor" "\
+(autoload 'doctor "doctor" "\
Switch to *doctor* buffer and start giving psychotherapy.
\(fn)" t nil)
;;;***
-;;;### (autoloads (double-mode double-mode) "double" "double.el"
-;;;;;; (17842 58280))
+;;;### (autoloads (double-mode) "double" "double.el" (18203 37786))
;;; Generated autoloads from double.el
-(defvar double-mode nil "\
+(autoload 'double-mode "double" "\
Toggle Double mode.
-Setting this variable directly does not take effect;
-use either \\[customize] or the function `double-mode'.")
-
-(custom-autoload (quote double-mode) "double" nil)
-
-(autoload (quote double-mode) "double" "\
-Toggle Double mode.
-With prefix arg, turn Double mode on iff arg is positive.
+With prefix argument ARG, turn Double mode on if ARG is positive, otherwise
+turn it off.
When Double mode is on, some keys will insert different strings
when pressed twice. See variable `double-map' for details.
-\(fn ARG)" t nil)
+\(fn &optional ARG)" t nil)
;;;***
-;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (17842 55395))
+;;;### (autoloads (dunnet) "dunnet" "play/dunnet.el" (18088 55113))
;;; Generated autoloads from play/dunnet.el
-(autoload (quote dunnet) "dunnet" "\
+(autoload 'dunnet "dunnet" "\
Switch to *dungeon* buffer and start game.
\(fn)" t nil)
@@ -7756,10 +7833,10 @@ Switch to *dungeon* buffer and start game.
;;;***
;;;### (autoloads (gnus-earcon-display) "earcon" "gnus/earcon.el"
-;;;;;; (17842 54741))
+;;;;;; (18088 55101))
;;; Generated autoloads from gnus/earcon.el
-(autoload (quote gnus-earcon-display) "earcon" "\
+(autoload 'gnus-earcon-display "earcon" "\
Play sounds in message buffers.
\(fn)" t nil)
@@ -7768,12 +7845,12 @@ Play sounds in message buffers.
;;;### (autoloads (easy-mmode-defsyntax easy-mmode-defmap easy-mmode-define-keymap
;;;;;; define-globalized-minor-mode define-minor-mode) "easy-mmode"
-;;;;;; "emacs-lisp/easy-mmode.el" (17992 30878))
+;;;;;; "emacs-lisp/easy-mmode.el" (18201 33326))
;;; Generated autoloads from emacs-lisp/easy-mmode.el
-(defalias (quote easy-mmode-define-minor-mode) (quote define-minor-mode))
+(defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
-(autoload (quote define-minor-mode) "easy-mmode" "\
+(autoload 'define-minor-mode "easy-mmode" "\
Define a new minor mode MODE.
This function defines the associated control variable MODE, keymap MODE-map,
and toggle command MODE.
@@ -7790,7 +7867,7 @@ used (see below).
BODY contains code to execute each time the mode is activated or deactivated.
It is executed after toggling the mode,
- and before running the hook variable `mode-HOOK'.
+ and before running the hook variable `MODE-hook'.
Before the actual body code, you can write keyword arguments (alternating
keywords and values). These following keyword arguments are supported (other
keywords will be passed to `defcustom' if the minor mode is global):
@@ -7813,11 +7890,11 @@ For example, you could write
\(fn MODE DOC &optional INIT-VALUE LIGHTER KEYMAP &rest BODY)" nil (quote macro))
-(defalias (quote easy-mmode-define-global-mode) (quote define-globalized-minor-mode))
+(defalias 'easy-mmode-define-global-mode 'define-globalized-minor-mode)
-(defalias (quote define-global-minor-mode) (quote define-globalized-minor-mode))
+(defalias 'define-global-minor-mode 'define-globalized-minor-mode)
-(autoload (quote define-globalized-minor-mode) "easy-mmode" "\
+(autoload 'define-globalized-minor-mode "easy-mmode" "\
Make a global mode GLOBAL-MODE corresponding to buffer-local minor MODE.
TURN-ON is a function that will be called with no args in every buffer
and that should try to turn MODE on if applicable for that buffer.
@@ -7838,7 +7915,7 @@ call another major mode in their body.
\(fn GLOBAL-MODE MODE TURN-ON &rest KEYS)" nil (quote macro))
-(autoload (quote easy-mmode-define-keymap) "easy-mmode" "\
+(autoload 'easy-mmode-define-keymap "easy-mmode" "\
Return a keymap built from bindings BS.
BS must be a list of (KEY . BINDING) where
KEY and BINDINGS are suitable for `define-key'.
@@ -7848,12 +7925,12 @@ ARGS is a list of additional keyword arguments.
\(fn BS &optional NAME M ARGS)" nil nil)
-(autoload (quote easy-mmode-defmap) "easy-mmode" "\
+(autoload 'easy-mmode-defmap "easy-mmode" "\
Not documented
\(fn M BS DOC &rest ARGS)" nil (quote macro))
-(autoload (quote easy-mmode-defsyntax) "easy-mmode" "\
+(autoload 'easy-mmode-defsyntax "easy-mmode" "\
Define variable ST as a syntax-table.
CSS contains a list of syntax specifications of the form (CHAR . SYNTAX).
@@ -7862,13 +7939,13 @@ CSS contains a list of syntax specifications of the form (CHAR . SYNTAX).
;;;***
;;;### (autoloads (easy-menu-change easy-menu-create-menu easy-menu-do-define
-;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (17842
-;;;;;; 54152))
+;;;;;; easy-menu-define) "easymenu" "emacs-lisp/easymenu.el" (18120
+;;;;;; 34750))
;;; Generated autoloads from emacs-lisp/easymenu.el
-(put (quote easy-menu-define) (quote lisp-indent-function) (quote defun))
+(put 'easy-menu-define 'lisp-indent-function 'defun)
-(autoload (quote easy-menu-define) "easymenu" "\
+(autoload 'easy-menu-define "easymenu" "\
Define a menu bar submenu in maps MAPS, according to MENU.
If SYMBOL is non-nil, store the menu keymap in the value of SYMBOL,
@@ -7971,19 +8048,19 @@ A menu item can be a list with the same format as MENU. This is a submenu.
\(fn SYMBOL MAPS DOC MENU)" nil (quote macro))
-(autoload (quote easy-menu-do-define) "easymenu" "\
+(autoload 'easy-menu-do-define "easymenu" "\
Not documented
\(fn SYMBOL MAPS DOC MENU)" nil nil)
-(autoload (quote easy-menu-create-menu) "easymenu" "\
+(autoload 'easy-menu-create-menu "easymenu" "\
Create a menu called MENU-NAME with items described in MENU-ITEMS.
MENU-NAME is a string, the name of the menu. MENU-ITEMS is a list of items
possibly preceded by keyword pairs as described in `easy-menu-define'.
\(fn MENU-NAME MENU-ITEMS)" nil nil)
-(autoload (quote easy-menu-change) "easymenu" "\
+(autoload 'easy-menu-change "easymenu" "\
Change menu found at PATH as item NAME to contain ITEMS.
PATH is a list of strings for locating the menu that
should contain a submenu named NAME.
@@ -8007,20 +8084,20 @@ To implement dynamic menus, either call this from
;;;### (autoloads (ebnf-pop-style ebnf-push-style ebnf-reset-style
;;;;;; ebnf-apply-style ebnf-merge-style ebnf-delete-style ebnf-insert-style
-;;;;;; ebnf-setup ebnf-syntax-region ebnf-syntax-buffer ebnf-syntax-file
-;;;;;; ebnf-syntax-directory ebnf-eps-region ebnf-eps-buffer ebnf-eps-file
-;;;;;; ebnf-eps-directory ebnf-spool-region ebnf-spool-buffer ebnf-spool-file
-;;;;;; ebnf-spool-directory ebnf-print-region ebnf-print-buffer
+;;;;;; ebnf-find-style ebnf-setup ebnf-syntax-region ebnf-syntax-buffer
+;;;;;; ebnf-syntax-file ebnf-syntax-directory ebnf-eps-region ebnf-eps-buffer
+;;;;;; ebnf-eps-file ebnf-eps-directory ebnf-spool-region ebnf-spool-buffer
+;;;;;; ebnf-spool-file ebnf-spool-directory ebnf-print-region ebnf-print-buffer
;;;;;; ebnf-print-file ebnf-print-directory ebnf-customize) "ebnf2ps"
-;;;;;; "progmodes/ebnf2ps.el" (17952 11093))
+;;;;;; "progmodes/ebnf2ps.el" (18192 17587))
;;; Generated autoloads from progmodes/ebnf2ps.el
-(autoload (quote ebnf-customize) "ebnf2ps" "\
+(autoload 'ebnf-customize "ebnf2ps" "\
Customization for ebnf group.
\(fn)" t nil)
-(autoload (quote ebnf-print-directory) "ebnf2ps" "\
+(autoload 'ebnf-print-directory "ebnf2ps" "\
Generate and print a PostScript syntactic chart image of DIRECTORY.
If DIRECTORY is nil, it's used `default-directory'.
@@ -8032,7 +8109,7 @@ See also `ebnf-print-buffer'.
\(fn &optional DIRECTORY)" t nil)
-(autoload (quote ebnf-print-file) "ebnf2ps" "\
+(autoload 'ebnf-print-file "ebnf2ps" "\
Generate and print a PostScript syntactic chart image of the file FILE.
If optional arg DO-NOT-KILL-BUFFER-WHEN-DONE is non-nil, the buffer isn't
@@ -8042,7 +8119,7 @@ See also `ebnf-print-buffer'.
\(fn FILE &optional DO-NOT-KILL-BUFFER-WHEN-DONE)" t nil)
-(autoload (quote ebnf-print-buffer) "ebnf2ps" "\
+(autoload 'ebnf-print-buffer "ebnf2ps" "\
Generate and print a PostScript syntactic chart image of the buffer.
When called with a numeric prefix argument (C-u), prompts the user for
@@ -8056,13 +8133,13 @@ number, prompt the user for the name of the file to save in.
\(fn &optional FILENAME)" t nil)
-(autoload (quote ebnf-print-region) "ebnf2ps" "\
+(autoload 'ebnf-print-region "ebnf2ps" "\
Generate and print a PostScript syntactic chart image of the region.
Like `ebnf-print-buffer', but prints just the current region.
\(fn FROM TO &optional FILENAME)" t nil)
-(autoload (quote ebnf-spool-directory) "ebnf2ps" "\
+(autoload 'ebnf-spool-directory "ebnf2ps" "\
Generate and spool a PostScript syntactic chart image of DIRECTORY.
If DIRECTORY is nil, it's used `default-directory'.
@@ -8074,7 +8151,7 @@ See also `ebnf-spool-buffer'.
\(fn &optional DIRECTORY)" t nil)
-(autoload (quote ebnf-spool-file) "ebnf2ps" "\
+(autoload 'ebnf-spool-file "ebnf2ps" "\
Generate and spool a PostScript syntactic chart image of the file FILE.
If optional arg DO-NOT-KILL-BUFFER-WHEN-DONE is non-nil, the buffer isn't
@@ -8084,7 +8161,7 @@ See also `ebnf-spool-buffer'.
\(fn FILE &optional DO-NOT-KILL-BUFFER-WHEN-DONE)" t nil)
-(autoload (quote ebnf-spool-buffer) "ebnf2ps" "\
+(autoload 'ebnf-spool-buffer "ebnf2ps" "\
Generate and spool a PostScript syntactic chart image of the buffer.
Like `ebnf-print-buffer' except that the PostScript image is saved in a
local buffer to be sent to the printer later.
@@ -8093,7 +8170,7 @@ Use the command `ebnf-despool' to send the spooled images to the printer.
\(fn)" t nil)
-(autoload (quote ebnf-spool-region) "ebnf2ps" "\
+(autoload 'ebnf-spool-region "ebnf2ps" "\
Generate a PostScript syntactic chart image of the region and spool locally.
Like `ebnf-spool-buffer', but spools just the current region.
@@ -8101,7 +8178,7 @@ Use the command `ebnf-despool' to send the spooled images to the printer.
\(fn FROM TO)" t nil)
-(autoload (quote ebnf-eps-directory) "ebnf2ps" "\
+(autoload 'ebnf-eps-directory "ebnf2ps" "\
Generate EPS files from EBNF files in DIRECTORY.
If DIRECTORY is nil, it's used `default-directory'.
@@ -8113,7 +8190,7 @@ See also `ebnf-eps-buffer'.
\(fn &optional DIRECTORY)" t nil)
-(autoload (quote ebnf-eps-file) "ebnf2ps" "\
+(autoload 'ebnf-eps-file "ebnf2ps" "\
Generate an EPS file from EBNF file FILE.
If optional arg DO-NOT-KILL-BUFFER-WHEN-DONE is non-nil, the buffer isn't
@@ -8123,7 +8200,7 @@ See also `ebnf-eps-buffer'.
\(fn FILE &optional DO-NOT-KILL-BUFFER-WHEN-DONE)" t nil)
-(autoload (quote ebnf-eps-buffer) "ebnf2ps" "\
+(autoload 'ebnf-eps-buffer "ebnf2ps" "\
Generate a PostScript syntactic chart image of the buffer in an EPS file.
Generate an EPS file for each production in the buffer.
@@ -8141,11 +8218,11 @@ The EPS file name has the following form:
file name used in this case will be \"ebnf--A_B_+_C.eps\".
WARNING: This function does *NOT* ask any confirmation to override existing
- files.
+ files.
\(fn)" t nil)
-(autoload (quote ebnf-eps-region) "ebnf2ps" "\
+(autoload 'ebnf-eps-region "ebnf2ps" "\
Generate a PostScript syntactic chart image of the region in an EPS file.
Generate an EPS file for each production in the region.
@@ -8163,13 +8240,13 @@ The EPS file name has the following form:
file name used in this case will be \"ebnf--A_B_+_C.eps\".
WARNING: This function does *NOT* ask any confirmation to override existing
- files.
+ files.
\(fn FROM TO)" t nil)
-(defalias (quote ebnf-despool) (quote ps-despool))
+(defalias 'ebnf-despool 'ps-despool)
-(autoload (quote ebnf-syntax-directory) "ebnf2ps" "\
+(autoload 'ebnf-syntax-directory "ebnf2ps" "\
Do a syntactic analysis of the files in DIRECTORY.
If DIRECTORY is nil, use `default-directory'.
@@ -8181,7 +8258,7 @@ See also `ebnf-syntax-buffer'.
\(fn &optional DIRECTORY)" t nil)
-(autoload (quote ebnf-syntax-file) "ebnf2ps" "\
+(autoload 'ebnf-syntax-file "ebnf2ps" "\
Do a syntactic analysis of the named FILE.
If optional arg DO-NOT-KILL-BUFFER-WHEN-DONE is non-nil, the buffer isn't
@@ -8191,43 +8268,50 @@ See also `ebnf-syntax-buffer'.
\(fn FILE &optional DO-NOT-KILL-BUFFER-WHEN-DONE)" t nil)
-(autoload (quote ebnf-syntax-buffer) "ebnf2ps" "\
+(autoload 'ebnf-syntax-buffer "ebnf2ps" "\
Do a syntactic analysis of the current buffer.
\(fn)" t nil)
-(autoload (quote ebnf-syntax-region) "ebnf2ps" "\
-Do a syntactic analysis of region.
+(autoload 'ebnf-syntax-region "ebnf2ps" "\
+Do a syntactic analysis of a region.
\(fn FROM TO)" t nil)
-(autoload (quote ebnf-setup) "ebnf2ps" "\
+(autoload 'ebnf-setup "ebnf2ps" "\
Return the current ebnf2ps setup.
\(fn)" nil nil)
-(autoload (quote ebnf-insert-style) "ebnf2ps" "\
+(autoload 'ebnf-find-style "ebnf2ps" "\
+Return style definition if NAME is already defined; otherwise, return nil.
+
+See `ebnf-style-database' documentation.
+
+\(fn NAME)" t nil)
+
+(autoload 'ebnf-insert-style "ebnf2ps" "\
Insert a new style NAME with inheritance INHERITS and values VALUES.
See `ebnf-style-database' documentation.
\(fn NAME INHERITS &rest VALUES)" t nil)
-(autoload (quote ebnf-delete-style) "ebnf2ps" "\
+(autoload 'ebnf-delete-style "ebnf2ps" "\
Delete style NAME.
See `ebnf-style-database' documentation.
\(fn NAME)" t nil)
-(autoload (quote ebnf-merge-style) "ebnf2ps" "\
+(autoload 'ebnf-merge-style "ebnf2ps" "\
Merge values of style NAME with style VALUES.
See `ebnf-style-database' documentation.
\(fn NAME &rest VALUES)" t nil)
-(autoload (quote ebnf-apply-style) "ebnf2ps" "\
+(autoload 'ebnf-apply-style "ebnf2ps" "\
Set STYLE as the current style.
Returns the old style symbol.
@@ -8236,7 +8320,7 @@ See `ebnf-style-database' documentation.
\(fn STYLE)" t nil)
-(autoload (quote ebnf-reset-style) "ebnf2ps" "\
+(autoload 'ebnf-reset-style "ebnf2ps" "\
Reset current style.
Returns the old style symbol.
@@ -8245,7 +8329,7 @@ See `ebnf-style-database' documentation.
\(fn &optional STYLE)" t nil)
-(autoload (quote ebnf-push-style) "ebnf2ps" "\
+(autoload 'ebnf-push-style "ebnf2ps" "\
Push the current style onto a stack and set STYLE as the current style.
Returns the old style symbol.
@@ -8256,7 +8340,7 @@ See `ebnf-style-database' documentation.
\(fn &optional STYLE)" t nil)
-(autoload (quote ebnf-pop-style) "ebnf2ps" "\
+(autoload 'ebnf-pop-style "ebnf2ps" "\
Pop a style from the stack of pushed styles and set it as the current style.
Returns the old style symbol.
@@ -8279,11 +8363,11 @@ See `ebnf-style-database' documentation.
;;;;;; ebrowse-tags-find-declaration-other-window ebrowse-tags-find-definition
;;;;;; ebrowse-tags-view-definition ebrowse-tags-find-declaration
;;;;;; ebrowse-tags-view-declaration ebrowse-member-mode ebrowse-electric-choose-tree
-;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (17821
-;;;;;; 5918))
+;;;;;; ebrowse-tree-mode) "ebrowse" "progmodes/ebrowse.el" (18197
+;;;;;; 21675))
;;; Generated autoloads from progmodes/ebrowse.el
-(autoload (quote ebrowse-tree-mode) "ebrowse" "\
+(autoload 'ebrowse-tree-mode "ebrowse" "\
Major mode for Ebrowse class tree buffers.
Each line corresponds to a class in a class tree.
Letters do not insert themselves, they are commands.
@@ -8295,69 +8379,69 @@ Tree mode key bindings:
\(fn)" t nil)
-(autoload (quote ebrowse-electric-choose-tree) "ebrowse" "\
+(autoload 'ebrowse-electric-choose-tree "ebrowse" "\
Return a buffer containing a tree or nil if no tree found or canceled.
\(fn)" t nil)
-(autoload (quote ebrowse-member-mode) "ebrowse" "\
+(autoload 'ebrowse-member-mode "ebrowse" "\
Major mode for Ebrowse member buffers.
\\{ebrowse-member-mode-map}
\(fn)" nil nil)
-(autoload (quote ebrowse-tags-view-declaration) "ebrowse" "\
+(autoload 'ebrowse-tags-view-declaration "ebrowse" "\
View declaration of member at point.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-find-declaration) "ebrowse" "\
+(autoload 'ebrowse-tags-find-declaration "ebrowse" "\
Find declaration of member at point.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-view-definition) "ebrowse" "\
+(autoload 'ebrowse-tags-view-definition "ebrowse" "\
View definition of member at point.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-find-definition) "ebrowse" "\
+(autoload 'ebrowse-tags-find-definition "ebrowse" "\
Find definition of member at point.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-find-declaration-other-window) "ebrowse" "\
+(autoload 'ebrowse-tags-find-declaration-other-window "ebrowse" "\
Find declaration of member at point in other window.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-view-definition-other-window) "ebrowse" "\
+(autoload 'ebrowse-tags-view-definition-other-window "ebrowse" "\
View definition of member at point in other window.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-find-definition-other-window) "ebrowse" "\
+(autoload 'ebrowse-tags-find-definition-other-window "ebrowse" "\
Find definition of member at point in other window.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-find-declaration-other-frame) "ebrowse" "\
+(autoload 'ebrowse-tags-find-declaration-other-frame "ebrowse" "\
Find definition of member at point in other frame.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-view-definition-other-frame) "ebrowse" "\
+(autoload 'ebrowse-tags-view-definition-other-frame "ebrowse" "\
View definition of member at point in other frame.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-find-definition-other-frame) "ebrowse" "\
+(autoload 'ebrowse-tags-find-definition-other-frame "ebrowse" "\
Find definition of member at point in other frame.
\(fn)" t nil)
-(autoload (quote ebrowse-tags-complete-symbol) "ebrowse" "\
+(autoload 'ebrowse-tags-complete-symbol "ebrowse" "\
Perform completion on the C++ symbol preceding point.
A second call of this function without changing point inserts the next match.
A call with prefix PREFIX reads the symbol to insert from the minibuffer with
@@ -8365,27 +8449,27 @@ completion.
\(fn PREFIX)" t nil)
-(autoload (quote ebrowse-tags-loop-continue) "ebrowse" "\
+(autoload 'ebrowse-tags-loop-continue "ebrowse" "\
Repeat last operation on files in tree.
FIRST-TIME non-nil means this is not a repetition, but the first time.
TREE-BUFFER if indirectly specifies which files to loop over.
\(fn &optional FIRST-TIME TREE-BUFFER)" t nil)
-(autoload (quote ebrowse-tags-search) "ebrowse" "\
+(autoload 'ebrowse-tags-search "ebrowse" "\
Search for REGEXP in all files in a tree.
If marked classes exist, process marked classes, only.
If regular expression is nil, repeat last search.
\(fn REGEXP)" t nil)
-(autoload (quote ebrowse-tags-query-replace) "ebrowse" "\
+(autoload 'ebrowse-tags-query-replace "ebrowse" "\
Query replace FROM with TO in all files of a class tree.
With prefix arg, process files of marked classes only.
\(fn FROM TO)" t nil)
-(autoload (quote ebrowse-tags-search-member-use) "ebrowse" "\
+(autoload 'ebrowse-tags-search-member-use "ebrowse" "\
Search for call sites of a member.
If FIX-NAME is specified, search uses of that member.
Otherwise, read a member name from the minibuffer.
@@ -8394,36 +8478,36 @@ looks like a function call to the member.
\(fn &optional FIX-NAME)" t nil)
-(autoload (quote ebrowse-back-in-position-stack) "ebrowse" "\
+(autoload 'ebrowse-back-in-position-stack "ebrowse" "\
Move backward in the position stack.
Prefix arg ARG says how much.
\(fn ARG)" t nil)
-(autoload (quote ebrowse-forward-in-position-stack) "ebrowse" "\
+(autoload 'ebrowse-forward-in-position-stack "ebrowse" "\
Move forward in the position stack.
Prefix arg ARG says how much.
\(fn ARG)" t nil)
-(autoload (quote ebrowse-electric-position-menu) "ebrowse" "\
+(autoload 'ebrowse-electric-position-menu "ebrowse" "\
List positions in the position stack in an electric buffer.
\(fn)" t nil)
-(autoload (quote ebrowse-save-tree) "ebrowse" "\
+(autoload 'ebrowse-save-tree "ebrowse" "\
Save current tree in same file it was loaded from.
\(fn)" t nil)
-(autoload (quote ebrowse-save-tree-as) "ebrowse" "\
+(autoload 'ebrowse-save-tree-as "ebrowse" "\
Write the current tree data structure to a file.
Read the file name from the minibuffer if interactive.
Otherwise, FILE-NAME specifies the file to save the tree in.
\(fn &optional FILE-NAME)" t nil)
-(autoload (quote ebrowse-statistics) "ebrowse" "\
+(autoload 'ebrowse-statistics "ebrowse" "\
Display statistics for a class tree.
\(fn)" t nil)
@@ -8431,10 +8515,10 @@ Display statistics for a class tree.
;;;***
;;;### (autoloads (electric-buffer-list) "ebuff-menu" "ebuff-menu.el"
-;;;;;; (17842 58280))
+;;;;;; (18133 2196))
;;; Generated autoloads from ebuff-menu.el
-(autoload (quote electric-buffer-list) "ebuff-menu" "\
+(autoload 'electric-buffer-list "ebuff-menu" "\
Pop up a buffer describing the set of Emacs buffers.
Vaguely like ITS lunar select buffer; combining typeoutoid buffer
listing with menuoid buffer selection.
@@ -8456,10 +8540,10 @@ Run hooks in `electric-buffer-menu-mode-hook' on entry.
;;;***
;;;### (autoloads (Electric-command-history-redo-expression) "echistory"
-;;;;;; "echistory.el" (17842 58280))
+;;;;;; "echistory.el" (18133 2196))
;;; Generated autoloads from echistory.el
-(autoload (quote Electric-command-history-redo-expression) "echistory" "\
+(autoload 'Electric-command-history-redo-expression "echistory" "\
Edit current history line in minibuffer and execute result.
With prefix arg NOCONFIRM, execute current line as-is without editing.
@@ -8467,9 +8551,20 @@ With prefix arg NOCONFIRM, execute current line as-is without editing.
;;;***
+;;;### (autoloads (ecomplete-setup) "ecomplete" "gnus/ecomplete.el"
+;;;;;; (18212 21473))
+;;; Generated autoloads from gnus/ecomplete.el
+
+(autoload 'ecomplete-setup "ecomplete" "\
+Not documented
+
+\(fn)" nil nil)
+
+;;;***
+
;;;### (autoloads (edebug-all-forms edebug-all-defs edebug-eval-top-level-form
;;;;;; edebug-basic-spec edebug-all-forms edebug-all-defs) "edebug"
-;;;;;; "emacs-lisp/edebug.el" (17952 11093))
+;;;;;; "emacs-lisp/edebug.el" (18197 21672))
;;; Generated autoloads from emacs-lisp/edebug.el
(defvar edebug-all-defs nil "\
@@ -8483,25 +8578,25 @@ variable. You may wish to make it local to each buffer with
\(make-local-variable 'edebug-all-defs) in your
`emacs-lisp-mode-hook'.")
-(custom-autoload (quote edebug-all-defs) "edebug" t)
+(custom-autoload 'edebug-all-defs "edebug" t)
(defvar edebug-all-forms nil "\
*Non-nil evaluation of all forms will instrument for Edebug.
This doesn't apply to loading or evaluations in the minibuffer.
Use the command `edebug-all-forms' to toggle the value of this option.")
-(custom-autoload (quote edebug-all-forms) "edebug" t)
+(custom-autoload 'edebug-all-forms "edebug" t)
-(autoload (quote edebug-basic-spec) "edebug" "\
+(autoload 'edebug-basic-spec "edebug" "\
Return t if SPEC uses only extant spec symbols.
An extant spec symbol is a symbol that is not a function and has a
`edebug-form-spec' property.
\(fn SPEC)" nil nil)
-(defalias (quote edebug-defun) (quote edebug-eval-top-level-form))
+(defalias 'edebug-defun 'edebug-eval-top-level-form)
-(autoload (quote edebug-eval-top-level-form) "edebug" "\
+(autoload 'edebug-eval-top-level-form "edebug" "\
Evaluate the top level form point is in, stepping through with Edebug.
This is like `eval-defun' except that it steps the code for Edebug
before evaluating it. It displays the value in the echo area
@@ -8521,12 +8616,12 @@ already is one.)
\(fn)" t nil)
-(autoload (quote edebug-all-defs) "edebug" "\
+(autoload 'edebug-all-defs "edebug" "\
Toggle edebugging of all definitions.
\(fn)" t nil)
-(autoload (quote edebug-all-forms) "edebug" "\
+(autoload 'edebug-all-forms "edebug" "\
Toggle edebugging of all forms.
\(fn)" t nil)
@@ -8542,81 +8637,81 @@ Toggle edebugging of all forms.
;;;;;; ediff-merge-directory-revisions ediff-merge-directories-with-ancestor
;;;;;; ediff-merge-directories ediff-directories3 ediff-directory-revisions
;;;;;; ediff-directories ediff-buffers3 ediff-buffers ediff-backup
-;;;;;; ediff-files3 ediff-files) "ediff" "ediff.el" (17846 30361))
+;;;;;; ediff-files3 ediff-files) "ediff" "ediff.el" (18120 34749))
;;; Generated autoloads from ediff.el
-(autoload (quote ediff-files) "ediff" "\
+(autoload 'ediff-files "ediff" "\
Run Ediff on a pair of files, FILE-A and FILE-B.
\(fn FILE-A FILE-B &optional STARTUP-HOOKS)" t nil)
-(autoload (quote ediff-files3) "ediff" "\
+(autoload 'ediff-files3 "ediff" "\
Run Ediff on three files, FILE-A, FILE-B, and FILE-C.
\(fn FILE-A FILE-B FILE-C &optional STARTUP-HOOKS)" t nil)
-(defalias (quote ediff3) (quote ediff-files3))
+(defalias 'ediff3 'ediff-files3)
-(defalias (quote ediff) (quote ediff-files))
+(defalias 'ediff 'ediff-files)
-(autoload (quote ediff-backup) "ediff" "\
+(autoload 'ediff-backup "ediff" "\
Run Ediff on FILE and its backup file.
Uses the latest backup, if there are several numerical backups.
If this file is a backup, `ediff' it with its original.
\(fn FILE)" t nil)
-(autoload (quote ediff-buffers) "ediff" "\
+(autoload 'ediff-buffers "ediff" "\
Run Ediff on a pair of buffers, BUFFER-A and BUFFER-B.
\(fn BUFFER-A BUFFER-B &optional STARTUP-HOOKS JOB-NAME)" t nil)
-(defalias (quote ebuffers) (quote ediff-buffers))
+(defalias 'ebuffers 'ediff-buffers)
-(autoload (quote ediff-buffers3) "ediff" "\
+(autoload 'ediff-buffers3 "ediff" "\
Run Ediff on three buffers, BUFFER-A, BUFFER-B, and BUFFER-C.
\(fn BUFFER-A BUFFER-B BUFFER-C &optional STARTUP-HOOKS JOB-NAME)" t nil)
-(defalias (quote ebuffers3) (quote ediff-buffers3))
+(defalias 'ebuffers3 'ediff-buffers3)
-(autoload (quote ediff-directories) "ediff" "\
+(autoload 'ediff-directories "ediff" "\
Run Ediff on a pair of directories, DIR1 and DIR2, comparing files that have
the same name in both. The third argument, REGEXP, is nil or a regular
expression; only file names that match the regexp are considered.
\(fn DIR1 DIR2 REGEXP)" t nil)
-(defalias (quote edirs) (quote ediff-directories))
+(defalias 'edirs 'ediff-directories)
-(autoload (quote ediff-directory-revisions) "ediff" "\
+(autoload 'ediff-directory-revisions "ediff" "\
Run Ediff on a directory, DIR1, comparing its files with their revisions.
The second argument, REGEXP, is a regular expression that filters the file
names. Only the files that are under revision control are taken into account.
\(fn DIR1 REGEXP)" t nil)
-(defalias (quote edir-revisions) (quote ediff-directory-revisions))
+(defalias 'edir-revisions 'ediff-directory-revisions)
-(autoload (quote ediff-directories3) "ediff" "\
+(autoload 'ediff-directories3 "ediff" "\
Run Ediff on three directories, DIR1, DIR2, and DIR3, comparing files that
have the same name in all three. The last argument, REGEXP, is nil or a
regular expression; only file names that match the regexp are considered.
\(fn DIR1 DIR2 DIR3 REGEXP)" t nil)
-(defalias (quote edirs3) (quote ediff-directories3))
+(defalias 'edirs3 'ediff-directories3)
-(autoload (quote ediff-merge-directories) "ediff" "\
+(autoload 'ediff-merge-directories "ediff" "\
Run Ediff on a pair of directories, DIR1 and DIR2, merging files that have
the same name in both. The third argument, REGEXP, is nil or a regular
expression; only file names that match the regexp are considered.
\(fn DIR1 DIR2 REGEXP &optional MERGE-AUTOSTORE-DIR)" t nil)
-(defalias (quote edirs-merge) (quote ediff-merge-directories))
+(defalias 'edirs-merge 'ediff-merge-directories)
-(autoload (quote ediff-merge-directories-with-ancestor) "ediff" "\
+(autoload 'ediff-merge-directories-with-ancestor "ediff" "\
Merge files in directories DIR1 and DIR2 using files in ANCESTOR-DIR as ancestors.
Ediff merges files that have identical names in DIR1, DIR2. If a pair of files
in DIR1 and DIR2 doesn't have an ancestor in ANCESTOR-DIR, Ediff will merge
@@ -8625,27 +8720,27 @@ only file names that match the regexp are considered.
\(fn DIR1 DIR2 ANCESTOR-DIR REGEXP &optional MERGE-AUTOSTORE-DIR)" t nil)
-(autoload (quote ediff-merge-directory-revisions) "ediff" "\
+(autoload 'ediff-merge-directory-revisions "ediff" "\
Run Ediff on a directory, DIR1, merging its files with their revisions.
The second argument, REGEXP, is a regular expression that filters the file
names. Only the files that are under revision control are taken into account.
\(fn DIR1 REGEXP &optional MERGE-AUTOSTORE-DIR)" t nil)
-(defalias (quote edir-merge-revisions) (quote ediff-merge-directory-revisions))
+(defalias 'edir-merge-revisions 'ediff-merge-directory-revisions)
-(autoload (quote ediff-merge-directory-revisions-with-ancestor) "ediff" "\
+(autoload 'ediff-merge-directory-revisions-with-ancestor "ediff" "\
Run Ediff on a directory, DIR1, merging its files with their revisions and ancestors.
The second argument, REGEXP, is a regular expression that filters the file
names. Only the files that are under revision control are taken into account.
\(fn DIR1 REGEXP &optional MERGE-AUTOSTORE-DIR)" t nil)
-(defalias (quote edir-merge-revisions-with-ancestor) (quote ediff-merge-directory-revisions-with-ancestor))
+(defalias 'edir-merge-revisions-with-ancestor 'ediff-merge-directory-revisions-with-ancestor)
-(defalias (quote edirs-merge-with-ancestor) (quote ediff-merge-directories-with-ancestor))
+(defalias 'edirs-merge-with-ancestor 'ediff-merge-directories-with-ancestor)
-(autoload (quote ediff-windows-wordwise) "ediff" "\
+(autoload 'ediff-windows-wordwise "ediff" "\
Compare WIND-A and WIND-B, which are selected by clicking, wordwise.
With prefix argument, DUMB-MODE, or on a non-windowing display, works as
follows:
@@ -8654,7 +8749,7 @@ If WIND-B is nil, use window next to WIND-A.
\(fn DUMB-MODE &optional WIND-A WIND-B STARTUP-HOOKS)" t nil)
-(autoload (quote ediff-windows-linewise) "ediff" "\
+(autoload 'ediff-windows-linewise "ediff" "\
Compare WIND-A and WIND-B, which are selected by clicking, linewise.
With prefix argument, DUMB-MODE, or on a non-windowing display, works as
follows:
@@ -8663,7 +8758,7 @@ If WIND-B is nil, use window next to WIND-A.
\(fn DUMB-MODE &optional WIND-A WIND-B STARTUP-HOOKS)" t nil)
-(autoload (quote ediff-regions-wordwise) "ediff" "\
+(autoload 'ediff-regions-wordwise "ediff" "\
Run Ediff on a pair of regions in specified buffers.
Regions (i.e., point and mark) can be set in advance or marked interactively.
This function is effective only for relatively small regions, up to 200
@@ -8671,7 +8766,7 @@ lines. For large regions, use `ediff-regions-linewise'.
\(fn BUFFER-A BUFFER-B &optional STARTUP-HOOKS)" t nil)
-(autoload (quote ediff-regions-linewise) "ediff" "\
+(autoload 'ediff-regions-linewise "ediff" "\
Run Ediff on a pair of regions in specified buffers.
Regions (i.e., point and mark) can be set in advance or marked interactively.
Each region is enlarged to contain full lines.
@@ -8680,52 +8775,52 @@ lines. For small regions, use `ediff-regions-wordwise'.
\(fn BUFFER-A BUFFER-B &optional STARTUP-HOOKS)" t nil)
-(defalias (quote ediff-merge) (quote ediff-merge-files))
+(defalias 'ediff-merge 'ediff-merge-files)
-(autoload (quote ediff-merge-files) "ediff" "\
+(autoload 'ediff-merge-files "ediff" "\
Merge two files without ancestor.
\(fn FILE-A FILE-B &optional STARTUP-HOOKS MERGE-BUFFER-FILE)" t nil)
-(autoload (quote ediff-merge-files-with-ancestor) "ediff" "\
+(autoload 'ediff-merge-files-with-ancestor "ediff" "\
Merge two files with ancestor.
\(fn FILE-A FILE-B FILE-ANCESTOR &optional STARTUP-HOOKS MERGE-BUFFER-FILE)" t nil)
-(defalias (quote ediff-merge-with-ancestor) (quote ediff-merge-files-with-ancestor))
+(defalias 'ediff-merge-with-ancestor 'ediff-merge-files-with-ancestor)
-(autoload (quote ediff-merge-buffers) "ediff" "\
+(autoload 'ediff-merge-buffers "ediff" "\
Merge buffers without ancestor.
\(fn BUFFER-A BUFFER-B &optional STARTUP-HOOKS JOB-NAME MERGE-BUFFER-FILE)" t nil)
-(autoload (quote ediff-merge-buffers-with-ancestor) "ediff" "\
+(autoload 'ediff-merge-buffers-with-ancestor "ediff" "\
Merge buffers with ancestor.
\(fn BUFFER-A BUFFER-B BUFFER-ANCESTOR &optional STARTUP-HOOKS JOB-NAME MERGE-BUFFER-FILE)" t nil)
-(autoload (quote ediff-merge-revisions) "ediff" "\
+(autoload 'ediff-merge-revisions "ediff" "\
Run Ediff by merging two revisions of a file.
The file is the optional FILE argument or the file visited by the current
buffer.
\(fn &optional FILE STARTUP-HOOKS MERGE-BUFFER-FILE)" t nil)
-(autoload (quote ediff-merge-revisions-with-ancestor) "ediff" "\
+(autoload 'ediff-merge-revisions-with-ancestor "ediff" "\
Run Ediff by merging two revisions of a file with a common ancestor.
The file is the optional FILE argument or the file visited by the current
buffer.
\(fn &optional FILE STARTUP-HOOKS MERGE-BUFFER-FILE)" t nil)
-(autoload (quote run-ediff-from-cvs-buffer) "ediff" "\
+(autoload 'run-ediff-from-cvs-buffer "ediff" "\
Run Ediff-merge on appropriate revisions of the selected file.
First run after `M-x cvs-update'. Then place the cursor on a line describing a
file and then run `run-ediff-from-cvs-buffer'.
\(fn POS)" t nil)
-(autoload (quote ediff-patch-file) "ediff" "\
+(autoload 'ediff-patch-file "ediff" "\
Run Ediff by patching SOURCE-FILENAME.
If optional PATCH-BUF is given, use the patch in that buffer
and don't ask the user.
@@ -8734,7 +8829,7 @@ buffer. If odd -- assume it is in a file.
\(fn &optional ARG PATCH-BUF)" t nil)
-(autoload (quote ediff-patch-buffer) "ediff" "\
+(autoload 'ediff-patch-buffer "ediff" "\
Run Ediff by patching the buffer specified at prompt.
Without the optional prefix ARG, asks if the patch is in some buffer and
prompts for the buffer or a file, depending on the answer.
@@ -8745,11 +8840,11 @@ patch. If not given, the user is prompted according to the prefix argument.
\(fn &optional ARG PATCH-BUF)" t nil)
-(defalias (quote epatch) (quote ediff-patch-file))
+(defalias 'epatch 'ediff-patch-file)
-(defalias (quote epatch-buffer) (quote ediff-patch-buffer))
+(defalias 'epatch-buffer 'ediff-patch-buffer)
-(autoload (quote ediff-revision) "ediff" "\
+(autoload 'ediff-revision "ediff" "\
Run Ediff by comparing versions of a file.
The file is an optional FILE argument or the file entered at the prompt.
Default: the file visited by the current buffer.
@@ -8757,15 +8852,15 @@ Uses `vc.el' or `rcs.el' depending on `ediff-version-control-package'.
\(fn &optional FILE STARTUP-HOOKS)" t nil)
-(defalias (quote erevision) (quote ediff-revision))
+(defalias 'erevision 'ediff-revision)
-(autoload (quote ediff-version) "ediff" "\
+(autoload 'ediff-version "ediff" "\
Return string describing the version of Ediff.
When called interactively, displays the version.
\(fn)" t nil)
-(autoload (quote ediff-documentation) "ediff" "\
+(autoload 'ediff-documentation "ediff" "\
Display Ediff's manual.
With optional NODE, goes to that node.
@@ -8774,53 +8869,53 @@ With optional NODE, goes to that node.
;;;***
;;;### (autoloads (ediff-customize) "ediff-help" "ediff-help.el"
-;;;;;; (17842 58280))
+;;;;;; (18202 3993))
;;; Generated autoloads from ediff-help.el
-(autoload (quote ediff-customize) "ediff-help" "\
+(autoload 'ediff-customize "ediff-help" "\
Not documented
\(fn)" t nil)
;;;***
-;;;### (autoloads nil "ediff-hook" "ediff-hook.el" (17842 58280))
+;;;### (autoloads nil "ediff-hook" "ediff-hook.el" (18203 37786))
;;; Generated autoloads from ediff-hook.el
(defvar ediff-window-setup-function)
- (defmacro ediff-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form) (if (string-match "XEmacs" emacs-version) xemacs-form emacs-form))
+ (defmacro ediff-cond-compile-for-xemacs-or-emacs (xemacs-form emacs-form) (if (featurep 'xemacs) xemacs-form emacs-form))
-(ediff-cond-compile-for-xemacs-or-emacs (defun ediff-xemacs-init-menus nil (if (featurep (quote menubar)) (progn (add-submenu (quote ("Tools")) ediff-menu "OO-Browser...") (add-submenu (quote ("Tools")) ediff-merge-menu "OO-Browser...") (add-submenu (quote ("Tools")) epatch-menu "OO-Browser...") (add-submenu (quote ("Tools")) ediff-misc-menu "OO-Browser...") (add-menu-button (quote ("Tools")) "-------" "OO-Browser...")))) nil)
+(ediff-cond-compile-for-xemacs-or-emacs (defun ediff-xemacs-init-menus nil (if (featurep 'menubar) (progn (add-submenu '("Tools") ediff-menu "OO-Browser...") (add-submenu '("Tools") ediff-merge-menu "OO-Browser...") (add-submenu '("Tools") epatch-menu "OO-Browser...") (add-submenu '("Tools") ediff-misc-menu "OO-Browser...") (add-menu-button '("Tools") "-------" "OO-Browser...")))) nil)
-(ediff-cond-compile-for-xemacs-or-emacs (progn (defvar ediff-menu (quote ("Compare" ["Two Files..." ediff-files t] ["Two Buffers..." ediff-buffers t] ["Three Files..." ediff-files3 t] ["Three Buffers..." ediff-buffers3 t] "---" ["Two Directories..." ediff-directories t] ["Three Directories..." ediff-directories3 t] "---" ["File with Revision..." ediff-revision t] ["Directory Revisions..." ediff-directory-revisions t] "---" ["Windows Word-by-word..." ediff-windows-wordwise t] ["Windows Line-by-line..." ediff-windows-linewise t] "---" ["Regions Word-by-word..." ediff-regions-wordwise t] ["Regions Line-by-line..." ediff-regions-linewise t]))) (defvar ediff-merge-menu (quote ("Merge" ["Files..." ediff-merge-files t] ["Files with Ancestor..." ediff-merge-files-with-ancestor t] ["Buffers..." ediff-merge-buffers t] ["Buffers with Ancestor..." ediff-merge-buffers-with-ancestor t] "---" ["Directories..." ediff-merge-directories t] ["Directories with Ancestor..." ediff-merge-directories-with-ancestor t] "---" ["Revisions..." ediff-merge-revisions t] ["Revisions with Ancestor..." ediff-merge-revisions-with-ancestor t] ["Directory Revisions..." ediff-merge-directory-revisions t] ["Directory Revisions with Ancestor..." ediff-merge-directory-revisions-with-ancestor t]))) (defvar epatch-menu (quote ("Apply Patch" ["To a file..." ediff-patch-file t] ["To a buffer..." ediff-patch-buffer t]))) (defvar ediff-misc-menu (quote ("Ediff Miscellanea" ["Ediff Manual" ediff-documentation t] ["Customize Ediff" ediff-customize t] ["List Ediff Sessions" ediff-show-registry t] ["Use separate frame for Ediff control buffer" ediff-toggle-multiframe :style toggle :selected (if (and (featurep (quote ediff-util)) (boundp (quote ediff-window-setup-function))) (eq ediff-window-setup-function (quote ediff-setup-windows-multiframe)))] ["Use a toolbar with Ediff control buffer" ediff-toggle-use-toolbar :style toggle :selected (if (featurep (quote ediff-tbar)) (ediff-use-toolbar-p))]))) (if (and (featurep (quote menubar)) (not (featurep (quote infodock))) (not (featurep (quote ediff-hook)))) (ediff-xemacs-init-menus))) (if (featurep (quote menu-bar)) (progn (defvar menu-bar-ediff-misc-menu (make-sparse-keymap "Ediff Miscellanea")) (fset (quote menu-bar-ediff-misc-menu) (symbol-value (quote menu-bar-ediff-misc-menu))) (defvar menu-bar-epatch-menu (make-sparse-keymap "Apply Patch")) (fset (quote menu-bar-epatch-menu) (symbol-value (quote menu-bar-epatch-menu))) (defvar menu-bar-ediff-merge-menu (make-sparse-keymap "Merge")) (fset (quote menu-bar-ediff-merge-menu) (symbol-value (quote menu-bar-ediff-merge-menu))) (defvar menu-bar-ediff-menu (make-sparse-keymap "Compare")) (fset (quote menu-bar-ediff-menu) (symbol-value (quote menu-bar-ediff-menu))) (define-key menu-bar-ediff-menu [window] (quote ("This Window and Next Window" . compare-windows))) (define-key menu-bar-ediff-menu [ediff-windows-linewise] (quote ("Windows Line-by-line..." . ediff-windows-linewise))) (define-key menu-bar-ediff-menu [ediff-windows-wordwise] (quote ("Windows Word-by-word..." . ediff-windows-wordwise))) (define-key menu-bar-ediff-menu [separator-ediff-windows] (quote ("--"))) (define-key menu-bar-ediff-menu [ediff-regions-linewise] (quote ("Regions Line-by-line..." . ediff-regions-linewise))) (define-key menu-bar-ediff-menu [ediff-regions-wordwise] (quote ("Regions Word-by-word..." . ediff-regions-wordwise))) (define-key menu-bar-ediff-menu [separator-ediff-regions] (quote ("--"))) (define-key menu-bar-ediff-menu [ediff-dir-revision] (quote ("Directory Revisions..." . ediff-directory-revisions))) (define-key menu-bar-ediff-menu [ediff-revision] (quote ("File with Revision..." . ediff-revision))) (define-key menu-bar-ediff-menu [separator-ediff-directories] (quote ("--"))) (define-key menu-bar-ediff-menu [ediff-directories3] (quote ("Three Directories..." . ediff-directories3))) (define-key menu-bar-ediff-menu [ediff-directories] (quote ("Two Directories..." . ediff-directories))) (define-key menu-bar-ediff-menu [separator-ediff-files] (quote ("--"))) (define-key menu-bar-ediff-menu [ediff-buffers3] (quote ("Three Buffers..." . ediff-buffers3))) (define-key menu-bar-ediff-menu [ediff-files3] (quote ("Three Files..." . ediff-files3))) (define-key menu-bar-ediff-menu [ediff-buffers] (quote ("Two Buffers..." . ediff-buffers))) (define-key menu-bar-ediff-menu [ediff-files] (quote ("Two Files..." . ediff-files))) (define-key menu-bar-ediff-merge-menu [ediff-merge-dir-revisions-with-ancestor] (quote ("Directory Revisions with Ancestor..." . ediff-merge-directory-revisions-with-ancestor))) (define-key menu-bar-ediff-merge-menu [ediff-merge-dir-revisions] (quote ("Directory Revisions..." . ediff-merge-directory-revisions))) (define-key menu-bar-ediff-merge-menu [ediff-merge-revisions-with-ancestor] (quote ("Revisions with Ancestor..." . ediff-merge-revisions-with-ancestor))) (define-key menu-bar-ediff-merge-menu [ediff-merge-revisions] (quote ("Revisions..." . ediff-merge-revisions))) (define-key menu-bar-ediff-merge-menu [separator-ediff-merge] (quote ("--"))) (define-key menu-bar-ediff-merge-menu [ediff-merge-directories-with-ancestor] (quote ("Directories with Ancestor..." . ediff-merge-directories-with-ancestor))) (define-key menu-bar-ediff-merge-menu [ediff-merge-directories] (quote ("Directories..." . ediff-merge-directories))) (define-key menu-bar-ediff-merge-menu [separator-ediff-merge-dirs] (quote ("--"))) (define-key menu-bar-ediff-merge-menu [ediff-merge-buffers-with-ancestor] (quote ("Buffers with Ancestor..." . ediff-merge-buffers-with-ancestor))) (define-key menu-bar-ediff-merge-menu [ediff-merge-buffers] (quote ("Buffers..." . ediff-merge-buffers))) (define-key menu-bar-ediff-merge-menu [ediff-merge-files-with-ancestor] (quote ("Files with Ancestor..." . ediff-merge-files-with-ancestor))) (define-key menu-bar-ediff-merge-menu [ediff-merge-files] (quote ("Files..." . ediff-merge-files))) (define-key menu-bar-epatch-menu [ediff-patch-buffer] (quote ("To a Buffer..." . ediff-patch-buffer))) (define-key menu-bar-epatch-menu [ediff-patch-file] (quote ("To a File..." . ediff-patch-file))) (define-key menu-bar-ediff-misc-menu [emultiframe] (quote ("Toggle use of separate control buffer frame" . ediff-toggle-multiframe))) (define-key menu-bar-ediff-misc-menu [eregistry] (quote ("List Ediff Sessions" . ediff-show-registry))) (define-key menu-bar-ediff-misc-menu [ediff-cust] (quote ("Customize Ediff" . ediff-customize))) (define-key menu-bar-ediff-misc-menu [ediff-doc] (quote ("Ediff Manual" . ediff-documentation))))))
+(ediff-cond-compile-for-xemacs-or-emacs (progn (defvar ediff-menu '("Compare" ["Two Files..." ediff-files t] ["Two Buffers..." ediff-buffers t] ["Three Files..." ediff-files3 t] ["Three Buffers..." ediff-buffers3 t] "---" ["Two Directories..." ediff-directories t] ["Three Directories..." ediff-directories3 t] "---" ["File with Revision..." ediff-revision t] ["Directory Revisions..." ediff-directory-revisions t] "---" ["Windows Word-by-word..." ediff-windows-wordwise t] ["Windows Line-by-line..." ediff-windows-linewise t] "---" ["Regions Word-by-word..." ediff-regions-wordwise t] ["Regions Line-by-line..." ediff-regions-linewise t])) (defvar ediff-merge-menu '("Merge" ["Files..." ediff-merge-files t] ["Files with Ancestor..." ediff-merge-files-with-ancestor t] ["Buffers..." ediff-merge-buffers t] ["Buffers with Ancestor..." ediff-merge-buffers-with-ancestor t] "---" ["Directories..." ediff-merge-directories t] ["Directories with Ancestor..." ediff-merge-directories-with-ancestor t] "---" ["Revisions..." ediff-merge-revisions t] ["Revisions with Ancestor..." ediff-merge-revisions-with-ancestor t] ["Directory Revisions..." ediff-merge-directory-revisions t] ["Directory Revisions with Ancestor..." ediff-merge-directory-revisions-with-ancestor t])) (defvar epatch-menu '("Apply Patch" ["To a file..." ediff-patch-file t] ["To a buffer..." ediff-patch-buffer t])) (defvar ediff-misc-menu '("Ediff Miscellanea" ["Ediff Manual" ediff-documentation t] ["Customize Ediff" ediff-customize t] ["List Ediff Sessions" ediff-show-registry t] ["Use separate frame for Ediff control buffer" ediff-toggle-multiframe :style toggle :selected (if (and (featurep 'ediff-util) (boundp 'ediff-window-setup-function)) (eq ediff-window-setup-function 'ediff-setup-windows-multiframe))] ["Use a toolbar with Ediff control buffer" ediff-toggle-use-toolbar :style toggle :selected (if (featurep 'ediff-tbar) (ediff-use-toolbar-p))])) (if (and (featurep 'menubar) (not (featurep 'infodock)) (not (featurep 'ediff-hook))) (ediff-xemacs-init-menus))) (if (featurep 'menu-bar) (progn (defvar menu-bar-ediff-misc-menu (make-sparse-keymap "Ediff Miscellanea")) (fset 'menu-bar-ediff-misc-menu (symbol-value 'menu-bar-ediff-misc-menu)) (defvar menu-bar-epatch-menu (make-sparse-keymap "Apply Patch")) (fset 'menu-bar-epatch-menu (symbol-value 'menu-bar-epatch-menu)) (defvar menu-bar-ediff-merge-menu (make-sparse-keymap "Merge")) (fset 'menu-bar-ediff-merge-menu (symbol-value 'menu-bar-ediff-merge-menu)) (defvar menu-bar-ediff-menu (make-sparse-keymap "Compare")) (fset 'menu-bar-ediff-menu (symbol-value 'menu-bar-ediff-menu)) (define-key menu-bar-ediff-menu [window] '("This Window and Next Window" . compare-windows)) (define-key menu-bar-ediff-menu [ediff-windows-linewise] '("Windows Line-by-line..." . ediff-windows-linewise)) (define-key menu-bar-ediff-menu [ediff-windows-wordwise] '("Windows Word-by-word..." . ediff-windows-wordwise)) (define-key menu-bar-ediff-menu [separator-ediff-windows] '("--")) (define-key menu-bar-ediff-menu [ediff-regions-linewise] '("Regions Line-by-line..." . ediff-regions-linewise)) (define-key menu-bar-ediff-menu [ediff-regions-wordwise] '("Regions Word-by-word..." . ediff-regions-wordwise)) (define-key menu-bar-ediff-menu [separator-ediff-regions] '("--")) (define-key menu-bar-ediff-menu [ediff-dir-revision] '("Directory Revisions..." . ediff-directory-revisions)) (define-key menu-bar-ediff-menu [ediff-revision] '("File with Revision..." . ediff-revision)) (define-key menu-bar-ediff-menu [separator-ediff-directories] '("--")) (define-key menu-bar-ediff-menu [ediff-directories3] '("Three Directories..." . ediff-directories3)) (define-key menu-bar-ediff-menu [ediff-directories] '("Two Directories..." . ediff-directories)) (define-key menu-bar-ediff-menu [separator-ediff-files] '("--")) (define-key menu-bar-ediff-menu [ediff-buffers3] '("Three Buffers..." . ediff-buffers3)) (define-key menu-bar-ediff-menu [ediff-files3] '("Three Files..." . ediff-files3)) (define-key menu-bar-ediff-menu [ediff-buffers] '("Two Buffers..." . ediff-buffers)) (define-key menu-bar-ediff-menu [ediff-files] '("Two Files..." . ediff-files)) (define-key menu-bar-ediff-merge-menu [ediff-merge-dir-revisions-with-ancestor] '("Directory Revisions with Ancestor..." . ediff-merge-directory-revisions-with-ancestor)) (define-key menu-bar-ediff-merge-menu [ediff-merge-dir-revisions] '("Directory Revisions..." . ediff-merge-directory-revisions)) (define-key menu-bar-ediff-merge-menu [ediff-merge-revisions-with-ancestor] '("Revisions with Ancestor..." . ediff-merge-revisions-with-ancestor)) (define-key menu-bar-ediff-merge-menu [ediff-merge-revisions] '("Revisions..." . ediff-merge-revisions)) (define-key menu-bar-ediff-merge-menu [separator-ediff-merge] '("--")) (define-key menu-bar-ediff-merge-menu [ediff-merge-directories-with-ancestor] '("Directories with Ancestor..." . ediff-merge-directories-with-ancestor)) (define-key menu-bar-ediff-merge-menu [ediff-merge-directories] '("Directories..." . ediff-merge-directories)) (define-key menu-bar-ediff-merge-menu [separator-ediff-merge-dirs] '("--")) (define-key menu-bar-ediff-merge-menu [ediff-merge-buffers-with-ancestor] '("Buffers with Ancestor..." . ediff-merge-buffers-with-ancestor)) (define-key menu-bar-ediff-merge-menu [ediff-merge-buffers] '("Buffers..." . ediff-merge-buffers)) (define-key menu-bar-ediff-merge-menu [ediff-merge-files-with-ancestor] '("Files with Ancestor..." . ediff-merge-files-with-ancestor)) (define-key menu-bar-ediff-merge-menu [ediff-merge-files] '("Files..." . ediff-merge-files)) (define-key menu-bar-epatch-menu [ediff-patch-buffer] '("To a Buffer..." . ediff-patch-buffer)) (define-key menu-bar-epatch-menu [ediff-patch-file] '("To a File..." . ediff-patch-file)) (define-key menu-bar-ediff-misc-menu [emultiframe] '("Toggle use of separate control buffer frame" . ediff-toggle-multiframe)) (define-key menu-bar-ediff-misc-menu [eregistry] '("List Ediff Sessions" . ediff-show-registry)) (define-key menu-bar-ediff-misc-menu [ediff-cust] '("Customize Ediff" . ediff-customize)) (define-key menu-bar-ediff-misc-menu [ediff-doc] '("Ediff Manual" . ediff-documentation)))))
;;;***
;;;### (autoloads (ediff-show-registry) "ediff-mult" "ediff-mult.el"
-;;;;;; (17842 58279))
+;;;;;; (18169 11930))
;;; Generated autoloads from ediff-mult.el
-(autoload (quote ediff-show-registry) "ediff-mult" "\
+(autoload 'ediff-show-registry "ediff-mult" "\
Display Ediff's registry.
\(fn)" t nil)
-(defalias (quote eregistry) (quote ediff-show-registry))
+(defalias 'eregistry 'ediff-show-registry)
;;;***
;;;### (autoloads (ediff-toggle-use-toolbar ediff-toggle-multiframe)
-;;;;;; "ediff-util" "ediff-util.el" (17846 30361))
+;;;;;; "ediff-util" "ediff-util.el" (18214 4759))
;;; Generated autoloads from ediff-util.el
-(autoload (quote ediff-toggle-multiframe) "ediff-util" "\
+(autoload 'ediff-toggle-multiframe "ediff-util" "\
Switch from multiframe display to single-frame display and back.
To change the default, set the variable `ediff-window-setup-function',
which see.
\(fn)" t nil)
-(autoload (quote ediff-toggle-use-toolbar) "ediff-util" "\
+(autoload 'ediff-toggle-use-toolbar "ediff-util" "\
Enable or disable Ediff toolbar.
Works only in versions of Emacs that support toolbars.
To change the default, set the variable `ediff-use-toolbar-p', which see.
@@ -8831,14 +8926,14 @@ To change the default, set the variable `ediff-use-toolbar-p', which see.
;;;### (autoloads (format-kbd-macro read-kbd-macro edit-named-kbd-macro
;;;;;; edit-last-kbd-macro edit-kbd-macro) "edmacro" "edmacro.el"
-;;;;;; (17842 58279))
+;;;;;; (18133 2196))
;;; Generated autoloads from edmacro.el
(defvar edmacro-eight-bits nil "\
*Non-nil if edit-kbd-macro should leave 8-bit characters intact.
Default nil means to write characters above \\177 in octal notation.")
-(autoload (quote edit-kbd-macro) "edmacro" "\
+(autoload 'edit-kbd-macro "edmacro" "\
Edit a keyboard macro.
At the prompt, type any key sequence which is bound to a keyboard macro.
Or, type `C-x e' or RET to edit the last keyboard macro, `C-h l' to edit
@@ -8848,17 +8943,17 @@ With a prefix argument, format the macro in a more concise way.
\(fn KEYS &optional PREFIX FINISH-HOOK STORE-HOOK)" t nil)
-(autoload (quote edit-last-kbd-macro) "edmacro" "\
+(autoload 'edit-last-kbd-macro "edmacro" "\
Edit the most recently defined keyboard macro.
\(fn &optional PREFIX)" t nil)
-(autoload (quote edit-named-kbd-macro) "edmacro" "\
+(autoload 'edit-named-kbd-macro "edmacro" "\
Edit a keyboard macro which has been given a name by `name-last-kbd-macro'.
\(fn &optional PREFIX)" t nil)
-(autoload (quote read-kbd-macro) "edmacro" "\
+(autoload 'read-kbd-macro "edmacro" "\
Read the region as a keyboard macro definition.
The region is interpreted as spelled-out keystrokes, e.g., \"M-x abc RET\".
See documentation for `edmacro-mode' for details.
@@ -8872,7 +8967,7 @@ Second argument NEED-VECTOR means to return an event vector always.
\(fn START &optional END)" t nil)
-(autoload (quote format-kbd-macro) "edmacro" "\
+(autoload 'format-kbd-macro "edmacro" "\
Return the keyboard macro MACRO as a human-readable string.
This string is suitable for passing to `read-kbd-macro'.
Second argument VERBOSE means to put one command per line with comments.
@@ -8884,17 +8979,17 @@ or nil, use a compact 80-column format.
;;;***
;;;### (autoloads (edt-emulation-on edt-set-scroll-margins) "edt"
-;;;;;; "emulation/edt.el" (17842 54264))
+;;;;;; "emulation/edt.el" (18212 54459))
;;; Generated autoloads from emulation/edt.el
-(autoload (quote edt-set-scroll-margins) "edt" "\
+(autoload 'edt-set-scroll-margins "edt" "\
Set scroll margins.
Argument TOP is the top margin in number of lines or percent of window.
Argument BOTTOM is the bottom margin in number of lines or percent of window.
\(fn TOP BOTTOM)" t nil)
-(autoload (quote edt-emulation-on) "edt" "\
+(autoload 'edt-emulation-on "edt" "\
Turn on EDT Emulation.
\(fn)" t nil)
@@ -8902,10 +8997,10 @@ Turn on EDT Emulation.
;;;***
;;;### (autoloads (electric-helpify with-electric-help) "ehelp" "ehelp.el"
-;;;;;; (17873 45892))
+;;;;;; (18088 55083))
;;; Generated autoloads from ehelp.el
-(autoload (quote with-electric-help) "ehelp" "\
+(autoload 'with-electric-help "ehelp" "\
Pop up an \"electric\" help buffer.
THUNK is a function of no arguments which is called to initialize the
contents of BUFFER. BUFFER defaults to `*Help*'. BUFFER will be
@@ -8931,7 +9026,7 @@ BUFFER is put into `default-major-mode' (or `fundamental-mode').
\(fn THUNK &optional BUFFER NOERASE MINHEIGHT)" nil nil)
-(autoload (quote electric-helpify) "ehelp" "\
+(autoload 'electric-helpify "ehelp" "\
Not documented
\(fn FUN &optional NAME)" nil nil)
@@ -8939,15 +9034,15 @@ Not documented
;;;***
;;;### (autoloads (turn-on-eldoc-mode eldoc-mode eldoc-minor-mode-string)
-;;;;;; "eldoc" "emacs-lisp/eldoc.el" (17992 30878))
+;;;;;; "eldoc" "emacs-lisp/eldoc.el" (18173 8195))
;;; Generated autoloads from emacs-lisp/eldoc.el
(defvar eldoc-minor-mode-string " ElDoc" "\
*String to display in mode line when Eldoc Mode is enabled; nil for none.")
-(custom-autoload (quote eldoc-minor-mode-string) "eldoc" t)
+(custom-autoload 'eldoc-minor-mode-string "eldoc" t)
-(autoload (quote eldoc-mode) "eldoc" "\
+(autoload 'eldoc-mode "eldoc" "\
Toggle ElDoc mode on or off.
In ElDoc mode, the echo area displays information about a
function or variable in the text where point is. If point is
@@ -8959,7 +9054,7 @@ With prefix ARG, turn ElDoc mode on if and only if ARG is positive.
\(fn &optional ARG)" t nil)
-(autoload (quote turn-on-eldoc-mode) "eldoc" "\
+(autoload 'turn-on-eldoc-mode "eldoc" "\
Unequivocally turn on ElDoc mode (see command `eldoc-mode').
\(fn)" t nil)
@@ -8977,11 +9072,11 @@ Emacs Lisp mode) that support Eldoc.")
;;;***
-;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (elide-head) "elide-head" "elide-head.el" (18088
+;;;;;; 55083))
;;; Generated autoloads from elide-head.el
-(autoload (quote elide-head) "elide-head" "\
+(autoload 'elide-head "elide-head" "\
Hide header material in buffer according to `elide-head-headers-to-hide'.
The header is made invisible with an overlay. With a prefix arg, show
@@ -8994,10 +9089,10 @@ This is suitable as an entry on `find-file-hook' or appropriate mode hooks.
;;;***
;;;### (autoloads (elint-initialize) "elint" "emacs-lisp/elint.el"
-;;;;;; (17842 54152))
+;;;;;; (18173 8195))
;;; Generated autoloads from emacs-lisp/elint.el
-(autoload (quote elint-initialize) "elint" "\
+(autoload 'elint-initialize "elint" "\
Initialize elint.
\(fn)" t nil)
@@ -9005,23 +9100,23 @@ Initialize elint.
;;;***
;;;### (autoloads (elp-results elp-instrument-package elp-instrument-list
-;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (17842
-;;;;;; 54152))
+;;;;;; elp-instrument-function) "elp" "emacs-lisp/elp.el" (18173
+;;;;;; 8195))
;;; Generated autoloads from emacs-lisp/elp.el
-(autoload (quote elp-instrument-function) "elp" "\
+(autoload 'elp-instrument-function "elp" "\
Instrument FUNSYM for profiling.
FUNSYM must be a symbol of a defined function.
\(fn FUNSYM)" t nil)
-(autoload (quote elp-instrument-list) "elp" "\
+(autoload 'elp-instrument-list "elp" "\
Instrument for profiling, all functions in `elp-function-list'.
Use optional LIST if provided instead.
\(fn &optional LIST)" t nil)
-(autoload (quote elp-instrument-package) "elp" "\
+(autoload 'elp-instrument-package "elp" "\
Instrument for profiling, all functions which start with PREFIX.
For example, to instrument all ELP functions, do the following:
@@ -9029,7 +9124,7 @@ For example, to instrument all ELP functions, do the following:
\(fn PREFIX)" t nil)
-(autoload (quote elp-results) "elp" "\
+(autoload 'elp-results "elp" "\
Display current profiling results.
If `elp-reset-after-results' is non-nil, then current profiling
information for all instrumented functions are reset after results are
@@ -9040,10 +9135,10 @@ displayed.
;;;***
;;;### (autoloads (report-emacs-bug) "emacsbug" "mail/emacsbug.el"
-;;;;;; (17907 23437))
+;;;;;; (18173 8195))
;;; Generated autoloads from mail/emacsbug.el
-(autoload (quote report-emacs-bug) "emacsbug" "\
+(autoload 'report-emacs-bug "emacsbug" "\
Report a bug in GNU Emacs.
Prompts for bug subject. Leaves you in a mail buffer.
@@ -9055,7 +9150,7 @@ Prompts for bug subject. Leaves you in a mail buffer.
;;;;;; emerge-revisions emerge-files-with-ancestor-remote emerge-files-remote
;;;;;; emerge-files-with-ancestor-command emerge-files-command emerge-buffers-with-ancestor
;;;;;; emerge-buffers emerge-files-with-ancestor emerge-files) "emerge"
-;;;;;; "emerge.el" (17166 62192))
+;;;;;; "emerge.el" (18200 51264))
;;; Generated autoloads from emerge.el
(defvar menu-bar-emerge-menu (make-sparse-keymap "Emerge"))
@@ -9075,97 +9170,97 @@ Prompts for bug subject. Leaves you in a mail buffer.
(define-key menu-bar-emerge-menu [emerge-buffers]
'("Buffers..." . emerge-buffers))
-(autoload (quote emerge-files) "emerge" "\
+(autoload 'emerge-files "emerge" "\
Run Emerge on two files.
\(fn ARG FILE-A FILE-B FILE-OUT &optional STARTUP-HOOKS QUIT-HOOKS)" t nil)
-(autoload (quote emerge-files-with-ancestor) "emerge" "\
+(autoload 'emerge-files-with-ancestor "emerge" "\
Run Emerge on two files, giving another file as the ancestor.
\(fn ARG FILE-A FILE-B FILE-ANCESTOR FILE-OUT &optional STARTUP-HOOKS QUIT-HOOKS)" t nil)
-(autoload (quote emerge-buffers) "emerge" "\
+(autoload 'emerge-buffers "emerge" "\
Run Emerge on two buffers.
\(fn BUFFER-A BUFFER-B &optional STARTUP-HOOKS QUIT-HOOKS)" t nil)
-(autoload (quote emerge-buffers-with-ancestor) "emerge" "\
+(autoload 'emerge-buffers-with-ancestor "emerge" "\
Run Emerge on two buffers, giving another buffer as the ancestor.
\(fn BUFFER-A BUFFER-B BUFFER-ANCESTOR &optional STARTUP-HOOKS QUIT-HOOKS)" t nil)
-(autoload (quote emerge-files-command) "emerge" "\
+(autoload 'emerge-files-command "emerge" "\
Not documented
\(fn)" nil nil)
-(autoload (quote emerge-files-with-ancestor-command) "emerge" "\
+(autoload 'emerge-files-with-ancestor-command "emerge" "\
Not documented
\(fn)" nil nil)
-(autoload (quote emerge-files-remote) "emerge" "\
+(autoload 'emerge-files-remote "emerge" "\
Not documented
\(fn FILE-A FILE-B FILE-OUT)" nil nil)
-(autoload (quote emerge-files-with-ancestor-remote) "emerge" "\
+(autoload 'emerge-files-with-ancestor-remote "emerge" "\
Not documented
\(fn FILE-A FILE-B FILE-ANC FILE-OUT)" nil nil)
-(autoload (quote emerge-revisions) "emerge" "\
+(autoload 'emerge-revisions "emerge" "\
Emerge two RCS revisions of a file.
\(fn ARG FILE REVISION-A REVISION-B &optional STARTUP-HOOKS QUIT-HOOKS)" t nil)
-(autoload (quote emerge-revisions-with-ancestor) "emerge" "\
+(autoload 'emerge-revisions-with-ancestor "emerge" "\
Emerge two RCS revisions of a file, with another revision as ancestor.
\(fn ARG FILE REVISION-A REVISION-B ANCESTOR &optional STARTUP-HOOKS QUIT-HOOKS)" t nil)
-(autoload (quote emerge-merge-directories) "emerge" "\
+(autoload 'emerge-merge-directories "emerge" "\
Not documented
\(fn A-DIR B-DIR ANCESTOR-DIR OUTPUT-DIR)" t nil)
;;;***
-;;;### (autoloads (encoded-kbd-mode) "encoded-kb" "international/encoded-kb.el"
-;;;;;; (17842 54888))
+;;;### (autoloads (encoded-kbd-setup-display) "encoded-kb" "international/encoded-kb.el"
+;;;;;; (18200 51265))
;;; Generated autoloads from international/encoded-kb.el
-(defvar encoded-kbd-mode nil "\
-Non-nil if Encoded-Kbd mode is enabled.
-See the command `encoded-kbd-mode' for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `encoded-kbd-mode'.")
+(autoload 'encoded-kbd-setup-display "encoded-kb" "\
+Set up a `input-decode-map' for `keyboard-coding-system' on DISPLAY.
-(custom-autoload (quote encoded-kbd-mode) "encoded-kb" nil)
+DISPLAY may be a display id, a frame, or nil for the selected frame's display.
-(autoload (quote encoded-kbd-mode) "encoded-kb" "\
-Toggle Encoded-kbd minor mode.
-With arg, turn Encoded-kbd mode on if and only if arg is positive.
+\(fn DISPLAY)" nil nil)
-You should not turn this mode on manually, instead use the command
-\\[set-keyboard-coding-system] which turns on or off this mode
-automatically.
+;;;***
+
+;;;### (autoloads (encrypt-insert-file-contents encrypt-find-model)
+;;;;;; "encrypt" "gnus/encrypt.el" (18212 21482))
+;;; Generated autoloads from gnus/encrypt.el
-In Encoded-kbd mode, a text sent from keyboard is accepted
-as a multilingual text encoded in a coding system set by
-\\[set-keyboard-coding-system].
+(autoload 'encrypt-find-model "encrypt" "\
+Given a filename, find a encrypt-file-alist entry
-\(fn &optional ARG)" t nil)
+\(fn FILENAME)" nil nil)
+
+(autoload 'encrypt-insert-file-contents "encrypt" "\
+Decrypt FILE into the current buffer.
+
+\(fn FILE &optional MODEL)" t nil)
;;;***
;;;### (autoloads (enriched-decode enriched-encode enriched-mode)
-;;;;;; "enriched" "textmodes/enriched.el" (17842 58277))
+;;;;;; "enriched" "textmodes/enriched.el" (18088 55119))
;;; Generated autoloads from textmodes/enriched.el
-(autoload (quote enriched-mode) "enriched" "\
+(autoload 'enriched-mode "enriched" "\
Minor mode for editing text/enriched files.
These are files with embedded formatting information in the MIME standard
text/enriched format.
@@ -9180,12 +9275,12 @@ Commands:
\(fn &optional ARG)" t nil)
-(autoload (quote enriched-encode) "enriched" "\
+(autoload 'enriched-encode "enriched" "\
Not documented
\(fn FROM TO ORIG-BUF)" nil nil)
-(autoload (quote enriched-decode) "enriched" "\
+(autoload 'enriched-decode "enriched" "\
Not documented
\(fn FROM TO)" nil nil)
@@ -9193,15 +9288,15 @@ Not documented
;;;***
;;;### (autoloads (erc-handle-irc-url erc erc-select-read-args) "erc"
-;;;;;; "erc/erc.el" (17935 53318))
+;;;;;; "erc/erc.el" (18213 13926))
;;; Generated autoloads from erc/erc.el
-(autoload (quote erc-select-read-args) "erc" "\
+(autoload 'erc-select-read-args "erc" "\
Prompt the user for values of nick, server, port, and password.
\(fn)" nil nil)
-(autoload (quote erc) "erc" "\
+(autoload 'erc "erc" "\
ERC is a powerful, modular, and extensible IRC client.
This function is the main entry point for ERC.
@@ -9224,9 +9319,9 @@ be invoked for the values of the other parameters.
\(fn &key (SERVER (erc-compute-server)) (PORT (erc-compute-port)) (NICK (erc-compute-nick)) PASSWORD (FULL-NAME (erc-compute-full-name)))" t nil)
-(defalias (quote erc-select) (quote erc))
+(defalias 'erc-select 'erc)
-(autoload (quote erc-handle-irc-url) "erc" "\
+(autoload 'erc-handle-irc-url "erc" "\
Use ERC to IRC on HOST:PORT in CHANNEL as USER with PASSWORD.
If ERC is already connected to HOST:PORT, simply /join CHANNEL.
Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
@@ -9235,36 +9330,36 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL.
;;;***
-;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (17935
-;;;;;; 53318))
+;;;### (autoloads nil "erc-autoaway" "erc/erc-autoaway.el" (18088
+;;;;;; 55099))
;;; Generated autoloads from erc/erc-autoaway.el
(autoload 'erc-autoaway-mode "erc-autoaway")
;;;***
-;;;### (autoloads nil "erc-button" "erc/erc-button.el" (17935 53318))
+;;;### (autoloads nil "erc-button" "erc/erc-button.el" (18147 59472))
;;; Generated autoloads from erc/erc-button.el
(autoload 'erc-button-mode "erc-button" nil t)
;;;***
-;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (17935 53318))
+;;;### (autoloads nil "erc-capab" "erc/erc-capab.el" (18088 55099))
;;; Generated autoloads from erc/erc-capab.el
(autoload 'erc-capab-identify-mode "erc-capab" nil t)
;;;***
-;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (17935 53318))
+;;;### (autoloads nil "erc-compat" "erc/erc-compat.el" (18147 59472))
;;; Generated autoloads from erc/erc-compat.el
(autoload 'erc-define-minor-mode "erc-compat")
;;;***
;;;### (autoloads (erc-ctcp-query-DCC pcomplete/erc-mode/DCC erc-cmd-DCC)
-;;;;;; "erc-dcc" "erc/erc-dcc.el" (17842 54344))
+;;;;;; "erc-dcc" "erc/erc-dcc.el" (18088 55099))
;;; Generated autoloads from erc/erc-dcc.el
-(autoload (quote erc-cmd-DCC) "erc-dcc" "\
+(autoload 'erc-cmd-DCC "erc-dcc" "\
Parser for /dcc command.
This figures out the dcc subcommand and calls the appropriate routine to
handle it. The function dispatched should be named \"erc-dcc-do-FOO-command\",
@@ -9272,15 +9367,15 @@ where FOO is one of CLOSE, GET, SEND, LIST, CHAT, etc.
\(fn CMD &rest ARGS)" nil nil)
-(autoload (quote pcomplete/erc-mode/DCC) "erc-dcc" "\
+(autoload 'pcomplete/erc-mode/DCC "erc-dcc" "\
Provides completion for the /DCC command.
\(fn)" nil nil)
-(defvar erc-ctcp-query-DCC-hook (quote (erc-ctcp-query-DCC)) "\
+(defvar erc-ctcp-query-DCC-hook '(erc-ctcp-query-DCC) "\
Hook variable for CTCP DCC queries")
-(autoload (quote erc-ctcp-query-DCC) "erc-dcc" "\
+(autoload 'erc-ctcp-query-DCC "erc-dcc" "\
The function called when a CTCP DCC request is detected by the client.
It examines the DCC subcommand, and calls the appropriate routine for
that subcommand.
@@ -9293,74 +9388,74 @@ that subcommand.
;;;;;; erc-ezb-add-session erc-ezb-end-of-session-list erc-ezb-init-session-list
;;;;;; erc-ezb-identify erc-ezb-notice-autodetect erc-ezb-lookup-action
;;;;;; erc-ezb-get-login erc-cmd-ezb) "erc-ezbounce" "erc/erc-ezbounce.el"
-;;;;;; (17842 54344))
+;;;;;; (18088 55099))
;;; Generated autoloads from erc/erc-ezbounce.el
-(autoload (quote erc-cmd-ezb) "erc-ezbounce" "\
+(autoload 'erc-cmd-ezb "erc-ezbounce" "\
Send EZB commands to the EZBouncer verbatim.
\(fn LINE &optional FORCE)" nil nil)
-(autoload (quote erc-ezb-get-login) "erc-ezbounce" "\
+(autoload 'erc-ezb-get-login "erc-ezbounce" "\
Return an appropriate EZBounce login for SERVER and PORT.
Look up entries in `erc-ezb-login-alist'. If the username or password
in the alist is `nil', prompt for the appropriate values.
\(fn SERVER PORT)" nil nil)
-(autoload (quote erc-ezb-lookup-action) "erc-ezbounce" "\
+(autoload 'erc-ezb-lookup-action "erc-ezbounce" "\
Not documented
\(fn MESSAGE)" nil nil)
-(autoload (quote erc-ezb-notice-autodetect) "erc-ezbounce" "\
+(autoload 'erc-ezb-notice-autodetect "erc-ezbounce" "\
React on an EZBounce NOTICE request.
\(fn PROC PARSED)" nil nil)
-(autoload (quote erc-ezb-identify) "erc-ezbounce" "\
+(autoload 'erc-ezb-identify "erc-ezbounce" "\
Identify to the EZBouncer server.
\(fn MESSAGE)" nil nil)
-(autoload (quote erc-ezb-init-session-list) "erc-ezbounce" "\
+(autoload 'erc-ezb-init-session-list "erc-ezbounce" "\
Reset the EZBounce session list to nil.
\(fn MESSAGE)" nil nil)
-(autoload (quote erc-ezb-end-of-session-list) "erc-ezbounce" "\
+(autoload 'erc-ezb-end-of-session-list "erc-ezbounce" "\
Indicate the end of the EZBounce session listing.
\(fn MESSAGE)" nil nil)
-(autoload (quote erc-ezb-add-session) "erc-ezbounce" "\
+(autoload 'erc-ezb-add-session "erc-ezbounce" "\
Add an EZBounce session to the session list.
\(fn MESSAGE)" nil nil)
-(autoload (quote erc-ezb-select) "erc-ezbounce" "\
+(autoload 'erc-ezb-select "erc-ezbounce" "\
Select an IRC server to use by EZBounce, in ERC style.
\(fn MESSAGE)" nil nil)
-(autoload (quote erc-ezb-select-session) "erc-ezbounce" "\
+(autoload 'erc-ezb-select-session "erc-ezbounce" "\
Select a detached EZBounce session.
\(fn)" nil nil)
-(autoload (quote erc-ezb-initialize) "erc-ezbounce" "\
+(autoload 'erc-ezb-initialize "erc-ezbounce" "\
Add EZBouncer convenience functions to ERC.
\(fn)" nil nil)
;;;***
-;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (17935
-;;;;;; 53318))
+;;;### (autoloads (erc-fill) "erc-fill" "erc/erc-fill.el" (18088
+;;;;;; 55099))
;;; Generated autoloads from erc/erc-fill.el
(autoload 'erc-fill-mode "erc-fill" nil t)
-(autoload (quote erc-fill) "erc-fill" "\
+(autoload 'erc-fill "erc-fill" "\
Fill a region using the function referenced in `erc-fill-function'.
You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'.
@@ -9368,19 +9463,19 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'.
;;;***
-;;;### (autoloads nil "erc-hecomplete" "erc/erc-hecomplete.el" (17842
-;;;;;; 54344))
+;;;### (autoloads nil "erc-hecomplete" "erc/erc-hecomplete.el" (18088
+;;;;;; 55099))
;;; Generated autoloads from erc/erc-hecomplete.el
(autoload 'erc-hecomplete-mode "erc-hecomplete" nil t)
;;;***
;;;### (autoloads (erc-identd-stop erc-identd-start) "erc-identd"
-;;;;;; "erc/erc-identd.el" (17935 53318))
+;;;;;; "erc/erc-identd.el" (18147 59472))
;;; Generated autoloads from erc/erc-identd.el
(autoload 'erc-identd-mode "erc-identd")
-(autoload (quote erc-identd-start) "erc-identd" "\
+(autoload 'erc-identd-start "erc-identd" "\
Start an identd server listening to port 8113.
Port 113 (auth) will need to be redirected to port 8113 on your
machine -- using iptables, or a program like redir which can be
@@ -9390,7 +9485,7 @@ system.
\(fn &optional PORT)" t nil)
-(autoload (quote erc-identd-stop) "erc-identd" "\
+(autoload 'erc-identd-stop "erc-identd" "\
Not documented
\(fn &rest IGNORE)" t nil)
@@ -9398,28 +9493,28 @@ Not documented
;;;***
;;;### (autoloads (erc-create-imenu-index) "erc-imenu" "erc/erc-imenu.el"
-;;;;;; (17842 54344))
+;;;;;; (18088 55099))
;;; Generated autoloads from erc/erc-imenu.el
-(autoload (quote erc-create-imenu-index) "erc-imenu" "\
+(autoload 'erc-create-imenu-index "erc-imenu" "\
Not documented
\(fn)" nil nil)
;;;***
-;;;### (autoloads nil "erc-join" "erc/erc-join.el" (17842 54344))
+;;;### (autoloads nil "erc-join" "erc/erc-join.el" (18088 55099))
;;; Generated autoloads from erc/erc-join.el
(autoload 'erc-autojoin-mode "erc-join" nil t)
;;;***
;;;### (autoloads (erc-save-buffer-in-logs erc-logging-enabled) "erc-log"
-;;;;;; "erc/erc-log.el" (17935 53318))
+;;;;;; "erc/erc-log.el" (18213 13926))
;;; Generated autoloads from erc/erc-log.el
(autoload 'erc-log-mode "erc-log" nil t)
-(autoload (quote erc-logging-enabled) "erc-log" "\
+(autoload 'erc-logging-enabled "erc-log" "\
Return non-nil if logging is enabled for BUFFER.
If BUFFER is nil, the value of `current-buffer' is used.
Logging is enabled if `erc-log-channels-directory' is non-nil, the directory
@@ -9428,7 +9523,7 @@ is writeable (it will be created as necessary) and
\(fn &optional BUFFER)" nil nil)
-(autoload (quote erc-save-buffer-in-logs) "erc-log" "\
+(autoload 'erc-save-buffer-in-logs "erc-log" "\
Append BUFFER contents to the log file, if logging is enabled.
If BUFFER is not provided, current buffer is used.
Logging is enabled if `erc-logging-enabled' returns non-nil.
@@ -9447,64 +9542,64 @@ You can save every individual message by putting this function on
;;;### (autoloads (erc-delete-dangerous-host erc-add-dangerous-host
;;;;;; erc-delete-keyword erc-add-keyword erc-delete-fool erc-add-fool
;;;;;; erc-delete-pal erc-add-pal) "erc-match" "erc/erc-match.el"
-;;;;;; (17935 53318))
+;;;;;; (18088 55100))
;;; Generated autoloads from erc/erc-match.el
(autoload 'erc-match-mode "erc-match")
-(autoload (quote erc-add-pal) "erc-match" "\
+(autoload 'erc-add-pal "erc-match" "\
Add pal interactively to `erc-pals'.
\(fn)" t nil)
-(autoload (quote erc-delete-pal) "erc-match" "\
+(autoload 'erc-delete-pal "erc-match" "\
Delete pal interactively to `erc-pals'.
\(fn)" t nil)
-(autoload (quote erc-add-fool) "erc-match" "\
+(autoload 'erc-add-fool "erc-match" "\
Add fool interactively to `erc-fools'.
\(fn)" t nil)
-(autoload (quote erc-delete-fool) "erc-match" "\
+(autoload 'erc-delete-fool "erc-match" "\
Delete fool interactively to `erc-fools'.
\(fn)" t nil)
-(autoload (quote erc-add-keyword) "erc-match" "\
+(autoload 'erc-add-keyword "erc-match" "\
Add keyword interactively to `erc-keywords'.
\(fn)" t nil)
-(autoload (quote erc-delete-keyword) "erc-match" "\
+(autoload 'erc-delete-keyword "erc-match" "\
Delete keyword interactively to `erc-keywords'.
\(fn)" t nil)
-(autoload (quote erc-add-dangerous-host) "erc-match" "\
+(autoload 'erc-add-dangerous-host "erc-match" "\
Add dangerous-host interactively to `erc-dangerous-hosts'.
\(fn)" t nil)
-(autoload (quote erc-delete-dangerous-host) "erc-match" "\
+(autoload 'erc-delete-dangerous-host "erc-match" "\
Delete dangerous-host interactively to `erc-dangerous-hosts'.
\(fn)" t nil)
;;;***
-;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (17935 53318))
+;;;### (autoloads nil "erc-menu" "erc/erc-menu.el" (18088 55100))
;;; Generated autoloads from erc/erc-menu.el
(autoload 'erc-menu-mode "erc-menu" nil t)
;;;***
;;;### (autoloads (erc-cmd-WHOLEFT) "erc-netsplit" "erc/erc-netsplit.el"
-;;;;;; (17935 53318))
+;;;;;; (18088 55100))
;;; Generated autoloads from erc/erc-netsplit.el
(autoload 'erc-netsplit-mode "erc-netsplit")
-(autoload (quote erc-cmd-WHOLEFT) "erc-netsplit" "\
+(autoload 'erc-cmd-WHOLEFT "erc-netsplit" "\
Show who's gone.
\(fn)" nil nil)
@@ -9512,17 +9607,17 @@ Show who's gone.
;;;***
;;;### (autoloads (erc-server-select erc-determine-network) "erc-networks"
-;;;;;; "erc/erc-networks.el" (17935 53318))
+;;;;;; "erc/erc-networks.el" (18088 55100))
;;; Generated autoloads from erc/erc-networks.el
-(autoload (quote erc-determine-network) "erc-networks" "\
+(autoload 'erc-determine-network "erc-networks" "\
Return the name of the network or \"Unknown\" as a symbol. Use the
server parameter NETWORK if provided, otherwise parse the server name and
search for a match in `erc-networks-alist'.
\(fn)" nil nil)
-(autoload (quote erc-server-select) "erc-networks" "\
+(autoload 'erc-server-select "erc-networks" "\
Interactively select a server to connect to using `erc-server-alist'.
\(fn)" t nil)
@@ -9530,60 +9625,60 @@ Interactively select a server to connect to using `erc-server-alist'.
;;;***
;;;### (autoloads (pcomplete/erc-mode/NOTIFY erc-cmd-NOTIFY) "erc-notify"
-;;;;;; "erc/erc-notify.el" (17935 53318))
+;;;;;; "erc/erc-notify.el" (18088 55100))
;;; Generated autoloads from erc/erc-notify.el
(autoload 'erc-notify-mode "erc-notify" nil t)
-(autoload (quote erc-cmd-NOTIFY) "erc-notify" "\
+(autoload 'erc-cmd-NOTIFY "erc-notify" "\
Change `erc-notify-list' or list current notify-list members online.
Without args, list the current list of notificated people online,
with args, toggle notify status of people.
\(fn &rest ARGS)" nil nil)
-(autoload (quote pcomplete/erc-mode/NOTIFY) "erc-notify" "\
+(autoload 'pcomplete/erc-mode/NOTIFY "erc-notify" "\
Not documented
\(fn)" nil nil)
;;;***
-;;;### (autoloads nil "erc-page" "erc/erc-page.el" (17842 54344))
+;;;### (autoloads nil "erc-page" "erc/erc-page.el" (18088 55100))
;;; Generated autoloads from erc/erc-page.el
(autoload 'erc-page-mode "erc-page")
;;;***
-;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (17935
-;;;;;; 53318))
+;;;### (autoloads nil "erc-pcomplete" "erc/erc-pcomplete.el" (18088
+;;;;;; 55100))
;;; Generated autoloads from erc/erc-pcomplete.el
(autoload 'erc-completion-mode "erc-pcomplete" nil t)
;;;***
-;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (17842 54344))
+;;;### (autoloads nil "erc-replace" "erc/erc-replace.el" (18088 55100))
;;; Generated autoloads from erc/erc-replace.el
(autoload 'erc-replace-mode "erc-replace")
;;;***
-;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (17935 53318))
+;;;### (autoloads nil "erc-ring" "erc/erc-ring.el" (18088 55100))
;;; Generated autoloads from erc/erc-ring.el
(autoload 'erc-ring-mode "erc-ring" nil t)
;;;***
;;;### (autoloads (erc-nickserv-identify erc-nickserv-identify-mode)
-;;;;;; "erc-services" "erc/erc-services.el" (17935 53318))
+;;;;;; "erc-services" "erc/erc-services.el" (18088 55100))
;;; Generated autoloads from erc/erc-services.el
(autoload 'erc-services-mode "erc-services" nil t)
-(autoload (quote erc-nickserv-identify-mode) "erc-services" "\
+(autoload 'erc-nickserv-identify-mode "erc-services" "\
Set up hooks according to which MODE the user has chosen.
\(fn MODE)" t nil)
-(autoload (quote erc-nickserv-identify) "erc-services" "\
+(autoload 'erc-nickserv-identify "erc-services" "\
Send an \"identify <PASSWORD>\" message to NickServ.
When called interactively, read the password using `read-passwd'.
@@ -9591,17 +9686,17 @@ When called interactively, read the password using `read-passwd'.
;;;***
-;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (17842 54344))
+;;;### (autoloads nil "erc-sound" "erc/erc-sound.el" (18161 20995))
;;; Generated autoloads from erc/erc-sound.el
(autoload 'erc-sound-mode "erc-sound")
;;;***
;;;### (autoloads (erc-speedbar-browser) "erc-speedbar" "erc/erc-speedbar.el"
-;;;;;; (17935 53318))
+;;;;;; (18088 55100))
;;; Generated autoloads from erc/erc-speedbar.el
-(autoload (quote erc-speedbar-browser) "erc-speedbar" "\
+(autoload 'erc-speedbar-browser "erc-speedbar" "\
Initialize speedbar to display an ERC browser.
This will add a speedbar major display mode.
@@ -9609,30 +9704,30 @@ This will add a speedbar major display mode.
;;;***
-;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (17935
-;;;;;; 53318))
+;;;### (autoloads nil "erc-spelling" "erc/erc-spelling.el" (18088
+;;;;;; 55100))
;;; Generated autoloads from erc/erc-spelling.el
(autoload 'erc-spelling-mode "erc-spelling" nil t)
;;;***
-;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (17935 53318))
+;;;### (autoloads nil "erc-stamp" "erc/erc-stamp.el" (18214 4763))
;;; Generated autoloads from erc/erc-stamp.el
(autoload 'erc-timestamp-mode "erc-stamp" nil t)
;;;***
;;;### (autoloads (erc-track-minor-mode) "erc-track" "erc/erc-track.el"
-;;;;;; (17935 53318))
+;;;;;; (18213 13926))
;;; Generated autoloads from erc/erc-track.el
(defvar erc-track-minor-mode nil "\
Non-nil if Erc-Track minor mode is enabled.
See the command `erc-track-minor-mode' for a description of this minor mode.")
-(custom-autoload (quote erc-track-minor-mode) "erc-track" nil)
+(custom-autoload 'erc-track-minor-mode "erc-track" nil)
-(autoload (quote erc-track-minor-mode) "erc-track" "\
+(autoload 'erc-track-minor-mode "erc-track" "\
Global minor mode for tracking ERC buffers and showing activity in the
mode line.
@@ -9646,18 +9741,18 @@ module, otherwise the keybindings will not do anything useful.
;;;***
;;;### (autoloads (erc-truncate-buffer erc-truncate-buffer-to-size)
-;;;;;; "erc-truncate" "erc/erc-truncate.el" (17842 54344))
+;;;;;; "erc-truncate" "erc/erc-truncate.el" (18088 55100))
;;; Generated autoloads from erc/erc-truncate.el
(autoload 'erc-truncate-mode "erc-truncate" nil t)
-(autoload (quote erc-truncate-buffer-to-size) "erc-truncate" "\
+(autoload 'erc-truncate-buffer-to-size "erc-truncate" "\
Truncates the buffer to the size SIZE.
If BUFFER is not provided, the current buffer is assumed. The deleted
region is logged if `erc-logging-enabled' returns non-nil.
\(fn SIZE &optional BUFFER)" nil nil)
-(autoload (quote erc-truncate-buffer) "erc-truncate" "\
+(autoload 'erc-truncate-buffer "erc-truncate" "\
Truncates the current buffer to `erc-max-buffer-size'.
Meant to be used in hooks, like `erc-insert-post-hook'.
@@ -9666,21 +9761,21 @@ Meant to be used in hooks, like `erc-insert-post-hook'.
;;;***
;;;### (autoloads (erc-xdcc-add-file) "erc-xdcc" "erc/erc-xdcc.el"
-;;;;;; (17842 54344))
+;;;;;; (18088 55100))
;;; Generated autoloads from erc/erc-xdcc.el
-(autoload (quote erc-xdcc-add-file) "erc-xdcc" "\
+(autoload 'erc-xdcc-add-file "erc-xdcc" "\
Add a file to `erc-xdcc-files'.
\(fn FILE)" t nil)
;;;***
-;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (17914
-;;;;;; 52082))
+;;;### (autoloads (eshell-mode) "esh-mode" "eshell/esh-mode.el" (18203
+;;;;;; 37788))
;;; Generated autoloads from eshell/esh-mode.el
-(autoload (quote eshell-mode) "esh-mode" "\
+(autoload 'eshell-mode "esh-mode" "\
Emacs shell interactive mode.
\\{eshell-mode-map}
@@ -9689,11 +9784,11 @@ Emacs shell interactive mode.
;;;***
-;;;### (autoloads (eshell-test) "esh-test" "eshell/esh-test.el" (17842
-;;;;;; 54411))
+;;;### (autoloads (eshell-test) "esh-test" "eshell/esh-test.el" (18088
+;;;;;; 55101))
;;; Generated autoloads from eshell/esh-test.el
-(autoload (quote eshell-test) "esh-test" "\
+(autoload 'eshell-test "esh-test" "\
Test Eshell to verify that it works as expected.
\(fn &optional ARG)" t nil)
@@ -9701,10 +9796,10 @@ Test Eshell to verify that it works as expected.
;;;***
;;;### (autoloads (eshell-report-bug eshell-command-result eshell-command
-;;;;;; eshell) "eshell" "eshell/eshell.el" (17842 54411))
+;;;;;; eshell) "eshell" "eshell/eshell.el" (18088 55101))
;;; Generated autoloads from eshell/eshell.el
-(autoload (quote eshell) "eshell" "\
+(autoload 'eshell "eshell" "\
Create an interactive Eshell buffer.
The buffer used for Eshell sessions is determined by the value of
`eshell-buffer-name'. If there is already an Eshell session active in
@@ -9716,13 +9811,13 @@ buffer selected (or created).
\(fn &optional ARG)" t nil)
-(autoload (quote eshell-command) "eshell" "\
+(autoload 'eshell-command "eshell" "\
Execute the Eshell command string COMMAND.
With prefix ARG, insert output into the current buffer at point.
\(fn &optional COMMAND ARG)" t nil)
-(autoload (quote eshell-command-result) "eshell" "\
+(autoload 'eshell-command-result "eshell" "\
Execute the given Eshell COMMAND, and return the result.
The result might be any Lisp object.
If STATUS-VAR is a symbol, it will be set to the exit status of the
@@ -9731,7 +9826,7 @@ corresponding to a successful execution.
\(fn COMMAND &optional STATUS-VAR)" nil nil)
-(autoload (quote eshell-report-bug) "eshell" "\
+(autoload 'eshell-report-bug "eshell" "\
Report a bug in Eshell.
Prompts for the TOPIC. Leaves you in a mail buffer.
Please include any configuration details that might be involved.
@@ -9747,7 +9842,7 @@ Please include any configuration details that might be involved.
;;;;;; visit-tags-table tags-table-mode find-tag-default-function
;;;;;; find-tag-hook tags-add-tables tags-compression-info-list
;;;;;; tags-table-list tags-case-fold-search) "etags" "progmodes/etags.el"
-;;;;;; (17842 56333))
+;;;;;; (18201 33327))
;;; Generated autoloads from progmodes/etags.el
(defvar tags-file-name nil "\
@@ -9757,12 +9852,12 @@ If you set this variable, do not also set `tags-table-list'.
Use the `etags' program to make a tags table file.")
(put 'tags-file-name 'variable-interactive "fVisit tags table: ")
-(defvar tags-case-fold-search (quote default) "\
+(defvar tags-case-fold-search 'default "\
*Whether tags operations should be case-sensitive.
A value of t means case-insensitive, a value of nil means case-sensitive.
Any other value means use the setting of `case-fold-search'.")
-(custom-autoload (quote tags-case-fold-search) "etags" t)
+(custom-autoload 'tags-case-fold-search "etags" t)
(defvar tags-table-list nil "\
*List of file names of tags tables to search.
@@ -9771,31 +9866,31 @@ To switch to a new list of tags tables, setting this variable is sufficient.
If you set this variable, do not also set `tags-file-name'.
Use the `etags' program to make a tags table file.")
-(custom-autoload (quote tags-table-list) "etags" t)
+(custom-autoload 'tags-table-list "etags" t)
-(defvar tags-compression-info-list (quote ("" ".Z" ".bz2" ".gz" ".tgz")) "\
+(defvar tags-compression-info-list '("" ".Z" ".bz2" ".gz" ".tgz") "\
*List of extensions tried by etags when jka-compr is used.
An empty string means search the non-compressed file.
These extensions will be tried only if jka-compr was activated
\(i.e. via customize of `auto-compression-mode' or by calling the function
`auto-compression-mode').")
-(custom-autoload (quote tags-compression-info-list) "etags" t)
+(custom-autoload 'tags-compression-info-list "etags" t)
-(defvar tags-add-tables (quote ask-user) "\
+(defvar tags-add-tables 'ask-user "\
*Control whether to add a new tags table to the current list.
t means do; nil means don't (always start a new list).
Any other value means ask the user whether to add a new tags table
to the current list (as opposed to starting a new list).")
-(custom-autoload (quote tags-add-tables) "etags" t)
+(custom-autoload 'tags-add-tables "etags" t)
(defvar find-tag-hook nil "\
*Hook to be run by \\[find-tag] after finding a tag. See `run-hooks'.
The value in the buffer in which \\[find-tag] is done is used,
not the value in the buffer \\[find-tag] goes to.")
-(custom-autoload (quote find-tag-hook) "etags" t)
+(custom-autoload 'find-tag-hook "etags" t)
(defvar find-tag-default-function nil "\
*A function of no arguments used by \\[find-tag] to pick a default tag.
@@ -9803,14 +9898,14 @@ If nil, and the symbol that is the value of `major-mode'
has a `find-tag-default-function' property (see `put'), that is used.
Otherwise, `find-tag-default' is used.")
-(custom-autoload (quote find-tag-default-function) "etags" t)
+(custom-autoload 'find-tag-default-function "etags" t)
-(autoload (quote tags-table-mode) "etags" "\
+(autoload 'tags-table-mode "etags" "\
Major mode for tags table file buffers.
\(fn)" t nil)
-(autoload (quote visit-tags-table) "etags" "\
+(autoload 'visit-tags-table "etags" "\
Tell tags commands to use tags table file FILE.
FILE should be the name of a file created with the `etags' program.
A directory name is ok too; it means file TAGS in that directory.
@@ -9823,7 +9918,7 @@ file the tag was in.
\(fn FILE &optional LOCAL)" t nil)
-(autoload (quote visit-tags-table-buffer) "etags" "\
+(autoload 'visit-tags-table-buffer "etags" "\
Select the buffer containing the current tags table.
If optional arg is a string, visit that file as a tags table.
If optional arg is t, visit the next table in `tags-table-list'.
@@ -9835,7 +9930,7 @@ Returns t if it visits a tags table, or nil if there are no more in the list.
\(fn &optional CONT)" nil nil)
-(autoload (quote tags-table-files) "etags" "\
+(autoload 'tags-table-files "etags" "\
Return a list of files in the current tags table.
Assumes the tags table is the current buffer. The file names are returned
as they appeared in the `etags' command that created the table, usually
@@ -9843,7 +9938,7 @@ without directory names.
\(fn)" nil nil)
-(autoload (quote find-tag-noselect) "etags" "\
+(autoload 'find-tag-noselect "etags" "\
Find tag (in current tags table) whose name contains TAGNAME.
Returns the buffer containing the tag's definition and moves its point there,
but does not select the buffer.
@@ -9865,7 +9960,7 @@ See documentation of variable `tags-file-name'.
\(fn TAGNAME &optional NEXT-P REGEXP-P)" t nil)
-(autoload (quote find-tag) "etags" "\
+(autoload 'find-tag "etags" "\
Find tag (in current tags table) whose name contains TAGNAME.
Select the buffer containing the tag's definition, and move point there.
The default for TAGNAME is the expression in the buffer around or before point.
@@ -9887,7 +9982,7 @@ See documentation of variable `tags-file-name'.
\(fn TAGNAME &optional NEXT-P REGEXP-P)" t nil)
(define-key esc-map "." 'find-tag)
-(autoload (quote find-tag-other-window) "etags" "\
+(autoload 'find-tag-other-window "etags" "\
Find tag (in current tags table) whose name contains TAGNAME.
Select the buffer containing the tag's definition in another window, and
move point there. The default for TAGNAME is the expression in the buffer
@@ -9910,7 +10005,7 @@ See documentation of variable `tags-file-name'.
\(fn TAGNAME &optional NEXT-P REGEXP-P)" t nil)
(define-key ctl-x-4-map "." 'find-tag-other-window)
-(autoload (quote find-tag-other-frame) "etags" "\
+(autoload 'find-tag-other-frame "etags" "\
Find tag (in current tags table) whose name contains TAGNAME.
Select the buffer containing the tag's definition in another frame, and
move point there. The default for TAGNAME is the expression in the buffer
@@ -9933,7 +10028,7 @@ See documentation of variable `tags-file-name'.
\(fn TAGNAME &optional NEXT-P)" t nil)
(define-key ctl-x-5-map "." 'find-tag-other-frame)
-(autoload (quote find-tag-regexp) "etags" "\
+(autoload 'find-tag-regexp "etags" "\
Find tag (in current tags table) whose name matches REGEXP.
Select the buffer containing the tag's definition and move point there.
@@ -9955,7 +10050,7 @@ See documentation of variable `tags-file-name'.
(define-key esc-map [?\C-.] 'find-tag-regexp)
(define-key esc-map "*" 'pop-tag-mark)
-(autoload (quote pop-tag-mark) "etags" "\
+(autoload 'pop-tag-mark "etags" "\
Pop back to where \\[find-tag] was last invoked.
This is distinct from invoking \\[find-tag] with a negative argument
@@ -9964,7 +10059,7 @@ where they were found.
\(fn)" t nil)
-(autoload (quote next-file) "etags" "\
+(autoload 'next-file "etags" "\
Select next file among files in current tags table.
A first argument of t (prefix arg, if interactive) initializes to the
@@ -9979,7 +10074,7 @@ if the file was newly read in, the value is the filename.
\(fn &optional INITIALIZE NOVISIT)" t nil)
-(autoload (quote tags-loop-continue) "etags" "\
+(autoload 'tags-loop-continue "etags" "\
Continue last \\[tags-search] or \\[tags-query-replace] command.
Used noninteractively with non-nil argument to begin such a command (the
argument is passed to `next-file', which see).
@@ -9993,7 +10088,7 @@ nil, we exit; otherwise we scan the next file.
\(fn &optional FIRST-TIME)" t nil)
(define-key esc-map "," 'tags-loop-continue)
-(autoload (quote tags-search) "etags" "\
+(autoload 'tags-search "etags" "\
Search through all files listed in tags table for match for REGEXP.
Stops when a match is found.
To continue searching for next match, use command \\[tags-loop-continue].
@@ -10002,7 +10097,7 @@ See documentation of variable `tags-file-name'.
\(fn REGEXP &optional FILE-LIST-FORM)" t nil)
-(autoload (quote tags-query-replace) "etags" "\
+(autoload 'tags-query-replace "etags" "\
Do `query-replace-regexp' of FROM with TO on all files listed in tags table.
Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
If you exit (\\[keyboard-quit], RET or q), you can resume the query replace
@@ -10012,7 +10107,7 @@ See documentation of variable `tags-file-name'.
\(fn FROM TO &optional DELIMITED FILE-LIST-FORM START END)" t nil)
-(autoload (quote list-tags) "etags" "\
+(autoload 'list-tags "etags" "\
Display list of tags in file FILE.
This searches only the first table in the list, and no included tables.
FILE should be as it appeared in the `etags' command, usually without a
@@ -10020,19 +10115,19 @@ directory specification.
\(fn FILE &optional NEXT-MATCH)" t nil)
-(autoload (quote tags-apropos) "etags" "\
+(autoload 'tags-apropos "etags" "\
Display list of all tags in tags table REGEXP matches.
\(fn REGEXP)" t nil)
-(autoload (quote select-tags-table) "etags" "\
+(autoload 'select-tags-table "etags" "\
Select a tags table file from a menu of those you have already used.
The list of tags tables to select from is stored in `tags-table-set-list';
see the doc of that variable if you want to add names to the list.
\(fn)" t nil)
-(autoload (quote complete-tag) "etags" "\
+(autoload 'complete-tag "etags" "\
Perform tags completion on the text around point.
Completes to the set of names listed in the current tags table.
The string to complete is chosen in the same way as the default
@@ -10049,15 +10144,15 @@ for \\[find-tag] (which see).
;;;;;; ethio-fidel-to-sera-buffer ethio-fidel-to-sera-region ethio-sera-to-fidel-marker
;;;;;; ethio-sera-to-fidel-mail ethio-sera-to-fidel-mail-or-marker
;;;;;; ethio-sera-to-fidel-buffer ethio-sera-to-fidel-region setup-ethiopic-environment-internal)
-;;;;;; "ethio-util" "language/ethio-util.el" (17842 58278))
+;;;;;; "ethio-util" "language/ethio-util.el" (18173 8195))
;;; Generated autoloads from language/ethio-util.el
-(autoload (quote setup-ethiopic-environment-internal) "ethio-util" "\
+(autoload 'setup-ethiopic-environment-internal "ethio-util" "\
Not documented
\(fn)" nil nil)
-(autoload (quote ethio-sera-to-fidel-region) "ethio-util" "\
+(autoload 'ethio-sera-to-fidel-region "ethio-util" "\
Convert the characters in region from SERA to FIDEL.
The variable `ethio-primary-language' specifies the primary language
and `ethio-secondary-language' specifies the secondary.
@@ -10075,7 +10170,7 @@ See also the descriptions of the variables
\(fn BEG END &optional SECONDARY FORCE)" t nil)
-(autoload (quote ethio-sera-to-fidel-buffer) "ethio-util" "\
+(autoload 'ethio-sera-to-fidel-buffer "ethio-util" "\
Convert the current buffer from SERA to FIDEL.
The variable `ethio-primary-language' specifies the primary
@@ -10094,13 +10189,13 @@ See also the descriptions of the variables
\(fn &optional SECONDARY FORCE)" t nil)
-(autoload (quote ethio-sera-to-fidel-mail-or-marker) "ethio-util" "\
+(autoload 'ethio-sera-to-fidel-mail-or-marker "ethio-util" "\
Execute `ethio-sera-to-fidel-mail' or `ethio-sera-to-fidel-marker' depending on the current major mode.
If in rmail-mode or in mail-mode, execute the former; otherwise latter.
\(fn &optional ARG)" t nil)
-(autoload (quote ethio-sera-to-fidel-mail) "ethio-util" "\
+(autoload 'ethio-sera-to-fidel-mail "ethio-util" "\
Convert SERA to FIDEL to read/write mail and news.
If the buffer contains the markers \"<sera>\" and \"</sera>\",
@@ -10111,14 +10206,14 @@ and the body into FIDEL using `ethio-sera-to-fidel-region'.
\(fn &optional ARG)" t nil)
-(autoload (quote ethio-sera-to-fidel-marker) "ethio-util" "\
+(autoload 'ethio-sera-to-fidel-marker "ethio-util" "\
Convert the regions surrounded by \"<sera>\" and \"</sera>\" from SERA to FIDEL.
Assume that each region begins with `ethio-primary-language'.
The markers \"<sera>\" and \"</sera>\" themselves are not deleted.
\(fn &optional FORCE)" t nil)
-(autoload (quote ethio-fidel-to-sera-region) "ethio-util" "\
+(autoload 'ethio-fidel-to-sera-region "ethio-util" "\
Replace all the FIDEL characters in the region to the SERA format.
The variable `ethio-primary-language' specifies the primary
language and `ethio-secondary-language' specifies the secondary.
@@ -10136,7 +10231,7 @@ See also the descriptions of the variables
\(fn BEGIN END &optional SECONDARY FORCE)" t nil)
-(autoload (quote ethio-fidel-to-sera-buffer) "ethio-util" "\
+(autoload 'ethio-fidel-to-sera-buffer "ethio-util" "\
Replace all the FIDEL characters in the current buffer to the SERA format.
The variable `ethio-primary-language' specifies the primary
language and `ethio-secondary-language' specifies the secondary.
@@ -10154,13 +10249,13 @@ See also the descriptions of the variables
\(fn &optional SECONDARY FORCE)" t nil)
-(autoload (quote ethio-fidel-to-sera-mail-or-marker) "ethio-util" "\
+(autoload 'ethio-fidel-to-sera-mail-or-marker "ethio-util" "\
Execute `ethio-fidel-to-sera-mail' or `ethio-fidel-to-sera-marker' depending on the current major mode.
If in rmail-mode or in mail-mode, execute the former; otherwise latter.
\(fn &optional ARG)" t nil)
-(autoload (quote ethio-fidel-to-sera-mail) "ethio-util" "\
+(autoload 'ethio-fidel-to-sera-mail "ethio-util" "\
Convert FIDEL to SERA to read/write mail and news.
If the body contains at least one Ethiopic character,
@@ -10172,18 +10267,18 @@ The very same procedure applies to the subject field, too.
\(fn)" t nil)
-(autoload (quote ethio-fidel-to-sera-marker) "ethio-util" "\
+(autoload 'ethio-fidel-to-sera-marker "ethio-util" "\
Convert the regions surrounded by \"<sera>\" and \"</sera>\" from FIDEL to SERA.
The markers \"<sera>\" and \"</sera>\" themselves are not deleted.
\(fn &optional FORCE)" t nil)
-(autoload (quote ethio-modify-vowel) "ethio-util" "\
+(autoload 'ethio-modify-vowel "ethio-util" "\
Modify the vowel of the FIDEL that is under the cursor.
\(fn)" t nil)
-(autoload (quote ethio-replace-space) "ethio-util" "\
+(autoload 'ethio-replace-space "ethio-util" "\
Replace ASCII spaces with Ethiopic word separators in the region.
In the specified region, replace word separators surrounded by two
@@ -10198,23 +10293,23 @@ The second and third parameters BEGIN and END specify the region.
\(fn CH BEGIN END)" t nil)
-(autoload (quote ethio-input-special-character) "ethio-util" "\
+(autoload 'ethio-input-special-character "ethio-util" "\
Allow the user to input special characters.
\(fn ARG)" t nil)
-(autoload (quote ethio-fidel-to-tex-buffer) "ethio-util" "\
+(autoload 'ethio-fidel-to-tex-buffer "ethio-util" "\
Convert each fidel characters in the current buffer into a fidel-tex command.
Each command is always surrounded by braces.
\(fn)" t nil)
-(autoload (quote ethio-tex-to-fidel-buffer) "ethio-util" "\
+(autoload 'ethio-tex-to-fidel-buffer "ethio-util" "\
Convert fidel-tex commands in the current buffer into fidel chars.
\(fn)" t nil)
-(autoload (quote ethio-fidel-to-java-buffer) "ethio-util" "\
+(autoload 'ethio-fidel-to-java-buffer "ethio-util" "\
Convert Ethiopic characters into the Java escape sequences.
Each escape sequence is of the form \\uXXXX, where XXXX is the
@@ -10225,17 +10320,17 @@ Otherwise, [0-9A-F].
\(fn)" nil nil)
-(autoload (quote ethio-java-to-fidel-buffer) "ethio-util" "\
+(autoload 'ethio-java-to-fidel-buffer "ethio-util" "\
Convert the Java escape sequences into corresponding Ethiopic characters.
\(fn)" nil nil)
-(autoload (quote ethio-find-file) "ethio-util" "\
+(autoload 'ethio-find-file "ethio-util" "\
Transcribe file content into Ethiopic depending on filename suffix.
\(fn)" nil nil)
-(autoload (quote ethio-write-file) "ethio-util" "\
+(autoload 'ethio-write-file "ethio-util" "\
Transcribe Ethiopic characters in ASCII depending on the file extension.
\(fn)" nil nil)
@@ -10244,29 +10339,29 @@ Transcribe Ethiopic characters in ASCII depending on the file extension.
;;;### (autoloads (eudc-load-eudc eudc-query-form eudc-expand-inline
;;;;;; eudc-get-phone eudc-get-email eudc-set-server) "eudc" "net/eudc.el"
-;;;;;; (17842 55218))
+;;;;;; (18203 37788))
;;; Generated autoloads from net/eudc.el
-(autoload (quote eudc-set-server) "eudc" "\
+(autoload 'eudc-set-server "eudc" "\
Set the directory server to SERVER using PROTOCOL.
Unless NO-SAVE is non-nil, the server is saved as the default
server for future sessions.
\(fn SERVER PROTOCOL &optional NO-SAVE)" t nil)
-(autoload (quote eudc-get-email) "eudc" "\
+(autoload 'eudc-get-email "eudc" "\
Get the email field of NAME from the directory server.
If ERROR is non-nil, report an error if there is none.
\(fn NAME &optional ERROR)" t nil)
-(autoload (quote eudc-get-phone) "eudc" "\
+(autoload 'eudc-get-phone "eudc" "\
Get the phone field of NAME from the directory server.
If ERROR is non-nil, report an error if there is none.
\(fn NAME &optional ERROR)" t nil)
-(autoload (quote eudc-expand-inline) "eudc" "\
+(autoload 'eudc-expand-inline "eudc" "\
Query the directory server, and expand the query string before point.
The query string consists of the buffer substring from the point back to
the preceding comma, colon or beginning of line.
@@ -10281,54 +10376,54 @@ see `eudc-inline-expansion-servers'
\(fn &optional REPLACE)" t nil)
-(autoload (quote eudc-query-form) "eudc" "\
+(autoload 'eudc-query-form "eudc" "\
Display a form to query the directory server.
If given a non-nil argument GET-FIELDS-FROM-SERVER, the function first
queries the server for the existing fields and displays a corresponding form.
\(fn &optional GET-FIELDS-FROM-SERVER)" t nil)
-(autoload (quote eudc-load-eudc) "eudc" "\
+(autoload 'eudc-load-eudc "eudc" "\
Load the Emacs Unified Directory Client.
This does nothing except loading eudc by autoload side-effect.
\(fn)" t nil)
-(cond ((not (string-match "XEmacs" emacs-version)) (defvar eudc-tools-menu (make-sparse-keymap "Directory Search")) (fset (quote eudc-tools-menu) (symbol-value (quote eudc-tools-menu))) (define-key eudc-tools-menu [phone] (quote ("Get Phone" . eudc-get-phone))) (define-key eudc-tools-menu [email] (quote ("Get Email" . eudc-get-email))) (define-key eudc-tools-menu [separator-eudc-email] (quote ("--"))) (define-key eudc-tools-menu [expand-inline] (quote ("Expand Inline Query" . eudc-expand-inline))) (define-key eudc-tools-menu [query] (quote ("Query with Form" . eudc-query-form))) (define-key eudc-tools-menu [separator-eudc-query] (quote ("--"))) (define-key eudc-tools-menu [new] (quote ("New Server" . eudc-set-server))) (define-key eudc-tools-menu [load] (quote ("Load Hotlist of Servers" . eudc-load-eudc)))) (t (let ((menu (quote ("Directory Search" ["Load Hotlist of Servers" eudc-load-eudc t] ["New Server" eudc-set-server t] ["---" nil nil] ["Query with Form" eudc-query-form t] ["Expand Inline Query" eudc-expand-inline t] ["---" nil nil] ["Get Email" eudc-get-email t] ["Get Phone" eudc-get-phone t])))) (if (not (featurep (quote eudc-autoloads))) (if eudc-xemacs-p (if (and (featurep (quote menubar)) (not (featurep (quote infodock)))) (add-submenu (quote ("Tools")) menu)) (require (quote easymenu)) (cond ((fboundp (quote easy-menu-add-item)) (easy-menu-add-item nil (quote ("tools")) (easy-menu-create-menu (car menu) (cdr menu)))) ((fboundp (quote easy-menu-create-keymaps)) (define-key global-map [menu-bar tools eudc] (cons "Directory Search" (easy-menu-create-keymaps "Directory Search" (cdr menu)))))))))))
+(cond ((not (featurep 'xemacs)) (defvar eudc-tools-menu (make-sparse-keymap "Directory Search")) (fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu)) (define-key eudc-tools-menu [phone] '("Get Phone" . eudc-get-phone)) (define-key eudc-tools-menu [email] '("Get Email" . eudc-get-email)) (define-key eudc-tools-menu [separator-eudc-email] '("--")) (define-key eudc-tools-menu [expand-inline] '("Expand Inline Query" . eudc-expand-inline)) (define-key eudc-tools-menu [query] '("Query with Form" . eudc-query-form)) (define-key eudc-tools-menu [separator-eudc-query] '("--")) (define-key eudc-tools-menu [new] '("New Server" . eudc-set-server)) (define-key eudc-tools-menu [load] '("Load Hotlist of Servers" . eudc-load-eudc))) (t (let ((menu '("Directory Search" ["Load Hotlist of Servers" eudc-load-eudc t] ["New Server" eudc-set-server t] ["---" nil nil] ["Query with Form" eudc-query-form t] ["Expand Inline Query" eudc-expand-inline t] ["---" nil nil] ["Get Email" eudc-get-email t] ["Get Phone" eudc-get-phone t]))) (if (not (featurep 'eudc-autoloads)) (if (featurep 'xemacs) (if (and (featurep 'menubar) (not (featurep 'infodock))) (add-submenu '("Tools") menu)) (require 'easymenu) (cond ((fboundp 'easy-menu-add-item) (easy-menu-add-item nil '("tools") (easy-menu-create-menu (car menu) (cdr menu)))) ((fboundp 'easy-menu-create-keymaps) (define-key global-map [menu-bar tools eudc] (cons "Directory Search" (easy-menu-create-keymaps "Directory Search" (cdr menu)))))))))))
;;;***
;;;### (autoloads (eudc-display-jpeg-as-button eudc-display-jpeg-inline
;;;;;; eudc-display-sound eudc-display-mail eudc-display-url eudc-display-generic-binary)
-;;;;;; "eudc-bob" "net/eudc-bob.el" (17842 55218))
+;;;;;; "eudc-bob" "net/eudc-bob.el" (18203 37788))
;;; Generated autoloads from net/eudc-bob.el
-(autoload (quote eudc-display-generic-binary) "eudc-bob" "\
+(autoload 'eudc-display-generic-binary "eudc-bob" "\
Display a button for unidentified binary DATA.
\(fn DATA)" nil nil)
-(autoload (quote eudc-display-url) "eudc-bob" "\
+(autoload 'eudc-display-url "eudc-bob" "\
Display URL and make it clickable.
\(fn URL)" nil nil)
-(autoload (quote eudc-display-mail) "eudc-bob" "\
+(autoload 'eudc-display-mail "eudc-bob" "\
Display e-mail address and make it clickable.
\(fn MAIL)" nil nil)
-(autoload (quote eudc-display-sound) "eudc-bob" "\
+(autoload 'eudc-display-sound "eudc-bob" "\
Display a button to play the sound DATA.
\(fn DATA)" nil nil)
-(autoload (quote eudc-display-jpeg-inline) "eudc-bob" "\
+(autoload 'eudc-display-jpeg-inline "eudc-bob" "\
Display the JPEG DATA inline at point if possible.
\(fn DATA)" nil nil)
-(autoload (quote eudc-display-jpeg-as-button) "eudc-bob" "\
+(autoload 'eudc-display-jpeg-as-button "eudc-bob" "\
Display a button for the JPEG DATA.
\(fn DATA)" nil nil)
@@ -10336,16 +10431,16 @@ Display a button for the JPEG DATA.
;;;***
;;;### (autoloads (eudc-try-bbdb-insert eudc-insert-record-at-point-into-bbdb)
-;;;;;; "eudc-export" "net/eudc-export.el" (17842 55218))
+;;;;;; "eudc-export" "net/eudc-export.el" (18088 55111))
;;; Generated autoloads from net/eudc-export.el
-(autoload (quote eudc-insert-record-at-point-into-bbdb) "eudc-export" "\
+(autoload 'eudc-insert-record-at-point-into-bbdb "eudc-export" "\
Insert record at point into the BBDB database.
This function can only be called from a directory query result buffer.
\(fn)" t nil)
-(autoload (quote eudc-try-bbdb-insert) "eudc-export" "\
+(autoload 'eudc-try-bbdb-insert "eudc-export" "\
Call `eudc-insert-record-at-point-into-bbdb' if on a record.
\(fn)" t nil)
@@ -10353,21 +10448,21 @@ Call `eudc-insert-record-at-point-into-bbdb' if on a record.
;;;***
;;;### (autoloads (eudc-edit-hotlist) "eudc-hotlist" "net/eudc-hotlist.el"
-;;;;;; (17842 55218))
+;;;;;; (18203 37788))
;;; Generated autoloads from net/eudc-hotlist.el
-(autoload (quote eudc-edit-hotlist) "eudc-hotlist" "\
+(autoload 'eudc-edit-hotlist "eudc-hotlist" "\
Edit the hotlist of directory servers in a specialized buffer.
\(fn)" t nil)
;;;***
-;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (17933
-;;;;;; 14283))
+;;;### (autoloads (ewoc-create) "ewoc" "emacs-lisp/ewoc.el" (18088
+;;;;;; 55095))
;;; Generated autoloads from emacs-lisp/ewoc.el
-(autoload (quote ewoc-create) "ewoc" "\
+(autoload 'ewoc-create "ewoc" "\
Create an empty ewoc.
The ewoc will be inserted in the current buffer at the current position.
@@ -10393,16 +10488,16 @@ fourth arg NOSEP non-nil inhibits this.
;;;### (autoloads (executable-make-buffer-file-executable-if-script-p
;;;;;; executable-self-display executable-set-magic executable-interpret
;;;;;; executable-command-find-posix-p) "executable" "progmodes/executable.el"
-;;;;;; (17842 56333))
+;;;;;; (18088 55116))
;;; Generated autoloads from progmodes/executable.el
-(autoload (quote executable-command-find-posix-p) "executable" "\
+(autoload 'executable-command-find-posix-p "executable" "\
Check if PROGRAM handles arguments Posix-style.
If PROGRAM is non-nil, use that instead of \"find\".
\(fn &optional PROGRAM)" nil nil)
-(autoload (quote executable-interpret) "executable" "\
+(autoload 'executable-interpret "executable" "\
Run script with user-specified args, and collect output in a buffer.
While script runs asynchronously, you can use the \\[next-error]
command to find the next error. The buffer is also in `comint-mode' and
@@ -10410,7 +10505,7 @@ command to find the next error. The buffer is also in `comint-mode' and
\(fn COMMAND)" t nil)
-(autoload (quote executable-set-magic) "executable" "\
+(autoload 'executable-set-magic "executable" "\
Set this buffer's interpreter to INTERPRETER with optional ARGUMENT.
The variables `executable-magicless-file-regexp', `executable-prefix',
`executable-insert', `executable-query' and `executable-chmod' control
@@ -10419,13 +10514,13 @@ executable.
\(fn INTERPRETER &optional ARGUMENT NO-QUERY-FLAG INSERT-FLAG)" t nil)
-(autoload (quote executable-self-display) "executable" "\
+(autoload 'executable-self-display "executable" "\
Turn a text file into a self-displaying Un*x command.
The magic number of such a command displays all lines but itself.
\(fn)" t nil)
-(autoload (quote executable-make-buffer-file-executable-if-script-p) "executable" "\
+(autoload 'executable-make-buffer-file-executable-if-script-p "executable" "\
Make file executable according to umask if not already executable.
If file already has any execute bits set at all, do not change existing
file modes.
@@ -10436,10 +10531,10 @@ file modes.
;;;### (autoloads (expand-jump-to-next-slot expand-jump-to-previous-slot
;;;;;; expand-abbrev-hook expand-add-abbrevs) "expand" "expand.el"
-;;;;;; (17925 52793))
+;;;;;; (18088 55083))
;;; Generated autoloads from expand.el
-(autoload (quote expand-add-abbrevs) "expand" "\
+(autoload 'expand-add-abbrevs "expand" "\
Add a list of abbrev to abbrev table TABLE.
ABBREVS is a list of abbrev definitions; each abbrev description entry
has the form (ABBREV EXPANSION ARG).
@@ -10463,19 +10558,19 @@ If ARG is omitted, point is placed at the end of the expanded text.
\(fn TABLE ABBREVS)" nil nil)
-(autoload (quote expand-abbrev-hook) "expand" "\
+(autoload 'expand-abbrev-hook "expand" "\
Abbrev hook used to do the expansion job of expand abbrevs.
See `expand-add-abbrevs'. Value is non-nil if expansion was done.
\(fn)" nil nil)
-(autoload (quote expand-jump-to-previous-slot) "expand" "\
+(autoload 'expand-jump-to-previous-slot "expand" "\
Move the cursor to the previous slot in the last abbrev expansion.
This is used only in conjunction with `expand-add-abbrevs'.
\(fn)" t nil)
-(autoload (quote expand-jump-to-next-slot) "expand" "\
+(autoload 'expand-jump-to-next-slot "expand" "\
Move the cursor to the next slot in the last abbrev expansion.
This is used only in conjunction with `expand-add-abbrevs'.
@@ -10485,10 +10580,10 @@ This is used only in conjunction with `expand-add-abbrevs'.
;;;***
-;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (17842 56333))
+;;;### (autoloads (f90-mode) "f90" "progmodes/f90.el" (18212 46008))
;;; Generated autoloads from progmodes/f90.el
-(autoload (quote f90-mode) "f90" "\
+(autoload 'f90-mode "f90" "\
Major mode for editing Fortran 90,95 code in free format.
For fixed format code, use `fortran-mode'.
@@ -10506,9 +10601,9 @@ Variables controlling indentation style and extra features:
`f90-do-indent'
Extra indentation within do blocks (default 3).
`f90-if-indent'
- Extra indentation within if/select case/where/forall blocks (default 3).
+ Extra indentation within if/select/where/forall blocks (default 3).
`f90-type-indent'
- Extra indentation within type/interface/block-data blocks (default 3).
+ Extra indentation within type/enum/interface/block-data blocks (default 3).
`f90-program-indent'
Extra indentation within program/module/subroutine/function blocks
(default 2).
@@ -10552,53 +10647,53 @@ with no args, if that value is non-nil.
;;;;;; facemenu-remove-all facemenu-remove-face-props facemenu-set-read-only
;;;;;; facemenu-set-intangible facemenu-set-invisible facemenu-set-face-from-menu
;;;;;; facemenu-set-background facemenu-set-foreground facemenu-set-face)
-;;;;;; "facemenu" "facemenu.el" (17842 58279))
+;;;;;; "facemenu" "facemenu.el" (18088 55083))
;;; Generated autoloads from facemenu.el
(define-key global-map "\M-o" 'facemenu-keymap)
(autoload 'facemenu-keymap "facemenu" "Keymap for face-changing commands." t 'keymap)
-(defvar facemenu-face-menu (let ((map (make-sparse-keymap "Face"))) (define-key map "o" (cons "Other..." (quote facemenu-set-face))) map) "\
+(defvar facemenu-face-menu (let ((map (make-sparse-keymap "Face"))) (define-key map "o" (cons "Other..." 'facemenu-set-face)) map) "\
Menu keymap for faces.")
-(defalias (quote facemenu-face-menu) facemenu-face-menu)
+(defalias 'facemenu-face-menu facemenu-face-menu)
-(defvar facemenu-foreground-menu (let ((map (make-sparse-keymap "Foreground Color"))) (define-key map "o" (cons "Other..." (quote facemenu-set-foreground))) map) "\
+(defvar facemenu-foreground-menu (let ((map (make-sparse-keymap "Foreground Color"))) (define-key map "o" (cons "Other..." 'facemenu-set-foreground)) map) "\
Menu keymap for foreground colors.")
-(defalias (quote facemenu-foreground-menu) facemenu-foreground-menu)
+(defalias 'facemenu-foreground-menu facemenu-foreground-menu)
-(defvar facemenu-background-menu (let ((map (make-sparse-keymap "Background Color"))) (define-key map "o" (cons "Other..." (quote facemenu-set-background))) map) "\
+(defvar facemenu-background-menu (let ((map (make-sparse-keymap "Background Color"))) (define-key map "o" (cons "Other..." 'facemenu-set-background)) map) "\
Menu keymap for background colors.")
-(defalias (quote facemenu-background-menu) facemenu-background-menu)
+(defalias 'facemenu-background-menu facemenu-background-menu)
-(defvar facemenu-special-menu (let ((map (make-sparse-keymap "Special"))) (define-key map [115] (cons (purecopy "Remove Special") (quote facemenu-remove-special))) (define-key map [116] (cons (purecopy "Intangible") (quote facemenu-set-intangible))) (define-key map [118] (cons (purecopy "Invisible") (quote facemenu-set-invisible))) (define-key map [114] (cons (purecopy "Read-Only") (quote facemenu-set-read-only))) map) "\
+(defvar facemenu-special-menu (let ((map (make-sparse-keymap "Special"))) (define-key map [115] (cons (purecopy "Remove Special") 'facemenu-remove-special)) (define-key map [116] (cons (purecopy "Intangible") 'facemenu-set-intangible)) (define-key map [118] (cons (purecopy "Invisible") 'facemenu-set-invisible)) (define-key map [114] (cons (purecopy "Read-Only") 'facemenu-set-read-only)) map) "\
Menu keymap for non-face text-properties.")
-(defalias (quote facemenu-special-menu) facemenu-special-menu)
+(defalias 'facemenu-special-menu facemenu-special-menu)
-(defvar facemenu-justification-menu (let ((map (make-sparse-keymap "Justification"))) (define-key map [99] (cons (purecopy "Center") (quote set-justification-center))) (define-key map [98] (cons (purecopy "Full") (quote set-justification-full))) (define-key map [114] (cons (purecopy "Right") (quote set-justification-right))) (define-key map [108] (cons (purecopy "Left") (quote set-justification-left))) (define-key map [117] (cons (purecopy "Unfilled") (quote set-justification-none))) map) "\
+(defvar facemenu-justification-menu (let ((map (make-sparse-keymap "Justification"))) (define-key map [99] (cons (purecopy "Center") 'set-justification-center)) (define-key map [98] (cons (purecopy "Full") 'set-justification-full)) (define-key map [114] (cons (purecopy "Right") 'set-justification-right)) (define-key map [108] (cons (purecopy "Left") 'set-justification-left)) (define-key map [117] (cons (purecopy "Unfilled") 'set-justification-none)) map) "\
Submenu for text justification commands.")
-(defalias (quote facemenu-justification-menu) facemenu-justification-menu)
+(defalias 'facemenu-justification-menu facemenu-justification-menu)
-(defvar facemenu-indentation-menu (let ((map (make-sparse-keymap "Indentation"))) (define-key map [decrease-right-margin] (cons (purecopy "Indent Right Less") (quote decrease-right-margin))) (define-key map [increase-right-margin] (cons (purecopy "Indent Right More") (quote increase-right-margin))) (define-key map [decrease-left-margin] (cons (purecopy "Indent Less") (quote decrease-left-margin))) (define-key map [increase-left-margin] (cons (purecopy "Indent More") (quote increase-left-margin))) map) "\
+(defvar facemenu-indentation-menu (let ((map (make-sparse-keymap "Indentation"))) (define-key map [decrease-right-margin] (cons (purecopy "Indent Right Less") 'decrease-right-margin)) (define-key map [increase-right-margin] (cons (purecopy "Indent Right More") 'increase-right-margin)) (define-key map [decrease-left-margin] (cons (purecopy "Indent Less") 'decrease-left-margin)) (define-key map [increase-left-margin] (cons (purecopy "Indent More") 'increase-left-margin)) map) "\
Submenu for indentation commands.")
-(defalias (quote facemenu-indentation-menu) facemenu-indentation-menu)
+(defalias 'facemenu-indentation-menu facemenu-indentation-menu)
(defvar facemenu-menu nil "\
Facemenu top-level menu keymap.")
(setq facemenu-menu (make-sparse-keymap "Text Properties"))
-(let ((map facemenu-menu)) (define-key map [dc] (cons (purecopy "Display Colors") (quote list-colors-display))) (define-key map [df] (cons (purecopy "Display Faces") (quote list-faces-display))) (define-key map [dp] (cons (purecopy "Describe Properties") (quote describe-text-properties))) (define-key map [ra] (cons (purecopy "Remove Text Properties") (quote facemenu-remove-all))) (define-key map [rm] (cons (purecopy "Remove Face Properties") (quote facemenu-remove-face-props))) (define-key map [s1] (list (purecopy "--"))))
+(let ((map facemenu-menu)) (define-key map [dc] (cons (purecopy "Display Colors") 'list-colors-display)) (define-key map [df] (cons (purecopy "Display Faces") 'list-faces-display)) (define-key map [dp] (cons (purecopy "Describe Properties") 'describe-text-properties)) (define-key map [ra] (cons (purecopy "Remove Text Properties") 'facemenu-remove-all)) (define-key map [rm] (cons (purecopy "Remove Face Properties") 'facemenu-remove-face-props)) (define-key map [s1] (list (purecopy "--"))))
-(let ((map facemenu-menu)) (define-key map [in] (cons (purecopy "Indentation") (quote facemenu-indentation-menu))) (define-key map [ju] (cons (purecopy "Justification") (quote facemenu-justification-menu))) (define-key map [s2] (list (purecopy "--"))) (define-key map [sp] (cons (purecopy "Special Properties") (quote facemenu-special-menu))) (define-key map [bg] (cons (purecopy "Background Color") (quote facemenu-background-menu))) (define-key map [fg] (cons (purecopy "Foreground Color") (quote facemenu-foreground-menu))) (define-key map [fc] (cons (purecopy "Face") (quote facemenu-face-menu))))
+(let ((map facemenu-menu)) (define-key map [in] (cons (purecopy "Indentation") 'facemenu-indentation-menu)) (define-key map [ju] (cons (purecopy "Justification") 'facemenu-justification-menu)) (define-key map [s2] (list (purecopy "--"))) (define-key map [sp] (cons (purecopy "Special Properties") 'facemenu-special-menu)) (define-key map [bg] (cons (purecopy "Background Color") 'facemenu-background-menu)) (define-key map [fg] (cons (purecopy "Foreground Color") 'facemenu-foreground-menu)) (define-key map [fc] (cons (purecopy "Face") 'facemenu-face-menu)))
-(defalias (quote facemenu-menu) facemenu-menu)
+(defalias 'facemenu-menu facemenu-menu)
-(autoload (quote facemenu-set-face) "facemenu" "\
+(autoload 'facemenu-set-face "facemenu" "\
Apply FACE to the region or next character typed.
If the region is active (normally true except in Transient
@@ -10620,7 +10715,7 @@ if `facemenu-listed-faces' says to do that.
\(fn FACE &optional START END)" t nil)
-(autoload (quote facemenu-set-foreground) "facemenu" "\
+(autoload 'facemenu-set-foreground "facemenu" "\
Set the foreground COLOR of the region or next character typed.
This command reads the color in the minibuffer.
@@ -10634,7 +10729,7 @@ typing a character to insert cancels the specification.
\(fn COLOR &optional START END)" t nil)
-(autoload (quote facemenu-set-background) "facemenu" "\
+(autoload 'facemenu-set-background "facemenu" "\
Set the background COLOR of the region or next character typed.
This command reads the color in the minibuffer.
@@ -10648,7 +10743,7 @@ typing a character to insert cancels the specification.
\(fn COLOR &optional START END)" t nil)
-(autoload (quote facemenu-set-face-from-menu) "facemenu" "\
+(autoload 'facemenu-set-face-from-menu "facemenu" "\
Set the FACE of the region or next character typed.
This function is designed to be called from a menu; FACE is determined
using the event type of the menu entry. If FACE is a symbol whose
@@ -10666,49 +10761,49 @@ to insert cancels the specification.
\(fn FACE START END)" t nil)
-(autoload (quote facemenu-set-invisible) "facemenu" "\
+(autoload 'facemenu-set-invisible "facemenu" "\
Make the region invisible.
This sets the `invisible' text property; it can be undone with
`facemenu-remove-special'.
\(fn START END)" t nil)
-(autoload (quote facemenu-set-intangible) "facemenu" "\
+(autoload 'facemenu-set-intangible "facemenu" "\
Make the region intangible: disallow moving into it.
This sets the `intangible' text property; it can be undone with
`facemenu-remove-special'.
\(fn START END)" t nil)
-(autoload (quote facemenu-set-read-only) "facemenu" "\
+(autoload 'facemenu-set-read-only "facemenu" "\
Make the region unmodifiable.
This sets the `read-only' text property; it can be undone with
`facemenu-remove-special'.
\(fn START END)" t nil)
-(autoload (quote facemenu-remove-face-props) "facemenu" "\
+(autoload 'facemenu-remove-face-props "facemenu" "\
Remove `face' and `mouse-face' text properties.
\(fn START END)" t nil)
-(autoload (quote facemenu-remove-all) "facemenu" "\
+(autoload 'facemenu-remove-all "facemenu" "\
Remove all text properties from the region.
\(fn START END)" t nil)
-(autoload (quote facemenu-remove-special) "facemenu" "\
+(autoload 'facemenu-remove-special "facemenu" "\
Remove all the \"special\" text properties from the region.
These special properties include `invisible', `intangible' and `read-only'.
\(fn START END)" t nil)
-(autoload (quote facemenu-read-color) "facemenu" "\
+(autoload 'facemenu-read-color "facemenu" "\
Read a color using the minibuffer.
\(fn &optional PROMPT)" nil nil)
-(autoload (quote list-colors-display) "facemenu" "\
+(autoload 'list-colors-display "facemenu" "\
Display names of defined colors, and show what they look like.
If the optional argument LIST is non-nil, it should be a list of
colors to display. Otherwise, this command computes a list of
@@ -10721,29 +10816,29 @@ argument BUFFER-NAME is nil, it defaults to *Colors*.
;;;### (autoloads (feedmail-queue-reminder feedmail-run-the-queue
;;;;;; feedmail-run-the-queue-global-prompt feedmail-run-the-queue-no-prompts
-;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (17888 29839))
+;;;;;; feedmail-send-it) "feedmail" "mail/feedmail.el" (18192 17587))
;;; Generated autoloads from mail/feedmail.el
-(autoload (quote feedmail-send-it) "feedmail" "\
+(autoload 'feedmail-send-it "feedmail" "\
Send the current mail buffer using the Feedmail package.
This is a suitable value for `send-mail-function'. It can be used
with various lower-level mechanisms to provide features such as queueing.
\(fn)" nil nil)
-(autoload (quote feedmail-run-the-queue-no-prompts) "feedmail" "\
+(autoload 'feedmail-run-the-queue-no-prompts "feedmail" "\
Like `feedmail-run-the-queue', but suppress confirmation prompts.
\(fn &optional ARG)" t nil)
-(autoload (quote feedmail-run-the-queue-global-prompt) "feedmail" "\
+(autoload 'feedmail-run-the-queue-global-prompt "feedmail" "\
Like `feedmail-run-the-queue', but with a global confirmation prompt.
This is generally most useful if run non-interactively, since you can
bail out with an appropriate answer to the global confirmation prompt.
\(fn &optional ARG)" t nil)
-(autoload (quote feedmail-run-the-queue) "feedmail" "\
+(autoload 'feedmail-run-the-queue "feedmail" "\
Visit each message in the feedmail queue directory and send it out.
Return value is a list of three things: number of messages sent, number of
messages skipped, and number of non-message things in the queue (commonly
@@ -10751,7 +10846,7 @@ backup file names and the like).
\(fn &optional ARG)" t nil)
-(autoload (quote feedmail-queue-reminder) "feedmail" "\
+(autoload 'feedmail-queue-reminder "feedmail" "\
Perform some kind of reminder activity about queued and draft messages.
Called with an optional symbol argument which says what kind of event
is triggering the reminder activity. The default is 'on-demand, which
@@ -10775,10 +10870,10 @@ you can set `feedmail-queue-reminder-alist' to nil.
;;;***
;;;### (autoloads (ffap-bindings dired-at-point ffap-at-mouse ffap-menu
-;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (17943 4602))
+;;;;;; find-file-at-point ffap-next) "ffap" "ffap.el" (18169 11931))
;;; Generated autoloads from ffap.el
-(autoload (quote ffap-next) "ffap" "\
+(autoload 'ffap-next "ffap" "\
Search buffer for next file or URL, and run ffap.
Optional argument BACK says to search backwards.
Optional argument WRAP says to try wrapping around if necessary.
@@ -10788,7 +10883,7 @@ Actual search is done by `ffap-next-guess'.
\(fn &optional BACK WRAP)" t nil)
-(autoload (quote find-file-at-point) "ffap" "\
+(autoload 'find-file-at-point "ffap" "\
Find FILENAME, guessing a default from text around point.
If `ffap-url-regexp' is not nil, the FILENAME may also be an URL.
With a prefix, this command behaves exactly like `ffap-file-finder'.
@@ -10798,9 +10893,9 @@ and the functions `ffap-file-at-point' and `ffap-url-at-point'.
\(fn &optional FILENAME)" t nil)
-(defalias (quote ffap) (quote find-file-at-point))
+(defalias 'ffap 'find-file-at-point)
-(autoload (quote ffap-menu) "ffap" "\
+(autoload 'ffap-menu "ffap" "\
Put up a menu of files and urls mentioned in this buffer.
Then set mark, jump to choice, and try to fetch it. The menu is
cached in `ffap-menu-alist', and rebuilt by `ffap-menu-rescan'.
@@ -10809,7 +10904,7 @@ a rebuild. Searches with `ffap-menu-regexp'.
\(fn &optional RESCAN)" t nil)
-(autoload (quote ffap-at-mouse) "ffap" "\
+(autoload 'ffap-at-mouse "ffap" "\
Find file or url guessed from text around mouse click.
Interactively, calls `ffap-at-mouse-fallback' if no guess is found.
Return value:
@@ -10819,12 +10914,12 @@ Return value:
\(fn E)" t nil)
-(autoload (quote dired-at-point) "ffap" "\
+(autoload 'dired-at-point "ffap" "\
Start Dired, defaulting to file at point. See `ffap'.
\(fn &optional FILENAME)" t nil)
-(autoload (quote ffap-bindings) "ffap" "\
+(autoload 'ffap-bindings "ffap" "\
Evaluate the forms in variable `ffap-bindings'.
\(fn)" t nil)
@@ -10834,17 +10929,17 @@ Evaluate the forms in variable `ffap-bindings'.
;;;### (autoloads (file-cache-minibuffer-complete file-cache-add-directory-recursively
;;;;;; file-cache-add-directory-using-locate file-cache-add-directory-using-find
;;;;;; file-cache-add-file file-cache-add-directory-list file-cache-add-directory)
-;;;;;; "filecache" "filecache.el" (17842 58279))
+;;;;;; "filecache" "filecache.el" (18169 11931))
;;; Generated autoloads from filecache.el
-(autoload (quote file-cache-add-directory) "filecache" "\
+(autoload 'file-cache-add-directory "filecache" "\
Add DIRECTORY to the file cache.
If the optional REGEXP argument is non-nil, only files which match it will
be added to the cache.
\(fn DIRECTORY &optional REGEXP)" t nil)
-(autoload (quote file-cache-add-directory-list) "filecache" "\
+(autoload 'file-cache-add-directory-list "filecache" "\
Add DIRECTORY-LIST (a list of directory names) to the file cache.
If the optional REGEXP argument is non-nil, only files which match it
will be added to the cache. Note that the REGEXP is applied to the files
@@ -10852,24 +10947,24 @@ in each directory, not to the directory list itself.
\(fn DIRECTORY-LIST &optional REGEXP)" t nil)
-(autoload (quote file-cache-add-file) "filecache" "\
+(autoload 'file-cache-add-file "filecache" "\
Add FILE to the file cache.
\(fn FILE)" t nil)
-(autoload (quote file-cache-add-directory-using-find) "filecache" "\
+(autoload 'file-cache-add-directory-using-find "filecache" "\
Use the `find' command to add files to the file cache.
Find is run in DIRECTORY.
\(fn DIRECTORY)" t nil)
-(autoload (quote file-cache-add-directory-using-locate) "filecache" "\
+(autoload 'file-cache-add-directory-using-locate "filecache" "\
Use the `locate' command to add files to the file cache.
STRING is passed as an argument to the locate command.
\(fn STRING)" t nil)
-(autoload (quote file-cache-add-directory-recursively) "filecache" "\
+(autoload 'file-cache-add-directory-recursively "filecache" "\
Adds DIR and any subdirectories to the file-cache.
This function does not use any external programs
If the optional REGEXP argument is non-nil, only files which match it
@@ -10878,7 +10973,7 @@ in each directory, not to the directory list itself.
\(fn DIR &optional REGEXP)" t nil)
-(autoload (quote file-cache-minibuffer-complete) "filecache" "\
+(autoload 'file-cache-minibuffer-complete "filecache" "\
Complete a filename in the minibuffer using a preloaded cache.
Filecache does two kinds of substitution: it completes on names in
the cache, and, once it has found a unique name, it cycles through
@@ -10893,11 +10988,11 @@ the name is considered already unique; only the second substitution
;;;***
-;;;### (autoloads (filesets-init) "filesets" "filesets.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (filesets-init) "filesets" "filesets.el" (18197
+;;;;;; 21668))
;;; Generated autoloads from filesets.el
-(autoload (quote filesets-init) "filesets" "\
+(autoload 'filesets-init "filesets" "\
Filesets initialization.
Set up hooks, load the cache file -- if existing -- and build the menu.
@@ -10905,7 +11000,7 @@ Set up hooks, load the cache file -- if existing -- and build the menu.
;;;***
-;;;### (autoloads nil "fill" "textmodes/fill.el" (18007 39658))
+;;;### (autoloads nil "fill" "textmodes/fill.el" (18210 22046))
;;; Generated autoloads from textmodes/fill.el
(put 'colon-double-space 'safe-local-variable 'booleanp)
@@ -10913,16 +11008,16 @@ Set up hooks, load the cache file -- if existing -- and build the menu.
;;;### (autoloads (find-grep-dired find-name-dired find-dired find-grep-options
;;;;;; find-ls-subdir-switches find-ls-option) "find-dired" "find-dired.el"
-;;;;;; (17992 30877))
+;;;;;; (18088 55084))
;;; Generated autoloads from find-dired.el
-(defvar find-ls-option (if (eq system-type (quote berkeley-unix)) (quote ("-ls" . "-gilsb")) (quote ("-exec ls -ld {} \\;" . "-ld"))) "\
+(defvar find-ls-option (if (eq system-type 'berkeley-unix) '("-ls" . "-gilsb") '("-exec ls -ld {} \\;" . "-ld")) "\
*Description of the option to `find' to produce an `ls -l'-type listing.
This is a cons of two strings (FIND-OPTION . LS-SWITCHES). FIND-OPTION
gives the option (or options) to `find' that produce the desired output.
LS-SWITCHES is a list of `ls' switches to tell dired how to parse the output.")
-(custom-autoload (quote find-ls-option) "find-dired" t)
+(custom-autoload 'find-ls-option "find-dired" t)
(defvar find-ls-subdir-switches "-al" "\
`ls' switches for inserting subdirectories in `*Find*' buffers.
@@ -10930,16 +11025,16 @@ This should contain the \"-l\" switch.
Use the \"-F\" or \"-b\" switches if and only if you also use
them for `find-ls-option'.")
-(custom-autoload (quote find-ls-subdir-switches) "find-dired" t)
+(custom-autoload 'find-ls-subdir-switches "find-dired" t)
-(defvar find-grep-options (if (or (eq system-type (quote berkeley-unix)) (string-match "solaris2" system-configuration) (string-match "irix" system-configuration)) "-s" "-q") "\
+(defvar find-grep-options (if (or (eq system-type 'berkeley-unix) (string-match "solaris2" system-configuration) (string-match "irix" system-configuration)) "-s" "-q") "\
*Option to grep to be as silent as possible.
On Berkeley systems, this is `-s'; on Posix, and with GNU grep, `-q' does it.
On other systems, the closest you can come is to use `-l'.")
-(custom-autoload (quote find-grep-options) "find-dired" t)
+(custom-autoload 'find-grep-options "find-dired" t)
-(autoload (quote find-dired) "find-dired" "\
+(autoload 'find-dired "find-dired" "\
Run `find' and go into Dired mode on a buffer of the output.
The command run (after changing into DIR) is
@@ -10950,7 +11045,7 @@ as the final argument.
\(fn DIR ARGS)" t nil)
-(autoload (quote find-name-dired) "find-dired" "\
+(autoload 'find-name-dired "find-dired" "\
Search DIR recursively for files matching the globbing pattern PATTERN,
and run dired on those files.
PATTERN is a shell wildcard (not an Emacs regexp) and need not be quoted.
@@ -10960,7 +11055,7 @@ The command run (after changing into DIR) is
\(fn DIR PATTERN)" t nil)
-(autoload (quote find-grep-dired) "find-dired" "\
+(autoload 'find-grep-dired "find-dired" "\
Find files in DIR containing a regexp REGEXP and start Dired on output.
The command run (after changing into DIR) is
@@ -10974,10 +11069,10 @@ Thus ARG can also contain additional grep options.
;;;### (autoloads (ff-mouse-find-other-file-other-window ff-mouse-find-other-file
;;;;;; ff-find-other-file ff-get-other-file) "find-file" "find-file.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55084))
;;; Generated autoloads from find-file.el
-(defvar ff-special-constructs (quote (("^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]" lambda nil (buffer-substring (match-beginning 2) (match-end 2))))) "\
+(defvar ff-special-constructs '(("^#\\s *\\(include\\|import\\)\\s +[<\"]\\(.*\\)[>\"]" lambda nil (buffer-substring (match-beginning 2) (match-end 2)))) "\
*List of special constructs for `ff-treat-as-special' to recognize.
Each element, tried in order, has the form (REGEXP . EXTRACT).
If REGEXP matches the current line (from the beginning of the line),
@@ -10985,7 +11080,7 @@ If REGEXP matches the current line (from the beginning of the line),
If EXTRACT returns nil, keep trying. Otherwise, return the
filename that EXTRACT returned.")
-(autoload (quote ff-get-other-file) "find-file" "\
+(autoload 'ff-get-other-file "find-file" "\
Find the header or source file corresponding to this file.
See also the documentation for `ff-find-other-file'.
@@ -10993,9 +11088,9 @@ If optional IN-OTHER-WINDOW is non-nil, find the file in another window.
\(fn &optional IN-OTHER-WINDOW)" t nil)
-(defalias (quote ff-find-related-file) (quote ff-find-other-file))
+(defalias 'ff-find-related-file 'ff-find-other-file)
-(autoload (quote ff-find-other-file) "find-file" "\
+(autoload 'ff-find-other-file "find-file" "\
Find the header or source file corresponding to this file.
Being on a `#include' line pulls in that file.
@@ -11050,12 +11145,12 @@ Variables of interest include:
\(fn &optional IN-OTHER-WINDOW IGNORE-INCLUDE)" t nil)
-(autoload (quote ff-mouse-find-other-file) "find-file" "\
+(autoload 'ff-mouse-find-other-file "find-file" "\
Visit the file you click on.
\(fn EVENT)" t nil)
-(autoload (quote ff-mouse-find-other-file-other-window) "find-file" "\
+(autoload 'ff-mouse-find-other-file-other-window "find-file" "\
Visit the file you click on in another window.
\(fn EVENT)" t nil)
@@ -11068,15 +11163,15 @@ Visit the file you click on in another window.
;;;;;; find-variable find-variable-noselect find-function-other-frame
;;;;;; find-function-other-window find-function find-function-noselect
;;;;;; find-function-search-for-symbol find-library) "find-func"
-;;;;;; "emacs-lisp/find-func.el" (17842 54152))
+;;;;;; "emacs-lisp/find-func.el" (18200 51265))
;;; Generated autoloads from emacs-lisp/find-func.el
-(autoload (quote find-library) "find-func" "\
+(autoload 'find-library "find-func" "\
Find the elisp source of LIBRARY.
\(fn LIBRARY)" t nil)
-(autoload (quote find-function-search-for-symbol) "find-func" "\
+(autoload 'find-function-search-for-symbol "find-func" "\
Search for SYMBOL's definition of type TYPE in LIBRARY.
Visit the library in a buffer, and return a cons cell (BUFFER . POSITION),
or just (BUFFER . nil) if the definition can't be found in the file.
@@ -11088,7 +11183,7 @@ The search is done in the source for library LIBRARY.
\(fn SYMBOL TYPE LIBRARY)" nil nil)
-(autoload (quote find-function-noselect) "find-func" "\
+(autoload 'find-function-noselect "find-func" "\
Return a pair (BUFFER . POINT) pointing to the definition of FUNCTION.
Finds the source file containing the definition of FUNCTION
@@ -11102,7 +11197,7 @@ in `load-path'.
\(fn FUNCTION)" nil nil)
-(autoload (quote find-function) "find-func" "\
+(autoload 'find-function "find-func" "\
Find the definition of the FUNCTION near point.
Finds the source file containing the definition of the function
@@ -11116,21 +11211,21 @@ See also `find-function-recenter-line' and `find-function-after-hook'.
\(fn FUNCTION)" t nil)
-(autoload (quote find-function-other-window) "find-func" "\
+(autoload 'find-function-other-window "find-func" "\
Find, in another window, the definition of FUNCTION near point.
See `find-function' for more details.
\(fn FUNCTION)" t nil)
-(autoload (quote find-function-other-frame) "find-func" "\
+(autoload 'find-function-other-frame "find-func" "\
Find, in another frame, the definition of FUNCTION near point.
See `find-function' for more details.
\(fn FUNCTION)" t nil)
-(autoload (quote find-variable-noselect) "find-func" "\
+(autoload 'find-variable-noselect "find-func" "\
Return a pair `(BUFFER . POINT)' pointing to the definition of VARIABLE.
Finds the library containing the definition of VARIABLE in a buffer and
@@ -11142,7 +11237,7 @@ The library where VARIABLE is defined is searched for in FILE or
\(fn VARIABLE &optional FILE)" nil nil)
-(autoload (quote find-variable) "find-func" "\
+(autoload 'find-variable "find-func" "\
Find the definition of the VARIABLE at or before point.
Finds the library containing the definition of the variable
@@ -11157,21 +11252,21 @@ See also `find-function-recenter-line' and `find-function-after-hook'.
\(fn VARIABLE)" t nil)
-(autoload (quote find-variable-other-window) "find-func" "\
+(autoload 'find-variable-other-window "find-func" "\
Find, in another window, the definition of VARIABLE near point.
See `find-variable' for more details.
\(fn VARIABLE)" t nil)
-(autoload (quote find-variable-other-frame) "find-func" "\
+(autoload 'find-variable-other-frame "find-func" "\
Find, in another frame, the definition of VARIABLE near point.
See `find-variable' for more details.
\(fn VARIABLE)" t nil)
-(autoload (quote find-definition-noselect) "find-func" "\
+(autoload 'find-definition-noselect "find-func" "\
Return a pair `(BUFFER . POINT)' pointing to the definition of SYMBOL.
If the definition can't be found in the buffer, return (BUFFER).
TYPE says what type of definition: nil for a function, `defvar' for a
@@ -11183,7 +11278,7 @@ The library where SYMBOL is defined is searched for in FILE or
\(fn SYMBOL TYPE &optional FILE)" nil nil)
-(autoload (quote find-face-definition) "find-func" "\
+(autoload 'find-face-definition "find-func" "\
Find the definition of FACE. FACE defaults to the name near point.
Finds the Emacs Lisp library containing the definition of the face
@@ -11198,23 +11293,23 @@ See also `find-function-recenter-line' and `find-function-after-hook'.
\(fn FACE)" t nil)
-(autoload (quote find-function-on-key) "find-func" "\
+(autoload 'find-function-on-key "find-func" "\
Find the function that KEY invokes. KEY is a string.
Set mark before moving, if the buffer already existed.
\(fn KEY)" t nil)
-(autoload (quote find-function-at-point) "find-func" "\
+(autoload 'find-function-at-point "find-func" "\
Find directly the function at point in the other window.
\(fn)" t nil)
-(autoload (quote find-variable-at-point) "find-func" "\
+(autoload 'find-variable-at-point "find-func" "\
Find directly the variable at point in the other window.
\(fn)" t nil)
-(autoload (quote find-function-setup-keys) "find-func" "\
+(autoload 'find-function-setup-keys "find-func" "\
Define some key bindings for the find-function family of functions.
\(fn)" nil nil)
@@ -11222,20 +11317,20 @@ Define some key bindings for the find-function family of functions.
;;;***
;;;### (autoloads (find-lisp-find-dired-filter find-lisp-find-dired-subdirectories
-;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (17893 23802))
+;;;;;; find-lisp-find-dired) "find-lisp" "find-lisp.el" (18169 11931))
;;; Generated autoloads from find-lisp.el
-(autoload (quote find-lisp-find-dired) "find-lisp" "\
+(autoload 'find-lisp-find-dired "find-lisp" "\
Find files in DIR, matching REGEXP.
\(fn DIR REGEXP)" t nil)
-(autoload (quote find-lisp-find-dired-subdirectories) "find-lisp" "\
+(autoload 'find-lisp-find-dired-subdirectories "find-lisp" "\
Find all subdirectories of DIR.
\(fn DIR)" t nil)
-(autoload (quote find-lisp-find-dired-filter) "find-lisp" "\
+(autoload 'find-lisp-find-dired-filter "find-lisp" "\
Change the filter on a find-lisp-find-dired buffer to REGEXP.
\(fn REGEXP)" t nil)
@@ -11243,21 +11338,21 @@ Change the filter on a find-lisp-find-dired buffer to REGEXP.
;;;***
;;;### (autoloads (finder-by-keyword finder-commentary finder-list-keywords)
-;;;;;; "finder" "finder.el" (17842 58279))
+;;;;;; "finder" "finder.el" (18169 11931))
;;; Generated autoloads from finder.el
-(autoload (quote finder-list-keywords) "finder" "\
+(autoload 'finder-list-keywords "finder" "\
Display descriptions of the keywords in the Finder buffer.
\(fn)" t nil)
-(autoload (quote finder-commentary) "finder" "\
+(autoload 'finder-commentary "finder" "\
Display FILE's commentary section.
FILE should be in a form suitable for passing to `locate-library'.
\(fn FILE)" t nil)
-(autoload (quote finder-by-keyword) "finder" "\
+(autoload 'finder-by-keyword "finder" "\
Find packages matching a given keyword.
\(fn)" t nil)
@@ -11265,17 +11360,17 @@ Find packages matching a given keyword.
;;;***
;;;### (autoloads (enable-flow-control-on enable-flow-control) "flow-ctrl"
-;;;;;; "flow-ctrl.el" (17842 58279))
+;;;;;; "flow-ctrl.el" (18088 55084))
;;; Generated autoloads from flow-ctrl.el
-(autoload (quote enable-flow-control) "flow-ctrl" "\
+(autoload 'enable-flow-control "flow-ctrl" "\
Toggle flow control handling.
When handling is enabled, user can type C-s as C-\\, and C-q as C-^.
With arg, enable flow control mode if arg is positive, otherwise disable.
\(fn &optional ARGUMENT)" t nil)
-(autoload (quote enable-flow-control-on) "flow-ctrl" "\
+(autoload 'enable-flow-control-on "flow-ctrl" "\
Enable flow control if using one of a specified set of terminal types.
Use `(enable-flow-control-on \"vt100\" \"h19\")' to enable flow control
on VT-100 and H19 terminals. When flow control is enabled,
@@ -11287,38 +11382,38 @@ to get the effect of a C-q.
;;;***
;;;### (autoloads (fill-flowed fill-flowed-encode) "flow-fill" "gnus/flow-fill.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/flow-fill.el
-(autoload (quote fill-flowed-encode) "flow-fill" "\
+(autoload 'fill-flowed-encode "flow-fill" "\
Not documented
\(fn &optional BUFFER)" nil nil)
-(autoload (quote fill-flowed) "flow-fill" "\
+(autoload 'fill-flowed "flow-fill" "\
Not documented
-\(fn &optional BUFFER)" nil nil)
+\(fn &optional BUFFER DELETE-SPACE)" nil nil)
;;;***
;;;### (autoloads (flymake-mode-off flymake-mode-on flymake-mode)
-;;;;;; "flymake" "progmodes/flymake.el" (17934 27588))
+;;;;;; "flymake" "progmodes/flymake.el" (18120 34752))
;;; Generated autoloads from progmodes/flymake.el
-(autoload (quote flymake-mode) "flymake" "\
+(autoload 'flymake-mode "flymake" "\
Minor mode to do on-the-fly syntax checking.
When called interactively, toggles the minor mode.
With arg, turn Flymake mode on if and only if arg is positive.
\(fn &optional ARG)" t nil)
-(autoload (quote flymake-mode-on) "flymake" "\
+(autoload 'flymake-mode-on "flymake" "\
Turn flymake mode on.
\(fn)" nil nil)
-(autoload (quote flymake-mode-off) "flymake" "\
+(autoload 'flymake-mode-off "flymake" "\
Turn flymake mode off.
\(fn)" nil nil)
@@ -11327,21 +11422,22 @@ Turn flymake mode off.
;;;### (autoloads (flyspell-buffer flyspell-region flyspell-mode-off
;;;;;; turn-off-flyspell turn-on-flyspell flyspell-mode flyspell-prog-mode)
-;;;;;; "flyspell" "textmodes/flyspell.el" (18006 55797))
+;;;;;; "flyspell" "textmodes/flyspell.el" (18187 36841))
;;; Generated autoloads from textmodes/flyspell.el
-(autoload (quote flyspell-prog-mode) "flyspell" "\
+(autoload 'flyspell-prog-mode "flyspell" "\
Turn on `flyspell-mode' for comments and strings.
\(fn)" t nil)
(defvar flyspell-mode nil)
-(autoload (quote flyspell-mode) "flyspell" "\
+(autoload 'flyspell-mode "flyspell" "\
Minor mode performing on-the-fly spelling checking.
This spawns a single Ispell process and checks each word.
The default flyspell behavior is to highlight incorrect words.
With no argument, this command toggles Flyspell mode.
-With a prefix argument ARG, turn Flyspell minor mode on iff ARG is positive.
+With a prefix argument ARG, turn Flyspell minor mode on if ARG is positive,
+otherwise turn it off.
Bindings:
\\[ispell-word]: correct words (using Ispell).
@@ -11367,27 +11463,27 @@ in your .emacs file.
\(fn &optional ARG)" t nil)
-(autoload (quote turn-on-flyspell) "flyspell" "\
+(autoload 'turn-on-flyspell "flyspell" "\
Unconditionally turn on Flyspell mode.
\(fn)" nil nil)
-(autoload (quote turn-off-flyspell) "flyspell" "\
+(autoload 'turn-off-flyspell "flyspell" "\
Unconditionally turn off Flyspell mode.
\(fn)" nil nil)
-(autoload (quote flyspell-mode-off) "flyspell" "\
+(autoload 'flyspell-mode-off "flyspell" "\
Turn Flyspell mode off.
\(fn)" nil nil)
-(autoload (quote flyspell-region) "flyspell" "\
+(autoload 'flyspell-region "flyspell" "\
Flyspell text between BEG and END.
\(fn BEG END)" t nil)
-(autoload (quote flyspell-buffer) "flyspell" "\
+(autoload 'flyspell-buffer "flyspell" "\
Flyspell whole buffer.
\(fn)" t nil)
@@ -11396,20 +11492,20 @@ Flyspell whole buffer.
;;;### (autoloads (follow-delete-other-windows-and-split follow-mode
;;;;;; turn-off-follow-mode turn-on-follow-mode) "follow" "follow.el"
-;;;;;; (17842 58279))
+;;;;;; (18200 51264))
;;; Generated autoloads from follow.el
-(autoload (quote turn-on-follow-mode) "follow" "\
+(autoload 'turn-on-follow-mode "follow" "\
Turn on Follow mode. Please see the function `follow-mode'.
-\(fn)" t nil)
+\(fn)" nil nil)
-(autoload (quote turn-off-follow-mode) "follow" "\
+(autoload 'turn-off-follow-mode "follow" "\
Turn off Follow mode. Please see the function `follow-mode'.
-\(fn)" t nil)
+\(fn)" nil nil)
-(autoload (quote follow-mode) "follow" "\
+(autoload 'follow-mode "follow" "\
Minor mode that combines windows into one tall virtual window.
The feeling of a \"virtual window\" has been accomplished by the use
@@ -11417,7 +11513,7 @@ of two major techniques:
* The windows always displays adjacent sections of the buffer.
This means that whenever one window is moved, all the
- others will follow. (Hence the name Follow Mode.)
+ others will follow. (Hence the name Follow mode.)
* Should the point (cursor) end up outside a window, another
window displaying that point is selected, if possible. This
@@ -11425,40 +11521,39 @@ of two major techniques:
movement commands.
Follow mode comes to its prime when used on a large screen and two
-side-by-side window are used. The user can, with the help of Follow
+side-by-side windows are used. The user can, with the help of Follow
mode, use two full-height windows as though they would have been
-one. Imagine yourself editing a large function, or section of text,
+one. Imagine yourself editing a large function, or section of text,
and being able to use 144 lines instead of the normal 72... (your
mileage may vary).
To split one large window into two side-by-side windows, the commands
`\\[split-window-horizontally]' or `M-x follow-delete-other-windows-and-split' can be used.
-Only windows displayed in the same frame follow each-other.
+Only windows displayed in the same frame follow each other.
If the variable `follow-intercept-processes' is non-nil, Follow mode
will listen to the output of processes and redisplay accordingly.
\(This is the default.)
-When Follow mode is switched on, the hook `follow-mode-hook'
-is called. When turned off, `follow-mode-off-hook' is called.
+This command runs the normal hook `follow-mode-hook'.
Keys specific to Follow mode:
\\{follow-mode-map}
\(fn &optional ARG)" t nil)
-(autoload (quote follow-delete-other-windows-and-split) "follow" "\
-Create two side by side windows and enter Follow Mode.
+(autoload 'follow-delete-other-windows-and-split "follow" "\
+Create two side by side windows and enter Follow mode.
Execute this command to display as much as possible of the text
in the selected window. All other windows, in the current
frame, are deleted and the selected window is split in two
-side-by-side windows. Follow Mode is activated, hence the
+side-by-side windows. Follow mode is activated, hence the
two windows always will display two successive pages.
\(If one window is moved, the other one will follow.)
-If ARG is positive, the leftmost window is selected. If it negative,
+If ARG is positive, the leftmost window is selected. If negative,
the rightmost is selected. If ARG is nil, the leftmost window is
selected if the original window is the first one in the frame.
@@ -11470,11 +11565,11 @@ in your `~/.emacs' file, replacing [f7] by your favourite key:
;;;***
-;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (17954
-;;;;;; 24686))
+;;;### (autoloads (footnote-mode) "footnote" "mail/footnote.el" (18088
+;;;;;; 55109))
;;; Generated autoloads from mail/footnote.el
-(autoload (quote footnote-mode) "footnote" "\
+(autoload 'footnote-mode "footnote" "\
Toggle footnote minor mode.
\\<message-mode-map>
key binding
@@ -11492,10 +11587,10 @@ key binding
;;;***
;;;### (autoloads (forms-find-file-other-window forms-find-file forms-mode)
-;;;;;; "forms" "forms.el" (17842 58279))
+;;;;;; "forms" "forms.el" (18088 55084))
;;; Generated autoloads from forms.el
-(autoload (quote forms-mode) "forms" "\
+(autoload 'forms-mode "forms" "\
Major mode to visit files in a field-structured manner using a form.
Commands: Equivalent keys in read-only mode:
@@ -11516,31 +11611,23 @@ Commands: Equivalent keys in read-only mode:
\(fn &optional PRIMARY)" t nil)
-(autoload (quote forms-find-file) "forms" "\
+(autoload 'forms-find-file "forms" "\
Visit a file in Forms mode.
\(fn FN)" t nil)
-(autoload (quote forms-find-file-other-window) "forms" "\
+(autoload 'forms-find-file-other-window "forms" "\
Visit a file in Forms mode in other window.
\(fn FN)" t nil)
;;;***
-;;;### (autoloads (fortran-mode fortran-tab-mode-default) "fortran"
-;;;;;; "progmodes/fortran.el" (17842 56333))
+;;;### (autoloads (fortran-mode) "fortran" "progmodes/fortran.el"
+;;;;;; (18212 46008))
;;; Generated autoloads from progmodes/fortran.el
-(defvar fortran-tab-mode-default nil "\
-*Default tabbing/carriage control style for empty files in Fortran mode.
-A non-nil value specifies tab-digit style of continuation control.
-A value of nil specifies that continuation lines are marked
-with a character in column 6.")
-
-(custom-autoload (quote fortran-tab-mode-default) "fortran" t)
-
-(autoload (quote fortran-mode) "fortran" "\
+(autoload 'fortran-mode "fortran" "\
Major mode for editing Fortran code in fixed format.
For free format code, use `f90-mode'.
@@ -11576,7 +11663,7 @@ Variables controlling indentation style and extra features:
`fortran-minimum-statement-indent-tab' (TAB format),
depending on the continuation format in use.
relative indent to `fortran-comment-line-extra-indent' beyond the
- indentation for a line of code.
+ indentation for a line of code.
(default 'fixed)
`fortran-comment-indent-char'
Single-character string to be inserted instead of space for
@@ -11615,10 +11702,10 @@ with no args, if that value is non-nil.
;;;***
;;;### (autoloads (fortune fortune-to-signature fortune-compile fortune-from-region
-;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (17842 55395))
+;;;;;; fortune-add-fortune) "fortune" "play/fortune.el" (18088 55113))
;;; Generated autoloads from play/fortune.el
-(autoload (quote fortune-add-fortune) "fortune" "\
+(autoload 'fortune-add-fortune "fortune" "\
Add STRING to a fortune file FILE.
Interactively, if called with a prefix argument,
@@ -11626,7 +11713,7 @@ read the file name to use. Otherwise use the value of `fortune-file'.
\(fn STRING FILE)" t nil)
-(autoload (quote fortune-from-region) "fortune" "\
+(autoload 'fortune-from-region "fortune" "\
Append the current region to a local fortune-like data file.
Interactively, if called with a prefix argument,
@@ -11634,7 +11721,7 @@ read the file name to use. Otherwise use the value of `fortune-file'.
\(fn BEG END FILE)" t nil)
-(autoload (quote fortune-compile) "fortune" "\
+(autoload 'fortune-compile "fortune" "\
Compile fortune file.
If called with a prefix asks for the FILE to compile, otherwise uses
@@ -11642,7 +11729,7 @@ the value of `fortune-file'. This currently cannot handle directories.
\(fn &optional FILE)" t nil)
-(autoload (quote fortune-to-signature) "fortune" "\
+(autoload 'fortune-to-signature "fortune" "\
Create signature from output of the fortune program.
If called with a prefix asks for the FILE to choose the fortune from,
@@ -11652,7 +11739,7 @@ and choose the directory as the fortune-file.
\(fn &optional FILE)" t nil)
-(autoload (quote fortune) "fortune" "\
+(autoload 'fortune "fortune" "\
Display a fortune cookie.
If called with a prefix asks for the FILE to choose the fortune from,
@@ -11664,14 +11751,15 @@ and choose the directory as the fortune-file.
;;;***
-;;;### (autoloads (gdb-enable-debug gdba) "gdb-ui" "progmodes/gdb-ui.el"
-;;;;;; (17941 38806))
+;;;### (autoloads (gdb-enable-debug gdb) "gdb-ui" "progmodes/gdb-ui.el"
+;;;;;; (18197 21675))
;;; Generated autoloads from progmodes/gdb-ui.el
-(autoload (quote gdba) "gdb-ui" "\
+(autoload 'gdb "gdb-ui" "\
Run gdb on program FILE in buffer *gud-FILE*.
-The directory containing FILE becomes the initial working directory
-and source-file directory for your debugger.
+The directory containing FILE becomes the initial working
+directory and source-file directory for your debugger.
+
If `gdb-many-windows' is nil (the default value) then gdb just
pops up the GUD buffer unless `gdb-show-main' is t. In this case
@@ -11718,18 +11806,25 @@ detailed description of this mode.
| | D gdb-delete-breakpoint |
+-----------------------------------+----------------------------------+
+To run GDB in text command mode, replace the GDB \"--annotate=3\"
+option with \"--fullname\" either in the minibuffer for the
+current Emacs session, or the custom variable
+`gud-gdb-command-name' for all future sessions. You need to use
+text command mode to debug multiple programs within one Emacs
+session.
+
\(fn COMMAND-LINE)" t nil)
(defvar gdb-enable-debug nil "\
Non-nil means record the process input and output in `gdb-debug-log'.")
-(custom-autoload (quote gdb-enable-debug) "gdb-ui" t)
+(custom-autoload 'gdb-enable-debug "gdb-ui" t)
;;;***
;;;### (autoloads (generic-make-keywords-list generic-mode generic-mode-internal
-;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (17842
-;;;;;; 54152))
+;;;;;; define-generic-mode) "generic" "emacs-lisp/generic.el" (18173
+;;;;;; 8195))
;;; Generated autoloads from emacs-lisp/generic.el
(defvar generic-mode-list nil "\
@@ -11737,7 +11832,7 @@ A list of mode names for `generic-mode'.
Do not add entries to this list directly; use `define-generic-mode'
instead (which see).")
-(autoload (quote define-generic-mode) "generic" "\
+(autoload 'define-generic-mode "generic" "\
Create a new generic mode MODE.
MODE is the name of the command for the generic mode; don't quote it.
@@ -11773,12 +11868,12 @@ See the file generic-x.el for some examples of `define-generic-mode'.
\(fn MODE COMMENT-LIST KEYWORD-LIST FONT-LOCK-LIST AUTO-MODE-LIST FUNCTION-LIST &optional DOCSTRING)" nil (quote macro))
-(autoload (quote generic-mode-internal) "generic" "\
+(autoload 'generic-mode-internal "generic" "\
Go into the generic mode MODE.
\(fn MODE COMMENT-LIST KEYWORD-LIST FONT-LOCK-LIST FUNCTION-LIST)" nil nil)
-(autoload (quote generic-mode) "generic" "\
+(autoload 'generic-mode "generic" "\
Enter generic mode MODE.
Generic modes provide basic comment and font-lock functionality
@@ -11790,7 +11885,7 @@ Some generic modes are defined in `generic-x.el'.
\(fn MODE)" t nil)
-(autoload (quote generic-make-keywords-list) "generic" "\
+(autoload 'generic-make-keywords-list "generic" "\
Return a `font-lock-keywords' construct that highlights KEYWORD-LIST.
KEYWORD-LIST is a list of keyword strings that should be
highlighted with face FACE. This function calculates a regular
@@ -11804,10 +11899,10 @@ regular expression that can be used as an element of
;;;***
;;;### (autoloads (glasses-mode) "glasses" "progmodes/glasses.el"
-;;;;;; (17842 56333))
+;;;;;; (18088 55116))
;;; Generated autoloads from progmodes/glasses.el
-(autoload (quote glasses-mode) "glasses" "\
+(autoload 'glasses-mode "glasses" "\
Minor mode for making identifiers likeThis readable.
When this mode is active, it tries to add virtual separators (like underscores)
at places they belong to.
@@ -11817,10 +11912,17 @@ at places they belong to.
;;;***
;;;### (autoloads (gmm-tool-bar-from-list gmm-widget-p gmm-error
-;;;;;; gmm-message) "gmm-utils" "gnus/gmm-utils.el" (17934 27588))
+;;;;;; gmm-message gmm-regexp-concat) "gmm-utils" "gnus/gmm-utils.el"
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gmm-utils.el
-(autoload (quote gmm-message) "gmm-utils" "\
+(autoload 'gmm-regexp-concat "gmm-utils" "\
+Potentially concat a list of regexps into a single one.
+The concatenation is done with logical ORs.
+
+\(fn REGEXP)" nil nil)
+
+(autoload 'gmm-message "gmm-utils" "\
If LEVEL is lower than `gmm-verbose' print ARGS using `message'.
Guideline for numbers:
@@ -11830,18 +11932,18 @@ inside loops.
\(fn LEVEL &rest ARGS)" nil nil)
-(autoload (quote gmm-error) "gmm-utils" "\
+(autoload 'gmm-error "gmm-utils" "\
Beep an error if LEVEL is equal to or less than `gmm-verbose'.
ARGS are passed to `message'.
\(fn LEVEL &rest ARGS)" nil nil)
-(autoload (quote gmm-widget-p) "gmm-utils" "\
-Non-nil iff SYMBOL is a widget.
+(autoload 'gmm-widget-p "gmm-utils" "\
+Non-nil if SYMBOL is a widget.
\(fn SYMBOL)" nil nil)
-(autoload (quote gmm-tool-bar-from-list) "gmm-utils" "\
+(autoload 'gmm-tool-bar-from-list "gmm-utils" "\
Make a tool bar from ICON-LIST.
Within each entry of ICON-LIST, the first element is a menu
@@ -11864,17 +11966,17 @@ DEFAULT-MAP specifies the default key map for ICON-LIST.
;;;***
;;;### (autoloads (gnus gnus-other-frame gnus-slave gnus-no-server
-;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (17842 54741))
+;;;;;; gnus-slave-no-server) "gnus" "gnus/gnus.el" (18212 46007))
;;; Generated autoloads from gnus/gnus.el
(when (fboundp 'custom-autoload)
(custom-autoload 'gnus-select-method "gnus"))
-(autoload (quote gnus-slave-no-server) "gnus" "\
+(autoload 'gnus-slave-no-server "gnus" "\
Read network news as a slave, without connecting to the local server.
\(fn &optional ARG)" t nil)
-(autoload (quote gnus-no-server) "gnus" "\
+(autoload 'gnus-no-server "gnus" "\
Read network news.
If ARG is a positive number, Gnus will use that as the startup
level. If ARG is nil, Gnus will be started at level 2. If ARG is
@@ -11885,12 +11987,12 @@ server.
\(fn &optional ARG SLAVE)" t nil)
-(autoload (quote gnus-slave) "gnus" "\
+(autoload 'gnus-slave "gnus" "\
Read news as a slave.
\(fn &optional ARG)" t nil)
-(autoload (quote gnus-other-frame) "gnus" "\
+(autoload 'gnus-other-frame "gnus" "\
Pop up a frame to read news.
This will call one of the Gnus commands which is specified by the user
option `gnus-other-frame-function' (default `gnus') with the argument
@@ -11902,7 +12004,7 @@ current display is used.
\(fn &optional ARG DISPLAY)" t nil)
-(autoload (quote gnus) "gnus" "\
+(autoload 'gnus "gnus" "\
Read network news.
If ARG is non-nil and a positive number, Gnus will use that as the
startup level. If ARG is non-nil and not a positive number, Gnus will
@@ -11917,25 +12019,25 @@ prompt the user for the name of an NNTP server to use.
;;;;;; gnus-agent-get-undownloaded-list gnus-agent-delete-group
;;;;;; gnus-agent-rename-group gnus-agent-possibly-save-gcc gnus-agentize
;;;;;; gnus-slave-unplugged gnus-plugged gnus-unplugged) "gnus-agent"
-;;;;;; "gnus/gnus-agent.el" (17842 54741))
+;;;;;; "gnus/gnus-agent.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-agent.el
-(autoload (quote gnus-unplugged) "gnus-agent" "\
+(autoload 'gnus-unplugged "gnus-agent" "\
Start Gnus unplugged.
\(fn)" t nil)
-(autoload (quote gnus-plugged) "gnus-agent" "\
+(autoload 'gnus-plugged "gnus-agent" "\
Start Gnus plugged.
\(fn)" t nil)
-(autoload (quote gnus-slave-unplugged) "gnus-agent" "\
+(autoload 'gnus-slave-unplugged "gnus-agent" "\
Read news as a slave unplugged.
\(fn &optional ARG)" t nil)
-(autoload (quote gnus-agentize) "gnus-agent" "\
+(autoload 'gnus-agentize "gnus-agent" "\
Allow Gnus to be an offline newsreader.
The gnus-agentize function is now called internally by gnus when
@@ -11948,12 +12050,12 @@ minor mode in all Gnus buffers.
\(fn)" t nil)
-(autoload (quote gnus-agent-possibly-save-gcc) "gnus-agent" "\
+(autoload 'gnus-agent-possibly-save-gcc "gnus-agent" "\
Save GCC if Gnus is unplugged.
\(fn)" nil nil)
-(autoload (quote gnus-agent-rename-group) "gnus-agent" "\
+(autoload 'gnus-agent-rename-group "gnus-agent" "\
Rename fully-qualified OLD-GROUP as NEW-GROUP.
Always updates the agent, even when disabled, as the old agent
files would corrupt gnus when the agent was next enabled.
@@ -11962,7 +12064,7 @@ supported.
\(fn OLD-GROUP NEW-GROUP)" nil nil)
-(autoload (quote gnus-agent-delete-group) "gnus-agent" "\
+(autoload 'gnus-agent-delete-group "gnus-agent" "\
Delete fully-qualified GROUP.
Always updates the agent, even when disabled, as the old agent
files would corrupt gnus when the agent was next enabled.
@@ -11971,35 +12073,35 @@ supported.
\(fn GROUP)" nil nil)
-(autoload (quote gnus-agent-get-undownloaded-list) "gnus-agent" "\
+(autoload 'gnus-agent-get-undownloaded-list "gnus-agent" "\
Construct list of articles that have not been downloaded.
\(fn)" nil nil)
-(autoload (quote gnus-agent-possibly-alter-active) "gnus-agent" "\
+(autoload 'gnus-agent-possibly-alter-active "gnus-agent" "\
Possibly expand a group's active range to include articles
downloaded into the agent.
\(fn GROUP ACTIVE &optional INFO)" nil nil)
-(autoload (quote gnus-agent-find-parameter) "gnus-agent" "\
+(autoload 'gnus-agent-find-parameter "gnus-agent" "\
Search for GROUPs SYMBOL in the group's parameters, the group's
topic parameters, the group's category, or the customizable
variables. Returns the first non-nil value found.
\(fn GROUP SYMBOL)" nil nil)
-(autoload (quote gnus-agent-batch-fetch) "gnus-agent" "\
+(autoload 'gnus-agent-batch-fetch "gnus-agent" "\
Start Gnus and fetch session.
\(fn)" t nil)
-(autoload (quote gnus-agent-batch) "gnus-agent" "\
+(autoload 'gnus-agent-batch "gnus-agent" "\
Start Gnus, send queue and fetch session.
\(fn)" t nil)
-(autoload (quote gnus-agent-regenerate) "gnus-agent" "\
+(autoload 'gnus-agent-regenerate "gnus-agent" "\
Regenerate all agent covered files.
If CLEAN, obsolete (ignore).
@@ -12008,10 +12110,10 @@ If CLEAN, obsolete (ignore).
;;;***
;;;### (autoloads (gnus-article-prepare-display) "gnus-art" "gnus/gnus-art.el"
-;;;;;; (17960 49045))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-art.el
-(autoload (quote gnus-article-prepare-display) "gnus-art" "\
+(autoload 'gnus-article-prepare-display "gnus-art" "\
Make the current buffer look like a nice article.
\(fn)" nil nil)
@@ -12019,23 +12121,47 @@ Make the current buffer look like a nice article.
;;;***
;;;### (autoloads (gnus-audio-play) "gnus-audio" "gnus/gnus-audio.el"
-;;;;;; (17842 54741))
+;;;;;; (18088 55102))
;;; Generated autoloads from gnus/gnus-audio.el
-(autoload (quote gnus-audio-play) "gnus-audio" "\
+(autoload 'gnus-audio-play "gnus-audio" "\
Play a sound FILE through the speaker.
\(fn FILE)" t nil)
;;;***
+;;;### (autoloads (gnus-bookmark-bmenu-list gnus-bookmark-jump gnus-bookmark-set)
+;;;;;; "gnus-bookmark" "gnus/gnus-bookmark.el" (18212 21481))
+;;; Generated autoloads from gnus/gnus-bookmark.el
+
+(autoload 'gnus-bookmark-set "gnus-bookmark" "\
+Set a bookmark for this article.
+
+\(fn)" t nil)
+
+(autoload 'gnus-bookmark-jump "gnus-bookmark" "\
+Jump to a Gnus bookmark (BMK-NAME).
+
+\(fn &optional BMK-NAME)" t nil)
+
+(autoload 'gnus-bookmark-bmenu-list "gnus-bookmark" "\
+Display a list of existing Gnus bookmarks.
+The list is displayed in a buffer named `*Gnus Bookmark List*'.
+The leftmost column displays a D if the bookmark is flagged for
+deletion, or > if it is flagged for displaying.
+
+\(fn)" t nil)
+
+;;;***
+
;;;### (autoloads (gnus-cache-delete-group gnus-cache-rename-group
;;;;;; gnus-cache-generate-nov-databases gnus-cache-generate-active
-;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (17842
-;;;;;; 54741))
+;;;;;; gnus-jog-cache) "gnus-cache" "gnus/gnus-cache.el" (18212
+;;;;;; 46006))
;;; Generated autoloads from gnus/gnus-cache.el
-(autoload (quote gnus-jog-cache) "gnus-cache" "\
+(autoload 'gnus-jog-cache "gnus-cache" "\
Go through all groups and put the articles into the cache.
Usage:
@@ -12043,17 +12169,17 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache
\(fn)" t nil)
-(autoload (quote gnus-cache-generate-active) "gnus-cache" "\
+(autoload 'gnus-cache-generate-active "gnus-cache" "\
Generate the cache active file.
\(fn &optional DIRECTORY)" t nil)
-(autoload (quote gnus-cache-generate-nov-databases) "gnus-cache" "\
+(autoload 'gnus-cache-generate-nov-databases "gnus-cache" "\
Generate NOV files recursively starting in DIR.
\(fn DIR)" t nil)
-(autoload (quote gnus-cache-rename-group) "gnus-cache" "\
+(autoload 'gnus-cache-rename-group "gnus-cache" "\
Rename OLD-GROUP as NEW-GROUP.
Always updates the cache, even when disabled, as the old cache
files would corrupt Gnus when the cache was next enabled. It
@@ -12062,7 +12188,7 @@ supported.
\(fn OLD-GROUP NEW-GROUP)" nil nil)
-(autoload (quote gnus-cache-delete-group) "gnus-cache" "\
+(autoload 'gnus-cache-delete-group "gnus-cache" "\
Delete GROUP from the cache.
Always updates the cache, even when disabled, as the old cache
files would corrupt gnus when the cache was next enabled.
@@ -12074,10 +12200,10 @@ supported.
;;;***
;;;### (autoloads (gnus-delay-initialize gnus-delay-send-queue gnus-delay-article)
-;;;;;; "gnus-delay" "gnus/gnus-delay.el" (17842 54741))
+;;;;;; "gnus-delay" "gnus/gnus-delay.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-delay.el
-(autoload (quote gnus-delay-article) "gnus-delay" "\
+(autoload 'gnus-delay-article "gnus-delay" "\
Delay this article by some time.
DELAY is a string, giving the length of the time. Possible values are:
@@ -12092,12 +12218,12 @@ DELAY is a string, giving the length of the time. Possible values are:
\(fn DELAY)" t nil)
-(autoload (quote gnus-delay-send-queue) "gnus-delay" "\
+(autoload 'gnus-delay-send-queue "gnus-delay" "\
Send all the delayed messages that are due now.
\(fn)" t nil)
-(autoload (quote gnus-delay-initialize) "gnus-delay" "\
+(autoload 'gnus-delay-initialize "gnus-delay" "\
Initialize the gnus-delay package.
This sets up a key binding in `message-mode' to delay a message.
This tells Gnus to look for delayed messages after getting new news.
@@ -12110,15 +12236,15 @@ Checking delayed messages is skipped if optional arg NO-CHECK is non-nil.
;;;***
;;;### (autoloads (gnus-user-format-function-D gnus-user-format-function-d)
-;;;;;; "gnus-diary" "gnus/gnus-diary.el" (17992 30878))
+;;;;;; "gnus-diary" "gnus/gnus-diary.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-diary.el
-(autoload (quote gnus-user-format-function-d) "gnus-diary" "\
+(autoload 'gnus-user-format-function-d "gnus-diary" "\
Not documented
\(fn HEADER)" nil nil)
-(autoload (quote gnus-user-format-function-D) "gnus-diary" "\
+(autoload 'gnus-user-format-function-D "gnus-diary" "\
Not documented
\(fn HEADER)" nil nil)
@@ -12126,10 +12252,10 @@ Not documented
;;;***
;;;### (autoloads (turn-on-gnus-dired-mode) "gnus-dired" "gnus/gnus-dired.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-dired.el
-(autoload (quote turn-on-gnus-dired-mode) "gnus-dired" "\
+(autoload 'turn-on-gnus-dired-mode "gnus-dired" "\
Convenience method to turn on gnus-dired-mode.
\(fn)" nil nil)
@@ -12137,10 +12263,10 @@ Convenience method to turn on gnus-dired-mode.
;;;***
;;;### (autoloads (gnus-draft-reminder) "gnus-draft" "gnus/gnus-draft.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-draft.el
-(autoload (quote gnus-draft-reminder) "gnus-draft" "\
+(autoload 'gnus-draft-reminder "gnus-draft" "\
Reminder user if there are unsent drafts.
\(fn)" t nil)
@@ -12149,37 +12275,43 @@ Reminder user if there are unsent drafts.
;;;### (autoloads (gnus-convert-png-to-face gnus-convert-face-to-png
;;;;;; gnus-face-from-file gnus-x-face-from-file gnus-insert-random-x-face-header
-;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (17842
-;;;;;; 54741))
+;;;;;; gnus-random-x-face) "gnus-fun" "gnus/gnus-fun.el" (18212
+;;;;;; 46006))
;;; Generated autoloads from gnus/gnus-fun.el
-(autoload (quote gnus-random-x-face) "gnus-fun" "\
+(autoload 'gnus-random-x-face "gnus-fun" "\
Return X-Face header data chosen randomly from `gnus-x-face-directory'.
\(fn)" t nil)
-(autoload (quote gnus-insert-random-x-face-header) "gnus-fun" "\
+(autoload 'gnus-insert-random-x-face-header "gnus-fun" "\
Insert a random X-Face header from `gnus-x-face-directory'.
\(fn)" t nil)
-(autoload (quote gnus-x-face-from-file) "gnus-fun" "\
+(autoload 'gnus-x-face-from-file "gnus-fun" "\
Insert an X-Face header based on an image file.
+Depending on `gnus-convert-image-to-x-face-command' it may accept
+different input formats.
+
\(fn FILE)" t nil)
-(autoload (quote gnus-face-from-file) "gnus-fun" "\
+(autoload 'gnus-face-from-file "gnus-fun" "\
Return a Face header based on an image file.
+Depending on `gnus-convert-image-to-face-command' it may accept
+different input formats.
+
\(fn FILE)" t nil)
-(autoload (quote gnus-convert-face-to-png) "gnus-fun" "\
+(autoload 'gnus-convert-face-to-png "gnus-fun" "\
Convert FACE (which is base64-encoded) to a PNG.
The PNG is returned as a string.
\(fn FACE)" nil nil)
-(autoload (quote gnus-convert-png-to-face) "gnus-fun" "\
+(autoload 'gnus-convert-png-to-face "gnus-fun" "\
Convert FILE to a Face.
FILE should be a PNG file that's 48x48 and smaller than or equal to
726 bytes.
@@ -12189,16 +12321,17 @@ FILE should be a PNG file that's 48x48 and smaller than or equal to
;;;***
;;;### (autoloads (gnus-fetch-group-other-frame gnus-fetch-group)
-;;;;;; "gnus-group" "gnus/gnus-group.el" (17842 54741))
+;;;;;; "gnus-group" "gnus/gnus-group.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-group.el
-(autoload (quote gnus-fetch-group) "gnus-group" "\
+(autoload 'gnus-fetch-group "gnus-group" "\
Start Gnus if necessary and enter GROUP.
+If ARTICLES, display those articles.
Returns whether the fetching was successful or not.
\(fn GROUP &optional ARTICLES)" t nil)
-(autoload (quote gnus-fetch-group-other-frame) "gnus-group" "\
+(autoload 'gnus-fetch-group-other-frame "gnus-group" "\
Pop up a frame and enter GROUP.
\(fn GROUP)" t nil)
@@ -12206,12 +12339,12 @@ Pop up a frame and enter GROUP.
;;;***
;;;### (autoloads (gnus-batch-score) "gnus-kill" "gnus/gnus-kill.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-kill.el
-(defalias (quote gnus-batch-kill) (quote gnus-batch-score))
+(defalias 'gnus-batch-kill 'gnus-batch-score)
-(autoload (quote gnus-batch-score) "gnus-kill" "\
+(autoload 'gnus-batch-score "gnus-kill" "\
Run batched scoring.
Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
@@ -12221,21 +12354,21 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
;;;### (autoloads (gnus-mailing-list-mode gnus-mailing-list-insinuate
;;;;;; turn-on-gnus-mailing-list-mode) "gnus-ml" "gnus/gnus-ml.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-ml.el
-(autoload (quote turn-on-gnus-mailing-list-mode) "gnus-ml" "\
+(autoload 'turn-on-gnus-mailing-list-mode "gnus-ml" "\
Not documented
\(fn)" nil nil)
-(autoload (quote gnus-mailing-list-insinuate) "gnus-ml" "\
+(autoload 'gnus-mailing-list-insinuate "gnus-ml" "\
Setup group parameters from List-Post header.
If FORCE is non-nil, replace the old ones.
\(fn &optional FORCE)" t nil)
-(autoload (quote gnus-mailing-list-mode) "gnus-ml" "\
+(autoload 'gnus-mailing-list-mode "gnus-ml" "\
Minor mode for providing mailing-list commands.
\\{gnus-mailing-list-mode-map}
@@ -12246,25 +12379,25 @@ Minor mode for providing mailing-list commands.
;;;### (autoloads (gnus-group-split-fancy gnus-group-split gnus-group-split-update
;;;;;; gnus-group-split-setup) "gnus-mlspl" "gnus/gnus-mlspl.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-mlspl.el
-(autoload (quote gnus-group-split-setup) "gnus-mlspl" "\
-Set up the split for nnmail-split-fancy.
+(autoload 'gnus-group-split-setup "gnus-mlspl" "\
+Set up the split for `nnmail-split-fancy'.
Sets things up so that nnmail-split-fancy is used for mail
splitting, and defines the variable nnmail-split-fancy according with
group parameters.
If AUTO-UPDATE is non-nil (prefix argument accepted, if called
interactively), it makes sure nnmail-split-fancy is re-computed before
-getting new mail, by adding gnus-group-split-update to
-nnmail-pre-get-new-mail-hook.
+getting new mail, by adding `gnus-group-split-update' to
+`nnmail-pre-get-new-mail-hook'.
A non-nil CATCH-ALL replaces the current value of
-gnus-group-split-default-catch-all-group. This variable is only used
+`gnus-group-split-default-catch-all-group'. This variable is only used
by gnus-group-split-update, and only when its CATCH-ALL argument is
nil. This argument may contain any fancy split, that will be added as
-the last split in a `|' split produced by gnus-group-split-fancy,
+the last split in a `|' split produced by `gnus-group-split-fancy',
unless overridden by any group marked as a catch-all group. Typical
uses are as simple as the name of a default mail group, but more
elaborate fancy splits may also be useful to split mail that doesn't
@@ -12273,25 +12406,25 @@ match any of the group-specified splitting rules. See
\(fn &optional AUTO-UPDATE CATCH-ALL)" t nil)
-(autoload (quote gnus-group-split-update) "gnus-mlspl" "\
+(autoload 'gnus-group-split-update "gnus-mlspl" "\
Computes nnmail-split-fancy from group params and CATCH-ALL.
It does this by calling by calling (gnus-group-split-fancy nil
nil CATCH-ALL).
-If CATCH-ALL is nil, gnus-group-split-default-catch-all-group is used
-instead. This variable is set by gnus-group-split-setup.
+If CATCH-ALL is nil, `gnus-group-split-default-catch-all-group' is used
+instead. This variable is set by `gnus-group-split-setup'.
\(fn &optional CATCH-ALL)" t nil)
-(autoload (quote gnus-group-split) "gnus-mlspl" "\
-Uses information from group parameters in order to split mail.
+(autoload 'gnus-group-split "gnus-mlspl" "\
+Use information from group parameters in order to split mail.
See `gnus-group-split-fancy' for more information.
-gnus-group-split is a valid value for nnmail-split-methods.
+`gnus-group-split' is a valid value for `nnmail-split-methods'.
\(fn)" nil nil)
-(autoload (quote gnus-group-split-fancy) "gnus-mlspl" "\
+(autoload 'gnus-group-split-fancy "gnus-mlspl" "\
Uses information from group parameters in order to split mail.
It can be embedded into `nnmail-split-fancy' lists with the SPLIT
@@ -12347,10 +12480,10 @@ Calling (gnus-group-split-fancy nil nil \"mail.others\") returns:
;;;***
;;;### (autoloads (gnus-change-server) "gnus-move" "gnus/gnus-move.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-move.el
-(autoload (quote gnus-change-server) "gnus-move" "\
+(autoload 'gnus-change-server "gnus-move" "\
Move from FROM-SERVER to TO-SERVER.
Update the .newsrc.eld file to reflect the change of nntp server.
@@ -12359,40 +12492,40 @@ Update the .newsrc.eld file to reflect the change of nntp server.
;;;***
;;;### (autoloads (gnus-button-reply gnus-button-mailto gnus-msg-mail)
-;;;;;; "gnus-msg" "gnus/gnus-msg.el" (17949 41467))
+;;;;;; "gnus-msg" "gnus/gnus-msg.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-msg.el
-(autoload (quote gnus-msg-mail) "gnus-msg" "\
+(autoload 'gnus-msg-mail "gnus-msg" "\
Start editing a mail message to be sent.
Like `message-mail', but with Gnus paraphernalia, particularly the
Gcc: header for archiving purposes.
\(fn &optional TO SUBJECT OTHER-HEADERS CONTINUE SWITCH-ACTION YANK-ACTION SEND-ACTIONS)" t nil)
-(autoload (quote gnus-button-mailto) "gnus-msg" "\
+(autoload 'gnus-button-mailto "gnus-msg" "\
Mail to ADDRESS.
\(fn ADDRESS)" nil nil)
-(autoload (quote gnus-button-reply) "gnus-msg" "\
+(autoload 'gnus-button-reply "gnus-msg" "\
Like `message-reply'.
\(fn &optional TO-ADDRESS WIDE)" t nil)
-(define-mail-user-agent (quote gnus-user-agent) (quote gnus-msg-mail) (quote message-send-and-exit) (quote message-kill-buffer) (quote message-send-hook))
+(define-mail-user-agent 'gnus-user-agent 'gnus-msg-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook)
;;;***
;;;### (autoloads (gnus-nocem-load-cache gnus-nocem-scan-groups)
-;;;;;; "gnus-nocem" "gnus/gnus-nocem.el" (17842 54741))
+;;;;;; "gnus-nocem" "gnus/gnus-nocem.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-nocem.el
-(autoload (quote gnus-nocem-scan-groups) "gnus-nocem" "\
+(autoload 'gnus-nocem-scan-groups "gnus-nocem" "\
Scan all NoCeM groups for new NoCeM messages.
\(fn)" t nil)
-(autoload (quote gnus-nocem-load-cache) "gnus-nocem" "\
+(autoload 'gnus-nocem-load-cache "gnus-nocem" "\
Load the NoCeM cache.
\(fn)" t nil)
@@ -12401,22 +12534,22 @@ Load the NoCeM cache.
;;;### (autoloads (gnus-treat-newsgroups-picon gnus-treat-mail-picon
;;;;;; gnus-treat-from-picon) "gnus-picon" "gnus/gnus-picon.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-picon.el
-(autoload (quote gnus-treat-from-picon) "gnus-picon" "\
+(autoload 'gnus-treat-from-picon "gnus-picon" "\
Display picons in the From header.
If picons are already displayed, remove them.
\(fn)" t nil)
-(autoload (quote gnus-treat-mail-picon) "gnus-picon" "\
+(autoload 'gnus-treat-mail-picon "gnus-picon" "\
Display picons in the Cc and To headers.
If picons are already displayed, remove them.
\(fn)" t nil)
-(autoload (quote gnus-treat-newsgroups-picon) "gnus-picon" "\
+(autoload 'gnus-treat-newsgroups-picon "gnus-picon" "\
Display picons in the Newsgroups and Followup-To headers.
If picons are already displayed, remove them.
@@ -12428,67 +12561,67 @@ If picons are already displayed, remove them.
;;;;;; gnus-sorted-nintersection gnus-sorted-range-intersection
;;;;;; gnus-sorted-intersection gnus-intersection gnus-sorted-complement
;;;;;; gnus-sorted-ndifference gnus-sorted-difference) "gnus-range"
-;;;;;; "gnus/gnus-range.el" (17842 54741))
+;;;;;; "gnus/gnus-range.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-range.el
-(autoload (quote gnus-sorted-difference) "gnus-range" "\
+(autoload 'gnus-sorted-difference "gnus-range" "\
Return a list of elements of LIST1 that do not appear in LIST2.
Both lists have to be sorted over <.
The tail of LIST1 is not copied.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-sorted-ndifference) "gnus-range" "\
+(autoload 'gnus-sorted-ndifference "gnus-range" "\
Return a list of elements of LIST1 that do not appear in LIST2.
Both lists have to be sorted over <.
LIST1 is modified.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-sorted-complement) "gnus-range" "\
+(autoload 'gnus-sorted-complement "gnus-range" "\
Return a list of elements that are in LIST1 or LIST2 but not both.
Both lists have to be sorted over <.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-intersection) "gnus-range" "\
+(autoload 'gnus-intersection "gnus-range" "\
Not documented
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-sorted-intersection) "gnus-range" "\
+(autoload 'gnus-sorted-intersection "gnus-range" "\
Return intersection of LIST1 and LIST2.
LIST1 and LIST2 have to be sorted over <.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-sorted-range-intersection) "gnus-range" "\
+(autoload 'gnus-sorted-range-intersection "gnus-range" "\
Return intersection of RANGE1 and RANGE2.
RANGE1 and RANGE2 have to be sorted over <.
\(fn RANGE1 RANGE2)" nil nil)
-(defalias (quote gnus-set-sorted-intersection) (quote gnus-sorted-nintersection))
+(defalias 'gnus-set-sorted-intersection 'gnus-sorted-nintersection)
-(autoload (quote gnus-sorted-nintersection) "gnus-range" "\
+(autoload 'gnus-sorted-nintersection "gnus-range" "\
Return intersection of LIST1 and LIST2 by modifying cdr pointers of LIST1.
LIST1 and LIST2 have to be sorted over <.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-sorted-union) "gnus-range" "\
+(autoload 'gnus-sorted-union "gnus-range" "\
Return union of LIST1 and LIST2.
LIST1 and LIST2 have to be sorted over <.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-sorted-nunion) "gnus-range" "\
+(autoload 'gnus-sorted-nunion "gnus-range" "\
Return union of LIST1 and LIST2 by modifying cdr pointers of LIST1.
LIST1 and LIST2 have to be sorted over <.
\(fn LIST1 LIST2)" nil nil)
-(autoload (quote gnus-add-to-sorted-list) "gnus-range" "\
+(autoload 'gnus-add-to-sorted-list "gnus-range" "\
Add NUM into sorted LIST by side effect.
\(fn LIST NUM)" nil nil)
@@ -12496,15 +12629,15 @@ Add NUM into sorted LIST by side effect.
;;;***
;;;### (autoloads (gnus-registry-install-hooks gnus-registry-initialize)
-;;;;;; "gnus-registry" "gnus/gnus-registry.el" (17934 27588))
+;;;;;; "gnus-registry" "gnus/gnus-registry.el" (18212 46006))
;;; Generated autoloads from gnus/gnus-registry.el
-(autoload (quote gnus-registry-initialize) "gnus-registry" "\
+(autoload 'gnus-registry-initialize "gnus-registry" "\
Not documented
\(fn)" t nil)
-(autoload (quote gnus-registry-install-hooks) "gnus-registry" "\
+(autoload 'gnus-registry-install-hooks "gnus-registry" "\
Install the registry hooks.
\(fn)" t nil)
@@ -12512,11 +12645,11 @@ Install the registry hooks.
;;;***
;;;### (autoloads (gnus-sieve-article-add-rule gnus-sieve-generate
-;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (17842
-;;;;;; 54741))
+;;;;;; gnus-sieve-update) "gnus-sieve" "gnus/gnus-sieve.el" (18088
+;;;;;; 55103))
;;; Generated autoloads from gnus/gnus-sieve.el
-(autoload (quote gnus-sieve-update) "gnus-sieve" "\
+(autoload 'gnus-sieve-update "gnus-sieve" "\
Update the Sieve script in gnus-sieve-file, by replacing the region
between gnus-sieve-region-start and gnus-sieve-region-end with
\(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost), then
@@ -12525,7 +12658,7 @@ See the documentation for these variables and functions for details.
\(fn)" t nil)
-(autoload (quote gnus-sieve-generate) "gnus-sieve" "\
+(autoload 'gnus-sieve-generate "gnus-sieve" "\
Generate the Sieve script in gnus-sieve-file, by replacing the region
between gnus-sieve-region-start and gnus-sieve-region-end with
\(gnus-sieve-script gnus-sieve-select-method gnus-sieve-crosspost).
@@ -12533,7 +12666,7 @@ See the documentation for these variables and functions for details.
\(fn)" t nil)
-(autoload (quote gnus-sieve-article-add-rule) "gnus-sieve" "\
+(autoload 'gnus-sieve-article-add-rule "gnus-sieve" "\
Not documented
\(fn)" t nil)
@@ -12541,10 +12674,10 @@ Not documented
;;;***
;;;### (autoloads (gnus-batch-brew-soup) "gnus-soup" "gnus/gnus-soup.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-soup.el
-(autoload (quote gnus-batch-brew-soup) "gnus-soup" "\
+(autoload 'gnus-batch-brew-soup "gnus-soup" "\
Brew a SOUP packet from groups mention on the command line.
Will use the remaining command line arguments as regular expressions
for matching on group names.
@@ -12561,10 +12694,10 @@ Note -- this function hasn't been implemented yet.
;;;***
;;;### (autoloads (gnus-update-format) "gnus-spec" "gnus/gnus-spec.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46006))
;;; Generated autoloads from gnus/gnus-spec.el
-(autoload (quote gnus-update-format) "gnus-spec" "\
+(autoload 'gnus-update-format "gnus-spec" "\
Update the format specification near point.
\(fn VAR)" t nil)
@@ -12572,16 +12705,16 @@ Update the format specification near point.
;;;***
;;;### (autoloads (gnus-fixup-nnimap-unread-after-getting-new-news
-;;;;;; gnus-declare-backend) "gnus-start" "gnus/gnus-start.el" (17842
-;;;;;; 54741))
+;;;;;; gnus-declare-backend) "gnus-start" "gnus/gnus-start.el" (18212
+;;;;;; 46006))
;;; Generated autoloads from gnus/gnus-start.el
-(autoload (quote gnus-declare-backend) "gnus-start" "\
+(autoload 'gnus-declare-backend "gnus-start" "\
Declare back end NAME with ABILITIES as a Gnus back end.
\(fn NAME &rest ABILITIES)" nil nil)
-(autoload (quote gnus-fixup-nnimap-unread-after-getting-new-news) "gnus-start" "\
+(autoload 'gnus-fixup-nnimap-unread-after-getting-new-news "gnus-start" "\
Not documented
\(fn)" nil nil)
@@ -12589,20 +12722,20 @@ Not documented
;;;***
;;;### (autoloads (gnus-add-configuration) "gnus-win" "gnus/gnus-win.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/gnus-win.el
-(autoload (quote gnus-add-configuration) "gnus-win" "\
+(autoload 'gnus-add-configuration "gnus-win" "\
Add the window configuration CONF to `gnus-buffer-configuration'.
\(fn CONF)" nil nil)
;;;***
-;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (17941 38806))
+;;;### (autoloads (gomoku) "gomoku" "play/gomoku.el" (18088 55114))
;;; Generated autoloads from play/gomoku.el
-(autoload (quote gomoku) "gomoku" "\
+(autoload 'gomoku "gomoku" "\
Start a Gomoku game between you and Emacs.
If a game is in progress, this command allow you to resume it.
@@ -12626,12 +12759,12 @@ Use \\[describe-mode] for more info.
;;;***
;;;### (autoloads (goto-address goto-address-at-point) "goto-addr"
-;;;;;; "net/goto-addr.el" (17842 55218))
+;;;;;; "net/goto-addr.el" (18088 55111))
;;; Generated autoloads from net/goto-addr.el
-(define-obsolete-function-alias (quote goto-address-at-mouse) (quote goto-address-at-point) "22.1")
+(define-obsolete-function-alias 'goto-address-at-mouse 'goto-address-at-point "22.1")
-(autoload (quote goto-address-at-point) "goto-addr" "\
+(autoload 'goto-address-at-point "goto-addr" "\
Send to the e-mail address or load the URL at point.
Send mail to address at point. See documentation for
`goto-address-find-address-at-point'. If no address is found
@@ -12639,7 +12772,7 @@ there, then load the URL at or before point.
\(fn &optional EVENT)" t nil)
-(autoload (quote goto-address) "goto-addr" "\
+(autoload 'goto-address "goto-addr" "\
Sets up goto-address functionality in the current buffer.
Allows user to use mouse/keyboard command to click to go to a URL
or to send e-mail.
@@ -12656,13 +12789,13 @@ Also fontifies the buffer appropriately (see `goto-address-fontify-p' and
;;;### (autoloads (rgrep lgrep grep-find grep grep-mode grep-compute-defaults
;;;;;; grep-process-setup grep-setup-hook grep-find-command grep-command
-;;;;;; grep-window-height) "grep" "progmodes/grep.el" (17944 20144))
+;;;;;; grep-window-height) "grep" "progmodes/grep.el" (18135 53075))
;;; Generated autoloads from progmodes/grep.el
(defvar grep-window-height nil "\
*Number of lines in a grep window. If nil, use `compilation-window-height'.")
-(custom-autoload (quote grep-window-height) "grep" t)
+(custom-autoload 'grep-window-height "grep" t)
(defvar grep-command nil "\
The default grep command for \\[grep].
@@ -12673,21 +12806,21 @@ include it when specifying `grep-command'.
The default value of this variable is set up by `grep-compute-defaults';
call that function before using this variable in your program.")
-(custom-autoload (quote grep-command) "grep" t)
+(custom-autoload 'grep-command "grep" t)
(defvar grep-find-command nil "\
The default find command for \\[grep-find].
The default value of this variable is set up by `grep-compute-defaults';
call that function before using this variable in your program.")
-(custom-autoload (quote grep-find-command) "grep" t)
+(custom-autoload 'grep-find-command "grep" t)
(defvar grep-setup-hook nil "\
List of hook functions run by `grep-process-setup' (see `run-hooks').")
-(custom-autoload (quote grep-setup-hook) "grep" t)
+(custom-autoload 'grep-setup-hook "grep" t)
-(defvar grep-regexp-alist (quote (("^\\(.+?\\)\\(:[ ]*\\)\\([0-9]+\\)\\2" 1 3) ("^\\(\\(.+?\\):\\([0-9]+\\):\\).*?\\(\\[01;31m\\(?:\\[K\\)?\\)\\(.*?\\)\\(\\[[0-9]*m\\)" 2 3 ((lambda nil (setq compilation-error-screen-columns nil) (- (match-beginning 4) (match-end 1))) lambda nil (- (match-end 5) (match-end 1) (- (match-end 4) (match-beginning 4)))) nil 1) ("^Binary file \\(.+\\) matches$" 1 nil nil 0 1))) "\
+(defvar grep-regexp-alist '(("^\\(.+?\\)\\(:[ ]*\\)\\([0-9]+\\)\\2" 1 3) ("^\\(\\(.+?\\):\\([0-9]+\\):\\).*?\\(\\[01;31m\\(?:\\[K\\)?\\)\\(.*?\\)\\(\\[[0-9]*m\\)" 2 3 ((lambda nil (setq compilation-error-screen-columns nil) (- (match-beginning 4) (match-end 1))) lambda nil (- (match-end 5) (match-end 1) (- (match-end 4) (match-beginning 4)))) nil 1) ("^Binary file \\(.+\\) matches$" 1 nil nil 0 1)) "\
Regexp used to match grep hits. See `compilation-error-regexp-alist'.")
(defvar grep-program "grep" "\
@@ -12710,23 +12843,23 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
(defvar grep-find-history nil)
-(autoload (quote grep-process-setup) "grep" "\
+(autoload 'grep-process-setup "grep" "\
Setup compilation variables and buffer for `grep'.
Set up `compilation-exit-message-function' and run `grep-setup-hook'.
\(fn)" nil nil)
-(autoload (quote grep-compute-defaults) "grep" "\
+(autoload 'grep-compute-defaults "grep" "\
Not documented
\(fn)" nil nil)
-(autoload (quote grep-mode) "grep" "\
+(autoload 'grep-mode "grep" "\
Sets `grep-last-buffer' and `compilation-window-height'.
\(fn)" nil nil)
-(autoload (quote grep) "grep" "\
+(autoload 'grep "grep" "\
Run grep, with user-specified args, and collect output in a buffer.
While grep runs asynchronously, you can use \\[next-error] (M-x next-error),
or \\<grep-mode-map>\\[compile-goto-error] in the grep output buffer, to go to the lines
@@ -12745,7 +12878,7 @@ if that history list is empty).
\(fn COMMAND-ARGS)" t nil)
-(autoload (quote grep-find) "grep" "\
+(autoload 'grep-find "grep" "\
Run grep via find, with user-specified args COMMAND-ARGS.
Collect output in a buffer.
While find runs asynchronously, you can use the \\[next-error] command
@@ -12756,9 +12889,9 @@ easily repeat a find command.
\(fn COMMAND-ARGS)" t nil)
-(defalias (quote find-grep) (quote grep-find))
+(defalias 'find-grep 'grep-find)
-(autoload (quote lgrep) "grep" "\
+(autoload 'lgrep "grep" "\
Run grep, searching for REGEXP in FILES in directory DIR.
The search is limited to file names matching shell pattern FILES.
FILES may use abbreviations defined in `grep-files-aliases', e.g.
@@ -12776,7 +12909,7 @@ This command shares argument histories with \\[rgrep] and \\[grep].
\(fn REGEXP &optional FILES DIR)" t nil)
-(autoload (quote rgrep) "grep" "\
+(autoload 'rgrep "grep" "\
Recursively grep for REGEXP in FILES in directory tree rooted at DIR.
The search is limited to file names matching shell pattern FILES.
FILES may use abbreviations defined in `grep-files-aliases', e.g.
@@ -12796,10 +12929,10 @@ This command shares argument histories with \\[lgrep] and \\[grep-find].
;;;***
-;;;### (autoloads (gs-load-image) "gs" "gs.el" (17842 58279))
+;;;### (autoloads (gs-load-image) "gs" "gs.el" (18088 55084))
;;; Generated autoloads from gs.el
-(autoload (quote gs-load-image) "gs" "\
+(autoload 'gs-load-image "gs" "\
Load a PS image for display on FRAME.
SPEC is an image specification, IMG-HEIGHT and IMG-WIDTH are width
and height of the image in pixels. WINDOW-AND-PIXMAP-ID is a string of
@@ -12809,11 +12942,11 @@ the form \"WINDOW-ID PIXMAP-ID\". Value is non-nil if successful.
;;;***
-;;;### (autoloads (gdb-script-mode jdb pdb perldb xdb dbx sdb gdb)
-;;;;;; "gud" "progmodes/gud.el" (17992 30878))
+;;;### (autoloads (gdb-script-mode jdb pdb perldb xdb dbx sdb gud-gdb)
+;;;;;; "gud" "progmodes/gud.el" (18214 4763))
;;; Generated autoloads from progmodes/gud.el
-(autoload (quote gdb) "gud" "\
+(autoload 'gud-gdb "gud" "\
Run gdb on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working
directory and source-file directory for your debugger. By
@@ -12829,21 +12962,21 @@ session.
\(fn COMMAND-LINE)" t nil)
-(autoload (quote sdb) "gud" "\
+(autoload 'sdb "gud" "\
Run sdb on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working directory
and source-file directory for your debugger.
\(fn COMMAND-LINE)" t nil)
-(autoload (quote dbx) "gud" "\
+(autoload 'dbx "gud" "\
Run dbx on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working directory
and source-file directory for your debugger.
\(fn COMMAND-LINE)" t nil)
-(autoload (quote xdb) "gud" "\
+(autoload 'xdb "gud" "\
Run xdb on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working directory
and source-file directory for your debugger.
@@ -12853,21 +12986,21 @@ directories if your program contains sources from more than one directory.
\(fn COMMAND-LINE)" t nil)
-(autoload (quote perldb) "gud" "\
+(autoload 'perldb "gud" "\
Run perldb on program FILE in buffer *gud-FILE*.
The directory containing FILE becomes the initial working directory
and source-file directory for your debugger.
\(fn COMMAND-LINE)" t nil)
-(autoload (quote pdb) "gud" "\
+(autoload 'pdb "gud" "\
Run pdb on program FILE in buffer `*gud-FILE*'.
The directory containing FILE becomes the initial working directory
and source-file directory for your debugger.
\(fn COMMAND-LINE)" t nil)
-(autoload (quote jdb) "gud" "\
+(autoload 'jdb "gud" "\
Run jdb with command line COMMAND-LINE in a buffer.
The buffer is named \"*gud*\" if no initial class is given or
\"*gud-<initial-class-basename>*\" if there is. If the \"-classpath\"
@@ -12884,20 +13017,20 @@ gud, see `gud-mode'.
\(fn COMMAND-LINE)" t nil)
(add-hook 'same-window-regexps "\\*gud-.*\\*\\(\\|<[0-9]+>\\)")
-(add-to-list (quote auto-mode-alist) (quote ("/\\.gdbinit" . gdb-script-mode)))
+(add-to-list 'auto-mode-alist '("/\\.[a-z0-9-]*gdbinit" . gdb-script-mode))
-(autoload (quote gdb-script-mode) "gud" "\
+(autoload 'gdb-script-mode "gud" "\
Major mode for editing GDB scripts
\(fn)" t nil)
;;;***
-;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (17842
-;;;;;; 55395))
+;;;### (autoloads (handwrite) "handwrite" "play/handwrite.el" (18202
+;;;;;; 4002))
;;; Generated autoloads from play/handwrite.el
-(autoload (quote handwrite) "handwrite" "\
+(autoload 'handwrite "handwrite" "\
Turns the buffer into a \"handwritten\" document.
The functions `handwrite-10pt', `handwrite-11pt', `handwrite-12pt'
and `handwrite-13pt' set up for various sizes of output.
@@ -12912,15 +13045,15 @@ Variables: handwrite-linespace (default 12)
;;;***
;;;### (autoloads (hanoi-unix-64 hanoi-unix hanoi) "hanoi" "play/hanoi.el"
-;;;;;; (17742 40275))
+;;;;;; (17822 31019))
;;; Generated autoloads from play/hanoi.el
-(autoload (quote hanoi) "hanoi" "\
+(autoload 'hanoi "hanoi" "\
Towers of Hanoi diversion. Use NRINGS rings.
\(fn NRINGS)" t nil)
-(autoload (quote hanoi-unix) "hanoi" "\
+(autoload 'hanoi-unix "hanoi" "\
Towers of Hanoi, UNIX doomsday version.
Displays 32-ring towers that have been progressing at one move per
second since 1970-01-01 00:00:00 GMT.
@@ -12929,7 +13062,7 @@ Repent before ring 31 moves.
\(fn)" t nil)
-(autoload (quote hanoi-unix-64) "hanoi" "\
+(autoload 'hanoi-unix-64 "hanoi" "\
Like hanoi-unix, but pretend to have a 64-bit clock.
This is, necessarily (as of Emacs 20.3), a crock. When the
current-time interface is made s2G-compliant, hanoi.el will need
@@ -12939,13 +13072,57 @@ to be updated.
;;;***
+;;;### (autoloads (mail-check-payment mail-add-payment-async mail-add-payment
+;;;;;; hashcash-verify-payment hashcash-insert-payment-async hashcash-insert-payment)
+;;;;;; "hashcash" "gnus/hashcash.el" (18212 21477))
+;;; Generated autoloads from gnus/hashcash.el
+
+(autoload 'hashcash-insert-payment "hashcash" "\
+Insert X-Payment and X-Hashcash headers with a payment for ARG
+
+\(fn ARG)" t nil)
+
+(autoload 'hashcash-insert-payment-async "hashcash" "\
+Insert X-Payment and X-Hashcash headers with a payment for ARG
+Only start calculation. Results are inserted when ready.
+
+\(fn ARG)" t nil)
+
+(autoload 'hashcash-verify-payment "hashcash" "\
+Verify a hashcash payment
+
+\(fn TOKEN &optional RESOURCE AMOUNT)" nil nil)
+
+(autoload 'mail-add-payment "hashcash" "\
+Add X-Payment: and X-Hashcash: headers with a hashcash payment
+for each recipient address. Prefix arg sets default payment temporarily.
+Set ASYNC to t to start asynchronous calculation. (See
+`mail-add-payment-async').
+
+\(fn &optional ARG ASYNC)" t nil)
+
+(autoload 'mail-add-payment-async "hashcash" "\
+Add X-Payment: and X-Hashcash: headers with a hashcash payment
+for each recipient address. Prefix arg sets default payment temporarily.
+Calculation is asynchronous.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'mail-check-payment "hashcash" "\
+Look for a valid X-Payment: or X-Hashcash: header.
+Prefix arg sets default accept amount temporarily.
+
+\(fn &optional ARG)" t nil)
+
+;;;***
+
;;;### (autoloads (scan-buf-previous-region scan-buf-next-region
;;;;;; scan-buf-move-to-region help-at-pt-display-when-idle help-at-pt-set-timer
;;;;;; help-at-pt-cancel-timer display-local-help help-at-pt-kbd-string
-;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (17842 58279))
+;;;;;; help-at-pt-string) "help-at-pt" "help-at-pt.el" (18088 55084))
;;; Generated autoloads from help-at-pt.el
-(autoload (quote help-at-pt-string) "help-at-pt" "\
+(autoload 'help-at-pt-string "help-at-pt" "\
Return the help-echo string at point.
Normally, the string produced by the `help-echo' text or overlay
property, or nil, is returned.
@@ -12955,7 +13132,7 @@ can also be t, if that is the value of the `kbd-help' property.
\(fn &optional KBD)" nil nil)
-(autoload (quote help-at-pt-kbd-string) "help-at-pt" "\
+(autoload 'help-at-pt-kbd-string "help-at-pt" "\
Return the keyboard help string at point.
If the `kbd-help' text or overlay property at point produces a
string, return it. Otherwise, use the `help-echo' property. If
@@ -12963,7 +13140,7 @@ this produces no string either, return nil.
\(fn)" nil nil)
-(autoload (quote display-local-help) "help-at-pt" "\
+(autoload 'display-local-help "help-at-pt" "\
Display local help in the echo area.
This displays a short help message, namely the string produced by
the `kbd-help' property at point. If `kbd-help' does not produce
@@ -12976,19 +13153,19 @@ mainly meant for use from Lisp.
\(fn &optional ARG)" t nil)
-(autoload (quote help-at-pt-cancel-timer) "help-at-pt" "\
+(autoload 'help-at-pt-cancel-timer "help-at-pt" "\
Cancel any timer set by `help-at-pt-set-timer'.
This disables `help-at-pt-display-when-idle'.
\(fn)" t nil)
-(autoload (quote help-at-pt-set-timer) "help-at-pt" "\
+(autoload 'help-at-pt-set-timer "help-at-pt" "\
Enable `help-at-pt-display-when-idle'.
This is done by setting a timer, if none is currently active.
\(fn)" t nil)
-(defvar help-at-pt-display-when-idle (quote never) "\
+(defvar help-at-pt-display-when-idle 'never "\
*Automatically show local help on point-over.
If the value is t, the string obtained from any `kbd-help' or
`help-echo' property at point is automatically printed in the
@@ -13015,9 +13192,9 @@ Thus, Custom distinguishes between a nil value and other values
that disable the feature, which Custom identifies with `never'.
The default is `never'.")
-(custom-autoload (quote help-at-pt-display-when-idle) "help-at-pt" nil)
+(custom-autoload 'help-at-pt-display-when-idle "help-at-pt" nil)
-(autoload (quote scan-buf-move-to-region) "help-at-pt" "\
+(autoload 'scan-buf-move-to-region "help-at-pt" "\
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.
@@ -13036,7 +13213,7 @@ in the error message. Point is not moved and HOOK is not run.
\(fn PROP &optional ARG HOOK)" nil nil)
-(autoload (quote scan-buf-next-region) "help-at-pt" "\
+(autoload 'scan-buf-next-region "help-at-pt" "\
Go to the start of the next region with non-nil help-echo.
Print the help found there using `display-local-help'. Adjacent
areas with different non-nil help-echo properties are considered
@@ -13058,7 +13235,7 @@ rarely happens in practice.
\(fn &optional ARG)" t nil)
-(autoload (quote scan-buf-previous-region) "help-at-pt" "\
+(autoload 'scan-buf-previous-region "help-at-pt" "\
Go to the start of the previous region with non-nil help-echo.
Print the help found there using `display-local-help'. Adjacent
areas with different non-nil help-echo properties are considered
@@ -13072,53 +13249,54 @@ different regions. With numeric argument ARG, behaves like
;;;### (autoloads (describe-categories describe-syntax describe-variable
;;;;;; variable-at-point describe-function-1 describe-simplify-lib-file-name
;;;;;; help-C-file-name describe-function) "help-fns" "help-fns.el"
-;;;;;; (17845 46651))
+;;;;;; (18201 33325))
;;; Generated autoloads from help-fns.el
-(autoload (quote describe-function) "help-fns" "\
+(autoload 'describe-function "help-fns" "\
Display the full documentation of FUNCTION (a symbol).
\(fn FUNCTION)" t nil)
-(autoload (quote help-C-file-name) "help-fns" "\
+(autoload 'help-C-file-name "help-fns" "\
Return the name of the C file where SUBR-OR-VAR is defined.
KIND should be `var' for a variable or `subr' for a subroutine.
\(fn SUBR-OR-VAR KIND)" nil nil)
-(autoload (quote describe-simplify-lib-file-name) "help-fns" "\
+(autoload 'describe-simplify-lib-file-name "help-fns" "\
Simplify a library name FILE to a relative name, and make it a source file.
\(fn FILE)" nil nil)
-(autoload (quote describe-function-1) "help-fns" "\
+(autoload 'describe-function-1 "help-fns" "\
Not documented
\(fn FUNCTION)" nil nil)
-(autoload (quote variable-at-point) "help-fns" "\
+(autoload 'variable-at-point "help-fns" "\
Return the bound variable symbol found at or before point.
Return 0 if there is no such symbol.
If ANY-SYMBOL is non-nil, don't insist the symbol be bound.
\(fn &optional ANY-SYMBOL)" nil nil)
-(autoload (quote describe-variable) "help-fns" "\
+(autoload 'describe-variable "help-fns" "\
Display the full documentation of VARIABLE (a symbol).
Returns the documentation as a string, also.
-If VARIABLE has a buffer-local value in BUFFER (default to the current buffer),
+If VARIABLE has a buffer-local value in BUFFER or FRAME
+\(default to the current buffer and current frame),
it is displayed along with the global value.
-\(fn VARIABLE &optional BUFFER)" t nil)
+\(fn VARIABLE &optional BUFFER FRAME)" t nil)
-(autoload (quote describe-syntax) "help-fns" "\
+(autoload 'describe-syntax "help-fns" "\
Describe the syntax specifications in the syntax table of BUFFER.
The descriptions are inserted in a help buffer, which is then displayed.
BUFFER defaults to the current buffer.
\(fn &optional BUFFER)" t nil)
-(autoload (quote describe-categories) "help-fns" "\
+(autoload 'describe-categories "help-fns" "\
Describe the category specifications in the current category table.
The descriptions are inserted in a buffer, which is then displayed.
If BUFFER is non-nil, then describe BUFFER's category table instead.
@@ -13129,7 +13307,7 @@ BUFFER should be a buffer or a buffer name.
;;;***
;;;### (autoloads (three-step-help) "help-macro" "help-macro.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55084))
;;; Generated autoloads from help-macro.el
(defvar three-step-help nil "\
@@ -13139,16 +13317,16 @@ and window listing and describing the options.
A value of nil means skip the middle step, so that
\\[help-command] \\[help-command] gives the window that lists the options.")
-(custom-autoload (quote three-step-help) "help-macro" t)
+(custom-autoload 'three-step-help "help-macro" t)
;;;***
;;;### (autoloads (help-xref-on-pp help-insert-xref-button help-xref-button
;;;;;; help-make-xrefs help-setup-xref help-mode-finish help-mode-setup
-;;;;;; help-mode) "help-mode" "help-mode.el" (17842 58279))
+;;;;;; help-mode) "help-mode" "help-mode.el" (18120 34749))
;;; Generated autoloads from help-mode.el
-(autoload (quote help-mode) "help-mode" "\
+(autoload 'help-mode "help-mode" "\
Major mode for viewing help text and navigating references in it.
Entry to this mode runs the normal hook `help-mode-hook'.
Commands:
@@ -13156,17 +13334,17 @@ Commands:
\(fn)" t nil)
-(autoload (quote help-mode-setup) "help-mode" "\
+(autoload 'help-mode-setup "help-mode" "\
Not documented
\(fn)" nil nil)
-(autoload (quote help-mode-finish) "help-mode" "\
+(autoload 'help-mode-finish "help-mode" "\
Not documented
\(fn)" nil nil)
-(autoload (quote help-setup-xref) "help-mode" "\
+(autoload 'help-setup-xref "help-mode" "\
Invoked from commands using the \"*Help*\" buffer to install some xref info.
ITEM is a (FUNCTION . ARGS) pair appropriate for recreating the help
@@ -13180,7 +13358,7 @@ restore it properly when going back.
\(fn ITEM INTERACTIVE-P)" nil nil)
-(autoload (quote help-make-xrefs) "help-mode" "\
+(autoload 'help-make-xrefs "help-mode" "\
Parse and hyperlink documentation cross-references in the given BUFFER.
Find cross-reference information in a buffer and activate such cross
@@ -13203,7 +13381,7 @@ that.
\(fn &optional BUFFER)" t nil)
-(autoload (quote help-xref-button) "help-mode" "\
+(autoload 'help-xref-button "help-mode" "\
Make a hyperlink for cross-reference text previously matched.
MATCH-NUMBER is the subexpression of interest in the last matched
regexp. TYPE is the type of button to use. Any remaining arguments are
@@ -13212,7 +13390,7 @@ See `help-make-xrefs'.
\(fn MATCH-NUMBER TYPE &rest ARGS)" nil nil)
-(autoload (quote help-insert-xref-button) "help-mode" "\
+(autoload 'help-insert-xref-button "help-mode" "\
Insert STRING and make a hyperlink from cross-reference text on it.
TYPE is the type of button to use. Any remaining arguments are passed
to the button's help-function when it is invoked.
@@ -13220,7 +13398,7 @@ See `help-make-xrefs'.
\(fn STRING TYPE &rest ARGS)" nil nil)
-(autoload (quote help-xref-on-pp) "help-mode" "\
+(autoload 'help-xref-on-pp "help-mode" "\
Add xrefs for symbols in `pp's output between FROM and TO.
\(fn FROM TO)" nil nil)
@@ -13228,15 +13406,15 @@ Add xrefs for symbols in `pp's output between FROM and TO.
;;;***
;;;### (autoloads (Helper-help Helper-describe-bindings) "helper"
-;;;;;; "emacs-lisp/helper.el" (17842 54152))
+;;;;;; "emacs-lisp/helper.el" (18088 55096))
;;; Generated autoloads from emacs-lisp/helper.el
-(autoload (quote Helper-describe-bindings) "helper" "\
+(autoload 'Helper-describe-bindings "helper" "\
Describe local key bindings of current mode.
\(fn)" t nil)
-(autoload (quote Helper-help) "helper" "\
+(autoload 'Helper-help "helper" "\
Provide help for current mode.
\(fn)" t nil)
@@ -13244,10 +13422,10 @@ Provide help for current mode.
;;;***
;;;### (autoloads (hexlify-buffer hexl-find-file hexl-mode) "hexl"
-;;;;;; "hexl.el" (17844 53657))
+;;;;;; "hexl.el" (18211 32385))
;;; Generated autoloads from hexl.el
-(autoload (quote hexl-mode) "hexl" "\
+(autoload 'hexl-mode "hexl" "\
\\<hexl-mode-map>A mode for editing binary files in hex dump format.
This is not an ordinary major mode; it alters some aspects
of the current mode's behavior, but not all; also, you can exit
@@ -13323,14 +13501,14 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode.
\(fn &optional ARG)" t nil)
-(autoload (quote hexl-find-file) "hexl" "\
+(autoload 'hexl-find-file "hexl" "\
Edit file FILENAME as a binary file in hex dump format.
Switch to a buffer visiting file FILENAME, creating one if none exists,
and edit the file in `hexl-mode'.
\(fn FILENAME)" t nil)
-(autoload (quote hexlify-buffer) "hexl" "\
+(autoload 'hexlify-buffer "hexl" "\
Convert a binary buffer to hexl format.
This discards the buffer's undo information.
@@ -13341,10 +13519,10 @@ This discards the buffer's undo information.
;;;### (autoloads (hi-lock-write-interactive-patterns hi-lock-unface-buffer
;;;;;; hi-lock-face-phrase-buffer hi-lock-face-buffer hi-lock-line-face-buffer
;;;;;; global-hi-lock-mode hi-lock-mode) "hi-lock" "hi-lock.el"
-;;;;;; (17992 30877))
+;;;;;; (18169 11931))
;;; Generated autoloads from hi-lock.el
-(autoload (quote hi-lock-mode) "hi-lock" "\
+(autoload 'hi-lock-mode "hi-lock" "\
Toggle minor mode for interactively adding font-lock highlighting patterns.
If ARG positive, turn hi-lock on. Issuing a hi-lock command will also
@@ -13372,7 +13550,7 @@ called interactively, are:
Write active REGEXPs into buffer as comments (if possible). They may
be read the next time file is loaded or when the \\[hi-lock-find-patterns] command
is issued. The inserted regexps are in the form of font lock keywords.
- (See `font-lock-keywords'.) They may be edited and re-loaded with \\[hi-lock-find-patterns],
+ (See `font-lock-keywords'.) They may be edited and re-loaded with \\[hi-lock-find-patterns],
any valid `font-lock-keywords' form is acceptable. When a file is
loaded the patterns are read if `hi-lock-file-patterns-policy is
'ask and the user responds y to the prompt, or if
@@ -13402,9 +13580,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-hi-lock-mode'.")
-(custom-autoload (quote global-hi-lock-mode) "hi-lock" nil)
+(custom-autoload 'global-hi-lock-mode "hi-lock" nil)
-(autoload (quote global-hi-lock-mode) "hi-lock" "\
+(autoload 'global-hi-lock-mode "hi-lock" "\
Toggle Hi-Lock mode in every possible buffer.
With prefix ARG, turn Global-Hi-Lock mode on if and only if ARG is positive.
Hi-Lock mode is enabled in all buffers where `turn-on-hi-lock-if-enabled' would do it.
@@ -13412,9 +13590,9 @@ See `hi-lock-mode' for more information on Hi-Lock mode.
\(fn &optional ARG)" t nil)
-(defalias (quote highlight-lines-matching-regexp) (quote hi-lock-line-face-buffer))
+(defalias 'highlight-lines-matching-regexp 'hi-lock-line-face-buffer)
-(autoload (quote hi-lock-line-face-buffer) "hi-lock" "\
+(autoload 'hi-lock-line-face-buffer "hi-lock" "\
Set face of all lines containing a match of REGEXP to FACE.
Interactively, prompt for REGEXP then FACE. Buffer-local history
@@ -13424,9 +13602,9 @@ list maintained for regexps, global history maintained for faces.
\(fn REGEXP &optional FACE)" t nil)
-(defalias (quote highlight-regexp) (quote hi-lock-face-buffer))
+(defalias 'highlight-regexp 'hi-lock-face-buffer)
-(autoload (quote hi-lock-face-buffer) "hi-lock" "\
+(autoload 'hi-lock-face-buffer "hi-lock" "\
Set face of each match of REGEXP to FACE.
Interactively, prompt for REGEXP then FACE. Buffer-local history
@@ -13436,9 +13614,9 @@ list maintained for regexps, global history maintained for faces.
\(fn REGEXP &optional FACE)" t nil)
-(defalias (quote highlight-phrase) (quote hi-lock-face-phrase-buffer))
+(defalias 'highlight-phrase 'hi-lock-face-phrase-buffer)
-(autoload (quote hi-lock-face-phrase-buffer) "hi-lock" "\
+(autoload 'hi-lock-face-phrase-buffer "hi-lock" "\
Set face of each match of phrase REGEXP to FACE.
Whitespace in REGEXP converted to arbitrary whitespace and initial
@@ -13446,9 +13624,9 @@ lower-case letters made case insensitive.
\(fn REGEXP &optional FACE)" t nil)
-(defalias (quote unhighlight-regexp) (quote hi-lock-unface-buffer))
+(defalias 'unhighlight-regexp 'hi-lock-unface-buffer)
-(autoload (quote hi-lock-unface-buffer) "hi-lock" "\
+(autoload 'hi-lock-unface-buffer "hi-lock" "\
Remove highlighting of each match to REGEXP set by hi-lock.
Interactively, prompt for REGEXP. Buffer-local history of inserted
@@ -13459,7 +13637,7 @@ interactive functions. (See `hi-lock-interactive-patterns'.)
\(fn REGEXP)" t nil)
-(autoload (quote hi-lock-write-interactive-patterns) "hi-lock" "\
+(autoload 'hi-lock-write-interactive-patterns "hi-lock" "\
Write interactively added patterns, if any, into buffer at point.
Interactively added patterns are those normally specified using
@@ -13471,10 +13649,10 @@ be found in variable `hi-lock-interactive-patterns'.
;;;***
;;;### (autoloads (hide-ifdef-lines hide-ifdef-read-only hide-ifdef-initially
-;;;;;; hide-ifdef-mode) "hideif" "progmodes/hideif.el" (17842 56333))
+;;;;;; hide-ifdef-mode) "hideif" "progmodes/hideif.el" (18088 55116))
;;; Generated autoloads from progmodes/hideif.el
-(autoload (quote hide-ifdef-mode) "hideif" "\
+(autoload 'hide-ifdef-mode "hideif" "\
Toggle Hide-Ifdef mode. This is a minor mode, albeit a large one.
With ARG, turn Hide-Ifdef mode on if arg is positive, off otherwise.
In Hide-Ifdef mode, code within #ifdef constructs that the C preprocessor
@@ -13511,25 +13689,25 @@ how the hiding is done:
(defvar hide-ifdef-initially nil "\
*Non-nil means call `hide-ifdefs' when Hide-Ifdef mode is first activated.")
-(custom-autoload (quote hide-ifdef-initially) "hideif" t)
+(custom-autoload 'hide-ifdef-initially "hideif" t)
(defvar hide-ifdef-read-only nil "\
*Set to non-nil if you want buffer to be read-only while hiding text.")
-(custom-autoload (quote hide-ifdef-read-only) "hideif" t)
+(custom-autoload 'hide-ifdef-read-only "hideif" t)
(defvar hide-ifdef-lines nil "\
*Non-nil means hide the #ifX, #else, and #endif lines.")
-(custom-autoload (quote hide-ifdef-lines) "hideif" t)
+(custom-autoload 'hide-ifdef-lines "hideif" t)
;;;***
;;;### (autoloads (turn-off-hideshow hs-minor-mode) "hideshow" "progmodes/hideshow.el"
-;;;;;; (17934 43341))
+;;;;;; (18128 32656))
;;; Generated autoloads from progmodes/hideshow.el
-(defvar hs-special-modes-alist (quote ((c-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) (c++-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) (bibtex-mode ("^@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning))) "\
+(defvar hs-special-modes-alist '((c-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) (c++-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning) (bibtex-mode ("^@\\S(*\\(\\s(\\)" 1)) (java-mode "{" "}" "/[*/]" nil hs-c-like-adjust-block-beginning)) "\
*Alist for initializing the hideshow variables for different modes.
Each element has the form
(MODE START END COMMENT-START FORWARD-SEXP-FUNC ADJUST-BEG-FUNC).
@@ -13557,7 +13735,7 @@ If any of the elements is left nil or omitted, hideshow tries to guess
appropriate values. The regexps should not contain leading or trailing
whitespace. Case does not matter.")
-(autoload (quote hs-minor-mode) "hideshow" "\
+(autoload 'hs-minor-mode "hideshow" "\
Toggle hideshow minor mode.
With ARG, turn hideshow minor mode on if ARG is positive, off otherwise.
When hideshow minor mode is on, the menu bar is augmented with hideshow
@@ -13578,7 +13756,7 @@ Key bindings:
\(fn &optional ARG)" t nil)
-(autoload (quote turn-off-hideshow) "hideshow" "\
+(autoload 'turn-off-hideshow "hideshow" "\
Unconditionally turn off `hs-minor-mode'.
\(fn)" nil nil)
@@ -13589,16 +13767,16 @@ Unconditionally turn off `hs-minor-mode'.
;;;;;; highlight-compare-buffers highlight-changes-rotate-faces
;;;;;; highlight-changes-previous-change highlight-changes-next-change
;;;;;; highlight-changes-mode highlight-changes-remove-highlight)
-;;;;;; "hilit-chg" "hilit-chg.el" (17842 58279))
+;;;;;; "hilit-chg" "hilit-chg.el" (18120 34749))
;;; Generated autoloads from hilit-chg.el
-(autoload (quote highlight-changes-remove-highlight) "hilit-chg" "\
+(autoload 'highlight-changes-remove-highlight "hilit-chg" "\
Remove the change face from the region between BEG and END.
This allows you to manually remove highlighting from uninteresting changes.
\(fn BEG END)" t nil)
-(autoload (quote highlight-changes-mode) "hilit-chg" "\
+(autoload 'highlight-changes-mode "hilit-chg" "\
Toggle (or initially set) Highlight Changes mode.
Without an argument:
@@ -13632,17 +13810,17 @@ Hook variables:
\(fn &optional ARG)" t nil)
-(autoload (quote highlight-changes-next-change) "hilit-chg" "\
+(autoload 'highlight-changes-next-change "hilit-chg" "\
Move to the beginning of the next change, if in Highlight Changes mode.
\(fn)" t nil)
-(autoload (quote highlight-changes-previous-change) "hilit-chg" "\
+(autoload 'highlight-changes-previous-change "hilit-chg" "\
Move to the beginning of the previous change, if in Highlight Changes mode.
\(fn)" t nil)
-(autoload (quote highlight-changes-rotate-faces) "hilit-chg" "\
+(autoload 'highlight-changes-rotate-faces "hilit-chg" "\
Rotate the faces used by Highlight Changes mode.
Current changes are displayed in the face described by the first element
@@ -13658,7 +13836,7 @@ this, eval the following in the buffer to be saved:
\(fn)" t nil)
-(autoload (quote highlight-compare-buffers) "hilit-chg" "\
+(autoload 'highlight-compare-buffers "hilit-chg" "\
Compare two buffers and highlight the differences.
The default is the current buffer and the one in the next window.
@@ -13675,7 +13853,7 @@ changes are made, so \\[highlight-changes-next-change] and
\(fn BUF-A BUF-B)" t nil)
-(autoload (quote highlight-compare-with-file) "hilit-chg" "\
+(autoload 'highlight-compare-with-file "hilit-chg" "\
Compare this buffer with a file, and highlight differences.
If the buffer has a backup filename, it is used as the default when
@@ -13691,7 +13869,7 @@ changes are made, so \\[highlight-changes-next-change] and
\(fn FILE-B)" t nil)
-(autoload (quote global-highlight-changes) "hilit-chg" "\
+(autoload 'global-highlight-changes "hilit-chg" "\
Turn on or off global Highlight Changes mode.
When called interactively:
@@ -13719,48 +13897,48 @@ variable `highlight-changes-global-changes-existing-buffers' is non-nil).
;;;;;; hippie-expand-ignore-buffers hippie-expand-max-buffers hippie-expand-no-restriction
;;;;;; hippie-expand-dabbrev-as-symbol hippie-expand-dabbrev-skip-space
;;;;;; hippie-expand-verbose hippie-expand-try-functions-list) "hippie-exp"
-;;;;;; "hippie-exp.el" (17842 58279))
+;;;;;; "hippie-exp.el" (18088 55085))
;;; Generated autoloads from hippie-exp.el
-(defvar hippie-expand-try-functions-list (quote (try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol)) "\
+(defvar hippie-expand-try-functions-list '(try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs try-expand-list try-expand-line try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-lisp-symbol-partially try-complete-lisp-symbol) "\
The list of expansion functions tried in order by `hippie-expand'.
To change the behavior of `hippie-expand', remove, change the order of,
or insert functions in this list.")
-(custom-autoload (quote hippie-expand-try-functions-list) "hippie-exp" t)
+(custom-autoload 'hippie-expand-try-functions-list "hippie-exp" t)
(defvar hippie-expand-verbose t "\
*Non-nil makes `hippie-expand' output which function it is trying.")
-(custom-autoload (quote hippie-expand-verbose) "hippie-exp" t)
+(custom-autoload 'hippie-expand-verbose "hippie-exp" t)
(defvar hippie-expand-dabbrev-skip-space nil "\
*Non-nil means tolerate trailing spaces in the abbreviation to expand.")
-(custom-autoload (quote hippie-expand-dabbrev-skip-space) "hippie-exp" t)
+(custom-autoload 'hippie-expand-dabbrev-skip-space "hippie-exp" t)
(defvar hippie-expand-dabbrev-as-symbol t "\
*Non-nil means expand as symbols, i.e. syntax `_' is considered a letter.")
-(custom-autoload (quote hippie-expand-dabbrev-as-symbol) "hippie-exp" t)
+(custom-autoload 'hippie-expand-dabbrev-as-symbol "hippie-exp" t)
(defvar hippie-expand-no-restriction t "\
*Non-nil means that narrowed buffers are widened during search.")
-(custom-autoload (quote hippie-expand-no-restriction) "hippie-exp" t)
+(custom-autoload 'hippie-expand-no-restriction "hippie-exp" t)
(defvar hippie-expand-max-buffers nil "\
*The maximum number of buffers (apart from the current) searched.
If nil, all buffers are searched.")
-(custom-autoload (quote hippie-expand-max-buffers) "hippie-exp" t)
+(custom-autoload 'hippie-expand-max-buffers "hippie-exp" t)
-(defvar hippie-expand-ignore-buffers (quote ("^ \\*.*\\*$" dired-mode)) "\
+(defvar hippie-expand-ignore-buffers '("^ \\*.*\\*$" dired-mode) "\
*A list specifying which buffers not to search (if not current).
Can contain both regexps matching buffer names (as strings) and major modes
\(as atoms)")
-(custom-autoload (quote hippie-expand-ignore-buffers) "hippie-exp" t)
+(custom-autoload 'hippie-expand-ignore-buffers "hippie-exp" t)
(defvar hippie-expand-only-buffers nil "\
*A list specifying the only buffers to search (in addition to current).
@@ -13768,9 +13946,9 @@ Can contain both regexps matching buffer names (as strings) and major modes
\(as atoms). If non-nil, this variable overrides the variable
`hippie-expand-ignore-buffers'.")
-(custom-autoload (quote hippie-expand-only-buffers) "hippie-exp" t)
+(custom-autoload 'hippie-expand-only-buffers "hippie-exp" t)
-(autoload (quote hippie-expand) "hippie-exp" "\
+(autoload 'hippie-expand "hippie-exp" "\
Try to expand text before point, using multiple methods.
The expansion functions in `hippie-expand-try-functions-list' are
tried in order, until a possible expansion is found. Repeated
@@ -13782,7 +13960,7 @@ undoes the expansion.
\(fn ARG)" t nil)
-(autoload (quote make-hippie-expand-function) "hippie-exp" "\
+(autoload 'make-hippie-expand-function "hippie-exp" "\
Construct a function similar to `hippie-expand'.
Make it use the expansion functions in TRY-LIST. An optional second
argument VERBOSE non-nil makes the function verbose.
@@ -13792,10 +13970,10 @@ argument VERBOSE non-nil makes the function verbose.
;;;***
;;;### (autoloads (global-hl-line-mode hl-line-mode) "hl-line" "hl-line.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55085))
;;; Generated autoloads from hl-line.el
-(autoload (quote hl-line-mode) "hl-line" "\
+(autoload 'hl-line-mode "hl-line" "\
Buffer-local minor mode to highlight the line about point.
With ARG, turn Hl-Line mode on if ARG is positive, off otherwise.
@@ -13819,9 +13997,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-hl-line-mode'.")
-(custom-autoload (quote global-hl-line-mode) "hl-line" nil)
+(custom-autoload 'global-hl-line-mode "hl-line" nil)
-(autoload (quote global-hl-line-mode) "hl-line" "\
+(autoload 'global-hl-line-mode "hl-line" "\
Global minor mode to highlight the line about point in the current window.
With ARG, turn Global-Hl-Line mode on if ARG is positive, off otherwise.
@@ -13833,10 +14011,10 @@ Global-Hl-Line mode uses the functions `global-hl-line-unhighlight' and
;;;***
;;;### (autoloads (list-holidays holidays) "holidays" "calendar/holidays.el"
-;;;;;; (17956 13479))
+;;;;;; (18157 34340))
;;; Generated autoloads from calendar/holidays.el
-(autoload (quote holidays) "holidays" "\
+(autoload 'holidays "holidays" "\
Display the holidays for last month, this month, and next month.
If called with an optional prefix argument, prompts for month and year.
@@ -13844,7 +14022,7 @@ This function is suitable for execution in a .emacs file.
\(fn &optional ARG)" t nil)
-(autoload (quote list-holidays) "holidays" "\
+(autoload 'list-holidays "holidays" "\
Display holidays for years Y1 to Y2 (inclusive).
The optional list of holidays L defaults to `calendar-holidays'.
@@ -13869,11 +14047,11 @@ The optional LABEL is used to label the buffer created.
;;;***
-;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (17842
-;;;;;; 54741))
+;;;### (autoloads (html2text) "html2text" "gnus/html2text.el" (18212
+;;;;;; 46007))
;;; Generated autoloads from gnus/html2text.el
-(autoload (quote html2text) "html2text" "\
+(autoload 'html2text "html2text" "\
Convert HTML to plain text in the current buffer.
\(fn)" t nil)
@@ -13902,41 +14080,41 @@ Convert HTML to plain text in the current buffer.
;;;;;; ibuffer-backward-filter-group ibuffer-forward-filter-group
;;;;;; ibuffer-toggle-filter-group ibuffer-mouse-toggle-filter-group
;;;;;; ibuffer-interactive-filter-by-mode ibuffer-mouse-filter-by-mode
-;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" (17842 58279))
+;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" (18208 48750))
;;; Generated autoloads from ibuf-ext.el
-(autoload (quote ibuffer-auto-mode) "ibuf-ext" "\
+(autoload 'ibuffer-auto-mode "ibuf-ext" "\
Toggle use of Ibuffer's auto-update facility.
With numeric ARG, enable auto-update if and only if ARG is positive.
\(fn &optional ARG)" t nil)
-(autoload (quote ibuffer-mouse-filter-by-mode) "ibuf-ext" "\
+(autoload 'ibuffer-mouse-filter-by-mode "ibuf-ext" "\
Enable or disable filtering by the major mode chosen via mouse.
\(fn EVENT)" t nil)
-(autoload (quote ibuffer-interactive-filter-by-mode) "ibuf-ext" "\
+(autoload 'ibuffer-interactive-filter-by-mode "ibuf-ext" "\
Enable or disable filtering by the major mode at point.
\(fn EVENT-OR-POINT)" t nil)
-(autoload (quote ibuffer-mouse-toggle-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-mouse-toggle-filter-group "ibuf-ext" "\
Toggle the display status of the filter group chosen with the mouse.
\(fn EVENT)" t nil)
-(autoload (quote ibuffer-toggle-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-toggle-filter-group "ibuf-ext" "\
Toggle the display status of the filter group on this line.
\(fn)" t nil)
-(autoload (quote ibuffer-forward-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-forward-filter-group "ibuf-ext" "\
Move point forwards by COUNT filtering groups.
\(fn &optional COUNT)" t nil)
-(autoload (quote ibuffer-backward-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-backward-filter-group "ibuf-ext" "\
Move point backwards by COUNT filtering groups.
\(fn &optional COUNT)" t nil)
@@ -13952,95 +14130,93 @@ Move point backwards by COUNT filtering groups.
(autoload 'ibuffer-do-query-replace-regexp "ibuf-ext")
(autoload 'ibuffer-do-print "ibuf-ext")
-(autoload (quote ibuffer-included-in-filters-p) "ibuf-ext" "\
+(autoload 'ibuffer-included-in-filters-p "ibuf-ext" "\
Not documented
\(fn BUF FILTERS)" nil nil)
-(autoload (quote ibuffer-filters-to-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-filters-to-filter-group "ibuf-ext" "\
Make the current filters into a filtering group.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-set-filter-groups-by-mode) "ibuf-ext" "\
+(autoload 'ibuffer-set-filter-groups-by-mode "ibuf-ext" "\
Set the current filter groups to filter by mode.
\(fn)" t nil)
-(autoload (quote ibuffer-pop-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-pop-filter-group "ibuf-ext" "\
Remove the first filter group.
\(fn)" t nil)
-(autoload (quote ibuffer-decompose-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-decompose-filter-group "ibuf-ext" "\
Decompose the filter group GROUP into active filters.
\(fn GROUP)" t nil)
-(autoload (quote ibuffer-clear-filter-groups) "ibuf-ext" "\
+(autoload 'ibuffer-clear-filter-groups "ibuf-ext" "\
Remove all filter groups.
\(fn)" t nil)
-(autoload (quote ibuffer-jump-to-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-jump-to-filter-group "ibuf-ext" "\
Move point to the filter group whose name is NAME.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-kill-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-kill-filter-group "ibuf-ext" "\
Kill the filter group named NAME.
The group will be added to `ibuffer-filter-group-kill-ring'.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-kill-line) "ibuf-ext" "\
+(autoload 'ibuffer-kill-line "ibuf-ext" "\
Kill the filter group at point.
See also `ibuffer-kill-filter-group'.
\(fn &optional ARG INTERACTIVE-P)" t nil)
-(autoload (quote ibuffer-yank) "ibuf-ext" "\
+(autoload 'ibuffer-yank "ibuf-ext" "\
Yank the last killed filter group before group at point.
\(fn)" t nil)
-(autoload (quote ibuffer-yank-filter-group) "ibuf-ext" "\
+(autoload 'ibuffer-yank-filter-group "ibuf-ext" "\
Yank the last killed filter group before group named NAME.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-save-filter-groups) "ibuf-ext" "\
+(autoload 'ibuffer-save-filter-groups "ibuf-ext" "\
Save all active filter groups GROUPS as NAME.
They are added to `ibuffer-saved-filter-groups'. Interactively,
prompt for NAME, and use the current filters.
\(fn NAME GROUPS)" t nil)
-(autoload (quote ibuffer-delete-saved-filter-groups) "ibuf-ext" "\
+(autoload 'ibuffer-delete-saved-filter-groups "ibuf-ext" "\
Delete saved filter groups with NAME.
They are removed from `ibuffer-saved-filter-groups'.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-switch-to-saved-filter-groups) "ibuf-ext" "\
+(autoload 'ibuffer-switch-to-saved-filter-groups "ibuf-ext" "\
Set this buffer's filter groups to saved version with NAME.
-The value from `ibuffer-saved-filters' is used.
-If prefix argument ADD is non-nil, then add the saved filters instead
-of replacing the current filters.
+The value from `ibuffer-saved-filter-groups' is used.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-filter-disable) "ibuf-ext" "\
+(autoload 'ibuffer-filter-disable "ibuf-ext" "\
Disable all filters currently in effect in this buffer.
\(fn)" t nil)
-(autoload (quote ibuffer-pop-filter) "ibuf-ext" "\
+(autoload 'ibuffer-pop-filter "ibuf-ext" "\
Remove the top filter in this buffer.
\(fn)" t nil)
-(autoload (quote ibuffer-decompose-filter) "ibuf-ext" "\
+(autoload 'ibuffer-decompose-filter "ibuf-ext" "\
Separate the top compound filter (OR, NOT, or SAVED) in this buffer.
This means that the topmost filter on the filtering stack, which must
@@ -14049,43 +14225,41 @@ turned into two separate filters [name: foo] and [mode: bar-mode].
\(fn)" t nil)
-(autoload (quote ibuffer-exchange-filters) "ibuf-ext" "\
+(autoload 'ibuffer-exchange-filters "ibuf-ext" "\
Exchange the top two filters on the stack in this buffer.
\(fn)" t nil)
-(autoload (quote ibuffer-negate-filter) "ibuf-ext" "\
+(autoload 'ibuffer-negate-filter "ibuf-ext" "\
Negate the sense of the top filter in the current buffer.
\(fn)" t nil)
-(autoload (quote ibuffer-or-filter) "ibuf-ext" "\
+(autoload 'ibuffer-or-filter "ibuf-ext" "\
Replace the top two filters in this buffer with their logical OR.
If optional argument REVERSE is non-nil, instead break the top OR
filter into parts.
\(fn &optional REVERSE)" t nil)
-(autoload (quote ibuffer-save-filters) "ibuf-ext" "\
+(autoload 'ibuffer-save-filters "ibuf-ext" "\
Save FILTERS in this buffer with name NAME in `ibuffer-saved-filters'.
Interactively, prompt for NAME, and use the current filters.
\(fn NAME FILTERS)" t nil)
-(autoload (quote ibuffer-delete-saved-filters) "ibuf-ext" "\
+(autoload 'ibuffer-delete-saved-filters "ibuf-ext" "\
Delete saved filters with NAME from `ibuffer-saved-filters'.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-add-saved-filters) "ibuf-ext" "\
+(autoload 'ibuffer-add-saved-filters "ibuf-ext" "\
Add saved filters from `ibuffer-saved-filters' to this buffer's filters.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-switch-to-saved-filters) "ibuf-ext" "\
+(autoload 'ibuffer-switch-to-saved-filters "ibuf-ext" "\
Set this buffer's filters to filters with NAME from `ibuffer-saved-filters'.
-If prefix argument ADD is non-nil, then add the saved filters instead
-of replacing the current filters.
\(fn NAME)" t nil)
(autoload 'ibuffer-filter-by-mode "ibuf-ext")
@@ -14097,7 +14271,7 @@ of replacing the current filters.
(autoload 'ibuffer-filter-by-content "ibuf-ext")
(autoload 'ibuffer-filter-by-predicate "ibuf-ext")
-(autoload (quote ibuffer-toggle-sorting-mode) "ibuf-ext" "\
+(autoload 'ibuffer-toggle-sorting-mode "ibuf-ext" "\
Toggle the current sorting mode.
Default sorting modes are:
Recency - the last time the buffer was viewed
@@ -14107,7 +14281,7 @@ Default sorting modes are:
\(fn)" t nil)
-(autoload (quote ibuffer-invert-sorting) "ibuf-ext" "\
+(autoload 'ibuffer-invert-sorting "ibuf-ext" "\
Toggle whether or not sorting is in reverse order.
\(fn)" t nil)
@@ -14116,26 +14290,26 @@ Toggle whether or not sorting is in reverse order.
(autoload 'ibuffer-do-sort-by-alphabetic "ibuf-ext")
(autoload 'ibuffer-do-sort-by-size "ibuf-ext")
-(autoload (quote ibuffer-bs-show) "ibuf-ext" "\
+(autoload 'ibuffer-bs-show "ibuf-ext" "\
Emulate `bs-show' from the bs.el package.
\(fn)" t nil)
-(autoload (quote ibuffer-add-to-tmp-hide) "ibuf-ext" "\
+(autoload 'ibuffer-add-to-tmp-hide "ibuf-ext" "\
Add REGEXP to `ibuffer-tmp-hide-regexps'.
This means that buffers whose name matches REGEXP will not be shown
for this Ibuffer session.
\(fn REGEXP)" t nil)
-(autoload (quote ibuffer-add-to-tmp-show) "ibuf-ext" "\
+(autoload 'ibuffer-add-to-tmp-show "ibuf-ext" "\
Add REGEXP to `ibuffer-tmp-show-regexps'.
This means that buffers whose name matches REGEXP will always be shown
for this Ibuffer session.
\(fn REGEXP)" t nil)
-(autoload (quote ibuffer-forward-next-marked) "ibuf-ext" "\
+(autoload 'ibuffer-forward-next-marked "ibuf-ext" "\
Move forward by COUNT marked buffers (default 1).
If MARK is non-nil, it should be a character denoting the type of mark
@@ -14146,7 +14320,7 @@ mean move backwards, non-negative integers mean move forwards.
\(fn &optional COUNT MARK DIRECTION)" t nil)
-(autoload (quote ibuffer-backwards-next-marked) "ibuf-ext" "\
+(autoload 'ibuffer-backwards-next-marked "ibuf-ext" "\
Move backwards by COUNT marked buffers (default 1).
If MARK is non-nil, it should be a character denoting the type of mark
@@ -14154,12 +14328,12 @@ to move by. The default is `ibuffer-marked-char'.
\(fn &optional COUNT MARK)" t nil)
-(autoload (quote ibuffer-do-kill-lines) "ibuf-ext" "\
+(autoload 'ibuffer-do-kill-lines "ibuf-ext" "\
Hide all of the currently marked lines.
\(fn)" t nil)
-(autoload (quote ibuffer-jump-to-buffer) "ibuf-ext" "\
+(autoload 'ibuffer-jump-to-buffer "ibuf-ext" "\
Move point to the buffer whose name is NAME.
If called interactively, prompt for a buffer name and go to the
@@ -14172,13 +14346,13 @@ a prefix argument reverses the meaning of that variable.
\(fn NAME)" t nil)
-(autoload (quote ibuffer-diff-with-file) "ibuf-ext" "\
+(autoload 'ibuffer-diff-with-file "ibuf-ext" "\
View the differences between this buffer and its associated file.
This requires the external program \"diff\" to be in your `exec-path'.
\(fn)" t nil)
-(autoload (quote ibuffer-copy-filename-as-kill) "ibuf-ext" "\
+(autoload 'ibuffer-copy-filename-as-kill "ibuf-ext" "\
Copy filenames of marked buffers into the kill ring.
The names are separated by a space.
@@ -14187,78 +14361,78 @@ If a buffer has no filename, it is ignored.
With no prefix arg, use the filename sans its directory of each marked file.
With a zero prefix arg, use the complete filename of each marked file.
With \\[universal-argument], use the filename of each marked file relative
-to `ibuffer-default-directory' iff non-nil, otherwise `default-directory'.
+to `ibuffer-default-directory' if non-nil, otherwise `default-directory'.
You can then feed the file name(s) to other commands with \\[yank].
\(fn &optional ARG)" t nil)
-(autoload (quote ibuffer-mark-by-name-regexp) "ibuf-ext" "\
+(autoload 'ibuffer-mark-by-name-regexp "ibuf-ext" "\
Mark all buffers whose name matches REGEXP.
\(fn REGEXP)" t nil)
-(autoload (quote ibuffer-mark-by-mode-regexp) "ibuf-ext" "\
+(autoload 'ibuffer-mark-by-mode-regexp "ibuf-ext" "\
Mark all buffers whose major mode matches REGEXP.
\(fn REGEXP)" t nil)
-(autoload (quote ibuffer-mark-by-file-name-regexp) "ibuf-ext" "\
+(autoload 'ibuffer-mark-by-file-name-regexp "ibuf-ext" "\
Mark all buffers whose file name matches REGEXP.
\(fn REGEXP)" t nil)
-(autoload (quote ibuffer-mark-by-mode) "ibuf-ext" "\
+(autoload 'ibuffer-mark-by-mode "ibuf-ext" "\
Mark all buffers whose major mode equals MODE.
\(fn MODE)" t nil)
-(autoload (quote ibuffer-mark-modified-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-modified-buffers "ibuf-ext" "\
Mark all modified buffers.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-unsaved-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-unsaved-buffers "ibuf-ext" "\
Mark all modified buffers that have an associated file.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-dissociated-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-dissociated-buffers "ibuf-ext" "\
Mark all buffers whose associated file does not exist.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-help-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-help-buffers "ibuf-ext" "\
Mark buffers like *Help*, *Apropos*, *Info*.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-compressed-file-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-compressed-file-buffers "ibuf-ext" "\
Mark buffers whose associated file is compressed.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-old-buffers) "ibuf-ext" "\
-Mark buffers which have not been viewed in `ibuffer-old-time' days.
+(autoload 'ibuffer-mark-old-buffers "ibuf-ext" "\
+Mark buffers which have not been viewed in `ibuffer-old-time' hours.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-special-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-special-buffers "ibuf-ext" "\
Mark all buffers whose name begins and ends with '*'.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-read-only-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-read-only-buffers "ibuf-ext" "\
Mark all read-only buffers.
\(fn)" t nil)
-(autoload (quote ibuffer-mark-dired-buffers) "ibuf-ext" "\
+(autoload 'ibuffer-mark-dired-buffers "ibuf-ext" "\
Mark all `dired' buffers.
\(fn)" t nil)
-(autoload (quote ibuffer-do-occur) "ibuf-ext" "\
+(autoload 'ibuffer-do-occur "ibuf-ext" "\
View lines which match REGEXP in all marked buffers.
Optional argument NLINES says how many lines of context to display: it
defaults to one.
@@ -14268,11 +14442,11 @@ defaults to one.
;;;***
;;;### (autoloads (define-ibuffer-filter define-ibuffer-op define-ibuffer-sorter
-;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (17842
-;;;;;; 58279))
+;;;;;; define-ibuffer-column) "ibuf-macs" "ibuf-macs.el" (18088
+;;;;;; 55085))
;;; Generated autoloads from ibuf-macs.el
-(autoload (quote define-ibuffer-column) "ibuf-macs" "\
+(autoload 'define-ibuffer-column "ibuf-macs" "\
Define a column SYMBOL for use with `ibuffer-formats'.
BODY will be called with `buffer' bound to the buffer object, and
@@ -14297,7 +14471,7 @@ change its definition, you should explicitly call
\(fn SYMBOL (&key NAME INLINE PROPS SUMMARIZER) &rest BODY)" nil (quote macro))
-(autoload (quote define-ibuffer-sorter) "ibuf-macs" "\
+(autoload 'define-ibuffer-sorter "ibuf-macs" "\
Define a method of sorting named NAME.
DOCUMENTATION is the documentation of the function, which will be called
`ibuffer-do-sort-by-NAME'.
@@ -14309,7 +14483,7 @@ value if and only if `a' is \"less than\" `b'.
\(fn NAME DOCUMENTATION (&key DESCRIPTION) &rest BODY)" nil (quote macro))
-(autoload (quote define-ibuffer-op) "ibuf-macs" "\
+(autoload 'define-ibuffer-op "ibuf-macs" "\
Generate a function which operates on a buffer.
OP becomes the name of the function; if it doesn't begin with
`ibuffer-do-', then that is prepended to it.
@@ -14342,7 +14516,7 @@ macro for exactly what it does.
\(fn OP ARGS DOCUMENTATION (&key INTERACTIVE MARK MODIFIER-P DANGEROUS OPSTRING ACTIVE-OPSTRING COMPLEX) &rest BODY)" nil (quote macro))
-(autoload (quote define-ibuffer-filter) "ibuf-macs" "\
+(autoload 'define-ibuffer-filter "ibuf-macs" "\
Define a filter named NAME.
DOCUMENTATION is the documentation of the function.
READER is a form which should read a qualifier from the user.
@@ -14358,24 +14532,24 @@ bound to the current value of the filter.
;;;***
;;;### (autoloads (ibuffer ibuffer-other-window ibuffer-list-buffers)
-;;;;;; "ibuffer" "ibuffer.el" (17842 58279))
+;;;;;; "ibuffer" "ibuffer.el" (18120 34749))
;;; Generated autoloads from ibuffer.el
-(autoload (quote ibuffer-list-buffers) "ibuffer" "\
+(autoload 'ibuffer-list-buffers "ibuffer" "\
Display a list of buffers, in another window.
If optional argument FILES-ONLY is non-nil, then add a filter for
buffers which are visiting a file.
\(fn &optional FILES-ONLY)" t nil)
-(autoload (quote ibuffer-other-window) "ibuffer" "\
+(autoload 'ibuffer-other-window "ibuffer" "\
Like `ibuffer', but displayed in another window by default.
If optional argument FILES-ONLY is non-nil, then add a filter for
buffers which are visiting a file.
\(fn &optional FILES-ONLY)" t nil)
-(autoload (quote ibuffer) "ibuffer" "\
+(autoload 'ibuffer "ibuffer" "\
Begin using Ibuffer to edit a list of buffers.
Type 'h' after entering ibuffer for more information.
@@ -14399,17 +14573,17 @@ FORMATS is the value to use for `ibuffer-formats'.
;;;### (autoloads (icalendar-import-buffer icalendar-import-file
;;;;;; icalendar-export-region icalendar-export-file) "icalendar"
-;;;;;; "calendar/icalendar.el" (17921 16827))
+;;;;;; "calendar/icalendar.el" (18173 8195))
;;; Generated autoloads from calendar/icalendar.el
-(autoload (quote icalendar-export-file) "icalendar" "\
+(autoload 'icalendar-export-file "icalendar" "\
Export diary file to iCalendar format.
All diary entries in the file DIARY-FILENAME are converted to iCalendar
format. The result is appended to the file ICAL-FILENAME.
\(fn DIARY-FILENAME ICAL-FILENAME)" t nil)
-(autoload (quote icalendar-export-region) "icalendar" "\
+(autoload 'icalendar-export-region "icalendar" "\
Export region in diary file to iCalendar format.
All diary entries in the region from MIN to MAX in the current buffer are
converted to iCalendar format. The result is appended to the file
@@ -14420,7 +14594,7 @@ written into the buffer `*icalendar-errors*'.
\(fn MIN MAX ICAL-FILENAME)" t nil)
-(autoload (quote icalendar-import-file) "icalendar" "\
+(autoload 'icalendar-import-file "icalendar" "\
Import an iCalendar file and append to a diary file.
Argument ICAL-FILENAME output iCalendar file.
Argument DIARY-FILENAME input `diary-file'.
@@ -14429,7 +14603,7 @@ non-marking or not.
\(fn ICAL-FILENAME DIARY-FILENAME &optional NON-MARKING)" t nil)
-(autoload (quote icalendar-import-buffer) "icalendar" "\
+(autoload 'icalendar-import-buffer "icalendar" "\
Extract iCalendar events from current buffer.
This function searches the current buffer for the first iCalendar
@@ -14451,8 +14625,8 @@ buffer `*icalendar-errors*'.
;;;***
-;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (17907
-;;;;;; 1407))
+;;;### (autoloads (icomplete-mode) "icomplete" "icomplete.el" (18120
+;;;;;; 34749))
;;; Generated autoloads from icomplete.el
(defvar icomplete-mode nil "\
@@ -14462,20 +14636,21 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `icomplete-mode'.")
-(custom-autoload (quote icomplete-mode) "icomplete" nil)
+(custom-autoload 'icomplete-mode "icomplete" nil)
-(autoload (quote icomplete-mode) "icomplete" "\
+(autoload 'icomplete-mode "icomplete" "\
Toggle incremental minibuffer completion for this Emacs session.
-With a numeric argument, turn Icomplete mode on iff ARG is positive.
+With a numeric argument, turn Icomplete mode on if ARG is positive,
+otherwise turn it off.
\(fn &optional ARG)" t nil)
;;;***
-;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (17842 56333))
+;;;### (autoloads (icon-mode) "icon" "progmodes/icon.el" (18088 55116))
;;; Generated autoloads from progmodes/icon.el
-(autoload (quote icon-mode) "icon" "\
+(autoload 'icon-mode "icon" "\
Major mode for editing Icon code.
Expression and list commands understand all Icon brackets.
Tab indents for Icon code.
@@ -14513,10 +14688,10 @@ with no args, if that value is non-nil.
;;;***
;;;### (autoloads (idlwave-shell) "idlw-shell" "progmodes/idlw-shell.el"
-;;;;;; (17965 23638))
+;;;;;; (18201 33329))
;;; Generated autoloads from progmodes/idlw-shell.el
-(autoload (quote idlwave-shell) "idlw-shell" "\
+(autoload 'idlwave-shell "idlw-shell" "\
Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'.
If buffer exists but shell process is not running, start new IDL.
If buffer exists and shell process is running, just switch to the buffer.
@@ -14539,10 +14714,10 @@ See also the variable `idlwave-shell-prompt-pattern'.
;;;***
;;;### (autoloads (idlwave-mode) "idlwave" "progmodes/idlwave.el"
-;;;;;; (17992 30878))
+;;;;;; (18197 21676))
;;; Generated autoloads from progmodes/idlwave.el
-(autoload (quote idlwave-mode) "idlwave" "\
+(autoload 'idlwave-mode "idlwave" "\
Major mode for editing IDL source files (version 6.1_em22).
The main features of this mode are
@@ -14674,8 +14849,8 @@ The main features of this mode are
;;;;;; ido-find-alternate-file ido-find-file-other-window ido-find-file
;;;;;; ido-find-file-in-dir ido-switch-buffer-other-frame ido-insert-buffer
;;;;;; ido-kill-buffer ido-display-buffer ido-switch-buffer-other-window
-;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (17963
-;;;;;; 25911))
+;;;;;; ido-switch-buffer ido-mode ido-mode) "ido" "ido.el" (18169
+;;;;;; 11931))
;;; Generated autoloads from ido.el
(defvar ido-mode nil "\
@@ -14690,9 +14865,9 @@ should be enabled. The following values are possible:
Setting this variable directly does not take effect;
use either \\[customize] or the function `ido-mode'.")
-(custom-autoload (quote ido-mode) "ido" nil)
+(custom-autoload 'ido-mode "ido" nil)
-(autoload (quote ido-mode) "ido" "\
+(autoload 'ido-mode "ido" "\
Toggle ido speed-ups on or off.
With ARG, turn ido speed-up on if arg is positive, off otherwise.
Turning on ido-mode will remap (via a minor-mode keymap) the default
@@ -14704,7 +14879,7 @@ This function also adds a hook to the minibuffer.
\(fn &optional ARG)" t nil)
-(autoload (quote ido-switch-buffer) "ido" "\
+(autoload 'ido-switch-buffer "ido" "\
Switch to another buffer.
The buffer is displayed according to `ido-default-buffer-method' -- the
default is to show it in the same window, unless it is already visible
@@ -14740,47 +14915,47 @@ in a separate window.
\(fn)" t nil)
-(autoload (quote ido-switch-buffer-other-window) "ido" "\
+(autoload 'ido-switch-buffer-other-window "ido" "\
Switch to another buffer and show it in another window.
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'.
\(fn)" t nil)
-(autoload (quote ido-display-buffer) "ido" "\
+(autoload 'ido-display-buffer "ido" "\
Display a buffer in another window but don't select it.
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'.
\(fn)" t nil)
-(autoload (quote ido-kill-buffer) "ido" "\
+(autoload 'ido-kill-buffer "ido" "\
Kill a buffer.
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'.
\(fn)" t nil)
-(autoload (quote ido-insert-buffer) "ido" "\
+(autoload 'ido-insert-buffer "ido" "\
Insert contents of a buffer in current buffer after point.
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'.
\(fn)" t nil)
-(autoload (quote ido-switch-buffer-other-frame) "ido" "\
+(autoload 'ido-switch-buffer-other-frame "ido" "\
Switch to another buffer and show it in another frame.
The buffer name is selected interactively by typing a substring.
For details of keybindings, see `ido-switch-buffer'.
\(fn)" t nil)
-(autoload (quote ido-find-file-in-dir) "ido" "\
+(autoload 'ido-find-file-in-dir "ido" "\
Switch to another file starting from DIR.
\(fn DIR)" t nil)
-(autoload (quote ido-find-file) "ido" "\
+(autoload 'ido-find-file "ido" "\
Edit file with name obtained via minibuffer.
The file is displayed according to `ido-default-file-method' -- the
default is to show it in the same window, unless it is already
@@ -14823,77 +14998,77 @@ in a separate window.
\(fn)" t nil)
-(autoload (quote ido-find-file-other-window) "ido" "\
+(autoload 'ido-find-file-other-window "ido" "\
Switch to another file and show it in another window.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-find-alternate-file) "ido" "\
+(autoload 'ido-find-alternate-file "ido" "\
Switch to another file and show it in another window.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-find-file-read-only) "ido" "\
+(autoload 'ido-find-file-read-only "ido" "\
Edit file read-only with name obtained via minibuffer.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-find-file-read-only-other-window) "ido" "\
+(autoload 'ido-find-file-read-only-other-window "ido" "\
Edit file read-only in other window with name obtained via minibuffer.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-find-file-read-only-other-frame) "ido" "\
+(autoload 'ido-find-file-read-only-other-frame "ido" "\
Edit file read-only in other frame with name obtained via minibuffer.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-display-file) "ido" "\
+(autoload 'ido-display-file "ido" "\
Display a file in another window but don't select it.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-find-file-other-frame) "ido" "\
+(autoload 'ido-find-file-other-frame "ido" "\
Switch to another file and show it in another frame.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-write-file) "ido" "\
+(autoload 'ido-write-file "ido" "\
Write current buffer to a file.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-insert-file) "ido" "\
+(autoload 'ido-insert-file "ido" "\
Insert contents of file in current buffer.
The file name is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-dired) "ido" "\
+(autoload 'ido-dired "ido" "\
Call `dired' the ido way.
The directory is selected interactively by typing a substring.
For details of keybindings, see `ido-find-file'.
\(fn)" t nil)
-(autoload (quote ido-read-buffer) "ido" "\
+(autoload 'ido-read-buffer "ido" "\
Ido replacement for the built-in `read-buffer'.
Return the name of a buffer selected.
PROMPT is the prompt to give to the user. DEFAULT if given is the default
@@ -14902,21 +15077,21 @@ If REQUIRE-MATCH is non-nil, an existing buffer must be selected.
\(fn PROMPT &optional DEFAULT REQUIRE-MATCH)" nil nil)
-(autoload (quote ido-read-file-name) "ido" "\
+(autoload 'ido-read-file-name "ido" "\
Ido replacement for the built-in `read-file-name'.
Read file name, prompting with PROMPT and completing in directory DIR.
See `read-file-name' for additional parameters.
\(fn PROMPT &optional DIR DEFAULT-FILENAME MUSTMATCH INITIAL PREDICATE)" nil nil)
-(autoload (quote ido-read-directory-name) "ido" "\
+(autoload 'ido-read-directory-name "ido" "\
Ido replacement for the built-in `read-directory-name'.
Read directory name, prompting with PROMPT and completing in directory DIR.
See `read-directory-name' for additional parameters.
\(fn PROMPT &optional DIR DEFAULT-DIRNAME MUSTMATCH INITIAL)" nil nil)
-(autoload (quote ido-completing-read) "ido" "\
+(autoload 'ido-completing-read "ido" "\
Ido replacement for the built-in `completing-read'.
Read a string in the minibuffer with ido-style completion.
PROMPT is a string to prompt with; normally it ends in a colon and a space.
@@ -14936,11 +15111,11 @@ DEF, if non-nil, is the default value.
;;;***
-;;;### (autoloads (ielm) "ielm" "ielm.el" (17842 58279))
+;;;### (autoloads (ielm) "ielm" "ielm.el" (18214 4479))
;;; Generated autoloads from ielm.el
(add-hook 'same-window-buffer-names "*ielm*")
-(autoload (quote ielm) "ielm" "\
+(autoload 'ielm "ielm" "\
Interactively evaluate Emacs Lisp expressions.
Switches to the buffer `*ielm*', or creates it if it does not exist.
@@ -14949,15 +15124,15 @@ Switches to the buffer `*ielm*', or creates it if it does not exist.
;;;***
;;;### (autoloads (iimage-mode turn-on-iimage-mode) "iimage" "iimage.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55085))
;;; Generated autoloads from iimage.el
-(autoload (quote turn-on-iimage-mode) "iimage" "\
+(autoload 'turn-on-iimage-mode "iimage" "\
Unconditionally turn on iimage mode.
\(fn)" t nil)
-(autoload (quote iimage-mode) "iimage" "\
+(autoload 'iimage-mode "iimage" "\
Toggle inline image minor mode.
\(fn &optional ARG)" t nil)
@@ -14968,69 +15143,67 @@ Toggle inline image minor mode.
;;;;;; insert-image put-image create-image image-type-auto-detected-p
;;;;;; image-type-available-p image-type image-type-from-file-name
;;;;;; image-type-from-file-header image-type-from-buffer image-type-from-data)
-;;;;;; "image" "image.el" (17868 42568))
+;;;;;; "image" "image.el" (18186 14736))
;;; Generated autoloads from image.el
-(autoload (quote image-type-from-data) "image" "\
+(autoload 'image-type-from-data "image" "\
Determine the image type from image data DATA.
Value is a symbol specifying the image type or nil if type cannot
be determined.
\(fn DATA)" nil nil)
-(autoload (quote image-type-from-buffer) "image" "\
+(autoload 'image-type-from-buffer "image" "\
Determine the image type from data in the current buffer.
Value is a symbol specifying the image type or nil if type cannot
be determined.
\(fn)" nil nil)
-(autoload (quote image-type-from-file-header) "image" "\
+(autoload 'image-type-from-file-header "image" "\
Determine the type of image file FILE from its first few bytes.
Value is a symbol specifying the image type, or nil if type cannot
be determined.
\(fn FILE)" nil nil)
-(autoload (quote image-type-from-file-name) "image" "\
+(autoload 'image-type-from-file-name "image" "\
Determine the type of image file FILE from its name.
Value is a symbol specifying the image type, or nil if type cannot
be determined.
\(fn FILE)" nil nil)
-(autoload (quote image-type) "image" "\
+(autoload 'image-type "image" "\
Determine and return image type.
-FILE-OR-DATA is an image file name or image data.
+SOURCE is an image file name or image data.
Optional TYPE is a symbol describing the image type. If TYPE is omitted
or nil, try to determine the image type from its first few bytes
-of image data. If that doesn't work, and FILE-OR-DATA is a file name,
+of image data. If that doesn't work, and SOURCE is a file name,
use its file extension as image type.
-Optional DATA-P non-nil means FILE-OR-DATA is a string containing image data.
+Optional DATA-P non-nil means SOURCE is a string containing image data.
-\(fn FILE-OR-DATA &optional TYPE DATA-P)" nil nil)
+\(fn SOURCE &optional TYPE DATA-P)" nil nil)
-(autoload (quote image-type-available-p) "image" "\
+(autoload 'image-type-available-p "image" "\
Return non-nil if image type TYPE is available.
Image types are symbols like `xbm' or `jpeg'.
\(fn TYPE)" nil nil)
-(autoload (quote image-type-auto-detected-p) "image" "\
-Return t iff the current buffer contains an auto-detectable image.
-This function is intended to be used from `magic-mode-alist' (which see).
+(autoload 'image-type-auto-detected-p "image" "\
+Return t if the current buffer contains an auto-detectable image.
+This function is intended to be used from `magic-fallback-mode-alist'.
-First, compare the beginning of the buffer with `image-type-header-regexps'.
-If an appropriate image type is found, check if that image type can be
-autodetected using the variable `image-type-auto-detectable'. Finally,
-if `buffer-file-name' is non-nil, check if it matches another major mode
-in `auto-mode-alist' apart from `image-mode'; if there is another match,
-the autodetection is considered to have failed. Return t if all the above
-steps succeed.
+The buffer is considered to contain an auto-detectable image if
+its beginning matches an image type in `image-type-header-regexps',
+and that image type is present in `image-type-auto-detectable' with a
+non-nil value. If that value is non-nil, but not t, then the image type
+must be available.
\(fn)" nil nil)
-(autoload (quote create-image) "image" "\
+(autoload 'create-image "image" "\
Create an image.
FILE-OR-DATA is an image file name or image data.
Optional TYPE is a symbol describing the image type. If TYPE is omitted
@@ -15044,9 +15217,13 @@ Value is the image created, or nil if images of type TYPE are not supported.
Images should not be larger than specified by `max-image-size'.
+Image file names that are not absolute are searched for in the
+\"images\" sub-directory of `data-directory' and
+`x-bitmap-file-path' (in that order).
+
\(fn FILE-OR-DATA &optional TYPE DATA-P &rest PROPS)" nil nil)
-(autoload (quote put-image) "image" "\
+(autoload 'put-image "image" "\
Put image IMAGE in front of POS in the current buffer.
IMAGE must be an image created with `create-image' or `defimage'.
IMAGE is displayed by putting an overlay into the current buffer with a
@@ -15060,7 +15237,7 @@ means display it in the right marginal area.
\(fn IMAGE POS &optional STRING AREA)" nil nil)
-(autoload (quote insert-image) "image" "\
+(autoload 'insert-image "image" "\
Insert IMAGE into current buffer at point.
IMAGE is displayed by inserting STRING into the current buffer
with a `display' property whose value is the image. STRING is
@@ -15077,7 +15254,7 @@ height of the image; integer values are taken as pixel values.
\(fn IMAGE &optional STRING AREA SLICE)" nil nil)
-(autoload (quote insert-sliced-image) "image" "\
+(autoload 'insert-sliced-image "image" "\
Insert IMAGE into current buffer at point.
IMAGE is displayed by inserting STRING into the current buffer
with a `display' property whose value is the image. STRING is
@@ -15090,14 +15267,14 @@ The image is automatically split into ROW x COLS slices.
\(fn IMAGE &optional STRING AREA ROWS COLS)" nil nil)
-(autoload (quote remove-images) "image" "\
+(autoload 'remove-images "image" "\
Remove images between START and END in BUFFER.
Remove only images that were put in BUFFER with calls to `put-image'.
BUFFER nil or omitted means use the current buffer.
\(fn START END &optional BUFFER)" nil nil)
-(autoload (quote find-image) "image" "\
+(autoload 'find-image "image" "\
Find an image, choosing one of a list of image specifications.
SPECS is a list of image specifications.
@@ -15118,7 +15295,7 @@ Image files should not be larger than specified by `max-image-size'.
\(fn SPECS)" nil nil)
-(autoload (quote defimage) "image" "\
+(autoload 'defimage "image" "\
Define SYMBOL as an image.
SPECS is a list of image specifications. DOC is an optional
@@ -15149,15 +15326,15 @@ Example:
;;;;;; image-dired-jump-thumbnail-buffer image-dired-delete-tag
;;;;;; image-dired-tag-files image-dired-show-all-from-dir image-dired-display-thumbs
;;;;;; image-dired-dired-with-window-configuration image-dired-dired-insert-marked-thumbs)
-;;;;;; "image-dired" "image-dired.el" (17992 30877))
+;;;;;; "image-dired" "image-dired.el" (18202 3995))
;;; Generated autoloads from image-dired.el
-(autoload (quote image-dired-dired-insert-marked-thumbs) "image-dired" "\
+(autoload 'image-dired-dired-insert-marked-thumbs "image-dired" "\
Insert thumbnails before file names of marked files in the dired buffer.
\(fn)" t nil)
-(autoload (quote image-dired-dired-with-window-configuration) "image-dired" "\
+(autoload 'image-dired-dired-with-window-configuration "image-dired" "\
Open directory DIR and create a default window configuration.
Convenience command that:
@@ -15177,7 +15354,7 @@ calling `image-dired-restore-window-configuration'.
\(fn DIR &optional ARG)" t nil)
-(autoload (quote image-dired-display-thumbs) "image-dired" "\
+(autoload 'image-dired-display-thumbs "image-dired" "\
Display thumbnails of all marked files, in `image-dired-thumbnail-buffer'.
If a thumbnail image does not exist for a file, it is created on the
fly. With prefix argument ARG, display only thumbnail for file at
@@ -15200,7 +15377,7 @@ thumbnail buffer to be selected.
\(fn &optional ARG APPEND DO-NOT-POP)" t nil)
-(autoload (quote image-dired-show-all-from-dir) "image-dired" "\
+(autoload 'image-dired-show-all-from-dir "image-dired" "\
Make a preview buffer for all images in DIR and display it.
If the number of files in DIR matching `image-file-name-regexp'
exceeds `image-dired-show-all-from-dir-max-files', a warning will be
@@ -15208,61 +15385,61 @@ displayed.
\(fn DIR)" t nil)
-(defalias (quote image-dired) (quote image-dired-show-all-from-dir))
+(defalias 'image-dired 'image-dired-show-all-from-dir)
-(defalias (quote tumme) (quote image-dired-show-all-from-dir))
+(defalias 'tumme 'image-dired-show-all-from-dir)
-(autoload (quote image-dired-tag-files) "image-dired" "\
+(autoload 'image-dired-tag-files "image-dired" "\
Tag marked file(s) in dired. With prefix ARG, tag file at point.
\(fn ARG)" t nil)
-(autoload (quote image-dired-delete-tag) "image-dired" "\
+(autoload 'image-dired-delete-tag "image-dired" "\
Remove tag for selected file(s).
With prefix argument ARG, remove tag from file at point.
\(fn ARG)" t nil)
-(autoload (quote image-dired-jump-thumbnail-buffer) "image-dired" "\
+(autoload 'image-dired-jump-thumbnail-buffer "image-dired" "\
Jump to thumbnail buffer.
\(fn)" t nil)
-(autoload (quote image-dired-setup-dired-keybindings) "image-dired" "\
+(autoload 'image-dired-setup-dired-keybindings "image-dired" "\
Setup easy-to-use keybindings for the commands to be used in dired mode.
Note that n, p and <down> and <up> will be hijacked and bound to
`image-dired-dired-x-line'.
\(fn)" t nil)
-(autoload (quote image-dired-display-thumbs-append) "image-dired" "\
+(autoload 'image-dired-display-thumbs-append "image-dired" "\
Append thumbnails to `image-dired-thumbnail-buffer'.
\(fn)" t nil)
-(autoload (quote image-dired-display-thumb) "image-dired" "\
+(autoload 'image-dired-display-thumb "image-dired" "\
Shorthand for `image-dired-display-thumbs' with prefix argument.
\(fn)" t nil)
-(autoload (quote image-dired-dired-display-external) "image-dired" "\
+(autoload 'image-dired-dired-display-external "image-dired" "\
Display file at point using an external viewer.
\(fn)" t nil)
-(autoload (quote image-dired-dired-display-image) "image-dired" "\
+(autoload 'image-dired-dired-display-image "image-dired" "\
Display current image file.
See documentation for `image-dired-display-image' for more information.
With prefix argument ARG, display image in its original size.
\(fn &optional ARG)" t nil)
-(autoload (quote image-dired-dired-comment-files) "image-dired" "\
+(autoload 'image-dired-dired-comment-files "image-dired" "\
Add comment to current or marked files in dired.
\(fn)" t nil)
-(autoload (quote image-dired-mark-tagged-files) "image-dired" "\
+(autoload 'image-dired-mark-tagged-files "image-dired" "\
Use regexp to mark files with matching tag.
A `tag' is a keyword, a piece of meta data, associated with an
image file and stored in image-dired's database file. This command
@@ -15272,7 +15449,7 @@ matching tags will be marked in the dired buffer.
\(fn)" t nil)
-(autoload (quote image-dired-dired-edit-comment-and-tags) "image-dired" "\
+(autoload 'image-dired-dired-edit-comment-and-tags "image-dired" "\
Edit comment and tags of current or marked image files.
Edit comment and tags for all marked image files in an
easy-to-use form.
@@ -15283,10 +15460,10 @@ easy-to-use form.
;;;### (autoloads (auto-image-file-mode insert-image-file image-file-name-regexp
;;;;;; image-file-name-regexps image-file-name-extensions) "image-file"
-;;;;;; "image-file.el" (17842 58279))
+;;;;;; "image-file.el" (18123 58387))
;;; Generated autoloads from image-file.el
-(defvar image-file-name-extensions (quote ("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm")) "\
+(defvar image-file-name-extensions '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg") "\
*A list of image-file filename extensions.
Filenames having one of these extensions are considered image files,
in addition to those matching `image-file-name-regexps'.
@@ -15296,7 +15473,7 @@ setting this variable directly does not take effect unless
`auto-image-file-mode' is re-enabled; this happens automatically when
the variable is set using \\[customize].")
-(custom-autoload (quote image-file-name-extensions) "image-file" nil)
+(custom-autoload 'image-file-name-extensions "image-file" nil)
(defvar image-file-name-regexps nil "\
*List of regexps matching image-file filenames.
@@ -15308,14 +15485,14 @@ enabled, setting this variable directly does not take effect unless
`auto-image-file-mode' is re-enabled; this happens automatically when
the variable is set using \\[customize].")
-(custom-autoload (quote image-file-name-regexps) "image-file" nil)
+(custom-autoload 'image-file-name-regexps "image-file" nil)
-(autoload (quote image-file-name-regexp) "image-file" "\
+(autoload 'image-file-name-regexp "image-file" "\
Return a regular expression matching image-file filenames.
\(fn)" nil nil)
-(autoload (quote insert-image-file) "image-file" "\
+(autoload 'insert-image-file "image-file" "\
Insert the image file FILE into the current buffer.
Optional arguments VISIT, BEG, END, and REPLACE are interpreted as for
the command `insert-file-contents'.
@@ -15329,9 +15506,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `auto-image-file-mode'.")
-(custom-autoload (quote auto-image-file-mode) "image-file" nil)
+(custom-autoload 'auto-image-file-mode "image-file" nil)
-(autoload (quote auto-image-file-mode) "image-file" "\
+(autoload 'auto-image-file-mode "image-file" "\
Toggle visiting of image files as images.
With prefix argument ARG, turn on if positive, otherwise off.
Returns non-nil if the new state is enabled.
@@ -15345,30 +15522,33 @@ Image files are those whose name has an extension in
;;;***
;;;### (autoloads (image-mode-maybe image-minor-mode image-mode)
-;;;;;; "image-mode" "image-mode.el" (17868 42581))
+;;;;;; "image-mode" "image-mode.el" (18132 64031))
;;; Generated autoloads from image-mode.el
(push '("\\.jpe?g\\'" . image-mode) auto-mode-alist)
(push '("\\.png\\'" . image-mode) auto-mode-alist)
(push '("\\.gif\\'" . image-mode) auto-mode-alist)
(push '("\\.tiff?\\'" . image-mode) auto-mode-alist)
(push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist)
+ (push '("\\.x[bp]m\\'" . c-mode) auto-mode-alist)
(push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist)
+ (push '("\\.svgz?\\'" . xml-mode) auto-mode-alist)
+ (push '("\\.svgz?\\'" . image-mode-maybe) auto-mode-alist)
-(autoload (quote image-mode) "image-mode" "\
+(autoload 'image-mode "image-mode" "\
Major mode for image files.
You can use \\<image-mode-map>\\[image-toggle-display]
to toggle between display as an image and display as text.
\(fn)" t nil)
-(autoload (quote image-minor-mode) "image-mode" "\
+(autoload 'image-minor-mode "image-mode" "\
Toggle Image minor mode.
With arg, turn Image minor mode on if arg is positive, off otherwise.
See the command `image-mode' for more information on this mode.
\(fn &optional ARG)" t nil)
-(autoload (quote image-mode-maybe) "image-mode" "\
+(autoload 'image-mode-maybe "image-mode" "\
Set major or minor mode for image files.
Set Image major mode only when there are no other major modes
associated with a filename in `auto-mode-alist'. When an image
@@ -15383,7 +15563,7 @@ information on these modes.
;;;***
;;;### (autoloads (imenu imenu-add-menubar-index imenu-add-to-menubar
-;;;;;; imenu-sort-function) "imenu" "imenu.el" (17842 58279))
+;;;;;; imenu-sort-function) "imenu" "imenu.el" (18120 34749))
;;; Generated autoloads from imenu.el
(defvar imenu-sort-function nil "\
@@ -15401,7 +15581,7 @@ The function should take two arguments and return t if the first
element should come before the second. The arguments are cons cells;
\(NAME . POSITION). Look at `imenu--sort-by-name' for an example.")
-(custom-autoload (quote imenu-sort-function) "imenu" t)
+(custom-autoload 'imenu-sort-function "imenu" t)
(defvar imenu-generic-expression nil "\
The regex pattern to use for creating a buffer index.
@@ -15415,9 +15595,9 @@ For example, see the value of `fortran-imenu-generic-expression' used by
characters which normally have \"symbol\" syntax \"word\" syntax
during matching.")
-(make-variable-buffer-local (quote imenu-generic-expression))
+(make-variable-buffer-local 'imenu-generic-expression)
-(defvar imenu-create-index-function (quote imenu-default-create-index-function) "\
+(defvar imenu-create-index-function 'imenu-default-create-index-function "\
The function to use for creating an index alist of the current buffer.
It should be a function that takes no arguments and returns
@@ -15426,9 +15606,9 @@ called within a `save-excursion'.
See `imenu--index-alist' for the format of the buffer index alist.")
-(make-variable-buffer-local (quote imenu-create-index-function))
+(make-variable-buffer-local 'imenu-create-index-function)
-(defvar imenu-prev-index-position-function (quote beginning-of-defun) "\
+(defvar imenu-prev-index-position-function 'beginning-of-defun "\
Function for finding the next index position.
If `imenu-create-index-function' is set to
@@ -15439,7 +15619,7 @@ file.
The function should leave point at the place to be connected to the
index and it should return nil when it doesn't find another index.")
-(make-variable-buffer-local (quote imenu-prev-index-position-function))
+(make-variable-buffer-local 'imenu-prev-index-position-function)
(defvar imenu-extract-index-name-function nil "\
Function for extracting the index item name, given a position.
@@ -15448,7 +15628,7 @@ This function is called after `imenu-prev-index-position-function'
finds a position for an index item, with point at that position.
It should return the name for that index item.")
-(make-variable-buffer-local (quote imenu-extract-index-name-function))
+(make-variable-buffer-local 'imenu-extract-index-name-function)
(defvar imenu-name-lookup-function nil "\
Function to compare string with index item.
@@ -15461,33 +15641,33 @@ Set this to some other function for more advanced comparisons,
such as \"begins with\" or \"name matches and number of
arguments match\".")
-(make-variable-buffer-local (quote imenu-name-lookup-function))
+(make-variable-buffer-local 'imenu-name-lookup-function)
-(defvar imenu-default-goto-function (quote imenu-default-goto-function) "\
+(defvar imenu-default-goto-function 'imenu-default-goto-function "\
The default function called when selecting an Imenu item.
The function in this variable is called when selecting a normal index-item.")
-(make-variable-buffer-local (quote imenu-default-goto-function))
+(make-variable-buffer-local 'imenu-default-goto-function)
-(make-variable-buffer-local (quote imenu-syntax-alist))
+(make-variable-buffer-local 'imenu-syntax-alist)
-(make-variable-buffer-local (quote imenu-case-fold-search))
+(make-variable-buffer-local 'imenu-case-fold-search)
-(autoload (quote imenu-add-to-menubar) "imenu" "\
+(autoload 'imenu-add-to-menubar "imenu" "\
Add an `imenu' entry to the menu bar for the current buffer.
NAME is a string used to name the menu bar item.
See the command `imenu' for more information.
\(fn NAME)" t nil)
-(autoload (quote imenu-add-menubar-index) "imenu" "\
+(autoload 'imenu-add-menubar-index "imenu" "\
Add an Imenu \"Index\" entry on the menu bar for the current buffer.
A trivial interface to `imenu-add-to-menubar' suitable for use in a hook.
\(fn)" t nil)
-(autoload (quote imenu) "imenu" "\
+(autoload 'imenu "imenu" "\
Jump to a place in the buffer chosen using a buffer menu or mouse menu.
INDEX-ITEM specifies the position. See `imenu-choose-buffer-index'
for more information.
@@ -15498,30 +15678,30 @@ for more information.
;;;### (autoloads (indian-char-glyph indian-glyph-char in-is13194-pre-write-conversion
;;;;;; in-is13194-post-read-conversion indian-compose-string indian-compose-region)
-;;;;;; "ind-util" "language/ind-util.el" (17842 58278))
+;;;;;; "ind-util" "language/ind-util.el" (18088 55109))
;;; Generated autoloads from language/ind-util.el
-(autoload (quote indian-compose-region) "ind-util" "\
+(autoload 'indian-compose-region "ind-util" "\
Compose the region according to `composition-function-table'.
\(fn FROM TO)" t nil)
-(autoload (quote indian-compose-string) "ind-util" "\
+(autoload 'indian-compose-string "ind-util" "\
Not documented
\(fn STRING)" nil nil)
-(autoload (quote in-is13194-post-read-conversion) "ind-util" "\
+(autoload 'in-is13194-post-read-conversion "ind-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote in-is13194-pre-write-conversion) "ind-util" "\
+(autoload 'in-is13194-pre-write-conversion "ind-util" "\
Not documented
\(fn FROM TO)" nil nil)
-(autoload (quote indian-glyph-char) "ind-util" "\
+(autoload 'indian-glyph-char "ind-util" "\
Return character of charset `indian-glyph' made from glyph index INDEX.
The variable `indian-default-script' specifies the script of the glyph.
Optional argument SCRIPT, if non-nil, overrides `indian-default-script'.
@@ -15529,7 +15709,7 @@ See also the function `indian-char-glyph'.
\(fn INDEX &optional SCRIPT)" nil nil)
-(autoload (quote indian-char-glyph) "ind-util" "\
+(autoload 'indian-char-glyph "ind-util" "\
Return information about the glyph code for CHAR of `indian-glyph' charset.
The value is (INDEX . SCRIPT), where INDEX is the glyph index
in the font that Indian script name SCRIPT specifies.
@@ -15541,7 +15721,7 @@ See also the function `indian-glyph-char'.
;;;### (autoloads (inferior-lisp inferior-lisp-prompt inferior-lisp-load-command
;;;;;; inferior-lisp-program inferior-lisp-filter-regexp) "inf-lisp"
-;;;;;; "progmodes/inf-lisp.el" (17842 56332))
+;;;;;; "progmodes/inf-lisp.el" (18088 55117))
;;; Generated autoloads from progmodes/inf-lisp.el
(defvar inferior-lisp-filter-regexp "\\`\\s *\\(:\\(\\w\\|\\s_\\)\\)?\\s *\\'" "\
@@ -15550,12 +15730,12 @@ Input matching this regexp is not saved on the input history in Inferior Lisp
mode. Default is whitespace followed by 0 or 1 single-letter colon-keyword
\(as in :a, :c, etc.)")
-(custom-autoload (quote inferior-lisp-filter-regexp) "inf-lisp" t)
+(custom-autoload 'inferior-lisp-filter-regexp "inf-lisp" t)
(defvar inferior-lisp-program "lisp" "\
*Program name for invoking an inferior Lisp in Inferior Lisp mode.")
-(custom-autoload (quote inferior-lisp-program) "inf-lisp" t)
+(custom-autoload 'inferior-lisp-program "inf-lisp" t)
(defvar inferior-lisp-load-command "(load \"%s\")\n" "\
*Format-string for building a Lisp expression to load a file.
@@ -15566,7 +15746,7 @@ The string \"(progn (load \\\"%s\\\" :verbose nil :print t) (values))\\n\"
produces cosmetically superior output for this application,
but it works only in Common Lisp.")
-(custom-autoload (quote inferior-lisp-load-command) "inf-lisp" t)
+(custom-autoload 'inferior-lisp-load-command "inf-lisp" t)
(defvar inferior-lisp-prompt "^[^> \n]*>+:? *" "\
Regexp to recognize prompts in the Inferior Lisp mode.
@@ -15584,12 +15764,12 @@ kcl: \"^>+ *\"
This is a fine thing to set in your .emacs file or through Custom.")
-(custom-autoload (quote inferior-lisp-prompt) "inf-lisp" t)
+(custom-autoload 'inferior-lisp-prompt "inf-lisp" t)
-(defvar inferior-lisp-mode-hook (quote nil) "\
+(defvar inferior-lisp-mode-hook 'nil "\
*Hook for customising Inferior Lisp mode.")
-(autoload (quote inferior-lisp) "inf-lisp" "\
+(autoload 'inferior-lisp "inf-lisp" "\
Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'.
If there is a process already running in `*inferior-lisp*', just switch
to that buffer.
@@ -15601,24 +15781,24 @@ of `inferior-lisp-program'). Runs the hooks from
\(fn CMD)" t nil)
(add-hook 'same-window-buffer-names "*inferior-lisp*")
-(defalias (quote run-lisp) (quote inferior-lisp))
+(defalias 'run-lisp 'inferior-lisp)
;;;***
;;;### (autoloads (Info-speedbar-browser Info-goto-emacs-key-command-node
;;;;;; Info-goto-emacs-command-node Info-mode info-apropos Info-index
;;;;;; Info-directory Info-on-current-buffer info-standalone info-emacs-manual
-;;;;;; info info-other-window) "info" "info.el" (18006 55795))
+;;;;;; info info-other-window) "info" "info.el" (18132 64031))
;;; Generated autoloads from info.el
-(autoload (quote info-other-window) "info" "\
+(autoload 'info-other-window "info" "\
Like `info' but show the Info buffer in another window.
\(fn &optional FILE-OR-NODE)" t nil)
(add-hook 'same-window-regexps "\\*info\\*\\(\\|<[0-9]+>\\)")
(put 'info 'info-file "emacs")
-(autoload (quote info) "info" "\
+(autoload 'info "info" "\
Enter Info, the documentation browser.
Optional argument FILE-OR-NODE specifies the file to examine;
the default is the top-level directory of Info.
@@ -15640,31 +15820,31 @@ in all the directories in that path.
\(fn &optional FILE-OR-NODE BUFFER)" t nil)
-(autoload (quote info-emacs-manual) "info" "\
+(autoload 'info-emacs-manual "info" "\
Display the Emacs manual in Info mode.
\(fn)" t nil)
-(autoload (quote info-standalone) "info" "\
+(autoload 'info-standalone "info" "\
Run Emacs as a standalone Info reader.
Usage: emacs -f info-standalone [filename]
In standalone mode, \\<Info-mode-map>\\[Info-exit] exits Emacs itself.
\(fn)" nil nil)
-(autoload (quote Info-on-current-buffer) "info" "\
+(autoload 'Info-on-current-buffer "info" "\
Use Info mode to browse the current Info buffer.
With a prefix arg, this queries for the node name to visit first;
otherwise, that defaults to `Top'.
\(fn &optional NODENAME)" t nil)
-(autoload (quote Info-directory) "info" "\
+(autoload 'Info-directory "info" "\
Go to the Info directory node.
\(fn)" t nil)
-(autoload (quote Info-index) "info" "\
+(autoload 'Info-index "info" "\
Look up a string TOPIC in the index for this manual and go to that entry.
If there are no exact matches to the specified topic, this chooses
the first match which is a case-insensitive substring of a topic.
@@ -15673,13 +15853,13 @@ Give an empty topic name to go to the Index node itself.
\(fn TOPIC)" t nil)
-(autoload (quote info-apropos) "info" "\
+(autoload 'info-apropos "info" "\
Grovel indices of all known Info files on your system for STRING.
Build a menu of the possible matches.
\(fn STRING)" t nil)
-(autoload (quote Info-mode) "info" "\
+(autoload 'Info-mode "info" "\
Info mode provides commands for browsing through the Info documentation tree.
Documentation in Info is divided into \"nodes\", each of which discusses
one topic and contains references to other nodes which discuss related
@@ -15744,7 +15924,7 @@ Advanced commands:
\(fn)" nil nil)
(put 'Info-goto-emacs-command-node 'info-file "emacs")
-(autoload (quote Info-goto-emacs-command-node) "info" "\
+(autoload 'Info-goto-emacs-command-node "info" "\
Go to the Info node in the Emacs manual for command COMMAND.
The command is found by looking up in Emacs manual's indices
or in another manual found via COMMAND's `info-file' property or
@@ -15754,7 +15934,7 @@ COMMAND must be a symbol or string.
\(fn COMMAND)" t nil)
(put 'Info-goto-emacs-key-command-node 'info-file "emacs")
-(autoload (quote Info-goto-emacs-key-command-node) "info" "\
+(autoload 'Info-goto-emacs-key-command-node "info" "\
Go to the node in the Emacs manual which describes the command bound to KEY.
KEY is a string.
Interactively, if the binding is `execute-extended-command', a command is read.
@@ -15764,7 +15944,7 @@ the variable `Info-file-list-for-emacs'.
\(fn KEY)" t nil)
-(autoload (quote Info-speedbar-browser) "info" "\
+(autoload 'Info-speedbar-browser "info" "\
Initialize speedbar to display an Info node browser.
This will add a speedbar major display mode.
@@ -15774,10 +15954,10 @@ This will add a speedbar major display mode.
;;;### (autoloads (info-complete-file info-complete-symbol info-lookup-file
;;;;;; info-lookup-symbol info-lookup-reset) "info-look" "info-look.el"
-;;;;;; (17878 61008))
+;;;;;; (18120 34749))
;;; Generated autoloads from info-look.el
-(autoload (quote info-lookup-reset) "info-look" "\
+(autoload 'info-lookup-reset "info-look" "\
Throw away all cached data.
This command is useful if the user wants to start at the beginning without
quitting Emacs, for example, after some Info documents were updated on the
@@ -15786,7 +15966,7 @@ system.
\(fn)" t nil)
(put 'info-lookup-symbol 'info-file "emacs")
-(autoload (quote info-lookup-symbol) "info-look" "\
+(autoload 'info-lookup-symbol "info-look" "\
Display the definition of SYMBOL, as found in the relevant manual.
When this command is called interactively, it reads SYMBOL from the
minibuffer. In the minibuffer, use M-n to yank the default argument
@@ -15798,7 +15978,7 @@ With prefix arg a query for the symbol help mode is offered.
\(fn SYMBOL &optional MODE)" t nil)
(put 'info-lookup-file 'info-file "emacs")
-(autoload (quote info-lookup-file) "info-look" "\
+(autoload 'info-lookup-file "info-look" "\
Display the documentation of a file.
When this command is called interactively, it reads FILE from the minibuffer.
In the minibuffer, use M-n to yank the default file name
@@ -15809,12 +15989,12 @@ With prefix arg a query for the file help mode is offered.
\(fn FILE &optional MODE)" t nil)
-(autoload (quote info-complete-symbol) "info-look" "\
+(autoload 'info-complete-symbol "info-look" "\
Perform completion on symbol preceding point.
\(fn &optional MODE)" t nil)
-(autoload (quote info-complete-file) "info-look" "\
+(autoload 'info-complete-file "info-look" "\
Perform completion on file preceding point.
\(fn &optional MODE)" t nil)
@@ -15822,21 +16002,21 @@ Perform completion on file preceding point.
;;;***
;;;### (autoloads (info-xref-check-all-custom info-xref-check-all
-;;;;;; info-xref-check) "info-xref" "info-xref.el" (17842 58279))
+;;;;;; info-xref-check) "info-xref" "info-xref.el" (18088 55085))
;;; Generated autoloads from info-xref.el
-(autoload (quote info-xref-check) "info-xref" "\
+(autoload 'info-xref-check "info-xref" "\
Check external references in FILENAME, an info document.
\(fn FILENAME)" t nil)
-(autoload (quote info-xref-check-all) "info-xref" "\
+(autoload 'info-xref-check-all "info-xref" "\
Check external references in all info documents in the usual path.
The usual path is `Info-directory-list' and `Info-additional-directory-list'.
\(fn)" t nil)
-(autoload (quote info-xref-check-all-custom) "info-xref" "\
+(autoload 'info-xref-check-all-custom "info-xref" "\
Check info references in all customize groups and variables.
`custom-manual' and `info-link' entries in the `custom-links' list are checked.
@@ -15849,15 +16029,15 @@ quite a while.
;;;***
;;;### (autoloads (batch-info-validate Info-validate Info-split Info-tagify)
-;;;;;; "informat" "informat.el" (17842 58279))
+;;;;;; "informat" "informat.el" (18088 55086))
;;; Generated autoloads from informat.el
-(autoload (quote Info-tagify) "informat" "\
+(autoload 'Info-tagify "informat" "\
Create or update Info file tag table in current buffer or in a region.
\(fn &optional INPUT-BUFFER-NAME)" t nil)
-(autoload (quote Info-split) "informat" "\
+(autoload 'Info-split "informat" "\
Split an info file into an indirect file plus bounded-size subfiles.
Each subfile will be up to 50,000 characters plus one node.
@@ -15872,13 +16052,13 @@ contains just the tag table and a directory of subfiles.
\(fn)" t nil)
-(autoload (quote Info-validate) "informat" "\
+(autoload 'Info-validate "informat" "\
Check current buffer for validity as an Info file.
Check that every node pointer points to an existing node.
\(fn)" t nil)
-(autoload (quote batch-info-validate) "informat" "\
+(autoload 'batch-info-validate "informat" "\
Runs `Info-validate' on the files remaining on the command line.
Must be used only with -batch, and kills Emacs on completion.
Each file will be processed even if an error occurred previously.
@@ -15888,33 +16068,66 @@ For example, invoke \"emacs -batch -f batch-info-validate $info/ ~/*.info\"
;;;***
+;;;### (autoloads (isearch-buffers-minor-mode) "isearch-multi" "isearch-multi.el"
+;;;;;; (18210 13714))
+;;; Generated autoloads from isearch-multi.el
+
+(defvar isearch-buffers-current-buffer nil "\
+The buffer where the search is currently searching.
+The value is nil when the search still is in the initial buffer.")
+
+(defvar isearch-buffers-next-buffer-function nil "\
+Function to call to get the next buffer to search.
+
+When this variable is set to a function that returns a buffer, then
+after typing another C-s or C-r at a failing search, the search goes
+to the next buffer in the series and continues searching for the
+next occurrence.
+
+The first argument of this function is the current buffer where the
+search is currently searching. It defines the base buffer relative to
+which this function should find the next buffer. When the isearch
+direction is backward (when isearch-forward is nil), this function
+should return the previous buffer to search. If the second argument of
+this function WRAP is non-nil, then it should return the first buffer
+in the series; and for the backward search, it should return the last
+buffer in the series.")
+
+(autoload 'isearch-buffers-minor-mode "isearch-multi" "\
+Minor mode for using isearch to search through multiple buffers.
+With arg, turn isearch-buffers minor mode on if arg is positive, off otherwise.
+
+\(fn &optional ARG)" t nil)
+
+;;;***
+
;;;### (autoloads (isearch-process-search-multibyte-characters isearch-toggle-input-method
;;;;;; isearch-toggle-specified-input-method) "isearch-x" "international/isearch-x.el"
-;;;;;; (17903 2305))
+;;;;;; (18088 55107))
;;; Generated autoloads from international/isearch-x.el
-(autoload (quote isearch-toggle-specified-input-method) "isearch-x" "\
+(autoload 'isearch-toggle-specified-input-method "isearch-x" "\
Select an input method and turn it on in interactive search.
\(fn)" t nil)
-(autoload (quote isearch-toggle-input-method) "isearch-x" "\
+(autoload 'isearch-toggle-input-method "isearch-x" "\
Toggle input method in interactive search.
\(fn)" t nil)
-(autoload (quote isearch-process-search-multibyte-characters) "isearch-x" "\
+(autoload 'isearch-process-search-multibyte-characters "isearch-x" "\
Not documented
\(fn LAST-CHAR)" nil nil)
;;;***
-;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (17918
-;;;;;; 44913))
+;;;### (autoloads (isearchb-activate) "isearchb" "isearchb.el" (18088
+;;;;;; 55086))
;;; Generated autoloads from isearchb.el
-(autoload (quote isearchb-activate) "isearchb" "\
+(autoload 'isearchb-activate "isearchb" "\
Active isearchb mode for subsequent alphanumeric keystrokes.
Executing this command again will terminate the search; or, if
the search has not yet begun, will toggle to the last buffer
@@ -15927,83 +16140,83 @@ accessed via isearchb.
;;;### (autoloads (iso-cvt-define-menu iso-cvt-write-only iso-cvt-read-only
;;;;;; iso-sgml2iso iso-iso2sgml iso-iso2duden iso-iso2gtex iso-gtex2iso
;;;;;; iso-tex2iso iso-iso2tex iso-german iso-spanish) "iso-cvt"
-;;;;;; "international/iso-cvt.el" (17992 30878))
+;;;;;; "international/iso-cvt.el" (18088 55107))
;;; Generated autoloads from international/iso-cvt.el
-(autoload (quote iso-spanish) "iso-cvt" "\
+(autoload 'iso-spanish "iso-cvt" "\
Translate net conventions for Spanish to ISO 8859-1.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-german) "iso-cvt" "\
+(autoload 'iso-german "iso-cvt" "\
Translate net conventions for German to ISO 8859-1.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-iso2tex) "iso-cvt" "\
+(autoload 'iso-iso2tex "iso-cvt" "\
Translate ISO 8859-1 characters to TeX sequences.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-tex2iso) "iso-cvt" "\
+(autoload 'iso-tex2iso "iso-cvt" "\
Translate TeX sequences to ISO 8859-1 characters.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-gtex2iso) "iso-cvt" "\
+(autoload 'iso-gtex2iso "iso-cvt" "\
Translate German TeX sequences to ISO 8859-1 characters.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-iso2gtex) "iso-cvt" "\
+(autoload 'iso-iso2gtex "iso-cvt" "\
Translate ISO 8859-1 characters to German TeX sequences.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-iso2duden) "iso-cvt" "\
+(autoload 'iso-iso2duden "iso-cvt" "\
Translate ISO 8859-1 characters to German TeX sequences.
The region between FROM and TO is translated using the table TRANS-TAB.
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-iso2sgml) "iso-cvt" "\
+(autoload 'iso-iso2sgml "iso-cvt" "\
Translate ISO 8859-1 characters in the region to SGML entities.
The entities used are from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\".
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-sgml2iso) "iso-cvt" "\
+(autoload 'iso-sgml2iso "iso-cvt" "\
Translate SGML entities in the region to ISO 8859-1 characters.
The entities used are from \"ISO 8879:1986//ENTITIES Added Latin 1//EN\".
Optional arg BUFFER is ignored (for use in `format-alist').
\(fn FROM TO &optional BUFFER)" t nil)
-(autoload (quote iso-cvt-read-only) "iso-cvt" "\
+(autoload 'iso-cvt-read-only "iso-cvt" "\
Warn that format is read-only.
\(fn &rest IGNORE)" t nil)
-(autoload (quote iso-cvt-write-only) "iso-cvt" "\
+(autoload 'iso-cvt-write-only "iso-cvt" "\
Warn that format is write-only.
\(fn &rest IGNORE)" t nil)
-(autoload (quote iso-cvt-define-menu) "iso-cvt" "\
+(autoload 'iso-cvt-define-menu "iso-cvt" "\
Add submenus to the File menu, to convert to and from various formats.
\(fn)" t nil)
@@ -16011,7 +16224,7 @@ Add submenus to the File menu, to convert to and from various formats.
;;;***
;;;### (autoloads nil "iso-transl" "international/iso-transl.el"
-;;;;;; (17842 54888))
+;;;;;; (18088 55107))
;;; Generated autoloads from international/iso-transl.el
(or key-translation-map (setq key-translation-map (make-sparse-keymap)))
(define-key key-translation-map "\C-x8" 'iso-transl-ctl-x-8-map)
@@ -16024,7 +16237,7 @@ Add submenus to the File menu, to convert to and from various formats.
;;;;;; ispell-region ispell-change-dictionary ispell-kill-ispell
;;;;;; ispell-help ispell-pdict-save ispell-word ispell-local-dictionary-alist
;;;;;; ispell-personal-dictionary) "ispell" "textmodes/ispell.el"
-;;;;;; (18006 55797))
+;;;;;; (18200 51267))
;;; Generated autoloads from textmodes/ispell.el
(put 'ispell-check-comments 'safe-local-variable (lambda (a) (memq a '(nil t exclusive))))
@@ -16033,7 +16246,7 @@ Add submenus to the File menu, to convert to and from various formats.
If nil, the default personal dictionary, \"~/.ispell_DICTNAME\" is used,
where DICTNAME is the name of your default dictionary.")
-(custom-autoload (quote ispell-personal-dictionary) "ispell" t)
+(custom-autoload 'ispell-personal-dictionary "ispell" t)
(put 'ispell-local-dictionary 'safe-local-variable 'string-or-null-p)
(defvar ispell-local-dictionary-alist nil "\
@@ -16044,19 +16257,19 @@ To make permanent changes to your dictionary definitions, you
will need to make your changes in this variable, save, and then
re-start Emacs.")
-(custom-autoload (quote ispell-local-dictionary-alist) "ispell" t)
+(custom-autoload 'ispell-local-dictionary-alist "ispell" t)
-(setq ispell-dictionary-alist-1 (quote ((nil "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("american" "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("brasileiro" "[A-Z\301\311\315\323\332\300\310\314\322\331\303\325\307\334\302\312\324a-z\341\351\355\363\372\340\350\354\362\371\343\365\347\374\342\352\364]" "[^A-Z\301\311\315\323\332\300\310\314\322\331\303\325\307\334\302\312\324a-z\341\351\355\363\372\340\350\354\362\371\343\365\347\374\342\352\364]" "[']" nil nil nil iso-8859-1) ("british" "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("castellano" "[A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[^A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[-]" nil ("-B") "~tex" iso-8859-1) ("castellano8" "[A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[^A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[-]" nil ("-B" "-d" "castellano") "~latin1" iso-8859-1))))
+(setq ispell-dictionary-alist-1 '((nil "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("american" "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("brasileiro" "[A-Z\301\311\315\323\332\300\310\314\322\331\303\325\307\334\302\312\324a-z\341\351\355\363\372\340\350\354\362\371\343\365\347\374\342\352\364]" "[^A-Z\301\311\315\323\332\300\310\314\322\331\303\325\307\334\302\312\324a-z\341\351\355\363\372\340\350\354\362\371\343\365\347\374\342\352\364]" "[']" nil nil nil iso-8859-1) ("british" "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1) ("castellano" "[A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[^A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[-]" nil ("-B") "~tex" iso-8859-1) ("castellano8" "[A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[^A-Z\301\311\315\321\323\332\334a-z\341\351\355\361\363\372\374]" "[-]" nil ("-B" "-d" "castellano") "~latin1" iso-8859-1)))
-(setq ispell-dictionary-alist-2 (quote (("czech" "[A-Za-z\301\311\314\315\323\332\331\335\256\251\310\330\317\253\322\341\351\354\355\363\372\371\375\276\271\350\370\357\273\362]" "[^A-Za-z\301\311\314\315\323\332\331\335\256\251\310\330\317\253\322\341\351\354\355\363\372\371\375\276\271\350\370\357\273\362]" "" nil ("-B") nil iso-8859-2) ("dansk" "[A-Z\306\330\305a-z\346\370\345]" "[^A-Z\306\330\305a-z\346\370\345]" "[']" nil ("-C") nil iso-8859-1) ("deutsch" "[a-zA-Z\"]" "[^a-zA-Z\"]" "[']" t ("-C") "~tex" iso-8859-1) ("deutsch8" "[a-zA-Z\304\326\334\344\366\337\374]" "[^a-zA-Z\304\326\334\344\366\337\374]" "[']" t ("-C" "-d" "deutsch") "~latin1" iso-8859-1) ("english" "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1))))
+(setq ispell-dictionary-alist-2 '(("czech" "[A-Za-z\301\311\314\315\323\332\331\335\256\251\310\330\317\253\322\341\351\354\355\363\372\371\375\276\271\350\370\357\273\362]" "[^A-Za-z\301\311\314\315\323\332\331\335\256\251\310\330\317\253\322\341\351\354\355\363\372\371\375\276\271\350\370\357\273\362]" "" nil ("-B") nil iso-8859-2) ("dansk" "[A-Z\306\330\305a-z\346\370\345]" "[^A-Z\306\330\305a-z\346\370\345]" "[']" nil ("-C") nil iso-8859-1) ("deutsch" "[a-zA-Z\"]" "[^a-zA-Z\"]" "[']" t ("-C") "~tex" iso-8859-1) ("deutsch8" "[a-zA-Z\304\326\334\344\366\337\374]" "[^a-zA-Z\304\326\334\344\366\337\374]" "[']" t ("-C" "-d" "deutsch") "~latin1" iso-8859-1) ("english" "[A-Za-z]" "[^A-Za-z]" "[']" nil ("-B") nil iso-8859-1)))
-(setq ispell-dictionary-alist-3 (quote (("esperanto" "[A-Za-z\246\254\266\274\306\330\335\336\346\370\375\376]" "[^A-Za-z\246\254\266\274\306\330\335\336\346\370\375\376]" "[-']" t ("-C") "~latin3" iso-8859-3) ("esperanto-tex" "[A-Za-z^\\]" "[^A-Za-z^\\]" "[-'`\"]" t ("-C" "-d" "esperanto") "~tex" iso-8859-3) ("francais7" "[A-Za-z]" "[^A-Za-z]" "[`'^-]" t nil nil iso-8859-1) ("francais" "[A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374]" "[^A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374]" "[-'.@]" t nil "~list" iso-8859-1) ("francais-tex" "[A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374\\]" "[^A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374\\]" "[-'^`\".@]" t nil "~tex" iso-8859-1))))
+(setq ispell-dictionary-alist-3 '(("esperanto" "[A-Za-z\246\254\266\274\306\330\335\336\346\370\375\376]" "[^A-Za-z\246\254\266\274\306\330\335\336\346\370\375\376]" "[-']" t ("-C") "~latin3" iso-8859-3) ("esperanto-tex" "[A-Za-z^\\]" "[^A-Za-z^\\]" "[-'`\"]" t ("-C" "-d" "esperanto") "~tex" iso-8859-3) ("francais7" "[A-Za-z]" "[^A-Za-z]" "[`'^-]" t nil nil iso-8859-1) ("francais" "[A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374]" "[^A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374]" "[-'.@]" t nil "~list" iso-8859-1) ("francais-tex" "[A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374\\]" "[^A-Za-z\300\302\306\307\310\311\312\313\316\317\324\331\333\334\340\342\347\350\351\352\353\356\357\364\371\373\374\\]" "[-'^`\".@]" t nil "~tex" iso-8859-1)))
-(setq ispell-dictionary-alist-4 (quote (("german" "[a-zA-Z\"]" "[^a-zA-Z\"]" "[']" t ("-C") "~tex" iso-8859-1) ("german8" "[a-zA-Z\304\326\334\344\366\337\374]" "[^a-zA-Z\304\326\334\344\366\337\374]" "[']" t ("-C" "-d" "german") "~latin1" iso-8859-1) ("italiano" "[A-Z\300\301\310\311\314\315\322\323\331\332a-z\340\341\350\351\354\355\363\371\372]" "[^A-Z\300\301\310\311\314\315\322\323\331\332a-z\340\341\350\351\354\355\363\371\372]" "[-.]" nil ("-B" "-d" "italian") "~tex" iso-8859-1) ("nederlands" "[A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[^A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[']" t ("-C") nil iso-8859-1) ("nederlands8" "[A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[^A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[']" t ("-C") nil iso-8859-1))))
+(setq ispell-dictionary-alist-4 '(("german" "[a-zA-Z\"]" "[^a-zA-Z\"]" "[']" t ("-C") "~tex" iso-8859-1) ("german8" "[a-zA-Z\304\326\334\344\366\337\374]" "[^a-zA-Z\304\326\334\344\366\337\374]" "[']" t ("-C" "-d" "german") "~latin1" iso-8859-1) ("italiano" "[A-Z\300\301\310\311\314\315\322\323\331\332a-z\340\341\350\351\354\355\363\371\372]" "[^A-Z\300\301\310\311\314\315\322\323\331\332a-z\340\341\350\351\354\355\363\371\372]" "[-.]" nil ("-B" "-d" "italian") "~tex" iso-8859-1) ("nederlands" "[A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[^A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[']" t ("-C") nil iso-8859-1) ("nederlands8" "[A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[^A-Za-z\300\301\302\303\304\305\307\310\311\312\313\314\315\316\317\322\323\324\325\326\331\332\333\334\340\341\342\343\344\345\347\350\351\352\353\354\355\356\357\361\362\363\364\365\366\371\372\373\374]" "[']" t ("-C") nil iso-8859-1)))
-(setq ispell-dictionary-alist-5 (quote (("norsk" "[A-Za-z\305\306\307\310\311\322\324\330\345\346\347\350\351\362\364\370]" "[^A-Za-z\305\306\307\310\311\322\324\330\345\346\347\350\351\362\364\370]" "[\"]" nil nil "~list" iso-8859-1) ("norsk7-tex" "[A-Za-z{}\\'^`]" "[^A-Za-z{}\\'^`]" "[\"]" nil ("-d" "norsk") "~plaintex" iso-8859-1) ("polish" "[A-Za-z\241\243\246\254\257\261\263\266\274\277\306\312\321\323\346\352\361\363]" "[^A-Za-z\241\243\246\254\257\261\263\266\274\277\306\312\321\323\346\352\361\363]" "[.]" nil nil nil iso-8859-2) ("portugues" "[a-zA-Z\301\302\311\323\340\341\342\351\352\355\363\343\372]" "[^a-zA-Z\301\302\311\323\340\341\342\351\352\355\363\343\372]" "[']" t ("-C") "~latin1" iso-8859-1))))
+(setq ispell-dictionary-alist-5 '(("norsk" "[A-Za-z\305\306\307\310\311\322\324\330\345\346\347\350\351\362\364\370]" "[^A-Za-z\305\306\307\310\311\322\324\330\345\346\347\350\351\362\364\370]" "[\"]" nil nil "~list" iso-8859-1) ("norsk7-tex" "[A-Za-z{}\\'^`]" "[^A-Za-z{}\\'^`]" "[\"]" nil ("-d" "norsk") "~plaintex" iso-8859-1) ("polish" "[A-Za-z\241\243\246\254\257\261\263\266\274\277\306\312\321\323\346\352\361\363]" "[^A-Za-z\241\243\246\254\257\261\263\266\274\277\306\312\321\323\346\352\361\363]" "[.]" nil nil nil iso-8859-2) ("portugues" "[a-zA-Z\301\302\311\323\340\341\342\351\352\355\363\343\372]" "[^a-zA-Z\301\302\311\323\340\341\342\351\352\355\363\343\372]" "[']" t ("-C") "~latin1" iso-8859-1)))
-(setq ispell-dictionary-alist-6 (quote (("russian" "[\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]" "[^\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]" "" nil nil nil koi8-r) ("russianw" "[\300\301\302\303\304\305\250\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\334\333\332\335\336\337\340\341\342\343\344\345\270\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\374\373\372\375\376\377]" "[^\300\301\302\303\304\305\250\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\334\333\332\335\336\337\340\341\342\343\344\345\270\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\374\373\372\375\376\377]" "" nil nil nil windows-1251) ("slovak" "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "" nil ("-B") nil iso-8859-2) ("slovenian" "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "" nil ("-B" "-d" "slovenian") nil iso-8859-2) ("svenska" "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" "[']" nil ("-C") "~list" iso-8859-1))))
+(setq ispell-dictionary-alist-6 '(("russian" "[\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]" "[^\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321]" "" nil nil nil koi8-r) ("russianw" "[\300\301\302\303\304\305\250\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\334\333\332\335\336\337\340\341\342\343\344\345\270\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\374\373\372\375\376\377]" "[^\300\301\302\303\304\305\250\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\334\333\332\335\336\337\340\341\342\343\344\345\270\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\374\373\372\375\376\377]" "" nil nil nil windows-1251) ("slovak" "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "" nil ("-B") nil iso-8859-2) ("slovenian" "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" "" nil ("-B" "-d" "slovenian") nil iso-8859-2) ("svenska" "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" "[']" nil ("-C") "~list" iso-8859-1)))
(defvar ispell-dictionary-alist (append ispell-dictionary-alist-1 ispell-dictionary-alist-2 ispell-dictionary-alist-3 ispell-dictionary-alist-4 ispell-dictionary-alist-5 ispell-dictionary-alist-6) "\
An alist of dictionaries and their associated parameters.
@@ -16119,15 +16332,15 @@ Spelling menu for XEmacs.
If nil when package is loaded, a standard menu will be set,
and added as a submenu of the \"Edit\" menu.")
-(defvar ispell-menu-map-needed (and (not ispell-menu-map) (not (featurep (quote xemacs))) (quote reload)))
+(defvar ispell-menu-map-needed (and (not ispell-menu-map) (not (featurep 'xemacs)) 'reload))
-(if ispell-menu-map-needed (progn (setq ispell-menu-map (make-sparse-keymap "Spell")) (define-key ispell-menu-map [ispell-change-dictionary] (quote (menu-item "Change Dictionary..." ispell-change-dictionary :help "Supply explicit dictionary file name"))) (define-key ispell-menu-map [ispell-kill-ispell] (quote (menu-item "Kill Process" ispell-kill-ispell :enable (and (boundp (quote ispell-process)) ispell-process (eq (ispell-process-status) (quote run))) :help "Terminate Ispell subprocess"))) (define-key ispell-menu-map [ispell-pdict-save] (quote (menu-item "Save Dictionary" (lambda nil (interactive) (ispell-pdict-save t t)) :help "Save personal dictionary"))) (define-key ispell-menu-map [ispell-customize] (quote (menu-item "Customize..." (lambda nil (interactive) (customize-group (quote ispell))) :help "Customize spell checking options"))) (define-key ispell-menu-map [ispell-help] (quote (menu-item "Help" (lambda nil (interactive) (describe-function (quote ispell-help))) :help "Show standard Ispell keybindings and commands"))) (define-key ispell-menu-map [flyspell-mode] (quote (menu-item "Automatic spell checking (Flyspell)" flyspell-mode :help "Check spelling while you edit the text" :button (:toggle bound-and-true-p flyspell-mode)))) (define-key ispell-menu-map [ispell-complete-word] (quote (menu-item "Complete Word" ispell-complete-word :help "Complete word at cursor using dictionary"))) (define-key ispell-menu-map [ispell-complete-word-interior-frag] (quote (menu-item "Complete Word Fragment" ispell-complete-word-interior-frag :help "Complete word fragment at cursor")))))
+(if ispell-menu-map-needed (progn (setq ispell-menu-map (make-sparse-keymap "Spell")) (define-key ispell-menu-map [ispell-change-dictionary] '(menu-item "Change Dictionary..." ispell-change-dictionary :help "Supply explicit dictionary file name")) (define-key ispell-menu-map [ispell-kill-ispell] '(menu-item "Kill Process" ispell-kill-ispell :enable (and (boundp 'ispell-process) ispell-process (eq (ispell-process-status) 'run)) :help "Terminate Ispell subprocess")) (define-key ispell-menu-map [ispell-pdict-save] '(menu-item "Save Dictionary" (lambda nil (interactive) (ispell-pdict-save t t)) :help "Save personal dictionary")) (define-key ispell-menu-map [ispell-customize] '(menu-item "Customize..." (lambda nil (interactive) (customize-group 'ispell)) :help "Customize spell checking options")) (define-key ispell-menu-map [ispell-help] '(menu-item "Help" (lambda nil (interactive) (describe-function 'ispell-help)) :help "Show standard Ispell keybindings and commands")) (define-key ispell-menu-map [flyspell-mode] '(menu-item "Automatic spell checking (Flyspell)" flyspell-mode :help "Check spelling while you edit the text" :button (:toggle bound-and-true-p flyspell-mode))) (define-key ispell-menu-map [ispell-complete-word] '(menu-item "Complete Word" ispell-complete-word :help "Complete word at cursor using dictionary")) (define-key ispell-menu-map [ispell-complete-word-interior-frag] '(menu-item "Complete Word Fragment" ispell-complete-word-interior-frag :help "Complete word fragment at cursor"))))
-(if ispell-menu-map-needed (progn (define-key ispell-menu-map [ispell-continue] (quote (menu-item "Continue Spell-Checking" ispell-continue :enable (and (boundp (quote ispell-region-end)) (marker-position ispell-region-end) (equal (marker-buffer ispell-region-end) (current-buffer))) :help "Continue spell checking last region"))) (define-key ispell-menu-map [ispell-word] (quote (menu-item "Spell-Check Word" ispell-word :help "Spell-check word at cursor"))) (define-key ispell-menu-map [ispell-comments-and-strings] (quote (menu-item "Spell-Check Comments" ispell-comments-and-strings :help "Spell-check only comments and strings")))))
+(if ispell-menu-map-needed (progn (define-key ispell-menu-map [ispell-continue] '(menu-item "Continue Spell-Checking" ispell-continue :enable (and (boundp 'ispell-region-end) (marker-position ispell-region-end) (equal (marker-buffer ispell-region-end) (current-buffer))) :help "Continue spell checking last region")) (define-key ispell-menu-map [ispell-word] '(menu-item "Spell-Check Word" ispell-word :help "Spell-check word at cursor")) (define-key ispell-menu-map [ispell-comments-and-strings] '(menu-item "Spell-Check Comments" ispell-comments-and-strings :help "Spell-check only comments and strings"))))
-(if ispell-menu-map-needed (progn (define-key ispell-menu-map [ispell-region] (quote (menu-item "Spell-Check Region" ispell-region :enable mark-active :help "Spell-check text in marked region"))) (define-key ispell-menu-map [ispell-message] (quote (menu-item "Spell-Check Message" ispell-message :visible (eq major-mode (quote mail-mode)) :help "Skip headers and included message text"))) (define-key ispell-menu-map [ispell-buffer] (quote (menu-item "Spell-Check Buffer" ispell-buffer :help "Check spelling of selected buffer"))) (fset (quote ispell-menu-map) (symbol-value (quote ispell-menu-map)))))
+(if ispell-menu-map-needed (progn (define-key ispell-menu-map [ispell-region] '(menu-item "Spell-Check Region" ispell-region :enable mark-active :help "Spell-check text in marked region")) (define-key ispell-menu-map [ispell-message] '(menu-item "Spell-Check Message" ispell-message :visible (eq major-mode 'mail-mode) :help "Skip headers and included message text")) (define-key ispell-menu-map [ispell-buffer] '(menu-item "Spell-Check Buffer" ispell-buffer :help "Check spelling of selected buffer")) (fset 'ispell-menu-map (symbol-value 'ispell-menu-map))))
-(defvar ispell-skip-region-alist (quote ((ispell-words-keyword forward-line) (ispell-dictionary-keyword forward-line) (ispell-pdict-keyword forward-line) (ispell-parsing-keyword forward-line) ("^---*BEGIN PGP [A-Z ]*--*" . "^---*END PGP [A-Z ]*--*") ("^begin [0-9][0-9][0-9] [^ ]+$" . "\nend\n") ("^%!PS-Adobe-[123].0" . "\n%%EOF\n") ("^---* \\(Start of \\)?[Ff]orwarded [Mm]essage" . "^---* End of [Ff]orwarded [Mm]essage") ("\\(--+\\|_+\\|\\(/\\w\\|\\(\\(\\w\\|[-_]\\)+[.:@]\\)\\)\\(\\w\\|[-_]\\)*\\([.:/@]+\\(\\w\\|[-_~=?&]\\)+\\)+\\)"))) "\
+(defvar ispell-skip-region-alist '((ispell-words-keyword forward-line) (ispell-dictionary-keyword forward-line) (ispell-pdict-keyword forward-line) (ispell-parsing-keyword forward-line) ("^---*BEGIN PGP [A-Z ]*--*" . "^---*END PGP [A-Z ]*--*") ("^begin [0-9][0-9][0-9] [^ ]+$" . "\nend\n") ("^%!PS-Adobe-[123].0" . "\n%%EOF\n") ("^---* \\(Start of \\)?[Ff]orwarded [Mm]essage" . "^---* End of [Ff]orwarded [Mm]essage") ("\\(--+\\|_+\\|\\(/\\w\\|\\(\\(\\w\\|[-_]\\)+[.:@]\\)\\)\\(\\w\\|[-_]\\)*\\([.:/@]+\\(\\w\\|[-_~=?&]\\)+\\)+\\)")) "\
Alist expressing beginning and end of regions not to spell check.
The alist key must be a regular expression.
Valid forms include:
@@ -16136,7 +16349,7 @@ Valid forms include:
(KEY REGEXP) - skip to end of REGEXP. REGEXP must be a string.
(KEY FUNCTION ARGS) - FUNCTION called with ARGS returns end of region.")
-(defvar ispell-tex-skip-alists (quote ((("\\\\addcontentsline" ispell-tex-arg-end 2) ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end) ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) ("\\\\bibliographystyle" ispell-tex-arg-end) ("\\\\makebox" ispell-tex-arg-end 0) ("\\\\e?psfig" ispell-tex-arg-end) ("\\\\document\\(class\\|style\\)" . "\\\\begin[ \n]*{[ \n]*document[ \n]*}")) (("\\(figure\\|table\\)\\*?" ispell-tex-arg-end 0) ("list" ispell-tex-arg-end 2) ("program" . "\\\\end[ \n]*{[ \n]*program[ \n]*}") ("verbatim\\*?" . "\\\\end[ \n]*{[ \n]*verbatim\\*?[ \n]*}")))) "\
+(defvar ispell-tex-skip-alists '((("\\\\addcontentsline" ispell-tex-arg-end 2) ("\\\\add\\(tocontents\\|vspace\\)" ispell-tex-arg-end) ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) ("\\\\bibliographystyle" ispell-tex-arg-end) ("\\\\makebox" ispell-tex-arg-end 0) ("\\\\e?psfig" ispell-tex-arg-end) ("\\\\document\\(class\\|style\\)" . "\\\\begin[ \n]*{[ \n]*document[ \n]*}")) (("\\(figure\\|table\\)\\*?" ispell-tex-arg-end 0) ("list" ispell-tex-arg-end 2) ("program" . "\\\\end[ \n]*{[ \n]*program[ \n]*}") ("verbatim\\*?" . "\\\\end[ \n]*{[ \n]*verbatim\\*?[ \n]*}"))) "\
*Lists of regions to be skipped in TeX mode.
First list is used raw.
Second list has key placed inside \\begin{}.
@@ -16144,14 +16357,14 @@ Second list has key placed inside \\begin{}.
Delete or add any regions you want to be automatically selected
for skipping in latex mode.")
-(defvar ispell-html-skip-alists (quote (("<[cC][oO][dD][eE]\\>[^>]*>" "</[cC][oO][dD][eE]*>") ("<[sS][cC][rR][iI][pP][tT]\\>[^>]*>" "</[sS][cC][rR][iI][pP][tT]>") ("<[aA][pP][pP][lL][eE][tT]\\>[^>]*>" "</[aA][pP][pP][lL][eE][tT]>") ("<[vV][eE][rR][bB]\\>[^>]*>" "<[vV][eE][rR][bB]\\>[^>]*>") ("<[tT][tT]/" "/") ("<[^ \n>]" ">") ("&[^ \n;]" "[; \n]"))) "\
+(defvar ispell-html-skip-alists '(("<[cC][oO][dD][eE]\\>[^>]*>" "</[cC][oO][dD][eE]*>") ("<[sS][cC][rR][iI][pP][tT]\\>[^>]*>" "</[sS][cC][rR][iI][pP][tT]>") ("<[aA][pP][pP][lL][eE][tT]\\>[^>]*>" "</[aA][pP][pP][lL][eE][tT]>") ("<[vV][eE][rR][bB]\\>[^>]*>" "<[vV][eE][rR][bB]\\>[^>]*>") ("<[tT][tT]/" "/") ("<[^ \n>]" ">") ("&[^ \n;]" "[; \n]")) "\
*Lists of start and end keys to skip in HTML buffers.
Same format as `ispell-skip-region-alist'
Note - substrings of other matches must come last
(e.g. \"<[tT][tT]/\" and \"<[^ \\t\\n>]\").")
(define-key esc-map "$" 'ispell-word)
-(autoload (quote ispell-word) "ispell" "\
+(autoload 'ispell-word "ispell" "\
Check spelling of word under or before the cursor.
If the word is not found in dictionary, display possible corrections
in a window allowing you to choose one.
@@ -16165,6 +16378,9 @@ when called interactively, non-corrective messages are suppressed.
With a prefix argument (or if CONTINUE is non-nil),
resume interrupted spell-checking of a buffer or region.
+Interactively, in Transient Mark mode when the mark is active, call
+`ispell-region' to check the active region for spelling errors.
+
Word syntax is controlled by the definition of the chosen dictionary,
which is in `ispell-local-dictionary-alist' or `ispell-dictionary-alist'.
@@ -16178,15 +16394,15 @@ nil word is correct or spelling is accepted.
\(\"word\" arg) word is hand entered.
quit spell session exited.
-\(fn &optional FOLLOWING QUIETLY CONTINUE)" t nil)
+\(fn &optional FOLLOWING QUIETLY CONTINUE REGION)" t nil)
-(autoload (quote ispell-pdict-save) "ispell" "\
+(autoload 'ispell-pdict-save "ispell" "\
Check to see if the personal dictionary has been modified.
If so, ask if it needs to be saved.
\(fn &optional NO-QUERY FORCE-SAVE)" t nil)
-(autoload (quote ispell-help) "ispell" "\
+(autoload 'ispell-help "ispell" "\
Display a list of the options available when a misspelling is encountered.
Selections are:
@@ -16212,13 +16428,13 @@ SPC: Accept word this time.
\(fn)" nil nil)
-(autoload (quote ispell-kill-ispell) "ispell" "\
+(autoload 'ispell-kill-ispell "ispell" "\
Kill current Ispell process (so that you may start a fresh one).
With NO-ERROR, just return non-nil if there was no Ispell running.
\(fn &optional NO-ERROR)" t nil)
-(autoload (quote ispell-change-dictionary) "ispell" "\
+(autoload 'ispell-change-dictionary "ispell" "\
Change to dictionary DICT for Ispell.
With a prefix arg, set it \"globally\", for all buffers.
Without a prefix arg, set it \"locally\", just for this buffer.
@@ -16227,29 +16443,29 @@ By just answering RET you can find out what the current dictionary is.
\(fn DICT &optional ARG)" t nil)
-(autoload (quote ispell-region) "ispell" "\
+(autoload 'ispell-region "ispell" "\
Interactively check a region for spelling errors.
Return nil if spell session is quit,
otherwise returns shift offset amount for last line processed.
\(fn REG-START REG-END &optional RECHECKP SHIFT)" t nil)
-(autoload (quote ispell-comments-and-strings) "ispell" "\
+(autoload 'ispell-comments-and-strings "ispell" "\
Check comments and strings in the current buffer for spelling errors.
\(fn)" t nil)
-(autoload (quote ispell-buffer) "ispell" "\
+(autoload 'ispell-buffer "ispell" "\
Check the current buffer for spelling errors interactively.
\(fn)" t nil)
-(autoload (quote ispell-continue) "ispell" "\
+(autoload 'ispell-continue "ispell" "\
Continue a halted spelling session beginning with the current word.
\(fn)" t nil)
-(autoload (quote ispell-complete-word) "ispell" "\
+(autoload 'ispell-complete-word "ispell" "\
Try to complete the word before or under point (see `lookup-words').
If optional INTERIOR-FRAG is non-nil then the word may be a character
sequence inside of a word.
@@ -16258,12 +16474,12 @@ Standard ispell choices are then available.
\(fn &optional INTERIOR-FRAG)" t nil)
-(autoload (quote ispell-complete-word-interior-frag) "ispell" "\
+(autoload 'ispell-complete-word-interior-frag "ispell" "\
Completes word matching character sequence inside a word.
\(fn)" t nil)
-(autoload (quote ispell) "ispell" "\
+(autoload 'ispell "ispell" "\
Interactively check a region or buffer for spelling errors.
If `transient-mark-mode' is on, and a region is active, spell-check
that region. Otherwise spell-check the buffer.
@@ -16275,9 +16491,10 @@ available on the net.
\(fn)" t nil)
-(autoload (quote ispell-minor-mode) "ispell" "\
+(autoload 'ispell-minor-mode "ispell" "\
Toggle Ispell minor mode.
-With prefix arg, turn Ispell minor mode on iff arg is positive.
+With prefix argument ARG, turn Ispell minor mode on if ARG is positive,
+otherwise turn it off.
In Ispell minor mode, pressing SPC or RET
warns you if the previous word is incorrectly spelled.
@@ -16287,7 +16504,7 @@ them into the running ispell process, type \\[ispell-word] SPC.
\(fn &optional ARG)" t nil)
-(autoload (quote ispell-message) "ispell" "\
+(autoload 'ispell-message "ispell" "\
Check the spelling of a mail message or news post.
Don't check spelling of message headers except the Subject field.
Don't check included messages.
@@ -16311,8 +16528,8 @@ You can bind this to the key C-c i in GNUS or mail by adding to
;;;***
-;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (17819
-;;;;;; 9451))
+;;;### (autoloads (iswitchb-mode) "iswitchb" "iswitchb.el" (18120
+;;;;;; 34749))
;;; Generated autoloads from iswitchb.el
(defvar iswitchb-mode nil "\
@@ -16322,11 +16539,11 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `iswitchb-mode'.")
-(custom-autoload (quote iswitchb-mode) "iswitchb" nil)
+(custom-autoload 'iswitchb-mode "iswitchb" nil)
-(autoload (quote iswitchb-mode) "iswitchb" "\
+(autoload 'iswitchb-mode "iswitchb" "\
Toggle Iswitchb global minor mode.
-With arg, turn Iswitchb mode on if and only iff ARG is positive.
+With arg, turn Iswitchb mode on if ARG is positive, otherwise turn it off.
This mode enables switching between buffers using substrings. See
`iswitchb' for details.
@@ -16337,15 +16554,15 @@ This mode enables switching between buffers using substrings. See
;;;### (autoloads (read-hiragana-string japanese-zenkaku-region japanese-hankaku-region
;;;;;; japanese-hiragana-region japanese-katakana-region japanese-zenkaku
;;;;;; japanese-hankaku japanese-hiragana japanese-katakana setup-japanese-environment-internal)
-;;;;;; "japan-util" "language/japan-util.el" (17842 58278))
+;;;;;; "japan-util" "language/japan-util.el" (18088 55109))
;;; Generated autoloads from language/japan-util.el
-(autoload (quote setup-japanese-environment-internal) "japan-util" "\
+(autoload 'setup-japanese-environment-internal "japan-util" "\
Not documented
\(fn)" nil nil)
-(autoload (quote japanese-katakana) "japan-util" "\
+(autoload 'japanese-katakana "japan-util" "\
Convert argument to Katakana and return that.
The argument may be a character or string. The result has the same type.
The argument object is not altered--the value is a copy.
@@ -16356,14 +16573,14 @@ Optional argument HANKAKU t means to convert to `hankaku' Katakana
\(fn OBJ &optional HANKAKU)" nil nil)
-(autoload (quote japanese-hiragana) "japan-util" "\
+(autoload 'japanese-hiragana "japan-util" "\
Convert argument to Hiragana and return that.
The argument may be a character or string. The result has the same type.
The argument object is not altered--the value is a copy.
\(fn OBJ)" nil nil)
-(autoload (quote japanese-hankaku) "japan-util" "\
+(autoload 'japanese-hankaku "japan-util" "\
Convert argument to `hankaku' and return that.
The argument may be a character or string. The result has the same type.
The argument object is not altered--the value is a copy.
@@ -16371,26 +16588,26 @@ Optional argument ASCII-ONLY non-nil means to return only ASCII character.
\(fn OBJ &optional ASCII-ONLY)" nil nil)
-(autoload (quote japanese-zenkaku) "japan-util" "\
+(autoload 'japanese-zenkaku "japan-util" "\
Convert argument to `zenkaku' and return that.
The argument may be a character or string. The result has the same type.
The argument object is not altered--the value is a copy.
\(fn OBJ)" nil nil)
-(autoload (quote japanese-katakana-region) "japan-util" "\
+(autoload 'japanese-katakana-region "japan-util" "\
Convert Japanese `hiragana' chars in the region to `katakana' chars.
Optional argument HANKAKU t means to convert to `hankaku katakana' character
of which charset is `japanese-jisx0201-kana'.
\(fn FROM TO &optional HANKAKU)" t nil)
-(autoload (quote japanese-hiragana-region) "japan-util" "\
+(autoload 'japanese-hiragana-region "japan-util" "\
Convert Japanese `katakana' chars in the region to `hiragana' chars.
\(fn FROM TO)" t nil)
-(autoload (quote japanese-hankaku-region) "japan-util" "\
+(autoload 'japanese-hankaku-region "japan-util" "\
Convert Japanese `zenkaku' chars in the region to `hankaku' chars.
`Zenkaku' chars belong to `japanese-jisx0208'
`Hankaku' chars belong to `ascii' or `japanese-jisx0201-kana'.
@@ -16398,7 +16615,7 @@ Optional argument ASCII-ONLY non-nil means to convert only to ASCII char.
\(fn FROM TO &optional ASCII-ONLY)" t nil)
-(autoload (quote japanese-zenkaku-region) "japan-util" "\
+(autoload 'japanese-zenkaku-region "japan-util" "\
Convert hankaku' chars in the region to Japanese `zenkaku' chars.
`Zenkaku' chars belong to `japanese-jisx0208'
`Hankaku' chars belong to `ascii' or `japanese-jisx0201-kana'.
@@ -16406,7 +16623,7 @@ Optional argument KATAKANA-ONLY non-nil means to convert only KATAKANA char.
\(fn FROM TO &optional KATAKANA-ONLY)" t nil)
-(autoload (quote read-hiragana-string) "japan-util" "\
+(autoload 'read-hiragana-string "japan-util" "\
Read a Hiragana string from the minibuffer, prompting with string PROMPT.
If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
@@ -16415,7 +16632,7 @@ If non-nil, second arg INITIAL-INPUT is a string to insert before reading.
;;;***
;;;### (autoloads (jka-compr-uninstall jka-compr-handler) "jka-compr"
-;;;;;; "jka-compr.el" (17853 24893))
+;;;;;; "jka-compr.el" (18088 55086))
;;; Generated autoloads from jka-compr.el
(defvar jka-compr-inhibit nil "\
@@ -16423,12 +16640,12 @@ Non-nil means inhibit automatic uncompression temporarily.
Lisp programs can bind this to t to do that.
It is not recommended to set this variable permanently to anything but nil.")
-(autoload (quote jka-compr-handler) "jka-compr" "\
+(autoload 'jka-compr-handler "jka-compr" "\
Not documented
\(fn OPERATION &rest ARGS)" nil nil)
-(autoload (quote jka-compr-uninstall) "jka-compr" "\
+(autoload 'jka-compr-uninstall "jka-compr" "\
Uninstall jka-compr.
This removes the entries in `file-name-handler-alist' and `auto-mode-alist'
and `inhibit-first-line-modes-suffixes' that were added
@@ -16440,7 +16657,7 @@ by `jka-compr-installed'.
;;;### (autoloads (keypad-setup keypad-numlock-shifted-setup keypad-shifted-setup
;;;;;; keypad-numlock-setup keypad-setup) "keypad" "emulation/keypad.el"
-;;;;;; (17833 41203))
+;;;;;; (18088 55097))
;;; Generated autoloads from emulation/keypad.el
(defvar keypad-setup nil "\
@@ -16448,30 +16665,30 @@ Specifies the keypad setup for unshifted keypad keys when NumLock is off.
When selecting the plain numeric keypad setup, the character returned by the
decimal key must be specified.")
-(custom-autoload (quote keypad-setup) "keypad" nil)
+(custom-autoload 'keypad-setup "keypad" nil)
(defvar keypad-numlock-setup nil "\
Specifies the keypad setup for unshifted keypad keys when NumLock is on.
When selecting the plain numeric keypad setup, the character returned by the
decimal key must be specified.")
-(custom-autoload (quote keypad-numlock-setup) "keypad" nil)
+(custom-autoload 'keypad-numlock-setup "keypad" nil)
(defvar keypad-shifted-setup nil "\
Specifies the keypad setup for shifted keypad keys when NumLock is off.
When selecting the plain numeric keypad setup, the character returned by the
decimal key must be specified.")
-(custom-autoload (quote keypad-shifted-setup) "keypad" nil)
+(custom-autoload 'keypad-shifted-setup "keypad" nil)
(defvar keypad-numlock-shifted-setup nil "\
Specifies the keypad setup for shifted keypad keys when NumLock is off.
When selecting the plain numeric keypad setup, the character returned by the
decimal key must be specified.")
-(custom-autoload (quote keypad-numlock-shifted-setup) "keypad" nil)
+(custom-autoload 'keypad-numlock-shifted-setup "keypad" nil)
-(autoload (quote keypad-setup) "keypad" "\
+(autoload 'keypad-setup "keypad" "\
Set keypad bindings in `function-key-map' according to SETUP.
If optional second argument NUMLOCK is non-nil, the NumLock On bindings
are changed. Otherwise, the NumLock Off bindings are changed.
@@ -16496,10 +16713,10 @@ the decimal key on the keypad is mapped to DECIMAL instead of `.'
;;;***
;;;### (autoloads (kinsoku) "kinsoku" "international/kinsoku.el"
-;;;;;; (17842 54888))
+;;;;;; (18088 55107))
;;; Generated autoloads from international/kinsoku.el
-(autoload (quote kinsoku) "kinsoku" "\
+(autoload 'kinsoku "kinsoku" "\
Go to a line breaking position near point by doing `kinsoku' processing.
LINEBEG is a buffer position we can't break a line before.
@@ -16517,8 +16734,8 @@ the context of text formatting.
;;;***
-;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (17842
-;;;;;; 54888))
+;;;### (autoloads (kkc-region) "kkc" "international/kkc.el" (18088
+;;;;;; 55107))
;;; Generated autoloads from international/kkc.el
(defvar kkc-after-update-conversion-functions nil "\
@@ -16528,7 +16745,7 @@ candidate list. Each time he changes the selection, functions in this
list are called with two arguments; starting and ending buffer
positions that contains the current selection.")
-(autoload (quote kkc-region) "kkc" "\
+(autoload 'kkc-region "kkc" "\
Convert Kana string in the current region to Kanji-Kana mixed string.
Users can select a desirable conversion interactively.
When called from a program, expects two arguments,
@@ -16543,7 +16760,7 @@ and the return value is the length of the conversion.
;;;### (autoloads (kmacro-end-call-mouse kmacro-end-and-call-macro
;;;;;; kmacro-end-or-call-macro kmacro-start-macro-or-insert-counter
;;;;;; kmacro-call-macro kmacro-end-macro kmacro-start-macro) "kmacro"
-;;;;;; "kmacro.el" (17833 41350))
+;;;;;; "kmacro.el" (18088 55086))
;;; Generated autoloads from kmacro.el
(global-set-key "\C-x(" 'kmacro-start-macro)
(global-set-key "\C-x)" 'kmacro-end-macro)
@@ -16553,7 +16770,7 @@ and the return value is the length of the conversion.
(global-set-key "\C-x\C-k" 'kmacro-keymap)
(autoload 'kmacro-keymap "kmacro" "Keymap for keyboard macro commands." t 'keymap)
-(autoload (quote kmacro-start-macro) "kmacro" "\
+(autoload 'kmacro-start-macro "kmacro" "\
Record subsequent keyboard input, defining a keyboard macro.
The commands are recorded even as they are executed.
Use \\[kmacro-end-macro] to finish recording and make the macro available.
@@ -16577,7 +16794,7 @@ Use \\[kmacro-bind-to-key] to bind it to a key sequence.
\(fn ARG)" t nil)
-(autoload (quote kmacro-end-macro) "kmacro" "\
+(autoload 'kmacro-end-macro "kmacro" "\
Finish defining a keyboard macro.
The definition was started by \\[kmacro-start-macro].
The macro is now available for use via \\[kmacro-call-macro],
@@ -16590,7 +16807,7 @@ An argument of zero means repeat until error.
\(fn ARG)" t nil)
-(autoload (quote kmacro-call-macro) "kmacro" "\
+(autoload 'kmacro-call-macro "kmacro" "\
Call the last keyboard macro that you defined with \\[kmacro-start-macro].
A prefix argument serves as a repeat count. Zero means repeat until error.
@@ -16604,7 +16821,7 @@ others, use \\[kmacro-name-last-macro].
\(fn ARG &optional NO-REPEAT END-MACRO)" t nil)
-(autoload (quote kmacro-start-macro-or-insert-counter) "kmacro" "\
+(autoload 'kmacro-start-macro-or-insert-counter "kmacro" "\
Record subsequent keyboard input, defining a keyboard macro.
The commands are recorded even as they are executed.
@@ -16623,14 +16840,14 @@ The format of the counter can be modified via \\[kmacro-set-format].
\(fn ARG)" t nil)
-(autoload (quote kmacro-end-or-call-macro) "kmacro" "\
+(autoload 'kmacro-end-or-call-macro "kmacro" "\
End kbd macro if currently being defined; else call last kbd macro.
With numeric prefix ARG, repeat macro that many times.
With \\[universal-argument], call second macro in macro ring.
\(fn ARG &optional NO-REPEAT)" t nil)
-(autoload (quote kmacro-end-and-call-macro) "kmacro" "\
+(autoload 'kmacro-end-and-call-macro "kmacro" "\
Call last keyboard macro, ending it first if currently being defined.
With numeric prefix ARG, repeat macro that many times.
Zero argument means repeat until there is an error.
@@ -16640,7 +16857,7 @@ even after defining other macros, use \\[kmacro-name-last-macro].
\(fn ARG &optional NO-REPEAT)" t nil)
-(autoload (quote kmacro-end-call-mouse) "kmacro" "\
+(autoload 'kmacro-end-call-mouse "kmacro" "\
Move point to the position clicked with the mouse and call last kbd macro.
If kbd macro currently being defined end it before activating it.
@@ -16650,22 +16867,22 @@ If kbd macro currently being defined end it before activating it.
;;;### (autoloads (kannada-post-read-conversion kannada-compose-string
;;;;;; kannada-compose-region) "knd-util" "language/knd-util.el"
-;;;;;; (17842 58278))
+;;;;;; (18088 55109))
;;; Generated autoloads from language/knd-util.el
(defconst kannada-consonant "[\x51f75-\x51fb9]")
-(autoload (quote kannada-compose-region) "knd-util" "\
+(autoload 'kannada-compose-region "knd-util" "\
Not documented
\(fn FROM TO)" t nil)
-(autoload (quote kannada-compose-string) "knd-util" "\
+(autoload 'kannada-compose-string "knd-util" "\
Not documented
\(fn STRING)" nil nil)
-(autoload (quote kannada-post-read-conversion) "knd-util" "\
+(autoload 'kannada-post-read-conversion "knd-util" "\
Not documented
\(fn LEN)" nil nil)
@@ -16673,14 +16890,14 @@ Not documented
;;;***
;;;### (autoloads (setup-korean-environment-internal) "korea-util"
-;;;;;; "language/korea-util.el" (17842 58278))
+;;;;;; "language/korea-util.el" (18088 55109))
;;; Generated autoloads from language/korea-util.el
(defvar default-korean-keyboard (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") "")) "3" "") "\
*The kind of Korean keyboard for Korean input method.
\"\" for 2, \"3\" for 3.")
-(autoload (quote setup-korean-environment-internal) "korea-util" "\
+(autoload 'setup-korean-environment-internal "korea-util" "\
Not documented
\(fn)" nil nil)
@@ -16688,19 +16905,19 @@ Not documented
;;;***
;;;### (autoloads (lm lm-test-run) "landmark" "play/landmark.el"
-;;;;;; (17941 38806))
+;;;;;; (18202 4002))
;;; Generated autoloads from play/landmark.el
-(defalias (quote landmark-repeat) (quote lm-test-run))
+(defalias 'landmark-repeat 'lm-test-run)
-(autoload (quote lm-test-run) "landmark" "\
+(autoload 'lm-test-run "landmark" "\
Run 100 Lm games, each time saving the weights from the previous game.
\(fn)" t nil)
-(defalias (quote landmark) (quote lm))
+(defalias 'landmark 'lm)
-(autoload (quote lm) "landmark" "\
+(autoload 'lm "landmark" "\
Start or resume an Lm game.
If a game is in progress, this command allows you to resume it.
Here is the relation between prefix args and game options:
@@ -16722,16 +16939,16 @@ Use \\[describe-mode] for more info.
;;;### (autoloads (lao-compose-region lao-composition-function lao-post-read-conversion
;;;;;; lao-transcribe-roman-to-lao-string lao-transcribe-single-roman-syllable-to-lao
-;;;;;; lao-compose-string) "lao-util" "language/lao-util.el" (17842
-;;;;;; 58278))
+;;;;;; lao-compose-string) "lao-util" "language/lao-util.el" (18088
+;;;;;; 55109))
;;; Generated autoloads from language/lao-util.el
-(autoload (quote lao-compose-string) "lao-util" "\
+(autoload 'lao-compose-string "lao-util" "\
Not documented
\(fn STR)" nil nil)
-(autoload (quote lao-transcribe-single-roman-syllable-to-lao) "lao-util" "\
+(autoload 'lao-transcribe-single-roman-syllable-to-lao "lao-util" "\
Transcribe a Romanized Lao syllable in the region FROM and TO to Lao string.
Only the first syllable is transcribed.
The value has the form: (START END LAO-STRING), where
@@ -16743,17 +16960,17 @@ syllable. In that case, FROM and TO are indexes to STR.
\(fn FROM TO &optional STR)" nil nil)
-(autoload (quote lao-transcribe-roman-to-lao-string) "lao-util" "\
+(autoload 'lao-transcribe-roman-to-lao-string "lao-util" "\
Transcribe Romanized Lao string STR to Lao character string.
\(fn STR)" nil nil)
-(autoload (quote lao-post-read-conversion) "lao-util" "\
+(autoload 'lao-post-read-conversion "lao-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote lao-composition-function) "lao-util" "\
+(autoload 'lao-composition-function "lao-util" "\
Compose Lao text in the region FROM and TO.
The text matches the regular expression PATTERN.
Optional 4th argument STRING, if non-nil, is a string containing text
@@ -16763,7 +16980,7 @@ The return value is number of composed characters.
\(fn FROM TO PATTERN &optional STRING)" nil nil)
-(autoload (quote lao-compose-region) "lao-util" "\
+(autoload 'lao-compose-region "lao-util" "\
Not documented
\(fn FROM TO)" t nil)
@@ -16772,29 +16989,29 @@ Not documented
;;;### (autoloads (latexenc-find-file-coding-system latexenc-coding-system-to-inputenc
;;;;;; latexenc-inputenc-to-coding-system latex-inputenc-coding-alist)
-;;;;;; "latexenc" "international/latexenc.el" (17842 54888))
+;;;;;; "latexenc" "international/latexenc.el" (18088 55107))
;;; Generated autoloads from international/latexenc.el
-(defvar latex-inputenc-coding-alist (quote (("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8))) "\
+(defvar latex-inputenc-coding-alist '(("ansinew" . windows-1252) ("applemac" . mac-roman) ("ascii" . us-ascii) ("cp1250" . windows-1250) ("cp1252" . windows-1252) ("cp1257" . cp1257) ("cp437de" . cp437) ("cp437" . cp437) ("cp850" . cp850) ("cp852" . cp852) ("cp858" . cp858) ("cp865" . cp865) ("latin1" . iso-8859-1) ("latin2" . iso-8859-2) ("latin3" . iso-8859-3) ("latin4" . iso-8859-4) ("latin5" . iso-8859-5) ("latin9" . iso-8859-15) ("next" . next) ("utf8" . utf-8) ("utf8x" . utf-8)) "\
Mapping from LaTeX encodings in \"inputenc.sty\" to Emacs coding systems.
LaTeX encodings are specified with \"\\usepackage[encoding]{inputenc}\".
Used by the function `latexenc-find-file-coding-system'.")
-(custom-autoload (quote latex-inputenc-coding-alist) "latexenc" t)
+(custom-autoload 'latex-inputenc-coding-alist "latexenc" t)
-(autoload (quote latexenc-inputenc-to-coding-system) "latexenc" "\
+(autoload 'latexenc-inputenc-to-coding-system "latexenc" "\
Return the corresponding coding-system for the specified input encoding.
Return nil if no matching coding system can be found.
\(fn INPUTENC)" nil nil)
-(autoload (quote latexenc-coding-system-to-inputenc) "latexenc" "\
+(autoload 'latexenc-coding-system-to-inputenc "latexenc" "\
Return the corresponding input encoding for the specified coding system.
Return nil if no matching input encoding can be found.
\(fn CS)" nil nil)
-(autoload (quote latexenc-find-file-coding-system) "latexenc" "\
+(autoload 'latexenc-find-file-coding-system "latexenc" "\
Determine the coding system of a LaTeX file if it uses \"inputenc.sty\".
The mapping from LaTeX's \"inputenc.sty\" encoding names to Emacs
coding system names is determined from `latex-inputenc-coding-alist'.
@@ -16804,7 +17021,7 @@ coding system names is determined from `latex-inputenc-coding-alist'.
;;;***
;;;### (autoloads (latin1-display-ucs-per-lynx latin1-display latin1-display)
-;;;;;; "latin1-disp" "international/latin1-disp.el" (17874 62081))
+;;;;;; "latin1-disp" "international/latin1-disp.el" (18120 34751))
;;; Generated autoloads from international/latin1-disp.el
(defvar latin1-display nil "\
@@ -16822,9 +17039,9 @@ charsets if you don't have a Unicode font with which to display them.
Setting this variable directly does not take effect;
use either \\[customize] or the function `latin1-display'.")
-(custom-autoload (quote latin1-display) "latin1-disp" nil)
+(custom-autoload 'latin1-display "latin1-disp" nil)
-(autoload (quote latin1-display) "latin1-disp" "\
+(autoload 'latin1-display "latin1-disp" "\
Set up Latin-1/ASCII display for the arguments character SETS.
See option `latin1-display' for the method. The members of the list
must be in `latin1-display-sets'. With no arguments, reset the
@@ -16843,19 +17060,19 @@ changed if the display can render Unicode characters.
Setting this variable directly does not take effect;
use either \\[customize] or the function `latin1-display'.")
-(custom-autoload (quote latin1-display-ucs-per-lynx) "latin1-disp" nil)
+(custom-autoload 'latin1-display-ucs-per-lynx "latin1-disp" nil)
;;;***
;;;### (autoloads (ld-script-mode) "ld-script" "progmodes/ld-script.el"
-;;;;;; (17842 56332))
+;;;;;; (18088 55117))
;;; Generated autoloads from progmodes/ld-script.el
-(add-to-list (quote auto-mode-alist) (quote ("\\.ld[si]?\\>" . ld-script-mode)))
+(add-to-list 'auto-mode-alist '("\\.ld[si]?\\>" . ld-script-mode))
-(add-to-list (quote auto-mode-alist) (quote ("\\.x[bdsru]?[cn]?\\'" . ld-script-mode)))
+(add-to-list 'auto-mode-alist '("\\.x[bdsru]?[cn]?\\'" . ld-script-mode))
-(autoload (quote ld-script-mode) "ld-script" "\
+(autoload 'ld-script-mode "ld-script" "\
A major mode to edit GNU ld script files
\(fn)" t nil)
@@ -16863,7 +17080,7 @@ A major mode to edit GNU ld script files
;;;***
;;;### (autoloads (ledit-from-lisp-mode ledit-mode) "ledit" "ledit.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55086))
;;; Generated autoloads from ledit.el
(defconst ledit-save-files t "\
@@ -16875,7 +17092,7 @@ A major mode to edit GNU ld script files
(defconst ledit-go-to-liszt-string "%?liszt" "\
*Shell commands to execute to resume Lisp compiler job.")
-(autoload (quote ledit-mode) "ledit" "\
+(autoload 'ledit-mode "ledit" "\
\\<ledit-mode-map>Major mode for editing text and stuffing it to a Lisp job.
Like Lisp mode, plus these special commands:
\\[ledit-save-defun] -- record defun at or after point
@@ -16891,17 +17108,17 @@ do (setq lisp-mode-hook 'ledit-from-lisp-mode)
\(fn)" t nil)
-(autoload (quote ledit-from-lisp-mode) "ledit" "\
+(autoload 'ledit-from-lisp-mode "ledit" "\
Not documented
\(fn)" nil nil)
;;;***
-;;;### (autoloads (life) "life" "play/life.el" (17842 55395))
+;;;### (autoloads (life) "life" "play/life.el" (18088 55114))
;;; Generated autoloads from play/life.el
-(autoload (quote life) "life" "\
+(autoload 'life "life" "\
Run Conway's Life simulation.
The starting pattern is randomly selected. Prefix arg (optional first
arg non-nil from a program) is the number of seconds to sleep between
@@ -16911,40 +17128,49 @@ generations (this defaults to 1).
;;;***
-;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (17942
-;;;;;; 63381))
+;;;### (autoloads (unload-feature) "loadhist" "loadhist.el" (18213
+;;;;;; 13926))
;;; Generated autoloads from loadhist.el
-(autoload (quote unload-feature) "loadhist" "\
-Unload the library that provided FEATURE, restoring all its autoloads.
+(autoload 'unload-feature "loadhist" "\
+Unload the library that provided FEATURE.
If the feature is required by any other loaded code, and prefix arg FORCE
is nil, raise an error.
-This function tries to undo modifications made by the package to
-hooks. Packages may define a hook FEATURE-unload-hook that is called
-instead of the normal heuristics for doing this. Such a hook should
-undo all the relevant global state changes that may have been made by
-loading the package or executing functions in it. It has access to
-the package's feature list (before anything is unbound) in the
-variable `unload-hook-features-list' and could remove features from it
-in the event that the package has done something normally-ill-advised,
-such as redefining an Emacs function.
+Standard unloading activities include restoring old autoloads for
+functions defined by the library, undoing any additions that the
+library has made to hook variables or to `auto-mode-alist', undoing
+ELP profiling of functions in that library, unproviding any features
+provided by the library, and canceling timers held in variables
+defined by the library.
+
+If a function `FEATURE-unload-function' is defined, this function
+calls it with no arguments, before doing anything else. That function
+can do whatever is appropriate to undo the loading of the library. If
+`FEATURE-unload-function' returns non-nil, that suppresses the
+standard unloading of the library. Otherwise the standard unloading
+proceeds.
+
+`FEATURE-unload-function' has access to the package's list of
+definitions in the variable `unload-function-defs-list' and could
+remove symbols from it in the event that the package has done
+something strange, such as redefining an Emacs function.
\(fn FEATURE &optional FORCE)" t nil)
;;;***
;;;### (autoloads (locate-with-filter locate locate-ls-subdir-switches)
-;;;;;; "locate" "locate.el" (17992 30877))
+;;;;;; "locate" "locate.el" (18126 18420))
;;; Generated autoloads from locate.el
(defvar locate-ls-subdir-switches "-al" "\
`ls' switches for inserting subdirectories in `*Locate*' buffers.
This should contain the \"-l\" switch, but not the \"-F\" or \"-b\" switches.")
-(custom-autoload (quote locate-ls-subdir-switches) "locate" t)
+(custom-autoload 'locate-ls-subdir-switches "locate" t)
-(autoload (quote locate) "locate" "\
+(autoload 'locate "locate" "\
Run the program `locate', putting results in `*Locate*' buffer.
Pass it SEARCH-STRING as argument. Interactively, prompt for SEARCH-STRING.
With prefix arg, prompt for the exact shell command to run instead.
@@ -16967,7 +17193,7 @@ ARG is the interactive prefix arg.
\(fn SEARCH-STRING &optional FILTER ARG)" t nil)
-(autoload (quote locate-with-filter) "locate" "\
+(autoload 'locate-with-filter "locate" "\
Run the executable program `locate' with a filter.
This function is similar to the function `locate', which see.
The difference is that, when invoked interactively, the present function
@@ -16986,10 +17212,10 @@ except that FILTER is not optional.
;;;***
-;;;### (autoloads (log-edit) "log-edit" "log-edit.el" (18010 5298))
+;;;### (autoloads (log-edit) "log-edit" "log-edit.el" (18120 34749))
;;; Generated autoloads from log-edit.el
-(autoload (quote log-edit) "log-edit" "\
+(autoload 'log-edit "log-edit" "\
Setup a buffer to enter a log message.
\\<log-edit-mode-map>The buffer will be put in `log-edit-mode'.
If SETUP is non-nil, the buffer is then erased and `log-edit-hook' is run.
@@ -17007,22 +17233,22 @@ If BUFFER is non-nil `log-edit' will jump to that buffer, use it to edit the
;;;***
-;;;### (autoloads (log-view-mode) "log-view" "log-view.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (log-view-mode) "log-view" "log-view.el" (18202
+;;;;;; 3995))
;;; Generated autoloads from log-view.el
-(autoload (quote log-view-mode) "log-view" "\
+(autoload 'log-view-mode "log-view" "\
Major mode for browsing CVS log output.
\(fn)" t nil)
;;;***
-;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (17992
-;;;;;; 30877))
+;;;### (autoloads (longlines-mode) "longlines" "longlines.el" (18214
+;;;;;; 4763))
;;; Generated autoloads from longlines.el
-(autoload (quote longlines-mode) "longlines" "\
+(autoload 'longlines-mode "longlines" "\
Toggle Long Lines mode.
In Long Lines mode, long lines are wrapped if they extend beyond
`fill-column'. The soft newlines used for line wrapping will not
@@ -17040,13 +17266,13 @@ are indicated with a symbol.
;;;***
;;;### (autoloads (print-region lpr-region print-buffer lpr-buffer
-;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (17842
-;;;;;; 58279))
+;;;;;; lpr-command lpr-switches printer-name) "lpr" "lpr.el" (18088
+;;;;;; 55086))
;;; Generated autoloads from lpr.el
-(defvar lpr-windows-system (memq system-type (quote (emx win32 w32 mswindows ms-dos windows-nt))))
+(defvar lpr-windows-system (memq system-type '(emx win32 w32 mswindows ms-dos windows-nt)))
-(defvar lpr-lp-system (memq system-type (quote (usg-unix-v dgux hpux irix))))
+(defvar lpr-lp-system (memq system-type '(usg-unix-v dgux hpux irix)))
(defvar printer-name (and lpr-windows-system "PRN") "\
*The name of a local printer to which data is sent for printing.
@@ -17063,7 +17289,7 @@ printers, or \"COM1\" to \"COM4\" or \"AUX\" for serial printers, or
it to the name of a file, in which case the output gets appended to that
file. If you want to discard the printed output, set this to \"NUL\".")
-(custom-autoload (quote printer-name) "lpr" t)
+(custom-autoload 'printer-name "lpr" t)
(defvar lpr-switches nil "\
*List of strings to pass as extra options for the printer program.
@@ -17071,7 +17297,7 @@ It is recommended to set `printer-name' instead of including an explicit
switch on this list.
See `lpr-command'.")
-(custom-autoload (quote lpr-switches) "lpr" t)
+(custom-autoload 'lpr-switches "lpr" t)
(defvar lpr-command (cond (lpr-windows-system "") (lpr-lp-system "lp") (t "lpr")) "\
*Name of program for printing a file.
@@ -17084,16 +17310,16 @@ Windows NT and Novell Netware respectively) are handled specially, using
treated like `lpr' except that an explicit filename is given as the last
argument.")
-(custom-autoload (quote lpr-command) "lpr" t)
+(custom-autoload 'lpr-command "lpr" t)
-(autoload (quote lpr-buffer) "lpr" "\
+(autoload 'lpr-buffer "lpr" "\
Print buffer contents without pagination or page headers.
See the variables `lpr-switches' and `lpr-command'
for customization of the printer command.
\(fn)" t nil)
-(autoload (quote print-buffer) "lpr" "\
+(autoload 'print-buffer "lpr" "\
Paginate and print buffer contents.
The variable `lpr-headers-switches' controls how to paginate.
@@ -17109,14 +17335,14 @@ for further customization of the printer command.
\(fn)" t nil)
-(autoload (quote lpr-region) "lpr" "\
+(autoload 'lpr-region "lpr" "\
Print region contents without pagination or page headers.
See the variables `lpr-switches' and `lpr-command'
for customization of the printer command.
\(fn START END)" t nil)
-(autoload (quote print-region) "lpr" "\
+(autoload 'print-region "lpr" "\
Paginate and print the region contents.
The variable `lpr-headers-switches' controls how to paginate.
@@ -17135,22 +17361,22 @@ for further customization of the printer command.
;;;***
;;;### (autoloads (ls-lisp-support-shell-wildcards) "ls-lisp" "ls-lisp.el"
-;;;;;; (18006 55796))
+;;;;;; (18088 55086))
;;; Generated autoloads from ls-lisp.el
(defvar ls-lisp-support-shell-wildcards t "\
*Non-nil means ls-lisp treats file patterns as shell wildcards.
Otherwise they are treated as Emacs regexps (for backward compatibility).")
-(custom-autoload (quote ls-lisp-support-shell-wildcards) "ls-lisp" t)
+(custom-autoload 'ls-lisp-support-shell-wildcards "ls-lisp" t)
;;;***
-;;;### (autoloads (phases-of-moon) "lunar" "calendar/lunar.el" (17956
-;;;;;; 13479))
+;;;### (autoloads (phases-of-moon) "lunar" "calendar/lunar.el" (18088
+;;;;;; 55094))
;;; Generated autoloads from calendar/lunar.el
-(autoload (quote phases-of-moon) "lunar" "\
+(autoload 'phases-of-moon "lunar" "\
Display the quarters of the moon for last month, this month, and next month.
If called with an optional prefix argument, prompts for month and year.
@@ -17160,11 +17386,11 @@ This function is suitable for execution in a .emacs file.
;;;***
-;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (17923
-;;;;;; 63540))
+;;;### (autoloads (m4-mode) "m4-mode" "progmodes/m4-mode.el" (18088
+;;;;;; 55117))
;;; Generated autoloads from progmodes/m4-mode.el
-(autoload (quote m4-mode) "m4-mode" "\
+(autoload 'm4-mode "m4-mode" "\
A major mode to edit m4 macro files.
\\{m4-mode-map}
@@ -17173,10 +17399,10 @@ A major mode to edit m4 macro files.
;;;***
;;;### (autoloads (macroexpand-all) "macroexp" "emacs-lisp/macroexp.el"
-;;;;;; (17842 54152))
+;;;;;; (18088 55096))
;;; Generated autoloads from emacs-lisp/macroexp.el
-(autoload (quote macroexpand-all) "macroexp" "\
+(autoload 'macroexpand-all "macroexp" "\
Return result of expanding macros at all levels in FORM.
If no macros are expanded, FORM is returned unchanged.
The second optional arg ENVIRONMENT specifies an environment of macro
@@ -17187,10 +17413,10 @@ definitions to shadow the loaded ones for use in file byte-compilation.
;;;***
;;;### (autoloads (apply-macro-to-region-lines kbd-macro-query insert-kbd-macro
-;;;;;; name-last-kbd-macro) "macros" "macros.el" (17842 58279))
+;;;;;; name-last-kbd-macro) "macros" "macros.el" (18088 55086))
;;; Generated autoloads from macros.el
-(autoload (quote name-last-kbd-macro) "macros" "\
+(autoload 'name-last-kbd-macro "macros" "\
Assign a name to the last keyboard macro defined.
Argument SYMBOL is the name to define.
The symbol's function definition becomes the keyboard macro string.
@@ -17198,7 +17424,7 @@ Such a \"function\" cannot be called from Lisp, but it is a valid editor command
\(fn SYMBOL)" t nil)
-(autoload (quote insert-kbd-macro) "macros" "\
+(autoload 'insert-kbd-macro "macros" "\
Insert in buffer the definition of kbd macro NAME, as Lisp code.
Optional second arg KEYS means also record the keys it is on
\(this is the prefix argument, when calling interactively).
@@ -17214,7 +17440,7 @@ use this command, and then save the file.
\(fn MACRONAME &optional KEYS)" t nil)
-(autoload (quote kbd-macro-query) "macros" "\
+(autoload 'kbd-macro-query "macros" "\
Query user during kbd macro execution.
With prefix argument, enters recursive edit, reading keyboard
commands even within a kbd macro. You can give different commands
@@ -17229,7 +17455,7 @@ Your options are: \\<query-replace-map>
\(fn FLAG)" t nil)
-(autoload (quote apply-macro-to-region-lines) "macros" "\
+(autoload 'apply-macro-to-region-lines "macros" "\
Apply last keyboard macro to all lines in the region.
For each line that begins in the region, move to the beginning of
the line, and run the last keyboard macro.
@@ -17276,10 +17502,10 @@ and then select the region of un-tablified names and use
;;;***
;;;### (autoloads (what-domain mail-extract-address-components) "mail-extr"
-;;;;;; "mail/mail-extr.el" (17842 55035))
+;;;;;; "mail/mail-extr.el" (18088 55109))
;;; Generated autoloads from mail/mail-extr.el
-(autoload (quote mail-extract-address-components) "mail-extr" "\
+(autoload 'mail-extract-address-components "mail-extr" "\
Given an RFC-822 address ADDRESS, extract full name and canonical address.
Returns a list of the form (FULL-NAME CANONICAL-ADDRESS). If no
name can be extracted, FULL-NAME will be nil. Also see
@@ -17299,7 +17525,7 @@ consing a string.)
\(fn ADDRESS &optional ALL)" nil nil)
-(autoload (quote what-domain) "mail-extr" "\
+(autoload 'what-domain "mail-extr" "\
Convert mail domain DOMAIN to the country it corresponds to.
\(fn DOMAIN)" t nil)
@@ -17308,15 +17534,15 @@ Convert mail domain DOMAIN to the country it corresponds to.
;;;### (autoloads (mail-hist-put-headers-into-history mail-hist-keep-history
;;;;;; mail-hist-enable mail-hist-define-keys) "mail-hist" "mail/mail-hist.el"
-;;;;;; (17842 55035))
+;;;;;; (18088 55110))
;;; Generated autoloads from mail/mail-hist.el
-(autoload (quote mail-hist-define-keys) "mail-hist" "\
+(autoload 'mail-hist-define-keys "mail-hist" "\
Define keys for accessing mail header history. For use in hooks.
\(fn)" nil nil)
-(autoload (quote mail-hist-enable) "mail-hist" "\
+(autoload 'mail-hist-enable "mail-hist" "\
Not documented
\(fn)" nil nil)
@@ -17324,9 +17550,9 @@ Not documented
(defvar mail-hist-keep-history t "\
*Non-nil means keep a history for headers and text of outgoing mail.")
-(custom-autoload (quote mail-hist-keep-history) "mail-hist" t)
+(custom-autoload 'mail-hist-keep-history "mail-hist" t)
-(autoload (quote mail-hist-put-headers-into-history) "mail-hist" "\
+(autoload 'mail-hist-put-headers-into-history "mail-hist" "\
Put headers and contents of this message into mail header history.
Each header has its own independent history, as does the body of the
message.
@@ -17339,8 +17565,8 @@ This function normally would be called when the message is sent.
;;;### (autoloads (mail-fetch-field mail-unquote-printable-region
;;;;;; mail-unquote-printable mail-quote-printable mail-file-babyl-p
-;;;;;; mail-use-rfc822) "mail-utils" "mail/mail-utils.el" (17842
-;;;;;; 55035))
+;;;;;; mail-use-rfc822) "mail-utils" "mail/mail-utils.el" (18088
+;;;;;; 55110))
;;; Generated autoloads from mail/mail-utils.el
(defvar mail-use-rfc822 nil "\
@@ -17348,28 +17574,28 @@ This function normally would be called when the message is sent.
Otherwise, (the default) use a smaller, somewhat faster, and
often correct parser.")
-(custom-autoload (quote mail-use-rfc822) "mail-utils" t)
+(custom-autoload 'mail-use-rfc822 "mail-utils" t)
-(autoload (quote mail-file-babyl-p) "mail-utils" "\
+(autoload 'mail-file-babyl-p "mail-utils" "\
Not documented
\(fn FILE)" nil nil)
-(autoload (quote mail-quote-printable) "mail-utils" "\
+(autoload 'mail-quote-printable "mail-utils" "\
Convert a string to the \"quoted printable\" Q encoding.
If the optional argument WRAPPER is non-nil,
we add the wrapper characters =?ISO-8859-1?Q?....?=.
\(fn STRING &optional WRAPPER)" nil nil)
-(autoload (quote mail-unquote-printable) "mail-utils" "\
+(autoload 'mail-unquote-printable "mail-utils" "\
Undo the \"quoted printable\" encoding.
If the optional argument WRAPPER is non-nil,
we expect to find and remove the wrapper characters =?ISO-8859-1?Q?....?=.
\(fn STRING &optional WRAPPER)" nil nil)
-(autoload (quote mail-unquote-printable-region) "mail-utils" "\
+(autoload 'mail-unquote-printable-region "mail-utils" "\
Undo the \"quoted printable\" encoding in buffer from BEG to END.
If the optional argument WRAPPER is non-nil,
we expect to find and remove the wrapper characters =?ISO-8859-1?Q?....?=.
@@ -17380,7 +17606,7 @@ as Rmail does.
\(fn BEG END &optional WRAPPER NOERROR UNIBYTE)" t nil)
-(autoload (quote mail-fetch-field) "mail-utils" "\
+(autoload 'mail-fetch-field "mail-utils" "\
Return the value of the header field whose type is FIELD-NAME.
The buffer is expected to be narrowed to just the header of the message.
If second arg LAST is non-nil, use the last field of type FIELD-NAME.
@@ -17392,21 +17618,21 @@ If 4th arg LIST is non-nil, return a list of all such fields.
;;;***
;;;### (autoloads (define-mail-abbrev build-mail-abbrevs mail-abbrevs-setup)
-;;;;;; "mailabbrev" "mail/mailabbrev.el" (17992 30878))
+;;;;;; "mailabbrev" "mail/mailabbrev.el" (18120 34751))
;;; Generated autoloads from mail/mailabbrev.el
-(autoload (quote mail-abbrevs-setup) "mailabbrev" "\
+(autoload 'mail-abbrevs-setup "mailabbrev" "\
Initialize use of the `mailabbrev' package.
\(fn)" nil nil)
-(autoload (quote build-mail-abbrevs) "mailabbrev" "\
+(autoload 'build-mail-abbrevs "mailabbrev" "\
Read mail aliases from personal mail alias file and set `mail-abbrevs'.
By default this is the file specified by `mail-personal-alias-file'.
\(fn &optional FILE RECURSIVEP)" nil nil)
-(autoload (quote define-mail-abbrev) "mailabbrev" "\
+(autoload 'define-mail-abbrev "mailabbrev" "\
Define NAME as a mail alias abbrev that translates to DEFINITION.
If DEFINITION contains multiple addresses, separate them with commas.
@@ -17415,11 +17641,11 @@ If DEFINITION contains multiple addresses, separate them with commas.
;;;***
;;;### (autoloads (mail-complete define-mail-alias expand-mail-aliases
-;;;;;; mail-complete-style) "mailalias" "mail/mailalias.el" (17842
-;;;;;; 55035))
+;;;;;; mail-complete-style) "mailalias" "mail/mailalias.el" (18088
+;;;;;; 55110))
;;; Generated autoloads from mail/mailalias.el
-(defvar mail-complete-style (quote angles) "\
+(defvar mail-complete-style 'angles "\
*Specifies how \\[mail-complete] formats the full name when it completes.
If `nil', they contain just the return address like:
king@grassland.com
@@ -17428,9 +17654,9 @@ If `parens', they look like:
If `angles', they look like:
Elvis Parsley <king@grassland.com>")
-(custom-autoload (quote mail-complete-style) "mailalias" t)
+(custom-autoload 'mail-complete-style "mailalias" t)
-(autoload (quote expand-mail-aliases) "mailalias" "\
+(autoload 'expand-mail-aliases "mailalias" "\
Expand all mail aliases in suitable header fields found between BEG and END.
If interactive, expand in header fields.
Suitable header fields are `To', `From', `CC' and `BCC', `Reply-to', and
@@ -17441,7 +17667,7 @@ removed from alias expansions.
\(fn BEG END &optional EXCLUDE)" t nil)
-(autoload (quote define-mail-alias) "mailalias" "\
+(autoload 'define-mail-alias "mailalias" "\
Define NAME as a mail alias that translates to DEFINITION.
This means that sending a message to NAME will actually send to DEFINITION.
@@ -17452,7 +17678,7 @@ if it is quoted with double-quotes.
\(fn NAME DEFINITION &optional FROM-MAILRC-FILE)" t nil)
-(autoload (quote mail-complete) "mailalias" "\
+(autoload 'mail-complete "mailalias" "\
Perform completion on header field or word preceding point.
Completable headers are according to `mail-complete-alist'. If none matches
current header, calls `mail-complete-function' and passes prefix arg if any.
@@ -17462,10 +17688,10 @@ current header, calls `mail-complete-function' and passes prefix arg if any.
;;;***
;;;### (autoloads (mailclient-send-it) "mailclient" "mail/mailclient.el"
-;;;;;; (17842 55035))
+;;;;;; (18088 55110))
;;; Generated autoloads from mail/mailclient.el
-(autoload (quote mailclient-send-it) "mailclient" "\
+(autoload 'mailclient-send-it "mailclient" "\
Pass current buffer on to the system's mail client.
Suitable value for `send-mail-function'.
The mail client is taken to be the handler of mailto URLs.
@@ -17476,10 +17702,10 @@ The mail client is taken to be the handler of mailto URLs.
;;;### (autoloads (makefile-imake-mode makefile-bsdmake-mode makefile-makepp-mode
;;;;;; makefile-gmake-mode makefile-automake-mode makefile-mode)
-;;;;;; "make-mode" "progmodes/make-mode.el" (17842 56332))
+;;;;;; "make-mode" "progmodes/make-mode.el" (18088 55117))
;;; Generated autoloads from progmodes/make-mode.el
-(autoload (quote makefile-mode) "make-mode" "\
+(autoload 'makefile-mode "make-mode" "\
Major mode for editing standard Makefiles.
If you are editing a file for a different make, try one of the
@@ -17566,38 +17792,38 @@ Makefile mode can be configured by modifying the following variables:
\(fn)" t nil)
-(autoload (quote makefile-automake-mode) "make-mode" "\
+(autoload 'makefile-automake-mode "make-mode" "\
An adapted `makefile-mode' that knows about automake.
\(fn)" t nil)
-(autoload (quote makefile-gmake-mode) "make-mode" "\
+(autoload 'makefile-gmake-mode "make-mode" "\
An adapted `makefile-mode' that knows about gmake.
\(fn)" t nil)
-(autoload (quote makefile-makepp-mode) "make-mode" "\
+(autoload 'makefile-makepp-mode "make-mode" "\
An adapted `makefile-mode' that knows about makepp.
\(fn)" t nil)
-(autoload (quote makefile-bsdmake-mode) "make-mode" "\
+(autoload 'makefile-bsdmake-mode "make-mode" "\
An adapted `makefile-mode' that knows about BSD make.
\(fn)" t nil)
-(autoload (quote makefile-imake-mode) "make-mode" "\
+(autoload 'makefile-imake-mode "make-mode" "\
An adapted `makefile-mode' that knows about imake.
\(fn)" t nil)
;;;***
-;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (make-command-summary) "makesum" "makesum.el" (18088
+;;;;;; 55086))
;;; Generated autoloads from makesum.el
-(autoload (quote make-command-summary) "makesum" "\
+(autoload 'make-command-summary "makesum" "\
Make a summary of current key bindings in the buffer *Summary*.
Previous contents of that buffer are killed first.
@@ -17605,12 +17831,12 @@ Previous contents of that buffer are killed first.
;;;***
-;;;### (autoloads (man-follow man) "man" "man.el" (17992 30877))
+;;;### (autoloads (man-follow man) "man" "man.el" (18153 31207))
;;; Generated autoloads from man.el
-(defalias (quote manual-entry) (quote man))
+(defalias 'manual-entry 'man)
-(autoload (quote man) "man" "\
+(autoload 'man "man" "\
Get a Un*x manual page and put it in a buffer.
This command is the top-level command in the man package. It runs a Un*x
command to retrieve and clean a manpage in the background and places the
@@ -17625,17 +17851,17 @@ all sections related to a subject, put something appropriate into the
\(fn MAN-ARGS)" t nil)
-(autoload (quote man-follow) "man" "\
+(autoload 'man-follow "man" "\
Get a Un*x manual page of the item under point and put it in a buffer.
\(fn MAN-ARGS)" t nil)
;;;***
-;;;### (autoloads (master-mode) "master" "master.el" (17842 58279))
+;;;### (autoloads (master-mode) "master" "master.el" (18088 55086))
;;; Generated autoloads from master.el
-(autoload (quote master-mode) "master" "\
+(autoload 'master-mode "master" "\
Toggle Master mode.
With no argument, this command toggles the mode.
Non-null prefix argument turns on the mode.
@@ -17654,11 +17880,37 @@ yourself the value of `master-of' by calling `master-show-slave'.
;;;***
-;;;### (autoloads (menu-bar-mode) "menu-bar" "menu-bar.el" (17942
-;;;;;; 63381))
+;;;### (autoloads (minibuffer-indicate-depth-mode) "mb-depth" "mb-depth.el"
+;;;;;; (18187 36839))
+;;; Generated autoloads from mb-depth.el
+
+(defvar minibuffer-indicate-depth-mode nil "\
+Non-nil if Minibuffer-Indicate-Depth mode is enabled.
+See the command `minibuffer-indicate-depth-mode' for a description of this minor mode.
+Setting this variable directly does not take effect;
+either customize it (see the info node `Easy Customization')
+or call the function `minibuffer-indicate-depth-mode'.")
+
+(custom-autoload 'minibuffer-indicate-depth-mode "mb-depth" nil)
+
+(autoload 'minibuffer-indicate-depth-mode "mb-depth" "\
+Toggle Minibuffer Indicate Depth mode.
+When active, any recursive use of the minibuffer will show
+the recursion depth in the minibuffer prompt. This is only
+useful if `enable-recursive-minibuffers' is non-nil.
+
+With prefix argument ARG, turn on if positive, otherwise off.
+Returns non-nil if the new state is enabled.
+
+\(fn &optional ARG)" t nil)
+
+;;;***
+
+;;;### (autoloads (menu-bar-mode) "menu-bar" "menu-bar.el" (18211
+;;;;;; 32385))
;;; Generated autoloads from menu-bar.el
-(put (quote menu-bar-mode) (quote standard-value) (quote (t)))
+(put 'menu-bar-mode 'standard-value '(t))
(defvar menu-bar-mode nil "\
Non-nil if Menu-Bar mode is enabled.
@@ -17667,9 +17919,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `menu-bar-mode'.")
-(custom-autoload (quote menu-bar-mode) "menu-bar" nil)
+(custom-autoload 'menu-bar-mode "menu-bar" nil)
-(autoload (quote menu-bar-mode) "menu-bar" "\
+(autoload 'menu-bar-mode "menu-bar" "\
Toggle display of a menu bar on each frame.
This command applies to all frames that exist and frames to be
created in the future.
@@ -17680,113 +17932,18 @@ turn on menu bars; otherwise, turn off menu bars.
;;;***
-;;;### (autoloads (unbold-region bold-region message-news-other-frame
+;;;### (autoloads (message-unbold-region message-bold-region message-news-other-frame
;;;;;; message-news-other-window message-mail-other-frame message-mail-other-window
;;;;;; message-bounce message-resend message-insinuate-rmail message-forward-rmail-make-body
;;;;;; message-forward-make-body message-forward message-recover
;;;;;; message-supersede message-cancel-news message-followup message-wide-reply
-;;;;;; message-reply message-news message-mail message-mode message-signature-insert-empty-line
-;;;;;; message-signature-file message-signature message-indent-citation-function
-;;;;;; message-cite-function message-yank-prefix message-citation-line-function
-;;;;;; message-send-mail-function message-user-organization-file
-;;;;;; message-signature-separator message-from-style) "message"
-;;;;;; "gnus/message.el" (18010 19867))
+;;;;;; message-reply message-news message-mail message-mode) "message"
+;;;;;; "gnus/message.el" (18212 46007))
;;; Generated autoloads from gnus/message.el
-(defvar message-from-style (quote default) "\
-*Specifies how \"From\" headers look.
-
-If nil, they contain just the return address like:
- king@grassland.com
-If `parens', they look like:
- king@grassland.com (Elvis Parsley)
-If `angles', they look like:
- Elvis Parsley <king@grassland.com>
-
-Otherwise, most addresses look like `angles', but they look like
-`parens' if `angles' would need quoting and `parens' would not.")
-
-(custom-autoload (quote message-from-style) "message" t)
-
-(defvar message-signature-separator "^-- *$" "\
-Regexp matching the signature separator.")
-
-(custom-autoload (quote message-signature-separator) "message" t)
-
-(defvar message-user-organization-file "/usr/lib/news/organization" "\
-*Local news organization file.")
-
-(custom-autoload (quote message-user-organization-file) "message" t)
-
-(defvar message-send-mail-function (quote message-send-mail-with-sendmail) "\
-Function to call to send the current buffer as mail.
-The headers should be delimited by a line whose contents match the
-variable `mail-header-separator'.
+(define-mail-user-agent 'message-user-agent 'message-mail 'message-send-and-exit 'message-kill-buffer 'message-send-hook)
-Valid values include `message-send-mail-with-sendmail' (the default),
-`message-send-mail-with-mh', `message-send-mail-with-qmail',
-`message-smtpmail-send-it', `smtpmail-send-it' and `feedmail-send-it'.
-
-See also `send-mail-function'.")
-
-(custom-autoload (quote message-send-mail-function) "message" t)
-
-(defvar message-citation-line-function (quote message-insert-citation-line) "\
-*Function called to insert the \"Whomever writes:\" line.
-
-Note that Gnus provides a feature where the reader can click on
-`writes:' to hide the cited text. If you change this line too much,
-people who read your message will have to change their Gnus
-configuration. See the variable `gnus-cite-attribution-suffix'.")
-
-(custom-autoload (quote message-citation-line-function) "message" t)
-
-(defvar message-yank-prefix "> " "\
-*Prefix inserted on the lines of yanked messages.
-Fix `message-cite-prefix-regexp' if it is set to an abnormal value.
-See also `message-yank-cited-prefix'.")
-
-(custom-autoload (quote message-yank-prefix) "message" t)
-
-(defvar message-cite-function (quote message-cite-original) "\
-*Function for citing an original message.
-Predefined functions include `message-cite-original' and
-`message-cite-original-without-signature'.
-Note that `message-cite-original' uses `mail-citation-hook' if that is non-nil.")
-
-(custom-autoload (quote message-cite-function) "message" t)
-
-(defvar message-indent-citation-function (quote message-indent-citation) "\
-*Function for modifying a citation just inserted in the mail buffer.
-This can also be a list of functions. Each function can find the
-citation between (point) and (mark t). And each function should leave
-point and mark around the citation text as modified.")
-
-(custom-autoload (quote message-indent-citation-function) "message" t)
-
-(defvar message-signature t "\
-*String to be inserted at the end of the message buffer.
-If t, the `message-signature-file' file will be inserted instead.
-If a function, the result from the function will be used instead.
-If a form, the result from the form will be used instead.")
-
-(custom-autoload (quote message-signature) "message" t)
-
-(defvar message-signature-file "~/.signature" "\
-*Name of file containing the text inserted at end of message buffer.
-Ignored if the named file doesn't exist.
-If nil, don't insert a signature.")
-
-(custom-autoload (quote message-signature-file) "message" t)
-
-(defvar message-signature-insert-empty-line t "\
-*If non-nil, insert an empty line before the signature separator.")
-
-(custom-autoload (quote message-signature-insert-empty-line) "message" t)
-
-(define-mail-user-agent (quote message-user-agent) (quote message-mail) (quote message-send-and-exit) (quote message-kill-buffer) (quote message-send-hook))
-
-(autoload (quote message-mode) "message" "\
+(autoload 'message-mode "message" "\
Major mode for editing mail and news to be sent.
Like Text Mode but with these additional commands:\\<message-mode-map>
C-c C-s `message-send' (send the message) C-c C-c `message-send-and-exit'
@@ -17797,9 +17954,10 @@ C-c C-f move to a header field (and create it if there isn't):
C-c C-f C-w move to Fcc C-c C-f C-r move to Reply-To
C-c C-f C-u move to Summary C-c C-f C-n move to Newsgroups
C-c C-f C-k move to Keywords C-c C-f C-d move to Distribution
- C-c C-f C-o move to From (\"Originator\")
+ C-c C-f C-o move to From (\"Originator\")
C-c C-f C-f move to Followup-To
C-c C-f C-m move to Mail-Followup-To
+ C-c C-f C-e move to Expires
C-c C-f C-i cycle through Importance values
C-c C-f s change subject and append \"(was: <Old Subject>)\"
C-c C-f x crossposting with FollowUp-To header and note in body
@@ -17826,7 +17984,7 @@ M-RET `message-newline-and-reformat' (break the line and reformat).
\(fn)" t nil)
-(autoload (quote message-mail) "message" "\
+(autoload 'message-mail "message" "\
Start editing a mail message to be sent.
OTHER-HEADERS is an alist of header/value pairs. CONTINUE says whether
to continue editing a message already being composed. SWITCH-FUNCTION
@@ -17834,73 +17992,73 @@ is a function used to switch to and display the mail buffer.
\(fn &optional TO SUBJECT OTHER-HEADERS CONTINUE SWITCH-FUNCTION YANK-ACTION SEND-ACTIONS)" t nil)
-(autoload (quote message-news) "message" "\
+(autoload 'message-news "message" "\
Start editing a news article to be sent.
\(fn &optional NEWSGROUPS SUBJECT)" t nil)
-(autoload (quote message-reply) "message" "\
+(autoload 'message-reply "message" "\
Start editing a reply to the article in the current buffer.
\(fn &optional TO-ADDRESS WIDE)" t nil)
-(autoload (quote message-wide-reply) "message" "\
+(autoload 'message-wide-reply "message" "\
Make a \"wide\" reply to the message in the current buffer.
\(fn &optional TO-ADDRESS)" t nil)
-(autoload (quote message-followup) "message" "\
+(autoload 'message-followup "message" "\
Follow up to the message in the current buffer.
If TO-NEWSGROUPS, use that as the new Newsgroups line.
\(fn &optional TO-NEWSGROUPS)" t nil)
-(autoload (quote message-cancel-news) "message" "\
+(autoload 'message-cancel-news "message" "\
Cancel an article you posted.
If ARG, allow editing of the cancellation message.
\(fn &optional ARG)" t nil)
-(autoload (quote message-supersede) "message" "\
+(autoload 'message-supersede "message" "\
Start composing a message to supersede the current message.
This is done simply by taking the old article and adding a Supersedes
header line with the old Message-ID.
\(fn)" t nil)
-(autoload (quote message-recover) "message" "\
+(autoload 'message-recover "message" "\
Reread contents of current buffer from its last auto-save file.
\(fn)" t nil)
-(autoload (quote message-forward) "message" "\
+(autoload 'message-forward "message" "\
Forward the current message via mail.
Optional NEWS will use news to forward instead of mail.
Optional DIGEST will use digest to forward.
\(fn &optional NEWS DIGEST)" t nil)
-(autoload (quote message-forward-make-body) "message" "\
+(autoload 'message-forward-make-body "message" "\
Not documented
\(fn FORWARD-BUFFER &optional DIGEST)" nil nil)
-(autoload (quote message-forward-rmail-make-body) "message" "\
+(autoload 'message-forward-rmail-make-body "message" "\
Not documented
\(fn FORWARD-BUFFER)" nil nil)
-(autoload (quote message-insinuate-rmail) "message" "\
+(autoload 'message-insinuate-rmail "message" "\
Let RMAIL use message to forward.
\(fn)" t nil)
-(autoload (quote message-resend) "message" "\
+(autoload 'message-resend "message" "\
Resend the current article to ADDRESS.
\(fn ADDRESS)" t nil)
-(autoload (quote message-bounce) "message" "\
+(autoload 'message-bounce "message" "\
Re-mail the current message.
This only makes sense if the current message is a bounce message that
contains some mail you have written which has been bounced back to
@@ -17908,27 +18066,27 @@ you.
\(fn)" t nil)
-(autoload (quote message-mail-other-window) "message" "\
+(autoload 'message-mail-other-window "message" "\
Like `message-mail' command, but display mail buffer in another window.
\(fn &optional TO SUBJECT)" t nil)
-(autoload (quote message-mail-other-frame) "message" "\
+(autoload 'message-mail-other-frame "message" "\
Like `message-mail' command, but display mail buffer in another frame.
\(fn &optional TO SUBJECT)" t nil)
-(autoload (quote message-news-other-window) "message" "\
+(autoload 'message-news-other-window "message" "\
Start editing a news article to be sent.
\(fn &optional NEWSGROUPS SUBJECT)" t nil)
-(autoload (quote message-news-other-frame) "message" "\
+(autoload 'message-news-other-frame "message" "\
Start editing a news article to be sent.
\(fn &optional NEWSGROUPS SUBJECT)" t nil)
-(autoload (quote bold-region) "message" "\
+(autoload 'message-bold-region "message" "\
Bold all nonblank characters in the region.
Works by overstriking characters.
Called from program, takes two arguments START and END
@@ -17936,7 +18094,7 @@ which specify the range to operate on.
\(fn START END)" t nil)
-(autoload (quote unbold-region) "message" "\
+(autoload 'message-unbold-region "message" "\
Remove all boldness (overstruck characters) in the region.
Called from program, takes two arguments START and END
which specify the range to operate on.
@@ -17946,10 +18104,10 @@ which specify the range to operate on.
;;;***
;;;### (autoloads (metapost-mode metafont-mode) "meta-mode" "progmodes/meta-mode.el"
-;;;;;; (17842 56332))
+;;;;;; (18161 20996))
;;; Generated autoloads from progmodes/meta-mode.el
-(autoload (quote metafont-mode) "meta-mode" "\
+(autoload 'metafont-mode "meta-mode" "\
Major mode for editing Metafont sources.
Special commands:
\\{meta-mode-map}
@@ -17959,7 +18117,7 @@ Turning on Metafont mode calls the value of the variables
\(fn)" t nil)
-(autoload (quote metapost-mode) "meta-mode" "\
+(autoload 'metapost-mode "meta-mode" "\
Major mode for editing MetaPost sources.
Special commands:
\\{meta-mode-map}
@@ -17973,16 +18131,16 @@ Turning on MetaPost mode calls the value of the variable
;;;### (autoloads (metamail-region metamail-buffer metamail-interpret-body
;;;;;; metamail-interpret-header) "metamail" "mail/metamail.el"
-;;;;;; (17842 55035))
+;;;;;; (18088 55110))
;;; Generated autoloads from mail/metamail.el
-(autoload (quote metamail-interpret-header) "metamail" "\
+(autoload 'metamail-interpret-header "metamail" "\
Interpret a header part of a MIME message in current buffer.
Its body part is not interpreted at all.
\(fn)" t nil)
-(autoload (quote metamail-interpret-body) "metamail" "\
+(autoload 'metamail-interpret-body "metamail" "\
Interpret a body part of a MIME message in current buffer.
Optional argument VIEWMODE specifies the value of the
EMACS_VIEW_MODE environment variable (defaulted to 1).
@@ -17992,7 +18150,7 @@ Its header part is not interpreted at all.
\(fn &optional VIEWMODE NODISPLAY)" t nil)
-(autoload (quote metamail-buffer) "metamail" "\
+(autoload 'metamail-buffer "metamail" "\
Process current buffer through `metamail'.
Optional argument VIEWMODE specifies the value of the
EMACS_VIEW_MODE environment variable (defaulted to 1).
@@ -18003,7 +18161,7 @@ redisplayed as output is inserted.
\(fn &optional VIEWMODE BUFFER NODISPLAY)" t nil)
-(autoload (quote metamail-region) "metamail" "\
+(autoload 'metamail-region "metamail" "\
Process current region through 'metamail'.
Optional argument VIEWMODE specifies the value of the
EMACS_VIEW_MODE environment variable (defaulted to 1).
@@ -18018,22 +18176,22 @@ redisplayed as output is inserted.
;;;### (autoloads (mh-fully-kill-draft mh-send-letter mh-user-agent-compose
;;;;;; mh-smail-batch mh-smail-other-window mh-smail) "mh-comp"
-;;;;;; "mh-e/mh-comp.el" (17842 55144))
+;;;;;; "mh-e/mh-comp.el" (18128 32656))
;;; Generated autoloads from mh-e/mh-comp.el
-(autoload (quote mh-smail) "mh-comp" "\
+(autoload 'mh-smail "mh-comp" "\
Compose a message with the MH mail system.
See `mh-send' for more details on composing mail.
\(fn)" t nil)
-(autoload (quote mh-smail-other-window) "mh-comp" "\
+(autoload 'mh-smail-other-window "mh-comp" "\
Compose a message with the MH mail system in other window.
See `mh-send' for more details on composing mail.
\(fn)" t nil)
-(autoload (quote mh-smail-batch) "mh-comp" "\
+(autoload 'mh-smail-batch "mh-comp" "\
Compose a message with the MH mail system.
This function does not prompt the user for any header fields, and
@@ -18048,9 +18206,9 @@ applications should use `mh-user-agent-compose'.
\(fn &optional TO SUBJECT OTHER-HEADERS &rest IGNORED)" nil nil)
-(define-mail-user-agent (quote mh-e-user-agent) (quote mh-user-agent-compose) (quote mh-send-letter) (quote mh-fully-kill-draft) (quote mh-before-send-letter-hook))
+(define-mail-user-agent 'mh-e-user-agent 'mh-user-agent-compose 'mh-send-letter 'mh-fully-kill-draft 'mh-before-send-letter-hook)
-(autoload (quote mh-user-agent-compose) "mh-comp" "\
+(autoload 'mh-user-agent-compose "mh-comp" "\
Set up mail composition draft with the MH mail system.
This is the `mail-user-agent' entry point to MH-E. This function
conforms to the contract specified by `define-mail-user-agent'
@@ -18069,7 +18227,7 @@ ignored.
\(fn &optional TO SUBJECT OTHER-HEADERS CONTINUE SWITCH-FUNCTION YANK-ACTION SEND-ACTIONS)" nil nil)
-(autoload (quote mh-send-letter) "mh-comp" "\
+(autoload 'mh-send-letter "mh-comp" "\
Save draft and send message.
When you are all through editing a message, you send it with this
@@ -18093,7 +18251,7 @@ use `mh-send-prog' to tell MH-E the name.
\(fn &optional ARG)" t nil)
-(autoload (quote mh-fully-kill-draft) "mh-comp" "\
+(autoload 'mh-fully-kill-draft "mh-comp" "\
Quit editing and delete draft message.
If for some reason you are not happy with the draft, you can use
@@ -18105,16 +18263,16 @@ delete the draft message.
;;;***
-;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (17842 55144))
+;;;### (autoloads (mh-version) "mh-e" "mh-e/mh-e.el" (18152 13227))
;;; Generated autoloads from mh-e/mh-e.el
-(put (quote mh-progs) (quote risky-local-variable) t)
+(put 'mh-progs 'risky-local-variable t)
-(put (quote mh-lib) (quote risky-local-variable) t)
+(put 'mh-lib 'risky-local-variable t)
-(put (quote mh-lib-progs) (quote risky-local-variable) t)
+(put 'mh-lib-progs 'risky-local-variable t)
-(autoload (quote mh-version) "mh-e" "\
+(autoload 'mh-version "mh-e" "\
Display version information about MH-E and the MH mail handling system.
\(fn)" t nil)
@@ -18122,10 +18280,10 @@ Display version information about MH-E and the MH mail handling system.
;;;***
;;;### (autoloads (mh-folder-mode mh-nmail mh-rmail) "mh-folder"
-;;;;;; "mh-e/mh-folder.el" (17842 55144))
+;;;;;; "mh-e/mh-folder.el" (18123 35153))
;;; Generated autoloads from mh-e/mh-folder.el
-(autoload (quote mh-rmail) "mh-folder" "\
+(autoload 'mh-rmail "mh-folder" "\
Incorporate new mail with MH.
Scan an MH folder if ARG is non-nil.
@@ -18134,7 +18292,7 @@ the MH mail system.
\(fn &optional ARG)" t nil)
-(autoload (quote mh-nmail) "mh-folder" "\
+(autoload 'mh-nmail "mh-folder" "\
Check for new mail in inbox folder.
Scan an MH folder if ARG is non-nil.
@@ -18143,7 +18301,7 @@ the MH mail system.
\(fn &optional ARG)" t nil)
-(autoload (quote mh-folder-mode) "mh-folder" "\
+(autoload 'mh-folder-mode "mh-folder" "\
Major MH-E mode for \"editing\" an MH folder scan listing.\\<mh-folder-mode-map>
You can show the message the cursor is pointing to, and step through
@@ -18204,10 +18362,10 @@ perform the operation on all messages in that region.
;;;***
;;;### (autoloads (midnight-delay-set clean-buffer-list) "midnight"
-;;;;;; "midnight.el" (17842 58279))
+;;;;;; "midnight.el" (18088 55086))
;;; Generated autoloads from midnight.el
-(autoload (quote clean-buffer-list) "midnight" "\
+(autoload 'clean-buffer-list "midnight" "\
Kill old buffers that have not been displayed recently.
The relevant variables are `clean-buffer-list-delay-general',
`clean-buffer-list-delay-special', `clean-buffer-list-kill-buffer-names',
@@ -18221,7 +18379,7 @@ lifetime, i.e., its \"age\" when it will be purged.
\(fn)" t nil)
-(autoload (quote midnight-delay-set) "midnight" "\
+(autoload 'midnight-delay-set "midnight" "\
Modify `midnight-timer' according to `midnight-delay'.
Sets the first argument SYMB (which must be symbol `midnight-delay')
to its second argument TM.
@@ -18231,7 +18389,7 @@ to its second argument TM.
;;;***
;;;### (autoloads (minibuffer-electric-default-mode) "minibuf-eldef"
-;;;;;; "minibuf-eldef.el" (17842 58279))
+;;;;;; "minibuf-eldef.el" (18088 55087))
;;; Generated autoloads from minibuf-eldef.el
(defvar minibuffer-electric-default-mode nil "\
@@ -18241,9 +18399,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `minibuffer-electric-default-mode'.")
-(custom-autoload (quote minibuffer-electric-default-mode) "minibuf-eldef" nil)
+(custom-autoload 'minibuffer-electric-default-mode "minibuf-eldef" nil)
-(autoload (quote minibuffer-electric-default-mode) "minibuf-eldef" "\
+(autoload 'minibuffer-electric-default-mode "minibuf-eldef" "\
Toggle Minibuffer Electric Default mode.
When active, minibuffer prompts that show a default value only show the
default when it's applicable -- that is, when hitting RET would yield
@@ -18259,35 +18417,35 @@ Returns non-nil if the new state is enabled.
;;;***
;;;### (autoloads (mixal-mode) "mixal-mode" "progmodes/mixal-mode.el"
-;;;;;; (17842 56332))
+;;;;;; (18088 55117))
;;; Generated autoloads from progmodes/mixal-mode.el
-(autoload (quote mixal-mode) "mixal-mode" "\
+(autoload 'mixal-mode "mixal-mode" "\
Major mode for the mixal asm language.
\\{mixal-mode-map}
\(fn)" t nil)
-(add-to-list (quote auto-mode-alist) (quote ("\\.mixal\\'" . mixal-mode)))
+(add-to-list 'auto-mode-alist '("\\.mixal\\'" . mixal-mode))
;;;***
;;;### (autoloads (malayalam-composition-function malayalam-post-read-conversion
;;;;;; malayalam-compose-region) "mlm-util" "language/mlm-util.el"
-;;;;;; (17842 58278))
+;;;;;; (18088 55109))
;;; Generated autoloads from language/mlm-util.el
-(autoload (quote malayalam-compose-region) "mlm-util" "\
+(autoload 'malayalam-compose-region "mlm-util" "\
Not documented
\(fn FROM TO)" t nil)
-(autoload (quote malayalam-post-read-conversion) "mlm-util" "\
+(autoload 'malayalam-post-read-conversion "mlm-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote malayalam-composition-function) "mlm-util" "\
+(autoload 'malayalam-composition-function "mlm-util" "\
Compose Malayalam characters in REGION, or STRING if specified.
Assume that the REGION or STRING must fully match the composable
PATTERN regexp.
@@ -18297,15 +18455,15 @@ PATTERN regexp.
;;;***
;;;### (autoloads (mm-inline-external-body mm-extern-cache-contents)
-;;;;;; "mm-extern" "gnus/mm-extern.el" (17842 54741))
+;;;;;; "mm-extern" "gnus/mm-extern.el" (18088 55104))
;;; Generated autoloads from gnus/mm-extern.el
-(autoload (quote mm-extern-cache-contents) "mm-extern" "\
+(autoload 'mm-extern-cache-contents "mm-extern" "\
Put the external-body part of HANDLE into its cache.
\(fn HANDLE)" nil nil)
-(autoload (quote mm-inline-external-body) "mm-extern" "\
+(autoload 'mm-inline-external-body "mm-extern" "\
Show the external-body part of HANDLE.
This function replaces the buffer of HANDLE with a buffer contains
the entire message.
@@ -18316,10 +18474,10 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing.
;;;***
;;;### (autoloads (mm-inline-partial) "mm-partial" "gnus/mm-partial.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/mm-partial.el
-(autoload (quote mm-inline-partial) "mm-partial" "\
+(autoload 'mm-inline-partial "mm-partial" "\
Show the partial part of HANDLE.
This function replaces the buffer of HANDLE with a buffer contains
the entire message.
@@ -18330,16 +18488,16 @@ If NO-DISPLAY is nil, display it. Otherwise, do nothing after replacing.
;;;***
;;;### (autoloads (mm-url-insert-file-contents-external mm-url-insert-file-contents)
-;;;;;; "mm-url" "gnus/mm-url.el" (17842 54741))
+;;;;;; "mm-url" "gnus/mm-url.el" (18212 46007))
;;; Generated autoloads from gnus/mm-url.el
-(autoload (quote mm-url-insert-file-contents) "mm-url" "\
+(autoload 'mm-url-insert-file-contents "mm-url" "\
Insert file contents of URL.
If `mm-url-use-external' is non-nil, use `mm-url-program'.
\(fn URL)" nil nil)
-(autoload (quote mm-url-insert-file-contents-external) "mm-url" "\
+(autoload 'mm-url-insert-file-contents-external "mm-url" "\
Insert file contents of URL using `mm-url-program'.
\(fn URL)" nil nil)
@@ -18347,10 +18505,10 @@ Insert file contents of URL using `mm-url-program'.
;;;***
;;;### (autoloads (mm-uu-dissect-text-parts mm-uu-dissect) "mm-uu"
-;;;;;; "gnus/mm-uu.el" (17842 54741))
+;;;;;; "gnus/mm-uu.el" (18212 46007))
;;; Generated autoloads from gnus/mm-uu.el
-(autoload (quote mm-uu-dissect) "mm-uu" "\
+(autoload 'mm-uu-dissect "mm-uu" "\
Dissect the current buffer and return a list of uu handles.
The optional NOHEADER means there's no header in the buffer.
MIME-TYPE specifies a MIME type and parameters, which defaults to the
@@ -18358,7 +18516,7 @@ value of `mm-uu-text-plain-type'.
\(fn &optional NOHEADER MIME-TYPE)" nil nil)
-(autoload (quote mm-uu-dissect-text-parts) "mm-uu" "\
+(autoload 'mm-uu-dissect-text-parts "mm-uu" "\
Dissect text parts and put uu handles into HANDLE.
Assume text has been decoded if DECODED is non-nil.
@@ -18367,15 +18525,15 @@ Assume text has been decoded if DECODED is non-nil.
;;;***
;;;### (autoloads (mml1991-sign mml1991-encrypt) "mml1991" "gnus/mml1991.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/mml1991.el
-(autoload (quote mml1991-encrypt) "mml1991" "\
+(autoload 'mml1991-encrypt "mml1991" "\
Not documented
\(fn CONT &optional SIGN)" nil nil)
-(autoload (quote mml1991-sign) "mml1991" "\
+(autoload 'mml1991-sign "mml1991" "\
Not documented
\(fn CONT)" nil nil)
@@ -18384,40 +18542,40 @@ Not documented
;;;### (autoloads (mml2015-self-encrypt mml2015-sign mml2015-encrypt
;;;;;; mml2015-verify-test mml2015-verify mml2015-decrypt-test mml2015-decrypt)
-;;;;;; "mml2015" "gnus/mml2015.el" (17842 54741))
+;;;;;; "mml2015" "gnus/mml2015.el" (18212 46007))
;;; Generated autoloads from gnus/mml2015.el
-(autoload (quote mml2015-decrypt) "mml2015" "\
+(autoload 'mml2015-decrypt "mml2015" "\
Not documented
\(fn HANDLE CTL)" nil nil)
-(autoload (quote mml2015-decrypt-test) "mml2015" "\
+(autoload 'mml2015-decrypt-test "mml2015" "\
Not documented
\(fn HANDLE CTL)" nil nil)
-(autoload (quote mml2015-verify) "mml2015" "\
+(autoload 'mml2015-verify "mml2015" "\
Not documented
\(fn HANDLE CTL)" nil nil)
-(autoload (quote mml2015-verify-test) "mml2015" "\
+(autoload 'mml2015-verify-test "mml2015" "\
Not documented
\(fn HANDLE CTL)" nil nil)
-(autoload (quote mml2015-encrypt) "mml2015" "\
+(autoload 'mml2015-encrypt "mml2015" "\
Not documented
\(fn CONT &optional SIGN)" nil nil)
-(autoload (quote mml2015-sign) "mml2015" "\
+(autoload 'mml2015-sign "mml2015" "\
Not documented
\(fn CONT)" nil nil)
-(autoload (quote mml2015-self-encrypt) "mml2015" "\
+(autoload 'mml2015-self-encrypt "mml2015" "\
Not documented
\(fn)" nil nil)
@@ -18425,10 +18583,10 @@ Not documented
;;;***
;;;### (autoloads (modula-2-mode) "modula2" "progmodes/modula2.el"
-;;;;;; (17276 13069))
+;;;;;; (18130 62049))
;;; Generated autoloads from progmodes/modula2.el
-(autoload (quote modula-2-mode) "modula2" "\
+(autoload 'modula-2-mode "modula2" "\
This is a mode intended to support program development in Modula-2.
All control constructs of Modula-2 can be reached by typing C-c
followed by the first character of the construct.
@@ -18457,23 +18615,23 @@ followed by the first character of the construct.
;;;***
;;;### (autoloads (unmorse-region morse-region) "morse" "play/morse.el"
-;;;;;; (17842 55395))
+;;;;;; (18088 55114))
;;; Generated autoloads from play/morse.el
-(autoload (quote morse-region) "morse" "\
+(autoload 'morse-region "morse" "\
Convert all text in a given region to morse code.
\(fn BEG END)" t nil)
-(autoload (quote unmorse-region) "morse" "\
+(autoload 'unmorse-region "morse" "\
Convert morse coded text in region to ordinary ASCII text.
\(fn BEG END)" t nil)
;;;***
-;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (mouse-sel-mode) "mouse-sel" "mouse-sel.el" (18088
+;;;;;; 55087))
;;; Generated autoloads from mouse-sel.el
(defvar mouse-sel-mode nil "\
@@ -18483,9 +18641,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `mouse-sel-mode'.")
-(custom-autoload (quote mouse-sel-mode) "mouse-sel" nil)
+(custom-autoload 'mouse-sel-mode "mouse-sel" nil)
-(autoload (quote mouse-sel-mode) "mouse-sel" "\
+(autoload 'mouse-sel-mode "mouse-sel" "\
Toggle Mouse Sel mode.
With prefix ARG, turn Mouse Sel mode on if and only if ARG is positive.
Returns the new status of Mouse Sel mode (non-nil means on).
@@ -18525,17 +18683,17 @@ primary selection and region.
;;;***
-;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (17862 6157))
+;;;### (autoloads (mpuz) "mpuz" "play/mpuz.el" (18088 55114))
;;; Generated autoloads from play/mpuz.el
-(autoload (quote mpuz) "mpuz" "\
+(autoload 'mpuz "mpuz" "\
Multiplication puzzle with GNU Emacs.
\(fn)" t nil)
;;;***
-;;;### (autoloads (msb-mode) "msb" "msb.el" (18006 55796))
+;;;### (autoloads (msb-mode) "msb" "msb.el" (18211 32385))
;;; Generated autoloads from msb.el
(defvar msb-mode nil "\
@@ -18545,9 +18703,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `msb-mode'.")
-(custom-autoload (quote msb-mode) "msb" nil)
+(custom-autoload 'msb-mode "msb" nil)
-(autoload (quote msb-mode) "msb" "\
+(autoload 'msb-mode "msb" "\
Toggle Msb mode.
With arg, turn Msb mode on if and only if arg is positive.
This mode overrides the binding(s) of `mouse-buffer-menu' to provide a
@@ -18562,10 +18720,10 @@ different buffer menu using the function `msb'.
;;;;;; describe-current-coding-system describe-current-coding-system-briefly
;;;;;; describe-coding-system describe-character-set list-charset-chars
;;;;;; read-charset list-character-sets) "mule-diag" "international/mule-diag.el"
-;;;;;; (17842 54888))
+;;;;;; (18173 8195))
;;; Generated autoloads from international/mule-diag.el
-(defvar non-iso-charset-alist (\` ((mac-roman (ascii latin-iso8859-1 mule-unicode-2500-33ff mule-unicode-0100-24ff mule-unicode-e000-ffff) mac-roman-decoder ((0 255))) (viscii (ascii vietnamese-viscii-lower vietnamese-viscii-upper) viet-viscii-nonascii-translation-table ((0 255))) (vietnamese-tcvn (ascii vietnamese-viscii-lower vietnamese-viscii-upper) viet-tcvn-nonascii-translation-table ((0 255))) (koi8-r (ascii cyrillic-iso8859-5) cyrillic-koi8-r-nonascii-translation-table ((32 255))) (alternativnyj (ascii cyrillic-iso8859-5) cyrillic-alternativnyj-nonascii-translation-table ((32 255))) (koi8-u (ascii cyrillic-iso8859-5 mule-unicode-0100-24ff) cyrillic-koi8-u-nonascii-translation-table ((32 255))) (big5 (ascii chinese-big5-1 chinese-big5-2) decode-big5-char ((32 127) ((161 254) 64 126 161 254))) (sjis (ascii katakana-jisx0201 japanese-jisx0208) decode-sjis-char ((32 127 161 223) ((129 159 224 239) 64 126 128 252))))) "\
+(defvar non-iso-charset-alist `((mac-roman (ascii latin-iso8859-1 mule-unicode-2500-33ff mule-unicode-0100-24ff mule-unicode-e000-ffff) mac-roman-decoder ((0 255))) (viscii (ascii vietnamese-viscii-lower vietnamese-viscii-upper) viet-viscii-nonascii-translation-table ((0 255))) (vietnamese-tcvn (ascii vietnamese-viscii-lower vietnamese-viscii-upper) viet-tcvn-nonascii-translation-table ((0 255))) (koi8-r (ascii cyrillic-iso8859-5) cyrillic-koi8-r-nonascii-translation-table ((32 255))) (alternativnyj (ascii cyrillic-iso8859-5) cyrillic-alternativnyj-nonascii-translation-table ((32 255))) (koi8-u (ascii cyrillic-iso8859-5 mule-unicode-0100-24ff) cyrillic-koi8-u-nonascii-translation-table ((32 255))) (big5 (ascii chinese-big5-1 chinese-big5-2) decode-big5-char ((32 127) ((161 254) 64 126 161 254))) (sjis (ascii katakana-jisx0201 japanese-jisx0208) decode-sjis-char ((32 127 161 223) ((129 159 224 239) 64 126 128 252)))) "\
Alist of charset names vs the corresponding information.
This is mis-named for historical reasons. The charsets are actually
non-built-in ones. They correspond to Emacs coding systems, not Emacs
@@ -18596,7 +18754,7 @@ TO2, or...
The second form is used for 2-byte codes. The car part is the ranges
of the first byte, and the cdr part is the ranges of the second byte.")
-(autoload (quote list-character-sets) "mule-diag" "\
+(autoload 'list-character-sets "mule-diag" "\
Display a list of all character sets.
The ID-NUM column contains a charset identification number for
@@ -18618,7 +18776,7 @@ but still shows the full information.
\(fn ARG)" t nil)
-(autoload (quote read-charset) "mule-diag" "\
+(autoload 'read-charset "mule-diag" "\
Read a character set from the minibuffer, prompting with string PROMPT.
It must be an Emacs character set listed in the variable `charset-list'
or a non-ISO character set listed in the variable
@@ -18632,7 +18790,7 @@ detailed meanings of these arguments.
\(fn PROMPT &optional DEFAULT-VALUE INITIAL-INPUT)" nil nil)
-(autoload (quote list-charset-chars) "mule-diag" "\
+(autoload 'list-charset-chars "mule-diag" "\
Display a list of characters in the specified character set.
This can list both Emacs `official' (ISO standard) charsets and the
characters encoded by various Emacs coding systems which correspond to
@@ -18640,17 +18798,17 @@ PC `codepages' and other coded character sets. See `non-iso-charset-alist'.
\(fn CHARSET)" t nil)
-(autoload (quote describe-character-set) "mule-diag" "\
+(autoload 'describe-character-set "mule-diag" "\
Display information about built-in character set CHARSET.
\(fn CHARSET)" t nil)
-(autoload (quote describe-coding-system) "mule-diag" "\
+(autoload 'describe-coding-system "mule-diag" "\
Display information about CODING-SYSTEM.
\(fn CODING-SYSTEM)" t nil)
-(autoload (quote describe-current-coding-system-briefly) "mule-diag" "\
+(autoload 'describe-current-coding-system-briefly "mule-diag" "\
Display coding systems currently used in a brief format in echo area.
The format is \"F[..],K[..],T[..],P>[..],P<[..], default F[..],P<[..],P<[..]\",
@@ -18675,12 +18833,12 @@ in place of `..':
\(fn)" t nil)
-(autoload (quote describe-current-coding-system) "mule-diag" "\
+(autoload 'describe-current-coding-system "mule-diag" "\
Display coding systems currently used, in detail.
\(fn)" t nil)
-(autoload (quote list-coding-systems) "mule-diag" "\
+(autoload 'list-coding-systems "mule-diag" "\
Display a list of all coding systems.
This shows the mnemonic letter, name, and description of each coding system.
@@ -18689,24 +18847,24 @@ but still contains full information about each coding system.
\(fn &optional ARG)" t nil)
-(autoload (quote list-coding-categories) "mule-diag" "\
+(autoload 'list-coding-categories "mule-diag" "\
Display a list of all coding categories.
\(fn)" nil nil)
-(autoload (quote describe-font) "mule-diag" "\
+(autoload 'describe-font "mule-diag" "\
Display information about a font whose name is FONTNAME.
The font must be already used by Emacs.
\(fn FONTNAME)" t nil)
-(autoload (quote describe-fontset) "mule-diag" "\
+(autoload 'describe-fontset "mule-diag" "\
Display information about FONTSET.
This shows which font is used for which character(s).
\(fn FONTSET)" t nil)
-(autoload (quote list-fontsets) "mule-diag" "\
+(autoload 'list-fontsets "mule-diag" "\
Display a list of all fontsets.
This shows the name, size, and style of each fontset.
With prefix arg, also list the fonts contained in each fontset;
@@ -18714,12 +18872,12 @@ see the function `describe-fontset' for the format of the list.
\(fn ARG)" t nil)
-(autoload (quote list-input-methods) "mule-diag" "\
+(autoload 'list-input-methods "mule-diag" "\
Display information about all input methods.
\(fn)" t nil)
-(autoload (quote mule-diag) "mule-diag" "\
+(autoload 'mule-diag "mule-diag" "\
Display diagnosis of the multilingual environment (Mule).
This shows various information related to the current multilingual
@@ -18736,16 +18894,16 @@ system which uses fontsets).
;;;;;; coding-system-translation-table-for-decode coding-system-pre-write-conversion
;;;;;; coding-system-post-read-conversion lookup-nested-alist set-nested-alist
;;;;;; truncate-string-to-width store-substring string-to-sequence)
-;;;;;; "mule-util" "international/mule-util.el" (17842 54888))
+;;;;;; "mule-util" "international/mule-util.el" (18088 55108))
;;; Generated autoloads from international/mule-util.el
-(autoload (quote string-to-sequence) "mule-util" "\
+(autoload 'string-to-sequence "mule-util" "\
Convert STRING to a sequence of TYPE which contains characters in STRING.
TYPE should be `list' or `vector'.
\(fn STRING TYPE)" nil nil)
-(make-obsolete (quote string-to-sequence) "use `string-to-list' or `string-to-vector'." "22.1")
+(make-obsolete 'string-to-sequence "use `string-to-list' or `string-to-vector'." "22.1")
(defsubst string-to-list (string) "\
Return a list of characters in STRING." (append string nil))
@@ -18753,12 +18911,12 @@ Return a list of characters in STRING." (append string nil))
(defsubst string-to-vector (string) "\
Return a vector of characters in STRING." (vconcat string))
-(autoload (quote store-substring) "mule-util" "\
+(autoload 'store-substring "mule-util" "\
Embed OBJ (string or character) at index IDX of STRING.
\(fn STRING IDX OBJ)" nil nil)
-(autoload (quote truncate-string-to-width) "mule-util" "\
+(autoload 'truncate-string-to-width "mule-util" "\
Truncate string STR to end at column END-COLUMN.
The optional 3rd arg START-COLUMN, if non-nil, specifies the starting
column; that means to return the characters occupying columns
@@ -18795,7 +18953,7 @@ You can use a nested alist to store any Lisp object (ENTRY) for a key
sequence KEYSEQ, where KEYSEQ is a sequence of KEY-ELEMENT. KEYSEQ
can be a string, a vector, or a list." (and obj (listp obj) (listp (cdr obj))))
-(autoload (quote set-nested-alist) "mule-util" "\
+(autoload 'set-nested-alist "mule-util" "\
Set ENTRY for KEYSEQ in a nested alist ALIST.
Optional 4th arg LEN non-nil means the first LEN elements in KEYSEQ
is considered.
@@ -18805,7 +18963,7 @@ See the documentation of `nested-alist-p' for more detail.
\(fn KEYSEQ ENTRY ALIST &optional LEN BRANCHES)" nil nil)
-(autoload (quote lookup-nested-alist) "mule-util" "\
+(autoload 'lookup-nested-alist "mule-util" "\
Look up key sequence KEYSEQ in nested alist ALIST. Return the definition.
Optional 1st argument LEN specifies the length of KEYSEQ.
Optional 2nd argument START specifies index of the starting key.
@@ -18819,41 +18977,41 @@ Optional 3rd argument NIL-FOR-TOO-LONG non-nil means return nil
\(fn KEYSEQ ALIST &optional LEN START NIL-FOR-TOO-LONG)" nil nil)
-(autoload (quote coding-system-post-read-conversion) "mule-util" "\
+(autoload 'coding-system-post-read-conversion "mule-util" "\
Return the value of CODING-SYSTEM's `post-read-conversion' property.
\(fn CODING-SYSTEM)" nil nil)
-(autoload (quote coding-system-pre-write-conversion) "mule-util" "\
+(autoload 'coding-system-pre-write-conversion "mule-util" "\
Return the value of CODING-SYSTEM's `pre-write-conversion' property.
\(fn CODING-SYSTEM)" nil nil)
-(autoload (quote coding-system-translation-table-for-decode) "mule-util" "\
+(autoload 'coding-system-translation-table-for-decode "mule-util" "\
Return the value of CODING-SYSTEM's `translation-table-for-decode' property.
\(fn CODING-SYSTEM)" nil nil)
-(autoload (quote coding-system-translation-table-for-encode) "mule-util" "\
+(autoload 'coding-system-translation-table-for-encode "mule-util" "\
Return the value of CODING-SYSTEM's `translation-table-for-encode' property.
\(fn CODING-SYSTEM)" nil nil)
-(autoload (quote detect-coding-with-priority) "mule-util" "\
+(autoload 'detect-coding-with-priority "mule-util" "\
Detect a coding system of the text between FROM and TO with PRIORITY-LIST.
PRIORITY-LIST is an alist of coding categories vs the corresponding
coding systems ordered by priority.
\(fn FROM TO PRIORITY-LIST)" nil (quote macro))
-(autoload (quote detect-coding-with-language-environment) "mule-util" "\
+(autoload 'detect-coding-with-language-environment "mule-util" "\
Detect a coding system of the text between FROM and TO with LANG-ENV.
The detection takes into account the coding system priorities for the
language environment LANG-ENV.
\(fn FROM TO LANG-ENV)" nil nil)
-(autoload (quote char-displayable-p) "mule-util" "\
+(autoload 'char-displayable-p "mule-util" "\
Return non-nil if we should be able to display CHAR.
On a multi-font display, the test is only whether there is an
appropriate font from the selected frame's fontset to display CHAR's
@@ -18865,7 +19023,7 @@ basis, this may not be accurate.
;;;***
;;;### (autoloads (mwheel-install mouse-wheel-mode) "mwheel" "mwheel.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55087))
;;; Generated autoloads from mwheel.el
(defvar mouse-wheel-mode nil "\
@@ -18875,16 +19033,16 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `mouse-wheel-mode'.")
-(custom-autoload (quote mouse-wheel-mode) "mwheel" nil)
+(custom-autoload 'mouse-wheel-mode "mwheel" nil)
-(autoload (quote mouse-wheel-mode) "mwheel" "\
+(autoload 'mouse-wheel-mode "mwheel" "\
Toggle mouse wheel support.
With prefix argument ARG, turn on if positive, otherwise off.
Return non-nil if the new state is enabled.
\(fn &optional ARG)" t nil)
-(autoload (quote mwheel-install) "mwheel" "\
+(autoload 'mwheel-install "mwheel" "\
Enable mouse wheel support.
\(fn &optional UNINSTALL)" nil nil)
@@ -18894,91 +19052,91 @@ Enable mouse wheel support.
;;;### (autoloads (network-connection network-connection-to-service
;;;;;; whois-reverse-lookup whois finger ftp run-dig dns-lookup-host
;;;;;; nslookup nslookup-host route arp netstat ipconfig ping traceroute)
-;;;;;; "net-utils" "net/net-utils.el" (17891 7215))
+;;;;;; "net-utils" "net/net-utils.el" (18088 55112))
;;; Generated autoloads from net/net-utils.el
-(autoload (quote traceroute) "net-utils" "\
+(autoload 'traceroute "net-utils" "\
Run traceroute program for TARGET.
\(fn TARGET)" t nil)
-(autoload (quote ping) "net-utils" "\
+(autoload 'ping "net-utils" "\
Ping HOST.
If your system's ping continues until interrupted, you can try setting
`ping-program-options'.
\(fn HOST)" t nil)
-(autoload (quote ipconfig) "net-utils" "\
+(autoload 'ipconfig "net-utils" "\
Run ipconfig program.
\(fn)" t nil)
-(defalias (quote ifconfig) (quote ipconfig))
+(defalias 'ifconfig 'ipconfig)
-(autoload (quote netstat) "net-utils" "\
+(autoload 'netstat "net-utils" "\
Run netstat program.
\(fn)" t nil)
-(autoload (quote arp) "net-utils" "\
+(autoload 'arp "net-utils" "\
Run the arp program.
\(fn)" t nil)
-(autoload (quote route) "net-utils" "\
+(autoload 'route "net-utils" "\
Run the route program.
\(fn)" t nil)
-(autoload (quote nslookup-host) "net-utils" "\
+(autoload 'nslookup-host "net-utils" "\
Lookup the DNS information for HOST.
\(fn HOST)" t nil)
-(autoload (quote nslookup) "net-utils" "\
+(autoload 'nslookup "net-utils" "\
Run nslookup program.
\(fn)" t nil)
-(autoload (quote dns-lookup-host) "net-utils" "\
+(autoload 'dns-lookup-host "net-utils" "\
Lookup the DNS information for HOST (name or IP address).
\(fn HOST)" t nil)
-(autoload (quote run-dig) "net-utils" "\
+(autoload 'run-dig "net-utils" "\
Run dig program.
\(fn HOST)" t nil)
-(autoload (quote ftp) "net-utils" "\
+(autoload 'ftp "net-utils" "\
Run ftp program.
\(fn HOST)" t nil)
-(autoload (quote finger) "net-utils" "\
+(autoload 'finger "net-utils" "\
Finger USER on HOST.
\(fn USER HOST)" t nil)
-(autoload (quote whois) "net-utils" "\
+(autoload 'whois "net-utils" "\
Send SEARCH-STRING to server defined by the `whois-server-name' variable.
If `whois-guess-server' is non-nil, then try to deduce the correct server
from SEARCH-STRING. With argument, prompt for whois server.
\(fn ARG SEARCH-STRING)" t nil)
-(autoload (quote whois-reverse-lookup) "net-utils" "\
+(autoload 'whois-reverse-lookup "net-utils" "\
Not documented
\(fn)" t nil)
-(autoload (quote network-connection-to-service) "net-utils" "\
+(autoload 'network-connection-to-service "net-utils" "\
Open a network connection to SERVICE on HOST.
\(fn HOST SERVICE)" t nil)
-(autoload (quote network-connection) "net-utils" "\
+(autoload 'network-connection "net-utils" "\
Open a network connection to HOST on PORT.
\(fn HOST PORT)" t nil)
@@ -18990,18 +19148,18 @@ Open a network connection to HOST on PORT.
;;;;;; uncomment-region comment-kill comment-set-column comment-indent
;;;;;; comment-indent-default comment-normalize-vars comment-multi-line
;;;;;; comment-padding comment-style comment-column) "newcomment"
-;;;;;; "newcomment.el" (17992 30877))
+;;;;;; "newcomment.el" (18210 13714))
;;; Generated autoloads from newcomment.el
-(defalias (quote indent-for-comment) (quote comment-indent))
+(defalias 'indent-for-comment 'comment-indent)
-(defalias (quote set-comment-column) (quote comment-set-column))
+(defalias 'set-comment-column 'comment-set-column)
-(defalias (quote kill-comment) (quote comment-kill))
+(defalias 'kill-comment 'comment-kill)
-(defalias (quote indent-new-comment-line) (quote comment-indent-new-line))
+(defalias 'indent-new-comment-line 'comment-indent-new-line)
-(defvar comment-use-syntax (quote undecided) "\
+(defvar comment-use-syntax 'undecided "\
Non-nil if syntax-tables can be used instead of regexps.
Can also be `undecided' which means that a somewhat expensive test will
be used to try to determine whether syntax-tables should be trusted
@@ -19010,12 +19168,12 @@ Major modes should set this variable.")
(defvar comment-column 32 "\
Column to indent right-margin comments to.
-Each mode establishes a different default value for this variable; you
+Each mode may establish a different default value for this variable; you
can set the value for a particular mode using that mode's hook.
-Comments might be indented to a value smaller than this in order
-not to go beyond `comment-fill-column'.")
+Comments might be indented to a different value in order not to go beyond
+`comment-fill-column' or in order to align them with surrounding comments.")
-(custom-autoload (quote comment-column) "newcomment" t)
+(custom-autoload 'comment-column "newcomment" t)
(put 'comment-column 'safe-local-variable 'integerp)
(defvar comment-start nil "\
@@ -19037,7 +19195,7 @@ Regexp to match the end of a comment plus everything up to its body.")
Should be an empty string if comments are terminated by end-of-line.")
(put 'comment-end 'safe-local-variable 'string-or-null-p)
-(defvar comment-indent-function (quote comment-indent-default) "\
+(defvar comment-indent-function 'comment-indent-default "\
Function to compute desired indentation for a comment.
This function is called with no args with point at the beginning of
the comment's starting delimiter and should return either the desired
@@ -19051,11 +19209,11 @@ The function has no args.
Applicable at least in modes for languages like fixed-format Fortran where
comments always start in column zero.")
-(defvar comment-style (quote plain) "\
+(defvar comment-style 'indent-or-triple "\
Style to be used for `comment-region'.
See `comment-styles' for a list of available styles.")
-(custom-autoload (quote comment-style) "newcomment" t)
+(custom-autoload 'comment-style "newcomment" t)
(defvar comment-padding " " "\
Padding string that `comment-region' puts between comment chars and text.
@@ -19065,7 +19223,7 @@ of the corresponding number of spaces.
Extra spacing between the comment characters and the comment text
makes the comment easier to read. Default is 1. nil means 0.")
-(custom-autoload (quote comment-padding) "newcomment" t)
+(custom-autoload 'comment-padding "newcomment" t)
(defvar comment-multi-line nil "\
Non-nil means `comment-indent-new-line' continues comments.
@@ -19076,9 +19234,9 @@ customize this variable.
It also affects \\[indent-new-comment-line]. However, if you want this
behavior for explicit filling, you might as well use \\[newline-and-indent].")
-(custom-autoload (quote comment-multi-line) "newcomment" t)
+(custom-autoload 'comment-multi-line "newcomment" t)
-(autoload (quote comment-normalize-vars) "newcomment" "\
+(autoload 'comment-normalize-vars "newcomment" "\
Check and setup the variables needed by other commenting functions.
Functions autoloaded from newcomment.el, being entry points, should call
this function before any other, so the rest of the code can assume that
@@ -19086,18 +19244,18 @@ the variables are properly set.
\(fn &optional NOERROR)" nil nil)
-(autoload (quote comment-indent-default) "newcomment" "\
+(autoload 'comment-indent-default "newcomment" "\
Default for `comment-indent-function'.
\(fn)" nil nil)
-(autoload (quote comment-indent) "newcomment" "\
+(autoload 'comment-indent "newcomment" "\
Indent this line's comment to `comment-column', or insert an empty comment.
If CONTINUE is non-nil, use the `comment-continue' markers if any.
\(fn &optional CONTINUE)" t nil)
-(autoload (quote comment-set-column) "newcomment" "\
+(autoload 'comment-set-column "newcomment" "\
Set the comment column based on point.
With no ARG, set the comment column to the current column.
With just minus as arg, kill any comment on this line.
@@ -19106,20 +19264,20 @@ With any other arg, set comment column to indentation of the previous comment
\(fn ARG)" t nil)
-(autoload (quote comment-kill) "newcomment" "\
+(autoload 'comment-kill "newcomment" "\
Kill the comment on this line, if any.
With prefix ARG, kill comments on that many lines starting with this one.
\(fn ARG)" t nil)
-(autoload (quote uncomment-region) "newcomment" "\
+(autoload 'uncomment-region "newcomment" "\
Uncomment each line in the BEG .. END region.
The numeric prefix ARG can specify a number of chars to remove from the
comment markers.
\(fn BEG END &optional ARG)" t nil)
-(autoload (quote comment-region) "newcomment" "\
+(autoload 'comment-region "newcomment" "\
Comment or uncomment each line in the region.
With just \\[universal-argument] prefix arg, uncomment each line in region BEG .. END.
Numeric prefix ARG means use ARG comment characters.
@@ -19133,21 +19291,21 @@ The strings used as comment starts are built from
\(fn BEG END &optional ARG)" t nil)
-(autoload (quote comment-box) "newcomment" "\
+(autoload 'comment-box "newcomment" "\
Comment out the BEG .. END region, putting it inside a box.
The numeric prefix ARG specifies how many characters to add to begin- and
end- comment markers additionally to what `comment-add' already specifies.
\(fn BEG END &optional ARG)" t nil)
-(autoload (quote comment-or-uncomment-region) "newcomment" "\
+(autoload 'comment-or-uncomment-region "newcomment" "\
Call `comment-region', unless the region only consists of comments,
in which case call `uncomment-region'. If a prefix arg is given, it
is passed on to the respective function.
\(fn BEG END &optional ARG)" t nil)
-(autoload (quote comment-dwim) "newcomment" "\
+(autoload 'comment-dwim "newcomment" "\
Call the comment command you want (Do What I Mean).
If the region is active and `transient-mark-mode' is on, call
`comment-region' (unless it only consists of comments, in which
@@ -19163,9 +19321,9 @@ You can configure `comment-style' to change the way regions are commented.
Non-nil means to only auto-fill inside comments.
This has no effect in modes that do not define a comment syntax.")
-(custom-autoload (quote comment-auto-fill-only-comments) "newcomment" t)
+(custom-autoload 'comment-auto-fill-only-comments "newcomment" t)
-(autoload (quote comment-indent-new-line) "newcomment" "\
+(autoload 'comment-indent-new-line "newcomment" "\
Break line at point and indent, continuing comment if within one.
This indents the body of the continued comment
under the previous comment line.
@@ -19186,17 +19344,17 @@ unless optional argument SOFT is non-nil.
;;;### (autoloads (newsticker-show-news newsticker-start-ticker newsticker-start
;;;;;; newsticker-ticker-running-p newsticker-running-p) "newsticker"
-;;;;;; "net/newsticker.el" (17873 44590))
+;;;;;; "net/newsticker.el" (18088 55112))
;;; Generated autoloads from net/newsticker.el
-(autoload (quote newsticker-running-p) "newsticker" "\
+(autoload 'newsticker-running-p "newsticker" "\
Check whether newsticker is running.
Return t if newsticker is running, nil otherwise. Newsticker is
considered to be running if the newsticker timer list is not empty.
\(fn)" nil nil)
-(autoload (quote newsticker-ticker-running-p) "newsticker" "\
+(autoload 'newsticker-ticker-running-p "newsticker" "\
Check whether newsticker's actual ticker is running.
Return t if ticker is running, nil otherwise. Newsticker is
considered to be running if the newsticker timer list is not
@@ -19204,7 +19362,7 @@ empty.
\(fn)" nil nil)
-(autoload (quote newsticker-start) "newsticker" "\
+(autoload 'newsticker-start "newsticker" "\
Start the newsticker.
Start the timers for display and retrieval. If the newsticker, i.e. the
timers, are running already a warning message is printed unless
@@ -19213,14 +19371,14 @@ Run `newsticker-start-hook' if newsticker was not running already.
\(fn &optional DO-NOT-COMPLAIN-IF-RUNNING)" t nil)
-(autoload (quote newsticker-start-ticker) "newsticker" "\
+(autoload 'newsticker-start-ticker "newsticker" "\
Start newsticker's ticker (but not the news retrieval).
Start display timer for the actual ticker if wanted and not
running already.
\(fn)" t nil)
-(autoload (quote newsticker-show-news) "newsticker" "\
+(autoload 'newsticker-show-news "newsticker" "\
Switch to newsticker buffer. You may want to bind this to a key.
\(fn)" t nil)
@@ -19228,21 +19386,21 @@ Switch to newsticker buffer. You may want to bind this to a key.
;;;***
;;;### (autoloads (nndiary-generate-nov-databases) "nndiary" "gnus/nndiary.el"
-;;;;;; (17992 30878))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/nndiary.el
-(autoload (quote nndiary-generate-nov-databases) "nndiary" "\
+(autoload 'nndiary-generate-nov-databases "nndiary" "\
Generate NOV databases in all nndiary directories.
\(fn &optional SERVER)" t nil)
;;;***
-;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (17842
-;;;;;; 54741))
+;;;### (autoloads (nndoc-add-type) "nndoc" "gnus/nndoc.el" (18212
+;;;;;; 46007))
;;; Generated autoloads from gnus/nndoc.el
-(autoload (quote nndoc-add-type) "nndoc" "\
+(autoload 'nndoc-add-type "nndoc" "\
Add document DEFINITION to the list of nndoc document definitions.
If POSITION is nil or `last', the definition will be added
as the last checked definition, if t or `first', add as the
@@ -19254,10 +19412,10 @@ symbol in the alist.
;;;***
;;;### (autoloads (nnfolder-generate-active-file) "nnfolder" "gnus/nnfolder.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/nnfolder.el
-(autoload (quote nnfolder-generate-active-file) "nnfolder" "\
+(autoload 'nnfolder-generate-active-file "nnfolder" "\
Look for mbox folders in the nnfolder directory and make them into groups.
This command does not work if you use short group names.
@@ -19266,10 +19424,10 @@ This command does not work if you use short group names.
;;;***
;;;### (autoloads (nnkiboze-generate-groups) "nnkiboze" "gnus/nnkiboze.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/nnkiboze.el
-(autoload (quote nnkiboze-generate-groups) "nnkiboze" "\
+(autoload 'nnkiboze-generate-groups "nnkiboze" "\
\"Usage: emacs -batch -l nnkiboze -f nnkiboze-generate-groups\".
Finds out what articles are to be part of the nnkiboze groups.
@@ -19278,10 +19436,10 @@ Finds out what articles are to be part of the nnkiboze groups.
;;;***
;;;### (autoloads (nnml-generate-nov-databases) "nnml" "gnus/nnml.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/nnml.el
-(autoload (quote nnml-generate-nov-databases) "nnml" "\
+(autoload 'nnml-generate-nov-databases "nnml" "\
Generate NOV databases in all nnml directories.
\(fn &optional SERVER)" t nil)
@@ -19289,20 +19447,20 @@ Generate NOV databases in all nnml directories.
;;;***
;;;### (autoloads (nnsoup-revert-variables nnsoup-set-variables nnsoup-pack-replies)
-;;;;;; "nnsoup" "gnus/nnsoup.el" (17842 54741))
+;;;;;; "nnsoup" "gnus/nnsoup.el" (18212 46007))
;;; Generated autoloads from gnus/nnsoup.el
-(autoload (quote nnsoup-pack-replies) "nnsoup" "\
+(autoload 'nnsoup-pack-replies "nnsoup" "\
Make an outbound package of SOUP replies.
\(fn)" t nil)
-(autoload (quote nnsoup-set-variables) "nnsoup" "\
+(autoload 'nnsoup-set-variables "nnsoup" "\
Use the SOUP methods for posting news and mailing mail.
\(fn)" t nil)
-(autoload (quote nnsoup-revert-variables) "nnsoup" "\
+(autoload 'nnsoup-revert-variables "nnsoup" "\
Revert posting and mailing methods to the standard Emacs methods.
\(fn)" t nil)
@@ -19310,21 +19468,21 @@ Revert posting and mailing methods to the standard Emacs methods.
;;;***
;;;### (autoloads (disable-command enable-command disabled-command-function)
-;;;;;; "novice" "novice.el" (17842 58279))
+;;;;;; "novice" "novice.el" (18088 55087))
;;; Generated autoloads from novice.el
-(defvar disabled-command-function (quote disabled-command-function) "\
+(defvar disabled-command-function 'disabled-command-function "\
Function to call to handle disabled commands.
If nil, the feature is disabled, i.e., all commands work normally.")
-(define-obsolete-variable-alias (quote disabled-command-hook) (quote disabled-command-function) "22.1")
+(define-obsolete-variable-alias 'disabled-command-hook 'disabled-command-function "22.1")
-(autoload (quote disabled-command-function) "novice" "\
+(autoload 'disabled-command-function "novice" "\
Not documented
\(fn &rest IGNORE)" nil nil)
-(autoload (quote enable-command) "novice" "\
+(autoload 'enable-command "novice" "\
Allow COMMAND to be executed without special confirmation from now on.
COMMAND must be a symbol.
This command alters the user's .emacs file so that this will apply
@@ -19332,7 +19490,7 @@ to future sessions.
\(fn COMMAND)" t nil)
-(autoload (quote disable-command) "novice" "\
+(autoload 'disable-command "novice" "\
Require special confirmation to execute COMMAND from now on.
COMMAND must be a symbol.
This command alters the user's .emacs file so that this will apply
@@ -19343,10 +19501,10 @@ to future sessions.
;;;***
;;;### (autoloads (nroff-mode) "nroff-mode" "textmodes/nroff-mode.el"
-;;;;;; (17842 58277))
+;;;;;; (18120 34753))
;;; Generated autoloads from textmodes/nroff-mode.el
-(autoload (quote nroff-mode) "nroff-mode" "\
+(autoload 'nroff-mode "nroff-mode" "\
Major mode for editing text intended for nroff to format.
\\{nroff-mode-map}
Turning on Nroff mode runs `text-mode-hook', then `nroff-mode-hook'.
@@ -19358,10 +19516,10 @@ closing requests for requests that are used in matched pairs.
;;;***
;;;### (autoloads (octave-help) "octave-hlp" "progmodes/octave-hlp.el"
-;;;;;; (17842 56332))
+;;;;;; (18088 55117))
;;; Generated autoloads from progmodes/octave-hlp.el
-(autoload (quote octave-help) "octave-hlp" "\
+(autoload 'octave-help "octave-hlp" "\
Get help on Octave symbols from the Octave info files.
Look up KEY in the function, operator and variable indices of the files
specified by `octave-help-files'.
@@ -19372,10 +19530,10 @@ If KEY is not a string, prompt for it with completion.
;;;***
;;;### (autoloads (inferior-octave) "octave-inf" "progmodes/octave-inf.el"
-;;;;;; (17842 56332))
+;;;;;; (18164 24097))
;;; Generated autoloads from progmodes/octave-inf.el
-(autoload (quote inferior-octave) "octave-inf" "\
+(autoload 'inferior-octave "octave-inf" "\
Run an inferior Octave process, I/O via `inferior-octave-buffer'.
This buffer is put in Inferior Octave mode. See `inferior-octave-mode'.
@@ -19390,20 +19548,20 @@ startup file, `~/.emacs-octave'.
\(fn &optional ARG)" t nil)
-(defalias (quote run-octave) (quote inferior-octave))
+(defalias 'run-octave 'inferior-octave)
;;;***
;;;### (autoloads (octave-mode) "octave-mod" "progmodes/octave-mod.el"
-;;;;;; (17842 56332))
+;;;;;; (18203 37789))
;;; Generated autoloads from progmodes/octave-mod.el
-(autoload (quote octave-mode) "octave-mod" "\
+(autoload 'octave-mode "octave-mod" "\
Major mode for editing Octave code.
This mode makes it easier to write Octave code by helping with
indentation, doing some of the typing for you (with Abbrev mode) and by
-showing keywords, comments, strings, etc. in different faces (with
+showing keywords, comments, strings, etc.. in different faces (with
Font Lock mode on terminals that support it).
Octave itself is a high-level language, primarily intended for numerical
@@ -19413,7 +19571,7 @@ can also be stored in files, and it can be used in a batch mode (which
is why you need this mode!).
The latest released version of Octave is always available via anonymous
-ftp from bevo.che.wisc.edu in the directory `/pub/octave'. Complete
+ftp from ftp.octave.org in the directory `/pub/octave'. Complete
source and binaries for several popular systems are available.
Type \\[list-abbrevs] to display the built-in abbrevs for Octave keywords.
@@ -19426,43 +19584,39 @@ Keybindings
Variables you can use to customize Octave mode
==============================================
-octave-auto-indent
+`octave-auto-indent'
Non-nil means indent current line after a semicolon or space.
Default is nil.
-octave-auto-newline
+`octave-auto-newline'
Non-nil means auto-insert a newline and indent after a semicolon.
Default is nil.
-octave-blink-matching-block
+`octave-blink-matching-block'
Non-nil means show matching begin of block when inserting a space,
newline or semicolon after an else or end keyword. Default is t.
-octave-block-offset
+`octave-block-offset'
Extra indentation applied to statements in block structures.
Default is 2.
-octave-continuation-offset
+`octave-continuation-offset'
Extra indentation applied to Octave continuation lines.
Default is 4.
-octave-continuation-string
+`octave-continuation-string'
String used for Octave continuation lines.
Default is a backslash.
-octave-mode-startup-message
- nil means do not display the Octave mode startup message.
- Default is t.
-
-octave-send-echo-input
+`octave-send-echo-input'
Non-nil means always display `inferior-octave-buffer' after sending a
command to the inferior Octave process.
-octave-send-line-auto-forward
+`octave-send-line-auto-forward'
Non-nil means always go to the next unsent line of Octave code after
sending a line to the inferior Octave process.
-octave-send-echo-input
+`octave-send-echo-input'
Non-nil means echo input sent to the inferior Octave process.
Turning on Octave mode runs the hook `octave-mode-hook'.
@@ -19470,19 +19624,15 @@ Turning on Octave mode runs the hook `octave-mode-hook'.
To begin using this mode for all `.m' files that you edit, add the
following lines to your `.emacs' file:
- (autoload 'octave-mode \"octave-mod\" nil t)
- (setq auto-mode-alist
- (cons '(\"\\\\.m$\" . octave-mode) auto-mode-alist))
+ (add-to-list 'auto-mode-alist '(\"\\\\.m\\\\'\" . octave-mode))
-To automatically turn on the abbrev, auto-fill and font-lock features,
+To automatically turn on the abbrev and auto-fill features,
add the following lines to your `.emacs' file as well:
(add-hook 'octave-mode-hook
(lambda ()
(abbrev-mode 1)
- (auto-fill-mode 1)
- (if (eq window-system 'x)
- (font-lock-mode 1))))
+ (auto-fill-mode 1)))
To submit a problem report, enter \\[octave-submit-bug-report] from an Octave mode buffer.
This automatically sets up a mail buffer with version information
@@ -19495,14 +19645,17 @@ including a reproducible test case and send the message.
;;;### (autoloads (org-export-icalendar-combine-agenda-files org-export-icalendar-all-agenda-files
;;;;;; org-export-icalendar-this-file org-diary org-tags-view org-todo-list
-;;;;;; org-agenda-list org-cycle-agenda-files org-batch-agenda org-agenda
-;;;;;; org-remember-handler org-remember org-remember-apply-template
-;;;;;; org-remember-annotation org-store-link orgtbl-mode turn-on-orgtbl
-;;;;;; org-global-cycle org-cycle org-mode) "org" "textmodes/org.el"
-;;;;;; (17922 37459))
+;;;;;; org-agenda-list org-cycle-agenda-files org-batch-store-agenda-views
+;;;;;; org-store-agenda-views org-batch-agenda-csv org-batch-agenda
+;;;;;; org-agenda org-agenda-to-appt org-remember-handler org-remember
+;;;;;; org-remember-apply-template org-remember-annotation org-open-at-point-global
+;;;;;; org-insert-link-global org-store-link orgtbl-mode turn-on-orgtbl
+;;;;;; org-run-like-in-org-mode turn-on-orgstruct++ turn-on-orgstruct
+;;;;;; orgstruct-mode org-global-cycle org-cycle org-mode) "org"
+;;;;;; "textmodes/org.el" (18208 48754))
;;; Generated autoloads from textmodes/org.el
-(autoload (quote org-mode) "org" "\
+(autoload 'org-mode "org" "\
Outline-based notes management and organizer, alias
\"Carsten's outline-mode for keeping track of everything.\"
@@ -19523,7 +19676,7 @@ The following commands are available:
\(fn)" t nil)
-(autoload (quote org-cycle) "org" "\
+(autoload 'org-cycle "org" "\
Visibility cycling for Org-mode.
- When this function is called with a prefix argument, rotate the entire
@@ -19548,27 +19701,71 @@ Visibility cycling for Org-mode.
`indent-relative', like TAB normally does. See the option
`org-cycle-emulate-tab' for details.
-- Special case: if point is the the beginning of the buffer and there is
+- Special case: if point is at the beginning of the buffer and there is
no headline in line 1, this function will act as if called with prefix arg.
+ But only if also the variable `org-cycle-global-at-bob' is t.
\(fn &optional ARG)" t nil)
-(autoload (quote org-global-cycle) "org" "\
+(autoload 'org-global-cycle "org" "\
Cycle the global visibility. For details see `org-cycle'.
\(fn &optional ARG)" t nil)
-(autoload (quote turn-on-orgtbl) "org" "\
+(autoload 'orgstruct-mode "org" "\
+Toggle the minor more `orgstruct-mode'.
+This mode is for using Org-mode structure commands in other modes.
+The following key behave as if Org-mode was active, if the cursor
+is on a headline, or on a plain list item (both in the definition
+of Org-mode).
+
+M-up Move entry/item up
+M-down Move entry/item down
+M-left Promote
+M-right Demote
+M-S-up Move entry/item up
+M-S-down Move entry/item down
+M-S-left Promote subtree
+M-S-right Demote subtree
+M-q Fill paragraph and items like in Org-mode
+C-c ^ Sort entries
+C-c - Cycle list bullet
+TAB Cycle item visibility
+M-RET Insert new heading/item
+S-M-RET Insert new TODO heading / Chekbox item
+C-c C-c Set tags / toggle checkbox
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'turn-on-orgstruct "org" "\
+Unconditionally turn on `orgstruct-mode'.
+
+\(fn)" nil nil)
+
+(autoload 'turn-on-orgstruct++ "org" "\
+Unconditionally turn on `orgstruct-mode', and force org-mode indentations.
+In addition to setting orgstruct-mode, this also exports all indentation and
+autofilling variables from org-mode into the buffer. Note that turning
+off orgstruct-mode will *not* remove these additonal settings.
+
+\(fn)" nil nil)
+
+(autoload 'org-run-like-in-org-mode "org" "\
+Not documented
+
+\(fn CMD)" nil nil)
+
+(autoload 'turn-on-orgtbl "org" "\
Unconditionally turn on `orgtbl-mode'.
\(fn)" nil nil)
-(autoload (quote orgtbl-mode) "org" "\
+(autoload 'orgtbl-mode "org" "\
The `org-mode' table editor as a minor mode for use in other modes.
\(fn &optional ARG)" t nil)
-(autoload (quote org-store-link) "org" "\
+(autoload 'org-store-link "org" "\
\\<org-mode-map>Store an org-link to the current location.
This link can later be inserted into an org-buffer with
\\[org-insert-link].
@@ -19578,7 +19775,20 @@ For file links, arg negates `org-context-in-file-links'.
\(fn ARG)" t nil)
-(autoload (quote org-remember-annotation) "org" "\
+(autoload 'org-insert-link-global "org" "\
+Insert a link like Org-mode does.
+This command can be called in any mode to insert a link in Org-mode syntax.
+
+\(fn)" t nil)
+
+(autoload 'org-open-at-point-global "org" "\
+Follow a link like Org-mode does.
+This command can be called in any mode to follow a link that has
+Org-mode syntax.
+
+\(fn)" t nil)
+
+(autoload 'org-remember-annotation "org" "\
Return a link to the current location as an annotation for remember.el.
If you are using Org-mode files as target for data storage with
remember.el, then the annotations should include a link compatible with the
@@ -19586,21 +19796,21 @@ conventions in Org-mode. This function returns such a link.
\(fn)" nil nil)
-(autoload (quote org-remember-apply-template) "org" "\
+(autoload 'org-remember-apply-template "org" "\
Initialize *remember* buffer with template, invoke `org-mode'.
This function should be placed into `remember-mode-hook' and in fact requires
to be run from that hook to fucntion properly.
\(fn &optional USE-CHAR SKIP-INTERACTIVE)" nil nil)
-(autoload (quote org-remember) "org" "\
+(autoload 'org-remember "org" "\
Call `remember'. If this is already a remember buffer, re-apply template.
If there is an active region, make sure remember uses it as initial content
of the remember buffer.
-\(fn)" t nil)
+\(fn &optional ORG-FORCE-REMEMBER-TEMPLATE-CHAR)" t nil)
-(autoload (quote org-remember-handler) "org" "\
+(autoload 'org-remember-handler "org" "\
Store stuff from remember.el into an org file.
First prompts for an org file. If the user just presses return, the value
of `org-default-notes-file' is used.
@@ -19612,7 +19822,7 @@ find a better place. Then press RET or <left> or <right> in insert the note.
Key Cursor position Note gets inserted
-----------------------------------------------------------------------------
-RET buffer-start as level 2 heading at end of file
+RET buffer-start as level 1 heading at end of file
RET on headline as sublevel of the heading at cursor
RET no heading at cursor position, level taken from context.
Or use prefix arg to specify level manually.
@@ -19621,8 +19831,10 @@ RET no heading at cursor position, level taken from context.
So the fastest way to store the note is to press RET RET to append it to
the default file. This way your current train of thought is not
-interrupted, in accordance with the principles of remember.el. But with
-little extra effort, you can push it directly to the correct location.
+interrupted, in accordance with the principles of remember.el.
+You can also get the fast execution without prompting by using
+C-u C-c C-c to exit the remember buffer. See also the variable
+`org-remember-store-without-prompt'.
Before being stored away, the function ensures that the text has a
headline, i.e. a first line that starts with a \"*\". If not, a headline
@@ -19636,11 +19848,30 @@ See also the variable `org-reverse-note-order'.
\(fn)" nil nil)
-(autoload (quote org-agenda) "org" "\
+(autoload 'org-agenda-to-appt "org" "\
+Activate appointments found in `org-agenda-files'.
+When prefixed, prompt for a regular expression and use it as a
+filter: only add entries if they match this regular expression.
+
+FILTER can be a string. In this case, use this string as a
+regular expression to filter results.
+
+FILTER can also be an alist, with the car of each cell being
+either 'headline or 'category. For example:
+
+ '((headline \"IMPORTANT\")
+ (category \"Work\"))
+
+will only add headlines containing IMPORTANT or headlines
+belonging to the category \"Work\".
+
+\(fn &optional FILTER)" t nil)
+
+(autoload 'org-agenda "org" "\
Dispatch agenda commands to collect entries to the agenda buffer.
-Prompts for a character to select a command. Any prefix arg will be passed
+Prompts for a command to execute. Any prefix arg will be passed
on to the selected command. The default selections are:
-g
+
a Call `org-agenda-list' to display the agenda for current day or week.
t Call `org-todo-list' to display the global todo list.
T Call `org-todo-list' to display the global todo list, select only
@@ -19648,64 +19879,120 @@ T Call `org-todo-list' to display the global todo list, select only
m Call `org-tags-view' to display headlines with tags matching
a condition (the user is prompted for the condition).
M Like `m', but select only TODO entries, no ordinary headlines.
-l Create a timeeline for the current buffer.
+L Create a timeline for the current buffer.
+e Export views to associated files.
More commands can be added by configuring the variable
`org-agenda-custom-commands'. In particular, specific tags and TODO keyword
searches can be pre-defined in this way.
If the current buffer is in Org-mode and visiting a file, you can also
-first press `1' to indicate that the agenda should be temporarily (until the
-next use of \\[org-agenda]) restricted to the current file.
+first press `<' once to indicate that the agenda should be temporarily
+\(until the next use of \\[org-agenda]) restricted to the current file.
+Pressing `<' twice means to restrict to the current subtree or region
+\(if active).
+
+\(fn ARG &optional KEYS RESTRICTION)" t nil)
+
+(autoload 'org-batch-agenda "org" "\
+Run an agenda command in batch mode and send the result to STDOUT.
+If CMD-KEY is a string of length 1, it is used as a key in
+`org-agenda-custom-commands' and triggers this command. If it is a
+longer string is is used as a tags/todo match string.
+Paramters are alternating variable names and values that will be bound
+before running the agenda command.
-\(fn ARG)" t nil)
+\(fn CMD-KEY &rest PARAMETERS)" nil (quote macro))
-(autoload (quote org-batch-agenda) "org" "\
-Run an agenda command in batch mode, send result to STDOUT.
-CMD-KEY is a string that is also a key in `org-agenda-custom-commands'.
+(autoload 'org-batch-agenda-csv "org" "\
+Run an agenda command in batch mode and send the result to STDOUT.
+If CMD-KEY is a string of length 1, it is used as a key in
+`org-agenda-custom-commands' and triggers this command. If it is a
+longer string is is used as a tags/todo match string.
Paramters are alternating variable names and values that will be bound
before running the agenda command.
+The output gives a line for each selected agenda item. Each
+item is a list of comma-separated values, like this:
+
+category,head,type,todo,tags,date,time,extra,priority-l,priority-n
+
+category The category of the item
+head The headline, without TODO kwd, TAGS and PRIORITY
+type The type of the agenda entry, can be
+ todo selected in TODO match
+ tagsmatch selected in tags match
+ diary imported from diary
+ deadline a deadline on given date
+ scheduled scheduled on given date
+ timestamp entry has timestamp on given date
+ closed entry was closed on given date
+ upcoming-deadline warning about deadline
+ past-scheduled forwarded scheduled item
+ block entry has date block including g. date
+todo The todo keyword, if any
+tags All tags including inherited ones, separated by colons
+date The relevant date, like 2007-2-14
+time The time, like 15:00-16:50
+extra Sting with extra planning info
+priority-l The priority letter if any was given
+priority-n The computed numerical priority
+agenda-day The day in the agenda where this is listed
+
\(fn CMD-KEY &rest PARAMETERS)" nil (quote macro))
-(autoload (quote org-cycle-agenda-files) "org" "\
+(autoload 'org-store-agenda-views "org" "\
+Not documented
+
+\(fn &rest PARAMETERS)" t nil)
+
+(autoload 'org-batch-store-agenda-views "org" "\
+Run all custom agenda commands that have a file argument.
+
+\(fn &rest PARAMETERS)" nil (quote macro))
+
+(autoload 'org-cycle-agenda-files "org" "\
Cycle through the files in `org-agenda-files'.
If the current buffer visits an agenda file, find the next one in the list.
If the current buffer does not, find the first agenda file.
\(fn)" t nil)
-(autoload (quote org-agenda-list) "org" "\
-Produce a weekly view from all files in variable `org-agenda-files'.
-The view will be for the current week, but from the overview buffer you
-will be able to go to other weeks.
-With one \\[universal-argument] prefix argument INCLUDE-ALL, all unfinished TODO items will
-also be shown, under the current date.
-With two \\[universal-argument] prefix argument INCLUDE-ALL, all TODO entries marked DONE
-on the days are also shown. See the variable `org-log-done' for how
-to turn on logging.
+(autoload 'org-agenda-list "org" "\
+Produce a daily/weekly view from all files in variable `org-agenda-files'.
+The view will be for the current day or week, but from the overview buffer
+you will be able to go to other days/weeks.
+
+With one \\[universal-argument] prefix argument INCLUDE-ALL,
+all unfinished TODO items will also be shown, before the agenda.
+This feature is considered obsolete, please use the TODO list or a block
+agenda instead.
+
+With a numeric prefix argument in an interactive call, the agenda will
+span INCLUDE-ALL days. Lisp programs should instead specify NDAYS to change
+the number of days. NDAYS defaults to `org-agenda-ndays'.
+
START-DAY defaults to TODAY, or to the most recent match for the weekday
given in `org-agenda-start-on-weekday'.
-NDAYS defaults to `org-agenda-ndays'.
\(fn &optional INCLUDE-ALL START-DAY NDAYS)" t nil)
-(autoload (quote org-todo-list) "org" "\
+(autoload 'org-todo-list "org" "\
Show all TODO entries from all agenda file in a single list.
The prefix arg can be used to select a specific TODO keyword and limit
the list to these. When using \\[universal-argument], you will be prompted
for a keyword. A numeric prefix directly selects the Nth keyword in
-`org-todo-keywords'.
+`org-todo-keywords-1'.
\(fn ARG)" t nil)
-(autoload (quote org-tags-view) "org" "\
+(autoload 'org-tags-view "org" "\
Show all headlines for all `org-agenda-files' matching a TAGS criterion.
The prefix arg TODO-ONLY limits the search to TODO entries.
\(fn &optional TODO-ONLY MATCH)" t nil)
-(autoload (quote org-diary) "org" "\
+(autoload 'org-diary "org" "\
Return diary information from org-files.
This function can be used in a \"sexp\" diary entry in the Emacs calendar.
It accesses org files and extracts information from those files to be
@@ -19716,6 +20003,8 @@ items should be listed. The following arguments are allowed:
date range matching the selected date. Deadlines will
also be listed, on the expiration day.
+ :sexp List entries resulting from diary-like sexps.
+
:deadline List any deadlines past due, or due within
`org-deadline-warning-days'. The listing occurs only
in the diary for *today*, not at any other date. If
@@ -19740,10 +20029,10 @@ all files listed in `org-agenda-files' will be checked automatically:
&%%(org-diary)
If you don't give any arguments (as in the example above), the default
-arguments (:deadline :scheduled :timestamp) are used. So the example above may
-also be written as
+arguments (:deadline :scheduled :timestamp :sexp) are used.
+So the example above may also be written as
- &%%(org-diary :deadline :timestamp :scheduled)
+ &%%(org-diary :deadline :timestamp :sexp :scheduled)
The function expects the lisp variables `entry' and `date' to be provided
by the caller, because this is how the calendar works. Don't use this
@@ -19751,21 +20040,21 @@ function from a program - use `org-agenda-get-day-entries' instead.
\(fn &rest ARGS)" nil nil)
-(autoload (quote org-export-icalendar-this-file) "org" "\
+(autoload 'org-export-icalendar-this-file "org" "\
Export current file as an iCalendar file.
The iCalendar file will be located in the same directory as the Org-mode
file, but with extension `.ics'.
\(fn)" t nil)
-(autoload (quote org-export-icalendar-all-agenda-files) "org" "\
+(autoload 'org-export-icalendar-all-agenda-files "org" "\
Export all files in `org-agenda-files' to iCalendar .ics files.
Each iCalendar file will be located in the same directory as the Org-mode
file, but with extension `.ics'.
\(fn)" t nil)
-(autoload (quote org-export-icalendar-combine-agenda-files) "org" "\
+(autoload 'org-export-icalendar-combine-agenda-files "org" "\
Export all files in `org-agenda-files' to a single combined iCalendar file.
The file is stored under the name `org-combined-agenda-icalendar-file'.
@@ -19773,12 +20062,96 @@ The file is stored under the name `org-combined-agenda-icalendar-file'.
;;;***
+;;;### (autoloads (org-export-as-latex org-export-region-as-latex
+;;;;;; org-replace-region-by-latex org-export-as-latex-to-buffer
+;;;;;; org-export-as-latex-batch) "org-export-latex" "textmodes/org-export-latex.el"
+;;;;;; (18214 4479))
+;;; Generated autoloads from textmodes/org-export-latex.el
+
+(autoload 'org-export-as-latex-batch "org-export-latex" "\
+Call `org-export-as-latex', may be used in batch processing as
+emacs --batch
+ --load=$HOME/lib/emacs/org.el
+ --eval \"(setq org-export-headline-levels 2)\"
+ --visit=MyFile --funcall org-export-as-latex-batch
+
+\(fn)" nil nil)
+
+(autoload 'org-export-as-latex-to-buffer "org-export-latex" "\
+Call `org-exort-as-latex` with output to a temporary buffer.
+No file is created. The prefix ARG is passed through to `org-export-as-latex'.
+
+\(fn ARG)" t nil)
+
+(autoload 'org-replace-region-by-latex "org-export-latex" "\
+Replace the region from BEG to END with its LaTeX export.
+It assumes the region has `org-mode' syntax, and then convert it to
+LaTeX. This can be used in any buffer. For example, you could
+write an itemized list in `org-mode' syntax in an LaTeX buffer and
+then use this command to convert it.
+
+\(fn BEG END)" t nil)
+
+(autoload 'org-export-region-as-latex "org-export-latex" "\
+Convert region from BEG to END in `org-mode' buffer to LaTeX.
+If prefix arg BODY-ONLY is set, omit file header, footer, and table of
+contents, and only produce the region of converted text, useful for
+cut-and-paste operations.
+If BUFFER is a buffer or a string, use/create that buffer as a target
+of the converted LaTeX. If BUFFER is the symbol `string', return the
+produced LaTeX as a string and leave not buffer behind. For example,
+a Lisp program could call this function in the following way:
+
+ (setq latex (org-export-region-as-latex beg end t 'string))
+
+When called interactively, the output buffer is selected, and shown
+in a window. A non-interactive call will only retunr the buffer.
+
+\(fn BEG END &optional BODY-ONLY BUFFER)" t nil)
+
+(autoload 'org-export-as-latex "org-export-latex" "\
+Export current buffer to a LaTeX file.
+
+\(fn ARG &optional HIDDEN EXT-PLIST TO-BUFFER BODY-ONLY)" t nil)
+
+;;;***
+
+;;;### (autoloads (org-publish-all org-publish-current-file org-publish-current-project
+;;;;;; org-publish) "org-publish" "textmodes/org-publish.el" (18214
+;;;;;; 4479))
+;;; Generated autoloads from textmodes/org-publish.el
+
+(autoload 'org-publish "org-publish" "\
+Publish the project PROJECT-NAME.
+
+\(fn PROJECT-NAME &optional FORCE)" t nil)
+
+(autoload 'org-publish-current-project "org-publish" "\
+Publish the project associated with the current file.
+With prefix argument, force publishing all files in project.
+
+\(fn &optional FORCE)" t nil)
+
+(autoload 'org-publish-current-file "org-publish" "\
+Publish the current file.
+With prefix argument, force publish the file.
+
+\(fn &optional FORCE)" t nil)
+
+(autoload 'org-publish-all "org-publish" "\
+Publish all projects.
+With prefix argument, force publish all files.
+
+\(fn &optional FORCE)" t nil)
+
+;;;***
+
;;;### (autoloads (outline-minor-mode outline-mode) "outline" "outline.el"
-;;;;;; (17952 11093))
+;;;;;; (18187 36839))
;;; Generated autoloads from outline.el
(put 'outline-regexp 'safe-local-variable 'string-or-null-p)
-(autoload (quote outline-mode) "outline" "\
+(autoload 'outline-mode "outline" "\
Set major mode for editing outlines with selective display.
Headings are lines which start with asterisks: one for major headings,
two for subheadings, etc. Lines not starting with asterisks are body lines.
@@ -19821,7 +20194,7 @@ Turning on outline mode calls the value of `text-mode-hook' and then of
\(fn)" t nil)
-(autoload (quote outline-minor-mode) "outline" "\
+(autoload 'outline-minor-mode "outline" "\
Toggle Outline minor mode.
With arg, turn Outline minor mode on if arg is positive, off otherwise.
See the command `outline-mode' for more information on this mode.
@@ -19830,8 +20203,8 @@ See the command `outline-mode' for more information on this mode.
;;;***
-;;;### (autoloads nil "paragraphs" "textmodes/paragraphs.el" (17842
-;;;;;; 58277))
+;;;### (autoloads nil "paragraphs" "textmodes/paragraphs.el" (18088
+;;;;;; 55120))
;;; Generated autoloads from textmodes/paragraphs.el
(put 'paragraph-start 'safe-local-variable 'stringp)
(put 'paragraph-separate 'safe-local-variable 'stringp)
@@ -19845,7 +20218,7 @@ See the command `outline-mode' for more information on this mode.
;;;***
-;;;### (autoloads (show-paren-mode) "paren" "paren.el" (18016 8765))
+;;;### (autoloads (show-paren-mode) "paren" "paren.el" (18088 55087))
;;; Generated autoloads from paren.el
(defvar show-paren-mode nil "\
@@ -19855,9 +20228,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `show-paren-mode'.")
-(custom-autoload (quote show-paren-mode) "paren" nil)
+(custom-autoload 'show-paren-mode "paren" nil)
-(autoload (quote show-paren-mode) "paren" "\
+(autoload 'show-paren-mode "paren" "\
Toggle Show Paren mode.
With prefix ARG, turn Show Paren mode on if and only if ARG is positive.
Returns the new status of Show Paren mode (non-nil means on).
@@ -19870,10 +20243,10 @@ in `show-paren-style' after `show-paren-delay' seconds of Emacs idle time.
;;;***
;;;### (autoloads (parse-time-string) "parse-time" "calendar/parse-time.el"
-;;;;;; (17957 43164))
+;;;;;; (18088 55094))
;;; Generated autoloads from calendar/parse-time.el
-(autoload (quote parse-time-string) "parse-time" "\
+(autoload 'parse-time-string "parse-time" "\
Parse the time-string STRING into (SEC MIN HOUR DAY MON YEAR DOW DST TZ).
The values are identical to those of `decode-time', but any values that are
unknown are returned as nil.
@@ -19882,11 +20255,11 @@ unknown are returned as nil.
;;;***
-;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (17842
-;;;;;; 56332))
+;;;### (autoloads (pascal-mode) "pascal" "progmodes/pascal.el" (18088
+;;;;;; 55117))
;;; Generated autoloads from progmodes/pascal.el
-(autoload (quote pascal-mode) "pascal" "\
+(autoload 'pascal-mode "pascal" "\
Major mode for editing Pascal code. \\<pascal-mode-map>
TAB indents for Pascal code. Delete converts tabs to spaces as it moves back.
@@ -19936,10 +20309,10 @@ no args, if that value is non-nil.
;;;***
;;;### (autoloads (pc-bindings-mode) "pc-mode" "emulation/pc-mode.el"
-;;;;;; (17842 54264))
+;;;;;; (18088 55097))
;;; Generated autoloads from emulation/pc-mode.el
-(autoload (quote pc-bindings-mode) "pc-mode" "\
+(autoload 'pc-bindings-mode "pc-mode" "\
Set up certain key bindings for PC compatibility.
The keys affected are:
Delete (and its variants) delete forward instead of backward.
@@ -19954,7 +20327,7 @@ C-Escape does list-buffers.
;;;***
;;;### (autoloads (pc-selection-mode pc-selection-mode) "pc-select"
-;;;;;; "emulation/pc-select.el" (17842 54264))
+;;;;;; "emulation/pc-select.el" (18210 30826))
;;; Generated autoloads from emulation/pc-select.el
(defvar pc-selection-mode nil "\
@@ -19964,9 +20337,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `pc-selection-mode'.")
-(custom-autoload (quote pc-selection-mode) "pc-select" nil)
+(custom-autoload 'pc-selection-mode "pc-select" nil)
-(autoload (quote pc-selection-mode) "pc-select" "\
+(autoload 'pc-selection-mode "pc-select" "\
Change mark behavior to emulate Motif, MAC or MS-Windows cut and paste style.
This mode enables Delete Selection mode and Transient Mark mode.
@@ -20026,15 +20399,15 @@ This mode enables Delete Selection mode and Transient Mark mode.
Setting this variable directly does not take effect;
you must modify it using \\[customize] or \\[pc-selection-mode].")
-(custom-autoload (quote pc-selection-mode) "pc-select" nil)
+(custom-autoload 'pc-selection-mode "pc-select" nil)
;;;***
-;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (pcomplete/cvs) "pcmpl-cvs" "pcmpl-cvs.el" (18088
+;;;;;; 55087))
;;; Generated autoloads from pcmpl-cvs.el
-(autoload (quote pcomplete/cvs) "pcmpl-cvs" "\
+(autoload 'pcomplete/cvs "pcmpl-cvs" "\
Completion rules for the `cvs' command.
\(fn)" nil nil)
@@ -20042,59 +20415,59 @@ Completion rules for the `cvs' command.
;;;***
;;;### (autoloads (pcomplete/tar pcomplete/make pcomplete/bzip2 pcomplete/gzip)
-;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (17842 58279))
+;;;;;; "pcmpl-gnu" "pcmpl-gnu.el" (18088 55087))
;;; Generated autoloads from pcmpl-gnu.el
-(autoload (quote pcomplete/gzip) "pcmpl-gnu" "\
+(autoload 'pcomplete/gzip "pcmpl-gnu" "\
Completion for `gzip'.
\(fn)" nil nil)
-(autoload (quote pcomplete/bzip2) "pcmpl-gnu" "\
+(autoload 'pcomplete/bzip2 "pcmpl-gnu" "\
Completion for `bzip2'.
\(fn)" nil nil)
-(autoload (quote pcomplete/make) "pcmpl-gnu" "\
+(autoload 'pcomplete/make "pcmpl-gnu" "\
Completion for GNU `make'.
\(fn)" nil nil)
-(autoload (quote pcomplete/tar) "pcmpl-gnu" "\
+(autoload 'pcomplete/tar "pcmpl-gnu" "\
Completion for the GNU tar utility.
\(fn)" nil nil)
-(defalias (quote pcomplete/gdb) (quote pcomplete/xargs))
+(defalias 'pcomplete/gdb 'pcomplete/xargs)
;;;***
;;;### (autoloads (pcomplete/mount pcomplete/umount pcomplete/kill)
-;;;;;; "pcmpl-linux" "pcmpl-linux.el" (17842 58279))
+;;;;;; "pcmpl-linux" "pcmpl-linux.el" (18088 55087))
;;; Generated autoloads from pcmpl-linux.el
-(autoload (quote pcomplete/kill) "pcmpl-linux" "\
+(autoload 'pcomplete/kill "pcmpl-linux" "\
Completion for GNU/Linux `kill', using /proc filesystem.
\(fn)" nil nil)
-(autoload (quote pcomplete/umount) "pcmpl-linux" "\
+(autoload 'pcomplete/umount "pcmpl-linux" "\
Completion for GNU/Linux `umount'.
\(fn)" nil nil)
-(autoload (quote pcomplete/mount) "pcmpl-linux" "\
+(autoload 'pcomplete/mount "pcmpl-linux" "\
Completion for GNU/Linux `mount'.
\(fn)" nil nil)
;;;***
-;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (pcomplete/rpm) "pcmpl-rpm" "pcmpl-rpm.el" (18088
+;;;;;; 55087))
;;; Generated autoloads from pcmpl-rpm.el
-(autoload (quote pcomplete/rpm) "pcmpl-rpm" "\
+(autoload 'pcomplete/rpm "pcmpl-rpm" "\
Completion for RedHat's `rpm' command.
These rules were taken from the output of `rpm --help' on a RedHat 6.1
system. They follow my interpretation of what followed, but since I'm
@@ -20107,44 +20480,44 @@ You can use \\[eshell-report-bug] to do so.
;;;### (autoloads (pcomplete/chgrp pcomplete/chown pcomplete/which
;;;;;; pcomplete/xargs pcomplete/rm pcomplete/rmdir pcomplete/cd)
-;;;;;; "pcmpl-unix" "pcmpl-unix.el" (17842 58279))
+;;;;;; "pcmpl-unix" "pcmpl-unix.el" (18088 55087))
;;; Generated autoloads from pcmpl-unix.el
-(autoload (quote pcomplete/cd) "pcmpl-unix" "\
+(autoload 'pcomplete/cd "pcmpl-unix" "\
Completion for `cd'.
\(fn)" nil nil)
-(defalias (quote pcomplete/pushd) (quote pcomplete/cd))
+(defalias 'pcomplete/pushd 'pcomplete/cd)
-(autoload (quote pcomplete/rmdir) "pcmpl-unix" "\
+(autoload 'pcomplete/rmdir "pcmpl-unix" "\
Completion for `rmdir'.
\(fn)" nil nil)
-(autoload (quote pcomplete/rm) "pcmpl-unix" "\
+(autoload 'pcomplete/rm "pcmpl-unix" "\
Completion for `rm'.
\(fn)" nil nil)
-(autoload (quote pcomplete/xargs) "pcmpl-unix" "\
+(autoload 'pcomplete/xargs "pcmpl-unix" "\
Completion for `xargs'.
\(fn)" nil nil)
-(defalias (quote pcomplete/time) (quote pcomplete/xargs))
+(defalias 'pcomplete/time 'pcomplete/xargs)
-(autoload (quote pcomplete/which) "pcmpl-unix" "\
+(autoload 'pcomplete/which "pcmpl-unix" "\
Completion for `which'.
\(fn)" nil nil)
-(autoload (quote pcomplete/chown) "pcmpl-unix" "\
+(autoload 'pcomplete/chown "pcmpl-unix" "\
Completion for the `chown' command.
\(fn)" nil nil)
-(autoload (quote pcomplete/chgrp) "pcmpl-unix" "\
+(autoload 'pcomplete/chgrp "pcmpl-unix" "\
Completion for the `chgrp' command.
\(fn)" nil nil)
@@ -20153,50 +20526,50 @@ Completion for the `chgrp' command.
;;;### (autoloads (pcomplete-shell-setup pcomplete-comint-setup pcomplete-list
;;;;;; pcomplete-help pcomplete-expand pcomplete-continue pcomplete-expand-and-complete
-;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (17944
-;;;;;; 62194))
+;;;;;; pcomplete-reverse pcomplete) "pcomplete" "pcomplete.el" (18088
+;;;;;; 55087))
;;; Generated autoloads from pcomplete.el
-(autoload (quote pcomplete) "pcomplete" "\
+(autoload 'pcomplete "pcomplete" "\
Support extensible programmable completion.
To use this function, just bind the TAB key to it, or add it to your
completion functions list (it should occur fairly early in the list).
\(fn &optional INTERACTIVELY)" t nil)
-(autoload (quote pcomplete-reverse) "pcomplete" "\
+(autoload 'pcomplete-reverse "pcomplete" "\
If cycling completion is in use, cycle backwards.
\(fn)" t nil)
-(autoload (quote pcomplete-expand-and-complete) "pcomplete" "\
+(autoload 'pcomplete-expand-and-complete "pcomplete" "\
Expand the textual value of the current argument.
This will modify the current buffer.
\(fn)" t nil)
-(autoload (quote pcomplete-continue) "pcomplete" "\
+(autoload 'pcomplete-continue "pcomplete" "\
Complete without reference to any cycling completions.
\(fn)" t nil)
-(autoload (quote pcomplete-expand) "pcomplete" "\
+(autoload 'pcomplete-expand "pcomplete" "\
Expand the textual value of the current argument.
This will modify the current buffer.
\(fn)" t nil)
-(autoload (quote pcomplete-help) "pcomplete" "\
+(autoload 'pcomplete-help "pcomplete" "\
Display any help information relative to the current argument.
\(fn)" t nil)
-(autoload (quote pcomplete-list) "pcomplete" "\
+(autoload 'pcomplete-list "pcomplete" "\
Show the list of possible completions for the current argument.
\(fn)" t nil)
-(autoload (quote pcomplete-comint-setup) "pcomplete" "\
+(autoload 'pcomplete-comint-setup "pcomplete" "\
Setup a comint buffer to use pcomplete.
COMPLETEF-SYM should be the symbol where the
dynamic-complete-functions are kept. For comint mode itself,
@@ -20204,7 +20577,7 @@ this is `comint-dynamic-complete-functions'.
\(fn COMPLETEF-SYM)" nil nil)
-(autoload (quote pcomplete-shell-setup) "pcomplete" "\
+(autoload 'pcomplete-shell-setup "pcomplete" "\
Setup shell-mode to use pcomplete.
\(fn)" nil nil)
@@ -20213,10 +20586,10 @@ Setup shell-mode to use pcomplete.
;;;### (autoloads (cvs-dired-use-hook cvs-dired-action cvs-status
;;;;;; cvs-update cvs-examine cvs-quickdir cvs-checkout) "pcvs"
-;;;;;; "pcvs.el" (18006 55796))
+;;;;;; "pcvs.el" (18190 46607))
;;; Generated autoloads from pcvs.el
-(autoload (quote cvs-checkout) "pcvs" "\
+(autoload 'cvs-checkout "pcvs" "\
Run a 'cvs checkout MODULES' in DIR.
Feed the output to a *cvs* buffer, display it in the current window,
and run `cvs-mode' on it.
@@ -20225,7 +20598,7 @@ With a prefix argument, prompt for cvs FLAGS to use.
\(fn MODULES DIR FLAGS &optional ROOT)" t nil)
-(autoload (quote cvs-quickdir) "pcvs" "\
+(autoload 'cvs-quickdir "pcvs" "\
Open a *cvs* buffer on DIR without running cvs.
With a prefix argument, prompt for a directory to use.
A prefix arg >8 (ex: \\[universal-argument] \\[universal-argument]),
@@ -20235,7 +20608,7 @@ FLAGS is ignored.
\(fn DIR &optional FLAGS NOSHOW)" t nil)
-(autoload (quote cvs-examine) "pcvs" "\
+(autoload 'cvs-examine "pcvs" "\
Run a `cvs -n update' in the specified DIRECTORY.
That is, check what needs to be done, but don't change the disc.
Feed the output to a *cvs* buffer and run `cvs-mode' on it.
@@ -20246,7 +20619,7 @@ Optional argument NOSHOW if non-nil means not to display the buffer.
\(fn DIRECTORY FLAGS &optional NOSHOW)" t nil)
-(autoload (quote cvs-update) "pcvs" "\
+(autoload 'cvs-update "pcvs" "\
Run a `cvs update' in the current working DIRECTORY.
Feed the output to a *cvs* buffer and run `cvs-mode' on it.
With a \\[universal-argument] prefix argument, prompt for a directory to use.
@@ -20257,7 +20630,7 @@ The prefix is also passed to `cvs-flags-query' to select the FLAGS
\(fn DIRECTORY FLAGS)" t nil)
-(autoload (quote cvs-status) "pcvs" "\
+(autoload 'cvs-status "pcvs" "\
Run a `cvs status' in the current working DIRECTORY.
Feed the output to a *cvs* buffer and run `cvs-mode' on it.
With a prefix argument, prompt for a directory and cvs FLAGS to use.
@@ -20267,22 +20640,22 @@ Optional argument NOSHOW if non-nil means not to display the buffer.
\(fn DIRECTORY FLAGS &optional NOSHOW)" t nil)
-(add-to-list (quote completion-ignored-extensions) "CVS/")
+(add-to-list 'completion-ignored-extensions "CVS/")
-(defvar cvs-dired-action (quote cvs-quickdir) "\
+(defvar cvs-dired-action 'cvs-quickdir "\
The action to be performed when opening a CVS directory.
Sensible values are `cvs-examine', `cvs-status' and `cvs-quickdir'.")
-(custom-autoload (quote cvs-dired-action) "pcvs" t)
+(custom-autoload 'cvs-dired-action "pcvs" t)
-(defvar cvs-dired-use-hook (quote (4)) "\
+(defvar cvs-dired-use-hook '(4) "\
Whether or not opening a CVS directory should run PCL-CVS.
A value of nil means never do it.
ALWAYS means to always do it unless a prefix argument is given to the
command that prompted the opening of the directory.
Anything else means to do it only if the prefix arg is equal to this value.")
-(custom-autoload (quote cvs-dired-use-hook) "pcvs" t)
+(custom-autoload 'cvs-dired-use-hook "pcvs" t)
(defun cvs-dired-noselect (dir) "\
Run `cvs-examine' if DIR is a CVS administrative directory.
@@ -20290,18 +20663,19 @@ The exact behavior is determined also by `cvs-dired-use-hook'." (when (stringp d
;;;***
-;;;### (autoloads nil "pcvs-defs" "pcvs-defs.el" (17842 58279))
+;;;### (autoloads nil "pcvs-defs" "pcvs-defs.el" (18187 36839))
;;; Generated autoloads from pcvs-defs.el
-(defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] (quote (menu-item "Directory Status" cvs-status :help "A more verbose status of a workarea"))) (define-key m [checkout] (quote (menu-item "Checkout Module" cvs-checkout :help "Check out a module from the repository"))) (define-key m [update] (quote (menu-item "Update Directory" cvs-update :help "Fetch updates from the repository"))) (define-key m [examine] (quote (menu-item "Examine Directory" cvs-examine :help "Examine the current state of a workarea"))) (fset (quote cvs-global-menu) m)))
+(defvar cvs-global-menu (let ((m (make-sparse-keymap "PCL-CVS"))) (define-key m [status] '(menu-item "Directory Status" cvs-status :help "A more verbose status of a workarea")) (define-key m [checkout] '(menu-item "Checkout Module" cvs-checkout :help "Check out a module from the repository")) (define-key m [update] '(menu-item "Update Directory" cvs-update :help "Fetch updates from the repository")) (define-key m [examine] '(menu-item "Examine Directory" cvs-examine :help "Examine the current state of a workarea")) (fset 'cvs-global-menu m)))
;;;***
;;;### (autoloads (perl-mode) "perl-mode" "progmodes/perl-mode.el"
-;;;;;; (17962 28280))
+;;;;;; (18128 36990))
;;; Generated autoloads from progmodes/perl-mode.el
+(put 'perl-indent-level 'safe-local-variable 'integerp)
-(autoload (quote perl-mode) "perl-mode" "\
+(autoload 'perl-mode "perl-mode" "\
Major mode for editing Perl code.
Expression and list commands understand all Perl brackets.
Tab indents for Perl code.
@@ -20356,10 +20730,10 @@ Turning on Perl mode runs the normal hook `perl-mode-hook'.
;;;### (autoloads (pgg-snarf-keys pgg-snarf-keys-region pgg-insert-key
;;;;;; pgg-verify pgg-verify-region pgg-sign pgg-sign-region pgg-decrypt
;;;;;; pgg-decrypt-region pgg-encrypt pgg-encrypt-symmetric pgg-encrypt-symmetric-region
-;;;;;; pgg-encrypt-region) "pgg" "pgg.el" (17842 58279))
+;;;;;; pgg-encrypt-region) "pgg" "pgg.el" (18088 55088))
;;; Generated autoloads from pgg.el
-(autoload (quote pgg-encrypt-region) "pgg" "\
+(autoload 'pgg-encrypt-region "pgg" "\
Encrypt the current region between START and END for RCPTS.
If optional argument SIGN is non-nil, do a combined sign and encrypt.
@@ -20369,7 +20743,7 @@ passphrase cache or user.
\(fn START END RCPTS &optional SIGN PASSPHRASE)" t nil)
-(autoload (quote pgg-encrypt-symmetric-region) "pgg" "\
+(autoload 'pgg-encrypt-symmetric-region "pgg" "\
Encrypt the current region between START and END symmetric with passphrase.
If optional PASSPHRASE is not specified, it will be obtained from the
@@ -20377,7 +20751,7 @@ cache or user.
\(fn START END &optional PASSPHRASE)" t nil)
-(autoload (quote pgg-encrypt-symmetric) "pgg" "\
+(autoload 'pgg-encrypt-symmetric "pgg" "\
Encrypt the current buffer using a symmetric, rather than key-pair, cipher.
If optional arguments START and END are specified, only encrypt within
@@ -20388,7 +20762,7 @@ passphrase cache or user.
\(fn &optional START END PASSPHRASE)" t nil)
-(autoload (quote pgg-encrypt) "pgg" "\
+(autoload 'pgg-encrypt "pgg" "\
Encrypt the current buffer for RCPTS.
If optional argument SIGN is non-nil, do a combined sign and encrypt.
@@ -20401,7 +20775,7 @@ passphrase cache or user.
\(fn RCPTS &optional SIGN START END PASSPHRASE)" t nil)
-(autoload (quote pgg-decrypt-region) "pgg" "\
+(autoload 'pgg-decrypt-region "pgg" "\
Decrypt the current region between START and END.
If optional PASSPHRASE is not specified, it will be obtained from the
@@ -20409,7 +20783,7 @@ passphrase cache or user.
\(fn START END &optional PASSPHRASE)" t nil)
-(autoload (quote pgg-decrypt) "pgg" "\
+(autoload 'pgg-decrypt "pgg" "\
Decrypt the current buffer.
If optional arguments START and END are specified, only decrypt within
@@ -20420,21 +20794,21 @@ passphrase cache or user.
\(fn &optional START END PASSPHRASE)" t nil)
-(autoload (quote pgg-sign-region) "pgg" "\
+(autoload 'pgg-sign-region "pgg" "\
Make the signature from text between START and END.
If the optional 3rd argument CLEARTEXT is non-nil, it does not create
a detached signature.
If this function is called interactively, CLEARTEXT is enabled
-and the the output is displayed.
+and the output is displayed.
If optional PASSPHRASE is not specified, it will be obtained from the
passphrase cache or user.
\(fn START END &optional CLEARTEXT PASSPHRASE)" t nil)
-(autoload (quote pgg-sign) "pgg" "\
+(autoload 'pgg-sign "pgg" "\
Sign the current buffer.
If the optional argument CLEARTEXT is non-nil, it does not create a
@@ -20444,14 +20818,14 @@ If optional arguments START and END are specified, only sign data
within the region.
If this function is called interactively, CLEARTEXT is enabled
-and the the output is displayed.
+and the output is displayed.
If optional PASSPHRASE is not specified, it will be obtained from the
passphrase cache or user.
\(fn &optional CLEARTEXT START END PASSPHRASE)" t nil)
-(autoload (quote pgg-verify-region) "pgg" "\
+(autoload 'pgg-verify-region "pgg" "\
Verify the current region between START and END.
If the optional 3rd argument SIGNATURE is non-nil, it is treated as
the detached signature of the current region.
@@ -20461,7 +20835,7 @@ signer's public key from `pgg-default-keyserver-address'.
\(fn START END &optional SIGNATURE FETCH)" t nil)
-(autoload (quote pgg-verify) "pgg" "\
+(autoload 'pgg-verify "pgg" "\
Verify the current buffer.
If the optional argument SIGNATURE is non-nil, it is treated as
the detached signature of the current region.
@@ -20472,17 +20846,17 @@ within the region.
\(fn &optional SIGNATURE FETCH START END)" t nil)
-(autoload (quote pgg-insert-key) "pgg" "\
+(autoload 'pgg-insert-key "pgg" "\
Insert the ASCII armored public key.
\(fn)" t nil)
-(autoload (quote pgg-snarf-keys-region) "pgg" "\
+(autoload 'pgg-snarf-keys-region "pgg" "\
Import public keys in the current region between START and END.
\(fn START END)" t nil)
-(autoload (quote pgg-snarf-keys) "pgg" "\
+(autoload 'pgg-snarf-keys "pgg" "\
Import public keys in the current buffer.
\(fn)" t nil)
@@ -20490,10 +20864,10 @@ Import public keys in the current buffer.
;;;***
;;;### (autoloads (pgg-gpg-symmetric-key-p) "pgg-gpg" "pgg-gpg.el"
-;;;;;; (17887 33207))
+;;;;;; (18088 55087))
;;; Generated autoloads from pgg-gpg.el
-(autoload (quote pgg-gpg-symmetric-key-p) "pgg-gpg" "\
+(autoload 'pgg-gpg-symmetric-key-p "pgg-gpg" "\
True if decoded armor MESSAGE-KEYS has symmetric encryption indicator.
\(fn MESSAGE-KEYS)" nil nil)
@@ -20501,10 +20875,10 @@ True if decoded armor MESSAGE-KEYS has symmetric encryption indicator.
;;;***
;;;### (autoloads (picture-mode) "picture" "textmodes/picture.el"
-;;;;;; (17842 58277))
+;;;;;; (18088 55120))
;;; Generated autoloads from textmodes/picture.el
-(autoload (quote picture-mode) "picture" "\
+(autoload 'picture-mode "picture" "\
Switch to Picture mode, in which a quarter-plane screen model is used.
\\<picture-mode-map>
Printing characters replace instead of inserting themselves with motion
@@ -20577,15 +20951,15 @@ they are not defaultly assigned to keys.
\(fn)" t nil)
-(defalias (quote edit-picture) (quote picture-mode))
+(defalias 'edit-picture 'picture-mode)
;;;***
;;;### (autoloads (po-find-file-coding-system) "po" "textmodes/po.el"
-;;;;;; (17842 58277))
+;;;;;; (18088 55120))
;;; Generated autoloads from textmodes/po.el
-(autoload (quote po-find-file-coding-system) "po" "\
+(autoload 'po-find-file-coding-system "po" "\
Return a (DECODING . ENCODING) pair, according to PO file's charset.
Called through `file-coding-system-alist', before the file is visited for real.
@@ -20593,10 +20967,10 @@ Called through `file-coding-system-alist', before the file is visited for real.
;;;***
-;;;### (autoloads (pong) "pong" "play/pong.el" (17842 55395))
+;;;### (autoloads (pong) "pong" "play/pong.el" (18088 55114))
;;; Generated autoloads from play/pong.el
-(autoload (quote pong) "pong" "\
+(autoload 'pong "pong" "\
Play pong and waste time.
This is an implementation of the classical game pong.
Move left and right bats and try to bounce the ball to your opponent.
@@ -20610,22 +20984,22 @@ pong-mode keybindings:\\<pong-mode-map>
;;;***
;;;### (autoloads (pp-eval-last-sexp pp-eval-expression pp pp-buffer
-;;;;;; pp-to-string) "pp" "emacs-lisp/pp.el" (17852 19612))
+;;;;;; pp-to-string) "pp" "emacs-lisp/pp.el" (18098 47345))
;;; Generated autoloads from emacs-lisp/pp.el
-(autoload (quote pp-to-string) "pp" "\
+(autoload 'pp-to-string "pp" "\
Return a string containing the pretty-printed representation of OBJECT.
OBJECT can be any Lisp object. Quoting characters are used as needed
to make output that `read' can handle, whenever this is possible.
\(fn OBJECT)" nil nil)
-(autoload (quote pp-buffer) "pp" "\
+(autoload 'pp-buffer "pp" "\
Prettify the current buffer with printed representation of a Lisp object.
\(fn)" nil nil)
-(autoload (quote pp) "pp" "\
+(autoload 'pp "pp" "\
Output the pretty-printed representation of OBJECT, any Lisp object.
Quoting characters are printed as needed to make output that `read'
can handle, whenever this is possible.
@@ -20633,13 +21007,13 @@ Output stream is STREAM, or value of `standard-output' (which see).
\(fn OBJECT &optional STREAM)" nil nil)
-(autoload (quote pp-eval-expression) "pp" "\
+(autoload 'pp-eval-expression "pp" "\
Evaluate EXPRESSION and pretty-print its value.
Also add the value to the front of the list in the variable `values'.
\(fn EXPRESSION)" t nil)
-(autoload (quote pp-eval-last-sexp) "pp" "\
+(autoload 'pp-eval-last-sexp "pp" "\
Run `pp-eval-expression' on sexp before point (which see).
With argument, pretty-print output into current buffer.
Ignores leading comment characters.
@@ -20666,10 +21040,10 @@ Ignores leading comment characters.
;;;;;; pr-ps-buffer-print pr-ps-buffer-using-ghostscript pr-ps-buffer-preview
;;;;;; pr-ps-directory-ps-print pr-ps-directory-print pr-ps-directory-using-ghostscript
;;;;;; pr-ps-directory-preview pr-interface) "printing" "printing.el"
-;;;;;; (18006 55796))
+;;;;;; (18211 32385))
;;; Generated autoloads from printing.el
-(autoload (quote pr-interface) "printing" "\
+(autoload 'pr-interface "printing" "\
Activate the printing interface buffer.
If BUFFER is nil, the current buffer is used for printing.
@@ -20678,7 +21052,7 @@ For more information, type \\[pr-interface-help].
\(fn &optional BUFFER)" t nil)
-(autoload (quote pr-ps-directory-preview) "printing" "\
+(autoload 'pr-ps-directory-preview "printing" "\
Preview directory using ghostview.
Interactively, the command prompts for N-UP printing number, a directory, a
@@ -20697,7 +21071,7 @@ See also documentation for `pr-list-directory'.
\(fn N-UP DIR FILE-REGEXP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-directory-using-ghostscript) "printing" "\
+(autoload 'pr-ps-directory-using-ghostscript "printing" "\
Print directory using PostScript through ghostscript.
Interactively, the command prompts for N-UP printing number, a directory, a
@@ -20716,7 +21090,7 @@ See also documentation for `pr-list-directory'.
\(fn N-UP DIR FILE-REGEXP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-directory-print) "printing" "\
+(autoload 'pr-ps-directory-print "printing" "\
Print directory using PostScript printer.
Interactively, the command prompts for N-UP printing number, a directory, a
@@ -20735,7 +21109,7 @@ See also documentation for `pr-list-directory'.
\(fn N-UP DIR FILE-REGEXP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-directory-ps-print) "printing" "\
+(autoload 'pr-ps-directory-ps-print "printing" "\
Print directory using PostScript printer or through ghostscript.
It depends on `pr-print-using-ghostscript'.
@@ -20756,7 +21130,7 @@ See also documentation for `pr-list-directory'.
\(fn N-UP DIR FILE-REGEXP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-buffer-preview) "printing" "\
+(autoload 'pr-ps-buffer-preview "printing" "\
Preview buffer using ghostview.
Interactively, the command prompts for N-UP printing number and, when you use a
@@ -20770,7 +21144,7 @@ with that name. If FILENAME is t, prompts for a file name.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-buffer-using-ghostscript) "printing" "\
+(autoload 'pr-ps-buffer-using-ghostscript "printing" "\
Print buffer using PostScript through ghostscript.
Interactively, the command prompts for N-UP printing number and, when you use a
@@ -20784,7 +21158,7 @@ that name. If FILENAME is t, prompts for a file name.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-buffer-print) "printing" "\
+(autoload 'pr-ps-buffer-print "printing" "\
Print buffer using PostScript printer.
Interactively, the command prompts for N-UP printing number and, when you use a
@@ -20798,7 +21172,7 @@ that name. If FILENAME is t, prompts for a file name.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-buffer-ps-print) "printing" "\
+(autoload 'pr-ps-buffer-ps-print "printing" "\
Print buffer using PostScript printer or through ghostscript.
It depends on `pr-print-using-ghostscript'.
@@ -20814,63 +21188,63 @@ that name. If FILENAME is t, prompts for a file name.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-region-preview) "printing" "\
+(autoload 'pr-ps-region-preview "printing" "\
Preview region using ghostview.
See also `pr-ps-buffer-preview'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-region-using-ghostscript) "printing" "\
+(autoload 'pr-ps-region-using-ghostscript "printing" "\
Print region using PostScript through ghostscript.
See also `pr-ps-buffer-using-ghostscript'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-region-print) "printing" "\
+(autoload 'pr-ps-region-print "printing" "\
Print region using PostScript printer.
See also `pr-ps-buffer-print'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-region-ps-print) "printing" "\
+(autoload 'pr-ps-region-ps-print "printing" "\
Print region using PostScript printer or through ghostscript.
See also `pr-ps-buffer-ps-print'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-mode-preview) "printing" "\
+(autoload 'pr-ps-mode-preview "printing" "\
Preview major mode using ghostview.
See also `pr-ps-buffer-preview'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-mode-using-ghostscript) "printing" "\
+(autoload 'pr-ps-mode-using-ghostscript "printing" "\
Print major mode using PostScript through ghostscript.
See also `pr-ps-buffer-using-ghostscript'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-mode-print) "printing" "\
+(autoload 'pr-ps-mode-print "printing" "\
Print major mode using PostScript printer.
See also `pr-ps-buffer-print'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-ps-mode-ps-print) "printing" "\
+(autoload 'pr-ps-mode-ps-print "printing" "\
Print major mode using PostScript or through ghostscript.
See also `pr-ps-buffer-ps-print'.
\(fn N-UP &optional FILENAME)" t nil)
-(autoload (quote pr-printify-directory) "printing" "\
+(autoload 'pr-printify-directory "printing" "\
Replace nonprinting characters in directory with printable representations.
The printable representations use ^ (for ASCII control characters) or hex.
The characters tab, linefeed, space, return and formfeed are not affected.
@@ -20885,21 +21259,21 @@ See also documentation for `pr-list-directory'.
\(fn &optional DIR FILE-REGEXP)" t nil)
-(autoload (quote pr-printify-buffer) "printing" "\
+(autoload 'pr-printify-buffer "printing" "\
Replace nonprinting characters in buffer with printable representations.
The printable representations use ^ (for ASCII control characters) or hex.
The characters tab, linefeed, space, return and formfeed are not affected.
\(fn)" t nil)
-(autoload (quote pr-printify-region) "printing" "\
+(autoload 'pr-printify-region "printing" "\
Replace nonprinting characters in region with printable representations.
The printable representations use ^ (for ASCII control characters) or hex.
The characters tab, linefeed, space, return and formfeed are not affected.
\(fn)" t nil)
-(autoload (quote pr-txt-directory) "printing" "\
+(autoload 'pr-txt-directory "printing" "\
Print directory using text printer.
Interactively, the command prompts for a directory and a file name regexp for
@@ -20912,22 +21286,22 @@ See also documentation for `pr-list-directory'.
\(fn &optional DIR FILE-REGEXP)" t nil)
-(autoload (quote pr-txt-buffer) "printing" "\
+(autoload 'pr-txt-buffer "printing" "\
Print buffer using text printer.
\(fn)" t nil)
-(autoload (quote pr-txt-region) "printing" "\
+(autoload 'pr-txt-region "printing" "\
Print region using text printer.
\(fn)" t nil)
-(autoload (quote pr-txt-mode) "printing" "\
+(autoload 'pr-txt-mode "printing" "\
Print major mode using text printer.
\(fn)" t nil)
-(autoload (quote pr-despool-preview) "printing" "\
+(autoload 'pr-despool-preview "printing" "\
Preview spooled PostScript.
Interactively, when you use a prefix argument (C-u), the command prompts the
@@ -20940,7 +21314,7 @@ PostScript image in a file with that name.
\(fn &optional FILENAME)" t nil)
-(autoload (quote pr-despool-using-ghostscript) "printing" "\
+(autoload 'pr-despool-using-ghostscript "printing" "\
Print spooled PostScript using ghostscript.
Interactively, when you use a prefix argument (C-u), the command prompts the
@@ -20953,7 +21327,7 @@ image in a file with that name.
\(fn &optional FILENAME)" t nil)
-(autoload (quote pr-despool-print) "printing" "\
+(autoload 'pr-despool-print "printing" "\
Send the spooled PostScript to the printer.
Interactively, when you use a prefix argument (C-u), the command prompts the
@@ -20966,7 +21340,7 @@ image in a file with that name.
\(fn &optional FILENAME)" t nil)
-(autoload (quote pr-despool-ps-print) "printing" "\
+(autoload 'pr-despool-ps-print "printing" "\
Send the spooled PostScript to the printer or use ghostscript to print it.
Interactively, when you use a prefix argument (C-u), the command prompts the
@@ -20979,32 +21353,32 @@ image in a file with that name.
\(fn &optional FILENAME)" t nil)
-(autoload (quote pr-ps-file-preview) "printing" "\
+(autoload 'pr-ps-file-preview "printing" "\
Preview PostScript file FILENAME.
\(fn FILENAME)" t nil)
-(autoload (quote pr-ps-file-up-preview) "printing" "\
+(autoload 'pr-ps-file-up-preview "printing" "\
Preview PostScript file FILENAME.
\(fn N-UP IFILENAME &optional OFILENAME)" t nil)
-(autoload (quote pr-ps-file-using-ghostscript) "printing" "\
+(autoload 'pr-ps-file-using-ghostscript "printing" "\
Print PostScript file FILENAME using ghostscript.
\(fn FILENAME)" t nil)
-(autoload (quote pr-ps-file-print) "printing" "\
+(autoload 'pr-ps-file-print "printing" "\
Print PostScript file FILENAME.
\(fn FILENAME)" t nil)
-(autoload (quote pr-ps-file-ps-print) "printing" "\
+(autoload 'pr-ps-file-ps-print "printing" "\
Send PostScript file FILENAME to printer or use ghostscript to print it.
\(fn FILENAME)" t nil)
-(autoload (quote pr-ps-file-up-ps-print) "printing" "\
+(autoload 'pr-ps-file-up-ps-print "printing" "\
Process a PostScript file IFILENAME and send it to printer.
Interactively, the command prompts for N-UP printing number, for an input
@@ -21022,12 +21396,12 @@ file name.
\(fn N-UP IFILENAME &optional OFILENAME)" t nil)
-(autoload (quote pr-toggle-file-duplex) "printing" "\
+(autoload 'pr-toggle-file-duplex "printing" "\
Toggle duplex for PostScript file.
\(fn)" t nil)
-(autoload (quote pr-toggle-file-tumble) "printing" "\
+(autoload 'pr-toggle-file-tumble "printing" "\
Toggle tumble for PostScript file.
If tumble is off, produces a printing suitable for binding on the left or
@@ -21037,32 +21411,32 @@ bottom.
\(fn)" t nil)
-(autoload (quote pr-toggle-file-landscape) "printing" "\
+(autoload 'pr-toggle-file-landscape "printing" "\
Toggle landscape for PostScript file.
\(fn)" t nil)
-(autoload (quote pr-toggle-ghostscript) "printing" "\
+(autoload 'pr-toggle-ghostscript "printing" "\
Toggle printing using ghostscript.
\(fn)" t nil)
-(autoload (quote pr-toggle-faces) "printing" "\
+(autoload 'pr-toggle-faces "printing" "\
Toggle printing with faces.
\(fn)" t nil)
-(autoload (quote pr-toggle-spool) "printing" "\
+(autoload 'pr-toggle-spool "printing" "\
Toggle spooling.
\(fn)" t nil)
-(autoload (quote pr-toggle-duplex) "printing" "\
+(autoload 'pr-toggle-duplex "printing" "\
Toggle duplex.
\(fn)" t nil)
-(autoload (quote pr-toggle-tumble) "printing" "\
+(autoload 'pr-toggle-tumble "printing" "\
Toggle tumble.
If tumble is off, produces a printing suitable for binding on the left or
@@ -21072,97 +21446,97 @@ bottom.
\(fn)" t nil)
-(autoload (quote pr-toggle-landscape) "printing" "\
+(autoload 'pr-toggle-landscape "printing" "\
Toggle landscape.
\(fn)" t nil)
-(autoload (quote pr-toggle-upside-down) "printing" "\
+(autoload 'pr-toggle-upside-down "printing" "\
Toggle upside-down.
\(fn)" t nil)
-(autoload (quote pr-toggle-line) "printing" "\
+(autoload 'pr-toggle-line "printing" "\
Toggle line number.
\(fn)" t nil)
-(autoload (quote pr-toggle-zebra) "printing" "\
+(autoload 'pr-toggle-zebra "printing" "\
Toggle zebra stripes.
\(fn)" t nil)
-(autoload (quote pr-toggle-header) "printing" "\
+(autoload 'pr-toggle-header "printing" "\
Toggle printing header.
\(fn)" t nil)
-(autoload (quote pr-toggle-header-frame) "printing" "\
+(autoload 'pr-toggle-header-frame "printing" "\
Toggle printing header frame.
\(fn)" t nil)
-(autoload (quote pr-toggle-lock) "printing" "\
+(autoload 'pr-toggle-lock "printing" "\
Toggle menu lock.
\(fn)" t nil)
-(autoload (quote pr-toggle-region) "printing" "\
+(autoload 'pr-toggle-region "printing" "\
Toggle auto region.
\(fn)" t nil)
-(autoload (quote pr-toggle-mode) "printing" "\
+(autoload 'pr-toggle-mode "printing" "\
Toggle auto mode.
\(fn)" t nil)
-(autoload (quote pr-customize) "printing" "\
+(autoload 'pr-customize "printing" "\
Customization of the `printing' group.
\(fn &rest IGNORE)" t nil)
-(autoload (quote lpr-customize) "printing" "\
+(autoload 'lpr-customize "printing" "\
Customization of the `lpr' group.
\(fn &rest IGNORE)" t nil)
-(autoload (quote pr-help) "printing" "\
+(autoload 'pr-help "printing" "\
Help for the printing package.
\(fn &rest IGNORE)" t nil)
-(autoload (quote pr-ps-name) "printing" "\
+(autoload 'pr-ps-name "printing" "\
Interactively select a PostScript printer.
\(fn)" t nil)
-(autoload (quote pr-txt-name) "printing" "\
+(autoload 'pr-txt-name "printing" "\
Interactively select a text printer.
\(fn)" t nil)
-(autoload (quote pr-ps-utility) "printing" "\
+(autoload 'pr-ps-utility "printing" "\
Interactively select a PostScript utility.
\(fn)" t nil)
-(autoload (quote pr-show-ps-setup) "printing" "\
+(autoload 'pr-show-ps-setup "printing" "\
Show current ps-print settings.
\(fn &rest IGNORE)" t nil)
-(autoload (quote pr-show-pr-setup) "printing" "\
+(autoload 'pr-show-pr-setup "printing" "\
Show current printing settings.
\(fn &rest IGNORE)" t nil)
-(autoload (quote pr-show-lpr-setup) "printing" "\
+(autoload 'pr-show-lpr-setup "printing" "\
Show current lpr settings.
\(fn &rest IGNORE)" t nil)
-(autoload (quote pr-ps-fast-fire) "printing" "\
+(autoload 'pr-ps-fast-fire "printing" "\
Fast fire function for PostScript printing.
If a region is active, the region will be printed instead of the whole buffer.
@@ -21225,7 +21599,7 @@ are both set to t.
\(fn N-UP &optional SELECT)" t nil)
-(autoload (quote pr-txt-fast-fire) "printing" "\
+(autoload 'pr-txt-fast-fire "printing" "\
Fast fire function for text printing.
If a region is active, the region will be printed instead of the whole buffer.
@@ -21254,10 +21628,10 @@ are both set to t.
;;;***
;;;### (autoloads (switch-to-prolog prolog-mode) "prolog" "progmodes/prolog.el"
-;;;;;; (17842 56332))
+;;;;;; (18203 37789))
;;; Generated autoloads from progmodes/prolog.el
-(autoload (quote prolog-mode) "prolog" "\
+(autoload 'prolog-mode "prolog" "\
Major mode for editing Prolog code for Prologs.
Blank lines and `%%...' separate paragraphs. `%'s start comments.
Commands:
@@ -21267,9 +21641,9 @@ if that value is non-nil.
\(fn)" t nil)
-(defalias (quote run-prolog) (quote switch-to-prolog))
+(defalias 'run-prolog 'switch-to-prolog)
-(autoload (quote switch-to-prolog) "prolog" "\
+(autoload 'switch-to-prolog "prolog" "\
Run an inferior Prolog process, input and output via buffer *prolog*.
With prefix argument \\[universal-prefix], prompt for the program to use.
@@ -21277,20 +21651,20 @@ With prefix argument \\[universal-prefix], prompt for the program to use.
;;;***
-;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (17842 58279))
+;;;### (autoloads nil "ps-bdf" "ps-bdf.el" (18088 55088))
;;; Generated autoloads from ps-bdf.el
-(defvar bdf-directory-list (if (memq system-type (quote (ms-dos windows-nt))) (list (expand-file-name "fonts/bdf" installation-directory)) (quote ("/usr/local/share/emacs/fonts/bdf"))) "\
+(defvar bdf-directory-list (if (memq system-type '(ms-dos windows-nt)) (list (expand-file-name "fonts/bdf" installation-directory)) '("/usr/local/share/emacs/fonts/bdf")) "\
*List of directories to search for `BDF' font files.
The default value is '(\"/usr/local/share/emacs/fonts/bdf\").")
;;;***
-;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (17842
-;;;;;; 56332))
+;;;### (autoloads (ps-mode) "ps-mode" "progmodes/ps-mode.el" (18210
+;;;;;; 13716))
;;; Generated autoloads from progmodes/ps-mode.el
-(autoload (quote ps-mode) "ps-mode" "\
+(autoload 'ps-mode "ps-mode" "\
Major mode for editing PostScript with GNU Emacs.
Entry to this mode calls `ps-mode-hook'.
@@ -21333,148 +21707,29 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
;;;***
-;;;### (autoloads (ps-mule-begin-page ps-mule-begin-job ps-mule-encode-header-string
-;;;;;; ps-mule-initialize ps-mule-plot-composition ps-mule-plot-string
-;;;;;; ps-mule-set-ascii-font ps-mule-prepare-ascii-font ps-multibyte-buffer)
-;;;;;; "ps-mule" "ps-mule.el" (17842 58279))
-;;; Generated autoloads from ps-mule.el
-
-(defvar ps-multibyte-buffer nil "\
-*Specifies the multi-byte buffer handling.
-
-Valid values are:
-
- nil This is the value to use the default settings which
- is by default for printing buffer with only ASCII
- and Latin characters. The default setting can be
- changed by setting the variable
- `ps-mule-font-info-database-default' differently.
- The initial value of this variable is
- `ps-mule-font-info-database-latin' (see
- documentation).
-
- `non-latin-printer' This is the value to use when you have a Japanese
- or Korean PostScript printer and want to print
- buffer with ASCII, Latin-1, Japanese (JISX0208 and
- JISX0201-Kana) and Korean characters. At present,
- it was not tested the Korean characters printing.
- If you have a korean PostScript printer, please,
- test it.
-
- `bdf-font' This is the value to use when you want to print
- buffer with BDF fonts. BDF fonts include both latin
- and non-latin fonts. BDF (Bitmap Distribution
- Format) is a format used for distributing X's font
- source file. BDF fonts are included in
- `intlfonts-1.2' which is a collection of X11 fonts
- for all characters supported by Emacs. In order to
- use this value, be sure to have installed
- `intlfonts-1.2' and set the variable
- `bdf-directory-list' appropriately (see ps-bdf.el for
- documentation of this variable).
-
- `bdf-font-except-latin' This is like `bdf-font' except that it is used
- PostScript default fonts to print ASCII and Latin-1
- characters. This is convenient when you want or
- need to use both latin and non-latin characters on
- the same buffer. See `ps-font-family',
- `ps-header-font-family' and `ps-font-info-database'.
-
-Any other value is treated as nil.")
-
-(custom-autoload (quote ps-multibyte-buffer) "ps-mule" t)
-
-(autoload (quote ps-mule-prepare-ascii-font) "ps-mule" "\
-Setup special ASCII font for STRING.
-STRING should contain only ASCII characters.
-
-\(fn STRING)" nil nil)
-
-(autoload (quote ps-mule-set-ascii-font) "ps-mule" "\
-Not documented
-
-\(fn)" nil nil)
-
-(autoload (quote ps-mule-plot-string) "ps-mule" "\
-Generate PostScript code for plotting characters in the region FROM and TO.
-
-It is assumed that all characters in this region belong to the same charset.
-
-Optional argument BG-COLOR specifies background color.
-
-Returns the value:
-
- (ENDPOS . RUN-WIDTH)
-
-Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of
-the sequence.
-
-\(fn FROM TO &optional BG-COLOR)" nil nil)
-
-(autoload (quote ps-mule-plot-composition) "ps-mule" "\
-Generate PostScript code for plotting composition in the region FROM and TO.
-
-It is assumed that all characters in this region belong to the same
-composition.
-
-Optional argument BG-COLOR specifies background color.
-
-Returns the value:
-
- (ENDPOS . RUN-WIDTH)
-
-Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of
-the sequence.
-
-\(fn FROM TO &optional BG-COLOR)" nil nil)
-
-(autoload (quote ps-mule-initialize) "ps-mule" "\
-Initialize global data for printing multi-byte characters.
-
-\(fn)" nil nil)
-
-(autoload (quote ps-mule-encode-header-string) "ps-mule" "\
-Generate PostScript code for ploting STRING by font FONTTAG.
-FONTTAG should be a string \"/h0\" or \"/h1\".
-
-\(fn STRING FONTTAG)" nil nil)
-
-(autoload (quote ps-mule-begin-job) "ps-mule" "\
-Start printing job for multi-byte chars between FROM and TO.
-This checks if all multi-byte characters in the region are printable or not.
-
-\(fn FROM TO)" nil nil)
-
-(autoload (quote ps-mule-begin-page) "ps-mule" "\
-Not documented
-
-\(fn)" nil nil)
-
-;;;***
-
;;;### (autoloads (ps-extend-face ps-extend-face-list ps-setup ps-nb-pages-region
;;;;;; ps-nb-pages-buffer ps-line-lengths ps-despool ps-spool-region-with-faces
;;;;;; ps-spool-region ps-spool-buffer-with-faces ps-spool-buffer
;;;;;; ps-print-region-with-faces ps-print-region ps-print-buffer-with-faces
;;;;;; ps-print-buffer ps-print-customize ps-print-color-p ps-paper-type
-;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (18006
-;;;;;; 55796))
+;;;;;; ps-page-dimensions-database) "ps-print" "ps-print.el" (18214
+;;;;;; 4479))
;;; Generated autoloads from ps-print.el
-(defvar ps-page-dimensions-database (list (list (quote a4) (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4") (list (quote a3) (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3") (list (quote letter) (* 72 8.5) (* 72 11.0) "Letter") (list (quote legal) (* 72 8.5) (* 72 14.0) "Legal") (list (quote letter-small) (* 72 7.68) (* 72 10.16) "LetterSmall") (list (quote tabloid) (* 72 11.0) (* 72 17.0) "Tabloid") (list (quote ledger) (* 72 17.0) (* 72 11.0) "Ledger") (list (quote statement) (* 72 5.5) (* 72 8.5) "Statement") (list (quote executive) (* 72 7.5) (* 72 10.0) "Executive") (list (quote a4small) (* 72 7.47) (* 72 10.85) "A4Small") (list (quote b4) (* 72 10.125) (* 72 14.33) "B4") (list (quote b5) (* 72 7.16) (* 72 10.125) "B5")) "\
+(defvar ps-page-dimensions-database (list (list 'a4 (/ (* 72 21.0) 2.54) (/ (* 72 29.7) 2.54) "A4") (list 'a3 (/ (* 72 29.7) 2.54) (/ (* 72 42.0) 2.54) "A3") (list 'letter (* 72 8.5) (* 72 11.0) "Letter") (list 'legal (* 72 8.5) (* 72 14.0) "Legal") (list 'letter-small (* 72 7.68) (* 72 10.16) "LetterSmall") (list 'tabloid (* 72 11.0) (* 72 17.0) "Tabloid") (list 'ledger (* 72 17.0) (* 72 11.0) "Ledger") (list 'statement (* 72 5.5) (* 72 8.5) "Statement") (list 'executive (* 72 7.5) (* 72 10.0) "Executive") (list 'a4small (* 72 7.47) (* 72 10.85) "A4Small") (list 'b4 (* 72 10.125) (* 72 14.33) "B4") (list 'b5 (* 72 7.16) (* 72 10.125) "B5")) "\
*List associating a symbolic paper type to its width, height and doc media.
See `ps-paper-type'.")
-(custom-autoload (quote ps-page-dimensions-database) "ps-print" t)
+(custom-autoload 'ps-page-dimensions-database "ps-print" t)
-(defvar ps-paper-type (quote letter) "\
+(defvar ps-paper-type 'letter "\
*Specify the size of paper to format for.
Should be one of the paper types defined in `ps-page-dimensions-database', for
example `letter', `legal' or `a4'.")
-(custom-autoload (quote ps-paper-type) "ps-print" t)
+(custom-autoload 'ps-paper-type "ps-print" t)
-(defvar ps-print-color-p (or (fboundp (quote x-color-values)) (fboundp (quote color-instance-rgb-components))) "\
+(defvar ps-print-color-p (or (fboundp 'x-color-values) (fboundp 'color-instance-rgb-components)) "\
*Specify how buffer's text color is printed.
Valid values are:
@@ -21488,14 +21743,14 @@ Valid values are:
Any other value is treated as t.")
-(custom-autoload (quote ps-print-color-p) "ps-print" t)
+(custom-autoload 'ps-print-color-p "ps-print" t)
-(autoload (quote ps-print-customize) "ps-print" "\
+(autoload 'ps-print-customize "ps-print" "\
Customization of ps-print group.
\(fn)" t nil)
-(autoload (quote ps-print-buffer) "ps-print" "\
+(autoload 'ps-print-buffer "ps-print" "\
Generate and print a PostScript image of the buffer.
Interactively, when you use a prefix argument (\\[universal-argument]), the command prompts the
@@ -21508,7 +21763,7 @@ image in a file with that name.
\(fn &optional FILENAME)" t nil)
-(autoload (quote ps-print-buffer-with-faces) "ps-print" "\
+(autoload 'ps-print-buffer-with-faces "ps-print" "\
Generate and print a PostScript image of the buffer.
Like `ps-print-buffer', but includes font, color, and underline information in
the generated image. This command works only if you are using a window system,
@@ -21516,13 +21771,13 @@ so it has a way to determine color values.
\(fn &optional FILENAME)" t nil)
-(autoload (quote ps-print-region) "ps-print" "\
+(autoload 'ps-print-region "ps-print" "\
Generate and print a PostScript image of the region.
Like `ps-print-buffer', but prints just the current region.
\(fn FROM TO &optional FILENAME)" t nil)
-(autoload (quote ps-print-region-with-faces) "ps-print" "\
+(autoload 'ps-print-region-with-faces "ps-print" "\
Generate and print a PostScript image of the region.
Like `ps-print-region', but includes font, color, and underline information in
the generated image. This command works only if you are using a window system,
@@ -21530,7 +21785,7 @@ so it has a way to determine color values.
\(fn FROM TO &optional FILENAME)" t nil)
-(autoload (quote ps-spool-buffer) "ps-print" "\
+(autoload 'ps-spool-buffer "ps-print" "\
Generate and spool a PostScript image of the buffer.
Like `ps-print-buffer' except that the PostScript image is saved in a local
buffer to be sent to the printer later.
@@ -21539,7 +21794,7 @@ Use the command `ps-despool' to send the spooled images to the printer.
\(fn)" t nil)
-(autoload (quote ps-spool-buffer-with-faces) "ps-print" "\
+(autoload 'ps-spool-buffer-with-faces "ps-print" "\
Generate and spool a PostScript image of the buffer.
Like `ps-spool-buffer', but includes font, color, and underline information in
the generated image. This command works only if you are using a window system,
@@ -21549,7 +21804,7 @@ Use the command `ps-despool' to send the spooled images to the printer.
\(fn)" t nil)
-(autoload (quote ps-spool-region) "ps-print" "\
+(autoload 'ps-spool-region "ps-print" "\
Generate a PostScript image of the region and spool locally.
Like `ps-spool-buffer', but spools just the current region.
@@ -21557,7 +21812,7 @@ Use the command `ps-despool' to send the spooled images to the printer.
\(fn FROM TO)" t nil)
-(autoload (quote ps-spool-region-with-faces) "ps-print" "\
+(autoload 'ps-spool-region-with-faces "ps-print" "\
Generate a PostScript image of the region and spool locally.
Like `ps-spool-region', but includes font, color, and underline information in
the generated image. This command works only if you are using a window system,
@@ -21567,7 +21822,7 @@ Use the command `ps-despool' to send the spooled images to the printer.
\(fn FROM TO)" t nil)
-(autoload (quote ps-despool) "ps-print" "\
+(autoload 'ps-despool "ps-print" "\
Send the spooled PostScript to the printer.
Interactively, when you use a prefix argument (\\[universal-argument]), the command prompts the
@@ -21580,7 +21835,7 @@ image in a file with that name.
\(fn &optional FILENAME)" t nil)
-(autoload (quote ps-line-lengths) "ps-print" "\
+(autoload 'ps-line-lengths "ps-print" "\
Display the correspondence between a line length and a font size.
Done using the current ps-print setup.
Try: pr -t file | awk '{printf \"%3d %s
@@ -21588,24 +21843,24 @@ Try: pr -t file | awk '{printf \"%3d %s
\(fn)" t nil)
-(autoload (quote ps-nb-pages-buffer) "ps-print" "\
+(autoload 'ps-nb-pages-buffer "ps-print" "\
Display number of pages to print this buffer, for various font heights.
The table depends on the current ps-print setup.
\(fn NB-LINES)" t nil)
-(autoload (quote ps-nb-pages-region) "ps-print" "\
+(autoload 'ps-nb-pages-region "ps-print" "\
Display number of pages to print the region, for various font heights.
The table depends on the current ps-print setup.
\(fn NB-LINES)" t nil)
-(autoload (quote ps-setup) "ps-print" "\
+(autoload 'ps-setup "ps-print" "\
Return the current PostScript-generation setup.
\(fn)" nil nil)
-(autoload (quote ps-extend-face-list) "ps-print" "\
+(autoload 'ps-extend-face-list "ps-print" "\
Extend face in ALIST-SYM.
If optional MERGE-P is non-nil, extensions in FACE-EXTENSION-LIST are merged
@@ -21620,7 +21875,7 @@ See `ps-extend-face' for documentation.
\(fn FACE-EXTENSION-LIST &optional MERGE-P ALIST-SYM)" nil nil)
-(autoload (quote ps-extend-face) "ps-print" "\
+(autoload 'ps-extend-face "ps-print" "\
Extend face in ALIST-SYM.
If optional MERGE-P is non-nil, extensions in FACE-EXTENSION list are merged
@@ -21655,16 +21910,16 @@ If EXTENSION is any other symbol, it is ignored.
;;;***
;;;### (autoloads (jython-mode python-mode run-python) "python" "progmodes/python.el"
-;;;;;; (17992 30878))
+;;;;;; (18208 48754))
;;; Generated autoloads from progmodes/python.el
-(add-to-list (quote interpreter-mode-alist) (quote ("jython" . jython-mode)))
+(add-to-list 'interpreter-mode-alist '("jython" . jython-mode))
-(add-to-list (quote interpreter-mode-alist) (quote ("python" . python-mode)))
+(add-to-list 'interpreter-mode-alist '("python" . python-mode))
-(add-to-list (quote auto-mode-alist) (quote ("\\.py\\'" . python-mode)))
+(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
-(autoload (quote run-python) "python" "\
+(autoload 'run-python "python" "\
Run an inferior Python process, input and output via buffer *Python*.
CMD is the Python command to run. NOSHOW non-nil means don't show the
buffer automatically.
@@ -21683,7 +21938,7 @@ buffer for a list of commands.)
\(fn &optional CMD NOSHOW NEW)" t nil)
-(autoload (quote python-mode) "python" "\
+(autoload 'python-mode "python" "\
Major mode for editing Python files.
Font Lock mode is currently required for correct parsing of the source.
See also `jython-mode', which is actually invoked if the buffer appears to
@@ -21720,7 +21975,7 @@ with skeleton expansions for compound statement templates.
\(fn)" t nil)
-(autoload (quote jython-mode) "python" "\
+(autoload 'jython-mode "python" "\
Major mode for editing Jython files.
Like `python-mode', but sets up parameters for Jython subprocesses.
Runs `jython-mode-hook' after `python-mode-hook'.
@@ -21730,10 +21985,10 @@ Runs `jython-mode-hook' after `python-mode-hook'.
;;;***
;;;### (autoloads (quoted-printable-decode-region) "qp" "gnus/qp.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/qp.el
-(autoload (quote quoted-printable-decode-region) "qp" "\
+(autoload 'quoted-printable-decode-region "qp" "\
Decode quoted-printable in the region between FROM and TO, per RFC 2045.
If CODING-SYSTEM is non-nil, decode bytes into characters with that
coding-system.
@@ -21753,15 +22008,15 @@ them into characters should be done separately.
;;;;;; quail-defrule quail-install-decode-map quail-install-map
;;;;;; quail-define-rules quail-show-keyboard-layout quail-set-keyboard-layout
;;;;;; quail-define-package quail-use-package quail-title) "quail"
-;;;;;; "international/quail.el" (17921 16827))
+;;;;;; "international/quail.el" (18120 34751))
;;; Generated autoloads from international/quail.el
-(autoload (quote quail-title) "quail" "\
+(autoload 'quail-title "quail" "\
Return the title of the current Quail package.
\(fn)" nil nil)
-(autoload (quote quail-use-package) "quail" "\
+(autoload 'quail-use-package "quail" "\
Start using Quail package PACKAGE-NAME.
The remaining arguments are libraries to be loaded before using the package.
@@ -21770,7 +22025,7 @@ This activates input method defined by PACKAGE-NAME by running
\(fn PACKAGE-NAME &rest LIBRARIES)" nil nil)
-(autoload (quote quail-define-package) "quail" "\
+(autoload 'quail-define-package "quail" "\
Define NAME as a new Quail package for input LANGUAGE.
TITLE is a string to be displayed at mode-line to indicate this package.
Optional arguments are GUIDANCE, DOCSTRING, TRANSLATION-KEYS,
@@ -21851,7 +22106,7 @@ non-Quail commands.
\(fn NAME LANGUAGE TITLE &optional GUIDANCE DOCSTRING TRANSLATION-KEYS FORGET-LAST-SELECTION DETERMINISTIC KBD-TRANSLATE SHOW-LAYOUT CREATE-DECODE-MAP MAXIMUM-SHORTEST OVERLAY-PLIST UPDATE-TRANSLATION-FUNCTION CONVERSION-KEYS SIMPLE)" nil nil)
-(autoload (quote quail-set-keyboard-layout) "quail" "\
+(autoload 'quail-set-keyboard-layout "quail" "\
Set the current keyboard layout to the same as keyboard KBD-TYPE.
Since some Quail packages depends on a physical layout of keys (not
@@ -21862,7 +22117,7 @@ you type is correctly handled.
\(fn KBD-TYPE)" t nil)
-(autoload (quote quail-show-keyboard-layout) "quail" "\
+(autoload 'quail-show-keyboard-layout "quail" "\
Show the physical layout of the keyboard type KEYBOARD-TYPE.
The variable `quail-keyboard-layout-type' holds the currently selected
@@ -21870,7 +22125,7 @@ keyboard type.
\(fn &optional KEYBOARD-TYPE)" t nil)
-(autoload (quote quail-define-rules) "quail" "\
+(autoload 'quail-define-rules "quail" "\
Define translation rules of the current Quail package.
Each argument is a list of KEY and TRANSLATION.
KEY is a string meaning a sequence of keystrokes to be translated.
@@ -21905,7 +22160,7 @@ the following annotation types are supported.
\(fn &rest RULES)" nil (quote macro))
-(autoload (quote quail-install-map) "quail" "\
+(autoload 'quail-install-map "quail" "\
Install the Quail map MAP in the current Quail package.
Optional 2nd arg NAME, if non-nil, is a name of Quail package for
@@ -21915,7 +22170,7 @@ The installed map can be referred by the function `quail-map'.
\(fn MAP &optional NAME)" nil nil)
-(autoload (quote quail-install-decode-map) "quail" "\
+(autoload 'quail-install-decode-map "quail" "\
Install the Quail decode map DECODE-MAP in the current Quail package.
Optional 2nd arg NAME, if non-nil, is a name of Quail package for
@@ -21925,7 +22180,7 @@ The installed decode map can be referred by the function `quail-decode-map'.
\(fn DECODE-MAP &optional NAME)" nil nil)
-(autoload (quote quail-defrule) "quail" "\
+(autoload 'quail-defrule "quail" "\
Add one translation rule, KEY to TRANSLATION, in the current Quail package.
KEY is a string meaning a sequence of keystrokes to be translated.
TRANSLATION is a character, a string, a vector, a Quail map,
@@ -21952,7 +22207,7 @@ to the current translations for KEY instead of replacing them.
\(fn KEY TRANSLATION &optional NAME APPEND)" nil nil)
-(autoload (quote quail-defrule-internal) "quail" "\
+(autoload 'quail-defrule-internal "quail" "\
Define KEY as TRANS in a Quail map MAP.
If Optional 4th arg APPEND is non-nil, TRANS is appended to the
@@ -21965,7 +22220,7 @@ function `quail-define-rules' for the detail.
\(fn KEY TRANS MAP &optional APPEND DECODE-MAP PROPS)" nil nil)
-(autoload (quote quail-update-leim-list-file) "quail" "\
+(autoload 'quail-update-leim-list-file "quail" "\
Update entries for Quail packages in `LEIM' list file in directory DIRNAME.
DIRNAME is a directory containing Emacs input methods;
normally, it should specify the `leim' subdirectory
@@ -21984,8 +22239,8 @@ of each directory.
;;;### (autoloads (quickurl-list quickurl-list-mode quickurl-edit-urls
;;;;;; quickurl-browse-url-ask quickurl-browse-url quickurl-add-url
-;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (17842
-;;;;;; 55218))
+;;;;;; quickurl-ask quickurl) "quickurl" "net/quickurl.el" (18088
+;;;;;; 55112))
;;; Generated autoloads from net/quickurl.el
(defconst quickurl-reread-hook-postfix "\n;; Local Variables:\n;; eval: (progn (require 'quickurl) (add-hook 'local-write-file-hooks (lambda () (quickurl-read) nil)))\n;; End:\n" "\
@@ -21999,7 +22254,7 @@ To make use of this do something like:
in your ~/.emacs (after loading/requiring quickurl).")
-(autoload (quote quickurl) "quickurl" "\
+(autoload 'quickurl "quickurl" "\
Insert an URL based on LOOKUP.
If not supplied LOOKUP is taken to be the word at point in the current
@@ -22008,12 +22263,12 @@ buffer, this default action can be modifed via
\(fn &optional LOOKUP)" t nil)
-(autoload (quote quickurl-ask) "quickurl" "\
+(autoload 'quickurl-ask "quickurl" "\
Insert an URL, with `completing-read' prompt, based on LOOKUP.
\(fn LOOKUP)" t nil)
-(autoload (quote quickurl-add-url) "quickurl" "\
+(autoload 'quickurl-add-url "quickurl" "\
Allow the user to interactively add a new URL associated with WORD.
See `quickurl-grab-url' for details on how the default word/url combination
@@ -22021,7 +22276,7 @@ is decided.
\(fn WORD URL COMMENT)" t nil)
-(autoload (quote quickurl-browse-url) "quickurl" "\
+(autoload 'quickurl-browse-url "quickurl" "\
Browse the URL associated with LOOKUP.
If not supplied LOOKUP is taken to be the word at point in the
@@ -22030,17 +22285,17 @@ current buffer, this default action can be modifed via
\(fn &optional LOOKUP)" t nil)
-(autoload (quote quickurl-browse-url-ask) "quickurl" "\
+(autoload 'quickurl-browse-url-ask "quickurl" "\
Browse the URL, with `completing-read' prompt, associated with LOOKUP.
\(fn LOOKUP)" t nil)
-(autoload (quote quickurl-edit-urls) "quickurl" "\
+(autoload 'quickurl-edit-urls "quickurl" "\
Pull `quickurl-url-file' into a buffer for hand editing.
\(fn)" t nil)
-(autoload (quote quickurl-list-mode) "quickurl" "\
+(autoload 'quickurl-list-mode "quickurl" "\
A mode for browsing the quickurl URL list.
The key bindings for `quickurl-list-mode' are:
@@ -22049,7 +22304,7 @@ The key bindings for `quickurl-list-mode' are:
\(fn)" t nil)
-(autoload (quote quickurl-list) "quickurl" "\
+(autoload 'quickurl-list "quickurl" "\
Display `quickurl-list' as a formatted list using `quickurl-list-mode'.
\(fn)" t nil)
@@ -22057,21 +22312,24 @@ Display `quickurl-list' as a formatted list using `quickurl-list-mode'.
;;;***
;;;### (autoloads (rcirc-track-minor-mode rcirc-connect rcirc) "rcirc"
-;;;;;; "net/rcirc.el" (18006 55797))
+;;;;;; "net/rcirc.el" (18213 14317))
;;; Generated autoloads from net/rcirc.el
-(autoload (quote rcirc) "rcirc" "\
-Connect to IRC.
-If ARG is non-nil, prompt for a server to connect to.
+(autoload 'rcirc "rcirc" "\
+Connect to all servers in `rcirc-server-alist'.
+
+Do not connect to a server if it is already connected.
+
+If ARG is non-nil, instead prompt for connection parameters.
\(fn ARG)" t nil)
-(defalias (quote irc) (quote rcirc))
+(defalias 'irc 'rcirc)
-(autoload (quote rcirc-connect) "rcirc" "\
+(autoload 'rcirc-connect "rcirc" "\
Not documented
-\(fn &optional SERVER PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS)" nil nil)
+\(fn SERVER &optional PORT NICK USER-NAME FULL-NAME STARTUP-CHANNELS)" nil nil)
(defvar rcirc-track-minor-mode nil "\
Non-nil if Rcirc-Track minor mode is enabled.
@@ -22080,20 +22338,20 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `rcirc-track-minor-mode'.")
-(custom-autoload (quote rcirc-track-minor-mode) "rcirc" nil)
+(custom-autoload 'rcirc-track-minor-mode "rcirc" nil)
-(autoload (quote rcirc-track-minor-mode) "rcirc" "\
+(autoload 'rcirc-track-minor-mode "rcirc" "\
Global minor mode for tracking activity in rcirc buffers.
\(fn &optional ARG)" t nil)
;;;***
-;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (17842
-;;;;;; 55218))
+;;;### (autoloads (remote-compile) "rcompile" "net/rcompile.el" (18088
+;;;;;; 55112))
;;; Generated autoloads from net/rcompile.el
-(autoload (quote remote-compile) "rcompile" "\
+(autoload 'remote-compile "rcompile" "\
Compile the current buffer's directory on HOST. Log in as USER.
See \\[compile].
@@ -22102,19 +22360,19 @@ See \\[compile].
;;;***
;;;### (autoloads (re-builder) "re-builder" "emacs-lisp/re-builder.el"
-;;;;;; (17917 37732))
+;;;;;; (18173 8195))
;;; Generated autoloads from emacs-lisp/re-builder.el
-(defalias (quote regexp-builder) (quote re-builder))
+(defalias 'regexp-builder 're-builder)
-(autoload (quote re-builder) "re-builder" "\
+(autoload 're-builder "re-builder" "\
Construct a regexp interactively.
\(fn)" t nil)
;;;***
-;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (17930 34071))
+;;;### (autoloads (recentf-mode) "recentf" "recentf.el" (18161 20994))
;;; Generated autoloads from recentf.el
(defvar recentf-mode nil "\
@@ -22124,9 +22382,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `recentf-mode'.")
-(custom-autoload (quote recentf-mode) "recentf" nil)
+(custom-autoload 'recentf-mode "recentf" nil)
-(autoload (quote recentf-mode) "recentf" "\
+(autoload 'recentf-mode "recentf" "\
Toggle recentf mode.
With prefix argument ARG, turn on if positive, otherwise off.
Returns non-nil if the new state is enabled.
@@ -22141,20 +22399,20 @@ that were operated on recently.
;;;### (autoloads (clear-rectangle string-insert-rectangle string-rectangle
;;;;;; delete-whitespace-rectangle open-rectangle insert-rectangle
;;;;;; yank-rectangle kill-rectangle extract-rectangle delete-extract-rectangle
-;;;;;; delete-rectangle move-to-column-force) "rect" "rect.el" (17842
-;;;;;; 58279))
+;;;;;; delete-rectangle move-to-column-force) "rect" "rect.el" (18088
+;;;;;; 55088))
;;; Generated autoloads from rect.el
-(autoload (quote move-to-column-force) "rect" "\
+(autoload 'move-to-column-force "rect" "\
If COLUMN is within a multi-column character, replace it by spaces and tab.
As for `move-to-column', passing anything but nil or t in FLAG will move to
the desired column only if the line is long enough.
\(fn COLUMN &optional FLAG)" nil nil)
-(make-obsolete (quote move-to-column-force) (quote move-to-column) "21.2")
+(make-obsolete 'move-to-column-force 'move-to-column "21.2")
-(autoload (quote delete-rectangle) "rect" "\
+(autoload 'delete-rectangle "rect" "\
Delete (don't save) text in the region-rectangle.
The same range of columns is deleted in each line starting with the
line where the region begins and ending with the line where the region
@@ -22166,7 +22424,7 @@ to be deleted.
\(fn START END &optional FILL)" t nil)
-(autoload (quote delete-extract-rectangle) "rect" "\
+(autoload 'delete-extract-rectangle "rect" "\
Delete the contents of the rectangle with corners at START and END.
Return it as a list of strings, one for each line of the rectangle.
@@ -22176,13 +22434,13 @@ deleted.
\(fn START END &optional FILL)" nil nil)
-(autoload (quote extract-rectangle) "rect" "\
+(autoload 'extract-rectangle "rect" "\
Return the contents of the rectangle with corners at START and END.
Return it as a list of strings, one for each line of the rectangle.
\(fn START END)" nil nil)
-(autoload (quote kill-rectangle) "rect" "\
+(autoload 'kill-rectangle "rect" "\
Delete the region-rectangle and save it as the last killed one.
When called from a program the rectangle's corners are START and END.
@@ -22199,12 +22457,12 @@ even beep.)
\(fn START END &optional FILL)" t nil)
-(autoload (quote yank-rectangle) "rect" "\
+(autoload 'yank-rectangle "rect" "\
Yank the last killed rectangle with upper left corner at point.
\(fn)" t nil)
-(autoload (quote insert-rectangle) "rect" "\
+(autoload 'insert-rectangle "rect" "\
Insert text of RECTANGLE with upper left corner at point.
RECTANGLE's first line is inserted at point, its second
line is inserted at a point vertically under point, etc.
@@ -22214,7 +22472,7 @@ and point is at the lower right corner.
\(fn RECTANGLE)" nil nil)
-(autoload (quote open-rectangle) "rect" "\
+(autoload 'open-rectangle "rect" "\
Blank out the region-rectangle, shifting text right.
The text previously in the region is not overwritten by the blanks,
@@ -22226,9 +22484,9 @@ on the right side of the rectangle.
\(fn START END &optional FILL)" t nil)
-(defalias (quote close-rectangle) (quote delete-whitespace-rectangle))
+(defalias 'close-rectangle 'delete-whitespace-rectangle)
-(autoload (quote delete-whitespace-rectangle) "rect" "\
+(autoload 'delete-whitespace-rectangle "rect" "\
Delete all whitespace following a specified column in each line.
The left edge of the rectangle specifies the position in each line
at which whitespace deletion should begin. On each line in the
@@ -22239,7 +22497,7 @@ With a prefix (or a FILL) argument, also fill too short lines.
\(fn START END &optional FILL)" t nil)
-(autoload (quote string-rectangle) "rect" "\
+(autoload 'string-rectangle "rect" "\
Replace rectangle contents with STRING on each line.
The length of STRING need not be the same as the rectangle width.
@@ -22247,9 +22505,9 @@ Called from a program, takes three args; START, END and STRING.
\(fn START END STRING)" t nil)
-(defalias (quote replace-rectangle) (quote string-rectangle))
+(defalias 'replace-rectangle 'string-rectangle)
-(autoload (quote string-insert-rectangle) "rect" "\
+(autoload 'string-insert-rectangle "rect" "\
Insert STRING on each line of region-rectangle, shifting text right.
When called from a program, the rectangle's corners are START and END.
@@ -22258,7 +22516,7 @@ This command does not delete or overwrite any existing text.
\(fn START END STRING)" t nil)
-(autoload (quote clear-rectangle) "rect" "\
+(autoload 'clear-rectangle "rect" "\
Blank out the region-rectangle.
The text previously in the region is overwritten with blanks.
@@ -22270,13 +22528,13 @@ rectangle which were empty.
;;;***
-;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (17842
-;;;;;; 58277))
+;;;### (autoloads (refill-mode) "refill" "textmodes/refill.el" (18120
+;;;;;; 34753))
;;; Generated autoloads from textmodes/refill.el
-(autoload (quote refill-mode) "refill" "\
+(autoload 'refill-mode "refill" "\
Toggle Refill minor mode.
-With prefix arg, turn Refill mode on iff arg is positive.
+With prefix arg, turn Refill mode on if arg is positive, otherwise turn it off.
When Refill mode is on, the current paragraph will be formatted when
changes are made within it. Self-inserting characters only cause
@@ -22287,15 +22545,15 @@ refilling if they would cause auto-filling.
;;;***
;;;### (autoloads (reftex-reset-scanning-information reftex-mode
-;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (17923 8784))
+;;;;;; turn-on-reftex) "reftex" "textmodes/reftex.el" (18203 37790))
;;; Generated autoloads from textmodes/reftex.el
-(autoload (quote turn-on-reftex) "reftex" "\
+(autoload 'turn-on-reftex "reftex" "\
Turn on RefTeX mode.
\(fn)" nil nil)
-(autoload (quote reftex-mode) "reftex" "\
+(autoload 'reftex-mode "reftex" "\
Minor mode with distinct support for \\label, \\ref and \\cite in LaTeX.
\\<reftex-mode-map>A Table of Contents of the entire (multifile) document with browsing
@@ -22328,7 +22586,7 @@ on the menu bar.
\(fn &optional ARG)" t nil)
-(autoload (quote reftex-reset-scanning-information) "reftex" "\
+(autoload 'reftex-reset-scanning-information "reftex" "\
Reset the symbols containing information from buffer scanning.
This enforces rescanning the buffer on next use.
@@ -22337,10 +22595,10 @@ This enforces rescanning the buffer on next use.
;;;***
;;;### (autoloads (reftex-citation) "reftex-cite" "textmodes/reftex-cite.el"
-;;;;;; (17923 8784))
+;;;;;; (18191 7159))
;;; Generated autoloads from textmodes/reftex-cite.el
-(autoload (quote reftex-citation) "reftex-cite" "\
+(autoload 'reftex-citation "reftex-cite" "\
Make a citation using BibTeX database files.
After prompting for a regular expression, scans the buffers with
bibtex entries (taken from the \\bibliography command) and offers the
@@ -22367,27 +22625,27 @@ While entering the regexp, completion on knows citation keys is possible.
;;;***
;;;### (autoloads (reftex-isearch-minor-mode) "reftex-global" "textmodes/reftex-global.el"
-;;;;;; (17923 8784))
+;;;;;; (18120 34753))
;;; Generated autoloads from textmodes/reftex-global.el
-(autoload (quote reftex-isearch-minor-mode) "reftex-global" "\
+(autoload 'reftex-isearch-minor-mode "reftex-global" "\
When on, isearch searches the whole document, not only the current file.
This minor mode allows isearch to search through all the files of
the current TeX document.
With no argument, this command toggles
`reftex-isearch-minor-mode'. With a prefix argument ARG, turn
-`reftex-isearch-minor-mode' on iff ARG is positive.
+`reftex-isearch-minor-mode' on if ARG is positive, otherwise turn it off.
\(fn &optional ARG)" t nil)
;;;***
;;;### (autoloads (reftex-index-phrases-mode) "reftex-index" "textmodes/reftex-index.el"
-;;;;;; (17923 8784))
+;;;;;; (18088 55120))
;;; Generated autoloads from textmodes/reftex-index.el
-(autoload (quote reftex-index-phrases-mode) "reftex-index" "\
+(autoload 'reftex-index-phrases-mode "reftex-index" "\
Major mode for managing the Index phrases of a LaTeX document.
This buffer was created with RefTeX.
@@ -22417,10 +22675,10 @@ Here are all local bindings.
;;;***
;;;### (autoloads (reftex-all-document-files) "reftex-parse" "textmodes/reftex-parse.el"
-;;;;;; (17923 8784))
+;;;;;; (18088 55120))
;;; Generated autoloads from textmodes/reftex-parse.el
-(autoload (quote reftex-all-document-files) "reftex-parse" "\
+(autoload 'reftex-all-document-files "reftex-parse" "\
Return a list of all files belonging to the current document.
When RELATIVE is non-nil, give file names relative to directory
of master file.
@@ -22429,8 +22687,8 @@ of master file.
;;;***
-;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (17923
-;;;;;; 8784))
+;;;### (autoloads nil "reftex-vars" "textmodes/reftex-vars.el" (18088
+;;;;;; 55120))
;;; Generated autoloads from textmodes/reftex-vars.el
(put 'reftex-vref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x))))
(put 'reftex-fref-is-default 'safe-local-variable (lambda (x) (or (stringp x) (symbolp x))))
@@ -22440,10 +22698,10 @@ of master file.
;;;***
;;;### (autoloads (regexp-opt-depth regexp-opt) "regexp-opt" "emacs-lisp/regexp-opt.el"
-;;;;;; (17842 54152))
+;;;;;; (18088 55096))
;;; Generated autoloads from emacs-lisp/regexp-opt.el
-(autoload (quote regexp-opt) "regexp-opt" "\
+(autoload 'regexp-opt "regexp-opt" "\
Return a regexp to match a string in the list STRINGS.
Each string should be unique in STRINGS and should not contain any regexps,
quoted or not. If optional PAREN is non-nil, ensure that the returned regexp
@@ -22458,7 +22716,7 @@ by \\=\\< and \\>.
\(fn STRINGS &optional PAREN)" nil nil)
-(autoload (quote regexp-opt-depth) "regexp-opt" "\
+(autoload 'regexp-opt-depth "regexp-opt" "\
Return the depth of REGEXP.
This means the number of non-shy regexp grouping constructs
\(parenthesized expressions) in REGEXP.
@@ -22467,28 +22725,33 @@ This means the number of non-shy regexp grouping constructs
;;;***
-;;;### (autoloads (repeat) "repeat" "repeat.el" (17842 58279))
+;;;### (autoloads (repeat) "repeat" "repeat.el" (18187 36839))
;;; Generated autoloads from repeat.el
-(autoload (quote repeat) "repeat" "\
+(autoload 'repeat "repeat" "\
Repeat most recently executed command.
-With prefix arg, apply new prefix arg to that command; otherwise, use
-the prefix arg that was used before (if any).
+With prefix arg, apply new prefix arg to that command; otherwise,
+use the prefix arg that was used before (if any).
This command is like the `.' command in the vi editor.
-If this command is invoked by a multi-character key sequence, it can then
-be repeated by repeating the final character of that sequence. This behavior
-can be modified by the global variable `repeat-on-final-keystroke'.
+If this command is invoked by a multi-character key sequence, it
+can then be repeated by repeating the final character of that
+sequence. This behavior can be modified by the global variable
+`repeat-on-final-keystroke'.
+
+`repeat' ignores commands bound to input events. Hence the term
+\"most recently executed command\" shall be read as \"most
+recently executed command not bound to an input event\".
\(fn REPEAT-ARG)" t nil)
;;;***
;;;### (autoloads (reporter-submit-bug-report) "reporter" "mail/reporter.el"
-;;;;;; (17842 55035))
+;;;;;; (18192 17587))
;;; Generated autoloads from mail/reporter.el
-(autoload (quote reporter-submit-bug-report) "reporter" "\
+(autoload 'reporter-submit-bug-report "reporter" "\
Begin submitting a bug report via email.
ADDRESS is the email address for the package's maintainer. PKGNAME is
@@ -22517,10 +22780,10 @@ mail-sending package is used for editing and sending the message.
;;;***
;;;### (autoloads (reposition-window) "reposition" "reposition.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55088))
;;; Generated autoloads from reposition.el
-(autoload (quote reposition-window) "reposition" "\
+(autoload 'reposition-window "reposition" "\
Make the current definition and/or comment visible.
Further invocations move it to the top of the window or toggle the
visibility of comments that precede it.
@@ -22544,11 +22807,11 @@ first comment line visible (if point is in a comment).
;;;***
-;;;### (autoloads (resume-suspend-hook) "resume" "resume.el" (17842
-;;;;;; 58279))
+;;;### (autoloads (resume-suspend-hook) "resume" "resume.el" (18088
+;;;;;; 55088))
;;; Generated autoloads from resume.el
-(autoload (quote resume-suspend-hook) "resume" "\
+(autoload 'resume-suspend-hook "resume" "\
Clear out the file used for transmitting args when Emacs resumes.
\(fn)" nil nil)
@@ -22556,10 +22819,10 @@ Clear out the file used for transmitting args when Emacs resumes.
;;;***
;;;### (autoloads (global-reveal-mode reveal-mode) "reveal" "reveal.el"
-;;;;;; (17842 58279))
+;;;;;; (18088 55088))
;;; Generated autoloads from reveal.el
-(autoload (quote reveal-mode) "reveal" "\
+(autoload 'reveal-mode "reveal" "\
Toggle Reveal mode on or off.
Reveal mode renders invisible text around point visible again.
@@ -22576,9 +22839,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `global-reveal-mode'.")
-(custom-autoload (quote global-reveal-mode) "reveal" nil)
+(custom-autoload 'global-reveal-mode "reveal" nil)
-(autoload (quote global-reveal-mode) "reveal" "\
+(autoload 'global-reveal-mode "reveal" "\
Toggle Reveal mode in all buffers on or off.
Reveal mode renders invisible text around point visible again.
@@ -22591,26 +22854,26 @@ With zero or negative ARG turn mode off.
;;;***
;;;### (autoloads (make-ring ring-p) "ring" "emacs-lisp/ring.el"
-;;;;;; (17842 54152))
+;;;;;; (18197 21672))
;;; Generated autoloads from emacs-lisp/ring.el
-(autoload (quote ring-p) "ring" "\
+(autoload 'ring-p "ring" "\
Return t if X is a ring; nil otherwise.
\(fn X)" nil nil)
-(autoload (quote make-ring) "ring" "\
+(autoload 'make-ring "ring" "\
Make a ring that can contain SIZE elements.
\(fn SIZE)" nil nil)
;;;***
-;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (17842 55218))
+;;;### (autoloads (rlogin) "rlogin" "net/rlogin.el" (18088 55112))
;;; Generated autoloads from net/rlogin.el
(add-hook 'same-window-regexps "^\\*rlogin-.*\\*\\(\\|<[0-9]+>\\)")
-(autoload (quote rlogin) "rlogin" "\
+(autoload 'rlogin "rlogin" "\
Open a network login connection via `rlogin' with args INPUT-ARGS.
INPUT-ARGS should start with a host name; it may also contain
other arguments for `rlogin'.
@@ -22657,11 +22920,11 @@ variable.
;;;;;; rmail-mail-new-frame rmail-primary-inbox-list rmail-delete-after-output
;;;;;; rmail-highlight-face rmail-highlighted-headers rmail-retry-ignored-headers
;;;;;; rmail-displayed-headers rmail-ignored-headers rmail-dont-reply-to-names
-;;;;;; rmail-movemail-variant-p) "rmail" "mail/rmail.el" (18006
-;;;;;; 55797))
+;;;;;; rmail-movemail-variant-p) "rmail" "mail/rmail.el" (18191
+;;;;;; 7159))
;;; Generated autoloads from mail/rmail.el
-(autoload (quote rmail-movemail-variant-p) "rmail" "\
+(autoload 'rmail-movemail-variant-p "rmail" "\
Return t if the current movemail variant is any of VARIANTS.
Currently known variants are 'emacs and 'mailutils.
@@ -22672,7 +22935,7 @@ Currently known variants are 'emacs and 'mailutils.
A value of nil means exclude your own email address as an address
plus whatever is specified by `rmail-default-dont-reply-to-names'.")
-(custom-autoload (quote rmail-dont-reply-to-names) "rmail" t)
+(custom-autoload 'rmail-dont-reply-to-names "rmail" t)
(defvar rmail-default-dont-reply-to-names "\\`info-" "\
A regular expression specifying part of the default value of the
@@ -22691,36 +22954,36 @@ To make a change in this variable take effect
for a message that you have already viewed,
go to that message and type \\[rmail-toggle-header] twice.")
-(custom-autoload (quote rmail-ignored-headers) "rmail" t)
+(custom-autoload 'rmail-ignored-headers "rmail" t)
(defvar rmail-displayed-headers nil "\
*Regexp to match Header fields that Rmail should display.
If nil, display all header fields except those matched by
`rmail-ignored-headers'.")
-(custom-autoload (quote rmail-displayed-headers) "rmail" t)
+(custom-autoload 'rmail-displayed-headers "rmail" t)
(defvar rmail-retry-ignored-headers "^x-authentication-warning:" "\
*Headers that should be stripped when retrying a failed message.")
-(custom-autoload (quote rmail-retry-ignored-headers) "rmail" t)
+(custom-autoload 'rmail-retry-ignored-headers "rmail" t)
(defvar rmail-highlighted-headers "^From:\\|^Subject:" "\
*Regexp to match Header fields that Rmail should normally highlight.
A value of nil means don't highlight.
See also `rmail-highlight-face'.")
-(custom-autoload (quote rmail-highlighted-headers) "rmail" t)
+(custom-autoload 'rmail-highlighted-headers "rmail" t)
-(defvar rmail-highlight-face (quote rmail-highlight) "\
+(defvar rmail-highlight-face 'rmail-highlight "\
*Face used by Rmail for highlighting headers.")
-(custom-autoload (quote rmail-highlight-face) "rmail" t)
+(custom-autoload 'rmail-highlight-face "rmail" t)
(defvar rmail-delete-after-output nil "\
*Non-nil means automatically delete a message that is copied to a file.")
-(custom-autoload (quote rmail-delete-after-output) "rmail" t)
+(custom-autoload 'rmail-delete-after-output "rmail" t)
(defvar rmail-primary-inbox-list nil "\
*List of files which are inboxes for user's primary mail file `~/RMAIL'.
@@ -22728,29 +22991,29 @@ nil means the default, which is (\"/usr/spool/mail/$USER\")
\(the name varies depending on the operating system,
and the value of the environment variable MAIL overrides it).")
-(custom-autoload (quote rmail-primary-inbox-list) "rmail" t)
+(custom-autoload 'rmail-primary-inbox-list "rmail" t)
(defvar rmail-mail-new-frame nil "\
*Non-nil means Rmail makes a new frame for composing outgoing mail.
This is handy if you want to preserve the window configuration of
the frame where you have the RMAIL buffer displayed.")
-(custom-autoload (quote rmail-mail-new-frame) "rmail" t)
+(custom-autoload 'rmail-mail-new-frame "rmail" t)
(defvar rmail-secondary-file-directory "~/" "\
*Directory for additional secondary Rmail files.")
-(custom-autoload (quote rmail-secondary-file-directory) "rmail" t)
+(custom-autoload 'rmail-secondary-file-directory "rmail" t)
(defvar rmail-secondary-file-regexp "\\.xmail$" "\
*Regexp for which files are secondary Rmail files.")
-(custom-autoload (quote rmail-secondary-file-regexp) "rmail" t)
+(custom-autoload 'rmail-secondary-file-regexp "rmail" t)
-(defvar rmail-confirm-expunge (quote y-or-n-p) "\
+(defvar rmail-confirm-expunge 'y-or-n-p "\
*Whether and how to ask for confirmation before expunging deleted messages.")
-(custom-autoload (quote rmail-confirm-expunge) "rmail" t)
+(custom-autoload 'rmail-confirm-expunge "rmail" t)
(defvar rmail-mode-hook nil "\
List of functions to call when Rmail is invoked.")
@@ -22761,7 +23024,7 @@ List of functions to call when Rmail has retrieved new mail.")
(defvar rmail-show-message-hook nil "\
List of functions to call when Rmail displays a message.")
-(custom-autoload (quote rmail-show-message-hook) "rmail" t)
+(custom-autoload 'rmail-show-message-hook "rmail" t)
(defvar rmail-quit-hook nil "\
List of functions to call when quitting out of Rmail.")
@@ -22786,7 +23049,7 @@ Even if the value is non-nil, you can't use MIME feature
if the feature specified by `rmail-mime-feature' is not available
in your session.")
-(custom-autoload (quote rmail-enable-mime) "rmail" t)
+(custom-autoload 'rmail-enable-mime "rmail" t)
(defvar rmail-show-mime-function nil "\
Function to show MIME decoded message of RMAIL file.
@@ -22822,7 +23085,7 @@ MSG is the message number,
REGEXP is the regular expression,
LIMIT is the position specifying the end of header.")
-(defvar rmail-mime-feature (quote rmail-mime) "\
+(defvar rmail-mime-feature 'rmail-mime "\
Feature to require to load MIME support in Rmail.
When starting Rmail, if `rmail-enable-mime' is non-nil,
this feature is required with `require'.
@@ -22843,7 +23106,7 @@ the variable `rmail-mime-feature'.")
Regexp to match MIME-charset specification in a header of message.
The first parenthesized expression should match the MIME-charset name.")
-(autoload (quote rmail) "rmail" "\
+(autoload 'rmail "rmail" "\
Read and edit incoming mail.
Moves messages into file named by `rmail-file-name' (a babyl format file)
and edits that file in RMAIL Mode.
@@ -22858,7 +23121,7 @@ If `rmail-display-summary' is non-nil, make a summary for this RMAIL file.
\(fn &optional FILE-NAME-ARG)" t nil)
-(autoload (quote rmail-mode) "rmail" "\
+(autoload 'rmail-mode "rmail" "\
Rmail Mode is used by \\<rmail-mode-map>\\[rmail] for editing Rmail files.
All normal editing commands are turned off.
Instead, these commands are available:
@@ -22910,12 +23173,12 @@ Instead, these commands are available:
\(fn)" t nil)
-(autoload (quote rmail-input) "rmail" "\
+(autoload 'rmail-input "rmail" "\
Run Rmail on file FILENAME.
\(fn FILENAME)" t nil)
-(autoload (quote rmail-set-remote-password) "rmail" "\
+(autoload 'rmail-set-remote-password "rmail" "\
Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
\(fn PASSWORD)" t nil)
@@ -22923,10 +23186,10 @@ Set PASSWORD to be used for retrieving mail from a POP or IMAP server.
;;;***
;;;### (autoloads (rmail-edit-current-message) "rmailedit" "mail/rmailedit.el"
-;;;;;; (17887 18399))
+;;;;;; (18088 55110))
;;; Generated autoloads from mail/rmailedit.el
-(autoload (quote rmail-edit-current-message) "rmailedit" "\
+(autoload 'rmail-edit-current-message "rmailedit" "\
Edit the contents of this message.
\(fn)" t nil)
@@ -22935,27 +23198,27 @@ Edit the contents of this message.
;;;### (autoloads (rmail-next-labeled-message rmail-previous-labeled-message
;;;;;; rmail-read-label rmail-kill-label rmail-add-label) "rmailkwd"
-;;;;;; "mail/rmailkwd.el" (17842 55035))
+;;;;;; "mail/rmailkwd.el" (18088 55110))
;;; Generated autoloads from mail/rmailkwd.el
-(autoload (quote rmail-add-label) "rmailkwd" "\
+(autoload 'rmail-add-label "rmailkwd" "\
Add LABEL to labels associated with current RMAIL message.
Completion is performed over known labels when reading.
\(fn STRING)" t nil)
-(autoload (quote rmail-kill-label) "rmailkwd" "\
+(autoload 'rmail-kill-label "rmailkwd" "\
Remove LABEL from labels associated with current RMAIL message.
Completion is performed over known labels when reading.
\(fn STRING)" t nil)
-(autoload (quote rmail-read-label) "rmailkwd" "\
+(autoload 'rmail-read-label "rmailkwd" "\
Not documented
\(fn PROMPT)" nil nil)
-(autoload (quote rmail-previous-labeled-message) "rmailkwd" "\
+(autoload 'rmail-previous-labeled-message "rmailkwd" "\
Show previous message with one of the labels LABELS.
LABELS should be a comma-separated list of label names.
If LABELS is empty, the last set of labels specified is used.
@@ -22963,7 +23226,7 @@ With prefix argument N moves backward N messages with these labels.
\(fn N LABELS)" t nil)
-(autoload (quote rmail-next-labeled-message) "rmailkwd" "\
+(autoload 'rmail-next-labeled-message "rmailkwd" "\
Show next message with one of the labels LABELS.
LABELS should be a comma-separated list of label names.
If LABELS is empty, the last set of labels specified is used.
@@ -22974,10 +23237,10 @@ With prefix argument N moves forward N messages with these labels.
;;;***
;;;### (autoloads (set-rmail-inbox-list) "rmailmsc" "mail/rmailmsc.el"
-;;;;;; (17842 55035))
+;;;;;; (18088 55110))
;;; Generated autoloads from mail/rmailmsc.el
-(autoload (quote set-rmail-inbox-list) "rmailmsc" "\
+(autoload 'set-rmail-inbox-list "rmailmsc" "\
Set the inbox list of the current RMAIL file to FILE-NAME.
You can specify one file name, or several names separated by commas.
If FILE-NAME is empty, remove any existing inbox list.
@@ -22988,7 +23251,7 @@ If FILE-NAME is empty, remove any existing inbox list.
;;;### (autoloads (rmail-output-body-to-file rmail-output rmail-fields-not-to-output
;;;;;; rmail-output-to-rmail-file rmail-output-file-alist) "rmailout"
-;;;;;; "mail/rmailout.el" (17842 55035))
+;;;;;; "mail/rmailout.el" (18088 55110))
;;; Generated autoloads from mail/rmailout.el
(defvar rmail-output-file-alist nil "\
@@ -22999,9 +23262,9 @@ NAME-EXP may be a string constant giving the file name to use,
or more generally it may be any kind of expression that returns
a file name as a string.")
-(custom-autoload (quote rmail-output-file-alist) "rmailout" t)
+(custom-autoload 'rmail-output-file-alist "rmailout" t)
-(autoload (quote rmail-output-to-rmail-file) "rmailout" "\
+(autoload 'rmail-output-to-rmail-file "rmailout" "\
Append the current message to an Rmail file named FILE-NAME.
If the file does not exist, ask if it should be created.
If file is being visited, the message is appended to the Emacs
@@ -23023,9 +23286,9 @@ message up instead of moving forward to the next non-deleted message.
(defvar rmail-fields-not-to-output nil "\
*Regexp describing fields to exclude when outputting a message to a file.")
-(custom-autoload (quote rmail-fields-not-to-output) "rmailout" t)
+(custom-autoload 'rmail-fields-not-to-output "rmailout" t)
-(autoload (quote rmail-output) "rmailout" "\
+(autoload 'rmail-output "rmailout" "\
Append this message to system-inbox-format mail file named FILE-NAME.
A prefix argument COUNT says to output that many consecutive messages,
starting with the current one. Deleted messages are skipped and don't count.
@@ -23045,7 +23308,7 @@ The optional fourth argument FROM-GNUS is set when called from GNUS.
\(fn FILE-NAME &optional COUNT NOATTRIBUTE FROM-GNUS)" t nil)
-(autoload (quote rmail-output-body-to-file) "rmailout" "\
+(autoload 'rmail-output-body-to-file "rmailout" "\
Write this message body to the file FILE-NAME.
FILE-NAME defaults, interactively, from the Subject field of the message.
@@ -23055,47 +23318,47 @@ FILE-NAME defaults, interactively, from the Subject field of the message.
;;;### (autoloads (rmail-sort-by-labels rmail-sort-by-lines rmail-sort-by-correspondent
;;;;;; rmail-sort-by-recipient rmail-sort-by-author rmail-sort-by-subject
-;;;;;; rmail-sort-by-date) "rmailsort" "mail/rmailsort.el" (17842
-;;;;;; 55035))
+;;;;;; rmail-sort-by-date) "rmailsort" "mail/rmailsort.el" (18088
+;;;;;; 55110))
;;; Generated autoloads from mail/rmailsort.el
-(autoload (quote rmail-sort-by-date) "rmailsort" "\
+(autoload 'rmail-sort-by-date "rmailsort" "\
Sort messages of current Rmail file by date.
If prefix argument REVERSE is non-nil, sort them in reverse order.
\(fn REVERSE)" t nil)
-(autoload (quote rmail-sort-by-subject) "rmailsort" "\
+(autoload 'rmail-sort-by-subject "rmailsort" "\
Sort messages of current Rmail file by subject.
If prefix argument REVERSE is non-nil, sort them in reverse order.
\(fn REVERSE)" t nil)
-(autoload (quote rmail-sort-by-author) "rmailsort" "\
+(autoload 'rmail-sort-by-author "rmailsort" "\
Sort messages of current Rmail file by author.
If prefix argument REVERSE is non-nil, sort them in reverse order.
\(fn REVERSE)" t nil)
-(autoload (quote rmail-sort-by-recipient) "rmailsort" "\
+(autoload 'rmail-sort-by-recipient "rmailsort" "\
Sort messages of current Rmail file by recipient.
If prefix argument REVERSE is non-nil, sort them in reverse order.
\(fn REVERSE)" t nil)
-(autoload (quote rmail-sort-by-correspondent) "rmailsort" "\
+(autoload 'rmail-sort-by-correspondent "rmailsort" "\
Sort messages of current Rmail file by other correspondent.
If prefix argument REVERSE is non-nil, sort them in reverse order.
\(fn REVERSE)" t nil)
-(autoload (quote rmail-sort-by-lines) "rmailsort" "\
+(autoload 'rmail-sort-by-lines "rmailsort" "\
Sort messages of current Rmail file by number of lines.
If prefix argument REVERSE is non-nil, sort them in reverse order.
\(fn REVERSE)" t nil)
-(autoload (quote rmail-sort-by-labels) "rmailsort" "\
+(autoload 'rmail-sort-by-labels "rmailsort" "\
Sort messages of current Rmail file by labels.
If prefix argument REVERSE is non-nil, sort them in reverse order.
KEYWORDS is a comma-separated list of labels.
@@ -23108,31 +23371,31 @@ KEYWORDS is a comma-separated list of labels.
;;;;;; rmail-summary-by-senders rmail-summary-by-topic rmail-summary-by-regexp
;;;;;; rmail-summary-by-recipients rmail-summary-by-labels rmail-summary
;;;;;; rmail-summary-line-count-flag rmail-summary-scroll-between-messages)
-;;;;;; "rmailsum" "mail/rmailsum.el" (17842 55035))
+;;;;;; "rmailsum" "mail/rmailsum.el" (18101 9759))
;;; Generated autoloads from mail/rmailsum.el
(defvar rmail-summary-scroll-between-messages t "\
*Non-nil means Rmail summary scroll commands move between messages.")
-(custom-autoload (quote rmail-summary-scroll-between-messages) "rmailsum" t)
+(custom-autoload 'rmail-summary-scroll-between-messages "rmailsum" t)
(defvar rmail-summary-line-count-flag t "\
*Non-nil means Rmail summary should show the number of lines in each message.")
-(custom-autoload (quote rmail-summary-line-count-flag) "rmailsum" t)
+(custom-autoload 'rmail-summary-line-count-flag "rmailsum" t)
-(autoload (quote rmail-summary) "rmailsum" "\
+(autoload 'rmail-summary "rmailsum" "\
Display a summary of all messages, one line per message.
\(fn)" t nil)
-(autoload (quote rmail-summary-by-labels) "rmailsum" "\
+(autoload 'rmail-summary-by-labels "rmailsum" "\
Display a summary of all messages with one or more LABELS.
LABELS should be a string containing the desired labels, separated by commas.
\(fn LABELS)" t nil)
-(autoload (quote rmail-summary-by-recipients) "rmailsum" "\
+(autoload 'rmail-summary-by-recipients "rmailsum" "\
Display a summary of all messages with the given RECIPIENTS.
Normally checks the To, From and Cc fields of headers;
but if PRIMARY-ONLY is non-nil (prefix arg given),
@@ -23141,7 +23404,7 @@ RECIPIENTS is a string of regexps separated by commas.
\(fn RECIPIENTS &optional PRIMARY-ONLY)" t nil)
-(autoload (quote rmail-summary-by-regexp) "rmailsum" "\
+(autoload 'rmail-summary-by-regexp "rmailsum" "\
Display a summary of all messages according to regexp REGEXP.
If the regular expression is found in the header of the message
\(including in the date and other lines, as well as the subject line),
@@ -23149,7 +23412,7 @@ Emacs will list the header line in the RMAIL-summary.
\(fn REGEXP)" t nil)
-(autoload (quote rmail-summary-by-topic) "rmailsum" "\
+(autoload 'rmail-summary-by-topic "rmailsum" "\
Display a summary of all messages with the given SUBJECT.
Normally checks the Subject field of headers;
but if WHOLE-MESSAGE is non-nil (prefix arg given),
@@ -23158,18 +23421,18 @@ SUBJECT is a string of regexps separated by commas.
\(fn SUBJECT &optional WHOLE-MESSAGE)" t nil)
-(autoload (quote rmail-summary-by-senders) "rmailsum" "\
+(autoload 'rmail-summary-by-senders "rmailsum" "\
Display a summary of all messages with the given SENDERS.
SENDERS is a string of names separated by commas.
\(fn SENDERS)" t nil)
-(defvar rmail-summary-line-decoder (function identity) "\
+(defvar rmail-summary-line-decoder #'identity "\
*Function to decode summary-line.
By default, `identity' is set.")
-(custom-autoload (quote rmail-summary-line-decoder) "rmailsum" t)
+(custom-autoload 'rmail-summary-line-decoder "rmailsum" t)
(defvar rmail-user-mail-address-regexp nil "\
*Regexp matching user mail addresses.
@@ -23185,30 +23448,30 @@ Then it should be a regexp matching your mail addresses.
Setting this variable has an effect only before reading a mail.")
-(custom-autoload (quote rmail-user-mail-address-regexp) "rmailsum" t)
+(custom-autoload 'rmail-user-mail-address-regexp "rmailsum" t)
;;;***
;;;### (autoloads (toggle-rot13-mode rot13-other-window rot13-region
-;;;;;; rot13-string rot13) "rot13" "rot13.el" (17842 58279))
+;;;;;; rot13-string rot13) "rot13" "rot13.el" (18088 55088))
;;; Generated autoloads from rot13.el
-(autoload (quote rot13) "rot13" "\
+(autoload 'rot13 "rot13" "\
Return ROT13 encryption of OBJECT, a buffer or string.
\(fn OBJECT &optional START END)" nil nil)
-(autoload (quote rot13-string) "rot13" "\
+(autoload 'rot13-string "rot13" "\
Return ROT13 encryption of STRING.
\(fn STRING)" nil nil)
-(autoload (quote rot13-region) "rot13" "\
+(autoload 'rot13-region "rot13" "\
ROT13 encrypt the region between START and END in current buffer.
\(fn START END)" t nil)
-(autoload (quote rot13-other-window) "rot13" "\
+(autoload 'rot13-other-window "rot13" "\
Display current buffer in ROT13 in another window.
The text itself is not modified, only the way it is displayed is affected.
@@ -23220,36 +23483,36 @@ See also `toggle-rot13-mode'.
\(fn)" t nil)
-(autoload (quote toggle-rot13-mode) "rot13" "\
+(autoload 'toggle-rot13-mode "rot13" "\
Toggle the use of ROT13 encoding for the current window.
\(fn)" t nil)
;;;***
-;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (17833
-;;;;;; 43069))
+;;;### (autoloads (ruler-mode) "ruler-mode" "ruler-mode.el" (18088
+;;;;;; 55088))
;;; Generated autoloads from ruler-mode.el
-(autoload (quote ruler-mode) "ruler-mode" "\
+(autoload 'ruler-mode "ruler-mode" "\
Display a ruler in the header line if ARG > 0.
\(fn &optional ARG)" t nil)
;;;***
-;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (18011
-;;;;;; 44080))
+;;;### (autoloads (rx rx-to-string) "rx" "emacs-lisp/rx.el" (18142
+;;;;;; 63529))
;;; Generated autoloads from emacs-lisp/rx.el
-(autoload (quote rx-to-string) "rx" "\
+(autoload 'rx-to-string "rx" "\
Parse and produce code for regular expression FORM.
FORM is a regular expression in sexp form.
NO-GROUP non-nil means don't put shy groups around the result.
\(fn FORM &optional NO-GROUP)" nil nil)
-(autoload (quote rx) "rx" "\
+(autoload 'rx "rx" "\
Translate regular expressions REGEXPS in sexp form to a regexp string.
REGEXPS is a non-empty sequence of forms of the sort listed below.
See also `rx-to-string' for how to do such a translation at run-time.
@@ -23265,7 +23528,7 @@ CHAR
`not-newline', `nonl'
matches any character except a newline.
- .
+
`anything'
matches any character
@@ -23552,7 +23815,7 @@ enclosed in `(and ...)'.
;;;***
;;;### (autoloads (savehist-mode savehist-mode) "savehist" "savehist.el"
-;;;;;; (17842 58279))
+;;;;;; (18211 32385))
;;; Generated autoloads from savehist.el
(defvar savehist-mode nil "\
@@ -23560,9 +23823,9 @@ Mode for automatic saving of minibuffer history.
Set this by calling the `savehist-mode' function or using the customize
interface.")
-(custom-autoload (quote savehist-mode) "savehist" nil)
+(custom-autoload 'savehist-mode "savehist" nil)
-(autoload (quote savehist-mode) "savehist" "\
+(autoload 'savehist-mode "savehist" "\
Toggle savehist-mode.
Positive ARG turns on `savehist-mode'. When on, savehist-mode causes
minibuffer history to be saved periodically and when exiting Emacs.
@@ -23578,10 +23841,10 @@ which is probably undesirable.
;;;***
;;;### (autoloads (dsssl-mode scheme-mode) "scheme" "progmodes/scheme.el"
-;;;;;; (17842 56332))
+;;;;;; (18120 34753))
;;; Generated autoloads from progmodes/scheme.el
-(autoload (quote scheme-mode) "scheme" "\
+(autoload 'scheme-mode "scheme" "\
Major mode for editing Scheme code.
Editing commands are similar to those of `lisp-mode'.
@@ -23603,7 +23866,7 @@ if that value is non-nil.
\(fn)" t nil)
-(autoload (quote dsssl-mode) "scheme" "\
+(autoload 'dsssl-mode "scheme" "\
Major mode for editing DSSSL code.
Editing commands are similar to those of `lisp-mode'.
@@ -23620,10 +23883,10 @@ that variable's value is a string.
;;;***
;;;### (autoloads (gnus-score-mode) "score-mode" "gnus/score-mode.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/score-mode.el
-(autoload (quote gnus-score-mode) "score-mode" "\
+(autoload 'gnus-score-mode "score-mode" "\
Mode for editing Gnus score files.
This mode is an extended emacs-lisp mode.
@@ -23634,7 +23897,7 @@ This mode is an extended emacs-lisp mode.
;;;***
;;;### (autoloads (scroll-all-mode) "scroll-all" "scroll-all.el"
-;;;;;; (17842 58278))
+;;;;;; (18088 55088))
;;; Generated autoloads from scroll-all.el
(defvar scroll-all-mode nil "\
@@ -23644,9 +23907,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `scroll-all-mode'.")
-(custom-autoload (quote scroll-all-mode) "scroll-all" nil)
+(custom-autoload 'scroll-all-mode "scroll-all" nil)
-(autoload (quote scroll-all-mode) "scroll-all" "\
+(autoload 'scroll-all-mode "scroll-all" "\
Toggle Scroll-All minor mode.
With ARG, turn Scroll-All minor mode on if ARG is positive, off otherwise.
When Scroll-All mode is on, scrolling commands entered in one window
@@ -23657,11 +23920,11 @@ apply to all visible windows in the same frame.
;;;***
;;;### (autoloads (scroll-lock-mode) "scroll-lock" "scroll-lock.el"
-;;;;;; (17842 58278))
+;;;;;; (18202 3996))
;;; Generated autoloads from scroll-lock.el
-(autoload (quote scroll-lock-mode) "scroll-lock" "\
-Minor mode for pager-like scrolling.
+(autoload 'scroll-lock-mode "scroll-lock" "\
+Buffer-local minor mode for pager-like scrolling.
Keys which normally move point by line or paragraph will scroll
the buffer by the respective amount of lines instead and point
will be kept vertically fixed relative to window boundaries
@@ -23679,10 +23942,10 @@ during scrolling.
;;;;;; mail-alias-file mail-default-reply-to mail-archive-file-name
;;;;;; mail-header-separator send-mail-function mail-interactive
;;;;;; mail-self-blind mail-specify-envelope-from mail-from-style)
-;;;;;; "sendmail" "mail/sendmail.el" (17942 63381))
+;;;;;; "sendmail" "mail/sendmail.el" (18197 21674))
;;; Generated autoloads from mail/sendmail.el
-(defvar mail-from-style (quote angles) "\
+(defvar mail-from-style 'angles "\
Specifies how \"From:\" fields look.
If `nil', they contain just the return address like:
@@ -23699,7 +23962,7 @@ Emacs to pass the proper email address from `user-mail-address'
to the mailer to specify the envelope-from address. But that is now
controlled by a separate variable, `mail-specify-envelope-from'.")
-(custom-autoload (quote mail-from-style) "sendmail" t)
+(custom-autoload 'mail-from-style "sendmail" t)
(defvar mail-specify-envelope-from nil "\
If non-nil, specify the envelope-from address when sending mail.
@@ -23711,24 +23974,24 @@ privileged operation. This variable affects sendmail and
smtpmail -- if you use feedmail to send mail, see instead the
variable `feedmail-deduce-envelope-from'.")
-(custom-autoload (quote mail-specify-envelope-from) "sendmail" t)
+(custom-autoload 'mail-specify-envelope-from "sendmail" t)
(defvar mail-self-blind nil "\
Non-nil means insert BCC to self in messages to be sent.
This is done when the message is initialized,
so you can remove or alter the BCC field to override the default.")
-(custom-autoload (quote mail-self-blind) "sendmail" t)
+(custom-autoload 'mail-self-blind "sendmail" t)
(defvar mail-interactive nil "\
Non-nil means when sending a message wait for and display errors.
nil means let mailer mail back a message to report errors.")
-(custom-autoload (quote mail-interactive) "sendmail" t)
+(custom-autoload 'mail-interactive "sendmail" t)
-(put (quote send-mail-function) (quote standard-value) (quote ((if (and window-system (memq system-type (quote (darwin windows-nt)))) (quote mailclient-send-it) (quote sendmail-send-it)))))
+(put 'send-mail-function 'standard-value '((if (and window-system (memq system-type '(darwin windows-nt))) 'mailclient-send-it 'sendmail-send-it)))
-(defvar send-mail-function (if (and window-system (memq system-type (quote (darwin windows-nt)))) (quote mailclient-send-it) (quote sendmail-send-it)) "\
+(defvar send-mail-function (if (and window-system (memq system-type '(darwin windows-nt))) 'mailclient-send-it 'sendmail-send-it) "\
Function to call to send the current buffer as mail.
The headers should be delimited by a line which is
not a valid RFC822 header or continuation line,
@@ -23736,25 +23999,25 @@ that matches the variable `mail-header-separator'.
This is used by the default mail-sending commands. See also
`message-send-mail-function' for use with the Message package.")
-(custom-autoload (quote send-mail-function) "sendmail" t)
+(custom-autoload 'send-mail-function "sendmail" t)
(defvar mail-header-separator "--text follows this line--" "\
Line used to separate headers from text in messages being composed.")
-(custom-autoload (quote mail-header-separator) "sendmail" t)
+(custom-autoload 'mail-header-separator "sendmail" t)
(defvar mail-archive-file-name nil "\
Name of file to write all outgoing messages in, or nil for none.
This can be an inbox file or an Rmail file.")
-(custom-autoload (quote mail-archive-file-name) "sendmail" t)
+(custom-autoload 'mail-archive-file-name "sendmail" t)
(defvar mail-default-reply-to nil "\
Address to insert as default Reply-to field of outgoing messages.
If nil, it will be initialized from the REPLYTO environment variable
when you first send mail.")
-(custom-autoload (quote mail-default-reply-to) "sendmail" t)
+(custom-autoload 'mail-default-reply-to "sendmail" t)
(defvar mail-alias-file nil "\
If non-nil, the name of a file to use instead of `/usr/lib/aliases'.
@@ -23762,7 +24025,7 @@ This file defines aliases to be expanded by the mailer; this is a different
feature from that of defining aliases in `.mailrc' to be expanded in Emacs.
This variable has no effect unless your system uses sendmail as its mailer.")
-(custom-autoload (quote mail-alias-file) "sendmail" t)
+(custom-autoload 'mail-alias-file "sendmail" t)
(defvar mail-personal-alias-file "~/.mailrc" "\
If non-nil, the name of the user's personal mail alias file.
@@ -23770,13 +24033,13 @@ This file typically should be in same format as the `.mailrc' file used by
the `Mail' or `mailx' program.
This file need not actually exist.")
-(custom-autoload (quote mail-personal-alias-file) "sendmail" t)
+(custom-autoload 'mail-personal-alias-file "sendmail" t)
(defvar mail-setup-hook nil "\
Normal hook, run each time a new outgoing mail message is initialized.
The function `mail-setup' runs this hook.")
-(custom-autoload (quote mail-setup-hook) "sendmail" t)
+(custom-autoload 'mail-setup-hook "sendmail" t)
(defvar mail-aliases t "\
Alist of mail address aliases,
@@ -23790,13 +24053,13 @@ The alias definitions in the file have this form:
Prefix insert on lines of yanked message being replied to.
nil means use indentation.")
-(custom-autoload (quote mail-yank-prefix) "sendmail" t)
+(custom-autoload 'mail-yank-prefix "sendmail" t)
(defvar mail-indentation-spaces 3 "\
Number of spaces to insert at the beginning of each cited line.
Used by `mail-yank-original' via `mail-indent-citation'.")
-(custom-autoload (quote mail-indentation-spaces) "sendmail" t)
+(custom-autoload 'mail-indentation-spaces "sendmail" t)
(defvar mail-citation-hook nil "\
Hook for modifying a citation just inserted in the mail buffer.
@@ -23809,7 +24072,7 @@ in the cited portion of the message.
If this hook is entirely empty (nil), a default action is taken
instead of no action.")
-(custom-autoload (quote mail-citation-hook) "sendmail" t)
+(custom-autoload 'mail-citation-hook "sendmail" t)
(defvar mail-citation-prefix-regexp "[ ]*[-a-z0-9A-Z]*>+[ ]*\\|[ ]*" "\
Regular expression to match a citation prefix plus whitespace.
@@ -23817,7 +24080,7 @@ It should match whatever sort of citation prefixes you want to handle,
with whitespace before and after; it should also match just whitespace.
The default value matches citations like `foo-bar>' plus whitespace.")
-(custom-autoload (quote mail-citation-prefix-regexp) "sendmail" t)
+(custom-autoload 'mail-citation-prefix-regexp "sendmail" t)
(defvar mail-signature nil "\
Text inserted at end of mail buffer when a message is initialized.
@@ -23828,26 +24091,26 @@ If a string, that string is inserted.
Otherwise, it should be an expression; it is evaluated
and should insert whatever you want to insert.")
-(custom-autoload (quote mail-signature) "sendmail" t)
+(custom-autoload 'mail-signature "sendmail" t)
(defvar mail-signature-file "~/.signature" "\
File containing the text inserted at end of mail buffer.")
-(custom-autoload (quote mail-signature-file) "sendmail" t)
+(custom-autoload 'mail-signature-file "sendmail" t)
(defvar mail-default-directory "~/" "\
Directory for mail buffers.
Value of `default-directory' for mail buffers.
This directory is used for auto-save files of mail buffers.")
-(custom-autoload (quote mail-default-directory) "sendmail" t)
+(custom-autoload 'mail-default-directory "sendmail" t)
(defvar mail-default-headers nil "\
A string containing header lines, to be inserted in outgoing messages.
It is inserted before you edit the message,
so you can edit or delete these lines.")
-(custom-autoload (quote mail-default-headers) "sendmail" t)
+(custom-autoload 'mail-default-headers "sendmail" t)
(defvar mail-bury-selects-summary t "\
If non-nil, try to show RMAIL summary buffer after returning from mail.
@@ -23855,9 +24118,9 @@ The functions \\[mail-send-on-exit] or \\[mail-dont-send] select
the RMAIL summary buffer before returning, if it exists and this variable
is non-nil.")
-(custom-autoload (quote mail-bury-selects-summary) "sendmail" t)
+(custom-autoload 'mail-bury-selects-summary "sendmail" t)
-(defvar mail-send-nonascii (quote mime) "\
+(defvar mail-send-nonascii 'mime "\
Specify whether to allow sending non-ASCII characters in mail.
If t, that means do allow it. nil means don't allow it.
`query' means ask the user each time.
@@ -23866,9 +24129,9 @@ The default is `mime'.
Including non-ASCII characters in a mail message can be problematical
for the recipient, who may not know how to decode them properly.")
-(custom-autoload (quote mail-send-nonascii) "sendmail" t)
+(custom-autoload 'mail-send-nonascii "sendmail" t)
-(autoload (quote mail-mode) "sendmail" "\
+(autoload 'mail-mode "sendmail" "\
Major mode for editing mail to be sent.
Like Text Mode but with these additional commands:
@@ -23897,7 +24160,7 @@ Turning on Mail mode runs the normal hooks `text-mode-hook' and
The variable is used to trigger insertion of the \"Mail-Followup-To\"
header when sending a message to a mailing list.")
-(custom-autoload (quote mail-mailing-lists) "sendmail" t)
+(custom-autoload 'mail-mailing-lists "sendmail" t)
(defvar sendmail-coding-system nil "\
*Coding system for encoding the outgoing mail.
@@ -23906,7 +24169,7 @@ and `default-sendmail-coding-system',
but lower priority than the local value of `buffer-file-coding-system'.
See also the function `select-message-coding-system'.")
-(defvar default-sendmail-coding-system (quote iso-latin-1) "\
+(defvar default-sendmail-coding-system 'iso-latin-1 "\
Default coding system for encoding the outgoing mail.
This variable is used only when `sendmail-coding-system' is nil.
@@ -23917,7 +24180,7 @@ of outgoing mails regardless of the current language environment.
See also the function `select-message-coding-system'.")
(add-hook 'same-window-buffer-names "*mail*")
-(autoload (quote mail) "sendmail" "\
+(autoload 'mail "sendmail" "\
Edit a message to be sent. Prefix arg means resume editing (don't erase).
When this function returns, the buffer `*mail*' is selected.
The value is t if the message was newly initialized; otherwise, nil.
@@ -23967,27 +24230,27 @@ The seventh argument ACTIONS is a list of actions to take
\(fn &optional NOERASE TO SUBJECT IN-REPLY-TO CC REPLYBUFFER ACTIONS)" t nil)
-(autoload (quote mail-other-window) "sendmail" "\
+(autoload 'mail-other-window "sendmail" "\
Like `mail' command, but display mail buffer in another window.
\(fn &optional NOERASE TO SUBJECT IN-REPLY-TO CC REPLYBUFFER SENDACTIONS)" t nil)
-(autoload (quote mail-other-frame) "sendmail" "\
+(autoload 'mail-other-frame "sendmail" "\
Like `mail' command, but display mail buffer in another frame.
\(fn &optional NOERASE TO SUBJECT IN-REPLY-TO CC REPLYBUFFER SENDACTIONS)" t nil)
;;;***
-;;;### (autoloads (server-mode server-start) "server" "server.el"
-;;;;;; (17921 16827))
+;;;### (autoloads (server-save-buffers-kill-terminal server-mode
+;;;;;; server-start) "server" "server.el" (18213 13926))
;;; Generated autoloads from server.el
-(autoload (quote server-start) "server" "\
+(autoload 'server-start "server" "\
Allow this Emacs process to be a server for client processes.
This starts a server communications subprocess through which
-client \"editors\" can send your editing commands to this Emacs job.
-To use the server, set up the program `emacsclient' in the
+client \"editors\" can send your editing commands to this Emacs
+job. To use the server, set up the program `emacsclient' in the
Emacs distribution as your standard \"editor\".
Optional argument LEAVE-DEAD (interactively, a prefix arg) means just
@@ -24002,9 +24265,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `server-mode'.")
-(custom-autoload (quote server-mode) "server" nil)
+(custom-autoload 'server-mode "server" nil)
-(autoload (quote server-mode) "server" "\
+(autoload 'server-mode "server" "\
Toggle Server mode.
With ARG, turn Server mode on if ARG is positive, off otherwise.
Server mode runs a process that accepts commands from the
@@ -24012,12 +24275,22 @@ Server mode runs a process that accepts commands from the
\(fn &optional ARG)" t nil)
+(autoload 'server-save-buffers-kill-terminal "server" "\
+Offer to save each buffer, then kill PROC.
+
+With prefix arg, silently save all file-visiting buffers, then kill.
+
+If emacsclient was started with a list of filenames to edit, then
+only these files will be asked to be saved.
+
+\(fn PROC &optional ARG)" nil nil)
+
;;;***
-;;;### (autoloads (ses-mode) "ses" "ses.el" (17902 31690))
+;;;### (autoloads (ses-mode) "ses" "ses.el" (18209 8664))
;;; Generated autoloads from ses.el
-(autoload (quote ses-mode) "ses" "\
+(autoload 'ses-mode "ses" "\
Major mode for Simple Emacs Spreadsheet.
See \"ses-example.ses\" (in `data-directory') for more info.
@@ -24033,10 +24306,10 @@ These are active only in the minibuffer, when entering or editing a formula:
;;;***
;;;### (autoloads (html-mode sgml-mode) "sgml-mode" "textmodes/sgml-mode.el"
-;;;;;; (18010 58080))
+;;;;;; (18120 34753))
;;; Generated autoloads from textmodes/sgml-mode.el
-(autoload (quote sgml-mode) "sgml-mode" "\
+(autoload 'sgml-mode "sgml-mode" "\
Major mode for editing SGML documents.
Makes > match <.
Keys <, &, SPC within <>, \", / and ' can be electric depending on
@@ -24057,9 +24330,9 @@ Do \\[describe-key] on the following bindings to discover what they do.
\(fn)" t nil)
-(defalias (quote xml-mode) (quote sgml-mode))
+(defalias 'xml-mode 'sgml-mode)
-(autoload (quote html-mode) "sgml-mode" "\
+(autoload 'html-mode "sgml-mode" "\
Major mode based on SGML mode for editing HTML documents.
This allows inserting skeleton constructs used in hypertext documents with
completion. See below for an introduction to HTML. Use
@@ -24101,11 +24374,11 @@ To work around that, do:
;;;***
;;;### (autoloads (sh-mode) "sh-script" "progmodes/sh-script.el"
-;;;;;; (17992 30878))
+;;;;;; (18173 8196))
;;; Generated autoloads from progmodes/sh-script.el
(put 'sh-shell 'safe-local-variable 'symbolp)
-(autoload (quote sh-mode) "sh-script" "\
+(autoload 'sh-mode "sh-script" "\
Major mode for editing shell scripts.
This mode works for many shells, since they all have roughly the same syntax,
as far as commands, arguments, variables, pipes, comments etc. are concerned.
@@ -24161,14 +24434,14 @@ with your script for an edit-interpret-debug cycle.
\(fn)" t nil)
-(defalias (quote shell-script-mode) (quote sh-mode))
+(defalias 'shell-script-mode 'sh-mode)
;;;***
-;;;### (autoloads (sha1) "sha1" "gnus/sha1.el" (17842 54741))
+;;;### (autoloads (sha1) "sha1" "gnus/sha1.el" (18130 62048))
;;; Generated autoloads from gnus/sha1.el
-(autoload (quote sha1) "sha1" "\
+(autoload 'sha1 "sha1" "\
Return the SHA1 (Secure Hash Algorithm) of an object.
OBJECT is either a string or a buffer.
Optional arguments BEG and END denote buffer positions for computing the
@@ -24180,10 +24453,10 @@ If BINARY is non-nil, return a string in binary form.
;;;***
;;;### (autoloads (list-load-path-shadows) "shadow" "emacs-lisp/shadow.el"
-;;;;;; (17853 57352))
+;;;;;; (18088 55096))
;;; Generated autoloads from emacs-lisp/shadow.el
-(autoload (quote list-load-path-shadows) "shadow" "\
+(autoload 'list-load-path-shadows "shadow" "\
Display a list of Emacs Lisp files that shadow other files.
This function lists potential load path problems. Directories in
@@ -24227,11 +24500,11 @@ buffer called `*Shadows*'. Shadowings are located by calling the
;;;***
;;;### (autoloads (shadow-initialize shadow-define-regexp-group shadow-define-literal-group
-;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (17842
-;;;;;; 58278))
+;;;;;; shadow-define-cluster) "shadowfile" "shadowfile.el" (18120
+;;;;;; 34749))
;;; Generated autoloads from shadowfile.el
-(autoload (quote shadow-define-cluster) "shadowfile" "\
+(autoload 'shadow-define-cluster "shadowfile" "\
Edit (or create) the definition of a cluster NAME.
This is a group of hosts that share directories, so that copying to or from
one of them is sufficient to update the file on all of them. Clusters are
@@ -24241,7 +24514,7 @@ in the cluster.
\(fn NAME)" t nil)
-(autoload (quote shadow-define-literal-group) "shadowfile" "\
+(autoload 'shadow-define-literal-group "shadowfile" "\
Declare a single file to be shared between sites.
It may have different filenames on each site. When this file is edited, the
new version will be copied to each of the other locations. Sites can be
@@ -24249,7 +24522,7 @@ specific hostnames, or names of clusters (see `shadow-define-cluster').
\(fn)" t nil)
-(autoload (quote shadow-define-regexp-group) "shadowfile" "\
+(autoload 'shadow-define-regexp-group "shadowfile" "\
Make each of a group of files be shared between hosts.
Prompts for regular expression; files matching this are shared between a list
of sites, which are also prompted for. The filenames must be identical on all
@@ -24259,7 +24532,7 @@ Each site can be either a hostname or the name of a cluster (see
\(fn)" t nil)
-(autoload (quote shadow-initialize) "shadowfile" "\
+(autoload 'shadow-initialize "shadowfile" "\
Set up file shadowing.
\(fn)" t nil)
@@ -24267,7 +24540,7 @@ Set up file shadowing.
;;;***
;;;### (autoloads (shell shell-dumb-shell-regexp) "shell" "shell.el"
-;;;;;; (17899 1575))
+;;;;;; (18212 46004))
;;; Generated autoloads from shell.el
(defvar shell-dumb-shell-regexp "cmd\\(proxy\\)?\\.exe" "\
@@ -24277,11 +24550,14 @@ match this regexp, Emacs will write out the command history when the
shell finishes, and won't remove backslashes when it unquotes shell
arguments.")
-(custom-autoload (quote shell-dumb-shell-regexp) "shell" t)
+(custom-autoload 'shell-dumb-shell-regexp "shell" t)
-(autoload (quote shell) "shell" "\
+(autoload 'shell "shell" "\
Run an inferior shell, with I/O through BUFFER (which defaults to `*shell*').
Interactively, a prefix arg means to prompt for BUFFER.
+If `default-directory' is a remote file name, it is also prompted
+to change if called with a prefix arg.
+
If BUFFER exists but shell process is not running, make new shell.
If BUFFER exists and shell process is running, just switch to BUFFER.
Program used comes from variable `explicit-shell-file-name',
@@ -24314,20 +24590,20 @@ Otherwise, one argument `-i' is passed to the shell.
;;;***
;;;### (autoloads (sieve-upload-and-bury sieve-upload sieve-manage)
-;;;;;; "sieve" "gnus/sieve.el" (17842 54741))
+;;;;;; "sieve" "gnus/sieve.el" (18212 46007))
;;; Generated autoloads from gnus/sieve.el
-(autoload (quote sieve-manage) "sieve" "\
+(autoload 'sieve-manage "sieve" "\
Not documented
\(fn SERVER &optional PORT)" t nil)
-(autoload (quote sieve-upload) "sieve" "\
+(autoload 'sieve-upload "sieve" "\
Not documented
\(fn &optional NAME)" t nil)
-(autoload (quote sieve-upload-and-bury) "sieve" "\
+(autoload 'sieve-upload-and-bury "sieve" "\
Not documented
\(fn &optional NAME)" t nil)
@@ -24335,10 +24611,10 @@ Not documented
;;;***
;;;### (autoloads (sieve-mode) "sieve-mode" "gnus/sieve-mode.el"
-;;;;;; (17842 54741))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/sieve-mode.el
-(autoload (quote sieve-mode) "sieve-mode" "\
+(autoload 'sieve-mode "sieve-mode" "\
Major mode for editing Sieve code.
This is much like C mode except for the syntax of comments. Its keymap
inherits from C mode's and it has the same variables for customizing
@@ -24350,17 +24626,17 @@ Turning on Sieve mode runs `sieve-mode-hook'.
;;;***
-;;;### (autoloads nil "simple" "simple.el" (18009 38727))
+;;;### (autoloads nil "simple" "simple.el" (18208 48751))
;;; Generated autoloads from simple.el
(put 'fill-prefix 'safe-local-variable 'string-or-null-p)
;;;***
-;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (17842
-;;;;;; 56332))
+;;;### (autoloads (simula-mode) "simula" "progmodes/simula.el" (18088
+;;;;;; 55117))
;;; Generated autoloads from progmodes/simula.el
-(autoload (quote simula-mode) "simula" "\
+(autoload 'simula-mode "simula" "\
Major mode for editing SIMULA code.
\\{simula-mode-map}
Variables controlling indentation style:
@@ -24406,20 +24682,20 @@ with no arguments, if that value is non-nil.
;;;***
;;;### (autoloads (skeleton-pair-insert-maybe skeleton-insert skeleton-proxy-new
-;;;;;; define-skeleton) "skeleton" "skeleton.el" (17842 58278))
+;;;;;; define-skeleton) "skeleton" "skeleton.el" (18120 34749))
;;; Generated autoloads from skeleton.el
-(defvar skeleton-filter-function (quote identity) "\
+(defvar skeleton-filter-function 'identity "\
Function for transforming a skeleton proxy's aliases' variable value.")
-(autoload (quote define-skeleton) "skeleton" "\
+(autoload 'define-skeleton "skeleton" "\
Define a user-configurable COMMAND that enters a statement skeleton.
DOCUMENTATION is that of the command.
SKELETON is as defined under `skeleton-insert'.
\(fn COMMAND DOCUMENTATION &rest SKELETON)" nil (quote macro))
-(autoload (quote skeleton-proxy-new) "skeleton" "\
+(autoload 'skeleton-proxy-new "skeleton" "\
Insert SKELETON.
Prefix ARG allows wrapping around words or regions (see `skeleton-insert').
If no ARG was given, but the region is visible, ARG defaults to -1 depending
@@ -24432,7 +24708,7 @@ of `str' whereas the skeleton's interactor is then ignored.
\(fn SKELETON &optional STR ARG)" nil nil)
-(autoload (quote skeleton-insert) "skeleton" "\
+(autoload 'skeleton-insert "skeleton" "\
Insert the complex statement skeleton SKELETON describes very concisely.
With optional second argument REGIONS, wrap first interesting point
@@ -24461,8 +24737,8 @@ If ELEMENT is a string or a character it gets inserted (see also
interesting point set by _
> indent line (or interregion if > _) according to major mode
@ add position to `skeleton-positions'
- & do next ELEMENT iff previous moved point
- | do next ELEMENT iff previous didn't move point
+ & do next ELEMENT if previous moved point
+ | do next ELEMENT if previous didn't move point
-num delete num preceding characters (see `skeleton-untabify')
resume: skipped, continue here if quit is signaled
nil skipped
@@ -24497,7 +24773,7 @@ When done with skeleton, but before going back to `_'-point call
\(fn SKELETON &optional REGIONS STR)" nil nil)
-(autoload (quote skeleton-pair-insert-maybe) "skeleton" "\
+(autoload 'skeleton-pair-insert-maybe "skeleton" "\
Insert the character you type ARG times.
With no ARG, if `skeleton-pair' is non-nil, pairing can occur. If the region
@@ -24516,17 +24792,17 @@ symmetrical ones, and the same character twice for the others.
;;;***
;;;### (autoloads (smerge-mode smerge-ediff) "smerge-mode" "smerge-mode.el"
-;;;;;; (17904 28230))
+;;;;;; (18202 3996))
;;; Generated autoloads from smerge-mode.el
-(autoload (quote smerge-ediff) "smerge-mode" "\
+(autoload 'smerge-ediff "smerge-mode" "\
Invoke ediff to resolve the conflicts.
NAME-MINE, NAME-OTHER, and NAME-BASE, if non-nil, are used for the
buffer names.
\(fn &optional NAME-MINE NAME-OTHER NAME-BASE)" t nil)
-(autoload (quote smerge-mode) "smerge-mode" "\
+(autoload 'smerge-mode "smerge-mode" "\
Minor mode to simplify editing output from the diff3 program.
\\{smerge-mode-map}
@@ -24535,16 +24811,16 @@ Minor mode to simplify editing output from the diff3 program.
;;;***
;;;### (autoloads (smiley-buffer smiley-region) "smiley" "gnus/smiley.el"
-;;;;;; (17875 18370))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/smiley.el
-(autoload (quote smiley-region) "smiley" "\
+(autoload 'smiley-region "smiley" "\
Replace in the region `smiley-regexp-alist' matches with corresponding images.
A list of images is returned.
\(fn START END)" t nil)
-(autoload (quote smiley-buffer) "smiley" "\
+(autoload 'smiley-buffer "smiley" "\
Run `smiley-region' at the buffer, specified in the argument or
interactively. If there's no argument, do it at the current buffer
@@ -24553,25 +24829,25 @@ interactively. If there's no argument, do it at the current buffer
;;;***
;;;### (autoloads (smtpmail-send-queued-mail smtpmail-send-it) "smtpmail"
-;;;;;; "mail/smtpmail.el" (17939 50716))
+;;;;;; "mail/smtpmail.el" (18088 55110))
;;; Generated autoloads from mail/smtpmail.el
-(autoload (quote smtpmail-send-it) "smtpmail" "\
+(autoload 'smtpmail-send-it "smtpmail" "\
Not documented
\(fn)" nil nil)
-(autoload (quote smtpmail-send-queued-mail) "smtpmail" "\
+(autoload 'smtpmail-send-queued-mail "smtpmail" "\
Send mail that was queued as a result of setting `smtpmail-queue-mail'.
\(fn)" t nil)
;;;***
-;;;### (autoloads (snake) "snake" "play/snake.el" (17842 55395))
+;;;### (autoloads (snake) "snake" "play/snake.el" (18088 55114))
;;; Generated autoloads from play/snake.el
-(autoload (quote snake) "snake" "\
+(autoload 'snake "snake" "\
Play the Snake game.
Move the snake around without colliding with its tail or with the border.
@@ -24592,10 +24868,10 @@ Snake mode keybindings:
;;;***
;;;### (autoloads (snmpv2-mode snmp-mode) "snmp-mode" "net/snmp-mode.el"
-;;;;;; (17842 55218))
+;;;;;; (18161 20995))
;;; Generated autoloads from net/snmp-mode.el
-(autoload (quote snmp-mode) "snmp-mode" "\
+(autoload 'snmp-mode "snmp-mode" "\
Major mode for editing SNMP MIBs.
Expression and list commands understand all C brackets.
Tab indents for C code.
@@ -24607,7 +24883,7 @@ Turning on snmp-mode runs the hooks in `snmp-common-mode-hook', then
\(fn)" t nil)
-(autoload (quote snmpv2-mode) "snmp-mode" "\
+(autoload 'snmpv2-mode "snmp-mode" "\
Major mode for editing SNMPv2 MIBs.
Expression and list commands understand all C brackets.
Tab indents for C code.
@@ -24623,10 +24899,10 @@ then `snmpv2-mode-hook'.
;;;### (autoloads (solar-equinoxes-solstices sunrise-sunset calendar-location-name
;;;;;; calendar-longitude calendar-latitude calendar-time-display-form)
-;;;;;; "solar" "calendar/solar.el" (17956 13479))
+;;;;;; "solar" "calendar/solar.el" (18088 55094))
;;; Generated autoloads from calendar/solar.el
-(defvar calendar-time-display-form (quote (12-hours ":" minutes am-pm (if time-zone " (") time-zone (if time-zone ")"))) "\
+(defvar calendar-time-display-form '(12-hours ":" minutes am-pm (if time-zone " (") time-zone (if time-zone ")")) "\
*The pseudo-pattern that governs the way a time of day is formatted.
A pseudo-pattern is a list of expressions that can involve the keywords
@@ -24640,7 +24916,7 @@ For example, the form
would give military-style times like `21:07 (UTC)'.")
-(custom-autoload (quote calendar-time-display-form) "solar" t)
+(custom-autoload 'calendar-time-display-form "solar" t)
(defvar calendar-latitude nil "\
*Latitude of `calendar-location-name' in degrees.
@@ -24652,7 +24928,7 @@ York City.
This variable should be set in `site-start'.el.")
-(custom-autoload (quote calendar-latitude) "solar" t)
+(custom-autoload 'calendar-latitude "solar" t)
(defvar calendar-longitude nil "\
*Longitude of `calendar-location-name' in degrees.
@@ -24664,18 +24940,18 @@ York City.
This variable should be set in `site-start'.el.")
-(custom-autoload (quote calendar-longitude) "solar" t)
+(custom-autoload 'calendar-longitude "solar" t)
-(defvar calendar-location-name (quote (let ((float-output-format "%.1f")) (format "%s%s, %s%s" (if (numberp calendar-latitude) (abs calendar-latitude) (+ (aref calendar-latitude 0) (/ (aref calendar-latitude 1) 60.0))) (if (numberp calendar-latitude) (if (> calendar-latitude 0) "N" "S") (if (equal (aref calendar-latitude 2) (quote north)) "N" "S")) (if (numberp calendar-longitude) (abs calendar-longitude) (+ (aref calendar-longitude 0) (/ (aref calendar-longitude 1) 60.0))) (if (numberp calendar-longitude) (if (> calendar-longitude 0) "E" "W") (if (equal (aref calendar-longitude 2) (quote east)) "E" "W"))))) "\
+(defvar calendar-location-name '(let ((float-output-format "%.1f")) (format "%s%s, %s%s" (if (numberp calendar-latitude) (abs calendar-latitude) (+ (aref calendar-latitude 0) (/ (aref calendar-latitude 1) 60.0))) (if (numberp calendar-latitude) (if (> calendar-latitude 0) "N" "S") (if (equal (aref calendar-latitude 2) 'north) "N" "S")) (if (numberp calendar-longitude) (abs calendar-longitude) (+ (aref calendar-longitude 0) (/ (aref calendar-longitude 1) 60.0))) (if (numberp calendar-longitude) (if (> calendar-longitude 0) "E" "W") (if (equal (aref calendar-longitude 2) 'east) "E" "W")))) "\
*Expression evaluating to name of `calendar-longitude', `calendar-latitude'.
For example, \"New York City\". Default value is just the latitude, longitude
pair.
This variable should be set in `site-start'.el.")
-(custom-autoload (quote calendar-location-name) "solar" t)
+(custom-autoload 'calendar-location-name "solar" t)
-(autoload (quote sunrise-sunset) "solar" "\
+(autoload 'sunrise-sunset "solar" "\
Local time of sunrise and sunset for today. Accurate to a few seconds.
If called with an optional prefix argument, prompt for date.
@@ -24686,7 +24962,7 @@ This function is suitable for execution in a .emacs file.
\(fn &optional ARG)" t nil)
-(autoload (quote solar-equinoxes-solstices) "solar" "\
+(autoload 'solar-equinoxes-solstices "solar" "\
*local* date and time of equinoxes and solstices, if visible in the calendar window.
Requires floating point.
@@ -24694,11 +24970,11 @@ Requires floating point.
;;;***
-;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (17842
-;;;;;; 55395))
+;;;### (autoloads (solitaire) "solitaire" "play/solitaire.el" (18173
+;;;;;; 8195))
;;; Generated autoloads from play/solitaire.el
-(autoload (quote solitaire) "solitaire" "\
+(autoload 'solitaire "solitaire" "\
Play Solitaire.
To play Solitaire, type \\[solitaire].
@@ -24772,10 +25048,11 @@ Pick your favourite shortcuts:
;;;### (autoloads (reverse-region sort-columns sort-regexp-fields
;;;;;; sort-fields sort-numeric-fields sort-pages sort-paragraphs
-;;;;;; sort-lines sort-subr) "sort" "sort.el" (17842 58278))
+;;;;;; sort-lines sort-subr) "sort" "sort.el" (18128 32655))
;;; Generated autoloads from sort.el
+(put 'sort-fold-case 'safe-local-variable 'booleanp)
-(autoload (quote sort-subr) "sort" "\
+(autoload 'sort-subr "sort" "\
General text sorting routine to divide buffer into records and sort them.
We divide the accessible portion of the buffer into disjoint pieces
@@ -24816,7 +25093,7 @@ it defaults to `<', otherwise it defaults to `string<'.
\(fn REVERSE NEXTRECFUN ENDRECFUN &optional STARTKEYFUN ENDKEYFUN PREDICATE)" nil nil)
-(autoload (quote sort-lines) "sort" "\
+(autoload 'sort-lines "sort" "\
Sort lines in region alphabetically; argument means descending order.
Called from a program, there are three arguments:
REVERSE (non-nil means reverse order), BEG and END (region to sort).
@@ -24825,7 +25102,7 @@ the sort order.
\(fn REVERSE BEG END)" t nil)
-(autoload (quote sort-paragraphs) "sort" "\
+(autoload 'sort-paragraphs "sort" "\
Sort paragraphs in region alphabetically; argument means descending order.
Called from a program, there are three arguments:
REVERSE (non-nil means reverse order), BEG and END (region to sort).
@@ -24834,7 +25111,7 @@ the sort order.
\(fn REVERSE BEG END)" t nil)
-(autoload (quote sort-pages) "sort" "\
+(autoload 'sort-pages "sort" "\
Sort pages in region alphabetically; argument means descending order.
Called from a program, there are three arguments:
REVERSE (non-nil means reverse order), BEG and END (region to sort).
@@ -24842,8 +25119,9 @@ The variable `sort-fold-case' determines whether alphabetic case affects
the sort order.
\(fn REVERSE BEG END)" t nil)
+(put 'sort-numeric-base 'safe-local-variable 'integerp)
-(autoload (quote sort-numeric-fields) "sort" "\
+(autoload 'sort-numeric-fields "sort" "\
Sort lines in region numerically by the ARGth field of each line.
Fields are separated by whitespace and numbered from 1 up.
Specified field must contain a number in each line of the region,
@@ -24855,7 +25133,7 @@ FIELD, BEG and END. BEG and END specify region to sort.
\(fn FIELD BEG END)" t nil)
-(autoload (quote sort-fields) "sort" "\
+(autoload 'sort-fields "sort" "\
Sort lines in region lexicographically by the ARGth field of each line.
Fields are separated by whitespace and numbered from 1 up.
With a negative arg, sorts by the ARGth field counted from the right.
@@ -24866,7 +25144,7 @@ the sort order.
\(fn FIELD BEG END)" t nil)
-(autoload (quote sort-regexp-fields) "sort" "\
+(autoload 'sort-regexp-fields "sort" "\
Sort the region lexicographically as specified by RECORD-REGEXP and KEY.
RECORD-REGEXP specifies the textual units which should be sorted.
For example, to sort lines RECORD-REGEXP would be \"^.*$\"
@@ -24889,7 +25167,7 @@ For example: to sort lines in the region by the first word on each line
\(fn REVERSE RECORD-REGEXP KEY-REGEXP BEG END)" t nil)
-(autoload (quote sort-columns) "sort" "\
+(autoload 'sort-columns "sort" "\
Sort lines in region alphabetically by a certain range of columns.
For the purpose of this command, the region BEG...END includes
the entire line that point is in and the entire line the mark is in.
@@ -24906,7 +25184,7 @@ Use \\[untabify] to convert tabs to spaces before sorting.
\(fn REVERSE &optional BEG END)" t nil)
-(autoload (quote reverse-region) "sort" "\
+(autoload 'reverse-region "sort" "\
Reverse the order of lines in a region.
From a program takes two point or marker arguments, BEG and END.
@@ -24914,23 +25192,27 @@ From a program takes two point or marker arguments, BEG and END.
;;;***
-;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (17842
-;;;;;; 54741))
+;;;### (autoloads (spam-initialize) "spam" "gnus/spam.el" (18212
+;;;;;; 46007))
;;; Generated autoloads from gnus/spam.el
-(autoload (quote spam-initialize) "spam" "\
-Install the spam.el hooks and do other initialization
+(autoload 'spam-initialize "spam" "\
+Install the spam.el hooks and do other initialization.
+When SYMBOLS is given, set those variables to t. This is so you
+can call spam-initialize before you set spam-use-* variables on
+explicitly, and matters only if you need the extra headers
+installed through spam-necessary-extra-headers.
-\(fn)" t nil)
+\(fn &rest SYMBOLS)" t nil)
;;;***
;;;### (autoloads (spam-report-deagentize spam-report-agentize spam-report-url-to-file
;;;;;; spam-report-url-ping-mm-url spam-report-process-queue) "spam-report"
-;;;;;; "gnus/spam-report.el" (17842 54741))
+;;;;;; "gnus/spam-report.el" (18212 46007))
;;; Generated autoloads from gnus/spam-report.el
-(autoload (quote spam-report-process-queue) "spam-report" "\
+(autoload 'spam-report-process-queue "spam-report" "\
Report all queued requests from `spam-report-requests-file'.
If FILE is given, use it instead of `spam-report-requests-file'.
@@ -24939,20 +25221,20 @@ symbol `ask', query before flushing the queue file.
\(fn &optional FILE KEEP)" t nil)
-(autoload (quote spam-report-url-ping-mm-url) "spam-report" "\
+(autoload 'spam-report-url-ping-mm-url "spam-report" "\
Ping a host through HTTP, addressing a specific GET resource. Use
the external program specified in `mm-url-program' to connect to
server.
\(fn HOST REPORT)" nil nil)
-(autoload (quote spam-report-url-to-file) "spam-report" "\
+(autoload 'spam-report-url-to-file "spam-report" "\
Collect spam report requests in `spam-report-requests-file'.
Customize `spam-report-url-ping-function' to use this function.
\(fn HOST REPORT)" nil nil)
-(autoload (quote spam-report-agentize) "spam-report" "\
+(autoload 'spam-report-agentize "spam-report" "\
Add spam-report support to the Agent.
Spam reports will be queued with \\[spam-report-url-to-file] when
the Agent is unplugged, and will be submitted in a batch when the
@@ -24960,7 +25242,7 @@ Agent is plugged.
\(fn)" t nil)
-(autoload (quote spam-report-deagentize) "spam-report" "\
+(autoload 'spam-report-deagentize "spam-report" "\
Remove spam-report support from the Agent.
Spam reports will be queued with the method used when
\\[spam-report-agentize] was run.
@@ -24970,12 +25252,12 @@ Spam reports will be queued with the method used when
;;;***
;;;### (autoloads (speedbar-get-focus speedbar-frame-mode) "speedbar"
-;;;;;; "speedbar.el" (17881 43027))
+;;;;;; "speedbar.el" (18164 30590))
;;; Generated autoloads from speedbar.el
-(defalias (quote speedbar) (quote speedbar-frame-mode))
+(defalias 'speedbar 'speedbar-frame-mode)
-(autoload (quote speedbar-frame-mode) "speedbar" "\
+(autoload 'speedbar-frame-mode "speedbar" "\
Enable or disable speedbar. Positive ARG means turn on, negative turn off.
A nil ARG means toggle. Once the speedbar frame is activated, a buffer in
`speedbar-mode' will be displayed. Currently, only one speedbar is
@@ -24985,7 +25267,7 @@ supported at a time.
\(fn &optional ARG)" t nil)
-(autoload (quote speedbar-get-focus) "speedbar" "\
+(autoload 'speedbar-get-focus "speedbar" "\
Change frame focus to or from the speedbar frame.
If the selected frame is not speedbar, then speedbar frame is
selected. If the speedbar frame is active, then select the attached frame.
@@ -24995,12 +25277,12 @@ selected. If the speedbar frame is active, then select the attached frame.
;;;***
;;;### (autoloads (spell-string spell-region spell-word spell-buffer)
-;;;;;; "spell" "textmodes/spell.el" (17842 58276))
+;;;;;; "spell" "textmodes/spell.el" (18088 55120))
;;; Generated autoloads from textmodes/spell.el
-(put (quote spell-filter) (quote risky-local-variable) t)
+(put 'spell-filter 'risky-local-variable t)
-(autoload (quote spell-buffer) "spell" "\
+(autoload 'spell-buffer "spell" "\
Check spelling of every word in the buffer.
For each incorrect word, you are asked for the correct spelling
and then put into a query-replace to fix some or all occurrences.
@@ -25009,14 +25291,14 @@ as its \"correct\" spelling; then the query replace is skipped.
\(fn)" t nil)
-(autoload (quote spell-word) "spell" "\
+(autoload 'spell-word "spell" "\
Check spelling of word at or before point.
If it is not correct, ask user for the correct spelling
and `query-replace' the entire buffer to substitute it.
\(fn)" t nil)
-(autoload (quote spell-region) "spell" "\
+(autoload 'spell-region "spell" "\
Like `spell-buffer' but applies only to region.
Used in a program, applies from START to END.
DESCRIPTION is an optional string naming the unit being checked:
@@ -25024,23 +25306,23 @@ for example, \"word\".
\(fn START END &optional DESCRIPTION)" t nil)
-(autoload (quote spell-string) "spell" "\
+(autoload 'spell-string "spell" "\
Check spelling of string supplied as argument.
\(fn STRING)" t nil)
;;;***
-;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (17842
-;;;;;; 55395))
+;;;### (autoloads (snarf-spooks spook) "spook" "play/spook.el" (18088
+;;;;;; 55114))
;;; Generated autoloads from play/spook.el
-(autoload (quote spook) "spook" "\
+(autoload 'spook "spook" "\
Adds that special touch of class to your outgoing mail.
\(fn)" t nil)
-(autoload (quote snarf-spooks) "spook" "\
+(autoload 'snarf-spooks "spook" "\
Return a vector containing the lines from `spook-phrases-file'.
\(fn)" nil nil)
@@ -25050,11 +25332,11 @@ Return a vector containing the lines from `spook-phrases-file'.
;;;### (autoloads (sql-linter sql-db2 sql-interbase sql-postgres
;;;;;; sql-ms sql-ingres sql-solid sql-mysql sql-sqlite sql-informix
;;;;;; sql-sybase sql-oracle sql-product-interactive sql-mode sql-help
-;;;;;; sql-add-product-keywords) "sql" "progmodes/sql.el" (17842
-;;;;;; 56332))
+;;;;;; sql-add-product-keywords) "sql" "progmodes/sql.el" (18173
+;;;;;; 8196))
;;; Generated autoloads from progmodes/sql.el
-(autoload (quote sql-add-product-keywords) "sql" "\
+(autoload 'sql-add-product-keywords "sql" "\
Add highlighting KEYWORDS for SQL PRODUCT.
PRODUCT should be a symbol, the name of a sql product, such as
@@ -25075,7 +25357,7 @@ adds a fontification pattern to fontify identifiers ending in
\(fn PRODUCT KEYWORDS &optional APPEND)" nil nil)
-(autoload (quote sql-help) "sql" "\
+(autoload 'sql-help "sql" "\
Show short help for the SQL modes.
Use an entry function to open an interactive SQL buffer. This buffer is
@@ -25117,7 +25399,7 @@ appended to the SQLi buffer without disturbing your SQL buffer.
\(fn)" t nil)
-(autoload (quote sql-mode) "sql" "\
+(autoload 'sql-mode "sql" "\
Major mode to edit SQL.
You can send SQL statements to the SQLi buffer using
@@ -25147,7 +25429,7 @@ you must tell Emacs. Here's how to do that in your `~/.emacs' file:
\(fn)" t nil)
-(autoload (quote sql-product-interactive) "sql" "\
+(autoload 'sql-product-interactive "sql" "\
Run product interpreter as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25158,7 +25440,7 @@ If buffer exists and a process is running, just switch to buffer
\(fn &optional PRODUCT)" t nil)
-(autoload (quote sql-oracle) "sql" "\
+(autoload 'sql-oracle "sql" "\
Run sqlplus by Oracle as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25184,7 +25466,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-sybase) "sql" "\
+(autoload 'sql-sybase "sql" "\
Run isql by SyBase as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25210,7 +25492,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-informix) "sql" "\
+(autoload 'sql-informix "sql" "\
Run dbaccess by Informix as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25234,7 +25516,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-sqlite) "sql" "\
+(autoload 'sql-sqlite "sql" "\
Run sqlite as an inferior process.
SQLite is free software.
@@ -25262,7 +25544,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-mysql) "sql" "\
+(autoload 'sql-mysql "sql" "\
Run mysql by TcX as an inferior process.
Mysql versions 3.23 and up are free software.
@@ -25290,7 +25572,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-solid) "sql" "\
+(autoload 'sql-solid "sql" "\
Run solsql by Solid as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25315,7 +25597,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-ingres) "sql" "\
+(autoload 'sql-ingres "sql" "\
Run sql by Ingres as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25339,7 +25621,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-ms) "sql" "\
+(autoload 'sql-ms "sql" "\
Run osql by Microsoft as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25365,7 +25647,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-postgres) "sql" "\
+(autoload 'sql-postgres "sql" "\
Run psql by Postgres as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25396,7 +25678,7 @@ Try to set `comint-output-filter-functions' like this:
\(fn)" t nil)
-(autoload (quote sql-interbase) "sql" "\
+(autoload 'sql-interbase "sql" "\
Run isql by Interbase as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25421,7 +25703,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-db2) "sql" "\
+(autoload 'sql-db2 "sql" "\
Run db2 by IBM as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25450,7 +25732,7 @@ The default comes from `process-coding-system-alist' and
\(fn)" t nil)
-(autoload (quote sql-linter) "sql" "\
+(autoload 'sql-linter "sql" "\
Run inl by RELEX as an inferior process.
If buffer `*SQL*' exists but no process is running, make a new process.
@@ -25482,11 +25764,11 @@ input. See `sql-interactive-mode'.
;;;;;; strokes-mode strokes-list-strokes strokes-load-user-strokes
;;;;;; strokes-help strokes-describe-stroke strokes-do-complex-stroke
;;;;;; strokes-do-stroke strokes-read-complex-stroke strokes-read-stroke
-;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (17842
-;;;;;; 58278))
+;;;;;; strokes-global-set-stroke) "strokes" "strokes.el" (18120
+;;;;;; 34749))
;;; Generated autoloads from strokes.el
-(autoload (quote strokes-global-set-stroke) "strokes" "\
+(autoload 'strokes-global-set-stroke "strokes" "\
Interactively give STROKE the global binding as COMMAND.
Operated just like `global-set-key', except for strokes.
COMMAND is a symbol naming an interactively-callable function. STROKE
@@ -25497,7 +25779,7 @@ See also `strokes-global-set-stroke-string'.
\(fn STROKE COMMAND)" t nil)
-(autoload (quote strokes-read-stroke) "strokes" "\
+(autoload 'strokes-read-stroke "strokes" "\
Read a simple stroke (interactively) and return the stroke.
Optional PROMPT in minibuffer displays before and during stroke reading.
This function will display the stroke interactively as it is being
@@ -25507,7 +25789,7 @@ Optional EVENT is acceptable as the starting event of the stroke.
\(fn &optional PROMPT EVENT)" nil nil)
-(autoload (quote strokes-read-complex-stroke) "strokes" "\
+(autoload 'strokes-read-complex-stroke "strokes" "\
Read a complex stroke (interactively) and return the stroke.
Optional PROMPT in minibuffer displays before and during stroke reading.
Note that a complex stroke allows the user to pen-up and pen-down. This
@@ -25517,34 +25799,34 @@ Optional EVENT is acceptable as the starting event of the stroke.
\(fn &optional PROMPT EVENT)" nil nil)
-(autoload (quote strokes-do-stroke) "strokes" "\
+(autoload 'strokes-do-stroke "strokes" "\
Read a simple stroke from the user and then execute its command.
This must be bound to a mouse event.
\(fn EVENT)" t nil)
-(autoload (quote strokes-do-complex-stroke) "strokes" "\
+(autoload 'strokes-do-complex-stroke "strokes" "\
Read a complex stroke from the user and then execute its command.
This must be bound to a mouse event.
\(fn EVENT)" t nil)
-(autoload (quote strokes-describe-stroke) "strokes" "\
+(autoload 'strokes-describe-stroke "strokes" "\
Displays the command which STROKE maps to, reading STROKE interactively.
\(fn STROKE)" t nil)
-(autoload (quote strokes-help) "strokes" "\
+(autoload 'strokes-help "strokes" "\
Get instruction on using the Strokes package.
\(fn)" t nil)
-(autoload (quote strokes-load-user-strokes) "strokes" "\
+(autoload 'strokes-load-user-strokes "strokes" "\
Load user-defined strokes from file named by `strokes-file'.
\(fn)" t nil)
-(autoload (quote strokes-list-strokes) "strokes" "\
+(autoload 'strokes-list-strokes "strokes" "\
Pop up a buffer containing an alphabetical listing of strokes in STROKES-MAP.
With CHRONOLOGICAL prefix arg (\\[universal-argument]) list strokes
chronologically by command name.
@@ -25559,9 +25841,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `strokes-mode'.")
-(custom-autoload (quote strokes-mode) "strokes" nil)
+(custom-autoload 'strokes-mode "strokes" nil)
-(autoload (quote strokes-mode) "strokes" "\
+(autoload 'strokes-mode "strokes" "\
Toggle Strokes global minor mode.\\<strokes-mode-map>
With ARG, turn strokes on if and only if ARG is positive.
Strokes are pictographic mouse gestures which invoke commands.
@@ -25578,14 +25860,14 @@ Encode/decode your strokes with \\[strokes-encode-buffer],
\(fn &optional ARG)" t nil)
-(autoload (quote strokes-decode-buffer) "strokes" "\
+(autoload 'strokes-decode-buffer "strokes" "\
Decode stroke strings in BUFFER and display their corresponding glyphs.
Optional BUFFER defaults to the current buffer.
Optional FORCE non-nil will ignore the buffer's read-only status.
\(fn &optional BUFFER FORCE)" t nil)
-(autoload (quote strokes-compose-complex-stroke) "strokes" "\
+(autoload 'strokes-compose-complex-stroke "strokes" "\
Read a complex stroke and insert its glyph into the current buffer.
\(fn)" t nil)
@@ -25593,30 +25875,30 @@ Read a complex stroke and insert its glyph into the current buffer.
;;;***
;;;### (autoloads (studlify-buffer studlify-word studlify-region)
-;;;;;; "studly" "play/studly.el" (16211 27038))
+;;;;;; "studly" "play/studly.el" (16268 23254))
;;; Generated autoloads from play/studly.el
-(autoload (quote studlify-region) "studly" "\
+(autoload 'studlify-region "studly" "\
Studlify-case the region.
\(fn BEGIN END)" t nil)
-(autoload (quote studlify-word) "studly" "\
+(autoload 'studlify-word "studly" "\
Studlify-case the current word, or COUNT words if given an argument.
\(fn COUNT)" t nil)
-(autoload (quote studlify-buffer) "studly" "\
+(autoload 'studlify-buffer "studly" "\
Studlify-case the current buffer.
\(fn)" t nil)
;;;***
-;;;### (autoloads (locate-library) "subr" "subr.el" (17964 48351))
+;;;### (autoloads (locate-library) "subr" "subr.el" (18211 32385))
;;; Generated autoloads from subr.el
-(autoload (quote locate-library) "subr" "\
+(autoload 'locate-library "subr" "\
Show the precise file name of Emacs library LIBRARY.
This command searches the directories in `load-path' like `\\[load-library]'
to find the file that `\\[load-library] RET LIBRARY RET' would load.
@@ -25635,10 +25917,10 @@ and the file name is displayed in the echo area.
;;;***
;;;### (autoloads (sc-cite-original) "supercite" "mail/supercite.el"
-;;;;;; (17854 7564))
+;;;;;; (18173 8195))
;;; Generated autoloads from mail/supercite.el
-(autoload (quote sc-cite-original) "supercite" "\
+(autoload 'sc-cite-original "supercite" "\
Workhorse citing function which performs the initial citation.
This is callable from the various mail and news readers' reply
function according to the agreed upon standard. See the associated
@@ -25667,34 +25949,38 @@ before, and `sc-post-hook' is run after the guts of this function.
;;;***
-;;;### (autoloads (t-mouse-mode) "t-mouse" "t-mouse.el" (18006 55796))
+;;;### (autoloads (gpm-mouse-mode) "t-mouse" "t-mouse.el" (18177
+;;;;;; 7731))
;;; Generated autoloads from t-mouse.el
-(defvar t-mouse-mode nil "\
-Non-nil if T-Mouse mode is enabled.
-See the command `t-mouse-mode' for a description of this minor mode.
+(define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
+
+(defvar gpm-mouse-mode nil "\
+Non-nil if Gpm-Mouse mode is enabled.
+See the command `gpm-mouse-mode' for a description of this minor mode.
Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
-or call the function `t-mouse-mode'.")
+or call the function `gpm-mouse-mode'.")
-(custom-autoload (quote t-mouse-mode) "t-mouse" nil)
+(custom-autoload 'gpm-mouse-mode "t-mouse" nil)
-(autoload (quote t-mouse-mode) "t-mouse" "\
-Toggle t-mouse mode to use the mouse in Linux consoles.
-With prefix arg, turn t-mouse mode on iff arg is positive.
+(autoload 'gpm-mouse-mode "t-mouse" "\
+Toggle gpm-mouse mode to use the mouse in GNU/Linux consoles.
+With prefix arg, turn gpm-mouse mode on if arg is positive,
+otherwise turn it off.
-This allows the use of the mouse when operating on a Linux console, in the
-same way as you can use the mouse under X11.
-It requires the `mev' program, part of the `gpm' utilities.
+This allows the use of the mouse when operating on a GNU/Linux console,
+in the same way as you can use the mouse under X11.
+It relies on the `gpm' daemon being activated.
\(fn &optional ARG)" t nil)
;;;***
-;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (17842 58278))
+;;;### (autoloads (tabify untabify) "tabify" "tabify.el" (18088 55089))
;;; Generated autoloads from tabify.el
-(autoload (quote untabify) "tabify" "\
+(autoload 'untabify "tabify" "\
Convert all tabs in region to multiple spaces, preserving columns.
Called non-interactively, the region is specified by arguments
START and END, rather than by the position of point and mark.
@@ -25702,7 +25988,7 @@ The variable `tab-width' controls the spacing of tab stops.
\(fn START END)" t nil)
-(autoload (quote tabify) "tabify" "\
+(autoload 'tabify "tabify" "\
Convert multiple spaces in region to tabs when possible.
A group of spaces is partially replaced by tabs
when this can be done without changing the column they end at.
@@ -25726,31 +26012,31 @@ The variable `tab-width' controls the spacing of tab stops.
;;;;;; table-recognize table-insert-row-column table-insert-column
;;;;;; table-insert-row table-insert table-point-left-cell-hook
;;;;;; table-point-entered-cell-hook table-load-hook table-cell-map-hook)
-;;;;;; "table" "textmodes/table.el" (18012 17784))
+;;;;;; "table" "textmodes/table.el" (18173 8196))
;;; Generated autoloads from textmodes/table.el
(defvar table-cell-map-hook nil "\
*Normal hooks run when finishing construction of `table-cell-map'.
User can modify `table-cell-map' by adding custom functions here.")
-(custom-autoload (quote table-cell-map-hook) "table" t)
+(custom-autoload 'table-cell-map-hook "table" t)
(defvar table-load-hook nil "\
*List of functions to be called after the table is first loaded.")
-(custom-autoload (quote table-load-hook) "table" t)
+(custom-autoload 'table-load-hook "table" t)
(defvar table-point-entered-cell-hook nil "\
*List of functions to be called after point entered a table cell.")
-(custom-autoload (quote table-point-entered-cell-hook) "table" t)
+(custom-autoload 'table-point-entered-cell-hook "table" t)
(defvar table-point-left-cell-hook nil "\
*List of functions to be called after point left a table cell.")
-(custom-autoload (quote table-point-left-cell-hook) "table" t)
+(custom-autoload 'table-point-left-cell-hook "table" t)
-(autoload (quote table-insert) "table" "\
+(autoload 'table-insert "table" "\
Insert an editable text table.
Insert a table of specified number of COLUMNS and ROWS. Optional
parameter CELL-WIDTH and CELL-HEIGHT can specify the size of each
@@ -25873,7 +26159,7 @@ Inside a table cell has a special keymap.
\(fn COLUMNS ROWS &optional CELL-WIDTH CELL-HEIGHT)" t nil)
-(autoload (quote table-insert-row) "table" "\
+(autoload 'table-insert-row "table" "\
Insert N table row(s).
When point is in a table the newly inserted row(s) are placed above
the current row. When point is outside of the table it must be below
@@ -25882,7 +26168,7 @@ are appended at the bottom of the table.
\(fn N)" t nil)
-(autoload (quote table-insert-column) "table" "\
+(autoload 'table-insert-column "table" "\
Insert N table column(s).
When point is in a table the newly inserted column(s) are placed left
of the current column. When point is outside of the table it must be
@@ -25891,13 +26177,13 @@ created column(s) are appended at the right of the table.
\(fn N)" t nil)
-(autoload (quote table-insert-row-column) "table" "\
+(autoload 'table-insert-row-column "table" "\
Insert row(s) or column(s).
See `table-insert-row' and `table-insert-column'.
\(fn ROW-COLUMN N)" t nil)
-(autoload (quote table-recognize) "table" "\
+(autoload 'table-recognize "table" "\
Recognize all tables within the current buffer and activate them.
Scans the entire buffer and recognizes valid table cells. If the
optional numeric prefix argument ARG is negative the tables in the
@@ -25906,12 +26192,12 @@ all the table specific features.
\(fn &optional ARG)" t nil)
-(autoload (quote table-unrecognize) "table" "\
+(autoload 'table-unrecognize "table" "\
Not documented
\(fn)" t nil)
-(autoload (quote table-recognize-region) "table" "\
+(autoload 'table-recognize-region "table" "\
Recognize all tables within region.
BEG and END specify the region to work on. If the optional numeric
prefix argument ARG is negative the tables in the region become
@@ -25920,12 +26206,12 @@ specific features.
\(fn BEG END &optional ARG)" t nil)
-(autoload (quote table-unrecognize-region) "table" "\
+(autoload 'table-unrecognize-region "table" "\
Not documented
\(fn BEG END)" t nil)
-(autoload (quote table-recognize-table) "table" "\
+(autoload 'table-recognize-table "table" "\
Recognize a table at point.
If the optional numeric prefix argument ARG is negative the table
becomes inactive, meaning the table becomes plain text and loses all
@@ -25933,12 +26219,12 @@ the table specific features.
\(fn &optional ARG)" t nil)
-(autoload (quote table-unrecognize-table) "table" "\
+(autoload 'table-unrecognize-table "table" "\
Not documented
\(fn)" t nil)
-(autoload (quote table-recognize-cell) "table" "\
+(autoload 'table-recognize-cell "table" "\
Recognize a table cell that contains current point.
Probe the cell dimension and prepare the cell information. The
optional two arguments FORCE and NO-COPY are for internal use only and
@@ -25948,12 +26234,12 @@ plain text and loses all the table specific features.
\(fn &optional FORCE NO-COPY ARG)" t nil)
-(autoload (quote table-unrecognize-cell) "table" "\
+(autoload 'table-unrecognize-cell "table" "\
Not documented
\(fn)" t nil)
-(autoload (quote table-heighten-cell) "table" "\
+(autoload 'table-heighten-cell "table" "\
Heighten the current cell by N lines by expanding the cell vertically.
Heightening is done by adding blank lines at the bottom of the current
cell. Other cells aligned horizontally with the current one are also
@@ -25963,7 +26249,7 @@ specified.
\(fn N &optional NO-COPY NO-UPDATE)" t nil)
-(autoload (quote table-shorten-cell) "table" "\
+(autoload 'table-shorten-cell "table" "\
Shorten the current cell by N lines by shrinking the cell vertically.
Shortening is done by removing blank lines from the bottom of the cell
and possibly from the top of the cell as well. Therefor, the cell
@@ -25974,21 +26260,21 @@ table structure.
\(fn N)" t nil)
-(autoload (quote table-widen-cell) "table" "\
+(autoload 'table-widen-cell "table" "\
Widen the current cell by N columns and expand the cell horizontally.
Some other cells in the same table are widen as well to keep the
table's rectangle structure.
\(fn N &optional NO-COPY NO-UPDATE)" t nil)
-(autoload (quote table-narrow-cell) "table" "\
+(autoload 'table-narrow-cell "table" "\
Narrow the current cell by N columns and shrink the cell horizontally.
Some other cells in the same table are narrowed as well to keep the
table's rectangle structure.
\(fn N)" t nil)
-(autoload (quote table-forward-cell) "table" "\
+(autoload 'table-forward-cell "table" "\
Move point forward to the beginning of the next cell.
With argument ARG, do it ARG times;
a negative argument ARG = -N means move backward N cells.
@@ -26027,45 +26313,45 @@ You can actually try how it works in this buffer. Press
\(fn &optional ARG NO-RECOGNIZE UNRECOGNIZE)" t nil)
-(autoload (quote table-backward-cell) "table" "\
+(autoload 'table-backward-cell "table" "\
Move backward to the beginning of the previous cell.
With argument ARG, do it ARG times;
a negative argument ARG = -N means move forward N cells.
\(fn &optional ARG)" t nil)
-(autoload (quote table-span-cell) "table" "\
+(autoload 'table-span-cell "table" "\
Span current cell into adjacent cell in DIRECTION.
DIRECTION is one of symbols; right, left, above or below.
\(fn DIRECTION)" t nil)
-(autoload (quote table-split-cell-vertically) "table" "\
+(autoload 'table-split-cell-vertically "table" "\
Split current cell vertically.
Creates a cell above and a cell below the current point location.
\(fn)" t nil)
-(autoload (quote table-split-cell-horizontally) "table" "\
+(autoload 'table-split-cell-horizontally "table" "\
Split current cell horizontally.
Creates a cell on the left and a cell on the right of the current point location.
\(fn)" t nil)
-(autoload (quote table-split-cell) "table" "\
+(autoload 'table-split-cell "table" "\
Split current cell in ORIENTATION.
ORIENTATION is a symbol either horizontally or vertically.
\(fn ORIENTATION)" t nil)
-(autoload (quote table-justify) "table" "\
+(autoload 'table-justify "table" "\
Justify contents of a cell, a row of cells or a column of cells.
WHAT is a symbol 'cell, 'row or 'column. JUSTIFY is a symbol 'left,
'center, 'right, 'top, 'middle, 'bottom or 'none.
\(fn WHAT JUSTIFY)" t nil)
-(autoload (quote table-justify-cell) "table" "\
+(autoload 'table-justify-cell "table" "\
Justify cell contents.
JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or 'top,
'middle, 'bottom or 'none for vertical. When optional PARAGRAPH is
@@ -26074,21 +26360,21 @@ otherwise the entire cell contents is justified.
\(fn JUSTIFY &optional PARAGRAPH)" t nil)
-(autoload (quote table-justify-row) "table" "\
+(autoload 'table-justify-row "table" "\
Justify cells of a row.
JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or top,
'middle, 'bottom or 'none for vertical.
\(fn JUSTIFY)" t nil)
-(autoload (quote table-justify-column) "table" "\
+(autoload 'table-justify-column "table" "\
Justify cells of a column.
JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or top,
'middle, 'bottom or 'none for vertical.
\(fn JUSTIFY)" t nil)
-(autoload (quote table-fixed-width-mode) "table" "\
+(autoload 'table-fixed-width-mode "table" "\
Toggle fixing width mode.
In the fixed width mode, typing inside a cell never changes the cell
width where in the normal mode the cell width expands automatically in
@@ -26096,7 +26382,7 @@ order to prevent a word being folded into multiple lines.
\(fn &optional ARG)" t nil)
-(autoload (quote table-query-dimension) "table" "\
+(autoload 'table-query-dimension "table" "\
Return the dimension of the current cell and the current table.
The result is a list (cw ch tw th c r cells) where cw is the cell
width, ch is the cell height, tw is the table width, th is the table
@@ -26110,7 +26396,7 @@ WHERE is provided the cell and table at that location is reported.
\(fn &optional WHERE)" t nil)
-(autoload (quote table-generate-source) "table" "\
+(autoload 'table-generate-source "table" "\
Generate source of the current table in the specified language.
LANGUAGE is a symbol that specifies the language to describe the
structure of the table. It must be either 'html, 'latex or 'cals.
@@ -26138,7 +26424,7 @@ CALS (DocBook DTD):
\(fn LANGUAGE &optional DEST-BUFFER CAPTION)" t nil)
-(autoload (quote table-insert-sequence) "table" "\
+(autoload 'table-insert-sequence "table" "\
Travel cells forward while inserting a specified sequence string in each cell.
STR is the base string from which the sequence starts. When STR is an
empty string then each cell content is erased. When STR ends with
@@ -26175,7 +26461,7 @@ Example:
\(fn STR N INCREMENT INTERVAL JUSTIFY)" t nil)
-(autoload (quote table-delete-row) "table" "\
+(autoload 'table-delete-row "table" "\
Delete N row(s) of cells.
Delete N rows of cells from current row. The current row is the row
contains the current cell where point is located. Each row must
@@ -26183,7 +26469,7 @@ consists from cells of same height.
\(fn N)" t nil)
-(autoload (quote table-delete-column) "table" "\
+(autoload 'table-delete-column "table" "\
Delete N column(s) of cells.
Delete N columns of cells from current column. The current column is
the column contains the current cell where point is located. Each
@@ -26191,7 +26477,7 @@ column must consists from cells of same width.
\(fn N)" t nil)
-(autoload (quote table-capture) "table" "\
+(autoload 'table-capture "table" "\
Convert plain text into a table by capturing the text in the region.
Create a table with the text in region as cell contents. BEG and END
specify the region. The text in the region is replaced with a table.
@@ -26304,7 +26590,7 @@ companion command to `table-capture' this way.
\(fn BEG END &optional COL-DELIM-REGEXP ROW-DELIM-REGEXP JUSTIFY MIN-CELL-WIDTH COLUMNS)" t nil)
-(autoload (quote table-release) "table" "\
+(autoload 'table-release "table" "\
Convert a table into plain text by removing the frame from a table.
Remove the frame from a table and inactivate the table. This command
converts a table into plain text without frames. It is a companion to
@@ -26314,20 +26600,25 @@ converts a table into plain text without frames. It is a companion to
;;;***
-;;;### (autoloads (talk-connect) "talk" "talk.el" (17842 58278))
+;;;### (autoloads (talk talk-connect) "talk" "talk.el" (18133 2197))
;;; Generated autoloads from talk.el
-(autoload (quote talk-connect) "talk" "\
+(autoload 'talk-connect "talk" "\
Connect to display DISPLAY for the Emacs talk group.
\(fn DISPLAY)" t nil)
+(autoload 'talk "talk" "\
+Connect to the Emacs talk group from the current X display or tty frame.
+
+\(fn)" t nil)
+
;;;***
-;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (18010 5426))
+;;;### (autoloads (tar-mode) "tar-mode" "tar-mode.el" (18202 3996))
;;; Generated autoloads from tar-mode.el
-(autoload (quote tar-mode) "tar-mode" "\
+(autoload 'tar-mode "tar-mode" "\
Major mode for viewing a tar file as a dired-like listing of its contents.
You can move around using the usual cursor motion commands.
Letters no longer insert themselves.
@@ -26348,10 +26639,10 @@ See also: variables `tar-update-datestamp' and `tar-anal-blocksize'.
;;;***
;;;### (autoloads (tcl-help-on-word inferior-tcl tcl-mode) "tcl"
-;;;;;; "progmodes/tcl.el" (17842 56332))
+;;;;;; "progmodes/tcl.el" (18120 34753))
;;; Generated autoloads from progmodes/tcl.el
-(autoload (quote tcl-mode) "tcl" "\
+(autoload 'tcl-mode "tcl" "\
Major mode for editing Tcl code.
Expression and list commands understand all Tcl brackets.
Tab indents for Tcl code.
@@ -26384,14 +26675,14 @@ Commands:
\(fn)" t nil)
-(autoload (quote inferior-tcl) "tcl" "\
+(autoload 'inferior-tcl "tcl" "\
Run inferior Tcl process.
Prefix arg means enter program name interactively.
See documentation for function `inferior-tcl-mode' for more information.
\(fn CMD)" t nil)
-(autoload (quote tcl-help-on-word) "tcl" "\
+(autoload 'tcl-help-on-word "tcl" "\
Get help on Tcl command. Default is word at point.
Prefix argument means invert sense of `tcl-use-smart-word-finder'.
@@ -26399,11 +26690,11 @@ Prefix argument means invert sense of `tcl-use-smart-word-finder'.
;;;***
-;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (17842 55218))
+;;;### (autoloads (rsh telnet) "telnet" "net/telnet.el" (18101 9759))
;;; Generated autoloads from net/telnet.el
(add-hook 'same-window-regexps "\\*telnet-.*\\*\\(\\|<[0-9]+>\\)")
-(autoload (quote telnet) "telnet" "\
+(autoload 'telnet "telnet" "\
Open a network login connection to host named HOST (a string).
Optional arg PORT specifies alternative port to connect to.
Interactively, use \\[universal-argument] prefix to be prompted for port number.
@@ -26417,7 +26708,7 @@ Normally input is edited in Emacs and sent a line at a time.
\(fn HOST &optional PORT)" t nil)
(add-hook 'same-window-regexps "\\*rsh-[^-]*\\*\\(\\|<[0-9]*>\\)")
-(autoload (quote rsh) "telnet" "\
+(autoload 'rsh "telnet" "\
Open a network login connection to host named HOST (a string).
Communication with HOST is recorded in a buffer `*rsh-HOST*'.
Normally input is edited in Emacs and sent a line at a time.
@@ -26426,11 +26717,11 @@ Normally input is edited in Emacs and sent a line at a time.
;;;***
-;;;### (autoloads (ansi-term term make-term) "term" "term.el" (17952
-;;;;;; 11093))
+;;;### (autoloads (ansi-term term make-term) "term" "term.el" (18120
+;;;;;; 34749))
;;; Generated autoloads from term.el
-(autoload (quote make-term) "term" "\
+(autoload 'make-term "term" "\
Make a term process NAME in a buffer, running PROGRAM.
The name of the buffer is made by surrounding NAME with `*'s.
If there is already a running process in that buffer, it is not restarted.
@@ -26439,7 +26730,7 @@ the process. Any more args are arguments to PROGRAM.
\(fn NAME PROGRAM &optional STARTFILE &rest SWITCHES)" nil nil)
-(autoload (quote term) "term" "\
+(autoload 'term "term" "\
Start a terminal-emulator in a new buffer.
The buffer is in Term mode; see `term-mode' for the
commands to use in that buffer.
@@ -26448,18 +26739,18 @@ commands to use in that buffer.
\(fn PROGRAM)" t nil)
-(autoload (quote ansi-term) "term" "\
+(autoload 'ansi-term "term" "\
Start a terminal-emulator in a new buffer.
\(fn PROGRAM &optional NEW-BUFFER-NAME)" t nil)
;;;***
-;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (17842
-;;;;;; 58278))
+;;;### (autoloads (terminal-emulator) "terminal" "terminal.el" (18088
+;;;;;; 55090))
;;; Generated autoloads from terminal.el
-(autoload (quote terminal-emulator) "terminal" "\
+(autoload 'terminal-emulator "terminal" "\
Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS.
ARGS is a list of argument-strings. Remaining arguments are WIDTH and HEIGHT.
BUFFER's contents are made an image of the display generated by that program,
@@ -26493,20 +26784,20 @@ subprocess started.
;;;***
;;;### (autoloads (testcover-this-defun) "testcover" "emacs-lisp/testcover.el"
-;;;;;; (17925 52793))
+;;;;;; (18088 55096))
;;; Generated autoloads from emacs-lisp/testcover.el
-(autoload (quote testcover-this-defun) "testcover" "\
+(autoload 'testcover-this-defun "testcover" "\
Start coverage on function under point.
\(fn)" t nil)
;;;***
-;;;### (autoloads (tetris) "tetris" "play/tetris.el" (17941 38806))
+;;;### (autoloads (tetris) "tetris" "play/tetris.el" (18088 55114))
;;; Generated autoloads from play/tetris.el
-(autoload (quote tetris) "tetris" "\
+(autoload 'tetris "tetris" "\
Play the Tetris game.
Shapes drop from the top of the screen, and the user has to move and
rotate the shape to fit in with those at the bottom of the screen so
@@ -26534,13 +26825,13 @@ tetris-mode keybindings:
;;;;;; tex-start-commands tex-start-options slitex-run-command latex-run-command
;;;;;; tex-run-command tex-offer-save tex-main-file tex-first-line-header-regexp
;;;;;; tex-directory tex-shell-file-name) "tex-mode" "textmodes/tex-mode.el"
-;;;;;; (17992 30878))
+;;;;;; (18211 32385))
;;; Generated autoloads from textmodes/tex-mode.el
(defvar tex-shell-file-name nil "\
*If non-nil, the shell file name to run in the subshell used to run TeX.")
-(custom-autoload (quote tex-shell-file-name) "tex-mode" t)
+(custom-autoload 'tex-shell-file-name "tex-mode" t)
(defvar tex-directory "." "\
*Directory in which temporary files are written.
@@ -26548,7 +26839,7 @@ You can make this `/tmp' if your TEXINPUTS has no relative directories in it
and you don't try to apply \\[tex-region] or \\[tex-buffer] when there are
`\\input' commands with relative directories.")
-(custom-autoload (quote tex-directory) "tex-mode" t)
+(custom-autoload 'tex-directory "tex-mode" t)
(defvar tex-first-line-header-regexp nil "\
Regexp for matching a first line which `tex-region' should include.
@@ -26556,40 +26847,40 @@ If this is non-nil, it should be a regular expression string;
if it matches the first line of the file,
`tex-region' always includes the first line in the TeX run.")
-(custom-autoload (quote tex-first-line-header-regexp) "tex-mode" t)
+(custom-autoload 'tex-first-line-header-regexp "tex-mode" t)
(defvar tex-main-file nil "\
*The main TeX source file which includes this buffer's file.
The command `tex-file' runs TeX on the file specified by `tex-main-file'
if the variable is non-nil.")
-(custom-autoload (quote tex-main-file) "tex-mode" t)
+(custom-autoload 'tex-main-file "tex-mode" t)
(defvar tex-offer-save t "\
*If non-nil, ask about saving modified buffers before \\[tex-file] is run.")
-(custom-autoload (quote tex-offer-save) "tex-mode" t)
+(custom-autoload 'tex-offer-save "tex-mode" t)
(defvar tex-run-command "tex" "\
*Command used to run TeX subjob.
TeX Mode sets `tex-command' to this string.
See the documentation of that variable.")
-(custom-autoload (quote tex-run-command) "tex-mode" t)
+(custom-autoload 'tex-run-command "tex-mode" t)
(defvar latex-run-command "latex" "\
*Command used to run LaTeX subjob.
LaTeX Mode sets `tex-command' to this string.
See the documentation of that variable.")
-(custom-autoload (quote latex-run-command) "tex-mode" t)
+(custom-autoload 'latex-run-command "tex-mode" t)
(defvar slitex-run-command "slitex" "\
*Command used to run SliTeX subjob.
SliTeX Mode sets `tex-command' to this string.
See the documentation of that variable.")
-(custom-autoload (quote slitex-run-command) "tex-mode" t)
+(custom-autoload 'slitex-run-command "tex-mode" t)
(defvar tex-start-options "" "\
*TeX options to use when starting TeX.
@@ -26597,34 +26888,34 @@ These immediately precede the commands in `tex-start-commands'
and the input file name, with no separating space and are not shell-quoted.
If nil, TeX runs with no options. See the documentation of `tex-command'.")
-(custom-autoload (quote tex-start-options) "tex-mode" t)
+(custom-autoload 'tex-start-options "tex-mode" t)
(defvar tex-start-commands "\\nonstopmode\\input" "\
*TeX commands to use when starting TeX.
They are shell-quoted and precede the input file name, with a separating space.
If nil, no commands are used. See the documentation of `tex-command'.")
-(custom-autoload (quote tex-start-commands) "tex-mode" t)
+(custom-autoload 'tex-start-commands "tex-mode" t)
(defvar latex-block-names nil "\
*User defined LaTeX block names.
Combined with `latex-standard-block-names' for minibuffer completion.")
-(custom-autoload (quote latex-block-names) "tex-mode" t)
+(custom-autoload 'latex-block-names "tex-mode" t)
(defvar tex-bibtex-command "bibtex" "\
*Command used by `tex-bibtex-file' to gather bibliographic data.
If this string contains an asterisk (`*'), that is replaced by the file name;
otherwise, the file name, preceded by blank, is added at the end.")
-(custom-autoload (quote tex-bibtex-command) "tex-mode" t)
+(custom-autoload 'tex-bibtex-command "tex-mode" t)
(defvar tex-dvi-print-command "lpr -d" "\
*Command used by \\[tex-print] to print a .dvi file.
If this string contains an asterisk (`*'), that is replaced by the file name;
otherwise, the file name, preceded by blank, is added at the end.")
-(custom-autoload (quote tex-dvi-print-command) "tex-mode" t)
+(custom-autoload 'tex-dvi-print-command "tex-mode" t)
(defvar tex-alt-dvi-print-command "lpr -d" "\
*Command used by \\[tex-print] with a prefix arg to print a .dvi file.
@@ -26641,9 +26932,9 @@ for example,
would tell \\[tex-print] with a prefix argument to ask you which printer to
use.")
-(custom-autoload (quote tex-alt-dvi-print-command) "tex-mode" t)
+(custom-autoload 'tex-alt-dvi-print-command "tex-mode" t)
-(defvar tex-dvi-view-command (quote (cond ((eq window-system (quote x)) "xdvi") ((eq window-system (quote w32)) "yap") (t "dvi2tty * | cat -s"))) "\
+(defvar tex-dvi-view-command '(cond ((eq window-system 'x) "xdvi") ((eq window-system 'w32) "yap") (t "dvi2tty * | cat -s")) "\
*Command used by \\[tex-view] to display a `.dvi' file.
If it is a string, that specifies the command directly.
If this string contains an asterisk (`*'), that is replaced by the file name;
@@ -26651,33 +26942,33 @@ otherwise, the file name, preceded by a space, is added at the end.
If the value is a form, it is evaluated to get the command to use.")
-(custom-autoload (quote tex-dvi-view-command) "tex-mode" t)
+(custom-autoload 'tex-dvi-view-command "tex-mode" t)
(defvar tex-show-queue-command "lpq" "\
*Command used by \\[tex-show-print-queue] to show the print queue.
Should show the queue(s) that \\[tex-print] puts jobs on.")
-(custom-autoload (quote tex-show-queue-command) "tex-mode" t)
+(custom-autoload 'tex-show-queue-command "tex-mode" t)
-(defvar tex-default-mode (quote latex-mode) "\
+(defvar tex-default-mode 'latex-mode "\
*Mode to enter for a new file that might be either TeX or LaTeX.
This variable is used when it can't be determined whether the file
is plain TeX or LaTeX or what because the file contains no commands.
Normally set to either `plain-tex-mode' or `latex-mode'.")
-(custom-autoload (quote tex-default-mode) "tex-mode" t)
+(custom-autoload 'tex-default-mode "tex-mode" t)
(defvar tex-open-quote "``" "\
*String inserted by typing \\[tex-insert-quote] to open a quotation.")
-(custom-autoload (quote tex-open-quote) "tex-mode" t)
+(custom-autoload 'tex-open-quote "tex-mode" t)
(defvar tex-close-quote "''" "\
*String inserted by typing \\[tex-insert-quote] to close a quotation.")
-(custom-autoload (quote tex-close-quote) "tex-mode" t)
+(custom-autoload 'tex-close-quote "tex-mode" t)
-(autoload (quote tex-mode) "tex-mode" "\
+(autoload 'tex-mode "tex-mode" "\
Major mode for editing files of input for TeX, LaTeX, or SliTeX.
Tries to determine (by looking at the beginning of the file) whether
this file is for plain TeX, LaTeX, or SliTeX and calls `plain-tex-mode',
@@ -26687,13 +26978,13 @@ says which mode to use.
\(fn)" t nil)
-(defalias (quote TeX-mode) (quote tex-mode))
+(defalias 'TeX-mode 'tex-mode)
-(defalias (quote plain-TeX-mode) (quote plain-tex-mode))
+(defalias 'plain-TeX-mode 'plain-tex-mode)
-(defalias (quote LaTeX-mode) (quote latex-mode))
+(defalias 'LaTeX-mode 'latex-mode)
-(autoload (quote plain-tex-mode) "tex-mode" "\
+(autoload 'plain-tex-mode "tex-mode" "\
Major mode for editing files of input for plain TeX.
Makes $ and } display the characters they match.
Makes \" insert `` when it seems to be the beginning of a quotation,
@@ -26736,7 +27027,7 @@ special subshell is initiated, the hook `tex-shell-hook' is run.
\(fn)" t nil)
-(autoload (quote latex-mode) "tex-mode" "\
+(autoload 'latex-mode "tex-mode" "\
Major mode for editing files of input for LaTeX.
Makes $ and } display the characters they match.
Makes \" insert `` when it seems to be the beginning of a quotation,
@@ -26779,7 +27070,7 @@ subshell is initiated, `tex-shell-hook' is run.
\(fn)" t nil)
-(autoload (quote slitex-mode) "tex-mode" "\
+(autoload 'slitex-mode "tex-mode" "\
Major mode for editing files of input for SliTeX.
Makes $ and } display the characters they match.
Makes \" insert `` when it seems to be the beginning of a quotation,
@@ -26823,12 +27114,12 @@ Entering SliTeX mode runs the hook `text-mode-hook', then the hook
\(fn)" t nil)
-(autoload (quote tex-start-shell) "tex-mode" "\
+(autoload 'tex-start-shell "tex-mode" "\
Not documented
\(fn)" nil nil)
-(autoload (quote doctex-mode) "tex-mode" "\
+(autoload 'doctex-mode "tex-mode" "\
Major mode to edit DocTeX files.
\(fn)" t nil)
@@ -26836,21 +27127,21 @@ Major mode to edit DocTeX files.
;;;***
;;;### (autoloads (texi2info texinfo-format-region texinfo-format-buffer)
-;;;;;; "texinfmt" "textmodes/texinfmt.el" (17842 58276))
+;;;;;; "texinfmt" "textmodes/texinfmt.el" (18130 62049))
;;; Generated autoloads from textmodes/texinfmt.el
-(autoload (quote texinfo-format-buffer) "texinfmt" "\
+(autoload 'texinfo-format-buffer "texinfmt" "\
Process the current buffer as texinfo code, into an Info file.
The Info file output is generated in a buffer visiting the Info file
name specified in the @setfilename command.
Non-nil argument (prefix, if interactive) means don't make tag table
-and don't split the file if large. You can use Info-tagify and
-Info-split to do these manually.
+and don't split the file if large. You can use `Info-tagify' and
+`Info-split' to do these manually.
\(fn &optional NOSPLIT)" t nil)
-(autoload (quote texinfo-format-region) "texinfmt" "\
+(autoload 'texinfo-format-region "texinfmt" "\
Convert the current region of the Texinfo file to Info format.
This lets you see what that part of the file will look like in Info.
The command is bound to \\[texinfo-format-region]. The text that is
@@ -26858,7 +27149,7 @@ converted to Info is stored in a temporary buffer.
\(fn REGION-BEGINNING REGION-END)" t nil)
-(autoload (quote texi2info) "texinfmt" "\
+(autoload 'texi2info "texinfmt" "\
Convert the current buffer (written in Texinfo code) into an Info file.
The Info file output is generated in a buffer visiting the Info file
names specified in the @setfilename command.
@@ -26869,27 +27160,27 @@ is automatically removed when the Info file is created. The original
Texinfo source buffer is not changed.
Non-nil argument (prefix, if interactive) means don't split the file
-if large. You can use Info-split to do this manually.
+if large. You can use `Info-split' to do this manually.
\(fn &optional NOSPLIT)" t nil)
;;;***
;;;### (autoloads (texinfo-mode texinfo-close-quote texinfo-open-quote)
-;;;;;; "texinfo" "textmodes/texinfo.el" (17842 58276))
+;;;;;; "texinfo" "textmodes/texinfo.el" (18149 22003))
;;; Generated autoloads from textmodes/texinfo.el
(defvar texinfo-open-quote "``" "\
-*String inserted by typing \\[texinfo-insert-quote] to open a quotation.")
+String inserted by typing \\[texinfo-insert-quote] to open a quotation.")
-(custom-autoload (quote texinfo-open-quote) "texinfo" t)
+(custom-autoload 'texinfo-open-quote "texinfo" t)
(defvar texinfo-close-quote "''" "\
-*String inserted by typing \\[texinfo-insert-quote] to close a quotation.")
+String inserted by typing \\[texinfo-insert-quote] to close a quotation.")
-(custom-autoload (quote texinfo-close-quote) "texinfo" t)
+(custom-autoload 'texinfo-close-quote "texinfo" t)
-(autoload (quote texinfo-mode) "texinfo" "\
+(autoload 'texinfo-mode "texinfo" "\
Major mode for editing Texinfo files.
It has these extra commands:
@@ -26963,32 +27254,32 @@ value of `texinfo-mode-hook'.
;;;### (autoloads (thai-auto-composition-mode thai-composition-function
;;;;;; thai-post-read-conversion thai-compose-buffer thai-compose-string
;;;;;; thai-compose-region) "thai-util" "language/thai-util.el"
-;;;;;; (17842 58278))
+;;;;;; (18088 55109))
;;; Generated autoloads from language/thai-util.el
-(autoload (quote thai-compose-region) "thai-util" "\
+(autoload 'thai-compose-region "thai-util" "\
Compose Thai characters in the region.
When called from a program, expects two arguments,
positions (integers or markers) specifying the region.
\(fn BEG END)" t nil)
-(autoload (quote thai-compose-string) "thai-util" "\
+(autoload 'thai-compose-string "thai-util" "\
Compose Thai characters in STRING and return the resulting string.
\(fn STRING)" nil nil)
-(autoload (quote thai-compose-buffer) "thai-util" "\
+(autoload 'thai-compose-buffer "thai-util" "\
Compose Thai characters in the current buffer.
\(fn)" t nil)
-(autoload (quote thai-post-read-conversion) "thai-util" "\
+(autoload 'thai-post-read-conversion "thai-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote thai-composition-function) "thai-util" "\
+(autoload 'thai-composition-function "thai-util" "\
Compose Thai text in the region FROM and TO.
The text matches the regular expression PATTERN.
Optional 4th argument STRING, if non-nil, is a string containing text
@@ -26998,7 +27289,7 @@ The return value is number of composed characters.
\(fn FROM TO PATTERN &optional STRING)" nil nil)
-(autoload (quote thai-auto-composition-mode) "thai-util" "\
+(autoload 'thai-auto-composition-mode "thai-util" "\
Minor mode for automatically correct Thai character composition.
\(fn &optional ARG)" t nil)
@@ -27007,19 +27298,19 @@ Minor mode for automatically correct Thai character composition.
;;;### (autoloads (list-at-point number-at-point symbol-at-point
;;;;;; sexp-at-point thing-at-point bounds-of-thing-at-point forward-thing)
-;;;;;; "thingatpt" "thingatpt.el" (17842 58278))
+;;;;;; "thingatpt" "thingatpt.el" (18088 55090))
;;; Generated autoloads from thingatpt.el
-(autoload (quote forward-thing) "thingatpt" "\
+(autoload 'forward-thing "thingatpt" "\
Move forward to the end of the Nth next THING.
\(fn THING &optional N)" nil nil)
-(autoload (quote bounds-of-thing-at-point) "thingatpt" "\
+(autoload 'bounds-of-thing-at-point "thingatpt" "\
Determine the start and end buffer locations for the THING at point.
THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `symbol', `list', `sexp', `defun', `filename', `url',
-`word', `sentence', `whitespace', `line', `page' and others.
+`email', `word', `sentence', `whitespace', `line', `page' and others.
See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING.
@@ -27029,33 +27320,33 @@ of the textual entity that was found.
\(fn THING)" nil nil)
-(autoload (quote thing-at-point) "thingatpt" "\
+(autoload 'thing-at-point "thingatpt" "\
Return the THING at point.
THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `symbol', `list', `sexp', `defun', `filename', `url',
-`word', `sentence', `whitespace', `line', `page' and others.
+`email', `word', `sentence', `whitespace', `line', `page' and others.
See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING.
\(fn THING)" nil nil)
-(autoload (quote sexp-at-point) "thingatpt" "\
+(autoload 'sexp-at-point "thingatpt" "\
Not documented
\(fn)" nil nil)
-(autoload (quote symbol-at-point) "thingatpt" "\
+(autoload 'symbol-at-point "thingatpt" "\
Not documented
\(fn)" nil nil)
-(autoload (quote number-at-point) "thingatpt" "\
+(autoload 'number-at-point "thingatpt" "\
Not documented
\(fn)" nil nil)
-(autoload (quote list-at-point) "thingatpt" "\
+(autoload 'list-at-point "thingatpt" "\
Not documented
\(fn)" nil nil)
@@ -27064,34 +27355,34 @@ Not documented
;;;### (autoloads (thumbs-dired-setroot thumbs-dired-show thumbs-dired-show-marked
;;;;;; thumbs-show-from-dir thumbs-find-thumb) "thumbs" "thumbs.el"
-;;;;;; (17963 26308))
+;;;;;; (18088 55090))
;;; Generated autoloads from thumbs.el
-(autoload (quote thumbs-find-thumb) "thumbs" "\
+(autoload 'thumbs-find-thumb "thumbs" "\
Display the thumbnail for IMG.
\(fn IMG)" t nil)
-(autoload (quote thumbs-show-from-dir) "thumbs" "\
+(autoload 'thumbs-show-from-dir "thumbs" "\
Make a preview buffer for all images in DIR.
Optional argument REG to select file matching a regexp,
and SAME-WINDOW to show thumbs in the same window.
\(fn DIR &optional REG SAME-WINDOW)" t nil)
-(autoload (quote thumbs-dired-show-marked) "thumbs" "\
+(autoload 'thumbs-dired-show-marked "thumbs" "\
In dired, make a thumbs buffer with marked files.
\(fn)" t nil)
-(autoload (quote thumbs-dired-show) "thumbs" "\
+(autoload 'thumbs-dired-show "thumbs" "\
In dired, make a thumbs buffer with all files in current directory.
\(fn)" t nil)
-(defalias (quote thumbs) (quote thumbs-show-from-dir))
+(defalias 'thumbs 'thumbs-show-from-dir)
-(autoload (quote thumbs-dired-setroot) "thumbs" "\
+(autoload 'thumbs-dired-setroot "thumbs" "\
In dired, call the setroot program on the image at point.
\(fn)" t nil)
@@ -27103,78 +27394,78 @@ In dired, call the setroot program on the image at point.
;;;;;; tibetan-composition-function tibetan-decompose-string tibetan-decompose-region
;;;;;; tibetan-compose-region tibetan-compose-string tibetan-transcription-to-tibetan
;;;;;; tibetan-tibetan-to-transcription tibetan-char-p) "tibet-util"
-;;;;;; "language/tibet-util.el" (17842 58278))
+;;;;;; "language/tibet-util.el" (18088 55109))
;;; Generated autoloads from language/tibet-util.el
-(autoload (quote tibetan-char-p) "tibet-util" "\
+(autoload 'tibetan-char-p "tibet-util" "\
Check if char CH is Tibetan character.
Returns non-nil if CH is Tibetan. Otherwise, returns nil.
\(fn CH)" nil nil)
-(autoload (quote tibetan-tibetan-to-transcription) "tibet-util" "\
+(autoload 'tibetan-tibetan-to-transcription "tibet-util" "\
Transcribe Tibetan string STR and return the corresponding Roman string.
\(fn STR)" nil nil)
-(autoload (quote tibetan-transcription-to-tibetan) "tibet-util" "\
+(autoload 'tibetan-transcription-to-tibetan "tibet-util" "\
Convert Tibetan Roman string STR to Tibetan character string.
The returned string has no composition information.
\(fn STR)" nil nil)
-(autoload (quote tibetan-compose-string) "tibet-util" "\
+(autoload 'tibetan-compose-string "tibet-util" "\
Compose Tibetan string STR.
\(fn STR)" nil nil)
-(autoload (quote tibetan-compose-region) "tibet-util" "\
+(autoload 'tibetan-compose-region "tibet-util" "\
Compose Tibetan text the region BEG and END.
\(fn BEG END)" t nil)
-(autoload (quote tibetan-decompose-region) "tibet-util" "\
+(autoload 'tibetan-decompose-region "tibet-util" "\
Decompose Tibetan text in the region FROM and TO.
This is different from decompose-region because precomposed Tibetan characters
are decomposed into normal Tibetan character sequences.
\(fn FROM TO)" t nil)
-(autoload (quote tibetan-decompose-string) "tibet-util" "\
+(autoload 'tibetan-decompose-string "tibet-util" "\
Decompose Tibetan string STR.
This is different from decompose-string because precomposed Tibetan characters
are decomposed into normal Tibetan character sequences.
\(fn STR)" nil nil)
-(autoload (quote tibetan-composition-function) "tibet-util" "\
+(autoload 'tibetan-composition-function "tibet-util" "\
Not documented
\(fn FROM TO PATTERN &optional STRING)" nil nil)
-(autoload (quote tibetan-decompose-buffer) "tibet-util" "\
+(autoload 'tibetan-decompose-buffer "tibet-util" "\
Decomposes Tibetan characters in the buffer into their components.
See also the documentation of the function `tibetan-decompose-region'.
\(fn)" t nil)
-(autoload (quote tibetan-compose-buffer) "tibet-util" "\
+(autoload 'tibetan-compose-buffer "tibet-util" "\
Composes Tibetan character components in the buffer.
See also docstring of the function tibetan-compose-region.
\(fn)" t nil)
-(autoload (quote tibetan-post-read-conversion) "tibet-util" "\
+(autoload 'tibetan-post-read-conversion "tibet-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote tibetan-pre-write-conversion) "tibet-util" "\
+(autoload 'tibetan-pre-write-conversion "tibet-util" "\
Not documented
\(fn FROM TO)" nil nil)
-(autoload (quote tibetan-pre-write-canonicalize-for-unicode) "tibet-util" "\
+(autoload 'tibetan-pre-write-canonicalize-for-unicode "tibet-util" "\
Not documented
\(fn FROM TO)" nil nil)
@@ -27182,10 +27473,10 @@ Not documented
;;;***
;;;### (autoloads (tildify-buffer tildify-region) "tildify" "textmodes/tildify.el"
-;;;;;; (17842 58276))
+;;;;;; (18088 55121))
;;; Generated autoloads from textmodes/tildify.el
-(autoload (quote tildify-region) "tildify" "\
+(autoload 'tildify-region "tildify" "\
Add hard spaces in the region between BEG and END.
See variables `tildify-pattern-alist', `tildify-string-alist', and
`tildify-ignored-environments-alist' for information about configuration
@@ -27194,7 +27485,7 @@ This function performs no refilling of the changed text.
\(fn BEG END)" t nil)
-(autoload (quote tildify-buffer) "tildify" "\
+(autoload 'tildify-buffer "tildify" "\
Add hard spaces in the current buffer.
See variables `tildify-pattern-alist', `tildify-string-alist', and
`tildify-ignored-environments-alist' for information about configuration
@@ -27205,16 +27496,16 @@ This function performs no refilling of the changed text.
;;;***
-;;;### (autoloads (display-time-mode display-time display-time-day-and-date)
-;;;;;; "time" "time.el" (18006 55796))
+;;;### (autoloads (display-time-world display-time-mode display-time
+;;;;;; display-time-day-and-date) "time" "time.el" (18211 32385))
;;; Generated autoloads from time.el
(defvar display-time-day-and-date nil "\
*Non-nil means \\[display-time] should display day and date as well as time.")
-(custom-autoload (quote display-time-day-and-date) "time" t)
+(custom-autoload 'display-time-day-and-date "time" t)
-(autoload (quote display-time) "time" "\
+(autoload 'display-time "time" "\
Enable display of time, load level, and mail flag in mode lines.
This display updates automatically every minute.
If `display-time-day-and-date' is non-nil, the current day and date
@@ -27230,9 +27521,9 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `display-time-mode'.")
-(custom-autoload (quote display-time-mode) "time" nil)
+(custom-autoload 'display-time-mode "time" nil)
-(autoload (quote display-time-mode) "time" "\
+(autoload 'display-time-mode "time" "\
Toggle display of time, load level, and mail flag in mode lines.
With a numeric arg, enable this display if arg is positive.
@@ -27243,90 +27534,97 @@ This runs the normal hook `display-time-hook' after each update.
\(fn &optional ARG)" t nil)
+(autoload 'display-time-world "time" "\
+Enable updating display of times in various time zones.
+`display-time-world-list' specifies the zones.
+To turn off the world time display, go to that window and type `q'.
+
+\(fn)" t nil)
+
;;;***
;;;### (autoloads (safe-date-to-time time-to-days time-to-day-in-year
;;;;;; date-leap-year-p days-between date-to-day time-add time-subtract
;;;;;; time-since days-to-time time-less-p seconds-to-time time-to-seconds
-;;;;;; date-to-time) "time-date" "calendar/time-date.el" (17842
-;;;;;; 53792))
+;;;;;; date-to-time) "time-date" "calendar/time-date.el" (18088
+;;;;;; 55094))
;;; Generated autoloads from calendar/time-date.el
-(autoload (quote date-to-time) "time-date" "\
+(autoload 'date-to-time "time-date" "\
Parse a string that represents a date-time and return a time value.
\(fn DATE)" nil nil)
-(autoload (quote time-to-seconds) "time-date" "\
+(autoload 'time-to-seconds "time-date" "\
Convert time value TIME to a floating point number.
You can use `float-time' instead.
\(fn TIME)" nil nil)
-(autoload (quote seconds-to-time) "time-date" "\
+(autoload 'seconds-to-time "time-date" "\
Convert SECONDS (a floating point number) to a time value.
\(fn SECONDS)" nil nil)
-(autoload (quote time-less-p) "time-date" "\
+(autoload 'time-less-p "time-date" "\
Say whether time value T1 is less than time value T2.
\(fn T1 T2)" nil nil)
-(autoload (quote days-to-time) "time-date" "\
+(autoload 'days-to-time "time-date" "\
Convert DAYS into a time value.
\(fn DAYS)" nil nil)
-(autoload (quote time-since) "time-date" "\
+(autoload 'time-since "time-date" "\
Return the time elapsed since TIME.
TIME should be either a time value or a date-time string.
\(fn TIME)" nil nil)
-(defalias (quote subtract-time) (quote time-subtract))
+(defalias 'subtract-time 'time-subtract)
-(autoload (quote time-subtract) "time-date" "\
+(autoload 'time-subtract "time-date" "\
Subtract two time values.
Return the difference in the format of a time value.
\(fn T1 T2)" nil nil)
-(autoload (quote time-add) "time-date" "\
+(autoload 'time-add "time-date" "\
Add two time values. One should represent a time difference.
\(fn T1 T2)" nil nil)
-(autoload (quote date-to-day) "time-date" "\
+(autoload 'date-to-day "time-date" "\
Return the number of days between year 1 and DATE.
DATE should be a date-time string.
\(fn DATE)" nil nil)
-(autoload (quote days-between) "time-date" "\
+(autoload 'days-between "time-date" "\
Return the number of days between DATE1 and DATE2.
DATE1 and DATE2 should be date-time strings.
\(fn DATE1 DATE2)" nil nil)
-(autoload (quote date-leap-year-p) "time-date" "\
+(autoload 'date-leap-year-p "time-date" "\
Return t if YEAR is a leap year.
\(fn YEAR)" nil nil)
-(autoload (quote time-to-day-in-year) "time-date" "\
+(autoload 'time-to-day-in-year "time-date" "\
Return the day number within the year corresponding to TIME.
\(fn TIME)" nil nil)
-(autoload (quote time-to-days) "time-date" "\
+(autoload 'time-to-days "time-date" "\
The number of days between the Gregorian date 0001-12-31bce and TIME.
TIME should be a time value.
The Gregorian date Sunday, December 31, 1bce is imaginary.
\(fn TIME)" nil nil)
-(autoload (quote safe-date-to-time) "time-date" "\
+(autoload 'safe-date-to-time "time-date" "\
Parse a string that represents a date-time and return a time value.
If DATE is malformed, return a time value of zeros.
@@ -27335,7 +27633,7 @@ If DATE is malformed, return a time value of zeros.
;;;***
;;;### (autoloads (time-stamp-toggle-active time-stamp) "time-stamp"
-;;;;;; "time-stamp.el" (17842 58278))
+;;;;;; "time-stamp.el" (18088 55090))
;;; Generated autoloads from time-stamp.el
(put 'time-stamp-format 'safe-local-variable 'stringp)
(put 'time-stamp-line-limit 'safe-local-variable 'integerp)
@@ -27345,7 +27643,7 @@ If DATE is malformed, return a time value of zeros.
(put 'time-stamp-count 'safe-local-variable 'integerp)
(put 'time-stamp-pattern 'safe-local-variable 'stringp)
-(autoload (quote time-stamp) "time-stamp" "\
+(autoload 'time-stamp "time-stamp" "\
Update the time stamp string(s) in the buffer.
A template in a file can be automatically updated with a new time stamp
every time you save the file. Add this line to your .emacs file:
@@ -27366,7 +27664,7 @@ the template.
\(fn)" t nil)
-(autoload (quote time-stamp-toggle-active) "time-stamp" "\
+(autoload 'time-stamp-toggle-active "time-stamp" "\
Toggle `time-stamp-active', setting whether \\[time-stamp] updates a buffer.
With ARG, turn time stamping on if and only if arg is positive.
@@ -27378,10 +27676,10 @@ With ARG, turn time stamping on if and only if arg is positive.
;;;;;; timeclock-workday-remaining-string timeclock-reread-log timeclock-query-out
;;;;;; timeclock-change timeclock-status-string timeclock-out timeclock-in
;;;;;; timeclock-modeline-display) "timeclock" "calendar/timeclock.el"
-;;;;;; (17992 30878))
+;;;;;; (18088 55094))
;;; Generated autoloads from calendar/timeclock.el
-(autoload (quote timeclock-modeline-display) "timeclock" "\
+(autoload 'timeclock-modeline-display "timeclock" "\
Toggle display of the amount of time left today in the modeline.
If `timeclock-use-display-time' is non-nil (the default), then
the function `display-time-mode' must be active, and the modeline
@@ -27393,7 +27691,7 @@ display (non-nil means on).
\(fn &optional ARG)" t nil)
-(autoload (quote timeclock-in) "timeclock" "\
+(autoload 'timeclock-in "timeclock" "\
Clock in, recording the current time moment in the timelog.
With a numeric prefix ARG, record the fact that today has only that
many hours in it to be worked. If arg is a non-numeric prefix arg
@@ -27409,7 +27707,7 @@ discover the name of the project.
\(fn &optional ARG PROJECT FIND-PROJECT)" t nil)
-(autoload (quote timeclock-out) "timeclock" "\
+(autoload 'timeclock-out "timeclock" "\
Clock out, recording the current time moment in the timelog.
If a prefix ARG is given, the user has completed the project that was
begun during the last time segment.
@@ -27421,7 +27719,7 @@ discover the reason.
\(fn &optional ARG REASON FIND-REASON)" t nil)
-(autoload (quote timeclock-status-string) "timeclock" "\
+(autoload 'timeclock-status-string "timeclock" "\
Report the overall timeclock status at the present moment.
If SHOW-SECONDS is non-nil, display second resolution.
If TODAY-ONLY is non-nil, the display will be relative only to time
@@ -27429,7 +27727,7 @@ worked today, ignoring the time worked on previous days.
\(fn &optional SHOW-SECONDS TODAY-ONLY)" t nil)
-(autoload (quote timeclock-change) "timeclock" "\
+(autoload 'timeclock-change "timeclock" "\
Change to working on a different project.
This clocks out of the current project, then clocks in on a new one.
With a prefix ARG, consider the previous project as finished at the
@@ -27438,19 +27736,19 @@ working on.
\(fn &optional ARG PROJECT)" t nil)
-(autoload (quote timeclock-query-out) "timeclock" "\
+(autoload 'timeclock-query-out "timeclock" "\
Ask the user whether to clock out.
This is a useful function for adding to `kill-emacs-query-functions'.
\(fn)" nil nil)
-(autoload (quote timeclock-reread-log) "timeclock" "\
+(autoload 'timeclock-reread-log "timeclock" "\
Re-read the timeclock, to account for external changes.
Returns the new value of `timeclock-discrepancy'.
\(fn)" t nil)
-(autoload (quote timeclock-workday-remaining-string) "timeclock" "\
+(autoload 'timeclock-workday-remaining-string "timeclock" "\
Return a string representing the amount of time left today.
Display second resolution if SHOW-SECONDS is non-nil. If TODAY-ONLY
is non-nil, the display will be relative only to time worked today.
@@ -27459,14 +27757,14 @@ See `timeclock-relative' for more information about the meaning of
\(fn &optional SHOW-SECONDS TODAY-ONLY)" t nil)
-(autoload (quote timeclock-workday-elapsed-string) "timeclock" "\
+(autoload 'timeclock-workday-elapsed-string "timeclock" "\
Return a string representing the amount of time worked today.
Display seconds resolution if SHOW-SECONDS is non-nil. If RELATIVE is
non-nil, the amount returned will be relative to past time worked.
\(fn &optional SHOW-SECONDS)" t nil)
-(autoload (quote timeclock-when-to-leave-string) "timeclock" "\
+(autoload 'timeclock-when-to-leave-string "timeclock" "\
Return a string representing the end of today's workday.
This string is relative to the value of `timeclock-workday'. If
SHOW-SECONDS is non-nil, the value printed/returned will include
@@ -27479,24 +27777,24 @@ relative only to the time worked today, and not to past time.
;;;### (autoloads (with-timeout run-with-idle-timer add-timeout run-with-timer
;;;;;; run-at-time cancel-function-timers cancel-timer) "timer"
-;;;;;; "emacs-lisp/timer.el" (17935 13348))
+;;;;;; "emacs-lisp/timer.el" (18088 55096))
;;; Generated autoloads from emacs-lisp/timer.el
-(defalias (quote disable-timeout) (quote cancel-timer))
+(defalias 'disable-timeout 'cancel-timer)
-(autoload (quote cancel-timer) "timer" "\
+(autoload 'cancel-timer "timer" "\
Remove TIMER from the list of active timers.
\(fn TIMER)" nil nil)
-(autoload (quote cancel-function-timers) "timer" "\
+(autoload 'cancel-function-timers "timer" "\
Cancel all timers which would run FUNCTION.
This affects ordinary timers such as are scheduled by `run-at-time',
and idle timers such as are scheduled by `run-with-idle-timer'.
\(fn FUNCTION)" t nil)
-(autoload (quote run-at-time) "timer" "\
+(autoload 'run-at-time "timer" "\
Perform an action at time TIME.
Repeat the action every REPEAT seconds, if REPEAT is non-nil.
TIME should be one of: a string giving an absolute time like
@@ -27514,7 +27812,7 @@ This function returns a timer object which you can use in `cancel-timer'.
\(fn TIME REPEAT FUNCTION &rest ARGS)" t nil)
-(autoload (quote run-with-timer) "timer" "\
+(autoload 'run-with-timer "timer" "\
Perform an action after a delay of SECS seconds.
Repeat the action every REPEAT seconds, if REPEAT is non-nil.
SECS and REPEAT may be integers or floating point numbers.
@@ -27524,14 +27822,14 @@ This function returns a timer object which you can use in `cancel-timer'.
\(fn SECS REPEAT FUNCTION &rest ARGS)" t nil)
-(autoload (quote add-timeout) "timer" "\
+(autoload 'add-timeout "timer" "\
Add a timer to run SECS seconds from now, to call FUNCTION on OBJECT.
If REPEAT is non-nil, repeat the timer every REPEAT seconds.
This function is for compatibility; see also `run-with-timer'.
\(fn SECS FUNCTION OBJECT &optional REPEAT)" nil nil)
-(autoload (quote run-with-idle-timer) "timer" "\
+(autoload 'run-with-idle-timer "timer" "\
Perform an action the next time Emacs is idle for SECS seconds.
The action is to call FUNCTION with arguments ARGS.
SECS may be an integer, a floating point number, or the internal
@@ -27547,7 +27845,7 @@ This function returns a timer object which you can use in `cancel-timer'.
\(fn SECS REPEAT FUNCTION &rest ARGS)" t nil)
(put 'with-timeout 'lisp-indent-function 1)
-(autoload (quote with-timeout) "timer" "\
+(autoload 'with-timeout "timer" "\
Run BODY, but if it doesn't finish in SECONDS seconds, give up.
If we give up, we run the TIMEOUT-FORMS and return the value of the last one.
The timeout is checked whenever Emacs waits for some kind of external
@@ -27560,17 +27858,17 @@ be detected.
;;;***
;;;### (autoloads (batch-titdic-convert titdic-convert) "titdic-cnv"
-;;;;;; "international/titdic-cnv.el" (17870 32853))
+;;;;;; "international/titdic-cnv.el" (18088 55108))
;;; Generated autoloads from international/titdic-cnv.el
-(autoload (quote titdic-convert) "titdic-cnv" "\
+(autoload 'titdic-convert "titdic-cnv" "\
Convert a TIT dictionary of FILENAME into a Quail package.
Optional argument DIRNAME if specified is the directory name under which
the generated Quail package is saved.
\(fn FILENAME &optional DIRNAME)" t nil)
-(autoload (quote batch-titdic-convert) "titdic-cnv" "\
+(autoload 'batch-titdic-convert "titdic-cnv" "\
Run `titdic-convert' on the files remaining on the command line.
Use this from the command line, with `-batch';
it won't work in an interactive Emacs.
@@ -27583,21 +27881,21 @@ To get complete usage, invoke \"emacs -batch -f batch-titdic-convert -h\".
;;;***
;;;### (autoloads (tamil-composition-function tamil-post-read-conversion
-;;;;;; tamil-compose-region) "tml-util" "language/tml-util.el" (17842
-;;;;;; 58278))
+;;;;;; tamil-compose-region) "tml-util" "language/tml-util.el" (18088
+;;;;;; 55109))
;;; Generated autoloads from language/tml-util.el
-(autoload (quote tamil-compose-region) "tml-util" "\
+(autoload 'tamil-compose-region "tml-util" "\
Not documented
\(fn FROM TO)" t nil)
-(autoload (quote tamil-post-read-conversion) "tml-util" "\
+(autoload 'tamil-post-read-conversion "tml-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote tamil-composition-function) "tml-util" "\
+(autoload 'tamil-composition-function "tml-util" "\
Compose Tamil characters in REGION, or STRING if specified.
Assume that the REGION or STRING must fully match the composable
PATTERN regexp.
@@ -27607,13 +27905,12 @@ PATTERN regexp.
;;;***
;;;### (autoloads (tmm-prompt tmm-menubar-mouse tmm-menubar) "tmm"
-;;;;;; "tmm.el" (17952 58711))
+;;;;;; "tmm.el" (18149 22003))
;;; Generated autoloads from tmm.el
(define-key global-map "\M-`" 'tmm-menubar)
- (define-key global-map [f10] 'tmm-menubar)
(define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
-(autoload (quote tmm-menubar) "tmm" "\
+(autoload 'tmm-menubar "tmm" "\
Text-mode emulation of looking and choosing from a menubar.
See the documentation for `tmm-prompt'.
X-POSITION, if non-nil, specifies a horizontal position within the menu bar;
@@ -27621,7 +27918,7 @@ we make that menu bar item (the one at that position) the default choice.
\(fn &optional X-POSITION)" t nil)
-(autoload (quote tmm-menubar-mouse) "tmm" "\
+(autoload 'tmm-menubar-mouse "tmm" "\
Text-mode emulation of looking and choosing from a menubar.
This command is used when you click the mouse in the menubar
on a console which has no window system but does have a mouse.
@@ -27629,7 +27926,7 @@ See the documentation for `tmm-prompt'.
\(fn EVENT)" t nil)
-(autoload (quote tmm-prompt) "tmm" "\
+(autoload 'tmm-prompt "tmm" "\
Text-mode emulation of calling the bindings in keymap.
Creates a text-mode menu of possible choices. You can access the elements
in the menu in two ways:
@@ -27648,27 +27945,27 @@ Its value should be an event that has a binding in MENU.
;;;### (autoloads (todo-show todo-cp todo-mode todo-print todo-top-priorities
;;;;;; todo-insert-item todo-add-item-non-interactively todo-add-category)
-;;;;;; "todo-mode" "calendar/todo-mode.el" (17962 52848))
+;;;;;; "todo-mode" "calendar/todo-mode.el" (18203 38492))
;;; Generated autoloads from calendar/todo-mode.el
-(autoload (quote todo-add-category) "todo-mode" "\
+(autoload 'todo-add-category "todo-mode" "\
Add new category CAT to the TODO list.
\(fn CAT)" t nil)
-(autoload (quote todo-add-item-non-interactively) "todo-mode" "\
+(autoload 'todo-add-item-non-interactively "todo-mode" "\
Insert NEW-ITEM in TODO list as a new entry in CATEGORY.
\(fn NEW-ITEM CATEGORY)" nil nil)
-(autoload (quote todo-insert-item) "todo-mode" "\
+(autoload 'todo-insert-item "todo-mode" "\
Insert new TODO list entry.
With a prefix argument solicit the category, otherwise use the current
category.
\(fn ARG)" t nil)
-(autoload (quote todo-top-priorities) "todo-mode" "\
+(autoload 'todo-top-priorities "todo-mode" "\
List top priorities for each category.
Number of entries for each category is given by NOF-PRIORITIES which
@@ -27679,7 +27976,7 @@ between each category.
\(fn &optional NOF-PRIORITIES CATEGORY-PR-PAGE)" t nil)
-(autoload (quote todo-print) "todo-mode" "\
+(autoload 'todo-print "todo-mode" "\
Print todo summary using `todo-print-function'.
If CATEGORY-PR-PAGE is non-nil, a page separator `^L' is inserted
between each category.
@@ -27688,19 +27985,19 @@ Number of entries for each category is given by `todo-print-priorities'.
\(fn &optional CATEGORY-PR-PAGE)" t nil)
-(autoload (quote todo-mode) "todo-mode" "\
+(autoload 'todo-mode "todo-mode" "\
Major mode for editing TODO lists.
\\{todo-mode-map}
\(fn)" t nil)
-(autoload (quote todo-cp) "todo-mode" "\
+(autoload 'todo-cp "todo-mode" "\
Make a diary entry appear only in the current date's diary.
\(fn)" nil nil)
-(autoload (quote todo-show) "todo-mode" "\
+(autoload 'todo-show "todo-mode" "\
Show TODO list.
\(fn)" t nil)
@@ -27708,13 +28005,19 @@ Show TODO list.
;;;***
;;;### (autoloads (tool-bar-local-item-from-menu tool-bar-add-item-from-menu
-;;;;;; tool-bar-local-item tool-bar-add-item) "tool-bar" "tool-bar.el"
-;;;;;; (17842 58278))
+;;;;;; tool-bar-local-item tool-bar-add-item toggle-tool-bar-mode-from-frame)
+;;;;;; "tool-bar" "tool-bar.el" (18133 2197))
;;; Generated autoloads from tool-bar.el
-(put (quote tool-bar-mode) (quote standard-value) (quote (t)))
+(autoload 'toggle-tool-bar-mode-from-frame "tool-bar" "\
+Toggle tool bar on or off, based on the status of the current frame.
+See `tool-bar-mode' for more information.
+
+\(fn &optional ARG)" t nil)
-(autoload (quote tool-bar-add-item) "tool-bar" "\
+(put 'tool-bar-mode 'standard-value '(t))
+
+(autoload 'tool-bar-add-item "tool-bar" "\
Add an item to the tool bar.
ICON names the image, DEF is the key definition and KEY is a symbol
for the fake function key in the menu keymap. Remaining arguments
@@ -27731,7 +28034,7 @@ To define items in any other map, use `tool-bar-local-item'.
\(fn ICON DEF KEY &rest PROPS)" nil nil)
-(autoload (quote tool-bar-local-item) "tool-bar" "\
+(autoload 'tool-bar-local-item "tool-bar" "\
Add an item to the tool bar in map MAP.
ICON names the image, DEF is the key definition and KEY is a symbol
for the fake function key in the menu keymap. Remaining arguments
@@ -27745,7 +28048,7 @@ ICON.xbm, using `find-image'.
\(fn ICON DEF KEY MAP &rest PROPS)" nil nil)
-(autoload (quote tool-bar-add-item-from-menu) "tool-bar" "\
+(autoload 'tool-bar-add-item-from-menu "tool-bar" "\
Define tool bar binding for COMMAND in keymap MAP using the given ICON.
This makes a binding for COMMAND in `tool-bar-map', copying its
binding from the menu bar in MAP (which defaults to `global-map'), but
@@ -27760,7 +28063,7 @@ To define items in any other map, use `tool-bar-local-item-from-menu'.
\(fn COMMAND ICON &optional MAP &rest PROPS)" nil nil)
-(autoload (quote tool-bar-local-item-from-menu) "tool-bar" "\
+(autoload 'tool-bar-local-item-from-menu "tool-bar" "\
Define local tool bar binding for COMMAND using the given ICON.
This makes a binding for COMMAND in IN-MAP, copying its binding from
the menu bar in FROM-MAP (which defaults to `global-map'), but
@@ -27776,7 +28079,7 @@ holds a keymap.
;;;***
;;;### (autoloads (tpu-edt-on tpu-edt-mode) "tpu-edt" "emulation/tpu-edt.el"
-;;;;;; (18006 55796))
+;;;;;; (18211 32385))
;;; Generated autoloads from emulation/tpu-edt.el
(defvar tpu-edt-mode nil "\
@@ -27786,47 +28089,26 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `tpu-edt-mode'.")
-(custom-autoload (quote tpu-edt-mode) "tpu-edt" nil)
+(custom-autoload 'tpu-edt-mode "tpu-edt" nil)
-(autoload (quote tpu-edt-mode) "tpu-edt" "\
+(autoload 'tpu-edt-mode "tpu-edt" "\
TPU/edt emulation.
\(fn &optional ARG)" t nil)
-(defalias (quote tpu-edt) (quote tpu-edt-on))
+(defalias 'tpu-edt 'tpu-edt-on)
-(autoload (quote tpu-edt-on) "tpu-edt" "\
+(autoload 'tpu-edt-on "tpu-edt" "\
Turn on TPU/edt emulation.
\(fn)" t nil)
;;;***
-;;;### (autoloads (tpu-set-cursor-bound tpu-set-cursor-free tpu-set-scroll-margins)
-;;;;;; "tpu-extras" "emulation/tpu-extras.el" (17842 54264))
-;;; Generated autoloads from emulation/tpu-extras.el
-
-(autoload (quote tpu-set-scroll-margins) "tpu-extras" "\
-Set scroll margins.
-
-\(fn TOP BOTTOM)" t nil)
-
-(autoload (quote tpu-set-cursor-free) "tpu-extras" "\
-Allow the cursor to move freely about the screen.
-
-\(fn)" t nil)
-
-(autoload (quote tpu-set-cursor-bound) "tpu-extras" "\
-Constrain the cursor to the flow of the text.
-
-\(fn)" t nil)
-
-;;;***
-
-;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (17842 54152))
+;;;### (autoloads (tq-create) "tq" "emacs-lisp/tq.el" (18088 55096))
;;; Generated autoloads from emacs-lisp/tq.el
-(autoload (quote tq-create) "tq" "\
+(autoload 'tq-create "tq" "\
Create and return a transaction queue communicating with PROCESS.
PROCESS should be a subprocess capable of sending and receiving
streams of bytes. It may be a local process, or it may be connected
@@ -27837,15 +28119,15 @@ to a tcp server on another machine.
;;;***
;;;### (autoloads (trace-function-background trace-function trace-buffer)
-;;;;;; "trace" "emacs-lisp/trace.el" (17842 54152))
+;;;;;; "trace" "emacs-lisp/trace.el" (18088 55096))
;;; Generated autoloads from emacs-lisp/trace.el
(defvar trace-buffer "*trace-output*" "\
*Trace output will by default go to that buffer.")
-(custom-autoload (quote trace-buffer) "trace" t)
+(custom-autoload 'trace-buffer "trace" t)
-(autoload (quote trace-function) "trace" "\
+(autoload 'trace-function "trace" "\
Traces FUNCTION with trace output going to BUFFER.
For every call of FUNCTION Lisp-style trace messages that display argument
and return values will be inserted into BUFFER. This function generates the
@@ -27856,7 +28138,7 @@ display oriented stuff, use `trace-function-background' instead.
\(fn FUNCTION &optional BUFFER)" t nil)
-(autoload (quote trace-function-background) "trace" "\
+(autoload 'trace-function-background "trace" "\
Traces FUNCTION with trace output going quietly to BUFFER.
When this tracing is enabled, every call to FUNCTION writes
a Lisp-style trace message (showing the arguments and return value)
@@ -27873,32 +28155,43 @@ BUFFER defaults to `trace-buffer'.
;;;### (autoloads (tramp-unload-tramp tramp-completion-handle-file-name-completion
;;;;;; tramp-completion-handle-file-name-all-completions tramp-unload-file-name-handlers
-;;;;;; tramp-file-name-handler tramp-completion-file-name-regexp
-;;;;;; tramp-file-name-regexp) "tramp" "net/tramp.el" (17934 45069))
+;;;;;; tramp-file-name-handler tramp-syntax) "tramp" "net/tramp.el"
+;;;;;; (18211 32385))
;;; Generated autoloads from net/tramp.el
-(defvar tramp-unified-filenames (not (featurep (quote xemacs))) "\
-Non-nil means to use unified Ange-FTP/Tramp filename syntax.
-Otherwise, use a separate filename syntax for Tramp.")
+(defvar tramp-syntax (if (featurep 'xemacs) 'sep 'ftp) "\
+Tramp filename syntax to be used.
+
+It can have the following values:
+
+ 'ftp -- Ange-FTP respective EFS like syntax (GNU Emacs default)
+ 'sep -- Syntax as defined for XEmacs (not available yet for GNU Emacs)
+ 'url -- URL-like syntax.")
+
+(custom-autoload 'tramp-syntax "tramp" t)
(defconst tramp-file-name-regexp-unified "\\`/[^/:]+:" "\
Value for `tramp-file-name-regexp' for unified remoting.
Emacs (not XEmacs) uses a unified filename syntax for Ange-FTP and
-Tramp. See `tramp-file-name-structure-unified' for more explanations.")
+Tramp. See `tramp-file-name-structure' for more explanations.")
(defconst tramp-file-name-regexp-separate "\\`/\\[.*\\]" "\
Value for `tramp-file-name-regexp' for separate remoting.
XEmacs uses a separate filename syntax for Tramp and EFS.
-See `tramp-file-name-structure-separate' for more explanations.")
+See `tramp-file-name-structure' for more explanations.")
-(defvar tramp-file-name-regexp (if tramp-unified-filenames tramp-file-name-regexp-unified tramp-file-name-regexp-separate) "\
-*Regular expression matching file names handled by tramp.
-This regexp should match tramp file names but no other file names.
+(defconst tramp-file-name-regexp-url "\\`/[^/:]+://" "\
+Value for `tramp-file-name-regexp' for URL-like remoting.
+See `tramp-file-name-structure' for more explanations.")
+
+(defconst tramp-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-file-name-regexp-separate) ((equal tramp-syntax 'url) tramp-file-name-regexp-url) (t (error "Wrong `tramp-syntax' defined"))) "\
+*Regular expression matching file names handled by Tramp.
+This regexp should match Tramp file names but no other file names.
\(When tramp.el is loaded, this regular expression is prepended to
`file-name-handler-alist', and that is searched sequentially. Thus,
-if the tramp entry appears rather early in the `file-name-handler-alist'
-and is a bit too general, then some files might be considered tramp
-files which are not really tramp files.
+if the Tramp entry appears rather early in the `file-name-handler-alist'
+and is a bit too general, then some files might be considered Tramp
+files which are not really Tramp files.
Please note that the entry in `file-name-handler-alist' is made when
this file (tramp.el) is loaded. This means that this variable must be set
@@ -27907,21 +28200,23 @@ updated after changing this variable.
Also see `tramp-file-name-structure'.")
-(custom-autoload (quote tramp-file-name-regexp) "tramp" t)
-
-(defconst tramp-completion-file-name-regexp-unified "^/$\\|^/[^/:][^/]*$" "\
+(defconst tramp-completion-file-name-regexp-unified (if (memq system-type '(cygwin windows-nt)) "^\\([a-zA-Z]:\\)?/$\\|^\\([a-zA-Z]:\\)?/[^/:][^/]*$" "^/$\\|^/[^/:][^/]*$") "\
Value for `tramp-completion-file-name-regexp' for unified remoting.
Emacs (not XEmacs) uses a unified filename syntax for Ange-FTP and
-Tramp. See `tramp-file-name-structure-unified' for more explanations.")
+Tramp. See `tramp-file-name-structure' for more explanations.")
-(defconst tramp-completion-file-name-regexp-separate "^/\\([[][^]]*\\)?$" "\
+(defconst tramp-completion-file-name-regexp-separate (if (memq system-type '(cygwin windows-nt)) "^\\([a-zA-Z]:\\)?/\\([[][^]]*\\)?$" "^/\\([[][^]]*\\)?$") "\
Value for `tramp-completion-file-name-regexp' for separate remoting.
XEmacs uses a separate filename syntax for Tramp and EFS.
-See `tramp-file-name-structure-separate' for more explanations.")
+See `tramp-file-name-structure' for more explanations.")
-(defvar tramp-completion-file-name-regexp (if tramp-unified-filenames tramp-completion-file-name-regexp-unified tramp-completion-file-name-regexp-separate) "\
-*Regular expression matching file names handled by tramp completion.
-This regexp should match partial tramp file names only.
+(defconst tramp-completion-file-name-regexp-url (if (memq system-type '(cygwin windows-nt)) "^\\([a-zA-Z]:\\)?/$\\|^\\([a-zA-Z]:\\)?/[^/:]+\\(:\\(/\\(/[^/]*\\)?\\)?\\)?$" "^/$\\|^/[^/:]+\\(:\\(/\\(/[^/]*\\)?\\)?\\)?$") "\
+Value for `tramp-completion-file-name-regexp' for URL-like remoting.
+See `tramp-file-name-structure' for more explanations.")
+
+(defconst tramp-completion-file-name-regexp (cond ((equal tramp-syntax 'ftp) tramp-completion-file-name-regexp-unified) ((equal tramp-syntax 'sep) tramp-completion-file-name-regexp-separate) ((equal tramp-syntax 'url) tramp-completion-file-name-regexp-url) (t (error "Wrong `tramp-syntax' defined"))) "\
+*Regular expression matching file names handled by Tramp completion.
+This regexp should match partial Tramp file names only.
Please note that the entry in `file-name-handler-alist' is made when
this file (tramp.el) is loaded. This means that this variable must be set
@@ -27930,9 +28225,7 @@ updated after changing this variable.
Also see `tramp-file-name-structure'.")
-(custom-autoload (quote tramp-completion-file-name-regexp) "tramp" t)
-
-(defconst tramp-completion-file-name-handler-alist (quote ((file-name-all-completions . tramp-completion-handle-file-name-all-completions) (file-name-completion . tramp-completion-handle-file-name-completion))) "\
+(defconst tramp-completion-file-name-handler-alist '((file-name-all-completions . tramp-completion-handle-file-name-all-completions) (file-name-completion . tramp-completion-handle-file-name-completion)) "\
Alist of completion handler functions.
Used for file names matching `tramp-file-name-regexp'. Operations not
mentioned here will be handled by `tramp-file-name-handler-alist' or the
@@ -27948,42 +28241,42 @@ Invoke `tramp-file-name-handler' for OPERATION.
First arg specifies the OPERATION, second arg is a list of arguments to
pass to the OPERATION." (let* ((inhibit-file-name-handlers (\` (tramp-completion-file-name-handler cygwin-mount-name-hook-function cygwin-mount-map-drive-hook-function \, (and (eq inhibit-file-name-operation operation) inhibit-file-name-handlers)))) (inhibit-file-name-operation operation)) (apply operation args)))
-(autoload (quote tramp-file-name-handler) "tramp" "\
+(autoload 'tramp-file-name-handler "tramp" "\
Invoke Tramp file name handler.
-Falls back to normal file name handler if no tramp file name handler exists.
+Falls back to normal file name handler if no Tramp file name handler exists.
\(fn OPERATION &rest ARGS)" nil nil)
(defun tramp-completion-file-name-handler (operation &rest args) "\
-Invoke tramp file name completion handler.
-Falls back to normal file name handler if no tramp file name handler exists." (let ((fn (assoc operation tramp-completion-file-name-handler-alist))) (if fn (save-match-data (apply (cdr fn) args)) (tramp-completion-run-real-handler operation args))))
+Invoke Tramp file name completion handler.
+Falls back to normal file name handler if no Tramp file name handler exists." (let ((fn (assoc operation tramp-completion-file-name-handler-alist))) (if fn (save-match-data (apply (cdr fn) args)) (tramp-completion-run-real-handler operation args))))
(defsubst tramp-register-file-name-handler nil "\
-Add tramp file name handler to `file-name-handler-alist'." (add-to-list (quote file-name-handler-alist) (cons tramp-file-name-regexp (quote tramp-file-name-handler))) (let ((jka (rassoc (quote jka-compr-handler) file-name-handler-alist))) (when jka (setq file-name-handler-alist (cons jka (delete jka file-name-handler-alist))))))
+Add Tramp file name handler to `file-name-handler-alist'." (let ((a1 (rassq (quote tramp-file-name-handler) file-name-handler-alist))) (setq file-name-handler-alist (delete a1 file-name-handler-alist))) (add-to-list (quote file-name-handler-alist) (cons tramp-file-name-regexp (quote tramp-file-name-handler))) (let ((jka (rassoc (quote jka-compr-handler) file-name-handler-alist))) (when jka (setq file-name-handler-alist (cons jka (delete jka file-name-handler-alist))))))
+(tramp-register-file-name-handler)
(defsubst tramp-register-completion-file-name-handler nil "\
-Add tramp completion file name handler to `file-name-handler-alist'." (when (or (not (boundp (quote partial-completion-mode))) (symbol-value (quote partial-completion-mode)) (featurep (quote ido))) (add-to-list (quote file-name-handler-alist) (cons tramp-completion-file-name-regexp (quote tramp-completion-file-name-handler))) (put (quote tramp-completion-file-name-handler) (quote safe-magic) t)) (let ((jka (rassoc (quote jka-compr-handler) file-name-handler-alist))) (when jka (setq file-name-handler-alist (cons jka (delete jka file-name-handler-alist))))))
-(tramp-register-file-name-handler)
+Add Tramp completion file name handler to `file-name-handler-alist'." (let ((a1 (rassq (quote tramp-completion-file-name-handler) file-name-handler-alist))) (setq file-name-handler-alist (delete a1 file-name-handler-alist))) (when (or (not (boundp (quote partial-completion-mode))) (symbol-value (quote partial-completion-mode)) (featurep (quote ido)) (featurep (quote icicles))) (add-to-list (quote file-name-handler-alist) (cons tramp-completion-file-name-regexp (quote tramp-completion-file-name-handler))) (put (quote tramp-completion-file-name-handler) (quote safe-magic) t)) (let ((jka (rassoc (quote jka-compr-handler) file-name-handler-alist))) (when jka (setq file-name-handler-alist (cons jka (delete jka file-name-handler-alist))))))
(add-hook
'after-init-hook
'(lambda () (tramp-register-completion-file-name-handler)))
-(autoload (quote tramp-unload-file-name-handlers) "tramp" "\
+(autoload 'tramp-unload-file-name-handlers "tramp" "\
Not documented
\(fn)" nil nil)
-(autoload (quote tramp-completion-handle-file-name-all-completions) "tramp" "\
-Like `file-name-all-completions' for partial tramp files.
+(autoload 'tramp-completion-handle-file-name-all-completions "tramp" "\
+Like `file-name-all-completions' for partial Tramp files.
\(fn FILENAME DIRECTORY)" nil nil)
-(autoload (quote tramp-completion-handle-file-name-completion) "tramp" "\
-Like `file-name-completion' for tramp files.
+(autoload 'tramp-completion-handle-file-name-completion "tramp" "\
+Like `file-name-completion' for Tramp files.
\(fn FILENAME DIRECTORY &optional PREDICATE)" nil nil)
-(autoload (quote tramp-unload-tramp) "tramp" "\
+(autoload 'tramp-unload-tramp "tramp" "\
Discard Tramp from loading remote files.
\(fn)" t nil)
@@ -27991,21 +28284,21 @@ Discard Tramp from loading remote files.
;;;***
;;;### (autoloads (tramp-ftp-enable-ange-ftp) "tramp-ftp" "net/tramp-ftp.el"
-;;;;;; (17842 55218))
+;;;;;; (18183 58477))
;;; Generated autoloads from net/tramp-ftp.el
-(autoload (quote tramp-ftp-enable-ange-ftp) "tramp-ftp" "\
+(autoload 'tramp-ftp-enable-ange-ftp "tramp-ftp" "\
Not documented
\(fn)" nil nil)
;;;***
-;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (18006
-;;;;;; 55796))
+;;;### (autoloads (help-with-tutorial) "tutorial" "tutorial.el" (18200
+;;;;;; 51264))
;;; Generated autoloads from tutorial.el
-(autoload (quote help-with-tutorial) "tutorial" "\
+(autoload 'help-with-tutorial "tutorial" "\
Select the Emacs learn-by-doing tutorial.
If there is a tutorial version written in the language
of the selected language environment, that version is used.
@@ -28027,13 +28320,13 @@ resumed later.
;;;***
;;;### (autoloads (2C-split 2C-associate-buffer 2C-two-columns) "two-column"
-;;;;;; "textmodes/two-column.el" (17842 58276))
+;;;;;; "textmodes/two-column.el" (18201 33329))
;;; Generated autoloads from textmodes/two-column.el
(autoload '2C-command "two-column" () t 'keymap)
(global-set-key "\C-x6" '2C-command)
(global-set-key [f2] '2C-command)
-(autoload (quote 2C-two-columns) "two-column" "\
+(autoload '2C-two-columns "two-column" "\
Split current window vertically for two-column editing.
\\<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,
@@ -28043,7 +28336,7 @@ first and the associated buffer to its right.
\(fn &optional BUFFER)" t nil)
-(autoload (quote 2C-associate-buffer) "two-column" "\
+(autoload '2C-associate-buffer "two-column" "\
Associate another buffer with this one in two-column minor mode.
Can also be used to associate a just previously visited file, by
accepting the proposed default buffer.
@@ -28052,7 +28345,7 @@ accepting the proposed default buffer.
\(fn)" t nil)
-(autoload (quote 2C-split) "two-column" "\
+(autoload '2C-split "two-column" "\
Split a two-column text at point, into two buffers in two-column minor mode.
Point becomes the local value of `2C-window-width'. Only lines that
have the ARG same preceding characters at that column get split. The
@@ -28078,7 +28371,7 @@ First column's text sSs Second column's text
;;;;;; type-break type-break-mode type-break-keystroke-threshold
;;;;;; type-break-good-break-interval type-break-good-rest-interval
;;;;;; type-break-interval type-break-mode) "type-break" "type-break.el"
-;;;;;; (17908 29123))
+;;;;;; (18088 55090))
;;; Generated autoloads from type-break.el
(defvar type-break-mode nil "\
@@ -28087,12 +28380,12 @@ See the docstring for the `type-break-mode' command for more information.
Setting this variable directly does not take effect;
use either \\[customize] or the function `type-break-mode'.")
-(custom-autoload (quote type-break-mode) "type-break" nil)
+(custom-autoload 'type-break-mode "type-break" nil)
(defvar type-break-interval (* 60 60) "\
*Number of seconds between scheduled typing breaks.")
-(custom-autoload (quote type-break-interval) "type-break" t)
+(custom-autoload 'type-break-interval "type-break" t)
(defvar type-break-good-rest-interval (/ type-break-interval 6) "\
*Number of seconds of idle time considered to be an adequate typing rest.
@@ -28104,7 +28397,7 @@ rest from typing, then the next typing break is simply rescheduled for later.
If a break is interrupted before this much time elapses, the user will be
asked whether or not really to interrupt the break.")
-(custom-autoload (quote type-break-good-rest-interval) "type-break" t)
+(custom-autoload 'type-break-good-rest-interval "type-break" t)
(defvar type-break-good-break-interval nil "\
*Number of seconds considered to be an adequate explicit typing rest.
@@ -28114,7 +28407,7 @@ length (in seconds) for a break initiated by the command `type-break',
overriding `type-break-good-rest-interval'. This provides querying of
break interruptions when `type-break-good-rest-interval' is nil.")
-(custom-autoload (quote type-break-good-break-interval) "type-break" t)
+(custom-autoload 'type-break-good-break-interval "type-break" t)
(defvar type-break-keystroke-threshold (let* ((wpm 35) (avg-word-length 5) (upper (* wpm avg-word-length (/ type-break-interval 60))) (lower (/ upper 5))) (cons lower upper)) "\
*Upper and lower bound on number of keystrokes for considering typing break.
@@ -28138,9 +28431,9 @@ keystroke even though they really require multiple keys to generate them.
The command `type-break-guesstimate-keystroke-threshold' can be used to
guess a reasonably good pair of values for this variable.")
-(custom-autoload (quote type-break-keystroke-threshold) "type-break" t)
+(custom-autoload 'type-break-keystroke-threshold "type-break" t)
-(autoload (quote type-break-mode) "type-break" "\
+(autoload 'type-break-mode "type-break" "\
Enable or disable typing-break mode.
This is a minor mode, but it is global to all buffers by default.
@@ -28216,7 +28509,7 @@ problems.
\(fn &optional PREFIX)" t nil)
-(autoload (quote type-break) "type-break" "\
+(autoload 'type-break "type-break" "\
Take a typing break.
During the break, a demo selected from the functions listed in
@@ -28227,14 +28520,14 @@ as per the function `type-break-schedule'.
\(fn)" t nil)
-(autoload (quote type-break-statistics) "type-break" "\
+(autoload 'type-break-statistics "type-break" "\
Print statistics about typing breaks in a temporary buffer.
This includes the last time a typing break was taken, when the next one is
scheduled, the keystroke thresholds and the current keystroke count, etc.
\(fn)" t nil)
-(autoload (quote type-break-guesstimate-keystroke-threshold) "type-break" "\
+(autoload 'type-break-guesstimate-keystroke-threshold "type-break" "\
Guess values for the minimum/maximum keystroke threshold for typing breaks.
If called interactively, the user is prompted for their guess as to how
@@ -28261,10 +28554,10 @@ FRAC should be the inverse of the fractional value; for example, a value of
;;;***
;;;### (autoloads (ununderline-region underline-region) "underline"
-;;;;;; "textmodes/underline.el" (17842 58276))
+;;;;;; "textmodes/underline.el" (18088 55121))
;;; Generated autoloads from textmodes/underline.el
-(autoload (quote underline-region) "underline" "\
+(autoload 'underline-region "underline" "\
Underline all nonblank characters in the region.
Works by overstriking underscores.
Called from program, takes two arguments START and END
@@ -28272,7 +28565,7 @@ which specify the range to operate on.
\(fn START END)" t nil)
-(autoload (quote ununderline-region) "underline" "\
+(autoload 'ununderline-region "underline" "\
Remove all underlining (overstruck underscores) in the region.
Called from program, takes two arguments START and END
which specify the range to operate on.
@@ -28282,16 +28575,16 @@ which specify the range to operate on.
;;;***
;;;### (autoloads (unforward-rmail-message undigestify-rmail-message)
-;;;;;; "undigest" "mail/undigest.el" (17842 55035))
+;;;;;; "undigest" "mail/undigest.el" (18120 34751))
;;; Generated autoloads from mail/undigest.el
-(autoload (quote undigestify-rmail-message) "undigest" "\
+(autoload 'undigestify-rmail-message "undigest" "\
Break up a digest message into its constituent messages.
Leaves original message, deleted, before the undigestified messages.
\(fn)" t nil)
-(autoload (quote unforward-rmail-message) "undigest" "\
+(autoload 'unforward-rmail-message "undigest" "\
Extract a forwarded message from the containing message.
This puts the forwarded message into a separate rmail message
following the containing message.
@@ -28301,10 +28594,10 @@ following the containing message.
;;;***
;;;### (autoloads (unrmail batch-unrmail) "unrmail" "mail/unrmail.el"
-;;;;;; (17842 55035))
+;;;;;; (18088 55110))
;;; Generated autoloads from mail/unrmail.el
-(autoload (quote batch-unrmail) "unrmail" "\
+(autoload 'batch-unrmail "unrmail" "\
Convert Rmail files to system inbox format.
Specify the input Rmail file names as command line arguments.
For each Rmail file, the corresponding output file name
@@ -28313,18 +28606,18 @@ For example, invoke `emacs -batch -f batch-unrmail RMAIL'.
\(fn)" nil nil)
-(autoload (quote unrmail) "unrmail" "\
+(autoload 'unrmail "unrmail" "\
Convert Rmail file FILE to system inbox format file TO-FILE.
\(fn FILE TO-FILE)" t nil)
;;;***
-;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (17842
-;;;;;; 54152))
+;;;### (autoloads (unsafep) "unsafep" "emacs-lisp/unsafep.el" (18120
+;;;;;; 34750))
;;; Generated autoloads from emacs-lisp/unsafep.el
-(autoload (quote unsafep) "unsafep" "\
+(autoload 'unsafep "unsafep" "\
Return nil if evaluating FORM couldn't possibly do any harm;
otherwise result is a reason why FORM is unsafe. UNSAFEP-VARS is a list
of symbols with local bindings.
@@ -28334,10 +28627,10 @@ of symbols with local bindings.
;;;***
;;;### (autoloads (url-retrieve-synchronously url-retrieve) "url"
-;;;;;; "url/url.el" (17842 56569))
+;;;;;; "url/url.el" (18088 55122))
;;; Generated autoloads from url/url.el
-(autoload (quote url-retrieve) "url" "\
+(autoload 'url-retrieve "url" "\
Retrieve URL asynchronously and call CALLBACK with CBARGS when finished.
URL is either a string or a parsed URL.
@@ -28363,7 +28656,7 @@ take effect.
\(fn URL CALLBACK &optional CBARGS)" nil nil)
-(autoload (quote url-retrieve-synchronously) "url" "\
+(autoload 'url-retrieve-synchronously "url" "\
Retrieve URL synchronously.
Return the buffer containing the data, or nil if there are no data
associated with it (the case for dired, info, or mailto URLs that need
@@ -28374,10 +28667,10 @@ no further processing). URL is either a string or a parsed URL.
;;;***
;;;### (autoloads (url-register-auth-scheme url-get-authentication)
-;;;;;; "url-auth" "url/url-auth.el" (17854 10173))
+;;;;;; "url-auth" "url/url-auth.el" (18197 21677))
;;; Generated autoloads from url/url-auth.el
-(autoload (quote url-get-authentication) "url-auth" "\
+(autoload 'url-get-authentication "url-auth" "\
Return an authorization string suitable for use in the WWW-Authenticate
header in an HTTP/1.0 request.
@@ -28399,7 +28692,7 @@ PROMPT is boolean - specifies whether to ask the user for a username/password
\(fn URL REALM TYPE PROMPT &optional ARGS)" nil nil)
-(autoload (quote url-register-auth-scheme) "url-auth" "\
+(autoload 'url-register-auth-scheme "url-auth" "\
Register an HTTP authentication method.
TYPE is a string or symbol specifying the name of the method. This
@@ -28416,36 +28709,36 @@ RATING a rating between 1 and 10 of the strength of the authentication.
;;;***
;;;### (autoloads (url-cache-expired url-cache-extract url-is-cached
-;;;;;; url-store-in-cache) "url-cache" "url/url-cache.el" (17842
-;;;;;; 56569))
+;;;;;; url-store-in-cache) "url-cache" "url/url-cache.el" (18120
+;;;;;; 34753))
;;; Generated autoloads from url/url-cache.el
-(autoload (quote url-store-in-cache) "url-cache" "\
+(autoload 'url-store-in-cache "url-cache" "\
Store buffer BUFF in the cache.
\(fn &optional BUFF)" nil nil)
-(autoload (quote url-is-cached) "url-cache" "\
+(autoload 'url-is-cached "url-cache" "\
Return non-nil if the URL is cached.
\(fn URL)" nil nil)
-(autoload (quote url-cache-extract) "url-cache" "\
+(autoload 'url-cache-extract "url-cache" "\
Extract FNAM from the local disk cache
\(fn FNAM)" nil nil)
-(autoload (quote url-cache-expired) "url-cache" "\
-Return t iff a cached file has expired.
+(autoload 'url-cache-expired "url-cache" "\
+Return t if a cached file has expired.
\(fn URL MOD)" nil nil)
;;;***
-;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (17842 56569))
+;;;### (autoloads (url-cid) "url-cid" "url/url-cid.el" (18088 55121))
;;; Generated autoloads from url/url-cid.el
-(autoload (quote url-cid) "url-cid" "\
+(autoload 'url-cid "url-cid" "\
Not documented
\(fn URL)" nil nil)
@@ -28453,26 +28746,26 @@ Not documented
;;;***
;;;### (autoloads (url-dav-vc-registered url-dav-supported-p) "url-dav"
-;;;;;; "url/url-dav.el" (17842 56569))
+;;;;;; "url/url-dav.el" (18173 8196))
;;; Generated autoloads from url/url-dav.el
-(autoload (quote url-dav-supported-p) "url-dav" "\
+(autoload 'url-dav-supported-p "url-dav" "\
Not documented
\(fn URL)" nil nil)
-(autoload (quote url-dav-vc-registered) "url-dav" "\
+(autoload 'url-dav-vc-registered "url-dav" "\
Not documented
\(fn URL)" nil nil)
;;;***
-;;;### (autoloads (url-file) "url-file" "url/url-file.el" (17842
-;;;;;; 56569))
+;;;### (autoloads (url-file) "url-file" "url/url-file.el" (18140
+;;;;;; 63039))
;;; Generated autoloads from url/url-file.el
-(autoload (quote url-file) "url-file" "\
+(autoload 'url-file "url-file" "\
Handle file: and ftp: URLs.
\(fn URL CALLBACK CBARGS)" nil nil)
@@ -28480,15 +28773,15 @@ Handle file: and ftp: URLs.
;;;***
;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw"
-;;;;;; "url/url-gw.el" (17842 56569))
+;;;;;; "url/url-gw.el" (18088 55121))
;;; Generated autoloads from url/url-gw.el
-(autoload (quote url-gateway-nslookup-host) "url-gw" "\
+(autoload 'url-gateway-nslookup-host "url-gw" "\
Attempt to resolve the given HOST using nslookup if possible.
\(fn HOST)" t nil)
-(autoload (quote url-open-stream) "url-gw" "\
+(autoload 'url-open-stream "url-gw" "\
Open a stream to HOST, possibly via a gateway.
Args per `open-network-stream'.
Will not make a connection if `url-gateway-unplugged' is non-nil.
@@ -28499,8 +28792,8 @@ Might do a non-blocking connection; use `process-status' to check.
;;;***
;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file
-;;;;;; url-handler-mode) "url-handlers" "url/url-handlers.el" (17842
-;;;;;; 56569))
+;;;;;; url-handler-mode) "url-handlers" "url/url-handlers.el" (18088
+;;;;;; 55121))
;;; Generated autoloads from url/url-handlers.el
(defvar url-handler-mode nil "\
@@ -28510,14 +28803,14 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `url-handler-mode'.")
-(custom-autoload (quote url-handler-mode) "url-handlers" nil)
+(custom-autoload 'url-handler-mode "url-handlers" nil)
-(autoload (quote url-handler-mode) "url-handlers" "\
+(autoload 'url-handler-mode "url-handlers" "\
Use URL to handle URL-like file names.
\(fn &optional ARG)" t nil)
-(autoload (quote url-copy-file) "url-handlers" "\
+(autoload 'url-copy-file "url-handlers" "\
Copy URL to NEWNAME. Both args must be strings.
Signals a `file-already-exists' error if file NEWNAME already exists,
unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.
@@ -28529,14 +28822,14 @@ A prefix arg makes KEEP-TIME non-nil.
\(fn URL NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-TIME)" nil nil)
-(autoload (quote url-file-local-copy) "url-handlers" "\
+(autoload 'url-file-local-copy "url-handlers" "\
Copy URL into a temporary file on this machine.
Returns the name of the local copy, or nil, if FILE is directly
accessible.
\(fn URL &rest IGNORED)" nil nil)
-(autoload (quote url-insert-file-contents) "url-handlers" "\
+(autoload 'url-insert-file-contents "url-handlers" "\
Not documented
\(fn URL &optional VISIT BEG END REPLACE)" nil nil)
@@ -28544,10 +28837,10 @@ Not documented
;;;***
;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p
-;;;;;; url-http) "url-http" "url/url-http.el" (17952 11683))
+;;;;;; url-http) "url-http" "url/url-http.el" (18140 63039))
;;; Generated autoloads from url/url-http.el
-(autoload (quote url-http) "url-http" "\
+(autoload 'url-http "url-http" "\
Retrieve URL via HTTP asynchronously.
URL must be a parsed URL. See `url-generic-parse-url' for details.
When retrieval is completed, the function CALLBACK is executed with
@@ -28555,19 +28848,19 @@ CBARGS as the arguments.
\(fn URL CALLBACK CBARGS)" nil nil)
-(autoload (quote url-http-file-exists-p) "url-http" "\
+(autoload 'url-http-file-exists-p "url-http" "\
Not documented
\(fn URL)" nil nil)
-(defalias (quote url-http-file-readable-p) (quote url-http-file-exists-p))
+(defalias 'url-http-file-readable-p 'url-http-file-exists-p)
-(autoload (quote url-http-file-attributes) "url-http" "\
+(autoload 'url-http-file-attributes "url-http" "\
Not documented
\(fn URL &optional ID-FORMAT)" nil nil)
-(autoload (quote url-http-options) "url-http" "\
+(autoload 'url-http-options "url-http" "\
Return a property list describing options available for URL.
This list is retrieved using the `OPTIONS' HTTP method.
@@ -28601,7 +28894,7 @@ Default HTTPS port.")
(defconst url-https-asynchronous-p t "\
HTTPS retrievals are asynchronous.")
-(defalias (quote url-https-expand-file-name) (quote url-http-expand-file-name))
+(defalias 'url-https-expand-file-name 'url-http-expand-file-name)
(autoload 'url-https "url-http")
(autoload 'url-https-file-exists-p "url-http")
(autoload 'url-https-file-readable-p "url-http")
@@ -28609,21 +28902,21 @@ HTTPS retrievals are asynchronous.")
;;;***
-;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (17842 56569))
+;;;### (autoloads (url-irc) "url-irc" "url/url-irc.el" (18088 55121))
;;; Generated autoloads from url/url-irc.el
-(autoload (quote url-irc) "url-irc" "\
+(autoload 'url-irc "url-irc" "\
Not documented
\(fn URL)" nil nil)
;;;***
-;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (17842
-;;;;;; 56569))
+;;;### (autoloads (url-ldap) "url-ldap" "url/url-ldap.el" (18088
+;;;;;; 55121))
;;; Generated autoloads from url/url-ldap.el
-(autoload (quote url-ldap) "url-ldap" "\
+(autoload 'url-ldap "url-ldap" "\
Perform an LDAP search specified by URL.
The return value is a buffer displaying the search results in HTML.
URL can be a URL string, or a URL vector of the type returned by
@@ -28634,15 +28927,15 @@ URL can be a URL string, or a URL vector of the type returned by
;;;***
;;;### (autoloads (url-mailto url-mail) "url-mailto" "url/url-mailto.el"
-;;;;;; (18012 18089))
+;;;;;; (18140 63039))
;;; Generated autoloads from url/url-mailto.el
-(autoload (quote url-mail) "url-mailto" "\
+(autoload 'url-mail "url-mailto" "\
Not documented
\(fn &rest ARGS)" t nil)
-(autoload (quote url-mailto) "url-mailto" "\
+(autoload 'url-mailto "url-mailto" "\
Handle the mailto: URL syntax.
\(fn URL)" nil nil)
@@ -28650,31 +28943,31 @@ Handle the mailto: URL syntax.
;;;***
;;;### (autoloads (url-data url-generic-emulator-loader url-info
-;;;;;; url-man) "url-misc" "url/url-misc.el" (17842 56569))
+;;;;;; url-man) "url-misc" "url/url-misc.el" (18165 39747))
;;; Generated autoloads from url/url-misc.el
-(autoload (quote url-man) "url-misc" "\
+(autoload 'url-man "url-misc" "\
Fetch a Unix manual page URL.
\(fn URL)" nil nil)
-(autoload (quote url-info) "url-misc" "\
+(autoload 'url-info "url-misc" "\
Fetch a GNU Info URL.
\(fn URL)" nil nil)
-(autoload (quote url-generic-emulator-loader) "url-misc" "\
+(autoload 'url-generic-emulator-loader "url-misc" "\
Not documented
\(fn URL)" nil nil)
-(defalias (quote url-rlogin) (quote url-generic-emulator-loader))
+(defalias 'url-rlogin 'url-generic-emulator-loader)
-(defalias (quote url-telnet) (quote url-generic-emulator-loader))
+(defalias 'url-telnet 'url-generic-emulator-loader)
-(defalias (quote url-tn3270) (quote url-generic-emulator-loader))
+(defalias 'url-tn3270 'url-generic-emulator-loader)
-(autoload (quote url-data) "url-misc" "\
+(autoload 'url-data "url-misc" "\
Fetch a data URL (RFC 2397).
\(fn URL)" nil nil)
@@ -28682,15 +28975,15 @@ Fetch a data URL (RFC 2397).
;;;***
;;;### (autoloads (url-snews url-news) "url-news" "url/url-news.el"
-;;;;;; (17842 56569))
+;;;;;; (18163 15437))
;;; Generated autoloads from url/url-news.el
-(autoload (quote url-news) "url-news" "\
+(autoload 'url-news "url-news" "\
Not documented
\(fn URL)" nil nil)
-(autoload (quote url-snews) "url-news" "\
+(autoload 'url-snews "url-news" "\
Not documented
\(fn URL)" nil nil)
@@ -28699,40 +28992,40 @@ Not documented
;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable
;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url/url-ns.el"
-;;;;;; (17842 56569))
+;;;;;; (18088 55121))
;;; Generated autoloads from url/url-ns.el
-(autoload (quote isPlainHostName) "url-ns" "\
+(autoload 'isPlainHostName "url-ns" "\
Not documented
\(fn HOST)" nil nil)
-(autoload (quote dnsDomainIs) "url-ns" "\
+(autoload 'dnsDomainIs "url-ns" "\
Not documented
\(fn HOST DOM)" nil nil)
-(autoload (quote dnsResolve) "url-ns" "\
+(autoload 'dnsResolve "url-ns" "\
Not documented
\(fn HOST)" nil nil)
-(autoload (quote isResolvable) "url-ns" "\
+(autoload 'isResolvable "url-ns" "\
Not documented
\(fn HOST)" nil nil)
-(autoload (quote isInNet) "url-ns" "\
+(autoload 'isInNet "url-ns" "\
Not documented
\(fn IP NET MASK)" nil nil)
-(autoload (quote url-ns-prefs) "url-ns" "\
+(autoload 'url-ns-prefs "url-ns" "\
Not documented
\(fn &optional FILE)" nil nil)
-(autoload (quote url-ns-user-pref) "url-ns" "\
+(autoload 'url-ns-user-pref "url-ns" "\
Not documented
\(fn KEY &optional DEFAULT)" nil nil)
@@ -28740,15 +29033,15 @@ Not documented
;;;***
;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse"
-;;;;;; "url/url-parse.el" (17954 22157))
+;;;;;; "url/url-parse.el" (18140 63039))
;;; Generated autoloads from url/url-parse.el
-(autoload (quote url-recreate-url) "url-parse" "\
+(autoload 'url-recreate-url "url-parse" "\
Recreate a URL string from the parsed URLOBJ.
\(fn URLOBJ)" nil nil)
-(autoload (quote url-generic-parse-url) "url-parse" "\
+(autoload 'url-generic-parse-url "url-parse" "\
Return a vector of the parts of URL.
Format is:
\[TYPE USER PASSWORD HOST PORT FILE TARGET ATTRIBUTES FULL]
@@ -28758,10 +29051,10 @@ Format is:
;;;***
;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url/url-privacy.el"
-;;;;;; (17842 56569))
+;;;;;; (18088 55121))
;;; Generated autoloads from url/url-privacy.el
-(autoload (quote url-setup-privacy-info) "url-privacy" "\
+(autoload 'url-setup-privacy-info "url-privacy" "\
Setup variables that expose info about you and your system.
\(fn)" t nil)
@@ -28770,11 +29063,11 @@ Setup variables that expose info about you and your system.
;;;### (autoloads (url-view-url url-truncate-url-for-viewing url-file-extension
;;;;;; url-hexify-string url-unhex-string url-parse-query-string
-;;;;;; url-basepath url-percentage url-display-percentage url-pretty-length
-;;;;;; url-strip-leading-spaces url-eat-trailing-space url-get-normalized-date
-;;;;;; url-lazy-message url-normalize-url url-insert-entities-in-string
-;;;;;; url-parse-args url-debug url-debug) "url-util" "url/url-util.el"
-;;;;;; (17842 56569))
+;;;;;; url-file-nondirectory url-file-directory url-percentage url-display-percentage
+;;;;;; url-pretty-length url-strip-leading-spaces url-eat-trailing-space
+;;;;;; url-get-normalized-date url-lazy-message url-normalize-url
+;;;;;; url-insert-entities-in-string url-parse-args url-debug url-debug)
+;;;;;; "url-util" "url/url-util.el" (18197 21677))
;;; Generated autoloads from url/url-util.el
(defvar url-debug nil "\
@@ -28785,19 +29078,19 @@ If t, all messages will be logged.
If a number, all messages will be logged, as well shown via `message'.
If a list, it is a list of the types of messages to be logged.")
-(custom-autoload (quote url-debug) "url-util" t)
+(custom-autoload 'url-debug "url-util" t)
-(autoload (quote url-debug) "url-util" "\
+(autoload 'url-debug "url-util" "\
Not documented
\(fn TAG &rest ARGS)" nil nil)
-(autoload (quote url-parse-args) "url-util" "\
+(autoload 'url-parse-args "url-util" "\
Not documented
\(fn STR &optional NODOWNCASE)" nil nil)
-(autoload (quote url-insert-entities-in-string) "url-util" "\
+(autoload 'url-insert-entities-in-string "url-util" "\
Convert HTML markup-start characters to entity references in STRING.
Also replaces the \" character, so that the result may be safely used as
an attribute value in a tag. Returns a new string with the result of the
@@ -28809,59 +29102,64 @@ Also replaces the \" character, so that the result may be safely used as
\(fn STRING)" nil nil)
-(autoload (quote url-normalize-url) "url-util" "\
+(autoload 'url-normalize-url "url-util" "\
Return a 'normalized' version of URL.
Strips out default port numbers, etc.
\(fn URL)" nil nil)
-(autoload (quote url-lazy-message) "url-util" "\
+(autoload 'url-lazy-message "url-util" "\
Just like `message', but is a no-op if called more than once a second.
Will not do anything if `url-show-status' is nil.
\(fn &rest ARGS)" nil nil)
-(autoload (quote url-get-normalized-date) "url-util" "\
+(autoload 'url-get-normalized-date "url-util" "\
Return a 'real' date string that most HTTP servers can understand.
\(fn &optional SPECIFIED-TIME)" nil nil)
-(autoload (quote url-eat-trailing-space) "url-util" "\
+(autoload 'url-eat-trailing-space "url-util" "\
Remove spaces/tabs at the end of a string.
\(fn X)" nil nil)
-(autoload (quote url-strip-leading-spaces) "url-util" "\
+(autoload 'url-strip-leading-spaces "url-util" "\
Remove spaces at the front of a string.
\(fn X)" nil nil)
-(autoload (quote url-pretty-length) "url-util" "\
+(autoload 'url-pretty-length "url-util" "\
Not documented
\(fn N)" nil nil)
-(autoload (quote url-display-percentage) "url-util" "\
+(autoload 'url-display-percentage "url-util" "\
Not documented
\(fn FMT PERC &rest ARGS)" nil nil)
-(autoload (quote url-percentage) "url-util" "\
+(autoload 'url-percentage "url-util" "\
Not documented
\(fn X Y)" nil nil)
-(autoload (quote url-basepath) "url-util" "\
-Return the base pathname of FILE, or the actual filename if X is true.
+(autoload 'url-file-directory "url-util" "\
+Return the directory part of FILE, for a URL.
+
+\(fn FILE)" nil nil)
+
+(autoload 'url-file-nondirectory "url-util" "\
+Return the nondirectory part of FILE, for a URL.
-\(fn FILE &optional X)" nil nil)
+\(fn FILE)" nil nil)
-(autoload (quote url-parse-query-string) "url-util" "\
+(autoload 'url-parse-query-string "url-util" "\
Not documented
\(fn QUERY &optional DOWNCASE ALLOW-NEWLINES)" nil nil)
-(autoload (quote url-unhex-string) "url-util" "\
+(autoload 'url-unhex-string "url-util" "\
Remove %XX embedded spaces, etc in a url.
If optional second argument ALLOW-NEWLINES is non-nil, then allow the
decoding of carriage returns and line feeds in the string, which is normally
@@ -28869,7 +29167,7 @@ forbidden in URL encoding.
\(fn STR &optional ALLOW-NEWLINES)" nil nil)
-(autoload (quote url-hexify-string) "url-util" "\
+(autoload 'url-hexify-string "url-util" "\
Return a new string that is STRING URI-encoded.
First, STRING is converted to utf-8, if necessary. Then, for each
character in the utf-8 string, those found in `url-unreserved-chars'
@@ -28878,20 +29176,20 @@ string: \"%\" followed by two lowercase hex digits.
\(fn STRING)" nil nil)
-(autoload (quote url-file-extension) "url-util" "\
+(autoload 'url-file-extension "url-util" "\
Return the filename extension of FNAME.
If optional variable X is t,
then return the basename of the file with the extension stripped off.
\(fn FNAME &optional X)" nil nil)
-(autoload (quote url-truncate-url-for-viewing) "url-util" "\
+(autoload 'url-truncate-url-for-viewing "url-util" "\
Return a shortened version of URL that is WIDTH characters or less wide.
WIDTH defaults to the current frame width.
\(fn URL &optional WIDTH)" nil nil)
-(autoload (quote url-view-url) "url-util" "\
+(autoload 'url-view-url "url-util" "\
View the current document's URL.
Optional argument NO-SHOW means just return the URL, don't show it in
the minibuffer.
@@ -28903,10 +29201,10 @@ This uses `url-current-object', set locally to the buffer.
;;;***
;;;### (autoloads (ask-user-about-supersession-threat ask-user-about-lock)
-;;;;;; "userlock" "userlock.el" (17842 58278))
+;;;;;; "userlock" "userlock.el" (18120 34749))
;;; Generated autoloads from userlock.el
-(autoload (quote ask-user-about-lock) "userlock" "\
+(autoload 'ask-user-about-lock "userlock" "\
Ask user what to do when he wants to edit FILE but it is locked by OPPONENT.
This function has a choice of three things to do:
do (signal 'file-locked (list FILE OPPONENT))
@@ -28918,7 +29216,7 @@ in any way you like.
\(fn FILE OPPONENT)" nil nil)
-(autoload (quote ask-user-about-supersession-threat) "userlock" "\
+(autoload 'ask-user-about-supersession-threat "userlock" "\
Ask a user who is about to modify an obsolete buffer what to do.
This function has two choices: it can return, in which case the modification
of the buffer will proceed, or it can (signal 'file-supersession (file)),
@@ -28931,7 +29229,7 @@ The buffer in question is current when this function is called.
;;;***
-;;;### (autoloads nil "utf-7" "international/utf-7.el" (17842 54888))
+;;;### (autoloads nil "utf-7" "international/utf-7.el" (18088 55108))
;;; Generated autoloads from international/utf-7.el
(autoload-coding-system 'utf-7 '(require 'utf-7))
@@ -28939,23 +29237,23 @@ The buffer in question is current when this function is called.
;;;### (autoloads (uudecode-decode-region uudecode-decode-region-internal
;;;;;; uudecode-decode-region-external) "uudecode" "gnus/uudecode.el"
-;;;;;; (17855 50203))
+;;;;;; (18212 46007))
;;; Generated autoloads from gnus/uudecode.el
-(autoload (quote uudecode-decode-region-external) "uudecode" "\
+(autoload 'uudecode-decode-region-external "uudecode" "\
Uudecode region between START and END using external program.
If FILE-NAME is non-nil, save the result to FILE-NAME. The program
used is specified by `uudecode-decoder-program'.
\(fn START END &optional FILE-NAME)" t nil)
-(autoload (quote uudecode-decode-region-internal) "uudecode" "\
+(autoload 'uudecode-decode-region-internal "uudecode" "\
Uudecode region between START and END without using an external program.
If FILE-NAME is non-nil, save the result to FILE-NAME.
\(fn START END &optional FILE-NAME)" t nil)
-(autoload (quote uudecode-decode-region) "uudecode" "\
+(autoload 'uudecode-decode-region "uudecode" "\
Uudecode region between START and END.
If FILE-NAME is non-nil, save the result to FILE-NAME.
@@ -28963,53 +29261,44 @@ If FILE-NAME is non-nil, save the result to FILE-NAME.
;;;***
-;;;### (autoloads (vc-annotate vc-update-change-log vc-rename-file
-;;;;;; vc-transfer-file vc-switch-backend vc-cancel-version vc-update
-;;;;;; vc-revert-buffer vc-print-log vc-retrieve-snapshot vc-create-snapshot
-;;;;;; vc-directory vc-merge vc-insert-headers vc-version-other-window
-;;;;;; vc-diff vc-register vc-next-action vc-do-command edit-vc-file
-;;;;;; with-vc-file vc-branch-part vc-trunk-p vc-before-checkin-hook
-;;;;;; vc-checkin-hook vc-checkout-hook) "vc" "vc.el" (17992 30877))
+;;;### (autoloads (vc-annotate vc-branch-part vc-trunk-p vc-update-change-log
+;;;;;; vc-rename-file vc-transfer-file vc-switch-backend vc-update
+;;;;;; vc-rollback vc-revert vc-print-log vc-retrieve-snapshot vc-create-snapshot
+;;;;;; vc-directory vc-merge vc-insert-headers vc-revision-other-window
+;;;;;; vc-diff vc-version-diff vc-register vc-next-action vc-do-command
+;;;;;; edit-vc-file with-vc-file vc-before-checkin-hook vc-checkin-hook
+;;;;;; vc-checkout-hook) "vc" "vc.el" (18214 4763))
;;; Generated autoloads from vc.el
(defvar vc-checkout-hook nil "\
Normal hook (list of functions) run after checking out a file.
See `run-hooks'.")
-(custom-autoload (quote vc-checkout-hook) "vc" t)
+(custom-autoload 'vc-checkout-hook "vc" t)
(defvar vc-checkin-hook nil "\
-Normal hook (list of functions) run after a checkin is done.
+Normal hook (list of functions) run after commit or file checkin.
See also `log-edit-done-hook'.")
-(custom-autoload (quote vc-checkin-hook) "vc" t)
+(custom-autoload 'vc-checkin-hook "vc" t)
(defvar vc-before-checkin-hook nil "\
-Normal hook (list of functions) run before a file is checked in.
+Normal hook (list of functions) run before a commit or a file checkin.
See `run-hooks'.")
-(custom-autoload (quote vc-before-checkin-hook) "vc" t)
-
-(autoload (quote vc-trunk-p) "vc" "\
-Return t if REV is a revision on the trunk.
-
-\(fn REV)" nil nil)
-
-(autoload (quote vc-branch-part) "vc" "\
-Return the branch part of a revision number REV.
-
-\(fn REV)" nil nil)
+(custom-autoload 'vc-before-checkin-hook "vc" t)
-(autoload (quote with-vc-file) "vc" "\
+(autoload 'with-vc-file "vc" "\
Check out a writable copy of FILE if necessary, then execute BODY.
Check in FILE with COMMENT (a string) after BODY has been executed.
FILE is passed through `expand-file-name'; BODY executed within
-`save-excursion'. If FILE is not under version control, or locked by
+`save-excursion'. If FILE is not under version control, or you are
+using a locking version-control system and the file is locked by
somebody else, signal error.
\(fn FILE COMMENT &rest BODY)" nil (quote macro))
-(autoload (quote edit-vc-file) "vc" "\
+(autoload 'edit-vc-file "vc" "\
Edit FILE under version control, executing body.
Checkin with COMMENT after executing BODY.
This macro uses `with-vc-file', passing args to it.
@@ -29017,7 +29306,7 @@ However, before executing BODY, find FILE, and after BODY, save buffer.
\(fn FILE COMMENT &rest BODY)" nil (quote macro))
-(autoload (quote vc-do-command) "vc" "\
+(autoload 'vc-do-command "vc" "\
Execute a VC command, notifying user and checking for errors.
Output from COMMAND goes to BUFFER, or *vc* if BUFFER is nil or the
current buffer if BUFFER is t. If the destination buffer is not
@@ -29025,48 +29314,38 @@ already current, set it up properly and erase it. The command is
considered successful if its exit status does not exceed OKSTATUS (if
OKSTATUS is nil, that means to ignore error status, if it is `async', that
means not to wait for termination of the subprocess; if it is t it means to
-ignore all execution errors). FILE is the
-name of the working file (may also be nil, to execute commands that
-don't expect a file name). If an optional list of FLAGS is present,
+ignore all execution errors). FILE-OR-LIST is the name of a working file;
+it may be a list of files or be nil (to execute commands that don't expect
+a file name or set of files). If an optional list of FLAGS is present,
that is inserted into the command line before the filename.
-\(fn BUFFER OKSTATUS COMMAND FILE &rest FLAGS)" nil nil)
-
-(autoload (quote vc-next-action) "vc" "\
-Do the next logical version control operation on the current file.
-
-If you call this from within a VC dired buffer with no files marked,
-it will operate on the file in the current line.
-
-If you call this from within a VC dired buffer, and one or more
-files are marked, it will accept a log message and then operate on
-each one. The log message will be used as a comment for any register
-or checkin operations, but ignored when doing checkouts. Attempted
-lock steals will raise an error.
+\(fn BUFFER OKSTATUS COMMAND FILE-OR-LIST &rest FLAGS)" nil nil)
-A prefix argument lets you specify the version number to use.
+(autoload 'vc-next-action "vc" "\
+Do the next logical version control operation on the current fileset.
+This requires that all files in the fileset be in the same state.
-For RCS and SCCS files:
- If the file is not already registered, this registers it for version
+For locking systems:
+ If every file is not already registered, this registers each for version
control.
- If the file is registered and not locked by anyone, this checks out
-a writable and locked file ready for editing.
- If the file is checked out and locked by the calling user, this
-first checks to see if the file has changed since checkout. If not,
-it performs a revert.
- If the file has been changed, this pops up a buffer for entry
+ If every file is registered and not locked by anyone, this checks out
+a writable and locked file of each ready for editing.
+ If every file is checked out and locked by the calling user, this
+first checks to see if each file has changed since checkout. If not,
+it performs a revert on that file.
+ If every file has been changed, this pops up a buffer for entry
of a log message; when the message has been entered, it checks in the
resulting changes along with the log message as change commentary. If
the variable `vc-keep-workfiles' is non-nil (which is its default), a
-read-only copy of the changed file is left in place afterwards.
- If the file is registered and locked by someone else, you are given
-the option to steal the lock.
-
-For CVS files:
- If the file is not already registered, this registers it for version
-control. This does a \"cvs add\", but no \"cvs commit\".
- If the file is added but not committed, it is committed.
- If your working file is changed, but the repository file is
+read-only copy of each changed file is left in place afterwards.
+ If the affected file is registered and locked by someone else, you are
+given the option to steal the lock(s).
+
+For merging systems:
+ If every file is not already registered, this registers each one for version
+control. This does an add, but not a commit.
+ If every file is added but not committed, each one is committed.
+ If every working file is changed, but the corresponding repository file is
unchanged, this pops up a buffer for entry of a log message; when the
message has been entered, it checks in the resulting changes along
with the logmessage as change commentary. A writable file is retained.
@@ -29075,9 +29354,9 @@ merge in the changes into your working copy.
\(fn VERBOSE)" t nil)
-(autoload (quote vc-register) "vc" "\
+(autoload 'vc-register "vc" "\
Register the current file into a version control system.
-With prefix argument SET-VERSION, allow user to specify initial version
+With prefix argument SET-REVISION, allow user to specify initial revision
level. If COMMENT is present, use that as an initial comment.
The version control system to use is found by cycling through the list
@@ -29087,47 +29366,56 @@ directory are already registered under that backend) will be used to
register the file. If no backend declares itself responsible, the
first backend that could register the file is used.
-\(fn &optional SET-VERSION COMMENT)" t nil)
+\(fn &optional SET-REVISION COMMENT)" t nil)
-(autoload (quote vc-diff) "vc" "\
-Display diffs between file versions.
-Normally this compares the current file and buffer with the most
-recent checked in version of that file. This uses no arguments. With
-a prefix argument HISTORIC, it reads the file name to use and two
-version designators specifying which versions to compare. The
-optional argument NOT-URGENT non-nil means it is ok to say no to
+(autoload 'vc-version-diff "vc" "\
+Report diffs between revisions of the fileset in the repository history.
+
+\(fn FILES REV1 REV2)" t nil)
+
+(autoload 'vc-diff "vc" "\
+Display diffs between file revisions.
+Normally this compares the currently selected fileset with their
+working revisions. With a prefix argument HISTORIC, it reads two revision
+designators specifying which revisions to compare.
+
+If no current fileset is available (that is, we are not in
+VC-Dired mode and the visited file of the current buffer is not
+under version control) and we're in a Dired buffer, use
+the current directory.
+The optional argument NOT-URGENT non-nil means it is ok to say no to
saving the buffer.
\(fn HISTORIC &optional NOT-URGENT)" t nil)
-(autoload (quote vc-version-other-window) "vc" "\
-Visit version REV of the current file in another window.
-If the current file is named `F', the version is named `F.~REV~'.
+(autoload 'vc-revision-other-window "vc" "\
+Visit revision REV of the current file in another window.
+If the current file is named `F', the revision is named `F.~REV~'.
If `F.~REV~' already exists, use it instead of checking it out again.
\(fn REV)" t nil)
-(autoload (quote vc-insert-headers) "vc" "\
+(autoload 'vc-insert-headers "vc" "\
Insert headers into a file for use with a version control system.
Headers desired are inserted at point, and are pulled from
the variable `vc-BACKEND-header'.
\(fn)" t nil)
-(autoload (quote vc-merge) "vc" "\
-Merge changes between two versions into the current buffer's file.
-This asks for two versions to merge from in the minibuffer. If the
-first version is a branch number, then merge all changes from that
-branch. If the first version is empty, merge news, i.e. recent changes
+(autoload 'vc-merge "vc" "\
+Merge changes between two revisions into the current buffer's file.
+This asks for two revisions to merge from in the minibuffer. If the
+first revision is a branch number, then merge all changes from that
+branch. If the first revision is empty, merge news, i.e. recent changes
from the current branch.
See Info node `Merging'.
\(fn)" t nil)
-(defalias (quote vc-resolve-conflicts) (quote smerge-ediff))
+(defalias 'vc-resolve-conflicts 'smerge-ediff)
-(autoload (quote vc-directory) "vc" "\
+(autoload 'vc-directory "vc" "\
Create a buffer in VC Dired Mode for directory DIR.
See Info node `VC Dired Mode'.
@@ -29137,54 +29425,56 @@ With prefix arg READ-SWITCHES, specify a value to override
\(fn DIR READ-SWITCHES)" t nil)
-(autoload (quote vc-create-snapshot) "vc" "\
+(autoload 'vc-create-snapshot "vc" "\
Descending recursively from DIR, make a snapshot called NAME.
-For each registered file, the version level of its latest version
-becomes part of the named configuration. If the prefix argument
-BRANCHP is given, the snapshot is made as a new branch and the files
-are checked out in that new branch.
+For each registered file, the working revision becomes part of
+the named configuration. If the prefix argument BRANCHP is
+given, the snapshot is made as a new branch and the files are
+checked out in that new branch.
\(fn DIR NAME BRANCHP)" t nil)
-(autoload (quote vc-retrieve-snapshot) "vc" "\
+(autoload 'vc-retrieve-snapshot "vc" "\
Descending recursively from DIR, retrieve the snapshot called NAME.
-If NAME is empty, it refers to the latest versions.
+If NAME is empty, it refers to the latest revisions.
If locking is used for the files in DIR, then there must not be any
locked files at or below DIR (but if NAME is empty, locked files are
allowed and simply skipped).
\(fn DIR NAME)" t nil)
-(autoload (quote vc-print-log) "vc" "\
-List the change log of the current buffer in a window.
-If FOCUS-REV is non-nil, leave the point at that revision.
+(autoload 'vc-print-log "vc" "\
+List the change log of the current fileset in a window.
+If WORKING-REVISION is non-nil, leave the point at that revision.
-\(fn &optional FOCUS-REV)" t nil)
+\(fn &optional WORKING-REVISION)" t nil)
-(autoload (quote vc-revert-buffer) "vc" "\
-Revert the current buffer's file to the version it was based on.
+(autoload 'vc-revert "vc" "\
+Revert working copies of the selected fileset to their repository contents.
This asks for confirmation if the buffer contents are not identical
-to that version. This function does not automatically pick up newer
-changes found in the master file; use \\[universal-argument] \\[vc-next-action] to do so.
+to the working revision (except for keyword expansion).
\(fn)" t nil)
-(autoload (quote vc-update) "vc" "\
-Update the current buffer's file to the latest version on its branch.
-If the file contains no changes, and is not locked, then this simply replaces
-the working file with the latest version on its branch. If the file contains
-changes, and the backend supports merging news, then any recent changes from
-the current branch are merged into the working file.
+(autoload 'vc-rollback "vc" "\
+Roll back (remove) the most recent changeset committed to the repository.
+This may be either a file-level or a repository-level operation,
+depending on the underlying version-control system.
\(fn)" t nil)
-(autoload (quote vc-cancel-version) "vc" "\
-Get rid of most recently checked in version of this file.
-A prefix argument NOREVERT means do not revert the buffer afterwards.
+(define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
-\(fn NOREVERT)" t nil)
+(autoload 'vc-update "vc" "\
+Update the current fileset's files to their tip revisions.
+For each one that contains no changes, and is not locked, then this simply
+replaces the work file with the latest revision on its branch. If the file
+contains changes, and the backend supports merging news, then any recent
+changes from the current branch are merged into the working file.
-(autoload (quote vc-switch-backend) "vc" "\
+\(fn)" t nil)
+
+(autoload 'vc-switch-backend "vc" "\
Make BACKEND the current version control system for FILE.
FILE must already be registered in BACKEND. The change is not
permanent, only for the current session. This function only changes
@@ -29194,11 +29484,11 @@ To get a prompt, use a prefix argument.
\(fn FILE BACKEND)" t nil)
-(autoload (quote vc-transfer-file) "vc" "\
+(autoload 'vc-transfer-file "vc" "\
Transfer FILE to another version control system NEW-BACKEND.
If NEW-BACKEND has a higher precedence than FILE's current backend
\(i.e. it comes earlier in `vc-handled-backends'), then register FILE in
-NEW-BACKEND, using the version number from the current backend as the
+NEW-BACKEND, using the revision number from the current backend as the
base level. If NEW-BACKEND has a lower precedence than the current
backend, then commit all changes that were made under the current
backend to NEW-BACKEND, and unregister FILE from the current backend.
@@ -29206,12 +29496,12 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
\(fn FILE NEW-BACKEND)" nil nil)
-(autoload (quote vc-rename-file) "vc" "\
+(autoload 'vc-rename-file "vc" "\
Rename file OLD to NEW, and rename its master file likewise.
\(fn OLD NEW)" t nil)
-(autoload (quote vc-update-change-log) "vc" "\
+(autoload 'vc-update-change-log "vc" "\
Find change log file and add entries from recent version control logs.
Normally, find log entries for all registered files in the default
directory.
@@ -29227,7 +29517,17 @@ log entries should be gathered.
\(fn &rest ARGS)" t nil)
-(autoload (quote vc-annotate) "vc" "\
+(autoload 'vc-trunk-p "vc" "\
+Return t if REV is a revision on the trunk.
+
+\(fn REV)" nil nil)
+
+(autoload 'vc-branch-part "vc" "\
+Return the branch part of a revision number REV.
+
+\(fn REV)" nil nil)
+
+(autoload 'vc-annotate "vc" "\
Display the edit history of the current file using colors.
This command creates a buffer that shows, for each line of the current
@@ -29238,8 +29538,8 @@ default, the time scale stretches back one year into the past;
everything that is older than that is shown in blue.
With a prefix argument, this command asks two questions in the
-minibuffer. First, you may enter a version number; then the buffer
-displays and annotates that version instead of the current version
+minibuffer. First, you may enter a revision number; then the buffer
+displays and annotates that revision instead of the working revision
\(type RET in the minibuffer to leave that default unchanged). Then,
you are prompted for the time span in days which the color range
should cover. For example, a time span of 20 days means that changes
@@ -29249,15 +29549,15 @@ age, and everything that is older than that is shown in blue.
Customization variables:
`vc-annotate-menu-elements' customizes the menu elements of the
-mode-specific menu. `vc-annotate-color-map' and
-`vc-annotate-very-old-color' defines the mapping of time to
-colors. `vc-annotate-background' specifies the background color.
+mode-specific menu. `vc-annotate-color-map' and
+`vc-annotate-very-old-color' define the mapping of time to colors.
+`vc-annotate-background' specifies the background color.
\(fn FILE REV &optional DISPLAY-MODE BUF)" t nil)
;;;***
-;;;### (autoloads nil "vc-arch" "vc-arch.el" (17930 34221))
+;;;### (autoloads nil "vc-arch" "vc-arch.el" (18201 33325))
;;; Generated autoloads from vc-arch.el
(defun vc-arch-registered (file)
(if (vc-find-root file "{arch}/=tagging-method")
@@ -29267,7 +29567,22 @@ colors. `vc-annotate-background' specifies the background color.
;;;***
-;;;### (autoloads nil "vc-cvs" "vc-cvs.el" (17842 58278))
+;;;### (autoloads nil "vc-bzr" "vc-bzr.el" (18201 33325))
+;;; Generated autoloads from vc-bzr.el
+
+(defconst vc-bzr-admin-dirname ".bzr" "\
+Name of the directory containing Bzr repository status files.")
+
+(defconst vc-bzr-admin-checkout-format-file (concat vc-bzr-admin-dirname "/checkout/format"))
+ (defun vc-bzr-registered (file)
+ (if (vc-find-root file vc-bzr-admin-checkout-format-file)
+ (progn
+ (load "vc-bzr")
+ (vc-bzr-registered file))))
+
+;;;***
+
+;;;### (autoloads nil "vc-cvs" "vc-cvs.el" (18201 33326))
;;; Generated autoloads from vc-cvs.el
(defun vc-cvs-registered (f)
(when (file-readable-p (expand-file-name
@@ -29277,7 +29592,29 @@ colors. `vc-annotate-background' specifies the background color.
;;;***
-;;;### (autoloads nil "vc-mcvs" "vc-mcvs.el" (17842 58278))
+;;;### (autoloads nil "vc-git" "vc-git.el" (18201 33364))
+;;; Generated autoloads from vc-git.el
+ (defun vc-git-registered (file)
+ "Return non-nil if FILE is registered with git."
+ (if (vc-find-root file ".git") ; short cut
+ (progn
+ (load "vc-git")
+ (vc-git-registered file))))
+
+;;;***
+
+;;;### (autoloads nil "vc-hg" "vc-hg.el" (18203 37787))
+;;; Generated autoloads from vc-hg.el
+ (defun vc-hg-registered (file)
+ "Return non-nil if FILE is registered with hg."
+ (if (vc-find-root file ".hg") ; short cut
+ (progn
+ (load "vc-hg")
+ (vc-hg-registered file))))
+
+;;;***
+
+;;;### (autoloads nil "vc-mcvs" "vc-mcvs.el" (18201 33326))
;;; Generated autoloads from vc-mcvs.el
(defun vc-mcvs-registered (file)
(if (vc-find-root file "MCVS/CVS")
@@ -29287,28 +29624,42 @@ colors. `vc-annotate-background' specifies the background color.
;;;***
+;;;### (autoloads nil "vc-mtn" "vc-mtn.el" (18202 3996))
+;;; Generated autoloads from vc-mtn.el
+
+(defconst vc-mtn-admin-dir "_MTN")
+
+(defconst vc-mtn-admin-format (concat vc-mtn-admin-dir "/format"))
+ (defun vc-mtn-registered (file)
+ (if (vc-find-root file vc-mtn-admin-format)
+ (progn
+ (load "vc-mtn")
+ (vc-mtn-registered file))))
+
+;;;***
+
;;;### (autoloads (vc-rcs-master-templates) "vc-rcs" "vc-rcs.el"
-;;;;;; (17925 15266))
+;;;;;; (18190 46608))
;;; Generated autoloads from vc-rcs.el
-(defvar vc-rcs-master-templates (quote ("%sRCS/%s,v" "%s%s,v" "%sRCS/%s")) "\
+(defvar vc-rcs-master-templates '("%sRCS/%s,v" "%s%s,v" "%sRCS/%s") "\
*Where to look for RCS master files.
For a description of possible values, see `vc-check-master-templates'.")
-(custom-autoload (quote vc-rcs-master-templates) "vc-rcs" t)
+(custom-autoload 'vc-rcs-master-templates "vc-rcs" t)
(defun vc-rcs-registered (f) (vc-default-registered 'RCS f))
;;;***
;;;### (autoloads (vc-sccs-master-templates) "vc-sccs" "vc-sccs.el"
-;;;;;; (17842 58278))
+;;;;;; (18190 46608))
;;; Generated autoloads from vc-sccs.el
-(defvar vc-sccs-master-templates (quote ("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir)) "\
+(defvar vc-sccs-master-templates '("%sSCCS/s.%s" "%ss.%s" vc-sccs-search-project-dir) "\
*Where to look for SCCS master files.
For a description of possible values, see `vc-check-master-templates'.")
-(custom-autoload (quote vc-sccs-master-templates) "vc-sccs" t)
+(custom-autoload 'vc-sccs-master-templates "vc-sccs" t)
(defun vc-sccs-registered(f) (vc-default-registered 'SCCS f))
(defun vc-sccs-search-project-dir (dirname basename) "\
@@ -29318,7 +29669,7 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir)
;;;***
-;;;### (autoloads nil "vc-svn" "vc-svn.el" (17881 64914))
+;;;### (autoloads nil "vc-svn" "vc-svn.el" (18201 33326))
;;; Generated autoloads from vc-svn.el
(defun vc-svn-registered (f)
(let ((admin-dir (cond ((and (eq system-type 'windows-nt)
@@ -29331,15 +29682,73 @@ find any project directory." (let ((project-dir (getenv "PROJECTDIR")) dirs dir)
(load "vc-svn")
(vc-svn-registered f))))
-(add-to-list (quote completion-ignored-extensions) ".svn/")
+(add-to-list 'completion-ignored-extensions ".svn/")
+
+;;;***
+
+;;;### (autoloads (vera-mode) "vera-mode" "progmodes/vera-mode.el"
+;;;;;; (18203 37789))
+;;; Generated autoloads from progmodes/vera-mode.el
+ (add-to-list 'auto-mode-alist '("\\.vr[hi]?\\'" . vera-mode))
+
+(autoload 'vera-mode "vera-mode" "\
+Major mode for editing Vera code.
+
+Usage:
+------
+
+ INDENTATION: Typing `TAB' at the beginning of a line indents the line.
+ The amount of indentation is specified by option `vera-basic-offset'.
+ Indentation can be done for an entire region (`M-C-\\') or buffer (menu).
+ `TAB' always indents the line if option `vera-intelligent-tab' is nil.
+
+ WORD/COMMAND COMPLETION: Typing `TAB' after a (not completed) word looks
+ for a word in the buffer or a Vera keyword that starts alike, inserts it
+ and adjusts case. Re-typing `TAB' toggles through alternative word
+ completions.
+
+ Typing `TAB' after a non-word character inserts a tabulator stop (if not
+ at the beginning of a line). `M-TAB' always inserts a tabulator stop.
+
+ COMMENTS: `C-c C-c' comments out a region if not commented out, and
+ uncomments a region if already commented out.
+
+ HIGHLIGHTING (fontification): Vera keywords, predefined types and
+ constants, function names, declaration names, directives, as well as
+ comments and strings are highlighted using different colors.
+
+ VERA VERSION: OpenVera 1.4 and Vera version 6.2.8.
+
+
+Maintenance:
+------------
+
+To submit a bug report, use the corresponding menu entry within Vera Mode.
+Add a description of the problem and include a reproducible test case.
+
+Feel free to send questions and enhancement requests to <reto@gnu.org>.
+
+Official distribution is at
+<http://www.iis.ee.ethz.ch/~zimmi/emacs/vera-mode.html>.
+
+
+ The Vera Mode Maintainer
+ Reto Zimmermann <reto@gnu.org>
+
+Key bindings:
+-------------
+
+\\{vera-mode-map}
+
+\(fn)" t nil)
;;;***
;;;### (autoloads (vhdl-mode) "vhdl-mode" "progmodes/vhdl-mode.el"
-;;;;;; (17962 27361))
+;;;;;; (18203 37789))
;;; Generated autoloads from progmodes/vhdl-mode.el
-(autoload (quote vhdl-mode) "vhdl-mode" "\
+(autoload 'vhdl-mode "vhdl-mode" "\
Major mode for editing VHDL code.
Usage:
@@ -29877,10 +30286,10 @@ Key bindings:
;;;***
-;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (17788 40208))
+;;;### (autoloads (vi-mode) "vi" "emulation/vi.el" (18201 33326))
;;; Generated autoloads from emulation/vi.el
-(autoload (quote vi-mode) "vi" "\
+(autoload 'vi-mode "vi" "\
Major mode that acts like the `vi' editor.
The purpose of this mode is to provide you the combined power of vi (namely,
the \"cross product\" effect of commands and repeat last changes) and Emacs.
@@ -29932,44 +30341,44 @@ Syntax table and abbrevs while in vi mode remain as they were in Emacs.
;;;### (autoloads (viqr-pre-write-conversion viqr-post-read-conversion
;;;;;; viet-encode-viqr-buffer viet-encode-viqr-region viet-decode-viqr-buffer
;;;;;; viet-decode-viqr-region viet-encode-viscii-char) "viet-util"
-;;;;;; "language/viet-util.el" (17842 58278))
+;;;;;; "language/viet-util.el" (18088 55109))
;;; Generated autoloads from language/viet-util.el
-(autoload (quote viet-encode-viscii-char) "viet-util" "\
+(autoload 'viet-encode-viscii-char "viet-util" "\
Return VISCII character code of CHAR if appropriate.
\(fn CHAR)" nil nil)
-(autoload (quote viet-decode-viqr-region) "viet-util" "\
+(autoload 'viet-decode-viqr-region "viet-util" "\
Convert `VIQR' mnemonics of the current region to Vietnamese characters.
When called from a program, expects two arguments,
positions (integers or markers) specifying the stretch of the region.
\(fn FROM TO)" t nil)
-(autoload (quote viet-decode-viqr-buffer) "viet-util" "\
+(autoload 'viet-decode-viqr-buffer "viet-util" "\
Convert `VIQR' mnemonics of the current buffer to Vietnamese characters.
\(fn)" t nil)
-(autoload (quote viet-encode-viqr-region) "viet-util" "\
+(autoload 'viet-encode-viqr-region "viet-util" "\
Convert Vietnamese characters of the current region to `VIQR' mnemonics.
When called from a program, expects two arguments,
positions (integers or markers) specifying the stretch of the region.
\(fn FROM TO)" t nil)
-(autoload (quote viet-encode-viqr-buffer) "viet-util" "\
+(autoload 'viet-encode-viqr-buffer "viet-util" "\
Convert Vietnamese characters of the current buffer to `VIQR' mnemonics.
\(fn)" t nil)
-(autoload (quote viqr-post-read-conversion) "viet-util" "\
+(autoload 'viqr-post-read-conversion "viet-util" "\
Not documented
\(fn LEN)" nil nil)
-(autoload (quote viqr-pre-write-conversion) "viet-util" "\
+(autoload 'viqr-pre-write-conversion "viet-util" "\
Not documented
\(fn FROM TO)" nil nil)
@@ -29978,8 +30387,8 @@ Not documented
;;;### (autoloads (View-exit-and-edit view-mode-enter view-mode view-buffer-other-frame
;;;;;; view-buffer-other-window view-buffer view-file-other-frame
-;;;;;; view-file-other-window view-file) "view" "view.el" (18006
-;;;;;; 55796))
+;;;;;; view-file-other-window view-file) "view" "view.el" (18169
+;;;;;; 11932))
;;; Generated autoloads from view.el
(defvar view-mode nil "\
@@ -29987,9 +30396,9 @@ Non-nil if View mode is enabled.
Don't change this variable directly, you must change it by one of the
functions that enable or disable view mode.")
-(make-variable-buffer-local (quote view-mode))
+(make-variable-buffer-local 'view-mode)
-(autoload (quote view-file) "view" "\
+(autoload 'view-file "view" "\
View FILE in View mode, returning to previous buffer when done.
Emacs commands editing the buffer contents are not available; instead,
a special set of commands (mostly letters and punctuation)
@@ -30001,7 +30410,7 @@ This command runs the normal hook `view-mode-hook'.
\(fn FILE)" t nil)
-(autoload (quote view-file-other-window) "view" "\
+(autoload 'view-file-other-window "view" "\
View FILE in View mode in another window.
Return that window to its previous buffer when done.
Emacs commands editing the buffer contents are not available; instead,
@@ -30014,7 +30423,7 @@ This command runs the normal hook `view-mode-hook'.
\(fn FILE)" t nil)
-(autoload (quote view-file-other-frame) "view" "\
+(autoload 'view-file-other-frame "view" "\
View FILE in View mode in another frame.
Maybe delete other frame and/or return to previous buffer when done.
Emacs commands editing the buffer contents are not available; instead,
@@ -30027,7 +30436,7 @@ This command runs the normal hook `view-mode-hook'.
\(fn FILE)" t nil)
-(autoload (quote view-buffer) "view" "\
+(autoload 'view-buffer "view" "\
View BUFFER in View mode, returning to previous buffer when done.
Emacs commands editing the buffer contents are not available; instead,
a special set of commands (mostly letters and punctuation)
@@ -30043,7 +30452,7 @@ Use this argument instead of explicitly setting `view-exit-action'.
\(fn BUFFER &optional EXIT-ACTION)" t nil)
-(autoload (quote view-buffer-other-window) "view" "\
+(autoload 'view-buffer-other-window "view" "\
View BUFFER in View mode in another window.
Return to previous buffer when done, unless optional NOT-RETURN is non-nil.
Emacs commands editing the buffer contents are not available; instead,
@@ -30060,7 +30469,7 @@ Use this argument instead of explicitly setting `view-exit-action'.
\(fn BUFFER &optional NOT-RETURN EXIT-ACTION)" t nil)
-(autoload (quote view-buffer-other-frame) "view" "\
+(autoload 'view-buffer-other-frame "view" "\
View BUFFER in View mode in another frame.
Return to previous buffer when done, unless optional NOT-RETURN is non-nil.
Emacs commands editing the buffer contents are not available; instead,
@@ -30077,9 +30486,10 @@ Use this argument instead of explicitly setting `view-exit-action'.
\(fn BUFFER &optional NOT-RETURN EXIT-ACTION)" t nil)
-(autoload (quote view-mode) "view" "\
+(autoload 'view-mode "view" "\
Toggle View mode, a minor mode for viewing text but not editing it.
-With ARG, turn View mode on iff ARG is positive.
+With prefix argument ARG, turn View mode on if ARG is positive, otherwise
+turn it off.
Emacs commands that do not change the buffer contents are available as usual.
Kill commands insert text in kill buffers but do not delete. Other commands
@@ -30156,7 +30566,7 @@ Entry to view-mode runs the normal hook `view-mode-hook'.
\(fn &optional ARG)" t nil)
-(autoload (quote view-mode-enter) "view" "\
+(autoload 'view-mode-enter "view" "\
Enter View mode and set up exit from view mode depending on optional arguments.
If RETURN-TO is non-nil it is added as an element to the buffer local alist
`view-return-to-alist'.
@@ -30181,23 +30591,23 @@ This function runs the normal hook `view-mode-hook'.
\(fn &optional RETURN-TO EXIT-ACTION)" nil nil)
-(autoload (quote View-exit-and-edit) "view" "\
+(autoload 'View-exit-and-edit "view" "\
Exit View mode and make the current buffer editable.
\(fn)" t nil)
;;;***
-;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (17842
-;;;;;; 54264))
+;;;### (autoloads (vip-mode vip-setup) "vip" "emulation/vip.el" (18088
+;;;;;; 55097))
;;; Generated autoloads from emulation/vip.el
-(autoload (quote vip-setup) "vip" "\
+(autoload 'vip-setup "vip" "\
Set up bindings for C-x 7 and C-z that are useful for VIP users.
\(fn)" nil nil)
-(autoload (quote vip-mode) "vip" "\
+(autoload 'vip-mode "vip" "\
Turn on VIP emulation of VI.
\(fn)" t nil)
@@ -30205,16 +30615,16 @@ Turn on VIP emulation of VI.
;;;***
;;;### (autoloads (viper-mode toggle-viper-mode) "viper" "emulation/viper.el"
-;;;;;; (17921 23052))
+;;;;;; (18213 13953))
;;; Generated autoloads from emulation/viper.el
-(autoload (quote toggle-viper-mode) "viper" "\
+(autoload 'toggle-viper-mode "viper" "\
Toggle Viper on/off.
If Viper is enabled, turn it off. Otherwise, turn it on.
\(fn)" t nil)
-(autoload (quote viper-mode) "viper" "\
+(autoload 'viper-mode "viper" "\
Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'.
\(fn)" t nil)
@@ -30222,7 +30632,7 @@ Turn on Viper emulation of Vi in Emacs. See Info node `(viper)Top'.
;;;***
;;;### (autoloads (warn lwarn display-warning) "warnings" "emacs-lisp/warnings.el"
-;;;;;; (17935 13348))
+;;;;;; (18088 55096))
;;; Generated autoloads from emacs-lisp/warnings.el
(defvar warning-prefix-function nil "\
@@ -30251,7 +30661,7 @@ Format for displaying the warning type in the warning message.
The result of formatting the type this way gets included in the
message under the control of the string in `warning-levels'.")
-(autoload (quote display-warning) "warnings" "\
+(autoload 'display-warning "warnings" "\
Display a warning message, MESSAGE.
TYPE is the warning type: either a custom group name (a symbol),
or a list of symbols whose first element is a custom group name.
@@ -30280,7 +30690,7 @@ See also `warning-series', `warning-prefix-function' and
\(fn TYPE MESSAGE &optional LEVEL BUFFER-NAME)" nil nil)
-(autoload (quote lwarn) "warnings" "\
+(autoload 'lwarn "warnings" "\
Display a warning message made from (format MESSAGE ARGS...).
Aside from generating the message with `format',
this is equivalent to `display-warning'.
@@ -30301,7 +30711,7 @@ LEVEL should be either :debug, :warning, :error, or :emergency
\(fn TYPE LEVEL MESSAGE &rest ARGS)" nil nil)
-(autoload (quote warn) "warnings" "\
+(autoload 'warn "warnings" "\
Display a warning message made from (format MESSAGE ARGS...).
Aside from generating the message with `format',
this is equivalent to `display-warning', using
@@ -30312,10 +30722,10 @@ this is equivalent to `display-warning', using
;;;***
;;;### (autoloads (wdired-change-to-wdired-mode) "wdired" "wdired.el"
-;;;;;; (17842 58278))
+;;;;;; (18214 4479))
;;; Generated autoloads from wdired.el
-(autoload (quote wdired-change-to-wdired-mode) "wdired" "\
+(autoload 'wdired-change-to-wdired-mode "wdired" "\
Put a dired buffer in a mode in which filenames are editable.
\\<wdired-mode-map>
This mode allows the user to change the names of the files, and after
@@ -30328,10 +30738,10 @@ See `wdired-mode'.
;;;***
-;;;### (autoloads (webjump) "webjump" "net/webjump.el" (17842 55218))
+;;;### (autoloads (webjump) "webjump" "net/webjump.el" (18088 55112))
;;; Generated autoloads from net/webjump.el
-(autoload (quote webjump) "webjump" "\
+(autoload 'webjump "webjump" "\
Jumps to a Web site from a programmable hotlist.
See the documentation for the `webjump-sites' variable for how to customize the
@@ -30345,12 +30755,12 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke
;;;***
;;;### (autoloads (which-function-mode) "which-func" "progmodes/which-func.el"
-;;;;;; (17842 56332))
+;;;;;; (18147 59474))
;;; Generated autoloads from progmodes/which-func.el
(put 'which-func-format 'risky-local-variable t)
(put 'which-func-current 'risky-local-variable t)
-(defalias (quote which-func-mode) (quote which-function-mode))
+(defalias 'which-func-mode 'which-function-mode)
(defvar which-function-mode nil "\
Non-nil if Which-Function mode is enabled.
@@ -30359,14 +30769,14 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `which-function-mode'.")
-(custom-autoload (quote which-function-mode) "which-func" nil)
+(custom-autoload 'which-function-mode "which-func" nil)
-(autoload (quote which-function-mode) "which-func" "\
+(autoload 'which-function-mode "which-func" "\
Toggle Which Function mode, globally.
When Which Function mode is enabled, the current function name is
continuously displayed in the mode line, in certain major modes.
-With prefix ARG, turn Which Function mode on iff arg is positive,
+With prefix ARG, turn Which Function mode on if arg is positive,
and off otherwise.
\(fn &optional ARG)" t nil)
@@ -30378,35 +30788,35 @@ and off otherwise.
;;;;;; whitespace-buffer whitespace-toggle-ateol-check whitespace-toggle-spacetab-check
;;;;;; whitespace-toggle-indent-check whitespace-toggle-trailing-check
;;;;;; whitespace-toggle-leading-check) "whitespace" "whitespace.el"
-;;;;;; (17925 15266))
+;;;;;; (18169 11932))
;;; Generated autoloads from whitespace.el
-(autoload (quote whitespace-toggle-leading-check) "whitespace" "\
+(autoload 'whitespace-toggle-leading-check "whitespace" "\
Toggle the check for leading space in the local buffer.
\(fn)" t nil)
-(autoload (quote whitespace-toggle-trailing-check) "whitespace" "\
+(autoload 'whitespace-toggle-trailing-check "whitespace" "\
Toggle the check for trailing space in the local buffer.
\(fn)" t nil)
-(autoload (quote whitespace-toggle-indent-check) "whitespace" "\
+(autoload 'whitespace-toggle-indent-check "whitespace" "\
Toggle the check for indentation space in the local buffer.
\(fn)" t nil)
-(autoload (quote whitespace-toggle-spacetab-check) "whitespace" "\
+(autoload 'whitespace-toggle-spacetab-check "whitespace" "\
Toggle the check for space-followed-by-TABs in the local buffer.
\(fn)" t nil)
-(autoload (quote whitespace-toggle-ateol-check) "whitespace" "\
+(autoload 'whitespace-toggle-ateol-check "whitespace" "\
Toggle the check for end-of-line space in the local buffer.
\(fn)" t nil)
-(autoload (quote whitespace-buffer) "whitespace" "\
+(autoload 'whitespace-buffer "whitespace" "\
Find five different types of white spaces in buffer.
These are:
1. Leading space (empty lines at the top of a file).
@@ -30422,12 +30832,12 @@ and:
\(fn &optional QUIET)" t nil)
-(autoload (quote whitespace-region) "whitespace" "\
+(autoload 'whitespace-region "whitespace" "\
Check the region for whitespace errors.
\(fn S E)" t nil)
-(autoload (quote whitespace-cleanup) "whitespace" "\
+(autoload 'whitespace-cleanup "whitespace" "\
Cleanup the five different kinds of whitespace problems.
It normally applies to the whole buffer, but in Transient Mark mode
when the mark is active it applies to the region.
@@ -30435,12 +30845,12 @@ See `whitespace-buffer' docstring for a summary of the problems.
\(fn)" t nil)
-(autoload (quote whitespace-cleanup-region) "whitespace" "\
+(autoload 'whitespace-cleanup-region "whitespace" "\
Whitespace cleanup on the region.
\(fn S E)" t nil)
-(defalias (quote global-whitespace-mode) (quote whitespace-global-mode))
+(defalias 'global-whitespace-mode 'whitespace-global-mode)
(defvar whitespace-global-mode nil "\
Non-nil if Whitespace-Global mode is enabled.
@@ -30449,18 +30859,18 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `whitespace-global-mode'.")
-(custom-autoload (quote whitespace-global-mode) "whitespace" nil)
+(custom-autoload 'whitespace-global-mode "whitespace" nil)
-(autoload (quote whitespace-global-mode) "whitespace" "\
+(autoload 'whitespace-global-mode "whitespace" "\
Toggle using Whitespace mode in new buffers.
-With ARG, turn the mode on iff ARG is positive.
+With ARG, turn the mode on if ARG is positive, otherwise turn it off.
When this mode is active, `whitespace-buffer' is added to
`find-file-hook' and `kill-buffer-hook'.
\(fn &optional ARG)" t nil)
-(autoload (quote whitespace-write-file-hook) "whitespace" "\
+(autoload 'whitespace-write-file-hook "whitespace" "\
Hook function to be called on the buffer when whitespace check is enabled.
This is meant to be added buffer-locally to `write-file-functions'.
@@ -30469,25 +30879,25 @@ This is meant to be added buffer-locally to `write-file-functions'.
;;;***
;;;### (autoloads (widget-minor-mode widget-browse-other-window widget-browse
-;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (17842 58278))
+;;;;;; widget-browse-at) "wid-browse" "wid-browse.el" (18149 22003))
;;; Generated autoloads from wid-browse.el
-(autoload (quote widget-browse-at) "wid-browse" "\
+(autoload 'widget-browse-at "wid-browse" "\
Browse the widget under point.
\(fn POS)" t nil)
-(autoload (quote widget-browse) "wid-browse" "\
+(autoload 'widget-browse "wid-browse" "\
Create a widget browser for WIDGET.
\(fn WIDGET)" t nil)
-(autoload (quote widget-browse-other-window) "wid-browse" "\
+(autoload 'widget-browse-other-window "wid-browse" "\
Show widget browser for WIDGET in other window.
\(fn &optional WIDGET)" t nil)
-(autoload (quote widget-minor-mode) "wid-browse" "\
+(autoload 'widget-minor-mode "wid-browse" "\
Togle minor mode for traversing widgets.
With arg, turn widget mode on if and only if arg is positive.
@@ -30496,44 +30906,44 @@ With arg, turn widget mode on if and only if arg is positive.
;;;***
;;;### (autoloads (widget-setup widget-insert widget-delete widget-create
-;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (17952
-;;;;;; 11093))
+;;;;;; widget-prompt-value widgetp) "wid-edit" "wid-edit.el" (18187
+;;;;;; 36840))
;;; Generated autoloads from wid-edit.el
-(autoload (quote widgetp) "wid-edit" "\
-Return non-nil iff WIDGET is a widget.
+(autoload 'widgetp "wid-edit" "\
+Return non-nil if WIDGET is a widget.
\(fn WIDGET)" nil nil)
-(autoload (quote widget-prompt-value) "wid-edit" "\
+(autoload 'widget-prompt-value "wid-edit" "\
Prompt for a value matching WIDGET, using PROMPT.
The current value is assumed to be VALUE, unless UNBOUND is non-nil.
\(fn WIDGET PROMPT &optional VALUE UNBOUND)" nil nil)
-(autoload (quote widget-create) "wid-edit" "\
+(autoload 'widget-create "wid-edit" "\
Create widget of TYPE.
The optional ARGS are additional keyword arguments.
\(fn TYPE &rest ARGS)" nil nil)
-(autoload (quote widget-delete) "wid-edit" "\
+(autoload 'widget-delete "wid-edit" "\
Delete WIDGET.
\(fn WIDGET)" nil nil)
-(autoload (quote widget-insert) "wid-edit" "\
+(autoload 'widget-insert "wid-edit" "\
Call `insert' with ARGS even if surrounding text is read only.
\(fn &rest ARGS)" nil nil)
-(defalias (quote advertised-widget-backward) (quote widget-backward))
+(defalias 'advertised-widget-backward 'widget-backward)
-(defvar widget-keymap (let ((map (make-sparse-keymap))) (define-key map " " (quote widget-forward)) (define-key map " " (quote widget-backward)) (define-key map [(shift tab)] (quote advertised-widget-backward)) (define-key map [backtab] (quote widget-backward)) (define-key map [down-mouse-2] (quote widget-button-click)) (define-key map [down-mouse-1] (quote widget-button-click)) (define-key map " " (quote widget-button-press)) map) "\
+(defvar widget-keymap (let ((map (make-sparse-keymap))) (define-key map " " 'widget-forward) (define-key map " " 'widget-backward) (define-key map [(shift tab)] 'advertised-widget-backward) (define-key map [backtab] 'widget-backward) (define-key map [down-mouse-2] 'widget-button-click) (define-key map [down-mouse-1] 'widget-button-click) (define-key map " " 'widget-button-press) map) "\
Keymap containing useful binding for buffers containing widgets.
Recommended as a parent keymap for modes using widgets.")
-(autoload (quote widget-setup) "wid-edit" "\
+(autoload 'widget-setup "wid-edit" "\
Setup current buffer so editing string widgets works.
\(fn)" nil nil)
@@ -30541,11 +30951,11 @@ Setup current buffer so editing string widgets works.
;;;***
;;;### (autoloads (windmove-default-keybindings windmove-down windmove-right
-;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (17842
-;;;;;; 58278))
+;;;;;; windmove-up windmove-left) "windmove" "windmove.el" (18088
+;;;;;; 55091))
;;; Generated autoloads from windmove.el
-(autoload (quote windmove-left) "windmove" "\
+(autoload 'windmove-left "windmove" "\
Select the window to the left of the current one.
With no prefix argument, or with prefix argument equal to zero,
\"left\" is relative to the position of point in the window; otherwise
@@ -30555,7 +30965,7 @@ If no window is at the desired location, an error is signaled.
\(fn &optional ARG)" t nil)
-(autoload (quote windmove-up) "windmove" "\
+(autoload 'windmove-up "windmove" "\
Select the window above the current one.
With no prefix argument, or with prefix argument equal to zero, \"up\"
is relative to the position of point in the window; otherwise it is
@@ -30565,7 +30975,7 @@ If no window is at the desired location, an error is signaled.
\(fn &optional ARG)" t nil)
-(autoload (quote windmove-right) "windmove" "\
+(autoload 'windmove-right "windmove" "\
Select the window to the right of the current one.
With no prefix argument, or with prefix argument equal to zero,
\"right\" is relative to the position of point in the window;
@@ -30575,7 +30985,7 @@ If no window is at the desired location, an error is signaled.
\(fn &optional ARG)" t nil)
-(autoload (quote windmove-down) "windmove" "\
+(autoload 'windmove-down "windmove" "\
Select the window below the current one.
With no prefix argument, or with prefix argument equal to zero,
\"down\" is relative to the position of point in the window; otherwise
@@ -30585,7 +30995,7 @@ If no window is at the desired location, an error is signaled.
\(fn &optional ARG)" t nil)
-(autoload (quote windmove-default-keybindings) "windmove" "\
+(autoload 'windmove-default-keybindings "windmove" "\
Set up keybindings for `windmove'.
Keybindings are of the form MODIFIER-{left,right,up,down}.
Default MODIFIER is 'shift.
@@ -30595,7 +31005,7 @@ Default MODIFIER is 'shift.
;;;***
;;;### (autoloads (winner-mode winner-mode) "winner" "winner.el"
-;;;;;; (17842 58278))
+;;;;;; (18120 34750))
;;; Generated autoloads from winner.el
(defvar winner-mode nil "\
@@ -30603,9 +31013,9 @@ Toggle Winner mode.
Setting this variable directly does not take effect;
use either \\[customize] or the function `winner-mode'.")
-(custom-autoload (quote winner-mode) "winner" nil)
+(custom-autoload 'winner-mode "winner" nil)
-(autoload (quote winner-mode) "winner" "\
+(autoload 'winner-mode "winner" "\
Toggle Winner mode.
With arg, turn Winner mode on if and only if arg is positive.
@@ -30614,10 +31024,10 @@ With arg, turn Winner mode on if and only if arg is positive.
;;;***
;;;### (autoloads (woman-find-file woman-dired-find-file woman) "woman"
-;;;;;; "woman.el" (17949 41467))
+;;;;;; "woman.el" (18197 21670))
;;; Generated autoloads from woman.el
-(autoload (quote woman) "woman" "\
+(autoload 'woman "woman" "\
Browse UN*X man page for TOPIC (Without using external Man program).
The major browsing mode used is essentially the standard Man mode.
Choose the filename for the man page using completion, based on the
@@ -30631,12 +31041,12 @@ should be a topic string and non-nil RE-CACHE forces re-caching.
\(fn &optional TOPIC RE-CACHE)" t nil)
-(autoload (quote woman-dired-find-file) "woman" "\
+(autoload 'woman-dired-find-file "woman" "\
In dired, run the WoMan man-page browser on this file.
\(fn)" t nil)
-(autoload (quote woman-find-file) "woman" "\
+(autoload 'woman-find-file "woman" "\
Find, decode and browse a specific UN*X man-page source file FILE-NAME.
Use existing buffer if possible; reformat only if prefix arg given.
When called interactively, optional argument REFORMAT forces reformatting
@@ -30650,10 +31060,10 @@ decompress the file if appropriate. See the documentation for the
;;;***
;;;### (autoloads (wordstar-mode) "ws-mode" "emulation/ws-mode.el"
-;;;;;; (17842 54264))
+;;;;;; (18088 55097))
;;; Generated autoloads from emulation/ws-mode.el
-(autoload (quote wordstar-mode) "ws-mode" "\
+(autoload 'wordstar-mode "ws-mode" "\
Major mode with WordStar-like key bindings.
BUGS:
@@ -30763,10 +31173,10 @@ The key bindings are:
;;;***
;;;### (autoloads (xml-parse-region xml-parse-file) "xml" "xml.el"
-;;;;;; (17916 14776))
+;;;;;; (18088 55091))
;;; Generated autoloads from xml.el
-(autoload (quote xml-parse-file) "xml" "\
+(autoload 'xml-parse-file "xml" "\
Parse the well-formed XML file FILE.
If FILE is already visited, use its buffer and don't kill it.
Returns the top node with all its children.
@@ -30775,7 +31185,7 @@ If PARSE-NS is non-nil, then QNAMES are expanded.
\(fn FILE &optional PARSE-DTD PARSE-NS)" nil nil)
-(autoload (quote xml-parse-region) "xml" "\
+(autoload 'xml-parse-region "xml" "\
Parse the region from BEG to END in BUFFER.
If BUFFER is nil, it defaults to the current buffer.
Returns the XML list for the region, or raises an error if the region
@@ -30788,8 +31198,8 @@ If PARSE-NS is non-nil, then QNAMES are expanded.
;;;***
-;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (18007
-;;;;;; 39657))
+;;;### (autoloads (xterm-mouse-mode) "xt-mouse" "xt-mouse.el" (18200
+;;;;;; 51264))
;;; Generated autoloads from xt-mouse.el
(defvar xterm-mouse-mode nil "\
@@ -30799,11 +31209,12 @@ Setting this variable directly does not take effect;
either customize it (see the info node `Easy Customization')
or call the function `xterm-mouse-mode'.")
-(custom-autoload (quote xterm-mouse-mode) "xt-mouse" nil)
+(custom-autoload 'xterm-mouse-mode "xt-mouse" nil)
-(autoload (quote xterm-mouse-mode) "xt-mouse" "\
+(autoload 'xterm-mouse-mode "xt-mouse" "\
Toggle XTerm mouse mode.
-With prefix arg, turn XTerm mouse mode on iff arg is positive.
+With prefix arg, turn XTerm mouse mode on if arg is positive, otherwise turn
+it off.
Turn it on to use Emacs mouse commands, and off to use xterm mouse commands.
This works in terminal emulators compatible with xterm. It only
@@ -30817,15 +31228,15 @@ down the SHIFT key while pressing the mouse button.
;;;***
;;;### (autoloads (yenc-extract-filename yenc-decode-region) "yenc"
-;;;;;; "gnus/yenc.el" (17842 54741))
+;;;;;; "gnus/yenc.el" (18088 55107))
;;; Generated autoloads from gnus/yenc.el
-(autoload (quote yenc-decode-region) "yenc" "\
+(autoload 'yenc-decode-region "yenc" "\
Yenc decode region between START and END using an internal decoder.
\(fn START END)" t nil)
-(autoload (quote yenc-extract-filename) "yenc" "\
+(autoload 'yenc-extract-filename "yenc" "\
Extract file name from an yenc header.
\(fn)" nil nil)
@@ -30833,36 +31244,36 @@ Extract file name from an yenc header.
;;;***
;;;### (autoloads (psychoanalyze-pinhead apropos-zippy insert-zippyism
-;;;;;; yow) "yow" "play/yow.el" (17842 55395))
+;;;;;; yow) "yow" "play/yow.el" (18203 37788))
;;; Generated autoloads from play/yow.el
-(autoload (quote yow) "yow" "\
+(autoload 'yow "yow" "\
Return or display a random Zippy quotation. With prefix arg, insert it.
\(fn &optional INSERT DISPLAY)" t nil)
-(autoload (quote insert-zippyism) "yow" "\
+(autoload 'insert-zippyism "yow" "\
Prompt with completion for a known Zippy quotation, and insert it at point.
\(fn &optional ZIPPYISM)" t nil)
-(autoload (quote apropos-zippy) "yow" "\
+(autoload 'apropos-zippy "yow" "\
Return a list of all Zippy quotes matching REGEXP.
If called interactively, display a list of matches.
\(fn REGEXP)" t nil)
-(autoload (quote psychoanalyze-pinhead) "yow" "\
+(autoload 'psychoanalyze-pinhead "yow" "\
Zippy goes to the analyst.
\(fn)" t nil)
;;;***
-;;;### (autoloads (zone) "zone" "play/zone.el" (17941 38806))
+;;;### (autoloads (zone) "zone" "play/zone.el" (18202 4002))
;;; Generated autoloads from play/zone.el
-(autoload (quote zone) "zone" "\
+(autoload 'zone "zone" "\
Zone out, completely.
\(fn)" t nil)
@@ -30877,23 +31288,24 @@ Zone out, completely.
;;;;;; "calc/calc-help.el" "calc/calc-incom.el" "calc/calc-keypd.el"
;;;;;; "calc/calc-lang.el" "calc/calc-macs.el" "calc/calc-map.el"
;;;;;; "calc/calc-math.el" "calc/calc-misc.el" "calc/calc-mode.el"
-;;;;;; "calc/calc-mtx.el" "calc/calc-poly.el" "calc/calc-prog.el"
-;;;;;; "calc/calc-rewr.el" "calc/calc-rules.el" "calc/calc-sel.el"
-;;;;;; "calc/calc-stat.el" "calc/calc-store.el" "calc/calc-stuff.el"
-;;;;;; "calc/calc-trail.el" "calc/calc-undo.el" "calc/calc-units.el"
-;;;;;; "calc/calc-vec.el" "calc/calc-yank.el" "calc/calcalg2.el"
-;;;;;; "calc/calcalg3.el" "calc/calccomp.el" "calc/calcsel2.el"
-;;;;;; "calendar/cal-bahai.el" "calendar/cal-china.el" "calendar/cal-coptic.el"
-;;;;;; "calendar/cal-french.el" "calendar/cal-html.el" "calendar/cal-islam.el"
-;;;;;; "calendar/cal-iso.el" "calendar/cal-julian.el" "calendar/cal-mayan.el"
-;;;;;; "calendar/cal-menu.el" "calendar/cal-move.el" "calendar/cal-persia.el"
-;;;;;; "calendar/cal-tex.el" "calendar/cal-x.el" "case-table.el"
-;;;;;; "cdl.el" "cus-dep.el" "cus-load.el" "cus-start.el" "custom.el"
-;;;;;; "dframe.el" "dos-fns.el" "dos-vars.el" "dos-w32.el" "ediff-diff.el"
-;;;;;; "ediff-init.el" "ediff-merg.el" "ediff-ptch.el" "ediff-vers.el"
-;;;;;; "ediff-wind.el" "electric.el" "emacs-lisp/assoc.el" "emacs-lisp/authors.el"
-;;;;;; "emacs-lisp/bindat.el" "emacs-lisp/byte-opt.el" "emacs-lisp/byte-run.el"
-;;;;;; "emacs-lisp/cl-compat.el" "emacs-lisp/cl-extra.el" "emacs-lisp/cl-macs.el"
+;;;;;; "calc/calc-mtx.el" "calc/calc-nlfit.el" "calc/calc-poly.el"
+;;;;;; "calc/calc-prog.el" "calc/calc-rewr.el" "calc/calc-rules.el"
+;;;;;; "calc/calc-sel.el" "calc/calc-stat.el" "calc/calc-store.el"
+;;;;;; "calc/calc-stuff.el" "calc/calc-trail.el" "calc/calc-undo.el"
+;;;;;; "calc/calc-units.el" "calc/calc-vec.el" "calc/calc-yank.el"
+;;;;;; "calc/calcalg2.el" "calc/calcalg3.el" "calc/calccomp.el"
+;;;;;; "calc/calcsel2.el" "calendar/cal-bahai.el" "calendar/cal-china.el"
+;;;;;; "calendar/cal-coptic.el" "calendar/cal-french.el" "calendar/cal-html.el"
+;;;;;; "calendar/cal-islam.el" "calendar/cal-iso.el" "calendar/cal-julian.el"
+;;;;;; "calendar/cal-mayan.el" "calendar/cal-menu.el" "calendar/cal-move.el"
+;;;;;; "calendar/cal-persia.el" "calendar/cal-tex.el" "calendar/cal-x.el"
+;;;;;; "case-table.el" "cdl.el" "cus-dep.el" "cus-load.el" "cus-start.el"
+;;;;;; "custom.el" "dframe.el" "dos-fns.el" "dos-vars.el" "dos-w32.el"
+;;;;;; "ediff-diff.el" "ediff-init.el" "ediff-merg.el" "ediff-ptch.el"
+;;;;;; "ediff-vers.el" "ediff-wind.el" "electric.el" "emacs-lisp/assoc.el"
+;;;;;; "emacs-lisp/authors.el" "emacs-lisp/avl-tree.el" "emacs-lisp/bindat.el"
+;;;;;; "emacs-lisp/byte-opt.el" "emacs-lisp/byte-run.el" "emacs-lisp/cl-compat.el"
+;;;;;; "emacs-lisp/cl-extra.el" "emacs-lisp/cl-loaddefs.el" "emacs-lisp/cl-macs.el"
;;;;;; "emacs-lisp/cl-seq.el" "emacs-lisp/cl-specs.el" "emacs-lisp/cust-print.el"
;;;;;; "emacs-lisp/find-gc.el" "emacs-lisp/float-sup.el" "emacs-lisp/gulp.el"
;;;;;; "emacs-lisp/levents.el" "emacs-lisp/lisp-mnt.el" "emacs-lisp/lisp-mode.el"
@@ -30902,47 +31314,50 @@ Zone out, completely.
;;;;;; "emacs-lisp/sregex.el" "emacs-lisp/syntax.el" "emacs-lisp/tcover-ses.el"
;;;;;; "emacs-lisp/tcover-unsafep.el" "emacs-lock.el" "emulation/cua-gmrk.el"
;;;;;; "emulation/cua-rect.el" "emulation/edt-lk201.el" "emulation/edt-mapper.el"
-;;;;;; "emulation/edt-pc.el" "emulation/edt-vt100.el" "emulation/tpu-mapper.el"
-;;;;;; "emulation/viper-cmd.el" "emulation/viper-ex.el" "emulation/viper-init.el"
-;;;;;; "emulation/viper-keym.el" "emulation/viper-macs.el" "emulation/viper-mous.el"
-;;;;;; "emulation/viper-util.el" "env.el" "erc/erc-backend.el" "erc/erc-goodies.el"
-;;;;;; "erc/erc-ibuffer.el" "erc/erc-lang.el" "erc/erc-nicklist.el"
-;;;;;; "eshell/em-alias.el" "eshell/em-banner.el" "eshell/em-basic.el"
-;;;;;; "eshell/em-cmpl.el" "eshell/em-dirs.el" "eshell/em-glob.el"
-;;;;;; "eshell/em-hist.el" "eshell/em-ls.el" "eshell/em-pred.el"
-;;;;;; "eshell/em-prompt.el" "eshell/em-rebind.el" "eshell/em-script.el"
-;;;;;; "eshell/em-smart.el" "eshell/em-term.el" "eshell/em-unix.el"
-;;;;;; "eshell/em-xtra.el" "eshell/esh-arg.el" "eshell/esh-cmd.el"
-;;;;;; "eshell/esh-ext.el" "eshell/esh-groups.el" "eshell/esh-io.el"
-;;;;;; "eshell/esh-maint.el" "eshell/esh-module.el" "eshell/esh-opt.el"
-;;;;;; "eshell/esh-proc.el" "eshell/esh-util.el" "eshell/esh-var.el"
-;;;;;; "ezimage.el" "faces.el" "files.el" "finder-inf.el" "foldout.el"
-;;;;;; "font-core.el" "font-lock.el" "format.el" "forms-d2.el" "forms-pass.el"
-;;;;;; "frame.el" "fringe.el" "generic-x.el" "gnus/compface.el"
+;;;;;; "emulation/edt-pc.el" "emulation/edt-vt100.el" "emulation/tpu-extras.el"
+;;;;;; "emulation/tpu-mapper.el" "emulation/viper-cmd.el" "emulation/viper-ex.el"
+;;;;;; "emulation/viper-init.el" "emulation/viper-keym.el" "emulation/viper-macs.el"
+;;;;;; "emulation/viper-mous.el" "emulation/viper-util.el" "env.el"
+;;;;;; "erc/erc-backend.el" "erc/erc-goodies.el" "erc/erc-ibuffer.el"
+;;;;;; "erc/erc-lang.el" "eshell/em-alias.el" "eshell/em-banner.el"
+;;;;;; "eshell/em-basic.el" "eshell/em-cmpl.el" "eshell/em-dirs.el"
+;;;;;; "eshell/em-glob.el" "eshell/em-hist.el" "eshell/em-ls.el"
+;;;;;; "eshell/em-pred.el" "eshell/em-prompt.el" "eshell/em-rebind.el"
+;;;;;; "eshell/em-script.el" "eshell/em-smart.el" "eshell/em-term.el"
+;;;;;; "eshell/em-unix.el" "eshell/em-xtra.el" "eshell/esh-arg.el"
+;;;;;; "eshell/esh-cmd.el" "eshell/esh-ext.el" "eshell/esh-groups.el"
+;;;;;; "eshell/esh-io.el" "eshell/esh-maint.el" "eshell/esh-module.el"
+;;;;;; "eshell/esh-opt.el" "eshell/esh-proc.el" "eshell/esh-util.el"
+;;;;;; "eshell/esh-var.el" "ezimage.el" "faces.el" "files.el" "finder-inf.el"
+;;;;;; "foldout.el" "font-core.el" "font-lock.el" "format.el" "forms-d2.el"
+;;;;;; "forms-pass.el" "frame.el" "fringe.el" "generic-x.el" "gnus/compface.el"
;;;;;; "gnus/dig.el" "gnus/dns.el" "gnus/format-spec.el" "gnus/gnus-async.el"
;;;;;; "gnus/gnus-bcklg.el" "gnus/gnus-cite.el" "gnus/gnus-cus.el"
;;;;;; "gnus/gnus-demon.el" "gnus/gnus-dup.el" "gnus/gnus-eform.el"
-;;;;;; "gnus/gnus-ems.el" "gnus/gnus-gl.el" "gnus/gnus-int.el" "gnus/gnus-logic.el"
+;;;;;; "gnus/gnus-ems.el" "gnus/gnus-int.el" "gnus/gnus-logic.el"
;;;;;; "gnus/gnus-mh.el" "gnus/gnus-salt.el" "gnus/gnus-score.el"
;;;;;; "gnus/gnus-setup.el" "gnus/gnus-srvr.el" "gnus/gnus-sum.el"
;;;;;; "gnus/gnus-topic.el" "gnus/gnus-undo.el" "gnus/gnus-util.el"
-;;;;;; "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/hex-util.el" "gnus/ietf-drums.el"
-;;;;;; "gnus/imap.el" "gnus/legacy-gnus-agent.el" "gnus/mail-parse.el"
-;;;;;; "gnus/mail-prsvr.el" "gnus/mail-source.el" "gnus/mailcap.el"
-;;;;;; "gnus/messcompat.el" "gnus/mm-bodies.el" "gnus/mm-decode.el"
-;;;;;; "gnus/mm-encode.el" "gnus/mm-util.el" "gnus/mm-view.el" "gnus/mml-sec.el"
-;;;;;; "gnus/mml-smime.el" "gnus/mml.el" "gnus/nnagent.el" "gnus/nnbabyl.el"
-;;;;;; "gnus/nndb.el" "gnus/nndir.el" "gnus/nndraft.el" "gnus/nneething.el"
-;;;;;; "gnus/nngateway.el" "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnlistserv.el"
+;;;;;; "gnus/gnus-uu.el" "gnus/gnus-vm.el" "gnus/hex-util.el" "gnus/hmac-def.el"
+;;;;;; "gnus/hmac-md5.el" "gnus/ietf-drums.el" "gnus/imap.el" "gnus/legacy-gnus-agent.el"
+;;;;;; "gnus/mail-parse.el" "gnus/mail-prsvr.el" "gnus/mail-source.el"
+;;;;;; "gnus/mailcap.el" "gnus/md4.el" "gnus/messcompat.el" "gnus/mm-bodies.el"
+;;;;;; "gnus/mm-decode.el" "gnus/mm-encode.el" "gnus/mm-util.el"
+;;;;;; "gnus/mm-view.el" "gnus/mml-sec.el" "gnus/mml-smime.el" "gnus/mml.el"
+;;;;;; "gnus/nnagent.el" "gnus/nnbabyl.el" "gnus/nndb.el" "gnus/nndir.el"
+;;;;;; "gnus/nndraft.el" "gnus/nneething.el" "gnus/nngateway.el"
+;;;;;; "gnus/nnheader.el" "gnus/nnimap.el" "gnus/nnlistserv.el"
;;;;;; "gnus/nnmail.el" "gnus/nnmaildir.el" "gnus/nnmbox.el" "gnus/nnmh.el"
;;;;;; "gnus/nnnil.el" "gnus/nnoo.el" "gnus/nnrss.el" "gnus/nnslashdot.el"
;;;;;; "gnus/nnspool.el" "gnus/nntp.el" "gnus/nnultimate.el" "gnus/nnvirtual.el"
-;;;;;; "gnus/nnwarchive.el" "gnus/nnweb.el" "gnus/nnwfm.el" "gnus/pop3.el"
-;;;;;; "gnus/rfc1843.el" "gnus/rfc2045.el" "gnus/rfc2047.el" "gnus/rfc2104.el"
-;;;;;; "gnus/rfc2231.el" "gnus/sieve-manage.el" "gnus/smime.el"
-;;;;;; "gnus/spam-stat.el" "gnus/starttls.el" "gnus/utf7.el" "gnus/webmail.el"
-;;;;;; "help.el" "indent.el" "international/characters.el" "international/fontset.el"
-;;;;;; "international/iso-ascii.el" "international/ja-dic-cnv.el"
+;;;;;; "gnus/nnwarchive.el" "gnus/nnweb.el" "gnus/nnwfm.el" "gnus/ntlm.el"
+;;;;;; "gnus/password.el" "gnus/pop3.el" "gnus/rfc1843.el" "gnus/rfc2045.el"
+;;;;;; "gnus/rfc2047.el" "gnus/rfc2104.el" "gnus/rfc2231.el" "gnus/sasl-cram.el"
+;;;;;; "gnus/sasl-digest.el" "gnus/sasl-ntlm.el" "gnus/sasl.el"
+;;;;;; "gnus/sieve-manage.el" "gnus/smime-ldap.el" "gnus/smime.el"
+;;;;;; "gnus/spam-stat.el" "gnus/spam-wash.el" "gnus/starttls.el"
+;;;;;; "gnus/utf7.el" "gnus/webmail.el" "help.el" "indent.el" "international/characters.el"
+;;;;;; "international/fontset.el" "international/iso-ascii.el" "international/ja-dic-cnv.el"
;;;;;; "international/ja-dic-utl.el" "international/latin-1.el"
;;;;;; "international/latin-2.el" "international/latin-3.el" "international/latin-4.el"
;;;;;; "international/latin-5.el" "international/latin-8.el" "international/latin-9.el"
@@ -30972,9 +31387,10 @@ Zone out, completely.
;;;;;; "mh-e/mh-tool-bar.el" "mh-e/mh-utils.el" "mh-e/mh-xface.el"
;;;;;; "misc.el" "mouse-copy.el" "mouse-drag.el" "mouse.el" "net/eudc-vars.el"
;;;;;; "net/eudcb-bbdb.el" "net/eudcb-ldap.el" "net/eudcb-mab.el"
-;;;;;; "net/eudcb-ph.el" "net/ldap.el" "net/netrc.el" "net/tls.el"
-;;;;;; "net/tramp-smb.el" "net/tramp-util.el" "net/tramp-uu.el"
-;;;;;; "net/tramp-vc.el" "net/trampver.el" "patcomp.el" "paths.el"
+;;;;;; "net/eudcb-ph.el" "net/ldap.el" "net/netrc.el" "net/socks.el"
+;;;;;; "net/tls.el" "net/tramp-cache.el" "net/tramp-cmds.el" "net/tramp-compat.el"
+;;;;;; "net/tramp-fish.el" "net/tramp-gw.el" "net/tramp-smb.el"
+;;;;;; "net/tramp-uu.el" "net/trampver.el" "patcomp.el" "paths.el"
;;;;;; "pcvs-info.el" "pcvs-parse.el" "pcvs-util.el" "pgg-def.el"
;;;;;; "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "play/gamegrid.el"
;;;;;; "play/gametree.el" "play/meese.el" "progmodes/ada-prj.el"
@@ -30985,21 +31401,21 @@ Zone out, completely.
;;;;;; "progmodes/ebnf-iso.el" "progmodes/ebnf-otz.el" "progmodes/ebnf-yac.el"
;;;;;; "progmodes/idlw-complete-structtag.el" "progmodes/idlw-help.el"
;;;;;; "progmodes/idlw-toolbar.el" "progmodes/mantemp.el" "progmodes/xscheme.el"
-;;;;;; "register.el" "replace.el" "rfn-eshadow.el" "s-region.el"
-;;;;;; "saveplace.el" "sb-image.el" "scroll-bar.el" "select.el"
-;;;;;; "soundex.el" "startup.el" "subdirs.el" "tempo.el" "textmodes/bib-mode.el"
-;;;;;; "textmodes/makeinfo.el" "textmodes/page-ext.el" "textmodes/page.el"
-;;;;;; "textmodes/refbib.el" "textmodes/refer.el" "textmodes/reftex-auc.el"
-;;;;;; "textmodes/reftex-dcr.el" "textmodes/reftex-ref.el" "textmodes/reftex-sel.el"
-;;;;;; "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el" "textmodes/text-mode.el"
-;;;;;; "timezone.el" "tooltip.el" "tree-widget.el" "uniquify.el"
-;;;;;; "url/url-about.el" "url/url-cookie.el" "url/url-dired.el"
+;;;;;; "ps-mule.el" "register.el" "replace.el" "rfn-eshadow.el"
+;;;;;; "s-region.el" "saveplace.el" "sb-image.el" "scroll-bar.el"
+;;;;;; "select.el" "soundex.el" "startup.el" "subdirs.el" "tempo.el"
+;;;;;; "textmodes/bib-mode.el" "textmodes/makeinfo.el" "textmodes/page-ext.el"
+;;;;;; "textmodes/page.el" "textmodes/refbib.el" "textmodes/refer.el"
+;;;;;; "textmodes/reftex-auc.el" "textmodes/reftex-dcr.el" "textmodes/reftex-ref.el"
+;;;;;; "textmodes/reftex-sel.el" "textmodes/reftex-toc.el" "textmodes/texnfo-upd.el"
+;;;;;; "textmodes/text-mode.el" "timezone.el" "tooltip.el" "tree-widget.el"
+;;;;;; "uniquify.el" "url/url-about.el" "url/url-cookie.el" "url/url-dired.el"
;;;;;; "url/url-expand.el" "url/url-ftp.el" "url/url-history.el"
;;;;;; "url/url-imap.el" "url/url-methods.el" "url/url-nfs.el" "url/url-proxy.el"
;;;;;; "url/url-vars.el" "url/vc-dav.el" "vc-hooks.el" "vcursor.el"
;;;;;; "version.el" "vms-patch.el" "vmsproc.el" "vt-control.el"
;;;;;; "vt100-led.el" "w32-fns.el" "w32-vars.el" "widget.el" "window.el"
-;;;;;; "x-dnd.el") (18016 62249 573562))
+;;;;;; "x-dnd.el") (18214 7224 993409))
;;;***
diff --git a/lisp/loadhist.el b/lisp/loadhist.el
index fb6a1c0389f..0c1766143d6 100644
--- a/lisp/loadhist.el
+++ b/lisp/loadhist.el
@@ -38,12 +38,11 @@
"Return the file and list of definitions associated with FEATURE.
The value is actually the element of `load-history'
for the file that did (provide FEATURE)."
- (catch 'foundit
- (mapc (lambda (x)
- (if (member (cons 'provide feature) (cdr x))
- (throw 'foundit x)))
- load-history)
- nil))
+ (catch 'foundit
+ (let ((element (cons 'provide feature)))
+ (dolist (x load-history nil)
+ (when (member element (cdr x))
+ (throw 'foundit x))))))
(defun feature-file (feature)
"Return the file name from which a given FEATURE was loaded.
@@ -72,32 +71,25 @@ A library name is equivalent to the file name that `load-library' would load."
"Return the list of features provided by FILE as it was loaded.
FILE can be a file name, or a library name.
A library name is equivalent to the file name that `load-library' would load."
- (let ((symbols (file-loadhist-lookup file))
- provides)
- (mapc (lambda (x)
- (if (and (consp x) (eq (car x) 'provide))
- (setq provides (cons (cdr x) provides))))
- symbols)
- provides))
+ (let (provides)
+ (dolist (x (file-loadhist-lookup file) provides)
+ (when (eq (car-safe x) 'provide)
+ (push x provides)))))
(defun file-requires (file)
"Return the list of features required by FILE as it was loaded.
FILE can be a file name, or a library name.
A library name is equivalent to the file name that `load-library' would load."
- (let ((symbols (file-loadhist-lookup file))
- requires)
- (mapc (lambda (x)
- (if (and (consp x) (eq (car x) 'require))
- (setq requires (cons (cdr x) requires))))
- symbols)
- requires))
+ (let (requires)
+ (dolist (x (file-loadhist-lookup file) requires)
+ (when (eq (car-safe x) 'require)
+ (push x requires)))))
(defsubst file-set-intersect (p q)
"Return the set intersection of two lists."
- (let ((ret nil))
+ (let (ret)
(dolist (x p ret)
- (if (memq x q) (setq ret (cons x ret))))
- ret))
+ (when (memq x q) (push x ret)))))
(defun file-dependents (file)
"Return the list of loaded libraries that depend on FILE.
@@ -107,9 +99,8 @@ A library name is equivalent to the file name that `load-library' would load."
(let ((provides (file-provides file))
(dependents nil))
(dolist (x load-history dependents)
- (if (file-set-intersect provides (file-requires (car x)))
- (setq dependents (cons (car x) dependents))))
- dependents))
+ (when (file-set-intersect provides (file-requires (car x)))
+ (push (car x) dependents)))))
(defun read-feature (prompt &optional loaded-p)
"Read feature name from the minibuffer, prompting with string PROMPT.
@@ -136,9 +127,9 @@ from a file."
font-lock-syntactic-face-function font-lock-unfontify-buffer-function
font-lock-unfontify-region-function kill-buffer-query-functions
kill-emacs-query-functions lisp-indent-function mouse-position-function
- redisplay-end-trigger-functions temp-buffer-show-function
- window-scroll-functions window-size-change-functions
- write-contents-functions write-file-functions
+ redisplay-end-trigger-functions suspend-tty-functions
+ temp-buffer-show-function window-scroll-functions
+ window-size-change-functions write-contents-functions write-file-functions
write-region-annotate-functions)
"A list of special hooks from Info node `(elisp)Standard Hooks'.
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 8800be9573f..43e7beff8d6 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -60,10 +60,10 @@
(load "widget")
(load "custom")
(load "emacs-lisp/map-ynp")
-(load "env")
(load "cus-start")
(load "international/mule")
(load "international/mule-conf.el") ;Don't get confused if someone compiled this by mistake.
+(load "env")
(load "format")
(load "bindings")
(setq load-source-file-function 'load-with-code-conversion)
@@ -160,6 +160,7 @@
(load "textmodes/page")
(load "register")
(load "textmodes/paragraphs")
+(load "abbrev") ;lisp-mode.el uses define-abbrev-table.
(load "emacs-lisp/lisp-mode")
(load "textmodes/text-mode")
(load "textmodes/fill")
@@ -169,7 +170,6 @@
(if (eq system-type 'vax-vms)
(progn
(load "vmsproc")))
-(load "abbrev")
(load "buff-menu")
(if (fboundp 'x-create-frame)
@@ -181,7 +181,10 @@
(load "mwheel")
(load "tool-bar")))
(if (featurep 'x)
- (load "x-dnd"))
+ (progn
+ (load "x-dnd")
+ (load "term/x-win")))
+
(message "%s" (garbage-collect))
(if (eq system-type 'vax-vms)
@@ -189,10 +192,13 @@
(load "vms-patch")))
(if (eq system-type 'windows-nt)
(progn
+ (load "international/ccl")
+ (load "international/code-pages")
+ (load "w32-vars")
+ (load "term/w32-win")
(load "ls-lisp")
(load "disp-table") ; needed to setup ibm-pc char set, see internal.el
(load "dos-w32")
- (load "w32-vars")
(load "w32-fns")))
(if (eq system-type 'ms-dos)
(progn
@@ -206,6 +212,9 @@
(if (eq system-type 'macos)
(progn
(load "ls-lisp")))
+(if (featurep 'mac-carbon)
+ (progn
+ (load "term/mac-win")))
(if (fboundp 'atan) ; preload some constants and
(progn ; floating pt. functions if we have float support.
(load "emacs-lisp/float-sup")))
diff --git a/lisp/locate.el b/lisp/locate.el
index 95060d36197..bc2dce954da 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -406,14 +406,10 @@ there is no file name on the current line, the return value is
meaningless. You can check whether the current line contains a file
listed by the locate program, using the function
`locate-main-listing-line-p'."
- (save-excursion
- (end-of-line)
- (let ((eol (point)))
- (beginning-of-line)
-
- ;; Assumes names end at the end of the line
- (forward-char locate-filename-indentation)
- (list (point) eol))))
+ (list (+ locate-filename-indentation
+ (line-beginning-position))
+ ;; Assume names end at the end of the line.
+ (line-end-position)))
;; From SQL-mode
(defun locate-current-line-number ()
diff --git a/lisp/log-edit.el b/lisp/log-edit.el
index c8ee5db812b..5c2cf989f62 100644
--- a/lisp/log-edit.el
+++ b/lisp/log-edit.el
@@ -590,25 +590,23 @@ The return value looks like this:
(LOGBUFFER (ENTRYSTART . ENTRYEND) ...)
where LOGBUFFER is the name of the ChangeLog buffer, and each
\(ENTRYSTART . ENTRYEND\) pair is a buffer region."
- (save-excursion
- (let ((changelog-file-name
- (let ((default-directory
- (file-name-directory (expand-file-name file)))
- (visiting-buffer (find-buffer-visiting file)))
- ;; If there is a buffer visiting FILE, and it has a local
- ;; value for `change-log-default-name', use that.
- (if (and visiting-buffer
- (local-variable-p 'change-log-default-name
- visiting-buffer))
- (save-excursion
- (set-buffer visiting-buffer)
- change-log-default-name)
- ;; `find-change-log' uses `change-log-default-name' if set
- ;; and sets it before exiting, so we need to work around
- ;; that memoizing which is undesired here
- (setq change-log-default-name nil)
- (find-change-log)))))
- (set-buffer (find-file-noselect changelog-file-name))
+ (let ((changelog-file-name
+ (let ((default-directory
+ (file-name-directory (expand-file-name file)))
+ (visiting-buffer (find-buffer-visiting file)))
+ ;; If there is a buffer visiting FILE, and it has a local
+ ;; value for `change-log-default-name', use that.
+ (if (and visiting-buffer
+ (local-variable-p 'change-log-default-name
+ visiting-buffer))
+ (with-current-buffer visiting-buffer
+ change-log-default-name)
+ ;; `find-change-log' uses `change-log-default-name' if set
+ ;; and sets it before exiting, so we need to work around
+ ;; that memoizing which is undesired here
+ (setq change-log-default-name nil)
+ (find-change-log)))))
+ (with-current-buffer (find-file-noselect changelog-file-name)
(unless (eq major-mode 'change-log-mode) (change-log-mode))
(goto-char (point-min))
(if (looking-at "\\s-*\n") (goto-char (match-end 0)))
diff --git a/lisp/log-view.el b/lisp/log-view.el
index 99f7ad7e764..1ee96916ffb 100644
--- a/lisp/log-view.el
+++ b/lisp/log-view.el
@@ -76,7 +76,7 @@
(eval-when-compile (require 'cl))
(require 'pcvs-util)
-(autoload 'vc-find-version "vc")
+(autoload 'vc-find-revision "vc")
(autoload 'vc-version-diff "vc")
(defvar cvs-minor-wrap-function)
@@ -89,11 +89,11 @@
(easy-mmode-defmap log-view-mode-map
'(("q" . quit-window)
("z" . kill-this-buffer)
- ("m" . set-mark-command)
+ ("m" . log-view-toggle-mark-entry)
;; ("e" . cvs-mode-edit-log)
("d" . log-view-diff)
("a" . log-view-annotate-version)
- ("f" . log-view-find-version)
+ ("f" . log-view-find-revision)
("n" . log-view-msg-next)
("p" . log-view-msg-prev)
("\t" . log-view-msg-next)
@@ -116,7 +116,7 @@
;; ["Kill This Buffer" kill-this-buffer]
["Mark Log Entry for Diff" set-mark-command]
["Diff Revisions" log-view-diff]
- ["Visit Version" log-view-find-version]
+ ["Visit Version" log-view-find-revision]
["Annotate Version" log-view-annotate-version]
["Next Log Entry" log-view-msg-next]
["Previous Log Entry" log-view-msg-prev]
@@ -146,15 +146,18 @@
(put 'log-view-message-face 'face-alias 'log-view-message)
(defvar log-view-message-face 'log-view-message)
-(defconst log-view-file-re
- (concat "^\\(?:Working file: \\(.+\\)" ;RCS and CVS.
- "\\|\\(?:SCCS/s\\.\\|Changes to \\)\\(.+\\):" ;SCCS and Darcs.
- "\\)\n")) ;Include the \n for font-lock reasons.
-
-(defconst log-view-message-re
- (concat "^\\(?:revision \\([.0-9]+\\)\\(?:\t.*\\)?" ; RCS and CVS.
- "\\|r\\([0-9]+\\) | .* | .*" ; Subversion.
- "\\|D \\([.0-9]+\\) .*" ; SCCS.
+(defvar log-view-file-re
+ (concat "^\\(?:Working file: \\(?1:.+\\)" ;RCS and CVS.
+ ;; Subversion has no such thing??
+ "\\|\\(?:SCCS/s\\.\\|Changes to \\)\\(?1:.+\\):" ;SCCS and Darcs.
+ "\\)\n") ;Include the \n for font-lock reasons.
+ "Regexp matching the text identifying the file.
+The match group number 1 should match the file name itself.")
+
+(defvar log-view-message-re
+ (concat "^\\(?:revision \\(?1:[.0-9]+\\)\\(?:\t.*\\)?" ; RCS and CVS.
+ "\\|r\\(?1:[0-9]+\\) | .* | .*" ; Subversion.
+ "\\|D \\(?1:[.0-9]+\\) .*" ; SCCS.
;; Darcs doesn't have revision names. VC-darcs uses patch names
;; instead. Darcs patch names are hashcodes, which do not appear
;; in the log output :-(, but darcs accepts any prefix of the log
@@ -163,16 +166,16 @@
;; First loosely match the date format.
(concat "\\|[^ \n].*[^0-9\n][0-9][0-9]:[0-9][0-9][^0-9\n].*[^ \n]"
;;Email of user and finally Msg, used as revision name.
- " .*@.*\n\\(?: \\* \\(.*\\)\\)?")
+ " .*@.*\n\\(?: \\* \\(?1:.*\\)\\)?")
"\\)$")
- "Regexp matching the text identifying a revision.")
+ "Regexp matching the text identifying a revision.
+The match group number 1 should match the revision number itself.")
(defvar log-view-font-lock-keywords
;; We use `eval' so as to use the buffer-local value of log-view-file-re
;; and log-view-message-re, if applicable.
'((eval . `(,log-view-file-re
- (1 (if (boundp 'cvs-filename-face) cvs-filename-face) nil t)
- (2 (if (boundp 'cvs-filename-face) cvs-filename-face) nil t)
+ (1 (if (boundp 'cvs-filename-face) cvs-filename-face))
(0 log-view-file-face append)))
(eval . `(,log-view-message-re . log-view-message-face))))
@@ -219,8 +222,9 @@
(save-excursion
(forward-line 1)
(or (re-search-backward log-view-file-re nil t)
- (re-search-forward log-view-file-re))
- (let* ((file (or (match-string 1) (match-string 2)))
+ (re-search-forward log-view-file-re nil t)
+ (error "Unable to determine the current file"))
+ (let* ((file (match-string 1))
(cvsdir (and (re-search-backward log-view-dir-re nil t)
(match-string 1)))
(pcldir (and (boundp 'cvs-pcl-cvs-dirchange-re)
@@ -238,13 +242,53 @@
(forward-line 1)
(let ((pt (point)))
(when (re-search-backward log-view-message-re nil t)
- (let (rev)
- ;; Find the subgroup that matched.
- (dotimes (i (/ (length (match-data 'integers)) 2))
- (setq rev (or rev (match-string (1+ i)))))
+ (let ((rev (match-string-no-properties 1)))
(unless (re-search-forward log-view-file-re pt t)
rev))))))
+(defun log-view-toggle-mark-entry ()
+ "Toggle the marked state for the log entry at point.
+Individual log entries can be marked and unmarked. The marked
+entries are denoted by changing their background color.
+`log-view-get-marked' returns the list of tags for the marked
+log entries."
+ (interactive)
+ (save-excursion
+ (forward-line 1)
+ (let ((pt (point)))
+ (when (re-search-backward log-view-message-re nil t)
+ (let ((beg (match-beginning 0))
+ end ov ovlist found tag)
+ (unless (re-search-forward log-view-file-re pt t)
+ ;; Look to see if the current entry is marked.
+ (setq found (get-char-property (point) 'log-view-self))
+ (if found
+ (delete-overlay found)
+ ;; Create an overlay that covers this entry and change
+ ;; it's color.
+ (setq tag (log-view-current-tag (point)))
+ (forward-line 1)
+ (setq end
+ (if (re-search-forward log-view-message-re nil t)
+ (match-beginning 0)
+ (point-max)))
+ (setq ov (make-overlay beg end))
+ (overlay-put ov 'face 'log-view-file)
+ ;; This is used to check if the overlay is present.
+ (overlay-put ov 'log-view-self ov)
+ (overlay-put ov 'log-view-marked tag))))))))
+
+(defun log-view-get-marked ()
+ "Return the list of tags for the marked log entries."
+ (save-excursion
+ (let ((pos (point-min))
+ marked-list ov)
+ (while (setq pos (next-single-property-change pos 'face))
+ (when (setq ov (get-char-property pos 'log-view-self))
+ (push (overlay-get ov 'log-view-marked) marked-list)
+ (setq pos (overlay-end ov))))
+ marked-list)))
+
(defun log-view-beginning-of-defun ()
;; This assumes that a log entry starts with a line matching
;; `log-view-message-re'. Modes that derive from `log-view-mode'
@@ -321,12 +365,12 @@
(cvs-force-command "/F"))
(funcall f))))
-(defun log-view-find-version (pos)
+(defun log-view-find-revision (pos)
"Visit the version at point."
(interactive "d")
(save-excursion
(goto-char pos)
- (switch-to-buffer (vc-find-version (log-view-current-file)
+ (switch-to-buffer (vc-find-revision (log-view-current-file)
(log-view-current-tag)))))
(defun log-view-annotate-version (pos)
@@ -357,7 +401,7 @@ and ends."
(goto-char end)
(log-view-msg-next)
(setq to (log-view-current-tag))))
- (vc-version-diff (log-view-current-file) to fr)))
+ (vc-version-diff (list (log-view-current-file)) to fr)))
(provide 'log-view)
diff --git a/lisp/longlines.el b/lisp/longlines.el
index c820150c27a..f043a48c737 100644
--- a/lisp/longlines.el
+++ b/lisp/longlines.el
@@ -93,6 +93,8 @@ This is used when `longlines-show-hard-newlines' is on."
;; Mode
+(defvar message-indent-citation-function)
+
;;;###autoload
(define-minor-mode longlines-mode
"Toggle Long Lines mode.
diff --git a/lisp/mail/emacsbug.el b/lisp/mail/emacsbug.el
index df5445da412..dab87e04497 100644
--- a/lisp/mail/emacsbug.el
+++ b/lisp/mail/emacsbug.el
@@ -73,18 +73,27 @@ Prompts for bug subject. Leaves you in a mail buffer."
;; This strange form ensures that (recent-keys) is the value before
;; the bug subject string is read.
(interactive (reverse (list (recent-keys) (read-string "Bug Subject: "))))
- ;; If there are four numbers in emacs-version, this is a pretest
- ;; version.
- (let* ((pretest-p (string-match "\\..*\\..*\\." emacs-version))
- (from-buffer (current-buffer))
- (reporting-address (if pretest-p
- report-emacs-bug-pretest-address
- report-emacs-bug-address))
- ;; Put these properties on semantically-void text.
- (prompt-properties '(field emacsbug-prompt
- intangible but-helpful
- rear-nonsticky t))
- user-point message-end-point)
+ ;; The syntax `version;' is preferred to `[version]' because the
+ ;; latter could be mistakenly stripped by mailing software.
+ (if (eq system-type 'ms-dos)
+ (setq topic (concat emacs-version "; " topic))
+ (when (string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version)
+ (setq topic (concat (match-string 1 emacs-version) "; " topic))))
+ ;; If there are four numbers in emacs-version (three for MS-DOS),
+ ;; this is a pretest version.
+ (let* ((pretest-p (string-match (if (eq system-type 'ms-dos)
+ "\\..*\\."
+ "\\..*\\..*\\.")
+ emacs-version))
+ (from-buffer (current-buffer))
+ (reporting-address (if pretest-p
+ report-emacs-bug-pretest-address
+ report-emacs-bug-address))
+ ;; Put these properties on semantically-void text.
+ (prompt-properties '(field emacsbug-prompt
+ intangible but-helpful
+ rear-nonsticky t))
+ user-point message-end-point)
(setq message-end-point
(with-current-buffer (get-buffer-create "*Messages*")
(point-max-marker)))
@@ -106,7 +115,7 @@ Prompts for bug subject. Leaves you in a mail buffer."
(let ((pos (point)))
(insert "not to your local site managers!")
(put-text-property pos (point) 'face 'highlight)))
- (insert "\nPlease write in ")
+ (insert "\nPlease write in ")
(let ((pos (point)))
(insert "English")
(put-text-property pos (point) 'face 'highlight))
@@ -132,8 +141,8 @@ usually do not have translators to read other languages for them.\n\n")
(let ((debug-file (expand-file-name "DEBUG" data-directory)))
(if (file-readable-p debug-file)
- (insert "If you would like to further debug the crash, please read the file\n"
- debug-file " for instructions.\n")))
+ (insert "If you would like to further debug the crash, please read the file\n"
+ debug-file " for instructions.\n")))
(add-text-properties (1+ user-point) (point) prompt-properties)
(insert "\n\nIn " (emacs-version) "\n")
@@ -149,7 +158,7 @@ usually do not have translators to read other languages for them.\n\n")
(insert "configured using `configure "
system-configuration-options "'\n\n"))
(insert "Important settings:\n")
- (mapcar
+ (mapc
'(lambda (var)
(insert (format " value of $%s: %s\n" var (getenv var))))
'("LC_ALL" "LC_COLLATE" "LC_CTYPE" "LC_MESSAGES"
@@ -220,6 +229,9 @@ Type SPC to scroll through this section and its subsections."))))
(setq report-emacs-bug-orig-text (buffer-substring (point-min) (point))))
(goto-char user-point)))
+(declare-function Info-menu "../info" (menu-item &optional fork))
+(declare-function Info-goto-node "../info" (nodename &optional fork))
+
(defun report-emacs-bug-info ()
"Go to the Info node on reporting Emacs bugs."
(interactive)
diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el
index b8d42debe6f..e75387f48ac 100644
--- a/lisp/mail/feedmail.el
+++ b/lisp/mail/feedmail.el
@@ -1588,7 +1588,7 @@ backup file names and the like)."
(setq list-of-possible-fqms (directory-files feedmail-queue-directory t))
(if feedmail-queue-run-orderer
(setq list-of-possible-fqms (funcall feedmail-queue-run-orderer list-of-possible-fqms)))
- (mapcar
+ (mapc
'(lambda (blobby)
(setq maybe-file (expand-file-name blobby feedmail-queue-directory))
(cond
@@ -1835,7 +1835,7 @@ the counts."
(let ((q-cnt 0) (q-oth 0) (high-water 0) (blobbet))
;; iterate, counting things we find along the way in the directory
(if (file-directory-p queue-directory)
- (mapcar
+ (mapc
'(lambda (blobby)
(cond
((file-directory-p blobby) nil) ; don't care about subdirs
diff --git a/lisp/mail/mail-extr.el b/lisp/mail/mail-extr.el
index 72433f892bb..9ef5a02bd26 100644
--- a/lisp/mail/mail-extr.el
+++ b/lisp/mail/mail-extr.el
@@ -876,14 +876,14 @@ consing a string.)"
;; Do `(forward-word 1)', recognizing non-ASCII characters
;; except Latin-1 nbsp as words.
(while (progn
- (skip-chars-forward "^\000-\177 ")
+ (skip-chars-forward "^\000-\177 ")
(and (not (eobp))
(eq ?w (char-syntax (char-after)))
(progn
(forward-word 1)
(and (not (eobp))
(> (char-after) ?\177)
- (not (eq (char-after) ? )))))))))
+ (not (eq (char-after) ? )))))))))
(or (eq char ?\()
;; At the end of first address of a multiple address header.
(and (eq char ?,)
diff --git a/lisp/mail/mailabbrev.el b/lisp/mail/mailabbrev.el
index 8862e6ca2d2..0b2c0177234 100644
--- a/lisp/mail/mailabbrev.el
+++ b/lisp/mail/mailabbrev.el
@@ -133,19 +133,16 @@
"Expand mail aliases as abbrevs, in certain mail headers."
:group 'abbrev-mode)
-(defcustom mail-abbrevs-mode nil
- "*Non-nil means expand mail aliases as abbrevs, in certain message headers."
- :type 'boolean
+;;;###autoload
+(define-minor-mode mail-abbrevs-mode
+ "Non-nil means expand mail aliases as abbrevs, in certain message headers."
+ :global t
:group 'mail-abbrev
- :require 'mailabbrev
- :set (lambda (symbol value)
- (setq mail-abbrevs-mode value)
- (if value (mail-abbrevs-enable) (mail-abbrevs-disable)))
- :initialize 'custom-initialize-default
- :version "20.3")
+ :version "20.3"
+ (if mail-abbrevs-mode (mail-abbrevs-enable) (mail-abbrevs-disable)))
(defcustom mail-abbrevs-only nil
- "*Non-nil means only mail abbrevs should expand automatically.
+ "Non-nil means only mail abbrevs should expand automatically.
Other abbrevs expand only when you explicitly use `expand-abbrev'."
:type 'boolean
:group 'mail-abbrev)
@@ -179,8 +176,7 @@ no aliases, which is represented by this being a table with no entries.)")
(nth 5 (file-attributes mail-personal-alias-file)))
(build-mail-abbrevs)))
(mail-abbrevs-sync-aliases)
- (add-hook 'pre-abbrev-expand-hook 'sendmail-pre-abbrev-expand-hook
- nil t)
+ (add-hook 'abbrev-expand-functions 'mail-abbrev-expand-wrapper nil t)
(abbrev-mode 1))
(defun mail-abbrevs-enable ()
@@ -201,64 +197,56 @@ By default this is the file specified by `mail-personal-alias-file'."
(setq mail-abbrevs nil)
(define-abbrev-table 'mail-abbrevs '()))
(message "Parsing %s..." file)
- (let ((buffer nil)
- (obuf (current-buffer)))
- (unwind-protect
- (progn
- (setq buffer (generate-new-buffer " mailrc"))
- (buffer-disable-undo buffer)
- (set-buffer buffer)
- (cond ((get-file-buffer file)
- (insert (save-excursion
- (set-buffer (get-file-buffer file))
- (buffer-substring (point-min) (point-max)))))
- ((not (file-exists-p file)))
- (t (insert-file-contents file)))
- ;; Don't lose if no final newline.
- (goto-char (point-max))
- (or (eq (preceding-char) ?\n) (newline))
- (goto-char (point-min))
- ;; Delete comments from the file
- (while (search-forward "# " nil t)
- (let ((p (- (point) 2)))
- (end-of-line)
- (delete-region p (point))))
- (goto-char (point-min))
- ;; handle "\\\n" continuation lines
- (while (not (eobp))
- (end-of-line)
- (if (= (preceding-char) ?\\)
- (progn (delete-char -1) (delete-char 1) (insert ?\ ))
- (forward-char 1)))
- (goto-char (point-min))
- (while (re-search-forward
- "^\\(a\\(lias\\)?\\|g\\(roup\\)?\\|source\\)[ \t]+" nil t)
- (beginning-of-line)
- (if (looking-at "source[ \t]+\\([^ \t\n]+\\)")
- (progn
- (end-of-line)
- (build-mail-abbrevs
- (substitute-in-file-name
- (buffer-substring (match-beginning 1) (match-end 1)))
- t))
- (re-search-forward "[ \t]+\\([^ \t\n]+\\)")
- (let* ((name (buffer-substring
- (match-beginning 1) (match-end 1)))
- (start (progn (skip-chars-forward " \t") (point))))
- (end-of-line)
-; (message "** %s \"%s\"" name (buffer-substring start (point)))(sit-for 1)
- (define-mail-abbrev
- name
- (buffer-substring start (point))
- t))))
- ;; Resolve forward references in .mailrc file.
- ;; This would happen automatically before the first abbrev was
- ;; expanded, but why not do it now.
- (or recursivep (mail-resolve-all-aliases))
- mail-abbrevs)
- (if buffer (kill-buffer buffer))
- (set-buffer obuf)))
- (message "Parsing %s... done" file))
+ (with-temp-buffer
+ (buffer-disable-undo)
+ (cond ((get-file-buffer file)
+ (insert (with-current-buffer (get-file-buffer file)
+ (buffer-substring (point-min) (point-max)))))
+ ((not (file-exists-p file)))
+ (t (insert-file-contents file)))
+ ;; Don't lose if no final newline.
+ (goto-char (point-max))
+ (or (eq (preceding-char) ?\n) (newline))
+ (goto-char (point-min))
+ ;; Delete comments from the file
+ (while (search-forward "# " nil t)
+ (let ((p (- (point) 2)))
+ (end-of-line)
+ (delete-region p (point))))
+ (goto-char (point-min))
+ ;; handle "\\\n" continuation lines
+ (while (not (eobp))
+ (end-of-line)
+ (if (= (preceding-char) ?\\)
+ (progn (delete-char -1) (delete-char 1) (insert ?\ ))
+ (forward-char 1)))
+ (goto-char (point-min))
+ (while (re-search-forward
+ "^\\(a\\(lias\\)?\\|g\\(roup\\)?\\|source\\)[ \t]+" nil t)
+ (beginning-of-line)
+ (if (looking-at "source[ \t]+\\([^ \t\n]+\\)")
+ (progn
+ (end-of-line)
+ (build-mail-abbrevs
+ (substitute-in-file-name
+ (buffer-substring (match-beginning 1) (match-end 1)))
+ t))
+ (re-search-forward "[ \t]+\\([^ \t\n]+\\)")
+ (let* ((name (buffer-substring
+ (match-beginning 1) (match-end 1)))
+ (start (progn (skip-chars-forward " \t") (point))))
+ (end-of-line)
+ ;; (message "** %s \"%s\"" name (buffer-substring start (point)))(sit-for 1)
+ (define-mail-abbrev
+ name
+ (buffer-substring start (point))
+ t))))
+ ;; Resolve forward references in .mailrc file.
+ ;; This would happen automatically before the first abbrev was
+ ;; expanded, but why not do it now.
+ (or recursivep (mail-resolve-all-aliases))
+ mail-abbrevs)
+ (message "Parsing %s... done" file))
(defvar mail-alias-separator-string ", "
"*A string inserted between addresses in multi-address mail aliases.
@@ -280,12 +268,7 @@ If DEFINITION contains multiple addresses, separate them with commas."
;; true, and we do some evil space->comma hacking like /bin/mail does.
(interactive "sDefine mail alias: \nsDefine %s as mail alias for: ")
;; Read the defaults first, if we have not done so.
- (if (vectorp mail-abbrevs)
- nil
- (setq mail-abbrevs nil)
- (define-abbrev-table 'mail-abbrevs '())
- (if (file-exists-p mail-personal-alias-file)
- (build-mail-abbrevs)))
+ (unless (vectorp mail-abbrevs) (build-mail-abbrevs))
;; strip garbage from front and end
(if (string-match "\\`[ \t\n,]+" definition)
(setq definition (substring definition (match-end 0))))
@@ -454,72 +437,58 @@ of a mail alias. The value is set up, buffer-local, when first needed.")
(rfc822-goto-eoh)
(point)))))))
-(defun sendmail-pre-abbrev-expand-hook ()
- (and (and mail-abbrevs (not (eq mail-abbrevs t)))
- (if (mail-abbrev-in-expansion-header-p)
-
- ;; We are in a To: (or CC:, or whatever) header, and
- ;; should use word-abbrevs to expand mail aliases.
- (let ((local-abbrev-table mail-abbrevs)
- (old-syntax-table (syntax-table)))
-
- ;; Before anything else, resolve aliases if they need it.
- (and mail-abbrev-aliases-need-to-be-resolved
- (mail-resolve-all-aliases))
-
- ;; Now proceed with the abbrev section.
- ;; - We already installed mail-abbrevs as the abbrev table.
- ;; - Then install the mail-abbrev-syntax-table, which
- ;; temporarily marks all of the
- ;; non-alphanumeric-atom-characters (the "_"
- ;; syntax ones) as being normal word-syntax. We do this
- ;; because the C code for expand-abbrev only works on words,
- ;; and we want these characters to be considered words for
- ;; the purpose of abbrev expansion.
- ;; - Then we call expand-abbrev again, recursively, to do
- ;; the abbrev expansion with the above syntax table.
- ;; - Restore the previous syntax table.
- ;; - Then we do a trick which tells the expand-abbrev frame
- ;; which invoked us to not continue (and thus not
- ;; expand twice.) This means that any abbrev expansion
- ;; will happen as a result of this function's call to
- ;; expand-abbrev, and not as a result of the call to
- ;; expand-abbrev which invoked *us*.
-
- (mail-abbrev-make-syntax-table)
-
- ;; If the character just typed was non-alpha-symbol-syntax,
- ;; then don't expand the abbrev now (that is, don't expand
- ;; when the user types -.) Check the character's syntax in
- ;; the usual syntax table.
-
- (or (and (integerp last-command-char)
- ;; Some commands such as M-> may want to expand first.
- (equal this-command 'self-insert-command)
- (or (eq (char-syntax last-command-char) ?_)
- ;; Don't expand on @.
- (memq last-command-char '(?@ ?. ?% ?! ?_ ?-))))
- (let ((pre-abbrev-expand-hook nil)) ; That's us; don't loop.
- ;; Use this table so that abbrevs can have hyphens in them.
- (set-syntax-table mail-abbrev-syntax-table)
- (unwind-protect
- (expand-abbrev)
- ;; Now set it back to what it was before.
- (set-syntax-table old-syntax-table))))
- (setq abbrev-start-location (point-max) ; This is the trick.
- abbrev-start-location-buffer (current-buffer)))
-
- (if (or (not mail-abbrevs-only)
- (eq this-command 'expand-abbrev))
- ;; We're not in a mail header where mail aliases should
- ;; be expanded, then use the normal mail-mode abbrev table
- ;; (if any) and the normal mail-mode syntax table.
- nil
- ;; This is not a mail abbrev, and we should not expand it.
- ;; This kludge stops expand-abbrev from doing anything.
- (setq abbrev-start-location (point-max)
- abbrev-start-location-buffer (current-buffer))))
- ))
+(defun mail-abbrev-expand-wrapper (expand)
+ (if (and mail-abbrevs (not (eq mail-abbrevs t)))
+ (if (mail-abbrev-in-expansion-header-p)
+
+ ;; We are in a To: (or CC:, or whatever) header, and
+ ;; should use word-abbrevs to expand mail aliases.
+ (let ((local-abbrev-table mail-abbrevs))
+
+ ;; Before anything else, resolve aliases if they need it.
+ (and mail-abbrev-aliases-need-to-be-resolved
+ (mail-resolve-all-aliases))
+
+ ;; Now proceed with the abbrev section.
+ ;; - We already installed mail-abbrevs as the abbrev table.
+ ;; - Then install the mail-abbrev-syntax-table, which
+ ;; temporarily marks all of the
+ ;; non-alphanumeric-atom-characters (the "_"
+ ;; syntax ones) as being normal word-syntax. We do this
+ ;; because the C code for expand-abbrev only works on words,
+ ;; and we want these characters to be considered words for
+ ;; the purpose of abbrev expansion.
+ ;; - Then we call the expand function, to do
+ ;; the abbrev expansion with the above syntax table.
+
+ (mail-abbrev-make-syntax-table)
+
+ ;; If the character just typed was non-alpha-symbol-syntax,
+ ;; then don't expand the abbrev now (that is, don't expand
+ ;; when the user types -.) Check the character's syntax in
+ ;; the usual syntax table.
+
+ (or (and (integerp last-command-char)
+ ;; Some commands such as M-> may want to expand first.
+ (equal this-command 'self-insert-command)
+ (or (eq (char-syntax last-command-char) ?_)
+ ;; Don't expand on @.
+ (memq last-command-char '(?@ ?. ?% ?! ?_ ?-))))
+ ;; Use this table so that abbrevs can have hyphens in them.
+ (with-syntax-table mail-abbrev-syntax-table
+ (funcall expand))))
+
+ (if (or (not mail-abbrevs-only)
+ (eq this-command 'expand-abbrev))
+ ;; We're not in a mail header where mail aliases should
+ ;; be expanded, then use the normal mail-mode abbrev table
+ ;; (if any) and the normal mail-mode syntax table.
+ (funcall expand)
+ ;; This is not a mail abbrev, and we should not expand it.
+ ;; Don't expand anything.
+ nil))
+ ;; No mail-abbrevs at all, do the normal thing.
+ (funcall expand)))
;;; utilities
@@ -568,14 +537,11 @@ of a mail alias. The value is set up, buffer-local, when first needed.")
(interactive)
(mail-abbrev-make-syntax-table)
(let* ((end (point))
- (syntax-table (syntax-table))
- (beg (unwind-protect
- (save-excursion
- (set-syntax-table mail-abbrev-syntax-table)
- (backward-word 1)
- (point))
- (set-syntax-table syntax-table)))
- (alias (buffer-substring beg end))
+ (beg (with-syntax-table mail-abbrev-syntax-table
+ (save-excursion
+ (backward-word 1)
+ (point))))
+ (alias (buffer-substring beg end))
(completion (try-completion alias mail-abbrevs)))
(cond ((eq completion t)
(message "%s" alias)) ; confirm
@@ -612,7 +578,7 @@ and more reliable (no dependence on goal column, etc.)."
(interactive "p")
(if (looking-at "[ \t]*\n") (expand-abbrev))
(setq this-command 'next-line)
- (next-line arg))
+ (with-no-warnings (next-line arg)))
(defun mail-abbrev-end-of-buffer (&optional arg)
"Expand any mail abbrev, then move point to end of buffer.
@@ -638,8 +604,5 @@ Don't use this command in Lisp programs!
(provide 'mailabbrev)
-(if mail-abbrevs-mode
- (mail-abbrevs-enable))
-
-;;; arch-tag: 5aa2d901-73f8-4ad7-b73c-4802282ad2ff
+;; arch-tag: 5aa2d901-73f8-4ad7-b73c-4802282ad2ff
;;; mailabbrev.el ends here
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 988ce2f8e02..514bf4fe5f3 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -272,9 +272,9 @@ Buffer is not displayed if SHOW is non-nil."
(end-of-line)
(point)))
mspools-files-len)
- (next-line (- 1 mspools-files-len)) ;back to top of list
+ (forward-line (- 1 mspools-files-len)) ;back to top of list
;; else just on to next line
- (next-line 1))
+ (forward-line 1))
;; Choose whether to use VM or RMAIL for reading folder.
(if mspools-using-vm
diff --git a/lisp/mail/reporter.el b/lisp/mail/reporter.el
index 5c6bcb83efd..596c7ee9627 100644
--- a/lisp/mail/reporter.el
+++ b/lisp/mail/reporter.el
@@ -252,7 +252,7 @@ dumped."
(erase-buffer)
(insert "(setq\n")
(lisp-indent-line)
- (mapcar
+ (mapc
(function
(lambda (varsym-or-cons-cell)
(let ((varsym (or (car-safe varsym-or-cons-cell)
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 0dd65f5191a..53296cfb0fe 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -1,7 +1,8 @@
;;; rmail.el --- main code of "RMAIL" mail reader for Emacs
;; Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998,
-;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: mail
@@ -204,7 +205,7 @@ We do this by executing it with `--version' and analyzing its output."
'emacs))))))
(defun rmail-autodetect ()
- "Determine and return the file name of the `movemail' program.
+ "Determine the file name of the `movemail' program and return its flavor.
If `rmail-movemail-program' is non-nil, use it.
Otherwise, look for `movemail' in the directories in
`rmail-movemail-search-path', those in `exec-path', and `exec-directory'."
@@ -1460,7 +1461,7 @@ original copy."
(defun rmail-list-to-menu (menu-name l action &optional full-name)
(let ((menu (make-sparse-keymap menu-name)))
- (mapcar
+ (mapc
(function (lambda (item)
(let (command)
(if (consp item)
diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el
index 5803661bc6e..baf99cfd54a 100644
--- a/lisp/mail/sendmail.el
+++ b/lisp/mail/sendmail.el
@@ -767,7 +767,13 @@ Prefix arg means don't delete this window."
"Bury this mail buffer."
(let ((newbuf (other-buffer (current-buffer))))
(bury-buffer (current-buffer))
- (if (and (or (window-dedicated-p (frame-selected-window))
+ (if (and (or nil
+ ;; In this case, we need to go to a different frame.
+ (window-dedicated-p (frame-selected-window))
+ ;; In this mode of operation, the frame was probably
+ ;; made for this buffer, so the user probably wants
+ ;; to delete it now.
+ (and pop-up-frames (one-window-p))
(cdr (assq 'mail-dedicated-frame (frame-parameters))))
(not (null (delq (selected-frame) (visible-frame-list)))))
(progn
@@ -985,6 +991,19 @@ See also the function `select-message-coding-system'.")
nil)
(t (error "Invalid value for `mail-from-style'")))))
+;; Normally you will not need to modify these options unless you are
+;; using some non-genuine substitute for sendmail which does not
+;; implement each and every option that the original supports.
+;; E.g., ssmtp does not support "-odb", so, if your site uses it,
+;; you will need to modify `sendmail-error-reporting-non-interactive'
+;; in your site-init.el.
+(defvar sendmail-error-reporting-interactive
+ ;; These mean "report errors to terminal" and "deliver interactively"
+ '("-oep" "-odi"))
+(defvar sendmail-error-reporting-non-interactive
+ ;; These mean "report errors by mail" and "deliver in background".
+ '("-oem" "-odb"))
+
(defun sendmail-send-it ()
"Send the current mail buffer using the Sendmail package.
This is a suitable value for `send-mail-function'. It sends using the
@@ -1129,12 +1148,8 @@ external program defined by `sendmail-program'."
(and mail-alias-file
(list (concat "-oA" mail-alias-file)))
(if mail-interactive
- ;; These mean "report errors to terminal"
- ;; and "deliver interactively"
- '("-oep" "-odi")
- ;; These mean "report errors by mail"
- ;; and "deliver in background".
- '("-oem" "-odb"))
+ sendmail-error-reporting-interactive
+ sendmail-error-reporting-non-interactive)
;; Get the addresses from the message
;; unless this is a resend.
;; We must not do that for a resend
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index cf9c9369497..61e7d0a00eb 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -1038,12 +1038,12 @@ supplied, is used instead of the line point is on in the current buffer."
(let ((elements (length namelist))
(position -1)
keepers filtered-list)
- (mapcar
+ (mapc
(function
(lambda (name)
(setq position (1+ position))
(let ((keep-p t))
- (mapcar
+ (mapc
(function
(lambda (filter)
(let ((regexp (car filter))
@@ -1061,7 +1061,7 @@ supplied, is used instead of the line point is on in the current buffer."
(setq keepers (cons position keepers)))
)))
namelist)
- (mapcar
+ (mapc
(function
(lambda (position)
(setq filtered-list (cons (nth position namelist) filtered-list))
diff --git a/lisp/mail/vms-pmail.el b/lisp/mail/vms-pmail.el
index 2d01e2a612b..022a8070a2e 100644
--- a/lisp/mail/vms-pmail.el
+++ b/lisp/mail/vms-pmail.el
@@ -110,7 +110,7 @@ First try the file indicated by environment variable MAIL$TRAILER.
If that fails, try the file \"~/.signature\".
If neither file exists, fails quietly."
(interactive)
- (end-of-buffer)
+ (goto-char (point-max))
(newline)
(if (vms-system-info "LOGICAL" "MAIL$TRAILER")
(if (file-attributes (vms-system-info "LOGICAL" "MAIL$TRAILER"))
diff --git a/lisp/makefile.w32-in b/lisp/makefile.w32-in
index 1da46b7684e..71f5ce96b2a 100644
--- a/lisp/makefile.w32-in
+++ b/lisp/makefile.w32-in
@@ -186,7 +186,7 @@ cvs-update: recompile autoloads finder-data custom-deps
# Update the AUTHORS file.
update-authors:
- $(emacs) -l authors -f batch-update-authors $(srcdir)/AUTHORS $(srcdir)
+ $(emacs) -l authors -f batch-update-authors $(srcdir)/etc/AUTHORS $(srcdir)
TAGS: $(lisptagsfiles1) $(lisptagsfiles2)
$(ETAGS) $(lisptagsfiles1) $(lisptagsfiles2)
diff --git a/lisp/mb-depth.el b/lisp/mb-depth.el
new file mode 100644
index 00000000000..c1fd0780730
--- /dev/null
+++ b/lisp/mb-depth.el
@@ -0,0 +1,78 @@
+;;; mb-depth.el --- Indicate minibuffer-depth in prompt
+;;
+;; Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+;;
+;; Author: Miles Bader <miles@gnu.org>
+;; Keywords: convenience
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, 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:
+;;
+;; Defines the minor mode `minibuffer-indicate-depth-mode'.
+;;
+;; When active, any recursive use of the minibuffer will show
+;; the recursion depth in the minibuffer prompt. This is only
+;; useful if `enable-recursive-minibuffers' is non-nil.
+
+;;; Code:
+
+(defvar minibuf-depth-indicator-function nil
+ "If non-nil, function to set up the minibuffer depth indicator.
+It is called with one argument, the minibuffer depth,
+and must return a string.")
+
+;; An overlay covering the prompt. This is a buffer-local variable in
+;; each affected minibuffer.
+;;
+(defvar minibuf-depth-overlay)
+(make-variable-buffer-local 'minibuf-depth-overlay)
+
+;; This function goes on minibuffer-setup-hook
+(defun minibuf-depth-setup-minibuffer ()
+ "Set up a minibuffer for `minibuffer-indicate-depth-mode'.
+The prompt should already have been inserted."
+ (when (> (minibuffer-depth) 1)
+ (setq minibuf-depth-overlay (make-overlay (point-min) (1+ (point-min))))
+ (overlay-put minibuf-depth-overlay 'before-string
+ (if minibuf-depth-indicator-function
+ (funcall minibuf-depth-indicator-function (minibuffer-depth))
+ (propertize (format "[%d]" (minibuffer-depth)) 'face 'highlight)))
+ (overlay-put minibuf-depth-overlay 'evaporate t)))
+
+;;;###autoload
+(define-minor-mode minibuffer-indicate-depth-mode
+ "Toggle Minibuffer Indicate Depth mode.
+When active, any recursive use of the minibuffer will show
+the recursion depth in the minibuffer prompt. This is only
+useful if `enable-recursive-minibuffers' is non-nil.
+
+With prefix argument ARG, turn on if positive, otherwise off.
+Returns non-nil if the new state is enabled."
+ :global t
+ :group 'minibuffer
+ (if minibuffer-indicate-depth-mode
+ ;; Enable the mode
+ (add-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)
+ ;; Disable the mode
+ (remove-hook 'minibuffer-setup-hook 'minibuf-depth-setup-minibuffer)))
+
+(provide 'mb-depth)
+
+;; arch-tag: 50224089-5bf5-46f8-803d-18f018c5eacf
+;;; mb-depth.el ends here
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 525ed0dd7af..116d7842053 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -504,11 +504,14 @@ A large number or nil slows down menu responsiveness."
;; These are alternative definitions for the cut, paste and copy
;; menu items. Use them if your system expects these to use the clipboard.
-(put 'clipboard-kill-region 'menu-enable 'mark-active)
+(put 'clipboard-kill-region 'menu-enable
+ '(and mark-active (not buffer-read-only)))
(put 'clipboard-kill-ring-save 'menu-enable 'mark-active)
(put 'clipboard-yank 'menu-enable
- '(or (and (fboundp 'x-selection-exists-p) (x-selection-exists-p))
- (x-selection-exists-p 'CLIPBOARD)))
+ '(and (or (and (fboundp 'x-selection-exists-p)
+ (x-selection-exists-p))
+ (x-selection-exists-p 'CLIPBOARD))
+ (not buffer-read-only)))
(defun clipboard-yank ()
"Insert the clipboard contents, or the last stretch of killed text."
@@ -930,15 +933,15 @@ mail status in mode line"))
:button `(:toggle . tooltip-mode)))
(define-key menu-bar-showhide-menu [menu-bar-mode]
- '(menu-item "Menu-bar" menu-bar-mode
+ '(menu-item "Menu-bar" toggle-menu-bar-mode-from-frame
:help "Turn menu-bar on/off"
- :button (:toggle . menu-bar-mode)))
+ :button (:toggle . (> (frame-parameter nil 'menu-bar-lines) 0))))
(define-key menu-bar-showhide-menu [showhide-tool-bar]
- (list 'menu-item "Tool-bar" 'tool-bar-mode
- :help "Turn tool-bar on/off"
+ (list 'menu-item "Tool-bar" 'toggle-tool-bar-mode-from-frame
+ :help "Toggle tool-bar on/off"
:visible `(display-graphic-p)
- :button `(:toggle . tool-bar-mode)))
+ :button `(:toggle . (> (frame-parameter nil 'tool-bar-lines) 0))))
(define-key menu-bar-options-menu [showhide]
(list 'menu-item "Show/Hide" menu-bar-showhide-menu))
@@ -1751,18 +1754,10 @@ turn on menu bars; otherwise, turn off menu bars."
:init-value nil
:global t
:group 'frames
+
;; Make menu-bar-mode and default-frame-alist consistent.
- (let ((lines (if menu-bar-mode 1 0)))
- ;; Alter existing frames...
- (mapc (lambda (frame)
- (modify-frame-parameters frame
- (list (cons 'menu-bar-lines lines))))
- (frame-list))
- ;; ...and future ones.
- (let ((elt (assq 'menu-bar-lines default-frame-alist)))
- (if elt
- (setcdr elt lines)
- (add-to-list 'default-frame-alist (cons 'menu-bar-lines lines)))))
+ (modify-all-frames-parameters (list (cons 'menu-bar-lines
+ (if menu-bar-mode 1 0))))
;; Make the message appear when Emacs is idle. We can not call message
;; directly. The minor-mode message "Menu-bar mode disabled" comes
@@ -1772,6 +1767,30 @@ turn on menu bars; otherwise, turn off menu bars."
"Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear."))
menu-bar-mode)
+(defun toggle-menu-bar-mode-from-frame (&optional arg)
+ "Toggle menu bar on or off, based on the status of the current frame.
+See `menu-bar-mode' for more information."
+ (interactive (list (or current-prefix-arg 'toggle)))
+ (if (eq arg 'toggle)
+ (menu-bar-mode (if (> (frame-parameter nil 'menu-bar-lines) 0) 0 1))
+ (menu-bar-mode arg)))
+
+(defun menu-bar-open (&optional frame)
+ "Start key navigation of the menu bar in FRAME.
+
+This function decides which method to use to access the menu
+depending on FRAME's terminal device. On X displays, it calls
+`x-menu-bar-open'; otherwise it calls `tmm-menubar'.
+
+If FRAME is nil or not given, use the selected frame."
+ (interactive)
+ (if (eq window-system 'x)
+ (x-menu-bar-open frame)
+ (with-selected-frame (or frame (selected-frame))
+ (tmm-menubar))))
+
+(global-set-key [f10] 'menu-bar-open)
+
(provide 'menu-bar)
;; arch-tag: 6e6a3c22-4ec4-4d3d-8190-583f8ef94ced
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index f8134b0911e..25b83463958 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -1,3 +1,77 @@
+2007-11-17 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * mh-e.el (mh-xemacs-flag): Remove.
+ (mh-min-colors-defined-flag):
+ * mh-xface.el (mh-show-xface-function):
+ * mh-utils.el (mh-colors-available-p):
+ * mh-show.el (mh-show-mode):
+ * mh-gnus.el (mh-gnus-local-map-property):
+ * mh-folder.el (mh-folder-mode-map)
+ (mh-remove-xemacs-horizontal-scrollbar, mh-folder-mode):
+ * mh-comp.el (mh-insert-x-mailer): Replace uses of mh-xemacs-flag
+ with (featurep 'xemacs).
+
+2007-09-11 Bill Wohler <wohler@newt.com>
+
+ * mh-e.el (Version, mh-version): Add +cvs to version.
+
+2007-08-25 Stephen Gildea <gildea@stop.mail-abuse.org>
+
+ * mh-e.el (mh-annotate-msg-hook): New variable.
+
+ * mh-comp.el (mh-annotate-msg): Call new mh-annotate-msg-hook.
+ (mh-annotate-list): New variable, for mh-annotate-msg-hook.
+
+2007-08-21 Jeffrey C Honig <jch@honig.net>
+
+ * mh-folder.el (mh-folder-message-menu, mh-folder-mode-map): Add
+ folder mode support for mh-show-preferred-alternative (closes SF
+ #1777321).
+
+ * mh-show.el (mh-show-preferred-alternative)
+ (mh-show-write-message-to-file, mh-show-message-menu)
+ (mh-show-mode-map): Add mh-show-preferred-alternative (bound to
+ ":") which will show the message's preferred alternative
+ overriding the users configured preference. Useful for showing
+ HTML when text content is lacking (closes SF #1777321).
+
+ * mh-e.el:
+ (mh-invisible-header-fields-internal): Exclude Fax and Phone. Put
+ known exclusions as comments before the list and move parens to
+ separate lines to aid in sorting (closes SF #1701231).
+
+ * mh-mime.el (mm-decode-body): Remove explicit autoload of
+ mh-alias-expand.
+
+ * mh-alias.el (mh-alias-expand): Set up automatic autoload of
+ mh-alias-expand.
+
+2007-08-20 Jeffrey C Honig <jch@honig.net>
+
+ * mh-mime.el (message-options-set): Add missing autoloads from my
+ last change.
+
+ * mh-comp.el (mh-forward): When forwarding with mml, messages are
+ no longer included in reverse order (closes SF #1730393).
+
+ * mh-mime.el (mh-mml-forward-message): Forward messages as inline
+ attatchments (closes SF #1378993).
+
+2007-08-19 Jeffrey C Honig <jch@honig.net>
+
+ * mh-e.el (mh-invisible-header-fields-internal): We want to show
+ Comments: and hide Comment:, not the other way around.
+
+ * mh-mime.el (mh-mml-to-mime): GPG requires e-mail addresses, not
+ aliases. So resolve aliases before passing addresses to GPG/PGP
+ (closes SF #649226).
+
+ * mh-e.el (mh-invisible-header-fields-internal): Update with all
+ the entries from
+ http://people.dsv.su.se/~jpalme/ietf/mail-headers, plus some of my
+ own. I added attributions to entries we already had that did not
+ list an RFC.
+
2007-08-08 Glenn Morris <rgm@gnu.org>
* mh-folder.el, mh-letter.el, mh-show.el: Replace `iff' in
@@ -7,6 +81,11 @@
* Relicense all FSF files to GPLv3 or later.
+2007-07-11 Bill Wohler <wohler@newt.com>
+
+ * mh-compat.el (mh-display-color-cells): Fix on XEmacs 21.5b28.
+ Thanks to Henrique Martins for the help (closes SF #1749774).
+
2007-06-06 Juanma Barranquero <lekktu@gmail.com>
* mh-mime.el (mh-mh-directive-present-p):
diff --git a/lisp/mh-e/mh-alias.el b/lisp/mh-e/mh-alias.el
index 88ba26f127e..333cfb3a4b0 100644
--- a/lisp/mh-e/mh-alias.el
+++ b/lisp/mh-e/mh-alias.el
@@ -244,6 +244,7 @@ returns the string unchanged if not defined. The same is done here."
(message "%s" (error-message-string err))
alias))))
+;;;###mh-autoload
(defun mh-alias-expand (alias)
"Return expansion for ALIAS.
Blind aliases or users from /etc/passwd are not expanded."
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index b74c445238e..2dcc3d52825 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -136,6 +136,10 @@ Used by the \\[mh-edit-again] and \\[mh-extract-rejected-mail] commands.")
(defvar mh-annotate-field nil
"Field name for message annotation.")
+(defvar mh-annotate-list nil
+ "Messages annotated, either a sequence name or a list of message numbers.
+This variable can be used by `mh-annotate-msg-hook'.")
+
(defvar mh-insert-auto-fields-done-local nil
"Buffer-local variable set when `mh-insert-auto-fields' called successfully.")
(make-variable-buffer-local 'mh-insert-auto-fields-done-local)
@@ -497,7 +501,9 @@ See also `mh-compose-forward-as-mime-flag',
(dolist (msg msgs)
(setq i (1+ i))
(mh-mml-forward-message (format description i)
- folder msg))))))
+ folder msg)
+ ;; Was inserted before us, move to end of file to preserve order
+ (goto-char (point-max)))))))
;; Postition just before forwarded message
(if (re-search-forward "^------- Forwarded Message" nil t)
(forward-line -1)
@@ -922,8 +928,8 @@ The versions of MH-E, Emacs, and MH are shown."
(setq mh-x-mailer-string
(format "MH-E %s; %s; %sEmacs %s"
mh-version mh-variant-in-use
- (if mh-xemacs-flag "X" "GNU ")
- (cond ((not mh-xemacs-flag)
+ (if (featurep 'xemacs) "X" "GNU ")
+ (cond ((not (featurep 'xemacs))
(string-match "[0-9]+\\.[0-9]+\\(\\.[0-9]+\\)?"
emacs-version)
(match-string 0 emacs-version))
@@ -973,18 +979,23 @@ This should be the last function called when composing the draft."
(goto-char (point-max))
(mh-letter-next-header-field)))
-(defun mh-annotate-msg (msg buffer note &rest args)
- "Mark MSG in BUFFER with character NOTE and annotate message with ARGS.
-MSG can be a message number, a list of message numbers, or a
-sequence."
- (apply 'mh-exec-cmd "anno" buffer
+(defun mh-annotate-msg (msg folder note &rest args)
+ "Mark MSG in FOLDER with character NOTE and annotate message with ARGS.
+MSG can be a message number, a list of message numbers, or a sequence.
+The hook `mh-annotate-msg-hook' is run after annotating; see its
+documentation for variables it can use."
+ (apply 'mh-exec-cmd "anno" folder
(if (listp msg) (append msg args) (cons msg args)))
(save-excursion
- (cond ((get-buffer buffer) ; Buffer may be deleted
- (set-buffer buffer)
+ (cond ((get-buffer folder) ; Buffer may be deleted
+ (set-buffer folder)
(mh-iterate-on-range nil msg
(mh-notate nil note
- (+ mh-cmd-note mh-scan-field-destination-offset)))))))
+ (+ mh-cmd-note mh-scan-field-destination-offset))))))
+ (let ((mh-current-folder folder)
+ ;; mh-annotate-list is a sequence name or a list of message numbers
+ (mh-annotate-list (if (numberp msg) (list msg) msg)))
+ (run-hooks 'mh-annotate-msg-hook)))
(defun mh-insert-header-separator ()
"Insert `mh-mail-header-separator', if absent."
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index 988ebc4ee10..58c52a51a0c 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -77,13 +77,17 @@ introduced in Emacs 22."
'cancel-timer
'delete-itimer))
-(defun-mh mh-display-color-cells display-color-cells (&optional display)
+(defun mh-display-color-cells (&optional display)
"Return the number of color cells supported by DISPLAY.
-This function is used by XEmacs to return 2 when
-`device-color-cells' returns nil. This happens when compiling or
+This function is used by XEmacs to return 2 when `device-color-cells'
+or `display-color-cells' returns nil. This happens when compiling or
running on a tty and causes errors since `display-color-cells' is
expected to return an integer."
- (or (device-color-cells display) 2))
+ (cond ((fboundp 'display-color-cells) ; GNU Emacs, XEmacs 21.5b28
+ (or (display-color-cells display) 2))
+ ((fboundp 'device-color-cells) ; XEmacs 21.4
+ (or (device-color-cells display) 2))
+ (t 2)))
(defmacro mh-display-completion-list (completions &optional common-substring)
"Display the list of COMPLETIONS.
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 200998da4ca..69454110701 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -6,7 +6,7 @@
;; Author: Bill Wohler <wohler@newt.com>
;; Maintainer: Bill Wohler <wohler@newt.com>
-;; Version: 8.0.3
+;; Version: 8.0.3+cvs
;; Keywords: mail
;; This file is part of GNU Emacs.
@@ -99,10 +99,6 @@
(require 'mh-buffers)
(require 'mh-compat)
-(eval-and-compile
- (defvar mh-xemacs-flag (featurep 'xemacs)
- "Non-nil means the current Emacs is XEmacs."))
-
(mh-do-in-xemacs
(require 'mh-xemacs))
@@ -133,7 +129,7 @@
;; Try to keep variables local to a single file. Provide accessors if
;; variables are shared. Use this section as a last resort.
-(defconst mh-version "8.0.3" "Version number of MH-E.")
+(defconst mh-version "8.0.3+cvs" "Version number of MH-E.")
;; Variants
@@ -2381,132 +2377,208 @@ of citations entirely, choose \"None\"."
:group 'mh-show
:package-version '(MH-E . "8.0"))
+;; Theese entries have been intentionally excluded by the developers.
+;; "X-Operator:" ; Similar to X-Mailer, so display it
+;; "Comments:" ; RFC 2822 - show this one
+;; "Fax:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+;; "Mail-System-Version:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+;; "Mailer:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+;; "Phone:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+;; "Reply-By:" ; RFC 2156
+;; "Reply-To:" ; RFC 2822
+;; "User-Agent:" ; Similar to X-Mailer, so display it.
+;;
;; Keep fields alphabetized. Mention source, if known.
(defvar mh-invisible-header-fields-internal
- '("Approved:"
- "Autoforwarded:"
+ '(
+ "Abuse-Reports-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Also-Control:" ; H. Spencer: News Article Format and Transmission, June 1994
+ "Alternate-recipient:" ; RFC 2156
+ "Approved-By:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Approved:" ; RFC 1036
+ "Article-Names:" ; H. Spencer: News Article Format and Transmission, June 1994
+ "Article-Updates:" ; H. Spencer: News Article Format and Transmission, June 1994
+ "Authentication-Results:"
+ "Auto-forwarded:" ; RFC 2156
+ "Autoforwarded:" ; RFC 2156
"Bestservhost:"
+ "Cancel-Key:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Cancel-Lock:" ; NNTP posts
- "Content-" ; RFC 2045
- "Delivered-To:" ; Egroups/yahoogroups mailing list manager
- "Delivery-Date:" ; MH
+ "Comment:" ; Shows up with DomainKeys
+ "Content-" ; RFC 2045, 1123, 1766, 1864, 2045, 2110, 2156, 2183, 2912
+ "Control:" ; RFC 1036
+ "Conversion-With-Loss:" ; RFC 2156
+ "Conversion:" ; RFC 2156
+ "DKIM-" ; http://antispam.yahoo.com/domainkeys
+ "DL-Expansion-History:" ; RFC 2156
+ "Delivered-To:" ; Egroups/yahoogroups mailing list manager
+ "Delivery-Date:" ; RFC 2156
"Delivery:"
- "DomainKey-Signature:" ;http://antispam.yahoo.com/domainkeys
- "Encoding:"
+ "Discarded-X400-" ; RFC 2156
+ "Disclose-Recipients:" ; RFC 2156
+ "Disposition-Notification-Options:" ; RFC 2298
+ "Disposition-Notification-To:" ; RFC 2298
+ "Distribution:" ; RFC 1036
+ "DomainKey-" ; http://antispam.yahoo.com/domainkeys
+ "Encoding:" ; RFC 1505
"Envelope-to:"
- "Errors-To:"
+ "Errors-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Expires:" ; RFC 1036
+ "Expiry-Date:" ; RFC 2156
"Face:" ; Gnus Face header
+ "Followup-To:" ; RFC 1036
+ "For-Approval:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "For-Comment:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "For-Handdling:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Forwarded:" ; MH
"From " ; sendmail
- "Importance:" ; MS Outlook
- "In-Reply-To:" ; MH
- "Lines:"
- "List-" ; Mailman mailing list manager
- "List-" ; Unknown mailing list managers
- "List-Subscribe:" ; Unknown mailing list managers
- "List-Unsubscribe:" ; Unknown mailing list managers
+ "Generate-Delivery-Report:" ; RFC 2156
+ "Importance:" ; RFC 2156, 2421
+ "In-Reply-To:" ; RFC 2822
+ "Incomplete-Copy:" ; RFC 2156
+ "Keywords:" ; RFC 2822
+ "Language:" ; RFC 2156
+ "Lines:" ; RFC 1036
+ "List-" ; RFC 2369, 2919
+ "Mail-Copies-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Mail-Followup-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Mail-Reply-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Mail-from:" ; MH
- "Mailing-List:" ; Egroups/yahoogroups mailing list manager
+ "Mailing-List:" ; Egroups/yahoogroups mailing list manager
+ "Message-Content:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Message-Id:" ; RFC 822
+ "Message-Type:" ; RFC 2156
"Mime-Version" ; RFC 2045
"NNTP-" ; News
+ "Newsgroups:" ; RFC 1036
+ "Obsoletes:" ; RFC 2156
"Old-Return-Path:"
- "Original-Encoded-Information-Types:" ; X400
+ "OpenPGP:"
+ "Original-Encoded-Information-Types:" ; RFC 2156
"Original-Lines:" ; mail to news
"Original-NNTP-" ; mail to news
"Original-Newsgroups:" ; mail to news
"Original-Path:" ; mail to news
"Original-Received:" ; mail to news
+ "Original-Recipt:" ; RFC 2298
"Original-To:" ; mail to news
"Original-X-" ; mail to news
- "Originator:"
+ "Origination-Client:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Originator:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"P1-Content-Type:" ; X400
"P1-Message-Id:" ; X400
"P1-Recipient:" ; X400
- "Path:"
- "Precedence:"
+ "Path:" ; RFC 1036
+ "Pics-Label:" ; W3C
+ "Posted-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Precedence:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Prev-Resent" ; MH
- "Priority:"
- "Received:" ; RFC 822
+ "Prevent-NonDelivery-Report:" ; RFC 2156
+ "Priority:" ; RFC 2156
+ "Read-Receipt-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Received-SPF:" ; Gmail
- "References:"
+ "Received:" ; RFC 822
+ "References:" ; RFC 2822
+ "Registered-Mail-Reply-Requested-By:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Remailed-" ; MH
+ "Replaces:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Replied:" ; MH
- "Resent" ; MH
+ "Resent-" ; RFC 2822
"Return-Path:" ; RFC 822
- "Sensitivity:" ; MS Outlook
+ "Return-Receipt-Requested:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Return-Receipt-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "See-Also:" ; H. Spencer: News Article Format and Transmission, June 1994
+ "Sensitivity:" ; RFC 2156, 2421
+ "Speach-Act:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Status:" ; sendmail
+ "Supersedes:" ; H. Spencer: News Article Format and Transmission, June 1994
+ "Telefax:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Thread-"
+ "Translated-By:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "Translation-Of:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"Ua-Content-Id:" ; X400
-;; "User-Agent:" ; Similar to X-Mailer, so display it.
"Via:" ; MH
+ "X-AMAZON" ; Amazon.com
"X-AOL-IP:" ; AOL WebMail
"X-Abuse-Info:"
"X-Abuse-and-DMCA-"
"X-Accept-Language:"
"X-Accept-Language:" ; Netscape/Mozilla
"X-Ack:"
+ "X-Admin:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Administrivia-To:"
"X-AntiAbuse:" ; cPanel
+ "X-Antivirus-Scanner:"
"X-Apparently-From:" ; MS Outlook
"X-Apparently-To:" ; Egroups/yahoogroups mailing list manager
+ "X-Attribution:"
+ "X-AuditID:"
+ "X-Authenticated-Info:" ; Verizon.net?
"X-Authenticated-Sender:" ; AT&T Message Center (webmail)
"X-Authentication-Warning:" ; sendmail
"X-Barracuda-" ; Barracuda spam scores
"X-Beenthere:" ; Mailman mailing list manager
+ "X-Bigfish:"
"X-Bogosity:" ; bogofilter
- "X-BrightmailFiltered:" ; Brightmail
"X-Brightmail-Tracker:" ; Brightmail
+ "X-BrightmailFiltered:" ; Brightmail
"X-Bugzilla-" ; Bugzilla
- "X-Complaints-To:"
+ "X-Comment:" ; AT&T Mailennium
+ "X-Complaints-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-Confirm-Reading-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-ContentStamp:" ; NetZero
+ "X-Cr-Hashedpuzzle:"
+ "X-Cr-Puzzleid:"
"X-Cron-Env:"
"X-DMCA"
"X-Delivered"
"X-EFL-Spamscore:" ; MIT alumni spam filtering
"X-ELNK-Trace:" ; Earthlink mailer
+ "X-Enigmail-Version:"
"X-Envelope-Date:" ; GNU mailutils
- "X-Envelope-From:"
+ "X-Envelope-From:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Envelope-Sender:"
- "X-Envelope-To:"
+ "X-Envelope-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-EviteMessageId:" ; evite.com
"X-Evolution:" ; Evolution mail client
- "X-Face:"
+ "X-ExtLoop"
+ "X-Face:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Folder:" ; Spam
"X-From-Line"
"X-Gmail-" ; Gmail
"X-Gnus-Mail-Source:" ; gnus
+ "X-Google-" ; Google mail
"X-Greylist:" ; milter-greylist-1.2.1
- "X-Habeas-SWE-1:" ; Spam
- "X-Habeas-SWE-2:" ; Spam
- "X-Habeas-SWE-3:" ; Spam
- "X-Habeas-SWE-4:" ; Spam
- "X-Habeas-SWE-5:" ; Spam
- "X-Habeas-SWE-6:" ; Spam
- "X-Habeas-SWE-7:" ; Spam
- "X-Habeas-SWE-8:" ; Spam
- "X-Habeas-SWE-9:" ; Spam
+ "X-HTTP-UserAgent:"
+ "X-Habeas-SWE-" ; Spam
"X-Hashcash:" ; hashcash
+ "X-IMAP:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-Image-URL:"
"X-Info:" ; NTMail
- "X-IronPort-AV:" ; IronPort AV
+ "X-IronPort-" ; IronPort AV
"X-Juno-" ; Juno
- "X-List-Host:" ; Unknown mailing list managers
+ "X-List-Host:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-List-Subscribe:" ; Unknown mailing list managers
"X-List-Unsubscribe:" ; Unknown mailing list managers
"X-Listprocessor-" ; ListProc(tm) by CREN
- "X-Listserver:" ; Unknown mailing list managers
- "X-Loop:" ; Unknown mailing list managers
+ "X-Listserver:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-Loop:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-Lrde-Mailscanner:"
"X-Lumos-SenderID:" ; Roving ConstantContact
"X-MAIL-INFO:" ; NetZero
"X-MB-Message-" ; AOL WebMail
"X-MHE-Checksum:" ; Checksum added during index search
"X-MIME-Autoconverted:" ; sendmail
+ "X-MIMEOLE:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/sendmail
"X-MIMETrack:"
"X-MS-" ; MS Outlook
+ "X-MSMail-Priority" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Mail-from:" ; fastmail.fm
"X-MailScanner" ; ListProc(tm) by CREN
"X-Mailing-List:" ; Unknown mailing list managers
"X-Mailman-Approved-At:" ; Mailman mailing list manager
"X-Mailman-Version:" ; Mailman mailing list manager
+ "X-Mailutils-Message-Id" ; GNU Mailutils
"X-Majordomo:" ; Majordomo mailing list manager
"X-Message-Id"
"X-MessageWall-Score:" ; Unknown mailing list manager, AUC TeX
@@ -2516,27 +2588,33 @@ of citations entirely, choose \"None\"."
"X-Msmail-" ; MS Outlook
"X-NAI-Spam-" ; Network Associates Inc. SpamKiller
"X-News:" ; News
- "X-No-Archive:"
+ "X-Newsreader:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-No-Archive:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Notes-Item:" ; Lotus Notes Domino structured header
"X-OperatingSystem:"
- ;;"X-Operator:" ; Similar to X-Mailer, so display it
"X-Orcl-Content-Type:"
+ "X-Original-Arrival-Type:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Original-Complaints-To:"
"X-Original-Date:" ; SourceForge mailing list manager
"X-Original-To:"
"X-Original-Trace:"
"X-OriginalArrivalTime:" ; Hotmail
+ "X-Originating-Email:" ; Hotmail
"X-Originating-IP:" ; Hotmail
+ "X-PMG-"
"X-Postfilter:"
"X-Priority:" ; MS Outlook
"X-Provags-ID:"
"X-Qotd-" ; User added
+ "X-RCPT-TO:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-RM"
"X-Received-Date:"
"X-Received:"
+ "X-Report-Abuse-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Request-"
"X-Resolved-to:" ; fastmail.fm
"X-Return-Path-Hint:" ; Roving ConstantContact
+ "X-RocketYMMF:" ; Yahoo
"X-Roving-" ; Roving ConstantContact
"X-SA-Exim-" ; Exim SpamAssassin
"X-SBClass:" ; Spam
@@ -2546,7 +2624,7 @@ of citations entirely, choose \"None\"."
"X-SMTP-"
"X-Sasl-enc:" ; Apple Mail
"X-Scanned-By:"
- "X-Sender:"
+ "X-Sender:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-Server-Date:"
"X-Server-Uuid:"
"X-Sieve:" ; Sieve filtering
@@ -2558,21 +2636,27 @@ of citations entirely, choose \"None\"."
"X-Telecom-Digest"
"X-Trace:"
"X-UID"
- "X-UIDL:"
+ "X-UIDL:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-UNTD-" ; NetZero
+ "X-URI:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-URL:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
"X-USANET-" ; usa.net
+ "X-Unity"
"X-UserInfo1:"
"X-VSMLoop:" ; NTMail
- "X-Virus-Scanned" ; amavisd-new
+ "X-Virus-" ;
"X-Vms-To:"
"X-WebTV-Signature:"
"X-Wss-Id:" ; Worldtalk gateways
+ "X-X-Sender:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
+ "X-YMail-"
"X-Yahoo"
- "X-eGroups-" ; Egroups/yahoogroups mailing list manager
+ "X-eGroups-" ; Egroups/yahoogroups mailing list manager
"X-pgp:"
"X-submission-address:"
"X400-" ; X400
- "Xref:")
+ "Xref:" ; RFC 1036
+ )
"List of default header fields that are not to be shown.
Do not alter this variable directly. Instead, add entries from
@@ -2944,6 +3028,15 @@ folder, which is also available in `mh-current-folder'."
:group 'mh-alias
:package-version '(MH-E . "8.0"))
+(defcustom-mh mh-annotate-msg-hook nil
+ "Hook run by `mh-annotate-msg' after annotation.
+Variables that are useful in this hook include `mh-current-folder',
+the current folder, and `mh-annotate-list', the messages annotated."
+ :type 'hook
+ :group 'mh-hooks
+ :group 'mh-sending-mail
+ :package-version '(MH-E . "8.1"))
+
(defcustom-mh mh-before-commands-processed-hook nil
"Hook run by \\<mh-folder-mode-map>\\[mh-execute-commands] before performing outstanding refile and delete requests.
@@ -3301,7 +3394,7 @@ consumed by `defface-mh'.")
The :inherit keyword is available on all supported versions of
GNU Emacs and XEmacs from at least 21.5.23 on.")
-(defvar mh-min-colors-defined-flag (and (not mh-xemacs-flag)
+(defvar mh-min-colors-defined-flag (and (not (featurep 'xemacs))
(>= emacs-major-version 22))
"Non-nil means `defface' supports min-colors display requirement.")
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index 42abad4536a..bc15d3eb118 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -156,6 +156,8 @@ annotation.")
'("Message"
["Show Message" mh-show (mh-get-msg-num nil)]
["Show Message with Header" mh-header-display (mh-get-msg-num nil)]
+ ["Show Message with Preferred Alternative"
+ mh-show-preferred-alternative (mh-get-msg-num nil)]
["Next Message" mh-next-undeleted-msg t]
["Previous Message" mh-previous-undeleted-msg t]
["Go to First Message" mh-first-msg t]
@@ -225,6 +227,7 @@ annotation.")
"'" mh-toggle-tick
"," mh-header-display
"." mh-alt-show
+ ":" mh-show-preferred-alternative
";" mh-toggle-mh-decode-mime-flag
">" mh-write-msg-to-file
"?" mh-help
@@ -348,7 +351,7 @@ annotation.")
"\M-\t" mh-prev-button)
(cond
- (mh-xemacs-flag
+ ((featurep 'xemacs)
(define-key mh-folder-mode-map [button2] 'mh-show-mouse))
(t
(define-key mh-folder-mode-map [mouse-2] 'mh-show-mouse)))
@@ -510,7 +513,7 @@ font-lock is done highlighting.")
(defmacro mh-remove-xemacs-horizontal-scrollbar ()
"Get rid of the horizontal scrollbar that XEmacs insists on putting in."
- (when mh-xemacs-flag
+ (when (featurep 'xemacs)
`(if (and (featurep 'scrollbar)
(fboundp 'set-specifier))
(set-specifier horizontal-scrollbar-visible-p nil
@@ -653,7 +656,7 @@ perform the operation on all messages in that region.
(easy-menu-add mh-folder-folder-menu)
(mh-inc-spool-make)
(mh-set-help mh-folder-mode-help-messages)
- (if (and mh-xemacs-flag
+ (if (and (featurep 'xemacs)
font-lock-auto-fontify)
(turn-on-font-lock))) ; Force font-lock in XEmacs.
diff --git a/lisp/mh-e/mh-gnus.el b/lisp/mh-e/mh-gnus.el
index 0624346ca05..e099c2e726b 100644
--- a/lisp/mh-e/mh-gnus.el
+++ b/lisp/mh-e/mh-gnus.el
@@ -41,7 +41,7 @@
;; Copy of function from gnus-util.el.
(defun-mh mh-gnus-local-map-property gnus-local-map-property (map)
"Return a list suitable for a text property list specifying keymap MAP."
- (cond (mh-xemacs-flag (list 'keymap map))
+ (cond ((featurep 'xemacs) (list 'keymap map))
((>= emacs-major-version 21) (list 'keymap map))
(t (list 'local-map map))))
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index 4b10ad18592..659ab47d0db 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -60,6 +60,8 @@
(autoload 'mail-decode-encoded-word-string "mail-parse")
(autoload 'mail-header-parse-content-type "mail-parse")
(autoload 'mail-header-strip "mail-parse")
+(autoload 'message-options-get "message")
+(autoload 'message-options-set "message")
(autoload 'message-options-set-recipient "message")
(autoload 'mm-decode-body "mm-bodies")
(autoload 'mm-uu-dissect "mm-uu")
@@ -1220,16 +1222,11 @@ MESSAGE number."
mh-sent-from-msg
(string-to-number message))))
(cond ((integerp msg)
- (if (string= "" description)
- ;; Rationale: mml-attach-file constructs a malformed composition
- ;; if the description string is empty. This fixes SF #625168.
- (mml-attach-file (format "%s%s/%d"
- mh-user-path (substring folder 1) msg)
- "message/rfc822")
- (mml-attach-file (format "%s%s/%d"
- mh-user-path (substring folder 1) msg)
- "message/rfc822"
- description)))
+ (mml-attach-file (format "%s%s/%d"
+ mh-user-path (substring folder 1) msg)
+ "message/rfc822"
+ (if (string= "" description) nil description)
+ "inline"))
(t (error "The message number, %s, is not a integer" msg)))))
(defun mh-mh-forward-message (&optional description folder messages)
@@ -1621,8 +1618,22 @@ encoding if you wish by running this command.
This action can be undone by running \\[undo]."
(interactive)
(require 'message)
- (when mh-pgp-support-flag ;; This is only needed for PGP
- (message-options-set-recipient))
+ (when mh-pgp-support-flag
+ ;; PGP requires actual e-mail addresses, not aliases.
+ ;; Parse the recipients and sender from the message
+ (message-options-set-recipient)
+ ;; Do an alias lookup on sender
+ (message-options-set 'message-sender
+ (mail-strip-quoted-names
+ (mh-alias-expand
+ (message-options-get 'message-sender))))
+ ;; Do an alias lookup on recipients
+ (message-options-set 'message-recipients
+ (mapconcat
+ '(lambda (ali)
+ (mail-strip-quoted-names (mh-alias-expand ali)))
+ (split-string (message-options-get 'message-recipients) "[, ]+")
+ ", ")))
(let ((saved-text (buffer-string))
(buffer (current-buffer))
(modified-flag (buffer-modified-p)))
diff --git a/lisp/mh-e/mh-show.el b/lisp/mh-e/mh-show.el
index 4e1a19c3a06..c97715dabf3 100644
--- a/lisp/mh-e/mh-show.el
+++ b/lisp/mh-e/mh-show.el
@@ -103,6 +103,17 @@ Use the command \\[mh-show] to show the message normally again."
(mh-recenter 0))
(setq mh-showing-with-headers t)))
+;;;###mh-autoload
+(defun mh-show-preferred-alternative ()
+ "Display message with the default preferred alternative.
+I.e. we set \\mm-discouraged-alternatives to nil.
+
+Use the command \\[mh-show] to show the message normally again."
+ (interactive)
+ (let
+ ((mm-discouraged-alternatives))
+ (mh-show nil t)))
+
;;; Support Routines for MH-Folder Commands
@@ -401,6 +412,7 @@ still visible.\n")
(mh-defun-show-buffer mh-show-refile-or-write-again
mh-refile-or-write-again)
(mh-defun-show-buffer mh-show-show mh-show)
+(mh-defun-show-buffer mh-show-show-preferred-alternative mh-show-preferred-alternative)
(mh-defun-show-buffer mh-show-write-message-to-file
mh-write-msg-to-file)
(mh-defun-show-buffer mh-show-extract-rejected-mail
@@ -513,6 +525,8 @@ still visible.\n")
'("Message"
["Show Message" mh-show-show t]
["Show Message with Header" mh-show-header-display t]
+ ["Show Message with Preferred Alternative"
+ mh-show-show-preferred-alternative t]
["Next Message" mh-show-next-undeleted-msg t]
["Previous Message" mh-show-previous-undeleted-msg t]
["Go to First Message" mh-show-first-msg t]
@@ -568,6 +582,7 @@ still visible.\n")
"'" mh-show-toggle-tick
"," mh-show-header-display
"." mh-show-show
+ ":" mh-show-show-preferred-alternative
">" mh-show-write-message-to-file
"?" mh-help
"E" mh-show-extract-rejected-mail
@@ -857,7 +872,7 @@ See also `mh-folder-mode'.
(mh-gnus-article-highlight-citation))
(t
(setq font-lock-defaults '(mh-show-font-lock-keywords t))))
- (if (and mh-xemacs-flag
+ (if (and (featurep 'xemacs)
font-lock-auto-fontify)
(turn-on-font-lock))
(when mh-decode-mime-flag
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index 5b618e35b87..da2ace3fd2c 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -67,7 +67,7 @@ used in lieu of `search' in the CL package."
;;;###mh-autoload
(defun mh-colors-available-p ()
"Check if colors are available in the Emacs being used."
- (or mh-xemacs-flag
+ (or (featurep 'xemacs)
(let ((color-cells (mh-display-color-cells)))
(and (numberp color-cells) (>= color-cells 8)))))
diff --git a/lisp/mh-e/mh-xface.el b/lisp/mh-e/mh-xface.el
index 8445cf32ed1..a6a6efc0fb2 100644
--- a/lisp/mh-e/mh-xface.el
+++ b/lisp/mh-e/mh-xface.el
@@ -36,7 +36,7 @@
(autoload 'message-fetch-field "message")
(defvar mh-show-xface-function
- (cond ((and mh-xemacs-flag (locate-library "x-face") (not (featurep 'xface)))
+ (cond ((and (featurep 'xemacs) (locate-library "x-face") (not (featurep 'xface)))
(load "x-face" t t)
#'mh-face-display-function)
((>= emacs-major-version 21)
diff --git a/lisp/mouse.el b/lisp/mouse.el
index e35bea81748..82d12ccbdd0 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -151,6 +151,26 @@ PREFIX is the prefix argument (if any) to pass to the command."
;; mouse-major-mode-menu was using `command-execute' instead.
(call-interactively cmd))))
+(defun minor-mode-menu-from-indicator (indicator)
+ "Show menu, if any, for minor mode specified by INDICATOR.
+Interactively, INDICATOR is read using completion."
+ (interactive (list (completing-read "Minor mode indicator: "
+ (describe-minor-mode-completion-table-for-indicator))))
+ (let ((minor-mode (lookup-minor-mode-from-indicator indicator)))
+ (if minor-mode
+ (let* ((map (cdr-safe (assq minor-mode minor-mode-map-alist)))
+ (menu (and (keymapp map) (lookup-key map [menu-bar]))))
+ (if menu
+ (popup-menu menu)
+ (message "No menu for minor mode `%s'" minor-mode)))
+ (error "Cannot find minor mode for `%s'" indicator))))
+
+(defun mouse-minor-mode-menu (event)
+ "Show minor-mode menu for EVENT on minor modes area of the mode line."
+ (interactive "@e")
+ (let ((indicator (car (nth 4 (car (cdr event))))))
+ (minor-mode-menu-from-indicator indicator)))
+
(defvar mouse-major-mode-menu-prefix) ; dynamically bound
(defun mouse-major-mode-menu (event &optional prefix)
@@ -1631,7 +1651,10 @@ regardless of where you click."
;; Give temporary modes such as isearch a chance to turn off.
(run-hooks 'mouse-leave-buffer-hook)
(or mouse-yank-at-point (mouse-set-point click))
- (insert (x-get-selection 'SECONDARY)))
+ (let ((secondary (x-get-selection 'SECONDARY)))
+ (if secondary
+ (insert (x-get-selection 'SECONDARY))
+ (error "No secondary selection"))))
(defun mouse-kill-secondary ()
"Kill the text in the secondary selection.
@@ -1811,27 +1834,23 @@ and selects that window."
(mouse-minibuffer-check event)
(let ((buffers (buffer-list)) alist menu split-by-major-mode sum-of-squares)
;; Make an alist of elements that look like (MENU-ITEM . BUFFER).
- (let ((tail buffers))
- (while tail
- ;; Divide all buffers into buckets for various major modes.
- ;; Each bucket looks like (MODE NAMESTRING BUFFERS...).
- (with-current-buffer (car tail)
- (let* ((adjusted-major-mode major-mode) elt)
- (let ((tail mouse-buffer-menu-mode-groups))
- (while tail
- (if (string-match (car (car tail)) mode-name)
- (setq adjusted-major-mode (cdr (car tail))))
- (setq tail (cdr tail))))
- (setq elt (assoc adjusted-major-mode split-by-major-mode))
- (if (null elt)
- (setq elt (list adjusted-major-mode
- (if (stringp adjusted-major-mode)
- adjusted-major-mode
- mode-name))
- split-by-major-mode (cons elt split-by-major-mode)))
- (or (memq (car tail) (cdr (cdr elt)))
- (setcdr (cdr elt) (cons (car tail) (cdr (cdr elt)))))))
- (setq tail (cdr tail))))
+ (dolist (buf buffers)
+ ;; Divide all buffers into buckets for various major modes.
+ ;; Each bucket looks like (MODE NAMESTRING BUFFERS...).
+ (with-current-buffer buf
+ (let* ((adjusted-major-mode major-mode) elt)
+ (dolist (group mouse-buffer-menu-mode-groups)
+ (when (string-match (car group) (format-mode-line mode-name))
+ (setq adjusted-major-mode (cdr group))))
+ (setq elt (assoc adjusted-major-mode split-by-major-mode))
+ (unless elt
+ (setq elt (list adjusted-major-mode
+ (if (stringp adjusted-major-mode)
+ adjusted-major-mode
+ mode-name))
+ split-by-major-mode (cons elt split-by-major-mode)))
+ (or (memq buf (cdr (cdr elt)))
+ (setcdr (cdr elt) (cons buf (cdr (cdr elt))))))))
;; Compute the sum of squares of sizes of the major-mode buckets.
(let ((tail split-by-major-mode))
(setq sum-of-squares 0)
diff --git a/lisp/msb.el b/lisp/msb.el
index 81ad924ccd4..cc5a0adcded 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -952,7 +952,7 @@ It takes the form ((TITLE . BUFFER-LIST)...)."
"*Files by directory*")
'msb--toggle-menu-type)))))))
-(defun msb--create-buffer-menu ()
+(defun msb--create-buffer-menu ()
(save-match-data
(save-excursion
(msb--create-buffer-menu-2))))
@@ -1101,7 +1101,7 @@ variable `msb-menu-cond'."
(f-title (format "Frames (%d)" frame-length)))
;; List only the N most recently selected frames
(when (and (integerp msb-max-menu-items)
- (> msb-max-menu-items 1)
+ (> msb-max-menu-items 1)
(> frame-length msb-max-menu-items))
(setcdr (nthcdr msb-max-menu-items frames) nil))
(setq frames-menu
@@ -1146,9 +1146,11 @@ different buffer menu using the function `msb'."
(add-hook 'menu-bar-update-hook 'menu-bar-update-buffers)
(menu-bar-update-buffers t)))
-(defun msb-unload-hook ()
- (msb-mode 0))
-(add-hook 'msb-unload-hook 'msb-unload-hook)
+(defun msb-unload-function ()
+ "Unload the Msb library."
+ (msb-mode -1)
+ ;; continue standard unloading
+ nil)
(provide 'msb)
(eval-after-load "msb" '(run-hooks 'msb-after-load-hook 'msb-after-load-hooks))
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index 67835c294fd..432effe5547 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -3813,7 +3813,7 @@ Value is (0 0) if the modification time cannot be determined."
(ange-ftp-call-cont cont result line)))
(defun ange-ftp-copy-file (filename newname &optional ok-if-already-exists
- keep-date)
+ keep-date preserve-uid-gid)
(interactive "fCopy file: \nFCopy %s to file: \np")
(ange-ftp-copy-file-internal filename
newname
@@ -4132,8 +4132,19 @@ directory, so that Emacs will know its current contents."
(format "Getting %s" fn1))
tmp1))))
-(defun ange-ftp-file-remote-p (file)
- (ange-ftp-replace-name-component file ""))
+(defun ange-ftp-file-remote-p (file &optional identification connected)
+ (let* ((parsed (ange-ftp-ftp-name file))
+ (host (nth 0 parsed))
+ (user (nth 1 parsed)))
+ (and (or (not connected)
+ (let ((proc (get-process (ange-ftp-ftp-process-buffer host user))))
+ (and proc (processp proc)
+ (memq (process-status proc) '(run open)))))
+ (cond
+ ((eq identification 'method) (and parsed "ftp"))
+ ((eq identification 'user) user)
+ ((eq identification 'host) host)
+ (t (ange-ftp-replace-name-component file ""))))))
(defun ange-ftp-load (file &optional noerror nomessage nosuffix)
(if (ange-ftp-ftp-name file)
@@ -4361,11 +4372,20 @@ NEWNAME should be the name to give the new compressed or uncompressed file.")
;; Treat each name as its own truename.
(put 'file-truename 'ange-ftp 'identity)
+;; We must return non-nil in order to mask our inability to do the job.
+;; Otherwise there are errors when applied to the target file during
+;; copying from a (localhost) Tramp file.
+(put 'set-file-modes 'ange-ftp 'ignore)
+(put 'set-file-times 'ange-ftp 'ignore)
+
;; Turn off RCS/SCCS processing to save time.
;; This returns nil for any file name as argument.
(put 'vc-registered 'ange-ftp 'null)
-(put 'dired-call-process 'ange-ftp 'ange-ftp-dired-call-process)
+;; We can handle process-file in a restricted way (just for chown).
+;; Nothing possible for `start-file-process'.
+(put 'process-file 'ange-ftp 'ange-ftp-process-file)
+(put 'start-file-process 'ange-ftp 'ignore)
(put 'shell-command 'ange-ftp 'ange-ftp-shell-command)
;;; Define ways of getting at unmodified Emacs primitives,
@@ -4528,8 +4548,8 @@ NEWNAME should be the name to give the new compressed or uncompressed file.")
;; default-directory is in ange-ftp syntax for remote file names.
(ange-ftp-real-shell-command command output-buffer error-buffer))))
-;;; This is the handler for call-process.
-(defun ange-ftp-dired-call-process (program discard &rest arguments)
+;;; This is the handler for process-file.
+(defun ange-ftp-process-file (program infile buffer display &rest arguments)
;; PROGRAM is always one of those below in the cond in dired.el.
;; The ARGUMENTS are (nearly) always files.
(if (ange-ftp-ftp-name default-directory)
@@ -4549,7 +4569,7 @@ NEWNAME should be the name to give the new compressed or uncompressed file.")
1)
(error (insert (format "%s\n" (nth 1 oops)))
1))
- (apply 'call-process program nil (not discard) nil arguments)))
+ (apply 'call-process program infile buffer display arguments)))
;; Handle an attempt to run chmod on a remote file
;; by using the ftp chmod command.
@@ -4560,7 +4580,7 @@ NEWNAME should be the name to give the new compressed or uncompressed file.")
(rest (cdr args)))
(if (equal "--" (car rest))
(setq rest (cdr rest)))
- (mapcar
+ (mapc
(lambda (file)
(setq file (expand-file-name file))
(let ((parsed (ange-ftp-ftp-name file)))
@@ -6035,8 +6055,8 @@ Other orders of $ and _ seem to all work just fine.")
(puthash ".." t tbl)
;; add all additional pubsets, if not listing one of them
(if (not (member pubset ange-ftp-bs2000-additional-pubsets))
- (mapcar (lambda (pubset) (puthash pubset t tbl))
- ange-ftp-bs2000-additional-pubsets))
+ (mapc (lambda (pubset) (puthash pubset t tbl))
+ ange-ftp-bs2000-additional-pubsets))
tbl))
(add-to-list 'ange-ftp-parse-list-func-alist
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index fe76e03f377..977639eec55 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -46,12 +46,13 @@
;; browse-url-cci XMosaic 2.5
;; browse-url-w3 w3 0
;; browse-url-w3-gnudoit w3 remotely
-;; browse-url-lynx-* Lynx 0
+;; browse-url-text-* Any text browser 0
;; browse-url-generic arbitrary
;; browse-url-default-windows-browser MS-Windows browser
;; browse-url-default-macosx-browser Mac OS X browser
;; browse-url-gnome-moz GNOME interface to Mozilla
;; browse-url-kde KDE konqueror (kfm)
+;; browse-url-elinks Elinks Don't know (tried with 0.12.GIT)
;; [A version of the Netscape browser is now free software
;; <URL:http://www.mozilla.org/>, albeit not GPLed, so it is
@@ -68,7 +69,7 @@
;; control but which window DO you want to control and how do you
;; discover its id?
-;; William M. Perry's excellent "w3" WWW browser for
+;; William M. Perry's excellent "w3" WWW browser for
;; Emacs <URL:ftp://cs.indiana.edu/pub/elisp/w3/>
;; has a function w3-follow-url-at-point, but that
;; doesn't let you edit the URL like browse-url.
@@ -205,7 +206,8 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Variables
-(eval-when-compile (require 'thingatpt)
+(eval-when-compile (require 'cl)
+ (require 'thingatpt)
(require 'term)
(require 'dired)
(require 'executable)
@@ -244,11 +246,12 @@ regexp should probably be \".\" to specify a default browser."
(function-item :tag "Netscape" :value browse-url-netscape)
(function-item :tag "Mosaic" :value browse-url-mosaic)
(function-item :tag "Mosaic using CCI" :value browse-url-cci)
- (function-item :tag "Lynx in an xterm window"
- :value browse-url-lynx-xterm)
- (function-item :tag "Lynx in an Emacs window"
- :value browse-url-lynx-emacs)
+ (function-item :tag "Text browser in an xterm window"
+ :value browse-url-text-xterm)
+ (function-item :tag "Text browser in an Emacs window"
+ :value browse-url-text-emacs)
(function-item :tag "KDE" :value browse-url-kde)
+ (function-item :tag "Elinks" :value browse-url-elinks)
(function-item :tag "Specified by `Browse Url Generic Program'"
:value browse-url-generic)
(function-item :tag "Default Windows browser"
@@ -413,7 +416,7 @@ window."
:group 'browse-url)
(defcustom browse-url-new-window-flag nil
- "If non-nil, always open a new browser window with appropriate browsers.
+ "Non-nil means always open a new browser window with appropriate browsers.
Passing an interactive argument to \\[browse-url], or specific browser
commands reverses the effect of this variable. Requires Netscape version
1.1N or later or XMosaic version 2.5 or later if using those browsers."
@@ -499,9 +502,9 @@ enabled. The port number should be set in `browse-url-CCI-port'."
(defvar browse-url-temp-file-name nil)
(make-variable-buffer-local 'browse-url-temp-file-name)
-
+
(defcustom browse-url-xterm-program "xterm"
- "The name of the terminal emulator used by `browse-url-lynx-xterm'.
+ "The name of the terminal emulator used by `browse-url-text-xterm'.
This might, for instance, be a separate color version of xterm."
:type 'string
:group 'browse-url)
@@ -512,17 +515,6 @@ These might set its size, for instance."
:type '(repeat (string :tag "Argument"))
:group 'browse-url)
-(defcustom browse-url-lynx-emacs-args (and (not window-system)
- '("-show_cursor"))
- "A list of strings defining options for Lynx in an Emacs buffer.
-
-The default is none in a window system, otherwise `-show_cursor' to
-indicate the position of the current link in the absence of
-highlighting, assuming the normal default for showing the cursor."
- :type '(repeat (string :tag "Argument"))
- :version "20.3"
- :group 'browse-url)
-
(defcustom browse-url-gnudoit-program "gnudoit"
"The name of the `gnudoit' program used by `browse-url-w3-gnudoit'."
:type 'string
@@ -559,28 +551,47 @@ incompatibly at version 4."
:type 'number
:group 'browse-url)
-(defcustom browse-url-lynx-input-field 'avoid
- "Action on selecting an existing Lynx buffer at an input field.
-What to do when sending a new URL to an existing Lynx buffer in Emacs
-if the Lynx cursor is on an input field (in which case the `g' command
+(defcustom browse-url-text-browser "lynx"
+ "The name of the text browser to invoke."
+ :type 'string
+ :group 'browse-url
+ :version "23.1")
+
+(defcustom browse-url-text-emacs-args (and (not window-system)
+ '("-show_cursor"))
+ "A list of strings defining options for a text browser in an Emacs buffer.
+
+The default is none in a window system, otherwise `-show_cursor' to
+indicate the position of the current link in the absence of
+highlighting, assuming the normal default for showing the cursor."
+ :type '(repeat (string :tag "Argument"))
+ :version "23.1"
+ :group 'browse-url)
+
+(defcustom browse-url-text-input-field 'avoid
+ "Action on selecting an existing text browser buffer at an input field.
+What to do when sending a new URL to an existing text browser buffer in Emacs
+if the browser cursor is on an input field (in which case the `g' command
would be entered as data). Such fields are recognized by the
-underlines ____. Allowed values: nil: disregard it, 'warn: warn the
-user and don't emit the URL, 'avoid: try to avoid the field by moving
+underlines ____. Allowed values: nil: disregard it, `warn': warn the
+user and don't emit the URL, `avoid': try to avoid the field by moving
down (this *won't* always work)."
:type '(choice (const :tag "Move to try to avoid field" :value avoid)
(const :tag "Disregard" :value nil)
(const :tag "Warn, don't emit URL" :value warn))
- :version "20.3"
+ :version "23.1"
:group 'browse-url)
-(defcustom browse-url-lynx-input-attempts 10
- "How many times to try to move down from a series of lynx input fields."
+(defcustom browse-url-text-input-attempts 10
+ "How many times to try to move down from a series of text browser input fields."
:type 'integer
+ :version "23.1"
:group 'browse-url)
-(defcustom browse-url-lynx-input-delay 0.2
- "How many seconds to wait for lynx between moves down from an input field."
+(defcustom browse-url-text-input-delay 0.2
+ "Seconds to wait for a text browser between moves down from an input field."
:type 'number
+ :version "23.1"
:group 'browse-url)
(defcustom browse-url-kde-program "kfmclient"
@@ -594,6 +605,34 @@ down (this *won't* always work)."
:type '(repeat (string :tag "Argument"))
:group 'browse-url)
+(defcustom browse-url-elinks-wrapper '("xterm" "-e")
+ "*Wrapper command prepended to the Elinks command-line."
+ :type '(repeat (string :tag "Wrapper"))
+ :group 'browse-url)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; URL encoding
+
+(defun browse-url-url-encode-chars (text chars)
+ "URL-encode the chars in TEXT that match CHARS.
+CHARS is a regexp-like character alternative (e.g., \"[,)$]\")."
+ (let ((encoded-text (copy-sequence text))
+ (s 0))
+ (while (setq s (string-match chars encoded-text s))
+ (setq encoded-text
+ (replace-match (format "%%%x"
+ (string-to-char (match-string 0 encoded-text)))
+ t t encoded-text)
+ s (1+ s)))
+ encoded-text))
+
+(defun browse-url-encode-url (url)
+ "Escape annoying characters in URL.
+The annoying characters are those that can mislead a webbrowser
+regarding its parameter treatment. For instance, `,' can
+be misleading because it could be used to separate URLs."
+ (browse-url-url-encode-chars url "[,)$]"))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; URL input
@@ -666,14 +705,7 @@ Use variable `browse-url-filename-alist' to map filenames to URLs."
(or file-name-coding-system
default-file-name-coding-system))))
(if coding (setq file (encode-coding-string file coding))))
- ;; URL-encode special chars, do % first
- (let ((s 0))
- (while (setq s (string-match "%" file s))
- (setq file (replace-match "%25" t t file)
- s (1+ s))))
- (while (string-match "[*\"()',=;? ]" file)
- (let ((enc (format "%%%x" (aref file (match-beginning 0)))))
- (setq file (replace-match enc t t file))))
+ (setq file (browse-url-url-encode-chars file "[*\"()',=;?% ]"))
(dolist (map browse-url-filename-alist)
(when (and map (string-match (car map) file))
(setq file (replace-match (cdr map) t nil file))))
@@ -793,6 +825,7 @@ to use."
;; --- Default MS-Windows browser ---
(defvar dos-windows-version)
+(declare-function w32-shell-execute) ;; Defined in C.
(defun browse-url-default-windows-browser (url &optional new-window)
(interactive (browse-url-interactive-arg "URL: "))
@@ -844,19 +877,19 @@ used instead of `browse-url-new-window-flag'.
The order attempted is gnome-moz-remote, Mozilla, Firefox,
Galeon, Konqueror, Netscape, Mosaic, Lynx in an xterm, and then W3."
(apply
- (cond
- ((executable-find browse-url-gnome-moz-program) 'browse-url-gnome-moz)
- ((executable-find browse-url-mozilla-program) 'browse-url-mozilla)
- ((executable-find browse-url-firefox-program) 'browse-url-firefox)
- ((executable-find browse-url-galeon-program) 'browse-url-galeon)
- ((executable-find browse-url-kde-program) 'browse-url-kde)
- ((executable-find browse-url-netscape-program) 'browse-url-netscape)
- ((executable-find browse-url-mosaic-program) 'browse-url-mosaic)
- ((executable-find browse-url-xterm-program) 'browse-url-lynx-xterm)
- ((locate-library "w3") 'browse-url-w3)
- (t
- (lambda (&ignore args) (error "No usable browser found"))))
- url args))
+ (cond
+ ((executable-find browse-url-gnome-moz-program) 'browse-url-gnome-moz)
+ ((executable-find browse-url-mozilla-program) 'browse-url-mozilla)
+ ((executable-find browse-url-firefox-program) 'browse-url-firefox)
+ ((executable-find browse-url-galeon-program) 'browse-url-galeon)
+ ((executable-find browse-url-kde-program) 'browse-url-kde)
+ ((executable-find browse-url-netscape-program) 'browse-url-netscape)
+ ((executable-find browse-url-mosaic-program) 'browse-url-mosaic)
+ ((executable-find browse-url-xterm-program) 'browse-url-text-xterm)
+ ((locate-library "w3") 'browse-url-w3)
+ (t
+ (lambda (&ignore args) (error "No usable browser found"))))
+ url args))
;;;###autoload
(defun browse-url-netscape (url &optional new-window)
@@ -876,11 +909,7 @@ is loaded in a new tab in an existing window instead.
When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'."
(interactive (browse-url-interactive-arg "URL: "))
- ;; URL encode any `confusing' characters in the URL. This needs to
- ;; include at least commas; presumably also close parens and dollars.
- (while (string-match "[,)$]" url)
- (setq url (replace-match
- (format "%%%x" (string-to-char (match-string 0 url))) t t url)))
+ (setq url (browse-url-encode-url url))
(let* ((process-environment (browse-url-process-environment))
(process
(apply 'start-process
@@ -922,7 +951,7 @@ How depends on `browse-url-netscape-version'."
;; <peter.kruse@psychologie.uni-regensburg.de>.
(browse-url-netscape-send (if (>= browse-url-netscape-version 4)
"xfeDoCommand(reload)"
- "reload")))
+ "reload")))
(defun browse-url-netscape-send (command)
"Send a remote control command to Netscape."
@@ -950,11 +979,7 @@ new tab in an existing window instead.
When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'."
(interactive (browse-url-interactive-arg "URL: "))
- ;; URL encode any `confusing' characters in the URL. This needs to
- ;; include at least commas; presumably also close parens and dollars.
- (while (string-match "[,)$]" url)
- (setq url (replace-match
- (format "%%%x" (string-to-char (match-string 0 url))) t t url)))
+ (setq url (browse-url-encode-url url))
(let* ((process-environment (browse-url-process-environment))
(process
(apply 'start-process
@@ -1012,11 +1037,7 @@ command line parameter. Therefore, the
are ignored as well. Firefox on Windows will always open the requested
URL in a new window."
(interactive (browse-url-interactive-arg "URL: "))
- ;; URL encode any `confusing' characters in the URL. This needs to
- ;; include at least commas; presumably also close parens.
- (while (string-match "[,)]" url)
- (setq url (replace-match
- (format "%%%x" (string-to-char (match-string 0 url))) t t url)))
+ (setq url (browse-url-encode-url url))
(let* ((process-environment (browse-url-process-environment))
(process
(apply 'start-process
@@ -1068,11 +1089,7 @@ new tab in an existing window instead.
When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'."
(interactive (browse-url-interactive-arg "URL: "))
- ;; URL encode any `confusing' characters in the URL. This needs to
- ;; include at least commas; presumably also close parens and dollars.
- (while (string-match "[,)$]" url)
- (setq url (replace-match
- (format "%%%x" (string-to-char (match-string 0 url))) t t url)))
+ (setq url (browse-url-encode-url url))
(let* ((process-environment (browse-url-process-environment))
(process (apply 'start-process
(concat "galeon " url)
@@ -1117,11 +1134,7 @@ new tab in an existing window instead.
When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'."
(interactive (browse-url-interactive-arg "URL: "))
- ;; URL encode any `confusing' characters in the URL. This needs to
- ;; include at least commas; presumably also close parens and dollars.
- (while (string-match "[,)$]" url)
- (setq url (replace-match
- (format "%%%x" (string-to-char (match-string 0 url))) t t url)))
+ (setq url (browse-url-encode-url url))
(let* ((process-environment (browse-url-process-environment))
(process (apply 'start-process
(concat "epiphany " url)
@@ -1149,6 +1162,8 @@ used instead of `browse-url-new-window-flag'."
browse-url-epiphany-program
(append browse-url-epiphany-startup-arguments (list url))))))
+(defvar url-handler-regexp)
+
;;;###autoload
(defun browse-url-emacs (url &optional new-window)
"Ask Emacs to load URL into a buffer and show it in another window."
@@ -1183,7 +1198,7 @@ used instead of `browse-url-new-window-flag'."
(append
browse-url-gnome-moz-arguments
(if (browse-url-maybe-new-window new-window)
- '("--newwin"))
+ '("--newwin"))
(list "--raise" url))))
;; --- Mosaic ---
@@ -1281,7 +1296,7 @@ prefix argument reverses the effect of `browse-url-new-window-flag'.
When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'."
(interactive (browse-url-interactive-arg "W3 URL: "))
- (require 'w3) ; w3-fetch-other-window not autoloaded
+ (require 'w3) ; w3-fetch-other-window not autoloaded
(if (browse-url-maybe-new-window new-window)
(w3-fetch-other-window url)
(w3-fetch url)))
@@ -1293,47 +1308,50 @@ used instead of `browse-url-new-window-flag'."
The `browse-url-gnudoit-program' program is used with options given by
`browse-url-gnudoit-args'. Default to the URL around or before point."
(interactive (browse-url-interactive-arg "W3 URL: "))
- (apply 'start-process (concat "gnudoit:" url) nil
- browse-url-gnudoit-program
- (append browse-url-gnudoit-args
- (list (concat "(w3-fetch \"" url "\")")
- "(raise-frame)"))))
+ (apply 'start-process (concat "gnudoit:" url) nil
+ browse-url-gnudoit-program
+ (append browse-url-gnudoit-args
+ (list (concat "(w3-fetch \"" url "\")")
+ "(raise-frame)"))))
;; --- Lynx in an xterm ---
;;;###autoload
-(defun browse-url-lynx-xterm (url &optional new-window)
+(defun browse-url-text-xterm (url &optional new-window)
;; new-window ignored
- "Ask the Lynx WWW browser to load URL.
-Default to the URL around or before point. A new Lynx process is run
+ "Ask a text browser to load URL.
+URL defaults to the URL around or before point.
+This runs the text browser specified by `browse-url-text-browser'.
in an Xterm window using the Xterm program named by `browse-url-xterm-program'
with possible additional arguments `browse-url-xterm-args'."
- (interactive (browse-url-interactive-arg "Lynx URL: "))
- (apply #'start-process `(,(concat "lynx" url) nil ,browse-url-xterm-program
- ,@browse-url-xterm-args "-e" "lynx"
- ,url)))
+ (interactive (browse-url-interactive-arg "Text browser URL: "))
+ (apply #'start-process `(,(concat browse-url-text-browser url)
+ nil ,browse-url-xterm-program
+ ,@browse-url-xterm-args "-e" browse-url-text-browser
+ ,url)))
;; --- Lynx in an Emacs "term" window ---
;;;###autoload
-(defun browse-url-lynx-emacs (url &optional new-buffer)
- "Ask the Lynx WWW browser to load URL.
-Default to the URL around or before point. With a prefix argument, run
-a new Lynx process in a new buffer.
+(defun browse-url-text-emacs (url &optional new-buffer)
+ "Ask a text browser to load URL.
+URL defaults to the URL around or before point.
+This runs the text browser specified by `browse-url-text-browser'.
+With a prefix argument, it runs a new browser process in a new buffer.
When called interactively, if variable `browse-url-new-window-flag' is
-non-nil, load the document in a new lynx in a new term window,
+non-nil, load the document in a new browser process in a new term window,
otherwise use any existing one. A non-nil interactive prefix argument
reverses the effect of `browse-url-new-window-flag'.
When called non-interactively, optional second argument NEW-WINDOW is
used instead of `browse-url-new-window-flag'."
- (interactive (browse-url-interactive-arg "Lynx URL: "))
- (let* ((system-uses-terminfo t) ; Lynx uses terminfo
+ (interactive (browse-url-interactive-arg "Text browser URL: "))
+ (let* ((system-uses-terminfo t) ; Lynx uses terminfo
;; (term-term-name "vt100") ; ??
- (buf (get-buffer "*lynx*"))
+ (buf (get-buffer "*text browser*"))
(proc (and buf (get-buffer-process buf)))
- (n browse-url-lynx-input-attempts))
+ (n browse-url-text-input-attempts))
(if (and (browse-url-maybe-new-window new-buffer) buf)
;; Rename away the OLD buffer. This isn't very polite, but
;; term insists on working in a buffer named *lynx* and would
@@ -1344,11 +1362,13 @@ used instead of `browse-url-new-window-flag'."
(not buf)
(not proc)
(not (memq (process-status proc) '(run stop))))
- ;; start a new lynx
+ ;; start a new text browser
(progn
(setq buf
(apply #'make-term
- `("lynx" "lynx" nil ,@browse-url-lynx-emacs-args
+ `(,browse-url-text-browser
+ ,browse-url-text-browser
+ nil ,@browse-url-text-emacs-args
,url)))
(switch-to-buffer buf)
(term-char-mode)
@@ -1360,21 +1380,21 @@ used instead of `browse-url-new-window-flag'."
(if (not (memq (process-status process) '(run stop)))
(let ((buf (process-buffer process)))
(if buf (kill-buffer buf)))))))
- ;; send the url to lynx in the old buffer
+ ;; Send the url to the text browser in the old buffer
(let ((win (get-buffer-window buf t)))
(if win
(select-window win)
(switch-to-buffer buf)))
(if (eq (following-char) ?_)
- (cond ((eq browse-url-lynx-input-field 'warn)
+ (cond ((eq browse-url-text-input-field 'warn)
(error "Please move out of the input field first"))
- ((eq browse-url-lynx-input-field 'avoid)
+ ((eq browse-url-text-input-field 'avoid)
(while (and (eq (following-char) ?_) (> n 0))
- (term-send-down) ; down arrow
- (sit-for browse-url-lynx-input-delay))
+ (term-send-down) ; down arrow
+ (sit-for browse-url-text-input-delay))
(if (eq (following-char) ?_)
(error "Cannot move out of the input field, sorry")))))
- (term-send-string proc (concat "g" ; goto
+ (term-send-string proc (concat "g" ; goto
"\C-u" ; kill default url
url
"\r")))))
@@ -1431,7 +1451,7 @@ browser is started up in a new process with possible additional arguments
don't offer a form of remote control."
(interactive (browse-url-interactive-arg "URL: "))
(if (not browse-url-generic-program)
- (error "No browser defined (`browse-url-generic-program')"))
+ (error "No browser defined (`browse-url-generic-program')"))
(apply 'call-process browse-url-generic-program nil
0 nil
(append browse-url-generic-args (list url))))
@@ -1443,7 +1463,56 @@ Default to the URL around or before point."
(interactive (browse-url-interactive-arg "KDE URL: "))
(message "Sending URL to KDE...")
(apply #'start-process (concat "KDE " url) nil browse-url-kde-program
- (append browse-url-kde-args (list url))))
+ (append browse-url-kde-args (list url))))
+
+(defun browse-url-elinks-new-window (url)
+ "Ask the Elinks WWW browser to load URL in a new window."
+ (let ((process-environment (browse-url-process-environment)))
+ (apply #'start-process
+ (append (list (concat "elinks:" url)
+ nil)
+ browse-url-elinks-wrapper
+ (list "elinks" url)))))
+
+;;;###autoload
+(defun browse-url-elinks (url &optional new-window)
+ "Ask the Elinks WWW browser to load URL.
+Default to the URL around the point.
+
+The document is loaded in a new tab of a running Elinks or, if
+none yet running, a newly started instance.
+
+The Elinks command will be prepended by the program+arguments
+from `browse-url-elinks-wrapper'."
+ (interactive (browse-url-interactive-arg "URL: "))
+ (setq url (browse-url-encode-url url))
+ (if new-window
+ (browse-url-elinks-new-window url)
+ (let ((process-environment (browse-url-process-environment))
+ (elinks-ping-process (start-process "elinks-ping" nil
+ "elinks" "-remote" "ping()")))
+ (set-process-sentinel elinks-ping-process
+ `(lambda (process change)
+ (browse-url-elinks-sentinel process ,url))))))
+
+(defun browse-url-elinks-sentinel (process url)
+ "Determines if Elinks is running or a new one has to be started."
+ (let ((exit-status (process-exit-status process)))
+ ;; Try to determine if an instance is running or if we have to
+ ;; create a new one.
+ (case exit-status
+ (5
+ ;; No instance, start a new one.
+ (browse-url-elinks-new-window url))
+ (0
+ ;; Found an instance, open URL in new tab.
+ (let ((process-environment (browse-url-process-environment)))
+ (start-process (concat "elinks:" url) nil
+ "elinks" "-remote"
+ (concat "openURL(\"" url "\",new-tab)"))))
+ (otherwise
+ (error "Unrecognized exit-code %d of process `elinks'"
+ exit-status)))))
(provide 'browse-url)
diff --git a/lisp/net/eudc-bob.el b/lisp/net/eudc-bob.el
index f3b9baa13bc..1ba6f4a0927 100644
--- a/lisp/net/eudc-bob.el
+++ b/lisp/net/eudc-bob.el
@@ -149,7 +149,7 @@ display a button."
"Toggle inline display of an image."
(interactive)
(when (eudc-bob-can-display-inline-images)
- (cond (eudc-xemacs-p
+ (cond ((featurep 'xemacs)
(let ((overlays (append (overlays-at (1- (point)))
(overlays-at (point))))
overlay glyph)
@@ -266,7 +266,7 @@ display a button."
(interactive "@e")
(run-hooks 'activate-menubar-hook)
(eudc-jump-to-event event)
- (if eudc-xemacs-p
+ (if (featurep 'xemacs)
(progn
(run-hooks 'activate-popup-menu-hook)
(popup-menu (eudc-bob-menu)))
@@ -282,7 +282,7 @@ display a button."
(let ((map (make-sparse-keymap)))
(define-key map "s" 'eudc-bob-save-object)
(define-key map "!" 'eudc-bob-pipe-object-to-external-program)
- (define-key map (if eudc-xemacs-p
+ (define-key map (if (featurep 'xemacs)
[button3]
[down-mouse-3]) 'eudc-bob-popup-menu)
map))
@@ -295,7 +295,7 @@ display a button."
(setq eudc-bob-sound-keymap
(let ((map (make-sparse-keymap)))
(define-key map [return] 'eudc-bob-play-sound-at-point)
- (define-key map (if eudc-xemacs-p
+ (define-key map (if (featurep 'xemacs)
[button2]
[down-mouse-2]) 'eudc-bob-play-sound-at-mouse)
map))
@@ -303,7 +303,7 @@ display a button."
(setq eudc-bob-url-keymap
(let ((map (make-sparse-keymap)))
(define-key map [return] 'browse-url-at-point)
- (define-key map (if eudc-xemacs-p
+ (define-key map (if (featurep 'xemacs)
[button2]
[down-mouse-2]) 'browse-url-at-mouse)
map))
@@ -311,7 +311,7 @@ display a button."
(setq eudc-bob-mail-keymap
(let ((map (make-sparse-keymap)))
(define-key map [return] 'goto-address-at-point)
- (define-key map (if eudc-xemacs-p
+ (define-key map (if (featurep 'xemacs)
[button2]
[down-mouse-2]) 'goto-address-at-mouse)
map))
@@ -319,20 +319,19 @@ display a button."
(set-keymap-parent eudc-bob-image-keymap eudc-bob-generic-keymap)
(set-keymap-parent eudc-bob-sound-keymap eudc-bob-generic-keymap)
-(if eudc-emacs-p
- (progn
- (easy-menu-define eudc-bob-generic-menu
- eudc-bob-generic-keymap
- ""
- eudc-bob-generic-menu)
- (easy-menu-define eudc-bob-image-menu
- eudc-bob-image-keymap
- ""
- eudc-bob-image-menu)
- (easy-menu-define eudc-bob-sound-menu
- eudc-bob-sound-keymap
- ""
- eudc-bob-sound-menu)))
+(when (not (featurep 'xemacs))
+ (easy-menu-define eudc-bob-generic-menu
+ eudc-bob-generic-keymap
+ ""
+ eudc-bob-generic-menu)
+ (easy-menu-define eudc-bob-image-menu
+ eudc-bob-image-keymap
+ ""
+ eudc-bob-image-menu)
+ (easy-menu-define eudc-bob-sound-menu
+ eudc-bob-sound-keymap
+ ""
+ eudc-bob-sound-menu))
;;;###autoload
(defun eudc-display-generic-binary (data)
diff --git a/lisp/net/eudc-hotlist.el b/lisp/net/eudc-hotlist.el
index 0509ac9ab79..5308bb2db1f 100644
--- a/lisp/net/eudc-hotlist.el
+++ b/lisp/net/eudc-hotlist.el
@@ -69,10 +69,10 @@ These are the special commands of this mode:
(switch-to-buffer (get-buffer-create "*EUDC Servers*"))
(setq buffer-read-only nil)
(erase-buffer)
- (mapcar (function
- (lambda (entry)
- (setq proto-col (max (length (car entry)) proto-col))))
- eudc-server-hotlist)
+ (mapc (function
+ (lambda (entry)
+ (setq proto-col (max (length (car entry)) proto-col))))
+ eudc-server-hotlist)
(setq proto-col (+ 3 proto-col))
(setq gap (make-string (- proto-col 6) ?\ ))
(insert " EUDC Servers\n"
@@ -82,7 +82,7 @@ These are the special commands of this mode:
"------" gap "--------\n"
"\n")
(setq eudc-hotlist-list-beginning (point))
- (mapcar '(lambda (entry)
+ (mapc '(lambda (entry)
(insert (car entry))
(indent-to proto-col)
(insert (symbol-name (cdr entry)) "\n"))
@@ -190,11 +190,11 @@ These are the special commands of this mode:
["Save and Quit" eudc-hotlist-quit-edit t]
["Exit without Saving" kill-this-buffer t]))
-(if eudc-emacs-p
- (easy-menu-define eudc-hotlist-emacs-menu
- eudc-hotlist-mode-map
- ""
- eudc-hotlist-menu))
+(when (not (featurep 'xemacs))
+ (easy-menu-define eudc-hotlist-emacs-menu
+ eudc-hotlist-mode-map
+ ""
+ eudc-hotlist-menu))
;;; arch-tag: 9b633ab3-6a6e-4b46-b12e-d96739a7e0e8
;;; eudc-hotlist.el ends here
diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el
index 4ee09a26951..f43b37187f7 100644
--- a/lisp/net/eudc.el
+++ b/lisp/net/eudc.el
@@ -66,13 +66,6 @@
;;{{{ Internal variables and compatibility tricks
-(defconst eudc-xemacs-p (string-match "XEmacs" emacs-version))
-(defconst eudc-emacs-p (not eudc-xemacs-p))
-(defconst eudc-xemacs-mule-p (and eudc-xemacs-p
- (featurep 'mule)))
-(defconst eudc-emacs-mule-p (and eudc-emacs-p
- (featurep 'mule)))
-
(defvar eudc-form-widget-list nil)
(defvar eudc-mode-map nil)
@@ -502,15 +495,15 @@ otherwise they are formatted according to `eudc-user-attribute-names-alist'."
records))
;; Display the records
(setq first-record (point))
- (mapcar
+ (mapc
(function
(lambda (record)
(setq beg (point))
;; Map over the record fields to print the attribute/value pairs
- (mapcar (function
- (lambda (field)
- (eudc-print-record-field field width)))
- record)
+ (mapc (function
+ (lambda (field)
+ (eudc-print-record-field field width)))
+ record)
;; Store the record internal format in some convenient place
(overlay-put (make-overlay beg (point))
'eudc-record
@@ -540,13 +533,13 @@ otherwise they are formatted according to `eudc-user-attribute-names-alist'."
(if (not (and (boundp 'eudc-form-widget-list)
eudc-form-widget-list))
(error "Not in a directory query form buffer")
- (mapcar (function
- (lambda (wid-field)
- (setq value (widget-value (cdr wid-field)))
- (if (not (string= value ""))
- (setq query-alist (cons (cons (car wid-field) value)
- query-alist)))))
- eudc-form-widget-list)
+ (mapc (function
+ (lambda (wid-field)
+ (setq value (widget-value (cdr wid-field)))
+ (if (not (string= value ""))
+ (setq query-alist (cons (cons (car wid-field) value)
+ query-alist)))))
+ eudc-form-widget-list)
(kill-buffer (current-buffer))
(eudc-display-records (eudc-query query-alist) eudc-use-raw-directory-names))))
@@ -565,15 +558,15 @@ otherwise they are formatted according to `eudc-user-attribute-names-alist'."
(if (null (eudc-cdar rec))
(list record) ; No duplicate attrs in this record
- (mapcar (function
- (lambda (field)
- (if (listp (cdr field))
- (setq duplicates (cons field duplicates))
- (setq unique (cons field unique)))))
- record)
+ (mapc (function
+ (lambda (field)
+ (if (listp (cdr field))
+ (setq duplicates (cons field duplicates))
+ (setq unique (cons field unique)))))
+ record)
(setq result (list unique))
;; Map over the record fields that have multiple values
- (mapcar
+ (mapc
(function
(lambda (field)
(let ((method (if (consp eudc-duplicate-attribute-handling-method)
@@ -641,7 +634,7 @@ Each copy is added a new field containing one of the values of FIELD."
(while values
(setcdr values (delete (car values) (cdr values)))
(setq values (cdr values)))
- (mapcar
+ (mapc
(function
(lambda (value)
(let ((result-list (copy-sequence records)))
@@ -670,7 +663,7 @@ These are the special commands of EUDC mode:
(setq major-mode 'eudc-mode)
(setq mode-name "EUDC")
(use-local-map eudc-mode-map)
- (if eudc-emacs-p
+ (if (not (featurep 'xemacs))
(easy-menu-define eudc-emacs-menu eudc-mode-map "" (eudc-menu))
(setq mode-popup-menu (eudc-menu)))
(run-mode-hooks 'eudc-mode-hook))
@@ -974,11 +967,11 @@ queries the server for the existing fields and displays a corresponding form."
(capitalize (symbol-name field)))))
fields)))
;; Loop over prompt strings to find the longest one
- (mapcar (function
- (lambda (prompt)
- (if (> (length prompt) width)
- (setq width (length prompt)))))
- prompts)
+ (mapc (function
+ (lambda (prompt)
+ (if (> (length prompt) width)
+ (setq width (length prompt)))))
+ prompts)
;; Insert the first widget out of the mapcar to leave the cursor
;; in the first field
(widget-insert "\n\n" (format (concat "%" (int-to-string width) "s: ") (car prompts)))
@@ -988,15 +981,15 @@ queries the server for the existing fields and displays a corresponding form."
eudc-form-widget-list))
(setq fields (cdr fields))
(setq prompts (cdr prompts))
- (mapcar (function
- (lambda (field)
- (widget-insert "\n\n" (format (concat "%" (int-to-string width) "s: ") (car prompts)))
- (setq widget (widget-create 'editable-field
- :size 15))
- (setq eudc-form-widget-list (cons (cons field widget)
- eudc-form-widget-list))
- (setq prompts (cdr prompts))))
- fields)
+ (mapc (function
+ (lambda (field)
+ (widget-insert "\n\n" (format (concat "%" (int-to-string width) "s: ") (car prompts)))
+ (setq widget (widget-create 'editable-field
+ :size 15))
+ (setq eudc-form-widget-list (cons (cons field widget)
+ eudc-form-widget-list))
+ (setq prompts (cdr prompts))))
+ fields)
(widget-insert "\n\n")
(widget-create 'push-button
:notify (lambda (&rest ignore)
@@ -1186,9 +1179,9 @@ queries the server for the existing fields and displays a corresponding form."
(defun eudc-install-menu ()
(cond
- ((and eudc-xemacs-p (featurep 'menubar))
+ ((and (featurep 'xemacs) (featurep 'menubar))
(add-submenu '("Tools") (eudc-menu)))
- (eudc-emacs-p
+ ((not (featurep 'xemacs))
(cond
((fboundp 'easy-menu-create-menu)
(define-key
@@ -1236,7 +1229,7 @@ This does nothing except loading eudc by autoload side-effect."
nil)
;;;###autoload
-(cond ((not (string-match "XEmacs" emacs-version))
+(cond ((not (featurep 'xemacs))
(defvar eudc-tools-menu (make-sparse-keymap "Directory Search"))
(fset 'eudc-tools-menu (symbol-value 'eudc-tools-menu))
(define-key eudc-tools-menu [phone]
@@ -1267,7 +1260,7 @@ This does nothing except loading eudc by autoload side-effect."
["Get Email" eudc-get-email t]
["Get Phone" eudc-get-phone t])))
(if (not (featurep 'eudc-autoloads))
- (if eudc-xemacs-p
+ (if (featurep 'xemacs)
(if (and (featurep 'menubar)
(not (featurep 'infodock)))
(add-submenu '("Tools") menu))
diff --git a/lisp/net/eudcb-bbdb.el b/lisp/net/eudcb-bbdb.el
index f84d98aaed8..7e37d9d4123 100644
--- a/lisp/net/eudcb-bbdb.el
+++ b/lisp/net/eudcb-bbdb.el
@@ -75,7 +75,7 @@
"Return RECORD if it matches `eudc-bbdb-current-query', nil otherwise."
(catch 'unmatch
(progn
- (mapcar
+ (mapc
(function
(lambda (condition)
(let ((attr (car condition))
@@ -197,22 +197,22 @@ RETURN-ATTRS is a list of attributes to return, defaulting to
(if (car query-attrs)
(setq records (eval `(bbdb-search ,(quote records) ,@bbdb-attrs))))
(setq query-attrs (cdr query-attrs)))
- (mapcar (function
- (lambda (record)
- (setq filtered (eudc-filter-duplicate-attributes record))
- ;; If there were duplicate attributes reverse the order of the
- ;; record so the unique attributes appear first
- (if (> (length filtered) 1)
- (setq filtered (mapcar (function
- (lambda (rec)
- (reverse rec)))
- filtered)))
- (setq result (append result filtered))))
- (delq nil
- (mapcar 'eudc-bbdb-format-record-as-result
- (delq nil
- (mapcar 'eudc-bbdb-filter-non-matching-record
- records)))))
+ (mapc (function
+ (lambda (record)
+ (setq filtered (eudc-filter-duplicate-attributes record))
+ ;; If there were duplicate attributes reverse the order of the
+ ;; record so the unique attributes appear first
+ (if (> (length filtered) 1)
+ (setq filtered (mapcar (function
+ (lambda (rec)
+ (reverse rec)))
+ filtered)))
+ (setq result (append result filtered))))
+ (delq nil
+ (mapcar 'eudc-bbdb-format-record-as-result
+ (delq nil
+ (mapcar 'eudc-bbdb-filter-non-matching-record
+ records)))))
result))
;;}}}
diff --git a/lisp/net/eudcb-ldap.el b/lisp/net/eudcb-ldap.el
index c484c590abf..f286fe761c9 100644
--- a/lisp/net/eudcb-ldap.el
+++ b/lisp/net/eudcb-ldap.el
@@ -130,7 +130,7 @@ RETURN-ATTRS is a list of attributes to return, defaulting to
(setq result (eudc-filter-partial-records result return-attrs)))
;; Apply eudc-duplicate-attribute-handling-method
(if (not (eq 'list eudc-duplicate-attribute-handling-method))
- (mapcar
+ (mapc
(function (lambda (record)
(setq final-result
(append (eudc-filter-duplicate-attributes record)
diff --git a/lisp/net/eudcb-ph.el b/lisp/net/eudcb-ph.el
index 373b015b07e..5fed37f90a1 100644
--- a/lisp/net/eudcb-ph.el
+++ b/lisp/net/eudcb-ph.el
@@ -179,7 +179,7 @@ SERVER is either a string naming the server or a list (NAME PORT)."
(set-buffer eudc-ph-process-buffer)
(erase-buffer)
(setq eudc-ph-read-point (point))
- (and eudc-xemacs-mule-p
+ (and (featurep 'xemacs) (featurep 'mule)
(set-buffer-file-coding-system 'binary t)))
(setq process (open-network-stream "ph" eudc-ph-process-buffer host port))
(if (null process)
diff --git a/lisp/net/netrc.el b/lisp/net/netrc.el
index 1b52090abf6..8c4b0a08f51 100644
--- a/lisp/net/netrc.el
+++ b/lisp/net/netrc.el
@@ -32,27 +32,45 @@
;;; Code:
;;;
-;;; .netrc and .authinforc parsing
+;;; .netrc and .authinfo rc parsing
;;;
(defalias 'netrc-point-at-eol
(if (fboundp 'point-at-eol)
'point-at-eol
'line-end-position))
+;; autoload encrypt
+
+(eval-and-compile
+ (autoload 'encrypt-find-model "encrypt")
+ (autoload 'encrypt-insert-file-contents "encrypt"))
+
+(defgroup netrc nil
+ "Netrc configuration."
+ :group 'comm)
+
+(defvar netrc-services-file "/etc/services"
+ "The name of the services file.")
(defun netrc-parse (file)
- "Parse FILE and return a list of all entries in the file."
+ (interactive "fFile to Parse: ")
+ "Parse FILE and return an list of all entries in the file."
(when (file-exists-p file)
(with-temp-buffer
(let ((tokens '("machine" "default" "login"
"password" "account" "macdef" "force"
"port"))
+ (encryption-model (encrypt-find-model file))
alist elem result pair)
- (insert-file-contents file)
+
+ (if encryption-model
+ (encrypt-insert-file-contents file encryption-model)
+ (insert-file-contents file))
+
(goto-char (point-min))
;; Go through the file, line by line.
(while (not (eobp))
- (narrow-to-region (point) (netrc-point-at-eol))
+ (narrow-to-region (point) (point-at-eol))
;; For each line, get the tokens and values.
(while (not (eobp))
(skip-chars-forward "\t ")
@@ -113,16 +131,79 @@ Entries without port tokens default to DEFAULTPORT."
(when result
(setq result (nreverse result))
(while (and result
- (not (equal (or port defaultport "nntp")
- (or (netrc-get (car result) "port")
- defaultport "nntp"))))
+ (not (netrc-port-equal
+ (or port defaultport "nntp")
+ (or (netrc-get (car result) "port")
+ defaultport "nntp"))))
(pop result))
(car result))))
+(defun netrc-machine-user-or-password (mode authinfo-file-or-list machines ports defaults)
+ "Get the user name or password according to MODE from AUTHINFO-FILE-OR-LIST.
+Matches a machine from MACHINES and a port from PORTS, giving
+default ports DEFAULTS to `netrc-machine'.
+
+MODE can be \"login\" or \"password\", suitable for passing to
+`netrc-get'."
+ (let ((authinfo-list (if (stringp authinfo-file-or-list)
+ (netrc-parse authinfo-file-or-list)
+ authinfo-file-or-list))
+ (ports (or ports '(nil)))
+ (defaults (or defaults '(nil)))
+ info)
+ (dolist (machine machines)
+ (dolist (default defaults)
+ (dolist (port ports)
+ (let ((alist (netrc-machine authinfo-list machine port default)))
+ (setq info (or (netrc-get alist mode) info))))))
+ info))
+
(defun netrc-get (alist type)
"Return the value of token TYPE from ALIST."
(cdr (assoc type alist)))
+(defun netrc-port-equal (port1 port2)
+ (when (numberp port1)
+ (setq port1 (or (netrc-find-service-name port1) port1)))
+ (when (numberp port2)
+ (setq port2 (or (netrc-find-service-name port2) port2)))
+ (equal port1 port2))
+
+(defun netrc-parse-services ()
+ (when (file-exists-p netrc-services-file)
+ (let ((services nil))
+ (with-temp-buffer
+ (insert-file-contents netrc-services-file)
+ (while (search-forward "#" nil t)
+ (delete-region (1- (point)) (point-at-eol)))
+ (goto-char (point-min))
+ (while (re-search-forward
+ "^ *\\([^ \n\t]+\\)[ \t]+\\([0-9]+\\)/\\([^ \t\n]+\\)" nil t)
+ (push (list (match-string 1) (string-to-number (match-string 2))
+ (intern (downcase (match-string 3))))
+ services))
+ (nreverse services)))))
+
+(defun netrc-find-service-name (number &optional type)
+ (let ((services (netrc-parse-services))
+ service)
+ (setq type (or type 'tcp))
+ (while (and (setq service (pop services))
+ (not (and (= number (cadr service))
+ (eq type (caddr service)))))
+ )
+ (car service)))
+
+(defun netrc-find-service-number (name &optional type)
+ (let ((services (netrc-parse-services))
+ service)
+ (setq type (or type 'tcp))
+ (while (and (setq service (pop services))
+ (not (and (string= name (car service))
+ (eq type (caddr service)))))
+ )
+ (cadr service)))
+
(provide 'netrc)
;;; arch-tag: af9929cc-2d12-482f-936e-eb4366f9fa55
diff --git a/lisp/net/newsticker.el b/lisp/net/newsticker.el
index eb70a2e2d31..735d946346d 100644
--- a/lisp/net/newsticker.el
+++ b/lisp/net/newsticker.el
@@ -1199,10 +1199,11 @@ buffers *newsticker-wget-<feed>* will not be closed."
(unless (fboundp 'match-string-no-properties)
(defalias 'match-string-no-properties 'match-string))
-(unless (fboundp 'replace-regexp-in-string)
- (defun replace-regexp-in-string (re rp st)
- (save-match-data ;; apparently XEmacs needs save-match-data
- (replace-in-string st re rp))))
+(when (featurep 'xemacs)
+ (unless (fboundp 'replace-regexp-in-string)
+ (defun replace-regexp-in-string (re rp st)
+ (save-match-data ;; apparently XEmacs needs save-match-data
+ (replace-in-string st re rp)))))
;; copied from subr.el
(unless (fboundp 'add-to-invisibility-spec)
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 66786a4e25a..ef24de44e50 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -55,9 +55,49 @@
:link '(custom-manual "(rcirc)")
:group 'applications)
-(defcustom rcirc-default-server "irc.freenode.net"
- "The default server to connect to."
- :type 'string
+(defcustom rcirc-server-alist
+ '(("irc.freenode.net" :channels ("#rcirc")))
+ "An alist of IRC connections to establish when running `rcirc'.
+Each element looks like (SERVER-NAME PARAMETERS).
+
+SERVER-NAME is a string describing the server to connect
+to.
+
+The optional PARAMETERS come in pairs PARAMETER VALUE.
+
+The following parameters are recognized:
+
+`:nick'
+
+VALUE must be a string. If absent, `rcirc-default-nick' is used
+for this connection.
+
+`:port'
+
+VALUE must be a number or string. If absent,
+`rcirc-default-port' is used.
+
+`:user-name'
+
+VALUE must be a string. If absent, `rcirc-default-user-name' is
+used.
+
+`:full-name'
+
+VALUE must be a string. If absent, `rcirc-default-full-name' is
+used.
+
+`:channels'
+
+VALUE must be a list of strings describing which channels to join
+when connecting to this server. If absent, no channels will be
+connected to automatically."
+ :type '(alist :key-type string
+ :value-type (plist :options ((:nick string)
+ (:port integer)
+ (:user-name string)
+ (:full-name string)
+ (:channels (repeat string)))))
:group 'rcirc)
(defcustom rcirc-default-port 6667
@@ -75,19 +115,13 @@
:type 'string
:group 'rcirc)
-(defcustom rcirc-default-user-full-name (if (string= (user-full-name) "")
- rcirc-default-user-name
- (user-full-name))
+(defcustom rcirc-default-full-name (if (string= (user-full-name) "")
+ rcirc-default-user-name
+ (user-full-name))
"The full name sent to the server when connecting."
:type 'string
:group 'rcirc)
-(defcustom rcirc-startup-channels-alist '(("^irc.freenode.net$" "#rcirc"))
- "Alist of channels to join at startup.
-Each element looks like (SERVER-REGEXP . CHANNEL-LIST)."
- :type '(alist :key-type string :value-type (repeat string))
- :group 'rcirc)
-
(defcustom rcirc-fill-flag t
"*Non-nil means line-wrap messages printed in channel buffers."
:type 'boolean
@@ -95,11 +129,9 @@ Each element looks like (SERVER-REGEXP . CHANNEL-LIST)."
(defcustom rcirc-fill-column nil
"*Column beyond which automatic line-wrapping should happen.
-If nil, use value of `fill-column'.
-If `window-width', use the window's width as maximum.
-If `frame-width', use the frame's width as maximum."
+If nil, use value of `fill-column'. If 'frame-width, use the
+maximum frame width."
:type '(choice (const :tag "Value of `fill-column'")
- (const :tag "Full window width" window-width)
(const :tag "Full frame width" frame-width)
(integer :tag "Number of columns"))
:group 'rcirc)
@@ -120,6 +152,11 @@ underneath each nick."
"If non-nil, activity in this buffer is considered low priority.")
(make-variable-buffer-local 'rcirc-low-priority-flag)
+(defvar rcirc-omit-mode nil
+ "Non-nil if Rcirc-Omit mode is enabled.
+Use the command `rcirc-omit-mode' to change this variable.")
+(make-variable-buffer-local 'rcirc-omit-mode)
+
(defcustom rcirc-time-format "%H:%M "
"*Describes how timestamps are printed.
Used as the first arg to `format-time-string'."
@@ -145,7 +182,8 @@ number. If zero or nil, no truncating is done."
:group 'rcirc)
(defcustom rcirc-scroll-show-maximum-output t
- "*If non-nil, scroll buffer to keep the point at the bottom of the window."
+ "*If non-nil, scroll buffer to keep the point at the bottom of
+the window."
:type 'boolean
:group 'rcirc)
@@ -285,6 +323,9 @@ and the cdr part is used for encoding."
(defvar rcirc-nick-table nil)
+(defvar rcirc-recent-quit-alist nil
+ "Alist of nicks that have recently quit or parted the channel.")
+
(defvar rcirc-nick-syntax-table
(let ((table (make-syntax-table text-mode-syntax-table)))
(mapc (lambda (c) (modify-syntax-entry c "w" table))
@@ -319,36 +360,72 @@ and the cdr part is used for encoding."
(defconst rcirc-id-string (concat "rcirc on GNU Emacs " emacs-version))
(defvar rcirc-startup-channels nil)
+
;;;###autoload
(defun rcirc (arg)
- "Connect to IRC.
-If ARG is non-nil, prompt for a server to connect to."
+ "Connect to all servers in `rcirc-server-alist'.
+
+Do not connect to a server if it is already connected.
+
+If ARG is non-nil, instead prompt for connection parameters."
(interactive "P")
(if arg
- (let* ((server (read-string "IRC Server: " rcirc-default-server))
- (port (read-string "IRC Port: " (number-to-string rcirc-default-port)))
- (nick (read-string "IRC Nick: " rcirc-default-nick))
+ (let* ((server (completing-read "IRC Server: "
+ rcirc-server-alist
+ nil nil
+ (caar rcirc-server-alist)))
+ (server-plist (cdr (assoc-string server rcirc-server-alist)))
+ (port (read-string "IRC Port: "
+ (number-to-string
+ (or (plist-get server-plist 'port)
+ rcirc-default-port))))
+ (nick (read-string "IRC Nick: "
+ (or (plist-get server-plist 'nick)
+ rcirc-default-nick)))
(channels (split-string
(read-string "IRC Channels: "
- (mapconcat 'identity (rcirc-startup-channels server) " "))
+ (mapconcat 'identity
+ (plist-get server-plist
+ 'channels)
+ " "))
"[, ]+" t)))
- (rcirc-connect server port nick rcirc-default-user-name rcirc-default-user-full-name
+ (rcirc-connect server port nick rcirc-default-user-name
+ rcirc-default-full-name
channels))
- ;; make new connection using defaults unless already connected to
- ;; the default rcirc-server
- (let (connected)
- (dolist (p (rcirc-process-list))
- (when (string= rcirc-default-server (process-name p))
- (setq connected p)))
- (if (not connected)
- (rcirc-connect rcirc-default-server rcirc-default-port
- rcirc-default-nick rcirc-default-user-name
- rcirc-default-user-full-name
- (rcirc-startup-channels rcirc-default-server))
- (switch-to-buffer (process-buffer connected))
- (message "Connected to %s"
- (process-contact (get-buffer-process (current-buffer))
- :host))))))
+ ;; connect to servers in `rcirc-server-alist'
+ (let (connected-servers)
+ (dolist (c rcirc-server-alist)
+ (let ((server (car c))
+ (nick (or (plist-get (cdr c) :nick) rcirc-default-nick))
+ (port (or (plist-get (cdr c) :port) rcirc-default-port))
+ (user-name (or (plist-get (cdr c) :user-name)
+ rcirc-default-user-name))
+ (full-name (or (plist-get (cdr c) :full-name)
+ rcirc-default-full-name))
+ (channels (plist-get (cdr c) :channels)))
+ (when server
+ (let (connected)
+ (dolist (p (rcirc-process-list))
+ (when (string= server (process-name p))
+ (setq connected p)))
+ (if (not connected)
+ (condition-case e
+ (rcirc-connect server port nick user-name
+ full-name channels)
+ (quit (message "Quit connecting to %s" server)))
+ (with-current-buffer (process-buffer connected)
+ (setq connected-servers
+ (cons (process-contact (get-buffer-process
+ (current-buffer)) :host)
+ connected-servers))))))))
+ (when connected-servers
+ (message "Already connected to %s"
+ (if (cdr connected-servers)
+ (concat (mapconcat 'identity (butlast connected-servers) ", ")
+ ", and "
+ (car (last connected-servers)))
+ (car connected-servers)))))))
+
;;;###autoload
(defalias 'irc 'rcirc)
@@ -365,7 +442,8 @@ If ARG is non-nil, prompt for a server to connect to."
(defvar rcirc-process nil)
;;;###autoload
-(defun rcirc-connect (&optional server port nick user-name full-name startup-channels)
+(defun rcirc-connect (server &optional port nick user-name full-name
+ startup-channels)
(save-excursion
(message "Connecting to %s..." server)
(let* ((inhibit-eol-conversion)
@@ -374,10 +452,9 @@ If ARG is non-nil, prompt for a server to connect to."
(string-to-number port)
port)
rcirc-default-port))
- (server (or server rcirc-default-server))
(nick (or nick rcirc-default-nick))
(user-name (or user-name rcirc-default-user-name))
- (full-name (or full-name rcirc-default-user-full-name))
+ (full-name (or full-name rcirc-default-full-name))
(startup-channels startup-channels)
(process (make-network-process :name server :host server :service port-number)))
;; set up process
@@ -412,6 +489,8 @@ If ARG is non-nil, prompt for a server to connect to."
(make-local-variable 'rcirc-connecting)
(setq rcirc-connecting t)
+ (add-hook 'auto-save-hook 'rcirc-log-write)
+
;; identify
(rcirc-send-string process (concat "NICK " nick))
(rcirc-send-string process (concat "USER " user-name
@@ -446,12 +525,21 @@ last ping."
(mapc (lambda (process)
(with-rcirc-process-buffer process
(when (not rcirc-connecting)
- (rcirc-send-string process (concat "PING " (rcirc-server-name process))))))
+ (rcirc-send-string process
+ (format "PRIVMSG %s :\C-aKEEPALIVE %f\C-a"
+ rcirc-nick
+ (time-to-seconds
+ (current-time)))))))
(rcirc-process-list))
;; no processes, clean up timer
(cancel-timer rcirc-keepalive-timer)
(setq rcirc-keepalive-timer nil)))
+(defun rcirc-handler-ctcp-KEEPALIVE (process target sender message)
+ (with-rcirc-process-buffer process
+ (setq header-line-format (format "%f" (- (time-to-seconds (current-time))
+ (string-to-number message))))))
+
(defvar rcirc-debug-buffer " *rcirc debug*")
(defvar rcirc-debug-flag nil
"If non-nil, write information to `rcirc-debug-buffer'.")
@@ -461,14 +549,13 @@ Debug text is written to `rcirc-debug-buffer' if `rcirc-debug-flag'
is non-nil."
(when rcirc-debug-flag
(save-excursion
- (save-window-excursion
- (set-buffer (get-buffer-create rcirc-debug-buffer))
- (goto-char (point-max))
- (insert (concat
- "["
- (format-time-string "%Y-%m-%dT%T ") (process-name process)
- "] "
- text))))))
+ (set-buffer (get-buffer-create rcirc-debug-buffer))
+ (goto-char (point-max))
+ (insert (concat
+ "["
+ (format-time-string "%Y-%m-%dT%T ") (process-name process)
+ "] "
+ text)))))
(defvar rcirc-sentinel-hooks nil
"Hook functions called when the process sentinel is called.
@@ -486,12 +573,16 @@ Functions are called with PROCESS and SENTINEL arguments.")
(process-name process)
sentinel
(process-status process)) (not rcirc-target))
- ;; remove the prompt from buffers
- (let ((inhibit-read-only t))
- (delete-region rcirc-prompt-start-marker
- rcirc-prompt-end-marker))))
+ (rcirc-disconnect-buffer)))
(run-hook-with-args 'rcirc-sentinel-hooks process sentinel))))
+(defun rcirc-disconnect-buffer (&optional buffer)
+ (with-current-buffer (or buffer (current-buffer))
+ ;; set rcirc-target to nil for each channel so cleanup
+ ;; doesnt happen when we reconnect
+ (setq rcirc-target nil)
+ (setq mode-line-process ":disconnected")))
+
(defun rcirc-process-list ()
"Return a list of rcirc processes."
(let (ps)
@@ -530,7 +621,6 @@ Function is called with PROCESS, COMMAND, SENDER, ARGS and LINE.")
process))))))
(defun rcirc-delete-process (process)
- (message "delete process %S" process)
(delete-process process))
(defvar rcirc-trap-errors-flag t)
@@ -593,7 +683,8 @@ With no argument or nil as argument, use the current buffer."
(defun rcirc-server-name (process)
"Return PROCESS server name, given by the 001 response."
(with-rcirc-process-buffer process
- (or rcirc-server-name rcirc-default-server)))
+ (or rcirc-server-name
+ (warn "server name for process %S unknown" process))))
(defun rcirc-nick (process)
"Return PROCESS nick."
@@ -610,9 +701,10 @@ With no argument or nil as argument, use the current buffer."
(defvar rcirc-max-message-length 420
"Messages longer than this value will be split.")
-(defun rcirc-send-message (process target message &optional noticep)
+(defun rcirc-send-message (process target message &optional noticep silent)
"Send TARGET associated with PROCESS a privmsg with text MESSAGE.
-If NOTICEP is non-nil, send a notice instead of privmsg."
+If NOTICEP is non-nil, send a notice instead of privmsg.
+If SILENT is non-nil, do not print the message in any irc buffer."
;; max message length is 512 including CRLF
(let* ((response (if noticep "NOTICE" "PRIVMSG"))
(oversize (> (length message) rcirc-max-message-length))
@@ -625,8 +717,9 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(more (if oversize
(substring message rcirc-max-message-length))))
(rcirc-get-buffer-create process target)
- (rcirc-print process (rcirc-nick process) response target text)
(rcirc-send-string process (concat response " " target " :" text))
+ (unless silent
+ (rcirc-print process (rcirc-nick process) response target text))
(when more (rcirc-send-message process target more noticep))))
(defvar rcirc-input-ring nil)
@@ -676,7 +769,6 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
rcirc-target))))))
(let ((completion (car rcirc-nick-completions)))
(when completion
- (rcirc-put-nick-channel (rcirc-buffer-process) completion rcirc-target)
(delete-region (+ rcirc-prompt-end-marker
rcirc-nick-completion-start-offset)
(point))
@@ -711,7 +803,8 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(define-key rcirc-mode-map (kbd "C-c C-d") 'rcirc-cmd-mode)
(define-key rcirc-mode-map (kbd "C-c C-m") 'rcirc-cmd-msg)
(define-key rcirc-mode-map (kbd "C-c C-r") 'rcirc-cmd-nick) ; rename
-(define-key rcirc-mode-map (kbd "C-c C-o") 'rcirc-cmd-oper)
+(define-key rcirc-mode-map (kbd "C-c C-o") 'rcirc-omit-mode)
+(define-key rcirc-mode-map (kbd "M-o") 'rcirc-omit-mode)
(define-key rcirc-mode-map (kbd "C-c C-p") 'rcirc-cmd-part)
(define-key rcirc-mode-map (kbd "C-c C-q") 'rcirc-cmd-query)
(define-key rcirc-mode-map (kbd "C-c C-t") 'rcirc-cmd-topic)
@@ -737,6 +830,14 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(defvar rcirc-last-post-time nil)
+(defvar rcirc-log-alist nil
+ "Alist of lines to log to disk when `rcirc-log-flag' is non-nil.
+Each element looks like (FILENAME . TEXT).")
+
+(defvar rcirc-current-line 0
+ "The current number of responses printed in this channel.
+This number is independent of the number of lines in the buffer.")
+
(defun rcirc-mode (process target)
"Major mode for IRC channel buffers.
@@ -745,6 +846,7 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(use-local-map rcirc-mode-map)
(setq mode-name "rcirc")
(setq major-mode 'rcirc-mode)
+ (setq mode-line-process nil)
(make-local-variable 'rcirc-input-ring)
(setq rcirc-input-ring (make-ring rcirc-input-ring-size))
@@ -756,12 +858,26 @@ If NOTICEP is non-nil, send a notice instead of privmsg."
(setq rcirc-topic nil)
(make-local-variable 'rcirc-last-post-time)
(setq rcirc-last-post-time (current-time))
+ (make-local-variable 'fill-paragraph-function)
+ (setq fill-paragraph-function 'rcirc-fill-paragraph)
+ (make-local-variable 'rcirc-recent-quit-alist)
+ (setq rcirc-recent-quit-alist nil)
+ (make-local-variable 'rcirc-current-line)
+ (setq rcirc-current-line 0)
(make-local-variable 'rcirc-short-buffer-name)
(setq rcirc-short-buffer-name nil)
(make-local-variable 'rcirc-urls)
(setq use-hard-newlines t)
+ ;; setup for omitting responses
+ (setq buffer-invisibility-spec '())
+ (setq buffer-display-table (make-display-table))
+ (set-display-table-slot buffer-display-table 4
+ (let ((glyph (make-glyph-code
+ ?. 'font-lock-keyword-face)))
+ (make-vector 3 glyph)))
+
(make-local-variable 'rcirc-decode-coding-system)
(make-local-variable 'rcirc-encode-coding-system)
(dolist (i rcirc-coding-system-alist)
@@ -873,14 +989,16 @@ If ALL is non-nil, update prompts in all IRC buffers."
(when rcirc-target
(rcirc-remove-nick-channel (rcirc-buffer-process)
(rcirc-buffer-nick)
- rcirc-target))))))
+ rcirc-target))))
+ (setq rcirc-target nil)))
(defun rcirc-generate-new-buffer-name (process target)
"Return a buffer name based on PROCESS and TARGET.
This is used for the initial name given to IRC buffers."
- (if target
- (concat target "@" (process-name process))
- (concat "*" (process-name process) "*")))
+ (substring-no-properties
+ (if target
+ (concat target "@" (process-name process))
+ (concat "*" (process-name process) "*"))))
(defun rcirc-get-buffer (process target &optional server)
"Return the buffer associated with the PROCESS and TARGET.
@@ -902,14 +1020,15 @@ Create the buffer if it doesn't exist."
(when (not rcirc-target)
(setq rcirc-target target))
buffer)
- ;; create the buffer
- (with-rcirc-process-buffer process
- (let ((new-buffer (get-buffer-create
- (rcirc-generate-new-buffer-name process target))))
- (with-current-buffer new-buffer
- (rcirc-mode process target))
- (rcirc-put-nick-channel process (rcirc-nick process) target)
- new-buffer)))))
+ ;; create the buffer
+ (with-rcirc-process-buffer process
+ (let ((new-buffer (get-buffer-create
+ (rcirc-generate-new-buffer-name process target))))
+ (with-current-buffer new-buffer
+ (rcirc-mode process target)
+ (rcirc-put-nick-channel process (rcirc-nick process) target
+ rcirc-current-line))
+ new-buffer)))))
(defun rcirc-send-input ()
"Send input to target associated with the current buffer."
@@ -943,6 +1062,14 @@ Create the buffer if it doesn't exist."
(ring-insert rcirc-input-ring input)
(setq rcirc-input-ring-index 0))))))
+(defun rcirc-fill-paragraph (&optional arg)
+ (interactive "p")
+ (when (> (point) rcirc-prompt-end-marker)
+ (save-restriction
+ (narrow-to-region rcirc-prompt-end-marker (point-max))
+ (let ((fill-column rcirc-max-message-length))
+ (fill-region (point-min) (point-max))))))
+
(defun rcirc-process-input-line (line)
(if (string-match "^/\\([^ ]+\\) ?\\(.*\\)$" line)
(rcirc-process-command (match-string 1 line)
@@ -984,7 +1111,8 @@ Create the buffer if it doesn't exist."
(interactive)
(let ((pos (1+ (- (point) rcirc-prompt-end-marker))))
(goto-char (point-max))
- (let ((text (buffer-substring rcirc-prompt-end-marker (point)))
+ (let ((text (buffer-substring-no-properties rcirc-prompt-end-marker
+ (point)))
(parent (buffer-name)))
(delete-region rcirc-prompt-end-marker (point))
(setq rcirc-window-configuration (current-window-configuration))
@@ -1021,7 +1149,6 @@ Create the buffer if it doesn't exist."
(defun rcirc-multiline-minor-submit ()
"Send the text in buffer back to parent buffer."
(interactive)
- (assert rcirc-parent-buffer)
(untabify (point-min) (point-max))
(let ((text (buffer-substring (point-min) (point-max)))
(buffer (current-buffer))
@@ -1052,12 +1179,12 @@ Create the buffer if it doesn't exist."
(process-buffer process)))))
(defcustom rcirc-response-formats
- '(("PRIVMSG" . "%T<%N> %m")
- ("NOTICE" . "%T-%N- %m")
- ("ACTION" . "%T[%N %m]")
- ("COMMAND" . "%T%m")
- ("ERROR" . "%T%fw!!! %m")
- (t . "%T%fp*** %fs%n %r %m"))
+ '(("PRIVMSG" . "<%N> %m")
+ ("NOTICE" . "-%N- %m")
+ ("ACTION" . "[%N %m]")
+ ("COMMAND" . "%m")
+ ("ERROR" . "%fw!!! %m")
+ (t . "%fp*** %fs%n %r %m"))
"An alist of formats used for printing responses.
The format is looked up using the response-type as a key;
if no match is found, the default entry (with a key of `t') is used.
@@ -1069,7 +1196,6 @@ the of the following escape sequences replaced by the described values:
%n The sender's nick
%N The sender's nick (with face `rcirc-my-nick' or `rcirc-other-nick')
%r The response-type
- %T The timestamp (with face `rcirc-timestamp')
%t The target
%fw Following text uses the face `font-lock-warning-face'
%fp Following text uses the face `rcirc-server-prefix'
@@ -1082,92 +1208,67 @@ the of the following escape sequences replaced by the described values:
:value-type string)
:group 'rcirc)
+(defcustom rcirc-omit-responses
+ '("JOIN" "PART" "QUIT" "NICK")
+ "Responses which will be hidden when `rcirc-omit-mode' is enabled."
+ :type '(repeat string)
+ :group 'rcirc)
+
(defun rcirc-format-response-string (process sender response target text)
"Return a nicely-formatted response string, incorporating TEXT
\(and perhaps other arguments). The specific formatting used
is found by looking up RESPONSE in `rcirc-response-formats'."
- (let ((chunks
- (split-string (or (cdr (assoc response rcirc-response-formats))
- (cdr (assq t rcirc-response-formats)))
- "%"))
- (sender (or sender ""))
- (result "")
- (face nil)
- key face-key repl)
- (when (equal (car chunks) "")
- (pop chunks))
- (dolist (chunk chunks)
- (if (equal chunk "")
- (setq key ?%)
- (setq key (aref chunk 0))
- (setq chunk (substring chunk 1)))
- (setq repl
- (cond ((eq key ?%)
- ;; %% -- literal % character
- "%")
- ((or (eq key ?n) (eq key ?N))
- ;; %n/%N -- nick
- (let ((nick (concat (if (string= (rcirc-server-name process)
- sender)
- ""
- sender)
- (and target (concat "," target)))))
- (rcirc-facify nick
- (if (eq key ?n)
- face
- (cond ((string= sender (rcirc-nick process))
- 'rcirc-my-nick)
- ((and rcirc-bright-nicks
- (string-match
- (regexp-opt rcirc-bright-nicks)
- sender))
- 'rcirc-bright-nick)
- ((and rcirc-dim-nicks
- (string-match
- (regexp-opt rcirc-dim-nicks)
- sender))
- 'rcirc-dim-nick)
- (t
- 'rcirc-other-nick))))))
- ((eq key ?T)
- ;; %T -- timestamp
- (rcirc-facify
- (format-time-string rcirc-time-format (current-time))
- 'rcirc-timestamp))
- ((eq key ?m)
- ;; %m -- message text
- (rcirc-markup-text process sender response (rcirc-facify text face)))
- ((eq key ?t)
- ;; %t -- target
- (rcirc-facify (or rcirc-target "") face))
- ((eq key ?r)
- ;; %r -- response
- (rcirc-facify response face))
- ((eq key ?f)
- ;; %f -- change face
- (setq face-key (aref chunk 0))
- (setq chunk (substring chunk 1))
- (cond ((eq face-key ?w)
- ;; %fw -- warning face
- (setq face 'font-lock-warning-face))
- ((eq face-key ?p)
- ;; %fp -- server-prefix face
- (setq face 'rcirc-server-prefix))
- ((eq face-key ?s)
- ;; %fs -- warning face
- (setq face 'rcirc-server))
- ((eq face-key ?-)
- ;; %fs -- warning face
- (setq face nil))
- ((and (eq face-key ?\[)
- (string-match "^\\([^]]*\\)[]]" chunk)
- (facep (match-string 1 chunk)))
- ;; %f[...] -- named face
- (setq face (intern (match-string 1 chunk)))
- (setq chunk (substring chunk (match-end 0)))))
- "")))
- (setq result (concat result repl (rcirc-facify chunk face))))
- result))
+ (with-temp-buffer
+ (insert (or (cdr (assoc response rcirc-response-formats))
+ (cdr (assq t rcirc-response-formats))))
+ (goto-char (point-min))
+ (let ((start (point-min))
+ (sender (if (or (not sender)
+ (string= (rcirc-server-name process) sender))
+ ""
+ sender))
+ face)
+ (while (re-search-forward "%\\(\\(f\\(.\\)\\)\\|\\(.\\)\\)" nil t)
+ (rcirc-add-face start (match-beginning 0) face)
+ (setq start (match-beginning 0))
+ (replace-match
+ (case (aref (match-string 1) 0)
+ (?f (setq face
+ (case (string-to-char (match-string 3))
+ (?w 'font-lock-warning-face)
+ (?p 'rcirc-server-prefix)
+ (?s 'rcirc-server)
+ (t nil)))
+ "")
+ (?n sender)
+ (?N (let ((my-nick (rcirc-nick process)))
+ (save-match-data
+ (with-syntax-table rcirc-nick-syntax-table
+ (rcirc-facify sender
+ (cond ((string= sender my-nick)
+ 'rcirc-my-nick)
+ ((and rcirc-bright-nicks
+ (string-match
+ (regexp-opt rcirc-bright-nicks
+ 'words)
+ sender))
+ 'rcirc-bright-nick)
+ ((and rcirc-dim-nicks
+ (string-match
+ (regexp-opt rcirc-dim-nicks
+ 'words)
+ sender))
+ 'rcirc-dim-nick)
+ (t
+ 'rcirc-other-nick)))))))
+ (?m (propertize text 'rcirc-text text))
+ (?r response)
+ (?t (or target ""))
+ (t (concat "UNKNOWN CODE:" (match-string 0))))
+ t t nil 0)
+ (rcirc-add-face (match-beginning 0) (match-end 0) face))
+ (rcirc-add-face start (match-beginning 0) face))
+ (buffer-substring (point-min) (point-max))))
(defun rcirc-target-buffer (process sender response target text)
"Return a buffer to print the server response."
@@ -1177,7 +1278,8 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
(rcirc-any-buffer process))
((not (rcirc-channel-p target))
;; message from another user
- (if (string= response "PRIVMSG")
+ (if (or (string= response "PRIVMSG")
+ (string= response "ACTION"))
(rcirc-get-buffer-create process (if (string= sender rcirc-nick)
target
sender))
@@ -1190,16 +1292,74 @@ is found by looking up RESPONSE in `rcirc-response-formats'."
(defvar rcirc-last-sender nil)
(make-variable-buffer-local 'rcirc-last-sender)
+(defcustom rcirc-log-directory "~/.emacs.d/rcirc-log"
+ "Directory to keep IRC logfiles."
+ :type 'directory
+ :group 'rcirc)
+
+(defcustom rcirc-log-flag nil
+ "Non-nil means log IRC activity to disk.
+Logfiles are kept in `rcirc-log-directory'."
+ :type 'boolean
+ :group 'rcirc)
+
+(defcustom rcirc-omit-threshold 100
+ "Number of lines since last activity from a nick before `rcirc-omit-responses' are omitted."
+ :type 'integer
+ :group 'rcirc)
+
+(defun rcirc-last-quit-line (process nick target)
+ "Return the line number where NICK left TARGET.
+Returns nil if the information is not recorded."
+ (let ((chanbuf (rcirc-get-buffer process target)))
+ (when chanbuf
+ (cdr (assoc-string nick (with-current-buffer chanbuf
+ rcirc-recent-quit-alist))))))
+
+(defun rcirc-last-line (process nick target)
+ "Return the line from the last activity from NICK in TARGET."
+ (let* ((chanbuf (rcirc-get-buffer process target))
+ (line (or (cdr (assoc-string target
+ (gethash nick (with-rcirc-server-buffer
+ rcirc-nick-table)) t))
+ (rcirc-last-quit-line process nick target))))
+ (if line
+ line
+ ;;(message "line is nil for %s in %s" nick target)
+ nil)))
+
+(defun rcirc-elapsed-lines (process nick target)
+ "Return the number of lines since activity from NICK in TARGET."
+ (let ((last-activity-line (rcirc-last-line process nick target)))
+ (when (and last-activity-line
+ (> last-activity-line 0))
+ (- rcirc-current-line last-activity-line))))
+
+(defvar rcirc-markup-text-functions
+ '(rcirc-markup-attributes
+ rcirc-markup-my-nick
+ rcirc-markup-urls
+ rcirc-markup-keywords
+ rcirc-markup-bright-nicks)
+
+ "List of functions used to manipulate text before it is printed.
+
+Each function takes two arguments, SENDER, and RESPONSE. The
+buffer is narrowed with the text to be printed and the point is
+at the beginning of the `rcirc-text' propertized text.")
+
(defun rcirc-print (process sender response target text &optional activity)
"Print TEXT in the buffer associated with TARGET.
Format based on SENDER and RESPONSE. If ACTIVITY is non-nil,
record activity."
(or text (setq text ""))
- (unless (or (member sender rcirc-ignore-list)
- (member (with-syntax-table rcirc-nick-syntax-table
- (when (string-match "^\\([^/]\\w*\\)[:,]" text)
- (match-string 1 text)))
- rcirc-ignore-list))
+ (unless (and (or (member sender rcirc-ignore-list)
+ (member (with-syntax-table rcirc-nick-syntax-table
+ (when (string-match "^\\([^/]\\w*\\)[:,]" text)
+ (match-string 1 text)))
+ rcirc-ignore-list))
+ ;; do not ignore if we sent the message
+ (not (string= sender (rcirc-nick process))))
(let* ((buffer (rcirc-target-buffer process sender response target text))
(inhibit-read-only t))
(with-current-buffer buffer
@@ -1212,7 +1372,8 @@ record activity."
(setq text (decode-coding-string text rcirc-decode-coding-system))
;; mark the line with overlay arrow
(unless (or (marker-position overlay-arrow-position)
- (get-buffer-window (current-buffer)))
+ (get-buffer-window (current-buffer))
+ (member response rcirc-omit-responses))
(set-marker overlay-arrow-position
(marker-position rcirc-prompt-start-marker))))
@@ -1222,44 +1383,46 @@ record activity."
(set-marker-insertion-type rcirc-prompt-start-marker t)
(set-marker-insertion-type rcirc-prompt-end-marker t)
- (let ((fmted-text
- (rcirc-format-response-string process sender response nil
- text)))
-
- (insert fmted-text (propertize "\n" 'hard t))
- (set-marker-insertion-type rcirc-prompt-start-marker nil)
- (set-marker-insertion-type rcirc-prompt-end-marker nil)
-
- (let ((text-start (make-marker)))
- (set-marker text-start
- (or (next-single-property-change fill-start
- 'rcirc-text)
- rcirc-prompt-end-marker))
- ;; squeeze spaces out of text before rcirc-text
- (fill-region fill-start (1- text-start))
-
- ;; fill the text we just inserted, maybe
- (when (and rcirc-fill-flag
- (not (string= response "372"))) ;/motd
- (let ((fill-prefix
- (or rcirc-fill-prefix
- (make-string (- text-start fill-start) ?\s)))
- (fill-column (cond ((eq rcirc-fill-column 'frame-width)
- (1- (frame-width)))
- ((eq rcirc-fill-column 'window-width)
- (1- (window-width)))
- (rcirc-fill-column
- rcirc-fill-column)
- (t fill-column))))
- (fill-region fill-start rcirc-prompt-start-marker 'left t)))))
-
- ;; set inserted text to be read-only
- (when rcirc-read-only-flag
- (put-text-property rcirc-prompt-start-marker fill-start 'read-only t)
- (let ((inhibit-read-only t))
- (put-text-property rcirc-prompt-start-marker fill-start
- 'front-sticky t)
- (put-text-property (1- (point)) (point) 'rear-nonsticky t)))
+ (let ((start (point)))
+ (insert (rcirc-format-response-string process sender response nil
+ text)
+ (propertize "\n" 'hard t))
+
+ ;; squeeze spaces out of text before rcirc-text
+ (fill-region fill-start
+ (1- (or (next-single-property-change fill-start
+ 'rcirc-text)
+ rcirc-prompt-end-marker)))
+
+ ;; run markup functions
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start rcirc-prompt-start-marker)
+ (goto-char (or (next-single-property-change start 'rcirc-text)
+ (point)))
+ (when (rcirc-buffer-process)
+ (save-excursion (rcirc-markup-timestamp sender response))
+ (dolist (fn rcirc-markup-text-functions)
+ (save-excursion (funcall fn sender response)))
+ (when rcirc-fill-flag
+ (save-excursion (rcirc-markup-fill sender response))))
+
+ (when rcirc-read-only-flag
+ (add-text-properties (point-min) (point-max)
+ '(read-only t front-sticky t))))
+ ;; make text omittable
+ (let ((last-activity-lines (rcirc-elapsed-lines process sender target)))
+ (if (and (not (string= (rcirc-nick process) sender))
+ (member response rcirc-omit-responses)
+ (or (not last-activity-lines)
+ (< rcirc-omit-threshold last-activity-lines)))
+ (put-text-property (1- start) (1- rcirc-prompt-start-marker)
+ 'invisible 'rcirc-omit)
+ ;; otherwise increment the line count
+ (setq rcirc-current-line (1+ rcirc-current-line))))))
+
+ (set-marker-insertion-type rcirc-prompt-start-marker nil)
+ (set-marker-insertion-type rcirc-prompt-end-marker nil)
;; truncate buffer if it is very long
(save-excursion
@@ -1275,27 +1438,26 @@ record activity."
(window-buffer w))
(>= (window-point w)
rcirc-prompt-end-marker))
- (set-window-point w (point-max))))
+ (set-window-point w (point-max))))
nil t)
;; restore the point
(goto-char (if moving rcirc-prompt-end-marker old-point))
- ;; keep window on bottom line if it was already there
+ ;; keep window on bottom line if it was already there
(when rcirc-scroll-show-maximum-output
(walk-windows (lambda (w)
(when (eq (window-buffer w) (current-buffer))
(with-current-buffer (window-buffer w)
(when (eq major-mode 'rcirc-mode)
(with-selected-window w
- (when (<= (- (window-height)
- (count-screen-lines
- (window-point)
- (window-start))
+ (when (<= (- (window-height)
+ (count-screen-lines (window-point)
+ (window-start))
1)
0)
(recenter -1)))))))
- nil t))
+ nil t))
;; flush undo (can we do something smarter here?)
(buffer-disable-undo)
@@ -1305,22 +1467,46 @@ record activity."
(when (and activity
(not rcirc-ignore-buffer-activity-flag)
(not (and rcirc-dim-nicks sender
- (string-match (regexp-opt rcirc-dim-nicks) sender))))
+ (string-match (regexp-opt rcirc-dim-nicks) sender)
+ (rcirc-channel-p target))))
(rcirc-record-activity (current-buffer)
(when (not (rcirc-channel-p rcirc-target))
'nick)))
+ (when rcirc-log-flag
+ (rcirc-log process sender response target text))
+
(sit-for 0) ; displayed text before hook
(run-hook-with-args 'rcirc-print-hooks
process sender response target text)))))
-(defun rcirc-startup-channels (server)
- "Return the list of startup channels for SERVER."
- (let (channels)
- (dolist (i rcirc-startup-channels-alist)
- (if (string-match (car i) server)
- (setq channels (append channels (cdr i)))))
- channels))
+(defun rcirc-log (process sender response target text)
+ "Record line in `rcirc-log', to be later written to disk."
+ (let* ((filename (rcirc-generate-new-buffer-name process target))
+ (cell (assoc-string filename rcirc-log-alist))
+ (line (concat (format-time-string rcirc-time-format)
+ (substring-no-properties
+ (rcirc-format-response-string process sender
+ response target text))
+ "\n")))
+ (if cell
+ (setcdr cell (concat (cdr cell) line))
+ (setq rcirc-log-alist
+ (cons (cons filename line) rcirc-log-alist)))))
+
+(defun rcirc-log-write ()
+ "Flush `rcirc-log-alist' data to disk.
+
+Log data is written to `rcirc-log-directory'."
+ (make-directory rcirc-log-directory t)
+ (dolist (cell rcirc-log-alist)
+ (with-temp-buffer
+ (insert (cdr cell))
+ (let ((coding-system-for-write 'utf-8))
+ (write-region (point-min) (point-max)
+ (concat rcirc-log-directory "/" (car cell))
+ t 'quiet))))
+ (setq rcirc-log-alist nil))
(defun rcirc-join-channels (process channels)
"Join CHANNELS."
@@ -1345,15 +1531,19 @@ record activity."
(mapcar (lambda (x) (car x))
(gethash nick rcirc-nick-table))))
-(defun rcirc-put-nick-channel (process nick channel)
- "Add CHANNEL to list associated with NICK."
+(defun rcirc-put-nick-channel (process nick channel &optional line)
+ "Add CHANNEL to list associated with NICK.
+Update the associated linestamp if LINE is non-nil.
+
+If the record doesn't exist, and LINE is nil, set the linestamp
+to zero."
(let ((nick (rcirc-user-nick nick)))
(with-rcirc-process-buffer process
(let* ((chans (gethash nick rcirc-nick-table))
(record (assoc-string channel chans t)))
(if record
- (setcdr record (current-time))
- (puthash nick (cons (cons channel (current-time))
+ (when line (setcdr record line))
+ (puthash nick (cons (cons channel (or line 0))
chans)
rcirc-nick-table))))))
@@ -1389,7 +1579,10 @@ record activity."
(setq nicks (cons (cons k (cdr record)) nicks)))))
rcirc-nick-table)
(mapcar (lambda (x) (car x))
- (sort nicks (lambda (x y) (time-less-p (cdr y) (cdr x)))))))
+ (sort nicks (lambda (x y)
+ (let ((lx (or (cdr x) 0))
+ (ly (or (cdr y) 0)))
+ (< ly lx)))))))
(list target))))
(defun rcirc-ignore-update-automatic (nick)
@@ -1437,6 +1630,9 @@ if NICK is also on `rcirc-ignore-list-automatic'."
(or (assq 'rcirc-low-priority-flag minor-mode-alist)
(setq minor-mode-alist
(cons '(rcirc-low-priority-flag " LowPri") minor-mode-alist)))
+(or (assq 'rcirc-omit-mode minor-mode-alist)
+ (setq minor-mode-alist
+ (cons '(rcirc-omit-mode " Omit") minor-mode-alist)))
(defun rcirc-toggle-ignore-buffer-activity ()
"Toggle the value of `rcirc-ignore-buffer-activity-flag'."
@@ -1458,30 +1654,48 @@ if NICK is also on `rcirc-ignore-list-automatic'."
"Activity in this buffer is normal priority"))
(force-mode-line-update))
-(defvar rcirc-switch-to-buffer-function 'switch-to-buffer
- "Function to use when switching buffers.
-Possible values are `switch-to-buffer', `pop-to-buffer', and
-`display-buffer'.")
+(defun rcirc-omit-mode ()
+ "Toggle the Rcirc-Omit mode.
+If enabled, \"uninteresting\" lines are not shown.
+Uninteresting lines are those whose responses are listed in
+`rcirc-omit-responses'."
+ (interactive)
+ (setq rcirc-omit-mode (not rcirc-omit-mode))
+ (if rcirc-omit-mode
+ (progn
+ (add-to-invisibility-spec '(rcirc-omit . t))
+ (message "Rcirc-Omit mode enabled"))
+ (remove-from-invisibility-spec '(rcirc-omit . t))
+ (message "Rcirc-Omit mode disabled"))
+ (recenter (when (> (point) rcirc-prompt-start-marker) -1)))
(defun rcirc-switch-to-server-buffer ()
"Switch to the server buffer associated with current channel buffer."
(interactive)
- (funcall rcirc-switch-to-buffer-function rcirc-server-buffer))
+ (switch-to-buffer rcirc-server-buffer))
(defun rcirc-jump-to-first-unread-line ()
"Move the point to the first unread line in this buffer."
(interactive)
- (when (marker-position overlay-arrow-position)
- (goto-char overlay-arrow-position)))
-
-(defvar rcirc-last-non-irc-buffer nil
- "The buffer to switch to when there is no more activity.")
+ (if (marker-position overlay-arrow-position)
+ (goto-char overlay-arrow-position)
+ (message "No unread messages")))
+
+(defun rcirc-non-irc-buffer ()
+ (let ((buflist (buffer-list))
+ buffer)
+ (while (and buflist (not buffer))
+ (with-current-buffer (car buflist)
+ (unless (or (eq major-mode 'rcirc-mode)
+ (= ?\s (aref (buffer-name) 0)) ; internal buffers
+ (get-buffer-window (current-buffer)))
+ (setq buffer (current-buffer))))
+ (setq buflist (cdr buflist)))
+ buffer))
(defun rcirc-next-active-buffer (arg)
- "Go to the next rcirc buffer with activity.
-With prefix ARG, go to the next low priority buffer with activity.
-The function given by `rcirc-switch-to-buffer-function' is used to
-show the buffer."
+ "Switch to the next rcirc buffer with activity.
+With prefix ARG, go to the next low priority buffer with activity."
(interactive "P")
(let* ((pair (rcirc-split-activity rcirc-activity))
(lopri (car pair))
@@ -1489,17 +1703,11 @@ show the buffer."
(if (or (and (not arg) hipri)
(and arg lopri))
(progn
- (unless (eq major-mode 'rcirc-mode)
- (setq rcirc-last-non-irc-buffer (current-buffer)))
- (funcall rcirc-switch-to-buffer-function
- (car (if arg lopri hipri))))
+ (switch-to-buffer (car (if arg lopri hipri)))
+ (when (> (point) rcirc-prompt-start-marker)
+ (recenter -1)))
(if (eq major-mode 'rcirc-mode)
- (if (not (and rcirc-last-non-irc-buffer
- (buffer-live-p rcirc-last-non-irc-buffer)))
- (message "No IRC activity. Start something.")
- (message "No more IRC activity. Go back to work.")
- (funcall rcirc-switch-to-buffer-function rcirc-last-non-irc-buffer)
- (setq rcirc-last-non-irc-buffer nil))
+ (switch-to-buffer (rcirc-non-irc-buffer))
(message (concat
"No IRC activity."
(when lopri
@@ -1518,23 +1726,33 @@ activity. Only run if the buffer is not visible and
(defun rcirc-record-activity (buffer &optional type)
"Record BUFFER activity with TYPE."
(with-current-buffer buffer
- (when (not (get-buffer-window (current-buffer) t))
- (setq rcirc-activity
- (sort (add-to-list 'rcirc-activity (current-buffer))
- (lambda (b1 b2)
- (let ((t1 (with-current-buffer b1 rcirc-last-post-time))
- (t2 (with-current-buffer b2 rcirc-last-post-time)))
- (time-less-p t2 t1)))))
- (pushnew type rcirc-activity-types)
- (rcirc-update-activity-string)))
+ (let ((old-activity rcirc-activity)
+ (old-types rcirc-activity-types))
+ (when (not (get-buffer-window (current-buffer) t))
+ (setq rcirc-activity
+ (sort (add-to-list 'rcirc-activity (current-buffer))
+ (lambda (b1 b2)
+ (let ((t1 (with-current-buffer b1 rcirc-last-post-time))
+ (t2 (with-current-buffer b2 rcirc-last-post-time)))
+ (time-less-p t2 t1)))))
+ (pushnew type rcirc-activity-types)
+ (unless (and (equal rcirc-activity old-activity)
+ (member type old-types))
+ (rcirc-update-activity-string)))))
(run-hook-with-args 'rcirc-activity-hooks buffer))
(defun rcirc-clear-activity (buffer)
"Clear the BUFFER activity."
- (setq rcirc-activity (delete buffer rcirc-activity))
+ (setq rcirc-activity (remove buffer rcirc-activity))
(with-current-buffer buffer
(setq rcirc-activity-types nil)))
+(defun rcirc-clear-unread (buffer)
+ "Erase the last read message arrow from BUFFER."
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (set-marker overlay-arrow-position nil))))
+
(defun rcirc-split-activity (activity)
"Return a cons cell with ACTIVITY split into (lopri . hipri)."
(let (lopri hipri)
@@ -1546,6 +1764,9 @@ activity. Only run if the buffer is not visible and
(add-to-list 'hipri buf t))))
(cons lopri hipri)))
+(defvar rcirc-update-activity-string-hook nil
+ "Hook run whenever the activity string is updated.")
+
;; TODO: add mouse properties
(defun rcirc-update-activity-string ()
"Update mode-line string."
@@ -1554,19 +1775,18 @@ activity. Only run if the buffer is not visible and
(hipri (cdr pair)))
(setq rcirc-activity-string
(cond ((or hipri lopri)
- (concat "-"
- (and hipri "[")
+ (concat (and hipri "[")
(rcirc-activity-string hipri)
(and hipri lopri ",")
(and lopri
(concat "("
(rcirc-activity-string lopri)
")"))
- (and hipri "]")
- "-"))
+ (and hipri "]")))
((not (null (rcirc-process-list)))
- "-[]-")
- (t "")))))
+ "[]")
+ (t "[]")))
+ (run-hooks 'rcirc-update-activity-string-hook)))
(defun rcirc-activity-string (buffers)
(mapconcat (lambda (b)
@@ -1586,33 +1806,47 @@ activity. Only run if the buffer is not visible and
(with-current-buffer buffer
(or rcirc-short-buffer-name (buffer-name))))
-(defvar rcirc-current-buffer nil)
-(defun rcirc-window-configuration-change ()
- "Go through visible windows and remove buffers from activity list.
-Also, clear the overlay arrow if the current buffer is now hidden."
- (let ((current-now-hidden t))
+(defun rcirc-visible-buffers ()
+ "Return a list of the visible buffers that are in rcirc-mode."
+ (let (acc)
(walk-windows (lambda (w)
- (let ((buf (window-buffer w)))
- (with-current-buffer buf
- (when (eq major-mode 'rcirc-mode)
- (rcirc-clear-activity buf)))
- (when (eq buf rcirc-current-buffer)
- (setq current-now-hidden nil)))))
- ;; add overlay arrow if the buffer isn't displayed
- (when (and current-now-hidden
- rcirc-current-buffer
- (buffer-live-p rcirc-current-buffer))
- (with-current-buffer rcirc-current-buffer
- (when (and (eq major-mode 'rcirc-mode)
- (marker-position overlay-arrow-position))
- (set-marker overlay-arrow-position nil)))))
-
- ;; remove any killed buffers from list
- (setq rcirc-activity
- (delq nil (mapcar (lambda (buf) (when (buffer-live-p buf) buf))
- rcirc-activity)))
- (rcirc-update-activity-string)
- (setq rcirc-current-buffer (current-buffer)))
+ (with-current-buffer (window-buffer w)
+ (when (eq major-mode 'rcirc-mode)
+ (push (current-buffer) acc)))))
+ acc))
+
+(defvar rcirc-visible-buffers nil)
+(defun rcirc-window-configuration-change ()
+ (unless (minibuffer-window-active-p (minibuffer-window))
+ ;; delay this until command has finished to make sure window is
+ ;; actually visible before clearing activity
+ (add-hook 'post-command-hook 'rcirc-window-configuration-change-1)))
+
+(defun rcirc-window-configuration-change-1 ()
+ ;; clear activity and overlay arrows
+ (let* ((old-activity rcirc-activity)
+ (hidden-buffers rcirc-visible-buffers))
+
+ (setq rcirc-visible-buffers (rcirc-visible-buffers))
+
+ (dolist (vbuf rcirc-visible-buffers)
+ (setq hidden-buffers (delq vbuf hidden-buffers))
+ ;; clear activity for all visible buffers
+ (rcirc-clear-activity vbuf))
+
+ ;; clear unread arrow from recently hidden buffers
+ (dolist (hbuf hidden-buffers)
+ (rcirc-clear-unread hbuf))
+
+ ;; remove any killed buffers from list
+ (setq rcirc-activity
+ (delq nil (mapcar (lambda (buf) (when (buffer-live-p buf) buf))
+ rcirc-activity)))
+ ;; update the mode-line string
+ (unless (equal old-activity rcirc-activity)
+ (rcirc-update-activity-string)))
+
+ (remove-hook 'post-command-hook 'rcirc-window-configuration-change-1))
;;; buffer name abbreviation
@@ -1722,8 +1956,9 @@ Also, clear the overlay arrow if the current buffer is now hidden."
(car (split-string channel)))))
(rcirc-send-string process (concat "JOIN " channel))
(when (not (eq (selected-window) (minibuffer-window)))
- (funcall rcirc-switch-to-buffer-function buffer))))
+ (switch-to-buffer buffer))))
+;; TODO: /part #channel reason, or consider removing #channel altogether
(defun-rcirc-command part (channel)
"Part CHANNEL."
(interactive "sPart channel: ")
@@ -1902,7 +2137,7 @@ keywords when no KEYWORD is given."
word-boundary))
(optional
(and "/"
- (1+ (char "-a-zA-Z0-9_=!?#$\@~`%&*+|\\/:;.,{}[]()"))
+ (1+ (char "-a-zA-Z0-9_='!?#$\@~`%&*+|\\/:;.,{}[]()"))
(char "-a-zA-Z0-9_=#$\@~`%&*+|\\/:;{}[]()")))))
"Regexp matching URLs. Set to nil to disable URL features in rcirc.")
@@ -1931,39 +2166,12 @@ keywords when no KEYWORD is given."
(rcirc-browse-url-at-point (posn-point position)))))
-(defvar rcirc-markup-text-functions
- '(rcirc-markup-body-text
- rcirc-markup-attributes
- rcirc-markup-my-nick
- rcirc-markup-urls
- rcirc-markup-keywords
- rcirc-markup-bright-nicks)
- "List of functions used to manipulate text before it is printed.
+(defun rcirc-markup-timestamp (sender response)
+ (goto-char (point-min))
+ (insert (rcirc-facify (format-time-string rcirc-time-format)
+ 'rcirc-timestamp)))
-Each function takes three arguments, PROCESS, SENDER, RESPONSE
-and CHANNEL-BUFFER. The current buffer is temporary buffer that
-contains the text to manipulate. Each function works on the text
-in this buffer.")
-
-(defun rcirc-markup-text (process sender response text)
- "Return TEXT with properties added based on various patterns."
- (let ((channel-buffer (current-buffer)))
- (with-temp-buffer
- (insert text)
- (goto-char (point-min))
- (dolist (fn rcirc-markup-text-functions)
- (save-excursion
- (funcall fn process sender response channel-buffer)))
- (buffer-substring (point-min) (point-max)))))
-
-(defun rcirc-markup-body-text (process sender response channel-buffer)
- ;; We add the text property `rcirc-text' to identify this as the
- ;; body text.
- (add-text-properties (point-min) (point-max)
- (list 'rcirc-text (buffer-substring-no-properties
- (point-min) (point-max)))))
-
-(defun rcirc-markup-attributes (process sender response channel-buffer)
+(defun rcirc-markup-attributes (sender response)
(while (re-search-forward "\\([\C-b\C-_\C-v]\\).*?\\(\\1\\|\C-o\\)" nil t)
(rcirc-add-face (match-beginning 0) (match-end 0)
(case (char-after (match-beginning 1))
@@ -1979,19 +2187,21 @@ in this buffer.")
(while (re-search-forward "\C-o+" nil t)
(delete-region (match-beginning 0) (match-end 0))))
-(defun rcirc-markup-my-nick (process sender response channel-buffer)
+(defun rcirc-markup-my-nick (sender response)
(with-syntax-table rcirc-nick-syntax-table
(while (re-search-forward (concat "\\b"
- (regexp-quote (rcirc-nick process))
+ (regexp-quote (rcirc-nick
+ (rcirc-buffer-process)))
"\\b")
nil t)
(rcirc-add-face (match-beginning 0) (match-end 0)
'rcirc-nick-in-message)
(when (string= response "PRIVMSG")
- (rcirc-add-face (point-min) (point-max) 'rcirc-nick-in-message-full-line)
- (rcirc-record-activity channel-buffer 'nick)))))
+ (rcirc-add-face (point-min) (point-max)
+ 'rcirc-nick-in-message-full-line)
+ (rcirc-record-activity (current-buffer) 'nick)))))
-(defun rcirc-markup-urls (process sender response channel-buffer)
+(defun rcirc-markup-urls (sender response)
(while (re-search-forward rcirc-url-regexp nil t)
(let ((start (match-beginning 0))
(end (match-end 0)))
@@ -1999,30 +2209,43 @@ in this buffer.")
(add-text-properties start end (list 'mouse-face 'highlight
'keymap rcirc-browse-url-map))
;; record the url
- (let ((url (buffer-substring-no-properties start end)))
- (with-current-buffer channel-buffer
- (push url rcirc-urls))))))
-
-(defun rcirc-markup-keywords (process sender response channel-buffer)
- (let* ((target (with-current-buffer channel-buffer (or rcirc-target "")))
- (keywords (delq nil (mapcar (lambda (keyword)
- (when (not (string-match keyword target))
- keyword))
- rcirc-keywords))))
- (when keywords
- (while (re-search-forward (regexp-opt keywords 'words) nil t)
- (rcirc-add-face (match-beginning 0) (match-end 0) 'rcirc-keyword)
- (when (and (string= response "PRIVMSG")
- (not (string= sender (rcirc-nick process))))
- (rcirc-record-activity channel-buffer 'keyword))))))
-
-(defun rcirc-markup-bright-nicks (process sender response channel-buffer)
+ (push (buffer-substring-no-properties start end) rcirc-urls))))
+
+(defun rcirc-markup-keywords (sender response)
+ (when (and (string= response "PRIVMSG")
+ (not (string= sender (rcirc-nick (rcirc-buffer-process)))))
+ (let* ((target (or rcirc-target ""))
+ (keywords (delq nil (mapcar (lambda (keyword)
+ (when (not (string-match keyword
+ target))
+ keyword))
+ rcirc-keywords))))
+ (when keywords
+ (while (re-search-forward (regexp-opt keywords 'words) nil t)
+ (rcirc-add-face (match-beginning 0) (match-end 0) 'rcirc-keyword)
+ (rcirc-record-activity (current-buffer) 'keyword))))))
+
+(defun rcirc-markup-bright-nicks (sender response)
(when (and rcirc-bright-nicks
(string= response "NAMES"))
(with-syntax-table rcirc-nick-syntax-table
(while (re-search-forward (regexp-opt rcirc-bright-nicks 'words) nil t)
(rcirc-add-face (match-beginning 0) (match-end 0)
'rcirc-bright-nick)))))
+
+(defun rcirc-markup-fill (sender response)
+ (when (not (string= response "372")) ; /motd
+ (let ((fill-prefix
+ (or rcirc-fill-prefix
+ (make-string (- (point) (line-beginning-position)) ?\s)))
+ (fill-column (- (cond ((eq rcirc-fill-column 'frame-width)
+ (1- (frame-width)))
+ (rcirc-fill-column
+ rcirc-fill-column)
+ (t fill-column))
+ ;; make sure ... doesn't cause line wrapping
+ 3)))
+ (fill-region (point) (point-max) nil t))))
;;; handlers
;; these are called with the server PROCESS, the SENDER, which is a
@@ -2031,7 +2254,6 @@ in this buffer.")
;; verbatim
(defun rcirc-handler-001 (process sender args text)
(rcirc-handler-generic process "001" sender args text)
- ;; set the real server name
(with-rcirc-process-buffer process
(setq rcirc-connecting nil)
(rcirc-reschedule-timeout process)
@@ -2049,9 +2271,9 @@ in this buffer.")
(if (string-match "^\C-a\\(.*\\)\C-a$" message)
(rcirc-handler-CTCP process target sender (match-string 1 message))
(rcirc-print process sender "PRIVMSG" target message t))
- ;; update nick timestamp
- (if (member target (rcirc-nick-channels process sender))
- (rcirc-put-nick-channel process sender target))))
+ ;; update nick linestamp
+ (with-current-buffer (rcirc-get-buffer process target t)
+ (rcirc-put-nick-channel process sender target rcirc-current-line))))
(defun rcirc-handler-NOTICE (process sender args text)
(let ((target (car args))
@@ -2076,21 +2298,29 @@ in this buffer.")
(defun rcirc-handler-JOIN (process sender args text)
(let ((channel (car args)))
- (rcirc-get-buffer-create process channel)
+ (with-current-buffer (rcirc-get-buffer-create process channel)
+ ;; when recently rejoining, restore the linestamp
+ (rcirc-put-nick-channel process sender channel
+ (let ((last-activity-lines
+ (rcirc-elapsed-lines process sender channel)))
+ (when (and last-activity-lines
+ (< last-activity-lines rcirc-omit-threshold))
+ (rcirc-last-line process sender channel)))))
+
(rcirc-print process sender "JOIN" channel "")
;; print in private chat buffer if it exists
(when (rcirc-get-buffer (rcirc-buffer-process) sender)
- (rcirc-print process sender "JOIN" sender channel))
-
- (rcirc-put-nick-channel process sender channel)))
+ (rcirc-print process sender "JOIN" sender channel))))
;; PART and KICK are handled the same way
(defun rcirc-handler-PART-or-KICK (process response channel sender nick args)
(rcirc-ignore-update-automatic nick)
(if (not (string= nick (rcirc-nick process)))
;; this is someone else leaving
- (rcirc-remove-nick-channel process nick channel)
+ (progn
+ (rcirc-maybe-remember-nick-quit process nick channel)
+ (rcirc-remove-nick-channel process nick channel))
;; this is us leaving
(mapc (lambda (n)
(rcirc-remove-nick-channel process n channel))
@@ -2099,8 +2329,7 @@ in this buffer.")
;; if the buffer is still around, make it inactive
(let ((buffer (rcirc-get-buffer process channel)))
(when buffer
- (with-current-buffer buffer
- (setq rcirc-target nil))))))
+ (rcirc-disconnect-buffer buffer)))))
(defun rcirc-handler-PART (process sender args text)
(let* ((channel (car args))
@@ -2125,16 +2354,30 @@ in this buffer.")
(rcirc-handler-PART-or-KICK process "KICK" channel sender nick reason)))
+(defun rcirc-maybe-remember-nick-quit (process nick channel)
+ "Remember NICK as leaving CHANNEL if they recently spoke."
+ (let ((elapsed-lines (rcirc-elapsed-lines process nick channel)))
+ (when (and elapsed-lines
+ (< elapsed-lines rcirc-omit-threshold))
+ (let ((buffer (rcirc-get-buffer process channel)))
+ (when buffer
+ (with-current-buffer buffer
+ (let ((record (assoc-string nick rcirc-recent-quit-alist t))
+ (line (rcirc-last-line process nick channel)))
+ (if record
+ (setcdr record line)
+ (setq rcirc-recent-quit-alist
+ (cons (cons nick line)
+ rcirc-recent-quit-alist))))))))))
+
(defun rcirc-handler-QUIT (process sender args text)
(rcirc-ignore-update-automatic sender)
(mapc (lambda (channel)
- (rcirc-print process sender "QUIT" channel (apply 'concat args)))
+ ;; broadcast quit message each channel
+ (rcirc-print process sender "QUIT" channel (apply 'concat args))
+ ;; record nick in quit table if they recently spoke
+ (rcirc-maybe-remember-nick-quit process sender channel))
(rcirc-nick-channels process sender))
-
- ;; print in private chat buffer if it exists
- (when (rcirc-get-buffer (rcirc-buffer-process) sender)
- (rcirc-print process sender "QUIT" sender (apply 'concat args)))
-
(rcirc-nick-remove process sender))
(defun rcirc-handler-NICK (process sender args text)
@@ -2169,7 +2412,7 @@ in this buffer.")
(when rcirc-auto-authenticate-flag (rcirc-authenticate))))))
(defun rcirc-handler-PING (process sender args text)
- (rcirc-send-string process (concat "PONG " (car args))))
+ (rcirc-send-string process (concat "PONG :" (car args))))
(defun rcirc-handler-PONG (process sender args text)
;; do nothing
@@ -2289,7 +2532,7 @@ Passwords are stored in `rcirc-authinfo' (which see)."
process
(concat
"PRIVMSG chanserv :identify "
- (cadr args) " " (car args))))
+ (car args) " " (cadr args))))
((equal method 'bitlbee)
(rcirc-send-string
process
@@ -2314,7 +2557,8 @@ Passwords are stored in `rcirc-authinfo' (which see)."
(format "%s sent unsupported ctcp: %s" sender text)
t)
(funcall handler process target sender args)
- (if (not (string= request "ACTION"))
+ (unless (or (string= request "ACTION")
+ (string= request "KEEPALIVE"))
(rcirc-print process sender "CTCP" target
(format "%s" text) t))))))
diff --git a/lisp/net/rcompile.el b/lisp/net/rcompile.el
index 0a5b2c82ab8..52c2a20f5c2 100644
--- a/lisp/net/rcompile.el
+++ b/lisp/net/rcompile.el
@@ -188,8 +188,7 @@ See \\[compile]."
(when (featurep 'tramp)
(set (make-local-variable 'comint-file-name-prefix)
(funcall (symbol-function 'tramp-make-tramp-file-name)
- nil ;; multi-method. To be removed with Tramp 2.1.
- nil
+ nil ;; method.
remote-compile-user
remote-compile-host
""))))))
diff --git a/lisp/net/snmp-mode.el b/lisp/net/snmp-mode.el
index bf438638794..0ce0b91c037 100644
--- a/lisp/net/snmp-mode.el
+++ b/lisp/net/snmp-mode.el
@@ -88,6 +88,8 @@
;;; Code:
(eval-when-compile
+ (require 'cl)
+ (require 'imenu) ; Need this stuff when compiling for imenu macros, etc.
(require 'tempo))
;;;----------------------------------------------------------------------------
@@ -102,42 +104,42 @@
:version "20.4")
(defcustom snmp-special-indent t
- "*If non-nil, use a simple heuristic to try to guess the right indentation.
+ "If non-nil, use a simple heuristic to try to guess the right indentation.
If nil, then no special indentation is attempted."
:type 'boolean
:group 'snmp)
(defcustom snmp-indent-level 4
- "*Indentation level for SNMP MIBs."
+ "Indentation level for SNMP MIBs."
:type 'integer
:group 'snmp)
(defcustom snmp-tab-always-indent nil
- "*Non-nil means TAB should always reindent the current line.
+ "Non-nil means TAB should always reindent the current line.
A value of nil means reindent if point is within the initial line indentation;
otherwise insert a TAB."
:type 'boolean
:group 'snmp)
(defcustom snmp-completion-ignore-case t
- "*Non-nil means that case differences are ignored during completion.
+ "Non-nil means that case differences are ignored during completion.
A value of nil means that case is significant.
This is used during Tempo template completion."
:type 'boolean
:group 'snmp)
(defcustom snmp-common-mode-hook nil
- "*Hook(s) evaluated when a buffer enters either SNMP or SNMPv2 mode."
+ "Hook(s) evaluated when a buffer enters either SNMP or SNMPv2 mode."
:type 'hook
:group 'snmp)
(defcustom snmp-mode-hook nil
- "*Hook(s) evaluated when a buffer enters SNMP mode."
+ "Hook(s) evaluated when a buffer enters SNMP mode."
:type 'hook
:group 'snmp)
(defcustom snmpv2-mode-hook nil
- "*Hook(s) evaluated when a buffer enters SNMPv2 mode."
+ "Hook(s) evaluated when a buffer enters SNMPv2 mode."
:type 'hook
:group 'snmp)
@@ -195,26 +197,26 @@ This is used during Tempo template completion."
"Predefined types for SYNTAX clauses.")
(defvar snmp-rfc1155-types
- '(("INTEGER") ("OCTET STRING") ("OBJECT IDENTIFIER") ("NULL") ("IpAddress")
- ("NetworkAddress") ("Counter") ("Gauge") ("TimeTicks") ("Opaque"))
+ '("INTEGER" "OCTET STRING" "OBJECT IDENTIFIER" "NULL" "IpAddress"
+ "NetworkAddress" "Counter" "Gauge" "TimeTicks" "Opaque")
"Types from RFC 1155 v1 SMI.")
(defvar snmp-rfc1213-types
- '(("DisplayString"))
+ '("DisplayString")
"Types from RFC 1213 MIB-II.")
(defvar snmp-rfc1902-types
- '(("INTEGER") ("OCTET STRING") ("OBJECT IDENTIFIER") ("Integer32")
- ("IpAddress") ("Counter32") ("Gauge32") ("Unsigned32") ("TimeTicks")
- ("Opaque") ("Counter64"))
+ '("INTEGER" "OCTET STRING" "OBJECT IDENTIFIER" "Integer32"
+ "IpAddress" "Counter32" "Gauge32" "Unsigned32" "TimeTicks"
+ "Opaque" "Counter64")
"Types from RFC 1902 v2 SMI.")
(defvar snmp-rfc1903-types
- '(("DisplayString") ("PhysAddress") ("MacAddress") ("TruthValue")
- ("TestAndIncr") ("AutonomousType") ("InstancePointer")
- ("VariablePointer") ("RowPointer") ("RowStatus") ("TimeStamp")
- ("TimeInterval") ("DateAndTime") ("StorageType") ("TDomain")
- ("TAddress"))
+ '("DisplayString" "PhysAddress" "MacAddress" "TruthValue"
+ "TestAndIncr" "AutonomousType" "InstancePointer"
+ "VariablePointer" "RowPointer" "RowStatus" "TimeStamp"
+ "TimeInterval" "DateAndTime" "StorageType" "TDomain"
+ "TAddress")
"Types from RFC 1903 Textual Conventions.")
@@ -222,12 +224,12 @@ This is used during Tempo template completion."
"Predefined values for ACCESS clauses.")
(defvar snmp-rfc1155-access
- '(("read-only") ("read-write") ("write-only") ("not-accessible"))
+ '("read-only" "read-write" "write-only" "not-accessible")
"ACCESS values from RFC 1155 v1 SMI.")
(defvar snmp-rfc1902-access
- '(("read-only") ("read-write") ("read-create") ("not-accessible")
- ("accessible-for-notify"))
+ '("read-only" "read-write" "read-create" "not-accessible"
+ "accessible-for-notify")
"ACCESS values from RFC 1155 v1 SMI.")
@@ -235,11 +237,11 @@ This is used during Tempo template completion."
"Predefined values for STATUS clauses.")
(defvar snmp-rfc1212-status
- '(("mandatory") ("obsolete") ("deprecated"))
+ '("mandatory" "obsolete" "deprecated")
"STATUS values from RFC 1212 v1 SMI.")
(defvar snmp-rfc1902-status
- '(("current") ("obsolete") ("deprecated"))
+ '("current" "obsolete" "deprecated")
"STATUS values from RFC 1902 v2 SMI.")
@@ -252,13 +254,6 @@ This is used during Tempo template completion."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Need this stuff when compiling for imenu macros, etc.
-;;
-(eval-when-compile
- (require 'cl)
- (require 'imenu))
-
-
;; Create abbrev table for SNMP MIB mode
;;
(defvar snmp-mode-abbrev-table nil
@@ -275,33 +270,30 @@ This is used during Tempo template completion."
;; Set up our keymap
;;
-(defvar snmp-mode-map (make-sparse-keymap)
+(defvar snmp-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "\177" 'backward-delete-char-untabify)
+ (define-key map "\C-c\C-i" 'tempo-complete-tag)
+ (define-key map "\C-c\C-f" 'tempo-forward-mark)
+ (define-key map "\C-c\C-b" 'tempo-backward-mark)
+ map)
"Keymap used in SNMP mode.")
-(define-key snmp-mode-map "\t" 'snmp-indent-command)
-(define-key snmp-mode-map "\177" 'backward-delete-char-untabify)
-
-(define-key snmp-mode-map "\C-c\C-i" 'tempo-complete-tag)
-(define-key snmp-mode-map "\C-c\C-f" 'tempo-forward-mark)
-(define-key snmp-mode-map "\C-c\C-b" 'tempo-backward-mark)
-
;; Set up our syntax table
;;
-(defvar snmp-mode-syntax-table nil
+(defvar snmp-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ (modify-syntax-entry ?\\ "\\" st)
+ (modify-syntax-entry ?- "_ 1234" st)
+ (modify-syntax-entry ?\n ">" st)
+ (modify-syntax-entry ?\^m ">" st)
+ (modify-syntax-entry ?_ "." st)
+ (modify-syntax-entry ?: "." st)
+ (modify-syntax-entry ?= "." st)
+ st)
"Syntax table used for buffers in SNMP mode.")
-(if snmp-mode-syntax-table
- ()
- (setq snmp-mode-syntax-table (make-syntax-table))
- (modify-syntax-entry ?\\ "\\" snmp-mode-syntax-table)
- (modify-syntax-entry ?- "_ 1234" snmp-mode-syntax-table)
- (modify-syntax-entry ?\n ">" snmp-mode-syntax-table)
- (modify-syntax-entry ?\^m ">" snmp-mode-syntax-table)
- (modify-syntax-entry ?_ "." snmp-mode-syntax-table)
- (modify-syntax-entry ?: "." snmp-mode-syntax-table)
- (modify-syntax-entry ?= "." snmp-mode-syntax-table))
-
;; Set up the stuff that's common between snmp-mode and snmpv2-mode
;;
(defun snmp-common-mode (name mode abbrev font-keywords imenu-index tempo-tags)
@@ -335,10 +327,9 @@ This is used during Tempo template completion."
(setq parse-sexp-ignore-comments t)
;; Set up indentation
- (make-local-variable 'indent-line-function)
- (setq indent-line-function (if snmp-special-indent
- 'snmp-indent-line
- 'indent-to-left-margin))
+ (if snmp-special-indent
+ (set (make-local-variable 'indent-line-function) 'snmp-indent-line))
+ (set (make-local-variable 'tab-always-indent) snmp-tab-always-indent)
;; Font Lock
(make-local-variable 'font-lock-defaults)
@@ -474,7 +465,7 @@ lines for the purposes of this function."
"Indent current line as SNMP MIB code."
(let ((indent (snmp-calculate-indent))
(pos (- (point-max) (point)))
- shift-amt beg end)
+ shift-amt beg)
(beginning-of-line)
(setq beg (point))
(skip-chars-forward " \t")
@@ -488,20 +479,6 @@ lines for the purposes of this function."
(if (> (- (point-max) pos) (point))
(goto-char (- (point-max) pos)))))
-(defun snmp-indent-command ()
- "Indent current line as SNMP MIB code, or sometimes insert a TAB.
-If `snmp-tab-always-indent' is t, always reindent the current line when
-this command is run.
-If `snmp-tab-always-indent' is nil, reindent the current line if point is
-in the initial indentation. Otherwise, insert a TAB."
- (interactive)
- (if (and (not snmp-tab-always-indent)
- (save-excursion
- (skip-chars-backward " \t")
- (not (bolp))))
- (insert-tab)
- (snmp-indent-line)))
-
;;;----------------------------------------------------------------------------
;;
@@ -520,7 +497,7 @@ in the initial indentation. Otherwise, insert a TAB."
(index-table-alist '())
(index-trap-alist '())
(case-fold-search nil) ; keywords must be uppercase
- prev-pos token marker end)
+ prev-pos token end)
(goto-char (point-min))
(imenu-progress-message prev-pos 0)
;; Search for a useful MIB item (that's not in a comment)
@@ -529,7 +506,7 @@ in the initial indentation. Otherwise, insert a TAB."
(imenu-progress-message prev-pos)
(setq
end (match-end 0)
- token (cons (buffer-substring (match-beginning 1) (match-end 1))
+ token (cons (match-string 1)
(set-marker (make-marker) (match-beginning 1))))
(goto-char (match-beginning 2))
(cond ((looking-at "OBJECT-TYPE[ \t\n]+SYNTAX")
@@ -719,5 +696,5 @@ controls whether case is significant."
(provide 'snmp-mode)
-;;; arch-tag: eb6cc0f9-1e47-4023-8625-bc9aae6c3527
+;; arch-tag: eb6cc0f9-1e47-4023-8625-bc9aae6c3527
;;; snmp-mode.el ends here
diff --git a/lisp/net/socks.el b/lisp/net/socks.el
index 5a2364c652c..fd8e7ec59f2 100644
--- a/lisp/net/socks.el
+++ b/lisp/net/socks.el
@@ -247,7 +247,7 @@ If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
(defun socks-build-auth-list ()
(let ((num 0)
(retval ""))
- (mapcar
+ (mapc
(function
(lambda (x)
(if (fboundp (cdr (cdr x)))
@@ -546,7 +546,9 @@ version.")
atype
host
(if (stringp service)
- (socks-find-services-entry service)
+ (or
+ (socks-find-services-entry service)
+ (error "Unknown service: %s" service))
service))
(puthash 'buffer buffer info)
(puthash 'host host info)
diff --git a/lisp/net/tls.el b/lisp/net/tls.el
index bdade42073f..104cb991254 100644
--- a/lisp/net/tls.el
+++ b/lisp/net/tls.el
@@ -51,37 +51,25 @@
(autoload 'format-spec "format-spec")
(autoload 'format-spec-make "format-spec"))
-(eval-when-compile
- (require 'rx))
-
(defgroup tls nil
"Transport Layer Security (TLS) parameters."
:group 'comm)
(defcustom tls-end-of-info
- (rx
- (or
- ;; `openssl s_client` regexp
- (sequence
- ;; see ssl/ssl_txt.c lines 219--220
- line-start
- " Verify return code: "
- (one-or-more not-newline)
- "\n"
- ;; according to apps/s_client.c line 1515 this is always the last
- ;; line that is printed by s_client before the real data
- "---\n")
- ;; `gnutls` regexp
- (sequence
- ;; see src/cli.c lines 721--
- (sequence line-start "- Simple Client Mode:\n")
- (zero-or-more
- (or
- "\n" ; ignore blank lines
- ;; XXX: we have no way of knowing if the STARTTLS handshake
- ;; sequence has completed successfully, because `gnutls` will
- ;; only report failure.
- (sequence line-start "\*\*\* Starting TLS handshake\n"))))))
+ (concat
+ "\\("
+ ;; `openssl s_client' regexp. See ssl/ssl_txt.c lines 219-220.
+ ;; According to apps/s_client.c line 1515 `---' is always the last
+ ;; line that is printed by s_client before the real data.
+ "^ Verify return code: .+\n---\n\\|"
+ ;; `gnutls' regexp. See src/cli.c lines 721-.
+ "^- Simple Client Mode:\n"
+ "\\(\n\\|" ; ignore blank lines
+ ;; According to GnuTLS v2.1.5 src/cli.c lines 640-650 and 705-715
+ ;; in `main' the handshake will start after this message. If the
+ ;; handshake fails, the programs will abort.
+ "^\\*\\*\\* Starting TLS handshake\n\\)*"
+ "\\)")
"Regexp matching end of TLS client informational messages.
Client data stream begins after the last character matched by
this. The default matches `openssl s_client' (version 0.9.8c)
@@ -165,52 +153,51 @@ Fourth arg PORT is an integer specifying a port to connect to."
process cmd done)
(if use-temp-buffer
(setq buffer (generate-new-buffer " TLS")))
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(message "Opening TLS connection to `%s'..." host)
- (while (and (not done) (setq cmd (pop cmds)))
- (message "Opening TLS connection with `%s'..." cmd)
- (let ((process-connection-type tls-process-connection-type)
- response)
- (setq process (start-process
- name buffer shell-file-name shell-command-switch
- (format-spec
- cmd
- (format-spec-make
- ?h host
- ?p (if (integerp port)
- (int-to-string port)
- port)))))
- (while (and process
- (memq (process-status process) '(open run))
- (progn
- (goto-char (point-min))
- (not (setq done (re-search-forward tls-success nil t)))))
- (unless (accept-process-output process 1)
- (sit-for 1)))
- (message "Opening TLS connection with `%s'...%s" cmd
- (if done "done" "failed"))
- (if (not done)
- (delete-process process)
- ;; advance point to after all informational messages that
- ;; `openssl s_client' and `gnutls' print
- (let ((start-of-data nil))
- (while
- (not (setq start-of-data
- ;; the string matching `tls-end-of-info'
- ;; might come in separate chunks from
- ;; `accept-process-output', so start the
- ;; search where `tls-success' ended
- (save-excursion
- (if (re-search-forward tls-end-of-info nil t)
- (match-end 0)))))
- (accept-process-output process 1))
- (if start-of-data
- ;; move point to start of client data
- (goto-char start-of-data)))
- (setq done process))))
- (message "Opening TLS connection to `%s'...%s"
- host (if done "done" "failed")))
+ (while (and (not done) (setq cmd (pop cmds)))
+ (message "Opening TLS connection with `%s'..." cmd)
+ (let ((process-connection-type tls-process-connection-type)
+ response)
+ (setq process (start-process
+ name buffer shell-file-name shell-command-switch
+ (format-spec
+ cmd
+ (format-spec-make
+ ?h host
+ ?p (if (integerp port)
+ (int-to-string port)
+ port)))))
+ (while (and process
+ (memq (process-status process) '(open run))
+ (progn
+ (goto-char (point-min))
+ (not (setq done (re-search-forward tls-success nil t)))))
+ (unless (accept-process-output process 1)
+ (sit-for 1)))
+ (message "Opening TLS connection with `%s'...%s" cmd
+ (if done "done" "failed"))
+ (if (not done)
+ (delete-process process)
+ ;; advance point to after all informational messages that
+ ;; `openssl s_client' and `gnutls' print
+ (let ((start-of-data nil))
+ (while
+ (not (setq start-of-data
+ ;; the string matching `tls-end-of-info'
+ ;; might come in separate chunks from
+ ;; `accept-process-output', so start the
+ ;; search where `tls-success' ended
+ (save-excursion
+ (if (re-search-forward tls-end-of-info nil t)
+ (match-end 0)))))
+ (accept-process-output process 1))
+ (if start-of-data
+ ;; move point to start of client data
+ (goto-char start-of-data)))
+ (setq done process))))
+ (message "Opening TLS connection to `%s'...%s"
+ host (if done "done" "failed")))
(when use-temp-buffer
(if done (set-process-buffer process nil))
(kill-buffer buffer))
diff --git a/lisp/net/tramp-cache.el b/lisp/net/tramp-cache.el
new file mode 100644
index 00000000000..b28c20263f4
--- /dev/null
+++ b/lisp/net/tramp-cache.el
@@ -0,0 +1,333 @@
+;;; tramp-cache.el --- file information caching for Tramp
+
+;; Copyright (C) 2000, 2005, 2006, 2007 by Free Software Foundation, Inc.
+
+;; Author: Daniel Pittman <daniel@inanna.danann.net>
+;; Michael Albinus <michael.albinus@gmx.de>
+;; Keywords: comm, 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 3, 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, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; An implementation of information caching for remote files.
+
+;; Each connection, identified by a vector [method user host
+;; localname] or by a process, has a unique cache. We distinguish 3
+;; kind of caches, depending on the key:
+;;
+;; - localname is NIL. This are reusable properties. Examples:
+;; "remote-shell" identifies the POSIX shell to be called on the
+;; remote host, or "perl" is the command to be called on the remote
+;; host, when starting a Perl script. These properties are saved in
+;; the file `tramp-persistency-file-name'.
+;;
+;; - localname is a string. This are temporary properties, which are
+;; related to the file localname is referring to. Examples:
+;; "file-exists-p" is t or nile, depending on the file existence, or
+;; "file-attributes" caches the result of the function
+;; `file-attributes'.
+;;
+;; - The key is a process. This are temporary properties related to
+;; an open connection. Examples: "scripts" keeps shell script
+;; definitions already sent to the remote shell, "last-cmd-time" is
+;; the time stamp a command has been sent to the remote process.
+
+;;; Code:
+
+;; Pacify byte-compiler.
+(eval-when-compile
+ (require 'cl)
+ (autoload 'tramp-message "tramp")
+ (autoload 'tramp-tramp-file-p "tramp")
+ ;; We cannot autoload macro `with-parsed-tramp-file-name', it
+ ;; results in problems of byte-compiled code.
+ (autoload 'tramp-dissect-file-name "tramp")
+ (autoload 'tramp-file-name-method "tramp")
+ (autoload 'tramp-file-name-user "tramp")
+ (autoload 'tramp-file-name-host "tramp")
+ (autoload 'tramp-file-name-localname "tramp")
+ (autoload 'time-stamp-string "time-stamp"))
+
+;;; -- Cache --
+
+(defvar tramp-cache-data (make-hash-table :test 'equal)
+ "Hash table for remote files properties.")
+
+(defcustom tramp-persistency-file-name
+ (cond
+ ;; GNU Emacs.
+ ((and (boundp 'user-emacs-directory)
+ (stringp (symbol-value 'user-emacs-directory))
+ (file-directory-p (symbol-value 'user-emacs-directory)))
+ (expand-file-name "tramp" (symbol-value 'user-emacs-directory)))
+ ((and (not (featurep 'xemacs)) (file-directory-p "~/.emacs.d/"))
+ "~/.emacs.d/tramp")
+ ;; XEmacs.
+ ((and (boundp 'user-init-directory)
+ (stringp (symbol-value 'user-init-directory))
+ (file-directory-p (symbol-value 'user-init-directory)))
+ (expand-file-name "tramp" (symbol-value 'user-init-directory)))
+ ((and (featurep 'xemacs) (file-directory-p "~/.xemacs/"))
+ "~/.xemacs/tramp")
+ ;; For users without `~/.emacs.d/' or `~/.xemacs/'.
+ (t "~/.tramp"))
+ "File which keeps connection history for Tramp connections."
+ :group 'tramp
+ :type 'file)
+
+(defun tramp-get-file-property (vec file property default)
+ "Get the PROPERTY of FILE from the cache context of VEC.
+Returns DEFAULT if not set."
+ ;; Unify localname.
+ (setq vec (copy-sequence vec))
+ (aset vec 3 (directory-file-name file))
+ (let* ((hash (or (gethash vec tramp-cache-data)
+ (puthash vec (make-hash-table :test 'equal)
+ tramp-cache-data)))
+ (value (if (hash-table-p hash)
+ (gethash property hash default)
+ default)))
+ (tramp-message vec 8 "%s %s %s" file property value)
+ value))
+
+(defun tramp-set-file-property (vec file property value)
+ "Set the PROPERTY of FILE to VALUE, in the cache context of VEC.
+Returns VALUE."
+ ;; Unify localname.
+ (setq vec (copy-sequence vec))
+ (aset vec 3 (directory-file-name file))
+ (let ((hash (or (gethash vec tramp-cache-data)
+ (puthash vec (make-hash-table :test 'equal)
+ tramp-cache-data))))
+ (puthash property value hash)
+ (tramp-message vec 8 "%s %s %s" file property value)
+ value))
+
+(defun tramp-flush-file-property (vec file)
+ "Remove all properties of FILE in the cache context of VEC."
+ ;; Unify localname.
+ (setq vec (copy-sequence vec))
+ (aset vec 3 (directory-file-name file))
+ (tramp-message vec 8 "%s" file)
+ (remhash vec tramp-cache-data))
+
+(defun tramp-flush-directory-property (vec directory)
+ "Remove all properties of DIRECTORY in the cache context of VEC.
+Remove also properties of all files in subdirectories."
+ (let ((directory (directory-file-name directory)))
+ (tramp-message vec 8 "%s" directory)
+ (maphash
+ '(lambda (key value)
+ (when (and (stringp key)
+ (string-match directory (tramp-file-name-localname key)))
+ (remhash key tramp-cache-data)))
+ tramp-cache-data)))
+
+;; Reverting or killing a buffer should also flush file properties.
+;; They could have been changed outside Tramp. In eshell, "ls" would
+;; not show proper directory contents when a file has been copied or
+;; deleted before.
+(defun tramp-flush-file-function ()
+ "Flush all Tramp cache properties from buffer-file-name."
+ (let ((bfn (if (stringp (buffer-file-name))
+ (buffer-file-name)
+ default-directory)))
+ (when (tramp-tramp-file-p bfn)
+ (let* ((v (tramp-dissect-file-name bfn))
+ (localname (tramp-file-name-localname v)))
+ (tramp-flush-file-property v localname)))))
+
+(add-hook 'before-revert-hook 'tramp-flush-file-function)
+(add-hook 'eshell-pre-command-hook 'tramp-flush-file-function)
+(add-hook 'kill-buffer-hook 'tramp-flush-file-function)
+(add-hook 'tramp-cache-unload-hook
+ '(lambda ()
+ (remove-hook 'before-revert-hook
+ 'tramp-flush-file-function)
+ (remove-hook 'eshell-pre-command-hook
+ 'tramp-flush-file-function)
+ (remove-hook 'kill-buffer-hook
+ 'tramp-flush-file-function)))
+
+;;; -- Properties --
+
+(defun tramp-get-connection-property (key property default)
+ "Get the named PROPERTY for the connection.
+KEY identifies the connection, it is either a process or a vector.
+If the value is not set for the connection, returns DEFAULT."
+ ;; Unify key by removing localname from vector. Work with a copy in
+ ;; order to avoid side effects.
+ (when (vectorp key)
+ (setq key (copy-sequence key))
+ (aset key 3 nil))
+ (let* ((hash (gethash key tramp-cache-data))
+ (value (if (hash-table-p hash)
+ (gethash property hash default)
+ default)))
+ (tramp-message key 7 "%s %s" property value)
+ value))
+
+(defun tramp-set-connection-property (key property value)
+ "Set the named PROPERTY of a connection to VALUE.
+KEY identifies the connection, it is either a process or a vector.
+PROPERTY is set persistent when KEY is a vector."
+ ;; Unify key by removing localname from vector. Work with a copy in
+ ;; order to avoid side effects.
+ (when (vectorp key)
+ (setq key (copy-sequence key))
+ (aset key 3 nil))
+ (let ((hash (or (gethash key tramp-cache-data)
+ (puthash key (make-hash-table :test 'equal)
+ tramp-cache-data))))
+ (puthash property value hash)
+ ;; This function is called also during initialization of
+ ;; tramp-cache.el. `tramp-message´ is not defined yet at this
+ ;; time, so we ignore the corresponding error.
+ (condition-case nil
+ (tramp-message key 7 "%s %s" property value)
+ (error nil))
+ value))
+
+(defun tramp-flush-connection-property (key event)
+ "Remove all properties identified by KEY.
+KEY identifies the connection, it is either a process or a
+vector. EVENT is not used, it is just applied because this
+function is intended to run also as process sentinel."
+ ;; Unify key by removing localname from vector. Work with a copy in
+ ;; order to avoid side effects.
+ (when (vectorp key)
+ (setq key (copy-sequence key))
+ (aset key 3 nil))
+; (tramp-message key 7 "%s" event)
+ (remhash key tramp-cache-data))
+
+(defun tramp-cache-print (table)
+ "Print hash table TABLE."
+ (when (hash-table-p table)
+ (let (result)
+ (maphash
+ '(lambda (key value)
+ (let ((tmp (format
+ "(%s %s)"
+ (if (processp key)
+ (prin1-to-string (prin1-to-string key))
+ (prin1-to-string key))
+ (if (hash-table-p value)
+ (tramp-cache-print value)
+ (if (bufferp value)
+ (prin1-to-string (prin1-to-string value))
+ (prin1-to-string value))))))
+ (setq result (if result (concat result " " tmp) tmp))))
+ table)
+ result)))
+
+(defun tramp-list-connections ()
+ "Return a list of all known connection vectors according to `tramp-cache'."
+ (let (result)
+ (maphash
+ '(lambda (key value)
+ (when (and (vectorp key) (null (aref key 3)))
+ (add-to-list 'result key)))
+ tramp-cache-data)
+ result))
+
+(defun tramp-dump-connection-properties ()
+ "Write persistent connection properties into file `tramp-persistency-file-name'."
+ ;; We shouldn't fail, otherwise (X)Emacs might not be able to be closed.
+ (condition-case nil
+ (when (and (hash-table-p tramp-cache-data)
+ (not (zerop (hash-table-count tramp-cache-data)))
+ (stringp tramp-persistency-file-name))
+ (let ((cache (copy-hash-table tramp-cache-data)))
+ ;; Remove temporary data.
+ (maphash
+ '(lambda (key value)
+ (if (and (vectorp key) (not (tramp-file-name-localname key)))
+ (progn
+ (remhash "process-name" value)
+ (remhash "process-buffer" value))
+ (remhash key cache)))
+ cache)
+ ;; Dump it.
+ (with-temp-buffer
+ (insert
+ ";; -*- emacs-lisp -*-"
+ ;; `time-stamp-string' might not exist in all (X)Emacs flavors.
+ (condition-case nil
+ (progn
+ (format
+ " <%s %s>\n"
+ (time-stamp-string "%02y/%02m/%02d %02H:%02M:%02S")
+ tramp-persistency-file-name))
+ (error "\n"))
+ ";; Tramp connection history. Don't change this file.\n"
+ ";; You can delete it, forcing Tramp to reapply the checks.\n\n"
+ (with-output-to-string
+ (pp (read (format "(%s)" (tramp-cache-print cache))))))
+ (write-region
+ (point-min) (point-max) tramp-persistency-file-name))))
+ (error nil)))
+
+(add-hook 'kill-emacs-hook 'tramp-dump-connection-properties)
+(add-hook 'tramp-cache-unload-hook
+ '(lambda ()
+ (remove-hook 'kill-emacs-hook
+ 'tramp-dump-connection-properties)))
+
+(defun tramp-parse-connection-properties (method)
+ "Return a list of (user host) tuples allowed to access for METHOD.
+This function is added always in `tramp-get-completion-function'
+for all methods. Resulting data are derived from connection
+history."
+ (let (res)
+ (maphash
+ '(lambda (key value)
+ (if (and (vectorp key)
+ (string-equal method (tramp-file-name-method key))
+ (not (tramp-file-name-localname key)))
+ (push (list (tramp-file-name-user key)
+ (tramp-file-name-host key))
+ res)))
+ tramp-cache-data)
+ res))
+
+;; Read persistent connection history.
+(when (and (stringp tramp-persistency-file-name)
+ (zerop (hash-table-count tramp-cache-data)))
+ (condition-case err
+ (with-temp-buffer
+ (insert-file-contents tramp-persistency-file-name)
+ (let ((list (read (current-buffer)))
+ element key item)
+ (while (setq element (pop list))
+ (setq key (pop element))
+ (while (setq item (pop element))
+ (tramp-set-connection-property key (pop item) (car item))))))
+ (file-error
+ ;; Most likely because the file doesn't exist yet. No message.
+ (clrhash tramp-cache-data))
+ (error
+ ;; File is corrupted.
+ (message "Tramp persistency file '%s' is corrupted: %s"
+ tramp-persistency-file-name (error-message-string err))
+ (clrhash tramp-cache-data))))
+
+(provide 'tramp-cache)
+
+;; arch-tag: ee1739b7-7628-408c-9b96-d11a74b05d26
+;;; tramp-cache.el ends here
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
new file mode 100644
index 00000000000..7cf2bf3d923
--- /dev/null
+++ b/lisp/net/tramp-cmds.el
@@ -0,0 +1,406 @@
+;;; tramp-cmds.el --- Interactive commands for Tramp
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: Michael Albinus <michael.albinus@gmx.de>
+;; Keywords: comm, 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 3, 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, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package provides all interactive commands which are releated
+;; to Tramp.
+
+;;; Code:
+
+(require 'tramp)
+
+(defun tramp-list-tramp-buffers ()
+ "Return a list of all Tramp connection buffers."
+ (append
+ (all-completions
+ "*tramp" (mapcar 'list (mapcar 'buffer-name (buffer-list))))
+ (all-completions
+ "*debug tramp" (mapcar 'list (mapcar 'buffer-name (buffer-list))))))
+
+(defun tramp-list-remote-buffers ()
+ "Return a list of all buffers with remote default-directory."
+ (delq
+ nil
+ (mapcar
+ (lambda (x)
+ (with-current-buffer x
+ (when (and (stringp default-directory)
+ (file-remote-p default-directory))
+ x)))
+ (buffer-list))))
+
+(defun tramp-cleanup-connection (vec)
+ "Flush all connection related objects.
+This includes password cache, file cache, connection cache, buffers.
+When called interactively, a Tramp connection has to be selected."
+ (interactive
+ ;; When interactive, select the Tramp remote identification.
+ ;; Return nil when there is no Tramp connection.
+ (list
+ (let ((connections
+ (mapcar
+ (lambda (x)
+ (tramp-make-tramp-file-name
+ (tramp-file-name-method x)
+ (tramp-file-name-user x)
+ (tramp-file-name-host x)
+ (tramp-file-name-localname x)))
+ (tramp-list-connections)))
+ name)
+
+ (when connections
+ (setq name
+ (completing-read
+ "Enter Tramp connection: " connections nil t
+ (try-completion "" connections)))
+ (when (and name (file-remote-p name))
+ (with-parsed-tramp-file-name name nil v))))))
+
+ (if (not vec)
+ ;; Nothing to do.
+ (message "No Tramp connection found.")
+
+ ;; Flush password cache.
+ (tramp-clear-passwd vec)
+
+ ;; Flush file cache.
+ (tramp-flush-directory-property vec "/")
+
+ ;; Flush connection cache.
+ (tramp-flush-connection-property (tramp-get-connection-process vec) nil)
+ (tramp-flush-connection-property vec nil)
+
+ ;; Remove buffers.
+ (dolist
+ (buf (list (get-buffer (tramp-buffer-name vec))
+ (get-buffer (tramp-debug-buffer-name vec))
+ (tramp-get-connection-property vec "process-buffer" nil)))
+ (when (bufferp buf) (kill-buffer buf)))))
+
+(defun tramp-cleanup-all-connections ()
+ "Flush all Tramp internal objects.
+This includes password cache, file cache, connection cache, buffers."
+ (interactive)
+
+ ;; Flush password cache.
+ (when (functionp 'password-reset)
+ (funcall (symbol-function 'password-reset)))
+
+ ;; Flush file and connection cache.
+ (clrhash tramp-cache-data)
+
+ ;; Remove buffers.
+ (dolist (name (tramp-list-tramp-buffers))
+ (when (bufferp (get-buffer name)) (kill-buffer name))))
+
+(defun tramp-cleanup-all-buffers ()
+ "Kill all remote buffers."
+ (interactive)
+
+ ;; Remove all Tramp related buffers.
+ (tramp-cleanup-all-connections)
+
+ ;; Remove all buffers with a remote default-directory.
+ (dolist (name (tramp-list-remote-buffers))
+ (when (bufferp (get-buffer name)) (kill-buffer name))))
+
+;; Tramp version is useful in a number of situations.
+
+(defun tramp-version (arg)
+ "Print version number of tramp.el in minibuffer or current buffer."
+ (interactive "P")
+ (if arg (insert tramp-version) (message tramp-version)))
+
+;; Make the `reporter` functionality available for making bug reports about
+;; the package. A most useful piece of code.
+
+(autoload 'reporter-submit-bug-report "reporter")
+
+(defun tramp-bug ()
+ "Submit a bug report to the Tramp developers."
+ (interactive)
+ (require 'reporter)
+ (catch 'dont-send
+ (let ((reporter-prompt-for-summary-p t))
+ (reporter-submit-bug-report
+ tramp-bug-report-address ; to-address
+ (format "tramp (%s)" tramp-version) ; package name and version
+ (delq nil
+ `(;; Current state
+ tramp-current-method
+ tramp-current-user
+ tramp-current-host
+
+ ;; System defaults
+ tramp-auto-save-directory ; vars to dump
+ tramp-default-method
+ tramp-default-method-alist
+ tramp-default-host
+ tramp-default-proxies-alist
+ tramp-default-user
+ tramp-default-user-alist
+ tramp-rsh-end-of-line
+ tramp-default-password-end-of-line
+ tramp-login-prompt-regexp
+ ;; Mask non-7bit characters
+ (tramp-password-prompt-regexp . tramp-reporter-dump-variable)
+ tramp-wrong-passwd-regexp
+ tramp-yesno-prompt-regexp
+ tramp-yn-prompt-regexp
+ tramp-terminal-prompt-regexp
+ tramp-temp-name-prefix
+ tramp-file-name-structure
+ tramp-file-name-regexp
+ tramp-methods
+ tramp-end-of-output
+ tramp-local-coding-commands
+ tramp-remote-coding-commands
+ tramp-actions-before-shell
+ tramp-actions-copy-out-of-band
+ tramp-terminal-type
+ ;; Mask non-7bit characters
+ (tramp-shell-prompt-pattern . tramp-reporter-dump-variable)
+ ,(when (boundp 'tramp-backup-directory-alist)
+ 'tramp-backup-directory-alist)
+ ,(when (boundp 'tramp-bkup-backup-directory-info)
+ 'tramp-bkup-backup-directory-info)
+ ;; Dump cache.
+ (tramp-cache-data . tramp-reporter-dump-variable)
+
+ ;; Non-tramp variables of interest
+ ;; Mask non-7bit characters
+ (shell-prompt-pattern . tramp-reporter-dump-variable)
+ backup-by-copying
+ backup-by-copying-when-linked
+ backup-by-copying-when-mismatch
+ ,(when (boundp 'backup-by-copying-when-privileged-mismatch)
+ 'backup-by-copying-when-privileged-mismatch)
+ ,(when (boundp 'password-cache)
+ 'password-cache)
+ ,(when (boundp 'password-cache-expiry)
+ 'password-cache-expiry)
+ ,(when (boundp 'backup-directory-alist)
+ 'backup-directory-alist)
+ ,(when (boundp 'bkup-backup-directory-info)
+ 'bkup-backup-directory-info)
+ file-name-handler-alist))
+
+ 'tramp-load-report-modules ; pre-hook
+ 'tramp-append-tramp-buffers ; post-hook
+ "\
+Enter your bug report in this message, including as much detail
+as you possibly can about the problem, what you did to cause it
+and what the local and remote machines are.
+
+If you can give a simple set of instructions to make this bug
+happen reliably, please include those. Thank you for helping
+kill bugs in Tramp.
+
+Another useful thing to do is to put
+
+ (setq tramp-verbose 8)
+
+in the ~/.emacs file and to repeat the bug. Then, include the
+contents of the *tramp/foo* buffer and the *debug tramp/foo*
+buffer in your bug report.
+
+--bug report follows this line--
+"))))
+
+(defun tramp-reporter-dump-variable (varsym mailbuf)
+ "Pretty-print the value of the variable in symbol VARSYM.
+Used for non-7bit chars in strings."
+ (let* ((reporter-eval-buffer (symbol-value 'reporter-eval-buffer))
+ (val (with-current-buffer reporter-eval-buffer
+ (symbol-value varsym))))
+
+ (if (hash-table-p val)
+ ;; Pretty print the cache.
+ (set varsym (read (format "(%s)" (tramp-cache-print val))))
+ ;; There are characters to be masked.
+ (when (and (boundp 'mm-7bit-chars)
+ (string-match
+ (concat "[^" (symbol-value 'mm-7bit-chars) "]") val))
+ (with-current-buffer reporter-eval-buffer
+ (set varsym (format "(base64-decode-string \"%s\""
+ (base64-encode-string val))))))
+
+ ;; Dump variable.
+ (funcall (symbol-function 'reporter-dump-variable) varsym mailbuf)
+
+ (unless (hash-table-p val)
+ ;; Remove string quotation.
+ (forward-line -1)
+ (when (looking-at
+ (concat "\\(^.*\\)" "\"" ;; \1 "
+ "\\((base64-decode-string \\)" "\\\\" ;; \2 \
+ "\\(\".*\\)" "\\\\" ;; \3 \
+ "\\(\")\\)" "\"$")) ;; \4 "
+ (replace-match "\\1\\2\\3\\4")
+ (beginning-of-line)
+ (insert " ;; variable encoded due to non-printable characters\n"))
+ (forward-line 1))
+
+ ;; Reset VARSYM to old value.
+ (with-current-buffer reporter-eval-buffer
+ (set varsym val))))
+
+(defun tramp-load-report-modules ()
+ "Load needed modules for reporting."
+
+ ;; We load message.el and mml.el from Gnus.
+ (if (featurep 'xemacs)
+ (progn
+ (load "message" 'noerror)
+ (load "mml" 'noerror))
+ (require 'message nil 'noerror)
+ (require 'mml nil 'noerror))
+ (when (functionp 'message-mode)
+ (funcall (symbol-function 'message-mode)))
+ (when (functionp 'mml-mode)
+ (funcall (symbol-function 'mml-mode) t)))
+
+(defun tramp-append-tramp-buffers ()
+ "Append Tramp buffers and buffer local variables into the bug report."
+
+ (goto-char (point-max))
+
+ ;; Dump buffer local variables.
+ (dolist (buffer
+ (delq nil
+ (mapcar
+ '(lambda (b)
+ (when (string-match "\\*tramp/" (buffer-name b)) b))
+ (buffer-list))))
+ (let ((reporter-eval-buffer buffer)
+ (buffer-name (buffer-name buffer))
+ (elbuf (get-buffer-create " *tmp-reporter-buffer*")))
+ (with-current-buffer elbuf
+ (emacs-lisp-mode)
+ (erase-buffer)
+ (insert "\n(setq\n")
+ (lisp-indent-line)
+ (funcall (symbol-function 'reporter-dump-variable)
+ 'buffer-name (current-buffer))
+ (dolist (varsym-or-cons-cell (buffer-local-variables buffer))
+ (let ((varsym (or (car-safe varsym-or-cons-cell)
+ varsym-or-cons-cell)))
+ (when (string-match "tramp" (symbol-name varsym))
+ (funcall
+ (symbol-function 'reporter-dump-variable)
+ varsym (current-buffer)))))
+ (lisp-indent-line)
+ (insert ")\n"))
+ (insert-buffer-substring elbuf)))
+
+ ;; Append buffers only when we are in message mode.
+ (when (and
+ (eq major-mode 'message-mode)
+ (boundp 'mml-mode)
+ (symbol-value 'mml-mode))
+
+ (let ((tramp-buf-regexp "\\*\\(debug \\)?tramp/")
+ (buffer-list (funcall (symbol-function 'tramp-list-tramp-buffers)))
+ (curbuf (current-buffer)))
+
+ ;; There is at least one Tramp buffer.
+ (when buffer-list
+ (switch-to-buffer (list-buffers-noselect nil))
+ (delete-other-windows)
+ (setq buffer-read-only nil)
+ (goto-char (point-min))
+ (while (not (eobp))
+ (if (re-search-forward
+ tramp-buf-regexp (tramp-compat-line-end-position) t)
+ (forward-line 1)
+ (forward-line 0)
+ (let ((start (point)))
+ (forward-line 1)
+ (kill-region start (point)))))
+ (insert "
+The buffer(s) above will be appended to this message. If you
+don't want to append a buffer because it contains sensitive data,
+or because the buffer is too large, you should delete the
+respective buffer. The buffer(s) will contain user and host
+names. Passwords will never be included there.")
+
+ (when (>= tramp-verbose 6)
+ (insert "\n\n")
+ (let ((start (point)))
+ (insert "\
+Please note that you have set `tramp-verbose' to a value of at
+least 6. Therefore, the contents of files might be included in
+the debug buffer(s).")
+ (add-text-properties start (point) (list 'face 'italic))))
+
+ (set-buffer-modified-p nil)
+ (setq buffer-read-only t)
+ (goto-char (point-min))
+
+ (if (y-or-n-p "Do you want to append the buffer(s)? ")
+ ;; OK, let's send. First we delete the buffer list.
+ (progn
+ (kill-buffer nil)
+ (switch-to-buffer curbuf)
+ (goto-char (point-max))
+ (insert "\n\
+This is a special notion of the `gnus/message' package. If you
+use another mail agent (by copying the contents of this buffer)
+please ensure that the buffers are attached to your email.\n\n")
+ (dolist (buffer buffer-list)
+ (funcall (symbol-function 'mml-insert-empty-tag)
+ 'part 'type "text/plain" 'encoding "base64"
+ 'disposition "attachment" 'buffer buffer
+ 'description buffer))
+ (set-buffer-modified-p nil))
+
+ ;; Don't send. Delete the message buffer.
+ (set-buffer curbuf)
+ (set-buffer-modified-p nil)
+ (kill-buffer nil)
+ (throw 'dont-send nil))))))
+
+(defalias 'tramp-submit-bug 'tramp-bug)
+
+(provide 'tramp-cmds)
+
+;;; TODO:
+
+;; * Clean up unused *tramp/foo* buffers after a while. (Pete Forman)
+;; * WIBNI there was an interactive command prompting for Tramp
+;; method, hostname, username and filename and translates the user
+;; input into the correct filename syntax (depending on the Emacs
+;; flavor) (Reiner Steib)
+;; * Let the user edit the connection properties interactively.
+;; Something like `gnus-server-edit-server' in Gnus' *Server* buffer.
+;; * It's just that when I come to Customize `tramp-default-user-alist'
+;; I'm presented with a mismatch and raw lisp for a value. It is my
+;; understanding that a variable declared with defcustom is a User
+;; Option and should not be modified by the code. add-to-list is
+;; called in several places. One way to handle that is to have a new
+;; ordinary variable that gets its initial value from
+;; tramp-default-user-alist and then is added to. (Pete Forman)
+
+;; arch-tag: 190d4c33-76bb-4e99-8b6f-71741f23d98c
+;;; tramp-cmds.el ends here
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el
new file mode 100644
index 00000000000..19d25f43515
--- /dev/null
+++ b/lisp/net/tramp-compat.el
@@ -0,0 +1,237 @@
+;;; tramp-compat.el --- Tramp compatibility functions
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: Michael Albinus <michael.albinus@gmx.de>
+;; Keywords: comm, 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 3, 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, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Tramp's main Emacs version for development is GNU Emacs 23. This
+;; package provides compatibility functions for GNU Emacs 21, GNU
+;; Emacs 22 and XEmacs 21.4+.
+
+;;; Code:
+
+(eval-and-compile
+
+ ;; Pacify byte-compiler.
+ (require 'cl)
+ (require 'custom)
+
+ ;; Load the appropriate timer package.
+ (if (featurep 'xemacs)
+ (require 'timer-funcs)
+ (require 'timer))
+
+ ;; tramp-util offers integration into other (X)Emacs packages like
+ ;; compile.el, gud.el etc. Not necessary in Emacs 23.
+ (eval-after-load "tramp"
+ ;; We check whether `start-file-process' is an alias.
+ '(when (or (not (fboundp 'start-file-process))
+ (symbolp (symbol-function 'start-file-process)))
+ (require 'tramp-util)
+ (add-hook 'tramp-unload-hook
+ '(lambda ()
+ (when (featurep 'tramp-util)
+ (unload-feature 'tramp-util 'force))))))
+
+ ;; Make sure that we get integration with the VC package. When it
+ ;; is loaded, we need to pull in the integration module. Not
+ ;; necessary in Emacs 23.
+ (eval-after-load "vc"
+ (eval-after-load "tramp"
+ ;; We check whether `start-file-process' is an alias.
+ '(when (or (not (fboundp 'start-file-process))
+ (symbolp (symbol-function 'start-file-process)))
+ (require 'tramp-vc)
+ (add-hook 'tramp-unload-hook
+ '(lambda ()
+ (when (featurep 'tramp-vc)
+ (unload-feature 'tramp-vc 'force)))))))
+
+ ;; Avoid byte-compiler warnings if the byte-compiler supports this.
+ ;; Currently, XEmacs supports this.
+ (when (featurep 'xemacs)
+ (unless (boundp 'byte-compile-default-warnings)
+ (defvar byte-compile-default-warnings nil))
+ (delq 'unused-vars byte-compile-default-warnings))
+
+ ;; `last-coding-system-used' is unknown in XEmacs.
+ (unless (boundp 'last-coding-system-used)
+ (defvar last-coding-system-used nil))
+
+ ;; `directory-sep-char' is an obsolete variable in Emacs. But it is
+ ;; used in XEmacs, so we set it here and there. The following is
+ ;; needed to pacify Emacs byte-compiler.
+ (unless (boundp 'byte-compile-not-obsolete-var)
+ (defvar byte-compile-not-obsolete-var nil))
+ (setq byte-compile-not-obsolete-var 'directory-sep-char)
+
+ ;; `with-temp-message' does not exists in XEmacs.
+ (condition-case nil
+ (with-temp-message (current-message) nil)
+ (error (defmacro with-temp-message (message &rest body) `(progn ,@body))))
+
+ ;; `set-buffer-multibyte' comes from Emacs Leim.
+ (unless (fboundp 'set-buffer-multibyte)
+ (defalias 'set-buffer-multibyte 'ignore))
+
+ ;; `font-lock-add-keywords' does not exist in XEmacs.
+ (unless (fboundp 'font-lock-add-keywords)
+ (defalias 'font-lock-add-keywords 'ignore))
+
+ ;; `file-remote-p' has been introduced with Emacs 22. The version
+ ;; of XEmacs is not a magic file name function (yet); this is
+ ;; corrected in tramp-util.el. Here it is sufficient if the
+ ;; function exists.
+ (unless (fboundp 'file-remote-p)
+ (defalias 'file-remote-p 'tramp-handle-file-remote-p))
+
+ ;; `process-file' exists since Emacs 22.
+ (unless (fboundp 'process-file)
+ (defalias 'process-file 'tramp-handle-process-file))
+
+ ;; `start-file-process' is new in Emacs 23.
+ (unless (fboundp 'start-file-process)
+ (defalias 'start-file-process 'tramp-handle-start-file-process))
+
+ ;; `set-file-times' is also new in Emacs 23.
+ (unless (fboundp 'set-file-times)
+ (defalias 'set-file-times 'tramp-handle-set-file-times)))
+
+(defsubst tramp-compat-line-end-position ()
+ "Return point at end of line (compat function).
+Calls `line-end-position' or `point-at-eol' if defined, else
+own implementation."
+ (cond
+ ((fboundp 'line-end-position) (funcall (symbol-function 'line-end-position)))
+ ((fboundp 'point-at-eol) (funcall (symbol-function 'point-at-eol)))
+ (t (save-excursion (end-of-line) (point)))))
+
+(defsubst tramp-compat-temporary-file-directory ()
+ "Return name of directory for temporary files (compat function).
+For Emacs, this is the variable `temporary-file-directory', for XEmacs
+this is the function `temp-directory'."
+ (cond
+ ((boundp 'temporary-file-directory) (symbol-value 'temporary-file-directory))
+ ((fboundp 'temp-directory) (funcall (symbol-function 'temp-directory)))
+ ((let ((d (getenv "TEMP"))) (and d (file-directory-p d)))
+ (file-name-as-directory (getenv "TEMP")))
+ ((let ((d (getenv "TMP"))) (and d (file-directory-p d)))
+ (file-name-as-directory (getenv "TMP")))
+ ((let ((d (getenv "TMPDIR"))) (and d (file-directory-p d)))
+ (file-name-as-directory (getenv "TMPDIR")))
+ ((file-exists-p "c:/temp") (file-name-as-directory "c:/temp"))
+ (t (message (concat "Neither `temporary-file-directory' nor "
+ "`temp-directory' is defined -- using /tmp."))
+ (file-name-as-directory "/tmp"))))
+
+;; `make-temp-file' exists in Emacs only. The third parameter SUFFIX
+;; has been introduced with Emacs 22. We try it, if it fails, we fall
+;; back to `make-temp-name', creating the temporary file immediately
+;; in order to avoid a security hole.
+(defsubst tramp-compat-make-temp-file (filename)
+ "Create a temporary file (compat function).
+Add the extension of FILENAME, if existing."
+ (let ((prefix (expand-file-name
+ (symbol-value 'tramp-temp-name-prefix)
+ (tramp-compat-temporary-file-directory)))
+ (extension (file-name-extension filename t))
+ result)
+ (condition-case nil
+ (setq result
+ (funcall (symbol-function 'make-temp-file) prefix nil extension))
+ (error
+ ;; We use our own implementation, taken from files.el.
+ (while
+ (condition-case ()
+ (progn
+ (setq result (concat (make-temp-name prefix) extension))
+ (write-region
+ "" nil result nil 'silent nil
+ ;; 7th parameter is MUSTBENEW in Emacs, and
+ ;; CODING-SYSTEM in XEmacs. It is not a security
+ ;; hole in XEmacs if we cannot use this parameter,
+ ;; because XEmacs uses a user-specific subdirectory
+ ;; with 0700 permissions.
+ (when (not (featurep 'xemacs)) 'excl))
+ nil)
+ (file-already-exists t))
+ ;; The file was somehow created by someone else between
+ ;; `make-temp-name' and `write-region', let's try again.
+ nil)))
+ result))
+
+;; `most-positive-fixnum' arrived in Emacs 22. Before, and in XEmacs,
+;; it is a fixed value.
+(defsubst tramp-compat-most-positive-fixnum ()
+ "Return largest positive integer value (compat function)."
+ (cond
+ ((boundp 'most-positive-fixnum) (symbol-value 'most-positive-fixnum))
+ ;; Default value in XEmacs and Emacs 21.
+ (t 134217727)))
+
+;; ID-FORMAT exists since Emacs 22.
+(defun tramp-compat-file-attributes (filename &optional id-format)
+ "Like `file-attributes' for Tramp files (compat function)."
+ (cond
+ ((or (null id-format) (eq id-format 'integer))
+ (file-attributes filename))
+ ((file-remote-p filename)
+ (funcall (symbol-function 'tramp-handle-file-attributes)
+ filename id-format))
+ (t (condition-case nil
+ (funcall (symbol-function 'file-attributes) filename id-format)
+ (error (file-attributes filename))))))
+
+;; PRESERVE-UID-GID has been introduced with Emacs 23. It does not
+;; hurt to ignore it for other (X)Emacs versions.
+(defun tramp-compat-copy-file
+ (filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
+ "Like `copy-file' for Tramp files (compat function)."
+ (if preserve-uid-gid
+ (funcall
+ (symbol-function 'copy-file)
+ filename newname ok-if-already-exists keep-date preserve-uid-gid)
+ (copy-file filename newname ok-if-already-exists keep-date)))
+
+;; `copy-tree' is a built-in function in XEmacs. In Emacs 21, it is
+;; an auoloaded function in cl-extra.el. Since Emacs 22, it is part
+;; of subr.el. There are problems when autoloading, therefore we test
+;; for for `subrp' and `symbol-file'. Implementation is taken from Emacs23.
+(defun tramp-compat-copy-tree (tree)
+ "Make a copy of TREE (compat function)."
+ (if (or (subrp 'copy-tree) (symbol-file 'copy-tree))
+ (funcall (symbol-function 'copy-tree) tree)
+ (let (result)
+ (while (consp tree)
+ (let ((newcar (car tree)))
+ (if (consp (car tree))
+ (setq newcar (tramp-compat-copy-tree (car tree))))
+ (push newcar result))
+ (setq tree (cdr tree)))
+ (nconc (nreverse result) tree))))
+
+(provide 'tramp-compat)
+
+;;; TODO:
+
+;; arch-tag: 0e724b18-6699-4f87-ad96-640b272e5c85
+;;; tramp-compat.el ends here
diff --git a/lisp/net/tramp-fish.el b/lisp/net/tramp-fish.el
new file mode 100644
index 00000000000..95091c276bc
--- /dev/null
+++ b/lisp/net/tramp-fish.el
@@ -0,0 +1,1166 @@
+;;; tramp-fish.el --- Tramp access functions for FISH protocol
+
+;; Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+
+;; Author: Michael Albinus <michael.albinus@gmx.de>
+;; Keywords: comm, 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 3, 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, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Access functions for FIles transferred over SHell protocol from Tramp.
+
+;; FISH is a protocol developped for the GNU Midnight Commander
+;; <https://savannah.gnu.org/projects/mc>. A client connects to a
+;; remote host via ssh (or rsh, shall be configurable), and starts
+;; there a fish server via the command "start_fish_server". All
+;; commands from the client have the form "#FISH_COMMAND\n" (always
+;; one line), followed by equivalent shell commands in case there is
+;; no fish server running.
+
+;; The fish server (or the equivalent shell commands) must return the
+;; response, which is finished by a line "### xxx <optional text>\n".
+;; "xxx" stands for 3 digits, representing a return code. Return
+;; codes "# 000" and "# 001" are reserved for fallback implementation
+;; with native shell commands; they are not used inside the server. See
+;; <http://cvs.savannah.gnu.org/viewcvs/mc/vfs/README.fish?root=mc&view=markup>
+;; for details of original specification.
+
+;; The GNU Midnight Commander implements the original fish protocol
+;; version 0.0.2. The KDE Konqueror has its own implementation, which
+;; can be found at
+;; <http://websvn.kde.org/branches/KDE/3.5/kdebase/kioslave/fish>. It
+;; implements an extended protocol version 0.0.3. Additionally, it
+;; provides a fish server implementation in Perl (which is the only
+;; implementation I've heard of). The following command reference is
+;; based on that implementation.
+
+;; All commands return either "### 2xx\n" (OK) or "### 5xx <optional text>\n"
+;; (NOK). Return codes are mentioned only if they are different from this.
+;; Spaces in any parameter must be escaped by "\ ".
+
+;; Command/Return Code Comment
+;;
+;; #FISH initial connection, not used
+;; in .fishsrv.pl
+;; ### 100 transfer fish server missing server, or wrong checksum
+;; version 0.0.3 only
+
+;; #VER a.b.c <commands requested>
+;; VER x.y.z <commands offered> .fishsrv.pl response is not uptodate
+
+;; #PWD
+;; /path/to/file
+
+;; #CWD /some/path
+
+;; #COPY /path/a /path/b version 0.0.3 only
+
+;; #RENAME /path/a /path/b
+
+;; #SYMLINK /path/a /path/b
+
+;; #LINK /path/a /path/b
+
+;; #DELE /some/path
+
+;; #MKD /some/path
+
+;; #RMD /some/path
+
+;; #CHOWN user /file/name
+
+;; #CHGRP group /file/name
+
+;; #CHMOD 1234 file
+
+;; #READ <offset> <size> /path/and/filename
+;; ### 291 successful exit when reading
+;; ended at eof
+;; ### 292 successful exit when reading
+;; did not end at eof
+
+;; #WRITE <offset> <size> /path/and/filename
+
+;; #APPEND <size> /path/and/filename version 0.0.3 only
+
+;; #LIST /directory
+;; <number of entries> version 0.0.3 only
+;; ### 100 version 0.0.3 only
+;; P<unix permissions> <owner>.<group>
+;; S<size>
+;; d<3-letters month name> <day> <year or HH:MM>
+;; D<year> <month> <day> <hour> <minute> <second>[.1234]
+;; E<major-of-device>,<minor>
+;; :<filename>
+;; L<filename symlink points to>
+;; M<mimetype> version 0.0.3 only
+;; <blank line to separate items>
+
+;; #STAT /file version 0.0.3 only
+;; like #LIST except for directories
+;; <number of entries>
+;; ### 100
+;; P<unix permissions> <owner>.<group>
+;; S<size>
+;; d<3-letters month name> <day> <year or HH:MM>
+;; D<year> <month> <day> <hour> <minute> <second>[.1234]
+;; E<major-of-device>,<minor>
+;; :<filename>
+;; L<filename symlink points to>
+;; <blank line to separate items>
+
+;; #RETR /some/name
+;; <filesize>
+;; ### 100
+;; <binary data> exactly filesize bytes
+;; ### 200 with no preceding newline
+
+;; #STOR <size> /file/name
+;; ### 100
+;; <data> exactly size bytes
+;; ### 001 partial success
+
+;; #EXEC <command> <tmpfile> version 0.0.3 only
+;; <tmpfile> must not exists. It contains the output of <command>.
+;; It can be retrieved afterwards. Last line is
+;; ###RESULT: <returncode>
+
+;; This implementation is meant as proof of the concept, whether there
+;; is a better performance compared with the native ssh method. It
+;; looks like the file information retrieval is slower, especially the
+;; #LIST command. On the other hand, the file contents transmission
+;; seems to perform better than other inline methods, because there is
+;; no need for data encoding/decoding, and it supports the APPEND
+;; parameter of `write-region'. Transfer of binary data fails due to
+;; Emacs' process input/output handling.
+
+
+;;; Code:
+
+(require 'tramp)
+(require 'tramp-cache)
+(require 'tramp-compat)
+
+;; Define FISH method ...
+(defcustom tramp-fish-method "fish"
+ "*Method to connect via FISH protocol."
+ :group 'tramp
+ :type 'string)
+
+;; ... and add it to the method list.
+(add-to-list 'tramp-methods (cons tramp-fish-method nil))
+
+;; Add a default for `tramp-default-user-alist'. Default is the local user.
+(add-to-list 'tramp-default-user-alist
+ `(,tramp-fish-method nil ,(user-login-name)))
+
+;; Add completion function for FISH method.
+(tramp-set-completion-function
+ tramp-fish-method tramp-completion-function-alist-ssh)
+
+(defconst tramp-fish-continue-prompt-regexp "^### 100.*\n"
+ "FISH return code OK.")
+
+;; It cannot be a defconst, occasionally we bind it locally.
+(defvar tramp-fish-ok-prompt-regexp "^### 200\n"
+ "FISH return code OK.")
+
+(defconst tramp-fish-error-prompt-regexp "^### \\(4\\|5\\)[0-9]+.*\n"
+ "Regexp for possible error strings of FISH servers.
+Used instead of analyzing error codes of commands.")
+
+(defcustom tramp-fish-start-fish-server-command
+ (concat "stty intr \"\" quit \"\" erase \"\" kill \"\" eof \"\" eol \"\" eol2 \"\" swtch \"\" start \"\" stop \"\" susp \"\" rprnt \"\" werase \"\" lnext \"\" flush \"\"; "
+ "perl .fishsrv.pl "
+ "`grep 'ARGV\\[0\\]' .fishsrv.pl | "
+ "sed -e 's/^[^\"]*\"//' -e 's/\"[^\"]*$//'`; "
+ "exit")
+ "*Command to connect via FISH protocol."
+ :group 'tramp
+ :type 'string)
+
+;; New handlers should be added here.
+(defconst tramp-fish-file-name-handler-alist
+ '(
+ ;; `access-file' performed by default handler
+ (add-name-to-file . tramp-fish-handle-add-name-to-file)
+ ;; `byte-compiler-base-file-name' performed by default handler
+ (copy-file . tramp-fish-handle-copy-file)
+ (delete-directory . tramp-fish-handle-delete-directory)
+ (delete-file . tramp-fish-handle-delete-file)
+ ;; `diff-latest-backup-file' performed by default handler
+ (directory-file-name . tramp-handle-directory-file-name)
+ (directory-files . tramp-handle-directory-files)
+ (directory-files-and-attributes . tramp-fish-handle-directory-files-and-attributes)
+ ;; `dired-call-process' performed by default handler
+ ;; `dired-compress-file' performed by default handler
+ ;; `dired-uncache' performed by default handler
+ (expand-file-name . tramp-fish-handle-expand-file-name)
+ ;; `file-accessible-directory-p' performed by default handler
+ (file-attributes . tramp-fish-handle-file-attributes)
+ (file-directory-p . tramp-fish-handle-file-directory-p)
+ (file-executable-p . tramp-fish-handle-file-executable-p)
+ (file-exists-p . tramp-fish-handle-file-exists-p)
+ (file-local-copy . tramp-fish-handle-file-local-copy)
+ (file-remote-p . tramp-handle-file-remote-p)
+ (file-modes . tramp-handle-file-modes)
+ (file-name-all-completions . tramp-fish-handle-file-name-all-completions)
+ ;; `file-name-as-directory' performed by default handler
+ (file-name-completion . tramp-handle-file-name-completion)
+ (file-name-directory . tramp-handle-file-name-directory)
+ (file-name-nondirectory . tramp-handle-file-name-nondirectory)
+ ;; `file-name-sans-versions' performed by default handler
+ (file-newer-than-file-p . tramp-fish-handle-file-newer-than-file-p)
+ (file-ownership-preserved-p . ignore)
+ (file-readable-p . tramp-fish-handle-file-readable-p)
+ (file-regular-p . tramp-handle-file-regular-p)
+ (file-symlink-p . tramp-handle-file-symlink-p)
+ ;; `file-truename' performed by default handler
+ (file-writable-p . tramp-fish-handle-file-writable-p)
+ (find-backup-file-name . tramp-handle-find-backup-file-name)
+ ;; `find-file-noselect' performed by default handler
+ ;; `get-file-buffer' performed by default handler
+ (insert-directory . tramp-fish-handle-insert-directory)
+ (insert-file-contents . tramp-fish-handle-insert-file-contents)
+ (load . tramp-handle-load)
+ (make-directory . tramp-fish-handle-make-directory)
+ (make-directory-internal . tramp-fish-handle-make-directory-internal)
+ (make-symbolic-link . tramp-fish-handle-make-symbolic-link)
+ (rename-file . tramp-fish-handle-rename-file)
+ (set-file-modes . tramp-fish-handle-set-file-modes)
+ (set-file-times . tramp-fish-handle-set-file-times)
+ (set-visited-file-modtime . ignore)
+ (shell-command . tramp-handle-shell-command)
+ (substitute-in-file-name . tramp-handle-substitute-in-file-name)
+ (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
+ (vc-registered . ignore)
+ (verify-visited-file-modtime . ignore)
+ (write-region . tramp-fish-handle-write-region)
+ (executable-find . tramp-fish-handle-executable-find)
+ (start-file-process . ignore)
+ (process-file . tramp-fish-handle-process-file)
+)
+ "Alist of handler functions for Tramp FISH method.
+Operations not mentioned here will be handled by the default Emacs primitives.")
+
+(defun tramp-fish-file-name-p (filename)
+ "Check if it's a filename for FISH protocol."
+ (let ((v (tramp-dissect-file-name filename)))
+ (string= (tramp-file-name-method v) tramp-fish-method)))
+
+(defun tramp-fish-file-name-handler (operation &rest args)
+ "Invoke the FISH related OPERATION.
+First arg specifies the OPERATION, second arg is a list of arguments to
+pass to the OPERATION."
+ (let ((fn (assoc operation tramp-fish-file-name-handler-alist)))
+ (if fn
+ (save-match-data (apply (cdr fn) args))
+ (tramp-run-real-handler operation args))))
+
+(add-to-list 'tramp-foreign-file-name-handler-alist
+ (cons 'tramp-fish-file-name-p 'tramp-fish-file-name-handler))
+
+
+;; File name primitives
+
+(defun tramp-fish-handle-add-name-to-file
+ (filename newname &optional ok-if-already-exists)
+ "Like `add-name-to-file' for Tramp files."
+ (unless (tramp-equal-remote filename newname)
+ (with-parsed-tramp-file-name
+ (if (tramp-tramp-file-p filename) filename newname) nil
+ (tramp-error
+ v 'file-error
+ "add-name-to-file: %s"
+ "only implemented for same method, same user, same host")))
+ (with-parsed-tramp-file-name filename v1
+ (with-parsed-tramp-file-name newname v2
+ (when (and (not ok-if-already-exists)
+ (file-exists-p newname)
+ (not (numberp ok-if-already-exists))
+ (y-or-n-p
+ (format
+ "File %s already exists; make it a new name anyway? "
+ newname)))
+ (tramp-error
+ v2 'file-error
+ "add-name-to-file: file %s already exists" newname))
+ (tramp-flush-file-property v2 v2-localname)
+ (unless (tramp-fish-send-command-and-check
+ v1 (format "#LINK %s %s" v1-localname v2-localname))
+ (tramp-error
+ v1 'file-error "Error with add-name-to-file %s" newname)))))
+
+(defun tramp-fish-handle-copy-file
+ (filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
+ "Like `copy-file' for Tramp files."
+ (tramp-fish-do-copy-or-rename-file
+ 'copy filename newname ok-if-already-exists keep-date preserve-uid-gid))
+
+(defun tramp-fish-handle-delete-directory (directory)
+ "Like `delete-directory' for Tramp files."
+ (when (file-exists-p directory)
+ (with-parsed-tramp-file-name
+ (directory-file-name (expand-file-name directory)) nil
+ (tramp-flush-directory-property v localname)
+ (tramp-fish-send-command-and-check v (format "#RMD %s" localname)))))
+
+(defun tramp-fish-handle-delete-file (filename)
+ "Like `delete-file' for Tramp files."
+ (when (file-exists-p filename)
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (tramp-flush-file-property v localname)
+ (tramp-fish-send-command-and-check v (format "#DELE %s" localname)))))
+
+(defun tramp-fish-handle-directory-files-and-attributes
+ (directory &optional full match nosort id-format)
+ "Like `directory-files-and-attributes' for Tramp files."
+ (mapcar
+ (lambda (x)
+ ;; We cannot call `file-attributes' for backward compatibility reasons.
+ ;; Its optional parameter ID-FORMAT is introduced with Emacs 22.
+ (cons x (tramp-fish-handle-file-attributes
+ (if full x (expand-file-name x directory)) id-format)))
+ (directory-files directory full match nosort)))
+
+(defun tramp-fish-handle-expand-file-name (name &optional dir)
+ "Like `expand-file-name' for Tramp files."
+ ;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
+ (setq dir (or dir default-directory "/"))
+ ;; Unless NAME is absolute, concat DIR and NAME.
+ (unless (file-name-absolute-p name)
+ (setq name (concat (file-name-as-directory dir) name)))
+ ;; If NAME is not a Tramp file, run the real handler,
+ (if (or (tramp-completion-mode-p) (not (tramp-tramp-file-p name)))
+ (tramp-drop-volume-letter
+ (tramp-run-real-handler 'expand-file-name (list name nil)))
+ ;; Dissect NAME.
+ (with-parsed-tramp-file-name name nil
+ (unless (file-name-absolute-p localname)
+ (setq localname (concat "~/" localname)))
+ ;; Tilde expansion if necessary.
+ (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
+ (let ((uname (match-string 1 localname))
+ (fname (match-string 2 localname)))
+ ;; We cannot apply "~user/", because this is not supported
+ ;; by the FISH protocol.
+ (unless (string-equal uname "~")
+ (tramp-error
+ v 'file-error "Tilde expansion not supported for %s" name))
+ (setq uname
+ (with-connection-property v uname
+ (tramp-fish-send-command-and-check v "#PWD")
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-min))
+ (buffer-substring (point) (tramp-compat-line-end-position)))))
+ (setq localname (concat uname fname))))
+ ;; There might be a double slash, for example when "~/"
+ ;; expands to "/". Remove this.
+ (while (string-match "//" localname)
+ (setq localname (replace-match "/" t t localname)))
+ ;; No tilde characters in file name, do normal
+ ;; expand-file-name (this does "/./" and "/../"). We bind
+ ;; `directory-sep-char' here for XEmacs on Windows, which
+ ;; would otherwise use backslash. `default-directory' is
+ ;; bound, because on Windows there would be problems with UNC
+ ;; shares or Cygwin mounts.
+ (tramp-let-maybe directory-sep-char ?/
+ (let ((default-directory (tramp-compat-temporary-file-directory)))
+ (tramp-make-tramp-file-name
+ method user host
+ (tramp-drop-volume-letter
+ (tramp-run-real-handler 'expand-file-name
+ (list localname)))))))))
+
+(defun tramp-fish-handle-file-attributes (filename &optional id-format)
+ "Like `file-attributes' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname (format "file-attributes-%s" id-format)
+ (cdr (car (tramp-fish-get-file-entries v localname nil))))))
+
+(defun tramp-fish-handle-file-directory-p (filename)
+ "Like `file-directory-p' for Tramp files."
+ (let ((attributes (file-attributes filename)))
+ (and attributes
+ (or (string-match "d" (nth 8 attributes))
+ (and (file-symlink-p filename)
+ (with-parsed-tramp-file-name filename nil
+ (file-directory-p
+ (tramp-make-tramp-file-name
+ method user host (nth 0 attributes))))))
+ t)))
+
+(defun tramp-fish-handle-file-exists-p (filename)
+ "Like `file-exists-p' for Tramp files."
+ (and (file-attributes filename) t))
+
+(defun tramp-fish-handle-file-executable-p (filename)
+ "Like `file-executable-p' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname "file-executable-p"
+ (when (file-exists-p filename)
+ (let ((mode-chars (string-to-vector (nth 8 (file-attributes filename))))
+ (home-directory
+ (tramp-make-tramp-file-name
+ method user host
+ (tramp-get-connection-property v "home-directory" nil))))
+ (or (and (char-equal (aref mode-chars 3) ?x)
+ (equal (nth 2 (file-attributes filename))
+ (nth 2 (file-attributes home-directory))))
+ (and (char-equal (aref mode-chars 6) ?x)
+ (equal (nth 3 (file-attributes filename))
+ (nth 3 (file-attributes home-directory))))
+ (char-equal (aref mode-chars 9) ?x)))))))
+
+(defun tramp-fish-handle-file-readable-p (filename)
+ "Like `file-readable-p' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname "file-readable-p"
+ (when (file-exists-p filename)
+ (let ((mode-chars (string-to-vector (nth 8 (file-attributes filename))))
+ (home-directory
+ (tramp-make-tramp-file-name
+ method user host
+ (tramp-get-connection-property v "home-directory" nil))))
+ (or (and (char-equal (aref mode-chars 1) ?r)
+ (equal (nth 2 (file-attributes filename))
+ (nth 2 (file-attributes home-directory))))
+ (and (char-equal (aref mode-chars 4) ?r)
+ (equal (nth 3 (file-attributes filename))
+ (nth 3 (file-attributes home-directory))))
+ (char-equal (aref mode-chars 7) ?r)))))))
+
+(defun tramp-fish-handle-file-writable-p (filename)
+ "Like `file-writable-p' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname "file-writable-p"
+ (if (not (file-exists-p filename))
+ ;; If file doesn't exist, check if directory is writable.
+ (and (file-directory-p (file-name-directory filename))
+ (file-writable-p (file-name-directory filename)))
+ ;; Existing files must be writable.
+ (let ((mode-chars (string-to-vector (nth 8 (file-attributes filename))))
+ (home-directory
+ (tramp-make-tramp-file-name
+ method user host
+ (tramp-get-connection-property v "home-directory" nil))))
+ (or (and (char-equal (aref mode-chars 2) ?w)
+ (equal (nth 2 (file-attributes filename))
+ (nth 2 (file-attributes home-directory))))
+ (and (char-equal (aref mode-chars 5) ?w)
+ (equal (nth 3 (file-attributes filename))
+ (nth 3 (file-attributes home-directory))))
+ (char-equal (aref mode-chars 8) ?w)))))))
+
+(defun tramp-fish-handle-file-local-copy (filename)
+ "Like `file-local-copy' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (unless (file-exists-p filename)
+ (tramp-error
+ v 'file-error
+ "Cannot make local copy of non-existing file `%s'" filename))
+ (let ((tmpfile (tramp-compat-make-temp-file filename)))
+ (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile)
+ (when (tramp-fish-retrieve-data v)
+ ;; Save file
+ (with-current-buffer (tramp-get-buffer v)
+ (write-region (point-min) (point-max) tmpfile))
+ (tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile)
+ tmpfile))))
+
+;; This function should return "foo/" for directories and "bar" for
+;; files.
+(defun tramp-fish-handle-file-name-all-completions (filename directory)
+ "Like `file-name-all-completions' for Tramp files."
+ (all-completions
+ filename
+ (with-parsed-tramp-file-name (expand-file-name directory) nil
+ (with-file-property v localname "file-name-all-completions"
+ (save-match-data
+ (let ((entries
+ (with-file-property v localname "file-entries"
+ (tramp-fish-get-file-entries v localname t))))
+ (mapcar
+ (lambda (x)
+ (list
+ (if (string-match "d" (nth 9 x))
+ (file-name-as-directory (nth 0 x))
+ (nth 0 x))))
+ entries)))))))
+
+(defun tramp-fish-handle-file-newer-than-file-p (file1 file2)
+ "Like `file-newer-than-file-p' for Tramp files."
+ (cond
+ ((not (file-exists-p file1)) nil)
+ ((not (file-exists-p file2)) t)
+ (t (tramp-time-less-p (nth 5 (file-attributes file2))
+ (nth 5 (file-attributes file1))))))
+
+(defun tramp-fish-handle-insert-directory
+ (filename switches &optional wildcard full-directory-p)
+ "Like `insert-directory' for Tramp files.
+WILDCARD and FULL-DIRECTORY-P are not handled."
+ (setq filename (expand-file-name filename))
+ (when (file-directory-p filename)
+ ;; This check is a little bit strange, but in `dired-add-entry'
+ ;; this function is called with a non-directory ...
+ (setq filename (file-name-as-directory filename)))
+
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v localname)
+ (save-match-data
+ (let ((entries
+ (with-file-property v localname "file-entries"
+ (tramp-fish-get-file-entries v localname t))))
+
+ ;; Sort entries
+ (setq entries
+ (sort
+ entries
+ (lambda (x y)
+ (if (string-match "t" switches)
+ ;; Sort by date.
+ (tramp-time-less-p (nth 6 y) (nth 6 x))
+ ;; Sort by name.
+ (string-lessp (nth 0 x) (nth 0 y))))))
+
+ ;; Print entries.
+ (mapcar
+ (lambda (x)
+ (insert
+ (format
+ "%10s %3d %-8s %-8s %8s %s %s%s\n"
+ (nth 9 x) ; mode
+ 1 ; hardlinks
+ (nth 3 x) ; uid
+ (nth 4 x) ; gid
+ (nth 8 x) ; size
+ (format-time-string
+ (if (tramp-time-less-p
+ (tramp-time-subtract (current-time) (nth 6 x))
+ tramp-half-a-year)
+ "%b %e %R"
+ "%b %e %Y")
+ (nth 6 x)) ; date
+ (nth 0 x) ; file name
+ (if (stringp (nth 1 x)) (format " -> %s" (nth 1 x)) "")))
+ (forward-line)
+ (beginning-of-line))
+ entries)))))
+
+(defun tramp-fish-handle-insert-file-contents
+ (filename &optional visit beg end replace)
+ "Like `insert-file-contents' for Tramp files."
+ (barf-if-buffer-read-only)
+ (when visit
+ (setq buffer-file-name (expand-file-name filename))
+ (set-visited-file-modtime)
+ (set-buffer-modified-p nil))
+
+ (with-parsed-tramp-file-name filename nil
+ (if (not (file-exists-p filename))
+ (tramp-error
+ v 'file-error "File %s not found on remote host" filename)
+
+ (let ((point (point))
+ size)
+ (tramp-message v 4 "Fetching file %s..." filename)
+ (when (tramp-fish-retrieve-data v)
+ ;; Insert file
+ (insert
+ (with-current-buffer (tramp-get-buffer v)
+ (let ((beg (or beg (point-min)))
+ (end (min (or end (point-max)) (point-max))))
+ (setq size (- end beg))
+ (buffer-substring beg end))))
+ (goto-char point))
+ (tramp-message v 4 "Fetching file %s...done" filename)
+
+ (list (expand-file-name filename) size)))))
+
+(defun tramp-fish-handle-make-directory (dir &optional parents)
+ "Like `make-directory' for Tramp files."
+ (setq dir (directory-file-name (expand-file-name dir)))
+ (unless (file-name-absolute-p dir)
+ (setq dir (expand-file-name dir default-directory)))
+ (with-parsed-tramp-file-name dir nil
+ (save-match-data
+ (let ((ldir (file-name-directory dir)))
+ ;; Make missing directory parts
+ (when (and parents (not (file-directory-p ldir)))
+ (make-directory ldir parents))
+ ;; Just do it
+ (when (file-directory-p ldir)
+ (make-directory-internal dir))
+ (unless (file-directory-p dir)
+ (tramp-error v 'file-error "Couldn't make directory %s" dir))))))
+
+(defun tramp-fish-handle-make-directory-internal (directory)
+ "Like `make-directory-internal' for Tramp files."
+ (setq directory (directory-file-name (expand-file-name directory)))
+ (unless (file-name-absolute-p directory)
+ (setq directory (expand-file-name directory default-directory)))
+ (when (file-directory-p (file-name-directory directory))
+ (with-parsed-tramp-file-name directory nil
+ (save-match-data
+ (unless
+ (tramp-fish-send-command-and-check v (format "#MKD %s" localname))
+ (tramp-error
+ v 'file-error "Couldn't make directory %s" directory))))))
+
+(defun tramp-fish-handle-make-symbolic-link
+ (filename linkname &optional ok-if-already-exists)
+ "Like `make-symbolic-link' for Tramp files.
+If LINKNAME is a non-Tramp file, it is used verbatim as the target of
+the symlink. If LINKNAME is a Tramp file, only the localname component is
+used as the target of the symlink.
+
+If LINKNAME is a Tramp file and the localname component is relative, then
+it is expanded first, before the localname component is taken. Note that
+this can give surprising results if the user/host for the source and
+target of the symlink differ."
+ (with-parsed-tramp-file-name linkname nil
+ ;; Do the 'confirm if exists' thing.
+ (when (file-exists-p linkname)
+ ;; What to do?
+ (if (or (null ok-if-already-exists) ; not allowed to exist
+ (and (numberp ok-if-already-exists)
+ (not (yes-or-no-p
+ (format
+ "File %s already exists; make it a link anyway? "
+ localname)))))
+ (tramp-error
+ v 'file-already-exists "File %s already exists" localname)
+ (delete-file linkname)))
+
+ ;; If FILENAME is a Tramp name, use just the localname component.
+ (when (tramp-tramp-file-p filename)
+ (setq filename (tramp-file-name-localname
+ (tramp-dissect-file-name (expand-file-name filename)))))
+
+ ;; Right, they are on the same host, regardless of user, method, etc.
+ ;; We now make the link on the remote machine. This will occur as the user
+ ;; that FILENAME belongs to.
+ (unless
+ (tramp-fish-send-command-and-check
+ v (format "#SYMLINK %s %s" filename localname))
+ (tramp-error v 'file-error "Error creating symbolic link %s" linkname))))
+
+(defun tramp-fish-handle-rename-file
+ (filename newname &optional ok-if-already-exists)
+ "Like `rename-file' for Tramp files."
+ (tramp-fish-do-copy-or-rename-file
+ 'rename filename newname ok-if-already-exists t))
+
+(defun tramp-fish-handle-set-file-modes (filename mode)
+ "Like `set-file-modes' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v localname)
+ (unless (tramp-fish-send-command-and-check
+ v (format "#CHMOD %s %s"
+ (tramp-decimal-to-octal mode)
+ (tramp-shell-quote-argument localname)))
+ (tramp-error
+ v 'file-error "Error while changing file's mode %s" filename))))
+
+(defun tramp-fish-handle-set-file-times (filename &optional time)
+ "Like `set-file-times' for Tramp files."
+ (with-parsed-tramp-file-name filename nil
+ (let ((time (if (or (null time) (equal time '(0 0))) (current-time) time)))
+ (zerop (process-file
+ "touch" nil nil nil "-t"
+ (format-time-string "%Y%m%d%H%M.%S" time)
+ (tramp-shell-quote-argument localname))))))
+
+(defun tramp-fish-handle-write-region
+ (start end filename &optional append visit lockname confirm)
+ "Like `write-region' for Tramp files."
+ (setq filename (expand-file-name filename))
+ (with-parsed-tramp-file-name filename nil
+ ;; XEmacs takes a coding system as the seventh argument, not `confirm'
+ (when (and (not (featurep 'xemacs))
+ confirm (file-exists-p filename))
+ (unless (y-or-n-p (format "File %s exists; overwrite anyway? "
+ filename))
+ (tramp-error v 'file-error "File not overwritten")))
+
+ (tramp-flush-file-property v localname)
+
+ ;; Send command
+ (let ((tramp-fish-ok-prompt-regexp
+ (concat
+ tramp-fish-ok-prompt-regexp "\\|"
+ tramp-fish-continue-prompt-regexp)))
+ (tramp-fish-send-command
+ v (format "%s %d %s\n### 100"
+ (if append "#APPEND" "#STOR") (- end start) localname)))
+
+ ;; Send data, if there are any.
+ (when (> end start)
+ (tramp-fish-send-command v (buffer-substring-no-properties start end)))
+
+ (when (eq visit t)
+ (set-visited-file-modtime))))
+
+(defun tramp-fish-handle-executable-find (command)
+ "Like `executable-find' for Tramp files."
+ (with-temp-buffer
+ (if (zerop (process-file "which" nil t nil command))
+ (progn
+ (goto-char (point-min))
+ (buffer-substring (point-min) (tramp-compat-line-end-position))))))
+
+(defun tramp-fish-handle-process-file
+ (program &optional infile destination display &rest args)
+ "Like `process-file' for Tramp files."
+ ;; The implementation is not complete yet.
+ (when (and (numberp destination) (zerop destination))
+ (error "Implementation does not handle immediate return"))
+
+ (with-parsed-tramp-file-name default-directory nil
+ (let (command input tmpinput output tmpoutput stderr tmpstderr
+ outbuf tmpfile ret)
+ ;; Compute command.
+ (setq command (mapconcat 'tramp-shell-quote-argument
+ (cons program args) " "))
+ ;; Determine input.
+ (if (null infile)
+ (setq input "/dev/null")
+ (setq infile (expand-file-name infile))
+ (if (tramp-equal-remote default-directory infile)
+ ;; INFILE is on the same remote host.
+ (setq input (with-parsed-tramp-file-name infile nil localname))
+ ;; INFILE must be copied to remote host.
+ (setq input (tramp-make-tramp-temp-file v)
+ tmpinput (tramp-make-tramp-file-name method user host input))
+ (copy-file infile tmpinput t)))
+ (when input (setq command (format "%s <%s" command input)))
+
+ ;; Determine output.
+ (setq output (tramp-make-tramp-temp-file v)
+ tmpoutput (tramp-make-tramp-file-name method user host output))
+ (cond
+ ;; Just a buffer
+ ((bufferp destination)
+ (setq outbuf destination))
+ ;; A buffer name
+ ((stringp destination)
+ (setq outbuf (get-buffer-create destination)))
+ ;; (REAL-DESTINATION ERROR-DESTINATION)
+ ((consp destination)
+ ;; output
+ (cond
+ ((bufferp (car destination))
+ (setq outbuf (car destination)))
+ ((stringp (car destination))
+ (setq outbuf (get-buffer-create (car destination)))))
+ ;; stderr
+ (cond
+ ((stringp (cadr destination))
+ (setcar (cdr destination) (expand-file-name (cadr destination)))
+ (if (tramp-equal-remote default-directory (cadr destination))
+ ;; stderr is on the same remote host.
+ (setq stderr (with-parsed-tramp-file-name
+ (cadr destination) nil localname))
+ ;; stderr must be copied to remote host. The temporary
+ ;; file must be deleted after execution.
+ (setq stderr (tramp-make-tramp-temp-file v)
+ tmpstderr (tramp-make-tramp-file-name
+ method user host stderr))))
+ ;; stderr to be discarded
+ ((null (cadr destination))
+ (setq stderr "/dev/null"))))
+ ;; 't
+ (destination
+ (setq outbuf (current-buffer))))
+ (when stderr (setq command (format "%s 2>%s" command stderr)))
+
+ ;; Goto working directory.
+ (unless
+ (tramp-fish-send-command-and-check
+ v (format "#CWD %s" (tramp-shell-quote-argument localname)))
+ (tramp-error v 'file-error "No such directory: %s" default-directory))
+ ;; Send the command. It might not return in time, so we protect it.
+ (condition-case nil
+ (unwind-protect
+ (unless (tramp-fish-send-command-and-check
+ v (format
+ "#EXEC %s %s"
+ (tramp-shell-quote-argument command) output))
+ (error nil))
+ ;; Check return code.
+ (setq tmpfile
+ (file-local-copy
+ (tramp-make-tramp-file-name method user host output)))
+ (with-temp-buffer
+ (insert-file-contents tmpfile)
+ (goto-char (point-max))
+ (forward-line -1)
+ (looking-at "^###RESULT: \\([0-9]+\\)")
+ (setq ret (string-to-number (match-string 1)))
+ (delete-region (point) (point-max))
+ (write-region (point-min) (point-max) tmpfile))
+ ;; We should show the output anyway.
+ (when outbuf
+ (with-current-buffer outbuf (insert-file-contents tmpfile))
+ (when display (display-buffer outbuf))))
+ ;; When the user did interrupt, we should do it also.
+ (error (setq ret 1)))
+
+ ;; Provide error file.
+ (when tmpstderr (rename-file tmpstderr (cadr destination) t))
+ ;; Cleanup.
+ (when tmpinput (delete-file tmpinput))
+ (when tmpoutput (delete-file tmpoutput))
+ ;; Return exit status.
+ ret)))
+
+
+;; Internal file name functions
+
+(defun tramp-fish-do-copy-or-rename-file
+ (op filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
+ "Copy or rename a remote file.
+OP must be `copy' or `rename' and indicates the operation to
+perform. FILENAME specifies the file to copy or rename, NEWNAME
+is the name of the new file (for copy) or the new name of the
+file (for rename). OK-IF-ALREADY-EXISTS means don't barf if
+NEWNAME exists already. KEEP-DATE means to make sure that
+NEWNAME has the same timestamp as FILENAME.
+
+This function is invoked by `tramp-fish-handle-copy-file' and
+`tramp-fish-handle-rename-file'. It is an error if OP is neither
+of `copy' and `rename'. FILENAME and NEWNAME must be absolute
+file names."
+ (unless (memq op '(copy rename))
+ (error "Unknown operation `%s', must be `copy' or `rename'" op))
+ (let ((t1 (tramp-tramp-file-p filename))
+ (t2 (tramp-tramp-file-p newname)))
+
+ (unless ok-if-already-exists
+ (when (and t2 (file-exists-p newname))
+ (with-parsed-tramp-file-name newname nil
+ (tramp-error
+ v 'file-already-exists "File %s already exists" newname))))
+
+ (prog1
+ (cond
+ ;; Both are Tramp files.
+ ((and t1 t2)
+ (cond
+ ;; Shortcut: if method, host, user are the same for both
+ ;; files, we invoke `cp' or `mv' on the remote host
+ ;; directly.
+ ((tramp-equal-remote filename newname)
+ (tramp-fish-do-copy-or-rename-file-directly
+ op filename newname keep-date preserve-uid-gid))
+ ;; No shortcut was possible. So we copy the
+ ;; file first. If the operation was `rename', we go
+ ;; back and delete the original file (if the copy was
+ ;; successful). The approach is simple-minded: we
+ ;; create a new buffer, insert the contents of the
+ ;; source file into it, then write out the buffer to
+ ;; the target file. The advantage is that it doesn't
+ ;; matter which filename handlers are used for the
+ ;; source and target file.
+ (t
+ (tramp-do-copy-or-rename-file-via-buffer
+ op filename newname keep-date))))
+
+ ;; One file is a Tramp file, the other one is local.
+ ((or t1 t2)
+ ;; Use the generic method via a Tramp buffer.
+ (tramp-do-copy-or-rename-file-via-buffer
+ op filename newname keep-date))
+
+ (t
+ ;; One of them must be a Tramp file.
+ (error "Tramp implementation says this cannot happen")))
+ ;; When newname did exist, we have wrong cached values.
+ (when t2
+ (with-parsed-tramp-file-name newname nil
+ (tramp-flush-file-property v localname)
+ (tramp-flush-file-property v (file-name-directory localname)))))))
+
+(defun tramp-fish-do-copy-or-rename-file-directly
+ (op filename newname keep-date preserve-uid-gid)
+ "Invokes `COPY' or `RENAME' on the remote system.
+OP must be one of `copy' or `rename', indicating `cp' or `mv',
+respectively. VEC specifies the connection. LOCALNAME1 and
+LOCALNAME2 specify the two arguments of `cp' or `mv'. If
+KEEP-DATE is non-nil, preserve the time stamp when copying.
+PRESERVE-UID-GID is completely ignored."
+ (with-parsed-tramp-file-name filename v1
+ (with-parsed-tramp-file-name newname v2
+ (tramp-fish-send-command
+ v1
+ (format "%s %s %s"
+ (if (eq op 'copy) "#COPY" "#RENAME")
+ (tramp-shell-quote-argument v1-localname)
+ (tramp-shell-quote-argument v2-localname)))))
+ ;; KEEP-DATE handling.
+ (when (and keep-date (functionp 'set-file-times))
+ (set-file-times newname (nth 5 (file-attributes filename))))
+ ;; Set the mode.
+ (set-file-modes newname (file-modes filename)))
+
+(defun tramp-fish-get-file-entries (vec localname list)
+ "Read entries returned by FISH server.
+When LIST is true, a #LIST command will be sent, including all entries
+of a directory. Otherwise, #STAT is sent for just one entry.
+Result is a list of (LOCALNAME LINK COUNT UID GID ATIME MTIME CTIME
+SIZE MODE WEIRD INODE DEVICE)."
+ (block nil
+ (with-current-buffer (tramp-get-buffer vec)
+ ;; #LIST does not work properly with trailing "/", at least in
+ ;; .fishsrv.pl.
+ (when (string-match "/$" localname)
+ (setq localname (concat localname ".")))
+
+ (let ((command (format "%s %s" (if list "#LIST" "#STAT") localname))
+ buffer-read-only num res)
+
+ ;; Send command
+ (tramp-fish-send-command vec command)
+
+ ;; Read number of entries
+ (goto-char (point-min))
+ (condition-case nil
+ (unless (integerp (setq num (read (current-buffer)))) (error nil))
+ (error (return nil)))
+ (forward-line)
+ (delete-region (point-min) (point))
+
+ ;; Read return code
+ (goto-char (point-min))
+ (condition-case nil
+ (unless (looking-at tramp-fish-continue-prompt-regexp) (error nil))
+ (error (return nil)))
+ (forward-line)
+ (delete-region (point-min) (point))
+
+ ;; Loop the listing
+ (dotimes (i num)
+ (let ((item (tramp-fish-read-file-entry)))
+ ;; Add inode and device.
+ (add-to-list
+ 'res (append item
+ (list (tramp-get-inode vec)
+ (tramp-get-device vec))))))
+
+ ;; Read return code
+ (goto-char (point-min))
+ (condition-case nil
+ (unless (looking-at tramp-fish-ok-prompt-regexp) (error nil))
+ (error (tramp-error
+ vec 'file-error
+ "`%s' does not return a valid Lisp expression: `%s'"
+ command (buffer-string))))
+ (forward-line)
+ (delete-region (point-min) (point))
+
+ res))))
+
+(defun tramp-fish-read-file-entry ()
+ "Parse entry in output buffer.
+Result is the list (LOCALNAME LINK COUNT UID GID ATIME MTIME CTIME
+SIZE MODE WEIRD)."
+ ;; We are called from `tramp-fish-get-file-entries', which sets the
+ ;; current buffer.
+ (let (buffer-read-only localname link uid gid mtime size mode)
+ (block nil
+ (while t
+ (cond
+ ;; P<unix permissions> <owner>.<group>
+ ((looking-at "^P\\(.+\\)\\s-\\(.+\\)\\.\\(.+\\)$")
+ (setq mode (match-string 1))
+ (setq uid (match-string 2))
+ (setq gid (match-string 3))
+ (when (string-match "^d" mode) (setq link t)))
+ ;; S<size>
+ ((looking-at "^S\\([0-9]+\\)$")
+ (setq size (string-to-number (match-string 1))))
+ ;; D<year> <month> <day> <hour> <minute> <second>[.1234]
+ ((looking-at
+ "^D\\([0-9]+\\)\\s-\\([0-9]+\\)\\s-\\([0-9]+\\)\\s-\\([0-9]+\\)\\s-\\([0-9]+\\)\\s-\\(\\S-+\\)$")
+ (setq mtime
+ (encode-time
+ (string-to-number (match-string 6))
+ (string-to-number (match-string 5))
+ (string-to-number (match-string 4))
+ (string-to-number (match-string 3))
+ (string-to-number (match-string 2))
+ (string-to-number (match-string 1)))))
+ ;; d<3-letters month name> <day> <year or HH:MM>
+ ((looking-at "^d") nil)
+ ;; E<major-of-device>,<minor>
+ ((looking-at "^E") nil)
+ ;; :<filename>
+ ((looking-at "^:\\(.+\\)$")
+ (setq localname (match-string 1)))
+ ;; L<filename symlink points to>
+ ((looking-at "^L\\(.+\\)$")
+ (setq link (match-string 1)))
+ ;; M<mimetype>
+ ((looking-at "^M\\(.+\\)$") nil)
+ ;; last line
+ ((looking-at "^$")
+ (return)))
+ ;; delete line
+ (forward-line)
+ (delete-region (point-min) (point))))
+
+ ;; delete trailing empty line
+ (forward-line)
+ (delete-region (point-min) (point))
+
+ ;; Return entry in file-attributes format
+ (list localname link -1 uid gid '(0 0) mtime '(0 0) size mode nil)))
+
+(defun tramp-fish-retrieve-data (vec)
+ "Reads remote data for FISH protocol.
+The data are left in the connection buffer of VEC for further processing.
+Returns the size of the data."
+ (block nil
+ (with-current-buffer (tramp-get-buffer vec)
+ ;; The retrieved data might be in binary format, without
+ ;; trailing newline. Therefore, the OK prompt might not start
+ ;; at the beginning of a line.
+ (let ((tramp-fish-ok-prompt-regexp "### 200\n")
+ size)
+
+ ;; Send command
+ (tramp-fish-send-command
+ vec (format "#RETR %s" (tramp-file-name-localname vec)))
+
+ ;; Read filesize
+ (goto-char (point-min))
+ (condition-case nil
+ (unless (integerp (setq size (read (current-buffer)))) (error nil))
+ (error (return nil)))
+ (forward-line)
+ (delete-region (point-min) (point))
+
+ ;; Read return code
+ (goto-char (point-min))
+ (condition-case nil
+ (unless (looking-at tramp-fish-continue-prompt-regexp) (error nil))
+ (error (return nil)))
+ (forward-line)
+ (delete-region (point-min) (point))
+
+ ;; The received data might contain the OK prompt already, so
+ ;; there might be outstanding data.
+ (while (/= (+ size (length tramp-fish-ok-prompt-regexp))
+ (- (point-max) (point-min)))
+ (tramp-wait-for-regexp
+ (tramp-get-connection-process vec) nil
+ (concat tramp-fish-ok-prompt-regexp "$")))
+
+ ;; Read return code
+ (goto-char (+ (point-min) size))
+ (condition-case nil
+ (unless (looking-at tramp-fish-ok-prompt-regexp) (error nil))
+ (error (return nil)))
+ (delete-region (+ (point-min) size) (point-max))
+ size))))
+
+
+;; Connection functions
+
+(defun tramp-fish-maybe-open-connection (vec)
+ "Maybe open a connection VEC.
+Does not do anything if a connection is already open, but re-opens the
+connection if a previous connection has died for some reason."
+ (let ((process-connection-type tramp-process-connection-type)
+ (p (get-buffer-process (tramp-get-buffer vec))))
+
+ ;; New connection must be opened.
+ (unless (and p (processp p) (memq (process-status p) '(run open)))
+
+ ;; Set variables for computing the prompt for reading password.
+ (setq tramp-current-method (tramp-file-name-method vec)
+ tramp-current-user (tramp-file-name-user vec)
+ tramp-current-host (tramp-file-name-host vec))
+
+ ;; Start new process.
+ (when (and p (processp p))
+ (delete-process p))
+ (setenv "TERM" tramp-terminal-type)
+ (setenv "PS1" "$ ")
+ (tramp-message
+ vec 3 "Opening connection for %s@%s using %s..."
+ tramp-current-user tramp-current-host tramp-current-method)
+
+ (let* ((process-connection-type tramp-process-connection-type)
+ (inhibit-eol-conversion nil)
+ (coding-system-for-read 'binary)
+ (coding-system-for-write 'binary)
+ ;; This must be done in order to avoid our file name handler.
+ (p (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (start-process
+ (or (tramp-get-connection-property vec "process-name" nil)
+ (tramp-buffer-name vec))
+ (tramp-get-connection-buffer vec)
+ "ssh" "-l"
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)))))
+ (tramp-message vec 6 "%s" (mapconcat 'identity (process-command p) " "))
+
+ ;; Check whether process is alive.
+ (set-process-sentinel p 'tramp-flush-connection-property)
+ (tramp-set-process-query-on-exit-flag p nil)
+
+ (tramp-process-actions p vec tramp-actions-before-shell 60)
+ (tramp-fish-send-command vec tramp-fish-start-fish-server-command)
+ (tramp-message
+ vec 3
+ "Found remote shell prompt on `%s'" (tramp-file-name-host vec))))))
+
+(defun tramp-fish-send-command (vec command)
+ "Send the COMMAND to connection VEC."
+ (tramp-fish-maybe-open-connection vec)
+ (tramp-message vec 6 "%s" command)
+ (tramp-send-string vec command)
+ (tramp-wait-for-regexp
+ (tramp-get-connection-process vec) nil
+ (concat tramp-fish-ok-prompt-regexp "\\|" tramp-fish-error-prompt-regexp)))
+
+(defun tramp-fish-send-command-and-check (vec command)
+ "Send the COMMAND to connection VEC.
+Returns nil if there has been an error message."
+
+ ;; Send command.
+ (tramp-fish-send-command vec command)
+
+ ;; Read return code.
+ (with-current-buffer (tramp-get-buffer vec)
+ (goto-char (point-min))
+ (looking-at tramp-fish-ok-prompt-regexp)))
+
+(provide 'tramp-fish)
+;
+;;;; TODO:
+;
+;; * Evaluate the MIME information with #LIST or #STAT.
+;
+
+;; arch-tag: a66df7df-5f29-42a7-a921-643ceb29db49
+;;;; tramp-fish.el ends here
diff --git a/lisp/net/tramp-ftp.el b/lisp/net/tramp-ftp.el
index 0ccae336636..c4edd2f3fa4 100644
--- a/lisp/net/tramp-ftp.el
+++ b/lisp/net/tramp-ftp.el
@@ -1,4 +1,4 @@
-;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP -*- coding: iso-8859-1; -*-
+;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP
;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
;; 2007 Free Software Foundation, Inc.
@@ -19,9 +19,8 @@
;; 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.
+;; along with GNU Emacs; see the file COPYING. If not, see
+;; <http://www.gnu.org/licenses/>.
;;; Commentary:
@@ -31,6 +30,7 @@
;;; Code:
(require 'tramp)
+(autoload 'tramp-set-connection-property "tramp-cache")
(eval-when-compile (require 'custom))
@@ -110,10 +110,13 @@ present for backward compatibility."
(list "" "\\`\\(anonymous\\|ftp\\)\\'" tramp-ftp-method))
;; Add completion function for FTP method.
-(unless (memq system-type '(windows-nt))
- (tramp-set-completion-function
- tramp-ftp-method
- '((tramp-parse-netrc "~/.netrc"))))
+(tramp-set-completion-function
+ tramp-ftp-method
+ '((tramp-parse-netrc "~/.netrc")))
+
+;; If there is URL syntax, `substitute-in-file-name' needs special
+;; handling.
+(put 'substitute-in-file-name 'ange-ftp 'tramp-handle-substitute-in-file-name)
(defun tramp-ftp-file-name-handler (operation &rest args)
"Invoke the Ange-FTP handler for OPERATION.
@@ -135,30 +138,55 @@ pass to the OPERATION."
(ange-ftp-ftp-name-arg "")
(ange-ftp-ftp-name-res nil))
(cond
- ;; If argument is a symlink, `file-directory-p' and `file-exists-p'
- ;; call the traversed file recursively. So we cannot disable the
- ;; file-name-handler this case.
+ ;; If argument is a symlink, `file-directory-p' and
+ ;; `file-exists-p' call the traversed file recursively. So we
+ ;; cannot disable the file-name-handler this case. We set the
+ ;; connection property "started" in order to put the remote
+ ;; location into the cache, which is helpful for further
+ ;; completion. We don't use `with-parsed-tramp-file-name',
+ ;; because this returns another user but the one declared in
+ ;; "~/.netrc".
((memq operation '(file-directory-p file-exists-p))
- (apply 'ange-ftp-hook-function operation args))
- ;; Normally, the handlers must be discarded
- (t (let* ((inhibit-file-name-handlers
- (list 'tramp-file-name-handler
- 'tramp-completion-file-name-handler
- (and (eq inhibit-file-name-operation operation)
- inhibit-file-name-handlers)))
- (inhibit-file-name-operation operation))
- (apply 'ange-ftp-hook-function operation args)))))))
+ (if (apply 'ange-ftp-hook-function operation args)
+ (let ((v (tramp-dissect-file-name (car args) t)))
+ (aset v 0 tramp-ftp-method)
+ (tramp-set-connection-property v "started" t))
+ nil))
+
+ ;; If the second argument of `copy-file' or `rename-file' is a
+ ;; remote file name but via FTP, ange-ftp doesn't check this.
+ ;; We must copy it locally first, because there is no place in
+ ;; ange-ftp for correct handling.
+ ((and (memq operation '(copy-file rename-file))
+ (file-remote-p (cadr args))
+ (not (tramp-ftp-file-name-p (cadr args))))
+ (let* ((filename (car args))
+ (newname (cadr args))
+ (tmpfile (tramp-compat-make-temp-file filename))
+ (args (cddr args)))
+ ;; We must set `ok-if-already-exists' to t in the first
+ ;; step, because the temp file has been created already.
+ (if (eq operation 'copy-file)
+ (apply operation filename tmpfile t (cdr args))
+ (apply operation filename tmpfile t))
+ (unwind-protect
+ (rename-file tmpfile newname (car args))
+ ;; Cleanup.
+ (ignore-errors (delete-file tmpfile)))))
+
+ ;; Normally, the handlers must be discarded.
+ (t (let* ((inhibit-file-name-handlers
+ (list 'tramp-file-name-handler
+ 'tramp-completion-file-name-handler
+ (and (eq inhibit-file-name-operation operation)
+ inhibit-file-name-handlers)))
+ (inhibit-file-name-operation operation))
+ (apply 'ange-ftp-hook-function operation args)))))))
(defun tramp-ftp-file-name-p (filename)
"Check if it's a filename that should be forwarded to Ange-FTP."
(let ((v (tramp-dissect-file-name filename)))
- (string=
- (tramp-find-method
- (tramp-file-name-multi-method v)
- (tramp-file-name-method v)
- (tramp-file-name-user v)
- (tramp-file-name-host v))
- tramp-ftp-method)))
+ (string= (tramp-file-name-method v) tramp-ftp-method)))
(add-to-list 'tramp-foreign-file-name-handler-alist
(cons 'tramp-ftp-file-name-p 'tramp-ftp-file-name-handler))
@@ -172,8 +200,6 @@ pass to the OPERATION."
;; pretended in `tramp-file-name-handler' otherwise.
;; Furthermore, there are no backup files on FTP hosts.
;; Worth further investigations.
-;; * Map /multi:ssh:out@gate:ftp:kai@real.host:/path/to.file
-;; on Ange-FTP gateways.
;;; arch-tag: 759fb338-5c63-4b99-bd36-b4d59db91cff
;;; tramp-ftp.el ends here
diff --git a/lisp/net/tramp-gw.el b/lisp/net/tramp-gw.el
new file mode 100644
index 00000000000..fa2e9ba68b0
--- /dev/null
+++ b/lisp/net/tramp-gw.el
@@ -0,0 +1,322 @@
+;;; tramp-gw.el --- Tramp utility functions for HTTP tunnels and SOCKS gateways
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: Michael Albinus <michael.albinus@gmx.de>
+;; Keywords: comm, 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 3, 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, see
+;; <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Access functions for HTTP tunnels and SOCKS gateways from Tramp.
+;; SOCKS functionality is implemented by socks.el from the w3 package.
+;; HTTP tunnels are partly implemented in socks.el and url-http.el;
+;; both implementations are not complete. Therefore, it is
+;; implemented in this package.
+
+;;; Code:
+
+(require 'tramp)
+
+;; Pacify byte-compiler
+(eval-when-compile
+ (require 'cl)
+ (require 'custom))
+
+;; Autoload the socks library. It is used only when we access a SOCKS server.
+(autoload 'socks-open-network-stream "socks")
+(defvar socks-username (user-login-name))
+(defvar socks-server (list "Default server" "socks" 1080 5))
+
+;; Avoid byte-compiler warnings if the byte-compiler supports this.
+;; Currently, XEmacs supports this.
+(eval-when-compile
+ (when (featurep 'xemacs)
+ (byte-compiler-options (warnings (- unused-vars)))))
+
+;; Define HTTP tunnel method ...
+(defvar tramp-gw-tunnel-method "tunnel"
+ "*Method to connect HTTP gateways.")
+
+;; ... and port.
+(defvar tramp-gw-default-tunnel-port 8080
+ "*Default port for HTTP gateways.")
+
+;; Define SOCKS method ...
+(defvar tramp-gw-socks-method "socks"
+ "*Method to connect SOCKS servers.")
+
+;; ... and port.
+(defvar tramp-gw-default-socks-port 1080
+ "*Default port for SOCKS servers.")
+
+;; Add a default for `tramp-default-user-alist'. Default is the local user.
+(add-to-list 'tramp-default-user-alist
+ `(,tramp-gw-tunnel-method nil ,(user-login-name)))
+(add-to-list 'tramp-default-user-alist
+ `(,tramp-gw-socks-method nil ,(user-login-name)))
+
+;; Internal file name functions and variables.
+
+(defvar tramp-gw-vector nil
+ "Keeps the remote host identification. Needed for Tramp messages.")
+
+(defvar tramp-gw-gw-vector nil
+ "Current gateway identification vector.")
+
+(defvar tramp-gw-gw-proc nil
+ "Current gateway process.")
+
+;; This variable keeps the listening process, in order to reuse it for
+;; new processes.
+(defvar tramp-gw-aux-proc nil
+ "Process listening on local port, as mediation between SSH and the gateway.")
+
+(defun tramp-gw-gw-proc-sentinel (proc event)
+ "Delete auxiliary process when we are deleted."
+ (unless (memq (process-status proc) '(run open))
+ (tramp-message
+ tramp-gw-vector 4 "Deleting auxiliary process `%s'" tramp-gw-gw-proc)
+ (let* (tramp-verbose
+ (p (tramp-get-connection-property proc "process" nil)))
+ (when (processp p) (delete-process p)))))
+
+(defun tramp-gw-aux-proc-sentinel (proc event)
+ "Activate the different filters for involved gateway and auxiliary processes."
+ (when (memq (process-status proc) '(run open))
+ ;; A new process has been spawned from `tramp-gw-aux-proc'.
+ (tramp-message
+ tramp-gw-vector 4
+ "Opening auxiliary process `%s', speaking with process `%s'"
+ proc tramp-gw-gw-proc)
+ (tramp-set-process-query-on-exit-flag proc nil)
+ ;; We don't want debug messages, because the corresponding debug
+ ;; buffer might be undecided.
+ (let (tramp-verbose)
+ (tramp-set-connection-property tramp-gw-gw-proc "process" proc)
+ (tramp-set-connection-property proc "process" tramp-gw-gw-proc))
+ ;; Set the process-filter functions for both processes.
+ (set-process-filter proc 'tramp-gw-process-filter)
+ (set-process-filter tramp-gw-gw-proc 'tramp-gw-process-filter)
+ ;; There might be already some output from the gateway process.
+ (with-current-buffer (process-buffer tramp-gw-gw-proc)
+ (unless (= (point-min) (point-max))
+ (let ((s (buffer-string)))
+ (delete-region (point) (point-max))
+ (tramp-gw-process-filter tramp-gw-gw-proc s))))))
+
+(defun tramp-gw-process-filter (proc string)
+ (let (tramp-verbose)
+ (process-send-string
+ (tramp-get-connection-property proc "process" nil) string)))
+
+(defun tramp-gw-open-connection (vec gw-vec target-vec)
+ "Open a remote connection to VEC (see `tramp-file-name' structure).
+Take GW-VEC as SOCKS or HTTP gateway, i.e. its method must be a
+gateway method. TARGET-VEC identifies where to connect to via
+the gateway, it can be different from VEC when there are more
+hops to be applied.
+
+It returns a string like \"localhost#port\", which must be used
+instead of the host name declared in TARGET-VEC."
+
+ ;; Remember vectors for property retrieval.
+ (setq tramp-gw-vector vec
+ tramp-gw-gw-vector gw-vec)
+
+ ;; Start listening auxiliary process.
+ (unless (and (processp tramp-gw-aux-proc)
+ (memq (process-status tramp-gw-aux-proc) '(listen)))
+ (let ((aux-vec
+ (vector "aux" (tramp-file-name-user gw-vec)
+ (tramp-file-name-host gw-vec) nil)))
+ (setq tramp-gw-aux-proc
+ (make-network-process
+ :name (tramp-buffer-name aux-vec) :buffer nil :host 'local
+ :server t :noquery t :service t :coding 'binary))
+ (set-process-sentinel tramp-gw-aux-proc 'tramp-gw-aux-proc-sentinel)
+ (tramp-set-process-query-on-exit-flag tramp-gw-aux-proc nil)
+ (tramp-message
+ vec 4 "Opening auxiliary process `%s', listening on port %d"
+ tramp-gw-aux-proc (process-contact tramp-gw-aux-proc :service))))
+
+ (let* ((gw-method
+ (intern
+ (tramp-find-method
+ (tramp-file-name-method gw-vec)
+ (tramp-file-name-user gw-vec)
+ (tramp-file-name-host gw-vec))))
+ (socks-username
+ (tramp-find-user
+ (tramp-file-name-method gw-vec)
+ (tramp-file-name-user gw-vec)
+ (tramp-file-name-host gw-vec)))
+ ;; Declare the SOCKS server to be used.
+ (socks-server
+ (list "Tramp tempory socks server list"
+ ;; Host name.
+ (tramp-file-name-real-host gw-vec)
+ ;; Port number.
+ (or (tramp-file-name-port gw-vec)
+ (case gw-method
+ (tunnel tramp-gw-default-tunnel-port)
+ (socks tramp-gw-default-socks-port)))
+ ;; Type. We support only http and socks5, NO socks4.
+ ;; 'http could be used when HTTP tunnel works in socks.el.
+ 5))
+ ;; The function to be called.
+ (socks-function
+ (case gw-method
+ (tunnel 'tramp-gw-open-network-stream)
+ (socks 'socks-open-network-stream)))
+ socks-noproxy)
+
+ ;; Open SOCKS process.
+ (setq tramp-gw-gw-proc
+ (funcall
+ socks-function
+ (tramp-buffer-name gw-vec)
+ (tramp-get-buffer gw-vec)
+ (tramp-file-name-real-host target-vec)
+ (tramp-file-name-port target-vec)))
+ (set-process-sentinel tramp-gw-gw-proc 'tramp-gw-gw-proc-sentinel)
+ (tramp-set-process-query-on-exit-flag tramp-gw-gw-proc nil)
+ (tramp-message
+ vec 4 "Opened %s process `%s'"
+ (case gw-method ('tunnel "HTTP tunnel") ('socks "SOCKS"))
+ tramp-gw-gw-proc)
+
+ ;; Return the new host for gateway access.
+ (format "localhost#%d" (process-contact tramp-gw-aux-proc :service))))
+
+(defun tramp-gw-open-network-stream (name buffer host service)
+ "Open stream to proxy server HOST:SERVICE.
+Resulting process has name NAME and buffer BUFFER. If
+authentication is requested from proxy server, provide it."
+ (let ((command (format (concat
+ "CONNECT %s:%d HTTP/1.1\r\n"
+ "Host: %s:%d\r\n"
+ "Connection: keep-alive\r\n"
+ "User-Agent: Tramp/%s\r\n")
+ host service host service tramp-version))
+ (authentication "")
+ (first t)
+ found proc)
+
+ (while (not found)
+ ;; Clean up.
+ (when (processp proc) (delete-process proc))
+ (with-current-buffer buffer (erase-buffer))
+ ;; Open network stream.
+ (setq proc (open-network-stream
+ name buffer (nth 1 socks-server) (nth 2 socks-server)))
+ (set-process-coding-system proc 'binary 'binary)
+ (tramp-set-process-query-on-exit-flag proc nil)
+ ;; Send CONNECT command.
+ (process-send-string proc (format "%s%s\r\n" command authentication))
+ (tramp-message
+ tramp-gw-vector 6 "\n%s"
+ (format
+ "%s%s\r\n" command
+ (replace-regexp-in-string ;; no password in trace!
+ "Basic [^\r\n]+" "Basic xxxxx" authentication t)))
+ (with-current-buffer buffer
+ ;; Trap errors to be traced in the right trace buffer. Often,
+ ;; proxies have a timeout of 60". We wait 65" in order to
+ ;; receive an answer this case.
+ (condition-case nil
+ (let (tramp-verbose)
+ (tramp-wait-for-regexp proc 65 "\r?\n\r?\n"))
+ (error nil))
+ ;; Check return code.
+ (goto-char (point-min))
+ (narrow-to-region
+ (point-min)
+ (or (search-forward-regexp "\r?\n\r?\n" nil t) (point-max)))
+ (tramp-message tramp-gw-vector 6 "\n%s" (buffer-string))
+ (goto-char (point-min))
+ (search-forward-regexp "^HTTP/[1-9]\\.[0-9]" nil t)
+ (case (condition-case nil (read (current-buffer)) (error))
+ ;; Connected.
+ (200 (setq found t))
+ ;; We need basic authentication.
+ (401 (setq authentication (tramp-gw-basic-authentication nil first)))
+ ;; Target host not found.
+ (404 (tramp-error-with-buffer
+ (current-buffer) tramp-gw-vector 'file-error
+ "Host %s not found." host))
+ ;; We need basic proxy authentication.
+ (407 (setq authentication (tramp-gw-basic-authentication t first)))
+ ;; Connection failed.
+ (503 (tramp-error-with-buffer
+ (current-buffer) tramp-gw-vector 'file-error
+ "Connection to %s:%d failed." host service))
+ ;; That doesn't work at all.
+ (t (tramp-error-with-buffer
+ (current-buffer) tramp-gw-vector 'file-error
+ "Access to HTTP server %s:%d failed."
+ (nth 1 socks-server) (nth 2 socks-server))))
+ ;; Remove HTTP headers.
+ (delete-region (point-min) (point-max))
+ (widen)
+ (setq first nil)))
+ ;; Return the process.
+ proc))
+
+(defun tramp-gw-basic-authentication (proxy pw-cache)
+ "Return authentication header for CONNECT, based on server request.
+PROXY is an indication whether we need a Proxy-Authorization header
+or an Authorization header. If PW-CACHE is non-nil, check for
+password in password cache. This is done for the first try only."
+
+ ;; `tramp-current-*' must be set for `tramp-read-passwd'.
+ (let ((tramp-current-method (tramp-file-name-method tramp-gw-gw-vector))
+ (tramp-current-user (tramp-file-name-user tramp-gw-gw-vector))
+ (tramp-current-host (tramp-file-name-host tramp-gw-gw-vector)))
+ (unless pw-cache (tramp-clear-passwd tramp-gw-gw-vector))
+ ;; We are already in the right buffer.
+ (tramp-message
+ tramp-gw-vector 5 "%s required"
+ (if proxy "Proxy authentication" "Authentication"))
+ ;; Search for request header. We accept only basic authentication.
+ (goto-char (point-min))
+ (search-forward-regexp
+ "^\\(Proxy\\|WWW\\)-Authenticate:\\s-*Basic\\s-+realm=")
+ ;; Return authentication string.
+ (format
+ "%s: Basic %s\r\n"
+ (if proxy "Proxy-Authorization" "Authorization")
+ (base64-encode-string
+ (format
+ "%s:%s"
+ socks-username
+ (tramp-read-passwd
+ nil
+ (format
+ "Password for %s@[%s]: " socks-username (read (current-buffer)))))))))
+
+
+(provide 'tramp-gw)
+
+;;; TODO:
+
+;; * Provide descriptive Commentary.
+;; * Enable it for several gateway processes in parallel.
+
+;; arch-tag: 277e3a81-fdee-40cf-9e6b-59626292a5e0
+;;; tramp-gw.el ends here
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el
index a3cf5220cda..706042060f6 100644
--- a/lisp/net/tramp-smb.el
+++ b/lisp/net/tramp-smb.el
@@ -1,6 +1,7 @@
-;;; tramp-smb.el --- Tramp access functions for SMB servers -*- coding: iso-8859-1; -*-
+;;; tramp-smb.el --- Tramp access functions for SMB servers
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
+;; 2007 Free Software Foundation, Inc.
;; Author: Michael Albinus <michael.albinus@gmx.de>
;; Keywords: comm, processes
@@ -18,9 +19,8 @@
;; 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.
+;; along with GNU Emacs; see the file COPYING. If not, see
+;; <http://www.gnu.org/licenses/>.
;;; Commentary:
@@ -29,17 +29,8 @@
;;; Code:
(require 'tramp)
-
-;; Pacify byte-compiler
-(eval-when-compile (require 'custom))
-
-;; Avoid byte-compiler warnings if the byte-compiler supports this.
-;; Currently, XEmacs supports this.
-(eval-when-compile
- (when (fboundp 'byte-compiler-options)
- (let (unused-vars) ; Pacify Emacs byte-compiler
- (defalias 'warnings 'identity) ; Pacify Emacs byte-compiler
- (byte-compiler-options (warnings (- unused-vars))))))
+(require 'tramp-cache)
+(require 'tramp-compat)
;; Define SMB method ...
(defcustom tramp-smb-method "smb"
@@ -53,7 +44,12 @@
;; Add a default for `tramp-default-method-alist'. Rule: If there is
;; a domain in USER, it must be the SMB method.
(add-to-list 'tramp-default-method-alist
- (list "" "%" tramp-smb-method))
+ `(nil "%" ,tramp-smb-method))
+
+;; Add a default for `tramp-default-user-alist'. Rule: For the SMB method,
+;; the anonymous user is chosen.
+(add-to-list 'tramp-default-user-alist
+ `(,tramp-smb-method nil ""))
;; Add completion function for SMB method.
(tramp-set-completion-function
@@ -69,11 +65,14 @@
"Regexp used as prompt in smbclient.")
(defconst tramp-smb-errors
+ ;; `regexp-opt' not possible because of first string.
(mapconcat
'identity
- '(; Connection error
+ '(;; Connection error / timeout
"Connection to \\S-+ failed"
- ; Samba
+ "Read from server failed, maybe it closed the connection"
+ "Call timed out: server did not respond"
+ ;; Samba
"ERRDOS"
"ERRSRV"
"ERRbadfile"
@@ -82,34 +81,48 @@
"ERRnoaccess"
"ERRnomem"
"ERRnosuchshare"
- ; Windows NT 4.0, Windows 5.0 (Windows 2000), Windows 5.1 (Windows XP)
+ ;; Windows 4.0 (Windows NT), Windows 5.0 (Windows 2000),
+ ;; Windows 5.1 (Windows XP), Windows 5.2 (Windows Server 2003)
"NT_STATUS_ACCESS_DENIED"
"NT_STATUS_ACCOUNT_LOCKED_OUT"
"NT_STATUS_BAD_NETWORK_NAME"
"NT_STATUS_CANNOT_DELETE"
+ "NT_STATUS_DIRECTORY_NOT_EMPTY"
+ "NT_STATUS_DUPLICATE_NAME"
+ "NT_STATUS_FILE_IS_A_DIRECTORY"
"NT_STATUS_LOGON_FAILURE"
"NT_STATUS_NETWORK_ACCESS_DENIED"
"NT_STATUS_NO_SUCH_FILE"
+ "NT_STATUS_OBJECT_NAME_COLLISION"
"NT_STATUS_OBJECT_NAME_INVALID"
"NT_STATUS_OBJECT_NAME_NOT_FOUND"
"NT_STATUS_SHARING_VIOLATION"
+ "NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE"
"NT_STATUS_WRONG_PASSWORD")
"\\|")
"Regexp for possible error strings of SMB servers.
Used instead of analyzing error codes of commands.")
-(defvar tramp-smb-share nil
- "Holds the share name for the current buffer.
-This variable is local to each buffer.")
-(make-variable-buffer-local 'tramp-smb-share)
+(defconst tramp-smb-actions-with-share
+ '((tramp-smb-prompt tramp-action-succeed)
+ (tramp-password-prompt-regexp tramp-action-password)
+ (tramp-wrong-passwd-regexp tramp-action-permission-denied)
+ (tramp-smb-errors tramp-action-permission-denied)
+ (tramp-process-alive-regexp tramp-action-process-alive))
+ "List of pattern/action pairs.
+This list is used for login to SMB servers.
+
+See `tramp-actions-before-shell' for more info.")
-(defvar tramp-smb-share-cache nil
- "Caches the share names accessible to host related to the current buffer.
-This variable is local to each buffer.")
-(make-variable-buffer-local 'tramp-smb-share-cache)
+(defconst tramp-smb-actions-without-share
+ '((tramp-password-prompt-regexp tramp-action-password)
+ (tramp-wrong-passwd-regexp tramp-action-permission-denied)
+ (tramp-smb-errors tramp-action-permission-denied)
+ (tramp-process-alive-regexp tramp-action-out-of-band))
+ "List of pattern/action pairs.
+This list is used for login to SMB servers.
-(defvar tramp-smb-inodes nil
- "Keeps virtual inodes numbers for SMB files.")
+See `tramp-actions-before-shell' for more info.")
;; New handlers should be added here.
(defconst tramp-smb-file-name-handler-alist
@@ -124,8 +137,8 @@ This variable is local to each buffer.")
(directory-file-name . tramp-handle-directory-file-name)
(directory-files . tramp-smb-handle-directory-files)
(directory-files-and-attributes . tramp-smb-handle-directory-files-and-attributes)
- (dired-call-process . tramp-smb-not-handled)
- (dired-compress-file . tramp-smb-not-handled)
+ (dired-call-process . ignore)
+ (dired-compress-file . ignore)
;; `dired-uncache' performed by default handler
;; `expand-file-name' not necessary because we cannot expand "~/"
(file-accessible-directory-p . tramp-smb-handle-file-directory-p)
@@ -143,10 +156,10 @@ This variable is local to each buffer.")
(file-name-nondirectory . tramp-handle-file-name-nondirectory)
;; `file-name-sans-versions' performed by default handler
(file-newer-than-file-p . tramp-smb-handle-file-newer-than-file-p)
- (file-ownership-preserved-p . tramp-smb-not-handled)
+ (file-ownership-preserved-p . ignore)
(file-readable-p . tramp-smb-handle-file-exists-p)
(file-regular-p . tramp-handle-file-regular-p)
- (file-symlink-p . tramp-smb-not-handled)
+ (file-symlink-p . tramp-handle-file-symlink-p)
;; `file-truename' performed by default handler
(file-writable-p . tramp-smb-handle-file-writable-p)
(find-backup-file-name . tramp-handle-find-backup-file-name)
@@ -157,15 +170,15 @@ This variable is local to each buffer.")
(load . tramp-handle-load)
(make-directory . tramp-smb-handle-make-directory)
(make-directory-internal . tramp-smb-handle-make-directory-internal)
- (make-symbolic-link . tramp-smb-not-handled)
+ (make-symbolic-link . ignore)
(rename-file . tramp-smb-handle-rename-file)
- (set-file-modes . tramp-smb-not-handled)
- (set-visited-file-modtime . tramp-smb-not-handled)
- (shell-command . tramp-smb-not-handled)
+ (set-file-modes . ignore)
+ (set-visited-file-modtime . ignore)
+ (shell-command . ignore)
(substitute-in-file-name . tramp-smb-handle-substitute-in-file-name)
(unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
- (vc-registered . tramp-smb-not-handled)
- (verify-visited-file-modtime . tramp-smb-not-handled)
+ (vc-registered . ignore)
+ (verify-visited-file-modtime . ignore)
(write-region . tramp-smb-handle-write-region)
)
"Alist of handler functions for Tramp SMB method.
@@ -174,13 +187,7 @@ Operations not mentioned here will be handled by the default Emacs primitives.")
(defun tramp-smb-file-name-p (filename)
"Check if it's a filename for SMB servers."
(let ((v (tramp-dissect-file-name filename)))
- (string=
- (tramp-find-method
- (tramp-file-name-multi-method v)
- (tramp-file-name-method v)
- (tramp-file-name-user v)
- (tramp-file-name-host v))
- tramp-smb-method)))
+ (string= (tramp-file-name-method v) tramp-smb-method)))
(defun tramp-smb-file-name-handler (operation &rest args)
"Invoke the SMB related OPERATION.
@@ -188,9 +195,7 @@ First arg specifies the OPERATION, second arg is a list of arguments to
pass to the OPERATION."
(let ((fn (assoc operation tramp-smb-file-name-handler-alist)))
(if fn
- (if (eq (cdr fn) 'tramp-smb-not-handled)
- (apply (cdr fn) operation args)
- (save-match-data (apply (cdr fn) args)))
+ (save-match-data (apply (cdr fn) args))
(tramp-run-real-handler operation args))))
(add-to-list 'tramp-foreign-file-name-handler-alist
@@ -199,214 +204,198 @@ pass to the OPERATION."
;; File name primitives
-(defun tramp-smb-not-handled (operation &rest args)
- "Default handler for all functions which are disrecarded."
- (tramp-message 10 "Won't be handled: %s %s" operation args)
- nil)
-
(defun tramp-smb-handle-copy-file
- (filename newname &optional ok-if-already-exists keep-date)
- "Like `copy-file' for tramp files.
-KEEP-DATE is not handled in case NEWNAME resides on an SMB server."
+ (filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
+ "Like `copy-file' for Tramp files.
+KEEP-DATE is not handled in case NEWNAME resides on an SMB server.
+PRESERVE-UID-GID is completely ignored."
(setq filename (expand-file-name filename)
newname (expand-file-name newname))
(let ((tmpfile (file-local-copy filename)))
(if tmpfile
- ;; remote filename
+ ;; Remote filename.
(rename-file tmpfile newname ok-if-already-exists)
- ;; remote newname
+ ;; Remote newname.
(when (file-directory-p newname)
(setq newname (expand-file-name
(file-name-nondirectory filename) newname)))
- (when (and (not ok-if-already-exists)
- (file-exists-p newname))
- (error "copy-file: file %s already exists" newname))
(with-parsed-tramp-file-name newname nil
- (save-excursion
- (let ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname t)))
- (unless share
- (error "Target `%s' must contain a share name" filename))
- (tramp-smb-maybe-open-connection user host share)
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Copying file %s to file %s..." filename newname)
- (if (tramp-smb-send-command
- user host (format "put %s \"%s\"" filename file))
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Copying file %s to file %s...done" filename newname)
- (error "Cannot copy `%s'" filename))))))))
+ (when (and (not ok-if-already-exists)
+ (file-exists-p newname))
+ (tramp-error v 'file-already-exists newname))
+
+ ;; We must also flush the cache of the directory, because
+ ;; file-attributes reads the values from there.
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+ (let ((share (tramp-smb-get-share localname))
+ (file (tramp-smb-get-localname localname t)))
+ (unless share
+ (tramp-error
+ v 'file-error "Target `%s' must contain a share name" newname))
+ (tramp-message v 0 "Copying file %s to file %s..." filename newname)
+ (if (tramp-smb-send-command
+ v (format "put %s \"%s\"" filename file))
+ (tramp-message
+ v 0 "Copying file %s to file %s...done" filename newname)
+ (tramp-error v 'file-error "Cannot copy `%s'" filename)))))))
(defun tramp-smb-handle-delete-directory (directory)
- "Like `delete-directory' for tramp files."
+ "Like `delete-directory' for Tramp files."
(setq directory (directory-file-name (expand-file-name directory)))
(when (file-exists-p directory)
(with-parsed-tramp-file-name directory nil
- (save-excursion
- (let ((share (tramp-smb-get-share localname))
- (dir (tramp-smb-get-localname (file-name-directory localname) t))
- (file (file-name-nondirectory localname)))
- (tramp-smb-maybe-open-connection user host share)
- (if (and
- (tramp-smb-send-command user host (format "cd \"%s\"" dir))
- (tramp-smb-send-command user host (format "rmdir \"%s\"" file)))
- ;; Go Home
- (tramp-smb-send-command user host (format "cd \\"))
- ;; Error
- (tramp-smb-send-command user host (format "cd \\"))
- (error "Cannot delete directory `%s'" directory)))))))
+ ;; We must also flush the cache of the directory, because
+ ;; file-attributes reads the values from there.
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-directory-property v localname)
+ (let ((dir (tramp-smb-get-localname (file-name-directory localname) t))
+ (file (file-name-nondirectory localname)))
+ (unwind-protect
+ (unless (and
+ (tramp-smb-send-command v (format "cd \"%s\"" dir))
+ (tramp-smb-send-command v (format "rmdir \"%s\"" file)))
+ ;; Error
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (goto-char (point-min))
+ (search-forward-regexp tramp-smb-errors nil t)
+ (tramp-error
+ v 'file-error "%s `%s'" (match-string 0) directory)))
+ ;; Always go home
+ (tramp-smb-send-command v (format "cd \\")))))))
(defun tramp-smb-handle-delete-file (filename)
- "Like `delete-file' for tramp files."
+ "Like `delete-file' for Tramp files."
(setq filename (expand-file-name filename))
(when (file-exists-p filename)
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (let ((share (tramp-smb-get-share localname))
- (dir (tramp-smb-get-localname (file-name-directory localname) t))
- (file (file-name-nondirectory localname)))
- (tramp-smb-maybe-open-connection user host share)
- (if (and
- (tramp-smb-send-command user host (format "cd \"%s\"" dir))
- (tramp-smb-send-command user host (format "rm \"%s\"" file)))
- ;; Go Home
- (tramp-smb-send-command user host (format "cd \\"))
- ;; Error
- (tramp-smb-send-command user host (format "cd \\"))
- (error "Cannot delete file `%s'" filename)))))))
+ ;; We must also flush the cache of the directory, because
+ ;; file-attributes reads the values from there.
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+ (let ((dir (tramp-smb-get-localname (file-name-directory localname) t))
+ (file (file-name-nondirectory localname)))
+ (unwind-protect
+ (unless (and
+ (tramp-smb-send-command v (format "cd \"%s\"" dir))
+ (tramp-smb-send-command v (format "rm \"%s\"" file)))
+ ;; Error
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (goto-char (point-min))
+ (search-forward-regexp tramp-smb-errors nil t)
+ (tramp-error
+ v 'file-error "%s `%s'" (match-string 0) filename)))
+ ;; Always go home
+ (tramp-smb-send-command v (format "cd \\")))))))
(defun tramp-smb-handle-directory-files
(directory &optional full match nosort)
- "Like `directory-files' for tramp files."
- (setq directory (directory-file-name (expand-file-name directory)))
- (with-parsed-tramp-file-name directory nil
- (save-excursion
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file)))
- ;; Just the file names are needed
- (setq entries (mapcar 'car entries))
- ;; Discriminate with regexp
- (when match
- (setq entries
- (delete nil
- (mapcar (lambda (x) (when (string-match match x) x))
- entries))))
- ;; Make absolute localnames if necessary
- (when full
- (setq entries
- (mapcar (lambda (x)
- (concat (file-name-as-directory directory) x))
- entries)))
- ;; Sort them if necessary
- (unless nosort (setq entries (sort entries 'string-lessp)))
- ;; That's it
- entries))))
+ "Like `directory-files' for Tramp files."
+ (let ((result (mapcar 'directory-file-name
+ (file-name-all-completions "" directory))))
+ ;; Discriminate with regexp
+ (when match
+ (setq result
+ (delete nil
+ (mapcar (lambda (x) (when (string-match match x) x))
+ result))))
+ ;; Append directory
+ (when full
+ (setq result
+ (mapcar
+ (lambda (x) (expand-file-name x directory))
+ result)))
+ ;; Sort them if necessary
+ (unless nosort (setq result (sort result 'string-lessp)))
+ ;; That's it
+ result))
(defun tramp-smb-handle-directory-files-and-attributes
(directory &optional full match nosort id-format)
- "Like `directory-files-and-attributes' for tramp files."
+ "Like `directory-files-and-attributes' for Tramp files."
(mapcar
(lambda (x)
;; We cannot call `file-attributes' for backward compatibility reasons.
;; Its optional parameter ID-FORMAT is introduced with Emacs 22.
(cons x (tramp-smb-handle-file-attributes
- (if full x (concat (file-name-as-directory directory) x)) id-format)))
+ (if full x (expand-file-name x directory)) id-format)))
(directory-files directory full match nosort)))
(defun tramp-smb-handle-file-attributes (filename &optional id-format)
- "Like `file-attributes' for tramp files."
+ "Like `file-attributes' for Tramp files."
+ ;; Reading just the filename entry via "dir localname" is not
+ ;; possible, because when filename is a directory, some smbclient
+ ;; versions return the content of the directory, and other versions
+ ;; don't. Therefore, the whole content of the upper directory is
+ ;; retrieved, and the entry of the filename is extracted from.
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file))
+ (with-file-property v localname (format "file-attributes-%s" id-format)
+ (let* ((entries (tramp-smb-get-file-entries
+ (file-name-directory filename)))
(entry (and entries
- (assoc (file-name-nondirectory file) entries)))
+ (assoc (file-name-nondirectory filename) entries)))
(uid (if (and id-format (equal id-format 'string)) "nobody" -1))
(gid (if (and id-format (equal id-format 'string)) "nogroup" -1))
- (inode (tramp-smb-get-inode share file))
- (device (tramp-get-device nil tramp-smb-method user host)))
+ (inode (tramp-get-inode v))
+ (device (tramp-get-device v)))
- ; check result
+ ;; Check result.
(when entry
(list (and (string-match "d" (nth 1 entry))
- t) ;0 file type
- -1 ;1 link count
- uid ;2 uid
- gid ;3 gid
- '(0 0) ;4 atime
- (nth 3 entry) ;5 mtime
- '(0 0) ;6 ctime
- (nth 2 entry) ;7 size
- (nth 1 entry) ;8 mode
- nil ;9 gid weird
- inode ;10 inode number
- device)))))) ;11 file system number
+ t) ;0 file type
+ -1 ;1 link count
+ uid ;2 uid
+ gid ;3 gid
+ '(0 0) ;4 atime
+ (nth 3 entry) ;5 mtime
+ '(0 0) ;6 ctime
+ (nth 2 entry) ;7 size
+ (nth 1 entry) ;8 mode
+ nil ;9 gid weird
+ inode ;10 inode number
+ device)))))) ;11 file system number
(defun tramp-smb-handle-file-directory-p (filename)
- "Like `file-directory-p' for tramp files."
- (with-parsed-tramp-file-name filename nil
- (save-excursion
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file))
- (entry (and entries
- (assoc (file-name-nondirectory file) entries))))
- (and entry
- (string-match "d" (nth 1 entry))
- t)))))
+ "Like `file-directory-p' for Tramp files."
+ (and (file-exists-p filename)
+ (eq ?d (aref (nth 8 (file-attributes filename)) 0))))
(defun tramp-smb-handle-file-exists-p (filename)
- "Like `file-exists-p' for tramp files."
- (with-parsed-tramp-file-name filename nil
- (save-excursion
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file)))
- (and entries
- (member (file-name-nondirectory file) (mapcar 'car entries))
- t)))))
+ "Like `file-exists-p' for Tramp files."
+ (not (null (file-attributes filename))))
(defun tramp-smb-handle-file-local-copy (filename)
- "Like `file-local-copy' for tramp files."
+ "Like `file-local-copy' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (let ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname t))
- (tmpfil (tramp-make-temp-file filename)))
- (unless (file-exists-p filename)
- (error "Cannot make local copy of non-existing file `%s'" filename))
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Fetching %s to tmp file %s..." filename tmpfil)
- (tramp-smb-maybe-open-connection user host share)
- (if (tramp-smb-send-command
- user host (format "get \"%s\" %s" file tmpfil))
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Fetching %s to tmp file %s...done" filename tmpfil)
- (error "Cannot make local copy of file `%s'" filename))
- tmpfil))))
+ (let ((file (tramp-smb-get-localname localname t))
+ (tmpfile (tramp-compat-make-temp-file filename)))
+ (unless (file-exists-p filename)
+ (tramp-error
+ v 'file-error
+ "Cannot make local copy of non-existing file `%s'" filename))
+ (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile)
+ (if (tramp-smb-send-command v (format "get \"%s\" %s" file tmpfile))
+ (tramp-message
+ v 4 "Fetching %s to tmp file %s...done" filename tmpfile)
+ (tramp-error
+ v 'file-error
+ "Cannot make local copy of file `%s'" filename))
+ tmpfile)))
;; This function should return "foo/" for directories and "bar" for
;; files.
(defun tramp-smb-handle-file-name-all-completions (filename directory)
- "Like `file-name-all-completions' for tramp files."
- (with-parsed-tramp-file-name directory nil
- (save-match-data
- (save-excursion
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file)))
-
- (all-completions
- filename
+ "Like `file-name-all-completions' for Tramp files."
+ (all-completions
+ filename
+ (with-parsed-tramp-file-name directory nil
+ (with-file-property v localname "file-name-all-completions"
+ (save-match-data
+ (let ((entries (tramp-smb-get-file-entries directory)))
(mapcar
(lambda (x)
(list
@@ -416,51 +405,59 @@ KEEP-DATE is not handled in case NEWNAME resides on an SMB server."
entries)))))))
(defun tramp-smb-handle-file-newer-than-file-p (file1 file2)
- "Like `file-newer-than-file-p' for tramp files."
+ "Like `file-newer-than-file-p' for Tramp files."
(cond
((not (file-exists-p file1)) nil)
((not (file-exists-p file2)) t)
- (t (tramp-smb-time-less-p (file-attributes file2)
- (file-attributes file1)))))
+ (t (tramp-time-less-p (nth 5 (file-attributes file2))
+ (nth 5 (file-attributes file1))))))
(defun tramp-smb-handle-file-writable-p (filename)
- "Like `file-writable-p' for tramp files."
- (if (not (file-exists-p filename))
- (let ((dir (file-name-directory filename)))
- (and (file-exists-p dir)
- (file-writable-p dir)))
- (with-parsed-tramp-file-name filename nil
- (save-excursion
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file))
- (entry (and entries
- (assoc (file-name-nondirectory file) entries))))
- (and share entry
- (string-match "w" (nth 1 entry))
- t))))))
+ "Like `file-writable-p' for Tramp files."
+ (if (file-exists-p filename)
+ (string-match "w" (or (nth 8 (file-attributes filename)) ""))
+ (let ((dir (file-name-directory filename)))
+ (and (file-exists-p dir)
+ (file-writable-p dir)))))
(defun tramp-smb-handle-insert-directory
(filename switches &optional wildcard full-directory-p)
- "Like `insert-directory' for tramp files.
-WILDCARD and FULL-DIRECTORY-P are not handled."
+ "Like `insert-directory' for Tramp files."
(setq filename (expand-file-name filename))
- (when (file-directory-p filename)
- ;; This check is a little bit strange, but in `dired-add-entry'
- ;; this function is called with a non-directory ...
+ (when full-directory-p
+ ;; Called from `dired-add-entry'.
(setq filename (file-name-as-directory filename)))
(with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v (file-name-directory localname))
(save-match-data
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil))
- (entries (tramp-smb-get-file-entries user host share file)))
-
- ;; Delete dummy "" entry, useless entries
+ (let ((base (file-name-nondirectory filename))
+ ;; We should not destroy the cache entry.
+ (entries (copy-sequence
+ (tramp-smb-get-file-entries
+ (file-name-directory filename)))))
+
+ (when wildcard
+ (string-match "\\." base)
+ (setq base (replace-match "\\\\." nil nil base))
+ (string-match "\\*" base)
+ (setq base (replace-match ".*" nil nil base))
+ (string-match "\\?" base)
+ (setq base (replace-match ".?" nil nil base)))
+
+ ;; Filter entries.
(setq entries
- (if (file-directory-p filename)
- (delq (assoc "" entries) entries)
- ;; We just need the only and only entry FILENAME.
- (list (assoc (file-name-nondirectory filename) entries))))
+ (delq
+ nil
+ (if (or wildcard (zerop (length base)))
+ ;; Check for matching entries.
+ (mapcar
+ (lambda (x)
+ (when (string-match
+ (format "^%s" base) (nth 0 x))
+ x))
+ entries)
+ ;; We just need the only and only entry FILENAME.
+ (list (assoc base entries)))))
;; Sort entries
(setq entries
@@ -468,37 +465,38 @@ WILDCARD and FULL-DIRECTORY-P are not handled."
entries
(lambda (x y)
(if (string-match "t" switches)
- ; sort by date
- (tramp-smb-time-less-p (nth 3 y) (nth 3 x))
- ; sort by name
+ ;; Sort by date.
+ (tramp-time-less-p (nth 3 y) (nth 3 x))
+ ;; Sort by name.
(string-lessp (nth 0 x) (nth 0 y))))))
- ;; Print entries
+ ;; Print entries.
(mapcar
(lambda (x)
- (insert
- (format
- "%10s %3d %-8s %-8s %8s %s %s\n"
- (nth 1 x) ; mode
- 1 "nobody" "nogroup"
- (nth 2 x) ; size
- (format-time-string
- (if (tramp-smb-time-less-p
- (tramp-smb-time-subtract (current-time) (nth 3 x))
- tramp-smb-half-a-year)
- "%b %e %R"
- "%b %e %Y")
- (nth 3 x)) ; date
- (nth 0 x))) ; file name
- (forward-line)
- (beginning-of-line))
- entries)))))
+ (when (not (zerop (length (nth 0 x))))
+ (insert
+ (format
+ "%10s %3d %-8s %-8s %8s %s %s\n"
+ (nth 1 x) ; mode
+ 1 "nobody" "nogroup"
+ (nth 2 x) ; size
+ (format-time-string
+ (if (tramp-time-less-p
+ (tramp-time-subtract (current-time) (nth 3 x))
+ tramp-half-a-year)
+ "%b %e %R"
+ "%b %e %Y")
+ (nth 3 x)) ; date
+ (nth 0 x))) ; file name
+ (forward-line)
+ (beginning-of-line)))
+ entries)))))
(defun tramp-smb-handle-make-directory (dir &optional parents)
- "Like `make-directory' for tramp files."
+ "Like `make-directory' for Tramp files."
(setq dir (directory-file-name (expand-file-name dir)))
(unless (file-name-absolute-p dir)
- (setq dir (concat default-directory dir)))
+ (setq dir (expand-file-name dir default-directory)))
(with-parsed-tramp-file-name dir nil
(save-match-data
(let* ((share (tramp-smb-get-share localname))
@@ -510,26 +508,28 @@ WILDCARD and FULL-DIRECTORY-P are not handled."
(when (file-directory-p ldir)
(make-directory-internal dir))
(unless (file-directory-p dir)
- (error "Couldn't make directory %s" dir))))))
+ (tramp-error v 'file-error "Couldn't make directory %s" dir))))))
(defun tramp-smb-handle-make-directory-internal (directory)
- "Like `make-directory-internal' for tramp files."
+ "Like `make-directory-internal' for Tramp files."
(setq directory (directory-file-name (expand-file-name directory)))
(unless (file-name-absolute-p directory)
- (setq directory (concat default-directory directory)))
+ (setq directory (expand-file-name directory default-directory)))
(with-parsed-tramp-file-name directory nil
(save-match-data
- (let* ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname nil)))
+ (let* ((file (tramp-smb-get-localname localname t)))
(when (file-directory-p (file-name-directory directory))
- (tramp-smb-maybe-open-connection user host share)
- (tramp-smb-send-command user host (format "mkdir \"%s\"" file)))
+ (tramp-smb-send-command v (format "mkdir \"%s\"" file))
+ ;; We must also flush the cache of the directory, because
+ ;; file-attributes reads the values from there.
+ (tramp-flush-file-property v (file-name-directory localname)))
(unless (file-directory-p directory)
- (error "Couldn't make directory %s" directory))))))
+ (tramp-error
+ v 'file-error "Couldn't make directory %s" directory))))))
(defun tramp-smb-handle-rename-file
(filename newname &optional ok-if-already-exists)
- "Like `rename-file' for tramp files."
+ "Like `rename-file' for Tramp files."
(setq filename (expand-file-name filename)
newname (expand-file-name newname))
@@ -543,80 +543,81 @@ WILDCARD and FULL-DIRECTORY-P are not handled."
(when (file-directory-p newname)
(setq newname (expand-file-name
(file-name-nondirectory filename) newname)))
- (when (and (not ok-if-already-exists)
- (file-exists-p newname))
- (error "rename-file: file %s already exists" newname))
(with-parsed-tramp-file-name newname nil
- (save-excursion
- (let ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname t)))
- (tramp-smb-maybe-open-connection user host share)
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Copying file %s to file %s..." filename newname)
- (if (tramp-smb-send-command
- user host (format "put %s \"%s\"" filename file))
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Copying file %s to file %s...done" filename newname)
- (error "Cannot rename `%s'" filename)))))))
+ (when (and (not ok-if-already-exists)
+ (file-exists-p newname))
+ (tramp-error v 'file-already-exists newname))
+ ;; We must also flush the cache of the directory, because
+ ;; file-attributes reads the values from there.
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+ (let ((file (tramp-smb-get-localname localname t)))
+ (tramp-message v 0 "Copying file %s to file %s..." filename newname)
+ (if (tramp-smb-send-command v (format "put %s \"%s\"" filename file))
+ (tramp-message
+ v 0 "Copying file %s to file %s...done" filename newname)
+ (tramp-error v 'file-error "Cannot rename `%s'" filename))))))
(delete-file filename))
(defun tramp-smb-handle-substitute-in-file-name (filename)
- "Like `handle-substitute-in-file-name' for tramp files.
-Catches errors for shares like \"C$/\", which are common in Microsoft Windows."
+ "Like `handle-substitute-in-file-name' for Tramp files.
+\"//\" substitutes only in the local filename part. Catches
+errors for shares like \"C$/\", which are common in Microsoft Windows."
+ (with-parsed-tramp-file-name filename nil
+ ;; Ignore in LOCALNAME everything before "//".
+ (when (and (stringp localname) (string-match ".+?/\\(/\\|~\\)" localname))
+ (setq filename
+ (concat (file-remote-p filename)
+ (replace-match "\\1" nil nil localname)))))
(condition-case nil
(tramp-run-real-handler 'substitute-in-file-name (list filename))
(error filename)))
(defun tramp-smb-handle-write-region
(start end filename &optional append visit lockname confirm)
- "Like `write-region' for tramp files."
- (unless (eq append nil)
- (error "Cannot append to file using tramp (`%s')" filename))
+ "Like `write-region' for Tramp files."
(setq filename (expand-file-name filename))
- ;; XEmacs takes a coding system as the seventh argument, not `confirm'
- (when (and (not (featurep 'xemacs))
- confirm (file-exists-p filename))
- (unless (y-or-n-p (format "File %s exists; overwrite anyway? "
- filename))
- (error "File not overwritten")))
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (let ((share (tramp-smb-get-share localname))
- (file (tramp-smb-get-localname localname t))
- (curbuf (current-buffer))
- tmpfil)
- ;; Write region into a tmp file.
- (setq tmpfil (tramp-make-temp-file filename))
- ;; We say `no-message' here because we don't want the visited file
- ;; modtime data to be clobbered from the temp file. We call
- ;; `set-visited-file-modtime' ourselves later on.
- (tramp-run-real-handler
- 'write-region
- (if confirm ; don't pass this arg unless defined for backward compat.
- (list start end tmpfil append 'no-message lockname confirm)
- (list start end tmpfil append 'no-message lockname)))
-
- (tramp-smb-maybe-open-connection user host share)
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Writing tmp file %s to file %s..." tmpfil filename)
- (if (tramp-smb-send-command
- user host (format "put %s \"%s\"" tmpfil file))
- (tramp-message-for-buffer
- nil tramp-smb-method user host
- 5 "Writing tmp file %s to file %s...done" tmpfil filename)
- (error "Cannot write `%s'" filename))
-
- (delete-file tmpfil)
- (unless (equal curbuf (current-buffer))
- (error "Buffer has changed from `%s' to `%s'"
- curbuf (current-buffer)))
- (when (eq visit t)
- (set-visited-file-modtime))))))
+ (unless (eq append nil)
+ (tramp-error
+ v 'file-error "Cannot append to file using Tramp (`%s')" filename))
+ ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
+ (when (and (not (featurep 'xemacs))
+ confirm (file-exists-p filename))
+ (unless (y-or-n-p (format "File %s exists; overwrite anyway? "
+ filename))
+ (tramp-error v 'file-error "File not overwritten")))
+ ;; We must also flush the cache of the directory, because
+ ;; `file-attributes' reads the values from there.
+ (tramp-flush-file-property v (file-name-directory localname))
+ (tramp-flush-file-property v localname)
+ (let ((file (tramp-smb-get-localname localname t))
+ (curbuf (current-buffer))
+ (tmpfile (tramp-compat-make-temp-file filename)))
+ ;; We say `no-message' here because we don't want the visited file
+ ;; modtime data to be clobbered from the temp file. We call
+ ;; `set-visited-file-modtime' ourselves later on.
+ (tramp-run-real-handler
+ 'write-region
+ (if confirm ; don't pass this arg unless defined for backward compat.
+ (list start end tmpfile append 'no-message lockname confirm)
+ (list start end tmpfile append 'no-message lockname)))
+
+ (tramp-message v 5 "Writing tmp file %s to file %s..." tmpfile filename)
+ (if (tramp-smb-send-command v (format "put %s \"%s\"" tmpfile file))
+ (tramp-message
+ v 5 "Writing tmp file %s to file %s...done" tmpfile filename)
+ (tramp-error v 'file-error "Cannot write `%s'" filename))
+
+ (delete-file tmpfile)
+ (unless (equal curbuf (current-buffer))
+ (tramp-error
+ v 'file-error
+ "Buffer has changed from `%s' to `%s'" curbuf (current-buffer)))
+ (when (eq visit t)
+ (set-visited-file-modtime)))))
;; Internal file name functions
@@ -652,51 +653,53 @@ If CONVERT is non-nil exchange \"/\" by \"\\\\\"."
;; Share names of a host are cached. It is very unlikely that the
;; shares do change during connection.
-(defun tramp-smb-get-file-entries (user host share localname)
- "Read entries which match LOCALNAME.
+(defun tramp-smb-get-file-entries (directory)
+ "Read entries which match DIRECTORY.
Either the shares are listed, or the `dir' command is executed.
-Only entries matching the localname are returned.
Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)."
- (save-excursion
- (save-match-data
- (let ((base (or (and (> (length localname) 0)
- (string-match "\\([^/]+\\)$" localname)
- (regexp-quote (match-string 1 localname)))
- ""))
- res entry)
- (set-buffer (tramp-get-buffer nil tramp-smb-method user host))
- (if (and (not share) tramp-smb-share-cache)
- ;; Return cached shares
- (setq res tramp-smb-share-cache)
- ;; Read entries
- (tramp-smb-maybe-open-connection user host share)
- (when share
- (tramp-smb-send-command
- user host
- (format "dir %s"
- (if (zerop (length localname)) "" (concat "\"" localname "*\"")))))
- (goto-char (point-min))
- ;; Loop the listing
- (unless (re-search-forward tramp-smb-errors nil t)
- (while (not (eobp))
- (setq entry (tramp-smb-read-file-entry share))
- (forward-line)
- (when entry (add-to-list 'res entry))))
- (unless share
+ (with-parsed-tramp-file-name directory nil
+ (setq localname (or localname "/"))
+ (with-file-property v localname "file-entries"
+ (with-current-buffer (tramp-get-buffer v)
+ (let* ((share (tramp-smb-get-share localname))
+ (file (tramp-smb-get-localname localname nil))
+ (cache (tramp-get-connection-property v "share-cache" nil))
+ res entry)
+
+ (if (and (not share) cache)
+ ;; Return cached shares
+ (setq res cache)
+
+ ;; Read entries
+ (setq file (file-name-as-directory file))
+ (when (string-match "^\\./" file)
+ (setq file (substring file 1)))
+ (if share
+ (tramp-smb-send-command v (format "dir \"%s*\"" file))
+ ;; `tramp-smb-maybe-open-connection' lists also the share names
+ (tramp-smb-maybe-open-connection v))
+
+ ;; Loop the listing
+ (goto-char (point-min))
+ (unless (re-search-forward tramp-smb-errors nil t)
+ (while (not (eobp))
+ (setq entry (tramp-smb-read-file-entry share))
+ (forward-line)
+ (when entry (add-to-list 'res entry))))
+
;; Cache share entries
- (setq tramp-smb-share-cache res)))
+ (unless share
+ (tramp-set-connection-property v "share-cache" res)))
- ;; Add directory itself
- (add-to-list 'res '("" "drwxrwxrwx" 0 (0 0)))
+ ;; Add directory itself
+ (add-to-list 'res '("" "drwxrwxrwx" 0 (0 0)))
- ;; There's a very strange error (debugged with XEmacs 21.4.14)
- ;; If there's no short delay, it returns nil. No idea about
- (when (featurep 'xemacs) (sleep-for 0.01))
+ ;; There's a very strange error (debugged with XEmacs 21.4.14)
+ ;; If there's no short delay, it returns nil. No idea about.
+ (when (featurep 'xemacs) (sleep-for 0.01))
- ;; Check for matching entries
- (delq nil (mapcar
- (lambda (x) (and (string-match base (nth 0 x)) x))
- res))))))
+ ;; Return entries
+ (delq nil res))))))
;; Return either a share name (if SHARE is nil), or a file name
;;
@@ -721,7 +724,7 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)."
;; \s- - space delimeter
;; \w\{3,3\} - month
;; \s- - space delimeter
-;; [ 19][0-9] - day
+;; [ 12][0-9] - day
;; \s- - space delimeter
;; [0-9]\{2,2\}:[0-9]\{2,2\}:[0-9]\{2,2\} - time
;; \s- - space delimeter
@@ -756,18 +759,20 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)."
"Parse entry in SMB output buffer.
If SHARE is result, entries are of type dir. Otherwise, shares are listed.
Result is the list (LOCALNAME MODE SIZE MTIME)."
- (let ((line (buffer-substring (point) (tramp-point-at-eol)))
+;; We are called from `tramp-smb-get-file-entries', which sets the
+;; current buffer.
+ (let ((line (buffer-substring (point) (tramp-compat-line-end-position)))
localname mode size month day hour min sec year mtime)
(if (not share)
- ; Read share entries
- (when (string-match "^\\s-+\\(\\S-+\\)\\s-+Disk" line)
+ ;; Read share entries.
+ (when (string-match "^\\s-+\\(\\S-\\(.*\\S-\\)?\\)\\s-+Disk" line)
(setq localname (match-string 1 line)
mode "dr-xr-xr-x"
size 0))
- ; Real listing
+ ;; Real listing.
(block nil
;; year
@@ -833,219 +838,185 @@ Result is the list (LOCALNAME MODE SIZE MTIME)."
(if (and sec min hour day month year)
(encode-time
sec min hour day
- (cdr (assoc (downcase month) tramp-smb-parse-time-months))
+ (cdr (assoc (downcase month) tramp-parse-time-months))
year)
'(0 0)))
(list localname mode size mtime))))
-;; Inodes don't exist for SMB files. Therefore we must generate virtual ones.
-;; Used in `find-buffer-visiting'.
-;; The method applied might be not so efficient (Ange-FTP uses hashes). But
-;; performance isn't the major issue given that file transfer will take time.
-
-(defun tramp-smb-get-inode (share file)
- "Returns the virtual inode number.
-If it doesn't exist, generate a new one."
- (let ((string (concat share "/" (directory-file-name file))))
- (unless (assoc string tramp-smb-inodes)
- (add-to-list 'tramp-smb-inodes
- (list string (length tramp-smb-inodes))))
- (nth 1 (assoc string tramp-smb-inodes))))
-
;; Connection functions
-(defun tramp-smb-send-command (user host command)
- "Send the COMMAND to USER at HOST (logged into an SMB session).
-Erases temporary buffer before sending the command. Returns nil if
-there has been an error message from smbclient."
- (save-excursion
- (set-buffer (tramp-get-buffer nil tramp-smb-method user host))
- (erase-buffer)
- (tramp-send-command nil tramp-smb-method user host command nil t)
- (tramp-smb-wait-for-output user host)))
-
-(defun tramp-smb-maybe-open-connection (user host share)
- "Maybe open a connection to HOST, logging in as USER, using `tramp-smb-program'.
+(defun tramp-smb-send-command (vec command)
+ "Send the COMMAND to connection VEC.
+Returns nil if there has been an error message from smbclient."
+ (tramp-smb-maybe-open-connection vec)
+ (tramp-message vec 6 "%s" command)
+ (tramp-send-string vec command)
+ (tramp-smb-wait-for-output vec))
+
+(defun tramp-smb-maybe-open-connection (vec)
+ "Maybe open a connection to HOST, log in as USER, using `tramp-smb-program'.
Does not do anything if a connection is already open, but re-opens the
connection if a previous connection has died for some reason."
- (let ((process-connection-type tramp-process-connection-type)
- (p (get-buffer-process
- (tramp-get-buffer nil tramp-smb-method user host))))
- (save-excursion
- (set-buffer (tramp-get-buffer nil tramp-smb-method user host))
- ;; Check whether it is still the same share
- (unless (and p (processp p) (string-equal tramp-smb-share share))
- (when (and p (processp p))
- (delete-process p)
- (setq p nil)))
- ;; If too much time has passed since last command was sent, look
- ;; whether process is still alive. If it isn't, kill it.
- (when (and tramp-last-cmd-time
- (> (tramp-time-diff (current-time) tramp-last-cmd-time) 60)
- p (processp p) (memq (process-status p) '(run open)))
- (unless (and p (processp p) (memq (process-status p) '(run open)))
- (delete-process p)
- (setq p nil))))
- (unless (and p (processp p) (memq (process-status p) '(run open)))
- (when (and p (processp p))
- (delete-process p))
- (tramp-smb-open-connection user host share))))
-
-(defun tramp-smb-open-connection (user host share)
- "Open a connection using `tramp-smb-program'.
-This starts the command `smbclient //HOST/SHARE -U USER', then waits
-for a remote password prompt. It queries the user for the password,
-then sends the password to the remote host.
-
-Domain names in USER and port numbers in HOST are acknowledged."
-
- (when (and (fboundp 'executable-find)
- (not (funcall 'executable-find tramp-smb-program)))
- (error "Cannot find command %s in %s" tramp-smb-program exec-path))
+ (let* ((share (tramp-smb-get-share (tramp-file-name-localname vec)))
+ (buf (tramp-get-buffer vec))
+ (p (get-buffer-process buf)))
- (save-match-data
- (let* ((buffer (tramp-get-buffer nil tramp-smb-method user host))
- (real-user user)
- (real-host host)
- domain port args)
-
- ; Check for domain ("user%domain") and port ("host#port")
- (when (and user (string-match "\\(.+\\)%\\(.+\\)" user))
- (setq real-user (or (match-string 1 user) user)
- domain (match-string 2 user)))
-
- (when (and host (string-match "\\(.+\\)#\\(.+\\)" host))
- (setq real-host (or (match-string 1 host) host)
- port (match-string 2 host)))
-
- (if share
- (setq args (list (concat "//" real-host "/" share)))
- (setq args (list "-L" real-host )))
-
- (if real-user
- (setq args (append args (list "-U" real-user)))
- (setq args (append args (list "-N"))))
-
- (when domain (setq args (append args (list "-W" domain))))
- (when port (setq args (append args (list "-p" port))))
-
- ; OK, let's go
- (tramp-pre-connection nil tramp-smb-method user host tramp-chunksize)
- (tramp-message 7 "Opening connection for //%s@%s/%s..."
- user host (or share ""))
-
- (let* ((default-directory (tramp-temporary-file-directory))
- ;; If we omit the conditional here, then we would use
- ;; `undecided-dos' in some cases. With the conditional,
- ;; we use nil in these cases. Which one is right?
- (coding-system-for-read (unless (and (not (featurep 'xemacs))
- (> emacs-major-version 20))
- tramp-dos-coding-system))
- (p (apply #'start-process (buffer-name buffer) buffer
- tramp-smb-program args)))
-
- (tramp-message 9 "Started process %s" (process-command p))
- (tramp-set-process-query-on-exit-flag p nil)
- (set-buffer buffer)
- (setq tramp-smb-share share)
-
- ; send password
- (when real-user
- (let ((pw-prompt "Password:"))
- (tramp-message 9 "Sending password")
- (tramp-enter-password p pw-prompt user host)))
-
- (unless (tramp-smb-wait-for-output user host)
- (tramp-clear-passwd user host)
- (error "Cannot open connection //%s@%s/%s"
- user host (or share "")))))))
+ ;; If too much time has passed since last command was sent, look
+ ;; whether has been an error message; maybe due to connection timeout.
+ (with-current-buffer buf
+ (goto-char (point-min))
+ (when (and (> (tramp-time-diff
+ (current-time)
+ (tramp-get-connection-property
+ p "last-cmd-time" '(0 0 0)))
+ 60)
+ p (processp p) (memq (process-status p) '(run open))
+ (re-search-forward tramp-smb-errors nil t))
+ (delete-process p)
+ (setq p nil)))
+
+ ;; Check whether it is still the same share.
+ (unless
+ (and p (processp p) (memq (process-status p) '(run open))
+ (string-equal
+ share
+ (tramp-get-connection-property p "smb-share" "")))
+
+ (save-match-data
+ ;; There might be unread output from checking for share names.
+ (when buf (with-current-buffer buf (erase-buffer)))
+ (when (and p (processp p)) (delete-process p))
+
+ (unless (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (executable-find tramp-smb-program))
+ (error "Cannot find command %s in %s" tramp-smb-program exec-path))
+
+ (let* ((user (tramp-file-name-user vec))
+ (host (tramp-file-name-host vec))
+ (real-user user)
+ (real-host host)
+ domain port args)
+
+ ;; Check for domain ("user%domain") and port ("host#port").
+ (when (and user (string-match "\\(.+\\)%\\(.+\\)" user))
+ (setq real-user (or (match-string 1 user) user)
+ domain (match-string 2 user)))
+
+ (when (and host (string-match "\\(.+\\)#\\(.+\\)" host))
+ (setq real-host (or (match-string 1 host) host)
+ port (match-string 2 host)))
+
+ (if share
+ (setq args (list (concat "//" real-host "/" share)))
+ (setq args (list "-L" real-host )))
+
+ (if (not (zerop (length real-user)))
+ (setq args (append args (list "-U" real-user)))
+ (setq args (append args (list "-N"))))
+
+ (when domain (setq args (append args (list "-W" domain))))
+ (when port (setq args (append args (list "-p" port))))
+ (setq args (append args (list "-s" "/dev/null")))
+
+ ;; OK, let's go.
+ (tramp-message
+ vec 3 "Opening connection for //%s%s/%s..."
+ (if (not (zerop (length user))) (concat user "@") "")
+ host (or share ""))
+
+ (let* ((coding-system-for-read nil)
+ (process-connection-type tramp-process-connection-type)
+ (p (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (apply #'start-process
+ (tramp-buffer-name vec) (tramp-get-buffer vec)
+ tramp-smb-program args))))
+
+ (tramp-message
+ vec 6 "%s" (mapconcat 'identity (process-command p) " "))
+ (set-process-sentinel p 'tramp-flush-connection-property)
+ (tramp-set-process-query-on-exit-flag p nil)
+ (tramp-set-connection-property p "smb-share" share)
+
+ ;; Set variables for computing the prompt for reading password.
+ (setq tramp-current-method tramp-smb-method
+ tramp-current-user user
+ tramp-current-host host)
+
+ ;; Set chunksize. Otherwise, `tramp-send-string' might
+ ;; try it itself.
+ (tramp-set-connection-property p "chunksize" tramp-chunksize)
+
+ ;; Play login scenario.
+ (tramp-process-actions
+ p vec
+ (if share
+ tramp-smb-actions-with-share
+ tramp-smb-actions-without-share))
+
+ (tramp-message
+ vec 3 "Opening connection for //%s%s/%s...done"
+ (if (not (zerop (length user))) (concat user "@") "")
+ host (or share ""))))))))
;; We don't use timeouts. If needed, the caller shall wrap around.
-(defun tramp-smb-wait-for-output (user host)
+(defun tramp-smb-wait-for-output (vec)
"Wait for output from smbclient command.
Returns nil if an error message has appeared."
- (let ((proc (get-buffer-process (current-buffer)))
- (found (progn (goto-char (point-min))
- (re-search-forward tramp-smb-prompt nil t)))
- (err (progn (goto-char (point-min))
- (re-search-forward tramp-smb-errors nil t))))
-
- ;; Algorithm: get waiting output. See if last line contains
- ;; tramp-smb-prompt sentinel or tramp-smb-errors strings.
- ;; If not, wait a bit and again get waiting output.
- (while (not found)
-
- ;; Accept pending output.
- (tramp-accept-process-output proc)
-
- ;; Search for prompt.
- (goto-char (point-min))
- (setq found (re-search-forward tramp-smb-prompt nil t))
-
- ;; Search for errors.
- (goto-char (point-min))
- (setq err (re-search-forward tramp-smb-errors nil t)))
+ (with-current-buffer (tramp-get-buffer vec)
+ (let ((p (get-buffer-process (current-buffer)))
+ (found (progn (goto-char (point-min))
+ (re-search-forward tramp-smb-prompt nil t)))
+ (err (progn (goto-char (point-min))
+ (re-search-forward tramp-smb-errors nil t))))
- ;; Add output to debug buffer if appropriate.
- (when tramp-debug-buffer
- (append-to-buffer
- (tramp-get-debug-buffer nil tramp-smb-method user host)
- (point-min) (point-max)))
+ ;; Algorithm: get waiting output. See if last line contains
+ ;; tramp-smb-prompt sentinel or tramp-smb-errors strings.
+ ;; If not, wait a bit and again get waiting output.
+ (while (and (not found) (not err))
- ;; Return value is whether no error message has appeared.
- (not err)))
+ ;; Accept pending output.
+ (tramp-accept-process-output p)
+ ;; Search for prompt.
+ (goto-char (point-min))
+ (setq found (re-search-forward tramp-smb-prompt nil t))
-;; Snarfed code from time-date.el and parse-time.el
+ ;; Search for errors.
+ (goto-char (point-min))
+ (setq err (re-search-forward tramp-smb-errors nil t)))
-(defconst tramp-smb-half-a-year '(241 17024)
-"Evaluated by \"(days-to-time 183)\".")
+ ;; When the process is still alive, read pending output.
+ (while (and (not found) (memq (process-status p) '(run open)))
-(defconst tramp-smb-parse-time-months '(("jan" . 1) ("feb" . 2) ("mar" . 3)
- ("apr" . 4) ("may" . 5) ("jun" . 6)
- ("jul" . 7) ("aug" . 8) ("sep" . 9)
- ("oct" . 10) ("nov" . 11) ("dec" . 12))
-"Alist mapping month names to integers.")
+ ;; Accept pending output.
+ (tramp-accept-process-output p)
-(defun tramp-smb-time-less-p (t1 t2)
- "Say whether time value T1 is less than time value T2."
- (unless t1 (setq t1 '(0 0)))
- (unless t2 (setq t2 '(0 0)))
- (or (< (car t1) (car t2))
- (and (= (car t1) (car t2))
- (< (nth 1 t1) (nth 1 t2)))))
+ ;; Search for prompt.
+ (goto-char (point-min))
+ (setq found (re-search-forward tramp-smb-prompt nil t)))
-(defun tramp-smb-time-subtract (t1 t2)
- "Subtract two time values.
-Return the difference in the format of a time value."
- (unless t1 (setq t1 '(0 0)))
- (unless t2 (setq t2 '(0 0)))
- (let ((borrow (< (cadr t1) (cadr t2))))
- (list (- (car t1) (car t2) (if borrow 1 0))
- (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
+ ;; Return value is whether no error message has appeared.
+ (tramp-message vec 6 "\n%s" (buffer-string))
+ (not err))))
(provide 'tramp-smb)
;;; TODO:
-;; * Provide a local smb.conf. The default one might not be readable.
;; * Error handling in case password is wrong.
;; * Read password from "~/.netrc".
;; * Return more comprehensive file permission string. Think whether it is
;; possible to implement `set-file-modes'.
-;; * Handle WILDCARD and FULL-DIRECTORY-P in
-;; `tramp-smb-handle-insert-directory'.
;; * Handle links (FILENAME.LNK).
-;; * Maybe local tmp files should have the same extension like the original
-;; files. Strange behaviour with jka-compr otherwise?
-;; * Copy files in dired from SMB to another method doesn't work.
;; * Try to remove the inclusion of dummy "" directory. Seems to be at
;; several places, especially in `tramp-smb-handle-insert-directory'.
-;; * Provide variables for debug.
;; * (RMS) Use unwind-protect to clean up the state so as to make the state
;; regular again.
+;; * Make it multi-hop capable.
;;; arch-tag: fcc9dbec-7503-4d73-b638-3c8aa59575f5
;;; tramp-smb.el ends here
diff --git a/lisp/net/tramp-util.el b/lisp/net/tramp-util.el
deleted file mode 100644
index f4b23fe86d6..00000000000
--- a/lisp/net/tramp-util.el
+++ /dev/null
@@ -1,138 +0,0 @@
-;;; -*- coding: iso-2022-7bit; -*-
-;;; tramp-util.el --- Misc utility functions to use with Tramp
-
-;; Copyright (C) 2001, 2002, 2003, 2004, 2005,
-;; 2006, 2007 Free Software Foundation, Inc.
-
-;; Author: kai.grossjohann@gmx.net
-;; Keywords: comm, extensions, processes
-
-;; This file 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 3, or (at your option)
-;; any later version.
-
-;; This file 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:
-
-;; Some misc. utility functions that might go nicely with Tramp.
-;; Mostly, these are kluges awaiting real solutions later on.
-
-;;; Code:
-
-(require 'compile)
-(require 'tramp)
-(add-hook 'tramp-util-unload-hook
- '(lambda ()
- (when (featurep 'tramp)
- (unload-feature 'tramp 'force))))
-
-;; Define a Tramp minor mode. It's intention is to redefine some keys for Tramp
-;; specific functions, like compilation.
-;; The key remapping works since Emacs 22 only. Unknown for XEmacs.
-
-;; Pacify byte-compiler
-(eval-when-compile
- (unless (fboundp 'define-minor-mode)
- (defalias 'define-minor-mode 'identity)
- (defvar tramp-minor-mode))
- (unless (featurep 'xemacs)
- (defalias 'add-menu-button 'ignore)))
-
-(defvar tramp-minor-mode-map (make-sparse-keymap)
- "Keymap for Tramp minor mode.")
-
-(define-minor-mode tramp-minor-mode "Tramp minor mode for utility functions."
- :group 'tramp
- :global nil
- :init-value nil
- :lighter " Tramp"
- :keymap tramp-minor-mode-map
- (setq tramp-minor-mode
- (and tramp-minor-mode (tramp-tramp-file-p default-directory))))
-
-(add-hook 'find-file-hooks 'tramp-minor-mode t)
-(add-hook 'tramp-util-unload-hook
- '(lambda ()
- (remove-hook 'find-file-hooks 'tramp-minor-mode)))
-
-(add-hook 'dired-mode-hook 'tramp-minor-mode t)
-(add-hook 'tramp-util-unload-hook
- '(lambda ()
- (remove-hook 'dired-mode-hook 'tramp-minor-mode)))
-
-(defun tramp-remap-command (old-command new-command)
- "Replaces bindings of OLD-COMMAND by NEW-COMMAND.
-If remapping functionality for keymaps is defined, this happens for all
-bindings. Otherwise, only bindings active during invocation are taken
-into account. XEmacs menubar bindings are not changed by this."
- (if (functionp 'command-remapping)
- ;; Emacs 22
- (eval
- `(define-key tramp-minor-mode-map [remap ,old-command] new-command))
- ;; previous Emacs versions.
- (mapcar
- '(lambda (x)
- (define-key tramp-minor-mode-map x new-command))
- (where-is-internal old-command))))
-
-(tramp-remap-command 'compile 'tramp-compile)
-(tramp-remap-command 'recompile 'tramp-recompile)
-
-;; XEmacs has an own mimic for menu entries
-(when (fboundp 'add-menu-button)
- (funcall 'add-menu-button
- '("Tools" "Compile")
- ["Compile..."
- (command-execute (if tramp-minor-mode 'tramp-compile 'compile))
- :active (fboundp 'compile)])
- (funcall 'add-menu-button
- '("Tools" "Compile")
- ["Repeat Compilation"
- (command-execute (if tramp-minor-mode 'tramp-recompile 'recompile))
- :active (fboundp 'compile)]))
-
-;; Utility functions.
-
-(defun tramp-compile (command)
- "Compile on remote host."
- (interactive
- (if (or compilation-read-command current-prefix-arg)
- (list (read-from-minibuffer "Compile command: "
- compile-command nil nil
- '(compile-history . 1)))
- (list compile-command)))
- (setq compile-command command)
- (save-some-buffers (not compilation-ask-about-save) nil)
- (let ((d default-directory))
- (save-excursion
- (pop-to-buffer (get-buffer-create "*Compilation*") t)
- (erase-buffer)
- (setq default-directory d)))
- (tramp-handle-shell-command command (get-buffer "*Compilation*"))
- (pop-to-buffer (get-buffer "*Compilation*"))
- (tramp-minor-mode 1)
- (compilation-minor-mode 1))
-
-(defun tramp-recompile ()
- "Re-compile on remote host."
- (interactive)
- (save-some-buffers (not compilation-ask-about-save) nil)
- (tramp-handle-shell-command compile-command (get-buffer "*Compilation*"))
- (pop-to-buffer (get-buffer "*Compilation*"))
- (tramp-minor-mode 1)
- (compilation-minor-mode 1))
-
-(provide 'tramp-util)
-
-;;; arch-tag: 500f9992-a44e-46d0-83a7-980799251808
-;;; tramp-util.el ends here
diff --git a/lisp/net/tramp-uu.el b/lisp/net/tramp-uu.el
index a12c9adbba8..d9994e9dc83 100644
--- a/lisp/net/tramp-uu.el
+++ b/lisp/net/tramp-uu.el
@@ -1,10 +1,10 @@
-;;; -*- coding: iso-2022-7bit; -*-
;;; tramp-uu.el --- uuencode in Lisp
+;;; -*- coding: utf-8; -*-
;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
;; 2007 Free Software Foundation, Inc.
-;; Author: Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
;; Keywords: comm, terminals
;; This file is free software; you can redistribute it and/or modify
@@ -18,9 +18,8 @@
;; 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.
+;; along with GNU Emacs; see the file COPYING. If not, see
+;; <http://www.gnu.org/licenses/>.
;;; Commentary:
diff --git a/lisp/net/tramp-vc.el b/lisp/net/tramp-vc.el
deleted file mode 100644
index eb411cb307f..00000000000
--- a/lisp/net/tramp-vc.el
+++ /dev/null
@@ -1,539 +0,0 @@
-;;; tramp-vc.el --- Version control integration for TRAMP.el
-
-;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;; 2005, 2006, 2007 Free Software Foundation, Inc.
-
-;; Author: Daniel Pittman <daniel@danann.net>
-;; Keywords: comm, 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 3, 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:
-
-;; See the main module, 'tramp.el' for discussion of the purpose of TRAMP.
-;; This module provides integration between remote files accessed by TRAMP and
-;; the Emacs version control system.
-
-;;; Code:
-
-(require 'vc)
-;; Old VC defines vc-rcs-release in vc.el, new VC requires extra module.
-(unless (boundp 'vc-rcs-release)
- (require 'vc-rcs))
-(require 'tramp)
-
-;; Avoid byte-compiler warnings if the byte-compiler supports this.
-;; Currently, XEmacs supports this.
-(eval-when-compile
- (when (fboundp 'byte-compiler-options)
- (let (unused-vars) ; Pacify Emacs byte-compiler
- (defalias 'warnings 'identity) ; Pacify Emacs byte-compiler
- (byte-compiler-options (warnings (- unused-vars))))))
-
-;; -- vc --
-
-;; This used to blow away the file-name-handler-alist and reinstall
-;; TRAMP into it. This was intended to let VC work remotely. It didn't,
-;; at least not in my XEmacs 21.2 install.
-;;
-;; In any case, tramp-run-real-handler now deals correctly with disabling
-;; the things that should be, making this a no-op.
-;;
-;; I have removed it from the tramp-file-name-handler-alist because the
-;; shortened version does nothing. This is for reference only now.
-;;
-;; Daniel Pittman <daniel@danann.net>
-;;
-;; (defun tramp-handle-vc-registered (file)
-;; "Like `vc-registered' for tramp files."
-;; (tramp-run-real-handler 'vc-registered (list file)))
-
-;; `vc-do-command'
-;; This function does not deal well with remote files, so we define
-;; our own version and make a backup of the original function and
-;; call our version for tramp files and the original version for
-;; normal files.
-
-;; The following function is pretty much copied from vc.el, but
-;; the part that actually executes a command is changed.
-;; CCC: this probably works for Emacs 21, too.
-(defun tramp-vc-do-command (buffer okstatus command file last &rest flags)
- "Like `vc-do-command' but invoked for tramp files.
-See `vc-do-command' for more information."
- (save-match-data
- (and file (setq file (expand-file-name file)))
- (if (not buffer) (setq buffer "*vc*"))
- (if vc-command-messages
- (message "Running `%s' on `%s'..." command file))
- (let ((obuf (current-buffer)) (camefrom (current-buffer))
- (squeezed nil)
- (olddir default-directory)
- vc-file status)
- (let* ((v (tramp-dissect-file-name (expand-file-name file)))
- (multi-method (tramp-file-name-multi-method v))
- (method (tramp-file-name-method v))
- (user (tramp-file-name-user v))
- (host (tramp-file-name-host v))
- (localname (tramp-file-name-localname v)))
- (set-buffer (get-buffer-create buffer))
- (set (make-local-variable 'vc-parent-buffer) camefrom)
- (set (make-local-variable 'vc-parent-buffer-name)
- (concat " from " (buffer-name camefrom)))
- (setq default-directory olddir)
-
- (erase-buffer)
-
- (mapcar
- (function
- (lambda (s) (and s (setq squeezed (append squeezed (list s))))))
- flags)
- (if (and (eq last 'MASTER) file
- (setq vc-file (vc-name file)))
- (setq squeezed
- (append squeezed
- (list (tramp-file-name-localname
- (tramp-dissect-file-name vc-file))))))
- (if (and file (eq last 'WORKFILE))
- (progn
- (let* ((pwd (expand-file-name default-directory))
- (preflen (length pwd)))
- (if (string= (substring file 0 preflen) pwd)
- (setq file (substring file preflen))))
- (setq squeezed (append squeezed (list file)))))
- ;; Unless we (save-window-excursion) the layout of windows in
- ;; the current frame changes. This is painful, at best.
- ;;
- ;; As a point of note, (save-excursion) is still here only because
- ;; it preserves (point) in the current buffer. (save-window-excursion)
- ;; does not, at least under XEmacs 21.2.
- ;;
- ;; I trust that the FSF support this as well. I can't find useful
- ;; documentation to check :(
- ;;
- ;; Daniel Pittman <daniel@danann.net>
- (save-excursion
- (save-window-excursion
- ;; Actually execute remote command
- ;; `shell-command' cannot be used; it isn't magic in XEmacs.
- (tramp-handle-shell-command
- (mapconcat 'tramp-shell-quote-argument
- (cons command squeezed) " ") t)
- ;;(tramp-wait-for-output)
- ;; Get status from command
- (tramp-send-command multi-method method user host "echo $?")
- (tramp-wait-for-output)
- ;; Make sure to get status from last line of output.
- (goto-char (point-max)) (forward-line -1)
- (setq status (read (current-buffer)))
- (message "Command %s returned status %d." command status)))
- (goto-char (point-max))
- (set-buffer-modified-p nil)
- (forward-line -1)
- (if (or (not (integerp status))
- (and (integerp okstatus) (< okstatus status)))
- (progn
- (pop-to-buffer buffer)
- (goto-char (point-min))
- (shrink-window-if-larger-than-buffer)
- (error "Running `%s'...FAILED (%s)" command
- (if (integerp status)
- (format "status %d" status)
- status))
- )
- (if vc-command-messages
- (message "Running %s...OK" command))
- )
- (set-buffer obuf)
- status))
- ))
-
-;; Following code snarfed from Emacs 21 vc.el and slightly tweaked.
-(defun tramp-vc-do-command-new (buffer okstatus command file &rest flags)
- "Like `vc-do-command' but for TRAMP files.
-This function is for the new VC which comes with Emacs 21.
-Since TRAMP doesn't do async commands yet, this function doesn't, either."
- (and file (setq file (expand-file-name file)))
- (if vc-command-messages
- (message "Running %s on %s..." command file))
- (save-current-buffer
- (unless (eq buffer t)
- ; Pacify byte-compiler
- (funcall (symbol-function 'vc-setup-buffer) buffer))
- (let ((squeezed nil)
- (inhibit-read-only t)
- (status 0))
- (let* ((v (when file (tramp-dissect-file-name file)))
- (multi-method (when file (tramp-file-name-multi-method v)))
- (method (when file (tramp-file-name-method v)))
- (user (when file (tramp-file-name-user v)))
- (host (when file (tramp-file-name-host v)))
- (localname (when file (tramp-file-name-localname v))))
- (setq squeezed (delq nil (copy-sequence flags)))
- (when file
- (setq squeezed (append squeezed (list (file-relative-name
- file default-directory)))))
- (let ((w32-quote-process-args t))
- (when (eq okstatus 'async)
- (message "Tramp doesn't do async commands, running synchronously."))
- ;; `shell-command' cannot be used; it isn't magic in XEmacs.
- (setq status (tramp-handle-shell-command
- (mapconcat 'tramp-shell-quote-argument
- (cons command squeezed) " ") t))
- (when (or (not (integerp status))
- (and (integerp okstatus) (< okstatus status)))
- (pop-to-buffer (current-buffer))
- (goto-char (point-min))
- (shrink-window-if-larger-than-buffer)
- (error "Running %s...FAILED (%s)" command
- (if (integerp status) (format "status %d" status) status))))
- (if vc-command-messages
- (message "Running %s...OK" command))
- ; Pacify byte-compiler
- (funcall (symbol-function 'vc-exec-after)
- `(run-hook-with-args
- 'vc-post-command-functions ',command ',localname ',flags))
- status))))
-
-
-;; The context for a VC command is the current buffer.
-;; That makes a test on the buffers file more reliable than a test on the
-;; arguments.
-;; This is needed to handle remote VC correctly - else we test against the
-;; local VC system and get things wrong...
-;; Daniel Pittman <daniel@danann.net>
-;;-(if (fboundp 'vc-call-backend)
-;;- () ;; This is the new VC for which we don't have an appropriate advice yet
-;;-)
-(unless (fboundp 'process-file)
- (if (fboundp 'vc-call-backend)
- (defadvice vc-do-command
- (around tramp-advice-vc-do-command
- (buffer okstatus command file &rest flags)
- activate)
- "Invoke tramp-vc-do-command for tramp files."
- (let ((file (symbol-value 'file))) ;pacify byte-compiler
- (if (or (and (stringp file) (tramp-tramp-file-p file))
- (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name))))
- (setq ad-return-value
- (apply 'tramp-vc-do-command-new buffer okstatus command
- file ;(or file (buffer-file-name))
- flags))
- ad-do-it)))
- (defadvice vc-do-command
- (around tramp-advice-vc-do-command
- (buffer okstatus command file last &rest flags)
- activate)
- "Invoke tramp-vc-do-command for tramp files."
- (let ((file (symbol-value 'file))) ;pacify byte-compiler
- (if (or (and (stringp file) (tramp-tramp-file-p file))
- (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name))))
- (setq ad-return-value
- (apply 'tramp-vc-do-command buffer okstatus command
- (or file (buffer-file-name)) last flags))
- ad-do-it))))
-
- (add-hook 'tramp-unload-hook
- '(lambda () (ad-unadvise 'vc-do-command))))
-
-
-;; XEmacs uses this to do some of its work. Like vc-do-command, we
-;; need to enhance it to make VC work via TRAMP-mode.
-;;
-;; Like the previous function, this is a cut-and-paste job from the VC
-;; file. It's based on the vc-do-command code.
-;; CCC: this isn't used in Emacs 21, so do as before.
-(defun tramp-vc-simple-command (okstatus command file &rest args)
- ;; Simple version of vc-do-command, for use in vc-hooks only.
- ;; Don't switch to the *vc-info* buffer before running the
- ;; command, because that would change its default directory
- (save-match-data
- (let* ((v (tramp-dissect-file-name (expand-file-name file)))
- (multi-method (tramp-file-name-multi-method v))
- (method (tramp-file-name-method v))
- (user (tramp-file-name-user v))
- (host (tramp-file-name-host v))
- (localname (tramp-file-name-localname v)))
- (save-excursion (set-buffer (get-buffer-create "*vc-info*"))
- (erase-buffer))
- (let ((exec-path (append vc-path exec-path)) exec-status
- ;; Add vc-path to PATH for the execution of this command.
- (process-environment
- (cons (concat "PATH=" (getenv "PATH")
- path-separator
- (mapconcat 'identity vc-path path-separator))
- process-environment)))
- ;; Call the actual process. See tramp-vc-do-command for discussion of
- ;; why this does both (save-window-excursion) and (save-excursion).
- ;;
- ;; As a note, I don't think that the process-environment stuff above
- ;; has any effect on the remote system. This is a hard one though as
- ;; there is no real reason to expect local and remote paths to be
- ;; identical...
- ;;
- ;; Daniel Pittman <daniel@danann.net>
- (save-excursion
- (save-window-excursion
- ;; Actually execute remote command
- ;; `shell-command' cannot be used; it isn't magic in XEmacs.
- (tramp-handle-shell-command
- (mapconcat 'tramp-shell-quote-argument
- (append (list command) args (list localname)) " ")
- (get-buffer-create"*vc-info*"))
- ;(tramp-wait-for-output)
- ;; Get status from command
- (tramp-send-command multi-method method user host "echo $?")
- (tramp-wait-for-output)
- (setq exec-status (read (current-buffer)))
- (message "Command %s returned status %d." command exec-status)))
-
- ;; Maybe okstatus can be `async' here. But then, maybe the
- ;; async thing is new in Emacs 21, but this function is only
- ;; used in Emacs 20.
- (cond ((> exec-status okstatus)
- (switch-to-buffer (get-file-buffer file))
- (shrink-window-if-larger-than-buffer
- (display-buffer "*vc-info*"))
- (error "Couldn't find version control information")))
- exec-status))))
-
-;; This function does not exist any more in Emacs-21's VC
-(defadvice vc-simple-command
- (around tramp-advice-vc-simple-command
- (okstatus command file &rest args)
- activate)
- "Invoke tramp-vc-simple-command for tramp files."
- (let ((file (symbol-value 'file))) ;pacify byte-compiler
- (if (or (and (stringp file) (tramp-tramp-file-p file))
- (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name))))
- (setq ad-return-value
- (apply 'tramp-vc-simple-command okstatus command
- (or file (buffer-file-name)) args))
- ad-do-it)))
-
-(add-hook 'tramp-unload-hook
- '(lambda () (ad-unadvise 'vc-simple-command)))
-
-
-;; `vc-workfile-unchanged-p'
-;; This function does not deal well with remote files, so we do the
-;; same as for `vc-do-command'.
-
-;; `vc-workfile-unchanged-p' checks the modification time, we cannot
-;; do that for remote files, so here's a version which relies on diff.
-;; CCC: this one probably works for Emacs 21, too.
-(defun tramp-vc-workfile-unchanged-p
- (filename &optional want-differences-if-changed)
- (if (fboundp 'vc-backend-diff)
- ;; Old VC. Call `vc-backend-diff'.
- (let ((status (funcall (symbol-function 'vc-backend-diff)
- filename nil nil
- (not want-differences-if-changed))))
- (zerop status))
- ;; New VC. Call `vc-default-workfile-unchanged-p'.
- (funcall (symbol-function 'vc-default-workfile-unchanged-p)
- (vc-backend filename) filename)))
-
-(defadvice vc-workfile-unchanged-p
- (around tramp-advice-vc-workfile-unchanged-p
- (filename &optional want-differences-if-changed)
- activate)
- "Invoke tramp-vc-workfile-unchanged-p for tramp files."
- (if (and (stringp filename)
- (tramp-tramp-file-p filename)
- (not
- (let ((v (tramp-dissect-file-name filename)))
- ;; The following check is probably to test whether
- ;; file-attributes returns correct last modification
- ;; times. This check needs to be changed.
- (tramp-get-remote-perl (tramp-file-name-multi-method v)
- (tramp-file-name-method v)
- (tramp-file-name-user v)
- (tramp-file-name-host v)))))
- (setq ad-return-value
- (tramp-vc-workfile-unchanged-p filename want-differences-if-changed))
- ad-do-it))
-
-(add-hook 'tramp-unload-hook
- '(lambda () (ad-unadvise 'vc-workfile-unchanged-p)))
-
-
-;; Redefine a function from vc.el -- allow tramp files.
-;; `save-match-data' seems not to be required -- it isn't in
-;; the original version, either.
-;; CCC: this might need some work -- how does the Emacs 21 version
-;; work, anyway? Does it work over ange-ftp? Hm.
-(if (not (fboundp 'vc-backend-checkout))
- () ;; our replacement won't work and is unnecessary anyway
-(defun vc-checkout (filename &optional writable rev)
- "Retrieve a copy of the latest version of the given file."
- ;; If ftp is on this system and the name matches the ange-ftp format
- ;; for a remote file, the user is trying something that won't work.
- (funcall (symbol-function 'vc-backend-checkout) filename writable rev)
- (vc-resynch-buffer filename t t))
-)
-
-
-;; Do we need to advise the vc-user-login-name function anyway?
-;; This will return the correct login name for the owner of a
-;; file. It does not deal with the default remote user name...
-;;
-;; That is, when vc calls (vc-user-login-name), we return the
-;; local login name, something that may be different to the remote
-;; default.
-;;
-;; The remote VC operations will occur as the user that we logged
-;; in with however - not always the same as the local user.
-;;
-;; In the end, I did advise the function. This is because, well,
-;; the thing didn't work right otherwise ;)
-;;
-;; Daniel Pittman <daniel@danann.net>
-
-(defun tramp-handle-vc-user-login-name (&optional uid)
- "Return the default user name on the remote machine.
-Whenever VC calls this function, `file' is bound to the file name
-in question. If no uid is provided or the uid is equal to the uid
-owning the file, then we return the user name given in the file name.
-
-This should only be called when `file' is bound to the
-filename we are thinking about..."
- ;; Pacify byte-compiler; this symbol is bound in the calling
- ;; function. CCC: Maybe it would be better to move the
- ;; boundness-checking into this function?
- (let* ((file (symbol-value 'file))
- (remote-uid
- ;; With Emacs 22, `file-attributes' has got an optional parameter
- ;; ID-FORMAT. Handle this case backwards compatible.
- (if (and (functionp 'subr-arity)
- (= 2 (cdr (funcall (symbol-function 'subr-arity)
- (symbol-function 'file-attributes)))))
- (nth 2 (file-attributes file 'integer))
- (nth 2 (file-attributes file)))))
- (if (and uid (/= uid remote-uid))
- (error "tramp-handle-vc-user-login-name cannot map a uid to a name")
- (let* ((v (tramp-dissect-file-name (expand-file-name file)))
- (u (tramp-file-name-user v)))
- (cond ((stringp u) u)
- ((vectorp u) (elt u (1- (length u))))
- ((null u) (user-login-name))
- (t (error "tramp-handle-vc-user-login-name cannot cope!")))))))
-
-
-;; The following defadvice is no longer necessary after changes in VC
-;; on 2006-01-25, Andre.
-
-;; That means either GNU Emacs >= 22 or the "new vc" package from XEmacs
-;; packages collection; as of 2007-09-06, test for availability of
-;; `vc-find-version' works for both of those cases.
-(unless (fboundp 'vc-find-version)
- (defadvice vc-user-login-name
- (around tramp-vc-user-login-name activate)
- "Support for files on remote machines accessed by TRAMP."
- ;; We rely on the fact that `file' is bound when this is called.
- ;; This appears to be the case everywhere in vc.el and vc-hooks.el
- ;; as of Emacs 20.5.
- ;;
- ;; With Emacs 22, the definition of `vc-user-login-name' has been
- ;; changed. It doesn't need to be adviced any longer.
- (let ((file (when (boundp 'file)
- (symbol-value 'file)))) ;pacify byte-compiler
- (or (and (stringp file)
- (tramp-tramp-file-p file) ; tramp file
- (setq ad-return-value
- (save-match-data
- (tramp-handle-vc-user-login-name (ad-get-arg 0))))) ; get the owner name
- ad-do-it))) ; else call the original
-
- (add-hook 'tramp-unload-hook
- '(lambda () (ad-unadvise 'vc-user-login-name))))
-
-
-;; Determine the name of the user owning a file.
-(defun tramp-file-owner (filename)
- "Return who owns FILE (user name, as a string)."
- (let ((v (tramp-dissect-file-name
- (expand-file-name filename))))
- (if (not (file-exists-p filename))
- nil ; file cannot be opened
- ;; file exists, find out stuff
- (save-excursion
- (tramp-send-command
- (tramp-file-name-multi-method v) (tramp-file-name-method v)
- (tramp-file-name-user v) (tramp-file-name-host v)
- (format "%s -Lld %s"
- (tramp-get-ls-command (tramp-file-name-multi-method v)
- (tramp-file-name-method v)
- (tramp-file-name-user v)
- (tramp-file-name-host v))
- (tramp-shell-quote-argument (tramp-file-name-localname v))))
- (tramp-wait-for-output)
- ;; parse `ls -l' output ...
- ;; ... file mode flags
- (read (current-buffer))
- ;; ... number links
- (read (current-buffer))
- ;; ... uid (as a string)
- (symbol-name (read (current-buffer)))))))
-
-;; Wire ourselves into the VC infrastructure...
-;; This function does not exist any more in Emacs-21's VC
-;; CCC: it appears that no substitute is needed for Emacs 21.
-(defadvice vc-file-owner
- (around tramp-vc-file-owner activate)
- "Support for files on remote machines accessed by TRAMP."
- (let ((filename (ad-get-arg 0)))
- (or (and (tramp-file-name-p filename) ; tramp file
- (setq ad-return-value
- (save-match-data
- (tramp-file-owner filename)))) ; get the owner name
- ad-do-it))) ; else call the original
-
-(add-hook 'tramp-unload-hook
- '(lambda () (ad-unadvise 'vc-file-owner)))
-
-
-;; We need to make the version control software backend version
-;; information local to the current buffer. This is because each TRAMP
-;; buffer can (theoretically) have a different VC version and I am
-;; *way* too lazy to try and push the correct value into each new
-;; buffer.
-;;
-;; Remote VC costs will just have to be paid, at least for the moment.
-;; Well, at least, they will right until I feel guilty about doing a
-;; botch job here and fix it. :/
-;;
-;; Daniel Pittman <daniel@danann.net>
-;; CCC: this is probably still needed for Emacs 21.
-(defun tramp-vc-setup-for-remote ()
- "Make the backend release variables buffer local.
-This makes remote VC work correctly at the cost of some processing time."
- (when (and (buffer-file-name)
- (tramp-tramp-file-p (buffer-file-name)))
- (make-local-variable 'vc-rcs-release)
- (setq vc-rcs-release nil)))
-
-(add-hook 'find-file-hooks 'tramp-vc-setup-for-remote t)
-(add-hook 'tramp-unload-hook
- '(lambda ()
- (remove-hook 'find-file-hooks 'tramp-vc-setup-for-remote)))
-
-;; No need to load this again if anyone asks.
-(provide 'tramp-vc)
-
-;;; arch-tag: 27cc42ce-da19-468d-ad5c-a2690558db60
-;;; tramp-vc.el ends here
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index d40d0c75813..ad80f11b8ae 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -1,12 +1,12 @@
-;;; -*- mode: Emacs-Lisp; coding: iso-2022-7bit; -*-
;;; tramp.el --- Transparent Remote Access, Multiple Protocol
+;;; -*- mode: Emacs-Lisp; coding: utf-8; -*-
;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
;; 2005, 2006, 2007 Free Software Foundation, Inc.
;; (copyright statements below in code to be updated with the above notice)
-;; Author: Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
;; Michael Albinus <michael.albinus@gmx.de>
;; Keywords: comm, processes
@@ -23,9 +23,8 @@
;; 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.
+;; along with GNU Emacs; see the file COPYING. If not, see
+;; <http://www.gnu.org/licenses/>.
;;; Commentary:
@@ -39,10 +38,9 @@
;; Notes:
;; -----
;;
-;; This package only works for Emacs 20 and higher, and for XEmacs 21
-;; and higher. (XEmacs 20 is missing the `with-timeout' macro. Emacs
-;; 19 is reported to have other problems. For XEmacs 21, you need the
-;; package `fsf-compat' for the `with-timeout' macro.)
+;; This package only works for Emacs 21.1 and higher, and for XEmacs 21.4
+;; and higher. For XEmacs 21, you need the package `fsf-compat' for
+;; the `with-timeout' macro.)
;;
;; This version might not work with pre-Emacs 21 VC unless VC is
;; loaded before tramp.el. Could you please test this and tell me about
@@ -74,9 +72,11 @@
(when (featurep 'trampver)
(unload-feature 'trampver 'force))))
-(if (featurep 'xemacs)
- (require 'timer-funcs)
- (require 'timer))
+(require 'tramp-compat)
+(add-hook 'tramp-unload-hook
+ '(lambda ()
+ (when (featurep 'tramp-compat)
+ (unload-feature 'tramp-compat 'force))))
(require 'format-spec) ;from Gnus 5.8, also in tar ball
;; As long as password.el is not part of (X)Emacs, it shouldn't
@@ -85,19 +85,22 @@
(load "password" 'noerror)
(require 'password nil 'noerror)) ;from No Gnus, also in tar ball
-;; The explicit check is not necessary in Emacs, which provides the
-;; feature even if implemented in C, but it appears to be necessary
-;; in XEmacs.
-(unless (and (fboundp 'base64-encode-region)
- (fboundp 'base64-decode-region))
- (require 'base64)) ;for the mimencode methods
(require 'shell)
(require 'advice)
-;; `copy-tree' is part of subr.el since Emacs 22.
-(eval-when-compile
- (unless (functionp 'copy-tree)
- (require 'cl)))
+;; Requiring 'tramp-cache results in an endless loop.
+(autoload 'tramp-get-file-property "tramp-cache")
+(autoload 'tramp-set-file-property "tramp-cache")
+(autoload 'tramp-flush-file-property "tramp-cache")
+(autoload 'tramp-flush-directory-property "tramp-cache")
+(autoload 'tramp-get-connection-property "tramp-cache")
+(autoload 'tramp-set-connection-property "tramp-cache")
+(autoload 'tramp-flush-connection-property "tramp-cache")
+(autoload 'tramp-parse-connection-properties "tramp-cache")
+(add-hook 'tramp-unload-hook
+ '(lambda ()
+ (when (featurep 'tramp-cache)
+ (unload-feature 'tramp-cache 'force))))
(autoload 'tramp-uuencode-region "tramp-uu"
"Implementation of `uuencode' in Lisp.")
@@ -106,80 +109,39 @@
(when (featurep 'tramp-uu)
(unload-feature 'tramp-uu 'force))))
-(unless (fboundp 'uudecode-decode-region)
- (autoload 'uudecode-decode-region "uudecode"))
+(autoload 'uudecode-decode-region "uudecode")
-;; XEmacs is distributed with few Lisp packages. Further packages are
-;; installed using EFS. If we use a unified filename format, then
-;; Tramp is required in addition to EFS. (But why can't Tramp just
-;; disable EFS when Tramp is loaded? Then XEmacs can ship with EFS
-;; just like before.) Another reason for using a separate filename
-;; syntax on XEmacs is that EFS hooks into XEmacs in many places, but
-;; Tramp only knows how to deal with `file-name-handler-alist', not
-;; the other places.
-;;;###autoload
-(defvar tramp-unified-filenames (not (featurep 'xemacs))
- "Non-nil means to use unified Ange-FTP/Tramp filename syntax.
-Otherwise, use a separate filename syntax for Tramp.")
-
-;; Load foreign methods. Because they do require Tramp internally, this
-;; must be done with the `eval-after-load' trick.
-
-;; tramp-ftp supports Ange-FTP only. Not suited for XEmacs therefore.
-(unless (featurep 'xemacs)
- (eval-after-load "tramp"
- '(progn
- (require 'tramp-ftp)
- (add-hook 'tramp-unload-hook
- '(lambda ()
- (when (featurep 'tramp-ftp)
- (unload-feature 'tramp-ftp 'force)))))))
-(when (and tramp-unified-filenames (featurep 'xemacs))
- (eval-after-load "tramp"
- '(progn
- (require 'tramp-efs)
- (add-hook 'tramp-unload-hook
- '(lambda ()
- (when (featurep 'tramp-efs)
- (unload-feature 'tramp-efs 'force)))))))
-
-;; tramp-smb uses "smbclient" from Samba.
-;; Not available under Cygwin and Windows, because they don't offer
-;; "smbclient". And even not necessary there, because Emacs supports
-;; UNC file names like "//host/share/localname".
-(unless (memq system-type '(cygwin windows-nt))
- (eval-after-load "tramp"
- '(progn
- (require 'tramp-smb)
- (add-hook 'tramp-unload-hook
- '(lambda ()
- (when (featurep 'tramp-smb)
- (unload-feature 'tramp-smb 'force)))))))
+;; The following Tramp packages must be loaded after Tramp, because
+;; they require Tramp as well.
+(eval-after-load "tramp"
+ '(dolist
+ (feature
+ (list
-(require 'custom)
+ ;; Tramp commands.
+ 'tramp-cmds
-(unless (boundp 'custom-print-functions)
- (defvar custom-print-functions nil)) ; not autoloaded before Emacs 20.4
+ ;; Load foreign FTP method.
+ (if (featurep 'xemacs) 'tramp-efs 'tramp-ftp)
-;; Avoid byte-compiler warnings if the byte-compiler supports this.
-;; Currently, XEmacs supports this.
-(eval-when-compile
- (when (featurep 'xemacs)
- (let (unused-vars) ; Pacify Emacs byte-compiler
- (defalias 'warnings 'identity) ; Pacify Emacs byte-compiler
- (byte-compiler-options (warnings (- unused-vars))))))
-
-;; `directory-sep-char' is an obsolete variable in Emacs. But it is
-;; used in XEmacs, so we set it here and there. The following is needed
-;; to pacify Emacs byte-compiler.
-(eval-when-compile
- (when (boundp 'byte-compile-not-obsolete-var)
- (setq byte-compile-not-obsolete-var 'directory-sep-char)))
-
-;; `set-buffer-multibyte' comes from Emacs Leim.
-(eval-and-compile
- (unless (fboundp 'set-buffer-multibyte)
- (defalias 'set-buffer-multibyte 'ignore)))
+ ;; tramp-smb uses "smbclient" from Samba. Not available
+ ;; under Cygwin and Windows, because they don't offer
+ ;; "smbclient". And even not necessary there, because Emacs
+ ;; supports UNC file names like "//host/share/localname".
+ (unless (memq system-type '(cygwin windows-nt)) 'tramp-smb)
+
+ ;; Load foreign FISH method.
+ 'tramp-fish
+
+ ;; Load gateways. It needs `make-network-process' from Emacs 22.
+ (when (functionp 'make-network-process) 'tramp-gw)))
+
+ (when feature
+ (require feature)
+ (add-hook 'tramp-unload-hook
+ `(lambda ()
+ (when (featurep ,feature)
+ (unload-feature ,feature 'force)))))))
;;; User Customizable Internal Variables:
@@ -188,16 +150,23 @@ Otherwise, use a separate filename syntax for Tramp.")
:group 'files
:version "22.1")
-(defcustom tramp-verbose 9
- "*Verbosity level for tramp.el. 0 means be silent, 10 is most verbose."
+(defcustom tramp-verbose 3
+ "*Verbosity level for Tramp.
+Any level x includes messages for all levels 1 .. x-1. The levels are
+
+ 0 silent (no tramp messages at all)
+ 1 errors
+ 2 warnings
+ 3 connection to remote hosts (default level)
+ 4 activities
+ 5 internal
+ 6 sent and received strings
+ 7 file caching
+ 8 connection properties
+10 traces (huge)."
:group 'tramp
:type 'integer)
-(defcustom tramp-debug-buffer nil
- "*Whether to send all commands and responses to a debug buffer."
- :group 'tramp
- :type 'boolean)
-
;; Emacs case
(eval-and-compile
(when (boundp 'backup-directory-alist)
@@ -206,7 +175,7 @@ Otherwise, use a separate filename syntax for Tramp.")
Each element looks like (REGEXP . DIRECTORY), with the same meaning like
in `backup-directory-alist'. If a Tramp file is backed up, and DIRECTORY
is a local file name, the backup directory is prepended with Tramp file
-name prefix \(multi-method, method, user, host\) of file.
+name prefix \(method, user, host\) of file.
\(setq tramp-backup-directory-alist backup-directory-alist\)
@@ -225,7 +194,7 @@ policy for local files."
It has the same meaning like `bkup-backup-directory-info' from package
`backup-dir'. If a Tramp file is backed up, and BACKUP-DIR is a local
file name, the backup directory is prepended with Tramp file name prefix
-\(multi-method, method, user, host\) of file.
+\(method, user, host\) of file.
\(setq tramp-bkup-backup-directory-info bkup-backup-directory-info\)
@@ -245,8 +214,7 @@ policy for local files."
"*Put auto-save files in this directory, if set.
The idea is to use a local directory so that auto-saving is faster."
:group 'tramp
- :type '(choice (const nil)
- string))
+ :type '(choice (const nil) string))
(defcustom tramp-encoding-shell
(if (memq system-type '(windows-nt))
@@ -263,9 +231,7 @@ For encoding and deocding, commands like the following are executed:
/bin/sh -c COMMAND < INPUT > OUTPUT
This variable can be used to change the \"/bin/sh\" part. See the
-variable `tramp-encoding-command-switch' for the \"-c\" part. Also, see the
-variable `tramp-encoding-reads-stdin' to specify whether the commands read
-standard input or a file.
+variable `tramp-encoding-command-switch' for the \"-c\" part.
Note that this variable is not used for remote commands. There are
mechanisms in tramp.el which automatically determine the right shell to
@@ -282,310 +248,339 @@ See the variable `tramp-encoding-shell' for more information."
:group 'tramp
:type 'string)
-(defcustom tramp-encoding-reads-stdin t
- "*If non-nil, encoding commands read from standard input.
-If nil, the filename is the last argument.
-
-Note that the commands always must write to standard output."
+(defcustom tramp-copy-size-limit 10240
+ "*The maximum file size where inline copying is preferred over an out-of-the-band copy."
:group 'tramp
- :type 'boolean)
-
-(defcustom tramp-multi-sh-program
- tramp-encoding-shell
- "*Use this program for bootstrapping multi-hop connections.
-This variable is similar to `tramp-encoding-shell', but it is only used
-when initializing a multi-hop connection. Therefore, the set of
-commands sent to this shell is quite restricted, and if you are
-careful it works to use CMD.EXE under Windows (instead of a Bourne-ish
-shell which does not normally exist on Windows anyway).
-
-To use multi-hop methods from Windows, you also need suitable entries
-in `tramp-multi-connection-function-alist' for the first hop.
+ :type 'integer)
-This variable defaults to the value of `tramp-encoding-shell'."
+(defcustom tramp-terminal-type "dumb"
+ "*Value of TERM environment variable for logging in to remote host.
+Because Tramp wants to parse the output of the remote shell, it is easily
+confused by ANSI color escape sequences and suchlike. Often, shell init
+files conditionalize this setup based on the TERM environment variable."
:group 'tramp
- :type '(file :must-match t))
+ :type 'string)
-;; CCC I have changed all occurrences of comint-quote-filename with
-;; tramp-shell-quote-argument, except in tramp-handle-expand-many-files.
-;; There, comint-quote-filename was removed altogether. If it turns
-;; out to be necessary there, something will need to be done.
-;;-(defcustom tramp-file-name-quote-list
-;;- '(?] ?[ ?\| ?& ?< ?> ?\( ?\) ?\; ?\ ?\* ?\? ?\! ?\" ?\' ?\` ?# ?\@ ?\+ )
-;;- "*Protect these characters from the remote shell.
-;;-Any character in this list is quoted (preceded with a backslash)
-;;-because it means something special to the shell. This takes effect
-;;-when sending file and directory names to the remote shell.
-;;-
-;;-See `comint-file-name-quote-list' for details."
-;;- :group 'tramp
-;;- :type '(repeat character))
-
-(defcustom tramp-methods
- '( ("rcp" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "rsh")
- (tramp-copy-program "rcp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args nil)
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("scp" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program "scp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("scp1" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program "scp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-1" "-e" "none"))
- (tramp-copy-args ("-1"))
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("scp2" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program "scp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-2" "-e" "none"))
- (tramp-copy-args ("-2"))
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("scp1_old"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh1")
- (tramp-copy-program "scp1")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("scp2_old"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh2")
- (tramp-copy-program "scp2")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("rsync" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program "rsync")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args ("-e" "ssh"))
- (tramp-copy-keep-date-arg "-t")
- (tramp-password-end-of-line nil))
- ("remcp" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "remsh")
- (tramp-copy-program "rcp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args nil)
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("rsh" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "rsh")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args nil)
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("ssh" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("ssh1" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-1" "-e" "none"))
- (tramp-copy-args ("-1"))
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("ssh2" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-2" "-e" "none"))
- (tramp-copy-args ("-2"))
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("ssh1_old"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh1")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("ssh2_old"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh2")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("remsh" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "remsh")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args nil)
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("telnet"
- (tramp-connection-function tramp-open-connection-telnet)
- (tramp-login-program "telnet")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args nil)
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("su" (tramp-connection-function tramp-open-connection-su)
- (tramp-login-program "su")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-" "%u"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("sudo" (tramp-connection-function tramp-open-connection-su)
- (tramp-login-program "sudo")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-u" "%u" "-s"
- "-p" "Password:"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("multi" (tramp-connection-function tramp-open-connection-multi)
- (tramp-login-program nil)
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args nil)
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("scpc" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program "scp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-o" "ControlPath=%t.%%r@%%h:%%p"
- "-o" "ControlMaster=yes"
- "-e" "none"))
- (tramp-copy-args ("-o" "ControlPath=%t.%%r@%%h:%%p"
- "-o" "ControlMaster=auto"))
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("scpx" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program "scp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none" "-t" "-t" "/bin/sh"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- ("sshx" (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "ssh")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-e" "none" "-t" "-t" "/bin/sh"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("krlogin"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "krlogin")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-x"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line nil))
- ("plink"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "plink")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-ssh")) ;optionally add "-v"
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line "xy")) ;see docstring for "xy"
- ("plink1"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "plink")
- (tramp-copy-program nil)
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-1" "-ssh")) ;optionally add "-v"
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg nil)
- (tramp-password-end-of-line "xy")) ;see docstring for "xy"
- ("pscp"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "plink")
- (tramp-copy-program "pscp")
- (tramp-remote-sh "/bin/sh")
- (tramp-login-args ("-ssh"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line "xy")) ;see docstring for "xy"
- ("fcp"
- (tramp-connection-function tramp-open-connection-rsh)
- (tramp-login-program "fsh")
- (tramp-copy-program "fcp")
- (tramp-remote-sh "/bin/sh -i")
- (tramp-login-args ("sh" "-i"))
- (tramp-copy-args nil)
- (tramp-copy-keep-date-arg "-p")
- (tramp-password-end-of-line nil))
- )
+(defvar tramp-methods
+ `(("rcp" (tramp-login-program "rsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rcp")
+ (tramp-copy-args (("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil))
+ ("scp" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("scp1" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-1" "-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-1") ("-P" "%p") ("-p" "%k")
+ ("-q")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("scp2" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-2" "-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-2") ("-P" "%p") ("-p" "%k")
+ ("-q")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("scp1_old"
+ (tramp-login-program "ssh1")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp1")
+ (tramp-copy-args (("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil))
+ ("scp2_old"
+ (tramp-login-program "ssh2")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp2")
+ (tramp-copy-args (("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil))
+ ("sftp" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "sftp")
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("rsync" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rsync")
+ (tramp-copy-args (("-e" "ssh") ("-t" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil))
+ ("remcp" (tramp-login-program "remsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "rcp")
+ (tramp-copy-args (("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil))
+ ("rsh" (tramp-login-program "rsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("ssh" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("ssh1" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-1" "-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("ssh2" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-2" "-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("ssh1_old"
+ (tramp-login-program "ssh1")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("ssh2_old"
+ (tramp-login-program "ssh2")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("remsh" (tramp-login-program "remsh")
+ (tramp-login-args (("%h") ("-l" "%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("telnet"
+ (tramp-login-program "telnet")
+ (tramp-login-args (("%h") ("%p")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil)
+ (tramp-default-port 23))
+ ("su" (tramp-login-program "su")
+ (tramp-login-args (("-") ("%u")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("sudo" (tramp-login-program "sudo")
+ (tramp-login-args (("-u" "%u")
+ ("-s" "-p" "Password:")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("scpc" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-o" "ControlPath=%t.%%r@%%h:%%p")
+ ("-o" "ControlMaster=yes")
+ ("-e" "none")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q")
+ ("-o" "ControlPath=%t.%%r@%%h:%%p")
+ ("-o" "ControlMaster=auto")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("scpx" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none" "-t" "-t" "/bin/sh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "scp")
+ (tramp-copy-args (("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("sshx" (tramp-login-program "ssh")
+ (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
+ ("-e" "none" "-t" "-t" "/bin/sh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil)
+ (tramp-gw-args (("-o"
+ "GlobalKnownHostsFile=/dev/null")
+ ("-o" "UserKnownHostsFile=/dev/null")
+ ("-o" "StrictHostKeyChecking=no")))
+ (tramp-default-port 22))
+ ("krlogin"
+ (tramp-login-program "krlogin")
+ (tramp-login-args (("%h") ("-l" "%u") ("-x")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("plink" (tramp-login-program "plink")
+ (tramp-login-args (("%h") ("-l" "%u") ("-P" "%p")
+ ("-ssh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line "xy") ;see docstring for "xy"
+ (tramp-default-port 22))
+ ("plink1"
+ (tramp-login-program "plink")
+ (tramp-login-args (("%h") ("-l" "%u") ("-P" "%p")
+ ("-1" "-ssh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line "xy") ;see docstring for "xy"
+ (tramp-default-port 22))
+ ("plinkx"
+ (tramp-login-program "plink")
+ (tramp-login-args (("-load" "%h") ("-t")
+ (,(format
+ "env 'TERM=%s' 'PROMPT_COMMAND=' 'PS1=$ '"
+ tramp-terminal-type))
+ ("/bin/sh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program nil)
+ (tramp-copy-args nil)
+ (tramp-copy-keep-date nil)
+ (tramp-password-end-of-line nil))
+ ("pscp" (tramp-login-program "plink")
+ (tramp-login-args (("%h") ("-l" "%u") ("-P" "%p")
+ ("-ssh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "pscp")
+ (tramp-copy-args (("-scp") ("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line "xy") ;see docstring for "xy"
+ (tramp-default-port 22))
+ ("psftp" (tramp-login-program "plink")
+ (tramp-login-args (("%h") ("-l" "%u") ("-P" "%p")
+ ("-ssh")))
+ (tramp-remote-sh "/bin/sh")
+ (tramp-copy-program "pscp")
+ (tramp-copy-args (("-psftp") ("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line "xy")) ;see docstring for "xy"
+ ("fcp" (tramp-login-program "fsh")
+ (tramp-login-args (("%h") ("-l" "%u") ("sh" "-i")))
+ (tramp-remote-sh "/bin/sh -i")
+ (tramp-copy-program "fcp")
+ (tramp-copy-args (("-p" "%k")))
+ (tramp-copy-keep-date t)
+ (tramp-password-end-of-line nil)))
"*Alist of methods for remote files.
This is a list of entries of the form (NAME PARAM1 PARAM2 ...).
Each NAME stands for a remote access method. Each PARAM is a
pair of the form (KEY VALUE). The following KEYs are defined:
- * `tramp-connection-function'
- This specifies the function to use to connect to the remote host.
- Currently, `tramp-open-connection-rsh', `tramp-open-connection-telnet'
- and `tramp-open-connection-su' are defined. See the documentation
- of these functions for more details.
* `tramp-remote-sh'
This specifies the Bourne shell to use on the remote host. This
MUST be a Bourne-like shell. It is normally not necessary to set
- this to any value other than \"/bin/sh\": tramp wants to use a shell
+ this to any value other than \"/bin/sh\": Tramp wants to use a shell
which groks tilde expansion, but it can search for it. Also note
that \"/bin/sh\" exists on all Unixen, this might not be true for
the value that you decide to use. You Have Been Warned.
* `tramp-login-program'
This specifies the name of the program to use for logging in to the
- remote host. Depending on `tramp-connection-function', this may be
- the name of rsh or a workalike program (when
- `tramp-connection-function' is `tramp-open-connection-rsh'), or the
- name of telnet or a workalike (for `tramp-open-connection-telnet'),
- or the name of su or a workalike (for `tramp-open-connection-su').
+ remote host. This may be the name of rsh or a workalike program,
+ or the name of telnet or a workalike, or the name of su or a workalike.
* `tramp-login-args'
This specifies the list of arguments to pass to the above
- mentioned program. Please note that this is a list of arguments,
+ mentioned program. Please note that this is a list of list of arguments,
that is, normally you don't want to put \"-a -b\" or \"-f foo\"
- here. Instead, you want two list elements, one for \"-a\" and one
- for \"-b\", or one for \"-f\" and one for \"foo\".
- If `tramp-connection-function' is `tramp-open-connection-su', then
- \"%u\" in this list is replaced by the user name, and \"%%\" can
- be used to obtain a literal percent character.
- \"%t\" is replaced by the temporary file name for `scp'-like methods.
+ here. Instead, you want a list (\"-a\" \"-b\"), or (\"-f\" \"foo\").
+ There are some patterns: \"%h\" in this list is replaced by the host
+ name, \"%u\" is replaced by the user name, \"%p\" is replaced by the
+ port number, and \"%%\" can be used to obtain a literal percent character.
+ If a list containing \"%h\", \"%u\" or \"%p\" is unchanged during
+ expansion (i.e. no host or no user specified), this list is not used as
+ argument. By this, arguments like (\"-l\" \"%u\") are optional.
+ \"%t\" is replaced by the temporary file name produced with
+ `tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date
+ parameter of a program, if exists.
* `tramp-copy-program'
This specifies the name of the program to use for remotely copying
the file; this might be the absolute filename of rcp or the name of
@@ -593,10 +588,16 @@ pair of the form (KEY VALUE). The following KEYs are defined:
* `tramp-copy-args'
This specifies the list of parameters to pass to the above mentioned
program, the hints for `tramp-login-args' also apply here.
- * `tramp-copy-keep-date-arg'
- This specifies the parameter to use for the copying program when the
- timestamp of the original file should be kept. For `rcp', use `-p', for
- `rsync', use `-t'.
+ * `tramp-copy-keep-date'
+ This specifies whether the copying program when the preserves the
+ timestamp of the original file.
+ * `tramp-default-port'
+ The default port of a method is needed in case of gateway connections.
+ Additionally, it is used as indication which method is prepared for
+ passing gateways.
+ * `tramp-gw-args'
+ As the attribute name says, additional arguments are specified here
+ when a method is applied via a gateway.
* `tramp-password-end-of-line'
This specifies the string to use for terminating the line after
submitting the password. If this method parameter is nil, then the
@@ -618,78 +619,22 @@ file is passed through the same buffer used by `tramp-login-program'. In
this case, the file contents need to be protected since the
`tramp-login-program' might use escape codes or the connection might not
be eight-bit clean. Therefore, file contents are encoded for transit.
-See the variable `tramp-coding-commands' for details.
+See the variables `tramp-local-coding-commands' and
+`tramp-remote-coding-commands' for details.
So, to summarize: if the method is an out-of-band method, then you
must specify `tramp-copy-program' and `tramp-copy-args'. If it is an
-inline method, then these two parameters should be nil. Every method,
-inline or out of band, must specify `tramp-connection-function' plus
-the associated arguments (for example, the login program if you chose
-`tramp-open-connection-telnet').
+inline method, then these two parameters should be nil. Methods which
+are fit for gateways must have `tramp-default-port' at least.
Notes:
-When using `tramp-open-connection-su' the phrase `open connection to a
-remote host' sounds strange, but it is used nevertheless, for
-consistency. No connection is opened to a remote host, but `su' is
-started on the local host. You are not allowed to specify a remote
-host other than `localhost' or the name of the local host."
- :group 'tramp
- :type '(repeat
- (cons string
- (set (list (const tramp-connection-function) function)
- (list (const tramp-login-program)
- (choice (const nil) string))
- (list (const tramp-copy-program)
- (choice (const nil) string))
- (list (const tramp-remote-sh)
- (choice (const nil) string))
- (list (const tramp-login-args) (repeat string))
- (list (const tramp-copy-args) (repeat string))
- (list (const tramp-copy-keep-date-arg)
- (choice (const nil) string))
- (list (const tramp-encoding-command)
- (choice (const nil) string))
- (list (const tramp-decoding-command)
- (choice (const nil) string))
- (list (const tramp-encoding-function)
- (choice (const nil) function))
- (list (const tramp-decoding-function)
- (choice (const nil) function))
- (list (const tramp-password-end-of-line)
- (choice (const nil) string))))))
-
-(defcustom tramp-multi-methods '("multi" "multiu")
- "*List of multi-hop methods.
-Each entry in this list should be a method name as mentioned in the
-variable `tramp-methods'."
- :group 'tramp
- :type '(repeat string))
-
-(defcustom tramp-multi-connection-function-alist
- '(("telnet" tramp-multi-connect-telnet "telnet %h%n")
- ("rsh" tramp-multi-connect-rlogin "rsh %h -l %u%n")
- ("remsh" tramp-multi-connect-rlogin "remsh %h -l %u%n")
- ("ssh" tramp-multi-connect-rlogin "ssh %h -l %u%n")
- ("ssht" tramp-multi-connect-rlogin "ssh %h -e none -t -t -l %u%n")
- ("su" tramp-multi-connect-su "su - %u%n")
- ("sudo" tramp-multi-connect-su "sudo -u %u -s -p Password:%n"))
- "*List of connection functions for multi-hop methods.
-Each list item is a list of three items (METHOD FUNCTION COMMAND),
-where METHOD is the name as used in the file name, FUNCTION is the
-function to be executed, and COMMAND is the shell command used for
-connecting.
-
-COMMAND may contain percent escapes. `%u' will be replaced with the
-user name, `%h' will be replaced with the host name, and `%n' will be
-replaced with an end-of-line character, as specified in the variable
-`tramp-rsh-end-of-line'. Use `%%' for a literal percent character.
-Note that the interpretation of the percent escapes also depends on
-the FUNCTION. For example, the `%u' escape is forbidden with the
-function `tramp-multi-connect-telnet'. See the documentation of the
-various functions for details."
- :group 'tramp
- :type '(repeat (list string function string)))
+When using `su' or `sudo' the phrase `open connection to a remote
+host' sounds strange, but it is used nevertheless, for consistency.
+No connection is opened to a remote host, but `su' or `sudo' is
+started on the local host. You should specify a remote host
+`localhost' or the name of the local host. Another host name is
+useful only in combination with `tramp-default-proxies-alist'.")
(defcustom tramp-default-method
;; An external copy method seems to be preferred, because it is much
@@ -701,30 +646,26 @@ various functions for details."
;; another good choice because of the "ControlMaster" option, but
;; this is a more modern alternative in OpenSSH 4, which cannot be
;; taken as default.
- (let ((e-f (fboundp 'executable-find)))
- (cond
- ;; PuTTY is installed.
- ((and e-f (funcall 'executable-find "pscp"))
- (if (or (fboundp 'password-read)
- ;; Pageant is running.
- (and (fboundp 'w32-window-exists-p)
- (funcall 'w32-window-exists-p "Pageant" "Pageant")))
- "pscp"
- "plink"))
- ;; There is an ssh installation.
- ((and e-f (funcall 'executable-find "scp"))
- (if (or (fboundp 'password-read)
- ;; ssh-agent is running.
- (getenv "SSH_AUTH_SOCK")
- (getenv "SSH_AGENT_PID"))
- "scp"
- "ssh"))
- ;; Under Emacs 20, `executable-find' does not exists. So we
- ;; couldn't check whether there is an ssh implementation. Let's
- ;; hope the best.
- ((not e-f) "ssh")
- ;; Fallback.
- (t "ftp")))
+ (cond
+ ;; PuTTY is installed.
+ ((executable-find "pscp")
+ (if (or (fboundp 'password-read)
+ ;; Pageant is running.
+ (and (fboundp 'w32-window-exists-p)
+ (funcall (symbol-function 'w32-window-exists-p)
+ "Pageant" "Pageant")))
+ "pscp"
+ "plink"))
+ ;; There is an ssh installation.
+ ((executable-find "scp")
+ (if (or (fboundp 'password-read)
+ ;; ssh-agent is running.
+ (getenv "SSH_AUTH_SOCK")
+ (getenv "SSH_AGENT_PID"))
+ "scp"
+ "ssh"))
+ ;; Fallback.
+ (t "ftp"))
"*Default method to use for transferring files.
See `tramp-methods' for possibilities.
Also see `tramp-default-method-alist'."
@@ -733,7 +674,7 @@ Also see `tramp-default-method-alist'."
(defcustom tramp-default-method-alist
'(("\\`localhost\\'" "\\`root\\'" "su"))
- "*Default method to use for specific user/host pairs.
+ "*Default method to use for specific host/user pairs.
This is an alist of items (HOST USER METHOD). The first matching item
specifies the method to use for a file name which does not specify a
method. HOST and USER are regular expressions or nil, which is
@@ -749,42 +690,90 @@ See `tramp-methods' for a list of possibilities for METHOD."
(regexp :tag "User regexp")
(string :tag "Method"))))
-;; Default values for non-Unices seeked
+(defcustom tramp-default-user
+ nil
+ "*Default user to use for transferring files.
+It is nil by default; otherwise settings in configuration files like
+\"~/.ssh/config\" would be overwritten. Also see `tramp-default-user-alist'.
+
+This variable is regarded as obsolete, and will be removed soon."
+ :group 'tramp
+ :type '(choice (const nil) string))
+
+(defcustom tramp-default-user-alist
+ `(("\\`su\\(do\\)?\\'" nil "root")
+ ("\\`r\\(em\\)?\\(cp\\|sh\\)\\|telnet\\|plink1?\\'"
+ nil ,(user-login-name)))
+ "*Default user to use for specific method/host pairs.
+This is an alist of items (METHOD HOST USER). The first matching item
+specifies the user to use for a file name which does not specify a
+user. METHOD and USER are regular expressions or nil, which is
+interpreted as a regular expression which always matches. If no entry
+matches, the variable `tramp-default-user' takes effect.
+
+If the file name does not specify the method, lookup is done using the
+empty string for the method name."
+ :group 'tramp
+ :type '(repeat (list (regexp :tag "Method regexp")
+ (regexp :tag "Host regexp")
+ (string :tag "User"))))
+
+(defcustom tramp-default-host
+ (system-name)
+ "*Default host to use for transferring files.
+Useful for su and sudo methods mostly."
+ :group 'tramp
+ :type 'string)
+
+(defcustom tramp-default-proxies-alist nil
+ "*Route to be followed for specific host/user pairs.
+This is an alist of items (HOST USER PROXY). The first matching
+item specifies the proxy to be passed for a file name located on
+a remote target matching USER@HOST. HOST and USER are regular
+expressions or nil, which is interpreted as a regular expression
+which always matches. PROXY must be a Tramp filename without a
+localname part. Method and user name on PROXY are optional,
+which is interpreted with the default values. PROXY can contain
+the patterns %h and %u, which are replaced by the strings
+matching HOST or USER, respectively."
+ :group 'tramp
+ :type '(repeat (list (regexp :tag "Host regexp")
+ (regexp :tag "User regexp")
+ (string :tag "Proxy remote name"))))
+
(defconst tramp-completion-function-alist-rsh
- (unless (memq system-type '(windows-nt))
- '((tramp-parse-rhosts "/etc/hosts.equiv")
- (tramp-parse-rhosts "~/.rhosts")))
+ '((tramp-parse-rhosts "/etc/hosts.equiv")
+ (tramp-parse-rhosts "~/.rhosts"))
"Default list of (FUNCTION FILE) pairs to be examined for rsh methods.")
-;; Default values for non-Unices seeked
(defconst tramp-completion-function-alist-ssh
- (unless (memq system-type '(windows-nt))
- '((tramp-parse-rhosts "/etc/hosts.equiv")
- (tramp-parse-rhosts "/etc/shosts.equiv")
- (tramp-parse-shosts "/etc/ssh_known_hosts")
- (tramp-parse-sconfig "/etc/ssh_config")
- (tramp-parse-shostkeys "/etc/ssh2/hostkeys")
- (tramp-parse-sknownhosts "/etc/ssh2/knownhosts")
- (tramp-parse-rhosts "~/.rhosts")
- (tramp-parse-rhosts "~/.shosts")
- (tramp-parse-shosts "~/.ssh/known_hosts")
- (tramp-parse-sconfig "~/.ssh/config")
- (tramp-parse-shostkeys "~/.ssh2/hostkeys")
- (tramp-parse-sknownhosts "~/.ssh2/knownhosts")))
+ '((tramp-parse-rhosts "/etc/hosts.equiv")
+ (tramp-parse-rhosts "/etc/shosts.equiv")
+ (tramp-parse-shosts "/etc/ssh_known_hosts")
+ (tramp-parse-sconfig "/etc/ssh_config")
+ (tramp-parse-shostkeys "/etc/ssh2/hostkeys")
+ (tramp-parse-sknownhosts "/etc/ssh2/knownhosts")
+ (tramp-parse-rhosts "~/.rhosts")
+ (tramp-parse-rhosts "~/.shosts")
+ (tramp-parse-shosts "~/.ssh/known_hosts")
+ (tramp-parse-sconfig "~/.ssh/config")
+ (tramp-parse-shostkeys "~/.ssh2/hostkeys")
+ (tramp-parse-sknownhosts "~/.ssh2/knownhosts"))
"Default list of (FUNCTION FILE) pairs to be examined for ssh methods.")
-;; Default values for non-Unices seeked
(defconst tramp-completion-function-alist-telnet
- (unless (memq system-type '(windows-nt))
- '((tramp-parse-hosts "/etc/hosts")))
+ '((tramp-parse-hosts "/etc/hosts"))
"Default list of (FUNCTION FILE) pairs to be examined for telnet methods.")
-;; Default values for non-Unices seeked
(defconst tramp-completion-function-alist-su
- (unless (memq system-type '(windows-nt))
- '((tramp-parse-passwd "/etc/passwd")))
+ '((tramp-parse-passwd "/etc/passwd"))
"Default list of (FUNCTION FILE) pairs to be examined for su methods.")
+(defconst tramp-completion-function-alist-putty
+ '((tramp-parse-putty
+ "HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions"))
+ "Default list of (FUNCTION REGISTRY) pairs to be examined for putty methods.")
+
(defvar tramp-completion-function-alist nil
"*Alist of methods for remote files.
This is a list of entries of the form (NAME PAIR1 PAIR2 ...).
@@ -800,6 +789,7 @@ names from FILE for completion. The following predefined FUNCTIONs exists:
* `tramp-parse-hosts' for \"/etc/hosts\" like files,
* `tramp-parse-passwd' for \"/etc/passwd\" like files.
* `tramp-parse-netrc' for \"~/.netrc\" like files.
+ * `tramp-parse-putty' for PuTTY registry keys.
FUNCTION can also be a customer defined function. For more details see
the info pages.")
@@ -843,8 +833,6 @@ the info pages.")
(tramp-set-completion-function
"sudo" tramp-completion-function-alist-su)
(tramp-set-completion-function
- "multi" nil)
- (tramp-set-completion-function
"scpx" tramp-completion-function-alist-ssh)
(tramp-set-completion-function
"sshx" tramp-completion-function-alist-ssh)
@@ -855,10 +843,26 @@ the info pages.")
(tramp-set-completion-function
"plink1" tramp-completion-function-alist-ssh)
(tramp-set-completion-function
+ "plinkx" tramp-completion-function-alist-putty)
+ (tramp-set-completion-function
"pscp" tramp-completion-function-alist-ssh)
(tramp-set-completion-function
"fcp" tramp-completion-function-alist-ssh)))
+(defconst tramp-echo-mark "_echo\b\b\b\b\b"
+ "String mark to be transmitted around shell commands.
+Used to separate their echo from the output they produce. This
+will only be used if we cannot disable remote echo via stty.
+This string must have no effect on the remote shell except for
+producing some echo which can later be detected by
+`tramp-echoed-echo-mark-regexp'. Using some characters followed
+by an equal number of backspaces to erase them will usually
+suffice.")
+
+(defconst tramp-echoed-echo-mark-regexp "_echo\\(\b\\( \b\\)?\\)\\{5\\}"
+ "Regexp which matches `tramp-echo-mark' as it gets echoed by
+the remote shell.")
+
(defcustom tramp-rsh-end-of-line "\n"
"*String used for end of line in rsh connections.
I don't think this ever needs to be changed, so please tell me about it
@@ -883,17 +887,45 @@ The default value is to use the same value as `tramp-rsh-end-of-line'."
:group 'tramp
:type 'string)
+;; "getconf PATH" yields:
+;; HP-UX: /usr/bin:/usr/ccs/bin:/opt/ansic/bin:/opt/langtools/bin:/opt/fortran/bin
+;; Solaris: /usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin
+;; Linux (Debian, Suse): /bin:/usr/bin
+;; FreeBSD: /usr/bin:/bin:/usr/sbin:/sbin: - beware trailing ":"!
(defcustom tramp-remote-path
- ;; "/usr/xpg4/bin" has been placed first, because on Solaris a POSIX
- ;; compatible "id" is needed.
- '("/usr/xpg4/bin" "/bin" "/usr/bin" "/usr/sbin" "/usr/local/bin"
- "/usr/ccs/bin" "/local/bin" "/local/freeware/bin" "/local/gnu/bin"
+ '(tramp-default-remote-path "/usr/sbin" "/usr/local/bin"
+ "/local/bin" "/local/freeware/bin" "/local/gnu/bin"
"/usr/freeware/bin" "/usr/pkg/bin" "/usr/contrib/bin")
"*List of directories to search for executables on remote host.
-Please notify me about other semi-standard directories to include here.
+For every remote host, this variable will be set buffer local,
+keeping the list of existing directories on that host.
You can use `~' in this list, but when searching for a shell which groks
-tilde expansion, all directory names starting with `~' will be ignored."
+tilde expansion, all directory names starting with `~' will be ignored.
+
+`Default Directories' represent the list of directories given by
+the command \"getconf PATH\". It is recommended to use this
+entry on top of this list, because these are the default
+directories for POSIX compatible commands."
+ :group 'tramp
+ :type '(repeat (choice
+ (const :tag "Default Directories" tramp-default-remote-path)
+ (string :tag "Directory"))))
+
+(defcustom tramp-remote-process-environment
+ `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_TIME=C"
+ ,(concat "TERM=" tramp-terminal-type)
+ "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH="
+ "autocorrect=" "correct=")
+
+ "*List of environment variables to be set on the remote host.
+
+Each element should be a string of the form ENVVARNAME=VALUE. An
+entry ENVVARNAME= diables the corresponding environment variable,
+which might have been set in the init files like ~/.profile.
+
+Special handling is applied to the PATH environment, which should
+not be set here. Instead of, it should be set via `tramp-remote-path'."
:group 'tramp
:type '(repeat string))
@@ -920,7 +952,7 @@ which should work well in many cases."
:type 'regexp)
(defcustom tramp-password-prompt-regexp
- "^.*\\([pP]assword\\|passphrase\\).*:\^@? *"
+ "^.*\\([pP]assword\\|[pP]assphrase\\).*:\^@? *"
"*Regexp matching password-like prompts.
The regexp should match at end of buffer.
@@ -931,14 +963,16 @@ The `sudo' program appears to insert a `^@' character into the prompt."
(defcustom tramp-wrong-passwd-regexp
(concat "^.*"
;; These strings should be on the last line
- (regexp-opt '("Permission denied."
+ (regexp-opt '("Permission denied"
"Login incorrect"
"Login Incorrect"
"Connection refused"
"Connection closed"
"Sorry, try again."
"Name or service not known"
- "Host key verification failed.") t)
+ "Host key verification failed."
+ "No supported authentication methods left to try!"
+ "Tramp connection closed") t)
".*"
"\\|"
"^.*\\("
@@ -1011,7 +1045,7 @@ be ignored safely."
In fact this expression is empty by intention, it will be used only to
check regularly the status of the associated process.
The answer will be provided by `tramp-action-process-alive',
-`tramp-multi-action-process-alive' and`tramp-action-out-of-band', which see."
+`tramp-action-out-of-band', which see."
:group 'tramp
:type 'regexp)
@@ -1019,18 +1053,12 @@ The answer will be provided by `tramp-action-process-alive',
"*Prefix to use for temporary files.
If this is a relative file name (such as \"tramp.\"), it is considered
relative to the directory name returned by the function
-`tramp-temporary-file-directory' (which see). It may also be an
+`tramp-compat-temporary-file-directory' (which see). It may also be an
absolute file name; don't forget to include a prefix for the filename
part, though."
:group 'tramp
:type 'string)
-(defcustom tramp-discard-garbage nil
- "*If non-nil, try to discard garbage sent by remote shell.
-Some shells send such garbage upon connection setup."
- :group 'tramp
- :type 'boolean)
-
(defcustom tramp-sh-extra-args '(("/bash\\'" . "-norc -noprofile"))
"*Alist specifying extra arguments to pass to the remote shell.
Entries are (REGEXP . ARGS) where REGEXP is a regular expression
@@ -1047,144 +1075,139 @@ shell from reading its init file."
'(alist :key-type string :value-type string)
'(repeat (cons string string))))
-(defcustom tramp-prefix-format
- (if tramp-unified-filenames "/" "/[")
- "*String matching the very beginning of tramp file names.
-Used in `tramp-make-tramp-file-name' and `tramp-make-tramp-multi-file-name'."
- :group 'tramp
- :type 'string)
+;; XEmacs is distributed with few Lisp packages. Further packages are
+;; installed using EFS. If we use a unified filename format, then
+;; Tramp is required in addition to EFS. (But why can't Tramp just
+;; disable EFS when Tramp is loaded? Then XEmacs can ship with EFS
+;; just like before.) Another reason for using a separate filename
+;; syntax on XEmacs is that EFS hooks into XEmacs in many places, but
+;; Tramp only knows how to deal with `file-name-handler-alist', not
+;; the other places.
-(defcustom tramp-prefix-regexp
- (concat "^" (regexp-quote tramp-prefix-format))
- "*Regexp matching the very beginning of tramp file names.
-Should always start with \"^\". Derived from `tramp-prefix-format'."
- :group 'tramp
- :type 'regexp)
+;; Currently, we have the choice between 'ftp, 'sep, and 'url.
+;;;###autoload
+(defcustom tramp-syntax
+ (if (featurep 'xemacs) 'sep 'ftp)
+ "Tramp filename syntax to be used.
-(defcustom tramp-method-regexp
- "[a-zA-Z_0-9-]+"
- "*Regexp matching methods identifiers."
- :group 'tramp
- :type 'regexp)
+It can have the following values:
-;; It is a little bit annoying that in XEmacs case this delimeter is different
-;; for single-hop and multi-hop cases.
-(defcustom tramp-postfix-single-method-format
- (if tramp-unified-filenames ":" "/")
- "*String matching delimeter between method and user or host names.
-Applicable for single-hop methods.
-Used in `tramp-make-tramp-file-name'."
+ 'ftp -- Ange-FTP respective EFS like syntax (GNU Emacs default)
+ 'sep -- Syntax as defined for XEmacs (not available yet for GNU Emacs)
+ 'url -- URL-like syntax."
:group 'tramp
- :type 'string)
+ :type (if (featurep 'xemacs)
+ '(choice (const :tag "EFS" ftp)
+ (const :tag "XEmacs" sep)
+ (const :tag "URL" url))
+ '(choice (const :tag "Ange-FTP" ftp)
+ (const :tag "URL" url))))
+
+(defconst tramp-prefix-format
+ (cond ((equal tramp-syntax 'ftp) "/")
+ ((equal tramp-syntax 'sep) "/[")
+ ((equal tramp-syntax 'url) "/")
+ (t (error "Wrong `tramp-syntax' defined")))
+ "*String matching the very beginning of Tramp file names.
+Used in `tramp-make-tramp-file-name'.")
+
+(defconst tramp-prefix-regexp
+ (concat "^" (regexp-quote tramp-prefix-format))
+ "*Regexp matching the very beginning of Tramp file names.
+Should always start with \"^\". Derived from `tramp-prefix-format'.")
-(defcustom tramp-postfix-single-method-regexp
- (regexp-quote tramp-postfix-single-method-format)
- "*Regexp matching delimeter between method and user or host names.
-Applicable for single-hop methods.
-Derived from `tramp-postfix-single-method-format'."
- :group 'tramp
- :type 'regexp)
+(defconst tramp-method-regexp
+ "[a-zA-Z_0-9-]+"
+ "*Regexp matching methods identifiers.")
-(defcustom tramp-postfix-multi-method-format
- ":"
+(defconst tramp-postfix-method-format
+ (cond ((equal tramp-syntax 'ftp) ":")
+ ((equal tramp-syntax 'sep) "/")
+ ((equal tramp-syntax 'url) "://")
+ (t (error "Wrong `tramp-syntax' defined")))
"*String matching delimeter between method and user or host names.
-Applicable for multi-hop methods.
-Used in `tramp-make-tramp-multi-file-name'."
- :group 'tramp
- :type 'string)
+Used in `tramp-make-tramp-file-name'.")
-(defcustom tramp-postfix-multi-method-regexp
- (regexp-quote tramp-postfix-multi-method-format)
+(defconst tramp-postfix-method-regexp
+ (regexp-quote tramp-postfix-method-format)
"*Regexp matching delimeter between method and user or host names.
-Applicable for multi-hop methods.
-Derived from `tramp-postfix-multi-method-format'."
- :group 'tramp
- :type 'regexp)
-
-(defcustom tramp-postfix-multi-hop-format
- (if tramp-unified-filenames ":" "/")
- "*String matching delimeter between host and next method.
-Applicable for multi-hop methods.
-Used in `tramp-make-tramp-multi-file-name'."
- :group 'tramp
- :type 'string)
+Derived from `tramp-postfix-method-format'.")
-(defcustom tramp-postfix-multi-hop-regexp
- (regexp-quote tramp-postfix-multi-hop-format)
- "*Regexp matching delimeter between host and next method.
-Applicable for multi-hop methods.
-Derived from `tramp-postfix-multi-hop-format'."
- :group 'tramp
- :type 'regexp)
+(defconst tramp-user-regexp
+ "[^:/ \t]+"
+ "*Regexp matching user names.")
-(defcustom tramp-user-regexp
- "[^:/ \t]*"
- "*Regexp matching user names."
- :group 'tramp
- :type 'regexp)
-
-(defcustom tramp-postfix-user-format
+(defconst tramp-postfix-user-format
"@"
"*String matching delimeter between user and host names.
-Used in `tramp-make-tramp-file-name' and `tramp-make-tramp-multi-file-name'."
- :group 'tramp
- :type 'string)
+Used in `tramp-make-tramp-file-name'.")
-(defcustom tramp-postfix-user-regexp
+(defconst tramp-postfix-user-regexp
(regexp-quote tramp-postfix-user-format)
"*Regexp matching delimeter between user and host names.
-Derived from `tramp-postfix-user-format'."
- :group 'tramp
- :type 'regexp)
-
-(defcustom tramp-host-regexp
- "[a-zA-Z0-9_.-]*"
- "*Regexp matching host names."
- :group 'tramp
- :type 'regexp)
-
-(defcustom tramp-host-with-port-regexp
- "[a-zA-Z0-9_.#-]*"
- "*Regexp matching host names."
- :group 'tramp
- :type 'regexp)
-
-(defcustom tramp-postfix-host-format
- (if tramp-unified-filenames ":" "]")
+Derived from `tramp-postfix-user-format'.")
+
+(defconst tramp-host-regexp
+ "[a-zA-Z0-9_.-]+"
+ "*Regexp matching host names.")
+
+(defconst tramp-prefix-port-format
+ (cond ((equal tramp-syntax 'ftp) "#")
+ ((equal tramp-syntax 'sep) "#")
+ ((equal tramp-syntax 'url) ":")
+ (t (error "Wrong `tramp-syntax' defined")))
+ "*String matching delimeter between host names and port numbers.")
+
+(defconst tramp-prefix-port-regexp
+ (regexp-quote tramp-prefix-port-format)
+ "*Regexp matching delimeter between host names and port numbers.
+Derived from `tramp-prefix-port-format'.")
+
+(defconst tramp-port-regexp
+ "[0-9]+"
+ "*Regexp matching port numbers.")
+
+(defconst tramp-host-with-port-regexp
+ (concat "\\(" tramp-host-regexp "\\)"
+ tramp-prefix-port-regexp
+ "\\(" tramp-port-regexp "\\)")
+ "*Regexp matching host names with port numbers.")
+
+(defconst tramp-postfix-host-format
+ (cond ((equal tramp-syntax 'ftp) ":")
+ ((equal tramp-syntax 'sep) "]")
+ ((equal tramp-syntax 'url) "")
+ (t (error "Wrong `tramp-syntax' defined")))
"*String matching delimeter between host names and localnames.
-Used in `tramp-make-tramp-file-name' and `tramp-make-tramp-multi-file-name'."
- :group 'tramp
- :type 'string)
+Used in `tramp-make-tramp-file-name'.")
-(defcustom tramp-postfix-host-regexp
+(defconst tramp-postfix-host-regexp
(regexp-quote tramp-postfix-host-format)
"*Regexp matching delimeter between host names and localnames.
-Derived from `tramp-postfix-host-format'."
- :group 'tramp
- :type 'regexp)
+Derived from `tramp-postfix-host-format'.")
-(defcustom tramp-localname-regexp
+(defconst tramp-localname-regexp
".*$"
- "*Regexp matching localnames."
- :group 'tramp
- :type 'regexp)
+ "*Regexp matching localnames.")
;; File name format.
-(defcustom tramp-file-name-structure
+(defconst tramp-file-name-structure
(list
(concat
tramp-prefix-regexp
- "\\(" "\\(" tramp-method-regexp "\\)" tramp-postfix-single-method-regexp "\\)?"
- "\\(" "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp "\\)?"
- "\\(" tramp-host-with-port-regexp "\\)" tramp-postfix-host-regexp
- "\\(" tramp-localname-regexp "\\)")
- 2 4 5 6)
+ "\\(" "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp "\\)?"
+ "\\(" "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp "\\)?"
+ "\\(" tramp-host-regexp
+ "\\(" tramp-prefix-port-regexp tramp-port-regexp "\\)?" "\\)?"
+ tramp-postfix-host-regexp
+ "\\(" tramp-localname-regexp "\\)")
+ 2 4 5 7)
"*List of five elements (REGEXP METHOD USER HOST FILE), detailing \
-the tramp file name structure.
+the Tramp file name structure.
-The first element REGEXP is a regular expression matching a tramp file
+The first element REGEXP is a regular expression matching a Tramp file
name. The regex should contain parentheses around the method name,
the user name, the host name, and the file name parts.
@@ -1195,192 +1218,97 @@ but for the host name. The fifth element FILE is for the file name.
These numbers are passed directly to `match-string', which see. That
means the opening parentheses are counted to identify the pair.
-See also `tramp-file-name-regexp'."
- :group 'tramp
- :type '(list (regexp :tag "File name regexp")
- (integer :tag "Paren pair for method name")
- (integer :tag "Paren pair for user name ")
- (integer :tag "Paren pair for host name ")
- (integer :tag "Paren pair for file name ")))
+See also `tramp-file-name-regexp'.")
;;;###autoload
(defconst tramp-file-name-regexp-unified
"\\`/[^/:]+:"
"Value for `tramp-file-name-regexp' for unified remoting.
Emacs (not XEmacs) uses a unified filename syntax for Ange-FTP and
-Tramp. See `tramp-file-name-structure-unified' for more explanations.")
+Tramp. See `tramp-file-name-structure' for more explanations.")
;;;###autoload
(defconst tramp-file-name-regexp-separate
"\\`/\\[.*\\]"
"Value for `tramp-file-name-regexp' for separate remoting.
XEmacs uses a separate filename syntax for Tramp and EFS.
-See `tramp-file-name-structure-separate' for more explanations.")
+See `tramp-file-name-structure' for more explanations.")
;;;###autoload
-(defcustom tramp-file-name-regexp
- (if tramp-unified-filenames
- tramp-file-name-regexp-unified
- tramp-file-name-regexp-separate)
- "*Regular expression matching file names handled by tramp.
-This regexp should match tramp file names but no other file names.
+(defconst tramp-file-name-regexp-url
+ "\\`/[^/:]+://"
+ "Value for `tramp-file-name-regexp' for URL-like remoting.
+See `tramp-file-name-structure' for more explanations.")
+
+;;;###autoload
+(defconst tramp-file-name-regexp
+ (cond ((equal tramp-syntax 'ftp) tramp-file-name-regexp-unified)
+ ((equal tramp-syntax 'sep) tramp-file-name-regexp-separate)
+ ((equal tramp-syntax 'url) tramp-file-name-regexp-url)
+ (t (error "Wrong `tramp-syntax' defined")))
+ "*Regular expression matching file names handled by Tramp.
+This regexp should match Tramp file names but no other file names.
\(When tramp.el is loaded, this regular expression is prepended to
`file-name-handler-alist', and that is searched sequentially. Thus,
-if the tramp entry appears rather early in the `file-name-handler-alist'
-and is a bit too general, then some files might be considered tramp
-files which are not really tramp files.
+if the Tramp entry appears rather early in the `file-name-handler-alist'
+and is a bit too general, then some files might be considered Tramp
+files which are not really Tramp files.
Please note that the entry in `file-name-handler-alist' is made when
this file (tramp.el) is loaded. This means that this variable must be set
before loading tramp.el. Alternatively, `file-name-handler-alist' can be
updated after changing this variable.
-Also see `tramp-file-name-structure'."
- :group 'tramp
- :type 'regexp)
+Also see `tramp-file-name-structure'.")
;;;###autoload
(defconst tramp-completion-file-name-regexp-unified
- "^/$\\|^/[^/:][^/]*$"
+ (if (memq system-type '(cygwin windows-nt))
+ "^\\([a-zA-Z]:\\)?/$\\|^\\([a-zA-Z]:\\)?/[^/:][^/]*$"
+ "^/$\\|^/[^/:][^/]*$")
"Value for `tramp-completion-file-name-regexp' for unified remoting.
Emacs (not XEmacs) uses a unified filename syntax for Ange-FTP and
-Tramp. See `tramp-file-name-structure-unified' for more explanations.")
+Tramp. See `tramp-file-name-structure' for more explanations.")
;;;###autoload
(defconst tramp-completion-file-name-regexp-separate
- "^/\\([[][^]]*\\)?$"
+ (if (memq system-type '(cygwin windows-nt))
+ "^\\([a-zA-Z]:\\)?/\\([[][^]]*\\)?$"
+ "^/\\([[][^]]*\\)?$")
"Value for `tramp-completion-file-name-regexp' for separate remoting.
XEmacs uses a separate filename syntax for Tramp and EFS.
-See `tramp-file-name-structure-separate' for more explanations.")
+See `tramp-file-name-structure' for more explanations.")
+
+;;;###autoload
+(defconst tramp-completion-file-name-regexp-url
+ (if (memq system-type '(cygwin windows-nt))
+ "^\\([a-zA-Z]:\\)?/$\\|^\\([a-zA-Z]:\\)?/[^/:]+\\(:\\(/\\(/[^/]*\\)?\\)?\\)?$"
+ "^/$\\|^/[^/:]+\\(:\\(/\\(/[^/]*\\)?\\)?\\)?$")
+ "Value for `tramp-completion-file-name-regexp' for URL-like remoting.
+See `tramp-file-name-structure' for more explanations.")
;;;###autoload
-(defcustom tramp-completion-file-name-regexp
- (if tramp-unified-filenames
- tramp-completion-file-name-regexp-unified
- tramp-completion-file-name-regexp-separate)
- "*Regular expression matching file names handled by tramp completion.
-This regexp should match partial tramp file names only.
+(defconst tramp-completion-file-name-regexp
+ (cond ((equal tramp-syntax 'ftp) tramp-completion-file-name-regexp-unified)
+ ((equal tramp-syntax 'sep) tramp-completion-file-name-regexp-separate)
+ ((equal tramp-syntax 'url) tramp-completion-file-name-regexp-url)
+ (t (error "Wrong `tramp-syntax' defined")))
+ "*Regular expression matching file names handled by Tramp completion.
+This regexp should match partial Tramp file names only.
Please note that the entry in `file-name-handler-alist' is made when
this file (tramp.el) is loaded. This means that this variable must be set
before loading tramp.el. Alternatively, `file-name-handler-alist' can be
updated after changing this variable.
-Also see `tramp-file-name-structure'."
- :group 'tramp
- :type 'regexp)
-
-(defcustom tramp-multi-file-name-structure
- (list
- (concat
- tramp-prefix-regexp
- "\\(" "\\(" tramp-method-regexp "\\)" "\\)?"
- "\\(" "\\(" tramp-postfix-multi-hop-regexp "%s" "\\)+" "\\)?"
- tramp-postfix-host-regexp "\\(" tramp-localname-regexp "\\)")
- 2 3 -1)
- "*Describes the file name structure of `multi' files.
-Multi files allow you to contact a remote host in several hops.
-This is a list of four elements (REGEXP METHOD HOP LOCALNAME).
-
-The first element, REGEXP, gives a regular expression to match against
-the file name. In this regular expression, `%s' is replaced with the
-value of `tramp-multi-file-name-hop-structure'. (Note: in order to
-allow multiple hops, you normally want to use something like
-\"\\\\(\\\\(%s\\\\)+\\\\)\" in the regular expression. The outer pair
-of parentheses is used for the HOP element, see below.)
-
-All remaining elements are numbers. METHOD gives the number of the
-paren pair which matches the method name. HOP gives the number of the
-paren pair which matches the hop sequence. LOCALNAME gives the number of
-the paren pair which matches the localname (pathname) on the remote host.
-
-LOCALNAME can also be negative, which means to count from the end. Ie, a
-value of -1 means the last paren pair.
-
-I think it would be good if the regexp matches the whole of the
-string, but I haven't actually tried what happens if it doesn't..."
- :group 'tramp
- :type '(list (regexp :tag "File name regexp")
- (integer :tag "Paren pair for method name")
- (integer :tag "Paren pair for hops")
- (integer :tag "Paren pair to match localname")))
-
-(defcustom tramp-multi-file-name-hop-structure
- (list
- (concat
- "\\(" tramp-method-regexp "\\)" tramp-postfix-multi-method-regexp
- "\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp
- "\\(" tramp-host-with-port-regexp "\\)")
- 1 2 3)
- "*Describes the structure of a hop in multi files.
-This is a list of four elements (REGEXP METHOD USER HOST). First
-element REGEXP is used to match against the hop. Pair number METHOD
-matches the method of one hop, pair number USER matches the user of
-one hop, pair number HOST matches the host of one hop.
-
-This regular expression should match exactly all of one hop."
- :group 'tramp
- :type '(list (regexp :tag "Hop regexp")
- (integer :tag "Paren pair for method name")
- (integer :tag "Paren pair for user name")
- (integer :tag "Paren pair for host name")))
-
-(defcustom tramp-make-multi-tramp-file-format
- (list
- (concat tramp-prefix-format "%m")
- (concat tramp-postfix-multi-hop-format
- "%m" tramp-postfix-multi-method-format
- "%u" tramp-postfix-user-format
- "%h")
- (concat tramp-postfix-host-format "%p"))
- "*Describes how to construct a `multi' file name.
-This is a list of three elements PREFIX, HOP and LOCALNAME.
-
-The first element PREFIX says how to construct the prefix, the second
-element HOP specifies what each hop looks like, and the final element
-LOCALNAME says how to construct the localname (pathname).
-
-In PREFIX, `%%' means `%' and `%m' means the method name.
+Also see `tramp-file-name-structure'.")
-In HOP, `%%' means `%' and `%m', `%u', `%h' mean the hop method, hop
-user and hop host, respectively.
-
-In LOCALNAME, `%%' means `%' and `%p' means the localname.
-
-The resulting file name always contains one copy of PREFIX and one
-copy of LOCALNAME, but there is one copy of HOP for each hop in the file
-name.
-
-Note: the current implementation requires the prefix to contain the
-method name, followed by all the hops, and the localname must come
-last."
- :group 'tramp
- :type '(list string string string))
-
-(defcustom tramp-terminal-type "dumb"
- "*Value of TERM environment variable for logging in to remote host.
-Because Tramp wants to parse the output of the remote shell, it is easily
-confused by ANSI color escape sequences and suchlike. Often, shell init
-files conditionalize this setup based on the TERM environment variable."
- :group 'tramp
- :type 'string)
-
-(defcustom tramp-completion-without-shell-p nil
- "*If nil, use shell wildcards for completion, else rely on Lisp only.
-Using shell wildcards for completions has the advantage that it can be
-fast even in large directories, but completion is always
-case-sensitive. Relying on Lisp only means that case-insensitive
-completion is possible (subject to the variable `completion-ignore-case'),
-but it might be slow on large directories."
- :group 'tramp
- :type 'boolean)
-
-(defcustom tramp-actions-before-shell
- '((tramp-password-prompt-regexp tramp-action-password)
- (tramp-login-prompt-regexp tramp-action-login)
+(defconst tramp-actions-before-shell
+ '((tramp-login-prompt-regexp tramp-action-login)
+ (tramp-password-prompt-regexp tramp-action-password)
+ (tramp-wrong-passwd-regexp tramp-action-permission-denied)
(shell-prompt-pattern tramp-action-succeed)
(tramp-shell-prompt-pattern tramp-action-succeed)
- (tramp-wrong-passwd-regexp tramp-action-permission-denied)
(tramp-yesno-prompt-regexp tramp-action-yesno)
(tramp-yn-prompt-regexp tramp-action-yn)
(tramp-terminal-prompt-regexp tramp-action-terminal)
@@ -1395,51 +1323,19 @@ regexp must match at the end of the buffer, \"\\'\" is implicitly
appended to it.
The ACTION should also be a symbol, but a function. When the
-corresponding PATTERN matches, the ACTION function is called."
- :group 'tramp
- :type '(repeat (list variable function)))
+corresponding PATTERN matches, the ACTION function is called.")
-(defcustom tramp-actions-copy-out-of-band
+(defconst tramp-actions-copy-out-of-band
'((tramp-password-prompt-regexp tramp-action-password)
(tramp-wrong-passwd-regexp tramp-action-permission-denied)
- (tramp-copy-failed-regexp tramp-action-copy-failed)
+ (tramp-copy-failed-regexp tramp-action-permission-denied)
(tramp-process-alive-regexp tramp-action-out-of-band))
"List of pattern/action pairs.
This list is used for copying/renaming with out-of-band methods.
-See `tramp-actions-before-shell' for more info."
- :group 'tramp
- :type '(repeat (list variable function)))
-
-(defcustom tramp-multi-actions
- '((tramp-password-prompt-regexp tramp-multi-action-password)
- (tramp-login-prompt-regexp tramp-multi-action-login)
- (shell-prompt-pattern tramp-multi-action-succeed)
- (tramp-shell-prompt-pattern tramp-multi-action-succeed)
- (tramp-wrong-passwd-regexp tramp-multi-action-permission-denied)
- (tramp-process-alive-regexp tramp-multi-action-process-alive))
- "List of pattern/action pairs.
-This list is used for each hop in multi-hop connections.
-See `tramp-actions-before-shell' for more info."
- :group 'tramp
- :type '(repeat (list variable function)))
-
-(defcustom tramp-initial-commands
- '("unset HISTORY"
- "unset correct"
- "unset autocorrect")
- "List of commands to send to the first remote shell that we see.
-These commands will be sent to any shell, and thus they should be
-designed to work in such circumstances. Also, restrict the commands
-to the bare necessity for getting the remote shell into a state
-where it is possible to execute the Bourne-ish shell.
-
-At the moment, the command to execute the Bourne-ish shell uses strange
-quoting which `tcsh' tries to correct, so we send the command \"unset
-autocorrect\" to the remote host."
- :group 'tramp
- :type '(repeat string))
-;; Chunked sending kluge. We set this to 500 for black-listed constellations
+See `tramp-actions-before-shell' for more info.")
+
+;; Chunked sending kludge. We set this to 500 for black-listed constellations
;; known to have a bug in `process-send-string'; some ssh connections appear
;; to drop bytes when data is sent too quickly. There is also a connection
;; buffer local variable, which is computed depending on remote host properties
@@ -1495,16 +1391,16 @@ You will see the number of bytes sent successfully to the remote host.
If that number exceeds 1000, you can stop the execution by hitting
C-g, because your Emacs is likely clean.
-If your Emacs is buggy, the code stops and gives you an indication
-about the value `tramp-chunksize' should be set. Maybe you could just
-experiment a bit, e.g. changing the values of `init' and `step'
-in the third line of the code.
-
When it is necessary to set `tramp-chunksize', you might consider to
use an out-of-the-band method (like \"scp\") instead of an internal one
\(like \"ssh\"), because setting `tramp-chunksize' to non-nil decreases
performance.
+If your Emacs is buggy, the code stops and gives you an indication
+about the value `tramp-chunksize' should be set. Maybe you could just
+experiment a bit, e.g. changing the values of `init' and `step'
+in the third line of the code.
+
Please raise a bug report via \"M-x tramp-bug\" if your system needs
this variable to be set as well."
:group 'tramp
@@ -1521,146 +1417,39 @@ opening a connection to a remote host."
:group 'tramp
:type '(choice (const nil) (const t) (const pty)))
-;;; Internal Variables:
+(defcustom tramp-completion-reread-directory-timeout 10
+ "Defines seconds since last remote command before rereading a directory.
+A remote directory might have changed its contents. In order to
+make it visible during file name completion in the minibuffer,
+Tramp flushes its cache and rereads the directory contents when
+more than `tramp-completion-reread-directory-timeout' seconds
+have been gone since last remote command execution. A value of 0
+would require an immediate reread during filename completion, nil
+means to use always cached values for the directory contents."
+ :group 'tramp
+ :type '(choice (const nil) integer))
-(defvar tramp-buffer-file-attributes nil
- "Holds the `ls -ild' output for the current buffer.
-This variable is local to each buffer. It is not used if the remote
-machine groks Perl. If it is used, it's used as an emulation for
-the visited file modtime.")
-(make-variable-buffer-local 'tramp-buffer-file-attributes)
-
-(defvar tramp-md5-function
- (cond ((and (require 'md5) (fboundp 'md5)) 'md5)
- ((fboundp 'md5-encode)
- (lambda (x) (base64-encode-string
- (funcall (symbol-function 'md5-encode) x))))
- (t (error "Couldn't find an `md5' function")))
- "Function to call for running the MD5 algorithm.")
+;;; Internal Variables:
(defvar tramp-end-of-output
- (concat "///"
- (funcall tramp-md5-function
- (concat
- (prin1-to-string process-environment)
- (current-time-string)
-;; (prin1-to-string
-;; (if (fboundp 'directory-files-and-attributes)
-;; (funcall 'directory-files-and-attributes
-;; (or (getenv "HOME")
-;; (tramp-temporary-file-directory)))
-;; (mapcar
-;; (lambda (x)
-;; (cons x (file-attributes x)))
-;; (directory-files (or (getenv "HOME")
-;; (tramp-temporary-file-directory))
-;; t))))
- )))
+ (concat
+ "///" (md5 (concat
+ (prin1-to-string process-environment) (current-time-string))))
"String used to recognize end of output.")
-(defvar tramp-connection-function nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-remote-sh nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-login-program nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-login-args nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-copy-program nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-copy-args nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-copy-keep-date-arg nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-encoding-command nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-decoding-command nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-encoding-function nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-decoding-function nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-(defvar tramp-password-end-of-line nil
- "This internal variable holds a parameter for `tramp-methods'.
-In the connection buffer, this variable has the value of the like-named
-method parameter, as specified in `tramp-methods' (which see).")
-
-;; CCC `local in each buffer'?
-(defvar tramp-ls-command nil
- "This command is used to get a long listing with numeric user and group ids.
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
-
-(defvar tramp-current-multi-method nil
- "Name of `multi' connection method for this *tramp* buffer, or nil if not multi.
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
-
(defvar tramp-current-method nil
- "Connection method for this *tramp* buffer.
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
+ "Connection method for this *tramp* buffer.")
(defvar tramp-current-user nil
- "Remote login name for this *tramp* buffer.
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
+ "Remote login name for this *tramp* buffer.")
(defvar tramp-current-host nil
- "Remote host for this *tramp* buffer.
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
-
-(defvar tramp-test-groks-nt nil
- "Whether the `test' command groks the `-nt' switch.
-\(`test A -nt B' tests if file A is newer than file B.)
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
-
-(defvar tramp-file-exists-command nil
- "Command to use for checking if a file exists.
-This variable is automatically made buffer-local to each rsh process buffer
-upon opening the connection.")
-
-(defconst tramp-uudecode "\
-tramp_uudecode () {
-\(echo begin 600 /tmp/tramp.$$; tail +2) | uudecode
+ "Remote host for this *tramp* buffer.")
+
+(defconst tramp-uudecode
+ "(echo begin 600 /tmp/tramp.$$; tail +2) | uudecode
cat /tmp/tramp.$$
-rm -f /tmp/tramp.$$
-}"
+rm -f /tmp/tramp.$$"
"Shell function to implement `uudecode' to standard output.
Many systems support `uudecode -o /dev/stdout' or `uudecode -o -'
for this or `uudecode -p', but some systems don't, and for them
@@ -1672,7 +1461,8 @@ we have this shell function.")
;; end.
;; The device number is returned as "-1", because there will be a virtual
;; device number set in `tramp-handle-file-attributes'
-(defconst tramp-perl-file-attributes "\
+(defconst tramp-perl-file-attributes
+ "%s -e '
@stat = lstat($ARGV[0]);
if (($stat[2] & 0170000) == 0120000)
{
@@ -1690,7 +1480,7 @@ else
$uid = ($ARGV[1] eq \"integer\") ? $stat[4] : \"\\\"\" . getpwuid($stat[4]) . \"\\\"\";
$gid = ($ARGV[1] eq \"integer\") ? $stat[5] : \"\\\"\" . getgrgid($stat[5]) . \"\\\"\";
printf(
- \"(%s %u %s %s (%u %u) (%u %u) (%u %u) %u %u t (%u . %u) -1)\\n\",
+ \"(%%s %%u %%s %%s (%%u %%u) (%%u %%u) (%%u %%u) %%u.0 %%u t (%%u . %%u) -1)\\n\",
$type,
$stat[3],
$uid,
@@ -1705,11 +1495,14 @@ printf(
$stat[2],
$stat[1] >> 16 & 0xffff,
$stat[1] & 0xffff
-);"
+);' \"$1\" \"$2\" \"$3\" 2>/dev/null"
"Perl script to produce output suitable for use with `file-attributes'
-on the remote file system.")
+on the remote file system.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
-(defconst tramp-perl-directory-files-and-attributes "\
+(defconst tramp-perl-directory-files-and-attributes
+ "%s -e '
chdir($ARGV[0]) or printf(\"\\\"Cannot change to $ARGV[0]: $''!''\\\"\\n\"), exit();
opendir(DIR,\".\") or printf(\"\\\"Cannot open directory $ARGV[0]: $''!''\\\"\\n\"), exit();
@list = readdir(DIR);
@@ -1736,7 +1529,7 @@ for($i = 0; $i < $n; $i++)
$uid = ($ARGV[1] eq \"integer\") ? $stat[4] : \"\\\"\" . getpwuid($stat[4]) . \"\\\"\";
$gid = ($ARGV[1] eq \"integer\") ? $stat[5] : \"\\\"\" . getgrgid($stat[5]) . \"\\\"\";
printf(
- \"(\\\"%s\\\" %s %u %s %s (%u %u) (%u %u) (%u %u) %u %u t (%u . %u) (%u %u))\\n\",
+ \"(\\\"%%s\\\" %%s %%u %%s %%s (%%u %%u) (%%u %%u) (%%u %%u) %%u.0 %%u t (%%u . %%u) (%%u %%u))\\n\",
$filename,
$type,
$stat[3],
@@ -1755,9 +1548,11 @@ for($i = 0; $i < $n; $i++)
$stat[0] >> 16 & 0xffff,
$stat[0] & 0xffff);
}
-printf(\")\\n\");"
+printf(\")\\n\");' \"$1\" \"$2\" \"$3\" 2>/dev/null"
"Perl script implementing `directory-files-attributes' as Lisp `read'able
-output.")
+output.
+Escape sequence %s is replaced with name of Perl binary.
+This string is passed to `format', so percent characters need to be doubled.")
;; ;; These two use uu encoding.
;; (defvar tramp-perl-encode "%s -e'\
@@ -1780,25 +1575,25 @@ output.")
;; Escape sequence %s is replaced with name of Perl binary.")
;; These two use base64 encoding.
-(defvar tramp-perl-encode-with-module
- "perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)'"
+(defconst tramp-perl-encode-with-module
+ "%s -MMIME::Base64 -0777 -ne 'print encode_base64($_)' 2>/dev/null"
"Perl program to use for encoding a file.
Escape sequence %s is replaced with name of Perl binary.
This string is passed to `format', so percent characters need to be doubled.
This implementation requires the MIME::Base64 Perl module to be installed
on the remote host.")
-(defvar tramp-perl-decode-with-module
- "perl -MMIME::Base64 -0777 -ne 'print decode_base64($_)'"
+(defconst tramp-perl-decode-with-module
+ "%s -MMIME::Base64 -0777 -ne 'print decode_base64($_)' 2>/dev/null"
"Perl program to use for decoding a file.
Escape sequence %s is replaced with name of Perl binary.
This string is passed to `format', so percent characters need to be doubled.
This implementation requires the MIME::Base64 Perl module to be installed
on the remote host.")
-(defvar tramp-perl-encode
+(defconst tramp-perl-encode
"%s -e '
-# This script contributed by Juanma Barranquero <lektu@terra.es>.
+# This script is contributed by Juanma Barranquero <lektu@terra.es>.
# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
# Free Software Foundation, Inc.
use strict;
@@ -1833,15 +1628,14 @@ while (my $data = <STDIN>) {
(substr(unpack(q(B*), $data) . q(00000), 0, 432) =~ /....../g)),
$pad,
qq(\\n);
-}
-'"
+}' 2>/dev/null"
"Perl program to use for encoding a file.
Escape sequence %s is replaced with name of Perl binary.
This string is passed to `format', so percent characters need to be doubled.")
-(defvar tramp-perl-decode
+(defconst tramp-perl-decode
"%s -e '
-# This script contributed by Juanma Barranquero <lektu@terra.es>.
+# This script is contributed by Juanma Barranquero <lektu@terra.es>.
# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
# Free Software Foundation, Inc.
use strict;
@@ -1879,68 +1673,35 @@ while (my $data = <STDIN>) {
((join q(), map {$trans{$_} || q()} split //, $chunk) =~ /......../g);
last if $finished;
-}
-'"
+}' 2>/dev/null"
"Perl program to use for decoding a file.
Escape sequence %s is replaced with name of Perl binary.
This string is passed to `format', so percent characters need to be doubled.")
-(defconst tramp-file-mode-type-map '((0 . "-") ; Normal file (SVID-v2 and XPG2)
- (1 . "p") ; fifo
- (2 . "c") ; character device
- (3 . "m") ; multiplexed character device (v7)
- (4 . "d") ; directory
- (5 . "?") ; Named special file (XENIX)
- (6 . "b") ; block device
- (7 . "?") ; multiplexed block device (v7)
- (8 . "-") ; regular file
- (9 . "n") ; network special file (HP-UX)
- (10 . "l") ; symlink
- (11 . "?") ; ACL shadow inode (Solaris, not userspace)
- (12 . "s") ; socket
- (13 . "D") ; door special (Solaris)
- (14 . "w")) ; whiteout (BSD)
+(defconst tramp-file-mode-type-map
+ '((0 . "-") ; Normal file (SVID-v2 and XPG2)
+ (1 . "p") ; fifo
+ (2 . "c") ; character device
+ (3 . "m") ; multiplexed character device (v7)
+ (4 . "d") ; directory
+ (5 . "?") ; Named special file (XENIX)
+ (6 . "b") ; block device
+ (7 . "?") ; multiplexed block device (v7)
+ (8 . "-") ; regular file
+ (9 . "n") ; network special file (HP-UX)
+ (10 . "l") ; symlink
+ (11 . "?") ; ACL shadow inode (Solaris, not userspace)
+ (12 . "s") ; socket
+ (13 . "D") ; door special (Solaris)
+ (14 . "w")) ; whiteout (BSD)
"A list of file types returned from the `stat' system call.
This is used to map a mode number to a permission string.")
-(defvar tramp-dos-coding-system
- (if (and (fboundp 'coding-system-p)
- (funcall 'coding-system-p '(dos)))
- 'dos
- 'undecided-dos)
- "Some Emacsen know the `dos' coding system, others need `undecided-dos'.")
-
-(defvar tramp-last-cmd nil
- "Internal Tramp variable recording the last command sent.
-This variable is buffer-local in every buffer.")
-(make-variable-buffer-local 'tramp-last-cmd)
-
-(defvar tramp-process-echoes nil
- "Whether to process echoes from the remote shell.")
-
-(defvar tramp-last-cmd-time nil
- "Internal Tramp variable recording the time when the last cmd was sent.
-This variable is buffer-local in every buffer.")
-(make-variable-buffer-local 'tramp-last-cmd-time)
-
-;; This variable does not have the right value in XEmacs. What should
-;; I use instead of find-operation-coding-system in XEmacs?
-(defvar tramp-feature-write-region-fix
- (when (fboundp 'find-operation-coding-system)
- (let ((file-coding-system-alist '(("test" emacs-mule))))
- (funcall (symbol-function 'find-operation-coding-system)
- 'write-region 0 0 "" nil "test")))
- "Internal variable to say if `write-region' chooses the right coding.
-Older versions of Emacs chose the coding system for `write-region' based
-on the FILENAME argument, even if VISIT was a string.")
-
;; New handlers should be added here. The following operations can be
;; handled using the normal primitives: file-name-as-directory,
-;; file-name-directory, file-name-nondirectory,
;; file-name-sans-versions, get-file-buffer.
(defconst tramp-file-name-handler-alist
- '(
- (load . tramp-handle-load)
+ '((load . tramp-handle-load)
(make-symbolic-link . tramp-handle-make-symbolic-link)
(file-name-directory . tramp-handle-file-name-directory)
(file-name-nondirectory . tramp-handle-file-name-nondirectory)
@@ -1948,7 +1709,6 @@ on the FILENAME argument, even if VISIT was a string.")
(file-exists-p . tramp-handle-file-exists-p)
(file-directory-p . tramp-handle-file-directory-p)
(file-executable-p . tramp-handle-file-executable-p)
- (file-accessible-directory-p . tramp-handle-file-accessible-directory-p)
(file-readable-p . tramp-handle-file-readable-p)
(file-regular-p . tramp-handle-file-regular-p)
(file-symlink-p . tramp-handle-file-symlink-p)
@@ -1965,23 +1725,29 @@ on the FILENAME argument, even if VISIT was a string.")
(copy-file . tramp-handle-copy-file)
(rename-file . tramp-handle-rename-file)
(set-file-modes . tramp-handle-set-file-modes)
+ (set-file-times . tramp-handle-set-file-times)
(make-directory . tramp-handle-make-directory)
(delete-directory . tramp-handle-delete-directory)
(delete-file . tramp-handle-delete-file)
(directory-file-name . tramp-handle-directory-file-name)
- (shell-command . tramp-handle-shell-command)
+ ;; `executable-find' is not official yet.
+ (executable-find . tramp-handle-executable-find)
+ (start-file-process . tramp-handle-start-file-process)
(process-file . tramp-handle-process-file)
+ (shell-command . tramp-handle-shell-command)
(insert-directory . tramp-handle-insert-directory)
(expand-file-name . tramp-handle-expand-file-name)
+ (substitute-in-file-name . tramp-handle-substitute-in-file-name)
(file-local-copy . tramp-handle-file-local-copy)
(file-remote-p . tramp-handle-file-remote-p)
(insert-file-contents . tramp-handle-insert-file-contents)
+ (insert-file-contents-literally
+ . tramp-handle-insert-file-contents-literally)
(write-region . tramp-handle-write-region)
(find-backup-file-name . tramp-handle-find-backup-file-name)
(make-auto-save-file-name . tramp-handle-make-auto-save-file-name)
(unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory)
(dired-compress-file . tramp-handle-dired-compress-file)
- (dired-call-process . tramp-handle-dired-call-process)
(dired-recursive-delete-directory
. tramp-handle-dired-recursive-delete-directory)
(set-visited-file-modtime . tramp-handle-set-visited-file-modtime)
@@ -1989,7 +1755,7 @@ on the FILENAME argument, even if VISIT was a string.")
"Alist of handler functions.
Operations not mentioned here will be handled by the normal Emacs functions.")
-;; Handlers for partial tramp file names. For Emacs just
+;; Handlers for partial Tramp file names. For Emacs just
;; `file-name-all-completions' is needed.
;;;###autoload
(defconst tramp-completion-file-name-handler-alist
@@ -2011,46 +1777,115 @@ calling HANDLER.")
;;; Internal functions which must come first.
-(defsubst tramp-message (level fmt-string &rest args)
+(defsubst tramp-debug-message (vec fmt-string &rest args)
+ "Append message to debug buffer.
+Message is formatted with FMT-STRING as control string and the remaining
+ARGS to actually emit the message (if applicable)."
+ (when (get-buffer (tramp-buffer-name vec))
+ (with-current-buffer (tramp-get-debug-buffer vec)
+ (goto-char (point-max))
+ (unless (bolp)
+ (insert "\n"))
+ ;; Timestamp
+ (insert (format-time-string "%T "))
+ ;; Calling function
+ (let ((btn 1) btf fn)
+ (while (not fn)
+ (setq btf (nth 1 (backtrace-frame btn)))
+ (if (not btf)
+ (setq fn "")
+ (when (symbolp btf)
+ (setq fn (symbol-name btf))
+ (unless (and (string-match "^tramp" fn)
+ (not (string-match
+ "^tramp\\(-debug\\)?\\(-message\\|-error\\)$"
+ fn)))
+ (setq fn nil)))
+ (setq btn (1+ btn))))
+ ;; The following code inserts filename and line number.
+ ;; Should be deactivated by default, because it is time
+ ;; consuming.
+; (let ((ffn (find-function-noselect (intern fn))))
+; (insert
+; (format
+; "%s:%d: "
+; (file-name-nondirectory (buffer-file-name (car ffn)))
+; (with-current-buffer (car ffn)
+; (1+ (count-lines (point-min) (cdr ffn)))))))
+ (insert (format "%s " fn)))
+ ;; The message
+ (insert (apply 'format fmt-string args)))))
+
+(defsubst tramp-message (vec-or-proc level fmt-string &rest args)
"Emit a message depending on verbosity level.
-First arg LEVEL says to be quiet if `tramp-verbose' is less than LEVEL. The
-message is emitted only if `tramp-verbose' is greater than or equal to LEVEL.
-Calls function `message' with FMT-STRING as control string and the remaining
-ARGS to actually emit the message (if applicable).
-
-This function expects to be called from the tramp buffer only!"
- (when (<= level tramp-verbose)
- (apply #'message (concat "tramp: " fmt-string) args)
- (when tramp-debug-buffer
- (save-excursion
- (set-buffer
- (tramp-get-debug-buffer
- tramp-current-multi-method tramp-current-method
- tramp-current-user tramp-current-host))
- (goto-char (point-max))
- (unless (bolp)
- (insert "\n"))
- (tramp-insert-with-face
- 'italic
- (concat "# " (apply #'format fmt-string args) "\n"))))))
-
-(defun tramp-message-for-buffer
- (multi-method method user host level fmt-string &rest args)
- "Like `tramp-message' but temporarily switches to the tramp buffer.
-First three args METHOD, USER, and HOST identify the tramp buffer to use,
-remaining args passed to `tramp-message'."
- (save-excursion
- (set-buffer (tramp-get-buffer multi-method method user host))
- (apply 'tramp-message level fmt-string args)))
+VEC-OR-PROC identifies the Tramp buffer to use. It can be either a
+vector or a process. LEVEL says to be quiet if `tramp-verbose' is
+less than LEVEL. The message is emitted only if `tramp-verbose' is
+greater than or equal to LEVEL.
+
+The message is also logged into the debug buffer when `tramp-verbose'
+is greater than or equal 4.
+
+Calls functions `message' and `tramp-debug-message' with FMT-STRING as
+control string and the remaining ARGS to actually emit the message (if
+applicable)."
+ (condition-case nil
+ (when (<= level tramp-verbose)
+ ;; Match data must be preserved!
+ (save-match-data
+ ;; Display only when there is a minimum level.
+ (when (<= level 3)
+ (apply 'message
+ (concat
+ (cond
+ ((= level 0) "")
+ ((= level 1) "")
+ ((= level 2) "Warning: ")
+ (t "Tramp: "))
+ fmt-string)
+ args))
+ ;; Log only when there is a minimum level.
+ (when (>= tramp-verbose 4)
+ (when (and vec-or-proc
+ (processp vec-or-proc)
+ (buffer-name (process-buffer vec-or-proc)))
+ (with-current-buffer (process-buffer vec-or-proc)
+ ;; Translate proc to vec.
+ (setq vec-or-proc (tramp-dissect-file-name default-directory))))
+ (when (and vec-or-proc (vectorp vec-or-proc))
+ (apply 'tramp-debug-message
+ vec-or-proc
+ (concat (format "(%d) # " level) fmt-string)
+ args)))))
+ ;; Suppress all errors.
+ (error nil)))
-(defsubst tramp-line-end-position nil
- "Return point at end of line.
-Calls `line-end-position' or `point-at-eol' if defined, else
-own implementation."
- (cond
- ((fboundp 'line-end-position) (funcall (symbol-function 'line-end-position)))
- ((fboundp 'point-at-eol) (funcall (symbol-function 'point-at-eol)))
- (t (save-excursion (end-of-line) (point)))))
+(defsubst tramp-error (vec-or-proc signal fmt-string &rest args)
+ "Emit an error.
+VEC-OR-PROC identifies the connection to use, SIGNAL is the
+signal identifier to be raised, remaining args passed to
+`tramp-message'. Finally, signal SIGNAL is raised."
+ (tramp-message
+ vec-or-proc 1 "%s"
+ (error-message-string
+ (list signal (get signal 'error-message) (apply 'format fmt-string args))))
+ (signal signal (list (apply 'format fmt-string args))))
+
+(defsubst tramp-error-with-buffer
+ (buffer vec-or-proc signal fmt-string &rest args)
+ "Emit an error, and show BUFFER.
+If BUFFER is nil, show the connection buffer. Wait for 30\", or until
+an input event arrives. The other arguments are passed to `tramp-error'."
+ (save-window-excursion
+ (unwind-protect
+ (apply 'tramp-error vec-or-proc signal fmt-string args)
+ (when (and vec-or-proc (not (zerop tramp-verbose)))
+ (let ((enable-recursive-minibuffers t))
+ (pop-to-buffer
+ (or (and (bufferp buffer) buffer)
+ (and (processp vec-or-proc) (process-buffer vec-or-proc))
+ (tramp-get-buffer vec-or-proc)))
+ (sit-for 30))))))
(defmacro with-parsed-tramp-file-name (filename var &rest body)
"Parse a Tramp filename and make components available in the body.
@@ -2059,18 +1894,15 @@ First arg FILENAME is evaluated and dissected into its components.
Second arg VAR is a symbol. It is used as a variable name to hold
the filename structure. It is also used as a prefix for the variables
holding the components. For example, if VAR is the symbol `foo', then
-`foo' will be bound to the whole structure, `foo-multi-method' will
-be bound to the multi-method component, and so on for `foo-method',
-`foo-user', `foo-host', `foo-localname'.
+`foo' will be bound to the whole structure, `foo-method' will be bound to
+the method component, and so on for `foo-user', `foo-host', `foo-localname'.
Remaining args are Lisp expressions to be evaluated (inside an implicit
`progn').
-If VAR is nil, then we bind `v' to the structure and `multi-method',
-`method', `user', `host', `localname' to the components."
+If VAR is nil, then we bind `v' to the structure and `method', `user',
+`host', `localname' to the components."
`(let* ((,(or var 'v) (tramp-dissect-file-name ,filename))
- (,(if var (intern (concat (symbol-name var) "-multi-method")) 'multi-method)
- (tramp-file-name-multi-method ,(or var 'v)))
(,(if var (intern (concat (symbol-name var) "-method")) 'method)
(tramp-file-name-method ,(or var 'v)))
(,(if var (intern (concat (symbol-name var) "-user")) 'user)
@@ -2082,14 +1914,41 @@ If VAR is nil, then we bind `v' to the structure and `multi-method',
,@body))
(put 'with-parsed-tramp-file-name 'lisp-indent-function 2)
-;; Enable debugging.
-(eval-and-compile
- (when (featurep 'edebug)
- (def-edebug-spec with-parsed-tramp-file-name (form symbolp body))))
-;; Highlight as keyword.
-(when (functionp 'font-lock-add-keywords)
- (funcall 'font-lock-add-keywords
- 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>")))
+(put 'with-parsed-tramp-file-name 'edebug-form-spec '(form symbolp body))
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>"))
+
+(defmacro with-file-property (vec file property &rest body)
+ "Check in Tramp cache for PROPERTY, otherwise execute BODY and set cache.
+FILE must be a local file name on a connection identified via VEC."
+ `(if (file-name-absolute-p ,file)
+ (let ((value (tramp-get-file-property ,vec ,file ,property 'undef)))
+ (when (eq value 'undef)
+ ;; We cannot pass @body as parameter to
+ ;; `tramp-set-file-property' because it mangles our
+ ;; debug messages.
+ (setq value (progn ,@body))
+ (tramp-set-file-property ,vec ,file ,property value))
+ value)
+ ,@body))
+
+(put 'with-file-property 'lisp-indent-function 3)
+(put 'with-file-property 'edebug-form-spec t)
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-file-property\\>"))
+
+(defmacro with-connection-property (key property &rest body)
+ "Checks in Tramp for property PROPERTY, otherwise executes BODY and set."
+ `(let ((value (tramp-get-connection-property ,key ,property 'undef)))
+ (when (eq value 'undef)
+ ;; We cannot pass ,@body as parameter to
+ ;; `tramp-set-connection-property' because it mangles our debug
+ ;; messages.
+ (setq value (progn ,@body))
+ (tramp-set-connection-property ,key ,property value))
+ value))
+
+(put 'with-connection-property 'lisp-indent-function 2)
+(put 'with-connection-property 'edebug-form-spec t)
+(font-lock-add-keywords 'emacs-lisp-mode '("\\<with-connection-property\\>"))
(defmacro tramp-let-maybe (variable value &rest body)
"Let-bind VARIABLE to VALUE in BODY, but only if VARIABLE is not obsolete.
@@ -2102,6 +1961,33 @@ The intent is to protect against `obsolete variable' warnings."
(put 'tramp-let-maybe 'lisp-indent-function 2)
(put 'tramp-let-maybe 'edebug-form-spec t)
+(defsubst tramp-make-tramp-temp-file (vec)
+ "Create a temporary file on the remote host identified by VEC.
+Return the local name of the temporary file."
+ (let ((prefix
+ (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ (expand-file-name
+ tramp-temp-name-prefix (tramp-get-remote-tmpdir vec))))
+ result)
+ (while (not result)
+ ;; `make-temp-file' would be the natural choice for
+ ;; implementation. But it calls `write-region' internally,
+ ;; which also needs a temporary file - we would end in an
+ ;; infinite loop.
+ (setq result (make-temp-name prefix))
+ (if (file-exists-p result)
+ (setq result nil)
+ ;; This creates the file by side effect.
+ (set-file-times result)
+ (set-file-modes result (tramp-octal-to-decimal "0700"))))
+
+ ;; Return the local part.
+ (with-parsed-tramp-file-name result nil localname)))
+
+
;;; Config Manipulation Functions:
(defun tramp-set-completion-function (method function-list)
@@ -2127,12 +2013,19 @@ Example:
tramp-completion-function-alist))
(while v
- ;; Remove double entries
+ ;; Remove double entries.
(when (member (car v) (cdr v))
(setcdr v (delete (car v) (cdr v))))
- ;; Check for function and file
+ ;; Check for function and file or registry key.
(unless (and (functionp (nth 0 (car v)))
- (file-exists-p (nth 1 (car v))))
+ (if (string-match "^HKEY_CURRENT_USER" (nth 1 (car v)))
+ ;; Windows registry.
+ (and (memq system-type '(cygwin windows-nt))
+ (zerop
+ (tramp-local-call-process
+ "reg" nil nil nil "query" (nth 1 (car v)))))
+ ;; Configuration file.
+ (file-exists-p (nth 1 (car v)))))
(setq r (delete (car v) r)))
(setq v (cdr v)))
@@ -2141,15 +2034,69 @@ Example:
(cons method r)))))
(defun tramp-get-completion-function (method)
- "Returns list of completion functions for METHOD.
+ "Returns a list of completion functions for METHOD.
For definition of that list see `tramp-set-completion-function'."
- (cdr (assoc method tramp-completion-function-alist)))
+ (cons
+ ;; Hosts visited once shall be remembered.
+ `(tramp-parse-connection-properties ,method)
+ ;; The method related defaults.
+ (cdr (assoc method tramp-completion-function-alist))))
+
+
+;;; Fontification of `read-file-name'.
+
+;; rfn-eshadow.el is part of Emacs 22. Its is autoloaded.
+(defvar tramp-rfn-eshadow-overlay)
+(make-variable-buffer-local 'tramp-rfn-eshadow-overlay)
+
+(defun tramp-rfn-eshadow-setup-minibuffer ()
+ "Set up a minibuffer for `file-name-shadow-mode'.
+Adds another overlay hiding filename parts according to Tramp's
+special handling of `substitute-in-file-name'."
+ (when (symbol-value 'minibuffer-completing-file-name)
+ (setq tramp-rfn-eshadow-overlay
+ (funcall (symbol-function 'make-overlay)
+ (funcall (symbol-function 'minibuffer-prompt-end))
+ (funcall (symbol-function 'minibuffer-prompt-end))))
+ ;; Copy rfn-eshadow-overlay properties.
+ (let ((props (funcall (symbol-function 'overlay-properties)
+ (symbol-value 'rfn-eshadow-overlay))))
+ (while props
+ (funcall (symbol-function 'overlay-put)
+ tramp-rfn-eshadow-overlay (pop props) (pop props))))))
+
+(when (boundp 'rfn-eshadow-setup-minibuffer-hook)
+ (add-hook 'rfn-eshadow-setup-minibuffer-hook
+ 'tramp-rfn-eshadow-setup-minibuffer))
+
+(defun tramp-rfn-eshadow-update-overlay ()
+ "Update `rfn-eshadow-overlay' to cover shadowed part of minibuffer input.
+This is intended to be used as a minibuffer `post-command-hook' for
+`file-name-shadow-mode'; the minibuffer should have already
+been set up by `rfn-eshadow-setup-minibuffer'."
+ ;; In remote files name, there is a shadowing just for the local part.
+ (let ((end (or (funcall (symbol-function 'overlay-end)
+ (symbol-value 'rfn-eshadow-overlay))
+ (funcall (symbol-function 'minibuffer-prompt-end)))))
+ (when (file-remote-p (buffer-substring-no-properties end (point-max)))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region
+ (1+ (or (string-match "/" (buffer-string) end) end)) (point-max))
+ (let ((rfn-eshadow-overlay tramp-rfn-eshadow-overlay)
+ (rfn-eshadow-update-overlay-hook nil))
+ (funcall (symbol-function 'rfn-eshadow-update-overlay))))))))
+
+(when (boundp 'rfn-eshadow-update-overlay-hook)
+ (add-hook 'rfn-eshadow-update-overlay-hook
+ 'tramp-rfn-eshadow-update-overlay))
+
;;; File Name Handler Functions:
(defun tramp-handle-make-symbolic-link
(filename linkname &optional ok-if-already-exists)
- "Like `make-symbolic-link' for tramp files.
+ "Like `make-symbolic-link' for Tramp files.
If LINKNAME is a non-Tramp file, it is used verbatim as the target of
the symlink. If LINKNAME is a Tramp file, only the localname component is
used as the target of the symlink.
@@ -2159,12 +2106,12 @@ it is expanded first, before the localname component is taken. Note that
this can give surprising results if the user/host for the source and
target of the symlink differ."
(with-parsed-tramp-file-name linkname l
- (let ((ln (tramp-get-remote-ln l-multi-method l-method l-user l-host))
+ (let ((ln (tramp-get-remote-ln l))
(cwd (file-name-directory l-localname)))
(unless ln
- (signal 'file-error
- (list "Making a symbolic link."
- "ln(1) does not exist on the remote host.")))
+ (tramp-error
+ l 'file-error
+ "Making a symbolic link. ln(1) does not exist on the remote host."))
;; Do the 'confirm if exists' thing.
(when (file-exists-p linkname)
@@ -2175,33 +2122,27 @@ target of the symlink differ."
(format
"File %s already exists; make it a link anyway? "
l-localname)))))
- (signal 'file-already-exists (list "File already exists" l-localname))
+ (tramp-error
+ l 'file-already-exists "File %s already exists" l-localname)
(delete-file linkname)))
;; If FILENAME is a Tramp name, use just the localname component.
(when (tramp-tramp-file-p filename)
- (setq filename (tramp-file-name-localname
- (tramp-dissect-file-name
- (expand-file-name filename)))))
+ (setq filename
+ (tramp-file-name-localname
+ (tramp-dissect-file-name (expand-file-name filename)))))
;; Right, they are on the same host, regardless of user, method, etc.
;; We now make the link on the remote machine. This will occur as the user
;; that FILENAME belongs to.
(zerop
(tramp-send-command-and-check
- l-multi-method l-method l-user l-host
- (format "cd %s && %s -sf %s %s"
- cwd ln
- filename
- l-localname)
- t)))))
+ l (format "cd %s && %s -sf %s %s" cwd ln filename l-localname) t)))))
(defun tramp-handle-load (file &optional noerror nomessage nosuffix must-suffix)
- "Like `load' for tramp files. Not implemented!"
- (unless (file-name-absolute-p file)
- (error "Tramp cannot `load' files without absolute file name"))
- (with-parsed-tramp-file-name file nil
+ "Like `load' for Tramp files."
+ (with-parsed-tramp-file-name (expand-file-name file) nil
(unless nosuffix
(cond ((file-exists-p (concat file ".elc"))
(setq file (concat file ".elc")))
@@ -2212,138 +2153,144 @@ target of the symlink differ."
;; Included for safety's sake.
(unless (or (file-name-directory file)
(string-match "\\.elc?\\'" file))
- (error "File `%s' does not include a `.el' or `.elc' suffix"
- file)))
+ (tramp-error
+ v 'file-error
+ "File `%s' does not include a `.el' or `.elc' suffix" file)))
(unless noerror
(when (not (file-exists-p file))
- (error "Cannot load nonexistent file `%s'" file)))
+ (tramp-error v 'file-error "Cannot load nonexistent file `%s'" file)))
(if (not (file-exists-p file))
nil
- (unless nomessage
- (message "Loading %s..." file))
+ (unless nomessage (tramp-message v 0 "Loading %s..." file))
(let ((local-copy (file-local-copy file)))
;; MUST-SUFFIX doesn't exist on XEmacs, so let it default to nil.
(load local-copy noerror t t)
(delete-file local-copy))
- (unless nomessage
- (message "Loading %s...done" file))
+ (unless nomessage (tramp-message v 0 "Loading %s...done" file))
t)))
-;; Localname manipulation functions that grok TRAMP localnames...
+;; Localname manipulation functions that grok Tramp localnames...
(defun tramp-handle-file-name-directory (file)
- "Like `file-name-directory' but aware of TRAMP files."
- ;; Everything except the last filename thing is the directory.
- (with-parsed-tramp-file-name file nil
+ "Like `file-name-directory' but aware of Tramp files."
+ ;; Everything except the last filename thing is the directory. We
+ ;; cannot apply `with-parsed-tramp-file-name', because this expands
+ ;; the remote file name parts. This is a problem when we are in
+ ;; file name completion.
+ (let ((v (tramp-dissect-file-name file t)))
;; Run the command on the localname portion only.
(tramp-make-tramp-file-name
- multi-method method user host (file-name-directory (or localname "")))))
+ (tramp-file-name-method v)
+ (tramp-file-name-user v)
+ (tramp-file-name-host v)
+ (file-name-directory (or (tramp-file-name-localname v) "")))))
(defun tramp-handle-file-name-nondirectory (file)
- "Like `file-name-nondirectory' but aware of TRAMP files."
+ "Like `file-name-nondirectory' but aware of Tramp files."
(with-parsed-tramp-file-name file nil
(file-name-nondirectory localname)))
(defun tramp-handle-file-truename (filename &optional counter prev-dirs)
- "Like `file-truename' for tramp files."
+ "Like `file-truename' for Tramp files."
(with-parsed-tramp-file-name (expand-file-name filename) nil
- (let* ((steps (tramp-split-string localname "/"))
- (localnamedir (tramp-let-maybe directory-sep-char ?/ ;for XEmacs
- (file-name-as-directory localname)))
- (is-dir (string= localname localnamedir))
- (thisstep nil)
- (numchase 0)
- ;; Don't make the following value larger than necessary.
- ;; People expect an error message in a timely fashion when
- ;; something is wrong; otherwise they might think that Emacs
- ;; is hung. Of course, correctness has to come first.
- (numchase-limit 20)
- (result nil) ;result steps in reverse order
- symlink-target)
- (tramp-message-for-buffer
- multi-method method user host
- 10 "Finding true name for `%s'" filename)
- (while (and steps (< numchase numchase-limit))
- (setq thisstep (pop steps))
- (tramp-message-for-buffer
- multi-method method user host
- 10 "Check %s"
- (mapconcat 'identity
- (append '("") (reverse result) (list thisstep))
- "/"))
- (setq symlink-target
- (nth 0 (file-attributes
- (tramp-make-tramp-file-name
- multi-method method user host
- (mapconcat 'identity
- (append '("")
- (reverse result)
- (list thisstep))
- "/")))))
- (cond ((string= "." thisstep)
- (tramp-message-for-buffer multi-method method user host
- 10 "Ignoring step `.'"))
- ((string= ".." thisstep)
- (tramp-message-for-buffer multi-method method user host
- 10 "Processing step `..'")
- (pop result))
- ((stringp symlink-target)
- ;; It's a symlink, follow it.
- (tramp-message-for-buffer
- multi-method method user host
- 10 "Follow symlink to %s" symlink-target)
- (setq numchase (1+ numchase))
- (when (file-name-absolute-p symlink-target)
- (setq result nil))
- ;; If the symlink was absolute, we'll get a string like
- ;; "/user@host:/some/target"; extract the
- ;; "/some/target" part from it.
- (when (tramp-tramp-file-p symlink-target)
- (with-parsed-tramp-file-name symlink-target sym
- (unless (equal (list multi-method method user host)
- (list sym-multi-method sym-method
- sym-user sym-host))
- (error "Symlink target `%s' on wrong host"
- symlink-target))
- (setq symlink-target localname)))
- (setq steps
- (append (tramp-split-string symlink-target "/") steps)))
- (t
- ;; It's a file.
- (setq result (cons thisstep result)))))
- (when (>= numchase numchase-limit)
- (error "Maximum number (%d) of symlinks exceeded" numchase-limit))
- (setq result (reverse result))
- ;; Combine list to form string.
- (setq result
- (if result
- (mapconcat 'identity (cons "" result) "/")
- "/"))
- (when (and is-dir (or (string= "" result)
- (not (string= (substring result -1) "/"))))
- (setq result (concat result "/")))
- (tramp-message-for-buffer
- multi-method method user host
- 10 "True name of `%s' is `%s'" filename result)
- (tramp-make-tramp-file-name
- multi-method method user host result))))
+ (with-file-property v localname "file-truename"
+ (let* ((steps (tramp-split-string localname "/"))
+ (localnamedir (tramp-let-maybe directory-sep-char ?/ ;for XEmacs
+ (file-name-as-directory localname)))
+ (is-dir (string= localname localnamedir))
+ (thisstep nil)
+ (numchase 0)
+ ;; Don't make the following value larger than necessary.
+ ;; People expect an error message in a timely fashion when
+ ;; something is wrong; otherwise they might think that Emacs
+ ;; is hung. Of course, correctness has to come first.
+ (numchase-limit 20)
+ (result nil) ;result steps in reverse order
+ symlink-target)
+ (tramp-message v 4 "Finding true name for `%s'" filename)
+ (while (and steps (< numchase numchase-limit))
+ (setq thisstep (pop steps))
+ (tramp-message
+ v 5 "Check %s"
+ (mapconcat 'identity
+ (append '("") (reverse result) (list thisstep))
+ "/"))
+ (setq symlink-target
+ (nth 0 (file-attributes
+ (tramp-make-tramp-file-name
+ method user host
+ (mapconcat 'identity
+ (append '("")
+ (reverse result)
+ (list thisstep))
+ "/")))))
+ (cond ((string= "." thisstep)
+ (tramp-message v 5 "Ignoring step `.'"))
+ ((string= ".." thisstep)
+ (tramp-message v 5 "Processing step `..'")
+ (pop result))
+ ((stringp symlink-target)
+ ;; It's a symlink, follow it.
+ (tramp-message v 5 "Follow symlink to %s" symlink-target)
+ (setq numchase (1+ numchase))
+ (when (file-name-absolute-p symlink-target)
+ (setq result nil))
+ ;; If the symlink was absolute, we'll get a string like
+ ;; "/user@host:/some/target"; extract the
+ ;; "/some/target" part from it.
+ (when (tramp-tramp-file-p symlink-target)
+ (unless (tramp-equal-remote filename symlink-target)
+ (tramp-error
+ v 'file-error
+ "Symlink target `%s' on wrong host" symlink-target))
+ (setq symlink-target localname))
+ (setq steps
+ (append (tramp-split-string symlink-target "/")
+ steps)))
+ (t
+ ;; It's a file.
+ (setq result (cons thisstep result)))))
+ (when (>= numchase numchase-limit)
+ (tramp-error
+ v 'file-error
+ "Maximum number (%d) of symlinks exceeded" numchase-limit))
+ (setq result (reverse result))
+ ;; Combine list to form string.
+ (setq result
+ (if result
+ (mapconcat 'identity (cons "" result) "/")
+ "/"))
+ (when (and is-dir (or (string= "" result)
+ (not (string= (substring result -1) "/"))))
+ (setq result (concat result "/")))
+ (tramp-message v 4 "True name of `%s' is `%s'" filename result)
+ (tramp-make-tramp-file-name method user host result)))))
;; Basic functions.
(defun tramp-handle-file-exists-p (filename)
- "Like `file-exists-p' for tramp files."
+ "Like `file-exists-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (save-excursion
+ (with-file-property v localname "file-exists-p"
(zerop (tramp-send-command-and-check
- multi-method method user host
+ v
(format
- (tramp-get-file-exists-command multi-method method user host)
+ "%s %s"
+ (tramp-get-file-exists-command v)
(tramp-shell-quote-argument localname)))))))
+;; Inodes don't exist for some file systems. Therefore we must
+;; generate virtual ones. Used in `find-buffer-visiting'. The method
+;; applied might be not so efficient (Ange-FTP uses hashes). But
+;; performance isn't the major issue given that file transfer will
+;; take time.
+(defvar tramp-inodes nil
+ "Keeps virtual inodes numbers.")
+
;; Devices must distinguish physical file systems. The device numbers
;; provided by "lstat" aren't unique, because we operate on different hosts.
;; So we use virtual device numbers, generated by Tramp. Both Ange-FTP and
;; EFS use device number "-1". In order to be different, we use device number
-;; (-1 x), whereby "x" is unique for a given (multi-method method user host).
+;; (-1 x), whereby "x" is unique for a given (method user host).
(defvar tramp-devices nil
"Keeps virtual device numbers.")
@@ -2351,123 +2298,133 @@ target of the symlink differ."
;; when something goes wrong.
;; Daniel Pittman <daniel@danann.net>
(defun tramp-handle-file-attributes (filename &optional id-format)
- "Like `file-attributes' for tramp files."
- (when (file-exists-p filename)
- ;; file exists, find out stuff
- (unless id-format (setq id-format 'integer))
- (with-parsed-tramp-file-name filename nil
- (save-excursion
- (tramp-convert-file-attributes
- multi-method method user host
- (if (tramp-get-remote-perl multi-method method user host)
- (tramp-handle-file-attributes-with-perl multi-method method user host
- localname id-format)
- (tramp-handle-file-attributes-with-ls multi-method method user host
- localname id-format)))))))
-
-(defun tramp-handle-file-attributes-with-ls
- (multi-method method user host localname &optional id-format)
- "Implement `file-attributes' for tramp files using the ls(1) command."
+ "Like `file-attributes' for Tramp files."
+ (unless id-format (setq id-format 'integer))
+ (with-parsed-tramp-file-name (expand-file-name filename) nil
+ (with-file-property v localname (format "file-attributes-%s" id-format)
+ (when (file-exists-p filename)
+ ;; file exists, find out stuff
+ (save-excursion
+ (tramp-convert-file-attributes
+ v
+ (if (tramp-get-remote-stat v)
+ (tramp-handle-file-attributes-with-stat v localname id-format)
+ (if (tramp-get-remote-perl v)
+ (tramp-handle-file-attributes-with-perl v localname id-format)
+ (tramp-handle-file-attributes-with-ls
+ v localname id-format)))))))))
+
+(defun tramp-handle-file-attributes-with-ls (vec localname &optional id-format)
+ "Implement `file-attributes' for Tramp files using the ls(1) command."
(let (symlinkp dirp
res-inode res-filemodes res-numlinks
res-uid res-gid res-size res-symlink-target)
- (tramp-message-for-buffer multi-method method user host 10
- "file attributes with ls: %s"
- (tramp-make-tramp-file-name
- multi-method method user host localname))
+ (tramp-message vec 5 "file attributes with ls: %s" localname)
(tramp-send-command
- multi-method method user host
+ vec
(format "%s %s %s"
- (tramp-get-ls-command multi-method method user host)
+ (tramp-get-ls-command vec)
(if (eq id-format 'integer) "-ildn" "-ild")
(tramp-shell-quote-argument localname)))
- (tramp-wait-for-output)
;; parse `ls -l' output ...
- ;; ... inode
- (setq res-inode
- (condition-case err
- (read (current-buffer))
- (invalid-read-syntax
- (when (and (equal (cadr err)
- "Integer constant overflow in reader")
- (string-match
- "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'"
- (car (cddr err))))
- (let* ((big (read (substring (car (cddr err)) 0
- (match-beginning 1))))
- (small (read (match-string 1 (car (cddr err)))))
- (twiddle (/ small 65536)))
- (cons (+ big twiddle)
- (- small (* twiddle 65536))))))))
- ;; ... file mode flags
- (setq res-filemodes (symbol-name (read (current-buffer))))
- ;; ... number links
- (setq res-numlinks (read (current-buffer)))
- ;; ... uid and gid
- (setq res-uid (read (current-buffer)))
- (setq res-gid (read (current-buffer)))
- (when (eq id-format 'integer)
- (unless (numberp res-uid) (setq res-uid -1))
- (unless (numberp res-gid) (setq res-gid -1)))
- ;; ... size
- (setq res-size (read (current-buffer)))
- ;; From the file modes, figure out other stuff.
- (setq symlinkp (eq ?l (aref res-filemodes 0)))
- (setq dirp (eq ?d (aref res-filemodes 0)))
- ;; if symlink, find out file name pointed to
- (when symlinkp
- (search-forward "-> ")
- (setq res-symlink-target
- (buffer-substring (point)
- (tramp-line-end-position))))
- ;; return data gathered
- (list
- ;; 0. t for directory, string (name linked to) for symbolic
- ;; link, or nil.
- (or dirp res-symlink-target nil)
- ;; 1. Number of links to file.
- res-numlinks
- ;; 2. File uid.
- res-uid
- ;; 3. File gid.
- res-gid
- ;; 4. Last access time, as a list of two integers. First
- ;; integer has high-order 16 bits of time, second has low 16
- ;; bits.
- ;; 5. Last modification time, likewise.
- ;; 6. Last status change time, likewise.
- '(0 0) '(0 0) '(0 0) ;CCC how to find out?
- ;; 7. Size in bytes (-1, if number is out of range).
- res-size
- ;; 8. File modes, as a string of ten letters or dashes as in ls -l.
- res-filemodes
- ;; 9. t if file's gid would change if file were deleted and
- ;; recreated. Will be set in `tramp-convert-file-attributes'
- t
- ;; 10. inode number.
- res-inode
- ;; 11. Device number. Will be replaced by a virtual device number.
- -1
- )))
+ (with-current-buffer (tramp-get-buffer vec)
+ (goto-char (point-min))
+ ;; ... inode
+ (setq res-inode
+ (condition-case err
+ (read (current-buffer))
+ (invalid-read-syntax
+ (when (and (equal (cadr err)
+ "Integer constant overflow in reader")
+ (string-match
+ "^[0-9]+\\([0-9][0-9][0-9][0-9][0-9]\\)\\'"
+ (car (cddr err))))
+ (let* ((big (read (substring (car (cddr err)) 0
+ (match-beginning 1))))
+ (small (read (match-string 1 (car (cddr err)))))
+ (twiddle (/ small 65536)))
+ (cons (+ big twiddle)
+ (- small (* twiddle 65536))))))))
+ ;; ... file mode flags
+ (setq res-filemodes (symbol-name (read (current-buffer))))
+ ;; ... number links
+ (setq res-numlinks (read (current-buffer)))
+ ;; ... uid and gid
+ (setq res-uid (read (current-buffer)))
+ (setq res-gid (read (current-buffer)))
+ (if (eq id-format 'integer)
+ (progn
+ (unless (numberp res-uid) (setq res-uid -1))
+ (unless (numberp res-gid) (setq res-gid -1)))
+ (progn
+ (unless (stringp res-uid) (setq res-uid (symbol-name res-uid)))
+ (unless (stringp res-gid) (setq res-gid (symbol-name res-gid)))))
+ ;; ... size
+ (setq res-size (read (current-buffer)))
+ ;; From the file modes, figure out other stuff.
+ (setq symlinkp (eq ?l (aref res-filemodes 0)))
+ (setq dirp (eq ?d (aref res-filemodes 0)))
+ ;; if symlink, find out file name pointed to
+ (when symlinkp
+ (search-forward "-> ")
+ (setq res-symlink-target
+ (buffer-substring (point) (tramp-compat-line-end-position))))
+ ;; return data gathered
+ (list
+ ;; 0. t for directory, string (name linked to) for symbolic
+ ;; link, or nil.
+ (or dirp res-symlink-target)
+ ;; 1. Number of links to file.
+ res-numlinks
+ ;; 2. File uid.
+ res-uid
+ ;; 3. File gid.
+ res-gid
+ ;; 4. Last access time, as a list of two integers. First
+ ;; integer has high-order 16 bits of time, second has low 16
+ ;; bits.
+ ;; 5. Last modification time, likewise.
+ ;; 6. Last status change time, likewise.
+ '(0 0) '(0 0) '(0 0) ;CCC how to find out?
+ ;; 7. Size in bytes (-1, if number is out of range).
+ res-size
+ ;; 8. File modes, as a string of ten letters or dashes as in ls -l.
+ res-filemodes
+ ;; 9. t if file's gid would change if file were deleted and
+ ;; recreated. Will be set in `tramp-convert-file-attributes'
+ t
+ ;; 10. inode number.
+ res-inode
+ ;; 11. Device number. Will be replaced by a virtual device number.
+ -1
+ ))))
(defun tramp-handle-file-attributes-with-perl
- (multi-method method user host localname &optional id-format)
- "Implement `file-attributes' for tramp files using a Perl script."
- (tramp-message-for-buffer multi-method method user host 10
- "file attributes with perl: %s"
- (tramp-make-tramp-file-name
- multi-method method user host localname))
- (tramp-maybe-send-perl-script multi-method method user host
- tramp-perl-file-attributes
- "tramp_file_attributes")
- (tramp-send-command multi-method method user host
- (format "tramp_file_attributes %s %s"
- (tramp-shell-quote-argument localname) id-format))
- (tramp-wait-for-output)
- (read (current-buffer)))
+ (vec localname &optional id-format)
+ "Implement `file-attributes' for Tramp files using a Perl script."
+ (tramp-message vec 5 "file attributes with perl: %s" localname)
+ (tramp-maybe-send-script
+ vec tramp-perl-file-attributes "tramp_perl_file_attributes")
+ (tramp-send-command-and-read
+ vec
+ (format "tramp_perl_file_attributes %s %s"
+ (tramp-shell-quote-argument localname) id-format)))
+
+(defun tramp-handle-file-attributes-with-stat
+ (vec localname &optional id-format)
+ "Implement `file-attributes' for Tramp files using stat(1) command."
+ (tramp-message vec 5 "file attributes with stat: %s" localname)
+ (tramp-send-command-and-read
+ vec
+ (format
+ "%s -c '((\"%%N\") %%h %s %s %%X.0 %%Y.0 %%Z.0 %%s.0 \"%%A\" t %%i.0 -1)' %s"
+ (tramp-get-remote-stat vec)
+ (if (eq id-format 'integer) "%u" "\"%U\"")
+ (if (eq id-format 'integer) "%g" "\"%G\"")
+ (tramp-shell-quote-argument localname))))
(defun tramp-handle-set-visited-file-modtime (&optional time-list)
- "Like `set-visited-file-modtime' for tramp files."
+ "Like `set-visited-file-modtime' for Tramp files."
(unless (buffer-file-name)
(error "Can't set-visited-file-modtime: buffer `%s' not visiting a file"
(buffer-name)))
@@ -2485,16 +2442,16 @@ target of the symlink differ."
;; `tramp-handle-file-attributes-with-ls'.
(if (not (equal modtime '(0 0)))
(tramp-run-real-handler 'set-visited-file-modtime (list modtime))
- (save-excursion
+ (progn
(tramp-send-command
- multi-method method user host
+ v
(format "%s -ild %s"
- (tramp-get-ls-command multi-method method user host)
+ (tramp-get-ls-command v)
(tramp-shell-quote-argument localname)))
- (tramp-wait-for-output)
(setq attr (buffer-substring (point)
(progn (end-of-line) (point)))))
- (setq tramp-buffer-file-attributes attr))
+ (tramp-set-file-property
+ v localname "visited-file-modtime-ild" attr))
(when (boundp 'last-coding-system-used)
(set 'last-coding-system-used coding-system-used))
nil)))))
@@ -2504,7 +2461,7 @@ target of the symlink differ."
;; This function makes the same assumption as
;; `tramp-handle-set-visited-file-modtime'.
(defun tramp-handle-verify-visited-file-modtime (buf)
- "Like `verify-visited-file-modtime' for tramp files.
+ "Like `verify-visited-file-modtime' for Tramp files.
At the time `verify-visited-file-modtime' calls this function, we
already know that the buffer is visiting a file and that
`visited-file-modtime' does not return 0. Do not call this
@@ -2518,6 +2475,7 @@ of."
t
(let ((f (buffer-file-name)))
(with-parsed-tramp-file-name f nil
+ (tramp-flush-file-property v localname)
(let* ((attr (file-attributes f))
(modtime (nth 5 attr))
(mt (visited-file-modtime)))
@@ -2536,53 +2494,111 @@ of."
2))
;; modtime has the don't know value.
(attr
- (save-excursion
- (tramp-send-command
- multi-method method user host
- (format "%s -ild %s"
- (tramp-get-ls-command multi-method method user host)
- (tramp-shell-quote-argument localname)))
- (tramp-wait-for-output)
+ (tramp-send-command
+ v
+ (format "%s -ild %s"
+ (tramp-get-ls-command v)
+ (tramp-shell-quote-argument localname)))
+ (with-current-buffer (tramp-get-buffer v)
(setq attr (buffer-substring
(point) (progn (end-of-line) (point)))))
- (equal tramp-buffer-file-attributes attr))
+ (equal
+ attr
+ (tramp-get-file-property
+ v localname "visited-file-modtime-ild" "")))
;; If file does not exist, say it is not modified
;; if and only if that agrees with the buffer's record.
(t (equal mt '(-1 65535))))))))))
(defun tramp-handle-set-file-modes (filename mode)
- "Like `set-file-modes' for tramp files."
+ "Like `set-file-modes' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (unless (zerop (tramp-send-command-and-check
- multi-method method user host
- (format "chmod %s %s"
- (tramp-decimal-to-octal mode)
- (tramp-shell-quote-argument localname))))
- (signal 'file-error
- (list "Doing chmod"
- ;; FIXME: extract the proper text from chmod's stderr.
- "error while changing file's mode"
- filename))))))
+ (tramp-flush-file-property v localname)
+ (unless (zerop (tramp-send-command-and-check
+ v
+ (format "chmod %s %s"
+ (tramp-decimal-to-octal mode)
+ (tramp-shell-quote-argument localname))))
+ ;; FIXME: extract the proper text from chmod's stderr.
+ (tramp-error
+ v 'file-error "Error while changing file's mode %s" filename))))
+
+(defun tramp-handle-set-file-times (filename &optional time)
+ "Like `set-file-times' for Tramp files."
+ (zerop
+ (if (file-remote-p filename)
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v localname)
+ (let ((time (if (or (null time) (equal time '(0 0)))
+ (current-time)
+ time))
+ (utc
+ ;; With GNU Emacs, `format-time-string' has an
+ ;; optional parameter UNIVERSAL. This is preferred,
+ ;; because we could handle the case when the remote
+ ;; host is located in a different time zone as the
+ ;; local host.
+ (and (functionp 'subr-arity)
+ (subrp (symbol-function 'format-time-string))
+ (= 3 (cdr (funcall (symbol-function 'subr-arity)
+ (symbol-function
+ 'format-time-string)))))))
+ (tramp-send-command-and-check
+ v (format "%s touch -t %s %s"
+ (if utc "TZ=UTC; export TZ;" "")
+ (if utc
+ (format-time-string "%Y%m%d%H%M.%S" time t)
+ (format-time-string "%Y%m%d%H%M.%S" time))
+ (tramp-shell-quote-argument localname)))))
+
+ ;; We handle also the local part, because in older Emacsen,
+ ;; without `set-file-times', this function is an alias for this.
+ ;; We are local, so we don't need the UTC settings.
+ (tramp-local-call-process
+ "touch" nil nil nil "-t"
+ (format-time-string "%Y%m%d%H%M.%S" time)
+ (tramp-shell-quote-argument filename)))))
+
+(defun tramp-set-file-uid-gid (filename &optional uid gid)
+ "Set the ownership for FILENAME.
+If UID and GID are provided, these values are used; otherwise uid
+and gid of the corresponding user is taken. Both parameters must be integers."
+ ;; CCC: Modern Unices allow chown only for root. So we might need
+ ;; another implementation, see `dired-do-chown'. OTOH, it is
+ ;; mostly working with su(do)? when it is needed, so it shall
+ ;; succeed in the majority of cases.
+ (if (file-remote-p filename)
+ (with-parsed-tramp-file-name filename nil
+ (let ((uid (or (and (integerp uid) uid)
+ (tramp-get-remote-uid v 'integer)))
+ (gid (or (and (integerp gid) gid)
+ (tramp-get-remote-gid v 'integer))))
+ (tramp-send-command
+ v (format
+ "chown %d:%d %s" uid gid
+ (tramp-shell-quote-argument localname)))))
+
+ ;; We handle also the local part, because there doesn't exist
+ ;; `set-file-uid-gid'. On Win32 "chown" might not work.
+ (let ((uid (or (and (integerp uid) uid) (tramp-get-local-uid 'integer)))
+ (gid (or (and (integerp gid) gid) (tramp-get-local-gid 'integer))))
+ (tramp-local-call-process
+ "chown" nil nil nil
+ (format "%d:%d" uid gid) (tramp-shell-quote-argument filename)))))
;; Simple functions using the `test' command.
(defun tramp-handle-file-executable-p (filename)
- "Like `file-executable-p' for tramp files."
+ "Like `file-executable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (zerop (tramp-run-test "-x" filename))))
+ (with-file-property v localname "file-executable-p"
+ (zerop (tramp-run-test "-x" filename)))))
(defun tramp-handle-file-readable-p (filename)
- "Like `file-readable-p' for tramp files."
- (with-parsed-tramp-file-name filename nil
- (zerop (tramp-run-test "-r" filename))))
-
-(defun tramp-handle-file-accessible-directory-p (filename)
- "Like `file-accessible-directory-p' for tramp files."
+ "Like `file-readable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (and (zerop (tramp-run-test "-d" filename))
- (zerop (tramp-run-test "-r" filename))
- (zerop (tramp-run-test "-x" filename)))))
+ (with-file-property v localname "file-readable-p"
+ (zerop (tramp-run-test "-r" filename)))))
;; When the remote shell is started, it looks for a shell which groks
;; tilde expansion. Here, we assume that all shells which grok tilde
@@ -2590,7 +2606,7 @@ of."
;; newer than). If this breaks, tell me about it and I'll try to do
;; something smarter about it.
(defun tramp-handle-file-newer-than-file-p (file1 file2)
- "Like `file-newer-than-file-p' for tramp files."
+ "Like `file-newer-than-file-p' for Tramp files."
(cond ((not (file-exists-p file1))
nil)
((not (file-exists-p file2))
@@ -2611,44 +2627,27 @@ of."
;; However, this only works if both files are Tramp
;; files and both have the same method, same user, same
;; host.
- (unless (and (tramp-tramp-file-p file1)
- (tramp-tramp-file-p file2))
- (signal
- 'file-error
- (list
- "Cannot check if Tramp file is newer than non-Tramp file"
- file1 file2)))
- (with-parsed-tramp-file-name file1 v1
- (with-parsed-tramp-file-name file2 v2
- (unless (and (equal v1-multi-method v2-multi-method)
- (equal v1-method v2-method)
- (equal v1-user v2-user)
- (equal v1-host v2-host))
- (signal 'file-error
- (list "Files must have same method, user, host"
- file1 file2)))
- (unless (and (tramp-tramp-file-p file1)
- (tramp-tramp-file-p file2))
- (signal 'file-error
- (list "Files must be tramp files on same host"
- file1 file2)))
- (if (tramp-get-test-groks-nt
- v1-multi-method v1-method v1-user v1-host)
- (zerop (tramp-run-test2 "test" file1 file2 "-nt"))
- (zerop (tramp-run-test2
- "tramp_test_nt" file1 file2)))))))))))
+ (unless (tramp-equal-remote file1 file2)
+ (with-parsed-tramp-file-name
+ (if (tramp-tramp-file-p file1) file1 file2) nil
+ (tramp-error
+ v 'file-error
+ "Files %s and %s must have same method, user, host"
+ file1 file2)))
+ (with-parsed-tramp-file-name file1 nil
+ (zerop (tramp-run-test2
+ (tramp-get-test-nt-command v) file1 file2)))))))))
;; Functions implemented using the basic functions above.
(defun tramp-handle-file-modes (filename)
- "Like `file-modes' for tramp files."
- (with-parsed-tramp-file-name filename nil
- (when (file-exists-p filename)
- (tramp-mode-string-to-int
- (nth 8 (file-attributes filename))))))
+ "Like `file-modes' for Tramp files."
+ (when (file-exists-p filename)
+ (tramp-mode-string-to-int
+ (nth 8 (file-attributes filename)))))
(defun tramp-handle-file-directory-p (filename)
- "Like `file-directory-p' for tramp files."
+ "Like `file-directory-p' for Tramp files."
;; Care must be taken that this function returns `t' for symlinks
;; pointing to directories. Surely the most obvious implementation
;; would be `test -d', but that returns false for such symlinks.
@@ -2658,78 +2657,52 @@ of."
;;
;; Alternatives: `cd %s', `test -d %s'
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (zerop
- (tramp-send-command-and-check
- multi-method method user host
- (format "test -d %s"
- (tramp-shell-quote-argument localname))
- t))))) ;run command in subshell
+ (with-file-property v localname "file-directory-p"
+ (zerop (tramp-run-test "-d" filename)))))
(defun tramp-handle-file-regular-p (filename)
- "Like `file-regular-p' for tramp files."
- (with-parsed-tramp-file-name filename nil
- (and (file-exists-p filename)
- (eq ?- (aref (nth 8 (file-attributes filename)) 0)))))
+ "Like `file-regular-p' for Tramp files."
+ (and (file-exists-p filename)
+ (eq ?- (aref (nth 8 (file-attributes filename)) 0))))
(defun tramp-handle-file-symlink-p (filename)
- "Like `file-symlink-p' for tramp files."
+ "Like `file-symlink-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
(let ((x (car (file-attributes filename))))
(when (stringp x)
;; When Tramp is running on VMS, then `file-name-absolute-p'
;; might do weird things.
(if (file-name-absolute-p x)
- (tramp-make-tramp-file-name
- multi-method method user host x)
+ (tramp-make-tramp-file-name method user host x)
x)))))
(defun tramp-handle-file-writable-p (filename)
- "Like `file-writable-p' for tramp files."
+ "Like `file-writable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (if (file-exists-p filename)
- ;; Existing files must be writable.
- (zerop (tramp-run-test "-w" filename))
- ;; If file doesn't exist, check if directory is writable.
- (and (zerop (tramp-run-test
- "-d" (file-name-directory filename)))
- (zerop (tramp-run-test
- "-w" (file-name-directory filename)))))))
+ (with-file-property v localname "file-writable-p"
+ (if (file-exists-p filename)
+ ;; Existing files must be writable.
+ (zerop (tramp-run-test "-w" filename))
+ ;; If file doesn't exist, check if directory is writable.
+ (and (zerop (tramp-run-test
+ "-d" (file-name-directory filename)))
+ (zerop (tramp-run-test
+ "-w" (file-name-directory filename))))))))
(defun tramp-handle-file-ownership-preserved-p (filename)
- "Like `file-ownership-preserved-p' for tramp files."
+ "Like `file-ownership-preserved-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
- (let ((attributes (file-attributes filename)))
- ;; Return t if the file doesn't exist, since it's true that no
- ;; information would be lost by an (attempted) delete and create.
- (or (null attributes)
- (= (nth 2 attributes)
- (tramp-get-remote-uid multi-method method user host))))))
+ (with-file-property v localname "file-ownership-preserved-p"
+ (let ((attributes (file-attributes filename)))
+ ;; Return t if the file doesn't exist, since it's true that no
+ ;; information would be lost by an (attempted) delete and create.
+ (or (null attributes)
+ (= (nth 2 attributes) (tramp-get-remote-uid v 'integer)))))))
;; Other file name ops.
-;; ;; Matthias K,Av(Bppe <mkoeppe@mail.math.uni-magdeburg.de>
-;; (defun tramp-handle-directory-file-name (directory)
-;; "Like `directory-file-name' for tramp files."
-;; (if (and (eq (aref directory (- (length directory) 1)) ?/)
-;; (not (eq (aref directory (- (length directory) 2)) ?:)))
-;; (substring directory 0 (- (length directory) 1))
-;; directory))
-
-;; ;; Philippe Troin <phil@fifi.org>
-;; (defun tramp-handle-directory-file-name (directory)
-;; "Like `directory-file-name' for tramp files."
-;; (with-parsed-tramp-file-name directory nil
-;; (let ((directory-length-1 (1- (length directory))))
-;; (save-match-data
-;; (if (and (eq (aref directory directory-length-1) ?/)
-;; (eq (string-match tramp-file-name-regexp directory) 0)
-;; (/= (match-end 0) directory-length-1))
-;; (substring directory 0 directory-length-1)
-;; directory)))))
-
(defun tramp-handle-directory-file-name (directory)
- "Like `directory-file-name' for tramp files."
+ "Like `directory-file-name' for Tramp files."
;; If localname component of filename is "/", leave it unchanged.
;; Otherwise, remove any trailing slash from localname component.
;; Method, host, etc, are unchanged. Does it make sense to try
@@ -2743,145 +2716,150 @@ of."
;; Directory listings.
-(defun tramp-handle-directory-files (directory
- &optional full match nosort files-only)
- "Like `directory-files' for tramp files."
- (with-parsed-tramp-file-name directory nil
- (let (result x)
- (save-excursion
- (tramp-barf-unless-okay
- multi-method method user host
- (concat "cd " (tramp-shell-quote-argument localname))
- nil
- 'file-error
- "tramp-handle-directory-files: couldn't `cd %s'"
- (tramp-shell-quote-argument localname))
- (tramp-send-command
- multi-method method user host
- (concat (tramp-get-ls-command multi-method method user host)
- " -a | cat"))
- (tramp-wait-for-output)
- (goto-char (point-max))
- (while (zerop (forward-line -1))
- (setq x (buffer-substring (point)
- (tramp-line-end-position)))
- (when (or (not match) (string-match match x))
- (if full
- (push (concat (file-name-as-directory directory)
- x)
- result)
- (push x result))))
- (tramp-send-command multi-method method user host "cd")
- (tramp-wait-for-output)
- ;; Remove non-files or non-directories if necessary. Using
- ;; the remote shell for this would probably be way faster.
- ;; Maybe something could be adapted from
- ;; tramp-handle-file-name-all-completions.
- (when files-only
- (let ((temp (nreverse result))
- item)
- (setq result nil)
- (if (equal files-only t)
- ;; files only
- (while temp
- (setq item (pop temp))
- (when (file-regular-p item)
- (push item result)))
- ;; directories only
- (while temp
- (setq item (pop temp))
- (when (file-directory-p item)
- (push item result)))))))
+(defun tramp-handle-directory-files
+ (directory &optional full match nosort files-only)
+ "Like `directory-files' for Tramp files."
+ ;; FILES-ONLY is valid for XEmacs only.
+ (when (file-directory-p directory)
+ (setq directory (expand-file-name directory))
+ (let ((temp (nreverse (file-name-all-completions "" directory)))
+ result item)
+
+ (while temp
+ (setq item (directory-file-name (pop temp)))
+ (when (and (or (null match) (string-match match item))
+ (or (null files-only)
+ ;; files only
+ (and (equal files-only t) (file-regular-p item))
+ ;; directories only
+ (file-directory-p item)))
+ (push (if full (expand-file-name item directory) item)
+ result)))
result)))
(defun tramp-handle-directory-files-and-attributes
(directory &optional full match nosort id-format)
- "Like `directory-files-and-attributes' for tramp files."
- (when (tramp-handle-file-exists-p directory)
- (save-excursion
- (setq directory (tramp-handle-expand-file-name directory))
- (with-parsed-tramp-file-name directory nil
- (tramp-maybe-send-perl-script multi-method method user host
- tramp-perl-directory-files-and-attributes
- "tramp_directory_files_and_attributes")
- (tramp-send-command multi-method method user host
- (format "tramp_directory_files_and_attributes %s %s"
- (tramp-shell-quote-argument localname)
- (or id-format 'integer)))
- (tramp-wait-for-output)
- (let* ((root (cons nil (let ((object (read (current-buffer))))
- (when (stringp object)
- (error object))
- object)))
- (cell root))
- (while (cdr cell)
- (if (and match (not (string-match match (car (cadr cell)))))
- ;; Remove from list
- (setcdr cell (cddr cell))
- ;; Include in list
- (setq cell (cdr cell))
- (let ((l (car cell)))
- (tramp-convert-file-attributes multi-method method user host
- (cdr l))
- ;; If FULL, make file name absolute
- (when full (setcar l (concat directory "/" (car l)))))))
- (if nosort
- (cdr root)
- (sort (cdr root) (lambda (x y) (string< (car x) (car y))))))))))
+ "Like `directory-files-and-attributes' for Tramp files."
+ (unless id-format (setq id-format 'integer))
+ (when (file-directory-p directory)
+ (setq directory (expand-file-name directory))
+ (let* ((temp
+ (tramp-compat-copy-tree
+ (with-parsed-tramp-file-name directory nil
+ (with-file-property
+ v localname
+ (format "directory-files-and-attributes-%s" id-format)
+ (save-excursion
+ (mapcar
+ '(lambda (x)
+ (cons (car x)
+ (tramp-convert-file-attributes v (cdr x))))
+ (if (tramp-get-remote-stat v)
+ (tramp-handle-directory-files-and-attributes-with-stat
+ v localname id-format)
+ (if (tramp-get-remote-perl v)
+ (tramp-handle-directory-files-and-attributes-with-perl
+ v localname id-format)))))))))
+ result item)
+
+ (while temp
+ (setq item (pop temp))
+ (when (or (null match) (string-match match (car item)))
+ (when full
+ (setcar item (expand-file-name (car item) directory)))
+ (push item result)))
+
+ (if nosort
+ result
+ (sort result (lambda (x y) (string< (car x) (car y))))))))
+
+(defun tramp-handle-directory-files-and-attributes-with-perl
+ (vec localname &optional id-format)
+ "Implement `directory-files-and-attributes' for Tramp files using a Perl script."
+ (tramp-message vec 5 "directory-files-and-attributes with perl: %s" localname)
+ (tramp-maybe-send-script
+ vec tramp-perl-directory-files-and-attributes
+ "tramp_perl_directory_files_and_attributes")
+ (let ((object
+ (tramp-send-command-and-read
+ vec
+ (format "tramp_perl_directory_files_and_attributes %s %s"
+ (tramp-shell-quote-argument localname) id-format))))
+ (when (stringp object) (tramp-error vec 'file-error object))
+ object))
+
+(defun tramp-handle-directory-files-and-attributes-with-stat
+ (vec localname &optional id-format)
+ "Implement `directory-files-and-attributes' for Tramp files using stat(1) command."
+ (tramp-message vec 5 "directory-files-and-attributes with stat: %s" localname)
+ (tramp-send-command-and-read
+ vec
+ (format
+ (concat
+ "cd %s; echo \"(\"; (%s -ab | xargs "
+ "%s -c '(\"%%n\" (\"%%N\") %%h %s %s %%X.0 %%Y.0 %%Z.0 %%s.0 \"%%A\" t %%i.0 -1)'); "
+ "echo \")\"")
+ (tramp-shell-quote-argument localname)
+ (tramp-get-ls-command vec)
+ (tramp-get-remote-stat vec)
+ (if (eq id-format 'integer) "%u" "\"%U\"")
+ (if (eq id-format 'integer) "%g" "\"%G\""))))
;; This function should return "foo/" for directories and "bar" for
-;; files. We use `ls -ad' to get a list of files (including
-;; directories), and `find . -type d \! -name . -prune' to get a list
-;; of directories.
+;; files.
(defun tramp-handle-file-name-all-completions (filename directory)
- "Like `file-name-all-completions' for tramp files."
- (with-parsed-tramp-file-name directory nil
- (unless (save-match-data (string-match "/" filename))
- (let* ((nowild tramp-completion-without-shell-p)
- result)
- (save-excursion
- (tramp-barf-unless-okay
- multi-method method user host
- (format "cd %s" (tramp-shell-quote-argument localname))
- nil 'file-error
- "tramp-handle-file-name-all-completions: Couldn't `cd %s'"
- (tramp-shell-quote-argument localname))
-
- ;; Get a list of directories and files, including reliably
- ;; tagging the directories with a trailing '/'. Because I
- ;; rock. --daniel@danann.net
- (tramp-send-command
- multi-method method user host
- (format (concat "%s -a %s 2>/dev/null | while read f; do "
- "if test -d \"$f\" 2>/dev/null; "
- "then echo \"$f/\"; else echo \"$f\"; fi; done")
- (tramp-get-ls-command multi-method method user host)
- (if (or nowild (zerop (length filename)))
- ""
- (format "-d %s*"
- (tramp-shell-quote-argument filename)))))
-
- ;; Now grab the output.
- (tramp-wait-for-output)
- (goto-char (point-max))
- (while (zerop (forward-line -1))
- (push (buffer-substring (point)
- (tramp-line-end-position))
- result))
-
- (tramp-send-command multi-method method user host "cd")
- (tramp-wait-for-output)
-
- ;; Return the list.
- (if nowild
- (all-completions filename (mapcar 'list result))
- result))))))
-
+ "Like `file-name-all-completions' for Tramp files."
+ (unless (save-match-data (string-match "/" filename))
+ (with-parsed-tramp-file-name (expand-file-name directory) nil
+ ;; Flush the directory cache. There could be changed directory
+ ;; contents.
+ (when (and (integerp tramp-completion-reread-directory-timeout)
+ (> (tramp-time-diff
+ (current-time)
+ (tramp-get-file-property
+ v localname "last-completion" '(0 0 0)))
+ tramp-completion-reread-directory-timeout))
+ (tramp-flush-file-property v localname))
+
+ (all-completions
+ filename
+ (mapcar
+ 'list
+ (with-file-property v localname "file-name-all-completions"
+ (let (result)
+ (tramp-barf-unless-okay
+ v
+ (format "cd %s" (tramp-shell-quote-argument localname))
+ "tramp-handle-file-name-all-completions: Couldn't `cd %s'"
+ (tramp-shell-quote-argument localname))
+
+ ;; Get a list of directories and files, including reliably
+ ;; tagging the directories with a trailing '/'. Because I
+ ;; rock. --daniel@danann.net
+ (tramp-send-command
+ v
+ (format (concat "%s -ab 2>/dev/null | while read f; do "
+ "if %s -d \"$f\" 2>/dev/null; "
+ "then echo \"$f/\"; else echo \"$f\"; fi; done")
+ (tramp-get-ls-command v)
+ (tramp-get-test-command v)))
+
+ ;; Now grab the output.
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-max))
+ (while (zerop (forward-line -1))
+ (push (buffer-substring
+ (point) (tramp-compat-line-end-position))
+ result)))
+
+ (tramp-set-file-property
+ v localname "last-completion" (current-time))
+ result)))))))
;; The following isn't needed for Emacs 20 but for 19.34?
(defun tramp-handle-file-name-completion
(filename directory &optional predicate)
- "Like `file-name-completion' for tramp files."
+ "Like `file-name-completion' for Tramp files."
(unless (tramp-tramp-file-p directory)
(error
"tramp-handle-file-name-completion invoked on non-tramp directory `%s'"
@@ -2896,18 +2874,17 @@ of."
(defun tramp-handle-add-name-to-file
(filename newname &optional ok-if-already-exists)
- "Like `add-name-to-file' for tramp files."
+ "Like `add-name-to-file' for Tramp files."
+ (unless (tramp-equal-remote filename newname)
+ (with-parsed-tramp-file-name
+ (if (tramp-tramp-file-p filename) filename newname) nil
+ (tramp-error
+ v 'file-error
+ "add-name-to-file: %s"
+ "only implemented for same method, same user, same host")))
(with-parsed-tramp-file-name filename v1
(with-parsed-tramp-file-name newname v2
- (let ((ln (when v1 (tramp-get-remote-ln
- v1-multi-method v1-method v1-user v1-host))))
- (unless (and v1-method v2-method v1-user v2-user v1-host v2-host
- (equal v1-multi-method v2-multi-method)
- (equal v1-method v2-method)
- (equal v1-user v2-user)
- (equal v1-host v2-host))
- (error "add-name-to-file: %s"
- "only implemented for same method, same user, same host"))
+ (let ((ln (when v1 (tramp-get-remote-ln v1))))
(when (and (not ok-if-already-exists)
(file-exists-p newname)
(not (numberp ok-if-already-exists))
@@ -2915,224 +2892,295 @@ of."
(format
"File %s already exists; make it a new name anyway? "
newname)))
- (error "add-name-to-file: file %s already exists" newname))
+ (tramp-error
+ v2 'file-error
+ "add-name-to-file: file %s already exists" newname))
+ (tramp-flush-file-property v2 v2-localname)
(tramp-barf-unless-okay
- v1-multi-method v1-method v1-user v1-host
+ v1
(format "%s %s %s" ln (tramp-shell-quote-argument v1-localname)
(tramp-shell-quote-argument v2-localname))
- nil 'file-error
"error with add-name-to-file, see buffer `%s' for details"
(buffer-name))))))
(defun tramp-handle-copy-file
- (filename newname &optional ok-if-already-exists keep-date)
- "Like `copy-file' for tramp files."
+ (filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
+ "Like `copy-file' for Tramp files."
;; Check if both files are local -- invoke normal copy-file.
- ;; Otherwise, use tramp from local system.
+ ;; Otherwise, use Tramp from local system.
(setq filename (expand-file-name filename))
(setq newname (expand-file-name newname))
- ;; At least one file a tramp file?
- (if (or (tramp-tramp-file-p filename)
- (tramp-tramp-file-p newname))
- (tramp-do-copy-or-rename-file
- 'copy filename newname ok-if-already-exists keep-date)
+ (cond
+ ;; At least one file a Tramp file?
+ ((or (tramp-tramp-file-p filename)
+ (tramp-tramp-file-p newname))
+ (tramp-do-copy-or-rename-file
+ 'copy filename newname ok-if-already-exists keep-date preserve-uid-gid))
+ ;; Compat section.
+ (preserve-uid-gid
(tramp-run-real-handler
'copy-file
- (list filename newname ok-if-already-exists keep-date))))
+ (list filename newname ok-if-already-exists keep-date preserve-uid-gid)))
+ (t
+ (tramp-run-real-handler
+ 'copy-file (list filename newname ok-if-already-exists keep-date)))))
(defun tramp-handle-rename-file
(filename newname &optional ok-if-already-exists)
- "Like `rename-file' for tramp files."
+ "Like `rename-file' for Tramp files."
;; Check if both files are local -- invoke normal rename-file.
- ;; Otherwise, use tramp from local system.
+ ;; Otherwise, use Tramp from local system.
(setq filename (expand-file-name filename))
(setq newname (expand-file-name newname))
- ;; At least one file a tramp file?
+ ;; At least one file a Tramp file?
(if (or (tramp-tramp-file-p filename)
(tramp-tramp-file-p newname))
(tramp-do-copy-or-rename-file
- 'rename filename newname ok-if-already-exists)
- (tramp-run-real-handler 'rename-file
- (list filename newname ok-if-already-exists))))
+ 'rename filename newname ok-if-already-exists t t)
+ (tramp-run-real-handler
+ 'rename-file (list filename newname ok-if-already-exists))))
(defun tramp-do-copy-or-rename-file
- (op filename newname &optional ok-if-already-exists keep-date)
+ (op filename newname &optional ok-if-already-exists keep-date preserve-uid-gid)
"Copy or rename a remote file.
OP must be `copy' or `rename' and indicates the operation to perform.
FILENAME specifies the file to copy or rename, NEWNAME is the name of
the new file (for copy) or the new name of the file (for rename).
OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already.
KEEP-DATE means to make sure that NEWNAME has the same timestamp
-as FILENAME.
+as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
+the uid and gid if both files are on the same host.
This function is invoked by `tramp-handle-copy-file' and
`tramp-handle-rename-file'. It is an error if OP is neither of `copy'
and `rename'. FILENAME and NEWNAME must be absolute file names."
(unless (memq op '(copy rename))
(error "Unknown operation `%s', must be `copy' or `rename'" op))
- (unless ok-if-already-exists
- (when (file-exists-p newname)
- (signal 'file-already-exists
- (list "File already exists" newname))))
(let ((t1 (tramp-tramp-file-p filename))
- (t2 (tramp-tramp-file-p newname))
- v1-multi-method v1-method v1-user v1-host v1-localname
- v2-multi-method v2-method v2-user v2-host v2-localname)
-
- ;; Check which ones of source and target are Tramp files.
- ;; We cannot invoke `with-parsed-tramp-file-name';
- ;; it fails if the file isn't a Tramp file name.
- (if t1
- (with-parsed-tramp-file-name filename l
- (setq v1-multi-method l-multi-method
- v1-method l-method
- v1-user l-user
- v1-host l-host
- v1-localname l-localname))
- (setq v1-localname filename))
- (if t2
- (with-parsed-tramp-file-name newname l
- (setq v2-multi-method l-multi-method
- v2-method l-method
- v2-user l-user
- v2-host l-host
- v2-localname l-localname))
- (setq v2-localname newname))
+ (t2 (tramp-tramp-file-p newname)))
- (cond
- ;; Both are Tramp files.
- ((and t1 t2)
- (cond
- ;; Shortcut: if method, host, user are the same for both
- ;; files, we invoke `cp' or `mv' on the remote host
- ;; directly.
- ((and (equal v1-multi-method v2-multi-method)
- (equal v1-method v2-method)
- (equal v1-user v2-user)
- (equal v1-host v2-host))
- (tramp-do-copy-or-rename-file-directly
- op v1-multi-method v1-method v1-user v1-host
- v1-localname v2-localname keep-date))
- ;; If both source and target are Tramp files,
- ;; both are using the same copy-program, then we
- ;; can invoke rcp directly. Note that
- ;; default-directory should point to a local
- ;; directory if we want to invoke rcp.
- ((and (not v1-multi-method)
- (not v2-multi-method)
- (equal v1-method v2-method)
- (tramp-method-out-of-band-p
- v1-multi-method v1-method v1-user v1-host)
- (not (string-match "\\([^#]*\\)#\\(.*\\)" v1-host))
- (not (string-match "\\([^#]*\\)#\\(.*\\)" v2-host)))
- (tramp-do-copy-or-rename-file-out-of-band
- op filename newname keep-date))
- ;; No shortcut was possible. So we copy the
- ;; file first. If the operation was `rename', we go
- ;; back and delete the original file (if the copy was
- ;; successful). The approach is simple-minded: we
- ;; create a new buffer, insert the contents of the
- ;; source file into it, then write out the buffer to
- ;; the target file. The advantage is that it doesn't
- ;; matter which filename handlers are used for the
- ;; source and target file.
- (t
- (tramp-do-copy-or-rename-file-via-buffer
- op filename newname keep-date))))
-
- ;; One file is a Tramp file, the other one is local.
- ((or t1 t2)
- ;; If the Tramp file has an out-of-band method, the corresponding
- ;; copy-program can be invoked.
- (if (and (not v1-multi-method)
- (not v2-multi-method)
- (or (and t1 (tramp-method-out-of-band-p
- v1-multi-method v1-method v1-user v1-host))
- (and t2 (tramp-method-out-of-band-p
- v2-multi-method v2-method v2-user v2-host))))
- (tramp-do-copy-or-rename-file-out-of-band
- op filename newname keep-date)
- ;; Use the generic method via a Tramp buffer.
- (tramp-do-copy-or-rename-file-via-buffer
- op filename newname keep-date)))
+ (unless ok-if-already-exists
+ (when (and t2 (file-exists-p newname))
+ (with-parsed-tramp-file-name newname nil
+ (tramp-error
+ v 'file-already-exists "File %s already exists" newname))))
- (t
- ;; One of them must be a Tramp file.
- (error "Tramp implementation says this cannot happen")))))
+ (prog1
+ (cond
+ ;; Both are Tramp files.
+ ((and t1 t2)
+ (with-parsed-tramp-file-name filename v1
+ (with-parsed-tramp-file-name newname v2
+ (cond
+ ;; Shortcut: if method, host, user are the same for both
+ ;; files, we invoke `cp' or `mv' on the remote host
+ ;; directly.
+ ((tramp-equal-remote filename newname)
+ (tramp-do-copy-or-rename-file-directly
+ op filename newname
+ ok-if-already-exists keep-date preserve-uid-gid))
+
+ ;; If both source and target are Tramp files,
+ ;; both are using the same copy-program, then we
+ ;; can invoke rcp directly. Note that
+ ;; default-directory should point to a local
+ ;; directory if we want to invoke rcp.
+ ((and (equal v1-method v2-method)
+ (tramp-method-out-of-band-p v1)
+ (> (nth 7 (file-attributes filename))
+ tramp-copy-size-limit))
+ (tramp-do-copy-or-rename-file-out-of-band
+ op filename newname keep-date))
+
+ ;; No shortcut was possible. So we copy the
+ ;; file first. If the operation was `rename', we go
+ ;; back and delete the original file (if the copy was
+ ;; successful). The approach is simple-minded: we
+ ;; create a new buffer, insert the contents of the
+ ;; source file into it, then write out the buffer to
+ ;; the target file. The advantage is that it doesn't
+ ;; matter which filename handlers are used for the
+ ;; source and target file.
+ (t
+ (tramp-do-copy-or-rename-file-via-buffer
+ op filename newname keep-date))))))
+
+ ;; One file is a Tramp file, the other one is local.
+ ((or t1 t2)
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+ (cond
+ ;; Fast track on local machine.
+ ((tramp-local-host-p v)
+ (tramp-do-copy-or-rename-file-directly
+ op filename newname
+ ok-if-already-exists keep-date preserve-uid-gid))
+
+ ;; If the Tramp file has an out-of-band method, the corresponding
+ ;; copy-program can be invoked.
+ ((and (tramp-method-out-of-band-p v)
+ (> (nth 7 (file-attributes filename))
+ tramp-copy-size-limit))
+ (tramp-do-copy-or-rename-file-out-of-band
+ op filename newname keep-date))
+
+ ;; Use the inline method via a Tramp buffer.
+ (t (tramp-do-copy-or-rename-file-via-buffer
+ op filename newname keep-date)))))
+
+ (t
+ ;; One of them must be a Tramp file.
+ (error "Tramp implementation says this cannot happen")))
+
+ ;; When newname did exist, we have wrong cached values.
+ (when t2
+ (with-parsed-tramp-file-name newname nil
+ (tramp-flush-file-property v localname))))))
(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date)
"Use an Emacs buffer to copy or rename a file.
First arg OP is either `copy' or `rename' and indicates the operation.
FILENAME is the source file, NEWNAME the target file.
KEEP-DATE is non-nil if NEWNAME should have the same timestamp as FILENAME."
- (let ((trampbuf (get-buffer-create "*tramp output*"))
- (modtime (nth 5 (file-attributes filename))))
- (when (and keep-date (or (null modtime) (equal modtime '(0 0))))
- (tramp-message
- 1 (concat "Warning: cannot preserve file time stamp"
- " with inline copying across machines")))
- (save-excursion
- (set-buffer trampbuf) (erase-buffer)
- (insert-file-contents-literally filename)
- ;; We don't want the target file to be compressed, so we let-bind
- ;; `jka-compr-inhibit' to t.
- (let ((coding-system-for-write 'binary)
- (jka-compr-inhibit t))
- (write-region (point-min) (point-max) newname))
- ;; KEEP-DATE handling.
- (when keep-date
- (when (and (not (null modtime))
- (not (equal modtime '(0 0))))
- (tramp-touch newname modtime)))
- ;; Set the mode.
- (set-file-modes newname (file-modes filename)))
+ (let ((modtime (nth 5 (file-attributes filename))))
+ (unwind-protect
+ (with-temp-buffer
+ (let ((coding-system-for-read 'binary))
+ (insert-file-contents-literally filename))
+ ;; We don't want the target file to be compressed, so we
+ ;; let-bind `jka-compr-inhibit' to t.
+ (let ((coding-system-for-write 'binary)
+ (jka-compr-inhibit t))
+ (write-region (point-min) (point-max) newname))))
+ ;; KEEP-DATE handling.
+ (when keep-date (set-file-times newname modtime))
+ ;; Set the mode.
+ (set-file-modes newname (file-modes filename))
;; If the operation was `rename', delete the original file.
(unless (eq op 'copy)
(delete-file filename))))
(defun tramp-do-copy-or-rename-file-directly
- (op multi-method method user host localname1 localname2 keep-date)
+ (op filename newname ok-if-already-exists keep-date preserve-uid-gid)
"Invokes `cp' or `mv' on the remote system.
OP must be one of `copy' or `rename', indicating `cp' or `mv',
-respectively. METHOD, USER, and HOST specify the connection.
-LOCALNAME1 and LOCALNAME2 specify the two arguments of `cp' or `mv'.
-If KEEP-DATE is non-nil, preserve the time stamp when copying."
- ;; CCC: What happens to the timestamp when renaming?
- (let ((cmd (cond ((and (eq op 'copy) keep-date) "cp -f -p")
- ((eq op 'copy) "cp -f")
- ((eq op 'rename) "mv -f")
- (t (error
- "Unknown operation `%s', must be `copy' or `rename'"
- op)))))
- (save-excursion
- (tramp-send-command
- multi-method method user host
- (format "%s %s %s"
- cmd
- (tramp-shell-quote-argument localname1)
- (tramp-shell-quote-argument localname2)))
- (tramp-wait-for-output)
- (goto-char (point-min))
- (unless
- (or
- (and (eq op 'copy) keep-date
- ;; Mask cp -f error.
- (re-search-forward tramp-operation-not-permitted-regexp nil t))
- (zerop (tramp-send-command-and-check
- multi-method method user host nil nil)))
- (pop-to-buffer (current-buffer))
- (signal 'file-error
- (format "Copying directly failed, see buffer `%s' for details."
- (buffer-name)))))
- ;; Set the mode.
- ;; CCC: Maybe `chmod --reference=localname1 localname2' could be used
- ;; where available?
- (unless (or (eq op 'rename) keep-date)
- (set-file-modes
- (tramp-make-tramp-file-name multi-method method user host localname2)
- (file-modes
- (tramp-make-tramp-file-name
- multi-method method user host localname1))))))
+respectively. FILENAME specifies the file to copy or rename,
+NEWNAME is the name of the new file (for copy) or the new name of
+the file (for rename). Both files must reside on the same host.
+KEEP-DATE means to make sure that NEWNAME has the same timestamp
+as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep
+the uid and gid from FILENAME."
+ (let ((t1 (tramp-tramp-file-p filename))
+ (t2 (tramp-tramp-file-p newname)))
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+ (let* ((cmd (cond ((and (eq op 'copy) preserve-uid-gid) "cp -f -p")
+ ((eq op 'copy) "cp -f")
+ ((eq op 'rename) "mv -f")
+ (t (tramp-error
+ v 'file-error
+ "Unknown operation `%s', must be `copy' or `rename'"
+ op))))
+ (localname1
+ (if t1 (tramp-handle-file-remote-p filename 'localname) filename))
+ (localname2
+ (if t2 (tramp-handle-file-remote-p newname 'localname) newname))
+ (prefix (file-remote-p (if t1 filename newname))))
+
+ (cond
+ ;; Both files are on a remote host, with same user.
+ ((and t1 t2)
+ (tramp-send-command
+ v
+ (format "%s %s %s" cmd
+ (tramp-shell-quote-argument localname1)
+ (tramp-shell-quote-argument localname2)))
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-min))
+ (unless
+ (or
+ (and keep-date
+ ;; Mask cp -f error.
+ (re-search-forward
+ tramp-operation-not-permitted-regexp nil t))
+ (zerop (tramp-send-command-and-check v nil)))
+ (tramp-error-with-buffer
+ nil v 'file-error
+ "Copying directly failed, see buffer `%s' for details."
+ (buffer-name)))))
+
+ ;; We are on the local host.
+ ((or t1 t2)
+ (cond
+ ;; We can do it directly.
+ ((and (file-readable-p localname1)
+ (file-writable-p (file-name-directory localname2))
+ (or (file-directory-p localname2)
+ (file-writable-p localname2)))
+ (if (eq op 'copy)
+ (tramp-compat-copy-file
+ localname1 localname2 ok-if-already-exists
+ keep-date preserve-uid-gid)
+ (rename-file localname1 localname2 ok-if-already-exists)))
+
+ ;; We can do it directly with `tramp-send-command'
+ ((and (file-readable-p (concat prefix localname1))
+ (file-writable-p
+ (file-name-directory (concat prefix localname2))))
+ (tramp-do-copy-or-rename-file-directly
+ op (concat prefix localname1) (concat prefix localname2)
+ ok-if-already-exists keep-date t)
+ ;; We must change the ownership to the local user.
+ (tramp-set-file-uid-gid
+ (concat prefix localname2)
+ (tramp-get-local-uid 'integer)
+ (tramp-get-local-gid 'integer)))
+
+ ;; We need a temporary file in between.
+ (t
+ ;; Create the temporary file.
+ (let ((tmpfile (tramp-compat-make-temp-file localname1)))
+ (cond
+ (t1
+ (tramp-send-command
+ v (format
+ "%s %s %s" cmd
+ (tramp-shell-quote-argument localname1)
+ (tramp-shell-quote-argument tmpfile)))
+ ;; We must change the ownership as remote user.
+ (tramp-set-file-uid-gid
+ (concat prefix tmpfile)
+ (tramp-get-local-uid 'integer)
+ (tramp-get-local-gid 'integer)))
+ (t2
+ (if (eq op 'copy)
+ (tramp-compat-copy-file
+ localname1 tmpfile ok-if-already-exists
+ keep-date preserve-uid-gid)
+ (rename-file localname1 tmpfile ok-if-already-exists))
+ ;; We must change the ownership as local user.
+ (tramp-set-file-uid-gid
+ tmpfile
+ (tramp-get-remote-uid v 'integer)
+ (tramp-get-remote-gid v 'integer))))
+
+ ;; Move the temporary file to its destination.
+ (cond
+ (t2
+ (tramp-send-command
+ v (format
+ "mv -f %s %s"
+ (tramp-shell-quote-argument tmpfile)
+ (tramp-shell-quote-argument localname2))))
+ (t1
+ (rename-file tmpfile localname2 ok-if-already-exists)))))))))
+
+ ;; Set the time and mode. Mask possible errors.
+ ;; Won't be applied for 'rename.
+ (condition-case nil
+ (when (and keep-date (not preserve-uid-gid))
+ (set-file-times newname (nth 5 (file-attributes filename)))
+ (set-file-modes newname (file-modes filename)))
+ (error)))))
+
(defun tramp-do-copy-or-rename-file-out-of-band (op filename newname keep-date)
"Invoke rcp program to copy.
@@ -3140,234 +3188,171 @@ One of FILENAME and NEWNAME must be a Tramp name, the other must
be a local filename. The method used must be an out-of-band method."
(let ((t1 (tramp-tramp-file-p filename))
(t2 (tramp-tramp-file-p newname))
- v1-multi-method v1-method v1-user v1-host v1-localname
- v2-multi-method v2-method v2-user v2-host v2-localname
- multi-method method user host copy-program copy-args
- source target trampbuf)
-
- ;; Check which ones of source and target are Tramp files.
- ;; We cannot invoke `with-parsed-tramp-file-name';
- ;; it fails if the file isn't a Tramp file name.
- (if t1
- (with-parsed-tramp-file-name filename l
- (setq v1-multi-method l-multi-method
- v1-method l-method
- v1-user l-user
- v1-host l-host
- v1-localname l-localname
- multi-method l-multi-method
- method (tramp-find-method
- v1-multi-method v1-method v1-user v1-host)
- user l-user
- host l-host
- copy-program (tramp-get-method-parameter
- v1-multi-method method
- v1-user v1-host 'tramp-copy-program)
- copy-args (tramp-get-method-parameter
- v1-multi-method method
- v1-user v1-host 'tramp-copy-args)))
- (setq v1-localname filename))
-
- (if t2
- (with-parsed-tramp-file-name newname l
- (setq v2-multi-method l-multi-method
- v2-method l-method
- v2-user l-user
- v2-host l-host
- v2-localname l-localname
- multi-method l-multi-method
- method (tramp-find-method
- v2-multi-method v2-method v2-user v2-host)
- user l-user
- host l-host
- copy-program (tramp-get-method-parameter
- v2-multi-method method
- v2-user v2-host 'tramp-copy-program)
- copy-args (tramp-get-method-parameter
- v2-multi-method method
- v2-user v2-host 'tramp-copy-args)))
- (setq v2-localname newname))
-
- ;; The following should be changed. We need a more general
- ;; mechanism to parse extra host args.
- (if (not t1)
- (setq source v1-localname)
- (when (string-match "\\([^#]*\\)#\\(.*\\)" v1-host)
- (setq copy-args (cons "-P" (cons (match-string 2 v1-host) copy-args)))
- (setq v1-host (match-string 1 v1-host)))
- (setq source
- (tramp-make-copy-program-file-name
- v1-user v1-host
- (tramp-shell-quote-argument v1-localname))))
-
- (if (not t2)
- (setq target v2-localname)
- (when (string-match "\\([^#]*\\)#\\(.*\\)" v2-host)
- (setq copy-args (cons "-P" (cons (match-string 2 v2-host) copy-args)))
- (setq v2-host (match-string 1 v2-host)))
- (setq target
- (tramp-make-copy-program-file-name
- v2-user v2-host
- (tramp-shell-quote-argument v2-localname))))
-
- ;; Handle ControlMaster/ControlPath
- (setq copy-args
- (mapcar
- (lambda (x)
- (format-spec
- x `((?t . ,(format "/tmp/%s" tramp-temp-name-prefix)))))
- copy-args))
-
- ;; Handle keep-date argument
- (when keep-date
- (if t1
- (setq copy-args
- (cons (tramp-get-method-parameter
- v1-multi-method method
- v1-user v1-host 'tramp-copy-keep-date-arg)
- copy-args))
- (setq copy-args
- (cons (tramp-get-method-parameter
- v2-multi-method method
- v2-user v2-host 'tramp-copy-keep-date-arg)
- copy-args))))
-
- (setq copy-args (append copy-args (list source target))
- trampbuf (generate-new-buffer
- (tramp-buffer-name multi-method method user host)))
-
- ;; Use an asynchronous process. By this, password can be handled.
- (save-excursion
+ copy-program copy-args copy-keep-date port spec
+ source target)
+
+ (with-parsed-tramp-file-name (if t1 filename newname) nil
+
+ ;; Expand hops. Might be necessary for gateway methods.
+ (setq v (car (tramp-compute-multi-hops v)))
+ (aset v 3 localname)
+
+ ;; Check which ones of source and target are Tramp files.
+ (setq source (if t1 (tramp-make-copy-program-file-name v) filename)
+ target (if t2 (tramp-make-copy-program-file-name v) newname))
+
+ ;; Check for port number. Until now, there's no need for handling
+ ;; like method, user, host.
+ (setq host (tramp-file-name-real-host v)
+ port (tramp-file-name-port v)
+ port (or (and port (number-to-string port)) ""))
+
+ ;; Compose copy command.
+ (setq spec `((?h . ,host) (?u . ,user) (?p . ,port)
+ (?t . ,(tramp-get-connection-property
+ (tramp-get-connection-process v) "temp-file" ""))
+ (?k . ,(if keep-date " " "")))
+ copy-program (tramp-get-method-parameter
+ method 'tramp-copy-program)
+ copy-keep-date (tramp-get-method-parameter
+ method 'tramp-copy-keep-date)
+ copy-args
+ (delq
+ nil
+ (mapcar
+ '(lambda (x)
+ (setq
+ ;; " " is indication for keep-date argument.
+ x (delete " " (mapcar '(lambda (y) (format-spec y spec)) x)))
+ (unless (member "" x) (mapconcat 'identity x " ")))
+ (tramp-get-method-parameter method 'tramp-copy-args))))
;; Check for program.
(when (and (fboundp 'executable-find)
- (not (executable-find copy-program)))
- (error "Cannot find copy program: %s" copy-program))
+ (not (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (executable-find copy-program))))
+ (tramp-error
+ v 'file-error "Cannot find copy program: %s" copy-program))
- (set-buffer trampbuf)
- (setq tramp-current-multi-method multi-method
- tramp-current-method method
- tramp-current-user user
- tramp-current-host host)
- (message "Transferring %s to %s..." filename newname)
+ (tramp-message v 0 "Transferring %s to %s..." filename newname)
- ;; Use rcp-like program for file transfer.
(unwind-protect
- (let* ((default-directory
- (if (and (stringp default-directory)
- (file-accessible-directory-p default-directory))
- default-directory
- (tramp-temporary-file-directory)))
- (p (apply 'start-process (buffer-name trampbuf) trampbuf
- copy-program copy-args)))
- (tramp-set-process-query-on-exit-flag p nil)
- (tramp-process-actions p multi-method method user host
- tramp-actions-copy-out-of-band))
- (kill-buffer trampbuf))
- (message "Transferring %s to %s...done" filename newname)
+ (with-temp-buffer
+ ;; The default directory must be remote.
+ (let ((default-directory
+ (file-name-directory (if t1 filename newname))))
+ ;; Set the transfer process properties.
+ (tramp-set-connection-property
+ v "process-name" (buffer-name (current-buffer)))
+ (tramp-set-connection-property
+ v "process-buffer" (current-buffer))
+
+ ;; Use an asynchronous process. By this, password can
+ ;; be handled. The default directory must be local, in
+ ;; order to apply the correct `copy-program'. We don't
+ ;; set a timeout, because the copying of large files can
+ ;; last longer than 60 secs.
+ (let ((p (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (apply 'start-process
+ (tramp-get-connection-property
+ v "process-name" nil)
+ (tramp-get-connection-property
+ v "process-buffer" nil)
+ copy-program
+ (append copy-args (list source target))))))
+ (tramp-message
+ v 6 "%s" (mapconcat 'identity (process-command p) " "))
+ (set-process-sentinel p 'tramp-flush-connection-property)
+ (tramp-set-process-query-on-exit-flag p nil)
+ (tramp-process-actions p v tramp-actions-copy-out-of-band))))
+
+ ;; Reset the transfer process properties.
+ (tramp-set-connection-property v "process-name" nil)
+ (tramp-set-connection-property v "process-buffer" nil))
+
+ (tramp-message v 0 "Transferring %s to %s...done" filename newname)
+
+ ;; Handle KEEP-DATE argument.
+ (when (and keep-date (not copy-keep-date))
+ (set-file-times newname (nth 5 (file-attributes filename))))
;; Set the mode.
- (unless keep-date
+ (unless (and keep-date copy-keep-date)
(set-file-modes newname (file-modes filename))))
;; If the operation was `rename', delete the original file.
(unless (eq op 'copy)
(delete-file filename))))
-;; mkdir
(defun tramp-handle-make-directory (dir &optional parents)
- "Like `make-directory' for tramp files."
+ "Like `make-directory' for Tramp files."
(setq dir (expand-file-name dir))
(with-parsed-tramp-file-name dir nil
(save-excursion
(tramp-barf-unless-okay
- multi-method method user host
- (format " %s %s"
+ v
+ (format "%s %s"
(if parents "mkdir -p" "mkdir")
(tramp-shell-quote-argument localname))
- nil 'file-error
"Couldn't make directory %s" dir))))
-;; CCC error checking?
(defun tramp-handle-delete-directory (directory)
- "Like `delete-directory' for tramp files."
+ "Like `delete-directory' for Tramp files."
(setq directory (expand-file-name directory))
(with-parsed-tramp-file-name directory nil
- (save-excursion
- (tramp-send-command
- multi-method method user host
- (format "rmdir %s ; echo ok"
- (tramp-shell-quote-argument localname)))
- (tramp-wait-for-output))))
+ (tramp-flush-directory-property v localname)
+ (unless (zerop (tramp-send-command-and-check
+ v
+ (format "rmdir -f %s"
+ (tramp-shell-quote-argument localname))))
+ (tramp-error v 'file-error "Couldn't delete %s" directory))))
(defun tramp-handle-delete-file (filename)
- "Like `delete-file' for tramp files."
+ "Like `delete-file' for Tramp files."
(setq filename (expand-file-name filename))
(with-parsed-tramp-file-name filename nil
- (save-excursion
- (unless (zerop (tramp-send-command-and-check
- multi-method method user host
- (format "rm -f %s"
- (tramp-shell-quote-argument localname))))
- (signal 'file-error "Couldn't delete Tramp file")))))
+ (tramp-flush-file-property v localname)
+ (unless (zerop (tramp-send-command-and-check
+ v
+ (format "rm -f %s"
+ (tramp-shell-quote-argument localname))))
+ (tramp-error v 'file-error "Couldn't delete %s" filename))))
;; Dired.
;; CCC: This does not seem to be enough. Something dies when
-;; we try and delete two directories under TRAMP :/
+;; we try and delete two directories under Tramp :/
(defun tramp-handle-dired-recursive-delete-directory (filename)
"Recursively delete the directory given.
-This is like `dired-recursive-delete-directory' for tramp files."
+This is like `dired-recursive-delete-directory' for Tramp files."
(with-parsed-tramp-file-name filename nil
- ;; run a shell command 'rm -r <localname>'
+ (tramp-flush-directory-property v filename)
+ ;; Run a shell command 'rm -r <localname>'
;; Code shamelessly stolen for the dired implementation and, um, hacked :)
- (or (file-exists-p filename)
- (signal
- 'file-error
- (list "Removing old file name" "no such directory" filename)))
+ (unless (file-exists-p filename)
+ (tramp-error v 'file-error "No such directory: %s" filename))
;; Which is better, -r or -R? (-r works for me <daniel@danann.net>)
- (tramp-send-command multi-method method user host
- (format "rm -r %s" (tramp-shell-quote-argument localname)))
+ (tramp-send-command
+ v
+ (format "rm -rf %s" (tramp-shell-quote-argument localname))
+ ;; Don't read the output, do it explicitely.
+ nil t)
;; Wait for the remote system to return to us...
;; This might take a while, allow it plenty of time.
- (tramp-wait-for-output 120)
+ (tramp-wait-for-output (tramp-get-connection-process v) 120)
;; Make sure that it worked...
(and (file-exists-p filename)
- (error "Failed to recursively delete %s" filename))))
-
-(defun tramp-handle-dired-call-process (program discard &rest arguments)
- "Like `dired-call-process' for tramp files."
- (with-parsed-tramp-file-name default-directory nil
- (save-excursion
- (tramp-barf-unless-okay
- multi-method method user host
- (format "cd %s" (tramp-shell-quote-argument localname))
- nil 'file-error
- "tramp-handle-dired-call-process: Couldn't `cd %s'"
- (tramp-shell-quote-argument localname))
- (tramp-send-command
- multi-method method user host
- (mapconcat #'tramp-shell-quote-argument (cons program arguments) " "))
- (tramp-wait-for-output))
- (unless discard
- ;; We cannot use `insert-buffer' because the tramp buffer
- ;; changes its contents before insertion due to calling
- ;; `expand-file' and alike.
- (insert
- (with-current-buffer
- (tramp-get-buffer multi-method method user host)
- (buffer-string))))
- (save-excursion
- (prog1
- (tramp-send-command-and-check multi-method method user host nil)
- (tramp-send-command multi-method method user host "cd")
- (tramp-wait-for-output)))))
+ (tramp-error
+ v 'file-error "Failed to recursively delete %s" filename))))
(defun tramp-handle-dired-compress-file (file &rest ok-flag)
- "Like `dired-compress-file' for tramp files."
+ "Like `dired-compress-file' for Tramp files."
;; OK-FLAG is valid for XEmacs only, but not implemented.
;; Code stolen mainly from dired-aux.el.
(with-parsed-tramp-file-name file nil
+ (tramp-flush-file-property v localname)
(save-excursion
(let ((suffixes
(if (not (featurep 'xemacs))
@@ -3393,11 +3378,10 @@ This is like `dired-recursive-delete-directory' for tramp files."
nil)
((and suffix (nth 2 suffix))
;; We found an uncompression rule.
- (message "Uncompressing %s..." file)
+ (tramp-message v 0 "Uncompressing %s..." file)
(when (zerop (tramp-send-command-and-check
- multi-method method user host
- (concat (nth 2 suffix) " " localname)))
- (message "Uncompressing %s...done" file)
+ v (concat (nth 2 suffix) " " localname)))
+ (tramp-message v 0 "Uncompressing %s...done" file)
;; `dired-remove-file' is not defined in XEmacs
(funcall (symbol-function 'dired-remove-file) file)
(string-match (car suffix) file)
@@ -3405,11 +3389,10 @@ This is like `dired-recursive-delete-directory' for tramp files."
(t
;; We don't recognize the file as compressed, so compress it.
;; Try gzip.
- (message "Compressing %s..." file)
+ (tramp-message v 0 "Compressing %s..." file)
(when (zerop (tramp-send-command-and-check
- multi-method method user host
- (concat "gzip -f " localname)))
- (message "Compressing %s...done" file)
+ v (concat "gzip -f " localname)))
+ (tramp-message v 0 "Compressing %s...done" file)
;; `dired-remove-file' is not defined in XEmacs
(funcall (symbol-function 'dired-remove-file) file)
(cond ((file-exists-p (concat file ".gz"))
@@ -3433,21 +3416,21 @@ This is like `dired-recursive-delete-directory' for tramp files."
(defun tramp-handle-insert-directory
(filename switches &optional wildcard full-directory-p)
- "Like `insert-directory' for tramp files."
- (if (and (featurep 'ls-lisp)
- (not (symbol-value 'ls-lisp-use-insert-directory-program)))
- (tramp-run-real-handler
- 'insert-directory (list filename switches wildcard full-directory-p))
- ;; For the moment, we assume that the remote "ls" program does not
- ;; grok "--dired". In the future, we should detect this on
- ;; connection setup.
- (when (string-match "^--dired\\s-+" switches)
- (setq switches (replace-match "" nil t switches)))
- (setq filename (expand-file-name filename))
- (with-parsed-tramp-file-name filename nil
- (tramp-message-for-buffer
- multi-method method user host 10
- "Inserting directory `ls %s %s', wildcard %s, fulldir %s"
+ "Like `insert-directory' for Tramp files."
+ (setq filename (expand-file-name filename))
+ (with-parsed-tramp-file-name filename nil
+ (tramp-flush-file-property v localname)
+ (if (and (featurep 'ls-lisp)
+ (not (symbol-value 'ls-lisp-use-insert-directory-program)))
+ (tramp-run-real-handler
+ 'insert-directory (list filename switches wildcard full-directory-p))
+ ;; For the moment, we assume that the remote "ls" program does not
+ ;; grok "--dired". In the future, we should detect this on
+ ;; connection setup.
+ (when (string-match "^--dired\\s-+" switches)
+ (setq switches (replace-match "" nil t switches)))
+ (tramp-message
+ v 4 "Inserting directory `ls %s %s', wildcard %s, fulldir %s"
switches filename (if wildcard "yes" "no")
(if full-directory-p "yes" "no"))
(when wildcard
@@ -3459,80 +3442,44 @@ This is like `dired-recursive-delete-directory' for tramp files."
(setq switches (concat "-d " switches)))
(when wildcard
(setq switches (concat switches " " wildcard)))
- (save-excursion
- ;; If `full-directory-p', we just say `ls -l FILENAME'.
- ;; Else we chdir to the parent directory, then say `ls -ld BASENAME'.
- (if full-directory-p
- (tramp-send-command
- multi-method method user host
- (format "%s %s %s"
- (tramp-get-ls-command multi-method method user host)
- switches
- (if wildcard
- localname
- (tramp-shell-quote-argument (concat localname ".")))))
- (tramp-barf-unless-okay
- multi-method method user host
- (format "cd %s" (tramp-shell-quote-argument
- (file-name-directory localname)))
- nil 'file-error
- "Couldn't `cd %s'"
- (tramp-shell-quote-argument (file-name-directory localname)))
- (tramp-send-command
- multi-method method user host
- (format "%s %s %s"
- (tramp-get-ls-command multi-method method user host)
- switches
- (if wildcard
- localname
- (if (zerop (length (file-name-nondirectory localname)))
- ""
- (tramp-shell-quote-argument
- (file-name-nondirectory localname)))))))
- (sit-for 1) ;needed for rsh but not ssh?
- (tramp-wait-for-output))
- ;; The following let-binding is used by code that's commented
- ;; out. Let's leave the let-binding in for a while to see
- ;; that the commented-out code is really not needed. Commenting-out
- ;; happened on 2003-03-13.
- (let ((old-pos (point)))
- ;; We cannot use `insert-buffer' because the tramp buffer
- ;; changes its contents before insertion due to calling
- ;; `expand-file' and alike.
- (insert
- (with-current-buffer
- (tramp-get-buffer multi-method method user host)
- (buffer-string)))
- ;; On XEmacs, we want to call (exchange-point-and-mark t), but
- ;; that doesn't exist on Emacs, so we use this workaround instead.
- ;; Since zmacs-region-stays doesn't exist in Emacs, this ought to
- ;; be safe. Thanks to Daniel Pittman <daniel@danann.net>.
- ;; (let ((zmacs-region-stays t))
- ;; (exchange-point-and-mark))
- (save-excursion
- (tramp-send-command multi-method method user host "cd")
- (tramp-wait-for-output))
- ;; For the time being, the XEmacs kludge is commented out.
- ;; Please test it on various XEmacs versions to see if it works.
- ;; ;; Another XEmacs specialty follows. What's the right way to do
- ;; ;; it?
- ;; (when (and (featurep 'xemacs)
- ;; (eq major-mode 'dired-mode))
- ;; (save-excursion
- ;; (require 'dired)
- ;; (dired-insert-set-properties old-pos (point))))
- ))))
-
-;; Continuation of kluge to pacify byte-compiler.
-;;(eval-when-compile
-;; (when (eq (symbol-function 'dired-insert-set-properties) 'ignore)
-;; (fmakunbound 'dired-insert-set-properties)))
+ ;; If `full-directory-p', we just say `ls -l FILENAME'.
+ ;; Else we chdir to the parent directory, then say `ls -ld BASENAME'.
+ (if full-directory-p
+ (tramp-send-command
+ v
+ (format "%s %s %s"
+ (tramp-get-ls-command v)
+ switches
+ (if wildcard
+ localname
+ (tramp-shell-quote-argument (concat localname ".")))))
+ (tramp-barf-unless-okay
+ v
+ (format "cd %s" (tramp-shell-quote-argument
+ (file-name-directory localname)))
+ "Couldn't `cd %s'"
+ (tramp-shell-quote-argument (file-name-directory localname)))
+ (tramp-send-command
+ v
+ (format "%s %s %s"
+ (tramp-get-ls-command v)
+ switches
+ (if (or wildcard
+ (zerop (length (file-name-nondirectory localname))))
+ ""
+ (tramp-shell-quote-argument
+ (file-name-nondirectory localname))))))
+ ;; We cannot use `insert-buffer-substring' because the Tramp buffer
+ ;; changes its contents before insertion due to calling
+ ;; `expand-file' and alike.
+ (insert
+ (with-current-buffer (tramp-get-buffer v)
+ (buffer-string))))))
;; CCC is this the right thing to do?
(defun tramp-handle-unhandled-file-name-directory (filename)
- "Like `unhandled-file-name-directory' for tramp files."
- (with-parsed-tramp-file-name filename nil
- (expand-file-name "~/")))
+ "Like `unhandled-file-name-directory' for Tramp files."
+ (expand-file-name "~/"))
;; Canonicalization of file names.
@@ -3553,7 +3500,7 @@ Doesn't do anything if the NAME does not start with a drive letter."
name))
(defun tramp-handle-expand-file-name (name &optional dir)
- "Like `expand-file-name' for tramp files.
+ "Like `expand-file-name' for Tramp files.
If the localname part of the given filename starts with \"/../\" then
the result will be a local, non-Tramp, filename."
;; If DIR is not given, use DEFAULT-DIRECTORY or "/".
@@ -3561,381 +3508,464 @@ the result will be a local, non-Tramp, filename."
;; Unless NAME is absolute, concat DIR and NAME.
(unless (file-name-absolute-p name)
(setq name (concat (file-name-as-directory dir) name)))
- ;; If NAME is not a tramp file, run the real handler
+ ;; If NAME is not a Tramp file, run the real handler.
(if (not (tramp-tramp-file-p name))
- (tramp-run-real-handler 'expand-file-name
- (list name nil))
+ (tramp-run-real-handler 'expand-file-name (list name nil))
;; Dissect NAME.
(with-parsed-tramp-file-name name nil
(unless (file-name-absolute-p localname)
(setq localname (concat "~/" localname)))
- (save-excursion
- ;; Tilde expansion if necessary. This needs a shell which
- ;; groks tilde expansion! The function `tramp-find-shell' is
- ;; supposed to find such a shell on the remote host. Please
- ;; tell me about it when this doesn't work on your system.
- (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
- (let ((uname (match-string 1 localname))
- (fname (match-string 2 localname)))
- ;; We cannot simply apply "~/", because under sudo "~/" is
- ;; expanded to the local user home directory but to the
- ;; root home directory. On the other hand, using always
- ;; the default user name for tilde expansion is not
- ;; appropriate either, because ssh and companions might
- ;; use a user name from the config file.
- (when (and (string-equal uname "~")
- (string-match
- "\\`su\\(do\\)?\\'"
- (tramp-find-method multi-method method user host)))
- (setq uname (concat uname (or user "root"))))
- ;; CCC fanatic error checking?
- (set-buffer (tramp-get-buffer multi-method method user host))
- (erase-buffer)
- (tramp-send-command
- multi-method method user host
- (format "cd %s; pwd" uname)
- t)
- (tramp-wait-for-output)
- (goto-char (point-min))
- (setq uname (buffer-substring (point) (tramp-line-end-position)))
- (setq localname (concat uname fname))
- (erase-buffer)))
- ;; There might be a double slash, for example when "~/"
- ;; expands to "/". Remove this.
- (while (string-match "//" localname)
- (setq localname (replace-match "/" t t localname)))
- ;; No tilde characters in file name, do normal
- ;; expand-file-name (this does "/./" and "/../"). We bind
- ;; directory-sep-char here for XEmacs on Windows, which would
- ;; otherwise use backslash. `default-directory' is bound to
- ;; "/", because on Windows there would be problems with UNC
- ;; shares or Cygwin mounts.
- (tramp-let-maybe directory-sep-char ?/
- (let ((default-directory "/"))
- (tramp-make-tramp-file-name
- multi-method (or method (tramp-find-default-method user host))
- user host
- (tramp-drop-volume-letter
- (tramp-run-real-handler 'expand-file-name
- (list localname))))))))))
-
-;; old version follows. it uses ".." to cross file handler
-;; boundaries.
-;; ;; Look if localname starts with "/../" construct. If this is
-;; ;; the case, then we return a local name instead of a remote name.
-;; (if (string-match "^/\\.\\./" localname)
-;; (expand-file-name (substring localname 3))
-;; ;; No tilde characters in file name, do normal
-;; ;; expand-file-name (this does "/./" and "/../"). We bind
-;; ;; directory-sep-char here for XEmacs on Windows, which
-;; ;; would otherwise use backslash.
-;; (let ((directory-sep-char ?/))
-;; (tramp-make-tramp-file-name
-;; multi-method method user host
-;; (tramp-drop-volume-letter
-;; (tramp-run-real-handler 'expand-file-name
-;; (list localname))))))))))
-
-;; Remote commands.
-
-(defvar tramp-async-proc nil
- "Global variable keeping asynchronous process object.
-Used in `tramp-handle-shell-command'")
-
-(defvar tramp-display-shell-command-buffer t
- "Whether to display output buffer of `shell-command'.
-This is necessary for handling DISPLAY of `process-file'.")
-
-(defun tramp-handle-shell-command (command &optional output-buffer error-buffer)
- "Like `shell-command' for tramp files.
-This will break if COMMAND prints a newline, followed by the value of
-`tramp-end-of-output', followed by another newline."
- ;; Asynchronous processes are far from being perfect. But it works at least
- ;; for `find-grep-dired' and `find-name-dired' in Emacs 22.
- (if (tramp-tramp-file-p default-directory)
- (with-parsed-tramp-file-name default-directory nil
- (let ((curbuf (current-buffer))
- (asynchronous (string-match "[ \t]*&[ \t]*\\'" command))
- status)
- (unless output-buffer
- (setq output-buffer
- (get-buffer-create
- (if asynchronous
- "*Async Shell Command*"
- "*Shell Command Output*")))
- (set-buffer output-buffer)
- (erase-buffer))
- (unless (bufferp output-buffer)
- (setq output-buffer (current-buffer)))
- (set-buffer output-buffer)
- ;; Tramp doesn't handle the asynchronous case by an asynchronous
- ;; process. Instead of, another asynchronous process is opened
- ;; which gets the output of the (synchronous) Tramp process
- ;; via process-filter. ERROR-BUFFER is disabled.
- (when asynchronous
- (setq command (substring command 0 (match-beginning 0))
- error-buffer nil
- tramp-async-proc (start-process (buffer-name output-buffer)
- output-buffer "cat")))
- (save-excursion
- (tramp-barf-unless-okay
- multi-method method user host
- (format "cd %s" (tramp-shell-quote-argument localname))
- nil 'file-error
- "tramp-handle-shell-command: Couldn't `cd %s'"
- (tramp-shell-quote-argument localname))
- ;; Define the process filter
- (when asynchronous
- (set-process-filter
- (get-buffer-process
- (tramp-get-buffer multi-method method user host))
- '(lambda (process string)
- ;; Write the output into the Tramp Process
- (save-current-buffer
- (set-buffer (process-buffer process))
- (goto-char (point-max))
- (insert string))
- ;; Hand-over output to asynchronous process.
- (let ((end
- (string-match
- (regexp-quote tramp-end-of-output) string)))
- (when end
- (setq string
- (substring string 0 (1- (match-beginning 0)))))
- (process-send-string tramp-async-proc string)
- (when end
- (set-process-filter process nil)
- (process-send-eof tramp-async-proc))))))
- ;; Send the command
- (tramp-send-command
- multi-method method user host
- (if error-buffer
- (format "( %s ) 2>/tmp/tramp.$$.err; tramp_old_status=$?"
- command)
- (format "%s; tramp_old_status=$?" command)))
- (unless asynchronous
- (tramp-wait-for-output)))
- (unless asynchronous
- ;; We cannot use `insert-buffer' because the tramp buffer
- ;; changes its contents before insertion due to calling
- ;; `expand-file' and alike.
- (insert
- (with-current-buffer
- (tramp-get-buffer multi-method method user host)
- (buffer-string))))
- (when error-buffer
- (save-excursion
- (unless (bufferp error-buffer)
- (setq error-buffer (get-buffer-create error-buffer)))
- (tramp-send-command
- multi-method method user host
- "cat /tmp/tramp.$$.err")
- (tramp-wait-for-output)
- (set-buffer error-buffer)
- ;; Same comment as above
- (insert
- (with-current-buffer
- (tramp-get-buffer multi-method method user host)
- (buffer-string)))
- (tramp-send-command-and-check
- multi-method method user host "rm -f /tmp/tramp.$$.err")))
- (save-excursion
- (tramp-send-command multi-method method user host "cd")
- (unless asynchronous
- (tramp-wait-for-output))
- (tramp-send-command
- multi-method method user host
- (concat "tramp_set_exit_status $tramp_old_status;"
- " echo tramp_exit_status $?"))
- (unless asynchronous
- (tramp-wait-for-output)
- (goto-char (point-max))
- (unless (search-backward "tramp_exit_status " nil t)
- (error "Couldn't find exit status of `%s'" command))
- (skip-chars-forward "^ ")
- (setq status (read (current-buffer)))))
- (unless (zerop (buffer-size))
- (when tramp-display-shell-command-buffer
- (display-buffer output-buffer)))
- (set-buffer curbuf)
- status))
- ;; The following is only executed if something strange was
- ;; happening. Emit a helpful message and do it anyway.
- (message "tramp-handle-shell-command called with non-tramp directory: `%s'"
- default-directory)
- (tramp-run-real-handler 'shell-command
- (list command output-buffer error-buffer))))
-
-(defun tramp-handle-process-file (program &optional infile buffer display &rest args)
+ ;; Tilde expansion if necessary. This needs a shell which
+ ;; groks tilde expansion! The function `tramp-find-shell' is
+ ;; supposed to find such a shell on the remote host. Please
+ ;; tell me about it when this doesn't work on your system.
+ (when (string-match "\\`\\(~[^/]*\\)\\(.*\\)\\'" localname)
+ (let ((uname (match-string 1 localname))
+ (fname (match-string 2 localname)))
+ ;; We cannot simply apply "~/", because under sudo "~/" is
+ ;; expanded to the local user home directory but to the
+ ;; root home directory. On the other hand, using always
+ ;; the default user name for tilde expansion is not
+ ;; appropriate either, because ssh and companions might
+ ;; use a user name from the config file.
+ (when (and (string-equal uname "~")
+ (string-match "\\`su\\(do\\)?\\'" method))
+ (setq uname (concat uname user)))
+ (setq uname
+ (with-connection-property v uname
+ (tramp-send-command v (format "cd %s; pwd" uname))
+ (with-current-buffer (tramp-get-buffer v)
+ (goto-char (point-min))
+ (buffer-substring (point) (tramp-compat-line-end-position)))))
+ (setq localname (concat uname fname))))
+ ;; There might be a double slash, for example when "~/"
+ ;; expands to "/". Remove this.
+ (while (string-match "//" localname)
+ (setq localname (replace-match "/" t t localname)))
+ ;; No tilde characters in file name, do normal
+ ;; expand-file-name (this does "/./" and "/../"). We bind
+ ;; `directory-sep-char' here for XEmacs on Windows, which
+ ;; would otherwise use backslash. `default-directory' is
+ ;; bound, because on Windows there would be problems with UNC
+ ;; shares or Cygwin mounts.
+ (tramp-let-maybe directory-sep-char ?/
+ (let ((default-directory (tramp-compat-temporary-file-directory)))
+ (tramp-make-tramp-file-name
+ method user host
+ (tramp-drop-volume-letter
+ (tramp-run-real-handler 'expand-file-name
+ (list localname)))))))))
+
+(defun tramp-handle-substitute-in-file-name (filename)
+ "Like `substitute-in-file-name' for Tramp files.
+\"//\" and \"/~\" substitute only in the local filename part.
+If the URL Tramp syntax is chosen, \"//\" as method delimeter and \"/~\" at
+beginning of local filename are not substituted."
+ (with-parsed-tramp-file-name filename nil
+ (if (equal tramp-syntax 'url)
+ ;; We need to check localname only. The other parts cannot contain
+ ;; "//" or "/~".
+ (if (and (> (length localname) 1)
+ (or (string-match "//" localname)
+ (string-match "/~" localname 1)))
+ (tramp-run-real-handler 'substitute-in-file-name (list filename))
+ (tramp-make-tramp-file-name
+ (when method (substitute-in-file-name method))
+ (when user (substitute-in-file-name user))
+ (when host (substitute-in-file-name host))
+ (when localname (substitute-in-file-name localname))))
+ ;; Ignore in LOCALNAME everything before "//" or "/~".
+ (when (and (stringp localname) (string-match ".+?/\\(/\\|~\\)" localname))
+ (setq filename
+ (concat (file-remote-p filename)
+ (replace-match "\\1" nil nil localname)))
+ ;; "/m:h:~" does not work for completion. We use "/m:h:~/".
+ (when (string-match "~$" filename)
+ (setq filename (concat filename "/"))))
+ (tramp-run-real-handler 'substitute-in-file-name (list filename)))))
+
+;; In XEmacs, electricity is implemented via a key map for ?/ and ?~,
+;; which calls corresponding functions (see minibuf.el).
+(when (fboundp 'minibuffer-electric-separator)
+ (mapc
+ '(lambda (x)
+ (eval
+ `(defadvice ,x
+ (around ,(intern (format "tramp-advice-%s" x)) activate)
+ "Invoke `substitute-in-file-name' for Tramp files."
+ (if (and (symbol-value 'minibuffer-electric-file-name-behavior)
+ (tramp-tramp-file-p (buffer-substring)))
+ ;; We don't need to handle `last-input-event', because
+ ;; due to the key map we know it must be ?/ or ?~.
+ (let ((s (concat (buffer-substring (point-min) (point))
+ (string last-command-char))))
+ (delete-region (point-min) (point))
+ (insert (substitute-in-file-name s))
+ (setq ad-return-value last-command-char))
+ ad-do-it))))
+
+ '(minibuffer-electric-separator
+ minibuffer-electric-tilde)))
+
+
+;;; Remote commands.
+
+(defun tramp-handle-executable-find (command)
+ "Like `executable-find' for Tramp files."
+ (with-parsed-tramp-file-name default-directory nil
+ (tramp-find-executable v command (tramp-get-remote-path v) t)))
+
+;; We use BUFFER also as connection buffer during setup. Because of
+;; this, its original contents must be saved, and restored once
+;; connection has been setup.
+(defun tramp-handle-start-file-process (name buffer program &rest args)
+ "Like `start-file-process' for Tramp files."
+ (with-parsed-tramp-file-name default-directory nil
+ (unwind-protect
+ (progn
+ ;; Set the new process properties.
+ (tramp-set-connection-property v "process-name" name)
+ (tramp-set-connection-property
+ v "process-buffer"
+ ;; BUFFER can be nil.
+ (get-buffer-create (or buffer (current-buffer))))
+ ;; Activate narrowing in order to save BUFFER contents.
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (narrow-to-region (point-max) (point-max)))
+ ;; Goto working directory. `tramp-send-command' opens a new
+ ;; connection.
+ (tramp-send-command
+ v (format "cd %s" (tramp-shell-quote-argument localname)))
+ ;; Send the command.
+ (tramp-send-command
+ v
+ (format "%s; exit"
+ (mapconcat 'tramp-shell-quote-argument
+ (cons program args) " "))
+ nil t) ; nooutput
+ ;; Return process.
+ (tramp-get-connection-process v))
+ ;; Save exit.
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (widen)
+ (goto-char (point-max)))
+ (tramp-set-connection-property v "process-name" nil)
+ (tramp-set-connection-property v "process-buffer" nil))))
+
+(defun tramp-handle-process-file
+ (program &optional infile destination display &rest args)
"Like `process-file' for Tramp files."
- (when infile (error "Implementation does not handle input from file"))
- (when (and (numberp buffer) (zerop buffer))
+ ;; The implementation is not complete yet.
+ (when (and (numberp destination) (zerop destination))
(error "Implementation does not handle immediate return"))
- (when (consp buffer) (error "Implementation does not handle error files"))
- (let ((tramp-display-shell-command-buffer display))
- (shell-command
- (mapconcat 'tramp-shell-quote-argument (cons program args) " ")
- buffer)))
+
+ (with-parsed-tramp-file-name default-directory nil
+ (let (command input tmpinput stderr tmpstderr outbuf ret)
+ ;; Compute command.
+ (setq command (mapconcat 'tramp-shell-quote-argument
+ (cons program args) " "))
+ ;; Determine input.
+ (if (null infile)
+ (setq input "/dev/null")
+ (setq infile (expand-file-name infile))
+ (if (tramp-equal-remote default-directory infile)
+ ;; INFILE is on the same remote host.
+ (setq input (with-parsed-tramp-file-name infile nil localname))
+ ;; INFILE must be copied to remote host.
+ (setq input (tramp-make-tramp-temp-file v)
+ tmpinput (tramp-make-tramp-file-name method user host input))
+ (copy-file infile tmpinput t)))
+ (when input (setq command (format "%s <%s" command input)))
+
+ ;; Determine output.
+ (cond
+ ;; Just a buffer
+ ((bufferp destination)
+ (setq outbuf destination))
+ ;; A buffer name
+ ((stringp destination)
+ (setq outbuf (get-buffer-create destination)))
+ ;; (REAL-DESTINATION ERROR-DESTINATION)
+ ((consp destination)
+ ;; output
+ (cond
+ ((bufferp (car destination))
+ (setq outbuf (car destination)))
+ ((stringp (car destination))
+ (setq outbuf (get-buffer-create (car destination)))))
+ ;; stderr
+ (cond
+ ((stringp (cadr destination))
+ (setcar (cdr destination) (expand-file-name (cadr destination)))
+ (if (tramp-equal-remote default-directory (cadr destination))
+ ;; stderr is on the same remote host.
+ (setq stderr (with-parsed-tramp-file-name
+ (cadr destination) nil localname))
+ ;; stderr must be copied to remote host. The temporary
+ ;; file must be deleted after execution.
+ (setq stderr (tramp-make-tramp-temp-file v)
+ tmpstderr (tramp-make-tramp-file-name
+ method user host stderr))))
+ ;; stderr to be discarded
+ ((null (cadr destination))
+ (setq stderr "/dev/null"))))
+ ;; 't
+ (destination
+ (setq outbuf (current-buffer))))
+ (when stderr (setq command (format "%s 2>%s" command stderr)))
+
+ ;; Goto working directory.
+ (tramp-send-command
+ v (format "cd %s" (tramp-shell-quote-argument localname)))
+ ;; Send the command. It might not return in time, so we protect it.
+ (condition-case nil
+ (unwind-protect
+ (tramp-send-command v command)
+ ;; We should show the output anyway.
+ (when outbuf
+ (let ((output-string
+ (with-current-buffer (tramp-get-connection-buffer v)
+ (buffer-substring (point-min) (point-max)))))
+ (with-current-buffer outbuf
+ (insert output-string)))
+ (when display (display-buffer outbuf))))
+ ;; When the user did interrupt, we should do it also.
+ (error
+ (kill-buffer (tramp-get-connection-buffer v))
+ (setq ret 1)))
+
+ ;; Check return code.
+ (unless ret (setq ret (tramp-send-command-and-check v nil)))
+ ;; Provide error file.
+ (when tmpstderr (rename-file tmpstderr (cadr destination) t))
+ ;; Cleanup.
+ (when tmpinput (delete-file tmpinput))
+ ;; Return exit status.
+ ret)))
+
+(defun tramp-local-call-process
+ (program &optional infile destination display &rest args)
+ "Calls `call-process' on the local host.
+This is needed because for some Emacs flavors Tramp has
+defadviced `call-process' to behave like `process-file'. The
+Lisp error raised when PROGRAM is nil is trapped also, returning 1."
+ (let ((default-directory
+ (if (file-remote-p default-directory)
+ (tramp-compat-temporary-file-directory)
+ default-directory)))
+ (if (executable-find program)
+ (apply 'call-process program infile destination display args)
+ 1)))
+
+(defun tramp-handle-call-process-region
+ (start end program &optional delete buffer display &rest args)
+ "Like `call-process-region' for Tramp files."
+ (let ((tmpfile (tramp-compat-make-temp-file "")))
+ (write-region start end tmpfile)
+ (when delete (delete-region start end))
+ (unwind-protect
+ (apply 'call-process program tmpfile buffer display args)
+ (delete-file tmpfile))))
+
+(defun tramp-handle-shell-command
+ (command &optional output-buffer error-buffer)
+ "Like `shell-command' for Tramp files."
+ (let* ((asynchronous (string-match "[ \t]*&[ \t]*\\'" command))
+ (args (split-string (substring command 0 asynchronous) " "))
+ (output-buffer
+ (cond
+ ((bufferp output-buffer) output-buffer)
+ ((stringp output-buffer) (get-buffer-create output-buffer))
+ (output-buffer (current-buffer))
+ (t (generate-new-buffer
+ (if asynchronous
+ "*Async Shell Command*"
+ "*Shell Command Output*")))))
+ (error-buffer
+ (cond
+ ((bufferp error-buffer) error-buffer)
+ ((stringp error-buffer) (get-buffer-create error-buffer))))
+ (buffer
+ (if (and (not asynchronous) error-buffer)
+ (with-parsed-tramp-file-name default-directory nil
+ (list output-buffer (tramp-make-tramp-temp-file v)))
+ output-buffer)))
+
+ (prog1
+ ;; Run the process.
+ (if (integerp asynchronous)
+ (apply 'start-file-process "*Async Shell*" buffer args)
+ (apply 'process-file (car args) nil buffer nil (cdr args)))
+ ;; Insert error messages if they were separated.
+ (when (listp buffer)
+ (with-current-buffer error-buffer (insert-file-contents (cadr buffer)))
+ (delete-file (cadr buffer)))
+ ;; There's some output, display it.
+ (when (with-current-buffer output-buffer (> (point-max) (point-min)))
+ (if (functionp 'display-message-or-buffer)
+ (funcall (symbol-function 'display-message-or-buffer) output-buffer)
+ (pop-to-buffer output-buffer))))))
;; File Editing.
-(defsubst tramp-make-temp-file (filename)
- (concat
- (funcall (if (fboundp 'make-temp-file) 'make-temp-file 'make-temp-name)
- (expand-file-name tramp-temp-name-prefix
- (tramp-temporary-file-directory)))
- (file-name-extension filename t)))
+(defvar tramp-handle-file-local-copy-hook nil
+ "Normal hook to be run at the end of `tramp-handle-file-local-copy'.")
(defun tramp-handle-file-local-copy (filename)
- "Like `file-local-copy' for tramp files."
+ "Like `file-local-copy' for Tramp files."
+
(with-parsed-tramp-file-name filename nil
- (let ((tramp-buf (tramp-get-buffer multi-method method user host))
- ;; We used to bind the following as late as possible.
- ;; loc-enc and loc-dec were bound directly before the if
- ;; statement that checks them. But the functions
- ;; tramp-get-* might invoke the "are you awake" check in
- ;; tramp-maybe-open-connection, which is an unfortunate time
- ;; since we rely on the buffer contents at that spot.
- (rem-enc (tramp-get-remote-encoding multi-method method user host))
- (rem-dec (tramp-get-remote-decoding multi-method method user host))
- (loc-enc (tramp-get-local-encoding multi-method method user host))
- (loc-dec (tramp-get-local-decoding multi-method method user host))
- tmpfil)
+ (let ((rem-enc (tramp-get-remote-coding v "remote-encoding"))
+ (loc-dec (tramp-get-local-coding v "local-decoding"))
+ (tmpfile (tramp-compat-make-temp-file filename)))
(unless (file-exists-p filename)
- (error "Cannot make local copy of non-existing file `%s'"
- filename))
- (setq tmpfil (tramp-make-temp-file filename))
-
- (cond ((tramp-method-out-of-band-p multi-method method user host)
- ;; `copy-file' handles out-of-band methods
- (copy-file filename tmpfil t t))
-
- ((and rem-enc rem-dec)
- ;; Use inline encoding for file transfer.
- (save-excursion
- ;; Following line for setting tramp-current-method,
- ;; tramp-current-user, tramp-current-host.
- (set-buffer tramp-buf)
- (tramp-message 5 "Encoding remote file %s..." filename)
- (tramp-barf-unless-okay
- multi-method method user host
- (concat rem-enc " < " (tramp-shell-quote-argument localname))
- nil 'file-error
- "Encoding remote file failed, see buffer `%s' for details"
- tramp-buf)
- ;; Remove trailing status code
- (goto-char (point-max))
- (delete-region (point) (progn (forward-line -1) (point)))
-
- (tramp-message 5 "Decoding remote file %s..." filename)
-
- ;; Here is where loc-enc and loc-dec used to be let-bound.
- (if (and (symbolp loc-dec) (fboundp loc-dec))
- ;; If local decoding is a function, we call it. We
- ;; must disable multibyte, because
- ;; `uudecode-decode-region' doesn't handle it
- ;; correctly.
- (let ((tmpbuf (get-buffer-create " *tramp tmp*")))
- (set-buffer tmpbuf)
- (erase-buffer)
- (set-buffer-multibyte nil)
- (insert-buffer-substring tramp-buf)
- (tramp-message-for-buffer
- multi-method method user host
- 6 "Decoding remote file %s with function %s..."
- filename loc-dec)
- (set-buffer tmpbuf)
- ;; Douglas Gray Stephens <DGrayStephens@slb.com>
- ;; says that we need to strip tramp_exit_status
- ;; line from the output here. Go to point-max,
- ;; search backward for tramp_exit_status, delete
- ;; between point and point-max if found.
- (let ((coding-system-for-write 'binary))
- (funcall loc-dec (point-min) (point-max))
- (write-region (point-min) (point-max) tmpfil))
- (kill-buffer tmpbuf))
- ;; If tramp-decoding-function is not defined for this
- ;; method, we invoke tramp-decoding-command instead.
- (let ((tmpfil2 (tramp-make-temp-file filename)))
- (write-region (point-min) (point-max) tmpfil2)
- (tramp-message
- 6 "Decoding remote file %s with command %s..."
- filename loc-dec)
- (tramp-call-local-coding-command
- loc-dec tmpfil2 tmpfil)
- (delete-file tmpfil2)))
- (tramp-message-for-buffer
- multi-method method user host
- 5 "Decoding remote file %s...done" filename)
- ;; Set proper permissions.
- (set-file-modes tmpfil (file-modes filename))))
-
- (t (error "Wrong method specification for `%s'" method)))
- tmpfil)))
+ (tramp-error
+ v 'file-error
+ "Cannot make local copy of non-existing file `%s'" filename))
+
+ (cond
+ ;; `copy-file' handles direct copy and out-of-band methods.
+ ((or (tramp-local-host-p v)
+ (and (tramp-method-out-of-band-p v)
+ (> (nth 7 (file-attributes filename)) tramp-copy-size-limit)))
+ (copy-file filename tmpfile t t))
+
+ ;; Use inline encoding for file transfer.
+ (rem-enc
+ (save-excursion
+ (tramp-message v 5 "Encoding remote file %s..." filename)
+ (tramp-barf-unless-okay
+ v (format "%s < %s" rem-enc (tramp-shell-quote-argument localname))
+ "Encoding remote file failed")
+ (tramp-message v 5 "Encoding remote file %s...done" filename)
+
+ (tramp-message v 5 "Decoding remote file %s..." filename)
+ (if (and (symbolp loc-dec) (fboundp loc-dec))
+ ;; If local decoding is a function, we call it. We must
+ ;; disable multibyte, because `uudecode-decode-region'
+ ;; doesn't handle it correctly.
+ (unwind-protect
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (insert-buffer-substring (tramp-get-buffer v))
+ (tramp-message
+ v 5 "Decoding remote file %s with function %s..."
+ filename loc-dec)
+ (funcall loc-dec (point-min) (point-max))
+ (let ((coding-system-for-write 'binary))
+ (write-region (point-min) (point-max) tmpfile))))
+ ;; If tramp-decoding-function is not defined for this
+ ;; method, we invoke tramp-decoding-command instead.
+ (let ((tmpfile2 (tramp-compat-make-temp-file filename)))
+ (let ((coding-system-for-write 'binary))
+ (write-region (point-min) (point-max) tmpfile2))
+ (tramp-message
+ v 5 "Decoding remote file %s with command %s..."
+ filename loc-dec)
+ (tramp-call-local-coding-command loc-dec tmpfile2 tmpfile)
+ (delete-file tmpfile2)))
+ (tramp-message v 5 "Decoding remote file %s...done" filename)
+ ;; Set proper permissions.
+ (set-file-modes tmpfile (file-modes filename))
+ ;; Set local user ownership.
+ (tramp-set-file-uid-gid tmpfile)))
+
+ ;; Oops, I don't know what to do.
+ (t (tramp-error
+ v 'file-error "Wrong method specification for `%s'" method)))
+
+ (run-hooks 'tramp-handle-file-local-copy-hook)
+ tmpfile)))
(defun tramp-handle-file-remote-p (filename &optional identification connected)
"Like `file-remote-p' for Tramp files."
(when (tramp-tramp-file-p filename)
(with-parsed-tramp-file-name filename nil
(and (or (not connected)
- (let ((p (get-buffer-process
- (tramp-get-buffer multi-method method user host))))
+ (let ((p (tramp-get-connection-process v)))
(and p (processp p) (memq (process-status p) '(run open)))))
(cond
((eq identification 'method) method)
((eq identification 'user) user)
((eq identification 'host) host)
- (t (tramp-make-tramp-file-name
- multi-method method user host "")))))))
+ ((eq identification 'localname) localname)
+ (t (tramp-make-tramp-file-name method user host "")))))))
(defun tramp-handle-insert-file-contents
(filename &optional visit beg end replace)
- "Like `insert-file-contents' for tramp files."
+ "Like `insert-file-contents' for Tramp files."
(barf-if-buffer-read-only)
(setq filename (expand-file-name filename))
- (with-parsed-tramp-file-name filename nil
- (if (not (file-exists-p filename))
- (progn
- (when visit
- (setq buffer-file-name filename)
- (set-visited-file-modtime)
- (set-buffer-modified-p nil))
- (signal 'file-error
- (format "File `%s' not found on remote host" filename))
- (list (expand-file-name filename) 0))
- ;; `insert-file-contents-literally' takes care to avoid calling
- ;; jka-compr. By let-binding inhibit-file-name-operation, we
- ;; propagate that care to the file-local-copy operation.
- (let ((local-copy
- (let ((inhibit-file-name-operation
- (when (eq inhibit-file-name-operation
- 'insert-file-contents)
- 'file-local-copy)))
- (file-local-copy filename)))
- coding-system-used result)
- (tramp-message-for-buffer
- multi-method method user host
- 9 "Inserting local temp file `%s'..." local-copy)
- (setq result (insert-file-contents local-copy nil beg end replace))
+ (let (coding-system-used result)
+ (with-parsed-tramp-file-name filename nil
+
+ (if (not (file-exists-p filename))
+ (progn
+ (when visit
+ (setq buffer-file-name filename)
+ (set-visited-file-modtime)
+ (set-buffer-modified-p nil))
+ ;; We don't raise a Tramp error, because it might be
+ ;; suppressed, like in `find-file-noselect-1'.
+ (signal 'file-error (list "File not found on remote host" filename))
+ (list (expand-file-name filename) 0))
+
+ (if (and (tramp-local-host-p v)
+ (file-readable-p localname))
+ ;; Short track: if we are on the local host, we can run directly.
+ (setq result (insert-file-contents localname visit beg end replace))
+
+ ;; `insert-file-contents-literally' takes care to avoid calling
+ ;; jka-compr. By let-binding inhibit-file-name-operation, we
+ ;; propagate that care to the file-local-copy operation.
+ (let ((local-copy
+ (let ((inhibit-file-name-operation
+ (when (eq inhibit-file-name-operation
+ 'insert-file-contents)
+ 'file-local-copy)))
+ (file-local-copy filename))))
+ (tramp-message v 4 "Inserting local temp file `%s'..." local-copy)
+ (setq result (insert-file-contents local-copy nil beg end replace))
+ ;; Now `last-coding-system-used' has right value. Remember it.
+ (when (boundp 'last-coding-system-used)
+ (setq coding-system-used (symbol-value 'last-coding-system-used)))
+ (tramp-message v 4 "Inserting local temp file `%s'...done" local-copy)
+ (delete-file local-copy)
+ (when (boundp 'last-coding-system-used)
+ (set 'last-coding-system-used coding-system-used))))
+
(when visit
+ (setq buffer-read-only (file-writable-p filename))
(setq buffer-file-name filename)
(set-visited-file-modtime)
(set-buffer-modified-p nil))
- ;; Now `last-coding-system-used' has right value. Remember it.
- (when (boundp 'last-coding-system-used)
- (setq coding-system-used (symbol-value 'last-coding-system-used)))
- (tramp-message-for-buffer
- multi-method method user host
- 9 "Inserting local temp file `%s'...done" local-copy)
- (delete-file local-copy)
- (when (boundp 'last-coding-system-used)
- (set 'last-coding-system-used coding-system-used))
(list (expand-file-name filename)
(cadr result))))))
+;; This is needed for XEmacs only. Code stolen from files.el.
+(defun tramp-handle-insert-file-contents-literally
+ (filename &optional visit beg end replace)
+ "Like `insert-file-contents-literally' for Tramp files."
+ (let ((format-alist nil)
+ (after-insert-file-functions nil)
+ (coding-system-for-read 'no-conversion)
+ (coding-system-for-write 'no-conversion)
+ (find-buffer-file-type-function
+ (if (fboundp 'find-buffer-file-type)
+ (symbol-function 'find-buffer-file-type)
+ nil))
+ (inhibit-file-name-handlers '(jka-compr-handler image-file-handler))
+ (inhibit-file-name-operation 'insert-file-contents))
+ (unwind-protect
+ (progn
+ (fset 'find-buffer-file-type (lambda (filename) t))
+ (insert-file-contents filename visit beg end replace))
+ (if find-buffer-file-type-function
+ (fset 'find-buffer-file-type find-buffer-file-type-function)
+ (fmakunbound 'find-buffer-file-type)))))
(defun tramp-handle-find-backup-file-name (filename)
- "Like `find-backup-file-name' for tramp files."
+ "Like `find-backup-file-name' for Tramp files."
(with-parsed-tramp-file-name filename nil
;; We set both variables. It doesn't matter whether it is
;; Emacs or XEmacs
@@ -3950,8 +3980,7 @@ This will break if COMMAND prints a newline, followed by the value of
(if (and (stringp (cdr x))
(file-name-absolute-p (cdr x))
(not (tramp-file-name-p (cdr x))))
- (tramp-make-tramp-file-name
- multi-method method user host (cdr x))
+ (tramp-make-tramp-file-name method user host (cdr x))
(cdr x))))
(symbol-value 'tramp-backup-directory-alist))
(symbol-value 'backup-directory-alist))))
@@ -3969,7 +3998,7 @@ This will break if COMMAND prints a newline, followed by the value of
(file-name-absolute-p (car (cdr x)))
(not (tramp-file-name-p (car (cdr x)))))
(tramp-make-tramp-file-name
- multi-method method user host (car (cdr x)))
+ method user host (car (cdr x)))
(car (cdr x))))
(cdr (cdr x))))
(symbol-value 'tramp-bkup-backup-directory-info))
@@ -3978,255 +4007,246 @@ This will break if COMMAND prints a newline, followed by the value of
(tramp-run-real-handler 'find-backup-file-name (list filename)))))
(defun tramp-handle-make-auto-save-file-name ()
- "Like `make-auto-save-file-name' for tramp files.
+ "Like `make-auto-save-file-name' for Tramp files.
Returns a file name in `tramp-auto-save-directory' for autosaving this file."
- (let ((tramp-auto-save-directory tramp-auto-save-directory))
+ (let ((tramp-auto-save-directory tramp-auto-save-directory)
+ (buffer-file-name
+ (tramp-subst-strs-in-string
+ '(("_" . "|")
+ ("/" . "_a")
+ (":" . "_b")
+ ("|" . "__")
+ ("[" . "_l")
+ ("]" . "_r"))
+ (buffer-file-name))))
;; File name must be unique. This is ensured with Emacs 22 (see
;; UNIQUIFY element of `auto-save-file-name-transforms'); but for
;; all other cases we must do it ourselves.
(when (boundp 'auto-save-file-name-transforms)
- (mapcar
+ (mapc
'(lambda (x)
(when (and (string-match (car x) buffer-file-name)
(not (car (cddr x))))
(setq tramp-auto-save-directory
(or tramp-auto-save-directory
- (tramp-temporary-file-directory)))))
+ (tramp-compat-temporary-file-directory)))))
(symbol-value 'auto-save-file-name-transforms)))
;; Create directory.
(when tramp-auto-save-directory
+ (setq buffer-file-name
+ (expand-file-name buffer-file-name tramp-auto-save-directory))
(unless (file-exists-p tramp-auto-save-directory)
(make-directory tramp-auto-save-directory t)))
- ;; jka-compr doesn't like auto-saving, so by appending "~" to the
- ;; file name we make sure that jka-compr isn't used for the
- ;; auto-save file.
- (let ((buffer-file-name
- (if tramp-auto-save-directory
- (expand-file-name
- (tramp-subst-strs-in-string
- '(("_" . "|")
- ("/" . "_a")
- (":" . "_b")
- ("|" . "__")
- ("[" . "_l")
- ("]" . "_r"))
- (buffer-file-name))
- tramp-auto-save-directory)
- (buffer-file-name))))
- ;; Run plain `make-auto-save-file-name'. There might be an advice when
- ;; it is not a magic file name operation (since Emacs 22).
- ;; We must deactivate it temporarily.
- (if (not (ad-is-active 'make-auto-save-file-name))
- (tramp-run-real-handler
- 'make-auto-save-file-name nil)
- ;; else
- (ad-deactivate 'make-auto-save-file-name)
- (prog1
- (tramp-run-real-handler
- 'make-auto-save-file-name nil)
- (ad-activate 'make-auto-save-file-name))))))
+ ;; Run plain `make-auto-save-file-name'. There might be an advice when
+ ;; it is not a magic file name operation (since Emacs 22).
+ ;; We must deactivate it temporarily.
+ (if (not (ad-is-active 'make-auto-save-file-name))
+ (tramp-run-real-handler 'make-auto-save-file-name nil)
+ ;; else
+ (ad-deactivate 'make-auto-save-file-name)
+ (prog1
+ (tramp-run-real-handler 'make-auto-save-file-name nil)
+ (ad-activate 'make-auto-save-file-name)))))
+(defvar tramp-handle-write-region-hook nil
+ "Normal hook to be run at the end of `tramp-handle-write-region'.")
-;; CCC grok APPEND, LOCKNAME, CONFIRM
+;; CCC grok APPEND, LOCKNAME
(defun tramp-handle-write-region
(start end filename &optional append visit lockname confirm)
- "Like `write-region' for tramp files."
- (unless (eq append nil)
- (error "Cannot append to file using tramp (`%s')" filename))
+ "Like `write-region' for Tramp files."
(setq filename (expand-file-name filename))
- ;; Following part commented out because we don't know what to do about
- ;; file locking, and it does not appear to be a problem to ignore it.
- ;; Ange-ftp ignores it, too.
- ;; (when (and lockname (stringp lockname))
- ;; (setq lockname (expand-file-name lockname)))
- ;; (unless (or (eq lockname nil)
- ;; (string= lockname filename))
- ;; (error
- ;; "tramp-handle-write-region: LOCKNAME must be nil or equal FILENAME"))
- ;; XEmacs takes a coding system as the seventh argument, not `confirm'
- (when (and (not (featurep 'xemacs))
- confirm (file-exists-p filename))
- (unless (y-or-n-p (format "File %s exists; overwrite anyway? "
- filename))
- (error "File not overwritten")))
(with-parsed-tramp-file-name filename nil
- (let ((curbuf (current-buffer))
- (rem-enc (tramp-get-remote-encoding multi-method method user host))
- (rem-dec (tramp-get-remote-decoding multi-method method user host))
- (loc-enc (tramp-get-local-encoding multi-method method user host))
- (loc-dec (tramp-get-local-decoding multi-method method user host))
- (trampbuf (get-buffer-create "*tramp output*"))
- (modes (file-modes filename))
- ;; We use this to save the value of `last-coding-system-used'
- ;; after writing the tmp file. At the end of the function,
- ;; we set `last-coding-system-used' to this saved value.
- ;; This way, any intermediary coding systems used while
- ;; talking to the remote shell or suchlike won't hose this
- ;; variable. This approach was snarfed from ange-ftp.el.
- coding-system-used
- tmpfil)
- ;; Write region into a tmp file. This isn't really needed if we
- ;; use an encoding function, but currently we use it always
- ;; because this makes the logic simpler.
- (setq tmpfil (tramp-make-temp-file filename))
- ;; Set current buffer. If connection wasn't open, `file-modes' has
- ;; changed it accidently.
- (set-buffer curbuf)
- ;; We say `no-message' here because we don't want the visited file
- ;; modtime data to be clobbered from the temp file. We call
- ;; `set-visited-file-modtime' ourselves later on.
- (tramp-run-real-handler
- 'write-region
- (if confirm ; don't pass this arg unless defined for backward compat.
- (list start end tmpfil append 'no-message lockname confirm)
- (list start end tmpfil append 'no-message lockname)))
- ;; Now, `last-coding-system-used' has the right value. Remember it.
- (when (boundp 'last-coding-system-used)
- (setq coding-system-used (symbol-value 'last-coding-system-used)))
- ;; The permissions of the temporary file should be set. If
- ;; filename does not exist (eq modes nil) it has been renamed to
- ;; the backup file. This case `save-buffer' handles
- ;; permissions.
- (when modes (set-file-modes tmpfil modes))
- ;; This is a bit lengthy due to the different methods possible for
- ;; file transfer. First, we check whether the method uses an rcp
- ;; program. If so, we call it. Otherwise, both encoding and
- ;; decoding command must be specified. However, if the method
- ;; _also_ specifies an encoding function, then that is used for
- ;; encoding the contents of the tmp file.
- (cond ((tramp-method-out-of-band-p multi-method method user host)
- ;; `copy-file' handles out-of-band methods
- (copy-file tmpfil filename t t))
-
- ((and rem-enc rem-dec)
- ;; Use inline file transfer
- (let ((tmpbuf (get-buffer-create " *tramp file transfer*")))
- (save-excursion
- ;; Encode tmpfil into tmpbuf
- (tramp-message-for-buffer multi-method method user host
- 5 "Encoding region...")
- (set-buffer tmpbuf)
- (erase-buffer)
- ;; Use encoding function or command.
- (if (and (symbolp loc-enc) (fboundp loc-enc))
- (progn
- (tramp-message-for-buffer
- multi-method method user host
- 6 "Encoding region using function `%s'..."
- (symbol-name loc-enc))
- (insert-file-contents-literally tmpfil)
- ;; CCC. The following `let' is a workaround for
- ;; the base64.el that comes with pgnus-0.84. If
- ;; both of the following conditions are
- ;; satisfied, it tries to write to a local file
- ;; in default-directory, but at this point,
- ;; default-directory is remote.
- ;; (CALL-PROCESS-REGION can't write to remote
- ;; files, it seems.) The file in question is a
- ;; tmp file anyway.
- (let ((default-directory
- (tramp-temporary-file-directory)))
- (funcall loc-enc (point-min) (point-max)))
- (goto-char (point-max))
- (unless (bolp)
- (newline)))
- (tramp-message-for-buffer
- multi-method method user host
- 6 "Encoding region using command `%s'..." loc-enc)
- (unless (equal 0 (tramp-call-local-coding-command
- loc-enc tmpfil t))
- (pop-to-buffer trampbuf)
- (error (concat "Cannot write to `%s', local encoding"
- " command `%s' failed")
- filename loc-enc)))
- ;; Send tmpbuf into remote decoding command which
- ;; writes to remote file. Because this happens on the
- ;; remote host, we cannot use the function.
- (tramp-message-for-buffer
- multi-method method user host
- 5 "Decoding region into remote file %s..." filename)
- (tramp-send-command
- multi-method method user host
- (format "%s >%s <<'EOF'"
- rem-dec
- (tramp-shell-quote-argument localname)))
- (set-buffer tmpbuf)
- (tramp-message-for-buffer
- multi-method method user host
- 6 "Sending data to remote host...")
- (tramp-send-string multi-method method user host
- (buffer-string))
- ;; wait for remote decoding to complete
- (tramp-message-for-buffer
- multi-method method user host
- 6 "Sending end of data token...")
- (tramp-send-command
- multi-method method user host "EOF" nil t)
- (tramp-message-for-buffer
- multi-method method user host 6
- "Waiting for remote host to process data...")
- (set-buffer (tramp-get-buffer multi-method method user host))
- (tramp-wait-for-output)
- (tramp-barf-unless-okay
- multi-method method user host nil nil 'file-error
- (concat "Couldn't write region to `%s',"
- " decode using `%s' failed")
- filename rem-dec)
- (tramp-message 5 "Decoding region into remote file %s...done"
- filename)
- (kill-buffer tmpbuf))))
- (t
- (error
- (concat "Method `%s' should specify both encoding and "
- "decoding command or an rcp program")
- method)))
- (delete-file tmpfil)
- (unless (equal curbuf (current-buffer))
- (error "Buffer has changed from `%s' to `%s'"
- curbuf (current-buffer)))
+ (unless (null append)
+ (tramp-error
+ v 'file-error "Cannot append to file using Tramp (`%s')" filename))
+ ;; Following part commented out because we don't know what to do about
+ ;; file locking, and it does not appear to be a problem to ignore it.
+ ;; Ange-ftp ignores it, too.
+ ;; (when (and lockname (stringp lockname))
+ ;; (setq lockname (expand-file-name lockname)))
+ ;; (unless (or (eq lockname nil)
+ ;; (string= lockname filename))
+ ;; (error
+ ;; "tramp-handle-write-region: LOCKNAME must be nil or equal FILENAME"))
+
+ ;; XEmacs takes a coding system as the seventh argument, not `confirm'.
+ (when (and (not (featurep 'xemacs)) confirm (file-exists-p filename))
+ (unless (y-or-n-p (format "File %s exists; overwrite anyway? " filename))
+ (tramp-error v 'file-error "File not overwritten")))
+
+ (let ((uid (or (nth 2 (tramp-compat-file-attributes filename 'integer))
+ (tramp-get-remote-uid v 'integer)))
+ (gid (or (nth 3 (tramp-compat-file-attributes filename 'integer))
+ (tramp-get-remote-gid v 'integer))))
+
+ (if (and (tramp-local-host-p v)
+ (file-writable-p (file-name-directory localname))
+ (or (file-directory-p localname)
+ (file-writable-p localname)))
+ ;; Short track: if we are on the local host, we can run directly.
+ (write-region start end localname append 'no-message lockname confirm)
+
+ (let ((rem-dec (tramp-get-remote-coding v "remote-decoding"))
+ (loc-enc (tramp-get-local-coding v "local-encoding"))
+ (modes (save-excursion (file-modes filename)))
+ ;; We use this to save the value of
+ ;; `last-coding-system-used' after writing the tmp file.
+ ;; At the end of the function, we set
+ ;; `last-coding-system-used' to this saved value. This
+ ;; way, any intermediary coding systems used while
+ ;; talking to the remote shell or suchlike won't hose
+ ;; this variable. This approach was snarfed from
+ ;; ange-ftp.el.
+ coding-system-used
+ ;; Write region into a tmp file. This isn't really
+ ;; needed if we use an encoding function, but currently
+ ;; we use it always because this makes the logic
+ ;; simpler.
+ (tmpfile (tramp-compat-make-temp-file filename)))
+
+ ;; We say `no-message' here because we don't want the
+ ;; visited file modtime data to be clobbered from the temp
+ ;; file. We call `set-visited-file-modtime' ourselves later
+ ;; on.
+ (tramp-run-real-handler
+ 'write-region
+ (list start end tmpfile append 'no-message lockname confirm))
+ ;; Now, `last-coding-system-used' has the right value. Remember it.
+ (when (boundp 'last-coding-system-used)
+ (setq coding-system-used (symbol-value 'last-coding-system-used)))
+ ;; The permissions of the temporary file should be set. If
+ ;; filename does not exist (eq modes nil) it has been
+ ;; renamed to the backup file. This case `save-buffer'
+ ;; handles permissions.
+ (when modes (set-file-modes tmpfile modes))
+
+ ;; This is a bit lengthy due to the different methods
+ ;; possible for file transfer. First, we check whether the
+ ;; method uses an rcp program. If so, we call it.
+ ;; Otherwise, both encoding and decoding command must be
+ ;; specified. However, if the method _also_ specifies an
+ ;; encoding function, then that is used for encoding the
+ ;; contents of the tmp file.
+ (cond
+ ;; `rename-file' handles direct copy and out-of-band methods.
+ ((or (tramp-local-host-p v)
+ (and (tramp-method-out-of-band-p v)
+ (integerp start)
+ (> (- end start) tramp-copy-size-limit)))
+ (rename-file tmpfile filename t))
+
+ ;; Use inline file transfer
+ (rem-dec
+ ;; Encode tmpfile
+ (tramp-message v 5 "Encoding region...")
+ (unwind-protect
+ (with-temp-buffer
+ ;; Use encoding function or command.
+ (if (and (symbolp loc-enc) (fboundp loc-enc))
+ (progn
+ (tramp-message
+ v 5 "Encoding region using function `%s'..."
+ (symbol-name loc-enc))
+ (let ((coding-system-for-read 'binary))
+ (insert-file-contents-literally tmpfile))
+ ;; CCC. The following `let' is a workaround
+ ;; for the base64.el that comes with
+ ;; pgnus-0.84. If both of the following
+ ;; conditions are satisfied, it tries to write
+ ;; to a local file in default-directory, but
+ ;; at this point, default-directory is remote.
+ ;; (CALL-PROCESS-REGION can't write to remote
+ ;; files, it seems.) The file in question is
+ ;; a tmp file anyway.
+ (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (funcall loc-enc (point-min) (point-max))))
+
+ (tramp-message
+ v 5 "Encoding region using command `%s'..." loc-enc)
+ (unless (equal 0 (tramp-call-local-coding-command
+ loc-enc tmpfile t))
+ (tramp-error
+ v 'file-error
+ "Cannot write to `%s', local encoding command `%s' failed"
+ filename loc-enc)))
+
+ ;; Send buffer into remote decoding command which
+ ;; writes to remote file. Because this happens on
+ ;; the remote host, we cannot use the function.
+ (goto-char (point-max))
+ (unless (bolp) (newline))
+ (tramp-message
+ v 5 "Decoding region into remote file %s..." filename)
+ (tramp-send-command
+ v
+ (format
+ "%s >%s <<'EOF'\n%sEOF"
+ rem-dec
+ (tramp-shell-quote-argument localname)
+ (buffer-string)))
+ (tramp-barf-unless-okay
+ v nil
+ "Couldn't write region to `%s', decode using `%s' failed"
+ filename rem-dec)
+ ;; When `file-precious-flag' is set, the region is
+ ;; written to a temporary file. Check that the
+ ;; checksum is equal to that from the local tmpfile.
+ (when file-precious-flag
+ (erase-buffer)
+ (and
+ ;; cksum runs locally, if possible.
+ (zerop (tramp-local-call-process "cksum" tmpfile t))
+ ;; cksum runs remotely.
+ (zerop
+ (tramp-send-command-and-check
+ v
+ (format
+ "cksum <%s" (tramp-shell-quote-argument localname))))
+ ;; ... they are different.
+ (not
+ (string-equal
+ (buffer-string)
+ (with-current-buffer (tramp-get-buffer v)
+ (buffer-string))))
+ (tramp-error
+ v 'file-error
+ (concat "Couldn't write region to `%s',"
+ " decode using `%s' failed")
+ filename rem-dec)))
+ (tramp-message
+ v 5 "Decoding region into remote file %s...done" filename)
+ (tramp-flush-file-property v localname))
+
+ ;; Save exit.
+ (delete-file tmpfile)))
+
+ ;; That's not expected.
+ (t
+ (tramp-error
+ v 'file-error
+ (concat "Method `%s' should specify both encoding and "
+ "decoding command or an rcp program")
+ method)))
+
+ ;; Make `last-coding-system-used' have the right value.
+ (when coding-system-used
+ (set 'last-coding-system-used coding-system-used))))
+
+ ;; Set file modification time.
(when (or (eq visit t) (stringp visit))
(set-visited-file-modtime
- ;; We must pass modtime explicitely, because filename can be different
- ;; from (buffer-file-name), f.e. if `file-precious-flag' is set.
+ ;; We must pass modtime explicitely, because filename can
+ ;; be different from (buffer-file-name), f.e. if
+ ;; `file-precious-flag' is set.
(nth 5 (file-attributes filename))))
- ;; Make `last-coding-system-used' have the right value.
- (when (boundp 'last-coding-system-used)
- (set 'last-coding-system-used coding-system-used))
- (when (or (eq visit t)
- (eq visit nil)
- (stringp visit))
- (message "Wrote %s" filename)))))
-
-;; Call down to the real handler.
-;; Because EFS does not play nicely with TRAMP (both systems match a
-;; TRAMP file name) it is needed to disable efs as well as tramp for the
-;; operation.
-;;
-;; Other than that, this is the canon file-handler code that the doco
-;; says should be used here. Which is nice.
-;;
-;; Under XEmacs current, EFS also hooks in as
-;; efs-sifn-handler-function to handle any filename with environment
-;; variables. This has two implications:
-;; 1) That EFS may not be completely dead (yet) for TRAMP filenames
-;; 2) That TRAMP might want to do the same thing.
-;; Details as they come in.
-;;
-;; Daniel Pittman <daniel@danann.net>
-;; (defun tramp-run-real-handler (operation args)
-;; "Invoke normal file name handler for OPERATION.
-;; This inhibits EFS and Ange-FTP, too, because they conflict with tramp.
-;; First arg specifies the OPERATION, remaining ARGS are passed to the
-;; OPERATION."
-;; (let ((inhibit-file-name-handlers
-;; (list 'tramp-file-name-handler
-;; 'efs-file-handler-function
-;; 'ange-ftp-hook-function
-;; (and (eq inhibit-file-name-operation operation)
-;; inhibit-file-name-handlers)))
-;; (inhibit-file-name-operation operation))
-;; (apply operation args)))
+ ;; Set the ownership.
+ (tramp-set-file-uid-gid filename uid gid)
+ (when (or (eq visit t) (null visit) (stringp visit))
+ (tramp-message v 0 "Wrote %s" filename))
+ (run-hooks 'tramp-handle-write-region-hook))))
;;;###autoload
(progn (defun tramp-run-real-handler (operation args)
@@ -4244,10 +4264,6 @@ pass to the OPERATION."
(inhibit-file-name-operation operation))
(apply operation args))))
-;; This function is used from `tramp-completion-file-name-handler'
-;; functions only, if `tramp-completion-mode-p' is true. But this
-;; cannot be checked here because the check is based on a full
-;; filename, not available for all basic I/O operations.
;;;###autoload
(progn (defun tramp-completion-run-real-handler (operation args)
"Invoke `tramp-file-name-handler' for OPERATION.
@@ -4292,6 +4308,8 @@ ARGS are the arguments OPERATION has been called with."
'load 'make-directory 'make-directory-internal
'set-file-modes 'substitute-in-file-name
'unhandled-file-name-directory 'vc-registered
+ ; Emacs 22 only
+ 'set-file-times
; XEmacs only
'abbreviate-file-name 'create-file-buffer
'dired-file-modtime 'dired-make-compressed-filename
@@ -4320,53 +4338,64 @@ ARGS are the arguments OPERATION has been called with."
(nth 2 args))
; BUF
((member operation
- (list 'make-auto-save-file-name
- 'set-visited-file-modtime 'verify-visited-file-modtime
- ; XEmacs only
+ (list 'set-visited-file-modtime 'verify-visited-file-modtime
+ ; since Emacs 22 only
+ 'make-auto-save-file-name
+ ; XEmacs only
'backup-buffer))
(buffer-file-name
(if (bufferp (nth 0 args)) (nth 0 args) (current-buffer))))
; COMMAND
((member operation
- (list 'dired-call-process
+ (list ; not in Emacs 23
+ 'dired-call-process
; Emacs only
'shell-command
- ; Emacs 22 only
+ ; since Emacs 22 only
'process-file
+ ; since Emacs 23 only
+ 'start-file-process
; XEmacs only
- 'dired-print-file 'dired-shell-call-process))
+ 'dired-print-file 'dired-shell-call-process
+ ; nowhere yet
+ 'executable-find 'start-process 'call-process))
default-directory)
; unknown file primitive
(t (error "unknown file I/O primitive: %s" operation))))
(defun tramp-find-foreign-file-name-handler (filename)
"Return foreign file name handler if exists."
- (when (tramp-tramp-file-p filename)
- (let (elt
- res
- (handler-alist tramp-foreign-file-name-handler-alist))
- (while handler-alist
- (setq elt (car handler-alist)
- handler-alist (cdr handler-alist))
- (when (funcall (car elt) filename)
- (setq handler-alist nil)
- (setq res (cdr elt))))
- res)))
+ (when (and (stringp filename) (tramp-tramp-file-p filename))
+ (let ((v (tramp-dissect-file-name filename t))
+ (handler tramp-foreign-file-name-handler-alist)
+ elt res)
+ ;; When we are not fully sure that filename completion is safe,
+ ;; we should not return a handler.
+ (when (or (tramp-file-name-method v) (tramp-file-name-user v)
+ (and (tramp-file-name-host v)
+ (not (member (tramp-file-name-host v)
+ (mapcar 'car tramp-methods))))
+ (not (tramp-completion-mode-p)))
+ (while handler
+ (setq elt (car handler)
+ handler (cdr handler))
+ (when (funcall (car elt) filename)
+ (setq handler nil
+ res (cdr elt))))
+ res))))
;; Main function.
;;;###autoload
(defun tramp-file-name-handler (operation &rest args)
"Invoke Tramp file name handler.
-Falls back to normal file name handler if no tramp file name handler exists."
-;; (setq edebug-trace t)
-;; (edebug-trace "%s" (with-output-to-string (backtrace)))
+Falls back to normal file name handler if no Tramp file name handler exists."
(save-match-data
(let* ((filename (apply 'tramp-file-name-for-operation operation args))
- (completion (tramp-completion-mode-p filename))
+ (completion (tramp-completion-mode-p))
(foreign (tramp-find-foreign-file-name-handler filename)))
(with-parsed-tramp-file-name filename nil
(cond
- ;; When we are in completion mode, some operations shouldn' be
+ ;; When we are in completion mode, some operations shouldn't be
;; handled by backend.
((and completion (zerop (length localname))
(memq operation '(file-exists-p file-directory-p)))
@@ -4379,7 +4408,6 @@ Falls back to normal file name handler if no tramp file name handler exists."
;; Nothing to do for us.
(t (tramp-run-real-handler operation args)))))))
-
;; In Emacs, there is some concurrency due to timers. If a timer
;; interrupts Tramp and wishes to use the same connection buffer as
;; the "main" Emacs, then garbage might occur in the connection
@@ -4411,7 +4439,7 @@ preventing reentrant calls of Tramp.")
"Invoke remote-shell Tramp file name handler.
Fall back to normal file name handler if no Tramp handler exists."
(when (and tramp-locked (not tramp-locker))
- (signal 'file-error "Forbidden reentrant call of Tramp"))
+ (signal 'file-error (list "Forbidden reentrant call of Tramp")))
(let ((tl tramp-locked))
(unwind-protect
(progn
@@ -4426,10 +4454,15 @@ Fall back to normal file name handler if no Tramp handler exists."
;;;###autoload
(progn (defun tramp-completion-file-name-handler (operation &rest args)
- "Invoke tramp file name completion handler.
-Falls back to normal file name handler if no tramp file name handler exists."
+ "Invoke Tramp file name completion handler.
+Falls back to normal file name handler if no Tramp file name handler exists."
;; (setq edebug-trace t)
;; (edebug-trace "%s" (with-output-to-string (backtrace)))
+
+;; (mapcar 'trace-function-background
+;; (mapcar 'intern
+;; (all-completions "tramp-" obarray 'functionp)))
+
(let ((fn (assoc operation tramp-completion-file-name-handler-alist)))
(if fn
(save-match-data (apply (cdr fn) args))
@@ -4437,7 +4470,12 @@ Falls back to normal file name handler if no tramp file name handler exists."
;;;###autoload
(defsubst tramp-register-file-name-handler ()
- "Add tramp file name handler to `file-name-handler-alist'."
+ "Add Tramp file name handler to `file-name-handler-alist'."
+ ;; Remove autoloaded handler from file name handler alist. Useful,
+ ;; if `tramp-syntax' has been changed.
+ (let ((a1 (rassq 'tramp-file-name-handler file-name-handler-alist)))
+ (setq file-name-handler-alist (delete a1 file-name-handler-alist)))
+ ;; Add the handler.
(add-to-list 'file-name-handler-alist
(cons tramp-file-name-regexp 'tramp-file-name-handler))
;; If jka-compr is already loaded, move it to the front of
@@ -4447,15 +4485,29 @@ Falls back to normal file name handler if no tramp file name handler exists."
(setq file-name-handler-alist
(cons jka (delete jka file-name-handler-alist))))))
+;; `tramp-file-name-handler' must be registered before evaluation of
+;; site-start and init files, because there might exist remote files
+;; already, f.e. files kept via recentf-mode.
+;;;###autoload(tramp-register-file-name-handler)
+(tramp-register-file-name-handler)
+
;;;###autoload
(defsubst tramp-register-completion-file-name-handler ()
- "Add tramp completion file name handler to `file-name-handler-alist'."
+ "Add Tramp completion file name handler to `file-name-handler-alist'."
+ ;; Remove autoloaded handler from file name handler alist. Useful,
+ ;; if `tramp-syntax' has been changed.
+ (let ((a1 (rassq
+ 'tramp-completion-file-name-handler file-name-handler-alist)))
+ (setq file-name-handler-alist (delete a1 file-name-handler-alist)))
;; `partial-completion-mode' is unknown in XEmacs. So we should
;; load it unconditionally there. In the GNU Emacs case, method/
;; user/host name completion shall be bound to `partial-completion-mode'.
+ ;; `ido-mode' and `icy-mode' are other packages which extend file
+ ;; name completion.
(when (or (not (boundp 'partial-completion-mode))
(symbol-value 'partial-completion-mode)
- (featurep 'ido))
+ (featurep 'ido)
+ (featurep 'icicles))
(add-to-list 'file-name-handler-alist
(cons tramp-completion-file-name-regexp
'tramp-completion-file-name-handler))
@@ -4467,17 +4519,12 @@ Falls back to normal file name handler if no tramp file name handler exists."
(setq file-name-handler-alist
(cons jka (delete jka file-name-handler-alist))))))
-;; `tramp-file-name-handler' must be registered before evaluation of
-;; site-start and init files, because there might exist remote files
-;; already, f.e. files kept via recentf-mode.
-;;;###autoload(tramp-register-file-name-handler)
;; During autoload, it shall be checked whether
;; `partial-completion-mode' is active. Therefore registering of
;; `tramp-completion-file-name-handler' will be delayed.
;;;###autoload(add-hook
;;;###autoload 'after-init-hook
;;;###autoload '(lambda () (tramp-register-completion-file-name-handler)))
-(tramp-register-file-name-handler)
(tramp-register-completion-file-name-handler)
;;;###autoload
@@ -4491,67 +4538,7 @@ Falls back to normal file name handler if no tramp file name handler exists."
(add-hook 'tramp-unload-hook 'tramp-unload-file-name-handlers)
-
-;;; Interactions with other packages:
-
-;; -- complete.el --
-
-;; This function contributed by Ed Sabol
-(defun tramp-handle-expand-many-files (name)
- "Like `PC-expand-many-files' for tramp files."
- (with-parsed-tramp-file-name name nil
- (save-match-data
- (if (or (string-match "\\*" name)
- (string-match "\\?" name)
- (string-match "\\[.*\\]" name))
- (save-excursion
- (let (bufstr)
- ;; CCC: To do it right, we should quote certain characters
- ;; in the file name, but since the echo command is going to
- ;; break anyway when there are spaces in the file names, we
- ;; don't bother.
- ;;-(let ((comint-file-name-quote-list
- ;;- (set-difference tramp-file-name-quote-list
- ;;- '(?\* ?\? ?[ ?]))))
- ;;- (tramp-send-command
- ;;- multi-method method user host
- ;;- (format "echo %s" (comint-quote-filename localname)))
- ;;- (tramp-wait-for-output))
- (tramp-send-command multi-method method user host
- (format "echo %s" localname))
- (tramp-wait-for-output)
- (setq bufstr (buffer-substring (point-min)
- (tramp-line-end-position)))
- (goto-char (point-min))
- (if (string-equal localname bufstr)
- nil
- (insert "(\"")
- (while (search-forward " " nil t)
- (delete-backward-char 1)
- (insert "\" \""))
- (goto-char (point-max))
- (delete-backward-char 1)
- (insert "\")")
- (goto-char (point-min))
- (mapcar
- (function (lambda (x)
- (tramp-make-tramp-file-name multi-method method
- user host x)))
- (read (current-buffer))))))
- (list (expand-file-name name))))))
-
-(eval-after-load "complete"
- '(progn
- (defadvice PC-expand-many-files
- (around tramp-advice-PC-expand-many-files (name) activate)
- "Invoke `tramp-handle-expand-many-files' for tramp files."
- (if (tramp-tramp-file-p name)
- (setq ad-return-value (tramp-handle-expand-many-files name))
- ad-do-it))
- (add-hook 'tramp-unload-hook
- '(lambda () (ad-unadvise 'PC-expand-many-files)))))
-
-;;; File name handler functions for completion mode
+;;; File name handler functions for completion mode.
(defvar tramp-completion-mode nil
"If non-nil, external packages signal that they are in file name completion.
@@ -4562,139 +4549,121 @@ but <TAB>, <SPACE> or ?\\? for file name completion. This variable
should never be set globally, the intention is to let-bind it.")
;; Necessary because `tramp-file-name-regexp-unified' and
-;; `tramp-completion-file-name-regexp-unified' aren't different.
-;; If nil, `tramp-completion-run-real-handler' is called (i.e. forwarding to
-;; `tramp-file-name-handler'). Otherwise, it takes `tramp-run-real-handler'.
-;; Using `last-input-event' is a little bit risky, because completing a file
-;; might require loading other files, like "~/.netrc", and for them it
-;; shouldn't be decided based on that variable. On the other hand, those files
-;; shouldn't have partial tramp file name syntax. Maybe another variable should
-;; be introduced overwriting this check in such cases. Or we change tramp
-;; file name syntax in order to avoid ambiguities, like in XEmacs ...
-;; In case of non unified file names it can be always true (and wouldn't be
-;; necessary, because there are different regexp).
-(defun tramp-completion-mode-p (file)
+;; `tramp-completion-file-name-regexp-unified' aren't different. If
+;; nil, `tramp-completion-run-real-handler' is called (i.e. forwarding
+;; to `tramp-file-name-handler'). Otherwise, it takes
+;; `tramp-run-real-handler'. Using `last-input-event' is a little bit
+;; risky, because completing a file might require loading other files,
+;; like "~/.netrc", and for them it shouldn't be decided based on that
+;; variable. On the other hand, those files shouldn't have partial
+;; Tramp file name syntax. Maybe another variable should be introduced
+;; overwriting this check in such cases. Or we change Tramp file name
+;; syntax in order to avoid ambiguities, like in XEmacs ...
+(defun tramp-completion-mode-p ()
"Checks whether method / user name / host name completion is active."
- (cond
- (tramp-completion-mode t)
- ((string-match "^/.*:.*:$" file) nil)
- ((string-match
- (concat tramp-prefix-regexp
- "\\(" tramp-method-regexp "\\)" tramp-postfix-single-method-regexp "$")
- file)
- (member (match-string 1 file) (mapcar 'car tramp-methods)))
- ((or
- ;; Emacs.
- (equal last-input-event 'tab)
- (and (natnump last-input-event)
- (or
- ;; ?\t has event-modifier 'control
- (char-equal last-input-event ?\t)
- (and (not (event-modifiers last-input-event))
- (or (char-equal last-input-event ?\?)
- (char-equal last-input-event ?\ )))))
- ;; XEmacs.
- (and (featurep 'xemacs)
- ;; `last-input-event' might be nil.
- (not (null last-input-event))
- ;; `last-input-event' may have no character approximation.
- (funcall (symbol-function 'event-to-character) last-input-event)
- (or
- ;; ?\t has event-modifier 'control
- (char-equal
- (funcall (symbol-function 'event-to-character)
- last-input-event) ?\t)
- (and (not (event-modifiers last-input-event))
- (or (char-equal
- (funcall (symbol-function 'event-to-character)
- last-input-event) ?\?)
- (char-equal
- (funcall (symbol-function 'event-to-character)
- last-input-event) ?\ ))))))
- t)))
+ (or
+ ;; Signal from outside.
+ tramp-completion-mode
+ ;; Emacs.
+ (equal last-input-event 'tab)
+ (and (natnump last-input-event)
+ (or
+ ;; ?\t has event-modifier 'control.
+ (char-equal last-input-event ?\t)
+ (and (not (event-modifiers last-input-event))
+ (or (char-equal last-input-event ?\?)
+ (char-equal last-input-event ?\ )))))
+ ;; XEmacs.
+ (and (featurep 'xemacs)
+ ;; `last-input-event' might be nil.
+ (not (null last-input-event))
+ ;; `last-input-event' may have no character approximation.
+ (funcall (symbol-function 'event-to-character) last-input-event)
+ (or
+ ;; ?\t has event-modifier 'control.
+ (char-equal
+ (funcall (symbol-function 'event-to-character)
+ last-input-event) ?\t)
+ (and (not (event-modifiers last-input-event))
+ (or (char-equal
+ (funcall (symbol-function 'event-to-character)
+ last-input-event) ?\?)
+ (char-equal
+ (funcall (symbol-function 'event-to-character)
+ last-input-event) ?\ )))))))
;; Method, host name and user name completion.
;; `tramp-completion-dissect-file-name' returns a list of
;; tramp-file-name structures. For all of them we return possible completions.
;;;###autoload
(defun tramp-completion-handle-file-name-all-completions (filename directory)
- "Like `file-name-all-completions' for partial tramp files."
-
- (unwind-protect
- ;; We need to reset `tramp-completion-mode'.
- (progn
- (setq tramp-completion-mode t)
- (let*
- ((fullname (concat directory filename))
- ;; possible completion structures
- (v (tramp-completion-dissect-file-name fullname))
- result result1)
-
- (while v
- (let* ((car (car v))
- (multi-method (tramp-file-name-multi-method car))
- (method (tramp-file-name-method car))
- (user (tramp-file-name-user car))
- (host (tramp-file-name-host car))
- (localname (tramp-file-name-localname car))
- (m (tramp-find-method multi-method method user host))
- (tramp-current-user user) ; see `tramp-parse-passwd'
- all-user-hosts)
-
- (unless (or multi-method ;; Not handled (yet).
- localname) ;; Nothing to complete
-
- (if (or user host)
-
- ;; Method dependent user / host combinations
- (progn
- (mapcar
- (lambda (x)
- (setq all-user-hosts
- (append all-user-hosts
- (funcall (nth 0 x) (nth 1 x)))))
- (tramp-get-completion-function m))
-
- (setq result (append result
- (mapcar
- (lambda (x)
- (tramp-get-completion-user-host
- method user host (nth 0 x) (nth 1 x)))
- (delq nil all-user-hosts)))))
-
- ;; Possible methods
- (setq result
- (append result (tramp-get-completion-methods m)))))
-
- (setq v (cdr v))))
-
- ;; unify list, remove nil elements
- (while result
- (let ((car (car result)))
- (when car (add-to-list
- 'result1 (substring car (length directory))))
- (setq result (cdr result))))
-
- ;; Complete local parts
- (append
- result1
- (condition-case nil
- (if result1
- ;; "/ssh:" does not need to be expanded as hostname.
- (tramp-run-real-handler
- 'file-name-all-completions (list filename directory))
- ;; No method/user/host found to be expanded.
- (tramp-completion-run-real-handler
- 'file-name-all-completions (list filename directory)))
- (error nil)))))
- ;; unwindform
- (setq tramp-completion-mode nil)))
+ "Like `file-name-all-completions' for partial Tramp files."
+
+ (let* ((fullname (tramp-drop-volume-letter
+ (expand-file-name filename directory)))
+ ;; Possible completion structures.
+ (v (tramp-completion-dissect-file-name fullname))
+ result result1)
+
+ (while v
+ (let* ((car (car v))
+ (method (tramp-file-name-method car))
+ (user (tramp-file-name-user car))
+ (host (tramp-file-name-host car))
+ (localname (tramp-file-name-localname car))
+ (m (tramp-find-method method user host))
+ (tramp-current-user user) ; see `tramp-parse-passwd'
+ all-user-hosts)
+
+ (unless localname ;; Nothing to complete.
+
+ (if (or user host)
+
+ ;; Method dependent user / host combinations.
+ (progn
+ (mapc
+ (lambda (x)
+ (setq all-user-hosts
+ (append all-user-hosts
+ (funcall (nth 0 x) (nth 1 x)))))
+ (tramp-get-completion-function m))
+
+ (setq result
+ (append result
+ (mapcar
+ (lambda (x)
+ (tramp-get-completion-user-host
+ method user host (nth 0 x) (nth 1 x)))
+ (delq nil all-user-hosts)))))
+
+ ;; Possible methods.
+ (setq result
+ (append result (tramp-get-completion-methods m)))))
+
+ (setq v (cdr v))))
+
+ ;; Unify list, remove nil elements.
+ (while result
+ (let ((car (car result)))
+ (when car
+ (add-to-list
+ 'result1
+ (substring car (length (tramp-drop-volume-letter directory)))))
+ (setq result (cdr result))))
+
+ ;; Complete local parts.
+ (append
+ result1
+ (condition-case nil
+ (tramp-completion-run-real-handler
+ 'file-name-all-completions (list filename directory))
+ (error nil)))))
;; Method, host name and user name completion for a file.
;;;###autoload
(defun tramp-completion-handle-file-name-completion
(filename directory &optional predicate)
- "Like `file-name-completion' for tramp files."
+ "Like `file-name-completion' for Tramp files."
(try-completion
filename
(mapcar 'list (file-name-all-completions filename directory))
@@ -4704,26 +4673,26 @@ should never be set globally, the intention is to let-bind it.")
;; I misuse a little bit the tramp-file-name structure in order to handle
;; completion possibilities for partial methods / user names / host names.
;; Return value is a list of tramp-file-name structures according to possible
-;; completions. If "multi-method" or "localname" is non-nil it means there
+;; completions. If "localname" is non-nil it means there
;; shouldn't be a completion anymore.
;; Expected results:
-;; "/x" "/[x" "/x@" "/[x@" "/x@y" "/[x@y"
-;; [nil nil nil "x" nil] [nil nil "x" nil nil] [nil nil "x" "y" nil]
-;; [nil nil "x" nil nil]
-;; [nil "x" nil nil nil]
-
-;; "/x:" "/x:y" "/x:y:"
-;; [nil nil nil "x" ""] [nil nil nil "x" "y"] [nil "x" nil "y" ""]
-;; "/[x/" "/[x/y"
-;; [nil "x" nil "" nil] [nil "x" nil "y" nil]
-;; [nil "x" "" nil nil] [nil "x" "y" nil nil]
-
-;; "/x:y@" "/x:y@z" "/x:y@z:"
-;; [nil nil nil "x" "y@"] [nil nil nil "x" "y@z"] [nil "x" "y" "z" ""]
-;; "/[x/y@" "/[x/y@z"
-;; [nil "x" nil "y" nil] [nil "x" "y" "z" nil]
+;; "/x" "/[x" "/x@" "/[x@" "/x@y" "/[x@y"
+;; [nil nil "x" nil] [nil "x" nil nil] [nil "x" "y" nil]
+;; [nil "x" nil nil]
+;; ["x" nil nil nil]
+
+;; "/x:" "/x:y" "/x:y:"
+;; [nil nil "x" ""] [nil nil "x" "y"] ["x" nil "y" ""]
+;; "/[x/" "/[x/y"
+;; ["x" nil "" nil] ["x" nil "y" nil]
+;; ["x" "" nil nil] ["x" "y" nil nil]
+
+;; "/x:y@" "/x:y@z" "/x:y@z:"
+;; [nil nil "x" "y@"] [nil nil "x" "y@z"] ["x" "y" "z" ""]
+;; "/[x/y@" "/[x/y@z"
+;; ["x" nil "y" nil] ["x" "y" "z" nil]
(defun tramp-completion-dissect-file-name (name)
"Returns a list of `tramp-file-name' structures.
They are collected by `tramp-completion-dissect-file-name1'."
@@ -4748,27 +4717,51 @@ They are collected by `tramp-completion-dissect-file-name1'."
"\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp
"\\(" tramp-host-regexp x-nil "\\)$")
nil 1 2 nil))
- ;; "/method:user" "/[method/user"
+ ;; "/method:user" "/[method/user" "/method://user"
(tramp-completion-file-name-structure5
(list (concat tramp-prefix-regexp
- "\\(" tramp-method-regexp "\\)" tramp-postfix-single-method-regexp
+ "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp
"\\(" tramp-user-regexp x-nil "\\)$")
1 2 nil nil))
- ;; "/method:host" "/[method/host"
+ ;; "/method:host" "/[method/host" "/method://host"
(tramp-completion-file-name-structure6
(list (concat tramp-prefix-regexp
- "\\(" tramp-method-regexp "\\)" tramp-postfix-single-method-regexp
+ "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp
"\\(" tramp-host-regexp x-nil "\\)$")
1 nil 2 nil))
- ;; "/method:user@host" "/[method/user@host"
+ ;; "/method:user@host" "/[method/user@host" "/method://user@host"
(tramp-completion-file-name-structure7
(list (concat tramp-prefix-regexp
- "\\(" tramp-method-regexp "\\)" tramp-postfix-single-method-regexp
+ "\\(" tramp-method-regexp "\\)" tramp-postfix-method-regexp
"\\(" tramp-user-regexp "\\)" tramp-postfix-user-regexp
"\\(" tramp-host-regexp x-nil "\\)$")
- 1 2 3 nil)))
-
- (mapcar (lambda (regexp)
+ 1 2 3 nil))
+ ;; "/method: "/method:/"
+ (tramp-completion-file-name-structure8
+ (list
+ (if (equal tramp-syntax 'url)
+ (concat tramp-prefix-regexp
+ "\\(" tramp-method-regexp "\\)"
+ "\\(" (substring tramp-postfix-method-regexp 0 1)
+ "\\|" (substring tramp-postfix-method-regexp 1 2) "\\)"
+ "\\(" "\\)$")
+ ;; Should not match if not URL syntax.
+ (concat tramp-prefix-regexp "/$"))
+ 1 3 nil nil))
+ ;; "/method: "/method:/"
+ (tramp-completion-file-name-structure9
+ (list
+ (if (equal tramp-syntax 'url)
+ (concat tramp-prefix-regexp
+ "\\(" tramp-method-regexp "\\)"
+ "\\(" (substring tramp-postfix-method-regexp 0 1)
+ "\\|" (substring tramp-postfix-method-regexp 1 2) "\\)"
+ "\\(" "\\)$")
+ ;; Should not match if not URL syntax.
+ (concat tramp-prefix-regexp "/$"))
+ 1 nil 3 nil)))
+
+ (mapc (lambda (regexp)
(add-to-list 'result
(tramp-completion-dissect-file-name1 regexp name)))
(list
@@ -4779,30 +4772,28 @@ They are collected by `tramp-completion-dissect-file-name1'."
tramp-completion-file-name-structure5
tramp-completion-file-name-structure6
tramp-completion-file-name-structure7
+ tramp-completion-file-name-structure8
+ tramp-completion-file-name-structure9
tramp-file-name-structure))
(delq nil result)))
(defun tramp-completion-dissect-file-name1 (structure name)
"Returns a `tramp-file-name' structure matching STRUCTURE.
-The structure consists of multi-method, remote method, remote user,
+The structure consists of remote method, remote user,
remote host and localname (filename on remote host)."
- (let (method)
- (save-match-data
- (when (string-match (nth 0 structure) name)
- (setq method (and (nth 1 structure)
- (match-string (nth 1 structure) name)))
- (if (and method (member method tramp-multi-methods))
- ;; Not handled (yet).
- (vector method nil nil nil nil)
- (let ((user (and (nth 2 structure)
- (match-string (nth 2 structure) name)))
- (host (and (nth 3 structure)
- (match-string (nth 3 structure) name)))
- (localname (and (nth 4 structure)
- (match-string (nth 4 structure) name))))
- (vector nil method user host localname)))))))
+ (save-match-data
+ (when (string-match (nth 0 structure) name)
+ (let ((method (and (nth 1 structure)
+ (match-string (nth 1 structure) name)))
+ (user (and (nth 2 structure)
+ (match-string (nth 2 structure) name)))
+ (host (and (nth 3 structure)
+ (match-string (nth 3 structure) name)))
+ (localname (and (nth 4 structure)
+ (match-string (nth 4 structure) name))))
+ (vector method user host localname)))))
;; This function returns all possible method completions, adding the
;; trailing method delimeter.
@@ -4812,8 +4803,8 @@ remote host and localname (filename on remote host)."
(lambda (method)
(and method
(string-match (concat "^" (regexp-quote partial-method)) method)
- (tramp-make-tramp-file-name nil method nil nil nil)))
- (delete "multi" (mapcar 'car tramp-methods))))
+ (tramp-completion-make-tramp-file-name method nil nil nil)))
+ (mapcar 'car tramp-methods)))
;; Compares partial user and host names with possible completions.
(defun tramp-get-completion-user-host (method partial-user partial-host user host)
@@ -4845,13 +4836,15 @@ PARTIAL-USER must match USER, PARTIAL-HOST must match HOST."
host nil)))
(unless (zerop (+ (length user) (length host)))
- (tramp-make-tramp-file-name nil method user host nil)))
+ (tramp-completion-make-tramp-file-name method user host nil)))
(defun tramp-parse-rhosts (filename)
"Return a list of (user host) tuples allowed to access.
Either user or host may be nil."
-
- (let (res)
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
(when (file-readable-p filename)
(with-temp-buffer
(insert-file-contents filename)
@@ -4860,24 +4853,15 @@ Either user or host may be nil."
(push (tramp-parse-rhosts-group) res))))
res))
-;; Taken from gnus/netrc.el
-(eval-and-compile
- (defalias 'tramp-point-at-eol
- (if (fboundp 'point-at-eol)
- 'point-at-eol
- 'line-end-position)))
-
(defun tramp-parse-rhosts-group ()
"Return a (user host) tuple allowed to access.
Either user or host may be nil."
-
(let ((result)
(regexp
(concat
"^\\(" tramp-host-regexp "\\)"
"\\([ \t]+" "\\(" tramp-user-regexp "\\)" "\\)?")))
-
- (narrow-to-region (point) (tramp-point-at-eol))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
(when (re-search-forward regexp nil t)
(setq result (append (list (match-string 3) (match-string 1)))))
(widen)
@@ -4887,8 +4871,10 @@ Either user or host may be nil."
(defun tramp-parse-shosts (filename)
"Return a list of (user host) tuples allowed to access.
User is always nil."
-
- (let (res)
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
(when (file-readable-p filename)
(with-temp-buffer
(insert-file-contents filename)
@@ -4900,11 +4886,9 @@ User is always nil."
(defun tramp-parse-shosts-group ()
"Return a (user host) tuple allowed to access.
User is always nil."
-
(let ((result)
(regexp (concat "^\\(" tramp-host-regexp "\\)")))
-
- (narrow-to-region (point) (tramp-point-at-eol))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
(when (re-search-forward regexp nil t)
(setq result (list nil (match-string 1))))
(widen)
@@ -4916,8 +4900,10 @@ User is always nil."
(defun tramp-parse-sconfig (filename)
"Return a list of (user host) tuples allowed to access.
User is always nil."
-
- (let (res)
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
(when (file-readable-p filename)
(with-temp-buffer
(insert-file-contents filename)
@@ -4929,11 +4915,9 @@ User is always nil."
(defun tramp-parse-sconfig-group ()
"Return a (user host) tuple allowed to access.
User is always nil."
-
(let ((result)
(regexp (concat "^[ \t]*Host[ \t]+" "\\(" tramp-host-regexp "\\)")))
-
- (narrow-to-region (point) (tramp-point-at-eol))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
(when (re-search-forward regexp nil t)
(setq result (list nil (match-string 1))))
(widen)
@@ -4945,11 +4929,12 @@ User is always nil."
(defun tramp-parse-shostkeys (dirname)
"Return a list of (user host) tuples allowed to access.
User is always nil."
-
- (let ((regexp (concat "^key_[0-9]+_\\(" tramp-host-regexp "\\)\\.pub$"))
- (files (when (file-directory-p dirname) (directory-files dirname)))
- result)
-
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let* ((default-directory (tramp-compat-temporary-file-directory))
+ (regexp (concat "^key_[0-9]+_\\(" tramp-host-regexp "\\)\\.pub$"))
+ (files (when (file-directory-p dirname) (directory-files dirname)))
+ result)
(while files
(when (string-match regexp (car files))
(push (list nil (match-string 1 (car files))) result))
@@ -4959,12 +4944,13 @@ User is always nil."
(defun tramp-parse-sknownhosts (dirname)
"Return a list of (user host) tuples allowed to access.
User is always nil."
-
- (let ((regexp (concat "^\\(" tramp-host-regexp
- "\\)\\.ssh-\\(dss\\|rsa\\)\\.pub$"))
- (files (when (file-directory-p dirname) (directory-files dirname)))
- result)
-
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let* ((default-directory (tramp-compat-temporary-file-directory))
+ (regexp (concat "^\\(" tramp-host-regexp
+ "\\)\\.ssh-\\(dss\\|rsa\\)\\.pub$"))
+ (files (when (file-directory-p dirname) (directory-files dirname)))
+ result)
(while files
(when (string-match regexp (car files))
(push (list nil (match-string 1 (car files))) result))
@@ -4974,8 +4960,10 @@ User is always nil."
(defun tramp-parse-hosts (filename)
"Return a list of (user host) tuples allowed to access.
User is always nil."
-
- (let (res)
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
(when (file-readable-p filename)
(with-temp-buffer
(insert-file-contents filename)
@@ -4987,11 +4975,9 @@ User is always nil."
(defun tramp-parse-hosts-group ()
"Return a (user host) tuple allowed to access.
User is always nil."
-
(let ((result)
(regexp (concat "^\\(" tramp-host-regexp "\\)")))
-
- (narrow-to-region (point) (tramp-point-at-eol))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
(when (re-search-forward regexp nil t)
(unless (char-equal (or (char-after) ?\n) ?:) ; no IPv6
(setq result (list nil (match-string 1)))))
@@ -5003,13 +4989,15 @@ User is always nil."
;; For su-alike methods it would be desirable to return "root@localhost"
;; as default. Unfortunately, we have no information whether any user name
-;; has been typed already. So we (mis-)use tramp-current-user as indication,
+;; has been typed already. So we use `tramp-current-user' as indication,
;; assuming it is set in `tramp-completion-handle-file-name-all-completions'.
(defun tramp-parse-passwd (filename)
"Return a list of (user host) tuples allowed to access.
Host is always \"localhost\"."
-
- (let (res)
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
(if (zerop (length tramp-current-user))
'(("root" nil))
(when (file-readable-p filename)
@@ -5023,11 +5011,9 @@ Host is always \"localhost\"."
(defun tramp-parse-passwd-group ()
"Return a (user host) tuple allowed to access.
Host is always \"localhost\"."
-
(let ((result)
(regexp (concat "^\\(" tramp-user-regexp "\\):")))
-
- (narrow-to-region (point) (tramp-point-at-eol))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
(when (re-search-forward regexp nil t)
(setq result (list (match-string 1) "localhost")))
(widen)
@@ -5037,8 +5023,10 @@ Host is always \"localhost\"."
(defun tramp-parse-netrc (filename)
"Return a list of (user host) tuples allowed to access.
User may be nil."
-
- (let (res)
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
(when (file-readable-p filename)
(with-temp-buffer
(insert-file-contents filename)
@@ -5050,49 +5038,63 @@ User may be nil."
(defun tramp-parse-netrc-group ()
"Return a (user host) tuple allowed to access.
User may be nil."
-
(let ((result)
(regexp
(concat
"^[ \t]*machine[ \t]+" "\\(" tramp-host-regexp "\\)"
"\\([ \t]+login[ \t]+" "\\(" tramp-user-regexp "\\)" "\\)?")))
-
- (narrow-to-region (point) (tramp-point-at-eol))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
(when (re-search-forward regexp nil t)
(setq result (list (match-string 3) (match-string 1))))
(widen)
(forward-line 1)
result))
+(defun tramp-parse-putty (registry)
+ "Return a list of (user host) tuples allowed to access.
+User is always nil."
+ ;; On Windows, there are problems in completion when
+ ;; `default-directory' is remote.
+ (let ((default-directory (tramp-compat-temporary-file-directory))
+ res)
+ (with-temp-buffer
+ (when (zerop (tramp-local-call-process "reg" nil t nil "query" registry))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (push (tramp-parse-putty-group registry) res))))
+ res))
+
+(defun tramp-parse-putty-group (registry)
+ "Return a (user host) tuple allowed to access.
+User is always nil."
+ (let ((result)
+ (regexp (concat (regexp-quote registry) "\\\\\\(.+\\)")))
+ (narrow-to-region (point) (tramp-compat-line-end-position))
+ (when (re-search-forward regexp nil t)
+ (setq result (list nil (match-string 1))))
+ (widen)
+ (forward-line 1)
+ result))
+
;;; Internal Functions:
-(defun tramp-maybe-send-perl-script (multi-method method user host script name)
- "Define in remote shell function NAME implemented as perl SCRIPT.
-Only send the definition if it has not already been done.
-Function may have 0-3 parameters."
- (let ((remote-perl (tramp-get-remote-perl multi-method method user host)))
- (unless remote-perl (error "No remote perl"))
- (let ((perl-scripts (tramp-get-connection-property "perl-scripts" nil
- multi-method method user host)))
- (unless (memq name perl-scripts)
- (with-current-buffer (tramp-get-buffer multi-method method user host)
- (tramp-message 5 (concat "Sending the Perl script `" name "'..."))
- (tramp-send-string multi-method method user host
- (concat name
- " () {\n"
- remote-perl
- " -e '"
- script
- "' \"$1\" \"$2\" \"$3\" 2>/dev/null\n}"))
- (tramp-wait-for-output)
- (tramp-set-connection-property "perl-scripts" (cons name perl-scripts)
- multi-method method user host)
- (tramp-message 5 (concat "Sending the Perl script `" name "'...done.")))))))
+(defun tramp-maybe-send-script (vec script name)
+ "Define in remote shell function NAME implemented as SCRIPT.
+Only send the definition if it has not already been done."
+ (let* ((p (tramp-get-connection-process vec))
+ (scripts (tramp-get-connection-property p "scripts" nil)))
+ (unless (member name scripts)
+ (tramp-message vec 5 "Sending script `%s'..." name)
+ ;; The script could contain a call of Perl. This is masked with `%s'.
+ (tramp-send-command-and-check
+ vec
+ (format "%s () {\n%s\n}" name
+ (format script (tramp-get-remote-perl vec))))
+ (tramp-set-connection-property p "scripts" (cons name scripts))
+ (tramp-message vec 5 "Sending script `%s'...done." name))))
(defun tramp-set-auto-save ()
- (when (and (buffer-file-name)
- (tramp-tramp-file-p (buffer-file-name))
- ;; ange-ftp has its own auto-save mechanism
+ (when (and ;; ange-ftp has its own auto-save mechanism
(eq (tramp-find-foreign-file-name-handler (buffer-file-name))
'tramp-sh-file-name-handler)
auto-save-default)
@@ -5105,340 +5107,277 @@ Function may have 0-3 parameters."
(defun tramp-run-test (switch filename)
"Run `test' on the remote system, given a SWITCH and a FILENAME.
Returns the exit code of the `test' program."
- (let ((v (tramp-dissect-file-name filename)))
- (save-excursion
- (tramp-send-command-and-check
- (tramp-file-name-multi-method v) (tramp-file-name-method v)
- (tramp-file-name-user v) (tramp-file-name-host v)
- (format "test %s %s" switch
- (tramp-shell-quote-argument (tramp-file-name-localname v)))))))
-
-(defun tramp-run-test2 (program file1 file2 &optional switch)
- "Run `test'-like PROGRAM on the remote system, given FILE1, FILE2.
-The optional SWITCH is inserted between the two files.
-Returns the exit code of the `test' PROGRAM. Barfs if the methods,
+ (with-parsed-tramp-file-name filename nil
+ (tramp-send-command-and-check
+ v
+ (format
+ "%s %s %s"
+ (tramp-get-test-command v)
+ switch
+ (tramp-shell-quote-argument localname)))))
+
+(defun tramp-run-test2 (format-string file1 file2)
+ "Run `test'-like program on the remote system, given FILE1, FILE2.
+FORMAT-STRING contains the program name, switches, and place holders.
+Returns the exit code of the `test' program. Barfs if the methods,
hosts, or files, disagree."
- (let* ((v1 (tramp-dissect-file-name file1))
- (v2 (tramp-dissect-file-name file2))
- (mmethod1 (tramp-file-name-multi-method v1))
- (mmethod2 (tramp-file-name-multi-method v2))
- (method1 (tramp-file-name-method v1))
- (method2 (tramp-file-name-method v2))
- (user1 (tramp-file-name-user v1))
- (user2 (tramp-file-name-user v2))
- (host1 (tramp-file-name-host v1))
- (host2 (tramp-file-name-host v2))
- (localname1 (tramp-file-name-localname v1))
- (localname2 (tramp-file-name-localname v2)))
- (unless (and method1 method2 host1 host2
- (equal mmethod1 mmethod2)
- (equal method1 method2)
- (equal user1 user2)
- (equal host1 host2))
- (error "tramp-run-test2: %s"
- "only implemented for same method, same user, same host"))
- (save-excursion
+ (unless (tramp-equal-remote file1 file2)
+ (with-parsed-tramp-file-name (if (tramp-tramp-file-p file1) file1 file2) nil
+ (tramp-error
+ v 'file-error
+ "tramp-run-test2 only implemented for same method, user, host")))
+ (with-parsed-tramp-file-name file1 v1
+ (with-parsed-tramp-file-name file1 v2
(tramp-send-command-and-check
- mmethod1 method1 user1 host1
- (format "%s %s %s %s"
- program
- (tramp-shell-quote-argument localname1)
- (or switch "")
- (tramp-shell-quote-argument localname2))))))
-
-(defun tramp-touch (file time)
- "Set the last-modified timestamp of the given file.
-TIME is an Emacs internal time value as returned by `current-time'."
- (let* ((utc
- ;; With GNU Emacs, `format-time-string' has an optional
- ;; parameter UNIVERSAL. This is preferred.
- (and (functionp 'subr-arity)
- (= 3 (cdr (funcall (symbol-function 'subr-arity)
- (symbol-function 'format-time-string))))))
- (touch-time
- (if utc
- (format-time-string "%Y%m%d%H%M.%S" time t)
- (format-time-string "%Y%m%d%H%M.%S" time))))
- (if (tramp-tramp-file-p file)
- (with-parsed-tramp-file-name file nil
- (let ((buf (tramp-get-buffer multi-method method user host)))
- (unless (zerop (tramp-send-command-and-check
- multi-method method user host
- (format "%s touch -t %s %s"
- (if utc "TZ=UTC; export TZ;" "")
- touch-time
- (tramp-shell-quote-argument localname))
- t))
- (pop-to-buffer buf)
- (error "tramp-touch: touch failed, see buffer `%s' for details"
- buf))))
- ;; It's a local file
- (with-temp-buffer
- (unless (zerop (call-process
- "touch" nil (current-buffer) nil "-t" touch-time file))
- (pop-to-buffer (current-buffer))
- (error "tramp-touch: touch failed"))))))
-
-(defun tramp-buffer-name (multi-method method user host)
- "A name for the connection buffer for USER at HOST using METHOD."
- (if multi-method
- (tramp-buffer-name-multi-method "tramp" multi-method method user host)
- (let ((method (tramp-find-method multi-method method user host)))
- (if user
- (format "*tramp/%s %s@%s*" method user host)
- (format "*tramp/%s %s*" method host)))))
-
-(defun tramp-buffer-name-multi-method (prefix multi-method method user host)
- "A name for the multi method connection buffer.
-MULTI-METHOD gives the multi method, METHOD the array of methods,
-USER the array of user names, HOST the array of host names."
- (unless (and (= (length method) (length user))
- (= (length method) (length host)))
- (error "Syntax error in multi method (implementation error)"))
- (let ((len (length method))
- (i 0)
- string-list)
- (while (< i len)
- (setq string-list
- (cons (if (aref user i)
- (format "%s#%s@%s:" (aref method i)
- (aref user i) (aref host i))
- (format "%s@%s:" (aref method i) (aref host i)))
- string-list))
- (setq i (1+ i)))
- (format "*%s/%s %s*"
- prefix multi-method
- (apply 'concat (reverse string-list)))))
-
-(defun tramp-get-buffer (multi-method method user host)
- "Get the connection buffer to be used for USER at HOST using METHOD."
+ v1
+ (format format-string
+ (tramp-shell-quote-argument v1-localname)
+ (tramp-shell-quote-argument v2-localname))))))
+
+(defun tramp-buffer-name (vec)
+ "A name for the connection buffer VEC."
+ ;; We must use `tramp-file-name-real-host', because for gateway
+ ;; methods the default port will be expanded later on, which would
+ ;; tamper the name.
+ (let ((method (tramp-file-name-method vec))
+ (user (tramp-file-name-user vec))
+ (host (tramp-file-name-real-host vec)))
+ (if (not (zerop (length user)))
+ (format "*tramp/%s %s@%s*" method user host)
+ (format "*tramp/%s %s*" method host))))
+
+(defun tramp-get-buffer (vec)
+ "Get the connection buffer to be used for VEC."
+ (or (get-buffer (tramp-buffer-name vec))
+ (with-current-buffer (get-buffer-create (tramp-buffer-name vec))
+ (setq buffer-undo-list t)
+ (setq default-directory
+ (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ "/"))
+ (current-buffer))))
+
+(defun tramp-get-connection-buffer (vec)
+ "Get the connection buffer to be used for VEC.
+In case a second asynchronous communication has been started, it is different
+from `tramp-get-buffer'."
+ (or (tramp-get-connection-property vec "process-buffer" nil)
+ (tramp-get-buffer vec)))
+
+(defun tramp-get-connection-process (vec)
+ "Get the connection process to be used for VEC.
+In case a second asynchronous communication has been started, it is different
+from the default one."
+ (get-process
+ (or (tramp-get-connection-property vec "process-name" nil)
+ (tramp-buffer-name vec))))
+
+(defun tramp-debug-buffer-name (vec)
+ "A name for the debug buffer for VEC."
+ ;; We must use `tramp-file-name-real-host', because for gateway
+ ;; methods the default port will be expanded later on, which would
+ ;; tamper the name.
+ (let ((method (tramp-file-name-method vec))
+ (user (tramp-file-name-user vec))
+ (host (tramp-file-name-real-host vec)))
+ (if (not (zerop (length user)))
+ (format "*debug tramp/%s %s@%s*" method user host)
+ (format "*debug tramp/%s %s*" method host))))
+
+(defun tramp-get-debug-buffer (vec)
+ "Get the debug buffer for VEC."
(with-current-buffer
- (get-buffer-create (tramp-buffer-name multi-method method user host))
- (setq buffer-undo-list t)
+ (get-buffer-create (tramp-debug-buffer-name vec))
+ (when (bobp)
+ (setq buffer-undo-list t)
+ ;; Activate outline-mode. This runs `text-mode-hook' and
+ ;; `outline-mode-hook'. We must prevent that local processes
+ ;; die. Yes: I've seen `flyspell-mode', which starts "ispell"
+ ;; ...
+ (let ((default-directory (tramp-compat-temporary-file-directory)))
+ (outline-mode))
+ (set (make-local-variable 'outline-regexp)
+ "[0-9]+:[0-9]+:[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #")
+; (set (make-local-variable 'outline-regexp)
+; "[a-z.-]+:[0-9]+: [a-z0-9-]+ (\\([0-9]+\\)) #")
+ (set (make-local-variable 'outline-level) 'tramp-outline-level))
(current-buffer)))
-(defun tramp-debug-buffer-name (multi-method method user host)
- "A name for the debug buffer for USER at HOST using METHOD."
- (if multi-method
- (tramp-buffer-name-multi-method "debug tramp"
- multi-method method user host)
- (let ((method (tramp-find-method multi-method method user host)))
- (if user
- (format "*debug tramp/%s %s@%s*" method user host)
- (format "*debug tramp/%s %s*" method host)))))
-
-(defun tramp-get-debug-buffer (multi-method method user host)
- "Get the debug buffer for USER at HOST using METHOD."
- (with-current-buffer
- (get-buffer-create
- (tramp-debug-buffer-name multi-method method user host))
- (setq buffer-undo-list t)
- (current-buffer)))
+(defun tramp-outline-level ()
+ "Return the depth to which a statement is nested in the outline.
+Point must be at the beginning of a header line.
-(defun tramp-find-executable (multi-method method user host
- progname dirlist ignore-tilde)
- "Searches for PROGNAME in all directories mentioned in DIRLIST.
-First args METHOD, USER and HOST specify the connection, PROGNAME
-is the program to search for, and DIRLIST gives the list of directories
-to search. If IGNORE-TILDE is non-nil, directory names starting
-with `~' will be ignored.
+The outline level is equal to the verbosity of the Tramp message."
+ (1+ (string-to-number (match-string 1))))
+
+(defun tramp-find-executable
+ (vec progname dirlist &optional ignore-tilde ignore-path)
+ "Searches for PROGNAME in $PATH and all directories mentioned in DIRLIST.
+First arg VEC specifies the connection, PROGNAME is the program
+to search for, and DIRLIST gives the list of directories to
+search. If IGNORE-TILDE is non-nil, directory names starting
+with `~' will be ignored. If IGNORE-PATH is non-nil, searches
+only in DIRLIST.
Returns the absolute file name of PROGNAME, if found, and nil otherwise.
This function expects to be in the right *tramp* buffer."
- (let (result)
- (when ignore-tilde
- ;; Remove all ~/foo directories from dirlist. In Emacs 20,
- ;; `remove' is in CL, and we want to avoid CL dependencies.
- (let (newdl d)
- (while dirlist
- (setq d (car dirlist))
- (setq dirlist (cdr dirlist))
- (unless (char-equal ?~ (aref d 0))
- (setq newdl (cons d newdl))))
- (setq dirlist (nreverse newdl))))
- (tramp-send-command
- multi-method method user host
- (format (concat "while read d; "
- "do if test -x $d/%s -a -f $d/%s; "
- "then echo tramp_executable $d/%s; "
- "break; fi; done <<'EOF'")
- progname progname progname))
- (mapcar (lambda (d)
- (tramp-send-command multi-method method user host d))
- dirlist)
- (tramp-send-command multi-method method user host "EOF")
- (tramp-wait-for-output)
- (goto-char (point-max))
- (when (search-backward "tramp_executable " nil t)
- (skip-chars-forward "^ ")
- (skip-chars-forward " ")
- (buffer-substring (point) (tramp-line-end-position)))))
-
-(defun tramp-set-remote-path (multi-method method user host var dirlist)
- "Sets the remote environment VAR to existing directories from DIRLIST.
-I.e., for each directory in DIRLIST, it is tested whether it exists and if
-so, it is added to the environment variable VAR."
- (let ((existing-dirs
- (mapcar
- (lambda (x)
- (when (and
- (file-exists-p
- (tramp-make-tramp-file-name multi-method method user host x))
- (file-directory-p
- (tramp-make-tramp-file-name multi-method method user host x)))
- x))
- dirlist)))
- (tramp-send-command
- multi-method method user host
- (concat var "="
- (mapconcat 'identity (delq nil existing-dirs) ":")
- "; export " var))
- (tramp-wait-for-output)))
+ (with-current-buffer (tramp-get-buffer vec)
+ (let (result)
+ ;; Check whether the executable is in $PATH. "which(1)" does not
+ ;; report always a correct error code; therefore we check the
+ ;; number of words it returns.
+ (unless ignore-path
+ (tramp-send-command vec (format "which \\%s | wc -w" progname))
+ (goto-char (point-min))
+ (if (looking-at "^1$")
+ (setq result (concat "\\" progname))))
+ (unless result
+ (when ignore-tilde
+ ;; Remove all ~/foo directories from dirlist. In Emacs 20,
+ ;; `remove' is in CL, and we want to avoid CL dependencies.
+ (let (newdl d)
+ (while dirlist
+ (setq d (car dirlist))
+ (setq dirlist (cdr dirlist))
+ (unless (char-equal ?~ (aref d 0))
+ (setq newdl (cons d newdl))))
+ (setq dirlist (nreverse newdl))))
+ (tramp-send-command
+ vec
+ (format (concat "while read d; "
+ "do if test -x $d/%s -a -f $d/%s; "
+ "then echo tramp_executable $d/%s; "
+ "break; fi; done <<'EOF'\n"
+ "%s\nEOF")
+ progname progname progname (mapconcat 'identity dirlist "\n")))
+ (goto-char (point-max))
+ (when (search-backward "tramp_executable " nil t)
+ (skip-chars-forward "^ ")
+ (skip-chars-forward " ")
+ (setq result (buffer-substring
+ (point) (tramp-compat-line-end-position)))))
+ result)))
+
+(defun tramp-set-remote-path (vec)
+ "Sets the remote environment PATH to existing directories.
+I.e., for each directory in `tramp-remote-path', it is tested
+whether it exists and if so, it is added to the environment
+variable PATH."
+ (tramp-message vec 5 (format "Setting $PATH environment variable"))
+ (tramp-send-command
+ vec (format "PATH=%s; export PATH"
+ (mapconcat 'identity (tramp-get-remote-path vec) ":"))))
;; -- communication with external shell --
-(defun tramp-find-file-exists-command (multi-method method user host)
+(defun tramp-find-file-exists-command (vec)
"Find a command on the remote host for checking if a file exists.
Here, we are looking for a command which has zero exit status if the
file exists and nonzero exit status otherwise."
- (make-local-variable 'tramp-file-exists-command)
- (tramp-message 9 "Finding command to check if file exists")
- (let ((existing
- (tramp-make-tramp-file-name
- multi-method method user host
- "/")) ;assume this file always exists
+ (let ((existing "/")
(nonexisting
- (tramp-make-tramp-file-name
- multi-method method user host
- "/ this file does not exist "))) ;assume this never exists
+ (tramp-shell-quote-argument "/ this file does not exist "))
+ result)
;; The algorithm is as follows: we try a list of several commands.
;; For each command, we first run `$cmd /' -- this should return
;; true, as the root directory always exists. And then we run
- ;; `$cmd /this\ file\ does\ not\ exist', hoping that the file indeed
+ ;; `$cmd /this\ file\ does\ not\ exist ', hoping that the file indeed
;; does not exist. This should return false. We use the first
;; command we find that seems to work.
;; The list of commands to try is as follows:
- ;; `ls -d' This works on most systems, but NetBSD 1.4
- ;; has a bug: `ls' always returns zero exit
- ;; status, even for files which don't exist.
- ;; `test -e' Some Bourne shells have a `test' builtin
- ;; which does not know the `-e' option.
- ;; `/bin/test -e' For those, the `test' binary on disk normally
- ;; provides the option. Alas, the binary
- ;; is sometimes `/bin/test' and sometimes it's
- ;; `/usr/bin/test'.
- ;; `/usr/bin/test -e' In case `/bin/test' does not exist.
+ ;; `ls -d' This works on most systems, but NetBSD 1.4
+ ;; has a bug: `ls' always returns zero exit
+ ;; status, even for files which don't exist.
+ ;; `test -e' Some Bourne shells have a `test' builtin
+ ;; which does not know the `-e' option.
+ ;; `/bin/test -e' For those, the `test' binary on disk normally
+ ;; provides the option. Alas, the binary
+ ;; is sometimes `/bin/test' and sometimes it's
+ ;; `/usr/bin/test'.
+ ;; `/usr/bin/test -e' In case `/bin/test' does not exist.
(unless (or
- (and (setq tramp-file-exists-command "test -e %s")
- (file-exists-p existing)
- (not (file-exists-p nonexisting)))
- (and (setq tramp-file-exists-command "/bin/test -e %s")
- (file-exists-p existing)
- (not (file-exists-p nonexisting)))
- (and (setq tramp-file-exists-command "/usr/bin/test -e %s")
- (file-exists-p existing)
- (not (file-exists-p nonexisting)))
- (and (setq tramp-file-exists-command "ls -d %s")
- (file-exists-p existing)
- (not (file-exists-p nonexisting))))
- (error "Couldn't find command to check if file exists"))))
+ (and (setq result (format "%s -e" (tramp-get-test-command vec)))
+ (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result existing)))
+ (not (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting)))))
+ (and (setq result "/bin/test -e")
+ (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result existing)))
+ (not (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting)))))
+ (and (setq result "/usr/bin/test -e")
+ (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result existing)))
+ (not (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting)))))
+ (and (setq result (format "%s -d" (tramp-get-ls-command vec)))
+ (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result existing)))
+ (not (zerop (tramp-send-command-and-check
+ vec (format "%s %s" result nonexisting))))))
+ (tramp-error
+ vec 'file-error "Couldn't find command to check if file exists"))
+ result))
;; CCC test ksh or bash found for tilde expansion?
-(defun tramp-find-shell (multi-method method user host)
- "Find a shell on the remote host which groks tilde expansion."
- (let ((shell nil))
- (tramp-send-command multi-method method user host "echo ~root")
- (tramp-wait-for-output)
- (cond
- ((string-match "^~root$" (buffer-string))
- (setq shell
- (or (tramp-find-executable multi-method method user host
- "bash" tramp-remote-path t)
- (tramp-find-executable multi-method method user host
- "ksh" tramp-remote-path t)))
- (unless shell
- (error "Couldn't find a shell which groks tilde expansion"))
- ;; Find arguments for this shell.
- (let ((alist tramp-sh-extra-args)
- item extra-args)
- (while (and alist (null extra-args))
- (setq item (pop alist))
- (when (string-match (car item) shell)
- (setq extra-args (cdr item))))
- (when extra-args (setq shell (concat shell " " extra-args))))
- (tramp-message
- 5 "Starting remote shell `%s' for tilde expansion..." shell)
- (tramp-send-command
- multi-method method user host
- (concat "PROMPT_COMMAND='' PS1='$ ' exec " shell)) ;
- (tramp-barf-if-no-shell-prompt
- (get-buffer-process (current-buffer))
- 60 "Couldn't find remote `%s' prompt" shell)
- (tramp-message
- 9 "Setting remote shell prompt...")
- ;; Douglas Gray Stephens <DGrayStephens@slb.com> says that we
- ;; must use "\n" here, not tramp-rsh-end-of-line. Kai left the
- ;; last tramp-rsh-end-of-line, Douglas wanted to replace that,
- ;; as well.
- (process-send-string
- nil (format "PROMPT_COMMAND=''; PS1='%s%s%s'; PS2=''; PS3=''%s"
+(defun tramp-find-shell (vec)
+ "Opens a shell on the remote host which groks tilde expansion."
+ (unless (tramp-get-connection-property vec "remote-shell" nil)
+ (let (shell)
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-send-command vec "echo ~root" t)
+ (cond
+ ((string-match "^~root$" (buffer-string))
+ (setq shell
+ (or (tramp-find-executable
+ vec "bash" (tramp-get-remote-path vec) t)
+ (tramp-find-executable
+ vec "ksh" (tramp-get-remote-path vec) t)))
+ (unless shell
+ (tramp-error
+ vec 'file-error
+ "Couldn't find a shell which groks tilde expansion"))
+ ;; Find arguments for this shell.
+ (let ((alist tramp-sh-extra-args)
+ item extra-args)
+ (while (and alist (null extra-args))
+ (setq item (pop alist))
+ (when (string-match (car item) shell)
+ (setq extra-args (cdr item))))
+ (when extra-args (setq shell (concat shell " " extra-args))))
+ (tramp-message
+ vec 5 "Starting remote shell `%s' for tilde expansion..." shell)
+ (let ((tramp-end-of-output "$ "))
+ (tramp-send-command
+ vec
+ (format "PROMPT_COMMAND='' PS1='$ ' PS2='' PS3='' exec %s" shell)
+ t))
+ (tramp-message vec 5 "Setting remote shell prompt...")
+ ;; Douglas Gray Stephens <DGrayStephens@slb.com> says that we
+ ;; must use "\n" here, not tramp-rsh-end-of-line. Kai left the
+ ;; last tramp-rsh-end-of-line, Douglas wanted to replace that,
+ ;; as well.
+ (tramp-send-command
+ vec
+ (format "PROMPT_COMMAND=''; PS1='%s%s%s'; PS2=''; PS3=''"
tramp-rsh-end-of-line
tramp-end-of-output
- tramp-rsh-end-of-line
- tramp-rsh-end-of-line))
- (tramp-wait-for-output)
- (tramp-message
- 9 "Setting remote shell prompt...done")
- )
- (t (tramp-message 5 "Remote `%s' groks tilde expansion, good"
- (tramp-get-method-parameter
- multi-method method user host 'tramp-remote-sh))))))
-
-(defun tramp-check-ls-command (multi-method method user host cmd)
- "Checks whether the given `ls' executable groks `-n'.
-METHOD, USER and HOST specify the connection, CMD (the absolute file name of)
-the `ls' executable. Returns t if CMD supports the `-n' option, nil
-otherwise."
- (tramp-message 9 "Checking remote `%s' command for `-n' option" cmd)
- (when (file-executable-p
- (tramp-make-tramp-file-name multi-method method user host cmd))
- (let ((result nil))
- (tramp-message 7 "Testing remote command `%s' for -n..." cmd)
- (setq result
- (tramp-send-command-and-check
- multi-method method user host
- (format "%s -lnd / >/dev/null"
- cmd)))
- (tramp-message 7 "Testing remote command `%s' for -n...%s"
- cmd
- (if (zerop result) "okay" "failed"))
- (zerop result))))
-
-(defun tramp-check-ls-commands (multi-method method user host cmd dirlist)
- "Checks whether the given `ls' executable in one of the dirs groks `-n'.
-Returns nil if none was found, else the command is returned."
- (let ((dl dirlist)
- (result nil))
- (tramp-let-maybe directory-sep-char ?/ ;for XEmacs
- ;; It would be better to use the CL function `find', but
- ;; we don't want run-time dependencies on CL.
- (while (and dl (not result))
- (let ((x (concat (file-name-as-directory (car dl)) cmd)))
- (when (tramp-check-ls-command multi-method method user host x)
- (setq result x)))
- (setq dl (cdr dl)))
- result)))
-
-(defun tramp-find-ls-command (multi-method method user host)
- "Finds an `ls' command which groks the `-n' option, returning nil if failed.
-\(This option prints numeric user and group ids in a long listing.)"
- (tramp-message 9 "Finding a suitable `ls' command")
- (or
- (tramp-check-ls-commands multi-method method user host "ls" tramp-remote-path)
- (tramp-check-ls-commands multi-method method user host "gnuls" tramp-remote-path)
- (tramp-check-ls-commands multi-method method user host "gls" tramp-remote-path)))
+ tramp-rsh-end-of-line)
+ t)
+ (tramp-message vec 5 "Setting remote shell prompt...done"))
+ (t (tramp-message
+ vec 5 "Remote `%s' groks tilde expansion, good"
+ (tramp-get-method-parameter
+ (tramp-file-name-method vec) 'tramp-remote-sh))
+ (tramp-set-connection-property
+ vec "remote-shell"
+ (tramp-get-method-parameter
+ (tramp-file-name-method vec) 'tramp-remote-sh))))))))
;; ------------------------------------------------------------
;; -- Functions for establishing connection --
@@ -5448,828 +5387,358 @@ Returns nil if none was found, else the command is returned."
;; prompts from the remote host. See the variable
;; `tramp-actions-before-shell' for usage of these functions.
-(defun tramp-action-login (p multi-method method user host)
+(defun tramp-action-login (proc vec)
"Send the login name."
- (tramp-message 9 "Sending login name `%s'"
- (or user (user-login-name)))
- (erase-buffer)
- (process-send-string nil (concat (or user (user-login-name))
- tramp-rsh-end-of-line)))
-
-(defun tramp-action-password (p multi-method method user host)
+ (when (not (stringp tramp-current-user))
+ (save-window-excursion
+ (let ((enable-recursive-minibuffers t))
+ (pop-to-buffer (tramp-get-connection-buffer vec))
+ (setq tramp-current-user (read-string (match-string 0))))))
+ (tramp-message vec 3 "Sending login name `%s'" tramp-current-user)
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (tramp-message vec 6 "\n%s" (buffer-string)))
+ (tramp-send-string vec tramp-current-user))
+
+(defun tramp-action-password (proc vec)
"Query the user for a password."
- (let ((pw-prompt
- (format "Password for %s "
- (tramp-make-tramp-file-name
- nil method user host ""))))
- (tramp-message 9 "Sending password")
- (tramp-enter-password p pw-prompt user host)))
-
-(defun tramp-action-succeed (p multi-method method user host)
+ (tramp-message vec 3 "Sending password")
+ (tramp-enter-password proc))
+
+(defun tramp-action-succeed (proc vec)
"Signal success in finding shell prompt."
- (tramp-message 9 "Found remote shell prompt.")
- (erase-buffer)
(throw 'tramp-action 'ok))
-(defun tramp-action-permission-denied (p multi-method method user host)
+(defun tramp-action-permission-denied (proc vec)
"Signal permission denied."
- (pop-to-buffer (tramp-get-buffer multi-method method user host))
- (tramp-message 9 "Permission denied by remote host.")
- (kill-process p)
+ (kill-process proc)
(throw 'tramp-action 'permission-denied))
-(defun tramp-action-copy-failed (p multi-method method user host)
- "Signal copy failed."
- (kill-process p)
- (error "%s" (match-string 1)))
-
-(defun tramp-action-yesno (p multi-method method user host)
+(defun tramp-action-yesno (proc vec)
"Ask the user for confirmation using `yes-or-no-p'.
Send \"yes\" to remote process on confirmation, abort otherwise.
See also `tramp-action-yn'."
(save-window-excursion
- (pop-to-buffer (tramp-get-buffer multi-method method user host))
- (unless (yes-or-no-p (match-string 0))
- (kill-process p)
- (erase-buffer)
- (throw 'tramp-action 'permission-denied))
- (process-send-string p (concat "yes" tramp-rsh-end-of-line))
- (erase-buffer)))
-
-(defun tramp-action-yn (p multi-method method user host)
+ (let ((enable-recursive-minibuffers t))
+ (save-match-data (pop-to-buffer (tramp-get-connection-buffer vec)))
+ (unless (yes-or-no-p (match-string 0))
+ (kill-process proc)
+ (throw 'tramp-action 'permission-denied))
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (tramp-message vec 6 "\n%s" (buffer-string)))
+ (tramp-send-string vec "yes"))))
+
+(defun tramp-action-yn (proc vec)
"Ask the user for confirmation using `y-or-n-p'.
Send \"y\" to remote process on confirmation, abort otherwise.
See also `tramp-action-yesno'."
(save-window-excursion
- (pop-to-buffer (tramp-get-buffer multi-method method user host))
- (unless (y-or-n-p (match-string 0))
- (kill-process p)
- (throw 'tramp-action 'permission-denied))
- (erase-buffer)
- (process-send-string p (concat "y" tramp-rsh-end-of-line))))
-
-(defun tramp-action-terminal (p multi-method method user host)
+ (let ((enable-recursive-minibuffers t))
+ (save-match-data (pop-to-buffer (tramp-get-connection-buffer vec)))
+ (unless (y-or-n-p (match-string 0))
+ (kill-process proc)
+ (throw 'tramp-action 'permission-denied))
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (tramp-message vec 6 "\n%s" (buffer-string)))
+ (tramp-send-string vec "y"))))
+
+(defun tramp-action-terminal (proc vec)
"Tell the remote host which terminal type to use.
The terminal type can be configured with `tramp-terminal-type'."
- (tramp-message 9 "Setting `%s' as terminal type."
- tramp-terminal-type)
- (erase-buffer)
- (process-send-string nil (concat tramp-terminal-type
- tramp-rsh-end-of-line)))
+ (tramp-message vec 5 "Setting `%s' as terminal type." tramp-terminal-type)
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (tramp-message vec 6 "\n%s" (buffer-string)))
+ (tramp-send-string vec tramp-terminal-type))
-(defun tramp-action-process-alive (p multi-method method user host)
+(defun tramp-action-process-alive (proc vec)
"Check whether a process has finished."
- (unless (memq (process-status p) '(run open))
+ (unless (memq (process-status proc) '(run open))
(throw 'tramp-action 'process-died)))
-(defun tramp-action-out-of-band (p multi-method method user host)
+(defun tramp-action-out-of-band (proc vec)
"Check whether an out-of-band copy has finished."
- (cond ((and (memq (process-status p) '(stop exit))
- (zerop (process-exit-status p)))
- (tramp-message 9 "Process has finished.")
+ (cond ((and (memq (process-status proc) '(stop exit))
+ (zerop (process-exit-status proc)))
+ (tramp-message vec 3 "Process has finished.")
(throw 'tramp-action 'ok))
- ((or (and (memq (process-status p) '(stop exit))
- (not (zerop (process-exit-status p))))
- (memq (process-status p) '(signal)))
+ ((or (and (memq (process-status proc) '(stop exit))
+ (not (zerop (process-exit-status proc))))
+ (memq (process-status proc) '(signal)))
;; `scp' could have copied correctly, but set modes could have failed.
;; This can be ignored.
- (goto-char (point-min))
- (if (re-search-forward tramp-operation-not-permitted-regexp nil t)
- (progn
- (tramp-message 10 "'set mode' error ignored.")
- (tramp-message 9 "Process has finished.")
- (throw 'tramp-action 'ok))
- (tramp-message 9 "Process has died.")
- (throw 'tramp-action 'process-died)))
+ (with-current-buffer (process-buffer proc)
+ (goto-char (point-min))
+ (if (re-search-forward tramp-operation-not-permitted-regexp nil t)
+ (progn
+ (tramp-message vec 5 "'set mode' error ignored.")
+ (tramp-message vec 3 "Process has finished.")
+ (throw 'tramp-action 'ok))
+ (tramp-message vec 3 "Process has died.")
+ (throw 'tramp-action 'process-died))))
(t nil)))
-;; The following functions are specifically for multi connections.
-
-(defun tramp-multi-action-login (p method user host)
- "Send the login name."
- (tramp-message 9 "Sending login name `%s'" user)
- (erase-buffer)
- (process-send-string p (concat user tramp-rsh-end-of-line)))
-
-(defun tramp-multi-action-password (p method user host)
- "Query the user for a password."
- (let ((pw-prompt
- (format "Password for %s "
- (tramp-make-tramp-file-name
- nil method user host ""))))
- (tramp-message 9 "Sending password")
- (tramp-enter-password p pw-prompt user host)))
-
-(defun tramp-multi-action-succeed (p method user host)
- "Signal success in finding shell prompt."
- (tramp-message 9 "Found shell prompt on `%s'" host)
- (erase-buffer)
- (throw 'tramp-action 'ok))
-
-(defun tramp-multi-action-permission-denied (p method user host)
- "Signal permission denied."
- (tramp-message 9 "Permission denied by remote host `%s'" host)
- (kill-process p)
- (erase-buffer)
- (throw 'tramp-action 'permission-denied))
-
-(defun tramp-multi-action-process-alive (p method user host)
- "Check whether a process has finished."
- (unless (memq (process-status p) '(run open))
- (throw 'tramp-action 'process-died)))
-
;; Functions for processing the actions.
-(defun tramp-process-one-action (p multi-method method user host actions)
+(defun tramp-process-one-action (proc vec actions)
"Wait for output from the shell and perform one action."
- (let (found item pattern action todo)
- (erase-buffer)
- (tramp-message 9 "Waiting 60s for prompt from remote shell")
+ (let (found todo item pattern action)
(while (not found)
- (tramp-accept-process-output p 1)
- (goto-char (point-min))
+ ;; Reread output once all actions have been performed.
+ ;; Obviously, the output was not complete.
+ (tramp-accept-process-output proc 1)
(setq todo actions)
(while todo
- (goto-char (point-min))
(setq item (pop todo))
- (setq pattern (symbol-value (nth 0 item)))
+ (setq pattern (concat (symbol-value (nth 0 item)) "\\'"))
(setq action (nth 1 item))
- (tramp-message 10 "Looking for regexp \"%s\" from remote shell"
- pattern)
- (when (re-search-forward (concat pattern "\\'") nil t)
- (setq found (funcall action p multi-method method user host)))))
+ (tramp-message
+ vec 5 "Looking for regexp \"%s\" from remote shell" pattern)
+ (when (tramp-check-for-regexp proc pattern)
+ (tramp-message vec 5 "Call `%s'" (symbol-name action))
+ (setq found (funcall action proc vec)))))
found))
-(defun tramp-process-actions
- (p multi-method method user host actions &optional timeout)
+(defun tramp-process-actions (proc vec actions &optional timeout)
"Perform actions until success or TIMEOUT."
- (tramp-message 10 "%s" (mapconcat 'identity (process-command p) " "))
(let (exit)
(while (not exit)
- (tramp-message 9 "Waiting for prompts from remote shell")
+ (tramp-message proc 3 "Waiting for prompts from remote shell")
(setq exit
(catch 'tramp-action
(if timeout
(with-timeout (timeout)
- (tramp-process-one-action
- p multi-method method user host actions))
- (tramp-process-one-action
- p multi-method method user host actions))
- nil)))
+ (tramp-process-one-action proc vec actions))
+ (tramp-process-one-action proc vec actions)))))
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (tramp-message vec 6 "\n%s" (buffer-string)))
(unless (eq exit 'ok)
- (tramp-clear-passwd user host)
- (error "Login failed"))))
-
-;; For multi-actions.
-
-(defun tramp-process-one-multi-action (p method user host actions)
- "Wait for output from the shell and perform one action."
- (let (found item pattern action todo)
- (erase-buffer)
- (tramp-message 9 "Waiting 60s for prompt from remote shell")
- (with-timeout (60 (throw 'tramp-action 'timeout))
- (while (not found)
- (tramp-accept-process-output p 1)
- (setq todo actions)
- (goto-char (point-min))
- (while todo
- (goto-char (point-min))
- (setq item (pop todo))
- (setq pattern (symbol-value (nth 0 item)))
- (setq action (nth 1 item))
- (tramp-message 10 "Looking for regexp \"%s\" from remote shell"
- pattern)
- (when (re-search-forward (concat pattern "\\'") nil t)
- (setq found (funcall action p method user host)))))
- found)))
-
-(defun tramp-process-multi-actions (p method user host actions)
- "Perform actions until success."
- (let (exit)
- (while (not exit)
- (tramp-message 9 "Waiting for prompts from remote shell")
- (setq exit
- (catch 'tramp-action
- (tramp-process-one-multi-action p method user host actions)
- nil)))
- (unless (eq exit 'ok)
- (tramp-clear-passwd user host)
- (error "Login failed"))))
-
-;; Functions to execute when we have seen the remote shell prompt but
-;; before we exec the Bourne-ish shell. Note that these commands
-;; might be sent to any shell, not just a Bourne-ish shell. This
-;; means that the commands need to work in all shells. (It is also
-;; okay for some commands to just fail with an error message, but
-;; please make sure that they at least don't crash the odd shell people
-;; might be running...)
-(defun tramp-process-initial-commands (p
- multi-method method user host
- commands)
- "Send list of commands to remote host, in order."
- (let (cmd)
- (while commands
- (setq cmd (pop commands))
- (erase-buffer)
- (tramp-message 10 "Sending command to remote shell: %s"
- cmd)
- (tramp-send-command multi-method method user host cmd nil t)
- (tramp-barf-if-no-shell-prompt
- p 60 "Remote shell command failed: %s" cmd))
- (erase-buffer)))
-
-;; The actual functions for opening connections.
-
-(defun tramp-open-connection-telnet (multi-method method user host)
- "Open a connection using a telnet METHOD.
-This starts the command `telnet HOST ARGS'[*], then waits for a remote
-login prompt, then sends the user name USER, then waits for a remote
-password prompt. It queries the user for the password, then sends the
-password to the remote host.
-
-If USER is nil, uses value returned by `(user-login-name)' instead.
-
-Recognition of the remote shell prompt is based on the variables
-`shell-prompt-pattern' and `tramp-shell-prompt-pattern' which must be
-set up correctly.
-
-Please note that it is NOT possible to use this connection method
-together with an out-of-band transfer method! You must use an inline
-transfer method.
-
-Maybe the different regular expressions need to be tuned.
-
-* Actually, the telnet program as well as the args to be used can be
- specified in the method parameters, see the variable `tramp-methods'."
- (save-match-data
- (when (tramp-method-out-of-band-p multi-method method user host)
- (error "Cannot use out-of-band method `%s' with telnet connection method"
- method))
- (when multi-method
- (error "Cannot multi-connect using telnet connection method"))
- (tramp-pre-connection multi-method method user host tramp-chunksize)
- (tramp-message 7 "Opening connection for %s@%s using %s..."
- (or user (user-login-name)) host method)
- (let ((process-environment (copy-sequence process-environment)))
- (setenv "TERM" tramp-terminal-type)
- (setenv "LC_ALL" "C")
- (setenv "PROMPT_COMMAND")
- (setenv "PS1" "$ ")
- (let* ((default-directory (tramp-temporary-file-directory))
- ;; If we omit the conditional here, then we would use
- ;; `undecided-dos' in some cases. With the conditional,
- ;; we use nil in these cases. Which one is right?
- (coding-system-for-read (unless (and (not (featurep 'xemacs))
- (> emacs-major-version 20))
- tramp-dos-coding-system))
- (p (apply 'start-process
- (tramp-buffer-name multi-method method user host)
- (tramp-get-buffer multi-method method user host)
- (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-login-program)
- host
- (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-login-args)))
- (found nil)
- (pw nil))
- (tramp-set-process-query-on-exit-flag p nil)
- (set-buffer (tramp-get-buffer multi-method method user host))
- (erase-buffer)
- (tramp-process-actions p multi-method method user host
- tramp-actions-before-shell 60)
- (tramp-open-connection-setup-interactive-shell
- p multi-method method user host)
- (tramp-post-connection multi-method method user host)))))
-
-
-(defun tramp-open-connection-rsh (multi-method method user host)
- "Open a connection using an rsh METHOD.
-This starts the command `rsh HOST -l USER'[*], then waits for a remote
-password or shell prompt. If a password prompt is seen, the user is
-queried for a password, this function sends the password to the remote
-host and waits for a shell prompt.
-
-If USER is nil, start the command `rsh HOST'[*] instead
-
-Recognition of the remote shell prompt is based on the variables
-`shell-prompt-pattern' and `tramp-shell-prompt-pattern' which must be
-set up correctly.
-
-Kludgy feature: if HOST has the form \"xx#yy\", then yy is assumed to
-be a port number for ssh, and \"-p yy\" will be added to the list of
-arguments, and xx will be used as the host name to connect to.
-
-* Actually, the rsh program to be used can be specified in the
- method parameters, see the variable `tramp-methods'."
- (save-match-data
- (when multi-method
- (error "Cannot multi-connect using rsh connection method"))
- (tramp-pre-connection multi-method method user host tramp-chunksize)
- (if (and user (not (string= user "")))
- (tramp-message 7 "Opening connection for %s@%s using %s..."
- user host method)
- (tramp-message 7 "Opening connection at %s using %s..." host method))
- (let ((process-environment (copy-sequence process-environment))
- (bufnam (tramp-buffer-name multi-method method user host))
- (buf (tramp-get-buffer multi-method method user host))
- (login-program (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-login-program))
- (login-args (mapcar
- (lambda (x)
- (format-spec
- x `((?t . ,(format "/tmp/%s" tramp-temp-name-prefix)))))
- (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-login-args)))
- (real-host host))
- ;; The following should be changed. We need a more general
- ;; mechanism to parse extra host args.
- (when (string-match "\\([^#]*\\)#\\(.*\\)" host)
- (setq login-args (cons "-p" (cons (match-string 2 host) login-args)))
- (setq real-host (match-string 1 host)))
- (setenv "TERM" tramp-terminal-type)
- (setenv "LC_ALL" "C")
- (setenv "PROMPT_COMMAND")
- (setenv "PS1" "$ ")
- (let* ((default-directory (tramp-temporary-file-directory))
- ;; If we omit the conditional, we would use
- ;; `undecided-dos' in some cases. With the conditional,
- ;; we use nil in these cases. Which one is right?
- (coding-system-for-read (unless (and (not (featurep 'xemacs))
- (> emacs-major-version 20))
- tramp-dos-coding-system))
- (p (if (and user (not (string= user "")))
- (apply #'start-process bufnam buf login-program
- real-host "-l" user login-args)
- (apply #'start-process bufnam buf login-program
- real-host login-args)))
- (found nil))
- (tramp-set-process-query-on-exit-flag p nil)
-
- (set-buffer buf)
- (tramp-process-actions p multi-method method user host
- tramp-actions-before-shell 60)
- (tramp-message 7 "Initializing remote shell")
- (tramp-open-connection-setup-interactive-shell
- p multi-method method user host)
- (tramp-post-connection multi-method method user host)))))
-
-(defun tramp-open-connection-su (multi-method method user host)
- "Open a connection using the `su' program with METHOD.
-This starts `su - USER', then waits for a password prompt. The HOST
-name must be equal to the local host name or to `localhost'.
-
-If USER is nil, uses value returned by user-login-name instead.
-
-Recognition of the remote shell prompt is based on the variables
-`shell-prompt-pattern' and `tramp-shell-prompt-pattern' which must be
-set up correctly. Note that the other user may have a different shell
-prompt than you do, so it is not at all unlikely that the variable
-`shell-prompt-pattern' is set up wrongly!"
- (save-match-data
- (when (tramp-method-out-of-band-p multi-method method user host)
- (error "Cannot use out-of-band method `%s' with `su' connection method"
- method))
- (unless (or (string-match (concat "^" (regexp-quote host))
- (system-name))
- (string= "localhost" host)
- (string= "" host))
- (error
- "Cannot connect to different host `%s' with `su' connection method"
- host))
- (tramp-pre-connection multi-method method user host tramp-chunksize)
- (tramp-message 7 "Opening connection for `%s' using `%s'..."
- (or user "<root>") method)
- (let ((process-environment (copy-sequence process-environment)))
- (setenv "TERM" tramp-terminal-type)
- (setenv "LC_ALL" "C")
- (setenv "PROMPT_COMMAND")
- (setenv "PS1" "$ ")
- (let* ((default-directory (tramp-temporary-file-directory))
- ;; If we omit the conditional, we use `undecided-dos' in
- ;; some cases. With the conditional, we use nil in these
- ;; cases. What's the difference? Which one is right?
- (coding-system-for-read (unless (and (not (featurep 'xemacs))
- (> emacs-major-version 20))
- tramp-dos-coding-system))
- (p (apply 'start-process
- (tramp-buffer-name multi-method method user host)
- (tramp-get-buffer multi-method method user host)
- (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-login-program)
- (mapcar
- (lambda (x)
- (format-spec x `((?u . ,(or user "root")))))
- (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-login-args))))
- (found nil)
- (pw nil))
- (tramp-set-process-query-on-exit-flag p nil)
- (set-buffer (tramp-get-buffer multi-method method user host))
- (tramp-process-actions p multi-method method user host
- tramp-actions-before-shell 60)
- (tramp-open-connection-setup-interactive-shell
- p multi-method method user host)
- (tramp-post-connection multi-method method
- user host)))))
-
-;; HHH: Not Changed. Multi method. It is not clear to me how this can
-;; handle not giving a user name in the "file name".
-;;
-;; This is more difficult than for the single-hop method. In the
-;; multi-hop-method, the desired behaviour should be that the
-;; user must specify names for the telnet hops of which the user
-;; name is different than the "original" name (or different from
-;; the previous hop.
-(defun tramp-open-connection-multi (multi-method method user host)
- "Open a multi-hop connection using METHOD.
-This uses a slightly changed file name syntax. The idea is to say
- [multi/telnet:u1@h1/rsh:u2@h2]/path/to/file
-This will use telnet to log in as u1 to h1, then use rsh from there to
-log in as u2 to h2."
- (save-match-data
- (unless multi-method
- (error "Multi-hop open connection function called on non-multi method"))
- (when (tramp-method-out-of-band-p multi-method method user host)
- (error "No out of band multi-hop connections"))
- (unless (and (arrayp method) (not (stringp method)))
- (error "METHOD must be an array of strings for multi methods"))
- (unless (and (arrayp user) (not (stringp user)))
- (error "USER must be an array of strings for multi methods"))
- (unless (and (arrayp host) (not (stringp host)))
- (error "HOST must be an array of strings for multi methods"))
- (unless (and (= (length method) (length user))
- (= (length method) (length host)))
- (error "Arrays METHOD, USER, HOST must have equal length"))
- (tramp-pre-connection multi-method method user host tramp-chunksize)
- (tramp-message 7 "Opening `%s' connection..." multi-method)
- (let ((process-environment (copy-sequence process-environment)))
- (setenv "TERM" tramp-terminal-type)
- (setenv "LC_ALL" "C")
- (setenv "PROMPT_COMMAND")
- (setenv "PS1" "$ ")
- (let* ((default-directory (tramp-temporary-file-directory))
- ;; If we omit the conditional, we use `undecided-dos' in
- ;; some cases. With the conditional, we use nil in these
- ;; cases. What's the difference? Which one is right?
- (coding-system-for-read (unless (and (not (featurep 'xemacs))
- (> emacs-major-version 20))
- tramp-dos-coding-system))
- (p (start-process (tramp-buffer-name multi-method method user host)
- (tramp-get-buffer multi-method method user host)
- tramp-multi-sh-program))
- (num-hops (length method))
- (i 0))
- (tramp-set-process-query-on-exit-flag p nil)
- (tramp-message 9 "Waiting 60s for local shell to come up...")
- (unless (tramp-wait-for-regexp
- p 60 (format "\\(%s\\)\\'\\|\\(%s\\)\\'"
- shell-prompt-pattern tramp-shell-prompt-pattern))
- (pop-to-buffer (buffer-name))
- (kill-process p)
- (error "Couldn't find local shell prompt"))
- ;; Now do all the connections as specified.
- (while (< i num-hops)
- (let* ((m (aref method i))
- (u (aref user i))
- (h (aref host i))
- (entry (assoc m tramp-multi-connection-function-alist))
- (multi-func (nth 1 entry))
- (command (nth 2 entry)))
- ;; The multi-funcs don't need to do save-match-data, as that
- ;; is done here.
- (funcall multi-func p m u h command)
- (erase-buffer)
- (setq i (1+ i))))
- (tramp-open-connection-setup-interactive-shell
- p multi-method method user host)
- (tramp-post-connection multi-method method user host)))))
-
-;; HHH: Changed. Multi method. Don't know how to handle this in the case
-;; of no user name provided. Hack to make it work as it did before:
-;; changed `user' to `(or user (user-login-name))' in the places where
-;; the value is actually used.
-(defun tramp-multi-connect-telnet (p method user host command)
- "Issue `telnet' command.
-Uses shell COMMAND to issue a `telnet' command to log in as USER to
-HOST. You can use percent escapes in COMMAND: `%h' is replaced with
-the host name, and `%n' is replaced with an end of line character, as
-set in `tramp-rsh-end-of-line'. Use `%%' if you want a literal percent
-character.
-
-If USER is nil, uses the return value of (user-login-name) instead."
- (let ((cmd (format-spec command
- `((?h . ,host) (?n . ,tramp-rsh-end-of-line))))
- (cmd1 (format-spec command `((?h . ,host) (?n . ""))))
- found pw)
- (erase-buffer)
- (tramp-message 9 "Sending telnet command `%s'" cmd1)
- (process-send-string p cmd)
- (tramp-process-multi-actions p method user host
- tramp-multi-actions)))
-
-;; HHH: Changed. Multi method. Don't know how to handle this in the case
-;; of no user name provided. Hack to make it work as it did before:
-;; changed `user' to `(or user (user-login-name))' in the places where
-;; the value is actually used.
-(defun tramp-multi-connect-rlogin (p method user host command)
- "Issue `rlogin' command.
-Uses shell COMMAND to issue an `rlogin' command to log in as USER to
-HOST. You can use percent escapes in COMMAND. `%u' will be replaced
-with the user name, `%h' will be replaced with the host name, and `%n'
-will be replaced with the value of `tramp-rsh-end-of-line'. You can use
-`%%' if you want to use a literal percent character.
-
-If USER is nil, uses the return value of (user-login-name) instead."
- (let ((cmd (format-spec command `((?h . ,host)
- (?u . ,(or user (user-login-name)))
- (?n . ,tramp-rsh-end-of-line))))
- (cmd1 (format-spec command `((?h . ,host)
- (?u . ,(or user (user-login-name)))
- (?n . ""))))
- found)
- (erase-buffer)
- (tramp-message 9 "Sending rlogin command `%s'" cmd1)
- (process-send-string p cmd)
- (tramp-process-multi-actions p method user host
- tramp-multi-actions)))
-
-;; HHH: Changed. Multi method. Don't know how to handle this in the case
-;; of no user name provided. Hack to make it work as it did before:
-;; changed `user' to `(or user (user-login-name))' in the places where
-;; the value is actually used.
-(defun tramp-multi-connect-su (p method user host command)
- "Issue `su' command.
-Uses shell COMMAND to issue a `su' command to log in as USER on
-HOST. The HOST name is ignored, this just changes the user id on the
-host currently logged in to.
-
-If USER is nil, uses the return value of (user-login-name) instead.
-
-You can use percent escapes in the COMMAND. `%u' is replaced with the
-user name, and `%n' is replaced with the value of
-`tramp-rsh-end-of-line'. Use `%%' if you want a literal percent
-character."
- (let ((cmd (format-spec command `((?u . ,(or user (user-login-name)))
- (?n . ,tramp-rsh-end-of-line))))
- (cmd1 (format-spec command `((?u . ,(or user (user-login-name)))
- (?n . ""))))
- found)
- (erase-buffer)
- (tramp-message 9 "Sending su command `%s'" cmd1)
- (process-send-string p cmd)
- (tramp-process-multi-actions p method user host
- tramp-multi-actions)))
+ (tramp-clear-passwd vec)
+ (tramp-error-with-buffer
+ nil vec 'file-error
+ (cond
+ ((eq exit 'permission-denied) "Permission denied")
+ ((eq exit 'process-died) "Process died")
+ (t "Login failed"))))))
;; Utility functions.
-(defun tramp-accept-process-output
- (&optional process timeout timeout-msecs)
+(defun tramp-accept-process-output (&optional proc timeout timeout-msecs)
"Like `accept-process-output' for Tramp processes.
This is needed in order to hide `last-coding-system-used', which is set
for process communication also."
- (let (last-coding-system-used)
- (accept-process-output process timeout timeout-msecs)))
+ (with-current-buffer (process-buffer proc)
+ (tramp-message proc 10 "%s %s" proc (process-status proc))
+ (let (buffer-read-only last-coding-system-used)
+ ;; Under Windows XP, accept-process-output doesn't return
+ ;; sometimes. So we add an additional timeout.
+ (with-timeout ((or timeout 1))
+ (accept-process-output proc timeout timeout-msecs)))
+ (tramp-message proc 10 "\n%s" (buffer-string))))
+
+(defun tramp-check-for-regexp (proc regexp)
+ "Check whether REGEXP is contained in process buffer of PROC.
+Erase echoed commands if exists."
+ (with-current-buffer (process-buffer proc)
+ (goto-char (point-min))
+ ;; Check whether we need to remove echo output.
+ (when (and (tramp-get-connection-property proc "check-remote-echo" nil)
+ (re-search-forward tramp-echoed-echo-mark-regexp nil t))
+ (let ((begin (match-beginning 0)))
+ (when (re-search-forward tramp-echoed-echo-mark-regexp nil t)
+ ;; Discard echo from remote output.
+ (tramp-set-connection-property proc "check-remote-echo" nil)
+ (tramp-message proc 5 "echo-mark found")
+ (forward-line)
+ (delete-region begin (point))
+ (goto-char (point-min)))))
+ ;; No echo to be handled, now we can look for the regexp.
+ (when (not (tramp-get-connection-property proc "check-remote-echo" nil))
+ (re-search-forward regexp nil t))))
(defun tramp-wait-for-regexp (proc timeout regexp)
"Wait for a REGEXP to appear from process PROC within TIMEOUT seconds.
Expects the output of PROC to be sent to the current buffer. Returns
the string that matched, or nil. Waits indefinitely if TIMEOUT is
nil."
- (let ((found nil)
- (start-time (current-time)))
- (cond (timeout
- ;; Work around a bug in XEmacs 21, where the timeout
- ;; expires faster than it should. This degenerates
- ;; to polling for buggy XEmacsen, but oh, well.
- (while (and (not found)
- (< (tramp-time-diff (current-time) start-time)
- timeout))
- (with-timeout (timeout)
- (while (not found)
- (tramp-accept-process-output proc 1)
- (unless (memq (process-status proc) '(run open))
- (error "Process has died"))
- (goto-char (point-min))
- (setq found (re-search-forward regexp nil t))))))
- (t
- (while (not found)
- (tramp-accept-process-output proc 1)
- (unless (memq (process-status proc) '(run open))
- (error "Process has died"))
- (goto-char (point-min))
- (setq found (re-search-forward regexp nil t)))))
- (when tramp-debug-buffer
- (append-to-buffer
- (tramp-get-debug-buffer tramp-current-multi-method tramp-current-method
- tramp-current-user tramp-current-host)
- (point-min) (point-max))
+ (with-current-buffer (process-buffer proc)
+ (let ((found (tramp-check-for-regexp proc regexp))
+ (start-time (current-time)))
+ (cond (timeout
+ ;; Work around a bug in XEmacs 21, where the timeout
+ ;; expires faster than it should. This degenerates
+ ;; to polling for buggy XEmacsen, but oh, well.
+ (while (and (not found)
+ (< (tramp-time-diff (current-time) start-time)
+ timeout))
+ (with-timeout (timeout)
+ (while (not found)
+ (tramp-accept-process-output proc 1)
+ (unless (memq (process-status proc) '(run open))
+ (tramp-error-with-buffer
+ nil proc 'file-error "Process has died"))
+ (setq found (tramp-check-for-regexp proc regexp))))))
+ (t
+ (while (not found)
+ (tramp-accept-process-output proc 1)
+ (unless (memq (process-status proc) '(run open))
+ (tramp-error-with-buffer
+ nil proc 'file-error "Process has died"))
+ (setq found (tramp-check-for-regexp proc regexp)))))
+ (tramp-message proc 6 "\n%s" (buffer-string))
(when (not found)
- (save-excursion
- (set-buffer
- (tramp-get-debug-buffer tramp-current-multi-method tramp-current-method
- tramp-current-user tramp-current-host))
- (goto-char (point-max))
- (insert "[[Regexp `" regexp "' not found"
- (if timeout (format " in %d secs" timeout) "")
- "]]"))))
- found))
-
-(defun tramp-wait-for-shell-prompt (proc timeout)
- "Wait for the shell prompt to appear from process PROC within TIMEOUT seconds.
-See `tramp-wait-for-regexp' for more details.
-Shell prompt pattern is determined by variables `shell-prompt-pattern'
-and `tramp-shell-prompt-pattern'."
- (tramp-wait-for-regexp
- proc timeout
- (format "\\(%s\\|%s\\)\\'"
- shell-prompt-pattern tramp-shell-prompt-pattern)))
+ (if timeout
+ (tramp-error
+ proc 'file-error "[[Regexp `%s' not found in %d secs]]"
+ regexp timeout)
+ (tramp-error proc 'file-error "[[Regexp `%s' not found]]" regexp)))
+ found)))
(defun tramp-barf-if-no-shell-prompt (proc timeout &rest error-args)
"Wait for shell prompt and barf if none appears.
Looks at process PROC to see if a shell prompt appears in TIMEOUT
seconds. If not, it produces an error message with the given ERROR-ARGS."
- (unless (tramp-wait-for-shell-prompt proc timeout)
- (pop-to-buffer (buffer-name))
- (apply 'error error-args)))
-
-(defun tramp-enter-password (p prompt user host)
- "Prompt for a password and send it to the remote end.
-Uses PROMPT as a prompt and sends the password to process P."
- (let ((pw (tramp-read-passwd user host prompt)))
- (erase-buffer)
- (process-send-string
- p (concat pw
- (or (tramp-get-method-parameter
- tramp-current-multi-method
- tramp-current-method
- tramp-current-user
- tramp-current-host
- 'tramp-password-end-of-line)
- tramp-default-password-end-of-line)))))
-
-;; HHH: Not Changed. This might handle the case where USER is not
-;; given in the "File name" very poorly. Then, the local
-;; variable tramp-current-user will be set to nil.
-(defun tramp-pre-connection (multi-method method user host chunksize)
- "Do some setup before actually logging in.
-METHOD, USER and HOST specify the connection."
- (set-buffer (tramp-get-buffer multi-method method user host))
- (set (make-local-variable 'tramp-current-multi-method) multi-method)
- (set (make-local-variable 'tramp-current-method) method)
- (set (make-local-variable 'tramp-current-user) user)
- (set (make-local-variable 'tramp-current-host) host)
- (set (make-local-variable 'tramp-chunksize) chunksize)
- (set (make-local-variable 'inhibit-eol-conversion) nil)
- (erase-buffer))
-
-(defun tramp-open-connection-setup-interactive-shell
- (p multi-method method user host)
+ (unless
+ (tramp-wait-for-regexp
+ proc timeout
+ (format
+ "\\(%s\\|%s\\)\\'" shell-prompt-pattern tramp-shell-prompt-pattern))
+ (apply 'tramp-error-with-buffer nil proc 'file-error error-args)))
+
+;; We don't call `tramp-send-string' in order to hide the password
+;; from the debug buffer, and because end-of-line handling of the
+;; string.
+(defun tramp-enter-password (proc)
+ "Prompt for a password and send it to the remote end."
+ (process-send-string
+ proc (concat (tramp-read-passwd proc)
+ (or (tramp-get-method-parameter
+ tramp-current-method
+ 'tramp-password-end-of-line)
+ tramp-default-password-end-of-line))))
+
+(defun tramp-open-connection-setup-interactive-shell (proc vec)
"Set up an interactive shell.
-Mainly sets the prompt and the echo correctly. P is the shell process
-to set up. METHOD, USER and HOST specify the connection."
- ;; Wait a bit in case the remote end feels like sending a little
- ;; junk first. It seems that fencepost.gnu.org does this when doing
- ;; a Kerberos login.
- (sit-for 1)
- (tramp-discard-garbage-erase-buffer p multi-method method user host)
- (tramp-process-initial-commands p multi-method method user host
- tramp-initial-commands)
- ;; It is useful to set the prompt in the following command because
- ;; some people have a setting for $PS1 which /bin/sh doesn't know
- ;; about and thus /bin/sh will display a strange prompt. For
- ;; example, if $PS1 has "${CWD}" in the value, then ksh will display
- ;; the current working directory but /bin/sh will display a dollar
- ;; sign. The following command line sets $PS1 to a sane value, and
- ;; works under Bourne-ish shells as well as csh-like shells. Daniel
- ;; Pittman reports that the unusual positioning of the single quotes
- ;; makes it work under `rc', too. We also unset the variable $ENV
- ;; because that is read by some sh implementations (eg, bash when
- ;; called as sh) on startup; this way, we avoid the startup file
- ;; clobbering $PS1. $PROMP_COMMAND is another way to set the prompt
- ;; in /bin/bash, it must be discarded as well.
- (tramp-send-command-internal
- multi-method method user host
- (format "exec env 'ENV=' 'PROMPT_COMMAND=' 'PS1=$ ' %s"
- (tramp-get-method-parameter
- multi-method method user host 'tramp-remote-sh))
- (format "remote `%s' to come up"
- (tramp-get-method-parameter
- multi-method method user host 'tramp-remote-sh)))
- (tramp-barf-if-no-shell-prompt
- p 30
- "Remote `%s' didn't come up. See buffer `%s' for details"
- (tramp-get-method-parameter multi-method method user host 'tramp-remote-sh)
- (buffer-name))
- (tramp-message 8 "Setting up remote shell environment")
- (tramp-discard-garbage-erase-buffer p multi-method method user host)
- (tramp-send-command-internal multi-method method user host
- "stty -inlcr -echo kill '^U'")
- (erase-buffer)
- ;; Ignore garbage after stty command.
- (tramp-send-command-internal multi-method method user host
- "echo foo")
- (erase-buffer)
- (tramp-send-command-internal multi-method method user host
- "TERM=dumb; export TERM")
- (erase-buffer)
- ;; Check whether the remote host suffers from buggy `send-process-string'.
- ;; This is known for FreeBSD (see comment in `send_process', file process.c).
- ;; I've tested sending 624 bytes successfully, sending 625 bytes failed.
- ;; Emacs makes a hack when this host type is detected locally. It cannot
- ;; handle remote hosts, though.
- (when (or (not tramp-chunksize) (zerop tramp-chunksize))
- (tramp-message 9 "Checking remote host type for `send-process-string' bug")
- (tramp-send-command-internal multi-method method user host
- "(uname -sr) 2>/dev/null")
- (goto-char (point-min))
- (when (looking-at "FreeBSD")
- (setq tramp-chunksize 500)))
+Mainly sets the prompt and the echo correctly. PROC is the shell
+process to set up. VEC specifies the connection."
+ (let ((tramp-end-of-output "$ "))
+ ;; It is useful to set the prompt in the following command because
+ ;; some people have a setting for $PS1 which /bin/sh doesn't know
+ ;; about and thus /bin/sh will display a strange prompt. For
+ ;; example, if $PS1 has "${CWD}" in the value, then ksh will
+ ;; display the current working directory but /bin/sh will display
+ ;; a dollar sign. The following command line sets $PS1 to a sane
+ ;; value, and works under Bourne-ish shells as well as csh-like
+ ;; shells. Daniel Pittman reports that the unusual positioning of
+ ;; the single quotes makes it work under `rc', too. We also unset
+ ;; the variable $ENV because that is read by some sh
+ ;; implementations (eg, bash when called as sh) on startup; this
+ ;; way, we avoid the startup file clobbering $PS1. $PROMP_COMMAND
+ ;; is another way to set the prompt in /bin/bash, it must be
+ ;; discarded as well.
+ (tramp-send-command
+ vec
+ (format
+ "exec env 'ENV=' 'PROMPT_COMMAND=' 'PS1=$ ' PS2='' PS3='' %s"
+ (tramp-get-method-parameter
+ (tramp-file-name-method vec) 'tramp-remote-sh))
+ t)
+
+ ;; Disable echo.
+ (tramp-message vec 5 "Setting up remote shell environment")
+ (tramp-send-command vec "stty -inlcr -echo kill '^U' erase '^H'" t)
+ ;; Check whether the echo has really been disabled. Some
+ ;; implementations, like busybox of embedded GNU/Linux, don't
+ ;; support disabling.
+ (tramp-send-command vec "echo foo" t)
+ (with-current-buffer (process-buffer proc)
+ (goto-char (point-min))
+ (when (looking-at "echo foo")
+ (tramp-set-connection-property proc "remote-echo" t)
+ (tramp-message vec 5 "Remote echo still on. Ok.")
+ ;; Make sure backspaces and their echo are enabled and no line
+ ;; width magic interferes with them.
+ (tramp-send-command vec "stty icanon erase ^H cols 32767" t))))
+
+ (tramp-message vec 5 "Setting shell prompt")
+ ;; We can set $PS1 to `tramp-end-of-output' only when the echo has
+ ;; been disabled. Otherwise, the echo of the command would be
+ ;; regarded as prompt already.
+ (tramp-send-command
+ vec
+ (format "PROMPT_COMMAND=''; PS1='%s%s%s'; PS2=''; PS3=''"
+ tramp-rsh-end-of-line
+ tramp-end-of-output
+ tramp-rsh-end-of-line)
+ t)
;; Try to set up the coding system correctly.
;; CCC this can't be the right way to do it. Hm.
- (save-excursion
- (erase-buffer)
- (tramp-message 9 "Determining coding system")
- (tramp-send-command-internal multi-method method user host
- "echo foo ; echo bar")
+ (tramp-message vec 5 "Determining coding system")
+ (tramp-send-command vec "echo foo ; echo bar" t)
+ (with-current-buffer (process-buffer proc)
(goto-char (point-min))
(if (featurep 'mule)
- ;; Use MULE to select the right EOL convention for communicating
- ;; with the process.
- (let* ((cs (or (process-coding-system p) (cons 'undecided 'undecided)))
- cs-decode cs-encode)
- (when (symbolp cs) (setq cs (cons cs cs)))
- (setq cs-decode (car cs))
- (setq cs-encode (cdr cs))
- (unless cs-decode (setq cs-decode 'undecided))
- (unless cs-encode (setq cs-encode 'undecided))
- (setq cs-encode (tramp-coding-system-change-eol-conversion
- cs-encode 'unix))
- (when (search-forward "\r" nil t)
- (setq cs-decode (tramp-coding-system-change-eol-conversion
- cs-decode 'dos)))
- (set-buffer-process-coding-system cs-decode cs-encode))
+ ;; Use MULE to select the right EOL convention for communicating
+ ;; with the process.
+ (let* ((cs (or (funcall (symbol-function 'process-coding-system) proc)
+ (cons 'undecided 'undecided)))
+ cs-decode cs-encode)
+ (when (symbolp cs) (setq cs (cons cs cs)))
+ (setq cs-decode (car cs))
+ (setq cs-encode (cdr cs))
+ (unless cs-decode (setq cs-decode 'undecided))
+ (unless cs-encode (setq cs-encode 'undecided))
+ (setq cs-encode (tramp-coding-system-change-eol-conversion
+ cs-encode 'unix))
+ (when (search-forward "\r" nil t)
+ (setq cs-decode (tramp-coding-system-change-eol-conversion
+ cs-decode 'dos)))
+ (funcall (symbol-function 'set-buffer-process-coding-system)
+ cs-decode cs-encode))
;; Look for ^M and do something useful if found.
(when (search-forward "\r" nil t)
- ;; We have found a ^M but cannot frob the process coding system
- ;; because we're running on a non-MULE Emacs. Let's try
- ;; stty, instead.
- (erase-buffer)
- (tramp-message 9 "Trying `stty -onlcr'")
- (tramp-send-command-internal multi-method method user host
- "stty -onlcr"))))
- (erase-buffer)
- (tramp-message
- 9 "Waiting 30s for `HISTFILE=$HOME/.tramp_history; HISTSIZE=1; export HISTFILE; export HISTSIZE'")
- (tramp-send-command-internal
- multi-method method user host
- "HISTFILE=$HOME/.tramp_history; HISTSIZE=1; export HISTFILE; export HISTSIZE")
- (erase-buffer)
- (tramp-message 9 "Waiting 30s for `set +o vi +o emacs'")
- (tramp-send-command-internal multi-method method user host
- "set +o vi +o emacs")
- (erase-buffer)
- (tramp-message 9 "Waiting 30s for `unset MAIL MAILCHECK MAILPATH'")
- (tramp-send-command-internal
- multi-method method user host
- "unset MAIL MAILCHECK MAILPATH 1>/dev/null 2>/dev/null")
- (erase-buffer)
- (tramp-message 9 "Waiting 30s for `unset CDPATH'")
- (tramp-send-command-internal multi-method method user host
- "unset CDPATH")
- (erase-buffer)
- (tramp-message 9 "Setting shell prompt")
- ;; Douglas Gray Stephens <DGrayStephens@slb.com> says that we must
- ;; use "\n" here, not tramp-rsh-end-of-line. We also manually frob
- ;; the last time we sent a command, to avoid tramp-send-command to send
- ;; "echo are you awake".
- (setq tramp-last-cmd-time (current-time))
- (tramp-send-command
- multi-method method user host
- (format "PROMPT_COMMAND=''; PS1='%s%s%s'; PS2=''; PS3=''"
- tramp-rsh-end-of-line
- tramp-end-of-output
- tramp-rsh-end-of-line))
- (tramp-wait-for-output))
-
-(defun tramp-post-connection (multi-method method user host)
- "Prepare a remote shell before being able to work on it.
-METHOD, USER and HOST specify the connection.
-Among other things, this finds a shell which groks tilde expansion,
-tries to find an `ls' command which groks the `-n' option, sets the
-locale to C and sets up the remote shell search path."
+ ;; We have found a ^M but cannot frob the process coding system
+ ;; because we're running on a non-MULE Emacs. Let's try
+ ;; stty, instead.
+ (tramp-send-command vec "stty -onlcr" t))))
+ (tramp-send-command vec "set +o vi +o emacs" t)
+
+ ;; Check whether the output of "uname -sr" has been changed. If
+ ;; yes, this is a strong indication that we must expire all
+ ;; connection properties.
+ (tramp-message vec 5 "Checking system information")
+ (let ((old-uname (tramp-get-connection-property vec "uname" nil))
+ (new-uname
+ (tramp-set-connection-property
+ vec "uname"
+ (tramp-send-command-and-read vec "echo \\\"`uname -sr`\\\""))))
+ (when (and (stringp old-uname) (not (string-equal old-uname new-uname)))
+ (funcall (symbol-function 'tramp-cleanup-connection) vec)
+ (signal
+ 'quit
+ (list (format
+ "Connection reset, because remote host changed from `%s' to `%s'"
+ old-uname new-uname)))))
+
+ ;; Check whether the remote host suffers from buggy
+ ;; `send-process-string'. This is known for FreeBSD (see comment in
+ ;; `send_process', file process.c). I've tested sending 624 bytes
+ ;; successfully, sending 625 bytes failed. Emacs makes a hack when
+ ;; this host type is detected locally. It cannot handle remote
+ ;; hosts, though.
+ (with-connection-property proc "chunksize"
+ (cond
+ ((and (integerp tramp-chunksize) (> tramp-chunksize 0))
+ tramp-chunksize)
+ (t
+ (tramp-message
+ vec 5 "Checking remote host type for `send-process-string' bug")
+ (if (string-match
+ "^FreeBSD" (tramp-get-connection-property vec "uname" ""))
+ 500 0))))
+
+ ;; Set remote PATH variable.
+ (tramp-set-remote-path vec)
+
;; Search for a good shell before searching for a command which
;; checks if a file exists. This is done because Tramp wants to use
;; "test foo; echo $?" to check if various conditions hold, and
@@ -6278,168 +5747,25 @@ locale to C and sets up the remote shell search path."
;; the Solaris /bin/sh is a problem. I'm betting that all systems
;; with buggy /bin/sh implementations will have a working bash or
;; ksh. Whee...
- (tramp-find-shell multi-method method user host)
- ;; Without (sit-for 0.1) at least, my machine will almost always blow
- ;; up on 'not numberp /root' - a race that causes the 'echo ~root'
- ;; output of (tramp-find-shell) to show up along with the output of
- ;; (tramp-find-ls-command) testing.
- ;;
- ;; I can't work out why this is a problem though. The (tramp-wait-for-output)
- ;; call in (tramp-find-shell) *should* make this not happen, I thought.
- ;;
- ;; After much debugging I couldn't find any problem with the implementation
- ;; of that function though. The workaround stays for me at least. :/
- ;;
- ;; Daniel Pittman <daniel@danann.net>
- (sleep-for 1)
- (erase-buffer)
- (tramp-find-file-exists-command multi-method method user host)
- (make-local-variable 'tramp-ls-command)
- (setq tramp-ls-command (tramp-find-ls-command multi-method method user host))
- (unless tramp-ls-command
- (tramp-message
- 1
- "Danger! Couldn't find ls which groks -n. Muddling through anyway")
- (setq tramp-ls-command
- (tramp-find-executable multi-method method user host
- "ls" tramp-remote-path nil)))
- (unless tramp-ls-command
- (error "Fatal error: Couldn't find remote executable `ls'"))
- (tramp-message 5 "Using remote command `%s' for getting directory listings"
- tramp-ls-command)
- (tramp-send-command multi-method method user host
- (concat "tramp_set_exit_status () {" tramp-rsh-end-of-line
- "return $1" tramp-rsh-end-of-line
- "}"))
- (tramp-wait-for-output)
- ;; Set remote PATH variable.
- (tramp-set-remote-path multi-method method user host "PATH" tramp-remote-path)
- ;; Tell remote shell to use standard time format, needed for
- ;; parsing `ls -l' output.
- (tramp-send-command multi-method method user host
- "LC_TIME=C; export LC_TIME; echo huhu")
- (tramp-wait-for-output)
- (tramp-send-command multi-method method user host
- "mesg n; echo huhu")
- (tramp-wait-for-output)
- (tramp-send-command multi-method method user host
- "biff n ; echo huhu")
- (tramp-wait-for-output)
- ;; Unalias ls(1) to work around issues with those silly people who make it
- ;; spit out ANSI escapes or whatever.
- (tramp-send-command multi-method method user host
- "unalias ls; echo huhu")
- (tramp-wait-for-output)
- ;; Does `test A -nt B' work? Use abominable `find' construct if it
- ;; doesn't. BSD/OS 4.0 wants the parentheses around the command,
- ;; for otherwise the shell crashes.
- (erase-buffer)
- (make-local-variable 'tramp-test-groks-nt)
- (tramp-send-command multi-method method user host
- "( test / -nt / )")
- (tramp-wait-for-output)
- (goto-char (point-min))
- (setq tramp-test-groks-nt
- (looking-at (format "\n%s\r?\n" (regexp-quote tramp-end-of-output))))
- (unless tramp-test-groks-nt
- (tramp-send-command
- multi-method method user host
- (concat "tramp_test_nt () {" tramp-rsh-end-of-line
- "test -n \"`find $1 -prune -newer $2 -print`\"" tramp-rsh-end-of-line
- "}")))
- (tramp-wait-for-output)
- ;; Send the fallback `uudecode' script.
- (erase-buffer)
- (tramp-send-string multi-method method user host tramp-uudecode)
- (tramp-wait-for-output)
- ;; Find a `perl'.
- (erase-buffer)
- (tramp-set-connection-property "perl-scripts" nil multi-method method user host)
- (let ((tramp-remote-perl
- (or (tramp-find-executable multi-method method user host
- "perl5" tramp-remote-path nil)
- (tramp-find-executable multi-method method user host
- "perl" tramp-remote-path nil))))
- (when tramp-remote-perl
- (tramp-set-connection-property "perl" tramp-remote-perl
- multi-method method user host)
- (unless (tramp-method-out-of-band-p multi-method method user host)
- (tramp-message 5 "Sending the Perl `mime-encode' implementations.")
- (tramp-send-string
- multi-method method user host
- (concat "tramp_encode () {\n"
- (format tramp-perl-encode tramp-remote-perl)
- " 2>/dev/null"
- "\n}"))
- (tramp-wait-for-output)
- (tramp-send-string
- multi-method method user host
- (concat "tramp_encode_with_module () {\n"
- (format tramp-perl-encode-with-module tramp-remote-perl)
- " 2>/dev/null"
- "\n}"))
- (tramp-wait-for-output)
- (tramp-message 5 "Sending the Perl `mime-decode' implementations.")
- (tramp-send-string
- multi-method method user host
- (concat "tramp_decode () {\n"
- (format tramp-perl-decode tramp-remote-perl)
- " 2>/dev/null"
- "\n}"))
- (tramp-wait-for-output)
- (tramp-send-string
- multi-method method user host
- (concat "tramp_decode_with_module () {\n"
- (format tramp-perl-decode-with-module tramp-remote-perl)
- " 2>/dev/null"
- "\n}"))
- (tramp-wait-for-output))))
- ;; Find ln(1)
- (erase-buffer)
- (let ((ln (tramp-find-executable multi-method method user host
- "ln" tramp-remote-path nil)))
- (when ln
- (tramp-set-connection-property "ln" ln multi-method method user host)))
- ;; Set uid and gid.
- (erase-buffer)
- (tramp-send-command multi-method method user host "id -u; id -g")
- (tramp-wait-for-output)
- (goto-char (point-min))
- (tramp-set-connection-property
- "uid" (read (current-buffer)) multi-method method user host)
- (tramp-set-connection-property
- "gid" (read (current-buffer)) multi-method method user host)
- ;; Find the right encoding/decoding commands to use.
- (erase-buffer)
- (unless (tramp-method-out-of-band-p multi-method method user host)
- (tramp-find-inline-encoding multi-method method user host))
- ;; If encoding/decoding command are given, test to see if they work.
- ;; CCC: Maybe it would be useful to run the encoder both locally and
- ;; remotely to see if they produce the same result.
- (let ((rem-enc (tramp-get-remote-encoding multi-method method user host))
- (rem-dec (tramp-get-remote-decoding multi-method method user host))
- (magic-string "xyzzy"))
- (when (and (or rem-dec rem-enc) (not (and rem-dec rem-enc)))
- (tramp-kill-process multi-method method user host)
- ;; Improve error message and/or error check.
- (error
- "Must give both decoding and encoding command in method definition"))
- (when (and rem-enc rem-dec)
- (tramp-message
- 5
- "Checking to see if encoding/decoding commands work on remote host...")
+ (tramp-find-shell vec)
+
+ ;; Disable unexpected output.
+ (tramp-send-command vec "mesg n; biff n" t)
+
+ ;; Set the environment.
+ (tramp-message vec 5 "Setting default environment")
+ (let ((env (copy-sequence tramp-remote-process-environment))
+ unset item)
+ (while env
+ (setq item (split-string (car env) "="))
+ (if (and (stringp (cadr item)) (not (string-equal (cadr item) "")))
+ (tramp-send-command
+ vec (format "%s=%s; export %s" (car item) (cadr item) (car item)) t)
+ (push (car item) unset))
+ (setq env (cdr env)))
+ (when unset
(tramp-send-command
- multi-method method user host
- (format "echo %s | %s | %s"
- (tramp-shell-quote-argument magic-string) rem-enc rem-dec))
- (tramp-wait-for-output)
- (unless (looking-at (regexp-quote magic-string))
- (tramp-kill-process multi-method method user host)
- (error "Remote host cannot execute de/encoding commands. See buffer `%s' for details"
- (buffer-name)))
- (erase-buffer)
- (tramp-message
- 5 "Checking to see if encoding/decoding commands work on remote host...done"))))
+ vec (format "unset %s" (mapconcat 'identity unset " "))))) t)
;; CCC: We should either implement a Perl version of base64 encoding
;; and decoding. Then we just use that in the last item. The other
@@ -6459,38 +5785,22 @@ locale to C and sets up the remote shell search path."
;;
;; For Irix, no solution is known yet.
-(defvar tramp-coding-commands
- '(("mimencode -b" "mimencode -u -b"
- base64-encode-region base64-decode-region)
- ("mmencode -b" "mmencode -u -b"
- base64-encode-region base64-decode-region)
- ("recode data..base64" "recode base64..data"
- base64-encode-region base64-decode-region)
- ("uuencode xxx" "uudecode -o /dev/stdout"
- tramp-uuencode-region uudecode-decode-region)
- ("uuencode xxx" "uudecode -o -"
- tramp-uuencode-region uudecode-decode-region)
- ("uuencode xxx" "uudecode -p"
- tramp-uuencode-region uudecode-decode-region)
- ("uuencode xxx" "tramp_uudecode"
- tramp-uuencode-region uudecode-decode-region)
- ("tramp_encode_with_module" "tramp_decode_with_module"
- base64-encode-region base64-decode-region)
- ("tramp_encode" "tramp_decode"
- base64-encode-region base64-decode-region))
- "List of coding commands for inline transfer.
+(defconst tramp-local-coding-commands
+ '((b64 base64-encode-region base64-decode-region)
+ (uu tramp-uuencode-region uudecode-decode-region)
+ (pack
+ "perl -e 'binmode STDIN; binmode STDOUT; print pack(q{u*}, join q{}, <>)'"
+ "perl -e 'binmode STDIN; binmode STDOUT; print unpack(q{u*}, join q{}, <>)'"))
+ "List of local coding commands for inline transfer.
Each item is a list that looks like this:
-\(REMOTE-ENCODING REMOTE-DECODING LOCAL-ENCODING LOCAL-DECODING)
+\(FORMAT ENCODING DECODING)
-The REMOTE-ENCODING should be a string, giving a command accepting a
-plain file on standard input and writing the encoded file to standard
-output. The REMOTE-DECODING should also be a string, giving a command
-accepting an encoded file on standard input and writing the decoded
-file to standard output.
+FORMAT is symbol describing the encoding/decoding format. It can be
+`b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
-LOCAL-ENCODING and LOCAL-DECODING can be strings, giving commands, or
-symbols, giving functions. If they are strings, then they can contain
+ENCODING and DECODING can be strings, giving commands, or symbols,
+giving functions. If they are strings, then they can contain
the \"%s\" format specifier. If that specifier is present, the input
filename will be put into the command line at that spot. If the
specifier is not present, the input should be read from standard
@@ -6500,83 +5810,139 @@ If they are functions, they will be called with two arguments, start
and end of region, and are expected to replace the region contents
with the encoded or decoded results, respectively.")
-(defun tramp-find-inline-encoding (multi-method method user host)
+(defconst tramp-remote-coding-commands
+ '((b64 "mimencode -b" "mimencode -u -b")
+ (b64 "mmencode -b" "mmencode -u -b")
+ (b64 "recode data..base64" "recode base64..data")
+ (b64 tramp-perl-encode-with-module tramp-perl-decode-with-module)
+ (b64 tramp-perl-encode tramp-perl-decode)
+ (uu "uuencode xxx" "uudecode -o /dev/stdout")
+ (uu "uuencode xxx" "uudecode -o -")
+ (uu "uuencode xxx" "uudecode -p")
+ (uu "uuencode xxx" tramp-uudecode)
+ (pack
+ "perl -e 'binmode STDIN; binmode STDOUT; print pack(q{u*}, join q{}, <>)'"
+ "perl -e 'binmode STDIN; binmode STDOUT; print unpack(q{u*}, join q{}, <>)'"))
+ "List of remote coding commands for inline transfer.
+Each item is a list that looks like this:
+
+\(FORMAT ENCODING DECODING)
+
+FORMAT is symbol describing the encoding/decoding format. It can be
+`b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing.
+
+ENCODING and DECODING can be strings, giving commands, or symbols,
+giving variables. If they are strings, then they can contain
+the \"%s\" format specifier. If that specifier is present, the input
+filename will be put into the command line at that spot. If the
+specifier is not present, the input should be read from standard
+input.
+
+If they are variables, this variable is a string containing a Perl
+implementation for this functionality. This Perl program will be transferred
+to the remote host, and it is avalible as shell function with the same name.")
+
+(defun tramp-find-inline-encoding (vec)
"Find an inline transfer encoding that works.
-Goes through the list `tramp-coding-commands'."
- (let ((commands tramp-coding-commands)
- (magic "xyzzy")
- item found)
- (while (and commands (null found))
- (setq item (pop commands))
- (catch 'wont-work
- (let ((rem-enc (nth 0 item))
- (rem-dec (nth 1 item))
- (loc-enc (nth 2 item))
- (loc-dec (nth 3 item)))
- ;; Check if remote encoding and decoding commands can be
- ;; called remotely with null input and output. This makes
- ;; sure there are no syntax errors and the command is really
- ;; found. Note that we do not redirect stdout to /dev/null,
- ;; for two reaons: when checking the decoding command, we
- ;; actually check the output it gives. And also, when
- ;; redirecting "mimencode" output to /dev/null, then as root
- ;; it might change the permissions of /dev/null!
- (tramp-message-for-buffer
- multi-method method user host 9
- "Checking remote encoding command `%s' for sanity" rem-enc)
- (unless (zerop (tramp-send-command-and-check
- multi-method method user host
- (format "%s </dev/null" rem-enc) t))
- (throw 'wont-work nil))
- (tramp-message-for-buffer
- multi-method method user host 9
- "Checking remote decoding command `%s' for sanity" rem-dec)
- (unless (zerop (tramp-send-command-and-check
- multi-method method user host
- (format "echo %s | %s | %s"
- magic rem-enc rem-dec) t))
- (throw 'wont-work nil))
- (save-excursion
- (goto-char (point-min))
- (unless (looking-at (regexp-quote magic))
- (throw 'wont-work nil)))
- ;; If the local encoder or decoder is a string, the
- ;; corresponding command has to work locally.
- (when (stringp loc-enc)
- (tramp-message-for-buffer
- multi-method method user host 9
- "Checking local encoding command `%s' for sanity" loc-enc)
- (unless (zerop (tramp-call-local-coding-command
- loc-enc nil nil))
- (throw 'wont-work nil)))
- (when (stringp loc-dec)
- (tramp-message-for-buffer
- multi-method method user host 9
- "Checking local decoding command `%s' for sanity" loc-dec)
- (unless (zerop (tramp-call-local-coding-command
- loc-dec nil nil))
- (throw 'wont-work nil)))
- ;; CCC: At this point, maybe we should check that the output
- ;; of the commands is correct. But for the moment we will
- ;; assume that commands working on empty input will also
- ;; work in practice.
- (setq found item))))
- ;; Did we find something? If not, issue error. If so,
- ;; set connection properties.
- (unless found
- (error "Couldn't find an inline transfer encoding"))
- (let ((rem-enc (nth 0 found))
- (rem-dec (nth 1 found))
- (loc-enc (nth 2 found))
- (loc-dec (nth 3 found)))
- (tramp-message 10 "Using remote encoding %s" rem-enc)
- (tramp-set-remote-encoding multi-method method user host rem-enc)
- (tramp-message 10 "Using remote decoding %s" rem-dec)
- (tramp-set-remote-decoding multi-method method user host rem-dec)
- (tramp-message 10 "Using local encoding %s" loc-enc)
- (tramp-set-local-encoding multi-method method user host loc-enc)
- (tramp-message 10 "Using local decoding %s" loc-dec)
- (tramp-set-local-decoding multi-method method user host loc-dec))))
+Goes through the list `tramp-local-coding-commands' and
+`tramp-remote-coding-commands'."
+ (save-excursion
+ (let ((local-commands tramp-local-coding-commands)
+ (magic "xyzzy")
+ loc-enc loc-dec rem-enc rem-dec litem ritem found)
+ (while (and local-commands (not found))
+ (setq litem (pop local-commands))
+ (catch 'wont-work-local
+ (let ((format (nth 0 litem))
+ (remote-commands tramp-remote-coding-commands))
+ (setq loc-enc (nth 1 litem))
+ (setq loc-dec (nth 2 litem))
+ ;; If the local encoder or decoder is a string, the
+ ;; corresponding command has to work locally.
+ (if (not (stringp loc-enc))
+ (tramp-message
+ vec 5 "Checking local encoding function `%s'" loc-enc)
+ (tramp-message
+ vec 5 "Checking local encoding command `%s' for sanity" loc-enc)
+ (unless (zerop (tramp-call-local-coding-command
+ loc-enc nil nil))
+ (throw 'wont-work-local nil)))
+ (if (not (stringp loc-dec))
+ (tramp-message
+ vec 5 "Checking local decoding function `%s'" loc-dec)
+ (tramp-message
+ vec 5 "Checking local decoding command `%s' for sanity" loc-dec)
+ (unless (zerop (tramp-call-local-coding-command
+ loc-dec nil nil))
+ (throw 'wont-work-local nil)))
+ ;; Search for remote coding commands with the same format
+ (while (and remote-commands (not found))
+ (setq ritem (pop remote-commands))
+ (catch 'wont-work-remote
+ (when (equal format (nth 0 ritem))
+ (setq rem-enc (nth 1 ritem))
+ (setq rem-dec (nth 2 ritem))
+ ;; Check if remote encoding and decoding commands can be
+ ;; called remotely with null input and output. This makes
+ ;; sure there are no syntax errors and the command is really
+ ;; found. Note that we do not redirect stdout to /dev/null,
+ ;; for two reasons: when checking the decoding command, we
+ ;; actually check the output it gives. And also, when
+ ;; redirecting "mimencode" output to /dev/null, then as root
+ ;; it might change the permissions of /dev/null!
+ (when (not (stringp rem-enc))
+ (let ((name (symbol-name rem-enc)))
+ (while (string-match (regexp-quote "-") name)
+ (setq name (replace-match "_" nil t name)))
+ (tramp-maybe-send-script vec (symbol-value rem-enc) name)
+ (setq rem-enc name)))
+ (tramp-message
+ vec 5
+ "Checking remote encoding command `%s' for sanity" rem-enc)
+ (unless (zerop (tramp-send-command-and-check
+ vec (format "%s </dev/null" rem-enc) t))
+ (throw 'wont-work-remote nil))
+
+ (when (not (stringp rem-dec))
+ (let ((name (symbol-name rem-dec)))
+ (while (string-match (regexp-quote "-") name)
+ (setq name (replace-match "_" nil t name)))
+ (tramp-maybe-send-script vec (symbol-value rem-dec) name)
+ (setq rem-dec name)))
+ (tramp-message
+ vec 5
+ "Checking remote decoding command `%s' for sanity" rem-dec)
+ (unless (zerop (tramp-send-command-and-check
+ vec
+ (format "echo %s | %s | %s"
+ magic rem-enc rem-dec) t))
+ (throw 'wont-work-remote nil))
+
+ (with-current-buffer (tramp-get-buffer vec)
+ (goto-char (point-min))
+ (unless (looking-at (regexp-quote magic))
+ (throw 'wont-work-remote nil)))
+
+ ;; `rem-enc' and `rem-dec' could be a string meanwhile.
+ (setq rem-enc (nth 1 ritem))
+ (setq rem-dec (nth 2 ritem))
+ (setq found t)))))))
+
+ ;; Did we find something? If not, issue an error.
+ (unless found
+ (kill-process (tramp-get-connection-process vec))
+ (tramp-error
+ vec 'file-error "Couldn't find an inline transfer encoding"))
+
+ ;; Set connection properties.
+ (tramp-message vec 5 "Using local encoding `%s'" loc-enc)
+ (tramp-set-connection-property vec "local-encoding" loc-enc)
+ (tramp-message vec 5 "Using local decoding `%s'" loc-dec)
+ (tramp-set-connection-property vec "local-decoding" loc-dec)
+ (tramp-message vec 5 "Using remote encoding `%s'" rem-enc)
+ (tramp-set-connection-property vec "remote-encoding" rem-enc)
+ (tramp-message vec 5 "Using remote decoding `%s'" rem-dec)
+ (tramp-set-connection-property vec "remote-decoding" rem-dec))))
(defun tramp-call-local-coding-command (cmd input output)
"Call the local encoding or decoding command.
@@ -6586,25 +5952,114 @@ INPUT can also be nil which means `/dev/null'.
OUTPUT can be a string (which specifies a filename), or t (which
means standard output and thus the current buffer), or nil (which
means discard it)."
- (call-process
- tramp-encoding-shell ;program
- (when (and input (not (string-match "%s" cmd)))
- input) ;input
- (if (eq output t) t nil) ;output
- nil ;redisplay
+ (tramp-local-call-process
+ tramp-encoding-shell
+ (when (and input (not (string-match "%s" cmd))) input)
+ (if (eq output t) t nil)
+ nil
tramp-encoding-command-switch
- ;; actual shell command
(concat
(if (string-match "%s" cmd) (format cmd input) cmd)
(if (stringp output) (concat "> " output) ""))))
-(defun tramp-maybe-open-connection (multi-method method user host)
- "Maybe open a connection to HOST, logging in as USER, using METHOD.
+(defun tramp-compute-multi-hops (vec)
+ "Expands VEC according to `tramp-default-proxies-alist'.
+Gateway hops are already opened."
+ (let ((target-alist `(,vec))
+ (choices tramp-default-proxies-alist)
+ item proxy)
+
+ ;; Look for proxy hosts to be passed.
+ (while choices
+ (setq item (pop choices)
+ proxy (nth 2 item))
+ (when (and
+ ;; host
+ (string-match (or (nth 0 item) "")
+ (or (tramp-file-name-host (car target-alist)) ""))
+ ;; user
+ (string-match (or (nth 1 item) "")
+ (or (tramp-file-name-user (car target-alist)) "")))
+ (if (null proxy)
+ ;; No more hops needed.
+ (setq choices nil)
+ ;; Replace placeholders.
+ (setq proxy
+ (format-spec
+ proxy
+ `((?u . ,(or (tramp-file-name-user (car target-alist)) ""))
+ (?h . ,(or (tramp-file-name-host (car target-alist)) "")))))
+ (with-parsed-tramp-file-name proxy l
+ ;; Add the hop.
+ (add-to-list 'target-alist l)
+ ;; Start next search.
+ (setq choices tramp-default-proxies-alist)))))
+
+ ;; Handle gateways.
+ (when (and (boundp 'tramp-gw-tunnel-method)
+ (string-match (format
+ "^\\(%s\\|%s\\)$"
+ (symbol-value 'tramp-gw-tunnel-method)
+ (symbol-value 'tramp-gw-socks-method))
+ (tramp-file-name-method (car target-alist))))
+ (let ((gw (pop target-alist))
+ (hop (pop target-alist)))
+ ;; Is the method prepared for gateways?
+ (unless (tramp-get-method-parameter
+ (tramp-file-name-method hop) 'tramp-default-port)
+ (tramp-error
+ vec 'file-error
+ "Method `%s' is not supported for gateway access."
+ (tramp-file-name-method hop)))
+ ;; Add default port if needed.
+ (unless
+ (string-match
+ tramp-host-with-port-regexp (tramp-file-name-host hop))
+ (aset hop 2
+ (concat
+ (tramp-file-name-host hop) tramp-prefix-port-format
+ (number-to-string
+ (tramp-get-method-parameter
+ (tramp-file-name-method hop) 'tramp-default-port)))))
+ ;; Open the gateway connection.
+ (add-to-list
+ 'target-alist
+ (vector
+ (tramp-file-name-method hop) (tramp-file-name-user hop)
+ (funcall (symbol-function 'tramp-gw-open-connection) vec gw hop) nil))
+ ;; For the password prompt, we need the correct values.
+ ;; Therefore, we must remember the gateway vector. But we
+ ;; cannot do it as connection property, because it shouldn't
+ ;; be persistent. And we have no started process yet either.
+ (tramp-set-file-property (car target-alist) "" "gateway" hop)))
+
+ ;; Foreign and out-of-band methods are not supported for multi-hops.
+ (when (cdr target-alist)
+ (setq choices target-alist)
+ (while choices
+ (setq item (pop choices))
+ (when
+ (or
+ (not
+ (tramp-get-method-parameter
+ (tramp-file-name-method item) 'tramp-login-program))
+ (tramp-get-method-parameter
+ (tramp-file-name-method item) 'tramp-copy-program))
+ (tramp-error
+ vec 'file-error
+ "Method `%s' is not supported for multi-hops."
+ (tramp-file-name-method item)))))
+
+ ;; Result.
+ target-alist))
+
+(defun tramp-maybe-open-connection (vec)
+ "Maybe open a connection VEC.
Does not do anything if a connection is already open, but re-opens the
connection if a previous connection has died for some reason."
- (let ((p (get-buffer-process
- (tramp-get-buffer multi-method method user host)))
- last-cmd-time)
+ (let ((p (tramp-get-connection-process vec))
+ (process-environment (copy-sequence process-environment)))
+
;; If too much time has passed since last command was sent, look
;; whether process is still alive. If it isn't, kill it. When
;; using ssh, it can sometimes happen that the remote end has hung
@@ -6612,239 +6067,288 @@ connection if a previous connection has died for some reason."
;; tries to send some data to the remote end. So that's why we
;; try to send a command from time to time, then look again
;; whether the process is really alive.
- (save-excursion
- (set-buffer (tramp-get-buffer multi-method method user host))
- (when (and tramp-last-cmd-time
- (> (tramp-time-diff (current-time) tramp-last-cmd-time) 60)
- p (processp p) (memq (process-status p) '(run open)))
- (tramp-send-command
- multi-method method user host "echo are you awake" nil t)
- (unless (and (memq (process-status p) '(run open))
- (tramp-wait-for-output 10))
- (delete-process p)
- (setq p nil))
- (erase-buffer)))
+ (condition-case nil
+ (when (and (> (tramp-time-diff
+ (current-time)
+ (tramp-get-connection-property
+ p "last-cmd-time" '(0 0 0)))
+ 60)
+ p (processp p) (memq (process-status p) '(run open)))
+ (tramp-send-command vec "echo are you awake" t t)
+ (unless (and (memq (process-status p) '(run open))
+ (tramp-wait-for-output p 10))
+ ;; The error will be catched locally.
+ (tramp-error vec 'file-error "Awake did fail")))
+ (file-error
+ (tramp-flush-connection-property vec nil)
+ (tramp-flush-connection-property p nil)
+ (delete-process p)
+ (setq p nil)))
+
+ ;; New connection must be opened.
(unless (and p (processp p) (memq (process-status p) '(run open)))
+
+ ;; We call `tramp-get-buffer' in order to get a debug buffer for
+ ;; messages from the beginning.
+ (tramp-get-buffer vec)
+ (if (zerop (length (tramp-file-name-user vec)))
+ (tramp-message
+ vec 3 "Opening connection for %s using %s..."
+ (tramp-file-name-host vec)
+ (tramp-file-name-method vec))
+ (tramp-message
+ vec 3 "Opening connection for %s@%s using %s..."
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ (tramp-file-name-method vec)))
+
+ ;; Start new process.
(when (and p (processp p))
- (delete-process p))
- (let ((process-connection-type tramp-process-connection-type))
- (funcall (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-connection-function)
- multi-method method user host)))))
-
-(defun tramp-send-command
- (multi-method method user host command &optional noerase neveropen)
- "Send the COMMAND to USER at HOST (logged in using METHOD).
-Erases temporary buffer before sending the command (unless NOERASE
-is true).
-If optional seventh arg NEVEROPEN is non-nil, never try to open the
-connection. This is meant to be used from
-`tramp-maybe-open-connection' only."
- (or neveropen
- (tramp-maybe-open-connection multi-method method user host))
- (setq tramp-last-cmd-time (current-time))
- (setq tramp-last-cmd command)
- (when tramp-debug-buffer
- (save-excursion
- (set-buffer (tramp-get-debug-buffer multi-method method user host))
- (goto-char (point-max))
- (tramp-insert-with-face 'bold (format "$ %s\n" command))))
- (let ((proc nil))
- (set-buffer (tramp-get-buffer multi-method method user host))
- (unless noerase (erase-buffer))
- (setq proc (get-buffer-process (current-buffer)))
- (process-send-string proc
- (concat command tramp-rsh-end-of-line))))
-
-(defun tramp-send-command-internal
- (multi-method method user host command &optional msg)
- "Send command to remote host and wait for success.
-Sends COMMAND, then waits 30 seconds for shell prompt."
- (tramp-send-command multi-method method user host command t t)
- (when msg
- (tramp-message 9 "Waiting 30s for %s..." msg))
- (tramp-barf-if-no-shell-prompt
- nil 30
- "Couldn't `%s', see buffer `%s'" command (buffer-name)))
-
-(defun tramp-wait-for-output (&optional timeout)
+ (delete-process p))
+ (setenv "TERM" tramp-terminal-type)
+ (setenv "LC_ALL" "C")
+ (setenv "PROMPT_COMMAND")
+ (setenv "PS1" "$ ")
+ (let* ((target-alist (tramp-compute-multi-hops vec))
+ (process-connection-type tramp-process-connection-type)
+ (process-adaptive-read-buffering nil)
+ (coding-system-for-read nil)
+ ;; This must be done in order to avoid our file name handler.
+ (p (let ((default-directory
+ (tramp-compat-temporary-file-directory)))
+ (start-process
+ (or (tramp-get-connection-property vec "process-name" nil)
+ (tramp-buffer-name vec))
+ (tramp-get-connection-buffer vec)
+ tramp-encoding-shell)))
+ (first-hop t))
+
+ (tramp-message
+ vec 6 "%s" (mapconcat 'identity (process-command p) " "))
+
+ ;; Check whether process is alive.
+ (set-process-sentinel p 'tramp-flush-connection-property)
+ (tramp-set-process-query-on-exit-flag p nil)
+ (tramp-message vec 3 "Waiting 60s for local shell to come up...")
+ (tramp-barf-if-no-shell-prompt
+ p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)
+
+ ;; Now do all the connections as specified.
+ (while target-alist
+ (let* ((hop (car target-alist))
+ (l-method (tramp-file-name-method hop))
+ (l-user (tramp-file-name-user hop))
+ (l-host (tramp-file-name-host hop))
+ (l-port nil)
+ (login-program
+ (tramp-get-method-parameter l-method 'tramp-login-program))
+ (login-args
+ (tramp-get-method-parameter l-method 'tramp-login-args))
+ (gw-args
+ (tramp-get-method-parameter l-method 'tramp-gw-args))
+ (gw (tramp-get-file-property hop "" "gateway" nil))
+ (g-method (and gw (tramp-file-name-method gw)))
+ (g-user (and gw (tramp-file-name-user gw)))
+ (g-host (and gw (tramp-file-name-host gw)))
+ (command login-program)
+ ;; We don't create the temporary file. In fact, it
+ ;; is just a prefix for the ControlPath option of
+ ;; ssh; the real temporary file has another name, and
+ ;; it is created and protected by ssh. It is also
+ ;; removed by ssh, when the connection is closed.
+ (tmpfile
+ (tramp-set-connection-property
+ p "temp-file"
+ (make-temp-name
+ (expand-file-name
+ tramp-temp-name-prefix
+ (tramp-compat-temporary-file-directory)))))
+ spec)
+
+ ;; Add gateway arguments if necessary.
+ (when (and gw gw-args)
+ (setq login-args (append login-args gw-args)))
+
+ ;; Check for port number. Until now, there's no need for handling
+ ;; like method, user, host.
+ (when (string-match tramp-host-with-port-regexp l-host)
+ (setq l-port (match-string 2 l-host)
+ l-host (match-string 1 l-host)))
+
+ ;; Set variables for computing the prompt for reading password.
+ ;; They can also be derived from a gatewy.
+ (setq tramp-current-method (or g-method l-method)
+ tramp-current-user (or g-user l-user)
+ tramp-current-host (or g-host l-host))
+
+ ;; Replace login-args place holders.
+ (setq
+ l-host (or l-host "")
+ l-user (or l-user "")
+ l-port (or l-port "")
+ spec `((?h . ,l-host) (?u . ,l-user) (?p . ,l-port)
+ (?t . ,tmpfile))
+ command
+ (concat
+ command " "
+ (mapconcat
+ '(lambda (x)
+ (setq x (mapcar '(lambda (y) (format-spec y spec)) x))
+ (unless (member "" x) (mapconcat 'identity x " ")))
+ login-args " ")
+ ;; String to detect failed connection. Every single word must
+ ;; be enclosed with '\"'; otherwise it is detected
+ ;; during connection setup.
+ ;; Local shell could be a Windows COMSPEC. It doesn't know
+ ;; the ";" syntax, but we must exit always for `start-process'.
+ ;; "exec" does not work either.
+ (if first-hop
+ " && exit || exit"
+ "; echo \"Tramp\" \"connection\" \"closed\"; sleep 1"))
+ ;; We don't reach a Windows shell. Could be initial only.
+ first-hop nil)
+
+ ;; Send the command.
+ (tramp-message vec 3 "Sending command `%s'" command)
+ (tramp-send-command vec command t t)
+ (tramp-process-actions p vec tramp-actions-before-shell 60)
+ (tramp-message vec 3 "Found remote shell prompt on `%s'" l-host))
+ ;; Next hop.
+ (setq target-alist (cdr target-alist)))
+
+ ;; Make initial shell settings.
+ (tramp-open-connection-setup-interactive-shell p vec)))))
+
+(defun tramp-send-command (vec command &optional neveropen nooutput)
+ "Send the COMMAND to connection VEC.
+Erases temporary buffer before sending the command. If optional
+arg NEVEROPEN is non-nil, never try to open the connection. This
+is meant to be used from `tramp-maybe-open-connection' only. The
+function waits for output unless NOOUTPUT is set."
+ (unless neveropen (tramp-maybe-open-connection vec))
+ (let ((p (tramp-get-connection-process vec)))
+ (when (tramp-get-connection-property p "remote-echo" nil)
+ ;; We mark the command string that it can be erased in the output buffer.
+ (tramp-set-connection-property p "check-remote-echo" t)
+ (setq command (format "%s%s%s" tramp-echo-mark command tramp-echo-mark)))
+ (tramp-message vec 6 "%s" command)
+ (tramp-send-string vec command)
+ (unless nooutput (tramp-wait-for-output p))))
+
+(defun tramp-wait-for-output (proc &optional timeout)
"Wait for output from remote rsh command."
- (let ((proc (get-buffer-process (current-buffer)))
- (found nil)
- (start-time (current-time))
- (start-point (point))
- (end-of-output (concat "^"
- (regexp-quote tramp-end-of-output)
- "\r?$")))
- ;; Algorithm: get waiting output. See if last line contains
- ;; end-of-output sentinel. If not, wait a bit and again get
- ;; waiting output. Repeat until timeout expires or end-of-output
- ;; sentinel is seen. Will hang if timeout is nil and
- ;; end-of-output sentinel never appears.
- (save-match-data
- (cond (timeout
- ;; Work around an XEmacs bug, where the timeout expires
- ;; faster than it should. This degenerates into polling
- ;; for buggy XEmacsen, but oh, well.
- (while (and (not found)
- (< (tramp-time-diff (current-time) start-time)
- timeout))
- (with-timeout (timeout)
- (while (not found)
- (tramp-accept-process-output proc 1)
- (unless (memq (process-status proc) '(run open))
- (error "Process has died"))
- (goto-char (point-max))
- (forward-line -1)
- (setq found (looking-at end-of-output))))))
- (t
- (while (not found)
- (tramp-accept-process-output proc 1)
- (unless (memq (process-status proc) '(run open))
- (error "Process has died"))
- (goto-char (point-max))
- (forward-line -1)
- (setq found (looking-at end-of-output))))))
- ;; At this point, either the timeout has expired or we have found
- ;; the end-of-output sentinel.
- (when found
- (goto-char (point-max))
- (forward-line -2)
- (delete-region (point) (point-max)))
- ;; If processing echoes, look for it in the first line and delete.
- (when tramp-process-echoes
- (save-excursion
- (goto-char start-point)
- (when (looking-at (regexp-quote tramp-last-cmd))
- (delete-region (point) (progn (forward-line 1) (point))))))
- ;; Add output to debug buffer if appropriate.
- (when tramp-debug-buffer
- (append-to-buffer
- (tramp-get-debug-buffer tramp-current-multi-method tramp-current-method
- tramp-current-user tramp-current-host)
- (point-min) (point-max))
- (when (not found)
- (save-excursion
- (set-buffer
- (tramp-get-debug-buffer tramp-current-multi-method tramp-current-method
- tramp-current-user tramp-current-host))
- (goto-char (point-max))
- (insert "[[Remote prompt `" end-of-output "' not found"
- (if timeout (format " in %d secs" timeout) "")
- "]]"))))
- (goto-char (point-min))
- ;; Return value is whether end-of-output sentinel was found.
- found))
+ (with-current-buffer (process-buffer proc)
+ (let ((found
+ (tramp-wait-for-regexp
+ proc timeout
+ ;; Initially, `tramp-end-of-output' is "$ ". There might
+ ;; be leading escape sequences, which must be ignored.
+ (format "^[^$\n]*%s\r?$" (regexp-quote tramp-end-of-output)))))
+ (if found
+ (let (buffer-read-only)
+ (goto-char (point-max))
+ (forward-line -2)
+ (delete-region (point) (point-max)))
+ (if timeout
+ (tramp-error
+ proc 'file-error
+ "[[Remote prompt `%s' not found in %d secs]]"
+ tramp-end-of-output timeout)
+ (tramp-error
+ proc 'file-error
+ "[[Remote prompt `%s' not found]]" tramp-end-of-output)))
+ ;; Return value is whether end-of-output sentinel was found.
+ found)))
-(defun tramp-send-command-and-check (multi-method method user host command
- &optional subshell)
+(defun tramp-send-command-and-check (vec command &optional subshell)
"Run COMMAND and check its exit status.
-MULTI-METHOD and METHOD specify how to log in (as USER) to the remote HOST.
Sends `echo $?' along with the COMMAND for checking the exit status. If
COMMAND is nil, just sends `echo $?'. Returns the exit status found.
If the optional argument SUBSHELL is non-nil, the command is executed in
a subshell, ie surrounded by parentheses."
- (tramp-send-command multi-method method user host
- (concat (if subshell "( " "")
- command
- (if command " 2>/dev/null; " "")
- "echo tramp_exit_status $?"
- (if subshell " )" " ")))
- (tramp-wait-for-output)
- (goto-char (point-max))
- (unless (search-backward "tramp_exit_status " nil t)
- (error "Couldn't find exit status of `%s'" command))
- (skip-chars-forward "^ ")
- (read (current-buffer)))
-
-(defun tramp-barf-unless-okay (multi-method method user host command subshell
- signal fmt &rest args)
+ (tramp-send-command
+ vec
+ (concat (if subshell "( " "")
+ command
+ (if command " 2>/dev/null; " "")
+ "echo tramp_exit_status $?"
+ (if subshell " )" " ")))
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ (goto-char (point-max))
+ (unless (re-search-backward "tramp_exit_status [0-9]+" nil t)
+ (tramp-error
+ vec 'file-error "Couldn't find exit status of `%s'" command))
+ (skip-chars-forward "^ ")
+ (prog1
+ (read (current-buffer))
+ (let (buffer-read-only) (delete-region (match-beginning 0) (point-max))))))
+
+(defun tramp-barf-unless-okay (vec command fmt &rest args)
"Run COMMAND, check exit status, throw error if exit status not okay.
Similar to `tramp-send-command-and-check' but accepts two more arguments
FMT and ARGS which are passed to `error'."
- (unless (zerop (tramp-send-command-and-check
- multi-method method user host command subshell))
- ;; CCC: really pop-to-buffer? Maybe it's appropriate to be more
- ;; silent.
- (pop-to-buffer (current-buffer))
- (funcall 'signal signal (apply 'format fmt args))))
+ (unless (zerop (tramp-send-command-and-check vec command))
+ (apply 'tramp-error vec 'file-error fmt args)))
+
+(defun tramp-send-command-and-read (vec command)
+ "Run COMMAND and return the output, which must be a Lisp expression.
+In case there is no valid Lisp expression, it raises an error"
+ (tramp-barf-unless-okay vec command "`%s' returns with error" command)
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ ;; Read the expression.
+ (goto-char (point-min))
+ (condition-case nil
+ (prog1 (read (current-buffer))
+ ;; Error handling.
+ (when (re-search-forward "\\S-" (tramp-compat-line-end-position) t)
+ (error nil)))
+ (error (tramp-error
+ vec 'file-error
+ "`%s' does not return a valid Lisp expression: `%s'"
+ command (buffer-string))))))
;; It seems that Tru64 Unix does not like it if long strings are sent
;; to it in one go. (This happens when sending the Perl
;; `file-attributes' implementation, for instance.) Therefore, we
-;; have this function which waits a bit at each line.
-(defun tramp-send-string
- (multi-method method user host string)
- "Send the STRING to USER at HOST using METHOD.
+;; have this function which sends the string in chunks.
+(defun tramp-send-string (vec string)
+ "Send the STRING via connection VEC.
The STRING is expected to use Unix line-endings, but the lines sent to
the remote host use line-endings as defined in the variable
-`tramp-rsh-end-of-line'."
- (let ((proc (get-buffer-process
- (tramp-get-buffer multi-method method user host))))
- (unless proc
- (error "Can't send string to remote host -- not logged in"))
- ;; debug message
- (when tramp-debug-buffer
- (save-excursion
- (set-buffer (tramp-get-debug-buffer multi-method method user host))
- (goto-char (point-max))
- (tramp-insert-with-face 'bold (format "$ %s\n" string))))
- ;; replace "\n" by `tramp-rsh-end-of-line'
- (setq string
- (mapconcat 'identity
- (split-string string "\n")
- tramp-rsh-end-of-line))
- (unless (or (string= string "")
- (string-equal (substring string -1) tramp-rsh-end-of-line))
- (setq string (concat string tramp-rsh-end-of-line)))
- ;; send the string
- (if (and tramp-chunksize (not (zerop tramp-chunksize)))
- (let ((pos 0)
- (end (length string)))
- (while (< pos end)
- (tramp-message-for-buffer
- multi-method method user host 10
- "Sending chunk from %s to %s"
- pos (min (+ pos tramp-chunksize) end))
- (process-send-string
- proc (substring string pos (min (+ pos tramp-chunksize) end)))
- (setq pos (+ pos tramp-chunksize))
- (sleep-for 0.1)))
- (process-send-string proc string))))
-
-(defun tramp-send-eof (multi-method method user host)
- "Send EOF to the remote end.
-METHOD, HOST and USER specify the connection."
- (let ((proc (get-buffer-process
- (tramp-get-buffer multi-method method user host))))
- (unless proc
- (error "Can't send EOF to remote host -- not logged in"))
- (process-send-eof proc)))
-; (process-send-string proc "\^D")))
-
-(defun tramp-kill-process (multi-method method user host)
- "Kill the connection process used by Tramp.
-MULTI-METHOD, METHOD, USER, and HOST specify the connection."
- (let ((proc (get-buffer-process
- (tramp-get-buffer multi-method method user host))))
- (kill-process proc)))
-
-(defun tramp-discard-garbage-erase-buffer (p multi-method method user host)
- "Erase buffer, then discard subsequent garbage.
-If `tramp-discard-garbage' is nil, just erase buffer."
- (if (not tramp-discard-garbage)
- (erase-buffer)
- (while (prog1 (erase-buffer) (tramp-accept-process-output p 0.25))
- (when tramp-debug-buffer
- (save-excursion
- (set-buffer (tramp-get-debug-buffer multi-method method user host))
- (goto-char (point-max))
- (tramp-insert-with-face
- 'bold (format "Additional characters detected\n")))))))
+`tramp-rsh-end-of-line'. The communication buffer is erased before sending."
+ (let* ((p (tramp-get-connection-process vec))
+ (chunksize (tramp-get-connection-property p "chunksize" nil)))
+ (unless p
+ (tramp-error
+ vec 'file-error "Can't send string to remote host -- not logged in"))
+ (tramp-set-connection-property p "last-cmd-time" (current-time))
+ (tramp-message vec 10 "%s" string)
+ (with-current-buffer (tramp-get-connection-buffer vec)
+ ;; Clean up the buffer. We cannot call `erase-buffer' because
+ ;; narrowing might be in effect.
+ (let (buffer-read-only) (delete-region (point-min) (point-max)))
+ ;; Replace "\n" by `tramp-rsh-end-of-line'.
+ (setq string
+ (mapconcat 'identity
+ (split-string string "\n")
+ tramp-rsh-end-of-line))
+ (unless (or (string= string "")
+ (string-equal (substring string -1) tramp-rsh-end-of-line))
+ (setq string (concat string tramp-rsh-end-of-line)))
+ ;; Send the string.
+ (if (and chunksize (not (zerop chunksize)))
+ (let ((pos 0)
+ (end (length string)))
+ (while (< pos end)
+ (tramp-message
+ vec 10 "Sending chunk from %s to %s"
+ pos (min (+ pos chunksize) end))
+ (process-send-string
+ p (substring string pos (min (+ pos chunksize) end)))
+ (setq pos (+ pos chunksize))))
+ (process-send-string p string)))))
(defun tramp-mode-string-to-int (mode-string)
"Converts a ten-letter `drwxrwxrwx'-style mode string into mode bits."
@@ -6917,27 +6421,83 @@ If `tramp-discard-garbage' is nil, just erase buffer."
(t (error "Tenth char `%c' must be one of `xtT-'"
other-execute-or-sticky)))))))
-(defun tramp-convert-file-attributes (multi-method method user host attr)
- "Convert file-attributes ATTR generated by perl script or ls.
+(defun tramp-convert-file-attributes (vec attr)
+ "Convert file-attributes ATTR generated by perl script, stat or ls.
Convert file mode bits to string and set virtual device number.
Return ATTR."
+ ;; Convert last access time.
+ (unless (listp (nth 4 attr))
+ (setcar (nthcdr 4 attr)
+ (list (floor (nth 4 attr) 65536)
+ (floor (mod (nth 4 attr) 65536)))))
+ ;; Convert last modification time.
+ (unless (listp (nth 5 attr))
+ (setcar (nthcdr 5 attr)
+ (list (floor (nth 5 attr) 65536)
+ (floor (mod (nth 5 attr) 65536)))))
+ ;; Convert last status change time.
+ (unless (listp (nth 6 attr))
+ (setcar (nthcdr 6 attr)
+ (list (floor (nth 6 attr) 65536)
+ (floor (mod (nth 6 attr) 65536)))))
+ ;; Convert file size.
+ (when (< (nth 7 attr) 0)
+ (setcar (nthcdr 7 attr) -1))
+ (when (and (floatp (nth 7 attr))
+ (<= (nth 7 attr) (tramp-compat-most-positive-fixnum)))
+ (setcar (nthcdr 7 attr) (round (nth 7 attr))))
;; Convert file mode bits to string.
(unless (stringp (nth 8 attr))
(setcar (nthcdr 8 attr) (tramp-file-mode-from-int (nth 8 attr))))
- ;; Set file's gid change bit. Possible only when id-format is 'integer.
- (when (numberp (nth 3 attr))
- (setcar (nthcdr 9 attr)
- (not (eql (nth 3 attr)
- (tramp-get-remote-gid multi-method method user host)))))
+ ;; Convert directory indication bit.
+ (if (string-match "^d" (nth 8 attr))
+ (setcar attr t)
+ (if (and (listp (car attr)) (stringp (caar attr))
+ (string-match ".+ -> .\\(.+\\)." (caar attr)))
+ (setcar attr (match-string 1 (caar attr)))
+ (setcar attr nil)))
+ ;; Set file's gid change bit.
+ (setcar (nthcdr 9 attr)
+ (if (numberp (nth 3 attr))
+ (not (= (nth 3 attr)
+ (tramp-get-remote-gid vec 'integer)))
+ (not (string-equal
+ (nth 3 attr)
+ (tramp-get-remote-gid vec 'string)))))
+ ;; Convert inode.
+ (unless (listp (nth 10 attr))
+ (setcar (nthcdr 10 attr)
+ (condition-case nil
+ (list (floor (nth 10 attr) 65536)
+ (floor (mod (nth 10 attr) 65536)))
+ ;; Inodes can be incredible huge. We must hide this.
+ (error (tramp-get-inode vec)))))
;; Set virtual device number.
(setcar (nthcdr 11 attr)
- (tramp-get-device multi-method method user host))
+ (tramp-get-device vec))
attr)
-(defun tramp-get-device (multi-method method user host)
+(defun tramp-get-inode (vec)
+ "Returns the virtual inode number.
+If it doesn't exist, generate a new one."
+ (let ((string (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ "")))
+ (unless (assoc string tramp-inodes)
+ (add-to-list 'tramp-inodes
+ (list string (length tramp-inodes))))
+ (nth 1 (assoc string tramp-inodes))))
+
+(defun tramp-get-device (vec)
"Returns the virtual device number.
If it doesn't exist, generate a new one."
- (let ((string (tramp-make-tramp-file-name multi-method method user host "")))
+ (let ((string (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ "")))
(unless (assoc string tramp-devices)
(add-to-list 'tramp-devices
(list string (length tramp-devices))))
@@ -6957,7 +6517,6 @@ If it doesn't exist, generate a new one."
(setq other (tramp-file-mode-permissions other sticky "t"))
(concat type user group other)))
-
(defun tramp-file-mode-permissions (perm suid suid-text)
"Convert a permission bitset into a string.
This is used internally by `tramp-file-mode-from-int'."
@@ -6970,7 +6529,6 @@ This is used internally by `tramp-file-mode-from-int'."
(and suid (upcase suid-text)) ; suid, !execute
(and x "x") "-")))) ; !suid
-
(defun tramp-decimal-to-octal (i)
"Return a string consisting of the octal digits of I.
Not actually used. Use `(format \"%o\" i)' instead?"
@@ -6981,16 +6539,6 @@ Not actually used. Use `(format \"%o\" i)' instead?"
(number-to-string (% i 8))))))
-;;(defun tramp-octal-to-decimal (ostr)
-;; "Given a string of octal digits, return a decimal number."
-;; (cond ((null ostr) 0)
-;; ((string= "" ostr) 0)
-;; (t (let ((last (aref ostr (1- (length ostr))))
-;; (rest (substring ostr 0 (1- (length ostr)))))
-;; (unless (and (>= last ?0)
-;; (<= last ?7))
-;; (error "Not an octal digit: %c" last))
-;; (+ (- last ?0) (* 8 (tramp-octal-to-decimal rest)))))))
;; Kudos to Gerd Moellmann for this suggestion.
(defun tramp-octal-to-decimal (ostr)
"Given a string of octal digits, return a decimal number."
@@ -7012,295 +6560,427 @@ Not actually used. Use `(format \"%o\" i)' instead?"
;; ------------------------------------------------------------
-;; -- TRAMP file names --
+;; -- Tramp file names --
;; ------------------------------------------------------------
;; Conversion functions between external representation and
;; internal data structure. Convenience functions for internal
;; data structure.
-(defun tramp-file-name-p (obj)
- "Check whether TRAMP-FILE-NAME is a Tramp object."
- (and (vectorp obj) (= 5 (length obj))))
-
-(defun tramp-file-name-multi-method (obj)
- "Return MULTI-METHOD component of TRAMP-FILE-NAME."
- (and (tramp-file-name-p obj) (aref obj 0)))
-
-(defun tramp-file-name-method (obj)
- "Return METHOD component of TRAMP-FILE-NAME."
- (and (tramp-file-name-p obj) (aref obj 1)))
-
-(defun tramp-file-name-user (obj)
- "Return USER component of TRAMP-FILE-NAME."
- (and (tramp-file-name-p obj) (aref obj 2)))
-
-(defun tramp-file-name-host (obj)
- "Return HOST component of TRAMP-FILE-NAME."
- (and (tramp-file-name-p obj) (aref obj 3)))
-
-(defun tramp-file-name-localname (obj)
- "Return LOCALNAME component of TRAMP-FILE-NAME."
- (and (tramp-file-name-p obj) (aref obj 4)))
+(defun tramp-file-name-p (vec)
+ "Check whether VEC is a Tramp object."
+ (and (vectorp vec) (= 4 (length vec))))
+
+(defun tramp-file-name-method (vec)
+ "Return method component of VEC."
+ (and (tramp-file-name-p vec) (aref vec 0)))
+
+(defun tramp-file-name-user (vec)
+ "Return user component of VEC."
+ (and (tramp-file-name-p vec) (aref vec 1)))
+
+(defun tramp-file-name-host (vec)
+ "Return host component of VEC."
+ (and (tramp-file-name-p vec) (aref vec 2)))
+
+(defun tramp-file-name-localname (vec)
+ "Return localname component of VEC."
+ (and (tramp-file-name-p vec) (aref vec 3)))
+
+;; The host part of a Tramp file name vector can be of kind
+;; "host#port". Sometimes, we must extract these parts.
+(defun tramp-file-name-real-host (vec)
+ "Return the host name of VEC without port."
+ (let ((host (tramp-file-name-host vec)))
+ (if (and (stringp host)
+ (string-match tramp-host-with-port-regexp host))
+ (match-string 1 host)
+ host)))
+
+(defun tramp-file-name-port (vec)
+ "Return the port number of VEC."
+ (let ((host (tramp-file-name-host vec)))
+ (and (stringp host)
+ (string-match tramp-host-with-port-regexp host)
+ (string-to-number (match-string 2 host)))))
(defun tramp-tramp-file-p (name)
- "Return t if NAME is a tramp file."
+ "Return t if NAME is a Tramp file."
(save-match-data
(string-match tramp-file-name-regexp name)))
-;; HHH: Changed. Used to assign the return value of (user-login-name)
-;; to the `user' part of the structure if a user name was not
-;; provided, now it assigns nil.
-(defun tramp-dissect-file-name (name)
- "Return an `tramp-file-name' structure.
-The structure consists of remote method, remote user, remote host and
-localname (file name on remote host)."
- (save-match-data
- (let* ((match (string-match (nth 0 tramp-file-name-structure) name))
- (method
- ; single-hop
- (if match (match-string (nth 1 tramp-file-name-structure) name)
- ; maybe multi-hop
- (string-match
- (format (nth 0 tramp-multi-file-name-structure)
- (nth 0 tramp-multi-file-name-hop-structure)) name)
- (match-string (nth 1 tramp-multi-file-name-structure) name))))
- (if (and method (member method tramp-multi-methods))
- ;; If it's a multi method, the file name structure contains
- ;; arrays of method, user and host.
- (tramp-dissect-multi-file-name name)
- ;; Normal method. First, find out default method.
- (unless match (error "Not a tramp file name: %s" name))
- (let ((user (match-string (nth 2 tramp-file-name-structure) name))
- (host (match-string (nth 3 tramp-file-name-structure) name))
- (localname (match-string (nth 4 tramp-file-name-structure) name)))
- (vector nil method (or user nil) host localname))))))
-
-(defun tramp-find-default-method (user host)
- "Look up the right method to use in `tramp-default-method-alist'."
- (let ((choices tramp-default-method-alist)
- (method tramp-default-method)
- item)
- (while choices
- (setq item (pop choices))
- (when (and (string-match (or (nth 0 item) "") (or host ""))
- (string-match (or (nth 1 item) "") (or user "")))
- (setq method (nth 2 item))
- (setq choices nil)))
- method))
-
-(defun tramp-find-method (multi-method method user host)
+(defun tramp-find-method (method user host)
"Return the right method string to use.
-This is MULTI-METHOD, if non-nil. Otherwise, it is METHOD, if non-nil.
-If both MULTI-METHOD and METHOD are nil, do a lookup in
+This is METHOD, if non-nil. Otherwise, do a lookup in
`tramp-default-method-alist'."
- (or multi-method method (tramp-find-default-method user host)))
-
-;; HHH: Not Changed. Multi method. Will probably not handle the case where
-;; a user name is not provided in the "file name" very well.
-(defun tramp-dissect-multi-file-name (name)
- "Not implemented yet."
- (let ((regexp (nth 0 tramp-multi-file-name-structure))
- (method-index (nth 1 tramp-multi-file-name-structure))
- (hops-index (nth 2 tramp-multi-file-name-structure))
- (localname-index (nth 3 tramp-multi-file-name-structure))
- (hop-regexp (nth 0 tramp-multi-file-name-hop-structure))
- (hop-method-index (nth 1 tramp-multi-file-name-hop-structure))
- (hop-user-index (nth 2 tramp-multi-file-name-hop-structure))
- (hop-host-index (nth 3 tramp-multi-file-name-hop-structure))
- method hops len hop-methods hop-users hop-hosts localname)
- (unless (string-match (format regexp hop-regexp) name)
- (error "Not a multi tramp file name: %s" name))
- (setq method (match-string method-index name))
- (setq hops (match-string hops-index name))
- (setq len (/ (length (match-data t)) 2))
- (when (< localname-index 0) (setq localname-index (+ localname-index len)))
- (setq localname (match-string localname-index name))
- (let ((index 0))
- (while (string-match hop-regexp hops index)
- (setq index (match-end 0))
- (setq hop-methods
- (cons (match-string hop-method-index hops) hop-methods))
- (setq hop-users
- (cons (match-string hop-user-index hops) hop-users))
- (setq hop-hosts
- (cons (match-string hop-host-index hops) hop-hosts))))
- (vector
- method
- (apply 'vector (reverse hop-methods))
- (apply 'vector (reverse hop-users))
- (apply 'vector (reverse hop-hosts))
- localname)))
-
-(defun tramp-make-tramp-file-name (multi-method method user host localname)
- "Constructs a tramp file name from METHOD, USER, HOST and LOCALNAME."
- (if multi-method
- (tramp-make-tramp-multi-file-name multi-method method user host localname)
- (format-spec
- (concat tramp-prefix-format
- (when method (concat "%m" tramp-postfix-single-method-format))
- (when user (concat "%u" tramp-postfix-user-format))
- (when host (concat "%h" tramp-postfix-host-format))
- (when localname (concat "%p")))
- `((?m . ,method) (?u . ,user) (?h . ,host) (?p . ,localname)))))
-
-;; CCC: Henrik Holm: Not Changed. Multi Method. What should be done
-;; with this when USER is nil?
-(defun tramp-make-tramp-multi-file-name (multi-method method user host localname)
- "Constructs a tramp file name for a multi-hop method."
- (unless tramp-make-multi-tramp-file-format
- (error "`tramp-make-multi-tramp-file-format' is nil"))
- (let* ((prefix-format (nth 0 tramp-make-multi-tramp-file-format))
- (hop-format (nth 1 tramp-make-multi-tramp-file-format))
- (localname-format (nth 2 tramp-make-multi-tramp-file-format))
- (prefix (format-spec prefix-format `((?m . ,multi-method))))
- (hops "")
- (localname (format-spec localname-format `((?p . ,localname))))
- (i 0)
- (len (length method)))
- (while (< i len)
- (let ((m (aref method i)) (u (aref user i)) (h (aref host i)))
- (setq hops (concat hops (format-spec hop-format
- `((?m . ,m) (?u . ,u) (?h . ,h)))))
- (setq i (1+ i))))
- (concat prefix hops localname)))
-
-(defun tramp-make-copy-program-file-name (user host localname)
- "Create a file name suitable to be passed to `rcp' and workalikes."
- (if user
- (format "%s@%s:%s" user host localname)
- (format "%s:%s" host localname)))
+ (or method
+ (let ((choices tramp-default-method-alist)
+ lmethod item)
+ (while choices
+ (setq item (pop choices))
+ (when (and (string-match (or (nth 0 item) "") (or host ""))
+ (string-match (or (nth 1 item) "") (or user "")))
+ (setq lmethod (nth 2 item))
+ (setq choices nil)))
+ lmethod)
+ tramp-default-method))
+
+(defun tramp-find-user (method user host)
+ "Return the right user string to use.
+This is USER, if non-nil. Otherwise, do a lookup in
+`tramp-default-user-alist'."
+ (or user
+ (let ((choices tramp-default-user-alist)
+ luser item)
+ (while choices
+ (setq item (pop choices))
+ (when (and (string-match (or (nth 0 item) "") (or method ""))
+ (string-match (or (nth 1 item) "") (or host "")))
+ (setq luser (nth 2 item))
+ (setq choices nil)))
+ luser)
+ tramp-default-user))
+
+(defun tramp-find-host (method user host)
+ "Return the right host string to use.
+This is HOST, if non-nil. Otherwise, it is `tramp-default-host'."
+ (or (and (> (length host) 0) host)
+ tramp-default-host))
+
+(defun tramp-dissect-file-name (name &optional nodefault)
+ "Return a `tramp-file-name' structure.
+The structure consists of remote method, remote user, remote host
+and localname (file name on remote host). If NODEFAULT is
+non-nil, the file name parts are not expanded to their default
+values."
+ (save-match-data
+ (let ((match (string-match (nth 0 tramp-file-name-structure) name)))
+ (unless match (error "Not a Tramp file name: %s" name))
+ (let ((method (match-string (nth 1 tramp-file-name-structure) name))
+ (user (match-string (nth 2 tramp-file-name-structure) name))
+ (host (match-string (nth 3 tramp-file-name-structure) name))
+ (localname (match-string (nth 4 tramp-file-name-structure) name)))
+ (if nodefault
+ (vector method user host localname)
+ (vector
+ (tramp-find-method method user host)
+ (tramp-find-user method user host)
+ (tramp-find-host method user host)
+ localname))))))
+
+(defun tramp-equal-remote (file1 file2)
+ "Checks, whether the remote parts of FILE1 and FILE2 are identical.
+The check depends on method, user and host name of the files. If
+one of the components is missing, the default values are used.
+The local file name parts of FILE1 and FILE2 are not taken into
+account.
-(defun tramp-method-out-of-band-p (multi-method method user host)
- "Return t if this is an out-of-band method, nil otherwise."
- (tramp-get-method-parameter
- multi-method
- (tramp-find-method multi-method method user host)
- user host 'tramp-copy-program))
+Example:
-;; Variables local to connection.
+ (tramp-equal-remote \"/ssh::/etc\" \"/<your host name>:/home\")
+
+would yield `t'. On the other hand, the following check results in nil:
+
+ (tramp-equal-remote \"/sudo::/etc\" \"/su::/etc\")"
+ (and (stringp (file-remote-p file1))
+ (stringp (file-remote-p file2))
+ (string-equal (file-remote-p file1) (file-remote-p file2))))
+
+(defun tramp-make-tramp-file-name (method user host localname)
+ "Constructs a Tramp file name from METHOD, USER, HOST and LOCALNAME."
+ (concat tramp-prefix-format
+ (when (not (zerop (length method)))
+ (concat method tramp-postfix-method-format))
+ (when (not (zerop (length user)))
+ (concat user tramp-postfix-user-format))
+ (when host host) tramp-postfix-host-format
+ (when localname localname)))
+
+(defun tramp-completion-make-tramp-file-name (method user host localname)
+ "Constructs a Tramp file name from METHOD, USER, HOST and LOCALNAME.
+It must not be a complete Tramp file name, but as long as there are
+necessary only. This function will be used in file name completion."
+ (concat tramp-prefix-format
+ (when (not (zerop (length method)))
+ (concat method tramp-postfix-method-format))
+ (when (not (zerop (length user)))
+ (concat user tramp-postfix-user-format))
+ (when (not (zerop (length host)))
+ (concat host tramp-postfix-host-format))
+ (when localname localname)))
+
+(defun tramp-make-copy-program-file-name (vec)
+ "Create a file name suitable to be passed to `rcp' and workalikes."
+ (let ((user (tramp-file-name-user vec))
+ (host (tramp-file-name-real-host vec))
+ (localname (tramp-shell-quote-argument
+ (tramp-file-name-localname vec))))
+ (if (not (zerop (length user)))
+ (format "%s@%s:%s" user host localname)
+ (format "%s:%s" host localname))))
+
+(defun tramp-method-out-of-band-p (vec)
+ "Return t if this is an out-of-band method, nil otherwise."
+ (tramp-get-method-parameter (tramp-file-name-method vec) 'tramp-copy-program))
-(defun tramp-get-ls-command (multi-method method user host)
- (or
- (save-excursion
- (tramp-maybe-open-connection multi-method method user host)
- (set-buffer (tramp-get-buffer multi-method method user host))
- tramp-ls-command)
- (error "Couldn't find remote `ls' command")))
+(defun tramp-local-host-p (vec)
+ "Return t if this points to the local host, nil otherwise."
+ (let ((host (tramp-file-name-real-host vec)))
+ (and
+ (stringp host)
+ (string-match
+ (concat "^" (regexp-opt (list "localhost" (system-name)) t) "$") host))))
-(defun tramp-get-test-groks-nt (multi-method method user host)
- (save-excursion
- (tramp-maybe-open-connection multi-method method user host)
- (set-buffer (tramp-get-buffer multi-method method user host))
- tramp-test-groks-nt))
+;; Variables local to connection.
-(defun tramp-get-file-exists-command (multi-method method user host)
- (or
- (save-excursion
- (tramp-maybe-open-connection multi-method method user host)
- (set-buffer (tramp-get-buffer multi-method method user host))
- tramp-file-exists-command)
- (error "Couldn't find remote `test -e' command")))
+(defun tramp-get-remote-path (vec)
+ (with-connection-property vec "remote-path"
+ (let* ((remote-path (tramp-compat-copy-tree tramp-remote-path))
+ (elt (memq 'tramp-default-remote-path remote-path))
+ (default-remote-path
+ (when elt
+ (condition-case nil
+ (symbol-name
+ (tramp-send-command-and-read vec "getconf PATH"))
+ ;; Default if "getconf" is not available.
+ (error
+ (tramp-message
+ vec 3
+ "`getconf PATH' not successful, using default value \"%s\"."
+ "/bin:/usr/bin")
+ "/bin:/usr/bin")))))
+ (when elt
+ ;; Replace place holder `tramp-default-remote-path'.
+ (setcdr elt
+ (append
+ (tramp-split-string default-remote-path ":")
+ (cdr elt)))
+ (setq remote-path (delq 'tramp-default-remote-path remote-path)))
+
+ ;; Remove non-existing directories.
+ (delq
+ nil
+ (mapcar
+ (lambda (x)
+ (and
+ (with-connection-property vec x
+ (file-directory-p
+ (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ x)))
+ x))
+ remote-path)))))
+
+(defun tramp-get-remote-tmpdir (vec)
+ (with-connection-property vec "tmp-directory"
+ (let ((dir (tramp-shell-quote-argument "/tmp")))
+ (if (and (zerop
+ (tramp-send-command-and-check
+ vec (format "%s -d %s" (tramp-get-test-command vec) dir)))
+ (zerop
+ (tramp-send-command-and-check
+ vec (format "%s -w %s" (tramp-get-test-command vec) dir))))
+ dir
+ (tramp-error vec 'file-error "Directory %s not accessible" dir)))))
+
+(defun tramp-get-ls-command (vec)
+ (with-connection-property vec "ls"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding a suitable `ls' command")
+ (or
+ (catch 'ls-found
+ (dolist (cmd '("ls" "gnuls" "gls"))
+ (let ((dl (tramp-get-remote-path vec))
+ result)
+ (while
+ (and
+ dl
+ (setq result
+ (tramp-find-executable vec cmd dl t t)))
+ ;; Check parameter.
+ (when (zerop (tramp-send-command-and-check
+ vec (format "%s -lnd /" result)))
+ (throw 'ls-found result))
+ (setq dl (cdr dl))))))
+ (tramp-error vec 'file-error "Couldn't find a proper `ls' command")))))
+
+(defun tramp-get-test-command (vec)
+ (with-connection-property vec "test"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding a suitable `test' command")
+ (if (zerop (tramp-send-command-and-check vec "test 0"))
+ "test"
+ (tramp-find-executable vec "test" (tramp-get-remote-path vec))))))
+
+(defun tramp-get-test-nt-command (vec)
+ ;; Does `test A -nt B' work? Use abominable `find' construct if it
+ ;; doesn't. BSD/OS 4.0 wants the parentheses around the command,
+ ;; for otherwise the shell crashes.
+ (with-connection-property vec "test-nt"
+ (or
+ (progn
+ (tramp-send-command
+ vec (format "( %s / -nt / )" (tramp-get-test-command vec)))
+ (with-current-buffer (tramp-get-buffer vec)
+ (goto-char (point-min))
+ (when (looking-at
+ (format "\n%s\r?\n" (regexp-quote tramp-end-of-output)))
+ (format "%s %%s -nt %%s" (tramp-get-test-command vec)))))
+ (progn
+ (tramp-send-command
+ vec
+ (format
+ "tramp_test_nt () {\n%s -n \"`find $1 -prune -newer $2 -print`\"\n}"
+ (tramp-get-test-command vec)))
+ "tramp_test_nt %s %s"))))
+
+(defun tramp-get-file-exists-command (vec)
+ (with-connection-property vec "file-exists"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding command to check if file exists")
+ (tramp-find-file-exists-command vec))))
+
+(defun tramp-get-remote-ln (vec)
+ (with-connection-property vec "ln"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding a suitable `ln' command")
+ (tramp-find-executable vec "ln" (tramp-get-remote-path vec)))))
+
+(defun tramp-get-remote-perl (vec)
+ (with-connection-property vec "perl"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding a suitable `perl' command")
+ (or (tramp-find-executable vec "perl5" (tramp-get-remote-path vec))
+ (tramp-find-executable vec "perl" (tramp-get-remote-path vec))))))
+
+(defun tramp-get-remote-stat (vec)
+ (with-connection-property vec "stat"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding a suitable `stat' command")
+ (let ((result (tramp-find-executable
+ vec "stat" (tramp-get-remote-path vec)))
+ tmp)
+ ;; Check whether stat(1) returns usable syntax.
+ (when result
+ (setq tmp
+ ;; We don't want to display an error message.
+ (with-temp-message (or (current-message) "")
+ (condition-case nil
+ (tramp-send-command-and-read
+ vec (format "%s -c '(\"%%N\")' /" result))
+ (error nil))))
+ (unless (and (listp tmp) (stringp (car tmp))
+ (string-match "^./.$" (car tmp)))
+ (setq result nil)))
+ result))))
-(defun tramp-get-remote-perl (multi-method method user host)
- (tramp-get-connection-property "perl" nil multi-method method user host))
+(defun tramp-get-remote-id (vec)
+ (with-connection-property vec "id"
+ (with-current-buffer (tramp-get-buffer vec)
+ (tramp-message vec 5 "Finding POSIX `id' command")
+ (or
+ (catch 'id-found
+ (let ((dl (tramp-get-remote-path vec))
+ result)
+ (while
+ (and
+ dl
+ (setq result
+ (tramp-find-executable vec "id" dl t t)))
+ ;; Check POSIX parameter.
+ (when (zerop (tramp-send-command-and-check
+ vec (format "%s -u" result)))
+ (throw 'id-found result))
+ (setq dl (cdr dl)))))
+ (tramp-error vec 'file-error "Couldn't find a POSIX `id' command")))))
+
+(defun tramp-get-remote-uid (vec id-format)
+ (with-connection-property vec (format "uid-%s" id-format)
+ (let ((res (tramp-send-command-and-read
+ vec
+ (format "%s -u%s %s"
+ (tramp-get-remote-id vec)
+ (if (equal id-format 'integer) "" "n")
+ (if (equal id-format 'integer)
+ "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))))
+ ;; The command might not always return a number.
+ (if (and (equal id-format 'integer) (not (integerp res))) -1 res))))
+
+(defun tramp-get-remote-gid (vec id-format)
+ (with-connection-property vec (format "gid-%s" id-format)
+ (let ((res (tramp-send-command-and-read
+ vec
+ (format "%s -g%s %s"
+ (tramp-get-remote-id vec)
+ (if (equal id-format 'integer) "" "n")
+ (if (equal id-format 'integer)
+ "" "| sed -e s/^/\\\"/ -e s/\$/\\\"/")))))
+ ;; The command might not always return a number.
+ (if (and (equal id-format 'integer) (not (integerp res))) -1 res))))
+
+(defun tramp-get-local-uid (id-format)
+ (if (equal id-format 'integer) (user-uid) (user-login-name)))
+
+(defun tramp-get-local-gid (id-format)
+ (nth 3 (tramp-compat-file-attributes "~/" id-format)))
-(defun tramp-get-remote-ln (multi-method method user host)
+;; Some predefined connection properties.
+(defun tramp-get-remote-coding (vec prop)
+ ;; Local coding handles properties like remote coding. So we could
+ ;; call it without pain.
+ (let ((ret (tramp-get-local-coding vec prop)))
+ ;; The connection property might have been cached. So we must send
+ ;; the script - maybe.
+ (when (not (stringp ret))
+ (let ((name (symbol-name ret)))
+ (while (string-match (regexp-quote "-") name)
+ (setq name (replace-match "_" nil t name)))
+ (tramp-maybe-send-script vec (symbol-value ret) name)
+ (setq ret name)))
+ ;; Return the value.
+ ret))
+
+(defun tramp-get-local-coding (vec prop)
(or
- (tramp-get-connection-property "ln" nil multi-method method user host)
- (error "Couldn't find remote `ln' command")))
-
-(defun tramp-get-remote-uid (multi-method method user host)
- (tramp-get-connection-property "uid" nil multi-method method user host))
-
-(defun tramp-get-remote-gid (multi-method method user host)
- (tramp-get-connection-property "gid" nil multi-method method user host))
-
-;; Get a property of a TRAMP connection.
-(defun tramp-get-connection-property
- (property default multi-method method user host)
- "Get the named property for the connection.
-If the value is not set for the connection, return `default'"
- (tramp-maybe-open-connection multi-method method user host)
- (with-current-buffer (tramp-get-buffer multi-method method user host)
- (let (error)
- (condition-case nil
- (symbol-value (intern (concat "tramp-connection-property-" property)))
- (error default)))))
-
-;; Set a property of a TRAMP connection.
-(defun tramp-set-connection-property
- (property value multi-method method user host)
- "Set the named property of a TRAMP connection."
- (tramp-maybe-open-connection multi-method method user host)
- (with-current-buffer (tramp-get-buffer multi-method method user host)
- (set (make-local-variable
- (intern (concat "tramp-connection-property-" property)))
- value)))
+ (tramp-get-connection-property vec prop nil)
+ (progn
+ (tramp-find-inline-encoding vec)
+ (tramp-get-connection-property vec prop nil))))
-;; Some predefined connection properties.
-(defun tramp-set-remote-encoding (multi-method method user host rem-enc)
- (tramp-set-connection-property "remote-encoding" rem-enc
- multi-method method user host))
-(defun tramp-get-remote-encoding (multi-method method user host)
- (tramp-get-connection-property "remote-encoding" nil
- multi-method method user host))
-
-(defun tramp-set-remote-decoding (multi-method method user host rem-dec)
- (tramp-set-connection-property "remote-decoding" rem-dec
- multi-method method user host))
-(defun tramp-get-remote-decoding (multi-method method user host)
- (tramp-get-connection-property "remote-decoding" nil
- multi-method method user host))
-
-(defun tramp-set-local-encoding (multi-method method user host loc-enc)
- (tramp-set-connection-property "local-encoding" loc-enc
- multi-method method user host))
-(defun tramp-get-local-encoding (multi-method method user host)
- (tramp-get-connection-property "local-encoding" nil
- multi-method method user host))
-
-(defun tramp-set-local-decoding (multi-method method user host loc-dec)
- (tramp-set-connection-property "local-decoding" loc-dec
- multi-method method user host))
-(defun tramp-get-local-decoding (multi-method method user host)
- (tramp-get-connection-property "local-decoding" nil
- multi-method method user host))
-
-(defun tramp-get-method-parameter (multi-method method user host param)
+(defun tramp-get-method-parameter (method param)
"Return the method parameter PARAM.
-If the `tramp-methods' entry does not exist, use the variable PARAM
-as default."
- (unless (boundp param)
- (error "Non-existing method parameter `%s'" param))
- (let ((entry (assoc param
- (assoc (tramp-find-method multi-method method user host)
- tramp-methods))))
- (if entry
- (cadr entry)
- (symbol-value param))))
-
+If the `tramp-methods' entry does not exist, return NIL."
+ (let ((entry (assoc param (assoc method tramp-methods))))
+ (when entry (cadr entry))))
;; Auto saving to a special directory.
(defun tramp-exists-file-name-handler (operation &rest args)
- (let ((buffer-file-name "/")
- (fnha file-name-handler-alist)
- (check-file-name-operation operation)
- (file-name-handler-alist
- (list
- (cons "/"
- '(lambda (operation &rest args)
- "Returns OPERATION if it is the one to be checked"
- (if (equal check-file-name-operation operation)
- operation
- (let ((file-name-handler-alist fnha))
- (apply operation args))))))))
- (eq (apply operation args) operation)))
+ "Checks whether OPERATION runs a file name handler."
+ ;; The file name handler is determined on base of either an
+ ;; argument, `buffer-file-name', or `default-directory'.
+ (condition-case nil
+ (let* ((buffer-file-name "/")
+ (default-directory "/")
+ (fnha file-name-handler-alist)
+ (check-file-name-operation operation)
+ (file-name-handler-alist
+ (list
+ (cons "/"
+ '(lambda (operation &rest args)
+ "Returns OPERATION if it is the one to be checked."
+ (if (equal check-file-name-operation operation)
+ operation
+ (let ((file-name-handler-alist fnha))
+ (apply operation args))))))))
+ (equal (apply operation args) operation))
+ (error nil)))
(unless (tramp-exists-file-name-handler 'make-auto-save-file-name)
(defadvice make-auto-save-file-name
(around tramp-advice-make-auto-save-file-name () activate)
- "Invoke `tramp-handle-make-auto-save-file-name' for tramp files."
+ "Invoke `tramp-handle-make-auto-save-file-name' for Tramp files."
(if (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name)))
(setq ad-return-value (tramp-handle-make-auto-save-file-name))
ad-do-it))
@@ -7315,6 +6995,7 @@ as default."
(let ((bfn (buffer-file-name)))
(when (and (stringp bfn)
(tramp-tramp-file-p bfn)
+ (buffer-modified-p)
(stringp buffer-auto-save-file-name)
(not (equal bfn buffer-auto-save-file-name)))
(unless (file-exists-p buffer-auto-save-file-name)
@@ -7347,57 +7028,67 @@ ALIST is of the form ((FROM . TO) ...)."
(setq alist (cdr alist))))
string))
-(defun tramp-insert-with-face (face string)
- "Insert text with a specific face."
- (let ((start (point)))
- (insert string)
- (add-text-properties start (point) (list 'face face))))
-
;; ------------------------------------------------------------
;; -- Compatibility functions section --
;; ------------------------------------------------------------
-(defun tramp-temporary-file-directory ()
- "Return name of directory for temporary files (compat function).
-For Emacs, this is the variable `temporary-file-directory', for XEmacs
-this is the function `temp-directory'."
- (cond ((boundp 'temporary-file-directory)
- (symbol-value 'temporary-file-directory))
- ((fboundp 'temp-directory)
- (funcall (symbol-function 'temp-directory))) ;pacify byte-compiler
- ((let ((d (getenv "TEMP"))) (and d (file-directory-p d)))
- (file-name-as-directory (getenv "TEMP")))
- ((let ((d (getenv "TMP"))) (and d (file-directory-p d)))
- (file-name-as-directory (getenv "TMP")))
- ((let ((d (getenv "TMPDIR"))) (and d (file-directory-p d)))
- (file-name-as-directory (getenv "TMPDIR")))
- ((file-exists-p "c:/temp") (file-name-as-directory "c:/temp"))
- (t (message (concat "Neither `temporary-file-directory' nor "
- "`temp-directory' is defined -- using /tmp."))
- (file-name-as-directory "/tmp"))))
-
-(defun tramp-read-passwd (user host prompt)
+(defun tramp-read-passwd (proc &optional prompt)
"Read a password from user (compat function).
Invokes `password-read' if available, `read-passwd' else."
- (if (functionp 'password-read)
- (let* ((key (concat (or user (user-login-name)) "@" host))
- (password (apply #'password-read (list prompt key))))
- (apply #'password-cache-add (list key password))
- password)
- (read-passwd prompt)))
-
-(defun tramp-clear-passwd (&optional user host)
- "Clear password cache for connection related to current-buffer."
- (interactive)
- (let ((filename (or buffer-file-name list-buffers-directory "")))
- (when (and (functionp 'password-cache-remove)
- (or (and user host) (tramp-tramp-file-p filename)))
- (let* ((v (when (tramp-tramp-file-p filename)
- (tramp-dissect-file-name filename)))
- (luser (or user (tramp-file-name-user v) (user-login-name)))
- (lhost (or host (tramp-file-name-host v) (system-name)))
- (key (concat luser "@" lhost)))
- (apply #'password-cache-remove (list key))))))
+ (let* ((key (tramp-make-tramp-file-name
+ tramp-current-method tramp-current-user
+ tramp-current-host ""))
+ (pw-prompt
+ (or prompt
+ (with-current-buffer (process-buffer proc)
+ (tramp-check-for-regexp proc tramp-password-prompt-regexp)
+ (format "%s for %s " (capitalize (match-string 1)) key)))))
+ (if (functionp 'password-read)
+ (let ((password (funcall (symbol-function 'password-read)
+ pw-prompt key)))
+ (funcall (symbol-function 'password-cache-add) key password)
+ password)
+ (read-passwd pw-prompt))))
+
+(defun tramp-clear-passwd (vec)
+ "Clear password cache for connection related to VEC."
+ (when (functionp 'password-cache-remove)
+ (funcall
+ (symbol-function 'password-cache-remove)
+ (tramp-make-tramp-file-name
+ (tramp-file-name-method vec)
+ (tramp-file-name-user vec)
+ (tramp-file-name-host vec)
+ ""))))
+
+;; Snarfed code from time-date.el and parse-time.el
+
+(defconst tramp-half-a-year '(241 17024)
+"Evaluated by \"(days-to-time 183)\".")
+
+(defconst tramp-parse-time-months
+ '(("jan" . 1) ("feb" . 2) ("mar" . 3)
+ ("apr" . 4) ("may" . 5) ("jun" . 6)
+ ("jul" . 7) ("aug" . 8) ("sep" . 9)
+ ("oct" . 10) ("nov" . 11) ("dec" . 12))
+ "Alist mapping month names to integers.")
+
+(defun tramp-time-less-p (t1 t2)
+ "Say whether time value T1 is less than time value T2."
+ (unless t1 (setq t1 '(0 0)))
+ (unless t2 (setq t2 '(0 0)))
+ (or (< (car t1) (car t2))
+ (and (= (car t1) (car t2))
+ (< (nth 1 t1) (nth 1 t2)))))
+
+(defun tramp-time-subtract (t1 t2)
+ "Subtract two time values.
+Return the difference in the format of a time value."
+ (unless t1 (setq t1 '(0 0)))
+ (unless t2 (setq t2 '(0 0)))
+ (let ((borrow (< (cadr t1) (cadr t2))))
+ (list (- (car t1) (car t2) (if borrow 1 0))
+ (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
(defun tramp-time-diff (t1 t2)
"Return the difference between the two times, in seconds.
@@ -7416,11 +7107,7 @@ T1 and T2 are time values (as returned by `current-time' for example)."
(if (< (length t1) 3) (append t1 '(0)) t1)
(if (< (length t2) 3) (append t2 '(0)) t2)))
(t
- ;; snarfed from Emacs 21 time-date.el; combining
- ;; time-to-seconds and subtract-time
- (let ((time (let ((borrow (< (cadr t1) (cadr t2))))
- (list (- (car t1) (car t2) (if borrow 1 0))
- (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2))))))
+ (let ((time (tramp-time-subtract t1 t2)))
(+ (* (car time) 65536.0)
(cadr time)
(/ (or (nth 2 time) 0) 1000000.0))))))
@@ -7429,19 +7116,18 @@ T1 and T2 are time values (as returned by `current-time' for example)."
"Return a coding system like CODING-SYSTEM but with given EOL-TYPE.
EOL-TYPE can be one of `dos', `unix', or `mac'."
(cond ((fboundp 'coding-system-change-eol-conversion)
- (apply #'coding-system-change-eol-conversion
- (list coding-system eol-type)))
+ (funcall (symbol-function 'coding-system-change-eol-conversion)
+ coding-system eol-type))
((fboundp 'subsidiary-coding-system)
- (apply
- #'subsidiary-coding-system
- (list coding-system
- (cond ((eq eol-type 'dos) 'crlf)
- ((eq eol-type 'unix) 'lf)
- ((eq eol-type 'mac) 'cr)
- (t
- (error "Unknown EOL-TYPE `%s', must be %s"
- eol-type
- "`dos', `unix', or `mac'"))))))
+ (funcall (symbol-function 'subsidiary-coding-system)
+ coding-system
+ (cond ((eq eol-type 'dos) 'crlf)
+ ((eq eol-type 'unix) 'lf)
+ ((eq eol-type 'mac) 'cr)
+ (t
+ (error "Unknown EOL-TYPE `%s', must be %s"
+ eol-type
+ "`dos', `unix', or `mac'")))))
(t (error "Can't change EOL conversion -- is MULE missing?"))))
(defun tramp-split-string (string pattern)
@@ -7459,11 +7145,9 @@ it does the right thing."
"Specify if query is needed for process when Emacs is exited.
If the second argument flag is non-nil, Emacs will query the user before
exiting if process is running."
- (funcall
(if (fboundp 'set-process-query-on-exit-flag)
- (symbol-function 'set-process-query-on-exit-flag)
- (symbol-function 'process-kill-without-query))
- process flag))
+ (funcall (symbol-function 'set-process-query-on-exit-flag) process flag)
+ (funcall (symbol-function 'process-kill-without-query) process flag)))
;; ------------------------------------------------------------
@@ -7510,29 +7194,6 @@ Only works for Bourne-like shells."
t t result)))
result))))
-;; ;; EFS hooks itself into the file name handling stuff in more places
-;; ;; than just `file-name-handler-alist'. The following tells EFS to stay
-;; ;; away from tramp.el file names.
-;; ;;
-;; ;; This is needed because EFS installs (efs-dired-before-readin) into
-;; ;; 'dired-before-readin-hook'. This prevents EFS from opening an FTP
-;; ;; connection to help it's dired process. Not that I have any real
-;; ;; idea *why* this is helpful to dired.
-;; ;;
-;; ;; Anyway, this advice fixes the problem (with a sledgehammer :)
-;; ;;
-;; ;; Daniel Pittman <daniel@danann.net>
-;; ;;
-;; ;; CCC: when the other defadvice calls have disappeared, make sure
-;; ;; not to call defadvice unless it's necessary. How do we find out whether
-;; ;; it is necessary? (featurep 'efs) is surely the wrong way --
-;; ;; EFS might nicht be loaded yet.
-;; (defadvice efs-ftp-path (around dont-match-tramp-localname activate protect)
-;; "Cause efs-ftp-path to fail when the path is a TRAMP localname."
-;; (if (tramp-tramp-file-p (ad-get-arg 0))
-;; nil
-;; ad-do-it))
-
;; We currently (sometimes) use "[" and "]" in the filename format.
;; This means that Emacs wants to expand wildcards if
;; `find-file-wildcards' is non-nil, and then barfs because no
@@ -7543,245 +7204,22 @@ Only works for Bourne-like shells."
;; CCC: This check is now also really awful; we should search all
;; of the filename format, not just the prefix.
(when (string-match "\\[" tramp-prefix-format)
- (defadvice file-expand-wildcards (around tramp-fix activate)
+ (defadvice file-expand-wildcards
+ (around tramp-advice-file-expand-wildcards activate)
(let ((name (ad-get-arg 0)))
(if (tramp-tramp-file-p name)
;; If it's a Tramp file, dissect it and look if wildcards
;; need to be expanded at all.
- (let ((v (tramp-dissect-file-name name)))
- (if (string-match "[[*?]" (tramp-file-name-localname v))
- (let ((res ad-do-it))
- (setq ad-return-value (or res (list name))))
- (setq ad-return-value (list name))))
+ (if (string-match
+ "[[*?]"
+ (tramp-file-name-localname (tramp-dissect-file-name name)))
+ (setq ad-return-value (or ad-do-it (list name)))
+ (setq ad-return-value (list name)))
;; If it is not a Tramp file, just run the original function.
- (let ((res ad-do-it))
- (setq ad-return-value (or res (list name)))))))
+ (setq ad-return-value (or ad-do-it (list name))))))
(add-hook 'tramp-unload-hook
'(lambda () (ad-unadvise 'file-expand-wildcards))))
-;; Tramp version is useful in a number of situations.
-
-(defun tramp-version (arg)
- "Print version number of tramp.el in minibuffer or current buffer."
- (interactive "P")
- (if arg (insert tramp-version) (message tramp-version)))
-
-;; Make the `reporter` functionality available for making bug reports about
-;; the package. A most useful piece of code.
-
-(unless (fboundp 'reporter-submit-bug-report)
- (autoload 'reporter-submit-bug-report "reporter"))
-
-(defun tramp-bug ()
- "Submit a bug report to the TRAMP developers."
- (interactive)
- (require 'reporter)
- (catch 'dont-send
- (let ((reporter-prompt-for-summary-p t))
- (reporter-submit-bug-report
- tramp-bug-report-address ; to-address
- (format "tramp (%s)" tramp-version) ; package name and version
- (delq nil
- `(;; Current state
- tramp-ls-command
- tramp-test-groks-nt
- tramp-file-exists-command
- tramp-current-multi-method
- tramp-current-method
- tramp-current-user
- tramp-current-host
-
- ;; System defaults
- tramp-auto-save-directory ; vars to dump
- tramp-default-method
- tramp-rsh-end-of-line
- tramp-default-password-end-of-line
- tramp-remote-path
- tramp-login-prompt-regexp
- ;; Mask non-7bit characters
- (tramp-password-prompt-regexp . tramp-reporter-dump-variable)
- tramp-wrong-passwd-regexp
- tramp-yesno-prompt-regexp
- tramp-yn-prompt-regexp
- tramp-terminal-prompt-regexp
- tramp-temp-name-prefix
- tramp-file-name-structure
- tramp-file-name-regexp
- tramp-multi-file-name-structure
- tramp-multi-file-name-hop-structure
- tramp-multi-methods
- tramp-multi-connection-function-alist
- tramp-methods
- tramp-end-of-output
- tramp-coding-commands
- tramp-actions-before-shell
- tramp-actions-copy-out-of-band
- tramp-multi-actions
- tramp-terminal-type
- ;; Mask non-7bit characters
- (tramp-shell-prompt-pattern . tramp-reporter-dump-variable)
- tramp-chunksize
- ,(when (boundp 'tramp-backup-directory-alist)
- 'tramp-backup-directory-alist)
- ,(when (boundp 'tramp-bkup-backup-directory-info)
- 'tramp-bkup-backup-directory-info)
-
- ;; Non-tramp variables of interest
- ;; Mask non-7bit characters
- (shell-prompt-pattern . tramp-reporter-dump-variable)
- backup-by-copying
- backup-by-copying-when-linked
- backup-by-copying-when-mismatch
- ,(when (boundp 'backup-by-copying-when-privileged-mismatch)
- 'backup-by-copying-when-privileged-mismatch)
- ,(when (boundp 'password-cache)
- 'password-cache)
- ,(when (boundp 'password-cache-expiry)
- 'password-cache-expiry)
- ,(when (boundp 'backup-directory-alist)
- 'backup-directory-alist)
- ,(when (boundp 'bkup-backup-directory-info)
- 'bkup-backup-directory-info)
- file-name-handler-alist))
-
- 'tramp-load-report-modules ; pre-hook
- 'tramp-append-tramp-buffers ; post-hook
- "\
-Enter your bug report in this message, including as much detail as you
-possibly can about the problem, what you did to cause it and what the
-local and remote machines are.
-
-If you can give a simple set of instructions to make this bug happen
-reliably, please include those. Thank you for helping kill bugs in
-TRAMP.
-
-Another useful thing to do is to put (setq tramp-debug-buffer t) in
-the ~/.emacs file and to repeat the bug. Then, include the contents
-of the *tramp/foo* buffer and the *debug tramp/foo* buffer in your bug
-report.
-
---bug report follows this line--
-"))))
-
-(defun tramp-reporter-dump-variable (varsym mailbuf)
- "Pretty-print the value of the variable in symbol VARSYM.
-Used for non-7bit chars in strings."
- (let* ((reporter-eval-buffer (symbol-value 'reporter-eval-buffer))
- (val (with-current-buffer reporter-eval-buffer
- (symbol-value varsym))))
-
- ;; There are characters to be masked.
- (when (and (boundp 'mm-7bit-chars)
- (string-match
- (concat "[^" (symbol-value 'mm-7bit-chars) "]") val))
- (with-current-buffer reporter-eval-buffer
- (set varsym (concat "(base64-decode-string \""
- (base64-encode-string val)
- "\")"))))
-
- ;; Dump variable.
- (funcall (symbol-function 'reporter-dump-variable) varsym mailbuf)
-
- ;; Remove string quotation.
- (forward-line -1)
- (when (looking-at
- (concat "\\(^.*\\)" "\"" ;; \1 "
- "\\((base64-decode-string \\)" "\\\\" ;; \2 \
- "\\(\".*\\)" "\\\\" ;; \3 \
- "\\(\")\\)" "\"$")) ;; \4 "
- (replace-match "\\1\\2\\3\\4")
- (beginning-of-line)
- (insert " ;; variable encoded due to non-printable characters\n"))
- (forward-line 1)
-
- ;; Reset VARSYM to old value.
- (with-current-buffer reporter-eval-buffer
- (set varsym val))))
-
-(defun tramp-load-report-modules ()
- "Load needed modules for reporting."
-
- ;; We load message.el and mml.el from Gnus.
- (if (featurep 'xemacs)
- (progn
- (load "message" 'noerror)
- (load "mml" 'noerror))
- (require 'message nil 'noerror)
- (require 'mml nil 'noerror))
- (when (functionp 'message-mode)
- (funcall (symbol-function 'message-mode)))
- (when (functionp 'mml-mode)
- (funcall (symbol-function 'mml-mode) t)))
-
-(defun tramp-append-tramp-buffers ()
- "Append Tramp buffers into the bug report."
-
- (when (and
- (eq major-mode 'message-mode)
- (boundp 'mml-mode)
- (symbol-value 'mml-mode))
-
- (let* ((tramp-buf-regexp "\\*\\(debug \\)?tramp/")
- (buffer-list
- (delq nil
- (mapcar '(lambda (b)
- (when (string-match tramp-buf-regexp (buffer-name b)) b))
- (buffer-list))))
- (curbuf (current-buffer)))
-
- ;; There is at least one Tramp buffer.
- (when buffer-list
- (switch-to-buffer (list-buffers-noselect nil))
- (delete-other-windows)
- (setq buffer-read-only nil)
- (goto-char (point-min))
- (while (not (eobp))
- (if (re-search-forward tramp-buf-regexp (tramp-point-at-eol) t)
- (forward-line 1)
- (forward-line 0)
- (let ((start (point)))
- (forward-line 1)
- (kill-region start (point)))))
- (insert "
-The buffer(s) above will be appended to this message. If you don't want
-to append a buffer because it contains sensitive data, or because the buffer
-is too large, you should delete the respective buffer. The buffer(s) will
-contain user and host names. Passwords will never be included there.")
-
- (when (and tramp-debug-buffer (> tramp-verbose 9))
- (insert "\n\n")
- (let ((start (point)))
- (insert "\
-Please note that you have set `tramp-verbose' to a value greater than 9.
-Therefore, the contents of files might be included in the debug buffer(s).")
- (add-text-properties start (point) (list 'face 'italic))))
-
- (set-buffer-modified-p nil)
- (setq buffer-read-only t)
- (goto-char (point-min))
-
- (if (y-or-n-p "Do you want to append the buffer(s)? ")
- ;; OK, let's send. First we delete the buffer list.
- (progn
- (kill-buffer nil)
- (switch-to-buffer curbuf)
- (goto-char (point-max))
- (insert "\n\n")
- (dolist (buffer buffer-list)
- (funcall (symbol-function 'mml-insert-empty-tag)
- 'part 'type "text/plain" 'encoding "base64"
- 'disposition "attachment" 'buffer (buffer-name buffer)
- 'description (buffer-name buffer)))
- (set-buffer-modified-p nil))
-
- ;; Don't send. Delete the message buffer.
- (set-buffer curbuf)
- (set-buffer-modified-p nil)
- (kill-buffer nil)
- (throw 'dont-send nil))))))
-
-(defalias 'tramp-submit-bug 'tramp-bug)
-
;; Checklist for `tramp-unload-hook'
;; - Unload all `tramp-*' packages
;; - Reset `file-name-handler-alist'
@@ -7797,25 +7235,13 @@ Therefore, the contents of files might be included in the debug buffer(s).")
;; ange-ftp settings must be enabled.
(when (functionp 'tramp-ftp-enable-ange-ftp)
(funcall (symbol-function 'tramp-ftp-enable-ange-ftp)))
- ;; `tramp-util' unloads also `tramp'.
- (condition-case nil ;; maybe its not loaded yet.
- (unload-feature (if (featurep 'tramp-util) 'tramp-util 'tramp) 'force)
+ ;; Maybe its not loaded yet.
+ (condition-case nil
+ (unload-feature 'tramp 'force)
(error nil)))
(provide 'tramp)
-;; Make sure that we get integration with the VC package.
-;; When it is loaded, we need to pull in the integration module.
-;; This must come after (provide 'tramp) because tramp-vc.el
-;; requires tramp.
-(eval-after-load "vc"
- '(progn
- (require 'tramp-vc)
- (add-hook 'tramp-unload-hook
- '(lambda ()
- (when (featurep 'tramp-vc)
- (unload-feature 'tramp-vc 'force))))))
-
;;; TODO:
;; * Allow putting passwords in the filename.
@@ -7826,24 +7252,13 @@ Therefore, the contents of files might be included in the debug buffer(s).")
;; Another approach is to read a netrc file like ~/.authinfo
;; from Gnus.
;; * Handle nonlocal exits such as C-g.
+;; * But it would probably be better to use with-local-quit at the
+;; place where it's actually needed: around any potentially
+;; indefinitely blocking piece of code. In this case it would be
+;; within Tramp around one of its calls to accept-process-output (or
+;; around one of the loops that calls accept-process-output)
+;; (Stefan Monnier).
;; * Autodetect if remote `ls' groks the "--dired" switch.
-;; * Add fallback for inline encodings. This should be used
-;; if the remote end doesn't support mimencode or a similar program.
-;; For reading files from the remote host, we can just parse the output
-;; of `od -b'. For writing files to the remote host, we construct
-;; a shell program which contains only "safe" ascii characters
-;; and which writes the right bytes to the file. We can use printf(1)
-;; or "echo -e" or the printf function in awk and use octal escapes
-;; for the "dangerous" characters. The null byte might be a problem.
-;; On some systems, the octal escape doesn't work. So we try the following
-;; two commands to write a null byte:
-;; dd if=/dev/zero bs=1 count=1
-;; echo | tr '\n' '\000'
-;; * Separate local `tramp-coding-commands' from remote ones. Connect
-;; the two via a format which can be `uu' or `b64'. Then we can search
-;; for the right local commands and the right remote commands separately.
-;; * Cooperate with PCL-CVS. It uses start-process, which doesn't
-;; work for remote files.
;; * Rewrite `tramp-shell-quote-argument' to abstain from using
;; `shell-quote-argument'.
;; * Completion gets confused when you leave out the method name.
@@ -7861,68 +7276,61 @@ Therefore, the contents of files might be included in the debug buffer(s).")
;; * Don't use globbing for directories with many files, as this is
;; likely to produce long command lines, and some shells choke on
;; long command lines.
-;; * Find out about the new auto-save mechanism in Emacs 21 and
-;; do the right thing.
;; * `vc-directory' does not work. It never displays any files, even
;; if it does show files when run locally.
;; * Allow correction of passwords, if the remote end allows this.
;; (Mark Hershberger)
;; * How to deal with MULE in `insert-file-contents' and `write-region'?
-;; * Do asynchronous `shell-command's.
;; * Grok `append' parameter for `write-region'.
;; * Test remote ksh or bash for tilde expansion in `tramp-find-shell'?
;; * abbreviate-file-name
-;; * grok ~ in tramp-remote-path (Henrik Holm <henrikh@tele.ntnu.no>)
-;; * Also allow to omit user names when doing multi-hop. Not sure yet
-;; what the user names should default to, though.
;; * better error checking. At least whenever we see something
;; strange when doing zerop, we should kill the process and start
;; again. (Greg Stark)
-;; * Add caching for filename completion. (Greg Stark)
-;; Of course, this has issues with usability (stale cache bites)
-;; -- <daniel@danann.net>
;; * Provide a local cache of old versions of remote files for the rsync
;; transfer method to use. (Greg Stark)
;; * Remove unneeded parameters from methods.
;; * Invoke rsync once for copying a whole directory hierarchy.
-;; (Francesco Potort,Al(B)
-;; * Should we set PATH ourselves or should we rely on the remote end
-;; to do it?
-;; * Make it work for XEmacs 20, which is missing `with-timeout'.
+;; (Francesco Potortì)
;; * Make it work for different encodings, and for different file name
;; encodings, too. (Daniel Pittman)
-;; * Change applicable functions to pass a struct tramp-file-name rather
-;; than the individual items MULTI-METHOD, METHOD, USER, HOST, LOCALNAME.
-;; * Implement asynchronous shell commands.
-;; * Clean up unused *tramp/foo* buffers after a while. (Pete Forman)
;; * Progress reports while copying files. (Michael Kifer)
-;; * `Smart' connection method that uses inline for small and out of
-;; band for large files. (Michael Kifer)
;; * Don't search for perl5 and perl. Instead, only search for perl and
;; then look if it's the right version (with `perl -v').
;; * When editing a remote CVS controlled file as a different user, VC
;; gets confused about the file locking status. Try to find out why
;; the workaround doesn't work.
-;; * Change `copy-file' to grok the case where the filename handler
-;; for the source and the target file are different. Right now,
-;; it looks at the source file and then calls that handler, if
-;; there is one. But since ange-ftp, for instance, does not know
-;; about Tramp, it does not do the right thing if the target file
-;; name is a Tramp name.
;; * Username and hostname completion.
-;; ** If `partial-completion-mode' isn't loaded, "/foo:bla" tries to
-;; connect to host "blabla" already if that host is unique. No idea
-;; how to suppress. Maybe not an essential problem.
;; ** Try to avoid usage of `last-input-event' in `tramp-completion-mode-p'.
-;; ** Extend `tramp-get-completion-su' for NIS and shadow passwords.
;; ** Unify `tramp-parse-{rhosts,shosts,sconfig,hosts,passwd,netrc}'.
;; Code is nearly identical.
-;; ** Decide whiche files to take for searching user/host names depending on
-;; operating system (windows-nt) in `tramp-completion-function-alist'.
-;; ** Enhance variables for debug.
-;; ** Implement "/multi:" completion.
-;; ** Add a learning mode for completion. Make results persistent.
;; * Allow out-of-band methods as _last_ multi-hop.
+;; * WIBNI if we had a command "trampclient"? If I was editing in
+;; some shell with root priviledges, it would be nice if I could
+;; just call
+;; trampclient filename.c
+;; as an editor, and the _current_ shell would connect to an Emacs
+;; server and would be used in an existing non-priviledged Emacs
+;; session for doing the editing in question.
+;; That way, I need not tell Emacs my password again and be afraid
+;; that it makes it into core dumps or other ugly stuff (I had Emacs
+;; once display a just typed password in the context of a keyboard
+;; sequence prompt for a question immediately following in a shell
+;; script run within Emacs -- nasty).
+;; And if I have some ssh session running to a different computer,
+;; having the possibility of passing a local file there to a local
+;; Emacs session (in case I can arrange for a connection back) would
+;; be nice.
+;; Likely the corresponding Tramp server should not allow the
+;; equivalent of the emacsclient -eval option in order to make this
+;; reasonably unproblematic. And maybe trampclient should have some
+;; way of passing credentials, like by using an SSL socket or
+;; something. (David Kastrup)
+;; * Could Tramp reasonably look for a prompt after ^M rather than
+;; only after ^J ? (Stefan Monnier)
+;; * Reconnect directly to a compliant shell without first going
+;; through the user's default shell. (Pete Forman)
+;; * Make `tramp-default-user' obsolete.
;; Functions for file-name-handler-alist:
;; diff-latest-backup-file -- in diff.el
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 5734b5c9138..58ae73d8cd3 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -1,10 +1,10 @@
-;;; -*- mode: Emacs-Lisp; coding: iso-2022-7bit; -*-
;;; trampver.el --- Transparent Remote Access, Multiple Protocol
+;;; -*- mode: Emacs-Lisp; coding: utf-8; -*-
;;; lisp/trampver.el. Generated from trampver.el.in by configure.
;; Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
-;; Author: Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+;; Author: Kai Großjohann <kai.grossjohann@gmx.net>
;; Keywords: comm, processes
;; This file is part of GNU Emacs.
@@ -20,22 +20,26 @@
;; 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.
+;; along with GNU Emacs; see the file COPYING. If not, see
+;; <http://www.gnu.org/licenses/>.
;;; Code:
;; In the Tramp CVS repository, the version numer and the bug report address
;; are auto-frobbed from configure.ac, so you should edit that file and run
-;; "autoconf && ./configure" to change them.
+;; "autoconf && ./configure" to change them. (X)Emacs version check is defined
+;; in macro AC_EMACS_INFO of aclocal.m4; should be changed only there.
-(defconst tramp-version "2.0.57-pre"
+(defconst tramp-version "2.1.12-pre"
"This version of Tramp.")
(defconst tramp-bug-report-address "tramp-devel@gnu.org"
"Email address to send bug reports to.")
+;; Check for (X)Emacs version.
+(let ((x (if (or (< emacs-major-version 21) (and (featurep 'xemacs) (< emacs-minor-version 4))) (format "Tramp 2.1.12-pre is not fit for %s" (when (string-match "^.*$" (emacs-version)) (match-string 0 (emacs-version)))) "ok")))
+ (unless (string-match "\\`ok\\'" x) (error x)))
+
(provide 'trampver)
;;; arch-tag: 443576ca-f8f1-4bb1-addc-5c70861e93b1
diff --git a/lisp/net/webjump.el b/lisp/net/webjump.el
index 77aa7609511..fea28579b4d 100644
--- a/lisp/net/webjump.el
+++ b/lisp/net/webjump.el
@@ -229,7 +229,6 @@
("Yahoo" .
[simple-query "www.yahoo.com" "search.yahoo.com/search?p=" ""])
("Yahoo: Reference" . "www.yahoo.com/Reference/")
-
("Wikipedia" .
[simple-query "wikipedia.org" "wikipedia.org/wiki/" ""])
@@ -452,14 +451,12 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke
(defun webjump-url-encode (str)
(mapconcat '(lambda (c)
- (cond ((= c 32) "+")
- ((or (and (>= c ?a) (<= c ?z))
- (and (>= c ?A) (<= c ?Z))
- (and (>= c ?0) (<= c ?9)))
- (char-to-string c))
- (t (upcase (format "%%%02x" c)))))
- str
- ""))
+ (let ((s (char-to-string c)))
+ (cond ((string= s " ") "+")
+ ((string-match "[a-zA-Z_.-/]" s) s)
+ (t (upcase (format "%%%02x" c))))))
+ (encode-coding-string str 'utf-8)
+ ""))
(defun webjump-url-fix (url)
(if (webjump-null-or-blank-string-p url)
diff --git a/lisp/newcomment.el b/lisp/newcomment.el
index 9c6be255023..2de4fa025fd 100644
--- a/lisp/newcomment.el
+++ b/lisp/newcomment.el
@@ -182,13 +182,16 @@ by replacing its first character with a space.")
(defvar comment-add 0
"How many more comment chars should be inserted by `comment-region'.
This determines the default value of the numeric argument of `comment-region'.
+The `plain' comment style doubles this value.
+
This should generally stay 0, except for a few modes like Lisp where
-it can be convenient to set it to 1 so that regions are commented with
-two semi-colons.")
+it is 1 so that regions are commented with two or three semi-colons.")
(defconst comment-styles
'((plain . (nil nil nil nil))
(indent . (nil nil nil t))
+ (indent-or-triple
+ . (nil nil nil multi-char))
(aligned . (nil t nil t))
(multi-line . (t nil nil t))
(extra-line . (t nil t t))
@@ -201,10 +204,12 @@ ALIGN specifies that the `comment-end' markers should be aligned.
EXTRA specifies that an extra line should be used before and after the
region to comment (to put the `comment-end' and `comment-start').
INDENT specifies that the `comment-start' markers should not be put at the
- left margin but at the current indentation of the region to comment.")
+ left margin but at the current indentation of the region to comment.
+If INDENT is `multi-char', that means indent multi-character
+ comment starters, but not one-character comment starters.")
;;;###autoload
-(defcustom comment-style 'plain
+(defcustom comment-style 'indent-or-triple
"Style to be used for `comment-region'.
See `comment-styles' for a list of available styles."
:type (if (boundp 'comment-styles)
@@ -492,16 +497,24 @@ Point is assumed to be just at the end of a comment."
(goto-char (point-min))
(re-search-forward (concat comment-end-skip "\\'") nil t))
(goto-char (match-beginning 0)))
- ;; comment-end-skip not found. Maybe we're at EOB which implicitly
- ;; closes the comment.
- ((eobp) (skip-syntax-backward " "))
- (t
- ;; else comment-end-skip was not found probably because it was not
- ;; set right. Since \\s> should catch the single-char case, we'll
- ;; blindly assume we're at the end of a two-char comment-end.
+ ;; comment-end-skip not found probably because it was not set
+ ;; right. Since \\s> should catch the single-char case, let's
+ ;; check that we're looking at a two-char comment ender.
+ ((not (or (<= (- (point-max) (line-beginning-position)) 1)
+ (zerop (logand (car (syntax-after (- (point) 1)))
+ ;; Here we take advantage of the fact that
+ ;; the syntax class " " is encoded to 0,
+ ;; so " 4" gives us just the 4 bit.
+ (car (string-to-syntax " 4"))))
+ (zerop (logand (car (syntax-after (- (point) 2)))
+ (car (string-to-syntax " 3"))))))
(backward-char 2)
(skip-chars-backward (string (char-after)))
- (skip-syntax-backward " ")))))
+ (skip-syntax-backward " "))
+ ;; No clue what's going on: maybe we're really not right after the
+ ;; end of a comment. Maybe we're at the "end" because of EOB rather
+ ;; than because of a marker.
+ (t (skip-syntax-backward " ")))))
;;;;
;;;; Commands
@@ -586,19 +599,20 @@ If CONTINUE is non-nil, use the `comment-continue' markers if any."
(let* ((eolpos (line-end-position))
(begpos (comment-search-forward eolpos t))
cpos indent)
- ;; An existing comment?
- (if begpos
- (progn
- (if (and (not (looking-at "[\t\n ]"))
- (looking-at comment-end-skip))
- ;; The comment is empty and we have skipped all its space
- ;; and landed right before the comment-ender:
- ;; Go back to the middle of the space.
- (forward-char (/ (skip-chars-backward " \t") -2)))
- (setq cpos (point-marker)))
+ (if (and comment-insert-comment-function (not begpos))
+ ;; If no comment and c-i-c-f is set, let it do everything.
+ (funcall comment-insert-comment-function)
+ ;; An existing comment?
+ (if begpos
+ (progn
+ (if (and (not (looking-at "[\t\n ]"))
+ (looking-at comment-end-skip))
+ ;; The comment is empty and we have skipped all its space
+ ;; and landed right before the comment-ender:
+ ;; Go back to the middle of the space.
+ (forward-char (/ (skip-chars-backward " \t") -2)))
+ (setq cpos (point-marker)))
;; If none, insert one.
- (if comment-insert-comment-function
- (funcall comment-insert-comment-function)
(save-excursion
;; Some `comment-indent-function's insist on not moving
;; comments that are in column 0, so we first go to the
@@ -611,32 +625,32 @@ If CONTINUE is non-nil, use the `comment-continue' markers if any."
(setq begpos (point))
(insert starter)
(setq cpos (point-marker))
- (insert ender))))
- (goto-char begpos)
- ;; Compute desired indent.
- (setq indent (save-excursion (funcall comment-indent-function)))
- ;; If `indent' is nil and there's code before the comment, we can't
- ;; use `indent-according-to-mode', so we default to comment-column.
- (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
- (setq indent comment-column))
- (if (not indent)
- ;; comment-indent-function refuses: delegate to line-indent.
- (indent-according-to-mode)
- ;; If the comment is at the right of code, adjust the indentation.
- (unless (save-excursion (skip-chars-backward " \t") (bolp))
- (setq indent (comment-choose-indent indent)))
- ;; Update INDENT to leave at least one space
- ;; after other nonwhite text on the line.
- (save-excursion
- (skip-chars-backward " \t")
- (unless (bolp)
- (setq indent (max indent (1+ (current-column))))))
- ;; If that's different from comment's current position, change it.
- (unless (= (current-column) indent)
- (delete-region (point) (progn (skip-chars-backward " \t") (point)))
- (indent-to indent)))
- (goto-char cpos)
- (set-marker cpos nil))))
+ (insert ender)))
+ (goto-char begpos)
+ ;; Compute desired indent.
+ (setq indent (save-excursion (funcall comment-indent-function)))
+ ;; If `indent' is nil and there's code before the comment, we can't
+ ;; use `indent-according-to-mode', so we default to comment-column.
+ (unless (or indent (save-excursion (skip-chars-backward " \t") (bolp)))
+ (setq indent comment-column))
+ (if (not indent)
+ ;; comment-indent-function refuses: delegate to line-indent.
+ (indent-according-to-mode)
+ ;; If the comment is at the right of code, adjust the indentation.
+ (unless (save-excursion (skip-chars-backward " \t") (bolp))
+ (setq indent (comment-choose-indent indent)))
+ ;; Update INDENT to leave at least one space
+ ;; after other nonwhite text on the line.
+ (save-excursion
+ (skip-chars-backward " \t")
+ (unless (bolp)
+ (setq indent (max indent (1+ (current-column))))))
+ ;; If that's different from comment's current position, change it.
+ (unless (= (current-column) indent)
+ (delete-region (point) (progn (skip-chars-backward " \t") (point)))
+ (indent-to indent)))
+ (goto-char cpos)
+ (set-marker cpos nil)))))
;;;###autoload
(defun comment-set-column (arg)
@@ -931,9 +945,14 @@ indentation to be kept as it was before narrowing."
(delete-char n)
(setq ,bindent (- ,bindent n)))))))))))
+;; Compute the number of extra comment starter characters
+;; (extra semicolons in Lisp mode, extra stars in C mode, etc.)
+;; If ARG is non-nil, just follow ARG.
+;; If the comment-starter is multi-char, just follow ARG.
+;; Otherwise obey comment-add, and double it if EXTRA is non-nil.
(defun comment-add (arg)
(if (and (null arg) (= (string-match "[ \t]*\\'" comment-start) 1))
- comment-add
+ (* comment-add 1)
(1- (prefix-numeric-value arg))))
(defun comment-region-internal (beg end cs ce
@@ -1073,21 +1092,33 @@ The strings used as comment starts are built from
((consp arg) (uncomment-region beg end))
((< numarg 0) (uncomment-region beg end (- numarg)))
(t
- (setq numarg (comment-add arg))
- (comment-region-internal
- beg end
- (let ((s (comment-padright comment-start numarg)))
- (if (string-match comment-start-skip s) s
- (comment-padright comment-start)))
- (let ((s (comment-padleft comment-end numarg)))
- (and s (if (string-match comment-end-skip s) s
- (comment-padright comment-end))))
- (if multi (comment-padright comment-continue numarg))
- (if multi
- (comment-padleft (comment-string-reverse comment-continue) numarg))
- block
- lines
- (nth 3 style))))))
+ (let ((multi-char (/= (string-match "[ \t]*\\'" comment-start) 1))
+ indent)
+ (if (eq (nth 3 style) 'multi-char)
+ (setq indent multi-char)
+ (setq indent (nth 3 style)))
+
+ ;; In Lisp and similar modes with one-character comment starters,
+ ;; double it by default if `comment-add' says so.
+ ;; If it isn't indented, triple it.
+ (if (and (null arg) (not multi-char))
+ (setq numarg (* comment-add (if indent 1 2)))
+ (setq numarg (1- (prefix-numeric-value arg))))
+
+ (comment-region-internal
+ beg end
+ (let ((s (comment-padright comment-start numarg)))
+ (if (string-match comment-start-skip s) s
+ (comment-padright comment-start)))
+ (let ((s (comment-padleft comment-end numarg)))
+ (and s (if (string-match comment-end-skip s) s
+ (comment-padright comment-end))))
+ (if multi (comment-padright comment-continue numarg))
+ (if multi
+ (comment-padleft (comment-string-reverse comment-continue) numarg))
+ block
+ lines
+ indent))))))
;;;###autoload
(defun comment-box (beg end &optional arg)
@@ -1121,7 +1152,8 @@ is passed on to the respective function."
If the region is active and `transient-mark-mode' is on, call
`comment-region' (unless it only consists of comments, in which
case it calls `uncomment-region').
-Else, if the current line is empty, insert a comment and indent it.
+Else, if the current line is empty, call `comment-insert-comment-function'
+if it is defined, otherwise insert a comment and indent it.
Else if a prefix ARG is specified, call `comment-kill'.
Else, call `comment-indent'.
You can configure `comment-style' to change the way regions are commented."
@@ -1133,15 +1165,19 @@ You can configure `comment-style' to change the way regions are commented."
;; FIXME: If there's no comment to kill on this line and ARG is
;; specified, calling comment-kill is not very clever.
(if arg (comment-kill (and (integerp arg) arg)) (comment-indent))
- (let ((add (comment-add arg)))
- ;; Some modes insist on keeping column 0 comment in column 0
- ;; so we need to move away from it before inserting the comment.
- (indent-according-to-mode)
- (insert (comment-padright comment-start add))
- (save-excursion
- (unless (string= "" comment-end)
- (insert (comment-padleft comment-end add)))
- (indent-according-to-mode))))))
+ ;; Inserting a comment on a blank line. comment-indent calls
+ ;; c-i-c-f if needed in the non-blank case.
+ (if comment-insert-comment-function
+ (funcall comment-insert-comment-function)
+ (let ((add (comment-add arg)))
+ ;; Some modes insist on keeping column 0 comment in column 0
+ ;; so we need to move away from it before inserting the comment.
+ (indent-according-to-mode)
+ (insert (comment-padright comment-start add))
+ (save-excursion
+ (unless (string= "" comment-end)
+ (insert (comment-padleft comment-end add)))
+ (indent-according-to-mode)))))))
;;;###autoload
(defcustom comment-auto-fill-only-comments nil
diff --git a/lisp/novice.el b/lisp/novice.el
index c547b4744b5..bbb7fa6f977 100644
--- a/lisp/novice.el
+++ b/lisp/novice.el
@@ -88,8 +88,9 @@ n to cancel--don't try the command, and it remains disabled.
SPC to try the command just this once, but leave it disabled.
! to try it, and enable all disabled commands for this session only.")
(save-excursion
- (set-buffer standard-output)
- (help-mode)))
+ (set-buffer standard-output)
+ (help-mode)))
+ (fit-window-to-buffer (get-buffer-window "*Disabled Command*"))
(message "Type y, n, ! or SPC (the space bar): ")
(let ((cursor-in-echo-area t))
(while (progn (setq char (read-event))
diff --git a/lisp/obsolete/fast-lock.el b/lisp/obsolete/fast-lock.el
index 569771143e3..e2fb338242f 100644
--- a/lisp/obsolete/fast-lock.el
+++ b/lisp/obsolete/fast-lock.el
@@ -337,7 +337,7 @@ If a number, only buffers greater than this size have processing messages."
:group 'fast-lock)
(defvar fast-lock-save-faces
- (when (save-match-data (string-match "XEmacs" (emacs-version)))
+ (when (featurep 'xemacs)
;; XEmacs uses extents for everything, so we have to pick the right ones.
font-lock-face-list)
"Faces that will be saved in a Font Lock cache file.
@@ -768,7 +768,7 @@ See `fast-lock-get-face-properties'."
;; Functions for XEmacs:
-(when (save-match-data (string-match "XEmacs" (emacs-version)))
+(when (featurep 'xemacs)
;;
;; It would be better to use XEmacs' `map-extents' over extents with a
;; `font-lock' property, but `face' properties are on different extents.
diff --git a/lisp/obsolete/hilit19.el b/lisp/obsolete/hilit19.el
index c29d4fad3dd..be0b5d622a2 100644
--- a/lisp/obsolete/hilit19.el
+++ b/lisp/obsolete/hilit19.el
@@ -665,9 +665,9 @@ The optional 5th arg, PROP is a property to set instead of 'hilit."
(or quietly hilit-quietly (message "Unhighlighting"))
(let ((lstart 0))
(while (and start (> start lstart) (< start end))
- (mapcar (function (lambda (ovr)
- (and (overlay-get ovr 'hilit) (delete-overlay ovr))))
- (overlays-at start))
+ (mapc (function (lambda (ovr)
+ (and (overlay-get ovr 'hilit) (delete-overlay ovr))))
+ (overlays-at start))
(setq lstart start start (next-overlay-change start))))
(or quietly hilit-quietly (message "Done unhighlighting")))
@@ -975,24 +975,24 @@ the entire buffer is forced."
(progn
;; BUFFER highlights...
- (mapcar (lambda (hook)
- (if hilit-mode
- (add-hook hook 'hilit-rehighlight-buffer-quietly)
- (remove-hook hook 'hilit-rehighlight-buffer-quietly)))
- '(
- Info-selection-hook
-
- ;; runs too early vm-summary-mode-hooks
- vm-summary-pointer-hook
- vm-preview-message-hook
- vm-show-message-hook
-
- rmail-show-message-hook
- mail-setup-hook
- mh-show-mode-hook
-
- dired-after-readin-hook
- ))
+ (mapc (lambda (hook)
+ (if hilit-mode
+ (add-hook hook 'hilit-rehighlight-buffer-quietly)
+ (remove-hook hook 'hilit-rehighlight-buffer-quietly)))
+ '(
+ Info-selection-hook
+
+ ;; runs too early vm-summary-mode-hooks
+ vm-summary-pointer-hook
+ vm-preview-message-hook
+ vm-show-message-hook
+
+ rmail-show-message-hook
+ mail-setup-hook
+ mh-show-mode-hook
+
+ dired-after-readin-hook
+ ))
)
(error (message "Error loading highlight hooks: %s" c)
(ding) (sit-for 1)))))
@@ -1023,11 +1023,11 @@ See the variable hilit-mode-enable-list.
Takes optional arguments PARSE-FN and CASE-FOLD."
;; change pattern
- (mapcar (function (lambda (p)
- (and (stringp (car p))
- (null (nth 1 p))
- (setcar (cdr p) 0))))
- patterns)
+ (mapc (function (lambda (p)
+ (and (stringp (car p))
+ (null (nth 1 p))
+ (setcar (cdr p) 0))))
+ patterns)
(setq patterns (cons case-fold patterns))
(or (consp modelist) (setq modelist (list modelist)))
diff --git a/lisp/emacs-lisp/lselect.el b/lisp/obsolete/lselect.el
index 54926a3844e..d457f775a03 100644
--- a/lisp/emacs-lisp/lselect.el
+++ b/lisp/obsolete/lselect.el
@@ -238,5 +238,10 @@ the kill ring or the Clipboard."
(provide 'lselect)
+
+;; Local variables:
+;; byte-compile-warnings: (not unresolved)
+;; End:
+
;; arch-tag: 92fa54d4-c5d1-4e9b-ad58-cf1e13930556
;;; lselect.el ends here
diff --git a/lisp/obsolete/mlsupport.el b/lisp/obsolete/mlsupport.el
index d1844cd42ce..2465ea4eabd 100644
--- a/lisp/obsolete/mlsupport.el
+++ b/lisp/obsolete/mlsupport.el
@@ -186,10 +186,10 @@
(newline (ml-prefix-argument)))
(defun ml-next-line ()
- (next-line (ml-prefix-argument)))
+ (forward-line (ml-prefix-argument)))
(defun ml-previous-line ()
- (previous-line (ml-prefix-argument)))
+ (forward-line (- (ml-prefix-argument))))
(defun delete-to-kill-buffer ()
(kill-region (point) (mark)))
diff --git a/lisp/obsolete/sun-curs.el b/lisp/obsolete/sun-curs.el
deleted file mode 100644
index 612102159df..00000000000
--- a/lisp/obsolete/sun-curs.el
+++ /dev/null
@@ -1,234 +0,0 @@
-;;; sun-curs.el --- cursor definitions for Sun windows
-
-;; Copyright (C) 1987, 2001, 2002, 2003, 2004, 2005,
-;; 2006, 2007 Free Software Foundation, Inc.
-
-;; Author: Jeff Peck <peck@sun.com>
-;; Keywords: hardware
-
-;; 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 3, 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:
-
-;;;
-;;; Added some more cursors and moved the hot spots
-;;; Cursor defined by 16 pairs of 16-bit numbers
-;;;
-;;; 9-dec-86 Jeff Peck, Sun Microsystems Inc. <peck@sun.com>
-
-(eval-when-compile (require 'cl))
-
-(defvar *edit-icon*)
-(defvar char)
-;; These are from term/sun-mouse.el
-(defvar *mouse-window*)
-(defvar *mouse-x*)
-(defvar *mouse-y*)
-(defvar menu)
-
-(require 'sun-fns)
-
-(eval-and-compile
- (defvar sc::cursors nil "List of known cursors"))
-
-(defmacro defcursor (name x y string)
- (if (not (memq name sc::cursors))
- (setq sc::cursors (cons name sc::cursors)))
- (list 'defconst name (list 'vector x y string)))
-
-;;; push should be defined in common lisp, but if not use this:
-;(defmacro push (v l)
-; "The ITEM is evaluated and consed onto LIST, a list-valued atom"
-; (list 'setq l (list 'cons v l)))
-
-;;;
-;;; The standard default cursor
-;;;
-(defcursor sc:right-arrow 15 0
- (concat '(0 1 0 3 0 7 0 15 0 31 0 63 0 127 0 15
- 0 27 0 25 0 48 0 48 0 96 0 96 0 192 0 192)))
-
-;;(sc:set-cursor sc:right-arrow)
-
-(defcursor sc:fat-left-arrow 0 8
- (concat '(1 0 3 0 7 0 15 0 31 0 63 255 127 255 255 255
- 255 255 127 255 63 255 31 0 15 0 7 0 3 0 1 0)))
-
-(defcursor sc:box 8 8
- (concat '(15 252 8 4 8 4 8 4 8 4 8 4 8 4 8 4
- 8 132 8 4 8 4 8 4 8 4 8 4 8 4 15 252)))
-
-(defcursor sc:hourglass 8 8
- (concat "\177\376\100\002\040\014\032\070"
- "\017\360\007\340\003\300\001\200"
- "\001\200\002\100\005\040\010\020"
- "\021\210\043\304\107\342\177\376"))
-
-(defun sc:set-cursor (icon)
- "Change the Sun mouse cursor to ICON.
-If ICON is nil, switch to the system default cursor,
-Otherwise, ICON should be a vector or the name of a vector of [x y 32-chars]"
- (interactive "XIcon Name: ")
- (if (symbolp icon) (setq icon (symbol-value icon)))
- (sun-change-cursor-icon icon))
-
-;; This does not make much sense...
-(make-local-variable '*edit-icon*)
-
-(defvar icon-edit nil)
-(make-variable-buffer-local 'icon-edit)
-(or (assq 'icon-edit minor-mode-alist)
- (push '(icon-edit " IconEdit") minor-mode-alist))
-
-(defun sc:edit-cursor (icon)
- "convert icon to rectangle, edit, and repack"
- (interactive "XIcon Name: ")
- (if (not icon) (setq icon (sc::menu-choose-cursor (selected-window) 1 1)))
- (if (symbolp icon) (setq icon (symbol-value icon)))
- (if (get-buffer "icon-edit") (kill-buffer "icon-edit"))
- (switch-to-buffer "icon-edit")
- (local-set-mouse '(text right) 'sc::menu-function)
- (local-set-mouse '(text left) '(sc::pic-ins-at-mouse 32))
- (local-set-mouse '(text middle) '(sc::pic-ins-at-mouse 64))
- (local-set-mouse '(text left middle) 'sc::hotspot)
- (sc::display-icon icon)
- (picture-mode)
- (setq icon-edit t) ; for mode line display
-)
-
-(defun sc::pic-ins-at-mouse (char)
- "Picture insert char at mouse location"
- (mouse-move-point *mouse-window* (min 15 *mouse-x*) (min 15 *mouse-y*))
- (move-to-column (1+ (min 15 (current-column))) t)
- (delete-char -1)
- (insert char)
- (sc::goto-hotspot))
-
-(defmenu sc::menu
- ("Cursor Menu")
- ("Pack & Use" sc::pack-buffer-to-cursor)
- ("Pack to Icon" sc::pack-buffer-to-icon
- (sc::menu-choose-cursor *menu-window* *menu-x* *menu-y*))
- ("New Icon" call-interactively 'sc::make-cursor)
- ("Edit Icon" sc:edit-cursor
- (sc::menu-choose-cursor *menu-window* *menu-x* *menu-y*))
- ("Set Cursor" sc:set-cursor
- (sc::menu-choose-cursor *menu-window* *menu-x* *menu-y*))
- ("Reset Cursor" sc:set-cursor nil)
- ("Help" sc::edit-icon-help-menu)
- ("Quit" sc::quit-edit)
- )
-
-(defun sc::menu-function (window x y)
- (sun-menu-evaluate window (1+ x) y sc::menu))
-
-(defun sc::quit-edit ()
- (interactive)
- (bury-buffer (current-buffer))
- (switch-to-buffer (other-buffer) 'no-record))
-
-(defun sc::make-cursor (symbol)
- (interactive "SIcon Name: ")
- (eval (list 'defcursor symbol 0 0 ""))
- (sc::pack-buffer-to-icon (symbol-value symbol)))
-
-(defmenu sc::edit-icon-help-menu
- ("Simple Icon Editor")
- ("Left => CLEAR")
- ("Middle => SET")
- ("L & M => HOTSPOT")
- ("Right => MENU"))
-
-(defun sc::edit-icon-help ()
- (message "Left=> CLEAR Middle=> SET Left+Middle=> HOTSPOT Right=> MENU"))
-
-(defun sc::pack-buffer-to-cursor ()
- (sc::pack-buffer-to-icon *edit-icon*)
- (sc:set-cursor *edit-icon*))
-
-(defun sc::menu-choose-cursor (window x y)
- "Presents a menu of cursor names, and returns one or nil"
- (let ((curs sc::cursors)
- (items))
- (while curs
- (push (sc::menu-item-for-cursor (car curs)) items)
- (setq curs (cdr curs)))
- (push (list "Choose Cursor") items)
- (setq menu (menu-create items))
- (sun-menu-evaluate window x y menu)))
-
-(defun sc::menu-item-for-cursor (cursor)
- "apply function to selected cursor"
- (list (symbol-name cursor) 'quote cursor))
-
-(defun sc::hotspot (window x y)
- (aset *edit-icon* 0 x)
- (aset *edit-icon* 1 y)
- (sc::goto-hotspot))
-
-(defun sc::goto-hotspot ()
- (goto-line (1+ (aref *edit-icon* 1)))
- (move-to-column (aref *edit-icon* 0)))
-
-(defun sc::display-icon (icon)
- (setq *edit-icon* (copy-sequence icon))
- (let ((string (aref *edit-icon* 2))
- (index 0))
- (while (< index 32)
- (let ((char (aref string index))
- (bit 128))
- (while (> bit 0)
- (insert (sc::char-at-bit char bit))
- (setq bit (lsh bit -1))))
- (if (eq 1 (% index 2)) (newline))
- (setq index (1+ index))))
- (sc::goto-hotspot))
-
-(defun sc::char-at-bit (char bit)
- (if (> (logand char bit) 0) "@" " "))
-
-(defun sc::pack-buffer-to-icon (icon)
- "Pack 16 x 16 field into icon string"
- (goto-char (point-min))
- (aset icon 0 (aref *edit-icon* 0))
- (aset icon 1 (aref *edit-icon* 1))
- (aset icon 2 (mapconcat 'sc::pack-one-line "1234567890123456" ""))
- (sc::goto-hotspot)
- )
-
-(defun sc::pack-one-line (dummy)
- (let (char chr1 chr2)
- (setq char 0 chr1 (mapconcat 'sc::pack-one-char "12345678" "") chr1 char)
- (setq char 0 chr2 (mapconcat 'sc::pack-one-char "12345678" "") chr2 char)
- (forward-line 1)
- (concat (char-to-string chr1) (char-to-string chr2))
- ))
-
-(defun sc::pack-one-char (dummy)
- "pack following char into char, unless eolp"
- (if (or (eolp) (char-equal (following-char) 32))
- (setq char (lsh char 1))
- (setq char (1+ (lsh char 1))))
- (if (not (eolp))(forward-char)))
-
-(provide 'sun-curs)
-
-;;; arch-tag: 7cc861e5-e2d9-4191-b211-2baaaab54e78
-;;; sun-curs.el ends here
diff --git a/lisp/obsolete/sun-fns.el b/lisp/obsolete/sun-fns.el
deleted file mode 100644
index 2f95d5011c1..00000000000
--- a/lisp/obsolete/sun-fns.el
+++ /dev/null
@@ -1,645 +0,0 @@
-;;; sun-fns.el --- subroutines of Mouse handling for Sun windows
-
-;; Copyright (C) 1987, 2001, 2002, 2003, 2004, 2005,
-;; 2006, 2007 Free Software Foundation, Inc.
-
-;; Author: Jeff Peck <peck@sun.com>
-;; Maintainer: none
-;; Keywords: hardware
-
-;; 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 3, 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:
-
-;; Submitted Mar. 1987, Jeff Peck
-;; Sun Microsystems Inc. <peck@sun.com>
-;; Conceived Nov. 1986, Stan Jefferson,
-;; Computer Science Lab, SRI International.
-;; GoodIdeas Feb. 1987, Steve Greenbaum
-;; & UpClicks Reasoning Systems, Inc.
-;;
-;;
-;; Functions for manipulating via the mouse and mouse-map definitions
-;; for accessing them. Also definitions of mouse menus.
-;; This file you should freely modify to reflect you personal tastes.
-;;
-;; First half of file defines functions to implement mouse commands,
-;; Don't delete any of those, just add what ever else you need.
-;; Second half of file defines mouse bindings, do whatever you want there.
-
-;;
-;; Mouse Functions.
-;;
-;; These functions follow the sun-mouse-handler convention of being called
-;; with three arguments: (window x-pos y-pos)
-;; This makes it easy for a mouse executed command to know where the mouse is.
-;; Use the macro "eval-in-window" to execute a function
-;; in a temporarily selected window.
-;;
-;; If you have a function that must be called with other arguments
-;; bind the mouse button to an s-exp that contains the necessary parameters.
-;; See "minibuffer" bindings for examples.
-;;
-
-;;; Code:
-
-(require 'term/sun-mouse)
-
-(defconst cursor-pause-milliseconds 300
- "*Number of milliseconds to display alternate cursor (usually the mark)")
-
-(defun indicate-region (&optional pause)
- "Bounce cursor to mark for cursor-pause-milliseconds and back again"
- (or pause (setq pause cursor-pause-milliseconds))
- (let ((point (point)))
- (goto-char (mark))
- (sit-for-millisecs pause)
- ;(update-display)
- ;(sleep-for-millisecs pause)
- (goto-char point)))
-
-
-;;;
-;;; Text buffer operations
-;;;
-(defun mouse-move-point (window x y)
- "Move point to mouse cursor."
- (select-window window)
- (move-to-loc x y)
- (if (memq last-command ; support the mouse-copy/delete/yank
- '(mouse-copy mouse-delete mouse-yank-move))
- (setq this-command 'mouse-yank-move))
- )
-
-(defun mouse-set-mark (&optional window x y)
- "Set mark at mouse cursor."
- (eval-in-window window ;; use this to get the unwind protect
- (let ((point (point)))
- (move-to-loc x y)
- (set-mark (point))
- (goto-char point)
- (indicate-region)))
- )
-
-(defun mouse-set-mark-and-select (window x y)
- "Set mark at mouse cursor, and select that window."
- (select-window window)
- (mouse-set-mark window x y)
- )
-
-(defun mouse-set-mark-and-stuff (w x y)
- "Set mark at mouse cursor, and put region in stuff buffer."
- (mouse-set-mark-and-select w x y)
- (sun-select-region (region-beginning) (region-end)))
-
-;;;
-;;; Simple mouse dragging stuff: marking with button up
-;;;
-
-(defvar *mouse-drag-window* nil)
-(defvar *mouse-drag-x* -1)
-(defvar *mouse-drag-y* -1)
-
-(defun mouse-drag-move-point (window x y)
- "Move point to mouse cursor, and allow dragging."
- (mouse-move-point window x y)
- (setq *mouse-drag-window* window
- *mouse-drag-x* x
- *mouse-drag-y* y))
-
-(defun mouse-drag-set-mark-stuff (window x y)
- "The up click handler that goes with mouse-drag-move-point.
-If mouse is in same WINDOW but at different X or Y than when
-mouse-drag-move-point was last executed, set the mark at mouse
-and put the region in the stuff buffer."
- (if (and (eq *mouse-drag-window* window)
- (not (and (equal *mouse-drag-x* x)
- (equal *mouse-drag-y* y))))
- (mouse-set-mark-and-stuff window x y)
- (setq this-command last-command)) ; this was just an upclick no-op.
- )
-
-(defun mouse-select-or-drag-move-point (window x y)
- "Select window if not selected, otherwise do mouse-drag-move-point."
- (if (eq (selected-window) window)
- (mouse-drag-move-point window x y)
- (mouse-select-window window)))
-
-;;;
-;;; esoterica:
-;;;
-(defun mouse-exch-pt-and-mark (window x y)
- "Exchange point and mark."
- (select-window window)
- (exchange-point-and-mark)
- )
-
-(defun mouse-call-kbd-macro (window x y)
- "Invokes last keyboard macro at mouse cursor."
- (mouse-move-point window x y)
- (call-last-kbd-macro)
- )
-
-(defun mouse-mark-thing (window x y)
- "Set point and mark to text object using syntax table.
-The resulting region is put in the sun-window stuff buffer.
-Left or right Paren syntax marks an s-expression.
-Clicking at the end of a line marks the line including a trailing newline.
-If it doesn't recognize one of these it marks the character at point."
- (mouse-move-point window x y)
- (if (eobp) (open-line 1))
- (let* ((char (char-after (point)))
- (syntax (char-syntax char)))
- (cond
- ((eq syntax ?w) ; word.
- (forward-word 1)
- (set-mark (point))
- (forward-word -1))
- ;; try to include a single following whitespace (is this a good idea?)
- ;; No, not a good idea since inconsistent.
- ;;(if (eq (char-syntax (char-after (mark))) ?\ )
- ;; (set-mark (1+ (mark))))
- ((eq syntax ?\( ) ; open paren.
- (mark-sexp 1))
- ((eq syntax ?\) ) ; close paren.
- (forward-char 1)
- (mark-sexp -1)
- (exchange-point-and-mark))
- ((eolp) ; mark line if at end.
- (set-mark (1+ (point)))
- (beginning-of-line 1))
- (t ; mark character
- (set-mark (1+ (point)))))
- (indicate-region)) ; display region boundary.
- (sun-select-region (region-beginning) (region-end))
- )
-
-(defun mouse-kill-thing (window x y)
- "Kill thing at mouse, and put point there."
- (mouse-mark-thing window x y)
- (kill-region-and-unmark (region-beginning) (region-end))
- )
-
-(defun mouse-kill-thing-there (window x y)
- "Kill thing at mouse, leave point where it was.
-See mouse-mark-thing for a description of the objects recognized."
- (eval-in-window window
- (save-excursion
- (mouse-mark-thing window x y)
- (kill-region (region-beginning) (region-end))))
- )
-
-(defun mouse-save-thing (window x y &optional quiet)
- "Put thing at mouse in kill ring.
-See mouse-mark-thing for a description of the objects recognized."
- (mouse-mark-thing window x y)
- (copy-region-as-kill (region-beginning) (region-end))
- (if (not quiet) (message "Thing saved"))
- )
-
-(defun mouse-save-thing-there (window x y &optional quiet)
- "Put thing at mouse in kill ring, leave point as is.
-See mouse-mark-thing for a description of the objects recognized."
- (eval-in-window window
- (save-excursion
- (mouse-save-thing window x y quiet))))
-
-;;;
-;;; Mouse yanking...
-;;;
-(defun mouse-copy-thing (window x y)
- "Put thing at mouse in kill ring, yank to point.
-See mouse-mark-thing for a description of the objects recognized."
- (setq last-command 'not-kill) ;Avoids appending to previous kills.
- (mouse-save-thing-there window x y t)
- (yank)
- (setq this-command 'yank))
-
-(defun mouse-move-thing (window x y)
- "Kill thing at mouse, yank it to point.
-See mouse-mark-thing for a description of the objects recognized."
- (setq last-command 'not-kill) ;Avoids appending to previous kills.
- (mouse-kill-thing-there window x y)
- (yank)
- (setq this-command 'yank))
-
-(defun mouse-yank-at-point (&optional window x y)
- "Yank from kill-ring at point; then cycle thru kill ring."
- (if (eq last-command 'yank)
- (let ((before (< (point) (mark))))
- (delete-region (point) (mark))
- (insert (current-kill 1))
- (if before (exchange-point-and-mark)))
- (yank))
- (setq this-command 'yank))
-
-(defun mouse-yank-at-mouse (window x y)
- "Yank from kill-ring at mouse; then cycle thru kill ring."
- (mouse-move-point window x y)
- (mouse-yank-at-point window x y))
-
-(defun mouse-save/delete/yank (&optional window x y)
- "Context sensitive save/delete/yank.
-Consecutive clicks perform as follows:
- * first click saves region to kill ring,
- * second click kills region,
- * third click yanks from kill ring,
- * subsequent clicks cycle thru kill ring.
-If mouse-move-point is performed after the first or second click,
-the next click will do a yank, etc. Except for a possible mouse-move-point,
-this command is insensitive to mouse location."
- (cond
- ((memq last-command '(mouse-delete yank mouse-yank-move)) ; third+ click
- (mouse-yank-at-point))
- ((eq last-command 'mouse-copy) ; second click
- (kill-region (region-beginning) (region-end))
- (setq this-command 'mouse-delete))
- (t ; first click
- (copy-region-as-kill (region-beginning) (region-end))
- (message "Region saved")
- (setq this-command 'mouse-copy))
- ))
-
-
-(defun mouse-split-horizontally (window x y)
- "Splits the window horizontally at mouse cursor."
- (eval-in-window window (split-window-horizontally (1+ x))))
-
-(defun mouse-split-vertically (window x y)
- "Split the window vertically at the mouse cursor."
- (eval-in-window window (split-window-vertically (1+ y))))
-
-(defun mouse-select-window (&optional window x y)
- "Selects the window, restoring point."
- (select-window window))
-
-(defun mouse-delete-other-windows (&optional window x y)
- "Deletes all windows except the one mouse is in."
- (delete-other-windows window))
-
-(defun mouse-delete-window (window &optional x y)
- "Deletes the window mouse is in."
- (delete-window window))
-
-(defun mouse-undo (window x y)
- "Invokes undo in the window mouse is in."
- (eval-in-window window (undo)))
-
-;;;
-;;; Scroll operations
-;;;
-
-;;; The move-to-window-line is used below because otherwise
-;;; scrolling a non-selected process window with the mouse, after
-;;; the process has written text past the bottom of the window,
-;;; gives an "End of buffer" error, and then scrolls. The
-;;; move-to-window-line seems to force recomputing where things are.
-(defun mouse-scroll-up (window x y)
- "Scrolls the window upward."
- (eval-in-window window (move-to-window-line 1) (scroll-up nil)))
-
-(defun mouse-scroll-down (window x y)
- "Scrolls the window downward."
- (eval-in-window window (scroll-down nil)))
-
-(defun mouse-scroll-proportional (window x y)
- "Scrolls the window proportionally corresponding to window
-relative X divided by window width."
- (eval-in-window window
- (if (>= x (1- (window-width)))
- ;; When x is maximum (equal to or 1 less than window width),
- ;; goto end of buffer. We check for this special case
- ;; because the calculated goto-char often goes short of the
- ;; end due to roundoff error, and we often really want to go
- ;; to the end.
- (goto-char (point-max))
- (progn
- (goto-char (+ (point-min) ; For narrowed regions.
- (* x (/ (- (point-max) (point-min))
- (1- (window-width))))))
- (beginning-of-line))
- )
- (what-cursor-position) ; Report position.
- ))
-
-(defun mouse-line-to-top (window x y)
- "Scrolls the line at the mouse cursor up to the top."
- (eval-in-window window (scroll-up y)))
-
-(defun mouse-top-to-line (window x y)
- "Scrolls the top line down to the mouse cursor."
- (eval-in-window window (scroll-down y)))
-
-(defun mouse-line-to-bottom (window x y)
- "Scrolls the line at the mouse cursor to the bottom."
- (eval-in-window window (scroll-up (+ y (- 2 (window-height))))))
-
-(defun mouse-bottom-to-line (window x y)
- "Scrolls the bottom line up to the mouse cursor."
- (eval-in-window window (scroll-down (+ y (- 2 (window-height))))))
-
-(defun mouse-line-to-middle (window x y)
- "Scrolls the line at the mouse cursor to the middle."
- (eval-in-window window (scroll-up (- y -1 (/ (window-height) 2)))))
-
-(defun mouse-middle-to-line (window x y)
- "Scrolls the line at the middle to the mouse cursor."
- (eval-in-window window (scroll-up (- (/ (window-height) 2) y 1))))
-
-
-;;;
-;;; main emacs menu.
-;;;
-(defmenu expand-menu
- ("Vertically" mouse-expand-vertically *menu-window*)
- ("Horizontally" mouse-expand-horizontally *menu-window*))
-
-(defmenu delete-window-menu
- ("This One" delete-window *menu-window*)
- ("All Others" delete-other-windows *menu-window*))
-
-(defmenu mouse-help-menu
- ("Text Region"
- mouse-help-region *menu-window* *menu-x* *menu-y* 'text)
- ("Scrollbar"
- mouse-help-region *menu-window* *menu-x* *menu-y* 'scrollbar)
- ("Modeline"
- mouse-help-region *menu-window* *menu-x* *menu-y* 'modeline)
- ("Minibuffer"
- mouse-help-region *menu-window* *menu-x* *menu-y* 'minibuffer)
- )
-
-(defmenu emacs-quit-menu
- ("Suspend" suspend-emacstool)
- ("Quit" save-buffers-kill-emacs))
-
-(defmenu emacs-menu
- ("Emacs Menu")
- ("Stuff Selection" sun-yank-selection)
- ("Expand" . expand-menu)
- ("Delete Window" . delete-window-menu)
- ("Previous Buffer" mouse-select-previous-buffer *menu-window*)
- ("Save Buffers" save-some-buffers)
- ("List Directory" list-directory nil)
- ("Dired" dired nil)
- ("Mouse Help" . mouse-help-menu)
- ("Quit" . emacs-quit-menu))
-
-(defun emacs-menu-eval (window x y)
- "Pop-up menu of editor commands."
- (sun-menu-evaluate window (1+ x) (1- y) 'emacs-menu))
-
-(defun mouse-expand-horizontally (window)
- (eval-in-window window
- (enlarge-window 4 t)
- (update-display) ; Try to redisplay, since can get confused.
- ))
-
-(defun mouse-expand-vertically (window)
- (eval-in-window window (enlarge-window 4)))
-
-(defun mouse-select-previous-buffer (window)
- "Switch buffer in mouse window to most recently selected buffer."
- (eval-in-window window (switch-to-buffer (other-buffer))))
-
-;;;
-;;; minibuffer menu
-;;;
-(defmenu minibuffer-menu
- ("Minibuffer" message "Just some miscellaneous minibuffer commands")
- ("Stuff" sun-yank-selection)
- ("Do-It" exit-minibuffer)
- ("Abort" abort-recursive-edit)
- ("Suspend" suspend-emacs))
-
-(defun minibuffer-menu-eval (window x y)
- "Pop-up menu of commands."
- (sun-menu-evaluate window x (1- y) 'minibuffer-menu))
-
-(defun mini-move-point (window x y)
- ;; -6 is good for most common cases
- (mouse-move-point window (- x 6) 0))
-
-(defun mini-set-mark-and-stuff (window x y)
- ;; -6 is good for most common cases
- (mouse-set-mark-and-stuff window (- x 6) 0))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Buffer-mode Mouse commands
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun Buffer-at-mouse (w x y)
- "Calls Buffer-menu-buffer from mouse click."
- (save-window-excursion
- (mouse-move-point w x y)
- (beginning-of-line)
- (Buffer-menu-buffer t)))
-
-(defun mouse-buffer-bury (w x y)
- "Bury the indicated buffer."
- (bury-buffer (Buffer-at-mouse w x y))
- )
-
-(defun mouse-buffer-select (w x y)
- "Put the indicated buffer in selected window."
- (switch-to-buffer (Buffer-at-mouse w x y))
- (list-buffers)
- )
-
-(defun mouse-buffer-delete (w x y)
- "mark indicated buffer for delete"
- (save-window-excursion
- (mouse-move-point w x y)
- (Buffer-menu-delete)
- ))
-
-(defun mouse-buffer-execute (w x y)
- "execute buffer-menu selections"
- (save-window-excursion
- (mouse-move-point w x y)
- (Buffer-menu-execute)
- ))
-
-(defun enable-mouse-in-buffer-list ()
- "Call this to enable mouse selections in *Buffer List*
- LEFT puts the indicated buffer in the selected window.
- MIDDLE buries the indicated buffer.
- RIGHT marks the indicated buffer for deletion.
- MIDDLE-RIGHT deletes the marked buffers.
-To unmark a buffer marked for deletion, select it with LEFT."
- (save-window-excursion
- (list-buffers) ; Initialize *Buffer List*
- (set-buffer "*Buffer List*")
- (local-set-mouse '(text middle) 'mouse-buffer-bury)
- (local-set-mouse '(text left) 'mouse-buffer-select)
- (local-set-mouse '(text right) 'mouse-buffer-delete)
- (local-set-mouse '(text middle right) 'mouse-buffer-execute)
- )
- )
-
-
-;;;*******************************************************************
-;;;
-;;; Global Mouse Bindings.
-;;;
-;;; There is some sense to this mouse binding madness:
-;;; LEFT and RIGHT scrolls are inverses.
-;;; SHIFT makes an opposite meaning in the scroll bar.
-;;; SHIFT is an alternative to DOUBLE (but double chords do not exist).
-;;; META makes the scrollbar functions work in the text region.
-;;; MIDDLE operates the mark
-;;; LEFT operates at point
-
-;;; META commands are generally non-destructive,
-;;; SHIFT is a little more dangerous.
-;;; CONTROL is for the really complicated ones.
-
-;;; CONTROL-META-SHIFT-RIGHT gives help on that region.
-
-;;;
-;;; Text Region mousemap
-;;;
-;; The basics: Point, Mark, Menu, Sun-Select:
-(global-set-mouse '(text left) 'mouse-drag-move-point)
-(global-set-mouse '(text up left) 'mouse-drag-set-mark-stuff)
-(global-set-mouse '(text shift left) 'mouse-exch-pt-and-mark)
-(global-set-mouse '(text double left) 'mouse-exch-pt-and-mark)
-
-(global-set-mouse '(text middle) 'mouse-set-mark-and-stuff)
-
-(global-set-mouse '(text right) 'emacs-menu-eval)
-(global-set-mouse '(text shift right) '(sun-yank-selection))
-(global-set-mouse '(text double right) '(sun-yank-selection))
-
-;; The Slymoblics multi-command for Save, Kill, Copy, Move:
-(global-set-mouse '(text shift middle) 'mouse-save/delete/yank)
-(global-set-mouse '(text double middle) 'mouse-save/delete/yank)
-
-;; Save, Kill, Copy, Move Things:
-;; control-left composes with control middle/right to produce copy/move
-(global-set-mouse '(text control middle ) 'mouse-save-thing-there)
-(global-set-mouse '(text control right ) 'mouse-kill-thing-there)
-(global-set-mouse '(text control left) 'mouse-yank-at-point)
-(global-set-mouse '(text control middle left) 'mouse-copy-thing)
-(global-set-mouse '(text control right left) 'mouse-move-thing)
-(global-set-mouse '(text control right middle) 'mouse-mark-thing)
-
-;; The Universal mouse help command (press all buttons):
-(global-set-mouse '(text shift control meta right) 'mouse-help-region)
-(global-set-mouse '(text double control meta right) 'mouse-help-region)
-
-;;; Meta in Text Region is like meta version in scrollbar:
-(global-set-mouse '(text meta left) 'mouse-line-to-top)
-(global-set-mouse '(text meta shift left) 'mouse-line-to-bottom)
-(global-set-mouse '(text meta double left) 'mouse-line-to-bottom)
-(global-set-mouse '(text meta middle) 'mouse-line-to-middle)
-(global-set-mouse '(text meta shift middle) 'mouse-middle-to-line)
-(global-set-mouse '(text meta double middle) 'mouse-middle-to-line)
-(global-set-mouse '(text meta control middle) 'mouse-split-vertically)
-(global-set-mouse '(text meta right) 'mouse-top-to-line)
-(global-set-mouse '(text meta shift right) 'mouse-bottom-to-line)
-(global-set-mouse '(text meta double right) 'mouse-bottom-to-line)
-
-;; Miscellaneous:
-(global-set-mouse '(text meta control left) 'mouse-call-kbd-macro)
-(global-set-mouse '(text meta control right) 'mouse-undo)
-
-;;;
-;;; Scrollbar mousemap.
-;;; Are available in the Scrollbar Region, or with Meta Text (or Meta Scrollbar)
-;;;
-(global-set-mouse '(scrollbar left) 'mouse-line-to-top)
-(global-set-mouse '(scrollbar shift left) 'mouse-line-to-bottom)
-(global-set-mouse '(scrollbar double left) 'mouse-line-to-bottom)
-
-(global-set-mouse '(scrollbar middle) 'mouse-line-to-middle)
-(global-set-mouse '(scrollbar shift middle) 'mouse-middle-to-line)
-(global-set-mouse '(scrollbar double middle) 'mouse-middle-to-line)
-(global-set-mouse '(scrollbar control middle) 'mouse-split-vertically)
-
-(global-set-mouse '(scrollbar right) 'mouse-top-to-line)
-(global-set-mouse '(scrollbar shift right) 'mouse-bottom-to-line)
-(global-set-mouse '(scrollbar double right) 'mouse-bottom-to-line)
-
-(global-set-mouse '(scrollbar meta left) 'mouse-line-to-top)
-(global-set-mouse '(scrollbar meta shift left) 'mouse-line-to-bottom)
-(global-set-mouse '(scrollbar meta double left) 'mouse-line-to-bottom)
-(global-set-mouse '(scrollbar meta middle) 'mouse-line-to-middle)
-(global-set-mouse '(scrollbar meta shift middle) 'mouse-middle-to-line)
-(global-set-mouse '(scrollbar meta double middle) 'mouse-middle-to-line)
-(global-set-mouse '(scrollbar meta control middle) 'mouse-split-vertically)
-(global-set-mouse '(scrollbar meta right) 'mouse-top-to-line)
-(global-set-mouse '(scrollbar meta shift right) 'mouse-bottom-to-line)
-(global-set-mouse '(scrollbar meta double right) 'mouse-bottom-to-line)
-
-;; And the help menu:
-(global-set-mouse '(scrollbar shift control meta right) 'mouse-help-region)
-(global-set-mouse '(scrollbar double control meta right) 'mouse-help-region)
-
-;;;
-;;; Modeline mousemap.
-;;;
-;;; Note: meta of any single button selects window.
-
-(global-set-mouse '(modeline left) 'mouse-scroll-up)
-(global-set-mouse '(modeline meta left) 'mouse-select-window)
-
-(global-set-mouse '(modeline middle) 'mouse-scroll-proportional)
-(global-set-mouse '(modeline meta middle) 'mouse-select-window)
-(global-set-mouse '(modeline control middle) 'mouse-split-horizontally)
-
-(global-set-mouse '(modeline right) 'mouse-scroll-down)
-(global-set-mouse '(modeline meta right) 'mouse-select-window)
-
-;;; control-left selects this window, control-right deletes it.
-(global-set-mouse '(modeline control left) 'mouse-delete-other-windows)
-(global-set-mouse '(modeline control right) 'mouse-delete-window)
-
-;; in case of confusion, just select it:
-(global-set-mouse '(modeline control left right)'mouse-select-window)
-
-;; even without confusion (and without the keyboard) select it:
-(global-set-mouse '(modeline left right) 'mouse-select-window)
-
-;; And the help menu:
-(global-set-mouse '(modeline shift control meta right) 'mouse-help-region)
-(global-set-mouse '(modeline double control meta right) 'mouse-help-region)
-
-;;;
-;;; Minibuffer Mousemap
-;;; Demonstrating some variety:
-;;;
-(global-set-mouse '(minibuffer left) 'mini-move-point)
-
-(global-set-mouse '(minibuffer middle) 'mini-set-mark-and-stuff)
-
-(global-set-mouse '(minibuffer shift middle) '(select-previous-complex-command))
-(global-set-mouse '(minibuffer double middle) '(select-previous-complex-command))
-(global-set-mouse '(minibuffer control middle) '(next-complex-command 1))
-(global-set-mouse '(minibuffer meta middle) '(previous-complex-command 1))
-
-(global-set-mouse '(minibuffer right) 'minibuffer-menu-eval)
-
-(global-set-mouse '(minibuffer shift control meta right) 'mouse-help-region)
-(global-set-mouse '(minibuffer double control meta right) 'mouse-help-region)
-
-(provide 'sun-fns)
-
-;;; arch-tag: 1c4c1192-f71d-4d5f-b883-ae659c28e132
-;;; sun-fns.el ends here
diff --git a/lisp/outline.el b/lisp/outline.el
index 92e521afc9f..a1ed3d44f7f 100644
--- a/lisp/outline.el
+++ b/lisp/outline.el
@@ -187,12 +187,12 @@ in the file it applies to."
:group 'outlines)
(defface outline-4
- '((t :inherit font-lock-builtin-face))
+ '((t :inherit font-lock-comment-face))
"Level 4."
:group 'outlines)
(defface outline-5
- '((t :inherit font-lock-comment-face))
+ '((t :inherit font-lock-type-face))
"Level 5."
:group 'outlines)
@@ -202,7 +202,7 @@ in the file it applies to."
:group 'outlines)
(defface outline-7
- '((t :inherit font-lock-type-face))
+ '((t :inherit font-lock-builtin-face))
"Level 7."
:group 'outlines)
@@ -215,8 +215,8 @@ in the file it applies to."
[outline-1 outline-2 outline-3 outline-4
outline-5 outline-6 outline-7 outline-8])
-(defvar outline-font-lock-levels nil)
-(make-variable-buffer-local 'outline-font-lock-levels)
+;; (defvar outline-font-lock-levels nil)
+;; (make-variable-buffer-local 'outline-font-lock-levels)
(defun outline-font-lock-face ()
;; (save-excursion
@@ -241,9 +241,7 @@ in the file it applies to."
(save-excursion
(goto-char (match-beginning 0))
(looking-at outline-regexp)
- (condition-case nil
- (aref outline-font-lock-faces (1- (funcall outline-level)))
- (error font-lock-warning-face))))
+ (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces)))))
(defvar outline-view-change-hook nil
"Normal hook to be run after outline visibility changes.")
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index 206fb7bd3da..8116ad91fd2 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -281,6 +281,10 @@ to all arguments, such as variable names after a $."
:type 'hook
:group 'pcomplete)
+(defsubst pcomplete-executables (&optional regexp)
+ "Complete amongst a list of directories and executables."
+ (pcomplete-entries regexp 'file-executable-p))
+
(defcustom pcomplete-command-completion-function
(function
(lambda ()
@@ -599,6 +603,8 @@ this is `comint-dynamic-complete-functions'."
"Setup shell-mode to use pcomplete."
(pcomplete-comint-setup 'shell-dynamic-complete-functions))
+(declare-function comint-bol "comint" (&optional arg))
+
(defun pcomplete-parse-comint-arguments ()
"Parse whitespace separated arguments in the current region."
(let ((begin (save-excursion (comint-bol nil) (point)))
@@ -711,6 +717,7 @@ If PREDICATE is non-nil, it will also be used to refine the match
If no directory information can be extracted from the completed
component, `default-directory' is used as the basis for completion."
(let* ((name (substitute-env-vars pcomplete-stub))
+ (completion-ignore-case pcomplete-ignore-case)
(default-directory (expand-file-name
(or (file-name-directory name)
default-directory)))
@@ -779,10 +786,6 @@ component, `default-directory' is used as the basis for completion."
"Complete amongst a list of directories."
(pcomplete-entries regexp 'file-directory-p))
-(defsubst pcomplete-executables (&optional regexp)
- "Complete amongst a list of directories and executables."
- (pcomplete-entries regexp 'file-executable-p))
-
;; generation of completion lists
(defun pcomplete-find-completion-function (command)
@@ -934,7 +937,7 @@ generate the completions list. This means that the hook
(if pcomplete-last-window-config
(let* ((cbuf (get-buffer "*Completions*"))
(cwin (and cbuf (get-buffer-window cbuf))))
- (when (and cwin (window-live-p cwin))
+ (when (window-live-p cwin)
(bury-buffer cbuf)
(set-window-configuration pcomplete-last-window-config))))
(setq pcomplete-last-window-config nil
@@ -943,17 +946,16 @@ generate the completions list. This means that the hook
;; Abstractions so that the code below will work for both Emacs 20 and
;; XEmacs 21
-(unless (fboundp 'event-matches-key-specifier-p)
- (defalias 'event-matches-key-specifier-p 'eq))
+(defalias 'pcomplete-event-matches-key-specifier-p
+ (if (featurep 'xemacs)
+ 'event-matches-key-specifier-p
+ 'eq))
(defun pcomplete-read-event (&optional prompt)
(if (fboundp 'read-event)
(read-event prompt)
(aref (read-key-sequence prompt) 0)))
-(unless (fboundp 'event-basic-type)
- (defalias 'event-basic-type 'event-key))
-
(defun pcomplete-show-completions (completions)
"List in help buffer sorted COMPLETIONS.
Typing SPC flushes the help buffer."
@@ -972,13 +974,13 @@ Typing SPC flushes the help buffer."
(while (with-current-buffer (get-buffer "*Completions*")
(setq event (pcomplete-read-event)))
(cond
- ((event-matches-key-specifier-p event ?\s)
+ ((pcomplete-event-matches-key-specifier-p event ?\s)
(set-window-configuration pcomplete-last-window-config)
(setq pcomplete-last-window-config nil)
(throw 'done nil))
- ((or (event-matches-key-specifier-p event 'tab)
+ ((or (pcomplete-event-matches-key-specifier-p event 'tab)
;; Needed on a terminal
- (event-matches-key-specifier-p event 9))
+ (pcomplete-event-matches-key-specifier-p event 9))
(let ((win (or (get-buffer-window "*Completions*" 0)
(display-buffer "*Completions*"
'not-this-window))))
diff --git a/lisp/pcvs.el b/lisp/pcvs.el
index d533796ee50..53bed601a36 100644
--- a/lisp/pcvs.el
+++ b/lisp/pcvs.el
@@ -227,7 +227,7 @@
(list* '("BASE") '("HEAD")
(when marked
(with-temp-buffer
- (call-process cvs-program
+ (process-file cvs-program
nil ;no input
t ;output to current-buffer
nil ;don't update display while running
@@ -564,7 +564,7 @@ If non-nil, NEW means to create a new buffer no matter what."
(process
;; the process will be run in the selected dir
(let ((default-directory (cvs-expand-dir-name dir)))
- (apply 'start-process "cvs" procbuf cvs-program args))))
+ (apply 'start-file-process "cvs" procbuf cvs-program args))))
;; setup the process.
(process-put process 'cvs-buffer cvs-buffer)
(with-current-buffer cvs-buffer (cvs-update-header msg 'add))
@@ -635,6 +635,9 @@ If non-nil, NEW means to create a new buffer no matter what."
(if (not (string-match "." str)) (setq str "\n"))
(setq str (concat "-- Running " cmd " ...\n" str)))
(if (not (string-match
+ ;; FIXME: If `cmd' is large, this will bump into the
+ ;; compiled-regexp size limit. We could drop the "^" anchor
+ ;; and use search-forward to circumvent the problem.
(concat "^-- Running " (regexp-quote cmd) " \\.\\.\\.\n") str))
(error "Internal PCL-CVS error while removing message")
(setq str (replace-match "" t t str))
@@ -1733,7 +1736,7 @@ Signal an error if there is no backup file."
;; problem when stdout and stderr are the same.
(let ((res
(let ((coding-system-for-read 'binary))
- (apply 'call-process cvs-program nil '(t nil) nil
+ (apply 'process-file cvs-program nil '(t nil) nil
"-q" "update" "-p"
;; If `rev' is HEAD, don't pass it at all:
;; the default behavior is to get the head
@@ -1957,6 +1960,8 @@ This command ignores files that are not flagged as `Unknown'."
(setf (cvs-fileinfo->type fi) 'DEAD))
(cvs-cleanup-collection cvs-cookies nil nil nil))
+(declare-function vc-editable-p "vc" (file))
+(declare-function vc-checkout "vc" (file &optional writable rev))
(defun cvs-append-to-ignore (dir str &optional old-dir)
"Add STR to the .cvsignore file in DIR.
@@ -2003,7 +2008,7 @@ to hear about anymore."
(defun cvs-find-modif (fi)
(with-temp-buffer
- (call-process cvs-program nil (current-buffer) nil
+ (process-file cvs-program nil (current-buffer) nil
"-f" "diff" (cvs-fileinfo->file fi))
(goto-char (point-min))
(if (re-search-forward "^\\([0-9]+\\)" nil t)
@@ -2265,7 +2270,7 @@ With prefix argument, prompt for cvs flags."
program (split-string-and-unquote args)))
;; FIXME: return the exit status?
- (apply 'call-process program nil t t args)
+ (apply 'process-file program nil t t args)
(goto-char (point-max))))))
;; FIXME: make this run in the background ala cvs-run-process...
@@ -2288,7 +2293,7 @@ this file, or a list of arguments to send to the program."
(buffer (find-buffer-visiting file)))
;; For a revert to happen the user must be editing the file...
(unless (or (null buffer)
- (eq (cvs-fileinfo->type fileinfo) 'MESSAGE)
+ (memq (cvs-fileinfo->type fileinfo) '(MESSAGE UNKNOWN))
;; FIXME: check whether revert is really needed.
;; `(verify-visited-file-modtime buffer)' doesn't cut it
;; because it only looks at the time stamp (it ignores
@@ -2363,7 +2368,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'."
(add-hook 'vc-post-command-functions 'cvs-vc-command-advice)
-(defun cvs-vc-command-advice (command file flags)
+(defun cvs-vc-command-advice (command files flags)
(when (and (equal command "cvs")
(progn
(while (and (stringp (car flags))
@@ -2392,9 +2397,10 @@ The exact behavior is determined also by `cvs-dired-use-hook'."
(when (and (equal (car flags) "add")
(goto-char (point-min))
(looking-at ".*to add this file permanently\n\\'"))
- (insert "cvs add: scheduling file `"
- (file-name-nondirectory file)
- "' for addition\n"))
+ (dolist (file (if (listp files) files (list files)))
+ (insert "cvs add: scheduling file `"
+ (file-name-nondirectory file)
+ "' for addition\n")))
;; VC never (?) does `cvs -n update' so dcd=nil
;; should probably always be the right choice.
(cvs-parse-process nil subdir))))))))
@@ -2407,7 +2413,7 @@ The exact behavior is determined also by `cvs-dired-use-hook'."
(let* ((file (expand-file-name buffer-file-name))
(version (and (fboundp 'vc-backend)
(eq (vc-backend file) 'CVS)
- (vc-workfile-version file))))
+ (vc-working-revision file))))
(when version
(save-excursion
(dolist (cvs-buf (buffer-list))
diff --git a/lisp/play/blackbox.el b/lisp/play/blackbox.el
index f21a4458665..699aa91abcf 100644
--- a/lisp/play/blackbox.el
+++ b/lisp/play/blackbox.el
@@ -296,14 +296,14 @@ a reflection."
(defun bb-up (count)
(interactive "p")
(while (and (> count 0) (> bb-y -1))
- (previous-line 1)
+ (forward-line -1)
(setq bb-y (1- bb-y))
(setq count (1- count))))
(defun bb-down (count)
(interactive "p")
(while (and (> count 0) (< bb-y 8))
- (next-line 1)
+ (forward-line 1)
(setq bb-y (1+ bb-y))
(setq count (1- count))))
diff --git a/lisp/play/bubbles.el b/lisp/play/bubbles.el
new file mode 100644
index 00000000000..5f8709d17b7
--- /dev/null
+++ b/lisp/play/bubbles.el
@@ -0,0 +1,1459 @@
+;;; bubbles.el --- Puzzle game for Emacs.
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: Ulf Jasper <ulf.jasper@web.de>
+;; URL: http://ulf.epplejasper.de/
+;; Created: 5. Feb. 2007
+;; Keywords: games
+
+;; 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 3, 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:
+
+;; Bubbles is a puzzle game. Its goal is to remove as many bubbles as
+;; possible in as few moves as possible.
+
+;; Bubbles is an implementation of the "Same Game", similar to "Same
+;; GNOME" and many others, see <http://en.wikipedia.org/wiki/SameGame>.
+
+;; Installation
+;; ------------
+
+;; Add the following lines to your Emacs startup file (`~/.emacs').
+;; (add-to-list 'load-path "/path/to/bubbles/")
+;; (autoload 'bubbles "bubbles" "Play Bubbles" t)
+
+;; ======================================================================
+
+;;; History:
+
+;; 0.5 (2007-09-14)
+;; - Minor bugfixes.
+
+;; 0.4 (2007-08-27)
+;; - Allow for undoing last move.
+;; - Bonus for removing all bubbles.
+;; - Speed improvements.
+;; - Animation enhancements.
+;; - Added `bubbles-mode-hook'.
+;; - Fixes: Don't move point.
+;; - New URL.
+
+;; 0.3 (2007-03-11)
+;; - Renamed shift modes and thus names of score files. All
+;; highscores are lost, unless you rename the score files from
+;; bubbles-shift-... to bubbles-...!
+;; - Bugfixes: Check for successful image creation.
+;; Disable menus and counter when game is over.
+;; Tested with GNU Emacs 22.0.93
+
+;; 0.2 (2007-02-24)
+;; - Introduced game themes.
+;; - Introduced graphics themes (changeable while playing).
+;; - Added menu.
+;; - Customization: grid size, colors, chars, shift mode.
+;; - More keybindings.
+;; - Changed shift direction from to-right to to-left.
+;; - Bugfixes: Don't remove single-bubble regions;
+;; Animation glitches fixed.
+;; Tested with GNU Emacs 22.0.93 and 21.4.1.
+
+;; 0.1 (2007-02-11)
+;; Initial release. Tested with GNU Emacs 22.0.93 and 21.4.1.
+
+;; ======================================================================
+
+;;; Code:
+
+(defconst bubbles-version "0.5" "Version number of bubbles.el.")
+
+(require 'gamegrid)
+(require 'cl)
+
+;; User options
+
+;; Careful with that axe, Eugene! Order does matter in the custom
+;; section below.
+
+(defcustom bubbles-game-theme
+ 'easy
+ "Overall game theme.
+The overall game theme specifies a grid size, a set of colors,
+and a shift mode."
+ :type '(radio (const :tag "Easy" easy)
+ (const :tag "Medium" medium)
+ (const :tag "Difficult" difficult)
+ (const :tag "Hard" hard)
+ (const :tag "User defined" user-defined))
+ :group 'bubbles)
+
+(defun bubbles-set-game-easy ()
+ "Set game theme to 'easy'."
+ (interactive)
+ (setq bubbles-game-theme 'easy)
+ (bubbles))
+
+(defun bubbles-set-game-medium ()
+ "Set game theme to 'medium'."
+ (interactive)
+ (setq bubbles-game-theme 'medium)
+ (bubbles))
+
+(defun bubbles-set-game-difficult ()
+ "Set game theme to 'difficult'."
+ (interactive)
+ (setq bubbles-game-theme 'difficult)
+ (bubbles))
+
+(defun bubbles-set-game-hard ()
+ "Set game theme to 'hard'."
+ (interactive)
+ (setq bubbles-game-theme 'hard)
+ (bubbles))
+
+(defun bubbles-set-game-userdefined ()
+ "Set game theme to 'user-defined'."
+ (interactive)
+ (setq bubbles-game-theme 'user-defined)
+ (bubbles))
+
+(defgroup bubbles nil
+ "Bubbles, a puzzle game."
+ :group 'games)
+
+(defcustom bubbles-graphics-theme
+ 'circles
+ "Graphics theme.
+It is safe to choose a graphical theme. If Emacs cannot display
+images the `ascii' theme will be used."
+ :type '(radio (const :tag "Circles" circles)
+ (const :tag "Squares" squares)
+ (const :tag "Diamonds" diamonds)
+ (const :tag "Balls" balls)
+ (const :tag "Emacs" emacs)
+ (const :tag "ASCII (no images)" ascii))
+ :group 'bubbles)
+
+(defconst bubbles--grid-small '(10 . 10)
+ "Predefined small bubbles grid.")
+
+(defconst bubbles--grid-medium '(15 . 10)
+ "Predefined medium bubbles grid.")
+
+(defconst bubbles--grid-large '(20 . 15)
+ "Predefined large bubbles grid.")
+
+(defconst bubbles--grid-huge '(30 . 20)
+ "Predefined huge bubbles grid.")
+
+(defcustom bubbles-grid-size
+ bubbles--grid-medium
+ "Size of bubbles grid."
+ :type `(radio (const :tag "Small" ,bubbles--grid-small)
+ (const :tag "Medium" ,bubbles--grid-medium)
+ (const :tag "Large" ,bubbles--grid-large)
+ (const :tag "Huge" ,bubbles--grid-huge)
+ (cons :tag "User defined"
+ (integer :tag "Width")
+ (integer :tag "Height")))
+ :group 'bubbles)
+
+(defconst bubbles--colors-2 '("orange" "violet")
+ "Predefined bubbles color list with two colors.")
+
+(defconst bubbles--colors-3 '("lightblue" "palegreen" "pink")
+ "Predefined bubbles color list with three colors.")
+
+(defconst bubbles--colors-4 '("firebrick" "sea green" "steel blue" "chocolate")
+ "Predefined bubbles color list with four colors.")
+
+(defconst bubbles--colors-5 '("firebrick" "sea green" "steel blue"
+ "sandy brown" "bisque3")
+ "Predefined bubbles color list with five colors.")
+
+(defcustom bubbles-colors
+ bubbles--colors-3
+ "List of bubble colors.
+The length of this list determines how many different bubble
+types are present."
+ :type `(radio (const :tag "Red, darkgreen" ,bubbles--colors-2)
+ (const :tag "Red, darkgreen, blue" ,bubbles--colors-3)
+ (const :tag "Red, darkgreen, blue, orange" ,bubbles--colors-4)
+ (const :tag "Red, darkgreen, blue, orange, violet"
+ ,bubbles--colors-5)
+ (repeat :tag "User defined" color))
+ :group 'bubbles)
+
+(defcustom bubbles-chars
+ '(?+ ?O ?# ?X ?. ?* ?& ?§)
+ "Characters used for bubbles.
+Note that the actual number of different bubbles is determined by
+the number of colors, see `bubbles-colors'."
+ :type '(repeat character)
+ :group 'bubbles)
+
+(defcustom bubbles-shift-mode
+ 'default
+ "Shift mode.
+Available modes are `shift-default' and`shift-always'."
+ :type '(radio (const :tag "Default" default)
+ (const :tag "Shifter" always)
+ ;;(const :tag "Mega Shifter" 'mega)
+ )
+ :group 'bubbles)
+
+(defcustom bubbles-mode-hook nil
+ "Hook run by Bubbles mode."
+ :group 'bubbles
+ :type 'hook)
+
+(defun bubbles-customize ()
+ "Open customization buffer for bubbles."
+ (interactive)
+ (customize-group 'bubbles))
+
+;; ======================================================================
+;; internal variables
+
+(defvar bubbles--score 0
+ "Current Bubbles score.")
+
+(defvar bubbles--neighbourhood-score 0
+ "Score of active bubbles neighbourhood.")
+
+(defvar bubbles--faces nil
+ "List of currently used faces.")
+
+(defvar bubbles--playing nil
+ "Play status indicator.")
+
+(defvar bubbles--empty-image nil
+ "Image used for removed bubbles (empty grid cells).")
+
+(defvar bubbles--images nil
+ "List of images for bubbles.")
+
+(defvar bubbles--images-ok nil
+ "Indicate whether images have been created successfully.")
+
+(defvar bubbles--col-offset 0
+ "Horizontal offset for centering the bubbles grid.")
+
+(defvar bubbles--row-offset 0
+ "Vertical offset for centering the bubbles grid.")
+
+(defvar bubbles--save-data nil
+ "List containing bubbles save data (SCORE BUFFERCONTENTS).")
+
+(defconst bubbles--image-template-circle
+ "/* XPM */
+static char * dot_xpm[] = {
+\"20 20 2 1\",
+\" c None\",
+\". c #FFFFFF\",
+\" ...... \",
+\" .......... \",
+\" .............. \",
+\" ................ \",
+\" ................ \",
+\" .................. \",
+\" .................. \",
+\"....................\",
+\"....................\",
+\"....................\",
+\"....................\",
+\"....................\",
+\"....................\",
+\" .................. \",
+\" .................. \",
+\" ................ \",
+\" ................ \",
+\" .............. \",
+\" .......... \",
+\" ...... \"};")
+
+(defconst bubbles--image-template-square
+ "/* XPM */
+static char * dot_xpm[] = {
+\"20 20 2 1\",
+\"0 c None\",
+\"1 c #FFFFFF\",
+\"00000000000000000000\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"01111111111111111110\",
+\"00000000000000000000\"};")
+
+(defconst bubbles--image-template-diamond
+ "/* XPM */
+static char * dot_xpm[] = {
+\"20 20 2 1\",
+\"0 c None\",
+\"1 c #FFFFFF\",
+\"00000000011000000000\",
+\"00000000111100000000\",
+\"00000001111110000000\",
+\"00000011111111000000\",
+\"00000111111111100000\",
+\"00001111111111110000\",
+\"00011111111111111000\",
+\"00111111111111111100\",
+\"01111111111111111110\",
+\"11111111111111111111\",
+\"01111111111111111110\",
+\"00111111111111111100\",
+\"00011111111111111000\",
+\"00001111111111110000\",
+\"00000111111111100000\",
+\"00000011111111000000\",
+\"00000001111110000000\",
+\"00000000111100000000\",
+\"00000000011000000000\",
+\"00000000000000000000\"};")
+
+(defconst bubbles--image-template-emacs
+ "/* XPM */
+static char * emacs_24_xpm[] = {
+\"24 24 129 2\",
+\" c None\",
+\". c #837DA4\",
+\"+ c #807AA0\",
+\"@ c #9894B2\",
+\"# c #CCCAD9\",
+\"$ c #C2C0D2\",
+\"% c #B6B3C9\",
+\"& c #A19DB9\",
+\"* c #8681A5\",
+\"= c #7D779B\",
+\"- c #B6B3C7\",
+\"; c #ABA7BE\",
+\"> c #9792AF\",
+\", c #AAA6BD\",
+\"' c #CBC9D7\",
+\") c #AAA7BE\",
+\"! c #908BAA\",
+\"~ c #797397\",
+\"{ c #948FAC\",
+\"] c #9A95B1\",
+\"^ c #EBEAEF\",
+\"/ c #F1F1F5\",
+\"( c #BCB9CB\",
+\"_ c #A9A5BD\",
+\": c #757093\",
+\"< c #918DA9\",
+\"[ c #DDDBE4\",
+\"} c #FFFFFF\",
+\"| c #EAE9EF\",
+\"1 c #A7A4BA\",
+\"2 c #716C8F\",
+\"3 c #8D89A5\",
+\"4 c #9C98B1\",
+\"5 c #DBDAE3\",
+\"6 c #A4A1B7\",
+\"7 c #6E698A\",
+\"8 c #8B87A1\",
+\"9 c #928EA7\",
+\"0 c #C5C3D1\",
+\"a c #F8F8F9\",
+\"b c #CCCAD6\",
+\"c c #A29FB4\",
+\"d c #6A6585\",
+\"e c #88849D\",
+\"f c #B5B2C2\",
+\"g c #F0F0F3\",
+\"h c #E1E0E6\",
+\"i c #A5A2B5\",
+\"j c #A09DB1\",
+\"k c #676281\",
+\"l c #85819A\",
+\"m c #9591A7\",
+\"n c #E1E0E5\",
+\"o c #F0EFF2\",
+\"p c #B3B0C0\",
+\"q c #9D9AAE\",
+\"r c #635F7C\",
+\"s c #827F96\",
+\"t c #9997AA\",
+\"u c #F7F7F9\",
+\"v c #C8C7D1\",
+\"w c #89869D\",
+\"x c #9B99AB\",
+\"y c #5F5B78\",
+\"z c #7F7C93\",
+\"A c #CFCDD6\",
+\"B c #B7B5C2\",
+\"C c #9996A9\",
+\"D c #5C5873\",
+\"E c #7A778D\",
+\"F c #F5F5F6\",
+\"G c #8E8C9E\",
+\"H c #7D798F\",
+\"I c #58546F\",
+\"J c #6C6981\",
+\"K c #D5D4DB\",
+\"L c #F5F4F6\",
+\"M c #9794A5\",
+\"N c #625F78\",
+\"O c #79768C\",
+\"P c #55516A\",
+\"Q c #605C73\",
+\"R c #CAC9D1\",
+\"S c #EAE9EC\",
+\"T c #B4B3BE\",
+\"U c #777488\",
+\"V c #514E66\",
+\"W c #DEDEE2\",
+\"X c #F4F4F5\",
+\"Y c #9D9BA9\",
+\"Z c #747185\",
+\"` c #4E4B62\",
+\" . c #DEDDE1\",
+\".. c #A6A5B0\",
+\"+. c #716F81\",
+\"@. c #4A475D\",
+\"#. c #A4A3AE\",
+\"$. c #F4F3F5\",
+\"%. c #777586\",
+\"&. c #6E6C7D\",
+\"*. c #464358\",
+\"=. c #514E62\",
+\"-. c #B9B8C0\",
+\";. c #D1D0D5\",
+\">. c #747282\",
+\",. c #6B6979\",
+\"'. c #434054\",
+\"). c #5A5769\",
+\"!. c #D0CFD4\",
+\"~. c #5B5869\",
+\"{. c #696676\",
+\"]. c #403D50\",
+\"^. c #DBDADE\",
+\"/. c #F3F3F4\",
+\"(. c #646271\",
+\"_. c #666473\",
+\":. c #3D3A4C\",
+\"<. c #555362\",
+\"[. c #9E9DA6\",
+\"}. c #9E9CA5\",
+\"|. c #646170\",
+\"1. c #393647\",
+\"2. c #514E5D\",
+\"3. c #83818C\",
+\"4. c #A8A7AE\",
+\"5. c #E6E6E8\",
+\"6. c #DAD9DC\",
+\"7. c #353343\",
+\"8. c #32303E\",
+\" . . . . . . . . . . . . . . . . . . \",
+\" + @ # $ % % % % % % % % % % % % % % & * + + \",
+\" = - ; > > > > > > > > , ' ) > > > > > > ! = \",
+\"~ ~ { { { { { { { { { { { ] ^ / ( { { { { _ ~ ~ \",
+\": : < < < < < < < < < < < < [ } } | < < < 1 : : \",
+\"2 2 3 3 3 3 3 3 3 3 3 3 4 5 } } } 5 3 3 3 6 2 2 \",
+\"7 7 8 8 8 8 8 8 8 8 9 0 a } } } b 8 8 8 8 c 7 7 \",
+\"d d e e e e e e e f g } } } h i e e e e e j d d \",
+\"k k l l l l l m n } } } o p l l l l l l l q k k \",
+\"r r s s s s t u } } } v w s s s s s s s s x r r \",
+\"y y z z z z A } } } B z z z z z z z z z z C y y \",
+\"D D D D D D E F } } G D D D D D D D D D D H D D \",
+\"I I I I I I I J K } L M N I I I I I I I I O I I \",
+\"P P P P P P Q R } } } S T P P P P P P P P U P P \",
+\"V V V V V V W } } X Y V V V V V V V V V V Z V V \",
+\"` ` ` ` ` ` .} } ..` ` ` ` ` ` ` ` ` ` ` +.` ` \",
+\"@.@.@.@.@.@.@.#.$.$.%.@.@.@.@.@.@.@.@.@.@.&.@.@.\",
+\"*.*.*.*.*.*.*.*.=.-.} ;.>.*.*.*.*.*.*.*.*.,.*.*.\",
+\"'.'.'.'.'.'.'.'.'.'.).!.} !.~.'.'.'.'.'.'.{.'.'.\",
+\"].].].].].].].].].].].].^.} /.(.].].].].]._.].].\",
+\":.:.:.:.:.:.:.:.:.:.<.[./.} } }.:.:.:.:.:.|.:.:.\",
+\" 1.1.1.1.1.1.1.1.2.3.4.5.6.3.1.1.1.1.1.1.1.1. \",
+\" 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7. \",
+\" 8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8. \"};")
+
+(defconst bubbles--image-template-ball
+ "/* XPM */
+static char * dot3d_xpm[] = {
+\"20 20 190 2\",
+\" c None\",
+\". c #F9F6F6\",
+\"+ c #D6D0D0\",
+\"@ c #BFBBBB\",
+\"# c #AAA4A4\",
+\"$ c #ABAAAB\",
+\"% c #A8A8A8\",
+\"& c #A29D9D\",
+\"* c #B5B2B2\",
+\"= c #CDC9C9\",
+\"- c #D7D0D0\",
+\"; c #B3AFAF\",
+\"> c #B5B5B5\",
+\", c #B7B7B7\",
+\"' c #B8B8B8\",
+\") c #B6B6B6\",
+\"! c #B3B3B3\",
+\"~ c #AFAFAF\",
+\"{ c #A9A9A9\",
+\"] c #A2A2A2\",
+\"^ c #9C9A9A\",
+\"/ c #C9C5C5\",
+\"( c #FDFBFB\",
+\"_ c #C3BCBC\",
+\": c #BBBBBB\",
+\"< c #C0C0C0\",
+\"[ c #C3C2C2\",
+\"} c #C3C3C3\",
+\"| c #C2C2C2\",
+\"1 c #BEBEBE\",
+\"2 c #B9B9B9\",
+\"3 c #B2B2B2\",
+\"4 c #ABAAAA\",
+\"5 c #999999\",
+\"6 c #ACA7A7\",
+\"7 c #C2BBBB\",
+\"8 c #C5C5C5\",
+\"9 c #CACBCB\",
+\"0 c #CECECE\",
+\"a c #CFCFCF\",
+\"b c #CDCDCD\",
+\"c c #C8C9C9\",
+\"d c #9F9F9F\",
+\"e c #959595\",
+\"f c #A9A5A5\",
+\"g c #D5CFCE\",
+\"h c #BDBDBD\",
+\"i c #C6C6C6\",
+\"j c #D5D5D5\",
+\"k c #D9D9D9\",
+\"l c #DADADA\",
+\"m c #D8D8D8\",
+\"n c #D2D2D2\",
+\"o c #CBCBCB\",
+\"p c #A4A4A5\",
+\"q c #9A9A9A\",
+\"r c #8F8F8F\",
+\"s c #C3BFBF\",
+\"t c #AFACAB\",
+\"u c #CCCCCC\",
+\"v c #D6D6D6\",
+\"w c #DEDEDE\",
+\"x c #E4E4E4\",
+\"y c #E5E5E5\",
+\"z c #E2E2E2\",
+\"A c #DBDBDB\",
+\"B c #C9C8C8\",
+\"C c #A8A9A8\",
+\"D c #9D9E9D\",
+\"E c #929292\",
+\"F c #8A8888\",
+\"G c #D3CECE\",
+\"H c #B0B0B0\",
+\"I c #D1D1D1\",
+\"J c #DCDCDC\",
+\"K c #E6E6E6\",
+\"L c #EEEEEE\",
+\"M c #F1F1F0\",
+\"N c #EBEBEB\",
+\"O c #D7D7D8\",
+\"P c #ABABAB\",
+\"Q c #A0A0A0\",
+\"R c #949494\",
+\"S c #898989\",
+\"T c #C0BDBD\",
+\"U c #B9B6B6\",
+\"V c #B1B1B1\",
+\"W c #BCBCBC\",
+\"X c #C8C8C8\",
+\"Y c #D3D3D3\",
+\"Z c #DFDFDE\",
+\"` c #EAEAEA\",
+\" . c #F5F5F5\",
+\".. c #FAFAFA\",
+\"+. c #F1F1F1\",
+\"@. c #CECFCF\",
+\"#. c #ACACAC\",
+\"$. c #A1A1A1\",
+\"%. c #8A8A8A\",
+\"&. c #9B9999\",
+\"*. c #C7C7C7\",
+\"=. c #DDDDDD\",
+\"-. c #E8E8E8\",
+\";. c #F2F2F2\",
+\">. c #898A89\",
+\",. c #7A7878\",
+\"'. c #AEAEAE\",
+\"). c #C4C4C4\",
+\"!. c #CBCBCA\",
+\"~. c #AAAAAA\",
+\"{. c #939393\",
+\"]. c #888888\",
+\"^. c #7C7C7C\",
+\"/. c #AAAAAB\",
+\"(. c #BFBFBF\",
+\"_. c #C9C9C9\",
+\":. c #DFDEDF\",
+\"<. c #A6A6A6\",
+\"[. c #9B9B9B\",
+\"}. c #909191\",
+\"|. c #858586\",
+\"1. c #797979\",
+\"2. c #989494\",
+\"3. c #A5A6A5\",
+\"4. c #B9B9B8\",
+\"5. c #C1C1C1\",
+\"6. c #CFCFCE\",
+\"7. c #979797\",
+\"8. c #8D8D8D\",
+\"9. c #828282\",
+\"0. c #747171\",
+\"a. c #ADAAAA\",
+\"b. c #A9A8A9\",
+\"c. c #B8B9B9\",
+\"d. c #A5A5A5\",
+\"e. c #9C9C9C\",
+\"f. c #7E7E7D\",
+\"g. c #929191\",
+\"h. c #C9C4C4\",
+\"i. c #989898\",
+\"j. c #ADADAD\",
+\"k. c #9D9D9D\",
+\"l. c #8C8C8C\",
+\"m. c #787878\",
+\"n. c #B8B6B6\",
+\"o. c #939191\",
+\"p. c #A5A5A6\",
+\"q. c #ABABAA\",
+\"r. c #A8A8A9\",
+\"s. c #A3A3A3\",
+\"t. c #858585\",
+\"u. c #757474\",
+\"v. c #C5C1C1\",
+\"w. c #969696\",
+\"x. c #9B9B9C\",
+\"y. c #A4A4A4\",
+\"z. c #9E9E9E\",
+\"A. c #939394\",
+\"B. c #7D7D7D\",
+\"C. c #747474\",
+\"D. c #B7B5B5\",
+\"E. c #A5A1A1\",
+\"F. c #919191\",
+\"G. c #9A9999\",
+\"H. c #838383\",
+\"I. c #757575\",
+\"J. c #939090\",
+\"K. c #A29E9E\",
+\"L. c #868686\",
+\"M. c #8D8D8C\",
+\"N. c #8E8E8E\",
+\"O. c #8D8D8E\",
+\"P. c #8B8C8C\",
+\"Q. c #848485\",
+\"R. c #7F7F80\",
+\"S. c #7A7A7A\",
+\"T. c #737373\",
+\"U. c #929090\",
+\"V. c #828080\",
+\"W. c #818181\",
+\"X. c #808080\",
+\"Y. c #7E7E7E\",
+\"Z. c #737272\",
+\"`. c #B7B4B4\",
+\" + c #BCBABA\",
+\".+ c #959494\",
+\"++ c #747172\",
+\"@+ c #767676\",
+\"#+ c #6F6D6D\",
+\"$+ c #8F8E8E\",
+\" . + @ # $ % & * = . \",
+\" - ; > , ' ) ! ~ { ] ^ / \",
+\" ( _ > : < [ } | 1 2 3 4 ] 5 6 ( \",
+\" 7 ) 1 8 9 0 a b c | : 3 { d e f \",
+\" g ! h i 0 j k l m n o | 2 ~ p q r s \",
+\". t ' | u v w x y z A n B 1 ! C D E F . \",
+\"G H : i I J K L M N z O b | ) P Q R S T \",
+\"U V W X Y Z ` ...+.y l @.} ' #.$.e %.&.\",
+\"& H W *.n =.-.;. .L x k 0 [ , #.Q e >.,.\",
+\"] '.2 ).a k z -.` K w j !.< > ~.d {.].^.\",
+\"d /.> (._.I k =.:.J v 0 8 : V <.[.}.|.1.\",
+\"2.3.~ 4.5._.6.n Y I u i 1 > P $.7.8.9.0.\",
+\"a.d b.V c.(.).*.X i | h ) '.d.e.E ].f.g.\",
+\"h.i.$.C ~ > 2 W W : ' ! j.d.k.e l.9.m.n.\",
+\". o.i.d p.q.'.H V H j.r.s.k.e 8.t.^.u.. \",
+\" v.r w.x.Q s.d.d.y.] z.5 A.8.t.B.C.D. \",
+\" E.l.F.e i.G.q 5 7.{.r %.H.^.I.J. \",
+\" ( K.L.%.M.N.N.O.P.S Q.R.S.T.U.( \",
+\" @ V.W.H.H.9.X.Y.S.I.Z.`. \",
+\" . +.+++@+C.#+$+D.. \"};")
+
+;; ======================================================================
+;; Functions
+
+(defsubst bubbles--grid-width ()
+ "Return the grid width for the current game theme."
+ (car (case bubbles-game-theme
+ ('easy
+ bubbles--grid-small)
+ ('medium
+ bubbles--grid-medium)
+ ('difficult
+ bubbles--grid-large)
+ ('hard
+ bubbles--grid-huge)
+ ('user-defined
+ bubbles-grid-size))))
+
+(defsubst bubbles--grid-height ()
+ "Return the grid height for the current game theme."
+ (cdr (case bubbles-game-theme
+ ('easy
+ bubbles--grid-small)
+ ('medium
+ bubbles--grid-medium)
+ ('difficult
+ bubbles--grid-large)
+ ('hard
+ bubbles--grid-huge)
+ ('user-defined
+ bubbles-grid-size))))
+
+(defsubst bubbles--colors ()
+ "Return the color list for the current game theme."
+ (case bubbles-game-theme
+ ('easy
+ bubbles--colors-2)
+ ('medium
+ bubbles--colors-3)
+ ('difficult
+ bubbles--colors-4)
+ ('hard
+ bubbles--colors-5)
+ ('user-defined
+ bubbles-colors)))
+
+(defsubst bubbles--shift-mode ()
+ "Return the shift mode for the current game theme."
+ (case bubbles-game-theme
+ ('easy
+ 'default)
+ ('medium
+ 'default)
+ ('difficult
+ 'always)
+ ('hard
+ 'always)
+ ('user-defined
+ bubbles-shift-mode)))
+
+(defun bubbles-save-settings ()
+ "Save current customization settings."
+ (interactive)
+ (custom-set-variables
+ (list 'bubbles-game-theme `(quote ,bubbles-game-theme) t)
+ (list 'bubbles-graphics-theme `(quote ,bubbles-graphics-theme) t))
+ (customize-save-customized))
+
+(defsubst bubbles--empty-char ()
+ "The character used for removed bubbles (empty grid cells)."
+ ? )
+
+(defun bubbles-set-graphics-theme-ascii ()
+ "Set graphics theme to `ascii'."
+ (interactive)
+ (setq bubbles-graphics-theme 'ascii)
+ (bubbles--update-faces-or-images))
+
+(defun bubbles-set-graphics-theme-circles ()
+ "Set graphics theme to `circles'."
+ (interactive)
+ (setq bubbles-graphics-theme 'circles)
+ (bubbles--initialize-images)
+ (bubbles--update-faces-or-images))
+
+(defun bubbles-set-graphics-theme-squares ()
+ "Set graphics theme to `squares'."
+ (interactive)
+ (setq bubbles-graphics-theme 'squares)
+ (bubbles--initialize-images)
+ (bubbles--update-faces-or-images))
+
+(defun bubbles-set-graphics-theme-diamonds ()
+ "Set graphics theme to `diamonds'."
+ (interactive)
+ (setq bubbles-graphics-theme 'diamonds)
+ (bubbles--initialize-images)
+ (bubbles--update-faces-or-images))
+
+(defun bubbles-set-graphics-theme-balls ()
+ "Set graphics theme to `balls'."
+ (interactive)
+ (setq bubbles-graphics-theme 'balls)
+ (bubbles--initialize-images)
+ (bubbles--update-faces-or-images))
+
+(defun bubbles-set-graphics-theme-emacs ()
+ "Set graphics theme to `emacs'."
+ (interactive)
+ (setq bubbles-graphics-theme 'emacs)
+ (bubbles--initialize-images)
+ (bubbles--update-faces-or-images))
+
+;; game theme menu
+(defvar bubbles-game-theme-menu
+ (let ((menu (make-sparse-keymap "Game Theme")))
+ (define-key menu [bubbles-set-game-userdefined]
+ (list 'menu-item "User defined" 'bubbles-set-game-userdefined
+ :button '(:radio . (eq bubbles-game-theme 'user-defined))))
+ (define-key menu [bubbles-set-game-hard]
+ (list 'menu-item "Hard" 'bubbles-set-game-hard
+ :button '(:radio . (eq bubbles-game-theme 'hard))))
+ (define-key menu [bubbles-set-game-difficult]
+ (list 'menu-item "Difficult" 'bubbles-set-game-difficult
+ :button '(:radio . (eq bubbles-game-theme 'difficult))))
+ (define-key menu [bubbles-set-game-medium]
+ (list 'menu-item "Medium" 'bubbles-set-game-medium
+ :button '(:radio . (eq bubbles-game-theme 'medium))))
+ (define-key menu [bubbles-set-game-easy]
+ (list 'menu-item "Easy" 'bubbles-set-game-easy
+ :button '(:radio . (eq bubbles-game-theme 'easy))))
+ menu)
+ "Map for bubbles game theme menu.")
+
+;; graphics theme menu
+(defvar bubbles-graphics-theme-menu
+ (let ((menu (make-sparse-keymap "Graphics Theme")))
+ (define-key menu [bubbles-set-graphics-theme-ascii]
+ (list 'menu-item "ASCII" 'bubbles-set-graphics-theme-ascii
+ :button '(:radio . (eq bubbles-graphics-theme 'ascii))))
+ (define-key menu [bubbles-set-graphics-theme-emacs]
+ (list 'menu-item "Emacs" 'bubbles-set-graphics-theme-emacs
+ :button '(:radio . (eq bubbles-graphics-theme 'emacs))))
+ (define-key menu [bubbles-set-graphics-theme-balls]
+ (list 'menu-item "Balls" 'bubbles-set-graphics-theme-balls
+ :button '(:radio . (eq bubbles-graphics-theme 'balls))))
+ (define-key menu [bubbles-set-graphics-theme-diamonds]
+ (list 'menu-item "Diamonds" 'bubbles-set-graphics-theme-diamonds
+ :button '(:radio . (eq bubbles-graphics-theme 'diamonds))))
+ (define-key menu [bubbles-set-graphics-theme-squares]
+ (list 'menu-item "Squares" 'bubbles-set-graphics-theme-squares
+ :button '(:radio . (eq bubbles-graphics-theme 'squares))))
+ (define-key menu [bubbles-set-graphics-theme-circles]
+ (list 'menu-item "Circles" 'bubbles-set-graphics-theme-circles
+ :button '(:radio . (eq bubbles-graphics-theme 'circles))))
+ menu)
+ "Map for bubbles graphics theme menu.")
+
+;; menu
+(defvar bubbles-menu
+ (let ((menu (make-sparse-keymap "Bubbles")))
+ (define-key menu [bubbles-quit]
+ (list 'menu-item "Quit" 'bubbles-quit))
+ (define-key menu [bubbles]
+ (list 'menu-item "New game" 'bubbles))
+ (define-key menu [bubbles-separator-1]
+ '("--"))
+ (define-key menu [bubbles-save-settings]
+ (list 'menu-item "Save all settings" 'bubbles-save-settings))
+ (define-key menu [bubbles-customize]
+ (list 'menu-item "Edit all settings" 'bubbles-customize))
+ (define-key menu [bubbles-game-theme-menu]
+ (list 'menu-item "Game Theme" bubbles-game-theme-menu))
+ (define-key menu [bubbles-graphics-theme-menu]
+ (list 'menu-item "Graphics Theme" bubbles-graphics-theme-menu
+ :enable 'bubbles--playing))
+ (define-key menu [bubbles-separator-2]
+ '("--"))
+ (define-key menu [bubbles-undo]
+ (list 'menu-item "Undo last move" 'bubbles-undo
+ :enable '(and bubbles--playing (listp buffer-undo-list))))
+ menu)
+ "Map for bubbles menu.")
+
+;; bubbles mode map
+(defvar bubbles-mode-map
+ (let ((map (make-sparse-keymap 'bubbles-mode-map)))
+;; (suppress-keymap map t)
+ (define-key map "q" 'bubbles-quit)
+ (define-key map "\n" 'bubbles-plop)
+ (define-key map " " 'bubbles-plop)
+ (define-key map [double-down-mouse-1] 'bubbles-plop)
+ (define-key map [mouse-2] 'bubbles-plop)
+ (define-key map "\C-m" 'bubbles-plop)
+ (define-key map "u" 'bubbles-undo)
+ (define-key map "p" 'previous-line)
+ (define-key map "n" 'next-line)
+ (define-key map "f" 'forward-char)
+ (define-key map "b" 'backward-char)
+ ;; bind menu to mouse
+ (define-key map [down-mouse-3] bubbles-menu)
+ ;; Put menu in menu-bar
+ (define-key map [menu-bar Bubbles] (cons "Bubbles" bubbles-menu))
+ map)
+ "Mode map for bubbles.")
+
+(defun bubbles-mode ()
+ "Major mode for playing bubbles.
+\\{bubbles-mode-map}"
+ (kill-all-local-variables)
+ (use-local-map bubbles-mode-map)
+ (setq major-mode 'bubbles-mode)
+ (setq mode-name "Bubbles")
+ (setq buffer-read-only t)
+ (buffer-disable-undo)
+ (setq buffer-undo-list t)
+ (force-mode-line-update)
+ (redisplay)
+ (add-hook 'post-command-hook 'bubbles--mark-neighbourhood t t)
+ (run-hooks 'bubbles-mode-hook))
+
+;;;###autoload
+(defun bubbles ()
+ "Play Bubbles game."
+ (interactive)
+ (switch-to-buffer (get-buffer-create "*bubbles*"))
+ (when (or (not bubbles--playing)
+ (y-or-n-p "Start new game? "))
+ (setq bubbles--save-data nil)
+ (setq bubbles--playing t)
+ (bubbles--initialize)))
+
+(defun bubbles-quit ()
+ "Quit Bubbles."
+ (interactive)
+ (message "bubbles-quit")
+ (bury-buffer))
+
+(defun bubbles--compute-offsets ()
+ "Update horizontal and vertical offsets for centering the bubbles grid.
+Set `bubbles--col-offset' and `bubbles--row-offset'."
+ (cond ((and (display-images-p)
+ bubbles--images-ok
+ (not (eq bubbles-graphics-theme 'ascii))
+ (fboundp 'window-inside-pixel-edges))
+ ;; compute offset in units of pixels
+ (let ((bubbles--image-size
+ (car (image-size (car bubbles--images) t))))
+ (setq bubbles--col-offset
+ (list
+ (max 0 (/ (- (nth 2 (window-inside-pixel-edges))
+ (nth 0 (window-inside-pixel-edges))
+ (* ( + bubbles--image-size 2) ;; margin
+ (bubbles--grid-width))) 2))))
+ (setq bubbles--row-offset
+ (list
+ (max 0 (/ (- (nth 3 (window-inside-pixel-edges))
+ (nth 1 (window-inside-pixel-edges))
+ (* (+ bubbles--image-size 1) ;; margin
+ (bubbles--grid-height))) 2))))))
+ (t
+ ;; compute offset in units of chars
+ (setq bubbles--col-offset
+ (max 0 (/ (- (window-width)
+ (bubbles--grid-width)) 2)))
+ (setq bubbles--row-offset
+ (max 0 (/ (- (window-height)
+ (bubbles--grid-height) 2) 2))))))
+
+(defun bubbles--remove-overlays ()
+ "Remove all overlays."
+ (if (fboundp 'remove-overlays)
+ (remove-overlays)))
+
+(defun bubbles--initialize ()
+ "Initialize Bubbles game."
+ (bubbles--initialize-faces)
+ (bubbles--initialize-images)
+ (bubbles--remove-overlays)
+
+ (switch-to-buffer (get-buffer-create "*bubbles*"))
+ (bubbles--compute-offsets)
+ (let ((inhibit-read-only t))
+ (set-buffer-modified-p nil)
+ (erase-buffer)
+ (insert " ")
+ (add-text-properties
+ (point-min) (point) (list 'intangible t 'display
+ (cons 'space
+ (list :height bubbles--row-offset))))
+ (insert "\n")
+ (let ((max-char (length (bubbles--colors))))
+ (dotimes (i (bubbles--grid-height))
+ (let ((p (point)))
+ (insert " ")
+ (add-text-properties
+ p (point) (list 'intangible t
+ 'display (cons 'space
+ (list :width
+ bubbles--col-offset)))))
+ (dotimes (j (bubbles--grid-width))
+ (let* ((index (random max-char))
+ (char (nth index bubbles-chars)))
+ (insert char)
+ (add-text-properties (1- (point)) (point) (list 'index index))))
+ (insert "\n"))
+ (insert "\n ")
+ (add-text-properties
+ (1- (point)) (point) (list 'intangible t 'display
+ (cons 'space
+ (list :width bubbles--col-offset)))))
+ (put-text-property (point-min) (point-max) 'pointer 'arrow))
+ (bubbles-mode)
+ (bubbles--reset-score)
+ (bubbles--update-faces-or-images)
+ (bubbles--goto 0 0)
+ (setq buffer-undo-list t)
+ (force-mode-line-update)
+ (redisplay))
+
+(defun bubbles--initialize-faces ()
+ "Prepare faces for playing `bubbles'."
+ (copy-face 'default 'bubbles--highlight-face)
+ (set-face-background 'bubbles--highlight-face "#8080f4")
+ (when (display-color-p)
+ (setq bubbles--faces
+ (mapcar (lambda (color)
+ (let ((fname (intern (format "bubbles--face-%s" color))))
+ (unless (facep fname)
+ (copy-face 'default fname)
+ (set-face-foreground fname color))
+ fname))
+ (bubbles--colors)))))
+
+(defsubst bubbles--row (pos)
+ "Return row of point POS."
+ (save-excursion
+ (goto-char pos)
+ (beginning-of-line)
+ (1- (count-lines (point-min) (point)))))
+
+(defsubst bubbles--col (pos)
+ "Return column of point POS."
+ (save-excursion
+ (goto-char pos)
+ (1- (current-column))))
+
+(defun bubbles--goto (row col)
+ "Move point to bubble at coordinates ROW and COL."
+ (if (or (< row 0)
+ (< col 0)
+ (>= row (bubbles--grid-height))
+ (>= col (bubbles--grid-width)))
+ ;; Error! return nil
+ nil
+ ;; go
+ (goto-char (point-min))
+ (forward-line (1+ row))
+ (forward-char (1+ col))
+ (point)))
+
+(defun bubbles--char-at (row col)
+ "Return character at bubble ROW and COL."
+ (save-excursion
+ (if (bubbles--goto row col)
+ (char-after (point))
+ nil)))
+
+(defun bubbles--mark-direct-neighbours (row col char)
+ "Mark direct neighbours of bubble at ROW COL with same CHAR."
+ (save-excursion
+ (let ((count 0))
+ (when (and (bubbles--goto row col)
+ (eq char (char-after (point)))
+ (not (get-text-property (point) 'active)))
+ (add-text-properties (point) (1+ (point))
+ '(active t face 'bubbles--highlight-face))
+ (setq count (+ 1
+ (bubbles--mark-direct-neighbours row (1+ col) char)
+ (bubbles--mark-direct-neighbours row (1- col) char)
+ (bubbles--mark-direct-neighbours (1+ row) col char)
+ (bubbles--mark-direct-neighbours (1- row) col char))))
+ count)))
+
+(defun bubbles--mark-neighbourhood (&optional pos)
+ "Mark neighbourhood of point.
+Use optional parameter POS instead of point if given."
+ (when bubbles--playing
+ (unless pos (setq pos (point)))
+ (condition-case err
+ (let ((char (char-after pos))
+ (inhibit-read-only t)
+ (row (bubbles--row (point)))
+ (col (bubbles--col (point))))
+ (add-text-properties (point-min) (point-max)
+ '(face default active nil))
+ (let ((count 0))
+ (when (and row col (not (eq char (bubbles--empty-char))))
+ (setq count (bubbles--mark-direct-neighbours row col char))
+ (unless (> count 1)
+ (add-text-properties (point-min) (point-max)
+ '(face default active nil))
+ (setq count 0)))
+ (bubbles--update-neighbourhood-score count))
+ (put-text-property (point-min) (point-max) 'pointer 'arrow)
+ (bubbles--update-faces-or-images)
+ (sit-for 0))
+ (error (message "Bubbles: Internal error %s" err)))))
+
+(defun bubbles--neighbourhood-available ()
+ "Return t if another valid neighbourhood is available."
+ (catch 'found
+ (save-excursion
+ (dotimes (i (bubbles--grid-height))
+ (dotimes (j (bubbles--grid-width))
+ (let ((c (bubbles--char-at i j)))
+ (if (and (not (eq c (bubbles--empty-char)))
+ (or (eq c (bubbles--char-at (1+ i) j))
+ (eq c (bubbles--char-at i (1+ j)))))
+ (throw 'found t)))))
+ nil)))
+
+(defun bubbles--count ()
+ "Count remaining bubbles."
+ (let ((count 0))
+ (save-excursion
+ (dotimes (i (bubbles--grid-height))
+ (dotimes (j (bubbles--grid-width))
+ (let ((c (bubbles--char-at i j)))
+ (if (not (eq c (bubbles--empty-char)))
+ (setq count (1+ count)))))))
+ count))
+
+(defun bubbles--reset-score ()
+ "Reset bubbles score."
+ (setq bubbles--neighbourhood-score 0
+ bubbles--score 0)
+ (bubbles--update-score))
+
+(defun bubbles--update-score ()
+ "Calculate and display new bubble score."
+ (setq bubbles--score (+ bubbles--score bubbles--neighbourhood-score))
+ (bubbles--show-scores))
+
+(defun bubbles--update-neighbourhood-score (size)
+ "Calculate and display score of active neighbourhood from its SIZE."
+ (if (> size 1)
+ (setq bubbles--neighbourhood-score (expt (- size 1) 2))
+ (setq bubbles--neighbourhood-score 0))
+ (bubbles--show-scores))
+
+(defun bubbles--show-scores ()
+ "Display current scores."
+ (save-excursion
+ (goto-char (or (next-single-property-change (point-min) 'status)
+ (point-max)))
+ (let ((inhibit-read-only t)
+ (pos (point)))
+ (delete-region (point) (point-max))
+ (insert (format "Selected: %4d\n" bubbles--neighbourhood-score))
+ (insert " ")
+ (add-text-properties (1- (point)) (point)
+ (list 'intangible t 'display
+ (cons 'space
+ (list :width bubbles--col-offset))))
+ (insert (format "Score: %4d" bubbles--score))
+ (put-text-property pos (point) 'status t))))
+
+(defun bubbles--game-over ()
+ "Finish bubbles game."
+ (bubbles--update-faces-or-images)
+ (setq bubbles--playing nil
+ bubbles--save-data nil)
+ ;; add bonus if all bubbles were removed
+ (when (= 0 (bubbles--count))
+ (setq bubbles--score (+ bubbles--score (* (bubbles--grid-height)
+ (bubbles--grid-width))))
+ (bubbles--show-scores))
+ ;; Game over message
+ (goto-char (point-max))
+ (let* ((inhibit-read-only t))
+ (insert "\n ")
+ (add-text-properties (1- (point)) (point)
+ (list 'intangible t 'display
+ (cons 'space
+ (list :width bubbles--col-offset))))
+ (insert "Game Over!"))
+ ;; save score
+ (gamegrid-add-score (format "bubbles-%s-%d-%d-%d-scores"
+ (symbol-name (bubbles--shift-mode))
+ (length (bubbles--colors))
+ (bubbles--grid-width) (bubbles--grid-height))
+ bubbles--score))
+
+(defun bubbles-plop ()
+ "Remove active bubbles region."
+ (interactive)
+ (when (and bubbles--playing
+ (> bubbles--neighbourhood-score 0))
+ (setq bubbles--save-data (list bubbles--score (buffer-string)))
+ (let ((inhibit-read-only t))
+ ;; blank out current neighbourhood
+ (let ((row (bubbles--row (point)))
+ (col (bubbles--col (point))))
+ (goto-char (point-max))
+ (while (not (bobp))
+ (backward-char)
+ (while (get-text-property (point) 'active)
+ (delete-char 1)
+ (insert (bubbles--empty-char))
+ (add-text-properties (1- (point)) (point) (list 'removed t
+ 'index -1))))
+ (bubbles--goto row col))
+ ;; show new score
+ (bubbles--update-score)
+ ;; update display and wait
+ (bubbles--update-faces-or-images)
+ (sit-for 0)
+ (sleep-for 0.2)
+ (discard-input)
+ ;; drop down
+ (let ((something-dropped nil))
+ (save-excursion
+ (dotimes (i (bubbles--grid-height))
+ (dotimes (j (bubbles--grid-width))
+ (bubbles--goto i j)
+ (while (get-text-property (point) 'removed)
+ (setq something-dropped (or (bubbles--shift 'top i j)
+ something-dropped))))))
+ ;; update display and wait
+ (bubbles--update-faces-or-images)
+ (when something-dropped
+ (sit-for 0)))
+ (discard-input)
+ ;; shift to left
+ (put-text-property (point-min) (point-max) 'removed nil)
+ (save-excursion
+ (goto-char (point-min))
+ (let ((removed-string (format "%c" (bubbles--empty-char))))
+ (while (search-forward removed-string nil t)
+ (put-text-property (1- (point)) (point) 'removed t))))
+ (let ((shifted nil))
+ (cond ((eq (bubbles--shift-mode) 'always)
+ (save-excursion
+ (dotimes (i (bubbles--grid-height))
+ (dotimes (j (bubbles--grid-width))
+ (bubbles--goto i j)
+ (while (get-text-property (point) 'removed)
+ (setq shifted (or (bubbles--shift 'right i j)
+ shifted))))))
+ (bubbles--update-faces-or-images)
+ (sleep-for 0.5))
+ (t ;; default shift-mode
+ (save-excursion
+ (dotimes (j (bubbles--grid-width))
+ (bubbles--goto (1- (bubbles--grid-height)) j)
+ (let ((shifted-cols 0))
+ (while (get-text-property (point) 'removed)
+ (setq shifted-cols (1+ shifted-cols))
+ (bubbles--shift 'right (1- (bubbles--grid-height)) j))
+ (dotimes (k shifted-cols)
+ (let ((i (- (bubbles--grid-height) 2)))
+ (while (>= i 0)
+ (setq shifted (or (bubbles--shift 'right i j)
+ shifted))
+ (setq i (1- i))))))))))
+ (when shifted
+ ;;(sleep-for 0.5)
+ (bubbles--update-faces-or-images)
+ (sit-for 0)))
+ (put-text-property (point-min) (point-max) 'removed nil)
+ (unless (bubbles--neighbourhood-available)
+ (bubbles--game-over)))
+ ;; undo
+ (setq buffer-undo-list '((apply bubbles-undo . nil)))
+ (force-mode-line-update)
+ (redisplay)))
+
+(defun bubbles-undo ()
+ "Undo last move."
+ (interactive)
+ (when bubbles--save-data
+ (let ((inhibit-read-only t)
+ (pos (point)))
+ (erase-buffer)
+ (insert (cadr bubbles--save-data))
+ (bubbles--update-faces-or-images)
+ (setq bubbles--score (car bubbles--save-data))
+ (goto-char pos))
+ (setq buffer-undo-list t)
+ (force-mode-line-update)
+ (redisplay)))
+
+(defun bubbles--shift (from row col)
+ "Move bubbles FROM one side to position ROW COL.
+Return t if new char is non-empty."
+ (save-excursion
+ (when (bubbles--goto row col)
+ (let ((char-org (char-after (point)))
+ (char-new (bubbles--empty-char))
+ (removed nil)
+ (trow row)
+ (tcol col)
+ (index -1))
+ (cond ((eq from 'top)
+ (setq trow (1- row)))
+ ((eq from 'left)
+ (setq tcol (1- col)))
+ ((eq from 'right)
+ (setq tcol (1+ col))))
+ (save-excursion
+ (when (bubbles--goto trow tcol)
+ (setq char-new (char-after (point)))
+ (setq removed (get-text-property (point) 'removed))
+ (setq index (get-text-property (point) 'index))
+ (bubbles--shift from trow tcol)))
+ (insert char-new)
+ (delete-char 1)
+ (add-text-properties (1- (point)) (point) (list 'index index
+ 'removed removed))
+ (not (eq char-new (bubbles--empty-char)))))))
+
+(defun bubbles--initialize-images ()
+ "Prepare images for playing `bubbles'."
+ (when (and (display-images-p)
+ (not (eq bubbles-graphics-theme 'ascii)))
+ (let ((template (case bubbles-graphics-theme
+ ('circles bubbles--image-template-circle)
+ ('balls bubbles--image-template-ball)
+ ('squares bubbles--image-template-square)
+ ('diamonds bubbles--image-template-diamond)
+ ('emacs bubbles--image-template-emacs))))
+ (setq bubbles--empty-image
+ (create-image (replace-regexp-in-string
+ "^\"\\(.*\\)\t.*c .*\",$"
+ "\"\\1\tc None\"," template)
+ 'xpm t
+ ;;:mask 'heuristic
+ :margin '(2 . 1)))
+ (setq bubbles--images
+ (mapcar (lambda (color)
+ (let* ((rgb (color-values color))
+ (red (nth 0 rgb))
+ (green (nth 1 rgb))
+ (blue (nth 2 rgb)))
+ (with-temp-buffer
+ (insert template)
+ (goto-char (point-min))
+ (re-search-forward
+ "^\"[0-9]+ [0-9]+ \\(.*?\\) .*\",$" nil t)
+ (goto-char (point-min))
+ (while (re-search-forward
+ "^\"\\(.*\\)\t.*c \\(#.*\\)\",$" nil t)
+ (let* ((crgb (color-values (match-string 2)))
+ (r (nth 0 crgb))
+ (g (nth 1 crgb))
+ (b (nth 2 crgb))
+ (brightness (/ (+ r g b) 3.0 256 256))
+ (val (sin (* brightness (/ pi 2))))
+ (rr (* red val))
+ (gg (* green val))
+ (bb (* blue val))
+ ;;(rr (/ (+ red r) 2))
+ ;;(gg (/ (+ green g) 2))
+ ;;(bb (/ (+ blue b) 2))
+ (color (format "#%02x%02x%02x"
+ (/ rr 256) (/ gg 256)
+ (/ bb 256))))
+ (replace-match (format "\"\\1\tc %s\","
+ (upcase color)))))
+ (create-image (buffer-string) 'xpm t
+ :margin '(2 . 1)
+ ;;:mask 'heuristic
+ ))))
+ (bubbles--colors))))
+ ;; check images
+ (setq bubbles--images-ok bubbles--empty-image)
+ (mapc (lambda (elt)
+ (setq bubbles--images-ok (and bubbles--images-ok elt)))
+ bubbles--images)))
+
+(defun bubbles--update-faces-or-images ()
+ "Update faces and/or images, depending on graphics mode."
+ (bubbles--set-faces)
+ (bubbles--show-images))
+
+(defun bubbles--set-faces ()
+ "Update faces in the bubbles buffer."
+ (unless (and (display-images-p)
+ bubbles--images-ok
+ (not (eq bubbles-graphics-theme 'ascii)))
+ (when (display-color-p)
+ (save-excursion
+ (let ((inhibit-read-only t))
+ (dotimes (i (bubbles--grid-height))
+ (dotimes (j (bubbles--grid-width))
+ (bubbles--goto i j)
+ (let* ((index (get-text-property (point) 'index))
+ (face (nth index bubbles--faces))
+ (fg-col (face-foreground face)))
+ (when (get-text-property (point) 'active)
+ (set-face-foreground 'bubbles--highlight-face "#ff0000")
+ (setq face 'bubbles--highlight-face))
+ (put-text-property (point) (1+ (point))
+ 'face face)))))))))
+
+(defun bubbles--show-images ()
+ "Update images in the bubbles buffer."
+ (bubbles--remove-overlays)
+ (if (and (display-images-p)
+ bubbles--images-ok
+ (not (eq bubbles-graphics-theme 'ascii)))
+ (save-excursion
+ (goto-char (point-min))
+ (forward-line 1)
+ (let ((inhibit-read-only t)
+ char)
+ (dotimes (i (bubbles--grid-height))
+ (dotimes (j (bubbles--grid-width))
+ (forward-char 1)
+ (let ((index (or (get-text-property (point) 'index) -1)))
+ (let ((img bubbles--empty-image))
+ (if (>= index 0)
+ (setq img (nth index bubbles--images)))
+ (put-text-property (point) (1+ (point))
+ 'display (cons img nil)))))
+ (forward-line 1))))
+ (save-excursion
+ (let ((inhibit-read-only t))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (let ((disp-prop (get-text-property (point) 'display)))
+ (if (and (listp disp-prop)
+ (listp (car disp-prop))
+ (eq (caar disp-prop) 'image))
+ (put-text-property (point) (1+ (point)) 'display nil))
+ (forward-char 1)))
+ (put-text-property (point-min) (point-max) 'pointer 'arrow)))))
+
+(provide 'bubbles)
+
+;; arch-tag: 2cd7237a-b0ad-400d-a7fd-75f676dceb70
+;;; bubbles.el ends here
diff --git a/lisp/play/decipher.el b/lisp/play/decipher.el
index 6b1644d58b0..930cee7f9d5 100644
--- a/lisp/play/decipher.el
+++ b/lisp/play/decipher.el
@@ -352,7 +352,7 @@ The most useful commands are:
(t
(error "Bad location")))))
(let (goal-column)
- (previous-line 1)))
+ (forward-line -1)))
(let ((char-a (following-char))
(char-b (decipher-last-command-char)))
(or (and (not (= ?w (char-syntax char-a)))
diff --git a/lisp/play/gamegrid.el b/lisp/play/gamegrid.el
index 6cccb7b0f9c..d604715d4d7 100644
--- a/lisp/play/gamegrid.el
+++ b/lisp/play/gamegrid.el
@@ -66,7 +66,8 @@
(defvar gamegrid-score-file-length 50
"Number of high scores to keep")
-(defvar gamegrid-user-score-file-directory "~/.emacs.d/games"
+(defvar gamegrid-user-score-file-directory
+ (concat user-emacs-directory "games")
"A directory for game scores which can't be shared.
If Emacs was built without support for shared game scores, then this
directory will be used.")
@@ -319,7 +320,7 @@ static unsigned char gamegrid_bits[] = {
(< max-height height))
(setq max-height height))))))
(when (and max-height (< max-height 1))
- (set-face-attribute gamegrid-face nil :height max-height)))))
+ (face-spec-set gamegrid-face `((t :height ,max-height)))))))
(defun gamegrid-initialize-display ()
(setq gamegrid-display-mode (gamegrid-display-type))
@@ -385,6 +386,7 @@ static unsigned char gamegrid_bits[] = {
(defun gamegrid-init (options)
(setq buffer-read-only t
truncate-lines t
+ line-spacing 0
gamegrid-display-options options)
(buffer-disable-undo (current-buffer))
(gamegrid-initialize-display))
@@ -393,7 +395,7 @@ static unsigned char gamegrid_bits[] = {
(defun gamegrid-start-timer (period func)
(setq gamegrid-timer
- (if (featurep 'itimer)
+ (if (featurep 'xemacs)
(start-itimer "Gamegrid"
func
period
@@ -418,7 +420,7 @@ static unsigned char gamegrid_bits[] = {
(defun gamegrid-kill-timer ()
(if gamegrid-timer
- (if (featurep 'itimer)
+ (if (featurep 'xemacs)
(delete-itimer gamegrid-timer)
(cancel-timer gamegrid-timer)))
(setq gamegrid-timer nil))
diff --git a/lisp/play/handwrite.el b/lisp/play/handwrite.el
index 5e6c77e64b9..236c415dfcd 100644
--- a/lisp/play/handwrite.el
+++ b/lisp/play/handwrite.el
@@ -226,7 +226,7 @@ Variables: handwrite-linespace (default 12)
(forward-line 1)
))
(switch-to-buffer ps-buf-name)
- (next-line 1)
+ (forward-line 1)
(insert "showpage exec Hwsave restore\n\n")
(insert "%%Pages " (number-to-string ipage) " 0\n")
(insert "%%EOF\n")
diff --git a/lisp/play/landmark.el b/lisp/play/landmark.el
index 1eb8df8d58c..ca5aa1d6089 100644
--- a/lisp/play/landmark.el
+++ b/lisp/play/landmark.el
@@ -1052,13 +1052,13 @@ mouse-1: get robot moving, mouse-2: play on this square")))
"Move point down one row on the Lm board."
(interactive)
(if (< (lm-point-y) lm-board-height)
- (next-line 1)));;; lm-square-height)))
+ (forward-line 1)));;; lm-square-height)))
(defun lm-move-up ()
"Move point up one row on the Lm board."
(interactive)
(if (> (lm-point-y) 1)
- (previous-line lm-square-height)))
+ (forward-line (- lm-square-height))))
(defun lm-move-ne ()
"Move point North East on the Lm board."
diff --git a/lisp/play/solitaire.el b/lisp/play/solitaire.el
index b027db88ad6..e5dde1fe79c 100644
--- a/lisp/play/solitaire.el
+++ b/lisp/play/solitaire.el
@@ -400,7 +400,7 @@ which a stone will be taken away) and target."
(<= (current-column) solitaire-end-x)
(>= (solitaire-current-line) solitaire-start-y)
(<= (solitaire-current-line) solitaire-end-y)
- (mapcar
+ (mapc
(lambda (movesymbol)
(if (listp (solitaire-possible-move movesymbol))
(setq count (1+ count))))
@@ -446,13 +446,13 @@ Seen in info on text lines."
;; right S-left
(solitaire-auto-eval nil))
(solitaire-center-point)
- (mapcar (lambda (op)
- (if (memq op '(S-left S-right S-up S-down))
- (sit-for 0.2))
- (execute-kbd-macro (vector op))
- (if (memq op '(S-left S-right S-up S-down))
- (sit-for 0.4)))
- allmoves))
+ (mapc (lambda (op)
+ (if (memq op '(S-left S-right S-up S-down))
+ (sit-for 0.2))
+ (execute-kbd-macro (vector op))
+ (if (memq op '(S-left S-right S-up S-down))
+ (sit-for 0.4)))
+ allmoves))
(solitaire-do-check))
(provide 'solitaire)
diff --git a/lisp/play/yow.el b/lisp/play/yow.el
index 28fc453577b..702052f52d6 100644
--- a/lisp/play/yow.el
+++ b/lisp/play/yow.el
@@ -112,6 +112,8 @@ If called interactively, display a list of matches."
;;
;; written by Kayvan Aghaiepour
+(declare-function doctor-ret-or-read "doctor" (arg))
+
;;;###autoload
(defun psychoanalyze-pinhead ()
"Zippy goes to the analyst."
diff --git a/lisp/play/zone.el b/lisp/play/zone.el
index 71ae01d23d9..8a563ca8b27 100644
--- a/lisp/play/zone.el
+++ b/lisp/play/zone.el
@@ -74,6 +74,7 @@ If nil, don't interrupt for about 1^26 seconds.")
zone-pgm-drip-fretfully
zone-pgm-five-oclock-swan-dive
zone-pgm-martini-swan-dive
+ zone-pgm-rat-race
zone-pgm-paragraph-spaz
zone-pgm-stress
zone-pgm-stress-destress
@@ -85,30 +86,10 @@ If nil, don't interrupt for about 1^26 seconds.")
,@body))
(defmacro zone-hiding-modeline (&rest body)
- `(let (bg mode-line-fg mode-line-bg mode-line-box)
- (unwind-protect
- (progn
- (when (and (= 0 (get 'zone 'modeline-hidden-level))
- (display-color-p))
- (setq bg (face-background 'default)
- mode-line-box (face-attribute 'mode-line :box)
- mode-line-fg (face-attribute 'mode-line :foreground)
- mode-line-bg (face-attribute 'mode-line :background))
- (set-face-attribute 'mode-line nil
- :foreground bg
- :background bg
- :box nil))
- (put 'zone 'modeline-hidden-level
- (1+ (get 'zone 'modeline-hidden-level)))
- ,@body)
- (put 'zone 'modeline-hidden-level
- (1- (get 'zone 'modeline-hidden-level)))
- (when (and (> 1 (get 'zone 'modeline-hidden-level))
- mode-line-fg)
- (set-face-attribute 'mode-line nil
- :foreground mode-line-fg
- :background mode-line-bg
- :box mode-line-box)))))
+ ;; This formerly worked by temporarily altering face `mode-line',
+ ;; which did not even work right, it seems.
+ `(let (mode-line-format)
+ ,@body))
(defun zone-call (program &optional timeout)
"Call PROGRAM in a zoned way.
@@ -157,6 +138,7 @@ If the element is a function or a list of a function and a number,
(sit-for 0 500)
(let ((pgm (elt zone-programs (random (length zone-programs))))
(ct (and f (frame-parameter f 'cursor-type)))
+ (show-trailing-whitespace nil)
(restore (list '(kill-buffer outbuf))))
(when ct
(modify-frame-parameters f '((cursor-type . (bar . 0))))
@@ -398,20 +380,20 @@ If the element is a function or a list of a function and a number,
(let* ((specs (apply
'vector
(let (res)
- (mapcar (lambda (ent)
- (let* ((beg (car ent))
- (end (cdr ent))
- (amt (if random-style
- (funcall random-style)
- (- (random 7) 3))))
- (when (< (- end (abs amt)) beg)
- (setq amt (random (- end beg))))
- (unless (= 0 amt)
- (setq res
- (cons
- (vector amt beg (- end (abs amt)))
- res)))))
- (zone-line-specs))
+ (mapc (lambda (ent)
+ (let* ((beg (car ent))
+ (end (cdr ent))
+ (amt (if random-style
+ (funcall random-style)
+ (- (random 7) 3))))
+ (when (< (- end (abs amt)) beg)
+ (setq amt (random (- end beg))))
+ (unless (= 0 amt)
+ (setq res
+ (cons
+ (vector amt beg (- end (abs amt)))
+ res)))))
+ (zone-line-specs))
res)))
(n (length specs))
amt aamt cut paste txt i ent)
@@ -507,7 +489,7 @@ If the element is a function or a list of a function and a number,
(wait 0.15)
newpos fall-p)
(while (when (save-excursion
- (next-line 1)
+ (forward-line 1)
(and (= col (current-column))
(setq newpos (point))
(string= spaces (buffer-substring-no-properties
@@ -568,6 +550,17 @@ If the element is a function or a list of a function and a number,
(defun zone-pgm-martini-swan-dive ()
(zone-pgm-drip t t))
+(defun zone-pgm-rat-race ()
+ (while (not (input-pending-p))
+ (zone-call '((zone-pgm-rotate 10)
+ (zone-pgm-drip-fretfully 15)
+ (zone-pgm-drip 10)
+ ((lambda ()
+ (goto-char (point-min))
+ (while (re-search-forward " +$" nil t)
+ (delete-region (match-beginning 0) (match-end 0))))
+ 5)))))
+
;;;; paragraph spazzing (for textish modes)
@@ -692,6 +685,7 @@ If nil, `zone-pgm-random-life' chooses a value from 0-3 (inclusive).")
(life (or zone-pgm-random-life-wait (random 4)))
(kill-buffer nil))))
+
(random t)
;;;;;;;;;;;;;;;
diff --git a/lisp/printing.el b/lisp/printing.el
index f83509d085e..6de22743c97 100644
--- a/lisp/printing.el
+++ b/lisp/printing.el
@@ -6,11 +6,11 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, print, PostScript
-;; Version: 6.8.4
+;; Version: 6.9.2
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
-(defconst pr-version "6.8.4"
- "printing.el, v 6.8.4 <2005/06/11 vinicius>
+(defconst pr-version "6.9.2"
+ "printing.el, v 6.9.2 <2007/10/26 vinicius>
Please send all bug fixes and enhancements to
Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -1093,46 +1093,544 @@ If SUFFIX is non-nil, add that at the end of the file name."
(set-default-file-modes umask)))))
-;; GNU Emacs
-(defalias 'pr-e-frame-char-height 'frame-char-height)
-(defalias 'pr-e-frame-char-width 'frame-char-width)
-(defalias 'pr-e-mouse-pixel-position 'mouse-pixel-position)
-;; XEmacs
-(defalias 'pr-x-add-submenu 'add-submenu)
-(defalias 'pr-x-event-function 'event-function)
-(defalias 'pr-x-event-object 'event-object)
-(defalias 'pr-x-find-menu-item 'find-menu-item)
-(defalias 'pr-x-font-height 'font-height)
-(defalias 'pr-x-font-width 'font-width)
-(defalias 'pr-x-get-popup-menu-response 'get-popup-menu-response)
-(defalias 'pr-x-make-event 'make-event)
-(defalias 'pr-x-misc-user-event-p 'misc-user-event-p)
-(defalias 'pr-x-relabel-menu-item 'relabel-menu-item)
-(defalias 'pr-x-event-x-pixel 'event-x-pixel)
-(defalias 'pr-x-event-y-pixel 'event-y-pixel)
+(eval-when-compile
+ ;; User Interface --- declared here to avoid compiler warnings
+ (defvar pr-path-style)
+ (defvar pr-auto-region)
+ (defvar pr-menu-char-height)
+ (defvar pr-menu-char-width)
+ (defvar pr-menu-lock)
+ (defvar pr-ps-printer-alist)
+ (defvar pr-txt-printer-alist)
+ (defvar pr-ps-utility-alist)
+
+
+ ;; Internal fun alias to avoid compilation gripes
+ (defalias 'pr-menu-lookup 'ignore)
+ (defalias 'pr-menu-lock 'ignore)
+ (defalias 'pr-menu-alist 'ignore)
+ (defalias 'pr-even-or-odd-pages 'ignore)
+ (defalias 'pr-menu-get-item 'ignore)
+ (defalias 'pr-menu-set-item-name 'ignore)
+ (defalias 'pr-menu-set-utility-title 'ignore)
+ (defalias 'pr-menu-set-ps-title 'ignore)
+ (defalias 'pr-menu-set-txt-title 'ignore)
+ (defalias 'pr-region-active-p 'ignore)
+ (defalias 'pr-do-update-menus 'ignore)
+ (defalias 'pr-update-mode-line 'ignore)
+ (defalias 'pr-f-read-string 'ignore)
+ (defalias 'pr-f-set-keymap-parents 'ignore)
+ (defalias 'pr-keep-region-active 'ignore))
+
+
+;; Internal Vars --- defined here to avoid compiler warnings
+(defvar pr-menu-print-item "print"
+ "Non-nil means that menu binding was not done.
+
+Used by `pr-menu-bind' and `pr-update-menus'.")
+
+(defvar pr-ps-printer-menu-modified t
+ "Non-nil means `pr-ps-printer-alist' was modified and we need to update menu.")
+
+(defvar pr-txt-printer-menu-modified t
+ "Non-nil means `pr-txt-printer-alist' was modified and we need to update menu.")
+
+(defvar pr-ps-utility-menu-modified t
+ "Non-nil means `pr-ps-utility-alist' was modified and we need to update menu.")
+
+(defconst pr-even-or-odd-alist
+ '((nil . "Print All Pages")
+ (even-page . "Print Even Pages")
+ (odd-page . "Print Odd Pages")
+ (even-sheet . "Print Even Sheets")
+ (odd-sheet . "Print Odd Sheets")))
+
+
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; XEmacs Definitions
+
(cond
((featurep 'xemacs) ; XEmacs
- (defvar current-menubar nil)
- (defvar current-mouse-event nil)
- (defvar zmacs-region-stays nil)
+ ;; XEmacs
(defalias 'pr-f-set-keymap-parents 'set-keymap-parents)
(defalias 'pr-f-set-keymap-name 'set-keymap-name)
+
+ ;; XEmacs
(defun pr-f-read-string (prompt initial history default)
(let ((str (read-string prompt initial)))
(if (and str (not (string= str "")))
str
default)))
+
+ ;; XEmacs
+ (defvar zmacs-region-stays nil)
+
+ ;; XEmacs
(defun pr-keep-region-active ()
- (setq zmacs-region-stays t)))
+ (setq zmacs-region-stays t))
+
+ ;; XEmacs
+ (defun pr-region-active-p ()
+ (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p)))
+
+ ;; XEmacs
+ (defun pr-menu-char-height ()
+ (font-height (face-font 'default)))
+
+ ;; XEmacs
+ (defun pr-menu-char-width ()
+ (font-width (face-font 'default)))
+
+ ;; XEmacs
+ (defmacro pr-xemacs-global-menubar (&rest body)
+ `(save-excursion
+ (let ((temp (get-buffer-create (make-temp-name " *Temp"))))
+ ;; be sure to access global menubar
+ (set-buffer temp)
+ ,@body
+ (kill-buffer temp))))
+
+ ;; XEmacs
+ (defun pr-global-menubar (pr-menu-spec)
+ ;; Menu binding
+ (pr-xemacs-global-menubar
+ (add-submenu nil (cons "Printing" pr-menu-spec) "Apps"))
+ (setq pr-menu-print-item nil))
+
+ ;; XEmacs
+ (defvar current-mouse-event nil)
+ (defun pr-menu-position (entry index horizontal)
+ (make-event
+ 'button-release
+ (list 'button 1
+ 'x (- (event-x-pixel current-mouse-event) ; X
+ (* horizontal pr-menu-char-width))
+ 'y (- (event-y-pixel current-mouse-event) ; Y
+ (* (pr-menu-index entry index) pr-menu-char-height)))))
+
+ (defvar pr-menu-position nil)
+ (defvar pr-menu-state nil)
+
+ ;; XEmacs
+ (defvar current-menubar nil) ; to avoid compilation gripes
+ (defun pr-menu-lookup (path)
+ (car (find-menu-item current-menubar (cons "Printing" path))))
+
+ ;; XEmacs
+ (defun pr-menu-lock (entry index horizontal state path)
+ (when pr-menu-lock
+ (or (and pr-menu-position (eq state pr-menu-state))
+ (setq pr-menu-position (pr-menu-position entry index horizontal)
+ pr-menu-state state))
+ (let* ((menu (pr-menu-lookup path))
+ (result (get-popup-menu-response menu pr-menu-position)))
+ (and (misc-user-event-p result)
+ (funcall (event-function result)
+ (event-object result))))
+ (setq pr-menu-position nil)))
+
+ ;; XEmacs
+ (defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
+
+ ;; XEmacs
+ (defvar pr-ps-name-old "PostScript Printers")
+ (defvar pr-txt-name-old "Text Printers")
+ (defvar pr-ps-utility-old "PostScript Utility")
+ (defvar pr-even-or-odd-old "Print All Pages")
+
+ ;; XEmacs
+ (defun pr-do-update-menus (&optional force)
+ (pr-menu-alist pr-ps-printer-alist
+ 'pr-ps-name
+ 'pr-menu-set-ps-title
+ '("Printing")
+ 'pr-ps-printer-menu-modified
+ force
+ pr-ps-name-old
+ 'postscript 2)
+ (pr-menu-alist pr-txt-printer-alist
+ 'pr-txt-name
+ 'pr-menu-set-txt-title
+ '("Printing")
+ 'pr-txt-printer-menu-modified
+ force
+ pr-txt-name-old
+ 'text 2)
+ (let ((save-var pr-ps-utility-menu-modified))
+ (pr-menu-alist pr-ps-utility-alist
+ 'pr-ps-utility
+ 'pr-menu-set-utility-title
+ '("Printing" "PostScript Print" "File")
+ 'save-var
+ force
+ pr-ps-utility-old
+ nil 1))
+ (pr-menu-alist pr-ps-utility-alist
+ 'pr-ps-utility
+ 'pr-menu-set-utility-title
+ '("Printing" "PostScript Preview" "File")
+ 'pr-ps-utility-menu-modified
+ force
+ pr-ps-utility-old
+ nil 1)
+ (pr-even-or-odd-pages ps-even-or-odd-pages force))
+
+ ;; XEmacs
+ (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
+ entry index)
+ (when (and alist (or force (symbol-value modified-sym)))
+ (pr-xemacs-global-menubar
+ (add-submenu menu-path
+ (pr-menu-create name alist var-sym
+ fun entry index)))
+ (funcall fun (symbol-value var-sym))
+ (set modified-sym nil)))
+
+ ;; XEmacs
+ (defun pr-relabel-menu-item (newname var-sym)
+ (pr-xemacs-global-menubar
+ (relabel-menu-item
+ (list "Printing" (symbol-value var-sym))
+ newname)
+ (set var-sym newname)))
+
+ ;; XEmacs
+ (defun pr-menu-set-ps-title (value &optional item entry index)
+ (pr-relabel-menu-item (format "PostScript Printer: %s" value)
+ 'pr-ps-name-old)
+ (pr-ps-set-printer value)
+ (and index
+ (pr-menu-lock entry index 12 'toggle nil)))
+
+ ;; XEmacs
+ (defun pr-menu-set-txt-title (value &optional item entry index)
+ (pr-relabel-menu-item (format "Text Printer: %s" value)
+ 'pr-txt-name-old)
+ (pr-txt-set-printer value)
+ (and index
+ (pr-menu-lock entry index 12 'toggle nil)))
+
+ ;; XEmacs
+ (defun pr-menu-set-utility-title (value &optional item entry index)
+ (pr-xemacs-global-menubar
+ (let ((newname (format "%s" value)))
+ (relabel-menu-item
+ (list "Printing" "PostScript Print" "File" pr-ps-utility-old)
+ newname)
+ (relabel-menu-item
+ (list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
+ newname)
+ (setq pr-ps-utility-old newname)))
+ (pr-ps-set-utility value)
+ (and index
+ (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
+
+ ;; XEmacs
+ (defun pr-even-or-odd-pages (value &optional no-lock)
+ (pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
+ 'pr-even-or-odd-old)
+ (setq ps-even-or-odd-pages value)
+ (or no-lock
+ (pr-menu-lock 'postscript-options 8 12 'toggle nil)))
+
+ )
+ (t ; GNU Emacs
+ ;; Do nothing
+ )) ; end cond featurep
+
+
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; GNU Emacs Definitions
+
+
+(cond
+ ((featurep 'xemacs) ; XEmacs
+ ;; Do nothing
+ )
(t ; GNU Emacs
- (defvar deactivate-mark nil)
+ ;; GNU Emacs
(defalias 'pr-f-set-keymap-parents 'set-keymap-parent)
(defalias 'pr-f-set-keymap-name 'ignore)
(defalias 'pr-f-read-string 'read-string)
+
+ ;; GNU Emacs
+ (defvar deactivate-mark)
+
+ ;; GNU Emacs
(defun pr-keep-region-active ()
- (setq deactivate-mark nil))))
+ (setq deactivate-mark nil))
+
+ ;; GNU Emacs
+ (defun pr-region-active-p ()
+ (and pr-auto-region transient-mark-mode mark-active))
+
+ ;; GNU Emacs
+ (defun pr-menu-char-height ()
+ (frame-char-height))
+
+ ;; GNU Emacs
+ (defun pr-menu-char-width ()
+ (frame-char-width))
+
+ (defvar pr-menu-bar nil
+ "Specify Printing menu-bar entry.")
+
+ ;; GNU Emacs
+ ;; Menu binding
+ ;; Replace existing "print" item by "Printing" item.
+ ;; If you're changing this file, you'll load it a second,
+ ;; third... time, but "print" item exists only in the first load.
+ (eval-when-compile
+ (require 'easymenu)) ; to avoid compilation gripes
+
+ (eval-and-compile
+ (cond
+ ;; GNU Emacs 20
+ ((< emacs-major-version 21)
+ (defun pr-global-menubar (pr-menu-spec)
+ (require 'easymenu)
+ (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
+ (when pr-menu-print-item
+ (easy-menu-remove-item nil '("tools") pr-menu-print-item)
+ (setq pr-menu-print-item nil
+ pr-menu-bar (vector 'menu-bar 'tools
+ (pr-get-symbol "Printing")))))
+ )
+ ;; GNU Emacs 21 & 22
+ (t
+ (defun pr-global-menubar (pr-menu-spec)
+ (require 'easymenu)
+ (let ((menu-file (if (= emacs-major-version 21)
+ '("menu-bar" "files") ; GNU Emacs 21
+ '("menu-bar" "file")))) ; GNU Emacs 22 or higher
+ (cond
+ (pr-menu-print-item
+ (easy-menu-add-item global-map menu-file
+ (easy-menu-create-menu "Print" pr-menu-spec)
+ "print-buffer")
+ (dolist (item '("print-buffer" "print-region"
+ "ps-print-buffer-faces" "ps-print-region-faces"
+ "ps-print-buffer" "ps-print-region"))
+ (easy-menu-remove-item global-map menu-file item))
+ (setq pr-menu-print-item nil
+ pr-menu-bar (vector 'menu-bar
+ (pr-get-symbol (nth 1 menu-file))
+ (pr-get-symbol "Print"))))
+ (t
+ (easy-menu-add-item global-map menu-file
+ (easy-menu-create-menu "Print" pr-menu-spec)))
+ )))
+ )))
+
+ (eval-and-compile
+ (cond
+ (ps-windows-system
+ ;; GNU Emacs for Windows 9x/NT
+ (defun pr-menu-position (entry index horizontal)
+ (let ((pos (cdr (mouse-pixel-position))))
+ (list
+ (list (or (car pos) 0) ; X
+ (- (or (cdr pos) 0) ; Y
+ (* (pr-menu-index entry index) pr-menu-char-height)))
+ (selected-frame)))) ; frame
+ )
+ (t
+ ;; GNU Emacs
+ (defun pr-menu-position (entry index horizontal)
+ (let ((pos (cdr (mouse-pixel-position))))
+ (list
+ (list (- (or (car pos) 0) ; X
+ (* horizontal pr-menu-char-width))
+ (- (or (cdr pos) 0) ; Y
+ (* (pr-menu-index entry index) pr-menu-char-height)))
+ (selected-frame)))) ; frame
+ )))
+
+ (defvar pr-menu-position nil)
+ (defvar pr-menu-state nil)
+
+ ;; GNU Emacs
+ (defun pr-menu-lookup (path)
+ (lookup-key global-map
+ (if path
+ (vconcat pr-menu-bar
+ (mapcar 'pr-get-symbol
+ (if (listp path)
+ path
+ (list path))))
+ pr-menu-bar)))
+
+ ;; GNU Emacs
+ (defun pr-menu-lock (entry index horizontal state path)
+ (when pr-menu-lock
+ (or (and pr-menu-position (eq state pr-menu-state))
+ (setq pr-menu-position (pr-menu-position entry index horizontal)
+ pr-menu-state state))
+ (let* ((menu (pr-menu-lookup path))
+ (result (x-popup-menu pr-menu-position menu)))
+ (and result
+ (let ((command (lookup-key menu (vconcat result))))
+ (if (fboundp command)
+ (funcall command)
+ (eval command)))))
+ (setq pr-menu-position nil)))
+
+ ;; GNU Emacs
+ (defalias 'pr-update-mode-line 'force-mode-line-update)
+
+ ;; GNU Emacs
+ (defun pr-do-update-menus (&optional force)
+ (pr-menu-alist pr-ps-printer-alist
+ 'pr-ps-name
+ 'pr-menu-set-ps-title
+ "PostScript Printers"
+ 'pr-ps-printer-menu-modified
+ force
+ "PostScript Printers"
+ 'postscript 2)
+ (pr-menu-alist pr-txt-printer-alist
+ 'pr-txt-name
+ 'pr-menu-set-txt-title
+ "Text Printers"
+ 'pr-txt-printer-menu-modified
+ force
+ "Text Printers"
+ 'text 2)
+ (let ((save-var pr-ps-utility-menu-modified))
+ (pr-menu-alist pr-ps-utility-alist
+ 'pr-ps-utility
+ 'pr-menu-set-utility-title
+ '("PostScript Print" "File" "PostScript Utility")
+ 'save-var
+ force
+ "PostScript Utility"
+ nil 1))
+ (pr-menu-alist pr-ps-utility-alist
+ 'pr-ps-utility
+ 'pr-menu-set-utility-title
+ '("PostScript Preview" "File" "PostScript Utility")
+ 'pr-ps-utility-menu-modified
+ force
+ "PostScript Utility"
+ nil 1)
+ (pr-even-or-odd-pages ps-even-or-odd-pages force))
+
+ ;; GNU Emacs
+ (defun pr-menu-get-item (name-list)
+ ;; NAME-LIST is a string or a list of strings.
+ (or (listp name-list)
+ (setq name-list (list name-list)))
+ (and name-list
+ (let* ((reversed (reverse name-list))
+ (name (pr-get-symbol (car reversed)))
+ (path (nreverse (cdr reversed)))
+ (menu (lookup-key
+ global-map
+ (vconcat pr-menu-bar
+ (mapcar 'pr-get-symbol path)))))
+ (assq name (nthcdr 2 menu)))))
+
+ ;; GNU Emacs
+ (defvar pr-temp-menu nil)
+
+ ;; GNU Emacs
+ (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
+ entry index)
+ (when (and alist (or force (symbol-value modified-sym)))
+ (easy-menu-define pr-temp-menu nil ""
+ (pr-menu-create name alist var-sym fun entry index))
+ (let ((item (pr-menu-get-item menu-path)))
+ (and item
+ (let* ((binding (nthcdr 3 item))
+ (key-binding (cdr binding)))
+ (setcar binding pr-temp-menu)
+ (and key-binding (listp (car key-binding))
+ (setcdr binding (cdr key-binding))) ; skip KEY-BINDING
+ (funcall fun (symbol-value var-sym) item))))
+ (set modified-sym nil)))
+
+ ;; GNU Emacs
+ (defun pr-menu-set-item-name (item name)
+ (and item
+ (setcar (nthcdr 2 item) name))) ; ITEM-NAME
+
+ ;; GNU Emacs
+ (defun pr-menu-set-ps-title (value &optional item entry index)
+ (pr-menu-set-item-name (or item
+ (pr-menu-get-item "PostScript Printers"))
+ (format "PostScript Printer: %s" value))
+ (pr-ps-set-printer value)
+ (and index
+ (pr-menu-lock entry index 12 'toggle nil)))
+
+ ;; GNU Emacs
+ (defun pr-menu-set-txt-title (value &optional item entry index)
+ (pr-menu-set-item-name (or item
+ (pr-menu-get-item "Text Printers"))
+ (format "Text Printer: %s" value))
+ (pr-txt-set-printer value)
+ (and index
+ (pr-menu-lock entry index 12 'toggle nil)))
+
+ ;; GNU Emacs
+ (defun pr-menu-set-utility-title (value &optional item entry index)
+ (let ((name (symbol-name value)))
+ (if item
+ (pr-menu-set-item-name item name)
+ (pr-menu-set-item-name
+ (pr-menu-get-item
+ '("PostScript Print" "File" "PostScript Utility"))
+ name)
+ (pr-menu-set-item-name
+ (pr-menu-get-item
+ '("PostScript Preview" "File" "PostScript Utility"))
+ name)))
+ (pr-ps-set-utility value)
+ (and index
+ (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
+
+ ;; GNU Emacs
+ (defun pr-even-or-odd-pages (value &optional no-lock)
+ (pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
+ (cdr (assq value pr-even-or-odd-alist)))
+ (setq ps-even-or-odd-pages value)
+ (or no-lock
+ (pr-menu-lock 'postscript-options 8 12 'toggle nil)))
+
+ )) ; end cond featurep
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Internal Functions (I)
+
+
+(defun pr-dosify-file-name (path)
+ "Replace unix-style directory separator character with dos/windows one."
+ (interactive "sPath: ")
+ (if (eq pr-path-style 'windows)
+ (subst-char-in-string ?/ ?\\ path)
+ path))
+
+
+(defun pr-unixify-file-name (path)
+ "Replace dos/windows-style directory separator character with unix one."
+ (interactive "sPath: ")
+ (if (eq pr-path-style 'windows)
+ (subst-char-in-string ?\\ ?/ path)
+ path))
+
+
+(defun pr-standard-file-name (path)
+ "Ensure the proper directory separator depending on the OS.
+That is, if Emacs is running on DOS/Windows, ensure dos/windows-style directory
+separator; otherwise, ensure unix-style directory separator."
+ (if (or pr-cygwin-system ps-windows-system)
+ (subst-char-in-string ?/ ?\\ path)
+ (subst-char-in-string ?\\ ?/ path)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1168,7 +1666,7 @@ If SUFFIX is non-nil, add that at the end of the file name."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; User Interface (I)
+;; User Interface
(defgroup printing nil
@@ -1199,39 +1697,6 @@ Valid values are:
:group 'printing)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Internal Functions (I)
-
-
-(defun pr-dosify-file-name (path)
- "Replace unix-style directory separator character with dos/windows one."
- (interactive "sPath: ")
- (if (eq pr-path-style 'windows)
- (subst-char-in-string ?/ ?\\ path)
- path))
-
-
-(defun pr-unixify-file-name (path)
- "Replace dos/windows-style directory separator character with unix one."
- (interactive "sPath: ")
- (if (eq pr-path-style 'windows)
- (subst-char-in-string ?\\ ?/ path)
- path))
-
-
-(defun pr-standard-file-name (path)
- "Ensure the proper directory separator depending on the OS.
-That is, if Emacs is running on DOS/Windows, ensure dos/windows-style directory
-separator; otherwise, ensure unix-style directory separator."
- (if (or pr-cygwin-system ps-windows-system)
- (subst-char-in-string ?/ ?\\ path)
- (subst-char-in-string ?\\ ?/ path)))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; User Interface (II)
-
-
(defcustom pr-path-alist
'((unix PATH)
(cygwin PATH)
@@ -1587,7 +2052,7 @@ DEFAULT It's a way to set default values when this entry is selected.
(VARIABLE . VALUE)
- That associates VARIABLE with VALUE. when this entry is
+ Which associates VARIABLE with VALUE. When this entry is
selected, it's executed the following command:
(set VARIABLE (eval VALUE))
@@ -2125,7 +2590,7 @@ DEFAULT It's a way to set default values when this entry is selected.
(VARIABLE-SYM . VALUE)
- That associates VARIABLE-SYM with VALUE. when this entry is
+ Which associates VARIABLE-SYM with VALUE. When this entry is
selected, it's executed the following command:
(set (make-local-variable VARIABLE-SYM) (eval VALUE))
@@ -2303,7 +2768,7 @@ DEFAULT It's a way to set default values when this entry is selected.
(VARIABLE . VALUE)
- That associates VARIABLE with VALUE. when this entry is
+ Which associates VARIABLE with VALUE. When this entry is
selected, it's executed the following command:
(set VARIABLE (eval VALUE))
@@ -2426,11 +2891,7 @@ See also `pr-menu-char-height' and `pr-menu-char-width'."
:group 'printing)
-(defcustom pr-menu-char-height
- (cond ((featurep 'xemacs) ; XEmacs
- (pr-x-font-height (face-font 'default)))
- (t ; GNU Emacs
- (pr-e-frame-char-height)))
+(defcustom pr-menu-char-height (pr-menu-char-height)
"*Specify menu char height in pixels.
This variable is used to guess which vertical position should be locked the
@@ -2441,11 +2902,7 @@ See also `pr-menu-lock' and `pr-menu-char-width'."
:group 'printing)
-(defcustom pr-menu-char-width
- (cond ((featurep 'xemacs) ; XEmacs
- (pr-x-font-width (face-font 'default)))
- (t ; GNU Emacs
- (pr-e-frame-char-width)))
+(defcustom pr-menu-char-width (pr-menu-char-width)
"*Specify menu char width in pixels.
This variable is used to guess which horizontal position should be locked the
@@ -2516,7 +2973,7 @@ SETTING It's a cons like:
(VARIABLE . VALUE)
- That associates VARIABLE with VALUE. when this entry is
+ Which associates VARIABLE with VALUE. When this entry is
selected, it's executed the following command:
* If LOCAL is non-nil:
@@ -2717,10 +3174,6 @@ See `pr-ps-printer-alist'.")
See `pr-ps-printer-alist'.")
-(defvar pr-menu-bar nil
- "Specify Printing menu-bar entry.")
-
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Macros
@@ -2737,15 +3190,6 @@ See `pr-ps-printer-alist'.")
;; Keys & Menus
-(defmacro pr-xemacs-global-menubar (&rest body)
- `(save-excursion
- (let ((temp (get-buffer-create (make-temp-name " *Temp"))))
- ;; be sure to access global menubar
- (set-buffer temp)
- ,@body
- (kill-buffer temp))))
-
-
(defsubst pr-visible-p (key)
(memq key pr-visible-entry-list))
@@ -2767,16 +3211,6 @@ See `pr-ps-printer-alist'.")
'easy-menu-intern
(lambda (s) (if (stringp s) (intern s) s))))
-(cond
- ((featurep 'xemacs) ; XEmacs
- (defvar zmacs-region-stays nil) ; to avoid compilation gripes
- (defun pr-region-active-p ()
- (and pr-auto-region (not zmacs-region-stays) (ps-mark-active-p))))
-
- (t ; GNU Emacs
- (defun pr-region-active-p ()
- (and pr-auto-region transient-mark-mode mark-active))))
-
(defconst pr-menu-spec
;; Menu mapping:
@@ -3019,12 +3453,6 @@ See `pr-ps-printer-alist'.")
)))
-(defvar pr-menu-print-item "print"
- "Non-nil means that menu binding was not done.
-
-Used by `pr-menu-bind' and `pr-update-menus'.")
-
-
(defun pr-menu-bind ()
"Install `printing' menu in the menubar.
@@ -3035,51 +3463,7 @@ menu.
Calls `pr-update-menus' to adjust menus."
(interactive)
- (cond
- ((featurep 'xemacs) ; XEmacs
- ;; Menu binding
- (pr-xemacs-global-menubar
- (pr-x-add-submenu nil (cons "Printing" pr-menu-spec) "Apps"))
- (setq pr-menu-print-item nil))
-
-
- (t ; GNU Emacs
- ;; Menu binding
- (require 'easymenu)
- ;; Replace existing "print" item by "Printing" item.
- ;; If you're changing this file, you'll load it a second,
- ;; third... time, but "print" item exists only in the first load.
- (cond
- ;; Emacs 20
- ((< emacs-major-version 21)
- (easy-menu-change '("tools") "Printing" pr-menu-spec pr-menu-print-item)
- (when pr-menu-print-item
- (easy-menu-remove-item nil '("tools") pr-menu-print-item)
- (setq pr-menu-print-item nil
- pr-menu-bar (vector 'menu-bar 'tools
- (pr-get-symbol "Printing")))))
- ;; Emacs 21 & 22
- (t
- (let ((menu-file (if (= emacs-major-version 21)
- '("menu-bar" "files") ; Emacs 21
- '("menu-bar" "file")))) ; Emacs 22 or higher
- (cond
- (pr-menu-print-item
- (easy-menu-add-item global-map menu-file
- (easy-menu-create-menu "Print" pr-menu-spec)
- "print-buffer")
- (dolist (item '("print-buffer" "print-region"
- "ps-print-buffer-faces" "ps-print-region-faces"
- "ps-print-buffer" "ps-print-region"))
- (easy-menu-remove-item global-map menu-file item))
- (setq pr-menu-print-item nil
- pr-menu-bar (vector 'menu-bar
- (pr-get-symbol (nth 1 menu-file))
- (pr-get-symbol "Print"))))
- (t
- (easy-menu-add-item global-map menu-file
- (easy-menu-create-menu "Print" pr-menu-spec)))
- ))))))
+ (pr-global-menubar pr-menu-spec)
(pr-update-menus t))
@@ -4806,94 +5190,6 @@ See `pr-visible-entry-alist'.")
(+ index 2))
-(defvar pr-menu-position nil)
-(defvar pr-menu-state nil)
-
-
-(cond
- ((featurep 'xemacs)
- ;; XEmacs
- (defvar current-mouse-event nil) ; to avoid compilation gripes
- (defun pr-menu-position (entry index horizontal)
- (pr-x-make-event
- 'button-release
- (list 'button 1
- 'x (- (pr-x-event-x-pixel current-mouse-event) ; X
- (* horizontal pr-menu-char-width))
- 'y (- (pr-x-event-y-pixel current-mouse-event) ; Y
- (* (pr-menu-index entry index) pr-menu-char-height)))))
- )
- (ps-windows-system
- ;; GNU Emacs for Windows 9x/NT
- (defun pr-menu-position (entry index horizontal)
- (let ((pos (cdr (pr-e-mouse-pixel-position))))
- (list
- (list (or (car pos) 0) ; X
- (- (or (cdr pos) 0) ; Y
- (* (pr-menu-index entry index) pr-menu-char-height)))
- (selected-frame)))) ; frame
- )
- (t
- ;; GNU Emacs
- (defun pr-menu-position (entry index horizontal)
- (let ((pos (cdr (pr-e-mouse-pixel-position))))
- (list
- (list (- (or (car pos) 0) ; X
- (* horizontal pr-menu-char-width))
- (- (or (cdr pos) 0) ; Y
- (* (pr-menu-index entry index) pr-menu-char-height)))
- (selected-frame)))) ; frame
- ))
-
-(cond
- ((featurep 'xemacs)
- ;; XEmacs
- (defvar current-menubar nil) ; to avoid compilation gripes
- (defun pr-menu-lookup (path)
- (car (pr-x-find-menu-item current-menubar (cons "Printing" path))))
-
- ;; XEmacs
- (defun pr-menu-lock (entry index horizontal state path)
- (when pr-menu-lock
- (or (and pr-menu-position (eq state pr-menu-state))
- (setq pr-menu-position (pr-menu-position entry index horizontal)
- pr-menu-state state))
- (let* ((menu (pr-menu-lookup path))
- (result (pr-x-get-popup-menu-response menu pr-menu-position)))
- (and (pr-x-misc-user-event-p result)
- (funcall (pr-x-event-function result)
- (pr-x-event-object result))))
- (setq pr-menu-position nil))))
-
-
- (t
- ;; GNU Emacs
- (defun pr-menu-lookup (path)
- (lookup-key global-map
- (if path
- (vconcat pr-menu-bar
- (mapcar 'pr-get-symbol
- (if (listp path)
- path
- (list path))))
- pr-menu-bar)))
-
- ;; GNU Emacs
- (defun pr-menu-lock (entry index horizontal state path)
- (when pr-menu-lock
- (or (and pr-menu-position (eq state pr-menu-state))
- (setq pr-menu-position (pr-menu-position entry index horizontal)
- pr-menu-state state))
- (let* ((menu (pr-menu-lookup path))
- (result (x-popup-menu pr-menu-position menu)))
- (and result
- (let ((command (lookup-key menu (vconcat result))))
- (if (fboundp command)
- (funcall command)
- (eval command)))))
- (setq pr-menu-position nil)))))
-
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Printer & Utility Selection
@@ -4927,22 +5223,6 @@ If menu binding was not done, calls `pr-menu-bind'."
(pr-do-update-menus force)))
-(defvar pr-ps-printer-menu-modified t
- "Non-nil means `pr-ps-printer-alist' was modified and we need to update menu.")
-(defvar pr-txt-printer-menu-modified t
- "Non-nil means `pr-txt-printer-alist' was modified and we need to update menu.")
-(defvar pr-ps-utility-menu-modified t
- "Non-nil means `pr-ps-utility-alist' was modified and we need to update menu.")
-
-
-(defconst pr-even-or-odd-alist
- '((nil . "Print All Pages")
- (even-page . "Print Even Pages")
- (odd-page . "Print Odd Pages")
- (even-sheet . "Print Even Sheets")
- (odd-sheet . "Print Odd Sheets")))
-
-
(defun pr-menu-create (name alist var-sym fun entry index)
(cons name
(mapcar
@@ -4956,237 +5236,6 @@ If menu binding was not done, calls `pr-menu-bind'."
alist)))
-(cond
- ((featurep 'xemacs)
- ;; XEmacs
- (defalias 'pr-update-mode-line 'set-menubar-dirty-flag)
-
- ;; XEmacs
- (defvar pr-ps-name-old "PostScript Printers")
- (defvar pr-txt-name-old "Text Printers")
- (defvar pr-ps-utility-old "PostScript Utility")
- (defvar pr-even-or-odd-old "Print All Pages")
-
- ;; XEmacs
- (defun pr-do-update-menus (&optional force)
- (pr-menu-alist pr-ps-printer-alist
- 'pr-ps-name
- 'pr-menu-set-ps-title
- '("Printing")
- 'pr-ps-printer-menu-modified
- force
- pr-ps-name-old
- 'postscript 2)
- (pr-menu-alist pr-txt-printer-alist
- 'pr-txt-name
- 'pr-menu-set-txt-title
- '("Printing")
- 'pr-txt-printer-menu-modified
- force
- pr-txt-name-old
- 'text 2)
- (let ((save-var pr-ps-utility-menu-modified))
- (pr-menu-alist pr-ps-utility-alist
- 'pr-ps-utility
- 'pr-menu-set-utility-title
- '("Printing" "PostScript Print" "File")
- 'save-var
- force
- pr-ps-utility-old
- nil 1))
- (pr-menu-alist pr-ps-utility-alist
- 'pr-ps-utility
- 'pr-menu-set-utility-title
- '("Printing" "PostScript Preview" "File")
- 'pr-ps-utility-menu-modified
- force
- pr-ps-utility-old
- nil 1)
- (pr-even-or-odd-pages ps-even-or-odd-pages force))
-
- ;; XEmacs
- (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
- entry index)
- (when (and alist (or force (symbol-value modified-sym)))
- (pr-xemacs-global-menubar
- (pr-x-add-submenu menu-path
- (pr-menu-create name alist var-sym
- fun entry index)))
- (funcall fun (symbol-value var-sym))
- (set modified-sym nil)))
-
- ;; XEmacs
- (defun pr-relabel-menu-item (newname var-sym)
- (pr-xemacs-global-menubar
- (pr-x-relabel-menu-item
- (list "Printing" (symbol-value var-sym))
- newname)
- (set var-sym newname)))
-
- ;; XEmacs
- (defun pr-menu-set-ps-title (value &optional item entry index)
- (pr-relabel-menu-item (format "PostScript Printer: %s" value)
- 'pr-ps-name-old)
- (pr-ps-set-printer value)
- (and index
- (pr-menu-lock entry index 12 'toggle nil)))
-
- ;; XEmacs
- (defun pr-menu-set-txt-title (value &optional item entry index)
- (pr-relabel-menu-item (format "Text Printer: %s" value)
- 'pr-txt-name-old)
- (pr-txt-set-printer value)
- (and index
- (pr-menu-lock entry index 12 'toggle nil)))
-
- ;; XEmacs
- (defun pr-menu-set-utility-title (value &optional item entry index)
- (pr-xemacs-global-menubar
- (let ((newname (format "%s" value)))
- (pr-x-relabel-menu-item
- (list "Printing" "PostScript Print" "File" pr-ps-utility-old)
- newname)
- (pr-x-relabel-menu-item
- (list "Printing" "PostScript Preview" "File" pr-ps-utility-old)
- newname)
- (setq pr-ps-utility-old newname)))
- (pr-ps-set-utility value)
- (and index
- (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
-
- ;; XEmacs
- (defun pr-even-or-odd-pages (value &optional no-lock)
- (pr-relabel-menu-item (cdr (assq value pr-even-or-odd-alist))
- 'pr-even-or-odd-old)
- (setq ps-even-or-odd-pages value)
- (or no-lock
- (pr-menu-lock 'postscript-options 8 12 'toggle nil))))
-
-
- (t
- ;; GNU Emacs
- (defalias 'pr-update-mode-line 'force-mode-line-update)
-
- ;; GNU Emacs
- (defun pr-do-update-menus (&optional force)
- (pr-menu-alist pr-ps-printer-alist
- 'pr-ps-name
- 'pr-menu-set-ps-title
- "PostScript Printers"
- 'pr-ps-printer-menu-modified
- force
- "PostScript Printers"
- 'postscript 2)
- (pr-menu-alist pr-txt-printer-alist
- 'pr-txt-name
- 'pr-menu-set-txt-title
- "Text Printers"
- 'pr-txt-printer-menu-modified
- force
- "Text Printers"
- 'text 2)
- (let ((save-var pr-ps-utility-menu-modified))
- (pr-menu-alist pr-ps-utility-alist
- 'pr-ps-utility
- 'pr-menu-set-utility-title
- '("PostScript Print" "File" "PostScript Utility")
- 'save-var
- force
- "PostScript Utility"
- nil 1))
- (pr-menu-alist pr-ps-utility-alist
- 'pr-ps-utility
- 'pr-menu-set-utility-title
- '("PostScript Preview" "File" "PostScript Utility")
- 'pr-ps-utility-menu-modified
- force
- "PostScript Utility"
- nil 1)
- (pr-even-or-odd-pages ps-even-or-odd-pages force))
-
- ;; GNU Emacs
- (defun pr-menu-get-item (name-list)
- ;; NAME-LIST is a string or a list of strings.
- (or (listp name-list)
- (setq name-list (list name-list)))
- (and name-list
- (let* ((reversed (reverse name-list))
- (name (pr-get-symbol (car reversed)))
- (path (nreverse (cdr reversed)))
- (menu (lookup-key
- global-map
- (vconcat pr-menu-bar
- (mapcar 'pr-get-symbol path)))))
- (assq name (nthcdr 2 menu)))))
-
- ;; GNU Emacs
- (defvar pr-temp-menu nil)
-
- ;; GNU Emacs
- (defun pr-menu-alist (alist var-sym fun menu-path modified-sym force name
- entry index)
- (when (and alist (or force (symbol-value modified-sym)))
- (easy-menu-define pr-temp-menu nil ""
- (pr-menu-create name alist var-sym fun entry index))
- (let ((item (pr-menu-get-item menu-path)))
- (and item
- (let* ((binding (nthcdr 3 item))
- (key-binding (cdr binding)))
- (setcar binding pr-temp-menu)
- (and key-binding (listp (car key-binding))
- (setcdr binding (cdr key-binding))) ; skip KEY-BINDING
- (funcall fun (symbol-value var-sym) item))))
- (set modified-sym nil)))
-
- ;; GNU Emacs
- (defun pr-menu-set-item-name (item name)
- (and item
- (setcar (nthcdr 2 item) name))) ; ITEM-NAME
-
- ;; GNU Emacs
- (defun pr-menu-set-ps-title (value &optional item entry index)
- (pr-menu-set-item-name (or item
- (pr-menu-get-item "PostScript Printers"))
- (format "PostScript Printer: %s" value))
- (pr-ps-set-printer value)
- (and index
- (pr-menu-lock entry index 12 'toggle nil)))
-
- ;; GNU Emacs
- (defun pr-menu-set-txt-title (value &optional item entry index)
- (pr-menu-set-item-name (or item
- (pr-menu-get-item "Text Printers"))
- (format "Text Printer: %s" value))
- (pr-txt-set-printer value)
- (and index
- (pr-menu-lock entry index 12 'toggle nil)))
-
- ;; GNU Emacs
- (defun pr-menu-set-utility-title (value &optional item entry index)
- (let ((name (symbol-name value)))
- (if item
- (pr-menu-set-item-name item name)
- (pr-menu-set-item-name
- (pr-menu-get-item
- '("PostScript Print" "File" "PostScript Utility"))
- name)
- (pr-menu-set-item-name
- (pr-menu-get-item
- '("PostScript Preview" "File" "PostScript Utility"))
- name)))
- (pr-ps-set-utility value)
- (and index
- (pr-menu-lock entry index 5 nil '("PostScript Print" "File"))))
-
- ;; GNU Emacs
- (defun pr-even-or-odd-pages (value &optional no-lock)
- (pr-menu-set-item-name (pr-menu-get-item "Print All Pages")
- (cdr (assq value pr-even-or-odd-alist)))
- (setq ps-even-or-odd-pages value)
- (or no-lock
- (pr-menu-lock 'postscript-options 8 12 'toggle nil)))))
-
-
(defun pr-ps-set-utility (value)
(let ((item (cdr (assq value pr-ps-utility-alist))))
(or item
@@ -5255,15 +5304,15 @@ If menu binding was not done, calls `pr-menu-bind'."
(defun pr-eval-local-alist (alist)
(let (local-list)
- (mapcar #'(lambda (option)
- (let ((var-sym (car option))
- (value (cdr option)))
- (setq local-list
- (if (eq var-sym 'inherits-from:)
- (nconc (pr-eval-setting-alist value) local-list)
- (set (make-local-variable var-sym) (eval value))
- (cons var-sym local-list)))))
- alist)
+ (mapc #'(lambda (option)
+ (let ((var-sym (car option))
+ (value (cdr option)))
+ (setq local-list
+ (if (eq var-sym 'inherits-from:)
+ (nconc (pr-eval-setting-alist value) local-list)
+ (set (make-local-variable var-sym) (eval value))
+ (cons var-sym local-list)))))
+ alist)
local-list))
@@ -5285,7 +5334,7 @@ If menu binding was not done, calls `pr-menu-bind'."
(setq local-list
(pr-eval-setting-alist inherits global
(cons inherits old)))))
- (mapcar
+ (mapc
(cond ((not local) ; global settings
#'(lambda (option)
(let ((var-sym (car option)))
@@ -5962,9 +6011,10 @@ COMMAND.exe, COMMAND.bat and COMMAND.com in this order."
;; Printing Interface (inspired on ps-print-interface.el)
-(require 'widget)
-(require 'wid-edit)
-(require 'cus-edit)
+(eval-when-compile
+ (require 'cus-edit)
+ (require 'wid-edit)
+ (require 'widget))
(defvar pr-i-window-configuration nil)
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index 478a07bc3b6..07d38dbdaa2 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -1145,7 +1145,7 @@ If you use ada-xref.el:
(interactive)
(kill-all-local-variables)
-
+
(set-syntax-table ada-mode-syntax-table)
(set (make-local-variable 'require-final-newline) mode-require-final-newline)
@@ -1423,12 +1423,12 @@ If you use ada-xref.el:
Casing exception lists are `ada-case-exception' and `ada-case-exception-substring'."
(find-file (expand-file-name file-name))
(erase-buffer)
- (mapcar (lambda (x) (insert (car x) "\n"))
- (sort (copy-sequence ada-case-exception)
- (lambda(a b) (string< (car a) (car b)))))
- (mapcar (lambda (x) (insert "*" (car x) "\n"))
- (sort (copy-sequence ada-case-exception-substring)
- (lambda(a b) (string< (car a) (car b)))))
+ (mapc (lambda (x) (insert (car x) "\n"))
+ (sort (copy-sequence ada-case-exception)
+ (lambda(a b) (string< (car a) (car b)))))
+ (mapc (lambda (x) (insert "*" (car x) "\n"))
+ (sort (copy-sequence ada-case-exception-substring)
+ (lambda(a b) (string< (car a) (car b)))))
(save-buffer)
(kill-buffer nil)
)
@@ -4583,7 +4583,7 @@ Moves to 'begin' if in a declarative part."
;; The following keys are bound to functions defined in ada-xref.el or
;; ada-prj,el., However, RMS rightly thinks that the code should be shared,
;; and activated only if the right compiler is used
-
+
(define-key ada-mode-map (if (featurep 'xemacs) '(shift button3) [S-mouse-3])
'ada-point-and-xref)
(define-key ada-mode-map [(control tab)] 'ada-complete-identifier)
diff --git a/lisp/progmodes/ada-prj.el b/lisp/progmodes/ada-prj.el
index 7cff0158f8a..b3f059b2b34 100644
--- a/lisp/progmodes/ada-prj.el
+++ b/lisp/progmodes/ada-prj.el
@@ -254,8 +254,8 @@ The current buffer must be the project editing buffer."
(progn
(setq widget-field-new nil
widget-field-list nil)
- (mapcar (lambda (x) (delete-overlay x)) (car (overlay-lists)))
- (mapcar (lambda (x) (delete-overlay x)) (cdr (overlay-lists)))))
+ (mapc (lambda (x) (delete-overlay x)) (car (overlay-lists)))
+ (mapc (lambda (x) (delete-overlay x)) (cdr (overlay-lists)))))
;; Display the tabs
diff --git a/lisp/progmodes/ada-xref.el b/lisp/progmodes/ada-xref.el
index c37d11910d4..ddea4c293df 100644
--- a/lisp/progmodes/ada-xref.el
+++ b/lisp/progmodes/ada-xref.el
@@ -1706,7 +1706,7 @@ Information is extracted from the ali file."
(beginning-of-line)
;; while we have a continuation line, go up one line
(while (looking-at "^\\.")
- (previous-line 1)
+ (forward-line -1)
(beginning-of-line))
(unless (looking-at (concat "[0-9]+.[0-9]+[ *]"
(ada-name-of identlist) "[ <{=\(\[]"))
@@ -1735,11 +1735,11 @@ Information is extracted from the ali file."
(let ((current-line (buffer-substring
(point) (save-excursion (end-of-line) (point)))))
(save-excursion
- (next-line 1)
+ (forward-line 1)
(beginning-of-line)
(while (looking-at "^\\.\\(.*\\)")
(set 'current-line (concat current-line (match-string 1)))
- (next-line 1))
+ (forward-line 1))
)
(if (re-search-backward "^X [0-9]+ \\([a-zA-Z0-9_.-]+\\)" nil t)
diff --git a/lisp/progmodes/antlr-mode.el b/lisp/progmodes/antlr-mode.el
index 594b628ad44..01f1c86618c 100644
--- a/lisp/progmodes/antlr-mode.el
+++ b/lisp/progmodes/antlr-mode.el
@@ -99,7 +99,7 @@
(and (eq (car args) :@) (null msg) ; (:@ ...spliced...)
(setq args (cdr args)
msg "(:@ ....) must return exactly one element"))
- (let ((ignore (if (string-match "XEmacs" emacs-version) :EMACS :XEMACS))
+ (let ((ignore (if (featurep 'xemacs) :EMACS :XEMACS))
(mode :BOTH) code)
(while (consp args)
(if (memq (car args) '(:EMACS :XEMACS :BOTH)) (setq mode (pop args)))
@@ -115,7 +115,7 @@
;; existing functions when they are `fboundp', provide shortcuts if they are
;; known to be defined in a specific Emacs branch (for short .elc)
(defmacro defunx (name arglist &rest definition)
- (let ((xemacsp (string-match "XEmacs" emacs-version)) reuses)
+ (let ((xemacsp (featurep 'xemacs)) reuses)
(while (memq (car definition)
'(:try :emacs-and-try :xemacs-and-try))
(if (eq (pop definition) (if xemacsp :xemacs-and-try :emacs-and-try))
@@ -152,7 +152,7 @@
(defmacro ignore-errors-x (&rest body)
(let ((specials '((scan-sexps . 4) (scan-lists . 5)))
spec nils)
- (if (and (string-match "XEmacs" emacs-version)
+ (if (and (featurep 'xemacs)
(null (cdr body)) (consp (car body))
(setq spec (assq (caar body) specials))
(>= (setq nils (- (cdr spec) (length (car body)))) 0))
@@ -166,7 +166,7 @@
`(let ((,modified (buffer-modified-p)))
(unwind-protect
(let ((buffer-undo-list t) (inhibit-read-only t)
- ,@(unless (string-match "XEmacs" emacs-version)
+ ,@(unless (featurep 'xemacs)
'((inhibit-point-motion-hooks t) deactivate-mark))
before-change-functions after-change-functions
buffer-file-name buffer-file-truename)
diff --git a/lisp/progmodes/autoconf.el b/lisp/progmodes/autoconf.el
index e01579917f6..d47a1c4d2cc 100644
--- a/lisp/progmodes/autoconf.el
+++ b/lisp/progmodes/autoconf.el
@@ -49,7 +49,7 @@
'(("\\<dnl\\>" 0 '(11))))
(defconst autoconf-definition-regexp
- "AC_\\(SUBST\\|DEFINE\\(_UNQUOTED\\)?\\)(\\(\\sw+\\)")
+ "AC_\\(SUBST\\|DEFINE\\(_UNQUOTED\\)?\\)(\\[*\\(\\sw+\\)\\]*")
(defvar autoconf-font-lock-keywords
`(("\\_<A[CHMS]_\\sw+" . font-lock-keyword-face)
diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index 5a69df4e457..935cba76fcf 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -395,8 +395,8 @@ Don't use within `eval-when-compile'."
(defun cc-bytecomp-ignore-obsolete (form)
;; Wraps a call to `byte-compile-obsolete' that suppresses the warning.
- (let ((byte-compile-warnings
- (delq 'obsolete (append byte-compile-warnings nil))))
+ (let ((byte-compile-warnings byte-compile-warnings))
+ (byte-compile-disable-warning 'obsolete)
(byte-compile-obsolete form)))
(defmacro cc-bytecomp-obsolete-fun (symbol)
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 48fa7d99f5a..db052c4b8f5 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -2595,7 +2595,7 @@ sentence motion in or near comments and multiline strings."
;; set up electric character functions to work with pending-del,
;; (a.k.a. delsel) mode. All symbols get the t value except
;; the functions which delete, which gets 'supersede.
-(mapcar
+(mapc
(function
(lambda (sym)
(put sym 'delete-selection t) ; for delsel (Emacs)
@@ -3074,7 +3074,8 @@ non-nil."
indent the current line syntactically."
;; Emacs has a variable called mark-active, XEmacs uses region-active-p
(interactive)
- (if (c-region-is-active-p)
+ (if (and transient-mark-mode mark-active
+ (not (eq (region-beginning) (region-end))))
(c-indent-region (region-beginning) (region-end))
(c-indent-line)))
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index e932456fa91..f6adfb8cef9 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -73,9 +73,9 @@
; (eval-after-load "font-lock" ; 2006-07-09. font-lock is now preloaded
; '
-(if (and (not (featurep 'cc-fix)) ; only load the file once.
- (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS
+(if (and (featurep 'xemacs) ; There is now (2005/12) code in GNU Emacs CVS
; to make the call to f-l-c-k throw an error.
+ (not (featurep 'cc-fix)) ; only load the file once.
(let (font-lock-keywords)
(font-lock-compile-keywords '("\\<\\>"))
font-lock-keywords)) ; did the previous call foul this up?
@@ -84,8 +84,8 @@
;; The above takes care of the delayed loading, but this is necessary
;; to ensure correct byte compilation.
(eval-when-compile
- (if (and (not (featurep 'cc-fix))
- (featurep 'xemacs)
+ (if (and (featurep 'xemacs)
+ (not (featurep 'cc-fix))
(progn
(require 'font-lock)
(let (font-lock-keywords)
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index fa41d247c59..7666da75f9b 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -4035,6 +4035,9 @@ comment at the start of cc-engine.el for more info."
c-found-types)
(sort type-list 'string-lessp)))
+;; Shut up the byte compiler.
+(defvar c-maybe-stale-found-type)
+
(defun c-trim-found-types (beg end old-len)
;; An after change function which, in conjunction with the info in
;; c-maybe-stale-found-type (set in c-before-change), removes a type
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 60bb3cfb977..b9771260b02 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -2146,7 +2146,7 @@ need for `pike-font-lock-extra-types'.")
0 ,c-doc-markup-face-name prepend nil)
(,(concat header "\\(" "@" symbol "\\):")
1 ,c-doc-markup-face-name prepend nil)
- (,(concat "[#%]" symbol)
+ (,(concat "[#%@]" symbol)
0 ,c-doc-markup-face-name prepend nil))
))
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index d0ff9c523ad..a4dfe41ca78 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -1970,6 +1970,7 @@ identifiers that follows the type in a normal declaration."
"Statement keywords followed directly by a substatement."
t '("do" "else")
c++ '("do" "else" "try")
+ objc '("do" "else" "@finally" "@try")
java '("do" "else" "finally" "try")
idl nil)
@@ -1983,6 +1984,7 @@ identifiers that follows the type in a normal declaration."
"Statement keywords followed by a paren sexp and then by a substatement."
t '("for" "if" "switch" "while")
c++ '("for" "if" "switch" "while" "catch")
+ objc '("for" "if" "switch" "while" "@catch" "@synchronized")
java '("for" "if" "switch" "while" "catch" "synchronized")
idl nil
pike '("for" "if" "switch" "while" "foreach")
@@ -2014,6 +2016,7 @@ identifiers that follows the type in a normal declaration."
(c-lang-defconst c-simple-stmt-kwds
"Statement keywords followed by an expression or nothing."
t '("break" "continue" "goto" "return")
+ objc '("break" "continue" "goto" "return" "@throw")
;; Note: `goto' is not valid in Java, but the keyword is still reserved.
java '("break" "continue" "goto" "return" "throw")
idl nil
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 8669a41c2f0..00ec64a85a0 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -269,7 +269,9 @@ control). See \"cc-mode.el\" for more info."
'c-indent-new-comment-line
c-mode-base-map global-map)
(substitute-key-definition 'indent-for-tab-command
- 'c-indent-command
+ ;; XXX Is this the right thing to do
+ ;; here?
+ 'c-indent-line-or-region
c-mode-base-map global-map)
(when (fboundp 'comment-indent-new-line)
;; indent-new-comment-line has changed name to
@@ -839,7 +841,7 @@ Note that the style variables are always made local to the buffer."
(and c-file-style
(c-set-style c-file-style))
(and c-file-offsets
- (mapcar
+ (mapc
(lambda (langentry)
(let ((langelem (car langentry))
(offset (cdr langentry)))
@@ -1428,15 +1430,15 @@ Key bindings:
adaptive-fill-mode
adaptive-fill-regexp)
nil)))
- (mapcar (lambda (var) (unless (boundp var)
- (setq vars (delq var vars))))
- '(signal-error-on-buffer-boundary
- filladapt-mode
- defun-prompt-regexp
- font-lock-mode
- font-lock-maximum-decoration
- parse-sexp-lookup-properties
- lookup-syntax-properties))
+ (mapc (lambda (var) (unless (boundp var)
+ (setq vars (delq var vars))))
+ '(signal-error-on-buffer-boundary
+ filladapt-mode
+ defun-prompt-regexp
+ font-lock-mode
+ font-lock-maximum-decoration
+ parse-sexp-lookup-properties
+ lookup-syntax-properties))
vars)
(lambda ()
(run-hooks 'c-prepare-bug-report-hooks)
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index c5b9b063812..1ffcb170ca3 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -381,11 +381,11 @@ a null operation."
;; fallback entry.
(setq c-special-indent-hook
(default-value 'c-special-indent-hook)))
- (mapcar (lambda (elem)
- (c-set-style-1 elem dont-override))
- ;; Need to go through the variables backwards when we
- ;; don't override any settings.
- (if (eq dont-override t) (nreverse vars) vars)))
+ (mapc (lambda (elem)
+ (c-set-style-1 elem dont-override))
+ ;; Need to go through the variables backwards when we
+ ;; don't override any settings.
+ (if (eq dont-override t) (nreverse vars) vars)))
(setq c-indentation-style stylename)
(c-keep-region-active))
@@ -636,7 +636,7 @@ any reason to call this function directly."
'make-variable-buffer-local))
(varsyms (cons 'c-indentation-style (copy-alist c-style-variables))))
(delq 'c-special-indent-hook varsyms)
- (mapcar func varsyms)
+ (mapc func varsyms)
;; Hooks must be handled specially
(if this-buf-only-p
(make-local-hook 'c-special-indent-hook)
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index a978415d59e..b4148c59b49 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -38,11 +38,14 @@
;; LINE will be nil for a message that doesn't contain them. Then the
;; location refers to a indented beginning of line or beginning of file.
;; Once any location in some file has been jumped to, the list is extended to
-;; (COLUMN LINE FILE-STRUCTURE MARKER . VISITED) for all LOCs pertaining to
-;; that file.
+;; (COLUMN LINE FILE-STRUCTURE MARKER TIMESTAMP . VISITED)
+;; for all LOCs pertaining to that file.
;; MARKER initially points to LINE and COLUMN in a buffer visiting that file.
;; Being a marker it sticks to some text, when the buffer grows or shrinks
;; before that point. VISITED is t if we have jumped there, else nil.
+;; TIMESTAMP is necessary because of "incremental compilation": `omake -P'
+;; polls filesystem for changes and recompiles when a file is modified
+;; using the same *compilation* buffer. this necessitates re-parsing markers.
;; FILE-STRUCTURE is a list of
;; ((FILENAME . DIRECTORY) FORMATS (LINE LOC ...) ...)
@@ -84,13 +87,13 @@
;;;###autoload
(defcustom compilation-mode-hook nil
- "*List of hook functions run by `compilation-mode' (see `run-mode-hooks')."
+ "List of hook functions run by `compilation-mode' (see `run-mode-hooks')."
:type 'hook
:group 'compilation)
;;;###autoload
(defcustom compilation-window-height nil
- "*Number of lines in a compilation window. If nil, use Emacs default."
+ "Number of lines in a compilation window. If nil, use Emacs default."
:type '(choice (const :tag "Default" nil)
integer)
:group 'compilation)
@@ -164,6 +167,10 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
"^[ \t]*\\[[^] \n]+\\][ \t]*\\([^: \n]+\\):\\([0-9]+\\):\\(?:\\([0-9]+\\):[0-9]+:[0-9]+:\\)?\
\\( warning\\)?" 1 2 3 (4))
+ (maven
+ ;; Maven is a popular build tool for Java. Maven is Free Software.
+ "\\(.*?\\):\\[\\([0-9]+\\),\\([0-9]+\\)\\]" 1 2 3)
+
(bash
"^\\([^: \n\t]+\\): line \\([0-9]+\\):" 1 2)
@@ -332,6 +339,57 @@ File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = \\([0-9]+\\)\\)?"
nil 2 nil 2 nil
(0 'default t)
(1 compilation-error-face prepend) (2 compilation-line-face prepend))
+
+ (compilation-perl--Pod::Checker
+ ;; podchecker error messages, per Pod::Checker.
+ ;; The style is from the Pod::Checker::poderror() function, eg.
+ ;; *** ERROR: Spurious text after =cut at line 193 in file foo.pm
+ ;;
+ ;; Plus end_pod() can give "at line EOF" instead of a
+ ;; number, so for that match "on line N" which is the
+ ;; originating spot, eg.
+ ;; *** ERROR: =over on line 37 without closing =back at line EOF in file bar.pm
+ ;;
+ ;; Plus command() can give both "on line N" and "at line N";
+ ;; the latter is desired and is matched because the .* is
+ ;; greedy.
+ ;; *** ERROR: =over on line 1 without closing =back (at head1) at line 3 in file x.pod
+ ;;
+ "^\\*\\*\\* \\(?:ERROR\\|\\(WARNING\\)\\).* \\(?:at\\|on\\) line \
+\\([0-9]+\\) \\(?:.* \\)?in file \\([^ \t\n]+\\)"
+ 3 2 nil (1))
+ (compilation-perl--Test
+ ;; perl Test module error messages.
+ ;; Style per the ok() function "$context", eg.
+ ;; # Failed test 1 in foo.t at line 6
+ ;;
+ "^# Failed test [0-9]+ in \\([^ \t\r\n]+\\) at line \\([0-9]+\\)"
+ 1 2)
+ (compilation-perl--Test::Harness
+ ;; perl Test::Harness output, eg.
+ ;; NOK 1# Test 1 got: "1234" (t/foo.t at line 46)
+ ;;
+ ;; Test::Harness is slightly designed for tty output, since
+ ;; it prints CRs to overwrite progress messages, but if you
+ ;; run it in with M-x compile this pattern can at least step
+ ;; through the failures.
+ ;;
+ "^.*NOK.* \\([^ \t\r\n]+\\) at line \\([0-9]+\\)"
+ 1 2)
+ (compilation-weblint
+ ;; The style comes from HTML::Lint::Error::as_string(), eg.
+ ;; index.html (13:1) Unknown element <fdjsk>
+ ;;
+ ;; The pattern only matches filenames without spaces, since that
+ ;; should be usual and should help reduce the chance of a false
+ ;; match of a message from some unrelated program.
+ ;;
+ ;; This message style is quite close to the "ibm" entry which is
+ ;; for IBM C, though that ibm bit doesn't put a space after the
+ ;; filename.
+ ;;
+ "^\\([^ \t\r\n(]+\\) (\\([0-9]+\\):\\([0-9]+\\)) "
+ 1 2 3)
)
"Alist of values for `compilation-error-regexp-alist'.")
@@ -439,7 +497,7 @@ Highlight entire line if t; don't highlight source lines if nil.")
"Overlay used to temporarily highlight compilation matches.")
(defcustom compilation-error-screen-columns t
- "*If non-nil, column numbers in error messages are screen columns.
+ "If non-nil, column numbers in error messages are screen columns.
Otherwise they are interpreted as character positions, with
each character occupying one column.
The default is to use screen columns, which requires that the compilation
@@ -450,21 +508,21 @@ especially the TAB character."
:version "20.4")
(defcustom compilation-read-command t
- "*Non-nil means \\[compile] reads the compilation command to use.
+ "Non-nil means \\[compile] reads the compilation command to use.
Otherwise, \\[compile] just uses the value of `compile-command'."
:type 'boolean
:group 'compilation)
;;;###autoload
(defcustom compilation-ask-about-save t
- "*Non-nil means \\[compile] asks which buffers to save before compiling.
+ "Non-nil means \\[compile] asks which buffers to save before compiling.
Otherwise, it saves all modified buffers without asking."
:type 'boolean
:group 'compilation)
;;;###autoload
(defcustom compilation-search-path '(nil)
- "*List of directories to search for source files named in error messages.
+ "List of directories to search for source files named in error messages.
Elements should be directory names, not file names of directories.
The value nil as an element means to try the default directory."
:type '(repeat (choice (const :tag "Default" nil)
@@ -473,7 +531,7 @@ The value nil as an element means to try the default directory."
;;;###autoload
(defcustom compile-command "make -k "
- "*Last shell command used to do a compilation; default for next compilation.
+ "Last shell command used to do a compilation; default for next compilation.
Sometimes it is useful for files to supply local values for this variable.
You might also use mode hooks to specify it in certain modes, like this:
@@ -491,7 +549,7 @@ You might also use mode hooks to specify it in certain modes, like this:
;;;###autoload
(defcustom compilation-disable-input nil
- "*If non-nil, send end-of-file as compilation process input.
+ "If non-nil, send end-of-file as compilation process input.
This only affects platforms that support asynchronous processes (see
`start-process'); synchronous compilation processes never accept input."
:type 'boolean
@@ -602,6 +660,41 @@ Faces `compilation-error-face', `compilation-warning-face',
(defvar compilation-error-list nil)
(defvar compilation-old-error-list nil)
+(defcustom compilation-auto-jump-to-first-error nil
+ "If non-nil, automatically jump to the first error after `compile'."
+ :type 'boolean
+ :group 'compilation
+ :version "23.1")
+
+(defvar compilation-auto-jump-to-next nil
+ "If non-nil, automatically jump to the next error encountered.")
+(make-variable-buffer-local 'compilation-auto-jump-to-next)
+
+
+(defvar compilation-skip-to-next-location t
+ "*If non-nil, skip multiple error messages for the same source location.")
+
+(defcustom compilation-skip-threshold 1
+ "Compilation motion commands skip less important messages.
+The value can be either 2 -- skip anything less than error, 1 --
+skip anything less than warning or 0 -- don't skip any messages.
+Note that all messages not positively identified as warning or
+info, are considered errors."
+ :type '(choice (const :tag "Warnings and info" 2)
+ (const :tag "Info" 1)
+ (const :tag "None" 0))
+ :group 'compilation
+ :version "22.1")
+
+(defcustom compilation-skip-visited nil
+ "Compilation motion commands skip visited messages if this is t.
+Visited messages are ones for which the file, line and column have been jumped
+to from the current content in the current compilation buffer, even if it was
+from a different message."
+ :type 'boolean
+ :group 'compilation
+ :version "22.1")
+
(defun compilation-face (type)
(or (and (car type) (match-end (car type)) compilation-warning-face)
(and (cdr type) (match-end (cdr type)) compilation-info-face)
@@ -649,13 +742,18 @@ Faces `compilation-error-face', `compilation-warning-face',
l2
(setcdr l1 (cons (list ,key) l2)))))))
+(defun compilation-auto-jump (buffer pos)
+ (with-current-buffer buffer
+ (goto-char pos)
+ (compile-goto-error)))
;; This function is the central driver, called when font-locking to gather
;; all information needed to later jump to corresponding source code.
;; Return a property list with all meta information on this error location.
(defun compilation-error-properties (file line end-line col end-col type fmt)
- (unless (< (next-single-property-change (match-beginning 0) 'directory nil (point))
+ (unless (< (next-single-property-change (match-beginning 0)
+ 'directory nil (point))
(point))
(if file
(if (functionp file)
@@ -707,6 +805,13 @@ Faces `compilation-error-face', `compilation-warning-face',
(setq type (or (and (car type) (match-end (car type)) 1)
(and (cdr type) (match-end (cdr type)) 0)
2)))
+
+ (when (and compilation-auto-jump-to-next
+ (>= type compilation-skip-threshold))
+ (kill-local-variable 'compilation-auto-jump-to-next)
+ (run-with-timer 0 nil 'compilation-auto-jump
+ (current-buffer) (match-beginning 0)))
+
(compilation-internal-error-properties file line end-line col end-col type fmt)))
(defun compilation-move-to-column (col screen)
@@ -913,7 +1018,7 @@ to a function that generates a unique name."
(unless (equal command (eval compile-command))
(setq compile-command command))
(save-some-buffers (not compilation-ask-about-save) nil)
- (setq compilation-directory default-directory)
+ (setq-default compilation-directory default-directory)
(compilation-start command comint))
;; run compile with the default command line
@@ -923,15 +1028,12 @@ If this is run in a Compilation mode buffer, re-use the arguments from the
original use. Otherwise, recompile using `compile-command'."
(interactive)
(save-some-buffers (not compilation-ask-about-save) nil)
- (let ((default-directory
- (or (and (not (eq major-mode (nth 1 compilation-arguments)))
- compilation-directory)
- default-directory)))
+ (let ((default-directory (or compilation-directory default-directory)))
(apply 'compilation-start (or compilation-arguments
`(,(eval compile-command))))))
(defcustom compilation-scroll-output nil
- "*Non-nil to scroll the *compilation* buffer window as output appears.
+ "Non-nil to scroll the *compilation* buffer window as output appears.
Setting it causes the Compilation mode commands to put point at the
end of their output window so that the end of the output is always
@@ -953,8 +1055,7 @@ Otherwise, construct a buffer name from MODE-NAME."
(funcall name-function mode-name))
(compilation-buffer-name-function
(funcall compilation-buffer-name-function mode-name))
- ((and (eq mode-command major-mode)
- (eq major-mode (nth 1 compilation-arguments)))
+ ((eq mode-command major-mode)
(buffer-name))
(t
(concat "*" (downcase mode-name) "*"))))
@@ -1006,7 +1107,7 @@ Returns the compilation buffer created."
(with-current-buffer
(setq outbuf
(get-buffer-create
- (compilation-buffer-name name-of-mode mode name-function)))
+ (compilation-buffer-name name-of-mode mode name-function)))
(let ((comp-proc (get-buffer-process (current-buffer))))
(if comp-proc
(if (or (not (eq (process-status comp-proc) 'run))
@@ -1024,12 +1125,17 @@ Returns the compilation buffer created."
(buffer-disable-undo (current-buffer))
;; first transfer directory from where M-x compile was called
(setq default-directory thisdir)
+ ;; Remember the original dir, so we can use it when we recompile.
+ ;; default-directory' can't be used reliably for that because it may be
+ ;; affected by the special handling of "cd ...;".
+ (set (make-local-variable 'compilation-directory) thisdir)
;; Make compilation buffer read-only. The filter can still write it.
;; Clear out the compilation buffer.
(let ((inhibit-read-only t)
(default-directory thisdir))
- ;; Then evaluate a cd command if any, but don't perform it yet, else start-command
- ;; would do it again through the shell: (cd "..") AND sh -c "cd ..; make"
+ ;; Then evaluate a cd command if any, but don't perform it yet, else
+ ;; start-command would do it again through the shell: (cd "..") AND
+ ;; sh -c "cd ..; make"
(cd (if (string-match "^\\s *cd\\(?:\\s +\\(\\S +?\\)\\)?\\s *[;&\n]" command)
(if (match-end 1)
(substitute-env-vars (match-string 1 command))
@@ -1045,6 +1151,8 @@ Returns the compilation buffer created."
(if highlight-regexp
(set (make-local-variable 'compilation-highlight-regexp)
highlight-regexp))
+ (if compilation-auto-jump-to-first-error
+ (set (make-local-variable 'compilation-auto-jump-to-next) t))
;; Output a mode setter, for saving and later reloading this buffer.
(insert "-*- mode: " name-of-mode
"; default-directory: " (prin1-to-string default-directory)
@@ -1093,53 +1201,31 @@ Returns the compilation buffer created."
(funcall compilation-process-setup-function))
(compilation-set-window-height outwin)
;; Start the compilation.
- (if (fboundp 'start-process)
- (let ((proc (if (eq mode t)
- (get-buffer-process
- (with-no-warnings
- (comint-exec outbuf (downcase mode-name)
- shell-file-name nil `("-c" ,command))))
- (start-process-shell-command (downcase mode-name)
- outbuf command))))
- ;; Make the buffer's mode line show process state.
- (setq mode-line-process '(":%s"))
- (set-process-sentinel proc 'compilation-sentinel)
- (set-process-filter proc 'compilation-filter)
- (set-marker (process-mark proc) (point) outbuf)
- (when compilation-disable-input
- (condition-case nil
- (process-send-eof proc)
- ;; The process may have exited already.
- (error nil)))
- (setq compilation-in-progress
- (cons proc compilation-in-progress)))
- ;; No asynchronous processes available.
- (message "Executing `%s'..." command)
- ;; Fake modeline display as if `start-process' were run.
- (setq mode-line-process ":run")
- (force-mode-line-update)
- (sit-for 0) ; Force redisplay
- (let* ((buffer-read-only nil) ; call-process needs to modify outbuf
- (status (call-process shell-file-name nil outbuf nil "-c"
- command)))
- (cond ((numberp status)
- (compilation-handle-exit 'exit status
- (if (zerop status)
- "finished\n"
- (format "\
-exited abnormally with code %d\n"
- status))))
- ((stringp status)
- (compilation-handle-exit 'signal status
- (concat status "\n")))
- (t
- (compilation-handle-exit 'bizarre status status))))
- ;; Without async subprocesses, the buffer is not yet
- ;; fontified, so fontify it now.
- (let ((font-lock-verbose nil)) ; shut up font-lock messages
- (font-lock-fontify-buffer))
- (set-buffer-modified-p nil)
- (message "Executing `%s'...done" command)))
+ (let ((proc
+ (if (eq mode t)
+ ;; comint uses `start-file-process'.
+ (get-buffer-process
+ (with-no-warnings
+ (comint-exec
+ outbuf (downcase mode-name)
+ (if (file-remote-p default-directory)
+ "/bin/sh"
+ shell-file-name)
+ nil `("-c" ,command))))
+ (start-file-process-shell-command (downcase mode-name)
+ outbuf command))))
+ ;; Make the buffer's mode line show process state.
+ (setq mode-line-process '(":%s"))
+ (set-process-sentinel proc 'compilation-sentinel)
+ (set-process-filter proc 'compilation-filter)
+ (set-marker (process-mark proc) (point) outbuf)
+ (when compilation-disable-input
+ (condition-case nil
+ (process-send-eof proc)
+ ;; The process may have exited already.
+ (error nil)))
+ (setq compilation-in-progress
+ (cons proc compilation-in-progress))))
;; Now finally cd to where the shell started make/grep/...
(setq default-directory thisdir))
(if (buffer-local-value 'compilation-scroll-output outbuf)
@@ -1256,30 +1342,6 @@ exited abnormally with code %d\n"
(put 'compilation-mode 'mode-class 'special)
-(defvar compilation-skip-to-next-location t
- "*If non-nil, skip multiple error messages for the same source location.")
-
-(defcustom compilation-skip-threshold 1
- "*Compilation motion commands skip less important messages.
-The value can be either 2 -- skip anything less than error, 1 --
-skip anything less than warning or 0 -- don't skip any messages.
-Note that all messages not positively identified as warning or
-info, are considered errors."
- :type '(choice (const :tag "Warnings and info" 2)
- (const :tag "Info" 1)
- (const :tag "None" 0))
- :group 'compilation
- :version "22.1")
-
-(defcustom compilation-skip-visited nil
- "*Compilation motion commands skip visited messages if this is t.
-Visited messages are ones for which the file, line and column have been jumped
-to from the current content in the current compilation buffer, even if it was
-from a different message."
- :type 'boolean
- :group 'compilation
- :version "22.1")
-
;;;###autoload
(defun compilation-mode (&optional name-of-mode)
"Major mode for compilation log buffers.
@@ -1373,6 +1435,8 @@ Optional argument MINOR indicates this is called from
;; with the next-error function in simple.el, and it's only
;; coincidentally named similarly to compilation-next-error.
(setq next-error-function 'compilation-next-error-function)
+ (set (make-local-variable 'comint-file-name-prefix)
+ (or (file-remote-p default-directory) ""))
(set (make-local-variable 'font-lock-extra-managed-props)
'(directory message help-echo mouse-face debug))
(set (make-local-variable 'compilation-locs)
@@ -1521,7 +1585,7 @@ Just inserts the text, but uses `insert-before-markers'."
(eq (prog1 last (setq last (nth 2 (car msg))))
last))
(if compilation-skip-visited
- (nthcdr 4 (car msg)))
+ (nthcdr 5 (car msg)))
(if compilation-skip-to-next-location
(eq (car msg) loc))
;; count this message only if none of the above are true
@@ -1626,7 +1690,7 @@ This is the value of `next-error-function' in Compilation buffers."
(when reset
(setq compilation-current-error nil))
(let* ((columns compilation-error-screen-columns) ; buffer's local value
- (last 1)
+ (last 1) timestamp
(loc (compilation-next-error (or n 1) nil
(or compilation-current-error
compilation-messages-start
@@ -1639,10 +1703,22 @@ This is the value of `next-error-function' in Compilation buffers."
compilation-current-error
(copy-marker (line-beginning-position)))
loc (car loc))
- ;; If loc contains no marker, no error in that file has been visited. If
- ;; the marker is invalid the buffer has been killed. So, recalculate all
- ;; markers for that file.
- (unless (and (nth 3 loc) (marker-buffer (nth 3 loc)))
+ ;; If loc contains no marker, no error in that file has been visited.
+ ;; If the marker is invalid the buffer has been killed.
+ ;; If the file is newer than the timestamp, it has been modified
+ ;; (`omake -P' polls filesystem for changes and recompiles when needed
+ ;; in the same process and buffer).
+ ;; So, recalculate all markers for that file.
+ (unless (and (nth 3 loc) (marker-buffer (nth 3 loc))
+ ;; There may be no timestamp info if the loc is a `fake-loc'.
+ ;; So we skip the time-check here, although we should maybe
+ ;; change `compilation-fake-loc' to add timestamp info.
+ (or (null (nth 4 loc))
+ (equal (nth 4 loc)
+ (setq timestamp
+ (with-current-buffer
+ (marker-buffer (nth 3 loc))
+ (visited-file-modtime))))))
(with-current-buffer (compilation-find-file marker (caar (nth 2 loc))
(cadr (car (nth 2 loc))))
(save-restriction
@@ -1665,7 +1741,8 @@ This is the value of `next-error-function' in Compilation buffers."
(set-marker (nth 3 col) (point))
(setcdr (nthcdr 2 col) `(,(point-marker)))))))))
(compilation-goto-locus marker (nth 3 loc) (nth 3 end-loc))
- (setcdr (nthcdr 3 loc) t))) ; Set this one as visited.
+ (setcdr (nthcdr 3 loc) (list timestamp))
+ (setcdr (nthcdr 4 loc) t))) ; Set this one as visited.
(defvar compilation-gcpro nil
"Internal variable used to keep some values from being GC'd.")
@@ -1691,7 +1768,7 @@ region and the first line of the next region."
(or (consp file) (setq file (list file)))
(setq file (compilation-get-file-structure file))
;; Between the current call to compilation-fake-loc and the first occurrence
- ;; of an error message referring to `file', the data is only kept is the
+ ;; of an error message referring to `file', the data is only kept in the
;; weak hash-table compilation-locs, so we need to prevent this entry
;; in compilation-locs from being GC'd away. --Stef
(push file compilation-gcpro)
@@ -1868,7 +1945,24 @@ Pop up the buffer containing MARKER and scroll to MARKER if we ask the user."
(let* ((name (read-file-name
(format "Find this %s in (default %s): "
compilation-error filename)
- spec-dir filename t nil))
+ spec-dir filename t nil
+ ;; The predicate below is fine when called from
+ ;; minibuffer-complete-and-exit, but it's too
+ ;; restrictive otherwise, since it also prevents the
+ ;; user from completing "fo" to "foo/" when she
+ ;; wants to enter "foo/bar".
+ ;;
+ ;; Try to make sure the user can only select
+ ;; a valid answer. This predicate may be ignored,
+ ;; tho, so we still have to double-check afterwards.
+ ;; TODO: We should probably fix read-file-name so
+ ;; that it never ignores this predicate, even when
+ ;; using popup dialog boxes.
+ ;; (lambda (name)
+ ;; (if (file-directory-p name)
+ ;; (setq name (expand-file-name filename name)))
+ ;; (file-exists-p name))
+ ))
(origname name))
(cond
((not (file-exists-p name))
@@ -2022,9 +2116,9 @@ The file-structure looks like this:
;; compilation-error-list) to point-min, but that was only meaningful for
;; the internal uses of compilation-forget-errors: all calls from external
;; packages seem to be followed by a move of compilation-parsing-end to
- ;; something equivalent to point-max. So we speculatively move
+ ;; something equivalent to point-max. So we heuristically move
;; compilation-current-error to point-max (since the external package
- ;; won't know that it should do it). --stef
+ ;; won't know that it should do it). --Stef
(setq compilation-current-error nil)
(let* ((proc (get-buffer-process (current-buffer)))
(mark (if proc (process-mark proc)))
@@ -2035,7 +2129,12 @@ The file-structure looks like this:
;; we need to put ours just before the insertion point rather
;; than at the insertion point. If that's not possible, then
;; don't use a marker. --Stef
- (if (> pos (point-min)) (copy-marker (1- pos)) pos))))
+ (if (> pos (point-min)) (copy-marker (1- pos)) pos)))
+ ;; Again, since this command is used in buffers that contain several
+ ;; compilations, to set the beginning of "this compilation", it's a good
+ ;; place to reset compilation-auto-jump-to-next.
+ (set (make-local-variable 'compilation-auto-jump-to-next)
+ compilation-auto-jump-to-first-error))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.gcov\\'" . compilation-mode))
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 4de1a845ab4..13f1e0c24b8 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -78,9 +78,8 @@
(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
+ (or (featurep 'xemacs)
(and (boundp 'emacs-major-version)
(or window-system
(> emacs-major-version 20)))))
@@ -131,14 +130,14 @@
(cperl-make-face ,arg ,descr))
(or (boundp (quote ,arg)) ; We use unquoted variants too
(defvar ,arg (quote ,arg) ,descr))))
- (if cperl-xemacs-p
+ (if (featurep 'xemacs)
(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
+ (if (featurep 'xemacs)
(defmacro cperl-etags-goto-tag-location (elt)
;;(progn
;; (switch-to-buffer (get-file-buffer (elt ,elt 0)))
@@ -151,10 +150,8 @@
(defmacro cperl-etags-goto-tag-location (elt)
`(etags-goto-tag-location ,elt))))
-(defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
-
(defvar cperl-can-font-lock
- (or cperl-xemacs-p
+ (or (featurep 'xemacs)
(and (boundp 'emacs-major-version)
(or window-system
(> emacs-major-version 20)))))
@@ -458,7 +455,7 @@ Font for POD headers."
:group 'cperl-faces)
;;; Some double-evaluation happened with font-locks... Needed with 21.2...
-(defvar cperl-singly-quote-face cperl-xemacs-p)
+(defvar cperl-singly-quote-face (featurep 'xemacs))
(defcustom cperl-invalid-face 'underline
"*Face for highlighting trailing whitespace."
@@ -1011,7 +1008,7 @@ In regular expressions (except character classes):
(defmacro cperl-define-key (emacs-key definition &optional xemacs-key)
`(define-key cperl-mode-map
,(if xemacs-key
- `(if cperl-xemacs-p ,xemacs-key ,emacs-key)
+ `(if (featurep 'xemacs) ,xemacs-key ,emacs-key)
emacs-key)
,definition))
@@ -1024,7 +1021,7 @@ In regular expressions (except character classes):
(setq cperl-del-back-ch (aref cperl-del-back-ch 0)))
(defun cperl-mark-active () (mark)) ; Avoid undefined warning
-(if cperl-xemacs-p
+(if (featurep 'xemacs)
(progn
;; "Active regions" are on: use region only if active
;; "Active regions" are off: use region unconditionally
@@ -1040,7 +1037,7 @@ In regular expressions (except character classes):
(defun cperl-putback-char (c) ; Emacs 19
(set 'unread-command-events (list c))) ; Avoid undefined warning
-(if cperl-xemacs-p
+(if (featurep 'xemacs)
(defun cperl-putback-char (c) ; XEmacs >= 19.12
(setq unread-command-events (list (eval '(character-to-event c))))))
@@ -1107,11 +1104,11 @@ versions of Emacs."
;;; (setq interpreter-mode-alist (append interpreter-mode-alist
;;; '(("miniperl" . perl-mode))))))
(eval-when-compile
- (mapcar (lambda (p)
- (condition-case nil
- (require p)
- (error nil)))
- '(imenu easymenu etags timer man info))
+ (mapc (lambda (p)
+ (condition-case nil
+ (require p)
+ (error nil)))
+ '(imenu easymenu etags timer man info))
(if (fboundp 'ps-extend-face-list)
(defmacro cperl-ps-extend-face-list (arg)
`(ps-extend-face-list ,arg))
@@ -1192,7 +1189,7 @@ versions of Emacs."
;;(concat (char-to-string help-char) "v") ; does not work
'cperl-get-help
[(control c) (control h) v]))
- (if (and cperl-xemacs-p
+ (if (and (featurep 'xemacs)
(<= emacs-minor-version 11) (<= emacs-major-version 19))
(progn
;; substitute-key-definition is usefulness-deenhanced...
@@ -1744,7 +1741,7 @@ or as help on variables `cperl-tips', `cperl-problems',
(setq paragraph-separate paragraph-start)
(make-local-variable 'paragraph-ignore-fill-prefix)
(setq paragraph-ignore-fill-prefix t)
- (if cperl-xemacs-p
+ (if (featurep 'xemacs)
(progn
(make-local-variable 'paren-backwards-message)
(set 'paren-backwards-message t)))
@@ -1835,7 +1832,7 @@ or as help on variables `cperl-tips', `cperl-problems',
(or (boundp 'font-lock-unfontify-region-function)
(set 'font-lock-unfontify-region-function
'font-lock-default-unfontify-region))
- (unless cperl-xemacs-p ; Our: just a plug for wrong font-lock
+ (unless (featurep 'xemacs) ; 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))
@@ -5385,15 +5382,15 @@ indentation and initial hashes. Behaves usually outside of comment."
(t
(or name
(setq name "+++BACK+++"))
- (mapcar (lambda (elt)
- (if (and (listp elt) (listp (cdr elt)))
- (progn
- ;; In the other order it goes up
- ;; one level only ;-(
- (setcdr elt (cons (cons name lst)
- (cdr elt)))
- (cperl-imenu-addback (cdr elt) t name))))
- (if isback (cdr lst) lst))
+ (mapc (lambda (elt)
+ (if (and (listp elt) (listp (cdr elt)))
+ (progn
+ ;; In the other order it goes up
+ ;; one level only ;-(
+ (setcdr elt (cons (cons name lst)
+ (cdr elt)))
+ (cperl-imenu-addback (cdr elt) t name))))
+ (if isback (cdr lst) lst))
lst)))
(defun cperl-imenu--create-perl-index (&optional regexp)
@@ -5854,7 +5851,7 @@ indentation and initial hashes. Behaves usually outside of comment."
(and (fboundp 'turn-on-font-lock) ; Check for newer font-lock
;; not yet as of XEmacs 19.12, works with 21.1.11
(or
- (not cperl-xemacs-p)
+ (not (featurep 'xemacs))
(string< "21.1.9" emacs-version)
(and (string< "21.1.10" emacs-version)
(string< emacs-version "21.1.2")))
@@ -6015,7 +6012,7 @@ indentation and initial hashes. Behaves usually outside of comment."
;; (defconst cperl-nonoverridable-face
;; 'cperl-nonoverridable-face
;; "Face to use for data types from another group."))
- ;;(if (not cperl-xemacs-p) nil
+ ;;(if (not (featurep 'xemacs)) nil
;; (or (boundp 'font-lock-comment-face)
;; (defconst font-lock-comment-face
;; 'font-lock-comment-face
@@ -6964,7 +6961,7 @@ Use as
(save-excursion
(cond (inbuffer nil) ; Already there
((file-exists-p tags-file-name)
- (if cperl-xemacs-p
+ (if (featurep 'xemacs)
(visit-tags-table-buffer)
(visit-tags-table-buffer tags-file-name)))
(t (set-buffer (find-file-noselect tags-file-name))))
@@ -6986,17 +6983,17 @@ Use as
(setq cperl-unreadable-ok t
tm nil) ; Return empty list
(error "Aborting: unreadable directory %s" file)))))))
- (mapcar (function
- (lambda (file)
- (cond
- ((string-match cperl-noscan-files-regexp file)
- nil)
- ((not (file-directory-p file))
- (if (string-match cperl-scan-files-regexp file)
- (cperl-write-tags file erase recurse nil t noxs topdir)))
- ((not recurse) nil)
- (t (cperl-write-tags file erase recurse t t noxs topdir)))))
- files)))
+ (mapc (function
+ (lambda (file)
+ (cond
+ ((string-match cperl-noscan-files-regexp file)
+ nil)
+ ((not (file-directory-p file))
+ (if (string-match cperl-scan-files-regexp file)
+ (cperl-write-tags file erase recurse nil t noxs topdir)))
+ ((not recurse) nil)
+ (t (cperl-write-tags file erase recurse t t noxs topdir)))))
+ files)))
(t
(setq xs (string-match "\\.xs$" file))
(if (not (and xs noxs))
@@ -7100,7 +7097,7 @@ One may build such TAGS files from CPerl mode menu."
pack name cons1 to l1 l2 l3 l4 b)
;; (setq cperl-hierarchy '(() () ())) ; Would write into '() later!
(setq cperl-hierarchy (list l1 l2 l3))
- (if cperl-xemacs-p ; Not checked
+ (if (featurep 'xemacs) ; Not checked
(progn
(or tags-file-name
;; Does this work in XEmacs?
@@ -7110,16 +7107,16 @@ One may build such TAGS files from CPerl mode menu."
(cperl-tags-hier-fill))
(or tags-table-list
(call-interactively 'visit-tags-table))
- (mapcar
+ (mapc
(function
(lambda (tagsfile)
(message "Updating list of classes... %s" tagsfile)
(set-buffer (get-file-buffer tagsfile))
(cperl-tags-hier-fill)))
- tags-table-list)
+ tags-table-list)
(message "Updating list of classes... postprocessing..."))
- (mapcar remover (car cperl-hierarchy))
- (mapcar remover (nth 1 cperl-hierarchy))
+ (mapc remover (car cperl-hierarchy))
+ (mapc remover (nth 1 cperl-hierarchy))
(setq to (list nil (cons "Packages: " (nth 1 cperl-hierarchy))
(cons "Methods: " (car cperl-hierarchy))))
(cperl-tags-treeify to 1)
@@ -7183,40 +7180,40 @@ One may build such TAGS files from CPerl mode menu."
(setcdr to l1) ; Init to dynamic space
(setq writeto to)
(setq ord 1)
- (mapcar move-deeper packages)
+ (mapc move-deeper packages)
(setq ord 2)
- (mapcar move-deeper methods)
+ (mapc move-deeper methods)
(if recurse
- (mapcar (function (lambda (elt)
+ (mapc (function (lambda (elt)
(cperl-tags-treeify elt (1+ level))))
- (cdr to)))
+ (cdr to)))
;;Now clean up leaders with one child only
- (mapcar (function (lambda (elt)
- (if (not (and (listp (cdr elt))
- (eq (length elt) 2))) nil
- (setcar elt (car (nth 1 elt)))
- (setcdr elt (cdr (nth 1 elt))))))
- (cdr to))
+ (mapc (function (lambda (elt)
+ (if (not (and (listp (cdr elt))
+ (eq (length elt) 2))) nil
+ (setcar elt (car (nth 1 elt)))
+ (setcdr elt (cdr (nth 1 elt))))))
+ (cdr to))
;; Sort the roots of subtrees
(if (default-value 'imenu-sort-function)
(setcdr to
(sort (cdr to) (default-value 'imenu-sort-function))))
;; Now add back functions removed from display
- (mapcar (function (lambda (elt)
- (setcdr to (cons elt (cdr to)))))
- (if (default-value 'imenu-sort-function)
- (nreverse
- (sort root-functions (default-value 'imenu-sort-function)))
- root-functions))
+ (mapc (function (lambda (elt)
+ (setcdr to (cons elt (cdr to)))))
+ (if (default-value 'imenu-sort-function)
+ (nreverse
+ (sort root-functions (default-value 'imenu-sort-function)))
+ root-functions))
;; Now add back packages removed from display
- (mapcar (function (lambda (elt)
- (setcdr to (cons (cons (concat "package " (car elt))
- (cdr elt))
- (cdr to)))))
- (if (default-value 'imenu-sort-function)
- (nreverse
- (sort root-packages (default-value 'imenu-sort-function)))
- root-packages))))
+ (mapc (function (lambda (elt)
+ (setcdr to (cons (cons (concat "package " (car elt))
+ (cdr elt))
+ (cdr to)))))
+ (if (default-value 'imenu-sort-function)
+ (nreverse
+ (sort root-packages (default-value 'imenu-sort-function)))
+ root-packages))))
;;;(x-popup-menu t
;;; '(keymap "Name1"
@@ -8451,7 +8448,7 @@ the appropriate statement modifier."
'variable-documentation))))
(manual-program (if is-func "perldoc -f" "perldoc")))
(cond
- (cperl-xemacs-p
+ ((featurep 'xemacs)
(let ((Manual-program "perldoc")
(Manual-switches (if is-func (list "-f"))))
(manual-entry word)))
@@ -8493,7 +8490,7 @@ the appropriate statement modifier."
(interactive)
(require 'man)
(cond
- (cperl-xemacs-p
+ ((featurep 'xemacs)
(let ((Manual-program "perldoc"))
(manual-entry buffer-file-name)))
(t
@@ -8689,6 +8686,8 @@ start with default arguments, then refine the slowdown regions."
(message "to %s:%6s,%7s" l delta tot))
tot))
+(defvar font-lock-cache-position)
+
(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
diff --git a/lisp/progmodes/dcl-mode.el b/lisp/progmodes/dcl-mode.el
index 887416f9069..5df2c72b7e0 100644
--- a/lisp/progmodes/dcl-mode.el
+++ b/lisp/progmodes/dcl-mode.el
@@ -73,7 +73,6 @@
(require 'tempo)
-
;;; *** Customization *****************************************************
@@ -2202,6 +2201,7 @@ otherwise return nil."
()
(equal start (match-end 0))))))
+(declare-function imenu-default-create-index-function "../imenu" ())
;;;-------------------------------------------------------------------------
(defun dcl-imenu-create-index-function ()
diff --git a/lisp/progmodes/delphi.el b/lisp/progmodes/delphi.el
index 99f03f8a545..7c2417fde1a 100644
--- a/lisp/progmodes/delphi.el
+++ b/lisp/progmodes/delphi.el
@@ -1642,7 +1642,7 @@ before the indent, the point is moved to the indent."
(when delphi-newline-always-indents
;; Indent both the (now) previous and current line first.
(save-excursion
- (previous-line 1)
+ (forward-line -1)
(delphi-indent-line))
(delphi-indent-line)))
@@ -1677,21 +1677,21 @@ before the indent, the point is moved to the indent."
(unit-file (downcase unit)))
(catch 'done
;; Search for the file.
- (mapcar #'(lambda (file)
- (let ((path (concat dir "/" file)))
- (if (and (string= unit-file (downcase file))
- (delphi-is-file path))
- (throw 'done path))))
- files)
+ (mapc #'(lambda (file)
+ (let ((path (concat dir "/" file)))
+ (if (and (string= unit-file (downcase file))
+ (delphi-is-file path))
+ (throw 'done path))))
+ files)
;; Not found. Search subdirectories.
(when recurse
- (mapcar #'(lambda (subdir)
- (unless (member subdir '("." ".."))
- (let ((path (delphi-search-directory
- unit (concat dir "/" subdir) recurse)))
- (if path (throw 'done path)))))
- files))
+ (mapc #'(lambda (subdir)
+ (unless (member subdir '("." ".."))
+ (let ((path (delphi-search-directory
+ unit (concat dir "/" subdir) recurse)))
+ (if path (throw 'done path)))))
+ files))
;; Not found.
nil))))
@@ -1721,7 +1721,7 @@ before the indent, the point is moved to the indent."
((stringp delphi-search-path)
(delphi-find-unit-in-directory unit delphi-search-path))
- ((mapcar
+ ((mapc
#'(lambda (dir)
(let ((file (delphi-find-unit-in-directory unit dir)))
(if file (throw 'done file))))
@@ -1888,39 +1888,39 @@ comment block. If not in a // comment, just does a normal newline."
(defvar delphi-debug-mode-map
(let ((kmap (make-sparse-keymap)))
- (mapcar #'(lambda (binding) (define-key kmap (car binding) (cadr binding)))
- '(("n" delphi-debug-goto-next-token)
- ("p" delphi-debug-goto-previous-token)
- ("t" delphi-debug-show-current-token)
- ("T" delphi-debug-tokenize-buffer)
- ("W" delphi-debug-tokenize-window)
- ("g" delphi-debug-goto-point)
- ("s" delphi-debug-show-current-string)
- ("a" delphi-debug-parse-buffer)
- ("w" delphi-debug-parse-window)
- ("f" delphi-debug-fontify-window)
- ("F" delphi-debug-fontify-buffer)
- ("r" delphi-debug-parse-region)
- ("c" delphi-debug-unparse-buffer)
- ("x" delphi-debug-show-is-stable)
- ))
+ (mapc #'(lambda (binding) (define-key kmap (car binding) (cadr binding)))
+ '(("n" delphi-debug-goto-next-token)
+ ("p" delphi-debug-goto-previous-token)
+ ("t" delphi-debug-show-current-token)
+ ("T" delphi-debug-tokenize-buffer)
+ ("W" delphi-debug-tokenize-window)
+ ("g" delphi-debug-goto-point)
+ ("s" delphi-debug-show-current-string)
+ ("a" delphi-debug-parse-buffer)
+ ("w" delphi-debug-parse-window)
+ ("f" delphi-debug-fontify-window)
+ ("F" delphi-debug-fontify-buffer)
+ ("r" delphi-debug-parse-region)
+ ("c" delphi-debug-unparse-buffer)
+ ("x" delphi-debug-show-is-stable)
+ ))
kmap)
"Keystrokes for delphi-mode debug commands.")
(defvar delphi-mode-map
(let ((kmap (make-sparse-keymap)))
- (mapcar #'(lambda (binding) (define-key kmap (car binding) (cadr binding)))
- (list '("\r" delphi-newline)
- '("\t" delphi-tab)
- '("\177" backward-delete-char-untabify)
-;; '("\C-cd" delphi-find-current-def)
-;; '("\C-cx" delphi-find-current-xdef)
-;; '("\C-cb" delphi-find-current-body)
- '("\C-cu" delphi-find-unit)
- '("\M-q" delphi-fill-comment)
- '("\M-j" delphi-new-comment-line)
- ;; Debug bindings:
- (list "\C-c\C-d" delphi-debug-mode-map)))
+ (mapc #'(lambda (binding) (define-key kmap (car binding) (cadr binding)))
+ (list '("\r" delphi-newline)
+ '("\t" delphi-tab)
+ '("\177" backward-delete-char-untabify)
+;; '("\C-cd" delphi-find-current-def)
+;; '("\C-cx" delphi-find-current-xdef)
+;; '("\C-cb" delphi-find-current-body)
+ '("\C-cu" delphi-find-unit)
+ '("\M-q" delphi-fill-comment)
+ '("\M-j" delphi-new-comment-line)
+ ;; Debug bindings:
+ (list "\C-c\C-d" delphi-debug-mode-map)))
kmap)
"Keymap used in Delphi mode.")
@@ -1981,17 +1981,17 @@ no args, if that value is non-nil."
(set-syntax-table delphi-mode-syntax-table)
;; Buffer locals:
- (mapcar #'(lambda (var)
- (let ((var-symb (car var))
- (var-val (cadr var)))
- (make-local-variable var-symb)
- (set var-symb var-val)))
- (list '(indent-line-function delphi-indent-line)
- '(comment-indent-function delphi-indent-line)
- '(case-fold-search t)
- '(delphi-progress-last-reported-point nil)
- '(delphi-ignore-changes nil)
- (list 'font-lock-defaults delphi-font-lock-defaults)))
+ (mapc #'(lambda (var)
+ (let ((var-symb (car var))
+ (var-val (cadr var)))
+ (make-local-variable var-symb)
+ (set var-symb var-val)))
+ (list '(indent-line-function delphi-indent-line)
+ '(comment-indent-function delphi-indent-line)
+ '(case-fold-search t)
+ '(delphi-progress-last-reported-point nil)
+ '(delphi-ignore-changes nil)
+ (list 'font-lock-defaults delphi-font-lock-defaults)))
;; We need to keep track of changes to the buffer to determine if we need
;; to retokenize changed text.
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el
index 5e0d4b41820..44034bde3d5 100644
--- a/lisp/progmodes/ebnf-abn.el
+++ b/lisp/progmodes/ebnf-abn.el
@@ -6,7 +6,7 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 1.1
+;; Version: 1.2
;; This file is part of GNU Emacs.
@@ -589,6 +589,12 @@ See documentation for variable `ebnf-abn-lex'."
;; close EPS file
((and ebnf-eps-executing (= (following-char) ?\]))
(ebnf-eps-remove-context (ebnf-abn-eps-filename)))
+ ;; EPS header
+ ((and ebnf-eps-executing (= (following-char) ?H))
+ (ebnf-eps-header-comment (ebnf-abn-eps-filename)))
+ ;; EPS footer
+ ((and ebnf-eps-executing (= (following-char) ?F))
+ (ebnf-eps-footer-comment (ebnf-abn-eps-filename)))
;; any other action in comment
(t
(setq ebnf-action (aref ebnf-comment-table (following-char)))
diff --git a/lisp/progmodes/ebnf-bnf.el b/lisp/progmodes/ebnf-bnf.el
index 6ade2fdc900..8f6ecd99d24 100644
--- a/lisp/progmodes/ebnf-bnf.el
+++ b/lisp/progmodes/ebnf-bnf.el
@@ -6,7 +6,7 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 1.9
+;; Version: 1.10
;; This file is part of GNU Emacs.
@@ -537,6 +537,12 @@ See documentation for variable `ebnf-bnf-lex'."
;; close EPS file
((and ebnf-eps-executing (= (following-char) ?\]))
(ebnf-eps-remove-context (ebnf-bnf-eps-filename)))
+ ;; EPS header
+ ((and ebnf-eps-executing (= (following-char) ?H))
+ (ebnf-eps-header-comment (ebnf-bnf-eps-filename)))
+ ;; EPS footer
+ ((and ebnf-eps-executing (= (following-char) ?F))
+ (ebnf-eps-footer-comment (ebnf-bnf-eps-filename)))
;; any other action in comment
(t
(setq ebnf-action (aref ebnf-comment-table (following-char)))
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index 36fb314e642..855dd3813b8 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -6,7 +6,7 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 1.0
+;; Version: 1.1
;; This file is part of GNU Emacs.
@@ -1306,6 +1306,12 @@ See documentation for variable `ebnf-dtd-lex'."
;; close EPS file
((and ebnf-eps-executing (= (following-char) ?\]))
(ebnf-eps-remove-context (ebnf-dtd-eps-filename)))
+ ;; EPS header
+ ((and ebnf-eps-executing (= (following-char) ?H))
+ (ebnf-eps-header-comment (ebnf-dtd-eps-filename)))
+ ;; EPS footer
+ ((and ebnf-eps-executing (= (following-char) ?F))
+ (ebnf-eps-footer-comment (ebnf-dtd-eps-filename)))
;; any other action in comment
(t
(setq ebnf-action (aref ebnf-comment-table (following-char))))
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el
index cca85a10c2d..90acb3b0b0c 100644
--- a/lisp/progmodes/ebnf-ebx.el
+++ b/lisp/progmodes/ebnf-ebx.el
@@ -6,7 +6,7 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 1.1
+;; Version: 1.2
;; This file is part of GNU Emacs.
@@ -539,6 +539,12 @@ See documentation for variable `ebnf-ebx-lex'."
;; close EPS file
((and ebnf-eps-executing (= (following-char) ?\]))
(ebnf-eps-remove-context (ebnf-ebx-eps-filename)))
+ ;; EPS header
+ ((and ebnf-eps-executing (= (following-char) ?H))
+ (ebnf-eps-header-comment (ebnf-ebx-eps-filename)))
+ ;; EPS footer
+ ((and ebnf-eps-executing (= (following-char) ?F))
+ (ebnf-eps-footer-comment (ebnf-ebx-eps-filename)))
;; any other action in comment
(t
(setq ebnf-action (aref ebnf-comment-table (following-char))))
diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el
index 802cf019d85..9b670b4dbfe 100644
--- a/lisp/progmodes/ebnf-iso.el
+++ b/lisp/progmodes/ebnf-iso.el
@@ -1,12 +1,12 @@
;;; ebnf-iso.el --- parser for ISO EBNF
;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-;; Free Software Foundation, Inc.
+;; Free Software Foundation, Inc.
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 1.8
+;; Version: 1.9
;; This file is part of GNU Emacs.
@@ -504,6 +504,12 @@ See documentation for variable `ebnf-iso-lex'."
;; close EPS file
((and ebnf-eps-executing (= (following-char) ?\]))
(ebnf-eps-remove-context (ebnf-iso-eps-filename)))
+ ;; EPS header
+ ((and ebnf-eps-executing (= (following-char) ?H))
+ (ebnf-eps-header-comment (ebnf-iso-eps-filename)))
+ ;; EPS footer
+ ((and ebnf-eps-executing (= (following-char) ?F))
+ (ebnf-eps-footer-comment (ebnf-iso-eps-filename)))
;; any other action in comment
(t
(setq ebnf-action (aref ebnf-comment-table (following-char))))
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el
index 829494cd7ef..14640649d02 100644
--- a/lisp/progmodes/ebnf-yac.el
+++ b/lisp/progmodes/ebnf-yac.el
@@ -6,7 +6,7 @@
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 1.3
+;; Version: 1.4
;; This file is part of GNU Emacs.
@@ -273,12 +273,12 @@
;; control character & 8-bit character are set to `error'
(let ((table (make-vector 256 'error)))
;; upper & lower case letters:
- (mapcar
+ (mapc
#'(lambda (char)
(aset table char 'non-terminal))
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
;; printable characters:
- (mapcar
+ (mapc
#'(lambda (char)
(aset table char 'character))
"!#$&()*+-.0123456789=?@[\\]^_`~")
@@ -459,6 +459,12 @@ See documentation for variable `ebnf-yac-lex'."
;; close EPS file
((and ebnf-eps-executing (= (following-char) ?\]))
(ebnf-eps-remove-context (ebnf-yac-eps-filename)))
+ ;; EPS header
+ ((and ebnf-eps-executing (= (following-char) ?H))
+ (ebnf-eps-header-comment (ebnf-yac-eps-filename)))
+ ;; EPS footer
+ ((and ebnf-eps-executing (= (following-char) ?F))
+ (ebnf-eps-footer-comment (ebnf-yac-eps-filename)))
;; any other action in comment
(t
(setq ebnf-action (aref ebnf-comment-table (following-char))))
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index 75fc250745e..66aefe66045 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1,12 +1,12 @@
;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript
;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-;; Free Software Foundation, Inc.
+;; Free Software Foundation, Inc.
;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, ebnf, PostScript
-;; Version: 4.3
+;; Version: 4.4
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
;; This file is part of GNU Emacs.
@@ -26,8 +26,8 @@
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
-(defconst ebnf-version "4.3"
- "ebnf2ps.el, v 4.3 <2006/09/26 vinicius>
+(defconst ebnf-version "4.4"
+ "ebnf2ps.el, v 4.4 <2007/02/12 vinicius>
Vinicius's last change version. When reporting bugs, please also
report the version of Emacs, if any, that ebnf2ps was running with.
@@ -448,6 +448,24 @@ Please send all bug fixes and enhancements to
;; `ebnf-eps-region' execution.
;; It's an error to try to close a not opened EPS file.
;;
+;; ;Hheader generate a header in current EPS file. The header string can
+;; have the following formats:
+;;
+;; %% prints a % character.
+;;
+;; %H prints the `ebnf-eps-header' (which see) value.
+;;
+;; %F prints the `ebnf-eps-footer' (which see) value.
+;;
+;; Any other format is ignored, that is, if, for example, it's
+;; used %s then %s characters are stripped out from the header.
+;; If header is an empty string, no header is generated until a
+;; non-empty header is specified or `ebnf-eps-header' has a
+;; non-empty string value.
+;;
+;; ;Ffooter generate a footer in current EPS file. Similar to ;H action
+;; comment.
+;;
;; So if you have:
;;
;; (setq ebnf-horizontal-orientation nil)
@@ -546,6 +564,16 @@ Please send all bug fixes and enhancements to
;; The production A is generated in both files ebnf--AA.eps and ebnf--BB.eps.
;;
;;
+;; Log Messages
+;; ------------
+;;
+;; The buffer *Ebnf2ps Log* is where the ebnf2ps log messages are inserted.
+;; These messages are intended to help debugging ebnf2ps.
+;;
+;; The log messages are enabled by `ebnf-log' option (which see). The default
+;; value is nil, that is, no log messages are generated.
+;;
+;;
;; Utilities
;; ---------
;;
@@ -723,6 +751,14 @@ Please send all bug fixes and enhancements to
;;
;; `ebnf-eps-prefix' Specify EPS prefix file name.
;;
+;; `ebnf-eps-header-font' Specify EPS header font.
+;;
+;; `ebnf-eps-header' Specify EPS header.
+;;
+;; `ebnf-eps-footer-font' Specify EPS footer font.
+;;
+;; `ebnf-eps-footer' Specify EPS footer.
+;;
;; `ebnf-use-float-format' Non-nil means use `%f' float format.
;;
;; `ebnf-stop-on-error' Non-nil means signal error and stop.
@@ -735,6 +771,8 @@ Please send all bug fixes and enhancements to
;; `ebnf-optimize' Non-nil means optimize syntactic chart
;; of rules.
;;
+;; `ebnf-log' Non-nil means generate log messages.
+;;
;; To set the above options you may:
;;
;; a) insert the code in your ~/.emacs, like:
@@ -787,6 +825,9 @@ Please send all bug fixes and enhancements to
;; To help to handle this situation, ebnf2ps has the following commands to
;; handle styles:
;;
+;; `ebnf-find-style' Return style definition if NAME is already defined;
+;; otherwise, return nil.
+;;
;; `ebnf-insert-style' Insert a new style NAME with inheritance INHERITS and
;; values VALUES.
;;
@@ -1879,6 +1920,126 @@ See `ebnf-eps-buffer' and `ebnf-eps-region' commands."
:group 'ebnf2ps)
+(defcustom ebnf-eps-header-font '(11 Helvetica "Black" "White" bold)
+ "*Specify EPS header font.
+
+See documentation for `ebnf-production-font'.
+
+See `ebnf-eps-buffer' and `ebnf-eps-region' commands."
+ :type '(list :tag "EPS Header Font"
+ (number :tag "Font Size")
+ (symbol :tag "Font Name")
+ (choice :tag "Foreground Color"
+ (string :tag "Name")
+ (other :tag "Default" nil))
+ (choice :tag "Background Color"
+ (string :tag "Name")
+ (other :tag "Default" nil))
+ (repeat :tag "Font Attributes" :inline t
+ (choice (const bold) (const italic)
+ (const underline) (const strikeout)
+ (const overline) (const shadow)
+ (const box) (const outline))))
+ :version "22"
+ :group 'ebnf2ps)
+
+
+(defcustom ebnf-eps-header nil
+ "*Specify EPS header.
+
+The value should be a string, a symbol or nil.
+
+String is inserted unchanged.
+
+For symbol bounded to a function, the function is called and should return a
+string. For symbol bounded to a value, the value should be a string.
+
+If symbol is unbounded, it is silently ignored.
+
+Empty string or nil mean that no header will be generated.
+
+Note that when the header action comment (;H in EBNF syntax) is specified, the
+string in the header action comment is processed and, if it returns a non-empty
+string, it's used to generate the header. The header action comment accepts
+the following formats:
+
+ %% prints a % character.
+
+ %H prints the `ebnf-eps-header' value.
+
+ %F prints the `ebnf-eps-footer' (which see) value.
+
+Any other format is ignored, that is, if, for example, it's used %s then %s
+characters are stripped out from the header. If header action comment is an
+empty string, no header is generated until a non-empty header is specified or
+`ebnf-eps-header' has a non-empty string value."
+ :type '(repeat (choice :menu-tag "EPS Header"
+ :tag "EPS Header"
+ string symbol (const :tag "No Header" nil )))
+ :version "22"
+ :group 'ebnf2ps)
+
+
+(defcustom ebnf-eps-footer-font '(7 Helvetica "Black" "White" bold)
+ "*Specify EPS footer font.
+
+See documentation for `ebnf-production-font'.
+
+See `ebnf-eps-buffer' and `ebnf-eps-region' commands."
+ :type '(list :tag "EPS Footer Font"
+ (number :tag "Font Size")
+ (symbol :tag "Font Name")
+ (choice :tag "Foreground Color"
+ (string :tag "Name")
+ (other :tag "Default" nil))
+ (choice :tag "Background Color"
+ (string :tag "Name")
+ (other :tag "Default" nil))
+ (repeat :tag "Font Attributes" :inline t
+ (choice (const bold) (const italic)
+ (const underline) (const strikeout)
+ (const overline) (const shadow)
+ (const box) (const outline))))
+ :version "22"
+ :group 'ebnf2ps)
+
+
+(defcustom ebnf-eps-footer nil
+ "*Specify EPS footer.
+
+The value should be a string, a symbol or nil.
+
+String is inserted unchanged.
+
+For symbol bounded to a function, the function is called and should return a
+string. For symbol bounded to a value, the value should be a string.
+
+If symbol is unbounded, it is silently ignored.
+
+Empty string or nil mean that no footer will be generated.
+
+Note that when the footer action comment (;F in EBNF syntax) is specified, the
+string in the footer action comment is processed and, if it returns a non-empty
+string, it's used to generate the footer. The footer action comment accepts
+the following formats:
+
+ %% prints a % character.
+
+ %H prints the `ebnf-eps-header' (which see) value.
+
+ %F prints the `ebnf-eps-footer' value.
+
+Any other format is ignored, that is, if, for example, it's used %s then %s
+characters are stripped out from the footer. If footer action comment is an
+empty string, no footer is generated until a non-empty footer is specified or
+`ebnf-eps-footer' has a non-empty string value."
+ :type '(repeat (choice :menu-tag "EPS Footer"
+ :tag "EPS Footer"
+ string symbol (const :tag "No Footer" nil )))
+ :version "22"
+ :group 'ebnf2ps)
+
+
(defcustom ebnf-entry-percentage 0.5 ; middle
"*Specify entry height on alternatives.
@@ -2019,6 +2180,16 @@ The above optimizations are specially useful when `ebnf-syntax' is `yacc'."
:version "20"
:group 'ebnf-optimization)
+
+(defcustom ebnf-log nil
+ "*Non-nil means generate log messages.
+
+The log messages are generated into the buffer *Ebnf2ps Log*.
+These messages are intended to help debugging ebnf2ps."
+ :type 'boolean
+ :version "22"
+ :group 'ebnf2ps)
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; To make this file smaller, some commands go in a separate file.
@@ -2063,6 +2234,7 @@ See also `ebnf-print-buffer'."
(interactive
(list (read-file-name "Directory containing EBNF files (print): "
nil default-directory)))
+ (ebnf-log-header "(ebnf-print-directory %S)" directory)
(ebnf-directory 'ebnf-print-buffer directory))
@@ -2075,6 +2247,7 @@ killed after process termination.
See also `ebnf-print-buffer'."
(interactive "fEBNF file to generate PostScript and print from: ")
+ (ebnf-log-header "(ebnf-print-file %S %S)" file do-not-kill-buffer-when-done)
(ebnf-file 'ebnf-print-buffer file do-not-kill-buffer-when-done))
@@ -2091,6 +2264,7 @@ is nil, send the image to the printer. If FILENAME is a string, save
the PostScript image in a file with that name. If FILENAME is a
number, prompt the user for the name of the file to save in."
(interactive (list (ps-print-preprint current-prefix-arg)))
+ (ebnf-log-header "(ebnf-print-buffer %S)" filename)
(ebnf-print-region (point-min) (point-max) filename))
@@ -2099,6 +2273,7 @@ number, prompt the user for the name of the file to save in."
"Generate and print a PostScript syntactic chart image of the region.
Like `ebnf-print-buffer', but prints just the current region."
(interactive (list (point) (mark) (ps-print-preprint current-prefix-arg)))
+ (ebnf-log-header "(ebnf-print-region %S %S %S)" from to filename)
(run-hooks 'ebnf-hook)
(or (ebnf-spool-region from to)
(ps-do-despool filename)))
@@ -2117,6 +2292,7 @@ See also `ebnf-spool-buffer'."
(interactive
(list (read-file-name "Directory containing EBNF files (spool): "
nil default-directory)))
+ (ebnf-log-header "(ebnf-spool-directory %S)" directory)
(ebnf-directory 'ebnf-spool-buffer directory))
@@ -2129,6 +2305,7 @@ killed after process termination.
See also `ebnf-spool-buffer'."
(interactive "fEBNF file to generate PostScript and spool from: ")
+ (ebnf-log-header "(ebnf-spool-file %S %S)" file do-not-kill-buffer-when-done)
(ebnf-file 'ebnf-spool-buffer file do-not-kill-buffer-when-done))
@@ -2140,6 +2317,7 @@ local buffer to be sent to the printer later.
Use the command `ebnf-despool' to send the spooled images to the printer."
(interactive)
+ (ebnf-log-header "(ebnf-spool-buffer)")
(ebnf-spool-region (point-min) (point-max)))
@@ -2150,6 +2328,7 @@ Like `ebnf-spool-buffer', but spools just the current region.
Use the command `ebnf-despool' to send the spooled images to the printer."
(interactive "r")
+ (ebnf-log-header "(ebnf-spool-region %S)" from to)
(ebnf-generate-region from to 'ebnf-generate))
@@ -2166,6 +2345,7 @@ See also `ebnf-eps-buffer'."
(interactive
(list (read-file-name "Directory containing EBNF files (EPS): "
nil default-directory)))
+ (ebnf-log-header "(ebnf-eps-directory %S)" directory)
(ebnf-directory 'ebnf-eps-buffer directory))
@@ -2178,6 +2358,7 @@ killed after EPS generation.
See also `ebnf-eps-buffer'."
(interactive "fEBNF file to generate EPS file from: ")
+ (ebnf-log-header "(ebnf-eps-file %S %S)" file do-not-kill-buffer-when-done)
(ebnf-file 'ebnf-eps-buffer file do-not-kill-buffer-when-done))
@@ -2200,8 +2381,9 @@ The EPS file name has the following form:
file name used in this case will be \"ebnf--A_B_+_C.eps\".
WARNING: This function does *NOT* ask any confirmation to override existing
- files."
+ files."
(interactive)
+ (ebnf-log-header "(ebnf-eps-buffer)")
(ebnf-eps-region (point-min) (point-max)))
@@ -2224,8 +2406,9 @@ The EPS file name has the following form:
file name used in this case will be \"ebnf--A_B_+_C.eps\".
WARNING: This function does *NOT* ask any confirmation to override existing
- files."
+ files."
(interactive "r")
+ (ebnf-log-header "(ebnf-eps-region %S %S)" from to)
(let ((ebnf-eps-executing t))
(ebnf-generate-region from to 'ebnf-generate-eps)))
@@ -2247,6 +2430,7 @@ See also `ebnf-syntax-buffer'."
(interactive
(list (read-file-name "Directory containing EBNF files (syntax): "
nil default-directory)))
+ (ebnf-log-header "(ebnf-syntax-directory %S)" directory)
(ebnf-directory 'ebnf-syntax-buffer directory))
@@ -2259,6 +2443,7 @@ killed after syntax checking.
See also `ebnf-syntax-buffer'."
(interactive "fEBNF file to check syntax: ")
+ (ebnf-log-header "(ebnf-syntax-file %S %S)" file do-not-kill-buffer-when-done)
(ebnf-file 'ebnf-syntax-buffer file do-not-kill-buffer-when-done))
@@ -2266,13 +2451,15 @@ See also `ebnf-syntax-buffer'."
(defun ebnf-syntax-buffer ()
"Do a syntactic analysis of the current buffer."
(interactive)
+ (ebnf-log-header "(ebnf-syntax-buffer)")
(ebnf-syntax-region (point-min) (point-max)))
;;;###autoload
(defun ebnf-syntax-region (from to)
- "Do a syntactic analysis of region."
+ "Do a syntactic analysis of a region."
(interactive "r")
+ (ebnf-log-header "(ebnf-syntax-region %S %S)" from to)
(ebnf-generate-region from to nil))
@@ -2287,6 +2474,8 @@ See also `ebnf-syntax-buffer'."
"
;;; ebnf2ps.el version %s
+;;; Emacs version %S
+
\(setq ebnf-special-show-delimiter %S
ebnf-special-font %s
ebnf-special-shape %s
@@ -2333,20 +2522,28 @@ See also `ebnf-syntax-buffer'."
ebnf-iso-normalize-p %S
ebnf-file-suffix-regexp %S
ebnf-eps-prefix %S
+ ebnf-eps-header-font %s
+ ebnf-eps-header %s
+ ebnf-eps-footer-font %s
+ ebnf-eps-footer %s
ebnf-entry-percentage %S
ebnf-color-p %S
ebnf-line-width %S
ebnf-line-color %S
+ ebnf-arrow-extra-width %S
+ ebnf-arrow-scale %S
ebnf-debug-ps %S
ebnf-use-float-format %S
ebnf-stop-on-error %S
ebnf-yac-ignore-error-recovery %S
ebnf-ignore-empty-rule %S
- ebnf-optimize %S)
+ ebnf-optimize %S
+ ebnf-log %S)
;;; ebnf2ps.el - end of settings
"
ebnf-version
+ emacs-version
ebnf-special-show-delimiter
(ps-print-quote ebnf-special-font)
(ps-print-quote ebnf-special-shape)
@@ -2393,16 +2590,23 @@ See also `ebnf-syntax-buffer'."
ebnf-iso-normalize-p
ebnf-file-suffix-regexp
ebnf-eps-prefix
+ (ps-print-quote ebnf-eps-header-font)
+ (ps-print-quote ebnf-eps-header)
+ (ps-print-quote ebnf-eps-footer-font)
+ (ps-print-quote ebnf-eps-footer)
ebnf-entry-percentage
ebnf-color-p
ebnf-line-width
ebnf-line-color
+ ebnf-arrow-extra-width
+ ebnf-arrow-scale
ebnf-debug-ps
ebnf-use-float-format
ebnf-stop-on-error
ebnf-yac-ignore-error-recovery
ebnf-ignore-empty-rule
- ebnf-optimize))
+ ebnf-optimize
+ ebnf-log))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -2465,6 +2669,10 @@ See also `ebnf-syntax-buffer'."
ebnf-iso-normalize-p
ebnf-file-suffix-regexp
ebnf-eps-prefix
+ ebnf-eps-header-font
+ ebnf-eps-header
+ ebnf-eps-footer-font
+ ebnf-eps-footer
ebnf-entry-percentage
ebnf-color-p
ebnf-line-width
@@ -2528,6 +2736,10 @@ See also `ebnf-syntax-buffer'."
(ebnf-iso-normalize-p . nil)
(ebnf-file-suffix-regexp . "\.[Bb][Nn][Ff]$")
(ebnf-eps-prefix . "ebnf--")
+ (ebnf-eps-header-font . '(11 Helvetica "Black" "White" bold))
+ (ebnf-eps-header . nil)
+ (ebnf-eps-footer-font . '(7 Helvetica "Black" "White" bold))
+ (ebnf-eps-footer . nil)
(ebnf-entry-percentage . 0.5)
(ebnf-color-p . (or (fboundp 'x-color-values) ; Emacs
(fboundp 'color-instance-rgb-components))) ; XEmacs
@@ -2601,6 +2813,15 @@ Don't use this variable directly. Use functions `ebnf-insert-style',
;;;###autoload
+(defun ebnf-find-style (name)
+ "Return style definition if NAME is already defined; otherwise, return nil.
+
+See `ebnf-style-database' documentation."
+ (interactive "SStyle name: ")
+ (assoc name ebnf-style-database))
+
+
+;;;###autoload
(defun ebnf-insert-style (name inherits &rest values)
"Insert a new style NAME with inheritance INHERITS and values VALUES.
@@ -2735,18 +2956,20 @@ See `ebnf-style-database' documentation."
;; Internal variables
-(defvar ebnf-eps-buffer-name " *EPS*")
-(defvar ebnf-parser-func nil)
-(defvar ebnf-eps-executing nil)
-(defvar ebnf-eps-upper-x 0.0)
+(defvar ebnf-eps-buffer-name " *EPS*")
+(defvar ebnf-parser-func nil)
+(defvar ebnf-eps-executing nil)
+(defvar ebnf-eps-header-comment nil)
+(defvar ebnf-eps-footer-comment nil)
+(defvar ebnf-eps-upper-x 0.0)
(make-variable-buffer-local 'ebnf-eps-upper-x)
-(defvar ebnf-eps-upper-y 0.0)
+(defvar ebnf-eps-upper-y 0.0)
(make-variable-buffer-local 'ebnf-eps-upper-y)
-(defvar ebnf-eps-prod-width 0.0)
+(defvar ebnf-eps-prod-width 0.0)
(make-variable-buffer-local 'ebnf-eps-prod-width)
-(defvar ebnf-eps-max-height 0.0)
+(defvar ebnf-eps-max-height 0.0)
(make-variable-buffer-local 'ebnf-eps-max-height)
-(defvar ebnf-eps-max-width 0.0)
+(defvar ebnf-eps-max-width 0.0)
(make-variable-buffer-local 'ebnf-eps-max-width)
@@ -2756,6 +2979,23 @@ See `ebnf-style-database' documentation."
See section \"Actions in Comments\" in ebnf2ps documentation.")
+(defvar ebnf-eps-file-alist nil
+"Alist associating file name with EPS header and footer.
+
+Each element has the following form:
+
+ (EPS-FILENAME HEADER FOOTER)
+
+EPS-FILENAME is the EPS file name.
+HEADER is the header string or nil.
+FOOTER is the footer string or nil.
+
+It's generated during parsing and used during EPS generation.
+
+See `ebnf-eps-context' and section \"Actions in Comments\" in ebnf2ps
+documentation.")
+
+
(defvar ebnf-eps-production-list nil
"Alist associating production name with EPS file name list.
@@ -2800,41 +3040,43 @@ See documentation for `ebnf-terminal-shape', `ebnf-non-terminal-shape' and
`ebnf-chart-shape'.")
-(defvar ebnf-limit nil)
-(defvar ebnf-action nil)
-(defvar ebnf-action-list nil)
+(defvar ebnf-limit nil)
+(defvar ebnf-action nil)
+(defvar ebnf-action-list nil)
-(defvar ebnf-default-p nil)
+(defvar ebnf-default-p nil)
-(defvar ebnf-font-height-P 0)
-(defvar ebnf-font-height-T 0)
-(defvar ebnf-font-height-NT 0)
-(defvar ebnf-font-height-S 0)
-(defvar ebnf-font-height-E 0)
-(defvar ebnf-font-height-R 0)
-(defvar ebnf-font-width-P 0)
-(defvar ebnf-font-width-T 0)
-(defvar ebnf-font-width-NT 0)
-(defvar ebnf-font-width-S 0)
-(defvar ebnf-font-width-E 0)
-(defvar ebnf-font-width-R 0)
-(defvar ebnf-space-T 0)
-(defvar ebnf-space-NT 0)
-(defvar ebnf-space-S 0)
-(defvar ebnf-space-E 0)
-(defvar ebnf-space-R 0)
+(defvar ebnf-font-height-P 0)
+(defvar ebnf-font-height-T 0)
+(defvar ebnf-font-height-NT 0)
+(defvar ebnf-font-height-S 0)
+(defvar ebnf-font-height-E 0)
+(defvar ebnf-font-height-R 0)
+(defvar ebnf-font-width-P 0)
+(defvar ebnf-font-width-T 0)
+(defvar ebnf-font-width-NT 0)
+(defvar ebnf-font-width-S 0)
+(defvar ebnf-font-width-E 0)
+(defvar ebnf-font-width-R 0)
+(defvar ebnf-space-T 0)
+(defvar ebnf-space-NT 0)
+(defvar ebnf-space-S 0)
+(defvar ebnf-space-E 0)
+(defvar ebnf-space-R 0)
-(defvar ebnf-basic-width 0)
-(defvar ebnf-basic-height 0)
-(defvar ebnf-vertical-space 0)
-(defvar ebnf-horizontal-space 0)
+(defvar ebnf-basic-width-extra 0)
+(defvar ebnf-basic-width 0)
+(defvar ebnf-basic-height 0)
+(defvar ebnf-basic-empty-height 0)
+(defvar ebnf-vertical-space 0)
+(defvar ebnf-horizontal-space 0)
-(defvar ebnf-settings nil)
-(defvar ebnf-fonts-required nil)
+(defvar ebnf-settings nil)
+(defvar ebnf-fonts-required nil)
(defconst ebnf-debug
@@ -3179,8 +3421,8 @@ See documentation for `ebnf-terminal-shape', `ebnf-non-terminal-shape' and
% --- Flow Stuff
-% height prepare_height |- line_height corner_height corner_height
-/prepare_height
+% height prepare-height |- line_height corner_height corner_height
+/prepare-height
{dup 0 gt
{T sub hT}
{T add hT neg}ifelse
@@ -3206,7 +3448,7 @@ See documentation for `ebnf-terminal-shape', `ebnf-non-terminal-shape' and
{0.5 mul dup
1 corner_RA
0 corner_RD}
- {prepare_height
+ {prepare-height
1 corner_RA
exch 0 exch rlineto
0 corner_RD
@@ -3227,7 +3469,7 @@ See documentation for `ebnf-terminal-shape', `ebnf-non-terminal-shape' and
% \\
% -
/LLoop
-{prepare_height
+{prepare-height
3 corner_LA
exch 0 exch rlineto
0 corner_RD
@@ -3252,7 +3494,7 @@ See documentation for `ebnf-terminal-shape', `ebnf-non-terminal-shape' and
{0.5 mul dup
1 corner_LA
0 corner_LD}
- {prepare_height
+ {prepare-height
1 corner_LA
exch 0 exch rlineto
0 corner_LD
@@ -3273,7 +3515,7 @@ See documentation for `ebnf-terminal-shape', `ebnf-non-terminal-shape' and
% /
% -
/RLoop
-{prepare_height
+{prepare-height
1 corner_RA
exch 0 exch rlineto
0 corner_LD
@@ -4064,6 +4306,113 @@ end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Header & Footer
+
+
+(defun ebnf-eps-header-footer (value)
+ ;; evaluate header/footer value
+ ;; return a string or nil
+ (let ((tmp (if (symbolp value)
+ (cond ((fboundp value) (funcall value))
+ ((boundp value) (symbol-value value))
+ (t nil))
+ value)))
+ (and (stringp tmp) tmp)))
+
+
+(defun ebnf-eps-header ()
+ ;; evaluate header value
+ (ebnf-eps-header-footer ebnf-eps-header))
+
+
+(defun ebnf-eps-footer ()
+ ;; evaluate footer value
+ (ebnf-eps-header-footer ebnf-eps-footer))
+
+
+;; hacked fom `ps-output-string-prim' (ps-print.el)
+(defun ebnf-eps-string (string)
+ (let* ((str (string-as-unibyte string))
+ (len (length str))
+ (index 0)
+ (new "(") ; insert start-string delimiter
+ start special)
+ ;; Find and quote special characters as necessary for PS
+ ;; This skips everything except control chars, non-ASCII chars, (, ) and \.
+ (while (setq start (string-match "[^]-~ -'*-[]" str index))
+ (setq special (aref str start)
+ new (concat new
+ (substring str index start)
+ (if (and (<= 0 special) (<= special 255))
+ (aref ps-string-escape-codes special)
+ ;; insert hexadecimal representation if character
+ ;; code is out of range
+ (format "\\%04X" special)))
+ index (1+ start)))
+ (concat new
+ (and (< index len)
+ (substring str index len))
+ ")"))) ; insert end-string delimiter
+
+
+(defun ebnf-eps-header-footer-comment (str)
+ ;; parse header/footer comment string
+ (let ((len (1- (length str)))
+ (index 0)
+ new start fmt)
+ (while (setq start (string-match "%" str index))
+ (setq fmt (if (< start len) (aref str (1+ start)) ?\?)
+ new (concat new
+ (substring str index start)
+ (cond ((= fmt ?%) "%")
+ ((= fmt ?H) (ebnf-eps-header))
+ ((= fmt ?F) (ebnf-eps-footer))
+ (t nil)
+ ))
+ index (+ start 2)))
+ (ebnf-eps-string (concat new
+ (and (<= index len)
+ (substring str index (1+ len)))))))
+
+
+(defun ebnf-eps-header-footer-p (value)
+ ;; return t if value is non-nil and is not an empty string
+ (not (or (null value)
+ (and (stringp value) (string= value "")))))
+
+
+(defun ebnf-eps-header-comment (str)
+ ;; set header comment if header is on
+ (when (ebnf-eps-header-footer-p ebnf-eps-header)
+ (setq ebnf-eps-header-comment (ebnf-eps-header-footer-comment str))))
+
+
+(defun ebnf-eps-footer-comment (str)
+ ;; set footer comment if footer is on
+ (when (ebnf-eps-header-footer-p ebnf-eps-footer)
+ (setq ebnf-eps-footer-comment (ebnf-eps-header-footer-comment str))))
+
+
+(defun ebnf-eps-header-footer-file (filename)
+ ;; associate header and footer with a filename
+ (let ((filehf (assoc filename ebnf-eps-file-alist))
+ (header (or ebnf-eps-header-comment (ebnf-eps-header)))
+ (footer (or ebnf-eps-footer-comment (ebnf-eps-footer))))
+ (if (null filehf)
+ (setq ebnf-eps-file-alist (cons (list filename header footer)
+ ebnf-eps-file-alist))
+ (setcar (nthcdr 1 filehf) header)
+ (setcar (nthcdr 2 filehf) footer))))
+
+
+(defun ebnf-eps-header-footer-set (filename)
+ ;; set header and footer from a filename
+ (let ((header-footer (assoc filename ebnf-eps-file-alist)))
+ (setq ebnf-eps-header-comment (nth 1 header-footer)
+ ebnf-eps-footer-comment (nth 2 header-footer))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Formatting
@@ -4513,7 +4862,9 @@ end
(if sep
(let ((ebnf-direction "L"))
(ebnf-node-generation sep))
- (ebnf-empty-alternative (- width ebnf-horizontal-space))))
+ (ebnf-empty-alternative (- width
+ ebnf-horizontal-space
+ ebnf-basic-width-extra))))
(ps-output "EOS\n"))
@@ -4528,7 +4879,7 @@ end
(if node-sep
(- (ebnf-node-height node-sep)
(ebnf-node-entry node-sep))
- 0))))
+ ebnf-basic-empty-height))))
(ps-output (ebnf-format-float entry
(+ (- (ebnf-node-height node-list)
list-entry)
@@ -4540,7 +4891,9 @@ end
(if (ebnf-node-separator zero-or-more)
(let ((ebnf-direction "L"))
(ebnf-node-generation (ebnf-node-separator zero-or-more)))
- (ebnf-empty-alternative (- width ebnf-horizontal-space))))
+ (ebnf-empty-alternative (- width
+ ebnf-horizontal-space
+ ebnf-basic-width-extra))))
(ps-output "EOS\n"))
@@ -4651,18 +5004,20 @@ killed after process termination."
(defvar ebnf-map-name
(let ((map (make-vector 256 ?\_)))
- (mapcar #'(lambda (char)
- (aset map char char))
- (concat "#$%&+-.0123456789=?@~"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"))
+ (mapc #'(lambda (char)
+ (aset map char char))
+ (concat "#$%&+-.0123456789=?@~"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"))
map))
(defun ebnf-eps-filename (str)
(let* ((len (length str))
(stri 0)
- (new (make-string len ?\s)))
+ ;; to keep compatibility with Emacs 20 & 21:
+ ;; DO NOT REPLACE `?\ ' BY `?\s'
+ (new (make-string len ?\ )))
(while (< stri len)
(aset new stri (aref ebnf-map-name (aref str stri)))
(setq stri (1+ stri)))
@@ -4723,6 +5078,7 @@ killed after process termination."
(defun ebnf-parse-and-sort (start)
+ (ebnf-log "(ebnf-parse-and-sort %S)" start)
(ebnf-begin-job)
(let ((tree (funcall ebnf-parser-func start)))
(if ebnf-sort-production
@@ -4861,7 +5217,10 @@ killed after process termination."
ebnf-action nil
ebnf-default-p nil
ebnf-eps-context nil
+ ebnf-eps-file-alist nil
ebnf-eps-production-list nil
+ ebnf-eps-header-comment nil
+ ebnf-eps-footer-comment nil
ebnf-eps-upper-x 0.0
ebnf-eps-upper-y 0.0
ebnf-font-height-P (ebnf-font-height ebnf-production-font)
@@ -4882,10 +5241,14 @@ killed after process termination."
ebnf-space-E (* ebnf-font-height-E 0.5)
ebnf-space-R (* ebnf-font-height-R 0.5))
(let ((basic (+ ebnf-font-height-T ebnf-font-height-NT)))
- (setq ebnf-basic-width (* basic 0.5)
- ebnf-horizontal-space (+ basic basic)
- ebnf-basic-height ebnf-basic-width
- ebnf-vertical-space ebnf-basic-width)
+ (setq ebnf-basic-width (* basic 0.5)
+ ebnf-horizontal-space (+ basic basic)
+ ebnf-basic-empty-height (* ebnf-basic-width 0.5)
+ ebnf-basic-height ebnf-basic-width
+ ebnf-vertical-space ebnf-basic-width
+ ebnf-basic-width-extra (- ebnf-basic-width
+ ebnf-arrow-extra-width
+ 0.1)) ; error factor
;; ensures value is greater than zero
(or (and (numberp ebnf-production-horizontal-space)
(> ebnf-production-horizontal-space 0.0))
@@ -4893,7 +5256,18 @@ killed after process termination."
;; ensures value is greater than zero
(or (and (numberp ebnf-production-vertical-space)
(> ebnf-production-vertical-space 0.0))
- (setq ebnf-production-vertical-space basic))))
+ (setq ebnf-production-vertical-space basic)))
+ (ebnf-log "(ebnf-begin-job)")
+ (ebnf-log " ebnf-arrow-extra-width ............ : %7.3f" ebnf-arrow-extra-width)
+ (ebnf-log " ebnf-arrow-scale .................. : %7.3f" ebnf-arrow-scale)
+ (ebnf-log " ebnf-basic-width-extra ............ : %7.3f" ebnf-basic-width-extra)
+ (ebnf-log " ebnf-basic-width .................. : %7.3f (T)" ebnf-basic-width)
+ (ebnf-log " ebnf-horizontal-space ............. : %7.3f (4T)" ebnf-horizontal-space)
+ (ebnf-log " ebnf-basic-empty-height ........... : %7.3f (hT)" ebnf-basic-empty-height)
+ (ebnf-log " ebnf-basic-height ................. : %7.3f (T)" ebnf-basic-height)
+ (ebnf-log " ebnf-vertical-space ............... : %7.3f (T)" ebnf-vertical-space)
+ (ebnf-log " ebnf-production-horizontal-space .. : %7.3f (2T)" ebnf-production-horizontal-space)
+ (ebnf-log " ebnf-production-vertical-space .... : %7.3f (2T)" ebnf-production-vertical-space))
(defsubst ebnf-shape-value (sym alist)
@@ -4916,6 +5290,7 @@ killed after process termination."
(progn
;; adjust creator comment
(end-of-line)
+ ;; (backward-char)
(insert " & ebnf2ps v" ebnf-version)
;; insert ebnf settings & engine
(goto-char (point-max))
@@ -4928,6 +5303,7 @@ killed after process termination."
(when (buffer-modified-p buffer)
(save-excursion
(set-buffer buffer)
+ (ebnf-eps-header-footer-set filename)
(setq ebnf-eps-upper-x (max ebnf-eps-upper-x ebnf-eps-max-width)
ebnf-eps-upper-y (if (zerop ebnf-eps-upper-y)
ebnf-eps-max-height
@@ -4954,7 +5330,9 @@ killed after process termination."
ebnf-non-terminal-font
ebnf-special-font
ebnf-except-font
- ebnf-repeat-font)))
+ ebnf-repeat-font
+ ebnf-eps-header-font
+ ebnf-eps-footer-font)))
"\n%%+ font ")))
"\n%%Pages: 0\n%%EndComments\n\n%%BeginProlog\n"
ebnf-eps-prologue)
@@ -4980,6 +5358,42 @@ killed after process termination."
(setq ebnf-settings
(concat
"\n\n% === begin EBNF settings\n\n"
+ (format "/Header %s def\n"
+ (or ebnf-eps-header-comment "()"))
+ (format "/Footer %s def\n"
+ (or ebnf-eps-footer-comment "()"))
+ ;; header
+ (format "/ShowHeader %s def\n"
+ (ebnf-boolean
+ (ebnf-eps-header-footer-p ebnf-eps-header)))
+ (format "/fH %s /%s DefFont\n"
+ (ebnf-format-float
+ (ebnf-font-size ebnf-eps-header-font))
+ (ebnf-font-name-select ebnf-eps-header-font))
+ (ebnf-format-color "/ForegroundH %s def %% %s\n"
+ (ebnf-font-foreground ebnf-eps-header-font)
+ "Black")
+ (ebnf-format-color "/BackgroundH %s def %% %s\n"
+ (ebnf-font-background ebnf-eps-header-font)
+ "White")
+ (format "/EffectH %d def\n"
+ (ebnf-font-attributes ebnf-eps-header-font))
+ ;; footer
+ (format "/ShowFooter %s def\n"
+ (ebnf-boolean
+ (ebnf-eps-header-footer-p ebnf-eps-footer)))
+ (format "/fF %s /%s DefFont\n"
+ (ebnf-format-float
+ (ebnf-font-size ebnf-eps-footer-font))
+ (ebnf-font-name-select ebnf-eps-footer-font))
+ (ebnf-format-color "/ForegroundF %s def %% %s\n"
+ (ebnf-font-foreground ebnf-eps-footer-font)
+ "Black")
+ (ebnf-format-color "/BackgroundF %s def %% %s\n"
+ (ebnf-font-background ebnf-eps-footer-font)
+ "White")
+ (format "/EffectF %d def\n"
+ (ebnf-font-attributes ebnf-eps-footer-font))
;; production
(format "/fP %s /%s DefFont\n"
(ebnf-format-float (ebnf-font-size ebnf-production-font))
@@ -5136,9 +5550,10 @@ killed after process termination."
(defun ebnf-dimensions (tree)
+ (ebnf-log "(ebnf-dimensions tree)")
(let ((ebnf-total (length tree))
(ebnf-nprod 0))
- (mapcar 'ebnf-production-dimension tree))
+ (mapc 'ebnf-production-dimension tree))
tree)
@@ -5149,6 +5564,7 @@ killed after process termination."
;; [production width-fun dim-fun entry height width name production action]
(defun ebnf-production-dimension (production)
+ (ebnf-log "(ebnf-production-dimension production)")
(ebnf-message-info "Calculating dimensions")
(ebnf-node-dimension-func (ebnf-node-production production))
(let* ((prod (ebnf-node-production production))
@@ -5162,11 +5578,17 @@ killed after process termination."
(ebnf-node-height production height)
(ebnf-node-width production (+ (ebnf-node-width prod)
ebnf-line-width
- ebnf-horizontal-space))))
+ ebnf-horizontal-space
+ ebnf-basic-width-extra)))
+ (ebnf-log " production name : %S" (ebnf-node-name production))
+ (ebnf-log " production entry : %7.3f" (ebnf-node-entry production))
+ (ebnf-log " production height : %7.3f" (ebnf-node-height production))
+ (ebnf-log " production width : %7.3f" (ebnf-node-width production)))
;; [terminal width-fun dim-fun entry height width name]
(defun ebnf-terminal-dimension (terminal)
+ (ebnf-log "(ebnf-terminal-dimension terminal)")
(ebnf-terminal-dimension1 terminal
ebnf-font-height-T
ebnf-font-width-T
@@ -5175,6 +5597,7 @@ killed after process termination."
;; [non-terminal width-fun dim-fun entry height width name]
(defun ebnf-non-terminal-dimension (non-terminal)
+ (ebnf-log "(ebnf-non-terminal-dimension non-terminal)")
(ebnf-terminal-dimension1 non-terminal
ebnf-font-height-NT
ebnf-font-width-NT
@@ -5183,6 +5606,7 @@ killed after process termination."
;; [special width-fun dim-fun entry height width name]
(defun ebnf-special-dimension (special)
+ (ebnf-log "(ebnf-special-dimension special)")
(ebnf-terminal-dimension1 special
ebnf-font-height-S
ebnf-font-width-S
@@ -5194,9 +5618,16 @@ killed after process termination."
(len (length (ebnf-node-name node))))
(ebnf-node-entry node (* height 0.5))
(ebnf-node-height node height)
- (ebnf-node-width node (+ ebnf-basic-width ebnf-arrow-extra-width space
+ (ebnf-node-width node (+ ebnf-basic-width
+ ebnf-arrow-extra-width
+ space
(* len font-width)
- space ebnf-basic-width))))
+ space
+ ebnf-basic-width)))
+ (ebnf-log " name : %S" (ebnf-node-name node))
+ (ebnf-log " entry : %7.3f" (ebnf-node-entry node))
+ (ebnf-log " height : %7.3f" (ebnf-node-height node))
+ (ebnf-log " width : %7.3f" (ebnf-node-width node)))
(defconst ebnf-null-vector (vector t t t 0.0 0.0 0.0))
@@ -5204,6 +5635,7 @@ killed after process termination."
;; [repeat width-fun dim-fun entry height width times element]
(defun ebnf-repeat-dimension (repeat)
+ (ebnf-log "(ebnf-repeat-dimension repeat)")
(let ((times (ebnf-node-name repeat))
(element (ebnf-node-separator repeat)))
(if element
@@ -5218,11 +5650,15 @@ killed after process termination."
ebnf-arrow-extra-width
ebnf-space-R ebnf-space-R ebnf-space-R
ebnf-horizontal-space
- (* (length times) ebnf-font-width-R)))))
+ (* (length times) ebnf-font-width-R))))
+ (ebnf-log " repeat entry : %7.3f" (ebnf-node-entry repeat))
+ (ebnf-log " repeat height : %7.3f" (ebnf-node-height repeat))
+ (ebnf-log " repeat width : %7.3f" (ebnf-node-width repeat)))
;; [except width-fun dim-fun entry height width element element]
(defun ebnf-except-dimension (except)
+ (ebnf-log "(ebnf-except-dimension except)")
(let ((factor (ebnf-node-list except))
(element (ebnf-node-separator except)))
(ebnf-node-dimension-func factor)
@@ -5241,11 +5677,15 @@ killed after process termination."
ebnf-space-E ebnf-space-E
ebnf-space-E ebnf-space-E
ebnf-font-width-E
- ebnf-horizontal-space))))
+ ebnf-horizontal-space)))
+ (ebnf-log " except entry : %7.3f" (ebnf-node-entry except))
+ (ebnf-log " except height : %7.3f" (ebnf-node-height except))
+ (ebnf-log " except width : %7.3f" (ebnf-node-width except)))
;; [alternative width-fun dim-fun entry height width list]
(defun ebnf-alternative-dimension (alternative)
+ (ebnf-log "(ebnf-alternative-dimension alternative)")
(let ((body (ebnf-node-list alternative))
(lis (ebnf-node-list alternative)))
(while lis
@@ -5270,23 +5710,33 @@ killed after process termination."
(- (ebnf-node-height tail)
(ebnf-node-entry tail))))))
(ebnf-node-height alternative height)
- (ebnf-node-width alternative (+ width ebnf-horizontal-space))
- (ebnf-node-list alternative body))))
+ (ebnf-node-width alternative (+ width
+ ebnf-horizontal-space
+ ebnf-basic-width-extra))
+ (ebnf-node-list alternative body)))
+ (ebnf-log " alternative entry : %7.3f" (ebnf-node-entry alternative))
+ (ebnf-log " alternative height : %7.3f" (ebnf-node-height alternative))
+ (ebnf-log " alternative width : %7.3f" (ebnf-node-width alternative)))
;; [optional width-fun dim-fun entry height width element]
(defun ebnf-optional-dimension (optional)
+ (ebnf-log "(ebnf-optional-dimension optional)")
(let ((body (ebnf-node-list optional)))
(ebnf-node-dimension-func body)
(ebnf-node-entry optional (ebnf-node-entry body))
(ebnf-node-height optional (+ (ebnf-node-height body)
ebnf-vertical-space))
(ebnf-node-width optional (+ (ebnf-node-width body)
- ebnf-horizontal-space))))
+ ebnf-horizontal-space)))
+ (ebnf-log " optional entry : %7.3f" (ebnf-node-entry optional))
+ (ebnf-log " optional height : %7.3f" (ebnf-node-height optional))
+ (ebnf-log " optional width : %7.3f" (ebnf-node-width optional)))
;; [one-or-more width-fun dim-fun entry height width element separator]
(defun ebnf-one-or-more-dimension (or-more)
+ (ebnf-log "(ebnf-one-or-more-dimension or-more)")
(let ((list-part (ebnf-node-list or-more))
(sep-part (ebnf-node-separator or-more)))
(ebnf-node-dimension-func list-part)
@@ -5294,7 +5744,7 @@ killed after process termination."
(ebnf-node-dimension-func sep-part))
(let ((height (+ (if sep-part
(ebnf-node-height sep-part)
- 0.0)
+ ebnf-basic-empty-height)
ebnf-vertical-space
(ebnf-node-height list-part)))
(width (max (if sep-part
@@ -5304,14 +5754,21 @@ killed after process termination."
(when sep-part
(ebnf-adjust-width list-part width)
(ebnf-adjust-width sep-part width))
- (ebnf-node-entry or-more (+ (- height (ebnf-node-height list-part))
+ (ebnf-node-entry or-more (+ (- height
+ (ebnf-node-height list-part))
(ebnf-node-entry list-part)))
(ebnf-node-height or-more height)
- (ebnf-node-width or-more (+ width ebnf-horizontal-space)))))
+ (ebnf-node-width or-more (+ width
+ ebnf-horizontal-space
+ ebnf-basic-width-extra))))
+ (ebnf-log " one-or-more entry : %7.3f" (ebnf-node-entry or-more))
+ (ebnf-log " one-or-more height : %7.3f" (ebnf-node-height or-more))
+ (ebnf-log " one-or-more width : %7.3f" (ebnf-node-width or-more)))
;; [zero-or-more width-fun dim-fun entry height width element separator]
(defun ebnf-zero-or-more-dimension (or-more)
+ (ebnf-log "(ebnf-zero-or-more-dimension or-more)")
(let ((list-part (ebnf-node-list or-more))
(sep-part (ebnf-node-separator or-more)))
(ebnf-node-dimension-func list-part)
@@ -5319,7 +5776,7 @@ killed after process termination."
(ebnf-node-dimension-func sep-part))
(let ((height (+ (if sep-part
(ebnf-node-height sep-part)
- 0.0)
+ ebnf-basic-empty-height)
ebnf-vertical-space
(ebnf-node-height list-part)
ebnf-vertical-space))
@@ -5332,11 +5789,17 @@ killed after process termination."
(ebnf-adjust-width sep-part width))
(ebnf-node-entry or-more height)
(ebnf-node-height or-more height)
- (ebnf-node-width or-more (+ width ebnf-horizontal-space)))))
+ (ebnf-node-width or-more (+ width
+ ebnf-horizontal-space
+ ebnf-basic-width-extra))))
+ (ebnf-log " zero-or-more entry : %7.3f" (ebnf-node-entry or-more))
+ (ebnf-log " zero-or-more height : %7.3f" (ebnf-node-height or-more))
+ (ebnf-log " zero-or-more width : %7.3f" (ebnf-node-width or-more)))
;; [sequence width-fun dim-fun entry height width list]
(defun ebnf-sequence-dimension (sequence)
+ (ebnf-log "(ebnf-sequence-dimension sequence)")
(let ((above 0.0)
(below 0.0)
(width 0.0)
@@ -5352,7 +5815,10 @@ killed after process termination."
width (+ width (ebnf-node-width node))))
(ebnf-node-entry sequence above)
(ebnf-node-height sequence (+ above below))
- (ebnf-node-width sequence width)))
+ (ebnf-node-width sequence width))
+ (ebnf-log " sequence entry : %7.3f" (ebnf-node-entry sequence))
+ (ebnf-log " sequence height : %7.3f" (ebnf-node-height sequence))
+ (ebnf-log " sequence width : %7.3f" (ebnf-node-width sequence)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -5494,7 +5960,8 @@ killed after process termination."
(let ((filename (ebnf-eps-filename name)))
(if (member filename ebnf-eps-context)
(error "Try to open an already opened EPS file: %s" filename)
- (setq ebnf-eps-context (cons filename ebnf-eps-context)))))
+ (setq ebnf-eps-context (cons filename ebnf-eps-context)))
+ (ebnf-eps-header-footer-file filename)))
(defun ebnf-eps-remove-context (name)
@@ -5505,14 +5972,16 @@ killed after process termination."
(defun ebnf-eps-add-production (header)
- (and ebnf-eps-executing
- ebnf-eps-context
- (let ((prod (assoc header ebnf-eps-production-list)))
- (if prod
- (setcdr prod (append ebnf-eps-context (cdr prod)))
- (setq ebnf-eps-production-list
- (cons (cons header (ebnf-dup-list ebnf-eps-context))
- ebnf-eps-production-list))))))
+ (when ebnf-eps-executing
+ (if ebnf-eps-context
+ (let ((prod (assoc header ebnf-eps-production-list)))
+ (if prod
+ (setcdr prod (ebnf-dup-list
+ (append ebnf-eps-context (cdr prod))))
+ (setq ebnf-eps-production-list
+ (cons (cons header (ebnf-dup-list ebnf-eps-context))
+ ebnf-eps-production-list))))
+ (ebnf-eps-header-footer-file (ebnf-eps-filename header)))))
(defun ebnf-dup-list (old)
@@ -5567,7 +6036,9 @@ killed after process termination."
(defun ebnf-trim-right (str)
(let* ((len (1- (length str)))
(index len))
- (while (and (> index 0) (= (aref str index) ?\s))
+ ;; to keep compatibility with Emacs 20 & 21:
+ ;; DO NOT REPLACE `?\ ' BY `?\s'
+ (while (and (> index 0) (= (aref str index) ?\ ))
(setq index (1- index)))
(if (= index len)
str
@@ -5579,12 +6050,12 @@ killed after process termination."
(defun ebnf-make-empty (&optional width)
- (vector 'ebnf-generate-empty
- 'ignore
- 'ignore
- 0.0
- 0.0
- (or width ebnf-horizontal-space)))
+ (vector 'ebnf-generate-empty ; 0 generator
+ 'ignore ; 1 width fun
+ 'ignore ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ (or width ebnf-horizontal-space))) ; 5 width
(defun ebnf-make-terminal (name)
@@ -5606,19 +6077,19 @@ killed after process termination."
(defun ebnf-make-terminal1 (name gen-func dim-func)
- (vector gen-func
- 'ignore
- dim-func
- 0.0
- 0.0
- 0.0
- (let ((len (length name)))
+ (vector gen-func ; 0 generatore
+ 'ignore ; 1 width fun
+ dim-func ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ (let ((len (length name))) ; 6 name
(cond ((> len 3) name)
((= len 3) (concat name " "))
((= len 2) (concat " " name " "))
((= len 1) (concat " " name " "))
(t " ")))
- ebnf-default-p))
+ ebnf-default-p)) ; 7 is default?
(defun ebnf-make-one-or-more (list-part &optional sep-part)
@@ -5636,70 +6107,71 @@ killed after process termination."
(defun ebnf-make-or-more1 (gen-func dim-func list-part sep-part)
- (vector gen-func
- 'ebnf-element-width
- dim-func
- 0.0
- 0.0
- 0.0
- (if (listp list-part)
+ (vector gen-func ; 0 generator
+ 'ebnf-element-width ; 1 width fun
+ dim-func ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ (if (listp list-part) ; 6 element
(ebnf-make-sequence list-part)
list-part)
- (if (and sep-part (listp sep-part))
+ (if (and sep-part (listp sep-part)) ; 7 separator
(ebnf-make-sequence sep-part)
sep-part)))
(defun ebnf-make-production (name prod action)
- (vector 'ebnf-generate-production
- 'ignore
- 'ebnf-production-dimension
- 0.0
- 0.0
- 0.0
- name
- prod
- action))
+ (vector 'ebnf-generate-production ; 0 generator
+ 'ignore ; 1 width fun
+ 'ebnf-production-dimension ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ name ; 6 production name
+ prod ; 7 production body
+ action)) ; 8 production action
(defun ebnf-make-alternative (body)
- (vector 'ebnf-generate-alternative
- 'ebnf-alternative-width
- 'ebnf-alternative-dimension
- 0.0
- 0.0
- 0.0
- body))
+ (vector 'ebnf-generate-alternative ; 0 generator
+ 'ebnf-alternative-width ; 1 width fun
+ 'ebnf-alternative-dimension ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ body)) ; 6 alternative list
(defun ebnf-make-optional (body)
- (vector 'ebnf-generate-optional
- 'ebnf-alternative-width
- 'ebnf-optional-dimension
- 0.0
- 0.0
- 0.0
- body))
+ (vector 'ebnf-generate-optional ; 0 generator
+ 'ebnf-alternative-width ; 1 width fun
+ 'ebnf-optional-dimension ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ body)) ; 6 optional element
(defun ebnf-make-except (factor exception)
- (vector 'ebnf-generate-except
- 'ignore
- 'ebnf-except-dimension
- 0.0
- 0.0
- 0.0
- factor
- exception))
+ (vector 'ebnf-generate-except ; 0 generator
+ 'ignore ; 1 width fun
+ 'ebnf-except-dimension ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ factor ; 6 base element
+ exception)) ; 7 exception element
(defun ebnf-make-repeat (times primary &optional upper)
- (vector 'ebnf-generate-repeat
- 'ignore
- 'ebnf-repeat-dimension
- 0.0
- 0.0
- 0.0
+ (vector 'ebnf-generate-repeat ; 0 generator
+ 'ignore ; 1 width fun
+ 'ebnf-repeat-dimension ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ ; 6 times
(cond ((and times upper) ; L * U, L * L
(if (string= times upper)
(if (string= times "")
@@ -5712,27 +6184,27 @@ killed after process termination."
(concat "* " upper))
(t ; *
" * "))
- primary))
+ primary)) ; 7 element
(defun ebnf-make-sequence (seq)
- (vector 'ebnf-generate-sequence
- 'ebnf-sequence-width
- 'ebnf-sequence-dimension
- 0.0
- 0.0
- 0.0
- seq))
+ (vector 'ebnf-generate-sequence ; 0 generator
+ 'ebnf-sequence-width ; 1 width fun
+ 'ebnf-sequence-dimension ; 2 dimension fun
+ 0.0 ; 3 entry
+ 0.0 ; 4 height
+ 0.0 ; 5 width
+ seq)) ; 6 sequence
(defun ebnf-make-dup-sequence (node seq)
- (vector 'ebnf-generate-sequence
- 'ebnf-sequence-width
- 'ebnf-sequence-dimension
- (ebnf-node-entry node)
- (ebnf-node-height node)
- (ebnf-node-width node)
- seq))
+ (vector 'ebnf-generate-sequence ; 0 generator
+ 'ebnf-sequence-width ; 1 width fun
+ 'ebnf-sequence-dimension ; 2 dimension fun
+ (ebnf-node-entry node) ; 3 entry
+ (ebnf-node-height node) ; 4 height
+ (ebnf-node-width node) ; 5 width
+ seq)) ; 6 sequence
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -5819,13 +6291,17 @@ killed after process termination."
(defun ebnf-token-alternative (body sequence)
(if (null body)
(if (cdr sequence)
+ ;; no alternative
sequence
- (cons (car sequence)
+ ;; empty element
+ (cons (car sequence) ; token
(ebnf-make-empty)))
- (cons (car sequence)
+ (cons (car sequence) ; token
(let ((seq (cdr sequence)))
(if (and (= (length body) 1) (null seq))
+ ;; alternative with one element
(car body)
+ ;; a real alternative
(ebnf-make-alternative (nreverse (if seq
(cons seq body)
body))))))))
@@ -5860,6 +6336,28 @@ killed after process termination."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Log message
+
+
+(defun ebnf-log-header (format-str &rest args)
+ (when ebnf-log
+ (apply
+ 'ebnf-log
+ (concat
+ "\n\n===============================================================\n\n"
+ format-str)
+ args)))
+
+
+(defun ebnf-log (format-str &rest args)
+ (when ebnf-log
+ (save-excursion
+ (set-buffer (get-buffer-create "*Ebnf2ps Log*"))
+ (goto-char (point-max))
+ (insert (apply 'format format-str args) "\n"))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; To make this file smaller, some commands go in a separate file.
;; But autoload them here to make the separation invisible.
diff --git a/lisp/progmodes/ebrowse.el b/lisp/progmodes/ebrowse.el
index 58a25ab5b88..5acbe70a074 100644
--- a/lisp/progmodes/ebrowse.el
+++ b/lisp/progmodes/ebrowse.el
@@ -1139,6 +1139,7 @@ Tree mode key bindings:
(kill-all-local-variables)
(use-local-map ebrowse-tree-mode-map)
+ (buffer-disable-undo)
(unless (zerop (buffer-size))
(goto-char (point-min))
@@ -1148,15 +1149,15 @@ Tree mode key bindings:
(erase-buffer)
(message nil))
- (mapcar 'make-local-variable
- '(ebrowse--tags-file-name
- ebrowse--indentation
- ebrowse--tree
- ebrowse--header
- ebrowse--show-file-names-flag
- ebrowse--frozen-flag
- ebrowse--tree-obarray
- revert-buffer-function))
+ (mapc 'make-local-variable
+ '(ebrowse--tags-file-name
+ ebrowse--indentation
+ ebrowse--tree
+ ebrowse--header
+ ebrowse--show-file-names-flag
+ ebrowse--frozen-flag
+ ebrowse--tree-obarray
+ revert-buffer-function))
(setf ebrowse--show-file-names-flag nil
ebrowse--tree-obarray (make-vector 127 0)
@@ -1638,10 +1639,10 @@ and possibly kill the viewed buffer."
(setq original-frame-configuration ebrowse--frame-configuration
exit-action ebrowse--view-exit-action))
;; Delete the frame in which we viewed.
- (mapcar 'delete-frame
- (loop for frame in (frame-list)
- when (not (assq frame original-frame-configuration))
- collect frame))
+ (mapc 'delete-frame
+ (loop for frame in (frame-list)
+ when (not (assq frame original-frame-configuration))
+ collect frame))
(when exit-action
(funcall exit-action buffer))))
@@ -2004,7 +2005,7 @@ COLLAPSE non-nil means collapse the branch."
(fillarray (car (cdr map)) 'ebrowse-electric-list-undefined)
(fillarray (car (cdr submap)) 'ebrowse-electric-list-undefined)
(define-key map "\e" submap)
- (define-key map "\C-z" 'suspend-emacs)
+ (define-key map "\C-z" 'suspend-frame)
(define-key map "\C-h" 'Helper-help)
(define-key map "?" 'Helper-describe-bindings)
(define-key map "\C-c" nil)
@@ -2256,28 +2257,28 @@ See 'Electric-command-loop' for a description of STATE and CONDITION."
(kill-all-local-variables)
(use-local-map ebrowse-member-mode-map)
(setq major-mode 'ebrowse-member-mode)
- (mapcar 'make-local-variable
- '(ebrowse--decl-column ;display column
- ebrowse--n-columns ;number of short columns
- ebrowse--column-width ;width of columns above
- ebrowse--show-inherited-flag ;include inherited members?
- ebrowse--filters ;public, protected, private
- ebrowse--accessor ;vars, functions, friends
- ebrowse--displayed-class ;class displayed
- ebrowse--long-display-flag ;display with regexps?
- ebrowse--source-regexp-flag ;show source regexp?
- ebrowse--attributes-flag ;show `virtual' and `inline'
- ebrowse--member-list ;list of members displayed
- ebrowse--tree ;the class tree
- ebrowse--member-mode-strings ;part of mode line
- ebrowse--tags-file-name ;
- ebrowse--header
- ebrowse--tree-obarray
- ebrowse--virtual-display-flag
- ebrowse--inline-display-flag
- ebrowse--const-display-flag
- ebrowse--pure-display-flag
- ebrowse--frozen-flag)) ;buffer not automagically reused
+ (mapc 'make-local-variable
+ '(ebrowse--decl-column ;display column
+ ebrowse--n-columns ;number of short columns
+ ebrowse--column-width ;width of columns above
+ ebrowse--show-inherited-flag ;include inherited members?
+ ebrowse--filters ;public, protected, private
+ ebrowse--accessor ;vars, functions, friends
+ ebrowse--displayed-class ;class displayed
+ ebrowse--long-display-flag ;display with regexps?
+ ebrowse--source-regexp-flag ;show source regexp?
+ ebrowse--attributes-flag ;show `virtual' and `inline'
+ ebrowse--member-list ;list of members displayed
+ ebrowse--tree ;the class tree
+ ebrowse--member-mode-strings ;part of mode line
+ ebrowse--tags-file-name ;
+ ebrowse--header
+ ebrowse--tree-obarray
+ ebrowse--virtual-display-flag
+ ebrowse--inline-display-flag
+ ebrowse--const-display-flag
+ ebrowse--pure-display-flag
+ ebrowse--frozen-flag)) ;buffer not automagically reused
(setq mode-name "Ebrowse-Members"
mode-line-buffer-identification
(propertized-buffer-identification "C++ Members")
@@ -3964,7 +3965,7 @@ Prefix arg ARG says how much."
(fillarray (car (cdr map)) 'ebrowse-electric-position-undefined)
(fillarray (car (cdr submap)) 'ebrowse-electric-position-undefined)
(define-key map "\e" submap)
- (define-key map "\C-z" 'suspend-emacs)
+ (define-key map "\C-z" 'suspend-frame)
(define-key map "\C-h" 'Helper-help)
(define-key map "?" 'Helper-describe-bindings)
(define-key map "\C-c" nil)
@@ -4148,7 +4149,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in."
(erase-buffer)
(setf (ebrowse-hs-member-table header) nil)
(insert (prin1-to-string header) " ")
- (mapcar 'ebrowse-save-class tree)
+ (mapc 'ebrowse-save-class tree)
(write-file file-name)
(message "Tree written to file `%s'" file-name))
(kill-buffer temp-buffer)
@@ -4163,7 +4164,7 @@ Otherwise, FILE-NAME specifies the file to save the tree in."
(insert "[ebrowse-ts ")
(prin1 (ebrowse-ts-class class)) ;class name
(insert "(") ;list of subclasses
- (mapcar 'ebrowse-save-class (ebrowse-ts-subclasses class))
+ (mapc 'ebrowse-save-class (ebrowse-ts-subclasses class))
(insert ")")
(dolist (func ebrowse-member-list-accessors)
(prin1 (funcall func class))
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index 823b4e7a058..302fa6567bc 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -1131,7 +1131,7 @@ where they were found."
(if (memq (car order) '(tag-exact-file-name-match-p
tag-file-name-match-p
tag-partial-file-name-match-p))
- (save-excursion (next-line 1)
+ (save-excursion (forward-line 1)
(file-of-tag))
(file-of-tag)))
tag-info (funcall snarf-tag-function))
@@ -1455,10 +1455,10 @@ where they were found."
(tag-info (save-excursion (funcall snarf-tag-function)))
(tag (if (eq t (car tag-info)) nil (car tag-info)))
(file-path (save-excursion (if tag (file-of-tag)
- (save-excursion (next-line 1)
+ (save-excursion (forward-line 1)
(file-of-tag)))))
(file-label (if tag (file-of-tag t)
- (save-excursion (next-line 1)
+ (save-excursion (forward-line 1)
(file-of-tag t))))
(pt (with-current-buffer standard-output (point))))
(if tag
@@ -1885,7 +1885,7 @@ directory specification."
(funcall tags-apropos-function regexp))))
(etags-tags-apropos-additional regexp))
(with-current-buffer "*Tags List*"
- (require 'apropos)
+ (eval-and-compile (require 'apropos))
(apropos-mode)
;; apropos-mode is derived from fundamental-mode and it kills
;; all local variables.
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index 65d7da3c33a..29ffbcfe6b1 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -28,6 +28,7 @@
;; Major mode for editing F90 programs in FREE FORMAT.
;; The minor language revision F95 is also supported (with font-locking).
+;; Some/many (?) aspects of F2003 are supported.
;; Knows about continuation lines, named structured statements, and other
;; features in F90 including HPF (High Performance Fortran) structures.
@@ -105,7 +106,7 @@
;; (f90-add-imenu-menu) ; extra menu with functions etc.
;; (if f90-auto-keyword-case ; change case of all keywords on startup
;; (f90-change-keywords f90-auto-keyword-case))
-;; ))
+;; ))
;;
;; in your .emacs file. You can also customize the lists
;; f90-font-lock-keywords, etc.
@@ -154,8 +155,16 @@
;;; Code:
;; TODO
-;; Support for align.
-;; OpenMP, preprocessor highlighting.
+;; 1. Any missing F2003 syntax?
+;; 2. Have "f90-mode" just recognize F90 syntax, then derived modes
+;; "f95-mode", "f2003-mode" for the language revisions.
+;; 3. Support for align.
+;; Font-locking:
+;; 1. OpenMP, OpenMPI?, preprocessor highlighting.
+;; 2. interface blah - Highlight "blah" in function-name face?
+;; Need to avoid "interface operator (+)" etc.
+;; 3. integer_name = 1
+;; 4. Labels for "else" statements (F2003)?
(defvar comment-auto-fill-only-comments)
(defvar font-lock-keywords)
@@ -174,61 +183,68 @@
(defcustom f90-do-indent 3
- "*Extra indentation applied to DO blocks."
+ "Extra indentation applied to DO blocks."
:type 'integer
:group 'f90-indent)
(put 'f90-do-indent 'safe-local-variable 'integerp)
(defcustom f90-if-indent 3
- "*Extra indentation applied to IF, SELECT CASE, WHERE and FORALL blocks."
+ "Extra indentation applied to IF, SELECT CASE, WHERE and FORALL blocks."
:type 'integer
:group 'f90-indent)
(put 'f90-if-indent 'safe-local-variable 'integerp)
(defcustom f90-type-indent 3
- "*Extra indentation applied to TYPE, INTERFACE and BLOCK DATA blocks."
+ "Extra indentation applied to TYPE, ENUM, INTERFACE and BLOCK DATA blocks."
:type 'integer
:group 'f90-indent)
(put 'f90-type-indent 'safe-local-variable 'integerp)
(defcustom f90-program-indent 2
- "*Extra indentation applied to PROGRAM, MODULE, SUBROUTINE, FUNCTION blocks."
+ "Extra indentation applied to PROGRAM, MODULE, SUBROUTINE, FUNCTION blocks."
:type 'integer
:group 'f90-indent)
(put 'f90-program-indent 'safe-local-variable 'integerp)
+(defcustom f90-associate-indent 2
+ "Extra indentation applied to ASSOCIATE blocks."
+ :type 'integer
+ :group 'f90-indent
+ :version "23.1")
+(put 'f90-associate-indent 'safe-local-variable 'integerp)
+
(defcustom f90-continuation-indent 5
- "*Extra indentation applied to continuation lines."
+ "Extra indentation applied to continuation lines."
:type 'integer
:group 'f90-indent)
(put 'f90-continuation-indent 'safe-local-variable 'integerp)
(defcustom f90-comment-region "!!$"
- "*String inserted by \\[f90-comment-region] at start of each line in region."
+ "String inserted by \\[f90-comment-region] at start of each line in region."
:type 'string
:group 'f90-indent)
(put 'f90-comment-region 'safe-local-variable 'stringp)
(defcustom f90-indented-comment-re "!"
- "*Regexp matching comments to indent as code."
+ "Regexp matching comments to indent as code."
:type 'regexp
:group 'f90-indent)
(put 'f90-indented-comment-re 'safe-local-variable 'stringp)
(defcustom f90-directive-comment-re "!hpf\\$"
- "*Regexp of comment-like directive like \"!HPF\\\\$\", not to be indented."
+ "Regexp of comment-like directive like \"!HPF\\\\$\", not to be indented."
:type 'regexp
:group 'f90-indent)
(put 'f90-directive-comment-re 'safe-local-variable 'stringp)
(defcustom f90-beginning-ampersand t
- "*Non-nil gives automatic insertion of \& at start of continuation line."
+ "Non-nil gives automatic insertion of \& at start of continuation line."
:type 'boolean
:group 'f90)
(put 'f90-beginning-ampersand 'safe-local-variable 'booleanp)
(defcustom f90-smart-end 'blink
- "*Qualification of END statements according to the matching block start.
+ "Qualification of END statements according to the matching block start.
For example, the END that closes an IF block is changed to END
IF. If the block has a label, this is added as well. Allowed
values are 'blink, 'no-blink, and nil. If nil, nothing is done.
@@ -240,7 +256,7 @@ additionally blinks the cursor to the start of the block."
(lambda (value) (memq value '(blink no-blink nil))))
(defcustom f90-break-delimiters "[-+\\*/><=,% \t]"
- "*Regexp matching delimiter characters at which lines may be broken.
+ "Regexp matching delimiter characters at which lines may be broken.
There are certain tokens comprised entirely of characters
matching this regexp that should not be split, and these are
specified by the constant `f90-no-break-re'."
@@ -249,13 +265,13 @@ specified by the constant `f90-no-break-re'."
(put 'f90-break-delimiters 'safe-local-variable 'stringp)
(defcustom f90-break-before-delimiters t
- "*Non-nil causes `f90-do-auto-fill' to break lines before delimiters."
+ "Non-nil causes `f90-do-auto-fill' to break lines before delimiters."
:type 'boolean
:group 'f90)
(put 'f90-break-before-delimiters 'safe-local-variable 'booleanp)
(defcustom f90-auto-keyword-case nil
- "*Automatic case conversion of keywords.
+ "Automatic case conversion of keywords.
The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil."
:type '(choice (const downcase-word) (const upcase-word)
(const capitalize-word) (const nil))
@@ -265,7 +281,7 @@ The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil."
capitalize-word upcase-word nil))))
(defcustom f90-leave-line-no nil
- "*If non-nil, line numbers are not left justified."
+ "If non-nil, line numbers are not left justified."
:type 'boolean
:group 'f90)
(put 'f90-leave-line-no 'safe-local-variable 'booleanp)
@@ -282,20 +298,26 @@ The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil."
(defconst f90-keywords-re
(regexp-opt '("allocatable" "allocate" "assign" "assignment" "backspace"
- "block" "call" "case" "character" "close" "common" "complex"
- "contains" "continue" "cycle" "data" "deallocate"
- "dimension" "do" "double" "else" "elseif" "elsewhere" "end"
- "enddo" "endfile" "endif" "entry" "equivalence" "exit"
- "external" "forall" "format" "function" "goto" "if"
- "implicit" "include" "inquire" "integer" "intent"
- "interface" "intrinsic" "logical" "module" "namelist" "none"
- "nullify" "only" "open" "operator" "optional" "parameter"
- "pause" "pointer" "precision" "print" "private" "procedure"
- "program" "public" "read" "real" "recursive" "result" "return"
- "rewind" "save" "select" "sequence" "stop" "subroutine"
- "target" "then" "type" "use" "where" "while" "write"
- ;; F95 keywords.
- "elemental" "pure") 'words)
+ "block" "call" "case" "character" "close" "common" "complex"
+ "contains" "continue" "cycle" "data" "deallocate"
+ "dimension" "do" "double" "else" "elseif" "elsewhere" "end"
+ "enddo" "endfile" "endif" "entry" "equivalence" "exit"
+ "external" "forall" "format" "function" "goto" "if"
+ "implicit" "include" "inquire" "integer" "intent"
+ "interface" "intrinsic" "logical" "module" "namelist" "none"
+ "nullify" "only" "open" "operator" "optional" "parameter"
+ "pause" "pointer" "precision" "print" "private" "procedure"
+ "program" "public" "read" "real" "recursive" "result" "return"
+ "rewind" "save" "select" "sequence" "stop" "subroutine"
+ "target" "then" "type" "use" "where" "while" "write"
+ ;; F95 keywords.
+ "elemental" "pure"
+ ;; F2003
+ "abstract" "associate" "asynchronous" "bind" "class"
+ "deferred" "enum" "enumerator" "extends" "extends_type_of"
+ "final" "generic" "import" "non_intrinsic" "non_overridable"
+ "nopass" "pass" "protected" "same_type_as" "value" "volatile"
+ ) 'words)
"Regexp used by the function `f90-change-keywords'.")
(defconst f90-keywords-level-3-re
@@ -303,11 +325,16 @@ The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil."
'("allocatable" "allocate" "assign" "assignment" "backspace"
"close" "deallocate" "dimension" "endfile" "entry" "equivalence"
"external" "inquire" "intent" "intrinsic" "nullify" "only" "open"
+ ;; FIXME operator and assignment should be F2003 procedures?
"operator" "optional" "parameter" "pause" "pointer" "print" "private"
"public" "read" "recursive" "result" "rewind" "save" "select"
"sequence" "target" "write"
;; F95 keywords.
- "elemental" "pure") 'words)
+ "elemental" "pure"
+ ;; F2003. asynchronous separate.
+ "abstract" "deferred" "import" "final" "non_intrinsic" "non_overridable"
+ "nopass" "pass" "protected" "value" "volatile"
+ ) 'words)
"Keyword-regexp for font-lock level >= 3.")
(defconst f90-procedures-re
@@ -333,7 +360,19 @@ The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil."
"sum" "system_clock" "tan" "tanh" "tiny" "transfer"
"transpose" "trim" "ubound" "unpack" "verify"
;; F95 intrinsic functions.
- "null" "cpu_time") t)
+ "null" "cpu_time"
+ ;; F2003.
+ "move_alloc" "command_argument_count" "get_command"
+ "get_command_argument" "get_environment_variable"
+ "selected_char_kind" "wait" "flush" "new_line"
+ "extends" "extends_type_of" "same_type_as" "bind"
+ ;; F2003 ieee_arithmetic intrinsic module.
+ "ieee_support_underflow_control" "ieee_get_underflow_mode"
+ "ieee_set_underflow_mode"
+ ;; F2003 iso_c_binding intrinsic module.
+ "c_loc" "c_funloc" "c_associated" "c_f_pointer"
+ "c_f_procpointer"
+ ) t)
;; A left parenthesis to avoid highlighting non-procedures.
"[ \t]*(")
"Regexp whose first part matches F90 intrinsic procedures.")
@@ -368,41 +407,176 @@ The options are 'downcase-word, 'upcase-word, 'capitalize-word and nil."
"block" "cyclic" "extrinsic" "new" "onto" "pure" "with") 'words)
"Regexp for all HPF keywords, procedures and directives.")
-;; Highlighting patterns.
+(defconst f90-constants-re
+ (regexp-opt '( ;; F2003 iso_fortran_env constants.
+ "iso_fortran_env"
+ "input_unit" "output_unit" "error_unit"
+ "iostat_end" "iostat_eor"
+ "numeric_storage_size" "character_storage_size"
+ "file_storage_size"
+ ;; F2003 iso_c_binding constants.
+ "iso_c_binding"
+ "c_int" "c_short" "c_long" "c_long_long" "c_signed_char"
+ "c_size_t"
+ "c_int8_t" "c_int16_t" "c_int32_t" "c_int64_t"
+ "c_int_least8_t" "c_int_least16_t" "c_int_least32_t"
+ "c_int_least64_t"
+ "c_int_fast8_t" "c_int_fast16_t" "c_int_fast32_t"
+ "c_int_fast64_t"
+ "c_intmax_t" "c_intptr_t"
+ "c_float" "c_double" "c_long_double"
+ "c_float_complex" "c_double_complex" "c_long_double_complex"
+ "c_bool" "c_char"
+ "c_null_char" "c_alert" "c_backspace" "c_form_feed"
+ "c_new_line" "c_carriage_return" "c_horizontal_tab"
+ "c_vertical_tab"
+ "c_ptr" "c_funptr" "c_null_ptr" "c_null_funptr"
+ "ieee_exceptions"
+ "ieee_arithmetic"
+ "ieee_features"
+ ) 'words)
+ "Regexp for Fortran intrinsic constants.")
+
+;; cf f90-looking-at-type-like.
+(defun f90-typedef-matcher (limit)
+ "Search for the start/end of the definition of a derived type, up to LIMIT.
+Set the match data so that subexpression 1,2 are the TYPE, and
+type-name parts, respectively."
+ (let (found l)
+ (while (and (re-search-forward "\\<\\(\\(?:end[ \t]*\\)?type\\)[ \t]*"
+ limit t)
+ (not (setq found
+ (progn
+ (setq l (match-data))
+ (unless (looking-at "\\(is\\>\\|(\\)")
+ (when (if (looking-at "\\(\\sw+\\)")
+ (goto-char (match-end 0))
+ (re-search-forward
+ "[ \t]*::[ \t]*\\(\\sw+\\)"
+ (line-end-position) t))
+ ;; 0 is wrong, but we don't use it.
+ (set-match-data
+ (append l (list (match-beginning 1)
+ (match-end 1))))
+ t)))))))
+ found))
(defvar f90-font-lock-keywords-1
(list
;; Special highlighting of "module procedure".
- '("\\<\\(module[ \t]*procedure\\)\\>" (1 font-lock-keyword-face))
+ '("\\<\\(module[ \t]*procedure\\)\\>\\([^()\n]*::\\)?[ \t]*\\([^&!\n]*\\)"
+ (1 font-lock-keyword-face) (3 font-lock-function-name-face nil t))
;; Highlight definition of derived type.
- '("\\<\\(\\(?:end[ \t]*\\)?type\\)\\>\\([^()\n]*::\\)?[ \t]*\\(\\sw+\\)"
- (1 font-lock-keyword-face) (3 font-lock-function-name-face))
+;;; '("\\<\\(\\(?:end[ \t]*\\)?type\\)\\>\\([^()\n]*::\\)?[ \t]*\\(\\sw+\\)"
+;;; (1 font-lock-keyword-face) (3 font-lock-function-name-face))
+ '(f90-typedef-matcher
+ (1 font-lock-keyword-face) (2 font-lock-function-name-face))
;; Other functions and declarations.
- '("\\<\\(\\(?:end[ \t]*\\)?\\(program\\|module\\|function\\|\
+ '("\\<\\(\\(?:end[ \t]*\\)?\\(program\\|module\\|function\\|associate\\|\
subroutine\\)\\|use\\|call\\)\\>[ \t]*\\(\\sw+\\)?"
(1 font-lock-keyword-face) (3 font-lock-function-name-face nil t))
- "\\<\\(\\(end[ \t]*\\)?\\(interface\\|block[ \t]*data\\)\\|contains\\)\\>")
+ ;; F2003.
+ '("\\<\\(use\\)[ \t]*,[ \t]*\\(\\(?:non_\\)?intrinsic\\)[ \t]*::[ \t]*\
+\\(\\sw+\\)"
+ (1 font-lock-keyword-face) (2 font-lock-keyword-face)
+ (3 font-lock-function-name-face))
+ "\\<\\(\\(end[ \t]*\\)?block[ \t]*data\\|contains\\|\
+end[ \t]*interface\\)\\>"
+ ;; "abstract interface" is F2003. Must come after previous entry.
+ '("\\<\\(\\(?:abstract[ \t]*\\)?interface\\)\\>"
+ ;; [ \t]*\\(\\(\\sw+\\)[ \t]*[^(]\\)?"
+ ;; (2) messes up "interface operator ()", etc.
+ (1 font-lock-keyword-face))) ;(2 font-lock-function-name-face nil t)))
"This does fairly subdued highlighting of comments and function calls.")
+;; NB not explicitly handling this, yet it seems to work.
+;; type(...) function foo()
+(defun f90-typedec-matcher (limit)
+ "Search for the declaration of variables of derived type, up to LIMIT.
+Set the match data so that subexpression 1,2 are the TYPE(...),
+and variable-name parts, respectively."
+ ;; Matcher functions must return nil only when there are no more
+ ;; matches within the search range.
+ (let (found l)
+ (while (and (re-search-forward "\\<\\(type\\|class\\)[ \t]*(" limit t)
+ (not
+ (setq found
+ (condition-case nil
+ (progn
+ ;; Set l after this to just highlight
+ ;; the "type" part.
+ (backward-char 1)
+ ;; Needed for: type( foo(...) ) :: bar
+ (forward-sexp)
+ (setq l (list (match-beginning 0) (point)))
+ (skip-chars-forward " \t")
+ (when
+ (re-search-forward
+ ;; type (foo) bar, qux
+ (if (looking-at "\\sw+")
+ "\\([^&!\n]+\\)"
+ ;; type (foo), stuff :: bar, qux
+ "::[ \t]*\\([^&!\n]+\\)")
+ (line-end-position) t)
+ (set-match-data
+ (append (list (car l) (match-end 1))
+ l (list (match-beginning 1)
+ (match-end 1))))
+ t))
+ (error nil))))))
+ found))
+
(defvar f90-font-lock-keywords-2
(append
f90-font-lock-keywords-1
(list
;; Variable declarations (avoid the real function call).
- '("^[ \t0-9]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\\|\
-logical\\|double[ \t]*precision\\|type[ \t]*(\\sw+)\\)\
+ ;; NB by accident (?), this correctly fontifies the "integer" in:
+ ;; integer () function foo ()
+ ;; because "() function foo ()" matches \\3.
+ ;; The "pure" part does not really belong here, but was added to
+ ;; exploit that hack.
+ ;; The "function foo" bit is correctly fontified by keywords-1.
+ ;; TODO ? actually check for balanced parens in that case.
+ '("^[ \t0-9]*\\(?:pure\\|elemental\\)?[ \t]*\
+\\(real\\|integer\\|c\\(haracter\\|omplex\\)\\|\
+enumerator\\|generic\\|procedure\\|logical\\|double[ \t]*precision\\)\
\\(.*::\\|[ \t]*(.*)\\)?\\([^&!\n]*\\)"
(1 font-lock-type-face t) (4 font-lock-variable-name-face t))
- ;; do, if, select, where, and forall constructs.
- '("\\<\\(end[ \t]*\\(do\\|if\\|select\\|forall\\|where\\)\\)\\>\
+ ;; Derived type/class variables.
+ ;; TODO ? If we just highlighted the "type" part, rather than
+ ;; "type(...)", this could be in the previous expression. And this
+ ;; would be consistent with integer( kind=8 ), etc.
+ '(f90-typedec-matcher
+ (1 font-lock-type-face) (2 font-lock-variable-name-face))
+ ;; "real function foo (args)". Must override previous. Note hack
+ ;; to get "args" unhighlighted again. Might not always be right,
+ ;; but probably better than leaving them as variables.
+ ;; NB not explicitly handling this case:
+ ;; integer( kind=1 ) function foo()
+ ;; thanks to the happy accident described above.
+ ;; Not anchored, so don't need to worry about "pure" etc.
+ '("\\<\\(\\(real\\|integer\\|c\\(haracter\\|omplex\\)\\|\
+logical\\|double[ \t]*precision\\|\
+\\(?:type\\|class\\)[ \t]*([ \t]*\\sw+[ \t]*)\\)[ \t]*\\)\
+\\(function\\)\\>[ \t]*\\(\\sw+\\)[ \t]*\\(([^&!\n]*)\\)"
+ (1 font-lock-type-face t) (4 font-lock-keyword-face t)
+ (5 font-lock-function-name-face t) (6 'default t))
+ ;; enum (F2003; cf type in -1).
+ '("\\<\\(enum\\)\\>\\([^()\n]*::\\)?[ \t]*\\(\\sw+\\)"
+ (1 font-lock-keyword-face) (3 font-lock-function-name-face))
+ ;; end do, enum (F2003), if, select, where, and forall constructs.
+ '("\\<\\(end[ \t]*\\(do\\|if\\|enum\\|select\\|forall\\|where\\)\\)\\>\
\\([ \t]+\\(\\sw+\\)\\)?"
(1 font-lock-keyword-face) (3 font-lock-constant-face nil t))
'("^[ \t0-9]*\\(\\(\\sw+\\)[ \t]*:[ \t]*\\)?\\(\\(if\\|\
-do\\([ \t]*while\\)?\\|select[ \t]*case\\|where\\|forall\\)\\)\\>"
+do\\([ \t]*while\\)?\\|select[ \t]*\\(?:case\\|type\\)\\|where\\|\
+forall\\)\\)\\>"
(2 font-lock-constant-face nil t) (3 font-lock-keyword-face))
;; Implicit declaration.
'("\\<\\(implicit\\)[ \t]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\
-\\|logical\\|double[ \t]*precision\\|type[ \t]*(\\sw+)\\|none\\)[ \t]*"
+\\|enumerator\\|procedure\\|\
+logical\\|double[ \t]*precision\\|type[ \t]*(\\sw+)\\|none\\)[ \t]*"
(1 font-lock-keyword-face) (2 font-lock-type-face))
'("\\<\\(namelist\\|common\\)[ \t]*\/\\(\\sw+\\)?\/"
(1 font-lock-keyword-face) (2 font-lock-constant-face nil t))
@@ -412,6 +586,10 @@ do\\([ \t]*while\\)?\\|select[ \t]*case\\|where\\|forall\\)\\)\\>"
'("\\<\\(exit\\|cycle\\)[ \t]*\\(\\sw+\\)?\\>"
(1 font-lock-keyword-face) (2 font-lock-constant-face nil t))
'("\\<\\(case\\)[ \t]*\\(default\\|(\\)" . 1)
+ ;; F2003 "class default".
+ '("\\<\\(class\\)[ \t]*default" . 1)
+ ;; F2003 "type is" in a "select type" block.
+ '("\\<\\(\\(type\\|class\\)[ \t]*is\\)[ \t]*(" (1 font-lock-keyword-face t))
'("\\<\\(do\\|go[ \t]*to\\)\\>[ \t]*\\([0-9]+\\)"
(1 font-lock-keyword-face) (2 font-lock-constant-face))
;; Line numbers (lines whose first character after number is letter).
@@ -424,14 +602,17 @@ do\\([ \t]*while\\)?\\|select[ \t]*case\\|where\\|forall\\)\\)\\>"
f90-keywords-level-3-re
f90-operators-re
(list f90-procedures-re '(1 font-lock-keyword-face keep))
- "\\<real\\>" ; avoid overwriting real defs
+ "\\<real\\>" ; avoid overwriting real defs
+ ;; As an attribute, but not as an optional argument.
+ '("\\<\\(asynchronous\\)[ \t]*[^=]" . 1)
))
"Highlights all F90 keywords and intrinsic procedures.")
(defvar f90-font-lock-keywords-4
(append f90-font-lock-keywords-3
- (list f90-hpf-keywords-re))
- "Highlights all F90 and HPF keywords.")
+ (list (cons f90-constants-re 'font-lock-constant-face)
+ f90-hpf-keywords-re))
+ "Highlights all F90 and HPF keywords and constants.")
(defvar f90-font-lock-keywords
f90-font-lock-keywords-2
@@ -578,7 +759,9 @@ Can be overridden by the value of `font-lock-maximum-decoration'.")
(defconst f90-blocks-re
(concat "\\(block[ \t]*data\\|"
(regexp-opt '("do" "if" "interface" "function" "module" "program"
- "select" "subroutine" "type" "where" "forall"))
+ "select" "subroutine" "type" "where" "forall"
+ ;; F2003.
+ "enum" "associate"))
"\\)\\>")
"Regexp potentially indicating a \"block\" of F90 code.")
@@ -586,9 +769,11 @@ Can be overridden by the value of `font-lock-maximum-decoration'.")
(regexp-opt '("program" "module" "subroutine" "function") 'paren)
"Regexp used to locate the start/end of a \"subprogram\".")
+;; "class is" is F2003.
(defconst f90-else-like-re
- "\\(else\\([ \t]*if\\|where\\)?\\|case[ \t]*\\(default\\|(\\)\\)"
- "Regexp matching an ELSE IF, ELSEWHERE, CASE statement.")
+ "\\(else\\([ \t]*if\\|where\\)?\\|case[ \t]*\\(default\\|(\\)\\|\
+\\(class\\|type\\)[ \t]*is[ \t]*(\\|class[ \t]*default\\)"
+ "Regexp matching an ELSE IF, ELSEWHERE, CASE, CLASS/TYPE IS statement.")
(defconst f90-end-if-re
(concat "end[ \t]*"
@@ -597,13 +782,27 @@ Can be overridden by the value of `font-lock-maximum-decoration'.")
"Regexp matching the end of an IF, SELECT, WHERE, FORALL block.")
(defconst f90-end-type-re
- "end[ \t]*\\(type\\|interface\\|block[ \t]*data\\)\\>"
- "Regexp matching the end of a TYPE, INTERFACE, BLOCK DATA section.")
+ "end[ \t]*\\(type\\|enum\\|interface\\|block[ \t]*data\\)\\>"
+ "Regexp matching the end of a TYPE, ENUM, INTERFACE, BLOCK DATA section.")
+
+(defconst f90-end-associate-re
+ "end[ \t]*associate\\>"
+ "Regexp matching the end of an ASSOCIATE block.")
+;; This is for a TYPE block, not a variable of derived TYPE.
+;; Hence no need to add CLASS for F2003.
(defconst f90-type-def-re
+ ;; type word
+ ;; type :: word
+ ;; type, stuff :: word
+ ;; NOT "type ("
"\\<\\(type\\)\\>\\(?:[^()\n]*::\\)?[ \t]*\\(\\sw+\\)"
"Regexp matching the definition of a derived type.")
+(defconst f90-typeis-re
+ "\\<\\(class\\|type\\)[ \t]*is[ \t]*("
+ "Regexp matching a CLASS/TYPE IS statement.")
+
(defconst f90-no-break-re
(regexp-opt '("**" "//" "=>" ">=" "<=" "==" "/=") 'paren)
"Regexp specifying where not to break lines when filling.
@@ -622,8 +821,8 @@ characters long.")
(concat "^[ \t0-9]*\\<end[ \t]*"
(regexp-opt '("do" "if" "forall" "function" "interface"
"module" "program" "select" "subroutine"
- "type" "where" ) t)
- "[ \t]*\\sw*")
+ "type" "where" "enum" "associate") t)
+ "\\>")
"Regexp matching the end of an F90 \"block\", from the line start.
Used in the F90 entry in `hs-special-modes-alist'.")
@@ -634,14 +833,24 @@ Used in the F90 entry in `hs-special-modes-alist'.")
"^[ \t0-9]*" ; statement number
"\\(\\("
"\\(\\sw+[ \t]*:[ \t]*\\)?" ; structure label
- "\\(do\\|select[ \t]*case\\|"
+ "\\(do\\|select[ \t]*\\(case\\|type\\)\\|"
;; See comments in fortran-start-block-re for the problems of IF.
"if[ \t]*(\\(.*\\|"
".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|"
;; Distinguish WHERE block from isolated WHERE.
"\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)"
"\\|"
- "program\\|interface\\|module\\|type\\|function\\|subroutine"
+ ;; Avoid F2003 "type is" in "select type",
+ ;; and also variables of derived type "type (foo)".
+ ;; "type, foo" must be a block (?).
+ "type[ \t,]\\("
+ "[^i(!\n\"\& \t]\\|" ; not-i(
+ "i[^s!\n\"\& \t]\\|" ; i not-s
+ "is\\sw\\)\\|"
+ ;; "abstract interface" is F2003.
+ "program\\|\\(?:abstract[ \t]*\\)?interface\\|module\\|"
+ ;; "enum", but not "enumerator".
+ "function\\|subroutine\\|enum[^e]\\|associate"
"\\)"
"[ \t]*")
"Regexp matching the start of an F90 \"block\", from the line start.
@@ -656,13 +865,37 @@ Used in the F90 entry in `hs-special-modes-alist'.")
;; Imenu support.
+;; FIXME trivial to extend this to enum. Worth it?
+(defun f90-imenu-type-matcher ()
+ "Search backward for the start of a derived type.
+Set subexpression 1 in the match-data to the name of the type."
+ (let (found l)
+ (while (and (re-search-backward "^[ \t0-9]*type[ \t]*" nil t)
+ (not (setq found
+ (save-excursion
+ (goto-char (match-end 0))
+ (unless (looking-at "\\(is\\>\\|(\\)")
+ (or (looking-at "\\(\\sw+\\)")
+ (re-search-forward
+ "[ \t]*::[ \t]*\\(\\sw+\\)"
+ (line-end-position) t))))))))
+ found))
+
(defvar f90-imenu-generic-expression
(let ((good-char "[^!\"\&\n \t]") (not-e "[^e!\n\"\& \t]")
- (not-n "[^n!\n\"\& \t]") (not-d "[^d!\n\"\& \t]"))
+ (not-n "[^n!\n\"\& \t]") (not-d "[^d!\n\"\& \t]")
+ (not-ib "[^i(!\n\"\& \t]") (not-s "[^s!\n\"\& \t]"))
(list
'(nil "^[ \t0-9]*program[ \t]+\\(\\sw+\\)" 1)
'("Modules" "^[ \t0-9]*module[ \t]+\\(\\sw+\\)[ \t]*\\(!\\|$\\)" 1)
- '("Types" "^[ \t0-9]*type[ \t]+\\(\\sw+\\)" 1)
+ (list "Types" 'f90-imenu-type-matcher 1)
+ ;; Does not handle: "type[, stuff] :: foo".
+;;; (format "^[ \t0-9]*type[ \t]+\\(\\(%s\\|i%s\\|is\\sw\\)\\sw*\\)"
+;;; not-ib not-s)
+;;; 1)
+ ;; Can't get the subexpression numbers to match in the two branches.
+;;; (format "^[ \t0-9]*type\\([ \t]*,.*\\(::\\)[ \t]*\\(\\sw+\\)\\|[ \t]+\\(\\(%s\\|i%s\\|is\\sw\\)\\sw*\\)\\)" not-ib not-s)
+;;; 3)
(list
"Procedures"
(concat
@@ -701,7 +934,7 @@ Used in the F90 entry in `hs-special-modes-alist'.")
(let (abbrevs-changed)
;; Use the 6th arg (SYSTEM-FLAG) of define-abbrev if possible.
;; A little baroque to quieten the byte-compiler.
- (mapcar
+ (mapc
(function (lambda (element)
(condition-case nil
(apply 'define-abbrev f90-mode-abbrev-table
@@ -711,7 +944,9 @@ Used in the F90 entry in `hs-special-modes-alist'.")
(append element '(nil 0)))))))
'(("`al" "allocate" )
("`ab" "allocatable" )
+ ("`ai" "abstract interface")
("`as" "assignment" )
+ ("`asy" "asynchronous" )
("`ba" "backspace" )
("`bd" "block data" )
("`c" "character" )
@@ -728,6 +963,8 @@ Used in the F90 entry in `hs-special-modes-alist'.")
("`el" "else" )
("`eli" "else if" )
("`elw" "elsewhere" )
+ ("`em" "elemental" )
+ ("`e" "enumerator" )
("`eq" "equivalence" )
("`ex" "external" )
("`ey" "entry" )
@@ -750,6 +987,7 @@ Used in the F90 entry in `hs-special-modes-alist'.")
("`pr" "print" )
("`pi" "private" )
("`pm" "program" )
+ ("`pr" "protected" )
("`pu" "public" )
("`r" "real" )
("`rc" "recursive" )
@@ -761,6 +999,7 @@ Used in the F90 entry in `hs-special-modes-alist'.")
("`ta" "target" )
("`tr" ".true." )
("`t" "type" )
+ ("`vo" "volatile" )
("`wh" "where" )
("`wr" "write" ))))
@@ -786,9 +1025,9 @@ Variables controlling indentation style and extra features:
`f90-do-indent'
Extra indentation within do blocks (default 3).
`f90-if-indent'
- Extra indentation within if/select case/where/forall blocks (default 3).
+ Extra indentation within if/select/where/forall blocks (default 3).
`f90-type-indent'
- Extra indentation within type/interface/block-data blocks (default 3).
+ Extra indentation within type/enum/interface/block-data blocks (default 3).
`f90-program-indent'
Extra indentation within program/module/subroutine/function blocks
(default 2).
@@ -862,9 +1101,9 @@ with no args, if that value is non-nil."
Checks from `point-min', or `f90-cache-position', if that is non-nil
and lies before point."
(let ((beg-pnt
- (if (and f90-cache-position (> (point) f90-cache-position))
- f90-cache-position
- (point-min))))
+ (if (and f90-cache-position (> (point) f90-cache-position))
+ f90-cache-position
+ (point-min))))
(nth 3 (parse-partial-sexp beg-pnt (point)))))
(defsubst f90-in-comment ()
@@ -872,9 +1111,9 @@ and lies before point."
Checks from `point-min', or `f90-cache-position', if that is non-nil
and lies before point."
(let ((beg-pnt
- (if (and f90-cache-position (> (point) f90-cache-position))
- f90-cache-position
- (point-min))))
+ (if (and f90-cache-position (> (point) f90-cache-position))
+ f90-cache-position
+ (point-min))))
(nth 4 (parse-partial-sexp beg-pnt (point)))))
(defsubst f90-line-continued ()
@@ -940,10 +1179,10 @@ NAME is nil if the statement has no label."
(list (match-string 3) (match-string 2))))
(defsubst f90-looking-at-select-case ()
- "Return (\"select\" NAME) if a select-case statement starts after point.
+ "Return (\"select\" NAME) if a select statement starts after point.
NAME is nil if the statement has no label."
(if (looking-at "\\(\\(\\sw+\\)[ \t]*:\\)?[ \t]*\
-\\(select\\)[ \t]*case[ \t]*(")
+\\(select\\)[ \t]*\\(case\\|type\\)[ \t]*(")
(list (match-string 3) (match-string 2))))
(defsubst f90-looking-at-if-then ()
@@ -963,6 +1202,12 @@ NAME is nil if the statement has no label."
(looking-at "then\\>")))
(list struct label))))))
+;; FIXME label?
+(defsubst f90-looking-at-associate ()
+ "Return (\"associate\") if an associate block starts after point."
+ (if (looking-at "\\<\\(associate\\)[ \t]*(")
+ (list (match-string 1))))
+
(defsubst f90-looking-at-where-or-forall ()
"Return (KIND NAME) if a where or forall block starts after point.
NAME is nil if the statement has no label."
@@ -977,12 +1222,23 @@ NAME is nil if the statement has no label."
(if (looking-at "\\(!\\|$\\)") (list struct label))))))
(defsubst f90-looking-at-type-like ()
- "Return (KIND NAME) if a type/interface/block-data block starts after point.
+ "Return (KIND NAME) if a type/enum/interface/block-data starts after point.
NAME is non-nil only for type."
(cond
- ((looking-at f90-type-def-re)
- (list (match-string 1) (match-string 2)))
- ((looking-at "\\(interface\\|block[ \t]*data\\)\\>")
+ ((save-excursion
+ (and (looking-at "\\<type[ \t]*")
+ (goto-char (match-end 0))
+ (not (looking-at "\\(is\\>\\|(\\)"))
+ (or (looking-at "\\(\\sw+\\)")
+ (re-search-forward "[ \t]*::[ \t]*\\(\\sw+\\)"
+ (line-end-position) t))))
+ (list "type" (match-string 1)))
+;;; ((and (not (looking-at f90-typeis-re))
+;;; (looking-at f90-type-def-re))
+;;; (list (match-string 1) (match-string 2)))
+ ((looking-at "\\(enum\\|interface\\|block[ \t]*data\\)\\>")
+ (list (match-string 1) nil))
+ ((looking-at "abstract[ \t]*\\(interface\\)\\>")
(list (match-string 1) nil))))
(defsubst f90-looking-at-program-block-start ()
@@ -992,10 +1248,10 @@ NAME is non-nil only for type."
((looking-at "\\(program\\)[ \t]+\\(\\sw+\\)\\>")
(list (match-string 1) (match-string 2)))
((and (not (looking-at "module[ \t]*procedure\\>"))
- (looking-at "\\(module\\)[ \t]+\\(\\sw+\\)\\>"))
+ (looking-at "\\(module\\)[ \t]+\\(\\sw+\\)\\>"))
(list (match-string 1) (match-string 2)))
((and (not (looking-at "end[ \t]*\\(function\\|subroutine\\)"))
- (looking-at "[^!'\"\&\n]*\\(function\\|subroutine\\)[ \t]+\
+ (looking-at "[^!'\"\&\n]*\\(function\\|subroutine\\)[ \t]+\
\\(\\sw+\\)"))
(list (match-string 1) (match-string 2)))))
;; Following will match an un-named main program block; however
@@ -1009,7 +1265,7 @@ NAME is non-nil only for type."
(defsubst f90-looking-at-program-block-end ()
"Return (KIND NAME) if a block with name NAME ends after point."
(if (looking-at (concat "end[ \t]*" f90-blocks-re
- "?\\([ \t]+\\(\\sw+\\)\\)?\\>"))
+ "?\\([ \t]+\\(\\sw+\\)\\)?\\>"))
(list (match-string 1) (match-string 3))))
(defsubst f90-comment-indent ()
@@ -1019,16 +1275,16 @@ Used for `comment-indent-function' by F90 mode.
`f90-indented-comment-re' (if not trailing code) calls `f90-calculate-indent'.
All others return `comment-column', leaving at least one space after code."
(cond ((looking-at "!!!") 0)
- ((and f90-directive-comment-re
- (looking-at f90-directive-comment-re)) 0)
- ((looking-at (regexp-quote f90-comment-region)) 0)
- ((and (looking-at f90-indented-comment-re)
- ;; Don't attempt to indent trailing comment as code.
- (save-excursion
- (skip-chars-backward " \t")
- (bolp)))
- (f90-calculate-indent))
- (t (save-excursion
+ ((and f90-directive-comment-re
+ (looking-at f90-directive-comment-re)) 0)
+ ((looking-at (regexp-quote f90-comment-region)) 0)
+ ((and (looking-at f90-indented-comment-re)
+ ;; Don't attempt to indent trailing comment as code.
+ (save-excursion
+ (skip-chars-backward " \t")
+ (bolp)))
+ (f90-calculate-indent))
+ (t (save-excursion
(skip-chars-backward " \t")
(max (if (bolp) 0 (1+ (current-column))) comment-column)))))
@@ -1045,10 +1301,10 @@ Comment lines embedded amongst continued lines return 'middle."
(setq pcont (if (f90-previous-statement) (f90-line-continued))))
(setq cont (f90-line-continued))
(cond ((and (not pcont) (not cont)) 'single)
- ((and (not pcont) cont) 'begin)
- ((and pcont (not cont)) 'end)
- ((and pcont cont) 'middle)
- (t (error "The impossible occurred")))))
+ ((and (not pcont) cont) 'begin)
+ ((and pcont (not cont)) 'end)
+ ((and pcont cont) 'middle)
+ (t (error "The impossible occurred")))))
(defsubst f90-indent-line-no ()
"If `f90-leave-line-no' is nil, left-justify a line number.
@@ -1065,9 +1321,9 @@ if all else fails."
(save-excursion
(not (or (looking-at "end")
(looking-at "\\(do\\|if\\|else\\(if\\|where\\)?\
-\\|select[ \t]*case\\|case\\|where\\|forall\\)\\>")
- (looking-at "\\(program\\|module\\|interface\\|\
-block[ \t]*data\\)\\>")
+\\|select[ \t]*\\(case\\|type\\)\\|case\\|where\\|forall\\)\\>")
+ (looking-at "\\(program\\|module\\|\
+\\(?:abstract[ \t]*\\)?interface\\|block[ \t]*data\\)\\>")
(looking-at "\\(contains\\|\\sw+[ \t]*:\\)")
(looking-at f90-type-def-re)
(re-search-forward "\\(function\\|subroutine\\)"
@@ -1093,10 +1349,10 @@ Does not check type and subprogram indentation."
(let ((epnt (line-end-position)) icol cont)
(save-excursion
(while (and (f90-previous-statement)
- (or (progn
- (setq cont (f90-present-statement-cont))
- (or (eq cont 'end) (eq cont 'middle)))
- (looking-at "[ \t]*[0-9]"))))
+ (or (progn
+ (setq cont (f90-present-statement-cont))
+ (or (eq cont 'end) (eq cont 'middle)))
+ (looking-at "[ \t]*[0-9]"))))
(setq icol (current-indentation))
(beginning-of-line)
(when (re-search-forward "\\(if\\|do\\|select\\|where\\|forall\\)"
@@ -1108,23 +1364,29 @@ Does not check type and subprogram indentation."
((or (f90-looking-at-if-then)
(f90-looking-at-where-or-forall)
(f90-looking-at-select-case))
- (setq icol (+ icol f90-if-indent))))
+ (setq icol (+ icol f90-if-indent)))
+ ((f90-looking-at-associate)
+ (setq icol (+ icol f90-associate-indent))))
(end-of-line))
(while (re-search-forward
- "\\(if\\|do\\|select\\|where\\|forall\\)" epnt t)
- (beginning-of-line)
+ "\\(if\\|do\\|select\\|where\\|forall\\)" epnt t)
+ (beginning-of-line)
(skip-chars-forward " \t0-9")
- (cond ((f90-looking-at-do)
+ (cond ((f90-looking-at-do)
(setq icol (+ icol f90-do-indent)))
((or (f90-looking-at-if-then)
(f90-looking-at-where-or-forall)
(f90-looking-at-select-case))
(setq icol (+ icol f90-if-indent)))
+ ((f90-looking-at-associate)
+ (setq icol (+ icol f90-associate-indent)))
((looking-at f90-end-if-re)
(setq icol (- icol f90-if-indent)))
+ ((looking-at f90-end-associate-re)
+ (setq icol (- icol f90-associate-indent)))
((looking-at "end[ \t]*do\\>")
(setq icol (- icol f90-do-indent))))
- (end-of-line))
+ (end-of-line))
icol)))
(defun f90-calculate-indent ()
@@ -1135,7 +1397,7 @@ Does not check type and subprogram indentation."
(if (not (f90-previous-statement))
;; If f90-previous-statement returns nil, we must have been
;; called from on or before the first line of the first statement.
- (setq icol (if (save-excursion
+ (setq icol (if (save-excursion
;; f90-previous-statement has moved us over
;; comment/blank lines, so we need to get
;; back to the first code statement.
@@ -1146,48 +1408,52 @@ Does not check type and subprogram indentation."
0
;; No explicit PROGRAM start statement.
f90-program-indent))
- (setq cont (f90-present-statement-cont))
- (if (eq cont 'end)
- (while (not (eq 'begin (f90-present-statement-cont)))
- (f90-previous-statement)))
- (cond ((eq cont 'begin)
- (setq icol (+ (f90-current-indentation)
- f90-continuation-indent)))
- ((eq cont 'middle) (setq icol (current-indentation)))
- (t (setq icol (f90-current-indentation))
- (skip-chars-forward " \t")
- (if (looking-at "[0-9]")
- (setq icol (f90-get-correct-indent))
- (cond ((or (f90-looking-at-if-then)
- (f90-looking-at-where-or-forall)
- (f90-looking-at-select-case)
- (looking-at f90-else-like-re))
- (setq icol (+ icol f90-if-indent)))
- ((f90-looking-at-do)
- (setq icol (+ icol f90-do-indent)))
- ((f90-looking-at-type-like)
- (setq icol (+ icol f90-type-indent)))
- ((or (f90-looking-at-program-block-start)
- (looking-at "contains[ \t]*\\($\\|!\\)"))
- (setq icol (+ icol f90-program-indent)))))
- (goto-char pnt)
- (beginning-of-line)
- (cond ((looking-at "[ \t]*$"))
- ((looking-at "[ \t]*#") ; check for cpp directive
- (setq icol 0))
- (t
- (skip-chars-forward " \t0-9")
- (cond ((or (looking-at f90-else-like-re)
- (looking-at f90-end-if-re))
- (setq icol (- icol f90-if-indent)))
- ((looking-at "end[ \t]*do\\>")
- (setq icol (- icol f90-do-indent)))
- ((looking-at f90-end-type-re)
- (setq icol (- icol f90-type-indent)))
- ((or (looking-at "contains[ \t]*\\(!\\|$\\)")
- (f90-looking-at-program-block-end))
- (setq icol (- icol f90-program-indent))))))
- ))))
+ (setq cont (f90-present-statement-cont))
+ (if (eq cont 'end)
+ (while (not (eq 'begin (f90-present-statement-cont)))
+ (f90-previous-statement)))
+ (cond ((eq cont 'begin)
+ (setq icol (+ (f90-current-indentation)
+ f90-continuation-indent)))
+ ((eq cont 'middle) (setq icol (current-indentation)))
+ (t (setq icol (f90-current-indentation))
+ (skip-chars-forward " \t")
+ (if (looking-at "[0-9]")
+ (setq icol (f90-get-correct-indent))
+ (cond ((or (f90-looking-at-if-then)
+ (f90-looking-at-where-or-forall)
+ (f90-looking-at-select-case)
+ (looking-at f90-else-like-re))
+ (setq icol (+ icol f90-if-indent)))
+ ((f90-looking-at-do)
+ (setq icol (+ icol f90-do-indent)))
+ ((f90-looking-at-type-like)
+ (setq icol (+ icol f90-type-indent)))
+ ((f90-looking-at-associate)
+ (setq icol (+ icol f90-associate-indent)))
+ ((or (f90-looking-at-program-block-start)
+ (looking-at "contains[ \t]*\\($\\|!\\)"))
+ (setq icol (+ icol f90-program-indent)))))
+ (goto-char pnt)
+ (beginning-of-line)
+ (cond ((looking-at "[ \t]*$"))
+ ((looking-at "[ \t]*#") ; check for cpp directive
+ (setq icol 0))
+ (t
+ (skip-chars-forward " \t0-9")
+ (cond ((or (looking-at f90-else-like-re)
+ (looking-at f90-end-if-re))
+ (setq icol (- icol f90-if-indent)))
+ ((looking-at "end[ \t]*do\\>")
+ (setq icol (- icol f90-do-indent)))
+ ((looking-at f90-end-type-re)
+ (setq icol (- icol f90-type-indent)))
+ ((looking-at f90-end-associate-re)
+ (setq icol (- icol f90-associate-indent)))
+ ((or (looking-at "contains[ \t]*\\(!\\|$\\)")
+ (f90-looking-at-program-block-end))
+ (setq icol (- icol f90-program-indent))))))
+ ))))
icol))
(defun f90-previous-statement ()
@@ -1200,7 +1466,7 @@ comment."
(let (not-first-statement)
(beginning-of-line)
(while (and (setq not-first-statement (zerop (forward-line -1)))
- (looking-at "[ \t0-9]*\\(!\\|$\\|#\\)")))
+ (looking-at "[ \t0-9]*\\(!\\|$\\|#\\)")))
not-first-statement))
(defun f90-next-statement ()
@@ -1210,9 +1476,9 @@ Return nil if no later statement is found."
(let (not-last-statement)
(beginning-of-line)
(while (and (setq not-last-statement
- (and (zerop (forward-line 1))
- (not (eobp))))
- (looking-at "[ \t0-9]*\\(!\\|$\\)")))
+ (and (zerop (forward-line 1))
+ (not (eobp))))
+ (looking-at "[ \t0-9]*\\(!\\|$\\)")))
not-last-statement))
(defun f90-beginning-of-subprogram ()
@@ -1222,7 +1488,7 @@ Return (TYPE NAME), or nil if not found."
(let ((count 1) (case-fold-search t) matching-beg)
(beginning-of-line)
(while (and (> count 0)
- (re-search-backward f90-program-block-re nil 'move))
+ (re-search-backward f90-program-block-re nil 'move))
(beginning-of-line)
(skip-chars-forward " \t0-9")
(cond ((setq matching-beg (f90-looking-at-program-block-start))
@@ -1231,7 +1497,7 @@ Return (TYPE NAME), or nil if not found."
(setq count (1+ count)))))
(beginning-of-line)
(if (zerop count)
- matching-beg
+ matching-beg
;; Note this includes the case of an un-named main program,
;; in which case we go to (point-min).
(message "No beginning found.")
@@ -1242,23 +1508,23 @@ Return (TYPE NAME), or nil if not found."
Return (TYPE NAME), or nil if not found."
(interactive)
(let ((case-fold-search t)
- (count 1)
+ (count 1)
matching-end)
(end-of-line)
(while (and (> count 0)
- (re-search-forward f90-program-block-re nil 'move))
+ (re-search-forward f90-program-block-re nil 'move))
(beginning-of-line)
(skip-chars-forward " \t0-9")
(cond ((f90-looking-at-program-block-start)
- (setq count (1+ count)))
- ((setq matching-end (f90-looking-at-program-block-end))
- (setq count (1- count))))
+ (setq count (1+ count)))
+ ((setq matching-end (f90-looking-at-program-block-end))
+ (setq count (1- count))))
(end-of-line))
;; This means f90-end-of-subprogram followed by f90-start-of-subprogram
;; has a net non-zero effect, which seems odd.
;;; (forward-line 1)
(if (zerop count)
- matching-end
+ matching-end
(message "No end found.")
nil)))
@@ -1287,6 +1553,7 @@ Interactively, pushes mark before moving point."
(f90-looking-at-do)
(f90-looking-at-select-case)
(f90-looking-at-type-like)
+ (f90-looking-at-associate)
(f90-looking-at-program-block-start)
(f90-looking-at-if-then)
(f90-looking-at-where-or-forall)))
@@ -1347,6 +1614,7 @@ Interactively, pushes mark before moving point."
(f90-looking-at-do)
(f90-looking-at-select-case)
(f90-looking-at-type-like)
+ (f90-looking-at-associate)
(f90-looking-at-program-block-start)
(f90-looking-at-if-then)
(f90-looking-at-where-or-forall)))
@@ -1387,6 +1655,7 @@ A block is a subroutine, if-endif, etc."
(f90-looking-at-do)
(f90-looking-at-select-case)
(f90-looking-at-type-like)
+ (f90-looking-at-associate)
(f90-looking-at-program-block-start)
(f90-looking-at-if-then)
(f90-looking-at-where-or-forall))
@@ -1427,13 +1696,13 @@ in the region, or, if already present, remove it."
(goto-char beg-region)
(beginning-of-line)
(if (looking-at (regexp-quote f90-comment-region))
- (delete-region (point) (match-end 0))
+ (delete-region (point) (match-end 0))
(insert f90-comment-region))
(while (and (zerop (forward-line 1))
- (< (point) end))
+ (< (point) end))
(if (looking-at (regexp-quote f90-comment-region))
- (delete-region (point) (match-end 0))
- (insert f90-comment-region)))
+ (delete-region (point) (match-end 0))
+ (insert f90-comment-region)))
(set-marker end nil)))
(defun f90-indent-line (&optional no-update)
@@ -1451,7 +1720,7 @@ after indenting."
(setq no-line-number t)
(skip-chars-forward " \t"))
(if (looking-at "!")
- (setq indent (f90-comment-indent))
+ (setq indent (f90-comment-indent))
(and f90-smart-end (looking-at "end")
(f90-match-end))
(setq indent (f90-calculate-indent)))
@@ -1476,7 +1745,7 @@ If run in the middle of a line, the line is not broken."
(beginning-of-line) ; reindent where likely to be needed
(f90-indent-line) ; calls indent-line-no, update-line
(end-of-line)
- (delete-horizontal-space) ; destroy trailing whitespace
+ (delete-horizontal-space) ; destroy trailing whitespace
(let ((string (f90-in-string))
(cont (f90-line-continued)))
(and string (not cont) (insert "&"))
@@ -1493,17 +1762,17 @@ If run in the middle of a line, the line is not broken."
(let ((end-region-mark (copy-marker end-region))
(save-point (point-marker))
(case-fold-search t)
- block-list ind-lev ind-curr ind-b cont struct beg-struct end-struct)
+ block-list ind-lev ind-curr ind-b cont struct beg-struct end-struct)
(goto-char beg-region)
;; First find a line which is not a continuation line or comment.
(beginning-of-line)
(while (and (looking-at "[ \t]*[0-9]*\\(!\\|#\\|[ \t]*$\\)")
- (progn (f90-indent-line 'no-update)
- (zerop (forward-line 1)))
- (< (point) end-region-mark)))
+ (progn (f90-indent-line 'no-update)
+ (zerop (forward-line 1)))
+ (< (point) end-region-mark)))
(setq cont (f90-present-statement-cont))
(while (and (or (eq cont 'middle) (eq cont 'end))
- (f90-previous-statement))
+ (f90-previous-statement))
(setq cont (f90-present-statement-cont)))
;; Process present line for beginning of block.
(setq f90-cache-position (point))
@@ -1514,20 +1783,22 @@ If run in the middle of a line, the line is not broken."
(skip-chars-forward " \t0-9")
(setq struct nil
ind-b (cond ((setq struct (f90-looking-at-do)) f90-do-indent)
- ((or (setq struct (f90-looking-at-if-then))
- (setq struct (f90-looking-at-select-case))
- (setq struct (f90-looking-at-where-or-forall))
- (looking-at f90-else-like-re))
- f90-if-indent)
- ((setq struct (f90-looking-at-type-like))
- f90-type-indent)
- ((or (setq struct (f90-looking-at-program-block-start))
+ ((or (setq struct (f90-looking-at-if-then))
+ (setq struct (f90-looking-at-select-case))
+ (setq struct (f90-looking-at-where-or-forall))
+ (looking-at f90-else-like-re))
+ f90-if-indent)
+ ((setq struct (f90-looking-at-type-like))
+ f90-type-indent)
+ ((setq struct (f90-looking-at-associate))
+ f90-associate-indent)
+ ((or (setq struct (f90-looking-at-program-block-start))
(looking-at "contains[ \t]*\\($\\|!\\)"))
- f90-program-indent)))
+ f90-program-indent)))
(if ind-b (setq ind-lev (+ ind-lev ind-b)))
(if struct (setq block-list (cons struct block-list)))
(while (and (f90-line-continued) (zerop (forward-line 1))
- (< (point) end-region-mark))
+ (< (point) end-region-mark))
(if (looking-at "[ \t]*!")
(f90-indent-to (f90-comment-indent))
(or (= (current-indentation)
@@ -1539,47 +1810,51 @@ If run in the middle of a line, the line is not broken."
(f90-indent-line-no)
(setq f90-cache-position (point))
(cond ((looking-at "[ \t]*$") (setq ind-curr 0))
- ((looking-at "[ \t]*#") (setq ind-curr 0))
- ((looking-at "!") (setq ind-curr (f90-comment-indent)))
- ((f90-no-block-limit) (setq ind-curr ind-lev))
- ((looking-at f90-else-like-re) (setq ind-curr
- (- ind-lev f90-if-indent)))
- ((looking-at "contains[ \t]*\\($\\|!\\)")
- (setq ind-curr (- ind-lev f90-program-indent)))
- ((setq ind-b
- (cond ((setq struct (f90-looking-at-do)) f90-do-indent)
- ((or (setq struct (f90-looking-at-if-then))
- (setq struct (f90-looking-at-select-case))
- (setq struct (f90-looking-at-where-or-forall)))
- f90-if-indent)
- ((setq struct (f90-looking-at-type-like))
- f90-type-indent)
- ((setq struct (f90-looking-at-program-block-start))
- f90-program-indent)))
- (setq ind-curr ind-lev)
- (if ind-b (setq ind-lev (+ ind-lev ind-b)))
- (setq block-list (cons struct block-list)))
- ((setq end-struct (f90-looking-at-program-block-end))
- (setq beg-struct (car block-list)
- block-list (cdr block-list))
- (if f90-smart-end
- (save-excursion
- (f90-block-match (car beg-struct) (car (cdr beg-struct))
- (car end-struct) (car (cdr end-struct)))))
- (setq ind-b
- (cond ((looking-at f90-end-if-re) f90-if-indent)
- ((looking-at "end[ \t]*do\\>") f90-do-indent)
- ((looking-at f90-end-type-re) f90-type-indent)
- ((f90-looking-at-program-block-end)
- f90-program-indent)))
- (if ind-b (setq ind-lev (- ind-lev ind-b)))
- (setq ind-curr ind-lev))
- (t (setq ind-curr ind-lev)))
+ ((looking-at "[ \t]*#") (setq ind-curr 0))
+ ((looking-at "!") (setq ind-curr (f90-comment-indent)))
+ ((f90-no-block-limit) (setq ind-curr ind-lev))
+ ((looking-at f90-else-like-re) (setq ind-curr
+ (- ind-lev f90-if-indent)))
+ ((looking-at "contains[ \t]*\\($\\|!\\)")
+ (setq ind-curr (- ind-lev f90-program-indent)))
+ ((setq ind-b
+ (cond ((setq struct (f90-looking-at-do)) f90-do-indent)
+ ((or (setq struct (f90-looking-at-if-then))
+ (setq struct (f90-looking-at-select-case))
+ (setq struct (f90-looking-at-where-or-forall)))
+ f90-if-indent)
+ ((setq struct (f90-looking-at-type-like))
+ f90-type-indent)
+ ((setq struct (f90-looking-at-associate))
+ f90-associate-indent)
+ ((setq struct (f90-looking-at-program-block-start))
+ f90-program-indent)))
+ (setq ind-curr ind-lev)
+ (if ind-b (setq ind-lev (+ ind-lev ind-b)))
+ (setq block-list (cons struct block-list)))
+ ((setq end-struct (f90-looking-at-program-block-end))
+ (setq beg-struct (car block-list)
+ block-list (cdr block-list))
+ (if f90-smart-end
+ (save-excursion
+ (f90-block-match (car beg-struct) (car (cdr beg-struct))
+ (car end-struct) (car (cdr end-struct)))))
+ (setq ind-b
+ (cond ((looking-at f90-end-if-re) f90-if-indent)
+ ((looking-at "end[ \t]*do\\>") f90-do-indent)
+ ((looking-at f90-end-type-re) f90-type-indent)
+ ((looking-at f90-end-associate-re)
+ f90-associate-indent)
+ ((f90-looking-at-program-block-end)
+ f90-program-indent)))
+ (if ind-b (setq ind-lev (- ind-lev ind-b)))
+ (setq ind-curr ind-lev))
+ (t (setq ind-curr ind-lev)))
;; Do the indentation if necessary.
(or (= ind-curr (current-column))
- (f90-indent-to ind-curr))
+ (f90-indent-to ind-curr))
(while (and (f90-line-continued) (zerop (forward-line 1))
- (< (point) end-region-mark))
+ (< (point) end-region-mark))
(if (looking-at "[ \t]*!")
(f90-indent-to (f90-comment-indent))
(or (= (current-indentation)
@@ -1592,7 +1867,7 @@ If run in the middle of a line, the line is not broken."
(set-marker end-region-mark nil)
(set-marker save-point nil)
(if (fboundp 'zmacs-deactivate-region)
- (zmacs-deactivate-region)
+ (zmacs-deactivate-region)
(deactivate-mark))))
(defun f90-indent-subprogram ()
@@ -1601,15 +1876,15 @@ If run in the middle of a line, the line is not broken."
(save-excursion
(let ((program (f90-mark-subprogram)))
(if program
- (progn
- (message "Indenting %s %s..."
- (car program) (car (cdr program)))
- (indent-region (point) (mark) nil)
- (message "Indenting %s %s...done"
- (car program) (car (cdr program))))
- (message "Indenting the whole file...")
- (indent-region (point) (mark) nil)
- (message "Indenting the whole file...done")))))
+ (progn
+ (message "Indenting %s %s..."
+ (car program) (car (cdr program)))
+ (indent-region (point) (mark) nil)
+ (message "Indenting %s %s...done"
+ (car program) (car (cdr program))))
+ (message "Indenting the whole file...")
+ (indent-region (point) (mark) nil)
+ (message "Indenting the whole file...done")))))
(defun f90-break-line (&optional no-update)
"Break line at point, insert continuation marker(s) and indent.
@@ -1681,7 +1956,7 @@ Like `join-line', but handles F90 syntax."
(interactive "*r")
(let ((end-region-mark (copy-marker end-region))
(go-on t)
- f90-smart-end f90-auto-keyword-case auto-fill-function)
+ f90-smart-end f90-auto-keyword-case auto-fill-function)
(goto-char beg-region)
(while go-on
;; Join as much as possible.
@@ -1692,17 +1967,17 @@ Like `join-line', but handles F90 syntax."
(f90-join-lines 'forward))
;; Chop the line if necessary.
(while (> (save-excursion (end-of-line) (current-column))
- fill-column)
- (move-to-column fill-column)
- (f90-find-breakpoint)
- (f90-break-line 'no-update))
+ fill-column)
+ (move-to-column fill-column)
+ (f90-find-breakpoint)
+ (f90-break-line 'no-update))
(setq go-on (and (< (point) end-region-mark)
(zerop (forward-line 1)))
f90-cache-position (point)))
(setq f90-cache-position nil)
(set-marker end-region-mark nil)
(if (fboundp 'zmacs-deactivate-region)
- (zmacs-deactivate-region)
+ (zmacs-deactivate-region)
(deactivate-mark))))
(defun f90-block-match (beg-block beg-name end-block end-name)
@@ -1747,9 +2022,9 @@ Leave point at the end of line."
(interactive)
(let ((count 1)
(top-of-window (window-start))
- (end-point (point))
+ (end-point (point))
(case-fold-search t)
- matching-beg beg-name end-name beg-block end-block end-struct)
+ matching-beg beg-name end-name beg-block end-block end-struct)
(when (save-excursion (beginning-of-line) (skip-chars-forward " \t0-9")
(setq end-struct (f90-looking-at-program-block-end)))
(setq end-block (car end-struct)
@@ -1772,6 +2047,7 @@ Leave point at the end of line."
(f90-looking-at-where-or-forall)
(f90-looking-at-select-case)
(f90-looking-at-type-like)
+ (f90-looking-at-associate)
(f90-looking-at-program-block-start)
;; Interpret a single END without a block
;; start to be the END of a program block
@@ -1816,12 +2092,12 @@ Any other key combination is executed normally."
(if (fboundp 'next-command-event) ; XEmacs
(setq event (next-command-event)
char (and (fboundp 'event-to-character)
- (event-to-character event)))
+ (event-to-character event)))
(setq event (read-event)
char event))
;; Insert char if not equal to `?', or if abbrev-mode is off.
(if (and abbrev-mode (or (eq char ??) (eq char help-char)))
- (f90-abbrev-help)
+ (f90-abbrev-help)
(setq unread-command-events (list event)))))
(defun f90-abbrev-help ()
@@ -1880,16 +2156,16 @@ CHANGE-WORD should be one of 'upcase-word, 'downcase-word, 'capitalize-word."
(setq beg (or beg (point-min))
end (or end (point-max)))
(let ((keyword-re
- (concat "\\("
- f90-keywords-re "\\|" f90-procedures-re "\\|"
- f90-hpf-keywords-re "\\|" f90-operators-re "\\)"))
- (ref-point (point-min))
- (modified (buffer-modified-p))
+ (concat "\\("
+ f90-keywords-re "\\|" f90-procedures-re "\\|"
+ f90-hpf-keywords-re "\\|" f90-operators-re "\\)"))
+ (ref-point (point-min))
+ (modified (buffer-modified-p))
state saveword back-point)
(goto-char beg)
(unwind-protect
- (while (re-search-forward keyword-re end t)
- (unless (progn
+ (while (re-search-forward keyword-re end t)
+ (unless (progn
(setq state (parse-partial-sexp ref-point (point)))
(or (nth 3 state) (nth 4 state)
;; GM f90-directive-comment-re?
@@ -1897,13 +2173,13 @@ CHANGE-WORD should be one of 'upcase-word, 'downcase-word, 'capitalize-word."
(beginning-of-line)
(skip-chars-forward " \t0-9")
(looking-at "#"))))
- (setq ref-point (point)
- back-point (save-excursion (backward-word 1) (point))
+ (setq ref-point (point)
+ back-point (save-excursion (backward-word 1) (point))
saveword (buffer-substring back-point ref-point))
- (funcall change-word -1)
- (or (string= saveword (buffer-substring back-point ref-point))
- (setq modified t))))
- (or modified (set-buffer-modified-p nil))))))
+ (funcall change-word -1)
+ (or (string= saveword (buffer-substring back-point ref-point))
+ (setq modified t))))
+ (or modified (set-buffer-modified-p nil))))))
(defun f90-current-defun ()
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 99e5fb53823..1e144282de5 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -325,11 +325,6 @@ Return nil if we cannot, non-nil if we can."
(or (nth 2 (flymake-get-file-name-mode-and-masks file-name))
'flymake-get-real-file-name))
-(defcustom flymake-buildfile-dirs '("." ".." "../.." "../../.." "../../../.." "../../../../.." "../../../../../.." "../../../../../../.." "../../../../../../../.." "../../../../../../../../.." "../../../../../../../../../.." "../../../../../../../../../../..")
- "Dirs to look for buildfile."
- :group 'flymake
- :type '(repeat (string)))
-
(defvar flymake-find-buildfile-cache (flymake-makehash 'equal))
(defun flymake-get-buildfile-from-cache (dir-name)
@@ -346,19 +341,15 @@ Return nil if we cannot, non-nil if we can."
Buildfile includes Makefile, build.xml etc.
Return its file name if found, or nil if not found."
(or (flymake-get-buildfile-from-cache source-dir-name)
- (let* ((dirs flymake-buildfile-dirs)
- (buildfile-dir nil)
- (found nil))
- (while (and (not found) dirs)
- (setq buildfile-dir (concat source-dir-name (car dirs)))
- (when (file-exists-p (expand-file-name buildfile-name buildfile-dir))
- (setq found t))
- (setq dirs (cdr dirs)))
- (if found
+ (let* ((file (locate-dominating-file
+ source-dir-name
+ (concat "\\`" (regexp-quote buildfile-name) "\\'"))))
+ (if file
(progn
- (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name)
- (flymake-add-buildfile-to-cache source-dir-name buildfile-dir)
- buildfile-dir)
+ (flymake-log 3 "found buildfile at %s" file)
+ (setq file (file-name-directory file))
+ (flymake-add-buildfile-to-cache source-dir-name file)
+ file)
(progn
(flymake-log 3 "buildfile for %s not found" source-dir-name)
nil)))))
@@ -1277,10 +1268,9 @@ For the format of LINE-ERR-INFO, see `flymake-ler-make-ler'."
(defun flymake-goto-file-and-line (file line)
"Try to get buffer for FILE and goto line LINE in it."
(if (not (file-exists-p file))
- (flymake-log 1 "file %s does not exists" file)
- (progn
- (find-file file)
- (goto-line line))))
+ (flymake-log 1 "File %s does not exist" file)
+ (find-file file)
+ (goto-line line)))
;; flymake minor mode declarations
(defvar flymake-mode-line nil)
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index f58318c2a39..1954319269d 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -1,7 +1,8 @@
;;; fortran.el --- Fortran mode for GNU Emacs
;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
-;; 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; 2002, 2003, 2004, 2005, 2006, 2007
+;; Free Software Foundation, Inc.
;; Author: Michael D. Prange <prange@erl.mit.edu>
;; Maintainer: Glenn Morris <rgm@gnu.org>
@@ -55,11 +56,11 @@
;; silence compiler
(defvar dabbrev-case-fold-search)
-(defvar font-lock-syntactic-keywords)
(defvar gud-find-expr-function)
(defvar imenu-case-fold-search)
(defvar imenu-syntax-alist)
-
+(defvar comment-region-function)
+(defvar uncomment-region-function)
(defgroup fortran nil
"Major mode for editing fixed format Fortran code."
@@ -78,9 +79,8 @@
:group 'fortran)
-;;;###autoload
(defcustom fortran-tab-mode-default nil
- "*Default tabbing/carriage control style for empty files in Fortran mode.
+ "Default tabbing/carriage control style for empty files in Fortran mode.
A non-nil value specifies tab-digit style of continuation control.
A value of nil specifies that continuation lines are marked
with a character in column 6."
@@ -88,38 +88,47 @@ with a character in column 6."
:group 'fortran-indent)
(put 'fortran-tab-mode-default 'safe-local-variable 'booleanp)
-(defcustom fortran-tab-mode-string "/t"
- "*String to appear in mode line in TAB format buffers."
+;; TODO add more detail of what tab mode is to doc string.
+(defcustom fortran-tab-mode-string
+ (propertize "/t" 'help-echo "This buffer is in Fortran TAB mode"
+ 'mouse-face 'mode-line-highlight
+ 'local-map
+ (make-mode-line-mouse-map 'mouse-1
+ (lambda ()
+ (interactive)
+ (describe-variable
+ 'fortran-tab-mode-string))))
+ "String to appear in mode line in TAB format buffers."
:type 'string
:group 'fortran-indent)
-(put 'fortran-tab-mode-string 'safe-local-variable 'stringp)
+(put 'fortran-tab-mode-string 'risky-local-variable t)
(defcustom fortran-do-indent 3
- "*Extra indentation applied to DO blocks."
+ "Extra indentation applied to DO blocks."
:type 'integer
:group 'fortran-indent)
(put 'fortran-do-indent 'safe-local-variable 'integerp)
(defcustom fortran-if-indent 3
- "*Extra indentation applied to IF, SELECT CASE and WHERE blocks."
+ "Extra indentation applied to IF, SELECT CASE and WHERE blocks."
:type 'integer
:group 'fortran-indent)
(put 'fortran-if-indent 'safe-local-variable 'integerp)
(defcustom fortran-structure-indent 3
- "*Extra indentation applied to STRUCTURE, UNION, MAP and INTERFACE blocks."
+ "Extra indentation applied to STRUCTURE, UNION, MAP and INTERFACE blocks."
:type 'integer
:group 'fortran-indent)
(put 'fortran-structure-indent 'safe-local-variable 'integerp)
(defcustom fortran-continuation-indent 5
- "*Extra indentation applied to continuation lines."
+ "Extra indentation applied to continuation lines."
:type 'integer
:group 'fortran-indent)
(put 'fortran-continuation-indent 'safe-local-variable 'integerp)
(defcustom fortran-comment-indent-style 'fixed
- "*How to indent comments.
+ "How to indent comments.
nil forces comment lines not to be touched;
`fixed' indents to `fortran-comment-line-extra-indent' columns beyond
`fortran-minimum-statement-indent-fixed' (if `indent-tabs-mode' nil), or
@@ -132,14 +141,14 @@ nil forces comment lines not to be touched;
(lambda (value) (memq value '(nil fixed relative))))
(defcustom fortran-comment-line-extra-indent 0
- "*Amount of extra indentation for text within full-line comments."
+ "Amount of extra indentation for text within full-line comments."
:type 'integer
:group 'fortran-indent
:group 'fortran-comment)
(put 'fortran-comment-line-extra-indent 'safe-local-variable 'integerp)
(defcustom fortran-comment-line-start "C"
- "*Delimiter inserted to start new full-line comment.
+ "Delimiter inserted to start new full-line comment.
You might want to change this to \"*\", for instance."
:version "21.1"
:type 'string
@@ -150,7 +159,7 @@ You might want to change this to \"*\", for instance."
;; filling and doesn't seem to be necessary.
(defcustom fortran-comment-line-start-skip
"^[CcDd*!]\\(\\([^ \t\n]\\)\\2+\\)?[ \t]*"
- "*Regexp to match the start of a full-line comment."
+ "Regexp to match the start of a full-line comment."
:version "21.1"
:type 'regexp
:group 'fortran-comment)
@@ -158,7 +167,7 @@ You might want to change this to \"*\", for instance."
(defcustom fortran-directive-re
"^[ \t]*#.*"
- "*Regexp to match a directive line.
+ "Regexp to match a directive line.
The matching text will be fontified with `font-lock-keyword-face'.
The matching line will be given zero indentation."
:version "22.1"
@@ -167,13 +176,13 @@ The matching line will be given zero indentation."
(put 'fortran-directive-re 'safe-local-variable 'stringp)
(defcustom fortran-minimum-statement-indent-fixed 6
- "*Minimum statement indentation for fixed format continuation style."
+ "Minimum statement indentation for fixed format continuation style."
:type 'integer
:group 'fortran-indent)
(put 'fortran-minimum-statement-indent-fixed 'safe-local-variable 'integerp)
(defcustom fortran-minimum-statement-indent-tab (max tab-width 6)
- "*Minimum statement indentation for TAB format continuation style."
+ "Minimum statement indentation for TAB format continuation style."
:type 'integer
:group 'fortran-indent)
(put 'fortran-minimum-statement-indent-tab 'safe-local-variable 'integerp)
@@ -182,7 +191,7 @@ The matching line will be given zero indentation."
;; of length one rather than a single character.
;; The code in this file accepts either format for compatibility.
(defcustom fortran-comment-indent-char " "
- "*Single-character string inserted for Fortran comment indentation.
+ "Single-character string inserted for Fortran comment indentation.
Normally a space."
:type 'string
:group 'fortran-comment)
@@ -192,27 +201,27 @@ Normally a space."
(= (length value) 1)))))
(defcustom fortran-line-number-indent 1
- "*Maximum indentation for Fortran line numbers.
+ "Maximum indentation for Fortran line numbers.
5 means right-justify them within their five-column field."
:type 'integer
:group 'fortran-indent)
(put 'fortran-line-number-indent 'safe-local-variable 'integerp)
(defcustom fortran-check-all-num-for-matching-do nil
- "*Non-nil causes all numbered lines to be treated as possible DO loop ends."
+ "Non-nil causes all numbered lines to be treated as possible DO loop ends."
:type 'boolean
:group 'fortran)
(put 'fortran-check-all-num-for-matching-do 'safe-local-variable 'booleanp)
(defcustom fortran-blink-matching-if nil
- "*Non-nil causes \\[fortran-indent-line] on ENDIF to blink on matching IF.
+ "Non-nil causes \\[fortran-indent-line] on ENDIF to blink on matching IF.
Also, from an ENDDO statement blink on matching DO [WHILE] statement."
:type 'boolean
:group 'fortran)
(put 'fortran-blink-matching-if 'safe-local-variable 'booleanp)
(defcustom fortran-continuation-string "$"
- "*Single-character string used for Fortran continuation lines.
+ "Single-character string used for Fortran continuation lines.
In fixed format continuation style, this character is inserted in
column 6 by \\[fortran-split-line] to begin a continuation line.
Also, if \\[fortran-indent-line] finds this at the beginning of a
@@ -225,18 +234,19 @@ appropriate style. Normally $."
(= (length value) 1))))
(defcustom fortran-comment-region "c$$$"
- "*String inserted by \\[fortran-comment-region] at start of each \
+ "String inserted by \\[fortran-comment-region] at start of each \
line in region."
:type 'string
:group 'fortran-comment)
(put 'fortran-comment-region 'safe-local-variable 'stringp)
(defcustom fortran-electric-line-number t
- "*Non-nil causes line numbers to be moved to the correct column as typed."
+ "Non-nil causes line numbers to be moved to the correct column as typed."
:type 'boolean
:group 'fortran)
(put 'fortran-electric-line-number 'safe-local-variable 'booleanp)
+;; TODO use fortran-line-length, somehow.
(defcustom fortran-column-ruler-fixed
"0 4 6 10 20 30 40 5\
0 60 70\n\
@@ -249,6 +259,7 @@ See the variable `fortran-column-ruler-tab' for TAB format mode."
:group 'fortran)
(put 'fortran-column-ruler-fixed 'safe-local-variable 'stringp)
+;; TODO use fortran-line-length, somehow.
(defcustom fortran-column-ruler-tab
"0 810 20 30 40 5\
0 60 70\n\
@@ -268,12 +279,39 @@ See the variable `fortran-column-ruler-fixed' for fixed format mode."
(put 'fortran-analyze-depth 'safe-local-variable 'integerp)
(defcustom fortran-break-before-delimiters t
- "*Non-nil causes filling to break lines before delimiters.
+ "Non-nil causes filling to break lines before delimiters.
Delimiters are characters matching the regexp `fortran-break-delimiters-re'."
:type 'boolean
:group 'fortran)
(put 'fortran-break-before-delimiters 'safe-local-variable 'booleanp)
+;; TODO 0 as no-limit, as per g77.
+(defcustom fortran-line-length 72
+ "Maximum number of characters in a line of fixed-form Fortran code.
+Characters beyond this point are treated as comments. Setting
+this variable directly (after fortran mode is loaded) does not
+take effect. Use either \\[customize] (which affects all Fortran
+buffers and the default) or the function
+`fortran-line-length' (which can also operate on just the current
+buffer). This corresponds to the g77 compiler option
+`-ffixed-line-length-N'."
+ :type 'integer
+ :initialize 'custom-initialize-default
+ :set (lambda (symbol value)
+ ;; Do all fortran buffers, and the default.
+ (fortran-line-length value t))
+ :version "23.1"
+ :group 'fortran)
+
+(put 'fortran-line-length 'safe-local-variable 'integerp)
+(make-variable-buffer-local 'fortran-line-length)
+
+(defcustom fortran-mode-hook nil
+ "Hook run when entering Fortran mode."
+ :type 'hook
+ :group 'fortran)
+
+
(defconst fortran-break-delimiters-re "[-+*/><=, \t]"
"Regexp matching delimiter characters at which lines may be broken.
There are certain tokens comprised entirely of characters
@@ -289,22 +327,16 @@ characters matching the regexp `fortran-break-delimiters-re' that should
not be split by filling. Each element is assumed to be two
characters long.")
-(defcustom fortran-mode-hook nil
- "Hook run when entering Fortran mode."
- :type 'hook
- :group 'fortran)
-
-
-(defvar fortran-if-start-re "\\(\\(\\sw\\|\\s_\\)+:[ \t]*\\)?if[ \t]*("
+(defconst fortran-if-start-re "\\(\\(\\sw\\|\\s_\\)+:[ \t]*\\)?if[ \t]*("
"Regexp matching the start of an IF statement.")
-(defvar fortran-end-prog-re1
+(defconst fortran-end-prog-re1
"end\
\\([ \t]*\\(program\\|subroutine\\|function\\|block[ \t]*data\\)\\>\
\\([ \t]*\\(\\sw\\|\\s_\\)+\\)?\\)?"
"Regexp possibly matching the end of a subprogram.")
-(defvar fortran-end-prog-re
+(defconst fortran-end-prog-re
(concat "^[ \t0-9]*" fortran-end-prog-re1)
"Regexp possibly matching the end of a subprogram, from the line start.
See also `fortran-end-prog-re1'.")
@@ -432,11 +464,13 @@ Consists of level 3 plus all other intrinsics not already highlighted.")
;; (We can do so for F90-style). Therefore an unmatched quote in a
;; standard comment will throw fontification off on the wrong track.
;; So we do syntactic fontification with regexps.
-(defvar fortran-font-lock-syntactic-keywords
- '(("^[cd\\*]" 0 (11))
- ("^[^cd\\*\t\n].\\{71\\}\\([^\n]+\\)" 1 (11)))
- "`font-lock-syntactic-keywords' for Fortran.
-These get fixed-format comments fontified.")
+(defun fortran-font-lock-syntactic-keywords ()
+ "Return a value for `font-lock-syntactic-keywords' in Fortran mode.
+This varies according to the value of `fortran-line-length'.
+This is used to fontify fixed-format Fortran comments."
+ `(("^[cd\\*]" 0 (11))
+ (,(format "^[^cd\\*\t\n].\\{%d\\}\\([^\n]+\\)" (1- fortran-line-length))
+ 1 (11))))
(defvar fortran-font-lock-keywords fortran-font-lock-keywords-1
"Default expressions to highlight in Fortran mode.")
@@ -520,7 +554,7 @@ tries to strike a compromise between complexity and flexibility.
Used in the Fortran entry in `hs-special-modes-alist'.")
(add-to-list 'hs-special-modes-alist
- `(fortran-mode ,fortran-start-block-re ,fortran-end-block-re
+ `(fortran-mode ,fortran-start-block-re ,fortran-end-block-re
"^[cC*!]" fortran-end-of-block nil))
@@ -560,7 +594,8 @@ Used in the Fortran entry in `hs-special-modes-alist'.")
(let ((map (make-sparse-keymap)))
(define-key map ";" 'fortran-abbrev-start)
(define-key map "\C-c;" 'fortran-comment-region)
- (define-key map "\M-;" 'fortran-indent-comment)
+ ;; The default comment-dwim does at least as much as this.
+;;; (define-key map "\M-;" 'fortran-indent-comment)
(define-key map "\M-\n" 'fortran-split-line)
(define-key map "\M-\C-n" 'fortran-end-of-block)
(define-key map "\M-\C-p" 'fortran-beginning-of-block)
@@ -612,6 +647,8 @@ Used in the Fortran entry in `hs-special-modes-alist'.")
["Widen" widen t]
"--"
["Temporary column ruler" fortran-column-ruler t]
+ ;; May not be '72', depending on fortran-line-length, but this
+ ;; seems ok for a menu item.
["72-column window" fortran-window-create t]
["Full Width Window"
(enlarge-window-horizontally (- (frame-width) (window-width)))
@@ -642,7 +679,7 @@ Used in the Fortran entry in `hs-special-modes-alist'.")
(let (abbrevs-changed)
;; Use the 6th arg (SYSTEM-FLAG) of define-abbrev if possible.
;; Only use `apply' to quieten the byte-compiler.
- (mapcar
+ (mapc
(function (lambda (element)
(condition-case nil
(apply 'define-abbrev fortran-mode-abbrev-table
@@ -748,7 +785,7 @@ Variables controlling indentation style and extra features:
`fortran-minimum-statement-indent-tab' (TAB format),
depending on the continuation format in use.
relative indent to `fortran-comment-line-extra-indent' beyond the
- indentation for a line of code.
+ indentation for a line of code.
(default 'fixed)
`fortran-comment-indent-char'
Single-character string to be inserted instead of space for
@@ -806,11 +843,16 @@ with no args, if that value is non-nil."
;; (concat "\\(\\)\\(![ \t]*\\|" fortran-comment-line-start-skip "\\)")
"\\(\\)\\(?:^[CcDd*]\\|!\\)\\(?:\\([^ \t\n]\\)\\2+\\)?[ \t]*")
(set (make-local-variable 'comment-indent-function) 'fortran-comment-indent)
+ (set (make-local-variable 'comment-region-function) 'fortran-comment-region)
+ (set (make-local-variable 'uncomment-region-function)
+ 'fortran-uncomment-region)
+ (set (make-local-variable 'comment-insert-comment-function)
+ 'fortran-indent-comment)
(set (make-local-variable 'abbrev-all-caps) t)
(set (make-local-variable 'normal-auto-fill-function) 'fortran-auto-fill)
(set (make-local-variable 'indent-tabs-mode) (fortran-analyze-file-format))
(setq mode-line-process '(indent-tabs-mode fortran-tab-mode-string))
- (set (make-local-variable 'fill-column) 72)
+ (set (make-local-variable 'fill-column) fortran-line-length)
(set (make-local-variable 'fill-paragraph-function) 'fortran-fill-paragraph)
(set (make-local-variable 'font-lock-defaults)
'((fortran-font-lock-keywords
@@ -819,9 +861,9 @@ with no args, if that value is non-nil."
fortran-font-lock-keywords-3
fortran-font-lock-keywords-4)
nil t ((?/ . "$/") ("_$" . "w"))
- fortran-beginning-of-subprogram))
- (set (make-local-variable 'font-lock-syntactic-keywords)
- fortran-font-lock-syntactic-keywords)
+ fortran-beginning-of-subprogram
+ (font-lock-syntactic-keywords
+ . (fortran-font-lock-syntactic-keywords))))
(set (make-local-variable 'imenu-case-fold-search) t)
(set (make-local-variable 'imenu-generic-expression)
fortran-imenu-generic-expression)
@@ -834,9 +876,40 @@ with no args, if that value is non-nil."
#'fortran-current-defun)
(set (make-local-variable 'dabbrev-case-fold-search) 'case-fold-search)
(set (make-local-variable 'gud-find-expr-function) 'fortran-gud-find-expr)
+ (add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t)
(run-mode-hooks 'fortran-mode-hook))
+(defun fortran-line-length (nchars &optional global)
+ "Set the length of fixed-form Fortran lines to NCHARS.
+This normally only affects the current buffer, which must be in
+Fortran mode. If the optional argument GLOBAL is non-nil, it
+affects all Fortran buffers, and also the default."
+ (interactive "p")
+ (let (new)
+ (mapc (lambda (buff)
+ (with-current-buffer buff
+ (when (eq major-mode 'fortran-mode)
+ (setq fortran-line-length nchars
+ fill-column fortran-line-length
+ new (fortran-font-lock-syntactic-keywords))
+ ;; Refontify only if necessary.
+ (unless (equal new font-lock-syntactic-keywords)
+ (setq font-lock-syntactic-keywords
+ (fortran-font-lock-syntactic-keywords))
+ (if font-lock-mode (font-lock-mode 1))))))
+ (if global
+ (buffer-list)
+ (list (current-buffer))))
+ (if global
+ (setq-default fortran-line-length nchars))))
+
+(defun fortran-hack-local-variables ()
+ "Fortran mode adds this to `hack-local-variables-hook'."
+ (fortran-line-length fortran-line-length))
+
+(declare-function gud-find-c-expr "gud.el" nil)
+
(defun fortran-gud-find-expr ()
;; Consider \n as punctuation (end of expression).
(with-syntax-table fortran-gud-syntax-table
@@ -862,33 +935,33 @@ or on a new line inserted before this line if this line is not blank."
(beginning-of-line)
;; Recognize existing comments of either kind.
(cond ((fortran-find-comment-start-skip 'all)
- (goto-char (match-beginning 0))
- (if (bolp)
- (fortran-indent-line)
- (unless (= (current-column) (fortran-comment-indent))
+ (goto-char (match-beginning 0))
+ (if (bolp)
+ (fortran-indent-line)
+ (unless (= (current-column) (fortran-comment-indent))
(delete-horizontal-space)
(indent-to (fortran-comment-indent)))))
- ;; No existing comment.
- ;; If side-by-side comments are defined, insert one,
- ;; unless line is now blank.
- ((and comment-start (not (looking-at "[ \t]*$"))
- (string-match comment-start-skip (concat " " comment-start)))
- (end-of-line)
- (delete-horizontal-space)
- (indent-to (fortran-comment-indent))
- (insert comment-start))
- ;; Else insert separate-line comment, making a new line if nec.
- (t
- (if (looking-at "^[ \t]*$")
- (delete-horizontal-space)
- (beginning-of-line)
- (insert ?\n)
- (forward-char -1))
- (insert fortran-comment-line-start)
- (insert-char (if (stringp fortran-comment-indent-char)
- (aref fortran-comment-indent-char 0)
- fortran-comment-indent-char)
- (- (fortran-calculate-indent) (current-column))))))
+ ;; No existing comment.
+ ;; If side-by-side comments are defined, insert one,
+ ;; unless line is now blank.
+ ((and comment-start (not (looking-at "[ \t]*$"))
+ (string-match comment-start-skip (concat " " comment-start)))
+ (end-of-line)
+ (delete-horizontal-space)
+ (indent-to (fortran-comment-indent))
+ (insert comment-start))
+ ;; Else insert separate-line comment, making a new line if nec.
+ (t
+ (if (looking-at "^[ \t]*$")
+ (delete-horizontal-space)
+ (beginning-of-line)
+ (insert ?\n)
+ (forward-char -1))
+ (insert fortran-comment-line-start)
+ (insert-char (if (stringp fortran-comment-indent-char)
+ (aref fortran-comment-indent-char 0)
+ fortran-comment-indent-char)
+ (- (fortran-calculate-indent) (current-column))))))
(defun fortran-comment-region (beg-region end-region arg)
"Comment every line in the region.
@@ -898,7 +971,7 @@ BEG-REGION and END-REGION specify the region boundaries.
With non-nil ARG, uncomments the region."
(interactive "*r\nP")
(let ((end-region-mark (copy-marker end-region))
- (save-point (point-marker)))
+ (save-point (point-marker)))
(goto-char beg-region)
(beginning-of-line)
(if arg
@@ -917,6 +990,11 @@ With non-nil ARG, uncomments the region."
(set-marker end-region-mark nil)
(set-marker save-point nil)))
+;; uncomment-region calls this with 3 args.
+(defun fortran-uncomment-region (start end &optional ignored)
+ "Uncomment every line in the region."
+ (fortran-comment-region start end t))
+
(defun fortran-abbrev-start ()
"Typing ;\\[help-command] or ;? lists all the Fortran abbrevs.
@@ -931,7 +1009,7 @@ Any other key combination is executed normally."
;; Insert char if not equal to `?', or if abbrev-mode is off.
(if (and abbrev-mode (or (eq char ??) (eq char help-char)
(memq event help-event-list)))
- (fortran-abbrev-help)
+ (fortran-abbrev-help)
(push event unread-command-events))))
(defun fortran-abbrev-help ()
@@ -964,44 +1042,44 @@ The next key typed is executed unless it is SPC."
(save-excursion
(beginning-of-line)
(if (eq (window-start (selected-window))
- (window-point (selected-window)))
- (line-beginning-position 2)
+ (window-point (selected-window)))
+ (line-beginning-position 2)
(point)))
nil "Type SPC or any command to erase ruler."))
(defun fortran-window-create ()
- "Make the window 72 columns wide.
+ "Make the window `fortran-line-length' (default 72) columns wide.
See also `fortran-window-create-momentarily'."
(interactive)
(let ((window-min-width 2))
(unless (window-full-width-p)
- (enlarge-window-horizontally (- (frame-width)
- (window-width) 1)))
+ (enlarge-window-horizontally (- (frame-width)
+ (window-width) 1)))
(let* ((window-edges (window-edges))
- (scroll-bar-width (- (nth 2 window-edges)
- (car window-edges)
- (window-width))))
- (split-window-horizontally (+ 72 scroll-bar-width)))
+ (scroll-bar-width (- (nth 2 window-edges)
+ (car window-edges)
+ (window-width))))
+ (split-window-horizontally (+ fortran-line-length scroll-bar-width)))
(other-window 1)
(switch-to-buffer " fortran-window-extra" t)
(select-window (previous-window))))
(defun fortran-window-create-momentarily (&optional arg)
- "Momentarily make the window 72 columns wide.
+ "Momentarily make the window `fortran-line-length' (default 72) columns wide.
Optional ARG non-nil and non-unity disables the momentary feature.
See also `fortran-window-create'."
(interactive "p")
(if (or (not arg)
- (= arg 1))
+ (= arg 1))
(save-window-excursion
- (progn
- (condition-case nil
- (fortran-window-create)
- (error (error "No room for Fortran window")))
- (message "Type SPC to continue editing.")
- (let ((char (read-event)))
- (or (equal char ?\s)
- (setq unread-command-events (list char))))))
+ (progn
+ (condition-case nil
+ (fortran-window-create)
+ (error (error "No room for Fortran window")))
+ (message "Type SPC to continue editing.")
+ (let ((char (read-event)))
+ (or (equal char ?\s)
+ (setq unread-command-events (list char))))))
(fortran-window-create)))
(defun fortran-split-line ()
@@ -1009,13 +1087,13 @@ See also `fortran-window-create'."
(interactive "*")
(delete-horizontal-space)
(if (save-excursion
- (let ((pos (point)))
- (beginning-of-line)
- (and (fortran-find-comment-start-skip 'all)
- (< (match-beginning 0) pos))))
+ (let ((pos (point)))
+ (beginning-of-line)
+ (and (fortran-find-comment-start-skip 'all)
+ (< (match-beginning 0) pos))))
(insert ?\n (match-string 0))
(if indent-tabs-mode
- (insert ?\n ?\t (fortran-numerical-continuation-char))
+ (insert ?\n ?\t (fortran-numerical-continuation-char))
(insert "\n " fortran-continuation-string))) ; space after \n important
(fortran-indent-line)) ; when cont string is C, c or *
@@ -1051,7 +1129,7 @@ plus one, otherwise return 1. Zero not allowed."
(save-excursion
(forward-line -1)
(if (looking-at "\t[1-9]")
- (+ ?1 (% (- (char-after (1+ (point))) ?0) 9))
+ (+ ?1 (% (- (char-after (1+ (point))) ?0) 9))
?1)))
(put 'fortran-electric-line-number 'delete-selection t)
@@ -1061,27 +1139,27 @@ Auto-indent does not happen if a numeric ARG is used."
(interactive "*P")
(if (or arg (not fortran-electric-line-number))
(if arg
- (self-insert-command (prefix-numeric-value arg))
- (self-insert-command 1))
+ (self-insert-command (prefix-numeric-value arg))
+ (self-insert-command 1))
(if (or (and (= 5 (current-column))
- (save-excursion
- (beginning-of-line)
+ (save-excursion
+ (beginning-of-line)
;; In col 5 with only spaces to the left.
- (looking-at " \\{5\\}")))
- (and (= (if indent-tabs-mode
- fortran-minimum-statement-indent-tab
- fortran-minimum-statement-indent-fixed) (current-column))
+ (looking-at " \\{5\\}")))
+ (and (= (if indent-tabs-mode
+ fortran-minimum-statement-indent-tab
+ fortran-minimum-statement-indent-fixed) (current-column))
;; In col 8 with a single tab to the left.
- (eq ?\t (char-after (line-beginning-position)))
- (not (or (eq last-command 'fortran-indent-line)
- (eq last-command
- 'fortran-indent-new-line))))
- (save-excursion
- (re-search-backward "[^ \t0-9]"
- (line-beginning-position)
- t)) ; not a line number
- (looking-at "[0-9]")) ; within a line number
- (self-insert-command (prefix-numeric-value arg))
+ (eq ?\t (char-after (line-beginning-position)))
+ (not (or (eq last-command 'fortran-indent-line)
+ (eq last-command
+ 'fortran-indent-new-line))))
+ (save-excursion
+ (re-search-backward "[^ \t0-9]"
+ (line-beginning-position)
+ t)) ; not a line number
+ (looking-at "[0-9]")) ; within a line number
+ (self-insert-command (prefix-numeric-value arg))
(skip-chars-backward " \t")
(insert last-command-char)
(fortran-indent-line))))
@@ -1093,9 +1171,10 @@ Auto-indent does not happen if a numeric ARG is used."
;; match of whitespace, avoiding possible column 73+ stuff.
(save-match-data
(string-match "^\\s-*\\(\\'\\|\\s<\\)"
- (buffer-substring (match-end 0)
- (min (line-end-position)
- (+ 72 (line-beginning-position)))))))
+ (buffer-substring (match-end 0)
+ (min (line-end-position)
+ (+ fortran-line-length
+ (line-beginning-position)))))))
;; Note that you can't just check backwards for `subroutine' &c in
;; case of un-marked main programs not at the start of the file.
@@ -1106,28 +1185,28 @@ Auto-indent does not happen if a numeric ARG is used."
(let ((case-fold-search t))
(beginning-of-line -1)
(if (catch 'ok
- (while (re-search-backward fortran-end-prog-re nil 'move)
- (if (fortran-check-end-prog-re)
- (throw 'ok t))))
- (forward-line)))))
+ (while (re-search-backward fortran-end-prog-re nil 'move)
+ (if (fortran-check-end-prog-re)
+ (throw 'ok t))))
+ (forward-line)))))
(defun fortran-end-of-subprogram ()
"Move point to the end of the current Fortran subprogram."
(interactive)
(save-match-data
(let ((case-fold-search t))
- (if (save-excursion ; on END
- (beginning-of-line)
- (and (looking-at fortran-end-prog-re)
- (fortran-check-end-prog-re)))
- (forward-line)
- (beginning-of-line 2)
- (catch 'ok
- (while (re-search-forward fortran-end-prog-re nil 'move)
- (if (fortran-check-end-prog-re)
- (throw 'ok t))))
- (goto-char (match-beginning 0))
- (forward-line)))))
+ (if (save-excursion ; on END
+ (beginning-of-line)
+ (and (looking-at fortran-end-prog-re)
+ (fortran-check-end-prog-re)))
+ (forward-line)
+ (beginning-of-line 2)
+ (catch 'ok
+ (while (re-search-forward fortran-end-prog-re nil 'move)
+ (if (fortran-check-end-prog-re)
+ (throw 'ok t))))
+ (goto-char (match-beginning 0))
+ (forward-line)))))
(defun fortran-previous-statement ()
"Move point to beginning of the previous Fortran statement.
@@ -1138,28 +1217,28 @@ Directive lines are treated as comments."
(let (not-first-statement continue-test)
(beginning-of-line)
(setq continue-test
- (and
- (not (looking-at fortran-comment-line-start-skip))
+ (and
+ (not (looking-at fortran-comment-line-start-skip))
(not (looking-at fortran-directive-re))
- (or (looking-at
- (concat "[ \t]*"
- (regexp-quote fortran-continuation-string)))
- (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))))
+ (or (looking-at
+ (concat "[ \t]*"
+ (regexp-quote fortran-continuation-string)))
+ (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))))
(while (and (setq not-first-statement (zerop (forward-line -1)))
- (or (looking-at fortran-comment-line-start-skip)
+ (or (looking-at fortran-comment-line-start-skip)
(looking-at fortran-directive-re)
(looking-at
(concat "[ \t]*"
(regexp-quote fortran-continuation-string)))
- (looking-at "[ \t]*$\\| \\{5\\}[^ 0\n]\\|\t[1-9]")
- (looking-at (concat "[ \t]*" comment-start-skip)))))
+ (looking-at "[ \t]*$\\| \\{5\\}[^ 0\n]\\|\t[1-9]")
+ (looking-at (concat "[ \t]*" comment-start-skip)))))
(cond ((and continue-test
- (not not-first-statement))
- (message "Incomplete continuation statement."))
- (continue-test
- (fortran-previous-statement))
- ((not not-first-statement)
- 'first-statement))))
+ (not not-first-statement))
+ (message "Incomplete continuation statement."))
+ (continue-test
+ (fortran-previous-statement))
+ ((not not-first-statement)
+ 'first-statement))))
(defun fortran-next-statement ()
"Move point to beginning of the next Fortran statement.
@@ -1170,14 +1249,14 @@ Directive lines are treated as comments."
(let (not-last-statement)
(beginning-of-line)
(while (and (setq not-last-statement
- (and (zerop (forward-line 1))
- (not (eobp))))
- (or (looking-at fortran-comment-line-start-skip)
+ (and (zerop (forward-line 1))
+ (not (eobp))))
+ (or (looking-at fortran-comment-line-start-skip)
(looking-at fortran-directive-re)
- (looking-at "[ \t]*$\\| [^ 0\n]\\|\t[1-9]")
- (looking-at (concat "[ \t]*" comment-start-skip)))))
+ (looking-at "[ \t]*$\\| [^ 0\n]\\|\t[1-9]")
+ (looking-at (concat "[ \t]*" comment-start-skip)))))
(if (not not-last-statement)
- 'last-statement)))
+ 'last-statement)))
(defun fortran-looking-at-if-then ()
"Return non-nil if at the start of a line with an IF ... THEN statement."
@@ -1262,10 +1341,10 @@ pushes mark before moving point."
"From a line matching REGEX, blink matching KEYWORD statement line.
Use function FIND-BEGIN to match it."
(let ((top-of-window (window-start))
- (end-point (point))
- (case-fold-search t)
- matching
- message)
+ (end-point (point))
+ (case-fold-search t)
+ matching
+ message)
(when (save-excursion
(beginning-of-line)
(skip-chars-forward " \t0-9")
@@ -1289,7 +1368,7 @@ Use function FIND-BEGIN to match it."
(defun fortran-blink-matching-if ()
"From an ENDIF or ELSE statement, blink the matching IF statement."
(fortran-blink-match "e\\(nd[ \t]*if\\|lse\\([ \t]*if\\)?\\)\\b"
- "if" #'fortran-beginning-if))
+ "if" #'fortran-beginning-if))
(defun fortran-blink-matching-do ()
"From an ENDDO statement, blink the matching DO or DO WHILE statement."
@@ -1312,27 +1391,27 @@ The marks are pushed."
Return point or nil."
(let ((case-fold-search t))
(if (save-excursion (beginning-of-line)
- (skip-chars-forward " \t0-9")
- (looking-at "end[ \t]*do\\b"))
- ;; Sitting on one.
- (match-beginning 0)
+ (skip-chars-forward " \t0-9")
+ (looking-at "end[ \t]*do\\b"))
+ ;; Sitting on one.
+ (match-beginning 0)
;; Search for one.
(save-excursion
- (let ((count 1))
- (while (and (not (zerop count))
- (not (eq (fortran-next-statement) 'last-statement))
- ;; Keep local to subprogram.
- (not (and (looking-at fortran-end-prog-re)
- (fortran-check-end-prog-re))))
- (skip-chars-forward " \t0-9")
- (cond ((looking-at "end[ \t]*do\\b")
- (setq count (1- count)))
- ((looking-at
- "\\(\\(\\sw\\|\\s_\\)+:[ \t]*\\)?do[ \t]+[^0-9]")
- (setq count (1+ count)))))
- (and (zerop count)
- ;; All pairs accounted for.
- (point)))))))
+ (let ((count 1))
+ (while (and (not (zerop count))
+ (not (eq (fortran-next-statement) 'last-statement))
+ ;; Keep local to subprogram.
+ (not (and (looking-at fortran-end-prog-re)
+ (fortran-check-end-prog-re))))
+ (skip-chars-forward " \t0-9")
+ (cond ((looking-at "end[ \t]*do\\b")
+ (setq count (1- count)))
+ ((looking-at
+ "\\(\\(\\sw\\|\\s_\\)+:[ \t]*\\)?do[ \t]+[^0-9]")
+ (setq count (1+ count)))))
+ (and (zerop count)
+ ;; All pairs accounted for.
+ (point)))))))
(defun fortran-beginning-do ()
"Search backwards for first unmatched DO [WHILE].
@@ -1340,28 +1419,28 @@ Return point or nil. Ignores labelled DO loops (ie DO 10 ... 10 CONTINUE)."
(let ((case-fold-search t)
(dostart-re "\\(\\(\\sw\\|\\s_\\)+:[ \t]*\\)?do[ \t]+[^0-9]"))
(if (save-excursion
- (beginning-of-line)
- (skip-chars-forward " \t0-9")
- (looking-at dostart-re))
- ;; Sitting on one.
- (match-beginning 0)
+ (beginning-of-line)
+ (skip-chars-forward " \t0-9")
+ (looking-at dostart-re))
+ ;; Sitting on one.
+ (match-beginning 0)
;; Search for one.
(save-excursion
- (let ((count 1))
- (while (and (not (zerop count))
- (not (eq (fortran-previous-statement) 'first-statement))
- ;; Keep local to subprogram.
- (not (and (looking-at fortran-end-prog-re)
- (fortran-check-end-prog-re))))
- (skip-chars-forward " \t0-9")
- (cond ((looking-at dostart-re)
- (setq count (1- count)))
+ (let ((count 1))
+ (while (and (not (zerop count))
+ (not (eq (fortran-previous-statement) 'first-statement))
+ ;; Keep local to subprogram.
+ (not (and (looking-at fortran-end-prog-re)
+ (fortran-check-end-prog-re))))
+ (skip-chars-forward " \t0-9")
+ (cond ((looking-at dostart-re)
+ (setq count (1- count)))
;; Note labelled loop ends not considered.
- ((looking-at "end[ \t]*do\\b")
- (setq count (1+ count)))))
- (and (zerop count)
- ;; All pairs accounted for.
- (point)))))))
+ ((looking-at "end[ \t]*do\\b")
+ (setq count (1+ count)))))
+ (and (zerop count)
+ ;; All pairs accounted for.
+ (point)))))))
(defun fortran-mark-if ()
"Put mark at end of Fortran IF-ENDIF construct, point at beginning.
@@ -1381,103 +1460,103 @@ The marks are pushed."
Return point or nil."
(let ((case-fold-search t))
(if (save-excursion (beginning-of-line)
- (skip-chars-forward " \t0-9")
- (looking-at "end[ \t]*if\\b"))
- ;; Sitting on one.
- (match-beginning 0)
+ (skip-chars-forward " \t0-9")
+ (looking-at "end[ \t]*if\\b"))
+ ;; Sitting on one.
+ (match-beginning 0)
;; Search for one. The point has been already been moved to first
;; letter on line but this should not cause troubles.
(save-excursion
- (let ((count 1))
- (while (and (not (zerop count))
- (not (eq (fortran-next-statement) 'last-statement))
- ;; Keep local to subprogram.
- (not (and (looking-at fortran-end-prog-re)
- (fortran-check-end-prog-re))))
- (skip-chars-forward " \t0-9")
- (cond ((looking-at "end[ \t]*if\\b")
- (setq count (1- count)))
- ((looking-at fortran-if-start-re)
- (save-excursion
- (if (or
- (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t(=a-z0-9]")
- (let (then-test) ; multi-line if-then
- (while
- (and
- (zerop (forward-line 1))
- ;; Search forward for then.
- (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
- (not
- (setq then-test
- (looking-at
- ".*then\\b[ \t]*[^ \t(=a-z0-9]")))))
- then-test))
- (setq count (1+ count)))))))
- (and (zerop count)
- ;; All pairs accounted for.
- (point)))))))
+ (let ((count 1))
+ (while (and (not (zerop count))
+ (not (eq (fortran-next-statement) 'last-statement))
+ ;; Keep local to subprogram.
+ (not (and (looking-at fortran-end-prog-re)
+ (fortran-check-end-prog-re))))
+ (skip-chars-forward " \t0-9")
+ (cond ((looking-at "end[ \t]*if\\b")
+ (setq count (1- count)))
+ ((looking-at fortran-if-start-re)
+ (save-excursion
+ (if (or
+ (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t(=a-z0-9]")
+ (let (then-test) ; multi-line if-then
+ (while
+ (and
+ (zerop (forward-line 1))
+ ;; Search forward for then.
+ (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
+ (not
+ (setq then-test
+ (looking-at
+ ".*then\\b[ \t]*[^ \t(=a-z0-9]")))))
+ then-test))
+ (setq count (1+ count)))))))
+ (and (zerop count)
+ ;; All pairs accounted for.
+ (point)))))))
(defun fortran-beginning-if ()
"Search backwards for first unmatched IF-THEN.
Return point or nil."
(let ((case-fold-search t))
(if (save-excursion
- ;; May be sitting on multi-line if-then statement, first
- ;; move to beginning of current statement. Note:
- ;; `fortran-previous-statement' moves to previous statement
- ;; *unless* current statement is first one. Only move
- ;; forward if not first-statement.
- (if (not (eq (fortran-previous-statement) 'first-statement))
- (fortran-next-statement))
- (skip-chars-forward " \t0-9")
- (and
- (looking-at fortran-if-start-re)
- (save-match-data
- (or (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t(=a-z0-9]")
- ;; Multi-line if-then.
- (let (then-test)
- (while
+ ;; May be sitting on multi-line if-then statement, first
+ ;; move to beginning of current statement. Note:
+ ;; `fortran-previous-statement' moves to previous statement
+ ;; *unless* current statement is first one. Only move
+ ;; forward if not first-statement.
+ (if (not (eq (fortran-previous-statement) 'first-statement))
+ (fortran-next-statement))
+ (skip-chars-forward " \t0-9")
+ (and
+ (looking-at fortran-if-start-re)
+ (save-match-data
+ (or (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t(=a-z0-9]")
+ ;; Multi-line if-then.
+ (let (then-test)
+ (while
(and (zerop (forward-line 1))
- ;; Search forward for then.
- (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
- (not
- (setq then-test
- (looking-at
- ".*then\\b[ \t]*[^ \t(=a-z0-9]")))))
- then-test)))))
- ;; Sitting on one.
- (match-beginning 0)
+ ;; Search forward for then.
+ (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
+ (not
+ (setq then-test
+ (looking-at
+ ".*then\\b[ \t]*[^ \t(=a-z0-9]")))))
+ then-test)))))
+ ;; Sitting on one.
+ (match-beginning 0)
;; Search for one.
(save-excursion
- (let ((count 1))
- (while (and (not (zerop count))
- (not (eq (fortran-previous-statement) 'first-statement))
- ;; Keep local to subprogram.
- (not (and (looking-at fortran-end-prog-re)
- (fortran-check-end-prog-re))))
- (skip-chars-forward " \t0-9")
- (cond ((looking-at fortran-if-start-re)
- (save-excursion
- (if (or
- (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t(=a-z0-9]")
- (let (then-test) ; multi-line if-then
- (while
- (and
- (zerop (forward-line 1))
- ;; Search forward for then.
- (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
- (not
- (setq then-test
- (looking-at
- (concat ".*then\\b[ \t]*"
- "[^ \t(=a-z0-9]"))))))
- then-test))
- (setq count (1- count)))))
- ((looking-at "end[ \t]*if\\b")
- (setq count (1+ count)))))
- (and (zerop count)
- ;; All pairs accounted for.
- (point)))))))
+ (let ((count 1))
+ (while (and (not (zerop count))
+ (not (eq (fortran-previous-statement) 'first-statement))
+ ;; Keep local to subprogram.
+ (not (and (looking-at fortran-end-prog-re)
+ (fortran-check-end-prog-re))))
+ (skip-chars-forward " \t0-9")
+ (cond ((looking-at fortran-if-start-re)
+ (save-excursion
+ (if (or
+ (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t(=a-z0-9]")
+ (let (then-test) ; multi-line if-then
+ (while
+ (and
+ (zerop (forward-line 1))
+ ;; Search forward for then.
+ (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
+ (not
+ (setq then-test
+ (looking-at
+ (concat ".*then\\b[ \t]*"
+ "[^ \t(=a-z0-9]"))))))
+ then-test))
+ (setq count (1- count)))))
+ ((looking-at "end[ \t]*if\\b")
+ (setq count (1+ count)))))
+ (and (zerop count)
+ ;; All pairs accounted for.
+ (point)))))))
(defun fortran-indent-line ()
@@ -1487,15 +1566,15 @@ Return point or nil."
(save-excursion
(beginning-of-line)
(if (or (not (= cfi (fortran-current-line-indentation)))
- (and (re-search-forward "^[ \t]*[0-9]+" (+ (point) 4) t)
- (not (fortran-line-number-indented-correctly-p))))
- (fortran-indent-to-column cfi)
- (beginning-of-line)
- (if (fortran-find-comment-start-skip)
- (fortran-indent-comment))))
+ (and (re-search-forward "^[ \t]*[0-9]+" (+ (point) 4) t)
+ (not (fortran-line-number-indented-correctly-p))))
+ (fortran-indent-to-column cfi)
+ (beginning-of-line)
+ (if (fortran-find-comment-start-skip)
+ (fortran-indent-comment))))
;; Never leave point in left margin.
(if (< (current-column) cfi)
- (move-to-column cfi))
+ (move-to-column cfi))
(and auto-fill-function
(> (save-excursion (end-of-line) (current-column))
fill-column)
@@ -1510,20 +1589,20 @@ Return point or nil."
"Function to use for `normal-auto-fill-function' in Fortran mode."
(if (> (current-column) (current-fill-column))
(let ((cfi (fortran-calculate-indent)))
- (save-excursion
- (beginning-of-line)
- (if (or (not (= cfi (fortran-current-line-indentation)))
- (and (re-search-forward "^[ \t]*[0-9]+"
- (+ (point) 4) t)
- (not (fortran-line-number-indented-correctly-p))))
- (fortran-indent-to-column cfi)
- (beginning-of-line)
- (if (fortran-find-comment-start-skip)
- (fortran-indent-comment))))
- (fortran-fill)
- ;; Never leave point in left margin.
- (if (< (current-column) cfi)
- (move-to-column cfi)))))
+ (save-excursion
+ (beginning-of-line)
+ (if (or (not (= cfi (fortran-current-line-indentation)))
+ (and (re-search-forward "^[ \t]*[0-9]+"
+ (+ (point) 4) t)
+ (not (fortran-line-number-indented-correctly-p))))
+ (fortran-indent-to-column cfi)
+ (beginning-of-line)
+ (if (fortran-find-comment-start-skip)
+ (fortran-indent-comment))))
+ (fortran-fill)
+ ;; Never leave point in left margin.
+ (if (< (current-column) cfi)
+ (move-to-column cfi)))))
;; Historically this was a separate function which advertised itself
;; as reindenting but only did so where `most likely to be necessary'.
@@ -1541,21 +1620,21 @@ Return point or nil."
(defun fortran-calculate-indent ()
"Calculates the Fortran indent column based on previous lines."
(let (icol first-statement (case-fold-search t)
- (fortran-minimum-statement-indent
- (if indent-tabs-mode
- fortran-minimum-statement-indent-tab
- fortran-minimum-statement-indent-fixed)))
+ (fortran-minimum-statement-indent
+ (if indent-tabs-mode
+ fortran-minimum-statement-indent-tab
+ fortran-minimum-statement-indent-fixed)))
(save-excursion
(setq first-statement (fortran-previous-statement))
(if first-statement
- (setq icol fortran-minimum-statement-indent)
+ (setq icol fortran-minimum-statement-indent)
(if (= (point) (point-min))
(setq icol fortran-minimum-statement-indent)
(setq icol (fortran-current-line-indentation)))
(skip-chars-forward " \t0-9")
(cond ((looking-at "\\(\\(\\sw\\|\\s_\\)+:[ \t]*\\)?if[ \t]*(")
(if (or (looking-at ".*)[ \t]*then\\b[ \t]*[^ \t_$(=a-z0-9]")
- (let (then-test) ; multi-line if-then
+ (let (then-test) ; multi-line if-then
(while (and (zerop (forward-line 1))
;; Search forward for then.
(looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]")
@@ -1591,52 +1670,52 @@ Return point or nil."
(beginning-of-line)
(cond ((looking-at "[ \t]*$"))
;; Check for directive before comment, so as not to indent.
- ((looking-at fortran-directive-re)
- (setq fortran-minimum-statement-indent 0 icol 0))
- ((looking-at fortran-comment-line-start-skip)
- (cond ((eq fortran-comment-indent-style 'relative)
- (setq icol (+ icol fortran-comment-line-extra-indent)))
- ((eq fortran-comment-indent-style 'fixed)
- (setq icol (+ fortran-minimum-statement-indent
- fortran-comment-line-extra-indent))))
- (setq fortran-minimum-statement-indent 0))
- ((or (looking-at (concat "[ \t]*"
- (regexp-quote
- fortran-continuation-string)))
- (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))
+ ((looking-at fortran-directive-re)
+ (setq fortran-minimum-statement-indent 0 icol 0))
+ ((looking-at fortran-comment-line-start-skip)
+ (cond ((eq fortran-comment-indent-style 'relative)
+ (setq icol (+ icol fortran-comment-line-extra-indent)))
+ ((eq fortran-comment-indent-style 'fixed)
+ (setq icol (+ fortran-minimum-statement-indent
+ fortran-comment-line-extra-indent))))
+ (setq fortran-minimum-statement-indent 0))
+ ((or (looking-at (concat "[ \t]*"
+ (regexp-quote
+ fortran-continuation-string)))
+ (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))
(skip-chars-forward " \t")
;; Do not introduce extra whitespace into a broken string.
(setq icol
(if (fortran-is-in-string-p (point))
6
(+ icol fortran-continuation-indent))))
- (first-statement)
- ((and fortran-check-all-num-for-matching-do
- (looking-at "[ \t]*[0-9]+")
- (fortran-check-for-matching-do))
- (setq icol (- icol fortran-do-indent)))
- (t
- (skip-chars-forward " \t0-9")
- (cond ((looking-at "end[ \t]*\\(if\\|select\\|where\\)\\b")
- (setq icol (- icol fortran-if-indent)))
- ((looking-at "else\\(if\\)?\\b")
- (setq icol (- icol fortran-if-indent)))
+ (first-statement)
+ ((and fortran-check-all-num-for-matching-do
+ (looking-at "[ \t]*[0-9]+")
+ (fortran-check-for-matching-do))
+ (setq icol (- icol fortran-do-indent)))
+ (t
+ (skip-chars-forward " \t0-9")
+ (cond ((looking-at "end[ \t]*\\(if\\|select\\|where\\)\\b")
+ (setq icol (- icol fortran-if-indent)))
+ ((looking-at "else\\(if\\)?\\b")
+ (setq icol (- icol fortran-if-indent)))
((looking-at "case[ \t]*\\((.*)\\|default\\>\\)")
- (setq icol (- icol fortran-if-indent)))
- ((looking-at "\\(otherwise\\|else[ \t]*where\\)\\b")
- (setq icol (- icol fortran-if-indent)))
- ((and (looking-at "continue\\b")
- (fortran-check-for-matching-do))
- (setq icol (- icol fortran-do-indent)))
- ((looking-at "end[ \t]*do\\b")
- (setq icol (- icol fortran-do-indent)))
- ((looking-at "end[ \t]*\
+ (setq icol (- icol fortran-if-indent)))
+ ((looking-at "\\(otherwise\\|else[ \t]*where\\)\\b")
+ (setq icol (- icol fortran-if-indent)))
+ ((and (looking-at "continue\\b")
+ (fortran-check-for-matching-do))
+ (setq icol (- icol fortran-do-indent)))
+ ((looking-at "end[ \t]*do\\b")
+ (setq icol (- icol fortran-do-indent)))
+ ((looking-at "end[ \t]*\
\\(structure\\|union\\|map\\|interface\\)\\b[ \t]*[^ \t=(a-z]")
- (setq icol (- icol fortran-structure-indent)))
- ((and (looking-at fortran-end-prog-re1)
- (fortran-check-end-prog-re)
- (not (= icol fortran-minimum-statement-indent)))
- (message "Warning: `end' not in column %d. Probably\
+ (setq icol (- icol fortran-structure-indent)))
+ ((and (looking-at fortran-end-prog-re1)
+ (fortran-check-end-prog-re)
+ (not (= icol fortran-minimum-statement-indent)))
+ (message "Warning: `end' not in column %d. Probably\
an unclosed block." fortran-minimum-statement-indent))))))
(max fortran-minimum-statement-indent icol)))
@@ -1650,16 +1729,16 @@ non-indentation text within the comment."
(save-excursion
(beginning-of-line)
(cond ((looking-at fortran-comment-line-start-skip)
- (goto-char (match-end 0))
- (skip-chars-forward
- (if (stringp fortran-comment-indent-char)
- fortran-comment-indent-char
- (char-to-string fortran-comment-indent-char))))
- ((or (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))
- (goto-char (match-end 0)))
- (t
- ;; Move past line number.
- (skip-chars-forward "[ \t0-9]")))
+ (goto-char (match-end 0))
+ (skip-chars-forward
+ (if (stringp fortran-comment-indent-char)
+ fortran-comment-indent-char
+ (char-to-string fortran-comment-indent-char))))
+ ((or (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))
+ (goto-char (match-end 0)))
+ (t
+ ;; Move past line number.
+ (skip-chars-forward "[ \t0-9]")))
;; Move past whitespace.
(skip-chars-forward " \t")
(current-column)))
@@ -1676,48 +1755,48 @@ notes: 1) A non-zero/non-blank character in column 5 indicates a continuation
(save-excursion
(beginning-of-line)
(if (looking-at fortran-comment-line-start-skip)
- (if fortran-comment-indent-style
- (let* ((char (if (stringp fortran-comment-indent-char)
- (aref fortran-comment-indent-char 0)
- fortran-comment-indent-char))
- (chars (string ?\s ?\t char)))
- (goto-char (match-end 0))
- (skip-chars-backward chars)
- (delete-region (point) (progn (skip-chars-forward chars)
- (point)))
- (insert-char char (- col (current-column)))))
+ (if fortran-comment-indent-style
+ (let* ((char (if (stringp fortran-comment-indent-char)
+ (aref fortran-comment-indent-char 0)
+ fortran-comment-indent-char))
+ (chars (string ?\s ?\t char)))
+ (goto-char (match-end 0))
+ (skip-chars-backward chars)
+ (delete-region (point) (progn (skip-chars-forward chars)
+ (point)))
+ (insert-char char (- col (current-column)))))
(if (looking-at "\t[1-9]")
- (if indent-tabs-mode
- (goto-char (match-end 0))
- (delete-char 2)
- (insert-char ?\s 5)
- (insert fortran-continuation-string))
- (if (looking-at " \\{5\\}[^ 0\n]")
- (if indent-tabs-mode
- (progn (delete-char 6)
- (insert ?\t (fortran-numerical-continuation-char) 1))
- (forward-char 6))
- (delete-horizontal-space)
- ;; Put line number in columns 0-4, or
+ (if indent-tabs-mode
+ (goto-char (match-end 0))
+ (delete-char 2)
+ (insert-char ?\s 5)
+ (insert fortran-continuation-string))
+ (if (looking-at " \\{5\\}[^ 0\n]")
+ (if indent-tabs-mode
+ (progn (delete-char 6)
+ (insert ?\t (fortran-numerical-continuation-char) 1))
+ (forward-char 6))
+ (delete-horizontal-space)
+ ;; Put line number in columns 0-4, or
;; continuation character in column 5.
- (cond ((eobp))
- ((looking-at (regexp-quote fortran-continuation-string))
- (if indent-tabs-mode
- (progn
- (indent-to
- (if indent-tabs-mode
- fortran-minimum-statement-indent-tab
- fortran-minimum-statement-indent-fixed))
- (delete-char 1)
- (insert-char (fortran-numerical-continuation-char) 1))
- (indent-to 5)
- (forward-char 1)))
- ((looking-at "[0-9]+")
- (let ((extra-space (- 5 (- (match-end 0) (point)))))
- (if (< extra-space 0)
- (message "Warning: line number exceeds 5-digit limit.")
- (indent-to (min fortran-line-number-indent extra-space))))
- (skip-chars-forward "0-9")))))
+ (cond ((eobp))
+ ((looking-at (regexp-quote fortran-continuation-string))
+ (if indent-tabs-mode
+ (progn
+ (indent-to
+ (if indent-tabs-mode
+ fortran-minimum-statement-indent-tab
+ fortran-minimum-statement-indent-fixed))
+ (delete-char 1)
+ (insert-char (fortran-numerical-continuation-char) 1))
+ (indent-to 5)
+ (forward-char 1)))
+ ((looking-at "[0-9]+")
+ (let ((extra-space (- 5 (- (match-end 0) (point)))))
+ (if (< extra-space 0)
+ (message "Warning: line number exceeds 5-digit limit.")
+ (indent-to (min fortran-line-number-indent extra-space))))
+ (skip-chars-forward "0-9")))))
;; Point is now after any continuation character or line number.
;; Put body of statement where specified.
(delete-horizontal-space)
@@ -1736,20 +1815,20 @@ Do not call if there is no line number."
(beginning-of-line)
(skip-chars-forward " \t")
(and (<= (current-column) fortran-line-number-indent)
- (or (= (current-column) fortran-line-number-indent)
- (progn (skip-chars-forward "0-9")
- (= (current-column) 5))))))
+ (or (= (current-column) fortran-line-number-indent)
+ (progn (skip-chars-forward "0-9")
+ (= (current-column) 5))))))
(defun fortran-check-for-matching-do ()
"When called from a numbered statement, return t if matching DO is found.
Otherwise return nil."
(let ((case-fold-search t)
- charnum)
+ charnum)
(save-excursion
(beginning-of-line)
(when (looking-at "[ \t]*[0-9]+")
(skip-chars-forward " \t")
- (skip-chars-forward "0") ; skip past leading zeros
+ (skip-chars-forward "0") ; skip past leading zeros
(setq charnum
(buffer-substring (point) (progn
(skip-chars-forward "0-9")
@@ -1776,19 +1855,19 @@ If ALL is nil, only match comments that start in column > 0."
;; (comment-search-forward (line-end-position) t))
(when (or all comment-start-skip)
(let ((pos (point))
- (css (if comment-start-skip
- (concat fortran-comment-line-start-skip
- "\\|" comment-start-skip)
- fortran-comment-line-start-skip)))
+ (css (if comment-start-skip
+ (concat fortran-comment-line-start-skip
+ "\\|" comment-start-skip)
+ fortran-comment-line-start-skip)))
(when (re-search-forward css (line-end-position) t)
- (if (and (or all (> (match-beginning 0) (line-beginning-position)))
- (or (save-match-data
- (not (fortran-is-in-string-p (match-beginning 0))))
- ;; Recurse for rest of line.
- (fortran-find-comment-start-skip all)))
- (point)
- (goto-char pos)
- nil)))))
+ (if (and (or all (> (match-beginning 0) (line-beginning-position)))
+ (or (save-match-data
+ (not (fortran-is-in-string-p (match-beginning 0))))
+ ;; Recurse for rest of line.
+ (fortran-find-comment-start-skip all)))
+ (point)
+ (goto-char pos)
+ nil)))))
;; From: ralf@up3aud1.gwdg.de (Ralf Fassel)
;; Test if TAB format continuation lines work.
@@ -1797,57 +1876,57 @@ If ALL is nil, only match comments that start in column > 0."
(save-excursion
(goto-char where)
(cond
- ((bolp) nil) ; bol is never inside a string
- ((save-excursion ; comment lines too
- (beginning-of-line)
- (looking-at fortran-comment-line-start-skip)) nil)
+ ((bolp) nil) ; bol is never inside a string
+ ((save-excursion ; comment lines too
+ (beginning-of-line)
+ (looking-at fortran-comment-line-start-skip)) nil)
(t (let ((parse-state '(0 nil nil nil nil nil 0))
- (quoted-comment-start (if comment-start
- (regexp-quote comment-start)))
- (not-done t)
- parse-limit end-of-line)
- ;; Move to start of current statement.
- (fortran-next-statement)
- (fortran-previous-statement)
- ;; Now parse up to WHERE.
- (while not-done
- (if (or ;; Skip to next line if:
- ;; - comment line?
- (looking-at fortran-comment-line-start-skip)
- ;; - at end of line?
- (eolp)
- ;; - not in a string and after comment-start?
- (and (not (nth 3 parse-state))
- comment-start
- (equal comment-start
- (char-to-string (preceding-char)))))
- (if (> (forward-line) 0)
- (setq not-done nil))
- ;; else:
- ;; If we are at beginning of code line, skip any
- ;; whitespace, labels and tab continuation markers.
- (if (bolp) (skip-chars-forward " \t0-9"))
- ;; If we are in column <= 5 now, check for continuation char.
- (cond ((= 5 (current-column)) (forward-char 1))
- ((and (< (current-column) 5)
- (equal fortran-continuation-string
- (char-to-string (following-char)))
- (forward-char 1))))
- ;; Find out parse-limit from here.
- (setq end-of-line (line-end-position))
- (setq parse-limit (min where end-of-line))
- ;; Parse max up to comment-start, if non-nil and in current line.
- (if comment-start
- (save-excursion
- (if (re-search-forward quoted-comment-start end-of-line t)
- (setq parse-limit (min (point) parse-limit)))))
- ;; Now parse if still in limits.
- (if (< (point) where)
- (setq parse-state (parse-partial-sexp
- (point) parse-limit nil nil parse-state))
- (setq not-done nil))))
- ;; Result.
- (nth 3 parse-state))))))
+ (quoted-comment-start (if comment-start
+ (regexp-quote comment-start)))
+ (not-done t)
+ parse-limit end-of-line)
+ ;; Move to start of current statement.
+ (fortran-next-statement)
+ (fortran-previous-statement)
+ ;; Now parse up to WHERE.
+ (while not-done
+ (if (or ;; Skip to next line if:
+ ;; - comment line?
+ (looking-at fortran-comment-line-start-skip)
+ ;; - at end of line?
+ (eolp)
+ ;; - not in a string and after comment-start?
+ (and (not (nth 3 parse-state))
+ comment-start
+ (equal comment-start
+ (char-to-string (preceding-char)))))
+ (if (> (forward-line) 0)
+ (setq not-done nil))
+ ;; else:
+ ;; If we are at beginning of code line, skip any
+ ;; whitespace, labels and tab continuation markers.
+ (if (bolp) (skip-chars-forward " \t0-9"))
+ ;; If we are in column <= 5 now, check for continuation char.
+ (cond ((= 5 (current-column)) (forward-char 1))
+ ((and (< (current-column) 5)
+ (equal fortran-continuation-string
+ (char-to-string (following-char)))
+ (forward-char 1))))
+ ;; Find out parse-limit from here.
+ (setq end-of-line (line-end-position))
+ (setq parse-limit (min where end-of-line))
+ ;; Parse max up to comment-start, if non-nil and in current line.
+ (if comment-start
+ (save-excursion
+ (if (re-search-forward quoted-comment-start end-of-line t)
+ (setq parse-limit (min (point) parse-limit)))))
+ ;; Now parse if still in limits.
+ (if (< (point) where)
+ (setq parse-state (parse-partial-sexp
+ (point) parse-limit nil nil parse-state))
+ (setq not-done nil))))
+ ;; Result.
+ (nth 3 parse-state))))))
;; From old version.
(defalias 'fortran-auto-fill-mode 'auto-fill-mode)
@@ -1855,17 +1934,17 @@ If ALL is nil, only match comments that start in column > 0."
(defun fortran-fill ()
"Fill the current line at an appropriate point(s)."
(let* ((auto-fill-function #'fortran-auto-fill)
- (opoint (point))
- (bol (line-beginning-position))
- (eol (line-end-position))
- (bos (min eol (+ bol (fortran-current-line-indentation))))
+ (opoint (point))
+ (bol (line-beginning-position))
+ (eol (line-end-position))
+ (bos (min eol (+ bol (fortran-current-line-indentation))))
;; If in a string at fill-column, break it either before the
;; initial quote, or at fill-col (if string is too long).
- (quote
- (save-excursion
- (goto-char bol)
- ;; OK to break quotes on comment lines.
- (unless (looking-at fortran-comment-line-start-skip)
+ (quote
+ (save-excursion
+ (goto-char bol)
+ ;; OK to break quotes on comment lines.
+ (unless (looking-at fortran-comment-line-start-skip)
(let (fcpoint start)
(move-to-column fill-column)
(when (fortran-is-in-string-p (setq fcpoint (point)))
@@ -1884,12 +1963,12 @@ If ALL is nil, only match comments that start in column > 0."
(- fill-column 6 fortran-continuation-indent))
fcpoint
start))))))
- ;; Decide where to split the line. If a position for a quoted
- ;; string was found above then use that, else break the line
- ;; before/after the last delimiter.
- (fill-point
- (or quote
- (save-excursion
+ ;; Decide where to split the line. If a position for a quoted
+ ;; string was found above then use that, else break the line
+ ;; before/after the last delimiter.
+ (fill-point
+ (or quote
+ (save-excursion
;; If f-b-b-d is t, have an extra column to play with,
;; since delimiter gets shifted to new line.
(move-to-column (if fortran-break-before-delimiters
@@ -1913,13 +1992,13 @@ If ALL is nil, only match comments that start in column > 0."
(or (looking-at fortran-no-break-re)
(forward-char)))))
;; Line indented beyond fill-column?
- (when (<= (point) bos)
+ (when (<= (point) bos)
(move-to-column (1+ fill-column))
;; What is this doing???
(or (re-search-forward "[\t\n,'+-/*)=]" eol t)
(goto-char bol)))
- (if (bolp)
- (re-search-forward "[ \t]" opoint t))
+ (if (bolp)
+ (re-search-forward "[ \t]" opoint t))
(point)))))
;; If we are in an in-line comment, don't break unless the
;; line of code is longer than it should be. Otherwise
@@ -1928,20 +2007,20 @@ If ALL is nil, only match comments that start in column > 0."
;; Need to use fortran-find-comment-start-skip to make sure that
;; quoted !'s don't prevent a break.
(when (and (save-excursion
- (beginning-of-line)
- (if (not (fortran-find-comment-start-skip))
+ (beginning-of-line)
+ (if (not (fortran-find-comment-start-skip))
t
- (goto-char (match-beginning 0))
- (>= (point) fill-point)))
- (save-excursion
- (goto-char fill-point)
- (not (bolp)))
- (> (save-excursion
- (goto-char opoint)
- (current-column))
- (min (1+ fill-column)
- (+ (fortran-calculate-indent)
- fortran-continuation-indent))))
+ (goto-char (match-beginning 0))
+ (>= (point) fill-point)))
+ (save-excursion
+ (goto-char fill-point)
+ (not (bolp)))
+ (> (save-excursion
+ (goto-char opoint)
+ (current-column))
+ (min (1+ fill-column)
+ (+ (fortran-calculate-indent)
+ fortran-continuation-indent))))
(goto-char fill-point)
(fortran-break-line)
(end-of-line))))
@@ -1949,27 +2028,27 @@ If ALL is nil, only match comments that start in column > 0."
(defun fortran-break-line ()
"Call `fortran-split-line'. Joins continuation lines first, then refills."
(let ((bol (line-beginning-position))
- (comment-string
- (save-excursion
- (if (fortran-find-comment-start-skip)
- (delete-and-extract-region
- (match-beginning 0) (line-end-position))))))
+ (comment-string
+ (save-excursion
+ (if (fortran-find-comment-start-skip)
+ (delete-and-extract-region
+ (match-beginning 0) (line-end-position))))))
;; Forward line 1 really needs to go to next non white line.
(if (save-excursion (forward-line)
- (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))
- (progn
- (end-of-line)
- (delete-region (point) (match-end 0))
- (delete-horizontal-space)
- (fortran-fill))
+ (looking-at " \\{5\\}[^ 0\n]\\|\t[1-9]"))
+ (progn
+ (end-of-line)
+ (delete-region (point) (match-end 0))
+ (delete-horizontal-space)
+ (fortran-fill))
(fortran-split-line))
(if comment-string
- (save-excursion
- (goto-char bol)
- (end-of-line)
- (delete-horizontal-space)
- (indent-to (fortran-comment-indent))
- (insert comment-string)))))
+ (save-excursion
+ (goto-char bol)
+ (end-of-line)
+ (delete-horizontal-space)
+ (indent-to (fortran-comment-indent))
+ (insert comment-string)))))
(defun fortran-analyze-file-format ()
"Return nil if fixed format is used, t if TAB formatting is used.
@@ -1979,12 +2058,12 @@ before the end or in the first `fortran-analyze-depth' lines."
(save-excursion
(goto-char (point-min))
(while (not (or
- (eobp)
- (eq (char-after) ?\t)
- (looking-at " \\{6\\}")
- (> i fortran-analyze-depth)))
- (forward-line)
- (setq i (1+ i)))
+ (eobp)
+ (eq (char-after) ?\t)
+ (looking-at " \\{6\\}")
+ (> i fortran-analyze-depth)))
+ (forward-line)
+ (setq i (1+ i)))
(cond
((eq (char-after) ?\t) t)
((looking-at " \\{6\\}") nil)
@@ -2026,13 +2105,15 @@ Always returns non-nil (to prevent `fill-paragraph' being called)."
(fortran-indent-line)))
(defun fortran-strip-sequence-nos (&optional do-space)
- "Delete all text in column 72 and up (assumed to be sequence numbers).
-Normally also deletes trailing whitespace after stripping such text.
-Supplying prefix arg DO-SPACE prevents stripping the whitespace."
+ "Delete all text in column `fortran-line-length' (default 72) and up.
+This is assumed to be sequence numbers. Normally also deletes
+trailing whitespace after stripping such text. Supplying prefix
+arg DO-SPACE prevents stripping the whitespace."
(interactive "*p")
(save-excursion
(goto-char (point-min))
- (while (re-search-forward "^.\\{72\\}\\(.*\\)" nil t)
+ (while (re-search-forward (format "^.\\{%d\\}\\(.*\\)" fortran-line-length)
+ nil t)
(replace-match "" nil nil nil 1)
(unless do-space (delete-horizontal-space)))))
@@ -2043,7 +2124,7 @@ Supplying prefix arg DO-SPACE prevents stripping the whitespace."
(save-excursion
;; We must be inside function body for this to work.
(fortran-beginning-of-subprogram)
- (let ((case-fold-search t)) ; case-insensitive
+ (let ((case-fold-search t)) ; case-insensitive
;; Search for fortran subprogram start.
(if (re-search-forward
(concat "^[ \t]*\\(program\\|subroutine\\|function"
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index baa59c764fd..1fee8cbd093 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -142,23 +142,31 @@ The following place holders should be present in the string:
:version "22.1"
:group 'grep)
-(defcustom grep-files-aliases '(
- ("el" . "*.el")
- ("ch" . "*.[ch]")
- ("c" . "*.c")
- ("h" . "*.h")
- ("asm" . "*.[sS]")
- ("m" . "[Mm]akefile*")
- ("l" . "[Cc]hange[Ll]og*")
- ("tex" . "*.tex")
- ("texi" . "*.texi")
- )
+(defcustom grep-files-aliases
+ '(("asm" . "*.[sS]")
+ ("c" . "*.c")
+ ("cc" . "*.cc")
+ ("ch" . "*.[ch]")
+ ("el" . "*.el")
+ ("h" . "*.h")
+ ("l" . "[Cc]hange[Ll]og*")
+ ("m" . "[Mm]akefile*")
+ ("tex" . "*.tex")
+ ("texi" . "*.texi"))
"*Alist of aliases for the FILES argument to `lgrep' and `rgrep'."
:type 'alist
:group 'grep)
-(defcustom grep-find-ignored-directories '("CVS" ".svn" "{arch}" ".hg" "_darcs"
- ".git" ".bzr")
+(defcustom grep-find-ignored-directories
+ '(".bzr"
+ ".git"
+ ".hg"
+ ".svn"
+ "CVS"
+ "RCS"
+ "_MTN"
+ "_darcs"
+ "{arch}")
"*List of names of sub-directories which `rgrep' shall not recurse into."
:type '(repeat string)
:group 'grep)
@@ -325,6 +333,12 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
This variable's value takes effect when `grep-compute-defaults' is called.")
;;;###autoload
+(defvar xargs-program "xargs"
+ "The default xargs program for `grep-find-command'.
+See `grep-find-use-xargs'.
+This variable's value takes effect when `grep-compute-defaults' is called.")
+
+;;;###autoload
(defvar grep-find-use-xargs nil
"Non-nil means that `grep-find' uses the `xargs' utility by default.
If `exec', use `find -exec'.
@@ -343,6 +357,12 @@ This variable's value takes effect when `grep-compute-defaults' is called.")
(defvar grep-regexp-history nil)
(defvar grep-files-history '("ch" "el"))
+(defvar grep-host-defaults-alist nil
+ "Default values depending on target host.
+`grep-compute-defaults' returns default values for every local or
+remote host `grep' runs. These values can differ from host to
+host. Once computed, the default values are kept here in order
+to avoid computing them again.")
;;;###autoload
(defun grep-process-setup ()
@@ -371,92 +391,153 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
(defun grep-probe (command args &optional func result)
(equal (condition-case nil
- (apply (or func 'call-process) command args)
+ (apply (or func 'process-file) command args)
(error nil))
(or result 0)))
;;;###autoload
(defun grep-compute-defaults ()
- (unless (or (not grep-use-null-device) (eq grep-use-null-device t))
- (setq grep-use-null-device
- (with-temp-buffer
- (let ((hello-file (expand-file-name "HELLO" data-directory)))
- (not
- (and (if grep-command
- ;; `grep-command' is already set, so
- ;; use that for testing.
- (grep-probe grep-command
- `(nil t nil "^English" ,hello-file)
- #'call-process-shell-command)
- ;; otherwise use `grep-program'
- (grep-probe grep-program
- `(nil t nil "-nH" "^English" ,hello-file)))
- (progn
- (goto-char (point-min))
- (looking-at
- (concat (regexp-quote hello-file)
- ":[0-9]+:English")))))))))
- (unless (and grep-command grep-find-command
- grep-template grep-find-template)
- (let ((grep-options
- (concat (if grep-use-null-device "-n" "-nH")
- (if (grep-probe grep-program
- `(nil nil nil "-e" "foo" ,null-device)
- nil 1)
- " -e"))))
- (unless grep-command
- (setq grep-command
- (format "%s %s " grep-program grep-options)))
- (unless grep-template
- (setq grep-template
- (format "%s <C> %s <R> <F>" grep-program grep-options)))
- (unless grep-find-use-xargs
- (setq grep-find-use-xargs
- (cond
- ((and
- (grep-probe find-program `(nil nil nil ,null-device "-print0"))
- (grep-probe "xargs" `(nil nil nil "-0" "-e" "echo")))
- 'gnu)
- (t
- 'exec))))
- (unless grep-find-command
- (setq grep-find-command
- (cond ((eq grep-find-use-xargs 'gnu)
- (format "%s . -type f -print0 | xargs -0 -e %s"
- find-program grep-command))
- ((eq grep-find-use-xargs 'exec)
- (let ((cmd0 (format "%s . -type f -exec %s"
- find-program grep-command)))
- (cons
- (format "%s {} %s %s"
- cmd0 null-device
- (shell-quote-argument ";"))
- (1+ (length cmd0)))))
- (t
- (format "%s . -type f -print | xargs %s"
- find-program grep-command)))))
- (unless grep-find-template
- (setq grep-find-template
- (let ((gcmd (format "%s <C> %s <R>"
- grep-program grep-options)))
+ ;; Keep default values.
+ (unless grep-host-defaults-alist
+ (add-to-list
+ 'grep-host-defaults-alist
+ (cons nil
+ `((grep-command ,grep-command)
+ (grep-template ,grep-template)
+ (grep-use-null-device ,grep-use-null-device)
+ (grep-find-command ,grep-find-command)
+ (grep-find-template ,grep-find-template)
+ (grep-find-use-xargs ,grep-find-use-xargs)
+ (grep-highlight-matches ,grep-highlight-matches)))))
+ (let* ((host-id
+ (intern (or (file-remote-p default-directory 'host) "localhost")))
+ (host-defaults (assq host-id grep-host-defaults-alist))
+ (defaults (assq nil grep-host-defaults-alist)))
+ ;; There are different defaults on different hosts. They must be
+ ;; computed for every host once.
+ (setq grep-command
+ (or (cadr (assq 'grep-command host-defaults))
+ (cadr (assq 'grep-command defaults)))
+
+ grep-template
+ (or (cadr (assq 'grep-template host-defaults))
+ (cadr (assq 'grep-template defaults)))
+
+ grep-use-null-device
+ (or (cadr (assq 'grep-use-null-device host-defaults))
+ (cadr (assq 'grep-use-null-device defaults)))
+
+ grep-find-command
+ (or (cadr (assq 'grep-find-command host-defaults))
+ (cadr (assq 'grep-find-command defaults)))
+
+ grep-find-template
+ (or (cadr (assq 'grep-find-template host-defaults))
+ (cadr (assq 'grep-find-template defaults)))
+
+ grep-find-use-xargs
+ (or (cadr (assq 'grep-find-use-xargs host-defaults))
+ (cadr (assq 'grep-find-use-xargs defaults)))
+
+ grep-highlight-matches
+ (or (cadr (assq 'grep-highlight-matches host-defaults))
+ (cadr (assq 'grep-highlight-matches defaults))))
+
+ (unless (or (not grep-use-null-device) (eq grep-use-null-device t))
+ (setq grep-use-null-device
+ (with-temp-buffer
+ (let ((hello-file (expand-file-name "HELLO" data-directory)))
+ (not
+ (and (if grep-command
+ ;; `grep-command' is already set, so
+ ;; use that for testing.
+ (grep-probe grep-command
+ `(nil t nil "^English" ,hello-file)
+ #'call-process-shell-command)
+ ;; otherwise use `grep-program'
+ (grep-probe grep-program
+ `(nil t nil "-nH" "^English" ,hello-file)))
+ (progn
+ (goto-char (point-min))
+ (looking-at
+ (concat (regexp-quote hello-file)
+ ":[0-9]+:English")))))))))
+ (unless (and grep-command grep-find-command
+ grep-template grep-find-template)
+ (let ((grep-options
+ (concat (if grep-use-null-device "-n" "-nH")
+ (if (grep-probe grep-program
+ `(nil nil nil "-e" "foo" ,null-device)
+ nil 1)
+ " -e"))))
+ (unless grep-command
+ (setq grep-command
+ (format "%s %s " grep-program grep-options)))
+ (unless grep-template
+ (setq grep-template
+ (format "%s <C> %s <R> <F>" grep-program grep-options)))
+ (unless grep-find-use-xargs
+ (setq grep-find-use-xargs
+ (cond
+ ((and
+ (grep-probe find-program `(nil nil nil ,null-device "-print0"))
+ (grep-probe xargs-program `(nil nil nil "-0" "-e" "echo")))
+ 'gnu)
+ (t
+ 'exec))))
+ (unless grep-find-command
+ (setq grep-find-command
(cond ((eq grep-find-use-xargs 'gnu)
- (format "%s . <X> -type f <F> -print0 | xargs -0 -e %s"
- find-program gcmd))
+ (format "%s . -type f -print0 | %s -0 -e %s"
+ find-program xargs-program grep-command))
((eq grep-find-use-xargs 'exec)
- (format "%s . <X> -type f <F> -exec %s {} %s %s"
- find-program gcmd null-device
- (shell-quote-argument ";")))
+ (let ((cmd0 (format "%s . -type f -exec %s"
+ find-program grep-command)))
+ (cons
+ (format "%s {} %s %s"
+ cmd0 null-device
+ (shell-quote-argument ";"))
+ (1+ (length cmd0)))))
(t
- (format "%s . <X> -type f <F> -print | xargs %s"
- find-program gcmd))))))))
- (unless (or (not grep-highlight-matches) (eq grep-highlight-matches t))
- (setq grep-highlight-matches
- (with-temp-buffer
- (and (grep-probe grep-program '(nil t nil "--help"))
- (progn
- (goto-char (point-min))
- (search-forward "--color" nil t))
- t)))))
+ (format "%s . -type f -print | %s %s"
+ find-program xargs-program grep-command)))))
+ (unless grep-find-template
+ (setq grep-find-template
+ (let ((gcmd (format "%s <C> %s <R>"
+ grep-program grep-options)))
+ (cond ((eq grep-find-use-xargs 'gnu)
+ (format "%s . <X> -type f <F> -print0 | %s -0 -e %s"
+ find-program xargs-program gcmd))
+ ((eq grep-find-use-xargs 'exec)
+ (format "%s . <X> -type f <F> -exec %s {} %s %s"
+ find-program gcmd null-device
+ (shell-quote-argument ";")))
+ (t
+ (format "%s . <X> -type f <F> -print | %s %s"
+ find-program xargs-program gcmd))))))))
+ (unless (or (not grep-highlight-matches) (eq grep-highlight-matches t))
+ (setq grep-highlight-matches
+ (with-temp-buffer
+ (and (grep-probe grep-program '(nil t nil "--help"))
+ (progn
+ (goto-char (point-min))
+ (search-forward "--color" nil t))
+ t))))
+
+ ;; Save defaults for this host.
+ (setq grep-host-defaults-alist
+ (delete (assq host-id grep-host-defaults-alist)
+ grep-host-defaults-alist))
+ (add-to-list
+ 'grep-host-defaults-alist
+ (cons host-id
+ `((grep-command ,grep-command)
+ (grep-template ,grep-template)
+ (grep-use-null-device ,grep-use-null-device)
+ (grep-find-command ,grep-find-command)
+ (grep-find-template ,grep-find-template)
+ (grep-find-use-xargs ,grep-find-use-xargs)
+ (grep-highlight-matches ,grep-highlight-matches))))))
(defun grep-tag-default ()
(or (and transient-mark-mode mark-active
@@ -468,7 +549,7 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
""))
(defun grep-default-command ()
- "Compute the default grep command for C-u M-x grep to offer."
+ "Compute the default grep command for \\[universal-argument] \\[grep] to offer."
(let ((tag-default (shell-quote-argument (grep-tag-default)))
;; This a regexp to match single shell arguments.
;; Could someone please add comments explaining it?
@@ -521,19 +602,19 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'."
"Run grep, with user-specified args, and collect output in a buffer.
While grep runs asynchronously, you can use \\[next-error] (M-x next-error),
or \\<grep-mode-map>\\[compile-goto-error] in the grep \
-output buffer, to go to the lines
-where grep found matches.
+output buffer, to go to the lines where grep
+found matches.
For doing a recursive `grep', see the `rgrep' command. For running
`grep' in a specific directory, see `lgrep'.
-This command uses a special history list for its COMMAND-ARGS, so you can
-easily repeat a grep command.
+This command uses a special history list for its COMMAND-ARGS, so you
+can easily repeat a grep command.
A prefix argument says to default the argument based upon the current
tag the cursor is over, substituting it into the last grep command
-in the grep command history (or into `grep-command'
-if that history list is empty)."
+in the grep command history (or into `grep-command' if that history
+list is empty)."
(interactive
(progn
(grep-compute-defaults)
@@ -661,8 +742,9 @@ before it is executed.
With two \\[universal-argument] prefixes, directly edit and run `grep-command'.
Collect output in a buffer. While grep runs asynchronously, you
-can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error]
-in the grep output buffer, to go to the lines where grep found matches.
+can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \
+in the grep output buffer,
+to go to the lines where grep found matches.
This command shares argument histories with \\[rgrep] and \\[grep]."
(interactive
@@ -703,7 +785,8 @@ This command shares argument histories with \\[rgrep] and \\[grep]."
;; even when async processes aren't supported.
(compilation-start (if (and grep-use-null-device null-device)
(concat command " " null-device)
- command) 'grep-mode))
+ command)
+ 'grep-mode))
(if (eq next-error-last-buffer (current-buffer))
(setq default-directory dir))))))
@@ -721,8 +804,9 @@ before it is executed.
With two \\[universal-argument] prefixes, directly edit and run `grep-find-command'.
Collect output in a buffer. While find runs asynchronously, you
-can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error]
-in the grep output buffer, to go to the lines where grep found matches.
+can use \\[next-error] (M-x next-error), or \\<grep-mode-map>\\[compile-goto-error] \
+in the grep output buffer,
+to go to the lines where grep found matches.
This command shares argument histories with \\[lgrep] and \\[grep-find]."
(interactive
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 5e11b73916e..ce231f4c662 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -49,17 +49,22 @@
(defvar gdb-macro-info)
(defvar gdb-server-prefix)
(defvar gdb-show-changed-values)
+(defvar gdb-source-window)
(defvar gdb-var-list)
(defvar gdb-speedbar-auto-raise)
+(defvar gud-tooltip-mode)
+(defvar hl-line-mode)
+(defvar hl-line-sticky-flag)
(defvar tool-bar-map)
+
;; ======================================================================
;; GUD commands must be visible in C buffers visited by GUD
(defgroup gud nil
"Grand Unified Debugger mode for gdb and other debuggers under Emacs.
Supported debuggers include gdb, sdb, dbx, xdb, perldb, pdb (Python), jdb."
- :group 'unix
+ :group 'processes
:group 'tools)
@@ -106,6 +111,9 @@ Used to grey out relevant toolbar icons.")
(defvar gdb-ready nil)
+(defvar gud-target-name "--unknown--"
+ "The apparent name of the program being debugged in a gud buffer.")
+
;; Use existing Info buffer, if possible.
(defun gud-goto-info ()
"Go to relevant Emacs info node."
@@ -294,6 +302,11 @@ Used to grey out relevant toolbar icons.")
(defun gud-file-name (f)
"Transform a relative file name to an absolute file name.
Uses `gud-<MINOR-MODE>-directories' to find the source files."
+ ;; When `default-directory' is a remote file name, prepend its
+ ;; remote part to f, which is the local file name. Fortunately,
+ ;; `file-remote-p' returns exactly this remote file name part (or
+ ;; nil otherwise).
+ (setq f (concat (or (file-remote-p default-directory) "") f))
(if (file-exists-p f) (expand-file-name f)
(let ((directories (gud-val 'directories))
(result nil))
@@ -2435,9 +2448,6 @@ comint mode, which see."
:group 'gud
:type 'boolean)
-(defvar gud-target-name "--unknown--"
- "The apparent name of the program being debugged in a gud buffer.")
-
;; Perform initializations common to all debuggers.
;; The first arg is the specified command line,
;; which starts with the program to debug.
@@ -2493,7 +2503,10 @@ comint mode, which see."
(while (and w (not (eq (car w) t)))
(setq w (cdr w)))
(if w
- (setcar w file)))
+ (setcar w
+ (if (file-remote-p default-directory)
+ (setq file (file-name-nondirectory file))
+ file))))
(apply 'make-comint (concat "gud" filepart) program nil
(if massage-args (funcall massage-args file args) args))
;; Since comint clobbered the mode, we don't set it until now.
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index fb990d6bf3a..85d26427a3f 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -407,11 +407,6 @@ to the variable `mode-line-format'. For example,
Note that `mode-line-format' is buffer-local.")
;;---------------------------------------------------------------------------
-;; system dependency
-
-(defalias 'hs-match-data 'match-data)
-
-;;---------------------------------------------------------------------------
;; support functions
(defun hs-discard-overlays (from to)
@@ -508,8 +503,8 @@ Original match data is restored upon return."
(defun hs-hide-comment-region (beg end &optional repos-end)
"Hide a region from BEG to END, marking it as a comment.
Optional arg REPOS-END means reposition at end."
- (let ((beg-eol (progn (goto-char beg) (end-of-line) (point)))
- (end-eol (progn (goto-char end) (end-of-line) (point))))
+ (let ((beg-eol (progn (goto-char beg) (line-end-position)))
+ (end-eol (progn (goto-char end) (line-end-position))))
(hs-discard-overlays beg-eol end-eol)
(hs-make-overlay beg-eol end-eol 'comment beg end))
(goto-char (if repos-end end beg)))
@@ -526,7 +521,7 @@ and then further adjusted to be at the end of the line."
(if comment-reg
(hs-hide-comment-region (car comment-reg) (cadr comment-reg) end)
(when (looking-at hs-block-start-regexp)
- (let* ((mdata (hs-match-data t))
+ (let* ((mdata (match-data t))
(pure-p (match-end 0))
(p
;; `p' is the point at the end of the block beginning,
@@ -536,8 +531,7 @@ and then further adjusted to be at the end of the line."
'identity)
pure-p))
;; whatever the adjustment, we move to eol
- (end-of-line)
- (point)))
+ (line-end-position)))
(q
;; `q' is the point at the end of the block
(progn (hs-forward-sexp mdata 1)
@@ -652,7 +646,7 @@ Return point, or nil if original point was not in a block."
(while (and (re-search-backward hs-block-start-regexp nil t)
(not (setq done
(< here (save-excursion
- (hs-forward-sexp (hs-match-data t) 1)
+ (hs-forward-sexp (match-data t) 1)
(point)))))))
(if done
(point)
@@ -705,7 +699,7 @@ and `case-fold-search' are both t."
(if (and c-reg (nth 0 c-reg))
;; point is inside a comment, and that comment is hidable
(goto-char (nth 0 c-reg))
- (end-of-line)
+ (end-of-line)
(when (and (not c-reg)
(hs-find-block-beginning)
(looking-at hs-block-start-regexp))
@@ -734,12 +728,12 @@ Move point to the beginning of the line, and run the normal hook
If `hs-hide-comments-when-hiding-all' is non-nil, also hide the comments."
(interactive)
(hs-life-goes-on
- (message "Hiding all blocks ...")
(save-excursion
(unless hs-allow-nesting
(hs-discard-overlays (point-min) (point-max)))
(goto-char (point-min))
- (let ((count 0)
+ (let ((spew (make-progress-reporter "Hiding all blocks..."
+ (point-min) (point-max)))
(re (concat "\\("
hs-block-start-regexp
"\\)"
@@ -765,9 +759,9 @@ If `hs-hide-comments-when-hiding-all' is non-nil, also hide the comments."
(if (> (count-lines (car c-reg) (nth 1 c-reg)) 1)
(hs-hide-block-at-point t c-reg)
(goto-char (nth 1 c-reg))))))
- (message "Hiding ... %d" (setq count (1+ count))))))
+ (progress-reporter-update spew (point)))
+ (progress-reporter-done spew)))
(beginning-of-line)
- (message "Hiding all blocks ... done")
(run-hooks 'hs-hide-hook)))
(defun hs-show-all ()
@@ -806,7 +800,7 @@ See documentation for functions `hs-hide-block' and `run-hooks'."
(hs-life-goes-on
(or
;; first see if we have something at the end of the line
- (let ((ov (hs-overlay-at (save-excursion (end-of-line) (point))))
+ (let ((ov (hs-overlay-at (line-end-position)))
(here (point)))
(when ov
(goto-char
@@ -826,7 +820,7 @@ See documentation for functions `hs-hide-block' and `run-hooks'."
;; ugh, fresh match-data
(looking-at hs-block-start-regexp))
(setq p (point)
- q (progn (hs-forward-sexp (hs-match-data t) 1) (point)))))
+ q (progn (hs-forward-sexp (match-data t) 1) (point)))))
(when (and p q)
(hs-discard-overlays p q)
(goto-char (if end q (1+ p)))))
@@ -906,9 +900,9 @@ Key bindings:
(progn
(hs-grok-mode-type)
;; Turn off this mode if we change major modes.
- (add-hook 'change-major-mode-hook
- 'turn-off-hideshow
- nil t)
+ (add-hook 'change-major-mode-hook
+ 'turn-off-hideshow
+ nil t)
(easy-menu-add hs-minor-mode-menu)
(set (make-local-variable 'line-move-ignore-invisible) t)
(add-to-invisibility-spec '(hs . t)))
diff --git a/lisp/progmodes/idlw-help.el b/lisp/progmodes/idlw-help.el
index e7f0fa1677a..b599baa2893 100644
--- a/lisp/progmodes/idlw-help.el
+++ b/lisp/progmodes/idlw-help.el
@@ -42,13 +42,10 @@
;;; Code:
-(defvar idlwave-help-browse-url-available nil
+(defvar idlwave-help-browse-url-available t
"Whether browse-url is available")
-(setq idlwave-help-browse-url-available
- (condition-case nil
- (require 'browse-url)
- (error nil)))
+(require 'browse-url)
(defgroup idlwave-online-help nil
"Online Help options for IDLWAVE mode."
@@ -1317,6 +1314,8 @@ IDL assistant.")
(defvar idlwave-help-assistant-help-with-topic-history nil
"The history of help topics selected with the minibuffer.")
+(defvar idlwave-system-routines)
+
(defun idlwave-help-assistant-help-with-topic (&optional topic)
"Prompt for and provide help with TOPIC."
(interactive)
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index f903d490565..eebfd377a7e 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -1474,7 +1474,7 @@ Otherwise just move the line. Move down unless UP is non-nil."
(if (and idlwave-shell-arrows-do-history
(>= (1+ (save-excursion (end-of-line) (point))) proc-pos))
(comint-previous-input arg)
- (previous-line arg))))
+ (forward-line (- arg)))))
(defun idlwave-shell-up-or-history (&optional arg)
"When in last line of process buffer, move to previous input.
@@ -3461,12 +3461,12 @@ breakpoint overlays."
line (string-to-number (match-string (nth 2 indmap)))
file (idlwave-shell-file-name (match-string (nth 3 indmap))))
(if (eq bp-re bp-re55)
- (setq count (if (match-string 10) 1
+ (setq count (if (match-string 10) 1
(if (match-string 8)
(string-to-number (match-string 8))))
condition (match-string 13)
disabled (not (null (match-string 15)))))
-
+
;; Add the breakpoint info to the list
(nconc idlwave-shell-bp-alist
(list (cons (list file line)
@@ -3476,9 +3476,9 @@ breakpoint overlays."
count nil condition disabled))))))
(setq idlwave-shell-bp-alist (cdr idlwave-shell-bp-alist))
;; Update breakpoint data
- (if (eq bp-re bp-re54)
- (mapcar 'idlwave-shell-update-bp old-bp-alist)
- (mapcar 'idlwave-shell-update-bp-command-only old-bp-alist))))
+ (if (eq bp-re bp-re54)
+ (mapc 'idlwave-shell-update-bp old-bp-alist)
+ (mapc 'idlwave-shell-update-bp-command-only old-bp-alist))))
;; Update the breakpoint overlays
(unless no-show (idlwave-shell-update-bp-overlays))
;; Return the new list
@@ -4530,27 +4530,27 @@ idlwave-shell-electric-debug-mode-map)
(if (or (featurep 'easymenu) (load "easymenu" t))
(progn
- (easy-menu-define
+ (easy-menu-define
idlwave-mode-debug-menu idlwave-mode-map "IDL debugging menus"
idlwave-shell-menu-def)
(easy-menu-define
idlwave-shell-mode-menu idlwave-shell-mode-map "IDL shell menus"
idlwave-shell-menu-def)
(save-excursion
- (mapcar (lambda (buf)
- (set-buffer buf)
- (if (eq major-mode 'idlwave-mode)
- (progn
- (easy-menu-remove idlwave-mode-debug-menu)
- (easy-menu-add idlwave-mode-debug-menu))))
- (buffer-list)))))
+ (mapc (lambda (buf)
+ (set-buffer buf)
+ (if (eq major-mode 'idlwave-mode)
+ (progn
+ (easy-menu-remove idlwave-mode-debug-menu)
+ (easy-menu-add idlwave-mode-debug-menu))))
+ (buffer-list)))))
;; The Breakpoint Glyph -------------------------------------------------------
(defvar idlwave-shell-bp-glyph nil
"The glyphs to mark breakpoint lines in the source code.")
-(let ((image-alist
+(let ((image-alist
'((bp . "/* XPM */
static char * file[] = {
\"14 12 3 1\",
diff --git a/lisp/progmodes/idlw-toolbar.el b/lisp/progmodes/idlw-toolbar.el
index 2d143a3ddaa..4400c30b09d 100644
--- a/lisp/progmodes/idlw-toolbar.el
+++ b/lisp/progmodes/idlw-toolbar.el
@@ -916,21 +916,21 @@ static char * file[] = {
(idlwave-toolbar-add))
(buffer-list)))
;; For Emacs, add the key definitions to the mode maps
- (mapcar (lambda (x)
- (let* ((icon (aref x 0))
- (func (aref x 1))
- (show (aref x 2))
- (help (aref x 3))
- (key (vector 'tool-bar func))
- (def (list 'menu-item
- "a"
- func
- :image (symbol-value icon)
- :visible show
- :help help)))
- (define-key idlwave-mode-map key def)
- (define-key idlwave-shell-mode-map key def)))
- (reverse idlwave-toolbar)))
+ (mapc (lambda (x)
+ (let* ((icon (aref x 0))
+ (func (aref x 1))
+ (show (aref x 2))
+ (help (aref x 3))
+ (key (vector 'tool-bar func))
+ (def (list 'menu-item
+ "a"
+ func
+ :image (symbol-value icon)
+ :visible show
+ :help help)))
+ (define-key idlwave-mode-map key def)
+ (define-key idlwave-shell-mode-map key def)))
+ (reverse idlwave-toolbar)))
(setq idlwave-toolbar-visible t)))
(defun idlwave-toolbar-remove-everywhere ()
@@ -947,15 +947,15 @@ static char * file[] = {
(idlwave-toolbar-remove))
(buffer-list)))
;; For Emacs, remove the key definitions from the mode maps
- (mapcar (lambda (x)
- (let* (;;(icon (aref x 0))
- (func (aref x 1))
- ;;(show (aref x 2))
- ;;(help (aref x 3))
- (key (vector 'tool-bar func)))
- (define-key idlwave-mode-map key nil)
- (define-key idlwave-shell-mode-map key nil)))
- idlwave-toolbar))
+ (mapc (lambda (x)
+ (let* (;;(icon (aref x 0))
+ (func (aref x 1))
+ ;;(show (aref x 2))
+ ;;(help (aref x 3))
+ (key (vector 'tool-bar func)))
+ (define-key idlwave-mode-map key nil)
+ (define-key idlwave-shell-mode-map key nil)))
+ idlwave-toolbar))
(setq idlwave-toolbar-visible nil)))
(defun idlwave-toolbar-toggle (&optional force-on)
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 1e600d6c456..abe5cfe6489 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -2827,10 +2827,10 @@ If the optional argument EXPAND is non-nil then the actions in
;; Before indenting, run action routines.
;;
(if (and expand idlwave-do-actions)
- (mapcar 'idlwave-do-action idlwave-indent-expand-table))
+ (mapc 'idlwave-do-action idlwave-indent-expand-table))
;;
(if idlwave-do-actions
- (mapcar 'idlwave-do-action idlwave-indent-action-table))
+ (mapc 'idlwave-do-action idlwave-indent-action-table))
;;
;; No longer expand abbrevs on the line. The user can do this
;; manually using expand-region-abbrevs.
@@ -4242,9 +4242,9 @@ blank lines."
(defun idlwave-sintern-keyword-list (kwd-list &optional set)
"Sintern a set of keywords (file (key . link) (key2 . link2) ...)"
- (mapcar (lambda(x)
- (setcar x (idlwave-sintern-keyword (car x) set)))
- (cdr kwd-list))
+ (mapc (lambda(x)
+ (setcar x (idlwave-sintern-keyword (car x) set)))
+ (cdr kwd-list))
kwd-list)
(defun idlwave-sintern-rinfo-list (list &optional set default-dir)
@@ -5560,11 +5560,11 @@ directories and save the routine info.
;; Define the routine info list
(insert "\n(setq idlwave-user-catalog-routines\n '(")
(let ((standard-output (current-buffer)))
- (mapcar (lambda (x)
- (insert "\n ")
- (prin1 x)
- (goto-char (point-max)))
- idlwave-user-catalog-routines))
+ (mapc (lambda (x)
+ (insert "\n ")
+ (prin1 x)
+ (goto-char (point-max)))
+ idlwave-user-catalog-routines))
(insert (format "))\n\n;;; %s ends here\n"
(file-name-nondirectory idlwave-user-catalog-file)))
(goto-char (point-min))
@@ -5604,11 +5604,11 @@ directories and save the routine info.
;; Define the variable which contains a list of all scanned directories
(insert "\n(setq idlwave-path-alist\n '(")
(let ((standard-output (current-buffer)))
- (mapcar (lambda (x)
- (insert "\n ")
- (prin1 x)
- (goto-char (point-max)))
- idlwave-path-alist))
+ (mapc (lambda (x)
+ (insert "\n ")
+ (prin1 x)
+ (goto-char (point-max)))
+ idlwave-path-alist))
(insert "))\n")
(save-buffer 0)
(kill-buffer (current-buffer))))
@@ -6319,12 +6319,12 @@ When TYPE is not specified, both procedures and functions will be considered."
(if (null method)
(mapcar 'car (idlwave-class-alist))
(let (rtn)
- (mapcar (lambda (x)
- (and (nth 2 x)
- (or (not type)
- (eq type (nth 1 x)))
- (push (nth 2 x) rtn)))
- (idlwave-all-assq method (idlwave-routines)))
+ (mapc (lambda (x)
+ (and (nth 2 x)
+ (or (not type)
+ (eq type (nth 1 x)))
+ (push (nth 2 x) rtn)))
+ (idlwave-all-assq method (idlwave-routines)))
(idlwave-uniquify rtn))))
(defun idlwave-all-method-keyword-classes (method keyword &optional type)
@@ -6335,13 +6335,13 @@ When TYPE is not specified, both procedures and functions will be considered."
(null keyword))
nil
(let (rtn)
- (mapcar (lambda (x)
- (and (nth 2 x) ; non-nil class
- (or (not type) ; correct or unspecified type
- (eq type (nth 1 x)))
- (assoc keyword (idlwave-entry-keywords x))
- (push (nth 2 x) rtn)))
- (idlwave-all-assq method (idlwave-routines)))
+ (mapc (lambda (x)
+ (and (nth 2 x) ; non-nil class
+ (or (not type) ; correct or unspecified type
+ (eq type (nth 1 x)))
+ (assoc keyword (idlwave-entry-keywords x))
+ (push (nth 2 x) rtn)))
+ (idlwave-all-assq method (idlwave-routines)))
(idlwave-uniquify rtn))))
(defun idlwave-members-only (list club)
@@ -6785,12 +6785,12 @@ accumulate information on matching completions."
(message "Making completion list...")
(unless idlwave-completion-help-links ; already set somewhere?
- (mapcar (lambda (x) ; Pass link prop through to highlight-linked
- (let ((link (get-text-property 0 'link (car x))))
- (if link
- (push (cons (car x) link)
- idlwave-completion-help-links))))
- list))
+ (mapc (lambda (x) ; Pass link prop through to highlight-linked
+ (let ((link (get-text-property 0 'link (car x))))
+ (if link
+ (push (cons (car x) link)
+ idlwave-completion-help-links))))
+ list))
(let* ((list all-completions)
;; "complete" means, this is already a valid completion
(complete (memq spart all-completions))
@@ -7551,7 +7551,7 @@ The list is cached in `idlwave-class-info' for faster access."
If RECORD-LINK is non-nil, the keyword text is copied and a text
property indicating the link is added."
(let (kwds)
- (mapcar
+ (mapc
(lambda (key-list)
(let ((file (car key-list)))
(mapcar (lambda (key-cons)
@@ -8277,8 +8277,8 @@ demand _EXTRA in the keyword list."
(memq (nth 2 entry) super-classes) ; an inherited class
(eq (nth 1 entry) type) ; correct type
(eq (car entry) name) ; correct name
- (mapcar (lambda (k) (add-to-list 'keywords k))
- (idlwave-entry-keywords entry 'do-link))))
+ (mapc (lambda (k) (add-to-list 'keywords k))
+ (idlwave-entry-keywords entry 'do-link))))
(setq keywords (idlwave-uniquify keywords)))
;; Return the final list
@@ -8437,7 +8437,7 @@ If we do not know about MODULE, just return KEYWORD literally."
(if (null keywords)
(insert " No keywords accepted.")
(setq col 9)
- (mapcar
+ (mapc
(lambda (x)
(if (>= (+ col 1 (length (car x)))
(window-width))
diff --git a/lisp/progmodes/meta-mode.el b/lisp/progmodes/meta-mode.el
index a2fd9cdab04..c70f5cdb6a1 100644
--- a/lisp/progmodes/meta-mode.el
+++ b/lisp/progmodes/meta-mode.el
@@ -51,7 +51,7 @@
;; these lines to your startup file:
;;
;; (add-hook 'meta-mode-load-hook
-;; '(lambda () (require 'meta-buf)))
+;; (lambda () (require 'meta-buf)))
;;
;; The add-on package loaded this way may in turn make use of the
;; mode-hooks provided in this package to activate additional features
@@ -124,7 +124,7 @@
;;
;; This package was begun on February 1, 1997, exactly 20 years after
;; the genesis of TeX took place according to Don Knuth's own account
-;; (cf. ``The Errors of TeX'', reprinted in ``Literate Programming'',
+;; (cf. ``The Errors of TeX'', reprinted in ``Literate Programming'',
;; Chapter 10, p. 249). What better date could there be to choose?
;;
@@ -194,42 +194,42 @@
(list
;; embedded TeX code in btex ... etex
(cons (concat "\\(btex\\|verbatimtex\\)"
- "[ \t]+\\(.*\\)[ \t]+"
+ "[ \t\f]+\\(.*\\)[ \t\f]+"
"\\(etex\\)")
'((1 font-lock-keyword-face)
(2 font-lock-string-face)
(3 font-lock-keyword-face)))
;; unary macro definitions: def, vardef, let
(cons (concat "\\<" macro-keywords-1 "\\>"
- "[ \t]+\\(\\sw+\\|\\s_+\\|\\s.+\\)")
+ "[ \t\f]+\\(\\sw+\\|\\s_+\\|\\s.+\\)")
'((1 font-lock-keyword-face)
(2 font-lock-function-name-face)))
;; binary macro defintions: <leveldef> x operator y
(cons (concat "\\<" macro-keywords-2 "\\>"
- "[ \t]+\\(\\sw+\\)"
- "[ \t]*\\(\\sw+\\|\\s.+\\)"
- "[ \t]*\\(\\sw+\\)")
+ "[ \t\f]+\\(\\sw+\\)"
+ "[ \t\f]*\\(\\sw+\\|\\s.+\\)"
+ "[ \t\f]*\\(\\sw+\\)")
'((1 font-lock-keyword-face)
(2 font-lock-variable-name-face nil t)
(3 font-lock-function-name-face nil t)
(4 font-lock-variable-name-face nil t)))
;; variable declarations: numeric, pair, color, ...
(cons (concat "\\<" type-keywords "\\>"
- "\\([ \t]+\\(\\sw+\\)\\)*")
+ "\\([ \t\f]+\\(\\sw+\\)\\)*")
'((1 font-lock-type-face)
(font-lock-match-meta-declaration-item-and-skip-to-next
(goto-char (match-end 1)) nil
(1 font-lock-variable-name-face nil t))))
;; argument declarations: expr, suffix, text, ...
(cons (concat "\\<" args-keywords "\\>"
- "\\([ \t]+\\(\\sw+\\|\\s_+\\)\\)*")
+ "\\([ \t\f]+\\(\\sw+\\|\\s_+\\)\\)*")
'((1 font-lock-type-face)
(font-lock-match-meta-declaration-item-and-skip-to-next
(goto-char (match-end 1)) nil
(1 font-lock-variable-name-face nil t))))
;; special case of arguments: expr x of y
- (cons (concat "\\(expr\\)[ \t]+\\(\\sw+\\)"
- "[ \t]+\\(of\\)[ \t]+\\(\\sw+\\)")
+ (cons (concat "\\(expr\\)[ \t\f]+\\(\\sw+\\)"
+ "[ \t\f]+\\(of\\)[ \t\f]+\\(\\sw+\\)")
'((1 font-lock-type-face)
(2 font-lock-variable-name-face)
(3 font-lock-keyword-face nil t)
@@ -245,7 +245,7 @@
'font-lock-keyword-face)
;; input, generate
(cons (concat "\\<" input-keywords "\\>"
- "[ \t]+\\(\\sw+\\)")
+ "[ \t\f]+\\(\\sw+\\)")
'((1 font-lock-keyword-face)
(2 font-lock-constant-face)))
;; embedded Metafont/MetaPost code in comments
@@ -264,7 +264,7 @@
;; `forward-sexp'. The list of items is expected to be separated
;; by commas and terminated by semicolons or equals signs.
;;
- (if (looking-at "[ \t]*\\(\\sw+\\|\\s_+\\)")
+ (if (looking-at "[ \t\f]*\\(\\sw+\\|\\s_+\\)")
(save-match-data
(condition-case nil
(save-restriction
@@ -272,7 +272,7 @@
(narrow-to-region (point-min) limit)
(goto-char (match-end 1))
;; Move over any item value, etc., to the next item.
- (while (not (looking-at "[ \t]*\\(\\(,\\)\\|;\\|=\\|$\\)"))
+ (while (not (looking-at "[ \t\f]*\\(\\(,\\)\\|;\\|=\\|$\\)"))
(goto-char (or (scan-sexps (point) 1) (point-max))))
(goto-char (match-end 2)))
(error t)))))
@@ -586,7 +586,7 @@ If the list was changed, sort the list and remove duplicates first."
(if (and meta-left-comment-regexp
(looking-at meta-left-comment-regexp))
(current-column)
- (skip-chars-backward "\t ")
+ (skip-chars-backward "\t\f ")
(max (if (bolp) 0 (1+ (current-column)))
comment-column)))
@@ -605,14 +605,16 @@ If the list was changed, sort the list and remove duplicates first."
(defun meta-indent-calculate ()
"Return the indentation of current line of Metafont or MetaPost source."
+ ;; Indentation within strings is not considered as Meta* don't allow multi
+ ;; line strings.
(save-excursion
(back-to-indentation)
(cond
- ;; Comments to the left margin.
+ ;; Comments to the left margin.
((and meta-left-comment-regexp
(looking-at meta-left-comment-regexp))
0)
- ;; Comments to the right margin.
+ ;; Comments to the right margin.
((and meta-right-comment-regexp
(looking-at meta-right-comment-regexp))
comment-column)
@@ -620,42 +622,117 @@ If the list was changed, sort the list and remove duplicates first."
((and meta-ignore-comment-regexp
(looking-at meta-ignore-comment-regexp))
(current-indentation))
+ ;; Beginning of buffer.
+ ((eq (point-at-bol) (point-min))
+ 0)
;; Backindent at end of environments.
- ((looking-at
+ ((meta-indent-looking-at-code
(concat "\\<" meta-end-environment-regexp "\\>"))
- (- (meta-indent-calculate-last) meta-indent-level))
+ (- (meta-indent-current-indentation) meta-indent-level))
;; Backindent at keywords within environments.
- ((looking-at
+ ((meta-indent-looking-at-code
(concat "\\<" meta-within-environment-regexp "\\>"))
- (- (meta-indent-calculate-last) meta-indent-level))
- (t (meta-indent-calculate-last)))))
-
-(defun meta-indent-calculate-last ()
- "Return the indentation of previous line of Metafont or MetaPost source."
- (save-restriction
- (widen)
- (skip-chars-backward "\n\t ")
- (move-to-column (current-indentation))
- ;; Ignore comments.
- (while (and (looking-at comment-start) (not (bobp)))
- (skip-chars-backward "\n\t ")
- (if (not (bobp))
- (move-to-column (current-indentation))))
- (cond
- ((bobp) 0)
- (t (+ (current-indentation)
- (meta-indent-level-count)
- (cond
- ;; Compensate for backindent at end of environments.
- ((looking-at
- (concat "\\<"meta-end-environment-regexp "\\>"))
- meta-indent-level)
- ;; Compensate for backindent within environments.
- ((looking-at
- (concat "\\<" meta-within-environment-regexp "\\>"))
- meta-indent-level)
- (t 0)))))
- ))
+ (- (meta-indent-current-indentation) meta-indent-level))
+ (t (meta-indent-current-indentation)))))
+
+(defun meta-indent-in-string-p ()
+ "Tell if the point is in a string."
+ (or (nth 3 (syntax-ppss))
+ (eq (get-text-property (point) 'face) font-lock-string-face)))
+
+(defun meta-indent-looking-at-code (regexp)
+ "Same as `looking-at' but checks that the point is not in a string."
+ (unless (meta-indent-in-string-p)
+ (looking-at regexp)))
+
+(defun meta-indent-previous-line ()
+ "Go to the previous line of code, skipping comments."
+ (skip-chars-backward "\n\t\f ")
+ (move-to-column (current-indentation))
+ ;; Ignore comments.
+ (while (and (looking-at comment-start) (not (bobp)))
+ (skip-chars-backward "\n\t\f ")
+ (when (not (bobp))
+ (move-to-column (current-indentation)))))
+
+(defun meta-indent-unfinished-line ()
+ "Tell if the current line of code ends with an unfinished expression."
+ (save-excursion
+ (end-of-line)
+ ;; Skip backward the comments.
+ (let ((point-not-in-string (point)))
+ (while (search-backward comment-start (point-at-bol) t)
+ (unless (meta-indent-in-string-p)
+ (setq point-not-in-string (point))))
+ (goto-char point-not-in-string))
+ ;; Search for the end of the previous expression.
+ (if (search-backward ";" (point-at-bol) t)
+ (progn (while (and (meta-indent-in-string-p)
+ (search-backward ";" (point-at-bol) t)))
+ (if (= (char-after) ?\;)
+ (forward-char)
+ (beginning-of-line)))
+ (beginning-of-line))
+ ;; See if the last statement of the line is environment-related,
+ ;; or exists at all.
+ (if (meta-indent-looking-at-code
+ (concat "[ \t\f]*\\($\\|" (regexp-quote comment-start)
+ "\\|\\<" meta-end-environment-regexp "\\>"
+ "\\|\\<" meta-begin-environment-regexp "\\>"
+ "\\|\\<" meta-within-environment-regexp "\\>\\)"))
+ nil
+ t)))
+
+(defun meta-indent-current-indentation ()
+ "Return the indentation wanted for the current line of code."
+ (+ (meta-indent-current-nesting)
+ (if (save-excursion
+ (back-to-indentation)
+ (and (not (looking-at (concat "\\<" meta-end-environment-regexp "\\>"
+ "\\|\\<" meta-within-environment-regexp "\\>")))
+ (progn (meta-indent-previous-line)
+ (meta-indent-unfinished-line))))
+ meta-indent-level
+ 0)))
+
+(defun meta-indent-current-nesting ()
+ "Return the indentation according to the nearest environment keyword."
+ (save-excursion
+ (save-restriction
+ (widen)
+ (back-to-indentation)
+ (let ((to-add 0))
+ ;; If we found some environment marker backward...
+ (if (catch 'found
+ (while (re-search-backward
+ (concat "(\\|)\\|\\<" meta-end-environment-regexp "\\>"
+ "\\|\\<" meta-begin-environment-regexp "\\>"
+ "\\|\\<" meta-within-environment-regexp "\\>")
+ nil t)
+ ;; If we aren't in a string or in a comment, we've found something.
+ (unless (or (meta-indent-in-string-p)
+ (nth 4 (syntax-ppss)))
+ (cond ((= (char-after) ?\()
+ (setq to-add (+ to-add meta-indent-level)))
+ ((= (char-after) ?\))
+ (setq to-add (- to-add meta-indent-level)))
+ (t (throw 'found t))))))
+ (progn
+ ;; ... then use it to compute the current indentation.
+ (back-to-indentation)
+ (+ to-add (current-indentation) (meta-indent-level-count)
+ ;; Compensate for backindent of end and within keywords.
+ (if (meta-indent-looking-at-code
+ (concat "\\<" meta-end-environment-regexp "\\>\\|"
+ "\\<" meta-within-environment-regexp "\\>"))
+ meta-indent-level
+ ;; Compensate for unfinished line.
+ (if (save-excursion
+ (meta-indent-previous-line)
+ (meta-indent-unfinished-line))
+ (- meta-indent-level)
+ 0))))
+ 0)))))
(defun meta-indent-level-count ()
"Count indentation change for begin-end commands in the current line."
@@ -671,18 +748,12 @@ If the list was changed, sort the list and remove duplicates first."
(goto-char (match-beginning 0))
(cond
;; Count number of begin-end keywords within line.
- ((looking-at
+ ((meta-indent-looking-at-code
(concat "\\<" meta-begin-environment-regexp "\\>"))
(setq count (+ count meta-indent-level)))
- ((looking-at
+ ((meta-indent-looking-at-code
(concat "\\<" meta-end-environment-regexp "\\>"))
- (setq count (- count meta-indent-level)))
- ;; Count number of open-close parentheses within line.
- ((looking-at "(")
- (setq count (+ count meta-indent-level)))
- ((looking-at ")")
- (setq count (- count meta-indent-level)))
- )))
+ (setq count (- count meta-indent-level))))))
count))))
@@ -715,7 +786,7 @@ Returns t unless search stops due to beginning or end of buffer."
(concat "\\<" meta-begin-defun-regexp "\\>") nil t arg)
(progn (goto-char (match-beginning 0))
(skip-chars-backward "%")
- (skip-chars-backward " \t") t)))
+ (skip-chars-backward " \t\f") t)))
(defun meta-end-of-defun (&optional arg)
"Move forward to end of a defun in Metafont or MetaPost code.
@@ -729,7 +800,7 @@ Returns t unless search stops due to beginning or end of buffer."
(concat "\\<" meta-end-defun-regexp "\\>") nil t arg)
(progn (goto-char (match-end 0))
(skip-chars-forward ";")
- (skip-chars-forward " \t")
+ (skip-chars-forward " \t\f")
(if (looking-at "\n") (forward-line 1)) t)))
@@ -797,78 +868,74 @@ The environment marked is the one that contains point or follows point."
"Abbrev table used in Metafont or MetaPost mode.")
(define-abbrev-table 'meta-mode-abbrev-table ())
-(defvar meta-mode-syntax-table nil
+(defvar meta-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ ;; underscores are word constituents
+ (modify-syntax-entry ?_ "w" st)
+ ;; miscellaneous non-word symbols
+ (modify-syntax-entry ?# "_" st)
+ (modify-syntax-entry ?@ "_" st)
+ (modify-syntax-entry ?$ "_" st)
+ (modify-syntax-entry ?? "_" st)
+ (modify-syntax-entry ?! "_" st)
+ ;; binary operators
+ (modify-syntax-entry ?& "." st)
+ (modify-syntax-entry ?+ "." st)
+ (modify-syntax-entry ?- "." st)
+ (modify-syntax-entry ?/ "." st)
+ (modify-syntax-entry ?* "." st)
+ (modify-syntax-entry ?. "." st)
+ (modify-syntax-entry ?: "." st)
+ (modify-syntax-entry ?= "." st)
+ (modify-syntax-entry ?< "." st)
+ (modify-syntax-entry ?> "." st)
+ (modify-syntax-entry ?| "." st)
+ ;; opening and closing delimiters
+ (modify-syntax-entry ?\( "()" st)
+ (modify-syntax-entry ?\) ")(" st)
+ (modify-syntax-entry ?\[ "(]" st)
+ (modify-syntax-entry ?\] ")[" st)
+ (modify-syntax-entry ?\{ "(}" st)
+ (modify-syntax-entry ?\} "){" st)
+ ;; comment character
+ (modify-syntax-entry ?% "<" st)
+ (modify-syntax-entry ?\n ">" st)
+ ;; escape character, needed for embedded TeX code
+ (modify-syntax-entry ?\\ "\\" st)
+ st)
"Syntax table used in Metafont or MetaPost mode.")
-(if meta-mode-syntax-table
- ()
- (setq meta-mode-syntax-table (make-syntax-table))
- ;; underscores are word constituents
- (modify-syntax-entry ?_ "w" meta-mode-syntax-table)
- ;; miscellaneous non-word symbols
- (modify-syntax-entry ?# "_" meta-mode-syntax-table)
- (modify-syntax-entry ?@ "_" meta-mode-syntax-table)
- (modify-syntax-entry ?$ "_" meta-mode-syntax-table)
- (modify-syntax-entry ?? "_" meta-mode-syntax-table)
- (modify-syntax-entry ?! "_" meta-mode-syntax-table)
- ;; binary operators
- (modify-syntax-entry ?& "." meta-mode-syntax-table)
- (modify-syntax-entry ?+ "." meta-mode-syntax-table)
- (modify-syntax-entry ?- "." meta-mode-syntax-table)
- (modify-syntax-entry ?/ "." meta-mode-syntax-table)
- (modify-syntax-entry ?* "." meta-mode-syntax-table)
- (modify-syntax-entry ?. "." meta-mode-syntax-table)
- (modify-syntax-entry ?: "." meta-mode-syntax-table)
- (modify-syntax-entry ?= "." meta-mode-syntax-table)
- (modify-syntax-entry ?< "." meta-mode-syntax-table)
- (modify-syntax-entry ?> "." meta-mode-syntax-table)
- (modify-syntax-entry ?| "." meta-mode-syntax-table)
- ;; opening and closing delimiters
- (modify-syntax-entry ?\( "()" meta-mode-syntax-table)
- (modify-syntax-entry ?\) ")(" meta-mode-syntax-table)
- (modify-syntax-entry ?\[ "(]" meta-mode-syntax-table)
- (modify-syntax-entry ?\] ")[" meta-mode-syntax-table)
- (modify-syntax-entry ?\{ "(}" meta-mode-syntax-table)
- (modify-syntax-entry ?\} "){" meta-mode-syntax-table)
- ;; comment character
- (modify-syntax-entry ?% "<" meta-mode-syntax-table)
- (modify-syntax-entry ?\n ">" meta-mode-syntax-table)
- ;; escape character, needed for embedded TeX code
- (modify-syntax-entry ?\\ "\\" meta-mode-syntax-table)
- )
-(defvar meta-mode-map nil
+(defvar meta-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "\C-m" 'reindent-then-newline-and-indent)
+ ;; Comment Paragraphs:
+ ;; (define-key map "\M-a" 'backward-sentence)
+ ;; (define-key map "\M-e" 'forward-sentence)
+ ;; (define-key map "\M-h" 'mark-paragraph)
+ ;; (define-key map "\M-q" 'fill-paragraph)
+ ;; Navigation:
+ (define-key map "\M-\C-a" 'meta-beginning-of-defun)
+ (define-key map "\M-\C-e" 'meta-end-of-defun)
+ (define-key map "\M-\C-h" 'meta-mark-defun)
+ ;; Indentation:
+ (define-key map "\M-\C-q" 'meta-indent-defun)
+ (define-key map "\C-c\C-qe" 'meta-indent-defun)
+ (define-key map "\C-c\C-qr" 'meta-indent-region)
+ (define-key map "\C-c\C-qb" 'meta-indent-buffer)
+ ;; Commenting Out:
+ (define-key map "\C-c%" 'meta-comment-defun)
+ ;; (define-key map "\C-uC-c%" 'meta-uncomment-defun)
+ (define-key map "\C-c;" 'meta-comment-region)
+ (define-key map "\C-c:" 'meta-uncomment-region)
+ ;; Symbol Completion:
+ (define-key map "\M-\t" 'meta-complete-symbol)
+ ;; Shell Commands:
+ ;; (define-key map "\C-c\C-c" 'meta-command-file)
+ ;; (define-key map "\C-c\C-k" 'meta-kill-job)
+ ;; (define-key map "\C-c\C-l" 'meta-recenter-output)
+ map)
"Keymap used in Metafont or MetaPost mode.")
-(if meta-mode-map
- ()
- (setq meta-mode-map (make-sparse-keymap))
- (define-key meta-mode-map "\t" 'meta-indent-line)
- (define-key meta-mode-map "\C-m" 'reindent-then-newline-and-indent)
- ;; Comment Paragraphs:
-; (define-key meta-mode-map "\M-a" 'backward-sentence)
-; (define-key meta-mode-map "\M-e" 'forward-sentence)
-; (define-key meta-mode-map "\M-h" 'mark-paragraph)
-; (define-key meta-mode-map "\M-q" 'fill-paragraph)
- ;; Navigation:
- (define-key meta-mode-map "\M-\C-a" 'meta-beginning-of-defun)
- (define-key meta-mode-map "\M-\C-e" 'meta-end-of-defun)
- (define-key meta-mode-map "\M-\C-h" 'meta-mark-defun)
- ;; Indentation:
- (define-key meta-mode-map "\M-\C-q" 'meta-indent-defun)
- (define-key meta-mode-map "\C-c\C-qe" 'meta-indent-defun)
- (define-key meta-mode-map "\C-c\C-qr" 'meta-indent-region)
- (define-key meta-mode-map "\C-c\C-qb" 'meta-indent-buffer)
- ;; Commenting Out:
- (define-key meta-mode-map "\C-c%" 'meta-comment-defun)
-; (define-key meta-mode-map "\C-uC-c%" 'meta-uncomment-defun)
- (define-key meta-mode-map "\C-c;" 'meta-comment-region)
- (define-key meta-mode-map "\C-c:" 'meta-uncomment-region)
- ;; Symbol Completion:
- (define-key meta-mode-map "\M-\t" 'meta-complete-symbol)
- ;; Shell Commands:
-; (define-key meta-mode-map "\C-c\C-c" 'meta-command-file)
-; (define-key meta-mode-map "\C-c\C-k" 'meta-kill-job)
-; (define-key meta-mode-map "\C-c\C-l" 'meta-recenter-output)
- )
+
(easy-menu-define
meta-mode-menu meta-mode-map
@@ -947,11 +1014,14 @@ The environment marked is the one that contains point or follows point."
(make-local-variable 'comment-start)
(make-local-variable 'comment-end)
(make-local-variable 'comment-multi-line)
- (setq comment-start-skip "%+[ \t]*")
+ (setq comment-start-skip "%+[ \t\f]*")
(setq comment-start "%")
(setq comment-end "")
(setq comment-multi-line nil)
+ ;; We use `back-to-indentation' but \f is no indentation sign.
+ (modify-syntax-entry ?\f "_ ")
+
(make-local-variable 'parse-sexp-ignore-comments)
(setq parse-sexp-ignore-comments t)
@@ -1033,5 +1103,5 @@ Turning on MetaPost mode calls the value of the variable
(provide 'meta-mode)
(run-hooks 'meta-mode-load-hook)
-;;; arch-tag: ec2916b2-3a83-4cf7-962d-d8019370c006
+;; arch-tag: ec2916b2-3a83-4cf7-962d-d8019370c006
;;; meta-mode.el ends here
diff --git a/lisp/progmodes/mixal-mode.el b/lisp/progmodes/mixal-mode.el
index 60dcdc625a8..f4ab9e5e4f3 100644
--- a/lisp/progmodes/mixal-mode.el
+++ b/lisp/progmodes/mixal-mode.el
@@ -1091,15 +1091,19 @@ EXECUTION-TIME holds info about the time it takes, number or string.")
(defun mixal-run ()
"Run mixal file in current buffer, assumes that file has been compiled."
(interactive)
- (mixvm (concat "mixvm -r -t -d "
- (file-name-sans-extension (buffer-file-name)))))
+ (if (fboundp 'mixvm)
+ (mixvm (concat "mixvm -r -t -d "
+ (file-name-sans-extension (buffer-file-name))))
+ (error "mixvm.el needs to be loaded to run `mixvm'")))
(defun mixal-debug ()
"Start mixvm for debugging.
Assumes that file has been compiled with debugging support."
(interactive)
- (mixvm (concat "mixvm "
- (file-name-sans-extension (buffer-file-name)))))
+ (if (fboundp 'mixvm)
+ (mixvm (concat "mixvm "
+ (file-name-sans-extension (buffer-file-name))))
+ (error "mixvm.el needs to be loaded to run `mixvm'")))
;;;###autoload
(define-derived-mode mixal-mode fundamental-mode "mixal"
diff --git a/lisp/progmodes/octave-mod.el b/lisp/progmodes/octave-mod.el
index dc550a202e2..e8246ddb816 100644
--- a/lisp/progmodes/octave-mod.el
+++ b/lisp/progmodes/octave-mod.el
@@ -52,6 +52,8 @@
(defvar inferior-octave-output-string nil)
(defvar inferior-octave-receive-in-progress nil)
+(declare-function inferior-octave-send-list-and-digest "octave-inf" (list))
+
(defconst octave-maintainer-address
"Kurt Hornik <Kurt.Hornik@wu-wien.ac.at>, bug-gnu-emacs@gnu.org"
"Current maintainer of the Emacs Octave package.")
@@ -63,7 +65,7 @@ All Octave abbrevs start with a grave accent (`).")
(unless octave-abbrev-table
(define-abbrev-table 'octave-abbrev-table ()))
-(let ((ac abbrevs-changed))
+(let ((abbrevs-changed abbrevs-changed))
(define-abbrev octave-abbrev-table "`a" "all_va_args" nil 0 t)
(define-abbrev octave-abbrev-table "`b" "break" nil 0 t)
(define-abbrev octave-abbrev-table "`cs" "case" nil 0 t)
@@ -89,10 +91,10 @@ All Octave abbrevs start with a grave accent (`).")
(define-abbrev octave-abbrev-table "`r" "return" nil 0 t)
(define-abbrev octave-abbrev-table "`s" "switch" nil 0 t)
(define-abbrev octave-abbrev-table "`t" "try" nil 0 t)
+ (define-abbrev octave-abbrev-table "`u" "until ()" nil 0 t)
(define-abbrev octave-abbrev-table "`up" "unwind_protect" nil 0 t)
(define-abbrev octave-abbrev-table "`upc" "unwind_protect_cleanup" nil 0 t)
- (define-abbrev octave-abbrev-table "`w" "while ()" nil 0 t)
- (setq abbrevs-changed ac))
+ (define-abbrev octave-abbrev-table "`w" "while ()" nil 0 t))
(defvar octave-comment-char ?#
"Character to start an Octave comment.")
@@ -103,32 +105,34 @@ All Octave abbrevs start with a grave accent (`).")
"Regexp to match the start of an Octave comment up to its body.")
(defvar octave-begin-keywords
- '("for" "function" "if" "switch" "try" "unwind_protect" "while"))
+ '("do" "for" "function" "if" "switch" "try" "unwind_protect" "while"))
(defvar octave-else-keywords
'("case" "catch" "else" "elseif" "otherwise" "unwind_protect_cleanup"))
+;; FIXME: only use specific "end" tokens here to avoid confusion when "end"
+;; is used in indexing (the real fix is much more complex).
(defvar octave-end-keywords
- '("end" "endfor" "endfunction" "endif" "endswitch" "end_try_catch"
- "end_unwind_protect" "endwhile"))
+ '("endfor" "endfunction" "endif" "endswitch" "end_try_catch"
+ "end_unwind_protect" "endwhile" "until"))
(defvar octave-reserved-words
(append octave-begin-keywords
octave-else-keywords
octave-end-keywords
- '("all_va_args" "break" "continue" "global" "gplot" "gsplot"
- "replot" "return"))
+ '("break" "continue" "end" "global" "persistent" "return"))
"Reserved words in Octave.")
(defvar octave-text-functions
'("casesen" "cd" "chdir" "clear" "diary" "dir" "document" "echo"
- "edit_history" "format" "gset" "gshow" "help" "history" "hold"
- "load" "ls" "more" "run_history" "save" "set" "show" "type"
+ "edit_history" "format" "help" "history" "hold"
+ "load" "ls" "more" "run_history" "save" "type"
"which" "who" "whos")
- "Text functions in Octave (these names are also reserved).")
+ "Text functions in Octave.")
(defvar octave-variables
- '("EDITOR" "EXEC_PATH" "F_DUPFD" "F_GETFD" "F_GETFL" "F_SETFD"
- "F_SETFL" "I" "IMAGEPATH" "INFO_FILE" "INFO_PROGRAM" "Inf" "J"
- "LOADPATH" "NaN" "OCTAVE_VERSION" "O_APPEND" "O_CREAT" "O_EXCL"
+ '("DEFAULT_EXEC_PATH" "DEFAULT_LOADPATH"
+ "EDITOR" "EXEC_PATH" "F_DUPFD" "F_GETFD" "F_GETFL" "F_SETFD"
+ "F_SETFL" "I" "IMAGE_PATH" "Inf" "J"
+ "NaN" "OCTAVE_VERSION" "O_APPEND" "O_CREAT" "O_EXCL"
"O_NONBLOCK" "O_RDONLY" "O_RDWR" "O_TRUNC" "O_WRONLY" "PAGER" "PS1"
"PS2" "PS4" "PWD" "SEEK_CUR" "SEEK_END" "SEEK_SET" "__F_DUPFD__"
"__F_GETFD__" "__F_GETFL__" "__F_SETFD__" "__F_SETFL__" "__I__"
@@ -136,29 +140,23 @@ All Octave abbrevs start with a grave accent (`).")
"__O_CREAT__" "__O_EXCL__" "__O_NONBLOCK__" "__O_RDONLY__"
"__O_RDWR__" "__O_TRUNC__" "__O_WRONLY__" "__PWD__" "__SEEK_CUR__"
"__SEEK_END__" "__SEEK_SET__" "__argv__" "__e__" "__eps__"
- "__error_text__" "__i__" "__inf__" "__j__" "__nan__" "__pi__"
+ "__i__" "__inf__" "__j__" "__nan__" "__pi__"
"__program_invocation_name__" "__program_name__" "__realmax__"
"__realmin__" "__stderr__" "__stdin__" "__stdout__" "ans" "argv"
- "automatic_replot" "beep_on_error" "completion_append_char"
- "default_return_value" "default_save_format"
- "define_all_return_values" "do_fortran_indexing" "e"
- "echo_executing_commands" "empty_list_elements_ok" "eps"
- "error_text" "gnuplot_binary" "gnuplot_has_multiplot" "history_file"
- "history_size" "ignore_function_time_stamp" "implicit_str_to_num_ok"
- "inf" "nan" "nargin" "ok_to_lose_imaginary_part"
- "output_max_field_width" "output_precision"
+ "beep_on_error" "completion_append_char"
+ "crash_dumps_octave_core" "default_save_format"
+ "e" "echo_executing_commands" "eps"
+ "error_text" "gnuplot_binary" "history_file"
+ "history_size" "ignore_function_time_stamp"
+ "inf" "nan" "nargin" "output_max_field_width" "output_precision"
"page_output_immediately" "page_screen_output" "pi"
- "prefer_column_vectors" "prefer_zero_one_indexing"
"print_answer_id_name" "print_empty_dimensions"
- "program_invocation_name" "program_name" "propagate_empty_matrices"
- "realmax" "realmin" "resize_on_range_error"
- "return_last_computed_value" "save_precision" "saving_history"
+ "program_invocation_name" "program_name"
+ "realmax" "realmin" "return_last_computed_value" "save_precision"
+ "saving_history" "sighup_dumps_octave_core" "sigterm_dumps_octave_core"
"silent_functions" "split_long_rows" "stderr" "stdin" "stdout"
"string_fill_char" "struct_levels_to_print"
- "suppress_verbose_help_message" "treat_neg_dim_as_zero"
- "warn_assign_as_truth_value" "warn_comma_in_global_decl"
- "warn_divide_by_zero" "warn_function_name_clash"
- "warn_missing_semicolon" "whitespace_in_literal_matrix")
+ "suppress_verbose_help_message")
"Builtin variables in Octave.")
(defvar octave-function-header-regexp
@@ -193,22 +191,18 @@ parenthetical grouping.")
"Additional Octave expressions to highlight.")
(defcustom inferior-octave-buffer "*Inferior Octave*"
- "*Name of buffer for running an inferior Octave process."
+ "Name of buffer for running an inferior Octave process."
:type 'string
:group 'octave-inferior)
(defvar inferior-octave-process nil)
-(defvar octave-mode-map nil
- "Keymap used in Octave mode.")
-(if octave-mode-map
- ()
+(defvar octave-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "`" 'octave-abbrev-start)
(define-key map ";" 'octave-electric-semi)
(define-key map " " 'octave-electric-space)
(define-key map "\n" 'octave-reindent-then-newline-and-indent)
- (define-key map "\t" 'indent-according-to-mode)
(define-key map "\e;" 'octave-indent-for-comment)
(define-key map "\e\n" 'octave-indent-new-comment-line)
(define-key map "\e\t" 'octave-complete-symbol)
@@ -245,49 +239,51 @@ parenthetical grouping.")
(define-key map "\C-c\C-i\C-s" 'octave-show-process-buffer)
(define-key map "\C-c\C-i\C-h" 'octave-hide-process-buffer)
(define-key map "\C-c\C-i\C-k" 'octave-kill-process)
- (setq octave-mode-map map)))
+ map)
+ "Keymap used in Octave mode.")
+
(defvar octave-mode-menu
- (list "Octave"
- (list "Lines"
- ["Previous Code Line" octave-previous-code-line t]
- ["Next Code Line" octave-next-code-line t]
- ["Begin of Continuation" octave-beginning-of-line t]
- ["End of Continuation" octave-end-of-line t]
- ["Split Line at Point" octave-indent-new-comment-line t])
- (list "Blocks"
- ["Next Block" octave-forward-block t]
- ["Previous Block" octave-backward-block t]
- ["Down Block" octave-down-block t]
- ["Up Block" octave-backward-up-block t]
- ["Mark Block" octave-mark-block t]
- ["Close Block" octave-close-block t])
- (list "Functions"
- ["Begin of Function" octave-beginning-of-defun t]
- ["End of Function" octave-end-of-defun t]
- ["Mark Function" octave-mark-defun t]
- ["Indent Function" octave-indent-defun t]
- ["Insert Function" octave-insert-defun t])
- "-"
- (list "Debug"
- ["Send Current Line" octave-send-line t]
- ["Send Current Block" octave-send-block t]
- ["Send Current Function" octave-send-defun t]
- ["Send Region" octave-send-region t]
- ["Show Process Buffer" octave-show-process-buffer t]
- ["Hide Process Buffer" octave-hide-process-buffer t]
- ["Kill Process" octave-kill-process t])
- "-"
- ["Indent Line" indent-according-to-mode t]
- ["Complete Symbol" octave-complete-symbol t]
- "-"
- ["Toggle Abbrev Mode" abbrev-mode t]
- ["Toggle Auto-Fill Mode" auto-fill-mode t]
- "-"
- ["Submit Bug Report" octave-submit-bug-report t]
- "-"
- ["Describe Octave Mode" octave-describe-major-mode t]
- ["Lookup Octave Index" octave-help t])
+ '("Octave"
+ '("Lines"
+ ["Previous Code Line" octave-previous-code-line t]
+ ["Next Code Line" octave-next-code-line t]
+ ["Begin of Continuation" octave-beginning-of-line t]
+ ["End of Continuation" octave-end-of-line t]
+ ["Split Line at Point" octave-indent-new-comment-line t])
+ '("Blocks"
+ ["Next Block" octave-forward-block t]
+ ["Previous Block" octave-backward-block t]
+ ["Down Block" octave-down-block t]
+ ["Up Block" octave-backward-up-block t]
+ ["Mark Block" octave-mark-block t]
+ ["Close Block" octave-close-block t])
+ '("Functions"
+ ["Begin of Function" octave-beginning-of-defun t]
+ ["End of Function" octave-end-of-defun t]
+ ["Mark Function" octave-mark-defun t]
+ ["Indent Function" octave-indent-defun t]
+ ["Insert Function" octave-insert-defun t])
+ "-"
+ '("Debug"
+ ["Send Current Line" octave-send-line t]
+ ["Send Current Block" octave-send-block t]
+ ["Send Current Function" octave-send-defun t]
+ ["Send Region" octave-send-region t]
+ ["Show Process Buffer" octave-show-process-buffer t]
+ ["Hide Process Buffer" octave-hide-process-buffer t]
+ ["Kill Process" octave-kill-process t])
+ "-"
+ ["Indent Line" indent-according-to-mode t]
+ ["Complete Symbol" octave-complete-symbol t]
+ "-"
+ ["Toggle Abbrev Mode" abbrev-mode t]
+ ["Toggle Auto-Fill Mode" auto-fill-mode t]
+ "-"
+ ["Submit Bug Report" octave-submit-bug-report t]
+ "-"
+ ["Describe Octave Mode" octave-describe-major-mode t]
+ ["Lookup Octave Index" octave-help t])
"Menu for Octave mode.")
(defvar octave-mode-syntax-table
@@ -316,23 +312,23 @@ parenthetical grouping.")
"Syntax table in use in `octave-mode' buffers.")
(defcustom octave-auto-indent nil
- "*Non-nil means indent line after a semicolon or space in Octave mode."
+ "Non-nil means indent line after a semicolon or space in Octave mode."
:type 'boolean
:group 'octave)
(defcustom octave-auto-newline nil
- "*Non-nil means automatically newline after a semicolon in Octave mode."
+ "Non-nil means automatically newline after a semicolon in Octave mode."
:type 'boolean
:group 'octave)
(defcustom octave-blink-matching-block t
- "*Control the blinking of matching Octave block keywords.
+ "Control the blinking of matching Octave block keywords.
Non-nil means show matching begin of block when inserting a space,
newline or semicolon after an else or end keyword."
:type 'boolean
:group 'octave)
(defcustom octave-block-offset 2
- "*Extra indentation applied to statements in Octave block structures."
+ "Extra indentation applied to statements in Octave block structures."
:type 'integer
:group 'octave)
@@ -352,15 +348,17 @@ newline or semicolon after an else or end keyword."
(concat octave-block-begin-regexp "\\|" octave-block-end-regexp))
(defvar octave-block-else-or-end-regexp
(concat octave-block-else-regexp "\\|" octave-block-end-regexp))
+;; FIXME: only use specific "end" tokens here to avoid confusion when "end"
+;; is used in indexing (the real fix is much more complex).
(defvar octave-block-match-alist
- '(("for" . ("end" "endfor"))
- ("function" . ("end" "endfunction"))
- ("if" . ("else" "elseif" "end" "endif"))
- ("switch" . ("case" "otherwise" "end" "endswitch"))
- ("try" . ("catch" "end" "end_try_catch"))
- ("unwind_protect" . ("unwind_protect_cleanup" "end"
- "end_unwind_protect"))
- ("while" . ("end" "endwhile")))
+ '(("do" . ("until"))
+ ("for" . ("endfor"))
+ ("function" . ("endfunction"))
+ ("if" . ("else" "elseif" "endif"))
+ ("switch" . ("case" "otherwise" "endswitch"))
+ ("try" . ("catch" "end_try_catch"))
+ ("unwind_protect" . ("unwind_protect_cleanup" "end_unwind_protect"))
+ ("while" . ("endwhile")))
"Alist with Octave's matching block keywords.
Has Octave's begin keywords as keys and a list of the matching else or
end keywords as associated values.")
@@ -370,13 +368,13 @@ end keywords as associated values.")
"String to insert to start a new Octave comment on an empty line.")
(defcustom octave-continuation-offset 4
- "*Extra indentation applied to Octave continuation lines."
+ "Extra indentation applied to Octave continuation lines."
:type 'integer
:group 'octave)
(defvar octave-continuation-regexp
"[^#%\n]*\\(\\\\\\|\\.\\.\\.\\)\\s-*\\(\\s<.*\\)?$")
(defcustom octave-continuation-string "\\"
- "*Character string used for Octave continuation lines. Normally \\."
+ "Character string used for Octave continuation lines. Normally \\."
:type 'string
:group 'octave)
@@ -392,27 +390,22 @@ Currently, only builtin variables can be completed.")
(list nil octave-function-header-regexp 3))
"Imenu expression for Octave mode. See `imenu-generic-expression'.")
-(defcustom octave-mode-startup-message t
- "*nil means do not display the Octave mode startup message."
- :type 'boolean
- :group 'octave)
-
(defcustom octave-mode-hook nil
- "*Hook to be run when Octave mode is started."
+ "Hook to be run when Octave mode is started."
:type 'hook
:group 'octave)
(defcustom octave-send-show-buffer t
- "*Non-nil means display `inferior-octave-buffer' after sending to it."
+ "Non-nil means display `inferior-octave-buffer' after sending to it."
:type 'boolean
:group 'octave)
(defcustom octave-send-line-auto-forward t
- "*Control auto-forward after sending to the inferior Octave process.
+ "Control auto-forward after sending to the inferior Octave process.
Non-nil means always go to the next Octave code line after sending."
:type 'boolean
:group 'octave)
(defcustom octave-send-echo-input t
- "*Non-nil means echo input sent to the inferior Octave process."
+ "Non-nil means echo input sent to the inferior Octave process."
:type 'boolean
:group 'octave)
@@ -423,7 +416,7 @@ Non-nil means always go to the next Octave code line after sending."
This mode makes it easier to write Octave code by helping with
indentation, doing some of the typing for you (with Abbrev mode) and by
-showing keywords, comments, strings, etc. in different faces (with
+showing keywords, comments, strings, etc.. in different faces (with
Font Lock mode on terminals that support it).
Octave itself is a high-level language, primarily intended for numerical
@@ -433,7 +426,7 @@ can also be stored in files, and it can be used in a batch mode (which
is why you need this mode!).
The latest released version of Octave is always available via anonymous
-ftp from bevo.che.wisc.edu in the directory `/pub/octave'. Complete
+ftp from ftp.octave.org in the directory `/pub/octave'. Complete
source and binaries for several popular systems are available.
Type \\[list-abbrevs] to display the built-in abbrevs for Octave keywords.
@@ -446,43 +439,39 @@ Keybindings
Variables you can use to customize Octave mode
==============================================
-octave-auto-indent
+`octave-auto-indent'
Non-nil means indent current line after a semicolon or space.
Default is nil.
-octave-auto-newline
+`octave-auto-newline'
Non-nil means auto-insert a newline and indent after a semicolon.
Default is nil.
-octave-blink-matching-block
+`octave-blink-matching-block'
Non-nil means show matching begin of block when inserting a space,
newline or semicolon after an else or end keyword. Default is t.
-octave-block-offset
+`octave-block-offset'
Extra indentation applied to statements in block structures.
Default is 2.
-octave-continuation-offset
+`octave-continuation-offset'
Extra indentation applied to Octave continuation lines.
Default is 4.
-octave-continuation-string
+`octave-continuation-string'
String used for Octave continuation lines.
Default is a backslash.
-octave-mode-startup-message
- nil means do not display the Octave mode startup message.
- Default is t.
-
-octave-send-echo-input
+`octave-send-echo-input'
Non-nil means always display `inferior-octave-buffer' after sending a
command to the inferior Octave process.
-octave-send-line-auto-forward
+`octave-send-line-auto-forward'
Non-nil means always go to the next unsent line of Octave code after
sending a line to the inferior Octave process.
-octave-send-echo-input
+`octave-send-echo-input'
Non-nil means echo input sent to the inferior Octave process.
Turning on Octave mode runs the hook `octave-mode-hook'.
@@ -490,19 +479,15 @@ Turning on Octave mode runs the hook `octave-mode-hook'.
To begin using this mode for all `.m' files that you edit, add the
following lines to your `.emacs' file:
- (autoload 'octave-mode \"octave-mod\" nil t)
- (setq auto-mode-alist
- (cons '(\"\\\\.m$\" . octave-mode) auto-mode-alist))
+ (add-to-list 'auto-mode-alist '(\"\\\\.m\\\\'\" . octave-mode))
-To automatically turn on the abbrev, auto-fill and font-lock features,
+To automatically turn on the abbrev and auto-fill features,
add the following lines to your `.emacs' file as well:
(add-hook 'octave-mode-hook
(lambda ()
(abbrev-mode 1)
- (auto-fill-mode 1)
- (if (eq window-system 'x)
- (font-lock-mode 1))))
+ (auto-fill-mode 1)))
To submit a problem report, enter \\[octave-submit-bug-report] from \
an Octave mode buffer.
@@ -638,9 +623,6 @@ the end keyword."
(delete-horizontal-space)
(insert (concat " " octave-continuation-string))))
-(defvar octave-xemacs-p
- (string-match "XEmacs\\|Lucid" emacs-version))
-
;;; Comments
(defun octave-comment-region (beg end &optional arg)
"Comment or uncomment each line in the region as Octave code.
@@ -788,7 +770,7 @@ The new line is properly indented."
(octave-reindent-then-newline-and-indent))))
(defun octave-indent-defun ()
- "Properly indents the Octave function which contains point."
+ "Properly indent the Octave function which contains point."
(interactive)
(save-excursion
(octave-mark-defun)
@@ -871,8 +853,8 @@ does not end in `...' or `\\' or is inside an open parenthesis list."
(zerop (forward-line 1)))))
(end-of-line)))
-(defun octave-scan-blocks (from count depth)
- "Scan from character number FROM by COUNT Octave begin-end blocks.
+(defun octave-scan-blocks (count depth)
+ "Scan from point by COUNT Octave begin-end blocks.
Returns the character number of the position thus found.
If DEPTH is nonzero, block depth begins counting from that value.
@@ -910,7 +892,7 @@ With argument, do it that many times.
Negative arg -N means move backward across N blocks."
(interactive "p")
(or arg (setq arg 1))
- (goto-char (or (octave-scan-blocks (point) arg 0) (buffer-end arg))))
+ (goto-char (or (octave-scan-blocks arg 0) (buffer-end arg))))
(defun octave-backward-block (&optional arg)
"Move backward across one balanced Octave begin-end block.
@@ -928,7 +910,7 @@ In Lisp programs, an argument is required."
(interactive "p")
(let ((inc (if (> arg 0) 1 -1)))
(while (/= arg 0)
- (goto-char (or (octave-scan-blocks (point) inc -1)
+ (goto-char (or (octave-scan-blocks inc -1)
(buffer-end arg)))
(setq arg (- arg inc)))))
@@ -948,7 +930,7 @@ In Lisp programs, an argument is required."
(interactive "p")
(let ((inc (if (> arg 0) 1 -1)))
(while (/= arg 0)
- (goto-char (or (octave-scan-blocks (point) inc 1)
+ (goto-char (or (octave-scan-blocks inc 1)
(buffer-end arg)))
(setq arg (- arg inc)))))
@@ -1164,6 +1146,8 @@ otherwise."
(defun octave-fill-paragraph (&optional arg)
"Fill paragraph of Octave code, handling Octave comments."
+ ;; FIXME: now that the default fill-paragraph takes care of similar issues,
+ ;; this seems obsolete. --Stef
(interactive "P")
(save-excursion
(let ((end (progn (forward-paragraph) (point)))
@@ -1356,7 +1340,7 @@ Note that all Octave mode abbrevs start with a grave accent."
(self-insert-command 1)
(let (c)
(insert last-command-char)
- (if (if octave-xemacs-p
+ (if (if (featurep 'xemacs)
(or (eq (event-to-character (setq c (next-event))) ??)
(eq (event-to-character c) help-char))
(or (eq (setq c (read-event)) ??)
@@ -1404,7 +1388,7 @@ entered without parens)."
;;; Menu
(defun octave-add-octave-menu ()
- "Adds the `Octave' menu to the menu bar in Octave mode."
+ "Add the `Octave' menu to the menu bar in Octave mode."
(require 'easymenu)
(easy-menu-define octave-mode-menu-map octave-mode-map
"Menu keymap for Octave mode." octave-mode-menu)
@@ -1534,7 +1518,6 @@ code line."
'octave-continuation-offset
'octave-continuation-string
'octave-help-files
- 'octave-mode-startup-message
'octave-send-echo-input
'octave-send-line-auto-forward
'octave-send-show-buffer))))
@@ -1543,5 +1526,5 @@ code line."
(provide 'octave-mod)
-;;; arch-tag: 05f1ce09-be87-4c00-803e-4919ffa26c23
+;; arch-tag: 05f1ce09-be87-4c00-803e-4919ffa26c23
;;; octave-mod.el ends here
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 7cff1bc516e..190442bf26e 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -32,7 +32,7 @@
;;; Code:
(defvar comint-prompt-regexp)
-
+(defvar comint-process-echoes)
(defgroup prolog nil
"Major mode for editing and running Prolog under Emacs."
@@ -240,6 +240,11 @@ rigidly along with this one (not yet)."
(defvar inferior-prolog-mode-syntax-table prolog-mode-syntax-table)
(defvar inferior-prolog-mode-abbrev-table prolog-mode-abbrev-table)
+(declare-function comint-mode "../comint")
+(declare-function comint-send-string "../comint" (process string))
+(declare-function comint-send-region "../comint" (process start end))
+(declare-function comint-send-eof "../comint" ())
+
(define-derived-mode inferior-prolog-mode comint-mode "Inferior Prolog"
"Major mode for interacting with an inferior Prolog process.
@@ -269,6 +274,12 @@ Return not at end copies rest of line to end and sends it.
(defvar inferior-prolog-buffer nil)
+(defvar inferior-prolog-flavor 'unknown
+ "Either a symbol or a buffer position offset by one.
+If a buffer position, the flavor has not been determined yet and
+it is expected that the process's output has been or will
+be inserted at that position plus one.")
+
(defun inferior-prolog-run (&optional name)
(with-current-buffer (make-comint "prolog" (or name prolog-program-name))
(inferior-prolog-mode)
@@ -302,12 +313,6 @@ Return not at end copies rest of line to end and sends it.
;; Try again.
(inferior-prolog-process))))
-(defvar inferior-prolog-flavor 'unknown
- "Either a symbol or a buffer position offset by one.
-If a buffer position, the flavor has not been determined yet and
-it is expected that the process's output has been or will
-be inserted at that position plus one.")
-
(defun inferior-prolog-guess-flavor (&optional ignored)
(save-excursion
(goto-char (1+ inferior-prolog-flavor))
diff --git a/lisp/progmodes/ps-mode.el b/lisp/progmodes/ps-mode.el
index 12b28fe74f2..8b26db1a12e 100644
--- a/lisp/progmodes/ps-mode.el
+++ b/lisp/progmodes/ps-mode.el
@@ -418,7 +418,7 @@ If nil, the following are tried in turn, until success:
(define-key ps-mode-map "\C-c\C-o" 'ps-mode-comment-out-region)
(define-key ps-mode-map "\C-c\C-k" 'ps-run-kill)
(define-key ps-mode-map "\C-c\C-j" 'ps-mode-other-newline)
- (define-key ps-mode-map "\C-c\C-c" 'ps-run-clear)
+ (define-key ps-mode-map "\C-c\C-l" 'ps-run-clear)
(define-key ps-mode-map "\C-c\C-b" 'ps-run-buffer)
(define-key ps-mode-map ">" 'ps-mode-r-gt)
(define-key ps-mode-map "]" 'ps-mode-r-angle)
@@ -480,6 +480,9 @@ If nil, the following are tried in turn, until success:
(setq i (1+ i)))))
+
+(declare-function doc-view-minor-mode "../doc-view")
+
;; PostScript mode.
;;;###autoload
@@ -529,7 +532,10 @@ Typing \\<ps-run-mode-map>\\[ps-run-goto-error] when the cursor is at the number
t))
(set (make-local-variable 'comment-start) "%")
;; NOTE: `\' has a special meaning in strings only
- (set (make-local-variable 'comment-start-skip) "%+[ \t]*"))
+ (set (make-local-variable 'comment-start-skip) "%+[ \t]*")
+ ;; enable doc-view-minor-mode => C-c C-c starts viewing the current ps file
+ ;; with doc-view-mode.
+ (doc-view-minor-mode 1))
(defun ps-mode-show-version ()
"Show current version of PostScript mode."
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index ea4f620faad..04cc07a2eb4 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -885,10 +885,13 @@ On a comment line, go to end of line."
nil)
((eq 'string (syntax-ppss-context s))
;; Go to start of string and skip it.
- (goto-char (nth 8 s))
- (condition-case () ; beware invalid syntax
- (progn (forward-sexp) t)
- (error (end-of-line))))
+ (let ((pos (point)))
+ (goto-char (nth 8 s))
+ (condition-case () ; beware invalid syntax
+ (progn (forward-sexp) t)
+ ;; If there's a mismatched string, make sure
+ ;; we still overall move *forward*.
+ (error (goto-char pos) (end-of-line)))))
((python-skip-out t s))))
(end-of-line))
(unless comment
@@ -983,15 +986,11 @@ don't move and return nil. Otherwise return t."
(_ (if (python-comment-line-p)
(python-skip-comments/blanks t)))
(ci (current-indentation))
- (open (python-open-block-statement-p))
- opoint)
+ (open (python-open-block-statement-p)))
(if (and (zerop ci) (not open))
(not (goto-char point))
(catch 'done
- (setq opoint (point))
- (while (and (zerop (python-next-statement))
- (not (= opoint (point))))
- (setq opoint (point))
+ (while (zerop (python-next-statement))
(when (or (and open (<= (current-indentation) ci))
(< (current-indentation) ci))
(python-skip-comments/blanks t)
@@ -999,7 +998,16 @@ don't move and return nil. Otherwise return t."
(throw 'done t)))))))
(setq arg (1- arg)))
(zerop arg)))
-
+
+(defvar python-which-func-length-limit 40
+ "Non-strict length limit for `python-which-func' output.")
+
+(defun python-which-func ()
+ (let ((function-name (python-current-defun python-which-func-length-limit)))
+ (set-text-properties 0 (length function-name) nil function-name)
+ function-name))
+
+
;;;; Imenu.
(defvar python-recursing)
@@ -1375,7 +1383,7 @@ buffer for a list of commands.)"
;; seems worth putting in a separate file, and it's probably cleaner
;; to put it in a module.
;; Ensure we're at a prompt before doing anything else.
- (python-send-receive "import emacs; print '_emacs_out ()'")))
+ (python-send-string "import emacs")))
(if (derived-mode-p 'python-mode)
(setq python-buffer (default-value 'python-buffer))) ; buffer-local
;; Without this, help output goes into the inferior python buffer if
@@ -1648,6 +1656,8 @@ instance. Assumes an inferior Python is running."
;;;; Info-look functionality.
+(declare-function info-lookup-maybe-add-help "../info-look" (&rest arg))
+
(defun python-after-info-look ()
"Set up info-look for Python.
Used with `eval-after-load'."
@@ -1833,22 +1843,33 @@ of current line."
(1+ (/ (current-indentation) python-indent)))
;; Fixme: Consider top-level assignments, imports, &c.
-(defun python-current-defun ()
+(defun python-current-defun (&optional length-limit)
"`add-log-current-defun-function' for Python."
(save-excursion
;; Move up the tree of nested `class' and `def' blocks until we
;; get to zero indentation, accumulating the defined names.
- (let ((start t)
- accum)
- (while (or start (> (current-indentation) 0))
- (setq start nil)
- (python-beginning-of-block)
- (end-of-line)
- (beginning-of-defun)
- (if (looking-at (rx (0+ space) (or "def" "class") (1+ space)
- (group (1+ (or word (syntax symbol))))))
- (push (match-string 1) accum)))
- (if accum (mapconcat 'identity accum ".")))))
+ (let ((accum)
+ (length -1))
+ (catch 'done
+ (while (or (null length-limit)
+ (null (cdr accum))
+ (< length length-limit))
+ (let ((started-from (point)))
+ (python-beginning-of-block)
+ (end-of-line)
+ (beginning-of-defun)
+ (when (= (point) started-from)
+ (throw 'done nil)))
+ (when (looking-at (rx (0+ space) (or "def" "class") (1+ space)
+ (group (1+ (or word (syntax symbol))))))
+ (push (match-string 1) accum)
+ (setq length (+ length 1 (length (car accum)))))
+ (when (= (current-indentation) 0)
+ (throw 'done nil))))
+ (when accum
+ (when (and length-limit (> length length-limit))
+ (setcar accum ".."))
+ (mapconcat 'identity accum ".")))))
(defun python-mark-block ()
"Mark the block around point.
@@ -1947,7 +1968,7 @@ Repeating the command scrolls the completion window."
(interactive)
(let ((window (get-buffer-window "*Completions*")))
(if (and (eq last-command this-command)
- window (window-live-p window) (window-buffer window)
+ (window-live-p window) (window-buffer window)
(buffer-name (window-buffer window)))
(with-current-buffer (window-buffer window)
(if (pos-visible-in-window-p (point-max) window)
@@ -2017,10 +2038,11 @@ the if condition."
"Alist of named skeletons for Python mode.
Elements are of the form (NAME . EXPANDER-FUNCTION).")
-(defvar python-mode-abbrev-table nil
+(define-abbrev-table 'python-mode-abbrev-table ()
"Abbrev table for Python mode.
-The default contents correspond to the elements of `python-skeletons'.")
-(define-abbrev-table 'python-mode-abbrev-table ())
+The default contents correspond to the elements of `python-skeletons'."
+ ;; Allow / in abbrevs.
+ :regexp "\\<\\([[:word:]/]+\\)\\W*")
(eval-when-compile
;; Define a user-level skeleton and add it to `python-skeletons' and
@@ -2030,8 +2052,9 @@ The default contents correspond to the elements of `python-skeletons'.")
(function (intern (concat "python-insert-" name))))
`(progn
(add-to-list 'python-skeletons ',(cons name function))
- (if python-use-skeletons
- (define-abbrev python-mode-abbrev-table ,name "" ',function nil t))
+ (define-abbrev python-mode-abbrev-table ,name "" ',function
+ :system t :case-fixed t
+ :enable-function (lambda () python-use-skeletons))
(define-skeleton ,function
,(format "Insert Python \"%s\" template." name)
,@elements)))))
@@ -2186,23 +2209,6 @@ without confirmation."
(defvar outline-heading-end-regexp)
(defvar eldoc-documentation-function)
-
-;; Stuff to allow expanding abbrevs with non-word constituents.
-(defun python-abbrev-pc-hook ()
- "Set the syntax table before possibly expanding abbrevs."
- (remove-hook 'post-command-hook 'python-abbrev-pc-hook t)
- (set-syntax-table python-mode-syntax-table))
-
-(defvar python-abbrev-syntax-table
- (copy-syntax-table python-mode-syntax-table)
- "Syntax table used when expanding abbrevs.")
-
-(defun python-pea-hook ()
- "Reset the syntax table after possibly expanding abbrevs."
- (set-syntax-table python-abbrev-syntax-table)
- (add-hook 'post-command-hook 'python-abbrev-pc-hook nil t))
-(modify-syntax-entry ?/ "w" python-abbrev-syntax-table)
-
(defvar python-mode-running) ;Dynamically scoped var.
;;;###autoload
@@ -2270,6 +2276,7 @@ with skeleton expansions for compound statement templates.
(set (make-local-variable 'beginning-of-defun-function)
'python-beginning-of-defun)
(set (make-local-variable 'end-of-defun-function) 'python-end-of-defun)
+ (add-hook 'which-func-functions 'python-which-func nil t)
(setq imenu-create-index-function #'python-imenu-create-index)
(set (make-local-variable 'eldoc-documentation-function)
#'python-eldoc-function)
@@ -2289,7 +2296,6 @@ with skeleton expansions for compound statement templates.
'((< '(backward-delete-char-untabify (min python-indent
(current-column))))
(^ '(- (1+ (current-indentation))))))
- (add-hook 'pre-abbrev-expand-hook 'python-pea-hook nil t)
(if (featurep 'hippie-exp)
(set (make-local-variable 'hippie-expand-try-functions-list)
(cons 'python-try-complete hippie-expand-try-functions-list)))
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index 959c1685a74..5314bb3b745 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -212,7 +212,6 @@
(defgroup sh nil
"Shell programming utilities."
- :group 'unix
:group 'languages)
(defgroup sh-script nil
@@ -241,7 +240,7 @@
(wsh . sh)
(zsh . ksh88)
(rpm . sh))
- "*Alist showing the direct ancestor of various shells.
+ "Alist showing the direct ancestor of various shells.
This is the basis for `sh-feature'. See also `sh-alias-alist'.
By default we have the following three hierarchies:
@@ -276,7 +275,7 @@ sh Bourne Shell
'((ksh . ksh88)
(bash2 . bash)
(sh5 . sh)))
- "*Alist for transforming shell names to what they really are.
+ "Alist for transforming shell names to what they really are.
Use this where the name of the executable doesn't correspond to the type of
shell it really is."
:type '(repeat (cons symbol symbol))
@@ -302,7 +301,7 @@ shell it really is."
(file-name-sans-extension (downcase shell)))))
(getenv "SHELL")
"/bin/sh")
- "*The executable file name for the shell being programmed."
+ "The executable file name for the shell being programmed."
:type 'string
:group 'sh-script)
@@ -321,7 +320,7 @@ shell it really is."
(wksh)
;; -f means don't run .zshrc.
(zsh . "-f"))
- "*Single argument string for the magic number. See `sh-feature'."
+ "Single argument string for the magic number. See `sh-feature'."
:type '(repeat (cons (symbol :tag "Shell")
(choice (const :tag "No Arguments" nil)
(string :tag "Arguments")
@@ -330,8 +329,8 @@ shell it really is."
(defcustom sh-imenu-generic-expression
`((sh
- . ((nil "^\\s-*\\(function\\s-+\\)?\\([A-Za-z_][A-Za-z_0-9]+\\)\\s-*()" 2))))
- "*Alist of regular expressions for recognizing shell function definitions.
+ . ((nil "^\\s-*\\(function\\s-+\\)?\\([[:alpha:]_][[:alnum:]_]+\\)\\s-*()" 2))))
+ "Alist of regular expressions for recognizing shell function definitions.
See `sh-feature' and `imenu-generic-expression'."
:type '(alist :key-type (symbol :tag "Shell")
:value-type (alist :key-type (choice :tag "Title"
@@ -507,7 +506,7 @@ This is buffer-local in every such buffer.")
'(shell-dynamic-complete-environment-variable
shell-dynamic-complete-command
comint-dynamic-complete-filename)
- "*Functions for doing TAB dynamic completion."
+ "Functions for doing TAB dynamic completion."
:type '(repeat function)
:group 'sh-script)
@@ -515,7 +514,7 @@ This is buffer-local in every such buffer.")
(defcustom sh-require-final-newline
'((csh . t)
(pdksh . t))
- "*Value of `require-final-newline' in Shell-Script mode buffers.
+ "Value of `require-final-newline' in Shell-Script mode buffers.
\(SHELL . t) means use the value of `mode-require-final-newline' for SHELL.
See `sh-feature'."
:type '(repeat (cons (symbol :tag "Shell")
@@ -525,12 +524,12 @@ See `sh-feature'."
(defcustom sh-assignment-regexp
- '((csh . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=")
+ '((csh . "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?[ \t]*[-+*/%^]?=")
;; actually spaces are only supported in let/(( ... ))
- (ksh88 . "\\<\\([a-zA-Z0-9_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=")
- (rc . "\\<\\([a-zA-Z0-9_*]+\\)[ \t]*=")
- (sh . "\\<\\([a-zA-Z0-9_]+\\)="))
- "*Regexp for the variable name and what may follow in an assignment.
+ (ksh88 . "\\<\\([[:alnum:]_]+\\)\\(\\[.+\\]\\)?[ \t]*\\([-+*/%&|~^]\\|<<\\|>>\\)?=")
+ (rc . "\\<\\([[:alnum:]_*]+\\)[ \t]*=")
+ (sh . "\\<\\([[:alnum:]_]+\\)="))
+ "Regexp for the variable name and what may follow in an assignment.
First grouping matches the variable name. This is upto and including the `='
sign. See `sh-feature'."
:type '(repeat (cons (symbol :tag "Shell")
@@ -546,7 +545,7 @@ sign. See `sh-feature'."
(defcustom sh-remember-variable-min 3
- "*Don't remember variables less than this length for completing reads."
+ "Don't remember variables less than this length for completing reads."
:type 'integer
:group 'sh-script)
@@ -557,16 +556,16 @@ That command is also used for setting this variable.")
(defcustom sh-beginning-of-command
- "\\([;({`|&]\\|\\`\\|[^\\]\n\\)[ \t]*\\([/~a-zA-Z0-9:]\\)"
- "*Regexp to determine the beginning of a shell command.
+ "\\([;({`|&]\\|\\`\\|[^\\]\n\\)[ \t]*\\([/~[:alnum:]:]\\)"
+ "Regexp to determine the beginning of a shell command.
The actual command starts at the beginning of the second \\(grouping\\)."
:type 'regexp
:group 'sh-script)
(defcustom sh-end-of-command
- "\\([/~a-zA-Z0-9:]\\)[ \t]*\\([;#)}`|&]\\|$\\)"
- "*Regexp to determine the end of a shell command.
+ "\\([/~[:alnum:]:]\\)[ \t]*\\([;#)}`|&]\\|$\\)"
+ "Regexp to determine the end of a shell command.
The actual command ends at the end of the first \\(grouping\\)."
:type 'regexp
:group 'sh-script)
@@ -653,6 +652,7 @@ removed when closing the here document."
(shell "cd" "echo" "eval" "set" "shift" "umask" "unset" "wait")
(wksh sh-append ksh88
+ ;; FIXME: This looks too much like a regexp. --Stef
"Xt[A-Z][A-Za-z]*")
(zsh sh-append ksh88
@@ -662,7 +662,7 @@ removed when closing the here document."
"readonly" "rehash" "sched" "setopt" "source" "suspend" "true"
"ttyctl" "type" "unfunction" "unhash" "unlimit" "unsetopt" "vared"
"which"))
- "*List of all shell builtins for completing read and fontification.
+ "List of all shell builtins for completing read and fontification.
Note that on some systems not all builtins are available or some are
implemented as aliases. See `sh-feature'."
:type '(repeat (cons (symbol :tag "Shell")
@@ -683,7 +683,7 @@ implemented as aliases. See `sh-feature'."
(rc "else")
(sh "!" "do" "elif" "else" "if" "then" "trap" "type" "until" "while"))
- "*List of keywords that may be immediately followed by a builtin or keyword.
+ "List of keywords that may be immediately followed by a builtin or keyword.
Given some confusion between keywords and builtins depending on shell and
system, the distinction here has been based on whether they influence the
flow of control or syntax. See `sh-feature'."
@@ -722,7 +722,7 @@ flow of control or syntax. See `sh-feature'."
(zsh sh-append bash
"select"))
- "*List of keywords not in `sh-leading-keywords'.
+ "List of keywords not in `sh-leading-keywords'.
See `sh-feature'."
:type '(repeat (cons (symbol :tag "Shell")
(choice (repeat string)
@@ -843,18 +843,18 @@ See `sh-feature'.")
(defvar sh-font-lock-keywords-var
'((csh sh-append shell
- ("\\${?[#?]?\\([A-Za-z_][A-Za-z0-9_]*\\|0\\)" 1
+ ("\\${?[#?]?\\([[:alpha:]_][[:alnum:]_]*\\|0\\)" 1
font-lock-variable-name-face))
(es sh-append executable-font-lock-keywords
- ("\\$#?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\)" 1
+ ("\\$#?\\([[:alpha:]_][[:alnum:]_]*\\|[0-9]+\\)" 1
font-lock-variable-name-face))
(rc sh-append es)
(bash sh-append shell ("\\$(\\(\\sw+\\)" (1 'sh-quoted-exec t) ))
(sh sh-append shell
;; Variable names.
- ("\\$\\({#?\\)?\\([A-Za-z_][A-Za-z0-9_]*\\|[-#?@!]\\)" 2
+ ("\\$\\({#?\\)?\\([[:alpha:]_][[:alnum:]_]*\\|[-#?@!]\\)" 2
font-lock-variable-name-face)
;; Function names.
("^\\(\\sw+\\)[ \t]*(" 1 font-lock-function-name-face)
@@ -867,8 +867,8 @@ See `sh-feature'.")
(shell
;; Using font-lock-string-face here confuses sh-get-indent-info.
("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 'sh-escaped-newline)
- ("\\\\[^A-Za-z0-9]" 0 font-lock-string-face)
- ("\\${?\\([A-Za-z_][A-Za-z0-9_]*\\|[0-9]+\\|[$*_]\\)" 1
+ ("\\\\[^[:alnum:]]" 0 font-lock-string-face)
+ ("\\${?\\([[:alpha:]_][[:alnum:]_]*\\|[0-9]+\\|[$*_]\\)" 1
font-lock-variable-name-face))
(rpm sh-append rpm2
("%{?\\(\\sw+\\)" 1 font-lock-keyword-face))
@@ -985,7 +985,7 @@ Point is at the beginning of the next line."
;; This looks silly, but it's because `sh-here-doc-re' keeps changing.
(re-search-forward sh-here-doc-re limit t))
-(defun sh-quoted-subshell (limit)
+(defun sh-font-lock-quoted-subshell (limit)
"Search for a subshell embedded in a string.
Find all the unescaped \" characters within said subshell, remembering that
subshells can nest."
@@ -997,46 +997,39 @@ subshells can nest."
(eq ?\" (nth 3 (syntax-ppss))))
;; bingo we have a $( or a ` inside a ""
(let ((char (char-after (point)))
- (continue t)
- (pos (point))
- (data nil) ;; value to put into match-data (and return)
- (last nil) ;; last char seen
- (bq (equal (match-string 1) "`")) ;; ` state flip-flop
- (seen nil) ;; list of important positions
- (nest 1)) ;; subshell nesting level
- (while (and continue char (<= pos limit))
- ;; unescaped " inside a $( ... ) construct.
- ;; state machine time...
- ;; \ => ignore next char;
- ;; ` => increase or decrease nesting level based on bq flag
- ;; ) [where nesting > 0] => decrease nesting
- ;; ( [where nesting > 0] => increase nesting
- ;; ( [preceeded by $ ] => increase nesting
- ;; " [nesting <= 0 ] => terminate, we're done.
- ;; " [nesting > 0 ] => remember this, it's not a proper "
- ;; FIXME: don't count parens that appear within quotes.
- (cond
- ((eq ?\\ last) nil)
- ((eq ?\` char) (setq nest (+ nest (if bq -1 1)) bq (not bq)))
- ((and (> nest 0) (eq ?\) char)) (setq nest (1- nest)))
- ((and (eq ?$ last) (eq ?\( char)) (setq nest (1+ nest)))
- ((and (> nest 0) (eq ?\( char)) (setq nest (1+ nest)))
- ((eq char ?\")
- (if (>= 0 nest) (setq continue nil) (push pos seen))))
- ;;(message "POS: %d [%d]" pos nest)
- (setq last char
- pos (1+ pos)
- char (char-after pos)) )
- ;; FIXME: why construct a costly match data to pass to
- ;; sh-apply-quoted-subshell rather than apply the highlight
- ;; directly here? -- Stef
- (when seen
- ;;(message "SEEN: %S" seen)
- (setq data (list (current-buffer)))
- (dolist(P seen)
- (setq data (cons P (cons (1+ P) data))))
- (store-match-data data))
- data) ))
+ ;; `state' can be: double-quote, backquote, code.
+ (state (if (eq (char-before) ?`) 'backquote 'code))
+ ;; Stacked states in the context.
+ (states '(double-quote)))
+ (while (and state (progn (skip-chars-forward "^'\\\"`$()" limit)
+ (< (point) limit)))
+ ;; unescape " inside a $( ... ) construct.
+ (case (char-after)
+ (?\' (skip-chars-forward "^'" limit))
+ (?\\ (forward-char 1))
+ (?\" (case state
+ (double-quote (setq state (pop states)))
+ (t (push state states) (setq state 'double-quote)))
+ (if state (put-text-property (point) (1+ (point))
+ 'syntax-table '(1))))
+ (?\` (case state
+ (backquote (setq state (pop states)))
+ (t (push state states) (setq state 'backquote))))
+ (?\$ (if (not (eq (char-after (1+ (point))) ?\())
+ nil
+ (forward-char 1)
+ (case state
+ (t (push state states) (setq state 'code)))))
+ (?\( (case state
+ (double-quote nil)
+ (t (push state states) (setq state 'code))))
+ (?\) (case state
+ (double-quote nil)
+ (t (setq state (pop states)))))
+ (t (error "Internal error in sh-font-lock-quoted-subshell")))
+ (forward-char 1)))
+ t))
+
(defun sh-is-quoted-p (pos)
(and (eq (char-before pos) ?\\)
@@ -1092,17 +1085,6 @@ subshells can nest."
(goto-char limit)
nil)
-(defun sh-apply-quoted-subshell ()
- "Apply the `sh-st-punc' syntax to all the matches in `match-data'.
-This is used to flag quote characters in subshell constructs inside strings
-\(which should therefore not be treated as normal quote characters\)"
- (let ((m (match-data)) a b)
- (while m
- (setq a (car m)
- b (cadr m)
- m (cddr m))
- (put-text-property a b 'syntax-table sh-st-punc))) sh-st-punc)
-
(defconst sh-font-lock-syntactic-keywords
;; A `#' begins a comment when it is unquoted and at the beginning of a
;; word. In the shell, words are separated by metacharacters.
@@ -1129,8 +1111,7 @@ This is used to flag quote characters in subshell constructs inside strings
(")" 0 (sh-font-lock-paren (match-beginning 0)))
;; highlight (possibly nested) subshells inside "" quoted regions correctly.
;; This should be at the very end because it uses syntax-ppss.
- (sh-quoted-subshell
- (1 (sh-apply-quoted-subshell) t t))))
+ (sh-font-lock-quoted-subshell)))
(defun sh-font-lock-syntactic-face-function (state)
(let ((q (nth 3 state)))
@@ -1151,17 +1132,17 @@ and command `sh-reset-indent-vars-to-global-values'."
(defcustom sh-set-shell-hook nil
- "*Hook run by `sh-set-shell'."
+ "Hook run by `sh-set-shell'."
:type 'hook
:group 'sh-script)
(defcustom sh-mode-hook nil
- "*Hook run by `sh-mode'."
+ "Hook run by `sh-mode'."
:type 'hook
:group 'sh-script)
(defcustom sh-learn-basic-offset nil
- "*When `sh-guess-basic-offset' should learn `sh-basic-offset'.
+ "When `sh-guess-basic-offset' should learn `sh-basic-offset'.
nil mean: never.
t means: only if there seems to be an obvious value.
@@ -1173,7 +1154,7 @@ Anything else means: whenever we have a \"good guess\" as to the value."
:group 'sh-indentation)
(defcustom sh-popup-occur-buffer nil
- "*Controls when `sh-learn-buffer-indent' pops the `*indent*' buffer.
+ "Controls when `sh-learn-buffer-indent' pops the `*indent*' buffer.
If t it is always shown. If nil, it is shown only when there
are conflicts."
:type '(choice
@@ -1182,7 +1163,7 @@ are conflicts."
:group 'sh-indentation)
(defcustom sh-blink t
- "*If non-nil, `sh-show-indent' shows the line indentation is relative to.
+ "If non-nil, `sh-show-indent' shows the line indentation is relative to.
The position on the line is not necessarily meaningful.
In some cases the line will be the matching keyword, but this is not
always the case."
@@ -1190,7 +1171,7 @@ always the case."
:group 'sh-indentation)
(defcustom sh-first-lines-indent 0
- "*The indentation of the first non-blank non-comment line.
+ "The indentation of the first non-blank non-comment line.
Usually 0 meaning first column.
Can be set to a number, or to nil which means leave it as is."
:type '(choice
@@ -1201,17 +1182,17 @@ Can be set to a number, or to nil which means leave it as is."
(defcustom sh-basic-offset 4
- "*The default indentation increment.
+ "The default indentation increment.
This value is used for the `+' and `-' symbols in an indentation variable."
:type 'integer
:group 'sh-indentation)
(defcustom sh-indent-comment nil
- "*How a comment line is to be indented.
+ "How a comment line is to be indented.
nil means leave it as it is;
t means indent it as a normal line, aligning it to previous non-blank
non-comment line;
-a number means align to that column, e.g. 0 means fist column."
+a number means align to that column, e.g. 0 means first column."
:type '(choice
(const :tag "Leave as is." nil)
(const :tag "Indent as a normal line." t)
@@ -1246,7 +1227,7 @@ a number means align to that column, e.g. 0 means fist column."
:menu-tag "/ Indent left half sh-basic-offset")))
(defcustom sh-indent-for-else 0
- "*How much to indent an `else' relative to its `if'. Usually 0."
+ "How much to indent an `else' relative to its `if'. Usually 0."
:type `(choice
(integer :menu-tag "A number (positive=>indent right)"
:tag "A number")
@@ -1262,41 +1243,41 @@ a number means align to that column, e.g. 0 means fist column."
sh-symbol-list))
(defcustom sh-indent-for-fi 0
- "*How much to indent a `fi' relative to its `if'. Usually 0."
+ "How much to indent a `fi' relative to its `if'. Usually 0."
:type `(choice ,@ sh-number-or-symbol-list )
:group 'sh-indentation)
(defcustom sh-indent-for-done 0
- "*How much to indent a `done' relative to its matching stmt. Usually 0."
+ "How much to indent a `done' relative to its matching stmt. Usually 0."
:type `(choice ,@ sh-number-or-symbol-list )
:group 'sh-indentation)
(defcustom sh-indent-after-else '+
- "*How much to indent a statement after an `else' statement."
+ "How much to indent a statement after an `else' statement."
:type `(choice ,@ sh-number-or-symbol-list )
:group 'sh-indentation)
(defcustom sh-indent-after-if '+
- "*How much to indent a statement after an `if' statement.
+ "How much to indent a statement after an `if' statement.
This includes lines after `else' and `elif' statements, too, but
does not affect the `else', `elif' or `fi' statements themselves."
:type `(choice ,@ sh-number-or-symbol-list )
:group 'sh-indentation)
(defcustom sh-indent-for-then 0
- "*How much to indent a `then' relative to its `if'."
+ "How much to indent a `then' relative to its `if'."
:type `(choice ,@ sh-number-or-symbol-list )
:group 'sh-indentation)
(defcustom sh-indent-for-do 0
- "*How much to indent a `do' statement.
+ "How much to indent a `do' statement.
This is relative to the statement before the `do', typically a
`while', `until', `for', `repeat' or `select' statement."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-indent-after-do '+
- "*How much to indent a line after a `do' statement.
+ "How much to indent a line after a `do' statement.
This is used when the `do' is the first word of the line.
This is relative to the statement before the `do', typically a
`while', `until', `for', `repeat' or `select' statement."
@@ -1304,7 +1285,7 @@ This is relative to the statement before the `do', typically a
:group 'sh-indentation)
(defcustom sh-indent-after-loop-construct '+
- "*How much to indent a statement after a loop construct.
+ "How much to indent a statement after a loop construct.
This variable is used when the keyword `do' is on the same line as the
loop statement (e.g., `until', `while' or `for').
@@ -1314,7 +1295,7 @@ If the `do' is on a line by itself, then `sh-indent-after-do' is used instead."
(defcustom sh-indent-after-done 0
- "*How much to indent a statement after a `done' keyword.
+ "How much to indent a statement after a `done' keyword.
Normally this is 0, which aligns the `done' to the matching
looping construct line.
Setting it non-zero allows you to have the `do' statement on a line
@@ -1323,55 +1304,55 @@ by itself and align the done under to do."
:group 'sh-indentation)
(defcustom sh-indent-for-case-label '+
- "*How much to indent a case label statement.
+ "How much to indent a case label statement.
This is relative to the line containing the `case' statement."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-indent-for-case-alt '++
- "*How much to indent statements after the case label.
+ "How much to indent statements after the case label.
This is relative to the line containing the `case' statement."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-indent-for-continuation '+
- "*How much to indent for a continuation statement."
+ "How much to indent for a continuation statement."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-indent-after-open '+
- "*How much to indent after a line with an opening parenthesis or brace.
+ "How much to indent after a line with an opening parenthesis or brace.
For an open paren after a function, `sh-indent-after-function' is used."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-indent-after-function '+
- "*How much to indent after a function line."
+ "How much to indent after a function line."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
;; These 2 are for the rc shell:
(defcustom sh-indent-after-switch '+
- "*How much to indent a `case' statement relative to the `switch' statement.
+ "How much to indent a `case' statement relative to the `switch' statement.
This is for the rc shell."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-indent-after-case '+
- "*How much to indent a statement relative to the `case' statement.
+ "How much to indent a statement relative to the `case' statement.
This is for the rc shell."
:type `(choice ,@ sh-number-or-symbol-list)
:group 'sh-indentation)
(defcustom sh-backslash-column 48
- "*Column in which `sh-backslash-region' inserts backslashes."
+ "Column in which `sh-backslash-region' inserts backslashes."
:type 'integer
:group 'sh)
(defcustom sh-backslash-align t
- "*If non-nil, `sh-backslash-region' will align backslashes."
+ "If non-nil, `sh-backslash-region' will align backslashes."
:type 'boolean
:group 'sh)
@@ -1381,7 +1362,7 @@ This is for the rc shell."
"Make a regexp which matches WORD as a word.
This specifically excludes an occurrence of WORD followed by
punctuation characters like '-'."
- (concat word "\\([^-a-z0-9_]\\|$\\)"))
+ (concat word "\\([^-[:alnum:]_]\\|$\\)"))
(defconst sh-re-done (sh-mkword-regexpr "done"))
@@ -1925,14 +1906,14 @@ variable `sh-make-vars-local' has been set to nil.
To revert all these variables to the global values, use
command `sh-reset-indent-vars-to-global-values'."
(interactive)
- (mapcar 'make-local-variable sh-var-list)
+ (mapc 'make-local-variable sh-var-list)
(message "Indentation variables are now local."))
(defun sh-reset-indent-vars-to-global-values ()
"Reset local indentation variables to the global values.
Then, if variable `sh-make-vars-local' is non-nil, make them local."
(interactive)
- (mapcar 'kill-local-variable sh-var-list)
+ (mapc 'kill-local-variable sh-var-list)
(if sh-make-vars-local
(mapcar 'make-local-variable sh-var-list)))
@@ -2268,6 +2249,7 @@ STRING This is ignored for the purposes of calculating
(setq align-point (point))))
(or (bobp)
(forward-char -1))
+ ;; FIXME: This charset looks too much like a regexp. --Stef
(skip-chars-forward "[a-z0-9]*?")
)
((string-match "[])}]" x)
@@ -2476,7 +2458,7 @@ we go to the end of the previous line and do not check for continuations."
(if (looking-at "[\"'`]")
(sh-safe-forward-sexp)
;; (> (skip-chars-forward "^ \t\n\"'`") 0)
- (> (skip-chars-forward "-_a-zA-Z$0-9") 0)
+ (> (skip-chars-forward "-_$[:alnum:]") 0)
))
(buffer-substring start (point))
))
diff --git a/lisp/progmodes/simula.el b/lisp/progmodes/simula.el
index db5d6552c84..e0b04cfebe8 100644
--- a/lisp/progmodes/simula.el
+++ b/lisp/progmodes/simula.el
@@ -1615,9 +1615,9 @@ If not nil and not t, move to limit of search and return nil."
(simula-install-standard-abbrevs))
;; Hilit mode support.
-(if (and (fboundp 'hilit-set-mode-patterns)
- (boundp 'hilit-patterns-alist)
- (not (assoc 'simula-mode hilit-patterns-alist)))
+(when (fboundp 'hilit-set-mode-patterns)
+ (when (and (boundp 'hilit-patterns-alist)
+ (not (assoc 'simula-mode hilit-patterns-alist)))
(hilit-set-mode-patterns
'simula-mode
'(
@@ -1626,7 +1626,7 @@ If not nil and not t, move to limit of search and return nil."
("\"[^\"\n]*\"\\|'.'\\|'![0-9]+!'" nil string)
("\\<\\(ACTIVATE\\|AFTER\\|AND\\|ARRAY\\|AT\\|BEFORE\\|BEGIN\\|BOOLEAN\\|CHARACTER\\|CLASS\\|DELAY\\|DO\\|ELSE\\|END\\|EQ\\|EQV\\|EXTERNAL\\|FALSE\\|FOR\\|GE\\|GO\\|GOTO\\|GT\\|HIDDEN\\|IF\\|IMP\\|IN\\|INNER\\|INSPECT\\|INTEGER\\|IS\\|LABEL\\|LE\\|LONG\\|LT\\|NAME\\|NE\\|NEW\\|NONE\\|NOT\\|NOTEXT\\|OR\\|OTHERWISE\\|PRIOR\\|PROCEDURE\\|PROTECTED\\|QUA\\|REACTIVATE\\|REAL\\|REF\\|SHORT\\|STEP\\|SWITCH\\|TEXT\\|THEN\\|THIS\\|TO\\|TRUE\\|UNTIL\\|VALUE\\|VIRTUAL\\|WHEN\\|WHILE\\)\\>" nil keyword)
("!\\|\\<COMMENT\\>" ";" comment))
- nil 'case-insensitive))
+ nil 'case-insensitive)))
;; defuns for submitting bug reports
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index 1187129bb33..a03b58b466c 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -863,7 +863,7 @@ Based on `comint-mode-map'.")
(unless sql-mode-abbrev-table
(define-abbrev-table 'sql-mode-abbrev-table nil))
-(mapcar
+(mapc
;; In Emacs 22+, provide SYSTEM-FLAG to define-abbrev.
'(lambda (abbrev)
(let ((name (car abbrev))
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index 6479fa3702b..11f47b40592 100644
--- a/lisp/progmodes/vera-mode.el
+++ b/lisp/progmodes/vera-mode.el
@@ -48,7 +48,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Documentation
-;; See comment string of function `vera-mode' or type `C-c C-h' in Emacs.
+;; See comment string of function `vera-mode' or type `C-h m' in Emacs.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Installation
@@ -77,10 +77,6 @@
;;; Code:
-;; XEmacs handling
-(defconst vera-xemacs (string-match "XEmacs" emacs-version)
- "Non-nil if XEmacs is used.")
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Variables
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -122,37 +118,37 @@ If nil, TAB always indents current line."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Key bindings
-(defvar vera-mode-map ()
+(defvar vera-mode-map
+ (let ((map (make-sparse-keymap)))
+ ;; Backspace/delete key bindings.
+ (define-key map [backspace] 'backward-delete-char-untabify)
+ (unless (boundp 'delete-key-deletes-forward) ; XEmacs variable
+ (define-key map [delete] 'delete-char)
+ (define-key map [(meta delete)] 'kill-word))
+ ;; Standard key bindings.
+ (define-key map "\M-e" 'vera-forward-statement)
+ (define-key map "\M-a" 'vera-backward-statement)
+ (define-key map "\M-\C-e" 'vera-forward-same-indent)
+ (define-key map "\M-\C-a" 'vera-backward-same-indent)
+ ;; Mode specific key bindings.
+ (define-key map "\C-c\t" 'indent-according-to-mode)
+ (define-key map "\M-\C-\\" 'vera-indent-region)
+ (define-key map "\C-c\C-c" 'vera-comment-uncomment-region)
+ (define-key map "\C-c\C-f" 'vera-fontify-buffer)
+ (define-key map "\C-c\C-v" 'vera-version)
+ (define-key map "\M-\t" 'tab-to-tab-stop)
+ ;; Electric key bindings.
+ (define-key map "\t" 'vera-electric-tab)
+ (define-key map "\r" 'vera-electric-return)
+ (define-key map " " 'vera-electric-space)
+ (define-key map "{" 'vera-electric-opening-brace)
+ (define-key map "}" 'vera-electric-closing-brace)
+ (define-key map "#" 'vera-electric-pound)
+ (define-key map "*" 'vera-electric-star)
+ (define-key map "/" 'vera-electric-slash)
+ map)
"Keymap for Vera Mode.")
-(setq vera-mode-map (make-sparse-keymap))
-;; backspace/delete key bindings
-(define-key vera-mode-map [backspace] 'backward-delete-char-untabify)
-(unless (boundp 'delete-key-deletes-forward) ; XEmacs variable
- (define-key vera-mode-map [delete] 'delete-char)
- (define-key vera-mode-map [(meta delete)] 'kill-word))
-;; standard key bindings
-(define-key vera-mode-map "\M-e" 'vera-forward-statement)
-(define-key vera-mode-map "\M-a" 'vera-backward-statement)
-(define-key vera-mode-map "\M-\C-e" 'vera-forward-same-indent)
-(define-key vera-mode-map "\M-\C-a" 'vera-backward-same-indent)
-;; mode specific key bindings
-(define-key vera-mode-map "\C-c\t" 'indent-according-to-mode)
-(define-key vera-mode-map "\M-\C-\\" 'vera-indent-region)
-(define-key vera-mode-map "\C-c\C-c" 'vera-comment-uncomment-region)
-(define-key vera-mode-map "\C-c\C-f" 'vera-fontify-buffer)
-(define-key vera-mode-map "\C-c\C-v" 'vera-version)
-(define-key vera-mode-map "\M-\t" 'tab-to-tab-stop)
-;; electric key bindings
-(define-key vera-mode-map "\t" 'vera-electric-tab)
-(define-key vera-mode-map "\r" 'vera-electric-return)
-(define-key vera-mode-map " " 'vera-electric-space)
-(define-key vera-mode-map "{" 'vera-electric-opening-brace)
-(define-key vera-mode-map "}" 'vera-electric-closing-brace)
-(define-key vera-mode-map "#" 'vera-electric-pound)
-(define-key vera-mode-map "*" 'vera-electric-star)
-(define-key vera-mode-map "/" 'vera-electric-slash)
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Menu
@@ -231,7 +227,7 @@ If nil, TAB always indents current line."
(modify-syntax-entry ?\{ "(}" syntax-table)
(modify-syntax-entry ?\} "){" syntax-table)
;; comment
- (if vera-xemacs
+ (if (featurep 'xemacs)
(modify-syntax-entry ?\/ ". 1456" syntax-table) ; XEmacs
(modify-syntax-entry ?\/ ". 124b" syntax-table)) ; Emacs
(modify-syntax-entry ?\* ". 23" syntax-table)
@@ -600,7 +596,7 @@ Key bindings:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; XEmacs compatibility
-(when vera-xemacs
+(when (featurep 'xemacs)
(require 'font-lock)
(copy-face 'font-lock-reference-face 'font-lock-constant-face)
(copy-face 'font-lock-preprocessor-face 'font-lock-builtin-face))
@@ -844,21 +840,19 @@ This function does not modify point or mark."
(defsubst vera-re-search-forward (regexp &optional bound noerror)
"Like `re-search-forward', but skips over matches in literals."
- (store-match-data '(nil nil))
- (while (and (re-search-forward regexp bound noerror)
- (vera-skip-forward-literal)
- (progn (store-match-data '(nil nil))
- (if bound (< (point) bound) t))))
- (match-end 0))
+ (let (ret)
+ (while (and (setq ret (re-search-forward regexp bound noerror))
+ (vera-skip-forward-literal)
+ (if bound (< (point) bound) t)))
+ ret))
(defsubst vera-re-search-backward (regexp &optional bound noerror)
"Like `re-search-backward', but skips over matches in literals."
- (store-match-data '(nil nil))
- (while (and (re-search-backward regexp bound noerror)
- (vera-skip-backward-literal)
- (progn (store-match-data '(nil nil))
- (if bound (> (point) bound) t))))
- (match-end 0))
+ (let (ret)
+ (while (and (setq ret (re-search-backward regexp bound noerror))
+ (vera-skip-backward-literal)
+ (if bound (> (point) bound) t)))
+ ret))
(defun vera-forward-syntactic-ws (&optional lim skip-directive)
"Forward skip of syntactic whitespace."
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 0d909a4a3ff..df315e4f46e 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -125,13 +125,10 @@
;;; Code:
-;; XEmacs handling
-(defconst vhdl-xemacs (string-match "XEmacs" emacs-version)
- "Non-nil if XEmacs is used.")
;; Emacs 21+ handling
-(defconst vhdl-emacs-21 (and (<= 21 emacs-major-version) (not vhdl-xemacs))
+(defconst vhdl-emacs-21 (and (<= 21 emacs-major-version) (not (featurep 'xemacs)))
"Non-nil if GNU Emacs 21, 22, ... is used.")
-(defconst vhdl-emacs-22 (and (<= 22 emacs-major-version) (not vhdl-xemacs))
+(defconst vhdl-emacs-22 (and (<= 22 emacs-major-version) (not (featurep 'xemacs)))
"Non-nil if GNU Emacs 22, ... is used.")
(defvar compilation-file-regexp-alist)
@@ -1844,13 +1841,13 @@ NOTE: Activate the new setting in a VHDL buffer by using the menu entry
;; add related general customizations
(custom-add-to-group 'vhdl-related 'hideshow 'custom-group)
-(if vhdl-xemacs
+(if (featurep 'xemacs)
(custom-add-to-group 'vhdl-related 'paren-mode 'custom-variable)
(custom-add-to-group 'vhdl-related 'paren-showing 'custom-group))
(custom-add-to-group 'vhdl-related 'ps-print 'custom-group)
(custom-add-to-group 'vhdl-related 'speedbar 'custom-group)
(custom-add-to-group 'vhdl-related 'line-number-mode 'custom-variable)
-(unless vhdl-xemacs
+(unless (featurep 'xemacs)
(custom-add-to-group 'vhdl-related 'transient-mark-mode 'custom-variable))
(custom-add-to-group 'vhdl-related 'user-full-name 'custom-variable)
(custom-add-to-group 'vhdl-related 'mail-host-address 'custom-variable)
@@ -2093,7 +2090,7 @@ Ignore byte-compiler warnings you might see."
newstr)))
;; `itimer.el': idle timer bug fix in version 1.09 (XEmacs 21.1.9)
-(when (and vhdl-xemacs (string< itimer-version "1.09")
+(when (and (featurep 'xemacs) (string< itimer-version "1.09")
(not noninteractive))
(load "itimer")
(when (string< itimer-version "1.09")
@@ -2486,7 +2483,7 @@ conversion."
(defun vhdl-show-messages ()
"Get *Messages* buffer to show recent messages."
(interactive)
- (display-buffer (if vhdl-xemacs " *Message-Log*" "*Messages*")))
+ (display-buffer (if (featurep 'xemacs) " *Message-Log*" "*Messages*")))
(defun vhdl-use-direct-instantiation ()
"Return whether direct instantiation is used."
@@ -2686,7 +2683,7 @@ STRING are replaced by `-' and substrings are converted to lower case."
(define-key vhdl-mode-map "\M-\C-u" 'vhdl-backward-up-list)
(define-key vhdl-mode-map "\M-\C-a" 'vhdl-backward-same-indent)
(define-key vhdl-mode-map "\M-\C-e" 'vhdl-forward-same-indent)
- (unless vhdl-xemacs ; would override `M-backspace' in XEmacs
+ (unless (featurep 'xemacs) ; would override `M-backspace' in XEmacs
(define-key vhdl-mode-map "\M-\C-h" 'vhdl-mark-defun))
(define-key vhdl-mode-map "\M-\C-q" 'vhdl-indent-sexp)
(define-key vhdl-mode-map "\M-^" 'vhdl-delete-indentation)
@@ -2713,7 +2710,7 @@ STRING are replaced by `-' and substrings are converted to lower case."
(define-key vhdl-mode-map "\C-c\C-p\C-i" 'vhdl-port-paste-instance)
(define-key vhdl-mode-map "\C-c\C-p\C-s" 'vhdl-port-paste-signals)
(define-key vhdl-mode-map "\C-c\C-p\M-c" 'vhdl-port-paste-constants)
- (if vhdl-xemacs ; `... C-g' not allowed in XEmacs
+ (if (featurep 'xemacs) ; `... C-g' not allowed in XEmacs
(define-key vhdl-mode-map "\C-c\C-p\M-g" 'vhdl-port-paste-generic-map)
(define-key vhdl-mode-map "\C-c\C-p\C-g" 'vhdl-port-paste-generic-map))
(define-key vhdl-mode-map "\C-c\C-p\C-z" 'vhdl-port-paste-initializations)
@@ -2811,7 +2808,7 @@ STRING are replaced by `-' and substrings are converted to lower case."
;; set up electric character functions to work with
;; `delete-selection-mode' (Emacs) and `pending-delete-mode' (XEmacs)
-(mapcar
+(mapc
(function
(lambda (sym)
(put sym 'delete-selection t) ; for `delete-selection-mode' (Emacs)
@@ -5296,7 +5293,7 @@ argument. The styles are chosen from the `vhdl-style-alist' variable."
(or vars
(error "ERROR: Invalid VHDL indentation style `%s'" style))
;; set all the variables
- (mapcar
+ (mapc
(function
(lambda (varentry)
(let ((var (car varentry))
@@ -5395,7 +5392,7 @@ negative, skip forward otherwise."
(skip-chars-forward " \t\n"))))
;; XEmacs hack: work around buggy `forward-comment' in XEmacs 21.4+
-(unless (and vhdl-xemacs (string< "21.2" emacs-version))
+(unless (and (featurep 'xemacs) (string< "21.2" emacs-version))
(defalias 'vhdl-forward-comment 'forward-comment))
;; This is the best we can do in Win-Emacs.
@@ -7148,7 +7145,7 @@ ENDPOS is encountered."
(actual (vhdl-get-syntactic-context))
(expurgated))
;; remove the library unit symbols
- (mapcar
+ (mapc
(function
(lambda (elt)
(if (memq (car elt) '(entity configuration package
@@ -13013,7 +13010,7 @@ This does background highlighting of translate-off regions.")
(defun vhdl-ps-print-init ()
"Initialize postscript printing."
- (if vhdl-xemacs
+ (if (featurep 'xemacs)
(when (boundp 'ps-print-color-p)
(vhdl-ps-print-settings))
(make-local-variable 'ps-print-hook)
@@ -14064,10 +14061,10 @@ if required."
(save-excursion (beginning-of-line) (looking-at "[0-9]+:"))]
["Rescan Directory" vhdl-speedbar-rescan-hierarchy
:active (save-excursion (beginning-of-line) (looking-at "[0-9]+:"))
- ,(if vhdl-xemacs :active :visible) (not vhdl-speedbar-show-projects)]
+ ,(if (featurep 'xemacs) :active :visible) (not vhdl-speedbar-show-projects)]
["Rescan Project" vhdl-speedbar-rescan-hierarchy
:active (save-excursion (beginning-of-line) (looking-at "[0-9]+:"))
- ,(if vhdl-xemacs :active :visible) vhdl-speedbar-show-projects]
+ ,(if (featurep 'xemacs) :active :visible) vhdl-speedbar-show-projects]
["Save Caches" vhdl-save-caches vhdl-updated-project-list])))
;; hook-ups
(speedbar-add-expansion-list
@@ -16189,7 +16186,7 @@ no project is defined."
(assoc (car sublist) regexp-alist))
(setq regexp-alist (cons (list (nth 0 sublist)
(if (= 0 (nth 1 sublist))
- (if vhdl-xemacs 9 nil)
+ (if (featurep 'xemacs) 9 nil)
(nth 1 sublist))
(nth 2 sublist) (nth 3 sublist))
regexp-alist)))
@@ -16989,7 +16986,7 @@ to visually support naming conventions.")
(defun vhdl-doc-variable (variable)
"Display VARIABLE's documentation in *Help* buffer."
(interactive)
- (unless vhdl-xemacs
+ (unless (featurep 'xemacs)
(help-setup-xref (list #'vhdl-doc-variable variable) (interactive-p)))
(with-output-to-temp-buffer
(if (fboundp 'help-buffer) (help-buffer) "*Help*")
@@ -17001,7 +16998,7 @@ to visually support naming conventions.")
(defun vhdl-doc-mode ()
"Display VHDL Mode documentation in *Help* buffer."
(interactive)
- (unless vhdl-xemacs
+ (unless (featurep 'xemacs)
(help-setup-xref (list #'vhdl-doc-mode) (interactive-p)))
(with-output-to-temp-buffer
(if (fboundp 'help-buffer) (help-buffer) "*Help*")
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index 7d953be1d5c..577ad024a2b 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -76,8 +76,9 @@
:version "20.3")
(defcustom which-func-modes
- '(emacs-lisp-mode c-mode c++-mode perl-mode cperl-mode makefile-mode
- sh-mode fortran-mode f90-mode ada-mode)
+ '(emacs-lisp-mode c-mode c++-mode perl-mode cperl-mode python-mode
+ makefile-mode sh-mode fortran-mode f90-mode ada-mode
+ diff-mode)
"List of major modes for which Which Function mode should be used.
For other modes it is disabled. If this is equal to t,
then Which Function mode is enabled in any major mode that supports it."
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index a820ca4cede..f437bb7da37 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -101,17 +101,17 @@ from being inserted into the process-buffer.")
(setq-default scheme-mode-line-process
'("" xscheme-runlight))
-(mapcar 'make-variable-buffer-local
- '(xscheme-expressions-ring
- xscheme-expressions-ring-yank-pointer
- xscheme-process-filter-state
- xscheme-running-p
- xscheme-control-g-disabled-p
- xscheme-allow-output-p
- xscheme-prompt
- xscheme-string-accumulator
- xscheme-mode-string
- scheme-mode-line-process))
+(mapc 'make-variable-buffer-local
+ '(xscheme-expressions-ring
+ xscheme-expressions-ring-yank-pointer
+ xscheme-process-filter-state
+ xscheme-running-p
+ xscheme-control-g-disabled-p
+ xscheme-allow-output-p
+ xscheme-prompt
+ xscheme-string-accumulator
+ xscheme-mode-string
+ scheme-mode-line-process))
(defgroup xscheme nil
"Major mode for editing Scheme and interacting with MIT's C-Scheme."
diff --git a/lisp/ps-mule.el b/lisp/ps-mule.el
index 2c3eb7207ef..fcad2c85bdf 100644
--- a/lisp/ps-mule.el
+++ b/lisp/ps-mule.el
@@ -46,24 +46,24 @@
;;
;; Valid values for `ps-multibyte-buffer' are:
;;
-;; nil This is the value to use the default settings which
-;; is by default for printing buffer with only ASCII
-;; and Latin characters. The default setting can be
-;; changed by setting the variable
+;; nil This is the value to use the default settings;
+;; by default, this only works to print buffers with
+;; only ASCII and Latin characters. But this default
+;; setting can be changed by setting the variable
;; `ps-mule-font-info-database-default' differently.
;; The initial value of this variable is
;; `ps-mule-font-info-database-latin' (see
;; documentation).
;;
-;; `non-latin-printer' This is the value to use when you have a japanese
+;; `non-latin-printer' This is the value to use when you have a japanese
;; or korean PostScript printer and want to print
;; buffer with ASCII, Latin-1, Japanese (JISX0208 and
;; JISX0201-Kana) and Korean characters. At present,
-;; it was not tested the Korean characters printing.
-;; If you have a korean PostScript printer, please,
-;; test it.
+;; it was not tested with the Korean characters
+;; printing. If you have a korean PostScript printer,
+;; please, test it.
;;
-;; `bdf-font' This is the value to use when you want to print
+;; `bdf-font' This is the value to use when you want to print
;; buffer with BDF fonts. BDF fonts include both latin
;; and non-latin fonts. BDF (Bitmap Distribution
;; Format) is a format used for distributing X's font
@@ -75,7 +75,7 @@
;; `bdf-directory-list' appropriately (see ps-bdf.el
;; for documentation of this variable).
;;
-;; `bdf-font-except-latin' This is like `bdf-font' except that it is used
+;; `bdf-font-except-latin' This is like `bdf-font' except that it uses
;; PostScript default fonts to print ASCII and Latin-1
;; characters. This is convenient when you want or
;; need to use both latin and non-latin characters on
@@ -171,24 +171,24 @@
Valid values are:
- nil This is the value to use the default settings which
- is by default for printing buffer with only ASCII
- and Latin characters. The default setting can be
- changed by setting the variable
+ nil This is the value to use the default settings;
+ by default, this only works to print buffers with
+ only ASCII and Latin characters. But this default
+ setting can be changed by setting the variable
`ps-mule-font-info-database-default' differently.
The initial value of this variable is
`ps-mule-font-info-database-latin' (see
documentation).
- `non-latin-printer' This is the value to use when you have a Japanese
+ `non-latin-printer' This is the value to use when you have a Japanese
or Korean PostScript printer and want to print
buffer with ASCII, Latin-1, Japanese (JISX0208 and
JISX0201-Kana) and Korean characters. At present,
- it was not tested the Korean characters printing.
- If you have a korean PostScript printer, please,
- test it.
+ it was not tested with the Korean characters
+ printing. If you have a korean PostScript printer,
+ please, test it.
- `bdf-font' This is the value to use when you want to print
+ `bdf-font' This is the value to use when you want to print
buffer with BDF fonts. BDF fonts include both latin
and non-latin fonts. BDF (Bitmap Distribution
Format) is a format used for distributing X's font
@@ -200,7 +200,7 @@ Valid values are:
`bdf-directory-list' appropriately (see ps-bdf.el for
documentation of this variable).
- `bdf-font-except-latin' This is like `bdf-font' except that it is used
+ `bdf-font-except-latin' This is like `bdf-font' except that it uses
PostScript default fonts to print ASCII and Latin-1
characters. This is convenient when you want or
need to use both latin and non-latin characters on
@@ -417,22 +417,26 @@ See also `ps-mule-font-info-database-bdf'.")
(defun ps-mule-encode-bit (string delta)
(let* ((dim (charset-dimension (char-charset (string-to-char string))))
- (len (* (length string) dim))
- (str (make-string len 0))
- (i 0)
+ (len (length string))
+ (str (make-string (* len dim) 0))
(j 0))
(if (= dim 1)
- (while (< j len)
- (aset str j
- (+ (nth 1 (split-char (aref string i))) delta))
- (setq i (1+ i)
- j (1+ j)))
- (while (< j len)
+ ;; (apply 'string
+ ;; (mapcar (lambda (c) (+ (nth 1 (split-char c)) delta))
+ ;; string))
+ (dotimes (i len)
+ (aset str i
+ (+ (nth 1 (split-char (aref string i))) delta)))
+ ;; (mapconcat (lambda (c)
+ ;; (let ((split (split-char c)))
+ ;; (string (+ (nth 1 split) delta)
+ ;; (+ (nth 2 split) delta))))
+ ;; string "")
+ (dotimes (i len)
(let ((split (split-char (aref string i))))
(aset str j (+ (nth 1 split) delta))
(aset str (1+ j) (+ (nth 2 split) delta))
- (setq i (1+ i)
- j (+ j 2)))))
+ (setq j (+ j 2)))))
str))
;; Special encoding function for Ethiopic.
@@ -455,31 +459,29 @@ See also `ps-mule-font-info-database-bdf'.")
;; to avoid compilation gripes
(defvar ccl-encode-ethio-unicode nil))
-(if (boundp 'mule-version)
- ;; bound mule-version
- (defun ps-mule-encode-ethiopic (string)
- (ccl-execute-on-string (symbol-value 'ccl-encode-ethio-unicode)
- (make-vector 9 nil)
- string))
- ;; unbound mule-version
- (defun ps-mule-encode-ethiopic (string)
- string))
+(defalias 'ps-mule-encode-ethiopic
+ (if (boundp 'mule-version)
+ ;; Bound mule-version.
+ (lambda (string)
+ (ccl-execute-on-string (symbol-value 'ccl-encode-ethio-unicode)
+ (make-vector 9 nil)
+ string))
+ ;; Unbound mule-version.
+ #'identity))
;; Special encoding for mule-unicode-* characters.
(defun ps-mule-encode-ucs2 (string)
(let* ((len (length string))
(str (make-string (* 2 len) 0))
- (i 0)
(j 0)
ch hi lo)
- (while (< i len)
+ (dotimes (i len)
(setq ch (encode-char (aref string i) 'ucs)
hi (lsh ch -8)
lo (logand ch 255))
(aset str j hi)
(aset str (1+ j) lo)
- (setq i (1+ i)
- j (+ j 2)))
+ (setq j (+ j 2)))
str))
;; A charset which we are now processing.
@@ -518,16 +520,17 @@ element of the list."
(defconst ps-mule-external-libraries
'((builtin nil nil
nil nil nil)
- (bdf ps-bdf nil
- bdf-generate-prologue bdf-generate-font bdf-generate-glyphs)
- (pcf nil nil
- pcf-generate-prologue pcf-generate-font pcf-generate-glyphs)
- (vflib nil nil
- vflib-generate-prologue vflib-generate-font vflib-generate-glyphs))
- "Alist of information of external libraries to support PostScript printing.
+ (bdf ps-bdf nil
+ bdf-generate-prologue bdf-generate-font bdf-generate-glyphs)
+ (pcf nil nil
+ pcf-generate-prologue pcf-generate-font pcf-generate-glyphs)
+ (vflib nil nil
+ vflib-generate-prologue vflib-generate-font vflib-generate-glyphs))
+ "Alist of external libraries information to support PostScript printing.
Each element has the form:
- (FONT-SRC FEATURE INITIALIZED-P PROLOGUE-FUNC FONT-FUNC GLYPHS-FUNC)
+ (FONT-SRC FEATURE INITIALIZED-P
+ PROLOGUE-FUNC FONT-FUNC GLYPHS-FUNC)
FONT-SRC is the font source: builtin, bdf, pcf, or vflib.
@@ -541,8 +544,8 @@ PROLOGUE-FUNC is a function to generate PostScript code which define several
PostScript procedures that will be called by FONT-FUNC and GLYPHS-FUNC. It is
called with no argument, and should return a list of strings.
-FONT-FUNC is a function to generate PostScript code which define a new font. It
-is called with one argument FONT-SPEC, and should return a list of strings.
+FONT-FUNC is a function to generate PostScript code which define a new font.
+It is called with one argument FONT-SPEC, and should return a list of strings.
GLYPHS-FUNC is a function to generate PostScript code which define glyphs of
characters. It is called with three arguments FONT-SPEC, CODE-LIST, and BYTES,
@@ -906,11 +909,8 @@ the sequence."
;; The latter form is used if we much change font for the character.
(defun ps-mule-prepare-font-for-components (components font-type)
- (let ((len (length components))
- (i 0)
- elt)
- (while (< i len)
- (setq elt (aref components i))
+ (dotimes (i (length components))
+ (let ((elt (aref components i)))
(if (consp elt)
;; ELT is a composition rule.
(setq elt (encode-composition-rule elt))
@@ -930,8 +930,7 @@ the sequence."
(if (stringp font)
(setq elt (cons font str) ps-last-font font)
(setq elt str))))
- (aset components i elt)
- (setq i (1+ i))))
+ (aset components i elt)))
components)
(defun ps-mule-plot-components (components tail)
@@ -1363,12 +1362,10 @@ FONTTAG should be a string \"/h0\" or \"/h1\"."
(if (eq (car ps-mule-header-charsets) 'latin-iso8859-1)
;; Latin1 characters can be printed by the standard PostScript
;; font. Converts the other non-ASCII characters to `?'.
- (let ((len (length string))
- (i 0))
- (while (< i len)
+ (let ((len (length string)))
+ (dotimes (i len)
(or (memq (char-charset (aref string i)) '(ascii latin-iso8859-1))
- (aset string i ??))
- (setq i (1+ i)))
+ (aset string i ??)))
(setq string (encode-coding-string string 'iso-latin-1)))
;; We must prepare a font for the first non-ASCII and non-Latin1
;; character in STRING.
@@ -1383,21 +1380,17 @@ FONTTAG should be a string \"/h0\" or \"/h1\"."
;; We don't have a proper font, or we can't print them on
;; header because this kind of charset is not ASCII
;; compatible.
- (let ((len (length string))
- (i 0))
- (while (< i len)
+ (let ((len (length string)))
+ (dotimes (i len)
(or (memq (char-charset (aref string i))
'(ascii latin-iso8859-1))
- (aset string i ??))
- (setq i (1+ i)))
+ (aset string i ??)))
(setq string (encode-coding-string string 'iso-latin-1)))
(let ((charsets (list 'ascii (car ps-mule-header-charsets)))
- (len (length string))
- (i 0))
- (while (< i len)
+ (len (length string)))
+ (dotimes (i len)
(or (memq (char-charset (aref string i)) charsets)
- (aset string i ??))
- (setq i (1+ i))))
+ (aset string i ??))))
(setq string (ps-mule-string-encoding font-spec string nil t))))))
string)
@@ -1446,7 +1439,7 @@ FONTTAG should be a string \"/h0\" or \"/h1\"."
or \\[universal-argument] \\[what-cursor-position] will give information about them.\n"))))
(with-category-table table
- (let (string-list idx)
+ (let (string-list)
(dolist (elt header-footer-list)
(when (stringp elt)
(when (string-match "\\cu+" elt)
@@ -1466,7 +1459,7 @@ or \\[universal-argument] \\[what-cursor-position] will give information about t
;;;###autoload
(defun ps-mule-begin-job (from to)
"Start printing job for multi-byte chars between FROM and TO.
-This checks if all multi-byte characters in the region are printable or not."
+It checks if all multi-byte characters in the region are printable or not."
(setq ps-mule-charset-list nil
ps-mule-header-charsets nil
ps-mule-font-info-database
@@ -1541,14 +1534,12 @@ This checks if all multi-byte characters in the region are printable or not."
(progn
(ps-mule-prologue-generated)
(ps-mule-init-external-library font-spec)
- (let ((font (ps-font-alist 'ps-font-for-text))
- (ps-current-font 0))
- (while font
+ (let ((ps-current-font 0))
+ (dolist (font (ps-font-alist 'ps-font-for-text))
;; Be sure to download a glyph for SPACE in advance.
- (ps-mule-prepare-font (ps-mule-get-font-spec 'ascii (car font))
+ (ps-mule-prepare-font (ps-mule-get-font-spec 'ascii font)
" " 'ascii 'no-setfont)
- (setq font (cdr font)
- ps-current-font (1+ ps-current-font)))))))
+ (setq ps-current-font (1+ ps-current-font)))))))
;; If the header contains non-ASCII and non-Latin1 characters, prepare a font
;; and glyphs for the first occurrence of such characters.
@@ -1581,5 +1572,9 @@ This checks if all multi-byte characters in the region are printable or not."
(provide 'ps-mule)
-;;; arch-tag: bca017b2-66a7-4e59-8584-103e749eadbe
+;; Local Variables:
+;; generated-autoload-file: "ps-print.el"
+;; End:
+
+;; arch-tag: bca017b2-66a7-4e59-8584-103e749eadbe
;;; ps-mule.el ends here
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index bdc21a2e7ab..ba8075730d5 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -10,11 +10,11 @@
;; Maintainer: Kenichi Handa <handa@m17n.org> (multi-byte characters)
;; Vinicius Jose Latorre <viniciusjl@ig.com.br>
;; Keywords: wp, print, PostScript
-;; Version: 6.7.6
+;; Version: 6.8.1
;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre
-(defconst ps-print-version "6.7.6"
- "ps-print.el, v 6.7.6 <2007/10/10 vinicius>
+(defconst ps-print-version "6.8.1"
+ "ps-print.el, v 6.8.1 <2007/11/09 vinicius>
Vinicius's last change version -- this file may have been edited as part of
Emacs without changes to the version number. When reporting bugs, please also
@@ -1089,6 +1089,14 @@ Please send all bug fixes and enhancements to
;; You can also set `ps-print-color-p' to 'black-white to have a better looking
;; on black/white printers. See also `ps-black-white-faces' for documentation.
;;
+;; ps-print also detects if the text foreground and background colors are
+;; equals when `ps-fg-validate-p' is non-nil. In this case, if these colors
+;; are used, no text will appear. You can use `ps-fg-list' to give a list of
+;; foreground colors to be used when text foreground and background colors are
+;; equals. It'll be used the first foreground color in `ps-fg-list' which is
+;; different from the background color. If `ps-fg-list' is nil, the default
+;; foreground color is used.
+;;
;;
;; How Ps-Print Maps Faces
;; -----------------------
@@ -1212,85 +1220,88 @@ Please send all bug fixes and enhancements to
;;
;; [vinicius] Vinicius Jose Latorre <viniciusjl@ig.com.br>
;;
-;; 20040229
+;; 2007-10-27
+;; `ps-fg-validate-p', `ps-fg-list'
+;;
+;; 2004-02-29
;; `ps-time-stamp-yyyy-mm-dd', `ps-time-stamp-iso8601'
;;
-;; 20010619
+;; 2001-06-19
;; `ps-time-stamp-locale-default'
;;
-;; 20010530
+;; 2001-05-30
;; Handle before-string and after-string overlay properties.
;;
-;; 20010407
+;; 2001-04-07
;; `ps-line-number-color', `ps-print-footer', `ps-footer-offset',
;; `ps-print-footer-frame', `ps-footer-font-family',
;; `ps-footer-font-size', `ps-footer-line-pad', `ps-footer-lines',
;; `ps-left-footer', `ps-right-footer', `ps-footer-frame-alist' and
;; `ps-header-frame-alist'.
;;
-;; 20010328
+;; 2001-03-28
;; `ps-line-spacing', `ps-paragraph-spacing', `ps-paragraph-regexp',
;; `ps-begin-cut-regexp' and `ps-end-cut-regexp'.
;;
-;; 20001122
+;; 2000-11-22
;; `ps-line-number-font', `ps-line-number-font-size' and
;; `ps-end-with-control-d'.
;;
-;; 20000821
+;; 2000-08-21
;; `ps-even-or-odd-pages'
;;
-;; 20000617
+;; 2000-06-17
;; `ps-manual-feed', `ps-warn-paper-type', `ps-print-upside-down',
;; `ps-selected-pages', `ps-last-selected-pages',
;; `ps-restore-selected-pages', `ps-switch-header',
;; `ps-line-number-step', `ps-line-number-start',
;; `ps-zebra-stripe-follow' and `ps-use-face-background'.
;;
-;; 20000310
+;; 2000-03-10
;; PostScript error handler.
;; `ps-user-defined-prologue' and `ps-error-handler-message'.
;;
-;; 19991211
+;; 1999-12-11
;; `ps-print-customize'.
;;
-;; 19990703
+;; 1999-07-03
;; Better customization.
;; `ps-banner-page-when-duplexing' and `ps-zebra-color'.
;;
-;; 19990513
+;; 1999-05-13
;; N-up printing.
;; Hook: `ps-print-begin-sheet-hook'.
;;
-;; [kenichi] 19990509 Ken'ichi Handa <handa@m17n.org>
+;; [kenichi] 1999-05-09 Ken'ichi Handa <handa@m17n.org>
;;
;; `ps-print-region-function'
;;
;; [vinicius] Vinicius Jose Latorre <viniciusjl@ig.com.br>
;;
-;; 19990301
+;; 1999-03-01
;; PostScript tumble and setpagedevice.
;;
-;; 19980922
+;; 1998-09-22
;; PostScript prologue header comment insertion.
;; Skip invisible text better.
;;
-;; [kenichi] 19980819 Ken'ichi Handa <handa@m17n.org>
+;; [kenichi] 1998-08-19 Ken'ichi Handa <handa@m17n.org>
;;
;; Multi-byte buffer handling.
;;
;; [vinicius] Vinicius Jose Latorre <viniciusjl@ig.com.br>
;;
-;; 19980306
+;; 1998-03-06
;; Skip invisible text.
;;
-;; 19971130
+;; 1997-11-30
;; Hooks: `ps-print-hook', `ps-print-begin-page-hook' and
;; `ps-print-begin-column-hook'.
;; Put one header per page over the columns.
;; Better database font management.
;; Better control characters handling.
;;
-;; 19971121
+;; 1997-11-21
;; Dynamic evaluation at print time of `ps-lpr-switches'.
;; Handle control characters.
;; Face remapping.
@@ -1299,12 +1310,12 @@ Please send all bug fixes and enhancements to
;; Zebra stripes.
;; Text and/or image on background.
;;
-;; [jack] 19960517 Jacques Duthen <duthen@cegelec-red.fr>
+;; [jack] 1996-05-17 Jacques Duthen <duthen@cegelec-red.fr>
;;
-;; Font family and float size for text and header.
-;; Landscape mode.
-;; Multiple columns.
-;; Tools for page setup.
+;; Font family and float size for text and header.
+;; Landscape mode.
+;; Multiple columns.
+;; Tools for page setup.
;;
;;
;; Known bugs and limitations of ps-print
@@ -1343,8 +1354,11 @@ Please send all bug fixes and enhancements to
;; ----------------
;;
;; Avoid page break inside a paragraph.
+;;
;; Add `ps-non-bold-faces' and `ps-non-italic-faces' (should be easy).
+;;
;; Improve the memory management for big files (hard?).
+;;
;; `ps-nb-pages-buffer' and `ps-nb-pages-region' should take care of folding
;; lines.
;;
@@ -1448,16 +1462,11 @@ Please send all bug fixes and enhancements to
(or (featurep 'lisp-float-type)
(error "`ps-print' requires floating point support"))
-(let ((case-fold-search t))
- (cond ((string-match "XEmacs" emacs-version))
- ((string-match "Lucid" emacs-version)
- (error "`ps-print' doesn't support Lucid"))
- ((string-match "Epoch" emacs-version)
- (error "`ps-print' doesn't support Epoch"))
- (t
- (unless (and (boundp 'emacs-major-version)
- (>= emacs-major-version 22))
- (error "`ps-print' only supports Emacs 22 and higher")))))
+(if (featurep 'xemacs)
+ ()
+ (unless (and (boundp 'emacs-major-version)
+ (>= emacs-major-version 22))
+ (error "`ps-print' only supports Emacs 22 and higher")))
;; GNU Emacs
@@ -1471,32 +1480,7 @@ Please send all bug fixes and enhancements to
;; to avoid compilation gripes
-;; XEmacs
-(defalias 'ps-x-color-instance-p 'color-instance-p)
-(defalias 'ps-x-color-instance-rgb-components 'color-instance-rgb-components)
-(defalias 'ps-x-color-name 'color-name)
-(defalias 'ps-x-color-specifier-p 'color-specifier-p)
-(defalias 'ps-x-copy-coding-system 'copy-coding-system)
-(defalias 'ps-x-device-class 'device-class)
-(defalias 'ps-x-extent-end-position 'extent-end-position)
-(defalias 'ps-x-extent-face 'extent-face)
-(defalias 'ps-x-extent-priority 'extent-priority)
-(defalias 'ps-x-extent-start-position 'extent-start-position)
-(defalias 'ps-x-face-font-instance 'face-font-instance)
-(defalias 'ps-x-find-coding-system 'find-coding-system)
-(defalias 'ps-x-font-instance-properties 'font-instance-properties)
-(defalias 'ps-x-make-color-instance 'make-color-instance)
-(defalias 'ps-x-map-extents 'map-extents)
-
;; GNU Emacs
-(defalias 'ps-e-face-bold-p 'face-bold-p)
-(defalias 'ps-e-face-italic-p 'face-italic-p)
-(defalias 'ps-e-next-overlay-change 'next-overlay-change)
-(defalias 'ps-e-overlays-at 'overlays-at)
-(defalias 'ps-e-overlay-get 'overlay-get)
-(defalias 'ps-e-overlay-end 'overlay-end)
-(defalias 'ps-e-x-color-values 'x-color-values)
-(defalias 'ps-e-color-values 'color-values)
(defalias 'ps-e-find-composition (if (fboundp 'find-composition)
'find-composition
'ignore))
@@ -1509,9 +1493,10 @@ Please send all bug fixes and enhancements to
(defun ps-xemacs-color-name (color)
- (if (ps-x-color-specifier-p color)
- (ps-x-color-name color)
- color))
+ (when (featurep 'xemacs)
+ (if (color-specifier-p color)
+ (color-name color)
+ color)))
(defalias 'ps-frame-parameter
(if (fboundp 'frame-parameter) 'frame-parameter 'frame-property))
@@ -1522,19 +1507,15 @@ Please send all bug fixes and enhancements to
(defvar mark-active) ; To shup up XEmacs's byte compiler.
(lambda () mark-active))) ; Emacs
-(cond ((featurep 'xemacs) ; XEmacs
- (defun ps-face-foreground-name (face)
- (ps-xemacs-color-name (face-foreground face)))
- (defun ps-face-background-name (face)
- (ps-xemacs-color-name (face-background face)))
- )
- (t ; Emacs 22 or higher
- (defun ps-face-foreground-name (face)
- (face-foreground face nil t))
- (defun ps-face-background-name (face)
- (face-background face nil t))
- ))
+(defun ps-face-foreground-name (face)
+ (if (featurep 'xemacs)
+ (ps-xemacs-color-name (face-foreground face))
+ (face-foreground face nil t)))
+(defun ps-face-background-name (face)
+ (if (featurep 'xemacs)
+ (ps-xemacs-color-name (face-background face))
+ (face-background face nil t)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; User Variables:
@@ -3014,7 +2995,7 @@ Valid values are:
LIST It's a list of RGB values, that is a list of three real values
of the form:
- (RED, GREEN, BLUE)
+ (RED GREEN BLUE)
Where RED, GREEN and BLUE are reals between 0.0 (no color) and
1.0 (full color).
@@ -3058,7 +3039,7 @@ Valid values are:
LIST It's a list of RGB values, that is a list of three real values
of the form:
- (RED, GREEN, BLUE)
+ (RED GREEN BLUE)
Where RED, GREEN and BLUE are reals between 0.0 (no color) and
1.0 (full color).
@@ -3082,6 +3063,58 @@ See also `ps-use-face-background'."
:version "20"
:group 'ps-print-color)
+(defcustom ps-fg-list nil
+ "*Specify foreground color list.
+
+This list is used to chose a text foreground color which is different than the
+background color. It'll be used the first foreground color in `ps-fg-list'
+which is different from the background color.
+
+If this list is nil, the default foreground color is used. See
+`ps-default-fg'.
+
+The list element valid values are:
+
+ NUMBER It's a real value between 0.0 (black) and 1.0 (white) that
+ indicate the gray color.
+
+ COLOR-NAME It's a string which contains the color name. For example:
+ \"yellow\".
+
+ LIST It's a list of RGB values, that is a list of three real values
+ of the form:
+
+ (RED GREEN BLUE)
+
+ Where RED, GREEN and BLUE are reals between 0.0 (no color) and
+ 1.0 (full color).
+
+Any other value is ignored and black color will be used.
+
+This variable is used only when `ps-fg-validate-p' (which see) is non-nil and
+when `ps-print-color-p' (which see) is neither nil nor black-white."
+ :type '(repeat
+ (choice :menu-tag "Foreground Gray/Color"
+ :tag "Foreground Gray/Color"
+ (number :tag "Gray Scale" :value 0.0)
+ (string :tag "Color Name" :value "black")
+ (list :tag "RGB Color" :value (0.0 0.0 0.0)
+ (number :tag "Red")
+ (number :tag "Green")
+ (number :tag "Blue"))))
+ :version "22"
+ :group 'ps-print-color)
+
+(defcustom ps-fg-validate-p t
+ "*Non-nil means validate if foreground color is different than background.
+
+If text foreground and background colors are equals, no text will appear.
+
+See also `ps-fg-list'."
+ :type 'boolean
+ :version "22"
+ :group 'ps-print-color)
+
(defcustom ps-auto-font-detect t
"*Non-nil means automatically detect bold/italic/underline face attributes.
If nil, we rely solely on the lists `ps-bold-faces', `ps-italic-faces', and
@@ -3346,9 +3379,9 @@ It's like the very first character of buffer (or region) is ^L (\\014)."
(defcustom ps-postscript-code-directory
(or (if (featurep 'xemacs)
(cond ((fboundp 'locate-data-directory) ; XEmacs
- (locate-data-directory "ps-print"))
+ (funcall 'locate-data-directory "ps-print"))
((boundp 'data-directory) ; XEmacs
- data-directory)
+ (symbol-value 'data-directory))
(t ; don't know what to do
nil))
data-directory) ; Emacs
@@ -3627,9 +3660,11 @@ The table depends on the current ps-print setup."
'(23 . ps-line-number-step)
'(23 . ps-line-number-start)
nil
- '(17 . ps-default-fg)
- '(17 . ps-default-bg)
'(17 . ps-razzle-dazzle)
+ '(17 . ps-default-bg)
+ '(17 . ps-default-fg)
+ '(17 . ps-fg-validate-p)
+ '(17 . ps-fg-list)
nil
'(23 . ps-use-face-background)
nil
@@ -3709,9 +3744,9 @@ The table depends on the current ps-print setup."
'(20 . ps-underlined-faces)
'(20 . ps-black-white-faces)
" )\n
-;; The following customized variables have long lists and are seldom modified:
-;; ps-page-dimensions-database
-;; ps-font-info-database
+\;; The following customized variables have long lists and are seldom modified:
+\;; ps-page-dimensions-database
+\;; ps-font-info-database
\;;; ps-print - end of settings\n")
"\n")))
@@ -3861,90 +3896,84 @@ It can be retrieved with `(ps-get ALIST-SYM KEY)'."
(and (= emacs-major-version 19)
(>= emacs-minor-version 12)))) ; XEmacs >= 19.12
(lambda ()
- (eq (ps-x-device-class) 'color)))
+ (eq (device-class) 'color)))
(t ; Emacs
(lambda ()
(if (fboundp 'color-values)
- (ps-e-color-values "Green")
+ (color-values "Green")
t)))))
-(defun ps-mapper (extent list)
- (nconc list
- (list (list (ps-x-extent-start-position extent) 'push extent)
- (list (ps-x-extent-end-position extent) 'pull extent)))
+(defun ps-xemacs-mapper (extent list)
+ (when (featurep 'xemacs)
+ (nconc list
+ (list (list (extent-start-position extent) 'push extent)
+ (list (extent-end-position extent) 'pull extent))))
nil)
-(defun ps-extent-sorter (a b)
- (< (ps-x-extent-priority a) (ps-x-extent-priority b)))
+(defun ps-xemacs-extent-sorter (a b)
+ (when (featurep 'xemacs)
+ (< (extent-priority a) (extent-priority b))))
(defun ps-xemacs-face-kind-p (face kind kind-regex)
- (let* ((frame-font (or (ps-x-face-font-instance face)
- (ps-x-face-font-instance 'default)))
- (kind-cons
- (and frame-font
- (assq kind
- (ps-x-font-instance-properties frame-font))))
- (kind-spec (cdr-safe kind-cons))
- (case-fold-search t))
- (and kind-spec (string-match kind-regex kind-spec))))
-
-(cond ((featurep 'xemacs) ; XEmacs
-
- ;; to avoid XEmacs compilation gripes
- (defvar coding-system-for-write)
- (defvar coding-system-for-read)
- (defvar buffer-file-coding-system)
-
- (and (fboundp 'find-coding-system)
- (or (ps-x-find-coding-system 'raw-text-unix)
- (ps-x-copy-coding-system 'no-conversion-unix 'raw-text-unix)))
-
- (defun ps-color-values (x-color)
- (let ((color (ps-xemacs-color-name x-color)))
- (cond
- ((fboundp 'x-color-values)
- (ps-e-x-color-values color))
- ((and (fboundp 'color-instance-rgb-components)
- (ps-color-device))
- (ps-x-color-instance-rgb-components
- (if (ps-x-color-instance-p x-color)
- x-color
- (ps-x-make-color-instance color))))
- (t
- (error "No available function to determine X color values")))))
-
- (defun ps-face-bold-p (face)
- (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
- (memq face ps-bold-faces))) ; Kludge-compatible
-
- (defun ps-face-italic-p (face)
- (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
- (ps-xemacs-face-kind-p face 'SLANT "i\\|o")
- (memq face ps-italic-faces))) ; Kludge-compatible
- )
-
- (t ; Emacs
-
- (defun ps-color-values (x-color)
- (cond
- ((fboundp 'color-values)
- (ps-e-color-values x-color))
- ((fboundp 'x-color-values)
- (ps-e-x-color-values x-color))
- (t
- (error "No available function to determine X color values"))))
-
- (defun ps-face-bold-p (face)
- (or (ps-e-face-bold-p face)
- (memq face ps-bold-faces)))
-
- (defun ps-face-italic-p (face)
- (or (ps-e-face-italic-p face)
- (memq face ps-italic-faces)))
- ))
+ (when (featurep 'xemacs)
+ (let* ((frame-font (or (face-font-instance face)
+ (face-font-instance 'default)))
+ (kind-cons
+ (and frame-font
+ (assq kind
+ (font-instance-properties frame-font))))
+ (kind-spec (cdr-safe kind-cons))
+ (case-fold-search t))
+ (and kind-spec (string-match kind-regex kind-spec)))))
+
+(when (featurep 'xemacs)
+ ;; to avoid XEmacs compilation gripes
+ (defvar coding-system-for-write)
+ (defvar coding-system-for-read)
+ (defvar buffer-file-coding-system)
+
+ (and (fboundp 'find-coding-system)
+ (or (find-coding-system 'raw-text-unix)
+ (copy-coding-system 'no-conversion-unix 'raw-text-unix))))
+
+(defun ps-color-values (x-color)
+ (if (featurep 'xemacs)
+ (let ((color (ps-xemacs-color-name x-color)))
+ (cond
+ ((fboundp 'x-color-values)
+ (x-color-values color))
+ ((and (fboundp 'color-instance-rgb-components)
+ (ps-color-device))
+ (color-instance-rgb-components
+ (if (color-instance-p x-color)
+ x-color
+ (make-color-instance color))))
+ (t
+ (error "No available function to determine X color values"))))
+ (cond
+ ((fboundp 'color-values)
+ (color-values x-color))
+ ((fboundp 'x-color-values)
+ (x-color-values x-color))
+ (t
+ (error "No available function to determine X color values")))))
+
+(defun ps-face-bold-p (face)
+ (if (featurep 'xemacs)
+ (or (ps-xemacs-face-kind-p face 'WEIGHT_NAME "bold\\|demibold")
+ (memq face ps-bold-faces)) ; Kludge-compatible
+ (or (face-bold-p face)
+ (memq face ps-bold-faces))))
+(defun ps-face-italic-p (face)
+ (if (featurep 'xemacs)
+ (or (ps-xemacs-face-kind-p face 'ANGLE_NAME "i\\|o")
+ (ps-xemacs-face-kind-p face 'SLANT "i\\|o")
+ (memq face ps-italic-faces)) ; Kludge-compatible
+ (or (face-italic-p face)
+ (memq face ps-italic-faces))))
(defvar ps-print-color-scale 1.0)
@@ -4020,6 +4049,7 @@ Note: No major/minor-mode is activated and no local variables are evaluated for
(defvar ps-default-color nil)
(defvar ps-current-color nil)
(defvar ps-current-bg nil)
+(defvar ps-foreground-list nil)
(defvar ps-zebra-stripe-full-p nil)
(defvar ps-razchunk 0)
@@ -5028,15 +5058,15 @@ page-height == ((floor print-height ((th + ls) * zh)) * ((th + ls) * zh)) - th
(defun ps-background (page-number)
(let (has-local-background)
- (mapcar #'(lambda (range)
- (and (<= (aref range 0) page-number)
- (<= page-number (aref range 1))
- (if has-local-background
- (ps-output (aref range 2))
- (setq has-local-background t)
- (ps-output "/printLocalBackground{\n"
- (aref range 2)))))
- ps-background-pages)
+ (mapc #'(lambda (range)
+ (and (<= (aref range 0) page-number)
+ (<= page-number (aref range 1))
+ (if has-local-background
+ (ps-output (aref range 2))
+ (setq has-local-background t)
+ (ps-output "/printLocalBackground{\n"
+ (aref range 2)))))
+ ps-background-pages)
(and has-local-background (ps-output "}def\n"))))
@@ -5672,7 +5702,7 @@ XSTART YSTART are the relative position for the first page in a sheet.")
(ps-output "\n" ps-print-prologue-1
"\n/printGlobalBackground{\n")
- (mapcar 'ps-output ps-background-all-pages)
+ (mapc 'ps-output ps-background-all-pages)
(ps-output
"}def\n/printLocalBackground{\n}def\n"
"\n%%EndProlog\n\n%%BeginSetup\n"
@@ -5957,6 +5987,14 @@ XSTART YSTART are the relative position for the first page in a sheet.")
ps-default-fg))
"unspecified-fg"
0.0)
+ ps-foreground-list (mapcar
+ #'(lambda (arg)
+ (ps-rgb-color arg "unspecified-fg" 0.0))
+ (append (and (not (member ps-print-color-p
+ '(nil back-white)))
+ ps-fg-list)
+ (list ps-default-foreground
+ "black")))
ps-default-color (and (not (member ps-print-color-p
'(nil back-white)))
ps-default-foreground)
@@ -5964,6 +6002,8 @@ XSTART YSTART are the relative position for the first page in a sheet.")
;; initialize page dimensions
(ps-get-page-dimensions)
;; final check
+ (unless (listp ps-lpr-switches)
+ (error "`ps-lpr-switches' value should be a list."))
(and ps-color-p
(equal ps-default-background ps-default-foreground)
(error
@@ -6200,16 +6240,24 @@ to the equivalent Latin-1 characters.")
(or (equal font ps-current-font)
(ps-set-font font))
- ;; Specify a foreground color only if one's specified and it's
- ;; different than the current.
+ ;; Specify a foreground color only if:
+ ;; one's specified,
+ ;; it's different than the background (if `ps-fg-validate-p' is non-nil)
+ ;; and it's different than the current.
(let ((fg (or fg-color ps-default-foreground)))
+ (if ps-fg-validate-p
+ (let ((bg (or bg-color ps-default-background))
+ (el ps-foreground-list))
+ (while (and el (equal fg bg))
+ (setq fg (car el)
+ el (cdr el)))))
(or (equal fg ps-current-color)
(ps-set-color fg)))
(or (equal bg-color ps-current-bg)
(ps-set-bg bg-color))
- ;; Specify effects (underline, overline, box, etc)
+ ;; Specify effects (underline, overline, box, etc.)
(cond
((not (integerp effects))
(ps-output "0 EF\n")
@@ -6385,7 +6433,7 @@ If FACE is not a valid face name, use default face."
(defun ps-face-background (face background)
- (and (cond ((eq ps-use-face-background t)) ; always
+ (and (cond ((eq ps-use-face-background t)) ; always
((null ps-use-face-background) nil) ; never
;; ps-user-face-background is a symbol face list
((symbolp face)
@@ -6470,10 +6518,10 @@ If FACE is not a valid face name, use default face."
;; Now, rebuild reference face lists
(setq ps-print-face-alist nil)
(if ps-auto-font-detect
- (mapcar 'ps-map-face (face-list))
- (mapcar 'ps-set-face-bold ps-bold-faces)
- (mapcar 'ps-set-face-italic ps-italic-faces)
- (mapcar 'ps-set-face-underline ps-underlined-faces))
+ (mapc 'ps-map-face (face-list))
+ (mapc 'ps-set-face-bold ps-bold-faces)
+ (mapc 'ps-set-face-italic ps-italic-faces)
+ (mapc 'ps-set-face-underline ps-underlined-faces))
(setq ps-build-face-reference nil))
@@ -6555,7 +6603,7 @@ If FACE is not a valid face name, use default face."
;; Build the list of extents...
(let ((a (cons 'dummy nil))
record type extent extent-list)
- (ps-x-map-extents 'ps-mapper nil from to a)
+ (map-extents 'ps-xemacs-mapper nil from to a)
(setq a (sort (cdr a) 'car-less-than-car)
extent-list nil)
@@ -6581,16 +6629,16 @@ If FACE is not a valid face name, use default face."
(cond
((eq type 'push)
- (and (ps-x-extent-face extent)
+ (and (extent-face extent)
(setq extent-list (sort (cons extent extent-list)
- 'ps-extent-sorter))))
+ 'ps-xemacs-extent-sorter))))
((eq type 'pull)
(setq extent-list (sort (delq extent extent-list)
- 'ps-extent-sorter))))
+ 'ps-xemacs-extent-sorter))))
(setq face (if extent-list
- (ps-x-extent-face (car extent-list))
+ (extent-face (car extent-list))
'default)
from position
a (cdr a)))))
@@ -6607,7 +6655,7 @@ If FACE is not a valid face name, use default face."
(setq property-change (next-property-change from nil to)))
(and (< overlay-change to) ; Don't search for overlay change
; unless previous search succeeded.
- (setq overlay-change (min (ps-e-next-overlay-change from)
+ (setq overlay-change (min (next-overlay-change from)
to)))
(setq position (min property-change overlay-change)
before-string nil
@@ -6628,22 +6676,22 @@ If FACE is not a valid face name, use default face."
'emacs--invisible--face)
((get-text-property from 'face))
(t 'default)))
- (let ((overlays (ps-e-overlays-at from))
+ (let ((overlays (overlays-at from))
(face-priority -1)) ; text-property
(while (and overlays
(not (eq face 'emacs--invisible--face)))
(let* ((overlay (car overlays))
(overlay-invisible
- (ps-e-overlay-get overlay 'invisible))
+ (overlay-get overlay 'invisible))
(overlay-priority
- (or (ps-e-overlay-get overlay 'priority) 0)))
+ (or (overlay-get overlay 'priority) 0)))
(and (> overlay-priority face-priority)
(setq before-string
- (or (ps-e-overlay-get overlay 'before-string)
+ (or (overlay-get overlay 'before-string)
before-string)
after-string
- (or (and (<= (ps-e-overlay-end overlay) position)
- (ps-e-overlay-get overlay 'after-string))
+ (or (and (<= (overlay-end overlay) position)
+ (overlay-get overlay 'after-string))
after-string)
face-priority overlay-priority
face
@@ -6655,7 +6703,7 @@ If FACE is not a valid face name, use default face."
(assq overlay-invisible
save-buffer-invisibility-spec)))
'emacs--invisible--face)
- ((ps-e-overlay-get overlay 'face))
+ ((overlay-get overlay 'face))
(t face)
))))
(setq overlays (cdr overlays))))
@@ -7061,16 +7109,71 @@ If FACE is not a valid face name, use default face."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; To make this file smaller, some commands go in a separate file.
;; But autoload them here to make the separation invisible.
+
+;;;### (autoloads (ps-mule-begin-page ps-mule-begin-job ps-mule-encode-header-string
+;;;;;; ps-mule-initialize ps-mule-plot-composition ps-mule-plot-string
+;;;;;; ps-mule-set-ascii-font ps-mule-prepare-ascii-font ps-multibyte-buffer)
+;;;;;; "ps-mule" "ps-mule.el" "586d0a4deeb89be9b80cc01def34481c")
+;;; Generated autoloads from ps-mule.el
-(autoload 'ps-mule-prepare-ascii-font "ps-mule"
- "Setup special ASCII font for STRING.
-STRING should contain only ASCII characters.")
+(defvar ps-multibyte-buffer nil "\
+*Specifies the multi-byte buffer handling.
-(autoload 'ps-mule-set-ascii-font "ps-mule"
- "Adjust current font if current charset is not ASCII.")
+Valid values are:
-(autoload 'ps-mule-plot-string "ps-mule"
- "Generate PostScript code for plotting characters in the region FROM and TO.
+ nil This is the value to use the default settings;
+ by default, this only works to print buffers with
+ only ASCII and Latin characters. But this default
+ setting can be changed by setting the variable
+ `ps-mule-font-info-database-default' differently.
+ The initial value of this variable is
+ `ps-mule-font-info-database-latin' (see
+ documentation).
+
+ `non-latin-printer' This is the value to use when you have a Japanese
+ or Korean PostScript printer and want to print
+ buffer with ASCII, Latin-1, Japanese (JISX0208 and
+ JISX0201-Kana) and Korean characters. At present,
+ it was not tested with the Korean characters
+ printing. If you have a korean PostScript printer,
+ please, test it.
+
+ `bdf-font' This is the value to use when you want to print
+ buffer with BDF fonts. BDF fonts include both latin
+ and non-latin fonts. BDF (Bitmap Distribution
+ Format) is a format used for distributing X's font
+ source file. BDF fonts are included in
+ `intlfonts-1.2' which is a collection of X11 fonts
+ for all characters supported by Emacs. In order to
+ use this value, be sure to have installed
+ `intlfonts-1.2' and set the variable
+ `bdf-directory-list' appropriately (see ps-bdf.el for
+ documentation of this variable).
+
+ `bdf-font-except-latin' This is like `bdf-font' except that it uses
+ PostScript default fonts to print ASCII and Latin-1
+ characters. This is convenient when you want or
+ need to use both latin and non-latin characters on
+ the same buffer. See `ps-font-family',
+ `ps-header-font-family' and `ps-font-info-database'.
+
+Any other value is treated as nil.")
+
+(custom-autoload 'ps-multibyte-buffer "ps-mule" t)
+
+(autoload 'ps-mule-prepare-ascii-font "ps-mule" "\
+Setup special ASCII font for STRING.
+STRING should contain only ASCII characters.
+
+\(fn STRING)" nil nil)
+
+(autoload 'ps-mule-set-ascii-font "ps-mule" "\
+Not documented
+
+\(fn)" nil nil)
+
+(autoload 'ps-mule-plot-string "ps-mule" "\
+Generate PostScript code for plotting characters in the region FROM and TO.
It is assumed that all characters in this region belong to the same charset.
@@ -7081,23 +7184,50 @@ Returns the value:
(ENDPOS . RUN-WIDTH)
Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of
-the sequence.")
+the sequence.
+
+\(fn FROM TO &optional BG-COLOR)" nil nil)
+
+(autoload 'ps-mule-plot-composition "ps-mule" "\
+Generate PostScript code for plotting composition in the region FROM and TO.
+
+It is assumed that all characters in this region belong to the same
+composition.
+
+Optional argument BG-COLOR specifies background color.
+
+Returns the value:
+
+ (ENDPOS . RUN-WIDTH)
+
+Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of
+the sequence.
+
+\(fn FROM TO &optional BG-COLOR)" nil nil)
+
+(autoload 'ps-mule-initialize "ps-mule" "\
+Initialize global data for printing multi-byte characters.
+
+\(fn)" nil nil)
+
+(autoload 'ps-mule-encode-header-string "ps-mule" "\
+Generate PostScript code for ploting STRING by font FONTTAG.
+FONTTAG should be a string \"/h0\" or \"/h1\".
-(autoload 'ps-mule-initialize "ps-mule"
- "Initialize global data for printing multi-byte characters.")
+\(fn STRING FONTTAG)" nil nil)
-(autoload 'ps-mule-begin-job "ps-mule"
- "Start printing job for multi-byte chars between FROM and TO.
-This checks if all multi-byte characters in the region are printable or not.")
+(autoload 'ps-mule-begin-job "ps-mule" "\
+Start printing job for multi-byte chars between FROM and TO.
+It checks if all multi-byte characters in the region are printable or not.
-(autoload 'ps-mule-begin-page "ps-mule"
- "Initialize multi-byte charset for printing current page.")
+\(fn FROM TO)" nil nil)
-(autoload 'ps-mule-encode-header-string "ps-mule"
- "Generate PostScript code for plotting characters in header STRING.
+(autoload 'ps-mule-begin-page "ps-mule" "\
+Not documented
-It is assumed that the length of STRING is not zero.")
+\(fn)" nil nil)
+;;;***
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/lisp/recentf.el b/lisp/recentf.el
index 86263ae4924..ce342d87639 100644
--- a/lisp/recentf.el
+++ b/lisp/recentf.el
@@ -63,14 +63,14 @@ You should define the options of your own filters in this group."
:group 'recentf)
(defcustom recentf-max-saved-items 20
- "*Maximum number of items of the recent list that will be saved.
+ "Maximum number of items of the recent list that will be saved.
A nil value means to save the whole list.
See the command `recentf-save-list'."
:group 'recentf
:type 'integer)
(defcustom recentf-save-file "~/.recentf"
- "*File to save the recent list into."
+ "File to save the recent list into."
:group 'recentf
:type 'file
:initialize 'custom-initialize-default
@@ -89,9 +89,9 @@ file. See also the function `set-file-modes'."
:group 'recentf
:type '(choice (const :tag "Don't change" nil)
integer))
-
+
(defcustom recentf-exclude nil
- "*List of regexps and predicates for filenames excluded from the recent list.
+ "List of regexps and predicates for filenames excluded from the recent list.
When a filename matches any of the regexps or satisfies any of the
predicates it is excluded from the recent list.
A predicate is a function that is passed a filename to check and that
@@ -99,19 +99,27 @@ must return non-nil to exclude it."
:group 'recentf
:type '(repeat (choice regexp function)))
+(defun recentf-keep-default-predicate (file)
+ "Return non-nil if FILE should be kept in the recent list.
+It handles the case of remote files as well."
+ (cond
+ ((file-remote-p file nil t) (file-readable-p file))
+ ((file-remote-p file))
+ ((file-readable-p file))))
+
(defcustom recentf-keep
- '(file-readable-p)
- "*List of regexps and predicates for filenames kept in the recent list.
+ '(recentf-keep-default-predicate)
+ "List of regexps and predicates for filenames kept in the recent list.
Regexps and predicates are tried in the specified order.
When nil all filenames are kept in the recent list.
When a filename matches any of the regexps or satisfies any of the
predicates it is kept in the recent list.
-The default is to keep readable files.
+The default is to keep readable files. Remote files are checked
+for readability only in case a connection is established to that
+remote system, otherwise they are kept in the recent list without
+checking their readability.
A predicate is a function that is passed a filename to check and that
-must return non-nil to keep it. For example, you can add the
-`file-remote-p' predicate in front of this list to keep remote file
-names in the recent list without checking their readability through a
-remote access."
+must return non-nil to keep it."
:group 'recentf
:type '(repeat (choice regexp function)))
@@ -127,13 +135,13 @@ Set VARIABLE with VALUE, and force a rebuild of the recentf menu."
(set-default variable value)))
(defcustom recentf-menu-title "Open Recent"
- "*Name of the recentf menu."
+ "Name of the recentf menu."
:group 'recentf
:type 'string
:set 'recentf-menu-customization-changed)
(defcustom recentf-menu-path '("File")
- "*Path where to add the recentf menu.
+ "Path where to add the recentf menu.
If nil add it at top level (see also `easy-menu-add-item')."
:group 'recentf
:type '(choice (const :tag "Top Level" nil)
@@ -141,7 +149,7 @@ If nil add it at top level (see also `easy-menu-add-item')."
:set 'recentf-menu-customization-changed)
(defcustom recentf-menu-before "Open File..."
- "*Name of the menu before which the recentf menu will be added.
+ "Name of the menu before which the recentf menu will be added.
If nil add it at end of menu (see also `easy-menu-add-item')."
:group 'recentf
:type '(choice (string :tag "Name")
@@ -149,18 +157,18 @@ If nil add it at end of menu (see also `easy-menu-add-item')."
:set 'recentf-menu-customization-changed)
(defcustom recentf-menu-action 'find-file
- "*Function to invoke with a filename item of the recentf menu.
+ "Function to invoke with a filename item of the recentf menu.
The default is to call `find-file' to edit the selected file."
:group 'recentf
:type 'function)
(defcustom recentf-max-menu-items 10
- "*Maximum number of items in the recentf menu."
+ "Maximum number of items in the recentf menu."
:group 'recentf
:type 'integer)
(defcustom recentf-menu-filter nil
- "*Function used to filter files displayed in the recentf menu.
+ "Function used to filter files displayed in the recentf menu.
A nil value means no filter. The following functions are predefined:
- `recentf-sort-ascending'
@@ -214,13 +222,13 @@ elements (see `recentf-make-menu-element' for menu element form)."
function))
(defcustom recentf-menu-open-all-flag nil
- "*Non-nil means to show an \"All...\" item in the menu.
+ "Non-nil means to show an \"All...\" item in the menu.
This item will replace the \"More...\" item."
:group 'recentf
:type 'boolean)
(defcustom recentf-menu-append-commands-flag t
- "*Non-nil means to append command items to the menu."
+ "Non-nil means to append command items to the menu."
:group 'recentf
:type 'boolean)
@@ -229,7 +237,7 @@ This item will replace the \"More...\" item."
"22.1")
(defcustom recentf-auto-cleanup 'mode
- "*Define when to automatically cleanup the recent list.
+ "Define when to automatically cleanup the recent list.
The following values can be set:
- `mode'
@@ -262,13 +270,13 @@ cleanup the list."
(recentf-auto-cleanup))))
(defcustom recentf-initialize-file-name-history t
- "*Non-nil means to initialize `file-name-history' with the recent list.
+ "Non-nil means to initialize `file-name-history' with the recent list.
If `file-name-history' is not empty, do nothing."
:group 'recentf
:type 'boolean)
(defcustom recentf-load-hook nil
- "*Normal hook run at end of loading the `recentf' package."
+ "Normal hook run at end of loading the `recentf' package."
:group 'recentf
:type 'hook)
@@ -769,7 +777,7 @@ Filenames are relative to the `default-directory'."
("Java files (%d)" ".\\.java\\'")
("C/C++ files (%d)" "c\\(pp\\)?\\'")
)
- "*List of rules used by `recentf-arrange-by-rule' to build sub-menus.
+ "List of rules used by `recentf-arrange-by-rule' to build sub-menus.
A rule is a pair (SUB-MENU-TITLE . MATCHER). SUB-MENU-TITLE is the
displayed title of the sub-menu where a '%d' `format' pattern is
replaced by the number of items in the sub-menu. MATCHER is a regexp
@@ -785,7 +793,7 @@ may have been modified to match another rule."
(repeat regexp))))
(defcustom recentf-arrange-by-rule-others "Other files (%d)"
- "*Title of the `recentf-arrange-by-rule' sub-menu.
+ "Title of the `recentf-arrange-by-rule' sub-menu.
This is for the menu where items that don't match any
`recentf-arrange-rules' are displayed. If nil these items are
displayed in the main recent files menu. A '%d' `format' pattern in
@@ -795,7 +803,7 @@ the title is replaced by the number of items in the sub-menu."
(string :tag "Title")))
(defcustom recentf-arrange-by-rules-min-items 0
- "*Minimum number of items in a `recentf-arrange-by-rule' sub-menu.
+ "Minimum number of items in a `recentf-arrange-by-rule' sub-menu.
If the number of items in a sub-menu is less than this value the
corresponding sub-menu items are displayed in the main recent files
menu or in the `recentf-arrange-by-rule-others' sub-menu if
@@ -804,7 +812,7 @@ defined."
:type 'number)
(defcustom recentf-arrange-by-rule-subfilter nil
- "*Function called by a rule based filter to filter sub-menu elements.
+ "Function called by a rule based filter to filter sub-menu elements.
A nil value means no filter. See also `recentf-menu-filter'.
You can't use another rule based filter here."
:group 'recentf-filters
@@ -958,7 +966,7 @@ duplicates. It is used by `recentf-arrange-by-dir' as its
(recentf-arrange-by-dir . "Grouped by Directory")
(recentf-arrange-by-rule . "Grouped by Custom Rules")
)
- "*List of filters managed by `recentf-filter-changer'.
+ "List of filters managed by `recentf-filter-changer'.
Each filter is defined by a pair (FUNCTION . LABEL), where FUNCTION is
the filter function, and LABEL is the menu item displayed to select
that filter."
@@ -1272,9 +1280,9 @@ Write data into the file specified by `recentf-save-file'."
(insert (format recentf-save-file-header (current-time-string)))
(recentf-dump-variable 'recentf-list recentf-max-saved-items)
(recentf-dump-variable 'recentf-filter-changer-current)
- (insert "\n \n;;; Local Variables:\n"
- (format ";;; coding: %s\n" recentf-save-file-coding-system)
- ";;; End:\n")
+ (insert "\n \n;; Local Variables:\n"
+ (format ";; coding: %s\n" recentf-save-file-coding-system)
+ ";; End:\n")
(write-file (expand-file-name recentf-save-file))
(when recentf-save-file-modes
(set-file-modes recentf-save-file recentf-save-file-modes))
diff --git a/lisp/register.el b/lisp/register.el
index 1f0811561c2..5648ca385a8 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -287,10 +287,12 @@ With prefix arg, delete as well.
Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
START and END are buffer positions indicating what to append."
(interactive "cAppend to register: \nr\nP")
- (or (stringp (get-register register))
- (error "Register does not contain text"))
- (set-register register (concat (get-register register)
- (filter-buffer-substring start end)))
+ (let ((reg (get-register register))
+ (text (filter-buffer-substring start end)))
+ (set-register
+ register (cond ((not reg) text)
+ ((stringp reg) (concat reg text))
+ (t (error "Register does not contain text")))))
(if delete-flag (delete-region start end)))
(defun prepend-to-register (register start end &optional delete-flag)
@@ -299,10 +301,12 @@ With prefix arg, delete as well.
Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
START and END are buffer positions indicating what to prepend."
(interactive "cPrepend to register: \nr\nP")
- (or (stringp (get-register register))
- (error "Register does not contain text"))
- (set-register register (concat (filter-buffer-substring start end)
- (get-register register)))
+ (let ((reg (get-register register))
+ (text (filter-buffer-substring start end)))
+ (set-register
+ register (cond ((not reg) text)
+ ((stringp reg) (concat text reg))
+ (t (error "Register does not contain text")))))
(if delete-flag (delete-region start end)))
(defun copy-rectangle-to-register (register start end &optional delete-flag)
diff --git a/lisp/replace.el b/lisp/replace.el
index ebee65b2f40..8b2c3b92399 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -69,6 +69,12 @@ strings or patterns."
:group 'matching
:version "22.1")
+(defcustom query-replace-show-replacement t
+ "*Non-nil means to show what actual replacement text will be."
+ :type 'boolean
+ :group 'matching
+ :version "23.1")
+
(defcustom query-replace-highlight t
"*Non-nil means to highlight matches during query replacement."
:type 'boolean
@@ -525,9 +531,20 @@ which will run faster and will not set the mark or print anything."
"Read arguments for `keep-lines' and friends.
Prompt for a regexp with PROMPT.
Value is a list, (REGEXP)."
- (list (read-from-minibuffer prompt nil nil nil
- 'regexp-history nil t)
- nil nil t))
+ (let* ((default (list
+ (regexp-quote
+ (or (funcall (or find-tag-default-function
+ (get major-mode 'find-tag-default-function)
+ 'find-tag-default))
+ ""))
+ (car regexp-search-ring)
+ (regexp-quote (or (car search-ring) ""))
+ (car (symbol-value
+ query-replace-from-history-variable))))
+ (default (delete-dups (delq nil (delete "" default)))))
+ (list (read-from-minibuffer prompt nil nil nil
+ 'regexp-history default t)
+ nil nil t)))
(defun keep-lines (regexp &optional rstart rend interactive)
"Delete all lines except those containing matches for REGEXP.
@@ -930,23 +947,29 @@ which means to discard all text properties."
(nreverse result))))
(defun occur-read-primary-args ()
- (list (let* ((default (car regexp-history))
- (input
- (read-from-minibuffer
- (if default
- (format "List lines matching regexp (default %s): "
- (query-replace-descr default))
- "List lines matching regexp: ")
- nil
- nil
- nil
- 'regexp-history
- default)))
- (if (equal input "")
- default
- input))
- (when current-prefix-arg
- (prefix-numeric-value current-prefix-arg))))
+ (let* ((default
+ (list (and transient-mark-mode mark-active
+ (regexp-quote
+ (buffer-substring-no-properties
+ (region-beginning) (region-end))))
+ (regexp-quote
+ (or (funcall
+ (or find-tag-default-function
+ (get major-mode 'find-tag-default-function)
+ 'find-tag-default))
+ ""))
+ (car regexp-search-ring)
+ (regexp-quote (or (car search-ring) ""))
+ (car (symbol-value
+ query-replace-from-history-variable))))
+ (default (delete-dups (delq nil (delete "" default))))
+ (input
+ (read-from-minibuffer
+ "List lines matching regexp: "
+ nil nil nil 'regexp-history default)))
+ (list input
+ (when current-prefix-arg
+ (prefix-numeric-value current-prefix-arg)))))
(defun occur-rename-buffer (&optional unique-p interactive-p)
"Rename the current *Occur* buffer to *Occur: original-buffer-name*.
@@ -1406,38 +1429,36 @@ make, or the user didn't cancel the call."
(or map (setq map query-replace-map))
(and query-flag minibuffer-auto-raise
(raise-frame (window-frame (minibuffer-window))))
- (let ((nocasify (not (and case-fold-search case-replace
- (string-equal from-string
- (downcase from-string)))))
- (case-fold-search (and case-fold-search
- (string-equal from-string
- (downcase from-string))))
- (literal (or (not regexp-flag) (eq regexp-flag 'literal)))
- (search-function (if regexp-flag 're-search-forward 'search-forward))
- (search-string from-string)
- (real-match-data nil) ; the match data for the current match
- (next-replacement nil)
- ;; This is non-nil if we know there is nothing for the user
- ;; to edit in the replacement.
- (noedit nil)
- (keep-going t)
- (stack nil)
- (replace-count 0)
- (nonempty-match nil)
-
- ;; If non-nil, it is marker saying where in the buffer to stop.
- (limit nil)
-
- ;; Data for the next match. If a cons, it has the same format as
- ;; (match-data); otherwise it is t if a match is possible at point.
- (match-again t)
-
- (message
- (if query-flag
- (apply 'propertize
- (substitute-command-keys
- "Query replacing %s with %s: (\\<query-replace-map>\\[help] for help) ")
- minibuffer-prompt-properties))))
+ (let* ((case-fold-search
+ (and case-fold-search
+ (isearch-no-upper-case-p from-string regexp-flag)))
+ (nocasify (not (and case-replace case-fold-search)))
+ (literal (or (not regexp-flag) (eq regexp-flag 'literal)))
+ (search-function (if regexp-flag 're-search-forward 'search-forward))
+ (search-string from-string)
+ (real-match-data nil) ; The match data for the current match.
+ (next-replacement nil)
+ ;; This is non-nil if we know there is nothing for the user
+ ;; to edit in the replacement.
+ (noedit nil)
+ (keep-going t)
+ (stack nil)
+ (replace-count 0)
+ (nonempty-match nil)
+
+ ;; If non-nil, it is marker saying where in the buffer to stop.
+ (limit nil)
+
+ ;; Data for the next match. If a cons, it has the same format as
+ ;; (match-data); otherwise it is t if a match is possible at point.
+ (match-again t)
+
+ (message
+ (if query-flag
+ (apply 'propertize
+ (substitute-command-keys
+ "Query replacing %s with %s: (\\<query-replace-map>\\[help] for help) ")
+ minibuffer-prompt-properties))))
;; If region is active, in Transient Mark mode, operate on region.
(when start
@@ -1570,10 +1591,17 @@ make, or the user didn't cancel the call."
(or delimited-flag regexp-flag) case-fold-search)
;; Bind message-log-max so we don't fill up the message log
;; with a bunch of identical messages.
- (let ((message-log-max nil))
+ (let ((message-log-max nil)
+ (replacement-presentation
+ (if query-replace-show-replacement
+ (save-match-data
+ (set-match-data real-match-data)
+ (match-substitute-replacement next-replacement
+ nocasify literal))
+ next-replacement)))
(message message
(query-replace-descr from-string)
- (query-replace-descr next-replacement)))
+ (query-replace-descr replacement-presentation)))
(setq key (read-event))
;; Necessary in case something happens during read-event
;; that clobbers the match data.
diff --git a/lisp/rfn-eshadow.el b/lisp/rfn-eshadow.el
index daa66118b38..ced5ed3f368 100644
--- a/lisp/rfn-eshadow.el
+++ b/lisp/rfn-eshadow.el
@@ -119,6 +119,12 @@ system, `file-name-shadow-properties' is used instead."
:group 'minibuffer
:version "22.1")
+(defvar rfn-eshadow-setup-minibuffer-hook nil
+ "Minibuffer setup functions from other packages.")
+
+(defvar rfn-eshadow-update-overlay-hook nil
+ "Customer overlay functions from other packages")
+
;;; Internal variables
@@ -153,7 +159,9 @@ The prompt and initial input should already have been inserted."
(overlay-put rfn-eshadow-overlay 'evaporate t)
;; Add our post-command hook, and make sure can remove it later.
(add-to-list 'rfn-eshadow-frobbed-minibufs (current-buffer))
- (add-hook 'post-command-hook #'rfn-eshadow-update-overlay nil t)))
+ (add-hook 'post-command-hook #'rfn-eshadow-update-overlay nil t)
+ ;; Run custom hook
+ (run-hooks 'rfn-eshadow-setup-minibuffer-hook)))
(defsubst rfn-eshadow-sifn-equal (goal pos)
(equal goal (condition-case nil
@@ -193,7 +201,9 @@ been set up by `rfn-eshadow-setup-minibuffer'."
(if (rfn-eshadow-sifn-equal goal mid)
(setq start mid)
(setq end mid)))
- (move-overlay rfn-eshadow-overlay (minibuffer-prompt-end) start)))
+ (move-overlay rfn-eshadow-overlay (minibuffer-prompt-end) start))
+ ;; Run custom hook
+ (run-hooks 'rfn-eshadow-update-overlay-hook))
;; `substitute-in-file-name' can fail on partial input.
(error nil)))
diff --git a/lisp/savehist.el b/lisp/savehist.el
index 355762d9f3e..705be69088d 100644
--- a/lisp/savehist.el
+++ b/lisp/savehist.el
@@ -101,8 +101,8 @@ minibuffer histories, such as `compile-command' or `kill-ring'."
(cond
;; Backward compatibility with previous versions of savehist.
((file-exists-p "~/.emacs-history") "~/.emacs-history")
- ((and (not (featurep 'xemacs)) (file-directory-p "~/.emacs.d/"))
- "~/.emacs.d/history")
+ ((and (not (featurep 'xemacs)) (file-directory-p user-emacs-directory))
+ (concat user-emacs-directory "history"))
((and (featurep 'xemacs) (file-directory-p "~/.xemacs/"))
"~/.xemacs/history")
;; For users without `~/.emacs.d/' or `~/.xemacs/'.
diff --git a/lisp/scroll-bar.el b/lisp/scroll-bar.el
index 770e01ccbca..0a373058f66 100644
--- a/lisp/scroll-bar.el
+++ b/lisp/scroll-bar.el
@@ -92,21 +92,8 @@ This is nil while loading `scroll-bar.el', and t afterward.")
(setq scroll-bar-mode value)
(when scroll-bar-mode-explicit
- ;; Apply it to default-frame-alist.
- (let ((parameter (assq 'vertical-scroll-bars default-frame-alist)))
- (if (consp parameter)
- (setcdr parameter scroll-bar-mode)
- (setq default-frame-alist
- (cons (cons 'vertical-scroll-bars scroll-bar-mode)
- default-frame-alist))))
-
- ;; Apply it to existing frames.
- (let ((frames (frame-list)))
- (while frames
- (modify-frame-parameters
- (car frames)
- (list (cons 'vertical-scroll-bars scroll-bar-mode)))
- (setq frames (cdr frames))))))
+ (modify-all-frames-parameters (list (cons 'vertical-scroll-bars
+ scroll-bar-mode)))))
(defcustom scroll-bar-mode default-frame-scroll-bars
"*Specify whether to have vertical scroll bars, and on which side.
diff --git a/lisp/scroll-lock.el b/lisp/scroll-lock.el
index e5d6fcad868..6bb32c17b5d 100644
--- a/lisp/scroll-lock.el
+++ b/lisp/scroll-lock.el
@@ -88,7 +88,7 @@ during scrolling."
(or arg (setq arg 1))
(scroll-lock-update-goal-column)
(if (pos-visible-in-window-p (point-max))
- (next-line arg)
+ (forward-line arg)
(scroll-up arg))
(scroll-lock-move-to-column scroll-lock-temporary-goal-column))
@@ -99,7 +99,7 @@ during scrolling."
(scroll-lock-update-goal-column)
(condition-case nil
(scroll-down arg)
- (beginning-of-buffer (previous-line arg)))
+ (beginning-of-buffer (forward-line (- arg))))
(scroll-lock-move-to-column scroll-lock-temporary-goal-column))
(defun scroll-lock-forward-paragraph (&optional arg)
diff --git a/lisp/server.el b/lisp/server.el
index 9eef2906f7d..329010cc950 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -8,6 +8,7 @@
;; Keywords: processes
;; Changes by peck@sun.com and by rms.
+;; Overhaul by Karoly Lorentey <lorentey@elte.hu> for multi-tty support.
;; This file is part of GNU Emacs.
@@ -41,7 +42,7 @@
;; This program transmits the file names to Emacs through
;; the server subprocess, and Emacs visits them and lets you edit them.
-;; Note that any number of clients may dispatch files to emacs to be edited.
+;; Note that any number of clients may dispatch files to Emacs to be edited.
;; When you finish editing a Server buffer, again call server-edit
;; to mark that buffer as done for the client and switch to the next
@@ -74,6 +75,13 @@
;; The global variable "server-clients" lists all the waiting clients,
;; and which files are yet to be edited for each.
+;; Todo:
+
+;; - handle command-line-args-left.
+;; - move most of the args processing and decision making from emacsclient.c
+;; to here.
+;; - fix up handling of the client's environment (place it in the terminal?).
+
;;; Code:
(eval-when-compile (require 'cl))
@@ -105,7 +113,7 @@ If set, the server accepts remote connections; otherwise it is local."
:version "22.1")
(put 'server-host 'risky-local-variable t)
-(defcustom server-auth-dir "~/.emacs.d/server/"
+(defcustom server-auth-dir (concat user-emacs-directory "server/")
"Directory for server authentication files."
:group 'server
:type 'directory
@@ -138,12 +146,10 @@ If set, the server accepts remote connections; otherwise it is local."
(defvar server-clients nil
"List of current server clients.
-Each element is (CLIENTID BUFFERS...) where CLIENTID is a string
-that can be given to the server process to identify a client.
-When a buffer is marked as \"done\", it is removed from this list.")
+Each element is a process.")
(defvar server-buffer-clients nil
- "List of client ids for clients requesting editing of current buffer.")
+ "List of client processes requesting editing of current buffer.")
(make-variable-buffer-local 'server-buffer-clients)
;; Changing major modes should not erase this local.
(put 'server-buffer-clients 'permanent-local t)
@@ -198,34 +204,110 @@ are done with it in the server.")
(defvar server-name "server")
-(defvar server-socket-dir
- (format "/tmp/emacs%d" (user-uid)))
+(defvar server-socket-dir nil
+ "The directory in which to place the server socket.
+Initialized by `server-start'.")
+
+(defun server-clients-with (property value)
+ "Return a list of clients with PROPERTY set to VALUE."
+ (let (result)
+ (dolist (proc server-clients result)
+ (when (equal value (process-get proc property))
+ (push proc result)))))
+
+(defun server-add-client (proc)
+ "Create a client for process PROC, if it doesn't already have one.
+New clients have no properties."
+ (add-to-list 'server-clients proc))
+
+(defmacro server-with-environment (env vars &rest body)
+ "Evaluate BODY with environment variables VARS set to those in ENV.
+The environment variables are then restored to their previous values.
+
+VARS should be a list of strings.
+ENV should be in the same format as `process-environment'."
+ (declare (indent 2))
+ (let ((var (make-symbol "var"))
+ (value (make-symbol "value")))
+ `(let ((process-environment process-environment))
+ (dolist (,var ,vars)
+ (let ((,value (getenv-internal ,var ,env)))
+ (push (if (null ,value)
+ ,var
+ (concat ,var "=" ,value))
+ process-environment)))
+ (progn ,@body))))
+
+(defun server-delete-client (proc &optional noframe)
+ "Delete PROC, including its buffers, terminals and frames.
+If NOFRAME is non-nil, let the frames live. (To be used from
+`delete-frame-functions'.)"
+ (server-log (concat "server-delete-client" (if noframe " noframe"))
+ proc)
+ ;; Force a new lookup of client (prevents infinite recursion).
+ (when (memq proc server-clients)
+ (let ((buffers (process-get proc 'buffers)))
+
+ ;; Kill the client's buffers.
+ (dolist (buf buffers)
+ (when (buffer-live-p buf)
+ (with-current-buffer buf
+ ;; Kill the buffer if necessary.
+ (when (and (equal server-buffer-clients
+ (list proc))
+ (or (and server-kill-new-buffers
+ (not server-existing-buffer))
+ (server-temp-file-p))
+ (not (buffer-modified-p)))
+ (let (flag)
+ (unwind-protect
+ (progn (setq server-buffer-clients nil)
+ (kill-buffer (current-buffer))
+ (setq flag t))
+ (unless flag
+ ;; Restore clients if user pressed C-g in `kill-buffer'.
+ (setq server-buffer-clients (list proc)))))))))
+
+ ;; Delete the client's frames.
+ (unless noframe
+ (dolist (frame (frame-list))
+ (when (and (frame-live-p frame)
+ (equal proc (frame-parameter frame 'client)))
+ ;; Prevent `server-handle-delete-frame' from calling us
+ ;; recursively.
+ (set-frame-parameter frame 'client nil)
+ (delete-frame frame))))
+
+ (setq server-clients (delq proc server-clients))
+
+ ;; Delete the client's tty.
+ (let ((terminal (process-get proc 'terminal)))
+ ;; Only delete the terminal if it is non-nil.
+ (when (and terminal (eq (terminal-live-p terminal) t))
+ (delete-terminal terminal)))
+
+ ;; Delete the client's process.
+ (if (eq (process-status proc) 'open)
+ (delete-process proc))
+
+ (server-log "Deleted" proc))))
(defun server-log (string &optional client)
- "If a *server* buffer exists, write STRING to it for logging purposes."
+ "If a *server* buffer exists, write STRING to it for logging purposes.
+If CLIENT is non-nil, add a description of it to the logged message."
(when (get-buffer "*server*")
(with-current-buffer "*server*"
(goto-char (point-max))
(insert (current-time-string)
- (if client (format " %s:" client) " ")
+ (cond
+ ((null client) " ")
+ ((listp client) (format " %s: " (car client)))
+ (t (format " %s: " client)))
string)
(or (bolp) (newline)))))
(defun server-sentinel (proc msg)
- (let ((client (assq proc server-clients)))
- ;; Remove PROC from the list of clients.
- (when client
- (setq server-clients (delq client server-clients))
- (dolist (buf (cdr client))
- (with-current-buffer buf
- ;; Remove PROC from the clients of each buffer.
- (setq server-buffer-clients (delq proc server-buffer-clients))
- ;; Kill the buffer if necessary.
- (when (and (null server-buffer-clients)
- (or (and server-kill-new-buffers
- (not server-existing-buffer))
- (server-temp-file-p)))
- (kill-buffer (current-buffer)))))))
+ "The process sentinel for Emacs server connections."
;; If this is a new client process, set the query-on-exit flag to nil
;; for this process (it isn't inherited from the server process).
(when (and (eq (process-status proc) 'open)
@@ -237,11 +319,15 @@ are done with it in the server.")
;; (and (process-contact proc :server)
;; (eq (process-status proc) 'closed)
;; (ignore-errors (delete-file (process-get proc :server-file))))
- (server-log (format "Status changed to %s" (process-status proc)) proc))
+ (server-log (format "Status changed to %s: %s" (process-status proc) msg) proc)
+ (server-delete-client proc))
(defun server-select-display (display)
;; If the current frame is on `display' we're all set.
- (unless (equal (frame-parameter (selected-frame) 'display) display)
+ ;; Similarly if we are unable to open a frames on other displays, there's
+ ;; nothing more we can do.
+ (unless (or (not (fboundp 'make-frame-on-display))
+ (equal (frame-parameter (selected-frame) 'display) display))
;; Otherwise, look for an existing frame there and select it.
(dolist (frame (frame-list))
(when (equal (frame-parameter frame 'display) display)
@@ -259,25 +345,52 @@ are done with it in the server.")
;; unobtrusive as possible.
(visibility . nil)))))
(select-frame frame)
- (set-window-buffer (selected-window) buffer)))))
+ (set-window-buffer (selected-window) buffer)
+ frame))))
(defun server-unselect-display (frame)
- ;; If the temporary frame is in use (displays something real), make it
- ;; visible. If not (which can happen if the user's customizations call
- ;; pop-to-buffer etc.), delete it to avoid preserving the connection after
- ;; the last real frame is deleted.
- (if (and (eq (frame-first-window frame)
- (next-window (frame-first-window frame) 'nomini))
- (eq (window-buffer (frame-first-window frame))
- (frame-parameter frame 'server-dummy-buffer)))
- ;; The temp frame still only shows one buffer, and that is the
- ;; internal temp buffer.
- (delete-frame frame)
- (set-frame-parameter frame 'visibility t))
- (kill-buffer (frame-parameter frame 'server-dummy-buffer))
- (set-frame-parameter frame 'server-dummy-buffer nil))
+ (when (frame-live-p frame)
+ ;; If the temporary frame is in use (displays something real), make it
+ ;; visible. If not (which can happen if the user's customizations call
+ ;; pop-to-buffer etc.), delete it to avoid preserving the connection after
+ ;; the last real frame is deleted.
+ (if (and (eq (frame-first-window frame)
+ (next-window (frame-first-window frame) 'nomini))
+ (eq (window-buffer (frame-first-window frame))
+ (frame-parameter frame 'server-dummy-buffer)))
+ ;; The temp frame still only shows one buffer, and that is the
+ ;; internal temp buffer.
+ (delete-frame frame)
+ (set-frame-parameter frame 'visibility t))
+ (kill-buffer (frame-parameter frame 'server-dummy-buffer))
+ (set-frame-parameter frame 'server-dummy-buffer nil)))
+
+(defun server-handle-delete-frame (frame)
+ "Delete the client connection when the emacsclient frame is deleted."
+ (let ((proc (frame-parameter frame 'client)))
+ (when (and (frame-live-p frame)
+ proc
+ ;; See if this is the last frame for this client.
+ (>= 1 (let ((frame-num 0))
+ (dolist (f (frame-list))
+ (when (eq proc (frame-parameter f 'client))
+ (setq frame-num (1+ frame-num))))
+ frame-num)))
+ (server-log (format "server-handle-delete-frame, frame %s" frame) proc)
+ (server-delete-client proc 'noframe)))) ; Let delete-frame delete the frame later.
+
+(defun server-handle-suspend-tty (terminal)
+ "Notify the emacsclient process to suspend itself when its tty device is suspended."
+ (dolist (proc (server-clients-with 'terminal terminal))
+ (server-log (format "server-handle-suspend-tty, terminal %s" terminal) proc)
+ (condition-case err
+ (server-send-string proc "-suspend \n")
+ (file-error ;The pipe/socket was closed.
+ (ignore-errors (server-delete-client proc))))))
(defun server-unquote-arg (arg)
+ "Remove &-quotation from ARG.
+See `server-quote-arg' and `server-process-filter'."
(replace-regexp-in-string
"&." (lambda (s)
(case (aref s 1)
@@ -287,6 +400,26 @@ are done with it in the server.")
(t " ")))
arg t t))
+(defun server-quote-arg (arg)
+ "In ARG, insert a & before each &, each space, each newline, and -.
+Change spaces to underscores, too, so that the return value never
+contains a space.
+
+See `server-unquote-arg' and `server-process-filter'."
+ (replace-regexp-in-string
+ "[-&\n ]" (lambda (s)
+ (case (aref s 0)
+ (?& "&&")
+ (?- "&-")
+ (?\n "&n")
+ (?\s "&_")))
+ arg t t))
+
+(defun server-send-string (proc string)
+ "A wrapper around `proc-send-string' for logging."
+ (server-log (concat "Sent " string) proc)
+ (process-send-string proc string))
+
(defun server-ensure-safe-dir (dir)
"Make sure DIR is a directory with no race-condition issues.
Creates the directory if necessary and makes sure:
@@ -308,68 +441,101 @@ Creates the directory if necessary and makes sure:
(defun server-start (&optional leave-dead)
"Allow this Emacs process to be a server for client processes.
This starts a server communications subprocess through which
-client \"editors\" can send your editing commands to this Emacs job.
-To use the server, set up the program `emacsclient' in the
+client \"editors\" can send your editing commands to this Emacs
+job. To use the server, set up the program `emacsclient' in the
Emacs distribution as your standard \"editor\".
Optional argument LEAVE-DEAD (interactively, a prefix arg) means just
kill any existing server communications subprocess."
(interactive "P")
- (when server-process
- ;; kill it dead!
- (ignore-errors (delete-process server-process)))
- ;; If this Emacs already had a server, clear out associated status.
- (while server-clients
- (let ((buffer (nth 1 (car server-clients))))
- (server-buffer-done buffer)))
- ;; Now any previous server is properly stopped.
- (unless leave-dead
- (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir))
- (server-file (expand-file-name server-name server-dir)))
- ;; Make sure there is a safe directory in which to place the socket.
- (server-ensure-safe-dir server-dir)
- ;; Remove any leftover socket or authentication file.
- (ignore-errors (delete-file server-file))
- (when server-process
- (server-log (message "Restarting server")))
- (letf (((default-file-modes) ?\700))
- (setq server-process
- (apply #'make-network-process
- :name server-name
- :server t
- :noquery t
- :sentinel 'server-sentinel
- :filter 'server-process-filter
- ;; We must receive file names without being decoded.
- ;; Those are decoded by server-process-filter according
- ;; to file-name-coding-system.
- :coding 'raw-text
- ;; The rest of the args depends on the kind of socket used.
- (if server-use-tcp
- (list :family nil
- :service t
- :host (or server-host 'local)
- :plist '(:authenticated nil))
- (list :family 'local
- :service server-file
- :plist '(:authenticated t)))))
- (unless server-process (error "Could not start server process"))
- (when server-use-tcp
- (let ((auth-key
- (loop
- ;; The auth key is a 64-byte string of random chars in the
- ;; range `!'..`~'.
- for i below 64
- collect (+ 33 (random 94)) into auth
- finally return (concat auth))))
- (process-put server-process :auth-key auth-key)
- (with-temp-file server-file
- (set-buffer-multibyte nil)
- (setq buffer-file-coding-system 'no-conversion)
- (insert (format-network-address
- (process-contact server-process :local))
- " " (int-to-string (emacs-pid))
- "\n" auth-key))))))))
+ (when (or
+ (not server-clients)
+ (yes-or-no-p
+ "The current server still has clients; delete them? "))
+ ;; It is safe to get the user id now.
+ (setq server-socket-dir (or server-socket-dir
+ (format "/tmp/emacs%d" (user-uid))))
+ (when server-process
+ ;; kill it dead!
+ (ignore-errors (delete-process server-process)))
+ ;; Delete the socket files made by previous server invocations.
+ (condition-case ()
+ (delete-file (expand-file-name server-name server-socket-dir))
+ (error nil))
+ ;; If this Emacs already had a server, clear out associated status.
+ (while server-clients
+ (server-delete-client (car server-clients)))
+ ;; Now any previous server is properly stopped.
+ (if leave-dead
+ (progn
+ (server-log (message "Server stopped"))
+ (setq server-process nil))
+ (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir))
+ (server-file (expand-file-name server-name server-dir)))
+ ;; Make sure there is a safe directory in which to place the socket.
+ (server-ensure-safe-dir server-dir)
+ ;; Remove any leftover socket or authentication file.
+ (ignore-errors (delete-file server-file))
+ (when server-process
+ (server-log (message "Restarting server")))
+ (letf (((default-file-modes) ?\700))
+ (add-hook 'suspend-tty-functions 'server-handle-suspend-tty)
+ (add-hook 'delete-frame-functions 'server-handle-delete-frame)
+ (add-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
+ (add-hook 'kill-emacs-query-functions 'server-kill-emacs-query-function)
+ (add-hook 'kill-emacs-hook (lambda () (server-mode -1))) ;Cleanup upon exit.
+ (setq server-process
+ (apply #'make-network-process
+ :name server-name
+ :server t
+ :noquery t
+ :sentinel 'server-sentinel
+ :filter 'server-process-filter
+ ;; We must receive file names without being decoded.
+ ;; Those are decoded by server-process-filter according
+ ;; to file-name-coding-system.
+ :coding 'raw-text
+ ;; The rest of the args depends on the kind of socket used.
+ (if server-use-tcp
+ (list :family nil
+ :service t
+ :host (or server-host 'local)
+ :plist '(:authenticated nil))
+ (list :family 'local
+ :service server-file
+ :plist '(:authenticated t)))))
+ (unless server-process (error "Could not start server process"))
+ (when server-use-tcp
+ (let ((auth-key
+ (loop
+ ;; The auth key is a 64-byte string of random chars in the
+ ;; range `!'..`~'.
+ for i below 64
+ collect (+ 33 (random 94)) into auth
+ finally return (concat auth))))
+ (process-put server-process :auth-key auth-key)
+ (with-temp-file server-file
+ (set-buffer-multibyte nil)
+ (setq buffer-file-coding-system 'no-conversion)
+ (insert (format-network-address
+ (process-contact server-process :local))
+ " " (int-to-string (emacs-pid))
+ "\n" auth-key)))))))))
+
+(defun server-running-p (&optional name)
+ "Test whether server NAME is running."
+ (interactive
+ (list (if current-prefix-arg
+ (read-string "Server name: " nil nil server-name))))
+ (unless name (setq name server-name))
+ (condition-case nil
+ (progn
+ (delete-process
+ (make-network-process
+ :name "server-client-test" :family 'local :server nil :noquery t
+ :service (expand-file-name name server-socket-dir)))
+ t)
+ (file-error nil)))
;;;###autoload
(define-minor-mode server-mode
@@ -384,143 +550,470 @@ Server mode runs a process that accepts commands from the
;; nothing if there is one (for multiple Emacs sessions)?
(server-start (not server-mode)))
+(defun server-eval-and-print (expr proc)
+ "Eval EXPR and send the result back to client PROC."
+ (let ((v (eval (car (read-from-string expr)))))
+ (when (and v proc)
+ (with-temp-buffer
+ (let ((standard-output (current-buffer)))
+ (pp v)
+ (let ((text (buffer-substring-no-properties
+ (point-min) (point-max))))
+ (server-send-string
+ proc (format "-print %s\n"
+ (server-quote-arg text)))))))))
+
+(defun server-create-tty-frame (tty type proc)
+ (add-to-list 'frame-inherited-parameters 'client)
+ (let ((frame
+ (server-with-environment (process-get proc 'env)
+ '("LANG" "LC_CTYPE" "LC_ALL"
+ ;; For tgetent(3); list according to ncurses(3).
+ "BAUDRATE" "COLUMNS" "ESCDELAY" "HOME" "LINES"
+ "NCURSES_ASSUMED_COLORS" "NCURSES_NO_PADDING"
+ "NCURSES_NO_SETBUF" "TERM" "TERMCAP" "TERMINFO"
+ "TERMINFO_DIRS" "TERMPATH"
+ ;; rxvt wants these
+ "COLORFGBG" "COLORTERM")
+ (make-frame-on-tty tty type
+ ;; Ignore nowait here; we always need to
+ ;; clean up opened ttys when the client dies.
+ `((client . ,proc)
+ ;; This is a leftover from an earlier
+ ;; attempt at making it possible for process
+ ;; run in the server process to use the
+ ;; environment of the client process.
+ ;; It has no effect now and to make it work
+ ;; we'd need to decide how to make
+ ;; process-environment interact with client
+ ;; envvars, and then to change the
+ ;; C functions `child_setup' and
+ ;; `getenv_internal' accordingly.
+ (environment . ,(process-get proc 'env)))))))
+
+ ;; ttys don't use the `display' parameter, but callproc.c does to set
+ ;; the DISPLAY environment on subprocesses.
+ (set-frame-parameter frame 'display
+ (getenv-internal "DISPLAY" (process-get proc 'env)))
+ (select-frame frame)
+ (process-put proc 'frame frame)
+ (process-put proc 'terminal (frame-terminal frame))
+
+ ;; Display *scratch* by default.
+ (switch-to-buffer (get-buffer-create "*scratch*") 'norecord)
+
+ ;; Reply with our pid.
+ (server-send-string proc (concat "-emacs-pid "
+ (number-to-string (emacs-pid)) "\n"))
+ frame))
+
+(defun server-create-window-system-frame (display nowait proc)
+ (add-to-list 'frame-inherited-parameters 'client)
+ (if (not (fboundp 'make-frame-on-display))
+ (progn
+ ;; This emacs does not support X.
+ (server-log "Window system unsupported" proc)
+ (server-send-string proc "-window-system-unsupported \n")
+ nil)
+ ;; Flag frame as client-created, but use a dummy client.
+ ;; This will prevent the frame from being deleted when
+ ;; emacsclient quits while also preventing
+ ;; `server-save-buffers-kill-terminal' from unexpectedly
+ ;; killing emacs on that frame.
+ (let* ((params `((client . ,(if nowait 'nowait proc))
+ ;; This is a leftover, see above.
+ (environment . ,(process-get proc 'env))))
+ (frame (make-frame-on-display
+ (or display
+ (frame-parameter nil 'display)
+ (getenv "DISPLAY")
+ (error "Please specify display"))
+ params)))
+ (server-log (format "%s created" frame) proc)
+ ;; XXX We need to ensure the parameters are really set because Emacs
+ ;; forgets unhandled initialization parameters for X frames at
+ ;; the moment.
+ (modify-frame-parameters frame params)
+ (select-frame frame)
+ (process-put proc 'frame frame)
+ (process-put proc 'terminal (frame-terminal frame))
+
+ ;; Display *scratch* by default.
+ (switch-to-buffer (get-buffer-create "*scratch*") 'norecord)
+ frame)))
+
+
+(defun server-goto-toplevel (proc)
+ (condition-case nil
+ ;; If we're running isearch, we must abort it to allow Emacs to
+ ;; display the buffer and switch to it.
+ (dolist (buffer (buffer-list))
+ (with-current-buffer buffer
+ (when (bound-and-true-p isearch-mode)
+ (isearch-cancel))))
+ ;; Signaled by isearch-cancel.
+ (quit (message nil)))
+ (when (> (recursion-depth) 0)
+ ;; We're inside a minibuffer already, so if the emacs-client is trying
+ ;; to open a frame on a new display, we might end up with an unusable
+ ;; frame because input from that display will be blocked (until exiting
+ ;; the minibuffer). Better exit this minibuffer right away.
+ ;; Similarly with recursive-edits such as the splash screen.
+ (run-with-timer 0 nil (lexical-let ((proc proc))
+ (lambda () (server-execute-continuation proc))))
+ (top-level)))
+
+;; We use various special properties on process objects:
+;; - `env' stores the info about the environment of the emacsclient process.
+;; - `continuation' is a no-arg function that we need to execute. It contains
+;; commands we wanted to execute in some earlier invocation of the process
+;; filter but that we somehow were unable to process at that time
+;; (e.g. because we first need to throw to the toplevel).
+
+(defun server-execute-continuation (proc)
+ (let ((continuation (process-get proc 'continuation)))
+ (process-put proc 'continuation nil)
+ (if continuation (ignore-errors (funcall continuation)))))
+
(defun* server-process-filter (proc string)
"Process a request from the server to edit some files.
-PROC is the server process. Format of STRING is \"PATH PATH PATH... \\n\"."
+PROC is the server process. STRING consists of a sequence of
+commands prefixed by a dash. Some commands have arguments; these
+are &-quoted and need to be decoded by `server-unquote-arg'. The
+filter parses and executes these commands.
+
+To illustrate the protocol, here is an example command that
+emacsclient sends to create a new X frame (note that the whole
+sequence is sent on a single line):
+
+ -env HOME /home/lorentey
+ -env DISPLAY :0.0
+ ... lots of other -env commands
+ -display :0.0
+ -window-system
+
+The following commands are accepted by the server:
+
+`-auth AUTH-STRING'
+ Authenticate the client using the secret authentication string
+ AUTH-STRING.
+
+`-env NAME=VALUE'
+ An environment variable on the client side.
+
+`-dir DIRNAME'
+ The current working directory of the client process.
+
+`-current-frame'
+ Forbid the creation of new frames.
+
+`-nowait'
+ Request that the next frame created should not be
+ associated with this client.
+
+`-display DISPLAY'
+ Set the display name to open X frames on.
+
+`-position LINE[:COLUMN]'
+ Go to the given line and column number
+ in the next file opened.
+
+`-file FILENAME'
+ Load the given file in the current frame.
+
+`-eval EXPR'
+ Evaluate EXPR as a Lisp expression and return the
+ result in -print commands.
+
+`-window-system'
+ Open a new X frame.
+
+`-tty DEVICENAME TYPE'
+ Open a new tty frame at the client.
+
+`-suspend'
+ Suspend this tty frame. The client sends this string in
+ response to SIGTSTP and SIGTTOU. The server must cease all I/O
+ on this tty until it gets a -resume command.
+
+`-resume'
+ Resume this tty frame. The client sends this string when it
+ gets the SIGCONT signal and it is the foreground process on its
+ controlling tty.
+
+`-ignore COMMENT'
+ Do nothing, but put the comment in the server
+ log. Useful for debugging.
+
+
+The following commands are accepted by the client:
+
+`-emacs-pid PID'
+ Describes the process id of the Emacs process;
+ used to forward window change signals to it.
+
+`-window-system-unsupported'
+ Signals that the server does not support creating X frames;
+ the client must try again with a tty frame.
+
+`-print STRING'
+ Print STRING on stdout. Used to send values
+ returned by -eval.
+
+`-error DESCRIPTION'
+ Signal an error (but continue processing).
+
+`-suspend'
+ Suspend this terminal, i.e., stop the client process.
+ Sent when the user presses C-z."
+ (server-log (concat "Received " string) proc)
;; First things first: let's check the authentication
(unless (process-get proc :authenticated)
(if (and (string-match "-auth \\(.*?\\)\n" string)
- (equal (match-string 1 string) (process-get proc :auth-key)))
- (progn
- (setq string (substring string (match-end 0)))
- (process-put proc :authenticated t)
- (server-log "Authentication successful" proc))
+ (equal (match-string 1 string) (process-get proc :auth-key)))
+ (progn
+ (setq string (substring string (match-end 0)))
+ (process-put proc :authenticated t)
+ (server-log "Authentication successful" proc))
(server-log "Authentication failed" proc)
- (process-send-string proc "Authentication failed")
+ (server-send-string
+ proc (concat "-error " (server-quote-arg "Authentication failed")))
(delete-process proc)
;; We return immediately
(return-from server-process-filter)))
- (server-log string proc)
- (let ((prev (process-get proc :previous-string)))
+ (let ((prev (process-get proc 'previous-string)))
(when prev
(setq string (concat prev string))
- (process-put proc :previous-string nil)))
- (when (> (recursion-depth) 0)
- ;; We're inside a minibuffer already, so if the emacs-client is trying
- ;; to open a frame on a new display, we might end up with an unusable
- ;; frame because input from that display will be blocked (until exiting
- ;; the minibuffer). Better exit this minibuffer right away.
- ;; Similarly with recursive-edits such as the splash screen.
- (process-put proc :previous-string string)
- (run-with-timer 0 nil (lexical-let ((proc proc))
- (lambda () (server-process-filter proc ""))))
- (top-level))
- (condition-case nil
- ;; If we're running isearch, we must abort it to allow Emacs to
- ;; display the buffer and switch to it.
- (mapc #'(lambda (buffer)
- (with-current-buffer buffer
- (when (bound-and-true-p isearch-mode)
- (isearch-cancel))))
- (buffer-list))
- ;; Signaled by isearch-cancel
- (quit (message nil)))
- ;; If the input is multiple lines,
- ;; process each line individually.
- (while (string-match "\n" string)
- (let ((request (substring string 0 (match-beginning 0)))
- (coding-system (and default-enable-multibyte-characters
- (or file-name-coding-system
- default-file-name-coding-system)))
- client nowait eval
- (files nil)
- (lineno 1)
- (tmp-frame nil) ;; Sometimes used to embody the selected display.
- (columnno 0))
- ;; Remove this line from STRING.
- (setq string (substring string (match-end 0)))
- (setq client (cons proc nil))
- (while (string-match "[^ ]* " request)
- (let ((arg (substring request (match-beginning 0) (1- (match-end 0)))))
- (setq request (substring request (match-end 0)))
- (cond
- ((equal "-nowait" arg) (setq nowait t))
- ((equal "-eval" arg) (setq eval t))
- ((and (equal "-display" arg) (string-match "\\([^ ]*\\) " request))
- (let ((display (server-unquote-arg (match-string 1 request))))
- (setq request (substring request (match-end 0)))
- (condition-case err
- (setq tmp-frame (server-select-display display))
- (error (process-send-string proc (nth 1 err))
- (setq request "")))))
- ;; ARG is a line number option.
- ((string-match "\\`\\+[0-9]+\\'" arg)
- (setq lineno (string-to-number (substring arg 1))))
- ;; ARG is line number:column option.
- ((string-match "\\`+\\([0-9]+\\):\\([0-9]+\\)\\'" arg)
- (setq lineno (string-to-number (match-string 1 arg))
- columnno (string-to-number (match-string 2 arg))))
- (t
- ;; Undo the quoting that emacsclient does
- ;; for certain special characters.
- (setq arg (server-unquote-arg arg))
- ;; Now decode the file name if necessary.
- (when coding-system
- (setq arg (decode-coding-string arg coding-system)))
- (if eval
- (let* (errorp
- (v (condition-case errobj
- (eval (car (read-from-string arg)))
- (error (setq errorp t) errobj))))
- (when v
- (with-temp-buffer
- (let ((standard-output (current-buffer)))
- (when errorp (princ "error: "))
- (pp v)
- (ignore-errors
- (process-send-region proc (point-min) (point-max)))
- ))))
- ;; ARG is a file name.
- ;; Collapse multiple slashes to single slashes.
- (setq arg (command-line-normalize-file-name arg))
- (push (list arg lineno columnno) files))
- (setq lineno 1)
- (setq columnno 0)))))
- (when files
- (run-hooks 'pre-command-hook)
- (server-visit-files files client nowait)
- (run-hooks 'post-command-hook))
- ;; CLIENT is now a list (CLIENTNUM BUFFERS...)
- (if (null (cdr client))
- ;; This client is empty; get rid of it immediately.
- (progn
- (delete-process proc)
- (server-log "Close empty client" proc))
- ;; We visited some buffer for this client.
- (or nowait (push client server-clients))
- (unless (or isearch-mode (minibufferp))
- (server-switch-buffer (nth 1 client))
- (run-hooks 'server-switch-hook)
- (unless nowait
- (message "%s" (substitute-command-keys
+ (process-put proc 'previous-string nil)))
+ (condition-case err
+ (progn
+ (server-add-client proc)
+ (if (not (string-match "\n" string))
+ ;; Save for later any partial line that remains.
+ (when (> (length string) 0)
+ (process-put proc 'previous-string string))
+
+ ;; In earlier versions of server.el (where we used an `emacsserver'
+ ;; process), there could be multiple lines. Nowadays this is not
+ ;; supported any more.
+ (assert (eq (match-end 0) (length string)))
+ (let ((request (substring string 0 (match-beginning 0)))
+ (coding-system (and default-enable-multibyte-characters
+ (or file-name-coding-system
+ default-file-name-coding-system)))
+ nowait ; t if emacsclient does not want to wait for us.
+ frame ; The frame that was opened for the client (if any).
+ display ; Open the frame on this display.
+ dontkill ; t if the client should not be killed.
+ (commands ())
+ dir
+ (tty-name nil) ;nil, `window-system', or the tty name.
+ tty-type ;string.
+ (files nil)
+ (lineno 1)
+ (columnno 0))
+ ;; Remove this line from STRING.
+ (setq string (substring string (match-end 0)))
+ (while (string-match " *[^ ]* " request)
+ (let ((arg (substring request (match-beginning 0)
+ (1- (match-end 0)))))
+ (setq request (substring request (match-end 0)))
+ (cond
+ ;; -version CLIENT-VERSION: obsolete at birth.
+ ((and (equal "-version" arg) (string-match "[^ ]+ " request))
+ (setq request (substring request (match-end 0))))
+
+ ;; -nowait: Emacsclient won't wait for a result.
+ ((equal "-nowait" arg) (setq nowait t))
+
+ ;; -current-frame: Don't create frames.
+ ((equal "-current-frame" arg) (setq tty-name nil))
+
+ ;; -display DISPLAY:
+ ;; Open X frames on the given display instead of the default.
+ ((and (equal "-display" arg)
+ (string-match "\\([^ ]*\\) " request))
+ (setq display (match-string 1 request))
+ (setq request (substring request (match-end 0))))
+
+ ;; -window-system: Open a new X frame.
+ ((equal "-window-system" arg)
+ (setq dontkill t)
+ (setq tty-name 'window-system))
+
+ ;; -resume: Resume a suspended tty frame.
+ ((equal "-resume" arg)
+ (lexical-let ((terminal (process-get proc 'terminal)))
+ (setq dontkill t)
+ (push (lambda ()
+ (when (eq (terminal-live-p terminal) t)
+ (resume-tty terminal)))
+ commands)))
+
+ ;; -suspend: Suspend the client's frame. (In case we
+ ;; get out of sync, and a C-z sends a SIGTSTP to
+ ;; emacsclient.)
+ ((equal "-suspend" arg)
+ (lexical-let ((terminal (process-get proc 'terminal)))
+ (setq dontkill t)
+ (push (lambda ()
+ (when (eq (terminal-live-p terminal) t)
+ (suspend-tty terminal)))
+ commands)))
+
+ ;; -ignore COMMENT: Noop; useful for debugging emacsclient.
+ ;; (The given comment appears in the server log.)
+ ((and (equal "-ignore" arg) (string-match "[^ ]* " request))
+ (setq dontkill t
+ request (substring request (match-end 0))))
+
+ ;; -tty DEVICE-NAME TYPE: Open a new tty frame at the client.
+ ((and (equal "-tty" arg)
+ (string-match "\\([^ ]*\\) \\([^ ]*\\) " request))
+ (setq tty-name (match-string 1 request))
+ (setq tty-type (match-string 2 request))
+ (setq dontkill t)
+ (setq request (substring request (match-end 0))))
+
+ ;; -position LINE[:COLUMN]: Set point to the given
+ ;; position in the next file.
+ ((and (equal "-position" arg)
+ (string-match "\\+\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)? "
+ request))
+ (setq lineno (string-to-number (match-string 1 request))
+ columnno (if (null (match-end 2)) 0
+ (string-to-number (match-string 2 request)))
+ request (substring request (match-end 0))))
+
+ ;; -file FILENAME: Load the given file.
+ ((and (equal "-file" arg)
+ (string-match "\\([^ ]+\\) " request))
+ (let ((file (server-unquote-arg (match-string 1 request))))
+ (setq request (substring request (match-end 0)))
+ (if coding-system
+ (setq file (decode-coding-string file coding-system)))
+ (setq file (command-line-normalize-file-name file))
+ (push (list file lineno columnno) files)
+ (server-log (format "New file: %s (%d:%d)"
+ file lineno columnno) proc))
+ (setq lineno 1
+ columnno 0))
+
+ ;; -eval EXPR: Evaluate a Lisp expression.
+ ((and (equal "-eval" arg)
+ (string-match "\\([^ ]+\\) " request))
+ (lexical-let ((expr (server-unquote-arg
+ (match-string 1 request))))
+ (setq request (substring request (match-end 0)))
+ (if coding-system
+ (setq expr (decode-coding-string expr coding-system)))
+ (push (lambda () (server-eval-and-print expr proc))
+ commands)
+ (setq lineno 1
+ columnno 0)))
+
+ ;; -env NAME=VALUE: An environment variable.
+ ((and (equal "-env" arg) (string-match "\\([^ ]+\\) " request))
+ (let ((var (server-unquote-arg (match-string 1 request))))
+ ;; XXX Variables should be encoded as in getenv/setenv.
+ (setq request (substring request (match-end 0)))
+ (process-put proc 'env
+ (cons var (process-get proc 'env)))))
+
+ ;; -dir DIRNAME: The cwd of the emacsclient process.
+ ((and (equal "-dir" arg) (string-match "\\([^ ]+\\) " request))
+ (setq dir (server-unquote-arg (match-string 1 request)))
+ (setq request (substring request (match-end 0)))
+ (if coding-system
+ (setq dir (decode-coding-string dir coding-system)))
+ (setq dir (command-line-normalize-file-name dir)))
+
+ ;; Unknown command.
+ (t (error "Unknown command: %s" arg)))))
+
+ (setq frame
+ (case tty-name
+ ((nil) (if display (server-select-display display)))
+ ((window-system)
+ (server-create-window-system-frame display nowait proc))
+ (t (server-create-tty-frame tty-name tty-type proc))))
+
+ (process-put proc 'continuation
+ (lexical-let ((proc proc)
+ (files files)
+ (nowait nowait)
+ (commands commands)
+ (dontkill dontkill)
+ (frame frame)
+ (tty-name tty-name))
+ (lambda ()
+ (server-execute proc files nowait commands
+ dontkill frame tty-name))))
+
+ (when (or frame files)
+ (server-goto-toplevel proc))
+
+ (server-execute-continuation proc))))
+ ;; condition-case
+ (error (server-return-error proc err))))
+
+(defun server-execute (proc files nowait commands dontkill frame tty-name)
+ (condition-case err
+ (let* ((buffers
+ (when files
+ (run-hooks 'pre-command-hook)
+ (prog1 (server-visit-files files proc nowait)
+ (run-hooks 'post-command-hook)))))
+
+ (mapc 'funcall (nreverse commands))
+
+ ;; Delete the client if necessary.
+ (cond
+ (nowait
+ ;; Client requested nowait; return immediately.
+ (server-log "Close nowait client" proc)
+ (server-delete-client proc))
+ ((and (not dontkill) (null buffers))
+ ;; This client is empty; get rid of it immediately.
+ (server-log "Close empty client" proc)
+ (server-delete-client proc)))
+ (cond
+ ((or isearch-mode (minibufferp))
+ nil)
+ ((and frame (null buffers))
+ (message "%s" (substitute-command-keys
+ "When done with this frame, type \\[delete-frame]")))
+ ((not (null buffers))
+ (server-switch-buffer (car buffers))
+ (run-hooks 'server-switch-hook)
+ (unless nowait
+ (message "%s" (substitute-command-keys
"When done with a buffer, type \\[server-edit]")))))
- (when (frame-live-p tmp-frame)
- ;; Delete tmp-frame or make it visible depending on whether it's
- ;; been used or not.
- (server-unselect-display tmp-frame))))
- ;; Save for later any partial line that remains.
- (when (> (length string) 0)
- (process-put proc :previous-string string)))
+ (when (and frame (null tty-name))
+ (server-unselect-display frame)))
+ (error (server-return-error proc err))))
+
+(defun server-return-error (proc err)
+ (ignore-errors
+ (server-send-string
+ proc (concat "-error " (server-quote-arg
+ (error-message-string err))))
+ (server-log (error-message-string err) proc)
+ (delete-process proc)))
(defun server-goto-line-column (file-line-col)
+ "Move point to the position indicated in FILE-LINE-COL.
+FILE-LINE-COL should be a three-element list as described in
+`server-visit-files'."
(goto-line (nth 1 file-line-col))
(let ((column-number (nth 2 file-line-col)))
(when (> column-number 0)
(move-to-column (1- column-number)))))
-(defun server-visit-files (files client &optional nowait)
- "Find FILES and return the list CLIENT with the buffers nconc'd.
+(defun server-visit-files (files proc &optional nowait)
+ "Find FILES and return a list of buffers created.
FILES is an alist whose elements are (FILENAME LINENUMBER COLUMNNUMBER).
+PROC is the client that requested this operation.
NOWAIT non-nil means this client is not waiting for the results,
so don't mark these buffers specially, just visit them normally."
;; Bind last-nonmenu-event to force use of keyboard, not mouse, for queries.
@@ -534,7 +1027,7 @@ so don't mark these buffers specially, just visit them normally."
;; modified, revert it. If there is an existing buffer with
;; deleted file, offer to write it.
(let* ((minibuffer-auto-raise (or server-raise-frame
- minibuffer-auto-raise))
+ minibuffer-auto-raise))
(filen (car file))
(obuf (get-file-buffer filen)))
(add-to-history 'file-name-history filen)
@@ -542,14 +1035,14 @@ so don't mark these buffers specially, just visit them normally."
(progn
(cond ((file-exists-p filen)
(when (not (verify-visited-file-modtime obuf))
- (revert-buffer t nil)))
+ (revert-buffer t nil)))
(t
(when (y-or-n-p
- (concat "File no longer exists: "
- filen
- ", write buffer to file? "))
- (write-file filen))))
- (setq server-existing-buffer t)
+ (concat "File no longer exists: " filen
+ ", write buffer to file? "))
+ (write-file filen))))
+ (unless server-buffer-clients
+ (setq server-existing-buffer t))
(server-goto-line-column file))
(set-buffer (find-file-noselect filen))
(server-goto-line-column file)
@@ -557,9 +1050,12 @@ so don't mark these buffers specially, just visit them normally."
(unless nowait
;; When the buffer is killed, inform the clients.
(add-hook 'kill-buffer-hook 'server-kill-buffer nil t)
- (push (car client) server-buffer-clients))
+ (push proc server-buffer-clients))
(push (current-buffer) client-record)))
- (nconc client client-record)))
+ (unless nowait
+ (process-put proc 'buffers
+ (nconc (process-get proc 'buffers) client-record)))
+ client-record))
(defun server-buffer-done (buffer &optional for-killing)
"Mark BUFFER as \"done\" for its client(s).
@@ -569,27 +1065,24 @@ or nil. KILLED is t if we killed BUFFER (typically, because it was visiting
a temp file).
FOR-KILLING if non-nil indicates that we are called from `kill-buffer'."
(let ((next-buffer nil)
- (killed nil)
- (old-clients server-clients))
- (while old-clients
- (let ((client (car old-clients)))
+ (killed nil))
+ (dolist (proc server-clients)
+ (let ((buffers (process-get proc 'buffers)))
(or next-buffer
- (setq next-buffer (nth 1 (memq buffer client))))
- (delq buffer client)
- ;; Delete all dead buffers from CLIENT.
- (let ((tail client))
- (while tail
- (and (bufferp (car tail))
- (null (buffer-name (car tail)))
- (delq (car tail) client))
- (setq tail (cdr tail))))
- ;; If client now has no pending buffers,
- ;; tell it that it is done, and forget it entirely.
- (unless (cdr client)
- (delete-process (car client))
- (server-log "Close" (car client))
- (setq server-clients (delq client server-clients))))
- (setq old-clients (cdr old-clients)))
+ (setq next-buffer (nth 1 (memq buffer buffers))))
+ (when buffers ; Ignore bufferless clients.
+ (setq buffers (delq buffer buffers))
+ ;; Delete all dead buffers from PROC.
+ (dolist (b buffers)
+ (and (bufferp b)
+ (not (buffer-live-p b))
+ (setq buffers (delq b buffers))))
+ (process-put proc 'buffers buffers)
+ ;; If client now has no pending buffers,
+ ;; tell it that it is done, and forget it entirely.
+ (unless buffers
+ (server-log "Close" proc)
+ (server-delete-client proc)))))
(when (and (bufferp buffer) (buffer-name buffer))
;; We may or may not kill this buffer;
;; if we do, do not call server-buffer-done recursively
@@ -654,30 +1147,32 @@ specifically for the clients and did not exist before their request for it."
;; but I think that is dangerous--the client would proceed
;; using whatever is on disk in that file. -- rms.
(defun server-kill-buffer-query-function ()
+ "Ask before killing a server buffer."
(or (not server-buffer-clients)
+ (let ((res t))
+ (dolist (proc server-buffer-clients res)
+ (when (and (memq proc server-clients)
+ (eq (process-status proc) 'open))
+ (setq res nil))))
(yes-or-no-p (format "Buffer `%s' still has clients; kill it? "
(buffer-name (current-buffer))))))
-(add-hook 'kill-buffer-query-functions
- 'server-kill-buffer-query-function)
-
(defun server-kill-emacs-query-function ()
- (let (live-client
- (tail server-clients))
- ;; See if any clients have any buffers that are still alive.
- (while tail
- (when (memq t (mapcar 'stringp (mapcar 'buffer-name (cdr (car tail)))))
- (setq live-client t))
- (setq tail (cdr tail)))
- (or (not live-client)
- (yes-or-no-p "Server buffers still have clients; exit anyway? "))))
-
-(add-hook 'kill-emacs-query-functions 'server-kill-emacs-query-function)
+ "Ask before exiting Emacs if it has live clients."
+ (or (not server-clients)
+ (let (live-client)
+ (dolist (proc server-clients live-client)
+ (when (memq t (mapcar 'buffer-live-p (process-get
+ proc 'buffers)))
+ (setq live-client t))))
+ (yes-or-no-p "This Emacs session has clients; exit anyway? ")))
(defvar server-kill-buffer-running nil
"Non-nil while `server-kill-buffer' or `server-buffer-done' is running.")
(defun server-kill-buffer ()
+ "Remove the current buffer from its clients' buffer list.
+Designed to be added to `kill-buffer-hook'."
;; Prevent infinite recursion if user has made server-done-hook
;; call kill-buffer.
(or server-kill-buffer-running
@@ -711,18 +1206,26 @@ starts server process and that is all. Invoked by \\[server-edit]."
(defun server-switch-buffer (&optional next-buffer killed-one)
"Switch to another buffer, preferably one that has a client.
-Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
- ;; KILLED-ONE is t in a recursive call
- ;; if we have already killed one temp-file server buffer.
- ;; This means we should avoid the final "switch to some other buffer"
- ;; since we've already effectively done that.
+Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it.
+
+KILLED-ONE is t in a recursive call if we have already killed one
+temp-file server buffer. This means we should avoid the final
+\"switch to some other buffer\" since we've already effectively
+done that."
(if (null next-buffer)
- (if server-clients
- (server-switch-buffer (nth 1 (car server-clients)) killed-one)
- (unless (or killed-one (window-dedicated-p (selected-window)))
- (switch-to-buffer (other-buffer))
+ (progn
+ (let ((rest server-clients))
+ (while (and rest (not next-buffer))
+ (let ((proc (car rest)))
+ ;; Only look at frameless clients.
+ (when (not (process-get proc 'frame))
+ (setq next-buffer (car (process-get proc 'buffers))))
+ (setq rest (cdr rest)))))
+ (and next-buffer (server-switch-buffer next-buffer killed-one))
+ (unless (or next-buffer killed-one (window-dedicated-p (selected-window)))
+ ;; (switch-to-buffer (other-buffer))
(message "No server buffers remain to edit")))
- (if (not (buffer-name next-buffer))
+ (if (not (buffer-live-p next-buffer))
;; If NEXT-BUFFER is a dead buffer, remove the server records for it
;; and try the next surviving server buffer.
(apply 'server-switch-buffer (server-buffer-done next-buffer))
@@ -736,8 +1239,7 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
(select-window win)
(set-buffer next-buffer))
;; Otherwise, let's find an appropriate window.
- (cond ((and (windowp server-window)
- (window-live-p server-window))
+ (cond ((window-live-p server-window)
(select-window server-window))
((framep server-window)
(unless (frame-live-p server-window)
@@ -751,8 +1253,8 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
(get-window-with-predicate
(lambda (w)
(and (not (window-dedicated-p w))
- (equal (frame-parameter (window-frame w) 'display)
- (frame-parameter (selected-frame) 'display))))
+ (equal (frame-terminal (window-frame w))
+ (frame-terminal (selected-frame)))))
'nomini 'visible (selected-window))))
(condition-case nil
(switch-to-buffer next-buffer)
@@ -762,6 +1264,24 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
(when server-raise-frame
(select-frame-set-input-focus (window-frame (selected-window))))))
+;;;###autoload
+(defun server-save-buffers-kill-terminal (proc &optional arg)
+ "Offer to save each buffer, then kill PROC.
+
+With prefix arg, silently save all file-visiting buffers, then kill.
+
+If emacsclient was started with a list of filenames to edit, then
+only these files will be asked to be saved."
+ (let ((buffers (process-get proc 'buffers)))
+ ;; If client is bufferless, emulate a normal Emacs session
+ ;; exit and offer to save all buffers. Otherwise, offer to
+ ;; save only the buffers belonging to the client.
+ (save-some-buffers arg
+ (if buffers
+ (lambda () (memq (current-buffer) buffers))
+ t))
+ (server-delete-client proc)))
+
(define-key ctl-x-map "#" 'server-edit)
(defun server-unload-function ()
@@ -769,13 +1289,12 @@ Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."
(server-mode -1)
(substitute-key-definition 'server-edit nil ctl-x-map)
(save-current-buffer
- (dolist (buffer (buffer-list))
- (set-buffer buffer)
- (remove-hook 'kill-buffer-hook 'server-kill-buffer t)))
+ (dolist (buffer (buffer-list))
+ (set-buffer buffer)
+ (remove-hook 'kill-buffer-hook 'server-kill-buffer t)))
;; continue standard unloading
nil)
-(add-hook 'kill-emacs-hook (lambda () (server-mode -1))) ;Cleanup upon exit.
(provide 'server)
diff --git a/lisp/ses.el b/lisp/ses.el
index 2b6b452500e..f76befa874d 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -172,8 +172,10 @@ Each function is called with ARG=1."
"\"" ses-read-cell
"'" ses-read-symbol
"=" ses-edit-cell
+ "c" ses-recalculate-cell
"j" ses-jump
"p" ses-read-cell-printer
+ "t" ses-truncate-cell
"w" ses-set-column-width
"x" ses-export-keymap
"\M-p" ses-read-column-printer))
@@ -271,6 +273,9 @@ default printer and then modify its output.")
(make-local-variable x)
(set x nil)))
+;;;This variable is documented as being permitted in file-locals:
+(put 'ses--symbolic-formulas 'safe-local-variable 'consp)
+
(defconst ses-paramlines-plist
'(ses--col-widths -5 ses--col-printers -4 ses--default-printer -3
ses--header-row -2 ses--file-format 1 ses--numrows 2
@@ -507,10 +512,12 @@ for this spreadsheet."
(list (symbol-name (cadr formula))))))
(defun ses-column-letter (col)
- "Converts a column number to A..Z or AA..ZZ"
- (if (< col 26)
- (char-to-string (+ ?A col))
- (string (+ ?@ (/ col 26)) (+ ?A (% col 26)))))
+ "Return the alphabetic name of column number COL.
+0-25 become A-Z; 26-701 become AA-ZZ, and so on."
+ (let ((units (char-to-string (+ ?A (% col 26)))))
+ (if (< col 26)
+ units
+ (concat (ses-column-letter (1- (/ col 26))) units))))
(defun ses-create-cell-symbol (row col)
"Produce a symbol that names the cell (ROW,COL). (0,0) => 'A1."
@@ -738,6 +745,9 @@ region, or nil if cursor is not at a cell."
;;Range
(let ((bcell (get-text-property (region-beginning) 'intangible))
(ecell (get-text-property (1- (region-end)) 'intangible)))
+ (when (= (region-end) ses--data-marker)
+ ;;Correct for overflow
+ (setq ecell (get-text-property (- (region-end) 2) 'intangible)))
(setq ses--curcell (if (and bcell ecell)
(cons bcell ecell)
nil))))
@@ -2328,6 +2338,9 @@ hard to override how mouse-1 works."
(defun ses-copy-region (beg end)
"Treat the region as rectangular. Convert the intangible attributes to
SES attributes recording the contents of the cell as of the time of copying."
+ (when (= end ses--data-marker)
+ ;;Avoid overflow situation
+ (setq end (1- ses--data-marker)))
(let* ((inhibit-point-motion-hooks t)
(x (mapconcat 'ses-copy-region-helper
(extract-rectangle beg (1- end)) "\n")))
diff --git a/lisp/shadowfile.el b/lisp/shadowfile.el
index 8e970919721..be30ccc8c6a 100644
--- a/lisp/shadowfile.el
+++ b/lisp/shadowfile.el
@@ -28,7 +28,7 @@
;; This package helps you to keep identical copies of files in more than one
;; place - possibly on different machines. When you save a file, it checks
;; whether it is on the list of files with "shadows", and if so, it tries to
-;; copy it when you exit emacs (or use the shadow-copy-files command).
+;; copy it when you exit Emacs (or use the shadow-copy-files command).
;; Installation & Use:
@@ -38,8 +38,8 @@
;; them). After doing this once, everything should be automatic.
;; The lists of clusters and shadows are saved in a file called .shadows,
-;; so that they can be remembered from one emacs session to another, even
-;; (as much as possible) if the emacs session terminates abnormally. The
+;; so that they can be remembered from one Emacs session to another, even
+;; (as much as possible) if the Emacs session terminates abnormally. The
;; files needing to be copied are stored in .shadow_todo; if a file cannot
;; be copied for any reason, it will stay on the list to be tried again
;; next time. The .shadows file should itself have shadows on all your
@@ -47,7 +47,7 @@
;; .shadow_todo is local information and should have no shadows.
;; If you do not want to copy a particular file, you can answer "no" and
-;; be asked again next time you hit C-x 4 s or exit emacs. If you do not
+;; be asked again next time you hit C-x 4 s or exit Emacs. If you do not
;; want to be asked again, use shadow-cancel, and you will not be asked
;; until you change the file and save it again. If you do not want to
;; shadow that file ever again, you can edit it out of the .shadows
@@ -192,12 +192,6 @@ Nondestructive; actually returns a copy of the list with the elements removed."
(cons (car list) (shadow-remove-if func (cdr list))))
nil))
-(defun shadow-join (strings sep)
- "Concatenate elements of the list of STRINGS with SEP between each."
- (cond ((null strings) "")
- ((null (cdr strings)) (car strings))
- ((concat (car strings) " " (shadow-join (cdr strings) sep)))))
-
(defun shadow-regexp-superquote (string)
"Like `regexp-quote', but includes the ^ and $.
This makes sure regexp matches nothing but STRING."
@@ -503,9 +497,7 @@ function). Each site can be either a hostname or the name of a cluster \(see
;; Mostly for debugging.
"Interactive function to display shadows of a buffer."
(interactive)
- (let ((msg (shadow-join (mapcar (function cdr)
- (shadow-shadows-of (buffer-file-name)))
- " ")))
+ (let ((msg (mapconcat #'cdr (shadow-shadows-of (buffer-file-name)) " ")))
(message "%s"
(if (zerop (length msg))
"No shadows."
@@ -643,7 +635,7 @@ Consider them as regular expressions if third arg REGEXP is true."
"Use \\[shadow-copy-files] to update shadows."))
(sit-for 1))
(shadow-write-todo-file)))
- nil) ; Return nil for write-file-hooks
+ nil) ; Return nil for write-file-functions
(defun shadow-remove-from-todo (pair)
"Remove PAIR from `shadow-files-to-copy'.
@@ -831,16 +823,16 @@ look for files that have been changed and need to be copied to other systems."
(defalias 'shadow-orig-save-buffers-kill-emacs
(symbol-function 'save-buffers-kill-emacs))
(defalias 'save-buffers-kill-emacs 'shadow-save-buffers-kill-emacs))
- (add-hook 'write-file-hooks 'shadow-add-to-todo)
+ (add-hook 'write-file-functions 'shadow-add-to-todo)
(define-key ctl-x-4-map "s" 'shadow-copy-files)))
-(defun shadowfile-unload-hook ()
- (if (fboundp 'shadow-orig-save-buffers-kill-emacs)
- (fset 'save-buffers-kill-emacs
- (symbol-function 'shadow-orig-save-buffers-kill-emacs)))
- (remove-hook 'write-file-hooks 'shadow-add-to-todo))
-
-(add-hook 'shadowfile-unload-hook 'shadowfile-unload-hook)
+(defun shadowfile-unload-function ()
+ (substitute-key-definition 'shadow-copy-files nil ctl-x-4-map)
+ (when (fboundp 'shadow-orig-save-buffers-kill-emacs)
+ (fset 'save-buffers-kill-emacs
+ (symbol-function 'shadow-orig-save-buffers-kill-emacs)))
+ ;; continue standard unloading
+ nil)
(provide 'shadowfile)
diff --git a/lisp/shell.el b/lisp/shell.el
index dbff7a389fa..24ef65a384a 100644
--- a/lisp/shell.el
+++ b/lisp/shell.el
@@ -5,7 +5,7 @@
;; Author: Olin Shivers <shivers@cs.cmu.edu>
;; Simon Marshall <simon@gnu.org>
-;; Maintainer: FSF
+;; Maintainer: FSF <emacs-devel@gnu.org>
;; Keywords: processes
;; This file is part of GNU Emacs.
@@ -27,11 +27,6 @@
;;; Commentary:
-;; Please send me bug reports, bug fixes, and extensions, so that I can
-;; merge them into the master source.
-;; - Olin Shivers (shivers@cs.cmu.edu)
-;; - Simon Marshall (simon@gnu.org)
-
;; This file defines a shell-in-a-buffer package (shell mode) built on
;; top of comint mode. This is actually cmushell with things renamed
;; to replace its counterpart in Emacs 18. cmushell is more
@@ -93,7 +88,7 @@
;; m-c-f shell-forward-command Forward a shell command
;; m-c-b shell-backward-command Backward a shell command
;; dirs Resync the buffer's dir stack
-;; dirtrack-mode Turn dir tracking on/off
+;; shell-dirtrack-mode Turn dir tracking on/off
;; comint-strip-ctrl-m Remove trailing ^Ms from output
;;
;; The shell mode hook is shell-mode-hook
@@ -263,7 +258,9 @@ This mirrors the optional behavior of tcsh."
(defcustom shell-dirtrack-verbose t
"If non-nil, show the directory stack following directory change.
-This is effective only if directory tracking is enabled."
+This is effective only if directory tracking is enabled.
+The `dirtrack' package provides an alternative implementation of this feature -
+see the function `dirtrack-mode'."
:type 'boolean
:group 'shell-directories)
@@ -398,7 +395,9 @@ While directory tracking is enabled, the shell's working directory is displayed
by \\[list-buffers] or \\[mouse-buffer-menu] in the `File' field.
\\[dirs] queries the shell and resyncs Emacs' idea of what the current
directory stack is.
-\\[dirtrack-mode] turns directory tracking on and off.
+\\[shell-dirtrack-mode] turns directory tracking on and off.
+\(The `dirtrack' package provides an alternative implementation of this
+feature - see the function `dirtrack-mode'.)
\\{shell-mode-map}
Customization: Entry to this mode runs the hooks on `comint-mode-hook' and
@@ -516,6 +515,9 @@ Sentinels will always get the two parameters PROCESS and EVENT."
(defun shell (&optional buffer)
"Run an inferior shell, with I/O through BUFFER (which defaults to `*shell*').
Interactively, a prefix arg means to prompt for BUFFER.
+If `default-directory' is a remote file name, it is also prompted
+to change if called with a prefix arg.
+
If BUFFER exists but shell process is not running, make new shell.
If BUFFER exists and shell process is running, just switch to BUFFER.
Program used comes from variable `explicit-shell-file-name',
@@ -544,8 +546,16 @@ Otherwise, one argument `-i' is passed to the shell.
(interactive
(list
(and current-prefix-arg
- (read-buffer "Shell buffer: "
- (generate-new-buffer-name "*shell*")))))
+ (prog1
+ (read-buffer "Shell buffer: "
+ (generate-new-buffer-name "*shell*"))
+ (if (file-remote-p default-directory)
+ ;; It must be possible to declare a local default-directory.
+ (setq default-directory
+ (expand-file-name
+ (read-file-name
+ "Default directory: " default-directory default-directory
+ t nil 'file-directory-p))))))))
(setq buffer (get-buffer-create (or buffer "*shell*")))
;; Pop to buffer, so that the buffer's window will be correctly set
;; when we call comint (so that comint sets the COLUMNS env var properly).
@@ -557,7 +567,7 @@ Otherwise, one argument `-i' is passed to the shell.
(startfile (concat "~/.emacs_" name))
(xargs-name (intern-soft (concat "explicit-" name "-args"))))
(unless (file-exists-p startfile)
- (setq startfile (concat "~/.emacs.d/init_" name ".sh")))
+ (setq startfile (concat user-emacs-directory "init_" name ".sh")))
(apply 'make-comint-in-buffer "shell" buffer prog
(if (file-exists-p startfile) startfile)
(if (and xargs-name (boundp xargs-name))
@@ -615,8 +625,10 @@ This function is called on each input passed to the shell.
It watches for cd, pushd and popd commands and sets the buffer's
default directory to track these commands.
-You may toggle this tracking on and off with \\[dirtrack-mode].
+You may toggle this tracking on and off with \\[shell-dirtrack-mode].
If Emacs gets confused, you can resync with the shell with \\[dirs].
+\(The `dirtrack' package provides an alternative implementation of this
+feature - see the function `dirtrack-mode'.)
See variables `shell-cd-regexp', `shell-chdrive-regexp', `shell-pushd-regexp',
and `shell-popd-regexp', while `shell-pushd-tohome', `shell-pushd-dextract',
@@ -772,17 +784,17 @@ Environment variables are expanded, see function `substitute-in-file-name'."
(defvaralias 'shell-dirtrack-mode 'shell-dirtrackp)
(define-minor-mode shell-dirtrack-mode
- "Turn directory tracking on and off in a shell buffer."
+ "Turn directory tracking on and off in a shell buffer.
+The `dirtrack' package provides an alternative implementation of this
+feature - see the function `dirtrack-mode'."
nil nil nil
(setq list-buffers-directory (if shell-dirtrack-mode default-directory))
(if shell-dirtrack-mode
(add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
(remove-hook 'comint-input-filter-functions 'shell-directory-tracker t)))
-;; For your typing convenience:
-(defalias 'shell-dirtrack-toggle 'shell-dirtrack-mode) ;??Convenience??
-(defalias 'dirtrack-toggle 'shell-dirtrack-mode)
-(defalias 'dirtrack-mode 'shell-dirtrack-mode)
+(define-obsolete-function-alias 'shell-dirtrack-toggle 'shell-dirtrack-mode
+ "23.1")
(defun shell-cd (dir)
"Do normal `cd' to DIR, and set `list-buffers-directory'."
diff --git a/lisp/simple.el b/lisp/simple.el
index 551c93b773a..f49921e60dc 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -86,34 +86,22 @@ If the optional third argument FRAME is non-nil, use that frame's
buffer list instead of the selected frame's buffer list.
If no other buffer exists, the buffer `*scratch*' is returned."
(setq frame (or frame (selected-frame)))
- (or (get-next-valid-buffer (frame-parameter frame 'buried-buffer-list)
- buffer visible-ok frame)
- (get-next-valid-buffer (nreverse (buffer-list frame))
- buffer visible-ok frame)
+ (or (get-next-valid-buffer (nreverse (buffer-list frame))
+ buffer visible-ok frame)
(progn
(set-buffer-major-mode (get-buffer-create "*scratch*"))
(get-buffer "*scratch*"))))
-
(defun next-buffer ()
"Switch to the next buffer in cyclic order."
(interactive)
- (let ((buffer (current-buffer))
- (bbl (frame-parameter nil 'buried-buffer-list)))
+ (let ((buffer (current-buffer)))
(switch-to-buffer (other-buffer buffer t))
- (bury-buffer buffer)
- (set-frame-parameter nil 'buried-buffer-list
- (cons buffer (delq buffer bbl)))))
+ (bury-buffer buffer)))
(defun previous-buffer ()
"Switch to the previous buffer in cyclic order."
(interactive)
- (let ((buffer (last-buffer (current-buffer) t))
- (bbl (frame-parameter nil 'buried-buffer-list)))
- (switch-to-buffer buffer)
- ;; Clean up buried-buffer-list up to and including the chosen buffer.
- (while (and bbl (not (eq (car bbl) buffer)))
- (setq bbl (cdr bbl)))
- (set-frame-parameter nil 'buried-buffer-list bbl)))
+ (switch-to-buffer (last-buffer (current-buffer) t)))
;;; next-error support framework
@@ -157,6 +145,15 @@ If `fringe-arrow', indicate the locus by the fringe arrow."
:group 'next-error
:version "22.1")
+(defcustom next-error-recenter nil
+ "*Display the line in the visited source file recentered as specified.
+If non-nil, the value is passed directly to `recenter'."
+ :type '(choice (integer :tag "Line to recenter to")
+ (const :tag "Center of window" (4))
+ (const :tag "No recentering" nil))
+ :group 'next-error
+ :version "23.1")
+
(defcustom next-error-hook nil
"*List of hook functions run by `next-error' after visiting source file."
:type 'hook
@@ -306,6 +303,8 @@ See variables `compilation-parse-errors-function' and
;; we know here that next-error-function is a valid symbol we can funcall
(with-current-buffer next-error-last-buffer
(funcall next-error-function (prefix-numeric-value arg) reset)
+ (when next-error-recenter
+ (recenter next-error-recenter))
(run-hooks 'next-error-hook))))
(defun next-error-internal ()
@@ -314,6 +313,8 @@ See variables `compilation-parse-errors-function' and
;; we know here that next-error-function is a valid symbol we can funcall
(with-current-buffer next-error-last-buffer
(funcall next-error-function 0 nil)
+ (when next-error-recenter
+ (recenter next-error-recenter))
(run-hooks 'next-error-hook)))
(defalias 'goto-next-locus 'next-error)
@@ -457,7 +458,7 @@ than the value of `fill-column' and ARG is nil."
;; Mark the newline(s) `hard'.
(if use-hard-newlines
(set-hard-newline-properties
- (- (point) (if arg (prefix-numeric-value arg) 1)) (point)))
+ (- (point) (prefix-numeric-value arg)) (point)))
;; If the newline leaves the previous line blank,
;; and we have a left margin, delete that from the blank line.
(or flag
@@ -632,7 +633,16 @@ column specified by the function `current-left-margin'."
(newline)
(save-excursion
(goto-char pos)
+ ;; We are at EOL before the call to indent-according-to-mode, and
+ ;; after it we usually are as well, but not always. We tried to
+ ;; address it with `save-excursion' but that uses a normal marker
+ ;; whereas we need `move after insertion', so we do the save/restore
+ ;; by hand.
+ (setq pos (copy-marker pos t))
(indent-according-to-mode)
+ (goto-char pos)
+ ;; Remove the trailing white-space after indentation because
+ ;; indentation may introduce the whitespace.
(delete-horizontal-space t))
(indent-according-to-mode)))
@@ -1043,7 +1053,7 @@ display the result of expression evaluation."
(if (boundp 'edebug-active) edebug-active)))
(let ((char-string
(if (or (if (boundp 'edebug-active) edebug-active)
- (memq this-command '(eval-last-sexp eval-print-last-sexp)))
+ (memq this-command '(eval-last-sexp eval-print-last-sexp)))
(prin1-char value))))
(if char-string
(format " (#o%o, #x%x, %s)" value value char-string)
@@ -1288,55 +1298,67 @@ makes the search case-sensitive."
(defvar minibuffer-temporary-goal-position nil)
+(defun goto-history-element (nabs)
+ "Puts element of the minibuffer history in the minibuffer.
+The argument NABS specifies the absolute history position."
+ (interactive "p")
+ (let ((minimum (if minibuffer-default
+ (- (if (listp minibuffer-default)
+ (length minibuffer-default)
+ 1))
+ 0))
+ elt minibuffer-returned-to-present)
+ (if (and (zerop minibuffer-history-position)
+ (null minibuffer-text-before-history))
+ (setq minibuffer-text-before-history
+ (minibuffer-contents-no-properties)))
+ (if (< nabs minimum)
+ (if minibuffer-default
+ (error "End of history; no next item")
+ (error "End of history; no default available")))
+ (if (> nabs (length (symbol-value minibuffer-history-variable)))
+ (error "Beginning of history; no preceding item"))
+ (unless (memq last-command '(next-history-element
+ previous-history-element))
+ (let ((prompt-end (minibuffer-prompt-end)))
+ (set (make-local-variable 'minibuffer-temporary-goal-position)
+ (cond ((<= (point) prompt-end) prompt-end)
+ ((eobp) nil)
+ (t (point))))))
+ (goto-char (point-max))
+ (delete-minibuffer-contents)
+ (setq minibuffer-history-position nabs)
+ (cond ((< nabs 0)
+ (setq elt (if (listp minibuffer-default)
+ (nth (1- (abs nabs)) minibuffer-default)
+ minibuffer-default)))
+ ((= nabs 0)
+ (setq elt (or minibuffer-text-before-history ""))
+ (setq minibuffer-returned-to-present t)
+ (setq minibuffer-text-before-history nil))
+ (t (setq elt (nth (1- minibuffer-history-position)
+ (symbol-value minibuffer-history-variable)))))
+ (insert
+ (if (and (eq minibuffer-history-sexp-flag (minibuffer-depth))
+ (not minibuffer-returned-to-present))
+ (let ((print-level nil))
+ (prin1-to-string elt))
+ elt))
+ (goto-char (or minibuffer-temporary-goal-position (point-max)))))
+
(defun next-history-element (n)
"Puts next element of the minibuffer history in the minibuffer.
With argument N, it uses the Nth following element."
(interactive "p")
(or (zerop n)
- (let ((narg (- minibuffer-history-position n))
- (minimum (if minibuffer-default -1 0))
- elt minibuffer-returned-to-present)
- (if (and (zerop minibuffer-history-position)
- (null minibuffer-text-before-history))
- (setq minibuffer-text-before-history
- (minibuffer-contents-no-properties)))
- (if (< narg minimum)
- (if minibuffer-default
- (error "End of history; no next item")
- (error "End of history; no default available")))
- (if (> narg (length (symbol-value minibuffer-history-variable)))
- (error "Beginning of history; no preceding item"))
- (unless (memq last-command '(next-history-element
- previous-history-element))
- (let ((prompt-end (minibuffer-prompt-end)))
- (set (make-local-variable 'minibuffer-temporary-goal-position)
- (cond ((<= (point) prompt-end) prompt-end)
- ((eobp) nil)
- (t (point))))))
- (goto-char (point-max))
- (delete-minibuffer-contents)
- (setq minibuffer-history-position narg)
- (cond ((= narg -1)
- (setq elt minibuffer-default))
- ((= narg 0)
- (setq elt (or minibuffer-text-before-history ""))
- (setq minibuffer-returned-to-present t)
- (setq minibuffer-text-before-history nil))
- (t (setq elt (nth (1- minibuffer-history-position)
- (symbol-value minibuffer-history-variable)))))
- (insert
- (if (and (eq minibuffer-history-sexp-flag (minibuffer-depth))
- (not minibuffer-returned-to-present))
- (let ((print-level nil))
- (prin1-to-string elt))
- elt))
- (goto-char (or minibuffer-temporary-goal-position (point-max))))))
+ (goto-history-element (- minibuffer-history-position n))))
(defun previous-history-element (n)
"Puts previous element of the minibuffer history in the minibuffer.
With argument N, it uses the Nth previous element."
(interactive "p")
- (next-history-element (- n)))
+ (or (zerop n)
+ (goto-history-element (+ minibuffer-history-position n))))
(defun next-complete-history-element (n)
"Get next history element which completes the minibuffer before the point.
@@ -1369,6 +1391,137 @@ Return 0 if current buffer is not a minibuffer."
;; the buffer; this should be 0 for normal buffers.
(1- (minibuffer-prompt-end)))
+;; isearch minibuffer history
+(add-hook 'minibuffer-setup-hook 'minibuffer-history-isearch-setup)
+
+(defvar minibuffer-history-isearch-message-overlay)
+(make-variable-buffer-local 'minibuffer-history-isearch-message-overlay)
+
+(defun minibuffer-history-isearch-setup ()
+ "Set up a minibuffer for using isearch to search the minibuffer history.
+Intended to be added to `minibuffer-setup-hook'."
+ (set (make-local-variable 'isearch-search-fun-function)
+ 'minibuffer-history-isearch-search)
+ (set (make-local-variable 'isearch-message-function)
+ 'minibuffer-history-isearch-message)
+ (set (make-local-variable 'isearch-wrap-function)
+ 'minibuffer-history-isearch-wrap)
+ (set (make-local-variable 'isearch-push-state-function)
+ 'minibuffer-history-isearch-push-state)
+ (add-hook 'isearch-mode-end-hook 'minibuffer-history-isearch-end nil t))
+
+(defun minibuffer-history-isearch-end ()
+ "Clean up the minibuffer after terminating isearch in the minibuffer."
+ (if minibuffer-history-isearch-message-overlay
+ (delete-overlay minibuffer-history-isearch-message-overlay)))
+
+(defun minibuffer-history-isearch-search ()
+ "Return the proper search function, for isearch in minibuffer history."
+ (cond
+ (isearch-word
+ (if isearch-forward 'word-search-forward 'word-search-backward))
+ (t
+ (lambda (string bound noerror)
+ (let ((search-fun
+ ;; Use standard functions to search within minibuffer text
+ (cond
+ (isearch-regexp
+ (if isearch-forward 're-search-forward 're-search-backward))
+ (t
+ (if isearch-forward 'search-forward 'search-backward))))
+ found)
+ ;; Avoid lazy-highlighting matches in the minibuffer prompt when
+ ;; searching forward. Lazy-highlight calls this lambda with the
+ ;; bound arg, so skip the minibuffer prompt.
+ (if (and bound isearch-forward (< (point) (minibuffer-prompt-end)))
+ (goto-char (minibuffer-prompt-end)))
+ (or
+ ;; 1. First try searching in the initial minibuffer text
+ (funcall search-fun string
+ (if isearch-forward bound (minibuffer-prompt-end))
+ noerror)
+ ;; 2. If the above search fails, start putting next/prev history
+ ;; elements in the minibuffer successively, and search the string
+ ;; in them. Do this only when bound is nil (i.e. not while
+ ;; lazy-highlighting search strings in the current minibuffer text).
+ (unless bound
+ (condition-case nil
+ (progn
+ (while (not found)
+ (cond (isearch-forward
+ (next-history-element 1)
+ (goto-char (minibuffer-prompt-end)))
+ (t
+ (previous-history-element 1)
+ (goto-char (point-max))))
+ (setq isearch-barrier (point) isearch-opoint (point))
+ ;; After putting the next/prev history element, search
+ ;; the string in them again, until next-history-element
+ ;; or previous-history-element raises an error at the
+ ;; beginning/end of history.
+ (setq found (funcall search-fun string
+ (unless isearch-forward
+ ;; For backward search, don't search
+ ;; in the minibuffer prompt
+ (minibuffer-prompt-end))
+ noerror)))
+ ;; Return point of the new search result
+ (point))
+ ;; Return nil when next(prev)-history-element fails
+ (error nil)))))))))
+
+(defun minibuffer-history-isearch-message (&optional c-q-hack ellipsis)
+ "Display the minibuffer history search prompt.
+If there are no search errors, this function displays an overlay with
+the isearch prompt which replaces the original minibuffer prompt.
+Otherwise, it displays the standard isearch message returned from
+`isearch-message'."
+ (if (not (and (minibufferp) isearch-success (not isearch-error)))
+ ;; Use standard function `isearch-message' when not in the minibuffer,
+ ;; or search fails, or has an error (like incomplete regexp).
+ ;; This function overwrites minibuffer text with isearch message,
+ ;; so it's possible to see what is wrong in the search string.
+ (isearch-message c-q-hack ellipsis)
+ ;; Otherwise, put the overlay with the standard isearch prompt over
+ ;; the initial minibuffer prompt.
+ (if (overlayp minibuffer-history-isearch-message-overlay)
+ (move-overlay minibuffer-history-isearch-message-overlay
+ (point-min) (minibuffer-prompt-end))
+ (setq minibuffer-history-isearch-message-overlay
+ (make-overlay (point-min) (minibuffer-prompt-end)))
+ (overlay-put minibuffer-history-isearch-message-overlay 'evaporate t))
+ (overlay-put minibuffer-history-isearch-message-overlay
+ 'display (isearch-message-prefix c-q-hack ellipsis))
+ ;; And clear any previous isearch message.
+ (message "")))
+
+(defun minibuffer-history-isearch-wrap ()
+ "Wrap the minibuffer history search when search is failed.
+Move point to the first history element for a forward search,
+or to the last history element for a backward search."
+ (unless isearch-word
+ ;; When `minibuffer-history-isearch-search' fails on reaching the
+ ;; beginning/end of the history, wrap the search to the first/last
+ ;; minibuffer history element.
+ (if isearch-forward
+ (goto-history-element (length (symbol-value minibuffer-history-variable)))
+ (goto-history-element 0))
+ (setq isearch-success t))
+ (goto-char (if isearch-forward (minibuffer-prompt-end) (point-max))))
+
+(defun minibuffer-history-isearch-push-state ()
+ "Save a function restoring the state of minibuffer history search.
+Save `minibuffer-history-position' to the additional state parameter
+in the search status stack."
+ `(lambda (cmd)
+ (minibuffer-history-isearch-pop-state cmd ,minibuffer-history-position)))
+
+(defun minibuffer-history-isearch-pop-state (cmd hist-pos)
+ "Restore the minibuffer history search state.
+Go to the history element by the absolute history position `hist-pos'."
+ (goto-history-element hist-pos))
+
+
;Put this on C-x u, so we can force that rather than C-_ into startup msg
(defalias 'advertised-undo 'undo)
@@ -2190,6 +2343,18 @@ value passed."
(when stderr-file (delete-file stderr-file))
(when lc (delete-file lc)))))
+(defun start-file-process (name buffer program &rest program-args)
+ "Start a program in a subprocess. Return the process object for it.
+Similar to `start-process', but may invoke a file handler based on
+`default-directory'. The current working directory of the
+subprocess is `default-directory'.
+
+PROGRAM and PROGRAM-ARGS might be file names. They are not
+objects of file handler invocation."
+ (let ((fh (find-file-name-handler default-directory 'start-file-process)))
+ (if fh (apply fh 'start-file-process name buffer program program-args)
+ (apply 'start-process name buffer program program-args))))
+
(defvar universal-argument-map
@@ -2410,6 +2575,11 @@ of the Emacs kill ring should be used. If the function returns a
string, then the caller of the function \(usually `current-kill')
should put this string in the kill ring as the latest kill.
+This function may also return a list of strings if the window
+system supports multiple selections. The first string will be
+used as the pasted text, but the other will be placed in the
+kill ring for easy access via `yank-pop'.
+
Note that the function should return a string only if a program other
than Emacs has provided a string for pasting; if Emacs provided the
most recent string, the function should return nil. If it is
@@ -2491,11 +2661,11 @@ If `interprogram-cut-function' is set, pass the resulting kill to it."
(defun current-kill (n &optional do-not-move)
"Rotate the yanking point by N places, and then return that kill.
-If N is zero, `interprogram-paste-function' is set, and calling it
-returns a string, then that string is added to the front of the
-kill ring and returned as the latest kill.
-If optional arg DO-NOT-MOVE is non-nil, then don't actually move the
-yanking point; just return the Nth kill forward."
+If N is zero, `interprogram-paste-function' is set, and calling it returns a
+string or list of strings, then that string (or list) is added to the front
+of the kill ring and the string (or first string in the list) is returned as
+the latest kill. If optional arg DO-NOT-MOVE is non-nil, then don't
+actually move the yanking point; just return the Nth kill forward."
(let ((interprogram-paste (and (= n 0)
interprogram-paste-function
(funcall interprogram-paste-function))))
@@ -2505,8 +2675,10 @@ yanking point; just return the Nth kill forward."
;; text to the kill ring, so Emacs doesn't try to own the
;; selection, with identical text.
(let ((interprogram-cut-function nil))
- (kill-new interprogram-paste))
- interprogram-paste)
+ (if (listp interprogram-paste)
+ (mapc 'kill-new (nreverse interprogram-paste))
+ (kill-new interprogram-paste)))
+ (car kill-ring))
(or kill-ring (error "Kill ring is empty"))
(let ((ARGth-kill-element
(nthcdr (mod (- n (length kill-ring-yank-pointer))
@@ -2592,7 +2764,9 @@ text. See `insert-for-yank'."
"Save the region as if killed, but don't kill it.
In Transient Mark mode, deactivate the mark.
If `interprogram-cut-function' is non-nil, also save the text for a window
-system cut and paste."
+system cut and paste.
+
+This command's old key binding has been given to `kill-ring-save'."
(interactive "r")
(if (eq last-command 'kill-region)
(kill-append (filter-buffer-substring beg end) (< end beg))
@@ -2662,7 +2836,7 @@ The argument is used for internal purposes; do not supply one."
(defcustom yank-excluded-properties
'(read-only invisible intangible field mouse-face help-echo local-map keymap
yank-handler follow-link fontified)
- "*Text properties to discard when yanking.
+ "Text properties to discard when yanking.
The value should be a list of text properties to discard or t,
which means to discard all text properties."
:type '(choice (const :tag "All" t) (repeat symbol))
@@ -3470,7 +3644,7 @@ The beginning of a blank line does not count as the end of a line."
"Current goal column for vertical motion.
It is the column where point was
at the start of current run of vertical motion commands.
-When the `track-eol' feature is doing its job, the value is 9999.")
+When the `track-eol' feature is doing its job, the value is `most-positive-fixnum'.")
(defcustom line-move-ignore-invisible t
"*Non-nil means \\[next-line] and \\[previous-line] ignore invisible lines.
@@ -3478,16 +3652,6 @@ Outline mode sets this."
:type 'boolean
:group 'editing-basics)
-(defun invisible-p (pos)
- "Return non-nil if the character after POS is currently invisible."
- (let ((prop
- (get-char-property pos 'invisible)))
- (if (eq buffer-invisibility-spec t)
- prop
- (or (memq prop buffer-invisibility-spec)
- (assq prop buffer-invisibility-spec)))))
-(define-obsolete-function-alias 'line-move-invisible-p 'invisible-p)
-
;; Returns non-nil if partial move was done.
(defun line-move-partial (arg noerror to-end)
(if (< arg 0)
@@ -3502,7 +3666,7 @@ Outline mode sets this."
(vpos (nth 1 lh))
(ypos (nth 2 lh))
(rbot (nth 3 lh))
- ppos py vs)
+ py vs)
(when (or (null lh)
(>= rbot (frame-char-height))
(<= ypos (- (frame-char-height))))
@@ -3579,11 +3743,11 @@ Outline mode sets this."
;; Don't count beg of empty line as end of line
;; unless we just did explicit end-of-line.
(or (not (bolp)) (eq last-command 'move-end-of-line)))
- 9999
+ most-positive-fixnum
(current-column))))
- (if (and (not (integerp selective-display))
- (not line-move-ignore-invisible))
+ (if (not (or (integerp selective-display)
+ line-move-ignore-invisible))
;; Use just newline characters.
;; Set ARG to 0 if we move as many lines as requested.
(or (if (> arg 0)
@@ -3822,7 +3986,8 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
(not (bobp))
(progn
(while (and (not (bobp)) (invisible-p (1- (point))))
- (goto-char (previous-char-property-change (point))))
+ (goto-char (previous-single-char-property-change
+ (point) 'invisible)))
(backward-char 1)))
(point)))))
(goto-char newpos)
@@ -3849,7 +4014,7 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
(or arg (setq arg 1))
(let ((orig (point))
- start first-vis first-vis-field-value)
+ first-vis first-vis-field-value)
;; Move by lines, if ARG is not 1 (the default).
(if (/= arg 1)
@@ -3860,7 +4025,6 @@ To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
(while (and (not (bobp)) (invisible-p (1- (point))))
(goto-char (previous-char-property-change (point)))
(skip-chars-backward "^\n"))
- (setq start (point))
;; Now find first visible char in the line
(while (and (not (eobp)) (invisible-p (point)))
@@ -4169,13 +4333,6 @@ If optional arg REALLY-WORD is non-nil, it finds just a word."
regexp)
:group 'fill)
-(defvar comment-line-break-function 'comment-indent-new-line
- "*Mode-specific function which line breaks and continues a comment.
-
-This function is only called during auto-filling of a comment section.
-The function should take a single optional argument, which is a flag
-indicating whether it should use soft newlines.")
-
;; This function is used as the auto-fill-function of a buffer
;; when Auto-Fill mode is enabled.
;; It returns t if it really did any work.
@@ -4249,10 +4406,10 @@ indicating whether it should use soft newlines.")
(if (save-excursion
(skip-chars-backward " \t")
(= (point) fill-point))
- (funcall comment-line-break-function t)
+ (default-indent-new-line t)
(save-excursion
(goto-char fill-point)
- (funcall comment-line-break-function t)))
+ (default-indent-new-line t)))
;; Now do justification, if required
(if (not (eq justify 'left))
(save-excursion
@@ -4267,6 +4424,43 @@ indicating whether it should use soft newlines.")
(justify-current-line justify t t)
t)))
+(defvar comment-line-break-function 'comment-indent-new-line
+ "*Mode-specific function which line breaks and continues a comment.
+This function is called during auto-filling when a comment syntax
+is defined.
+The function should take a single optional argument, which is a flag
+indicating whether it should use soft newlines.")
+
+(defun default-indent-new-line (&optional soft)
+ "Break line at point and indent.
+If a comment syntax is defined, call `comment-indent-new-line'.
+
+The inserted newline is marked hard if variable `use-hard-newlines' is true,
+unless optional argument SOFT is non-nil."
+ (interactive)
+ (if comment-start
+ (funcall comment-line-break-function soft)
+ ;; Insert the newline before removing empty space so that markers
+ ;; get preserved better.
+ (if soft (insert-and-inherit ?\n) (newline 1))
+ (save-excursion (forward-char -1) (delete-horizontal-space))
+ (delete-horizontal-space)
+
+ (if (and fill-prefix (not adaptive-fill-mode))
+ ;; Blindly trust a non-adaptive fill-prefix.
+ (progn
+ (indent-to-left-margin)
+ (insert-before-markers-and-inherit fill-prefix))
+
+ (cond
+ ;; If there's an adaptive prefix, use it unless we're inside
+ ;; a comment and the prefix is not a comment starter.
+ (fill-prefix
+ (indent-to-left-margin)
+ (insert-and-inherit fill-prefix))
+ ;; If we're not inside a comment, just try to indent.
+ (t (indent-according-to-mode))))))
+
(defvar normal-auto-fill-function 'do-auto-fill
"The function to use for `auto-fill-function' if Auto Fill mode is turned on.
Some major modes set this.")
@@ -4481,102 +4675,92 @@ it skips the contents of comments that end before point."
(skip-syntax-backward "/\\")
(point))))))
(let* ((oldpos (point))
- blinkpos
- message-log-max ; Don't log messages about paren matching.
- matching-paren
- open-paren-line-string
- old-start
- new-start
- isdollar)
- (save-excursion
- (save-restriction
- ;; Don't search for matching paren within minibuffer prompt.
- (setq old-start (minibuffer-prompt-end))
- (setq new-start
- (if blink-matching-paren-distance
- (max old-start (- (point) blink-matching-paren-distance))
- old-start))
- (narrow-to-region new-start oldpos)
- (condition-case ()
- (let ((parse-sexp-ignore-comments
- (and parse-sexp-ignore-comments
- (not blink-matching-paren-dont-ignore-comments))))
- (setq blinkpos (scan-sexps oldpos -1)))
- (error nil)))
- (and blinkpos
- ;; Not syntax '$'.
- (not (setq isdollar (eq (syntax-class (syntax-after blinkpos)) 8)))
- (setq matching-paren
- (let ((syntax (syntax-after blinkpos)))
- (and (consp syntax)
- (eq (syntax-class syntax) 4)
- (cdr syntax)))))
- (cond
- ((not blinkpos)
- ;; Don't complain when `$' with no blinkpos, because it
- ;; could just be the first one in the buffer.
- (unless (or (eq (syntax-class (syntax-after (1- oldpos))) 8)
- (and blink-matching-paren-distance
- (> new-start old-start))
- ;; When `blink-matching-paren-distance' is non-nil and we
- ;; didn't find a matching paren within that many characters
- ;; don't display a message.
- (message "Unmatched parenthesis"))))
- ;; isdollar is for:
- ;; http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00871.html
- ((not (or isdollar
- (eq matching-paren (char-before oldpos))
- ;; The cdr might hold a new paren-class info rather than
- ;; a matching-char info, in which case the two CDRs
- ;; should match.
- (eq matching-paren (cdr (syntax-after (1- oldpos))))))
- (message "Mismatched parentheses"))
- ((pos-visible-in-window-p blinkpos)
- ;; Matching open within window, temporarily move to blinkpos but only
- ;; if `blink-matching-paren-on-screen' is non-nil.
- (and blink-matching-paren-on-screen
- (not show-paren-mode)
- (save-excursion
- (goto-char blinkpos)
- (sit-for blink-matching-delay))))
- (t
- (save-excursion
- (goto-char blinkpos)
- (setq open-paren-line-string
- ;; Show what precedes the open in its line, if anything.
- (if (save-excursion
- (skip-chars-backward " \t")
- (not (bolp)))
- (buffer-substring (line-beginning-position)
- (1+ blinkpos))
- ;; Show what follows the open in its line, if anything.
- (if (save-excursion
- (forward-char 1)
- (skip-chars-forward " \t")
- (not (eolp)))
- (buffer-substring blinkpos
- (line-end-position))
- ;; Otherwise show the previous nonblank line,
- ;; if there is one.
- (if (save-excursion
- (skip-chars-backward "\n \t")
- (not (bobp)))
- (concat
- (buffer-substring (progn
- (skip-chars-backward "\n \t")
- (line-beginning-position))
- (progn (end-of-line)
- (skip-chars-backward " \t")
- (point)))
- ;; Replace the newline and other whitespace with `...'.
- "..."
- (buffer-substring blinkpos (1+ blinkpos)))
- ;; There is nothing to show except the char itself.
- (buffer-substring blinkpos (1+ blinkpos)))))))
- (message "Matches %s"
- (substring-no-properties open-paren-line-string))))))))
-
-;Turned off because it makes dbx bomb out.
+ (message-log-max nil) ; Don't log messages about paren matching.
+ (atdollar (eq (syntax-class (syntax-after (1- oldpos))) 8))
+ (isdollar)
+ (blinkpos
+ (save-excursion
+ (save-restriction
+ (if blink-matching-paren-distance
+ (narrow-to-region
+ (max (minibuffer-prompt-end) ;(point-min) unless minibuf.
+ (- (point) blink-matching-paren-distance))
+ oldpos))
+ (let ((parse-sexp-ignore-comments
+ (and parse-sexp-ignore-comments
+ (not blink-matching-paren-dont-ignore-comments))))
+ (condition-case ()
+ (scan-sexps oldpos -1)
+ (error nil))))))
+ (matching-paren
+ (and blinkpos
+ ;; Not syntax '$'.
+ (not (setq isdollar
+ (eq (syntax-class (syntax-after blinkpos)) 8)))
+ (let ((syntax (syntax-after blinkpos)))
+ (and (consp syntax)
+ (eq (syntax-class syntax) 4)
+ (cdr syntax))))))
+ (cond
+ ;; isdollar is for:
+ ;; http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg00871.html
+ ((not (or (and isdollar blinkpos)
+ (and atdollar (not blinkpos)) ; see below
+ (eq matching-paren (char-before oldpos))
+ ;; The cdr might hold a new paren-class info rather than
+ ;; a matching-char info, in which case the two CDRs
+ ;; should match.
+ (eq matching-paren (cdr (syntax-after (1- oldpos))))))
+ (message "Mismatched parentheses"))
+ ((not blinkpos)
+ (or blink-matching-paren-distance
+ ;; Don't complain when `$' with no blinkpos, because it
+ ;; could just be the first one typed in the buffer.
+ atdollar
+ (message "Unmatched parenthesis")))
+ ((pos-visible-in-window-p blinkpos)
+ ;; Matching open within window, temporarily move to blinkpos but only
+ ;; if `blink-matching-paren-on-screen' is non-nil.
+ (and blink-matching-paren-on-screen
+ (not show-paren-mode)
+ (save-excursion
+ (goto-char blinkpos)
+ (sit-for blink-matching-delay))))
+ (t
+ (save-excursion
+ (goto-char blinkpos)
+ (let ((open-paren-line-string
+ ;; Show what precedes the open in its line, if anything.
+ (cond
+ ((save-excursion (skip-chars-backward " \t") (not (bolp)))
+ (buffer-substring (line-beginning-position)
+ (1+ blinkpos)))
+ ;; Show what follows the open in its line, if anything.
+ ((save-excursion
+ (forward-char 1)
+ (skip-chars-forward " \t")
+ (not (eolp)))
+ (buffer-substring blinkpos
+ (line-end-position)))
+ ;; Otherwise show the previous nonblank line,
+ ;; if there is one.
+ ((save-excursion (skip-chars-backward "\n \t") (not (bobp)))
+ (concat
+ (buffer-substring (progn
+ (skip-chars-backward "\n \t")
+ (line-beginning-position))
+ (progn (end-of-line)
+ (skip-chars-backward " \t")
+ (point)))
+ ;; Replace the newline and other whitespace with `...'.
+ "..."
+ (buffer-substring blinkpos (1+ blinkpos))))
+ ;; There is nothing to show except the char itself.
+ (t (buffer-substring blinkpos (1+ blinkpos))))))
+ (message "Matches %s"
+ (substring-no-properties open-paren-line-string)))))))))
+
+;; Turned off because it makes dbx bomb out.
(setq blink-paren-function 'blink-matching-open)
;; This executes C-g typed while Emacs is waiting for a command.
@@ -5264,10 +5448,10 @@ PREFIX is the string that represents this modifier in an event type symbol."
;;;; Keypad support.
-;;; Make the keypad keys act like ordinary typing keys. If people add
-;;; bindings for the function key symbols, then those bindings will
-;;; override these, so this shouldn't interfere with any existing
-;;; bindings.
+;; Make the keypad keys act like ordinary typing keys. If people add
+;; bindings for the function key symbols, then those bindings will
+;; override these, so this shouldn't interfere with any existing
+;; bindings.
;; Also tell read-char how to handle these keys.
(mapc
@@ -5393,13 +5577,13 @@ after it has been set up properly in other respects."
(funcall mode)
;; Set up other local variables.
- (mapcar (lambda (v)
- (condition-case () ;in case var is read-only
- (if (symbolp v)
- (makunbound v)
- (set (make-local-variable (car v)) (cdr v)))
- (error nil)))
- lvars)
+ (mapc (lambda (v)
+ (condition-case () ;in case var is read-only
+ (if (symbolp v)
+ (makunbound v)
+ (set (make-local-variable (car v)) (cdr v)))
+ (error nil)))
+ lvars)
;; Run any hooks (typically set up by the major mode
;; for cloning to work properly).
@@ -5461,36 +5645,33 @@ front of the list of recently selected ones."
;;; Handling of Backspace and Delete keys.
-(defcustom normal-erase-is-backspace
- (and (not noninteractive)
- (or (memq system-type '(ms-dos windows-nt))
- (eq window-system 'mac)
- (and (memq window-system '(x))
- (fboundp 'x-backspace-delete-keys-p)
- (x-backspace-delete-keys-p))
- ;; If the terminal Emacs is running on has erase char
- ;; set to ^H, use the Backspace key for deleting
- ;; backward and, and the Delete key for deleting forward.
- (and (null window-system)
- (eq tty-erase-char ?\^H))))
- "If non-nil, Delete key deletes forward and Backspace key deletes backward.
-
-On window systems, the default value of this option is chosen
-according to the keyboard used. If the keyboard has both a Backspace
-key and a Delete key, and both are mapped to their usual meanings, the
-option's default value is set to t, so that Backspace can be used to
-delete backward, and Delete can be used to delete forward.
-
-If not running under a window system, customizing this option accomplishes
-a similar effect by mapping C-h, which is usually generated by the
-Backspace key, to DEL, and by mapping DEL to C-d via
-`keyboard-translate'. The former functionality of C-h is available on
-the F1 key. You should probably not use this setting if you don't
-have both Backspace, Delete and F1 keys.
+(defcustom normal-erase-is-backspace 'maybe
+ "Set the default behavior of the Delete and Backspace keys.
+
+If set to t, Delete key deletes forward and Backspace key deletes
+backward.
+
+If set to nil, both Delete and Backspace keys delete backward.
+
+If set to 'maybe (which is the default), Emacs automatically
+selects a behavior. On window systems, the behavior depends on
+the keyboard used. If the keyboard has both a Backspace key and
+a Delete key, and both are mapped to their usual meanings, the
+option's default value is set to t, so that Backspace can be used
+to delete backward, and Delete can be used to delete forward.
+
+If not running under a window system, customizing this option
+accomplishes a similar effect by mapping C-h, which is usually
+generated by the Backspace key, to DEL, and by mapping DEL to C-d
+via `keyboard-translate'. The former functionality of C-h is
+available on the F1 key. You should probably not use this
+setting if you don't have both Backspace, Delete and F1 keys.
Setting this variable with setq doesn't take effect. Programmatically,
call `normal-erase-is-backspace-mode' (which see) instead."
- :type 'boolean
+ :type '(choice (const :tag "Off" nil)
+ (const :tag "Maybe" maybe)
+ (other :tag "On" t))
:group 'editing-basics
:version "21.1"
:set (lambda (symbol value)
@@ -5500,17 +5681,37 @@ call `normal-erase-is-backspace-mode' (which see) instead."
(normal-erase-is-backspace-mode (or value 0))
(set-default symbol value))))
+(defun normal-erase-is-backspace-setup-frame (&optional frame)
+ "Set up `normal-erase-is-backspace-mode' on FRAME, if necessary."
+ (unless frame (setq frame (selected-frame)))
+ (with-selected-frame frame
+ (unless (terminal-parameter nil 'normal-erase-is-backspace)
+ (normal-erase-is-backspace-mode
+ (if (if (eq normal-erase-is-backspace 'maybe)
+ (and (not noninteractive)
+ (or (memq system-type '(ms-dos windows-nt))
+ (eq window-system 'mac)
+ (and (memq window-system '(x))
+ (fboundp 'x-backspace-delete-keys-p)
+ (x-backspace-delete-keys-p))
+ ;; If the terminal Emacs is running on has erase char
+ ;; set to ^H, use the Backspace key for deleting
+ ;; backward, and the Delete key for deleting forward.
+ (and (null window-system)
+ (eq tty-erase-char ?\^H))))
+ normal-erase-is-backspace)
+ 1 0)))))
(defun normal-erase-is-backspace-mode (&optional arg)
"Toggle the Erase and Delete mode of the Backspace and Delete keys.
With numeric arg, turn the mode on if and only if ARG is positive.
-On window systems, when this mode is on, Delete is mapped to C-d and
-Backspace is mapped to DEL; when this mode is off, both Delete and
-Backspace are mapped to DEL. (The remapping goes via
-`function-key-map', so binding Delete or Backspace in the global or
-local keymap will override that.)
+On window systems, when this mode is on, Delete is mapped to C-d
+and Backspace is mapped to DEL; when this mode is off, both
+Delete and Backspace are mapped to DEL. (The remapping goes via
+`local-function-key-map', so binding Delete or Backspace in the
+global or local keymap will override that.)
In addition, on window systems, the bindings of C-Delete, M-Delete,
C-M-Delete, C-Backspace, M-Backspace, and C-M-Backspace are changed in
@@ -5532,54 +5733,57 @@ have both Backspace, Delete and F1 keys.
See also `normal-erase-is-backspace'."
(interactive "P")
- (setq normal-erase-is-backspace
- (if arg
- (> (prefix-numeric-value arg) 0)
- (not normal-erase-is-backspace)))
-
- (cond ((or (memq window-system '(x w32 mac pc))
- (memq system-type '(ms-dos windows-nt)))
- (let ((bindings
- `(([C-delete] [C-backspace])
- ([M-delete] [M-backspace])
- ([C-M-delete] [C-M-backspace])
- (,esc-map
- [C-delete] [C-backspace])))
- (old-state (lookup-key function-key-map [delete])))
-
- (if normal-erase-is-backspace
+ (let ((enabled (or (and arg (> (prefix-numeric-value arg) 0))
+ (and (not arg)
+ (not (eq 1 (terminal-parameter
+ nil 'normal-erase-is-backspace)))))))
+ (set-terminal-parameter nil 'normal-erase-is-backspace
+ (if enabled 1 0))
+
+ (cond ((or (memq window-system '(x w32 mac pc))
+ (memq system-type '(ms-dos windows-nt)))
+ (let* ((bindings
+ `(([C-delete] [C-backspace])
+ ([M-delete] [M-backspace])
+ ([C-M-delete] [C-M-backspace])
+ (,esc-map
+ [C-delete] [C-backspace])))
+ (old-state (lookup-key local-function-key-map [delete])))
+
+ (if enabled
+ (progn
+ (define-key local-function-key-map [delete] [?\C-d])
+ (define-key local-function-key-map [kp-delete] [?\C-d])
+ (define-key local-function-key-map [backspace] [?\C-?]))
+ (define-key local-function-key-map [delete] [?\C-?])
+ (define-key local-function-key-map [kp-delete] [?\C-?])
+ (define-key local-function-key-map [backspace] [?\C-?]))
+
+ ;; Maybe swap bindings of C-delete and C-backspace, etc.
+ (unless (equal old-state (lookup-key local-function-key-map [delete]))
+ (dolist (binding bindings)
+ (let ((map global-map))
+ (when (keymapp (car binding))
+ (setq map (car binding) binding (cdr binding)))
+ (let* ((key1 (nth 0 binding))
+ (key2 (nth 1 binding))
+ (binding1 (lookup-key map key1))
+ (binding2 (lookup-key map key2)))
+ (define-key map key1 binding2)
+ (define-key map key2 binding1)))))))
+ (t
+ (if enabled
(progn
- (define-key function-key-map [delete] [?\C-d])
- (define-key function-key-map [kp-delete] [?\C-d])
- (define-key function-key-map [backspace] [?\C-?]))
- (define-key function-key-map [delete] [?\C-?])
- (define-key function-key-map [kp-delete] [?\C-?])
- (define-key function-key-map [backspace] [?\C-?]))
-
- ;; Maybe swap bindings of C-delete and C-backspace, etc.
- (unless (equal old-state (lookup-key function-key-map [delete]))
- (dolist (binding bindings)
- (let ((map global-map))
- (when (keymapp (car binding))
- (setq map (car binding) binding (cdr binding)))
- (let* ((key1 (nth 0 binding))
- (key2 (nth 1 binding))
- (binding1 (lookup-key map key1))
- (binding2 (lookup-key map key2)))
- (define-key map key1 binding2)
- (define-key map key2 binding1)))))))
- (t
- (if normal-erase-is-backspace
- (progn
- (keyboard-translate ?\C-h ?\C-?)
- (keyboard-translate ?\C-? ?\C-d))
- (keyboard-translate ?\C-h ?\C-h)
- (keyboard-translate ?\C-? ?\C-?))))
-
- (run-hooks 'normal-erase-is-backspace-hook)
- (if (interactive-p)
- (message "Delete key deletes %s"
- (if normal-erase-is-backspace "forward" "backward"))))
+ (keyboard-translate ?\C-h ?\C-?)
+ (keyboard-translate ?\C-? ?\C-d))
+ (keyboard-translate ?\C-h ?\C-h)
+ (keyboard-translate ?\C-? ?\C-?))))
+
+ (run-hooks 'normal-erase-is-backspace-hook)
+ (if (interactive-p)
+ (message "Delete key deletes %s"
+ (if (terminal-parameter nil 'normal-erase-is-backspace)
+ "forward" "backward")))))
(defvar vis-mode-saved-buffer-invisibility-spec nil
"Saved value of `buffer-invisibility-spec' when Visible mode is on.")
diff --git a/lisp/smerge-mode.el b/lisp/smerge-mode.el
index e3484bb0a48..dcbb97bd79c 100644
--- a/lisp/smerge-mode.el
+++ b/lisp/smerge-mode.el
@@ -79,6 +79,11 @@ Used in `smerge-diff-base-mine' and related functions."
:group 'smerge
:type 'boolean)
+(defcustom smerge-auto-refine t
+ "Automatically highlight changes in detail as the user visits conflicts."
+ :group 'smerge
+ :type 'boolean)
+
(defface smerge-mine
'((((min-colors 88) (background light))
(:foreground "blue1"))
@@ -252,7 +257,9 @@ Can be nil if the style is undecided, or else:
;;;;
;; Define smerge-next and smerge-prev
-(easy-mmode-define-navigation smerge smerge-begin-re "conflict")
+(easy-mmode-define-navigation smerge smerge-begin-re "conflict" nil nil
+ (if smerge-auto-refine
+ (condition-case nil (smerge-refine) (error nil))))
(defconst smerge-match-names ["conflict" "mine" "base" "other"])
@@ -433,6 +440,12 @@ some major modes. Uses `smerge-resolve-function' to do the actual work."
(error "`smerge-batch-resolve' is to be used only with -batch"))
(while command-line-args-left
(let ((file (pop command-line-args-left)))
+ (if (string-match "\\.rej\\'" file)
+ ;; .rej files should never contain diff3 markers, on the other hand,
+ ;; in Arch, .rej files are sometimes used to indicate that the
+ ;; main file has diff3 markers. So you can pass **/*.rej and
+ ;; it will DTRT.
+ (setq file (substring file 0 (match-beginning 0))))
(message "Resolving conflicts in %s..." file)
(when (file-readable-p file)
(with-current-buffer (find-file-noselect file)
@@ -645,86 +658,204 @@ Point is moved to the end of the conflict."
(error nil)))
found))
-(defun smerge-refine-chopup-region (beg end file)
- "Chopup the region into small elements, one per line."
- ;; ediff chops up into words, where the definition of a word is
- ;; customizable. Instead we here keep only one char per line.
- ;; The advantages are that there's nothing to configure, that we get very
- ;; fine results, and that it's trivial to map the line numbers in the
- ;; output of diff back into buffer positions. The disadvantage is that it
- ;; can take more time to compute the diff and that the result is sometimes
- ;; too fine. I'm not too concerned about the slowdown because conflicts
- ;; are usually significantly smaller than the whole file. As for the
- ;; problem of too-fine-refinement, I have found it to be unimportant
- ;; especially when you consider the cases where the fine-grain is just
- ;; what you want.
+;;; Refined change highlighting
+
+(defvar smerge-refine-forward-function 'smerge-refine-forward
+ "Function used to determine an \"atomic\" element.
+You can set it to `forward-char' to get char-level granularity.
+Its behavior has mainly two restrictions:
+- if this function encounters a newline, it's important that it stops right
+ after the newline.
+ This only matters if `smerge-refine-ignore-whitespace' is nil.
+- it needs to be unaffected by changes performed by the `preproc' argument
+ to `smerge-refine-subst'.
+ This only matters if `smerge-refine-weight-hack' is nil.")
+
+(defvar smerge-refine-ignore-whitespace t
+ "If non-nil,Indicate that smerge-refine should try to ignore change in whitespace.")
+
+(defvar smerge-refine-weight-hack t
+ "If non-nil, pass to diff as many lines as there are chars in the region.
+I.e. each atomic element (e.g. word) will be copied as many times (on different
+lines) as it has chars. This has 2 advantages:
+- if `diff' tries to minimize the number *lines* (rather than chars)
+ added/removed, this adjust the weights so that adding/removing long
+ symbols is considered correspondingly more costly.
+- `smerge-refine-forward-function' only needs to be called when chopping up
+ the regions, and `forward-char' can be used afterwards.
+It has the following disadvantages:
+- cannot use `diff -w' because the weighting causes added spaces in a line
+ to be represented as added copies of some line, so `diff -w' can't do the
+ right thing any more.
+- may in degenerate cases take a 1KB input region and turn it into a 1MB
+ file to pass to diff.")
+
+(defun smerge-refine-forward (n)
+ (let ((case-fold-search nil)
+ (re "[[:upper:]]?[[:lower:]]+\\|[[:upper:]]+\\|[[:digit:]]+\\|.\\|\n"))
+ (when (and smerge-refine-ignore-whitespace
+ ;; smerge-refine-weight-hack causes additional spaces to
+ ;; appear as additional lines as well, so even if diff ignore
+ ;; whitespace changes, it'll report added/removed lines :-(
+ (not smerge-refine-weight-hack))
+ (setq re (concat "[ \t]*\\(?:" re "\\)")))
+ (dotimes (i n)
+ (unless (looking-at re) (error "Smerge refine internal error"))
+ (goto-char (match-end 0)))))
+
+(defun smerge-refine-chopup-region (beg end file &optional preproc)
+ "Chopup the region into small elements, one per line.
+Save the result into FILE.
+If non-nil, PREPROC is called with no argument in a buffer that contains
+a copy of the text, just before chopping it up. It can be used to replace
+chars to try and eliminate some spurious differences."
+ ;; We used to chop up char-by-char rather than word-by-word like ediff
+ ;; does. It had the benefit of simplicity and very fine results, but it
+ ;; often suffered from problem that diff would find correlations where
+ ;; there aren't any, so the resulting "change" didn't make much sense.
+ ;; You can still get this behavior by setting
+ ;; `smerge-refine-forward-function' to `forward-char'.
(let ((buf (current-buffer)))
(with-temp-buffer
(insert-buffer-substring buf beg end)
+ (when preproc (goto-char (point-min)) (funcall preproc))
+ (when smerge-refine-ignore-whitespace
+ ;; It doesn't make much of a difference for diff-fine-highlight
+ ;; because we still have the _/+/</>/! prefix anyway. Can still be
+ ;; useful in other circumstances.
+ (subst-char-in-region (point-min) (point-max) ?\n ?\s))
(goto-char (point-min))
(while (not (eobp))
- (forward-char 1)
- (unless (eq (char-before) ?\n) (insert ?\n)))
+ (funcall smerge-refine-forward-function 1)
+ (let ((s (if (prog2 (forward-char -1) (bolp) (forward-char 1))
+ nil
+ (buffer-substring (line-beginning-position) (point)))))
+ ;; We add \n after each char except after \n, so we get
+ ;; one line per text char, where each line contains
+ ;; just one char, except for \n chars which are
+ ;; represented by the empty line.
+ (unless (eq (char-before) ?\n) (insert ?\n))
+ ;; HACK ALERT!!
+ (if smerge-refine-weight-hack
+ (dotimes (i (1- (length s))) (insert s "\n")))))
+ (unless (bolp) (error "Smerge refine internal error"))
(let ((coding-system-for-write 'emacs-mule))
(write-region (point-min) (point-max) file nil 'nomessage)))))
-(defun smerge-refine-highlight-change (buf beg match-num1 match-num2)
- (let* ((startline (string-to-number (match-string match-num1)))
- (ol (make-overlay
- (+ beg startline -1)
- (+ beg (if (match-end match-num2)
- (string-to-number (match-string match-num2))
- startline))
- buf
- 'front-advance nil)))
- (overlay-put ol 'smerge 'refine)
- (overlay-put ol 'evaporate t)
- (overlay-put ol 'face 'smerge-refined-change)))
-
-
-(defun smerge-refine ()
- "Highlight the parts of the conflict that are different."
- (interactive)
- ;; FIXME: make it work with 3-way conflicts.
- (smerge-match-conflict)
- (remove-overlays (match-beginning 0) (match-end 0) 'smerge 'refine)
- (smerge-ensure-match 1)
- (smerge-ensure-match 3)
- (let ((buf (current-buffer))
- ;; Read them before the match-data gets clobbered.
- (beg1 (match-beginning 1)) (end1 (match-end 1))
- (beg2 (match-beginning 3)) (end2 (match-end 3))
- (file1 (make-temp-file "smerge1"))
- (file2 (make-temp-file "smerge2")))
-
+(defun smerge-refine-highlight-change (buf beg match-num1 match-num2 props)
+ (with-current-buffer buf
+ (goto-char beg)
+ (let* ((startline (- (string-to-number match-num1) 1))
+ (beg (progn (funcall (if smerge-refine-weight-hack
+ 'forward-char
+ smerge-refine-forward-function)
+ startline)
+ (point)))
+ (end (progn (funcall (if smerge-refine-weight-hack
+ 'forward-char
+ smerge-refine-forward-function)
+ (if match-num2
+ (- (string-to-number match-num2)
+ startline)
+ 1))
+ (point))))
+ (when smerge-refine-ignore-whitespace
+ (skip-chars-backward " \t\n" beg) (setq end (point))
+ (goto-char beg)
+ (skip-chars-forward " \t\n" end) (setq beg (point)))
+ (when (> end beg)
+ (let ((ol (make-overlay
+ beg end nil
+ ;; Make them tend to shrink rather than spread when editing.
+ 'front-advance nil)))
+ (overlay-put ol 'evaporate t)
+ (dolist (x props) (overlay-put ol (car x) (cdr x)))
+ ol)))))
+
+(defun smerge-refine-subst (beg1 end1 beg2 end2 props &optional preproc)
+ "Show fine differences in the two regions BEG1..END1 and BEG2..END2.
+PROPS is an alist of properties to put (via overlays) on the changes.
+If non-nil, PREPROC is called with no argument in a buffer that contains
+a copy of a region, just before preparing it to for `diff'. It can be used to
+replace chars to try and eliminate some spurious differences."
+ (let* ((buf (current-buffer))
+ (pos (point))
+ (file1 (make-temp-file "diff1"))
+ (file2 (make-temp-file "diff2")))
;; Chop up regions into smaller elements and save into files.
- (smerge-refine-chopup-region beg1 end1 file1)
- (smerge-refine-chopup-region beg2 end2 file2)
+ (smerge-refine-chopup-region beg1 end1 file1 preproc)
+ (smerge-refine-chopup-region beg2 end2 file2 preproc)
;; Call diff on those files.
(unwind-protect
(with-temp-buffer
(let ((coding-system-for-read 'emacs-mule))
- ;; Don't forget -a to make sure diff treats it as a text file
- ;; even if it contains \0 and such.
- (call-process diff-command nil t nil "-a" file1 file2))
+ (call-process diff-command nil t nil
+ (if (and smerge-refine-ignore-whitespace
+ (not smerge-refine-weight-hack))
+ ;; Pass -a so diff treats it as a text file even
+ ;; if it contains \0 and such.
+ ;; Pass -d so as to get the smallest change, but
+ ;; also and more importantly because otherwise it
+ ;; may happen that diff doesn't behave like
+ ;; smerge-refine-weight-hack expects it to.
+ ;; See http://thread.gmane.org/gmane.emacs.devel/82685.
+ "-awd" "-ad")
+ file1 file2))
;; Process diff's output.
(goto-char (point-min))
- (while (not (eobp))
- (if (not (looking-at "\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?\\([acd]\\)\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?$"))
- (error "Unexpected patch hunk header: %s"
- (buffer-substring (point) (line-end-position)))
- (let ((op (char-after (match-beginning 3))))
+ (let ((last1 nil)
+ (last2 nil))
+ (while (not (eobp))
+ (if (not (looking-at "\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?\\([acd]\\)\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?$"))
+ (error "Unexpected patch hunk header: %s"
+ (buffer-substring (point) (line-end-position))))
+ (let ((op (char-after (match-beginning 3)))
+ (m1 (match-string 1))
+ (m2 (match-string 2))
+ (m4 (match-string 4))
+ (m5 (match-string 5)))
(when (memq op '(?d ?c))
- (smerge-refine-highlight-change buf beg1 1 2))
+ (setq last1
+ (smerge-refine-highlight-change buf beg1 m1 m2 props)))
(when (memq op '(?a ?c))
- (smerge-refine-highlight-change buf beg2 4 5)))
+ (setq last2
+ (smerge-refine-highlight-change buf beg2 m4 m5 props))))
(forward-line 1) ;Skip hunk header.
(and (re-search-forward "^[0-9]" nil 'move) ;Skip hunk body.
- (goto-char (match-beginning 0))))))
+ (goto-char (match-beginning 0))))
+ ;; (assert (or (null last1) (< (overlay-start last1) end1)))
+ ;; (assert (or (null last2) (< (overlay-start last2) end2)))
+ (if smerge-refine-weight-hack
+ (progn
+ ;; (assert (or (null last1) (<= (overlay-end last1) end1)))
+ ;; (assert (or (null last2) (<= (overlay-end last2) end2)))
+ )
+ ;; smerge-refine-forward-function when calling in chopup may
+ ;; have stopped because it bumped into EOB whereas in
+ ;; smerge-refine-weight-hack it may go a bit further.
+ (if (and last1 (> (overlay-end last1) end1))
+ (move-overlay last1 (overlay-start last1) end1))
+ (if (and last2 (> (overlay-end last2) end2))
+ (move-overlay last2 (overlay-start last2) end2))
+ )))
+ (goto-char pos)
(delete-file file1)
(delete-file file2))))
+(defun smerge-refine ()
+ "Highlight the parts of the conflict that are different."
+ (interactive)
+ ;; FIXME: make it work with 3-way conflicts.
+ (smerge-match-conflict)
+ (remove-overlays (match-beginning 0) (match-end 0) 'smerge 'refine)
+ (smerge-ensure-match 1)
+ (smerge-ensure-match 3)
+ (smerge-refine-subst (match-beginning 1) (match-end 1)
+ (match-beginning 3) (match-end 3)
+ '((smerge . refine)
+ (face . smerge-refined-change))))
+
(defun smerge-diff (n1 n2)
(smerge-match-conflict)
(smerge-ensure-match n1)
@@ -774,6 +905,7 @@ Point is moved to the end of the conflict."
(defvar ediff-buffer-C)
(defvar ediff-ancestor-buffer)
(defvar ediff-quit-hook)
+(declare-function ediff-cleanup-mess "ediff-util" nil)
;;;###autoload
(defun smerge-ediff (&optional name-mine name-other name-base)
diff --git a/lisp/startup.el b/lisp/startup.el
index ad09ff2e834..366491fe125 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -40,6 +40,19 @@
"Emacs start-up procedure."
:group 'environment)
+(defcustom initial-buffer-choice nil
+ "Buffer to show after starting Emacs.
+If the value is nil and `inhibit-startup-screen' is nil, show the
+startup screen. If the value is string, visit the specified file or
+directory using `find-file'. If t, open the `*scratch*' buffer."
+ :type '(choice
+ (const :tag "Startup screen" nil)
+ (directory :tag "Directory" :value "~/")
+ (file :tag "File" :value "~/file.txt")
+ (const :tag "Lisp scratch buffer" t))
+ :version "23.1"
+ :group 'initialization)
+
(defcustom inhibit-startup-screen nil
"Non-nil inhibits the startup screen.
It also inhibits display of the initial message in the `*scratch*' buffer.
@@ -87,6 +100,12 @@ the remaining command-line args are in the variable `command-line-args-left'.")
(defvar command-line-args-left nil
"List of command-line args not yet processed.")
+(defvaralias 'argv 'command-line-args-left
+ "List of command-line args not yet processed.
+This is a convenience alias, so that one can write \(pop argv\)
+inside of --eval command line arguments in order to access
+following arguments.")
+
(defvar command-line-functions nil ;; lrs 7/31/89
"List of functions to process unrecognized command-line arguments.
Each function should access the dynamically bound variables
@@ -266,9 +285,9 @@ init file is read, in case it sets `mail-host-address'."
(defcustom auto-save-list-file-prefix
(cond ((eq system-type 'ms-dos)
;; MS-DOS cannot have initial dot, and allows only 8.3 names
- "~/_emacs.d/auto-save.list/_s")
+ (concat user-emacs-directory "auto-save.list/_s"))
(t
- "~/.emacs.d/auto-save-list/.saves-"))
+ (concat user-emacs-directory "auto-save-list/.saves-")))
"Prefix for generating `auto-save-list-file-name'.
This is used after reading your `.emacs' file to initialize
`auto-save-list-file-name', by appending Emacs's pid and the system name,
@@ -302,6 +321,14 @@ from being initialized."
Warning Warning!!! Pure space overflow !!!Warning Warning
\(See the node Pure Storage in the Lisp manual for details.)\n")
+(defvar tutorial-directory nil
+ "Directory containing the Emacs TUTORIAL files.")
+
+;; Get correct value in a dumped, installed Emacs.
+(eval-at-startup
+ (setq tutorial-directory (file-name-as-directory
+ (expand-file-name "tutorials" data-directory))))
+
(defun normal-top-level-add-subdirs-to-load-path ()
"Add all subdirectories of current directory to `load-path'.
More precisely, this uses only the subdirectories whose names
@@ -444,36 +471,19 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; for instance due to a dense colormap.
(when (or frame-initial-frame
;; If frame-initial-frame has no meaning, do this anyway.
- (not (and window-system
+ (not (and initial-window-system
(not noninteractive)
- (not (eq window-system 'pc)))))
+ (not (eq initial-window-system 'pc)))))
;; Modify the initial frame based on what .emacs puts into
;; ...-frame-alist.
(if (fboundp 'frame-notice-user-settings)
(frame-notice-user-settings))
+ ;; Set the faces for the initial background mode even if
+ ;; frame-notice-user-settings didn't (such as on a tty).
+ ;; frame-set-background-mode is idempotent, so it won't
+ ;; cause any harm if it's already been done.
(if (fboundp 'frame-set-background-mode)
- ;; Set the faces for the initial background mode even if
- ;; frame-notice-user-settings didn't (such as on a tty).
- ;; frame-set-background-mode is idempotent, so it won't
- ;; cause any harm if it's already been done.
- (let ((frame (selected-frame))
- term)
- (when (and (null window-system)
- ;; Don't override default set by files in lisp/term.
- (null default-frame-background-mode)
- (let ((bg (frame-parameter frame 'background-color)))
- (or (null bg)
- (member bg '(unspecified "unspecified-bg"
- "unspecified-fg")))))
-
- (setq term (getenv "TERM"))
- ;; Some files in lisp/term do a better job with the
- ;; background mode, but we leave this here anyway, in
- ;; case they remove those files.
- (if (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)"
- term)
- (setq default-frame-background-mode 'light)))
- (frame-set-background-mode (selected-frame)))))
+ (frame-set-background-mode (selected-frame))))
;; Now we know the user's default font, so add it to the menu.
(if (fboundp 'font-menu-add-default)
@@ -482,7 +492,25 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(run-hooks 'window-setup-hook))
(or menubar-bindings-done
(if (display-popup-menus-p)
- (precompute-menubar-bindings)))))))
+ (precompute-menubar-bindings)))))
+ ;; Subprocesses of Emacs do not have direct access to the terminal, so
+ ;; unless told otherwise they should only assume a dumb terminal.
+ ;; We are careful to do it late (after term-setup-hook), although the
+ ;; new multi-tty code does not use $TERM any more there anyway.
+ (setenv "TERM" "dumb")
+ ;; Remove DISPLAY from the process-environment as well. This allows
+ ;; `callproc.c' to give it a useful adaptive default which is either
+ ;; the value of the `display' frame-parameter or the DISPLAY value
+ ;; from initial-environment.
+ (let ((display (frame-parameter nil 'display)))
+ ;; Be careful which DISPLAY to remove from process-environment: follow
+ ;; the logic of `callproc.c'.
+ (if (stringp display) (setq display (concat "DISPLAY=" display))
+ (dolist (varval initial-environment)
+ (if (string-match "\\`DISPLAY=" varval)
+ (setq display varval))))
+ (when display
+ (delete display process-environment)))))
;; Precompute the keyboard equivalents in the menu bar items.
(defun precompute-menubar-bindings ()
@@ -514,6 +542,20 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(defvar tool-bar-originally-present nil
"Non-nil if tool-bars are present before user and site init files are read.")
+(defvar handle-args-function-alist '((nil . tty-handle-args))
+ "Functions for processing window-system dependent command-line arguments.
+Window system startup files should add their own function to this
+alist, which should parse the command line arguments. Those
+pertaining to the window system should be processed and removed
+from the returned command line.")
+
+(defvar window-system-initialization-alist '((nil . ignore))
+ "Alist of window-system initialization functions.
+Window-system startup files should add their own initialization
+function to this list. The function should take no arguments,
+and initialize the window system environment to prepare for
+opening the first frame (e.g. open a connection to an X server).")
+
;; Handle the X-like command-line arguments "-fg", "-bg", "-name", etc.
(defun tty-handle-args (args)
(let (rest)
@@ -618,16 +660,22 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(setq eol-mnemonic-dos "(DOS)"
eol-mnemonic-mac "(Mac)")))
- ;; Read window system's init file if using a window system.
+ ;; Make sure window system's init file was loaded in loadup.el if using a window system.
(condition-case error
- (if (and window-system (not noninteractive))
- (load (concat term-file-prefix
- (symbol-name window-system)
- "-win")
- ;; Every window system should have a startup file;
- ;; barf if we can't find it.
- nil t))
- ;; If we can't read it, print the error message and exit.
+ (unless noninteractive
+ (if (and initial-window-system
+ (not (featurep
+ (intern (concat (symbol-name initial-window-system) "-win")))))
+ (error "Unsupported window system `%s'" initial-window-system))
+ ;; Process window-system specific command line parameters.
+ (setq command-line-args
+ (funcall (or (cdr (assq initial-window-system handle-args-function-alist))
+ (error "Unsupported window system `%s'" initial-window-system))
+ command-line-args))
+ ;; Initialize the window system. (Open connection, etc.)
+ (funcall (or (cdr (assq initial-window-system window-system-initialization-alist))
+ (error "Unsupported window system `%s'" initial-window-system))))
+ ;; If there was an error, print the error message and exit.
(error
(princ
(if (eq (car error) 'error)
@@ -643,13 +691,9 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(cdr error) ", "))))
'external-debugging-output)
(terpri 'external-debugging-output)
- (setq window-system nil)
+ (setq initial-window-system nil)
(kill-emacs)))
- ;; Windowed displays do this inside their *-win.el.
- (unless (or (display-graphic-p) noninteractive)
- (setq command-line-args (tty-handle-args command-line-args)))
-
(set-locale-environment nil)
;; Convert preloaded file names in load-history to absolute.
@@ -772,7 +816,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; If frame was created with a menu bar, set menu-bar-mode on.
(unless (or noninteractive
emacs-basic-display
- (and (memq window-system '(x w32))
+ (and (memq initial-window-system '(x w32))
(<= (frame-parameter nil 'menu-bar-lines) 0)))
(menu-bar-mode 1))
@@ -786,7 +830,6 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; Can't do this init in defcustom because the relevant variables
;; are not set.
(custom-reevaluate-setting 'blink-cursor-mode)
- (custom-reevaluate-setting 'normal-erase-is-backspace)
(custom-reevaluate-setting 'tooltip-mode)
(custom-reevaluate-setting 'global-font-lock-mode)
(custom-reevaluate-setting 'mouse-wheel-down-event)
@@ -795,13 +838,15 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(custom-reevaluate-setting 'send-mail-function)
(custom-reevaluate-setting 'focus-follows-mouse)
+ (normal-erase-is-backspace-setup-frame)
+
;; Register default TTY colors for the case the terminal hasn't a
- ;; terminal init file.
- (unless (memq window-system '(x w32 mac))
- ;; We do this regardles of whether the terminal supports colors
- ;; or not, since they can switch that support on or off in
- ;; mid-session by setting the tty-color-mode frame parameter.
- (tty-register-default-colors))
+ ;; terminal init file. We do this regardles of whether the terminal
+ ;; supports colors or not and regardless the current display type,
+ ;; since users can connect to color-capable terminals and also
+ ;; switch color support on or off in mid-session by setting the
+ ;; tty-color-mode frame parameter.
+ (tty-register-default-colors)
;; Record whether the tool-bar is present before the user and site
;; init files are processed. frame-notice-user-settings uses this
@@ -965,11 +1010,9 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(with-current-buffer (window-buffer)
(deactivate-mark)))
- ;; If the user has a file of abbrevs, read it.
- ;; FIXME: after the 22.0 release this should be changed so
- ;; that it does not read the abbrev file when -batch is used
- ;; on the command line.
- (when (and (file-exists-p abbrev-file-name)
+ ;; If the user has a file of abbrevs, read it (unless -batch).
+ (when (and (not noninteractive)
+ (file-exists-p abbrev-file-name)
(file-readable-p abbrev-file-name))
(quietly-read-abbrev-file abbrev-file-name))
@@ -990,11 +1033,11 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; buffers (probably *scratch*, *Messages*, *Minibuff-0*).
;; Arguably this should only be done if they're free of
;; multibyte characters.
- (mapcar (lambda (buffer)
- (with-current-buffer buffer
- (if enable-multibyte-characters
- (set-buffer-multibyte nil))))
- (buffer-list))
+ (mapc (lambda (buffer)
+ (with-current-buffer buffer
+ (if enable-multibyte-characters
+ (set-buffer-multibyte nil))))
+ (buffer-list))
;; Also re-set the language environment in case it was
;; originally done before unibyte was set and is sensitive to
;; unibyte (display table, terminal coding system &c).
@@ -1071,31 +1114,8 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; Load library for our terminal type.
;; User init file can set term-file-prefix to nil to prevent this.
(unless (or noninteractive
- window-system
- (null term-file-prefix))
- (let* ((TERM (getenv "TERM"))
- (term TERM)
- hyphend)
- (while (and term
- (not (load (concat term-file-prefix term) t t)))
- ;; Strip off last hyphen and what follows, then try again
- (setq term
- (if (setq hyphend (string-match "[-_][^-_]+\\'" term))
- (substring term 0 hyphend)
- nil)))
- (setq term TERM)
- ;; The terminal file has been loaded, now call the terminal specific
- ;; initialization function.
- (while term
- (let ((term-init-func (intern-soft (concat "terminal-init-" term))))
- (if (not (fboundp term-init-func))
- ;; Strip off last hyphen and what follows, then try again
- (setq term
- (if (setq hyphend (string-match "[-_][^-_]+\\'" term))
- (substring term 0 hyphend)
- nil))
- (setq term nil)
- (funcall term-init-func))))))
+ initial-window-system)
+ (tty-run-terminal-initialization (selected-frame)))
;; Update the out-of-memory error message based on user's key bindings
;; for save-some-buffers.
@@ -1163,7 +1183,7 @@ regardless of the value of this variable."
en))
(title (with-temp-buffer
(insert-file-contents
- (expand-file-name tut data-directory)
+ (expand-file-name tut tutorial-directory)
nil 0 256)
(search-forward ".")
(buffer-substring (point-min) (1- (point))))))
@@ -1221,6 +1241,17 @@ Each element in the list should be a list of strings or pairs
(lambda () emacs-copyright)
"\n\n"
:face variable-pitch
+ :link ("Authors"
+ (lambda (button)
+ (view-file (expand-file-name "AUTHORS" data-directory))
+ (goto-char (point-min))))
+ "\tMany people have contributed code included in GNU Emacs\n"
+ :link ("Contributing"
+ (lambda (button)
+ (view-file (expand-file-name "CONTRIBUTE" data-directory))
+ (goto-char (point-min))))
+ "\tHow to contribute improvements to Emacs\n"
+ "\n"
:link ("GNU and Freedom" (lambda (button) (describe-project)))
"\tWhy we developed GNU Emacs, and the GNU operating system\n"
:link ("Absence of Warranty" (lambda (button) (describe-no-warranty)))
@@ -1244,7 +1275,7 @@ Each element in the list should be a list of strings or pairs
en))
(title (with-temp-buffer
(insert-file-contents
- (expand-file-name tut data-directory)
+ (expand-file-name tut tutorial-directory)
nil 0 256)
(search-forward ".")
(buffer-substring (point-min) (1- (point))))))
@@ -1671,7 +1702,7 @@ To quit a partially entered command, type Control-g.\n")
;; use precomputed string to save lots of time.
(if (and (eq (key-binding "\C-h") 'help-command)
(eq (key-binding "\C-xu") 'advertised-undo)
- (eq (key-binding "\C-x\C-c") 'save-buffers-kill-emacs)
+ (eq (key-binding "\C-x\C-c") 'save-buffers-kill-terminal)
(eq (key-binding "\C-ht") 'help-with-tutorial)
(eq (key-binding "\C-hi") 'info)
(eq (key-binding "\C-hr") 'info-emacs-manual)
@@ -1726,7 +1757,7 @@ Get help\t %s
'action (lambda (button) (view-order-manuals))
'follow-link t)
(insert (substitute-command-keys
- "\t \\[view-order-manuals]\tExit Emacs\t \\[save-buffers-kill-emacs]")))
+ "\t \\[view-order-manuals]\tExit Emacs\t \\[save-buffers-kill-terminal]")))
;; Say how to use the menu bar with the keyboard.
(insert "\n")
@@ -1812,6 +1843,22 @@ Type \\[describe-distribution] for information on "))
(insert "To follow a link, click Mouse-1 on it, or move to it and type RET.\n\n")
+ (insert-button "Authors"
+ 'action
+ (lambda (button)
+ (view-file (expand-file-name "AUTHORS" data-directory))
+ (goto-char (point-min)))
+ 'follow-link t)
+ (insert "\t\tMany people have contributed code included in GNU Emacs\n")
+
+ (insert-button "Contributing"
+ 'action
+ (lambda (button)
+ (view-file (expand-file-name "CONTRIBUTE" data-directory))
+ (goto-char (point-min)))
+ 'follow-link t)
+ (insert "\tHow to contribute improvements to Emacs\n\n")
+
(insert-button "GNU and Freedom"
'action (lambda (button) (describe-project))
'follow-link t)
@@ -2097,7 +2144,7 @@ A fancy display is used on graphic displays, normal otherwise."
(progn
(if (string-match "\\`-" argi)
(error "Unknown option `%s'" argi))
- (unless window-system
+ (unless initial-window-system
(setq inhibit-startup-screen t))
(setq file-count (1+ file-count))
(let ((file
@@ -2121,7 +2168,14 @@ A fancy display is used on graphic displays, normal otherwise."
;; abort later.
(unless (frame-live-p (selected-frame)) (kill-emacs nil))))))
+ (when initial-buffer-choice
+ (cond ((eq initial-buffer-choice t)
+ (switch-to-buffer (get-buffer-create "*scratch*")))
+ ((stringp initial-buffer-choice)
+ (find-file initial-buffer-choice))))
+
(if (or inhibit-startup-screen
+ initial-buffer-choice
noninteractive
emacs-quick-startup)
diff --git a/lisp/strokes.el b/lisp/strokes.el
index 8f6d57b10a0..d4fcdb66f61 100644
--- a/lisp/strokes.el
+++ b/lisp/strokes.el
@@ -1745,11 +1745,11 @@ Store XPM in buffer BUFNAME if supplied \(default is ` *strokes-xpm*'\)"
;; strokes-decode-buffer does a save-excursion.
(forward-char)))
-(defun strokes-unload-hook ()
+(defun strokes-unload-function ()
+ "Unload the Strokes library."
(strokes-mode -1)
- (remove-hook 'kill-emacs-query-functions 'strokes-prompt-user-save-strokes))
-
-(add-hook 'strokes-unload-hook 'strokes-unload-hook)
+ ;; continue standard unloading
+ nil)
(run-hooks 'strokes-load-hook)
(provide 'strokes)
diff --git a/lisp/subr.el b/lisp/subr.el
index dbf42f9a2ed..de36d0b9035 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -510,6 +510,7 @@ Don't call this function; it is for internal use only."
(if (integerp b) (< a b)
t)
(if (integerp b) t
+ ;; string< also accepts symbols.
(string< a b))))))
(dolist (p list)
(funcall function (car p) (cdr p))))
@@ -722,7 +723,9 @@ even when EVENT actually has modifiers."
(if (listp type)
(setq type (car type)))
(if (symbolp type)
- (cdr (get type 'event-symbol-elements))
+ ;; Don't read event-symbol-elements directly since we're not
+ ;; sure the symbol has already been parsed.
+ (cdr (internal-event-symbol-parse-modifiers type))
(let ((list nil)
(char (logand type (lognot (logior ?\M-\^@ ?\C-\^@ ?\S-\^@
?\H-\^@ ?\s-\^@ ?\A-\^@)))))
@@ -1218,7 +1221,8 @@ if it is empty or a duplicate."
Execution is delayed if `delay-mode-hooks' is non-nil.
If `delay-mode-hooks' is nil, run `after-change-major-mode-hook'
after running the mode hooks.
-Major mode functions should use this."
+Major mode functions should use this instead of `run-hooks' when running their
+FOO-mode-hook."
(if delay-mode-hooks
;; Delaying case.
(dolist (hook hooks)
@@ -1535,6 +1539,23 @@ FILE should be the name of a library, with no directory name."
;;;; Process stuff.
+(defun process-lines (program &rest args)
+ "Execute PROGRAM with ARGS, returning its output as a list of lines.
+Signal an error if the program returns with a non-zero exit status."
+ (with-temp-buffer
+ (let ((status (apply 'call-process program nil (current-buffer) nil args)))
+ (unless (eq status 0)
+ (error "%s exited with status %s" program status))
+ (goto-char (point-min))
+ (let (lines)
+ (while (not (eobp))
+ (setq lines (cons (buffer-substring-no-properties
+ (line-beginning-position)
+ (line-end-position))
+ lines))
+ (forward-line 1))
+ (nreverse lines)))))
+
;; open-network-stream is a wrapper around make-network-process.
(when (featurep 'make-network-process)
@@ -1626,7 +1647,7 @@ any other non-digit terminates the character code and is then used as input."))
;; or C-q C-x might not return immediately since ESC or C-x might be
;; bound to some prefix in function-key-map or key-translation-map.
(setq translated char)
- (let ((translation (lookup-key function-key-map (vector char))))
+ (let ((translation (lookup-key local-function-key-map (vector char))))
(if (arrayp translation)
(setq translated (aref translation 0))))
(cond ((null translated))
@@ -2040,6 +2061,15 @@ On other systems, this variable is normally always nil.")
(put 'cl-assertion-failed 'error-conditions '(error))
(put 'cl-assertion-failed 'error-message "Assertion failed")
+(defconst user-emacs-directory
+ (if (eq system-type 'ms-dos)
+ ;; MS-DOS cannot have initial dot.
+ "~/_emacs.d/"
+ "~/.emacs.d/")
+ "Directory beneath which additional per-user Emacs-specific files are placed.
+Various programs in Emacs store information in this directory.
+Note that this should end with a directory separator.")
+
;;;; Misc. useful functions.
@@ -2088,6 +2118,8 @@ a system-dependent default device name is used."
(play-sound-internal sound)
(error "This Emacs binary lacks sound support")))
+(declare-function w32-shell-dos-semantics "w32-fns" nil)
+
(defun shell-quote-argument (argument)
"Quote an argument for passing as argument to an inferior shell."
(if (or (eq system-type 'ms-dos)
@@ -2298,6 +2330,15 @@ Wildcards and redirection are handled as usual in the shell.
(start-process name buffer shell-file-name shell-command-switch
(mapconcat 'identity args " ")))))
+(defun start-file-process-shell-command (name buffer &rest args)
+ "Start a program in a subprocess. Return the process object for it.
+Similar to `start-process-shell-command', but calls `start-file-process'."
+ (start-file-process
+ name buffer
+ (if (file-remote-p default-directory) "/bin/sh" shell-file-name)
+ (if (file-remote-p default-directory) "-c" shell-command-switch)
+ (mapconcat 'identity args " ")))
+
(defun call-process-shell-command (command &optional infile buffer display
&rest args)
"Execute the shell command COMMAND synchronously in separate process.
@@ -2329,6 +2370,16 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again."
infile buffer display
shell-command-switch
(mapconcat 'identity (cons command args) " ")))))
+
+(defun process-file-shell-command (command &optional infile buffer display
+ &rest args)
+ "Process files synchronously in a separate process.
+Similar to `call-process-shell-command', but calls `process-file'."
+ (process-file
+ (if (file-remote-p default-directory) "/bin/sh" shell-file-name)
+ infile buffer display
+ (if (file-remote-p default-directory) "-c" shell-command-switch)
+ (mapconcat 'identity (cons command args) " ")))
;;;; Lisp macros to do various things temporarily.
@@ -2377,6 +2428,23 @@ See also `with-temp-buffer'."
(if (window-live-p save-selected-window-window)
(select-window save-selected-window-window 'norecord))))))
+(defmacro with-selected-frame (frame &rest body)
+ "Execute the forms in BODY with FRAME as the selected frame.
+The value returned is the value of the last form in BODY.
+See also `with-temp-buffer'."
+ (declare (indent 1) (debug t))
+ (let ((old-frame (make-symbol "old-frame"))
+ (old-buffer (make-symbol "old-buffer")))
+ `(let ((,old-frame (selected-frame))
+ (,old-buffer (current-buffer)))
+ (unwind-protect
+ (progn (select-frame ,frame)
+ ,@body)
+ (if (frame-live-p ,old-frame)
+ (select-frame ,old-frame))
+ (if (buffer-live-p ,old-buffer)
+ (set-buffer ,old-buffer))))))
+
(defmacro with-temp-file (file &rest body)
"Create a new buffer, evaluate BODY there, and write the buffer to FILE.
The value returned is the value of the last form in BODY.
@@ -2474,6 +2542,29 @@ If BODY finishes, `while-no-input' returns whatever value BODY produced."
(or (input-pending-p)
,@body))))))
+(defmacro condition-case-no-debug (var bodyform &rest handlers)
+ "Like `condition-case' except that it does not catch anything when debugging.
+More specifically if `debug-on-error' is set, then it does not catch any signal."
+ (declare (debug condition-case) (indent 2))
+ (let ((bodysym (make-symbol "body")))
+ `(let ((,bodysym (lambda () ,bodyform)))
+ (if debug-on-error
+ (funcall ,bodysym)
+ (condition-case ,var
+ (funcall ,bodysym)
+ ,@handlers)))))
+
+(defmacro with-demoted-errors (&rest body)
+ "Run BODY and demote any errors to simple messages.
+If `debug-on-error' is non-nil, run BODY without catching its errors.
+This is to be used around code which is not expected to signal an error
+but which should be robust in the unexpected case that an error is signalled."
+ (declare (debug t) (indent 0))
+ (let ((err (make-symbol "err")))
+ `(condition-case-no-debug ,err
+ (progn ,@body)
+ (error (message "Error: %s" ,err) nil))))
+
(defmacro combine-after-change-calls (&rest body)
"Execute BODY, but don't call the after-change functions till the end.
If BODY makes changes in the buffer, they are recorded
@@ -2639,6 +2730,24 @@ STRING should be given if the last search was by `string-match' on STRING."
(buffer-substring-no-properties (match-beginning num)
(match-end num)))))
+
+(defun match-substitute-replacement (replacement
+ &optional fixedcase literal string subexp)
+ "Return REPLACEMENT as it will be inserted by `replace-match'.
+In other words, all back-references in the form `\\&' and `\\N'
+are substituted with actual strings matched by the last search.
+Optional FIXEDCASE, LITERAL, STRING and SUBEXP have the same
+meaning as for `replace-match'."
+ (let ((match (match-string 0 string)))
+ (save-match-data
+ (set-match-data (mapcar (lambda (x)
+ (if (numberp x)
+ (- x (match-beginning 0))
+ x))
+ (match-data t)))
+ (replace-match replacement fixedcase literal match subexp))))
+
+
(defun looking-back (regexp &optional limit greedy)
"Return non-nil if text before point matches regular expression REGEXP.
Like `looking-at' except matches before point, and is slower.
@@ -2668,6 +2777,18 @@ of a match for REGEXP."
(looking-at (concat "\\(?:" regexp "\\)\\'")))))
(not (null pos))))
+(defsubst looking-at-p (regexp)
+ "\
+Same as `looking-at' except this function does not change the match data."
+ (let ((inhibit-changing-match-data t))
+ (looking-at regexp)))
+
+(defsubst string-match-p (regexp string &optional start)
+ "\
+Same as `string-match' except this function does not change the match data."
+ (let ((inhibit-changing-match-data t))
+ (string-match regexp string start)))
+
(defun subregexp-context-p (regexp pos &optional start)
"Return non-nil if POS is in a normal subregexp context in REGEXP.
A subregexp context is one where a sub-regexp can appear.
diff --git a/lisp/t-mouse.el b/lisp/t-mouse.el
index 99e42fe288b..e88067b7fe5 100644
--- a/lisp/t-mouse.el
+++ b/lisp/t-mouse.el
@@ -1,7 +1,7 @@
;;; t-mouse.el --- mouse support within the text terminal
-;; Authors: Alessandro Rubini and Ian T Zimmerman
-;; Maintainer: Nick Roberts <nickrob@gnu.org>
+;; Author: Nick Roberts <nickrob@gnu.org>
+;; Maintainer: FSF
;; Keywords: mouse gpm linux
;; Copyright (C) 1994, 1995, 1998, 2006, 2007 Free Software Foundation, Inc.
@@ -25,285 +25,46 @@
;;; Commentary:
-;; This package provides access to mouse event as reported by the
-;; gpm-Linux package. It uses the program "mev" to get mouse events.
-;; It tries to reproduce the functionality offered by Emacs under X.
+;; This package provides access to mouse event as reported by the gpm-Linux
+;; package. It tries to reproduce the functionality offered by Emacs under X.
;; The "gpm" server runs under Linux, so this package is rather
;; Linux-dependent.
-;; Modified by Nick Roberts for Emacs 22. In particular, the mode-line is
-;; now position sensitive.
-
-(defvar t-mouse-process nil
- "Embeds the process which passes mouse events to Emacs.
-It is used by the program t-mouse.")
-
-(defvar t-mouse-filter-accumulator ""
- "Accumulates input from the mouse reporting process.")
-
-(defvar t-mouse-debug-buffer nil
- "Events normally posted to command queue are printed here in debug mode.
-See `t-mouse-start-debug'.")
-
-(defvar t-mouse-current-xy '(0 . 0)
- "Stores the last mouse position t-mouse has been told about.")
-
-(defvar t-mouse-drag-start nil
- "Whenever a drag starts in a special part of a window
-\(not the text), the `translated' starting coordinates including the
-window and part involved are saved here. This is necessary lest they
-get re-translated when the button goes up, at which time window
-configuration may have changed.")
-
-(defvar t-mouse-prev-set-selection-function 'x-set-selection)
-(defvar t-mouse-prev-get-selection-function 'x-get-selection)
-
-(defvar t-mouse-swap-alt-keys nil
- "When set, Emacs will handle mouse events with the right Alt
-\(a.k.a. Alt-Ger) modifier, not with the regular left Alt modifier.
-Useful for people who play strange games with their keyboard tables.")
-
-(defvar t-mouse-fix-21 nil
- "Enable brain-dead chords for 2 button mice.")
+;; The file, t-mouse.el was originally written by Alessandro Rubini and Ian T
+;; Zimmerman, and Emacs communicated with gpm through a client program called
+;; mev. Now the interface with gpm is directly through a Unix socket, so this
+;; file is reduced to a single minor mode macro call.
+;;
;;; Code:
-;; get the number of the current virtual console
-
-(defun t-mouse-tty ()
- "Return number of virtual terminal Emacs is running on, as a string.
-For example, \"2\" for /dev/tty2."
- (with-temp-buffer
- (call-process "ps" nil t nil "h" (format "%s" (emacs-pid)))
- (goto-char (point-min))
- (if (or
- ;; Many versions of "ps", all different....
- (re-search-forward " +tty\\(.?[0-9a-f]\\)" nil t)
- (re-search-forward "p \\([0-9a-f]\\)" nil t)
- (re-search-forward "v0\\([0-9a-f]\\)" nil t)
- (re-search-forward "[0-9]+ +\\([0-9]+\\)" nil t)
- (re-search-forward "[\\t ]*[0-9]+[\\t ]+\\([0-9]+\\)" nil t)
- (re-search-forward " +vc/\\(.?[0-9a-f]\\)" nil t)
- (re-search-forward " +pts/\\(.?[0-9a-f]\\)" nil t))
- (buffer-substring (match-beginning 1) (match-end 1)))))
-
-
-;; due to a horrible kludge in Emacs' keymap handler
-;; (read_key_sequence) mouse clicks on funny parts of windows generate
-;; TWO events, the first being a dummy of the sort '(mode-line).
-;; That's why Per Abrahamsen's code in xt-mouse.el doesn't work for
-;; the modeline, for instance.
-
-;; now get this: the Emacs C code that generates these fake events
-;; depends on certain things done by the very lowest level input
-;; handlers; namely the symbols for the events (for instance
-;; 'C-S-double-mouse-2) must have an 'event-kind property, set to
-;; 'mouse-click. Since events from unread-command-events do not pass
-;; through the low level handlers, they don't get this property unless
-;; I set it myself. I imagine this has caused innumerable attempts by
-;; hackers to do things similar to t-mouse to lose.
-
-;; The next page of code is devoted to fixing this ugly problem.
-
-;; WOW! a fully general powerset generator
-;; (C) Ian Zimmerman Mon Mar 23 12:00:16 PST 1998 :-)
-(defun t-mouse-powerset (l)
- (if (null l) '(nil)
- (let ((l1 (t-mouse-powerset (cdr l)))
- (first (nth 0 l)))
- (append
- (mapcar (function (lambda (l) (cons first l))) l1) l1))))
-
-;; and a slightly less general cartesian product
-(defun t-mouse-cartesian (l1 l2)
- (if (null l1) l2
- (append (mapcar (function (lambda (x) (append (nth 0 l1) x))) l2)
- (t-mouse-cartesian (cdr l1) l2))))
-
-(let* ((modifier-sets (t-mouse-powerset '(control meta shift)))
- (typed-sets (t-mouse-cartesian '((down) (drag))
- '((mouse-1) (mouse-2) (mouse-3))))
- (multipled-sets (t-mouse-cartesian '((double) (triple)) typed-sets))
- (all-sets (t-mouse-cartesian modifier-sets multipled-sets)))
- (while all-sets
- (let ((event-sym (event-convert-list (nth 0 all-sets))))
- (if (not (get event-sym 'event-kind))
- (put event-sym 'event-kind 'mouse-click)))
- (setq all-sets (cdr all-sets))))
-
-(defun t-mouse-make-event-element (x-dot-y-avec-time)
- (let* ((x-dot-y (nth 0 x-dot-y-avec-time))
- (time (nth 1 x-dot-y-avec-time))
- (x (car x-dot-y))
- (y (cdr x-dot-y))
- (w (window-at x y))
- (ltrb (window-edges w))
- (left (nth 0 ltrb))
- (top (nth 1 ltrb))
- (event (if w
- (posn-at-x-y (- x left) (- y top) w t)
- (append (list nil 'menu-bar)
- (nthcdr 2 (posn-at-x-y x y))))))
- (setcar (nthcdr 3 event) time)
- event))
-
-;;; This fun is partly Copyright (C) 1994 Per Abrahamsen <abraham@iesd.auc.dk>
-(defun t-mouse-make-event ()
- "Make a Lisp style event from the contents of mouse input accumulator.
-Also trim the accumulator by all the data used to build the event."
- (let (ob (ob-pos (condition-case nil
- (progn
- ;; this test is just needed for Fedora Core 3
- (if (string-match "STILL RUNNING_1\n"
- t-mouse-filter-accumulator)
- (setq t-mouse-filter-accumulator
- (substring
- t-mouse-filter-accumulator (match-end 0))))
- (read-from-string t-mouse-filter-accumulator))
- (error nil))))
- ;; this test is just needed for Fedora Core 3
- (if (or (eq (car ob-pos) 'STILL) (eq (car ob-pos) '***) (not ob-pos))
- nil
- (setq ob (car ob-pos))
- (if (string-match "mev:$" (prin1-to-string ob))
- (error "Can't open mouse connection"))
- (setq t-mouse-filter-accumulator
- (substring t-mouse-filter-accumulator (cdr ob-pos)))
-
- ;;now the real work
-
- (let ((event-type (nth 0 ob))
- (current-xy-avec-time (nth 1 ob))
- (type-switch (length ob)))
- (if t-mouse-fix-21
- (let
- ;;Acquire the event's symbol's name.
- ((event-name-string (symbol-name event-type))
- end-of-root-event-name
- new-event-name-string)
-
- (if (string-match "-\\(21\\|\\12\\)$" event-name-string)
-
- ;;Transform the name to what it should have been.
- (progn
- (setq end-of-root-event-name (match-beginning 0))
- (setq new-event-name-string
- (concat (substring
- event-name-string 0
- end-of-root-event-name) "-3"))
-
- ;;Change the event to the symbol that corresponds to the
- ;;name we made. The proper symbol already exists.
- (setq event-type
- (intern new-event-name-string))))))
-
- ;;store current position for mouse-position
-
- (setq t-mouse-current-xy (nth 0 current-xy-avec-time))
-
- ;;events have many types but fortunately they differ in length
-
- (cond
- ((= type-switch 4) ;must be drag
- (let ((count (nth 2 ob))
- (start-element
- (or t-mouse-drag-start
- (t-mouse-make-event-element (nth 3 ob))))
- (end-element
- (t-mouse-make-event-element current-xy-avec-time)))
- (setq t-mouse-drag-start nil)
- (list event-type start-element end-element count)))
- ((= type-switch 3) ;down or up
- (let ((count (nth 2 ob))
- (element
- (t-mouse-make-event-element current-xy-avec-time)))
- (if (and (not t-mouse-drag-start)
- (symbolp (nth 1 element)))
- ;; OUCH! GOTCHA! emacs uses setc[ad]r on these!
- (setq t-mouse-drag-start (copy-sequence element))
- (setq t-mouse-drag-start nil))
- (list event-type element count)))
- ((= type-switch 2) ;movement
- (list (if (eq 'vertical-scroll-bar
- (nth 1 t-mouse-drag-start)) 'scroll-bar-movement
- 'mouse-movement)
- (t-mouse-make-event-element current-xy-avec-time))))))))
-
-(defun t-mouse-process-filter (proc string)
- (setq t-mouse-filter-accumulator
- (concat t-mouse-filter-accumulator string))
- (let ((event (t-mouse-make-event)))
- (while event
- (if (or track-mouse
- (not (eq 'mouse-movement (event-basic-type event))))
- (setq unread-command-events
- (nconc unread-command-events (list event))))
- (if t-mouse-debug-buffer
- (print unread-command-events t-mouse-debug-buffer))
- (setq event (t-mouse-make-event)))))
-
-(defun t-mouse-mouse-position-function (pos)
- "Return the t-mouse-position unless running with a window system.
-The (secret) scrollbar interface is not implemented yet."
- (setcdr pos t-mouse-current-xy)
- pos)
-
-;; It should be possible to just send SIGTSTP to the inferior with
-;; stop-process. That doesn't work; mev receives the signal fine but
-;; is not really stopped: instead it returns from
-;; kill(getpid(), SIGTSTP) immediately. I don't understand what's up
-;; itz Tue Mar 24 14:27:38 PST 1998.
-
-(add-hook 'suspend-hook
- (function (lambda ()
- (and t-mouse-process
- ;(stop-process t-mouse-process)
- (process-send-string
- t-mouse-process "push -enone -dall -Mnone\n")))))
-
-(add-hook 'suspend-resume-hook
- (function (lambda ()
- (and t-mouse-process
- ;(continue-process t-mouse-process)
- (process-send-string t-mouse-process "pop\n")))))
-
;;;###autoload
-(define-minor-mode t-mouse-mode
- "Toggle t-mouse mode to use the mouse in Linux consoles.
-With prefix arg, turn t-mouse mode on if arg is positive, otherwise turn it
-off.
-
-This allows the use of the mouse when operating on a Linux console, in the
-same way as you can use the mouse under X11.
-It requires the `mev' program, part of the `gpm' utilities."
- nil " Mouse" nil :global t
- (if t-mouse-mode
- ;; Turn it on
- (unless window-system
- ;; Starts getting a stream of mouse events from an asynchronous process.
- ;; Only works if Emacs is running on a virtual terminal without a window system.
- (progn
- (setq mouse-position-function #'t-mouse-mouse-position-function)
- (let ((tty (t-mouse-tty))
- (process-connection-type t))
- (if (not (stringp tty))
- (error "Cannot find a virtual terminal"))
- (setq t-mouse-process
- (start-process "t-mouse" nil
- "mev" "-i" "-E" "-C" tty
- (if t-mouse-swap-alt-keys
- "-M-leftAlt" "-M-rightAlt")
- "-e-move"
- "-dall" "-d-hard"
- "-f")))
- (setq t-mouse-filter-accumulator "")
- (set-process-filter t-mouse-process 't-mouse-process-filter)
- (set-process-query-on-exit-flag t-mouse-process nil)))
- ;; Turn it off
- (setq mouse-position-function nil)
- (delete-process t-mouse-process)
- (setq t-mouse-process nil)))
+(define-obsolete-function-alias 't-mouse-mode 'gpm-mouse-mode "23.1")
+;;;###autoload
+(define-minor-mode gpm-mouse-mode
+ "Toggle gpm-mouse mode to use the mouse in GNU/Linux consoles.
+With prefix arg, turn gpm-mouse mode on if arg is positive,
+otherwise turn it off.
+
+This allows the use of the mouse when operating on a GNU/Linux console,
+in the same way as you can use the mouse under X11.
+It relies on the `gpm' daemon being activated."
+ :global t :group 'mouse
+ (let ((activated nil))
+ (unwind-protect
+ (progn
+ (unless (fboundp 'gpm-mouse-start)
+ (error "Emacs must be built with Gpm to use this mode"))
+ (when gpm-mouse-mode
+ (gpm-mouse-start)
+ (setq activated t)))
+ ;; If the user asked to turn it off do that.
+ ;; If something failed to turn it on, try to turn it off as well,
+ ;; just in case.
+ (when (and (fboundp 'gpm-mouse-stop) (not activated))
+ (setq gpm-mouse-mode nil)
+ (gpm-mouse-stop)))))
(provide 't-mouse)
diff --git a/lisp/talk.el b/lisp/talk.el
index 8af1577ac37..a46eadc745c 100644
--- a/lisp/talk.el
+++ b/lisp/talk.el
@@ -46,17 +46,44 @@ Each element has the form (DISPLAY FRAME BUFFER).")
;; Add the new buffers to all talk frames.
(talk-update-buffers))
-(defun talk-add-display (display)
- (let* ((elt (assoc display talk-display-alist))
- (name (concat "*talk-" display "*"))
- buffer frame)
- (if (not (and elt (frame-live-p (setq frame (nth 1 elt)))))
- (setq frame (make-frame-on-display display (list (cons 'name name)))))
+;;;###autoload
+(defun talk ()
+ "Connect to the Emacs talk group from the current X display or tty frame."
+ (interactive)
+ (let ((type (frame-live-p (selected-frame)))
+ (display (frame-terminal (selected-frame))))
+ (cond
+ ((eq type t)
+ (talk-add-display (selected-frame)))
+ ((eq type 'x)
+ (talk-add-display (frame-terminal (selected-frame))))
+ (t
+ (error "Unknown frame type"))))
+ (talk-update-buffers))
+
+(defun talk-add-display (frame)
+ (let* ((display (if (frame-live-p frame)
+ (frame-terminal frame)
+ frame))
+ (elt (assoc display talk-display-alist))
+ (name (concat "*talk-" (terminal-name display) "*"))
+ buffer)
+ (unless (frame-live-p frame)
+ (setq frame (make-frame-on-display display (list (cons 'name name)))))
+ (if (and elt (frame-live-p (nth 1 elt)))
+ (setq frame (nth 1 elt)))
(if (not (and elt (buffer-name (get-buffer (setq buffer (nth 2 elt))))))
(setq buffer (get-buffer-create name)))
+ (add-to-list 'delete-frame-functions 'talk-handle-delete-frame)
(setq talk-display-alist
(cons (list display frame buffer) (delq elt talk-display-alist)))))
+(defun talk-handle-delete-frame (frame)
+ (dolist (d talk-display-alist)
+ (when (eq (nth 1 d) frame)
+ (setq talk-display-alist (delq d talk-display-alist))
+ (talk-update-buffers))))
+
(defun talk-disconnect ()
"Disconnect this display from the Emacs talk group."
(interactive)
diff --git a/lisp/tar-mode.el b/lisp/tar-mode.el
index 77b62a19289..80e642d6666 100644
--- a/lisp/tar-mode.el
+++ b/lisp/tar-mode.el
@@ -750,9 +750,7 @@ appear on disk when you save the tar-file's buffer."
;; that the file's contents' encoding and
;; EOL format are auto-detected.
(let ((file-name-handler-alist
- (if (featurep 'dos-w32)
- '(("" . tar-file-name-handler))
- file-name-handler-alist)))
+ '(("" . tar-file-name-handler))))
(car (find-operation-coding-system
'insert-file-contents
(cons name (current-buffer)) t)))))
@@ -1212,7 +1210,7 @@ to make your changes permanent."
;;
(let ((position (- (length tar-parse-info) (length head))))
(goto-char (point-min))
- (next-line position)
+ (forward-line position)
(beginning-of-line)
(let ((p (point))
after
diff --git a/lisp/tempo.el b/lisp/tempo.el
index 261dac71818..383dcd40d24 100644
--- a/lisp/tempo.el
+++ b/lisp/tempo.el
@@ -315,9 +315,9 @@ mode, ON-REGION is ignored and assumed true if the region is active."
(goto-char tempo-region-start))
(save-excursion
(tempo-insert-mark (point-marker))
- (mapcar (function (lambda (elt)
- (tempo-insert elt on-region)))
- (symbol-value template))
+ (mapc (function (lambda (elt)
+ (tempo-insert elt on-region)))
+ (symbol-value template))
(tempo-insert-mark (point-marker)))
(tempo-forward-mark))
(tempo-forget-insertions)
@@ -460,10 +460,10 @@ never prompted."
"Tries all the user-defined element handlers in `tempo-user-elements'."
;; Sigh... I need (some list)
(catch 'found
- (mapcar (function (lambda (handler)
- (let ((result (funcall handler element)))
- (if result (throw 'found result)))))
- tempo-user-elements)
+ (mapc (function (lambda (handler)
+ (let ((result (funcall handler element)))
+ (if result (throw 'found result)))))
+ tempo-user-elements)
(throw 'found nil)))
;;;
@@ -556,7 +556,7 @@ and insert the results."
"Jump to the next mark in `tempo-forward-mark-list'."
(interactive)
(let ((next-mark (catch 'found
- (mapcar
+ (mapc
(function
(lambda (mark)
(if (< (point) mark)
@@ -575,7 +575,7 @@ and insert the results."
(interactive)
(let ((prev-mark (catch 'found
(let (last)
- (mapcar
+ (mapc
(function
(lambda (mark)
(if (<= (point) mark)
diff --git a/lisp/term.el b/lisp/term.el
index 370f643225b..523d20670e6 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -407,8 +407,7 @@
(defgroup term nil
"General command interpreter in a window."
- :group 'processes
- :group 'unix)
+ :group 'processes)
;;; Buffer Local Variables:
@@ -3723,12 +3722,12 @@ all pending output has been dealt with."))
(defun term-erase-in-display (kind)
"Erases (that is blanks out) part of the window.
If KIND is 0, erase from (point) to (point-max);
-if KIND is 1, erase from home to point; else erase from home to point-max.
-Should only be called when point is at the start of a screen line."
+if KIND is 1, erase from home to point; else erase from home to point-max."
(term-handle-deferred-scroll)
(cond ((eq term-terminal-parameter 0)
- (delete-region (point) (point-max))
- (term-unwrap-line))
+ (let ((need-unwrap (bolp)))
+ (delete-region (point) (point-max))
+ (when need-unwrap (term-unwrap-line))))
((let ((row (term-current-row))
(col (term-horizontal-column))
(start-region term-home-marker)
diff --git a/lisp/term/AT386.el b/lisp/term/AT386.el
index 8adb94c07ca..748807f026f 100644
--- a/lisp/term/AT386.el
+++ b/lisp/term/AT386.el
@@ -29,34 +29,35 @@
;;; Code:
-(if (boundp 'AT386-keypad-map)
- nil
- ;; The terminal initialization should already have set up some keys
- (setq AT386-keypad-map (lookup-key function-key-map "\e["))
- (if (not (keymapp AT386-keypad-map))
- (error "What? Your AT386 termcap/terminfo has no keycaps in it"))
-
- ;; Equivalents of these are set up automatically by termcap/terminfo
- ;; (define-key AT386-keypad-map "A" [up])
- ;; (define-key AT386-keypad-map "B" [down])
- ;; (define-key AT386-keypad-map "C" [right])
- ;; (define-key AT386-keypad-map "D" [left])
-
- ;; These would be set up by terminfo, but not termcap
- (define-key AT386-keypad-map "H" [home])
- (define-key AT386-keypad-map "Y" [end])
- (define-key AT386-keypad-map "U" [next]) ;; PgDn
- (define-key AT386-keypad-map "V" [prior]) ;; PgUp
- (define-key AT386-keypad-map "@" [insert]) ;; Ins key
-
- ;; These are not normally set up by either
- (define-key AT386-keypad-map "G" [kp-5]) ;; Unlabeled center key
- (define-key AT386-keypad-map "S" [kp-subtract])
- (define-key AT386-keypad-map "T" [kp-add])
-
- ;; Arrange for the ALT key to be equivalent to ESC
- (define-key function-key-map "\eN" [27]) ; ALT map
- )
-
-;;; arch-tag: abec1b03-582f-49f8-b8cb-e2fd52ea4bd7
+(defun terminal-init-AT386 ()
+ "Terminal initialization function for AT386."
+ (let ((AT386-keypad-map (lookup-key input-decode-map "\e[")))
+ ;; The terminal initialization should already have set up some keys
+ (if (not (keymapp AT386-keypad-map))
+ (error "What? Your AT386 termcap/terminfo has no keycaps in it"))
+
+ ;; Equivalents of these are set up automatically by termcap/terminfo
+ ;; (define-key AT386-keypad-map "A" [up])
+ ;; (define-key AT386-keypad-map "B" [down])
+ ;; (define-key AT386-keypad-map "C" [right])
+ ;; (define-key AT386-keypad-map "D" [left])
+
+ ;; These would be set up by terminfo, but not termcap
+ (define-key AT386-keypad-map "H" [home])
+ (define-key AT386-keypad-map "Y" [end])
+ (define-key AT386-keypad-map "U" [next]) ;; PgDn
+ (define-key AT386-keypad-map "V" [prior]) ;; PgUp
+ (define-key AT386-keypad-map "@" [insert]) ;; Ins key
+
+ ;; These are not normally set up by either
+ (define-key AT386-keypad-map "G" [kp-5]) ;; Unlabeled center key
+ (define-key AT386-keypad-map "S" [kp-subtract])
+ (define-key AT386-keypad-map "T" [kp-add])
+
+ ;; Arrange for the ALT key to be equivalent to ESC
+ (define-key input-decode-map "\eN" [ALT])
+ (define-key local-function-key-map [ALT] [27])
+ ))
+
+;; arch-tag: abec1b03-582f-49f8-b8cb-e2fd52ea4bd7
;;; AT386.el ends here
diff --git a/lisp/term/README b/lisp/term/README
index e1cfbf15901..e5fb2da83ad 100644
--- a/lisp/term/README
+++ b/lisp/term/README
@@ -6,19 +6,43 @@ See the end of the file for license conditions.
This directory contains files of elisp that customize Emacs for certain
terminal types.
- When Emacs starts, it checks the TERM environment variable to see what type
-of terminal the user is running on, checks for an elisp file named
-"term/${TERM}.el", and if one exists, loads it. If that doesn't yield a file
-that exists, the last hyphen and what follows it is stripped. If that doesn't
-yield a file that exists, the previous hyphen is stripped, and so on until all
-hyphens are gone. For example, if the terminal type is `aaa-48-foo', Emacs
-will try first `term/aaa-48-foo.el', then `term/aaa-48.el' and finally
-`term/aaa.el'. Each terminal specific file should contain a function
-named terminal-init-TERMINALNAME (eg terminal-init-aaa-48 for
-term/aaa-48.el) that Emacs will call in order to initialize the
-terminal. The terminal files should not contain any top level forms
-that are executed when the file is loaded, all the initialization
-actions are performed by the terminal-init-TERMINALNAME functions.
+ When Emacs opens a new terminal, it checks the TERM environment variable to
+see what type of terminal the user is running on, searches for an elisp file
+named "term/${TERM}.el", and if one exists, loads it. If Emacs finds no
+suitable file, then it strips the last hyphen and what follows it from TERM,
+and tries again. If that still doesn't yield a file, then the previous hyphen
+is stripped, and so on until all hyphens are gone. For example, if the
+terminal type is `aaa-48-foo', Emacs will try first `term/aaa-48-foo.el', then
+`term/aaa-48.el' and finally `term/aaa.el'. Emacs stops searching at the
+first file found, and will not load more than one file for any terminal. Note
+that it is not an error if Emacs is unable to find a terminal initialization
+file; in that case, it will simply proceed with the next step without loading
+any files.
+
+ Once the file has been loaded (or the search failed), Emacs tries to call a
+function named `terminal-init-TERMINALNAME' (eg `terminal-init-aaa-48' for the
+`aaa-48' terminal) in order to initialize the terminal. Once again, if the
+function is not found, Emacs strips the last component of the name and tries
+again using the shorter name. This search is independent of the previous file
+search, so that you can have terminal initialization functions for a family of
+terminals collected in a single file named after the family name, and users
+may put terminal initialization functions directly in their .emacs files.
+
+ Note that an individual terminal file is loaded only once in an Emacs
+session; if the same terminal type is opened again, Emacs will simply call the
+initialization function without reloading the file. Therefore, all the actual
+initialization actions should be collected in terminal-init-* functions; the
+file should not contain any top-level form that is not a function or variable
+declaration. Simply loading the file should not have any side effect.
+
+ Similarly, the terminal initialization function is called only once on any
+given terminal, when the first frame is created on it. The function is not
+called for subsequent frames on the same terminal. Therefore, terminal-init-*
+functions should only modify terminal-local variables (such as
+`local-function-key-map') and terminal parameters. For example, it is not
+correct to modify frame parameters, since the modifications will only be
+applied for the first frame opened on the terminal.
+
When writing terminal packages, there are some things it is good to keep in
mind.
diff --git a/lisp/term/apollo.el b/lisp/term/apollo.el
index 749ff85a0a6..c47de919b0c 100644
--- a/lisp/term/apollo.el
+++ b/lisp/term/apollo.el
@@ -1,7 +1,7 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-apollo ()
- "Terminal initialization function for apollo."
- (load "term/vt100" nil t))
+ "Terminal initialization function for apollo."
+ (tty-run-terminal-initialization (selected-frame) "vt100"))
;;; arch-tag: c72f446f-e6b7-4749-90a4-bd68632adacf
;;; apollo.el ends here
diff --git a/lisp/term/bobcat.el b/lisp/term/bobcat.el
index 82401f7bf71..974476f6798 100644
--- a/lisp/term/bobcat.el
+++ b/lisp/term/bobcat.el
@@ -1,7 +1,7 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-bobcat ()
- "Terminal initialization function for bobcat."
+ "Terminal initialization function for bobcat."
;; HP terminals usually encourage using ^H as the rubout character
(keyboard-translate ?\177 ?\^h)
(keyboard-translate ?\^h ?\177))
diff --git a/lisp/term/cygwin.el b/lisp/term/cygwin.el
index 3bdd5d3aa05..df857ba6625 100644
--- a/lisp/term/cygwin.el
+++ b/lisp/term/cygwin.el
@@ -3,7 +3,7 @@
;;; The Cygwin terminal can't really display underlines.
(defun terminal-init-cygwin ()
- "Terminal initialization function for cygwin."
+ "Terminal initialization function for cygwin."
(tty-no-underline))
;; arch-tag: ca81ce67-3c41-4883-a29b-4c3d64a21191
diff --git a/lisp/term/internal.el b/lisp/term/internal.el
index 2db2cd93d4d..fb13f48d6ba 100644
--- a/lisp/term/internal.el
+++ b/lisp/term/internal.el
@@ -29,20 +29,20 @@
;; ---------------------------------------------------------------------------
;; keyboard setup -- that's simple!
(set-input-mode nil nil 0)
-(define-key function-key-map [backspace] "\177") ; Normal behaviour for BS
-(define-key function-key-map [delete] "\C-d") ; ... and Delete
-(define-key function-key-map [tab] [?\t])
-(define-key function-key-map [linefeed] [?\n])
-(define-key function-key-map [clear] [11])
-(define-key function-key-map [return] [13])
-(define-key function-key-map [escape] [?\e])
-(define-key function-key-map [M-backspace] [?\M-\d])
-(define-key function-key-map [M-delete] [?\M-d])
-(define-key function-key-map [M-tab] [?\M-\t])
-(define-key function-key-map [M-linefeed] [?\M-\n])
-(define-key function-key-map [M-clear] [?\M-\013])
-(define-key function-key-map [M-return] [?\M-\015])
-(define-key function-key-map [M-escape] [?\M-\e])
+(define-key local-function-key-map [backspace] "\177") ; Normal behaviour for BS
+(define-key local-function-key-map [delete] "\C-d") ; ... and Delete
+(define-key local-function-key-map [tab] [?\t])
+(define-key local-function-key-map [linefeed] [?\n])
+(define-key local-function-key-map [clear] [11])
+(define-key local-function-key-map [return] [13])
+(define-key local-function-key-map [escape] [?\e])
+(define-key local-function-key-map [M-backspace] [?\M-\d])
+(define-key local-function-key-map [M-delete] [?\M-d])
+(define-key local-function-key-map [M-tab] [?\M-\t])
+(define-key local-function-key-map [M-linefeed] [?\M-\n])
+(define-key local-function-key-map [M-clear] [?\M-\013])
+(define-key local-function-key-map [M-return] [?\M-\015])
+(define-key local-function-key-map [M-escape] [?\M-\e]))
(put 'backspace 'ascii-character 127)
(put 'delete 'ascii-character 127)
(put 'tab 'ascii-character ?\t)
diff --git a/lisp/term/iris-ansi.el b/lisp/term/iris-ansi.el
index 2f193007051..d7e12095022 100644
--- a/lisp/term/iris-ansi.el
+++ b/lisp/term/iris-ansi.el
@@ -26,306 +26,309 @@
;;; Code:
-(defun iris-ansi-initialize-terminal ()
- "Terminal initialization function for iris-ansi."
- (define-key function-key-map "\e[120q" [S-escape])
- (define-key function-key-map "\e[121q" [C-escape])
+(defvar iris-function-map
+ (let ((map (make-sparse-keymap)))
- (define-key function-key-map "\e[001q" [f1])
- (define-key function-key-map "\e[013q" [S-f1])
- (define-key function-key-map "\e[025q" [C-f1])
+ (define-key map "\e[120q" [S-escape])
+ (define-key map "\e[121q" [C-escape])
+ (define-key map "\e[001q" [f1])
+ (define-key map "\e[013q" [S-f1])
+ (define-key map "\e[025q" [C-f1])
- (define-key function-key-map "\e[002q" [f2])
- (define-key function-key-map "\e[014q" [S-f2])
- (define-key function-key-map "\e[026q" [C-f2])
- (define-key function-key-map "\e[038q" [M-f2])
- (define-key function-key-map "\e[003q" [f3])
- (define-key function-key-map "\e[015q" [S-f3])
- (define-key function-key-map "\e[027q" [C-f3])
+ (define-key map "\e[002q" [f2])
+ (define-key map "\e[014q" [S-f2])
+ (define-key map "\e[026q" [C-f2])
+ (define-key map "\e[038q" [M-f2])
+ (define-key map "\e[003q" [f3])
+ (define-key map "\e[015q" [S-f3])
+ (define-key map "\e[027q" [C-f3])
- (define-key function-key-map "\e[004q" [f4])
- (define-key function-key-map "\e[016q" [S-f4])
- (define-key function-key-map "\e[028q" [C-f4])
+ (define-key map "\e[004q" [f4])
+ (define-key map "\e[016q" [S-f4])
+ (define-key map "\e[028q" [C-f4])
- (define-key function-key-map "\e[005q" [f5])
- (define-key function-key-map "\e[017q" [S-f5])
- (define-key function-key-map "\e[029q" [C-f5])
+ (define-key map "\e[005q" [f5])
+ (define-key map "\e[017q" [S-f5])
+ (define-key map "\e[029q" [C-f5])
- (define-key function-key-map "\e[006q" [f6])
- (define-key function-key-map "\e[018q" [S-f6])
- (define-key function-key-map "\e[030q" [C-f6])
+ (define-key map "\e[006q" [f6])
+ (define-key map "\e[018q" [S-f6])
+ (define-key map "\e[030q" [C-f6])
- (define-key function-key-map "\e[007q" [f7])
- (define-key function-key-map "\e[019q" [S-f7])
- (define-key function-key-map "\e[031q" [C-f7])
+ (define-key map "\e[007q" [f7])
+ (define-key map "\e[019q" [S-f7])
+ (define-key map "\e[031q" [C-f7])
- (define-key function-key-map "\e[008q" [f8])
- (define-key function-key-map "\e[020q" [S-f8])
- (define-key function-key-map "\e[032q" [C-f8])
+ (define-key map "\e[008q" [f8])
+ (define-key map "\e[020q" [S-f8])
+ (define-key map "\e[032q" [C-f8])
- (define-key function-key-map "\e[009q" [f9])
- (define-key function-key-map "\e[021q" [S-f9])
- (define-key function-key-map "\e[033q" [C-f9])
+ (define-key map "\e[009q" [f9])
+ (define-key map "\e[021q" [S-f9])
+ (define-key map "\e[033q" [C-f9])
- (define-key function-key-map "\e[010q" [f10])
- (define-key function-key-map "\e[022q" [S-f10])
- (define-key function-key-map "\e[034q" [C-f10])
+ (define-key map "\e[010q" [f10])
+ (define-key map "\e[022q" [S-f10])
+ (define-key map "\e[034q" [C-f10])
- (define-key function-key-map "\e[011q" [f11])
- (define-key function-key-map "\e[023q" [S-f11])
- (define-key function-key-map "\e[035q" [C-f11])
- (define-key function-key-map "\e[047q" [M-f11])
- (define-key function-key-map "\e[012q" [f12])
- (define-key function-key-map "\e[024q" [S-f12])
- (define-key function-key-map "\e[036q" [C-f12])
- (define-key function-key-map "\e[048q" [M-f12])
+ (define-key map "\e[011q" [f11])
+ (define-key map "\e[023q" [S-f11])
+ (define-key map "\e[035q" [C-f11])
+ (define-key map "\e[047q" [M-f11])
+ (define-key map "\e[012q" [f12])
+ (define-key map "\e[024q" [S-f12])
+ (define-key map "\e[036q" [C-f12])
+ (define-key map "\e[048q" [M-f12])
- (define-key function-key-map "\e[057q" [?\C-`])
- (define-key function-key-map "\e[115q" [?\M-`])
- (define-key function-key-map "\e[049q" [?\C-1])
- (define-key function-key-map "\e[058q" [?\M-1])
+ (define-key map "\e[057q" [?\C-`])
+ (define-key map "\e[115q" [?\M-`])
+ (define-key map "\e[049q" [?\C-1])
+ (define-key map "\e[058q" [?\M-1])
- (define-key function-key-map "\e[059q" [?\M-2])
- (define-key function-key-map "\e[050q" [?\C-3])
- (define-key function-key-map "\e[060q" [?\M-3])
+ (define-key map "\e[059q" [?\M-2])
- (define-key function-key-map "\e[051q" [?\C-4])
- (define-key function-key-map "\e[061q" [?\M-4])
+ (define-key map "\e[050q" [?\C-3])
+ (define-key map "\e[060q" [?\M-3])
- (define-key function-key-map "\e[052q" [?\C-5])
- (define-key function-key-map "\e[062q" [?\M-5])
+ (define-key map "\e[051q" [?\C-4])
+ (define-key map "\e[061q" [?\M-4])
+ (define-key map "\e[052q" [?\C-5])
+ (define-key map "\e[062q" [?\M-5])
- (define-key function-key-map "\e[063q" [?\M-6])
- (define-key function-key-map "\e[053q" [?\C-7])
- (define-key function-key-map "\e[064q" [?\M-7])
+ (define-key map "\e[063q" [?\M-6])
- (define-key function-key-map "\e[054q" [?\C-8])
- (define-key function-key-map "\e[065q" [?\M-8])
+ (define-key map "\e[053q" [?\C-7])
+ (define-key map "\e[064q" [?\M-7])
- (define-key function-key-map "\e[055q" [?\C-9])
- (define-key function-key-map "\e[066q" [?\M-9])
+ (define-key map "\e[054q" [?\C-8])
+ (define-key map "\e[065q" [?\M-8])
- (define-key function-key-map "\e[056q" [?\C-0])
- (define-key function-key-map "\e[067q" [?\M-0])
+ (define-key map "\e[055q" [?\C-9])
+ (define-key map "\e[066q" [?\M-9])
- (define-key function-key-map "\e[068q" [?\M--])
+ (define-key map "\e[056q" [?\C-0])
+ (define-key map "\e[067q" [?\M-0])
- (define-key function-key-map "\e[069q" [?\C-=])
- (define-key function-key-map "\e[070q" [?\M-=])
+ (define-key map "\e[068q" [?\M--])
- ;; I don't know what to do with those.
- ;;(define-key function-key-map "^H" [<del>])
- ;;(define-key function-key-map "^H" [S-<del>])
- ;;(define-key function-key-map "\177" [C-<del>])
- ;;(define-key function-key-map "\e[071q" [M-<del>])
+ (define-key map "\e[069q" [?\C-=])
+ (define-key map "\e[070q" [?\M-=])
- (define-key function-key-map "\e[Z" [?\S-\t])
- (define-key function-key-map "\e[072q" [?\C-\t])
- ;; This only works if you remove the M-TAB keybing from the system.4Dwmrc
- ;; our your ~/.4Dwmrc, if you use the 4Dwm window manager.
- (define-key function-key-map "\e[073q" [?\M-\t])
+ ;; I don't know what to do with those.
+ ;;(define-key map "^H" [<del>])
+ ;;(define-key map "^H" [S-<del>])
+ ;;(define-key map "\177" [C-<del>])
+ ;;(define-key map "\e[071q" [M-<del>])
- (define-key function-key-map "\e[074q" [?\M-q])
+ (define-key map "\e[Z" [?\S-\t])
+ (define-key map "\e[072q" [?\C-\t])
+ ;; This only works if you remove the M-TAB keybing from the system.4Dwmrc
+ ;; our your ~/.4Dwmrc, if you use the 4Dwm window manager.
+ (define-key map "\e[073q" [?\M-\t])
- (define-key function-key-map "\e[075q" [?\M-w])
+ (define-key map "\e[074q" [?\M-q])
- (define-key function-key-map "\e[076q" [?\M-e])
+ (define-key map "\e[075q" [?\M-w])
- (define-key function-key-map "\e[077q" [?\M-r])
+ (define-key map "\e[076q" [?\M-e])
- (define-key function-key-map "\e[078q" [?\M-t])
+ (define-key map "\e[077q" [?\M-r])
- (define-key function-key-map "\e[079q" [?\M-y])
+ (define-key map "\e[078q" [?\M-t])
- (define-key function-key-map "\e[080q" [?\M-u])
+ (define-key map "\e[079q" [?\M-y])
- (define-key function-key-map "\e[081q" [?\M-i])
+ (define-key map "\e[080q" [?\M-u])
- (define-key function-key-map "\e[082q" [?\M-o])
+ (define-key map "\e[081q" [?\M-i])
- (define-key function-key-map "\e[083q" [?\M-p])
+ (define-key map "\e[082q" [?\M-o])
- (define-key function-key-map "\e[084q" [?\M-\[])
+ (define-key map "\e[083q" [?\M-p])
- (define-key function-key-map "\e[085q" [?\M-\]])
+ (define-key map "\e[084q" [?\M-\[])
- (define-key function-key-map "\e[086q" [?\M-\\])
+ (define-key map "\e[085q" [?\M-\]])
- (define-key function-key-map "\e[087q" [?\M-a])
+ (define-key map "\e[086q" [?\M-\\])
- (define-key function-key-map "\e[088q" [?\M-s])
+ (define-key map "\e[087q" [?\M-a])
- (define-key function-key-map "\e[089q" [?\M-d])
+ (define-key map "\e[088q" [?\M-s])
- (define-key function-key-map "\e[090q" [?\M-f])
+ (define-key map "\e[089q" [?\M-d])
- (define-key function-key-map "\e[091q" [?\M-g])
+ (define-key map "\e[090q" [?\M-f])
- (define-key function-key-map "\e[092q" [?\M-h])
+ (define-key map "\e[091q" [?\M-g])
- (define-key function-key-map "\e[093q" [?\M-j])
+ (define-key map "\e[092q" [?\M-h])
- (define-key function-key-map "\e[094q" [?\M-k])
+ (define-key map "\e[093q" [?\M-j])
- (define-key function-key-map "\e[095q" [?\M-l])
+ (define-key map "\e[094q" [?\M-k])
- (define-key function-key-map "\e[096q" [?\C-\;])
- (define-key function-key-map "\e[097q" [?\M-:]) ;; we are cheating
- ;; here, this is
- ;; realy M-;, but
- ;; M-: generates the
- ;; same string and
- ;; is more usefull.
+ (define-key map "\e[095q" [?\M-l])
- (define-key function-key-map "\e[098q" [?\C-'])
- (define-key function-key-map "\e[099q" [?\M-'])
+ (define-key map "\e[096q" [?\C-\;])
+ ;; We are cheating here, this is really M-;, but M-: generates the same
+ ;; string and is more useful.
+ (define-key map "\e[097q" [?\M-:])
- (define-key function-key-map "\e[100q" [?\M-\n])
+ (define-key map "\e[098q" [?\C-'])
+ (define-key map "\e[099q" [?\M-'])
- (define-key function-key-map "\e[101q" [?\M-z])
+ (define-key map "\e[100q" [?\M-\n])
- (define-key function-key-map "\e[102q" [?\M-x])
+ (define-key map "\e[101q" [?\M-z])
- (define-key function-key-map "\e[103q" [?\M-c])
+ (define-key map "\e[102q" [?\M-x])
- (define-key function-key-map "\e[104q" [?\M-v])
+ (define-key map "\e[103q" [?\M-c])
- (define-key function-key-map "\e[105q" [?\M-b])
+ (define-key map "\e[104q" [?\M-v])
- (define-key function-key-map "\e[106q" [M-n])
+ (define-key map "\e[105q" [?\M-b])
- (define-key function-key-map "\e[107q" [M-m])
+ (define-key map "\e[106q" [M-n])
- (define-key function-key-map "\e[108q" [?\C-,])
- (define-key function-key-map "\e[109q" [?\M-,])
+ (define-key map "\e[107q" [M-m])
- (define-key function-key-map "\e[110q" [?\C-.])
- (define-key function-key-map "\e[111q" [?\M-.])
+ (define-key map "\e[108q" [?\C-,])
+ (define-key map "\e[109q" [?\M-,])
- (define-key function-key-map "\e[112q" [?\C-/])
- (define-key function-key-map "\e[113q" [?\M-/])
+ (define-key map "\e[110q" [?\C-.])
+ (define-key map "\e[111q" [?\M-.])
- (define-key function-key-map "\e[139q" [insert])
- (define-key function-key-map "\e[139q" [S-insert])
- (define-key function-key-map "\e[140q" [C-insert])
- (define-key function-key-map "\e[141q" [M-insert])
+ (define-key map "\e[112q" [?\C-/])
+ (define-key map "\e[113q" [?\M-/])
- (define-key function-key-map "\e[H" [home])
- (define-key function-key-map "\e[143q" [S-home])
- (define-key function-key-map "\e[144q" [C-home])
+ (define-key map "\e[139q" [insert])
+ (define-key map "\e[139q" [S-insert])
+ (define-key map "\e[140q" [C-insert])
+ (define-key map "\e[141q" [M-insert])
+ (define-key map "\e[H" [home])
+ (define-key map "\e[143q" [S-home])
+ (define-key map "\e[144q" [C-home])
- (define-key function-key-map "\e[150q" [prior])
- (define-key function-key-map "\e[151q" [S-prior]) ;; those don't
- ;; seem to
- ;; generate
- ;; anything
- (define-key function-key-map "\e[152q" [C-prior])
+ (define-key map "\e[150q" [prior])
+ (define-key map "\e[151q" [S-prior]) ;Those don't seem to generate anything.
+ (define-key map "\e[152q" [C-prior])
- ;; (define-key function-key-map "^?" [delete])
- (define-key function-key-map "\e[P" [S-delete])
- (define-key function-key-map "\e[142q" [C-delete])
- (define-key function-key-map "\e[M" [M-delete])
- (define-key function-key-map "\e[146q" [end])
- (define-key function-key-map "\e[147q" [S-end]) ;; those don't seem
- ;; to generate
- ;; anything
- (define-key function-key-map "\e[148q" [C-end])
+ ;; (define-key map "^?" [delete]) ?? something else seems to take care of this.
+ (define-key map "\e[P" [S-delete])
+ (define-key map "\e[142q" [C-delete])
+ (define-key map "\e[M" [M-delete])
- (define-key function-key-map "\e[154q" [next])
- (define-key function-key-map "\e[155q" [S-next])
- (define-key function-key-map "\e[156q" [C-next])
+ (define-key map "\e[146q" [end])
+ (define-key map "\e[147q" [S-end]) ; Those don't seem to generate anything.
+ (define-key map "\e[148q" [C-end])
+ (define-key map "\e[154q" [next])
+ (define-key map "\e[155q" [S-next])
+ (define-key map "\e[156q" [C-next])
- (define-key function-key-map "\e[161q" [S-up])
- (define-key function-key-map "\e[162q" [C-up])
- (define-key function-key-map "\e[163q" [M-up])
- (define-key function-key-map "\e[158q" [S-left])
- (define-key function-key-map "\e[159q" [C-left])
- (define-key function-key-map "\e[160q" [M-left])
+ (define-key map "\e[161q" [S-up])
+ (define-key map "\e[162q" [C-up])
+ (define-key map "\e[163q" [M-up])
- (define-key function-key-map "\e[164q" [S-down])
- (define-key function-key-map "\e[165q" [C-down])
- (define-key function-key-map "\e[166q" [M-down])
+ (define-key map "\e[158q" [S-left])
+ (define-key map "\e[159q" [C-left])
+ (define-key map "\e[160q" [M-left])
- (define-key function-key-map "\e[167q" [S-right])
- (define-key function-key-map "\e[168q" [C-right])
- (define-key function-key-map "\e[169q" [M-right])
+ (define-key map "\e[164q" [S-down])
+ (define-key map "\e[165q" [C-down])
+ (define-key map "\e[166q" [M-down])
- ;; Keypad functions, most of those are untested.
- (define-key function-key-map "\e[179q" [?\C-/])
- (define-key function-key-map "\e[180q" [?\M-/])
+ (define-key map "\e[167q" [S-right])
+ (define-key map "\e[168q" [C-right])
+ (define-key map "\e[169q" [M-right])
- (define-key function-key-map "\e[187q" [?\C-*])
- (define-key function-key-map "\e[188q" [?\M-*])
+ ;; Keypad functions, most of those are untested.
+ (define-key map "\e[179q" [?\C-/])
+ (define-key map "\e[180q" [?\M-/])
- (define-key function-key-map "\e[198q" [?\C--])
- (define-key function-key-map "\e[199q" [?\M--])
+ (define-key map "\e[187q" [?\C-*])
+ (define-key map "\e[188q" [?\M-*])
- ;; Something else takes care of home, up, prior, down, left, right, next
- ;;(define-key function-key-map "\e[H" [home])
- (define-key function-key-map "\e[172q" [C-home])
+ (define-key map "\e[198q" [?\C--])
+ (define-key map "\e[199q" [?\M--])
- ;;(define-key function-key-map "\e[A" [up])
- (define-key function-key-map "\e[182q" [C-up])
+ ;; Something else takes care of home, up, prior, down, left, right, next
+ ;;(define-key map "\e[H" [home])
+ (define-key map "\e[172q" [C-home])
+ ;;(define-key map "\e[A" [up])
+ (define-key map "\e[182q" [C-up])
- ;;(define-key function-key-map "\e[150q" [prior])
- (define-key function-key-map "\e[190q" [C-prior])
+ ;;(define-key map "\e[150q" [prior])
+ (define-key map "\e[190q" [C-prior])
- (define-key function-key-map "\e[200q" [?\C-+])
- (define-key function-key-map "\e[201q" [?\M-+])
- ;;(define-key function-key-map "\e[D" [left])
- (define-key function-key-map "\e[174q" [C-left])
+ (define-key map "\e[200q" [?\C-+])
+ (define-key map "\e[201q" [?\M-+])
+ ;;(define-key map "\e[D" [left])
+ (define-key map "\e[174q" [C-left])
- (define-key function-key-map "\e[000q" [begin])
- (define-key function-key-map "\e[184q" [C-begin])
+ (define-key map "\e[000q" [begin])
+ (define-key map "\e[184q" [C-begin])
- ;;(define-key function-key-map "\e[C" [right])
- (define-key function-key-map "\e[192q" [C-right])
- ;;(define-key function-key-map "\e[146q" [end])
- (define-key function-key-map "\e[176q" [C-end])
+ ;;(define-key map "\e[C" [right])
+ (define-key map "\e[192q" [C-right])
- ;;(define-key function-key-map "\e[B" [down])
- (define-key function-key-map "\e[186q" [C-down])
+ ;;(define-key map "\e[146q" [end])
+ (define-key map "\e[176q" [C-end])
- ;;(define-key function-key-map "\e[154q" [next])
- (define-key function-key-map "\e[194q" [C-next])
+ ;;(define-key map "\e[B" [down])
+ (define-key map "\e[186q" [C-down])
+ ;;(define-key map "\e[154q" [next])
+ (define-key map "\e[194q" [C-next])
- (define-key function-key-map "\e[100q" [M-enter])
+ (define-key map "\e[100q" [M-enter])
- (define-key function-key-map "\e[139q" [insert])
- (define-key function-key-map "\e[178q" [C-inset])
+ (define-key map "\e[139q" [insert])
+ (define-key map "\e[178q" [C-inset])
- (define-key function-key-map "\e[P" [delete])
- (define-key function-key-map "\e[196q" [C-delete])
- (define-key function-key-map "\e[197q" [M-delete]))
+ (define-key map "\e[P" [delete])
+ (define-key map "\e[196q" [C-delete])
+ (define-key map "\e[197q" [M-delete])
+ map)
+ "Function key definitions for SGI xwsh and winterm apps.")
-;;; arch-tag: b1d0e73a-bb7d-47be-9fb2-6fb126469a1b
+(defun terminal-init-iris-ansi ()
+ "Terminal initialization function for iris-ansi."
+ ;; Use inheritance to let the main keymap override these defaults.
+ ;; This way we don't override terminfo-derived settings or settings
+ ;; made in the .emacs file.
+ (let ((m (copy-keymap iris-function-map)))
+ (set-keymap-parent m (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map m)))
+
+;; arch-tag: b1d0e73a-bb7d-47be-9fb2-6fb126469a1b
;;; iris-ansi.el ends here
diff --git a/lisp/term/linux.el b/lisp/term/linux.el
index 7fa9a96e9bd..fdd8e2229ac 100644
--- a/lisp/term/linux.el
+++ b/lisp/term/linux.el
@@ -9,13 +9,15 @@
;; It can't really display underlines.
(tty-no-underline)
+ (condition-case nil (t-mouse-mode 1)
+ (error nil))
+
;; Make Latin-1 input characters work, too.
;; Meta will continue to work, because the kernel
;; turns that into Escape.
- (let ((value (current-input-mode)))
- ;; The third arg only matters in that it is not t or nil.
- (set-input-mode (nth 0 value) (nth 1 value) 'iso-latin-1 (nth 3 value))))
+ ;; The arg only matters in that it is not t or nil.
+ (set-input-meta-mode 'iso-latin-1))
;;; arch-tag: 5d0c4f63-739b-4862-abf3-041fe42adb8f
;;; linux.el ends here
diff --git a/lisp/term/lk201.el b/lisp/term/lk201.el
index 1f8d9ca77a3..7bcbd8d754c 100644
--- a/lisp/term/lk201.el
+++ b/lisp/term/lk201.el
@@ -1,72 +1,83 @@
;; -*- no-byte-compile: t -*-
;; Define function key sequences for DEC terminals.
+(defvar lk201-function-map (make-sparse-keymap)
+ "Function key definitions for DEC terminals.")
+
;; Termcap or terminfo should set these.
-;; (define-key function-key-map "\e[A" [up])
-;; (define-key function-key-map "\e[B" [down])
-;; (define-key function-key-map "\e[C" [right])
-;; (define-key function-key-map "\e[D" [left])
+;; (define-key lk201-function-map "\e[A" [up])
+;; (define-key lk201-function-map "\e[B" [down])
+;; (define-key lk201-function-map "\e[C" [right])
+;; (define-key lk201-function-map "\e[D" [left])
-(define-key function-key-map "\e[1~" [find])
-(define-key function-key-map "\e[2~" [insert])
-(define-key function-key-map "\e[3~" [delete])
-(define-key function-key-map "\e[4~" [select])
-(define-key function-key-map "\e[5~" [prior])
-(define-key function-key-map "\e[6~" [next])
-(define-key function-key-map "\e[11~" [f1])
-(define-key function-key-map "\e[12~" [f2])
-(define-key function-key-map "\e[13~" [f3])
-(define-key function-key-map "\e[14~" [f4])
-(define-key function-key-map "\e[15~" [f5])
-(define-key function-key-map "\e[17~" [f6])
-(define-key function-key-map "\e[18~" [f7])
-(define-key function-key-map "\e[19~" [f8])
-(define-key function-key-map "\e[20~" [f9])
-(define-key function-key-map "\e[21~" [f10])
+(define-key lk201-function-map "\e[1~" [find])
+(define-key lk201-function-map "\e[2~" [insert])
+(define-key lk201-function-map "\e[3~" [delete])
+(define-key lk201-function-map "\e[4~" [select])
+(define-key lk201-function-map "\e[5~" [prior])
+(define-key lk201-function-map "\e[6~" [next])
+(define-key lk201-function-map "\e[11~" [f1])
+(define-key lk201-function-map "\e[12~" [f2])
+(define-key lk201-function-map "\e[13~" [f3])
+(define-key lk201-function-map "\e[14~" [f4])
+(define-key lk201-function-map "\e[15~" [f5])
+(define-key lk201-function-map "\e[17~" [f6])
+(define-key lk201-function-map "\e[18~" [f7])
+(define-key lk201-function-map "\e[19~" [f8])
+(define-key lk201-function-map "\e[20~" [f9])
+(define-key lk201-function-map "\e[21~" [f10])
;; Customarily F11 is used as the ESC key.
;; The file that includes this one, takes care of that.
-(define-key function-key-map "\e[23~" [f11])
-(define-key function-key-map "\e[24~" [f12])
-(define-key function-key-map "\e[25~" [f13])
-(define-key function-key-map "\e[26~" [f14])
-(define-key function-key-map "\e[28~" [help])
-(define-key function-key-map "\e[29~" [menu])
-(define-key function-key-map "\e[31~" [f17])
-(define-key function-key-map "\e[32~" [f18])
-(define-key function-key-map "\e[33~" [f19])
-(define-key function-key-map "\e[34~" [f20])
+(define-key lk201-function-map "\e[23~" [f11])
+(define-key lk201-function-map "\e[24~" [f12])
+(define-key lk201-function-map "\e[25~" [f13])
+(define-key lk201-function-map "\e[26~" [f14])
+(define-key lk201-function-map "\e[28~" [help])
+(define-key lk201-function-map "\e[29~" [menu])
+(define-key lk201-function-map "\e[31~" [f17])
+(define-key lk201-function-map "\e[32~" [f18])
+(define-key lk201-function-map "\e[33~" [f19])
+(define-key lk201-function-map "\e[34~" [f20])
;; Termcap or terminfo should set these.
-;; (define-key function-key-map "\eOA" [up])
-;; (define-key function-key-map "\eOB" [down])
-;; (define-key function-key-map "\eOC" [right])
-;; (define-key function-key-map "\eOD" [left])
+;; (define-key lk201-function-map "\eOA" [up])
+;; (define-key lk201-function-map "\eOB" [down])
+;; (define-key lk201-function-map "\eOC" [right])
+;; (define-key lk201-function-map "\eOD" [left])
;; Termcap or terminfo should set these, but doesn't properly.
;; Termcap sets these to k1-k4, which get mapped to f1-f4 in term.c
-(define-key function-key-map "\eOP" [kp-f1])
-(define-key function-key-map "\eOQ" [kp-f2])
-(define-key function-key-map "\eOR" [kp-f3])
-(define-key function-key-map "\eOS" [kp-f4])
+(define-key lk201-function-map "\eOP" [kp-f1])
+(define-key lk201-function-map "\eOQ" [kp-f2])
+(define-key lk201-function-map "\eOR" [kp-f3])
+(define-key lk201-function-map "\eOS" [kp-f4])
+
+(define-key lk201-function-map "\eOI" [kp-tab])
+(define-key lk201-function-map "\eOj" [kp-multiply])
+(define-key lk201-function-map "\eOk" [kp-add])
+(define-key lk201-function-map "\eOl" [kp-separator])
+(define-key lk201-function-map "\eOM" [kp-enter])
+(define-key lk201-function-map "\eOm" [kp-subtract])
+(define-key lk201-function-map "\eOn" [kp-decimal])
+(define-key lk201-function-map "\eOo" [kp-divide])
+(define-key lk201-function-map "\eOp" [kp-0])
+(define-key lk201-function-map "\eOq" [kp-1])
+(define-key lk201-function-map "\eOr" [kp-2])
+(define-key lk201-function-map "\eOs" [kp-3])
+(define-key lk201-function-map "\eOt" [kp-4])
+(define-key lk201-function-map "\eOu" [kp-5])
+(define-key lk201-function-map "\eOv" [kp-6])
+(define-key lk201-function-map "\eOw" [kp-7])
+(define-key lk201-function-map "\eOx" [kp-8])
+(define-key lk201-function-map "\eOy" [kp-9])
-(define-key function-key-map "\eOI" [kp-tab])
-(define-key function-key-map "\eOj" [kp-multiply])
-(define-key function-key-map "\eOk" [kp-add])
-(define-key function-key-map "\eOl" [kp-separator])
-(define-key function-key-map "\eOM" [kp-enter])
-(define-key function-key-map "\eOm" [kp-subtract])
-(define-key function-key-map "\eOn" [kp-decimal])
-(define-key function-key-map "\eOo" [kp-divide])
-(define-key function-key-map "\eOp" [kp-0])
-(define-key function-key-map "\eOq" [kp-1])
-(define-key function-key-map "\eOr" [kp-2])
-(define-key function-key-map "\eOs" [kp-3])
-(define-key function-key-map "\eOt" [kp-4])
-(define-key function-key-map "\eOu" [kp-5])
-(define-key function-key-map "\eOv" [kp-6])
-(define-key function-key-map "\eOw" [kp-7])
-(define-key function-key-map "\eOx" [kp-8])
-(define-key function-key-map "\eOy" [kp-9])
+(defun terminal-init-lk201 ()
+ ;; Use inheritance to let the main keymap override these defaults.
+ ;; This way we don't override terminfo-derived settings or settings
+ ;; made in the .emacs file.
+ (let ((m (copy-keymap lk201-function-map)))
+ (set-keymap-parent m (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map m)))
-;;; arch-tag: 7ffb4444-6a23-43e1-b457-43cf4f673c0d
+;; arch-tag: 7ffb4444-6a23-43e1-b457-43cf4f673c0d
;;; lk201.el ends here
diff --git a/lisp/term/mac-win.el b/lisp/term/mac-win.el
index 483e73464dc..050bd04d59e 100644
--- a/lisp/term/mac-win.el
+++ b/lisp/term/mac-win.el
@@ -65,8 +65,8 @@
;; An alist of X options and the function which handles them. See
;; ../startup.el.
-(if (not (eq window-system 'mac))
- (error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name)))
+;; (if (not (eq window-system 'mac))
+;; (error "%s: Loading mac-win.el but not compiled for Mac" (invocation-name)))
(require 'frame)
(require 'mouse)
@@ -85,6 +85,14 @@
(defvar mac-ts-active-input-overlay)
(defvar x-invocation-args)
+(declare-function mac-code-convert-string) ;; Defined in C.
+(declare-function mac-coerce-ae-data) ;; Defined in C.
+(declare-function mac-resume-apple-event) ;; Defined in C.
+(declare-function mac-font-panel-mode) ;; Defined in C.
+(declare-function mac-atsu-font-face-attributes) ;; Defined in C.
+(declare-function mac-ae-set-reply-parameter) ;; Defined in C.
+(declare-function mac-clear-font-name-table) ;; Defined in C.
+
(defvar x-command-line-resources nil)
;; Handler for switches of the form "-switch value" or "-switch".
@@ -1058,25 +1066,31 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
;;;; Function keys
-(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
- global-map)
-
-;; Map certain keypad keys into ASCII characters
-;; that people usually expect.
-(define-key function-key-map [backspace] [?\d])
-(define-key function-key-map [delete] [?\d])
-(define-key function-key-map [tab] [?\t])
-(define-key function-key-map [linefeed] [?\n])
-(define-key function-key-map [clear] [?\C-l])
-(define-key function-key-map [return] [?\C-m])
-(define-key function-key-map [escape] [?\e])
-(define-key function-key-map [M-backspace] [?\M-\d])
-(define-key function-key-map [M-delete] [?\M-\d])
-(define-key function-key-map [M-tab] [?\M-\t])
-(define-key function-key-map [M-linefeed] [?\M-\n])
-(define-key function-key-map [M-clear] [?\M-\C-l])
-(define-key function-key-map [M-return] [?\M-\C-m])
-(define-key function-key-map [M-escape] [?\M-\e])
+(defun x-setup-function-keys (frame)
+ "Setup Function Keys for mac."
+ ;; Don't do this twice on the same display, or it would break
+ ;; normal-erase-is-backspace-mode.
+ (unless (terminal-parameter frame 'x-setup-function-keys)
+ (with-selected-frame frame
+ ;; Map certain keypad keys into ASCII characters
+ ;; that people usually expect.
+ (define-key local-function-key-map [backspace] [?\d])
+ (define-key local-function-key-map [delete] [?\d])
+ (define-key local-function-key-map [tab] [?\t])
+ (define-key local-function-key-map [linefeed] [?\n])
+ (define-key local-function-key-map [clear] [?\C-l])
+ (define-key local-function-key-map [return] [?\C-m])
+ (define-key local-function-key-map [escape] [?\e])
+ (define-key local-function-key-map [M-backspace] [?\M-\d])
+ (define-key local-function-key-map [M-delete] [?\M-\d])
+ (define-key local-function-key-map [M-tab] [?\M-\t])
+ (define-key local-function-key-map [M-linefeed] [?\M-\n])
+ (define-key local-function-key-map [M-clear] [?\M-\C-l])
+ (define-key local-function-key-map [M-return] [?\M-\C-m])
+ (define-key local-function-key-map [M-escape] [?\M-\e])
+ (substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
+ local-function-key-map global-map))
+ (set-terminal-parameter frame 'x-setup-function-keys t)))
;; These tell read-char how to convert
;; these special chars to ASCII.
@@ -1709,6 +1723,19 @@ in `selection-converter-alist', which see."
(setq modifiers (cons (car modifier-mask) modifiers)))))
modifiers))
+(defun mac-ae-reopen-application (event)
+ "Show some frame in response to the Apple event EVENT.
+The frame to be shown is chosen from visible or iconified frames
+if possible. If there's no such frame, a new frame is created."
+ (interactive "e")
+ (unless (frame-visible-p (selected-frame))
+ (let ((frame (or (car (visible-frame-list))
+ (car (filtered-frame-list 'frame-visible-p)))))
+ (if frame
+ (select-frame frame)
+ (switch-to-buffer-other-frame "*scratch*"))))
+ (select-frame-set-input-focus (selected-frame)))
+
(defun mac-ae-open-documents (event)
"Open the documents specified by the Apple event EVENT."
(interactive "e")
@@ -1765,9 +1792,9 @@ Currently the `mailto' scheme is supported."
(define-key mac-apple-event-map [core-event open-application] 0)
;; Received when a dock or application icon is clicked and Emacs is
-;; already running. Simply ignored. Another idea is to make a new
-;; frame if all frames are invisible.
-(define-key mac-apple-event-map [core-event reopen-application] 'ignore)
+;; already running.
+(define-key mac-apple-event-map [core-event reopen-application]
+ 'mac-ae-reopen-application)
(define-key mac-apple-event-map [core-event open-documents]
'mac-ae-open-documents)
@@ -1777,7 +1804,7 @@ Currently the `mailto' scheme is supported."
(define-key mac-apple-event-map [internet-event get-url] 'mac-ae-get-url)
-(define-key mac-apple-event-map [hi-command about] 'display-splash-screen)
+(define-key mac-apple-event-map [hi-command about] 'about-emacs)
;;; Converted Carbon Events
(defun mac-handle-toolbar-switch-mode (event)
@@ -2251,7 +2278,7 @@ See also `mac-dnd-known-types'."
(handler (cdr type-info))
(w (posn-window (event-start event))))
(when handler
- (if (and (windowp w) (window-live-p w)
+ (if (and (window-live-p w)
(not (window-minibuffer-p w))
(not (window-dedicated-p w)))
;; If dropping in an ordinary window which we could use,
@@ -2280,34 +2307,6 @@ See also `mac-dnd-known-types'."
(mac-dnd-drop-data event (selected-frame) window
(cdr item) (car item) action)))))
-;;; Do the actual Windows setup here; the above code just defines
-;;; functions and variables that we use now.
-
-(setq command-line-args (x-handle-args command-line-args))
-
-;;; Make sure we have a valid resource name.
-(or (stringp x-resource-name)
- (let (i)
- (setq x-resource-name (invocation-name))
-
- ;; Change any . or * characters in x-resource-name to hyphens,
- ;; so as not to choke when we use it in X resource queries.
- (while (setq i (string-match "[.*]" x-resource-name))
- (aset x-resource-name i ?-))))
-
-(if (x-display-list)
- ;; On Mac OS 8/9, Most coding systems used in code conversion for
- ;; font names are not ready at the time when the terminal frame is
- ;; created. So we reconstruct font name table for the initial
- ;; frame.
- (mac-clear-font-name-table)
- (x-open-connection "Mac"
- x-command-line-resources
- ;; Exit Emacs with fatal error if this fails.
- t))
-
-(setq frame-creation-function 'x-create-frame-with-faces)
-
(defvar mac-font-encoder-list
'(("mac-roman" mac-roman-encoder
ccl-encode-mac-roman-font "%s")
@@ -2485,6 +2484,88 @@ It returns a name of the created fontset."
(fontset-add-mac-fonts fontset t)
fontset))
+(defun x-win-suspend-error ()
+ (error "Suspending an Emacs running under Mac makes no sense"))
+
+(defalias 'x-cut-buffer-or-selection-value 'x-get-selection-value)
+
+(defvar mac-initialized nil
+ "Non-nil if the w32 window system has been initialized.")
+
+(defun mac-initialize-window-system ()
+ "Initialize Emacs for Mac GUI frames."
+
+;;; Do the actual Windows setup here; the above code just defines
+;;; functions and variables that we use now.
+
+(setq command-line-args (x-handle-args command-line-args))
+
+;;; Make sure we have a valid resource name.
+(or (stringp x-resource-name)
+ (let (i)
+ (setq x-resource-name (invocation-name))
+
+ ;; Change any . or * characters in x-resource-name to hyphens,
+ ;; so as not to choke when we use it in X resource queries.
+ (while (setq i (string-match "[.*]" x-resource-name))
+ (aset x-resource-name i ?-))))
+
+(if (x-display-list)
+ ;; On Mac OS 8/9, Most coding systems used in code conversion for
+ ;; font names are not ready at the time when the terminal frame is
+ ;; created. So we reconstruct font name table for the initial
+ ;; frame.
+ (mac-clear-font-name-table)
+ (x-open-connection "Mac"
+ x-command-line-resources
+ ;; Exit Emacs with fatal error if this fails.
+ t))
+
+(add-hook 'suspend-hook 'x-win-suspend-error)
+
+;;; Arrange for the kill and yank functions to set and check the clipboard.
+(setq interprogram-cut-function 'x-select-text)
+(setq interprogram-paste-function 'x-get-selection-value)
+
+
+
+
+;;; Turn off window-splitting optimization; Mac is usually fast enough
+;;; that this is only annoying.
+(setq split-window-keep-point t)
+
+;; Don't show the frame name; that's redundant.
+(setq-default mode-line-frame-identification " ")
+
+;; Turn on support for mouse wheels.
+(mouse-wheel-mode 1)
+
+
+;; Enable CLIPBOARD copy/paste through menu bar commands.
+(menu-bar-enable-clipboard)
+
+
+;; Initiate drag and drop
+
+(define-key special-event-map [drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
+
+
+;;;; Non-toolkit Scroll bars
+
+(unless x-toolkit-scroll-bars
+
+;; for debugging
+;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event))
+
+;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event)
+
+(global-set-key
+ [vertical-scroll-bar down-mouse-1]
+ 'mac-handle-scroll-bar-event)
+
+(global-unset-key [vertical-scroll-bar drag-mouse-1])
+(global-unset-key [vertical-scroll-bar mouse-1])
+
;; Adjust Courier font specifications in x-fixed-font-alist.
(let ((courier-fonts (assoc "Courier" x-fixed-font-alist)))
(if courier-fonts
@@ -2591,50 +2672,7 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
(setq default-frame-alist
(cons '(reverse . t) default-frame-alist)))))
-(defun x-win-suspend-error ()
- (error "Suspending an Emacs running under Mac makes no sense"))
-(add-hook 'suspend-hook 'x-win-suspend-error)
-
-;;; Arrange for the kill and yank functions to set and check the clipboard.
-(setq interprogram-cut-function 'x-select-text)
-(setq interprogram-paste-function 'x-get-selection-value)
-
-(defalias 'x-cut-buffer-or-selection-value 'x-get-selection-value)
-
-;;; Turn off window-splitting optimization; Mac is usually fast enough
-;;; that this is only annoying.
-(setq split-window-keep-point t)
-
-;; Don't show the frame name; that's redundant.
-(setq-default mode-line-frame-identification " ")
-
-;; Turn on support for mouse wheels.
-(mouse-wheel-mode 1)
-
-
-;; Enable CLIPBOARD copy/paste through menu bar commands.
-(menu-bar-enable-clipboard)
-
-;; Initiate drag and drop
-
-(define-key special-event-map [drag-n-drop] 'mac-dnd-handle-drag-n-drop-event)
-
-
-;;;; Non-toolkit Scroll bars
-
-(unless x-toolkit-scroll-bars
-
-;; for debugging
-;; (defun mac-handle-scroll-bar-event (event) (interactive "e") (princ event))
-
-;;(global-set-key [vertical-scroll-bar mouse-1] 'mac-handle-scroll-bar-event)
-
-(global-set-key
- [vertical-scroll-bar down-mouse-1]
- 'mac-handle-scroll-bar-event)
-
-(global-unset-key [vertical-scroll-bar drag-mouse-1])
-(global-unset-key [vertical-scroll-bar mouse-1])
+(setq mac-initialized t)))
(defun mac-handle-scroll-bar-event (event)
"Handle scroll bar EVENT to emulate Mac Toolbox style scrolling."
@@ -2682,7 +2720,6 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
(mac-scroll-ignore-events)
(scroll-up 1)))
-)
;;;; Others
@@ -2720,5 +2757,11 @@ ascii:-*-Monaco-*-*-*-*-12-*-*-*-*-*-mac-roman")
;; or bold bitmap versions will not display these variants correctly.
(setq scalable-fonts-allowed t)
+(add-to-list 'handle-args-function-alist '(mac . x-handle-args))
+(add-to-list 'frame-creation-function-alist '(mac . x-create-frame-with-faces))
+(add-to-list 'window-system-initialization-alist '(mac . mac-initialize-window-system))
+
+(provide 'mac-win)
+
;; arch-tag: 71dfcd14-cde8-4d66-b05c-85ec94fb23a6
;;; mac-win.el ends here
diff --git a/lisp/term/news.el b/lisp/term/news.el
index 57d8fd6cb14..0ce303d2265 100644
--- a/lisp/term/news.el
+++ b/lisp/term/news.el
@@ -31,10 +31,8 @@
(defun terminal-init-news ()
"Terminal initialization function for news."
- (if (boundp 'news-fkey-prefix)
- nil
- ;; The terminal initialization should already have set up some keys
- (setq news-fkey-prefix (lookup-key function-key-map "\eO"))
+ ;; The terminal initialization should already have set up some keys
+ (let ((news-fkey-prefix (lookup-key input-decode-map "\eO")))
(if (not (keymapp news-fkey-prefix))
(error "What? Your news termcap/terminfo has no keycaps in it"))
@@ -73,5 +71,5 @@
(define-key news-fkey-prefix "x" [kp-8])
))
-;;; arch-tag: bfe141a0-623b-4b42-b753-5d9353776c5e
+;; arch-tag: bfe141a0-623b-4b42-b753-5d9353776c5e
;;; news.el ends here
diff --git a/lisp/term/pc-win.el b/lisp/term/pc-win.el
index ca85e824caa..d9ed7385514 100644
--- a/lisp/term/pc-win.el
+++ b/lisp/term/pc-win.el
@@ -29,6 +29,10 @@
(load "term/internal" nil t)
+(declare-function msdos-remember-default-colors) ;; Defined in C.
+(declare-function w16-set-clipboard-data) ;; Defined in C.
+(declare-function w16-get-clipboard-data) ;; Defined in C.
+
;;; This is copied from etc/rgb.txt, except that some values were changed
;;; a bit to make them consistent with DOS console colors, and the RGB
;;; values were scaled up to 16 bits, as `tty-define-color' requires.
@@ -130,7 +134,7 @@
(unless success (delete-frame frame)))
frame))
-(setq frame-creation-function 'make-msdos-frame)
+(add-to-list 'frame-creation-function-alist '(pc . make-msdos-frame))
;; ---------------------------------------------------------------------------
;; More or less useful imitations of certain X-functions. A lot of the
diff --git a/lisp/term/rxvt.el b/lisp/term/rxvt.el
index 64c09e0e1bd..c96c8a6e290 100644
--- a/lisp/term/rxvt.el
+++ b/lisp/term/rxvt.el
@@ -26,51 +26,10 @@
;;; Code:
-(defun terminal-init-rxvt ()
- "Terminal initialization function for rxvt."
- ;; The terminal intialization C code file might have initialized
- ;; function keys F11->F42 from the termcap/terminfo information. On
- ;; a PC-style keyboard these keys correspond to
- ;; MODIFIER-FUNCTION_KEY, where modifier is S-, C-, C-S-. The
- ;; code here subsitutes the corresponding defintions in
- ;; function-key-map. This substitution is needed because if a key
- ;; definition if found in function-key-map, there are no further
- ;; lookups in other keymaps.
- (substitute-key-definition [f11] [S-f1] function-key-map)
- (substitute-key-definition [f12] [S-f2] function-key-map)
- (substitute-key-definition [f13] [S-f3] function-key-map)
- (substitute-key-definition [f14] [S-f4] function-key-map)
- (substitute-key-definition [f15] [S-f5] function-key-map)
- (substitute-key-definition [f16] [S-f6] function-key-map)
- (substitute-key-definition [f17] [S-f7] function-key-map)
- (substitute-key-definition [f18] [S-f8] function-key-map)
- (substitute-key-definition [f19] [S-f9] function-key-map)
- (substitute-key-definition [f20] [S-f10] function-key-map)
-
- (substitute-key-definition [f23] [C-f1] function-key-map)
- (substitute-key-definition [f24] [C-f2] function-key-map)
- (substitute-key-definition [f25] [C-f3] function-key-map)
- (substitute-key-definition [f26] [C-f4] function-key-map)
- (substitute-key-definition [f27] [C-f5] function-key-map)
- (substitute-key-definition [f28] [C-f6] function-key-map)
- (substitute-key-definition [f29] [C-f7] function-key-map)
- (substitute-key-definition [f30] [C-f8] function-key-map)
- (substitute-key-definition [f31] [C-f9] function-key-map)
- (substitute-key-definition [f32] [C-f10] function-key-map)
-
- (substitute-key-definition [f33] [C-S-f1] function-key-map)
- (substitute-key-definition [f34] [C-S-f2] function-key-map)
- (substitute-key-definition [f35] [C-S-f3] function-key-map)
- (substitute-key-definition [f36] [C-S-f4] function-key-map)
- (substitute-key-definition [f37] [C-S-f5] function-key-map)
- (substitute-key-definition [f38] [C-S-f6] function-key-map)
- (substitute-key-definition [f39] [C-S-f7] function-key-map)
- (substitute-key-definition [f40] [C-S-f8] function-key-map)
- (substitute-key-definition [f41] [C-S-f9] function-key-map)
- (substitute-key-definition [f42] [C-S-f10] function-key-map)
-
- ;; Set up function-key-map entries that termcap and terminfo don't know.
+(defvar rxvt-function-map
(let ((map (make-sparse-keymap)))
+
+ ;; Set up input-decode-map entries that termcap and terminfo don't know.
(define-key map "\e[A" [up])
(define-key map "\e[B" [down])
(define-key map "\e[C" [right])
@@ -94,8 +53,8 @@
(define-key map "\e[21~" [f10])
;; The strings emitted by f11 and f12 are the same as the strings
;; emitted by S-f1 and S-f2, so don't define f11 and f12.
- ;; (define-key map "\e[23~" [f11])
- ;; (define-key map "\e[24~" [f12])
+ ;; (define-key rxvt-function-map "\e[23~" [f11])
+ ;; (define-key rxvt-function-map "\e[24~" [f12])
(define-key map "\e[29~" [print])
(define-key map "\e[11^" [C-f1])
@@ -152,12 +111,67 @@
(define-key map "\e[c" [S-right])
(define-key map "\e[a" [S-up])
(define-key map "\e[b" [S-down])
+ map)
+ "Function key overrides for rxvt.")
+
+(defvar rxvt-alternatives-map
+ (let ((map (make-sparse-keymap)))
+ ;; The terminal intialization C code file might have initialized
+ ;; function keys F11->F42 from the termcap/terminfo information. On
+ ;; a PC-style keyboard these keys correspond to
+ ;; MODIFIER-FUNCTION_KEY, where modifier is S-, C-, C-S-. The
+ ;; code here subsitutes the corresponding defintions in
+ ;; function-key-map. This substitution is needed because if a key
+ ;; definition if found in function-key-map, there are no further
+ ;; lookups in other keymaps.
+ (define-key map [f11] [S-f1])
+ (define-key map [f12] [S-f2])
+ (define-key map [f13] [S-f3])
+ (define-key map [f14] [S-f4])
+ (define-key map [f15] [S-f5])
+ (define-key map [f16] [S-f6])
+ (define-key map [f17] [S-f7])
+ (define-key map [f18] [S-f8])
+ (define-key map [f19] [S-f9])
+ (define-key map [f20] [S-f10])
- ;; Use inheritance to let the main keymap override those defaults.
- ;; This way we don't override terminfo-derived settings or settings
- ;; made in the .emacs file.
- (set-keymap-parent map (keymap-parent function-key-map))
- (set-keymap-parent function-key-map map))
+ (define-key map [f23] [C-f1])
+ (define-key map [f24] [C-f2])
+ (define-key map [f25] [C-f3])
+ (define-key map [f26] [C-f4])
+ (define-key map [f27] [C-f5])
+ (define-key map [f28] [C-f6])
+ (define-key map [f29] [C-f7])
+ (define-key map [f30] [C-f8])
+ (define-key map [f31] [C-f9])
+ (define-key map [f32] [C-f10])
+
+ (define-key map [f33] [C-S-f1])
+ (define-key map [f34] [C-S-f2])
+ (define-key map [f35] [C-S-f3])
+ (define-key map [f36] [C-S-f4])
+ (define-key map [f37] [C-S-f5])
+ (define-key map [f38] [C-S-f6])
+ (define-key map [f39] [C-S-f7])
+ (define-key map [f40] [C-S-f8])
+ (define-key map [f41] [C-S-f9])
+ (define-key map [f42] [C-S-f10])
+ map)
+ "Keymap of possible alternative meanings for some keys.")
+
+(defun terminal-init-rxvt ()
+ "Terminal initialization function for rxvt."
+
+ (let ((map (copy-keymap rxvt-alternatives-map)))
+ (set-keymap-parent map (keymap-parent local-function-key-map))
+ (set-keymap-parent local-function-key-map map))
+
+ ;; Use inheritance to let the main keymap override those defaults.
+ ;; This way we don't override terminfo-derived settings or settings
+ ;; made in the .emacs file.
+ (let ((m (copy-keymap rxvt-function-map)))
+ (set-keymap-parent m (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map m))
;; Initialize colors and background mode.
(rxvt-register-default-colors)
@@ -239,7 +253,7 @@ for the currently selected frame."
(- 256 ncolors)
(list color color color))
(setq ncolors (1- ncolors))))
-
+
((= ncolors 72) ; rxvt-unicode
;; 64 non-gray colors
(let ((levels '(0 139 205 255))
@@ -282,7 +296,7 @@ for the currently selected frame."
"Set background mode as appropriate for the default rxvt colors."
(let ((fgbg (getenv "COLORFGBG"))
bg rgb)
- (setq default-frame-background-mode 'light)
+ (set-terminal-parameter nil 'background-mode 'light)
(when (and fgbg
(string-match ".*;\\([0-9][0-9]?\\)\\'" fgbg))
(setq bg (string-to-number (substring fgbg (match-beginning 1))))
@@ -295,8 +309,7 @@ for the currently selected frame."
;; The following line assumes that white is the 15th
;; color in rxvt-standard-colors.
(* (apply '+ (car (cddr (nth 15 rxvt-standard-colors)))) 0.6))
- (setq default-frame-background-mode 'dark)))
- (frame-set-background-mode (selected-frame))))
+ (set-terminal-parameter nil 'background-mode 'dark)))))
;; arch-tag: 20cf2fb6-6318-4bab-9dbf-1d15048f2257
;;; rxvt.el ends here
diff --git a/lisp/term/sun-mouse.el b/lisp/term/sun-mouse.el
deleted file mode 100644
index 65ebe193c71..00000000000
--- a/lisp/term/sun-mouse.el
+++ /dev/null
@@ -1,682 +0,0 @@
-;;; sun-mouse.el --- mouse handling for Sun windows
-
-;; Copyright (C) 1987, 2001, 2002, 2003, 2004, 2005,
-;; 2006, 2007 Free Software Foundation, Inc.
-
-;; Author: Jeff Peck
-;; Maintainer: FSF
-;; Keywords: hardware
-
-;; 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 3, 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:
-
-;; Jeff Peck, Sun Microsystems, Jan 1987.
-;; Original idea by Stan Jefferson
-
-;; Modeled after the GNUEMACS keymap interface.
-;;
-;; User Functions:
-;; make-mousemap, copy-mousemap,
-;; define-mouse, global-set-mouse, local-set-mouse,
-;; use-global-mousemap, use-local-mousemap,
-;; mouse-lookup, describe-mouse-bindings
-;;
-;; Options:
-;; extra-click-wait, scrollbar-width
-
-;;; Code:
-
-(defvar extra-click-wait 150
- "*Number of milliseconds to wait for an extra click.
-Set this to zero if you don't want chords or double clicks.")
-
-(defvar scrollbar-width 5
- "*The character width of the scrollbar.
-The cursor is deemed to be in the right edge scrollbar if it is this near the
-right edge, and more than two chars past the end of the indicated line.
-Setting to nil limits the scrollbar to the edge or vertical dividing bar.")
-
-;;;
-;;; Mousemaps
-;;;
-(defun make-mousemap ()
- "Returns a new mousemap."
- (cons 'mousemap nil))
-
-;;; initialize mouse maps
-(defvar current-global-mousemap (make-mousemap))
-(defvar current-local-mousemap nil)
-(make-variable-buffer-local 'current-local-mousemap)
-
-(defun copy-mousemap (mousemap)
- "Return a copy of mousemap."
- (copy-alist mousemap))
-
-(defun define-mouse (mousemap mouse-list def)
- "Args MOUSEMAP, MOUSE-LIST, DEF. Define MOUSE-LIST in MOUSEMAP as DEF.
-MOUSE-LIST is a list of atoms specifying a mouse hit according to these rules:
- * One of these atoms specifies the active region of the definition.
- text, scrollbar, modeline, minibuffer
- * One or two or these atoms specify the button or button combination.
- left, middle, right, double
- * Any combination of these atoms specify the active shift keys.
- control, shift, meta
- * With a single unshifted button, you can add
- up
- to indicate an up-click.
-The atom `double' is used with a button designator to denote a double click.
-Two button chords are denoted by listing the two buttons.
-See sun-mouse-handler for the treatment of the form DEF."
- (mousemap-set (mouse-list-to-mouse-code mouse-list) mousemap def))
-
-(defun global-set-mouse (mouse-list def)
- "Give MOUSE-EVENT-LIST a local definition of DEF.
-See define-mouse for a description of MOUSE-EVENT-LIST and DEF.
-Note that if MOUSE-EVENT-LIST has a local definition in the current buffer,
-that local definition will continue to shadow any global definition."
- (interactive "xMouse event: \nxDefinition: ")
- (define-mouse current-global-mousemap mouse-list def))
-
-(defun local-set-mouse (mouse-list def)
- "Give MOUSE-EVENT-LIST a local definition of DEF.
-See define-mouse for a description of the arguments.
-The definition goes in the current buffer's local mousemap.
-Normally buffers in the same major mode share a local mousemap."
- (interactive "xMouse event: \nxDefinition: ")
- (if (null current-local-mousemap)
- (setq current-local-mousemap (make-mousemap)))
- (define-mouse current-local-mousemap mouse-list def))
-
-(defun use-global-mousemap (mousemap)
- "Selects MOUSEMAP as the global mousemap."
- (setq current-global-mousemap mousemap))
-
-(defun use-local-mousemap (mousemap)
- "Selects MOUSEMAP as the local mousemap.
-nil for MOUSEMAP means no local mousemap."
- (setq current-local-mousemap mousemap))
-
-
-;;;
-;;; Interface to the Mouse encoding defined in Emacstool.c
-;;;
-;;; Called when mouse-prefix is sent to emacs, additional
-;;; information is read in as a list (button x y time-delta)
-;;;
-;;; First, some generally useful functions:
-;;;
-
-(defun logtest (x y)
- "True if any bits set in X are also set in Y.
-Just like the Common Lisp function of the same name."
- (not (zerop (logand x y))))
-
-
-;;;
-;;; Hit accessors.
-;;;
-
-(defconst sm::ButtonBits 7) ; Lowest 3 bits.
-(defconst sm::ShiftmaskBits 56) ; Second lowest 3 bits (56 = 63 - 7).
-(defconst sm::DoubleBits 64) ; Bit 7.
-(defconst sm::UpBits 128) ; Bit 8.
-
-;;; All the useful code bits
-(defmacro sm::hit-code (hit)
- `(nth 0 ,hit))
-;;; The button, or buttons if a chord.
-(defmacro sm::hit-button (hit)
- `(logand sm::ButtonBits (nth 0 ,hit)))
-;;; The shift, control, and meta flags.
-(defmacro sm::hit-shiftmask (hit)
- `(logand sm::ShiftmaskBits (nth 0 ,hit)))
-;;; Set if a double click (but not a chord).
-(defmacro sm::hit-double (hit)
- `(logand sm::DoubleBits (nth 0 ,hit)))
-;;; Set on button release (as opposed to button press).
-(defmacro sm::hit-up (hit)
- `(logand sm::UpBits (nth 0 ,hit)))
-;;; Screen x position.
-(defmacro sm::hit-x (hit) (list 'nth 1 hit))
-;;; Screen y position.
-(defmacro sm::hit-y (hit) (list 'nth 2 hit))
-;;; Milliseconds since last hit.
-(defmacro sm::hit-delta (hit) (list 'nth 3 hit))
-
-(defmacro sm::hit-up-p (hit) ; A predicate.
- `(not (zerop (sm::hit-up ,hit))))
-
-;;;
-;;; Loc accessors. for sm::window-xy
-;;;
-(defmacro sm::loc-w (loc) (list 'nth 0 loc))
-(defmacro sm::loc-x (loc) (list 'nth 1 loc))
-(defmacro sm::loc-y (loc) (list 'nth 2 loc))
-
-(defmacro eval-in-buffer (buffer &rest forms)
- "Macro to switches to BUFFER, evaluates FORMS, returns to original buffer."
- ;; When you don't need the complete window context of eval-in-window
- `(let ((StartBuffer (current-buffer)))
- (unwind-protect
- (progn
- (set-buffer ,buffer)
- ,@forms)
- (set-buffer StartBuffer))))
-
-(put 'eval-in-buffer 'lisp-indent-function 1)
-
-;;; this is used extensively by sun-fns.el
-;;;
-(defmacro eval-in-window (window &rest forms)
- "Switch to WINDOW, evaluate FORMS, return to original window."
- `(let ((OriginallySelectedWindow (selected-window)))
- (unwind-protect
- (progn
- (select-window ,window)
- ,@forms)
- (select-window OriginallySelectedWindow))))
-(put 'eval-in-window 'lisp-indent-function 1)
-
-;;;
-;;; handy utility, generalizes window_loop
-;;;
-
-;;; It's a macro (and does not evaluate its arguments).
-(defmacro eval-in-windows (form &optional yesmini)
- "Switches to each window and evaluates FORM. Optional argument
-YESMINI says to include the minibuffer as a window.
-This is a macro, and does not evaluate its arguments."
- `(let ((OriginallySelectedWindow (selected-window)))
- (unwind-protect
- (while (progn
- ,form
- (not (eq OriginallySelectedWindow
- (select-window
- (next-window nil ,yesmini))))))
- (select-window OriginallySelectedWindow))))
-(put 'eval-in-window 'lisp-indent-function 0)
-
-(defun move-to-loc (x y)
- "Move cursor to window location X, Y.
-Handles wrapped and horizontally scrolled lines correctly."
- (move-to-window-line y)
- ;; window-line-end expects this to return the window column it moved to.
- (let ((cc (current-column))
- (nc (move-to-column
- (if (zerop (window-hscroll))
- (+ (current-column)
- (min (- (window-width) 2) ; To stay on the line.
- x))
- (+ (window-hscroll) -1
- (min (1- (window-width)) ; To stay on the line.
- x))))))
- (- nc cc)))
-
-
-(defun minibuffer-window-p (window)
- "True if this WINDOW is minibuffer."
- (= (frame-height)
- (nth 3 (window-edges window)) ; The bottom edge.
- ))
-
-
-(defun sun-mouse-handler (&optional hit)
- "Evaluates the function or list associated with a mouse hit.
-Expecting to read a hit, which is a list: (button x y delta).
-A form bound to button by define-mouse is found by mouse-lookup.
-The variables: *mouse-window*, *mouse-x*, *mouse-y* are bound.
-If the form is a symbol (symbolp), it is funcall'ed with *mouse-window*,
-*mouse-x*, and *mouse-y* as arguments; if the form is a list (listp),
-the form is eval'ed; if the form is neither of these, it is an error.
-Returns nil."
- (interactive)
- (if (null hit) (setq hit (sm::combined-hits)))
- (let ((loc (sm::window-xy (sm::hit-x hit) (sm::hit-y hit))))
- (let ((*mouse-window* (sm::loc-w loc))
- (*mouse-x* (sm::loc-x loc))
- (*mouse-y* (sm::loc-y loc))
- (mouse-code (mouse-event-code hit loc)))
- (let ((form (eval-in-buffer (window-buffer *mouse-window*)
- (mouse-lookup mouse-code))))
- (cond ((null form)
- (if (not (sm::hit-up-p hit)) ; undefined up hits are ok.
- (error "Undefined mouse event: %s"
- (prin1-to-string
- (mouse-code-to-mouse-list mouse-code)))))
- ((symbolp form)
- (setq this-command form)
- (funcall form *mouse-window* *mouse-x* *mouse-y*))
- ((listp form)
- (setq this-command (car form))
- (eval form))
- (t
- (error "Mouse action must be symbol or list, but was: %s"
- form))))))
- ;; Don't let 'sun-mouse-handler get on last-command,
- ;; since this function should be transparent.
- (if (eq this-command 'sun-mouse-handler)
- (setq this-command last-command))
- ;; (message (prin1-to-string this-command)) ; to see what your buttons did
- nil)
-
-(defun sm::combined-hits ()
- "Read and return next mouse-hit, include possible double click"
- (let ((hit1 (mouse-hit-read)))
- (if (not (sm::hit-up-p hit1)) ; Up hits don't start doubles or chords.
- (let ((hit2 (mouse-second-hit extra-click-wait)))
- (if hit2 ; we cons'd it, we can smash it.
- ; (setf (sm::hit-code hit1) (logior (sm::hit-code hit1) ...))
- (setcar hit1 (logior (sm::hit-code hit1)
- (sm::hit-code hit2)
- (if (= (sm::hit-button hit1)
- (sm::hit-button hit2))
- sm::DoubleBits 0))))))
- hit1))
-
-(defun mouse-hit-read ()
- "Read mouse-hit list from keyboard. Like (read 'read-char),
-but that uses minibuffer, and mucks up last-command."
- (let ((char-list nil) (char nil))
- (while (not (equal 13 ; Carriage return.
- (prog1 (setq char (read-char))
- (setq char-list (cons char char-list))))))
- (read (mapconcat 'char-to-string (nreverse char-list) ""))
- ))
-
-;;; Second Click Hackery....
-;;; if prefix is not mouse-prefix, need a way to unread the char...
-;;; or else have mouse flush input queue, or else need a peek at next char.
-
-;;; There is no peek, but since one character can be unread, we only
-;;; have to flush the queue when the command after a mouse click
-;;; starts with mouse-prefix1 (see below).
-;;; Something to do later: We could buffer the read commands and
-;;; execute them ourselves after doing the mouse command (using
-;;; lookup-key ??).
-
-(defvar mouse-prefix1 24 ; C-x
- "First char of mouse-prefix. Used to detect double clicks and chords.")
-
-(defvar mouse-prefix2 0 ; C-@
- "Second char of mouse-prefix. Used to detect double clicks and chords.")
-
-
-(defun mouse-second-hit (hit-wait)
- "Returns the next mouse hit occurring within HIT-WAIT milliseconds."
- (if (sit-for-millisecs hit-wait) nil ; No input within hit-wait millisecs.
- (let ((pc1 (read-char)))
- (if (or (not (equal pc1 mouse-prefix1))
- (sit-for-millisecs 3)) ; a mouse prefix will have second char
- ;; Can get away with one unread.
- (progn (setq unread-command-events (list pc1))
- nil) ; Next input not mouse event.
- (let ((pc2 (read-char)))
- (if (not (equal pc2 mouse-prefix2))
- (progn (setq unread-command-events (list pc1)) ; put back the ^X
-;;; Too bad can't do two: (setq unread-command-event (list pc1 pc2))
-;;; Well, now we can, but I don't understand this code well enough to fix it...
- (ding) ; user will have to retype that pc2.
- nil) ; This input is not a mouse event.
- ;; Next input has mouse prefix and is within time limit.
- (let ((new-hit (mouse-hit-read))) ; Read the new hit.
- (if (sm::hit-up-p new-hit) ; Ignore up events when timing.
- (mouse-second-hit (- hit-wait (sm::hit-delta new-hit)))
- new-hit ; New down hit within limit, return it.
- ))))))))
-
-(defun sm::window-xy (x y)
- "Find window containing screen coordinates X and Y.
-Returns list (window x y) where x and y are relative to window."
- (or
- (catch 'found
- (eval-in-windows
- (let ((we (window-edges (selected-window))))
- (let ((le (nth 0 we))
- (te (nth 1 we))
- (re (nth 2 we))
- (be (nth 3 we)))
- (if (= re (frame-width))
- ;; include the continuation column with this window
- (setq re (1+ re)))
- (if (= be (frame-height))
- ;; include partial line at bottom of frame with this window
- ;; id est, if window is not multiple of char size.
- (setq be (1+ be)))
-
- (if (and (>= x le) (< x re)
- (>= y te) (< y be))
- (throw 'found
- (list (selected-window) (- x le) (- y te))))))
- t)) ; include minibuffer in eval-in-windows
- ;;If x,y from a real mouse click, we shouldn't get here.
- (list nil x y)
- ))
-
-(defun sm::window-region (loc)
- "Parse LOC into a region symbol.
-Returns one of (text scrollbar modeline minibuffer)"
- (let ((w (sm::loc-w loc))
- (x (sm::loc-x loc))
- (y (sm::loc-y loc)))
- (let ((right (1- (window-width w)))
- (bottom (1- (window-height w))))
- (cond ((minibuffer-window-p w) 'minibuffer)
- ((>= y bottom) 'modeline)
- ((>= x right) 'scrollbar)
- ;; far right column (window separator) is always a scrollbar
- ((and scrollbar-width
- ;; mouse within scrollbar-width of edge.
- (>= x (- right scrollbar-width))
- ;; mouse a few chars past the end of line.
- (>= x (+ 2 (window-line-end w x y))))
- 'scrollbar)
- (t 'text)))))
-
-(defun window-line-end (w x y)
- "Return WINDOW column (ignore X) containing end of line Y"
- (eval-in-window w (save-excursion (move-to-loc (frame-width) y))))
-
-;;;
-;;; The encoding of mouse events into a mousemap.
-;;; These values must agree with coding in emacstool:
-;;;
-(defconst sm::keyword-alist
- '((left . 1) (middle . 2) (right . 4)
- (shift . 8) (control . 16) (meta . 32) (double . 64) (up . 128)
- (text . 256) (scrollbar . 512) (modeline . 1024) (minibuffer . 2048)
- ))
-
-(defun mouse-event-code (hit loc)
- "Maps MOUSE-HIT and LOC into a mouse-code."
-;;;Region is a code for one of text, modeline, scrollbar, or minibuffer.
- (logior (sm::hit-code hit)
- (mouse-region-to-code (sm::window-region loc))))
-
-(defun mouse-region-to-code (region)
- "Returns partial mouse-code for specified REGION."
- (cdr (assq region sm::keyword-alist)))
-
-(defun mouse-list-to-mouse-code (mouse-list)
- "Map a MOUSE-LIST to a mouse-code."
- (apply 'logior
- (mapcar (function (lambda (x)
- (cdr (assq x sm::keyword-alist))))
- mouse-list)))
-
-(defun mouse-code-to-mouse-list (mouse-code)
- "Map a MOUSE-CODE to a mouse-list."
- (apply 'nconc (mapcar
- (function (lambda (x)
- (if (logtest mouse-code (cdr x))
- (list (car x)))))
- sm::keyword-alist)))
-
-(defun mousemap-set (code mousemap value)
- (let* ((alist (cdr mousemap))
- (assq-result (assq code alist)))
- (if assq-result
- (setcdr assq-result value)
- (setcdr mousemap (cons (cons code value) alist)))))
-
-(defun mousemap-get (code mousemap)
- (cdr (assq code (cdr mousemap))))
-
-(defun mouse-lookup (mouse-code)
- "Look up MOUSE-EVENT and return the definition. nil means undefined."
- (or (mousemap-get mouse-code current-local-mousemap)
- (mousemap-get mouse-code current-global-mousemap)))
-
-;;;
-;;; I (jpeck) don't understand the utility of the next four functions
-;;; ask Steven Greenbaum <froud@kestrel>
-;;;
-(defun mouse-mask-lookup (mask list)
- "Args MASK (a bit mask) and LIST (a list of (code . form) pairs).
-Returns a list of elements of LIST whose code or'ed with MASK is non-zero."
- (let ((result nil))
- (while list
- (if (logtest mask (car (car list)))
- (setq result (cons (car list) result)))
- (setq list (cdr list)))
- result))
-
-(defun mouse-union (l l-unique)
- "Return the union of list of mouse (code . form) pairs L and L-UNIQUE,
-where L-UNIQUE is considered to be union'ized already."
- (let ((result l-unique))
- (while l
- (let ((code-form-pair (car l)))
- (if (not (assq (car code-form-pair) result))
- (setq result (cons code-form-pair result))))
- (setq l (cdr l)))
- result))
-
-(defun mouse-union-first-preferred (l1 l2)
- "Return the union of lists of mouse (code . form) pairs L1 and L2,
-based on the code's, with preference going to elements in L1."
- (mouse-union l2 (mouse-union l1 nil)))
-
-(defun mouse-code-function-pairs-of-region (region)
- "Return a list of (code . function) pairs, where each code is
-currently set in the REGION."
- (let ((mask (mouse-region-to-code region)))
- (mouse-union-first-preferred
- (mouse-mask-lookup mask (cdr current-local-mousemap))
- (mouse-mask-lookup mask (cdr current-global-mousemap))
- )))
-
-;;;
-;;; Functions for DESCRIBE-MOUSE-BINDINGS
-;;; And other mouse documentation functions
-;;; Still need a good procedure to print out a help sheet in readable format.
-;;;
-
-(defun one-line-doc-string (function)
- "Returns first line of documentation string for FUNCTION.
-If there is no documentation string, then the string
-\"No documentation\" is returned."
- (while (consp function) (setq function (car function)))
- (let ((doc (documentation function)))
- (if (null doc)
- "No documentation."
- (string-match "^.*$" doc)
- (substring doc 0 (match-end 0)))))
-
-(defun print-mouse-format (binding)
- (princ (car binding))
- (princ ": ")
- (mapcar (function
- (lambda (mouse-list)
- (princ mouse-list)
- (princ " ")))
- (cdr binding))
- (terpri)
- (princ " ")
- (princ (one-line-doc-string (car binding)))
- (terpri)
- )
-
-(defun print-mouse-bindings (region)
- "Prints mouse-event bindings for REGION."
- (mapcar 'print-mouse-format (sm::event-bindings region)))
-
-(defun sm::event-bindings (region)
- "Returns an alist of (function . (mouse-list1 ... mouse-listN)) for REGION,
-where each mouse-list is bound to the function in REGION."
- (let ((mouse-bindings (mouse-code-function-pairs-of-region region))
- (result nil))
- (while mouse-bindings
- (let* ((code-function-pair (car mouse-bindings))
- (current-entry (assoc (cdr code-function-pair) result)))
- (if current-entry
- (setcdr current-entry
- (cons (mouse-code-to-mouse-list (car code-function-pair))
- (cdr current-entry)))
- (setq result (cons (cons (cdr code-function-pair)
- (list (mouse-code-to-mouse-list
- (car code-function-pair))))
- result))))
- (setq mouse-bindings (cdr mouse-bindings))
- )
- result))
-
-(defun describe-mouse-bindings ()
- "Lists all current mouse-event bindings."
- (interactive)
- (with-output-to-temp-buffer "*Help*"
- (princ "Text Region") (terpri)
- (princ "---- ------") (terpri)
- (print-mouse-bindings 'text) (terpri)
- (princ "Modeline Region") (terpri)
- (princ "-------- ------") (terpri)
- (print-mouse-bindings 'modeline) (terpri)
- (princ "Scrollbar Region") (terpri)
- (princ "--------- ------") (terpri)
- (print-mouse-bindings 'scrollbar)))
-
-(defun describe-mouse-briefly (mouse-list)
- "Print a short description of the function bound to MOUSE-LIST."
- (interactive "xDescribe mouse list briefly: ")
- (let ((function (mouse-lookup (mouse-list-to-mouse-code mouse-list))))
- (if function
- (message "%s runs the command %s" mouse-list function)
- (message "%s is undefined" mouse-list))))
-
-(defun mouse-help-menu (function-and-binding)
- (cons (prin1-to-string (car function-and-binding))
- (menu-create ; Two sub-menu items of form ("String" . nil)
- (list (list (one-line-doc-string (car function-and-binding)))
- (list (prin1-to-string (cdr function-and-binding)))))))
-
-(defun mouse-help-region (w x y &optional region)
- "Displays a menu of mouse functions callable in this region."
- (let* ((region (or region (sm::window-region (list w x y))))
- (mlist (mapcar (function mouse-help-menu)
- (sm::event-bindings region)))
- (menu (menu-create (cons (list (symbol-name region)) mlist)))
- (item (sun-menu-evaluate w 0 y menu))
- )))
-
-;;;
-;;; Menu interface functions
-;;;
-;;; use defmenu, because this interface is subject to change
-;;; really need a menu-p, but we use vectorp and the context...
-;;;
-(defun menu-create (items)
- "Functional form for defmenu, given a list of ITEMS returns a menu.
-Each ITEM is a (STRING . VALUE) pair."
- (apply 'vector items)
- )
-
-(defmacro defmenu (menu &rest itemlist)
- "Defines MENU to be a menu, the ITEMS are (STRING . VALUE) pairs.
-See sun-menu-evaluate for interpretation of ITEMS."
- (list 'defconst menu (funcall 'menu-create itemlist))
- )
-
-(defun sun-menu-evaluate (*menu-window* *menu-x* *menu-y* menu)
- "Display a pop-up menu in WINDOW at X Y and evaluate selected item
-of MENU. MENU (or its symbol-value) should be a menu defined by defmenu.
- A menu ITEM is a (STRING . FORM) pair;
-the FORM associated with the selected STRING is evaluated,
-and the resulting value is returned. Generally these FORMs are
-evaluated for their side-effects rather than their values.
- If the selected form is a menu or a symbol whose value is a menu,
-then it is displayed and evaluated as a pullright menu item.
- If the FORM of the first ITEM is nil, the STRING of the item
-is used as a label for the menu, i.e. it's inverted and not selectable."
-
- (if (symbolp menu) (setq menu (symbol-value menu)))
- (eval (sun-menu-internal *menu-window* *menu-x* *menu-y* 4 menu)))
-
-(defun sun-get-frame-data (code)
- "Sends the tty-sub-window escape sequence CODE to terminal,
-and returns a cons of the two numbers in returned escape sequence.
-That is it returns (cons <car> <cdr>) from \"\\E[n;<car>;<cdr>t\".
-CODE values: 13 = Tool-Position, 14 = Size-in-Pixels, 18 = Size-in-Chars."
- (send-string-to-terminal (concat "\033[" (int-to-string code) "t"))
- (let (char str x y)
- (while (not (equal 116 (setq char (read-char)))) ; #\t = 116
- (setq str (cons char str)))
- (setq str (mapconcat 'char-to-string (nreverse str) ""))
- (string-match ";[0-9]*" str)
- (setq y (substring str (1+ (match-beginning 0)) (match-end 0)))
- (setq str (substring str (match-end 0)))
- (string-match ";[0-9]*" str)
- (setq x (substring str (1+ (match-beginning 0)) (match-end 0)))
- (cons (string-to-number y) (string-to-number x))))
-
-(defun sm::font-size ()
- "Returns font size in pixels: (cons Ysize Xsize)"
- (let ((pix (sun-get-frame-data 14)) ; returns size in pixels
- (chr (sun-get-frame-data 18))) ; returns size in chars
- (cons (/ (car pix) (car chr)) (/ (cdr pix) (cdr chr)))))
-
-(defvar sm::menu-kludge-x nil
- "Cached frame-to-window X-Offset for sm::menu-kludge")
-(defvar sm::menu-kludge-y nil
- "Cached frame-to-window Y-Offset for sm::menu-kludge")
-
-(defun sm::menu-kludge ()
- "If sunfns.c uses <Menu_Base_Kludge> this function must be here!"
- (or sm::menu-kludge-y
- (let ((fs (sm::font-size)))
- (setq sm::menu-kludge-y (+ 8 (car fs)) ; a title line and borders
- sm::menu-kludge-x 4))) ; best values depend on .defaults/Menu
- (let ((wl (sun-get-frame-data 13))) ; returns frame location
- (cons (+ (car wl) sm::menu-kludge-y)
- (+ (cdr wl) sm::menu-kludge-x))))
-
-;;;
-;;; Function interface to selection/region
-;;; primitive functions are defined in sunfns.c
-;;;
-(defun sun-yank-selection ()
- "Set mark and yank the contents of the current sunwindows selection.
-Insert contents into the current buffer at point."
- (interactive "*")
- (set-mark-command nil)
- (insert (sun-get-selection)))
-
-(defun sun-select-region (beg end)
- "Set the sunwindows selection to the region in the current buffer."
- (interactive "r")
- (sun-set-selection (buffer-substring beg end)))
-
-;;;
-;;; Support for emacstool
-;;; This closes the window instead of stopping emacs.
-;;;
-(defun suspend-emacstool (&optional stuffstring)
- "Suspend emacstool.
-If running under as a detached process emacstool,
-you don't want to suspend (there is no way to resume),
-just close the window, and wait for reopening."
- (interactive)
- (run-hooks 'suspend-hook)
- (if stuffstring (send-string-to-terminal stuffstring))
- (send-string-to-terminal "\033[2t") ; To close EmacsTool window.
- (run-hooks 'suspend-resume-hook))
-
-(provide 'sun-mouse)
-(provide 'term/sun-mouse) ; have to (require 'term/sun-mouse)
-
-;;; arch-tag: 6e879372-b899-4509-833f-d7f6250e309a
-;;; sun-mouse.el ends here
diff --git a/lisp/term/sun.el b/lisp/term/sun.el
index c3dc773e26b..22b29c92790 100644
--- a/lisp/term/sun.el
+++ b/lisp/term/sun.el
@@ -32,12 +32,12 @@
(defun scroll-down-in-place (n)
(interactive "p")
- (previous-line n)
+ (forward-line (- n))
(scroll-down n))
(defun scroll-up-in-place (n)
(interactive "p")
- (next-line n)
+ (forward-line n)
(scroll-up n))
(defun kill-region-and-unmark (beg end)
@@ -47,14 +47,6 @@
(setq this-command 'kill-region-and-unmark)
(set-mark-command t))
-(defun select-previous-complex-command ()
- "Select Previous-complex-command"
- (interactive)
- (if (zerop (minibuffer-depth))
- (repeat-complex-command 1)
- ;; FIXME: this function does not seem to exist. -stef'01
- (previous-complex-command 1)))
-
(defun rerun-prev-command ()
"Repeat Previous-complex-command."
(interactive)
@@ -93,7 +85,41 @@
;; so we ignore them on the way down
;;
-(defvar sun-raw-prefix (make-sparse-keymap))
+(defvar sun-raw-prefix
+ (let ((map (make-sparse-keymap)))
+ (define-key map "210z" [r3])
+ (define-key map "213z" [r6])
+ (define-key map "214z" [r7])
+ (define-key map "216z" [r9])
+ (define-key map "218z" [r11])
+ (define-key map "220z" [r13])
+ (define-key map "222z" [r15])
+ (define-key map "193z" [redo])
+ (define-key map "194z" [props])
+ (define-key map "195z" [undo])
+ ;; (define-key map "196z" 'ignore) ; Expose-down
+ ;; (define-key map "197z" [put])
+ ;; (define-key map "198z" 'ignore) ; Open-down
+ ;; (define-key map "199z" [get])
+ (define-key map "200z" [find])
+ ;; (define-key map "201z" 'kill-region-and-unmark) ; Delete
+ (define-key map "224z" [f1])
+ (define-key map "225z" [f2])
+ (define-key map "226z" [f3])
+ (define-key map "227z" [f4])
+ (define-key map "228z" [f5])
+ (define-key map "229z" [f6])
+ (define-key map "230z" [f7])
+ (define-key map "231z" [f8])
+ (define-key map "232z" [f9])
+ (define-key map "233z" [f10])
+ (define-key map "234z" [f11])
+ (define-key map "235z" [f12])
+ (define-key map "A" [up]) ; R8
+ (define-key map "B" [down]) ; R14
+ (define-key map "C" [right]) ; R12
+ (define-key map "D" [left]) ; R10
+ map))
;; Since .emacs gets loaded before this file, a hook is supplied
;; for you to put your own bindings in.
@@ -102,88 +128,10 @@
"List of forms to evaluate after setting sun-raw-prefix.")
-;;; This section adds definitions for the emacstool users
-;; emacstool event filter converts function keys to C-x*{c}{lrt}
-;;
-;; for example the Open key (L7) would be encoded as "\C-x*gl"
-;; the control, meta, and shift keys modify the character {lrt}
-;; note that (unshifted) C-l is ",", C-r is "2", and C-t is "4"
-;;
-;; {c} is [a-j] for LEFT, [a-i] for TOP, [a-o] for RIGHT.
-;; A higher level insists on encoding {h,j,l,n}{r} (the arrow keys)
-;; as ANSI escape sequences. Use the shell command
-;; % setkeys noarrows
-;; if you want these to come through for emacstool.
-;;
-;; If you are not using EmacsTool,
-;; you can also use this by creating a .ttyswrc file to do the conversion.
-;; but it won't include the CONTROL, META, or SHIFT keys!
-;;
-;; Important to define SHIFTed sequence before matching unshifted sequence.
-;; (talk about bletcherous old uppercase terminal conventions!*$#@&%*&#$%)
-;; this is worse than C-S/C-Q flow control anyday!
-;; Do *YOU* run in capslock mode?
-;;
-
-;; Note: al, el and gl are trapped by EmacsTool, so they never make it here.
-
-(defvar suntool-map (make-sparse-keymap)
- "*Keymap for Emacstool bindings.")
-
-
-;; Since .emacs gets loaded before this file, a hook is supplied
-;; for you to put your own bindings in.
-
-(defvar suntool-map-hooks nil
- "List of forms to evaluate after setting suntool-map.")
-
-;;
-;; If running under emacstool, arrange to call suspend-emacstool
-;; instead of suspend-emacs.
-;;
-;; First mouse blip is a clue that we are in emacstool.
-;;
-;; C-x C-@ is the mouse command prefix.
-
-(autoload 'sun-mouse-handler "sun-mouse"
- "Sun Emacstool handler for mouse blips (not loaded)." t)
(defun terminal-init-sun ()
"Terminal initialization function for sun."
- (define-key function-key-map "\e[" sun-raw-prefix)
-
- (define-key sun-raw-prefix "210z" [r3])
- (define-key sun-raw-prefix "213z" [r6])
- (define-key sun-raw-prefix "214z" [r7])
- (define-key sun-raw-prefix "216z" [r9])
- (define-key sun-raw-prefix "218z" [r11])
- (define-key sun-raw-prefix "220z" [r13])
- (define-key sun-raw-prefix "222z" [r15])
- (define-key sun-raw-prefix "193z" [redo])
- (define-key sun-raw-prefix "194z" [props])
- (define-key sun-raw-prefix "195z" [undo])
- ;; (define-key sun-raw-prefix "196z" 'ignore) ; Expose-down
- ;; (define-key sun-raw-prefix "197z" [put])
- ;; (define-key sun-raw-prefix "198z" 'ignore) ; Open-down
- ;; (define-key sun-raw-prefix "199z" [get])
- (define-key sun-raw-prefix "200z" [find])
- ;; (define-key sun-raw-prefix "201z" 'kill-region-and-unmark) ; Delete
- (define-key sun-raw-prefix "224z" [f1])
- (define-key sun-raw-prefix "225z" [f2])
- (define-key sun-raw-prefix "226z" [f3])
- (define-key sun-raw-prefix "227z" [f4])
- (define-key sun-raw-prefix "228z" [f5])
- (define-key sun-raw-prefix "229z" [f6])
- (define-key sun-raw-prefix "230z" [f7])
- (define-key sun-raw-prefix "231z" [f8])
- (define-key sun-raw-prefix "232z" [f9])
- (define-key sun-raw-prefix "233z" [f10])
- (define-key sun-raw-prefix "234z" [f11])
- (define-key sun-raw-prefix "235z" [f12])
- (define-key sun-raw-prefix "A" [up]) ; R8
- (define-key sun-raw-prefix "B" [down]) ; R14
- (define-key sun-raw-prefix "C" [right]) ; R12
- (define-key sun-raw-prefix "D" [left]) ; R10
+ (define-key input-decode-map "\e[" sun-raw-prefix)
(global-set-key [r3] 'backward-page)
(global-set-key [r6] 'forward-page)
@@ -207,77 +155,7 @@
(let ((hooks sun-raw-prefix-hooks))
(while hooks
(eval (car hooks))
- (setq hooks (cdr hooks)))))
-
- (define-key suntool-map "gr" 'beginning-of-buffer) ; r7
- (define-key suntool-map "iR" 'backward-page) ; R9
- (define-key suntool-map "ir" 'scroll-down) ; r9
- (define-key suntool-map "kr" 'recenter) ; r11
- (define-key suntool-map "mr" 'end-of-buffer) ; r13
- (define-key suntool-map "oR" 'forward-page) ; R15
- (define-key suntool-map "or" 'scroll-up) ; r15
- (define-key suntool-map "b\M-L" 'rerun-prev-command) ; M-AGAIN
- (define-key suntool-map "b\M-l" 'prev-complex-command) ; M-Again
- (define-key suntool-map "bl" 'redraw-display) ; Again
- (define-key suntool-map "cl" 'list-buffers) ; Props
- (define-key suntool-map "dl" 'undo) ; Undo
- (define-key suntool-map "el" 'ignore) ; Expose-Open
- (define-key suntool-map "fl" 'sun-select-region) ; Put
- (define-key suntool-map "f," 'copy-region-as-kill) ; C-Put
- (define-key suntool-map "gl" 'ignore) ; Open-Open
- (define-key suntool-map "hl" 'sun-yank-selection) ; Get
- (define-key suntool-map "h," 'yank) ; C-Get
- (define-key suntool-map "il" 'research-forward) ; Find
- (define-key suntool-map "i," 're-search-forward) ; C-Find
- (define-key suntool-map "i\M-l" 'research-backward) ; M-Find
- (define-key suntool-map "i\M-," 're-search-backward) ; C-M-Find
-
- (define-key suntool-map "jL" 'yank) ; DELETE
- (define-key suntool-map "jl" 'kill-region-and-unmark) ; Delete
- (define-key suntool-map "j\M-l" 'exchange-point-and-mark) ; M-Delete
- (define-key suntool-map "j,"
- (lambda () (interactive) (pop-mark))) ; C-Delete
-
- (define-key suntool-map "fT" 'shrink-window-horizontally) ; T6
- (define-key suntool-map "gT" 'enlarge-window-horizontally) ; T7
- (define-key suntool-map "ft" 'shrink-window) ; t6
- (define-key suntool-map "gt" 'enlarge-window) ; t7
- (define-key suntool-map "cT" (lambda (n) (interactive "p") (scroll-down n)))
- (define-key suntool-map "dT" (lambda (n) (interactive "p") (scroll-up n)))
- (define-key suntool-map "ct" 'scroll-down-in-place) ; t3
- (define-key suntool-map "dt" 'scroll-up-in-place) ; t4
- (define-key ctl-x-map "*" suntool-map)
-
- (when suntool-map-hooks
- (message "suntool-map-hooks is obsolete! Use term-setup-hook instead!")
- (let ((hooks suntool-map-hooks))
- (while hooks
- (eval (car hooks))
- (setq hooks (cdr hooks)))))
-
- (define-key ctl-x-map "\C-@" 'sun-mouse-once))
-
-(defun emacstool-init ()
- "Set up Emacstool window, if you know you are in an emacstool."
- ;; Make sure sun-mouse and sun-fns are loaded.
- (require 'sun-fns)
- (define-key ctl-x-map "\C-@" 'sun-mouse-handler)
-
- ;; FIXME: this function does not seem to exist either. -stef'01
- (if (< (sun-window-init) 0)
- (message "Not a Sun Window")
- (progn
- (substitute-key-definition 'suspend-emacs 'suspend-emacstool global-map)
- (substitute-key-definition 'suspend-emacs 'suspend-emacstool esc-map)
- (substitute-key-definition 'suspend-emacs 'suspend-emacstool ctl-x-map))
- (send-string-to-terminal
- (concat "\033]lEmacstool - GNU Emacs " emacs-version "\033\\"))))
-
-(defun sun-mouse-once ()
- "Converts to emacstool and sun-mouse-handler on first mouse hit."
- (interactive)
- (emacstool-init)
- (sun-mouse-handler)) ; Now, execute this mouse blip.
+ (setq hooks (cdr hooks))))))
-;;; arch-tag: db761d47-fd7d-42b4-aae1-04fa116b6ba6
+;; arch-tag: db761d47-fd7d-42b4-aae1-04fa116b6ba6
;;; sun.el ends here
diff --git a/lisp/term/tty-colors.el b/lisp/term/tty-colors.el
index 18b07fafc3a..5622efa022d 100644
--- a/lisp/term/tty-colors.el
+++ b/lisp/term/tty-colors.el
@@ -815,8 +815,6 @@ Value is the modified color alist for FRAME."
"Register the default set of colors for a character terminal."
(let* ((colors (cond ((eq window-system 'pc)
msdos-color-values)
- ((eq system-type 'windows-nt)
- w32-tty-standard-colors)
(t tty-standard-colors)))
(color (car colors)))
(while colors
diff --git a/lisp/term/tvi970.el b/lisp/term/tvi970.el
index 1c0bda519ac..7e4ca062143 100644
--- a/lisp/term/tvi970.el
+++ b/lisp/term/tvi970.el
@@ -29,86 +29,80 @@
;;; Code:
+(defvar tvi970-terminal-map
+ (let ((map (make-sparse-keymap)))
+
+ ;; Miscellaneous keys
+ (dolist (key-binding
+ '(;; These are set up by termcap or terminfo
+ ;; ("\eOP" [kp-f1])
+ ;; ("\eOQ" [kp-f2])
+ ;; ("\eOR" [kp-f3])
+ ;; ("\eOS" [kp-f4])
+
+ ;; These might bre set by terminfo.
+ ("\e[H" [home])
+ ("\e[Z" [backtab])
+ ("\e[i" [print])
+ ("\e[@" [insert])
+ ("\e[L" [insertline])
+ ("\e[M" [deleteline])
+ ("\e[U" [next]) ;; actually the `page' key
+
+ ;; These won't be set up by either
+ ("\eOm" [kp-subtract])
+ ("\eOl" [kp-separator])
+ ("\eOn" [kp-decimal])
+ ("\eOM" [kp-enter])
+
+ ;; These won't be set up by either either
+ ("\e[K" [key_eol]) ;; Not an X keysym
+ ("\e[J" [key_eos]) ;; Not an X keysym
+ ("\e[2J" [key_clear]) ;; Not an X keysym
+ ("\e[P" [key_dc]) ;; Not an X keysym
+ ("\e[g" [S-tab]) ;; Not an X keysym
+ ("\e[2N" [clearentry]) ;; Not an X keysym
+ ("\e[2K" [S-clearentry]) ;; Not an X keysym
+ ("\e[E" [?\C-j]) ;; Not an X keysym
+ ("\e[g" [S-backtab]) ;; Not an X keysym
+ ("\e[?1i" [key_sprint]) ;; Not an X keysym
+ ("\e[4h" [key_sic]) ;; Not an X keysym
+ ("\e[4l" [S-delete]) ;; Not an X keysym
+ ("\e[Q" [S-insertline]) ;; Not an X keysym
+ ("\e[1Q" [key_sdl]) ;; Not an X keysym
+ ("\e[19l" [key_seol]) ;; Not an X keysym
+ ("\e[19h" [S-erasepage]) ;; Not an X keysym
+ ("\e[V" [S-page]) ;; Not an X keysym
+ ("\eS" [send]) ;; Not an X keysym
+ ("\e5" [S-send]) ;; Not an X keysym
+ ))
+ (define-key map (car key-binding) (nth 1 key-binding)))
+
+
+ ;; The numeric keypad keys.
+ (dotimes (i 10)
+ (define-key map (format "\eO%c" (+ i ?p))
+ (vector (intern (format "kp-%d" i)))))
+ ;; The numbered function keys.
+ (dotimes (i 16)
+ (define-key map (format "\e?%c" (+ i ?a))
+ (vector (intern (format "f%d" (1+ i)))))
+ (define-key map (format "\e?%c" (+ i ?A))
+ (vector (intern (format "S-f%d" (1+ i))))))
+ map))
+
(defun terminal-init-tvi970 ()
"Terminal initialization function for tvi970."
- (or (lookup-key function-key-map "\e[")
- (define-key function-key-map "\e[" (make-keymap)))
- ;; (or (lookup-key function-key-map "\eO")
- ;; (define-key function-key-map "\eO" (make-keymap)))
-
- ;; Miscellaneous keys
- (mapcar (function (lambda (key-binding)
- (define-key function-key-map
- (car key-binding) (nth 1 key-binding))))
- '(
- ;; These are set up by termcap or terminfo
- ;; ("\eOP" [kp-f1])
- ;; ("\eOQ" [kp-f2])
- ;; ("\eOR" [kp-f3])
- ;; ("\eOS" [kp-f4])
-
- ;; These might br set by terminfo
- ("\e[H" [home])
- ("\e[Z" [backtab])
- ("\e[i" [print])
- ("\e[@" [insert])
- ("\e[L" [insertline])
- ("\e[M" [deleteline])
- ("\e[U" [next]) ;; actually the `page' key
-
- ;; These won't be set up by either
- ("\eOm" [kp-subtract])
- ("\eOl" [kp-separator])
- ("\eOn" [kp-decimal])
- ("\eOM" [kp-enter])
-
- ;; These won't be set up by either either
- ("\e[K" [key_eol]) ;; Not an X keysym
- ("\e[J" [key_eos]) ;; Not an X keysym
- ("\e[2J" [key_clear]) ;; Not an X keysym
- ("\e[P" [key_dc]) ;; Not an X keysym
- ("\e[g" [S-tab]) ;; Not an X keysym
- ("\e[2N" [clearentry]) ;; Not an X keysym
- ("\e[2K" [S-clearentry]) ;; Not an X keysym
- ("\e[E" [?\C-j]) ;; Not an X keysym
- ("\e[g" [S-backtab]) ;; Not an X keysym
- ("\e[?1i" [key_sprint]) ;; Not an X keysym
- ("\e[4h" [key_sic]) ;; Not an X keysym
- ("\e[4l" [S-delete]) ;; Not an X keysym
- ("\e[Q" [S-insertline]) ;; Not an X keysym
- ("\e[1Q" [key_sdl]) ;; Not an X keysym
- ("\e[19l" [key_seol]) ;; Not an X keysym
- ("\e[19h" [S-erasepage]) ;; Not an X keysym
- ("\e[V" [S-page]) ;; Not an X keysym
- ("\eS" [send]) ;; Not an X keysym
- ("\e5" [S-send]) ;; Not an X keysym
- ))
-
- ;; The numeric keypad keys.
- (let ((i 0))
- (while (< i 10)
- (define-key function-key-map
- (format "\eO%c" (+ i ?p))
- (vector (intern (format "kp-%d" i))))
- (setq i (1+ i))))
- ;; The numbered function keys.
- (let ((i 0))
- (while (< i 16)
- (define-key function-key-map
- (format "\e?%c" (+ i ?a))
- (vector (intern (format "f%d" (1+ i)))))
- (define-key function-key-map
- (format "\e?%c" (+ i ?A))
- (vector (intern (format "S-f%d" (1+ i)))))
- (setq i (1+ i))))
-
+ ;; Use inheritance to let the main keymap override these defaults.
+ ;; This way we don't override terminfo-derived settings or settings
+ ;; made in the .emacs file.
+ (let ((m (copy-keymap tvi970-terminal-map)))
+ (set-keymap-parent m (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map m))
(tvi970-set-keypad-mode 1))
-
-;;; Should keypad numbers send ordinary digits or distinct escape sequences?
-(defvar tvi970-keypad-numeric nil
- "Non-nil means the terminal should be in numeric keypad mode.
-Do not set this variable! Call the function `tvi970-set-keypad-mode'.")
+
+;; Should keypad numbers send ordinary digits or distinct escape sequences?
(defun tvi970-set-keypad-mode (&optional arg)
"Set the current mode of the TVI 970 numeric keypad.
In ``numeric keypad mode'', the number keys on the keypad act as
@@ -119,11 +113,11 @@ With no argument, toggle between the two possible modes.
With a positive argument, select alternate keypad mode.
With a negative argument, select numeric keypad mode."
(interactive "P")
- (setq tvi970-keypad-numeric
- (if (null arg)
- (not tvi970-keypad-numeric)
- (> (prefix-numeric-value arg) 0)))
- (send-string-to-terminal (if tvi970-keypad-numeric "\e=" "\e>")))
+ (let ((newval (if (null arg)
+ (not (terminal-parameter nil 'tvi970-keypad-numeric))
+ (> (prefix-numeric-value arg) 0))))
+ (set-terminal-parameter nil 'tvi970-keypad-numeric newval)
+ (send-string-to-terminal (if newval "\e=" "\e>"))))
-;;; arch-tag: c1334cf0-1462-41c3-a963-c077d175f8f0
+;; arch-tag: c1334cf0-1462-41c3-a963-c077d175f8f0
;;; tvi970.el ends here
diff --git a/lisp/term/vt100.el b/lisp/term/vt100.el
index b185a7bb02f..17627db8923 100644
--- a/lisp/term/vt100.el
+++ b/lisp/term/vt100.el
@@ -38,10 +38,9 @@
;; Set up function-key-map entries that termcap and terminfo don't know.
-
(defun terminal-init-vt100 ()
"Terminal initialization function for vt100."
- (load "term/lk201" nil t))
+ (tty-run-terminal-initialization (selected-frame) "lk201"))
;;; Controlling the screen width.
(defvar vt100-wide-mode (= (frame-width) 132)
diff --git a/lisp/term/vt102.el b/lisp/term/vt102.el
index ad780ed5081..67a90a8242c 100644
--- a/lisp/term/vt102.el
+++ b/lisp/term/vt102.el
@@ -1,8 +1,8 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-vt102 ()
- "Terminal initialization function for vt102."
- (load "term/vt100" nil t))
+ "Terminal initialization function for vt102."
+ (tty-run-terminal-initialization (selected-frame) "vt100"))
;;; arch-tag: 6e839cfc-125a-4574-82f1-c23a51f7c50f
;;; vt102.el ends here
diff --git a/lisp/term/vt125.el b/lisp/term/vt125.el
index 2221e597aed..82a7047fef1 100644
--- a/lisp/term/vt125.el
+++ b/lisp/term/vt125.el
@@ -1,8 +1,8 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-vt125 ()
- "Terminal initialization function for vt125."
- (load "term/vt100" nil t))
+ "Terminal initialization function for vt125."
+ (tty-run-terminal-initialization (selected-frame) "vt100"))
;;; arch-tag: 1d92d70f-dd55-4a1d-9088-e215a4883801
;;; vt125.el ends here
diff --git a/lisp/term/vt200.el b/lisp/term/vt200.el
index e1215d15023..78c65c084ce 100644
--- a/lisp/term/vt200.el
+++ b/lisp/term/vt200.el
@@ -1,12 +1,12 @@
;; -*- no-byte-compile: t -*-
;; For our purposes we can treat the vt200 and vt100 almost alike.
;; Most differences are handled by the termcap entry.
-
(defun terminal-init-vt200 ()
- "Terminal initialization function for vt200."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt200."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: 0f78f583-9f32-4237-b106-28bcfff21d89
+;; arch-tag: 0f78f583-9f32-4237-b106-28bcfff21d89
;;; vt200.el ends here
diff --git a/lisp/term/vt201.el b/lisp/term/vt201.el
index 315030ab687..987aee09f3b 100644
--- a/lisp/term/vt201.el
+++ b/lisp/term/vt201.el
@@ -2,10 +2,11 @@
;; For our purposes we can treat the vt200 and vt100 almost alike.
;; Most differences are handled by the termcap entry.
(defun terminal-init-vt201 ()
- "Terminal initialization function for vt201."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt201."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: a6abb38f-60ea-449e-a9e9-3fb8572c52ae
+;; arch-tag: a6abb38f-60ea-449e-a9e9-3fb8572c52ae
;;; vt201.el ends here
diff --git a/lisp/term/vt220.el b/lisp/term/vt220.el
index cccd2a6dfb7..f9439e0eff7 100644
--- a/lisp/term/vt220.el
+++ b/lisp/term/vt220.el
@@ -2,10 +2,11 @@
;; For our purposes we can treat the vt200 and vt100 almost alike.
;; Most differences are handled by the termcap entry.
(defun terminal-init-vt220 ()
- "Terminal initialization function for vt220."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt220."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: 98fc4867-a20d-46a1-a276-d7be31e49871
+;; arch-tag: 98fc4867-a20d-46a1-a276-d7be31e49871
;;; vt220.el ends here
diff --git a/lisp/term/vt240.el b/lisp/term/vt240.el
index bb3931edac8..0aea10bf982 100644
--- a/lisp/term/vt240.el
+++ b/lisp/term/vt240.el
@@ -2,10 +2,11 @@
;; For our purposes we can treat the vt200 and vt100 almost alike.
;; Most differences are handled by the termcap entry.
(defun terminal-init-vt240 ()
- "Terminal initialization function for vt240."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt240."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: d9f88e9c-02dc-49ff-871c-a415f08e4eb7
+;; arch-tag: d9f88e9c-02dc-49ff-871c-a415f08e4eb7
;;; vt240.el ends here
diff --git a/lisp/term/vt300.el b/lisp/term/vt300.el
index ff600f47a1e..d19f847588b 100644
--- a/lisp/term/vt300.el
+++ b/lisp/term/vt300.el
@@ -1,9 +1,10 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-vt300 ()
- "Terminal initialization function for vt300."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt300."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: 876831c9-a6f2-444a-b033-706e6fbc149f
+;; arch-tag: 876831c9-a6f2-444a-b033-706e6fbc149f
;;; vt300.el ends here
diff --git a/lisp/term/vt320.el b/lisp/term/vt320.el
index fb7772c7b5b..1d36c9d933a 100644
--- a/lisp/term/vt320.el
+++ b/lisp/term/vt320.el
@@ -1,9 +1,10 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-vt320 ()
- "Terminal initialization function for vt320."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt320."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: f9f4c954-0b9e-45f9-b450-a320d32abd9c
+;; arch-tag: f9f4c954-0b9e-45f9-b450-a320d32abd9c
;;; vt320.el ends here
diff --git a/lisp/term/vt400.el b/lisp/term/vt400.el
index 97c0c5d7372..78af2a37197 100644
--- a/lisp/term/vt400.el
+++ b/lisp/term/vt400.el
@@ -1,9 +1,10 @@
;; -*- no-byte-compile: t -*-
(defun terminal-init-vt400 ()
- "Terminal initialization function for vt400."
- (load "term/vt100" nil t)
+ "Terminal initialization function for vt400."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: a70809c5-6b21-42cc-ba20-536683e5e7d5
+;; arch-tag: a70809c5-6b21-42cc-ba20-536683e5e7d5
;;; vt400.el ends here
diff --git a/lisp/term/vt420.el b/lisp/term/vt420.el
index 65ffa759c17..6547557950a 100644
--- a/lisp/term/vt420.el
+++ b/lisp/term/vt420.el
@@ -1,9 +1,10 @@
;; -*- no-byte-compile: t -*-
-(defun terminal-init-vt420 ()
- "Terminal initialization function for vt420."
- (load "term/vt100" nil t)
+(defun terminal-init-vt420
+ "Terminal initialization function for vt420."
+ (tty-run-terminal-initialization (selected-frame) "vt100")
;; Make F11 an escape key.
- (define-key function-key-map "\e[23~" [?\e]))
+ (define-key input-decode-map "\e[23~" [f11]) ;Probably redundant.
+ (define-key local-function-key-map [f11] [?\e]))
-;;; arch-tag: df2f897c-3a12-4b3c-9259-df089f96c160
+;; arch-tag: df2f897c-3a12-4b3c-9259-df089f96c160
;;; vt420.el ends here
diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el
index 86d8d6560d2..7fd84a898fc 100644
--- a/lisp/term/w32-win.el
+++ b/lisp/term/w32-win.el
@@ -68,8 +68,8 @@
;; An alist of X options and the function which handles them. See
;; ../startup.el.
-(if (not (eq window-system 'w32))
- (error "%s: Loading w32-win.el but not compiled for w32" (invocation-name)))
+;; (if (not (eq window-system 'w32))
+;; (error "%s: Loading w32-win.el but not compiled for w32" (invocation-name)))
(require 'frame)
(require 'mouse)
@@ -79,8 +79,18 @@
(require 'menu-bar)
(require 'dnd)
(require 'code-pages)
+(require 'w32-vars)
+
+;; Keep an obsolete alias for w32-focus-frame in case it is used by code
+;; outside Emacs.
+(define-obsolete-function-alias 'w32-focus-frame 'x-focus-frame "23.1")
(defvar xlfd-regexp-registry-subnum)
+(defvar w32-color-map) ;; defined in w32fns.c
+
+(declare-function w32-send-sys-command) ;; Defined in C.
+(declare-function w32-select-font) ;; Defined in C.
+(declare-function set-message-beep) ;; Defined in C.
;; Conditional on new-fontset so bootstrapping works on non-GUI compiles
(if (fboundp 'new-fontset)
@@ -89,9 +99,6 @@
;; The following definition is used for debugging scroll bar events.
;(defun w32-handle-scroll-bar-event (event) (interactive "e") (princ event))
-;; Handle mouse-wheel events with mwheel.
-(mouse-wheel-mode 1)
-
(defun w32-drag-n-drop-debug (event)
"Print the drag-n-drop EVENT in a readable form."
(interactive "e")
@@ -111,7 +118,7 @@ Switch to a buffer editing the last file dropped."
(y (cdr coords)))
(if (and (> x 0) (> y 0))
(set-frame-selected-window nil window))
- (mapcar (lambda (file-name)
+ (mapc (lambda (file-name)
(let ((f (subst-char-in-string ?\\ ?/ file-name))
(coding (or file-name-coding-system
default-file-name-coding-system)))
@@ -1039,58 +1046,19 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
;;;; Function keys
-;;; make f10 activate the real menubar rather than the mini-buffer menu
-;;; navigation feature.
-(defun menu-bar-open (&optional frame)
- "Start key navigation of the menu bar in FRAME.
-
-This initially activates the first menu-bar item, and you can then navigate
-with the arrow keys, select a menu entry with the Return key or cancel with
-the Escape key. If FRAME has no menu bar, this function does nothing.
-
-If FRAME is nil or not given, use the selected frame."
- (interactive "i")
- (w32-send-sys-command ?\xf100 frame))
-;
-(global-set-key [f10] 'menu-bar-open)
-
-(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
- global-map)
-
-(define-key function-key-map [S-tab] [backtab])
-
+ ;;; make f10 activate the real menubar rather than the mini-buffer menu
+ ;;; navigation feature.
+ (defun menu-bar-open (&optional frame)
+ "Start key navigation of the menu bar in FRAME.
+
+ This initially activates the first menu-bar item, and you can then navigate
+ with the arrow keys, select a menu entry with the Return key or cancel with
+ the Escape key. If FRAME has no menu bar, this function does nothing.
+
+ If FRAME is nil or not given, use the selected frame."
+ (interactive "i")
+ (w32-send-sys-command ?\xf100 frame))
-;;; Do the actual Windows setup here; the above code just defines
-;;; functions and variables that we use now.
-
-(setq command-line-args (x-handle-args command-line-args))
-
-;;; Make sure we have a valid resource name.
-(or (stringp x-resource-name)
- (setq x-resource-name
- ;; Change any . or * characters in x-resource-name to hyphens,
- ;; so as not to choke when we use it in X resource queries.
- (replace-regexp-in-string "[.*]" "-" (invocation-name))))
-
-;; For the benefit of older Emacses (19.27 and earlier) that are sharing
-;; the same lisp directory, don't pass the third argument unless we seem
-;; to have the multi-display support.
-(if (fboundp 'x-close-connection)
- (x-open-connection ""
- x-command-line-resources
- ;; Exit Emacs with fatal error if this fails.
- t)
- (x-open-connection ""
- x-command-line-resources))
-
-(setq frame-creation-function 'x-create-frame-with-faces)
-
-(setq x-cut-buffer-max (min (- (/ (x-server-max-request-size) 2) 100)
- x-cut-buffer-max))
-
-;; W32 expects the menu bar cut and paste commands to use the clipboard.
-;; This has ,? to match both on Sunos and on Solaris.
-(menu-bar-enable-clipboard)
;; W32 systems have different fonts than commonly found on X, so
;; we define our own standard fontset here.
@@ -1103,120 +1071,10 @@ European languages which are distributed with Windows as
See the documentation of `create-fontset-from-fontset-spec' for the format.")
-;; Conditional on new-fontset so bootstrapping works on non-GUI compiles
-(if (fboundp 'new-fontset)
- (progn
- ;; Setup the default fontset.
- (setup-default-fontset)
- ;; Enable Japanese fonts on Windows to be used by default.
- (set-fontset-font nil (make-char 'katakana-jisx0201)
- '("*" . "JISX0208-SJIS"))
- (set-fontset-font nil (make-char 'latin-jisx0201)
- '("*" . "JISX0208-SJIS"))
- (set-fontset-font nil (make-char 'japanese-jisx0208)
- '("*" . "JISX0208-SJIS"))
- (set-fontset-font nil (make-char 'japanese-jisx0208-1978)
- '("*" . "JISX0208-SJIS"))
- ;; Create the standard fontset.
- (create-fontset-from-fontset-spec w32-standard-fontset-spec t)
- ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1,...).
- (create-fontset-from-x-resource)
- ;; Try to create a fontset from a font specification which comes
- ;; from initial-frame-alist, default-frame-alist, or X resource.
- ;; A font specification in command line argument (i.e. -fn XXXX)
- ;; should be already in default-frame-alist as a `font'
- ;; parameter. However, any font specifications in site-start
- ;; library, user's init file (.emacs), and default.el are not
- ;; yet handled here.
-
- (let ((font (or (cdr (assq 'font initial-frame-alist))
- (cdr (assq 'font default-frame-alist))
- (x-get-resource "font" "Font")))
- xlfd-fields resolved-name)
- (if (and font
- (not (query-fontset font))
- (setq resolved-name (x-resolve-font-name font))
- (setq xlfd-fields (x-decompose-font-name font)))
- (if (string= "fontset"
- (aref xlfd-fields xlfd-regexp-registry-subnum))
- (new-fontset font
- (x-complement-fontset-spec xlfd-fields nil))
- ;; Create a fontset from FONT. The fontset name is
- ;; generated from FONT.
- (create-fontset-from-ascii-font font
- resolved-name "startup"))))))
-
-;; Apply a geometry resource to the initial frame. Put it at the end
-;; of the alist, so that anything specified on the command line takes
-;; precedence.
-(let* ((res-geometry (x-get-resource "geometry" "Geometry"))
- parsed)
- (if res-geometry
- (progn
- (setq parsed (x-parse-geometry res-geometry))
- ;; If the resource specifies a position,
- ;; call the position and size "user-specified".
- (if (or (assq 'top parsed) (assq 'left parsed))
- (setq parsed (cons '(user-position . t)
- (cons '(user-size . t) parsed))))
- ;; All geometry parms apply to the initial frame.
- (setq initial-frame-alist (append initial-frame-alist parsed))
- ;; The size parms apply to all frames.
- (if (assq 'height parsed)
- (push (cons 'height (cdr (assq 'height parsed)))
- default-frame-alist))
- (if (assq 'width parsed)
- (push (cons 'width (cdr (assq 'width parsed)))
- default-frame-alist)))))
-
-;; Check the reverseVideo resource.
-(let ((case-fold-search t))
- (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
- (if (and rv (string-match "^\\(true\\|yes\\|on\\)$" rv))
- (push '(reverse . t) default-frame-alist))))
-
(defun x-win-suspend-error ()
"Report an error when a suspend is attempted."
(error "Suspending an Emacs running under W32 makes no sense"))
-(add-hook 'suspend-hook 'x-win-suspend-error)
-
-;;; Turn off window-splitting optimization; w32 is usually fast enough
-;;; that this is only annoying.
-(setq split-window-keep-point t)
-
-;; Don't show the frame name; that's redundant.
-(setq-default mode-line-frame-identification " ")
-
-;;; Set to a system sound if you want a fancy bell.
-(set-message-beep 'ok)
-
-;; Remap some functions to call w32 common dialogs
-
-(defun internal-face-interactive (what &optional bool)
- (let* ((fn (intern (concat "face-" what)))
- (prompt (concat "Set " what " of face "))
- (face (read-face-name prompt))
- (default (if (fboundp fn)
- (or (funcall fn face (selected-frame))
- (funcall fn 'default (selected-frame)))))
- (fn-win (intern (concat (symbol-name window-system) "-select-" what)))
- value)
- (setq value
- (cond ((fboundp fn-win)
- (funcall fn-win))
- ((eq bool 'color)
- (completing-read (concat prompt " " (symbol-name face) " to: ")
- (mapcar (function (lambda (color)
- (cons color color)))
- x-colors)
- nil nil nil nil default))
- (bool
- (y-or-n-p (concat "Should face " (symbol-name face)
- " be " bool "? ")))
- (t
- (read-string (concat prompt " " (symbol-name face) " to: ")
- nil nil default))))
- (list face (if (equal value "") nil value))))
+
(defun mouse-set-font (&rest fonts)
"Select an Emacs font from a list of known good fonts and fontsets.
@@ -1257,7 +1115,131 @@ pop-up menu are unaffected by `w32-list-proportional-fonts')."
(png "libpng13d.dll" "libpng13.dll" "libpng12d.dll" "libpng12.dll" "libpng.dll")
(jpeg "jpeg62.dll" "libjpeg.dll" "jpeg-62.dll" "jpeg.dll")
(tiff "libtiff3.dll" "libtiff.dll")
- (gif "giflib4.dll" "libungif4.dll" "libungif.dll")))
+ (gif "giflib4.dll" "libungif4.dll" "libungif.dll")
+ (svg "librsvg-2-2.dll")
+ (gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
+ (glib "libglib-2.0-0.dll")))
+
+;;; multi-tty support
+(defvar w32-initialized nil
+ "Non-nil if the w32 window system has been initialized.")
+
+(defun w32-initialize-window-system ()
+ "Initialize Emacs for W32 GUI frames."
+
+ ;; Do the actual Windows setup here; the above code just defines
+ ;; functions and variables that we use now.
+
+ (setq command-line-args (x-handle-args command-line-args))
+
+ ;; Make sure we have a valid resource name.
+ (or (stringp x-resource-name)
+ (setq x-resource-name
+ ;; Change any . or * characters in x-resource-name to hyphens,
+ ;; so as not to choke when we use it in X resource queries.
+ (replace-regexp-in-string "[.*]" "-" (invocation-name))))
+
+ (x-open-connection "" x-command-line-resources
+ ;; Exit with a fatal error if this fails and we
+ ;; are the initial display
+ (eq initial-window-system 'w32))
+
+ ;; Setup the default fontset.
+ (setup-default-fontset)
+
+ ;; Enable Japanese fonts on Windows to be used by default.
+ (set-fontset-font nil (make-char 'katakana-jisx0201)
+ '("*" . "JISX0208-SJIS"))
+ (set-fontset-font nil (make-char 'latin-jisx0201)
+ '("*" . "JISX0208-SJIS"))
+ (set-fontset-font nil (make-char 'japanese-jisx0208)
+ '("*" . "JISX0208-SJIS"))
+ (set-fontset-font nil (make-char 'japanese-jisx0208-1978)
+ '("*" . "JISX0208-SJIS"))
+
+ ;; Create the standard fontset.
+ (create-fontset-from-fontset-spec w32-standard-fontset-spec t)
+ ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1,...).
+ (create-fontset-from-x-resource)
+ ;; Try to create a fontset from a font specification which comes
+ ;; from initial-frame-alist, default-frame-alist, or X resource.
+ ;; A font specification in command line argument (i.e. -fn XXXX)
+ ;; should be already in default-frame-alist as a `font'
+ ;; parameter. However, any font specifications in site-start
+ ;; library, user's init file (.emacs), and default.el are not
+ ;; yet handled here.
+
+ (let ((font (or (cdr (assq 'font initial-frame-alist))
+ (cdr (assq 'font default-frame-alist))
+ (x-get-resource "font" "Font")))
+ xlfd-fields resolved-name)
+ (if (and font
+ (not (query-fontset font))
+ (setq resolved-name (x-resolve-font-name font))
+ (setq xlfd-fields (x-decompose-font-name font)))
+ (if (string= "fontset"
+ (aref xlfd-fields xlfd-regexp-registry-subnum))
+ (new-fontset font
+ (x-complement-fontset-spec xlfd-fields nil))
+ ;; Create a fontset from FONT. The fontset name is
+ ;; generated from FONT.
+ (create-fontset-from-ascii-font font
+ resolved-name "startup"))))
+
+ ;; Apply a geometry resource to the initial frame. Put it at the end
+ ;; of the alist, so that anything specified on the command line takes
+ ;; precedence.
+ (let* ((res-geometry (x-get-resource "geometry" "Geometry"))
+ parsed)
+ (if res-geometry
+ (progn
+ (setq parsed (x-parse-geometry res-geometry))
+ ;; If the resource specifies a position,
+ ;; call the position and size "user-specified".
+ (if (or (assq 'top parsed) (assq 'left parsed))
+ (setq parsed (cons '(user-position . t)
+ (cons '(user-size . t) parsed))))
+ ;; All geometry parms apply to the initial frame.
+ (setq initial-frame-alist (append initial-frame-alist parsed))
+ ;; The size parms apply to all frames.
+ (if (assq 'height parsed)
+ (push (cons 'height (cdr (assq 'height parsed)))
+ default-frame-alist))
+ (if (assq 'width parsed)
+ (push (cons 'width (cdr (assq 'width parsed)))
+ default-frame-alist)))))
+
+ ;; Check the reverseVideo resource.
+ (let ((case-fold-search t))
+ (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
+ (if (and rv (string-match "^\\(true\\|yes\\|on\\)$" rv))
+ (push '(reverse . t) default-frame-alist))))
+
+ ;; Don't let Emacs suspend under w32 gui
+ (add-hook 'suspend-hook 'x-win-suspend-error)
+
+ ;; Turn off window-splitting optimization; w32 is usually fast enough
+ ;; that this is only annoying.
+ (setq split-window-keep-point t)
+
+ ;; Turn on support for mouse wheels
+ (mouse-wheel-mode 1)
+
+ ;; W32 expects the menu bar cut and paste commands to use the clipboard.
+ (menu-bar-enable-clipboard)
+
+ ;; Don't show the frame name; that's redundant.
+ (setq-default mode-line-frame-identification " ")
+
+ ;; Set to a system sound if you want a fancy bell.
+ (set-message-beep 'ok)
+ (setq w32-initialized t))
+
+(add-to-list 'handle-args-function-alist '(w32 . x-handle-args))
+(add-to-list 'frame-creation-function-alist '(w32 . x-create-frame-with-faces))
+(add-to-list 'window-system-initialization-alist '(w32 . w32-initialize-window-system))
+
+(provide 'w32-win)
;; arch-tag: 69fb1701-28c2-4890-b351-3d1fe4b4f166
;;; w32-win.el ends here
diff --git a/lisp/term/w32console.el b/lisp/term/w32console.el
new file mode 100644
index 00000000000..f45d7e0ad7a
--- /dev/null
+++ b/lisp/term/w32console.el
@@ -0,0 +1,65 @@
+;;; w32console.el -- Setup w32 console keys and colors.
+
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+
+;; Author: FSF
+;; Keywords: terminals
+
+;; 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 3, 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:
+
+;; W32 uses different color indexes than standard:
+
+(defvar w32-tty-standard-colors
+ '(("black" 0 0 0 0)
+ ("blue" 1 0 0 52480) ; MediumBlue
+ ("green" 2 8704 35584 8704) ; ForestGreen
+ ("cyan" 3 0 52736 53504) ; DarkTurquoise
+ ("red" 4 45568 8704 8704) ; FireBrick
+ ("magenta" 5 35584 0 35584) ; DarkMagenta
+ ("brown" 6 40960 20992 11520) ; Sienna
+ ("lightgray" 7 48640 48640 48640) ; Gray
+ ("darkgray" 8 26112 26112 26112) ; Gray40
+ ("lightblue" 9 0 0 65535) ; Blue
+ ("lightgreen" 10 0 65535 0) ; Green
+ ("lightcyan" 11 0 65535 65535) ; Cyan
+ ("lightred" 12 65535 0 0) ; Red
+ ("lightmagenta" 13 65535 0 65535) ; Magenta
+ ("yellow" 14 65535 65535 0) ; Yellow
+ ("white" 15 65535 65535 65535))
+"A list of VGA console colors, their indices and 16-bit RGB values.")
+
+(defun terminal-init-w32console ()
+ "Terminal initialization function for w32 console."
+ ;; Share function key initialization with w32 gui frames
+ (x-setup-function-keys (selected-frame))
+ (let* ((colors w32-tty-standard-colors)
+ (color (car colors)))
+ (tty-color-clear)
+ (while colors
+ (tty-color-define (car color) (cadr color) (cddr color))
+ (setq colors (cdr colors)
+ color (car colors))))
+ (clear-face-cache)
+ (tty-set-up-initial-frame-faces)
+ (run-hooks 'terminal-init-w32-hook))
+
+;; arch-tag: 3195fd5e-ab86-4a46-b1dc-4f7a8c8deff3
diff --git a/lisp/term/wyse50.el b/lisp/term/wyse50.el
index c0e4334f522..7c66be9397c 100644
--- a/lisp/term/wyse50.el
+++ b/lisp/term/wyse50.el
@@ -38,76 +38,84 @@
;;; Code:
+(defvar wyse50-terminal-map
+ (let ((map (make-sparse-keymap)))
+ (dolist (key-definition
+ '( ;; These might be set up by termcap and terminfo
+ ("\C-k" [up])
+ ("\C-j" [down])
+ ("\C-l" [right])
+ ("\C-h" [left])
+ ("\^a@\^m" [f1])
+ ("\^aA\^m" [f2])
+ ("\^aB\^m" [f3])
+ ("\^aC\^m" [f4])
+ ("\^aD\^m" [f5])
+ ("\^aE\^m" [f6])
+ ("\^aF\^m" [f7])
+ ("\^aG\^m" [f8])
+ ("\^aH\^m" [f9])
+
+ ;; These might be set up by terminfo
+ ("\eK" [next])
+ ("\eT" [clearline])
+ ("\^^" [home])
+ ("\e\^^" [end])
+ ("\eQ" [insert])
+ ("\eE" [insertline])
+ ("\eR" [deleteline])
+ ("\eP" [print])
+ ("\er" [replace])
+ ("\^aI\^m" [f10])
+ ("\^aJ\^m" [f11])
+ ("\^aK\^m" [f12])
+ ("\^aL\^m" [f13])
+ ("\^aM\^m" [f14])
+ ("\^aN\^m" [f15])
+ ("\^aO\^m" [f16])
+ ("\^a`\^m" [f17])
+ ("\^aa\^m" [f18])
+ ("\^ab\^m" [f19])
+ ("\^ac\^m" [f20])
+ ("\^ad\^m" [f21])
+ ("\^ae\^m" [f22])
+ ("\^af\^m" [f23])
+ ("\^ag\^m" [f24])
+ ("\^ah\^m" [f25])
+ ("\^ai\^m" [f26])
+ ("\^aj\^m" [f27])
+ ("\^ak\^m" [f28])
+ ("\^al\^m" [f29])
+ ("\^am\^m" [f30])
+ ("\^an\^m" [f31])
+ ("\^ao\^m" [f32])
+
+ ;; Terminfo may know about these, but X won't
+ ("\eI" [key-stab]) ;; Not an X keysym
+ ("\eJ" [key-snext]) ;; Not an X keysym
+ ("\eY" [key-clear]) ;; Not an X keysym
+
+ ;; These are totally strange :-)
+ ("\eW" [?\C-?]) ;; Not an X keysym
+ ("\^a\^k\^m" [funct-up]) ;; Not an X keysym
+ ("\^a\^j\^m" [funct-down]) ;; Not an X keysym
+ ("\^a\^l\^m" [funct-right]) ;; Not an X keysym
+ ("\^a\^h\^m" [funct-left]) ;; Not an X keysym
+ ("\^a\^m\^m" [funct-return]) ;; Not an X keysym
+ ("\^a\^i\^m" [funct-tab]) ;; Not an X keysym
+ ))
+ (define-key map
+ (car key-definition) (nth 1 key-definition)))
+ map))
+
(defun terminal-init-wyse50 ()
"Terminal initialization function for wyse50."
- (define-key function-key-map "\C-a" (make-keymap))
- (mapcar (function (lambda (key-definition)
- (define-key function-key-map
- (car key-definition) (nth 1 key-definition))))
- '(
- ;; These might be set up by termcap and terminfo
- ("\C-k" [up])
- ("\C-j" [down])
- ("\C-l" [right])
- ("\C-h" [left])
- ("\^a@\^m" [f1])
- ("\^aA\^m" [f2])
- ("\^aB\^m" [f3])
- ("\^aC\^m" [f4])
- ("\^aD\^m" [f5])
- ("\^aE\^m" [f6])
- ("\^aF\^m" [f7])
- ("\^aG\^m" [f8])
- ("\^aH\^m" [f9])
-
- ;; These might be set up by terminfo
- ("\eK" [next])
- ("\eT" [clearline])
- ("\^^" [home])
- ("\e\^^" [end])
- ("\eQ" [insert])
- ("\eE" [insertline])
- ("\eR" [deleteline])
- ("\eP" [print])
- ("\er" [replace])
- ("\^aI\^m" [f10])
- ("\^aJ\^m" [f11])
- ("\^aK\^m" [f12])
- ("\^aL\^m" [f13])
- ("\^aM\^m" [f14])
- ("\^aN\^m" [f15])
- ("\^aO\^m" [f16])
- ("\^a`\^m" [f17])
- ("\^aa\^m" [f18])
- ("\^ab\^m" [f19])
- ("\^ac\^m" [f20])
- ("\^ad\^m" [f21])
- ("\^ae\^m" [f22])
- ("\^af\^m" [f23])
- ("\^ag\^m" [f24])
- ("\^ah\^m" [f25])
- ("\^ai\^m" [f26])
- ("\^aj\^m" [f27])
- ("\^ak\^m" [f28])
- ("\^al\^m" [f29])
- ("\^am\^m" [f30])
- ("\^an\^m" [f31])
- ("\^ao\^m" [f32])
-
- ;; Terminfo may know about these, but X won't
- ("\eI" [key-stab]) ;; Not an X keysym
- ("\eJ" [key-snext]) ;; Not an X keysym
- ("\eY" [key-clear]) ;; Not an X keysym
-
- ;; These are totally strange :-)
- ("\eW" [?\C-?]) ;; Not an X keysym
- ("\^a\^k\^m" [funct-up]) ;; Not an X keysym
- ("\^a\^j\^m" [funct-down]) ;; Not an X keysym
- ("\^a\^l\^m" [funct-right]) ;; Not an X keysym
- ("\^a\^h\^m" [funct-left]) ;; Not an X keysym
- ("\^a\^m\^m" [funct-return]) ;; Not an X keysym
- ("\^a\^i\^m" [funct-tab]) ;; Not an X keysym
- ))
+ ;; Use inheritance to let the main keymap override these defaults.
+ ;; This way we don't override terminfo-derived settings or settings
+ ;; made in the .emacs file.
+ (let ((m (copy-keymap wyse50-terminal-map)))
+ (set-keymap-parent m (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map m))
;; Miscellaneous hacks
@@ -126,29 +134,29 @@
(concat "\ea23R" (1+ (frame-width)) "C\eG0"))))))
(defun enable-arrow-keys ()
- "To be called by term-setup-hook. Overrides 6 Emacs standard keys
+ "To be called by `term-setup-hook'. Overrides 6 Emacs standard keys
whose functions are then typed as follows:
C-a Funct Left-arrow
C-h M-?
LFD Funct Return, some modes override down-arrow via LFD
C-k CLR Line
C-l Scrn CLR
-M-r M-x move-to-window-line, Funct up-arrow or down-arrow are similar
-"
+M-r M-x move-to-window-line, Funct up-arrow or down-arrow are similar"
(interactive)
- (mapcar (function (lambda (key-definition)
- (global-set-key (car key-definition)
- (nth 1 key-definition))))
- ;; By unsetting C-a and then binding it to a prefix, we
- ;; allow the rest of the function keys which start with C-a
- ;; to be recognized.
- '(("\C-a" nil)
- ("\C-k" nil)
- ("\C-j" nil)
- ("\C-l" nil)
- ("\C-h" nil)
- ("\er" nil)))
+ ;; Not needed any more now that we use input-decode-map.
+ ;; (dolist (key-definition
+ ;; ;; By unsetting C-a and then binding it to a prefix, we
+ ;; ;; allow the rest of the function keys which start with C-a
+ ;; ;; to be recognized.
+ ;; '(("\C-a" nil)
+ ;; ("\C-k" nil)
+ ;; ("\C-j" nil)
+ ;; ("\C-l" nil)
+ ;; ("\C-h" nil)
+ ;; ("\er" nil)))
+ ;; (global-set-key (car key-definition)
+ ;; (nth 1 key-definition)))
(fset 'enable-arrow-keys nil))
-;;; arch-tag: b6a05d37-eead-4cf6-b997-0f956c68881c
+;; arch-tag: b6a05d37-eead-4cf6-b997-0f956c68881c
;;; wyse50.el ends here
diff --git a/lisp/term/x-win.el b/lisp/term/x-win.el
index 8de5b902e18..f058c877ab8 100644
--- a/lisp/term/x-win.el
+++ b/lisp/term/x-win.el
@@ -25,10 +25,16 @@
;;; Commentary:
-;; X-win.el: this file is loaded from ../lisp/startup.el when it recognizes
-;; that X windows are to be used. Command line switches are parsed and those
-;; pertaining to X are processed and removed from the command line. The
-;; X display is opened and hooks are set for popping up the initial window.
+;; X-win.el: this file defines functions to initialize the X window
+;; system and process X-specific command line parameters before
+;; creating the first X frame.
+
+;; Note that contrary to previous Emacs versions, the act of loading
+;; this file should not have the side effect of initializing the
+;; window system or processing command line arguments (this file is
+;; now loaded in loadup.el). See the variables
+;; `handle-args-function-alist' and
+;; `window-system-initialization-alist' for more details.
;; startup.el will then examine startup files, and eventually call the hooks
;; which create the first window(s).
@@ -65,7 +71,7 @@
;; An alist of X options and the function which handles them. See
;; ../startup.el.
-(if (not (eq window-system 'x))
+(if (not (fboundp 'x-create-frame))
(error "%s: Loading x-win.el but not compiled for X" (invocation-name)))
(require 'frame)
@@ -266,7 +272,7 @@ See also `emacs-session-save'.")
If the directory ~/.emacs.d exists, we make a filename in there, otherwise
a file in the home directory."
(let ((basename (concat "session." session-id))
- (emacs-dir "~/.emacs.d/"))
+ (emacs-dir user-emacs-directory))
(expand-file-name (if (file-directory-p emacs-dir)
(concat emacs-dir basename)
(concat "~/.emacs-" basename)))))
@@ -395,6 +401,7 @@ exists."
(defconst x-pointer-ur-angle 148)
(defconst x-pointer-watch 150)
(defconst x-pointer-xterm 152)
+(defconst x-pointer-invisible 255)
;;
;; Available colors
@@ -1170,27 +1177,39 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
;;;; Function keys
-(substitute-key-definition 'suspend-emacs 'iconify-or-deiconify-frame
- global-map)
-
-;; Map certain keypad keys into ASCII characters
-;; that people usually expect.
-(define-key function-key-map [backspace] [127])
-(define-key function-key-map [delete] [127])
-(define-key function-key-map [tab] [?\t])
-(define-key function-key-map [linefeed] [?\n])
-(define-key function-key-map [clear] [?\C-l])
-(define-key function-key-map [return] [?\C-m])
-(define-key function-key-map [escape] [?\e])
-(define-key function-key-map [M-backspace] [?\M-\d])
-(define-key function-key-map [M-delete] [?\M-\d])
-(define-key function-key-map [M-tab] [?\M-\t])
-(define-key function-key-map [M-linefeed] [?\M-\n])
-(define-key function-key-map [M-clear] [?\M-\C-l])
-(define-key function-key-map [M-return] [?\M-\C-m])
-(define-key function-key-map [M-escape] [?\M-\e])
-(define-key function-key-map [iso-lefttab] [backtab])
-(define-key function-key-map [S-iso-lefttab] [backtab])
+(defvar x-alternatives-map
+ (let ((map (make-sparse-keymap)))
+ ;; Map certain keypad keys into ASCII characters that people usually expect.
+ (define-key map [backspace] [127])
+ (define-key map [delete] [127])
+ (define-key map [tab] [?\t])
+ (define-key map [linefeed] [?\n])
+ (define-key map [clear] [?\C-l])
+ (define-key map [return] [?\C-m])
+ (define-key map [escape] [?\e])
+ (define-key map [M-backspace] [?\M-\d])
+ (define-key map [M-delete] [?\M-\d])
+ (define-key map [M-tab] [?\M-\t])
+ (define-key map [M-linefeed] [?\M-\n])
+ (define-key map [M-clear] [?\M-\C-l])
+ (define-key map [M-return] [?\M-\C-m])
+ (define-key map [M-escape] [?\M-\e])
+ (define-key map [iso-lefttab] [backtab])
+ (define-key map [S-iso-lefttab] [backtab])
+ map)
+ "Keymap of possible alternative meanings for some keys.")
+
+(defun x-setup-function-keys (frame)
+ "Set up `function-key-map' on FRAME for the X window system."
+ ;; Don't do this twice on the same display, or it would break
+ ;; normal-erase-is-backspace-mode.
+ (unless (terminal-parameter frame 'x-setup-function-keys)
+ ;; Map certain keypad keys into ASCII characters that people usually expect.
+ (with-selected-frame frame
+ (let ((map (copy-keymap x-alternatives-map)))
+ (set-keymap-parent map (keymap-parent local-function-key-map))
+ (set-keymap-parent local-function-key-map map)))
+ (set-terminal-parameter frame 'x-setup-function-keys t)))
;; These tell read-char how to convert
;; these special chars to ASCII.
@@ -2160,25 +2179,26 @@ Also, set the value of X cut buffer 0, for backward compatibility
with older X applications.
gildea@stop.mail-abuse.org says it's not desirable to put kills
in the clipboard."
- ;; Don't send the cut buffer too much text.
- ;; It becomes slow, and if really big it causes errors.
- (cond ((>= (length text) x-cut-buffer-max)
- (x-set-cut-buffer "" push)
- (setq x-last-selected-text-cut ""
- x-last-selected-text-cut-encoded ""))
- (t
- (setq x-last-selected-text-cut text
- x-last-cut-buffer-coding 'iso-latin-1
- x-last-selected-text-cut-encoded
- ;; ICCCM says cut buffer always contain ISO-Latin-1
- (encode-coding-string text 'iso-latin-1))
- (x-set-cut-buffer x-last-selected-text-cut-encoded push)))
- (x-set-selection 'PRIMARY text)
- (setq x-last-selected-text-primary text)
- (when x-select-enable-clipboard
- (x-set-selection 'CLIPBOARD text)
- (setq x-last-selected-text-clipboard text))
- )
+ ;; With multi-tty, this function may be called from a tty frame.
+ (when (eq (framep (selected-frame)) 'x)
+ ;; Don't send the cut buffer too much text.
+ ;; It becomes slow, and if really big it causes errors.
+ (cond ((>= (length text) x-cut-buffer-max)
+ (x-set-cut-buffer "" push)
+ (setq x-last-selected-text-cut ""
+ x-last-selected-text-cut-encoded ""))
+ (t
+ (setq x-last-selected-text-cut text
+ x-last-cut-buffer-coding 'iso-latin-1
+ x-last-selected-text-cut-encoded
+ ;; ICCCM says cut buffer always contain ISO-Latin-1
+ (encode-coding-string text 'iso-latin-1))
+ (x-set-cut-buffer x-last-selected-text-cut-encoded push)))
+ (x-set-selection 'PRIMARY text)
+ (setq x-last-selected-text-primary text)
+ (when x-select-enable-clipboard
+ (x-set-selection 'CLIPBOARD text)
+ (setq x-last-selected-text-clipboard text))))
(defvar x-select-request-type nil
"*Data type request for X selection.
@@ -2299,263 +2319,266 @@ order until succeed.")
;; it returns nil the second time. This is so that a single
;; selection won't be added to the kill ring over and over.
(defun x-cut-buffer-or-selection-value ()
- (let (clip-text primary-text cut-text)
- (when x-select-enable-clipboard
- (setq clip-text (x-selection-value 'CLIPBOARD))
- (if (string= clip-text "") (setq clip-text nil))
-
- ;; Check the CLIPBOARD selection for 'newness', is it different
+ ;; With multi-tty, this function may be called from a tty frame.
+ (when (eq (framep (selected-frame)) 'x)
+ (let (clip-text primary-text cut-text)
+ (when x-select-enable-clipboard
+ (setq clip-text (x-selection-value 'CLIPBOARD))
+ (if (string= clip-text "") (setq clip-text nil))
+
+ ;; Check the CLIPBOARD selection for 'newness', is it different
+ ;; from what we remebered them to be last time we did a
+ ;; cut/paste operation.
+ (setq clip-text
+ (cond ;; check clipboard
+ ((or (not clip-text) (string= clip-text ""))
+ (setq x-last-selected-text-clipboard nil))
+ ((eq clip-text x-last-selected-text-clipboard) nil)
+ ((string= clip-text x-last-selected-text-clipboard)
+ ;; Record the newer string,
+ ;; so subsequent calls can use the `eq' test.
+ (setq x-last-selected-text-clipboard clip-text)
+ nil)
+ (t (setq x-last-selected-text-clipboard clip-text)))))
+
+ (setq primary-text (x-selection-value 'PRIMARY))
+ ;; Check the PRIMARY selection for 'newness', is it different
+ ;; from what we remebered them to be last time we did a
+ ;; cut/paste operation.
+ (setq primary-text
+ (cond ;; check primary selection
+ ((or (not primary-text) (string= primary-text ""))
+ (setq x-last-selected-text-primary nil))
+ ((eq primary-text x-last-selected-text-primary) nil)
+ ((string= primary-text x-last-selected-text-primary)
+ ;; Record the newer string,
+ ;; so subsequent calls can use the `eq' test.
+ (setq x-last-selected-text-primary primary-text)
+ nil)
+ (t
+ (setq x-last-selected-text-primary primary-text))))
+
+ (setq cut-text (x-get-cut-buffer 0))
+
+ ;; Check the x cut buffer for 'newness', is it different
;; from what we remebered them to be last time we did a
;; cut/paste operation.
- (setq clip-text
- (cond;; check clipboard
- ((or (not clip-text) (string= clip-text ""))
- (setq x-last-selected-text-clipboard nil))
- ((eq clip-text x-last-selected-text-clipboard) nil)
- ((string= clip-text x-last-selected-text-clipboard)
- ;; Record the newer string,
- ;; so subsequent calls can use the `eq' test.
- (setq x-last-selected-text-clipboard clip-text)
- nil)
- (t
- (setq x-last-selected-text-clipboard clip-text))))
- )
-
- (setq primary-text (x-selection-value 'PRIMARY))
- ;; Check the PRIMARY selection for 'newness', is it different
- ;; from what we remebered them to be last time we did a
- ;; cut/paste operation.
- (setq primary-text
- (cond;; check primary selection
- ((or (not primary-text) (string= primary-text ""))
- (setq x-last-selected-text-primary nil))
- ((eq primary-text x-last-selected-text-primary) nil)
- ((string= primary-text x-last-selected-text-primary)
- ;; Record the newer string,
- ;; so subsequent calls can use the `eq' test.
- (setq x-last-selected-text-primary primary-text)
- nil)
- (t
- (setq x-last-selected-text-primary primary-text))))
-
- (setq cut-text (x-get-cut-buffer 0))
-
- ;; Check the x cut buffer for 'newness', is it different
- ;; from what we remebered them to be last time we did a
- ;; cut/paste operation.
- (setq cut-text
- (let ((next-coding (or next-selection-coding-system 'iso-latin-1)))
- (cond;; check cut buffer
- ((or (not cut-text) (string= cut-text ""))
- (setq x-last-selected-text-cut nil))
- ;; This short cut doesn't work because x-get-cut-buffer
- ;; always returns a newly created string.
- ;; ((eq cut-text x-last-selected-text-cut) nil)
- ((and (string= cut-text x-last-selected-text-cut-encoded)
- (eq x-last-cut-buffer-coding next-coding))
- ;; See the comment above. No need of this recording.
- ;; Record the newer string,
- ;; so subsequent calls can use the `eq' test.
- ;; (setq x-last-selected-text-cut cut-text)
- nil)
- (t
- (setq x-last-selected-text-cut-encoded cut-text
- x-last-cut-buffer-coding next-coding
- x-last-selected-text-cut
- ;; ICCCM says cut buffer always contain ISO-Latin-1, but
- ;; use next-selection-coding-system if not nil.
- (decode-coding-string
- cut-text next-coding))))))
-
- ;; As we have done one selection, clear this now.
- (setq next-selection-coding-system nil)
-
- ;; At this point we have recorded the current values for the
- ;; selection from clipboard (if we are supposed to) primary,
- ;; and cut buffer. So return the first one that has changed
- ;; (which is the first non-null one).
- ;;
- ;; NOTE: There will be cases where more than one of these has
- ;; changed and the new values differ. This indicates that
- ;; something like the following has happened since the last time
- ;; we looked at the selections: Application X set all the
- ;; selections, then Application Y set only one or two of them (say
- ;; just the cut-buffer). In this case since we don't have
- ;; timestamps there is no way to know what the 'correct' value to
- ;; return is. The nice thing to do would be to tell the user we
- ;; saw multiple possible selections and ask the user which was the
- ;; one they wanted.
- ;; This code is still a big improvement because now the user can
- ;; futz with the current selection and get emacs to pay attention
- ;; to the cut buffer again (previously as soon as clipboard or
- ;; primary had been set the cut buffer would essentially never be
- ;; checked again).
- (or clip-text primary-text cut-text)
- ))
+ (setq cut-text
+ (let ((next-coding (or next-selection-coding-system 'iso-latin-1)))
+ (cond ;; check cut buffer
+ ((or (not cut-text) (string= cut-text ""))
+ (setq x-last-selected-text-cut nil))
+ ;; This short cut doesn't work because x-get-cut-buffer
+ ;; always returns a newly created string.
+ ;; ((eq cut-text x-last-selected-text-cut) nil)
+ ((and (string= cut-text x-last-selected-text-cut-encoded)
+ (eq x-last-cut-buffer-coding next-coding))
+ ;; See the comment above. No need of this recording.
+ ;; Record the newer string,
+ ;; so subsequent calls can use the `eq' test.
+ ;; (setq x-last-selected-text-cut cut-text)
+ nil)
+ (t
+ (setq x-last-selected-text-cut-encoded cut-text
+ x-last-cut-buffer-coding next-coding
+ x-last-selected-text-cut
+ ;; ICCCM says cut buffer always contain ISO-Latin-1, but
+ ;; use next-selection-coding-system if not nil.
+ (decode-coding-string
+ cut-text next-coding))))))
+
+ ;; As we have done one selection, clear this now.
+ (setq next-selection-coding-system nil)
+
+ ;; At this point we have recorded the current values for the
+ ;; selection from clipboard (if we are supposed to) primary,
+ ;; and cut buffer. So return the first one that has changed
+ ;; (which is the first non-null one).
+ ;;
+ ;; NOTE: There will be cases where more than one of these has
+ ;; changed and the new values differ. This indicates that
+ ;; something like the following has happened since the last time
+ ;; we looked at the selections: Application X set all the
+ ;; selections, then Application Y set only one or two of them (say
+ ;; just the cut-buffer). In this case since we don't have
+ ;; timestamps there is no way to know what the 'correct' value to
+ ;; return is. The nice thing to do would be to tell the user we
+ ;; saw multiple possible selections and ask the user which was the
+ ;; one they wanted.
+ ;; This code is still a big improvement because now the user can
+ ;; futz with the current selection and get emacs to pay attention
+ ;; to the cut buffer again (previously as soon as clipboard or
+ ;; primary had been set the cut buffer would essentially never be
+ ;; checked again).
+ (or clip-text primary-text cut-text)
+ )))
-
-;; Do the actual X Windows setup here; the above code just defines
-;; functions and variables that we use now.
-
-(setq command-line-args (x-handle-args command-line-args))
-
-;; Make sure we have a valid resource name.
-(or (stringp x-resource-name)
- (let (i)
- (setq x-resource-name (invocation-name))
-
- ;; Change any . or * characters in x-resource-name to hyphens,
- ;; so as not to choke when we use it in X resource queries.
- (while (setq i (string-match "[.*]" x-resource-name))
- (aset x-resource-name i ?-))))
-
-(x-open-connection (or x-display-name
- (setq x-display-name (getenv "DISPLAY")))
- x-command-line-resources
- ;; Exit Emacs with fatal error if this fails.
- t)
-
-(setq frame-creation-function 'x-create-frame-with-faces)
-
-(setq x-cut-buffer-max (min (- (/ (x-server-max-request-size) 2) 100)
- x-cut-buffer-max))
-
-;; Setup the default fontset.
-(setup-default-fontset)
-
-;; Create the standard fontset.
-(create-fontset-from-fontset-spec standard-fontset-spec t)
-
-;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...).
-(create-fontset-from-x-resource)
-
-;; Try to create a fontset from a font specification which comes
-;; from initial-frame-alist, default-frame-alist, or X resource.
-;; A font specification in command line argument (i.e. -fn XXXX)
-;; should be already in default-frame-alist as a `font'
-;; parameter. However, any font specifications in site-start
-;; library, user's init file (.emacs), and default.el are not
-;; yet handled here.
-
-(let ((font (or (cdr (assq 'font initial-frame-alist))
- (cdr (assq 'font default-frame-alist))
- (x-get-resource "font" "Font")))
- xlfd-fields resolved-name)
- (if (and font
- (not (query-fontset font))
- (setq resolved-name (x-resolve-font-name font))
- (setq xlfd-fields (x-decompose-font-name font)))
- (if (string= "fontset" (aref xlfd-fields xlfd-regexp-registry-subnum))
- (new-fontset font (x-complement-fontset-spec xlfd-fields nil))
- ;; Create a fontset from FONT. The fontset name is
- ;; generated from FONT.
- (create-fontset-from-ascii-font font resolved-name "startup"))))
-
-;; Apply a geometry resource to the initial frame. Put it at the end
-;; of the alist, so that anything specified on the command line takes
-;; precedence.
-(let* ((res-geometry (x-get-resource "geometry" "Geometry"))
- parsed)
- (if res-geometry
- (progn
- (setq parsed (x-parse-geometry res-geometry))
- ;; If the resource specifies a position,
- ;; call the position and size "user-specified".
- (if (or (assq 'top parsed) (assq 'left parsed))
- (setq parsed (cons '(user-position . t)
- (cons '(user-size . t) parsed))))
- ;; All geometry parms apply to the initial frame.
- (setq initial-frame-alist (append initial-frame-alist parsed))
- ;; The size parms apply to all frames. Don't set it if there are
- ;; sizes there already (from command line).
- (if (and (assq 'height parsed)
- (not (assq 'height default-frame-alist)))
- (setq default-frame-alist
- (cons (cons 'height (cdr (assq 'height parsed)))
- default-frame-alist)))
- (if (and (assq 'width parsed)
- (not (assq 'width default-frame-alist)))
- (setq default-frame-alist
- (cons (cons 'width (cdr (assq 'width parsed)))
- default-frame-alist))))))
-
-;; Check the reverseVideo resource.
-(let ((case-fold-search t))
- (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
- (if (and rv
- (string-match "^\\(true\\|yes\\|on\\)$" rv))
- (setq default-frame-alist
- (cons '(reverse . t) default-frame-alist)))))
+;; Arrange for the kill and yank functions to set and check the clipboard.
+(setq interprogram-cut-function 'x-select-text)
+(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
-;; Set x-selection-timeout, measured in milliseconds.
-(let ((res-selection-timeout
- (x-get-resource "selectionTimeout" "SelectionTimeout")))
- (setq x-selection-timeout 20000)
- (if res-selection-timeout
- (setq x-selection-timeout (string-to-number res-selection-timeout))))
+(defun x-clipboard-yank ()
+ "Insert the clipboard contents, or the last stretch of killed text."
+ (interactive "*")
+ (let ((clipboard-text (x-selection-value 'CLIPBOARD))
+ (x-select-enable-clipboard t))
+ (if (and clipboard-text (> (length clipboard-text) 0))
+ (kill-new clipboard-text))
+ (yank)))
+
+(defun x-menu-bar-open (&optional frame)
+ "Open the menu bar if `menu-bar-mode' is on. otherwise call `tmm-menubar'."
+ (interactive "i")
+ (if menu-bar-mode (accelerate-menu frame)
+ (tmm-menubar)))
-;; Set scroll bar mode to right if set by X resources. Default is left.
-(if (equal (x-get-resource "verticalScrollBars" "ScrollBars") "right")
- (customize-set-variable 'scroll-bar-mode 'right))
+
+;;; Window system initialization.
(defun x-win-suspend-error ()
(error "Suspending an Emacs running under X makes no sense"))
-(add-hook 'suspend-hook 'x-win-suspend-error)
-;; Arrange for the kill and yank functions to set and check the clipboard.
-(setq interprogram-cut-function 'x-select-text)
-(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+(defvar x-initialized nil
+ "Non-nil if the X window system has been initialized.")
+
+(defun x-initialize-window-system ()
+ "Initialize Emacs for X frames and open the first connection to an X server."
+ ;; Make sure we have a valid resource name.
+ (or (stringp x-resource-name)
+ (let (i)
+ (setq x-resource-name (invocation-name))
+
+ ;; Change any . or * characters in x-resource-name to hyphens,
+ ;; so as not to choke when we use it in X resource queries.
+ (while (setq i (string-match "[.*]" x-resource-name))
+ (aset x-resource-name i ?-))))
+
+ (x-open-connection (or x-display-name
+ (setq x-display-name (or (getenv "DISPLAY" (selected-frame))
+ (getenv "DISPLAY"))))
+ x-command-line-resources
+ ;; Exit Emacs with fatal error if this fails and we
+ ;; are the initial display.
+ (eq initial-window-system 'x))
+
+ (setq x-cut-buffer-max (min (- (/ (x-server-max-request-size) 2) 100)
+ x-cut-buffer-max))
+
+ ;; Setup the default fontset.
+ (setup-default-fontset)
+
+ ;; Create the standard fontset.
+ (create-fontset-from-fontset-spec standard-fontset-spec t)
+
+ ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...).
+ (create-fontset-from-x-resource)
+
+ ;; Try to create a fontset from a font specification which comes
+ ;; from initial-frame-alist, default-frame-alist, or X resource.
+ ;; A font specification in command line argument (i.e. -fn XXXX)
+ ;; should be already in default-frame-alist as a `font'
+ ;; parameter. However, any font specifications in site-start
+ ;; library, user's init file (.emacs), and default.el are not
+ ;; yet handled here.
+
+ (let ((font (or (cdr (assq 'font initial-frame-alist))
+ (cdr (assq 'font default-frame-alist))
+ (x-get-resource "font" "Font")))
+ xlfd-fields resolved-name)
+ (if (and font
+ (not (query-fontset font))
+ (setq resolved-name (x-resolve-font-name font))
+ (setq xlfd-fields (x-decompose-font-name font)))
+ (if (string= "fontset" (aref xlfd-fields xlfd-regexp-registry-subnum))
+ (new-fontset font (x-complement-fontset-spec xlfd-fields nil))
+ ;; Create a fontset from FONT. The fontset name is
+ ;; generated from FONT.
+ (create-fontset-from-ascii-font font resolved-name "startup"))))
+
+ ;; Set scroll bar mode to right if set by X resources. Default is left.
+ (if (equal (x-get-resource "verticalScrollBars" "ScrollBars") "right")
+ (customize-set-variable 'scroll-bar-mode 'right))
+
+ ;; Apply a geometry resource to the initial frame. Put it at the end
+ ;; of the alist, so that anything specified on the command line takes
+ ;; precedence.
+ (let* ((res-geometry (x-get-resource "geometry" "Geometry"))
+ parsed)
+ (if res-geometry
+ (progn
+ (setq parsed (x-parse-geometry res-geometry))
+ ;; If the resource specifies a position,
+ ;; call the position and size "user-specified".
+ (if (or (assq 'top parsed) (assq 'left parsed))
+ (setq parsed (cons '(user-position . t)
+ (cons '(user-size . t) parsed))))
+ ;; All geometry parms apply to the initial frame.
+ (setq initial-frame-alist (append initial-frame-alist parsed))
+ ;; The size parms apply to all frames. Don't set it if there are
+ ;; sizes there already (from command line).
+ (if (and (assq 'height parsed)
+ (not (assq 'height default-frame-alist)))
+ (setq default-frame-alist
+ (cons (cons 'height (cdr (assq 'height parsed)))
+ default-frame-alist)))
+ (if (and (assq 'width parsed)
+ (not (assq 'width default-frame-alist)))
+ (setq default-frame-alist
+ (cons (cons 'width (cdr (assq 'width parsed)))
+ default-frame-alist))))))
+
+ ;; Check the reverseVideo resource.
+ (let ((case-fold-search t))
+ (let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
+ (if (and rv
+ (string-match "^\\(true\\|yes\\|on\\)$" rv))
+ (setq default-frame-alist
+ (cons '(reverse . t) default-frame-alist)))))
-;; Turn off window-splitting optimization; X is usually fast enough
-;; that this is only annoying.
-(setq split-window-keep-point t)
+ ;; Set x-selection-timeout, measured in milliseconds.
+ (let ((res-selection-timeout
+ (x-get-resource "selectionTimeout" "SelectionTimeout")))
+ (setq x-selection-timeout 20000)
+ (if res-selection-timeout
+ (setq x-selection-timeout (string-to-number res-selection-timeout))))
-;; Don't show the frame name; that's redundant with X.
-(setq-default mode-line-frame-identification " ")
+ ;; Don't let Emacs suspend under X.
+ (add-hook 'suspend-hook 'x-win-suspend-error)
-;; Motif direct handling of f10 wasn't working right,
-;; So temporarily we've turned it off in lwlib-Xm.c
-;; and turned the Emacs f10 back on.
-;; ;; Motif normally handles f10 itself, so don't try to handle it a second time.
-;; (if (featurep 'motif)
-;; (global-set-key [f10] 'ignore))
+ ;; Turn off window-splitting optimization; X is usually fast enough
+ ;; that this is only annoying.
+ (setq split-window-keep-point t)
-;; Turn on support for mouse wheels.
-(mouse-wheel-mode 1)
+ ;; Motif direct handling of f10 wasn't working right,
+ ;; So temporarily we've turned it off in lwlib-Xm.c
+ ;; and turned the Emacs f10 back on.
+ ;; ;; Motif normally handles f10 itself, so don't try to handle it a second time.
+ ;; (if (featurep 'motif)
+ ;; (global-set-key [f10] 'ignore))
+ ;; Turn on support for mouse wheels.
+ (mouse-wheel-mode 1)
-;; Enable CLIPBOARD copy/paste through menu bar commands.
-(menu-bar-enable-clipboard)
+ ;; Enable CLIPBOARD copy/paste through menu bar commands.
+ (menu-bar-enable-clipboard)
-;; Override Paste so it looks at CLIPBOARD first.
-(defun x-clipboard-yank ()
- "Insert the clipboard contents, or the last stretch of killed text."
- (interactive "*")
- (let ((clipboard-text (x-selection-value 'CLIPBOARD))
- (x-select-enable-clipboard t))
- (if (and clipboard-text (> (length clipboard-text) 0))
- (kill-new clipboard-text))
- (yank)))
+ ;; Override Paste so it looks at CLIPBOARD first.
+ (define-key menu-bar-edit-menu [paste]
+ (append '(menu-item "Paste" x-clipboard-yank
+ :enable (not buffer-read-only)
+ :help "Paste (yank) text most recently cut/copied")
+ nil))
+
+ (setq x-initialized t))
-(define-key menu-bar-edit-menu [paste]
- '(menu-item "Paste" x-clipboard-yank
- :enable (not buffer-read-only)
- :help "Paste (yank) text most recently cut/copied"))
+(add-to-list 'handle-args-function-alist '(x . x-handle-args))
+(add-to-list 'frame-creation-function-alist '(x . x-create-frame-with-faces))
+(add-to-list 'window-system-initialization-alist '(x . x-initialize-window-system))
;; Initiate drag and drop
(add-hook 'after-make-frame-functions 'x-dnd-init-frame)
(define-key special-event-map [drag-n-drop] 'x-dnd-handle-drag-n-drop-event)
-;; Let F10 do menu bar navigation.
-(defun x-menu-bar-open (&optional frame)
- "Open the menu bar if `menu-bar-mode' is on. otherwise call `tmm-menubar'."
- (interactive "i")
- (if menu-bar-mode (menu-bar-open frame)
- (tmm-menubar)))
-
-(and (fboundp 'menu-bar-open)
- (global-set-key [f10] 'x-menu-bar-open))
-
(defcustom x-gtk-stock-map
'(
("etc/images/new" . "gtk-new")
@@ -2578,16 +2601,53 @@ order until succeed.")
("etc/images/jump-to" . "gtk-jump-to")
("etc/images/index" . "gtk-index")
("etc/images/search" . "gtk-find")
- ("etc/images/exit" . "gtk-quit"))
+ ("etc/images/exit" . "gtk-quit")
+ ;; Used in Gnus and/or MH-E:
+ ("etc/images/attach.xpm" . "gtk-attach")
+ ("etc/images/connect.xpm" . "gtk-connect")
+ ("etc/images/contact.xpm" . "gtk-contact")
+ ("etc/images/delete.xpm" . "gtk-delete")
+ ("etc/images/describe.xpm" . "gtk-properties")
+ ("etc/images/disconnect.xpm" . "gtk-disconnect")
+ ;; ("etc/images/exit.xpm" . "gtk-exit")
+ ("etc/images/lock-broken.xpm" . "gtk-lock_broken")
+ ("etc/images/lock-ok.xpm" . "gtk-lock_ok")
+ ("etc/images/lock.xpm" . "gtk-lock")
+ ("etc/images/next-page.xpm" . "gtk-next-page")
+ ("etc/images/refresh.xpm" . "gtk-refresh")
+ ("etc/images/sort-ascending.xpm" . "gtk-sort-ascending")
+ ("etc/images/sort-column-ascending.xpm" . "gtk-sort-column-ascending")
+ ("etc/images/sort-criteria.xpm" . "gtk-sort-criteria")
+ ("etc/images/sort-descending.xpm" . "gtk-sort-descending")
+ ("etc/images/sort-row-ascending.xpm" . "gtk-sort-row-ascending")
+ ("images/gnus/toggle-subscription.xpm" . "gtk-task-recurring")
+ ("images/mail/compose.xpm" . "gtk-mail-compose")
+ ("images/mail/copy.xpm" . "gtk-mail-copy")
+ ("images/mail/forward.xpm" . "gtk-mail-forward")
+ ("images/mail/inbox.xpm" . "gtk-inbox")
+ ("images/mail/move.xpm" . "gtk-mail-move")
+ ("images/mail/not-spam.xpm" . "gtk-not-spam")
+ ("images/mail/outbox.xpm" . "gtk-outbox")
+ ("images/mail/reply-all.xpm" . "gtk-mail-reply-to-all")
+ ("images/mail/reply.xpm" . "gtk-mail-reply")
+ ("images/mail/save-draft.xpm" . "gtk-mail-handling")
+ ("images/mail/send.xpm" . "gtk-mail-send")
+ ("images/mail/spam.xpm" . "gtk-spam")
+ ;; No themed versions available:
+ ;; mail/preview.xpm (combining stock_mail and stock_zoom)
+ ;; mail/save.xpm (combining stock_mail, stock_save and stock_convert)
+ )
"How icons for tool bars are mapped to Gtk+ stock items.
Emacs must be compiled with the Gtk+ toolkit for this to have any effect.
A value that begins with n: denotes a named icon instead of a stock icon."
:version "22.2"
- :type 'alist
+ :type '(choice (repeat (choice symbol
+ (cons (string :tag "Emacs icon")
+ (string :tag "Stock/named")))))
:group 'x)
-(defvar icon-map-list nil
- "*A list of alists that maps icon file names to stock/named icons.
+(defcustom icon-map-list '(x-gtk-stock-map)
+ "A list of alists that maps icon file names to stock/named icons.
The alists are searched in the order they appear. The first match is used.
The keys in the alists are file names without extension and with two directory
components. For example, to map /usr/share/emacs/22.1.1/etc/images/open.xpm
@@ -2599,7 +2659,16 @@ Themes also have named icons. To map to one of those, use n: before the name:
(\"etc/images/diropen\" . \"n:system-file-manager\")
-The list elements are either the symbol name for the alist or the alist itself.")
+The list elements are either the symbol name for the alist or the
+alist itself.
+
+If you don't want stock icons, set the variable to nil."
+ :version "22.2"
+ :type '(choice (const :tag "Don't use stock icons" nil)
+ (repeat (choice symbol
+ (cons (string :tag "Emacs icon")
+ (string :tag "Stock/named")))))
+ :group 'x)
(defun x-gtk-map-stock (file)
"Map icon with file name FILE to a Gtk+ stock name, using `x-gtk-stock-map'."
@@ -2608,10 +2677,12 @@ The list elements are either the symbol name for the alist or the alist itself."
(match-string 1 file-sans)))
(value))
(mapc (lambda (elem)
- (let ((assoc (if (symbolp elem) (symbol-value elem) elem)))
+ (let ((assoc (if (symbolp elem) (symbol-value elem) elem)))
(or value (setq value (assoc-string (or key file-sans) assoc)))))
icon-map-list)
(and value (cdr value))))
+(provide 'x-win)
+
;; arch-tag: f1501302-db8b-4d95-88e3-116697d89f78
;;; x-win.el ends here
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 1f06499153f..fbc4c861bf9 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -27,429 +27,487 @@
;;; Code:
+(defvar xterm-function-map
+ (let ((map (make-sparse-keymap)))
+
+ ;; xterm from X.org 6.8.2 uses these key definitions.
+ (define-key map "\eOP" [f1])
+ (define-key map "\eOQ" [f2])
+ (define-key map "\eOR" [f3])
+ (define-key map "\eOS" [f4])
+ (define-key map "\e[15~" [f5])
+ (define-key map "\e[17~" [f6])
+ (define-key map "\e[18~" [f7])
+ (define-key map "\e[19~" [f8])
+ (define-key map "\e[20~" [f9])
+ (define-key map "\e[21~" [f10])
+ (define-key map "\e[23~" [f11])
+ (define-key map "\e[24~" [f12])
+
+ (define-key map "\eO2P" [S-f1])
+ (define-key map "\eO2Q" [S-f2])
+ (define-key map "\eO2R" [S-f3])
+ (define-key map "\eO2S" [S-f4])
+ (define-key map "\e[1;2P" [S-f1])
+ (define-key map "\e[1;2Q" [S-f2])
+ (define-key map "\e[1;2R" [S-f3])
+ (define-key map "\e[1;2S" [S-f4])
+ (define-key map "\e[15;2~" [S-f5])
+ (define-key map "\e[17;2~" [S-f6])
+ (define-key map "\e[18;2~" [S-f7])
+ (define-key map "\e[19;2~" [S-f8])
+ (define-key map "\e[20;2~" [S-f9])
+ (define-key map "\e[21;2~" [S-f10])
+ (define-key map "\e[23;2~" [S-f11])
+ (define-key map "\e[24;2~" [S-f12])
+
+ (define-key map "\eO5P" [C-f1])
+ (define-key map "\eO5Q" [C-f2])
+ (define-key map "\eO5R" [C-f3])
+ (define-key map "\eO5S" [C-f4])
+ (define-key map "\e[15;5~" [C-f5])
+ (define-key map "\e[17;5~" [C-f6])
+ (define-key map "\e[18;5~" [C-f7])
+ (define-key map "\e[19;5~" [C-f8])
+ (define-key map "\e[20;5~" [C-f9])
+ (define-key map "\e[21;5~" [C-f10])
+ (define-key map "\e[23;5~" [C-f11])
+ (define-key map "\e[24;5~" [C-f12])
+
+ (define-key map "\eO6P" [C-S-f1])
+ (define-key map "\eO6Q" [C-S-f2])
+ (define-key map "\eO6R" [C-S-f3])
+ (define-key map "\eO6S" [C-S-f4])
+ (define-key map "\e[15;6~" [C-S-f5])
+ (define-key map "\e[17;6~" [C-S-f6])
+ (define-key map "\e[18;6~" [C-S-f7])
+ (define-key map "\e[19;6~" [C-S-f8])
+ (define-key map "\e[20;6~" [C-S-f9])
+ (define-key map "\e[21;6~" [C-S-f10])
+ (define-key map "\e[23;6~" [C-S-f11])
+ (define-key map "\e[24;6~" [C-S-f12])
+
+ (define-key map "\eO3P" [M-f1])
+ (define-key map "\eO3Q" [M-f2])
+ (define-key map "\eO3R" [M-f3])
+ (define-key map "\eO3S" [M-f4])
+ (define-key map "\e[15;3~" [M-f5])
+ (define-key map "\e[17;3~" [M-f6])
+ (define-key map "\e[18;3~" [M-f7])
+ (define-key map "\e[19;3~" [M-f8])
+ (define-key map "\e[20;3~" [M-f9])
+ (define-key map "\e[21;3~" [M-f10])
+ (define-key map "\e[23;3~" [M-f11])
+ (define-key map "\e[24;3~" [M-f12])
+
+ (define-key map "\eO4P" [M-S-f1])
+ (define-key map "\eO4Q" [M-S-f2])
+ (define-key map "\eO4R" [M-S-f3])
+ (define-key map "\eO4S" [M-S-f4])
+ (define-key map "\e[15;4~" [M-S-f5])
+ (define-key map "\e[17;4~" [M-S-f6])
+ (define-key map "\e[18;4~" [M-S-f7])
+ (define-key map "\e[19;4~" [M-S-f8])
+ (define-key map "\e[20;4~" [M-S-f9])
+ (define-key map "\e[21;4~" [M-S-f10])
+ (define-key map "\e[23;4~" [M-S-f11])
+ (define-key map "\e[24;4~" [M-S-f12])
+
+ (define-key map "\eOA" [up])
+ (define-key map "\eOB" [down])
+ (define-key map "\eOC" [right])
+ (define-key map "\eOD" [left])
+ (define-key map "\eOF" [end])
+ (define-key map "\eOH" [home])
+
+ (define-key map "\e[1;2A" [S-up])
+ (define-key map "\e[1;2B" [S-down])
+ (define-key map "\e[1;2C" [S-right])
+ (define-key map "\e[1;2D" [S-left])
+ (define-key map "\e[1;2F" [S-end])
+ (define-key map "\e[1;2H" [S-home])
+
+ (define-key map "\e[1;4A" [M-S-up])
+ (define-key map "\e[1;4B" [M-S-down])
+ (define-key map "\e[1;4C" [M-S-right])
+ (define-key map "\e[1;4D" [M-S-left])
+ (define-key map "\e[1;4F" [M-S-end])
+ (define-key map "\e[1;4H" [M-S-home])
+
+ (define-key map "\e[1;5A" [C-up])
+ (define-key map "\e[1;5B" [C-down])
+ (define-key map "\e[1;5C" [C-right])
+ (define-key map "\e[1;5D" [C-left])
+ (define-key map "\e[1;5F" [C-end])
+ (define-key map "\e[1;5H" [C-home])
+
+ (define-key map "\e[1;6A" [C-S-up])
+ (define-key map "\e[1;6B" [C-S-down])
+ (define-key map "\e[1;6C" [C-S-right])
+ (define-key map "\e[1;6D" [C-S-left])
+ (define-key map "\e[1;6F" [C-S-end])
+ (define-key map "\e[1;6H" [C-S-home])
+
+ (define-key map "\e[1;7A" [C-M-up])
+ (define-key map "\e[1;7B" [C-M-down])
+ (define-key map "\e[1;7C" [C-M-right])
+ (define-key map "\e[1;7D" [C-M-left])
+ (define-key map "\e[1;7F" [C-M-end])
+ (define-key map "\e[1;7H" [C-M-home])
+
+ (define-key map "\e[1;8A" [C-M-S-up])
+ (define-key map "\e[1;8B" [C-M-S-down])
+ (define-key map "\e[1;8C" [C-M-S-right])
+ (define-key map "\e[1;8D" [C-M-S-left])
+ (define-key map "\e[1;8F" [C-M-S-end])
+ (define-key map "\e[1;8H" [C-M-S-home])
+
+ (define-key map "\e[1;3A" [M-up])
+ (define-key map "\e[1;3B" [M-down])
+ (define-key map "\e[1;3C" [M-right])
+ (define-key map "\e[1;3D" [M-left])
+ (define-key map "\e[1;3F" [M-end])
+ (define-key map "\e[1;3H" [M-home])
+
+ (define-key map "\e[2~" [insert])
+ (define-key map "\e[3~" [delete])
+ (define-key map "\e[5~" [prior])
+ (define-key map "\e[6~" [next])
+
+ (define-key map "\e[2;2~" [S-insert])
+ (define-key map "\e[3;2~" [S-delete])
+ (define-key map "\e[5;2~" [S-prior])
+ (define-key map "\e[6;2~" [S-next])
+
+ (define-key map "\e[2;4~" [M-S-insert])
+ (define-key map "\e[3;4~" [M-S-delete])
+ (define-key map "\e[5;4~" [M-S-prior])
+ (define-key map "\e[6;4~" [M-S-next])
+
+ (define-key map "\e[2;5~" [C-insert])
+ (define-key map "\e[3;5~" [C-delete])
+ (define-key map "\e[5;5~" [C-prior])
+ (define-key map "\e[6;5~" [C-next])
+
+ (define-key map "\e[2;6~" [C-S-insert])
+ (define-key map "\e[3;6~" [C-S-delete])
+ (define-key map "\e[5;6~" [C-S-prior])
+ (define-key map "\e[6;6~" [C-S-next])
+
+ (define-key map "\e[2;7~" [C-M-insert])
+ (define-key map "\e[3;7~" [C-M-delete])
+ (define-key map "\e[5;7~" [C-M-prior])
+ (define-key map "\e[6;7~" [C-M-next])
+
+ (define-key map "\e[2;8~" [C-M-S-insert])
+ (define-key map "\e[3;8~" [C-M-S-delete])
+ (define-key map "\e[5;8~" [C-M-S-prior])
+ (define-key map "\e[6;8~" [C-M-S-next])
+
+ (define-key map "\e[2;3~" [M-insert])
+ (define-key map "\e[3;3~" [M-delete])
+ (define-key map "\e[5;3~" [M-prior])
+ (define-key map "\e[6;3~" [M-next])
+
+ (define-key map "\e[4~" [select])
+ (define-key map "\e[29~" [print])
+
+ (define-key map "\eOj" [kp-multiply])
+ (define-key map "\eOk" [kp-add])
+ (define-key map "\eOl" [kp-separator])
+ (define-key map "\eOm" [kp-subtract])
+ (define-key map "\eOo" [kp-divide])
+ (define-key map "\eOp" [kp-0])
+ (define-key map "\eOq" [kp-1])
+ (define-key map "\eOr" [kp-2])
+ (define-key map "\eOs" [kp-3])
+ (define-key map "\eOt" [kp-4])
+ (define-key map "\eOu" [kp-5])
+ (define-key map "\eOv" [kp-6])
+ (define-key map "\eOw" [kp-7])
+ (define-key map "\eOx" [kp-8])
+ (define-key map "\eOy" [kp-9])
+
+ ;; These keys are available in xterm starting from version 216
+ ;; if the modifyOtherKeys resource is set to 1.
+
+ (define-key map "\e[27;5;9~" [C-tab])
+ (define-key map "\e[27;5;13~" [C-return])
+ (define-key map "\e[27;5;39~" [?\C-\'])
+ (define-key map "\e[27;5;44~" [?\C-,])
+ (define-key map "\e[27;5;45~" [?\C--])
+ (define-key map "\e[27;5;46~" [?\C-.])
+ (define-key map "\e[27;5;47~" [?\C-/])
+ (define-key map "\e[27;5;48~" [?\C-0])
+ (define-key map "\e[27;5;49~" [?\C-1])
+ ;; Not all C-DIGIT keys have a distinct binding.
+ (define-key map "\e[27;5;57~" [?\C-9])
+ (define-key map "\e[27;5;59~" [?\C-\;])
+ (define-key map "\e[27;5;61~" [?\C-=])
+ (define-key map "\e[27;5;92~" [?\C-\\])
+
+ (define-key map "\e[27;6;33~" [?\C-!])
+ (define-key map "\e[27;6;34~" [?\C-\"])
+ (define-key map "\e[27;6;35~" [?\C-#])
+ (define-key map "\e[27;6;36~" [?\C-$])
+ (define-key map "\e[27;6;37~" [?\C-%])
+ (define-key map "\e[27;6;38~" [?\C-&])
+ (define-key map "\e[27;6;40~" [?\C-(])
+ (define-key map "\e[27;6;41~" [?\C-)])
+ (define-key map "\e[27;6;42~" [?\C-*])
+ (define-key map "\e[27;6;43~" [?\C-+])
+ (define-key map "\e[27;6;58~" [?\C-:])
+ (define-key map "\e[27;6;60~" [?\C-<])
+ (define-key map "\e[27;6;62~" [?\C->])
+ (define-key map "\e[27;6;63~" [(control ??)])
+
+ ;; These are the strings emitted for various C-M- combinations
+ ;; for keyboards that the Meta and Alt modifiers are on the same
+ ;; key (usually labeled "Alt").
+ (define-key map "\e[27;13;9~" [C-M-tab])
+ (define-key map "\e[27;13;13~" [C-M-return])
+
+ (define-key map "\e[27;13;39~" [?\C-\M-\'])
+ (define-key map "\e[27;13;44~" [?\C-\M-,])
+ (define-key map "\e[27;13;45~" [?\C-\M--])
+ (define-key map "\e[27;13;46~" [?\C-\M-.])
+ (define-key map "\e[27;13;47~" [?\C-\M-/])
+ (define-key map "\e[27;13;48~" [?\C-\M-0])
+ (define-key map "\e[27;13;49~" [?\C-\M-1])
+ (define-key map "\e[27;13;50~" [?\C-\M-2])
+ (define-key map "\e[27;13;51~" [?\C-\M-3])
+ (define-key map "\e[27;13;52~" [?\C-\M-4])
+ (define-key map "\e[27;13;53~" [?\C-\M-5])
+ (define-key map "\e[27;13;54~" [?\C-\M-6])
+ (define-key map "\e[27;13;55~" [?\C-\M-7])
+ (define-key map "\e[27;13;56~" [?\C-\M-8])
+ (define-key map "\e[27;13;57~" [?\C-\M-9])
+ (define-key map "\e[27;13;59~" [?\C-\M-\;])
+ (define-key map "\e[27;13;61~" [?\C-\M-=])
+ (define-key map "\e[27;13;92~" [?\C-\M-\\])
+
+ (define-key map "\e[27;14;33~" [?\C-\M-!])
+ (define-key map "\e[27;14;34~" [?\C-\M-\"])
+ (define-key map "\e[27;14;35~" [?\C-\M-#])
+ (define-key map "\e[27;14;36~" [?\C-\M-$])
+ (define-key map "\e[27;14;37~" [?\C-\M-%])
+ (define-key map "\e[27;14;38~" [?\C-\M-&])
+ (define-key map "\e[27;14;40~" [?\C-\M-\(])
+ (define-key map "\e[27;14;41~" [?\C-\M-\)])
+ (define-key map "\e[27;14;42~" [?\C-\M-*])
+ (define-key map "\e[27;14;43~" [?\C-\M-+])
+ (define-key map "\e[27;14;58~" [?\C-\M-:])
+ (define-key map "\e[27;14;60~" [?\C-\M-<])
+ (define-key map "\e[27;14;62~" [?\C-\M->])
+ (define-key map "\e[27;14;63~" [(control meta ??)])
+
+ (define-key map "\e[27;7;9~" [C-M-tab])
+ (define-key map "\e[27;7;13~" [C-M-return])
+
+ (define-key map "\e[27;7;32~" [?\C-\M-\s])
+ (define-key map "\e[27;7;39~" [?\C-\M-\'])
+ (define-key map "\e[27;7;44~" [?\C-\M-,])
+ (define-key map "\e[27;7;45~" [?\C-\M--])
+ (define-key map "\e[27;7;46~" [?\C-\M-.])
+ (define-key map "\e[27;7;47~" [?\C-\M-/])
+ (define-key map "\e[27;7;48~" [?\C-\M-0])
+ (define-key map "\e[27;7;49~" [?\C-\M-1])
+ (define-key map "\e[27;7;50~" [?\C-\M-2])
+ (define-key map "\e[27;7;51~" [?\C-\M-3])
+ (define-key map "\e[27;7;52~" [?\C-\M-4])
+ (define-key map "\e[27;7;53~" [?\C-\M-5])
+ (define-key map "\e[27;7;54~" [?\C-\M-6])
+ (define-key map "\e[27;7;55~" [?\C-\M-7])
+ (define-key map "\e[27;7;56~" [?\C-\M-8])
+ (define-key map "\e[27;7;57~" [?\C-\M-9])
+ (define-key map "\e[27;7;59~" [?\C-\M-\;])
+ (define-key map "\e[27;7;61~" [?\C-\M-=])
+ (define-key map "\e[27;7;92~" [?\C-\M-\\])
+
+ (define-key map "\e[27;8;33~" [?\C-\M-!])
+ (define-key map "\e[27;8;34~" [?\C-\M-\"])
+ (define-key map "\e[27;8;35~" [?\C-\M-#])
+ (define-key map "\e[27;8;36~" [?\C-\M-$])
+ (define-key map "\e[27;8;37~" [?\C-\M-%])
+ (define-key map "\e[27;8;38~" [?\C-\M-&])
+ (define-key map "\e[27;8;40~" [?\C-\M-\(])
+ (define-key map "\e[27;8;41~" [?\C-\M-\)])
+ (define-key map "\e[27;8;42~" [?\C-\M-*])
+ (define-key map "\e[27;8;43~" [?\C-\M-+])
+ (define-key map "\e[27;8;58~" [?\C-\M-:])
+ (define-key map "\e[27;8;60~" [?\C-\M-<])
+ (define-key map "\e[27;8;62~" [?\C-\M->])
+ (define-key map "\e[27;8;63~" [(control meta ??)])
+
+ (define-key map "\e[27;2;9~" [S-tab])
+ (define-key map "\e[27;2;13~" [S-return])
+
+ (define-key map "\e[27;6;9~" [C-S-tab])
+ (define-key map "\e[27;6;13~" [C-S-return])
+
+ ;; Other versions of xterm might emit these.
+ (define-key map "\e[A" [up])
+ (define-key map "\e[B" [down])
+ (define-key map "\e[C" [right])
+ (define-key map "\e[D" [left])
+ (define-key map "\e[1~" [home])
+
+ (define-key map "\eO2A" [S-up])
+ (define-key map "\eO2B" [S-down])
+ (define-key map "\eO2C" [S-right])
+ (define-key map "\eO2D" [S-left])
+ (define-key map "\eO2F" [S-end])
+ (define-key map "\eO2H" [S-home])
+
+ (define-key map "\eO5A" [C-up])
+ (define-key map "\eO5B" [C-down])
+ (define-key map "\eO5C" [C-right])
+ (define-key map "\eO5D" [C-left])
+ (define-key map "\eO5F" [C-end])
+ (define-key map "\eO5H" [C-home])
+
+ (define-key map "\e[11~" [f1])
+ (define-key map "\e[12~" [f2])
+ (define-key map "\e[13~" [f3])
+ (define-key map "\e[14~" [f4])
+ map)
+ "Function key map overrides for xterm.")
+
+(defvar xterm-alternatives-map
+ (let ((map (make-sparse-keymap)))
+ ;; The terminal initialization C code file might have initialized
+ ;; function keys F13->F60 from the termcap/terminfo information.
+ ;; On a PC-style keyboard these keys correspond to
+ ;; MODIFIER-FUNCTION_KEY, where modifier is S-, C, A-, C-S-. The code
+ ;; here substitutes the corresponding definitions in function-key-map.
+ ;; The mapping from escape sequences to Fn is done in input-decode-map
+ ;; whereas this here mapping is done in local-function-key-map so that
+ ;; bindings to f45 still work, in case your keyboard really has an f45
+ ;; key rather than C-S-f9.
+ (define-key map [f13] [S-f1])
+ (define-key map [f14] [S-f2])
+ (define-key map [f15] [S-f3])
+ (define-key map [f16] [S-f4])
+ (define-key map [f17] [S-f5])
+ (define-key map [f18] [S-f6])
+ (define-key map [f19] [S-f7])
+ (define-key map [f20] [S-f8])
+ (define-key map [f21] [S-f9])
+ (define-key map [f22] [S-f10])
+ (define-key map [f23] [S-f11])
+ (define-key map [f24] [S-f12])
+
+ (define-key map [f25] [C-f1])
+ (define-key map [f26] [C-f2])
+ (define-key map [f27] [C-f3])
+ (define-key map [f28] [C-f4])
+ (define-key map [f29] [C-f5])
+ (define-key map [f30] [C-f6])
+ (define-key map [f31] [C-f7])
+ (define-key map [f32] [C-f8])
+ (define-key map [f33] [C-f9])
+ (define-key map [f34] [C-f10])
+ (define-key map [f35] [C-f11])
+ (define-key map [f36] [C-f12])
+
+ (define-key map [f37] [C-S-f1])
+ (define-key map [f38] [C-S-f2])
+ (define-key map [f39] [C-S-f3])
+ (define-key map [f40] [C-S-f4])
+ (define-key map [f41] [C-S-f5])
+ (define-key map [f42] [C-S-f6])
+ (define-key map [f43] [C-S-f7])
+ (define-key map [f44] [C-S-f8])
+ (define-key map [f45] [C-S-f9])
+ (define-key map [f46] [C-S-f10])
+ (define-key map [f47] [C-S-f11])
+ (define-key map [f48] [C-S-f12])
+
+ (define-key map [f49] [M-f1])
+ (define-key map [f50] [M-f2])
+ (define-key map [f51] [M-f3])
+ (define-key map [f52] [M-f4])
+ (define-key map [f53] [M-f5])
+ (define-key map [f54] [M-f6])
+ (define-key map [f55] [M-f7])
+ (define-key map [f56] [M-f8])
+ (define-key map [f57] [M-f9])
+ (define-key map [f58] [M-f10])
+ (define-key map [f59] [M-f11])
+ (define-key map [f60] [M-f12])
+
+ map)
+ "Keymap of possible alternative meanings for some keys.")
+
+;; List of terminals for which modify-other-keys has been turned on.
+(defvar xterm-modify-other-keys-terminal-list nil)
+
(defun terminal-init-xterm ()
"Terminal initialization function for xterm."
;; rxvt terminals sometimes set the TERM variable to "xterm", but
- ;; rxvt's keybindings that are incompatible with xterm's. It is
+ ;; rxvt's keybindings are incompatible with xterm's. It is
;; better in that case to use rxvt's initializion function.
- (if (and (getenv "COLORTERM")
- (string-match "\\`rxvt" (getenv "COLORTERM")))
- (progn
- (eval-and-compile (load "term/rxvt"))
- (terminal-init-rxvt))
-
- ;; The terminal intialization C code file might have initialized
- ;; function keys F13->F60 from the termcap/terminfo information. On
- ;; a PC-style keyboard these keys correspond to
- ;; MODIFIER-FUNCTION_KEY, where modifier is S-, C, A-, C-S-. The
- ;; code here subsitutes the corresponding defintions in
- ;; function-key-map. This substitution is needed because if a key
- ;; definition is found in function-key-map, there are no further
- ;; lookups in other keymaps.
- (substitute-key-definition [f13] [S-f1] function-key-map)
- (substitute-key-definition [f14] [S-f2] function-key-map)
- (substitute-key-definition [f15] [S-f3] function-key-map)
- (substitute-key-definition [f16] [S-f4] function-key-map)
- (substitute-key-definition [f17] [S-f5] function-key-map)
- (substitute-key-definition [f18] [S-f6] function-key-map)
- (substitute-key-definition [f19] [S-f7] function-key-map)
- (substitute-key-definition [f20] [S-f8] function-key-map)
- (substitute-key-definition [f21] [S-f9] function-key-map)
- (substitute-key-definition [f22] [S-f10] function-key-map)
- (substitute-key-definition [f23] [S-f11] function-key-map)
- (substitute-key-definition [f24] [S-f12] function-key-map)
-
- (substitute-key-definition [f25] [C-f1] function-key-map)
- (substitute-key-definition [f26] [C-f2] function-key-map)
- (substitute-key-definition [f27] [C-f3] function-key-map)
- (substitute-key-definition [f28] [C-f4] function-key-map)
- (substitute-key-definition [f29] [C-f5] function-key-map)
- (substitute-key-definition [f30] [C-f6] function-key-map)
- (substitute-key-definition [f31] [C-f7] function-key-map)
- (substitute-key-definition [f32] [C-f8] function-key-map)
- (substitute-key-definition [f33] [C-f9] function-key-map)
- (substitute-key-definition [f34] [C-f10] function-key-map)
- (substitute-key-definition [f35] [C-f11] function-key-map)
- (substitute-key-definition [f36] [C-f12] function-key-map)
-
- (substitute-key-definition [f37] [C-S-f1] function-key-map)
- (substitute-key-definition [f38] [C-S-f2] function-key-map)
- (substitute-key-definition [f39] [C-S-f3] function-key-map)
- (substitute-key-definition [f40] [C-S-f4] function-key-map)
- (substitute-key-definition [f41] [C-S-f5] function-key-map)
- (substitute-key-definition [f42] [C-S-f6] function-key-map)
- (substitute-key-definition [f43] [C-S-f7] function-key-map)
- (substitute-key-definition [f44] [C-S-f8] function-key-map)
- (substitute-key-definition [f45] [C-S-f9] function-key-map)
- (substitute-key-definition [f46] [C-S-f10] function-key-map)
- (substitute-key-definition [f47] [C-S-f11] function-key-map)
- (substitute-key-definition [f48] [C-S-f12] function-key-map)
-
- (substitute-key-definition [f49] [A-f1] function-key-map)
- (substitute-key-definition [f50] [A-f2] function-key-map)
- (substitute-key-definition [f51] [A-f3] function-key-map)
- (substitute-key-definition [f52] [A-f4] function-key-map)
- (substitute-key-definition [f53] [A-f5] function-key-map)
- (substitute-key-definition [f54] [A-f6] function-key-map)
- (substitute-key-definition [f55] [A-f7] function-key-map)
- (substitute-key-definition [f56] [A-f8] function-key-map)
- (substitute-key-definition [f57] [A-f9] function-key-map)
- (substitute-key-definition [f58] [A-f10] function-key-map)
- (substitute-key-definition [f59] [A-f11] function-key-map)
- (substitute-key-definition [f60] [A-f12] function-key-map)
-
- (let ((map (make-sparse-keymap)))
- ;; xterm from X.org 6.8.2 uses these key definitions.
- (define-key map "\eOP" [f1])
- (define-key map "\eOQ" [f2])
- (define-key map "\eOR" [f3])
- (define-key map "\eOS" [f4])
- (define-key map "\e[15~" [f5])
- (define-key map "\e[17~" [f6])
- (define-key map "\e[18~" [f7])
- (define-key map "\e[19~" [f8])
- (define-key map "\e[20~" [f9])
- (define-key map "\e[21~" [f10])
- (define-key map "\e[23~" [f11])
- (define-key map "\e[24~" [f12])
-
- (define-key map "\eO2P" [S-f1])
- (define-key map "\eO2Q" [S-f2])
- (define-key map "\eO2R" [S-f3])
- (define-key map "\eO2S" [S-f4])
- (define-key map "\e[1;2P" [S-f1])
- (define-key map "\e[1;2Q" [S-f2])
- (define-key map "\e[1;2R" [S-f3])
- (define-key map "\e[1;2S" [S-f4])
- (define-key map "\e[15;2~" [S-f5])
- (define-key map "\e[17;2~" [S-f6])
- (define-key map "\e[18;2~" [S-f7])
- (define-key map "\e[19;2~" [S-f8])
- (define-key map "\e[20;2~" [S-f9])
- (define-key map "\e[21;2~" [S-f10])
- (define-key map "\e[23;2~" [S-f11])
- (define-key map "\e[24;2~" [S-f12])
-
- (define-key map "\eO5P" [C-f1])
- (define-key map "\eO5Q" [C-f2])
- (define-key map "\eO5R" [C-f3])
- (define-key map "\eO5S" [C-f4])
- (define-key map "\e[15;5~" [C-f5])
- (define-key map "\e[17;5~" [C-f6])
- (define-key map "\e[18;5~" [C-f7])
- (define-key map "\e[19;5~" [C-f8])
- (define-key map "\e[20;5~" [C-f9])
- (define-key map "\e[21;5~" [C-f10])
- (define-key map "\e[23;5~" [C-f11])
- (define-key map "\e[24;5~" [C-f12])
-
- (define-key map "\eO6P" [C-S-f1])
- (define-key map "\eO6Q" [C-S-f2])
- (define-key map "\eO6R" [C-S-f3])
- (define-key map "\eO6S" [C-S-f4])
- (define-key map "\e[15;6~" [C-S-f5])
- (define-key map "\e[17;6~" [C-S-f6])
- (define-key map "\e[18;6~" [C-S-f7])
- (define-key map "\e[19;6~" [C-S-f8])
- (define-key map "\e[20;6~" [C-S-f9])
- (define-key map "\e[21;6~" [C-S-f10])
- (define-key map "\e[23;6~" [C-S-f11])
- (define-key map "\e[24;6~" [C-S-f12])
-
- (define-key map "\eO3P" [A-f1])
- (define-key map "\eO3Q" [A-f2])
- (define-key map "\eO3R" [A-f3])
- (define-key map "\eO3S" [A-f4])
- (define-key map "\e[15;3~" [A-f5])
- (define-key map "\e[17;3~" [A-f6])
- (define-key map "\e[18;3~" [A-f7])
- (define-key map "\e[19;3~" [A-f8])
- (define-key map "\e[20;3~" [A-f9])
- (define-key map "\e[21;3~" [A-f10])
- (define-key map "\e[23;3~" [A-f11])
- (define-key map "\e[24;3~" [A-f12])
-
- (define-key map "\eO4P" [M-S-f1])
- (define-key map "\eO4Q" [M-S-f2])
- (define-key map "\eO4R" [M-S-f3])
- (define-key map "\eO4S" [M-S-f4])
- (define-key map "\e[15;4~" [M-S-f5])
- (define-key map "\e[17;4~" [M-S-f6])
- (define-key map "\e[18;4~" [M-S-f7])
- (define-key map "\e[19;4~" [M-S-f8])
- (define-key map "\e[20;4~" [M-S-f9])
- (define-key map "\e[21;4~" [M-S-f10])
- (define-key map "\e[23;4~" [M-S-f11])
- (define-key map "\e[24;4~" [M-S-f12])
-
- (define-key map "\eOA" [up])
- (define-key map "\eOB" [down])
- (define-key map "\eOC" [right])
- (define-key map "\eOD" [left])
- (define-key map "\eOF" [end])
- (define-key map "\eOH" [home])
-
- (define-key map "\e[1;2A" [S-up])
- (define-key map "\e[1;2B" [S-down])
- (define-key map "\e[1;2C" [S-right])
- (define-key map "\e[1;2D" [S-left])
- (define-key map "\e[1;2F" [S-end])
- (define-key map "\e[1;2H" [S-home])
-
- (define-key map "\e[1;4A" [M-S-up])
- (define-key map "\e[1;4B" [M-S-down])
- (define-key map "\e[1;4C" [M-S-right])
- (define-key map "\e[1;4D" [M-S-left])
- (define-key map "\e[1;4F" [M-S-end])
- (define-key map "\e[1;4H" [M-S-home])
-
- (define-key map "\e[1;5A" [C-up])
- (define-key map "\e[1;5B" [C-down])
- (define-key map "\e[1;5C" [C-right])
- (define-key map "\e[1;5D" [C-left])
- (define-key map "\e[1;5F" [C-end])
- (define-key map "\e[1;5H" [C-home])
-
- (define-key map "\e[1;6A" [C-S-up])
- (define-key map "\e[1;6B" [C-S-down])
- (define-key map "\e[1;6C" [C-S-right])
- (define-key map "\e[1;6D" [C-S-left])
- (define-key map "\e[1;6F" [C-S-end])
- (define-key map "\e[1;6H" [C-S-home])
-
- (define-key map "\e[1;7A" [C-M-up])
- (define-key map "\e[1;7B" [C-M-down])
- (define-key map "\e[1;7C" [C-M-right])
- (define-key map "\e[1;7D" [C-M-left])
- (define-key map "\e[1;7F" [C-M-end])
- (define-key map "\e[1;7H" [C-M-home])
-
- (define-key map "\e[1;8A" [C-M-S-up])
- (define-key map "\e[1;8B" [C-M-S-down])
- (define-key map "\e[1;8C" [C-M-S-right])
- (define-key map "\e[1;8D" [C-M-S-left])
- (define-key map "\e[1;8F" [C-M-S-end])
- (define-key map "\e[1;8H" [C-M-S-home])
-
- (define-key map "\e[1;3A" [A-up])
- (define-key map "\e[1;3B" [A-down])
- (define-key map "\e[1;3C" [A-right])
- (define-key map "\e[1;3D" [A-left])
- (define-key map "\e[1;3F" [A-end])
- (define-key map "\e[1;3H" [A-home])
-
- (define-key map "\e[2~" [insert])
- (define-key map "\e[3~" [delete])
- (define-key map "\e[5~" [prior])
- (define-key map "\e[6~" [next])
-
- (define-key map "\e[2;2~" [S-insert])
- (define-key map "\e[3;2~" [S-delete])
- (define-key map "\e[5;2~" [S-prior])
- (define-key map "\e[6;2~" [S-next])
-
- (define-key map "\e[2;4~" [M-S-insert])
- (define-key map "\e[3;4~" [M-S-delete])
- (define-key map "\e[5;4~" [M-S-prior])
- (define-key map "\e[6;4~" [M-S-next])
-
- (define-key map "\e[2;5~" [C-insert])
- (define-key map "\e[3;5~" [C-delete])
- (define-key map "\e[5;5~" [C-prior])
- (define-key map "\e[6;5~" [C-next])
-
- (define-key map "\e[2;6~" [C-S-insert])
- (define-key map "\e[3;6~" [C-S-delete])
- (define-key map "\e[5;6~" [C-S-prior])
- (define-key map "\e[6;6~" [C-S-next])
-
- (define-key map "\e[2;7~" [C-M-insert])
- (define-key map "\e[3;7~" [C-M-delete])
- (define-key map "\e[5;7~" [C-M-prior])
- (define-key map "\e[6;7~" [C-M-next])
-
- (define-key map "\e[2;8~" [C-M-S-insert])
- (define-key map "\e[3;8~" [C-M-S-delete])
- (define-key map "\e[5;8~" [C-M-S-prior])
- (define-key map "\e[6;8~" [C-M-S-next])
-
- (define-key map "\e[2;3~" [A-insert])
- (define-key map "\e[3;3~" [A-delete])
- (define-key map "\e[5;3~" [A-prior])
- (define-key map "\e[6;3~" [A-next])
-
- (define-key map "\e[4~" [select])
- (define-key map "\e[29~" [print])
-
- (define-key map "\eOj" [kp-multiply])
- (define-key map "\eOk" [kp-add])
- (define-key map "\eOl" [kp-separator])
- (define-key map "\eOm" [kp-subtract])
- (define-key map "\eOo" [kp-divide])
- (define-key map "\eOp" [kp-0])
- (define-key map "\eOq" [kp-1])
- (define-key map "\eOr" [kp-2])
- (define-key map "\eOs" [kp-3])
- (define-key map "\eOt" [kp-4])
- (define-key map "\eOu" [kp-5])
- (define-key map "\eOv" [kp-6])
- (define-key map "\eOw" [kp-7])
- (define-key map "\eOx" [kp-8])
- (define-key map "\eOy" [kp-9])
-
- ;; These keys are available in xterm starting from version 216
- ;; if the modifyOtherKeys resource is set to 1.
-
- (define-key map "\e[27;5;9~" [C-tab])
- (define-key map "\e[27;5;13~" [C-return])
- (define-key map "\e[27;5;39~" [?\C-\'])
- (define-key map "\e[27;5;44~" [?\C-,])
- (define-key map "\e[27;5;45~" [?\C--])
- (define-key map "\e[27;5;46~" [?\C-.])
- (define-key map "\e[27;5;47~" [?\C-/])
- (define-key map "\e[27;5;48~" [?\C-0])
- (define-key map "\e[27;5;49~" [?\C-1])
- ;; Not all C-DIGIT keys have a distinct binding.
- (define-key map "\e[27;5;57~" [?\C-9])
- (define-key map "\e[27;5;59~" [?\C-\;])
- (define-key map "\e[27;5;61~" [?\C-=])
- (define-key map "\e[27;5;92~" [?\C-\\])
-
- (define-key map "\e[27;6;33~" [?\C-!])
- (define-key map "\e[27;6;34~" [?\C-\"])
- (define-key map "\e[27;6;35~" [?\C-#])
- (define-key map "\e[27;6;36~" [?\C-$])
- (define-key map "\e[27;6;37~" [?\C-%])
- (define-key map "\e[27;6;38~" [?\C-&])
- (define-key map "\e[27;6;40~" [?\C-\(])
- (define-key map "\e[27;6;41~" [?\C-\)])
- (define-key map "\e[27;6;42~" [?\C-*])
- (define-key map "\e[27;6;43~" [?\C-+])
- (define-key map "\e[27;6;58~" [?\C-:])
- (define-key map "\e[27;6;60~" [?\C-<])
- (define-key map "\e[27;6;62~" [?\C->])
- (define-key map "\e[27;6;63~" [(control ??)])
-
- ;; These are the strings emitted for various C-M- combinations
- ;; for keyboards that the Meta and Alt modifiers are on the same
- ;; key (usually labeled "Alt").
- (define-key map "\e[27;13;9~" [C-M-tab])
- (define-key map "\e[27;13;13~" [C-M-return])
-
- (define-key map "\e[27;13;39~" [?\C-\M-\'])
- (define-key map "\e[27;13;44~" [?\C-\M-,])
- (define-key map "\e[27;13;45~" [?\C-\M--])
- (define-key map "\e[27;13;46~" [?\C-\M-.])
- (define-key map "\e[27;13;47~" [?\C-\M-/])
- (define-key map "\e[27;13;48~" [?\C-\M-0])
- (define-key map "\e[27;13;49~" [?\C-\M-1])
- (define-key map "\e[27;13;50~" [?\C-\M-2])
- (define-key map "\e[27;13;51~" [?\C-\M-3])
- (define-key map "\e[27;13;52~" [?\C-\M-4])
- (define-key map "\e[27;13;53~" [?\C-\M-5])
- (define-key map "\e[27;13;54~" [?\C-\M-6])
- (define-key map "\e[27;13;55~" [?\C-\M-7])
- (define-key map "\e[27;13;56~" [?\C-\M-8])
- (define-key map "\e[27;13;57~" [?\C-\M-9])
- (define-key map "\e[27;13;59~" [?\C-\M-\;])
- (define-key map "\e[27;13;61~" [?\C-\M-=])
- (define-key map "\e[27;13;92~" [?\C-\M-\\])
-
- (define-key map "\e[27;14;33~" [?\C-\M-!])
- (define-key map "\e[27;14;34~" [?\C-\M-\"])
- (define-key map "\e[27;14;35~" [?\C-\M-#])
- (define-key map "\e[27;14;36~" [?\C-\M-$])
- (define-key map "\e[27;14;37~" [?\C-\M-%])
- (define-key map "\e[27;14;38~" [?\C-\M-&])
- (define-key map "\e[27;14;40~" [?\C-\M-\(])
- (define-key map "\e[27;14;41~" [?\C-\M-\)])
- (define-key map "\e[27;14;42~" [?\C-\M-*])
- (define-key map "\e[27;14;43~" [?\C-\M-+])
- (define-key map "\e[27;14;58~" [?\C-\M-:])
- (define-key map "\e[27;14;60~" [?\C-\M-<])
- (define-key map "\e[27;14;62~" [?\C-\M->])
- (define-key map "\e[27;14;63~" [(control meta ??)])
-
- (define-key map "\e[27;7;9~" [C-M-tab])
- (define-key map "\e[27;7;13~" [C-M-return])
-
- (define-key map "\e[27;7;32~" [?\C-\M-\s])
- (define-key map "\e[27;7;39~" [?\C-\M-\'])
- (define-key map "\e[27;7;44~" [?\C-\M-,])
- (define-key map "\e[27;7;45~" [?\C-\M--])
- (define-key map "\e[27;7;46~" [?\C-\M-.])
- (define-key map "\e[27;7;47~" [?\C-\M-/])
- (define-key map "\e[27;7;48~" [?\C-\M-0])
- (define-key map "\e[27;7;49~" [?\C-\M-1])
- (define-key map "\e[27;7;50~" [?\C-\M-2])
- (define-key map "\e[27;7;51~" [?\C-\M-3])
- (define-key map "\e[27;7;52~" [?\C-\M-4])
- (define-key map "\e[27;7;53~" [?\C-\M-5])
- (define-key map "\e[27;7;54~" [?\C-\M-6])
- (define-key map "\e[27;7;55~" [?\C-\M-7])
- (define-key map "\e[27;7;56~" [?\C-\M-8])
- (define-key map "\e[27;7;57~" [?\C-\M-9])
- (define-key map "\e[27;7;59~" [?\C-\M-\;])
- (define-key map "\e[27;7;61~" [?\C-\M-=])
- (define-key map "\e[27;7;92~" [?\C-\M-\\])
-
- (define-key map "\e[27;8;33~" [?\C-\M-!])
- (define-key map "\e[27;8;34~" [?\C-\M-\"])
- (define-key map "\e[27;8;35~" [?\C-\M-#])
- (define-key map "\e[27;8;36~" [?\C-\M-$])
- (define-key map "\e[27;8;37~" [?\C-\M-%])
- (define-key map "\e[27;8;38~" [?\C-\M-&])
- (define-key map "\e[27;8;40~" [?\C-\M-\(])
- (define-key map "\e[27;8;41~" [?\C-\M-\)])
- (define-key map "\e[27;8;42~" [?\C-\M-*])
- (define-key map "\e[27;8;43~" [?\C-\M-+])
- (define-key map "\e[27;8;58~" [?\C-\M-:])
- (define-key map "\e[27;8;60~" [?\C-\M-<])
- (define-key map "\e[27;8;62~" [?\C-\M->])
- (define-key map "\e[27;8;63~" [(control meta ??)])
-
- (define-key map "\e[27;2;9~" [S-tab])
- (define-key map "\e[27;2;13~" [S-return])
-
- (define-key map "\e[27;6;9~" [C-S-tab])
- (define-key map "\e[27;6;13~" [C-S-return])
-
- ;; Other versions of xterm might emit these.
- (define-key map "\e[A" [up])
- (define-key map "\e[B" [down])
- (define-key map "\e[C" [right])
- (define-key map "\e[D" [left])
- (define-key map "\e[1~" [home])
-
- (define-key map "\eO2A" [S-up])
- (define-key map "\eO2B" [S-down])
- (define-key map "\eO2C" [S-right])
- (define-key map "\eO2D" [S-left])
- (define-key map "\eO2F" [S-end])
- (define-key map "\eO2H" [S-home])
-
- (define-key map "\eO5A" [C-up])
- (define-key map "\eO5B" [C-down])
- (define-key map "\eO5C" [C-right])
- (define-key map "\eO5D" [C-left])
- (define-key map "\eO5F" [C-end])
- (define-key map "\eO5H" [C-home])
-
- (define-key map "\e[11~" [f1])
- (define-key map "\e[12~" [f2])
- (define-key map "\e[13~" [f3])
- (define-key map "\e[14~" [f4])
+ (if (and (getenv "COLORTERM" (selected-frame))
+ (string-match "\\`rxvt" (getenv "COLORTERM" (selected-frame))))
+ (tty-run-terminal-initialization (selected-frame) "rxvt")
+
+ (let ((map (copy-keymap xterm-alternatives-map)))
+ (set-keymap-parent map (keymap-parent local-function-key-map))
+ (set-keymap-parent local-function-key-map map))
+
+ (let ((map (copy-keymap xterm-function-map)))
;; Use inheritance to let the main keymap override those defaults.
;; This way we don't override terminfo-derived settings or settings
;; made in the .emacs file.
- (set-keymap-parent map (keymap-parent function-key-map))
- (set-keymap-parent function-key-map map))
+ (set-keymap-parent map (keymap-parent input-decode-map))
+ (set-keymap-parent input-decode-map map)))
- ;; Do it!
(xterm-register-default-colors)
;; This recomputes all the default faces given the colors we've just set up.
- (tty-set-up-initial-frame-faces)))
+ (tty-set-up-initial-frame-faces)
+
+ ;; Try to turn on the modifyOtherKeys feature on modern xterms.
+ ;; When it is turned on many more key bindings work: things like
+ ;; C-. C-, etc.
+ ;; To do that we need to find out if the current terminal supports
+ ;; modifyOtherKeys. At this time only xterm does.
+ (let ((coding-system-for-read 'binary)
+ (chr nil)
+ (str nil))
+ ;; Try to find out the type of terminal by sending a "Secondary
+ ;; Device Attributes (DA)" query.
+ (send-string-to-terminal "\e[>0c")
+
+ ;; The reply should be of the form: \e [ > NUMBER1 ; NUMBER2 ; NUMBER3 c
+ ;; If the timeout is completely removed for read-event, this
+ ;; might hang for terminals that pretend to be xterm, but don't
+ ;; respond to this escape sequence. RMS' opinion was to remove
+ ;; it completely. That might be right, but let's first try to
+ ;; see if by using a longer timeout we get rid of most issues.
+ (when (equal (read-event nil nil 2) ?\e)
+ (when (equal (read-event nil nil 2) ?\[)
+ (while (not (equal (setq chr (read-event nil nil 2)) ?c))
+ (setq str (concat str (string chr))))
+ (when (string-match ">0;\\([0-9]+\\);0" str)
+ ;; NUMBER2 is the xterm version number, look for something
+ ;; greater than 216, the version when modifyOtherKeys was
+ ;; introduced.
+ (when (>= (string-to-number
+ (substring str (match-beginning 1) (match-end 1))) 216)
+ ;; Make sure that the modifyOtherKeys state is restored when
+ ;; suspending, resuming and exiting.
+ (add-hook 'suspend-hook 'xterm-turn-off-modify-other-keys)
+ (add-hook 'suspend-resume-hook 'xterm-turn-on-modify-other-keys)
+ (add-hook 'kill-emacs-hook 'xterm-remove-modify-other-keys)
+ (add-hook 'delete-frame-hook 'xterm-remove-modify-other-keys)
+ ;; Add the selected frame to the list of frames that
+ ;; need to deal with modify-other-keys.
+ (push (frame-terminal (selected-frame))
+ xterm-modify-other-keys-terminal-list)
+ (xterm-turn-on-modify-other-keys))))))
+
+ (run-hooks 'terminal-init-xterm-hook))
;; Set up colors, for those versions of xterm that support it.
(defvar xterm-standard-colors
@@ -486,7 +544,7 @@ for the currently selected frame. The first 16 colors are taken from
`xterm-standard-colors', which see, while the rest are computed assuming
either the 88- or 256-color standard color scheme supported by latest
versions of xterm."
- (let* ((ncolors (display-color-cells))
+ (let* ((ncolors (display-color-cells (selected-frame)))
(colors xterm-standard-colors)
(color (car colors)))
(if (> ncolors 0)
@@ -567,5 +625,29 @@ versions of xterm."
;; right colors, so clear them.
(clear-face-cache)))
+(defun xterm-turn-on-modify-other-keys ()
+ "Turn on the modifyOtherKeys feature of xterm."
+ (let ((frame (selected-frame)))
+ (when (and (frame-live-p frame)
+ (memq frame xterm-modify-other-keys-terminal-list))
+ (send-string-to-terminal "\e[>4;1m"))))
+
+(defun xterm-turn-off-modify-other-keys (&optional frame)
+ "Turn off the modifyOtherKeys feature of xterm."
+ (setq frame (and frame (selected-frame)))
+ (when (and (frame-live-p frame)
+ (memq frame xterm-modify-other-keys-terminal-list))
+ (send-string-to-terminal "\e[>4m")))
+
+(defun xterm-remove-modify-other-keys (&optional frame)
+ "Turn off the modifyOtherKeys feature of xterm and remove frame from consideration."
+ (setq frame (and frame (selected-frame)))
+ (when (and (frame-live-p frame)
+ (memq frame xterm-modify-other-keys-terminal-list))
+ (setq xterm-modify-other-keys-terminal-list
+ (delq (frame-terminal frame)
+ xterm-modify-other-keys-terminal-list))
+ (send-string-to-terminal "\e[>4m")))
+
;; arch-tag: 12e7ebdd-1e6c-4b25-b0f9-35ace25e855a
;;; xterm.el ends here
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index 274de28e6a0..f0442904185 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -1562,7 +1562,7 @@ The returned value is suitable for the `x-popup-menu' function."
(defun artist-mt-get-symbol-from-keyword-sub (table kwd)
"Search TABLE for keyword KWD and return its symbol."
(catch 'found
- (mapcar
+ (mapc
(lambda (element)
(let ((element-tag (artist-mt-get-tag element)))
(cond ((eq element-tag 'graphics-operation)
@@ -1611,7 +1611,7 @@ info-variant-part."
Calls RETRIEVE-FN to retrieve information from that symbol's
info-variant-part."
(catch 'found
- (mapcar
+ (mapc
(lambda (element)
(let ((element-tag (artist-mt-get-tag element)))
(cond ((eq element-tag 'graphics-operation)
@@ -1700,7 +1700,7 @@ otherwise the shifted symbol."
If IS-SHIFTED is non-nil, return the shifted symbol,
otherwise the shifted symbol."
(catch 'found
- (mapcar
+ (mapc
(lambda (element)
(let ((element-tag (artist-mt-get-tag element)))
(cond ((eq element-tag 'graphics-operation)
@@ -1737,7 +1737,7 @@ info-variant-part."
Calls RETRIEVE-FN to retrieve information from that symbol's
info-variant-part."
(catch 'found
- (mapcar
+ (mapc
(lambda (element)
(let ((element-tag (artist-mt-get-tag element)))
(cond ((eq element-tag 'function-call)
@@ -3160,7 +3160,7 @@ Do this by replacing the characters that forms the line with
`artist-erase-char'. Output is a list of endpoints for lines
through X1, Y1. An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y)."
(let ((endpoints (artist-vap-find-endpoints x1 y1)))
- (mapcar
+ (mapc
(lambda (endpoints)
(let ((ep1 (car endpoints))
(ep2 (car (cdr endpoints))))
@@ -3213,14 +3213,14 @@ through X1, Y1. An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y)."
(defun artist-vaporize-lines (x1 y1)
"Vaporize lines reachable from point X1, Y1."
(let ((ep-stack nil))
- (mapcar
+ (mapc
(lambda (ep) (push ep ep-stack))
(artist-vap-find-endpoints x1 y1))
(while (not (null ep-stack))
(let* ((vaporize-point (pop ep-stack))
(new-endpoints (artist-vaporize-line (car vaporize-point)
(cdr vaporize-point))))
- (mapcar
+ (mapc
(lambda (endpoint) (push endpoint ep-stack))
new-endpoints)))))
@@ -3340,7 +3340,7 @@ The POINT-LIST is expected to cover the first quadrant."
;; Create first half (the lower one (since y grows downwards)) from
;; the first quadrant.
- (mapcar
+ (mapc
(lambda (coord)
(let* ((x (artist-coord-get-x coord))
(y (artist-coord-get-y coord))
@@ -3359,7 +3359,7 @@ The POINT-LIST is expected to cover the first quadrant."
;; Create the other half by mirroring the first half.
(setq both-halves
(append first-half
- (mapcar
+ (mapc
(lambda (i)
(artist-new-fill-item (artist-fill-item-get-x i)
(- (artist-fill-item-get-y i))
@@ -4383,13 +4383,10 @@ With non-nil ARG, set the last point."
If N is negative, move cursor down."
(interactive "p")
(let ((col (artist-current-column)))
- (if (not artist-key-is-drawing)
- (progn
- (previous-line n)
- (move-to-column col t))
- (previous-line n)
- (move-to-column col t)
- (artist-key-do-continously-common))))
+ (forward-line (- n))
+ (move-to-column col t))
+ (when artist-key-is-drawing
+ (artist-key-do-continously-common)))
(defun artist-next-line (&optional n)
@@ -4397,13 +4394,10 @@ If N is negative, move cursor down."
If N is negative, move cursor up."
(interactive "p")
(let ((col (artist-current-column)))
- (if (not artist-key-is-drawing)
- (progn
- (next-line n)
- (move-to-column col t))
- (next-line n)
- (move-to-column col t)
- (artist-key-do-continously-common))))
+ (forward-line n)
+ (move-to-column col t))
+ (when artist-key-is-drawing
+ (artist-key-do-continously-common)))
(defun artist-backward-char (&optional n)
"Move cursor backward optional N chars (default is 1), updating curr shape.
@@ -5361,7 +5355,7 @@ The event, EV, is the mouse event."
artist-arrow-point-1
artist-arrow-point-2)))
;; Remove those variables from vars that are not bound
- (mapcar
+ (mapc
(function
(lambda (x)
(if (not (and (boundp x) (symbol-value x)))
diff --git a/lisp/textmodes/bib-mode.el b/lisp/textmodes/bib-mode.el
index b457956b9ba..74800197bcc 100644
--- a/lisp/textmodes/bib-mode.el
+++ b/lisp/textmodes/bib-mode.el
@@ -127,7 +127,7 @@ with the cdr.")
((null slots)
(if (bobp)
""
- (progn (previous-line 1) (bib-find-key bib-assoc))))
+ (progn (forward-line -1) (bib-find-key bib-assoc))))
((looking-at (car (car slots)))
(cdr (car slots)))
(t (bib-find-key (cdr slots)))
@@ -181,7 +181,7 @@ with the cdr.")
(beginning-of-line nil)
(push-mark (point))
(re-search-forward "^ *$" nil 2)
- (next-line 1)
+ (forward-line 1)
(beginning-of-line nil))
(defun unread-bib ()
diff --git a/lisp/textmodes/bibtex-style.el b/lisp/textmodes/bibtex-style.el
index 99c2f92cab0..ee1a4f7d659 100644
--- a/lisp/textmodes/bibtex-style.el
+++ b/lisp/textmodes/bibtex-style.el
@@ -95,7 +95,8 @@
(defcustom bibtex-style-indent-basic 2
"Basic amount of indentation to use in BibTeX Style mode."
- :type 'integer)
+ :type 'integer
+ :group 'bibtex)
(defun bibtex-style-calculate-indentation (&optional virt)
(or
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index 639bdd6ccde..6d2d8ae22d9 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -34,7 +34,7 @@
;; Major mode for editing and validating BibTeX files.
;; Usage:
-;; See documentation for function bibtex-mode or type "\M-x describe-mode"
+;; See documentation for `bibtex-mode' or type "M-x describe-mode"
;; when you are in BibTeX mode.
;; Todo:
@@ -112,6 +112,7 @@ required-fields Signal an error if a required field is missing.
numerical-fields Delete delimiters around numeral fields.
page-dashes Change double dashes in page field to single dash
(for scribe compatibility).
+whitespace Delete whitespace at the beginning and end of fields.
inherit-booktitle If entry contains a crossref field and the booktitle
field is empty, set the booktitle field to the content
of the title field of the crossreferenced entry.
@@ -123,6 +124,10 @@ last-comma Add or delete comma on end of last field in entry,
delimiters Change delimiters according to variables
`bibtex-field-delimiters' and `bibtex-entry-delimiters'.
unify-case Change case of entry and field names.
+braces Enclose parts of field entries by braces according to
+ `bibtex-field-braces-alist'.
+strings Replace parts of field entries by string constants
+ according to `bibtex-field-strings-alist'.
The value t means do all of the above formatting actions.
The value nil means do no formatting at all."
@@ -134,11 +139,35 @@ The value nil means do no formatting at all."
(const required-fields)
(const numerical-fields)
(const page-dashes)
+ (const whitespace)
(const inherit-booktitle)
(const realign)
(const last-comma)
(const delimiters)
- (const unify-case))))
+ (const unify-case)
+ (const braces)
+ (const strings))))
+
+(defcustom bibtex-field-braces-alist nil
+ "Alist of field regexps that \\[bibtex-clean-entry] encloses by braces.
+Each element has the form (FIELDS REGEXP), where FIELDS is a list
+of BibTeX field names and REGEXP is a regexp.
+Whitespace in REGEXP will be replaced by \"[ \\t\\n]+\"."
+ :group 'bibtex
+ :type '(repeat (list (repeat (string :tag "field name"))
+ (choice (regexp :tag "regexp")
+ (sexp :tag "sexp")))))
+
+(defcustom bibtex-field-strings-alist nil
+ "Alist of regexps that \\[bibtex-clean-entry] replaces by string constants.
+Each element has the form (FIELDS REGEXP TO-STR), where FIELDS is a list
+of BibTeX field names. In FIELDS search for REGEXP, which are replaced
+by the BibTeX string constant TO-STR.
+Whitespace in REGEXP will be replaced by \"[ \\t\\n]+\"."
+ :group 'bibtex
+ :type '(repeat (list (repeat (string :tag "field name"))
+ (regexp :tag "From regexp")
+ (regexp :tag "To string constant"))))
(defcustom bibtex-clean-entry-hook nil
"List of functions to call when entry has been cleaned.
@@ -899,6 +928,17 @@ The following is a complex example, see http://link.aps.org/linkfaq.html.
(function :tag "Filter"))))))))
(put 'bibtex-generate-url-list 'risky-local-variable t)
+(defcustom bibtex-cite-matcher-alist
+ '(("\\\\cite[ \t\n]*{\\([^}]+\\)}" . 1))
+ "Alist of rules to identify cited keys in a BibTeX entry.
+Each rule should be of the form (REGEXP . SUBEXP), where SUBEXP
+specifies which parenthesized expression in REGEXP is a cited key.
+Case is significant.
+Used by `bibtex-find-crossref' and for font-locking."
+ :group 'bibtex
+ :type '(repeat (cons (regexp :tag "Regexp")
+ (integer :tag "Number"))))
+
(defcustom bibtex-expand-strings nil
"If non-nil, expand strings when extracting the content of a BibTeX field."
:group 'bibtex
@@ -1070,6 +1110,17 @@ The following is a complex example, see http://link.aps.org/linkfaq.html.
;; Internal Variables
+(defvar bibtex-field-braces-opt nil
+ "Optimized value of `bibtex-field-braces-alist'.
+Created by `bibtex-field-re-init'.
+It is a an alist with elements (FIELD . REGEXP).")
+
+(defvar bibtex-field-strings-opt nil
+ "Optimized value of `bibtex-field-strings-alist'.
+Created by `bibtex-field-re-init'.
+It is a an alist with elements (FIELD RULE1 RULE2 ...),
+where each RULE is (REGEXP . TO-STR).")
+
(defvar bibtex-pop-previous-search-point nil
"Next point where `bibtex-pop-previous' starts looking for a similar entry.")
@@ -1215,7 +1266,11 @@ The CDRs of the elements are t for header keys and nil for crossref keys.")
(,(concat "^[ \t]*\\(" bibtex-field-name "\\)[ \t]*=")
1 font-lock-variable-name-face)
;; url
- (bibtex-font-lock-url) (bibtex-font-lock-crossref))
+ (bibtex-font-lock-url) (bibtex-font-lock-crossref)
+ ;; cite
+ ,@(mapcar (lambda (matcher)
+ `((lambda (bound) (bibtex-font-lock-cite ',matcher bound))))
+ bibtex-cite-matcher-alist))
"*Default expressions to highlight in BibTeX mode.")
(defvar bibtex-font-lock-url-regexp
@@ -1223,7 +1278,7 @@ The CDRs of the elements are t for header keys and nil for crossref keys.")
(concat "^[ \t]*"
(regexp-opt (delete-dups (mapcar 'caar bibtex-generate-url-list)) t)
"[ \t]*=[ \t]*")
- "Regexp for `bibtex-font-lock-url'.")
+ "Regexp for `bibtex-font-lock-url' derived from `bibtex-generate-url-list'.")
(defvar bibtex-string-empty-key nil
"If non-nil, `bibtex-parse-string' accepts empty key.")
@@ -1553,7 +1608,7 @@ If EMPTY-KEY is non-nil, key may be empty. Do not move point."
bounds))))
(defun bibtex-reference-key-in-string (bounds)
- "Return the key part of a BibTeX string defined via BOUNDS"
+ "Return the key part of a BibTeX string defined via BOUNDS."
(buffer-substring-no-properties (nth 1 (car bounds))
(nth 2 (car bounds))))
@@ -1626,8 +1681,8 @@ of the entry, see regexp `bibtex-entry-head'."
(if (save-excursion
(goto-char (match-end bibtex-type-in-head))
(looking-at "[ \t]*("))
- ",?[ \t\n]*)" ;; entry opened with `('
- ",?[ \t\n]*}")) ;; entry opened with `{'
+ ",?[ \t\n]*)" ; entry opened with `('
+ ",?[ \t\n]*}")) ; entry opened with `{'
bounds)
(skip-chars-forward " \t\n")
;; loop over all BibTeX fields
@@ -1736,7 +1791,7 @@ If FLAG is nil, a message is echoed if point was incremented at least
(< (point) pnt))
(goto-char (match-beginning bibtex-type-in-head))
(if (pos-visible-in-window-p (point))
- (sit-for 1)
+ (sit-for blink-matching-delay)
(message "%s%s" prompt (buffer-substring-no-properties
(point) (match-end bibtex-key-in-head))))))))
@@ -1801,21 +1856,19 @@ Optional arg BEG is beginning of entry."
"Reinsert the Nth stretch of killed BibTeX text (field or entry).
Optional arg COMMA is as in `bibtex-enclosing-field'."
(unless bibtex-last-kill-command (error "BibTeX kill ring is empty"))
- (let ((fun (lambda (kryp kr) ;; adapted from `current-kill'
+ (let ((fun (lambda (kryp kr) ; adapted from `current-kill'
(car (set kryp (nthcdr (mod (- n (length (eval kryp)))
(length kr)) kr))))))
(if (eq bibtex-last-kill-command 'field)
(progn
;; insert past the current field
(goto-char (bibtex-end-of-field (bibtex-enclosing-field comma)))
- (set-mark (point))
- (message "Mark set")
+ (push-mark)
(bibtex-make-field (funcall fun 'bibtex-field-kill-ring-yank-pointer
bibtex-field-kill-ring) t nil t))
;; insert past the current entry
(bibtex-skip-to-valid-entry)
- (set-mark (point))
- (message "Mark set")
+ (push-mark)
(insert (funcall fun 'bibtex-entry-kill-ring-yank-pointer
bibtex-entry-kill-ring)))))
@@ -1835,6 +1888,15 @@ Formats current entry according to variable `bibtex-entry-format'."
crossref-key bounds alternatives-there non-empty-alternative
entry-list req-field-list field-list)
+ ;; Initialize `bibtex-field-braces-opt' and `bibtex-field-strings-opt'
+ ;; if necessary.
+ (unless bibtex-field-braces-opt
+ (setq bibtex-field-braces-opt
+ (bibtex-field-re-init bibtex-field-braces-alist 'braces)))
+ (unless bibtex-field-strings-opt
+ (setq bibtex-field-strings-opt
+ (bibtex-field-re-init bibtex-field-strings-alist 'strings)))
+
;; identify entry type
(goto-char (point-min))
(or (re-search-forward bibtex-entry-type nil t)
@@ -1904,7 +1966,7 @@ Formats current entry according to variable `bibtex-entry-format'."
deleted)
;; We have more elegant high-level functions for several
- ;; tasks done by bibtex-format-entry. However, they contain
+ ;; tasks done by `bibtex-format-entry'. However, they contain
;; quite some redundancy compared with what we need to do
;; anyway. So for speed-up we avoid using them.
@@ -1957,6 +2019,59 @@ Formats current entry according to variable `bibtex-entry-format'."
"\\([\"{][0-9]+\\)[ \t\n]*--?[ \t\n]*\\([0-9]+[\"}]\\)")))
(replace-match "\\1-\\2"))
+ ;; remove whitespace at beginning and end of field
+ (when (memq 'whitespace format)
+ (goto-char beg-text)
+ (if (looking-at "\\([{\"]\\)[ \t\n]+")
+ (replace-match "\\1"))
+ (goto-char end-text)
+ (if (looking-back "[ \t\n]+\\([}\"]\\)" beg-text t)
+ (replace-match "\\1")))
+
+ ;; enclose field text by braces according to
+ ;; `bibtex-field-braces-alist'.
+ (let (case-fold-search temp) ; Case-sensitive search
+ (when (and (memq 'braces format)
+ (setq temp (cdr (assoc-string field-name
+ bibtex-field-braces-opt t))))
+ (goto-char beg-text)
+ (while (re-search-forward temp end-text t)
+ (let ((beg (match-beginning 0))
+ (bounds (bibtex-find-text-internal nil t)))
+ (unless (or (nth 4 bounds) ; string constant
+ ;; match already surrounded by braces
+ ;; (braces are inside field delimiters)
+ (and (< (point) (1- (nth 2 bounds)))
+ (< (1+ (nth 1 bounds)) beg)
+ (looking-at "}")
+ (save-excursion (goto-char (1- beg))
+ (looking-at "{"))))
+ (insert "}")
+ (goto-char beg)
+ (insert "{")))))
+
+ ;; replace field text by BibTeX string constants according to
+ ;; `bibtex-field-strings-alist'.
+ (when (and (memq 'strings format)
+ (setq temp (cdr (assoc-string field-name
+ bibtex-field-strings-opt t))))
+ (goto-char beg-text)
+ (dolist (re temp)
+ (while (re-search-forward (car re) end-text t)
+ (let ((bounds (save-match-data
+ (bibtex-find-text-internal nil t))))
+ (unless (nth 4 bounds)
+ ;; if match not at right subfield boundary...
+ (if (< (match-end 0) (1- (nth 2 bounds)))
+ (insert " # " (bibtex-field-left-delimiter))
+ (delete-char 1))
+ (replace-match (cdr re))
+ (goto-char (match-beginning 0))
+ ;; if match not at left subfield boundary...
+ (if (< (1+ (nth 1 bounds)) (match-beginning 0))
+ (insert (bibtex-field-right-delimiter) " # ")
+ (delete-backward-char 1))))))))
+
;; use book title of crossref'd entry
(if (and (memq 'inherit-booktitle format)
empty-field
@@ -2047,6 +2162,31 @@ Formats current entry according to variable `bibtex-entry-format'."
(if (memq 'realign format)
(bibtex-fill-entry))))))
+(defun bibtex-field-re-init (regexp-alist type)
+ "Calculate optimized value for bibtex-regexp-TYPE-opt.
+This value is based on bibtex-regexp-TYPE-alist. TYPE is 'braces or 'strings.
+Return optimized value to be used by `bibtex-format-entry'."
+ (setq regexp-alist
+ (mapcar (lambda (e)
+ (list (car e)
+ (replace-regexp-in-string "[ \t\n]+" "[ \t\n]+" (nth 1 e))
+ (nth 2 e))) ; nil for 'braces'.
+ regexp-alist))
+ (let (opt-list)
+ ;; Loop over field names
+ (dolist (field (delete-dups (apply 'append (mapcar 'car regexp-alist))))
+ (let (rules)
+ ;; Collect all matches we have for this field name
+ (dolist (e regexp-alist)
+ (if (assoc-string field (car e) t)
+ (push (cons (nth 1 e) (nth 2 e)) rules)))
+ (if (eq type 'braces)
+ ;; concatenate all regexps to a single regexp
+ (setq rules (concat "\\(?:" (mapconcat 'car rules "\\|") "\\)")))
+ ;; create list of replacement rules.
+ (push (cons field rules) opt-list)))
+ opt-list))
+
(defun bibtex-autokey-abbrev (string len)
"Return an abbreviation of STRING with at least LEN characters.
@@ -2099,7 +2239,7 @@ and `bibtex-autokey-names-stretch'."
(<= (length name-list)
(+ bibtex-autokey-names
bibtex-autokey-names-stretch)))
- ;; Take bibtex-autokey-names elements from beginning of name-list
+ ;; Take `bibtex-autokey-names' elements from beginning of name-list
(setq name-list (nreverse (nthcdr (- (length name-list)
bibtex-autokey-names)
(nreverse name-list)))
@@ -2161,7 +2301,7 @@ Return the result as a string"
(setq word (match-string 0 titlestring)
titlestring (substring titlestring (match-end 0)))
;; Ignore words matched by one of the elements of
- ;; bibtex-autokey-titleword-ignore
+ ;; `bibtex-autokey-titleword-ignore'
(unless (let ((lst bibtex-autokey-titleword-ignore))
(while (and lst
(not (string-match (concat "\\`\\(?:" (car lst)
@@ -2173,9 +2313,9 @@ Return the result as a string"
(<= counter bibtex-autokey-titlewords))
(push word titlewords)
(push word titlewords-extra))))
- ;; Obey bibtex-autokey-titlewords-stretch:
+ ;; Obey `bibtex-autokey-titlewords-stretch':
;; If by now we have processed all words in titlestring, we include
- ;; titlewords-extra in titlewords. Otherwise, we ignore titlewords-extra.
+ ;; titlewords-extra in titlewords. Otherwise, we ignore titlewords-extra.
(unless (string-match "\\b\\w+" titlestring)
(setq titlewords (append titlewords-extra titlewords)))
(mapconcat 'bibtex-autokey-demangle-title (nreverse titlewords)
@@ -2343,7 +2483,7 @@ for parsing BibTeX keys. If parsing fails, try to set this variable to nil."
(push (cons key t) ref-keys)))))))
(let (;; ignore @String entries because they are handled
- ;; separately by bibtex-parse-strings
+ ;; separately by `bibtex-parse-strings'
(bibtex-sort-ignore-string-entries t)
bounds)
(bibtex-map-entries
@@ -2399,7 +2539,7 @@ Return alist of strings if parsing was completed, `aborted' otherwise."
(setq bibtex-strings strings))))))
(defun bibtex-strings ()
- "Return `bibtex-strings'. Initialize this variable if necessary."
+ "Return `bibtex-strings'. Initialize this variable if necessary."
(if (listp bibtex-strings) bibtex-strings
(bibtex-parse-strings (bibtex-string-files-init))))
@@ -2456,10 +2596,10 @@ Parsing initializes `bibtex-reference-keys' and `bibtex-strings'."
bibtex-buffer-last-parsed-tick)))
(save-restriction
(widen)
- ;; Output no progress messages in bibtex-parse-keys
- ;; because when in y-or-n-p that can hide the question.
+ ;; Output no progress messages in `bibtex-parse-keys'
+ ;; because when in `y-or-n-p' that can hide the question.
(if (and (listp (bibtex-parse-keys t))
- ;; update bibtex-strings
+ ;; update `bibtex-strings'
(listp (bibtex-parse-strings strings-init t)))
;; remember that parsing was successful
@@ -2519,28 +2659,35 @@ already set."
COMPLETIONS is an alist of strings. If point is not after the part
of a word, all strings are listed. Return completion."
;; Return value is used by cleanup functions.
+ ;; Code inspired by `lisp-complete-symbol'.
(let* ((case-fold-search t)
(beg (save-excursion
(re-search-backward "[ \t{\"]")
(forward-char)
(point)))
(end (point))
- (part-of-word (buffer-substring-no-properties beg end))
- (completion (try-completion part-of-word completions)))
+ (pattern (buffer-substring-no-properties beg end))
+ (completion (try-completion pattern completions)))
(cond ((not completion)
- (error "Can't find completion for `%s'" part-of-word))
+ (error "Can't find completion for `%s'" pattern))
((eq completion t)
- part-of-word)
- ((not (string= part-of-word completion))
+ pattern)
+ ((not (string= pattern completion))
(delete-region beg end)
(insert completion)
+ ;; Don't leave around a completions buffer that's out of date.
+ (let ((win (get-buffer-window "*Completions*" 0)))
+ (if win (with-selected-window win (bury-buffer))))
completion)
(t
- (message "Making completion list...")
- (with-output-to-temp-buffer "*Completions*"
- (display-completion-list (all-completions part-of-word completions)
- part-of-word))
- (message "Making completion list...done")
+ (let ((minibuf-is-in-use
+ (eq (minibuffer-window) (selected-window))))
+ (unless minibuf-is-in-use (message "Making completion list..."))
+ (with-output-to-temp-buffer "*Completions*"
+ (display-completion-list
+ (sort (all-completions pattern completions) 'string<) pattern))
+ (unless minibuf-is-in-use
+ (message "Making completion list...done")))
nil))))
(defun bibtex-complete-string-cleanup (str compl)
@@ -2562,20 +2709,25 @@ Use `bibtex-summary-function' to generate summary."
(bibtex-find-entry key t))
(message "Ref: %s" (funcall bibtex-summary-function)))))
-(defun bibtex-copy-summary-as-kill ()
+(defun bibtex-copy-summary-as-kill (&optional arg)
"Push summery of current BibTeX entry to kill ring.
-Use `bibtex-summary-function' to generate summary."
- (interactive)
- (save-excursion
- (bibtex-beginning-of-entry)
- (if (looking-at bibtex-entry-maybe-empty-head)
- (kill-new (message "%s" (funcall bibtex-summary-function)))
- (error "No entry found"))))
+Use `bibtex-summary-function' to generate summary.
+If prefix ARG is non-nil push BibTeX entry's URL to kill ring
+that is generated by calling `bibtex-url'."
+ (interactive "P")
+ (if arg (let ((url (bibtex-url nil t)))
+ (if url (kill-new (message "%s" url))
+ (message "No URL known")))
+ (save-excursion
+ (bibtex-beginning-of-entry)
+ (if (looking-at bibtex-entry-maybe-empty-head)
+ (kill-new (message "%s" (funcall bibtex-summary-function)))
+ (error "No entry found")))))
(defun bibtex-summary ()
"Return summary of current BibTeX entry.
Used as default value of `bibtex-summary-function'."
- ;; It would be neat to customize this function. How?
+ ;; It would be neat to make this function customizable. How?
(if (looking-at bibtex-entry-maybe-empty-head)
(let* ((bibtex-autokey-name-case-convert-function 'identity)
(bibtex-autokey-name-length 'infty)
@@ -2664,16 +2816,17 @@ begins at the beginning of a line. We use this function for font-locking."
(unless (looking-at field-reg)
(re-search-backward field-reg nil t))))
-(defun bibtex-font-lock-url (bound)
- "Font-lock for URLs. BOUND limits the search."
+(defun bibtex-font-lock-url (bound &optional no-button)
+ "Font-lock for URLs. BOUND limits the search.
+If NO-BUTTON is non-nil do not generate buttons."
(let ((case-fold-search t)
(pnt (point))
- field bounds start end found)
+ name bounds start end found)
(bibtex-beginning-of-field)
(while (and (not found)
(<= (point) bound)
(prog1 (re-search-forward bibtex-font-lock-url-regexp bound t)
- (setq field (match-string-no-properties 1)))
+ (setq name (match-string-no-properties 1)))
(setq bounds (bibtex-parse-field-text))
(progn
(setq start (car bounds) end (nth 1 bounds))
@@ -2682,17 +2835,18 @@ begins at the beginning of a line. We use this function for font-locking."
(setq end (1- end)))
(if (memq (char-after start) '(?\{ ?\"))
(setq start (1+ start)))
- (>= bound start)))
- (let ((lst bibtex-generate-url-list) url)
- (goto-char start)
- (while (and (not found)
- (setq url (car (pop lst))))
- (setq found (and (bibtex-string= field (car url))
- (re-search-forward (cdr url) end t)
- (>= (match-beginning 0) pnt)))))
- (goto-char end))
- (if found (bibtex-button (match-beginning 0) (match-end 0)
- 'bibtex-url (match-beginning 0)))
+ (if (< start pnt) (setq start (min pnt end)))
+ (<= start bound)))
+ (if (<= pnt start)
+ (let ((lst bibtex-generate-url-list) url)
+ (while (and (not found) (setq url (car (pop lst))))
+ (goto-char start)
+ (setq found (and (bibtex-string= name (car url))
+ (re-search-forward (cdr url) end t))))))
+ (unless found (goto-char end)))
+ (if (and found (not no-button))
+ (bibtex-button (match-beginning 0) (match-end 0)
+ 'bibtex-url (match-beginning 0)))
found))
(defun bibtex-font-lock-crossref (bound)
@@ -2713,6 +2867,19 @@ begins at the beginning of a line. We use this function for font-locking."
start t))
found))
+(defun bibtex-font-lock-cite (matcher bound)
+ "Font-lock for cited keys.
+MATCHER identifies the cited key, see `bibtex-cite-matcher-alist'.
+BOUND limits the search."
+ (let (case-fold-search)
+ (if (re-search-forward (car matcher) bound t)
+ (let ((start (match-beginning (cdr matcher)))
+ (end (match-end (cdr matcher))))
+ (bibtex-button start end 'bibtex-find-crossref
+ (buffer-substring-no-properties start end)
+ start t t)
+ t))))
+
(defun bibtex-button-action (button)
"Call BUTTON's BibTeX function."
(apply (button-get button 'bibtex-function)
@@ -2831,7 +2998,7 @@ if that value is non-nil.
(list (list nil bibtex-entry-head bibtex-key-in-head))
imenu-case-fold-search t)
(make-local-variable 'choose-completion-string-functions)
- ;; XEmacs needs easy-menu-add, Emacs does not care
+ ;; XEmacs needs `easy-menu-add', Emacs does not care
(easy-menu-add bibtex-edit-menu)
(easy-menu-add bibtex-entry-menu)
(run-mode-hooks 'bibtex-mode-hook))
@@ -3125,7 +3292,7 @@ Return the new location of point."
(goto-char (bibtex-end-of-string bounds)))
((looking-at bibtex-any-valid-entry-type)
;; Parsing of entry failed
- (error "Syntactically incorrect BibTeX entry starts here."))
+ (error "Syntactically incorrect BibTeX entry starts here"))
(t (if (interactive-p) (message "Not on a known BibTeX entry."))
(goto-char pnt)))
(point)))
@@ -3163,7 +3330,7 @@ Otherwise display the beginning of entry."
(defun bibtex-mark-entry ()
"Put mark at beginning, point at end of current BibTeX entry."
(interactive)
- (set-mark (bibtex-beginning-of-entry))
+ (push-mark (bibtex-beginning-of-entry))
(bibtex-end-of-entry))
(defun bibtex-count-entries (&optional count-string-entries)
@@ -3227,6 +3394,7 @@ of the head of the entry found. Return nil if no entry found."
(list key nil entry-name))))))
(defun bibtex-init-sort-entry-class-alist ()
+ "Initialize `bibtex-sort-entry-class-alist' (buffer-local)."
(unless (local-variable-p 'bibtex-sort-entry-class-alist)
(set (make-local-variable 'bibtex-sort-entry-class-alist)
(let ((i -1) alist)
@@ -3283,27 +3451,49 @@ are ignored."
nil ; ENDKEY function
'bibtex-lessp)) ; PREDICATE
-(defun bibtex-find-crossref (crossref-key &optional pnt split)
+(defun bibtex-find-crossref (crossref-key &optional pnt split noerror)
"Move point to the beginning of BibTeX entry CROSSREF-KEY.
If `bibtex-files' is non-nil, search all these files.
Otherwise the search is limited to the current buffer.
Return position of entry if CROSSREF-KEY is found or nil otherwise.
If CROSSREF-KEY is in the same buffer like current entry but before it
-an error is signaled. Optional arg PNT is the position of the referencing
-entry. It defaults to position of point. If optional arg SPLIT is non-nil,
-split window so that both the referencing and the crossrefed entry are
-displayed.
-If called interactively, CROSSREF-KEY defaults to crossref key of current
-entry and SPLIT is t."
+an error is signaled. If NOERRER is non-nil this error is suppressed.
+Optional arg PNT is the position of the referencing entry. It defaults
+to position of point. If optional arg SPLIT is non-nil, split window
+so that both the referencing and the crossrefed entry are displayed.
+
+If called interactively, CROSSREF-KEY defaults to either the crossref key
+of current entry or a key matched by `bibtex-cite-matcher-alist',
+whatever is nearer to the position of point. SPLIT is t. NOERROR is nil
+for a crossref key, t otherwise."
(interactive
- (let ((crossref-key
- (save-excursion
- (bibtex-beginning-of-entry)
- (let ((bounds (bibtex-search-forward-field "crossref" t)))
- (if bounds
- (bibtex-text-in-field-bounds bounds t))))))
- (list (bibtex-read-key "Find crossref key: " crossref-key t)
- (point) t)))
+ (save-excursion
+ (let* ((pnt (point))
+ (_ (bibtex-beginning-of-entry))
+ (end (cdr (bibtex-valid-entry t)))
+ (_ (unless end (error "Not inside valid entry")))
+ (beg (match-end 0)) ; set by `bibtex-valid-entry'
+ (bounds (bibtex-search-forward-field "crossref" end))
+ case-fold-search best temp crossref-key)
+ (if bounds
+ (setq crossref-key (bibtex-text-in-field-bounds bounds t)
+ best (cons (bibtex-dist pnt (bibtex-end-of-field bounds)
+ (bibtex-start-of-field bounds))
+ crossref-key)))
+ (dolist (matcher bibtex-cite-matcher-alist)
+ (goto-char beg)
+ (while (re-search-forward (car matcher) end t)
+ (setq temp (bibtex-dist pnt (match-end (cdr matcher))
+ (match-beginning (cdr matcher))))
+ ;; Accept the key closest to the position of point.
+ (if (or (not best) (< temp (car best)))
+ (setq best (cons temp (match-string-no-properties
+ (cdr matcher)))))))
+ (goto-char pnt)
+ (setq temp (bibtex-read-key "Find crossref key: " (cdr best) t))
+ (list temp (point) t (not (and crossref-key
+ (string= temp crossref-key)))))))
+
(let (buffer pos eqb)
(save-excursion
(setq pos (bibtex-find-entry crossref-key t)
@@ -3314,13 +3504,15 @@ entry and SPLIT is t."
(split ; called (quasi) interactively
(unless pnt (setq pnt (point)))
(goto-char pnt)
- (if eqb (select-window (split-window))
- (pop-to-buffer buffer))
- (goto-char pos)
- (bibtex-reposition-window)
- (beginning-of-line)
- (if (and eqb (> pnt pos))
- (error "The referencing entry must precede the crossrefed entry!")))
+ (if (and eqb (= pos (save-excursion (bibtex-beginning-of-entry))))
+ (message "Key `%s' is current entry" crossref-key)
+ (if eqb (select-window (split-window))
+ (pop-to-buffer buffer))
+ (goto-char pos)
+ (bibtex-reposition-window)
+ (beginning-of-line)
+ (if (and eqb (> pnt pos) (not noerror))
+ (error "The referencing entry must precede the crossrefed entry!"))))
;; `bibtex-find-crossref' is called noninteractively during
;; clean-up of an entry. Then it is not possible to check
;; whether the current entry and the crossrefed entry have
@@ -3329,6 +3521,12 @@ entry and SPLIT is t."
(t (set-buffer buffer) (goto-char pos)))
pos))
+(defun bibtex-dist (pos beg end)
+ "Return distance between POS and region delimited by BEG and END."
+ (cond ((and (<= beg pos) (<= pos end)) 0)
+ ((< pos beg) (- beg pos))
+ (t (- pos end))))
+
(defun bibtex-find-entry (key &optional global start display)
"Move point to the beginning of BibTeX entry named KEY.
Return position of entry if KEY is found or nil if not found.
@@ -3394,7 +3592,7 @@ Return t if preparation was successful or nil if entry KEY already exists."
;; if key-exist is non-nil due to the previous cond clause
;; then point will be at beginning of entry named key.
(key-exist)
- (t ; bibtex-maintain-sorted-entries is non-nil
+ (t ; `bibtex-maintain-sorted-entries' is non-nil
(let* ((case-fold-search t)
(left (save-excursion (bibtex-beginning-of-first-entry)))
(bounds (save-excursion (goto-char (point-max))
@@ -3576,7 +3774,7 @@ Return t if test was successful, nil otherwise."
(delete-region (point-min) (point-max))
(insert "BibTeX mode command `bibtex-validate'\n"
(if syntax-error
- "Maybe undetected errors due to syntax errors. Correct and validate again.\n"
+ "Maybe undetected errors due to syntax errors. Correct and validate again.\n"
"\n"))
(dolist (err error-list)
(insert (format "%s:%d: %s\n" file (car err) (cdr err))))
@@ -3737,7 +3935,7 @@ Optional arg COMMA is as in `bibtex-enclosing-field'."
end-text (or (match-end bibtex-key-in-head)
(match-end 0))
end end-text
- no-sub t) ;; subfields do not make sense
+ no-sub t) ; subfields do not make sense
(setq failure t)))
(t (setq failure t)))
(when (and subfield (not failure))
@@ -3926,8 +4124,8 @@ begin on separate lines prior to calling `bibtex-clean-entry' or if
Don't call `bibtex-clean-entry' on @Preamble entries.
At end of the cleaning process, the functions in
`bibtex-clean-entry-hook' are called with region narrowed to entry."
- ;; Opt. arg called-by-reformat is t if bibtex-clean-entry
- ;; is called by bibtex-reformat
+ ;; Opt. arg CALLED-BY-REFORMAT is t if `bibtex-clean-entry'
+ ;; is called by `bibtex-reformat'
(interactive "P")
(let ((case-fold-search t)
(start (bibtex-beginning-of-entry))
@@ -3946,7 +4144,7 @@ At end of the cleaning process, the functions in
;; set key
(when (or new-key (not key))
(setq key (bibtex-generate-autokey))
- ;; Sometimes bibtex-generate-autokey returns an empty string
+ ;; Sometimes `bibtex-generate-autokey' returns an empty string
(if (or bibtex-autokey-edit-before-use (string= "" key))
(setq key (if (eq entry-type 'string)
(bibtex-read-string-key key)
@@ -4027,7 +4225,7 @@ If optional arg MOVE is non-nil move point to end of field."
(if (not justify)
(goto-char (bibtex-start-of-text-in-field bounds))
(goto-char (bibtex-start-of-field bounds))
- (forward-char) ;; leading comma
+ (forward-char) ; leading comma
(bibtex-delete-whitespace)
(open-line 1)
(forward-char)
@@ -4045,7 +4243,7 @@ If optional arg MOVE is non-nil move point to end of field."
(if bibtex-align-at-equal-sign
(insert " ")
(indent-to-column bibtex-text-indentation)))
- ;; Paragraphs within fields are not preserved. Bother?
+ ;; Paragraphs within fields are not preserved. Bother?
(fill-region-as-paragraph (line-beginning-position) end-field
default-justification nil (point))
(if move (goto-char end-field))))
@@ -4130,15 +4328,19 @@ If mark is active reformat entries in region, if not in whole buffer."
(,(concat (if bibtex-comma-after-last-field "Insert" "Remove")
" comma at end of entry? ") . 'last-comma)
("Replace double page dashes by single ones? " . 'page-dashes)
+ ("Delete whitespace at the beginning and end of fields? " . 'whitespace)
("Inherit booktitle? " . 'inherit-booktitle)
("Force delimiters? " . 'delimiters)
- ("Unify case of entry types and field names? " . 'unify-case))))))
+ ("Unify case of entry types and field names? " . 'unify-case)
+ ("Enclose parts of field entries by braces? " . 'braces)
+ ("Replace parts of field entries by string constants? " . 'strings))))))
;; Do not include required-fields because `bibtex-reformat'
;; cannot handle the error messages of `bibtex-format-entry'.
;; Use `bibtex-validate' to check for required fields.
((eq t bibtex-entry-format)
'(realign opts-or-alts numerical-fields delimiters
- last-comma page-dashes unify-case inherit-booktitle))
+ last-comma page-dashes unify-case inherit-booktitle
+ whitespace braces strings))
(t
(remove 'required-fields (push 'realign bibtex-entry-format)))))
(reformat-reference-keys
@@ -4178,7 +4380,7 @@ entries from minibuffer."
(message "Starting to validate buffer...")
(sit-for 1 nil t)
(bibtex-realign)
- (deactivate-mark) ; So bibtex-validate works on the whole buffer.
+ (deactivate-mark) ; So `bibtex-validate' works on the whole buffer.
(if (not (let (bibtex-maintain-sorted-entries)
(bibtex-validate)))
(message "Correct errors and call `bibtex-convert-alien' again")
@@ -4186,7 +4388,7 @@ entries from minibuffer."
(sit-for 2 nil t)
(bibtex-reformat read-options)
(goto-char (point-max))
- (message "Buffer is now parsable. Please save it.")))
+ (message "Buffer is now parsable. Please save it.")))
(defun bibtex-complete ()
"Complete word fragment before point according to context.
@@ -4249,7 +4451,7 @@ An error is signaled if point is outside key or BibTeX field."
;;
;; If we quit the *Completions* buffer without requesting
;; a completion, `choose-completion-string-functions' is still
- ;; non-nil. Therefore, `choose-completion-string-functions' is
+ ;; non-nil. Therefore, `choose-completion-string-functions' is
;; always set (either to non-nil or nil) when a new completion
;; is requested.
(let (completion-ignore-case)
@@ -4276,7 +4478,7 @@ An error is signaled if point is outside key or BibTeX field."
(setq choose-completion-string-functions nil)
(choose-completion-string choice buffer base-size)
(bibtex-complete-string-cleanup choice ',compl)
- t)) ; needed by choose-completion-string-functions
+ t)) ; needed by `choose-completion-string-functions'
(bibtex-complete-string-cleanup (bibtex-complete-internal compl)
compl)))
@@ -4391,44 +4593,94 @@ An error is signaled if point is outside key or BibTeX field."
"Browse a URL for the BibTeX entry at point.
Optional POS is the location of the BibTeX entry.
The URL is generated using the schemes defined in `bibtex-generate-url-list'
-\(see there\). Then the URL is passed to `browse-url' unless NO-BROWSE is nil.
+\(see there\). If multiple schemes match for this entry, or the same scheme
+matches more than once, use the one for which the first step's match is the
+closest to POS. The URL is passed to `browse-url' unless NO-BROWSE is t.
Return the URL or nil if none can be generated."
(interactive)
+ (unless pos (setq pos (point)))
(save-excursion
- (if pos (goto-char pos))
+ (goto-char pos)
(bibtex-beginning-of-entry)
- ;; Always remove field delimiters
- (let ((fields-alist (bibtex-parse-entry t))
+ (let ((end (save-excursion (bibtex-end-of-entry)))
+ (fields-alist (save-excursion (bibtex-parse-entry t)))
;; Always ignore case,
(case-fold-search t)
- (lst bibtex-generate-url-list)
- field url scheme obj fmt)
- (while (setq scheme (pop lst))
- (when (and (setq field (cdr (assoc-string (caar scheme)
- fields-alist t)))
- (string-match (cdar scheme) field))
- (setq lst nil
- scheme (cdr scheme)
- url (if (null scheme) (match-string 0 field)
- (if (stringp (car scheme))
- (setq fmt (pop scheme)))
- (dolist (step scheme)
- (setq field (cdr (assoc-string (car step) fields-alist t)))
- (if (string-match (nth 1 step) field)
- (push (cond ((functionp (nth 2 step))
- (funcall (nth 2 step) field))
- ((numberp (nth 2 step))
- (match-string (nth 2 step) field))
- (t
- (replace-match (nth 2 step) t nil field)))
- obj)
- ;; If the scheme is set up correctly,
- ;; we should never reach this point
- (error "Match failed: %s" field)))
- (if fmt (apply 'format fmt (nreverse obj))
- (apply 'concat (nreverse obj)))))
- (if (interactive-p) (message "%s" url))
- (unless no-browse (browse-url url))))
+ text url scheme obj fmt fl-match step)
+ ;; The return value of `bibtex-parse-entry' (i.e., FIELDS-ALIST)
+ ;; is always used to generate the URL. However, if the BibTeX
+ ;; entry contains more than one URL, we have multiple matches
+ ;; for the first step defining the generation of the URL.
+ ;; Therefore, we try to initiate the generation of the URL
+ ;; based on the match of `bibtex-font-lock-url' that is the
+ ;; closest to POS. If that fails (no match found) we try to
+ ;; initiate the generation of the URL based on the properly
+ ;; concatenated CONTENT of the field as returned by
+ ;; `bibtex-text-in-field-bounds'. The latter approach can
+ ;; differ from the former because `bibtex-font-lock-url' uses
+ ;; the buffer itself.
+ (while (bibtex-font-lock-url end t)
+ (push (list (bibtex-dist pos (match-beginning 0) (match-end 0))
+ (match-beginning 0)
+ (buffer-substring-no-properties
+ (match-beginning 0) (match-end 0)))
+ fl-match)
+ ;; `bibtex-font-lock-url' moves point to end of match.
+ (forward-char))
+ (when fl-match
+ (setq fl-match (car (sort fl-match (lambda (x y) (< (car x) (car y))))))
+ (goto-char (nth 1 fl-match))
+ (bibtex-beginning-of-field) (re-search-backward ",")
+ (let* ((bounds (bibtex-parse-field))
+ (name (bibtex-name-in-field bounds))
+ (content (bibtex-text-in-field-bounds bounds t))
+ (lst bibtex-generate-url-list))
+ ;; This match can fail when CONTENT differs from text in buffer.
+ (when (string-match (regexp-quote (nth 2 fl-match)) content)
+ ;; TEXT is the part of CONTENT that starts with the match
+ ;; of `bibtex-font-lock-url' we are looking for.
+ (setq text (substring content (match-beginning 0)))
+ (while (and (not url) (setq scheme (pop lst)))
+ ;; Verify the match of `bibtex-font-lock-url' by
+ ;; comparing with TEXT.
+ (when (and (bibtex-string= (caar scheme) name)
+ (string-match (cdar scheme) text))
+ (setq url t scheme (cdr scheme)))))))
+
+ ;; If the match of `bibtex-font-lock-url' was not approved
+ ;; parse FIELDS-ALIST, i.e., the output of `bibtex-parse-entry'.
+ (unless url
+ (let ((lst bibtex-generate-url-list))
+ (while (and (not url) (setq scheme (pop lst)))
+ (when (and (setq text (cdr (assoc-string (caar scheme)
+ fields-alist t)))
+ (string-match (cdar scheme) text))
+ (setq url t scheme (cdr scheme))))))
+
+ (when url
+ (setq url (if (null scheme) (match-string 0 text)
+ (if (stringp (car scheme))
+ (setq fmt (pop scheme)))
+ (dotimes (i (length scheme))
+ (setq step (nth i scheme))
+ ;; The first step shall use TEXT as obtained earlier.
+ (unless (= i 0)
+ (setq text (cdr (assoc-string (car step) fields-alist t))))
+ (if (string-match (nth 1 step) text)
+ (push (cond ((functionp (nth 2 step))
+ (funcall (nth 2 step) text))
+ ((numberp (nth 2 step))
+ (match-string (nth 2 step) text))
+ (t
+ (replace-match (nth 2 step) t nil text)))
+ obj)
+ ;; If SCHEME is set up correctly,
+ ;; we should never reach this point
+ (error "Match failed: %s" text)))
+ (if fmt (apply 'format fmt (nreverse obj))
+ (apply 'concat (nreverse obj)))))
+ (if (interactive-p) (message "%s" url))
+ (unless no-browse (browse-url url)))
(if (and (not url) (interactive-p)) (message "No URL known."))
url)))
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 106148979cf..8660f75fa95 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -33,6 +33,10 @@
;;; Code:
+(defgroup css nil
+ "Cascading Style Sheets (CSS) editing mode."
+ :group 'languages)
+
(eval-when-compile (require 'cl))
(defun css-extract-keyword-list (res)
@@ -174,7 +178,8 @@
(defcustom css-electric-keys '(?\} ?\;) ;; '()
"Self inserting keys which should trigger re-indentation."
:type '(repeat character)
- :options '((?\} ?\;)))
+ :options '((?\} ?\;))
+ :group 'css)
(defvar css-mode-syntax-table
(let ((st (make-syntax-table)))
@@ -209,9 +214,11 @@
(defconst css-name-re (concat css-nmchar-re "+"))
(defface css-selector '((t :inherit font-lock-function-name-face))
- "Face to use for selectors.")
+ "Face to use for selectors."
+ :group 'css)
(defface css-property '((t :inherit font-lock-variable-name-face))
- "Face to use for properties.")
+ "Face to use for properties."
+ :group 'css)
(defvar css-font-lock-keywords
`(("!\\s-*important" . font-lock-builtin-face)
@@ -351,7 +358,7 @@
(map-char-table (lambda (c v)
;; Turn punctuation (code = 1) into symbol (code = 1).
(if (eq (car-safe v) 1)
- (aset st c (cons 3 (cdr v)))))
+ (set-char-table-range st c (cons 3 (cdr v)))))
st)
st))
@@ -394,7 +401,8 @@
(defcustom css-indent-offset 4
"Basic size of one indentation step."
- :type 'integer)
+ :type 'integer
+ :group 'css)
(defun css-indent-calculate ()
(let ((ppss (syntax-ppss))
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 36167f599f4..cd60cf3bf34 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -344,7 +344,7 @@ be tested. If it returns t, fill commands do not break the line there."
Can be customized with the variables `fill-nobreak-predicate'
and `fill-nobreak-invisible'."
(or
- (and fill-nobreak-invisible (line-move-invisible-p (point)))
+ (and fill-nobreak-invisible (invisible-p (point)))
(unless (bolp)
(or
;; Don't break after a period followed by just one space.
@@ -752,10 +752,10 @@ space does not end a sentence, so don't break a line there."
(narrow-to-region (minibuffer-prompt-end) (point-max))
(fill-paragraph arg)))
-(defun fill-paragraph (arg)
+(defun fill-paragraph (&optional justify region)
"Fill paragraph at or after point.
-If ARG is non-nil (interactively, with prefix argument), justify as well.
+If JUSTIFY is non-nil (interactively, with prefix argument), justify as well.
If `sentence-end-double-space' is non-nil, then period followed by one
space does not end a sentence, so don't break a line there.
the variable `fill-column' controls the width for filling.
@@ -763,64 +763,77 @@ the variable `fill-column' controls the width for filling.
If `fill-paragraph-function' is non-nil, we call it (passing our
argument to it), and if it returns non-nil, we simply return its value.
-If `fill-paragraph-function' is nil, return the `fill-prefix' used for filling."
+If `fill-paragraph-function' is nil, return the `fill-prefix' used for filling.
+
+Interactively (when `region' is non-nil) in Transient Mark mode when
+the mark is active, call `fill-region' to fill each of the paragraphs
+in the active region."
(interactive (progn
(barf-if-buffer-read-only)
- (list (if current-prefix-arg 'full))))
- ;; First try fill-paragraph-function.
- (or (and (not (eq fill-paragraph-function t))
- (or fill-paragraph-function
- (and (minibufferp (current-buffer))
- (= 1 (point-min))))
- (let ((function (or fill-paragraph-function
- ;; In the minibuffer, don't count the width
- ;; of the prompt.
- 'fill-minibuffer-function))
- ;; If fill-paragraph-function is set, it probably takes care
- ;; of comments and stuff. If not, it will have to set
- ;; fill-paragraph-handle-comment back to t explicitly or
- ;; return nil.
- (fill-paragraph-handle-comment nil)
- (fill-paragraph-function t))
- (funcall function arg)))
- ;; Then try our syntax-aware filling code.
- (and fill-paragraph-handle-comment
- ;; Our code only handles \n-terminated comments right now.
- comment-start (equal comment-end "")
- (let ((fill-paragraph-handle-comment nil))
- (fill-comment-paragraph arg)))
- ;; If it all fails, default to the good ol' text paragraph filling.
- (let ((before (point))
- (paragraph-start paragraph-start)
- ;; Fill prefix used for filling the paragraph.
- fill-pfx)
- ;; Try to prevent code sections and comment sections from being
- ;; filled together.
- (when (and fill-paragraph-handle-comment comment-start-skip)
- (setq paragraph-start
- (concat paragraph-start "\\|[ \t]*\\(?:"
- comment-start-skip "\\)")))
- (save-excursion
- ;; To make sure the return value of forward-paragraph is meaningful,
- ;; we have to start from the beginning of line, otherwise skipping
- ;; past the last few chars of a paragraph-separator would count as
- ;; a paragraph (and not skipping any chars at EOB would not count
- ;; as a paragraph even if it is).
- (move-to-left-margin)
- (if (not (zerop (forward-paragraph)))
- ;; There's no paragraph at or after point: give up.
- (setq fill-pfx "")
- (let ((end (point))
- (beg (progn (backward-paragraph) (point))))
- (goto-char before)
- (setq fill-pfx
- (if use-hard-newlines
- ;; Can't use fill-region-as-paragraph, since this
- ;; paragraph may still contain hard newlines. See
- ;; fill-region.
- (fill-region beg end arg)
- (fill-region-as-paragraph beg end arg))))))
- fill-pfx)))
+ (list (if current-prefix-arg 'full) t)))
+ (or
+ ;; 1. Fill the region if it is active when called interactively.
+ (and region transient-mark-mode mark-active
+ (not (eq (region-beginning) (region-end)))
+ (or (fill-region (region-beginning) (region-end) justify) t))
+ ;; 2. Try fill-paragraph-function.
+ (and (not (eq fill-paragraph-function t))
+ (or fill-paragraph-function
+ (and (minibufferp (current-buffer))
+ (= 1 (point-min))))
+ (let ((function (or fill-paragraph-function
+ ;; In the minibuffer, don't count the width
+ ;; of the prompt.
+ 'fill-minibuffer-function))
+ ;; If fill-paragraph-function is set, it probably takes care
+ ;; of comments and stuff. If not, it will have to set
+ ;; fill-paragraph-handle-comment back to t explicitly or
+ ;; return nil.
+ (fill-paragraph-handle-comment nil)
+ (fill-paragraph-function t))
+ (funcall function justify)))
+ ;; 3. Try our syntax-aware filling code.
+ (and fill-paragraph-handle-comment
+ ;; Our code only handles \n-terminated comments right now.
+ comment-start (equal comment-end "")
+ (let ((fill-paragraph-handle-comment nil))
+ (fill-comment-paragraph justify)))
+ ;; 4. If it all fails, default to the good ol' text paragraph filling.
+ (let ((before (point))
+ (paragraph-start paragraph-start)
+ ;; Fill prefix used for filling the paragraph.
+ fill-pfx)
+ ;; Try to prevent code sections and comment sections from being
+ ;; filled together.
+ (when (and fill-paragraph-handle-comment comment-start-skip)
+ (setq paragraph-start
+ (concat paragraph-start "\\|[ \t]*\\(?:"
+ comment-start-skip "\\)")))
+ (save-excursion
+ ;; To make sure the return value of forward-paragraph is meaningful,
+ ;; we have to start from the beginning of line, otherwise skipping
+ ;; past the last few chars of a paragraph-separator would count as
+ ;; a paragraph (and not skipping any chars at EOB would not count
+ ;; as a paragraph even if it is).
+ (move-to-left-margin)
+ (if (not (zerop (forward-paragraph)))
+ ;; There's no paragraph at or after point: give up.
+ (setq fill-pfx "")
+ (let ((end (point))
+ (beg (progn (backward-paragraph) (point))))
+ (goto-char before)
+ (setq fill-pfx
+ (if use-hard-newlines
+ ;; Can't use fill-region-as-paragraph, since this
+ ;; paragraph may still contain hard newlines. See
+ ;; fill-region.
+ (fill-region beg end justify)
+ (fill-region-as-paragraph beg end justify))))))
+ fill-pfx)))
+
+(declare-function comment-search-forward "../newcomment" (limit &optional noerror))
+(declare-function comment-string-strip "../newcomment" (str beforep afterp))
+
(defun fill-comment-paragraph (&optional justify)
"Fill current comment.
@@ -1439,6 +1452,7 @@ Also, if CITATION-REGEXP is non-nil, don't fill header lines."
(fill-region-as-paragraph start (point) justify)
(if (and (bolp) (not had-newline))
(delete-char -1))))))))
+
(defun fill-individual-paragraphs-prefix (citation-regexp)
(let* ((adaptive-fill-first-line-regexp ".*")
(just-one-line-prefix
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index 63be4f8277f..73e8ec49045 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -67,11 +67,21 @@ Non-nil means use highlight, nil means use minibuffer messages."
(defcustom flyspell-mark-duplications-flag t
"Non-nil means Flyspell reports a repeated word as an error.
+See `flyspell-mark-duplications-exceptions' to add exceptions to this rule.
Detection of repeated words is not implemented in
\"large\" regions; see `flyspell-large-region'."
:group 'flyspell
:type 'boolean)
+(defcustom flyspell-mark-duplications-exceptions
+ '(("francais" . ("nous" "vous")))
+ "A list of exceptions for duplicated words.
+It should be a list of (LANGUAGE . EXCEPTION-LIST). LANGUAGE is matched
+against the current dictionary and EXCEPTION-LIST is a list of strings.
+The duplicated word is downcased before it is compared with the exceptions."
+ :group 'flyspell
+ :type '(alist :key-type string :value-type (repeat string)))
+
(defcustom flyspell-sort-corrections nil
"Non-nil means, sort the corrections alphabetically before popping them."
:group 'flyspell
@@ -286,6 +296,7 @@ property of the major mode name.")
;;*--- mail mode -------------------------------------------------------*/
(put 'mail-mode 'flyspell-mode-predicate 'mail-mode-flyspell-verify)
(put 'message-mode 'flyspell-mode-predicate 'mail-mode-flyspell-verify)
+(defvar message-signature-separator)
(defun mail-mode-flyspell-verify ()
"Function used for `flyspell-generic-check-word-predicate' in Mail mode."
(let ((header-end (save-excursion
@@ -614,7 +625,7 @@ in your .emacs file.
;;*---------------------------------------------------------------------*/
(defun flyspell-delay-commands ()
"Install the standard set of Flyspell delayed commands."
- (mapcar 'flyspell-delay-command flyspell-default-delayed-commands)
+ (mapc 'flyspell-delay-command flyspell-default-delayed-commands)
(mapcar 'flyspell-delay-command flyspell-delayed-commands))
;;*---------------------------------------------------------------------*/
@@ -633,7 +644,7 @@ It will be checked only after `flyspell-delay' seconds."
;;*---------------------------------------------------------------------*/
(defun flyspell-deplacement-commands ()
"Install the standard set of Flyspell deplacement commands."
- (mapcar 'flyspell-deplacement-command flyspell-default-deplacement-commands)
+ (mapc 'flyspell-deplacement-command flyspell-default-deplacement-commands)
(mapcar 'flyspell-deplacement-command flyspell-deplacement-commands))
;;*---------------------------------------------------------------------*/
@@ -1025,6 +1036,13 @@ Mostly we check word delimiters."
(and (> start (point-min))
(not (memq (char-after (1- start)) '(?\} ?\\)))))
flyspell-mark-duplications-flag
+ (not (catch 'exception
+ (dolist (except flyspell-mark-duplications-exceptions)
+ (and (string= (or ispell-local-dictionary
+ ispell-dictionary)
+ (car except))
+ (member (downcase word) (cdr except))
+ (throw 'exception t)))))
(save-excursion
(goto-char start)
(let* ((bound
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 3d6a17c5d93..444cf1985e8 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -1161,12 +1161,13 @@ The variable `ispell-library-directory' defines the library location."
(delete-menu-item '("Edit" "Spell")) ; in case already defined
(add-menu '("Edit") "Spell" ispell-menu-xemacs))))))
-;;; Allow incrementing characters as integers in XEmacs 20
-(if (and (featurep 'xemacs)
- (fboundp 'int-char))
- (fset 'ispell-int-char 'int-char)
- ;; Emacs and XEmacs 19 or earlier
- (fset 'ispell-int-char 'identity))
+(defalias 'ispell-int-char
+ ;; Allow incrementing characters as integers in XEmacs 20
+ (if (and (featurep 'xemacs)
+ (fboundp 'int-char))
+ 'int-char
+ ;; Emacs and XEmacs 19 or earlier
+ 'identity))
;;; **********************************************************************
@@ -1566,7 +1567,7 @@ This allows it to improve the suggestion list based on actual mispellings."
(translate-region pos (point) translation-table-for-input))))
;;;###autoload
-(defun ispell-word (&optional following quietly continue)
+(defun ispell-word (&optional following quietly continue region)
"Check spelling of word under or before the cursor.
If the word is not found in dictionary, display possible corrections
in a window allowing you to choose one.
@@ -1580,6 +1581,9 @@ when called interactively, non-corrective messages are suppressed.
With a prefix argument (or if CONTINUE is non-nil),
resume interrupted spell-checking of a buffer or region.
+Interactively, in Transient Mark mode when the mark is active, call
+`ispell-region' to check the active region for spelling errors.
+
Word syntax is controlled by the definition of the chosen dictionary,
which is in `ispell-local-dictionary-alist' or `ispell-dictionary-alist'.
@@ -1592,10 +1596,13 @@ nil word is correct or spelling is accepted.
\"word\" word corrected from word list.
\(\"word\" arg\) word is hand entered.
quit spell session exited."
-
- (interactive (list ispell-following-word ispell-quietly current-prefix-arg))
- (if continue
- (ispell-continue)
+ (interactive (list ispell-following-word ispell-quietly current-prefix-arg t))
+ (cond
+ ((and region transient-mark-mode mark-active
+ (not (eq (region-beginning) (region-end))))
+ (ispell-region (region-beginning) (region-end)))
+ (continue (ispell-continue))
+ (t
(ispell-maybe-find-aspell-dictionaries)
(ispell-accept-buffer-local-defs) ; use the correct dictionary
(let ((cursor-location (point)) ; retain cursor location
@@ -1690,7 +1697,7 @@ quit spell session exited."
;; NB: Cancels ispell-quit incorrectly if called from ispell-region
(if ispell-quit (setq ispell-quit nil replace 'quit))
(goto-char cursor-location) ; return to original location
- replace)))
+ replace))))
(defun ispell-get-word (following &optional extra-otherchars)
@@ -2683,7 +2690,7 @@ Return nil if spell session is quit,
(rstart (make-marker)))
(unwind-protect
(save-excursion
- (message "Spell checking %s using %s with %s dictionary..."
+ (message "Spell-checking %s using %s with %s dictionary..."
(if (and (= reg-start (point-min)) (= reg-end (point-max)))
(buffer-name) "region")
(file-name-nondirectory ispell-program-name)
@@ -2782,7 +2789,9 @@ Return nil if spell session is quit,
(if (not recheckp) (set-marker ispell-region-end nil))
;; Only save if successful exit.
(ispell-pdict-save ispell-silently-savep)
- (message "Spell-checking using %s with %s dictionary done"
+ (message "Spell-checking %s using %s with %s dictionary done"
+ (if (and (= reg-start (point-min)) (= reg-end (point-max)))
+ (buffer-name) "region")
(file-name-nondirectory ispell-program-name)
(or ispell-current-dictionary "default"))))))
@@ -3525,9 +3534,9 @@ You can bind this to the key C-c i in GNUS or mail by adding to
(cite-regexp ;Prefix of quoted text
(cond
((functionp 'sc-cite-regexp) ; sc 3.0
- (concat "\\(" (sc-cite-regexp) "\\)" "\\|"
- (with-no-warnings
- (ispell-non-empty-string sc-reference-tag-string))))
+ (with-no-warnings
+ (concat "\\(" (sc-cite-regexp) "\\)" "\\|"
+ (ispell-non-empty-string sc-reference-tag-string))))
((boundp 'sc-cite-regexp) ; sc 2.3
(concat "\\(" sc-cite-regexp "\\)" "\\|"
(with-no-warnings
diff --git a/lisp/textmodes/nroff-mode.el b/lisp/textmodes/nroff-mode.el
index 8297bb05827..97b9f3b45c3 100644
--- a/lisp/textmodes/nroff-mode.el
+++ b/lisp/textmodes/nroff-mode.el
@@ -66,6 +66,8 @@
;; ' used otherwise).
(modify-syntax-entry ?\" "\" 2" st)
;; Comments are delimited by \" and newline.
+ ;; And in groff also \# to newline.
+ (modify-syntax-entry ?# ". 2" st)
(modify-syntax-entry ?\\ "\\ 1" st)
(modify-syntax-entry ?\n ">" st)
st)
@@ -92,7 +94,7 @@
(mapconcat 'identity
'("[f*n]*\\[.+?]" ; some groff extensions
"(.." ; two chars after (
- "[^(\"]" ; single char escape
+ "[^(\"#]" ; single char escape
) "\\|")
"\\)")
)
@@ -127,10 +129,11 @@ closing requests for requests that are used in matched pairs."
(concat "[.']\\|" paragraph-separate))
;; comment syntax added by mit-erl!gildea 18 Apr 86
(set (make-local-variable 'comment-start) "\\\" ")
- (set (make-local-variable 'comment-start-skip) "\\\\\"[ \t]*")
+ (set (make-local-variable 'comment-start-skip) "\\\\[\"#][ \t]*")
(set (make-local-variable 'comment-column) 24)
(set (make-local-variable 'comment-indent-function) 'nroff-comment-indent)
- (set (make-local-variable 'indent-line-function) 'nroff-indent-line-function)
+ (set (make-local-variable 'comment-insert-comment-function)
+ 'nroff-insert-comment-function)
(set (make-local-variable 'imenu-generic-expression) nroff-imenu-expression))
(defun nroff-outline-level ()
@@ -150,6 +153,7 @@ Puts a full-stop before comments on a line by themselves."
(skip-chars-backward " \t")
(if (bolp)
(progn
+ ;; FIXME delete-horizontal-space?
(setq pt (1+ pt))
(insert ?.)
1)
@@ -162,18 +166,11 @@ Puts a full-stop before comments on a line by themselves."
9) 8)))))) ; add 9 to ensure at least two blanks
(goto-char pt))))
-;; All this does is insert a "." at the start of comment-lines,
-;; for the sake of comment-dwim adding a new comment on an empty line.
-;; Hack! The right fix probably involves ;; comment-insert-comment-function,
-;; but comment-dwim does not call that for the empty line case.
;; http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01869.html
-(defun nroff-indent-line-function ()
- "Function for `indent-line-function' in `nroff-mode'."
- (save-excursion
- (forward-line 0)
- (when (looking-at "[ \t]*\\\\\"[ \t]*") ; \# does not need this
- (delete-horizontal-space)
- (insert ?.))))
+(defun nroff-insert-comment-function ()
+ "Function for `comment-insert-comment-function' in `nroff-mode'."
+ (indent-to (nroff-comment-indent))
+ (insert comment-start))
(defun nroff-count-text-lines (start end &optional print)
"Count lines in region, except for nroff request lines.
diff --git a/lisp/textmodes/org-export-latex.el b/lisp/textmodes/org-export-latex.el
new file mode 100644
index 00000000000..b1b31b622d1
--- /dev/null
+++ b/lisp/textmodes/org-export-latex.el
@@ -0,0 +1,1168 @@
+ ;;; org-export-latex.el --- LaTeX exporter for org-mode
+;;
+;; Copyright (C) 2007 Free Software Foundation, Inc.
+;;
+;; Emacs Lisp Archive Entry
+;; Filename: org-export-latex.el
+;; Version: 5.12
+;; Author: Bastien Guerry <bzg AT altern DOT org>
+;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
+;; Keywords: org, wp, tex
+;; Description: Converts an org-mode buffer into LaTeX
+;; URL: http://www.cognition.ens.fr/~guerry/u/org-export-latex.el
+;;
+;; 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 3, 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:
+;;
+;; This library implements a LaTeX exporter for org-mode.
+;;
+;; Put this file into your load-path and the following into your ~/.emacs:
+;; (require 'org-export-latex)
+;;
+;; The interactive functions are similar to those of the HTML exporter:
+;;
+;; M-x `org-export-as-latex'
+;; M-x `org-export-as-latex-batch'
+;; M-x `org-export-as-latex-to-buffer'
+;; M-x `org-export-region-as-latex'
+;; M-x `org-replace-region-by-latex'
+;;
+;;; Code:
+
+(eval-when-compile
+ (require 'cl))
+
+(require 'footnote)
+(require 'org)
+
+;;; Variables:
+(defvar org-latex-options-plist nil)
+(defvar org-latex-todo-keywords-1 nil)
+(defvar org-latex-all-targets-regexp nil)
+(defvar org-latex-add-level 0)
+(defvar org-latex-sectioning-depth 0)
+(defvar org-export-latex-list-beginning-re
+ "^\\([ \t]*\\)\\([-+*]\\|[0-9]+[.)]\\) +?")
+
+(defvar org-latex-special-string-regexps
+ '(org-ts-regexp
+ org-scheduled-string
+ org-deadline-string
+ org-clock-string)
+ "A list of regexps to convert as special keywords.")
+
+(defvar latexp) ; dynamically scoped from org.el
+(defvar re-quote) ; dynamically scoped from org.el
+(defvar commentsp) ; dynamically scoped from org.el
+
+;;; Custom variables:
+(defcustom org-export-latex-sectioning-alist
+ '((1 "\\section{%s}" "\\section*{%s}")
+ (2 "\\subsection{%s}" "\\subsection*{%s}")
+ (3 "\\subsubsection{%s}" "\\subsubsection*{%s}")
+ (4 "\\paragraph{%s}" "\\paragraph*{%s}")
+ (5 "\\subparagraph{%s}" "\\subparagraph*{%s}"))
+ "Alist of LaTeX commands for inserting sections.
+Here is the structure of each cell:
+
+ \(level unnumbered-section numbered-section\)
+
+The %s formatter will be replaced by the title of the section."
+ :group 'org-export-latex
+ :type 'alist)
+
+(defcustom org-export-latex-emphasis-alist
+ '(("*" "\\textbf{%s}" nil)
+ ("/" "\\emph{%s}" nil)
+ ("_" "\\underline{%s}" nil)
+ ("+" "\\texttt{%s}" nil)
+ ("=" "\\texttt{%s}" nil))
+ "Alist of LaTeX expressions to convert emphasis fontifiers.
+Each element of the list is a list of three elements.
+The first element is the character used as a marker for fontification.
+The second element is a formatting string to wrap fontified text with.
+The third element decides whether to protect converted text from other
+conversions."
+ :group 'org-export-latex
+ :type 'alist)
+
+(defcustom org-export-latex-preamble
+ "\\documentclass[11pt,a4paper]{article}
+\\usepackage[utf8]{inputenc}
+\\usepackage[T1]{fontenc}
+\\usepackage{hyperref}"
+ "Preamble to be inserted at the very beginning of the LaTeX export."
+ :group 'org-export-latex
+ :type 'string)
+
+(defcustom org-export-latex-title-command "\\maketitle"
+ "The command used to insert the title just after \\begin{document}.
+If this string contains the formatting specification \"%s\" then
+it will be used as a formatting string, passing the title as an
+argument."
+ :group 'org-export-latex
+ :type 'string)
+
+(defcustom org-export-latex-date-format
+ "%d %B %Y"
+ "Format string for \\date{...}."
+ :group 'org-export-latex
+ :type 'string)
+
+(defcustom org-export-latex-tables-verbatim nil
+ "When non-nil, export tables as verbatim."
+ :group 'org-export-latex
+ :type 'boolean)
+
+(defcustom org-export-latex-packages-alist nil
+ "Alist of packages to be inserted in the preamble.
+Each cell is of the forma \( option . package \).
+
+For example:
+
+\(setq org-export-latex-packages-alist
+ '((\"french\" \"babel\"))"
+ :group 'org-export-latex
+ :type 'alist)
+
+(defcustom org-export-latex-low-levels 'description
+ "How to convert sections below the current level of sectioning,
+as specified by `org-export-headline-levels' or the value of \"H:\"
+in Org's #+OPTION line.
+
+This can be either nil (skip the sections), 'description (convert
+the sections as descriptive lists) or a string to be used instead
+of \\section{%s}. In this latter case, the %s stands here for the
+inserted headline and is mandatory."
+ :group 'org-export-latex
+ :type '(choice (const :tag "Ignore" nil)
+ (symbol :tag "Convert as descriptive list" description)
+ (string :tag "Use a section string" :value "\\subparagraph{%s}")))
+
+(defcustom org-export-latex-remove-from-headlines
+ '(:todo t :priority t :tags t)
+ "A plist of keywords to remove from headlines.
+Non-nil means remove this keyword type from the headline.
+
+Don't remove the keys, just change their values."
+ :type 'plist
+ :group 'org-export-latex)
+
+(defcustom org-export-latex-image-default-option "width=10em"
+ "Default option for images."
+ :group 'org-export-latex
+ :type '(string))
+
+(defcustom org-export-latex-coding-system nil
+ "Coding system for the exported LaTex file."
+ :group 'org-export-latex
+ :type 'coding-system)
+
+;; FIXME Do we want this one?
+;; (defun org-export-as-latex-and-open (arg) ...)
+
+;;; Autoload functions:
+;;;###autoload
+(defun org-export-as-latex-batch ()
+ "Call `org-export-as-latex', may be used in batch processing as
+emacs --batch
+ --load=$HOME/lib/emacs/org.el
+ --eval \"(setq org-export-headline-levels 2)\"
+ --visit=MyFile --funcall org-export-as-latex-batch"
+ (org-export-as-latex org-export-headline-levels 'hidden))
+
+;;;###autoload
+(defun org-export-as-latex-to-buffer (arg)
+ "Call `org-exort-as-latex` with output to a temporary buffer.
+No file is created. The prefix ARG is passed through to `org-export-as-latex'."
+ (interactive "P")
+ (org-export-as-latex arg nil nil "*Org LaTeX Export*")
+ (switch-to-buffer-other-window "*Org LaTeX Export*"))
+
+;;;###autoload
+(defun org-replace-region-by-latex (beg end)
+ "Replace the region from BEG to END with its LaTeX export.
+It assumes the region has `org-mode' syntax, and then convert it to
+LaTeX. This can be used in any buffer. For example, you could
+write an itemized list in `org-mode' syntax in an LaTeX buffer and
+then use this command to convert it."
+ (interactive "r")
+ (let (reg latex buf)
+ (save-window-excursion
+ (if (org-mode-p)
+ (setq latex (org-export-region-as-latex
+ beg end t 'string))
+ (setq reg (buffer-substring beg end)
+ buf (get-buffer-create "*Org tmp*"))
+ (save-excursion
+ (set-buffer buf)
+ (erase-buffer)
+ (insert reg)
+ (org-mode)
+ (setq latex (org-export-region-as-latex
+ (point-min) (point-max) t 'string)))
+ (kill-buffer buf)))
+ (delete-region beg end)
+ (insert latex)))
+
+;;;###autoload
+(defun org-export-region-as-latex (beg end &optional body-only buffer)
+ "Convert region from BEG to END in `org-mode' buffer to LaTeX.
+If prefix arg BODY-ONLY is set, omit file header, footer, and table of
+contents, and only produce the region of converted text, useful for
+cut-and-paste operations.
+If BUFFER is a buffer or a string, use/create that buffer as a target
+of the converted LaTeX. If BUFFER is the symbol `string', return the
+produced LaTeX as a string and leave not buffer behind. For example,
+a Lisp program could call this function in the following way:
+
+ (setq latex (org-export-region-as-latex beg end t 'string))
+
+When called interactively, the output buffer is selected, and shown
+in a window. A non-interactive call will only retunr the buffer."
+ (interactive "r\nP")
+ (when (interactive-p)
+ (setq buffer "*Org LaTeX Export*"))
+ (let ((transient-mark-mode t) (zmacs-regions t)
+ rtn)
+ (goto-char end)
+ (set-mark (point)) ;; to activate the region
+ (goto-char beg)
+ (setq rtn (org-export-as-latex
+ nil nil nil
+ buffer body-only))
+ (if (fboundp 'deactivate-mark) (deactivate-mark))
+ (if (and (interactive-p) (bufferp rtn))
+ (switch-to-buffer-other-window rtn)
+ rtn)))
+
+;;;###autoload
+(defun org-export-as-latex (arg &optional hidden ext-plist
+ to-buffer body-only)
+ "Export current buffer to a LaTeX file."
+ (interactive "P")
+ ;; Make sure we have a file name when we need it.
+ (when (and (not (or to-buffer body-only))
+ (not buffer-file-name))
+ (if (buffer-base-buffer)
+ (org-set-local 'buffer-file-name
+ (with-current-buffer (buffer-base-buffer)
+ buffer-file-name))
+ (error "Need a file name to be able to export")))
+
+ (message "Exporting to LaTeX...")
+ (org-update-radio-target-regexp)
+ (org-export-latex-set-initial-vars ext-plist)
+ (let* ((wcf (current-window-configuration))
+ (opt-plist org-latex-options-plist)
+ (filename (concat (file-name-as-directory
+ (org-export-directory :LaTeX ext-plist))
+ (file-name-sans-extension
+ (file-name-nondirectory ;sans-extension
+ buffer-file-name)) ".tex"))
+ (filename (if (equal (file-truename filename)
+ (file-truename buffer-file-name))
+ (concat filename ".tex")
+ filename))
+ (buffer (if to-buffer
+ (cond
+ ((eq to-buffer 'string) (get-buffer-create
+ "*Org LaTeX Export*"))
+ (t (get-buffer-create to-buffer)))
+ (find-file-noselect filename)))
+ (region-p (org-region-active-p))
+ (odd org-odd-levels-only)
+ (preamble (org-export-latex-make-preamble opt-plist))
+ (skip (plist-get opt-plist :skip-before-1st-heading))
+ (text (plist-get opt-plist :text))
+ (first-lines (if skip "" (org-export-latex-first-lines)))
+ (coding-system (and (boundp 'buffer-file-coding-system)
+ buffer-file-coding-system))
+ (coding-system-for-write (or org-export-latex-coding-system
+ coding-system))
+ (save-buffer-coding-system (or org-export-latex-coding-system
+ coding-system))
+ (region (buffer-substring
+ (if region-p (region-beginning) (point-min))
+ (if region-p (region-end) (point-max))))
+ (string-for-export
+ (org-cleaned-string-for-export
+ region :emph-multiline t
+ :for-LaTeX t
+ :comments nil
+ :add-text (if (eq to-buffer 'string) nil text)
+ :skip-before-1st-heading skip
+ :LaTeX-fragments nil)))
+
+ (set-buffer buffer)
+ (erase-buffer)
+
+ (and (fboundp 'set-buffer-file-coding-system)
+ (set-buffer-file-coding-system coding-system-for-write))
+
+ ;; insert the preamble and initial document commands
+ (unless (or (eq to-buffer 'string) body-only)
+ (insert preamble))
+
+ ;; insert text found in #+TEXT
+ (when (and text (not (eq to-buffer 'string)))
+ (insert (org-export-latex-content text) "\n\n"))
+
+ ;; insert lines before the first headline
+ (unless (or skip (eq to-buffer 'string))
+ (insert first-lines))
+
+ ;; handle the case where the region does not begin with a section
+ (when region-p
+ (insert (with-temp-buffer
+ (insert string-for-export)
+ (org-export-latex-first-lines))))
+
+ ;; export the content of headlines
+ (org-export-latex-global
+ (with-temp-buffer
+ (insert string-for-export)
+ (goto-char (point-min))
+ (when (re-search-forward "^\\(\\*+\\) " nil t)
+ (let* ((asters (length (match-string 1)))
+ (level (if odd (- asters 2) (- asters 1))))
+ (setq org-latex-add-level
+ (if odd (1- (/ (1+ asters) 2)) (1- asters)))
+ (org-export-latex-parse-global level odd)))))
+
+ ;; finalization
+ (unless body-only (insert "\n\\end{document}"))
+ (or to-buffer (save-buffer))
+ (goto-char (point-min))
+ (message "Exporting to LaTeX...done")
+ (prog1
+ (if (eq to-buffer 'string)
+ (prog1 (buffer-substring (point-min) (point-max))
+ (kill-buffer (current-buffer)))
+ (current-buffer))
+ (set-window-configuration wcf))))
+
+
+;;; Parsing functions:
+(defun org-export-latex-parse-global (level odd)
+ "Parse the current buffer recursively, starting at LEVEL.
+If ODD is non-nil, assume the buffer only contains odd sections.
+Return A list reflecting the document structure."
+ (save-excursion
+ (goto-char (point-min))
+ (let* ((cnt 0) output
+ (depth org-latex-sectioning-depth))
+ (while (re-search-forward
+ (concat "^\\(\\(?:\\*\\)\\{"
+ (number-to-string (+ (if odd 2 1) level))
+ "\\}\\) \\(.*\\)$")
+ ;; make sure that there is no upper heading
+ (when (> level 0)
+ (save-excursion
+ (save-match-data
+ (re-search-forward
+ (concat "^\\(\\(?:\\*\\)\\{"
+ (number-to-string level)
+ "\\}\\) \\(.*\\)$") nil t)))) t)
+ (setq cnt (1+ cnt))
+ (let* ((pos (match-beginning 0))
+ (heading (match-string 2))
+ (nlevel (if odd (/ (+ 3 level) 2) (1+ level))))
+ (save-excursion
+ (narrow-to-region
+ (point)
+ (save-match-data
+ (if (re-search-forward
+ (concat "^\\(\\(?:\\*\\)\\{"
+ (number-to-string (+ (if odd 2 1) level))
+ "\\}\\) \\(.*\\)$") nil t)
+ (match-beginning 0)
+ (point-max))))
+ (goto-char (point-min))
+ (setq output
+ (append output
+ (list
+ (list
+ `(pos . ,pos)
+ `(level . ,nlevel)
+ `(occur . ,cnt)
+ `(heading . ,heading)
+ `(content . ,(org-export-latex-parse-content))
+ `(subcontent . ,(org-export-latex-parse-subcontent
+ level odd)))))))
+ (widen)))
+ (list output))))
+
+(defun org-export-latex-parse-list (&optional delete)
+ "Parse the list at point.
+Return a list containing first level items as strings and
+sublevels as list of strings."
+ (let ((start (point))
+ ;; Find the end of the list
+ (end (save-excursion
+ (catch 'exit
+ (while (or (looking-at org-export-latex-list-beginning-re)
+ (looking-at "^[ \t]+\\|^$"))
+ (if (eq (point) (point-max))
+ (throw 'exit (point-max)))
+ (forward-line 1))) (point)))
+ output itemsep)
+ (while (re-search-forward org-export-latex-list-beginning-re end t)
+ (setq itemsep (if (save-match-data
+ (string-match "^[0-9]" (match-string 2)))
+ "[0-9]+\\(?:\\.\\|)\\)" "[-+]"))
+ (let* ((indent1 (match-string 1))
+ (nextitem (save-excursion
+ (save-match-data
+ (or (and (re-search-forward
+ (concat "^" indent1 itemsep " *?") end t)
+ (match-beginning 0)) end))))
+ (item (buffer-substring
+ (point)
+ (or (and (re-search-forward
+ org-export-latex-list-beginning-re end t)
+ (goto-char (match-beginning 0)))
+ (goto-char end))))
+ (nextindent (match-string 1))
+ (item (org-trim item))
+ (item (if (string-match "^\\[.+\\]" item)
+ (replace-match "\\\\texttt{\\&}"
+ t nil item) item)))
+ (push item output)
+ (when (> (length nextindent)
+ (length indent1))
+ (narrow-to-region (point) nextitem)
+ (push (org-export-latex-parse-list) output)
+ (widen))))
+ (when delete (delete-region start end))
+ (setq output (nreverse output))
+ (push (if (string-match "^\\[0" itemsep)
+ 'ordered 'unordered) output)))
+
+(defun org-export-latex-parse-content ()
+ "Extract the content of a section."
+ (let ((beg (point))
+ (end (if (re-search-forward "^\\(\\*\\)+ .*$" nil t)
+ (progn (beginning-of-line) (point))
+ (point-max))))
+ (buffer-substring beg end)))
+
+(defun org-export-latex-parse-subcontent (level odd)
+ "Extract the subcontent of a section at LEVEL.
+If ODD Is non-nil, assume subcontent only contains odd sections."
+ (if (not (re-search-forward
+ (concat "^\\(\\(?:\\*\\)\\{"
+ (number-to-string (+ (if odd 4 2) level))
+ "\\}\\) \\(.*\\)$")
+ nil t))
+ nil ; subcontent is nil
+ (org-export-latex-parse-global (+ (if odd 2 1) level) odd)))
+
+;;; Rendering functions:
+(defun org-export-latex-global (content)
+ "Export CONTENT to LaTeX.
+CONTENT is an element of the list produced by
+`org-export-latex-parse-global'."
+ (if (eq (car content) 'subcontent)
+ (mapc 'org-export-latex-sub (cdr content))
+ (org-export-latex-sub (car content))))
+
+(defun org-export-latex-sub (subcontent)
+ "Export the list SUBCONTENT to LaTeX.
+SUBCONTENT is an alist containing information about the headline
+and its content."
+ (let ((num (plist-get org-latex-options-plist :section-numbers)))
+ (mapc (lambda(x) (org-export-latex-subcontent x num)) subcontent)))
+
+(defun org-export-latex-subcontent (subcontent num)
+ "Export each cell of SUBCONTENT to LaTeX."
+ (let ((heading (org-export-latex-fontify-headline
+ (cdr (assoc 'heading subcontent))))
+ (level (- (cdr (assoc 'level subcontent))
+ org-latex-add-level))
+ (occur (number-to-string (cdr (assoc 'occur subcontent))))
+ (content (cdr (assoc 'content subcontent)))
+ (subcontent (cadr (assoc 'subcontent subcontent))))
+ (cond
+ ;; Normal conversion
+ ((<= level org-latex-sectioning-depth)
+ (let ((sec (assoc level org-export-latex-sectioning-alist)))
+ (insert (format (if num (cadr sec) (caddr sec)) heading) "\n"))
+ (insert (org-export-latex-content content))
+ (cond ((stringp subcontent) (insert subcontent))
+ ((listp subcontent) (org-export-latex-sub subcontent))))
+ ;; At a level under the hl option: we can drop this subsection
+ ((> level org-latex-sectioning-depth)
+ (cond ((eq org-export-latex-low-levels 'description)
+ (insert (format "\\begin{description}\n\n\\item[%s]\n\n" heading))
+ (insert (org-export-latex-content content))
+ (cond ((stringp subcontent) (insert subcontent))
+ ((listp subcontent) (org-export-latex-sub subcontent)))
+ (insert "\\end{description}\n"))
+ ((stringp org-export-latex-low-levels)
+ (insert (format org-export-latex-low-levels heading) "\n")
+ (insert (org-export-latex-content content))
+ (cond ((stringp subcontent) (insert subcontent))
+ ((listp subcontent) (org-export-latex-sub subcontent)))))))))
+
+
+;;; Exporting internals:
+(defun org-export-latex-protect-string (string)
+ "Prevent further conversion for STRING by adding the
+org-protect property."
+ (add-text-properties
+ 0 (length string) '(org-protected t) string) string)
+
+(defun org-export-latex-protect-char-in-string (char-list string)
+ "Add org-protected text-property to char from CHAR-LIST in STRING."
+ (with-temp-buffer
+ (save-match-data
+ (insert string)
+ (goto-char (point-min))
+ (while (re-search-forward (regexp-opt char-list) nil t)
+ (add-text-properties (match-beginning 0)
+ (match-end 0) '(org-protected t)))
+ (buffer-string))))
+
+(defun org-export-latex-set-initial-vars (ext-plist)
+ "Store org local variables required for LaTeX export.
+EXT-PLIST is an optional additional plist."
+ (setq org-latex-todo-keywords-1 org-todo-keywords-1
+ org-latex-all-targets-regexp
+ (org-make-target-link-regexp (org-all-targets))
+ org-latex-options-plist
+ (org-combine-plists (org-default-export-plist) ext-plist
+ (org-infile-export-plist))
+ org-latex-sectioning-depth
+ (let ((hl-levels (plist-get org-latex-options-plist :headline-levels))
+ (sec-depth (length org-export-latex-sectioning-alist)))
+ ;; Fall back on org-export-latex-sectioning-alist length if
+ ;; headline-levels goes beyond it
+ (if (> hl-levels sec-depth) sec-depth hl-levels))))
+
+(defun org-export-latex-make-preamble (opt-plist)
+ "Make the LaTeX preamble and return it as a string.
+Argument OPT-PLIST is the options plist for current buffer."
+ (let ((toc (plist-get opt-plist :table-of-contents)))
+ (concat
+ (if (plist-get opt-plist :time-stamp-file)
+ (format-time-string "% Created %Y-%m-%d %a %H:%M\n"))
+
+ ;; insert LaTeX custom preamble
+ org-export-latex-preamble "\n"
+
+ ;; insert information on LaTeX packages
+ (when org-export-latex-packages-alist
+ (mapconcat (lambda(p)
+ (if (equal "" (car p))
+ (format "\\usepackage{%s}" (cadr p))
+ (format "\\usepackage[%s]{%s}"
+ (car p) (cadr p))))
+ org-export-latex-packages-alist "\n"))
+
+ ;; insert the title
+ (format
+ "\\title{%s}\n"
+ ;; convert the title
+ (org-export-latex-content
+ (or (plist-get opt-plist :title)
+ (and (not
+ (plist-get opt-plist :skip-before-1st-heading))
+ (org-export-grab-title-from-buffer))
+ (and buffer-file-name
+ (file-name-sans-extension
+ (file-name-nondirectory buffer-file-name)))
+ "UNTITLED")))
+
+ ;; insert author info
+ (if (plist-get opt-plist :author-info)
+ (format "\\author{%s}\n"
+ (or (plist-get opt-plist :author) user-full-name))
+ (format "%%\\author{%s}\n"
+ (or (plist-get opt-plist :author) user-full-name)))
+
+ ;; insert the date
+ (format "\\date{%s}\n"
+ (format-time-string
+ (or (plist-get opt-plist :date)
+ org-export-latex-date-format)))
+
+ ;; beginning of the document
+ "\n\\begin{document}\n\n"
+
+ ;; insert the title command
+ (if (string-match "%s" org-export-latex-title-command)
+ (format org-export-latex-title-command
+ (plist-get opt-plist :title))
+ org-export-latex-title-command)
+ "\n\n"
+
+ ;; table of contents
+ (when (and org-export-with-toc
+ (plist-get opt-plist :section-numbers))
+ (cond ((numberp toc)
+ (format "\\setcounter{tocdepth}{%s}\n\\tableofcontents\n\n"
+ (min toc (plist-get opt-plist :headline-levels))))
+ (toc (format "\\setcounter{tocdepth}{%s}\n\\tableofcontents\n\n"
+ (plist-get opt-plist :headline-levels))))))))
+
+(defun org-export-latex-first-lines (&optional comments)
+ "Export the first lines before first headline.
+COMMENTS is either nil to replace them with the empty string or a
+formatting string like %%%%s if we want to comment them out."
+ (save-excursion
+ (goto-char (point-min))
+ (let* ((pt (point))
+ (end (if (and (re-search-forward "^\\*" nil t)
+ (not (eq pt (match-beginning 0))))
+ (goto-char (match-beginning 0))
+ (goto-char (point-max)))))
+ (org-export-latex-content
+ (org-cleaned-string-for-export
+ (buffer-substring (point-min) end)
+ :for-LaTeX t
+ :emph-multiline t
+ :add-text nil
+ :comments nil
+ :skip-before-1st-heading nil
+ :LaTeX-fragments nil)))))
+
+(defun org-export-latex-keywords-maybe (remove-list)
+ "Maybe remove keywords depending on rules in REMOVE-LIST."
+ (goto-char (point-min))
+ (let ((re-todo (mapconcat 'identity org-latex-todo-keywords-1 "\\|")))
+ ;; convert TODO keywords
+ (when (re-search-forward (concat "^\\(" re-todo "\\)") nil t)
+ (if (plist-get remove-list :todo)
+ (replace-match "")
+ (replace-match (format "\\texttt{%s}" (match-string 1)) t t)))
+ ;; convert priority string
+ (when (re-search-forward "\\[\\\\#.\\]" nil t)
+ (if (plist-get remove-list :priority)
+ (replace-match "")
+ (replace-match (format "\\texttt{%s}" (match-string 0)) t t)))
+ ;; convert tags
+ (when (re-search-forward "\\(:[a-zA-Z0-9]+\\)+:" nil t)
+ (if (or (not org-export-with-tags)
+ (plist-get remove-list :tags))
+ (replace-match "")
+ (replace-match (format "\\texttt{%s}" (match-string 0)) t t)))))
+
+(defun org-export-latex-fontify-headline (headline)
+ "Fontify special words in a HEADLINE."
+ (with-temp-buffer
+ ;; FIXME: org-inside-LaTeX-fragment-p doesn't work when the $...$ is at
+ ;; the beginning of the buffer - inserting "\n" is safe here though.
+ (insert "\n" headline)
+ (goto-char (point-min))
+ (when (plist-get org-latex-options-plist :emphasize)
+ (org-export-latex-fontify))
+ (org-export-latex-special-chars
+ (plist-get org-latex-options-plist :sub-superscript))
+ (org-export-latex-keywords-maybe
+ org-export-latex-remove-from-headlines)
+ (org-export-latex-links)
+ (org-trim (buffer-substring-no-properties (point-min) (point-max)))))
+
+(defun org-export-latex-content (content)
+ "Convert CONTENT string to LaTeX."
+ (with-temp-buffer
+ (insert content)
+ (org-export-latex-quotation-marks)
+ (when (plist-get org-latex-options-plist :emphasize)
+ (org-export-latex-fontify))
+ (org-export-latex-special-chars
+ (plist-get org-latex-options-plist :sub-superscript))
+ (org-export-latex-links)
+ (org-export-latex-keywords
+ (plist-get org-latex-options-plist :timestamps))
+ (org-export-latex-lists)
+ (org-export-latex-tables
+ (plist-get org-latex-options-plist :tables))
+ (org-export-latex-fixed-width
+ (plist-get org-latex-options-plist :fixed-width))
+ ;; return string
+ (buffer-substring (point-min) (point-max))))
+
+(defun org-export-latex-quotation-marks ()
+ "Export question marks depending on language conventions.
+Local definition of the language overrides
+`org-export-latex-quotation-marks-convention' which overrides
+`org-export-default-language'."
+ (let* ((lang (plist-get org-latex-options-plist :language))
+ (quote-rpl (if (equal lang "fr")
+ '(("\\(\\s-\\)\"" "«~")
+ ("\\(\\S-\\)\"" "~»")
+ ("\\(\\s-\\)'" "`"))
+ '(("\\(\\s-\\)\"" "``")
+ ("\\(\\S-\\)\"" "''")
+ ("\\(\\s-\\)'" "`")))))
+ (mapc (lambda(l) (goto-char (point-min))
+ (while (re-search-forward (car l) nil t)
+ (let ((rpl (concat (match-string 1) (cadr l))))
+ (org-export-latex-protect-string rpl)
+ (org-if-unprotected
+ (replace-match rpl t t))))) quote-rpl)))
+
+;; | chars/string in Org | normal environment | math environment |
+;; |-----------------------+-----------------------+-----------------------|
+;; | & # % $ | \& \# \% \$ | \& \# \% \$ |
+;; | { } _ ^ \ | \{ \} \_ \^ \\ | { } _ ^ \ |
+;; |-----------------------+-----------------------+-----------------------|
+;; | a_b and a^b | $a_b$ and $a^b$ | a_b and a^b |
+;; | a_abc and a_{abc} | $a_a$bc and $a_{abc}$ | a_abc and a_{abc} |
+;; | \tau and \mu | $\tau$ and $\mu$ | \tau and \mu |
+;; |-----------------------+-----------------------+-----------------------|
+;; | \_ \^ | \_ \^ | \_ \^ |
+;; | \(a=\mu\mbox{m}\) | \(a=\mu\mbox{m}\) | \(a=\mu\mbox{m}\) |
+;; | \[\beta^2-a=0\] | \[\beta^2-a=0\] | \[\beta^2-a=0\] |
+;; | $x=22\tau$ | $x=22\tau$ | $x=22\tau$ |
+;; | $$\alpha=\sqrt{a^3}$$ | $$\alpha=\sqrt{a^3}$$ | $$\alpha=\sqrt{a^3}$$ |
+
+(defun org-export-latex-special-chars (sub-superscript)
+ "Export special characters to LaTeX.
+If SUB-SUPERSCRIPT is non-nil, convert \\ and ^.
+See the `org-export-latex.el' code for a complete conversion table."
+ (goto-char (point-min))
+ (mapc (lambda(c)
+ (goto-char (point-min))
+ (while (re-search-forward c nil t)
+ ;; Put the point where to check for org-protected
+ (unless (get-text-property (match-beginning 2) 'org-protected)
+ (cond ((member (match-string 2) '("\\$" "$"))
+ (if (equal (match-string 2) "\\$")
+ (replace-match (concat (match-string 1) "$"
+ (match-string 3)) t t)
+ (replace-match (concat (match-string 1) "\\$"
+ (match-string 3)) t t)))
+ ((member (match-string 2) '("&" "%" "#"))
+ (if (equal (match-string 1) "\\")
+ (replace-match (match-string 2) t t)
+ (replace-match (concat (match-string 1) "\\"
+ (match-string 2)) t t)))
+ ((equal (match-string 2) "~")
+ (cond ((equal (match-string 1) "\\") nil)
+ ((eq 'org-link (get-text-property 0 'face (match-string 2)))
+ (replace-match (concat (match-string 1) "\\~") t t))
+ (t (replace-match
+ (org-export-latex-protect-string
+ (concat (match-string 1) "\\~{}")) t t))))
+ ((member (match-string 2) '("{" "}"))
+ (unless (save-match-data (org-inside-LaTeX-fragment-p))
+ (if (equal (match-string 1) "\\")
+ (replace-match (match-string 2) t t)
+ (replace-match (concat (match-string 1) "\\"
+ (match-string 2)) t t)))))
+ (unless (save-match-data (org-inside-LaTeX-fragment-p))
+ (cond ((equal (match-string 2) "\\")
+ (replace-match (or (save-match-data
+ (org-export-latex-treat-backslash-char
+ (match-string 1)
+ (match-string 3))) "") t t))
+ ((member (match-string 2) '("_" "^"))
+ (replace-match (or (save-match-data
+ (org-export-latex-treat-sub-super-char
+ sub-superscript
+ (match-string 1)
+ (match-string 2)
+ (match-string 3))) "") t t)))))))
+ '("^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\([^\n$]*\\)$"
+ "\\([a-za-z0-9]+\\|[ \t\n]\\|\\b\\|\\\\\\)\\(_\\|\\^\\)\\([a-za-z0-9]+\\|[ \t\n]\\|[:punct:]\\|{[a-za-z0-9]+}\\|([a-za-z0-9]+)\\)"
+ "\\(.\\|^\\)\\(\\\\\\)\\([ \t\n]\\|[a-zA-Z&#%{}\"]+\\)"
+ "\\(.\\|^\\)\\(&\\)"
+ "\\(.\\|^\\)\\(#\\)"
+ "\\(.\\|^\\)\\(%\\)"
+ "\\(.\\|^\\)\\({\\)"
+ "\\(.\\|^\\)\\(}\\)"
+ "\\(.\\|^\\)\\(~\\)"
+ ;; (?\< . "\\textless{}")
+ ;; (?\> . "\\textgreater{}")
+ )))
+
+(defun org-export-latex-treat-sub-super-char
+ (subsup string-before char string-after)
+ "Convert the \"_\" and \"^\" characters to LaTeX.
+SUBSUP corresponds to the ^: option in the #+OPTIONS line.
+Convert CHAR depending on STRING-BEFORE and STRING-AFTER."
+ (cond ((equal string-before "\\")
+ (concat string-before char string-after))
+ ;; this is part of a math formula
+ ((and (string-match "\\S-+" string-before)
+ (string-match "\\S-+" string-after))
+ (cond ((eq 'org-link (get-text-property 0 'face char))
+ (concat string-before "\\" char string-after))
+ ((save-match-data (org-inside-LaTeX-fragment-p))
+ (if subsup
+ (cond ((eq 1 (length string-after))
+ (concat string-before char string-after))
+ ((string-match "[({]?\\([^)}]+\\)[)}]?" string-after)
+ (format "%s%s{%s}" string-before char
+ (match-string 1 string-after))))))
+ ((and subsup
+ (> (length string-after) 1)
+ (string-match "[({]?\\([^)}]+\\)[)}]?" string-after))
+ (format "$%s%s{%s}$" string-before char
+ (match-string 1 string-after)))
+ (subsup (concat "$" string-before char string-after "$"))
+ (t (org-export-latex-protect-string
+ (concat string-before "\\" char "{}" string-after)))))
+ (t (org-export-latex-protect-string
+ (concat string-before "\\" char "{}" string-after)))))
+
+(defun org-export-latex-treat-backslash-char (string-before string-after)
+ "Convert the \"$\" special character to LaTeX.
+The conversion is made depending of STRING-BEFORE and STRING-AFTER."
+ (cond ((member (list string-after) org-html-entities)
+ ;; backslash is part of a special entity (like "\alpha")
+ (concat string-before "$\\"
+ (or (cdar (member (list string-after) org-html-entities))
+ string-after) "$"))
+ ((and (not (string-match "^[ \n\t]" string-after))
+ (not (string-match "[ \t]\\'\\|^" string-before)))
+ ;; backslash is inside a word
+ (org-export-latex-protect-string
+ (concat string-before "\\textbackslash{}" string-after)))
+ ((not (or (equal string-after "")
+ (string-match "^[ \t\n]" string-after)))
+ ;; backslash might escape a character (like \#) or a user TeX
+ ;; macro (like \setcounter)
+ (org-export-latex-protect-string
+ (concat string-before "\\" string-after)))
+ ((and (string-match "^[ \t\n]" string-after)
+ (string-match "[ \t\n]\\'" string-before))
+ ;; backslash is alone, convert it to $\backslash$
+ (org-export-latex-protect-string
+ (concat string-before "\\textbackslash{}" string-after)))
+ (t (org-export-latex-protect-string
+ (concat string-before "\\textbackslash{}" string-after)))))
+
+(defun org-export-latex-keywords (timestamps)
+ "Convert special keywords to LaTeX.
+Regexps are those from `org-latex-special-string-regexps'."
+ (let ((rg org-latex-special-string-regexps) r)
+ (while (setq r (pop rg))
+ (goto-char (point-min))
+ (while (re-search-forward (eval r) nil t)
+ (if (not timestamps)
+ (replace-match (format "\\\\texttt{%s}" (match-string 0)) t)
+ (replace-match ""))))))
+
+(defun org-export-latex-fixed-width (opt)
+ "When OPT is non-nil convert fixed-width sections to LaTeX."
+ (goto-char (point-min))
+ ;; FIXME the search shouldn't be performed on already converted text
+ (while (re-search-forward "^[ \t]*:" nil t)
+ (if opt
+ (progn (goto-char (match-beginning 0))
+ (insert "\\begin{verbatim}\n")
+ (while (looking-at "^\\([ \t]*\\):\\(.*\\)$")
+ (replace-match (concat (match-string 1)
+ (match-string 2)) t t)
+ (forward-line))
+ (insert "\\end{verbatim}\n\n"))
+ (progn (goto-char (match-beginning 0))
+ (while (looking-at "^\\([ \t]*\\):\\(.*\\)$")
+ (replace-match (concat "%" (match-string 1)
+ (match-string 2)) t t)
+ (forward-line))))))
+
+(defun org-export-latex-lists ()
+ "Convert lists to LaTeX."
+ (goto-char (point-min))
+ (while (re-search-forward org-export-latex-list-beginning-re nil t)
+ (beginning-of-line)
+ (org-export-list-to-latex
+ (org-export-latex-parse-list t))))
+
+(defun org-export-list-to-generic (list params)
+ "Convert a LIST parsed through `org-export-latex-parse-list' to other formats.
+
+Valid parameters are
+
+:ustart String to start an unordered list
+:uend String to end an unordered list
+
+:ostart String to start an ordered list
+:oend String to end an ordered list
+
+:splice When set to t, return only list body lines, don't wrap
+ them into :[u/o]start and :[u/o]end. Default is nil.
+
+:istart String to start a list item
+:iend String to end a list item
+:isep String to separate items
+:lsep String to separate sublists"
+ (interactive)
+ (let* ((p params) sublist
+ (splicep (plist-get p :splice))
+ (ostart (plist-get p :ostart))
+ (oend (plist-get p :oend))
+ (ustart (plist-get p :ustart))
+ (uend (plist-get p :uend))
+ (istart (plist-get p :istart))
+ (iend (plist-get p :iend))
+ (isep (plist-get p :isep))
+ (lsep (plist-get p :lsep)))
+ (let ((wrapper
+ (cond ((eq (car list) 'ordered)
+ (concat ostart "\n%s" oend "\n"))
+ ((eq (car list) 'unordered)
+ (concat ustart "\n%s" uend "\n"))))
+ rtn)
+ (while (setq sublist (pop list))
+ (cond ((symbolp sublist) nil)
+ ((stringp sublist)
+ (setq rtn (concat rtn istart sublist iend isep)))
+ (t
+ (setq rtn (concat rtn ;; previous list
+ lsep ;; list separator
+ (org-export-list-to-generic sublist p)
+ lsep ;; list separator
+ )))))
+ (format wrapper rtn))))
+
+(defun org-export-list-to-latex (list)
+ "Convert LIST into a LaTeX list."
+ (insert
+ (org-export-list-to-generic
+ list '(:splicep nil :ostart "\\begin{enumerate}" :oend "\\end{enumerate}"
+ :ustart "\\begin{itemize}" :uend "\\end{itemize}"
+ :istart "\\item " :iend ""
+ :isep "\n" :lsep "\n"))
+ ;; Add a trailing \n after list conversion
+ "\n"))
+
+;; FIXME Use org-export-highlight-first-table-line ?
+(defun org-export-latex-tables (insert)
+ "Convert tables to LaTeX and INSERT it."
+ (goto-char (point-min))
+ (while (re-search-forward "^\\([ \t]*\\)|" nil t)
+ ;; FIXME really need to save-excursion?
+ (save-excursion (org-table-align))
+ (let* ((beg (org-table-begin))
+ (end (org-table-end))
+ (raw-table (buffer-substring-no-properties beg end))
+ fnum fields line lines olines gr colgropen line-fmt align)
+ (if org-export-latex-tables-verbatim
+ (let* ((tbl (concat "\\begin{verbatim}\n" raw-table
+ "\\end{verbatim}\n")))
+ (apply 'delete-region (list beg end))
+ (insert tbl))
+ (progn
+ (setq lines (split-string raw-table "\n" t))
+ (apply 'delete-region (list beg end))
+ (when org-export-table-remove-special-lines
+ (setq lines (org-table-clean-before-export lines)))
+ ;; make a formatting string to reflect aligment
+ (setq olines lines)
+ (while (and (not line-fmt) (setq line (pop olines)))
+ (unless (string-match "^[ \t]*|-" line)
+ (setq fields (org-split-string line "[ \t]*|[ \t]*"))
+ (setq fnum (make-vector (length fields) 0))
+ (setq line-fmt
+ (mapconcat
+ (lambda (x)
+ (setq gr (pop org-table-colgroup-info))
+ (format "%s%%s%s"
+ (cond ((eq gr ':start)
+ (prog1 (if colgropen "|" "")
+ (setq colgropen t)))
+ ((eq gr ':startend)
+ (prog1 (if colgropen "|" "|")
+ (setq colgropen nil)))
+ (t ""))
+ (if (memq gr '(:end :startend))
+ (progn (setq colgropen nil) "|")
+ "")))
+ fnum ""))))
+ ;; maybe remove the first and last "|"
+ (when (string-match "^\\(|\\)?\\(.+\\)|$" line-fmt)
+ (setq line-fmt (match-string 2 line-fmt)))
+ ;; format alignment
+ (setq align (apply 'format
+ (cons line-fmt
+ (mapcar (lambda (x) (if x "r" "l"))
+ org-table-last-alignment))))
+ ;; prepare the table to send to orgtbl-to-latex
+ (setq lines
+ (mapcar
+ (lambda(elem)
+ (or (and (string-match "[ \t]*|-+" elem) 'hline)
+ (split-string (org-trim elem) "|" t)))
+ lines))
+ (when insert
+ (insert (orgtbl-to-latex
+ lines `(:tstart ,(concat "\\begin{tabular}{" align "}")))
+ "\n\n")))))))
+
+(defun org-export-latex-fontify ()
+ "Convert fontification to LaTeX."
+ (goto-char (point-min))
+ (while (re-search-forward org-emph-re nil t)
+ ;; The match goes one char after the *string*
+ (let ((emph (assoc (match-string 3)
+ org-export-latex-emphasis-alist))
+ rpl)
+ (unless (get-text-property (1- (point)) 'org-protected)
+ (setq rpl (concat (match-string 1)
+ (format (org-export-latex-protect-char-in-string
+ '("\\" "{" "}") (cadr emph))
+ (match-string 4))
+ (match-string 5)))
+ (if (caddr emph)
+ (setq rpl (org-export-latex-protect-string rpl)))
+ (replace-match rpl t t)))
+ (backward-char)))
+
+(defun org-export-latex-links ()
+ ;; Make sure to use the LaTeX hyperref and graphicx package
+ ;; or send some warnings.
+ "Convert links to LaTeX."
+ (goto-char (point-min))
+ (while (re-search-forward org-bracket-link-analytic-regexp nil t)
+ (org-if-unprotected
+ (goto-char (match-beginning 0))
+ (let* ((re-radio org-latex-all-targets-regexp)
+ (remove (list (match-beginning 0) (match-end 0)))
+ (type (match-string 2))
+ (raw-path (match-string 3))
+ (full-raw-path (concat (match-string 1) raw-path))
+ (desc (match-string 5))
+ imgp radiop
+ ;; define the path of the link
+ (path (cond
+ ((member type '("http" "https" "ftp"))
+ (concat type ":" raw-path))
+ ((and re-radio (string-match re-radio raw-path))
+ (setq radiop t))
+ ((equal type "mailto")
+ (concat type ":" raw-path))
+ ((equal type "file")
+ (if (and (or (org-file-image-p (expand-file-name raw-path))
+ (string-match "\\.eps$" raw-path))
+ (equal desc full-raw-path))
+ (setq imgp t)
+ (progn (when (string-match "\\(.+\\)::.+" raw-path)
+ (setq raw-path (match-string 1 raw-path)))
+ (if (file-exists-p raw-path)
+ (concat type "://" (expand-file-name raw-path))
+ (concat type "://" (org-export-directory
+ :LaTeX org-latex-options-plist)
+ raw-path))))))))
+ ;; process with link inserting
+ (apply 'delete-region remove)
+ (cond ((and imgp (plist-get org-latex-options-plist :inline-images))
+ (insert (format "\\includegraphics[%s]{%s}"
+ ;; image option should be set be a comment line
+ org-export-latex-image-default-option
+ (expand-file-name raw-path))))
+ ;; FIXME: what about caption? image properties?
+ (radiop (insert (format "\\hyperref[%s]{%s}" raw-path desc)))
+ (path (insert (format "\\href{%s}{%s}" path desc)))
+ (t (insert "\\texttt{" desc "}")))))))
+
+(defun org-export-latex-cleaned-string
+ ;; FIXME remove commentsp call in org.el and here
+ (&optional commentsp)
+ "Clean stuff in the LaTeX export."
+
+ ;; Preserve line breaks
+ (goto-char (point-min))
+ (while (re-search-forward "\\\\\\\\" nil t)
+ (add-text-properties (match-beginning 0) (match-end 0)
+ '(org-protected t)))
+
+ ;; Convert LaTeX to \LaTeX{}
+ (goto-char (point-min))
+ (let ((case-fold-search nil) rpl)
+ (while (re-search-forward "\\([^+_]\\)LaTeX" nil t)
+ (replace-match (org-export-latex-protect-string
+ (concat (match-string 1) "\\LaTeX{}")) t t)))
+
+ ;; Convert horizontal rules
+ (goto-char (point-min))
+ (while (re-search-forward "^----+.$" nil t)
+ (replace-match (org-export-latex-protect-string "\\hrule") t t))
+
+ ;; Protect LaTeX \commands{...}
+ (goto-char (point-min))
+ (while (re-search-forward "\\\\[a-zA-Z]+\\(?:\\[.*\\]\\)?{.*}" nil t)
+ (add-text-properties (match-beginning 0) (match-end 0)
+ '(org-protected t)))
+
+ ;; Replace radio links
+ (goto-char (point-min))
+ (while (re-search-forward
+ (concat "<<<?" org-latex-all-targets-regexp
+ ">>>?\\((INVISIBLE)\\)?") nil t)
+ (replace-match
+ (org-export-latex-protect-string
+ (format "\\label{%s}%s"(match-string 1)
+ (if (match-string 2) "" (match-string 1)))) t t))
+
+ ;; Delete @<...> constructs
+ (goto-char (point-min))
+ ;; Thanks to Daniel Clemente for this regexp
+ (while (re-search-forward "@<\\(?:[^\"\n]\\|\".*\"\\)*?>" nil t)
+ (replace-match ""))
+
+ ;; When converting to LaTeX, replace footnotes
+ ;; FIXME: don't protect footnotes from conversion
+ (when (plist-get org-latex-options-plist :footnotes)
+ (goto-char (point-min))
+ (while (re-search-forward "\\[[0-9]+\\]" nil t)
+ (when (save-match-data
+ (save-excursion (beginning-of-line)
+ (looking-at "[^:|#]")))
+ (let ((foot-beg (match-beginning 0))
+ (foot-end (match-end 0))
+ (foot-prefix (match-string 0))
+ footnote footnote-rpl)
+ (when (and (re-search-forward (regexp-quote foot-prefix) nil t))
+ (replace-match "")
+ (let ((end (save-excursion
+ (if (re-search-forward "^$\\|^#.*$\\|\\[[0-9]+\\]" nil t)
+ (match-beginning 0) (point-max)))))
+ (setq footnote
+ (concat
+ (org-trim (buffer-substring (point) end))
+ ;; FIXME stupid workaround for cases where
+ ;; `org-bracket-link-analytic-regexp' matches
+ ;; }. as part of the link.
+ " "))
+ (delete-region (point) end)))
+ (goto-char foot-beg)
+ (delete-region foot-beg foot-end)
+ (setq footnote-rpl (format "\\footnote{%s}" footnote))
+ (add-text-properties 0 10 '(org-protected t) footnote-rpl)
+ (add-text-properties (1- (length footnote-rpl))
+ (length footnote-rpl)
+ '(org-protected t) footnote-rpl)
+ (insert footnote-rpl))))
+
+ ;; Replace footnote section tag for LaTeX
+ (goto-char (point-min))
+ (while (re-search-forward
+ (concat "^" footnote-section-tag-regexp) nil t)
+ (replace-match ""))))
+
+(provide 'org-export-latex)
+
+;; arch-tag: 23c2b87d-da04-4c2d-ad2d-1eb6487bc3ad
+;;; org-export-latex.el ends here
diff --git a/lisp/textmodes/org-publish.el b/lisp/textmodes/org-publish.el
new file mode 100644
index 00000000000..e98afaf4a6b
--- /dev/null
+++ b/lisp/textmodes/org-publish.el
@@ -0,0 +1,609 @@
+;;; org-publish.el --- publish related org-mode files as a website
+
+;; Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+
+;; Author: David O'Toole <dto@gnu.org>
+;; Keywords: hypermedia, outlines
+;; Version: 1.80a
+
+;; This file 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 3, or (at your option)
+;; any later version.
+
+;; This file 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.
+
+;; This file is part of GNU Emacs.
+
+;;; Commentary:
+
+;; Requires at least version 4.27 of org.el
+;;
+;; The official org-mode website:
+;; http://staff.science.uva.nl/~dominik/Tools/org/
+;;
+;; Home page for org-publish.el:
+;; http://dto.freeshell.org/notebook/OrgMode.html
+
+;; This program extends the HTML publishing support of Emacs Org-mode
+;; to allow configurable publishing of related sets of files as a
+;; complete website.
+;;
+;; org-publish.el can do the following:
+;;
+;; + Publish all one's org-files to html
+;; + Upload html, images, attachments and other files to a web server
+;; + Exclude selected private pages from publishing
+;; + Publish a clickable index of pages
+;; + Manage local timestamps, for publishing only changed files
+;; + Accept plugin functions to extend range of publishable content
+;;
+;; Special thanks to the org-mode maintainer Carsten Dominik for his
+;; ideas, enthusiasm, and cooperation.
+
+;;; Installation:
+
+;; Put org-publish.el in your load path, byte-compile it, and then add
+;; the following lines to your emacs initialization file:
+
+;; (autoload 'org-publish "org-publish" nil t)
+;; (autoload 'org-publish "org-publish-all" nil t)
+;; (autoload 'org-publish "org-publish-current-file" nil t)
+;; (autoload 'org-publish "org-publish-current-project" nil t)
+
+;; NOTE: When org-publish.el is included with org.el, those forms are
+;; already in the file org-install.el, and hence don't need to be put
+;; in your emacs initialization file in this case.
+
+;;; Usage:
+;;
+;; The program's main configuration variable is
+;; `org-publish-project-alist'. See below for example configurations
+;; with commentary.
+
+;; The main interactive functions are:
+;;
+;; M-x org-publish
+;; M-x org-publish-all
+;; M-x org-publish-current-file
+;; M-x org-publish-current-project
+
+;;;; Simple example configuration:
+
+;; (setq org-publish-project-alist
+;; (list
+;; '("org" . (:base-directory "~/org/"
+;; :base-extension "org"
+;; :publishing-directory "~/public_html"
+;; :with-section-numbers nil
+;; :table-of-contents nil
+;; :style "<link rel=stylesheet href=\"../other/mystyle.css\" type=\"text/css\">")))
+
+;;;; More complex example configuration:
+
+;; Imagine your *.org files are kept in ~/org, your images in
+;; ~/images, and stylesheets in ~/other. Now imagine you want to
+;; publish the files through an ssh connection to a remote host, via
+;; Tramp-mode. To maintain relative links from *.org files to /images
+;; and /other, we should replicate the same directory structure in
+;; your web server account's designated html root (in this case,
+;; assumed to be ~/html)
+
+;; Once you've done created the proper directories, you can adapt the
+;; following example configuration to your specific paths, run M-x
+;; org-publish-all, and it should publish the files to the correct
+;; directories on the web server, transforming the *.org files into
+;; HTML, and leaving other files alone.
+
+;; (setq org-publish-project-alist
+;; (list
+;; '("orgfiles" :base-directory "~/org/"
+;; :base-extension "org"
+;; :publishing-directory "/ssh:user@host:~/html/notebook/"
+;; :publishing-function org-publish-org-to-html
+;; :exclude "PrivatePage.org" ;; regexp
+;; :headline-levels 3
+;; :with-section-numbers nil
+;; :table-of-contents nil
+;; :style "<link rel=stylesheet href=\"../other/mystyle.css\" type=\"text/css\">"
+;; :auto-preamble t
+;; :auto-postamble nil)
+;;
+;; ("images" :base-directory "~/images/"
+;; :base-extension "jpg\\|gif\\|png"
+;; :publishing-directory "/ssh:user@host:~/html/images/"
+;; :publishing-function org-publish-attachment)
+;;
+;; ("other" :base-directory "~/other/"
+;; :base-extension "css"
+;; :publishing-directory "/ssh:user@host:~/html/other/"
+;; :publishing-function org-publish-attachment)
+;; ("website" :components ("orgfiles" "images" "other"))))
+
+;; For more information, see the documentation for the variable
+;; `org-publish-project-alist'.
+
+;; Of course, you don't have to publish to remote directories from
+;; within emacs. You can always just publish to local folders, and
+;; then use the synchronization/upload tool of your choice.
+
+
+;;; List of user-visible changes since version 1.27
+
+;; 1.78: Allow list-valued :publishing-function
+;; 1.77: Added :preparation-function, this allows you to use GNU Make etc.
+;; 1.65: Remove old "composite projects". They're redundant.
+;; 1.64: Allow meta-projects with :components
+;; 1.57: Timestamps flag is now called "org-publish-use-timestamps-flag"
+;; 1.52: Properly set default for :index-filename
+;; 1.48: Composite projects allowed.
+;; :include keyword allowed.
+;; 1.43: Index no longer includes itself in the index.
+;; 1.42: Fix "function definition is void" error
+;; when :publishing-function not set in org-publish-current-file.
+;; 1.41: Fixed bug where index isn't published on first try.
+;; 1.37: Added interactive function "org-publish". Prompts for particular
+;; project name to publish.
+;; 1.34: Added force-publish option to all interactive functions.
+;; 1.32: Fixed "index.org has changed on disk" error during index publishing.
+;; 1.30: Fixed startup error caused by (require 'em-unix)
+
+;;; Code:
+
+
+(eval-when-compile
+ (require 'cl))
+
+
+(defgroup org-publish nil
+ "Options for publishing a set of Org-mode and related files."
+ :tag "Org Publishing"
+ :group 'org)
+
+
+(defcustom org-publish-project-alist nil
+ "Association list to control publishing behavior.
+Each element of the alist is a publishing 'project.' The CAR of
+each element is a string, uniquely identifying the project. The
+CDR of each element is in one of the following forms:
+
+ (:property value :property value ... )
+
+OR,
+
+ (:components (\"project-1\" \"project-2\" ...))
+
+When the CDR of an element of org-publish-project-alist is in
+this second form, the elements of the list after :components are
+taken to be components of the project, which group together files
+requiring different publishing options. When you publish such a
+project with M-x org-publish, the components all publish.
+
+When a property is given a value in org-publish-project-alist, its
+setting overrides the value of the corresponding user variable
+ (if any) during publishing. However, options set within a file
+override everything.
+
+Most properties are optional, but some should always be set:
+
+ :base-directory Directory containing publishing source files
+ :base-extension Extension (without the dot!) of source files.
+ This can be a regular expression.
+ :publishing-directory Directory (possibly remote) where output
+ files will be published
+
+The :exclude property may be used to prevent certain files from
+being published. Its value may be a string or regexp matching
+file names you don't want to be published.
+
+The :include property may be used to include extra files. Its
+value may be a list of filenames to include. The filenames are
+considered relative to the publishing directory.
+
+When both :include and :exclude properties are given values, the
+exclusion step happens first.
+
+One special property controls which back-end function to use for
+publishing files in the project. This can be used to extend the
+set of file types publishable by org-publish, as well as the set
+of output formats.
+
+ :publishing-function Function to publish file. The default is
+ org-publish-org-to-html, but other
+ values are possible. May also be a
+ list of functions, in which case
+ each function in the list is invoked
+ in turn.
+
+Another property allows you to insert code that prepares a
+project for publishing. For example, you could call GNU Make on a
+certain makefile, to ensure published files are built up to date.
+
+ :preparation-function Function to be called before publishing
+ this project.
+
+Some properties control details of the Org publishing process,
+and are equivalent to the corresponding user variables listed in
+the right column. See the documentation for those variables to
+learn more about their use and default values.
+
+ :language org-export-default-language
+ :headline-levels org-export-headline-levels
+ :section-numbers org-export-with-section-numbers
+ :table-of-contents org-export-with-toc
+ :emphasize org-export-with-emphasize
+ :sub-superscript org-export-with-sub-superscripts
+ :TeX-macros org-export-with-TeX-macros
+ :fixed-width org-export-with-fixed-width
+ :tables org-export-with-tables
+ :table-auto-headline org-export-highlight-first-table-line
+ :style org-export-html-style
+ :convert-org-links org-export-html-link-org-files-as-html
+ :inline-images org-export-html-inline-images
+ :expand-quoted-html org-export-html-expand
+ :timestamp org-export-html-with-timestamp
+ :publishing-directory org-export-publishing-directory
+ :preamble org-export-html-preamble
+ :postamble org-export-html-postamble
+ :auto-preamble org-export-html-auto-preamble
+ :auto-postamble org-export-html-auto-postamble
+ :author user-full-name
+ :email user-mail-address
+
+The following properties may be used to control publishing of an
+index of files or summary page for a given project.
+
+ :auto-index Whether to publish an index during
+ org-publish-current-project or org-publish-all.
+ :index-filename Filename for output of index. Defaults
+ to 'index.org' (which becomes 'index.html')
+ :index-title Title of index page. Defaults to name of file.
+ :index-function Plugin function to use for generation of index.
+ Defaults to 'org-publish-org-index', which
+ generates a plain list of links to all files
+ in the project.
+"
+ :group 'org-publish
+ :type 'alist)
+
+
+(defcustom org-publish-use-timestamps-flag t
+ "When non-nil, use timestamp checking to publish only changed files.
+When nil, do no timestamp checking and always publish all
+files."
+ :group 'org-publish
+ :type 'boolean)
+
+
+(defcustom org-publish-timestamp-directory "~/.org-timestamps/"
+ "Name of directory in which to store publishing timestamps."
+ :group 'org-publish
+ :type 'string)
+
+
+;;;; Timestamp-related functions
+
+
+(defun org-publish-timestamp-filename (filename)
+ "Return path to timestamp file for filename FILENAME."
+ (while (string-match "~\\|/" filename)
+ (setq filename (replace-match "_" nil t filename)))
+ (concat org-publish-timestamp-directory filename ".timestamp"))
+
+
+(defun org-publish-needed-p (filename)
+ "Check whether file should be published.
+If org-publish-use-timestamps-flag is set to nil, this function always
+returns t. Otherwise, check the timestamps folder to determine
+whether file should be published."
+ (if org-publish-use-timestamps-flag
+ (progn
+ ;;
+ ;; create folder if needed
+ (if (not (file-exists-p org-publish-timestamp-directory))
+ (make-directory org-publish-timestamp-directory)
+ (if (not (file-directory-p org-publish-timestamp-directory))
+ (error "org-publish-timestamp-directory must be a directory.")))
+ ;;
+ ;; check timestamp. ok if timestamp file doesn't exist
+ (let* ((timestamp (org-publish-timestamp-filename filename))
+ (rtn (file-newer-than-file-p filename timestamp)))
+ (if rtn
+ ;; handle new timestamps
+ (if (not (file-exists-p timestamp))
+ ;; create file
+ (with-temp-buffer
+ (make-directory (file-name-directory timestamp) :parents)
+ (write-file timestamp)
+ (kill-buffer (current-buffer)))))
+ rtn))
+ t))
+
+
+(defun org-publish-update-timestamp (filename)
+ "Update publishing timestamp for file FILENAME."
+ (let ((timestamp (org-publish-timestamp-filename filename)))
+ ;; Emacs 21 doesn't have set-file-times
+ (if (fboundp 'set-file-times)
+ (set-file-times timestamp)
+ (call-process "touch" nil 0 nil timestamp))))
+
+
+;;;; A hash mapping files to project names
+
+
+(defvar org-publish-files (make-hash-table :test 'equal) "Hash
+table mapping file names to project names.")
+
+
+;;;; Checking filenames against this hash
+
+
+(defun org-publish-validate-link (link &optional directory)
+ (gethash (file-truename (expand-file-name link directory))
+ org-publish-files))
+
+
+;;;; Getting project information out of org-publish-project-alist
+
+
+(defun org-publish-get-plists (&optional project-name)
+ "Return a list of property lists for project PROJECT-NAME.
+When argument is not given, return all property lists for all projects."
+ (let ((alist (if project-name
+ (list (assoc project-name org-publish-project-alist))
+ org-publish-project-alist))
+ (project nil)
+ (plists nil)
+ (single nil)
+ (components nil))
+
+ ;;
+ ;;
+ (while (setq project (pop alist))
+ ;; what kind of project is it?
+ (if (setq components (plist-get (cdr project) :components))
+ ;; meta project. annotate each plist with name of enclosing project
+ (setq single
+ (apply 'append
+ (mapcar 'org-publish-get-plists components)))
+ ;; normal project
+ (setq single (list (cdr project))))
+ ;;
+ (setq plists (append plists single))
+ (dolist (p single)
+ (let* ((exclude (plist-get p :exclude))
+ (files (org-publish-get-base-files p exclude)))
+ (dolist (f files)
+ (puthash (file-truename f) (car project) org-publish-files)))))
+ plists))
+
+
+
+(defun org-publish-get-base-files (plist &optional exclude-regexp)
+ "Return a list of all files in project defined by PLIST.
+If EXCLUDE-REGEXP is set, this will be used to filter out
+matching filenames."
+ (let* ((dir (file-name-as-directory (plist-get plist :base-directory)))
+ (include-list (plist-get plist :include))
+ (extension (or (plist-get plist :base-extension) "org"))
+ (regexp (concat "^[^\\.].*\\.\\(" extension "\\)$"))
+ (allfiles (directory-files dir t regexp)))
+ ;;
+ ;; exclude files
+ (setq allfiles
+ (if (not exclude-regexp)
+ allfiles
+ (delq nil
+ (mapcar (lambda (x)
+ (if (string-match exclude-regexp x) nil x))
+ allfiles))))
+ ;;
+ ;; include extra files
+ (let ((inc nil))
+ (while (setq inc (pop include-list))
+ (setq allfiles (cons (expand-file-name inc dir) allfiles))))
+
+ allfiles))
+
+
+(defun org-publish-get-project-from-filename (filename)
+ "Figure out which project a given FILENAME belongs to, if any.
+Filename should contain full path. Returns name of project, or
+nil if not found."
+ (org-publish-get-plists)
+ (gethash (file-truename filename) org-publish-files))
+
+
+(defun org-publish-get-plist-from-filename (filename)
+ "Return publishing configuration plist for file FILENAME."
+ (let ((found nil))
+ (mapc
+ (lambda (plist)
+ (let ((files (org-publish-get-base-files plist)))
+ (if (member (expand-file-name filename) files)
+ (setq found plist))))
+ (org-publish-get-plists))
+ found))
+
+
+
+;;;; Pluggable publishing back-end functions
+
+(defun org-publish-org-to-latex (plist filename)
+ "Publish an org file to LaTeX."
+ (org-publish-org-to "latex" plist filename))
+
+(defun org-publish-org-to-html (plist filename)
+ "Publish an org file to HTML."
+ (org-publish-org-to "html" plist filename))
+
+(defun org-publish-org-to (format plist filename)
+ "Publish an org file to FORMAT.
+PLIST is the property list for the given project.
+FILENAME is the filename of the org file to be published."
+ (require 'org)
+ (let* ((arg (plist-get plist :headline-levels)))
+ (progn
+ (find-file filename)
+ (funcall (intern (concat "org-export-as-" format))
+ arg nil plist)
+ (kill-buffer (current-buffer)))))
+
+
+(defun org-publish-attachment (plist filename)
+ "Publish a file with no transformation of any kind.
+PLIST is the property list for the given project.
+FILENAME is the filename of the file to be published."
+ ;; make sure eshell/cp code is loaded
+ (eval-and-compile
+ (require 'eshell)
+ (require 'esh-maint)
+ (require 'em-unix))
+ (let ((destination (file-name-as-directory (plist-get plist :publishing-directory))))
+ (eshell/cp filename destination)))
+
+
+;;;; Publishing files, sets of files, and indices
+
+
+(defun org-publish-file (filename)
+ "Publish file FILENAME."
+ (let* ((project-name (org-publish-get-project-from-filename filename))
+ (plist (org-publish-get-plist-from-filename filename))
+ (publishing-function (or (plist-get plist :publishing-function) 'org-publish-org-to-html)))
+ (if (not project-name)
+ (error (format "File %s is not part of any known project." filename)))
+ (when (org-publish-needed-p filename)
+ (if (listp publishing-function)
+ ;; allow chain of publishing functions
+ (mapc (lambda (f)
+ (funcall f plist filename))
+ publishing-function)
+ (funcall publishing-function plist filename))
+ (org-publish-update-timestamp filename))))
+
+
+(defun org-publish-plist (plist)
+ "Publish all files in set defined by PLIST.
+ If :auto-index is set, publish the index too."
+ (let* ((exclude-regexp (plist-get plist :exclude))
+ (publishing-function (or (plist-get plist :publishing-function) 'org-publish-org-to-html))
+ (index-p (plist-get plist :auto-index))
+ (index-filename (or (plist-get plist :index-filename) "index.org"))
+ (index-function (or (plist-get plist :index-function) 'org-publish-org-index))
+ (preparation-function (plist-get plist :preparation-function))
+ (f nil))
+ ;;
+ (when preparation-function
+ (funcall preparation-function))
+ (if index-p
+ (funcall index-function plist index-filename))
+ (let ((files (org-publish-get-base-files plist exclude-regexp)))
+ (while (setq f (pop files))
+ ;; check timestamps
+ (when (org-publish-needed-p f)
+ (if (listp publishing-function)
+ ;; allow chain of publishing functions
+ (mapc (lambda (func)
+ (funcall func plist f))
+ publishing-function)
+ (funcall publishing-function plist f))
+ (org-publish-update-timestamp f))))))
+
+
+(defun org-publish-org-index (plist &optional index-filename)
+ "Create an index of pages in set defined by PLIST.
+Optionally set the filename of the index with INDEX-FILENAME;
+default is 'index.org'."
+ (let* ((dir (file-name-as-directory (plist-get plist :base-directory)))
+ (exclude-regexp (plist-get plist :exclude))
+ (files (org-publish-get-base-files plist exclude-regexp))
+ (index-filename (concat dir (or index-filename "index.org")))
+ (index-buffer (find-buffer-visiting index-filename))
+ (ifn (file-name-nondirectory index-filename))
+ (f nil))
+ ;;
+ ;; if buffer is already open, kill it to prevent error message
+ (if index-buffer
+ (kill-buffer index-buffer))
+ (with-temp-buffer
+ (while (setq f (pop files))
+ (let ((fn (file-name-nondirectory f)))
+ (unless (string= fn ifn) ;; index shouldn't index itself
+ (insert (concat " + [[file:" fn "]["
+ (file-name-sans-extension fn)
+ "]]\n")))))
+ (write-file index-filename)
+ (kill-buffer (current-buffer)))))
+
+
+;(defun org-publish-meta-index (meta-plist &optional index-filename)
+; "Create an index for a metaproject."
+; (let* ((plists (
+
+
+;;;; Interactive publishing functions
+
+
+;;;###autoload
+(defun org-publish (project-name &optional force)
+ "Publish the project PROJECT-NAME."
+ (interactive (list (completing-read "Project name: " org-publish-project-alist
+ nil t)
+ current-prefix-arg))
+ (save-window-excursion
+ (let ((org-publish-use-timestamps-flag (if force nil t))
+ (plists (org-publish-get-plists project-name)))
+ (mapcar 'org-publish-plist plists))))
+
+
+;;;###autoload
+(defun org-publish-current-project (&optional force)
+ "Publish the project associated with the current file.
+With prefix argument, force publishing all files in project."
+ (interactive "P")
+ (save-window-excursion
+ (let* ((project-name (org-publish-get-project-from-filename (buffer-file-name)))
+ (org-publish-use-timestamps-flag (if force nil t)))
+ (if (not project-name)
+ (error (format "File %s is not part of any known project." (buffer-file-name))))
+ (org-publish project-name))))
+
+
+;;;###autoload
+(defun org-publish-current-file (&optional force)
+ "Publish the current file.
+With prefix argument, force publish the file."
+ (interactive "P")
+ (save-window-excursion
+ (let ((org-publish-use-timestamps-flag
+ (if force nil t)))
+ (org-publish-file (buffer-file-name)))))
+
+
+;;;###autoload
+(defun org-publish-all (&optional force)
+ "Publish all projects.
+With prefix argument, force publish all files."
+ (interactive "P")
+ (save-window-excursion
+ (let ((org-publish-use-timestamps-flag
+ (if force nil t))
+ (plists (org-publish-get-plists)))
+ (mapcar 'org-publish-plist plists))))
+
+
+
+(provide 'org-publish)
+
+;; arch-tag: 72807f3c-8af0-4a6b-8dca-c3376eb25adb
+;;; org-publish.el ends here
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el
index b3ddb451c30..b555e6c1102 100644
--- a/lisp/textmodes/org.el
+++ b/lisp/textmodes/org.el
@@ -1,11 +1,11 @@
-;;;; org.el --- Outline-based notes management and organize
+;;; org.el --- Outline-based notes management and organizer
;; Carstens outline-mode for keeping track of everything.
;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
;;
-;; Author: Carsten Dominik <dominik at science dot uva dot nl>
+;; Author: Carsten Dominik <carsten at orgmode dot org>
;; Keywords: outlines, hypermedia, calendar, wp
-;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
-;; Version: 4.67d
+;; Homepage: http://orgmode.org
+;; Version: 5.13i
;;
;; This file is part of GNU Emacs.
;;
@@ -49,7 +49,7 @@
;; ---------------------------
;; See the corresponding sections in the manual at
;;
-;; http://staff.science.uva.nl/~dominik/Tools/org/org.html#Installation
+;; http://orgmode.org/org.html#Installation
;;
;; Documentation
;; -------------
@@ -60,7 +60,7 @@
;; in the etc/ directory of Emacs 22.
;;
;; A list of recent changes can be found at
-;; http://www.astro.uva.nl/~dominik/Tools/org/Changes
+;; http://orgmode.org/Changes.html
;;
;;; Code:
@@ -83,7 +83,7 @@
;;; Version
-(defvar org-version "4.67c"
+(defconst org-version "5.13i"
"The version number of the file org.el.")
(defun org-version ()
(interactive)
@@ -97,6 +97,40 @@
(get-text-property 0 'test (format "%s" x)))
"Does format transport text properties?")
+(defmacro org-unmodified (&rest body)
+ "Execute body without changing buffer-modified-p."
+ `(set-buffer-modified-p
+ (prog1 (buffer-modified-p) ,@body)))
+
+(defmacro org-re (s)
+ "Replace posix classes in regular expression."
+ (if (featurep 'xemacs)
+ (let ((ss s))
+ (save-match-data
+ (while (string-match "\\[:alnum:\\]" ss)
+ (setq ss (replace-match "a-zA-Z0-9" t t ss)))
+ (while (string-match "\\[:alpha:\\]" ss)
+ (setq ss (replace-match "a-zA-Z" t t ss)))
+ ss))
+ s))
+
+(defmacro org-preserve-lc (&rest body)
+ `(let ((_line (org-current-line))
+ (_col (current-column)))
+ (unwind-protect
+ (progn ,@body)
+ (goto-line _line)
+ (move-to-column _col))))
+
+(defmacro org-without-partial-completion (&rest body)
+ `(let ((pc-mode (and (boundp 'partial-completion-mode)
+ partial-completion-mode)))
+ (unwind-protect
+ (progn
+ (if pc-mode (partial-completion-mode -1))
+ ,@body)
+ (if pc-mode (partial-completion-mode 1)))))
+
;;; The custom variables
(defgroup org nil
@@ -106,6 +140,13 @@
:group 'hypermedia
:group 'calendar)
+;; FIXME: Needs a separate group...
+(defcustom org-completion-fallback-command 'hippie-expand
+ "The expansion command called by \\[org-complete] in normal context.
+Normal means, no org-mode-specific context."
+ :group 'org
+ :type 'function)
+
(defgroup org-startup nil
"Options concerning startup of Org-mode."
:tag "Org Startup"
@@ -153,21 +194,13 @@ has been set."
:group 'org-startup
:type 'boolean)
-(defcustom org-CUA-compatible nil
- "Non-nil means use alternative key bindings for S-<cursor movement>.
-Org-mode used S-<cursor movement> for changing timestamps and priorities.
-S-<cursor movement> is also used for example by `CUA-mode' to select text.
-If you want to use Org-mode together with `CUA-mode', Org-mode needs to use
-alternative bindings. Setting this variable to t will replace the following
-keys both in Org-mode and in the Org-agenda buffer.
-
-S-RET -> C-S-RET
-S-up -> M-p
-S-down -> M-n
-S-left -> M--
-S-right -> M-+
-
-If you do not like the alternative keys, take a look at the variable
+(defcustom org-replace-disputed-keys nil
+ "Non-nil means use alternative key bindings for some keys.
+Org-mode uses S-<cursor> keys for changing timestamps and priorities.
+These keys are also used by other packages like `CUA-mode' or `windmove.el'.
+If you want to use Org-mode together with one of these other modes,
+or more generally if you would like to move some Org-mode commands to
+other keys, set this variable and configure the keys with the variable
`org-disputed-keys'.
This option is only relevant at load-time of Org-mode, and must be set
@@ -176,30 +209,58 @@ become effective."
:group 'org-startup
:type 'boolean)
-(defvar org-disputed-keys
- '((S-up [(shift up)] [(meta ?p)])
- (S-down [(shift down)] [(meta ?n)])
- (S-left [(shift left)] [(meta ?-)])
- (S-right [(shift right)] [(meta ?+)])
- (S-return [(shift return)] [(control shift return)]))
+(if (fboundp 'defvaralias)
+ (defvaralias 'org-CUA-compatible 'org-replace-disputed-keys))
+
+(defcustom org-disputed-keys
+ '(([(shift up)] . [(meta p)])
+ ([(shift down)] . [(meta n)])
+ ([(shift left)] . [(meta -)])
+ ([(shift right)] . [(meta +)])
+ ([(control shift right)] . [(meta shift +)])
+ ([(control shift left)] . [(meta shift -)]))
"Keys for which Org-mode and other modes compete.
-This is an alist, cars are symbols for lookup, 1st element is the default key,
-second element will be used when `org-CUA-compatible' is t.")
+This is an alist, cars are the default keys, second element specifies
+the alternative to use when `org-replace-disputed-keys' is t.
+
+Keys can be specified in any syntax supported by `define-key'.
+The value of this option takes effect only at Org-mode's startup,
+therefore you'll have to restart Emacs to apply it after changing."
+ :group 'org-startup
+ :type 'alist)
(defun org-key (key)
- "Select a key according to `org-CUA-compatible'."
- (nth (if org-CUA-compatible 2 1)
- (or (assq key org-disputed-keys)
- (error "Invalid Key %s in `org-key'" key))))
+ "Select key according to `org-replace-disputed-keys' and `org-disputed-keys'.
+Or return the original if not disputed."
+ (if org-replace-disputed-keys
+ (let* ((nkey (key-description key))
+ (x (org-find-if (lambda (x)
+ (equal (key-description (car x)) nkey))
+ org-disputed-keys)))
+ (if x (cdr x) key))
+ key))
+
+(defun org-find-if (predicate seq)
+ (catch 'exit
+ (while seq
+ (if (funcall predicate (car seq))
+ (throw 'exit (car seq))
+ (pop seq)))))
+
+(defun org-defkey (keymap key def)
+ "Define a key, possibly translated, as returned by `org-key'."
+ (define-key keymap (org-key key) def))
-(defcustom org-ellipsis nil
+(defcustom org-ellipsis 'org-ellipsis
"The ellipsis to use in the Org-mode outline.
When nil, just use the standard three dots. When a string, use that instead,
-and just in Org-mode (which will then use its own display table).
+When a face, use the standart 3 dots, but with the specified face.
+The change affects only Org-mode (which will then use its own display table).
Changing this requires executing `M-x org-mode' in a buffer to become
effective."
:group 'org-startup
:type '(choice (const :tag "Default" nil)
+ (face :tag "Face" :value org-warning)
(string :tag "String" :value "...#")))
(defvar org-display-table nil
@@ -255,7 +316,9 @@ An entry can be toggled between QUOTE and normal with
:group 'org-keywords
:type 'string)
-(defvar org-repeat-re "\\<REPEAT(\\([-+ 0-9dwmy]+\\))"
+(defconst org-repeat-re
+ (concat "\\(?:\\<\\(?:" org-scheduled-string "\\|" org-deadline-string "\\)"
+ " +<[0-9]\\{4\\}-[0-9][0-9]-[0-9][0-9] [^>\n]*\\)\\(\\+[0-9]+[dwmy]\\)")
"Regular expression for specifying repeated events.
After a match, group 1 contains the repeat expression.")
@@ -304,7 +367,7 @@ contexts. Valid contexts are
(const default))
(boolean)))))
-(defcustom org-show-following-heading '((default . t))
+(defcustom org-show-following-heading '((default . nil))
"Non-nil means, show following heading when revealing a location.
Org-mode often shows locations in an org-mode file which might have
been invisible before. When this is set, the heading following the
@@ -368,7 +431,23 @@ contexts. See `org-show-hierarchy-above' for valid contexts."
:tag "Org Cycle"
:group 'org-structure)
-(defcustom org-cycle-global-at-bob t
+(defcustom org-drawers '("PROPERTIES" "CLOCK")
+ "Names of drawers. Drawers are not opened by cycling on the headline above.
+Drawers only open with a TAB on the drawer line itself. A drawer looks like
+this:
+ :DRAWERNAME:
+ .....
+ :END:
+The drawer \"PROPERTIES\" is special for capturing properties through
+the property API.
+
+Drawers can be defined on the per-file basis with a line like:
+
+#+DRAWERS: HIDDEN STATE PROPERTIES"
+ :group 'org-structure
+ :type '(repeat (string :tag "Drawer Name")))
+
+(defcustom org-cycle-global-at-bob nil
"Cycle globally if cursor is at beginning of buffer and not at a headline.
This makes it possible to do global cycling without having to use S-TAB or
C-u TAB. For this special case to work, the first line of the buffer
@@ -386,6 +465,7 @@ nil Never
white Only in completely white lines
whitestart Only at the beginning of lines, before the first non-white char.
t Everywhere except in headlines
+exc-hl-bol Everywhere except at the start of a headline
If TAB is used in a place where it does not emulate TAB, the current subtree
visibility is cycled."
:group 'org-cycle
@@ -393,9 +473,26 @@ visibility is cycled."
(const :tag "Only in completely white lines" white)
(const :tag "Before first char in a line" whitestart)
(const :tag "Everywhere except in headlines" t)
+ (const :tag "Everywhere except at bol in headlines" exc-hl-bol)
))
+(defcustom org-cycle-separator-lines 2
+ "Number of empty lines needed to keep an empty line between collapsed trees.
+If you leave an empty line between the end of a subtree and the following
+headline, this empty line is hidden when the subtree is folded.
+Org-mode will leave (exactly) one empty line visible if the number of
+empty lines is equal or larger to the number given in this variable.
+So the default 2 means, at least 2 empty lines after the end of a subtree
+are needed to produce free space between a collapsed subtree and the
+following headline.
+
+Special case: when 0, never leave empty lines in collapsed view."
+ :group 'org-cycle
+ :type 'integer)
+
(defcustom org-cycle-hook '(org-cycle-hide-archived-subtrees
+ org-cycle-hide-drawers
+ org-cycle-show-empty-lines
org-optimize-window-after-visibility-change)
"Hook that is run after `org-cycle' has changed the buffer visibility.
The function(s) in this hook must accept a single argument which indicates
@@ -406,12 +503,33 @@ the values `folded', `children', or `subtree'."
:group 'org-cycle
:type 'hook)
-
(defgroup org-edit-structure nil
"Options concerning structure editing in Org-mode."
:tag "Org Edit Structure"
:group 'org-structure)
+(defcustom org-special-ctrl-a/e nil
+ "Non-nil means `C-a' and `C-e' behave specially in headlines and items.
+When t, `C-a' will bring back the cursor to the beginning of the
+headline text, i.e. after the stars and after a possible TODO keyword.
+In an item, this will be the position after the bullet.
+When the cursor is already at that position, another `C-a' will bring
+it to the beginning of the line.
+`C-e' will jump to the end of the headline, ignoring the presence of tags
+in the headline. A second `C-e' will then jump to the true end of the
+line, after any tags.
+When set to the symbol `reversed', the first `C-a' or `C-e' works normally,
+and only a directly following, identical keypress will bring the cursor
+to the special positions."
+ :group 'org-edit-structure
+ :type '(choice
+ (const :tag "off" nil)
+ (const :tag "after bullet first" t)
+ (const :tag "border first" reversed)))
+
+(if (fboundp 'defvaralias)
+ (defvaralias 'org-special-ctrl-a 'org-special-ctrl-a/e))
+
(defcustom org-odd-levels-only nil
"Non-nil means, skip even levels and only use odd levels for the outline.
This has the effect that two stars are being added/taken away in
@@ -606,18 +724,49 @@ line like
:type 'string)
(defcustom org-archive-mark-done t
- "Non-nil means, mark entries as DONE when they are moved to the archive file."
+ "Non-nil means, mark entries as DONE when they are moved to the archive file.
+This can be a string to set the keyword to use. When t, Org-mode will
+use the first keyword in its list that means done."
:group 'org-archive
- :type 'boolean)
+ :type '(choice
+ (const :tag "No" nil)
+ (const :tag "Yes" t)
+ (string :tag "Use this keyword")))
(defcustom org-archive-stamp-time t
"Non-nil means, add a time stamp to entries moved to an archive file.
-The time stamp will be added directly after the TODO state keyword in the
-first line, so it is probably best to use this in combinations with
-`org-archive-mark-done'."
+This variable is obsolete and has no effect anymore, instead add ot remove
+`time' from the variablle `org-archive-save-context-info'."
:group 'org-archive
:type 'boolean)
+(defcustom org-archive-save-context-info '(time file category todo itags)
+ "Parts of context info that should be stored as properties when archiving.
+When a subtree is moved to an archive file, it looses information given by
+context, like inherited tags, the category, and possibly also the TODO
+state (depending on the variable `org-archive-mark-done').
+This variable can be a list of any of the following symbols:
+
+time The time of archiving.
+file The file where the entry originates.
+itags The local tags, in the headline of the subtree.
+ltags The tags the subtree inherits from further up the hierarchy.
+todo The pre-archive TODO state.
+category The category, taken from file name or #+CATEGORY lines.
+
+For each symbol present in the list, a property will be created in
+the archived entry, with a prefix \"PRE_ARCHIVE_\", to remember this
+information."
+ :group 'org-archive
+ :type '(set :greedy t
+ (const :tag "Time" time)
+ (const :tag "File" file)
+ (const :tag "Category" category)
+ (const :tag "TODO state" todo)
+ (const :tag "TODO state" priority)
+ (const :tag "Inherited tags" itags)
+ (const :tag "Local tags" ltags)))
+
(defgroup org-table nil
"Options concerning tables in Org-mode."
:tag "Org Table"
@@ -706,7 +855,7 @@ table, obtained by prompting the user."
:type 'string)
(defcustom org-table-number-regexp
- "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|\\(0[xX]\\)[0-9a-fA-F]+\\)$"
+ "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|\\(0[xX]\\)[0-9a-fA-F]+\\|nan\\)$"
"Regular expression for recognizing numbers in table columns.
If a table column contains mostly numbers, it will be aligned to the
right. If not, it will be aligned to the left.
@@ -731,7 +880,7 @@ Other options offered by the customize interface are more restrictive."
(const :tag "Exponential, Floating point, Integer"
"^[-+]?[0-9.]+\\([eEdD][-+0-9]+\\)?$")
(const :tag "Very General Number-Like, including hex"
- "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%]*\\|\\(0[xX]\\)[0-9a-fA-F]+\\)$")
+ "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%]*\\|\\(0[xX]\\)[0-9a-fA-F]+\\|nan\\)$")
(string :tag "Regexp:")))
(defcustom org-table-number-fraction 0.5
@@ -783,6 +932,18 @@ calls `table-recognize-table'."
:tag "Org Table Calculation"
:group 'org-table)
+(defcustom org-table-use-standard-references t
+ "Should org-mode work with table refrences like B3 instead of @3$2?
+Possible values are:
+nil never use them
+from accept as input, do not present for editing
+t: accept as input and present for editing"
+ :group 'org-table-calculation
+ :type '(choice
+ (const :tag "Never, don't even check unser input for them" nil)
+ (const :tag "Always, both as user input, and when editing" t)
+ (const :tag "Convert user input, don't offer during editing" 'from)))
+
(defcustom org-table-copy-increment t
"Non-nil means, increment when copying current field with \\[org-table-copy-down]."
:group 'org-table-calculation
@@ -815,9 +976,6 @@ the command \\[org-table-eval-formula]."
:group 'org-table-calculation
:type 'boolean)
-;; FIXME this is also a variable that makes Org-mode files non-portable
-;; Maybe I should have a #+ options for constants?
-;; How about the SI/cgs issue?
(defcustom org-table-formula-use-constants t
"Non-nil means, interpret constants in formulas in tables.
A constant looks like `$c' or `$Grav' and will be replaced before evaluation
@@ -834,12 +992,20 @@ speed of light in a formula, you would configure
(setq org-table-formula-constants '((\"c\" . \"299792458.\")))
-and then use it in an equation like `$1*$c'."
+and then use it in an equation like `$1*$c'.
+
+Constants can also be defined on a per-file basis using a line like
+
+#+CONSTANTS: c=299792458. pi=3.14 eps=2.4e-6"
:group 'org-table-calculation
:type '(repeat
(cons (string :tag "name")
(string :tag "value"))))
+(defvar org-table-formula-constants-local nil
+ "Local version of `org-table-formula-constants'.")
+(make-variable-buffer-local 'org-table-formula-constants-local)
+
(defcustom org-table-allow-automatic-line-recalculation t
"Non-nil means, lines marked with |#| or |*| will be recomputed automatically.
Automatically means, when TAB or RET or C-c C-c are pressed in the line."
@@ -852,7 +1018,7 @@ Automatically means, when TAB or RET or C-c C-c are pressed in the line."
:group 'org)
(defvar org-link-abbrev-alist-local nil
- "buffer-local version of `org-link-abbrev-alist', which see.
+ "Buffer-local version of `org-link-abbrev-alist', which see.
The value of this is taken from the #+LINK lines.")
(make-variable-buffer-local 'org-link-abbrev-alist-local)
@@ -917,6 +1083,7 @@ Changing this variable requires a restart of Emacs to become effective."
(const :tag "plain text links" plain)
(const :tag "Radio target matches" radio)
(const :tag "Tags" tag)
+ (const :tag "Tags" target)
(const :tag "Timestamps" date)))
(defgroup org-link-store nil
@@ -1087,15 +1254,15 @@ if one was given like in <mailto:arthur@galaxy.org::this subject>."
(defcustom org-confirm-shell-link-function 'yes-or-no-p
"Non-nil means, ask for confirmation before executing shell links.
-Shell links can be dangerous, just thing about a link
+Shell links can be dangerous: just think about a link
[[shell:rm -rf ~/*][Google Search]]
-This link would show up in your Org-mode document as \"Google Search\"
+This link would show up in your Org-mode document as \"Google Search\",
but really it would remove your entire home directory.
-Therefore I *definitely* advise against setting this variable to nil.
-Just change it to `y-or-n-p' of you want to confirm with a single key press
-rather than having to type \"yes\"."
+Therefore we advise against setting this variable to nil.
+Just change it to `y-or-n-p' of you want to confirm with a
+single keystroke rather than having to type \"yes\"."
:group 'org-link-follow
:type '(choice
(const :tag "with yes-or-no (safer)" yes-or-no-p)
@@ -1103,16 +1270,16 @@ rather than having to type \"yes\"."
(const :tag "no confirmation (dangerous)" nil)))
(defcustom org-confirm-elisp-link-function 'yes-or-no-p
- "Non-nil means, ask for confirmation before executing elisp links.
-Elisp links can be dangerous, just think about a link
+ "Non-nil means, ask for confirmation before executing Emacs Lisp links.
+Elisp links can be dangerous: just think about a link
[[elisp:(shell-command \"rm -rf ~/*\")][Google Search]]
-This link would show up in your Org-mode document as \"Google Search\"
+This link would show up in your Org-mode document as \"Google Search\",
but really it would remove your entire home directory.
-Therefore I *definitely* advise against setting this variable to nil.
-Just change it to `y-or-n-p' of you want to confirm with a single key press
-rather than having to type \"yes\"."
+Therefore we advise against setting this variable to nil.
+Just change it to `y-or-n-p' of you want to confirm with a
+single keystroke rather than having to type \"yes\"."
:group 'org-link-follow
:type '(choice
(const :tag "with yes-or-no (safer)" yes-or-no-p)
@@ -1228,6 +1395,15 @@ You can set this on a per-template basis with the variable
(const :tag "Default from remember-data-file" nil)
file))
+(defcustom org-remember-store-without-prompt t
+ "Non-nil means, `C-c C-c' stores remember note without further promts.
+In this case, you need `C-u C-c C-c' to get the prompts for
+note file and headline.
+When this variable is nil, `C-c C-c' give you the prompts, and
+`C-u C-c C-c' trigger the fasttrack."
+ :group 'org-remember
+ :type 'boolean)
+
(defcustom org-remember-default-headline ""
"The headline that should be the default location in the notes file.
When filing remember notes, the cursor will start at that position.
@@ -1239,11 +1415,12 @@ You can set this on a per-template basis with the variable
(defcustom org-remember-templates nil
"Templates for the creation of remember buffers.
When nil, just let remember make the buffer.
-When not nil, this is a list of 4-element lists. In each entry, the first
-element is a character, a unique key to select this template.
-The second element is the template. The third element is optional and can
+When not nil, this is a list of 5-element lists. In each entry, the first
+element is a the name of the template, It should be a single short word.
+The second element is a character, a unique key to select this template.
+The third element is the template. The forth element is optional and can
specify a destination file for remember items created with this template.
-The default file is given by `org-default-notes-file'. An optional third
+The default file is given by `org-default-notes-file'. An optional fifth
element can specify the headline in that file that should be offered
first when the user is asked to file the entry. The default headline is
given in the variable `org-remember-default-headline'.
@@ -1284,19 +1461,25 @@ w3, w3m | %:type %:url
info | %:type %:file %:node
calendar | %:type %:date"
:group 'org-remember
- :get (lambda (var) ; Make sure all entries have 4 elements
+ :get (lambda (var) ; Make sure all entries have 5 elements
(mapcar (lambda (x)
- (cond ((= (length x) 3) (append x '("")))
- ((= (length x) 2) (append x '("" "")))
+ (if (not (stringp (car x))) (setq x (cons "" x)))
+ (cond ((= (length x) 4) (append x '("")))
+ ((= (length x) 3) (append x '("" "")))
(t x)))
(default-value var)))
:type '(repeat
:tag "enabled"
- (list :value (?a "\n" nil nil)
+ (list :value ("" ?a "\n" nil nil)
+ (string :tag "Name")
(character :tag "Selection Key")
(string :tag "Template")
- (file :tag "Destination file (optional)")
- (string :tag "Destination headline (optional)"))))
+ (choice
+ (file :tag "Destination file")
+ (const :tag "Prompt for file" nil))
+ (choice
+ (string :tag "Destination headline")
+ (const :tag "Selection interface for heading")))))
(defcustom org-reverse-note-order nil
"Non-nil means, store new notes at the beginning of a file or entry.
@@ -1318,35 +1501,99 @@ When nil, new notes will be filed to the end of a file or entry."
:tag "Org Progress"
:group 'org-time)
-(defcustom org-todo-keywords '("TODO" "DONE")
- "List of TODO entry keywords.
-\\<org-mode-map>By default, this is '(\"TODO\" \"DONE\"). The last entry in the list is
-considered to mean that the entry is \"done\". All the other mean that
-action is required, and will make the entry show up in todo lists, diaries
-etc.
-The command \\[org-todo] cycles an entry through these states, and an
+(defcustom org-todo-keywords '((sequence "TODO" "DONE"))
+ "List of TODO entry keyword sequences and their interpretation.
+\\<org-mode-map>This is a list of sequences.
+
+Each sequence starts with a symbol, either `sequence' or `type',
+indicating if the keywords should be interpreted as a sequence of
+action steps, or as different types of TODO items. The first
+keywords are states requiring action - these states will select a headline
+for inclusion into the global TODO list Org-mode produces. If one of
+the \"keywords\" is the vertical bat \"|\" the remaining keywords
+signify that no further action is necessary. If \"|\" is not found,
+the last keyword is treated as the only DONE state of the sequence.
+
+The command \\[org-todo] cycles an entry through these states, and one
additional state where no keyword is present. For details about this
-cycling, see also the variable `org-todo-interpretation'
-Changes become only effective after restarting Emacs."
+cycling, see the manual.
+
+TODO keywords and interpretation can also be set on a per-file basis with
+the special #+SEQ_TODO and #+TYP_TODO lines.
+
+For backward compatibility, this variable may also be just a list
+of keywords - in this case the interptetation (sequence or type) will be
+taken from the (otherwise obsolete) variable `org-todo-interpretation'."
:group 'org-todo
:group 'org-keywords
- :type '(repeat (string :tag "Keyword")))
+ :type '(choice
+ (repeat :tag "Old syntax, just keywords"
+ (string :tag "Keyword"))
+ (repeat :tag "New syntax"
+ (cons
+ (choice
+ :tag "Interpretation"
+ (const :tag "Sequence (cycling hits every state)" sequence)
+ (const :tag "Type (cycling directly to DONE)" type))
+ (repeat
+ (string :tag "Keyword"))))))
+
+(defvar org-todo-keywords-1 nil)
+(make-variable-buffer-local 'org-todo-keywords-1)
+(defvar org-todo-keywords-for-agenda nil)
+(defvar org-done-keywords-for-agenda nil)
+(defvar org-not-done-keywords nil)
+(make-variable-buffer-local 'org-not-done-keywords)
+(defvar org-done-keywords nil)
+(make-variable-buffer-local 'org-done-keywords)
+(defvar org-todo-heads nil)
+(make-variable-buffer-local 'org-todo-heads)
+(defvar org-todo-sets nil)
+(make-variable-buffer-local 'org-todo-sets)
+(defvar org-todo-log-states nil)
+(make-variable-buffer-local 'org-todo-log-states)
+(defvar org-todo-kwd-alist nil)
+(make-variable-buffer-local 'org-todo-kwd-alist)
+(defvar org-todo-key-alist nil)
+(make-variable-buffer-local 'org-todo-key-alist)
+(defvar org-todo-key-trigger nil)
+(make-variable-buffer-local 'org-todo-key-trigger)
(defcustom org-todo-interpretation 'sequence
"Controls how TODO keywords are interpreted.
-This variable is only relevant if `org-todo-keywords' contains more than two
-states. \\<org-mode-map>Possible values are `sequence' and `type'.
-
-When `sequence', \\[org-todo] will always switch to the next state in the
-`org-todo-keywords' list. When `type', \\[org-todo] only cycles from state
-to state when executed several times in direct succession. Otherwise, it
-switches directly to DONE from any state.
-See the manual for more information."
+This variable is in principle obsolete and is only used for
+backward compatibility, if the interpretation of todo keywords is
+not given already in `org-todo-keywords'. See that variable for
+more information."
:group 'org-todo
:group 'org-keywords
:type '(choice (const sequence)
(const type)))
+(defcustom org-use-fast-todo-selection 'prefix
+ "Non-nil means, use the fast todo selection scheme with C-c C-t.
+This variable describes if and under what circumstances the cycling
+mechanism for TODO keywords will be replaced by a single-key, direct
+selection scheme.
+
+When nil, fast selection is never used.
+
+When the symbol `prefix', it will be used when `org-todo' is called with
+a prefix argument, i.e. `C-u C-c C-t' in an Org-mode buffer, and `C-u t'
+in an agenda buffer.
+
+When t, fast selection is used by default. In this case, the prefix
+argument forces cycling instead.
+
+In all cases, the special interface is only used if access keys have actually
+been assigned by the user, i.e. if keywords in the configuration are followed
+by a letter in parenthesis, like TODO(t)."
+ :group 'org-todo
+ :type '(choice
+ (const :tag "Never" nil)
+ (const :tag "By default" t)
+ (const :tag "Only with C-u C-c C-t" prefix)))
+
(defcustom org-after-todo-state-change-hook nil
"Hook which is run after the state of a TODO item was changed.
The new state (a string with a TODO keyword, or nil) is available in the
@@ -1356,8 +1603,8 @@ Lisp variable `state'."
(defcustom org-log-done nil
"When set, insert a (non-active) time stamp when TODO entry is marked DONE.
-When the state of an entry is changed from nothing to TODO, remove a previous
-closing date.
+When the state of an entry is changed from nothing or a DONE state to
+a not-done TODO state, remove a previous closing date.
This can also be a list of symbols indicating under which conditions
the time stamp recording the action should be annotated with a short note.
@@ -1382,7 +1629,10 @@ the following lines anywhere in the buffer:
#+STARTUP: nologging
#+STARTUP: lognotedone
#+STARTUP: lognotestate
- #+STARTUP: lognoteclock-out"
+ #+STARTUP: lognoteclock-out
+
+You can have local logging settings for a subtree by setting the LOGGING
+property to one or more of these keywords."
:group 'org-todo
:group 'org-progress
:type '(choice
@@ -1393,12 +1643,18 @@ the following lines anywhere in the buffer:
(const :tag "when TODO state changes" state)
(const :tag "when clocking out" clock-out))))
+(defcustom org-log-done-with-time t
+ "Non-nil means, the CLOSED time stamp will contain date and time.
+When nil, only the date will be recorded."
+ :group 'org-progress
+ :type 'boolean)
+
(defcustom org-log-note-headings
'((done . "CLOSING NOTE %t")
(state . "State %-12s %t")
(clock-out . ""))
"Headings for notes added when clocking out or closing TODO items.
-The value is an alist, with the car being a sympol indicating the note
+The value is an alist, with the car being a symbol indicating the note
context, and the cdr is the heading to be used. The heading may also be the
empty string.
%t in the heading will be replaced by a time stamp.
@@ -1414,30 +1670,77 @@ empty string.
state) string)
(cons (const :tag "Heading when clocking out" clock-out) string)))
-(defcustom org-allow-auto-repeat t
- "Non-nil means, find REPEAT cookies in entries and apply them.
-A repeat cookie looks like REPEAT(+1m) and causes deadlines and schedules
-to repeat themselves shifted by a certain amount of time, each time an
-entry is marked DONE."
+(defcustom org-log-states-order-reversed t
+ "Non-nil means, the latest state change note will be directly after heading.
+When nil, the notes will be orderer according to time."
+ :group 'org-todo
+ :group 'org-progress
+ :type 'boolean)
+
+(defcustom org-log-repeat t
+ "Non-nil means, prompt for a note when REPEAT is resetting a TODO entry.
+When nil, no note will be taken.
+This option can also be set with on a per-file-basis with
+
+ #+STARTUP: logrepeat
+ #+STARTUP: nologrepeat
+
+You can have local logging settings for a subtree by setting the LOGGING
+property to one or more of these keywords."
:group 'org-todo
:group 'org-progress
:type 'boolean)
+(defcustom org-clock-into-drawer 2
+ "Should clocking info be wrapped into a drawer?
+When t, clocking info will always be inserted into a :CLOCK: drawer.
+If necessary, the drawer will be created.
+When nil, the drawer will not be created, but used when present.
+When an integer and the number of clocking entries in an item
+reaches or exceeds this number, a drawer will be created."
+ :group 'org-todo
+ :group 'org-progress
+ :type '(choice
+ (const :tag "Always" t)
+ (const :tag "Only when drawer exists" nil)
+ (integer :tag "When at least N clock entries")))
+
+(defcustom org-clock-out-when-done t
+ "When t, the clock will be stopped when the relevant entry is marked DONE.
+Nil means, clock will keep running until stopped explicitly with
+`C-c C-x C-o', or until the clock is started in a different item."
+ :group 'org-progress
+ :type 'boolean)
+
(defgroup org-priorities nil
"Priorities in Org-mode."
:tag "Org Priorities"
:group 'org-todo)
+(defcustom org-highest-priority ?A
+ "The highest priority of TODO items. A character like ?A, ?B etc.
+Must have a smaller ASCII number than `org-lowest-priority'."
+ :group 'org-priorities
+ :type 'character)
+
+(defcustom org-lowest-priority ?C
+ "The lowest priority of TODO items. A character like ?A, ?B etc.
+Must have a larger ASCII number than `org-highest-priority'."
+ :group 'org-priorities
+ :type 'character)
+
(defcustom org-default-priority ?B
"The default priority of TODO items.
This is the priority an item get if no explicit priority is given."
:group 'org-priorities
:type 'character)
-(defcustom org-lowest-priority ?C
- "The lowest priority of TODO items. A character like ?A, ?B etc."
+(defcustom org-priority-start-cycle-with-default t
+ "Non-nil means, start with default priority when starting to cycle.
+When this is nil, the first step in the cycle will be (depending on the
+command used) one higher or lower that the default priority."
:group 'org-priorities
- :type 'character)
+ :type 'boolean)
(defgroup org-time nil
"Options concerning time stamps and deadlines in Org-mode."
@@ -1479,7 +1782,8 @@ To turn this on on a per-file basis, insert anywhere in the file:
'("<%m/%d/%y %a>" . "<%m/%d/%y %a %H:%M>") ; american
"Custom formats for time stamps. See `format-time-string' for the syntax.
These are overlayed over the default ISO format if the variable
-`org-display-custom-times' is set."
+`org-display-custom-times' is set. Time like %H:%M should be at the
+end of the second format."
:group 'org-time
:type 'sexp)
@@ -1491,12 +1795,6 @@ These are overlayed over the default ISO format if the variable
(concat "[" (substring f 1 -1) "]")
f)))
-(defcustom org-deadline-warning-days 30
- "No. of days before expiration during which a deadline becomes active.
-This variable governs the display in sparse trees and in the agenda."
- :group 'org-time
- :type 'number)
-
(defcustom org-popup-calendar-for-date-prompt t
"Non-nil means, pop up a calendar when prompting for a date.
In the calendar, the date can be selected with mouse-1. However, the
@@ -1505,6 +1803,12 @@ When nil, only the minibuffer will be available."
:group 'org-time
:type 'boolean)
+(defcustom org-edit-timestamp-down-means-later nil
+ "Non-nil means, S-down will increase the time in a time stamp.
+When nil, S-up will increase."
+ :group 'org-time
+ :type 'boolean)
+
(defcustom org-calendar-follow-timestamp-change t
"Non-nil means, make the calendar window follow timestamp changes.
When a timestamp is modified and the calendar window is visible, it will be
@@ -1521,9 +1825,10 @@ moved to the new date."
"List of tags allowed in Org-mode files.
When this list is nil, Org-mode will base TAG input on what is already in the
buffer.
-The value of this variable is an alist, the car may be (and should) be a
-character that is used to select that tag through the fast-tag-selection
-interface. See the manual for details."
+The value of this variable is an alist, the car of each entry must be a
+keyword as a string, the cdr may be a character that is used to select
+that tag through the fast-tag-selection interface.
+See the manual for details."
:group 'org-tags
:type '(repeat
(choice
@@ -1559,11 +1864,15 @@ displaying the tags menu is not even shown, until you press C-c again."
(const :tag "Yes" t)
(const :tag "Expert" expert)))
-(defcustom org-tags-column 48
+(defvar org-fast-tag-selection-include-todo nil
+ "Non-nil means, fast tags selection interface will also offer TODO states.
+This is an undocumented feature, you should not rely on it.")
+
+(defcustom org-tags-column -80
"The column to which tags should be indented in a headline.
If this number is positive, it specifies the column. If it is negative,
it means that the tags should be flushright to that column. For example,
--79 works well for a normal 80 character screen."
+-80 works well for a normal 80 character screen."
:group 'org-tags
:type 'integer)
@@ -1602,6 +1911,57 @@ make sure all corresponding TODO items find their way into the list."
"History of minibuffer reads for tags.")
(defvar org-last-tags-completion-table nil
"The last used completion table for tags.")
+(defvar org-after-tags-change-hook nil
+ "Hook that is run after the tags in a line have changed.")
+
+(defgroup org-properties nil
+ "Options concerning properties in Org-mode."
+ :tag "Org Properties"
+ :group 'org)
+
+(defcustom org-property-format "%-10s %s"
+ "How property key/value pairs should be formatted by `indent-line'.
+When `indent-line' hits a property definition, it will format the line
+according to this format, mainly to make sure that the values are
+lined-up with respect to each other."
+ :group 'org-properties
+ :type 'string)
+
+(defcustom org-use-property-inheritance nil
+ "Non-nil means, properties apply also for sublevels.
+This can cause significant overhead when doing a search, so this is turned
+off by default.
+When nil, only the properties directly given in the current entry count.
+
+However, note that some special properties use inheritance under special
+circumstances (not in searches). Examples are CATEGORY, ARCHIVE, COLUMNS,
+and the properties ending in \"_ALL\" when they are used as descriptor
+for valid values of a property."
+ :group 'org-properties
+ :type 'boolean)
+
+(defcustom org-columns-default-format "%25ITEM %TODO %3PRIORITY %TAGS"
+ "The default column format, if no other format has been defined.
+This variable can be set on the per-file basis by inserting a line
+
+#+COLUMNS: %25ITEM ....."
+ :group 'org-properties
+ :type 'string)
+
+(defcustom org-global-properties nil
+ "List of property/value pairs that can be inherited by any entry.
+You can set buffer-local values for this by adding lines like
+
+#+PROPERTY: NAME VALUE"
+ :group 'org-properties
+ :type '(repeat
+ (cons (string :tag "Property")
+ (string :tag "Value"))))
+
+(defvar org-local-properties nil
+ "List of property/value pairs that can be inherited by any entry.
+Valid for the current buffer.
+This variable is populated from #+PROPERTY lines.")
(defgroup org-agenda nil
"Options concerning agenda views in Org-mode."
@@ -1612,7 +1972,7 @@ make sure all corresponding TODO items find their way into the list."
"Variable used by org files to set a category for agenda display.
Such files should use a file variable to set it, for example
- -*- mode: org; org-category: \"ELisp\"
+# -*- mode: org; org-category: \"ELisp\"
or contain a special line
@@ -1627,14 +1987,36 @@ is used instead.")
Entries may be added to this list with \\[org-agenda-file-to-front] and removed with
\\[org-remove-file]. You can also use customize to edit the list.
+If an entry is a directory, all files in that directory that are matched by
+`org-agenda-file-regexp' will be part of the file list.
+
If the value of the variable is not a list but a single file name, then
the list of agenda files is actually stored and maintained in that file, one
agenda file per line."
:group 'org-agenda
:type '(choice
- (repeat :tag "List of files" file)
+ (repeat :tag "List of files and directories" file)
(file :tag "Store list in a file\n" :value "~/.agenda_files")))
+(defcustom org-agenda-file-regexp "\\.org\\'"
+ "Regular expression to match files for `org-agenda-files'.
+If any element in the list in that variable contains a directory instead
+of a normal file, all files in that directory that are matched by this
+regular expression will be included."
+ :group 'org-agenda
+ :type 'regexp)
+
+(defcustom org-agenda-skip-unavailable-files nil
+ "t means to just skip non-reachable files in `org-agenda-files'.
+Nil means to remove them, after a query, from the list."
+ :group 'org-agenda
+ :type 'boolean)
+
+(defcustom org-agenda-multi-occur-extra-files nil
+ "List of extra files to be searched by `org-occur-in-agenda-files'.
+The files in `org-agenda-files' are always searched."
+ :group 'org-agenda
+ :type '(repeat file))
(defcustom org-agenda-confirm-kill 1
"When set, remote killing from the agenda buffer needs confirmation.
@@ -1654,19 +2036,86 @@ forth between agenda and calendar."
:group 'org-agenda
:type 'sexp)
+(defcustom org-agenda-compact-blocks nil
+ "Non-nil means, make the block agenda more compact.
+This is done by leaving out unnecessary lines."
+ :group 'org-agenda
+ :type nil)
+
+(defgroup org-agenda-export nil
+ "Options concerning exporting agenda views in Org-mode."
+ :tag "Org Agenda Export"
+ :group 'org-agenda)
+
+(defcustom org-agenda-with-colors t
+ "Non-nil means, use colors in agenda views."
+ :group 'org-agenda-export
+ :type 'boolean)
+
+(defcustom org-agenda-exporter-settings nil
+ "Alist of variable/value pairs that should be active during agenda export.
+This is a good place to set uptions for ps-print and for htmlize."
+ :group 'org-agenda-export
+ :type '(repeat
+ (list
+ (variable)
+ (sexp :tag "Value"))))
+
+(defcustom org-agenda-export-html-style ""
+ "The style specification for exported HTML Agenda files.
+If this variable contains a string, it will replace the default <style>
+section as produced by `htmlize'.
+Since there are different ways of setting style information, this variable
+needs to contain the full HTML structure to provide a style, including the
+surrounding HTML tags. The style specifications should include definitions
+the fonts used by the agenda, here is an example:
+
+ <style type=\"text/css\">
+ p { font-weight: normal; color: gray; }
+ .org-agenda-structure {
+ font-size: 110%;
+ color: #003399;
+ font-weight: 600;
+ }
+ .org-todo {
+ color: #cc6666;Week-agenda:
+ font-weight: bold;
+ }
+ .org-done {
+ color: #339933;
+ }
+ .title { text-align: center; }
+ .todo, .deadline { color: red; }
+ .done { color: green; }
+ </style>
+
+or, if you want to keep the style in a file,
+
+ <link rel=\"stylesheet\" type=\"text/css\" href=\"mystyles.css\">
+
+As the value of this option simply gets inserted into the HTML <head> header,
+you can \"misuse\" it to also add other text to the header. However,
+<style>...</style> is required, if not present the variable will be ignored."
+ :group 'org-agenda-export
+ :group 'org-export-html
+ :type 'string)
+
(defgroup org-agenda-custom-commands nil
"Options concerning agenda views in Org-mode."
:tag "Org Agenda Custom Commands"
:group 'org-agenda)
-(defcustom org-agenda-custom-commands '(("w" todo "WAITING"))
+(defcustom org-agenda-custom-commands nil
"Custom commands for the agenda.
These commands will be offered on the splash screen displayed by the
agenda dispatcher \\[org-agenda]. Each entry is a list like this:
- (key type match options)
+ (key desc type match options files)
-key The key (a single char as a string) to be associated with the command.
+key The key (one or more characters as a string) to be associated
+ with the command.
+desc A description of the commend, when omitted or nil, a default
+ description is built using MATCH.
type The command type, any of the following symbols:
todo Entries with a specific TODO keyword, in all agenda files.
tags Tags match in all agenda files.
@@ -1674,17 +2123,23 @@ type The command type, any of the following symbols:
todo-tree Sparse tree of specific TODO keyword in *current* file.
tags-tree Sparse tree with all tags matches in *current* file.
occur-tree Occur sparse tree for *current* file.
+ ... A user-defined function.
match What to search for:
- a single keyword for TODO keyword searches
- a tags match expression for tags searches
- a regular expression for occur searches
-options A list of option setttings, similar to that in a let form, so like
+options A list of option settings, similar to that in a let form, so like
this: ((opt1 val1) (opt2 val2) ...)
+files A list of files file to write the produced agenda buffer to
+ with the command `org-store-agenda-views'.
+ If a file name ends in \".html\", an HTML version of the buffer
+ is written out. If it ends in \".ps\", a postscript version is
+ produced. Otherwide, only the plain text is written to the file.
You can also define a set of commands, to create a composite agenda buffer.
In this case, an entry looks like this:
- (key desc (cmd1 cmd2 ...) general-options)
+ (key desc (cmd1 cmd2 ...) general-options file)
where
@@ -1695,32 +2150,47 @@ cmd An agenda command, similar to the above. However, tree commands
(agenda)
(alltodo)
(stuck)
- (todo \"match\" options)
- (tags \"match\" options )
- (tags-todo \"match\" options)
+ (todo \"match\" options files)
+ (tags \"match\" options files)
+ (tags-todo \"match\" options files)
Each command can carry a list of options, and another set of options can be
given for the whole set of commands. Individual command options take
-precedence over the general options."
+precedence over the general options.
+
+When using several characters as key to a command, the first characters
+are prefix commands. For the dispatcher to display useful information, you
+should provide a description for the prefix, like
+
+ (setq org-agenda-custom-commands
+ '((\"h\" . \"HOME + Name tag searches\") ; describe prefix \"h\"
+ (\"hl\" tags \"+HOME+Lisa\")
+ (\"hp\" tags \"+HOME+Peter\")
+ (\"hk\" tags \"+HOME+Kim\")))"
:group 'org-agenda-custom-commands
:type '(repeat
- (choice
+ (choice :value ("a" "" tags "" nil)
(list :tag "Single command"
- (string :tag "Key")
+ (string :tag "Access Key(s) ")
+ (option (string :tag "Description"))
(choice
+ (const :tag "Agenda" agenda)
+ (const :tag "TODO list" alltodo)
+ (const :tag "Stuck projects" stuck)
(const :tag "Tags search (all agenda files)" tags)
(const :tag "Tags search of TODO entries (all agenda files)" tags-todo)
(const :tag "TODO keyword search (all agenda files)" todo)
(const :tag "Tags sparse tree (current buffer)" tags-tree)
(const :tag "TODO keyword tree (current buffer)" todo-tree)
(const :tag "Occur tree (current buffer)" occur-tree)
- (symbol :tag "Other, user-defined function"))
+ (sexp :tag "Other, user-defined function"))
(string :tag "Match")
(repeat :tag "Local options"
- (list (variable :tag "Option") (sexp :tag "Value"))))
+ (list (variable :tag "Option") (sexp :tag "Value")))
+ (option (repeat :tag "Export" (file :tag "Export to"))))
(list :tag "Command series, all agenda files"
- (string :tag "Key")
- (string :tag "Description")
+ (string :tag "Access Key(s)")
+ (string :tag "Description ")
(repeat
(choice
(const :tag "Agenda" (agenda))
@@ -1756,20 +2226,27 @@ precedence over the general options."
(repeat :tag "General options"
(list (variable :tag "Option")
- (sexp :tag "Value")))))))
+ (sexp :tag "Value")))
+ (option (repeat :tag "Export" (file :tag "Export to"))))
+ (cons :tag "Prefix key documentation"
+ (string :tag "Access Key(s)")
+ (string :tag "Description ")))))
(defcustom org-stuck-projects
- '("+LEVEL=2/-DONE" ("TODO" "NEXT" "NEXTACTION") nil)
+ '("+LEVEL=2/-DONE" ("TODO" "NEXT" "NEXTACTION") nil "")
"How to identify stuck projects.
-This is a list of three items:
+This is a list of four items:
1. A tags/todo matcher string that is used to identify a project.
- The entire tree below a headline matched by this is considered a project.
-2. A list of TODO keywords itentifying non-stuck projects.
+ The entire tree below a headline matched by this is considered one project.
+2. A list of TODO keywords identifying non-stuck projects.
If the project subtree contains any headline with one of these todo
- keywords, the project is consitered to be not stuck.
+ keywords, the project is considered to be not stuck. If you specify
+ \"*\" as a keyword, any TODO keyword will mark the project unstuck.
3. A list of tags identifying non-stuck projects.
If the project subtree contains any headline with one of these tags,
- the project is consitered to be not stuck.
+ the project is considered to be not stuck. If you specify \"*\" as
+ a tag, any tag will mark the project unstuck.
+4. An arbitrary regular expression matching non-stuck projects.
After defining this variable, you may use \\[org-agenda-list-stuck-projects]
or `C-c a #' to produce the list."
@@ -1777,7 +2254,8 @@ or `C-c a #' to produce the list."
:type '(list
(string :tag "Tags/TODO match to identify a project")
(repeat :tag "Projects are *not* stuck if they have an entry with TODO keyword any of" (string))
- (repeat :tag "Projects are *not* stuck if they have an entry with TAG being any of" (string))))
+ (repeat :tag "Projects are *not* stuck if they have an entry with TAG being any of" (string))
+ (regexp :tag "Projects are *not* stuck if this regexp matches\ninside the subtree")))
(defgroup org-agenda-skip nil
@@ -1793,10 +2271,22 @@ potentially much shorter TODO lists."
:group 'org-todo
:type 'boolean)
+(defcustom org-agenda-todo-ignore-with-date nil
+ "Non-nil means, don't show entries with a date in the global todo list.
+You can use this if you prefer to mark mere appointments with a TODO keyword,
+but don't want them to show up in the TODO list.
+When this is set, it also covers deadlines and scheduled items, the settings
+of `org-agenda-todo-ignore-scheduled' and `org-agenda-todo-ignore-deadlines'
+will be ignored."
+ :group 'org-agenda-skip
+ :group 'org-todo
+ :type 'boolean)
+
(defcustom org-agenda-todo-ignore-scheduled nil
"Non-nil means, don't show scheduled entries in the global todo list.
The idea behind this is that by scheduling it, you have already taken care
-of this item."
+of this item.
+See also `org-agenda-todo-ignore-with-date'."
:group 'org-agenda-skip
:group 'org-todo
:type 'boolean)
@@ -1804,14 +2294,27 @@ of this item."
(defcustom org-agenda-todo-ignore-deadlines nil
"Non-nil means, don't show near deadline entries in the global todo list.
Near means closer than `org-deadline-warning-days' days.
-The idea behind this is that such items will appear in the agenda anyway."
+The idea behind this is that such items will appear in the agenda anyway.
+See also `org-agenda-todo-ignore-with-date'."
:group 'org-agenda-skip
:group 'org-todo
:type 'boolean)
(defcustom org-agenda-skip-scheduled-if-done nil
"Non-nil means don't show scheduled items in agenda when they are done.
-This is relevant for the daily/weekly agenda, not for the TODO list."
+This is relevant for the daily/weekly agenda, not for the TODO list. And
+it applies only to the actual date of the scheduling. Warnings about
+an item with a past scheduling dates are always turned off when the item
+is DONE."
+ :group 'org-agenda-skip
+ :type 'boolean)
+
+(defcustom org-agenda-skip-deadline-if-done nil
+ "Non-nil means don't show deadines when the corresponding item is done.
+When nil, the deadline is still shown and should give you a happy feeling.
+This is relevant for the daily/weekly agenda. And it applied only to the
+actualy date of the deadline. Warnings about approching and past-due
+deadlines are always turned off when the item is DONE."
:group 'org-agenda-skip
:type 'boolean)
@@ -1846,7 +2349,7 @@ Needs to be set before org.el is loaded."
:type 'boolean)
(defcustom org-agenda-start-with-follow-mode nil
- "The initial value of follwo-mode in a newly created agenda window."
+ "The initial value of follow-mode in a newly created agenda window."
:group 'org-agenda-startup
:type 'boolean)
@@ -1872,6 +2375,13 @@ See also the variable `org-agenda-restore-windows-after-quit'."
(const other-window)
(const reorganize-frame)))
+(defcustom org-agenda-window-frame-fractions '(0.5 . 0.75)
+ "The min and max height of the agenda window as a fraction of frame height.
+The value of the variable is a cons cell with two numbers between 0 and 1.
+It only matters if `org-agenda-window-setup' is `reorganize-frame'."
+ :group 'org-agenda-windows
+ :type '(cons (number :tag "Minimum") (number :tag "Maximum")))
+
(defcustom org-agenda-restore-windows-after-quit nil
"Non-nil means, restore window configuration open exiting agenda.
Before the window configuration is changed for displaying the agenda,
@@ -1924,13 +2434,25 @@ When nil, only the days which actually have entries are shown."
:group 'org-agenda-daily/weekly
:type 'boolean)
-(defcustom org-agenda-date-format "%A %d %B %Y"
+(defcustom org-agenda-format-date 'org-agenda-format-date-aligned
"Format string for displaying dates in the agenda.
Used by the daily/weekly agenda and by the timeline. This should be
-a format string understood by `format-time-string'.
-FIXME: Not used currently, because of timezone problem."
+a format string understood by `format-time-string', or a function returning
+the formatted date as a string. The function must take a single argument,
+a calendar-style date list like (month day year)."
:group 'org-agenda-daily/weekly
- :type 'string)
+ :type '(choice
+ (string :tag "Format string")
+ (function :tag "Function")))
+
+(defun org-agenda-format-date-aligned (date)
+ "Format a date string for display in the daily/weekly agenda, or timeline.
+This function makes sure that dates are aligned for easy reading."
+ (format "%-9s %2d %s %4d"
+ (calendar-day-name date)
+ (extract-calendar-day date)
+ (calendar-month-name (extract-calendar-month date))
+ (extract-calendar-year date)))
(defcustom org-agenda-include-diary nil
"If non-nil, include in the agenda entries from the Emacs Calendar's diary."
@@ -1944,6 +2466,30 @@ the entries for specific days."
:group 'org-agenda-daily/weekly
:type 'boolean)
+(defcustom org-agenda-repeating-timestamp-show-all t
+ "Non-nil means, show all occurences of a repeating stamp in the agenda.
+When nil, only one occurence is shown, either today or the
+nearest into the future."
+ :group 'org-agenda-daily/weekly
+ :type 'boolean)
+
+(defcustom org-deadline-warning-days 14
+ "No. of days before expiration during which a deadline becomes active.
+This variable governs the display in sparse trees and in the agenda.
+When negative, it means use this number (the absolute value of it)
+even if a deadline has a different individual lead time specified."
+ :group 'org-time
+ :group 'org-agenda-daily/weekly
+ :type 'number)
+
+(defcustom org-scheduled-past-days 10000
+ "No. of days to continue listing scheduled items that are not marked DONE.
+When an item is scheduled on a date, it shows up in the agenda on this
+day and will be listed until it is marked done for the number of days
+given here."
+ :group 'org-agenda-daily/weekly
+ :type 'number)
+
(defgroup org-agenda-time-grid nil
"Options concerning the time grid in the Org-mode Agenda."
:tag "Org Agenda Time Grid"
@@ -2006,7 +2552,7 @@ a grid line."
(defcustom org-agenda-sorting-strategy
'((agenda time-up category-keep priority-down)
(todo category-keep priority-down)
- (tags category-keep))
+ (tags category-keep priority-down))
"Sorting structure for the agenda items of a single day.
This is a list of symbols which will be used in sequence to determine
if an entry should be listed before another entry. The following
@@ -2056,9 +2602,9 @@ agenda entries."
:group 'org-agenda-sorting
:type 'boolean)
-(defgroup org-agenda-prefix nil
+(defgroup org-agenda-line-format nil
"Options concerning the entry prefix in the Org-mode agenda display."
- :tag "Org Agenda Prefix"
+ :tag "Org Agenda Line Format"
:group 'org-agenda)
(defcustom org-agenda-prefix-format
@@ -2113,7 +2659,7 @@ the prefix, you could use:
(setq org-agenda-prefix-format \" %-11:c% s\")
See also the variables `org-agenda-remove-times-when-in-prefix' and
-`org-agenda-remove-tags-when-in-prefix'."
+`org-agenda-remove-tags'."
:type '(choice
(string :tag "General format")
(list :greedy t :tag "View dependent"
@@ -2121,12 +2667,34 @@ See also the variables `org-agenda-remove-times-when-in-prefix' and
(cons (const timeline) (string :tag "Format"))
(cons (const todo) (string :tag "Format"))
(cons (const tags) (string :tag "Format"))))
- :group 'org-agenda-prefix)
+ :group 'org-agenda-line-format)
(defvar org-prefix-format-compiled nil
"The compiled version of the most recently used prefix format.
See the variable `org-agenda-prefix-format'.")
+(defcustom org-agenda-scheduled-leaders '("Scheduled: " "Sched.%2dx: ")
+ "Text preceeding scheduled items in the agenda view.
+THis is a list with two strings. The first applies when the item is
+scheduled on the current day. The second applies when it has been scheduled
+previously, it may contain a %d to capture how many days ago the item was
+scheduled."
+ :group 'org-agenda-line-format
+ :type '(list
+ (string :tag "Scheduled today ")
+ (string :tag "Scheduled previously")))
+
+(defcustom org-agenda-deadline-leaders '("Deadline: " "In %3d d.: ")
+ "Text preceeding deadline items in the agenda view.
+This is a list with two strings. The first applies when the item has its
+deadline on the current day. The second applies when it is in the past or
+in the future, it may contain %d to capture how many days away the deadline
+is (was)."
+ :group 'org-agenda-line-format
+ :type '(list
+ (string :tag "Deadline today ")
+ (string :tag "Deadline relative")))
+
(defcustom org-agenda-remove-times-when-in-prefix t
"Non-nil means, remove duplicate time specifications in agenda items.
When the format `org-agenda-prefix-format' contains a `%t' specifier, a
@@ -2138,40 +2706,79 @@ cluttered.
The option can be t or nil. It may also be the symbol `beg', indicating
that the time should only be removed what it is located at the beginning of
the headline/diary entry."
- :group 'org-agenda-prefix
+ :group 'org-agenda-line-format
:type '(choice
(const :tag "Always" t)
(const :tag "Never" nil)
(const :tag "When at beginning of entry" beg)))
-(defcustom org-agenda-remove-tags-when-in-prefix nil
+
+(defcustom org-agenda-default-appointment-duration nil
+ "Default duration for appointments that only have a starting time.
+When nil, no duration is specified in such cases.
+When non-nil, this must be the number of minutes, e.g. 60 for one hour."
+ :group 'org-agenda-line-format
+ :type '(choice
+ (integer :tag "Minutes")
+ (const :tag "No default duration")))
+
+
+(defcustom org-agenda-remove-tags nil
"Non-nil means, remove the tags from the headline copy in the agenda.
When this is the symbol `prefix', only remove tags when
`org-agenda-prefix-format' contains a `%T' specifier."
- :group 'org-agenda-prefix
+ :group 'org-agenda-line-format
:type '(choice
(const :tag "Always" t)
(const :tag "Never" nil)
(const :tag "When prefix format contains %T" prefix)))
-(defcustom org-agenda-align-tags-to-column 65
- "Shift tags in agenda items to this column."
- :group 'org-agenda-prefix
+(if (fboundp 'defvaralias)
+ (defvaralias 'org-agenda-remove-tags-when-in-prefix
+ 'org-agenda-remove-tags))
+
+(defcustom org-agenda-tags-column -80
+ "Shift tags in agenda items to this column.
+If this number is positive, it specifies the column. If it is negative,
+it means that the tags should be flushright to that column. For example,
+-80 works well for a normal 80 character screen."
+ :group 'org-agenda-line-format
:type 'integer)
+(if (fboundp 'defvaralias)
+ (defvaralias 'org-agenda-align-tags-to-column 'org-agenda-tags-column))
+
+(defcustom org-agenda-fontify-priorities t
+ "Non-nil means, highlight low and high priorities in agenda.
+When t, the highest priority entries are bold, lowest priority italic.
+This may also be an association list of priority faces. The face may be
+a names face, or a list like `(:background \"Red\")'."
+ :group 'org-agenda-line-format
+ :type '(choice
+ (const :tag "Never" nil)
+ (const :tag "Defaults" t)
+ (repeat :tag "Specify"
+ (list (character :tag "Priority" :value ?A)
+ (sexp :tag "face")))))
+
(defgroup org-latex nil
"Options for embedding LaTeX code into Org-mode"
:tag "Org LaTeX"
:group 'org)
(defcustom org-format-latex-options
- '(:foreground "Black" :background "Transparent" :scale 1.0
- :matchers ("begin" "$" "$$" "\\(" "\\["))
+ '(:foreground default :background default :scale 1.0
+ :html-foreground "Black" :html-background "Transparent" :html-scale 1.0
+ :matchers ("begin" "$" "$$" "\\(" "\\["))
"Options for creating images from LaTeX fragments.
This is a property list with the following properties:
-:foreground the foreground color, for example \"Black\".
+:foreground the foreground color for images embedded in emacs, e.g. \"Black\".
+ `default' means use the forground of the default face.
:background the background color, or \"Transparent\".
+ `default' means use the background of the default face.
:scale a scaling factor for the size of the images
+:html-foreground, :html-background, :html-scale
+ The same numbers for HTML export.
:matchers a list indicating which matchers should be used to
find LaTeX fragments. Valid members of this list are:
\"begin\" find environments
@@ -2182,6 +2789,18 @@ This is a property list with the following properties:
:group 'org-latex
:type 'plist)
+(defcustom org-format-latex-header "\\documentclass{article}
+\\usepackage{fullpage} % do not remove
+\\usepackage{amssymb}
+\\usepackage[usenames]{color}
+\\usepackage{amsmath}
+\\usepackage{latexsym}
+\\usepackage[mathscr]{eucal}
+\\pagestyle{empty} % do not remove"
+ "The document header used for processing LaTeX fragments."
+ :group 'org-latex
+ :type 'string)
+
(defgroup org-export nil
"Options for exporting org-listings."
:tag "Org Export"
@@ -2197,16 +2816,17 @@ This is a property list with the following properties:
This path may be relative to the directory where the Org-mode file lives.
The default is to put them into the same directory as the Org-mode file.
The variable may also be an alist with export types `:html', `:ascii',
-`:ical', or `:xoxo' and the corresponding directories. If a direcoty path
-is relative, it is interpreted relative to the directory where the exported
-Org-mode files lives."
+`:ical', `:LaTeX', or `:xoxo' and the corresponding directories.
+If a directory path is relative, it is interpreted relative to the
+directory where the exported Org-mode files lives."
:group 'org-export-general
:type '(choice
(directory)
(repeat
(cons
(choice :tag "Type"
- (const :html) (const :ascii) (const :ical) (const :xoxo))
+ (const :html) (const :LaTeX)
+ (const :ascii) (const :ical) (const :xoxo))
(directory)))))
(defcustom org-export-language-setup
@@ -2214,8 +2834,8 @@ Org-mode files lives."
("cs" "Autor" "Datum" "Obsah")
("da" "Ophavsmand" "Dato" "Indhold")
("de" "Autor" "Datum" "Inhaltsverzeichnis")
- ("es" "Autor" "Fecha" "\xccndice")
- ("fr" "Auteur" "Date" "Table des Mati\xe8res")
+ ("es" "Autor" "Fecha" "\xcdndice")
+ ("fr" "Auteur" "Date" "Table des mati\xe8res")
("it" "Autore" "Data" "Indice")
("nl" "Auteur" "Datum" "Inhoudsopgave")
("nn" "Forfattar" "Dato" "Innhold") ;; nn = Norsk (nynorsk)
@@ -2237,6 +2857,12 @@ This should have an association in `org-export-language-setup'."
:group 'org-export-general
:type 'string)
+(defcustom org-export-skip-text-before-1st-heading t
+ "Non-nil means, skip all text before the first headline when exporting.
+When nil, that text is exported as well."
+ :group 'org-export-general
+ :type 'boolean)
+
(defcustom org-export-headline-levels 3
"The last level which is still exported as a headline.
Inferior levels will produce itemize lists when exported.
@@ -2303,6 +2929,23 @@ headline Only export the headline, but skip the tree below it."
(const :tag "headline only" 'headline)
(const :tag "entirely" t)))
+(defcustom org-export-author-info t
+ "Non-nil means, insert author name and email into the exported file.
+
+This option can also be set with the +OPTIONS line,
+e.g. \"author-info:nil\"."
+ :group 'org-export-general
+ :type 'boolean)
+
+(defcustom org-export-time-stamp-file t
+ "Non-nil means, insert a time stamp into the exported file.
+The time stamp shows when the file was created.
+
+This option can also be set with the +OPTIONS line,
+e.g. \"timestamp:nil\"."
+ :group 'org-export-general
+ :type 'boolean)
+
(defcustom org-export-with-timestamps t
"If nil, do not export time stamps and associated keywords."
:group 'org-export-general
@@ -2316,13 +2959,26 @@ headline Only export the headline, but skip the tree below it."
(defcustom org-export-with-tags 'not-in-toc
"If nil, do not export tags, just remove them from headlines.
If this is the symbol `not-in-toc', tags will be removed from table of
-contents entries, but still be shown in the headlines of the document."
+contents entries, but still be shown in the headlines of the document.
+
+This option can also be set with the +OPTIONS line, e.g. \"tags:nil\"."
:group 'org-export-general
:type '(choice
(const :tag "Off" nil)
(const :tag "Not in TOC" not-in-toc)
(const :tag "On" t)))
+(defcustom org-export-with-drawers nil
+ "Non-nil means, export with drawers like the property drawer.
+When t, all drawers are exported. This may also be a list of
+drawer names to export."
+ :group 'org-export-general
+ :type '(choice
+ (const :tag "All drawers" t)
+ (const :tag "None" nil)
+ (repeat :tag "Selected drawers"
+ (string :tag "Drawer name"))))
+
(defgroup org-export-translation nil
"Options for translating special ascii sequences for the export backends."
:tag "Org Export Translation"
@@ -2339,6 +2995,14 @@ This option can also be set with the +OPTIONS line, e.g. \"*:nil\"."
:group 'org-export-translation
:type 'boolean)
+(defcustom org-export-with-footnotes t
+ "If nil, export [1] as a footnote marker.
+Lines starting with [1] will be formatted as footnotes.
+
+This option can also be set with the +OPTIONS line, e.g. \"f:nil\"."
+ :group 'org-export-translation
+ :type 'boolean)
+
(defcustom org-export-with-sub-superscripts t
"Non-nil means, interpret \"_\" and \"^\" for export.
When this option is turned on, you can use TeX-like syntax for sub- and
@@ -2354,12 +3018,19 @@ sub- or superscripts.
x_{i^2} or x^(2-i) braces or parenthesis do grouping.
Still, ambiguity is possible - so when in doubt use {} to enclose the
-sub/superscript.
+sub/superscript. If you set this variable to the symbol `{}',
+the braces are *required* in order to trigger interpretations as
+sub/superscript. This can be helpful in documents that need \"_\"
+frequently in plain text.
+
Not all export backends support this, but HTML does.
This option can also be set with the +OPTIONS line, e.g. \"^:nil\"."
:group 'org-export-translation
- :type 'boolean)
+ :type '(choice
+ (const :tag "Always interpret" t)
+ (const :tag "Only with braces" {})
+ (const :tag "Never interpret" nil)))
(defcustom org-export-with-TeX-macros t
"Non-nil means, interpret simple TeX-like macros when exporting.
@@ -2371,7 +3042,7 @@ Not all export backends support this.
This option can also be set with the +OPTIONS line, e.g. \"TeX:nil\"."
:group 'org-export-translation
- :group 'org-latex
+ :group 'org-export-latex
:type 'boolean)
(defcustom org-export-with-LaTeX-fragments nil
@@ -2383,7 +3054,7 @@ display math.
This option can also be set with the +OPTIONS line, e.g. \"LaTeX:t\"."
:group 'org-export-translation
- :group 'org-latex
+ :group 'org-export-latex
:type 'boolean)
(defcustom org-export-with-fixed-width t
@@ -2467,7 +3138,7 @@ In the given sequence, these characters will be used for level 1, 2, ..."
(defcustom org-export-ascii-bullets '(?* ?+ ?-)
"Bullet characters for headlines converted to lists in ASCII export.
-The first character is used for the first lest level generated in this
+The first character is is used for the first lest level generated in this
way, and so on. If there are more levels than characters given here,
the list will be repeated.
Note that plain lists will keep the same bullets as the have in the
@@ -2485,6 +3156,16 @@ Org-mode file."
:tag "Org Export HTML"
:group 'org-export)
+(defcustom org-export-html-coding-system nil
+ ""
+ :group 'org-export-html
+ :type 'coding-system)
+
+(defcustom org-export-html-extension "html"
+ "The extension for exported HTML files."
+ :group 'org-export-html
+ :type 'string)
+
(defcustom org-export-html-style
"<style type=\"text/css\">
html {
@@ -2534,6 +3215,7 @@ you can \"misuse\" it to add arbitrary text to the header."
:group 'org-export-html
:type 'string)
+
(defcustom org-export-html-title-format "<h1 class=\"title\">%s</h1>\n"
"Format for typesetting the document title in HTML export."
:group 'org-export-html
@@ -2579,12 +3261,24 @@ This option can also be set with the +OPTIONS line, e.g. \"@:nil\"."
(defcustom org-export-html-table-tag
"<table border=\"2\" cellspacing=\"0\" cellpadding=\"6\" rules=\"groups\" frame=\"hsides\">"
- "The HTML tag used to start a table.
+ "The HTML tag that is used to start a table.
This must be a <table> tag, but you may change the options like
borders and spacing."
:group 'org-export-html
:type 'string)
+(defcustom org-export-table-header-tags '("<th>" . "</th>")
+ "The opening tag for table header fields.
+This is customizable so that alignment options can be specified."
+ :group 'org-export-tables
+ :type '(cons (string :tag "Opening tag") (string :tag "Closing tag")))
+
+(defcustom org-export-table-data-tags '("<td>" . "</td>")
+ "The opening tag for table data fields.
+This is customizable so that alignment options can be specified."
+ :group 'org-export-tables
+ :type '(cons (string :tag "Opening tag") (string :tag "Closing tag")))
+
(defcustom org-export-html-with-timestamp nil
"If non-nil, write `org-export-html-html-helper-timestamp'
into the exported HTML text. Otherwise, the buffer will just be saved
@@ -2606,7 +3300,7 @@ to a file."
(defcustom org-combined-agenda-icalendar-file "~/org.ics"
"The file name for the iCalendar file covering all agenda files.
This file is created with the command \\[org-export-icalendar-all-agenda-files].
-The file name should be absolute."
+The file name should be absolute, the file will be overwritten without warning."
:group 'org-export-icalendar
:type 'file)
@@ -2618,6 +3312,23 @@ The file name should be absolute."
(const :tag "Unfinished" t)
(const :tag "All" all)))
+(defcustom org-icalendar-include-sexps t
+ "Non-nil means, export to iCalendar files should also cover sexp entries.
+These are entries like in the diary, but directly in an Org-mode file."
+ :group 'org-export-icalendar
+ :type 'boolean)
+
+(defcustom org-icalendar-include-body 100
+ "Amount of text below headline to be included in iCalendar export.
+This is a number of characters that should maximally be included.
+Properties, scheduling and clocking lines will always be removed.
+The text will be inserted into the DESCRIPTION field."
+ :group 'org-export-icalendar
+ :type '(choice
+ (const :tag "Nothing" nil)
+ (const :tag "Everything" t)
+ (integer :tag "Max characters")))
+
(defcustom org-icalendar-combined-name "OrgMode"
"Calendar name for the combined iCalendar representing all agenda files."
:group 'org-export-icalendar
@@ -2690,8 +3401,6 @@ Changing this variable requires a restart of Emacs to take effect."
(setq markers (concat (replace-match "" t t markers) "^")))
(if (string-match "-" markers)
(setq markers (concat (replace-match "" t t markers) "-")))
-; (while (>= (setq nl (1- nl)) 0) (setq body1 (concat body1 "\n?" body "*?")))
-; (while (>= (setq nl (1- nl)) 0) (setq body1 (concat body1 "\\(?:\n?" body "*?\\)?")))
(if (> nl 0)
(setq body1 (concat body1 "\\(?:\n" body "*?\\)\\{0,"
(int-to-string nl) "\\}")))
@@ -2701,15 +3410,15 @@ Changing this variable requires a restart of Emacs to take effect."
"\\("
"\\([" markers "]\\)"
"\\("
- "[^" border markers "]"
+ "[^" border (if (and nil stacked) markers) "]"
body1
- "[^" border markers "]"
+ "[^" border (if (and nil stacked) markers) "]"
"\\)"
"\\3\\)"
"\\([" post (if stacked markers) "]\\|$\\)")))))
(defcustom org-emphasis-regexp-components
- '(" \t('\"" " \t.,?;'\")" " \t\r\n," "." 1 nil)
+ '(" \t('\"" "- \t.,:?;'\")" " \t\r\n,\"'" "." 1 nil)
"Components used to build the reqular expression for emphasis.
This is a list with 6 entries. Terminology: In an emphasis string
like \" *strong word* \", we call the initial space PREMATCH, the final
@@ -2719,8 +3428,7 @@ specify what is allowed/forbidden in each part:
pre Chars allowed as prematch. Beginning of line will be allowed too.
post Chars allowed as postmatch. End of line will be allowed too.
-border The chars *forbidden* as border characters. In addition to the
- characters given here, all marker characters are forbidden too.
+border The chars *forbidden* as border characters.
body-regexp A regexp like \".\" to match a body character. Don't use
non-shy groups here, and don't allow newline here.
newline The maximum number of newlines allowed in an emphasis exp.
@@ -2743,13 +3451,13 @@ Use customize to modify this, or restart Emacs after changing it."
'(("*" bold "<b>" "</b>")
("/" italic "<i>" "</i>")
("_" underline "<u>" "</u>")
- ("=" shadow "<code>" "</code>")
+ ("=" org-code "<code>" "</code>")
("+" (:strike-through t) "<del>" "</del>")
-)
+ )
"Special syntax for emphasized text.
Text starting and ending with a special character will be emphasized, for
example *bold*, _underlined_ and /italic/. This variable sets the marker
-characters, the face to bbe used by font-lock for highlighting in Org-mode
+characters, the face to be used by font-lock for highlighting in Org-mode
Emacs buffers, and the HTML tags to be used for this.
Use customize to modify this, or restart Emacs after changing it."
:group 'org-font-lock
@@ -2770,26 +3478,36 @@ Use customize to modify this, or restart Emacs after changing it."
:tag "Org Faces"
:group 'org-font-lock)
-(defun org-compatible-face (specs)
+(defun org-compatible-face (inherits specs)
"Make a compatible face specification.
+If INHERITS is an existing face and if the Emacs version supports it,
+just inherit the face. If not, use SPECS to define the face.
XEmacs and Emacs 21 do not know about the `min-colors' attribute.
For them we convert a (min-colors 8) entry to a `tty' entry and move it
to the top of the list. The `min-colors' attribute will be removed from
any other entries, and any resulting duplicates will be removed entirely."
- (if (or (featurep 'xemacs) (< emacs-major-version 22))
- (let (r e a)
- (while (setq e (pop specs))
- (cond
- ((memq (car e) '(t default)) (push e r))
- ((setq a (member '(min-colors 8) (car e)))
- (nconc r (list (cons (cons '(type tty) (delq (car a) (car e)))
- (cdr e)))))
- ((setq a (assq 'min-colors (car e)))
- (setq e (cons (delq a (car e)) (cdr e)))
- (or (assoc (car e) r) (push e r)))
- (t (or (assoc (car e) r) (push e r)))))
- (nreverse r))
- specs))
+ (cond
+ ((and inherits (facep inherits)
+ (not (featurep 'xemacs)) (> emacs-major-version 22))
+ ;; In Emacs 23, we use inheritance where possible.
+ ;; We only do this in Emacs 23, because only there the outline
+ ;; faces have been changed to the original org-mode-level-faces.
+ (list (list t :inherit inherits)))
+ ((or (featurep 'xemacs) (< emacs-major-version 22))
+ ;; These do not understand the `min-colors' attribute.
+ (let (r e a)
+ (while (setq e (pop specs))
+ (cond
+ ((memq (car e) '(t default)) (push e r))
+ ((setq a (member '(min-colors 8) (car e)))
+ (nconc r (list (cons (cons '(type tty) (delq (car a) (car e)))
+ (cdr e)))))
+ ((setq a (assq 'min-colors (car e)))
+ (setq e (cons (delq a (car e)) (cdr e)))
+ (or (assoc (car e) r) (push e r)))
+ (t (or (assoc (car e) r) (push e r)))))
+ (nreverse r)))
+ (t specs)))
(defface org-hide
'((((background light)) (:foreground "white"))
@@ -2801,6 +3519,7 @@ color of the frame."
(defface org-level-1 ;; font-lock-function-name-face
(org-compatible-face
+ 'outline-1
'((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
(((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 16) (background light)) (:foreground "Blue"))
@@ -2812,6 +3531,7 @@ color of the frame."
(defface org-level-2 ;; font-lock-variable-name-face
(org-compatible-face
+ 'outline-2
'((((class color) (min-colors 16) (background light)) (:foreground "DarkGoldenrod"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightGoldenrod"))
(((class color) (min-colors 8) (background light)) (:foreground "yellow"))
@@ -2822,6 +3542,7 @@ color of the frame."
(defface org-level-3 ;; font-lock-keyword-face
(org-compatible-face
+ 'outline-3
'((((class color) (min-colors 88) (background light)) (:foreground "Purple"))
(((class color) (min-colors 88) (background dark)) (:foreground "Cyan1"))
(((class color) (min-colors 16) (background light)) (:foreground "Purple"))
@@ -2834,6 +3555,7 @@ color of the frame."
(defface org-level-4 ;; font-lock-comment-face
(org-compatible-face
+ 'outline-4
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 16) (background light)) (:foreground "red"))
@@ -2846,6 +3568,7 @@ color of the frame."
(defface org-level-5 ;; font-lock-type-face
(org-compatible-face
+ 'outline-5
'((((class color) (min-colors 16) (background light)) (:foreground "ForestGreen"))
(((class color) (min-colors 16) (background dark)) (:foreground "PaleGreen"))
(((class color) (min-colors 8)) (:foreground "green"))))
@@ -2854,6 +3577,7 @@ color of the frame."
(defface org-level-6 ;; font-lock-constant-face
(org-compatible-face
+ 'outline-6
'((((class color) (min-colors 16) (background light)) (:foreground "CadetBlue"))
(((class color) (min-colors 16) (background dark)) (:foreground "Aquamarine"))
(((class color) (min-colors 8)) (:foreground "magenta"))))
@@ -2862,6 +3586,7 @@ color of the frame."
(defface org-level-7 ;; font-lock-builtin-face
(org-compatible-face
+ 'outline-7
'((((class color) (min-colors 16) (background light)) (:foreground "Orchid"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSteelBlue"))
(((class color) (min-colors 8)) (:foreground "blue"))))
@@ -2870,6 +3595,7 @@ color of the frame."
(defface org-level-8 ;; font-lock-string-face
(org-compatible-face
+ 'outline-8
'((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
(((class color) (min-colors 8)) (:foreground "green"))))
@@ -2878,14 +3604,51 @@ color of the frame."
(defface org-special-keyword ;; font-lock-string-face
(org-compatible-face
+ nil
'((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
(t (:italic t))))
"Face used for special keywords."
:group 'org-faces)
-(defface org-warning ;; font-lock-warning-face
+(defface org-drawer ;; font-lock-function-name-face
+ (org-compatible-face
+ nil
+ '((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
+ (((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
+ (((class color) (min-colors 16) (background light)) (:foreground "Blue"))
+ (((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
+ (((class color) (min-colors 8)) (:foreground "blue" :bold t))
+ (t (:bold t))))
+ "Face used for drawers."
+ :group 'org-faces)
+
+(defface org-property-value nil
+ "Face used for the value of a property."
+ :group 'org-faces)
+
+(defface org-column
+ (org-compatible-face
+ nil
+ '((((class color) (min-colors 16) (background light))
+ (:background "grey90"))
+ (((class color) (min-colors 16) (background dark))
+ (:background "grey30"))
+ (((class color) (min-colors 8))
+ (:background "cyan" :foreground "black"))
+ (t (:inverse-video t))))
+ "Face for column display of entry properties."
+ :group 'org-faces)
+
+(when (fboundp 'set-face-attribute)
+ ;; Make sure that a fixed-width face is used when we have a column table.
+ (set-face-attribute 'org-column nil
+ :height (face-attribute 'default :height)
+ :family (face-attribute 'default :family)))
+
+(defface org-warning
(org-compatible-face
+ 'font-lock-warning-face
'((((class color) (min-colors 16) (background light)) (:foreground "Red1" :bold t))
(((class color) (min-colors 16) (background dark)) (:foreground "Pink" :bold t))
(((class color) (min-colors 8) (background light)) (:foreground "red" :bold t))
@@ -2894,17 +3657,9 @@ color of the frame."
"Face for deadlines and TODO keywords."
:group 'org-faces)
-(defface org-headline-done ;; font-lock-string-face
- (org-compatible-face
- '((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
- (((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
- (((class color) (min-colors 8) (background light)) (:bold nil))))
- "Face used to indicate that a headline is DONE.
-This face is only used if `org-fontify-done-headline' is set."
- :group 'org-faces)
-
(defface org-archived ; similar to shadow
(org-compatible-face
+ 'shadow
'((((class color grayscale) (min-colors 88) (background light))
(:foreground "grey50"))
(((class color grayscale) (min-colors 88) (background dark))
@@ -2923,6 +3678,20 @@ This face is only used if `org-fontify-done-headline' is set."
"Face for links."
:group 'org-faces)
+(defface org-ellipsis
+ '((((class color) (background light)) (:foreground "DarkGoldenrod" :strike-through t))
+ (((class color) (background dark)) (:foreground "LightGoldenrod" :strike-through t))
+ (t (:strike-through t)))
+ "Face for the ellipsis in folded text."
+ :group 'org-faces)
+
+(defface org-target
+ '((((class color) (background light)) (:underline t))
+ (((class color) (background dark)) (:underline t))
+ (t (:underline t)))
+ "Face for links."
+ :group 'org-faces)
+
(defface org-date
'((((class color) (background light)) (:foreground "Purple" :underline t))
(((class color) (background dark)) (:foreground "Cyan" :underline t))
@@ -2930,13 +3699,21 @@ This face is only used if `org-fontify-done-headline' is set."
"Face for links."
:group 'org-faces)
+(defface org-sexp-date
+ '((((class color) (background light)) (:foreground "Purple"))
+ (((class color) (background dark)) (:foreground "Cyan"))
+ (t (:underline t)))
+ "Face for links."
+ :group 'org-faces)
+
(defface org-tag
'((t (:bold t)))
"Face for tags."
:group 'org-faces)
-(defface org-todo ;; font-lock-warning-face
+(defface org-todo ; font-lock-warning-face
(org-compatible-face
+ nil
'((((class color) (min-colors 16) (background light)) (:foreground "Red1" :bold t))
(((class color) (min-colors 16) (background dark)) (:foreground "Pink" :bold t))
(((class color) (min-colors 8) (background light)) (:foreground "red" :bold t))
@@ -2947,15 +3724,40 @@ This face is only used if `org-fontify-done-headline' is set."
(defface org-done ;; font-lock-type-face
(org-compatible-face
+ nil
'((((class color) (min-colors 16) (background light)) (:foreground "ForestGreen" :bold t))
(((class color) (min-colors 16) (background dark)) (:foreground "PaleGreen" :bold t))
(((class color) (min-colors 8)) (:foreground "green"))
(t (:bold t))))
- "Face used for DONE."
+ "Face used for todo keywords that indicate DONE items."
+ :group 'org-faces)
+
+(defface org-headline-done ;; font-lock-string-face
+ (org-compatible-face
+ nil
+ '((((class color) (min-colors 16) (background light)) (:foreground "RosyBrown"))
+ (((class color) (min-colors 16) (background dark)) (:foreground "LightSalmon"))
+ (((class color) (min-colors 8) (background light)) (:bold nil))))
+ "Face used to indicate that a headline is DONE.
+This face is only used if `org-fontify-done-headline' is set. If applies
+to the part of the headline after the DONE keyword."
:group 'org-faces)
+(defcustom org-todo-keyword-faces nil
+ "Faces for specific TODO keywords.
+This is a list of cons cells, with TODO keywords in the car
+and faces in the cdr. The face can be a symbol, or a property
+list of attributes, like (:foreground \"blue\" :weight bold :underline t)."
+ :group 'org-faces
+ :group 'org-todo
+ :type '(repeat
+ (cons
+ (string :tag "keyword")
+ (sexp :tag "face"))))
+
(defface org-table ;; font-lock-function-name-face
(org-compatible-face
+ nil
'((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
(((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
(((class color) (min-colors 16) (background light)) (:foreground "Blue"))
@@ -2967,6 +3769,7 @@ This face is only used if `org-fontify-done-headline' is set."
(defface org-formula
(org-compatible-face
+ nil
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 8) (background light)) (:foreground "red"))
@@ -2975,8 +3778,36 @@ This face is only used if `org-fontify-done-headline' is set."
"Face for formulas."
:group 'org-faces)
+(defface org-code
+ (org-compatible-face
+ nil
+ '((((class color grayscale) (min-colors 88) (background light))
+ (:foreground "grey50"))
+ (((class color grayscale) (min-colors 88) (background dark))
+ (:foreground "grey70"))
+ (((class color) (min-colors 8) (background light))
+ (:foreground "green"))
+ (((class color) (min-colors 8) (background dark))
+ (:foreground "yellow"))))
+ "Face for fixed-with text like code snippets."
+ :group 'org-faces
+ :version "22.1")
+
+(defface org-agenda-structure ;; font-lock-function-name-face
+ (org-compatible-face
+ nil
+ '((((class color) (min-colors 88) (background light)) (:foreground "Blue1"))
+ (((class color) (min-colors 88) (background dark)) (:foreground "LightSkyBlue"))
+ (((class color) (min-colors 16) (background light)) (:foreground "Blue"))
+ (((class color) (min-colors 16) (background dark)) (:foreground "LightSkyBlue"))
+ (((class color) (min-colors 8)) (:foreground "blue" :bold t))
+ (t (:bold t))))
+ "Face used in agenda for captions and dates."
+ :group 'org-faces)
+
(defface org-scheduled-today
(org-compatible-face
+ nil
'((((class color) (min-colors 88) (background light)) (:foreground "DarkGreen"))
(((class color) (min-colors 88) (background dark)) (:foreground "PaleGreen"))
(((class color) (min-colors 8)) (:foreground "green"))
@@ -2986,6 +3817,7 @@ This face is only used if `org-fontify-done-headline' is set."
(defface org-scheduled-previously
(org-compatible-face
+ nil
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 8) (background light)) (:foreground "red"))
@@ -2996,6 +3828,7 @@ This face is only used if `org-fontify-done-headline' is set."
(defface org-upcoming-deadline
(org-compatible-face
+ nil
'((((class color) (min-colors 88) (background light)) (:foreground "Firebrick"))
(((class color) (min-colors 88) (background dark)) (:foreground "chocolate1"))
(((class color) (min-colors 8) (background light)) (:foreground "red"))
@@ -3004,8 +3837,34 @@ This face is only used if `org-fontify-done-headline' is set."
"Face for items scheduled previously, and not yet done."
:group 'org-faces)
+(defcustom org-agenda-deadline-faces
+ '((1.0 . org-warning)
+ (0.5 . org-upcoming-deadline)
+ (0.0 . default))
+ "Faces for showing deadlines in the agenda.
+This is a list of cons cells. The cdr of each cess is a face to be used,
+and it can also just be a like like '(:foreground \"yellow\").
+Each car is a fraction of the head-warning time that must have passed for
+this the face in the cdr to be used for display. The numbers must be
+given in descending order. The head-warning time is normally taken
+from `org-deadline-warning-days', but can also be specified in the deadline
+timestamp itself, like this:
+
+ DEADLINE: <2007-08-13 Mon -8d>
+
+You may use d for days, w for weeks, m for months and y for years. Months
+and years will only be treated in an approximate fashion (30.4 days for a
+month and 365.24 days for a year)."
+ :group 'org-faces
+ :group 'org-agenda-daily/weekly
+ :type '(repeat
+ (cons
+ (number :tag "Fraction of head-warning time passed")
+ (sexp :tag "Face"))))
+
(defface org-time-grid ;; font-lock-variable-name-face
(org-compatible-face
+ nil
'((((class color) (min-colors 16) (background light)) (:foreground "DarkGoldenrod"))
(((class color) (min-colors 16) (background dark)) (:foreground "LightGoldenrod"))
(((class color) (min-colors 8)) (:foreground "yellow" :weight light))))
@@ -3016,14 +3875,19 @@ This face is only used if `org-fontify-done-headline' is set."
'(org-level-1 org-level-2 org-level-3 org-level-4
org-level-5 org-level-6 org-level-7 org-level-8
))
-(defconst org-n-levels (length org-level-faces))
+(defcustom org-n-level-faces (length org-level-faces)
+ "The number different faces to be used for headlines.
+Org-mode defines 8 different headline faces, so this can be at most 8.
+If it is less than 8, the level-1 face gets re-used for level N+1 etc."
+ :type 'number
+ :group 'org-faces)
;;; Variables for pre-computed regular expressions, all buffer local
-(defvar org-done-string nil
- "The last string in `org-todo-keywords', indicating an item is DONE.")
-(make-variable-buffer-local 'org-done-string)
+(defvar org-drawer-regexp nil
+ "Matches first line of a hidden block.")
+(make-variable-buffer-local 'org-drawer-regexp)
(defvar org-todo-regexp nil
"Matches any of the TODO state keywords.")
(make-variable-buffer-local 'org-todo-regexp)
@@ -3033,6 +3897,14 @@ This face is only used if `org-fontify-done-headline' is set."
(defvar org-todo-line-regexp nil
"Matches a headline and puts TODO state into group 2 if present.")
(make-variable-buffer-local 'org-todo-line-regexp)
+(defvar org-complex-heading-regexp nil
+ "Matches a headline and puts everything into groups:
+group 1: the stars
+group 2: The todo keyword, maybe
+group 3: Priority cookie
+group 4: True headline
+group 5: Tags")
+(make-variable-buffer-local 'org-complex-heading-regexp)
(defvar org-todo-line-tags-regexp nil
"Matches a headline and puts TODO state into group 2 if present.
Also put tags into group 4 if tags are present.")
@@ -3043,12 +3915,6 @@ Also put tags into group 4 if tags are present.")
(defvar org-looking-at-done-regexp nil
"Matches the DONE keyword a point.")
(make-variable-buffer-local 'org-looking-at-done-regexp)
-(defvar org-todo-kwd-priority-p nil
- "Do TODO items have priorities?")
-(make-variable-buffer-local 'org-todo-kwd-priority-p)
-(defvar org-todo-kwd-max-priority nil
- "Maximum priority of TODO items.")
-(make-variable-buffer-local 'org-todo-kwd-max-priority)
(defvar org-ds-keyword-length 12
"Maximum length of the Deadline and SCHEDULED keywords.")
(make-variable-buffer-local 'org-ds-keyword-length)
@@ -3080,6 +3946,9 @@ Also put tags into group 4 if tags are present.")
(defvar org-maybe-keyword-time-regexp nil
"Matches a timestamp, possibly preceeded by a keyword.")
(make-variable-buffer-local 'org-maybe-keyword-time-regexp)
+(defvar org-planning-or-clock-line-re nil
+ "Matches a line with planning or clock info.")
+(make-variable-buffer-local 'org-planning-or-clock-line-re)
(defconst org-rm-props '(invisible t face t keymap t intangible t mouse-face t
rear-nonsticky t mouse-map t fontified t)
@@ -3093,7 +3962,9 @@ Also put tags into group 4 if tags are present.")
(match-string-no-properties num string)))
(defsubst org-no-properties (s)
- (remove-text-properties 0 (length s) org-rm-props s)
+ (if (fboundp 'set-text-properties)
+ (set-text-properties 0 (length s) nil s)
+ (remove-text-properties 0 (length s) org-rm-props s))
s)
(defsubst org-get-alist-option (option key)
@@ -3102,6 +3973,12 @@ Also put tags into group 4 if tags are present.")
((assoc key option) (cdr (assoc key option)))
(t (cdr (assq 'default option)))))
+(defsubst org-inhibit-invisibility ()
+ "Modified `buffer-invisibility-spec' for Emacs 21.
+Some ops with invisible text do not work correctly on Emacs 21. For these
+we turn off invisibility temporarily. Use this in a `let' form."
+ (if (< emacs-major-version 22) nil buffer-invisibility-spec))
+
(defsubst org-set-local (var value)
"Make VAR local in current buffer and set it to VALUE."
(set (make-variable-buffer-local var) value))
@@ -3139,7 +4016,11 @@ Also put tags into group 4 if tags are present.")
("nologging" org-log-done nil)
("lognotedone" org-log-done done push)
("lognotestate" org-log-done state push)
- ("lognoteclock-out" org-log-done clock-out push))
+ ("lognoteclock-out" org-log-done clock-out push)
+ ("logrepeat" org-log-repeat t)
+ ("nologrepeat" org-log-repeat nil)
+ ("constcgs" constants-unit-system cgs)
+ ("constSI" constants-unit-system SI))
"Variable associated with STARTUP options for org-mode.
Each element is a list of three items: The startup options as written
in the #+STARTUP line, the corresponding variable, and the value to
@@ -3149,11 +4030,22 @@ means to push this value onto the list in the variable.")
(defun org-set-regexps-and-options ()
"Precompute regular expressions for current buffer."
(when (org-mode-p)
+ (org-set-local 'org-todo-kwd-alist nil)
+ (org-set-local 'org-todo-key-alist nil)
+ (org-set-local 'org-todo-key-trigger nil)
+ (org-set-local 'org-todo-keywords-1 nil)
+ (org-set-local 'org-done-keywords nil)
+ (org-set-local 'org-todo-heads nil)
+ (org-set-local 'org-todo-sets nil)
+ (org-set-local 'org-todo-log-states nil)
(let ((re (org-make-options-regexp
- '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO"
- "STARTUP" "ARCHIVE" "TAGS" "LINK")))
+ '("CATEGORY" "SEQ_TODO" "TYP_TODO" "TODO" "COLUMNS"
+ "STARTUP" "ARCHIVE" "TAGS" "LINK" "PRIORITIES"
+ "CONSTANTS" "PROPERTY" "DRAWERS")))
(splitre "[ \t]+")
- kwds int key value cat arch tags links)
+ kwds kws0 kwsa key value cat arch tags const links hw dws
+ tail sep kws1 prio props drawers
+ ex log)
(save-excursion
(save-restriction
(widen)
@@ -3165,33 +4057,41 @@ means to push this value onto the list in the variable.")
(if (string-match "[ \t]+$" value)
(setq value (replace-match "" t t value)))
(setq cat (intern value)))
- ((equal key "SEQ_TODO")
- (setq int 'sequence
- kwds (append kwds (org-split-string value splitre))))
- ((equal key "PRI_TODO")
- (setq int 'priority
- kwds (append kwds (org-split-string value splitre))))
+ ((member key '("SEQ_TODO" "TODO"))
+ (push (cons 'sequence (org-split-string value splitre)) kwds))
((equal key "TYP_TODO")
- (setq int 'type
- kwds (append kwds (org-split-string value splitre))))
+ (push (cons 'type (org-split-string value splitre)) kwds))
((equal key "TAGS")
(setq tags (append tags (org-split-string value splitre))))
+ ((equal key "COLUMNS")
+ (org-set-local 'org-columns-default-format value))
((equal key "LINK")
(when (string-match "^\\(\\S-+\\)[ \t]+\\(.+\\)" value)
(push (cons (match-string 1 value)
(org-trim (match-string 2 value)))
links)))
+ ((equal key "PRIORITIES")
+ (setq prio (org-split-string value " +")))
+ ((equal key "PROPERTY")
+ (when (string-match "\\(\\S-+\\)\\s-+\\(.*\\)" value)
+ (push (cons (match-string 1 value) (match-string 2 value))
+ props)))
+ ((equal key "DRAWERS")
+ (setq drawers (org-split-string value splitre)))
+ ((equal key "CONSTANTS")
+ (setq const (append const (org-split-string value splitre))))
((equal key "STARTUP")
(let ((opts (org-split-string value splitre))
l var val)
- (while (setq l (assoc (pop opts) org-startup-options))
- (setq var (nth 1 l) val (nth 2 l))
- (if (not (nth 3 l))
- (set (make-local-variable var) val)
- (if (not (listp (symbol-value var)))
- (set (make-local-variable var) nil))
- (set (make-local-variable var) (symbol-value var))
- (add-to-list var val)))))
+ (while (setq l (pop opts))
+ (when (setq l (assoc l org-startup-options))
+ (setq var (nth 1 l) val (nth 2 l))
+ (if (not (nth 3 l))
+ (set (make-local-variable var) val)
+ (if (not (listp (symbol-value var)))
+ (set (make-local-variable var) nil))
+ (set (make-local-variable var) (symbol-value var))
+ (add-to-list var val))))))
((equal key "ARCHIVE")
(string-match " *$" value)
(setq arch (replace-match "" t t value))
@@ -3199,17 +4099,76 @@ means to push this value onto the list in the variable.")
'(face t fontified t) arch)))
)))
(and cat (org-set-local 'org-category cat))
- (and kwds (org-set-local 'org-todo-keywords kwds))
+ (when prio
+ (if (< (length prio) 3) (setq prio '("A" "C" "B")))
+ (setq prio (mapcar 'string-to-char prio))
+ (org-set-local 'org-highest-priority (nth 0 prio))
+ (org-set-local 'org-lowest-priority (nth 1 prio))
+ (org-set-local 'org-default-priority (nth 2 prio)))
+ (and props (org-set-local 'org-local-properties (nreverse props)))
+ (and drawers (org-set-local 'org-drawers drawers))
(and arch (org-set-local 'org-archive-location arch))
- (and int (org-set-local 'org-todo-interpretation int))
(and links (setq org-link-abbrev-alist-local (nreverse links)))
+ ;; Process the TODO keywords
+ (unless kwds
+ ;; Use the global values as if they had been given locally.
+ (setq kwds (default-value 'org-todo-keywords))
+ (if (stringp (car kwds))
+ (setq kwds (list (cons org-todo-interpretation
+ (default-value 'org-todo-keywords)))))
+ (setq kwds (reverse kwds)))
+ (setq kwds (nreverse kwds))
+ (let (inter kws kw)
+ (while (setq kws (pop kwds))
+ (setq inter (pop kws) sep (member "|" kws)
+ kws0 (delete "|" (copy-sequence kws))
+ kwsa nil
+ kws1 (mapcar
+ (lambda (x)
+ (if (string-match "^\\(.*?\\)\\(?:(\\(..?\\))\\)?$" x)
+ (progn
+ (setq kw (match-string 1 x)
+ ex (and (match-end 2) (match-string 2 x))
+ log (and ex (string-match "@" ex))
+ key (and ex (substring ex 0 1)))
+ (if (equal key "@") (setq key nil))
+ (push (cons kw (and key (string-to-char key))) kwsa)
+ (and log (push kw org-todo-log-states))
+ kw)
+ (error "Invalid TODO keyword %s" x)))
+ kws0)
+ kwsa (if kwsa (append '((:startgroup))
+ (nreverse kwsa)
+ '((:endgroup))))
+ hw (car kws1)
+ dws (if sep (org-remove-keyword-keys (cdr sep)) (last kws1))
+ tail (list inter hw (car dws) (org-last dws)))
+ (add-to-list 'org-todo-heads hw 'append)
+ (push kws1 org-todo-sets)
+ (setq org-done-keywords (append org-done-keywords dws nil))
+ (setq org-todo-key-alist (append org-todo-key-alist kwsa))
+ (mapc (lambda (x) (push (cons x tail) org-todo-kwd-alist)) kws1)
+ (setq org-todo-keywords-1 (append org-todo-keywords-1 kws1 nil)))
+ (setq org-todo-sets (nreverse org-todo-sets)
+ org-todo-kwd-alist (nreverse org-todo-kwd-alist)
+ org-todo-key-trigger (delq nil (mapcar 'cdr org-todo-key-alist))
+ org-todo-key-alist (org-assign-fast-keys org-todo-key-alist)))
+ ;; Process the constants
+ (when const
+ (let (e cst)
+ (while (setq e (pop const))
+ (if (string-match "^\\([a-zA-Z0][_a-zA-Z0-9]*\\)=\\(.*\\)" e)
+ (push (cons (match-string 1 e) (match-string 2 e)) cst)))
+ (setq org-table-formula-constants-local cst)))
+
+ ;; Process the tags.
(when tags
(let (e tgs)
(while (setq e (pop tags))
(cond
((equal e "{") (push '(:startgroup) tgs))
((equal e "}") (push '(:endgroup) tgs))
- ((string-match "^\\([0-9a-zA-Z_@]+\\)(\\(.\\))$" e)
+ ((string-match (org-re "^\\([[:alnum:]_@]+\\)(\\(.\\))$") e)
(push (cons (match-string 1 e)
(string-to-char (match-string 2 e)))
tgs))
@@ -3221,32 +4180,45 @@ means to push this value onto the list in the variable.")
(push e org-tag-alist))))))
;; Compute the regular expressions and other local variables
- (setq org-todo-kwd-priority-p (equal org-todo-interpretation 'priority)
- org-todo-kwd-max-priority (1- (length org-todo-keywords))
- org-ds-keyword-length (+ 2 (max (length org-deadline-string)
+ (if (not org-done-keywords)
+ (setq org-done-keywords (list (org-last org-todo-keywords-1))))
+ (setq org-ds-keyword-length (+ 2 (max (length org-deadline-string)
(length org-scheduled-string)))
- org-done-string
- (nth (1- (length org-todo-keywords)) org-todo-keywords)
+ org-drawer-regexp
+ (concat "^[ \t]*:\\("
+ (mapconcat 'regexp-quote org-drawers "\\|")
+ "\\):[ \t]*$")
+ org-not-done-keywords
+ (org-delete-all org-done-keywords (copy-sequence org-todo-keywords-1))
org-todo-regexp
- (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords
+ (concat "\\<\\(" (mapconcat 'regexp-quote org-todo-keywords-1
"\\|") "\\)\\>")
org-not-done-regexp
(concat "\\<\\("
- (mapconcat 'regexp-quote
- (nreverse (cdr (reverse org-todo-keywords)))
- "\\|")
+ (mapconcat 'regexp-quote org-not-done-keywords "\\|")
"\\)\\>")
org-todo-line-regexp
- (concat "^\\(\\*+\\)[ \t]*\\(?:\\("
- (mapconcat 'regexp-quote org-todo-keywords "\\|")
- "\\)\\>\\)? *\\(.*\\)")
+ (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
+ (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
+ "\\)\\>\\)?[ \t]*\\(.*\\)")
+ org-complex-heading-regexp
+ (concat "^\\(\\*+\\)\\(?:[ \t]+\\("
+ (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
+ "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)"
+ "\\(?:[ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$")
org-nl-done-regexp
- (concat "[\r\n]\\*+[ \t]+" org-done-string "\\>")
+ (concat "\n\\*+[ \t]+"
+ "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|")
+ "\\)" "\\>")
org-todo-line-tags-regexp
- (concat "^\\(\\*+\\)[ \t]*\\(?:\\("
- (mapconcat 'regexp-quote org-todo-keywords "\\|")
- "\\)\\>\\)? *\\(.*?\\([ \t]:[a-zA-Z0-9:_@]+:[ \t]*\\)?$\\)")
- org-looking-at-done-regexp (concat "^" org-done-string "\\>")
+ (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
+ (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
+ (org-re
+ "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@]+:[ \t]*\\)?$\\)"))
+ org-looking-at-done-regexp
+ (concat "^" "\\(?:"
+ (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)"
+ "\\>")
org-deadline-regexp (concat "\\<" org-deadline-string)
org-deadline-time-regexp
(concat "\\<" org-deadline-string " *<\\([^>]+\\)>")
@@ -3267,17 +4239,30 @@ means to push this value onto the list in the variable.")
org-keyword-time-not-clock-regexp
(concat "\\<\\(" org-scheduled-string
"\\|" org-deadline-string
- "\\|" org-closed-string "\\)"
+ "\\|" org-closed-string
+ "\\)"
" *[[<]\\([^]>]+\\)[]>]")
org-maybe-keyword-time-regexp
(concat "\\(\\<\\(" org-scheduled-string
"\\|" org-deadline-string
"\\|" org-closed-string
"\\|" org-clock-string "\\)\\)?"
- " *\\([[<][0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^]\r\n>]*?[]>]\\)"))
+ " *\\([[<][0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^]\r\n>]*?[]>]\\|<%%([^\r\n>]*>\\)")
+ org-planning-or-clock-line-re
+ (concat "\\(?:^[ \t]*\\(" org-scheduled-string
+ "\\|" org-deadline-string
+ "\\|" org-closed-string "\\|" org-clock-string
+ "\\)\\>\\)")
+ )
(org-set-font-lock-defaults)))
+(defun org-remove-keyword-keys (list)
+ (mapcar (lambda (x)
+ (if (string-match "(..?)$" x)
+ (substring x 0 (match-beginning 0))
+ x))
+ list))
;;; Some variables ujsed in various places
@@ -3322,9 +4307,12 @@ This is for getting out of special buffers like remember.")
(defvar texmathp-why)
(defvar remember-save-after-remembering)
(defvar remember-data-file)
+(defvar remember-register)
+(defvar remember-buffer)
(defvar annotation) ; from remember.el, dynamically scoped in `remember-mode'
(defvar initial) ; from remember.el, dynamically scoped in `remember-mode'
(defvar org-latex-regexps)
+(defvar constants-unit-system)
(defvar original-date) ; dynamically scoped in calendar.el does scope this
@@ -3339,6 +4327,7 @@ This is for getting out of special buffers like remember.")
;; Defined somewhere in this file, but used before definition.
(defvar orgtbl-mode-menu) ; defined when orgtbl mode get initialized
+(defvar org-agenda-buffer-name)
(defvar org-agenda-undo-list)
(defvar org-agenda-pending-undo-list)
(defvar org-agenda-overriding-header)
@@ -3348,7 +4337,6 @@ This is for getting out of special buffers like remember.")
(defvar org-org-menu)
(defvar org-tbl-menu)
(defvar org-agenda-keymap)
-(defvar org-category-table)
;;;; Emacs/XEmacs compatibility
@@ -3477,7 +4465,8 @@ This variable is set by `org-before-change-function'.
(defvar org-mode-hook nil)
(defvar org-inhibit-startup nil) ; Dynamically-scoped param.
(defvar org-agenda-keep-modes nil) ; Dynamically-scoped param.
-
+(defvar org-table-buffer-is-an nil)
+(defconst org-outline-regexp "\\*+ ")
;;;###autoload
(define-derived-mode org-mode outline-mode "Org"
@@ -3520,20 +4509,25 @@ The following commands are available:
(org-add-to-invisibility-spec '(org-cwidth))
(when (featurep 'xemacs)
(org-set-local 'line-move-ignore-invisible t))
- (setq outline-regexp "\\*+")
- ;;(setq outline-regexp "\\(?:\\*+\\|[ \t]*\\(?:[-+*]\\|[0-9]+[.)]\\) \\)")
- (setq outline-level 'org-outline-level)
- (when (and org-ellipsis (stringp org-ellipsis)
- (fboundp 'set-display-table-slot) (boundp 'buffer-display-table))
+ (org-set-local 'outline-regexp org-outline-regexp)
+ (org-set-local 'outline-level 'org-outline-level)
+ (when (and org-ellipsis
+ (fboundp 'set-display-table-slot) (boundp 'buffer-display-table)
+ (fboundp 'make-glyph-code))
(unless org-display-table
(setq org-display-table (make-display-table)))
- (set-display-table-slot org-display-table
- 4 (string-to-vector org-ellipsis))
+ (set-display-table-slot
+ org-display-table 4
+ (vconcat (mapcar
+ (lambda (c) (make-glyph-code c (and (not (stringp org-ellipsis))
+ org-ellipsis)))
+ (if (stringp org-ellipsis) org-ellipsis "..."))))
(setq buffer-display-table org-display-table))
(org-set-regexps-and-options)
;; Calc embedded
(org-set-local 'calc-embedded-open-mode "# ")
(modify-syntax-entry ?# "<")
+ (modify-syntax-entry ?@ "w")
(if org-startup-truncated (setq truncate-lines t))
(org-set-local 'font-lock-unfontify-region-function
'org-unfontify-region)
@@ -3545,6 +4539,7 @@ The following commands are available:
(org-add-hook 'kill-buffer-hook 'org-check-running-clock nil 'local)
;; Paragraphs and auto-filling
(org-set-autofill-regexps)
+ (setq indent-line-function 'org-indent-line-function)
(org-update-radio-target-regexp)
;; Comment characters
@@ -3564,13 +4559,14 @@ The following commands are available:
(if (and org-insert-mode-line-in-empty-file
(interactive-p)
(= (point-min) (point-max)))
- (insert " -*- mode: org -*-\n\n"))
+ (insert "# -*- mode: org -*-\n\n"))
(unless org-inhibit-startup
(when org-startup-align-all-tables
(let ((bmp (buffer-modified-p)))
(org-table-map-tables 'org-table-align)
(set-buffer-modified-p bmp)))
+ (org-cycle-hide-drawers 'all)
(cond
((eq org-startup-folded t)
(org-cycle '(4)))
@@ -3578,6 +4574,8 @@ The following commands are available:
(let ((this-command 'org-cycle) (last-command 'org-cycle))
(org-cycle '(4)) (org-cycle '(4)))))))
+(put 'org-mode 'flyspell-mode-predicate 'org-mode-flyspell-verify)
+
(defsubst org-call-with-arg (command arg)
"Call COMMAND interactively, but pretend prefix are was ARG."
(let ((current-prefix-arg arg)) (call-interactively command)))
@@ -3585,6 +4583,7 @@ The following commands are available:
(defsubst org-current-line (&optional pos)
(save-excursion
(and pos (goto-char pos))
+ ;; works also in narrowed buffer, because we start at 1, not point-min
(+ (if (bolp) 1 0) (count-lines 1 (point)))))
(defun org-current-time ()
@@ -3610,90 +4609,99 @@ that will be added to PLIST. Returns the string that was modified."
;;;; Font-Lock stuff, including the activators
(defvar org-mouse-map (make-sparse-keymap))
-(define-key org-mouse-map
+(org-defkey org-mouse-map
(if (featurep 'xemacs) [button2] [mouse-2]) 'org-open-at-mouse)
-(define-key org-mouse-map
+(org-defkey org-mouse-map
(if (featurep 'xemacs) [button3] [mouse-3]) 'org-find-file-at-mouse)
(when org-mouse-1-follows-link
- (define-key org-mouse-map [follow-link] 'mouse-face))
+ (org-defkey org-mouse-map [follow-link] 'mouse-face))
(when org-tab-follows-link
- (define-key org-mouse-map [(tab)] 'org-open-at-point)
- (define-key org-mouse-map "\C-i" 'org-open-at-point))
+ (org-defkey org-mouse-map [(tab)] 'org-open-at-point)
+ (org-defkey org-mouse-map "\C-i" 'org-open-at-point))
(when org-return-follows-link
- (define-key org-mouse-map [(return)] 'org-open-at-point)
- (define-key org-mouse-map "\C-m" 'org-open-at-point))
+ (org-defkey org-mouse-map [(return)] 'org-open-at-point)
+ (org-defkey org-mouse-map "\C-m" 'org-open-at-point))
(require 'font-lock)
(defconst org-non-link-chars "]\t\n\r<>")
-(defconst org-link-types '("https?" "ftp" "mailto" "file" "news" "bbdb" "vm"
+(defvar org-link-types '("http" "https" "ftp" "mailto" "file" "news" "bbdb" "vm"
"wl" "mhe" "rmail" "gnus" "shell" "info" "elisp"))
-(defconst org-link-re-with-space
- (concat
- "<?\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^" org-non-link-chars "]*"
- "[^" org-non-link-chars " ]\\)>?")
+(defvar org-link-re-with-space nil
"Matches a link with spaces, optional angular brackets around it.")
-
-(defconst org-link-re-with-space2
- (concat
- "<?\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^]\t\n\r]*"
- "[^" org-non-link-chars " ]\\)>?")
+(defvar org-link-re-with-space2 nil
"Matches a link with spaces, optional angular brackets around it.")
-
-(defconst org-angle-link-re
- (concat
- "<\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
- "\\([^" org-non-link-chars " ]"
- "[^" org-non-link-chars "]*"
- "\\)>")
+(defvar org-angle-link-re nil
"Matches link with angular brackets, spaces are allowed.")
-(defconst org-plain-link-re
- (concat
- "\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
- "\\([^]\t\n\r<>,;() ]+\\)")
+(defvar org-plain-link-re nil
"Matches plain link, without spaces.")
-
-(defconst org-bracket-link-regexp
- "\\[\\[\\([^]]+\\)\\]\\(\\[\\([^]]+\\)\\]\\)?\\]"
+(defvar org-bracket-link-regexp nil
"Matches a link in double brackets.")
-
-(defconst org-bracket-link-analytic-regexp
- (concat
- "\\[\\["
- "\\(\\(" (mapconcat 'identity org-link-types "\\|") "\\):\\)?"
- "\\([^]]+\\)"
- "\\]"
- "\\(\\[" "\\([^]]+\\)" "\\]\\)?"
- "\\]"))
-; 1: http:
-; 2: http
-; 3: path
-; 4: [desc]
-; 5: desc
-
-(defconst org-any-link-re
- (concat "\\(" org-bracket-link-regexp "\\)\\|\\("
- org-angle-link-re "\\)\\|\\("
- org-plain-link-re "\\)")
+(defvar org-bracket-link-analytic-regexp nil
+ "Regular expression used to analyze links.
+Here is what the match groups contain after a match:
+1: http:
+2: http
+3: path
+4: [desc]
+5: desc")
+(defvar org-any-link-re nil
"Regular expression matching any link.")
-(defconst org-ts-lengths
- (cons (length (format-time-string (car org-time-stamp-formats)))
- (length (format-time-string (cdr org-time-stamp-formats))))
- "This holds the lengths of the two different time formats.")
-(defconst org-ts-regexp "<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^\r\n>]*?\\)>"
+(defun org-make-link-regexps ()
+ "Update the link regular expressions.
+This should be called after the variable `org-link-types' has changed."
+ (setq org-link-re-with-space
+ (concat
+ "<?\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
+ "\\([^" org-non-link-chars " ]"
+ "[^" org-non-link-chars "]*"
+ "[^" org-non-link-chars " ]\\)>?")
+ org-link-re-with-space2
+ (concat
+ "<?\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
+ "\\([^" org-non-link-chars " ]"
+ "[^]\t\n\r]*"
+ "[^" org-non-link-chars " ]\\)>?")
+ org-angle-link-re
+ (concat
+ "<\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
+ "\\([^" org-non-link-chars " ]"
+ "[^" org-non-link-chars "]*"
+ "\\)>")
+ org-plain-link-re
+ (concat
+ "\\(" (mapconcat 'identity org-link-types "\\|") "\\):"
+ "\\([^]\t\n\r<>,;() ]+\\)")
+ org-bracket-link-regexp
+ "\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]"
+ org-bracket-link-analytic-regexp
+ (concat
+ "\\[\\["
+ "\\(\\(" (mapconcat 'identity org-link-types "\\|") "\\):\\)?"
+ "\\([^]]+\\)"
+ "\\]"
+ "\\(\\[" "\\([^]]+\\)" "\\]\\)?"
+ "\\]")
+ org-any-link-re
+ (concat "\\(" org-bracket-link-regexp "\\)\\|\\("
+ org-angle-link-re "\\)\\|\\("
+ org-plain-link-re "\\)")))
+
+(org-make-link-regexps)
+
+(defconst org-ts-regexp "<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^\r\n>]*?\\)>"
"Regular expression for fast time stamp matching.")
-(defconst org-ts-regexp-both "[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}[^\r\n>]*?\\)[]>]"
+(defconst org-ts-regexp-both "[[<]\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [^\r\n>]*?\\)[]>]"
"Regular expression for fast time stamp matching.")
-(defconst org-ts-regexp1 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\)\\([^]0-9>\r\n]*\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
+(defconst org-ts-regexp0 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\)\\([^]0-9>\r\n]*\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
+ "Regular expression matching time strings for analysis.
+This one does not require the space after the date.")
+(defconst org-ts-regexp1 "\\(\\([0-9]\\{4\\}\\)-\\([0-9]\\{2\\}\\)-\\([0-9]\\{2\\}\\) \\([^]0-9>\r\n]*\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)"
"Regular expression matching time strings for analysis.")
-(defconst org-ts-regexp2 (concat "<" org-ts-regexp1 ">")
+(defconst org-ts-regexp2 (concat "<" org-ts-regexp1 "[^>\n]\\{0,16\\}>")
"Regular expression matching time stamps, with groups.")
-(defconst org-ts-regexp3 (concat "[[<]" org-ts-regexp1 "[]>]")
+(defconst org-ts-regexp3 (concat "[[<]" org-ts-regexp1 "[^]>\n]\\{0,16\\}[]>]")
"Regular expression matching time stamps (also [..]), with groups.")
(defconst org-tr-regexp (concat org-ts-regexp "--?-?" org-ts-regexp)
"Regular expression matching a time stamp range.")
@@ -3712,26 +4720,97 @@ The time stamps may be either active or inactive.")
(defun org-do-emphasis-faces (limit)
"Run through the buffer and add overlays to links."
- (if (re-search-forward org-emph-re limit t)
- (progn
- (font-lock-prepend-text-property (match-beginning 2) (match-end 2)
- 'face
- (nth 1 (assoc (match-string 3)
- org-emphasis-alist)))
- (add-text-properties (match-beginning 2) (match-end 2)
- '(font-lock-multiline t))
- (backward-char 1)
- t)))
+ (let (rtn)
+ (while (and (not rtn) (re-search-forward org-emph-re limit t))
+ (if (not (= (char-after (match-beginning 3))
+ (char-after (match-beginning 4))))
+ (progn
+ (setq rtn t)
+ (font-lock-prepend-text-property (match-beginning 2) (match-end 2)
+ 'face
+ (nth 1 (assoc (match-string 3)
+ org-emphasis-alist)))
+ (add-text-properties (match-beginning 2) (match-end 2)
+ '(font-lock-multiline t))
+ (backward-char 1))))
+ rtn))
+
+(defun org-emphasize (&optional char)
+ "Insert or change an emphasis, i.e. a font like bold or italic.
+If there is an active region, change that region to a new emphasis.
+If there is no region, just insert the marker characters and position
+the cursor between them.
+CHAR should be either the marker character, or the first character of the
+HTML tag associated with that emphasis. If CHAR is a space, the means
+to remove the emphasis of the selected region.
+If char is not given (for example in an interactive call) it
+will be prompted for."
+ (interactive)
+ (let ((eal org-emphasis-alist) e det
+ (erc org-emphasis-regexp-components)
+ (prompt "")
+ (string "") beg end move tag c s)
+ (if (org-region-active-p)
+ (setq beg (region-beginning) end (region-end)
+ string (buffer-substring beg end))
+ (setq move t))
+
+ (while (setq e (pop eal))
+ (setq tag (car (org-split-string (nth 2 e) "[ <>/]+"))
+ c (aref tag 0))
+ (push (cons c (string-to-char (car e))) det)
+ (setq prompt (concat prompt (format " [%s%c]%s" (car e) c
+ (substring tag 1)))))
+ (unless char
+ (message "%s" (concat "Emphasis marker or tag:" prompt))
+ (setq char (read-char-exclusive)))
+ (setq char (or (cdr (assoc char det)) char))
+ (if (equal char ?\ )
+ (setq s "" move nil)
+ (unless (assoc (char-to-string char) org-emphasis-alist)
+ (error "No such emphasis marker: \"%c\"" char))
+ (setq s (char-to-string char)))
+ (while (and (> (length string) 1)
+ (equal (substring string 0 1) (substring string -1))
+ (assoc (substring string 0 1) org-emphasis-alist))
+ (setq string (substring string 1 -1)))
+ (setq string (concat s string s))
+ (if beg (delete-region beg end))
+ (unless (or (bolp)
+ (string-match (concat "[" (nth 0 erc) "\n]")
+ (char-to-string (char-before (point)))))
+ (insert " "))
+ (unless (string-match (concat "[" (nth 1 erc) "\n]")
+ (char-to-string (char-after (point))))
+ (insert " ") (backward-char 1))
+ (insert string)
+ (and move (backward-char 1))))
+
+(defconst org-nonsticky-props
+ '(mouse-face highlight keymap invisible intangible help-echo org-linked-text))
+
(defun org-activate-plain-links (limit)
"Run through the buffer and add overlays to links."
- (if (re-search-forward org-plain-link-re limit t)
- (progn
- (add-text-properties (match-beginning 0) (match-end 0)
- (list 'mouse-face 'highlight
- 'rear-nonsticky t
- 'keymap org-mouse-map
- ))
+ (catch 'exit
+ (let (f)
+ (while (re-search-forward org-plain-link-re limit t)
+ (setq f (get-text-property (match-beginning 0) 'face))
+ (if (or (eq f 'org-tag)
+ (and (listp f) (memq 'org-tag f)))
+ nil
+ (add-text-properties (match-beginning 0) (match-end 0)
+ (list 'mouse-face 'highlight
+ 'rear-nonsticky org-nonsticky-props
+ 'keymap org-mouse-map
+ ))
+ (throw 'exit t))))))
+
+(defun org-activate-code (limit)
+ (if (re-search-forward "^[ \t]*\\(:.*\\)" limit t)
+ (unless (get-text-property (match-beginning 1) 'face)
+ (remove-text-properties (match-beginning 0) (match-end 0)
+ '(display t invisible t intangible t))
t)))
(defun org-activate-angle-links (limit)
@@ -3740,7 +4819,7 @@ The time stamps may be either active or inactive.")
(progn
(add-text-properties (match-beginning 0) (match-end 0)
(list 'mouse-face 'highlight
- 'rear-nonsticky t
+ 'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map
))
t)))
@@ -3766,10 +4845,10 @@ We use a macro so that the test can happen at compilation time."
;; but that requires another match, protecting match data,
;; a lot of overhead for font-lock.
(ip (org-maybe-intangible
- (list 'invisible 'org-link 'rear-nonsticky t
+ (list 'invisible 'org-link 'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map 'mouse-face 'highlight
'help-echo help)))
- (vp (list 'rear-nonsticky t
+ (vp (list 'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map 'mouse-face 'highlight
'help-echo help)))
;; We need to remove the invisible property here. Table narrowing
@@ -3792,7 +4871,7 @@ We use a macro so that the test can happen at compilation time."
(progn
(add-text-properties (match-beginning 0) (match-end 0)
(list 'mouse-face 'highlight
- 'rear-nonsticky t
+ 'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map))
(when org-display-custom-times
(if (match-end 3)
@@ -3805,7 +4884,9 @@ We use a macro so that the test can happen at compilation time."
(defvar org-target-regexp "<<\\([^<>\n\r]+\\)>>"
"Regular expression matching a link target.")
(defvar org-radio-target-regexp "<<<\\([^<>\n\r]+\\)>>>"
- "Regular expression matching a link target.")
+ "Regular expression matching a radio target.")
+(defvar org-any-target-regexp "<<<?\\([^<>\n\r]+\\)>>>?" ; FIXME, not exact, would match <<<aaa>> as a radio target.
+ "Regular expression matching any target.")
(defun org-activate-target-links (limit)
"Run through the buffer and add overlays to target matches."
@@ -3815,7 +4896,7 @@ We use a macro so that the test can happen at compilation time."
(progn
(add-text-properties (match-beginning 0) (match-end 0)
(list 'mouse-face 'highlight
- 'rear-nonsticky t
+ 'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map
'help-echo "Radio target link"
'org-linked-text t))
@@ -3873,53 +4954,72 @@ between words."
"\\)\\>")))
(defun org-activate-tags (limit)
- (if (re-search-forward "[ \t]\\(:[A-Za-z_@0-9:]+:\\)[ \r\n]" limit t)
+ (if (re-search-forward (org-re "^\\*+.*[ \t]\\(:[[:alnum:]_@:]+:\\)[ \r\n]") limit t)
(progn
(add-text-properties (match-beginning 1) (match-end 1)
(list 'mouse-face 'highlight
- 'rear-nonsticky t
+ 'rear-nonsticky org-nonsticky-props
'keymap org-mouse-map))
t)))
-(defun org-font-lock-level ()
- (save-excursion
- (org-back-to-heading t)
- (- (match-end 0) (match-beginning 0))))
-
(defun org-outline-level ()
(save-excursion
(looking-at outline-regexp)
(if (match-beginning 1)
(+ (org-get-string-indentation (match-string 1)) 1000)
- (- (match-end 0) (match-beginning 0)))))
+ (1- (- (match-end 0) (match-beginning 0))))))
(defvar org-font-lock-keywords nil)
+(defconst org-property-re (org-re "^[ \t]*\\(:\\([[:alnum:]_]+\\):\\)[ \t]*\\(\\S-.*\\)")
+ "Regular expression matching a property line.")
+
(defun org-set-font-lock-defaults ()
(let* ((em org-fontify-emphasized-text)
(lk org-activate-links)
(org-font-lock-extra-keywords
- ;; Headlines
(list
- '("^\\(\\**\\)\\(\\*\\)\\(.*\\)" (1 (org-get-level-face 1))
+ ;; Headlines
+ '("^\\(\\**\\)\\(\\* \\)\\(.*\\)" (1 (org-get-level-face 1))
(2 (org-get-level-face 2)) (3 (org-get-level-face 3)))
+ ;; Table lines
'("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)"
- (1 'org-table))
+ (1 'org-table t))
+ ;; Table internals
+ '("| *\\(:?=[^|\n]*\\)" (1 'org-formula t))
+ '("^[ \t]*| *\\([#*]\\) *|" (1 'org-formula t))
+ '("^[ \t]*|\\( *\\([$!_^/]\\) *|.*\\)|" (1 'org-formula t))
+ ;; Drawers
+ (list org-drawer-regexp '(0 'org-special-keyword t))
+ (list "^[ \t]*:END:" '(0 'org-special-keyword t))
+ ;; Properties
+ (list org-property-re
+ '(1 'org-special-keyword t)
+ '(3 'org-property-value t))
+ (if org-format-transports-properties-p
+ '("| *\\(<[0-9]+>\\) *" (1 'org-formula t)))
;; Links
+ (if (memq 'tag lk) '(org-activate-tags (1 'org-tag prepend)))
(if (memq 'angle lk) '(org-activate-angle-links (0 'org-link t)))
(if (memq 'plain lk) '(org-activate-plain-links (0 'org-link t)))
(if (memq 'bracket lk) '(org-activate-bracket-links (0 'org-link t)))
(if (memq 'radio lk) '(org-activate-target-links (0 'org-link t)))
(if (memq 'date lk) '(org-activate-dates (0 'org-date t)))
- (if (memq 'tag lk) '(org-activate-tags (1 'org-tag prepend)))
+ '("^&?%%(.*\\|<%%([^>\n]*?>" (0 'org-sexp-date t))
'(org-hide-wide-columns (0 nil append))
;; TODO lines
- (list (concat "^\\*+[ \t]*" org-not-done-regexp)
- '(1 'org-todo t))
+ (list (concat "^\\*+[ \t]+" org-todo-regexp)
+ '(1 (org-get-todo-face 1) t))
+ ;; DONE
+ (if org-fontify-done-headline
+ (list (concat "^[*]+ +\\<\\("
+ (mapconcat 'regexp-quote org-done-keywords "\\|")
+ "\\)\\(.*\\)")
+ '(2 'org-headline-done t))
+ nil)
;; Priorities
- (list (concat "\\[#[A-Z]\\]") '(0 'org-special-keyword t))
+ (list (concat "\\[#[A-Z0-9]\\]") '(0 'org-special-keyword t))
;; Special keywords
- (list org-repeat-re '(0 'org-special-keyword t))
(list (concat "\\<" org-deadline-string) '(0 'org-special-keyword t))
(list (concat "\\<" org-scheduled-string) '(0 'org-special-keyword t))
(list (concat "\\<" org-closed-string) '(0 'org-special-keyword t))
@@ -3929,30 +5029,20 @@ between words."
(if (featurep 'xemacs)
'(org-do-emphasis-faces (0 nil append))
'(org-do-emphasis-faces)))
- ;; Checkboxes, similar to Frank Ruell's org-checklet.el
- '("^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(\\[[ X]\\]\\)"
+ ;; Checkboxes
+ '("^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(\\[[- X]\\]\\)"
2 'bold prepend)
(if org-provide-checkbox-statistics
'("\\[\\([0-9]*%\\)\\]\\|\\[\\([0-9]*\\)/\\([0-9]*\\)\\]"
(0 (org-get-checkbox-statistics-face) t)))
;; COMMENT
- (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string
+ (list (concat "^\\*+[ \t]+\\<\\(" org-comment-string
"\\|" org-quote-string "\\)\\>")
'(1 'org-special-keyword t))
'("^#.*" (0 'font-lock-comment-face t))
- ;; DONE
- (if org-fontify-done-headline
- (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\(.*\\)\\>")
- '(1 'org-done t) '(2 'org-headline-done t))
- (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>")
- '(1 'org-done t)))
- ;; Table stuff
- '("^[ \t]*\\(:.*\\)" (1 'org-table t))
- '("| *\\(:?=[^|\n]*\\)" (1 'org-formula t))
- '("^[ \t]*| *\\([#!$*_^]\\) *|" (1 'org-formula t))
- (if org-format-transports-properties-p
- '("| *\\(<[0-9]+>\\) *" (1 'org-formula t)))
'("^\\*+ \\(.*:ARCHIVE:.*\\)" (1 'org-archived prepend))
+ ;; Code
+ '(org-activate-code (1 'org-code t))
)))
(setq org-font-lock-extra-keywords (delq nil org-font-lock-extra-keywords))
;; Now set the full font-lock-keywords
@@ -3966,15 +5056,22 @@ between words."
(defvar org-f nil)
(defun org-get-level-face (n)
"Get the right face for match N in font-lock matching of healdines."
- (setq org-l (- (match-end 2) (match-beginning 1)))
+ (setq org-l (- (match-end 2) (match-beginning 1) 1))
(if org-odd-levels-only (setq org-l (1+ (/ org-l 2))))
-; (setq org-f (nth (1- (% org-l org-n-levels)) org-level-faces))
- (setq org-f (nth (% (1- org-l) org-n-levels) org-level-faces))
+ (setq org-f (nth (% (1- org-l) org-n-level-faces) org-level-faces))
(cond
((eq n 1) (if org-hide-leading-stars 'org-hide org-f))
((eq n 2) org-f)
(t (if org-level-color-stars-only nil org-f))))
+(defun org-get-todo-face (kwd)
+ "Get the right face for a TODO keyword KWD.
+If KWD is a number, get the corresponding match group."
+ (if (numberp kwd) (setq kwd (match-string kwd)))
+ (or (cdr (assoc kwd org-todo-keyword-faces))
+ (and (member kwd org-done-keywords) 'org-done)
+ 'org-todo))
+
(defun org-unfontify-region (beg end &optional maybe_loudly)
"Remove fontification and activation overlays from links."
(font-lock-default-unfontify-region beg end)
@@ -3984,7 +5081,6 @@ between words."
deactivate-mark buffer-file-name buffer-file-truename)
(remove-text-properties beg end
'(mouse-face t keymap t org-linked-text t
- rear-nonsticky t
invisible t intangible t))))
;;;; Visibility cycling, including org-goto and indirect buffer
@@ -4022,12 +5118,13 @@ between words."
`indent-relative', like TAB normally does. See the option
`org-cycle-emulate-tab' for details.
-- Special case: if point is the beginning of the buffer and there is no
- headline in line 1, this function will act as if called with prefix arg."
+- Special case: if point is at the beginning of the buffer and there is
+ no headline in line 1, this function will act as if called with prefix arg.
+ But only if also the variable `org-cycle-global-at-bob' is t."
(interactive "P")
(let* ((outline-regexp
(if (and (org-mode-p) org-cycle-include-plain-lists)
- "\\(?:\\*+\\|\\([ \t]*\\)\\([-+*]\\|[0-9]+[.)]\\) \\)"
+ "\\(?:\\*+ \\|\\([ \t]*\\)\\([-+*]\\|[0-9]+[.)]\\) \\)"
outline-regexp))
(bob-special (and org-cycle-global-at-bob (bobp)
(not (looking-at outline-regexp))))
@@ -4080,6 +5177,14 @@ between words."
(setq org-cycle-global-status 'overview)
(run-hook-with-args 'org-cycle-hook 'overview))))
+ ((and org-drawers org-drawer-regexp
+ (save-excursion
+ (beginning-of-line 1)
+ (looking-at org-drawer-regexp)))
+ ;; Toggle block visibility
+ (org-flag-drawer
+ (not (get-char-property (match-end 0) 'invisible))))
+
((integerp arg)
;; Show-subtree, ARG levels up from here.
(save-excursion
@@ -4088,7 +5193,8 @@ between words."
(- (funcall outline-level) arg)))
(org-show-subtree)))
- ((save-excursion (beginning-of-line 1) (looking-at outline-regexp))
+ ((and (save-excursion (beginning-of-line 1) (looking-at outline-regexp))
+ (or (bolp) (not (eq org-cycle-emulate-tab 'exc-hl-bol))))
;; At a heading: rotate between three different views
(org-back-to-heading)
(let ((goal-column 0) eoh eol eos)
@@ -4102,20 +5208,31 @@ between words."
(beginning-of-line 2)) (setq eol (point)))
(outline-end-of-heading) (setq eoh (point))
(org-end-of-subtree t)
- (skip-chars-forward " \t\n")
- (beginning-of-line 1) ; in case this is an item
+ (unless (eobp)
+ (skip-chars-forward " \t\n")
+ (beginning-of-line 1) ; in case this is an item
+ )
(setq eos (1- (point))))
;; Find out what to do next and set `this-command'
(cond
((= eos eoh)
;; Nothing is hidden behind this heading
(message "EMPTY ENTRY")
- (setq org-cycle-subtree-status nil))
- ((>= eol eos)
+ (setq org-cycle-subtree-status nil)
+ (save-excursion
+ (goto-char eos)
+ (outline-next-heading)
+ (if (org-invisible-p) (org-flag-heading nil))))
+ ((or (>= eol eos)
+ (not (string-match "\\S-" (buffer-substring eol eos))))
;; Entire subtree is hidden in one line: open it
(org-show-entry)
(show-children)
(message "CHILDREN")
+ (save-excursion
+ (goto-char eos)
+ (outline-next-heading)
+ (if (org-invisible-p) (org-flag-heading nil)))
(setq org-cycle-subtree-status 'children)
(run-hook-with-args 'org-cycle-hook 'children))
((and (eq last-command this-command)
@@ -4137,6 +5254,11 @@ between words."
((org-try-cdlatex-tab))
+ ((and (eq org-cycle-emulate-tab 'exc-hl-bol)
+ (or (not (bolp))
+ (not (looking-at outline-regexp))))
+ (call-interactively (global-key-binding "\t")))
+
((if (and (memq org-cycle-emulate-tab '(white whitestart))
(save-excursion (beginning-of-line 1) (looking-at "[ \t]*"))
(or (and (eq org-cycle-emulate-tab 'white)
@@ -4151,7 +5273,7 @@ between words."
(progn
(beginning-of-line 1)
(and (looking-at "[ \t]+") (replace-match ""))))
- (indent-relative))
+ (call-interactively (global-key-binding "\t")))
(t (save-excursion
(org-back-to-heading)
@@ -4177,13 +5299,13 @@ of the first headline in the buffer. This is important, because if the
first headline is not level one, then (hide-sublevels 1) gives confusing
results."
(interactive)
- (hide-sublevels (save-excursion
- (goto-char (point-min))
- (if (re-search-forward (concat "^" outline-regexp) nil t)
- (progn
- (goto-char (match-beginning 0))
- (funcall outline-level))
- 1))))
+ (let ((level (save-excursion
+ (goto-char (point-min))
+ (if (re-search-forward (concat "^" outline-regexp) nil t)
+ (progn
+ (goto-char (match-beginning 0))
+ (funcall outline-level))))))
+ (and level (hide-sublevels level))))
(defun org-content (&optional arg)
"Show all headlines in the buffer, like a table of contents.
@@ -4210,13 +5332,53 @@ With numerical argument N, show content up to level N."
This function is the default value of the hook `org-cycle-hook'."
(when (get-buffer-window (current-buffer))
(cond
- ((eq state 'overview) (org-first-headline-recenter 1))
+; ((eq state 'overview) (org-first-headline-recenter 1))
+; ((eq state 'overview) (org-beginning-of-line))
((eq state 'content) nil)
((eq state 'all) nil)
((eq state 'folded) nil)
((eq state 'children) (or (org-subtree-end-visible-p) (recenter 1)))
((eq state 'subtree) (or (org-subtree-end-visible-p) (recenter 1))))))
+
+(defun org-cycle-show-empty-lines (state)
+ "Show empty lines above all visible headlines.
+The region to be covered depends on STATE when called through
+`org-cycle-hook'. Lisp program can use t for STATE to get the
+entire buffer covered. Note that an empty line is only shown if there
+are at least `org-cycle-separator-lines' empty lines before the headeline."
+ (when (> org-cycle-separator-lines 0)
+ (save-excursion
+ (let* ((n org-cycle-separator-lines)
+ (re (cond
+ ((= n 1) "\\(\n[ \t]*\n\\*+\\) ")
+ ((= n 2) "^[ \t]*\\(\n[ \t]*\n\\*+\\) ")
+ (t (let ((ns (number-to-string (- n 2))))
+ (concat "^\\(?:[ \t]*\n\\)\\{" ns "," ns "\\}"
+ "[ \t]*\\(\n[ \t]*\n\\*+\\) ")))))
+ beg end)
+ (cond
+ ((memq state '(overview contents t))
+ (setq beg (point-min) end (point-max)))
+ ((memq state '(children folded))
+ (setq beg (point) end (progn (org-end-of-subtree t t)
+ (beginning-of-line 2)
+ (point)))))
+ (when beg
+ (goto-char beg)
+ (while (re-search-forward re end t)
+ (if (not (get-char-property (match-end 1) 'invisible))
+ (outline-flag-region
+ (match-beginning 1) (match-end 1) nil)))))))
+ ;; Never hide empty lines at the end of the file.
+ (save-excursion
+ (goto-char (point-max))
+ (outline-previous-heading)
+ (outline-end-of-heading)
+ (if (and (looking-at "[ \t\n]+")
+ (= (match-end 0) (point-max)))
+ (outline-flag-region (point) (match-end 0) nil))))
+
(defun org-subtree-end-visible-p ()
"Is the end of the current subtree visible?"
(pos-visible-in-window-p
@@ -4234,82 +5396,92 @@ Optional argument N means, put the headline into the Nth line of the window."
(defvar org-goto-window-configuration nil)
(defvar org-goto-marker nil)
-(defvar org-goto-map (make-sparse-keymap))
-(let ((cmds '(isearch-forward isearch-backward)) cmd)
- (while (setq cmd (pop cmds))
- (substitute-key-definition cmd cmd org-goto-map global-map)))
-(define-key org-goto-map "\C-m" 'org-goto-ret)
-(define-key org-goto-map [(left)] 'org-goto-left)
-(define-key org-goto-map [(right)] 'org-goto-right)
-(define-key org-goto-map [(?q)] 'org-goto-quit)
-(define-key org-goto-map [(control ?g)] 'org-goto-quit)
-(define-key org-goto-map "\C-i" 'org-cycle)
-(define-key org-goto-map [(tab)] 'org-cycle)
-(define-key org-goto-map [(down)] 'outline-next-visible-heading)
-(define-key org-goto-map [(up)] 'outline-previous-visible-heading)
-(define-key org-goto-map "n" 'outline-next-visible-heading)
-(define-key org-goto-map "p" 'outline-previous-visible-heading)
-(define-key org-goto-map "f" 'outline-forward-same-level)
-(define-key org-goto-map "b" 'outline-backward-same-level)
-(define-key org-goto-map "u" 'outline-up-heading)
-(define-key org-goto-map "\C-c\C-n" 'outline-next-visible-heading)
-(define-key org-goto-map "\C-c\C-p" 'outline-previous-visible-heading)
-(define-key org-goto-map "\C-c\C-f" 'outline-forward-same-level)
-(define-key org-goto-map "\C-c\C-b" 'outline-backward-same-level)
-(define-key org-goto-map "\C-c\C-u" 'outline-up-heading)
-(let ((l '(1 2 3 4 5 6 7 8 9 0)))
- (while l (define-key org-goto-map (int-to-string (pop l)) 'digit-argument)))
+(defvar org-goto-map
+ (let ((map (make-sparse-keymap)))
+ (let ((cmds '(isearch-forward isearch-backward kill-ring-save set-mark-command mouse-drag-region universal-argument org-occur)) cmd)
+ (while (setq cmd (pop cmds))
+ (substitute-key-definition cmd cmd map global-map)))
+ (suppress-keymap map)
+ (org-defkey map "\C-m" 'org-goto-ret)
+ (org-defkey map [(left)] 'org-goto-left)
+ (org-defkey map [(right)] 'org-goto-right)
+ (org-defkey map [(?q)] 'org-goto-quit)
+ (org-defkey map [(control ?g)] 'org-goto-quit)
+ (org-defkey map "\C-i" 'org-cycle)
+ (org-defkey map [(tab)] 'org-cycle)
+ (org-defkey map [(down)] 'outline-next-visible-heading)
+ (org-defkey map [(up)] 'outline-previous-visible-heading)
+ (org-defkey map "n" 'outline-next-visible-heading)
+ (org-defkey map "p" 'outline-previous-visible-heading)
+ (org-defkey map "f" 'outline-forward-same-level)
+ (org-defkey map "b" 'outline-backward-same-level)
+ (org-defkey map "u" 'outline-up-heading)
+ (org-defkey map "/" 'org-occur)
+ (org-defkey map "\C-c\C-n" 'outline-next-visible-heading)
+ (org-defkey map "\C-c\C-p" 'outline-previous-visible-heading)
+ (org-defkey map "\C-c\C-f" 'outline-forward-same-level)
+ (org-defkey map "\C-c\C-b" 'outline-backward-same-level)
+ (org-defkey map "\C-c\C-u" 'outline-up-heading)
+ map))
(defconst org-goto-help
-"Select a location to jump to, press RET
-\[Up]/[Down]=next/prev headline TAB=cycle visibility RET=select [Q]uit")
+"Browse copy of buffer to find location or copy text.
+RET=jump to location [Q]uit and return to previous location
+\[Up]/[Down]=next/prev headline TAB=cycle visibility [/] org-occur"
+)
(defun org-goto ()
- "Go to a different location of the document, keeping current visibility.
+ "Look up a different location in the current file, keeping current visibility.
-When you want to go to a different location in a document, the fastest way
-is often to fold the entire buffer and then dive into the tree. This
-method has the disadvantage, that the previous location will be folded,
+When you want look-up or go to a different location in a document, the
+fastest way is often to fold the entire buffer and then dive into the tree.
+This method has the disadvantage, that the previous location will be folded,
which may not be what you want.
-This command works around this by showing a copy of the current buffer in
-overview mode. You can dive into the tree in that copy, to find the
-location you want to reach. When pressing RET, the command returns to the
-original buffer in which the visibility is still unchanged. It then jumps
-to the new location, making it and the headline hierarchy above it visible."
+This command works around this by showing a copy of the current buffer
+in an indirect buffer, in overview mode. You can dive into the tree in
+that copy, use org-occur and incremental search to find a location.
+When pressing RET or `Q', the command returns to the original buffer in
+which the visibility is still unchanged. After RET is will also jump to
+the location selected in the indirect buffer and expose the
+the headline hierarchy above."
(interactive)
(let* ((org-goto-start-pos (point))
(selected-point
- (org-get-location (current-buffer) org-goto-help)))
+ (car (org-get-location (current-buffer) org-goto-help))))
(if selected-point
(progn
(org-mark-ring-push org-goto-start-pos)
(goto-char selected-point)
(if (or (org-invisible-p) (org-invisible-p2))
(org-show-context 'org-goto)))
- (error "Quit"))))
+ (message "Quit"))))
-(defvar org-selected-point nil) ; dynamically scoped parameter
+(defvar org-goto-selected-point nil) ; dynamically scoped parameter
+(defvar org-goto-exit-command nil) ; dynamically scoped parameter
(defun org-get-location (buf help)
"Let the user select a location in the Org-mode buffer BUF.
This function uses a recursive edit. It returns the selected position
or nil."
- (let (org-selected-point)
+ (let (org-goto-selected-point org-goto-exit-command)
(save-excursion
(save-window-excursion
(delete-other-windows)
- (switch-to-buffer (get-buffer-create "*org-goto*"))
+ (and (get-buffer "*org-goto*") (kill-buffer "*org-goto*"))
+ (switch-to-buffer
+ (condition-case nil
+ (make-indirect-buffer (current-buffer) "*org-goto*")
+ (error (make-indirect-buffer (current-buffer) "*org-goto*"))))
(with-output-to-temp-buffer "*Help*"
(princ help))
(shrink-window-if-larger-than-buffer (get-buffer-window "*Help*"))
(setq buffer-read-only nil)
- (erase-buffer)
- (insert-buffer-substring buf)
(let ((org-startup-truncated t)
- (org-startup-folded t)
+ (org-startup-folded nil)
(org-startup-align-all-tables nil))
- (org-mode))
+ (org-mode)
+ (org-overview))
(setq buffer-read-only t)
(if (and (boundp 'org-goto-start-pos)
(integer-or-marker-p org-goto-start-pos))
@@ -4323,21 +5495,24 @@ or nil."
(message "Select location and press RET")
;; now we make sure that during selection, ony very few keys work
;; and that it is impossible to switch to another window.
- (let ((gm (current-global-map))
- (overriding-local-map org-goto-map))
- (unwind-protect
- (progn
- (use-global-map org-goto-map)
- (recursive-edit))
- (use-global-map gm)))))
+; (let ((gm (current-global-map))
+; (overriding-local-map org-goto-map))
+; (unwind-protect
+; (progn
+; (use-global-map org-goto-map)
+; (recursive-edit))
+; (use-global-map gm)))
+ (use-local-map org-goto-map)
+ (recursive-edit)
+ ))
(kill-buffer "*org-goto*")
- org-selected-point))
+ (cons org-goto-selected-point org-goto-exit-command)))
(defun org-goto-ret (&optional arg)
"Finish `org-goto' by going to the new location."
(interactive "P")
- (setq org-selected-point (point)
- current-prefix-arg arg)
+ (setq org-goto-selected-point (point)
+ org-goto-exit-command 'return)
(throw 'exit nil))
(defun org-goto-left ()
@@ -4346,8 +5521,8 @@ or nil."
(if (org-on-heading-p)
(progn
(beginning-of-line 1)
- (setq org-selected-point (point)
- current-prefix-arg (- (match-end 0) (match-beginning 0)))
+ (setq org-goto-selected-point (point)
+ org-goto-exit-command 'left)
(throw 'exit nil))
(error "Not on a heading")))
@@ -4356,17 +5531,16 @@ or nil."
(interactive)
(if (org-on-heading-p)
(progn
- (outline-end-of-subtree)
- (or (eobp) (forward-char 1))
- (setq org-selected-point (point)
- current-prefix-arg (- (match-end 0) (match-beginning 0)))
+ (setq org-goto-selected-point (point)
+ org-goto-exit-command 'right)
(throw 'exit nil))
(error "Not on a heading")))
(defun org-goto-quit ()
"Finish `org-goto' without cursor motion."
(interactive)
- (setq org-selected-point nil)
+ (setq org-goto-selected-point nil)
+ (setq org-goto-exit-command 'quit)
(throw 'exit nil))
;;; Indirect buffer display of subtrees
@@ -4474,10 +5648,13 @@ the current headline."
pos)
(cond
((and (org-on-heading-p) (bolp)
- (save-excursion (backward-char 1) (not (org-invisible-p))))
+ (or (bobp)
+ (save-excursion (backward-char 1) (not (org-invisible-p)))))
(open-line (if blank 2 1)))
- ((and (bolp) (save-excursion
- (backward-char 1) (not (org-invisible-p))))
+ ((and (bolp)
+ (or (bobp)
+ (save-excursion
+ (backward-char 1) (not (org-invisible-p)))))
nil)
(t (newline (if blank 2 1))))
(insert head) (just-one-space)
@@ -4486,6 +5663,13 @@ the current headline."
(unless (= (point) pos) (just-one-space) (backward-delete-char 1))
(run-hooks 'org-insert-heading-hook)))))
+(defun org-insert-heading-after-current ()
+ "Insert a new heading with same level as current, after current subtree."
+ (interactive)
+ (org-back-to-heading)
+ (org-insert-heading)
+ (org-move-subtree-down)
+ (end-of-line 1))
(defun org-insert-todo-heading (arg)
"Insert a new heading with the same level and TODO state as current heading.
@@ -4500,10 +5684,28 @@ state (TODO by default). Also with prefix arg, force first state."
(looking-at org-todo-line-regexp))
(if (or arg
(not (match-beginning 2))
- (equal (match-string 2) org-done-string))
- (insert (car org-todo-keywords) " ")
+ (member (match-string 2) org-done-keywords))
+ (insert (car org-todo-keywords-1) " ")
(insert (match-string 2) " "))))
+(defun org-insert-subheading (arg)
+ "Insert a new subheading and demote it.
+Works for outline headings and for plain lists alike."
+ (interactive "P")
+ (org-insert-heading arg)
+ (cond
+ ((org-on-heading-p) (org-do-demote))
+ ((org-at-item-p) (org-indent-item 1))))
+
+(defun org-insert-todo-subheading (arg)
+ "Insert a new subheading with TODO keyword or checkbox and demote it.
+Works for outline headings and for plain lists alike."
+ (interactive "P")
+ (org-insert-todo-heading arg)
+ (cond
+ ((org-on-heading-p) (org-do-demote))
+ ((org-at-item-p) (org-indent-item 1))))
+
;;; Promotion and Demotion
(defun org-promote-subtree ()
@@ -4556,6 +5758,9 @@ in the region."
((eolp) (insert " "))
((equal (char-after) ?\ ) (forward-char 1))))))
+(defun org-reduced-level (l)
+ (if org-odd-levels-only (1+ (floor (/ l 2))) l))
+
(defun org-get-legal-level (level &optional change)
"Rectify a level change under the influence of `org-odd-levels-only'
LEVEL is a current level, CHANGE is by how much the level should be
@@ -4573,8 +5778,8 @@ If the region is active in `transient-mark-mode', promote all headings
in the region."
(org-back-to-heading t)
(let* ((level (save-match-data (funcall outline-level)))
- (up-head (make-string (org-get-legal-level level -1) ?*))
- (diff (abs (- level (length up-head)))))
+ (up-head (concat (make-string (org-get-legal-level level -1) ?*) " "))
+ (diff (abs (- level (length up-head) -1))))
(if (= level 1) (error "Cannot promote to level 0. UNDO to recover if necessary"))
(replace-match up-head nil t)
;; Fixup tag positioning
@@ -4587,8 +5792,8 @@ If the region is active in `transient-mark-mode', demote all headings
in the region."
(org-back-to-heading t)
(let* ((level (save-match-data (funcall outline-level)))
- (down-head (make-string (org-get-legal-level level 1) ?*))
- (diff (abs (- level (length down-head)))))
+ (down-head (concat (make-string (org-get-legal-level level 1) ?*) " "))
+ (diff (abs (- level (length down-head) -1))))
(replace-match down-head nil t)
;; Fixup tag positioning
(and org-auto-align-tags (org-set-tags nil t))
@@ -4632,7 +5837,8 @@ would end up with no indentation after the change, nothing at all is done."
"^\\S-"
(concat "^ \\{0," (int-to-string (- diff)) "\\}\\S-")))
col)
- (unless (save-excursion (re-search-forward prohibit end t))
+ (unless (save-excursion (end-of-line 1)
+ (re-search-forward prohibit end t))
(while (re-search-forward "^[ \t]+" end t)
(goto-char (match-end 0))
(setq col (current-column))
@@ -4649,8 +5855,8 @@ level 5 etc."
(let ((org-odd-levels-only nil) n)
(save-excursion
(goto-char (point-min))
- (while (re-search-forward "^\\*\\*+" nil t)
- (setq n (1- (length (match-string 0))))
+ (while (re-search-forward "^\\*\\*+ " nil t)
+ (setq n (- (length (match-string 0)) 2))
(while (>= (setq n (1- n)) 0)
(org-demote))
(end-of-line 1))))))
@@ -4664,15 +5870,15 @@ is signaled in this case."
(interactive)
(goto-char (point-min))
;; First check if there are no even levels
- (when (re-search-forward "^\\(\\*\\*\\)+[^*]" nil t)
+ (when (re-search-forward "^\\(\\*\\*\\)+ " nil t)
(org-show-context t)
(error "Not all levels are odd in this file. Conversion not possible."))
(when (yes-or-no-p "Are you sure you want to globally change levels to odd-even? ")
(let ((org-odd-levels-only nil) n)
(save-excursion
(goto-char (point-min))
- (while (re-search-forward "^\\*\\*+" nil t)
- (setq n (/ (length (match-string 0)) 2))
+ (while (re-search-forward "^\\*\\*+ " nil t)
+ (setq n (/ (1- (length (match-string 0))) 2))
(while (>= (setq n (1- n)) 0)
(org-promote))
(end-of-line 1))))))
@@ -4724,6 +5930,7 @@ is signaled in this case."
(setq txt (buffer-substring beg end))
(delete-region beg end)
(insert txt)
+ (or (bolp) (insert "\n"))
(goto-char ins-point)
(if folded (hide-subtree))
(move-marker ins-point nil)))
@@ -4737,32 +5944,38 @@ ring. We need it to check if the kill was created by `org-copy-subtree'.")
"Was the last copied subtree folded?
This is used to fold the tree back after pasting.")
-(defun org-cut-subtree ()
+(defun org-cut-subtree (&optional n)
"Cut the current subtree into the clipboard.
+With prefix arg N, cut this many sequential subtrees.
This is a short-hand for marking the subtree and then cutting it."
- (interactive)
- (org-copy-subtree 'cut))
+ (interactive "p")
+ (org-copy-subtree n 'cut))
-(defun org-copy-subtree (&optional cut)
+(defun org-copy-subtree (&optional n cut)
"Cut the current subtree into the clipboard.
+With prefix arg N, cut this many sequential subtrees.
This is a short-hand for marking the subtree and then copying it.
If CUT is non-nil, actually cut the subtree."
- (interactive)
+ (interactive "p")
(let (beg end folded)
- (org-back-to-heading)
+ (if (interactive-p)
+ (org-back-to-heading nil) ; take what looks like a subtree
+ (org-back-to-heading t)) ; take what is really there
(setq beg (point))
(save-match-data
(save-excursion (outline-end-of-heading)
(setq folded (org-invisible-p)))
- (outline-end-of-subtree))
- (if (equal (char-after) ?\n) (forward-char 1))
+ (condition-case nil
+ (outline-forward-same-level (1- n))
+ (error nil))
+ (org-end-of-subtree t t))
(setq end (point))
(goto-char beg)
(when (> end beg)
(setq org-subtree-clip-folded folded)
(if cut (kill-region beg end) (copy-region-as-kill beg end))
(setq org-subtree-clip (current-kill 0))
- (message "%s: Subtree with %d characters"
+ (message "%s: Subtree(s) with %d characters"
(if cut "Cut" "Copied")
(length org-subtree-clip)))))
@@ -4791,30 +6004,31 @@ If optional TREE is given, use this text instead of the kill ring."
(let* ((txt (or tree (and kill-ring (current-kill 0))))
(^re (concat "^\\(" outline-regexp "\\)"))
(re (concat "\\(" outline-regexp "\\)"))
- (^re_ (concat "\\(" outline-regexp "\\)[ \t]*"))
+ (^re_ (concat "\\(\\*+\\)[ \t]*"))
(old-level (if (string-match ^re txt)
- (- (match-end 0) (match-beginning 0))
+ (- (match-end 0) (match-beginning 0) 1)
-1))
(force-level (cond (level (prefix-numeric-value level))
((string-match
^re_ (buffer-substring (point-at-bol) (point)))
- (- (match-end 0) (match-beginning 0)))
+ (- (match-end 1) (match-beginning 1)))
(t nil)))
(previous-level (save-excursion
(condition-case nil
(progn
(outline-previous-visible-heading 1)
(if (looking-at re)
- (- (match-end 0) (match-beginning 0))
+ (- (match-end 0) (match-beginning 0) 1)
1))
(error 1))))
(next-level (save-excursion
(condition-case nil
(progn
- (outline-next-visible-heading 1)
+ (or (looking-at outline-regexp)
+ (outline-next-visible-heading 1))
(if (looking-at re)
- (- (match-end 0) (match-beginning 0))
+ (- (match-end 0) (match-beginning 0) 1)
1))
(error 1))))
(new-level (or force-level (max previous-level next-level)))
@@ -4823,38 +6037,30 @@ If optional TREE is given, use this text instead of the kill ring."
(= old-level new-level))
0
(- new-level old-level)))
- (shift1 shift)
(delta (if (> shift 0) -1 1))
(func (if (> shift 0) 'org-demote 'org-promote))
(org-odd-levels-only nil)
beg end)
- ;; Remove the forces level indicator
+ ;; Remove the forced level indicator
(if force-level
(delete-region (point-at-bol) (point)))
- ;; Make sure we start at the beginning of an empty line
- (if (not (bolp)) (insert "\n"))
- (if (not (looking-at "[ \t]*$"))
- (progn (insert "\n") (backward-char 1)))
;; Paste
+ (beginning-of-line 1)
(setq beg (point))
- (if (string-match "[ \t\r\n]+\\'" txt)
- (setq txt (replace-match "\n" t t txt)))
(insert txt)
+ (unless (string-match "\n[ \t]*\\'" txt) (insert "\n"))
(setq end (point))
- (if (looking-at "[ \t\r\n]+")
- (replace-match "\n"))
(goto-char beg)
;; Shift if necessary
- (if (= shift 0)
- (message "Pasted at level %d, without shift" new-level)
+ (unless (= shift 0)
(save-restriction
(narrow-to-region beg end)
(while (not (= shift 0))
(org-map-region func (point-min) (point-max))
(setq shift (+ delta shift)))
- (goto-char (point-min))
- (message "Pasted at level %d, with shift by %d levels"
- new-level shift1)))
+ (goto-char (point-min))))
+ (when (interactive-p)
+ (message "Clipboard pasted as level %d subtree" new-level))
(if (and kill-ring
(eq org-subtree-clip (current-kill 0))
org-subtree-clip-folded)
@@ -4870,16 +6076,17 @@ which is OK for `org-paste-subtree'.
If optional TXT is given, check this string instead of the current kill."
(let* ((kill (or txt (and kill-ring (current-kill 0)) ""))
(start-level (and kill
- (string-match (concat "\\`" outline-regexp) kill)
- (- (match-end 0) (match-beginning 0))))
- (re (concat "^" outline-regexp))
+ (string-match (concat "\\`" org-outline-regexp) kill)
+ (- (match-end 0) (match-beginning 0) 1)))
+ (re (concat "^" org-outline-regexp))
(start 1))
(if (not start-level)
- nil ;; does not even start with a heading
+ (progn
+ nil) ;; does not even start with a heading
(catch 'exit
(while (setq start (string-match re kill (1+ start)))
- (if (< (- (match-end 0) (match-beginning 0)) start-level)
- (throw 'exit nil)))
+ (when (< (- (match-end 0) (match-beginning 0) 1) start-level)
+ (throw 'exit nil)))
t))))
(defun org-narrow-to-subtree ()
@@ -4888,19 +6095,22 @@ If optional TXT is given, check this string instead of the current kill."
(save-excursion
(narrow-to-region
(progn (org-back-to-heading) (point))
- (progn (org-end-of-subtree t) (point)))))
+ (progn (org-end-of-subtree t t) (point)))))
;;; Outline Sorting
(defun org-sort (with-case)
- "Call `org-sort-entries' or `org-table-sort-lines', depending on context."
+ "Call `org-sort-entries-or-items' or `org-table-sort-lines'.
+Optional argument WITH-CASE means sort case-sensitively."
(interactive "P")
(if (org-at-table-p)
(org-call-with-arg 'org-table-sort-lines with-case)
- (org-call-with-arg 'org-sort-entries with-case)))
+ (org-call-with-arg 'org-sort-entries-or-items with-case)))
-(defun org-sort-entries (&optional with-case sorting-type)
+(defvar org-priority-regexp) ; defined later in the file
+
+(defun org-sort-entries-or-items (&optional with-case sorting-type getkey-func property)
"Sort entries on a certain level of an outline tree.
If there is an active region, the entries in the region are sorted.
Else, if the cursor is before the first entry, sort the top-level items.
@@ -4909,26 +6119,35 @@ Else, the children of the entry at point are sorted.
Sorting can be alphabetically, numerically, and by date/time as given by
the first time stamp in the entry. The command prompts for the sorting
type unless it has been given to the function through the SORTING-TYPE
-argument, which needs to a character, any of (?n ?N ?a ?A ?t ?T).
+argument, which needs to a character, any of (?n ?N ?a ?A ?t ?T ?p ?P ?f ?F).
+If the SORTING-TYPE is ?f or ?F, then GETKEY-FUNC specifies a function to be
+called with point at the beginning of the record. It must return either
+a string or a number that should serve as the sorting key for that record.
Comparing entries ignores case by default. However, with an optional argument
-WITH-CASE, the sorting considers case as well. With two prefix arguments
-`C-u C-u', sorting is case-sensitive and duplicate entries will be removed."
+WITH-CASE, the sorting considers case as well."
(interactive "P")
- (let ((unique (equal with-case '(16)))
- start beg end entries stars re re2 p nentries (nremoved 0)
- last txt what)
+ (let ((case-func (if with-case 'identity 'downcase))
+ start beg end stars re re2
+ txt what tmp plain-list-p)
;; Find beginning and end of region to sort
(cond
((org-region-active-p)
;; we will sort the region
(setq end (region-end)
- what "region")
+ what "region")
(goto-char (region-beginning))
(if (not (org-on-heading-p)) (outline-next-heading))
(setq start (point)))
+ ((org-at-item-p)
+ ;; we will sort this plain list
+ (org-beginning-of-item-list) (setq start (point))
+ (org-end-of-item-list) (setq end (point))
+ (goto-char start)
+ (setq plain-list-p t
+ what "plain list"))
((or (org-on-heading-p)
- (condition-case nil (progn (org-back-to-heading) t) (error nil)))
+ (condition-case nil (progn (org-back-to-heading) t) (error nil)))
;; we will sort the children of the current headline
(org-back-to-heading)
(setq start (point) end (org-end-of-subtree) what "children")
@@ -4942,44 +6161,129 @@ WITH-CASE, the sorting considers case as well. With two prefix arguments
(setq start (point) end (point-max) what "top-level")
(goto-char start)
(show-all)))
+
(setq beg (point))
- (if (>= (point) end) (error "Nothing to sort"))
- (looking-at "\\(\\*+\\)")
- (setq stars (match-string 1)
- re (concat "^" (regexp-quote stars) " +")
- re2 (concat "^" (regexp-quote (substring stars 0 -1)) "[^*]")
- txt (buffer-substring beg end))
- (if (not (equal (substring txt -1) "\n")) (setq txt (concat txt "\n")))
- (if (and (not (equal stars "*")) (string-match re2 txt))
- (error "Region to sort contains a level above the first entry"))
- ;; Make a list that can be sorted.
- ;; The car is the string for comparison, the cdr is the subtree
- (message "Sorting entries...")
- (setq entries
- (mapcar
- (lambda (x)
- (string-match "^.*\\(\n.*\\)?" x) ; take two lines
- (cons (match-string 0 x) x))
- (org-split-string txt re)))
+ (if (>= beg end) (error "Nothing to sort"))
+
+ (unless plain-list-p
+ (looking-at "\\(\\*+\\)")
+ (setq stars (match-string 1)
+ re (concat "^" (regexp-quote stars) " +")
+ re2 (concat "^" (regexp-quote (substring stars 0 -1)) "[^*]")
+ txt (buffer-substring beg end))
+ (if (not (equal (substring txt -1) "\n")) (setq txt (concat txt "\n")))
+ (if (and (not (equal stars "*")) (string-match re2 txt))
+ (error "Region to sort contains a level above the first entry")))
+
+ (unless sorting-type
+ (message
+ (if plain-list-p
+ "Sort %s: [a]lpha [n]umeric [t]ime [f]unc A/N/T/F means reversed:"
+ "Sort %s: [a]lpha [n]umeric [t]ime [p]riority p[r]operty [f]unc A/N/T/P/F means reversed:")
+ what)
+ (setq sorting-type (read-char-exclusive))
+
+ (and (= (downcase sorting-type) ?f)
+ (setq getkey-func
+ (completing-read "Sort using function: "
+ obarray 'fboundp t nil nil))
+ (setq getkey-func (intern getkey-func)))
+
+ (and (= (downcase sorting-type) ?r)
+ (setq property
+ (completing-read "Property: "
+ (mapcar 'list (org-buffer-property-keys t))
+ nil t))))
- ;; Sort the list
- (save-excursion
- (goto-char start)
- (setq entries (org-do-sort entries what with-case sorting-type)))
+ (message "Sorting entries...")
- ;; Delete the old stuff
- (goto-char beg)
- (kill-region beg end)
- (setq nentries (length entries))
- ;; Insert the sorted entries, and remove duplicates if this is required
- (while (setq p (pop entries))
- (if (and unique (equal last (setq last (org-trim (cdr p)))))
- (setq nremoved (1+ nremoved)) ; same entry as before, skip it
- (insert stars " " (cdr p))))
- (goto-char start)
- (message "Sorting entries...done (%d entries%s)"
- nentries
- (if unique (format ", %d duplicates removed" nremoved) ""))))
+ (save-restriction
+ (narrow-to-region start end)
+
+ (let ((dcst (downcase sorting-type))
+ (now (current-time)))
+ (sort-subr
+ (/= dcst sorting-type)
+ ;; This function moves to the beginning character of the "record" to
+ ;; be sorted.
+ (if plain-list-p
+ (lambda nil
+ (if (org-at-item-p) t (goto-char (point-max))))
+ (lambda nil
+ (if (re-search-forward re nil t)
+ (goto-char (match-beginning 0))
+ (goto-char (point-max)))))
+ ;; This function moves to the last character of the "record" being
+ ;; sorted.
+ (if plain-list-p
+ 'org-end-of-item
+ (lambda nil
+ (save-match-data
+ (condition-case nil
+ (outline-forward-same-level 1)
+ (error
+ (goto-char (point-max)))))))
+
+ ;; This function returns the value that gets sorted against.
+ (if plain-list-p
+ (lambda nil
+ (when (looking-at "[ \t]*[-+*0-9.)]+[ \t]+")
+ (cond
+ ((= dcst ?n)
+ (string-to-number (buffer-substring (match-end 0)
+ (line-end-position))))
+ ((= dcst ?a)
+ (buffer-substring (match-end 0) (line-end-position)))
+ ((= dcst ?t)
+ (if (re-search-forward org-ts-regexp
+ (line-end-position) t)
+ (org-time-string-to-time (match-string 0))
+ now))
+ ((= dcst ?f)
+ (if getkey-func
+ (progn
+ (setq tmp (funcall getkey-func))
+ (if (stringp tmp) (setq tmp (funcall case-func tmp)))
+ tmp)
+ (error "Invalid key function `%s'" getkey-func)))
+ (t (error "Invalid sorting type `%c'" sorting-type)))))
+ (lambda nil
+ (cond
+ ((= dcst ?n)
+ (if (looking-at outline-regexp)
+ (string-to-number (buffer-substring (match-end 0)
+ (line-end-position)))
+ nil))
+ ((= dcst ?a)
+ (funcall case-func (buffer-substring (line-beginning-position)
+ (line-end-position))))
+ ((= dcst ?t)
+ (if (re-search-forward org-ts-regexp
+ (save-excursion
+ (forward-line 2)
+ (point)) t)
+ (org-time-string-to-time (match-string 0))
+ now))
+ ((= dcst ?p)
+ (if (re-search-forward org-priority-regexp (line-end-position) t)
+ (string-to-char (match-string 2))
+ org-default-priority))
+ ((= dcst ?r)
+ (or (org-entry-get nil property) ""))
+ ((= dcst ?f)
+ (if getkey-func
+ (progn
+ (setq tmp (funcall getkey-func))
+ (if (stringp tmp) (setq tmp (funcall case-func tmp)))
+ tmp)
+ (error "Invalid key function `%s'" getkey-func)))
+ (t (error "Invalid sorting type `%c'" sorting-type)))))
+ nil
+ (cond
+ ((= dcst ?a) 'string<)
+ ((= dcst ?t) 'time-less-p)
+ (t nil)))))
+ (message "Sorting entries...done")))
(defun org-do-sort (table what &optional with-case sorting-type)
"Sort TABLE of WHAT according to SORTING-TYPE.
@@ -4990,7 +6294,7 @@ the car of the elements of the table.
If WITH-CASE is non-nil, the sorting will be case-sensitive."
(unless sorting-type
(message
- "Sort %s: [a]lphabetically [n]umerically [t]ime. A/N/T means reversed:"
+ "Sort %s: [a]lphabetic. [n]umeric. [t]ime. A/N/T means reversed:"
what)
(setq sorting-type (read-char-exclusive)))
(let ((dcst (downcase sorting-type))
@@ -5036,7 +6340,6 @@ If WITH-CASE is non-nil, the sorting will be case-sensitive."
((= llt ?\)) "\\([ \t]*\\([-+]\\|\\([0-9]+)\\)\\)\\|[ \t]+\\*\\)\\( \\|$\\)")
(t (error "Invalid value of `org-plain-list-ordered-item-terminator'")))))))
-
(defun org-in-item-p ()
"It the cursor inside a plain list item.
Does not have to be the first line."
@@ -5089,7 +6392,7 @@ Return t when things worked, nil when we are not in an item."
(save-excursion
(goto-char (match-end 0))
(skip-chars-forward " \t")
- (looking-at "\\[[ X]\\]"))))
+ (looking-at "\\[[- X]\\]"))))
(defun org-toggle-checkbox (&optional arg)
"Toggle the checkbox in the current line."
@@ -5103,7 +6406,11 @@ Return t when things worked, nil when we are not in an item."
(setq beg (point) end (save-excursion (outline-next-heading) (point))))
((org-at-item-checkbox-p)
(save-excursion
- (replace-match (if (equal (match-string 0) "[ ]") "[X]" "[ ]") t t))
+ (replace-match
+ (cond (arg "[-]")
+ ((member (match-string 0) '("[ ]" "[-]")) "[X]")
+ (t "[ ]"))
+ t t))
(throw 'exit t))
(t (error "Not at a checkbox or heading, and no active region")))
(save-excursion
@@ -5130,12 +6437,14 @@ with the current numbers. With optional prefix argument ALL, do this for
the whole buffer."
(interactive "P")
(save-excursion
- (let* ((buffer-invisibility-spec nil) ; Emacs 21 compatibility
- (beg (progn (outline-back-to-heading) (point)))
+ (let* ((buffer-invisibility-spec (org-inhibit-invisibility)) ; Emacs 21
+ (beg (condition-case nil
+ (progn (outline-back-to-heading) (point))
+ (error (point-min))))
(end (move-marker (make-marker)
(progn (outline-next-heading) (point))))
(re "\\(\\[[0-9]*%\\]\\)\\|\\(\\[[0-9]*/[0-9]*\\]\\)")
- (re-box "^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(\\[[ X]\\]\\)")
+ (re-box "^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(\\[[- X]\\]\\)")
b1 e1 f1 c-on c-off lim (cstat 0))
(when all
(goto-char (point-min))
@@ -5155,14 +6464,16 @@ the whole buffer."
(goto-char e1)
(when lim
(while (re-search-forward re-box lim t)
- (if (equal (match-string 2) "[ ]")
+ (if (member (match-string 2) '("[ ]" "[-]"))
(setq c-off (1+ c-off))
(setq c-on (1+ c-on))))
- (delete-region b1 e1)
+; (delete-region b1 e1)
(goto-char b1)
(insert (if f1
(format "[%d%%]" (/ (* 100 c-on) (max 1 (+ c-on c-off))))
- (format "[%d/%d]" c-on (+ c-on c-off))))))
+ (format "[%d/%d]" c-on (+ c-on c-off))))
+ (and (looking-at "\\[.*?\\]")
+ (replace-match ""))))
(when (interactive-p)
(message "Checkbox satistics updated %s (%d places)"
(if all "in entire file" "in current outline entry") cstat)))))
@@ -5214,13 +6525,24 @@ leave it alone. If it is larger than ind, set it to the target."
(concat (make-string i1 ?\ ) l)
l)))
+(defcustom org-empty-line-terminates-plain-lists nil
+ "Non-nil means, an empty line ends all plain list levels.
+When nil, empty lines are part of the preceeding item."
+ :group 'org-plain-lists
+ :type 'boolean)
+
(defun org-beginning-of-item ()
"Go to the beginning of the current hand-formatted item.
If the cursor is not in an item, throw an error."
(interactive)
(let ((pos (point))
- (limit (save-excursion (org-back-to-heading)
- (beginning-of-line 2) (point)))
+ (limit (save-excursion
+ (condition-case nil
+ (progn
+ (org-back-to-heading)
+ (beginning-of-line 2) (point))
+ (error (point-min)))))
+ (ind-empty (if org-empty-line-terminates-plain-lists 0 10000))
ind ind1)
(if (org-at-item-p)
(beginning-of-line 1)
@@ -5230,12 +6552,14 @@ If the cursor is not in an item, throw an error."
(if (catch 'exit
(while t
(beginning-of-line 0)
- (if (< (point) limit) (throw 'exit nil))
- (unless (looking-at "[ \t]*$")
+ (if (or (bobp) (< (point) limit)) (throw 'exit nil))
+
+ (if (looking-at "[ \t]*$")
+ (setq ind1 ind-empty)
(skip-chars-forward " \t")
- (setq ind1 (current-column))
- (if (< ind1 ind)
- (throw 'exit (org-at-item-p))))))
+ (setq ind1 (current-column)))
+ (if (< ind1 ind)
+ (progn (beginning-of-line 1) (throw 'exit (org-at-item-p))))))
nil
(goto-char pos)
(error "Not in an item")))))
@@ -5244,22 +6568,27 @@ If the cursor is not in an item, throw an error."
"Go to the end of the current hand-formatted item.
If the cursor is not in an item, throw an error."
(interactive)
- (let ((pos (point))
- (limit (save-excursion (outline-next-heading) (point)))
- (ind (save-excursion
- (org-beginning-of-item)
- (skip-chars-forward " \t")
- (current-column)))
- ind1)
- (if (catch 'exit
- (while t
- (beginning-of-line 2)
- (if (>= (point) limit) (throw 'exit t))
- (unless (looking-at "[ \t]*$")
- (skip-chars-forward " \t")
- (setq ind1 (current-column))
- (if (<= ind1 ind) (throw 'exit t)))))
- (beginning-of-line 1)
+ (let* ((pos (point))
+ ind1
+ (ind-empty (if org-empty-line-terminates-plain-lists 0 10000))
+ (limit (save-excursion (outline-next-heading) (point)))
+ (ind (save-excursion
+ (org-beginning-of-item)
+ (skip-chars-forward " \t")
+ (current-column)))
+ (end (catch 'exit
+ (while t
+ (beginning-of-line 2)
+ (if (eobp) (throw 'exit (point)))
+ (if (>= (point) limit) (throw 'exit (point-at-bol)))
+ (if (looking-at "[ \t]*$")
+ (setq ind1 ind-empty)
+ (skip-chars-forward " \t")
+ (setq ind1 (current-column)))
+ (if (<= ind1 ind)
+ (throw 'exit (point-at-bol)))))))
+ (if end
+ (goto-char end)
(goto-char pos)
(error "Not in an item"))))
@@ -5278,9 +6607,9 @@ Error if not at a plain list, or if this is the last item in the list."
(defun org-previous-item ()
"Move to the beginning of the previous item in the current plain list.
-Error if not at a plain list, or if this is the last item in the list."
+Error if not at a plain list, or if this is the first item in the list."
(interactive)
- (let (beg ind (pos (point)))
+ (let (beg ind ind1 (pos (point)))
(org-beginning-of-item)
(setq beg (point))
(setq ind (org-get-indentation))
@@ -5290,10 +6619,13 @@ Error if not at a plain list, or if this is the last item in the list."
(beginning-of-line 0)
(if (looking-at "[ \t]*$")
nil
- (if (<= (org-get-indentation) ind)
+ (if (<= (setq ind1 (org-get-indentation)) ind)
(throw 'exit t)))))
(condition-case nil
- (org-beginning-of-item)
+ (if (or (not (org-at-item-p))
+ (< ind1 (1- ind)))
+ (error "")
+ (org-beginning-of-item))
(error (goto-char pos)
(error "On first item")))))
@@ -5338,7 +6670,11 @@ so this really moves item trees."
(while t
(beginning-of-line 0)
(if (looking-at "[ \t]*$")
- nil
+ (if org-empty-line-terminates-plain-lists
+ (progn
+ (goto-char pos)
+ (error "Cannot move this item further up"))
+ nil)
(if (<= (setq ind1 (org-get-indentation)) ind)
(throw 'exit t)))))
(condition-case nil
@@ -5362,10 +6698,48 @@ so this really moves item trees."
"Renumber the ordered list at point if setup allows it.
This tests the user option `org-auto-renumber-ordered-lists' before
doing the renumbering."
- (and org-auto-renumber-ordered-lists
- (org-at-item-p)
- (match-beginning 3)
- (org-renumber-ordered-list 1)))
+ (interactive)
+ (when (and org-auto-renumber-ordered-lists
+ (org-at-item-p))
+ (if (match-beginning 3)
+ (org-renumber-ordered-list 1)
+ (org-fix-bullet-type))))
+
+(defun org-maybe-renumber-ordered-list-safe ()
+ (condition-case nil
+ (save-excursion
+ (org-maybe-renumber-ordered-list))
+ (error nil)))
+
+(defun org-cycle-list-bullet (&optional which)
+ "Cycle through the different itemize/enumerate bullets.
+This cycle the entire list level through the sequence:
+
+ `-' -> `+' -> `*' -> `1.' -> `1)'
+
+If WHICH is a string, use that as the new bullet. If WHICH is an integer,
+0 meand `-', 1 means `+' etc."
+ (interactive "P")
+ (org-preserve-lc
+ (org-beginning-of-item-list)
+ (org-at-item-p)
+ (beginning-of-line 1)
+ (let ((current (match-string 0))
+ (prevp (eq which 'previous))
+ new)
+ (setq new (cond
+ ((and (numberp which)
+ (nth (1- which) '("-" "+" "*" "1." "1)"))))
+ ((string-match "-" current) (if prevp "1)" "+"))
+ ((string-match "\\+" current)
+ (if prevp "-" (if (looking-at "\\S-") "1." "*")))
+ ((string-match "\\*" current) (if prevp "+" "1."))
+ ((string-match "\\." current) (if prevp "*" "1)"))
+ ((string-match ")" current) (if prevp "1." "-"))
+ (t (error "This should not happen"))))
+ (and (looking-at "\\([ \t]*\\)\\S-+") (replace-match (concat "\\1" new)))
+ (org-fix-bullet-type)
+ (org-maybe-renumber-ordered-list))))
(defun org-get-string-indentation (s)
"What indentation has S due to SPACE and TAB at the beginning of the string?"
@@ -5391,19 +6765,46 @@ with something like \"1.\" or \"2)\"."
(ind (org-get-string-indentation
(buffer-substring (point-at-bol) (match-beginning 3))))
;; (term (substring (match-string 3) -1))
- ind1 (n (1- arg)))
+ ind1 (n (1- arg))
+ fmt)
;; find where this list begins
+ (org-beginning-of-item-list)
+ (looking-at "[ \t]*[0-9]+\\([.)]\\)")
+ (setq fmt (concat "%d" (match-string 1)))
+ (beginning-of-line 0)
+ ;; walk forward and replace these numbers
(catch 'exit
(while t
(catch 'next
- (beginning-of-line 0)
- (if (looking-at "[ \t]*$") (throw 'next t))
+ (beginning-of-line 2)
+ (if (eobp) (throw 'exit nil))
+ (if (looking-at "[ \t]*$") (throw 'next nil))
(skip-chars-forward " \t") (setq ind1 (current-column))
- (if (or (< ind1 ind)
- (and (= ind1 ind)
- (not (org-at-item-p))))
- (throw 'exit t)))))
- ;; Walk forward and replace these numbers
+ (if (> ind1 ind) (throw 'next t))
+ (if (< ind1 ind) (throw 'exit t))
+ (if (not (org-at-item-p)) (throw 'exit nil))
+ (delete-region (match-beginning 2) (match-end 2))
+ (goto-char (match-beginning 2))
+ (insert (format fmt (setq n (1+ n)))))))
+ (goto-line line)
+ (move-to-column col)))
+
+(defun org-fix-bullet-type ()
+ "Make sure all items in this list have the same bullet as the firsst item."
+ (interactive)
+ (unless (org-at-item-p) (error "This is not a list"))
+ (let ((line (org-current-line))
+ (col (current-column))
+ (ind (current-indentation))
+ ind1 bullet)
+ ;; find where this list begins
+ (org-beginning-of-item-list)
+ (beginning-of-line 1)
+ ;; find out what the bullet type is
+ (looking-at "[ \t]*\\(\\S-+\\)")
+ (setq bullet (match-string 1))
+ ;; walk forward and replace these numbers
+ (beginning-of-line 0)
(catch 'exit
(while t
(catch 'next
@@ -5414,13 +6815,64 @@ with something like \"1.\" or \"2)\"."
(if (> ind1 ind) (throw 'next t))
(if (< ind1 ind) (throw 'exit t))
(if (not (org-at-item-p)) (throw 'exit nil))
- (if (not (match-beginning 3))
- (error "unordered bullet in ordered list. Press \\[undo] to recover"))
- (delete-region (match-beginning 3) (1- (match-end 3)))
- (goto-char (match-beginning 3))
- (insert (format "%d" (setq n (1+ n)))))))
+ (skip-chars-forward " \t")
+ (looking-at "\\S-+")
+ (replace-match bullet))))
(goto-line line)
- (move-to-column col)))
+ (move-to-column col)
+ (if (string-match "[0-9]" bullet)
+ (org-renumber-ordered-list 1))))
+
+(defun org-beginning-of-item-list ()
+ "Go to the beginning of the current item list.
+I.e. to the first item in this list."
+ (interactive)
+ (org-beginning-of-item)
+ (let ((pos (point-at-bol))
+ (ind (org-get-indentation))
+ ind1)
+ ;; find where this list begins
+ (catch 'exit
+ (while t
+ (catch 'next
+ (beginning-of-line 0)
+ (if (looking-at "[ \t]*$")
+ (throw (if (bobp) 'exit 'next) t))
+ (skip-chars-forward " \t") (setq ind1 (current-column))
+ (if (or (< ind1 ind)
+ (and (= ind1 ind)
+ (not (org-at-item-p)))
+ (bobp))
+ (throw 'exit t)
+ (when (org-at-item-p) (setq pos (point-at-bol)))))))
+ (goto-char pos)))
+
+
+(defun org-end-of-item-list ()
+ "Go to the end of the current item list.
+I.e. to the text after the last item."
+ (interactive)
+ (org-beginning-of-item)
+ (let ((pos (point-at-bol))
+ (ind (org-get-indentation))
+ ind1)
+ ;; find where this list begins
+ (catch 'exit
+ (while t
+ (catch 'next
+ (beginning-of-line 2)
+ (if (looking-at "[ \t]*$")
+ (throw (if (eobp) 'exit 'next) t))
+ (skip-chars-forward " \t") (setq ind1 (current-column))
+ (if (or (< ind1 ind)
+ (and (= ind1 ind)
+ (not (org-at-item-p)))
+ (eobp))
+ (progn
+ (setq pos (point-at-bol))
+ (throw 'exit t))))))
+ (goto-char pos)))
+
(defvar org-last-indent-begin-marker (make-marker))
(defvar org-last-indent-end-marker (make-marker))
@@ -5436,7 +6888,7 @@ with something like \"1.\" or \"2)\"."
(unless (org-at-item-p)
(error "Not on an item"))
(save-excursion
- (let (beg end ind ind1)
+ (let (beg end ind ind1 tmp delta ind-down ind-up)
(if (memq last-command '(org-shiftmetaright org-shiftmetaleft))
(setq beg org-last-indent-begin-marker
end org-last-indent-end-marker)
@@ -5445,14 +6897,252 @@ with something like \"1.\" or \"2)\"."
(org-end-of-item)
(setq end (move-marker org-last-indent-end-marker (point))))
(goto-char beg)
- (skip-chars-forward " \t") (setq ind (current-column))
- (if (< (+ arg ind) 0) (error "Cannot outdent beyond margin"))
+ (setq tmp (org-item-indent-positions)
+ ind (car tmp)
+ ind-down (nth 2 tmp)
+ ind-up (nth 1 tmp)
+ delta (if (> arg 0)
+ (if ind-down (- ind-down ind) 2)
+ (if ind-up (- ind-up ind) -2)))
+ (if (< (+ delta ind) 0) (error "Cannot outdent beyond margin"))
(while (< (point) end)
(beginning-of-line 1)
(skip-chars-forward " \t") (setq ind1 (current-column))
(delete-region (point-at-bol) (point))
- (indent-to-column (+ ind1 arg))
- (beginning-of-line 2)))))
+ (or (eolp) (indent-to-column (+ ind1 delta)))
+ (beginning-of-line 2))))
+ (org-fix-bullet-type)
+ (org-maybe-renumber-ordered-list-safe)
+ (save-excursion
+ (beginning-of-line 0)
+ (condition-case nil (org-beginning-of-item) (error nil))
+ (org-maybe-renumber-ordered-list-safe)))
+
+(defun org-item-indent-positions ()
+ "Return indentation for plain list items.
+This returns a list with three values: The current indentation, the
+parent indentation and the indentation a child should habe.
+Assumes cursor in item line."
+ (let* ((bolpos (point-at-bol))
+ (ind (org-get-indentation))
+ ind-down ind-up pos)
+ (save-excursion
+ (org-beginning-of-item-list)
+ (skip-chars-backward "\n\r \t")
+ (when (org-in-item-p)
+ (org-beginning-of-item)
+ (setq ind-up (org-get-indentation))))
+ (setq pos (point))
+ (save-excursion
+ (cond
+ ((and (condition-case nil (progn (org-previous-item) t)
+ (error nil))
+ (or (forward-char 1) t)
+ (re-search-forward "^\\([ \t]*\\([-+]\\|\\([0-9]+[.)]\\)\\)\\|[ \t]+\\*\\)\\( \\|$\\)" bolpos t))
+ (setq ind-down (org-get-indentation)))
+ ((and (goto-char pos)
+ (org-at-item-p))
+ (goto-char (match-end 0))
+ (skip-chars-forward " \t")
+ (setq ind-down (current-column)))))
+ (list ind ind-up ind-down)))
+
+;;; The orgstruct minor mode
+
+;; Define a minor mode which can be used in other modes in order to
+;; integrate the org-mode structure editing commands.
+
+;; This is really a hack, because the org-mode structure commands use
+;; keys which normally belong to the major mode. Here is how it
+;; works: The minor mode defines all the keys necessary to operate the
+;; structure commands, but wraps the commands into a function which
+;; tests if the cursor is currently at a headline or a plain list
+;; item. If that is the case, the structure command is used,
+;; temporarily setting many Org-mode variables like regular
+;; expressions for filling etc. However, when any of those keys is
+;; used at a different location, function uses `key-binding' to look
+;; up if the key has an associated command in another currently active
+;; keymap (minor modes, major mode, global), and executes that
+;; command. There might be problems if any of the keys is otherwise
+;; used as a prefix key.
+
+;; Another challenge is that the key binding for TAB can be tab or \C-i,
+;; likewise the binding for RET can be return or \C-m. Orgtbl-mode
+;; addresses this by checking explicitly for both bindings.
+
+(defvar orgstruct-mode-map (make-sparse-keymap)
+ "Keymap for the minor `orgstruct-mode'.")
+
+(defvar org-local-vars nil
+ "List of local variables, for use by `orgstruct-mode'")
+
+;;;###autoload
+(define-minor-mode orgstruct-mode
+ "Toggle the minor more `orgstruct-mode'.
+This mode is for using Org-mode structure commands in other modes.
+The following key behave as if Org-mode was active, if the cursor
+is on a headline, or on a plain list item (both in the definition
+of Org-mode).
+
+M-up Move entry/item up
+M-down Move entry/item down
+M-left Promote
+M-right Demote
+M-S-up Move entry/item up
+M-S-down Move entry/item down
+M-S-left Promote subtree
+M-S-right Demote subtree
+M-q Fill paragraph and items like in Org-mode
+C-c ^ Sort entries
+C-c - Cycle list bullet
+TAB Cycle item visibility
+M-RET Insert new heading/item
+S-M-RET Insert new TODO heading / Chekbox item
+C-c C-c Set tags / toggle checkbox"
+ nil " OrgStruct" nil
+ (and (orgstruct-setup) (defun orgstruct-setup () nil)))
+
+;;;###autoload
+(defun turn-on-orgstruct ()
+ "Unconditionally turn on `orgstruct-mode'."
+ (orgstruct-mode 1))
+
+;;;###autoload
+(defun turn-on-orgstruct++ ()
+ "Unconditionally turn on `orgstruct-mode', and force org-mode indentations.
+In addition to setting orgstruct-mode, this also exports all indentation and
+autofilling variables from org-mode into the buffer. Note that turning
+off orgstruct-mode will *not* remove these additonal settings."
+ (orgstruct-mode 1)
+ (let (var val)
+ (mapc
+ (lambda (x)
+ (when (string-match
+ "^\\(paragraph-\\|auto-fill\\|fill-paragraph\\|adaptive-fill\\|indent-\\)"
+ (symbol-name (car x)))
+ (setq var (car x) val (nth 1 x))
+ (org-set-local var (if (eq (car-safe val) 'quote) (nth 1 val) val))))
+ org-local-vars)))
+
+(defun orgstruct-error ()
+ "Error when there is no default binding for a structure key."
+ (interactive)
+ (error "This key is has no function outside structure elements"))
+
+(defun orgstruct-setup ()
+ "Setup orgstruct keymaps."
+ (let ((nfunc 0)
+ (bindings
+ (list
+ '([(meta up)] org-metaup)
+ '([(meta down)] org-metadown)
+ '([(meta left)] org-metaleft)
+ '([(meta right)] org-metaright)
+ '([(meta shift up)] org-shiftmetaup)
+ '([(meta shift down)] org-shiftmetadown)
+ '([(meta shift left)] org-shiftmetaleft)
+ '([(meta shift right)] org-shiftmetaright)
+ '([(shift up)] org-shiftup)
+ '([(shift down)] org-shiftdown)
+ '("\C-c\C-c" org-ctrl-c-ctrl-c)
+ '("\M-q" fill-paragraph)
+ '("\C-c^" org-sort)
+ '("\C-c-" org-cycle-list-bullet)))
+ elt key fun cmd)
+ (while (setq elt (pop bindings))
+ (setq nfunc (1+ nfunc))
+ (setq key (org-key (car elt))
+ fun (nth 1 elt)
+ cmd (orgstruct-make-binding fun nfunc key))
+ (org-defkey orgstruct-mode-map key cmd))
+
+ ;; Special treatment needed for TAB and RET
+ (org-defkey orgstruct-mode-map [(tab)]
+ (orgstruct-make-binding 'org-cycle 102 [(tab)] "\C-i"))
+ (org-defkey orgstruct-mode-map "\C-i"
+ (orgstruct-make-binding 'org-cycle 103 "\C-i" [(tab)]))
+
+ (org-defkey orgstruct-mode-map "\M-\C-m"
+ (orgstruct-make-binding 'org-insert-heading 105
+ "\M-\C-m" [(meta return)]))
+ (org-defkey orgstruct-mode-map [(meta return)]
+ (orgstruct-make-binding 'org-insert-heading 106
+ [(meta return)] "\M-\C-m"))
+
+ (org-defkey orgstruct-mode-map [(shift meta return)]
+ (orgstruct-make-binding 'org-insert-todo-heading 107
+ [(meta return)] "\M-\C-m"))
+
+ (unless org-local-vars
+ (setq org-local-vars (org-get-local-variables)))
+
+ t))
+
+(defun orgstruct-make-binding (fun n &rest keys)
+ "Create a function for binding in the structure minor mode.
+FUN is the command to call inside a table. N is used to create a unique
+command name. KEYS are keys that should be checked in for a command
+to execute outside of tables."
+ (eval
+ (list 'defun
+ (intern (concat "orgstruct-hijacker-command-" (int-to-string n)))
+ '(arg)
+ (concat "In Structure, run `" (symbol-name fun) "'.\n"
+ "Outside of structure, run the binding of `"
+ (mapconcat (lambda (x) (format "%s" x)) keys "' or `")
+ "'.")
+ '(interactive "p")
+ (list 'if
+ '(org-context-p 'headline 'item)
+ (list 'org-run-like-in-org-mode (list 'quote fun))
+ (list 'let '(orgstruct-mode)
+ (list 'call-interactively
+ (append '(or)
+ (mapcar (lambda (k)
+ (list 'key-binding k))
+ keys)
+ '('orgstruct-error))))))))
+
+(defun org-context-p (&rest contexts)
+ "Check if local context is and of CONTEXTS.
+Possible values in the list of contexts are `table', `headline', and `item'."
+ (let ((pos (point)))
+ (goto-char (point-at-bol))
+ (prog1 (or (and (memq 'table contexts)
+ (looking-at "[ \t]*|"))
+ (and (memq 'headline contexts)
+ (looking-at "\\*+"))
+ (and (memq 'item contexts)
+ (looking-at "[ \t]*\\([-+*] \\|[0-9]+[.)] \\)")))
+ (goto-char pos))))
+
+(defun org-get-local-variables ()
+ "Return a list of all local variables in an org-mode buffer."
+ (let (varlist)
+ (with-current-buffer (get-buffer-create "*Org tmp*")
+ (erase-buffer)
+ (org-mode)
+ (setq varlist (buffer-local-variables)))
+ (kill-buffer "*Org tmp*")
+ (delq nil
+ (mapcar
+ (lambda (x)
+ (setq x
+ (if (symbolp x)
+ (list x)
+ (list (car x) (list 'quote (cdr x)))))
+ (if (string-match
+ "^\\(org-\\|orgtbl-\\|outline-\\|comment-\\|paragraph-\\|auto-fill\\|fill-paragraph\\|adaptive-fill\\|indent-\\)"
+ (symbol-name (car x)))
+ x nil))
+ varlist))))
+
+;;;###autoload
+(defun org-run-like-in-org-mode (cmd)
+ (unless org-local-vars
+ (setq org-local-vars (org-get-local-variables)))
+ (eval (list 'let org-local-vars
+ (list 'call-interactively (list 'quote cmd)))))
;;;; Archiving
@@ -5468,46 +7158,71 @@ When called with prefix argument FIND-DONE, find whole trees without any
open TODO items and archive them (after getting confirmation from the user).
If the cursor is not at a headline when this comand is called, try all level
1 trees. If the cursor is on a headline, only try the direct children of
-this heading. "
+this heading."
(interactive "P")
(if find-done
(org-archive-all-done)
;; Save all relevant TODO keyword-relatex variables
(let ((tr-org-todo-line-regexp org-todo-line-regexp) ; keep despite compiler
- (tr-org-todo-keywords org-todo-keywords)
- (tr-org-todo-interpretation org-todo-interpretation)
- (tr-org-done-string org-done-string)
+ (tr-org-todo-keywords-1 org-todo-keywords-1)
+ (tr-org-todo-kwd-alist org-todo-kwd-alist)
+ (tr-org-done-keywords org-done-keywords)
(tr-org-todo-regexp org-todo-regexp)
(tr-org-todo-line-regexp org-todo-line-regexp)
(tr-org-odd-levels-only org-odd-levels-only)
(this-buffer (current-buffer))
(org-archive-location org-archive-location)
(re "^#\\+ARCHIVE:[ \t]+\\(\\S-.*\\S-\\)[ \t]*$")
- file heading buffer level newfile-p)
+ ;; start of variables that will be used for savind context
+ (file (abbreviate-file-name (buffer-file-name)))
+ (time (format-time-string
+ (substring (cdr org-time-stamp-formats) 1 -1)
+ (current-time)))
+ afile heading buffer level newfile-p
+ category todo priority
+ ;; start of variables that will be used for savind context
+ ltags itags prop)
;; Try to find a local archive location
(save-excursion
- (if (or (re-search-backward re nil t) (re-search-forward re nil t))
- (setq org-archive-location (match-string 1))))
+ (save-restriction
+ (widen)
+ (setq prop (org-entry-get nil "ARCHIVE" 'inherit))
+ (if (and prop (string-match "\\S-" prop))
+ (setq org-archive-location prop)
+ (if (or (re-search-backward re nil t)
+ (re-search-forward re nil t))
+ (setq org-archive-location (match-string 1))))))
(if (string-match "\\(.*\\)::\\(.*\\)" org-archive-location)
(progn
- (setq file (format (match-string 1 org-archive-location)
+ (setq afile (format (match-string 1 org-archive-location)
(file-name-nondirectory buffer-file-name))
heading (match-string 2 org-archive-location)))
(error "Invalid `org-archive-location'"))
- (if (> (length file) 0)
- (setq newfile-p (not (file-exists-p file))
- buffer (find-file-noselect file))
+ (if (> (length afile) 0)
+ (setq newfile-p (not (file-exists-p afile))
+ buffer (find-file-noselect afile))
(setq buffer (current-buffer)))
(unless buffer
- (error "Cannot access file \"%s\"" file))
+ (error "Cannot access file \"%s\"" afile))
(if (and (> (length heading) 0)
(string-match "^\\*+" heading))
(setq level (match-end 0))
(setq heading nil level 0))
(save-excursion
+ (org-back-to-heading t)
+ ;; Get context information that will be lost by moving the tree
+ (org-refresh-category-properties)
+ (setq category (org-get-category)
+ todo (and (looking-at org-todo-line-regexp)
+ (match-string 2))
+ priority (org-get-priority (if (match-end 3) (match-string 3) ""))
+ ltags (org-get-tags)
+ itags (org-delete-all ltags (org-get-tags-at)))
+ (setq ltags (mapconcat 'identity ltags " ")
+ itags (mapconcat 'identity itags " "))
;; We first only copy, in case something goes wrong
;; we need to protect this-command, to avoid kill-region sets it,
;; which would lead to duplication of subtrees
@@ -5516,7 +7231,8 @@ this heading. "
;; Enforce org-mode for the archive buffer
(if (not (org-mode-p))
;; Force the mode for future visits.
- (let ((org-insert-mode-line-in-empty-file t))
+ (let ((org-insert-mode-line-in-empty-file t)
+ (org-inhibit-startup t))
(call-interactively 'org-mode)))
(when newfile-p
(goto-char (point-max))
@@ -5524,21 +7240,21 @@ this heading. "
(buffer-file-name this-buffer))))
;; Force the TODO keywords of the original buffer
(let ((org-todo-line-regexp tr-org-todo-line-regexp)
- (org-todo-keywords tr-org-todo-keywords)
- (org-todo-interpretation tr-org-todo-interpretation)
- (org-done-string tr-org-done-string)
+ (org-todo-keywords-1 tr-org-todo-keywords-1)
+ (org-todo-kwd-alist tr-org-todo-kwd-alist)
+ (org-done-keywords tr-org-done-keywords)
(org-todo-regexp tr-org-todo-regexp)
(org-todo-line-regexp tr-org-todo-line-regexp)
(org-odd-levels-only
- (if (local-variable-p 'org-odd-levels-only)
+ (if (local-variable-p 'org-odd-levels-only (current-buffer))
org-odd-levels-only
tr-org-odd-levels-only)))
(goto-char (point-min))
(if heading
(progn
(if (re-search-forward
- (concat "\\(^\\|\r\\)"
- (regexp-quote heading) "[ \t]*\\(:[a-zA-Z0-9_@:]+:\\)?[ \t]*\\($\\|\r\\)")
+ (concat "^" (regexp-quote heading)
+ (org-re "[ \t]*\\(:[[:alnum:]_@:]+:\\)?[ \t]*\\($\\|\r\\)"))
nil t)
(goto-char (match-end 0))
;; Heading not found, just insert it at the end
@@ -5556,16 +7272,26 @@ this heading. "
(goto-char (point-max)) (insert "\n"))
;; Paste
(org-paste-subtree (org-get-legal-level level 1))
- ;; Mark the entry as done, i.e. set to last work in org-todo-keywords
- (if org-archive-mark-done
- (let (org-log-done)
- (org-todo (length org-todo-keywords))))
- ;; Move cursor to right after the TODO keyword
- (when org-archive-stamp-time
- (beginning-of-line 1)
- (looking-at org-todo-line-regexp)
- (goto-char (or (match-end 2) (match-beginning 3)))
- (org-insert-time-stamp (org-current-time) t t "(" ")"))
+
+ ;; Mark the entry as done
+ (when (and org-archive-mark-done
+ (looking-at org-todo-line-regexp)
+ (or (not (match-end 2))
+ (not (member (match-string 2) org-done-keywords))))
+ (let (org-log-done)
+ (org-todo
+ (car (or (member org-archive-mark-done org-done-keywords)
+ org-done-keywords)))))
+
+ ;; Add the context info
+ (when org-archive-save-context-info
+ (let ((l org-archive-save-context-info) e n v)
+ (while (setq e (pop l))
+ (when (and (setq v (symbol-value e))
+ (stringp v) (string-match "\\S-" v))
+ (setq n (concat "ARCHIVE_" (upcase (symbol-name e))))
+ (org-entry-put (point) n v)))))
+
;; Save the buffer, if it is not the same buffer.
(if (not (eq this-buffer buffer)) (save-buffer))))
;; Here we are back in the original buffer. Everything seems to have
@@ -5575,7 +7301,36 @@ this heading. "
(message "Subtree archived %s"
(if (eq this-buffer buffer)
(concat "under heading: " heading)
- (concat "in file: " (abbreviate-file-name file)))))))
+ (concat "in file: " (abbreviate-file-name afile)))))))
+
+(defun org-refresh-category-properties ()
+ "Refresh category text properties in teh buffer."
+ (let ((def-cat (cond
+ ((null org-category)
+ (if buffer-file-name
+ (file-name-sans-extension
+ (file-name-nondirectory buffer-file-name))
+ "???"))
+ ((symbolp org-category) (symbol-name org-category))
+ (t org-category)))
+ beg end cat pos optionp)
+ (org-unmodified
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (put-text-property (point) (point-max) 'org-category def-cat)
+ (while (re-search-forward
+ "^\\(#\\+CATEGORY:\\|[ \t]*:CATEGORY:\\)\\(.*\\)" nil t)
+ (setq pos (match-end 0)
+ optionp (equal (char-after (match-beginning 0)) ?#)
+ cat (org-trim (match-string 2)))
+ (if optionp
+ (setq beg (point-at-bol) end (point-max))
+ (org-back-to-heading t)
+ (setq beg (point) end (org-end-of-subtree t t)))
+ (put-text-property beg end 'org-category cat)
+ (goto-char pos)))))))
(defun org-archive-all-done (&optional tag)
"Archive sublevels of the current tree without open TODO items.
@@ -5620,6 +7375,29 @@ When TAG is non-nil, don't move trees, but mark them with the ARCHIVE tag."
(goto-char end)))))
(message "%d trees archived" cntarch)))
+(defun org-cycle-hide-drawers (state)
+ "Re-hide all drawers after a visibility state change."
+ (when (and (org-mode-p)
+ (not (memq state '(overview folded))))
+ (save-excursion
+ (let* ((globalp (memq state '(contents all)))
+ (beg (if globalp (point-min) (point)))
+ (end (if globalp (point-max) (org-end-of-subtree t))))
+ (goto-char beg)
+ (while (re-search-forward org-drawer-regexp end t)
+ (org-flag-drawer t))))))
+
+(defun org-flag-drawer (flag)
+ (save-excursion
+ (beginning-of-line 1)
+ (when (looking-at "^[ \t]*:[a-zA-Z][a-zA-Z0-9]*:")
+ (let ((b (match-end 0)))
+ (if (re-search-forward
+ "^[ \t]*:END:"
+ (save-excursion (outline-next-heading) (point)) t)
+ (outline-flag-region b (point-at-eol) flag)
+ (error ":END: line missing"))))))
+
(defun org-cycle-hide-archived-subtrees (state)
"Re-hide all archived subtrees after a visibility state change."
(when (and (not org-cycle-open-archived-trees)
@@ -5653,11 +7431,11 @@ When TAG is non-nil, don't move trees, but mark them with the ARCHIVE tag."
(defun org-toggle-tag (tag &optional onoff)
"Toggle the tag TAG for the current line.
If ONOFF is `on' or `off', don't toggle but set to this state."
- (unless (org-on-heading-p) (error "Not on headling"))
+ (unless (org-on-heading-p t) (error "Not on headling"))
(let (res current)
(save-excursion
(beginning-of-line)
- (if (re-search-forward "[ \t]:\\([a-zA-Z0-9_@:]+\\):[ \t]*$"
+ (if (re-search-forward (org-re "[ \t]:\\([[:alnum:]_@:]+\\):[ \t]*$")
(point-at-eol) t)
(progn
(setq current (match-string 1))
@@ -5675,9 +7453,12 @@ If ONOFF is `on' or `off', don't toggle but set to this state."
(setq res t)
(push tag current))))
(end-of-line 1)
- (when current
- (insert " :" (mapconcat 'identity (nreverse current) ":") ":"))
- (org-set-tags nil t))
+ (if current
+ (progn
+ (insert " :" (mapconcat 'identity (nreverse current) ":") ":")
+ (org-set-tags nil t))
+ (delete-horizontal-space))
+ (run-hooks 'org-after-tags-change-hook))
res))
(defun org-toggle-archive-tag (&optional arg)
@@ -5749,6 +7530,8 @@ outside the table.")
"Table row types, non-nil only for the duration of a comand.")
(defvar org-table-current-begin-line nil
"Table begin line, non-nil only for the duration of a comand.")
+(defvar org-table-current-begin-pos nil
+ "Table begin position, non-nil only for the duration of a comand.")
(defvar org-table-dlines nil
"Vector of data line line numbers in the current table.")
(defvar org-table-hlines nil
@@ -5760,11 +7543,17 @@ outside the table.")
"Regular expression for matching ranges in formulas.")
(defconst org-table-range-regexp2
- "@\\([-+]?I*[-+]?[0-9]*\\)?\\(\\$[-+]?[a-zA-Z0-9]+\\)?\\(\\.\\.@?\\([-+]?I*[-+]?[0-9]*\\)?\\(\\$[-+]?[a-zA-Z0-9]+\\)?\\)?\\|\\$[a-zA-Z0-9]+\\.\\.\\$[a-zA-Z0-9]+"
- "Regular expression to recognize ranges in formulas for highlighting.")
+ (concat
+ "\\(" "@[-0-9I$&]+" "\\|" "[a-zA-Z]\\{1,2\\}\\([0-9]+\\|&\\)" "\\|" "\\$[a-zA-Z0-9]+" "\\)"
+ "\\.\\."
+ "\\(" "@?[-0-9I$&]+" "\\|" "[a-zA-Z]\\{1,2\\}\\([0-9]+\\|&\\)" "\\|" "\\$[a-zA-Z0-9]+" "\\)")
+ "Match a range for reference display.")
-(defvar org-inhibit-highlight-removal nil)
+(defconst org-table-translate-regexp
+ (concat "\\(" "@[-0-9I$]+" "\\|" "[a-zA-Z]\\{1,2\\}\\([0-9]+\\|&\\)" "\\)")
+ "Match a reference that needs translation, for reference display.")
+(defvar org-inhibit-highlight-removal nil) ; dynamically scoped param
(defun org-table-create-with-table.el ()
"Use the table.el package to insert a new table.
@@ -5783,8 +7572,11 @@ and table.el tables."
(defun org-table-create-or-convert-from-region (arg)
"Convert region to table, or create an empty table.
-If there is an active region, convert it to a table. If there is no such
-region, create an empty table."
+If there is an active region, convert it to a table, using the function
+`org-table-convert-region'. See the documentation of that function
+to learn how the prefix argument is interpreted to determine the field
+separator.
+If there is no such region, create an empty table with `org-table-create'."
(interactive "P")
(if (org-region-active-p)
(org-table-convert-region (region-beginning) (region-end) arg)
@@ -5822,16 +7614,25 @@ SIZE is a string Columns x Rows like for example \"3x2\"."
(goto-char pos)))
(org-table-align)))
-(defun org-table-convert-region (beg0 end0 &optional nspace)
+(defun org-table-convert-region (beg0 end0 &optional separator)
"Convert region to a table.
The region goes from BEG0 to END0, but these borders will be moved
slightly, to make sure a beginning of line in the first line is included.
-When NSPACE is non-nil, it indicates the minimum number of spaces that
-separate columns (default: just one space)."
+
+SEPARATOR specifies the field separator in the lines. It can have the
+following values:
+
+'(4) Use the comma as a field separator
+'(16) Use a TAB as field separator
+integer When a number, use that many spaces as field separator
+nil When nil, the command tries to be smart and figure out the
+ separator in the following way:
+ - when each line contains a TAB, assume TAB-separated material
+ - when each line contains a comme, assume CSV material
+ - else, assume one or more SPACE charcters as separator."
(interactive "rP")
(let* ((beg (min beg0 end0))
(end (max beg0 end0))
- (tabsep t)
re)
(goto-char beg)
(beginning-of-line 1)
@@ -5839,17 +7640,20 @@ separate columns (default: just one space)."
(goto-char end)
(if (bolp) (backward-char 1) (end-of-line 1))
(setq end (move-marker (make-marker) (point)))
- ;; Lets see if this is tab-separated material. If every nonempty line
- ;; contains a tab, we will assume that it is tab-separated material
- (if nspace
- (setq tabsep nil)
+ ;; Get the right field separator
+ (unless separator
(goto-char beg)
- (and (re-search-forward "^[^\n\t]+$" end t) (setq tabsep nil)))
- (if nspace (setq tabsep nil))
- (if tabsep
- (setq re "^\\|\t")
- (setq re (format "^ *\\| *\t *\\| \\{%d,\\}"
- (max 1 (prefix-numeric-value nspace)))))
+ (setq separator
+ (cond
+ ((not (re-search-forward "^[^\n\t]+$" end t)) '(16))
+ ((not (re-search-forward "^[^\n,]+$" end t)) '(4))
+ (t 1))))
+ (setq re (cond
+ ((equal separator '(4)) "^\\|\"?[ \t]*,[ \t]*\"?")
+ ((equal separator '(16)) "^\\|\t")
+ ((integerp separator)
+ (format "^ *\\| *\t *\\| \\{%d,\\}" separator))
+ (t (error "This should not happen"))))
(goto-char beg)
(while (re-search-forward re end t)
(replace-match "| " t t))
@@ -6167,7 +7971,7 @@ Optional argument NEW may specify text to replace the current field content."
(setq n (concat new "|") org-table-may-need-update t)))
(or (equal n o)
(let (org-table-may-need-update)
- (replace-match n))))
+ (replace-match n t t))))
(setq org-table-may-need-update t))
(goto-char pos))))))
@@ -6249,9 +8053,13 @@ If the current field is not empty, it is copied down to the next row, and
the cursor is moved with it. Therefore, repeating this command causes the
column to be filled row-by-row.
If the variable `org-table-copy-increment' is non-nil and the field is an
-integer, it will be incremented while copying."
+integer or a timestamp, it will be incremented while copying. In the case of
+a timestamp, if the cursor is on the year, change the year. If it is on the
+month or the day, change that. Point will stay on the current date field
+in order to easily repeat the interval."
(interactive "p")
(let* ((colpos (org-table-current-column))
+ (col (current-column))
(field (org-table-get-field))
(non-empty (string-match "[^ \t]" field))
(beg (org-table-begin))
@@ -6279,8 +8087,12 @@ integer, it will be incremented while copying."
(string-match "^[0-9]+$" txt))
(setq txt (format "%d" (+ (string-to-number txt) 1))))
(insert txt)
- (org-table-maybe-recalculate-line)
- (org-table-align))
+ (move-to-column col)
+ (if (and org-table-copy-increment (org-at-timestamp-p t))
+ (org-timestamp-up 1)
+ (org-table-maybe-recalculate-line))
+ (org-table-align)
+ (move-to-column col))
(error "No non-empty field found"))))
(defun org-table-check-inside-data-field ()
@@ -6330,7 +8142,6 @@ is always the old value."
val)
(forward-char 1) ""))
-
(defun org-table-field-info (arg)
"Show info about the current field, and highlight any reference at point."
(interactive "P")
@@ -6344,21 +8155,26 @@ is always the old value."
(eql (org-table-get-stored-formulas))
(dline (org-table-current-dline))
(ref (format "@%d$%d" dline col))
+ (ref1 (org-table-convert-refs-to-an ref))
(fequation (or (assoc name eql) (assoc ref eql)))
- (cequation (assoc (int-to-string col) eql)))
+ (cequation (assoc (int-to-string col) eql))
+ (eqn (or fequation cequation)))
(goto-char pos)
(condition-case nil
- (org-show-reference 'local)
+ (org-table-show-reference 'local)
(error nil))
- (message "line @%d, col $%s%s, ref @%d$%d%s%s"
+ (message "line @%d, col $%s%s, ref @%d$%d or %s%s%s"
dline col
(if cname (concat " or $" cname) "")
- dline col
+ dline col ref1
(if name (concat " or $" name) "")
;; FIXME: formula info not correct if special table line
- (if (or fequation cequation)
- (concat ", " (if fequation "field" "column")
- " formula applies" "")
+ (if eqn
+ (concat ", formula: "
+ (org-table-formula-to-user
+ (concat
+ (if (string-match "^[$@]"(car eqn)) "" "$")
+ (car eqn) "=" (cdr eqn))))
"")))))
(defun org-table-current-column ()
@@ -6635,9 +8451,9 @@ With prefix ARG, insert below the current line."
(org-table-align))
(org-table-fix-formulas "@" nil (1- (org-table-current-dline)) 1)))
-(defun org-table-insert-hline (&optional arg)
+(defun org-table-insert-hline (&optional above)
"Insert a horizontal-line below the current line into the table.
-With prefix ARG, insert above the current line."
+With prefix ABOVE, insert above the current line."
(interactive "P")
(if (not (org-at-table-p))
(error "Not at a table"))
@@ -6649,12 +8465,25 @@ With prefix ARG, insert above the current line."
(concat "+" (make-string (- (match-end 1) (match-beginning 1))
?-) "|") t t line)))
(and (string-match "\\+" line) (setq line (replace-match "|" t t line)))
- (beginning-of-line (if arg 1 2))
+ (beginning-of-line (if above 1 2))
(insert line "\n")
- (beginning-of-line (if arg 1 -1))
+ (beginning-of-line (if above 1 -1))
(move-to-column col)
(and org-table-overlay-coordinates (org-table-align))))
+(defun org-table-hline-and-move (&optional same-column)
+ "Insert a hline and move to the row below that line."
+ (interactive "P")
+ (let ((col (org-table-current-column)))
+ (org-table-maybe-eval-formula)
+ (org-table-maybe-recalculate-line)
+ (org-table-insert-hline)
+ (end-of-line 2)
+ (if (looking-at "\n[ \t]*|-")
+ (progn (insert "\n|") (org-table-align))
+ (org-table-next-field))
+ (if same-column (org-table-goto-column col))))
+
(defun org-table-clean-line (s)
"Convert a table line S into a string with only \"|\" and space.
In particular, this does handle wide and invisible characters."
@@ -6681,7 +8510,6 @@ In particular, this does handle wide and invisible characters."
(org-table-fix-formulas "@" (list (cons (number-to-string dline) "INVALID"))
dline -1 dline)))
-
(defun org-table-sort-lines (with-case &optional sorting-type)
"Sort table lines according to the column at point.
@@ -6733,7 +8561,7 @@ should be done in reverse order."
(setq beg (point-at-bol 1)))
(goto-char pos)
(if (re-search-forward org-table-hline-regexp tend t)
- (setq beg (point-at-bol 0))
+ (setq end (point-at-bol 1))
(goto-char tend)
(setq end (point-at-bol))))
(setq beg (move-marker (make-marker) beg)
@@ -6956,18 +8784,17 @@ it can be edited in place."
(field (org-table-get-field))
(cw (current-window-configuration))
p)
- (switch-to-buffer-other-window "*Org tmp*")
+ (org-switch-to-buffer-other-window "*Org tmp*")
(erase-buffer)
(insert "#\n# Edit field and finish with C-c C-c\n#\n")
- (org-mode)
+ (let ((org-inhibit-startup t)) (org-mode))
(goto-char (setq p (point-max)))
(insert (org-trim field))
(remove-text-properties p (point-max)
'(invisible t org-cwidth t display t
intangible t))
(goto-char p)
- (org-set-local 'org-finish-function
- 'org-table-finish-edit-field)
+ (org-set-local 'org-finish-function 'org-table-finish-edit-field)
(org-set-local 'org-window-configuration cw)
(org-set-local 'org-field-marker pos)
(message "Edit and finish with C-c C-c"))))
@@ -6997,8 +8824,8 @@ the table and kill the editing buffer."
(defun org-trim (s)
"Remove whitespace at beginning and end of string."
- (if (string-match "^[ \t]+" s) (setq s (replace-match "" t t s)))
- (if (string-match "[ \t]+$" s) (setq s (replace-match "" t t s)))
+ (if (string-match "\\`[ \t\n\r]+" s) (setq s (replace-match "" t t s)))
+ (if (string-match "[ \t\n\r]+\\'" s) (setq s (replace-match "" t t s)))
s)
(defun org-wrap (string &optional width lines)
@@ -7159,21 +8986,25 @@ If NLAST is a number, only the NLAST fields will actually be summed."
((equal n 0) nil)
(t n))))
-(defun org-table-current-field-formula ()
+(defun org-table-current-field-formula (&optional key noerror)
"Return the formula active for the current field.
-Assumes that specials are in place."
+Assumes that specials are in place.
+If KEY is given, return the key to this formula.
+Otherwise return the formula preceeded with \"=\" or \":=\"."
(let* ((name (car (rassoc (list (org-current-line)
(org-table-current-column))
org-table-named-field-locations)))
(col (org-table-current-column))
(scol (int-to-string col))
(ref (format "@%d$%d" (org-table-current-dline) col))
- (stored-list (org-table-get-stored-formulas))
+ (stored-list (org-table-get-stored-formulas noerror))
(ass (or (assoc name stored-list)
(assoc ref stored-list)
(assoc scol stored-list))))
- (if ass (concat (if (string-match "^[0-9]+$" (car ass)) "=" ":=")
- (cdr ass)))))
+ (if key
+ (car ass)
+ (if ass (concat (if (string-match "^[0-9]+$" (car ass)) "=" ":=")
+ (cdr ass))))))
(defun org-table-get-formula (&optional equation named)
"Read a formula from the minibuffer, offer stored formula as default.
@@ -7199,11 +9030,16 @@ When NAMED is non-nil, look for a named equation."
stored)
((stringp equation)
equation)
- (t (read-string
- (format "%s formula $%s=" (if named "Field" "Column") scol)
- (or stored "") 'org-table-formula-history
- ;stored
- ))))
+ (t (org-table-formula-from-user
+ (read-string
+ (org-table-formula-to-user
+ (format "%s formula %s%s="
+ (if named "Field" "Column")
+ (if (member (string-to-char scol) '(?$ ?@)) "" "$")
+ scol))
+ (if stored (org-table-formula-to-user stored) "")
+ 'org-table-formula-history
+ )))))
mustsave)
(when (not (string-match "\\S-" eq))
;; remove formula
@@ -7225,7 +9061,7 @@ When NAMED is non-nil, look for a named equation."
(defun org-table-store-formulas (alist)
"Store the list of formulas below the current table."
- (setq alist (sort alist (lambda (a b) (string< (car a) (car b)))))
+ (setq alist (sort alist 'org-table-formula-less-p))
(save-excursion
(goto-char (org-table-end))
(if (looking-at "\\([ \t]*\n\\)*#\\+TBLFM:\\(.*\n?\\)")
@@ -7242,7 +9078,20 @@ When NAMED is non-nil, look for a named equation."
alist "::")
"\n")))
-(defun org-table-get-stored-formulas ()
+(defsubst org-table-formula-make-cmp-string (a)
+ (when (string-match "^\\(@\\([0-9]+\\)\\)?\\(\\$?\\([0-9]+\\)\\)?\\(\\$?[a-zA-Z0-9]+\\)?" a)
+ (concat
+ (if (match-end 2) (format "@%05d" (string-to-number (match-string 2 a))) "")
+ (if (match-end 4) (format "$%05d" (string-to-number (match-string 4 a))) "")
+ (if (match-end 5) (concat "@@" (match-string 5 a))))))
+
+(defun org-table-formula-less-p (a b)
+ "Compare two formulas for sorting."
+ (let ((as (org-table-formula-make-cmp-string (car a)))
+ (bs (org-table-formula-make-cmp-string (car b))))
+ (and as bs (string< as bs))))
+
+(defun org-table-get-stored-formulas (&optional noerror)
"Return an alist with the stored formulas directly after current table."
(interactive)
(let (scol eq eq-alist strings string seen)
@@ -7258,7 +9107,12 @@ When NAMED is non-nil, look for a named equation."
eq (match-string 3 string)
eq-alist (cons (cons scol eq) eq-alist))
(if (member scol seen)
- (error "Double definition `$%s=' in TBLFM line, please fix by hand" scol)
+ (if noerror
+ (progn
+ (message "Double definition `$%s=' in TBLFM line, please fix by hand" scol)
+ (ding)
+ (sit-for 2))
+ (error "Double definition `$%s=' in TBLFM line, please fix by hand" scol))
(push scol seen))))))
(nreverse eq-alist)))
@@ -7297,6 +9151,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
org-table-local-parameters nil
org-table-named-field-locations nil
org-table-current-begin-line nil
+ org-table-current-begin-pos nil
org-table-current-line-types nil)
(goto-char beg)
(when (re-search-forward "^[ \t]*| *! *\\(|.*\\)" end t)
@@ -7313,7 +9168,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
(while (re-search-forward "^[ \t]*| *\\$ *\\(|.*\\)" end t)
(setq fields (org-split-string (match-string 1) " *| *"))
(while (setq field (pop fields))
- (if (string-match "^\\([a-zA-Z][a-zA-Z0-9]*\\|%\\) *= *\\(.*\\)" field)
+ (if (string-match "^\\([a-zA-Z][_a-zA-Z0-9]*\\|%\\) *= *\\(.*\\)" field)
(push (cons (match-string 1 field) (match-string 2 field))
org-table-local-parameters))))
(goto-char beg)
@@ -7334,6 +9189,7 @@ For all numbers larger than LIMIT, shift them by DELTA."
;; Analyse the line types
(goto-char beg)
(setq org-table-current-begin-line (org-current-line)
+ org-table-current-begin-pos (point)
l org-table-current-begin-line)
(while (looking-at "[ \t]*|\\(-\\)?")
(push (if (match-end 1) 'hline 'dline) types)
@@ -7344,13 +9200,6 @@ For all numbers larger than LIMIT, shift them by DELTA."
org-table-dlines (apply 'vector (cons nil (nreverse dlines)))
org-table-hlines (apply 'vector (cons nil (nreverse hlines)))))))
-(defun org-this-word ()
- ;; Get the current word
- (save-excursion
- (let ((beg (progn (skip-chars-backward "^ \t\n") (point)))
- (end (progn (skip-chars-forward "^ \t\n") (point))))
- (buffer-substring-no-properties beg end))))
-
(defun org-table-maybe-eval-formula ()
"Check if the current field starts with \"=\" or \":=\".
If yes, store the formula and apply it."
@@ -7364,7 +9213,8 @@ If yes, store the formula and apply it."
eq (match-string 1 field))
(if (or (fboundp 'calc-eval)
(equal (substring eq 0 (min 2 (length eq))) "'("))
- (org-table-eval-formula (if named '(4) nil) eq)
+ (org-table-eval-formula (if named '(4) nil)
+ (org-table-formula-from-user eq))
(error "Calc does not seem to be installed, and is needed to evaluate the formula"))))))
(defvar org-recalc-commands nil
@@ -7485,7 +9335,7 @@ formula is installed as valid in only this specific field.
When called with two `C-u' prefixes, insert the active equation
for the field back into the current field, so that it can be
-edited there. This is useful in order to use \\[org-show-reference]
+edited there. This is useful in order to use \\[org-table-show-reference]
to check the referenced fields.
When called, the command first prompts for a formula, which is read in
@@ -7527,7 +9377,7 @@ not overwrite the stored one."
(modes (copy-sequence org-calc-default-modes))
(numbers nil) ; was a variable, now fixed default
(keep-empty nil)
- n form form0 bw fmt x ev orig c lispp)
+ n form form0 bw fmt x ev orig c lispp literal)
;; Parse the format string. Since we have a lot of modes, this is
;; a lot of work. However, I think calc still uses most of the time.
(if (string-match ";" formula)
@@ -7549,6 +9399,9 @@ not overwrite the stored one."
(if (string-match "[NT]" fmt)
(setq numbers (equal (match-string 0 fmt) "N")
fmt (replace-match "" t t fmt)))
+ (if (string-match "L" fmt)
+ (setq literal t
+ fmt (replace-match "" t t fmt)))
(if (string-match "E" fmt)
(setq keep-empty t
fmt (replace-match "" t t fmt)))
@@ -7565,13 +9418,14 @@ not overwrite the stored one."
(org-no-properties
(buffer-substring (point-at-bol) (point-at-eol)))
" *| *"))
- (if numbers
+ (if (eq numbers t)
(setq fields (mapcar
(lambda (x) (number-to-string (string-to-number x)))
fields)))
(setq ndown (1- ndown))
(setq form (copy-sequence formula)
lispp (and (> (length form) 2)(equal (substring form 0 2) "'(")))
+ (if (and lispp literal) (setq lispp 'literal))
;; Check for old vertical references
(setq form (org-rewrite-old-row-references form))
;; Insert complex ranges
@@ -7596,17 +9450,16 @@ not overwrite the stored one."
t t form)))
(setq form0 form)
;; Insert the references to fields in same row
- (while (string-match "\\$\\([0-9]+\\)?" form)
- (setq n (if (match-beginning 1)
- (string-to-number (match-string 1 form))
- n0)
- x (nth (1- n) fields))
+ (while (string-match "\\$\\([0-9]+\\)" form)
+ (setq n (string-to-number (match-string 1 form))
+ x (nth (1- (if (= n 0) n0 n)) fields))
(unless x (error "Invalid field specifier \"%s\""
(match-string 0 form)))
(setq form (replace-match
(save-match-data
(org-table-make-reference x nil numbers lispp))
t t form)))
+
(if lispp
(setq ev (condition-case nil
(eval (eval (read form)))
@@ -7649,6 +9502,12 @@ $1-> %s\n" orig formula form0 form))
(or suppress-align (and org-table-may-need-update
(org-table-align))))))
+(defun org-table-put-field-property (prop value)
+ (save-excursion
+ (put-text-property (progn (skip-chars-backward "^|") (point))
+ (progn (skip-chars-forward "^|") (point))
+ prop value)))
+
(defun org-table-get-range (desc &optional tbeg col highlight)
"Get a calc vector from a column, accorting to descriptor DESC.
Optional arguments TBEG and COL can give the beginning of the table and
@@ -7688,7 +9547,7 @@ HIGHLIGHT means, just highlight the range."
(goto-line r1)
(while (not (looking-at org-table-dataline-regexp))
(beginning-of-line 2))
- (prog1 (org-table-get-field c1)
+ (prog1 (org-trim (org-table-get-field c1))
(if highlight (org-table-highlight-rectangle (point) (point)))))
;; A range, return a vector
;; First sort the numbers to get a regular ractangle
@@ -7708,7 +9567,8 @@ HIGHLIGHT means, just highlight the range."
(org-table-highlight-rectangle
beg (progn (skip-chars-forward "^|\n") (point))))
;; return string representation of calc vector
- (apply 'append (org-table-copy-region beg end))))))
+ (mapcar 'org-trim
+ (apply 'append (org-table-copy-region beg end)))))))
(defun org-table-get-descriptor-line (desc &optional cline bline table)
"Analyze descriptor DESC and retrieve the corresponding line number.
@@ -7738,7 +9598,7 @@ and TABLE is a vector with line types."
(setq i 0 hdir "+")
(if (eq (aref table 0) 'hline) (setq hn (1- hn)))))
(if (and (not hn) on (not odir))
- (error "should never happen");;(aref org-table-dlines on) FIXME
+ (error "should never happen");;(aref org-table-dlines on)
(if (and hn (> hn 0))
(setq i (org-find-row-type table i 'hline (equal hdir "-") nil hn)))
(if on
@@ -7771,7 +9631,9 @@ NUMBERS indicates that everything should be converted to numbers.
LISPP means to return something appropriate for a Lisp list."
(if (stringp elements) ; just a single val
(if lispp
- (prin1-to-string (if numbers (string-to-number elements) elements))
+ (if (eq lispp 'literal)
+ elements
+ (prin1-to-string (if numbers (string-to-number elements) elements)))
(if (equal elements "") (setq elements "0"))
(if numbers (number-to-string (string-to-number elements)) elements))
(unless keep-empty
@@ -7781,9 +9643,12 @@ LISPP means to return something appropriate for a Lisp list."
elements))))
(setq elements (or elements '("0")))
(if lispp
- (mapconcat 'prin1-to-string
- (if numbers (mapcar 'string-to-number elements) elements)
- " ")
+ (mapconcat
+ (lambda (x)
+ (if (eq lispp 'literal)
+ x
+ (prin1-to-string (if numbers (string-to-number x) x))))
+ elements " ")
(concat "[" (mapconcat
(lambda (x)
(if numbers (number-to-string (string-to-number x)) x))
@@ -7806,7 +9671,7 @@ With prefix arg ALL, do this for all lines in the table."
(line-re org-table-dataline-regexp)
(thisline (org-current-line))
(thiscol (org-table-current-column))
- beg end entry eqlnum eqlname eql (cnt 0) eq a name)
+ beg end entry eqlnum eqlname eqlname1 eql (cnt 0) eq a name)
;; Insert constants in all formulas
(setq eqlist
(mapcar (lambda (x)
@@ -7836,8 +9701,30 @@ With prefix arg ALL, do this for all lines in the table."
end (move-marker (make-marker) (1+ (point-at-eol)))))
(goto-char beg)
(and all (message "Re-applying formulas to full table..."))
+
+ ;; First find the named fields, and mark them untouchanble
+ (remove-text-properties beg end '(org-untouchable t))
+ (while (setq eq (pop eqlname))
+ (setq name (car eq)
+ a (assoc name org-table-named-field-locations))
+ (and (not a)
+ (string-match "@\\([0-9]+\\)\\$\\([0-9]+\\)" name)
+ (setq a (list name
+ (aref org-table-dlines
+ (string-to-number (match-string 1 name)))
+ (string-to-number (match-string 2 name)))))
+ (when (and a (or all (equal (nth 1 a) thisline)))
+ (message "Re-applying formula to field: %s" name)
+ (goto-line (nth 1 a))
+ (org-table-goto-column (nth 2 a))
+ (push (append a (list (cdr eq))) eqlname1)
+ (org-table-put-field-property :org-untouchable t)))
+
+ ;; Now evauluate the column formulas, but skip fields covered by
+ ;; field formulas
+ (goto-char beg)
(while (re-search-forward line-re end t)
- (unless (string-match "^ *[_^!$] *$" (org-table-get-field 1))
+ (unless (string-match "^ *[_^!$/] *$" (org-table-get-field 1))
;; Unprotected line, recalculate
(and all (message "Re-applying formulas to full table...(line %d)"
(setq cnt (1+ cnt))))
@@ -7846,30 +9733,24 @@ With prefix arg ALL, do this for all lines in the table."
(while (setq entry (pop eql))
(goto-line org-last-recalc-line)
(org-table-goto-column (string-to-number (car entry)) nil 'force)
- (org-table-eval-formula nil (cdr entry)
- 'noalign 'nocst 'nostore 'noanalysis))))
+ (unless (get-text-property (point) :org-untouchable)
+ (org-table-eval-formula nil (cdr entry)
+ 'noalign 'nocst 'nostore 'noanalysis)))))
+
+ ;; Now evaluate the field formulas
+ (while (setq eq (pop eqlname1))
+ (message "Re-applying formula to field: %s" (car eq))
+ (goto-line (nth 1 eq))
+ (org-table-goto-column (nth 2 eq))
+ (org-table-eval-formula nil (nth 3 eq) 'noalign 'nocst
+ 'nostore 'noanalysis))
+
(goto-line thisline)
(org-table-goto-column thiscol)
+ (remove-text-properties (point-min) (point-max) '(org-untouchable t))
(or noalign (and org-table-may-need-update (org-table-align))
(and all (message "Re-applying formulas to %d lines...done" cnt)))
- ;; Now do the named fields
- (while (setq eq (pop eqlname))
- (setq name (car eq)
- a (assoc name org-table-named-field-locations))
- (and (not a)
- (string-match "@\\([0-9]+\\)\\$\\([0-9]+\\)" name)
- (setq a
- (list
- name
- (aref org-table-dlines
- (string-to-number (match-string 1 name)))
- (string-to-number (match-string 2 name)))))
- (when (and a (or all (equal (nth 1 a) thisline)))
- (message "Re-applying formula to field: %s" name)
- (goto-line (nth 1 a))
- (org-table-goto-column (nth 2 a))
- (org-table-eval-formula nil (cdr eq) 'noalign 'nocst
- 'nostore 'noanalysis)))
+
;; back to initial position
(message "Re-applying formulas...done")
(goto-line thisline)
@@ -7899,7 +9780,7 @@ With prefix arg ALL, do this for all lines in the table."
(defun org-table-formula-substitute-names (f)
"Replace $const with values in string F."
- (let ((start 0) a (f1 f))
+ (let ((start 0) a (f1 f) (pp (/= (string-to-char f) ?')))
;; First, check for column names
(while (setq start (string-match org-table-column-name-regexp f start))
(setq start (1+ start))
@@ -7907,11 +9788,12 @@ With prefix arg ALL, do this for all lines in the table."
(setq f (replace-match (concat "$" (cdr a)) t t f)))
;; Parameters and constants
(setq start 0)
- (while (setq start (string-match "\\$\\([a-zA-Z][a-zA-Z0-9]*\\)" f start))
+ (while (setq start (string-match "\\$\\([a-zA-Z][_a-zA-Z0-9]*\\)" f start))
(setq start (1+ start))
(if (setq a (save-match-data
(org-table-get-constant (match-string 1 f))))
- (setq f (replace-match (concat "(" a ")") t t f))))
+ (setq f (replace-match
+ (concat (if pp "(") a (if pp ")")) t t f))))
(if org-table-formula-debug
(put-text-property 0 (length f) :orig-formula f1 f))
f))
@@ -7920,37 +9802,84 @@ With prefix arg ALL, do this for all lines in the table."
"Find the value for a parameter or constant in a formula.
Parameters get priority."
(or (cdr (assoc const org-table-local-parameters))
+ (cdr (assoc const org-table-formula-constants-local))
(cdr (assoc const org-table-formula-constants))
(and (fboundp 'constants-get) (constants-get const))
+ (and (string= (substring const 0 (min 5 (length const))) "PROP_")
+ (org-entry-get nil (substring const 5) 'inherit))
"#UNDEFINED_NAME"))
-(defvar org-edit-formulas-map (make-sparse-keymap))
-(define-key org-edit-formulas-map "\C-c\C-c" 'org-finish-edit-formulas)
-(define-key org-edit-formulas-map "\C-c\C-q" 'org-abort-edit-formulas)
-(define-key org-edit-formulas-map "\C-c?" 'org-show-reference)
-(define-key org-edit-formulas-map [(shift up)] 'org-table-edit-line-up)
-(define-key org-edit-formulas-map [(shift down)] 'org-table-edit-line-down)
-(define-key org-edit-formulas-map [(shift left)] 'org-table-edit-backward-field)
-(define-key org-edit-formulas-map [(shift right)] 'org-table-edit-next-field)
-(define-key org-edit-formulas-map [(meta up)] 'org-table-edit-scroll-down)
-(define-key org-edit-formulas-map [(meta down)] 'org-table-edit-scroll)
-(define-key org-edit-formulas-map [(meta tab)] 'lisp-complete-symbol)
-(define-key org-edit-formulas-map "\M-\C-i" 'lisp-complete-symbol)
-(define-key org-edit-formulas-map [(tab)] 'org-edit-formula-lisp-indent)
-(define-key org-edit-formulas-map "\C-i" 'org-edit-formula-lisp-indent)
+(defvar org-table-fedit-map
+ (let ((map (make-sparse-keymap)))
+ (org-defkey map "\C-x\C-s" 'org-table-fedit-finish)
+ (org-defkey map "\C-c\C-s" 'org-table-fedit-finish)
+ (org-defkey map "\C-c\C-c" 'org-table-fedit-finish)
+ (org-defkey map "\C-c\C-q" 'org-table-fedit-abort)
+ (org-defkey map "\C-c?" 'org-table-show-reference)
+ (org-defkey map [(meta shift up)] 'org-table-fedit-line-up)
+ (org-defkey map [(meta shift down)] 'org-table-fedit-line-down)
+ (org-defkey map [(shift up)] 'org-table-fedit-ref-up)
+ (org-defkey map [(shift down)] 'org-table-fedit-ref-down)
+ (org-defkey map [(shift left)] 'org-table-fedit-ref-left)
+ (org-defkey map [(shift right)] 'org-table-fedit-ref-right)
+ (org-defkey map [(meta up)] 'org-table-fedit-scroll-down)
+ (org-defkey map [(meta down)] 'org-table-fedit-scroll)
+ (org-defkey map [(meta tab)] 'lisp-complete-symbol)
+ (org-defkey map "\M-\C-i" 'lisp-complete-symbol)
+ (org-defkey map [(tab)] 'org-table-fedit-lisp-indent)
+ (org-defkey map "\C-i" 'org-table-fedit-lisp-indent)
+ (org-defkey map "\C-c\C-r" 'org-table-fedit-toggle-ref-type)
+ (org-defkey map "\C-c}" 'org-table-fedit-toggle-coordinates)
+ map))
+
+(easy-menu-define org-table-fedit-menu org-table-fedit-map "Org Edit Formulas Menu"
+ '("Edit-Formulas"
+ ["Finish and Install" org-table-fedit-finish t]
+ ["Finish, Install, and Apply" (org-table-fedit-finish t) :keys "C-u C-c C-c"]
+ ["Abort" org-table-fedit-abort t]
+ "--"
+ ["Pretty-Print Lisp Formula" org-table-fedit-lisp-indent t]
+ ["Complete Lisp Symbol" lisp-complete-symbol t]
+ "--"
+ "Shift Reference at Point"
+ ["Up" org-table-fedit-ref-up t]
+ ["Down" org-table-fedit-ref-down t]
+ ["Left" org-table-fedit-ref-left t]
+ ["Right" org-table-fedit-ref-right t]
+ "-"
+ "Change Test Row for Column Formulas"
+ ["Up" org-table-fedit-line-up t]
+ ["Down" org-table-fedit-line-down t]
+ "--"
+ ["Scroll Table Window" org-table-fedit-scroll t]
+ ["Scroll Table Window down" org-table-fedit-scroll-down t]
+ ["Show Table Grid" org-table-fedit-toggle-coordinates
+ :style toggle :selected (with-current-buffer (marker-buffer org-pos)
+ org-table-overlay-coordinates)]
+ "--"
+ ["Standard Refs (B3 instead of @3$2)" org-table-fedit-toggle-ref-type
+ :style toggle :selected org-table-buffer-is-an]))
(defvar org-pos)
(defun org-table-edit-formulas ()
"Edit the formulas of the current table in a separate buffer."
(interactive)
+ (when (save-excursion (beginning-of-line 1) (looking-at "#\\+TBLFM"))
+ (beginning-of-line 0))
(unless (org-at-table-p) (error "Not at a table"))
(org-table-get-specials)
- (let ((eql (org-table-get-stored-formulas))
+ (let ((key (org-table-current-field-formula 'key 'noerror))
+ (eql (sort (org-table-get-stored-formulas 'noerror)
+ 'org-table-formula-less-p))
(pos (move-marker (make-marker) (point)))
+ (startline 1)
(wc (current-window-configuration))
- entry s)
- (switch-to-buffer-other-window "*Edit Formulas*")
+ (titles '((column . "# Column Formulas\n")
+ (field . "# Field Formulas\n")
+ (named . "# Named Field Formulas\n")))
+ entry s type title)
+ (org-switch-to-buffer-other-window "*Edit Formulas*")
(erase-buffer)
;; Keep global-font-lock-mode from turning on font-lock-mode
(let ((font-lock-global-modes '(not fundamental-mode)))
@@ -7958,38 +9887,227 @@ Parameters get priority."
(org-set-local 'font-lock-global-modes (list 'not major-mode))
(org-set-local 'org-pos pos)
(org-set-local 'org-window-configuration wc)
- (use-local-map org-edit-formulas-map)
- (org-add-hook 'post-command-hook 'org-table-edit-formulas-post-command t t)
- (setq s "# `C-c C-c' to finish, `C-u C-c C-c' to also apply, `C-c C-q' to abort.
-# `TAB' to pretty-print Lisp expressions, `M-TAB' to complete List symbols
-# `M-up/down' to scroll table, `S-up/down' to change line for column formulas\n\n")
-
- (put-text-property 0 (length s) 'face 'font-lock-comment-face s)
- (insert s)
+ (use-local-map org-table-fedit-map)
+ (org-add-hook 'post-command-hook 'org-table-fedit-post-command t t)
+ (easy-menu-add org-table-fedit-menu)
+ (setq startline (org-current-line))
(while (setq entry (pop eql))
+ (setq type (cond
+ ((equal (string-to-char (car entry)) ?@) 'field)
+ ((string-match "^[0-9]" (car entry)) 'column)
+ (t 'named)))
+ (when (setq title (assq type titles))
+ (or (bobp) (insert "\n"))
+ (insert (org-add-props (cdr title) nil 'face font-lock-comment-face))
+ (setq titles (delq title titles)))
+ (if (equal key (car entry)) (setq startline (org-current-line)))
(setq s (concat (if (equal (string-to-char (car entry)) ?@) "" "$")
(car entry) " = " (cdr entry) "\n"))
(remove-text-properties 0 (length s) '(face nil) s)
(insert s))
- (goto-char (point-min))
- (message "Edit formulas and finish with `C-c C-c'.")))
+ (if (eq org-table-use-standard-references t)
+ (org-table-fedit-toggle-ref-type))
+ (goto-line startline)
+ (message "Edit formulas and finish with `C-c C-c'. See menu for more commands.")))
-(defun org-table-edit-formulas-post-command ()
+(defun org-table-fedit-post-command ()
(when (not (memq this-command '(lisp-complete-symbol)))
(let ((win (selected-window)))
(save-excursion
(condition-case nil
- (org-show-reference)
+ (org-table-show-reference)
(error nil))
(select-window win)))))
-(defun org-finish-edit-formulas (&optional arg)
+(defun org-table-formula-to-user (s)
+ "Convert a formula from internal to user representation."
+ (if (eq org-table-use-standard-references t)
+ (org-table-convert-refs-to-an s)
+ s))
+
+(defun org-table-formula-from-user (s)
+ "Convert a formula from user to internal representation."
+ (if org-table-use-standard-references
+ (org-table-convert-refs-to-rc s)
+ s))
+
+(defun org-table-convert-refs-to-rc (s)
+ "Convert spreadsheet references from AB7 to @7$28.
+Works for single references, but also for entire formulas and even the
+full TBLFM line."
+ (let ((start 0))
+ (while (string-match "\\<\\([a-zA-Z]+\\)\\([0-9]+\\>\\|&\\)\\|\\(;[^\r\n:]+\\)" s start)
+ (cond
+ ((match-end 3)
+ ;; format match, just advance
+ (setq start (match-end 0)))
+ ((and (> (match-beginning 0) 0)
+ (equal ?. (aref s (max (1- (match-beginning 0)) 0)))
+ (not (equal ?. (aref s (max (- (match-beginning 0) 2) 0)))))
+ ;; 3.e5 or something like this.
+ (setq start (match-end 0)))
+ (t
+ (setq start (match-beginning 0)
+ s (replace-match
+ (if (equal (match-string 2 s) "&")
+ (format "$%d" (org-letters-to-number (match-string 1 s)))
+ (format "@%d$%d"
+ (string-to-number (match-string 2 s))
+ (org-letters-to-number (match-string 1 s))))
+ t t s)))))
+ s))
+
+(defun org-table-convert-refs-to-an (s)
+ "Convert spreadsheet references from to @7$28 to AB7.
+Works for single references, but also for entire formulas and even the
+full TBLFM line."
+ (while (string-match "@\\([0-9]+\\)\\$\\([0-9]+\\)" s)
+ (setq s (replace-match
+ (format "%s%d"
+ (org-number-to-letters
+ (string-to-number (match-string 2 s)))
+ (string-to-number (match-string 1 s)))
+ t t s)))
+ (while (string-match "\\(^\\|[^0-9a-zA-Z]\\)\\$\\([0-9]+\\)" s)
+ (setq s (replace-match (concat "\\1"
+ (org-number-to-letters
+ (string-to-number (match-string 2 s))) "&")
+ t nil s)))
+ s)
+
+(defun org-letters-to-number (s)
+ "Convert a base 26 number represented by letters into an integer.
+For example: AB -> 28."
+ (let ((n 0))
+ (setq s (upcase s))
+ (while (> (length s) 0)
+ (setq n (+ (* n 26) (string-to-char s) (- ?A) 1)
+ s (substring s 1)))
+ n))
+
+(defun org-number-to-letters (n)
+ "Convert an integer into a base 26 number represented by letters.
+For example: 28 -> AB."
+ (let ((s ""))
+ (while (> n 0)
+ (setq s (concat (char-to-string (+ (mod (1- n) 26) ?A)) s)
+ n (/ (1- n) 26)))
+ s))
+
+(defun org-table-fedit-convert-buffer (function)
+ "Convert all references in this buffer, using FUNTION."
+ (let ((line (org-current-line)))
+ (goto-char (point-min))
+ (while (not (eobp))
+ (insert (funcall function (buffer-substring (point) (point-at-eol))))
+ (delete-region (point) (point-at-eol))
+ (or (eobp) (forward-char 1)))
+ (goto-line line)))
+
+(defun org-table-fedit-toggle-ref-type ()
+ "Convert all references in the buffer from B3 to @3$2 and back."
+ (interactive)
+ (org-set-local 'org-table-buffer-is-an (not org-table-buffer-is-an))
+ (org-table-fedit-convert-buffer
+ (if org-table-buffer-is-an
+ 'org-table-convert-refs-to-an 'org-table-convert-refs-to-rc))
+ (message "Reference type switched to %s"
+ (if org-table-buffer-is-an "A1 etc" "@row$column")))
+
+(defun org-table-fedit-ref-up ()
+ "Shift the reference at point one row/hline up."
+ (interactive)
+ (org-table-fedit-shift-reference 'up))
+(defun org-table-fedit-ref-down ()
+ "Shift the reference at point one row/hline down."
+ (interactive)
+ (org-table-fedit-shift-reference 'down))
+(defun org-table-fedit-ref-left ()
+ "Shift the reference at point one field to the left."
+ (interactive)
+ (org-table-fedit-shift-reference 'left))
+(defun org-table-fedit-ref-right ()
+ "Shift the reference at point one field to the right."
+ (interactive)
+ (org-table-fedit-shift-reference 'right))
+
+(defun org-table-fedit-shift-reference (dir)
+ (cond
+ ((org-at-regexp-p "\\(\\<[a-zA-Z]\\)&")
+ (if (memq dir '(left right))
+ (org-rematch-and-replace 1 (eq dir 'left))
+ (error "Cannot shift reference in this direction")))
+ ((org-at-regexp-p "\\(\\<[a-zA-Z]\\{1,2\\}\\)\\([0-9]+\\)")
+ ;; A B3-like reference
+ (if (memq dir '(up down))
+ (org-rematch-and-replace 2 (eq dir 'up))
+ (org-rematch-and-replace 1 (eq dir 'left))))
+ ((org-at-regexp-p
+ "\\(@\\|\\.\\.\\)\\([-+]?\\(I+\\>\\|[0-9]+\\)\\)\\(\\$\\([-+]?[0-9]+\\)\\)?")
+ ;; An internal reference
+ (if (memq dir '(up down))
+ (org-rematch-and-replace 2 (eq dir 'up) (match-end 3))
+ (org-rematch-and-replace 5 (eq dir 'left))))))
+
+(defun org-rematch-and-replace (n &optional decr hline)
+ "Re-match the group N, and replace it with the shifted refrence."
+ (or (match-end n) (error "Cannot shift reference in this direction"))
+ (goto-char (match-beginning n))
+ (and (looking-at (regexp-quote (match-string n)))
+ (replace-match (org-shift-refpart (match-string 0) decr hline)
+ t t)))
+
+(defun org-shift-refpart (ref &optional decr hline)
+ "Shift a refrence part REF.
+If DECR is set, decrease the references row/column, else increase.
+If HLINE is set, this may be a hline reference, it certainly is not
+a translation reference."
+ (save-match-data
+ (let* ((sign (string-match "^[-+]" ref)) n)
+
+ (if sign (setq sign (substring ref 0 1) ref (substring ref 1)))
+ (cond
+ ((and hline (string-match "^I+" ref))
+ (setq n (string-to-number (concat sign (number-to-string (length ref)))))
+ (setq n (+ n (if decr -1 1)))
+ (if (= n 0) (setq n (+ n (if decr -1 1))))
+ (if sign
+ (setq sign (if (< n 0) "-" "+") n (abs n))
+ (setq n (max 1 n)))
+ (concat sign (make-string n ?I)))
+
+ ((string-match "^[0-9]+" ref)
+ (setq n (string-to-number (concat sign ref)))
+ (setq n (+ n (if decr -1 1)))
+ (if sign
+ (concat (if (< n 0) "-" "+") (number-to-string (abs n)))
+ (number-to-string (max 1 n))))
+
+ ((string-match "^[a-zA-Z]+" ref)
+ (org-number-to-letters
+ (max 1 (+ (org-letters-to-number ref) (if decr -1 1)))))
+
+ (t (error "Cannot shift reference"))))))
+
+(defun org-table-fedit-toggle-coordinates ()
+ "Toggle the display of coordinates in the refrenced table."
+ (interactive)
+ (let ((pos (marker-position org-pos)))
+ (with-current-buffer (marker-buffer org-pos)
+ (save-excursion
+ (goto-char pos)
+ (org-table-toggle-coordinate-overlays)))))
+
+(defun org-table-fedit-finish (&optional arg)
"Parse the buffer for formula definitions and install them.
With prefix ARG, apply the new formulas to the table."
(interactive "P")
(org-table-remove-rectangle-highlight)
+ (if org-table-use-standard-references
+ (progn
+ (org-table-fedit-convert-buffer 'org-table-convert-refs-to-rc)
+ (setq org-table-buffer-is-an nil)))
(let ((pos org-pos) eql var form)
- (setq org-pos nil)
(goto-char (point-min))
(while (re-search-forward
"^\\(@[0-9]+\\$[0-9]+\\|\\$\\([a-zA-Z0-9]+\\)\\) *= *\\(.*\\(\n[ \t]+.*$\\)*\\)"
@@ -7997,9 +10115,13 @@ With prefix ARG, apply the new formulas to the table."
(setq var (if (match-end 2) (match-string 2) (match-string 1))
form (match-string 3))
(setq form (org-trim form))
- (while (string-match "[ \t]*\n[ \t]*" form)
- (setq form (replace-match " " t t form)))
- (push (cons var form) eql))
+ (when (not (equal form ""))
+ (while (string-match "[ \t]*\n[ \t]*" form)
+ (setq form (replace-match " " t t form)))
+ (when (assoc var eql)
+ (error "Double formulas for %s" var))
+ (push (cons var form) eql)))
+ (setq org-pos nil)
(set-window-configuration org-window-configuration)
(select-window (get-buffer-window (marker-buffer pos)))
(goto-char pos)
@@ -8012,7 +10134,7 @@ With prefix ARG, apply the new formulas to the table."
(org-table-recalculate 'all)
(message "New formulas installed - press C-u C-c C-c to apply."))))
-(defun org-abort-edit-formulas ()
+(defun org-table-fedit-abort ()
"Abort editing formulas, without installing the changes."
(interactive)
(org-table-remove-rectangle-highlight)
@@ -8023,7 +10145,7 @@ With prefix ARG, apply the new formulas to the table."
(move-marker pos nil)
(message "Formula editing aborted without installing changes")))
-(defun org-edit-formula-lisp-indent ()
+(defun org-table-fedit-lisp-indent ()
"Pretty-print and re-indent Lisp expressions in the Formula Editor."
(interactive)
(let ((pos (point)) beg end ind)
@@ -8032,10 +10154,10 @@ With prefix ARG, apply the new formulas to the table."
((looking-at "[ \t]")
(goto-char pos)
(call-interactively 'lisp-indent-line))
- ((looking-at "[$@0-9a-zA-Z]+ *= *[^ \t\n']") (goto-char pos))
+ ((looking-at "[$&@0-9a-zA-Z]+ *= *[^ \t\n']") (goto-char pos))
((not (fboundp 'pp-buffer))
(error "Cannot pretty-print. Command `pp-buffer' is not available."))
- ((looking-at "[$@0-9a-zA-Z]+ *= *'(")
+ ((looking-at "[$&@0-9a-zA-Z]+ *= *'(")
(goto-char (- (match-end 0) 2))
(setq beg (point))
(setq ind (make-string (current-column) ?\ ))
@@ -8064,7 +10186,7 @@ With prefix ARG, apply the new formulas to the table."
(defvar org-show-positions nil)
-(defun org-show-reference (&optional local)
+(defun org-table-show-reference (&optional local)
"Show the location/value of the $ expression at point."
(interactive)
(org-table-remove-rectangle-highlight)
@@ -8077,12 +10199,18 @@ With prefix ARG, apply the new formulas to the table."
var name e what match dest)
(if local (org-table-get-specials))
(setq what (cond
- ((org-at-regexp-p org-table-range-regexp2) 'range)
+ ((or (org-at-regexp-p org-table-range-regexp2)
+ (org-at-regexp-p org-table-translate-regexp)
+ (org-at-regexp-p org-table-range-regexp))
+ (setq match
+ (save-match-data
+ (org-table-convert-refs-to-rc (match-string 0))))
+ 'range)
((org-at-regexp-p "\\$[a-zA-Z][a-zA-Z0-9]*") 'name)
((org-at-regexp-p "\\$[0-9]+") 'column)
((not local) nil)
(t (error "No reference at point")))
- match (and what (match-string 0)))
+ match (and what (or match (match-string 0))))
(when (and match (not (equal (match-beginning 0) (point-at-bol))))
(org-table-add-rectangle-overlay (match-beginning 0) (match-end 0)
'secondary-selection))
@@ -8094,15 +10222,19 @@ With prefix ARG, apply the new formulas to the table."
(setq match (org-table-formula-substitute-names match)))
(unless local
(save-excursion
+ (end-of-line 1)
+ (re-search-backward "^\\S-" nil t)
(beginning-of-line 1)
- (when (looking-at "\\(\\$[0-9a-zA-Z]+\\|@[0-9]+\\$[0-9]+\\)=")
- (setq dest (match-string 1))
+ (when (looking-at "\\(\\$[0-9a-zA-Z]+\\|@[0-9]+\\$[0-9]+\\|[a-zA-Z]+\\([0-9]+\\|&\\)\\) *=")
+ (setq dest
+ (save-match-data
+ (org-table-convert-refs-to-rc (match-string 1))))
(org-table-add-rectangle-overlay
(match-beginning 1) (match-end 1) face2))))
(if (and (markerp pos) (marker-buffer pos))
(if (get-buffer-window (marker-buffer pos))
(select-window (get-buffer-window (marker-buffer pos)))
- (switch-to-buffer-other-window (get-buffer-window
+ (org-switch-to-buffer-other-window (get-buffer-window
(marker-buffer pos)))))
(goto-char pos)
(org-table-force-dataline)
@@ -8161,22 +10293,27 @@ With prefix ARG, apply the new formulas to the table."
(t
(cond
((not var) (error "No reference at point"))
+ ((setq e (assoc var org-table-formula-constants-local))
+ (message "Local Constant: $%s=%s in #+CONSTANTS line."
+ var (cdr e)))
((setq e (assoc var org-table-formula-constants))
(message "Constant: $%s=%s in `org-table-formula-constants'."
var (cdr e)))
((setq e (and (fboundp 'constants-get) (constants-get var)))
- (message "Constant: $%s=%s, retrieved from `constants.el'." var e))
+ (message "Constant: $%s=%s, from `constants.el'%s."
+ var e (format " (%s units)" constants-unit-system)))
(t (error "Undefined name $%s" var)))))
(goto-char pos)
- (when org-show-positions
+ (when (and org-show-positions
+ (not (memq this-command '(org-table-fedit-scroll
+ org-table-fedit-scroll-down))))
(push pos org-show-positions)
+ (push org-table-current-begin-pos org-show-positions)
(let ((min (apply 'min org-show-positions))
(max (apply 'max org-show-positions)))
- (when (or (not (pos-visible-in-window-p min))
- (not (pos-visible-in-window-p max)))
- (goto-char min)
- (set-window-start (selected-window) (point-at-bol))
- (goto-char pos))))
+ (goto-char min) (recenter 0)
+ (goto-char max)
+ (or (pos-visible-in-window-p max) (recenter -1))))
(select-window win))))
(defun org-table-force-dataline ()
@@ -8193,27 +10330,17 @@ With prefix ARG, apply the new formulas to the table."
((or p1 p2) (goto-char (or p1 p2)))
(t (error "No table dataline around here"))))))
-(defun org-table-edit-line-up ()
+(defun org-table-fedit-line-up ()
"Move cursor one line up in the window showing the table."
(interactive)
- (org-table-edit-move 'previous-line))
+ (org-table-fedit-move 'previous-line))
-(defun org-table-edit-line-down ()
+(defun org-table-fedit-line-down ()
"Move cursor one line down in the window showing the table."
(interactive)
- (org-table-edit-move 'next-line))
-
-(defun org-table-edit-backward-field ()
- "Move cursor one field backward in the window showing the table."
- (interactive)
- (org-table-edit-move 'org-table-previous-field))
-
-(defun org-table-edit-next-field ()
- "Move cursor one field forward in the window showing the table."
- (interactive)
- (org-table-edit-move 'org-table-next-field))
+ (org-table-fedit-move 'next-line))
-(defun org-table-edit-move (command)
+(defun org-table-fedit-move (command)
"Move the cursor in the window shoinw the table.
Use COMMAND to do the motion, repeat if necessary to end up in a data line."
(let ((org-table-allow-automatic-line-recalculation nil)
@@ -8228,14 +10355,14 @@ Use COMMAND to do the motion, repeat if necessary to end up in a data line."
(move-marker pos (point))
(select-window win)))
-(defun org-table-edit-scroll (N)
+(defun org-table-fedit-scroll (N)
(interactive "p")
(let ((other-window-scroll-buffer (marker-buffer org-pos)))
(scroll-other-window N)))
-(defun org-table-edit-scroll-down (N)
+(defun org-table-fedit-scroll-down (N)
(interactive "p")
- (org-table-edit-scroll (- N)))
+ (org-table-fedit-scroll (- N)))
(defvar org-table-rectangle-overlays nil)
@@ -8290,7 +10417,7 @@ Use COMMAND to do the motion, repeat if necessary to end up in a data line."
(mapc 'org-delete-overlay org-table-coordinate-overlays)
(setq org-table-coordinate-overlays nil)
(save-excursion
- (let ((id 0) (ih 0) hline eol str ic ov beg)
+ (let ((id 0) (ih 0) hline eol s1 s2 str ic ov beg)
(goto-char (org-table-begin))
(while (org-at-table-p)
(setq eol (point-at-eol))
@@ -8299,15 +10426,18 @@ Use COMMAND to do the motion, repeat if necessary to end up in a data line."
(setq hline (looking-at org-table-hline-regexp))
(setq str (if hline (format "I*%-2d" (setq ih (1+ ih)))
(format "%4d" (setq id (1+ id)))))
- (org-overlay-before-string ov str 'org-formula 'evaporate)
+ (org-overlay-before-string ov str 'org-special-keyword 'evaporate)
(when hline
(setq ic 0)
- (while (re-search-forward "[+|]-+" eol t)
+ (while (re-search-forward "[+|]\\(-+\\)" eol t)
(setq beg (1+ (match-beginning 0))
- str (concat "$" (int-to-string (setq ic (1+ ic)))))
+ ic (1+ ic)
+ s1 (concat "$" (int-to-string ic))
+ s2 (org-number-to-letters ic)
+ str (if (eq org-table-use-standard-references t) s2 s1))
(setq ov (org-make-overlay beg (+ beg (length str))))
(push ov org-table-coordinate-overlays)
- (org-overlay-display ov str 'org-formula 'evaporate)))
+ (org-overlay-display ov str 'org-special-keyword 'evaporate)))
(beginning-of-line 2)))))
(defun org-table-toggle-coordinate-overlays ()
@@ -8492,7 +10622,7 @@ to execute outside of tables."
'("\C-c}" org-table-toggle-coordinate-overlays)
'("\C-c{" org-table-toggle-formula-debugger)
'("\C-m" org-table-next-row)
- (list (org-key 'S-return) 'org-table-copy-down)
+ '([(shift return)] org-table-copy-down)
'("\C-c\C-q" org-table-wrap-region)
'("\C-c?" org-table-field-info)
'("\C-c " org-table-blank-field)
@@ -8507,34 +10637,34 @@ to execute outside of tables."
elt key fun cmd)
(while (setq elt (pop bindings))
(setq nfunc (1+ nfunc))
- (setq key (car elt)
+ (setq key (org-key (car elt))
fun (nth 1 elt)
cmd (orgtbl-make-binding fun nfunc key))
- (define-key orgtbl-mode-map key cmd))
+ (org-defkey orgtbl-mode-map key cmd))
;; Special treatment needed for TAB and RET
- (define-key orgtbl-mode-map [(return)]
+ (org-defkey orgtbl-mode-map [(return)]
(orgtbl-make-binding 'orgtbl-ret 100 [(return)] "\C-m"))
- (define-key orgtbl-mode-map "\C-m"
+ (org-defkey orgtbl-mode-map "\C-m"
(orgtbl-make-binding 'orgtbl-ret 101 "\C-m" [(return)]))
- (define-key orgtbl-mode-map [(tab)]
+ (org-defkey orgtbl-mode-map [(tab)]
(orgtbl-make-binding 'orgtbl-tab 102 [(tab)] "\C-i"))
- (define-key orgtbl-mode-map "\C-i"
+ (org-defkey orgtbl-mode-map "\C-i"
(orgtbl-make-binding 'orgtbl-tab 103 "\C-i" [(tab)]))
- (define-key orgtbl-mode-map [(shift tab)]
+ (org-defkey orgtbl-mode-map [(shift tab)]
(orgtbl-make-binding 'org-table-previous-field 104
[(shift tab)] [(tab)] "\C-i"))
- (define-key orgtbl-mode-map "\M-\C-m"
+ (org-defkey orgtbl-mode-map "\M-\C-m"
(orgtbl-make-binding 'org-table-wrap-region 105
"\M-\C-m" [(meta return)]))
- (define-key orgtbl-mode-map [(meta return)]
+ (org-defkey orgtbl-mode-map [(meta return)]
(orgtbl-make-binding 'org-table-wrap-region 106
[(meta return)] "\M-\C-m"))
- (define-key orgtbl-mode-map "\C-c\C-c" 'orgtbl-ctrl-c-ctrl-c)
+ (org-defkey orgtbl-mode-map "\C-c\C-c" 'orgtbl-ctrl-c-ctrl-c)
(when orgtbl-optimized
;; If the user wants maximum table support, we need to hijack
;; some standard editing functions
@@ -8542,7 +10672,7 @@ to execute outside of tables."
'self-insert-command 'orgtbl-self-insert-command
'delete-char 'org-delete-char
'delete-backward-char 'org-delete-backward-char)
- (define-key orgtbl-mode-map "|" 'org-force-self-insert))
+ (org-defkey orgtbl-mode-map "|" 'org-force-self-insert))
(easy-menu-define orgtbl-mode-menu orgtbl-mode-map "OrgTbl menu"
'("OrgTbl"
["Align" org-ctrl-c-ctrl-c :active (org-at-table-p) :keys "C-c C-c"]
@@ -8678,7 +10808,31 @@ overwritten, and the table is not marked as requiring realignment."
(defvar orgtbl-exp-regexp "^\\([-+]?[0-9][0-9.]*\\)[eE]\\([-+]?[0-9]+\\)$"
"Regula expression matching exponentials as produced by calc.")
-(defvar org-table-clean-did-remove-column-1 nil)
+(defvar org-table-clean-did-remove-column nil)
+
+(defun orgtbl-export (table target)
+ (let ((func (intern (concat "orgtbl-to-" (symbol-name target))))
+ (lines (org-split-string table "[ \t]*\n[ \t]*"))
+ org-table-last-alignment org-table-last-column-widths
+ maxcol column)
+ (if (not (fboundp func))
+ (error "Cannot export orgtbl table to %s" target))
+ (setq lines (org-table-clean-before-export lines))
+ (setq table
+ (mapcar
+ (lambda (x)
+ (if (string-match org-table-hline-regexp x)
+ 'hline
+ (org-split-string (org-trim x) "\\s-*|\\s-*")))
+ lines))
+ (setq maxcol (apply 'max (mapcar (lambda (x) (if (listp x) (length x) 0))
+ table)))
+ (loop for i from (1- maxcol) downto 0 do
+ (setq column (mapcar (lambda (x) (if (listp x) (nth i x) nil)) table))
+ (setq column (delq nil column))
+ (push (apply 'max (mapcar 'string-width column)) org-table-last-column-widths)
+ (push (> (/ (apply '+ (mapcar (lambda (x) (if (string-match org-table-number-regexp x) 1 0)) column)) maxcol) org-table-number-fraction) org-table-last-alignment))
+ (funcall func table nil)))
(defun orgtbl-send-table (&optional maybe)
"Send a tranformed version of this table to the receiver position.
@@ -8706,7 +10860,7 @@ this table."
(org-table-begin) (org-table-end)))
(lines (nthcdr (or skip 0) (org-split-string txt "[ \t]*\n[ \t]*")))
(lines (org-table-clean-before-export lines))
- (i0 (if org-table-clean-did-remove-column-1 2 1))
+ (i0 (if org-table-clean-did-remove-column 2 1))
(table (mapcar
(lambda (x)
(if (string-match org-table-hline-regexp x)
@@ -8996,7 +11150,7 @@ this function is called."
(defun org-link-expand-abbrev (link)
"Apply replacements as defined in `org-link-abbrev-alist."
- (if (string-match "^\\([a-zA-Z]+\\)\\(::?\\(.*\\)\\)?$" link)
+ (if (string-match "^\\([a-zA-Z][-_a-zA-Z0-9]*\\)\\(::?\\(.*\\)\\)?$" link)
(let* ((key (match-string 1 link))
(as (or (assoc key org-link-abbrev-alist-local)
(assoc key org-link-abbrev-alist)))
@@ -9022,6 +11176,52 @@ this function is called."
(defvar org-store-link-plist nil
"Plist with info about the most recently link created with `org-store-link'.")
+(defvar org-link-protocols nil
+ "Link protocols added to Org-mode using `org-add-link-type'.")
+
+(defvar org-store-link-functions nil
+ "List of functions that are called to create and store a link.
+Each function will be called in turn until one returns a non-nil
+value. Each function should check if it is responsible for creating
+this link (for example by looking at the major mode).
+If not, it must exit and return nil.
+If yes, it should return a non-nil value after a calling
+`org-store-link-properties' with a list of properties and values.
+Special properties are:
+
+:type The link prefix. like \"http\". This must be given.
+:link The link, like \"http://www.astro.uva.nl/~dominik\".
+ This is obligatory as well.
+:description Optional default description for the second pair
+ of brackets in an Org-mode link. The user can still change
+ this when inserting this link into an Org-mode buffer.
+
+In addition to these, any additional properties can be specified
+and then used in remember templates.")
+
+(defun org-add-link-type (type &optional follow publish)
+ "Add TYPE to the list of `org-link-types'.
+Re-compute all regular expressions depending on `org-link-types'
+FOLLOW and PUBLISH are two functions. Both take the link path as
+an argument.
+FOLLOW should do whatever is necessary to follow the link, for example
+to find a file or display a mail message.
+PUBLISH takes the path and retuns the string that should be used when
+this document is published."
+ (add-to-list 'org-link-types type t)
+ (org-make-link-regexps)
+ (add-to-list 'org-link-protocols
+ (list type follow publish)))
+
+(defun org-add-agenda-custom-command (entry)
+ "Replace or add a command in `org-agenda-custom-commands'.
+This is mostly for hacking and trying a new command - once the command
+works you probably want to add it to `org-agenda-custom-commands' for good."
+ (let ((ass (assoc (car entry) org-agenda-custom-commands)))
+ (if ass
+ (setcdr ass (cdr entry))
+ (push entry org-agenda-custom-commands))))
+
;;;###autoload
(defun org-store-link (arg)
"\\<org-mode-map>Store an org-link to the current location.
@@ -9035,9 +11235,13 @@ For file links, arg negates `org-context-in-file-links'."
(let (link cpltxt desc description search txt)
(cond
+ ((run-hook-with-args-until-success 'org-store-link-functions)
+ (setq link (plist-get org-store-link-plist :link)
+ desc (or (plist-get org-store-link-plist :description) link)))
+
((eq major-mode 'bbdb-mode)
(let ((name (bbdb-record-name (bbdb-current-record)))
- (company (bbdb-record-company (bbdb-current-record))))
+ (company (bbdb-record-getprop (bbdb-current-record) 'company)))
(setq cpltxt (concat "bbdb:" (or name company))
link (org-make-link cpltxt))
(org-store-link-props :type "bbdb" :name name :company company)))
@@ -9094,7 +11298,7 @@ For file links, arg negates `org-context-in-file-links'."
(elmo-msgdb-overview-get-entity
msgnum (wl-summary-buffer-msgdb))))
(from (wl-summary-line-from))
- (to (car (elmo-message-entity-field wl-message-entity 'to)))
+ (to (elmo-message-entity-field wl-message-entity 'to))
(subject (let (wl-thr-indent-string wl-parent-message-entity)
(wl-summary-line-subject))))
(org-store-link-props :type "wl" :from from :to to
@@ -9220,10 +11424,11 @@ For file links, arg negates `org-context-in-file-links'."
(setq cpltxt (substring cpltxt 0 -2)))
(setq link (org-make-link cpltxt)))
- (buffer-file-name
+ ((buffer-file-name (buffer-base-buffer))
;; Just link to this file here.
(setq cpltxt (concat "file:"
- (abbreviate-file-name buffer-file-name)))
+ (abbreviate-file-name
+ (buffer-file-name (buffer-base-buffer)))))
;; Add a context string
(when (org-xor org-context-in-file-links arg)
(setq txt (if (org-region-active-p)
@@ -9249,9 +11454,9 @@ For file links, arg negates `org-context-in-file-links'."
(if (and (interactive-p) link)
(progn
(setq org-stored-links
- (cons (list cpltxt link desc) org-stored-links))
- (message "Stored: %s" (or cpltxt link)))
- (org-make-link-string link desc))))
+ (cons (list link desc) org-stored-links))
+ (message "Stored: %s" (or desc link)))
+ (and link (org-make-link-string link desc)))))
(defun org-store-link-props (&rest plist)
"Store link properties, extract names and addresses."
@@ -9306,7 +11511,7 @@ according to FMT (default from `org-email-link-description-format')."
;; We are using a headline, clean up garbage in there.
(if (string-match org-todo-regexp s)
(setq s (replace-match "" t t s)))
- (if (string-match ":[a-zA-Z_@0-9:]+:[ \t]*$" s)
+ (if (string-match (org-re ":[[:alnum:]_@:]+:[ \t]*$") s)
(setq s (replace-match "" t t s)))
(setq s (org-trim s))
(if (string-match (concat "^\\(" org-quote-string "\\|"
@@ -9320,11 +11525,13 @@ according to FMT (default from `org-email-link-description-format')."
(mapconcat 'identity (org-split-string s "[ \t]+") " ")))
(defun org-make-link (&rest strings)
- "Concatenate STRINGS, format resulting string with `org-link-format'."
+ "Concatenate STRINGS."
(apply 'concat strings))
(defun org-make-link-string (link &optional description)
"Make a link with brackets, consisting of LINK and DESCRIPTION."
+ (unless (string-match "\\S-" link)
+ (error "Empty link"))
(when (stringp description)
;; Remove brackets from the description, they are fatal.
(while (string-match "\\[\\|\\]" description)
@@ -9339,30 +11546,56 @@ according to FMT (default from `org-email-link-description-format')."
(if description (concat "[" description "]") "")
"]"))
-(defconst org-link-escape-chars '(("[" . "%5B") ("]" . "%5D") (" " . "%20"))
- "Association list of escapes for some characters problematic in links.")
+(defconst org-link-escape-chars
+ '((" " . "%20")
+ ("[" . "%5B")
+ ("]" . "%5d")
+ ("\340" . "%E0") ; `a
+ ("\342" . "%E2") ; ^a
+ ("\347" . "%E7") ; ,c
+ ("\350" . "%E8") ; `e
+ ("\351" . "%E9") ; 'e
+ ("\352" . "%EA") ; ^e
+ ("\356" . "%EE") ; ^i
+ ("\364" . "%F4") ; ^o
+ ("\371" . "%F9") ; `u
+ ("\373" . "%FB") ; ^u
+ (";" . "%3B")
+ ("?" . "%3F")
+ ("=" . "%3D")
+ ("+" . "%2B")
+ )
+ "Association list of escapes for some characters problematic in links.
+This is the list that is used for internal purposes.")
+
+(defconst org-link-escape-chars-browser
+ '((" " . "%20"))
+ "Association list of escapes for some characters problematic in links.
+This is the list that is used before handing over to the browser.")
-(defun org-link-escape (text)
+(defun org-link-escape (text &optional table)
"Escape charaters in TEXT that are problematic for links."
+ (setq table (or table org-link-escape-chars))
(when text
(let ((re (mapconcat (lambda (x) (regexp-quote (car x)))
- org-link-escape-chars "\\|")))
+ table "\\|")))
(while (string-match re text)
(setq text
(replace-match
- (cdr (assoc (match-string 0 text) org-link-escape-chars))
+ (cdr (assoc (match-string 0 text) table))
t t text)))
text)))
-(defun org-link-unescape (text)
+(defun org-link-unescape (text &optional table)
"Reverse the action of `org-link-escape'."
+ (setq table (or table org-link-escape-chars))
(when text
(let ((re (mapconcat (lambda (x) (regexp-quote (cdr x)))
- org-link-escape-chars "\\|")))
+ table "\\|")))
(while (string-match re text)
(setq text
(replace-match
- (car (rassoc (match-string 0 text) org-link-escape-chars))
+ (car (rassoc (match-string 0 text) table))
t t text)))
text)))
@@ -9404,6 +11637,13 @@ according to FMT (default from `org-email-link-description-format')."
(setq s (replace-match "%40" t t s)))
s)
+;;;###autoload
+(defun org-insert-link-global ()
+ "Insert a link like Org-mode does.
+This command can be called in any mode to insert a link in Org-mode syntax."
+ (interactive)
+ (org-run-like-in-org-mode 'org-insert-link))
+
(defun org-insert-link (&optional complete-file)
"Insert a link. At the prompt, enter the link.
@@ -9430,11 +11670,13 @@ is in the current directory or below.
With three \\[universal-argument] prefixes, negate the meaning of
`org-keep-stored-link-after-insertion'."
(interactive "P")
- (let ((region (if (org-region-active-p)
- (prog1 (buffer-substring (region-beginning) (region-end))
- (delete-region (region-beginning) (region-end)))))
- tmphist ; byte-compile incorrectly complains about this
- link desc entry remove file)
+ (let* ((wcf (current-window-configuration))
+ (region (if (org-region-active-p)
+ (buffer-substring (region-beginning) (region-end))))
+ (remove (and region (list (region-beginning) (region-end))))
+ (desc region)
+ tmphist ; byte-compile incorrectly complains about this
+ link entry file)
(cond
((org-in-regexp org-bracket-link-regexp 1)
;; We do have a link at point, and we are going to edit it.
@@ -9469,21 +11711,42 @@ With three \\[universal-argument] prefixes, negate the meaning of
(t (setq link (org-make-link "file:" file))))))
(t
;; Read link, with completion for stored links.
- ;; Fake a link history
+ (with-output-to-temp-buffer "*Org Links*"
+ (princ "Insert a link. Use TAB to complete valid link prefixes.\n")
+ (when org-stored-links
+ (princ "\nStored links are available with <up>/<down> or M-p/n (most recent with RET):\n\n")
+ (princ (mapconcat
+ (lambda (x)
+ (if (nth 1 x) (concat (car x) " (" (nth 1 x) ")") (car x)))
+ (reverse org-stored-links) "\n"))))
+ (let ((cw (selected-window)))
+ (select-window (get-buffer-window "*Org Links*"))
+ (shrink-window-if-larger-than-buffer)
+ (setq truncate-lines t)
+ (select-window cw))
+ ;; Fake a link history, containing the stored links.
(setq tmphist (append (mapcar 'car org-stored-links)
org-insert-link-history))
- (setq link (org-completing-read
- "Link: " org-stored-links nil nil nil
- 'tmphist
- (or (car (car org-stored-links)))))
+ (unwind-protect
+ (setq link (org-completing-read
+ "Link: "
+ (append
+ (mapcar (lambda (x) (list (concat (car x) ":")))
+ (append org-link-abbrev-alist-local org-link-abbrev-alist))
+ (mapcar (lambda (x) (list (concat x ":")))
+ org-link-types))
+ nil nil nil
+ 'tmphist
+ (or (car (car org-stored-links)))))
+ (set-window-configuration wcf)
+ (kill-buffer "*Org Links*"))
(setq entry (assoc link org-stored-links))
(or entry (push link org-insert-link-history))
(if (funcall (if (equal complete-file '(64)) 'not 'identity)
(not org-keep-stored-link-after-insertion))
(setq org-stored-links (delq (assoc link org-stored-links)
org-stored-links)))
- (setq link (if entry (nth 1 entry) link)
- desc (or region desc (nth 2 entry)))))
+ (setq desc (or desc (nth 1 entry)))))
(if (string-match org-plain-link-re link)
;; URL-like link, normalize the use of angular brackets.
@@ -9504,6 +11767,8 @@ With three \\[universal-argument] prefixes, negate the meaning of
;; Check if we can/should use a relative path. If yes, simplify the link
(when (string-match "\\<file:\\(.*\\)" link)
(let* ((path (match-string 1 link))
+ (origpath path)
+ (desc-is-link (equal link desc))
(case-fold-search nil))
(cond
((eq org-link-file-path-type 'absolute)
@@ -9521,7 +11786,9 @@ With three \\[universal-argument] prefixes, negate the meaning of
;; We are linking a file with relative path name.
(setq path (substring (expand-file-name path)
(match-end 0)))))))
- (setq link (concat "file:" path))))
+ (setq link (concat "file:" path))
+ (if (equal desc origpath)
+ (setq desc path))))
(setq desc (read-string "Description: " desc))
(unless (string-match "\\S-" desc) (setq desc nil))
@@ -9531,7 +11798,7 @@ With three \\[universal-argument] prefixes, negate the meaning of
(defun org-completing-read (&rest args)
(let ((minibuffer-local-completion-map
(copy-keymap minibuffer-local-completion-map)))
- (define-key minibuffer-local-completion-map " " 'self-insert-command)
+ (org-defkey minibuffer-local-completion-map " " 'self-insert-command)
(apply 'completing-read args)))
;;; Opening/following a link
@@ -9596,6 +11863,14 @@ This is saved in case the need arises to restore it.")
(defvar org-open-link-marker (make-marker)
"Marker pointing to the location where `org-open-at-point; was called.")
+;;;###autoload
+(defun org-open-at-point-global ()
+ "Follow a link like Org-mode does.
+This command can be called in any mode to follow a link that has
+Org-mode syntax."
+ (interactive)
+ (org-run-like-in-org-mode 'org-open-at-point))
+
(defun org-open-at-point (&optional in-emacs)
"Open link at or after point.
If there is no link at point, this function will search forward up to
@@ -9636,8 +11911,12 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(org-in-regexp org-plain-link-re))
(setq type (match-string 1) path (match-string 2))
(throw 'match t)))
+ (when (org-in-regexp "\\<\\([^><\n]+\\)\\>")
+ (setq type "tree-match"
+ path (match-string 1))
+ (throw 'match t))
(save-excursion
- (when (org-in-regexp "\\(:[A-Za-z_@0-9:]+\\):[ \t\r\n]")
+ (when (org-in-regexp (org-re "\\(:[[:alnum:]_@:]+\\):[ \t]*$"))
(setq type "tags"
path (match-string 1))
(while (string-match ":" path)
@@ -9651,6 +11930,9 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(cond
+ ((assoc type org-link-protocols)
+ (funcall (nth 1 (assoc type org-link-protocols)) path))
+
((equal type "mailto")
(let ((cmd (car org-link-mailto-program))
(args (cdr org-link-mailto-program)) args1
@@ -9670,7 +11952,8 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(apply cmd (nreverse args1))))
((member type '("http" "https" "ftp" "news"))
- (browse-url (concat type ":" path)))
+ (browse-url (concat type ":" (org-link-escape
+ path org-link-escape-chars-browser))))
((string= type "tags")
(org-tags-view in-emacs path))
@@ -9679,12 +11962,17 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(switch-to-buffer-other-window
(org-get-buffer-for-internal-link (current-buffer)))
(org-mark-ring-push))
- (org-link-search
- path
- (cond ((equal in-emacs '(4)) 'occur)
- ((equal in-emacs '(16)) 'org-occur)
- (t nil))
- pos))
+ (let ((cmd `(org-link-search
+ ,path
+ ,(cond ((equal in-emacs '(4)) 'occur)
+ ((equal in-emacs '(16)) 'org-occur)
+ (t nil))
+ ,pos)))
+ (condition-case nil (eval cmd)
+ (error (progn (widen) (eval cmd))))))
+
+ ((string= type "tree-match")
+ (org-occur (concat "\\[" (regexp-quote path) "\\]")))
((string= type "file")
(if (string-match "::\\([0-9]+\\)\\'" path)
@@ -9747,7 +12035,7 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
((string= type "shell")
(let ((cmd path))
- ;; FIXME: the following is only for backward compatibility
+ ;; The following is only for backward compatibility
(while (string-match "@{" cmd) (setq cmd (replace-match "<" t t cmd)))
(while (string-match "@}" cmd) (setq cmd (replace-match ">" t t cmd)))
(if (or (not org-confirm-shell-link-function)
@@ -9774,7 +12062,6 @@ optional argument IN-EMACS is non-nil, Emacs will visit the file."
(browse-url-at-point)))))
(move-marker org-open-link-marker nil))
-
;;; File search
(defvar org-create-file-search-functions nil
@@ -9830,6 +12117,10 @@ If the current buffer is in `dired-mode', grep will be used to search
in all files. If AVOID-POS is given, ignore matches near that position."
(let ((case-fold-search t)
(s0 (mapconcat 'identity (org-split-string s "[ \t\r\n]+") " "))
+ (markers (concat "\\(?:" (mapconcat (lambda (x) (regexp-quote (car x)))
+ (append '(("") (" ") ("\t") ("\n"))
+ org-emphasis-alist)
+ "\\|") "\\)"))
(pos (point))
(pre "") (post "")
words re0 re1 re2 re3 re4 re5 re2a reall)
@@ -9854,11 +12145,11 @@ in all files. If AVOID-POS is given, ignore matches near that position."
;; (grep (concat "grep -n -e '" (match-string 1 s) "' *")))
(t (org-do-occur (match-string 1 s)))))
(t
- ;; A normal search string
+ ;; A normal search strings
(when (equal (string-to-char s) ?*)
;; Anchor on headlines, post may include tags.
- (setq pre "^\\*+[ \t]*\\(?:\\sw+\\)?[ \t]*"
- post "[ \t]*\\(?:[ \t]+:[a-zA-Z_@0-9:+]:[ \t]*\\)?$"
+ (setq pre "^\\*+[ \t]+\\(?:\\sw+\\)?[ \t]*"
+ post (org-re "[ \t]*\\(?:[ \t]+:[[:alnum:]_@:+]:[ \t]*\\)?$")
s (substring s 1)))
(remove-text-properties
0 (length s)
@@ -9866,7 +12157,8 @@ in all files. If AVOID-POS is given, ignore matches near that position."
;; Make a series of regular expressions to find a match
(setq words (org-split-string s "[ \n\r\t]+")
re0 (concat "\\(<<" (regexp-quote s0) ">>\\)")
- re2 (concat "[ \t\r\n]\\(" (mapconcat 'downcase words "[ \t]+") "\\)[ \t\r\n]")
+ re2 (concat markers "\\(" (mapconcat 'downcase words "[ \t]+")
+ "\\)" markers)
re2a (concat "[ \t\r\n]\\(" (mapconcat 'downcase words "[ \t\r\n]+") "\\)[ \t\r\n]")
re4 (concat "[^a-zA-Z_]\\(" (mapconcat 'downcase words "[^a-zA-Z_\r\n]+") "\\)[^a-zA-Z_]")
re1 (concat pre re2 post)
@@ -9908,16 +12200,18 @@ enclose the position of `org-open-link-marker'."
(let ((m org-open-link-marker))
(catch 'exit
(while (apply 're-search-forward args)
- (goto-char (match-end group))
- (if (and (or (not (eq (marker-buffer m) (current-buffer)))
- (> (match-beginning 0) (marker-position m))
- (< (match-end 0) (marker-position m)))
- (save-match-data
- (or (not (org-in-regexp org-bracket-link-analytic-regexp 1))
- (not (match-end 4)) ; no description
- (and (<= (match-beginning 4) (point))
- (>= (match-end 4) (point))))))
- (throw 'exit (point)))))))
+ (unless (get-text-property (match-end group) 'intangible) ; Emacs 21
+ (goto-char (match-end group))
+ (if (and (or (not (eq (marker-buffer m) (current-buffer)))
+ (> (match-beginning 0) (marker-position m))
+ (< (match-end 0) (marker-position m)))
+ (save-match-data
+ (or (not (org-in-regexp
+ org-bracket-link-analytic-regexp 1))
+ (not (match-end 4)) ; no description
+ (and (<= (match-beginning 4) (point))
+ (>= (match-end 4) (point))))))
+ (throw 'exit (point))))))))
(defun org-get-buffer-for-internal-link (buffer)
"Return a buffer to be used for displaying the link target of internal links."
@@ -9950,7 +12244,7 @@ to read."
(setq beg (match-end 0))
(if (re-search-forward "^[ \t]*[0-9]+" nil t)
(setq end (1- (match-beginning 0)))))
- (and beg end (let ((buffer-read-only)) (delete-region beg end)))
+ (and beg end (let ((inhibit-read-only t)) (delete-region beg end)))
(goto-char (point-min))
(select-window cwin))))
@@ -10065,7 +12359,7 @@ onto the ring."
(funcall (cdr (assq 'gnus org-link-frame-setup)))
(if gnus-other-frame-object (select-frame gnus-other-frame-object))
(cond ((and group article)
- (gnus-group-read-group 0 nil group)
+ (gnus-group-read-group 1 nil group)
(gnus-summary-goto-article (string-to-number article) nil t))
(group (gnus-group-jump-to-group group))))
@@ -10163,12 +12457,13 @@ sequences, it will now work."
(string= mh-index-folder (substring folder 0 end-index)))
(if (equal major-mode 'mh-show-mode)
(save-window-excursion
- (when (buffer-live-p (get-buffer folder))
- (progn
- (pop-to-buffer folder)
- (org-mhe-get-message-folder-from-index)
- )
- ))
+ (let (pop-up-frames)
+ (when (buffer-live-p (get-buffer folder))
+ (progn
+ (pop-to-buffer folder)
+ (org-mhe-get-message-folder-from-index)
+ )
+ )))
(org-mhe-get-message-folder-from-index)
)
folder
@@ -10346,7 +12641,7 @@ If the file does not exist, an error is thrown."
(if (stringp command)
(setq cmd command)
(setq cmd 'emacs))))
- (if (and (not (eq cmd 'emacs)) ; Emacs has not problems with non-ex files
+ (if (and (not (eq cmd 'emacs)) ; Emacs has no problems with non-ex files
(not (file-exists-p file))
(not org-open-non-existing-files))
(error "No such file: %s" file))
@@ -10357,10 +12652,11 @@ If the file does not exist, an error is thrown."
(setq cmd (replace-match "%s" t t cmd)))
(setq cmd (format cmd (shell-quote-argument file)))
(save-window-excursion
- (shell-command (concat cmd " &"))))
+ (start-process-shell-command cmd nil cmd)))
((or (stringp cmd)
(eq cmd 'emacs))
(funcall (cdr (assq 'file org-link-frame-setup)) file)
+ (widen)
(if line (goto-line line)
(if search (org-link-search search))))
((consp cmd)
@@ -10380,10 +12676,6 @@ If the file does not exist, an error is thrown."
org-file-apps-defaults-windowsnt)
(t org-file-apps-defaults-gnu)))
-(defun org-expand-file-name (path)
- "Replace special path abbreviations and expand the file name."
- (expand-file-name path))
-
(defvar ange-ftp-name-format) ; to silence the XEmacs compiler.
(defun org-file-remote-p (file)
"Test whether FILE specifies a location on a remote system.
@@ -10414,26 +12706,51 @@ conventions in Org-mode. This function returns such a link."
(defconst org-remember-help
"Select a destination location for the note.
UP/DOWN=headline TAB=cycle visibility [Q]uit RET/<left>/<right>=Store
-RET at beg-of-buf -> Append to file as level 2 headline
RET on headline -> Store as sublevel entry to current headline
+RET at beg-of-buf -> Append to file as level 2 headline
<left>/<right> -> before/after current headline, same headings level")
+(defvar org-remember-previous-location nil)
+(defvar org-force-remember-template-char) ;; dynamically scoped
+
;;;###autoload
(defun org-remember-apply-template (&optional use-char skip-interactive)
"Initialize *remember* buffer with template, invoke `org-mode'.
This function should be placed into `remember-mode-hook' and in fact requires
to be run from that hook to fucntion properly."
(if org-remember-templates
-
- (let* ((char (or use-char
- (if (= (length org-remember-templates) 1)
- (caar org-remember-templates)
+ (let* ((templates (mapcar (lambda (x)
+ (if (stringp (car x))
+ (append (list (nth 1 x) (car x)) (cddr x))
+ (append (list (car x) "") (cdr x))))
+ org-remember-templates))
+ (char (or use-char
+ (cond
+ ((= (length templates) 1)
+ (caar templates))
+ ((and (boundp 'org-force-remember-template-char)
+ org-force-remember-template-char)
+ (if (stringp org-force-remember-template-char)
+ (string-to-char org-force-remember-template-char)
+ org-force-remember-template-char))
+ (t
(message "Select template: %s"
(mapconcat
- (lambda (x) (char-to-string (car x)))
- org-remember-templates " "))
- (read-char-exclusive))))
- (entry (cdr (assoc char org-remember-templates)))
+ (lambda (x)
+ (cond
+ ((not (string-match "\\S-" (nth 1 x)))
+ (format "[%c]" (car x)))
+ ((equal (downcase (car x))
+ (downcase (aref (nth 1 x) 0)))
+ (format "[%c]%s" (car x) (substring (nth 1 x) 1)))
+ (t (format "[%c]%s" (car x) (nth 1 x)))))
+ templates " "))
+ (let ((inhibit-quit t) (char0 (read-char-exclusive)))
+ (when (equal char0 ?\C-g)
+ (jump-to-register remember-register)
+ (kill-buffer remember-buffer))
+ char0)))))
+ (entry (cddr (assoc char templates)))
(tpl (car entry))
(plist-p (if org-store-link-plist t nil))
(file (if (and (nth 1 entry) (stringp (nth 1 entry))
@@ -10445,25 +12762,39 @@ to be run from that hook to fucntion properly."
(v-T (format-time-string (cdr org-time-stamp-formats) (org-current-time)))
(v-u (concat "[" (substring v-t 1 -1) "]"))
(v-U (concat "[" (substring v-T 1 -1) "]"))
- (v-i initial) ; defined in `remember-mode'
- (v-a (if (equal annotation "[[]]") "" annotation)) ; likewise
+ ;; `initial' and `annotation' are bound in `remember'
+ (v-i (if (boundp 'initial) initial))
+ (v-a (if (and (boundp 'annotation) annotation)
+ (if (equal annotation "[[]]") "" annotation)
+ ""))
+ (v-A (if (and v-a
+ (string-match "\\[\\(\\[.*?\\]\\)\\(\\[.*?\\]\\)?\\]" v-a))
+ (replace-match "[\\1[%^{Link description}]]" nil nil v-a)
+ v-a))
(v-n user-full-name)
(org-startup-folded nil)
- org-time-was-given x prompt char time)
+ org-time-was-given org-end-time-was-given x prompt char time)
(setq org-store-link-plist
- (append (list :annotation v-a :initial v-i)))
+ (append (list :annotation v-a :initial v-i)
+ org-store-link-plist))
(unless tpl (setq tpl "") (message "No template") (ding))
(erase-buffer)
(insert (substitute-command-keys
(format
- "## `C-c C-c' to file interactively, `C-u C-c C-c' to file directly.
-## Target file \"%s\", headline \"%s\"
-## To switch templates, use `\\[org-remember]'.\n\n"
+"## Filing location: Select interactively, default, or last used:
+## %s to select file and header location interactively.
+## %s \"%s\" -> \"* %s\"
+## C-u C-u C-c C-c \"%s\" -> \"* %s\"
+## To switch templates, use `\\[org-remember]'. To abort use `C-c C-k'.\n\n"
+ (if org-remember-store-without-prompt " C-u C-c C-c" " C-c C-c")
+ (if org-remember-store-without-prompt " C-c C-c" " C-u C-c C-c")
(abbreviate-file-name (or file org-default-notes-file))
- (or headline ""))))
+ (or headline "")
+ (or (car org-remember-previous-location) "???")
+ (or (cdr org-remember-previous-location) "???"))))
(insert tpl) (goto-char (point-min))
;; Simple %-escapes
- (while (re-search-forward "%\\([tTuUai]\\)" nil t)
+ (while (re-search-forward "%\\([tTuUaiA]\\)" nil t)
(when (and initial (equal (match-string 0) "%i"))
(save-match-data
(let* ((lead (buffer-substring
@@ -10490,20 +12821,38 @@ to be run from that hook to fucntion properly."
(org-set-local 'org-remember-default-headline headline))
;; Interactive template entries
(goto-char (point-min))
- (while (re-search-forward "%^\\({\\([^}]*\\)}\\)?\\([uUtT]\\)?" nil t)
+ (while (re-search-forward "%^\\({\\([^}]*\\)}\\)?\\([guUtT]\\)?" nil t)
(setq char (if (match-end 3) (match-string 3))
prompt (if (match-end 2) (match-string 2)))
(goto-char (match-beginning 0))
(replace-match "")
- (if char
- (progn
- (setq org-time-was-given (equal (upcase char) char))
- (setq time (org-read-date (equal (upcase char) "U") t nil
- prompt))
- (org-insert-time-stamp time org-time-was-given
- (member char '("u" "U"))))
+ (cond
+ ((member char '("G" "g"))
+ (let* ((org-last-tags-completion-table
+ (org-global-tags-completion-table
+ (if (equal char "G") (org-agenda-files) (and file (list file)))))
+ (org-add-colon-after-tag-completion t)
+ (ins (completing-read
+ (if prompt (concat prompt ": ") "Tags: ")
+ 'org-tags-completion-function nil nil nil
+ 'org-tags-history)))
+ (setq ins (mapconcat 'identity
+ (org-split-string ins (org-re "[^[:alnum:]]+"))
+ ":"))
+ (when (string-match "\\S-" ins)
+ (or (equal (char-before) ?:) (insert ":"))
+ (insert ins)
+ (or (equal (char-after) ?:) (insert ":")))))
+ (char
+ (setq org-time-was-given (equal (upcase char) char))
+ (setq time (org-read-date (equal (upcase char) "U") t nil
+ prompt))
+ (org-insert-time-stamp time org-time-was-given
+ (member char '("u" "U"))
+ nil nil (list org-end-time-was-given)))
+ (t
(insert (read-string
- (if prompt (concat prompt ": ") "Enter string")))))
+ (if prompt (concat prompt ": ") "Enter string"))))))
(goto-char (point-min))
(if (re-search-forward "%\\?" nil t)
(replace-match "")
@@ -10512,7 +12861,7 @@ to be run from that hook to fucntion properly."
(org-set-local 'org-finish-function 'remember-buffer)))
;;;###autoload
-(defun org-remember ()
+(defun org-remember (&optional org-force-remember-template-char)
"Call `remember'. If this is already a remember buffer, re-apply template.
If there is an active region, make sure remember uses it as initial content
of the remember buffer."
@@ -10530,6 +12879,8 @@ of the remember buffer."
(remember (buffer-substring (point) (mark)))
(call-interactively 'remember))))
+(defvar org-note-abort nil) ; dynamically scoped
+
;;;###autoload
(defun org-remember-handler ()
"Store stuff from remember.el into an org file.
@@ -10543,7 +12894,7 @@ find a better place. Then press RET or <left> or <right> in insert the note.
Key Cursor position Note gets inserted
-----------------------------------------------------------------------------
-RET buffer-start as level 2 heading at end of file
+RET buffer-start as level 1 heading at end of file
RET on headline as sublevel of the heading at cursor
RET no heading at cursor position, level taken from context.
Or use prefix arg to specify level manually.
@@ -10552,8 +12903,10 @@ RET no heading at cursor position, level taken from context.
So the fastest way to store the note is to press RET RET to append it to
the default file. This way your current train of thought is not
-interrupted, in accordance with the principles of remember.el. But with
-little extra effort, you can push it directly to the correct location.
+interrupted, in accordance with the principles of remember.el.
+You can also get the fast execution without prompting by using
+C-u C-c C-c to exit the remember buffer. See also the variable
+`org-remember-store-without-prompt'.
Before being stored away, the function ensures that the text has a
headline, i.e. a first line that starts with a \"*\". If not, a headline
@@ -10567,22 +12920,30 @@ See also the variable `org-reverse-note-order'."
(goto-char (point-min))
(while (looking-at "^[ \t]*\n\\|^##.*\n")
(replace-match ""))
+ (goto-char (point-max))
+ (unless (equal (char-before) ?\n) (insert "\n"))
(catch 'quit
+ (if org-note-abort (throw 'quit nil))
(let* ((txt (buffer-substring (point-min) (point-max)))
- (fastp current-prefix-arg)
+ (fastp (org-xor (equal current-prefix-arg '(4))
+ org-remember-store-without-prompt))
(file (if fastp org-default-notes-file (org-get-org-file)))
(heading org-remember-default-headline)
(visiting (org-find-base-buffer-visiting file))
(org-startup-folded nil)
(org-startup-align-all-tables nil)
(org-goto-start-pos 1)
- spos level indent reversed)
+ spos exitcmd level indent reversed)
+ (if (and (equal current-prefix-arg '(16)) org-remember-previous-location)
+ (setq file (car org-remember-previous-location)
+ heading (cdr org-remember-previous-location)))
+ (setq current-prefix-arg nil)
;; Modify text so that it becomes a nice subtree which can be inserted
;; into an org tree.
(let* ((lines (split-string txt "\n"))
first)
(setq first (car lines) lines (cdr lines))
- (if (string-match "^\\*+" first)
+ (if (string-match "^\\*+ " first)
;; Is already a headline
(setq indent nil)
;; We need to add a headline: Use time and first buffer line
@@ -10597,59 +12958,89 @@ See also the variable `org-reverse-note-order'."
;; Find the file
(if (not visiting) (find-file-noselect file))
(with-current-buffer (or visiting (get-file-buffer file))
- (save-excursion (and (goto-char (point-min))
- (not (re-search-forward "^\\* " nil t))
- (insert "\n* Notes\n")))
- (setq reversed (org-notes-order-reversed-p))
+ (unless (org-mode-p)
+ (error "Target files for remember notes must be in Org-mode"))
(save-excursion
(save-restriction
(widen)
+ (and (goto-char (point-min))
+ (not (re-search-forward "^\\* " nil t))
+ (insert "\n* " (or heading "Notes") "\n"))
+ (setq reversed (org-notes-order-reversed-p))
;; Find the default location
(when (and heading (stringp heading) (string-match "\\S-" heading))
(goto-char (point-min))
(if (re-search-forward
(concat "^\\*+[ \t]+" (regexp-quote heading)
- "\\([ \t]+:[@a-zA-Z0-9_:]*\\)?[ \t]*$")
+ (org-re "\\([ \t]+:[[:alnum:]@_:]*\\)?[ \t]*$"))
nil t)
- (setq org-goto-start-pos (match-beginning 0))))
+ (setq org-goto-start-pos (match-beginning 0))
+ (when fastp
+ (goto-char (point-max))
+ (unless (bolp) (newline))
+ (insert "* " heading "\n")
+ (setq org-goto-start-pos (point-at-bol 0)))))
;; Ask the User for a location
- (setq spos (if fastp
- org-goto-start-pos
- (org-get-location (current-buffer) org-remember-help)))
+ (if fastp
+ (setq spos org-goto-start-pos
+ exitcmd 'return)
+ (setq spos (org-get-location (current-buffer) org-remember-help)
+ exitcmd (cdr spos)
+ spos (car spos)))
(if (not spos) (throw 'quit nil)) ; return nil to show we did
- ; not handle this note
+ ; not handle this note
(goto-char spos)
- (cond ((and (bobp) (not reversed))
+ (cond ((org-on-heading-p t)
+ (org-back-to-heading t)
+ (setq level (funcall outline-level))
+ (cond
+ ((eq exitcmd 'return)
+ ;; sublevel of current
+ (setq org-remember-previous-location
+ (cons (abbreviate-file-name file)
+ (org-get-heading 'notags)))
+ (if reversed
+ (outline-next-heading)
+ (org-end-of-subtree)
+ (if (not (bolp))
+ (if (looking-at "[ \t]*\n")
+ (beginning-of-line 2)
+ (end-of-line 1)
+ (insert "\n"))))
+ (org-paste-subtree (org-get-legal-level level 1) txt))
+ ((eq exitcmd 'left)
+ ;; before current
+ (org-paste-subtree level txt))
+ ((eq exitcmd 'right)
+ ;; after current
+ (org-end-of-subtree t)
+ (org-paste-subtree level txt))
+ (t (error "This should not happen"))))
+
+ ((and (bobp) (not reversed))
;; Put it at the end, one level below level 1
(save-restriction
(widen)
(goto-char (point-max))
(if (not (bolp)) (newline))
(org-paste-subtree (org-get-legal-level 1 1) txt)))
+
((and (bobp) reversed)
;; Put it at the start, as level 1
(save-restriction
(widen)
(goto-char (point-min))
- (re-search-forward "^\\*" nil t)
+ (re-search-forward "^\\*+ " nil t)
(beginning-of-line 1)
(org-paste-subtree 1 txt)))
- ((and (org-on-heading-p nil) (not current-prefix-arg))
- ;; Put it below this entry, at the beg/end of the subtree
- (org-back-to-heading t)
- (setq level (funcall outline-level))
- (if reversed
- (outline-end-of-heading)
- (org-end-of-subtree t))
- (if (not (bolp)) (newline))
- (beginning-of-line 1)
- (org-paste-subtree (org-get-legal-level level 1) txt))
(t
;; Put it right there, with automatic level determined by
;; org-paste-subtree or from prefix arg
- (org-paste-subtree current-prefix-arg txt)))
+ (org-paste-subtree
+ (if (numberp current-prefix-arg) current-prefix-arg)
+ txt)))
(when remember-save-after-remembering
(save-buffer)
(if (not visiting) (kill-buffer (current-buffer)))))))))
@@ -10717,7 +13108,7 @@ the property list including an extra property :name with the block name."
(unless (looking-at org-dblock-start-re)
(error "Not at a dynamic block"))
(let* ((begdel (1+ (match-end 0)))
- (name (match-string 1))
+ (name (org-no-properties (match-string 1)))
(params (append (list :name name)
(read (concat "(" (match-string 3) ")")))))
(unless (re-search-forward org-dblock-end-re nil t)
@@ -10758,12 +13149,16 @@ blocks in the buffer."
"Update the dynamic block at point
This means to empty the block, parse for parameters and then call
the correct writing function."
- (let* ((pos (point))
- (params (org-prepare-dblock))
- (name (plist-get params :name))
- (cmd (intern (concat "org-dblock-write:" name))))
- (funcall cmd params)
- (goto-char pos)))
+ (save-window-excursion
+ (let* ((pos (point))
+ (line (org-current-line))
+ (params (org-prepare-dblock))
+ (name (plist-get params :name))
+ (cmd (intern (concat "org-dblock-write:" name))))
+ (message "Updating dynamic block `%s' at line %d..." name line)
+ (funcall cmd params)
+ (message "Updating dynamic block `%s' at line %d...done" name line)
+ (goto-char pos))))
(defun org-beginning-of-dblock ()
"Find the beginning of the dynamic block at point.
@@ -10788,6 +13183,10 @@ This function can be used in a hook."
;;;; Completion
+(defconst org-additional-option-like-keywords
+ '("BEGIN_HTML" "BEGIN_LaTeX" "END_HTML" "END_LaTeX"
+ "ORGTBL" "HTML:" "LaTeX:" "BEGIN:" "END:" "DATE:"))
+
(defun org-complete (&optional arg)
"Perform completion on word at point.
At the beginning of a headline, this completes TODO keywords as given in
@@ -10797,94 +13196,108 @@ that are supported for HTML support.
If the current word is preceded by \"#+\", completes special words for
setting file options.
In the line after \"#+STARTUP:, complete valid keywords.\"
-At all other locations, this simply calls `ispell-complete-word'."
+At all other locations, this simply calls the value of
+`org-completion-fallback-command'."
(interactive "P")
- (catch 'exit
- (let* ((end (point))
- (beg1 (save-excursion
- (skip-chars-backward "a-zA-Z_@0-9")
+ (org-without-partial-completion
+ (catch 'exit
+ (let* ((end (point))
+ (beg1 (save-excursion
+ (skip-chars-backward (org-re "[:alnum:]_@"))
+ (point)))
+ (beg (save-excursion
+ (skip-chars-backward "a-zA-Z0-9_:$")
(point)))
- (beg (save-excursion
- (skip-chars-backward "a-zA-Z0-9_:$")
- (point)))
- (confirm (lambda (x) (stringp (car x))))
- (searchhead (equal (char-before beg) ?*))
- (tag (equal (char-before beg1) ?:))
- (texp (equal (char-before beg) ?\\))
- (link (equal (char-before beg) ?\[))
- (opt (equal (buffer-substring (max (point-at-bol) (- beg 2))
- beg)
- "#+"))
- (startup (string-match "^#\\+STARTUP:.*"
- (buffer-substring (point-at-bol) (point))))
- (completion-ignore-case opt)
- (type nil)
- (tbl nil)
- (table (cond
- (opt
- (setq type :opt)
- (mapcar (lambda (x)
- (string-match "^#\\+\\(\\([A-Z_]+:?\\).*\\)" x)
- (cons (match-string 2 x) (match-string 1 x)))
- (org-split-string (org-get-current-options) "\n")))
- (startup
- (setq type :startup)
- org-startup-options)
- (link (append org-link-abbrev-alist-local
- org-link-abbrev-alist))
- (texp
- (setq type :tex)
- org-html-entities)
- ((string-match "\\`\\*+[ \t]*\\'"
- (buffer-substring (point-at-bol) beg))
- (setq type :todo)
- (mapcar 'list org-todo-keywords))
- (searchhead
- (setq type :searchhead)
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward org-todo-line-regexp nil t)
- (push (list
- (org-make-org-heading-search-string
- (match-string 3) t))
- tbl)))
- tbl)
- (tag (setq type :tag beg beg1)
- (or org-tag-alist (org-get-buffer-tags)))
- (t (progn (ispell-complete-word arg) (throw 'exit nil)))))
- (pattern (buffer-substring-no-properties beg end))
- (completion (try-completion pattern table confirm)))
- (cond ((eq completion t)
- (if (equal type :opt)
- (insert (substring (cdr (assoc (upcase pattern) table))
- (length pattern)))
- (if (equal type :tag) (insert ":"))))
- ((null completion)
- (message "Can't find completion for \"%s\"" pattern)
- (ding))
- ((not (string= pattern completion))
- (delete-region beg end)
- (if (string-match " +$" completion)
- (setq completion (replace-match "" t t completion)))
- (insert completion)
- (if (get-buffer-window "*Completions*")
- (delete-window (get-buffer-window "*Completions*")))
- (if (assoc completion table)
- (if (eq type :todo) (insert " ")
- (if (eq type :tag) (insert ":"))))
- (if (and (equal type :opt) (assoc completion table))
- (message "%s" (substitute-command-keys
- "Press \\[org-complete] again to insert example settings"))))
- (t
- (message "Making completion list...")
- (let ((list (sort (all-completions pattern table confirm)
- 'string<)))
- (with-output-to-temp-buffer "*Completions*"
- (condition-case nil
- ;; Protection needed for XEmacs and emacs 21
- (display-completion-list list pattern)
- (error (display-completion-list list)))))
- (message "Making completion list...%s" "done"))))))
+ (confirm (lambda (x) (stringp (car x))))
+ (searchhead (equal (char-before beg) ?*))
+ (tag (and (equal (char-before beg1) ?:)
+ (equal (char-after (point-at-bol)) ?*)))
+ (prop (and (equal (char-before beg1) ?:)
+ (not (equal (char-after (point-at-bol)) ?*))))
+ (texp (equal (char-before beg) ?\\))
+ (link (equal (char-before beg) ?\[))
+ (opt (equal (buffer-substring (max (point-at-bol) (- beg 2))
+ beg)
+ "#+"))
+ (startup (string-match "^#\\+STARTUP:.*"
+ (buffer-substring (point-at-bol) (point))))
+ (completion-ignore-case opt)
+ (type nil)
+ (tbl nil)
+ (table (cond
+ (opt
+ (setq type :opt)
+ (append
+ (mapcar
+ (lambda (x)
+ (string-match "^#\\+\\(\\([A-Z_]+:?\\).*\\)" x)
+ (cons (match-string 2 x) (match-string 1 x)))
+ (org-split-string (org-get-current-options) "\n"))
+ (mapcar 'list org-additional-option-like-keywords)))
+ (startup
+ (setq type :startup)
+ org-startup-options)
+ (link (append org-link-abbrev-alist-local
+ org-link-abbrev-alist))
+ (texp
+ (setq type :tex)
+ org-html-entities)
+ ((string-match "\\`\\*+[ \t]+\\'"
+ (buffer-substring (point-at-bol) beg))
+ (setq type :todo)
+ (mapcar 'list org-todo-keywords-1))
+ (searchhead
+ (setq type :searchhead)
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward org-todo-line-regexp nil t)
+ (push (list
+ (org-make-org-heading-search-string
+ (match-string 3) t))
+ tbl)))
+ tbl)
+ (tag (setq type :tag beg beg1)
+ (or org-tag-alist (org-get-buffer-tags)))
+ (prop (setq type :prop beg beg1)
+ (mapcar 'list (org-buffer-property-keys)))
+ (t (progn
+ (call-interactively org-completion-fallback-command)
+ (throw 'exit nil)))))
+ (pattern (buffer-substring-no-properties beg end))
+ (completion (try-completion pattern table confirm)))
+ (cond ((eq completion t)
+ (if (not (assoc (upcase pattern) table))
+ (message "Already complete")
+ (if (equal type :opt)
+ (insert (substring (cdr (assoc (upcase pattern) table))
+ (length pattern)))
+ (if (memq type '(:tag :prop)) (insert ":")))))
+ ((null completion)
+ (message "Can't find completion for \"%s\"" pattern)
+ (ding))
+ ((not (string= pattern completion))
+ (delete-region beg end)
+ (if (string-match " +$" completion)
+ (setq completion (replace-match "" t t completion)))
+ (insert completion)
+ (if (get-buffer-window "*Completions*")
+ (delete-window (get-buffer-window "*Completions*")))
+ (if (assoc completion table)
+ (if (eq type :todo) (insert " ")
+ (if (memq type '(:tag :prop)) (insert ":"))))
+ (if (and (equal type :opt) (assoc completion table))
+ (message "%s" (substitute-command-keys
+ "Press \\[org-complete] again to insert example settings"))))
+ (t
+ (message "Making completion list...")
+ (let ((list (sort (all-completions pattern table confirm)
+ 'string<)))
+ (with-output-to-temp-buffer "*Completions*"
+ (condition-case nil
+ ;; Protection needed for XEmacs and emacs 21
+ (display-completion-list list pattern)
+ (error (display-completion-list list)))))
+ (message "Making completion list...%s" "done")))))))
;;;; TODO, DEADLINE, Comments
@@ -10894,18 +13307,79 @@ At all other locations, this simply calls `ispell-complete-word'."
(save-excursion
(org-back-to-heading)
(if (looking-at (concat outline-regexp
- "\\( +\\<" org-comment-string "\\>\\)"))
+ "\\( *\\<" org-comment-string "\\>[ \t]*\\)"))
(replace-match "" t t nil 1)
(if (looking-at outline-regexp)
(progn
(goto-char (match-end 0))
- (insert " " org-comment-string))))))
+ (insert org-comment-string " "))))))
(defvar org-last-todo-state-is-todo nil
"This is non-nil when the last TODO state change led to a TODO state.
If the last change removed the TODO tag or switched to DONE, then
this is nil.")
+(defvar org-setting-tags nil) ; dynamically skiped
+
+;; FIXME: better place
+(defun org-property-or-variable-value (var &optional inherit)
+ "Check if there is a property fixing the value of VAR.
+If yes, return this value. If not, return the current value of the variable."
+ (let ((prop (org-entry-get nil (symbol-name var) inherit)))
+ (if (and prop (stringp prop) (string-match "\\S-" prop))
+ (read prop)
+ (symbol-value var))))
+
+(defun org-parse-local-options (string var)
+ "Parse STRING for startup setting relevant for variable VAR."
+ (let ((rtn (symbol-value var))
+ e opts)
+ (save-match-data
+ (if (or (not string) (not (string-match "\\S-" string)))
+ rtn
+ (setq opts (delq nil (mapcar (lambda (x)
+ (setq e (assoc x org-startup-options))
+ (if (eq (nth 1 e) var) e nil))
+ (org-split-string string "[ \t]+"))))
+ (if (not opts)
+ rtn
+ (setq rtn nil)
+ (while (setq e (pop opts))
+ (if (not (nth 3 e))
+ (setq rtn (nth 2 e))
+ (if (not (listp rtn)) (setq rtn nil))
+ (push (nth 2 e) rtn)))
+ rtn)))))
+
+(defvar org-blocker-hook nil
+ "Hook for functions that are allowed to block a state change.
+
+Each function gets as its single argument a property list, see
+`org-trigger-hook' for more information about this list.
+
+If any of the functions in this hook returns nil, the state change
+is blocked.")
+
+(defvar org-trigger-hook nil
+ "Hook for functions that are triggered by a state change.
+
+Each function gets as its single argument a property list with at least
+the following elements:
+
+ (:type type-of-change :position pos-at-entry-start
+ :from old-state :to new-state)
+
+Depending on the type, more properties may be present.
+
+This mechanism is currently implemented for:
+
+TODO state changes
+------------------
+:type todo-state-change
+:from previous state (keyword as a string), or nil
+:to new state (keyword as a string), or nil")
+
+
(defun org-todo (&optional arg)
"Change the TODO state of an item.
The state of an item is given by a keyword at the start of the heading,
@@ -10926,90 +13400,239 @@ For calling through lisp, arg is also interpreted in the following way:
'none -> empty state
\"\"(empty string) -> switch to empty state
'done -> switch to DONE
+'nextset -> switch to the next set of keywords
+'previousset -> switch to the previous set of keywords
\"WAITING\" -> switch to the specified keyword, but only if it
really is a member of `org-todo-keywords'."
(interactive "P")
(save-excursion
- (org-back-to-heading)
- (if (looking-at outline-regexp) (goto-char (match-end 0)))
- (or (looking-at (concat " +" org-todo-regexp " *"))
- (looking-at " *"))
- (let* ((this (match-string 1))
- (last-state (or this ""))
- (completion-ignore-case t)
- (member (member this org-todo-keywords))
- (tail (cdr member))
- (state (cond
- ((equal arg '(4))
- ;; Read a state with completion
- (completing-read "State: " (mapcar (lambda(x) (list x))
- org-todo-keywords)
- nil t))
- ((eq arg 'right)
- (if this
- (if tail (car tail) nil)
- (car org-todo-keywords)))
- ((eq arg 'left)
- (if (equal member org-todo-keywords)
- nil
+ (catch 'exit
+ (org-back-to-heading)
+ (if (looking-at outline-regexp) (goto-char (1- (match-end 0))))
+ (or (looking-at (concat " +" org-todo-regexp " *"))
+ (looking-at " *"))
+ (let* ((match-data (match-data))
+ (startpos (line-beginning-position))
+ (logging (save-match-data (org-entry-get nil "LOGGING" t)))
+ (org-log-done (org-parse-local-options logging 'org-log-done))
+ (org-log-repeat (org-parse-local-options logging 'org-log-repeat))
+ (this (match-string 1))
+ (hl-pos (match-beginning 0))
+ (head (org-get-todo-sequence-head this))
+ (ass (assoc head org-todo-kwd-alist))
+ (interpret (nth 1 ass))
+ (done-word (nth 3 ass))
+ (final-done-word (nth 4 ass))
+ (last-state (or this ""))
+ (completion-ignore-case t)
+ (member (member this org-todo-keywords-1))
+ (tail (cdr member))
+ (state (cond
+ ((and org-todo-key-trigger
+ (or (and (equal arg '(4)) (eq org-use-fast-todo-selection 'prefix))
+ (and (not arg) org-use-fast-todo-selection
+ (not (eq org-use-fast-todo-selection 'prefix)))))
+ ;; Use fast selection
+ (org-fast-todo-selection))
+ ((and (equal arg '(4))
+ (or (not org-use-fast-todo-selection)
+ (not org-todo-key-trigger)))
+ ;; Read a state with completion
+ (completing-read "State: " (mapcar (lambda(x) (list x))
+ org-todo-keywords-1)
+ nil t))
+ ((eq arg 'right)
(if this
- (nth (- (length org-todo-keywords) (length tail) 2)
- org-todo-keywords)
- org-done-string)))
- (arg
- ;; user requests a specific state
- (cond
- ((equal arg "") nil)
- ((eq arg 'none) nil)
- ((eq arg 'done) (org-last org-todo-keywords))
- ((car (member arg org-todo-keywords)))
- ((nth (1- (prefix-numeric-value arg))
- org-todo-keywords))))
- ((null member) (car org-todo-keywords))
- ((null tail) nil) ;; -> first entry
- ((eq org-todo-interpretation 'sequence)
- (car tail))
- ((memq org-todo-interpretation '(type priority))
- (if (eq this-command last-command)
- (car tail)
- (if (> (length tail) 0) org-done-string nil)))
- (t nil)))
- (next (if state (concat " " state " ") " "))
- dostates)
- (replace-match next t t)
- (setq org-last-todo-state-is-todo
- (not (equal state org-done-string)))
- (when org-log-done
- (setq dostates (and (eq org-todo-interpretation 'sequence)
- (listp org-log-done) (memq 'state org-log-done)))
+ (if tail (car tail) nil)
+ (car org-todo-keywords-1)))
+ ((eq arg 'left)
+ (if (equal member org-todo-keywords-1)
+ nil
+ (if this
+ (nth (- (length org-todo-keywords-1) (length tail) 2)
+ org-todo-keywords-1)
+ (org-last org-todo-keywords-1))))
+ ((and (eq org-use-fast-todo-selection t) (equal arg '(4))
+ (setq arg nil))) ; hack to fall back to cycling
+ (arg
+ ;; user or caller requests a specific state
+ (cond
+ ((equal arg "") nil)
+ ((eq arg 'none) nil)
+ ((eq arg 'done) (or done-word (car org-done-keywords)))
+ ((eq arg 'nextset)
+ (or (car (cdr (member head org-todo-heads)))
+ (car org-todo-heads)))
+ ((eq arg 'previousset)
+ (let ((org-todo-heads (reverse org-todo-heads)))
+ (or (car (cdr (member head org-todo-heads)))
+ (car org-todo-heads))))
+ ((car (member arg org-todo-keywords-1)))
+ ((nth (1- (prefix-numeric-value arg))
+ org-todo-keywords-1))))
+ ((null member) (or head (car org-todo-keywords-1)))
+ ((equal this final-done-word) nil) ;; -> make empty
+ ((null tail) nil) ;; -> first entry
+ ((eq interpret 'sequence)
+ (car tail))
+ ((memq interpret '(type priority))
+ (if (eq this-command last-command)
+ (car tail)
+ (if (> (length tail) 0)
+ (or done-word (car org-done-keywords))
+ nil)))
+ (t nil)))
+ (next (if state (concat " " state " ") " "))
+ (change-plist (list :type 'todo-state-change :from this :to state
+ :position startpos))
+ dostates)
+ (when org-blocker-hook
+ (unless (save-excursion
+ (save-match-data
+ (run-hook-with-args-until-failure
+ 'org-blocker-hook change-plist)))
+ (if (interactive-p)
+ (error "TODO state change from %s to %s blocked" this state)
+ ;; fail silently
+ (message "TODO state change from %s to %s blocked" this state)
+ (throw 'exit nil))))
+ (store-match-data match-data)
+ (replace-match next t t)
+ (unless (pos-visible-in-window-p hl-pos)
+ (message "TODO state changed to %s" (org-trim next)))
+ (unless head
+ (setq head (org-get-todo-sequence-head state)
+ ass (assoc head org-todo-kwd-alist)
+ interpret (nth 1 ass)
+ done-word (nth 3 ass)
+ final-done-word (nth 4 ass)))
+ (when (memq arg '(nextset previousset))
+ (message "Keyword-Set %d/%d: %s"
+ (- (length org-todo-sets) -1
+ (length (memq (assoc state org-todo-sets) org-todo-sets)))
+ (length org-todo-sets)
+ (mapconcat 'identity (assoc state org-todo-sets) " ")))
+ (setq org-last-todo-state-is-todo
+ (not (member state org-done-keywords)))
+ (when (and org-log-done (not (memq arg '(nextset previousset))))
+ (setq dostates (and (listp org-log-done) (memq 'state org-log-done)
+ (or (not org-todo-log-states)
+ (member state org-todo-log-states))))
+
+ (cond
+ ((and state (member state org-not-done-keywords)
+ (not (member this org-not-done-keywords)))
+ ;; This is now a todo state and was not one before
+ ;; Remove any CLOSED timestamp, and possibly log the state change
+ (org-add-planning-info nil nil 'closed)
+ (and dostates (org-add-log-maybe 'state state 'findpos)))
+ ((and state dostates)
+ ;; This is a non-nil state, and we need to log it
+ (org-add-log-maybe 'state state 'findpos))
+ ((and (member state org-done-keywords)
+ (not (member this org-done-keywords)))
+ ;; It is now done, and it was not done before
+ (org-add-planning-info 'closed (org-current-time))
+ (org-add-log-maybe 'done state 'findpos))))
+ ;; Fixup tag positioning
+ (and org-auto-align-tags (not org-setting-tags) (org-set-tags nil t))
+ (run-hooks 'org-after-todo-state-change-hook)
+ (and (member state org-done-keywords) (org-auto-repeat-maybe))
+ (if (and arg (not (member state org-done-keywords)))
+ (setq head (org-get-todo-sequence-head state)))
+ (put-text-property (point-at-bol) (point-at-eol) 'org-todo-head head)
+ ;; Fixup cursor location if close to the keyword
+ (if (and (outline-on-heading-p)
+ (not (bolp))
+ (save-excursion (beginning-of-line 1)
+ (looking-at org-todo-line-regexp))
+ (< (point) (+ 2 (or (match-end 2) (match-end 1)))))
+ (progn
+ (goto-char (or (match-end 2) (match-end 1)))
+ (just-one-space)))
+ (when org-trigger-hook
+ (save-excursion
+ (run-hook-with-args 'org-trigger-hook change-plist)))))))
+
+(defun org-get-todo-sequence-head (kwd)
+ "Return the head of the TODO sequence to which KWD belongs.
+If KWD is not set, check if there is a text property remembering the
+right sequence."
+ (let (p)
+ (cond
+ ((not kwd)
+ (or (get-text-property (point-at-bol) 'org-todo-head)
+ (progn
+ (setq p (next-single-property-change (point-at-bol) 'org-todo-head
+ nil (point-at-eol)))
+ (get-text-property p 'org-todo-head))))
+ ((not (member kwd org-todo-keywords-1))
+ (car org-todo-keywords-1))
+ (t (nth 2 (assoc kwd org-todo-kwd-alist))))))
+
+(defun org-fast-todo-selection ()
+ "Fast TODO keyword selection with single keys.
+Returns the new TODO keyword, or nil if no state change should occur."
+ (let* ((fulltable org-todo-key-alist)
+ (done-keywords org-done-keywords) ;; needed for the faces.
+ (maxlen (apply 'max (mapcar
+ (lambda (x)
+ (if (stringp (car x)) (string-width (car x)) 0))
+ fulltable)))
+ (expert nil)
+ (fwidth (+ maxlen 3 1 3))
+ (ncol (/ (- (window-width) 4) fwidth))
+ tg cnt e c tbl
+ groups ingroup)
+ (save-window-excursion
+ (if expert
+ (set-buffer (get-buffer-create " *Org todo*"))
+; (delete-other-windows)
+; (split-window-vertically)
+ (org-switch-to-buffer-other-window (get-buffer-create " *Org todo*")))
+ (erase-buffer)
+ (org-set-local 'org-done-keywords done-keywords)
+ (setq tbl fulltable cnt 0)
+ (while (setq e (pop tbl))
(cond
- ((and state (not this))
- (org-add-planning-info nil nil 'closed)
- (and dostates (org-add-log-maybe 'state state 'findpos)))
- ((and state dostates)
- (org-add-log-maybe 'state state 'findpos))
- ((equal state org-done-string)
- ;; Planning info calls the note-setting command.
- (org-add-planning-info 'closed (org-current-time)
- (if (org-get-repeat) nil 'scheduled))
- (org-add-log-maybe 'done state 'findpos))))
- ;; Fixup tag positioning
- (and org-auto-align-tags (org-set-tags nil t))
- (run-hooks 'org-after-todo-state-change-hook)
- (and (equal state org-done-string) (org-auto-repeat-maybe))
- ))
- ;; Fixup cursor location if close to the keyword
- (if (and (outline-on-heading-p)
- (not (bolp))
- (save-excursion (beginning-of-line 1)
- (looking-at org-todo-line-regexp))
- (< (point) (+ 2 (or (match-end 2) (match-end 1)))))
- (progn
- (goto-char (or (match-end 2) (match-end 1)))
- (just-one-space))))
+ ((equal e '(:startgroup))
+ (push '() groups) (setq ingroup t)
+ (when (not (= cnt 0))
+ (setq cnt 0)
+ (insert "\n"))
+ (insert "{ "))
+ ((equal e '(:endgroup))
+ (setq ingroup nil cnt 0)
+ (insert "}\n"))
+ (t
+ (setq tg (car e) c (cdr e))
+ (if ingroup (push tg (car groups)))
+ (setq tg (org-add-props tg nil 'face
+ (org-get-todo-face tg)))
+ (if (and (= cnt 0) (not ingroup)) (insert " "))
+ (insert "[" c "] " tg (make-string
+ (- fwidth 4 (length tg)) ?\ ))
+ (when (= (setq cnt (1+ cnt)) ncol)
+ (insert "\n")
+ (if ingroup (insert " "))
+ (setq cnt 0)))))
+ (insert "\n")
+ (goto-char (point-min))
+ (if (and (not expert) (fboundp 'fit-window-to-buffer))
+ (fit-window-to-buffer))
+ (message "[a-z..]:Set [SPC]:clear")
+ (setq c (let ((inhibit-quit t)) (read-char-exclusive)))
+ (cond
+ ((or (= c ?\C-g)
+ (and (= c ?q) (not (rassoc c fulltable))))
+ (setq quit-flag t))
+ ((= c ?\ ) nil)
+ ((setq e (rassoc c fulltable) tg (car e))
+ tg)
+ (t (setq quit-flag t))))))
(defun org-get-repeat ()
- "Return the REPEAT statement of this entry."
+ "Check if tere is a deadline/schedule with repeater in this entry."
(save-match-data
(save-excursion
(org-back-to-heading t)
@@ -11020,24 +13643,29 @@ For calling through lisp, arg is also interpreted in the following way:
(defvar org-last-changed-timestamp)
(defvar org-log-post-message)
(defun org-auto-repeat-maybe ()
- "Check if the current headline contains a REPEAT key.
-If yes, set TODO state back to what it was and change any SCHEDULED
-or DEADLINE times the new date.
+ "Check if the current headline contains a repeated deadline/schedule.
+If yes, set TODO state back to what it was and change the base date
+of repeating deadline/scheduled time stamps to new date.
This function should be run in the `org-after-todo-state-change-hook'."
;; last-state is dynamically scoped into this function
- (let ((repeat (org-get-repeat))
- (whata '(("d" . day) ("m" . month) ("y" . year)))
- (msg "Entry repeats: ")
- (org-log-done)
- re type n what start)
+ (let* ((repeat (org-get-repeat))
+ (aa (assoc last-state org-todo-kwd-alist))
+ (interpret (nth 1 aa))
+ (head (nth 2 aa))
+ (done-word (nth 3 aa))
+ (whata '(("d" . day) ("m" . month) ("y" . year)))
+ (msg "Entry repeats: ")
+ (org-log-done)
+ re type n what ts)
(when repeat
- (org-todo (if (eq 'org-todo-interpretation 'type)
- last-state
- (car org-todo-keywords)))
- (unless (memq 'org-add-log-note (default-value 'post-command-hook))
+ (org-todo (if (eq interpret 'type) last-state head))
+ (when (and org-log-repeat
+ (not (memq 'org-add-log-note
+ (default-value 'post-command-hook))))
;; Make sure a note is taken
(let ((org-log-done '(done)))
- (org-add-log-maybe 'done org-done-string 'findpos)))
+ (org-add-log-maybe 'done (or done-word (car org-done-keywords))
+ 'findpos)))
(org-back-to-heading t)
(org-add-planning-info nil nil 'closed)
(setq re (concat "\\(" org-scheduled-time-regexp "\\)\\|\\("
@@ -11045,11 +13673,10 @@ This function should be run in the `org-after-todo-state-change-hook'."
(while (re-search-forward
re (save-excursion (outline-next-heading) (point)) t)
(setq type (if (match-end 1) org-scheduled-string org-deadline-string)
- start 0)
- (while (string-match "\\([-+]?[0-9]+\\)\\([dwmy]\\)" repeat start)
- (setq start (match-end 0)
- n (string-to-number (match-string 1 repeat))
- what (match-string 2 repeat))
+ ts (match-string (if (match-end 2) 2 4)))
+ (when (string-match "\\([-+]?[0-9]+\\)\\([dwmy]\\)" ts)
+ (setq n (string-to-number (match-string 1 ts))
+ what (match-string 2 ts))
(if (equal what "w") (setq n (* n 7) what "d"))
(org-timestamp-change n (cdr (assoc what whata))))
(setq msg (concat msg type org-last-changed-timestamp " ")))
@@ -11062,32 +13689,43 @@ The tree will show the lines where the regexp matches, and all higher
headlines above the match.
With \\[universal-argument] prefix, also show the DONE entries.
With a numeric prefix N, construct a sparse tree for the Nth element
-of `org-todo-keywords'."
+of `org-todo-keywords-1'."
(interactive "P")
(let ((case-fold-search nil)
(kwd-re
(cond ((null arg) org-not-done-regexp)
- ((equal arg '(4)) org-todo-regexp)
- ((<= (prefix-numeric-value arg) (length org-todo-keywords))
+ ((equal arg '(4))
+ (let ((kwd (completing-read "Keyword (or KWD1|KWD2|...): "
+ (mapcar 'list org-todo-keywords-1))))
+ (concat "\\("
+ (mapconcat 'identity (org-split-string kwd "|") "\\|")
+ "\\)\\>")))
+ ((<= (prefix-numeric-value arg) (length org-todo-keywords-1))
(regexp-quote (nth (1- (prefix-numeric-value arg))
- org-todo-keywords)))
+ org-todo-keywords-1)))
(t (error "Invalid prefix argument: %s" arg)))))
(message "%d TODO entries found"
- (org-occur (concat "^" outline-regexp " +" kwd-re )))))
+ (org-occur (concat "^" outline-regexp " *" kwd-re )))))
-(defun org-deadline ()
- "Insert the DEADLINE: string to make a deadline.
-A timestamp is also inserted - use \\[org-timestamp-up] and \\[org-timestamp-down]
-to modify it to the correct date."
- (interactive)
- (org-add-planning-info 'deadline nil 'closed))
+(defun org-deadline (&optional remove)
+ "Insert the \"DEADLINE:\" string with a timestamp to make a deadline.
+With argument REMOVE, remove any deadline from the item."
+ (interactive "P")
+ (if remove
+ (progn
+ (org-add-planning-info nil nil 'deadline)
+ (message "Item no longer has a deadline."))
+ (org-add-planning-info 'deadline nil 'closed)))
-(defun org-schedule ()
- "Insert the SCHEDULED: string to schedule a TODO item.
-A timestamp is also inserted - use \\[org-timestamp-up] and \\[org-timestamp-down]
-to modify it to the correct date."
- (interactive)
- (org-add-planning-info 'scheduled nil 'closed))
+(defun org-schedule (&optional remove)
+ "Insert the SCHEDULED: string with a timestamp to schedule a TODO item.
+With argument REMOVE, remove any scheduling date from the item."
+ (interactive "P")
+ (if remove
+ (progn
+ (org-add-planning-info nil nil 'scheduled)
+ (message "Item is no longer scheduled."))
+ (org-add-planning-info 'scheduled nil 'closed)))
(defun org-add-planning-info (what &optional time &rest remove)
"Insert new timestamp with keyword in the line directly after the headline.
@@ -11096,13 +13734,14 @@ If non is given, the user is prompted for a date.
REMOVE indicates what kind of entries to remove. An old WHAT entry will also
be removed."
(interactive)
- (let (org-time-was-given)
+ (let (org-time-was-given org-end-time-was-given)
(when what (setq time (or time (org-read-date nil 'to-time))))
(when (and org-insert-labeled-timestamps-at-point
(member what '(scheduled deadline)))
(insert
(if (eq what 'scheduled) org-scheduled-string org-deadline-string) " ")
- (org-insert-time-stamp time org-time-was-given)
+ (org-insert-time-stamp time org-time-was-given
+ nil nil nil (list org-end-time-was-given))
(setq what nil))
(save-excursion
(save-restriction
@@ -11111,13 +13750,14 @@ be removed."
(looking-at (concat outline-regexp "\\( *\\)[^\r\n]*"))
(goto-char (match-end 1))
(setq col (current-column))
- (goto-char (1+ (match-end 0)))
+ (goto-char (match-end 0))
+ (if (eobp) (insert "\n") (forward-char 1))
(if (and (not (looking-at outline-regexp))
(looking-at (concat "[^\r\n]*?" org-keyword-time-regexp
"[^\r\n]*"))
(not (equal (match-string 1) org-clock-string)))
(narrow-to-region (match-beginning 0) (match-end 0))
- (insert "\n")
+ (insert-before-markers "\n")
(backward-char 1)
(narrow-to-region (point) (point))
(indent-to-column col))
@@ -11143,9 +13783,12 @@ be removed."
((eq what 'deadline) org-deadline-string)
((eq what 'closed) org-closed-string))
" ")
- (org-insert-time-stamp time
- (or org-time-was-given (eq what 'closed))
- (eq what 'closed))
+ (setq ts (org-insert-time-stamp
+ time
+ (or org-time-was-given
+ (and (eq what 'closed) org-log-done-with-time))
+ (eq what 'closed)
+ nil nil (list org-end-time-was-given)))
(end-of-line 1))
(goto-char (point-min))
(widen)
@@ -11163,6 +13806,7 @@ be removed."
The auto-repeater uses this.")
(defun org-add-log-maybe (&optional purpose state findpos)
+ "Set up the post command hook to take a note."
(save-excursion
(when (and (listp org-log-done)
(memq purpose org-log-done))
@@ -11171,12 +13815,24 @@ The auto-repeater uses this.")
(looking-at (concat outline-regexp "\\( *\\)[^\r\n]*"
"\\(\n[^\r\n]*?" org-keyword-time-not-clock-regexp
"[^\r\n]*\\)?"))
- (goto-char (match-end 0)))
+ (goto-char (match-end 0))
+ (unless org-log-states-order-reversed
+ (and (= (char-after) ?\n) (forward-char 1))
+ (org-skip-over-state-notes)
+ (skip-chars-backward " \t\n\r")))
(move-marker org-log-note-marker (point))
(setq org-log-note-purpose purpose)
(setq org-log-note-state state)
(add-hook 'post-command-hook 'org-add-log-note 'append))))
+(defun org-skip-over-state-notes ()
+ "Skip past the list of State notes in an entry."
+ (if (looking-at "\n[ \t]*- State") (forward-char 1))
+ (while (looking-at "[ \t]*- State")
+ (condition-case nil
+ (org-next-item)
+ (error (org-end-of-item)))))
+
(defun org-add-log-note (&optional purpose)
"Pop up a window for taking a note, and add this note later at point."
(remove-hook 'post-command-hook 'org-add-log-note)
@@ -11185,14 +13841,16 @@ The auto-repeater uses this.")
(move-marker org-log-note-return-to (point))
(switch-to-buffer (marker-buffer org-log-note-marker))
(goto-char org-log-note-marker)
- (switch-to-buffer-other-window "*Org Note*")
+ (org-switch-to-buffer-other-window "*Org Note*")
(erase-buffer)
(let ((org-inhibit-startup t)) (org-mode))
- (insert (format "# Insert note for %s, finish with C-c C-c.\n\n"
+ (insert (format "# Insert note for %s.
+# Finish with C-c C-c, or cancel with C-c C-k.\n\n"
(cond
((eq org-log-note-purpose 'clock-out) "stopped clock")
((eq org-log-note-purpose 'done) "closed todo item")
- ((eq org-log-note-purpose 'state) "state change")
+ ((eq org-log-note-purpose 'state)
+ (format "state change to \"%s\"" org-log-note-state))
(t (error "This should not happen")))))
(org-set-local 'org-finish-function 'org-store-log-note))
@@ -11202,8 +13860,8 @@ The auto-repeater uses this.")
(note (cdr (assq org-log-note-purpose org-log-note-headings)))
lines ind)
(kill-buffer (current-buffer))
- (if (string-match "^#.*\n[ \t\n]*" txt)
- (setq txt (replace-match "" t t txt)))
+ (while (string-match "\\`#.*\n[ \t\n]*" txt)
+ (setq txt (replace-match "" t t txt)))
(if (string-match "\\s-+\\'" txt)
(setq txt (replace-match "" t t txt)))
(setq lines (org-split-string txt "\n"))
@@ -11221,23 +13879,64 @@ The auto-repeater uses this.")
"")))))
(if lines (setq note (concat note " \\\\")))
(push note lines))
- (save-excursion
- (set-buffer (marker-buffer org-log-note-marker))
+ (when (or current-prefix-arg org-note-abort) (setq lines nil))
+ (when lines
(save-excursion
- (goto-char org-log-note-marker)
- (move-marker org-log-note-marker nil)
- (end-of-line 1)
- (if (not (bolp)) (insert "\n")) (indent-relative nil)
- (setq ind (concat (buffer-substring (point-at-bol) (point)) " "))
- (insert " - " (pop lines))
- (while lines
- (insert "\n" ind (pop lines))))))
+ (set-buffer (marker-buffer org-log-note-marker))
+ (save-excursion
+ (goto-char org-log-note-marker)
+ (move-marker org-log-note-marker nil)
+ (end-of-line 1)
+ (if (not (bolp)) (let ((inhibit-read-only t)) (insert "\n")))
+ (indent-relative nil)
+ (insert " - " (pop lines))
+ (org-indent-line-function)
+ (beginning-of-line 1)
+ (looking-at "[ \t]*")
+ (setq ind (concat (match-string 0) " "))
+ (end-of-line 1)
+ (while lines (insert "\n" ind (pop lines)))))))
(set-window-configuration org-log-note-window-configuration)
(with-current-buffer (marker-buffer org-log-note-return-to)
(goto-char org-log-note-return-to))
(move-marker org-log-note-return-to nil)
(and org-log-post-message (message org-log-post-message)))
+;; FIXME: what else would be useful?
+;; - priority
+;; - date
+
+(defun org-sparse-tree (&optional arg)
+ "Create a sparse tree, prompt for the details.
+This command can create sparse trees. You first need to select the type
+of match used to create the tree:
+
+t Show entries with a specific TODO keyword.
+T Show entries selected by a tags match.
+p Enter a property name and its value (both with completion on existing
+ names/values) and show entries with that property.
+r Show entries matching a regular expression"
+ (interactive "P")
+ (let (ans kwd value)
+ (message "Sparse tree: [r]egexp [t]odo-kwd [T]ag [p]roperty")
+ (setq ans (read-char-exclusive))
+ (cond
+ ((equal ans ?t)
+ (org-show-todo-tree '(4)))
+ ((equal ans ?T)
+ (call-interactively 'org-tags-sparse-tree))
+ ((member ans '(?p ?P))
+ (setq kwd (completing-read "Property: "
+ (mapcar 'list (org-buffer-property-keys))))
+ (setq value (completing-read "Value: "
+ (mapcar 'list (org-property-values kwd))))
+ (unless (string-match "\\`{.*}\\'" value)
+ (setq value (concat "\"" value "\"")))
+ (org-tags-sparse-tree arg (concat kwd "=" value)))
+ ((member ans '(?r ?R))
+ (call-interactively 'org-occur))
+ (t (error "No such sparse tree command \"%c\"" ans)))))
+
(defvar org-occur-highlights nil)
(make-variable-buffer-local 'org-occur-highlights)
@@ -11264,7 +13963,8 @@ that the match should indeed be shown."
(when (or (not callback)
(save-match-data (funcall callback)))
(setq cnt (1+ cnt))
- (org-highlight-new-match (match-beginning 0) (match-end 0))
+ (when org-highlight-sparse-tree-matches
+ (org-highlight-new-match (match-beginning 0) (match-end 0)))
(org-show-context 'occur-tree))))
(when org-remove-highlights-with-change
(org-add-hook 'before-change-functions 'org-remove-occur-highlights
@@ -11342,7 +14042,7 @@ from the `before-change-functions' in the current buffer."
;;;; Priorities
-(defvar org-priority-regexp ".*?\\(\\[#\\([A-Z]\\)\\] ?\\)"
+(defvar org-priority-regexp ".*?\\(\\[#\\([A-Z0-9]\\)\\] ?\\)"
"Regular expression matching the priority indicator.")
(defvar org-remove-priority-next-time nil)
@@ -11359,7 +14059,7 @@ from the `before-change-functions' in the current buffer."
(defun org-priority (&optional action)
"Change the priority of an item by ARG.
-ACTION can be set, up, or down."
+ACTION can be `set', `up', `down', or a character."
(interactive)
(setq action (or action 'set))
(let (current new news have remove)
@@ -11370,19 +14070,32 @@ ACTION can be set, up, or down."
have t)
(setq current org-default-priority))
(cond
- ((eq action 'set)
- (message "Priority A-%c, SPC to remove: " org-lowest-priority)
- (setq new (read-char-exclusive))
+ ((or (eq action 'set) (integerp action))
+ (if (integerp action)
+ (setq new action)
+ (message "Priority %c-%c, SPC to remove: " org-highest-priority org-lowest-priority)
+ (setq new (read-char-exclusive)))
+ (if (and (= (upcase org-highest-priority) org-highest-priority)
+ (= (upcase org-lowest-priority) org-lowest-priority))
+ (setq new (upcase new)))
(cond ((equal new ?\ ) (setq remove t))
- ((or (< (upcase new) ?A) (> (upcase new) org-lowest-priority))
+ ((or (< (upcase new) org-highest-priority) (> (upcase new) org-lowest-priority))
(error "Priority must be between `%c' and `%c'"
- ?A org-lowest-priority))))
+ org-highest-priority org-lowest-priority))))
((eq action 'up)
- (setq new (1- current)))
+ (if (and (not have) (eq last-command this-command))
+ (setq new org-lowest-priority)
+ (setq new (if (and org-priority-start-cycle-with-default (not have))
+ org-default-priority (1- current)))))
((eq action 'down)
- (setq new (1+ current)))
+ (if (and (not have) (eq last-command this-command))
+ (setq new org-highest-priority)
+ (setq new (if (and org-priority-start-cycle-with-default (not have))
+ org-default-priority (1+ current)))))
(t (error "Invalid action")))
- (setq new (min (max ?A (upcase new)) org-lowest-priority))
+ (if (or (< (upcase new) org-highest-priority)
+ (> (upcase new) org-lowest-priority))
+ (setq remove t))
(setq news (format "%c" new))
(if have
(if remove
@@ -11397,6 +14110,7 @@ ACTION can be set, up, or down."
(insert " [#" news "]"))
(goto-char (match-beginning 3))
(insert "[#" news "] ")))))
+ (org-preserve-lc (org-set-tags nil 'align))
(if remove
(message "Priority removed")
(message "Priority of current item set to %s" news))))
@@ -11419,32 +14133,36 @@ evaluated, testing if a given set of tags qualifies a headline for
inclusion. When TODO-ONLY is non-nil, only lines with a TODO keyword
are included in the output."
(let* ((re (concat "[\n\r]" outline-regexp " *\\(\\<\\("
- (mapconcat 'regexp-quote
- (nreverse (cdr (reverse org-todo-keywords)))
- "\\|")
- "\\>\\)\\)? *\\(.*?\\)\\(:[A-Za-z_@0-9:]+:\\)?[ \t]*$"))
+ (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
+ (org-re
+ "\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:]_@:]+:\\)?[ \t]*$")))
(props (list 'face nil
'done-face 'org-done
'undone-face nil
'mouse-face 'highlight
'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
- (abbreviate-file-name buffer-file-name))))
+ (abbreviate-file-name
+ (or (buffer-file-name (buffer-base-buffer))
+ (buffer-name (buffer-base-buffer)))))))
(case-fold-search nil)
lspos
tags tags-list tags-alist (llast 0) rtn level category i txt
- todo marker entry)
+ todo marker entry priority)
(save-excursion
(goto-char (point-min))
- (when (eq action 'sparse-tree) (org-overview))
+ (when (eq action 'sparse-tree)
+ (org-overview)
+ (org-remove-occur-highlights))
(while (re-search-forward re nil t)
(catch :skip
(setq todo (if (match-end 1) (match-string 2))
tags (if (match-end 4) (match-string 4)))
(goto-char (setq lspos (1+ (match-beginning 0))))
- (setq level (funcall outline-level)
+ (setq level (org-reduced-level (funcall outline-level))
category (org-get-category))
(setq i llast llast level)
;; remove tag lists from same and sublevels
@@ -11462,14 +14180,19 @@ are included in the output."
(if org-use-tag-inheritance
(apply 'append (mapcar 'cdr tags-alist))
tags))
- (when (and (or (not todo-only) todo)
+ (when (and (or (not todo-only) (member todo org-not-done-keywords))
(eval matcher)
(or (not org-agenda-skip-archived-trees)
(not (member org-archive-tag tags-list))))
(and (eq action 'agenda) (org-agenda-skip))
;; list this headline
+
(if (eq action 'sparse-tree)
(progn
+ (and org-highlight-sparse-tree-matches
+ (org-get-heading) (match-end 0)
+ (org-highlight-new-match
+ (match-beginning 0) (match-beginning 1)))
(org-show-context 'tags-tree))
(setq txt (org-format-agenda-item
""
@@ -11477,11 +14200,13 @@ are included in the output."
(if org-tags-match-list-sublevels
(make-string (1- level) ?.) "")
(org-get-heading))
- category tags-list))
+ category tags-list)
+ priority (org-get-priority txt))
(goto-char lspos)
(setq marker (org-agenda-new-marker))
(org-add-props txt props
- 'org-marker marker 'org-hd-marker marker 'org-category category)
+ 'org-marker marker 'org-hd-marker marker 'org-category category
+ 'priority priority 'type "tagsmatch")
(push txt rtn))
;; if we are to skip sublevels, jump to end of subtree
(or org-tags-match-list-sublevels (org-end-of-subtree t))))))
@@ -11501,25 +14226,47 @@ also TODO lines."
(interactive "P")
(org-scan-tags 'sparse-tree (cdr (org-make-tags-matcher match)) todo-only))
+(defvar org-cached-props nil)
+(defun org-cached-entry-get (pom property)
+ (if org-use-property-inheritance
+ ;; Caching is not possible, check it directly
+ (org-entry-get pom property 'inherit)
+ ;; Get all properties, so that we can do complicated checks easily
+ (cdr (assoc property (or org-cached-props
+ (setq org-cached-props
+ (org-entry-properties pom)))))))
+
+(defun org-global-tags-completion-table (&optional files)
+ "Return the list of all tags in all agenda buffer/files."
+ (save-excursion
+ (org-uniquify
+ (apply 'append
+ (mapcar
+ (lambda (file)
+ (set-buffer (find-file-noselect file))
+ (org-get-buffer-tags))
+ (if (and files (car files))
+ files
+ (org-agenda-files)))))))
+
(defun org-make-tags-matcher (match)
"Create the TAGS//TODO matcher form for the selection string MATCH."
;; todo-only is scoped dynamically into this function, and the function
;; may change it it the matcher asksk for it.
(unless match
;; Get a new match request, with completion
- (setq org-last-tags-completion-table
- (or org-tag-alist
- org-last-tags-completion-table))
- (setq match (completing-read
- "Match: " 'org-tags-completion-function nil nil nil
- 'org-tags-history)))
+ (let ((org-last-tags-completion-table
+ (org-global-tags-completion-table)))
+ (setq match (completing-read
+ "Match: " 'org-tags-completion-function nil nil nil
+ 'org-tags-history))))
;; Parse the string and create a lisp form
(let ((match0 match)
- (re "^&?\\([-+:]\\)?\\({[^}]+}\\|LEVEL=\\([0-9]+\\)\\|[A-Za-z_@0-9]+\\)")
+ (re (org-re "^&?\\([-+:]\\)?\\({[^}]+}\\|LEVEL=\\([0-9]+\\)\\|\\([[:alnum:]_]+\\)=\\({[^}]+}\\|\"[^\"]+\"\\)\\|[[:alnum:]_@]+\\)"))
minus tag mm
tagsmatch todomatch tagsmatcher todomatcher kwd matcher
- orterms term orlist re-p level-p)
+ orterms term orlist re-p level-p prop-p pn pv)
(if (string-match "/+" match)
;; match contains also a todo-matching request
(progn
@@ -11545,10 +14292,19 @@ also TODO lines."
tag (match-string 2 term)
re-p (equal (string-to-char tag) ?{)
level-p (match-end 3)
+ prop-p (match-end 4)
mm (cond
(re-p `(org-match-any-p ,(substring tag 1 -1) tags-list))
(level-p `(= level ,(string-to-number
(match-string 3 term))))
+ (prop-p
+ (setq pn (match-string 4 term)
+ pv (match-string 5 term)
+ re-p (equal (string-to-char pv) ?{)
+ pv (substring pv 1 -1))
+ (if re-p
+ `(string-match ,pv (or (org-cached-entry-get nil ,pn) ""))
+ `(equal ,pv (org-cached-entry-get nil ,pn))))
(t `(member ,(downcase tag) tags-list)))
mm (if minus (list 'not mm) mm)
term (substring term (match-end 0)))
@@ -11558,7 +14314,9 @@ also TODO lines."
(car tagsmatcher))
orlist)
(setq tagsmatcher nil))
- (setq tagsmatcher (if (> (length orlist) 1) (cons 'or orlist) (car orlist))))
+ (setq tagsmatcher (if (> (length orlist) 1) (cons 'or orlist) (car orlist)))
+ (setq tagsmatcher
+ (list 'progn '(setq org-cached-props nil) tagsmatcher)))
;; Make the todo matcher
(if (or (not todomatch) (not (string-match "\\S-" todomatch)))
@@ -11599,18 +14357,43 @@ also TODO lines."
(defvar org-tags-overlay (org-make-overlay 1 1))
(org-detach-overlay org-tags-overlay)
+(defun org-align-tags-here (to-col)
+ ;; Assumes that this is a headline
+ (let ((pos (point)) (col (current-column)) tags)
+ (beginning-of-line 1)
+ (if (and (looking-at (org-re ".*?\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
+ (< pos (match-beginning 2)))
+ (progn
+ (setq tags (match-string 2))
+ (goto-char (match-beginning 1))
+ (insert " ")
+ (delete-region (point) (1+ (match-end 0)))
+ (backward-char 1)
+ (move-to-column
+ (max (1+ (current-column))
+ (1+ col)
+ (if (> to-col 0)
+ to-col
+ (- (abs to-col) (length tags))))
+ t)
+ (insert tags)
+ (move-to-column (min (current-column) col) t))
+ (goto-char pos))))
+
(defun org-set-tags (&optional arg just-align)
"Set the tags for the current headline.
With prefix ARG, realign all tags in headings in the current buffer."
(interactive "P")
(let* ((re (concat "^" outline-regexp))
- (current (org-get-tags))
+ (current (org-get-tags-string))
+ (col (current-column))
+ (org-setting-tags t)
table current-tags inherited-tags ; computed below when needed
tags p0 c0 c1 rpl)
(if arg
(save-excursion
(goto-char (point-min))
- (let (buffer-invisibility-spec) ; Emacs 21 compatibility
+ (let ((buffer-invisibility-spec (org-inhibit-invisibility)))
(while (re-search-forward re nil t)
(org-set-tags nil t)
(end-of-line 1)))
@@ -11629,14 +14412,18 @@ With prefix ARG, realign all tags in headings in the current buffer."
(if (or (eq t org-use-fast-tag-selection)
(and org-use-fast-tag-selection
(delq nil (mapcar 'cdr table))))
- (org-fast-tag-selection current-tags inherited-tags table)
+ (org-fast-tag-selection
+ current-tags inherited-tags table
+ (if org-fast-tag-selection-include-todo org-todo-key-alist))
(let ((org-add-colon-after-tag-completion t))
(org-trim
- (completing-read "Tags: " 'org-tags-completion-function
- nil nil current 'org-tags-history))))))
+ (org-without-partial-completion
+ (completing-read "Tags: " 'org-tags-completion-function
+ nil nil current 'org-tags-history)))))))
(while (string-match "[-+&]+" tags)
;; No boolean logic, just a list
(setq tags (replace-match ":" t t tags))))
+
(if (string-match "\\`[\t ]*\\'" tags)
(setq tags "")
(unless (string-match ":$" tags) (setq tags (concat tags ":")))
@@ -11644,22 +14431,65 @@ With prefix ARG, realign all tags in headings in the current buffer."
;; Insert new tags at the correct column
(beginning-of-line 1)
- (if (re-search-forward
- (concat "\\([ \t]*" (regexp-quote current) "\\)[ \t]*$")
- (point-at-eol) t)
- (progn
- (if (equal tags "")
- (setq rpl "")
- (goto-char (match-beginning 0))
- (setq c0 (current-column) p0 (point)
- c1 (max (1+ c0) (if (> org-tags-column 0)
- org-tags-column
- (- (- org-tags-column) (length tags))))
- rpl (concat (make-string (max 0 (- c1 c0)) ?\ ) tags)))
- (replace-match rpl t t)
- (and (not (featurep 'xemacs)) c0 (tabify p0 (point)))
- tags)
- (error "Tags alignment failed")))))
+ (cond
+ ((and (equal current "") (equal tags "")))
+ ((re-search-forward
+ (concat "\\([ \t]*" (regexp-quote current) "\\)[ \t]*$")
+ (point-at-eol) t)
+ (if (equal tags "")
+ (setq rpl "")
+ (goto-char (match-beginning 0))
+ (setq c0 (current-column) p0 (point)
+ c1 (max (1+ c0) (if (> org-tags-column 0)
+ org-tags-column
+ (- (- org-tags-column) (length tags))))
+ rpl (concat (make-string (max 0 (- c1 c0)) ?\ ) tags)))
+ (replace-match rpl t t)
+ (and (not (featurep 'xemacs)) c0 (tabify p0 (point)))
+ tags)
+ (t (error "Tags alignment failed")))
+ (move-to-column col)
+ (unless just-align
+ (run-hooks 'org-after-tags-change-hook)))))
+
+(defun org-change-tag-in-region (beg end tag off)
+ "Add or remove TAG for each entry in the region.
+This works in the agenda, and also in an org-mode buffer."
+ (interactive
+ (list (region-beginning) (region-end)
+ (let ((org-last-tags-completion-table
+ (if (org-mode-p)
+ (org-get-buffer-tags)
+ (org-global-tags-completion-table))))
+ (completing-read
+ "Tag: " 'org-tags-completion-function nil nil nil
+ 'org-tags-history))
+ (progn
+ (message "[s]et or [r]emove? ")
+ (equal (read-char-exclusive) ?r))))
+ (if (fboundp 'deactivate-mark) (deactivate-mark))
+ (let ((agendap (equal major-mode 'org-agenda-mode))
+ l1 l2 m buf pos newhead (cnt 0))
+ (goto-char end)
+ (setq l2 (1- (org-current-line)))
+ (goto-char beg)
+ (setq l1 (org-current-line))
+ (loop for l from l1 to l2 do
+ (goto-line l)
+ (setq m (get-text-property (point) 'org-hd-marker))
+ (when (or (and (org-mode-p) (org-on-heading-p))
+ (and agendap m))
+ (setq buf (if agendap (marker-buffer m) (current-buffer))
+ pos (if agendap m (point)))
+ (with-current-buffer buf
+ (save-excursion
+ (save-restriction
+ (goto-char pos)
+ (setq cnt (1+ cnt))
+ (org-toggle-tag tag (if off 'off 'on))
+ (setq newhead (org-get-heading)))))
+ (and agendap (org-agenda-change-all-lines newhead m))))
+ (message "Tag :%s: %s in %d headings" tag (if off "removed" "set") cnt)))
(defun org-tags-completion-function (string predicate &optional flag)
(let (s1 s2 rtn (ctable org-last-tags-completion-table)
@@ -11673,11 +14503,12 @@ With prefix ARG, realign all tags in headings in the current buffer."
;; try completion
(setq rtn (try-completion s2 ctable confirm))
(if (stringp rtn)
- (concat s1 s2 (substring rtn (length s2))
- (if (and org-add-colon-after-tag-completion
- (assoc rtn ctable))
- ":" "")))
- )
+ (setq rtn
+ (concat s1 s2 (substring rtn (length s2))
+ (if (and org-add-colon-after-tag-completion
+ (assoc rtn ctable))
+ ":" ""))))
+ rtn)
((eq flag t)
;; all-completions
(all-completions s2 ctable confirm)
@@ -11711,31 +14542,35 @@ With prefix ARG, realign all tags in headings in the current buffer."
(put-text-property 0 (length s) 'face '(secondary-selection org-tag) s)
(org-overlay-display org-tags-overlay (concat prefix s)))))
-(defun org-fast-tag-selection (current inherited table)
+(defun org-fast-tag-selection (current inherited table &optional todo-table)
"Fast tag selection with single keys.
CURRENT is the current list of tags in the headline, INHERITED is the
list of inherited tags, and TABLE is an alist of tags and corresponding keys,
-possibly with grouping information.
+possibly with grouping information. TODO-TABLE is a similar table with
+TODO keywords, should these have keys assigned to them.
If the keys are nil, a-z are automatically assigned.
Returns the new tags string, or nil to not change the current settings."
- (let* ((maxlen (apply 'max (mapcar
+ (let* ((fulltable (append table todo-table))
+ (maxlen (apply 'max (mapcar
(lambda (x)
(if (stringp (car x)) (string-width (car x)) 0))
- table)))
+ fulltable)))
(buf (current-buffer))
(expert (eq org-fast-tag-selection-single-key 'expert))
(buffer-tags nil)
(fwidth (+ maxlen 3 1 3))
(ncol (/ (- (window-width) 4) fwidth))
(i-face 'org-done)
- (c-face 'org-tag)
+ (c-face 'org-todo)
tg cnt e c char c1 c2 ntable tbl rtn
ov-start ov-end ov-prefix
(exit-after-next org-fast-tag-selection-single-key)
+ (done-keywords org-done-keywords)
groups ingroup)
(save-excursion
(beginning-of-line 1)
- (if (looking-at ".*[ \t]\\(:[A-Za-z_@0-9:]+:\\)[ \t]*\\(\r\\|$\\)")
+ (if (looking-at
+ (org-re ".*[ \t]\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
(setq ov-start (match-beginning 1)
ov-end (match-end 1)
ov-prefix "")
@@ -11754,13 +14589,14 @@ Returns the new tags string, or nil to not change the current settings."
(set-buffer (get-buffer-create " *Org tags*"))
(delete-other-windows)
(split-window-vertically)
- (switch-to-buffer-other-window (get-buffer-create " *Org tags*")))
+ (org-switch-to-buffer-other-window (get-buffer-create " *Org tags*")))
(erase-buffer)
+ (org-set-local 'org-done-keywords done-keywords)
(org-fast-tag-insert "Inherited" inherited i-face "\n")
(org-fast-tag-insert "Current" current c-face "\n\n")
(org-fast-tag-show-exit exit-after-next)
(org-set-current-tags-overlay current ov-prefix)
- (setq tbl table char ?a cnt 0)
+ (setq tbl fulltable char ?a cnt 0)
(while (setq e (pop tbl))
(cond
((equal e '(:startgroup))
@@ -11788,6 +14624,8 @@ Returns the new tags string, or nil to not change the current settings."
(if ingroup (push tg (car groups)))
(setq tg (org-add-props tg nil 'face
(cond
+ ((not (assoc tg table))
+ (org-get-todo-face tg))
((member tg current) c-face)
((member tg inherited) i-face)
(t nil))))
@@ -11824,7 +14662,7 @@ Returns the new tags string, or nil to not change the current settings."
(setq expert nil)
(delete-other-windows)
(split-window-vertically)
- (switch-to-buffer-other-window " *Org tags*")
+ (org-switch-to-buffer-other-window " *Org tags*")
(and (fboundp 'fit-window-to-buffer)
(fit-window-to-buffer))))
((or (= c ?\C-g)
@@ -11848,14 +14686,18 @@ Returns the new tags string, or nil to not change the current settings."
(setq current (delete tg current))
(push tg current)))
(if exit-after-next (setq exit-after-next 'now)))
+ ((setq e (rassoc c todo-table) tg (car e))
+ (with-current-buffer buf
+ (save-excursion (org-todo tg)))
+ (if exit-after-next (setq exit-after-next 'now)))
((setq e (rassoc c ntable) tg (car e))
(if (member tg current)
(setq current (delete tg current))
(loop for g in groups do
(if (member tg g)
- (mapcar (lambda (x)
- (setq current (delete x current)))
- g)))
+ (mapc (lambda (x)
+ (setq current (delete x current)))
+ g)))
(push tg current))
(if exit-after-next (setq exit-after-next 'now))))
@@ -11870,44 +14712,1514 @@ Returns the new tags string, or nil to not change the current settings."
(delete-region (point) (point-at-eol))
(org-fast-tag-insert "Current" current c-face)
(org-set-current-tags-overlay current ov-prefix)
- (while (re-search-forward "\\[.\\] \\([a-zA-Z0-9_@]+\\)" nil t)
+ (while (re-search-forward
+ (org-re "\\[.\\] \\([[:alnum:]_@]+\\)") nil t)
(setq tg (match-string 1))
- (add-text-properties (match-beginning 1) (match-end 1)
- (list 'face
- (cond
- ((member tg current) c-face)
- ((member tg inherited) i-face)
- (t nil)))))
+ (add-text-properties
+ (match-beginning 1) (match-end 1)
+ (list 'face
+ (cond
+ ((member tg current) c-face)
+ ((member tg inherited) i-face)
+ (t (get-text-property (match-beginning 1) 'face))))))
(goto-char (point-min)))))
(org-detach-overlay org-tags-overlay)
(if rtn
(mapconcat 'identity current ":")
nil))))
-(defun org-get-tags ()
+(defun org-get-tags-string ()
"Get the TAGS string in the current headline."
(unless (org-on-heading-p t)
(error "Not on a heading"))
(save-excursion
(beginning-of-line 1)
- (if (looking-at ".*[ \t]\\(:[A-Za-z_@0-9:]+:\\)[ \t]*\\(\r\\|$\\)")
+ (if (looking-at (org-re ".*[ \t]\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
(org-match-string-no-properties 1)
"")))
+(defun org-get-tags ()
+ "Get the list of tags specified in the current headline."
+ (org-split-string (org-get-tags-string) ":"))
+
(defun org-get-buffer-tags ()
"Get a table of all tags used in the buffer, for completion."
(let (tags)
(save-excursion
(goto-char (point-min))
- (while (re-search-forward "[ \t]:\\([A-Za-z_@0-9:]+\\):[ \t\r\n]" nil t)
- (mapc (lambda (x) (add-to-list 'tags x))
- (org-split-string (org-match-string-no-properties 1) ":"))))
+ (while (re-search-forward
+ (org-re "[ \t]:\\([[:alnum:]_@:]+\\):[ \t\r\n]") nil t)
+ (when (equal (char-after (point-at-bol 0)) ?*)
+ (mapc (lambda (x) (add-to-list 'tags x))
+ (org-split-string (org-match-string-no-properties 1) ":")))))
(mapcar 'list tags)))
+
+;;;; Properties
+
+;;; Setting and retrieving properties
+
+(defconst org-special-properties
+ '("TODO" "TAGS" "ALLTAGS" "DEADLINE" "SCHEDULED" "CLOCK" "PRIORITY")
+ "The special properties valid in Org-mode.
+
+These are properties that are not defined in the property drawer,
+but in some other way.")
+
+(defconst org-default-properties
+ '("ARCHIVE" "CATEGORY" "SUMMARY" "DESCRIPTION"
+ "LOCATION" "LOGGING" "COLUMNS")
+ "Some properties that are used by Org-mode for various purposes.
+Being in this list makes sure that they are offered for completion.")
+
+(defconst org-property-start-re "^[ \t]*:PROPERTIES:[ \t]*$"
+ "Regular expression matching the first line of a property drawer.")
+
+(defconst org-property-end-re "^[ \t]*:END:[ \t]*$"
+ "Regular expression matching the first line of a property drawer.")
+
+(defun org-property-action ()
+ "Do an action on properties."
+ (interactive)
+ (let (c)
+ (org-at-property-p)
+ (message "Property Action: [s]et [d]elete [D]elete globally [c]ompute")
+ (setq c (read-char-exclusive))
+ (cond
+ ((equal c ?s)
+ (call-interactively 'org-set-property))
+ ((equal c ?d)
+ (call-interactively 'org-delete-property))
+ ((equal c ?D)
+ (call-interactively 'org-delete-property-globally))
+ ((equal c ?c)
+ (call-interactively 'org-compute-property-at-point))
+ (t (error "No such property action %c" c)))))
+
+(defun org-at-property-p ()
+ "Is the cursor in a property line?"
+ ;; FIXME: Does not check if we are actually in the drawer.
+ ;; FIXME: also returns true on any drawers.....
+ ;; This is used by C-c C-c for property action.
+ (save-excursion
+ (beginning-of-line 1)
+ (looking-at (org-re "^[ \t]*\\(:\\([[:alpha:]][[:alnum:]_-]*\\):\\)[ \t]*\\(.*\\)"))))
+
+(defmacro org-with-point-at (pom &rest body)
+ "Move to buffer and point of point-or-marker POM for the duration of BODY."
+ (declare (indent 1) (debug t))
+ `(save-excursion
+ (if (markerp pom) (set-buffer (marker-buffer pom)))
+ (save-excursion
+ (goto-char (or pom (point)))
+ ,@body)))
+
+(defun org-get-property-block (&optional beg end force)
+ "Return the (beg . end) range of the body of the property drawer.
+BEG and END can be beginning and end of subtree, if not given
+they will be found.
+If the drawer does not exist and FORCE is non-nil, create the drawer."
+ (catch 'exit
+ (save-excursion
+ (let* ((beg (or beg (progn (org-back-to-heading t) (point))))
+ (end (or end (progn (outline-next-heading) (point)))))
+ (goto-char beg)
+ (if (re-search-forward org-property-start-re end t)
+ (setq beg (1+ (match-end 0)))
+ (if force
+ (save-excursion
+ (org-insert-property-drawer)
+ (setq end (progn (outline-next-heading) (point))))
+ (throw 'exit nil))
+ (goto-char beg)
+ (if (re-search-forward org-property-start-re end t)
+ (setq beg (1+ (match-end 0)))))
+ (if (re-search-forward org-property-end-re end t)
+ (setq end (match-beginning 0))
+ (or force (throw 'exit nil))
+ (goto-char beg)
+ (setq end beg)
+ (org-indent-line-function)
+ (insert ":END:\n"))
+ (cons beg end)))))
+
+(defun org-entry-properties (&optional pom which)
+ "Get all properties of the entry at point-or-marker POM.
+This includes the TODO keyword, the tags, time strings for deadline,
+scheduled, and clocking, and any additional properties defined in the
+entry. The return value is an alist, keys may occur multiple times
+if the property key was used several times.
+POM may also be nil, in which case the current entry is used.
+If WHICH is nil or `all', get all properties. If WHICH is
+`special' or `standard', only get that subclass."
+ (setq which (or which 'all))
+ (org-with-point-at pom
+ (let ((clockstr (substring org-clock-string 0 -1))
+ (excluded '("TODO" "TAGS" "ALLTAGS" "PRIORITY"))
+ beg end range props sum-props key value)
+ (save-excursion
+ (when (condition-case nil (org-back-to-heading t) (error nil))
+ (setq beg (point))
+ (setq sum-props (get-text-property (point) 'org-summaries))
+ (outline-next-heading)
+ (setq end (point))
+ (when (memq which '(all special))
+ ;; Get the special properties, like TODO and tags
+ (goto-char beg)
+ (when (and (looking-at org-todo-line-regexp) (match-end 2))
+ (push (cons "TODO" (org-match-string-no-properties 2)) props))
+ (when (looking-at org-priority-regexp)
+ (push (cons "PRIORITY" (org-match-string-no-properties 2)) props))
+ (when (and (setq value (org-get-tags-string))
+ (string-match "\\S-" value))
+ (push (cons "TAGS" value) props))
+ (when (setq value (org-get-tags-at))
+ (push (cons "ALLTAGS" (concat ":" (mapconcat 'identity value ":") ":"))
+ props))
+ (while (re-search-forward org-keyword-time-regexp end t)
+ (setq key (substring (org-match-string-no-properties 1) 0 -1))
+ (unless (member key excluded) (push key excluded))
+ (push (cons key
+ (if (equal key clockstr)
+ (org-no-properties
+ (org-trim
+ (buffer-substring
+ (match-beginning 2) (point-at-eol))))
+ (org-match-string-no-properties 2)))
+ props)))
+ (when (memq which '(all standard))
+ ;; Get the standard properties, like :PORP: ...
+ (setq range (org-get-property-block beg end))
+ (when range
+ (goto-char (car range))
+ (while (re-search-forward
+ (org-re "^[ \t]*:\\([[:alpha:]][[:alnum:]_-]*\\):[ \t]*\\(\\S-.*\\)?")
+ (cdr range) t)
+ (setq key (org-match-string-no-properties 1)
+ value (org-trim (or (org-match-string-no-properties 2) "")))
+ (unless (member key excluded)
+ (push (cons key (or value "")) props)))))
+ (append sum-props (nreverse props)))))))
+
+(defun org-entry-get (pom property &optional inherit)
+ "Get value of PROPERTY for entry at point-or-marker POM.
+If INHERIT is non-nil and the entry does not have the property,
+then also check higher levels of the hierarchy.
+If the property is present but empty, the return value is the empty string.
+If the property is not present at all, nil is returned."
+ (org-with-point-at pom
+ (if inherit
+ (org-entry-get-with-inheritance property)
+ (if (member property org-special-properties)
+ ;; We need a special property. Use brute force, get all properties.
+ (cdr (assoc property (org-entry-properties nil 'special)))
+ (let ((range (org-get-property-block)))
+ (if (and range
+ (goto-char (car range))
+ (re-search-forward
+ (concat "^[ \t]*:" property ":[ \t]*\\(.*\\S-\\)?")
+ (cdr range) t))
+ ;; Found the property, return it.
+ (if (match-end 1)
+ (org-match-string-no-properties 1)
+ "")))))))
+
+(defun org-entry-delete (pom property)
+ "Delete the property PROPERTY from entry at point-or-marker POM."
+ (org-with-point-at pom
+ (if (member property org-special-properties)
+ nil ; cannot delete these properties.
+ (let ((range (org-get-property-block)))
+ (if (and range
+ (goto-char (car range))
+ (re-search-forward
+ (concat "^[ \t]*:" property ":[ \t]*\\(.*\\S-\\)")
+ (cdr range) t))
+ (progn
+ (delete-region (match-beginning 0) (1+ (point-at-eol)))
+ t)
+ nil)))))
+
+;; Multi-values properties are properties that contain multiple values
+;; These values are assumed to be single words, separated by whitespace.
+(defun org-entry-add-to-multivalued-property (pom property value)
+ "Add VALUE to the words in the PROPERTY in entry at point-or-marker POM."
+ (let* ((old (org-entry-get pom property))
+ (values (and old (org-split-string old "[ \t]"))))
+ (unless (member value values)
+ (setq values (cons value values))
+ (org-entry-put pom property
+ (mapconcat 'identity values " ")))))
+
+(defun org-entry-remove-from-multivalued-property (pom property value)
+ "Remove VALUE from words in the PROPERTY in entry at point-or-marker POM."
+ (let* ((old (org-entry-get pom property))
+ (values (and old (org-split-string old "[ \t]"))))
+ (when (member value values)
+ (setq values (delete value values))
+ (org-entry-put pom property
+ (mapconcat 'identity values " ")))))
+
+(defun org-entry-member-in-multivalued-property (pom property value)
+ "Is VALUE one of the words in the PROPERTY in entry at point-or-marker POM?"
+ (let* ((old (org-entry-get pom property))
+ (values (and old (org-split-string old "[ \t]"))))
+ (member value values)))
+
+(defvar org-entry-property-inherited-from (make-marker))
+
+(defun org-entry-get-with-inheritance (property)
+ "Get entry property, and search higher levels if not present."
+ (let (tmp)
+ (save-excursion
+ (save-restriction
+ (widen)
+ (catch 'ex
+ (while t
+ (when (setq tmp (org-entry-get nil property))
+ (org-back-to-heading t)
+ (move-marker org-entry-property-inherited-from (point))
+ (throw 'ex tmp))
+ (or (org-up-heading-safe) (throw 'ex nil)))))
+ (or tmp (cdr (assoc property org-local-properties))
+ (cdr (assoc property org-global-properties))))))
+
+(defun org-entry-put (pom property value)
+ "Set PROPERTY to VALUE for entry at point-or-marker POM."
+ (org-with-point-at pom
+ (org-back-to-heading t)
+ (let ((beg (point)) (end (save-excursion (outline-next-heading) (point)))
+ range)
+ (cond
+ ((equal property "TODO")
+ (when (and (stringp value) (string-match "\\S-" value)
+ (not (member value org-todo-keywords-1)))
+ (error "\"%s\" is not a valid TODO state" value))
+ (if (or (not value)
+ (not (string-match "\\S-" value)))
+ (setq value 'none))
+ (org-todo value)
+ (org-set-tags nil 'align))
+ ((equal property "PRIORITY")
+ (org-priority (if (and value (stringp value) (string-match "\\S-" value))
+ (string-to-char value) ?\ ))
+ (org-set-tags nil 'align))
+ ((equal property "SCHEDULED")
+ (if (re-search-forward org-scheduled-time-regexp end t)
+ (cond
+ ((eq value 'earlier) (org-timestamp-change -1 'day))
+ ((eq value 'later) (org-timestamp-change 1 'day))
+ (t (call-interactively 'org-schedule)))
+ (call-interactively 'org-schedule)))
+ ((equal property "DEADLINE")
+ (if (re-search-forward org-deadline-time-regexp end t)
+ (cond
+ ((eq value 'earlier) (org-timestamp-change -1 'day))
+ ((eq value 'later) (org-timestamp-change 1 'day))
+ (t (call-interactively 'org-deadline)))
+ (call-interactively 'org-deadline)))
+ ((member property org-special-properties)
+ (error "The %s property can not yet be set with `org-entry-put'"
+ property))
+ (t ; a non-special property
+ (let ((buffer-invisibility-spec (org-inhibit-invisibility))) ; Emacs 21
+ (setq range (org-get-property-block beg end 'force))
+ (goto-char (car range))
+ (if (re-search-forward
+ (concat "^[ \t]*:" property ":\\(.*\\)") (cdr range) t)
+ (progn
+ (delete-region (match-beginning 1) (match-end 1))
+ (goto-char (match-beginning 1)))
+ (goto-char (cdr range))
+ (insert "\n")
+ (backward-char 1)
+ (org-indent-line-function)
+ (insert ":" property ":"))
+ (and value (insert " " value))
+ (org-indent-line-function)))))))
+
+(defun org-buffer-property-keys (&optional include-specials include-defaults)
+ "Get all property keys in the current buffer.
+With INCLUDE-SPECIALS, also list the special properties that relect things
+like tags and TODO state.
+With INCLUDE-DEFAULTS, also include properties that has special meaning
+internally: ARCHIVE, CATEGORY, SUMMARY, DESCRIPTION, LOCATION, and LOGGING."
+ (let (rtn range)
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (while (re-search-forward org-property-start-re nil t)
+ (setq range (org-get-property-block))
+ (goto-char (car range))
+ (while (re-search-forward
+ (org-re "^[ \t]*:\\([[:alnum:]_-]+\\):")
+ (cdr range) t)
+ (add-to-list 'rtn (org-match-string-no-properties 1)))
+ (outline-next-heading))))
+
+ (when include-specials
+ (setq rtn (append org-special-properties rtn)))
+
+ (when include-defaults
+ (mapc (lambda (x) (add-to-list 'rtn x)) org-default-properties))
+
+ (sort rtn (lambda (a b) (string< (upcase a) (upcase b))))))
+
+(defun org-property-values (key)
+ "Return a list of all values of property KEY."
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (let ((re (concat "^[ \t]*:" key ":[ \t]*\\(\\S-.*\\)"))
+ values)
+ (while (re-search-forward re nil t)
+ (add-to-list 'values (org-trim (match-string 1))))
+ (delete "" values)))))
+
+(defun org-insert-property-drawer ()
+ "Insert a property drawer into the current entry."
+ (interactive)
+ (org-back-to-heading t)
+ (looking-at outline-regexp)
+ (let ((indent (- (match-end 0)(match-beginning 0)))
+ (beg (point))
+ (re (concat "^[ \t]*" org-keyword-time-regexp))
+ end hiddenp)
+ (outline-next-heading)
+ (setq end (point))
+ (goto-char beg)
+ (while (re-search-forward re end t))
+ (setq hiddenp (org-invisible-p))
+ (end-of-line 1)
+ (and (equal (char-after) ?\n) (forward-char 1))
+ (org-skip-over-state-notes)
+ (skip-chars-backward " \t\n\r")
+ (let ((inhibit-read-only t)) (insert "\n:PROPERTIES:\n:END:"))
+ (beginning-of-line 0)
+ (indent-to-column indent)
+ (beginning-of-line 2)
+ (indent-to-column indent)
+ (beginning-of-line 0)
+ (if hiddenp
+ (save-excursion
+ (org-back-to-heading t)
+ (hide-entry))
+ (org-flag-drawer t))))
+
+(defun org-set-property (property value)
+ "In the current entry, set PROPERTY to VALUE.
+When called interactively, this will prompt for a property name, offering
+completion on existing and default properties. And then it will prompt
+for a value, offering competion either on allowed values (via an inherited
+xxx_ALL property) or on existing values in other instances of this property
+in the current file."
+ (interactive
+ (let* ((prop (completing-read
+ "Property: " (mapcar 'list (org-buffer-property-keys nil t))))
+ (cur (org-entry-get nil prop))
+ (allowed (org-property-get-allowed-values nil prop 'table))
+ (existing (mapcar 'list (org-property-values prop)))
+ (val (if allowed
+ (completing-read "Value: " allowed nil 'req-match)
+ (completing-read
+ (concat "Value" (if (and cur (string-match "\\S-" cur))
+ (concat "[" cur "]") "")
+ ": ")
+ existing nil nil "" nil cur))))
+ (list prop (if (equal val "") cur val))))
+ (unless (equal (org-entry-get nil property) value)
+ (org-entry-put nil property value)))
+
+(defun org-delete-property (property)
+ "In the current entry, delete PROPERTY."
+ (interactive
+ (let* ((prop (completing-read
+ "Property: " (org-entry-properties nil 'standard))))
+ (list prop)))
+ (message (concat "Property " property
+ (if (org-entry-delete nil property)
+ " deleted"
+ " was not present in the entry"))))
+
+(defun org-delete-property-globally (property)
+ "Remove PROPERTY globally, from all entries."
+ (interactive
+ (let* ((prop (completing-read
+ "Globally remove property: "
+ (mapcar 'list (org-buffer-property-keys)))))
+ (list prop)))
+ (save-excursion
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (let ((cnt 0))
+ (while (re-search-forward
+ (concat "^[ \t]*:" (regexp-quote property) ":.*\n?")
+ nil t)
+ (setq cnt (1+ cnt))
+ (replace-match ""))
+ (message "Property \"%s\" removed from %d entries" property cnt)))))
+
+(defvar org-columns-current-fmt-compiled) ; defined below
+
+(defun org-compute-property-at-point ()
+ "Compute the property at point.
+This looks for an enclosing column format, extracts the operator and
+then applies it to the proerty in the column format's scope."
+ (interactive)
+ (unless (org-at-property-p)
+ (error "Not at a property"))
+ (let ((prop (org-match-string-no-properties 2)))
+ (org-columns-get-format-and-top-level)
+ (unless (nth 3 (assoc prop org-columns-current-fmt-compiled))
+ (error "No operator defined for property %s" prop))
+ (org-columns-compute prop)))
+
+(defun org-property-get-allowed-values (pom property &optional table)
+ "Get allowed values for the property PROPERTY.
+When TABLE is non-nil, return an alist that can directly be used for
+completion."
+ (let (vals)
+ (cond
+ ((equal property "TODO")
+ (setq vals (org-with-point-at pom
+ (append org-todo-keywords-1 '("")))))
+ ((equal property "PRIORITY")
+ (let ((n org-lowest-priority))
+ (while (>= n org-highest-priority)
+ (push (char-to-string n) vals)
+ (setq n (1- n)))))
+ ((member property org-special-properties))
+ (t
+ (setq vals (org-entry-get pom (concat property "_ALL") 'inherit))
+
+ (when (and vals (string-match "\\S-" vals))
+ (setq vals (car (read-from-string (concat "(" vals ")"))))
+ (setq vals (mapcar (lambda (x)
+ (cond ((stringp x) x)
+ ((numberp x) (number-to-string x))
+ ((symbolp x) (symbol-name x))
+ (t "???")))
+ vals)))))
+ (if table (mapcar 'list vals) vals)))
+
+(defun org-property-previous-allowed-value (&optional previous)
+ "Switch to the next allowed value for this property."
+ (interactive)
+ (org-property-next-allowed-value t))
+
+(defun org-property-next-allowed-value (&optional previous)
+ "Switch to the next allowed value for this property."
+ (interactive)
+ (unless (org-at-property-p)
+ (error "Not at a property"))
+ (let* ((key (match-string 2))
+ (value (match-string 3))
+ (allowed (or (org-property-get-allowed-values (point) key)
+ (and (member value '("[ ]" "[-]" "[X]"))
+ '("[ ]" "[X]"))))
+ nval)
+ (unless allowed
+ (error "Allowed values for this property have not been defined"))
+ (if previous (setq allowed (reverse allowed)))
+ (if (member value allowed)
+ (setq nval (car (cdr (member value allowed)))))
+ (setq nval (or nval (car allowed)))
+ (if (equal nval value)
+ (error "Only one allowed value for this property"))
+ (org-at-property-p)
+ (replace-match (concat " :" key ": " nval) t t)
+ (org-indent-line-function)
+ (beginning-of-line 1)
+ (skip-chars-forward " \t")))
+
+(defun org-find-entry-with-id (ident)
+ "Locate the entry that contains the ID property with exact value IDENT.
+IDENT can be a string, a symbol or a number, this function will search for
+the string representation of it.
+Return the position where this entry starts, or nil if there is no such entry."
+ (let ((id (cond
+ ((stringp ident) ident)
+ ((symbol-name ident) (symbol-name ident))
+ ((numberp ident) (number-to-string ident))
+ (t (error "IDENT %s must be a string, symbol or number" ident))))
+ (case-fold-search nil))
+ (save-excursion
+ (save-restriction
+ (goto-char (point-min))
+ (when (re-search-forward
+ (concat "^[ \t]*:ID:[ \t]+" (regexp-quote id) "[ \t]*$")
+ nil t)
+ (org-back-to-heading)
+ (point))))))
+
+;;; Column View
+
+(defvar org-columns-overlays nil
+ "Holds the list of current column overlays.")
+
+(defvar org-columns-current-fmt nil
+ "Local variable, holds the currently active column format.")
+(defvar org-columns-current-fmt-compiled nil
+ "Local variable, holds the currently active column format.
+This is the compiled version of the format.")
+(defvar org-columns-current-widths nil
+ "Loval variable, holds the currently widths of fields.")
+(defvar org-columns-current-maxwidths nil
+ "Loval variable, holds the currently active maximum column widths.")
+(defvar org-columns-begin-marker (make-marker)
+ "Points to the position where last a column creation command was called.")
+(defvar org-columns-top-level-marker (make-marker)
+ "Points to the position where current columns region starts.")
+
+(defvar org-columns-map (make-sparse-keymap)
+ "The keymap valid in column display.")
+
+(defun org-columns-content ()
+ "Switch to contents view while in columns view."
+ (interactive)
+ (org-overview)
+ (org-content))
+
+(org-defkey org-columns-map "c" 'org-columns-content)
+(org-defkey org-columns-map "o" 'org-overview)
+(org-defkey org-columns-map "e" 'org-columns-edit-value)
+(org-defkey org-columns-map "\C-c\C-t" 'org-columns-todo)
+(org-defkey org-columns-map "\C-c\C-c" 'org-columns-set-tags-or-toggle)
+(org-defkey org-columns-map "\C-c\C-o" 'org-columns-open-link)
+(org-defkey org-columns-map "v" 'org-columns-show-value)
+(org-defkey org-columns-map "q" 'org-columns-quit)
+(org-defkey org-columns-map "r" 'org-columns-redo)
+(org-defkey org-columns-map [left] 'backward-char)
+(org-defkey org-columns-map "\M-b" 'backward-char)
+(org-defkey org-columns-map "a" 'org-columns-edit-allowed)
+(org-defkey org-columns-map "s" 'org-columns-edit-attributes)
+(org-defkey org-columns-map "\M-f" (lambda () (interactive) (goto-char (1+ (point)))))
+(org-defkey org-columns-map [right] (lambda () (interactive) (goto-char (1+ (point)))))
+(org-defkey org-columns-map [(shift right)] 'org-columns-next-allowed-value)
+(org-defkey org-columns-map "n" 'org-columns-next-allowed-value)
+(org-defkey org-columns-map [(shift left)] 'org-columns-previous-allowed-value)
+(org-defkey org-columns-map "p" 'org-columns-previous-allowed-value)
+(org-defkey org-columns-map "<" 'org-columns-narrow)
+(org-defkey org-columns-map ">" 'org-columns-widen)
+(org-defkey org-columns-map [(meta right)] 'org-columns-move-right)
+(org-defkey org-columns-map [(meta left)] 'org-columns-move-left)
+(org-defkey org-columns-map [(shift meta right)] 'org-columns-new)
+(org-defkey org-columns-map [(shift meta left)] 'org-columns-delete)
+
+(easy-menu-define org-columns-menu org-columns-map "Org Column Menu"
+ '("Column"
+ ["Edit property" org-columns-edit-value t]
+ ["Next allowed value" org-columns-next-allowed-value t]
+ ["Previous allowed value" org-columns-previous-allowed-value t]
+ ["Show full value" org-columns-show-value t]
+ ["Edit allowed values" org-columns-edit-allowed t]
+ "--"
+ ["Edit column attributes" org-columns-edit-attributes t]
+ ["Increase column width" org-columns-widen t]
+ ["Decrease column width" org-columns-narrow t]
+ "--"
+ ["Move column right" org-columns-move-right t]
+ ["Move column left" org-columns-move-left t]
+ ["Add column" org-columns-new t]
+ ["Delete column" org-columns-delete t]
+ "--"
+ ["CONTENTS" org-columns-content t]
+ ["OVERVIEW" org-overview t]
+ ["Refresh columns display" org-columns-redo t]
+ "--"
+ ["Open link" org-columns-open-link t]
+ "--"
+ ["Quit" org-columns-quit t]))
+
+(defun org-columns-new-overlay (beg end &optional string face)
+ "Create a new column overlay and add it to the list."
+ (let ((ov (org-make-overlay beg end)))
+ (org-overlay-put ov 'face (or face 'secondary-selection))
+ (org-overlay-display ov string face)
+ (push ov org-columns-overlays)
+ ov))
+
+(defun org-columns-display-here (&optional props)
+ "Overlay the current line with column display."
+ (interactive)
+ (let* ((fmt org-columns-current-fmt-compiled)
+ (beg (point-at-bol))
+ (level-face (save-excursion
+ (beginning-of-line 1)
+ (and (looking-at "\\(\\**\\)\\(\\* \\)")
+ (org-get-level-face 2))))
+ (color (list :foreground
+ (face-attribute (or level-face 'default) :foreground)))
+ props pom property ass width f string ov column val modval)
+ ;; Check if the entry is in another buffer.
+ (unless props
+ (if (eq major-mode 'org-agenda-mode)
+ (setq pom (or (get-text-property (point) 'org-hd-marker)
+ (get-text-property (point) 'org-marker))
+ props (if pom (org-entry-properties pom) nil))
+ (setq props (org-entry-properties nil))))
+ ;; Walk the format
+ (while (setq column (pop fmt))
+ (setq property (car column)
+ ass (if (equal property "ITEM")
+ (cons "ITEM"
+ (save-match-data
+ (org-no-properties
+ (org-remove-tabs
+ (buffer-substring-no-properties
+ (point-at-bol) (point-at-eol))))))
+ (assoc property props))
+ width (or (cdr (assoc property org-columns-current-maxwidths))
+ (nth 2 column)
+ (length property))
+ f (format "%%-%d.%ds | " width width)
+ val (or (cdr ass) "")
+ modval (if (equal property "ITEM")
+ (org-columns-cleanup-item val org-columns-current-fmt-compiled))
+ string (format f (or modval val)))
+ ;; Create the overlay
+ (org-unmodified
+ (setq ov (org-columns-new-overlay
+ beg (setq beg (1+ beg)) string
+ (list color 'org-column)))
+;;; (list (get-text-property (point-at-bol) 'face) 'org-column)))
+ (org-overlay-put ov 'keymap org-columns-map)
+ (org-overlay-put ov 'org-columns-key property)
+ (org-overlay-put ov 'org-columns-value (cdr ass))
+ (org-overlay-put ov 'org-columns-value-modified modval)
+ (org-overlay-put ov 'org-columns-pom pom)
+ (org-overlay-put ov 'org-columns-format f))
+ (if (or (not (char-after beg))
+ (equal (char-after beg) ?\n))
+ (let ((inhibit-read-only t))
+ (save-excursion
+ (goto-char beg)
+ (org-unmodified (insert " ")))))) ;; FIXME: add props and remove later?
+ ;; Make the rest of the line disappear.
+ (org-unmodified
+ (setq ov (org-columns-new-overlay beg (point-at-eol)))
+ (org-overlay-put ov 'invisible t)
+ (org-overlay-put ov 'keymap org-columns-map)
+ (org-overlay-put ov 'intangible t)
+ (push ov org-columns-overlays)
+ (setq ov (org-make-overlay (1- (point-at-eol)) (1+ (point-at-eol))))
+ (org-overlay-put ov 'keymap org-columns-map)
+ (push ov org-columns-overlays)
+ (let ((inhibit-read-only t))
+ (put-text-property (max (point-min) (1- (point-at-bol)))
+ (min (point-max) (1+ (point-at-eol)))
+ 'read-only "Type `e' to edit property")))))
+
+(defvar org-previous-header-line-format nil
+ "The header line format before column view was turned on.")
+(defvar org-columns-inhibit-recalculation nil
+ "Inhibit recomputing of columns on column view startup.")
+
+
+(defvar header-line-format)
+(defun org-columns-display-here-title ()
+ "Overlay the newline before the current line with the table title."
+ (interactive)
+ (let ((fmt org-columns-current-fmt-compiled)
+ string (title "")
+ property width f column str widths)
+ (while (setq column (pop fmt))
+ (setq property (car column)
+ str (or (nth 1 column) property)
+ width (or (cdr (assoc property org-columns-current-maxwidths))
+ (nth 2 column)
+ (length str))
+ widths (push width widths)
+ f (format "%%-%d.%ds | " width width)
+ string (format f str)
+ title (concat title string)))
+ (setq title (concat
+ (org-add-props " " nil 'display '(space :align-to 0))
+ (org-add-props title nil 'face '(:weight bold :underline t))))
+ (org-set-local 'org-previous-header-line-format header-line-format)
+ (org-set-local 'org-columns-current-widths (nreverse widths))
+ (setq header-line-format title)))
+
+(defun org-columns-remove-overlays ()
+ "Remove all currently active column overlays."
+ (interactive)
+ (when (marker-buffer org-columns-begin-marker)
+ (with-current-buffer (marker-buffer org-columns-begin-marker)
+ (when (local-variable-p 'org-previous-header-line-format)
+ (setq header-line-format org-previous-header-line-format)
+ (kill-local-variable 'org-previous-header-line-format))
+ (move-marker org-columns-begin-marker nil)
+ (move-marker org-columns-top-level-marker nil)
+ (org-unmodified
+ (mapc 'org-delete-overlay org-columns-overlays)
+ (setq org-columns-overlays nil)
+ (let ((inhibit-read-only t))
+ (remove-text-properties (point-min) (point-max) '(read-only t)))))))
+
+(defun org-columns-cleanup-item (item fmt)
+ "Remove from ITEM what is a column in the format FMT."
+ (if (not org-complex-heading-regexp)
+ item
+ (when (string-match org-complex-heading-regexp item)
+ (concat
+ (org-add-props (concat (match-string 1 item) " ") nil
+ 'org-whitespace (* 2 (1- (org-reduced-level (- (match-end 1) (match-beginning 1))))))
+ (and (match-end 2) (not (assoc "TODO" fmt)) (concat " " (match-string 2 item)))
+ (and (match-end 3) (not (assoc "PRIORITY" fmt)) (concat " " (match-string 3 item)))
+ " " (match-string 4 item)
+ (and (match-end 5) (not (assoc "TAGS" fmt)) (concat " " (match-string 5 item)))))))
+
+(defun org-columns-show-value ()
+ "Show the full value of the property."
+ (interactive)
+ (let ((value (get-char-property (point) 'org-columns-value)))
+ (message "Value is: %s" (or value ""))))
+
+(defun org-columns-quit ()
+ "Remove the column overlays and in this way exit column editing."
+ (interactive)
+ (org-unmodified
+ (org-columns-remove-overlays)
+ (let ((inhibit-read-only t))
+ (remove-text-properties (point-min) (point-max) '(read-only t))))
+ (when (eq major-mode 'org-agenda-mode)
+ (message
+ "Modification not yet reflected in Agenda buffer, use `r' to refresh")))
+
+(defun org-columns-check-computed ()
+ "Check if this column value is computed.
+If yes, throw an error indicating that changing it does not make sense."
+ (let ((val (get-char-property (point) 'org-columns-value)))
+ (when (and (stringp val)
+ (get-char-property 0 'org-computed val))
+ (error "This value is computed from the entry's children"))))
+
+(defun org-columns-todo (&optional arg)
+ "Change the TODO state during column view."
+ (interactive "P")
+ (org-columns-edit-value "TODO"))
+
+(defun org-columns-set-tags-or-toggle (&optional arg)
+ "Toggle checkbox at point, or set tags for current headline."
+ (interactive "P")
+ (if (string-match "\\`\\[[ xX-]\\]\\'"
+ (get-char-property (point) 'org-columns-value))
+ (org-columns-next-allowed-value)
+ (org-columns-edit-value "TAGS")))
+
+(defun org-columns-edit-value (&optional key)
+ "Edit the value of the property at point in column view.
+Where possible, use the standard interface for changing this line."
+ (interactive)
+ (org-columns-check-computed)
+ (let* ((external-key key)
+ (col (current-column))
+ (key (or key (get-char-property (point) 'org-columns-key)))
+ (value (get-char-property (point) 'org-columns-value))
+ (bol (point-at-bol)) (eol (point-at-eol))
+ (pom (or (get-text-property bol 'org-hd-marker)
+ (point))) ; keep despite of compiler waring
+ (line-overlays
+ (delq nil (mapcar (lambda (x)
+ (and (eq (overlay-buffer x) (current-buffer))
+ (>= (overlay-start x) bol)
+ (<= (overlay-start x) eol)
+ x))
+ org-columns-overlays)))
+ nval eval allowed)
+ (cond
+ ((equal key "ITEM")
+ (setq eval '(org-with-point-at pom
+ (org-edit-headline))))
+ ((equal key "TODO")
+ (setq eval '(org-with-point-at pom
+ (let ((current-prefix-arg
+ (if external-key current-prefix-arg '(4))))
+ (call-interactively 'org-todo)))))
+ ((equal key "PRIORITY")
+ (setq eval '(org-with-point-at pom
+ (call-interactively 'org-priority))))
+ ((equal key "TAGS")
+ (setq eval '(org-with-point-at pom
+ (let ((org-fast-tag-selection-single-key
+ (if (eq org-fast-tag-selection-single-key 'expert)
+ t org-fast-tag-selection-single-key)))
+ (call-interactively 'org-set-tags)))))
+ ((equal key "DEADLINE")
+ (setq eval '(org-with-point-at pom
+ (call-interactively 'org-deadline))))
+ ((equal key "SCHEDULED")
+ (setq eval '(org-with-point-at pom
+ (call-interactively 'org-schedule))))
+ (t
+ (setq allowed (org-property-get-allowed-values pom key 'table))
+ (if allowed
+ (setq nval (completing-read "Value: " allowed nil t))
+ (setq nval (read-string "Edit: " value)))
+ (setq nval (org-trim nval))
+ (when (not (equal nval value))
+ (setq eval '(org-entry-put pom key nval)))))
+ (when eval
+ (let ((inhibit-read-only t))
+ (remove-text-properties (max (point-min) (1- bol)) eol '(read-only t))
+ (unwind-protect
+ (progn
+ (setq org-columns-overlays
+ (org-delete-all line-overlays org-columns-overlays))
+ (mapc 'org-delete-overlay line-overlays)
+ (org-columns-eval eval))
+ (org-columns-display-here))))
+ (move-to-column col)
+ (if (nth 3 (assoc key org-columns-current-fmt-compiled))
+ (org-columns-update key))))
+
+(defun org-edit-headline () ; FIXME: this is not columns specific
+ "Edit the current headline, the part without TODO keyword, TAGS."
+ (org-back-to-heading)
+ (when (looking-at org-todo-line-regexp)
+ (let ((pre (buffer-substring (match-beginning 0) (match-beginning 3)))
+ (txt (match-string 3))
+ (post "")
+ txt2)
+ (if (string-match (org-re "[ \t]+:[[:alnum:]:_@]+:[ \t]*$") txt)
+ (setq post (match-string 0 txt)
+ txt (substring txt 0 (match-beginning 0))))
+ (setq txt2 (read-string "Edit: " txt))
+ (when (not (equal txt txt2))
+ (beginning-of-line 1)
+ (insert pre txt2 post)
+ (delete-region (point) (point-at-eol))
+ (org-set-tags nil t)))))
+
+(defun org-columns-edit-allowed ()
+ "Edit the list of allowed values for the current property."
+ (interactive)
+ (let* ((key (get-char-property (point) 'org-columns-key))
+ (key1 (concat key "_ALL"))
+ (allowed (org-entry-get (point) key1 t))
+ nval)
+ ;; FIXME: Cover editing TODO, TAGS etc inbiffer settings.????
+ (setq nval (read-string "Allowed: " allowed))
+ (org-entry-put
+ (cond ((marker-position org-entry-property-inherited-from)
+ org-entry-property-inherited-from)
+ ((marker-position org-columns-top-level-marker)
+ org-columns-top-level-marker))
+ key1 nval)))
+
+(defmacro org-no-warnings (&rest body)
+ (cons (if (fboundp 'with-no-warnings) 'with-no-warnings 'progn) body))
+
+(defun org-columns-eval (form)
+ (let (hidep)
+ (save-excursion
+ (beginning-of-line 1)
+ ;; `next-line' is needed here, because it skips invisible line.
+ (condition-case nil (org-no-warnings (next-line 1)) (error nil))
+ (setq hidep (org-on-heading-p 1)))
+ (eval form)
+ (and hidep (hide-entry))))
+
+(defun org-columns-previous-allowed-value ()
+ "Switch to the previous allowed value for this column."
+ (interactive)
+ (org-columns-next-allowed-value t))
+
+(defun org-columns-next-allowed-value (&optional previous)
+ "Switch to the next allowed value for this column."
+ (interactive)
+ (org-columns-check-computed)
+ (let* ((col (current-column))
+ (key (get-char-property (point) 'org-columns-key))
+ (value (get-char-property (point) 'org-columns-value))
+ (bol (point-at-bol)) (eol (point-at-eol))
+ (pom (or (get-text-property bol 'org-hd-marker)
+ (point))) ; keep despite of compiler waring
+ (line-overlays
+ (delq nil (mapcar (lambda (x)
+ (and (eq (overlay-buffer x) (current-buffer))
+ (>= (overlay-start x) bol)
+ (<= (overlay-start x) eol)
+ x))
+ org-columns-overlays)))
+ (allowed (or (org-property-get-allowed-values pom key)
+ (and (equal
+ (nth 4 (assoc key org-columns-current-fmt-compiled))
+ 'checkbox) '("[ ]" "[X]"))))
+ nval)
+ (when (equal key "ITEM")
+ (error "Cannot edit item headline from here"))
+ (unless (or allowed (member key '("SCHEDULED" "DEADLINE")))
+ (error "Allowed values for this property have not been defined"))
+ (if (member key '("SCHEDULED" "DEADLINE"))
+ (setq nval (if previous 'earlier 'later))
+ (if previous (setq allowed (reverse allowed)))
+ (if (member value allowed)
+ (setq nval (car (cdr (member value allowed)))))
+ (setq nval (or nval (car allowed)))
+ (if (equal nval value)
+ (error "Only one allowed value for this property")))
+ (let ((inhibit-read-only t))
+ (remove-text-properties (1- bol) eol '(read-only t))
+ (unwind-protect
+ (progn
+ (setq org-columns-overlays
+ (org-delete-all line-overlays org-columns-overlays))
+ (mapc 'org-delete-overlay line-overlays)
+ (org-columns-eval '(org-entry-put pom key nval)))
+ (org-columns-display-here)))
+ (move-to-column col)
+ (if (nth 3 (assoc key org-columns-current-fmt-compiled))
+ (org-columns-update key))))
+
+(defun org-verify-version (task)
+ (cond
+ ((eq task 'columns)
+ (if (or (featurep 'xemacs)
+ (< emacs-major-version 22))
+ (error "Emacs 22 is required for the columns feature")))))
+
+(defun org-columns-open-link (&optional arg)
+ (interactive "P")
+ (let ((key (get-char-property (point) 'org-columns-key))
+ (value (get-char-property (point) 'org-columns-value)))
+ (org-open-link-from-string arg)))
+
+(defun org-open-link-from-string (s &optional arg)
+ "Open a link in the string S, as if it was in Org-mode."
+ (interactive)
+ (with-temp-buffer
+ (let ((org-inhibit-startup t))
+ (org-mode)
+ (insert s)
+ (goto-char (point-min))
+ (org-open-at-point arg))))
+
+(defun org-columns-get-format-and-top-level ()
+ (let (fmt)
+ (when (condition-case nil (org-back-to-heading) (error nil))
+ (move-marker org-entry-property-inherited-from nil)
+ (setq fmt (org-entry-get nil "COLUMNS" t)))
+ (setq fmt (or fmt org-columns-default-format))
+ (org-set-local 'org-columns-current-fmt fmt)
+ (org-columns-compile-format fmt)
+ (if (marker-position org-entry-property-inherited-from)
+ (move-marker org-columns-top-level-marker
+ org-entry-property-inherited-from)
+ (move-marker org-columns-top-level-marker (point)))
+ fmt))
+
+(defun org-columns ()
+ "Turn on column view on an org-mode file."
+ (interactive)
+ (org-verify-version 'columns)
+ (org-columns-remove-overlays)
+ (move-marker org-columns-begin-marker (point))
+ (let (beg end fmt cache maxwidths)
+ (setq fmt (org-columns-get-format-and-top-level))
+ (save-excursion
+ (goto-char org-columns-top-level-marker)
+ (setq beg (point))
+ (unless org-columns-inhibit-recalculation
+ (org-columns-compute-all))
+ (setq end (or (condition-case nil (org-end-of-subtree t t) (error nil))
+ (point-max)))
+ (goto-char beg)
+ ;; Get and cache the properties
+ (while (re-search-forward (concat "^" outline-regexp) end t)
+ (push (cons (org-current-line) (org-entry-properties)) cache))
+ (when cache
+ (setq maxwidths (org-columns-get-autowidth-alist fmt cache))
+ (org-set-local 'org-columns-current-maxwidths maxwidths)
+ (org-columns-display-here-title)
+ (mapc (lambda (x)
+ (goto-line (car x))
+ (org-columns-display-here (cdr x)))
+ cache)))))
+
+(defun org-columns-new (&optional prop title width op fmt)
+ "Insert a new column, to the leeft o the current column."
+ (interactive)
+ (let ((editp (and prop (assoc prop org-columns-current-fmt-compiled)))
+ cell)
+ (setq prop (completing-read
+ "Property: " (mapcar 'list (org-buffer-property-keys t))
+ nil nil prop))
+ (setq title (read-string (concat "Column title [" prop "]: ") (or title prop)))
+ (setq width (read-string "Column width: " (if width (number-to-string width))))
+ (if (string-match "\\S-" width)
+ (setq width (string-to-number width))
+ (setq width nil))
+ (setq fmt (completing-read "Summary [none]: "
+ '(("none") ("add_numbers") ("add_times") ("checkbox"))
+ nil t))
+ (if (string-match "\\S-" fmt)
+ (setq fmt (intern fmt))
+ (setq fmt nil))
+ (if (eq fmt 'none) (setq fmt nil))
+ (if editp
+ (progn
+ (setcar editp prop)
+ (setcdr editp (list title width nil fmt)))
+ (setq cell (nthcdr (1- (current-column))
+ org-columns-current-fmt-compiled))
+ (setcdr cell (cons (list prop title width nil fmt)
+ (cdr cell))))
+ (org-columns-store-format)
+ (org-columns-redo)))
+
+(defun org-columns-delete ()
+ "Delete the column at point from columns view."
+ (interactive)
+ (let* ((n (current-column))
+ (title (nth 1 (nth n org-columns-current-fmt-compiled))))
+ (when (y-or-n-p
+ (format "Are you sure you want to remove column \"%s\"? " title))
+ (setq org-columns-current-fmt-compiled
+ (delq (nth n org-columns-current-fmt-compiled)
+ org-columns-current-fmt-compiled))
+ (org-columns-store-format)
+ (org-columns-redo)
+ (if (>= (current-column) (length org-columns-current-fmt-compiled))
+ (backward-char 1)))))
+
+(defun org-columns-edit-attributes ()
+ "Edit the attributes of the current column."
+ (interactive)
+ (let* ((n (current-column))
+ (info (nth n org-columns-current-fmt-compiled)))
+ (apply 'org-columns-new info)))
+
+(defun org-columns-widen (arg)
+ "Make the column wider by ARG characters."
+ (interactive "p")
+ (let* ((n (current-column))
+ (entry (nth n org-columns-current-fmt-compiled))
+ (width (or (nth 2 entry)
+ (cdr (assoc (car entry) org-columns-current-maxwidths)))))
+ (setq width (max 1 (+ width arg)))
+ (setcar (nthcdr 2 entry) width)
+ (org-columns-store-format)
+ (org-columns-redo)))
+
+(defun org-columns-narrow (arg)
+ "Make the column nrrower by ARG characters."
+ (interactive "p")
+ (org-columns-widen (- arg)))
+
+(defun org-columns-move-right ()
+ "Swap this column with the one to the right."
+ (interactive)
+ (let* ((n (current-column))
+ (cell (nthcdr n org-columns-current-fmt-compiled))
+ e)
+ (when (>= n (1- (length org-columns-current-fmt-compiled)))
+ (error "Cannot shift this column further to the right"))
+ (setq e (car cell))
+ (setcar cell (car (cdr cell)))
+ (setcdr cell (cons e (cdr (cdr cell))))
+ (org-columns-store-format)
+ (org-columns-redo)
+ (forward-char 1)))
+
+(defun org-columns-move-left ()
+ "Swap this column with the one to the left."
+ (interactive)
+ (let* ((n (current-column)))
+ (when (= n 0)
+ (error "Cannot shift this column further to the left"))
+ (backward-char 1)
+ (org-columns-move-right)
+ (backward-char 1)))
+
+(defun org-columns-store-format ()
+ "Store the text version of the current columns format in appropriate place.
+This is either in the COLUMNS property of the node starting the current column
+display, or in the #+COLUMNS line of the current buffer."
+ (let (fmt (cnt 0))
+ (setq fmt (org-columns-uncompile-format org-columns-current-fmt-compiled))
+ (org-set-local 'org-columns-current-fmt fmt)
+ (if (marker-position org-columns-top-level-marker)
+ (save-excursion
+ (goto-char org-columns-top-level-marker)
+ (if (and (org-at-heading-p)
+ (org-entry-get nil "COLUMNS"))
+ (org-entry-put nil "COLUMNS" fmt)
+ (goto-char (point-min))
+ ;; Overwrite all #+COLUMNS lines....
+ (while (re-search-forward "^#\\+COLUMNS:.*" nil t)
+ (setq cnt (1+ cnt))
+ (replace-match (concat "#+COLUMNS: " fmt) t t))
+ (unless (> cnt 0)
+ (goto-char (point-min))
+ (or (org-on-heading-p t) (outline-next-heading))
+ (let ((inhibit-read-only t))
+ (insert-before-markers "#+COLUMNS: " fmt "\n")))
+ (org-set-local 'org-columns-default-format fmt))))))
+
+(defvar org-overriding-columns-format nil
+ "When set, overrides any other definition.")
+(defvar org-agenda-view-columns-initially nil
+ "When set, switch to columns view immediately after creating the agenda.")
+
+(defun org-agenda-columns ()
+ "Turn on column view in the agenda."
+ (interactive)
+ (org-verify-version 'columns)
+ (org-columns-remove-overlays)
+ (move-marker org-columns-begin-marker (point))
+ (let (fmt cache maxwidths m)
+ (cond
+ ((and (local-variable-p 'org-overriding-columns-format)
+ org-overriding-columns-format)
+ (setq fmt org-overriding-columns-format))
+ ((setq m (get-text-property (point-at-bol) 'org-hd-marker))
+ (setq fmt (org-entry-get m "COLUMNS" t)))
+ ((and (boundp 'org-columns-current-fmt)
+ (local-variable-p 'org-columns-current-fmt)
+ org-columns-current-fmt)
+ (setq fmt org-columns-current-fmt))
+ ((setq m (next-single-property-change (point-min) 'org-hd-marker))
+ (setq m (get-text-property m 'org-hd-marker))
+ (setq fmt (org-entry-get m "COLUMNS" t))))
+ (setq fmt (or fmt org-columns-default-format))
+ (org-set-local 'org-columns-current-fmt fmt)
+ (org-columns-compile-format fmt)
+ (save-excursion
+ ;; Get and cache the properties
+ (goto-char (point-min))
+ (while (not (eobp))
+ (when (setq m (or (get-text-property (point) 'org-hd-marker)
+ (get-text-property (point) 'org-marker)))
+ (push (cons (org-current-line) (org-entry-properties m)) cache))
+ (beginning-of-line 2))
+ (when cache
+ (setq maxwidths (org-columns-get-autowidth-alist fmt cache))
+ (org-set-local 'org-columns-current-maxwidths maxwidths)
+ (org-columns-display-here-title)
+ (mapc (lambda (x)
+ (goto-line (car x))
+ (org-columns-display-here (cdr x)))
+ cache)))))
+
+(defun org-columns-get-autowidth-alist (s cache)
+ "Derive the maximum column widths from the format and the cache."
+ (let ((start 0) rtn)
+ (while (string-match (org-re "%\\([[:alpha:]]\\S-*\\)") s start)
+ (push (cons (match-string 1 s) 1) rtn)
+ (setq start (match-end 0)))
+ (mapc (lambda (x)
+ (setcdr x (apply 'max
+ (mapcar
+ (lambda (y)
+ (length (or (cdr (assoc (car x) (cdr y))) " ")))
+ cache))))
+ rtn)
+ rtn))
+
+(defun org-columns-compute-all ()
+ "Compute all columns that have operators defined."
+ (org-unmodified
+ (remove-text-properties (point-min) (point-max) '(org-summaries t)))
+ (let ((columns org-columns-current-fmt-compiled) col)
+ (while (setq col (pop columns))
+ (when (nth 3 col)
+ (save-excursion
+ (org-columns-compute (car col)))))))
+
+(defun org-columns-update (property)
+ "Recompute PROPERTY, and update the columns display for it."
+ (org-columns-compute property)
+ (let (fmt val pos)
+ (save-excursion
+ (mapc (lambda (ov)
+ (when (equal (org-overlay-get ov 'org-columns-key) property)
+ (setq pos (org-overlay-start ov))
+ (goto-char pos)
+ (when (setq val (cdr (assoc property
+ (get-text-property
+ (point-at-bol) 'org-summaries))))
+ (setq fmt (org-overlay-get ov 'org-columns-format))
+ (org-overlay-put ov 'org-columns-value val)
+ (org-overlay-put ov 'display (format fmt val)))))
+ org-columns-overlays))))
+
+(defun org-columns-compute (property)
+ "Sum the values of property PROPERTY hierarchically, for the entire buffer."
+ (interactive)
+ (let* ((re (concat "^" outline-regexp))
+ (lmax 30) ; Does anyone use deeper levels???
+ (lsum (make-vector lmax 0))
+ (lflag (make-vector lmax nil))
+ (level 0)
+ (ass (assoc property org-columns-current-fmt-compiled))
+ (format (nth 4 ass))
+ (beg org-columns-top-level-marker)
+ last-level val valflag flag end sumpos sum-alist sum str str1 useval)
+ (save-excursion
+ ;; Find the region to compute
+ (goto-char beg)
+ (setq end (condition-case nil (org-end-of-subtree t) (error (point-max))))
+ (goto-char end)
+ ;; Walk the tree from the back and do the computations
+ (while (re-search-backward re beg t)
+ (setq sumpos (match-beginning 0)
+ last-level level
+ level (org-outline-level)
+ val (org-entry-get nil property)
+ valflag (and val (string-match "\\S-" val)))
+ (cond
+ ((< level last-level)
+ ;; put the sum of lower levels here as a property
+ (setq sum (aref lsum last-level) ; current sum
+ flag (aref lflag last-level) ; any valid entries from children?
+ str (org-column-number-to-string sum format)
+ str1 (org-add-props (copy-sequence str) nil 'org-computed t 'face 'bold)
+ useval (if flag str1 (if valflag val ""))
+ sum-alist (get-text-property sumpos 'org-summaries))
+ (if (assoc property sum-alist)
+ (setcdr (assoc property sum-alist) useval)
+ (push (cons property useval) sum-alist)
+ (org-unmodified
+ (add-text-properties sumpos (1+ sumpos)
+ (list 'org-summaries sum-alist))))
+ (when val
+ (org-entry-put nil property (if flag str val)))
+ ;; add current to current level accumulator
+ (when (or flag valflag)
+ ;; FIXME: is this ok?????????
+ (aset lsum level (+ (aref lsum level)
+ (if flag sum (org-column-string-to-number
+ (if flag str val) format))))
+ (aset lflag level t))
+ ;; clear accumulators for deeper levels
+ (loop for l from (1+ level) to (1- lmax) do
+ (aset lsum l 0)
+ (aset lflag l nil)))
+ ((>= level last-level)
+ ;; add what we have here to the accumulator for this level
+ (aset lsum level (+ (aref lsum level)
+ (org-column-string-to-number (or val "0") format)))
+ (and valflag (aset lflag level t)))
+ (t (error "This should not happen")))))))
+
+(defun org-columns-redo ()
+ "Construct the column display again."
+ (interactive)
+ (message "Recomputing columns...")
+ (save-excursion
+ (if (marker-position org-columns-begin-marker)
+ (goto-char org-columns-begin-marker))
+ (org-columns-remove-overlays)
+ (if (org-mode-p)
+ (call-interactively 'org-columns)
+ (call-interactively 'org-agenda-columns)))
+ (message "Recomputing columns...done"))
+
+(defun org-columns-not-in-agenda ()
+ (if (eq major-mode 'org-agenda-mode)
+ (error "This command is only allowed in Org-mode buffers")))
+
+
+(defun org-string-to-number (s)
+ "Convert string to number, and interpret hh:mm:ss."
+ (if (not (string-match ":" s))
+ (string-to-number s)
+ (let ((l (nreverse (org-split-string s ":"))) (sum 0.0))
+ (while l
+ (setq sum (+ (string-to-number (pop l)) (/ sum 60))))
+ sum)))
+
+(defun org-column-number-to-string (n fmt)
+ "Convert a computed column number to a string value, according to FMT."
+ (cond
+ ((eq fmt 'add_times)
+ (let* ((h (floor n)) (m (floor (+ 0.5 (* 60 (- n h))))))
+ (format "%d:%02d" h m)))
+ ((eq fmt 'checkbox)
+ (cond ((= n (floor n)) "[X]")
+ ((> n 1.) "[-]")
+ (t "[ ]")))
+ (t (number-to-string n))))
+
+(defun org-column-string-to-number (s fmt)
+ "Convert a column value to a number that can be used for column computing."
+ (cond
+ ((string-match ":" s)
+ (let ((l (nreverse (org-split-string s ":"))) (sum 0.0))
+ (while l
+ (setq sum (+ (string-to-number (pop l)) (/ sum 60))))
+ sum))
+ ((eq fmt 'checkbox)
+ (if (equal s "[X]") 1. 0.000001))
+ (t (string-to-number s))))
+
+(defun org-columns-uncompile-format (cfmt)
+ "Turn the compiled columns format back into a string representation."
+ (let ((rtn "") e s prop title op width fmt)
+ (while (setq e (pop cfmt))
+ (setq prop (car e)
+ title (nth 1 e)
+ width (nth 2 e)
+ op (nth 3 e)
+ fmt (nth 4 e))
+ (cond
+ ((eq fmt 'add_times) (setq op ":"))
+ ((eq fmt 'checkbox) (setq op "X"))
+ ((eq fmt 'add_numbers) (setq op "+")))
+ (if (equal title prop) (setq title nil))
+ (setq s (concat "%" (if width (number-to-string width))
+ prop
+ (if title (concat "(" title ")"))
+ (if op (concat "{" op "}"))))
+ (setq rtn (concat rtn " " s)))
+ (org-trim rtn)))
+
+(defun org-columns-compile-format (fmt)
+ "Turn a column format string into an alist of specifications.
+The alist has one entry for each column in the format. The elements of
+that list are:
+property the property
+title the title field for the columns
+width the column width in characters, can be nil for automatic
+operator the operator if any
+format the output format for computed results, derived from operator"
+ (let ((start 0) width prop title op f)
+ (setq org-columns-current-fmt-compiled nil)
+ (while (string-match
+ (org-re "%\\([0-9]+\\)?\\([[:alnum:]_-]+\\)\\(?:(\\([^)]+\\))\\)?\\(?:{\\([^}]+\\)}\\)?\\s-*")
+ fmt start)
+ (setq start (match-end 0)
+ width (match-string 1 fmt)
+ prop (match-string 2 fmt)
+ title (or (match-string 3 fmt) prop)
+ op (match-string 4 fmt)
+ f nil)
+ (if width (setq width (string-to-number width)))
+ (cond
+ ((equal op "+") (setq f 'add_numbers))
+ ((equal op ":") (setq f 'add_times))
+ ((equal op "X") (setq f 'checkbox)))
+ (push (list prop title width op f) org-columns-current-fmt-compiled))
+ (setq org-columns-current-fmt-compiled
+ (nreverse org-columns-current-fmt-compiled))))
+
+
+;;; Dynamic block for Column view
+
+(defun org-columns-capture-view ()
+ "Get the column view of the current buffer and return it as a list.
+The list will contains the title row and all other rows. Each row is
+a list of fields."
+ (save-excursion
+ (let* ((title (mapcar 'cadr org-columns-current-fmt-compiled))
+ (n (length title)) row tbl)
+ (goto-char (point-min))
+ (while (re-search-forward "^\\*+ " nil t)
+ (when (get-char-property (match-beginning 0) 'org-columns-key)
+ (setq row nil)
+ (loop for i from 0 to (1- n) do
+ (push (or (get-char-property (+ (match-beginning 0) i) 'org-columns-value-modified)
+ (get-char-property (+ (match-beginning 0) i) 'org-columns-value)
+ "")
+ row))
+ (setq row (nreverse row))
+ (push row tbl)))
+ (append (list title 'hline) (nreverse tbl)))))
+
+(defun org-dblock-write:columnview (params)
+ "Write the column view table.
+PARAMS is a property list of parameters:
+
+:width enforce same column widths with <N> specifiers.
+:id the :ID: property of the entry where the columns view
+ should be built, as a string. When `local', call locally.
+ When `global' call column view with the cursor at the beginning
+ of the buffer (usually this means that the whole buffer switches
+ to column view).
+:hlines When t, insert a hline before each item. When a number, insert
+ a hline before each level <= that number.
+:vlines When t, make each column a colgroup to enforce vertical lines."
+ (let ((pos (move-marker (make-marker) (point)))
+ (hlines (plist-get params :hlines))
+ (vlines (plist-get params :vlines))
+ tbl id idpos nfields tmp)
+ (save-excursion
+ (save-restriction
+ (when (setq id (plist-get params :id))
+ (cond ((not id) nil)
+ ((eq id 'global) (goto-char (point-min)))
+ ((eq id 'local) nil)
+ ((setq idpos (org-find-entry-with-id id))
+ (goto-char idpos))
+ (t (error "Cannot find entry with :ID: %s" id))))
+ (org-columns)
+ (setq tbl (org-columns-capture-view))
+ (setq nfields (length (car tbl)))
+ (org-columns-quit)))
+ (goto-char pos)
+ (move-marker pos nil)
+ (when tbl
+ (when (plist-get params :hlines)
+ (setq tmp nil)
+ (while tbl
+ (if (eq (car tbl) 'hline)
+ (push (pop tbl) tmp)
+ (if (string-match "\\` *\\(\\*+\\)" (caar tbl))
+ (if (and (not (eq (car tmp) 'hline))
+ (or (eq hlines t)
+ (and (numberp hlines) (<= (- (match-end 1) (match-beginning 1)) hlines))))
+ (push 'hline tmp)))
+ (push (pop tbl) tmp)))
+ (setq tbl (nreverse tmp)))
+ (when vlines
+ (setq tbl (mapcar (lambda (x)
+ (if (eq 'hline x) x (cons "" x)))
+ tbl))
+ (setq tbl (append tbl (list (cons "/" (make-list nfields "<>"))))))
+ (setq pos (point))
+ (insert (org-listtable-to-string tbl))
+ (when (plist-get params :width)
+ (insert "\n|" (mapconcat (lambda (x) (format "<%d>" (max 3 x)))
+ org-columns-current-widths "|")))
+ (goto-char pos)
+ (org-table-align))))
+
+(defun org-listtable-to-string (tbl)
+ "Convert a listtable TBL to a string that contains the Org-mode table.
+The table still need to be alligned. The resulting string has no leading
+and tailing newline characters."
+ (mapconcat
+ (lambda (x)
+ (cond
+ ((listp x)
+ (concat "|" (mapconcat 'identity x "|") "|"))
+ ((eq x 'hline) "|-|")
+ (t (error "Garbage in listtable: %s" x))))
+ tbl "\n"))
+
+(defun org-insert-columns-dblock ()
+ "Create a dynamic block capturing a column view table."
+ (interactive)
+ (let ((defaults '(:name "columnview" :hlines 1))
+ (id (completing-read
+ "Capture columns (local, global, entry with :ID: property) [local]: "
+ (append '(("global") ("local"))
+ (mapcar 'list (org-property-values "ID"))))))
+ (if (equal id "") (setq id 'local))
+ (if (equal id "global") (setq id 'global))
+ (setq defaults (append defaults (list :id id)))
+ (org-create-dblock defaults)
+ (org-update-dblock)))
+
;;;; Timestamps
(defvar org-last-changed-timestamp nil)
(defvar org-time-was-given) ; dynamically scoped parameter
+(defvar org-end-time-was-given) ; dynamically scoped parameter
(defvar org-ts-what) ; dynamically scoped parameter
(defun org-time-stamp (arg)
@@ -11920,27 +16232,40 @@ So if you press just return without typing anything, the time stamp
will represent the current date/time. If there is already a timestamp
at the cursor, it will be modified."
(interactive "P")
- (let (org-time-was-given time)
+ (let ((default-time
+ ;; Default time is either today, or, when entering a range,
+ ;; the range start.
+ (if (or (org-at-timestamp-p t)
+ (save-excursion
+ (re-search-backward
+ (concat org-ts-regexp "--?-?\\=") ; 1-3 minuses
+ (- (point) 20) t)))
+ (apply 'encode-time (org-parse-time-string (match-string 1)))
+ (current-time)))
+ org-time-was-given org-end-time-was-given time)
(cond
((and (org-at-timestamp-p)
(eq last-command 'org-time-stamp)
(eq this-command 'org-time-stamp))
(insert "--")
(setq time (let ((this-command this-command))
- (org-read-date arg 'totime)))
+ (org-read-date arg 'totime nil nil default-time)))
(org-insert-time-stamp time (or org-time-was-given arg)))
((org-at-timestamp-p)
(setq time (let ((this-command this-command))
- (org-read-date arg 'totime)))
+ (org-read-date arg 'totime nil nil default-time)))
(when (org-at-timestamp-p) ; just to get the match data
(replace-match "")
(setq org-last-changed-timestamp
- (org-insert-time-stamp time (or org-time-was-given arg))))
+ (org-insert-time-stamp
+ time (or org-time-was-given arg)
+ nil nil nil (list org-end-time-was-given))))
(message "Timestamp updated"))
(t
(setq time (let ((this-command this-command))
- (org-read-date arg 'totime)))
- (org-insert-time-stamp time (or org-time-was-given arg))))))
+ (org-read-date arg 'totime nil nil default-time)))
+ (org-insert-time-stamp time (or org-time-was-given arg)
+ nil nil nil (list org-end-time-was-given))))))
(defun org-time-stamp-inactive (&optional arg)
"Insert an inactive time stamp.
@@ -11949,9 +16274,10 @@ brackets. It is inactive in the sense that it does not trigger agenda entries,
does not link to the calendar and cannot be changed with the S-cursor keys.
So these are more for recording a certain time/date."
(interactive "P")
- (let (org-time-was-given time)
+ (let (org-time-was-given org-end-time-was-given time)
(setq time (org-read-date arg 'totime))
- (org-insert-time-stamp time (or org-time-was-given arg) 'inactive)))
+ (org-insert-time-stamp time (or org-time-was-given arg) 'inactive
+ nil nil (list org-end-time-was-given))))
(defvar org-date-ovl (org-make-overlay 1 1))
(org-overlay-put org-date-ovl 'face 'org-warning)
@@ -11960,12 +16286,16 @@ So these are more for recording a certain time/date."
(defvar org-ans1) ; dynamically scoped parameter
(defvar org-ans2) ; dynamically scoped parameter
-(defun org-read-date (&optional with-time to-time from-string prompt)
+(defvar org-plain-time-of-day-regexp) ; defined below
+(defun org-read-date (&optional with-time to-time from-string prompt
+ default-time)
"Read a date and make things smooth for the user.
The prompt will suggest to enter an ISO date, but you can also enter anything
which will at least partially be understood by `parse-time-string'.
Unrecognized parts of the date will default to the current day, month, year,
-hour and minute. For example,
+hour and minute. If this command is called to replace a timestamp at point,
+of to enter the second timestamp of a range, the default time is taken from the
+existing stamp. For example,
3-2-5 --> 2003-02-05
feb 15 --> currentyear-02-15
sep 12 9 --> 2009-09-12
@@ -11973,8 +16303,18 @@ hour and minute. For example,
22 sept 0:34 --> currentyear-09-22 0:34
12 --> currentyear-currentmonth-12
Fri --> nearest Friday (today or later)
- +4 --> four days from today (only if +N is the only thing given)
etc.
+
+Furthermore you can specify a relative date by giving, as the *first* thing
+in the input: a plus/minus sign, a number and a letter [dwmy] to indicate
+change in days weeks, months, years.
+With a single plus or minus, the date is relative to today. With a double
+plus or minus, it is relative to the date in DEFAULT-TIME. E.g.
+ +4d --> four days from today
+ +4 --> same as above
+ +2w --> two weeks from today
+ ++5 --> five days from default date
+
The function understands only English month and weekday abbreviations,
but this can be configured with the variables `parse-time-months' and
`parse-time-weekdays'.
@@ -11991,32 +16331,26 @@ With an optional argument WITH-TIME, the prompt will suggest to also
insert a time. Note that when WITH-TIME is not set, you can still
enter a time, and this function will inform the calling routine about
this change. The calling routine may then choose to change the format
-used to insert the time stamp into the buffer to include the time."
+used to insert the time stamp into the buffer to include the time.
+With optional argument FROM-STRING, read fomr this string instead from
+the user. PROMPT can overwrite the default prompt. DEFAULT-TIME is
+the time/date that is used for everything that is not specified by the
+user."
(require 'parse-time)
(let* ((org-time-stamp-rounding-minutes
(if (equal with-time '(16)) 0 org-time-stamp-rounding-minutes))
(ct (org-current-time))
- (default-time
- ;; Default time is either today, or, when entering a range,
- ;; the range start.
- (if (save-excursion
- (re-search-backward
- (concat org-ts-regexp "--?-?\\=") ; 1-3 minuses
- (- (point) 20) t))
- (apply
- 'encode-time
- (mapcar (lambda(x) (or x 0))
- (parse-time-string (match-string 1))))
- ct))
+ (def (or default-time ct))
+ ; (defdecode (decode-time def))
(calendar-move-hook nil)
(view-diary-entries-initially nil)
(view-calendar-holidays-initially nil)
(timestr (format-time-string
- (if with-time "%Y-%m-%d %H:%M" "%Y-%m-%d") default-time))
+ (if with-time "%Y-%m-%d %H:%M" "%Y-%m-%d") def))
(prompt (concat (if prompt (concat prompt " ") "")
- (format "YYYY-MM-DD [%s]: " timestr)))
- ans (org-ans0 "") org-ans1 org-ans2 (deltadays 0)
- second minute hour day month year tl wday wday1)
+ (format "Date and/or time (default [%s]): " timestr)))
+ ans (org-ans0 "") org-ans1 org-ans2 delta deltan deltaw deltadef
+ second minute hour day month year tl wday wday1 pm h2 m2)
(cond
(from-string (setq ans from-string))
@@ -12024,47 +16358,46 @@ used to insert the time stamp into the buffer to include the time."
(save-excursion
(save-window-excursion
(calendar)
- (calendar-forward-day (- (time-to-days default-time)
+ (calendar-forward-day (- (time-to-days def)
(calendar-absolute-from-gregorian
(calendar-current-date))))
- (org-eval-in-calendar nil)
+ (org-eval-in-calendar nil t)
(let* ((old-map (current-local-map))
(map (copy-keymap calendar-mode-map))
(minibuffer-local-map (copy-keymap minibuffer-local-map)))
- (define-key map (kbd "RET") 'org-calendar-select)
- (define-key map (if (featurep 'xemacs) [button1] [mouse-1])
+ (org-defkey map (kbd "RET") 'org-calendar-select)
+ (org-defkey map (if (featurep 'xemacs) [button1] [mouse-1])
'org-calendar-select-mouse)
- (define-key map (if (featurep 'xemacs) [button2] [mouse-2])
+ (org-defkey map (if (featurep 'xemacs) [button2] [mouse-2])
'org-calendar-select-mouse)
- (define-key minibuffer-local-map [(meta shift left)]
+ (org-defkey minibuffer-local-map [(meta shift left)]
(lambda () (interactive)
(org-eval-in-calendar '(calendar-backward-month 1))))
- (define-key minibuffer-local-map [(meta shift right)]
+ (org-defkey minibuffer-local-map [(meta shift right)]
(lambda () (interactive)
(org-eval-in-calendar '(calendar-forward-month 1))))
- (define-key minibuffer-local-map [(shift up)]
+ (org-defkey minibuffer-local-map [(shift up)]
(lambda () (interactive)
(org-eval-in-calendar '(calendar-backward-week 1))))
- (define-key minibuffer-local-map [(shift down)]
+ (org-defkey minibuffer-local-map [(shift down)]
(lambda () (interactive)
(org-eval-in-calendar '(calendar-forward-week 1))))
- (define-key minibuffer-local-map [(shift left)]
+ (org-defkey minibuffer-local-map [(shift left)]
(lambda () (interactive)
(org-eval-in-calendar '(calendar-backward-day 1))))
- (define-key minibuffer-local-map [(shift right)]
+ (org-defkey minibuffer-local-map [(shift right)]
(lambda () (interactive)
(org-eval-in-calendar '(calendar-forward-day 1))))
- (define-key minibuffer-local-map ">"
+ (org-defkey minibuffer-local-map ">"
(lambda () (interactive)
(org-eval-in-calendar '(scroll-calendar-left 1))))
- (define-key minibuffer-local-map "<"
+ (org-defkey minibuffer-local-map "<"
(lambda () (interactive)
(org-eval-in-calendar '(scroll-calendar-right 1))))
(unwind-protect
(progn
(use-local-map map)
(setq org-ans0 (read-string prompt "" nil nil))
-; (if (not (string-match "\\S-" org-ans0)) (setq org-ans0 nil))
;; org-ans0: from prompt
;; org-ans1: from mouse click
;; org-ans2: from calendar motion
@@ -12074,29 +16407,73 @@ used to insert the time stamp into the buffer to include the time."
(setq ans (read-string prompt "" nil timestr))))
(org-detach-overlay org-date-ovl)
- (if (string-match "^[ \t]*[-+][0-9]+[ \t]*$" org-ans0)
- (setq deltadays (string-to-number ans) ans ""))
+ (when (setq delta (org-read-date-get-relative ans (current-time) def))
+ (setq ans (replace-match "" t t ans)
+ deltan (car delta)
+ deltaw (nth 1 delta)
+ deltadef (nth 2 delta)))
+
+ ;; Help matching ISO dates with single digit month ot day, like 2006-8-11.
+ (when (string-match
+ "^ *\\(\\([0-9]+\\)-\\)?\\([0-1]?[0-9]\\)-\\([0-3]?[0-9]\\)\\([^-0-9]\\|$\\)" ans)
+ (setq year (if (match-end 2)
+ (string-to-number (match-string 2 ans))
+ (string-to-number (format-time-string "%Y")))
+ month (string-to-number (match-string 3 ans))
+ day (string-to-number (match-string 4 ans)))
+ (if (< year 100) (setq year (+ 2000 year)))
+ (setq ans (replace-match (format "%04d-%02d-%02d\\5" year month day)
+ t nil ans)))
+ ;; Help matching am/pm times, because `parse-time-string' does not do that.
+ ;; If there is a time with am/pm, and *no* time without it, we convert
+ ;; so that matching will be successful.
+ (loop for i from 1 to 2 do ; twice, for end time as well
+ (when (and (not (string-match "\\(\\`\\|[^+]\\)[012]?[0-9]:[0-9][0-9]\\([ \t\n]\\|$\\)" ans))
+ (string-match "\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)?\\(am\\|AM\\|pm\\|PM\\)\\>" ans))
+ (setq hour (string-to-number (match-string 1 ans))
+ minute (if (match-end 3)
+ (string-to-number (match-string 3 ans))
+ 0)
+ pm (equal ?p
+ (string-to-char (downcase (match-string 4 ans)))))
+ (if (and (= hour 12) (not pm))
+ (setq hour 0)
+ (if (and pm (< hour 12)) (setq hour (+ 12 hour))))
+ (setq ans (replace-match (format "%02d:%02d" hour minute)
+ t t ans))))
+
+ ;; Check if a time range is given as a duration
+ (when (string-match "\\([012]?[0-9]\\):\\([0-6][0-9]\\)\\+\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)?" ans)
+ (setq hour (string-to-number (match-string 1 ans))
+ h2 (+ hour (string-to-number (match-string 3 ans)))
+ minute (string-to-number (match-string 2 ans))
+ m2 (+ minute (if (match-end 5) (string-to-number (match-string 5 ans))0)))
+ (setq ans (replace-match (format "%02d:%02d-%02d:%02d" hour minute h2 m2) t t ans)))
+
+ ;; Check if there is a time range
+ (when (and (boundp 'org-end-time-was-given)
+ (string-match org-plain-time-of-day-regexp ans)
+ (match-end 8))
+ (setq org-end-time-was-given (match-string 8 ans))
+ (setq ans (concat (substring ans 0 (match-beginning 7))
+ (substring ans (match-end 7)))))
- (if (string-match
- "^ *\\(\\([0-9]+\\)-\\)?\\([0-1]?[0-9]\\)-\\([0-3]?[0-9]\\)\\([^-0-9]\\|$\\)" ans)
- (progn
- (setq year (if (match-end 2)
- (string-to-number (match-string 2 ans))
- (string-to-number (format-time-string "%Y")))
- month (string-to-number (match-string 3 ans))
- day (string-to-number (match-string 4 ans)))
- (if (< year 100) (setq year (+ 2000 year)))
- (setq ans (replace-match (format "%04d-%02d-%02d\\5" year month day)
- t nil ans))))
(setq tl (parse-time-string ans)
- year (or (nth 5 tl) (string-to-number (format-time-string "%Y" ct)))
- month (or (nth 4 tl) (string-to-number (format-time-string "%m" ct)))
- day (or (nth 3 tl) (string-to-number (format-time-string "%d" ct)))
- hour (or (nth 2 tl) (string-to-number (format-time-string "%H" ct)))
- minute (or (nth 1 tl) (string-to-number (format-time-string "%M" ct)))
+ day (or (nth 3 tl) (string-to-number (format-time-string "%d" def)))
+ month (or (nth 4 tl) (string-to-number (format-time-string "%m" def)))
+ year (or (nth 5 tl) (string-to-number (format-time-string "%Y" def)))
+ hour (or (nth 2 tl) (string-to-number (format-time-string "%H" def)))
+ minute (or (nth 1 tl) (string-to-number (format-time-string "%M" def)))
second (or (nth 0 tl) 0)
wday (nth 6 tl))
- (setq day (+ day deltadays))
+ (when deltan
+ (unless deltadef
+ (let ((now (decode-time (current-time))))
+ (setq day (nth 3 now) month (nth 4 now) year (nth 5 now))))
+ (cond ((member deltaw '("d" "")) (setq day (+ day deltan)))
+ ((equal deltaw "w") (setq day (+ day (* 7 deltan))))
+ ((equal deltaw "m") (setq month (+ month deltan)))
+ ((equal deltaw "y") (setq year (+ year deltan)))))
(when (and wday (not (nth 3 tl)))
;; Weekday was given, but no day, so pick that day in the week
;; on or after the derived date.
@@ -12113,18 +16490,76 @@ used to insert the time stamp into the buffer to include the time."
(format "%04d-%02d-%02d %02d:%02d" year month day hour minute)
(format "%04d-%02d-%02d" year month day)))))
-(defun org-eval-in-calendar (form)
+;(defun org-parse-for-shift (n1 n2 given-dec default-dec)
+; (cond
+; ((not (nth n1 given-dec))
+; (nth n1 default-dec))
+; ((or (> (nth n1 given-dec) (nth n1 (default-dec)))
+; (not org-read-date-prefer-future))
+; (nth n1 given-dec))
+; (t (1+
+; (if (nth 3 given-dec)
+; (nth 3 given-dec)
+; (if (> (nth
+; (setq given
+; (if (and
+
+(defvar parse-time-weekdays)
+
+(defun org-read-date-get-relative (s today default)
+ "Check string S for special relative date string.
+TODAY and DEFAULT are internal times, for today and for a default.
+Return shift list (N what def-flag)
+WHAT is \"d\", \"w\", \"m\", or \"y\" for day. week, month, year.
+N is the number if WHATs to shift
+DEF-FLAG is t when a double ++ or -- indicates shift relative to
+ the DEFAULT date rather than TODAY."
+ (when (string-match
+ (concat
+ "\\`[ \t]*\\([-+]\\{1,2\\}\\)"
+ "\\([0-9]+\\)?"
+ "\\([dwmy]\\|\\(" (mapconcat 'car parse-time-weekdays "\\|") "\\)\\)?"
+ "\\([ \t]\\|$\\)") s)
+ (let* ((dir (if (match-end 1)
+ (string-to-char (substring (match-string 1 s) -1))
+ ?+))
+ (rel (and (match-end 1) (= 2 (- (match-end 1) (match-beginning 1)))))
+ (n (if (match-end 2) (string-to-number (match-string 2 s)) 1))
+ (what (if (match-end 3) (match-string 3 s) "d"))
+ (wday1 (cdr (assoc (downcase what) parse-time-weekdays)))
+ (date (if rel default today))
+ (wday (nth 6 (decode-time date)))
+ delta)
+ (if wday1
+ (progn
+ (setq delta (mod (+ 7 (- wday1 wday)) 7))
+ (if (= dir ?-) (setq delta (- delta 7)))
+ (if (> n 1) (setq delta (+ delta (* (1- n) (if (= dir ?-) -7 7)))))
+ (list delta "d" rel))
+ (list (* n (if (= dir ?-) -1 1)) what rel)))))
+
+(defun org-eval-in-calendar (form &optional keepdate)
"Eval FORM in the calendar window and return to current window.
Also, store the cursor date in variable org-ans2."
(let ((sw (selected-window)))
(select-window (get-buffer-window "*Calendar*"))
(eval form)
- (when (calendar-cursor-to-date)
+ (when (and (not keepdate) (calendar-cursor-to-date))
(let* ((date (calendar-cursor-to-date))
(time (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date))))
(setq org-ans2 (format-time-string "%Y-%m-%d" time))))
(org-move-overlay org-date-ovl (1- (point)) (1+ (point)) (current-buffer))
- (select-window sw)))
+ (select-window sw)
+ ;; Update the prompt to show new default date
+ (save-excursion
+ (goto-char (point-min))
+ (when (and org-ans2
+ (re-search-forward "\\[[-0-9]+\\]" nil t)
+ (get-text-property (match-end 0) 'field))
+ (let ((inhibit-read-only t))
+ (replace-match (concat "[" org-ans2 "]") t t)
+ (add-text-properties (point-min) (1+ (match-end 0))
+ (text-properties-at (1+ (point-min)))))))))
(defun org-calendar-select ()
"Return to `org-read-date' with the date currently selected.
@@ -12136,7 +16571,7 @@ This is used by `org-read-date' in a temporary keymap for the calendar buffer."
(setq org-ans1 (format-time-string "%Y-%m-%d" time)))
(if (active-minibuffer-window) (exit-minibuffer))))
-(defun org-insert-time-stamp (time &optional with-hm inactive pre post)
+(defun org-insert-time-stamp (time &optional with-hm inactive pre post extra)
"Insert a date stamp for the date given by the internal TIME.
WITH-HM means, use the stamp format that includes the time of the day.
INACTIVE means use square brackets instead of angular ones, so that the
@@ -12147,9 +16582,21 @@ The command returns the inserted time stamp."
(let ((fmt (funcall (if with-hm 'cdr 'car) org-time-stamp-formats))
stamp)
(if inactive (setq fmt (concat "[" (substring fmt 1 -1) "]")))
- (insert (or pre ""))
- (insert (setq stamp (format-time-string fmt time)))
- (insert (or post ""))
+ (insert-before-markers (or pre ""))
+ (insert-before-markers (setq stamp (format-time-string fmt time)))
+ (when (listp extra)
+ (setq extra (car extra))
+ (if (and (stringp extra)
+ (string-match "\\([0-9]+\\):\\([0-9]+\\)" extra))
+ (setq extra (format "-%02d:%02d"
+ (string-to-number (match-string 1 extra))
+ (string-to-number (match-string 2 extra))))
+ (setq extra nil)))
+ (when extra
+ (backward-char 1)
+ (insert-before-markers extra)
+ (forward-char 1))
+ (insert-before-markers (or post ""))
stamp))
(defun org-toggle-time-stamp-overlays ()
@@ -12175,17 +16622,22 @@ The command returns the inserted time stamp."
(defun org-display-custom-time (beg end)
"Overlay modified time stamp format over timestamp between BED and END."
- (let* ((t1 (save-match-data
- (org-parse-time-string (buffer-substring beg end) t)))
- (w1 (- end beg))
- (with-hm (and (nth 1 t1) (nth 2 t1)))
- (tf (funcall (if with-hm 'cdr 'car) org-time-stamp-custom-formats))
- (time (org-fix-decoded-time t1))
- (str (org-add-props
+ (let* ((ts (buffer-substring beg end))
+ t1 w1 with-hm tf time str w2 (off 0))
+ (save-match-data
+ (setq t1 (org-parse-time-string ts t))
+ (if (string-match "\\(-[0-9]+:[0-9]+\\)?\\( \\+[0-9]+[dwmy]\\)?\\'" ts)
+ (setq off (- (match-end 0) (match-beginning 0)))))
+ (setq end (- end off))
+ (setq w1 (- end beg)
+ with-hm (and (nth 1 t1) (nth 2 t1))
+ tf (funcall (if with-hm 'cdr 'car) org-time-stamp-custom-formats)
+ time (org-fix-decoded-time t1)
+ str (org-add-props
(format-time-string
(substring tf 1 -1) (apply 'encode-time time))
- nil 'mouse-face 'highlight))
- (w2 (length str)))
+ nil 'mouse-face 'highlight)
+ w2 (length str))
(if (not (= w2 w1))
(add-text-properties (1+ beg) (+ 2 beg)
(list 'org-dwidth t 'org-dwidth-n (- w1 w2))))
@@ -12235,10 +16687,25 @@ Don't touch the rest."
(defun org-deadline-close (timestamp-string &optional ndays)
"Is the time in TIMESTAMP-STRING close to the current date?"
- (and (< (org-days-to-time timestamp-string)
- (or ndays org-deadline-warning-days))
+ (setq ndays (or ndays (org-get-wdays timestamp-string)))
+ (and (< (org-days-to-time timestamp-string) ndays)
(not (org-entry-is-done-p))))
+(defun org-get-wdays (ts)
+ "Get the deadline lead time appropriate for timestring TS."
+ (cond
+ ((<= org-deadline-warning-days 0)
+ ;; 0 or negative, enforce this value no matter what
+ (- org-deadline-warning-days))
+ ((string-match "-\\([0-9]+\\)\\([dwmy]\\)\\(\\'\\|>\\)" ts)
+ ;; lead time is specified.
+ (floor (* (string-to-number (match-string 1 ts))
+ (cdr (assoc (match-string 2 ts)
+ '(("d" . 1) ("w" . 7)
+ ("m" . 30.4) ("y" . 365.25)))))))
+ ;; go for the default.
+ (t org-deadline-warning-days)))
+
(defun org-calendar-select-mouse (ev)
"Return to `org-read-date' with the date currently selected.
This is used by `org-read-date' in a temporary keymap for the calendar buffer."
@@ -12261,7 +16728,7 @@ days. If the prefix is a raw \\[universal-argument] prefix, all deadlines are s
(cond
((equal ndays '(4)) 100000)
(ndays (prefix-numeric-value ndays))
- (t org-deadline-warning-days)))
+ (t (abs org-deadline-warning-days))))
(case-fold-search nil)
(regexp (concat "\\<" org-deadline-string " *<\\([^>]+\\)>"))
(callback
@@ -12283,10 +16750,10 @@ days in order to avoid rounding problems."
(or
(org-clock-update-time-maybe)
(save-excursion
- (unless (org-at-date-range-p)
+ (unless (org-at-date-range-p t)
(goto-char (point-at-bol))
- (re-search-forward org-tr-regexp (point-at-eol) t))
- (if (not (org-at-date-range-p))
+ (re-search-forward org-tr-regexp-both (point-at-eol) t))
+ (if (not (org-at-date-range-p t))
(error "Not at a time-stamp range, and none found in current line")))
(let* ((ts1 (match-string 1))
(ts2 (match-string 2))
@@ -12349,12 +16816,152 @@ days in order to avoid rounding problems."
(defun org-time-string-to-time (s)
(apply 'encode-time (org-parse-time-string s)))
+(defun org-time-string-to-absolute (s &optional daynr)
+ "Convert a time stamp to an absolute day number.
+If there is a specifyer for a cyclic time stamp, get the closest date to
+DAYNR."
+ (cond
+ ((and daynr (string-match "\\`%%\\((.*)\\)" s))
+ (if (org-diary-sexp-entry (match-string 1 s) "" date)
+ daynr
+ (+ daynr 1000)))
+ ((and daynr (string-match "\\+[0-9]+[dwmy]" s))
+ (org-closest-date s (if (and (boundp 'daynr) (integerp daynr)) daynr
+ (time-to-days (current-time))) (match-string 0 s)))
+ (t (time-to-days (apply 'encode-time (org-parse-time-string s))))))
+
+(defun org-time-from-absolute (d)
+ "Return the time corresponding to date D.
+D may be an absolute day number, or a calendar-type list (month day year)."
+ (if (numberp d) (setq d (calendar-gregorian-from-absolute d)))
+ (encode-time 0 0 0 (nth 1 d) (car d) (nth 2 d)))
+
+(defun org-calendar-holiday ()
+ "List of holidays, for Diary display in Org-mode."
+ (let ((hl (check-calendar-holidays date)))
+ (if hl (mapconcat 'identity hl "; "))))
+
+(defun org-diary-sexp-entry (sexp entry date)
+ "Process a SEXP diary ENTRY for DATE."
+ (require 'diary-lib)
+ (let ((result (if calendar-debug-sexp
+ (let ((stack-trace-on-error t))
+ (eval (car (read-from-string sexp))))
+ (condition-case nil
+ (eval (car (read-from-string sexp)))
+ (error
+ (beep)
+ (message "Bad sexp at line %d in %s: %s"
+ (org-current-line)
+ (buffer-file-name) sexp)
+ (sleep-for 2))))))
+ (cond ((stringp result) result)
+ ((and (consp result)
+ (stringp (cdr result))) (cdr result))
+ (result entry)
+ (t nil))))
+
+(defun org-diary-to-ical-string (frombuf)
+ "Get iCalendar entreis from diary entries in buffer FROMBUF.
+This uses the icalendar.el library."
+ (let* ((tmpdir (if (featurep 'xemacs)
+ (temp-directory)
+ temporary-file-directory))
+ (tmpfile (make-temp-name
+ (expand-file-name "orgics" tmpdir)))
+ buf rtn b e)
+ (save-excursion
+ (set-buffer frombuf)
+ (icalendar-export-region (point-min) (point-max) tmpfile)
+ (setq buf (find-buffer-visiting tmpfile))
+ (set-buffer buf)
+ (goto-char (point-min))
+ (if (re-search-forward "^BEGIN:VEVENT" nil t)
+ (setq b (match-beginning 0)))
+ (goto-char (point-max))
+ (if (re-search-backward "^END:VEVENT" nil t)
+ (setq e (match-end 0)))
+ (setq rtn (if (and b e) (concat (buffer-substring b e) "\n") "")))
+ (kill-buffer buf)
+ (kill-buffer frombuf)
+ (delete-file tmpfile)
+ rtn))
+
+(defun org-closest-date (start current change)
+ "Find the date closest to CURRENT that is consistent with START and CHANGE."
+ ;; Make the proper lists from the dates
+ (catch 'exit
+ (let ((a1 '(("d" . day) ("w" . week) ("m" . month) ("y" . year)))
+ dn dw sday cday n1 n2
+ d m y y1 y2 date1 date2 nmonths nm ny m2)
+
+ (setq start (org-date-to-gregorian start)
+ current (org-date-to-gregorian
+ (if org-agenda-repeating-timestamp-show-all
+ current
+ (time-to-days (current-time))))
+ sday (calendar-absolute-from-gregorian start)
+ cday (calendar-absolute-from-gregorian current))
+
+ (if (<= cday sday) (throw 'exit sday))
+
+ (if (string-match "\\(\\+[0-9]+\\)\\([dwmy]\\)" change)
+ (setq dn (string-to-number (match-string 1 change))
+ dw (cdr (assoc (match-string 2 change) a1)))
+ (error "Invalid change specifyer: %s" change))
+ (if (eq dw 'week) (setq dw 'day dn (* 7 dn)))
+ (cond
+ ((eq dw 'day)
+ (setq n1 (+ sday (* dn (floor (/ (- cday sday) dn))))
+ n2 (+ n1 dn)))
+ ((eq dw 'year)
+ (setq d (nth 1 start) m (car start) y1 (nth 2 start) y2 (nth 2 current))
+ (setq y1 (+ (* (floor (/ (- y2 y1) dn)) dn) y1))
+ (setq date1 (list m d y1)
+ n1 (calendar-absolute-from-gregorian date1)
+ date2 (list m d (+ y1 (* (if (< n1 cday) 1 -1) dn)))
+ n2 (calendar-absolute-from-gregorian date2)))
+ ((eq dw 'month)
+ ;; approx number of month between the tow dates
+ (setq nmonths (floor (/ (- cday sday) 30.436875)))
+ ;; How often does dn fit in there?
+ (setq d (nth 1 start) m (car start) y (nth 2 start)
+ nm (* dn (max 0 (1- (floor (/ nmonths dn)))))
+ m (+ m nm)
+ ny (floor (/ m 12))
+ y (+ y ny)
+ m (- m (* ny 12)))
+ (while (> m 12) (setq m (- m 12) y (1+ y)))
+ (setq n1 (calendar-absolute-from-gregorian (list m d y)))
+ (setq m2 (+ m dn) y2 y)
+ (if (> m2 12) (setq y2 (1+ y2) m2 (- m2 12)))
+ (setq n2 (calendar-absolute-from-gregorian (list m2 d y2)))
+ (while (< n2 cday)
+ (setq n1 n2 m m2 y y2)
+ (setq m2 (+ m dn) y2 y)
+ (if (> m2 12) (setq y2 (1+ y2) m2 (- m2 12)))
+ (setq n2 (calendar-absolute-from-gregorian (list m2 d y2))))))
+
+ (if org-agenda-repeating-timestamp-show-all
+ (if (> (abs (- cday n1)) (abs (- cday n2))) n2 n1)
+ (if (= cday n1) n1 n2)))))
+
+(defun org-date-to-gregorian (date)
+ "Turn any specification of DATE into a gregorian date for the calendar."
+ (cond ((integerp date) (calendar-gregorian-from-absolute date))
+ ((and (listp date) (= (length date) 3)) date)
+ ((stringp date)
+ (setq date (org-parse-time-string date))
+ (list (nth 4 date) (nth 3 date) (nth 5 date)))
+ ((listp date)
+ (list (nth 4 date) (nth 3 date) (nth 5 date)))))
+
(defun org-parse-time-string (s &optional nodefault)
"Parse the standard Org-mode time string.
This should be a lot faster than the normal `parse-time-string'.
If time is not given, defaults to 0:00. However, with optional NODEFAULT,
hour and minute fields will be nil if not given."
- (if (string-match org-ts-regexp1 s)
+ (if (string-match org-ts-regexp0 s)
(list 0
(if (or (match-beginning 8) (not nodefault))
(string-to-number (or (match-string 8 s) "0")))
@@ -12413,21 +17020,39 @@ With prefix ARG, change that many days."
(ans (or (looking-at tsr)
(save-excursion
(skip-chars-backward "^[<\n\r\t")
- (if (> (point) 1) (backward-char 1))
+ (if (> (point) (point-min)) (backward-char 1))
(and (looking-at tsr)
(> (- (match-end 0) pos) -1))))))
- (and (boundp 'org-ts-what)
+ (and ans
+ (boundp 'org-ts-what)
(setq org-ts-what
(cond
+ ((= pos (match-beginning 0)) 'bracket)
+ ((= pos (1- (match-end 0))) 'bracket)
((org-pos-in-match-range pos 2) 'year)
((org-pos-in-match-range pos 3) 'month)
((org-pos-in-match-range pos 7) 'hour)
((org-pos-in-match-range pos 8) 'minute)
((or (org-pos-in-match-range pos 4)
(org-pos-in-match-range pos 5)) 'day)
+ ((and (> pos (or (match-end 8) (match-end 5)))
+ (< pos (match-end 0)))
+ (- pos (or (match-end 8) (match-end 5))))
(t 'day))))
ans))
+(defun org-toggle-timestamp-type ()
+ ""
+ (interactive)
+ (when (org-at-timestamp-p t)
+ (save-excursion
+ (goto-char (match-beginning 0))
+ (insert (if (equal (char-after) ?<) "[" "<")) (delete-char 1)
+ (goto-char (1- (match-end 0)))
+ (insert (if (equal (char-after) ?>) "]" ">")) (delete-char 1))
+ (message "Timestamp is now %sactive"
+ (if (equal (char-before) ?>) "in" ""))))
+
(defun org-timestamp-change (n &optional what)
"Change the date in the time stamp at point.
The date will be changed by N times WHAT. WHAT can be `day', `month',
@@ -12436,54 +17061,86 @@ in the timestamp determines what will be changed."
(let ((pos (point))
with-hm inactive
org-ts-what
+ extra
ts time time0)
(if (not (org-at-timestamp-p t))
(error "Not at a timestamp"))
- (if (and (not what) (not (eq org-ts-what 'day))
- org-display-custom-times
- (get-text-property (point) 'display)
- (not (get-text-property (1- (point)) 'display)))
- (setq org-ts-what 'day))
- (setq org-ts-what (or what org-ts-what)
- with-hm (<= (abs (- (cdr org-ts-lengths)
- (- (match-end 0) (match-beginning 0))))
- 1)
- inactive (= (char-after (match-beginning 0)) ?\[)
- ts (match-string 0))
- (replace-match "")
- (setq time0 (org-parse-time-string ts))
- (setq time
- (apply 'encode-time
- (append
- (list (or (car time0) 0))
- (list (+ (if (eq org-ts-what 'minute) n 0) (nth 1 time0)))
- (list (+ (if (eq org-ts-what 'hour) n 0) (nth 2 time0)))
- (list (+ (if (eq org-ts-what 'day) n 0) (nth 3 time0)))
- (list (+ (if (eq org-ts-what 'month) n 0) (nth 4 time0)))
- (list (+ (if (eq org-ts-what 'year) n 0) (nth 5 time0)))
- (nthcdr 6 time0))))
- (if (eq what 'calendar)
- (let ((cal-date
- (save-excursion
- (save-match-data
- (set-buffer "*Calendar*")
- (calendar-cursor-to-date)))))
- (setcar (nthcdr 4 time0) (nth 0 cal-date)) ; month
- (setcar (nthcdr 3 time0) (nth 1 cal-date)) ; day
- (setcar (nthcdr 5 time0) (nth 2 cal-date)) ; year
- (setcar time0 (or (car time0) 0))
- (setcar (nthcdr 1 time0) (or (nth 1 time0) 0))
- (setcar (nthcdr 2 time0) (or (nth 1 time0) 0))
- (setq time (apply 'encode-time time0))))
- (setq org-last-changed-timestamp
- (org-insert-time-stamp time with-hm inactive))
- (org-clock-update-time-maybe)
- (goto-char pos)
- ;; Try to recenter the calendar window, if any
- (if (and org-calendar-follow-timestamp-change
- (get-buffer-window "*Calendar*" t)
- (memq org-ts-what '(day month year)))
- (org-recenter-calendar (time-to-days time)))))
+ (if (and (not what) (eq org-ts-what 'bracket))
+ (org-toggle-timestamp-type)
+ (if (and (not what) (not (eq org-ts-what 'day))
+ org-display-custom-times
+ (get-text-property (point) 'display)
+ (not (get-text-property (1- (point)) 'display)))
+ (setq org-ts-what 'day))
+ (setq org-ts-what (or what org-ts-what)
+ inactive (= (char-after (match-beginning 0)) ?\[)
+ ts (match-string 0))
+ (replace-match "")
+ (if (string-match
+ "\\(\\(-[012][0-9]:[0-5][0-9]\\)?\\( [-+][0-9]+[dwmy]\\)*\\)[]>]"
+ ts)
+ (setq extra (match-string 1 ts)))
+ (if (string-match "^.\\{10\\}.*?[0-9]+:[0-9][0-9]" ts)
+ (setq with-hm t))
+ (setq time0 (org-parse-time-string ts))
+ (setq time
+ (encode-time (or (car time0) 0)
+ (+ (if (eq org-ts-what 'minute) n 0) (nth 1 time0))
+ (+ (if (eq org-ts-what 'hour) n 0) (nth 2 time0))
+ (+ (if (eq org-ts-what 'day) n 0) (nth 3 time0))
+ (+ (if (eq org-ts-what 'month) n 0) (nth 4 time0))
+ (+ (if (eq org-ts-what 'year) n 0) (nth 5 time0))
+ (nthcdr 6 time0)))
+ (when (integerp org-ts-what)
+ (setq extra (org-modify-ts-extra extra org-ts-what n)))
+ (if (eq what 'calendar)
+ (let ((cal-date (org-get-date-from-calendar)))
+ (setcar (nthcdr 4 time0) (nth 0 cal-date)) ; month
+ (setcar (nthcdr 3 time0) (nth 1 cal-date)) ; day
+ (setcar (nthcdr 5 time0) (nth 2 cal-date)) ; year
+ (setcar time0 (or (car time0) 0))
+ (setcar (nthcdr 1 time0) (or (nth 1 time0) 0))
+ (setcar (nthcdr 2 time0) (or (nth 2 time0) 0))
+ (setq time (apply 'encode-time time0))))
+ (setq org-last-changed-timestamp
+ (org-insert-time-stamp time with-hm inactive nil nil extra))
+ (org-clock-update-time-maybe)
+ (goto-char pos)
+ ;; Try to recenter the calendar window, if any
+ (if (and org-calendar-follow-timestamp-change
+ (get-buffer-window "*Calendar*" t)
+ (memq org-ts-what '(day month year)))
+ (org-recenter-calendar (time-to-days time))))))
+
+;; FIXME: does not yet work for lead times
+(defun org-modify-ts-extra (s pos n)
+ "Change the different parts of the lead-time and repeat fields in timestamp."
+ (let ((idx '(("d" . 0) ("w" . 1) ("m" . 2) ("y" . 3) ("d" . -1) ("y" . 4)))
+ ng h m new)
+ (when (string-match "\\(-\\([012][0-9]\\):\\([0-5][0-9]\\)\\)?\\( \\+\\([0-9]+\\)\\([dmwy]\\)\\)?" s)
+ (cond
+ ((or (org-pos-in-match-range pos 2)
+ (org-pos-in-match-range pos 3))
+ (setq m (string-to-number (match-string 3 s))
+ h (string-to-number (match-string 2 s)))
+ (if (org-pos-in-match-range pos 2)
+ (setq h (+ h n))
+ (setq m (+ m n)))
+ (if (< m 0) (setq m (+ m 60) h (1- h)))
+ (if (> m 59) (setq m (- m 60) h (1+ h)))
+ (setq h (min 24 (max 0 h)))
+ (setq ng 1 new (format "-%02d:%02d" h m)))
+ ((org-pos-in-match-range pos 6)
+ (setq ng 6 new (car (rassoc (+ n (cdr (assoc (match-string 6 s) idx))) idx))))
+ ((org-pos-in-match-range pos 5)
+ (setq ng 5 new (format "%d" (max 1 (+ n (string-to-number (match-string 5 s))))))))
+
+ (when ng
+ (setq s (concat
+ (substring s 0 (match-beginning ng))
+ new
+ (substring s (match-end ng))))))
+ s))
(defun org-recenter-calendar (date)
"If the calendar is visible, recenter it to DATE."
@@ -12517,16 +17174,104 @@ A prefix ARG can be used to force the current date."
(calendar-goto-today)
(if (and diff (not arg)) (calendar-forward-day diff))))
+(defun org-get-date-from-calendar ()
+ "Return a list (month day year) of date at point in calendar."
+ (with-current-buffer "*Calendar*"
+ (save-match-data
+ (calendar-cursor-to-date))))
+
(defun org-date-from-calendar ()
"Insert time stamp corresponding to cursor date in *Calendar* buffer.
If there is already a time stamp at the cursor position, update it."
(interactive)
- (org-timestamp-change 0 'calendar))
+ (if (org-at-timestamp-p t)
+ (org-timestamp-change 0 'calendar)
+ (let ((cal-date (org-get-date-from-calendar)))
+ (org-insert-time-stamp
+ (encode-time 0 0 0 (nth 1 cal-date) (car cal-date) (nth 2 cal-date))))))
+
+;; Make appt aware of appointments from the agenda
+;;;###autoload
+(defun org-agenda-to-appt (&optional filter)
+ "Activate appointments found in `org-agenda-files'.
+When prefixed, prompt for a regular expression and use it as a
+filter: only add entries if they match this regular expression.
+
+FILTER can be a string. In this case, use this string as a
+regular expression to filter results.
+
+FILTER can also be an alist, with the car of each cell being
+either 'headline or 'category. For example:
+
+ '((headline \"IMPORTANT\")
+ (category \"Work\"))
+
+will only add headlines containing IMPORTANT or headlines
+belonging to the category \"Work\"."
+ (interactive "P")
+ (require 'calendar)
+ (if (equal filter '(4))
+ (setq filter (read-from-minibuffer "Regexp filter: ")))
+ (let* ((cnt 0) ; count added events
+ (today (org-date-to-gregorian
+ (time-to-days (current-time))))
+ (files (org-agenda-files)) entries file)
+ ;; Get all entries which may contain an appt
+ (while (setq file (pop files))
+ (setq entries
+ (append entries
+ (org-agenda-get-day-entries
+ file today
+ :timestamp :scheduled :deadline))))
+ (setq entries (delq nil entries))
+ ;; Map thru entries and find if they pass thru the filter
+ (mapc
+ (lambda(x)
+ (let* ((evt (org-trim (get-text-property 1 'txt x)))
+ (cat (get-text-property 1 'org-category x))
+ (tod (get-text-property 1 'time-of-day x))
+ (ok (or (null filter)
+ (and (stringp filter) (string-match filter evt))
+ (and (listp filter)
+ (or (string-match
+ (cadr (assoc 'category filter)) cat)
+ (string-match
+ (cadr (assoc 'headline filter)) evt))))))
+ ;; FIXME Shall we remove text-properties for the appt text?
+ ;; (setq evt (set-text-properties 0 (length evt) nil evt))
+ (when (and ok tod)
+ (setq tod (number-to-string tod)
+ tod (when (string-match
+ "\\([0-9]\\{1,2\\}\\)\\([0-9]\\{2\\}\\)" tod)
+ (concat (match-string 1 tod) ":"
+ (match-string 2 tod))))
+ (appt-add tod evt)
+ (setq cnt (1+ cnt))))) entries)
+ (message "Added %d event%s for today" cnt (if (> cnt 1) "s" ""))))
;;; The clock for measuring work time.
+(defvar org-mode-line-string "")
+(put 'org-mode-line-string 'risky-local-variable t)
+
+(defvar org-mode-line-timer nil)
+(defvar org-clock-heading "")
+(defvar org-clock-start-time "")
+
+(defun org-update-mode-line ()
+ (let* ((delta (- (time-to-seconds (current-time))
+ (time-to-seconds org-clock-start-time)))
+ (h (floor delta 3600))
+ (m (floor (- delta (* 3600 h)) 60)))
+ (setq org-mode-line-string
+ (propertize (format "-[%d:%02d (%s)]" h m org-clock-heading)
+ 'help-echo "Org-mode clock is running"))
+ (force-mode-line-update)))
+
(defvar org-clock-marker (make-marker)
"Marker recording the last clock-in.")
+(defvar org-clock-mode-line-entry nil
+ "Information for the modeline about the running clock.")
(defun org-clock-in ()
"Start the clock on the current item.
@@ -12536,19 +17281,77 @@ If necessary, clock-out of the currently active clock."
(let (ts)
(save-excursion
(org-back-to-heading t)
- (beginning-of-line 2)
- (when (and (looking-at (concat "[ \t]*" org-keyword-time-regexp))
- (not (equal (match-string 1) org-clock-string)))
- ;; First line hast scheduling info, move one further
- (beginning-of-line 2)
- (or (bolp) (newline)))
+ (if (looking-at org-todo-line-regexp)
+ (setq org-clock-heading (match-string 3))
+ (setq org-clock-heading "???"))
+ (setq org-clock-heading (propertize org-clock-heading 'face nil))
+ (org-clock-find-position)
+
(insert "\n") (backward-char 1)
(indent-relative)
(insert org-clock-string " ")
+ (setq org-clock-start-time (current-time))
(setq ts (org-insert-time-stamp (current-time) 'with-hm 'inactive))
(move-marker org-clock-marker (point) (buffer-base-buffer))
+ (or global-mode-string (setq global-mode-string '("")))
+ (or (memq 'org-mode-line-string global-mode-string)
+ (setq global-mode-string
+ (append global-mode-string '(org-mode-line-string))))
+ (org-update-mode-line)
+ (setq org-mode-line-timer (run-with-timer 60 60 'org-update-mode-line))
(message "Clock started at %s" ts))))
+(defun org-clock-find-position ()
+ "Find the location where the next clock line should be inserted."
+ (org-back-to-heading t)
+ (catch 'exit
+ (let ((beg (point-at-bol 2)) (end (progn (outline-next-heading) (point)))
+ (re (concat "^[ \t]*" org-clock-string))
+ (cnt 0)
+ first last)
+ (goto-char beg)
+ (when (eobp) (newline) (setq end (max (point) end)))
+ (when (re-search-forward "^[ \t]*:CLOCK:" end t)
+ ;; we seem to have a CLOCK drawer, so go there.
+ (beginning-of-line 2)
+ (throw 'exit t))
+ ;; Lets count the CLOCK lines
+ (goto-char beg)
+ (while (re-search-forward re end t)
+ (setq first (or first (match-beginning 0))
+ last (match-beginning 0)
+ cnt (1+ cnt)))
+ (when (and (integerp org-clock-into-drawer)
+ (>= (1+ cnt) org-clock-into-drawer))
+ ;; Wrap current entries into a new drawer
+ (goto-char last)
+ (beginning-of-line 2)
+ (if (org-at-item-p) (org-end-of-item))
+ (insert ":END:\n")
+ (beginning-of-line 0)
+ (org-indent-line-function)
+ (goto-char first)
+ (insert ":CLOCK:\n")
+ (beginning-of-line 0)
+ (org-indent-line-function)
+ (org-flag-drawer t)
+ (beginning-of-line 2)
+ (throw 'exit nil))
+
+ (goto-char beg)
+ (while (and (looking-at (concat "[ \t]*" org-keyword-time-regexp))
+ (not (equal (match-string 1) org-clock-string)))
+ ;; Planning info, skip to after it
+ (beginning-of-line 2)
+ (or (bolp) (newline)))
+ (when (eq t org-clock-into-drawer)
+ (insert ":CLOCK:\n:END:\n")
+ (beginning-of-line -1)
+ (org-indent-line-function)
+ (org-flag-drawer t)
+ (beginning-of-line 2)
+ (org-indent-line-function)))))
+
(defun org-clock-out (&optional fail-quietly)
"Stop the currently running clock.
If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
@@ -12565,7 +17368,8 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
(equal (match-string 1) org-clock-string))
(setq ts (match-string 2))
(if fail-quietly (throw 'exit nil) (error "Clock start time is gone")))
- (goto-char org-clock-marker)
+ (goto-char (match-end 0))
+ (delete-region (point) (point-at-eol))
(insert "--")
(setq te (org-insert-time-stamp (current-time) 'with-hm 'inactive))
(setq s (- (time-to-seconds (apply 'encode-time (org-parse-time-string te)))
@@ -12576,7 +17380,16 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
s (- s (* 60 s)))
(insert " => " (format "%2d:%02d" h m))
(move-marker org-clock-marker nil)
- (org-add-log-maybe 'clock-out)
+ (let* ((logging (save-match-data (org-entry-get nil "LOGGING" t)))
+ (org-log-done (org-parse-local-options logging 'org-log-done))
+ (org-log-repeat (org-parse-local-options logging 'org-log-repeat)))
+ (org-add-log-maybe 'clock-out))
+ (when org-mode-line-timer
+ (cancel-timer org-mode-line-timer)
+ (setq org-mode-line-timer nil))
+ (setq global-mode-string
+ (delq 'org-mode-line-string global-mode-string))
+ (force-mode-line-update)
(message "Clock stopped at %s after HH:MM = %d:%02d" te h m)))))
(defun org-clock-cancel ()
@@ -12590,6 +17403,19 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
(delete-region (1- (point-at-bol)) (point-at-eol)))
(message "Clock canceled"))
+(defun org-clock-goto (&optional delete-windows)
+ "Go to the currently clocked-in entry."
+ (interactive "P")
+ (if (not (marker-buffer org-clock-marker))
+ (error "No active clock"))
+ (switch-to-buffer-other-window
+ (marker-buffer org-clock-marker))
+ (if delete-windows (delete-other-windows))
+ (goto-char org-clock-marker)
+ (org-show-entry)
+ (org-back-to-heading)
+ (recenter))
+
(defvar org-clock-file-total-minutes nil
"Holds the file total time in minutes, after a call to `org-clock-sum'.")
(make-variable-buffer-local 'org-clock-file-total-minutes)
@@ -12601,7 +17427,7 @@ Puts the resulting times in minutes as a text property on each headline."
(let* ((bmp (buffer-modified-p))
(re (concat "^\\(\\*+\\)[ \t]\\|^[ \t]*"
org-clock-string
- "[ \t]*\\(\\[.*?\\]\\)-+\\(\\[.*?\\]\\)"))
+ "[ \t]*\\(?:\\(\\[.*?\\]\\)-+\\(\\[.*?\\]\\)\\|=>[ \t]+\\([0-9]+\\):\\([0-9]+\\)\\)"))
(lmax 30)
(ltimes (make-vector lmax 0))
(t1 0)
@@ -12612,19 +17438,24 @@ Puts the resulting times in minutes as a text property on each headline."
(save-excursion
(goto-char (point-max))
(while (re-search-backward re nil t)
- (if (match-end 2)
- ;; A time
- (setq ts (match-string 2)
- te (match-string 3)
- ts (time-to-seconds
- (apply 'encode-time (org-parse-time-string ts)))
- te (time-to-seconds
- (apply 'encode-time (org-parse-time-string te)))
- ts (if tstart (max ts tstart) ts)
- te (if tend (min te tend) te)
- dt (- te ts)
- t1 (if (> dt 0) (+ t1 (floor (/ dt 60))) t1))
- ;; A headline
+ (cond
+ ((match-end 2)
+ ;; Two time stamps
+ (setq ts (match-string 2)
+ te (match-string 3)
+ ts (time-to-seconds
+ (apply 'encode-time (org-parse-time-string ts)))
+ te (time-to-seconds
+ (apply 'encode-time (org-parse-time-string te)))
+ ts (if tstart (max ts tstart) ts)
+ te (if tend (min te tend) te)
+ dt (- te ts)
+ t1 (if (> dt 0) (+ t1 (floor (/ dt 60))) t1)))
+ ((match-end 4)
+ ;; A naket time
+ (setq t1 (+ t1 (string-to-number (match-string 5))
+ (* 60 (string-to-number (match-string 4))))))
+ (t ;; A headline
(setq level (- (match-end 1) (match-beginning 1)))
(when (or (> t1 0) (> (aref ltimes level) 0))
(loop for l from 0 to level do
@@ -12633,7 +17464,7 @@ Puts the resulting times in minutes as a text property on each headline."
(loop for l from level to (1- lmax) do
(aset ltimes l 0))
(goto-char (match-beginning 0))
- (put-text-property (point) (point-at-eol) :org-clock-minutes time))))
+ (put-text-property (point) (point-at-eol) :org-clock-minutes time)))))
(setq org-clock-file-total-minutes (aref ltimes 0)))
(set-buffer-modified-p bmp)))
@@ -12648,7 +17479,10 @@ in the echo area."
(unless total-only
(save-excursion
(goto-char (point-min))
- (while (setq p (next-single-property-change (point) :org-clock-minutes))
+ (while (or (and (equal (setq p (point)) (point-min))
+ (get-text-property p :org-clock-minutes))
+ (setq p (next-single-property-change
+ (point) :org-clock-minutes)))
(goto-char p)
(when (setq time (get-text-property p :org-clock-minutes))
(org-put-clock-overlay time (funcall outline-level))))
@@ -12703,8 +17537,10 @@ from the `before-change-functions' in the current buffer."
(defun org-clock-out-if-current ()
"Clock out if the current entry contains the running clock.
-This is used to stop the clock after a TODO entry is marked DONE."
- (when (and (equal state org-done-string)
+This is used to stop the clock after a TODO entry is marked DONE,
+and is only done if the variable `org-clock-out-when-done' is not nil."
+ (when (and org-clock-out-when-done
+ (member state org-done-keywords)
(equal (marker-buffer org-clock-marker) (current-buffer))
(< (point) org-clock-marker)
(> (save-excursion (outline-next-heading) (point))
@@ -12729,25 +17565,32 @@ If yes, offer to stop it and to save the buffer with the changes."
(when (y-or-n-p "Save changed buffer?")
(save-buffer))))
-(defun org-clock-report ()
+(defun org-clock-report (&optional arg)
"Create a table containing a report about clocked time.
-If the buffer contains lines
-#+BEGIN: clocktable :maxlevel 3 :emphasize nil
-
-#+END: clocktable
-then the table will be inserted between these lines, replacing whatever
-is was there before. If these lines are not in the buffer, the table
-is inserted at point, surrounded by the special lines.
-The BEGIN line can contain parameters. Allowed are:
-:maxlevel The maximum level to be included in the table. Default is 3.
-:emphasize t/nil, if levell 1 and level 2 should be bold/italic in the table."
- (interactive)
+If the cursor is inside an existing clocktable block, then the table
+will be updated. If not, a new clocktable will be inserted.
+When called with a prefix argument, move to the first clock table in the
+buffer and update it."
+ (interactive "P")
(org-remove-clock-overlays)
- (unless (org-find-dblock "clocktable")
+ (when arg (org-find-dblock "clocktable"))
+ (if (org-in-clocktable-p)
+ (goto-char (org-in-clocktable-p))
(org-create-dblock (list :name "clocktable"
- :maxlevel 2 :emphasize nil)))
+ :maxlevel 2 :scope 'file)))
(org-update-dblock))
+(defun org-in-clocktable-p ()
+ "Check if the cursor is in a clocktable."
+ (let ((pos (point)) start)
+ (save-excursion
+ (end-of-line 1)
+ (and (re-search-backward "^#\\+BEGIN:[ \t]+clocktable" nil t)
+ (setq start (match-beginning 0))
+ (re-search-forward "^#\\+END:.*" nil t)
+ (>= (match-end 0) pos)
+ start))))
+
(defun org-clock-update-time-maybe ()
"If this is a CLOCK line, update it and return t.
Otherwise, return nil."
@@ -12821,12 +17664,16 @@ the returned times will be formatted strings."
(defun org-dblock-write:clocktable (params)
"Write the standard clocktable."
- (let ((hlchars '((1 . "*") (2 . ?/)))
+ (let ((hlchars '((1 . "*") (2 . "/")))
(emph nil)
(ins (make-marker))
+ (total-time nil)
ipos time h m p level hlc hdl maxlevel
- ts te cc block)
- (setq maxlevel (or (plist-get params :maxlevel) 3)
+ ts te cc block beg end pos scope tbl tostring multifile)
+ (setq scope (plist-get params :scope)
+ tostring (plist-get params :tostring)
+ multifile (plist-get params :multifile)
+ maxlevel (or (plist-get params :maxlevel) 3)
emph (plist-get params :emphasize)
ts (plist-get params :tstart)
te (plist-get params :tend)
@@ -12840,48 +17687,114 @@ the returned times will be formatted strings."
(apply 'encode-time (org-parse-time-string te)))))
(move-marker ins (point))
(setq ipos (point))
- (insert-before-markers "Clock summary at ["
- (substring
- (format-time-string (cdr org-time-stamp-formats))
- 1 -1)
- "]."
- (if block
- (format " Considered range is /%s/." block)
- "")
- "\n\n|L|Headline|Time|\n")
- (org-clock-sum ts te)
- (setq h (/ org-clock-file-total-minutes 60)
- m (- org-clock-file-total-minutes (* 60 h)))
- (insert-before-markers "|-\n|0|" "*Total file time*| "
- (format "*%d:%02d*" h m)
- "|\n")
- (goto-char (point-min))
- (while (setq p (next-single-property-change (point) :org-clock-minutes))
- (goto-char p)
- (when (setq time (get-text-property p :org-clock-minutes))
- (save-excursion
- (beginning-of-line 1)
- (when (and (looking-at "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[0-9a-zA-Z_@:]+:\\)?[ \t]*$")
- (setq level (- (match-end 1) (match-beginning 1)))
- (<= level maxlevel))
- (setq hlc (if emph (or (cdr (assoc level hlchars)) "") "")
- hdl (match-string 2)
- h (/ time 60)
- m (- time (* 60 h)))
- (goto-char ins)
- (if (= level 1) (insert-before-markers "|-\n"))
- (insert-before-markers
- "| " (int-to-string level) "|" hlc hdl hlc " |"
- (make-string (1- level) ?|)
- hlc
- (format "%d:%02d" h m)
- hlc
- " |\n")))))
- (goto-char ins)
- (backward-delete-char 1)
- (goto-char ipos)
- (skip-chars-forward "^|")
- (org-table-align)))
+
+ ;; Get the right scope
+ (setq pos (point))
+ (save-restriction
+ (cond
+ ((not scope))
+ ((eq scope 'file) (widen))
+ ((eq scope 'subtree) (org-narrow-to-subtree))
+ ((eq scope 'tree)
+ (while (org-up-heading-safe))
+ (org-narrow-to-subtree))
+ ((and (symbolp scope) (string-match "^tree\\([0-9]+\\)$"
+ (symbol-name scope)))
+ (setq level (string-to-number (match-string 1 (symbol-name scope))))
+ (catch 'exit
+ (while (org-up-heading-safe)
+ (looking-at outline-regexp)
+ (if (<= (org-reduced-level (funcall outline-level)) level)
+ (throw 'exit nil))))
+ (org-narrow-to-subtree))
+ ((or (listp scope) (eq scope 'agenda))
+ (let* ((files (if (listp scope) scope (org-agenda-files)))
+ (scope 'agenda)
+ (p1 (copy-sequence params))
+ file)
+ (plist-put p1 :tostring t)
+ (plist-put p1 :multifile t)
+ (plist-put p1 :scope 'file)
+ (org-prepare-agenda-buffers files)
+ (while (setq file (pop files))
+ (with-current-buffer (find-buffer-visiting file)
+ (push (org-clocktable-add-file
+ file (org-dblock-write:clocktable p1)) tbl)
+ (setq total-time (+ (or total-time 0)
+ org-clock-file-total-minutes)))))))
+ (goto-char pos)
+
+ (unless (eq scope 'agenda)
+ (org-clock-sum ts te)
+ (goto-char (point-min))
+ (while (setq p (next-single-property-change (point) :org-clock-minutes))
+ (goto-char p)
+ (when (setq time (get-text-property p :org-clock-minutes))
+ (save-excursion
+ (beginning-of-line 1)
+ (when (and (looking-at (org-re "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[[:alnum:]_@:]+:\\)?[ \t]*$"))
+ (setq level (org-reduced-level
+ (- (match-end 1) (match-beginning 1))))
+ (<= level maxlevel))
+ (setq hlc (if emph (or (cdr (assoc level hlchars)) "") "")
+ hdl (match-string 2)
+ h (/ time 60)
+ m (- time (* 60 h)))
+ (if (and (not multifile) (= level 1)) (push "|-" tbl))
+ (push (concat
+ "| " (int-to-string level) "|" hlc hdl hlc " |"
+ (make-string (1- level) ?|)
+ hlc (format "%d:%02d" h m) hlc
+ " |") tbl))))))
+ (setq tbl (nreverse tbl))
+ (if tostring
+ (if tbl (mapconcat 'identity tbl "\n") nil)
+ (goto-char ins)
+ (insert-before-markers
+ "Clock summary at ["
+ (substring
+ (format-time-string (cdr org-time-stamp-formats))
+ 1 -1)
+ "]."
+ (if block
+ (format " Considered range is /%s/." block)
+ "")
+ "\n\n"
+ (if (eq scope 'agenda) "|File" "")
+ "|L|Headline|Time|\n")
+ (setq total-time (or total-time org-clock-file-total-minutes)
+ h (/ total-time 60)
+ m (- total-time (* 60 h)))
+ (insert-before-markers
+ "|-\n|"
+ (if (eq scope 'agenda) "|" "")
+ "|"
+ "*Total time*| "
+ (format "*%d:%02d*" h m)
+ "|\n|-\n")
+ (setq tbl (delq nil tbl))
+ (if (and (stringp (car tbl)) (> (length (car tbl)) 1)
+ (equal (substring (car tbl) 0 2) "|-"))
+ (pop tbl))
+ (insert-before-markers (mapconcat
+ 'identity (delq nil tbl)
+ (if (eq scope 'agenda) "\n|-\n" "\n")))
+ (backward-delete-char 1)
+ (goto-char ipos)
+ (skip-chars-forward "^|")
+ (org-table-align)))))
+
+(defun org-clocktable-add-file (file table)
+ (if table
+ (let ((lines (org-split-string table "\n"))
+ (ff (file-name-nondirectory file)))
+ (mapconcat 'identity
+ (mapcar (lambda (x)
+ (if (string-match org-table-dataline-regexp x)
+ (concat "|" ff x)
+ x))
+ lines)
+ "\n"))))
;; FIXME: I don't think anybody uses this, ask David
(defun org-collect-clock-time-entries ()
@@ -12984,86 +17897,98 @@ The following commands are available:
(substitute-key-definition 'undo 'org-agenda-undo
org-agenda-mode-map global-map)
-(define-key org-agenda-mode-map "\C-i" 'org-agenda-goto)
-(define-key org-agenda-mode-map [(tab)] 'org-agenda-goto)
-(define-key org-agenda-mode-map "\C-m" 'org-agenda-switch-to)
-(define-key org-agenda-mode-map "\C-k" 'org-agenda-kill)
-(define-key org-agenda-mode-map "\C-c$" 'org-agenda-archive)
-(define-key org-agenda-mode-map "\C-c\C-x\C-s" 'org-agenda-archive)
-(define-key org-agenda-mode-map "$" 'org-agenda-archive)
-(define-key org-agenda-mode-map "\C-c\C-o" 'org-agenda-open-link)
-(define-key org-agenda-mode-map " " 'org-agenda-show)
-(define-key org-agenda-mode-map "\C-c\C-t" 'org-agenda-todo)
-(define-key org-agenda-mode-map "\C-c\C-xb" 'org-agenda-tree-to-indirect-buffer)
-(define-key org-agenda-mode-map "b" 'org-agenda-tree-to-indirect-buffer)
-(define-key org-agenda-mode-map "o" 'delete-other-windows)
-(define-key org-agenda-mode-map "L" 'org-agenda-recenter)
-(define-key org-agenda-mode-map "t" 'org-agenda-todo)
-(define-key org-agenda-mode-map "a" 'org-agenda-toggle-archive-tag)
-(define-key org-agenda-mode-map ":" 'org-agenda-set-tags)
-(define-key org-agenda-mode-map "." 'org-agenda-goto-today)
-(define-key org-agenda-mode-map "d" 'org-agenda-day-view)
-(define-key org-agenda-mode-map "w" 'org-agenda-week-view)
-(define-key org-agenda-mode-map (org-key 'S-right) 'org-agenda-date-later)
-(define-key org-agenda-mode-map (org-key 'S-left) 'org-agenda-date-earlier)
-(define-key org-agenda-mode-map [?\C-c ?\C-x (right)] 'org-agenda-date-later)
-(define-key org-agenda-mode-map [?\C-c ?\C-x (left)] 'org-agenda-date-earlier)
-
-(define-key org-agenda-mode-map ">" 'org-agenda-date-prompt)
-(define-key org-agenda-mode-map "\C-c\C-s" 'org-agenda-schedule)
-(define-key org-agenda-mode-map "\C-c\C-d" 'org-agenda-deadline)
+(org-defkey org-agenda-mode-map "\C-i" 'org-agenda-goto)
+(org-defkey org-agenda-mode-map [(tab)] 'org-agenda-goto)
+(org-defkey org-agenda-mode-map "\C-m" 'org-agenda-switch-to)
+(org-defkey org-agenda-mode-map "\C-k" 'org-agenda-kill)
+(org-defkey org-agenda-mode-map "\C-c$" 'org-agenda-archive)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-s" 'org-agenda-archive)
+(org-defkey org-agenda-mode-map "$" 'org-agenda-archive)
+(org-defkey org-agenda-mode-map "\C-c\C-o" 'org-agenda-open-link)
+(org-defkey org-agenda-mode-map " " 'org-agenda-show)
+(org-defkey org-agenda-mode-map "\C-c\C-t" 'org-agenda-todo)
+(org-defkey org-agenda-mode-map [(control shift right)] 'org-agenda-todo-nextset)
+(org-defkey org-agenda-mode-map [(control shift left)] 'org-agenda-todo-previousset)
+(org-defkey org-agenda-mode-map "\C-c\C-xb" 'org-agenda-tree-to-indirect-buffer)
+(org-defkey org-agenda-mode-map "b" 'org-agenda-tree-to-indirect-buffer)
+(org-defkey org-agenda-mode-map "o" 'delete-other-windows)
+(org-defkey org-agenda-mode-map "L" 'org-agenda-recenter)
+(org-defkey org-agenda-mode-map "t" 'org-agenda-todo)
+(org-defkey org-agenda-mode-map "a" 'org-agenda-toggle-archive-tag)
+(org-defkey org-agenda-mode-map ":" 'org-agenda-set-tags)
+(org-defkey org-agenda-mode-map "." 'org-agenda-goto-today)
+(org-defkey org-agenda-mode-map "j" 'org-agenda-goto-date)
+(org-defkey org-agenda-mode-map "d" 'org-agenda-day-view)
+(org-defkey org-agenda-mode-map "w" 'org-agenda-week-view)
+(org-defkey org-agenda-mode-map "m" 'org-agenda-month-view)
+(org-defkey org-agenda-mode-map "y" 'org-agenda-year-view)
+(org-defkey org-agenda-mode-map [(shift right)] 'org-agenda-date-later)
+(org-defkey org-agenda-mode-map [(shift left)] 'org-agenda-date-earlier)
+(org-defkey org-agenda-mode-map [?\C-c ?\C-x (right)] 'org-agenda-date-later)
+(org-defkey org-agenda-mode-map [?\C-c ?\C-x (left)] 'org-agenda-date-earlier)
+
+(org-defkey org-agenda-mode-map ">" 'org-agenda-date-prompt)
+(org-defkey org-agenda-mode-map "\C-c\C-s" 'org-agenda-schedule)
+(org-defkey org-agenda-mode-map "\C-c\C-d" 'org-agenda-deadline)
(let ((l '(1 2 3 4 5 6 7 8 9 0)))
- (while l (define-key org-agenda-mode-map
+ (while l (org-defkey org-agenda-mode-map
(int-to-string (pop l)) 'digit-argument)))
-(define-key org-agenda-mode-map "f" 'org-agenda-follow-mode)
-(define-key org-agenda-mode-map "l" 'org-agenda-log-mode)
-(define-key org-agenda-mode-map "D" 'org-agenda-toggle-diary)
-(define-key org-agenda-mode-map "g" 'org-agenda-toggle-time-grid)
-(define-key org-agenda-mode-map "r" 'org-agenda-redo)
-(define-key org-agenda-mode-map "q" 'org-agenda-quit)
-(define-key org-agenda-mode-map "x" 'org-agenda-exit)
-(define-key org-agenda-mode-map "s" 'org-save-all-org-buffers)
-(define-key org-agenda-mode-map "P" 'org-agenda-show-priority)
-(define-key org-agenda-mode-map "T" 'org-agenda-show-tags)
-(define-key org-agenda-mode-map "n" 'next-line)
-(define-key org-agenda-mode-map "p" 'previous-line)
-(define-key org-agenda-mode-map "\C-n" 'org-agenda-next-date-line)
-(define-key org-agenda-mode-map "\C-p" 'org-agenda-previous-date-line)
-(define-key org-agenda-mode-map "," 'org-agenda-priority)
-(define-key org-agenda-mode-map "\C-c," 'org-agenda-priority)
-(define-key org-agenda-mode-map "i" 'org-agenda-diary-entry)
-(define-key org-agenda-mode-map "c" 'org-agenda-goto-calendar)
+(org-defkey org-agenda-mode-map "f" 'org-agenda-follow-mode)
+(org-defkey org-agenda-mode-map "l" 'org-agenda-log-mode)
+(org-defkey org-agenda-mode-map "D" 'org-agenda-toggle-diary)
+(org-defkey org-agenda-mode-map "g" 'org-agenda-toggle-time-grid)
+(org-defkey org-agenda-mode-map "r" 'org-agenda-redo)
+(org-defkey org-agenda-mode-map "q" 'org-agenda-quit)
+(org-defkey org-agenda-mode-map "x" 'org-agenda-exit)
+(org-defkey org-agenda-mode-map "\C-x\C-w" 'org-write-agenda)
+(org-defkey org-agenda-mode-map "s" 'org-save-all-org-buffers)
+(org-defkey org-agenda-mode-map "\C-x\C-s" 'org-save-all-org-buffers)
+(org-defkey org-agenda-mode-map "P" 'org-agenda-show-priority)
+(org-defkey org-agenda-mode-map "T" 'org-agenda-show-tags)
+(org-defkey org-agenda-mode-map "n" 'next-line)
+(org-defkey org-agenda-mode-map "p" 'previous-line)
+(org-defkey org-agenda-mode-map "\C-c\C-n" 'org-agenda-next-date-line)
+(org-defkey org-agenda-mode-map "\C-c\C-p" 'org-agenda-previous-date-line)
+(org-defkey org-agenda-mode-map "," 'org-agenda-priority)
+(org-defkey org-agenda-mode-map "\C-c," 'org-agenda-priority)
+(org-defkey org-agenda-mode-map "i" 'org-agenda-diary-entry)
+(org-defkey org-agenda-mode-map "c" 'org-agenda-goto-calendar)
(eval-after-load "calendar"
- '(define-key calendar-mode-map org-calendar-to-agenda-key
+ '(org-defkey calendar-mode-map org-calendar-to-agenda-key
'org-calendar-goto-agenda))
-(define-key org-agenda-mode-map "C" 'org-agenda-convert-date)
-(define-key org-agenda-mode-map "m" 'org-agenda-phases-of-moon)
-(define-key org-agenda-mode-map "M" 'org-agenda-phases-of-moon)
-(define-key org-agenda-mode-map "S" 'org-agenda-sunrise-sunset)
-(define-key org-agenda-mode-map "h" 'org-agenda-holidays)
-(define-key org-agenda-mode-map "H" 'org-agenda-holidays)
-(define-key org-agenda-mode-map "+" 'org-agenda-priority-up)
-(define-key org-agenda-mode-map "I" 'org-agenda-clock-in)
-(define-key org-agenda-mode-map "O" 'org-agenda-clock-out)
-(define-key org-agenda-mode-map "X" 'org-agenda-clock-cancel)
-(define-key org-agenda-mode-map "-" 'org-agenda-priority-down)
-(define-key org-agenda-mode-map (org-key 'S-up) 'org-agenda-priority-up)
-(define-key org-agenda-mode-map (org-key 'S-down) 'org-agenda-priority-down)
-(define-key org-agenda-mode-map [?\C-c ?\C-x (up)] 'org-agenda-priority-up)
-(define-key org-agenda-mode-map [?\C-c ?\C-x (down)] 'org-agenda-priority-down)
-(define-key org-agenda-mode-map [(right)] 'org-agenda-later)
-(define-key org-agenda-mode-map [(left)] 'org-agenda-earlier)
-(define-key org-agenda-mode-map "\C-c\C-x\C-c" 'org-export-icalendar-combine-agenda-files)
+(org-defkey org-agenda-mode-map "C" 'org-agenda-convert-date)
+(org-defkey org-agenda-mode-map "M" 'org-agenda-phases-of-moon)
+(org-defkey org-agenda-mode-map "S" 'org-agenda-sunrise-sunset)
+(org-defkey org-agenda-mode-map "h" 'org-agenda-holidays)
+(org-defkey org-agenda-mode-map "H" 'org-agenda-holidays)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-i" 'org-agenda-clock-in)
+(org-defkey org-agenda-mode-map "I" 'org-agenda-clock-in)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-o" 'org-agenda-clock-out)
+(org-defkey org-agenda-mode-map "O" 'org-agenda-clock-out)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-x" 'org-agenda-clock-cancel)
+(org-defkey org-agenda-mode-map "X" 'org-agenda-clock-cancel)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-j" 'org-clock-goto)
+(org-defkey org-agenda-mode-map "J" 'org-clock-goto)
+(org-defkey org-agenda-mode-map "+" 'org-agenda-priority-up)
+(org-defkey org-agenda-mode-map "-" 'org-agenda-priority-down)
+(org-defkey org-agenda-mode-map [(shift up)] 'org-agenda-priority-up)
+(org-defkey org-agenda-mode-map [(shift down)] 'org-agenda-priority-down)
+(org-defkey org-agenda-mode-map [?\C-c ?\C-x (up)] 'org-agenda-priority-up)
+(org-defkey org-agenda-mode-map [?\C-c ?\C-x (down)] 'org-agenda-priority-down)
+(org-defkey org-agenda-mode-map [(right)] 'org-agenda-later)
+(org-defkey org-agenda-mode-map [(left)] 'org-agenda-earlier)
+(org-defkey org-agenda-mode-map "\C-c\C-x\C-c" 'org-agenda-columns)
+
(defvar org-agenda-keymap (copy-keymap org-agenda-mode-map)
"Local keymap for agenda entries from Org-mode.")
-(define-key org-agenda-keymap
+(org-defkey org-agenda-keymap
(if (featurep 'xemacs) [(button2)] [(mouse-2)]) 'org-agenda-goto-mouse)
-(define-key org-agenda-keymap
+(org-defkey org-agenda-keymap
(if (featurep 'xemacs) [(button3)] [(mouse-3)]) 'org-agenda-show-mouse)
(when org-agenda-mouse-1-follows-link
- (define-key org-agenda-keymap [follow-link] 'mouse-face))
+ (org-defkey org-agenda-keymap [follow-link] 'mouse-face))
(easy-menu-define org-agenda-menu org-agenda-mode-map "Agenda menu"
'("Agenda"
("Agenda Files")
@@ -13082,17 +18007,26 @@ The following commands are available:
["Goto Today" org-agenda-goto-today (org-agenda-check-type nil 'agenda 'timeline)]
["Next Dates" org-agenda-later (org-agenda-check-type nil 'agenda)]
["Previous Dates" org-agenda-earlier (org-agenda-check-type nil 'agenda)]
+ ["Jump to date" org-agenda-goto-date (org-agenda-check-type nil 'agenda)]
"--"
- ("Tags"
+ ("Tags and Properties"
["Show all Tags" org-agenda-show-tags t]
- ["Set Tags" org-agenda-set-tags t])
+ ["Set Tags current line" org-agenda-set-tags (not (org-region-active-p))]
+ ["Change tag in region" org-agenda-set-tags (org-region-active-p)]
+ "--"
+ ["Column View" org-columns t])
("Date/Schedule"
["Schedule" org-agenda-schedule t]
["Set Deadline" org-agenda-deadline t]
"--"
- ["Change date +1 day" org-agenda-date-later (org-agenda-check-type nil 'agenda 'timeline)]
- ["Change date -1 day" org-agenda-date-earlier (org-agenda-check-type nil 'agenda 'timeline)]
- ["Change date to ..." org-agenda-date-prompt (org-agenda-check-type nil 'agenda 'timeline)])
+ ["Change Date +1 day" org-agenda-date-later (org-agenda-check-type nil 'agenda 'timeline)]
+ ["Change Date -1 day" org-agenda-date-earlier (org-agenda-check-type nil 'agenda 'timeline)]
+ ["Change Date to ..." org-agenda-date-prompt (org-agenda-check-type nil 'agenda 'timeline)])
+ ("Clock"
+ ["Clock in" org-agenda-clock-in t]
+ ["Clock out" org-agenda-clock-out t]
+ ["Clock cancel" org-agenda-clock-cancel t]
+ ["Goto running clock" org-clock-goto t])
("Priority"
["Set Priority" org-agenda-priority t]
["Increase Priority" org-agenda-priority-up t]
@@ -13113,6 +18047,10 @@ The following commands are available:
:style radio :selected (equal org-agenda-ndays 1)]
["Week View" org-agenda-week-view :active (org-agenda-check-type nil 'agenda)
:style radio :selected (equal org-agenda-ndays 7)]
+ ["Month View" org-agenda-month-view :active (org-agenda-check-type nil 'agenda)
+ :style radio :selected (member org-agenda-ndays '(28 29 30 31))]
+ ["Year View" org-agenda-year-view :active (org-agenda-check-type nil 'agenda)
+ :style radio :selected (member org-agenda-ndays '(365 366))]
"--"
["Show Logbook entries" org-agenda-log-mode
:style toggle :selected org-agenda-show-log :active (org-agenda-check-type nil 'agenda 'timeline)]
@@ -13120,6 +18058,7 @@ The following commands are available:
:style toggle :selected org-agenda-include-diary :active (org-agenda-check-type nil 'agenda)]
["Use Time Grid" org-agenda-toggle-time-grid
:style toggle :selected org-agenda-use-time-grid :active (org-agenda-check-type nil 'agenda)])
+ ["Write view to file" org-write-agenda t]
["Rebuild buffer" org-agenda-redo t]
["Save all Org-mode Buffers" org-save-all-org-buffers t]
"--"
@@ -13141,7 +18080,7 @@ The following commands are available:
"In a series of undo commands, this is the list of remaning undo items.")
(defmacro org-if-unprotected (&rest body)
- "Execute BODY if ther is no `org-protected' text property at point."
+ "Execute BODY if there is no `org-protected' text property at point."
(declare (debug t))
`(unless (get-text-property (point) 'org-protected)
,@body))
@@ -13191,7 +18130,7 @@ that have been changed along."
(if (pop entry)
(with-current-buffer buf
(let ((last-undo-buffer buf)
- buffer-read-only)
+ (inhibit-read-only t))
(unless (memq buf org-agenda-undo-has-started-in)
(push buf org-agenda-undo-has-started-in)
(make-local-variable 'pending-undo-list)
@@ -13218,11 +18157,11 @@ that have been changed along."
(defvar org-agenda-last-dispatch-buffer nil)
;;;###autoload
-(defun org-agenda (arg)
+(defun org-agenda (arg &optional keys restriction)
"Dispatch agenda commands to collect entries to the agenda buffer.
-Prompts for a character to select a command. Any prefix arg will be passed
+Prompts for a command to execute. Any prefix arg will be passed
on to the selected command. The default selections are:
-g
+
a Call `org-agenda-list' to display the agenda for current day or week.
t Call `org-todo-list' to display the global todo list.
T Call `org-todo-list' to display the global todo list, select only
@@ -13230,109 +18169,81 @@ T Call `org-todo-list' to display the global todo list, select only
m Call `org-tags-view' to display headlines with tags matching
a condition (the user is prompted for the condition).
M Like `m', but select only TODO entries, no ordinary headlines.
-l Create a timeeline for the current buffer.
+L Create a timeline for the current buffer.
+e Export views to associated files.
More commands can be added by configuring the variable
`org-agenda-custom-commands'. In particular, specific tags and TODO keyword
searches can be pre-defined in this way.
If the current buffer is in Org-mode and visiting a file, you can also
-first press `1' to indicate that the agenda should be temporarily (until the
-next use of \\[org-agenda]) restricted to the current file."
+first press `<' once to indicate that the agenda should be temporarily
+\(until the next use of \\[org-agenda]) restricted to the current file.
+Pressing `<' twice means to restrict to the current subtree or region
+\(if active)."
(interactive "P")
(catch 'exit
- (let* ((buf (current-buffer))
+ (let* ((prefix-descriptions nil)
+ (org-agenda-custom-commands
+ ;; normalize different versions
+ (delq nil
+ (mapcar
+ (lambda (x)
+ (cond ((stringp (cdr x))
+ (push x prefix-descriptions)
+ nil)
+ ((stringp (nth 1 x)) x)
+ ((not (nth 1 x)) (cons (car x) (cons "" (cddr x))))
+ (t (cons (car x) (cons "" (cdr x))))))
+ org-agenda-custom-commands)))
+ (buf (current-buffer))
(bfn (buffer-file-name (buffer-base-buffer)))
- (restrict-ok (and bfn (org-mode-p)))
- (custom org-agenda-custom-commands)
- c entry key type match lprops)
+ entry key type match lprops ans)
;; Turn off restriction
(put 'org-agenda-files 'org-restrict nil)
(setq org-agenda-restrict nil)
(move-marker org-agenda-restrict-begin nil)
(move-marker org-agenda-restrict-end nil)
+ ;; Delete old local properties
+ (put 'org-agenda-redo-command 'org-lprops nil)
;; Remember where this call originated
(setq org-agenda-last-dispatch-buffer (current-buffer))
- (save-window-excursion
- (delete-other-windows)
- (switch-to-buffer-other-window " *Agenda Commands*")
- (erase-buffer)
- (insert (eval-when-compile
- (let ((header
-"Press key for an agenda command:
--------------------------------- C Configure custom agenda commands
-a Agenda for current week or day
-t List of all TODO entries T Entries with special TODO kwd
-m Match a TAGS query M Like m, but only TODO entries
-L Timeline for current buffer # List stuck projects (!=configure)
-")
- (start 0))
- (while (string-match "\\(^\\| \\|(\\)\\(\\S-\\)\\( \\|=\\)" header start)
- (setq start (match-end 0))
- (add-text-properties (match-beginning 2) (match-end 2)
- '(face bold) header))
- header)))
- (while (setq entry (pop custom))
- (setq key (car entry) type (nth 1 entry) match (nth 2 entry))
- (insert (format "\n%-4s%-14s: %s"
- (org-add-props (copy-sequence key)
- '(face bold))
- (cond
- ((stringp type) type)
- ((eq type 'todo) "TODO keyword")
- ((eq type 'tags) "Tags query")
- ((eq type 'tags-todo) "Tags (TODO)")
- ((eq type 'tags-tree) "Tags tree")
- ((eq type 'todo-tree) "TODO kwd tree")
- ((eq type 'occur-tree) "Occur tree")
- ((functionp type) (symbol-name type))
- (t "???"))
- (if (stringp match)
- (org-add-props match nil 'face 'org-warning)
- (format "set of %d commands" (length match))))))
- (if restrict-ok
- (insert "\n"
- (org-add-props "1 Restrict call to current buffer 0 Restrict call to region or subtree" nil 'face 'org-table)))
- (goto-char (point-min))
- (if (fboundp 'fit-window-to-buffer) (fit-window-to-buffer))
- (message "Press key for agenda command%s"
- (if restrict-ok ", or [1] or [0] to restrict" ""))
- (setq c (read-char-exclusive))
- (message "")
- (when (memq c '(?L ?1 ?0))
- (if restrict-ok
- (put 'org-agenda-files 'org-restrict (list bfn))
- (error "Cannot restrict agenda to current buffer"))
- (with-current-buffer " *Agenda Commands*"
- (goto-char (point-max))
- (delete-region (point-at-bol) (point))
- (goto-char (point-min)))
- (when (eq c ?0)
+ (unless keys
+ (setq ans (org-agenda-get-restriction-and-command prefix-descriptions)
+ keys (car ans)
+ restriction (cdr ans)))
+ ;; Estabish the restriction, if any
+ (when restriction
+ (put 'org-agenda-files 'org-restrict (list bfn))
+ (cond
+ ((eq restriction 'region)
+ (setq org-agenda-restrict t)
+ (move-marker org-agenda-restrict-begin (region-beginning))
+ (move-marker org-agenda-restrict-end (region-end)))
+ ((eq restriction 'subtree)
+ (save-excursion
(setq org-agenda-restrict t)
- (with-current-buffer buf
- (if (org-region-active-p)
- (progn
- (move-marker org-agenda-restrict-begin (region-beginning))
- (move-marker org-agenda-restrict-end (region-end)))
- (save-excursion
- (org-back-to-heading t)
- (move-marker org-agenda-restrict-begin (point))
- (move-marker org-agenda-restrict-end
- (progn (org-end-of-subtree t)))))))
- (unless (eq c ?L)
- (message "Press key for agenda command%s"
- (if restrict-ok " (restricted to current file)" ""))
- (setq c (read-char-exclusive)))
- (message "")))
+ (org-back-to-heading t)
+ (move-marker org-agenda-restrict-begin (point))
+ (move-marker org-agenda-restrict-end
+ (progn (org-end-of-subtree t)))))))
+
(require 'calendar) ; FIXME: can we avoid this for some commands?
;; For example the todo list should not need it (but does...)
(cond
- ((setq entry (assoc (char-to-string c) org-agenda-custom-commands))
- (if (symbolp (nth 1 entry))
+ ((setq entry (assoc keys org-agenda-custom-commands))
+ (if (or (symbolp (nth 2 entry)) (functionp (nth 2 entry)))
(progn
- (setq type (nth 1 entry) match (nth 2 entry) lprops (nth 3 entry)
- lprops (nth 3 entry))
+ (setq type (nth 2 entry) match (nth 3 entry) lprops (nth 4 entry))
+ (put 'org-agenda-redo-command 'org-lprops lprops)
(cond
+ ((eq type 'agenda)
+ (org-let lprops '(org-agenda-list current-prefix-arg)))
+ ((eq type 'alltodo)
+ (org-let lprops '(org-todo-list current-prefix-arg)))
+ ((eq type 'stuck)
+ (org-let lprops '(org-agenda-list-stuck-projects
+ current-prefix-arg)))
((eq type 'tags)
(org-let lprops '(org-tags-view current-prefix-arg match)))
((eq type 'tags-todo)
@@ -13350,28 +18261,170 @@ L Timeline for current buffer # List stuck projects (!=configure)
((eq type 'occur-tree)
(org-check-for-org-mode)
(org-let lprops '(org-occur match)))
+ ((functionp type)
+ (org-let lprops '(funcall type match)))
((fboundp type)
(org-let lprops '(funcall type match)))
(t (error "Invalid custom agenda command type %s" type))))
- (org-run-agenda-series (cddr entry))))
- ((equal c ?C) (customize-variable 'org-agenda-custom-commands))
- ((equal c ?a) (call-interactively 'org-agenda-list))
- ((equal c ?t) (call-interactively 'org-todo-list))
- ((equal c ?T) (org-call-with-arg 'org-todo-list (or arg '(4))))
- ((equal c ?m) (call-interactively 'org-tags-view))
- ((equal c ?M) (org-call-with-arg 'org-tags-view (or arg '(4))))
- ((equal c ?L)
- (unless restrict-ok
+ (org-run-agenda-series (nth 1 entry) (cddr entry))))
+ ((equal keys "C") (customize-variable 'org-agenda-custom-commands))
+ ((equal keys "a") (call-interactively 'org-agenda-list))
+ ((equal keys "t") (call-interactively 'org-todo-list))
+ ((equal keys "T") (org-call-with-arg 'org-todo-list (or arg '(4))))
+ ((equal keys "m") (call-interactively 'org-tags-view))
+ ((equal keys "M") (org-call-with-arg 'org-tags-view (or arg '(4))))
+ ((equal keys "e") (call-interactively 'org-store-agenda-views))
+ ((equal keys "L")
+ (unless (org-mode-p)
(error "This is not an Org-mode file"))
- (org-call-with-arg 'org-timeline arg))
- ((equal c ?#) (call-interactively 'org-agenda-list-stuck-projects))
- ((equal c ?!) (customize-variable 'org-stuck-projects))
- (t (error "Invalid key"))))))
-
-(defun org-run-agenda-series (series)
- (org-prepare-agenda)
+ (unless restriction
+ (put 'org-agenda-files 'org-restrict (list bfn))
+ (org-call-with-arg 'org-timeline arg)))
+ ((equal keys "#") (call-interactively 'org-agenda-list-stuck-projects))
+ ((equal keys "/") (call-interactively 'org-occur-in-agenda-files))
+ ((equal keys "!") (customize-variable 'org-stuck-projects))
+ (t (error "Invalid agenda key"))))))
+
+(defun org-agenda-get-restriction-and-command (prefix-descriptions)
+ "The user interface for selecting an agenda command."
+ (catch 'exit
+ (let* ((bfn (buffer-file-name (buffer-base-buffer)))
+ (restrict-ok (and bfn (org-mode-p)))
+ (region-p (org-region-active-p))
+ (custom org-agenda-custom-commands)
+ (selstring "")
+ restriction second-time
+ c entry key type match prefixes rmheader header-end custom1 desc)
+ (save-window-excursion
+ (delete-other-windows)
+ (org-switch-to-buffer-other-window " *Agenda Commands*")
+ (erase-buffer)
+ (insert (eval-when-compile
+ (let ((header
+"Press key for an agenda command: < Buffer,subtree/region restriction
+-------------------------------- C Configure custom agenda commands
+a Agenda for current week or day e Export agenda views
+t List of all TODO entries T Entries with special TODO kwd
+m Match a TAGS query M Like m, but only TODO entries
+L Timeline for current buffer # List stuck projects (!=configure)
+/ Multi-occur
+")
+ (start 0))
+ (while (string-match
+ "\\(^\\| \\|(\\)\\(\\S-\\)\\( \\|=\\)"
+ header start)
+ (setq start (match-end 0))
+ (add-text-properties (match-beginning 2) (match-end 2)
+ '(face bold) header))
+ header)))
+ (setq header-end (move-marker (make-marker) (point)))
+ (while t
+ (setq custom1 custom)
+ (when (eq rmheader t)
+ (goto-line 1)
+ (re-search-forward ":" nil t)
+ (delete-region (match-end 0) (line-end-position))
+ (forward-char 1)
+ (looking-at "-+")
+ (delete-region (match-end 0) (line-end-position))
+ (move-marker header-end (match-end 0)))
+ (goto-char header-end)
+ (delete-region (point) (point-max))
+ (while (setq entry (pop custom1))
+ (setq key (car entry) desc (nth 1 entry)
+ type (nth 2 entry) match (nth 3 entry))
+ (if (> (length key) 1)
+ (add-to-list 'prefixes (string-to-char key))
+ (insert
+ (format
+ "\n%-4s%-14s: %s"
+ (org-add-props (copy-sequence key)
+ '(face bold))
+ (cond
+ ((string-match "\\S-" desc) desc)
+ ((eq type 'agenda) "Agenda for current week or day")
+ ((eq type 'alltodo) "List of all TODO entries")
+ ((eq type 'stuck) "List of stuck projects")
+ ((eq type 'todo) "TODO keyword")
+ ((eq type 'tags) "Tags query")
+ ((eq type 'tags-todo) "Tags (TODO)")
+ ((eq type 'tags-tree) "Tags tree")
+ ((eq type 'todo-tree) "TODO kwd tree")
+ ((eq type 'occur-tree) "Occur tree")
+ ((functionp type) (if (symbolp type)
+ (symbol-name type)
+ "Lambda expression"))
+ (t "???"))
+ (cond
+ ((stringp match)
+ (org-add-props match nil 'face 'org-warning))
+ (match
+ (format "set of %d commands" (length match)))
+ (t ""))))))
+ (when prefixes
+ (mapc (lambda (x)
+ (insert
+ (format "\n%s %s"
+ (org-add-props (char-to-string x)
+ nil 'face 'bold)
+ (or (cdr (assoc (concat selstring (char-to-string x))
+ prefix-descriptions))
+ "Prefix key"))))
+ prefixes))
+ (goto-char (point-min))
+ (when (fboundp 'fit-window-to-buffer)
+ (if second-time
+ (if (not (pos-visible-in-window-p (point-max)))
+ (fit-window-to-buffer))
+ (setq second-time t)
+ (fit-window-to-buffer)))
+ (message "Press key for agenda command%s:"
+ (if restrict-ok
+ (if restriction
+ (format " (restricted to %s)" restriction)
+ " (unrestricted)")
+ ""))
+ (setq c (read-char-exclusive))
+ (message "")
+ (cond
+ ((assoc (char-to-string c) custom)
+ (setq selstring (concat selstring (char-to-string c)))
+ (throw 'exit (cons selstring restriction)))
+ ((memq c prefixes)
+ (setq selstring (concat selstring (char-to-string c))
+ prefixes nil
+ rmheader (or rmheader t)
+ custom (delq nil (mapcar
+ (lambda (x)
+ (if (or (= (length (car x)) 1)
+ (/= (string-to-char (car x)) c))
+ nil
+ (cons (substring (car x) 1) (cdr x))))
+ custom))))
+ ((and (not restrict-ok) (memq c '(?1 ?0 ?<)))
+ (message "Restriction is only possible in Org-mode buffers")
+ (ding) (sit-for 1))
+ ((eq c ?1)
+ (setq restriction 'buffer))
+ ((eq c ?0)
+ (setq restriction (if region-p 'region 'subtree)))
+ ((eq c ?<)
+ (setq restriction
+ (cond
+ ((eq restriction 'buffer)
+ (if region-p 'region 'subtree))
+ ((memq restriction '(subtree region))
+ nil)
+ (t 'buffer))))
+ ((and (equal selstring "") (memq c '(?a ?t ?m ?L ?C ?e ?T ?M ?# ?/)))
+ (throw 'exit (cons (setq selstring (char-to-string c)) restriction)))
+ ((equal c ?q) (error "Abort"))
+ (t (error "Invalid key %c" c))))))))
+
+(defun org-run-agenda-series (name series)
+ (org-prepare-agenda name)
(let* ((org-agenda-multi t)
- (redo (list 'org-run-agenda-series (list 'quote series)))
+ (redo (list 'org-run-agenda-series name (list 'quote series)))
(cmds (car series))
(gprops (nth 1 series))
match ;; The byte compiler incorrectly complains about this. Keep it!
@@ -13380,11 +18433,14 @@ L Timeline for current buffer # List stuck projects (!=configure)
(setq type (car cmd) match (nth 1 cmd) lprops (nth 2 cmd))
(cond
((eq type 'agenda)
- (call-interactively 'org-agenda-list))
+ (org-let2 gprops lprops
+ '(call-interactively 'org-agenda-list)))
((eq type 'alltodo)
- (call-interactively 'org-todo-list))
+ (org-let2 gprops lprops
+ '(call-interactively 'org-todo-list)))
((eq type 'stuck)
- (call-interactively 'org-agenda-list-stuck-projects))
+ (org-let2 gprops lprops
+ '(call-interactively 'org-agenda-list-stuck-projects)))
((eq type 'tags)
(org-let2 gprops lprops
'(org-tags-view current-prefix-arg match)))
@@ -13405,17 +18461,208 @@ L Timeline for current buffer # List stuck projects (!=configure)
;;;###autoload
(defmacro org-batch-agenda (cmd-key &rest parameters)
- "Run an agenda command in batch mode, send result to STDOUT.
-CMD-KEY is a string that is also a key in `org-agenda-custom-commands'.
+ "Run an agenda command in batch mode and send the result to STDOUT.
+If CMD-KEY is a string of length 1, it is used as a key in
+`org-agenda-custom-commands' and triggers this command. If it is a
+longer string is is used as a tags/todo match string.
Paramters are alternating variable names and values that will be bound
before running the agenda command."
(let (pars)
(while parameters
(push (list (pop parameters) (if parameters (pop parameters))) pars))
- (flet ((read-char-exclusive () (string-to-char cmd-key)))
- (eval (list 'let (nreverse pars) '(org-agenda nil))))
- (set-buffer "*Org Agenda*")
- (princ (buffer-string))))
+ (if (> (length cmd-key) 2)
+ (eval (list 'let (nreverse pars)
+ (list 'org-tags-view nil cmd-key)))
+ (eval (list 'let (nreverse pars) (list 'org-agenda nil cmd-key))))
+ (set-buffer org-agenda-buffer-name)
+ (princ (org-encode-for-stdout (buffer-string)))))
+
+(defun org-encode-for-stdout (string)
+ (if (fboundp 'encode-coding-string)
+ (encode-coding-string string buffer-file-coding-system)
+ string))
+
+(defvar org-agenda-info nil)
+
+;;;###autoload
+(defmacro org-batch-agenda-csv (cmd-key &rest parameters)
+ "Run an agenda command in batch mode and send the result to STDOUT.
+If CMD-KEY is a string of length 1, it is used as a key in
+`org-agenda-custom-commands' and triggers this command. If it is a
+longer string is is used as a tags/todo match string.
+Paramters are alternating variable names and values that will be bound
+before running the agenda command.
+
+The output gives a line for each selected agenda item. Each
+item is a list of comma-separated values, like this:
+
+category,head,type,todo,tags,date,time,extra,priority-l,priority-n
+
+category The category of the item
+head The headline, without TODO kwd, TAGS and PRIORITY
+type The type of the agenda entry, can be
+ todo selected in TODO match
+ tagsmatch selected in tags match
+ diary imported from diary
+ deadline a deadline on given date
+ scheduled scheduled on given date
+ timestamp entry has timestamp on given date
+ closed entry was closed on given date
+ upcoming-deadline warning about deadline
+ past-scheduled forwarded scheduled item
+ block entry has date block including g. date
+todo The todo keyword, if any
+tags All tags including inherited ones, separated by colons
+date The relevant date, like 2007-2-14
+time The time, like 15:00-16:50
+extra Sting with extra planning info
+priority-l The priority letter if any was given
+priority-n The computed numerical priority
+agenda-day The day in the agenda where this is listed"
+
+ (let (pars)
+ (while parameters
+ (push (list (pop parameters) (if parameters (pop parameters))) pars))
+ (push (list 'org-agenda-remove-tags t) pars)
+ (if (> (length cmd-key) 2)
+ (eval (list 'let (nreverse pars)
+ (list 'org-tags-view nil cmd-key)))
+ (eval (list 'let (nreverse pars) (list 'org-agenda nil cmd-key))))
+ (set-buffer org-agenda-buffer-name)
+ (let* ((lines (org-split-string (buffer-string) "\n"))
+ line)
+ (while (setq line (pop lines))
+ (catch 'next
+ (if (not (get-text-property 0 'org-category line)) (throw 'next nil))
+ (setq org-agenda-info
+ (org-fix-agenda-info (text-properties-at 0 line)))
+ (princ
+ (org-encode-for-stdout
+ (mapconcat 'org-agenda-export-csv-mapper
+ '(org-category txt type todo tags date time-of-day extra
+ priority-letter priority agenda-day)
+ ",")))
+ (princ "\n"))))))
+
+(defun org-fix-agenda-info (props)
+ "Make sure all properties on an agenda item have a canonical form,
+so the the export commands caneasily use it."
+ (let (tmp re)
+ (when (setq tmp (plist-get props 'tags))
+ (setq props (plist-put props 'tags (mapconcat 'identity tmp ":"))))
+ (when (setq tmp (plist-get props 'date))
+ (if (integerp tmp) (setq tmp (calendar-gregorian-from-absolute tmp)))
+ (let ((calendar-date-display-form '(year "-" month "-" day)))
+ '((format "%4d, %9s %2s, %4s" dayname monthname day year))
+
+ (setq tmp (calendar-date-string tmp)))
+ (setq props (plist-put props 'date tmp)))
+ (when (setq tmp (plist-get props 'day))
+ (if (integerp tmp) (setq tmp (calendar-gregorian-from-absolute tmp)))
+ (let ((calendar-date-display-form '(year "-" month "-" day)))
+ (setq tmp (calendar-date-string tmp)))
+ (setq props (plist-put props 'day tmp))
+ (setq props (plist-put props 'agenda-day tmp)))
+ (when (setq tmp (plist-get props 'txt))
+ (when (string-match "\\[#\\([A-Z0-9]\\)\\] ?" tmp)
+ (plist-put props 'priority-letter (match-string 1 tmp))
+ (setq tmp (replace-match "" t t tmp)))
+ (when (and (setq re (plist-get props 'org-todo-regexp))
+ (setq re (concat "\\`\\.*" re " ?"))
+ (string-match re tmp))
+ (plist-put props 'todo (match-string 1 tmp))
+ (setq tmp (replace-match "" t t tmp)))
+ (plist-put props 'txt tmp)))
+ props)
+
+(defun org-agenda-export-csv-mapper (prop)
+ (let ((res (plist-get org-agenda-info prop)))
+ (setq res
+ (cond
+ ((not res) "")
+ ((stringp res) res)
+ (t (prin1-to-string res))))
+ (while (string-match "," res)
+ (setq res (replace-match ";" t t res)))
+ (org-trim res)))
+
+
+;;;###autoload
+(defun org-store-agenda-views (&rest parameters)
+ (interactive)
+ (eval (list 'org-batch-store-agenda-views)))
+
+;; FIXME, why is this a macro?????
+;;;###autoload
+(defmacro org-batch-store-agenda-views (&rest parameters)
+ "Run all custom agenda commands that have a file argument."
+ (let ((cmds org-agenda-custom-commands)
+ (pop-up-frames nil)
+ (dir default-directory)
+ pars cmd thiscmdkey files opts)
+ (while parameters
+ (push (list (pop parameters) (if parameters (pop parameters))) pars))
+ (setq pars (reverse pars))
+ (save-window-excursion
+ (while cmds
+ (setq cmd (pop cmds)
+ thiscmdkey (car cmd)
+ opts (nth 3 cmd)
+ files (nth 4 cmd))
+ (if (stringp files) (setq files (list files)))
+ (when files
+ (eval (list 'let (append org-agenda-exporter-settings opts pars)
+ (list 'org-agenda nil thiscmdkey)))
+ (set-buffer org-agenda-buffer-name)
+ (while files
+ (eval (list 'let (append org-agenda-exporter-settings opts pars)
+ (list 'org-write-agenda
+ (expand-file-name (pop files) dir) t))))
+ (and (get-buffer org-agenda-buffer-name)
+ (kill-buffer org-agenda-buffer-name)))))))
+
+(defun org-write-agenda (file &optional nosettings)
+ "Write the current buffer (an agenda view) as a file.
+Depending on the extension of the file name, plain text (.txt),
+HTML (.html or .htm) or Postscript (.ps) is produced.
+If NOSETTINGS is given, do not scope the settings of
+`org-agenda-exporter-settings' into the export commands. This is used when
+the settings have already been scoped and we do not wish to overrule other,
+higher priority settings."
+ (interactive "FWrite agenda to file: ")
+ (if (not (file-writable-p file))
+ (error "Cannot write agenda to file %s" file))
+ (cond
+ ((string-match "\\.html?\\'" file) (require 'htmlize))
+ ((string-match "\\.ps\\'" file) (require 'ps-print)))
+ (org-let (if nosettings nil org-agenda-exporter-settings)
+ '(save-excursion
+ (save-window-excursion
+ (cond
+ ((string-match "\\.html?\\'" file)
+ (set-buffer (htmlize-buffer (current-buffer)))
+
+ (when (and org-agenda-export-html-style
+ (string-match "<style>" org-agenda-export-html-style))
+ ;; replace <style> section with org-agenda-export-html-style
+ (goto-char (point-min))
+ (kill-region (- (search-forward "<style") 6)
+ (search-forward "</style>"))
+ (insert org-agenda-export-html-style))
+ (write-file file)
+ (kill-buffer (current-buffer))
+ (message "HTML written to %s" file))
+ ((string-match "\\.ps\\'" file)
+ (ps-print-buffer-with-faces file)
+ (message "Postscript written to %s" file))
+ (t
+ (let ((bs (buffer-string)))
+ (find-file file)
+ (insert bs)
+ (save-buffer 0)
+ (kill-buffer (current-buffer))
+ (message "Plain text written to %s" file))))))
+ (set-buffer org-agenda-buffer-name)))
(defmacro org-no-read-only (&rest body)
"Inhibit read-only for BODY."
@@ -13431,8 +18678,10 @@ before running the agenda command."
"Fit the window to the buffer size."
(and (memq org-agenda-window-setup '(reorganize-frame))
(fboundp 'fit-window-to-buffer)
- (fit-window-to-buffer nil (/ (* (frame-height) 3) 4)
- (/ (frame-height) 2))))
+ (fit-window-to-buffer
+ nil
+ (floor (* (frame-height) (cdr org-agenda-window-frame-fractions)))
+ (floor (* (frame-height) (car org-agenda-window-frame-fractions))))))
;;; Agenda file list
@@ -13440,11 +18689,25 @@ before running the agenda command."
"Get the list of agenda files.
Optional UNRESTRICTED means return the full list even if a restriction
is currently in place."
- (cond
- ((and (not unrestricted) (get 'org-agenda-files 'org-restrict)))
- ((stringp org-agenda-files) (org-read-agenda-file-list))
- ((listp org-agenda-files) org-agenda-files)
- (t (error "Invalid value of `org-agenda-files'"))))
+ (let ((files
+ (cond
+ ((and (not unrestricted) (get 'org-agenda-files 'org-restrict)))
+ ((stringp org-agenda-files) (org-read-agenda-file-list))
+ ((listp org-agenda-files) org-agenda-files)
+ (t (error "Invalid value of `org-agenda-files'")))))
+ (setq files (apply 'append
+ (mapcar (lambda (f)
+ (if (file-directory-p f)
+ (directory-files f t "\\.org\\'")
+ (list f)))
+ files)))
+ (if org-agenda-skip-unavailable-files
+ (delq nil
+ (mapcar (function
+ (lambda (file)
+ (and (file-readable-p file) file)))
+ files))
+ files))) ; `org-check-agenda-file' will remove them from the list
(defun org-edit-agenda-file-list ()
"Edit the list of agenda files.
@@ -13508,20 +18771,14 @@ If the current buffer does not, find the first agenda file."
(find-file (car fs)))
(if (buffer-base-buffer) (switch-to-buffer (buffer-base-buffer)))))
-(defun org-agenda-file-to-end ()
- "Move/add the current file to the end of the agenda file list.
-If the file is not present in the list, it is appended to the list. If it is
-present, it is moved there."
- (interactive)
- (org-agenda-file-to-front 'to-end))
-
(defun org-agenda-file-to-front (&optional to-end)
"Move/add the current file to the top of the agenda file list.
If the file is not present in the list, it is added to the front. If it is
present, it is moved there. With optional argument TO-END, add/move to the
end of the list."
(interactive "P")
- (let ((file-alist (mapcar (lambda (x)
+ (let ((org-agenda-skip-unavailable-files nil)
+ (file-alist (mapcar (lambda (x)
(cons (file-truename x) x))
(org-agenda-files t)))
(ctf (file-truename buffer-file-name))
@@ -13542,7 +18799,8 @@ end of the list."
These are the files which are being checked for agenda entries.
Optional argument FILE means, use this file instead of the current."
(interactive)
- (let* ((file (or file buffer-file-name))
+ (let* ((org-agenda-skip-unavailable-files nil)
+ (file (or file buffer-file-name))
(true-file (file-truename file))
(afile (abbreviate-file-name file))
(files (delq nil (mapcar
@@ -13578,16 +18836,23 @@ Optional argument FILE means, use this file instead of the current."
(defvar org-agenda-multi nil) ; dynammically scoped
(defvar org-agenda-buffer-name "*Org Agenda*")
(defvar org-pre-agenda-window-conf nil)
-(defun org-prepare-agenda ()
+(defvar org-agenda-name nil)
+(defun org-prepare-agenda (&optional name)
+ (setq org-todo-keywords-for-agenda nil)
+ (setq org-done-keywords-for-agenda nil)
(if org-agenda-multi
(progn
(setq buffer-read-only nil)
(goto-char (point-max))
- (unless (= (point) 1)
+ (unless (or (bobp) org-agenda-compact-blocks)
(insert "\n" (make-string (window-width) ?=) "\n"))
(narrow-to-region (point) (point-max)))
(org-agenda-maybe-reset-markers 'force)
(org-prepare-agenda-buffers (org-agenda-files))
+ (setq org-todo-keywords-for-agenda
+ (org-uniquify org-todo-keywords-for-agenda))
+ (setq org-done-keywords-for-agenda
+ (org-uniquify org-done-keywords-for-agenda))
(let* ((abuf (get-buffer-create org-agenda-buffer-name))
(awin (get-buffer-window abuf)))
(cond
@@ -13597,35 +18862,76 @@ Optional argument FILE means, use this file instead of the current."
((equal org-agenda-window-setup 'current-window)
(switch-to-buffer abuf))
((equal org-agenda-window-setup 'other-window)
- (switch-to-buffer-other-window abuf))
+ (org-switch-to-buffer-other-window abuf))
((equal org-agenda-window-setup 'other-frame)
(switch-to-buffer-other-frame abuf))
((equal org-agenda-window-setup 'reorganize-frame)
(delete-other-windows)
- (switch-to-buffer-other-window abuf))))
+ (org-switch-to-buffer-other-window abuf))))
(setq buffer-read-only nil)
(erase-buffer)
- (org-agenda-mode))
+ (org-agenda-mode)
+ (and name (not org-agenda-name)
+ (org-set-local 'org-agenda-name name)))
(setq buffer-read-only nil))
(defun org-finalize-agenda ()
"Finishing touch for the agenda buffer, called just before displaying it."
(unless org-agenda-multi
- (org-agenda-align-tags)
(save-excursion
- (let ((buffer-read-only))
+ (let ((inhibit-read-only t))
(goto-char (point-min))
(while (org-activate-bracket-links (point-max))
(add-text-properties (match-beginning 0) (match-end 0)
- '(face org-link))))
+ '(face org-link)))
+ (org-agenda-align-tags)
+ (unless org-agenda-with-colors
+ (remove-text-properties (point-min) (point-max) '(face nil))))
+ (if (and (boundp 'org-overriding-columns-format)
+ org-overriding-columns-format)
+ (org-set-local 'org-overriding-columns-format
+ org-overriding-columns-format))
+ (if (and (boundp 'org-agenda-view-columns-initially)
+ org-agenda-view-columns-initially)
+ (org-agenda-columns))
+ (when org-agenda-fontify-priorities
+ (org-fontify-priorities))
(run-hooks 'org-finalize-agenda-hook))))
+(defun org-fontify-priorities ()
+ "Make highest priority lines bold, and lowest italic."
+ (interactive)
+ (mapc (lambda (o) (if (eq (org-overlay-get o 'org-type) 'org-priority)
+ (org-delete-overlay o)))
+ (overlays-in (point-min) (point-max)))
+ (save-excursion
+ (let ((ovs (org-overlays-in (point-min) (point-max)))
+ (inhibit-read-only t)
+ b e p ov h l)
+ (goto-char (point-min))
+ (while (re-search-forward "\\[#\\(.\\)\\]" nil t)
+ (setq h (or (get-char-property (point) 'org-highest-priority)
+ org-highest-priority)
+ l (or (get-char-property (point) 'org-lowest-priority)
+ org-lowest-priority)
+ p (string-to-char (match-string 1))
+ b (match-beginning 0) e (line-end-position)
+ ov (org-make-overlay b e))
+ (org-overlay-put
+ ov 'face
+ (cond ((listp org-agenda-fontify-priorities)
+ (cdr (assoc p org-agenda-fontify-priorities)))
+ ((equal p l) 'italic)
+ ((equal p h) 'bold)))
+ (org-overlay-put ov 'org-type 'org-priority)))))
+
(defun org-prepare-agenda-buffers (files)
"Create buffers for all agenda files, protect archived trees and comments."
(interactive)
(let ((pa '(:org-archived t))
(pc '(:org-comment t))
(pall '(:org-archived t :org-comment t))
+ (inhibit-read-only t)
(rea (concat ":" org-archive-tag ":"))
bmp file re)
(save-excursion
@@ -13635,6 +18941,11 @@ Optional argument FILE means, use this file instead of the current."
(set-buffer (org-get-agenda-file-buffer file))
(widen)
(setq bmp (buffer-modified-p))
+ (org-refresh-category-properties)
+ (setq org-todo-keywords-for-agenda
+ (append org-todo-keywords-for-agenda org-todo-keywords-1))
+ (setq org-done-keywords-for-agenda
+ (append org-done-keywords-for-agenda org-done-keywords))
(save-excursion
(remove-text-properties (point-min) (point-max) pall)
(when org-agenda-skip-archived-trees
@@ -13651,18 +18962,20 @@ Optional argument FILE means, use this file instead of the current."
(defvar org-agenda-skip-function nil
"Function to be called at each match during agenda construction.
-If this function return nil, the current match should not be skipped.
+If this function returns nil, the current match should not be skipped.
Otherwise, the function must return a position from where the search
should be continued.
+This may also be a Lisp form, it will be evaluated.
Never set this variable using `setq' or so, because then it will apply
to all future agenda commands. Instead, bind it with `let' to scope
-it dynamically into the agenda-constructing command.")
+it dynamically into the agenda-constructing command. A good way to set
+it is through options in org-agenda-custom-commands.")
(defun org-agenda-skip ()
"Throw to `:skip' in places that should be skipped.
Also moves point to the end of the skipped region, so that search can
continue from there."
- (let ((p (point-at-bol)) to)
+ (let ((p (point-at-bol)) to fp)
(and org-agenda-skip-archived-trees
(get-text-property p :org-archived)
(org-end-of-subtree t)
@@ -13671,10 +18984,13 @@ continue from there."
(org-end-of-subtree t)
(throw :skip t))
(if (equal (char-after p) ?#) (throw :skip t))
- (when (and (functionp org-agenda-skip-function)
+ (when (and (or (setq fp (functionp org-agenda-skip-function))
+ (consp org-agenda-skip-function))
(setq to (save-excursion
(save-match-data
- (funcall org-agenda-skip-function)))))
+ (if fp
+ (funcall org-agenda-skip-function)
+ (eval org-agenda-skip-function))))))
(goto-char to)
(throw :skip t))))
@@ -13728,36 +19044,14 @@ When a buffer is unmodified, it is just killed. When modified, it is saved
(with-current-buffer buf (save-buffer)))
(kill-buffer buf))))
-(defvar org-category-table nil)
-(defun org-get-category-table ()
- "Get the table of categories and positions in current buffer."
- (let (tbl)
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward "\\(^\\|\r\\)#\\+CATEGORY:[ \t]*\\(.*\\)" nil t)
- (push (cons (point) (org-trim (match-string 2))) tbl)))
- tbl))
-
(defun org-get-category (&optional pos)
"Get the category applying to position POS."
- (if (not org-category-table)
- (cond
- ((null org-category)
- (setq org-category
- (if buffer-file-name
- (file-name-sans-extension
- (file-name-nondirectory buffer-file-name))
- "???")))
- ((symbolp org-category) (symbol-name org-category))
- (t org-category))
- (let ((tbl org-category-table)
- (pos (or pos (point))))
- (while (and tbl (> (caar tbl) pos))
- (pop tbl))
- (or (cdar tbl) (cdr (nth (1- (length org-category-table))
- org-category-table))))))
+ (get-text-property (or pos (point)) 'org-category))
+
;;; Agenda timeline
+(defvar org-agenda-only-exact-dates nil) ; dynamically scoped
+
(defun org-timeline (&optional include-all)
"Show a time-sorted view of the entries in the current org file.
Only entries with a time stamp of today or later will be listed. With
@@ -13779,29 +19073,35 @@ dates."
(day-numbers (org-get-all-dates beg end 'no-ranges
t doclosed ; always include today
org-timeline-show-empty-dates))
+ (org-deadline-warning-days 0)
+ (org-agenda-only-exact-dates t)
(today (time-to-days (current-time)))
(past t)
args
s e rtn d emptyp)
(setq org-agenda-redo-command
(list 'progn
- (list 'switch-to-buffer-other-window (current-buffer))
+ (list 'org-switch-to-buffer-other-window (current-buffer))
(list 'org-timeline (list 'quote include-all))))
(if (not dopast)
;; Remove past dates from the list of dates.
(setq day-numbers (delq nil (mapcar (lambda(x)
(if (>= x today) x nil))
day-numbers))))
- (org-prepare-agenda)
+ (org-prepare-agenda (concat "Timeline "
+ (file-name-nondirectory buffer-file-name)))
(if doclosed (push :closed args))
(push :timestamp args)
+ (push :deadline args)
+ (push :scheduled args)
+ (push :sexp args)
(if dotodo (push :todo args))
(while (setq d (pop day-numbers))
(if (and (listp d) (eq (car d) :omitted))
(progn
(setq s (point))
(insert (format "\n[... %d empty days omitted]\n\n" (cdr d)))
- (put-text-property s (1- (point)) 'face 'org-level-3))
+ (put-text-property s (1- (point)) 'face 'org-agenda-structure))
(if (listp d) (setq d (car d) emptyp t) (setq emptyp nil))
(if (and (>= d today)
dopast
@@ -13812,19 +19112,17 @@ dates."
(setq date (calendar-gregorian-from-absolute d))
(setq s (point))
(setq rtn (and (not emptyp)
- (apply 'org-agenda-get-day-entries
- entry date args)))
+ (apply 'org-agenda-get-day-entries entry
+ date args)))
(if (or rtn (equal d today) org-timeline-show-empty-dates)
(progn
- (insert (calendar-day-name date) " "
- (number-to-string (extract-calendar-day date)) " "
- (calendar-month-name (extract-calendar-month date)) " "
- (number-to-string (extract-calendar-year date)) "\n")
-; FIXME: this gives a timezone problem
-; (insert (format-time-string org-agenda-date-format
-; (calendar-time-from-absolute d 0))
-; "\n")
- (put-text-property s (1- (point)) 'face 'org-level-3)
+ (insert
+ (if (stringp org-agenda-format-date)
+ (format-time-string org-agenda-format-date
+ (org-time-from-absolute date))
+ (funcall org-agenda-format-date date))
+ "\n")
+ (put-text-property s (1- (point)) 'face 'org-agenda-structure)
(put-text-property s (1- (point)) 'org-date-line t)
(if (equal d today)
(put-text-property s (1- (point)) 'org-today t))
@@ -13880,38 +19178,50 @@ When EMPTY is non-nil, also include days without any entries."
;;; Agenda Daily/Weekly
(defvar org-agenda-overriding-arguments nil) ; dynamically scoped parameter
+(defvar org-agenda-start-day nil) ; dynamically scoped parameter
(defvar org-agenda-last-arguments nil
"The arguments of the previous call to org-agenda")
(defvar org-starting-day nil) ; local variable in the agenda buffer
+(defvar org-agenda-span nil) ; local variable in the agenda buffer
(defvar org-include-all-loc nil) ; local variable
-
+(defvar org-agenda-remove-date nil) ; dynamically scoped
;;;###autoload
(defun org-agenda-list (&optional include-all start-day ndays)
- "Produce a weekly view from all files in variable `org-agenda-files'.
-The view will be for the current week, but from the overview buffer you
-will be able to go to other weeks.
-With one \\[universal-argument] prefix argument INCLUDE-ALL, all unfinished TODO items will
-also be shown, under the current date.
-With two \\[universal-argument] prefix argument INCLUDE-ALL, all TODO entries marked DONE
-on the days are also shown. See the variable `org-log-done' for how
-to turn on logging.
+ "Produce a daily/weekly view from all files in variable `org-agenda-files'.
+The view will be for the current day or week, but from the overview buffer
+you will be able to go to other days/weeks.
+
+With one \\[universal-argument] prefix argument INCLUDE-ALL,
+all unfinished TODO items will also be shown, before the agenda.
+This feature is considered obsolete, please use the TODO list or a block
+agenda instead.
+
+With a numeric prefix argument in an interactive call, the agenda will
+span INCLUDE-ALL days. Lisp programs should instead specify NDAYS to change
+the number of days. NDAYS defaults to `org-agenda-ndays'.
+
START-DAY defaults to TODAY, or to the most recent match for the weekday
-given in `org-agenda-start-on-weekday'.
-NDAYS defaults to `org-agenda-ndays'."
+given in `org-agenda-start-on-weekday'."
(interactive "P")
+ (if (and (integerp include-all) (> include-all 0))
+ (setq ndays include-all include-all nil))
+ (setq ndays (or ndays org-agenda-ndays)
+ start-day (or start-day org-agenda-start-day))
(if org-agenda-overriding-arguments
(setq include-all (car org-agenda-overriding-arguments)
start-day (nth 1 org-agenda-overriding-arguments)
ndays (nth 2 org-agenda-overriding-arguments)))
+ (if (stringp start-day)
+ ;; Convert to an absolute day number
+ (setq start-day (time-to-days (org-read-date nil t start-day))))
(setq org-agenda-last-arguments (list include-all start-day ndays))
(org-compile-prefix-format 'agenda)
(org-set-sorting-strategy 'agenda)
(require 'calendar)
(let* ((org-agenda-start-on-weekday
- (if (or (equal ndays 1)
- (and (null ndays) (equal 1 org-agenda-ndays)))
- nil org-agenda-start-on-weekday))
+ (if (or (equal ndays 7) (and (null ndays) (equal 7 org-agenda-ndays)))
+ org-agenda-start-on-weekday nil))
(thefiles (org-agenda-files))
(files thefiles)
(today (time-to-days (current-time)))
@@ -13925,6 +19235,7 @@ NDAYS defaults to `org-agenda-ndays'."
(d (- nt n1)))
(- sd (+ (if (< d 0) 7 0) d)))))
(day-numbers (list start))
+ (day-cnt 0)
(inhibit-redisplay (not debug-on-error))
s e rtn rtnall file date d start-pos end-pos todayp nd)
(setq org-agenda-redo-command
@@ -13936,9 +19247,11 @@ NDAYS defaults to `org-agenda-ndays'."
(push (1+ (car day-numbers)) day-numbers)
(setq ndays (1- ndays)))
(setq day-numbers (nreverse day-numbers))
- (org-prepare-agenda)
+ (org-prepare-agenda "Day/Week")
(org-set-local 'org-starting-day (car day-numbers))
(org-set-local 'org-include-all-loc include-all)
+ (org-set-local 'org-agenda-span
+ (org-agenda-ndays-to-span nd))
(when (and (or include-all org-agenda-include-all-todo)
(member today day-numbers))
(setq files thefiles
@@ -13953,11 +19266,14 @@ NDAYS defaults to `org-agenda-ndays'."
(when rtnall
(insert "ALL CURRENTLY OPEN TODO ITEMS:\n")
(add-text-properties (point-min) (1- (point))
- (list 'face 'org-level-3))
+ (list 'face 'org-agenda-structure))
(insert (org-finalize-agenda-entries rtnall) "\n")))
- (setq s (point))
- (insert (if (= nd 7) "Week-" "Day-") "agenda:\n")
- (add-text-properties s (1- (point)) (list 'face 'org-level-3))
+ (unless org-agenda-compact-blocks
+ (setq s (point))
+ (insert (capitalize (symbol-name (org-agenda-ndays-to-span nd)))
+ "-agenda:\n")
+ (add-text-properties s (1- (point)) (list 'face 'org-agenda-structure
+ 'org-date-line t)))
(while (setq d (pop day-numbers))
(setq date (calendar-gregorian-from-absolute d)
s (point))
@@ -13974,10 +19290,10 @@ NDAYS defaults to `org-agenda-ndays'."
(if org-agenda-show-log
(setq rtn (org-agenda-get-day-entries
file date
- :deadline :scheduled :timestamp :closed))
+ :deadline :scheduled :timestamp :sexp :closed))
(setq rtn (org-agenda-get-day-entries
file date
- :deadline :scheduled :timestamp)))
+ :deadline :scheduled :sexp :timestamp)))
(setq rtnall (append rtnall rtn))))
(if org-agenda-include-diary
(progn
@@ -13986,23 +19302,24 @@ NDAYS defaults to `org-agenda-ndays'."
(setq rtnall (append rtnall rtn))))
(if (or rtnall org-agenda-show-all-dates)
(progn
- (insert (format "%-9s %2d %s %4d\n"
- (calendar-day-name date)
- (extract-calendar-day date)
- (calendar-month-name (extract-calendar-month date))
- (extract-calendar-year date)))
-; FIXME: this gives a timezone problem
-; (insert (format-time-string org-agenda-date-format
-; (calendar-time-from-absolute d 0)) "\n")
- (put-text-property s (1- (point)) 'face 'org-level-3)
+ (setq day-cnt (1+ day-cnt))
+ (insert
+ (if (stringp org-agenda-format-date)
+ (format-time-string org-agenda-format-date
+ (org-time-from-absolute date))
+ (funcall org-agenda-format-date date))
+ "\n")
+ (put-text-property s (1- (point)) 'face 'org-agenda-structure)
(put-text-property s (1- (point)) 'org-date-line t)
+ (put-text-property s (1- (point)) 'org-day-cnt day-cnt)
(if todayp (put-text-property s (1- (point)) 'org-today t))
(if rtnall (insert
(org-finalize-agenda-entries
(org-agenda-add-time-grid-maybe
rtnall nd todayp))
"\n"))
- (put-text-property s (1- (point)) 'day d))))
+ (put-text-property s (1- (point)) 'day d)
+ (put-text-property s (1- (point)) 'org-day-cnt day-cnt))))
(goto-char (point-min))
(org-fit-agenda-window)
(unless (and (pos-visible-in-window-p (point-min))
@@ -14019,6 +19336,9 @@ NDAYS defaults to `org-agenda-ndays'."
(setq buffer-read-only t)
(message "")))
+(defun org-agenda-ndays-to-span (n)
+ (cond ((< n 7) 'day) ((= n 7) 'week) ((< n 32) 'month) (t 'year)))
+
;;; Agenda TODO list
(defvar org-select-this-todo-keyword nil)
@@ -14030,28 +19350,27 @@ NDAYS defaults to `org-agenda-ndays'."
The prefix arg can be used to select a specific TODO keyword and limit
the list to these. When using \\[universal-argument], you will be prompted
for a keyword. A numeric prefix directly selects the Nth keyword in
-`org-todo-keywords'."
+`org-todo-keywords-1'."
(interactive "P")
(require 'calendar)
(org-compile-prefix-format 'todo)
(org-set-sorting-strategy 'todo)
+ (org-prepare-agenda "TODO")
(let* ((today (time-to-days (current-time)))
(date (calendar-gregorian-from-absolute today))
- (kwds org-todo-keywords)
+ (kwds org-todo-keywords-for-agenda)
(completion-ignore-case t)
(org-select-this-todo-keyword
(if (stringp arg) arg
(and arg (integerp arg) (> arg 0)
- (nth (1- arg) org-todo-keywords))))
+ (nth (1- arg) kwds))))
rtn rtnall files file pos)
(when (equal arg '(4))
(setq org-select-this-todo-keyword
- (completing-read "Keyword: " (mapcar 'list org-todo-keywords)
- nil t)))
+ (completing-read "Keyword (or KWD1|K2D2|...): "
+ (mapcar 'list kwds) nil nil)))
(and (equal 0 arg) (setq org-select-this-todo-keyword nil))
- (org-prepare-agenda)
(org-set-local 'org-last-arg arg)
- (org-set-local 'org-todo-keywords kwds)
(setq org-agenda-redo-command
'(org-todo-list (or current-prefix-arg org-last-arg)))
(setq files (org-agenda-files)
@@ -14063,23 +19382,25 @@ for a keyword. A numeric prefix directly selects the Nth keyword in
(setq rtnall (append rtnall rtn))))
(if org-agenda-overriding-header
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
- nil 'face 'org-level-3) "\n")
+ nil 'face 'org-agenda-structure) "\n")
(insert "Global list of TODO items of type: ")
(add-text-properties (point-min) (1- (point))
- (list 'face 'org-level-3))
+ (list 'face 'org-agenda-structure))
(setq pos (point))
(insert (or org-select-this-todo-keyword "ALL") "\n")
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
(setq pos (point))
(unless org-agenda-multi
- (insert
- "Available with `N r': (0)ALL "
- (let ((n 0))
- (mapconcat (lambda (x)
- (format "(%d)%s" (setq n (1+ n)) x))
- org-todo-keywords " "))
- "\n"))
- (add-text-properties pos (1- (point)) (list 'face 'org-level-3)))
+ (insert "Available with `N r': (0)ALL")
+ (let ((n 0) s)
+ (mapc (lambda (x)
+ (setq s (format "(%d)%s" (setq n (1+ n)) x))
+ (if (> (+ (current-column) (string-width s) 1) (frame-width))
+ (insert "\n "))
+ (insert " " s))
+ kwds))
+ (insert "\n"))
+ (add-text-properties pos (1- (point)) (list 'face 'org-agenda-structure)))
(when rtnall
(insert (org-finalize-agenda-entries rtnall) "\n"))
(goto-char (point-min))
@@ -14104,7 +19425,7 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
buffer)
(setq matcher (org-make-tags-matcher match)
match (car matcher) matcher (cdr matcher))
- (org-prepare-agenda)
+ (org-prepare-agenda (concat "TAGS " match))
(setq org-agenda-redo-command
(list 'org-tags-view (list 'quote todo-only)
(list 'if 'current-prefix-arg nil match)))
@@ -14124,7 +19445,6 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
(with-current-buffer buffer
(unless (org-mode-p)
(error "Agenda file %s is not in `org-mode'" file))
- (setq org-category-table (org-get-category-table))
(save-excursion
(save-restriction
(if org-agenda-restrict
@@ -14135,17 +19455,17 @@ The prefix arg TODO-ONLY limits the search to TODO entries."
(setq rtnall (append rtnall rtn))))))))
(if org-agenda-overriding-header
(insert (org-add-props (copy-sequence org-agenda-overriding-header)
- nil 'face 'org-level-3) "\n")
+ nil 'face 'org-agenda-structure) "\n")
(insert "Headlines with TAGS match: ")
(add-text-properties (point-min) (1- (point))
- (list 'face 'org-level-3))
+ (list 'face 'org-agenda-structure))
(setq pos (point))
(insert match "\n")
(add-text-properties pos (1- (point)) (list 'face 'org-warning))
(setq pos (point))
(unless org-agenda-multi
(insert "Press `C-u r' to search again with new search string\n"))
- (add-text-properties pos (1- (point)) (list 'face 'org-level-3)))
+ (add-text-properties pos (1- (point)) (list 'face 'org-agenda-structure)))
(when rtnall
(insert (org-finalize-agenda-entries rtnall) "\n"))
(goto-char (point-min))
@@ -14169,12 +19489,66 @@ used by user-defined selections using `org-agenda-skip-function'.")
If yes, it returns the end position of this tree, causing agenda commands
to skip this subtree. This is a function that can be put into
`org-agenda-skip-function' for the duration of a command."
- (save-match-data
- (let ((end (save-excursion (org-end-of-subtree t)))
- skip)
- (save-excursion
- (setq skip (re-search-forward org-agenda-skip-regexp end t)))
- (and skip end))))
+ (let ((end (save-excursion (org-end-of-subtree t)))
+ skip)
+ (save-excursion
+ (setq skip (re-search-forward org-agenda-skip-regexp end t)))
+ (and skip end)))
+
+(defun org-agenda-skip-entry-if (&rest conditions)
+ "Skip entry if any of CONDITIONS is true.
+See `org-agenda-skip-if for details."
+ (org-agenda-skip-if nil conditions))
+(defun org-agenda-skip-subtree-if (&rest conditions)
+ "Skip entry if any of CONDITIONS is true.
+See `org-agenda-skip-if for details."
+ (org-agenda-skip-if t conditions))
+
+(defun org-agenda-skip-if (subtree conditions)
+ "Checks current entity for CONDITIONS.
+If SUBTREE is non-nil, the entire subtree is checked. Otherwise, only
+the entry, i.e. the text before the next heading is checked.
+
+CONDITIONS is a list of symbols, boolean OR is used to combine the results
+from different tests. Valid conditions are:
+
+scheduled Check if there is a scheduled cookie
+notscheduled Check if there is no scheduled cookie
+deadline Check if there is a deadline
+notdeadline Check if there is no deadline
+regexp Check if regexp matches
+notregexp Check if regexp does not match.
+
+The regexp is taken from the conditions list, it must com right after the
+`regexp' of `notregexp' element.
+
+If any of these conditions is met, this function returns the end point of
+the entity, causing the search to continue from there. This is a function
+that can be put into `org-agenda-skip-function' for the duration of a command."
+ (let (beg end m r)
+ (org-back-to-heading t)
+ (setq beg (point)
+ end (if subtree
+ (progn (org-end-of-subtree t) (point))
+ (progn (outline-next-heading) (1- (point)))))
+ (goto-char beg)
+ (and
+ (or
+ (and (memq 'scheduled conditions)
+ (re-search-forward org-scheduled-time-regexp end t))
+ (and (memq 'notscheduled conditions)
+ (not (re-search-forward org-scheduled-time-regexp end t)))
+ (and (memq 'deadline conditions)
+ (re-search-forward org-deadline-time-regexp end t))
+ (and (memq 'notdeadline conditions)
+ (not (re-search-forward org-deadline-time-regexp end t)))
+ (and (setq m (memq 'regexp conditions))
+ (stringp (setq r (nth 1 m)))
+ (re-search-forward (nth 1 m) end t))
+ (and (setq m (memq 'notregexp conditions))
+ (stringp (setq r (nth 1 m)))
+ (not (re-search-forward (nth 1 m) end t))))
+ end)))
(defun org-agenda-list-stuck-projects (&rest ignore)
"Create agenda view for projects that are stuck.
@@ -14184,24 +19558,38 @@ of what a project is and how to check if it stuck, customize the variable
MATCH is being ignored."
(interactive)
(let* ((org-agenda-skip-function 'org-agenda-skip-subtree-when-regexp-matches)
+ ;; FIXME: we could have used org-agenda-skip-if here.
(org-agenda-overriding-header "List of stuck projects: ")
(matcher (nth 0 org-stuck-projects))
(todo (nth 1 org-stuck-projects))
- (tags (nth 2 org-stuck-projects))
+ (todo-wds (if (member "*" todo)
+ (progn
+ (org-prepare-agenda-buffers (org-agenda-files))
+ (org-delete-all
+ org-done-keywords-for-agenda
+ (copy-sequence org-todo-keywords-for-agenda)))
+ todo))
(todo-re (concat "^\\*+[ \t]+\\("
- (mapconcat 'identity todo "\\|")
+ (mapconcat 'identity todo-wds "\\|")
"\\)\\>"))
- (tags-re (concat "^\\*+.*:\\("
- (mapconcat 'identity tags "\\|")
- "\\):[a-zA-Z0-9_@:]*[ \t]*$")))
-
+ (tags (nth 2 org-stuck-projects))
+ (tags-re (if (member "*" tags)
+ (org-re "^\\*+ .*:[[:alnum:]_@]+:[ \t]*$")
+ (concat "^\\*+ .*:\\("
+ (mapconcat 'identity tags "\\|")
+ (org-re "\\):[[:alnum:]_@:]*[ \t]*$"))))
+ (gen-re (nth 3 org-stuck-projects))
+ (re-list
+ (delq nil
+ (list
+ (if todo todo-re)
+ (if tags tags-re)
+ (and gen-re (stringp gen-re) (string-match "\\S-" gen-re)
+ gen-re)))))
(setq org-agenda-skip-regexp
- (cond
- ((and todo tags)
- (concat todo-re "\\|" tags-re))
- (todo todo-re)
- (tags tags-re)
- (t (error "No information how to identify unstuck projects"))))
+ (if re-list
+ (mapconcat 'identity re-list "\\|")
+ (error "No information how to identify unstuck projects")))
(org-tags-view nil matcher)
(with-current-buffer org-agenda-buffer-name
(setq org-agenda-redo-command
@@ -14216,6 +19604,7 @@ MATCH is being ignored."
"Get the (Emacs Calendar) diary entries for DATE."
(let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*")
(diary-display-hook '(fancy-diary-display))
+ (pop-up-frames nil)
(list-diary-entries-hook
(cons 'org-diary-default-entry list-diary-entries-hook))
(diary-file-name-prefix-function nil) ; turn this feature off
@@ -14224,18 +19613,20 @@ MATCH is being ignored."
(org-disable-agenda-to-diary t))
(save-excursion
(save-window-excursion
- (list-diary-entries date 1))) ;; Keep this name for now, compatibility
+ (funcall (if (fboundp 'diary-list-entries)
+ 'diary-list-entries 'list-diary-entries)
+ date 1)))
(if (not (get-buffer fancy-diary-buffer))
(setq entries nil)
(with-current-buffer fancy-diary-buffer
(setq buffer-read-only nil)
- (if (= (point-max) 1)
+ (if (zerop (buffer-size))
;; No entries
(setq entries nil)
;; Omit the date and other unnecessary stuff
(org-agenda-cleanup-fancy-diary)
;; Add prefix to each line and extend the text properties
- (if (= (point-max) 1)
+ (if (zerop (buffer-size))
(setq entries nil)
(setq entries (buffer-substring (point-min) (- (point-max) 1)))))
(set-buffer-modified-p nil)
@@ -14247,7 +19638,8 @@ MATCH is being ignored."
(lambda (x)
(setq x (org-format-agenda-item "" x "Diary" nil 'time))
;; Extend the text properties to the beginning of the line
- (org-add-props x (text-properties-at (1- (length x)) x)))
+ (org-add-props x (text-properties-at (1- (length x)) x)
+ 'type "diary" 'date date))
entries)))))
(defun org-agenda-cleanup-fancy-diary ()
@@ -14289,8 +19681,10 @@ date. It also removes lines that contain only whitespace."
(org-add-props string nil
'mouse-face 'highlight
'keymap org-agenda-keymap
- 'help-echo (format "mouse-2 or RET jump to diary file %s"
- (abbreviate-file-name buffer-file-name))
+ 'help-echo (if buffer-file-name
+ (format "mouse-2 or RET jump to diary file %s"
+ (abbreviate-file-name buffer-file-name))
+ "")
'org-agenda-diary-link t
'org-marker (org-agenda-new-marker (point-at-bol))))
@@ -14316,6 +19710,8 @@ items should be listed. The following arguments are allowed:
date range matching the selected date. Deadlines will
also be listed, on the expiration day.
+ :sexp List entries resulting from diary-like sexps.
+
:deadline List any deadlines past due, or due within
`org-deadline-warning-days'. The listing occurs only
in the diary for *today*, not at any other date. If
@@ -14340,10 +19736,10 @@ all files listed in `org-agenda-files' will be checked automatically:
&%%(org-diary)
If you don't give any arguments (as in the example above), the default
-arguments (:deadline :scheduled :timestamp) are used. So the example above may
-also be written as
+arguments (:deadline :scheduled :timestamp :sexp) are used.
+So the example above may also be written as
- &%%(org-diary :deadline :timestamp :scheduled)
+ &%%(org-diary :deadline :timestamp :sexp :scheduled)
The function expects the lisp variables `entry' and `date' to be provided
by the caller, because this is how the calendar works. Don't use this
@@ -14351,11 +19747,12 @@ function from a program - use `org-agenda-get-day-entries' instead."
(org-agenda-maybe-reset-markers)
(org-compile-prefix-format 'agenda)
(org-set-sorting-strategy 'agenda)
- (setq args (or args '(:deadline :scheduled :timestamp)))
+ (setq args (or args '(:deadline :scheduled :timestamp :sexp)))
(let* ((files (if (and entry (stringp entry) (string-match "\\S-" entry))
(list entry)
(org-agenda-files t)))
file rtn results)
+ (org-prepare-agenda-buffers files)
;; If this is called during org-agenda, don't return any entries to
;; the calendar. Org Agenda will list these entries itself.
(if org-disable-agenda-to-diary (setq files nil))
@@ -14373,7 +19770,7 @@ FILE is the path to a file to be checked for entries. DATE is date like
the one returned by `calendar-current-date'. ARGS are symbols indicating
which kind of entries should be extracted. For details about these, see
the documentation of `org-diary'."
- (setq args (or args '(:deadline :scheduled :timestamp)))
+ (setq args (or args '(:deadline :scheduled :timestamp :sexp)))
(let* ((org-startup-folded nil)
(org-startup-align-all-tables nil)
(buffer (if (file-exists-p file)
@@ -14386,7 +19783,6 @@ the documentation of `org-diary'."
(with-current-buffer buffer
(unless (org-mode-p)
(error "Agenda file %s is not in `org-mode'" file))
- (setq org-category-table (org-get-category-table))
(let ((case-fold-search nil))
(save-excursion
(save-restriction
@@ -14406,23 +19802,40 @@ the documentation of `org-diary'."
(setq results (append results rtn))
(setq rtn (org-agenda-get-timestamps))
(setq results (append results rtn)))
+ ((eq arg :sexp)
+ (setq rtn (org-agenda-get-sexps))
+ (setq results (append results rtn)))
((eq arg :scheduled)
(setq rtn (org-agenda-get-scheduled))
(setq results (append results rtn)))
((eq arg :closed)
(setq rtn (org-agenda-get-closed))
(setq results (append results rtn)))
- ((and (eq arg :deadline)
- (equal date (calendar-current-date)))
+ ((eq arg :deadline)
(setq rtn (org-agenda-get-deadlines))
(setq results (append results rtn))))))))
results))))
+;; FIXME: this works only if the cursor is *not* at the
+;; beginning of the entry
+;(defun org-entry-is-done-p ()
+; "Is the current entry marked DONE?"
+; (save-excursion
+; (and (re-search-backward "[\r\n]\\*+ " nil t)
+; (looking-at org-nl-done-regexp))))
+
+(defun org-entry-is-todo-p ()
+ (member (org-get-todo-state) org-not-done-keywords))
+
(defun org-entry-is-done-p ()
- "Is the current entry marked DONE?"
+ (member (org-get-todo-state) org-done-keywords))
+
+(defun org-get-todo-state ()
(save-excursion
- (and (re-search-backward "[\r\n]\\*" nil t)
- (looking-at org-nl-done-regexp))))
+ (org-back-to-heading t)
+ (and (looking-at org-todo-line-regexp)
+ (match-end 2)
+ (match-string 2))))
(defun org-at-date-range-p (&optional inactive-ok)
"Is the cursor inside a date range?"
@@ -14447,15 +19860,20 @@ the documentation of `org-diary'."
(let* ((props (list 'face nil
'done-face 'org-done
'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'mouse-face 'highlight
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
(abbreviate-file-name buffer-file-name))))
- (regexp (concat "[\n\r]\\*+ *\\("
+ ;; FIXME: get rid of the \n at some point but watch out
+ (regexp (concat "^\\*+[ \t]+\\("
(if org-select-this-todo-keyword
- (concat "\\<\\(" org-select-this-todo-keyword
- "\\)\\>")
+ (if (equal org-select-this-todo-keyword "*")
+ org-todo-regexp
+ (concat "\\<\\("
+ (mapconcat 'identity (org-split-string org-select-this-todo-keyword "|") "\\|")
+ "\\)\\>"))
org-not-done-regexp)
"[^\n\r]*\\)"))
marker priority category tags
@@ -14466,31 +19884,28 @@ the documentation of `org-diary'."
(save-match-data
(beginning-of-line)
(setq beg (point) end (progn (outline-next-heading) (point)))
- (when (or (and org-agenda-todo-ignore-scheduled (goto-char beg)
+ (when (or (and org-agenda-todo-ignore-with-date (goto-char beg)
+ (re-search-forward org-ts-regexp end t))
+ (and org-agenda-todo-ignore-scheduled (goto-char beg)
(re-search-forward org-scheduled-time-regexp end t))
(and org-agenda-todo-ignore-deadlines (goto-char beg)
(re-search-forward org-deadline-time-regexp end t)
(org-deadline-close (match-string 1))))
- (goto-char beg)
+ (goto-char (1+ beg))
(or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible))
(throw :skip nil)))
(goto-char beg)
(org-agenda-skip)
(goto-char (match-beginning 1))
- (setq marker (org-agenda-new-marker (1+ (match-beginning 0)))
+ (setq marker (org-agenda-new-marker (match-beginning 0))
category (org-get-category)
tags (org-get-tags-at (point))
txt (org-format-agenda-item "" (match-string 1) category tags)
- priority
- (+ (org-get-priority txt)
- (if org-todo-kwd-priority-p
- (- org-todo-kwd-max-priority -2
- (length
- (member (match-string 2) org-todo-keywords)))
- 1)))
+ priority (1+ (org-get-priority txt)))
(org-add-props txt props
'org-marker marker 'org-hd-marker marker
- 'priority priority 'org-category category)
+ 'priority priority 'org-category category
+ 'type "todo")
(push txt ee)
(if org-agenda-todo-list-sublevels
(goto-char (match-end 1))
@@ -14504,76 +19919,126 @@ the documentation of `org-diary'."
"Return the date stamp information for agenda display."
(let* ((props (list 'face nil
'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'mouse-face 'highlight
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
(abbreviate-file-name buffer-file-name))))
- (regexp (regexp-quote
- (substring
- (format-time-string
- (car org-time-stamp-formats)
- (apply 'encode-time ; DATE bound by calendar
- (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
- 0 11)))
+ (d1 (calendar-absolute-from-gregorian date))
+ (remove-re
+ (concat
+ (regexp-quote
+ (format-time-string
+ "<%Y-%m-%d"
+ (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date))))
+ ".*?>"))
+ (regexp
+ (concat
+ (regexp-quote
+ (substring
+ (format-time-string
+ (car org-time-stamp-formats)
+ (apply 'encode-time ; DATE bound by calendar
+ (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
+ 0 11))
+ "\\|\\(<[0-9]+-[0-9]+-[0-9]+[^>\n]+?\\+[0-9]+[dwmy]>\\)"
+ "\\|\\(<%%\\(([^>\n]+)\\)>\\)"))
marker hdmarker deadlinep scheduledp donep tmp priority category
- ee txt timestr tags)
+ ee txt timestr tags b0 b3 e3)
(goto-char (point-min))
(while (re-search-forward regexp nil t)
+ (setq b0 (match-beginning 0)
+ b3 (match-beginning 3) e3 (match-end 3))
(catch :skip
- (and (save-match-data (org-at-date-range-p)) (throw :skip nil))
+ (and (org-at-date-range-p) (throw :skip nil))
(org-agenda-skip)
- (setq marker (org-agenda-new-marker (match-beginning 0))
- category (org-get-category (match-beginning 0))
+ (if (and (match-end 1)
+ (not (= d1 (org-time-string-to-absolute (match-string 1) d1))))
+ (throw :skip nil))
+ (if (and e3
+ (not (org-diary-sexp-entry (buffer-substring b3 e3) "" date)))
+ (throw :skip nil))
+ (setq marker (org-agenda-new-marker b0)
+ category (org-get-category b0)
tmp (buffer-substring (max (point-min)
- (- (match-beginning 0)
- org-ds-keyword-length))
- (match-beginning 0))
- timestr (buffer-substring (match-beginning 0) (point-at-eol))
+ (- b0 org-ds-keyword-length))
+ b0)
+ timestr (if b3 "" (buffer-substring b0 (point-at-eol)))
deadlinep (string-match org-deadline-regexp tmp)
scheduledp (string-match org-scheduled-regexp tmp)
donep (org-entry-is-done-p))
- (and org-agenda-skip-scheduled-if-done
- scheduledp donep
- (throw :skip t))
+ (if (or scheduledp deadlinep) (throw :skip t))
(if (string-match ">" timestr)
;; substring should only run to end of time stamp
(setq timestr (substring timestr 0 (match-end 0))))
(save-excursion
- (if (re-search-backward "\\(^\\|\r\\)\\*+" nil t)
+ (if (re-search-backward "^\\*+ " nil t)
(progn
- (goto-char (match-end 1))
+ (goto-char (match-beginning 0))
(setq hdmarker (org-agenda-new-marker)
tags (org-get-tags-at))
- (looking-at "\\*+[ \t]*\\([^\r\n]+\\)")
+ (looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
(setq txt (org-format-agenda-item
- (format "%s%s"
- (if deadlinep "Deadline: " "")
- (if scheduledp "Scheduled: " ""))
- (match-string 1) category tags timestr)))
+ nil (match-string 1) category tags timestr nil
+ remove-re)))
(setq txt org-agenda-no-heading-message))
(setq priority (org-get-priority txt))
(org-add-props txt props
'org-marker marker 'org-hd-marker hdmarker)
- (if deadlinep
- (org-add-props txt nil
- 'face (if donep 'org-done 'org-warning)
- 'undone-face 'org-warning 'done-face 'org-done
- 'org-category category 'priority (+ 100 priority))
- (if scheduledp
- (org-add-props txt nil
- 'face 'org-scheduled-today
- 'undone-face 'org-scheduled-today 'done-face 'org-done
- 'org-category category 'priority (+ 99 priority))
- (org-add-props txt nil 'priority priority 'org-category category)))
+ (org-add-props txt nil 'priority priority
+ 'org-category category 'date date
+ 'type "timestamp")
(push txt ee))
(outline-next-heading)))
(nreverse ee)))
+(defun org-agenda-get-sexps ()
+ "Return the sexp information for agenda display."
+ (require 'diary-lib)
+ (let* ((props (list 'face nil
+ 'mouse-face 'highlight
+ 'keymap org-agenda-keymap
+ 'help-echo
+ (format "mouse-2 or RET jump to org file %s"
+ (abbreviate-file-name buffer-file-name))))
+ (regexp "^&?%%(")
+ marker category ee txt tags entry result beg b sexp sexp-entry)
+ (goto-char (point-min))
+ (while (re-search-forward regexp nil t)
+ (catch :skip
+ (org-agenda-skip)
+ (setq beg (match-beginning 0))
+ (goto-char (1- (match-end 0)))
+ (setq b (point))
+ (forward-sexp 1)
+ (setq sexp (buffer-substring b (point)))
+ (setq sexp-entry (if (looking-at "[ \t]*\\(\\S-.*\\)")
+ (org-trim (match-string 1))
+ ""))
+ (setq result (org-diary-sexp-entry sexp sexp-entry date))
+ (when result
+ (setq marker (org-agenda-new-marker beg)
+ category (org-get-category beg))
+
+ (if (string-match "\\S-" result)
+ (setq txt result)
+ (setq txt "SEXP entry returned empty string"))
+
+ (setq txt (org-format-agenda-item
+ "" txt category tags 'time))
+ (org-add-props txt props 'org-marker marker)
+ (org-add-props txt nil
+ 'org-category category 'date date
+ 'type "sexp")
+ (push txt ee))))
+ (nreverse ee)))
+
(defun org-agenda-get-closed ()
"Return the logged TODO entries for agenda display."
(let* ((props (list 'mouse-face 'highlight
'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
@@ -14603,12 +20068,12 @@ the documentation of `org-diary'."
;; substring should only run to end of time stamp
(setq timestr (substring timestr 0 (match-end 0))))
(save-excursion
- (if (re-search-backward "\\(^\\|\r\\)\\*+" nil t)
+ (if (re-search-backward "^\\*+ " nil t)
(progn
- (goto-char (match-end 1))
+ (goto-char (match-beginning 0))
(setq hdmarker (org-agenda-new-marker)
tags (org-get-tags-at))
- (looking-at "\\*+[ \t]*\\([^\r\n]+\\)")
+ (looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
(setq txt (org-format-agenda-item
(if closedp "Closed: " "Clocked: ")
(match-string 1) category tags timestr)))
@@ -14617,6 +20082,7 @@ the documentation of `org-diary'."
(org-add-props txt props
'org-marker marker 'org-hd-marker hdmarker 'face 'org-done
'priority priority 'org-category category
+ 'type "closed" 'date date
'undone-face 'org-warning 'done-face 'org-done)
(push txt ee))
(outline-next-heading)))
@@ -14624,9 +20090,9 @@ the documentation of `org-diary'."
(defun org-agenda-get-deadlines ()
"Return the deadline information for agenda display."
- (let* ((wdays org-deadline-warning-days)
- (props (list 'mouse-face 'highlight
+ (let* ((props (list 'mouse-face 'highlight
'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'keymap org-agenda-keymap
'help-echo
(format "mouse-2 or RET jump to org file %s"
@@ -14634,54 +20100,79 @@ the documentation of `org-diary'."
(regexp org-deadline-time-regexp)
(todayp (equal date (calendar-current-date))) ; DATE bound by calendar
(d1 (calendar-absolute-from-gregorian date)) ; DATE bound by calendar
- d2 diff pos pos1 category tags
- ee txt head face)
+ d2 diff dfrac wdays pos pos1 category tags
+ ee txt head face s upcomingp donep timestr)
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(catch :skip
(org-agenda-skip)
- (setq pos (1- (match-beginning 1))
- d2 (time-to-days
- (org-time-string-to-time (match-string 1)))
- diff (- d2 d1))
+ (setq s (match-string 1)
+ pos (1- (match-beginning 1))
+ d2 (org-time-string-to-absolute (match-string 1) d1)
+ diff (- d2 d1)
+ wdays (org-get-wdays s)
+ dfrac (/ (* 1.0 (- wdays diff)) wdays)
+ upcomingp (and todayp (> diff 0)))
;; When to show a deadline in the calendar:
;; If the expiration is within wdays warning time.
;; Past-due deadlines are only shown on the current date
- (if (and (< diff wdays) todayp (not (= diff 0)))
+ (if (or (and (<= diff wdays)
+ (and todayp (not org-agenda-only-exact-dates)))
+ (= diff 0))
(save-excursion
(setq category (org-get-category))
- (if (re-search-backward "\\(^\\|\r\\)\\*+[ \t]*" nil t)
+ (if (re-search-backward "^\\*+[ \t]+" nil t)
(progn
(goto-char (match-end 0))
- (setq pos1 (match-end 1))
+ (setq pos1 (match-beginning 0))
(setq tags (org-get-tags-at pos1))
(setq head (buffer-substring-no-properties
(point)
(progn (skip-chars-forward "^\r\n")
(point))))
- (if (string-match org-looking-at-done-regexp head)
+ (setq donep (string-match org-looking-at-done-regexp head))
+ (if (string-match " \\([012]?[0-9]:[0-9][0-9]\\)" s)
+ (setq timestr
+ (concat (substring s (match-beginning 1)) " "))
+ (setq timestr 'time))
+ (if (and donep
+ (or org-agenda-skip-deadline-if-done
+ (not (= diff 0))))
(setq txt nil)
(setq txt (org-format-agenda-item
- (format "In %3d d.: " diff) head category tags))))
+ (if (= diff 0)
+ (car org-agenda-deadline-leaders)
+ (format (nth 1 org-agenda-deadline-leaders)
+ diff))
+ head category tags timestr))))
(setq txt org-agenda-no-heading-message))
(when txt
- (setq face (cond ((<= diff 0) 'org-warning)
- ((<= diff 5) 'org-upcoming-deadline)
- (t nil)))
+ (setq face (org-agenda-deadline-face dfrac))
(org-add-props txt props
'org-marker (org-agenda-new-marker pos)
'org-hd-marker (org-agenda-new-marker pos1)
- 'priority (+ (- 10 diff) (org-get-priority txt))
+ 'priority (+ (if upcomingp (floor (* dfrac 10.)) 100)
+ (org-get-priority txt))
'org-category category
- 'face face 'undone-face face 'done-face 'org-done)
+ 'type (if upcomingp "upcoming-deadline" "deadline")
+ 'date (if upcomingp date d2)
+ 'face (if donep 'org-done face)
+ 'undone-face face 'done-face 'org-done)
(push txt ee))))))
- ee))
+ (nreverse ee)))
+
+(defun org-agenda-deadline-face (fraction)
+ "Return the face to displaying a deadline item.
+FRACTION is what fraction of the head-warning time has passed."
+ (let ((faces org-agenda-deadline-faces) f)
+ (catch 'exit
+ (while (setq f (pop faces))
+ (if (>= fraction (car f)) (throw 'exit (cdr f)))))))
(defun org-agenda-get-scheduled ()
"Return the scheduled information for agenda display."
- (let* ((props (list 'face 'org-scheduled-previously
- 'org-not-done-regexp org-not-done-regexp
- 'undone-face 'org-scheduled-previously
+ (let* ((props (list 'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'done-face 'org-done
'mouse-face 'highlight
'keymap org-agenda-keymap
@@ -14692,47 +20183,68 @@ the documentation of `org-diary'."
(todayp (equal date (calendar-current-date))) ; DATE bound by calendar
(d1 (calendar-absolute-from-gregorian date)) ; DATE bound by calendar
d2 diff pos pos1 category tags
- ee txt head)
+ ee txt head pastschedp donep face timestr s)
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(catch :skip
(org-agenda-skip)
- (setq pos (1- (match-beginning 1))
- d2 (time-to-days
- (org-time-string-to-time (match-string 1)))
+ (setq s (match-string 1)
+ pos (1- (match-beginning 1))
+ d2 (org-time-string-to-absolute (match-string 1) d1)
diff (- d2 d1))
+ (setq pastschedp (and todayp (< diff 0)))
;; When to show a scheduled item in the calendar:
;; If it is on or past the date.
- (if (and (< diff 0) todayp)
+ (if (or (and (< diff 0)
+ (and todayp (not org-agenda-only-exact-dates)))
+ (= diff 0))
(save-excursion
(setq category (org-get-category))
- (if (re-search-backward "\\(^\\|\r\\)\\*+[ \t]*" nil t)
+ (if (re-search-backward "^\\*+[ \t]+" nil t)
(progn
(goto-char (match-end 0))
- (setq pos1 (match-end 1))
+ (setq pos1 (match-beginning 0))
(setq tags (org-get-tags-at))
(setq head (buffer-substring-no-properties
(point)
(progn (skip-chars-forward "^\r\n") (point))))
- (if (string-match org-looking-at-done-regexp head)
+ (setq donep (string-match org-looking-at-done-regexp head))
+ (if (string-match " \\([012]?[0-9]:[0-9][0-9]\\)" s)
+ (setq timestr
+ (concat (substring s (match-beginning 1)) " "))
+ (setq timestr 'time))
+ (if (and donep
+ (or org-agenda-skip-scheduled-if-done
+ (not (= diff 0))))
(setq txt nil)
(setq txt (org-format-agenda-item
- (format "Sched.%2dx: " (- 1 diff)) head
- category tags))))
+ (if (= diff 0)
+ (car org-agenda-scheduled-leaders)
+ (format (nth 1 org-agenda-scheduled-leaders)
+ (- 1 diff)))
+ head category tags timestr))))
(setq txt org-agenda-no-heading-message))
(when txt
+ (setq face (if pastschedp
+ 'org-scheduled-previously
+ 'org-scheduled-today))
(org-add-props txt props
+ 'undone-face face
+ 'face (if donep 'org-done face)
'org-marker (org-agenda-new-marker pos)
'org-hd-marker (org-agenda-new-marker pos1)
- 'priority (+ (- 5 diff) (org-get-priority txt))
+ 'type (if pastschedp "past-scheduled" "scheduled")
+ 'date (if pastschedp d2 date)
+ 'priority (+ 94 (- 5 diff) (org-get-priority txt))
'org-category category)
(push txt ee))))))
- ee))
+ (nreverse ee)))
(defun org-agenda-get-blocks ()
"Return the date-range information for agenda display."
(let* ((props (list 'face nil
'org-not-done-regexp org-not-done-regexp
+ 'org-todo-regexp org-todo-regexp
'mouse-face 'highlight
'keymap org-agenda-keymap
'help-echo
@@ -14757,12 +20269,12 @@ the documentation of `org-diary'."
(save-excursion
(setq marker (org-agenda-new-marker (point)))
(setq category (org-get-category))
- (if (re-search-backward "\\(^\\|\r\\)\\*+" nil t)
+ (if (re-search-backward "^\\*+ " nil t)
(progn
- (setq hdmarker (org-agenda-new-marker (match-end 1)))
- (goto-char (match-end 1))
+ (goto-char (match-beginning 0))
+ (setq hdmarker (org-agenda-new-marker (point)))
(setq tags (org-get-tags-at))
- (looking-at "\\*+[ \t]*\\([^\r\n]+\\)")
+ (looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
(setq txt (org-format-agenda-item
(format (if (= d1 d2) "" "(%d/%d): ")
(1+ (- d0 d1)) (1+ (- d2 d1)))
@@ -14771,6 +20283,7 @@ the documentation of `org-diary'."
(setq txt org-agenda-no-heading-message))
(org-add-props txt props
'org-marker marker 'org-hd-marker hdmarker
+ 'type "block" 'date date
'priority (org-get-priority txt) 'org-category category)
(push txt ee)))
(goto-char pos)))
@@ -14779,7 +20292,6 @@ the documentation of `org-diary'."
;;; Agenda presentation and sorting
-;; FIXME: should I allow spaces around the dash?
(defconst org-plain-time-of-day-regexp
(concat
"\\(\\<[012]?[0-9]"
@@ -14795,10 +20307,22 @@ groups carry important information:
1 the first time, range or not
8 the second time, if it is a range.")
+(defconst org-plain-time-extension-regexp
+ (concat
+ "\\(\\<[012]?[0-9]"
+ "\\(\\(:\\([0-5][0-9]\\([AaPp][Mm]\\)?\\)\\)\\|\\([AaPp][Mm]\\)\\)\\>\\)"
+ "\\+\\([0-9]+\\)\\(:\\([0-5][0-9]\\)\\)?")
+ "Regular expression to match a time range like 13:30+2:10 = 13:30-15:40.
+Examples: 11:45 or 8am-13:15 or 2:45-2:45pm. After a match, the following
+groups carry important information:
+0 the full match
+7 hours of duration
+9 minutes of duration")
+
(defconst org-stamp-time-of-day-regexp
(concat
"<\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} +\\sw+ +\\)"
- "\\([012][0-9]:[0-5][0-9]\\)>"
+ "\\([012][0-9]:[0-5][0-9]\\(-\\([012][0-9]:[0-5][0-9]\\)\\)?[^\n\r>]*?\\)>"
"\\(--?"
"<\\1\\([012][0-9]:[0-5][0-9]\\)>\\)?")
"Regular expression to match a timestamp time or time range.
@@ -14816,7 +20340,7 @@ The flag is set if the currently compiled format contains a `%t'.")
The flag is set if the currently compiled format contains a `%T'.")
(defun org-format-agenda-item (extra txt &optional category tags dotime
- noprefix)
+ noprefix remove-re)
"Format TXT to be inserted into the agenda buffer.
In particular, it adds the prefix and corresponding text properties. EXTRA
must be a string and replaces the `%s' specifier in the prefix format.
@@ -14827,7 +20351,8 @@ time-of-day should be extracted from TXT for sorting of this entry, and for
the `%t' specifier in the format. When DOTIME is a string, this string is
searched for a time before TXT is. NOPREFIX is a flag and indicates that
only the correctly processes TXT should be returned - this is used by
-`org-agenda-change-all-lines'. TAGS can be the tags of the headline."
+`org-agenda-change-all-lines'. TAGS can be the tags of the headline.
+Any match of REMOVE-RE will be removed from TXT."
(save-match-data
;; Diary entries sometimes have extra whitespace at the beginning
(if (string-match "^ +" txt) (setq txt (replace-match "" nil nil txt)))
@@ -14841,20 +20366,22 @@ only the correctly processes TXT should be returned - this is used by
time ; time and tag are needed for the eval of the prefix format
(ts (if dotime (concat (if (stringp dotime) dotime "") txt)))
(time-of-day (and dotime (org-get-time-of-day ts)))
- stamp plain s0 s1 s2 rtn)
+ stamp plain s0 s1 s2 rtn srp)
(when (and dotime time-of-day org-prefix-has-time)
;; Extract starting and ending time and move them to prefix
(when (or (setq stamp (string-match org-stamp-time-of-day-regexp ts))
(setq plain (string-match org-plain-time-of-day-regexp ts)))
(setq s0 (match-string 0 ts)
+ srp (and stamp (match-end 3))
s1 (match-string (if plain 1 2) ts)
- s2 (match-string (if plain 8 4) ts))
+ s2 (match-string (if plain 8 (if srp 4 6)) ts))
;; If the times are in TXT (not in DOTIMES), and the prefix will list
;; them, we might want to remove them there to avoid duplication.
;; The user can turn this off with a variable.
(if (and org-agenda-remove-times-when-in-prefix (or stamp plain)
(string-match (concat (regexp-quote s0) " *") txt)
+ (not (equal ?\] (string-to-char (substring txt (match-end 0)))))
(if (eq org-agenda-remove-times-when-in-prefix 'beg)
(= (match-beginning 0) 0)
t))
@@ -14863,10 +20390,20 @@ only the correctly processes TXT should be returned - this is used by
(if s1 (setq s1 (org-get-time-of-day s1 'string t)))
(if s2 (setq s2 (org-get-time-of-day s2 'string t))))
- (when (string-match "\\([ \t]+\\)\\(:[a-zA-Z_@0-9:]+:\\)[ \t]*$" txt)
+ (when (and s1 (not s2) org-agenda-default-appointment-duration
+ (string-match "\\([0-9]+\\):\\([0-9]+\\)" s1))
+ (let ((m (+ (string-to-number (match-string 2 s1))
+ (* 60 (string-to-number (match-string 1 s1)))
+ org-agenda-default-appointment-duration))
+ h)
+ (setq h (/ m 60) m (- m (* h 60)))
+ (setq s2 (format "%02d:%02d" h m))))
+
+ (when (string-match (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$")
+ txt)
;; Tags are in the string
- (if (or (eq org-agenda-remove-tags-when-in-prefix t)
- (and org-agenda-remove-tags-when-in-prefix
+ (if (or (eq org-agenda-remove-tags t)
+ (and org-agenda-remove-tags
org-prefix-has-tag))
(setq txt (replace-match "" t t txt))
(setq txt (replace-match
@@ -14874,6 +20411,10 @@ only the correctly processes TXT should be returned - this is used by
(match-string 2 txt))
t t txt))))
+ (when remove-re
+ (while (string-match remove-re txt)
+ (setq txt (replace-match "" t t txt))))
+
;; Create the final string
(if noprefix
(setq rtn txt)
@@ -14889,11 +20430,16 @@ only the correctly processes TXT should be returned - this is used by
;; And finally add the text properties
(org-add-props rtn nil
'org-category (downcase category) 'tags tags
+ 'org-highest-priority org-highest-priority
+ 'org-lowest-priority org-lowest-priority
'prefix-length (- (length rtn) (length txt))
'time-of-day time-of-day
+ 'txt txt
+ 'time time
+ 'extra extra
'dotime dotime))))
-(defvar org-agenda-sorting-strategy)
+(defvar org-agenda-sorting-strategy) ;; FIXME: can be removed?
(defvar org-agenda-sorting-strategy-selected nil)
(defun org-agenda-add-time-grid-maybe (list ndays todayp)
@@ -14979,11 +20525,8 @@ The optional STRING argument forces conversion into a 5 character wide string
HH:MM."
(save-match-data
(when
- (or
- (string-match
- "\\<\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)\\([AaPp][Mm]\\)?\\> *" s)
- (string-match
- "\\<\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)?\\([AaPp][Mm]\\)\\> *" s))
+ (or (string-match "\\<\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)\\([AaPp][Mm]\\)?\\> *" s)
+ (string-match "\\<\\([012]?[0-9]\\)\\(:\\([0-5][0-9]\\)\\)?\\([AaPp][Mm]\\)\\> *" s))
(let* ((h (string-to-number (match-string 1 s)))
(m (if (match-end 3) (string-to-number (match-string 3 s)) 0))
(ampm (if (match-end 4) (downcase (match-string 4 s))))
@@ -15012,16 +20555,18 @@ HH:MM."
(if (eq x 'line)
(save-excursion
(beginning-of-line 1)
- (setq re (get-text-property (point) 'org-not-done-regexp))
+ (setq re (get-text-property (point) 'org-todo-regexp))
(goto-char (+ (point) (or (get-text-property (point) 'prefix-length) 0)))
(and (looking-at (concat "[ \t]*\\.*" re))
(add-text-properties (match-beginning 0) (match-end 0)
- '(face org-todo))))
- (setq re (concat (get-text-property 0 'org-not-done-regexp x))
+ (list 'face (org-get-todo-face 0)))))
+ (setq re (concat (get-text-property 0 'org-todo-regexp x))
pl (get-text-property 0 'prefix-length x))
(and re (equal (string-match (concat "\\(\\.*\\)" re) x (or pl 0)) pl)
- (add-text-properties (or (match-end 1) (match-end 0)) (match-end 0)
- '(face org-todo) x))
+ (add-text-properties
+ (or (match-end 1) (match-end 0)) (match-end 0)
+ (list 'face (org-get-todo-face (match-string 2 x)))
+ x))
x)))
(defsubst org-cmp-priority (a b)
@@ -15034,8 +20579,8 @@ HH:MM."
(defsubst org-cmp-category (a b)
"Compare the string values of categories of strings A and B."
- (let ((ca (or (get-text-property 1 'category a) ""))
- (cb (or (get-text-property 1 'category b) "")))
+ (let ((ca (or (get-text-property 1 'org-category a) ""))
+ (cb (or (get-text-property 1 'org-category b) "")))
(cond ((string-lessp ca cb) -1)
((string-lessp cb ca) +1)
(t nil))))
@@ -15093,7 +20638,8 @@ If ERROR is non-nil, throw an error, otherwise just return nil."
(let ((buf (current-buffer)))
(if (not (one-window-p)) (delete-window))
(kill-buffer buf)
- (org-agenda-maybe-reset-markers 'force))
+ (org-agenda-maybe-reset-markers 'force)
+ (org-columns-remove-overlays))
;; Maybe restore the pre-agenda window configuration.
(and org-agenda-restore-windows-after-quit
(not (eq org-agenda-window-setup 'other-frame))
@@ -15122,15 +20668,21 @@ When this is the global TODO list, a prefix argument will be interpreted."
(interactive)
(let* ((org-agenda-keep-modes t)
(line (org-current-line))
- (window-line (- line (org-current-line (window-start)))))
+ (window-line (- line (org-current-line (window-start))))
+ (lprops (get 'org-agenda-redo-command 'org-lprops)))
(message "Rebuilding agenda buffer...")
- (eval org-agenda-redo-command)
+ (org-let lprops '(eval org-agenda-redo-command))
(setq org-agenda-undo-list nil
org-agenda-pending-undo-list nil)
(message "Rebuilding agenda buffer...done")
(goto-line line)
(recenter window-line)))
+(defun org-agenda-goto-date (date)
+ "Jump to DATE in agenda."
+ (interactive (list (org-read-date)))
+ (org-agenda-list nil date))
+
(defun org-agenda-goto-today ()
"Go to today."
(interactive)
@@ -15139,77 +20691,129 @@ When this is the global TODO list, a prefix argument will be interpreted."
(cond
(tdpos (goto-char tdpos))
((eq org-agenda-type 'agenda)
- (let ((org-agenda-overriding-arguments org-agenda-last-arguments))
- (setf (nth 1 org-agenda-overriding-arguments) nil)
+ (let* ((sd (time-to-days (current-time)))
+ (comp (org-agenda-compute-time-span sd org-agenda-span))
+ (org-agenda-overriding-arguments org-agenda-last-arguments))
+ (setf (nth 1 org-agenda-overriding-arguments) (car comp))
+ (setf (nth 2 org-agenda-overriding-arguments) (cdr comp))
(org-agenda-redo)
- (org-agenda-find-today-or-agenda)))
+ (org-agenda-find-same-or-today-or-agenda)))
(t (error "Cannot find today")))))
-(defun org-agenda-find-today-or-agenda ()
+(defun org-agenda-find-same-or-today-or-agenda (&optional cnt)
(goto-char
- (or (text-property-any (point-min) (point-max) 'org-today t)
+ (or (and cnt (text-property-any (point-min) (point-max) 'org-day-cnt cnt))
+ (text-property-any (point-min) (point-max) 'org-today t)
(text-property-any (point-min) (point-max) 'org-agenda-type 'agenda)
(point-min))))
(defun org-agenda-later (arg)
- "Go forward in time by `org-agenda-ndays' days.
-With prefix ARG, go forward that many times `org-agenda-ndays'."
+ "Go forward in time by thee current span.
+With prefix ARG, go forward that many times the current span."
(interactive "p")
(org-agenda-check-type t 'agenda)
- (let ((org-agenda-overriding-arguments
- (list (car org-agenda-last-arguments)
- (+ org-starting-day (* arg org-agenda-ndays))
- nil t)))
- (org-agenda-redo)
- (org-agenda-find-today-or-agenda)))
+ (let* ((span org-agenda-span)
+ (sd org-starting-day)
+ (greg (calendar-gregorian-from-absolute sd))
+ (cnt (get-text-property (point) 'org-day-cnt))
+ greg2 nd)
+ (cond
+ ((eq span 'day)
+ (setq sd (+ arg sd) nd 1))
+ ((eq span 'week)
+ (setq sd (+ (* 7 arg) sd) nd 7))
+ ((eq span 'month)
+ (setq greg2 (list (+ (car greg) arg) (nth 1 greg) (nth 2 greg))
+ sd (calendar-absolute-from-gregorian greg2))
+ (setcar greg2 (1+ (car greg2)))
+ (setq nd (- (calendar-absolute-from-gregorian greg2) sd)))
+ ((eq span 'year)
+ (setq greg2 (list (car greg) (nth 1 greg) (+ arg (nth 2 greg)))
+ sd (calendar-absolute-from-gregorian greg2))
+ (setcar (nthcdr 2 greg2) (1+ (nth 2 greg2)))
+ (setq nd (- (calendar-absolute-from-gregorian greg2) sd))))
+ (let ((org-agenda-overriding-arguments
+ (list (car org-agenda-last-arguments) sd nd t)))
+ (org-agenda-redo)
+ (org-agenda-find-same-or-today-or-agenda cnt))))
(defun org-agenda-earlier (arg)
- "Go back in time by `org-agenda-ndays' days.
-With prefix ARG, go back that many times `org-agenda-ndays'."
+ "Go backward in time by the current span.
+With prefix ARG, go backward that many times the current span."
(interactive "p")
- (org-agenda-check-type t 'agenda)
- (let ((org-agenda-overriding-arguments
- (list (car org-agenda-last-arguments)
- (- org-starting-day (* arg org-agenda-ndays))
- nil t)))
- (org-agenda-redo)
- (org-agenda-find-today-or-agenda)))
+ (org-agenda-later (- arg)))
+(defun org-agenda-day-view ()
+ "Switch to daily view for agenda."
+ (interactive)
+ (setq org-agenda-ndays 1)
+ (org-agenda-change-time-span 'day))
(defun org-agenda-week-view ()
- "Switch to weekly view for agenda."
+ "Switch to daily view for agenda."
(interactive)
- (org-agenda-check-type t 'agenda)
- (if (= org-agenda-ndays 7)
- (error "This is already the week view"))
(setq org-agenda-ndays 7)
- (let ((org-agenda-overriding-arguments
- (list (car org-agenda-last-arguments)
- (or (get-text-property (point) 'day)
- org-starting-day)
- nil t)))
- (org-agenda-redo)
- (org-agenda-find-today-or-agenda))
- (org-agenda-set-mode-name)
- (message "Switched to week view"))
-
-(defun org-agenda-day-view ()
+ (org-agenda-change-time-span 'week))
+(defun org-agenda-month-view ()
"Switch to daily view for agenda."
(interactive)
+ (org-agenda-change-time-span 'month))
+(defun org-agenda-year-view ()
+ "Switch to daily view for agenda."
+ (interactive)
+ (if (y-or-n-p "Are you sure you want to compute the agenda for an entire year? ")
+ (org-agenda-change-time-span 'year)
+ (error "Abort")))
+
+(defun org-agenda-change-time-span (span)
+ "Change the agenda view to SPAN.
+SPAN may be `day', `week', `month', `year'."
(org-agenda-check-type t 'agenda)
- (if (= org-agenda-ndays 1)
- (error "This is already the day view"))
- (setq org-agenda-ndays 1)
- (let ((org-agenda-overriding-arguments
- (list (car org-agenda-last-arguments)
- (or (get-text-property (point) 'day)
- org-starting-day)
- nil t)))
+ (if (equal org-agenda-span span)
+ (error "Viewing span is already \"%s\"" span))
+ (let* ((sd (or (get-text-property (point) 'day)
+ org-starting-day))
+ (computed (org-agenda-compute-time-span sd span))
+ (org-agenda-overriding-arguments
+ (list (car org-agenda-last-arguments)
+ (car computed) (cdr computed) t)))
(org-agenda-redo)
- (org-agenda-find-today-or-agenda))
+ (org-agenda-find-same-or-today-or-agenda))
(org-agenda-set-mode-name)
- (message "Switched to day view"))
-
-;; FIXME: this no longer works if user make date format that starts with a blank
+ (message "Switched to %s view" span))
+
+(defun org-agenda-compute-time-span (sd span)
+ "Compute starting date and number of days for agenda.
+SPAN may be `day', `week', `month', `year'. The return value
+is a cons cell with the starting date and the number of days,
+so that the date SD will be in that range."
+ (let* ((greg (calendar-gregorian-from-absolute sd))
+ nd)
+ (cond
+ ((eq span 'day)
+ (setq nd 1))
+ ((eq span 'week)
+ (let* ((nt (calendar-day-of-week
+ (calendar-gregorian-from-absolute sd)))
+ (d (if org-agenda-start-on-weekday
+ (- nt org-agenda-start-on-weekday)
+ 0)))
+ (setq sd (- sd (+ (if (< d 0) 7 0) d)))
+ (setq nd 7)))
+ ((eq span 'month)
+ (setq sd (calendar-absolute-from-gregorian
+ (list (car greg) 1 (nth 2 greg)))
+ nd (- (calendar-absolute-from-gregorian
+ (list (1+ (car greg)) 1 (nth 2 greg)))
+ sd)))
+ ((eq span 'year)
+ (setq sd (calendar-absolute-from-gregorian
+ (list 1 1 (nth 2 greg)))
+ nd (- (calendar-absolute-from-gregorian
+ (list 1 1 (1+ (nth 2 greg))))
+ sd))))
+ (cons sd nd)))
+
+;; FIXME: does not work if user makes date format that starts with a blank
(defun org-agenda-next-date-line (&optional arg)
"Jump to the next line indicating a date in agenda buffer."
(interactive "p")
@@ -15243,10 +20847,10 @@ With prefix ARG, go back that many times `org-agenda-ndays'."
"Detach overlay INDEX."
(funcall (if (featurep 'xemacs) 'detach-extent 'delete-overlay) org-hl))
+;; FIXME this is currently not used.
(defun org-highlight-until-next-command (beg end &optional buffer)
(org-highlight beg end buffer)
(add-hook 'pre-command-hook 'org-unhighlight-once))
-
(defun org-unhighlight-once ()
(remove-hook 'pre-command-hook 'org-unhighlight-once)
(org-unhighlight))
@@ -15340,8 +20944,13 @@ and by additional input from the age of a schedules or deadline entry."
(save-excursion
(and (outline-next-heading)
(org-flag-heading nil)))) ; show the next heading
+ (run-hooks 'org-agenda-after-show-hook)
(and highlight (org-highlight (point-at-bol) (point-at-eol)))))
+(defvar org-agenda-after-show-hook nil
+ "Normal hook run after an item has been shown from the agenda.
+Point is in the buffer where the item originated.")
+
(defun org-agenda-kill ()
"Kill the entry or subtree belonging to the current agenda entry."
(interactive)
@@ -15350,14 +20959,15 @@ and by additional input from the age of a schedules or deadline entry."
(org-agenda-error)))
(buffer (marker-buffer marker))
(pos (marker-position marker))
+ (type (get-text-property (point) 'type))
dbeg dend (n 0) conf)
(org-with-remote-undo buffer
(with-current-buffer buffer
(save-excursion
(goto-char pos)
- (if (org-mode-p)
+ (if (and (org-mode-p) (not (member type '("sexp"))))
(setq dbeg (progn (org-back-to-heading t) (point))
- dend (org-end-of-subtree t))
+ dend (org-end-of-subtree t t))
(setq dbeg (point-at-bol)
dend (min (point-max) (1+ (point-at-eol)))))
(goto-char dbeg)
@@ -15413,20 +21023,25 @@ If this information is not given, the function uses the tree at point."
(setq p (marker-position m))
(>= p beg)
(<= p end))
- (let (buffer-read-only)
+ (let ((inhibit-read-only t))
(delete-region (point-at-bol) (1+ (point-at-eol)))))
(beginning-of-line 0))))))
(defun org-agenda-open-link ()
"Follow the link in the current line, if any."
(interactive)
- (let ((eol (point-at-eol)))
- (save-excursion
- (if (or (re-search-forward org-bracket-link-regexp eol t)
- (re-search-forward org-angle-link-re eol t)
- (re-search-forward org-plain-link-re eol t))
- (call-interactively 'org-open-at-point)
- (error "No link in current line")))))
+ (org-agenda-copy-local-variable 'org-link-abbrev-alist-local)
+ (save-excursion
+ (save-restriction
+ (narrow-to-region (point-at-bol) (point-at-eol))
+ (org-open-at-point))))
+
+(defun org-agenda-copy-local-variable (var)
+ "Get a variable from a referenced buffer and install it here."
+ (let ((m (get-text-property (point) 'org-marker)))
+ (when (and m (buffer-live-p (marker-buffer m)))
+ (org-set-local var (with-current-buffer (marker-buffer m)
+ (symbol-value var))))))
(defun org-agenda-switch-to (&optional delete-other-windows)
"Go to the Org-mode file which contains the item at point."
@@ -15502,6 +21117,16 @@ dedicated frame)."
"Marker pointing to the headline that last changed its TODO state
by a remote command from the agenda.")
+(defun org-agenda-todo-nextset ()
+ "Switch TODO entry to next sequence."
+ (interactive)
+ (org-agenda-todo 'nextset))
+
+(defun org-agenda-todo-previousset ()
+ "Switch TODO entry to previous sequence."
+ (interactive)
+ (org-agenda-todo 'previousset))
+
(defun org-agenda-todo (&optional arg)
"Cycle TODO state of line at point, also in Org-mode file.
This changes the line at point, all other lines in the agenda referring to
@@ -15514,7 +21139,7 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(buffer (marker-buffer marker))
(pos (marker-position marker))
(hdmarker (get-text-property (point) 'org-hd-marker))
- (buffer-read-only nil)
+ (inhibit-read-only t)
newhead)
(org-with-remote-undo buffer
(with-current-buffer buffer
@@ -15542,7 +21167,7 @@ The new content of the line will be NEWHEAD (as modified by
`equal' against all `org-hd-marker' text properties in the file.
If FIXFACE is non-nil, the face of each item is modified acording to
the new TODO state."
- (let* ((buffer-read-only nil)
+ (let* ((inhibit-read-only t)
props m pl undone-face done-face finish new dotime cat tags)
(save-excursion
(goto-char (point-max))
@@ -15580,20 +21205,25 @@ the new TODO state."
(beginning-of-line 0)))
(org-finalize-agenda)))
-;; FIXME: allow negative value for org-agenda-align-tags-to-column
-;; See the code in set-tags for the way to do this.
(defun org-agenda-align-tags (&optional line)
- "Align all tags in agenda items to `org-agenda-align-tags-to-column'."
- (let ((buffer-read-only))
+ "Align all tags in agenda items to `org-agenda-tags-column'."
+ (let ((inhibit-read-only t) l c)
(save-excursion
(goto-char (if line (point-at-bol) (point-min)))
- (while (re-search-forward "\\([ \t]+\\):[a-zA-Z0-9_@:]+:[ \t]*$"
+ (while (re-search-forward (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$")
(if line (point-at-eol) nil) t)
+ (add-text-properties
+ (match-beginning 2) (match-end 2)
+ (list 'face (list 'org-tag (get-text-property
+ (match-beginning 2) 'face))))
+ (setq l (- (match-end 2) (match-beginning 2))
+ c (if (< org-agenda-tags-column 0)
+ (- (abs org-agenda-tags-column) l)
+ org-agenda-tags-column))
(delete-region (match-beginning 1) (match-end 1))
(goto-char (match-beginning 1))
(insert (org-add-props
- (make-string (max 1 (- org-agenda-align-tags-to-column
- (current-column))) ?\ )
+ (make-string (max 1 (- c (current-column))) ?\ )
(text-properties-at (point))))))))
(defun org-agenda-priority-up ()
@@ -15614,10 +21244,10 @@ the same tree node, and the headline of the tree node in the Org-mode file."
(org-agenda-check-no-diary)
(let* ((marker (or (get-text-property (point) 'org-marker)
(org-agenda-error)))
- (buffer (marker-buffer marker))
- (pos (marker-position marker))
(hdmarker (get-text-property (point) 'org-hd-marker))
- (buffer-read-only nil)
+ (buffer (marker-buffer hdmarker))
+ (pos (marker-position hdmarker))
+ (inhibit-read-only t)
newhead)
(org-with-remote-undo buffer
(with-current-buffer buffer
@@ -15639,7 +21269,7 @@ POS defaults to point. If tags are inherited, the list contains
the targets in the same sequence as the headlines appear, i.e.
the tags of the current headline come last."
(interactive)
- (let (tags)
+ (let (tags lastpos)
(save-excursion
(save-restriction
(widen)
@@ -15647,8 +21277,9 @@ the tags of the current headline come last."
(save-match-data
(org-back-to-heading t)
(condition-case nil
- (while t
- (if (looking-at "[^\r\n]+?:\\([a-zA-Z_@0-9:]+\\):[ \t]*\\([\n\r]\\|\\'\\)")
+ (while (not (equal lastpos (point)))
+ (setq lastpos (point))
+ (if (looking-at (org-re "[^\r\n]+?:\\([[:alnum:]_@:]+\\):[ \t]*$"))
(setq tags (append (org-split-string
(org-match-string-no-properties 1) ":")
tags)))
@@ -15662,26 +21293,30 @@ the tags of the current headline come last."
"Set tags for the current headline."
(interactive)
(org-agenda-check-no-diary)
- (org-agenda-show) ;;; FIXME This is a stupid hack and should not be needed
- (let* ((hdmarker (or (get-text-property (point) 'org-hd-marker)
- (org-agenda-error)))
- (buffer (marker-buffer hdmarker))
- (pos (marker-position hdmarker))
- (buffer-read-only nil)
- newhead)
- (org-with-remote-undo buffer
- (with-current-buffer buffer
- (widen)
- (goto-char pos)
- (org-show-context 'agenda)
- (save-excursion
- (and (outline-next-heading)
- (org-flag-heading nil))) ; show the next heading
- (call-interactively 'org-set-tags)
- (end-of-line 1)
- (setq newhead (org-get-heading)))
- (org-agenda-change-all-lines newhead hdmarker)
- (beginning-of-line 1))))
+ (if (and (org-region-active-p) (interactive-p))
+ (call-interactively 'org-change-tag-in-region)
+ (org-agenda-show) ;;; FIXME This is a stupid hack and should not be needed
+ (let* ((hdmarker (or (get-text-property (point) 'org-hd-marker)
+ (org-agenda-error)))
+ (buffer (marker-buffer hdmarker))
+ (pos (marker-position hdmarker))
+ (inhibit-read-only t)
+ newhead)
+ (org-with-remote-undo buffer
+ (with-current-buffer buffer
+ (widen)
+ (goto-char pos)
+ (save-excursion
+ (org-show-context 'agenda))
+ (save-excursion
+ (and (outline-next-heading)
+ (org-flag-heading nil))) ; show the next heading
+ (goto-char pos)
+ (call-interactively 'org-set-tags)
+ (end-of-line 1)
+ (setq newhead (org-get-heading)))
+ (org-agenda-change-all-lines newhead hdmarker)
+ (beginning-of-line 1)))))
(defun org-agenda-toggle-archive-tag ()
"Toggle the archive tag for the current entry."
@@ -15692,7 +21327,7 @@ the tags of the current headline come last."
(org-agenda-error)))
(buffer (marker-buffer hdmarker))
(pos (marker-position hdmarker))
- (buffer-read-only nil)
+ (inhibit-read-only t)
newhead)
(org-with-remote-undo buffer
(with-current-buffer buffer
@@ -15732,11 +21367,11 @@ the tags of the current headline come last."
(interactive "p")
(org-agenda-date-later (- arg) what))
-(defun org-agenda-show-new-time (marker stamp)
+(defun org-agenda-show-new-time (marker stamp &optional prefix)
"Show new date stamp via text properties."
;; We use text properties to make this undoable
- (let ((buffer-read-only nil))
- (setq stamp (concat " => " stamp))
+ (let ((inhibit-read-only t))
+ (setq stamp (concat " " prefix " => " stamp))
(save-excursion
(goto-char (point-max))
(while (not (bobp))
@@ -15792,8 +21427,9 @@ be used to request time specification in the time stamp."
(with-current-buffer buffer
(widen)
(goto-char pos)
- (setq ts (org-schedule))
- (message "Item scheduled for %s" ts)))))
+ (setq ts (org-schedule arg)))
+ (org-agenda-show-new-time marker ts "S"))
+ (message "Item scheduled for %s" ts)))
(defun org-agenda-deadline (arg)
"Schedule the item at point."
@@ -15810,14 +21446,19 @@ be used to request time specification in the time stamp."
(with-current-buffer buffer
(widen)
(goto-char pos)
- (setq ts (org-deadline))
- (message "Deadline for this item set to %s" ts)))))
+ (setq ts (org-deadline arg)))
+ (org-agenda-show-new-time marker ts "S"))
+ (message "Deadline for this item set to %s" ts)))
-(defun org-get-heading ()
+(defun org-get-heading (&optional no-tags)
"Return the heading of the current entry, without the stars."
(save-excursion
(org-back-to-heading t)
- (if (looking-at "\\*+[ \t]+\\([^\r\n]*\\)") (match-string 1) "")))
+ (if (looking-at
+ (if no-tags
+ (org-re "\\*+[ \t]+\\([^\n\r]*?\\)\\([ \t]+:[[:alnum:]:_@]+:[ \t]*\\)?$")
+ "\\*+[ \t]+\\([^\r\n]*\\)"))
+ (match-string 1) "")))
(defun org-agenda-clock-in (&optional arg)
"Start the clock on the currently selected item."
@@ -15976,6 +21617,7 @@ This is a command that has to be installed in `calendar-mode-map'."
"Hebrew: " (calendar-hebrew-date-string date) " (until sunset)\n"
"Islamic: " (calendar-islamic-date-string date) " (until sunset)\n"
"French: " (calendar-french-date-string date) "\n"
+ "Baha'i: " (calendar-bahai-date-string date) " (until sunset)\n"
"Mayan: " (calendar-mayan-date-string date) "\n"
"Coptic: " (calendar-coptic-date-string date) "\n"
"Ethiopic: " (calendar-ethiopic-date-string date) "\n"
@@ -15992,11 +21634,11 @@ This is a command that has to be installed in `calendar-mode-map'."
(defvar org-cdlatex-mode-map (make-sparse-keymap)
"Keymap for the minor `org-cdlatex-mode'.")
-(define-key org-cdlatex-mode-map "_" 'org-cdlatex-underscore-caret)
-(define-key org-cdlatex-mode-map "^" 'org-cdlatex-underscore-caret)
-(define-key org-cdlatex-mode-map "`" 'cdlatex-math-symbol)
-(define-key org-cdlatex-mode-map "'" 'org-cdlatex-math-modify)
-(define-key org-cdlatex-mode-map "\C-c{" 'cdlatex-environment)
+(org-defkey org-cdlatex-mode-map "_" 'org-cdlatex-underscore-caret)
+(org-defkey org-cdlatex-mode-map "^" 'org-cdlatex-underscore-caret)
+(org-defkey org-cdlatex-mode-map "`" 'cdlatex-math-symbol)
+(org-defkey org-cdlatex-mode-map "'" 'org-cdlatex-math-modify)
+(org-defkey org-cdlatex-mode-map "\C-c{" 'cdlatex-environment)
(defvar org-cdlatex-texmathp-advice-is-done nil
"Flag remembering if we have applied the advice to texmathp already.")
@@ -16064,7 +21706,7 @@ looks only before point, not after."
(while (string-match re str start)
(cond
((= (match-end 0) (length str))
- (throw 'exit (cons "$" (+ lim (match-beginning 0)))))
+ (throw 'exit (cons "$" (+ lim (match-beginning 0) 1))))
((= (match-end 0) (- (length str) 5))
(throw 'exit nil))
(t (setq start (match-end 0))))))
@@ -16156,11 +21798,12 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
"Creating images for entry...%s"))))
(message msg "")
(narrow-to-region beg end)
+ (goto-char beg)
(org-format-latex
(concat "ltxpng/" (file-name-sans-extension
(file-name-nondirectory
buffer-file-name)))
- default-directory 'overlays msg at)
+ default-directory 'overlays msg at 'forbuffer)
(message msg "done. Use `C-c C-c' to remove images.")))))
(defvar org-latex-regexps
@@ -16173,7 +21816,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
("$$" "\\$\\$[^\000]*?\\$\\$" 0 t))
"Regular expressions for matching embedded LaTeX.")
-(defun org-format-latex (prefix &optional dir overlays msg at)
+(defun org-format-latex (prefix &optional dir overlays msg at forbuffer)
"Replace LaTeX fragments with links to an image, and produce images."
(if (and overlays (fboundp 'clear-image-cache)) (clear-image-cache))
(let* ((prefixnodir (file-name-nondirectory prefix))
@@ -16210,7 +21853,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(setq checkdir t)
(or (file-directory-p todir) (make-directory todir)))
(org-create-formula-image
- txt movefile opt)
+ txt movefile opt forbuffer)
(if overlays
(progn
(setq ov (org-make-overlay beg end))
@@ -16229,31 +21872,27 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(insert link))))))))
;; This function borrows from Ganesh Swami's latex2png.el
-(defun org-create-formula-image (string tofile options)
+(defun org-create-formula-image (string tofile options buffer)
(let* ((tmpdir (if (featurep 'xemacs)
(temp-directory)
temporary-file-directory))
(texfilebase (make-temp-name
(expand-file-name "orgtex" tmpdir)))
-
-;(texfilebase (make-temp-file "orgtex"))
-; (dummy (delete-file texfilebase))
(texfile (concat texfilebase ".tex"))
(dvifile (concat texfilebase ".dvi"))
(pngfile (concat texfilebase ".png"))
- (scale (number-to-string (* 1000 (or (plist-get options :scale) 1.0))))
- (fg (or (plist-get options :foreground) "Black"))
- (bg (or (plist-get options :background) "Transparent")))
+ (fnh (face-attribute 'default :height nil))
+ (scale (or (plist-get options (if buffer :scale :html-scale)) 1.0))
+ (dpi (number-to-string (* scale (floor (* 0.9 (if buffer fnh 140.))))))
+ (fg (or (plist-get options (if buffer :foreground :html-foreground))
+ "Black"))
+ (bg (or (plist-get options (if buffer :background :html-background))
+ "Transparent")))
+ (if (eq fg 'default) (setq fg (org-dvipng-color :foreground)))
+ (if (eq bg 'default) (setq bg (org-dvipng-color :background)))
(with-temp-file texfile
- (insert "\\documentclass{article}
-\\usepackage{fullpage}
-\\usepackage{amssymb}
-\\usepackage[usenames]{color}
-\\usepackage{amsmath}
-\\usepackage{latexsym}
-\\usepackage[mathscr]{eucal}
-\\pagestyle{empty}
-\\begin{document}\n" string "\n\\end{document}\n"))
+ (insert org-format-latex-header
+ "\n\\begin{document}\n" string "\n\\end{document}\n"))
(let ((dir default-directory))
(condition-case nil
(progn
@@ -16265,7 +21904,9 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(progn (message "Failed to create dvi file from %s" texfile) nil)
(call-process "dvipng" nil nil nil
"-E" "-fg" fg "-bg" bg
- "-x" scale "-y" scale "-T" "tight"
+ "-D" dpi
+ ;;"-x" scale "-y" scale
+ "-T" "tight"
"-o" pngfile
dvifile)
(if (not (file-exists-p pngfile))
@@ -16276,6 +21917,16 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(delete-file (concat texfilebase e)))
pngfile))))
+(defun org-dvipng-color (attr)
+ "Return an rgb color specification for dvipng."
+ (apply 'format "rgb %s %s %s"
+ (mapcar 'org-normalize-color
+ (color-values (face-attribute 'default attr nil)))))
+
+(defun org-normalize-color (value)
+ "Return string to be used as color value for an RGB component."
+ (format "%g" (/ value 65535.0)))
+
;;;; Exporting
;;; Variables, constants, and parameter plists
@@ -16300,18 +21951,27 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(:headline-levels . org-export-headline-levels)
(:section-numbers . org-export-with-section-numbers)
(:table-of-contents . org-export-with-toc)
+ (:preserve-breaks . org-export-preserve-breaks)
(:archived-trees . org-export-with-archived-trees)
(:emphasize . org-export-with-emphasize)
(:sub-superscript . org-export-with-sub-superscripts)
+ (:footnotes . org-export-with-footnotes)
+ (:drawers . org-export-with-drawers)
+ (:tags . org-export-with-tags)
(:TeX-macros . org-export-with-TeX-macros)
(:LaTeX-fragments . org-export-with-LaTeX-fragments)
+ (:skip-before-1st-heading . org-export-skip-text-before-1st-heading)
(:fixed-width . org-export-with-fixed-width)
(:timestamps . org-export-with-timestamps)
+ (:author-info . org-export-author-info)
+ (:time-stamp-file . org-export-time-stamp-file)
(:tables . org-export-with-tables)
(:table-auto-headline . org-export-highlight-first-table-line)
(:style . org-export-html-style)
+ (:agenda-style . org-agenda-export-html-style) ;; FIXME: Does this work????
(:convert-org-links . org-export-html-link-org-files-as-html)
(:inline-images . org-export-html-inline-images)
+ (:html-extension . org-export-html-extension)
(:expand-quoted-html . org-export-html-expand)
(:timestamp . org-export-html-with-timestamp)
(:publishing-directory . org-export-publishing-directory)
@@ -16334,7 +21994,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(save-excursion
(goto-char 0)
(let ((re (org-make-options-regexp
- '("TITLE" "AUTHOR" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE")))
+ '("TITLE" "AUTHOR" "DATE" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE")))
p key val text options)
(while (re-search-forward re nil t)
(setq key (org-match-string-no-properties 1)
@@ -16343,6 +22003,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
((string-equal key "TITLE") (setq p (plist-put p :title val)))
((string-equal key "AUTHOR")(setq p (plist-put p :author val)))
((string-equal key "EMAIL") (setq p (plist-put p :email val)))
+ ((string-equal key "DATE") (setq p (plist-put p :date val)))
((string-equal key "LANGUAGE") (setq p (plist-put p :language val)))
((string-equal key "TEXT")
(setq text (if text (concat text "\n" val) val)))
@@ -16357,9 +22018,15 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(":" . :fixed-width)
("|" . :tables)
("^" . :sub-superscript)
+ ("f" . :footnotes)
+ ("d" . :drawers)
+ ("tags" . :tags)
("*" . :emphasize)
("TeX" . :TeX-macros)
- ("LaTeX" . :LaTeX-fragments)))
+ ("LaTeX" . :LaTeX-fragments)
+ ("skip" . :skip-before-1st-heading)
+ ("author" . :author-info)
+ ("timestamp" . :time-stamp-file)))
o)
(while (setq o (pop op))
(if (string-match (concat (regexp-quote (car o))
@@ -16377,19 +22044,11 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
val)))
dir))
-(defun org-export-find-first-heading-line (list)
- "Remove all lines from LIST which are before the first headline."
- (let ((orig-list list)
- (re (concat "^" outline-regexp)))
- (while (and list
- (not (string-match re (car list))))
- (pop list))
- (or list orig-list)))
-
(defun org-skip-comments (lines)
"Skip lines starting with \"#\" and subtrees starting with COMMENT."
(let ((re1 (concat "^\\(\\*+\\)[ \t]+" org-comment-string))
(re2 "^\\(\\*+\\)[ \t\n\r]")
+ (case-fold-search nil)
rtn line level)
(while (setq line (pop lines))
(cond
@@ -16419,10 +22078,16 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
\[v] limit export to visible part of outline tree
\[a] export as ASCII
+
\[h] export as HTML
+\[H] export as HTML to temporary buffer
+\[R] export region as HTML
\[b] export as HTML and browse immediately
\[x] export as XOXO
+\[l] export as LaTeX
+\[L] export as LaTeX to temporary buffer
+
\[i] export current file as iCalendar file
\[I] export all agenda files as iCalendar files
\[c] export agenda files into combined iCalendar file
@@ -16437,7 +22102,11 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
(?a . org-export-as-ascii)
(?h . org-export-as-html)
(?b . org-export-as-html-and-open)
+ (?H . org-export-as-html-to-buffer)
+ (?R . org-export-region-as-html)
(?x . org-export-as-xoxo)
+ (?l . org-export-as-latex)
+ (?L . org-export-as-latex-to-buffer)
(?i . org-export-icalendar-this-file)
(?I . org-export-icalendar-all-agenda-files)
(?c . org-export-icalendar-combine-agenda-files)
@@ -16465,6 +22134,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
("curren")
("yen")
("brvbar")
+ ("vert" . "&#124;")
("sect")
("uml")
("copy")
@@ -16681,6 +22351,7 @@ The images can be removed again with \\[org-ctrl-c-ctrl-c]."
("clubs") ("clubsuit"."&clubs;")
("hearts") ("diamondsuit"."&hearts;")
("diams") ("diamondsuit"."&diams;")
+ ("smile"."&#9786;") ("blacksmile"."&#9787;") ("sad"."&#9785;")
("quot")
("amp")
("lt")
@@ -16758,7 +22429,7 @@ translations. There is currently no way for users to extend this.")
;;; General functions for all backends
(defun org-cleaned-string-for-export (string &rest parameters)
- "Cleanup a buffer substring so that links can be created safely."
+ "Cleanup a buffer STRING so that links can be created safely."
(interactive)
(let* ((re-radio (and org-target-link-regexp
(concat "\\([^<]\\)\\(" org-target-link-regexp "\\)")))
@@ -16766,46 +22437,100 @@ translations. There is currently no way for users to extend this.")
(re-angle-link (concat "\\([^[]\\)" org-angle-link-re))
(re-archive (concat ":" org-archive-tag ":"))
(re-quote (concat "^\\*+[ \t]+" org-quote-string "\\>"))
- (htmlp (memq :for-html parameters))
- (outline-regexp "\\*+")
- rtn)
- (save-excursion
- (set-buffer (get-buffer-create " org-mode-tmp"))
+ (re-commented (concat "^\\*+[ \t]+" org-comment-string "\\>"))
+ (htmlp (plist-get parameters :for-html))
+ (asciip (plist-get parameters :for-ascii))
+ (latexp (plist-get parameters :for-LaTeX))
+ (commentsp (plist-get parameters :comments))
+ (archived-trees (plist-get parameters :archived-trees))
+ (inhibit-read-only t)
+ (outline-regexp "\\*+ ")
+ a b xx
+ rtn p)
+ (with-current-buffer (get-buffer-create " org-mode-tmp")
(erase-buffer)
(insert string)
+ ;; Remove license-to-kill stuff
+ (while (setq p (text-property-any (point-min) (point-max)
+ :org-license-to-kill t))
+ (delete-region p (next-single-property-change p :org-license-to-kill)))
+
(let ((org-inhibit-startup t)) (org-mode))
(untabify (point-min) (point-max))
+ ;; Get the correct stuff before the first headline
+ (when (plist-get parameters :skip-before-1st-heading)
+ (goto-char (point-min))
+ (when (re-search-forward "^\\*+[ \t]" nil t)
+ (delete-region (point-min) (match-beginning 0))
+ (goto-char (point-min))
+ (insert "\n")))
+ (when (plist-get parameters :add-text)
+ (goto-char (point-min))
+ (insert (plist-get parameters :add-text) "\n"))
+
;; Get rid of archived trees
- (when (not (eq org-export-with-archived-trees t))
+ (when (not (eq archived-trees t))
(goto-char (point-min))
(while (re-search-forward re-archive nil t)
- (if (not (org-on-heading-p))
+ (if (not (org-on-heading-p t))
(org-end-of-subtree t)
(beginning-of-line 1)
- (delete-region
- (if org-export-with-archived-trees (1+ (point-at-eol)) (point))
- (org-end-of-subtree t)))))
+ (setq a (if archived-trees
+ (1+ (point-at-eol)) (point))
+ b (org-end-of-subtree t))
+ (if (> b a) (delete-region a b)))))
- ;; Protect stuff from HTML processing
- (goto-char (point-min))
- (while (re-search-forward "^[ \t]*:.*\\(\n[ \t]*:.*\\)*" nil t)
- (add-text-properties (match-beginning 0) (match-end 0)
- '(org-protected t)))
- (when htmlp
+ ;; Get rid of drawers
+ (unless (eq t org-export-with-drawers)
(goto-char (point-min))
- (while (re-search-forward "^#\\+HTML:[ \t]*\\(.*\\)" nil t)
- (replace-match "\\1" t)
- (add-text-properties
- (point-at-bol) (min (1+ (point-at-eol)) (point-max))
- '(org-protected t))))
+ (let ((re (concat "^[ \t]*:\\("
+ (mapconcat 'identity
+ (if (listp org-export-with-drawers)
+ org-export-with-drawers
+ org-drawers)
+ "\\|")
+ "\\):[ \t]*\n\\([^@]*?\n\\)?[ \t]*:END:[ \t]*\n")))
+ (while (re-search-forward re nil t)
+ (replace-match ""))))
+
+ ;; Find targets in comments and move them out of comments,
+ ;; but mark them as targets that should be invisible
(goto-char (point-min))
- (while (re-search-forward
- "^#\\+BEGIN_HTML\\>.*\\(\n.*\\)*?\n#\\+END_HTML\\>.*\n?" nil t)
- (if htmlp
- (add-text-properties (match-beginning 1) (1+ (match-end 1))
- '(org-protected t))
- (delete-region (match-beginning 0) (match-end 0))))
+ (while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
+ (replace-match "\\1(INVISIBLE)"))
+
+ ;; Protect backend specific stuff, throw away the others.
+ (goto-char (point-min))
+ (let ((formatters
+ `((,htmlp "HTML" "BEGIN_HTML" "END_HTML")
+ (,asciip "ASCII" "BEGIN_ASCII" "END_ASCII")
+ (,latexp "LaTeX" "BEGIN_LaTeX" "END_LaTeX")))
+ fmt)
+ (while (re-search-forward "^[ \t]*:.*\\(\n[ \t]*:.*\\)*" nil t)
+ (add-text-properties (match-beginning 0) (match-end 0)
+ '(org-protected t)))
+ (while formatters
+ (setq fmt (pop formatters))
+ (when (car fmt)
+ (goto-char (point-min))
+ (while (re-search-forward (concat "^#\\+" (cadr fmt)
+ ":[ \t]*\\(.*\\)") nil t)
+ (replace-match "\\1" t)
+ (add-text-properties
+ (point-at-bol) (min (1+ (point-at-eol)) (point-max))
+ '(org-protected t))))
+ (goto-char (point-min))
+ (while (re-search-forward
+ (concat "^#\\+"
+ (caddr fmt) "\\>.*\\(\\(\n.*\\)*?\n\\)#\\+"
+ (cadddr fmt) "\\>.*\n?") nil t)
+ (if (car fmt)
+ (add-text-properties (match-beginning 1) (1+ (match-end 1))
+ '(org-protected t))
+ (delete-region (match-beginning 0) (match-end 0))))))
+
+ ;; Protect quoted subtrees
(goto-char (point-min))
(while (re-search-forward re-quote nil t)
(goto-char (match-beginning 0))
@@ -16813,16 +22538,48 @@ translations. There is currently no way for users to extend this.")
(add-text-properties (point) (org-end-of-subtree t)
'(org-protected t)))
- ;; Find targets in comments and move them out of comments,
- ;; but mark them as targets that should be invisible
+ ;; Remove subtrees that are commented
(goto-char (point-min))
- (while (re-search-forward "^#.*?\\(<<<?[^>\r\n]+>>>?\\).*" nil t)
- (replace-match "\\1(INVISIBLE)"))
+ (while (re-search-forward re-commented nil t)
+ (goto-char (match-beginning 0))
+ (delete-region (point) (org-end-of-subtree t)))
- ;; Remove comments
+ ;; Remove special table lines
+ (when org-export-table-remove-special-lines
+ (goto-char (point-min))
+ (while (re-search-forward "^[ \t]*|" nil t)
+ (beginning-of-line 1)
+ (if (or (looking-at "[ \t]*| *[!_^] *|")
+ (and (looking-at ".*?| *<[0-9]+> *|")
+ (not (looking-at ".*?| *[^ <|]"))))
+ (delete-region (max (point-min) (1- (point-at-bol)))
+ (point-at-eol))
+ (end-of-line 1))))
+
+ ;; Specific LaTeX stuff
+ (when latexp
+ (require 'org-export-latex nil)
+ (org-export-latex-cleaned-string))
+
+ ;; Specific HTML stuff
+ (when htmlp
+ ;; Convert LaTeX fragments to images
+ (when (plist-get parameters :LaTeX-fragments)
+ (org-format-latex
+ (concat "ltxpng/" (file-name-sans-extension
+ (file-name-nondirectory
+ org-current-export-file)))
+ org-current-export-dir nil "Creating LaTeX image %s"))
+ (message "Exporting..."))
+
+ ;; Remove or replace comments
(goto-char (point-min))
- (while (re-search-forward "^#.*\n?" nil t)
- (replace-match ""))
+ (while (re-search-forward "^#\\(.*\n?\\)" nil t)
+ (if commentsp
+ (progn (add-text-properties
+ (match-beginning 0) (match-end 0) '(org-protected t))
+ (replace-match (format commentsp (match-string 1)) t t))
+ (replace-match "")))
;; Find matches for radio targets and turn them into internal links
(goto-char (point-min))
@@ -16838,56 +22595,85 @@ translations. There is currently no way for users to extend this.")
(replace-match "\\1 \\3")
(goto-char (match-beginning 0))))
- ;; Convert LaTeX fragments to images
- (when (memq :LaTeX-fragments parameters)
- (org-format-latex
- (concat "ltxpng/" (file-name-sans-extension
- (file-name-nondirectory
- org-current-export-file)))
- org-current-export-dir nil "Creating LaTeX image %s"))
- (message "Exporting...")
;; Normalize links: Convert angle and plain links into bracket links
;; Expand link abbreviations
(goto-char (point-min))
(while (re-search-forward re-plain-link nil t)
+ (goto-char (1- (match-end 0)))
(org-if-unprotected
- (replace-match
- (concat
- (match-string 1) "[[" (match-string 2) ":" (match-string 3) "]]")
- t t)))
+ (let* ((s (concat (match-string 1) "[[" (match-string 2)
+ ":" (match-string 3) "]]")))
+ ;; added 'org-link face to links
+ (put-text-property 0 (length s) 'face 'org-link s)
+ (replace-match s t t))))
(goto-char (point-min))
(while (re-search-forward re-angle-link nil t)
+ (goto-char (1- (match-end 0)))
(org-if-unprotected
- (replace-match
- (concat
- (match-string 1) "[[" (match-string 2) ":" (match-string 3) "]]")
- t t)))
+ (let* ((s (concat (match-string 1) "[[" (match-string 2)
+ ":" (match-string 3) "]]")))
+ (put-text-property 0 (length s) 'face 'org-link s)
+ (replace-match s t t))))
(goto-char (point-min))
(while (re-search-forward org-bracket-link-regexp nil t)
(org-if-unprotected
- (replace-match
- (concat "[[" (save-match-data
- (org-link-expand-abbrev (match-string 1)))
- "]"
- (if (match-end 3)
- (match-string 2)
- (concat "[" (match-string 1) "]"))
- "]")
- t t)))
+ (let* ((s (concat "[[" (setq xx (save-match-data
+ (org-link-expand-abbrev (match-string 1))))
+ "]"
+ (if (match-end 3)
+ (match-string 2)
+ (concat "[" xx "]"))
+ "]")))
+ (put-text-property 0 (length s) 'face 'org-link s)
+ (replace-match s t t))))
;; Find multiline emphasis and put them into single line
- (when (memq :emph-multiline parameters)
+ (when (plist-get parameters :emph-multiline)
(goto-char (point-min))
(while (re-search-forward org-emph-re nil t)
- (org-if-unprotected
- (subst-char-in-region (match-beginning 0) (match-end 0) ?\n ?\ t)
- (goto-char (1- (match-end 0))))))
+ (if (not (= (char-after (match-beginning 3))
+ (char-after (match-beginning 4))))
+ (org-if-unprotected
+ (subst-char-in-region (match-beginning 0) (match-end 0)
+ ?\n ?\ t)
+ (goto-char (1- (match-end 0))))
+ (goto-char (1+ (match-beginning 0))))))
(setq rtn (buffer-string)))
(kill-buffer " org-mode-tmp")
rtn))
+(defun org-export-grab-title-from-buffer ()
+ "Get a title for the current document, from looking at the buffer."
+ (let ((inhibit-read-only t))
+ (save-excursion
+ (goto-char (point-min))
+ (let ((end (save-excursion (outline-next-heading) (point))))
+ (when (re-search-forward "^[ \t]*[^|# \t\r\n].*\n" end t)
+ ;; Mark the line so that it will not be exported as normal text.
+ (org-unmodified
+ (add-text-properties (match-beginning 0) (match-end 0)
+ (list :org-license-to-kill t)))
+ ;; Return the title string
+ (org-trim (match-string 0)))))))
+
+(defun org-export-get-title-from-subtree ()
+ "Return subtree title and exclude it from export."
+ (let (title (m (mark)))
+ (save-excursion
+ (goto-char (region-beginning))
+ (when (and (org-at-heading-p)
+ (>= (org-end-of-subtree t t) (region-end)))
+ ;; This is a subtree, we take the title from the first heading
+ (goto-char (region-beginning))
+ (looking-at org-todo-line-regexp)
+ (setq title (match-string 3))
+ (org-unmodified
+ (add-text-properties (point) (1+ (point-at-eol))
+ (list :org-license-to-kill t)))))
+ title))
+
(defun org-solidify-link-text (s &optional alist)
"Take link text and make a safe target out of it."
(save-match-data
@@ -16898,6 +22684,15 @@ translations. There is currently no way for users to extend this.")
(a (assoc rtn alist)))
(or (cdr a) rtn))))
+(defun org-get-min-level (lines)
+ "Get the minimum level in LINES."
+ (let ((re "^\\(\\*+\\) ") l min)
+ (catch 'exit
+ (while (setq l (pop lines))
+ (if (string-match re l)
+ (throw 'exit (org-tr-level (length (match-string 1 l))))))
+ 1)))
+
;; Variable holding the vector with section numbers
(defvar org-section-numbers (make-vector org-level-max 0))
@@ -16947,6 +22742,7 @@ When LEVEL is non-nil, increase section numbers on that level."
;;; ASCII export
(defvar org-last-level nil) ; dynamically scoped variable
+(defvar org-min-level nil) ; dynamically scoped variable
(defvar org-levels-open nil) ; dynamically scoped parameter
(defvar org-ascii-current-indentation nil) ; For communication
@@ -16959,16 +22755,14 @@ underlined headlines. The default is 3."
(setq-default org-todo-line-regexp org-todo-line-regexp)
(let* ((opt-plist (org-combine-plists (org-default-export-plist)
(org-infile-export-plist)))
- (region
- (buffer-substring
- (if (org-region-active-p) (region-beginning) (point-min))
- (if (org-region-active-p) (region-end) (point-max))))
+ (region-p (org-region-active-p))
+ (subtree-p
+ (when region-p
+ (save-excursion
+ (goto-char (region-beginning))
+ (and (org-at-heading-p)
+ (>= (org-end-of-subtree t t) (region-end))))))
(custom-times org-display-custom-times)
- (lines (org-export-find-first-heading-line
- (org-skip-comments
- (org-split-string
- (org-cleaned-string-for-export region)
- "[\r\n]"))))
(org-ascii-current-indentation '(0 . 0))
(level 0) line txt
(umax nil)
@@ -16977,26 +22771,57 @@ underlined headlines. The default is 3."
(filename (concat (file-name-as-directory
(org-export-directory :ascii opt-plist))
(file-name-sans-extension
- (file-name-nondirectory buffer-file-name))
+ (or (and subtree-p
+ (org-entry-get (region-beginning)
+ "EXPORT_FILE_NAME" t))
+ (file-name-nondirectory buffer-file-name)))
".txt"))
+ (filename (if (equal (file-truename filename)
+ (file-truename buffer-file-name))
+ (concat filename ".txt")
+ filename))
(buffer (find-file-noselect filename))
(org-levels-open (make-vector org-level-max nil))
(odd org-odd-levels-only)
- (date (format-time-string "%Y/%m/%d" (current-time)))
- (time (format-time-string "%X" (org-current-time)))
+ (date (plist-get opt-plist :date))
(author (plist-get opt-plist :author))
- (title (or (plist-get opt-plist :title)
+ (title (or (and subtree-p (org-export-get-title-from-subtree))
+ (plist-get opt-plist :title)
+ (and (not
+ (plist-get opt-plist :skip-before-1st-heading))
+ (org-export-grab-title-from-buffer))
(file-name-sans-extension
(file-name-nondirectory buffer-file-name))))
(email (plist-get opt-plist :email))
(language (plist-get opt-plist :language))
(quote-re0 (concat "^[ \t]*" org-quote-string "\\>"))
; (quote-re (concat "^\\(\\*+\\)\\([ \t]*" org-quote-string "\\>\\)"))
- (text nil)
(todo nil)
- (lang-words nil))
-
- (setq org-last-level 1)
+ (lang-words nil)
+ (region
+ (buffer-substring
+ (if (org-region-active-p) (region-beginning) (point-min))
+ (if (org-region-active-p) (region-end) (point-max))))
+ (lines (org-split-string
+ (org-cleaned-string-for-export
+ region
+ :for-ascii t
+ :skip-before-1st-heading
+ (plist-get opt-plist :skip-before-1st-heading)
+ :archived-trees
+ (plist-get opt-plist :archived-trees)
+ :add-text (plist-get opt-plist :text))
+ "\n"))
+ thetoc have-headings first-heading-pos
+ table-open table-buffer)
+
+ (let ((inhibit-read-only t))
+ (org-unmodified
+ (remove-text-properties (point-min) (point-max)
+ '(:org-license-to-kill t))))
+
+ (setq org-min-level (org-get-min-level lines))
+ (setq org-last-level org-min-level)
(org-init-section-numbers)
(find-file-noselect filename)
@@ -17008,10 +22833,10 @@ underlined headlines. The default is 3."
(fundamental-mode)
;; create local variables for all options, to make sure all called
;; functions get the correct information
- (mapcar (lambda (x)
- (set (make-local-variable (cdr x))
- (plist-get opt-plist (car x))))
- org-export-plist-vars)
+ (mapc (lambda (x)
+ (set (make-local-variable (cdr x))
+ (plist-get opt-plist (car x))))
+ org-export-plist-vars)
(org-set-local 'org-odd-levels-only odd)
(setq umax (if arg (prefix-numeric-value arg)
org-export-headline-levels))
@@ -17022,57 +22847,77 @@ underlined headlines. The default is 3."
;; File header
(if title (org-insert-centered title ?=))
(insert "\n")
- (if (or author email)
+ (if (and (or author email)
+ org-export-author-info)
(insert (concat (nth 1 lang-words) ": " (or author "")
(if email (concat " <" email ">") "")
"\n")))
- (if (and date time)
- (insert (concat (nth 2 lang-words) ": " date " " time "\n")))
- (if text (insert (concat (org-html-expand-for-ascii text) "\n\n")))
+
+ (cond
+ ((and date (string-match "%" date))
+ (setq date (format-time-string date (current-time))))
+ (date)
+ (t (setq date (format-time-string "%Y/%m/%d %X" (current-time)))))
+
+ (if (and date org-export-time-stamp-file)
+ (insert (concat (nth 2 lang-words) ": " date"\n")))
(insert "\n\n")
(if org-export-with-toc
(progn
- (insert (nth 3 lang-words) "\n"
- (make-string (length (nth 3 lang-words)) ?=) "\n")
- (mapcar '(lambda (line)
- (if (string-match org-todo-line-regexp
- line)
- ;; This is a headline
- (progn
- (setq level (- (match-end 1) (match-beginning 1))
- level (org-tr-level level)
- txt (match-string 3 line)
- todo
- (or (and org-export-mark-todo-in-toc
- (match-beginning 2)
- (not (equal (match-string 2 line)
- org-done-string)))
+ (push (concat (nth 3 lang-words) "\n") thetoc)
+ (push (concat (make-string (length (nth 3 lang-words)) ?=) "\n") thetoc)
+ (mapc '(lambda (line)
+ (if (string-match org-todo-line-regexp
+ line)
+ ;; This is a headline
+ (progn
+ (setq have-headings t)
+ (setq level (- (match-end 1) (match-beginning 1))
+ level (org-tr-level level)
+ txt (match-string 3 line)
+ todo
+ (or (and org-export-mark-todo-in-toc
+ (match-beginning 2)
+ (not (member (match-string 2 line)
+ org-done-keywords)))
; TODO, not DONE
- (and org-export-mark-todo-in-toc
- (= level umax-toc)
- (org-search-todo-below
- line lines level))))
- (setq txt (org-html-expand-for-ascii txt))
-
- (if (and (memq org-export-with-tags '(not-in-toc nil))
- (string-match "[ \t]+:[a-zA-Z0-9_@:]+:[ \t]*$" txt))
- (setq txt (replace-match "" t t txt)))
- (if (string-match quote-re0 txt)
- (setq txt (replace-match "" t t txt)))
-
- (if org-export-with-section-numbers
- (setq txt (concat (org-section-number level)
- " " txt)))
- (if (<= level umax-toc)
- (progn
- (insert
- (make-string (* (1- level) 4) ?\ )
- (format (if todo "%s (*)\n" "%s\n") txt))
- (setq org-last-level level))
- ))))
- lines)))
+ (and org-export-mark-todo-in-toc
+ (= level umax-toc)
+ (org-search-todo-below
+ line lines level))))
+ (setq txt (org-html-expand-for-ascii txt))
+
+ (while (string-match org-bracket-link-regexp txt)
+ (setq txt
+ (replace-match
+ (match-string (if (match-end 2) 3 1) txt)
+ t t txt)))
+
+ (if (and (memq org-export-with-tags '(not-in-toc nil))
+ (string-match
+ (org-re "[ \t]+:[[:alnum:]_@:]+:[ \t]*$")
+ txt))
+ (setq txt (replace-match "" t t txt)))
+ (if (string-match quote-re0 txt)
+ (setq txt (replace-match "" t t txt)))
+
+ (if org-export-with-section-numbers
+ (setq txt (concat (org-section-number level)
+ " " txt)))
+ (if (<= level umax-toc)
+ (progn
+ (push
+ (concat
+ (make-string
+ (* (max 0 (- level org-min-level)) 4) ?\ )
+ (format (if todo "%s (*)\n" "%s\n") txt))
+ thetoc)
+ (setq org-last-level level))
+ ))))
+ lines)
+ (setq thetoc (if have-headings (nreverse thetoc) nil))))
(org-init-section-numbers)
(while (setq line (pop lines))
@@ -17089,14 +22934,60 @@ underlined headlines. The default is 3."
(when custom-times
(setq line (org-translate-time line)))
(cond
- ((string-match "^\\(\\*+\\)[ \t]*\\(.*\\)" line)
+ ((string-match "^\\(\\*+\\)[ \t]+\\(.*\\)" line)
;; a Headline
+ (setq first-heading-pos (or first-heading-pos (point)))
(setq level (org-tr-level (- (match-end 1) (match-beginning 1)))
txt (match-string 2 line))
(org-ascii-level-start level txt umax lines))
+
+ ((and org-export-with-tables
+ (string-match "^\\([ \t]*\\)\\(|\\|\\+-+\\+\\)" line))
+ (if (not table-open)
+ ;; New table starts
+ (setq table-open t table-buffer nil))
+ ;; Accumulate lines
+ (setq table-buffer (cons line table-buffer))
+ (when (or (not lines)
+ (not (string-match "^\\([ \t]*\\)\\(|\\|\\+-+\\+\\)"
+ (car lines))))
+ (setq table-open nil
+ table-buffer (nreverse table-buffer))
+ (insert (mapconcat
+ (lambda (x)
+ (org-fix-indentation x org-ascii-current-indentation))
+ (org-format-table-ascii table-buffer)
+ "\n") "\n")))
(t
- (insert (org-fix-indentation line org-ascii-current-indentation) "\n"))))
+ (setq line (org-fix-indentation line org-ascii-current-indentation))
+ (if (and org-export-with-fixed-width
+ (string-match "^\\([ \t]*\\)\\(:\\)" line))
+ (setq line (replace-match "\\1" nil nil line)))
+ (insert line "\n"))))
+
(normal-mode)
+
+ ;; insert the table of contents
+ (when thetoc
+ (goto-char (point-min))
+ (if (re-search-forward "^[ \t]*\\[TABLE-OF-CONTENTS\\][ \t]*$" nil t)
+ (progn
+ (goto-char (match-beginning 0))
+ (replace-match ""))
+ (goto-char first-heading-pos))
+ (mapc 'insert thetoc)
+ (or (looking-at "[ \t]*\n[ \t]*\n")
+ (insert "\n\n")))
+
+ ;; Convert whitespace place holders
+ (goto-char (point-min))
+ (let (beg end)
+ (while (setq beg (next-single-property-change (point) 'org-whitespace))
+ (setq end (next-single-property-change beg 'org-whitespace))
+ (goto-char beg)
+ (delete-region beg end)
+ (insert (make-string (- end beg) ?\ ))))
+
(save-buffer)
;; remove display and invisible chars
(let (beg end)
@@ -17124,8 +23015,8 @@ underlined headlines. The default is 3."
(progn
(setq lv (- (match-end 1) (match-beginning 1))
todo (and (match-beginning 2)
- (not (equal (match-string 2 line)
- org-done-string))))
+ (not (member (match-string 2 line)
+ org-done-keywords))))
; TODO, not DONE
(if (<= lv level) (throw 'exit nil))
(if todo (throw 'exit t))))))))
@@ -17159,7 +23050,7 @@ underlined headlines. The default is 3."
;; find the indentation of the next non-empty line
(catch 'stop
(while lines
- (if (string-match "^\\*" (car lines)) (throw 'stop nil))
+ (if (string-match "^\\* " (car lines)) (throw 'stop nil))
(if (string-match "^\\([ \t]*\\)\\S-" (car lines))
(throw 'stop (setq ind (org-get-indentation (car lines)))))
(pop lines)))
@@ -17169,7 +23060,7 @@ underlined headlines. The default is 3."
(insert "\n"))
(setq char (nth (- umax level) (reverse org-export-ascii-underline)))
(unless org-export-with-tags
- (if (string-match "[ \t]+\\(:[a-zA-Z0-9_@:]+:\\)[ \t]*$" title)
+ (if (string-match (org-re "[ \t]+\\(:[[:alnum:]_@:]+:\\)[ \t]*$") title)
(setq title (replace-match "" t t title))))
(if org-export-with-section-numbers
(setq title (concat (org-section-number level) " " title)))
@@ -17187,7 +23078,7 @@ continue to use it. The prefix arg ARG is passed through to the exporting
command."
(interactive
(list (progn
- (message "Export visible: [a]SCII [h]tml [b]rowse HTML [x]OXO [ ]keep buffer")
+ (message "Export visible: [a]SCII [h]tml [b]rowse HTML [H/R]uffer with HTML [x]OXO [ ]keep buffer")
(read-char-exclusive))
current-prefix-arg))
(if (not (member type '(?a ?\C-a ?b ?\C-b ?h ?x ?\ )))
@@ -17198,11 +23089,19 @@ command."
(?b . org-export-as-html-and-open)
(?\C-b . org-export-as-html-and-open)
(?h . org-export-as-html)
+ (?H . org-export-as-html-to-buffer)
+ (?R . org-export-region-as-html)
(?x . org-export-as-xoxo)))))
(keepp (equal type ?\ ))
(file buffer-file-name)
(buffer (get-buffer-create "*Org Export Visible*"))
s e)
+ ;; Need to hack the drawers here.
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward org-drawer-regexp nil t)
+ (goto-char (match-beginning 1))
+ (or (org-invisible-p) (org-flag-drawer nil))))
(with-current-buffer buffer (erase-buffer))
(save-excursion
(setq s (goto-char (point-min)))
@@ -17210,6 +23109,7 @@ command."
(goto-char (org-find-invisible))
(append-to-buffer buffer s (point))
(setq s (goto-char (org-find-visible))))
+ (org-cycle-hide-drawers 'all)
(goto-char (point-min))
(unless keepp
;; Copy all comment lines to the end, to make sure #+ settings are
@@ -17253,10 +23153,12 @@ Does include HTML export options as well as TODO and CATEGORY stuff."
#+EMAIL: %s
#+LANGUAGE: %s
#+TEXT: Some descriptive text to be emitted. Several lines OK.
-#+OPTIONS: H:%d num:%s toc:%s \\n:%s @:%s ::%s |:%s ^:%s *:%s TeX:%s LaTeX:%s
+#+OPTIONS: H:%d num:%s toc:%s \\n:%s @:%s ::%s |:%s ^:%s f:%s *:%s TeX:%s LaTeX:%s skip:%s d:%s tags:%s
#+CATEGORY: %s
#+SEQ_TODO: %s
#+TYP_TODO: %s
+#+PRIORITIES: %c %c %c
+#+DRAWERS: %s
#+STARTUP: %s %s %s %s %s
#+TAGS: %s
#+ARCHIVE: %s
@@ -17271,16 +23173,18 @@ Does include HTML export options as well as TODO and CATEGORY stuff."
org-export-with-fixed-width
org-export-with-tables
org-export-with-sub-superscripts
+ org-export-with-footnotes
org-export-with-emphasize
org-export-with-TeX-macros
org-export-with-LaTeX-fragments
+ org-export-skip-text-before-1st-heading
+ org-export-with-drawers
+ org-export-with-tags
(file-name-nondirectory buffer-file-name)
- (if (equal org-todo-interpretation 'sequence)
- (mapconcat 'identity org-todo-keywords " ")
- "TODO FEEDBACK VERIFY DONE")
- (if (equal org-todo-interpretation 'type)
- (mapconcat 'identity org-todo-keywords " ")
- "Me Jason Marie DONE")
+ "TODO FEEDBACK VERIFY DONE"
+ "Me Jason Marie DONE"
+ org-highest-priority org-lowest-priority org-default-priority
+ (mapconcat 'identity org-drawers " ")
(cdr (assoc org-startup-folded
'((nil . "showall") (t . "overview") (content . "content"))))
(if org-odd-levels-only "odd" "oddeven")
@@ -17348,12 +23252,12 @@ this line is also exported in fixed-width font."
(save-excursion
(org-back-to-heading)
(if (looking-at (concat outline-regexp
- "\\( +\\<" org-quote-string "\\>\\)"))
+ "\\( *\\<" org-quote-string "\\>[ \t]*\\)"))
(replace-match "" t t nil 1)
(if (looking-at outline-regexp)
(progn
(goto-char (match-end 0))
- (insert " " org-quote-string))))))))
+ (insert org-quote-string " "))))))))
(defun org-export-as-html-and-open (arg)
"Export the outline as HTML and immediately open it with a browser.
@@ -17372,19 +23276,96 @@ emacs --batch
--visit=MyFile --funcall org-export-as-html-batch"
(org-export-as-html org-export-headline-levels 'hidden))
-(defun org-export-as-html (arg &optional hidden ext-plist)
+(defun org-export-as-html-to-buffer (arg)
+ "Call `org-exort-as-html` with output to a temporary buffer.
+No file is created. The prefix ARG is passed through to `org-export-as-html'."
+ (interactive "P")
+ (org-export-as-html arg nil nil "*Org HTML Export*")
+ (switch-to-buffer-other-window "*Org HTML Export*"))
+
+(defun org-replace-region-by-html (beg end)
+ "Assume the current region has org-mode syntax, and convert it to HTML.
+This can be used in any buffer. For example, you could write an
+itemized list in org-mode syntax in an HTML buffer and then use this
+command to convert it."
+ (interactive "r")
+ (let (reg html buf pop-up-frames)
+ (save-window-excursion
+ (if (org-mode-p)
+ (setq html (org-export-region-as-html
+ beg end t 'string))
+ (setq reg (buffer-substring beg end)
+ buf (get-buffer-create "*Org tmp*"))
+ (with-current-buffer buf
+ (erase-buffer)
+ (insert reg)
+ (org-mode)
+ (setq html (org-export-region-as-html
+ (point-min) (point-max) t 'string)))
+ (kill-buffer buf)))
+ (delete-region beg end)
+ (insert html)))
+
+(defun org-export-region-as-html (beg end &optional body-only buffer)
+ "Convert region from BEG to END in org-mode buffer to HTML.
+If prefix arg BODY-ONLY is set, omit file header, footer, and table of
+contents, and only produce the region of converted text, useful for
+cut-and-paste operations.
+If BUFFER is a buffer or a string, use/create that buffer as a target
+of the converted HTML. If BUFFER is the symbol `string', return the
+produced HTML as a string and leave not buffer behind. For example,
+a Lisp program could call this function in the following way:
+
+ (setq html (org-export-region-as-html beg end t 'string))
+
+When called interactively, the output buffer is selected, and shown
+in a window. A non-interactive call will only retunr the buffer."
+ (interactive "r\nP")
+ (when (interactive-p)
+ (setq buffer "*Org HTML Export*"))
+ (let ((transient-mark-mode t) (zmacs-regions t)
+ rtn)
+ (goto-char end)
+ (set-mark (point)) ;; to activate the region
+ (goto-char beg)
+ (setq rtn (org-export-as-html
+ nil nil nil
+ buffer body-only))
+ (if (fboundp 'deactivate-mark) (deactivate-mark))
+ (if (and (interactive-p) (bufferp rtn))
+ (switch-to-buffer-other-window rtn)
+ rtn)))
+
+(defun org-export-as-html (arg &optional hidden ext-plist
+ to-buffer body-only)
"Export the outline as a pretty HTML file.
-If there is an active region, export only the region.
-The prefix ARG specifies how many levels of the outline should become
-headlines. The default is 3. Lower levels will become bulleted lists.
-When HIDDEN is non-nil, don't display the HTML buffer.
+If there is an active region, export only the region. The prefix
+ARG specifies how many levels of the outline should become
+headlines. The default is 3. Lower levels will become bulleted
+lists. When HIDDEN is non-nil, don't display the HTML buffer.
EXT-PLIST is a property list with external parameters overriding
-org-mode's default settings, but still inferior to file-local settings."
+org-mode's default settings, but still inferior to file-local
+settings. When TO-BUFFER is non-nil, create a buffer with that
+name and export to that buffer. If TO-BUFFER is the symbol `string',
+don't leave any buffer behind but just return the resulting HTML as
+a string. When BODY-ONLY is set, don't produce the file header and footer,
+simply return the content of <body>...</body>, without even
+the body tags themselves."
(interactive "P")
+
+ ;; Make sure we have a file name when we need it.
+ (when (and (not (or to-buffer body-only))
+ (not buffer-file-name))
+ (if (buffer-base-buffer)
+ (org-set-local 'buffer-file-name
+ (with-current-buffer (buffer-base-buffer)
+ buffer-file-name))
+ (error "Need a file name to be able to export.")))
+
(message "Exporting...")
(setq-default org-todo-line-regexp org-todo-line-regexp)
(setq-default org-deadline-line-regexp org-deadline-line-regexp)
- (setq-default org-done-string org-done-string)
+ (setq-default org-done-keywords org-done-keywords)
(setq-default org-maybe-keyword-time-regexp org-maybe-keyword-time-regexp)
(let* ((opt-plist (org-combine-plists (org-default-export-plist)
ext-plist
@@ -17392,44 +23373,53 @@ org-mode's default settings, but still inferior to file-local settings."
(style (plist-get opt-plist :style))
(link-validate (plist-get opt-plist :link-validation-function))
- valid
+ valid thetoc have-headings first-heading-pos
(odd org-odd-levels-only)
(region-p (org-region-active-p))
- (region
- (buffer-substring
- (if region-p (region-beginning) (point-min))
- (if region-p (region-end) (point-max))))
+ (subtree-p
+ (when region-p
+ (save-excursion
+ (goto-char (region-beginning))
+ (and (org-at-heading-p)
+ (>= (org-end-of-subtree t t) (region-end))))))
;; The following two are dynamically scoped into other
;; routines below.
(org-current-export-dir (org-export-directory :html opt-plist))
(org-current-export-file buffer-file-name)
- (all_lines
- (org-skip-comments (org-split-string
- (org-cleaned-string-for-export
- region :emph-multiline :for-html
- (if (plist-get opt-plist :LaTeX-fragments)
- :LaTeX-fragments))
- "[\r\n]")))
- (lines (org-export-find-first-heading-line all_lines))
(level 0) (line "") (origline "") txt todo
(umax nil)
(umax-toc nil)
- (filename (concat (file-name-as-directory
- (org-export-directory :html opt-plist))
- (file-name-sans-extension
- (file-name-nondirectory buffer-file-name))
- ".html"))
- (current-dir (file-name-directory buffer-file-name))
- (buffer (find-file-noselect filename))
+ (filename (if to-buffer nil
+ (concat (file-name-as-directory
+ (org-export-directory :html opt-plist))
+ (file-name-sans-extension
+ (or (and subtree-p
+ (org-entry-get (region-beginning)
+ "EXPORT_FILE_NAME" t))
+ (file-name-nondirectory buffer-file-name)))
+ "." org-export-html-extension)))
+ (current-dir (if buffer-file-name
+ (file-name-directory buffer-file-name)
+ default-directory))
+ (buffer (if to-buffer
+ (cond
+ ((eq to-buffer 'string) (get-buffer-create "*Org HTML Export*"))
+ (t (get-buffer-create to-buffer)))
+ (find-file-noselect filename)))
(org-levels-open (make-vector org-level-max nil))
- (date (format-time-string "%Y/%m/%d" (current-time)))
- (time (format-time-string "%X" (org-current-time)))
+ (date (plist-get opt-plist :date))
(author (plist-get opt-plist :author))
- (title (or (plist-get opt-plist :title)
- (file-name-sans-extension
- (file-name-nondirectory buffer-file-name))))
+ (title (or (and subtree-p (org-export-get-title-from-subtree))
+ (plist-get opt-plist :title)
+ (and (not
+ (plist-get opt-plist :skip-before-1st-heading))
+ (org-export-grab-title-from-buffer))
+ (and buffer-file-name
+ (file-name-sans-extension
+ (file-name-nondirectory buffer-file-name)))
+ "UNTITLED"))
(quote-re0 (concat "^[ \t]*" org-quote-string "\\>"))
- (quote-re (concat "^\\(\\*+\\)\\([ \t]*" org-quote-string "\\>\\)"))
+ (quote-re (concat "^\\(\\*+\\)\\([ \t]+" org-quote-string "\\>\\)"))
(inquote nil)
(infixed nil)
(in-local-list nil)
@@ -17438,55 +23428,91 @@ org-mode's default settings, but still inferior to file-local settings."
(llt org-plain-list-ordered-item-terminator)
(email (plist-get opt-plist :email))
(language (plist-get opt-plist :language))
- (text (plist-get opt-plist :text))
(lang-words nil)
(target-alist nil) tg
(head-count 0) cnt
(start 0)
(coding-system (and (boundp 'buffer-file-coding-system)
buffer-file-coding-system))
- (coding-system-for-write coding-system)
- (save-buffer-coding-system coding-system)
- (charset (and coding-system
+ (coding-system-for-write (or org-export-html-coding-system
+ coding-system))
+ (save-buffer-coding-system (or org-export-html-coding-system
+ coding-system))
+ (charset (and coding-system-for-write
(fboundp 'coding-system-get)
- (coding-system-get coding-system 'mime-charset)))
+ (coding-system-get coding-system-for-write
+ 'mime-charset)))
+ (region
+ (buffer-substring
+ (if region-p (region-beginning) (point-min))
+ (if region-p (region-end) (point-max))))
+ (lines
+ (org-split-string
+ (org-cleaned-string-for-export
+ region
+ :emph-multiline t
+ :for-html t
+ :skip-before-1st-heading
+ (plist-get opt-plist :skip-before-1st-heading)
+ :archived-trees
+ (plist-get opt-plist :archived-trees)
+ :add-text
+ (plist-get opt-plist :text)
+ :LaTeX-fragments
+ (plist-get opt-plist :LaTeX-fragments))
+ "[\r\n]"))
table-open type
table-buffer table-orig-buffer
- ind start-is-num starter
+ ind start-is-num starter didclose
rpl path desc descp desc1 desc2 link
)
+
+ (let ((inhibit-read-only t))
+ (org-unmodified
+ (remove-text-properties (point-min) (point-max)
+ '(:org-license-to-kill t))))
+
(message "Exporting...")
- (setq org-last-level 1)
+ (setq org-min-level (org-get-min-level lines))
+ (setq org-last-level org-min-level)
(org-init-section-numbers)
+ (cond
+ ((and date (string-match "%" date))
+ (setq date (format-time-string date (current-time))))
+ (date)
+ (t (setq date (format-time-string "%Y/%m/%d %X" (current-time)))))
+
;; Get the language-dependent settings
(setq lang-words (or (assoc language org-export-language-setup)
(assoc "en" org-export-language-setup)))
;; Switch to the output buffer
- (if (or hidden t)
- (set-buffer buffer)
- (switch-to-buffer-other-window buffer))
+ (set-buffer buffer)
(erase-buffer)
(fundamental-mode)
+
+ (and (fboundp 'set-buffer-file-coding-system)
+ (set-buffer-file-coding-system coding-system-for-write))
+
(let ((case-fold-search nil)
(org-odd-levels-only odd))
;; create local variables for all options, to make sure all called
;; functions get the correct information
- (mapcar (lambda (x)
- (set (make-local-variable (cdr x))
- (plist-get opt-plist (car x))))
- org-export-plist-vars)
+ (mapc (lambda (x)
+ (set (make-local-variable (cdr x))
+ (plist-get opt-plist (car x))))
+ org-export-plist-vars)
(setq umax (if arg (prefix-numeric-value arg)
org-export-headline-levels))
(setq umax-toc (if (integerp org-export-with-toc)
(min org-export-with-toc umax)
umax))
-
- ;; File header
- (insert (format
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
+ (unless body-only
+ ;; File header
+ (insert (format
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\"
lang=\"%s\" xml:lang=\"%s\">
@@ -17494,99 +23520,101 @@ lang=\"%s\" xml:lang=\"%s\">
<title>%s</title>
<meta http-equiv=\"Content-Type\" content=\"text/html;charset=%s\"/>
<meta name=\"generator\" content=\"Org-mode\"/>
-<meta name=\"generated\" content=\"%s %s\"/>
+<meta name=\"generated\" content=\"%s\"/>
<meta name=\"author\" content=\"%s\"/>
%s
</head><body>
"
- language language (org-html-expand title) (or charset "iso-8859-1")
- date time author style))
-
+ language language (org-html-expand title)
+ (or charset "iso-8859-1") date author style))
- (insert (or (plist-get opt-plist :preamble) ""))
+ (insert (or (plist-get opt-plist :preamble) ""))
- (when (plist-get opt-plist :auto-preamble)
- (if title (insert (format org-export-html-title-format
- (org-html-expand title))))
- (if text (insert "<p>\n" (org-html-expand text) "</p>")))
+ (when (plist-get opt-plist :auto-preamble)
+ (if title (insert (format org-export-html-title-format
+ (org-html-expand title))))))
- (if org-export-with-toc
+ (if (and org-export-with-toc (not body-only))
(progn
- (insert (format "<h%d>%s</h%d>\n"
- org-export-html-toplevel-hlevel
- (nth 3 lang-words)
- org-export-html-toplevel-hlevel))
- (insert "<ul>\n<li>")
+ (push (format "<h%d>%s</h%d>\n"
+ org-export-html-toplevel-hlevel
+ (nth 3 lang-words)
+ org-export-html-toplevel-hlevel)
+ thetoc)
+ (push "<ul>\n<li>" thetoc)
(setq lines
- (mapcar '(lambda (line)
- (if (string-match org-todo-line-regexp line)
- ;; This is a headline
- (progn
- (setq level (- (match-end 1) (match-beginning 1))
- level (org-tr-level level)
- txt (save-match-data
- (org-html-expand
- (org-export-cleanup-toc-line
- (match-string 3 line))))
- todo
- (or (and org-export-mark-todo-in-toc
- (match-beginning 2)
- (not (equal (match-string 2 line)
- org-done-string)))
+ (mapcar '(lambda (line)
+ (if (string-match org-todo-line-regexp line)
+ ;; This is a headline
+ (progn
+ (setq have-headings t)
+ (setq level (- (match-end 1) (match-beginning 1))
+ level (org-tr-level level)
+ txt (save-match-data
+ (org-html-expand
+ (org-export-cleanup-toc-line
+ (match-string 3 line))))
+ todo
+ (or (and org-export-mark-todo-in-toc
+ (match-beginning 2)
+ (not (member (match-string 2 line)
+ org-done-keywords)))
; TODO, not DONE
- (and org-export-mark-todo-in-toc
- (= level umax-toc)
- (org-search-todo-below
- line lines level))))
- (if (and (memq org-export-with-tags '(not-in-toc nil))
- (string-match "[ \t]+:[a-zA-Z0-9_@:]+:[ \t]*$" txt))
- (setq txt (replace-match "" t t txt)))
- (if (string-match quote-re0 txt)
- (setq txt (replace-match "" t t txt)))
- (if org-export-with-section-numbers
- (setq txt (concat (org-section-number level)
- " " txt)))
- (if (<= level umax-toc)
- (progn
- (setq head-count (+ head-count 1))
- (if (> level org-last-level)
- (progn
- (setq cnt (- level org-last-level))
- (while (>= (setq cnt (1- cnt)) 0)
- (insert "\n<ul>\n<li>"))
- (insert "\n")))
- (if (< level org-last-level)
- (progn
- (setq cnt (- org-last-level level))
- (while (>= (setq cnt (1- cnt)) 0)
- (insert "</li>\n</ul>"))
- (insert "\n")))
- ;; Check for targets
- (while (string-match org-target-regexp line)
- (setq tg (match-string 1 line)
- line (replace-match
- (concat "@<span class=\"target\">" tg "@</span> ")
- t t line))
- (push (cons (org-solidify-link-text tg)
- (format "sec-%d" head-count))
- target-alist))
- (while (string-match "&lt;\\(&lt;\\)+\\|&gt;\\(&gt;\\)+" txt)
- (setq txt (replace-match "" t t txt)))
- (insert
- (format
- (if todo
- "</li>\n<li><a href=\"#sec-%d\"><span class=\"todo\">%s</span></a>"
- "</li>\n<li><a href=\"#sec-%d\">%s</a>")
- head-count txt))
-
- (setq org-last-level level))
- )))
- line)
- lines))
- (while (> org-last-level 0)
+ (and org-export-mark-todo-in-toc
+ (= level umax-toc)
+ (org-search-todo-below
+ line lines level))))
+ (if (string-match
+ (org-re "[ \t]+:\\([[:alnum:]_@:]+\\):[ \t]*$") txt)
+ (setq txt (replace-match "&nbsp;&nbsp;&nbsp;<span class=\"tag\"> \\1</span>" t nil txt)))
+ (if (string-match quote-re0 txt)
+ (setq txt (replace-match "" t t txt)))
+ (if org-export-with-section-numbers
+ (setq txt (concat (org-section-number level)
+ " " txt)))
+ (if (<= level (max umax umax-toc))
+ (setq head-count (+ head-count 1)))
+ (if (<= level umax-toc)
+ (progn
+ (if (> level org-last-level)
+ (progn
+ (setq cnt (- level org-last-level))
+ (while (>= (setq cnt (1- cnt)) 0)
+ (push "\n<ul>\n<li>" thetoc))
+ (push "\n" thetoc)))
+ (if (< level org-last-level)
+ (progn
+ (setq cnt (- org-last-level level))
+ (while (>= (setq cnt (1- cnt)) 0)
+ (push "</li>\n</ul>" thetoc))
+ (push "\n" thetoc)))
+ ;; Check for targets
+ (while (string-match org-target-regexp line)
+ (setq tg (match-string 1 line)
+ line (replace-match
+ (concat "@<span class=\"target\">" tg "@</span> ")
+ t t line))
+ (push (cons (org-solidify-link-text tg)
+ (format "sec-%d" head-count))
+ target-alist))
+ (while (string-match "&lt;\\(&lt;\\)+\\|&gt;\\(&gt;\\)+" txt)
+ (setq txt (replace-match "" t t txt)))
+ (push
+ (format
+ (if todo
+ "</li>\n<li><a href=\"#sec-%d\"><span class=\"todo\">%s</span></a>"
+ "</li>\n<li><a href=\"#sec-%d\">%s</a>")
+ head-count txt) thetoc)
+
+ (setq org-last-level level))
+ )))
+ line)
+ lines))
+ (while (> org-last-level (1- org-min-level))
(setq org-last-level (1- org-last-level))
- (insert "</li>\n</ul>\n"))
- ))
+ (push "</li>\n</ul>\n" thetoc))
+ (setq thetoc (if have-headings (nreverse thetoc) nil))))
+
(setq head-count 0)
(org-init-section-numbers)
@@ -17594,7 +23622,7 @@ lang=\"%s\" xml:lang=\"%s\">
(catch 'nextline
;; end of quote section?
- (when (and inquote (string-match "^\\*+" line))
+ (when (and inquote (string-match "^\\*+ " line))
(insert "</pre>\n")
(setq inquote nil))
;; inside a quote section?
@@ -17618,7 +23646,16 @@ lang=\"%s\" xml:lang=\"%s\">
;; Protected HTML
(when (get-text-property 0 'org-protected line)
- (insert line "\n")
+ (let (par)
+ (when (re-search-backward
+ "\\(<p>\\)\\([ \t\r\n]*\\)\\=" (- (point) 100) t)
+ (setq par (match-string 1))
+ (replace-match "\\2\n"))
+ (insert line "\n")
+ (while (and lines
+ (get-text-property 0 'org-protected (car lines)))
+ (insert (pop lines) "\n"))
+ (and par (insert "<p>\n")))
(throw 'nextline nil))
;; Horizontal line
@@ -17676,9 +23713,10 @@ lang=\"%s\" xml:lang=\"%s\">
(setq rpl
(concat
"<a href=\"#"
- (org-solidify-link-text path target-alist)
+ (org-solidify-link-text
+ (save-match-data (org-link-unescape path)) target-alist)
"\">" desc "</a>")))
- ((member type '("http" "https")) ; FIXME: need to test this.
+ ((member type '("http" "https"))
;; standard URL, just check if we need to inline an image
(if (and (or (eq t org-export-html-inline-images)
(and org-export-html-inline-images (not descp)))
@@ -17709,7 +23747,7 @@ lang=\"%s\" xml:lang=\"%s\">
(string-match "\\.org$" thefile))
(setq thefile (concat (substring thefile 0
(match-beginning 0))
- ".html"))
+ "." org-export-html-extension))
(if (and search
;; make sure this is can be used as target search
(not (string-match "^[0-9]*$" search))
@@ -17735,24 +23773,40 @@ lang=\"%s\" xml:lang=\"%s\">
"&gt;</i>"))))
(setq line (replace-match rpl t t line)
start (+ start (length rpl))))
+
;; TODO items
(if (and (string-match org-todo-line-regexp line)
(match-beginning 2))
- (if (equal (match-string 2 line) org-done-string)
- (setq line (replace-match
- "<span class=\"done\">\\2</span>"
- t nil line 2))
- (setq line (replace-match "<span class=\"todo\">\\2</span>"
- t nil line 2))))
+
+ (setq line
+ (concat (substring line 0 (match-beginning 2))
+ "<span class=\""
+ (if (member (match-string 2 line)
+ org-done-keywords)
+ "done" "todo")
+ "\">" (match-string 2 line)
+ "</span>" (substring line (match-end 2)))))
+
+ ;; Does this contain a reference to a footnote?
+ (when org-export-with-footnotes
+ (while (string-match "\\([^* \t].*?\\)\\[\\([0-9]+\\)\\]" line)
+ (let ((n (match-string 2 line)))
+ (setq line
+ (replace-match
+ (format
+ "%s<sup><a class=\"footref\" name=\"fnr.%s\" href=\"#fn.%s\">%s</a></sup>"
+ (match-string 1 line) n n n)
+ t t line)))))
(cond
- ((string-match "^\\(\\*+\\)[ \t]*\\(.*\\)" line)
+ ((string-match "^\\(\\*+\\)[ \t]+\\(.*\\)" line)
;; This is a headline
(setq level (org-tr-level (- (match-end 1) (match-beginning 1)))
txt (match-string 2 line))
(if (string-match quote-re0 txt)
(setq txt (replace-match "" t t txt)))
- (if (<= level umax) (setq head-count (+ head-count 1)))
+ (if (<= level (max umax umax-toc))
+ (setq head-count (+ head-count 1)))
(when in-local-list
;; Close any local lists before inserting a new header line
(while local-list-num
@@ -17761,6 +23815,7 @@ lang=\"%s\" xml:lang=\"%s\">
(pop local-list-num))
(setq local-list-indent nil
in-local-list nil))
+ (setq first-heading-pos (or first-heading-pos (point)))
(org-html-level-start level txt umax
(and org-export-with-toc (<= level umax))
head-count)
@@ -17801,11 +23856,15 @@ lang=\"%s\" xml:lang=\"%s\">
line (substring line (match-beginning 5)))
(unless (string-match "[^ \t]" line)
;; empty line. Pretend indentation is large.
- (setq ind (1+ (or (car local-list-indent) 1))))
+ (setq ind (if org-empty-line-terminates-plain-lists
+ 0
+ (1+ (or (car local-list-indent) 1)))))
+ (setq didclose nil)
(while (and in-local-list
(or (and (= ind (car local-list-indent))
(not starter))
(< ind (car local-list-indent))))
+ (setq didclose t)
(org-close-li)
(insert (if (car local-list-num) "</ol>\n" "</ul>"))
(pop local-list-num) (pop local-list-indent)
@@ -17814,7 +23873,7 @@ lang=\"%s\" xml:lang=\"%s\">
((and starter
(or (not in-local-list)
(> ind (car local-list-indent))))
- ;; Start new (level of ) list
+ ;; Start new (level of) list
(org-close-par-maybe)
(insert (if start-is-num "<ol>\n<li>\n" "<ul>\n<li>\n"))
(push start-is-num local-list-num)
@@ -17823,7 +23882,10 @@ lang=\"%s\" xml:lang=\"%s\">
(starter
;; continue current list
(org-close-li)
- (insert "<li>\n")))
+ (insert "<li>\n"))
+ (didclose
+ ;; we did close a list, normal text follows: need <p>
+ (org-open-par)))
(if (string-match "^[ \t]*\\[\\([X ]\\)\\]" line)
(setq line
(replace-match
@@ -17837,6 +23899,14 @@ lang=\"%s\" xml:lang=\"%s\">
;; also start a new paragraph.
(if (string-match "^ [-+*]-\\|^[ \t]*$" line) (org-open-par))
+ ;; Is this the start of a footnote?
+ (when org-export-with-footnotes
+ (when (string-match "^[ \t]*\\[\\([0-9]+\\)\\]" line)
+ (org-close-par-maybe)
+ (let ((n (match-string 1 line)))
+ (setq line (replace-match
+ (format "<p class=\"footnote\"><sup><a class=\"footnum\" name=\"fn.%s\" href=\"#fnr.%s\">%s</a></sup>" n n n) t t line)))))
+
;; Check if the line break needs to be conserved
(cond
((string-match "\\\\\\\\[ \t]*$" line)
@@ -17856,28 +23926,51 @@ lang=\"%s\" xml:lang=\"%s\">
(pop local-list-num))
(setq local-list-indent nil
in-local-list nil))
- (org-html-level-start 1 nil umax
+ (org-html-level-start 0 nil umax
(and org-export-with-toc (<= level umax))
head-count)
- (when (plist-get opt-plist :auto-postamble)
- (when author
- (insert "<p class=\"author\"> "
- (nth 1 lang-words) ": " author "\n")
- (when email
- (insert "<a href=\"mailto:" email "\">&lt;"
- email "&gt;</a>\n"))
- (insert "</p>\n"))
- (when (and date time)
- (insert "<p class=\"date\"> "
- (nth 2 lang-words) ": "
- date " " time "</p>\n")))
-
- (if org-export-html-with-timestamp
- (insert org-export-html-html-helper-timestamp))
- (insert (or (plist-get opt-plist :postamble) ""))
- (insert "</body>\n</html>\n")
+ (unless body-only
+ (when (plist-get opt-plist :auto-postamble)
+ (insert "<div id=\"postamble\">")
+ (when (and org-export-author-info author)
+ (insert "<p class=\"author\"> "
+ (nth 1 lang-words) ": " author "\n")
+ (when email
+ (insert "<a href=\"mailto:" email "\">&lt;"
+ email "&gt;</a>\n"))
+ (insert "</p>\n"))
+ (when (and date org-export-time-stamp-file)
+ (insert "<p class=\"date\"> "
+ (nth 2 lang-words) ": "
+ date "</p>\n"))
+ (insert "</div>"))
+
+ (if org-export-html-with-timestamp
+ (insert org-export-html-html-helper-timestamp))
+ (insert (or (plist-get opt-plist :postamble) ""))
+ (insert "</body>\n</html>\n"))
+
(normal-mode)
+ (if (eq major-mode default-major-mode) (html-mode))
+
+ ;; insert the table of contents
+ (goto-char (point-min))
+ (when thetoc
+ (if (or (re-search-forward
+ "<p>\\s-*\\[TABLE-OF-CONTENTS\\]\\s-*</p>" nil t)
+ (re-search-forward
+ "\\[TABLE-OF-CONTENTS\\]" nil t))
+ (progn
+ (goto-char (match-beginning 0))
+ (replace-match ""))
+ (goto-char first-heading-pos)
+ (when (looking-at "\\s-*</p>")
+ (goto-char (match-end 0))
+ (insert "\n")))
+ (insert "<div id=\"table-of-contents\">\n")
+ (mapc 'insert thetoc)
+ (insert "</div>\n"))
;; remove empty paragraphs and lists
(goto-char (point-min))
(while (re-search-forward "<p>[ \r\n\t]*</p>" nil t)
@@ -17885,13 +23978,74 @@ lang=\"%s\" xml:lang=\"%s\">
(goto-char (point-min))
(while (re-search-forward "<li>[ \r\n\t]*</li>\n?" nil t)
(replace-match ""))
- (save-buffer)
+ ;; Convert whitespace place holders
(goto-char (point-min))
- (message "Exporting... done"))))
+ (let (beg end n)
+ (while (setq beg (next-single-property-change (point) 'org-whitespace))
+ (setq n (get-text-property beg 'org-whitespace)
+ end (next-single-property-change beg 'org-whitespace))
+ (goto-char beg)
+ (delete-region beg end)
+ (insert (format "<span style=\"visibility:hidden;\">%s</span>"
+ (make-string n ?x)))))
+ (or to-buffer (save-buffer))
+ (goto-char (point-min))
+ (message "Exporting... done")
+ (if (eq to-buffer 'string)
+ (prog1 (buffer-substring (point-min) (point-max))
+ (kill-buffer (current-buffer)))
+ (current-buffer)))))
+
+(defvar org-table-colgroup-info nil)
+(defun org-format-table-ascii (lines)
+ "Format a table for ascii export."
+ (if (stringp lines)
+ (setq lines (org-split-string lines "\n")))
+ (if (not (string-match "^[ \t]*|" (car lines)))
+ ;; Table made by table.el - test for spanning
+ lines
+
+ ;; A normal org table
+ ;; Get rid of hlines at beginning and end
+ (if (string-match "^[ \t]*|-" (car lines)) (setq lines (cdr lines)))
+ (setq lines (nreverse lines))
+ (if (string-match "^[ \t]*|-" (car lines)) (setq lines (cdr lines)))
+ (setq lines (nreverse lines))
+ (when org-export-table-remove-special-lines
+ ;; Check if the table has a marking column. If yes remove the
+ ;; column and the special lines
+ (setq lines (org-table-clean-before-export lines)))
+ ;; Get rid of the vertical lines except for grouping
+ (let ((vl (org-colgroup-info-to-vline-list org-table-colgroup-info))
+ rtn line vl1 start)
+ (while (setq line (pop lines))
+ (if (string-match org-table-hline-regexp line)
+ (and (string-match "|\\(.*\\)|" line)
+ (setq line (replace-match " \\1" t nil line)))
+ (setq start 0 vl1 vl)
+ (while (string-match "|" line start)
+ (setq start (match-end 0))
+ (or (pop vl1) (setq line (replace-match " " t t line)))))
+ (push line rtn))
+ (nreverse rtn))))
+
+(defun org-colgroup-info-to-vline-list (info)
+ (let (vl new last)
+ (while info
+ (setq last new new (pop info))
+ (if (or (memq last '(:end :startend))
+ (memq new '(:start :startend)))
+ (push t vl)
+ (push nil vl)))
+ (setq vl (nreverse vl))
+ (and vl (setcar vl nil))
+ vl))
(defun org-format-table-html (lines olines)
"Find out which HTML converter to use and return the HTML code."
+ (if (stringp lines)
+ (setq lines (org-split-string lines "\n")))
(if (string-match "^[ \t]*|" (car lines))
;; A normal org table
(org-format-org-table-html lines)
@@ -17931,7 +24085,7 @@ lang=\"%s\" xml:lang=\"%s\">
(lambda (x) (string-match "^[ \t]*|-" x))
(cdr lines)))))
(nlines 0) fnum i
- tbopen line fields html)
+ tbopen line fields html gr colgropen)
(if splice (setq head nil))
(unless splice (push (if head "<thead>" "<tbody>") html))
(setq tbopen t)
@@ -17957,8 +24111,10 @@ lang=\"%s\" xml:lang=\"%s\">
(string-match org-table-number-regexp x))
(incf (aref fnum i)))
(if head
- (concat "<th>" x "</th>")
- (concat "<td>" x "</td>")))
+ (concat (car org-export-table-header-tags) x
+ (cdr org-export-table-header-tags))
+ (concat (car org-export-table-data-tags) x
+ (cdr org-export-table-data-tags))))
fields "")
"</tr>")
html)))
@@ -17969,45 +24125,73 @@ lang=\"%s\" xml:lang=\"%s\">
;; Put in COL tags with the alignment (unfortuntely often ignored...)
(push (mapconcat
(lambda (x)
- (format "<COL align=\"%s\">"
+ (setq gr (pop org-table-colgroup-info))
+ (format "%s<COL align=\"%s\"></COL>%s"
+ (if (memq gr '(:start :startend))
+ (prog1
+ (if colgropen "</colgroup>\n<colgroup>" "<colgroup>")
+ (setq colgropen t))
+ "")
(if (> (/ (float x) nlines) org-table-number-fraction)
- "right" "left")))
+ "right" "left")
+ (if (memq gr '(:end :startend))
+ (progn (setq colgropen nil) "</colgroup>")
+ "")))
fnum "")
html)
+ (if colgropen (setq html (cons (car html) (cons "</colgroup>" (cdr html)))))
(push org-export-html-table-tag html))
(concat (mapconcat 'identity html "\n") "\n")))
(defun org-table-clean-before-export (lines)
"Check if the table has a marking column.
If yes remove the column and the special lines."
+ (setq org-table-colgroup-info nil)
(if (memq nil
(mapcar
(lambda (x) (or (string-match "^[ \t]*|-" x)
(string-match "^[ \t]*| *\\([#!$*_^ /]\\) *|" x)))
lines))
(progn
- (setq org-table-clean-did-remove-column-1 nil)
- lines)
- (setq org-table-clean-did-remove-column-1 t)
+ (setq org-table-clean-did-remove-column nil)
+ (delq nil
+ (mapcar
+ (lambda (x)
+ (cond
+ ((string-match "^[ \t]*| */ *|" x)
+ (setq org-table-colgroup-info
+ (mapcar (lambda (x)
+ (cond ((member x '("<" "&lt;")) :start)
+ ((member x '(">" "&gt;")) :end)
+ ((member x '("<>" "&lt;&gt;")) :startend)
+ (t nil)))
+ (org-split-string x "[ \t]*|[ \t]*")))
+ nil)
+ (t x)))
+ lines)))
+ (setq org-table-clean-did-remove-column t)
(delq nil
(mapcar
- (lambda (x) (if (string-match "^[ \t]*| *[!_^/] *|" x)
- nil ; ignore this line
- (and (or (string-match "^[ \t]*|-+\\+" x)
- (string-match "^[ \t]*|[^|]*|" x))
- (replace-match "|" t t x))))
+ (lambda (x)
+ (cond
+ ((string-match "^[ \t]*| */ *|" x)
+ (setq org-table-colgroup-info
+ (mapcar (lambda (x)
+ (cond ((member x '("<" "&lt;")) :start)
+ ((member x '(">" "&gt;")) :end)
+ ((member x '("<>" "&lt;&gt;")) :startend)
+ (t nil)))
+ (cdr (org-split-string x "[ \t]*|[ \t]*"))))
+ nil)
+ ((string-match "^[ \t]*| *[!_^/] *|" x)
+ nil) ; ignore this line
+ ((or (string-match "^\\([ \t]*\\)|-+\\+" x)
+ (string-match "^\\([ \t]*\\)|[^|]*|" x))
+ ;; remove the first column
+ (replace-match "\\1|" t nil x))
+ (t (error "This should not happen"))))
lines))))
-(defun org-fake-empty-table-line (line)
- "Replace everything except \"|\" with spaces."
- (let ((i (length line))
- (newstr (copy-sequence line)))
- (while (> i 0)
- (setq i (1- i))
- (if (not (eq (aref newstr i) ?|))
- (aset newstr i ?\ )))
- newstr))
-
(defun org-format-table-table-html (lines)
"Format a table generated by table.el into HTML.
This conversion does *not* use `table-generate-source' from table.el.
@@ -18024,17 +24208,21 @@ But it has the disadvantage, that no cell- or row-spanning is allowed."
(progn
(if field-buffer
(progn
- (setq html (concat
- html
- "<tr>"
- (mapconcat
- (lambda (x)
- (if (equal x "") (setq x empty))
- (if head
- (concat "<th>" x "</th>\n")
- (concat "<td>" x "</td>\n")))
- field-buffer "\n")
- "</tr>\n"))
+ (setq
+ html
+ (concat
+ html
+ "<tr>"
+ (mapconcat
+ (lambda (x)
+ (if (equal x "") (setq x empty))
+ (if head
+ (concat (car org-export-table-header-tags) x
+ (cdr org-export-table-header-tags))
+ (concat (car org-export-table-data-tags) x
+ (cdr org-export-table-data-tags))))
+ field-buffer "\n")
+ "</tr>\n"))
(setq head nil)
(setq field-buffer nil)))
;; Ignore this line
@@ -18110,18 +24298,24 @@ But it has the disadvantage, that Org-mode's HTML conversions cannot be used."
(defun org-export-cleanup-toc-line (s)
"Remove tags and time staps from lines going into the toc."
- (if (string-match " +:[a-zA-Z0-9_@:]+: *$" s)
- (setq s (replace-match "" t t s)))
+ (when (memq org-export-with-tags '(not-in-toc nil))
+ (if (string-match (org-re " +:[[:alnum:]_@:]+: *$") s)
+ (setq s (replace-match "" t t s))))
(when org-export-remove-timestamps-from-toc
(while (string-match org-maybe-keyword-time-regexp s)
(setq s (replace-match "" t t s))))
+ (while (string-match org-bracket-link-regexp s)
+ (setq s (replace-match (match-string (if (match-end 3) 3 1) s)
+ t t s)))
s)
(defun org-html-expand (string)
"Prepare STRING for HTML export. Applies all active conversions.
If there are links in the string, don't modify these."
- (let* (m s l res)
- (while (setq m (string-match org-bracket-link-regexp string))
+ (let* ((re (concat org-bracket-link-regexp "\\|"
+ (org-re "[ \t]+\\(:[[:alnum:]_@:]+:\\)[ \t]*$")))
+ m s l res)
+ (while (setq m (string-match re string))
(setq s (substring string 0 m)
l (match-string 0 string)
string (substring string (match-end 0)))
@@ -18179,27 +24373,42 @@ stacked delimiters is N. Escaping delimiters is not possible."
"\\(\\(?:\\*\\|[-+]?[^-+*!@#$%^_ \t\r\n,:\"?<>~;./{}=()]+\\)\\)\\)")
"The regular expression matching a sub- or superscript.")
+;(let ((s "a\\_b"))
+; (and (string-match org-match-substring-regexp s)
+; (conca t (match-string 1 s) ":::" (match-string 2 s))))
+
(defun org-export-html-convert-sub-super (string)
"Convert sub- and superscripts in STRING to HTML."
- (let (key c)
- (while (string-match org-match-substring-regexp string)
- (setq key (if (string= (match-string 2 string) "_") "sub" "sup"))
- (setq c (or (match-string 8 string)
- (match-string 6 string)
- (match-string 5 string)))
- (setq string (replace-match
- (concat (match-string 1 string)
- "<" key ">" c "</" key ">")
- t t string)))
+ (let (key c (s 0) (requireb (eq org-export-with-sub-superscripts '{})))
+ (while (string-match org-match-substring-regexp string s)
+ (if (and requireb (match-end 8))
+ (setq s (match-end 2))
+ (setq s (match-end 1)
+ key (if (string= (match-string 2 string) "_") "sub" "sup")
+ c (or (match-string 8 string)
+ (match-string 6 string)
+ (match-string 5 string))
+ string (replace-match
+ (concat (match-string 1 string)
+ "<" key ">" c "</" key ">")
+ t t string))))
(while (string-match "\\\\\\([_^]\\)" string)
- (setq string (replace-match (match-string 1 string) t t string))))
- string)
+ (setq string (replace-match (match-string 1 string) t t string)))
+ string))
(defun org-export-html-convert-emphasize (string)
"Apply emphasis."
- (while (string-match org-emph-re string)
- (setq string (replace-match (concat "\\1" (nth 2 (assoc (match-string 3 string) org-emphasis-alist)) "\\4" (nth 3 (assoc (match-string 3 string) org-emphasis-alist)) "\\5") t nil string)))
- string)
+ (let ((s 0))
+ (while (string-match org-emph-re string s)
+ (if (not (equal
+ (substring string (match-beginning 3) (1+ (match-beginning 3)))
+ (substring string (match-beginning 4) (1+ (match-beginning 4)))))
+ (setq string (replace-match
+ (concat "\\1" (nth 2 (assoc (match-string 3 string) org-emphasis-alist))
+ "\\4" (nth 3 (assoc (match-string 3 string) org-emphasis-alist))
+ "\\5") t nil string))
+ (setq s (1+ s))))
+ string))
(defvar org-par-open nil)
(defun org-open-par ()
@@ -18216,26 +24425,23 @@ stacked delimiters is N. Escaping delimiters is not possible."
"Close <li> if necessary."
(org-close-par-maybe)
(insert "</li>\n"))
-; (when (save-excursion
-; (re-search-backward "</?\\(ul\\|ol\\|li\\|[hH][0-9]\\)>" nil t))
-; (if (member (match-string 0) '("</ul>" "</ol>" "<li>"))
-; (insert "</li>"))))
+(defvar body-only) ; dynamically scoped into this.
(defun org-html-level-start (level title umax with-toc head-count)
"Insert a new level in HTML export.
When TITLE is nil, just close all open levels."
(org-close-par-maybe)
- (let ((l (1+ (max level umax))))
- (while (<= l org-level-max)
+ (let ((l org-level-max))
+ (while (>= l (1+ level))
(if (aref org-levels-open (1- l))
(progn
- (org-html-level-close l)
+ (org-html-level-close l umax)
(aset org-levels-open (1- l) nil)))
- (setq l (1+ l)))
+ (setq l (1- l)))
(when title
;; If title is nil, this means this function is called to close
;; all levels, so the rest is done only if title is given
- (when (string-match "\\(:[a-zA-Z0-9_@:]+:\\)[ \t]*$" title)
+ (when (string-match (org-re "\\(:[[:alnum:]_@:]+:\\)[ \t]*$") title)
(setq title (replace-match
(if org-export-with-tags
(save-match-data
@@ -18256,19 +24462,22 @@ When TITLE is nil, just close all open levels."
(aset org-levels-open (1- level) t)
(org-close-par-maybe)
(insert "<ul>\n<li>" title "<br/>\n")))
- (if org-export-with-section-numbers
+ (aset org-levels-open (1- level) t)
+ (if (and org-export-with-section-numbers (not body-only))
(setq title (concat (org-section-number level) " " title)))
(setq level (+ level org-export-html-toplevel-hlevel -1))
(if with-toc
- (insert (format "\n<h%d><a name=\"sec-%d\">%s</a></h%d>\n"
- level head-count title level))
- (insert (format "\n<h%d>%s</h%d>\n" level title level)))
+ (insert (format "\n<div class=\"outline-%d\">\n<h%d id=\"sec-%d\">%s</h%d>\n"
+ level level head-count title level))
+ (insert (format "\n<div class=\"outline-%d\">\n<h%d>%s</h%d>\n" level level title level)))
(org-open-par)))))
-(defun org-html-level-close (&rest args)
+(defun org-html-level-close (level max-outline-level)
"Terminate one level in HTML export."
- (org-close-li)
- (insert "</ul>"))
+ (if (<= level max-outline-level)
+ (insert "</div>\n")
+ (org-close-li)
+ (insert "</ul>\n")))
;;; iCalendar export
@@ -18300,11 +24509,13 @@ The file is stored under the name `org-combined-agenda-icalendar-file'."
If COMBINE is non-nil, combine all calendar entries into a single large
file and store it under the name `org-combined-agenda-icalendar-file'."
(save-excursion
+ (org-prepare-agenda-buffers files)
(let* ((dir (org-export-directory
:ical (list :publishing-directory
org-export-publishing-directory)))
file ical-file ical-buffer category started org-agenda-new-buffers)
+ (and (get-buffer "*ical-tmp*") (kill-buffer "*ical-tmp*"))
(when combine
(setq ical-file
(if (file-name-absolute-p org-combined-agenda-icalendar-file)
@@ -18349,78 +24560,165 @@ the iCalendar file.")
(defun org-print-icalendar-entries (&optional combine)
"Print iCalendar entries for the current Org-mode file to `standard-output'.
When COMBINE is non nil, add the category to each line."
- (let ((re2 (concat "--?-?\\(" org-ts-regexp "\\)"))
- (org-category-table (org-get-category-table))
+ (let ((re1 (concat org-ts-regexp "\\|<%%([^>\n]+>"))
+ (re2 (concat "--?-?\\(" org-ts-regexp "\\)"))
(dts (org-ical-ts-to-string
(format-time-string (cdr org-time-stamp-formats) (current-time))
"DTSTART"))
- hd ts ts2 state status (inc t) pos
- scheduledp deadlinep tmp pri category)
+ hd ts ts2 state status (inc t) pos b sexp rrule
+ scheduledp deadlinep tmp pri category entry location summary desc
+ (sexp-buffer (get-buffer-create "*ical-tmp*")))
+ (org-refresh-category-properties)
(save-excursion
(goto-char (point-min))
- (while (re-search-forward org-ts-regexp nil t)
- (setq pos (match-beginning 0)
- ts (match-string 0)
- inc t
- hd (org-get-heading)
- category (org-get-category))
- (if (looking-at re2)
- (progn
- (goto-char (match-end 0))
- (setq ts2 (match-string 1) inc nil))
- (setq ts2 ts
- tmp (buffer-substring (max (point-min)
+ (while (re-search-forward re1 nil t)
+ (catch :skip
+ (org-agenda-skip)
+ (setq pos (match-beginning 0)
+ ts (match-string 0)
+ inc t
+ hd (org-get-heading)
+ summary (org-entry-get nil "SUMMARY")
+ desc (or (org-entry-get nil "DESCRIPTION")
+ (org-get-cleaned-entry org-icalendar-include-body))
+ location (org-entry-get nil "LOCATION")
+ category (org-get-category))
+ (if (looking-at re2)
+ (progn
+ (goto-char (match-end 0))
+ (setq ts2 (match-string 1) inc nil))
+ (setq tmp (buffer-substring (max (point-min)
(- pos org-ds-keyword-length))
- pos)
- deadlinep (string-match org-deadline-regexp tmp)
- scheduledp (string-match org-scheduled-regexp tmp)
- ;; donep (org-entry-is-done-p)
- ))
- (if (or (string-match org-tr-regexp hd)
- (string-match org-ts-regexp hd))
- (setq hd (replace-match "" t t hd)))
- (if (string-match org-bracket-link-regexp hd)
- (setq hd (replace-match (if (match-end 3) (match-string 3 hd)
- (match-string 1 hd))
- t t hd)))
- (if deadlinep (setq hd (concat "DL: " hd)))
- (if scheduledp (setq hd (concat "S: " hd)))
- (princ (format "BEGIN:VEVENT
-%s
+ pos)
+ ts2 (if (string-match "[0-9]\\{1,2\\}:[0-9][0-9]-\\([0-9]\\{1,2\\}:[0-9][0-9]\\)" ts)
+ (progn
+ (setq inc nil)
+ (replace-match "\\1" t nil ts))
+ ts)
+ deadlinep (string-match org-deadline-regexp tmp)
+ scheduledp (string-match org-scheduled-regexp tmp)
+ ;; donep (org-entry-is-done-p)
+ ))
+ (if (or (string-match org-tr-regexp hd)
+ (string-match org-ts-regexp hd))
+ (setq hd (replace-match "" t t hd)))
+ (if (string-match "\\+\\([0-9]+\\)\\([dwmy]\\)>" ts)
+ (setq rrule
+ (concat "\nRRULE:FREQ="
+ (cdr (assoc
+ (match-string 2 ts)
+ '(("d" . "DAILY")("w" . "WEEKLY")
+ ("m" . "MONTHLY")("y" . "YEARLY"))))
+ ";INTERVAL=" (match-string 1 ts)))
+ (setq rrule ""))
+ (setq summary (or summary hd))
+ (if (string-match org-bracket-link-regexp summary)
+ (setq summary
+ (replace-match (if (match-end 3)
+ (match-string 3 summary)
+ (match-string 1 summary))
+ t t summary)))
+ (if deadlinep (setq summary (concat "DL: " summary)))
+ (if scheduledp (setq summary (concat "S: " summary)))
+ (if (string-match "\\`<%%" ts)
+ (with-current-buffer sexp-buffer
+ (insert (substring ts 1 -1) " " summary "\n"))
+ (princ (format "BEGIN:VEVENT
%s
-SUMMARY:%s
+%s%s
+SUMMARY:%s%s%s
CATEGORIES:%s
END:VEVENT\n"
- (org-ical-ts-to-string ts "DTSTART")
- (org-ical-ts-to-string ts2 "DTEND" inc)
- hd category)))
+ (org-ical-ts-to-string ts "DTSTART")
+ (org-ical-ts-to-string ts2 "DTEND" inc)
+ rrule summary
+ (if (and desc (string-match "\\S-" desc))
+ (concat "\nDESCRIPTION: " desc) "")
+ (if (and location (string-match "\\S-" location))
+ (concat "\nLOCATION: " location) "")
+ category)))))
+
+ (when (and org-icalendar-include-sexps
+ (condition-case nil (require 'icalendar) (error nil))
+ (fboundp 'icalendar-export-region))
+ ;; Get all the literal sexps
+ (goto-char (point-min))
+ (while (re-search-forward "^&?%%(" nil t)
+ (catch :skip
+ (org-agenda-skip)
+ (setq b (match-beginning 0))
+ (goto-char (1- (match-end 0)))
+ (forward-sexp 1)
+ (end-of-line 1)
+ (setq sexp (buffer-substring b (point)))
+ (with-current-buffer sexp-buffer
+ (insert sexp "\n"))
+ (princ (org-diary-to-ical-string sexp-buffer)))))
+
(when org-icalendar-include-todo
(goto-char (point-min))
(while (re-search-forward org-todo-line-regexp nil t)
- (setq state (match-string 2))
- (setq status (if (equal state org-done-string)
- "COMPLETED" "NEEDS-ACTION"))
- (when (and state
- (or (not (equal state org-done-string))
- (eq org-icalendar-include-todo 'all)))
- (setq hd (match-string 3))
- (if (string-match org-priority-regexp hd)
- (setq pri (string-to-char (match-string 2 hd))
- hd (concat (substring hd 0 (match-beginning 1))
- (substring hd (match-end 1))))
- (setq pri org-default-priority))
- (setq pri (floor (1+ (* 8. (/ (float (- org-lowest-priority pri))
- (- org-lowest-priority ?A))))))
-
- (princ (format "BEGIN:VTODO
+ (catch :skip
+ (org-agenda-skip)
+ (setq state (match-string 2))
+ (setq status (if (member state org-done-keywords)
+ "COMPLETED" "NEEDS-ACTION"))
+ (when (and state
+ (or (not (member state org-done-keywords))
+ (eq org-icalendar-include-todo 'all))
+ (not (member org-archive-tag (org-get-tags-at)))
+ )
+ (setq hd (match-string 3)
+ summary (org-entry-get nil "SUMMARY")
+ desc (or (org-entry-get nil "DESCRIPTION")
+ (org-get-cleaned-entry org-icalendar-include-body))
+ location (org-entry-get nil "LOCATION"))
+ (if (string-match org-bracket-link-regexp hd)
+ (setq hd (replace-match (if (match-end 3) (match-string 3 hd)
+ (match-string 1 hd))
+ t t hd)))
+ (if (string-match org-priority-regexp hd)
+ (setq pri (string-to-char (match-string 2 hd))
+ hd (concat (substring hd 0 (match-beginning 1))
+ (substring hd (match-end 1))))
+ (setq pri org-default-priority))
+ (setq pri (floor (1+ (* 8. (/ (float (- org-lowest-priority pri))
+ (- org-lowest-priority org-highest-priority))))))
+
+ (princ (format "BEGIN:VTODO
%s
-SUMMARY:%s
+SUMMARY:%s%s%s
CATEGORIES:%s
SEQUENCE:1
PRIORITY:%d
STATUS:%s
END:VTODO\n"
- dts hd category pri status))))))))
+ dts
+ (or summary hd)
+ (if (and location (string-match "\\S-" location))
+ (concat "\nLOCATION: " location) "")
+ (if (and desc (string-match "\\S-" desc))
+ (concat "\nDESCRIPTION: " desc) "")
+ category pri status)))))))))
+
+(defun org-get-cleaned-entry (what)
+ "Clean-up description string."
+ (when what
+ (save-excursion
+ (org-back-to-heading t)
+ (let ((s (buffer-substring (point-at-bol 2) (org-end-of-subtree t)))
+ (re (concat org-drawer-regexp "[^\000]*?:END:.*\n?"))
+ (re2 (concat "^[ \t]*" org-keyword-time-regexp ".*\n?")))
+ (while (string-match re s) (setq s (replace-match "" t t s)))
+ (while (string-match re2 s) (setq s (replace-match "" t t s)))
+ (if (string-match "[ \t\r\n]+\\'" s) (setq s (replace-match "" t t s)))
+ (while (string-match "[ \t]*\n[ \t]*" s)
+ (setq s (replace-match "\\n" t t s)))
+ (setq s (org-trim s))
+ (if (and (numberp what)
+ (> (length s) what))
+ (substring s 0 what)
+ s)))))
(defun org-start-icalendar-file (name)
"Start an iCalendar file by inserting the header."
@@ -18452,7 +24750,11 @@ a time), or the day by one (if it does not contain a time)."
(let ((s (car t2)) (mi (nth 1 t2)) (h (nth 2 t2))
(d (nth 3 t2)) (m (nth 4 t2)) (y (nth 5 t2)))
(when inc
- (if have-time (setq h (+ 2 h)) (setq d (1+ d))))
+ (if have-time
+ (if org-agenda-default-appointment-duration
+ (setq mi (+ org-agenda-default-appointment-duration mi))
+ (setq h (+ 2 h)))
+ (setq d (1+ d))))
(setq time (encode-time s mi h d m y)))
(setq fmt (if have-time ":%Y%m%dT%H%M%S" ";VALUE=DATE:%Y%m%d"))
(concat keyword (format-time-string fmt time))))
@@ -18487,7 +24789,7 @@ The XOXO buffer is named *xoxo-<source buffer name>*"
(with-current-buffer out (erase-buffer))
;; Kick off the output
(org-export-as-xoxo-insert-into out "<ol class='xoxo'>\n")
- (while (re-search-forward "^\\(\\*+\\) \\(.+\\)" (point-max) 't)
+ (while (re-search-forward "^\\(\\*+\\)[ \t]+\\(.+\\)" (point-max) 't)
(let* ((hd (match-string-no-properties 1))
(level (length hd))
(text (concat
@@ -18545,47 +24847,44 @@ The XOXO buffer is named *xoxo-<source buffer name>*"
;;;; Key bindings
-;; - Bindings in Org-mode map are currently
-;; 0123456789abcdefghijklmnopqrstuvwxyz!?@#$%^&-+*/=()_{}[]:;"|,.<>~`'\t the alphabet
-;; abcd fgh j lmnopqrstuvwxyz!? #$ ^ -+*/= [] ; |,.<>~ '\t necessary bindings
-;; e (?) useful from outline-mode
-;; i k @ expendable from outline-mode
-;; 0123456789 % & ()_{} " ` free
-
;; Make `C-c C-x' a prefix key
-(define-key org-mode-map "\C-c\C-x" (make-sparse-keymap))
+(org-defkey org-mode-map "\C-c\C-x" (make-sparse-keymap))
;; TAB key with modifiers
-(define-key org-mode-map "\C-i" 'org-cycle)
-(define-key org-mode-map [(tab)] 'org-cycle)
-(define-key org-mode-map [(control tab)] 'org-force-cycle-archived)
-(define-key org-mode-map [(meta tab)] 'org-complete)
-(define-key org-mode-map "\M-\t" 'org-complete)
-(define-key org-mode-map "\M-\C-i" 'org-complete)
+(org-defkey org-mode-map "\C-i" 'org-cycle)
+(org-defkey org-mode-map [(tab)] 'org-cycle)
+(org-defkey org-mode-map [(control tab)] 'org-force-cycle-archived)
+(org-defkey org-mode-map [(meta tab)] 'org-complete)
+(org-defkey org-mode-map "\M-\t" 'org-complete)
+(org-defkey org-mode-map "\M-\C-i" 'org-complete)
;; The following line is necessary under Suse GNU/Linux
(unless (featurep 'xemacs)
- (define-key org-mode-map [S-iso-lefttab] 'org-shifttab))
-(define-key org-mode-map [(shift tab)] 'org-shifttab)
+ (org-defkey org-mode-map [S-iso-lefttab] 'org-shifttab))
+(org-defkey org-mode-map [(shift tab)] 'org-shifttab)
+(define-key org-mode-map [backtab] 'org-shifttab)
-(define-key org-mode-map (org-key 'S-return) 'org-table-copy-down)
-(define-key org-mode-map [(meta shift return)] 'org-insert-todo-heading)
-(define-key org-mode-map [(meta return)] 'org-meta-return)
+(org-defkey org-mode-map [(shift return)] 'org-table-copy-down)
+(org-defkey org-mode-map [(meta shift return)] 'org-insert-todo-heading)
+(org-defkey org-mode-map [(meta return)] 'org-meta-return)
;; Cursor keys with modifiers
-(define-key org-mode-map [(meta left)] 'org-metaleft)
-(define-key org-mode-map [(meta right)] 'org-metaright)
-(define-key org-mode-map [(meta up)] 'org-metaup)
-(define-key org-mode-map [(meta down)] 'org-metadown)
+(org-defkey org-mode-map [(meta left)] 'org-metaleft)
+(org-defkey org-mode-map [(meta right)] 'org-metaright)
+(org-defkey org-mode-map [(meta up)] 'org-metaup)
+(org-defkey org-mode-map [(meta down)] 'org-metadown)
+
+(org-defkey org-mode-map [(meta shift left)] 'org-shiftmetaleft)
+(org-defkey org-mode-map [(meta shift right)] 'org-shiftmetaright)
+(org-defkey org-mode-map [(meta shift up)] 'org-shiftmetaup)
+(org-defkey org-mode-map [(meta shift down)] 'org-shiftmetadown)
-(define-key org-mode-map [(meta shift left)] 'org-shiftmetaleft)
-(define-key org-mode-map [(meta shift right)] 'org-shiftmetaright)
-(define-key org-mode-map [(meta shift up)] 'org-shiftmetaup)
-(define-key org-mode-map [(meta shift down)] 'org-shiftmetadown)
+(org-defkey org-mode-map [(shift up)] 'org-shiftup)
+(org-defkey org-mode-map [(shift down)] 'org-shiftdown)
+(org-defkey org-mode-map [(shift left)] 'org-shiftleft)
+(org-defkey org-mode-map [(shift right)] 'org-shiftright)
-(define-key org-mode-map (org-key 'S-up) 'org-shiftup)
-(define-key org-mode-map (org-key 'S-down) 'org-shiftdown)
-(define-key org-mode-map (org-key 'S-left) 'org-shiftleft)
-(define-key org-mode-map (org-key 'S-right) 'org-shiftright)
+(org-defkey org-mode-map [(control shift right)] 'org-shiftcontrolright)
+(org-defkey org-mode-map [(control shift left)] 'org-shiftcontrolleft)
;;; Extra keys for tty access.
;; We only set them when really needed because otherwise the
@@ -18593,102 +24892,112 @@ The XOXO buffer is named *xoxo-<source buffer name>*"
(when (or (featurep 'xemacs) ;; because XEmacs supports multi-device stuff
(not window-system))
- (define-key org-mode-map "\C-c\C-xc" 'org-table-copy-down)
- (define-key org-mode-map "\C-c\C-xM" 'org-insert-todo-heading)
- (define-key org-mode-map "\C-c\C-xm" 'org-meta-return)
- (define-key org-mode-map [?\e (return)] 'org-meta-return)
- (define-key org-mode-map [?\e (left)] 'org-metaleft)
- (define-key org-mode-map "\C-c\C-xl" 'org-metaleft)
- (define-key org-mode-map [?\e (right)] 'org-metaright)
- (define-key org-mode-map "\C-c\C-xr" 'org-metaright)
- (define-key org-mode-map [?\e (up)] 'org-metaup)
- (define-key org-mode-map "\C-c\C-xu" 'org-metaup)
- (define-key org-mode-map [?\e (down)] 'org-metadown)
- (define-key org-mode-map "\C-c\C-xd" 'org-metadown)
- (define-key org-mode-map "\C-c\C-xL" 'org-shiftmetaleft)
- (define-key org-mode-map "\C-c\C-xR" 'org-shiftmetaright)
- (define-key org-mode-map "\C-c\C-xU" 'org-shiftmetaup)
- (define-key org-mode-map "\C-c\C-xD" 'org-shiftmetadown)
- (define-key org-mode-map [?\C-c ?\C-x (up)] 'org-shiftup)
- (define-key org-mode-map [?\C-c ?\C-x (down)] 'org-shiftdown)
- (define-key org-mode-map [?\C-c ?\C-x (left)] 'org-shiftleft)
- (define-key org-mode-map [?\C-c ?\C-x (right)] 'org-shiftright))
+ (org-defkey org-mode-map "\C-c\C-xc" 'org-table-copy-down)
+ (org-defkey org-mode-map "\C-c\C-xM" 'org-insert-todo-heading)
+ (org-defkey org-mode-map "\C-c\C-xm" 'org-meta-return)
+ (org-defkey org-mode-map [?\e (return)] 'org-meta-return)
+ (org-defkey org-mode-map [?\e (left)] 'org-metaleft)
+ (org-defkey org-mode-map "\C-c\C-xl" 'org-metaleft)
+ (org-defkey org-mode-map [?\e (right)] 'org-metaright)
+ (org-defkey org-mode-map "\C-c\C-xr" 'org-metaright)
+ (org-defkey org-mode-map [?\e (up)] 'org-metaup)
+ (org-defkey org-mode-map "\C-c\C-xu" 'org-metaup)
+ (org-defkey org-mode-map [?\e (down)] 'org-metadown)
+ (org-defkey org-mode-map "\C-c\C-xd" 'org-metadown)
+ (org-defkey org-mode-map "\C-c\C-xL" 'org-shiftmetaleft)
+ (org-defkey org-mode-map "\C-c\C-xR" 'org-shiftmetaright)
+ (org-defkey org-mode-map "\C-c\C-xU" 'org-shiftmetaup)
+ (org-defkey org-mode-map "\C-c\C-xD" 'org-shiftmetadown)
+ (org-defkey org-mode-map [?\C-c (up)] 'org-shiftup)
+ (org-defkey org-mode-map [?\C-c (down)] 'org-shiftdown)
+ (org-defkey org-mode-map [?\C-c (left)] 'org-shiftleft)
+ (org-defkey org-mode-map [?\C-c (right)] 'org-shiftright)
+ (org-defkey org-mode-map [?\C-c ?\C-x (right)] 'org-shiftcontrolright)
+ (org-defkey org-mode-map [?\C-c ?\C-x (left)] 'org-shiftcontrolleft))
;; All the other keys
-(define-key org-mode-map "\C-c\C-a" 'show-all) ; in case allout messed up.
-(define-key org-mode-map "\C-c\C-r" 'org-reveal)
-(define-key org-mode-map "\C-xns" 'org-narrow-to-subtree)
-(define-key org-mode-map "\C-c$" 'org-archive-subtree)
-(define-key org-mode-map "\C-c\C-x\C-s" 'org-advertized-archive-subtree)
-(define-key org-mode-map "\C-c\C-x\C-a" 'org-toggle-archive-tag)
-(define-key org-mode-map "\C-c\C-xb" 'org-tree-to-indirect-buffer)
-(define-key org-mode-map "\C-c\C-j" 'org-goto)
-(define-key org-mode-map "\C-c\C-t" 'org-todo)
-(define-key org-mode-map "\C-c\C-s" 'org-schedule)
-(define-key org-mode-map "\C-c\C-d" 'org-deadline)
-(define-key org-mode-map "\C-c;" 'org-toggle-comment)
-(define-key org-mode-map "\C-c\C-v" 'org-show-todo-tree)
-(define-key org-mode-map "\C-c\C-w" 'org-check-deadlines)
-(define-key org-mode-map "\C-c/" 'org-occur) ; Minor-mode reserved
-(define-key org-mode-map "\C-c\\" 'org-tags-sparse-tree) ; Minor-mode res.
-(define-key org-mode-map "\C-c\C-m" 'org-insert-heading)
-(define-key org-mode-map "\M-\C-m" 'org-insert-heading)
-(define-key org-mode-map "\C-c\C-x\C-n" 'org-next-link)
-(define-key org-mode-map "\C-c\C-x\C-p" 'org-previous-link)
-(define-key org-mode-map "\C-c\C-l" 'org-insert-link)
-(define-key org-mode-map "\C-c\C-o" 'org-open-at-point)
-(define-key org-mode-map "\C-c%" 'org-mark-ring-push)
-(define-key org-mode-map "\C-c&" 'org-mark-ring-goto)
-(define-key org-mode-map "\C-c\C-z" 'org-time-stamp) ; Alternative binding
-(define-key org-mode-map "\C-c." 'org-time-stamp) ; Minor-mode reserved
-(define-key org-mode-map "\C-c!" 'org-time-stamp-inactive) ; Minor-mode r.
-(define-key org-mode-map "\C-c," 'org-priority) ; Minor-mode reserved
-(define-key org-mode-map "\C-c\C-y" 'org-evaluate-time-range)
-(define-key org-mode-map "\C-c>" 'org-goto-calendar)
-(define-key org-mode-map "\C-c<" 'org-date-from-calendar)
-(define-key org-mode-map [(control ?,)] 'org-cycle-agenda-files)
-(define-key org-mode-map [(control ?\')] 'org-cycle-agenda-files)
-(define-key org-mode-map "\C-c[" 'org-agenda-file-to-front)
-(define-key org-mode-map "\C-c]" 'org-remove-file)
-(define-key org-mode-map "\C-c-" 'org-table-insert-hline)
-(define-key org-mode-map "\C-c^" 'org-sort)
-(define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c)
-(define-key org-mode-map "\C-c#" 'org-update-checkbox-count)
-(define-key org-mode-map "\C-m" 'org-return)
-(define-key org-mode-map "\C-c?" 'org-table-field-info)
-(define-key org-mode-map "\C-c " 'org-table-blank-field)
-(define-key org-mode-map "\C-c+" 'org-table-sum)
-(define-key org-mode-map "\C-c=" 'org-table-eval-formula)
-(define-key org-mode-map "\C-c'" 'org-table-edit-formulas)
-(define-key org-mode-map "\C-c`" 'org-table-edit-field)
-(define-key org-mode-map "\C-c|" 'org-table-create-or-convert-from-region)
-(define-key org-mode-map "\C-c*" 'org-table-recalculate)
-(define-key org-mode-map [(control ?#)] 'org-table-rotate-recalc-marks)
-(define-key org-mode-map "\C-c~" 'org-table-create-with-table.el)
-(define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region)
-(define-key org-mode-map "\C-c}" 'org-table-toggle-coordinate-overlays)
-(define-key org-mode-map "\C-c{" 'org-table-toggle-formula-debugger)
-(define-key org-mode-map "\C-c\C-e" 'org-export)
-(define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section)
-
-(define-key org-mode-map "\C-c\C-x\C-k" 'org-cut-special)
-(define-key org-mode-map "\C-c\C-x\C-w" 'org-cut-special)
-(define-key org-mode-map "\C-c\C-x\M-w" 'org-copy-special)
-(define-key org-mode-map "\C-c\C-x\C-y" 'org-paste-special)
-
-(define-key org-mode-map "\C-c\C-x\C-t" 'org-toggle-time-stamp-overlays)
-(define-key org-mode-map "\C-c\C-x\C-i" 'org-clock-in)
-(define-key org-mode-map "\C-c\C-x\C-o" 'org-clock-out)
-(define-key org-mode-map "\C-c\C-x\C-x" 'org-clock-cancel)
-(define-key org-mode-map "\C-c\C-x\C-d" 'org-clock-display)
-(define-key org-mode-map "\C-c\C-x\C-r" 'org-clock-report)
-(define-key org-mode-map "\C-c\C-x\C-u" 'org-dblock-update)
-(define-key org-mode-map "\C-c\C-x\C-l" 'org-preview-latex-fragment)
-(define-key org-mode-map "\C-c\C-x\C-b" 'org-toggle-checkbox)
+(org-defkey org-mode-map "\C-c\C-a" 'show-all) ; in case allout messed up.
+(org-defkey org-mode-map "\C-c\C-r" 'org-reveal)
+(org-defkey org-mode-map "\C-xns" 'org-narrow-to-subtree)
+(org-defkey org-mode-map "\C-c$" 'org-archive-subtree)
+(org-defkey org-mode-map "\C-c\C-x\C-s" 'org-advertized-archive-subtree)
+(org-defkey org-mode-map "\C-c\C-x\C-a" 'org-toggle-archive-tag)
+(org-defkey org-mode-map "\C-c\C-xb" 'org-tree-to-indirect-buffer)
+(org-defkey org-mode-map "\C-c\C-j" 'org-goto)
+(org-defkey org-mode-map "\C-c\C-t" 'org-todo)
+(org-defkey org-mode-map "\C-c\C-s" 'org-schedule)
+(org-defkey org-mode-map "\C-c\C-d" 'org-deadline)
+(org-defkey org-mode-map "\C-c;" 'org-toggle-comment)
+(org-defkey org-mode-map "\C-c\C-v" 'org-show-todo-tree)
+(org-defkey org-mode-map "\C-c\C-w" 'org-check-deadlines)
+(org-defkey org-mode-map "\C-c/" 'org-sparse-tree) ; Minor-mode reserved
+(org-defkey org-mode-map "\C-c\\" 'org-tags-sparse-tree) ; Minor-mode res.
+(org-defkey org-mode-map "\C-c\C-m" 'org-ctrl-c-ret)
+(org-defkey org-mode-map "\M-\C-m" 'org-insert-heading)
+(org-defkey org-mode-map [(control return)] 'org-insert-heading-after-current)
+(org-defkey org-mode-map "\C-c\C-x\C-n" 'org-next-link)
+(org-defkey org-mode-map "\C-c\C-x\C-p" 'org-previous-link)
+(org-defkey org-mode-map "\C-c\C-l" 'org-insert-link)
+(org-defkey org-mode-map "\C-c\C-o" 'org-open-at-point)
+(org-defkey org-mode-map "\C-c%" 'org-mark-ring-push)
+(org-defkey org-mode-map "\C-c&" 'org-mark-ring-goto)
+(org-defkey org-mode-map "\C-c\C-z" 'org-time-stamp) ; Alternative binding
+(org-defkey org-mode-map "\C-c." 'org-time-stamp) ; Minor-mode reserved
+(org-defkey org-mode-map "\C-c!" 'org-time-stamp-inactive) ; Minor-mode r.
+(org-defkey org-mode-map "\C-c," 'org-priority) ; Minor-mode reserved
+(org-defkey org-mode-map "\C-c\C-y" 'org-evaluate-time-range)
+(org-defkey org-mode-map "\C-c>" 'org-goto-calendar)
+(org-defkey org-mode-map "\C-c<" 'org-date-from-calendar)
+(org-defkey org-mode-map [(control ?,)] 'org-cycle-agenda-files)
+(org-defkey org-mode-map [(control ?\')] 'org-cycle-agenda-files)
+(org-defkey org-mode-map "\C-c[" 'org-agenda-file-to-front)
+(org-defkey org-mode-map "\C-c]" 'org-remove-file)
+(org-defkey org-mode-map "\C-c-" 'org-ctrl-c-minus)
+(org-defkey org-mode-map "\C-c^" 'org-sort)
+(org-defkey org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c)
+(org-defkey org-mode-map "\C-c\C-k" 'org-kill-note-or-show-branches)
+(org-defkey org-mode-map "\C-c#" 'org-update-checkbox-count)
+(org-defkey org-mode-map "\C-m" 'org-return)
+(org-defkey org-mode-map "\C-c?" 'org-table-field-info)
+(org-defkey org-mode-map "\C-c " 'org-table-blank-field)
+(org-defkey org-mode-map "\C-c+" 'org-table-sum)
+(org-defkey org-mode-map "\C-c=" 'org-table-eval-formula)
+(org-defkey org-mode-map "\C-c'" 'org-table-edit-formulas)
+(org-defkey org-mode-map "\C-c`" 'org-table-edit-field)
+(org-defkey org-mode-map "\C-c|" 'org-table-create-or-convert-from-region)
+(org-defkey org-mode-map "\C-c*" 'org-table-recalculate)
+(org-defkey org-mode-map [(control ?#)] 'org-table-rotate-recalc-marks)
+(org-defkey org-mode-map "\C-c~" 'org-table-create-with-table.el)
+(org-defkey org-mode-map "\C-c\C-q" 'org-table-wrap-region)
+(org-defkey org-mode-map "\C-c}" 'org-table-toggle-coordinate-overlays)
+(org-defkey org-mode-map "\C-c{" 'org-table-toggle-formula-debugger)
+(org-defkey org-mode-map "\C-c\C-e" 'org-export)
+(org-defkey org-mode-map "\C-c:" 'org-toggle-fixed-width-section)
+(org-defkey org-mode-map "\C-c\C-x\C-f" 'org-emphasize)
+
+(org-defkey org-mode-map "\C-c\C-x\C-k" 'org-cut-special)
+(org-defkey org-mode-map "\C-c\C-x\C-w" 'org-cut-special)
+(org-defkey org-mode-map "\C-c\C-x\M-w" 'org-copy-special)
+(org-defkey org-mode-map "\C-c\C-x\C-y" 'org-paste-special)
+
+(org-defkey org-mode-map "\C-c\C-x\C-t" 'org-toggle-time-stamp-overlays)
+(org-defkey org-mode-map "\C-c\C-x\C-i" 'org-clock-in)
+(org-defkey org-mode-map "\C-c\C-x\C-o" 'org-clock-out)
+(org-defkey org-mode-map "\C-c\C-x\C-j" 'org-clock-goto)
+(org-defkey org-mode-map "\C-c\C-x\C-x" 'org-clock-cancel)
+(org-defkey org-mode-map "\C-c\C-x\C-d" 'org-clock-display)
+(org-defkey org-mode-map "\C-c\C-x\C-r" 'org-clock-report)
+(org-defkey org-mode-map "\C-c\C-x\C-u" 'org-dblock-update)
+(org-defkey org-mode-map "\C-c\C-x\C-l" 'org-preview-latex-fragment)
+(org-defkey org-mode-map "\C-c\C-x\C-b" 'org-toggle-checkbox)
+(org-defkey org-mode-map "\C-c\C-xp" 'org-set-property)
+(org-defkey org-mode-map "\C-c\C-xr" 'org-insert-columns-dblock)
+
+(define-key org-mode-map "\C-c\C-x\C-c" 'org-columns)
(when (featurep 'xemacs)
- (define-key org-mode-map 'button3 'popup-mode-menu))
+ (org-defkey org-mode-map 'button3 'popup-mode-menu))
(defsubst org-table-p () (org-at-table-p))
@@ -18717,7 +25026,13 @@ overwritten, and the table is not marked as requiring realignment."
(goto-char (match-beginning 0))
(self-insert-command N))
(setq org-table-may-need-update t)
- (self-insert-command N)))
+ (self-insert-command N)
+ (org-fix-tags-on-the-fly)))
+
+(defun org-fix-tags-on-the-fly ()
+ (when (and (equal (char-after (point-at-bol)) ?*)
+ (org-on-heading-p))
+ (org-align-tags-here org-tags-column)))
(defun org-delete-backward-char (N)
"Like `delete-backward-char', insert whitespace at field end in tables.
@@ -18740,7 +25055,8 @@ because, in this case the deletion might narrow the column."
;; noalign: if there were two spaces at the end, this field
;; does not determine the width of the column.
(if noalign (setq org-table-may-need-update c)))
- (backward-delete-char N)))
+ (backward-delete-char N)
+ (org-fix-tags-on-the-fly)))
(defun org-delete-char (N)
"Like `delete-char', but insert whitespace at field end in tables.
@@ -18765,7 +25081,8 @@ because, in this case the deletion might narrow the column."
;; does not determine the width of the column.
(if noalign (setq org-table-may-need-update c)))
(delete-char N))
- (delete-char N)))
+ (delete-char N)
+ (org-fix-tags-on-the-fly)))
;; Make `delete-selection-mode' work with org-mode and orgtbl-mode
(put 'org-self-insert-command 'delete-selection t)
@@ -18779,6 +25096,12 @@ because, in this case the deletion might narrow the column."
(put 'org-delete-char 'flyspell-delayed t)
(put 'org-delete-backward-char 'flyspell-delayed t)
+(eval-after-load "pabbrev"
+ '(progn
+ (add-to-list 'pabbrev-expand-after-command-list
+ 'orgtbl-self-insert-command t)
+ (add-to-list 'pabbrev-expand-after-command-list
+ 'org-self-insert-command t)))
;; How to do this: Measure non-white length of current string
;; If equal to column width, we should realign.
@@ -18790,7 +25113,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
(while commands
(setq old (pop commands) new (pop commands))
(if (fboundp 'command-remapping)
- (define-key map (vector 'remap old) new)
+ (org-defkey map (vector 'remap old) new)
(substitute-key-definition old new map global-map)))))
(when (eq org-enable-table-editor 'optimized)
@@ -18800,7 +25123,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
'self-insert-command 'org-self-insert-command
'delete-char 'org-delete-char
'delete-backward-char 'org-delete-backward-char)
- (define-key org-mode-map "|" 'org-force-self-insert))
+ (org-defkey org-mode-map "|" 'org-force-self-insert))
(defun org-shiftcursor-error ()
"Throw an error because Shift-Cursor command was applied in wrong context."
@@ -18821,7 +25144,8 @@ See the individual commands for more information."
(defun org-shiftmetaleft ()
"Promote subtree or delete table column.
-Calls `org-promote-subtree' or `org-table-delete-column', depending on context.
+Calls `org-promote-subtree', `org-outdent-item',
+or `org-table-delete-column', depending on context.
See the individual commands for more information."
(interactive)
(cond
@@ -18832,7 +25156,8 @@ See the individual commands for more information."
(defun org-shiftmetaright ()
"Demote subtree or insert table column.
-Calls `org-demote-subtree' or `org-table-insert-column', depending on context.
+Calls `org-demote-subtree', `org-indent-item',
+or `org-table-insert-column', depending on context.
See the individual commands for more information."
(interactive)
(cond
@@ -18900,7 +25225,7 @@ for more information."
((org-at-table-p) (org-call-with-arg 'org-table-move-row 'up))
((org-on-heading-p) (call-interactively 'org-move-subtree-up))
((org-at-item-p) (call-interactively 'org-move-item-up))
- (t (org-shiftcursor-error))))
+ (t (transpose-lines 1) (beginning-of-line -1))))
(defun org-metadown (&optional arg)
"Move subtree down or move table row down.
@@ -18912,26 +25237,30 @@ commands for more information."
((org-at-table-p) (call-interactively 'org-table-move-row))
((org-on-heading-p) (call-interactively 'org-move-subtree-down))
((org-at-item-p) (call-interactively 'org-move-item-down))
- (t (org-shiftcursor-error))))
+ (t (beginning-of-line 2) (transpose-lines 1) (beginning-of-line 0))))
(defun org-shiftup (&optional arg)
"Increase item in timestamp or increase priority of current headline.
-Calls `org-timestamp-up' or `org-priority-up', depending on context.
-See the individual commands for more information."
+Calls `org-timestamp-up' or `org-priority-up', or `org-previous-item',
+depending on context. See the individual commands for more information."
(interactive "P")
(cond
- ((org-at-timestamp-p t) (call-interactively 'org-timestamp-up))
+ ((org-at-timestamp-p t)
+ (call-interactively (if org-edit-timestamp-down-means-later
+ 'org-timestamp-down 'org-timestamp-up)))
((org-on-heading-p) (call-interactively 'org-priority-up))
((org-at-item-p) (call-interactively 'org-previous-item))
(t (call-interactively 'org-beginning-of-item) (beginning-of-line 1))))
(defun org-shiftdown (&optional arg)
"Decrease item in timestamp or decrease priority of current headline.
-Calls `org-timestamp-down' or `org-priority-down', depending on context.
-See the individual commands for more information."
+Calls `org-timestamp-down' or `org-priority-down', or `org-next-item'
+depending on context. See the individual commands for more information."
(interactive "P")
(cond
- ((org-at-timestamp-p t) (call-interactively 'org-timestamp-down))
+ ((org-at-timestamp-p t)
+ (call-interactively (if org-edit-timestamp-down-means-later
+ 'org-timestamp-up 'org-timestamp-down)))
((org-on-heading-p) (call-interactively 'org-priority-down))
(t (call-interactively 'org-next-item))))
@@ -18941,6 +25270,8 @@ See the individual commands for more information."
(cond
((org-at-timestamp-p t) (call-interactively 'org-timestamp-up-day))
((org-on-heading-p) (org-call-with-arg 'org-todo 'right))
+ ((org-at-item-p) (org-call-with-arg 'org-cycle-list-bullet nil))
+ ((org-at-property-p) (call-interactively 'org-property-next-allowed-value))
(t (org-shiftcursor-error))))
(defun org-shiftleft ()
@@ -18949,8 +25280,32 @@ See the individual commands for more information."
(cond
((org-at-timestamp-p t) (call-interactively 'org-timestamp-down-day))
((org-on-heading-p) (org-call-with-arg 'org-todo 'left))
+ ((org-at-item-p) (org-call-with-arg 'org-cycle-list-bullet 'previous))
+ ((org-at-property-p)
+ (call-interactively 'org-property-previous-allowed-value))
+ (t (org-shiftcursor-error))))
+
+(defun org-shiftcontrolright ()
+ "Switch to next TODO set."
+ (interactive)
+ (cond
+ ((org-on-heading-p) (org-call-with-arg 'org-todo 'nextset))
(t (org-shiftcursor-error))))
+(defun org-shiftcontrolleft ()
+ "Switch to previous TODO set."
+ (interactive)
+ (cond
+ ((org-on-heading-p) (org-call-with-arg 'org-todo 'previousset))
+ (t (org-shiftcursor-error))))
+
+(defun org-ctrl-c-ret ()
+ "Call `org-table-hline-and-move' or `org-insert-heading' dep. on context."
+ (interactive)
+ (cond
+ ((org-at-table-p) (call-interactively 'org-table-hline-and-move))
+ (t (call-interactively 'org-insert-heading))))
+
(defun org-copy-special ()
"Copy region in table or copy current subtree.
Calls `org-table-copy' or `org-copy-subtree', depending on context.
@@ -18995,6 +25350,8 @@ This command does many different things, depending on context:
- If the cursor is on a #+TBLFM line, re-apply the formulas to
the entire table.
+- If the cursor is a the beginning of a dynamic block, update it.
+
- If the cursor is inside a table created by the table.el package,
activate that table.
@@ -19020,6 +25377,8 @@ This command does many different things, depending on context:
((and (local-variable-p 'org-finish-function (current-buffer))
(fboundp org-finish-function))
(funcall org-finish-function))
+ ((org-at-property-p)
+ (call-interactively 'org-property-action))
((org-on-target-p) (call-interactively 'org-update-radio-target-regexp))
((org-on-heading-p) (call-interactively 'org-set-tags))
((org-at-table.el-p)
@@ -19036,7 +25395,11 @@ This command does many different things, depending on context:
((org-at-item-checkbox-p)
(call-interactively 'org-toggle-checkbox))
((org-at-item-p)
- (call-interactively 'org-renumber-ordered-list))
+ (call-interactively 'org-maybe-renumber-ordered-list))
+ ((save-excursion (beginning-of-line 1) (looking-at "#\\+BEGIN:"))
+ ;; Dynamic block
+ (beginning-of-line 1)
+ (org-update-dblock))
((save-excursion (beginning-of-line 1) (looking-at "#\\+\\([A-Z]+\\)"))
(cond
((equal (match-string 1) "TBLFM")
@@ -19057,17 +25420,45 @@ Also updates the keyword regular expressions."
(let ((org-inhibit-startup t)) (org-mode))
(message "Org-mode restarted to refresh keyword and special line setup"))
+(defun org-kill-note-or-show-branches ()
+ "If this is a Note buffer, abort storing the note. Else call `show-branches'."
+ (interactive)
+ (if (not org-finish-function)
+ (call-interactively 'show-branches)
+ (let ((org-note-abort t))
+ (funcall org-finish-function))))
+
(defun org-return ()
"Goto next table row or insert a newline.
Calls `org-table-next-row' or `newline', depending on context.
See the individual commands for more information."
(interactive)
(cond
+ ((bobp) (newline))
((org-at-table-p)
(org-table-justify-field-maybe)
(call-interactively 'org-table-next-row))
(t (newline))))
+
+(defun org-ctrl-c-minus ()
+ "Insert separator line in table or modify bullet type in list.
+Calls `org-table-insert-hline' or `org-cycle-list-bullet',
+depending on context."
+ (interactive)
+ (cond
+ ((org-at-table-p)
+ (call-interactively 'org-table-insert-hline))
+ ((org-on-heading-p)
+ ;; Convert to item
+ (save-excursion
+ (beginning-of-line 1)
+ (if (looking-at "\\*+ ")
+ (replace-match (concat (make-string (- (match-end 0) (point)) ?\ ) "- ")))))
+ ((org-in-item-p)
+ (call-interactively 'org-cycle-list-bullet))
+ (t (error "`C-c -' does have no function here."))))
+
(defun org-meta-return (&optional arg)
"Insert a new heading or wrap a region in a table.
Calls `org-insert-heading' or `org-table-wrap-region', depending on context.
@@ -19104,7 +25495,7 @@ See the individual commands for more information."
["Insert Row" org-shiftmetadown (org-at-table-p)]
["Sort lines in region" org-table-sort-lines (org-at-table-p)]
"--"
- ["Insert Hline" org-table-insert-hline (org-at-table-p)])
+ ["Insert Hline" org-ctrl-c-minus (org-at-table-p)])
("Rectangle"
["Copy Rectangle" org-copy-special (org-at-table-p)]
["Cut Rectangle" org-cut-special (org-at-table-p)]
@@ -19177,6 +25568,8 @@ See the individual commands for more information."
"--"
["Convert to odd levels" org-convert-to-odd-levels t]
["Convert to odd/even levels" org-convert-to-oddeven-levels t])
+ ("Editing"
+ ["Emphasis..." org-emphasize t])
("Archive"
["Toggle ARCHIVE tag" org-toggle-archive-tag t]
; ["Check and Tag Children" (org-toggle-archive-tag (4))
@@ -19202,22 +25595,22 @@ See the individual commands for more information."
("Select keyword"
["Next keyword" org-shiftright (org-on-heading-p)]
["Previous keyword" org-shiftleft (org-on-heading-p)]
- ["Complete Keyword" org-complete (assq :todo-keyword (org-context))])
+ ["Complete Keyword" org-complete (assq :todo-keyword (org-context))]
+ ["Next keyword set" org-shiftcontrolright (and (> (length org-todo-sets) 1) (org-on-heading-p))]
+ ["Previous keyword set" org-shiftcontrolright (and (> (length org-todo-sets) 1) (org-on-heading-p))])
["Show TODO Tree" org-show-todo-tree t]
["Global TODO list" org-todo-list t]
"--"
["Set Priority" org-priority t]
["Priority Up" org-shiftup t]
- ["Priority Down" org-shiftdown t]
+ ["Priority Down" org-shiftdown t])
+ ("TAGS and Properties"
+ ["Set Tags" 'org-ctrl-c-ctrl-c (org-at-heading-p)]
+ ["Change tag in region" 'org-change-tag-in-region (org-region-active-p)]
"--"
-; ["Insert Checkbox" org-insert-todo-heading (org-in-item-p)]
-; ["Toggle Checkbox" org-ctrl-c-ctrl-c (org-at-item-checkbox-p)]
-; ["Insert [n/m] cookie" (progn (insert "[/]") (org-update-checkbox-count))
-; (or (org-on-heading-p) (org-at-item-p))]
-; ["Insert [%] cookie" (progn (insert "[%]") (org-update-checkbox-count))
-; (or (org-on-heading-p) (org-at-item-p))]
-; ["Update Statistics" org-update-checkbox-count t]
- )
+ ["Set property" 'org-set-property t]
+ ["Column view of properties" org-columns t]
+ ["Insert Column View DBlock" org-insert-columns-dblock t])
("Dates and Scheduling"
["Timestamp" org-time-stamp t]
["Timestamp (inactive)" org-time-stamp-inactive t]
@@ -19239,13 +25632,14 @@ See the individual commands for more information."
["Clock in" org-clock-in t]
["Clock out" org-clock-out t]
["Clock cancel" org-clock-cancel t]
+ ["Goto running clock" org-clock-goto t]
["Display times" org-clock-display t]
["Create clock table" org-clock-report t]
"--"
["Record DONE time"
(progn (setq org-log-done (not org-log-done))
(message "Switching to %s will %s record a timestamp"
- org-done-string
+ (car org-done-keywords)
(if org-log-done "automatically" "not")))
:style toggle :selected org-log-done])
"--"
@@ -19297,15 +25691,6 @@ See the individual commands for more information."
["Refresh setup" org-mode-restart t]
))
-(defun org-toggle-log-option (type)
- (if (not (listp org-log-done)) (setq org-log-done nil))
- (if (memq type org-log-done)
- (setq org-log-done (delq type org-log-done))
- (add-to-list 'org-log-done type)))
-
-(defun org-check-log-option (type)
- (and (listp org-log-done) (memq type org-log-done)))
-
(defun org-info (&optional node)
"Read documentation for Org-mode in the info system.
With optional NODE, go directly to that node."
@@ -19328,6 +25713,7 @@ With optional NODE, go directly to that node."
["Add/Move Current File to Front of List" org-agenda-file-to-front t]
["Remove Current File from List" org-remove-file t]
["Cycle through agenda files" org-cycle-agenda-files t]
+ ["Occur in all agenda files" org-occur-in-agenda-files t]
"--")
(mapcar 'org-file-menu-entry (org-agenda-files t))))))))
@@ -19394,7 +25780,7 @@ and :keyword."
(p (point)) clist o)
;; First the large context
(cond
- ((org-on-heading-p)
+ ((org-on-heading-p t)
(push (list :headline (point-at-bol) (point-at-eol)) clist)
(when (progn
(beginning-of-line 1)
@@ -19404,7 +25790,7 @@ and :keyword."
(push (org-point-in-group p 4 :tags) clist))
(goto-char p)
(skip-chars-backward "^[\n\r \t") (or (eobp) (backward-char 1))
- (if (looking-at "\\[#[A-Z]\\]")
+ (if (looking-at "\\[#[A-Z0-9]\\]")
(push (org-point-in-group p 0 :priority) clist)))
((org-at-item-p)
@@ -19459,6 +25845,7 @@ and :keyword."
(setq clist (nreverse (delq nil clist)))
clist))
+;; FIXME: Compare with at-regexp-p Do we need both?
(defun org-in-regexp (re &optional nlines visually)
"Check if point is inside a match of regexp.
Normally only the current line is checked, but you can include NLINES extra
@@ -19476,6 +25863,45 @@ really on, so that the block visually is on the match."
(>= (+ inc (match-end 0)) pos))
(throw 'exit (cons (match-beginning 0) (match-end 0)))))))))
+(defun org-at-regexp-p (regexp)
+ "Is point inside a match of REGEXP in the current line?"
+ (catch 'exit
+ (save-excursion
+ (let ((pos (point)) (end (point-at-eol)))
+ (beginning-of-line 1)
+ (while (re-search-forward regexp end t)
+ (if (and (<= (match-beginning 0) pos)
+ (>= (match-end 0) pos))
+ (throw 'exit t)))
+ nil))))
+
+(defun org-occur-in-agenda-files (regexp &optional nlines)
+ "Call `multi-occur' with buffers for all agenda files."
+ (interactive "sOrg-files matching: \np")
+ (let* ((files (org-agenda-files))
+ (tnames (mapcar 'file-truename files))
+ (extra org-agenda-multi-occur-extra-files)
+ f)
+ (while (setq f (pop extra))
+ (unless (member (file-truename f) tnames)
+ (add-to-list 'files f 'append)
+ (add-to-list 'tnames (file-truename f) 'append)))
+ (multi-occur
+ (mapcar (lambda (x) (or (get-file-buffer x) (find-file-noselect x))) files)
+ regexp)))
+
+(defun org-uniquify (list)
+ "Remove duplicate elements from LIST."
+ (let (res)
+ (mapc (lambda (x) (add-to-list 'res x 'append)) list)
+ res))
+
+(defun org-delete-all (elts list)
+ "Remove all elements in ELTS from LIST."
+ (while elts
+ (setq list (delete (pop elts) list)))
+ list)
+
(defun org-point-in-group (point group &optional context)
"Check if POINT is in match-group GROUP.
If CONTEXT is non-nil, return a list with CONTEXT and the boundaries of the
@@ -19488,6 +25914,13 @@ return nil."
(list context (match-beginning group) (match-end group))
t)))
+(defun org-switch-to-buffer-other-window (&rest args)
+ "Switch to buffer in a second window on the current frame.
+In particular, do not allow pop-up frames."
+ (let (pop-up-frames special-display-buffer-names special-display-regexps
+ special-display-function)
+ (apply 'switch-to-buffer-other-window args)))
+
(defun org-combine-plists (&rest plists)
"Create a single property list from all plists in PLISTS.
The process starts by copying the first list, and then setting properties
@@ -19530,7 +25963,7 @@ ones and overrule settings in the other lists."
(defun org-replace-escapes (string table)
"Replace %-escapes in STRING with values in TABLE.
-TABLE is an association list with keys line \"%a\" and string values.
+TABLE is an association list with keys like \"%a\" and string values.
The sequences in STRING may contain normal field width and padding information,
for example \"%-5s\". Replacements happen in the sequence given by TABLE,
so values can contain further %-escapes if they are define later in TABLE."
@@ -19555,27 +25988,85 @@ Counting starts at 1."
(setq c (1+ c)))
(nreverse rtn)))
-(defun org-at-regexp-p (regexp)
- "Is point inside a match of REGEXP in the current line?"
- (catch 'exit
- (save-excursion
- (let ((pos (point)) (end (point-at-eol)))
- (beginning-of-line 1)
- (while (re-search-forward regexp end t)
- (if (and (<= (match-beginning 0) pos)
- (>= (match-end 0) pos))
- (throw 'exit t)))
- nil))))
-
(defun org-find-base-buffer-visiting (file)
"Like `find-buffer-visiting' but alway return the base buffer and
not an indirect buffer"
(let ((buf (find-buffer-visiting file)))
- (or (buffer-base-buffer buf) buf)))
+ (if buf
+ (or (buffer-base-buffer buf) buf)
+ nil)))
+
+(defun org-image-file-name-regexp ()
+ "Return regexp matching the file names of images."
+ (if (fboundp 'image-file-name-regexp)
+ (image-file-name-regexp)
+ (let ((image-file-name-extensions
+ '("png" "jpeg" "jpg" "gif" "tiff" "tif"
+ "xbm" "xpm" "pbm" "pgm" "ppm")))
+ (concat "\\."
+ (regexp-opt (nconc (mapcar 'upcase
+ image-file-name-extensions)
+ image-file-name-extensions)
+ t)
+ "\\'"))))
+
+(defun org-file-image-p (file)
+ "Return non-nil if FILE is an image."
+ (save-match-data
+ (string-match (org-image-file-name-regexp) file)))
;;; Paragraph filling stuff.
;; We want this to be just right, so use the full arsenal.
-;; FIXME: configure filladapt for XEmacs
+
+(defun org-indent-line-function ()
+ "Indent line like previous, but further if previous was headline or item."
+ (interactive)
+ (let* ((pos (point))
+ (itemp (org-at-item-p))
+ column bpos bcol tpos tcol bullet btype bullet-type)
+ ;; Find the previous relevant line
+ (beginning-of-line 1)
+ (cond
+ ((looking-at "#") (setq column 0))
+ ((looking-at "\\*+ ") (setq column 0))
+ (t
+ (beginning-of-line 0)
+ (while (and (not (bobp)) (looking-at "[ \t]*[\n:#|]"))
+ (beginning-of-line 0))
+ (cond
+ ((looking-at "\\*+[ \t]+")
+ (goto-char (match-end 0))
+ (setq column (current-column)))
+ ((org-in-item-p)
+ (org-beginning-of-item)
+; (looking-at "[ \t]*\\(\\S-+\\)[ \t]*")
+ (looking-at "[ \t]*\\(\\S-+\\)[ \t]*\\(\\[[- X]\\][ \t]*\\)?")
+ (setq bpos (match-beginning 1) tpos (match-end 0)
+ bcol (progn (goto-char bpos) (current-column))
+ tcol (progn (goto-char tpos) (current-column))
+ bullet (match-string 1)
+ bullet-type (if (string-match "[0-9]" bullet) "n" bullet))
+ (if (not itemp)
+ (setq column tcol)
+ (goto-char pos)
+ (beginning-of-line 1)
+ (looking-at "[ \t]*\\(\\S-+\\)[ \t]*")
+ (setq bullet (match-string 1)
+ btype (if (string-match "[0-9]" bullet) "n" bullet))
+ (setq column (if (equal btype bullet-type) bcol tcol))))
+ (t (setq column (org-get-indentation))))))
+ (goto-char pos)
+ (if (<= (current-column) (current-indentation))
+ (indent-line-to column)
+ (save-excursion (indent-line-to column)))
+ (setq column (current-column))
+ (beginning-of-line 1)
+ (if (looking-at
+ "\\([ \t]+\\)\\(:[0-9a-zA-Z]+:\\)[ \t]*\\(\\S-.*\\(\\S-\\|$\\)\\)")
+ (replace-match (concat "\\1" (format org-property-format
+ (match-string 2) (match-string 3)))
+ t nil))
+ (move-to-column column)))
(defun org-set-autofill-regexps ()
(interactive)
@@ -19583,15 +26074,15 @@ not an indirect buffer"
;; text in a line directly attached to a headline would otherwise
;; fill the headline as well.
(org-set-local 'comment-start-skip "^#+[ \t]*")
- (org-set-local 'paragraph-separate "\f\\|\\*\\|[ ]*$\\|[ \t]*[:|]")
+ (org-set-local 'paragraph-separate "\f\\|\\*+ \\|[ ]*$\\|[ \t]*[:|]")
;; The paragraph starter includes hand-formatted lists.
(org-set-local 'paragraph-start
- "\f\\|[ ]*$\\|\\([*\f]+\\)\\|[ \t]*\\([-+*][ \t]+\\|[0-9]+[.)][ \t]+\\)\\|[ \t]*[:|]")
+ "\f\\|[ ]*$\\|\\*+ \\|\f\\|[ \t]*\\([-+*][ \t]+\\|[0-9]+[.)][ \t]+\\)\\|[ \t]*[:|]")
;; Inhibit auto-fill for headers, tables and fixed-width lines.
;; But only if the user has not turned off tables or fixed-width regions
(org-set-local
'auto-fill-inhibit-regexp
- (concat "\\*\\|#\\+"
+ (concat "\\*+ \\|#\\+"
"\\|[ \t]*" org-keyword-time-regexp
(if (or org-enable-table-editor org-enable-fixed-width-editor)
(concat
@@ -19627,49 +26118,77 @@ In particular, this makes sure hanging paragraphs for hand-formatted lists
work correctly."
(cond ((looking-at "#[ \t]+")
(match-string 0))
- ((looking-at " *\\([-*+] \\|[0-9]+[.)] \\)?")
- (make-string (- (match-end 0) (match-beginning 0)) ?\ ))
+ ((looking-at "[ \t]*\\([-*+] \\|[0-9]+[.)] \\)?")
+ (save-excursion
+ (goto-char (match-end 0))
+ (make-string (current-column) ?\ )))
(t nil)))
-
-(defun org-image-file-name-regexp ()
- "Return regexp matching the file names of images."
- (if (fboundp 'image-file-name-regexp)
- (image-file-name-regexp)
- (let ((image-file-name-extensions
- '("png" "jpeg" "jpg" "gif" "tiff" "tif"
- "xbm" "xpm" "pbm" "pgm" "ppm")))
- (concat "\\."
- (regexp-opt (nconc (mapcar 'upcase
- image-file-name-extensions)
- image-file-name-extensions)
- t)
- "\\'"))))
-
-(defun org-file-image-p (file)
- "Return non-nil if FILE is an image."
- (save-match-data
- (string-match (org-image-file-name-regexp) file)))
-
;;;; Functions extending outline functionality
-;; C-a should go to the beginning of a *visible* line, also in the
-;; new outline.el. I guess this should be patched into Emacs?
-(defun org-beginning-of-line ()
+(defun org-beginning-of-line (&optional arg)
"Go to the beginning of the current line. If that is invisible, continue
-to a visible line beginning. This makes the function of C-a more intuitive."
- (interactive)
- (beginning-of-line 1)
- (if (bobp)
- nil
- (backward-char 1)
- (if (org-invisible-p)
- (while (and (not (bobp)) (org-invisible-p))
- (backward-char 1)
- (beginning-of-line 1))
- (forward-char 1))))
+to a visible line beginning. This makes the function of C-a more intuitive.
+If this is a headline, and `org-special-ctrl-a/e' is set, ignore tags on the
+first attempt, and only move to after the tags when the cursor is already
+beyond the end of the headline."
+ (interactive "P")
+ (let ((pos (point)))
+ (beginning-of-line 1)
+ (if (bobp)
+ nil
+ (backward-char 1)
+ (if (org-invisible-p)
+ (while (and (not (bobp)) (org-invisible-p))
+ (backward-char 1)
+ (beginning-of-line 1))
+ (forward-char 1)))
+ (when org-special-ctrl-a/e
+ (cond
+ ((and (looking-at org-todo-line-regexp)
+ (= (char-after (match-end 1)) ?\ ))
+ (goto-char
+ (if (eq org-special-ctrl-a/e t)
+ (cond ((> pos (match-beginning 3)) (match-beginning 3))
+ ((= pos (point)) (match-beginning 3))
+ (t (point)))
+ (cond ((> pos (point)) (point))
+ ((not (eq last-command this-command)) (point))
+ (t (match-beginning 3))))))
+ ((org-at-item-p)
+ (goto-char
+ (if (eq org-special-ctrl-a/e t)
+ (cond ((> pos (match-end 4)) (match-end 4))
+ ((= pos (point)) (match-end 4))
+ (t (point)))
+ (cond ((> pos (point)) (point))
+ ((not (eq last-command this-command)) (point))
+ (t (match-end 4))))))))))
+
+(defun org-end-of-line (&optional arg)
+ "Go to the end of the line.
+If this is a headline, and `org-special-ctrl-a/e' is set, ignore tags on the
+first attempt, and only move to after the tags when the cursor is already
+beyond the end of the headline."
+ (interactive "P")
+ (if (or (not org-special-ctrl-a/e)
+ (not (org-on-heading-p)))
+ (end-of-line arg)
+ (let ((pos (point)))
+ (beginning-of-line 1)
+ (if (looking-at (org-re ".*?\\([ \t]*\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
+ (if (eq org-special-ctrl-a/e t)
+ (if (or (< pos (match-beginning 1))
+ (= pos (match-end 0)))
+ (goto-char (match-beginning 1))
+ (goto-char (match-end 0)))
+ (if (or (< pos (match-end 0)) (not (eq this-command last-command)))
+ (goto-char (match-end 0))
+ (goto-char (match-beginning 1))))
+ (end-of-line arg)))))
(define-key org-mode-map "\C-a" 'org-beginning-of-line)
+(define-key org-mode-map "\C-e" 'org-end-of-line)
(defun org-invisible-p ()
"Check if point is at a character currently not visible."
@@ -19689,6 +26208,9 @@ to a visible line beginning. This makes the function of C-a more intuitive."
(defalias 'org-back-to-heading 'outline-back-to-heading)
(defalias 'org-on-heading-p 'outline-on-heading-p)
+(defalias 'org-at-heading-p 'outline-on-heading-p)
+(defun org-at-heading-or-item-p ()
+ (or (org-on-heading-p) (org-at-item-p)))
(defun org-on-target-p ()
(or (org-in-regexp org-radio-target-regexp)
@@ -19702,6 +26224,21 @@ With argument, move up ARG levels."
(outline-up-heading-all arg) ; emacs 21 version of outline.el
(outline-up-heading arg t))) ; emacs 22 version of outline.el
+(defun org-up-heading-safe ()
+ "Move to the heading line of which the present line is a subheading.
+This version will not throw an error. It will return the level of the
+headline found, or nil if no higher level is found."
+ (let ((pos (point)) start-level level
+ (re (concat "^" outline-regexp)))
+ (catch 'exit
+ (outline-back-to-heading t)
+ (setq start-level (funcall outline-level))
+ (if (equal start-level 1) (throw 'exit nil))
+ (while (re-search-backward re nil t)
+ (setq level (funcall outline-level))
+ (if (< level start-level) (throw 'exit level)))
+ nil)))
+
(defun org-goto-sibling (&optional previous)
"Goto the next sibling, even if it is invisible.
When PREVIOUS is set, go to the previous sibling instead. Returns t
@@ -19711,16 +26248,16 @@ move point."
(pos (point))
(re (concat "^" outline-regexp))
level l)
- (org-back-to-heading t)
- (setq level (funcall outline-level))
- (catch 'exit
- (or previous (forward-char 1))
- (while (funcall fun re nil t)
- (setq l (funcall outline-level))
- (when (< l level) (goto-char pos) (throw 'exit nil))
- (when (= l level) (goto-char (match-beginning 0)) (throw 'exit t)))
- (goto-char pos)
- nil)))
+ (when (condition-case nil (org-back-to-heading t) (error nil))
+ (setq level (funcall outline-level))
+ (catch 'exit
+ (or previous (forward-char 1))
+ (while (funcall fun re nil t)
+ (setq l (funcall outline-level))
+ (when (< l level) (goto-char pos) (throw 'exit nil))
+ (when (= l level) (goto-char (match-beginning 0)) (throw 'exit t)))
+ (goto-char pos)
+ nil))))
(defun org-show-siblings ()
"Show all siblings of the current headline."
@@ -19747,11 +26284,11 @@ When ENTRY is non-nil, show the entire entry."
(save-excursion
(and (outline-next-heading)
(org-flag-heading nil))))
- (outline-flag-region (max 1 (1- (point)))
+ (outline-flag-region (max (point-min) (1- (point)))
(save-excursion (outline-end-of-heading) (point))
flag))))
-(defun org-end-of-subtree (&optional invisible-OK)
+(defun org-end-of-subtree (&optional invisible-OK to-heading)
;; This is an exact copy of the original function, but it uses
;; `org-back-to-heading', to make it work also in invisible
;; trees. And is uses an invisible-OK argument.
@@ -19763,13 +26300,14 @@ When ENTRY is non-nil, show the entire entry."
(or first (> (funcall outline-level) level)))
(setq first nil)
(outline-next-heading))
- (if (memq (preceding-char) '(?\n ?\^M))
- (progn
- ;; Go to end of line before heading
- (forward-char -1)
- (if (memq (preceding-char) '(?\n ?\^M))
- ;; leave blank line before heading
- (forward-char -1)))))
+ (unless to-heading
+ (if (memq (preceding-char) '(?\n ?\^M))
+ (progn
+ ;; Go to end of line before heading
+ (forward-char -1)
+ (if (memq (preceding-char) '(?\n ?\^M))
+ ;; leave blank line before heading
+ (forward-char -1))))))
(point))
(defun org-show-subtree ()
@@ -19785,13 +26323,17 @@ When ENTRY is non-nil, show the entire entry."
Show the heading too, if it is currently invisible."
(interactive)
(save-excursion
- (org-back-to-heading t)
- (outline-flag-region
- (max 1 (1- (point)))
- (save-excursion
- (re-search-forward (concat "[\r\n]\\(" outline-regexp "\\)") nil 'move)
- (or (match-beginning 1) (point-max)))
- nil)))
+ (condition-case nil
+ (progn
+ (org-back-to-heading t)
+ (outline-flag-region
+ (max (point-min) (1- (point)))
+ (save-excursion
+ (re-search-forward
+ (concat "[\r\n]\\(" outline-regexp "\\)") nil 'move)
+ (or (match-beginning 1) (point-max)))
+ nil))
+ (error nil))))
(defun org-make-options-regexp (kwds)
"Make a regular expression for keyword lines."
@@ -19824,7 +26366,13 @@ Show the heading too, if it is currently invisible."
(remove-hook 'post-command-hook 'org-isearch-post-command 'local)
(org-show-context 'isearch))
-;;;; Repair problems with some other packages
+
+;;;; Address problems with some other packages
+
+;; Make flyspell not check words in links, to not mess up our keymap
+(defun org-mode-flyspell-verify ()
+ "Don't let flyspell put overlays at active buttons."
+ (not (get-text-property (point) 'keymap)))
;; Make `bookmark-jump' show the jump location if it was hidden.
(eval-after-load "bookmark"
@@ -19850,6 +26398,84 @@ Show the heading too, if it is currently invisible."
;;;; Experimental code
+(defun org-closed-in-range ()
+ "Sparse tree of items closed in a certain time range.
+Still experimental, may disappear in the furture."
+ (interactive)
+ ;; Get the time interval from the user.
+ (let* ((time1 (time-to-seconds
+ (org-read-date nil 'to-time nil "Starting date: ")))
+ (time2 (time-to-seconds
+ (org-read-date nil 'to-time nil "End date:")))
+ ;; callback function
+ (callback (lambda ()
+ (let ((time
+ (time-to-seconds
+ (apply 'encode-time
+ (org-parse-time-string
+ (match-string 1))))))
+ ;; check if time in interval
+ (and (>= time time1) (<= time time2))))))
+ ;; make tree, check each match with the callback
+ (org-occur "CLOSED: +\\[\\(.*?\\)\\]" nil callback)))
+
+(defun org-fill-paragraph-experimental (&optional justify)
+ "Re-align a table, pass through to fill-paragraph if no table."
+ (let ((table-p (org-at-table-p))
+ (table.el-p (org-at-table.el-p)))
+ (cond ((equal (char-after (point-at-bol)) ?*) t) ; skip headlines
+ (table.el-p t) ; skip table.el tables
+ (table-p (org-table-align) t) ; align org-mode tables
+ ((save-excursion
+ (let ((pos (1+ (point-at-eol))))
+ (backward-paragraph 1)
+ (re-search-forward "\\\\\\\\[ \t]*$" pos t)))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region (1+ (match-end 0)) (point-max))
+ (fill-paragraph nil)
+ t)))
+ (t nil)))) ; call paragraph-fill
+
+;; FIXME: this needs a much better algorithm
+(defun org-assign-fast-keys (alist)
+ "Assign fast keys to a keyword-key alist.
+Respect keys that are already there."
+ (let (new e k c c1 c2 (char ?a))
+ (while (setq e (pop alist))
+ (cond
+ ((equal e '(:startgroup)) (push e new))
+ ((equal e '(:endgroup)) (push e new))
+ (t
+ (setq k (car e) c2 nil)
+ (if (cdr e)
+ (setq c (cdr e))
+ ;; automatically assign a character.
+ (setq c1 (string-to-char
+ (downcase (substring
+ k (if (= (string-to-char k) ?@) 1 0)))))
+ (if (or (rassoc c1 new) (rassoc c1 alist))
+ (while (or (rassoc char new) (rassoc char alist))
+ (setq char (1+ char)))
+ (setq c2 c1))
+ (setq c (or c2 char)))
+ (push (cons k c) new))))
+ (nreverse new)))
+
+;(defcustom org-read-date-prefer-future nil
+; "Non-nil means, when reading an incomplete date from the user, assume future.
+;This affects the following situations:
+;1. The user give a day, but no month.
+; In this case, if the day number if after today, the current month will
+; be used, otherwise the next month.
+;2. The user gives a month but not a year.
+; In this case, the the given month is after the current month, the current
+; year will be used. Otherwise the next year will be used.;
+;
+;When nil, always the current month and year will be used."
+; :group 'org-time ;????
+; :type 'boolean)
+
;;;; Finish up
@@ -19860,3 +26486,4 @@ Show the heading too, if it is currently invisible."
;; arch-tag: e77da1a7-acc7-4336-b19e-efa25af3f9fd
;;; org.el ends here
+
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index c8a64b8aecc..46becd26dd4 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -702,26 +702,26 @@ While entering the regexp, completion on knows citation keys is possible.
(delete-char 1))
;; Tell AUCTeX
- (when (and reftex-mode
+ (when (and reftex-mode
(fboundp 'LaTeX-add-bibitems)
reftex-plug-into-AUCTeX)
(apply 'LaTeX-add-bibitems (mapcar 'car selected-entries)))
-
+
;; Produce the cite-view strings
(when (and reftex-mode reftex-cache-cite-echo cite-view)
- (mapcar (lambda (entry)
- (reftex-make-cite-echo-string entry docstruct-symbol))
- selected-entries))
+ (mapc (lambda (entry)
+ (reftex-make-cite-echo-string entry docstruct-symbol))
+ selected-entries))
(message ""))
(set-marker reftex-select-return-marker nil)
(reftex-kill-buffer "*RefTeX Select*")
-
+
;; Check if the prefix arg was numeric, and call recursively
(when (integerp arg)
(if (> arg 1)
- (progn
+ (progn
(skip-chars-backward "}")
(decf arg)
(reftex-do-citation arg))
@@ -954,7 +954,7 @@ While entering the regexp, completion on knows citation keys is possible.
reftex-mouse-selected-face
nil))
tmp len)
- (mapcar
+ (mapc
(lambda (x)
(setq tmp (cdr (assoc "&formatted" x))
len (length tmp))
diff --git a/lisp/textmodes/reftex-dcr.el b/lisp/textmodes/reftex-dcr.el
index cfee8b53c0b..86ad54a73fa 100644
--- a/lisp/textmodes/reftex-dcr.el
+++ b/lisp/textmodes/reftex-dcr.el
@@ -352,13 +352,15 @@ will display info in the echo area."
(message "Automatic display of crossref information was turned on")))
(defun reftex-start-itimer-once ()
- (and reftex-mode
+ (and (featurep 'xemacs) reftex-mode
(not (itimer-live-p reftex-auto-view-crossref-timer))
(setq reftex-auto-view-crossref-timer
(start-itimer "RefTeX Idle Timer"
'reftex-view-crossref-when-idle
reftex-idle-time nil t))))
+(declare-function bibtex-beginning-of-entry "bibtex" ())
+
(defun reftex-view-crossref-from-bibtex (&optional arg)
"View location in a LaTeX document which cites the BibTeX entry at point.
Since BibTeX files can be used by many LaTeX documents, this function
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el
index 35714ddb0b2..f430e9bd01a 100644
--- a/lisp/textmodes/reftex-index.el
+++ b/lisp/textmodes/reftex-index.el
@@ -52,7 +52,7 @@ which is part of AUCTeX, the string is first processed with the
(interactive "P")
(let* ((use-default (not (equal arg '(16)))) ; check for double prefix
;; check if we have an active selection
- (active (if (boundp 'zmacs-regions)
+ (active (if (featurep 'xemacs)
(and zmacs-regions (region-exists-p)) ; XEmacs
(and transient-mark-mode mark-active))) ; Emacs
(beg (if active
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el
index 3294c4c22a9..c004602757c 100644
--- a/lisp/textmodes/reftex-ref.el
+++ b/lisp/textmodes/reftex-ref.el
@@ -665,10 +665,10 @@ When called with 2 C-u prefix args, disable magic word recognition."
(save-excursion
(while reftex-buffers-with-changed-invisibility
(set-buffer (car (car reftex-buffers-with-changed-invisibility)))
- (setq buffer-invisibility-spec
+ (setq buffer-invisibility-spec
(cdr (pop reftex-buffers-with-changed-invisibility)))))
- (mapcar (lambda (buf) (and (buffer-live-p buf) (bury-buffer buf)))
- selection-buffers)
+ (mapc (lambda (buf) (and (buffer-live-p buf) (bury-buffer buf)))
+ selection-buffers)
(reftex-kill-temporary-buffers))
;; Add the prefixes, put together the relevant information in the form
;; (LABEL TYPEKEY SEPARATOR) and return a list of those.
diff --git a/lisp/textmodes/reftex-sel.el b/lisp/textmodes/reftex-sel.el
index 4a9ad14510d..d08694c2080 100644
--- a/lisp/textmodes/reftex-sel.el
+++ b/lisp/textmodes/reftex-sel.el
@@ -418,11 +418,11 @@ During a selection process, these are the local bindings.
(set-buffer selection-buffer)
(use-local-map nil)
(remove-hook 'pre-command-hook 'reftex-select-pre-command-hook t)
- (remove-hook 'post-command-hook
+ (remove-hook 'post-command-hook
'reftex-select-post-command-hook t))
;; Kill the mark overlays
- (mapcar (lambda (c) (reftex-delete-overlay (nth 1 c)))
- reftex-select-marked)))))
+ (mapc (lambda (c) (reftex-delete-overlay (nth 1 c)))
+ reftex-select-marked)))))
(set (make-local-variable 'reftex-last-line)
(+ (count-lines (point-min) (point)) (if (bolp) 1 0)))
@@ -643,12 +643,12 @@ Useful for large TOC's."
(and ovl (reftex-delete-overlay ovl))
(setq reftex-select-marked (delq cell reftex-select-marked))
(setq cnt (1+ (length reftex-select-marked)))
- (mapcar (lambda (c)
- (setq sep (nth 2 c))
- (reftex-overlay-put (nth 1 c) 'before-string
- (if sep
- (format "*%c%d* " sep (decf cnt))
- (format "*%d* " (decf cnt)))))
+ (mapc (lambda (c)
+ (setq sep (nth 2 c))
+ (reftex-overlay-put (nth 1 c) 'before-string
+ (if sep
+ (format "*%c%d* " sep (decf cnt))
+ (format "*%d* " (decf cnt)))))
reftex-select-marked)
(message "Entry no longer marked")))
diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el
index 4de409de70c..ae147cc6b97 100644
--- a/lisp/textmodes/reftex-toc.el
+++ b/lisp/textmodes/reftex-toc.el
@@ -618,7 +618,7 @@ point."
nil ; we have permission, do nothing
(error "Abort")) ; abort, we don't have permission
;; Do the changes
- (mapcar 'reftex-toc-promote-action entries)
+ (mapc 'reftex-toc-promote-action entries)
;; Rescan the document and rebuilt the toc buffer
(save-window-excursion
(reftex-toc-Rescan))
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index 375bd2d2652..5383d88c386 100644
--- a/lisp/textmodes/reftex.el
+++ b/lisp/textmodes/reftex.el
@@ -281,6 +281,8 @@
;; Stuff that needs to be there when we use defcustom
(require 'custom)
+(require 'easymenu)
+
(defvar reftex-tables-dirty t
"Flag showing if tables need to be re-computed.")
@@ -336,6 +338,169 @@
(defvar reftex-toc-auto-recenter-timer nil
"The idle timer used to recenter the toc window.")
+;;; =========================================================================
+;;;
+;;; Parser functions
+
+(autoload 'reftex-parse-one "reftex-parse"
+ "Re-parse this file." t)
+(autoload 'reftex-parse-all "reftex-parse"
+ "Re-parse entire document." t)
+(autoload 'reftex-do-parse "reftex-parse")
+(autoload 'reftex-where-am-I "reftex-parse")
+(autoload 'reftex-init-section-numbers "reftex-parse")
+(autoload 'reftex-section-info "reftex-parse")
+(autoload 'reftex-section-number "reftex-parse")
+(autoload 'reftex-what-macro "reftex-parse")
+(autoload 'reftex-what-macro-safe "reftex-parse")
+(autoload 'reftex-index-info "reftex-parse")
+(autoload 'reftex-index-info-safe "reftex-parse")
+(autoload 'reftex-short-context "reftex-parse")
+(autoload 'reftex-what-environment "reftex-parse")
+(autoload 'reftex-what-special-env "reftex-parse")
+(autoload 'reftex-move-over-touching-args "reftex-parse")
+(autoload 'reftex-notice-new "reftex-parse")
+(autoload 'reftex-nth-arg "reftex-parse")
+(autoload 'reftex-locate-bibliography-files "reftex-parse")
+(autoload 'reftex-ensure-index-support "reftex-parse")
+(autoload 'reftex-everything-regexp "reftex-parse")
+
+
+;;; =========================================================================
+;;;
+;;; Labels and References
+
+(autoload 'reftex-label-location "reftex-ref")
+(autoload 'reftex-label-info-update "reftex-ref")
+(autoload 'reftex-label-info "reftex-ref")
+(autoload 'reftex-label "reftex-ref"
+ "Insert a unique label." t)
+(autoload 'reftex-reference "reftex-ref"
+ "Make a LaTeX reference." t)
+(autoload 'reftex-varioref-vref "reftex-ref"
+ "Make a varioref reference." t)
+(autoload 'reftex-fancyref-fref "reftex-ref"
+ "Make a fancyref \\fref reference." t)
+(autoload 'reftex-fancyref-Fref "reftex-ref"
+ "Make a fancyref \\Fref reference." t)
+(autoload 'reftex-show-label-location "reftex-ref")
+(autoload 'reftex-query-label-type "reftex-ref")
+(autoload 'reftex-goto-label "reftex-ref"
+ "Prompt for label name and go to that location." t)
+
+;;; =========================================================================
+;;;
+;;; Table of contents
+
+(autoload 'reftex-toc "reftex-toc"
+ "Show the table of contents for the current document." t)
+(autoload 'reftex-toc-recenter "reftex-toc"
+ "Display the TOC window and highlight line corresponding to current position." t)
+(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc"
+ "Toggle automatic recentering of TOC window." t)
+
+;;; =========================================================================
+;;;
+;;; BibTeX citations.
+
+(autoload 'reftex-citep "reftex-cite")
+(autoload 'reftex-citet "reftex-cite")
+(autoload 'reftex-make-cite-echo-string "reftex-cite")
+(autoload 'reftex-get-bibfile-list "reftex-cite")
+(autoload 'reftex-pop-to-bibtex-entry "reftex-cite")
+(autoload 'reftex-end-of-bib-entry "reftex-cite")
+(autoload 'reftex-parse-bibtex-entry "reftex-cite")
+(autoload 'reftex-citation "reftex-cite"
+ "Make a citation using BibTeX database files." t)
+(autoload 'reftex-default-bibliography "reftex-cite")
+(autoload 'reftex-bib-or-thebib "reftex-cite")
+(autoload 'reftex-create-bibtex-file "reftex-cite")
+
+;;; =========================================================================
+;;;
+;;; Selection
+
+(autoload 'reftex-select-label-mode "reftex-sel")
+(autoload 'reftex-select-bib-mode "reftex-sel")
+(autoload 'reftex-find-start-point "reftex-sel")
+(autoload 'reftex-insert-docstruct "reftex-sel")
+(autoload 'reftex-get-offset "reftex-sel")
+(autoload 'reftex-select-item "reftex-sel")
+
+
+;;; =========================================================================
+;;;
+;;; Index support
+
+(autoload 'reftex-index "reftex-index"
+ "Query for an index macro and insert it along with its argments." t)
+(autoload 'reftex-index-selection-or-word "reftex-index"
+ "Put selection or the word near point into the default index macro." t)
+(autoload 'reftex-index-phrase-selection-or-word "reftex-index"
+ "Put selection or the word near point into Index Phrases File." t)
+(autoload 'reftex-display-index "reftex-index"
+ "Display a buffer with an index compiled from the current document." t)
+(autoload 'reftex-index-visit-phrases-buffer "reftex-index"
+ "Visit the Index Phrases File." t)
+(autoload 'reftex-index-phrases-mode "reftex-index"
+ "Major mode for managing the Index phrases of a LaTeX document." t)
+(autoload 'reftex-index-complete-tag "reftex-index")
+(autoload 'reftex-index-complete-key "reftex-index")
+(autoload 'reftex-index-show-entry "reftex-index")
+(autoload 'reftex-index-select-tag "reftex-index")
+
+
+;;; =========================================================================
+;;;
+;;; View cross references
+
+(autoload 'reftex-view-crossref "reftex-dcr"
+ "View cross reference of \\ref or \\cite macro at point." t)
+(autoload 'reftex-mouse-view-crossref "reftex-dcr"
+ "View cross reference of \\ref or \\cite macro where you click." t)
+(autoload 'reftex-toggle-auto-view-crossref "reftex-dcr")
+(autoload 'reftex-view-crossref-from-bibtex "reftex-dcr"
+ "View location in a LaTeX document which cites the BibTeX entry at point." t)
+
+
+;;; =========================================================================
+;;;
+;;; Operations on entire Multifile documents
+
+(autoload 'reftex-create-tags-file "reftex-global"
+ "Create TAGS file by running `etags' on the current document." t)
+(autoload 'reftex-grep-document "reftex-global"
+ "Run grep query through all files related to this document." t)
+(autoload 'reftex-search-document "reftex-global"
+ "Regexp search through all files of the current TeX document." t)
+(autoload 'reftex-query-replace-document "reftex-global"
+ "Run a query-replace-regexp of FROM with TO over the entire TeX document." t)
+(autoload 'reftex-find-duplicate-labels "reftex-global"
+ "Produce a list of all duplicate labels in the document." t)
+(autoload 'reftex-change-label "reftex-global"
+ "Query replace FROM with TO in all \\label and \\ref commands." t)
+(autoload 'reftex-renumber-simple-labels "reftex-global"
+ "Renumber all simple labels in the document to make them sequentially." t)
+(autoload 'reftex-save-all-document-buffers "reftex-global"
+ "Save all documents associated with the current document." t)
+
+
+;;; =========================================================================
+;;;
+;;; AUCTeX Interface
+
+(autoload 'reftex-arg-label "reftex-auc")
+(autoload 'reftex-arg-cite "reftex-auc")
+(autoload 'reftex-arg-index-tag "reftex-auc")
+(autoload 'reftex-arg-index "reftex-auc")
+(autoload 'reftex-plug-into-AUCTeX "reftex-auc")
+(autoload 'reftex-toggle-plug-into-AUCTeX "reftex-auc"
+ "Toggle Interface between AUCTeX and RefTeX on and off." t)
+(autoload 'reftex-add-label-environments "reftex-auc")
+(autoload 'reftex-add-to-label-alist "reftex-auc")
+(autoload 'reftex-add-section-levels "reftex-auc")
+(autoload 'reftex-notice-new-section "reftex-auc")
+
;;;###autoload
(defun turn-on-reftex ()
"Turn on RefTeX mode."
@@ -859,12 +1024,12 @@ This enforces rescanning the buffer on next use."
(defun reftex-erase-all-selection-and-index-buffers ()
;; Remove all selection buffers associated with current document.
- (mapcar
+ (mapc
(lambda (type)
(reftex-erase-buffer (reftex-make-selection-buffer-name type)))
reftex-typekey-list)
;; Kill all index buffers
- (mapcar
+ (mapc
(lambda (tag)
(reftex-kill-buffer (reftex-make-index-buffer-name tag)))
(cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol)))))
@@ -1339,7 +1504,7 @@ Valid actions are: readable, restore, read, kill, write."
(user-login-name) (user-full-name)))
(insert "(set reftex-docstruct-symbol '(\n\n")
(let ((standard-output (current-buffer)))
- (mapcar
+ (mapc
(lambda (x)
(cond ((eq (car x) 'toc)
;; A toc entry. Do not save the marker.
@@ -1606,169 +1771,6 @@ When DIE is non-nil, throw an error if file not found."
;;; =========================================================================
;;;
-;;; Parser functions
-
-(autoload 'reftex-parse-one "reftex-parse"
- "Re-parse this file." t)
-(autoload 'reftex-parse-all "reftex-parse"
- "Re-parse entire document." t)
-(autoload 'reftex-do-parse "reftex-parse")
-(autoload 'reftex-where-am-I "reftex-parse")
-(autoload 'reftex-init-section-numbers "reftex-parse")
-(autoload 'reftex-section-info "reftex-parse")
-(autoload 'reftex-section-number "reftex-parse")
-(autoload 'reftex-what-macro "reftex-parse")
-(autoload 'reftex-what-macro-safe "reftex-parse")
-(autoload 'reftex-index-info "reftex-parse")
-(autoload 'reftex-index-info-safe "reftex-parse")
-(autoload 'reftex-short-context "reftex-parse")
-(autoload 'reftex-what-environment "reftex-parse")
-(autoload 'reftex-what-special-env "reftex-parse")
-(autoload 'reftex-move-over-touching-args "reftex-parse")
-(autoload 'reftex-notice-new "reftex-parse")
-(autoload 'reftex-nth-arg "reftex-parse")
-(autoload 'reftex-locate-bibliography-files "reftex-parse")
-(autoload 'reftex-ensure-index-support "reftex-parse")
-(autoload 'reftex-everything-regexp "reftex-parse")
-
-
-;;; =========================================================================
-;;;
-;;; Labels and References
-
-(autoload 'reftex-label-location "reftex-ref")
-(autoload 'reftex-label-info-update "reftex-ref")
-(autoload 'reftex-label-info "reftex-ref")
-(autoload 'reftex-label "reftex-ref"
- "Insert a unique label." t)
-(autoload 'reftex-reference "reftex-ref"
- "Make a LaTeX reference." t)
-(autoload 'reftex-varioref-vref "reftex-ref"
- "Make a varioref reference." t)
-(autoload 'reftex-fancyref-fref "reftex-ref"
- "Make a fancyref \\fref reference." t)
-(autoload 'reftex-fancyref-Fref "reftex-ref"
- "Make a fancyref \\Fref reference." t)
-(autoload 'reftex-show-label-location "reftex-ref")
-(autoload 'reftex-query-label-type "reftex-ref")
-(autoload 'reftex-goto-label "reftex-ref"
- "Prompt for label name and go to that location." t)
-
-;;; =========================================================================
-;;;
-;;; Table of contents
-
-(autoload 'reftex-toc "reftex-toc"
- "Show the table of contents for the current document." t)
-(autoload 'reftex-toc-recenter "reftex-toc"
- "Display the TOC window and highlight line corresponding to current position." t)
-(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc"
- "Toggle automatic recentering of TOC window." t)
-
-;;; =========================================================================
-;;;
-;;; BibTeX citations.
-
-(autoload 'reftex-citep "reftex-cite")
-(autoload 'reftex-citet "reftex-cite")
-(autoload 'reftex-make-cite-echo-string "reftex-cite")
-(autoload 'reftex-get-bibfile-list "reftex-cite")
-(autoload 'reftex-pop-to-bibtex-entry "reftex-cite")
-(autoload 'reftex-end-of-bib-entry "reftex-cite")
-(autoload 'reftex-parse-bibtex-entry "reftex-cite")
-(autoload 'reftex-citation "reftex-cite"
- "Make a citation using BibTeX database files." t)
-(autoload 'reftex-default-bibliography "reftex-cite")
-(autoload 'reftex-bib-or-thebib "reftex-cite")
-(autoload 'reftex-create-bibtex-file "reftex-cite")
-
-;;; =========================================================================
-;;;
-;;; Selection
-
-(autoload 'reftex-select-label-mode "reftex-sel")
-(autoload 'reftex-select-bib-mode "reftex-sel")
-(autoload 'reftex-find-start-point "reftex-sel")
-(autoload 'reftex-insert-docstruct "reftex-sel")
-(autoload 'reftex-get-offset "reftex-sel")
-(autoload 'reftex-select-item "reftex-sel")
-
-
-;;; =========================================================================
-;;;
-;;; Index support
-
-(autoload 'reftex-index "reftex-index"
- "Query for an index macro and insert it along with its argments." t)
-(autoload 'reftex-index-selection-or-word "reftex-index"
- "Put selection or the word near point into the default index macro." t)
-(autoload 'reftex-index-phrase-selection-or-word "reftex-index"
- "Put selection or the word near point into Index Phrases File." t)
-(autoload 'reftex-display-index "reftex-index"
- "Display a buffer with an index compiled from the current document." t)
-(autoload 'reftex-index-visit-phrases-buffer "reftex-index"
- "Visit the Index Phrases File." t)
-(autoload 'reftex-index-phrases-mode "reftex-index"
- "Major mode for managing the Index phrases of a LaTeX document." t)
-(autoload 'reftex-index-complete-tag "reftex-index")
-(autoload 'reftex-index-complete-key "reftex-index")
-(autoload 'reftex-index-show-entry "reftex-index")
-(autoload 'reftex-index-select-tag "reftex-index")
-
-
-;;; =========================================================================
-;;;
-;;; View cross references
-
-(autoload 'reftex-view-crossref "reftex-dcr"
- "View cross reference of \\ref or \\cite macro at point." t)
-(autoload 'reftex-mouse-view-crossref "reftex-dcr"
- "View cross reference of \\ref or \\cite macro where you click." t)
-(autoload 'reftex-toggle-auto-view-crossref "reftex-dcr")
-(autoload 'reftex-view-crossref-from-bibtex "reftex-dcr"
- "View location in a LaTeX document which cites the BibTeX entry at point." t)
-
-
-;;; =========================================================================
-;;;
-;;; Operations on entire Multifile documents
-
-(autoload 'reftex-create-tags-file "reftex-global"
- "Create TAGS file by running `etags' on the current document." t)
-(autoload 'reftex-grep-document "reftex-global"
- "Run grep query through all files related to this document." t)
-(autoload 'reftex-search-document "reftex-global"
- "Regexp search through all files of the current TeX document." t)
-(autoload 'reftex-query-replace-document "reftex-global"
- "Run a query-replace-regexp of FROM with TO over the entire TeX document." t)
-(autoload 'reftex-find-duplicate-labels "reftex-global"
- "Produce a list of all duplicate labels in the document." t)
-(autoload 'reftex-change-label "reftex-global"
- "Query replace FROM with TO in all \\label and \\ref commands." t)
-(autoload 'reftex-renumber-simple-labels "reftex-global"
- "Renumber all simple labels in the document to make them sequentially." t)
-(autoload 'reftex-save-all-document-buffers "reftex-global"
- "Save all documents associated with the current document." t)
-
-
-;;; =========================================================================
-;;;
-;;; AUCTeX Interface
-
-(autoload 'reftex-arg-label "reftex-auc")
-(autoload 'reftex-arg-cite "reftex-auc")
-(autoload 'reftex-arg-index-tag "reftex-auc")
-(autoload 'reftex-arg-index "reftex-auc")
-(autoload 'reftex-plug-into-AUCTeX "reftex-auc")
-(autoload 'reftex-toggle-plug-into-AUCTeX "reftex-auc"
- "Toggle Interface between AUCTeX and RefTeX on and off." t)
-(autoload 'reftex-add-label-environments "reftex-auc")
-(autoload 'reftex-add-to-label-alist "reftex-auc")
-(autoload 'reftex-add-section-levels "reftex-auc")
-(autoload 'reftex-notice-new-section "reftex-auc")
-
-;;; =========================================================================
-;;;
;;; Some generally useful functions
(defun reftex-typekey-check (typekey conf-variable &optional n)
@@ -2332,16 +2334,14 @@ IGNORE-WORDS List of words which should be removed from the string."
(if (facep face) (throw 'exit face)))))))
;; Highlighting uses overlays. For XEmacs, we use extends.
-(if (featurep 'xemacs)
- (progn
- (defalias 'reftex-make-overlay 'make-extent)
- (defalias 'reftex-overlay-put 'set-extent-property)
- (defalias 'reftex-move-overlay 'set-extent-endpoints)
- (defalias 'reftex-delete-overlay 'detach-extent))
- (defalias 'reftex-make-overlay 'make-overlay)
- (defalias 'reftex-overlay-put 'overlay-put)
- (defalias 'reftex-move-overlay 'move-overlay)
- (defalias 'reftex-delete-overlay 'delete-overlay))
+(defalias 'reftex-make-overlay
+ (if (featurep 'xemacs) 'make-extent 'make-overlay))
+(defalias 'reftex-overlay-put
+ (if (featurep 'xemacs) 'set-extent-property 'overlay-put))
+(defalias 'reftex-move-overlay
+ (if (featurep 'xemacs) 'set-extent-endpoints 'move-overlay))
+(defalias 'reftex-delete-overlay
+ (if (featurep 'xemacs) 'detach-extent 'delete-overlay))
;; We keep a vector with several different overlays to do our highlighting.
(defvar reftex-highlight-overlays [nil nil nil])
@@ -2425,8 +2425,6 @@ IGNORE-WORDS List of words which should be removed from the string."
(defvar reftex-isearch-minor-mode nil)
(make-variable-buffer-local 'reftex-isearch-minor-mode)
-(require 'easymenu)
-
(easy-menu-define reftex-mode-menu reftex-mode-map
"Menu used in RefTeX mode"
`("Ref"
@@ -2583,7 +2581,7 @@ IGNORE-WORDS List of words which should be removed from the string."
"Read documentation for RefTeX in the info system.
With optional NODE, go directly to that node."
(interactive)
- (require 'info)
+ (eval-and-compile (require 'info))
(Info-goto-node (format "(reftex)%s" (or node ""))))
;;; Install the kill-buffer and kill-emacs hooks ------------------------------
diff --git a/lisp/textmodes/remember-diary.el b/lisp/textmodes/remember-diary.el
new file mode 100644
index 00000000000..e35909fb589
--- /dev/null
+++ b/lisp/textmodes/remember-diary.el
@@ -0,0 +1,94 @@
+;;; remember-diary --- extracting diary information from buffers
+
+;; Copyright (C) 1999, 2000, 2001, 2004, 2007 Free Software Foundation, Inc.
+
+;; Author: Sacha Chua <sacha@free.net.ph>
+;; Created: 24 Mar 2004
+;; Keywords: data memory todo pim diary
+;; URL: http://gna.org/projects/remember-el/
+
+;; 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 3, 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:
+
+;; This module recognizes entries of the form
+;;
+;; DIARY: ....
+;;
+;; and puts them in your ~/.diary (or remember-diary-file) together
+;; with an annotation. Planner-style dates (yyyy.mm.dd) are converted
+;; to yyyy-mm-dd so that diary can understand them.
+;;
+;; For example:
+;;
+;; DIARY: 2003.08.12 Sacha's birthday
+;;
+;; is stored as
+;;
+;; 2003.08.12 Sacha's birthday [[/home/sacha/notebook/emacs/emacs-wiki/remember-diary.el]]
+;;
+;; To use, add the following to your .emacs:
+;;
+;; (require 'remember-diary)
+;; ;; This should be before other entries that may return t
+;; (add-to-list 'remember-handler-functions 'remember-diary-extract-entries)
+;;
+
+(require 'remember)
+(require 'diary-lib)
+
+;;; Code:
+(defcustom remember-diary-file diary-file
+ "*File for extracted diary entries."
+ :type 'file
+ :group 'remember)
+
+(defun remember-diary-convert-entry (entry)
+ "Translate MSG to an entry readable by diary."
+ (save-match-data
+ (when remember-annotation
+ (setq entry (concat entry " " remember-annotation)))
+ (if (string-match "\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)" entry)
+ (replace-match
+ (if european-calendar-style
+ (concat (match-string 3 entry) "/"
+ (match-string 2 entry) "/"
+ (match-string 1 entry))
+ (concat (match-string 2 entry) "/"
+ (match-string 3 entry) "/"
+ (match-string 1 entry)))
+ t t entry)
+ entry)))
+
+;;;###autoload
+(defun remember-diary-extract-entries ()
+ "Extract diary entries from the region."
+ (save-excursion
+ (goto-char (point-min))
+ (let (list)
+ (while (re-search-forward "^DIARY:\\s-*\\(.+\\)" nil t)
+ (add-to-list 'list (remember-diary-convert-entry (match-string 1))))
+ (when list
+ (make-diary-entry (mapconcat 'identity list "\n")
+ nil remember-diary-file))
+ nil))) ;; Continue processing
+
+(provide 'remember-diary)
+
+;; arch-tag: bda8a3f8-9a9b-46aa-8493-d71d7f1e445d
+;;; remember-diary.el ends here
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
new file mode 100644
index 00000000000..7249f1d4c57
--- /dev/null
+++ b/lisp/textmodes/remember.el
@@ -0,0 +1,471 @@
+;;; remember --- a mode for quickly jotting down things to remember
+
+;; Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+;; 2007 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@gnu.org>
+;; Created: 29 Mar 1999
+;; Version: 1.9
+;; Keywords: data memory todo pim
+;; URL: http://gna.org/projects/remember-el/
+
+;; 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 3, 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:
+
+;; * The idea
+;;
+;; Todo lists, schedules, phone databases... everything we use
+;; databases for is really just a way to extend the power of our
+;; memory. To be able to remember what our conscious mind may not
+;; currently have access to.
+;;
+;; There are many different databases out there -- and good ones --
+;; which this mode is not trying to replace. Rather, it's how that
+;; data gets there that's the question. Most of the time, we just
+;; want to say "Remember so-and-so's phone number, or that I have to
+;; buy dinner for the cats tonight." That's the FACT. How it's
+;; stored is really the computer's problem. But at this point in
+;; time, it's most definitely also the user's problem, and sometimes
+;; so laboriously so that people just let data slip, rather than
+;; expend the effort to record it.
+;;
+;; "Remember" is a mode for remembering data. It uses whatever
+;; back-end is appropriate to record and correlate the data, but it's
+;; main intention is to allow you to express as _little_ structure as
+;; possible up front. If you later want to express more powerful
+;; relationships between your data, or state assumptions that were at
+;; first too implicit to be recognized, you can "study" the data later
+;; and rearrange it. But the initial "just remember this" impulse
+;; should be as close to simply throwing the data at Emacs as
+;; possible.
+;;
+;; * Implementation
+;;
+;; Hyperbole, as a data presentation tool, always struck me as being
+;; very powerful, but it seemed to require a lot of "front-end" work
+;; before that data was really available. The problem with BBDB, or
+;; keeping up a Bibl-mode file, is that you have to use different
+;; functions to record the data, and it always takes time to stop what
+;; you're doing, format the data in the manner expected by that
+;; particular data interface, and then resume your work.
+;;
+;; With "remember", you just hit `M-x remember' (you'd probably want
+;; to bind this to an easily accessible keystroke, like C-x M-r), slam
+;; in your text however you like, and then hit C-c C-c. It will file
+;; the data away for later retrieval, and possibly indexing.
+;;
+;; Indexing is to data what "studying" is in the real world. What you
+;; do when you study (or lucubrate, for some of us) is to realize
+;; certain relationships implicit in the data, so that you can make
+;; use of those relationships. Expressing that a certain quote you
+;; remembered was a religious quote, and that you want the ability to
+;; pull up all quotes of a religious nature, is what studying does.
+;; This is a more labor intensive task than the original remembering
+;; of the data, and it's typical in real life to set aside a special
+;; period of time for doing this work.
+;;
+;; "Remember" works in the same way. When you enter data, either by
+;; typing it into a buffer, or using the contents of the selected
+;; region, it will store that data -- unindexed, uninterpreted -- in a
+;; data pool. It will also try to remember as much context
+;; information as possible (any text properties that were set, where
+;; you copied it from, when, how, etc). Later, you can walk through
+;; your accumulated set of data (both organized, and unorganized) and
+;; easily begin moving things around, and making annotations that will
+;; express the full meaning of that data, as far as you know it.
+;;
+;; Obviously this latter stage is more user-interface intensive, and
+;; it would be nice if "remember" could do it as elegantly as
+;; possible, rather than requiring a billion keystrokes to reorganize
+;; your hierarchy. Well, as the future arrives, hopefully experience
+;; and user feedback will help to make this as intuitive a tool as
+;; possible.
+;;
+;; * Future Goals
+;;
+;; This tool hopes to track (and by doing it with as little new code
+;; as possible):
+;;
+;; - The raw data that gets entered
+;;
+;; - The relationships between that data (either determined
+;; implicitly by parsing the input, or explicitly by the user's
+;; studying the data).
+;;
+;; - Revisioning of the data
+;;
+;; - Where it came from, and any context information that can be
+;; programmatically determined.
+;;
+;; - Allowing particular views of the initially amorphous data pool
+;; (ala the Xanadu concept).
+;;
+;; - Storage of the data in a manner most appopriate to that data,
+;; such as keeping address-book type information in BBDB, etc.
+;;
+;; * Using "remember"
+;;
+;; As a rough beginning, what I do is to keep my .notes file in
+;; outline-mode format, with a final entry called "* Raw data". Then,
+;; at intervals, I can move the data that gets appended there into
+;; other places. But certainly this should evolve into an intuitive
+;; mechanism for shuffling data off to its appropriate corner of the
+;; universe.
+;;
+;; To map the primary remember function to the keystroke F8, do the
+;; following.
+;;
+;; (autoload 'remember "remember" nil t)
+;;
+;; (define-key global-map [f8] 'remember)
+;;
+;; * Feedback
+;;
+;; If Emacs could become a more intelligent data store, where
+;; brainstorming would focus on the IDEAS involved -- rather than the
+;; structuring and format of those ideas, or having to stop your
+;; current flow of work in order to record them -- it would map much
+;; more closely to how the mind (well, at least mine) works, and hence
+;; would eliminate that very manual-ness which computers from the very
+;; beginning have been championed as being able to reduce.
+;;
+;; Have you ever noticed that having a laptop to write on doesn't
+;; _actually_ increase the amount of quality material that you turn
+;; out, in the long run? Perhaps its because the time we save
+;; electronically in one way, we're losing electronically in another;
+;; the tool should never dominate one's focus. As the mystic
+;; Faridu'd-Din `Attar wrote: "Be occupied as little as possible with
+;; things of the outer world but much with things of the inner world;
+;; then right action will overcome inaction."
+
+;;; History:
+
+;;; Code:
+
+(provide 'remember)
+
+(defconst remember-version "1.9"
+ "This version of remember.")
+
+(defgroup remember nil
+ "A mode to remember information."
+ :group 'data)
+
+;;; User Variables:
+
+(defcustom remember-mode-hook nil
+ "Functions run upon entering `remember-mode'."
+ :type 'hook
+ :options '(flyspell-mode turn-on-auto-fill org-remember-apply-template)
+ :group 'remember)
+
+(defcustom remember-in-new-frame nil
+ "Non-nil means use a separate frame for capturing remember data."
+ :type 'boolean
+ :group 'remember)
+
+(defcustom remember-register ?R
+ "The register in which the window configuration is stored."
+ :type 'character
+ :group 'remember)
+
+(defcustom remember-filter-functions nil
+ "*Functions run to filter remember data.
+All functions are run in the remember buffer."
+ :type 'hook
+ :group 'remember)
+
+(defcustom remember-handler-functions '(remember-append-to-file)
+ "*Functions run to process remember data.
+Each function is called with the current buffer narrowed to what the
+user wants remembered.
+If any function returns non-nil, the data is assumed to have been
+recorded somewhere by that function. "
+ :type 'hook
+ :options '(remember-store-in-mailbox
+ remember-append-to-file
+ remember-diary-extract-entries
+ org-remember-handler)
+ :group 'remember)
+
+(defcustom remember-all-handler-functions nil
+ "If non-nil every function in `remember-handler-functions' is
+called."
+ :type 'boolean
+ :group 'remember)
+
+;;; Internal Variables:
+
+(defvar remember-buffer "*Remember*"
+ "The name of the remember data entry buffer.")
+
+(defcustom remember-save-after-remembering t
+ "*Non-nil means automatically save after remembering."
+ :type 'boolean
+ :group 'remember)
+
+;;; User Functions:
+
+(defcustom remember-annotation-functions '(buffer-file-name)
+ "Hook that returns an annotation to be inserted into the remember buffer."
+ :type 'hook
+ :options '(org-remember-annotation buffer-file-name)
+ :group 'remember)
+
+(defvar remember-annotation nil
+ "Current annotation.")
+(defvar remember-initial-contents nil
+ "Initial contents to place into *Remember* buffer.")
+
+(defcustom remember-before-remember-hook nil
+ "Functions run before switching to the *Remember* buffer."
+ :type 'hook
+ :group 'remember)
+
+(defcustom remember-run-all-annotation-functions-flag nil
+ "Non-nil means use all annotations returned by
+`remember-annotation-functions'."
+ :type 'boolean
+ :group 'remember)
+
+;;;###autoload
+(defun remember (&optional initial)
+ "Remember an arbitrary piece of data.
+INITIAL is the text to initially place in the *Remember* buffer,
+or nil to bring up a blank *Remember* buffer.
+
+With a prefix, use the region as INITIAL."
+ (interactive
+ (list (when current-prefix-arg
+ (buffer-substring (point) (mark)))))
+ (funcall (if remember-in-new-frame
+ #'frame-configuration-to-register
+ #'window-configuration-to-register) remember-register)
+ (let* ((annotation
+ (if remember-run-all-annotation-functions-flag
+ (mapconcat 'identity
+ (delq nil
+ (mapcar 'funcall remember-annotation-functions))
+ "\n")
+ (run-hook-with-args-until-success
+ 'remember-annotation-functions)))
+ (buf (get-buffer-create remember-buffer)))
+ (run-hooks 'remember-before-remember-hook)
+ (funcall (if remember-in-new-frame
+ #'switch-to-buffer-other-frame
+ #'switch-to-buffer-other-window) buf)
+ (if remember-in-new-frame
+ (set-window-dedicated-p
+ (get-buffer-window (current-buffer) (selected-frame)) t))
+ (remember-mode)
+ (when (= (point-max) (point-min))
+ (when initial (insert initial))
+ (setq remember-annotation annotation)
+ (when remember-initial-contents (insert remember-initial-contents))
+ (when (and (stringp annotation)
+ (not (equal annotation "")))
+ (insert "\n\n" annotation))
+ (setq remember-initial-contents nil)
+ (goto-char (point-min)))
+ (message "Use C-c C-c to remember the data.")))
+
+;;;###autoload
+(defun remember-other-frame (&optional initial)
+ "Call `remember' in another frame."
+ (interactive
+ (list (when current-prefix-arg
+ (buffer-substring (point) (mark)))))
+ (let ((remember-in-new-frame t))
+ (remember initial)))
+
+(defsubst remember-time-to-seconds (time)
+ "Convert TIME to a floating point number."
+ (+ (* (car time) 65536.0)
+ (cadr time)
+ (/ (or (car (cdr (cdr time))) 0) 1000000.0)))
+
+(defsubst remember-mail-date (&optional rfc822-p)
+ "Return a simple date. Nothing fancy."
+ (if rfc822-p
+ (format-time-string "%a, %e %b %Y %T %z" (current-time))
+ (format-time-string "%c" (current-time))))
+
+(defun remember-buffer-desc ()
+ "Using the first line of the current buffer, create a short description."
+ (buffer-substring (point-min)
+ (save-excursion
+ (goto-char (point-min))
+ (end-of-line)
+ (if (> (- (point) (point-min)) 60)
+ (goto-char (+ (point-min) 60)))
+ (point))))
+
+;; Remembering to UNIX mailboxes
+
+(defcustom remember-mailbox "~/Mail/remember"
+ "*The file in which to store remember data as mail."
+ :type 'file
+ :group 'remember)
+
+(defcustom remember-default-priority "medium"
+ "*The default priority for remembered mail messages."
+ :type 'string
+ :group 'remember)
+
+(defun remember-store-in-mailbox ()
+ "Store remember data as if it were incoming mail.
+In which case `remember-mailbox' should be the name of the mailbox.
+Each piece of psuedo-mail created will have an `X-Todo-Priority'
+field, for the purpose of appropriate splitting."
+ (let ((who (read-string "Who is this item related to? "))
+ (moment
+ (format "%.0f" (remember-time-to-seconds (current-time))))
+ (desc (remember-buffer-desc))
+ (text (buffer-string)))
+ (with-temp-buffer
+ (insert (format "
+From %s %s
+Date: %s
+From: %s
+Message-Id: <remember-%s@%s>
+X-Todo-Priority: %s
+To: %s <%s>
+Subject: %s\n\n"
+ (user-login-name)
+ (remember-mail-date)
+ (remember-mail-date t)
+ who
+ moment (system-name)
+ remember-default-priority
+ (user-full-name) user-mail-address
+ desc))
+ (let ((here (point)))
+ (insert text)
+ (unless (bolp)
+ (insert "\n"))
+ (insert "\n")
+ (goto-char here)
+ (while (re-search-forward "^\\(From[: ]\\)" nil t)
+ (replace-match ">\\1")))
+ (append-to-file (point-min) (point-max) remember-mailbox)
+ t)))
+
+;; Remembering to plain files
+
+(defcustom remember-data-file "~/.notes"
+ "*The file in which to store unprocessed data."
+ :type 'file
+ :group 'remember)
+
+(defcustom remember-leader-text "** "
+ "*The text used to begin each remember item."
+ :type 'string
+ :group 'remember)
+
+(defun remember-append-to-file ()
+ "Remember, with description DESC, the given TEXT."
+ (let ((text (buffer-string))
+ (desc (remember-buffer-desc)))
+ (with-temp-buffer
+ (insert "\n" remember-leader-text (current-time-string)
+ " (" desc ")\n\n" text)
+ (if (not (bolp))
+ (insert "\n"))
+ (if (find-buffer-visiting remember-data-file)
+ (let ((remember-text (buffer-string)))
+ (set-buffer (get-file-buffer remember-data-file))
+ (save-excursion
+ (goto-char (point-max))
+ (insert remember-text)
+ (when remember-save-after-remembering (save-buffer))))
+ (append-to-file (point-min) (point-max) remember-data-file)))))
+
+(defun remember-region (&optional beg end)
+ "Remember the data from BEG to END.
+It is called from within the *Remember* buffer to save the text
+that was entered,
+
+If BEG and END are nil, the entire buffer will be remembered.
+
+If you want to remember a region, supply a universal prefix to
+`remember' instead. For example: C-u M-x remember RET."
+ ;; Sacha: I have no idea where remember.el gets this context information, but
+ ;; you can just use remember-annotation-functions.
+ (interactive)
+ (let ((b (or beg (min (point) (or (mark) (point-min)))))
+ (e (or end (max (point) (or (mark) (point-max))))))
+ (save-restriction
+ (narrow-to-region b e)
+ (if remember-all-handler-functions
+ (run-hooks 'remember-handler-functions)
+ (run-hook-with-args-until-success 'remember-handler-functions))
+ (remember-destroy))))
+
+;;;###autoload
+(defun remember-clipboard ()
+ "Remember the contents of the current clipboard.
+Most useful for remembering things from Netscape or other X Windows
+application."
+ (interactive)
+ (remember (current-kill 0)))
+
+(defun remember-finalize ()
+ "Remember the contents of the current buffer."
+ (interactive)
+ (remember-region (point-min) (point-max)))
+
+;; Org needs this
+(define-obsolete-function-alias 'remember-buffer 'remember-finalize)
+
+(defun remember-destroy ()
+ "Destroy the current *Remember* buffer."
+ (interactive)
+ (when (equal remember-buffer (buffer-name))
+ (kill-buffer (current-buffer))
+ (jump-to-register remember-register)))
+
+;;; Internal Functions:
+
+(defvar remember-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "\C-x\C-s" 'remember-finalize)
+ (define-key map "\C-c\C-c" 'remember-finalize)
+ (define-key map "\C-c\C-k" 'remember-destroy)
+
+ map)
+ "Keymap used in Remember mode.")
+
+(defun remember-mode ()
+ "Major mode for output from \\[remember].
+This buffer is used to collect data that you want to remember.
+
+Just hit `C-c C-c' when you're done entering, and it will file
+the data away for latter retrieval, and possible indexing.
+
+\\{remember-mode-map}"
+ (interactive)
+ (kill-all-local-variables)
+ (indented-text-mode)
+ (use-local-map remember-mode-map)
+ (setq major-mode 'remember-mode
+ mode-name "Remember")
+ (run-hooks 'remember-mode-hook))
+
+;; arch-tag: 59312a05-06c7-4da1-b6f7-5ea41c9d5577
+;;; remember.el ends here
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 9da49fcc599..245ffc47908 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -45,12 +45,12 @@
:group 'languages)
(defcustom sgml-basic-offset 2
- "*Specifies the basic indentation level for `sgml-indent-line'."
+ "Specifies the basic indentation level for `sgml-indent-line'."
:type 'integer
:group 'sgml)
(defcustom sgml-transformation-function 'identity
- "*Default value for `skeleton-transformation-function' in SGML mode."
+ "Default value for `skeleton-transformation-function' in SGML mode."
:type 'function
:group 'sgml)
@@ -166,7 +166,7 @@ This takes effect when first loading the `sgml-mode' library.")
"Syntax table used to parse SGML tags.")
(defcustom sgml-name-8bit-mode nil
- "*When non-nil, insert non-ASCII characters as named entities."
+ "When non-nil, insert non-ASCII characters as named entities."
:type 'boolean
:group 'sgml)
@@ -225,7 +225,7 @@ Currently, only Latin-1 characters are supported.")
;; The -s option suppresses output.
(defcustom sgml-validate-command "nsgmls -s" ; replaced old `sgmls'
- "*The command to validate an SGML document.
+ "The command to validate an SGML document.
The file name of current buffer file name will be appended to this,
separated by a space."
:type 'string
@@ -238,7 +238,7 @@ separated by a space."
;; I doubt that null end tags are used much for large elements,
;; so use a small distance here.
(defcustom sgml-slash-distance 1000
- "*If non-nil, is the maximum distance to search for matching `/'."
+ "If non-nil, is the maximum distance to search for matching `/'."
:type '(choice (const nil) integer)
:group 'sgml)
@@ -281,8 +281,8 @@ Any terminating `>' or `/' is not matched.")
. (cons (concat "<"
(regexp-opt (mapcar 'car sgml-tag-face-alist) t)
"\\([ \t][^>]*\\)?>\\([^<]+\\)</\\1>")
- '(3 (cdr (assoc (downcase (match-string 1))
- sgml-tag-face-alist)) prepend))))))
+ '(3 (cdr (assoc-string (match-string 1) sgml-tag-face-alist t))
+ prepend))))))
;; for font-lock, but must be defvar'ed after
;; sgml-font-lock-keywords-1 and sgml-font-lock-keywords-2 above
@@ -318,7 +318,7 @@ When more these are fontified together with `sgml-font-lock-keywords'.")
("!doctype")
("!element")
("!entity"))
- "*Alist of tag names for completing read and insertion rules.
+ "Alist of tag names for completing read and insertion rules.
This alist is made up as
((\"tag\" . TAGRULE)
@@ -348,15 +348,14 @@ an optional alist of possible values."
("!doctype" . "Document type (DTD) declaration")
("!element" . "Tag declaration")
("!entity" . "Entity (macro) declaration"))
- "*Alist of tag name and short description."
+ "Alist of tag name and short description."
:type '(repeat (cons (string :tag "Tag Name")
(string :tag "Description")))
:group 'sgml)
(defcustom sgml-xml-mode nil
- "*When non-nil, tag insertion functions will be XML-compliant.
-If this variable is customized, the custom value is used always.
-Otherwise, it is set to be buffer-local when the file has
+ "When non-nil, tag insertion functions will be XML-compliant.
+It is set to be buffer-local when the file has
a DOCTYPE or an XML declaration."
:type 'boolean
:version "22.1"
@@ -369,20 +368,19 @@ a DOCTYPE or an XML declaration."
"List of tags whose !ELEMENT definition says the end-tag is optional.")
(defun sgml-xml-guess ()
- "Guess whether the current buffer is XML."
+ "Guess whether the current buffer is XML. Return non-nil if so."
(save-excursion
(goto-char (point-min))
- (when (or (string= "xml" (file-name-extension (or buffer-file-name "")))
- (looking-at "\\s-*<\\?xml")
- (when (re-search-forward
- (eval-when-compile
+ (or (string= "xml" (file-name-extension (or buffer-file-name "")))
+ (looking-at "\\s-*<\\?xml")
+ (when (re-search-forward
+ (eval-when-compile
(mapconcat 'identity
'("<!DOCTYPE" "\\(\\w+\\)" "\\(\\w+\\)"
- "\"\\([^\"]+\\)\"" "\"\\([^\"]+\\)\"")
- "\\s-+"))
- nil t)
- (string-match "X\\(HT\\)?ML" (match-string 3))))
- (set (make-local-variable 'sgml-xml-mode) t))))
+ "\"\\([^\"]+\\)\"" "\"\\([^\"]+\\)\"")
+ "\\s-+"))
+ nil t)
+ (string-match "X\\(HT\\)?ML" (match-string 3))))))
(defvar v2) ; free for skeleton
@@ -410,7 +408,7 @@ a DOCTYPE or an XML declaration."
(eq (char-before) ?<))))
;;;###autoload
-(define-derived-mode sgml-mode text-mode "SGML"
+(define-derived-mode sgml-mode text-mode '(sgml-xml-mode "XML" "SGML")
"Major mode for editing SGML documents.
Makes > match <.
Keys <, &, SPC within <>, \", / and ' can be electric depending on
@@ -462,9 +460,9 @@ Do \\[describe-key] on the following bindings to discover what they do.
. sgml-font-lock-syntactic-keywords)))
(set (make-local-variable 'facemenu-add-face-function)
'sgml-mode-facemenu-add-face-function)
- (sgml-xml-guess)
+ (set (make-local-variable 'sgml-xml-mode) (sgml-xml-guess))
(if sgml-xml-mode
- (setq mode-name "XML")
+ ()
(set (make-local-variable 'skeleton-transformation-function)
sgml-transformation-function))
;; This will allow existing comments within declarations to be
@@ -737,22 +735,93 @@ With prefix argument, only self insert."
(defun sgml-skip-tag-backward (arg)
"Skip to beginning of tag or matching opening tag if present.
-With prefix argument ARG, repeat this ARG times."
+With prefix argument ARG, repeat this ARG times.
+Return non-nil if we skipped over matched tags."
(interactive "p")
;; FIXME: use sgml-get-context or something similar.
- (while (>= arg 1)
- (search-backward "<" nil t)
- (if (looking-at "</\\([^ \n\t>]+\\)")
- ;; end tag, skip any nested pairs
- (let ((case-fold-search t)
- (re (concat "</?" (regexp-quote (match-string 1))
- ;; Ignore empty tags like <foo/>.
- "\\([^>]*[^/>]\\)?>")))
- (while (and (re-search-backward re nil t)
- (eq (char-after (1+ (point))) ?/))
- (forward-char 1)
- (sgml-skip-tag-backward 1))))
- (setq arg (1- arg))))
+ (let ((return t))
+ (while (>= arg 1)
+ (search-backward "<" nil t)
+ (if (looking-at "</\\([^ \n\t>]+\\)")
+ ;; end tag, skip any nested pairs
+ (let ((case-fold-search t)
+ (re (concat "</?" (regexp-quote (match-string 1))
+ ;; Ignore empty tags like <foo/>.
+ "\\([^>]*[^/>]\\)?>")))
+ (while (and (re-search-backward re nil t)
+ (eq (char-after (1+ (point))) ?/))
+ (forward-char 1)
+ (sgml-skip-tag-backward 1)))
+ (setq return nil))
+ (setq arg (1- arg)))
+ return))
+
+(defvar sgml-electric-tag-pair-overlays nil)
+(defvar sgml-electric-tag-pair-timer nil)
+
+(defun sgml-electric-tag-pair-before-change-function (beg end)
+ (condition-case err
+ (save-excursion
+ (goto-char end)
+ (skip-chars-backward "[:alnum:]-_.:")
+ (if (and ;; (<= (point) beg) ; This poses problems for downcase-word.
+ (or (eq (char-before) ?<)
+ (and (eq (char-before) ?/)
+ (eq (char-before (1- (point))) ?<)))
+ (null (get-char-property (point) 'text-clones)))
+ (let* ((endp (eq (char-before) ?/))
+ (cl-start (point))
+ (cl-end (progn (skip-chars-forward "[:alnum:]-_.:") (point)))
+ (match
+ (if endp
+ (when (sgml-skip-tag-backward 1) (forward-char 1) t)
+ (with-syntax-table sgml-tag-syntax-table
+ (up-list -1)
+ (when (sgml-skip-tag-forward 1)
+ (backward-sexp 1)
+ (forward-char 2)
+ t))))
+ (clones (get-char-property (point) 'text-clones)))
+ (when (and match
+ (/= cl-end cl-start)
+ (equal (buffer-substring cl-start cl-end)
+ (buffer-substring (point)
+ (save-excursion
+ (skip-chars-forward "[:alnum:]-_.:")
+ (point))))
+ (or (not endp) (eq (char-after cl-end) ?>)))
+ (when clones
+ (message "sgml-electric-tag-pair-before-change-function: deleting old OLs")
+ (mapc 'delete-overlay clones))
+ (message "sgml-electric-tag-pair-before-change-function: new clone")
+ (text-clone-create cl-start cl-end 'spread "[[:alnum:]-_.:]+")
+ (setq sgml-electric-tag-pair-overlays
+ (append (get-char-property (point) 'text-clones)
+ sgml-electric-tag-pair-overlays))))))
+ (scan-error nil)
+ (error (message "Error in sgml-electric-pair-mode: %s" err))))
+
+(defun sgml-electric-tag-pair-flush-overlays ()
+ (while sgml-electric-tag-pair-overlays
+ (delete-overlay (pop sgml-electric-tag-pair-overlays))))
+
+(define-minor-mode sgml-electric-tag-pair-mode
+ "Automatically update the closing tag when editing the opening one."
+ :lighter "/e"
+ (if sgml-electric-tag-pair-mode
+ (progn
+ (add-hook 'before-change-functions
+ 'sgml-electric-tag-pair-before-change-function
+ nil t)
+ (unless sgml-electric-tag-pair-timer
+ (setq sgml-electric-tag-pair-timer
+ (run-with-idle-timer 5 'repeat 'sgml-electric-tag-pair-flush-overlays))))
+ (remove-hook 'before-change-functions
+ 'sgml-electric-tag-pair-before-change-function
+ t)
+ ;; We leave the timer running for other buffers.
+ ))
+
(defun sgml-skip-tag-forward (arg)
"Skip to end of tag or matching closing tag if present.
@@ -940,7 +1009,7 @@ and move to the line in the SGML document that caused it."
(defun sgml-lexical-context (&optional limit)
"Return the lexical context at point as (TYPE . START).
START is the location of the start of the lexical element.
-TYPE is one of `string', `comment', `tag', `cdata', or `text'.
+TYPE is one of `string', `comment', `tag', `cdata', `pi', or `text'.
Optional argument LIMIT is the position to start parsing from.
If nil, start from a preceding tag at indentation."
@@ -967,12 +1036,19 @@ If nil, start from a preceding tag at indentation."
(let ((cdata-start (point)))
(unless (search-forward "]]>" pos 'move)
(list 0 nil nil 'cdata nil nil nil nil cdata-start))))
+ ((and sgml-xml-mode (looking-at "<\\?"))
+ ;; Processing Instructions.
+ ;; In SGML, it's basically a normal tag of the form
+ ;; <?NAME ...> but in XML, it takes the form <? ... ?>.
+ (let ((pi-start (point)))
+ (unless (search-forward "?>" pos 'move)
+ (list 0 nil nil 'pi nil nil nil nil pi-start))))
(t
;; We've reached a tag. Parse it.
;; FIXME: Handle net-enabling start-tags
(parse-partial-sexp (point) pos 0))))))
(cond
- ((eq (nth 3 state) 'cdata) (cons 'cdata (nth 8 state)))
+ ((memq (nth 3 state) '(cdata pi)) (cons (nth 3 state) (nth 8 state)))
((nth 3 state) (cons 'string (nth 8 state)))
((nth 4 state) (cons 'comment (nth 8 state)))
((and state (> (nth 0 state) 0)) (cons 'tag (nth 1 state)))
@@ -1006,8 +1082,10 @@ See `sgml-tag-alist' for info about attribute rules."
(insert alist ?\")
(delete-backward-char 2)))
(insert "=\"")
- (when alist
- (insert (skeleton-read '(completing-read "Value: " alist))))
+ (if (cdr alist)
+ (insert (skeleton-read '(completing-read "Value: " alist)))
+ (when (null alist)
+ (insert (skeleton-read '(read-string "Value: ")))))
(insert ?\"))))
(defun sgml-quote (start end &optional unquotep)
@@ -1096,9 +1174,15 @@ Leave point at the beginning of the tag."
(when (eq (char-after) ?<)
;; Oops!! Looks like we were not in a textual context after all!.
;; Let's try to recover.
+ ;; Remember the tag-start so we don't need to look for it later.
+ ;; This is not just an optimization but also makes sure we don't get
+ ;; stuck in infloops in cases where "looking back for <" would not go
+ ;; back far enough.
+ (setq tag-start (point))
(with-syntax-table sgml-tag-syntax-table
(let ((pos (point)))
(condition-case nil
+ ;; FIXME: This does not correctly skip over PI an CDATA tags.
(forward-sexp)
(scan-error
;; This < seems to be just a spurious one, let's ignore it.
@@ -1113,33 +1197,41 @@ Leave point at the beginning of the tag."
(cond
((sgml-looking-back-at "--") ; comment
(setq tag-type 'comment
- tag-start (search-backward "<!--" nil t)))
+ tag-start (or tag-start (search-backward "<!--" nil t))))
((sgml-looking-back-at "]]") ; cdata
(setq tag-type 'cdata
- tag-start (re-search-backward "<!\\[[A-Z]+\\[" nil t)))
+ tag-start (or tag-start
+ (re-search-backward "<!\\[[A-Z]+\\[" nil t))))
+ ((sgml-looking-back-at "?") ; XML processing-instruction
+ (setq tag-type 'pi
+ ;; IIUC: SGML processing instructions take the form <?foo ...>
+ ;; i.e. a "normal" tag, handled below. In XML this is changed
+ ;; to <?foo ... ?> where "..." can contain < and > and even <?
+ ;; but not ?>. This means that when parsing backward, there's
+ ;; no easy way to make sure that we find the real beginning of
+ ;; the PI.
+ tag-start (or tag-start (search-backward "<?" nil t))))
(t
- (setq tag-start
- (with-syntax-table sgml-tag-syntax-table
- (goto-char tag-end)
- (condition-case nil
- (backward-sexp)
- (scan-error
- ;; This > isn't really the end of a tag. Skip it.
- (goto-char (1- tag-end))
- (throw 'found (sgml-parse-tag-backward limit))))
- (point)))
+ (unless tag-start
+ (setq tag-start
+ (with-syntax-table sgml-tag-syntax-table
+ (goto-char tag-end)
+ (condition-case nil
+ (backward-sexp)
+ (scan-error
+ ;; This > isn't really the end of a tag. Skip it.
+ (goto-char (1- tag-end))
+ (throw 'found (sgml-parse-tag-backward limit))))
+ (point))))
(goto-char (1+ tag-start))
(case (char-after)
- (?! ; declaration
- (setq tag-type 'decl))
- (?? ; processing-instruction
- (setq tag-type 'pi))
+ (?! (setq tag-type 'decl)) ; declaration
+ (?? (setq tag-type 'pi)) ; processing-instruction
+ (?% (setq tag-type 'jsp)) ; JSP tags
(?/ ; close-tag
(forward-char 1)
(setq tag-type 'close
name (sgml-parse-tag-name)))
- (?% ; JSP tags
- (setq tag-type 'jsp))
(t ; open or empty tag
(setq tag-type 'open
name (sgml-parse-tag-name))
@@ -1198,7 +1290,7 @@ not the case, the first tag returned is the one inside which we are."
((eq (sgml-tag-type tag-info) 'open)
(cond
((null stack)
- (if (member-ignore-case (sgml-tag-name tag-info) ignore)
+ (if (assoc-string (sgml-tag-name tag-info) ignore t)
;; There was an implicit end-tag.
nil
(push tag-info context)
@@ -1283,12 +1375,13 @@ the current start-tag or the current comment or the current cdata, ..."
(defun sgml-empty-tag-p (tag-name)
"Return non-nil if TAG-NAME is an implicitly empty tag."
(and (not sgml-xml-mode)
- (member-ignore-case tag-name sgml-empty-tags)))
+ (assoc-string tag-name sgml-empty-tags 'ignore-case)))
(defun sgml-unclosed-tag-p (tag-name)
"Return non-nil if TAG-NAME is a tag for which an end-tag is optional."
(and (not sgml-xml-mode)
- (member-ignore-case tag-name sgml-unclosed-tags)))
+ (assoc-string tag-name sgml-unclosed-tags 'ignore-case)))
+
(defun sgml-calculate-indent (&optional lcon)
"Calculate the column to which this line should be indented.
@@ -1334,6 +1427,8 @@ LCON is the lexical context, if any."
;; We don't know how to indent it. Let's be honest about it.
(cdata nil)
+ ;; We don't know how to indent it. Let's be honest about it.
+ (pi nil)
(tag
(goto-char (1+ (cdr lcon)))
@@ -1352,8 +1447,8 @@ LCON is the lexical context, if any."
(let* ((here (point))
(unclosed (and ;; (not sgml-xml-mode)
(looking-at sgml-tag-name-re)
- (member-ignore-case (match-string 1)
- sgml-unclosed-tags)
+ (assoc-string (match-string 1)
+ sgml-unclosed-tags 'ignore-case)
(match-string 1)))
(context
;; If possible, align on the previous non-empty text line.
@@ -1791,11 +1886,11 @@ This takes effect when first loading the library.")
("ul" . "Unordered list")
("var" . "Math variable face")
("wbr" . "Enable <br> within <nobr>"))
-"*Value of `sgml-tag-help' for HTML mode.")
+ "*Value of `sgml-tag-help' for HTML mode.")
;;;###autoload
-(define-derived-mode html-mode sgml-mode "HTML"
+(define-derived-mode html-mode sgml-mode '(sgml-xml-mode "XHTML" "HTML")
"Major mode based on SGML mode for editing HTML documents.
This allows inserting skeleton constructs used in hypertext documents with
completion. See below for an introduction to HTML. Use
@@ -1849,7 +1944,6 @@ To work around that, do:
outline-level (lambda ()
(char-before (match-end 0))))
(setq imenu-create-index-function 'html-imenu-index)
- (when sgml-xml-mode (setq mode-name "XHTML"))
(set (make-local-variable 'sgml-empty-tags)
;; From HTML-4.01's loose.dtd, parsed with `sgml-parse-dtd',
;; plus manual addition of "wbr".
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index eadb9e606c3..5e8b8c7cbc2 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -1376,7 +1376,7 @@ the last cache point coordinate."
;;
;; Point Motion Only Group
-(mapcar
+(mapc
(lambda (command)
(let ((func-symbol (intern (format "*table--cell-%s" command)))
(doc-string (format "Table remapped function for `%s'." command)))
@@ -1409,7 +1409,7 @@ the last cache point coordinate."
backward-paragraph))
;; Extraction Group
-(mapcar
+(mapc
(lambda (command)
(let ((func-symbol (intern (format "*table--cell-%s" command)))
(doc-string (format "Table remapped function for `%s'." command)))
@@ -1443,7 +1443,7 @@ the last cache point coordinate."
backward-kill-sexp))
;; Pasting Group
-(mapcar
+(mapc
(lambda (command)
(let ((func-symbol (intern (format "*table--cell-%s" command)))
(doc-string (format "Table remapped function for `%s'." command)))
@@ -1469,7 +1469,7 @@ the last cache point coordinate."
insert))
;; Formatting Group
-(mapcar
+(mapc
(lambda (command)
(let ((func-symbol (intern (format "*table--cell-%s" command)))
(doc-string (format "Table remapped function for `%s'." command)))
@@ -1641,20 +1641,20 @@ Inside a table cell has a special keymap.
(if (numberp cell-width) (setq cell-width (cons cell-width nil)))
(if (numberp cell-height) (setq cell-height (cons cell-height nil)))
;; test validity of the arguments.
- (mapcar (lambda (arg)
- (let* ((value (symbol-value arg))
- (error-handler
- (function (lambda ()
- (error "%s must be a positive integer%s" arg
- (if (listp value) " or a list of positive integers" ""))))))
- (if (null value) (funcall error-handler))
- (mapcar (function (lambda (arg1)
- (if (or (not (integerp arg1))
- (< arg1 1))
- (funcall error-handler))))
- (if (listp value) value
- (cons value nil)))))
- '(columns rows cell-width cell-height))
+ (mapc (lambda (arg)
+ (let* ((value (symbol-value arg))
+ (error-handler
+ (function (lambda ()
+ (error "%s must be a positive integer%s" arg
+ (if (listp value) " or a list of positive integers" ""))))))
+ (if (null value) (funcall error-handler))
+ (mapcar (function (lambda (arg1)
+ (if (or (not (integerp arg1))
+ (< arg1 1))
+ (funcall error-handler))))
+ (if (listp value) value
+ (cons value nil)))))
+ '(columns rows cell-width cell-height))
(let ((orig-coord (table--get-coordinate))
(coord (table--get-coordinate))
r i cw ch cell-str border-str)
@@ -3141,7 +3141,7 @@ CALS (DocBook DTD):
(set-marker-insertion-type (table-get-source-info 'colspec-marker) t) ;; insert before
(save-excursion
(goto-char (table-get-source-info 'colspec-marker))
- (mapcar
+ (mapc
(lambda (col)
(insert (format " <colspec colnum=\"%d\" colname=\"c%d\"/>\n" col col)))
(sort (table-get-source-info 'colnum-list) '<)))
@@ -3223,11 +3223,11 @@ CALS (DocBook DTD):
(if (> colspan 1)
(let ((scol (table-get-source-info 'current-column))
(ecol (+ (table-get-source-info 'current-column) colspan -1)))
- (mapcar (lambda (col)
- (unless (memq col (table-get-source-info 'colnum-list))
- (table-put-source-info 'colnum-list
- (cons col (table-get-source-info 'colnum-list)))))
- (list scol ecol))
+ (mapc (lambda (col)
+ (unless (memq col (table-get-source-info 'colnum-list))
+ (table-put-source-info 'colnum-list
+ (cons col (table-get-source-info 'colnum-list)))))
+ (list scol ecol))
(insert (format " namest=\"c%d\" nameend=\"c%d\"" scol ecol))))
(if (> rowspan 1) (insert (format " morerows=\"%d\"" (1- rowspan))))
(if (and alignment
@@ -3910,19 +3910,19 @@ converts a table into plain text without frames. It is a companion to
(remap-alist table-command-remap-alist))
;; table-command-prefix mode specific bindings
(if (vectorp table-command-prefix)
- (mapcar (lambda (binding)
- (let ((seq (copy-sequence (car binding))))
- (and (vectorp seq)
- (listp (aref seq 0))
- (eq (car (aref seq 0)) 'control)
- (progn
- (aset seq 0 (cadr (aref seq 0)))
- (define-key map (vconcat table-command-prefix seq) (cdr binding))))))
- table-cell-bindings))
+ (mapc (lambda (binding)
+ (let ((seq (copy-sequence (car binding))))
+ (and (vectorp seq)
+ (listp (aref seq 0))
+ (eq (car (aref seq 0)) 'control)
+ (progn
+ (aset seq 0 (cadr (aref seq 0)))
+ (define-key map (vconcat table-command-prefix seq) (cdr binding))))))
+ table-cell-bindings))
;; shorthand control bindings
- (mapcar (lambda (binding)
- (define-key map (car binding) (cdr binding)))
- table-cell-bindings)
+ (mapc (lambda (binding)
+ (define-key map (car binding) (cdr binding)))
+ table-cell-bindings)
;; remap normal commands to table specific version
(while remap-alist
(define-key map (vector 'remap (caar remap-alist)) (cdar remap-alist))
@@ -4092,11 +4092,11 @@ key binding
--- -------
")
- (mapcar (lambda (binding)
- (princ (format "%-16s%s\n"
- (key-description (car binding))
- (cdr binding))))
- table-cell-bindings)
+ (mapc (lambda (binding)
+ (princ (format "%-16s%s\n"
+ (key-description (car binding))
+ (cdr binding))))
+ table-cell-bindings)
(print-help-return-message))))
(defun *table--cell-dabbrev-expand (arg)
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index 530fd871903..048c7929042 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1,7 +1,8 @@
;;; tex-mode.el --- TeX, LaTeX, and SliTeX mode commands -*- coding: utf-8 -*-
-;; Copyright (C) 1985, 1986, 1989, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
-;; 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1989, 1992, 1994, 1995, 1996, 1997, 1998
+;; 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: tex
@@ -243,6 +244,24 @@ Normally set to either `plain-tex-mode' or `latex-mode'."
:options '("''" "\">" "\"'" ">>" "»")
:group 'tex)
+(defcustom tex-fontify-script t
+ "If non-nil, fontify subscript and superscript strings."
+ :type 'boolean
+ :group 'tex
+ :version "23.1")
+(put 'tex-fontify-script 'safe-local-variable 'booleanp)
+
+(defcustom tex-font-script-display '(-0.2 0.2)
+ "How much to lower and raise subscript and superscript content.
+This is a list of two floats. The first is negative and
+specifies how much subscript is lowered, the second is positive
+and specifies how much superscript is raised. Heights are
+measured relative to that of the normal text."
+ :group 'tex
+ :type '(list (float :tag "Subscript")
+ (float :tag "Superscript"))
+ :version "23.1")
+
(defvar tex-last-temp-file nil
"Latest temporary file generated by \\[tex-region] and \\[tex-buffer].
Deleted when the \\[tex-region] or \\[tex-buffer] is next run, or when the
@@ -527,6 +546,8 @@ An alternative value is \" . \", if you use a font with a narrow period."
(citations (regexp-opt
'("label" "ref" "pageref" "vref" "eqref"
"cite" "nocite" "index" "glossary" "bibitem"
+ ;; natbib's two variants of \cite:
+ "citep" "citet"
;; These are text, rather than citations.
;; "caption" "footnote" "footnotemark" "footnotetext"
)
@@ -591,13 +612,14 @@ An alternative value is \" . \", if you use a font with a narrow period."
(setq pos (1- pos) odd (not odd)))
odd))
(if (eq (char-after pos) ?_)
- '(face subscript display (raise -0.3))
- '(face superscript display (raise +0.3)))))
+ `(face subscript display (raise ,(car tex-font-script-display)))
+ `(face superscript display (raise ,(cadr tex-font-script-display))))))
(defun tex-font-lock-match-suscript (limit)
"Match subscript and superscript patterns up to LIMIT."
- (when (re-search-forward "[_^] *\\([^\n\\{}]\\|\
-\\\\\\([a-zA-Z@]+\\|[^ \t\n]\\)\\|\\({\\)\\)" limit t)
+ (when (and tex-fontify-script
+ (re-search-forward "[_^] *\\([^\n\\{}]\\|\
+\\\\\\([a-zA-Z@]+\\|[^ \t\n]\\)\\|\\({\\)\\)" limit t))
(when (match-end 3)
(let ((beg (match-beginning 3))
(end (save-restriction
@@ -619,26 +641,31 @@ An alternative value is \" . \", if you use a font with a narrow period."
(defvar tex-verbatim-environments
'("verbatim" "verbatim*"))
+(put 'tex-verbatim-environments 'safe-local-variable
+ (lambda (x) (null (delq t (mapcar 'stringp x)))))
(defvar tex-font-lock-syntactic-keywords
- (let ((verbs (regexp-opt tex-verbatim-environments t)))
- `((,(concat "^\\\\begin *{" verbs "}.*\\(\n\\)") 2 "|")
- ;; Technically, we'd like to put the "|" property on the \n preceding
- ;; the \end, but this would have 2 disadvantages:
- ;; 1 - it's wrong if the verbatim env is empty (the same \n is used to
- ;; start and end the fenced-string).
- ;; 2 - font-lock considers the preceding \n as being part of the
- ;; preceding line, so things gets screwed every time the previous
- ;; line is re-font-locked on its own.
- ;; There's a hack in tex-font-lock-keywords-1 to remove the verbatim
- ;; face from the \ but C-M-f still jumps to the wrong spot :-( --Stef
- (,(concat "^\\(\\\\\\)end *{" verbs "}\\(.?\\)") (1 "|") (3 "<"))
- ;; ("^\\(\\\\\\)begin *{comment}" 1 "< b")
- ;; ("^\\\\end *{comment}.*\\(\n\\)" 1 "> b")
- ("\\\\verb\\**\\([^a-z@*]\\)"
- ;; Do it last, because it uses syntax-ppss which needs the
- ;; syntax-table properties of previous entries.
- 1 (tex-font-lock-verb (match-end 1))))))
+ '((eval . `(,(concat "^\\\\begin *{"
+ (regexp-opt tex-verbatim-environments t)
+ "}.*\\(\n\\)") 2 "|"))
+ ;; Technically, we'd like to put the "|" property on the \n preceding
+ ;; the \end, but this would have 2 disadvantages:
+ ;; 1 - it's wrong if the verbatim env is empty (the same \n is used to
+ ;; start and end the fenced-string).
+ ;; 2 - font-lock considers the preceding \n as being part of the
+ ;; preceding line, so things gets screwed every time the previous
+ ;; line is re-font-locked on its own.
+ ;; There's a hack in tex-font-lock-keywords-1 to remove the verbatim
+ ;; face from the \ but C-M-f still jumps to the wrong spot :-( --Stef
+ (eval . `(,(concat "^\\(\\\\\\)end *{"
+ (regexp-opt tex-verbatim-environments t)
+ "}\\(.?\\)") (1 "|") (3 "<")))
+ ;; ("^\\(\\\\\\)begin *{comment}" 1 "< b")
+ ;; ("^\\\\end *{comment}.*\\(\n\\)" 1 "> b")
+ ("\\\\verb\\**\\([^a-z@*]\\)"
+ ;; Do it last, because it uses syntax-ppss which needs the
+ ;; syntax-table properties of previous entries.
+ 1 (tex-font-lock-verb (match-end 1)))))
(defun tex-font-lock-unfontify-region (beg end)
(font-lock-default-unfontify-region beg end)
@@ -646,17 +673,47 @@ An alternative value is \" . \", if you use a font with a narrow period."
(let ((next (next-single-property-change beg 'display nil end))
(prop (get-text-property beg 'display)))
(if (and (eq (car-safe prop) 'raise)
- (member (car-safe (cdr prop)) '(-0.3 +0.3))
+ (member (car-safe (cdr prop)) tex-font-script-display)
(null (cddr prop)))
(put-text-property beg next 'display nil))
(setq beg next))))
+(defcustom tex-suscript-height-ratio 0.8
+ "Ratio of subscript/superscript height to that of the preceding text.
+In nested subscript/superscript, this factor is applied repeatedly,
+subject to the limit set by `tex-suscript-height-minimum'."
+ :type 'float
+ :group 'tex
+ :version "23.1")
+
+(defcustom tex-suscript-height-minimum 0.0
+ "Integer or float limiting the minimum size of subscript/superscript text.
+An integer is an absolute height in units of 1/10 point, a float
+is a height relative to that of the default font. Zero means no minimum."
+ :type '(choice (integer :tag "Integer height in 1/10 point units")
+ (float :tag "Fraction of default font height"))
+ :group 'tex
+ :version "23.1")
+
+(defun tex-suscript-height (height)
+ "Return the integer height of subscript/superscript font in 1/10 points.
+Not smaller than the value set by `tex-suscript-height-minimum'."
+ (ceiling (max (if (integerp tex-suscript-height-minimum)
+ tex-suscript-height-minimum
+ ;; For bootstrapping.
+ (condition-case nil
+ (* tex-suscript-height-minimum
+ (face-attribute 'default :height))
+ (error 0)))
+ ;; NB assumes height is integer.
+ (* height tex-suscript-height-ratio))))
+
(defface superscript
- '((t :height 0.8)) ;; :raise 0.3
+ '((t :height tex-suscript-height)) ;; :raise 0.2
"Face used for superscripts."
:group 'tex)
(defface subscript
- '((t :height 0.8)) ;; :raise -0.3
+ '((t :height tex-suscript-height)) ;; :raise -0.2
"Face used for subscripts."
:group 'tex)
@@ -1169,14 +1226,14 @@ on the line for the invalidity you want to see."
(backward-paragraph)
(forward-paragraph)
(while (not (bobp))
- ;; Scan the previous paragraph for invalidities.
+ ;; Scan the previous paragraph for invalidities.
(backward-paragraph)
(save-excursion
(or (tex-validate-region (point) (save-excursion
(forward-paragraph)
(point)))
(let ((end (line-beginning-position 2))
- start tem)
+ start tem)
(beginning-of-line)
(setq start (point))
;; Keep track of line number as we scan,
@@ -1240,6 +1297,7 @@ area if a mismatch is found."
(save-excursion
(let ((pos (match-beginning 0)))
(goto-char pos)
+ (skip-chars-backward "\\\\") ; escaped parens
(forward-sexp 1)
(or (eq (preceding-char) (cdr (syntax-after pos)))
(eq (char-after pos) (cdr (syntax-after (1- (point)))))
@@ -1378,6 +1436,34 @@ Return the value returned by the last execution of BODY."
(looking-at "\\\\begin")))
(tex-next-unmatched-end)))
+(defun tex-next-unmatched-eparen (otype)
+ "Leave point after the next unmatched escaped closing parenthesis.
+The string OTYPE is an opening parenthesis type: `(', `{', or `['."
+ (condition-case nil
+ (let ((ctype (char-to-string (cdr (aref (syntax-table)
+ (string-to-char otype))))))
+ (while (and (tex-search-noncomment
+ (re-search-forward (format "\\\\[%s%s]" ctype otype)))
+ (save-excursion
+ (goto-char (match-beginning 0))
+ (looking-at (format "\\\\%s" (regexp-quote otype)))))
+ (tex-next-unmatched-eparen otype)))
+ (wrong-type-argument (error "Unknown opening parenthesis type: %s" otype))
+ (search-failed (error "Couldn't find closing escaped paren"))))
+
+(defun tex-last-unended-eparen (ctype)
+ "Leave point at the start of the last unended escaped opening parenthesis.
+The string CTYPE is a closing parenthesis type: `)', `}', or `]'."
+ (condition-case nil
+ (let ((otype (char-to-string (cdr (aref (syntax-table)
+ (string-to-char ctype))))))
+ (while (and (tex-search-noncomment
+ (re-search-backward (format "\\\\[%s%s]" ctype otype)))
+ (looking-at (format "\\\\%s" (regexp-quote ctype))))
+ (tex-last-unended-eparen ctype)))
+ (wrong-type-argument (error "Unknown opening parenthesis type: %s" ctype))
+ (search-failed (error "Couldn't find unended escaped paren"))))
+
(defun tex-goto-last-unclosed-latex-block ()
"Move point to the last unclosed \\begin{...}.
Mark is left at original location."
@@ -1389,26 +1475,34 @@ Mark is left at original location."
(push-mark)
(goto-char spot)))
+;; Don't think this one actually _needs_ (for the purposes of
+;; tex-mode) to handle escaped parens.
(defun latex-backward-sexp-1 ()
- "Like (backward-sexp 1) but aware of multi-char elements."
+ "Like (backward-sexp 1) but aware of multi-char elements and escaped parens."
(let ((pos (point))
(forward-sexp-function))
(backward-sexp 1)
- (if (looking-at "\\\\begin\\>")
- (signal 'scan-error
- (list "Containing expression ends prematurely"
- (point) (prog1 (point) (goto-char pos))))
- (when (eq (char-after) ?{)
- (let ((newpos (point)))
- (when (ignore-errors (backward-sexp 1) t)
- (if (or (looking-at "\\\\end\\>")
- ;; In case the \\ ends a verbatim section.
- (and (looking-at "end\\>") (eq (char-before) ?\\)))
- (tex-last-unended-begin)
- (goto-char newpos))))))))
-
+ (cond ((looking-at "\\\\\\(begin\\>\\|[[({]\\)")
+ (signal 'scan-error
+ (list "Containing expression ends prematurely"
+ (point) (prog1 (point) (goto-char pos)))))
+ ((looking-at "\\\\\\([])}]\\)")
+ (tex-last-unended-eparen (match-string 1)))
+ ((eq (char-after) ?{)
+ (let ((newpos (point)))
+ (when (ignore-errors (backward-sexp 1) t)
+ (if (or (looking-at "\\\\end\\>")
+ ;; In case the \\ ends a verbatim section.
+ (and (looking-at "end\\>") (eq (char-before) ?\\)))
+ (tex-last-unended-begin)
+ (goto-char newpos))))))))
+
+;; Note this does not handle things like mismatched brackets inside
+;; begin/end blocks.
+;; Needs to handle escaped parens for tex-validate-*.
+;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-09/msg00038.html
(defun latex-forward-sexp-1 ()
- "Like (forward-sexp 1) but aware of multi-char elements."
+ "Like (forward-sexp 1) but aware of multi-char elements and escaped parens."
(let ((pos (point))
(forward-sexp-function))
(forward-sexp 1)
@@ -1425,10 +1519,19 @@ Mark is left at original location."
((looking-at "\\\\begin\\>")
(goto-char (match-end 0))
(tex-next-unmatched-end))
+ ;; A better way to handle this, \( .. \) etc, is probably to
+ ;; temporarily change the syntax of the \ in \( to punctuation.
+ ((looking-back "\\\\[])}]")
+ (signal 'scan-error
+ (list "Containing expression ends prematurely"
+ (- (point) 2) (prog1 (point)
+ (goto-char pos)))))
+ ((looking-back "\\\\\\([({[]\\)")
+ (tex-next-unmatched-eparen (match-string 1)))
(t (goto-char newpos))))))
(defun latex-forward-sexp (&optional arg)
- "Like `forward-sexp' but aware of multi-char elements."
+ "Like `forward-sexp' but aware of multi-char elements and escaped parens."
(interactive "P")
(unless arg (setq arg 1))
(let ((pos (point)))
@@ -2169,7 +2272,7 @@ start of the header is required to be within the first 100 lines."
(widen)
(goto-char (point-min))
(let ((search-end (save-excursion
- (forward-line 100)
+ (forward-line 100)
(point)))
(already-output 0)
hbeg hend)
@@ -2186,11 +2289,11 @@ start of the header is required to be within the first 100 lines."
(and tex-start-of-header
(re-search-forward tex-start-of-header search-end t)
(progn
- (beginning-of-line)
- (setq hbeg (point)) ;mark beginning of header
+ (beginning-of-line)
+ (setq hbeg (point)) ; mark beginning of header
(when (re-search-forward tex-end-of-header nil t)
- (forward-line 1)
- (setq hend (point)) ;mark end of header
+ (forward-line 1)
+ (setq hend (point)) ; mark end of header
(write-region
(max (if beg
(min hbeg beg)
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index 31e7946c58e..55e7134f87e 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -57,8 +57,6 @@ If optional argument HERE is non-nil, insert info at point."
(require 'texinfo) ; So `texinfo-footnote-style' is defined.
(require 'texnfo-upd) ; So `texinfo-section-types-regexp' is defined.
-(defvar texinfo-format-syntax-table nil)
-
(defvar texinfo-vindex)
(defvar texinfo-findex)
(defvar texinfo-cindex)
@@ -81,27 +79,80 @@ If optional argument HERE is non-nil, insert info at point."
(defvar texinfo-short-index-format-cmds-alist)
(defvar texinfo-format-filename)
(defvar texinfo-footnote-number)
-(defvar texinfo-start-of-header)
-(defvar texinfo-end-of-header)
-(defvar texinfo-raisesections-alist)
-(defvar texinfo-lowersections-alist)
+
+(defvar texinfo-raisesections-alist
+ '((@chapter . @chapter) ; Cannot go higher
+ (@unnumbered . @unnumbered)
+ (@centerchap . @unnumbered)
+
+ (@majorheading . @majorheading)
+ (@chapheading . @chapheading)
+ (@appendix . @appendix)
+
+ (@section . @chapter)
+ (@unnumberedsec . @unnumbered)
+ (@heading . @chapheading)
+ (@appendixsec . @appendix)
+
+ (@subsection . @section)
+ (@unnumberedsubsec . @unnumberedsec)
+ (@subheading . @heading)
+ (@appendixsubsec . @appendixsec)
+
+ (@subsubsection . @subsection)
+ (@unnumberedsubsubsec . @unnumberedsubsec)
+ (@subsubheading . @subheading)
+ (@appendixsubsubsec . @appendixsubsec))
+ "*An alist of next higher levels for chapters, sections, etc...
+For example, section to chapter, subsection to section.
+Used by `texinfo-raise-lower-sections'.
+The keys specify types of section; the values correspond to the next
+higher types.")
+
+(defvar texinfo-lowersections-alist
+ '((@chapter . @section)
+ (@unnumbered . @unnumberedsec)
+ (@centerchap . @unnumberedsec)
+ (@majorheading . @heading)
+ (@chapheading . @heading)
+ (@appendix . @appendixsec)
+
+ (@section . @subsection)
+ (@unnumberedsec . @unnumberedsubsec)
+ (@heading . @subheading)
+ (@appendixsec . @appendixsubsec)
+
+ (@subsection . @subsubsection)
+ (@unnumberedsubsec . @unnumberedsubsubsec)
+ (@subheading . @subsubheading)
+ (@appendixsubsec . @appendixsubsubsec)
+
+ (@subsubsection . @subsubsection) ; Cannot go lower.
+ (@unnumberedsubsubsec . @unnumberedsubsubsec)
+ (@subsubheading . @subsubheading)
+ (@appendixsubsubsec . @appendixsubsubsec))
+ "*An alist of next lower levels for chapters, sections, etc...
+For example, chapter to section, section to subsection.
+Used by `texinfo-raise-lower-sections'.
+The keys specify types of section; the values correspond to the next
+lower types.")
;;; Syntax table
-(if texinfo-format-syntax-table
- nil
- (setq texinfo-format-syntax-table (make-syntax-table))
- (modify-syntax-entry ?\" " " texinfo-format-syntax-table)
- (modify-syntax-entry ?\\ " " texinfo-format-syntax-table)
- (modify-syntax-entry ?@ "\\" texinfo-format-syntax-table)
- (modify-syntax-entry ?\^q "\\" texinfo-format-syntax-table)
- (modify-syntax-entry ?\[ "." texinfo-format-syntax-table)
- (modify-syntax-entry ?\] "." texinfo-format-syntax-table)
- (modify-syntax-entry ?\( "." texinfo-format-syntax-table)
- (modify-syntax-entry ?\) "." texinfo-format-syntax-table)
- (modify-syntax-entry ?{ "(}" texinfo-format-syntax-table)
- (modify-syntax-entry ?} "){" texinfo-format-syntax-table)
- (modify-syntax-entry ?\' "." texinfo-format-syntax-table))
+(defvar texinfo-format-syntax-table
+ (let ((st (make-syntax-table)))
+ (modify-syntax-entry ?\" " " st)
+ (modify-syntax-entry ?\\ " " st)
+ (modify-syntax-entry ?@ "\\" st)
+ (modify-syntax-entry ?\^q "\\" st)
+ (modify-syntax-entry ?\[ "." st)
+ (modify-syntax-entry ?\] "." st)
+ (modify-syntax-entry ?\( "." st)
+ (modify-syntax-entry ?\) "." st)
+ (modify-syntax-entry ?{ "(}" st)
+ (modify-syntax-entry ?} "){" st)
+ (modify-syntax-entry ?\' "." st)
+ st))
;;; Top level buffer and region formatting functions
@@ -113,8 +164,8 @@ The Info file output is generated in a buffer visiting the Info file
name specified in the @setfilename command.
Non-nil argument (prefix, if interactive) means don't make tag table
-and don't split the file if large. You can use Info-tagify and
-Info-split to do these manually."
+and don't split the file if large. You can use `Info-tagify' and
+`Info-split' to do these manually."
(interactive "P")
(let ((lastmessage "Formatting Info file...")
(coding-system-for-write buffer-file-coding-system))
@@ -329,7 +380,7 @@ is automatically removed when the Info file is created. The original
Texinfo source buffer is not changed.
Non-nil argument (prefix, if interactive) means don't split the file
-if large. You can use Info-split to do this manually."
+if large. You can use `Info-split' to do this manually."
(interactive "P")
(let ((temp-buffer (concat "*--" (buffer-name) "--temporary-buffer*" )))
(message "First updating nodes and menus, then creating Info file.")
@@ -764,64 +815,6 @@ commands."
(setq count (1+ count)))
(kill-word 1)
(insert (symbol-name new-level))))))))))
-
-(defvar texinfo-raisesections-alist
- '((@chapter . @chapter) ; Cannot go higher
- (@unnumbered . @unnumbered)
- (@centerchap . @unnumbered)
-
- (@majorheading . @majorheading)
- (@chapheading . @chapheading)
- (@appendix . @appendix)
-
- (@section . @chapter)
- (@unnumberedsec . @unnumbered)
- (@heading . @chapheading)
- (@appendixsec . @appendix)
-
- (@subsection . @section)
- (@unnumberedsubsec . @unnumberedsec)
- (@subheading . @heading)
- (@appendixsubsec . @appendixsec)
-
- (@subsubsection . @subsection)
- (@unnumberedsubsubsec . @unnumberedsubsec)
- (@subsubheading . @subheading)
- (@appendixsubsubsec . @appendixsubsec))
- "*An alist of next higher levels for chapters, sections. etc.
-For example, section to chapter, subsection to section.
-Used by `texinfo-raise-lower-sections'.
-The keys specify types of section; the values correspond to the next
-higher types.")
-
-(defvar texinfo-lowersections-alist
- '((@chapter . @section)
- (@unnumbered . @unnumberedsec)
- (@centerchap . @unnumberedsec)
- (@majorheading . @heading)
- (@chapheading . @heading)
- (@appendix . @appendixsec)
-
- (@section . @subsection)
- (@unnumberedsec . @unnumberedsubsec)
- (@heading . @subheading)
- (@appendixsec . @appendixsubsec)
-
- (@subsection . @subsubsection)
- (@unnumberedsubsec . @unnumberedsubsubsec)
- (@subheading . @subsubheading)
- (@appendixsubsec . @appendixsubsubsec)
-
- (@subsubsection . @subsubsection) ; Cannot go lower.
- (@unnumberedsubsubsec . @unnumberedsubsubsec)
- (@subsubheading . @subsubheading)
- (@appendixsubsubsec . @appendixsubsubsec))
- "*An alist of next lower levels for chapters, sections. etc.
-For example, chapter to section, section to subsection.
-Used by `texinfo-raise-lower-sections'.
-The keys specify types of section; the values correspond to the next
-lower types.")
-
;;; Perform those texinfo-to-info conversions that apply to the whole input
;;; uniformly.
@@ -1077,8 +1070,8 @@ Leave point after argument."
(forward-char -1)
(skip-chars-backward " ")
(setq end (point))
- (setq args (cons (if (> end beg) (buffer-substring-no-properties beg end))
- args))
+ (push (if (> end beg) (buffer-substring-no-properties beg end))
+ args)
(goto-char next)
(skip-chars-forward " "))
(if (eolp) (forward-char 1))
@@ -1110,8 +1103,8 @@ Leave point after argument."
(goto-char beg)
(while (search-forward "\n" end t)
(replace-match " "))))
- (setq args (cons (if (> end beg) (buffer-substring-no-properties beg end))
- args))
+ (push (if (> end beg) (buffer-substring-no-properties beg end))
+ args)
(goto-char next))
;;(if (eolp) (forward-char 1))
(setq texinfo-command-end (point))
@@ -1140,7 +1133,7 @@ Leave point after argument."
(re-search-forward "[\n ]")
(forward-char -1)
(setq end (point))))
- (setq args (cons (buffer-substring-no-properties beg end) args))
+ (push (buffer-substring-no-properties beg end) args)
(skip-chars-forward " "))
(forward-char 1)
(nreverse args))))
@@ -1184,7 +1177,7 @@ Leave point after argument."
(let ((tem (if texinfo-fold-nodename-case (downcase name) name)))
(if (assoc tem texinfo-node-names)
(error "Duplicate node name: %s" name)
- (setq texinfo-node-names (cons (list tem) texinfo-node-names))))
+ (push (list tem) texinfo-node-names)))
(setq texinfo-footnote-number 0)
;; insert "\n\^_" unconditionally since this is what info is looking for
(insert "\n\^_\nFile: " texinfo-format-filename
@@ -1494,8 +1487,6 @@ If used within a line, follow `@br' with braces."
Argument is either end or separate."
(setq texinfo-footnote-style (texinfo-parse-arg-discard)))
-(defvar texinfo-footnote-number)
-
(put 'footnote 'texinfo-format 'texinfo-format-footnote)
(defun texinfo-format-footnote ()
"Format a footnote in either end of node or separate node style.
@@ -1601,9 +1592,8 @@ Used by @refill indenting command to avoid indenting within lists, etc.")
(defun texinfo-push-stack (check arg)
(setq texinfo-stack-depth (1+ texinfo-stack-depth))
- (setq texinfo-stack
- (cons (list check arg texinfo-command-start)
- texinfo-stack)))
+ (push (list check arg texinfo-command-start)
+ texinfo-stack))
(defun texinfo-pop-stack (check)
(setq texinfo-stack-depth (1- texinfo-stack-depth))
@@ -1974,7 +1964,7 @@ Or else:
@end multitable
where the fractions specify the width of each column as a percent
-of the current width of the text (i.e., of the fill-column).
+of the current width of the text (i.e., of the `fill-column').
Long lines of text are filled within columns.
@@ -2028,12 +2018,10 @@ commands that are defined in texinfo.tex for printed output.
((looking-at "@columnfractions")
(forward-word 1)
(while (not (eolp))
- (setq texinfo-multitable-width-list
- (cons
- (truncate
- (1-
- (* fill-column (read (get-buffer (current-buffer))))))
- texinfo-multitable-width-list))))
+ (push (truncate
+ (1-
+ (* fill-column (read (get-buffer (current-buffer))))))
+ texinfo-multitable-width-list)))
;;
;; Case 2: {Column 1 template} {Column 2} {Column 3 example}
((looking-at "{")
@@ -2044,9 +2032,8 @@ commands that are defined in texinfo.tex for printed output.
(end-of-template
;; forward-sexp works with braces in Texinfo mode
(progn (forward-sexp 1) (1- (point)))))
- (setq texinfo-multitable-width-list
- (cons (- end-of-template start-of-template)
- texinfo-multitable-width-list))
+ (push (- end-of-template start-of-template)
+ texinfo-multitable-width-list)
;; Remove carriage return from within a template, if any.
;; This helps those those who want to use more than
;; one line's worth of words in @multitable line.
@@ -2417,13 +2404,11 @@ Use only the FILENAME arg; for Info, ignore the other arguments to @image."
(beginning-delimiter (or (nth 1 args) ""))
(end-delimiter (or (nth 2 args) "")))
(texinfo-discard-command)
- (setq texinfo-enclosure-list
- (cons
- (list command-name
- (list
- beginning-delimiter
- end-delimiter))
- texinfo-enclosure-list))))
+ (push (list command-name
+ (list
+ beginning-delimiter
+ end-delimiter))
+ texinfo-enclosure-list)))
;;; @alias
@@ -2436,12 +2421,10 @@ Use only the FILENAME arg; for Info, ignore the other arguments to @image."
(save-excursion (end-of-line) (setq texinfo-command-end (point)))
(if (not (looking-at "\\([^=]+\\)=\\(.*\\)"))
(error "Invalid alias command")
- (setq texinfo-alias-list
- (cons
- (cons
- (match-string-no-properties 1)
- (match-string-no-properties 2))
- texinfo-alias-list))
+ (push (cons
+ (match-string-no-properties 1)
+ (match-string-no-properties 2))
+ texinfo-alias-list)
(texinfo-discard-command))
)
)
@@ -2570,8 +2553,7 @@ If used within a line, follow `@bullet' with braces."
"lisp\\|"
"smalllisp"
"\\)")
- "Regexp specifying environments in which @kbd does not put `...'
- around argument.")
+ "Regexp matching environments in which @kbd does not put `...' around arg.")
(defvar texinfo-format-kbd-end-regexp
(concat
@@ -2584,7 +2566,7 @@ If used within a line, follow `@bullet' with braces."
"smalllisp"
"\\)")
"Regexp specifying end of environments in which @kbd does not put `...'
- around argument. (See `texinfo-format-kbd-regexp')")
+around argument. (See `texinfo-format-kbd-regexp')")
(put 'kbd 'texinfo-format 'texinfo-format-kbd)
(defun texinfo-format-kbd ()
@@ -2793,8 +2775,8 @@ If used within a line, follow `@minus' with braces."
;;; Refilling and indenting: @refill, @paragraphindent, @noindent
-;;; Indent only those paragraphs that are refilled as a result of an
-;;; @refill command.
+;; Indent only those paragraphs that are refilled as a result of an
+;; @refill command.
;; * If the value is `asis', do not change the existing indentation at
;; the starts of paragraphs.
@@ -2804,8 +2786,8 @@ If used within a line, follow `@minus' with braces."
;; * If the value is greater than zero, indent each paragraph by that
;; number of spaces.
-;;; But do not refill paragraphs with an @refill command that are
-;;; preceded by @noindent or are part of a table, list, or deffn.
+;; But do not refill paragraphs with an @refill command that are
+;; preceded by @noindent or are part of a table, list, or deffn.
(defvar texinfo-paragraph-indent "asis"
"Number of spaces for @refill to indent a paragraph; else to leave as is.")
@@ -2822,7 +2804,7 @@ Default is to leave the number of spaces as is."
(put 'refill 'texinfo-format 'texinfo-format-refill)
(defun texinfo-format-refill ()
- "Refill paragraph. Also, indent first line as set by @paragraphindent.
+ "Refill paragraph. Also, indent first line as set by @paragraphindent.
Default is to leave paragraph indentation as is."
(texinfo-discard-command)
(let ((position (point-marker)))
@@ -2941,11 +2923,9 @@ Default is to leave paragraph indentation as is."
;; eg: "aa" . texinfo-aaindex
(or (assoc index-name texinfo-indexvar-alist)
- (setq texinfo-indexvar-alist
- (cons
- (cons index-name
- index-alist-name)
- texinfo-indexvar-alist)))
+ (push (cons index-name
+ index-alist-name)
+ texinfo-indexvar-alist))
(fset index-formatting-command
(list 'lambda 'nil
@@ -3021,14 +3001,17 @@ Default is to leave paragraph indentation as is."
(put 'printindex 'texinfo-format 'texinfo-format-printindex)
(defun texinfo-format-printindex ()
- (let ((indexelts (symbol-value
- (cdr (assoc (texinfo-parse-arg-discard)
- texinfo-indexvar-alist))))
- opoint)
+ (let* ((arg (texinfo-parse-arg-discard))
+ (fmt (cdr (assoc arg texinfo-short-index-format-cmds-alist)))
+ (index-list (delq nil (mapcar (lambda (e)
+ (and (eq fmt (get (cdr e) 'texinfo-format))
+ (cdr (assoc (car e) texinfo-indexvar-alist))))
+ texinfo-short-index-cmds-alist)))
+ (indexelts (apply #'append nil (mapcar #'symbol-value index-list)))
+ opoint)
(insert "\n* Menu:\n\n")
(setq opoint (point))
(texinfo-print-index nil indexelts)
-
(if (memq system-type '(vax-vms windows-nt ms-dos))
(texinfo-sort-region opoint (point))
(shell-command-on-region opoint (point) "sort -fd" 1))))
@@ -4024,7 +4007,7 @@ The command `@value{foo}' expands to the value."
(put 'ifset 'texinfo-end 'texinfo-discard-command)
(put 'ifset 'texinfo-format 'texinfo-if-set)
(defun texinfo-if-set ()
- "If set, continue formatting; else do not format region up to @end ifset"
+ "If set, continue formatting; else do not format region up to @end ifset."
(let ((arg (texinfo-parse-arg-discard)))
(cond
((eq (get (car (read-from-string arg)) 'texinfo-whether-setp)
@@ -4045,7 +4028,7 @@ The command `@value{foo}' expands to the value."
(put 'ifclear 'texinfo-end 'texinfo-discard-command)
(put 'ifclear 'texinfo-format 'texinfo-if-clear)
(defun texinfo-if-clear ()
- "If clear, continue formatting; if set, do not format up to @end ifset"
+ "If clear, continue formatting; if set, do not format up to @end ifset."
(let ((arg (texinfo-parse-arg-discard)))
(cond
((eq (get (car (read-from-string arg)) 'texinfo-whether-setp)
@@ -4291,7 +4274,7 @@ the @ifeq command."
;;; Batch formatting
(defun batch-texinfo-format ()
- "Runs texinfo-format-buffer on the files remaining on the command line.
+ "Run `texinfo-format-buffer' on the files remaining on the command line.
Must be used only with -batch, and kills Emacs on completion.
Each file will be processed even if an error occurred previously.
For example, invoke
@@ -4317,8 +4300,8 @@ For example, invoke
(nconc (directory-files file)
(cdr command-line-args-left))))
(t
- (setq files (cons file files)
- command-line-args-left (cdr command-line-args-left)))))
+ (push file files)
+ (setq command-line-args-left (cdr command-line-args-left)))))
(while files
(setq file (car files)
files (cdr files))
@@ -4354,5 +4337,5 @@ For example, invoke
;;; Place `provide' at end of file.
(provide 'texinfmt)
-;;; arch-tag: 1e8d9a2d-bca0-40a0-ac6c-dab01bc6f725
+;; arch-tag: 1e8d9a2d-bca0-40a0-ac6c-dab01bc6f725
;;; texinfmt.el ends here
diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el
index 038345e17bd..004e57bc21a 100644
--- a/lisp/textmodes/texinfo.el
+++ b/lisp/textmodes/texinfo.el
@@ -51,13 +51,13 @@
;;;###autoload
(defcustom texinfo-open-quote "``"
- "*String inserted by typing \\[texinfo-insert-quote] to open a quotation."
+ "String inserted by typing \\[texinfo-insert-quote] to open a quotation."
:type 'string
:group 'texinfo)
;;;###autoload
(defcustom texinfo-close-quote "''"
- "*String inserted by typing \\[texinfo-insert-quote] to close a quotation."
+ "String inserted by typing \\[texinfo-insert-quote] to close a quotation."
:type 'string
:group 'texinfo)
@@ -296,21 +296,19 @@ chapter."
;;; Syntax table
-(defvar texinfo-mode-syntax-table nil)
-
-(if texinfo-mode-syntax-table
- nil
- (setq texinfo-mode-syntax-table (make-syntax-table))
- (modify-syntax-entry ?\" "." texinfo-mode-syntax-table)
- (modify-syntax-entry ?\\ "." texinfo-mode-syntax-table)
- (modify-syntax-entry ?@ "\\" texinfo-mode-syntax-table)
- (modify-syntax-entry ?\^q "\\" texinfo-mode-syntax-table)
- (modify-syntax-entry ?\[ "(]" texinfo-mode-syntax-table)
- (modify-syntax-entry ?\] ")[" texinfo-mode-syntax-table)
- (modify-syntax-entry ?{ "(}" texinfo-mode-syntax-table)
- (modify-syntax-entry ?} "){" texinfo-mode-syntax-table)
- (modify-syntax-entry ?\n ">" texinfo-mode-syntax-table)
- (modify-syntax-entry ?\' "w" texinfo-mode-syntax-table))
+(defvar texinfo-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ (modify-syntax-entry ?\" "." st)
+ (modify-syntax-entry ?\\ "." st)
+ (modify-syntax-entry ?@ "\\" st)
+ (modify-syntax-entry ?\^q "\\" st)
+ (modify-syntax-entry ?\[ "(]" st)
+ (modify-syntax-entry ?\] ")[" st)
+ (modify-syntax-entry ?{ "(}" st)
+ (modify-syntax-entry ?} "){" st)
+ (modify-syntax-entry ?\n ">" st)
+ (modify-syntax-entry ?\' "w" st)
+ st))
;; Written by Wolfgang Bangerth <zcg51122@rpool1.rus.uni-stuttgart.de>
;; To override this example, set either `imenu-generic-expression'
@@ -399,7 +397,6 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
;;; Keybindings
-(defvar texinfo-mode-map nil)
;;; Keys common both to Texinfo mode and to TeX shell.
@@ -420,65 +417,65 @@ Subexpression 1 is what goes into the corresponding `@end' statement.")
;; Mode documentation displays commands in reverse order
;; from how they are listed in the texinfo-mode-map.
-(if texinfo-mode-map
- nil
- (setq texinfo-mode-map (make-sparse-keymap))
-
- ;; bindings for `texnfo-tex.el'
- (texinfo-define-common-keys texinfo-mode-map)
-
- (define-key texinfo-mode-map "\"" 'texinfo-insert-quote)
-
- ;; bindings for `makeinfo.el'
- (define-key texinfo-mode-map "\C-c\C-m\C-k" 'kill-compilation)
- (define-key texinfo-mode-map "\C-c\C-m\C-l"
- 'makeinfo-recenter-compilation-buffer)
- (define-key texinfo-mode-map "\C-c\C-m\C-r" 'makeinfo-region)
- (define-key texinfo-mode-map "\C-c\C-m\C-b" 'makeinfo-buffer)
-
- ;; bindings for `texinfmt.el'
- (define-key texinfo-mode-map "\C-c\C-e\C-r" 'texinfo-format-region)
- (define-key texinfo-mode-map "\C-c\C-e\C-b" 'texinfo-format-buffer)
-
- ;; AUCTeX-like bindings
- (define-key texinfo-mode-map "\e\r" 'texinfo-insert-@item)
-
- ;; bindings for updating nodes and menus
-
- (define-key texinfo-mode-map "\C-c\C-um" 'texinfo-master-menu)
-
- (define-key texinfo-mode-map "\C-c\C-u\C-m" 'texinfo-make-menu)
- (define-key texinfo-mode-map "\C-c\C-u\C-n" 'texinfo-update-node)
- (define-key texinfo-mode-map "\C-c\C-u\C-e" 'texinfo-every-node-update)
- (define-key texinfo-mode-map "\C-c\C-u\C-a" 'texinfo-all-menus-update)
-
- (define-key texinfo-mode-map "\C-c\C-s" 'texinfo-show-structure)
-
- (define-key texinfo-mode-map "\C-c}" 'up-list)
- (define-key texinfo-mode-map "\C-c]" 'up-list)
- (define-key texinfo-mode-map "\C-c{" 'texinfo-insert-braces)
-
- ;; bindings for inserting strings
- (define-key texinfo-mode-map "\C-c\C-o" 'texinfo-insert-block)
- (define-key texinfo-mode-map "\C-c\C-c\C-d" 'texinfo-start-menu-description)
- (define-key texinfo-mode-map "\C-c\C-c\C-s" 'texinfo-insert-@strong)
- (define-key texinfo-mode-map "\C-c\C-c\C-e" 'texinfo-insert-@emph)
-
- (define-key texinfo-mode-map "\C-c\C-cv" 'texinfo-insert-@var)
- (define-key texinfo-mode-map "\C-c\C-cu" 'texinfo-insert-@uref)
- (define-key texinfo-mode-map "\C-c\C-ct" 'texinfo-insert-@table)
- (define-key texinfo-mode-map "\C-c\C-cs" 'texinfo-insert-@samp)
- (define-key texinfo-mode-map "\C-c\C-cq" 'texinfo-insert-@quotation)
- (define-key texinfo-mode-map "\C-c\C-co" 'texinfo-insert-@noindent)
- (define-key texinfo-mode-map "\C-c\C-cn" 'texinfo-insert-@node)
- (define-key texinfo-mode-map "\C-c\C-cm" 'texinfo-insert-@email)
- (define-key texinfo-mode-map "\C-c\C-ck" 'texinfo-insert-@kbd)
- (define-key texinfo-mode-map "\C-c\C-ci" 'texinfo-insert-@item)
- (define-key texinfo-mode-map "\C-c\C-cf" 'texinfo-insert-@file)
- (define-key texinfo-mode-map "\C-c\C-cx" 'texinfo-insert-@example)
- (define-key texinfo-mode-map "\C-c\C-ce" 'texinfo-insert-@end)
- (define-key texinfo-mode-map "\C-c\C-cd" 'texinfo-insert-@dfn)
- (define-key texinfo-mode-map "\C-c\C-cc" 'texinfo-insert-@code))
+(defvar texinfo-mode-map
+ (let ((map (make-sparse-keymap)))
+
+ ;; bindings for `texnfo-tex.el'
+ (texinfo-define-common-keys map)
+
+ (define-key map "\"" 'texinfo-insert-quote)
+
+ ;; bindings for `makeinfo.el'
+ (define-key map "\C-c\C-m\C-k" 'kill-compilation)
+ (define-key map "\C-c\C-m\C-l"
+ 'makeinfo-recenter-compilation-buffer)
+ (define-key map "\C-c\C-m\C-r" 'makeinfo-region)
+ (define-key map "\C-c\C-m\C-b" 'makeinfo-buffer)
+
+ ;; bindings for `texinfmt.el'
+ (define-key map "\C-c\C-e\C-r" 'texinfo-format-region)
+ (define-key map "\C-c\C-e\C-b" 'texinfo-format-buffer)
+
+ ;; AUCTeX-like bindings
+ (define-key map "\e\r" 'texinfo-insert-@item)
+
+ ;; bindings for updating nodes and menus
+
+ (define-key map "\C-c\C-um" 'texinfo-master-menu)
+
+ (define-key map "\C-c\C-u\C-m" 'texinfo-make-menu)
+ (define-key map "\C-c\C-u\C-n" 'texinfo-update-node)
+ (define-key map "\C-c\C-u\C-e" 'texinfo-every-node-update)
+ (define-key map "\C-c\C-u\C-a" 'texinfo-all-menus-update)
+
+ (define-key map "\C-c\C-s" 'texinfo-show-structure)
+
+ (define-key map "\C-c}" 'up-list)
+ (define-key map "\C-c]" 'up-list)
+ (define-key map "\C-c{" 'texinfo-insert-braces)
+
+ ;; bindings for inserting strings
+ (define-key map "\C-c\C-o" 'texinfo-insert-block)
+ (define-key map "\C-c\C-c\C-d" 'texinfo-start-menu-description)
+ (define-key map "\C-c\C-c\C-s" 'texinfo-insert-@strong)
+ (define-key map "\C-c\C-c\C-e" 'texinfo-insert-@emph)
+
+ (define-key map "\C-c\C-cv" 'texinfo-insert-@var)
+ (define-key map "\C-c\C-cu" 'texinfo-insert-@uref)
+ (define-key map "\C-c\C-ct" 'texinfo-insert-@table)
+ (define-key map "\C-c\C-cs" 'texinfo-insert-@samp)
+ (define-key map "\C-c\C-cq" 'texinfo-insert-@quotation)
+ (define-key map "\C-c\C-co" 'texinfo-insert-@noindent)
+ (define-key map "\C-c\C-cn" 'texinfo-insert-@node)
+ (define-key map "\C-c\C-cm" 'texinfo-insert-@email)
+ (define-key map "\C-c\C-ck" 'texinfo-insert-@kbd)
+ (define-key map "\C-c\C-ci" 'texinfo-insert-@item)
+ (define-key map "\C-c\C-cf" 'texinfo-insert-@file)
+ (define-key map "\C-c\C-cx" 'texinfo-insert-@example)
+ (define-key map "\C-c\C-ce" 'texinfo-insert-@end)
+ (define-key map "\C-c\C-cd" 'texinfo-insert-@dfn)
+ (define-key map "\C-c\C-cc" 'texinfo-insert-@code)
+ map))
(easy-menu-define texinfo-mode-menu
texinfo-mode-map
@@ -947,22 +944,22 @@ to jump to the corresponding spot in the Texinfo source file."
;;; The tex and print function definitions:
(defcustom texinfo-texi2dvi-command "texi2dvi"
- "*Command used by `texinfo-tex-buffer' to run TeX and texindex on a buffer."
+ "Command used by `texinfo-tex-buffer' to run TeX and texindex on a buffer."
:type 'string
:group 'texinfo)
(defcustom texinfo-tex-command "tex"
- "*Command used by `texinfo-tex-region' to run TeX on a region."
+ "Command used by `texinfo-tex-region' to run TeX on a region."
:type 'string
:group 'texinfo)
(defcustom texinfo-texindex-command "texindex"
- "*Command used by `texinfo-texindex' to sort unsorted index files."
+ "Command used by `texinfo-texindex' to sort unsorted index files."
:type 'string
:group 'texinfo)
(defcustom texinfo-delete-from-print-queue-command "lprm"
- "*Command string used to delete a job from the line printer queue.
+ "Command string used to delete a job from the line printer queue.
Command is used by \\[texinfo-delete-from-print-queue] based on
number provided by a previous \\[tex-show-print-queue]
command."
diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el
index e1f55c0dece..367a33a85b8 100644
--- a/lisp/textmodes/two-column.el
+++ b/lisp/textmodes/two-column.el
@@ -463,7 +463,7 @@ First column's text sSs Second column's text
(1+ (point)))))
(delete-region point (point))
(setq n 0))
- (next-line 1)))))
+ (forward-line 1)))))
@@ -531,7 +531,7 @@ off trailing spaces with \\[delete-trailing-whitespace]."
(end-of-line)
(indent-to-column 2C-window-width)
(insert 2C-separator string))
- (next-line 1) ; add one if necessary
+ (forward-line 1) ; add one if necessary
(set-buffer b2))))
(unless (window-full-width-p)
(enlarge-window 99999 t)))
diff --git a/lisp/thingatpt.el b/lisp/thingatpt.el
index 35b60e4d3bd..ce26344af8c 100644
--- a/lisp/thingatpt.el
+++ b/lisp/thingatpt.el
@@ -67,7 +67,7 @@
"Determine the start and end buffer locations for the THING at point.
THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `symbol', `list', `sexp', `defun', `filename', `url',
-`word', `sentence', `whitespace', `line', `page' and others.
+`email', `word', `sentence', `whitespace', `line', `page' and others.
See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING.
@@ -124,7 +124,7 @@ of the textual entity that was found."
"Return the THING at point.
THING is a symbol which specifies the kind of syntactic entity you want.
Possibilities include `symbol', `list', `sexp', `defun', `filename', `url',
-`word', `sentence', `whitespace', `line', `page' and others.
+`email', `word', `sentence', `whitespace', `line', `page' and others.
See the file `thingatpt.el' for documentation on how to define
a symbol as a valid THING."
@@ -340,6 +340,33 @@ point."
(goto-char (car bounds))
(error "No URL here")))))
+;; Email addresses
+(defvar thing-at-point-email-regexp
+ "<?[-+_.~a-zA-Z][-+_.~:a-zA-Z0-9]*@[-.a-zA-Z0-9]+>?"
+ "A regular expression probably matching an email address.
+This does not match the real name portion, only the address, optionally
+with angle brackets.")
+
+;; Haven't set 'forward-op on 'email nor defined 'forward-email' because
+;; not sure they're actually needed, and URL seems to skip them too.
+;; Note that (end-of-thing 'email) and (beginning-of-thing 'email)
+;; work automagically, though.
+
+(put 'email 'bounds-of-thing-at-point
+ (lambda ()
+ (let ((thing (thing-at-point-looking-at thing-at-point-email-regexp)))
+ (if thing
+ (let ((beginning (match-beginning 0))
+ (end (match-end 0)))
+ (cons beginning end))))))
+
+(put 'email 'thing-at-point
+ (lambda ()
+ (let ((boundary-pair (bounds-of-thing-at-point 'email)))
+ (if boundary-pair
+ (buffer-substring-no-properties
+ (car boundary-pair) (cdr boundary-pair))))))
+
;; Whitespace
(defun forward-whitespace (arg)
diff --git a/lisp/thumbs.el b/lisp/thumbs.el
index 6aa81268f12..9d8b289cbe9 100644
--- a/lisp/thumbs.el
+++ b/lisp/thumbs.el
@@ -67,7 +67,7 @@
:version "22.1"
:group 'multimedia)
-(defcustom thumbs-thumbsdir "~/.emacs.d/thumbs"
+(defcustom thumbs-thumbsdir (concat user-emacs-directory "thumbs")
"*Directory to store thumbnails."
:type 'directory
:group 'thumbs)
diff --git a/lisp/time.el b/lisp/time.el
index 2b6a671c6bd..ef98c6a7819 100644
--- a/lisp/time.el
+++ b/lisp/time.el
@@ -25,7 +25,10 @@
;;; Commentary:
;; Facilities to display current time/date and a new-mail indicator
-;; in the Emacs mode line. The single entry point is `display-time'.
+;; in the Emacs mode line. The entry point is `display-time'.
+
+;; Display time world in a buffer, the entry point is
+;; `display-time-world'.
;;; Code:
@@ -109,6 +112,95 @@ A value of nil means 1 <= hh <= 12, and an AM/PM suffix is used."
"Time when mail file's file system was recorded to be down.
If that file system seems to be up, the value is nil.")
+(defcustom zoneinfo-style-world-list
+ '(("America/Los_Angeles" "Seattle")
+ ("America/New_York" "New York")
+ ("Europe/London" "London")
+ ("Europe/Paris" "Paris")
+ ("Asia/Calcutta" "Bangalore")
+ ("Asia/Tokyo" "Tokyo"))
+ "Alist of zoneinfo-style time zones and places for `display-time-world'.
+Each element has the form (TIMEZONE LABEL).
+TIMEZONE should be a string of the form AREA/LOCATION, where AREA is
+the name of a region -- a continent or ocean, and LOCATION is the name
+of a specific location, e.g., a city, within that region.
+LABEL is a string to display as the label of that TIMEZONE's time."
+ :group 'display-time
+ :type '(repeat (list string string))
+ :version "23.1")
+
+(defcustom legacy-style-world-list
+ '(("PST8PDT" "Seattle")
+ ("EST5EDT" "New York")
+ ("GMT0BST" "London")
+ ("CET-1CDT" "Paris")
+ ("IST-5:30" "Bangalore")
+ ("JST-9" "Tokyo"))
+ "Alist of traditional-style time zones and places for `display-time-world'.
+Each element has the form (TIMEZONE LABEL).
+TIMEZONE should be a string of the form:
+
+ std[+|-]offset[dst[offset][,date[/time],date[/time]]]
+
+See the documentation of the TZ environment variable on your system,
+for more details about the format of TIMEZONE.
+LABEL is a string to display as the label of that TIMEZONE's time."
+ :group 'display-time
+ :type '(repeat (list string string))
+ :version "23.1")
+
+(defcustom display-time-world-list
+ ;; Determine if zoneinfo style timezones are supported by testing that
+ ;; America/New York and Europe/London return different timezones.
+ (let (gmt nyt)
+ (set-time-zone-rule "America/New York")
+ (setq nyt (format-time-string "%z"))
+ (set-time-zone-rule "Europe/London")
+ (setq gmt (format-time-string "%z"))
+ (set-time-zone-rule nil)
+ (if (string-equal nyt gmt)
+ legacy-style-world-list
+ zoneinfo-style-world-list))
+ "Alist of time zones and places for `display-time-world' to display.
+Each element has the form (TIMEZONE LABEL).
+TIMEZONE should be in the format supported by `set-time-zone-rule' on
+your system. See the documentation of `zoneinfo-style-world-list' and
+\`legacy-style-world-list' for two widely used formats.
+LABEL is a string to display as the label of that TIMEZONE's time."
+ :group 'display-time
+ :type '(repeat (list string string))
+ :version "23.1")
+
+(defcustom display-time-world-time-format "%A %d %B %R %Z"
+ "Format of the time displayed, see `format-time-string'."
+ :group 'display-time
+ :type 'string
+ :version "23.1")
+
+(defcustom display-time-world-buffer-name "*wclock*"
+ "Name of the wclock buffer."
+ :group 'display-time
+ :type 'string
+ :version "23.1")
+
+(defcustom display-time-world-timer-enable t
+ "If non-nil, a timer will update the world clock."
+ :group 'display-time
+ :type 'boolean
+ :version "23.1")
+
+(defcustom display-time-world-timer-second 60
+ "Interval in seconds for updating the world clock."
+ :group 'display-time
+ :type 'integer
+ :version "23.1")
+
+(defvar display-time-world-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "q" 'kill-this-buffer)
+ map)
+ "Keymap of Display Time World mode")
+
;;;###autoload
(defun display-time ()
"Enable display of time, load level, and mail flag in mode lines.
@@ -393,6 +485,69 @@ This runs the normal hook `display-time-hook' after each update."
(remove-hook 'rmail-after-get-new-mail-hook
'display-time-event-handler)))
+
+(defun display-time-world-mode ()
+ "Major mode for buffer that displays times in various time zones.
+See `display-time-world'."
+ (interactive)
+ (kill-all-local-variables)
+ (setq
+ major-mode 'display-time-world-mode
+ mode-name "World clock")
+ (use-local-map display-time-world-mode-map))
+
+(defun display-time-world-display (alist)
+ "Replace current buffer text with times in various zones, based on ALIST."
+ (let ((inhibit-read-only t)
+ (buffer-undo-list t))
+ (erase-buffer)
+ (let ((max-width 0)
+ (result ()))
+ (unwind-protect
+ (dolist (zone alist)
+ (let* ((label (cadr zone))
+ (width (string-width label)))
+ (set-time-zone-rule (car zone))
+ (setq result
+ (append result
+ (list
+ label width
+ (format-time-string display-time-world-time-format))))
+ (when (> width max-width)
+ (setq max-width width))))
+ (set-time-zone-rule nil))
+ (while result
+ (insert (pop result)
+ (make-string (1+ (- max-width (pop result))) ?\s)
+ (pop result) "\n")))
+ (delete-backward-char 1)))
+
+;;;###autoload
+(defun display-time-world ()
+ "Enable updating display of times in various time zones.
+`display-time-world-list' specifies the zones.
+To turn off the world time display, go to that window and type `q'."
+ (interactive)
+ (when (and display-time-world-timer-enable
+ (not (get-buffer display-time-world-buffer-name)))
+ (run-at-time t display-time-world-timer-second 'display-time-world-timer))
+ (with-current-buffer (get-buffer-create display-time-world-buffer-name)
+ (display-time-world-display display-time-world-list))
+ (pop-to-buffer display-time-world-buffer-name)
+ (fit-window-to-buffer)
+ (display-time-world-mode))
+
+(defun display-time-world-timer ()
+ (if (get-buffer display-time-world-buffer-name)
+ (with-current-buffer (get-buffer display-time-world-buffer-name)
+ (display-time-world-display display-time-world-list))
+ ;; cancel timer
+ (let ((list timer-list))
+ (while list
+ (let ((elt (pop list)))
+ (when (equal (symbol-name (aref elt 5)) "display-time-world-timer")
+ (cancel-timer elt)))))))
+
(provide 'time)
;;; arch-tag: b9c1623f-b5cb-48e4-b650-482a4d23c5a6
diff --git a/lisp/tmm.el b/lisp/tmm.el
index b6b5e46aa27..6deed45bf5c 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -47,7 +47,6 @@
(defvar tmm-table-undef)
;;;###autoload (define-key global-map "\M-`" 'tmm-menubar)
-;;;###autoload (define-key global-map [f10] 'tmm-menubar)
;;;###autoload (define-key global-map [menu-bar mouse-1] 'tmm-menubar-mouse)
;;;###autoload
@@ -101,7 +100,7 @@ See the documentation for `tmm-prompt'."
(tmm-menubar (car (posn-x-y (event-start event)))))
(defcustom tmm-mid-prompt "==>"
- "*String to insert between shortcut and menu item.
+ "String to insert between shortcut and menu item.
If nil, there will be no shortcuts. It should not consist only of spaces,
or else the correct item might not be found in the `*Completions*' buffer."
:type 'string
@@ -116,14 +115,14 @@ Alternatively, you can use Up/Down keys (or your History keys) to change
the item in the minibuffer, and press RET when you are done, or press the
marked letters to pick up your choice. Type C-g or ESC ESC ESC to cancel.
"
- "*Help text to insert on the top of the completion buffer.
+ "Help text to insert on the top of the completion buffer.
To save space, you can set this to nil,
in which case the standard introduction text is deleted too."
:type '(choice string (const nil))
:group 'tmm)
(defcustom tmm-shortcut-style '(downcase upcase)
- "*What letters to use as menu shortcuts.
+ "What letters to use as menu shortcuts.
Must be either one of the symbols `downcase' or `upcase',
or else a list of the two in the order you prefer."
:type '(choice (const downcase)
@@ -132,7 +131,7 @@ or else a list of the two in the order you prefer."
:group 'tmm)
(defcustom tmm-shortcut-words 2
- "*How many successive words to try for shortcuts, nil means all.
+ "How many successive words to try for shortcuts, nil means all.
If you use only one of `downcase' or `upcase' for `tmm-shortcut-style',
specify nil for this variable."
:type '(choice integer (const nil))
@@ -232,13 +231,11 @@ Its value should be an event that has a binding in MENU."
tmm-km-list nil t nil
(cons 'history
(- (* 2 history-len) index-of-default))))
- (save-excursion
- (remove-hook 'minibuffer-setup-hook 'tmm-add-prompt)
- (if (get-buffer "*Completions*")
- (progn
- (set-buffer "*Completions*")
- (use-local-map tmm-old-comp-map)
- (bury-buffer (current-buffer))))))))))
+ (remove-hook 'minibuffer-setup-hook 'tmm-add-prompt)
+ (if (get-buffer "*Completions*")
+ (with-current-buffer "*Completions*"
+ (use-local-map tmm-old-comp-map)
+ (bury-buffer (current-buffer)))))))))
(setq choice (cdr (assoc out tmm-km-list)))
(and (null choice)
(> (length out) (length tmm-c-prompt))
@@ -566,9 +563,10 @@ of `menu-bar-final-items'."
;; Return that keymap.
bind))))
+;; Huh? What's that about? --Stef
(add-hook 'calendar-load-hook (lambda () (require 'cal-menu)))
(provide 'tmm)
-;;; arch-tag: e7ddbdb6-4b95-4da3-afbe-ad6063d112f4
+;; arch-tag: e7ddbdb6-4b95-4da3-afbe-ad6063d112f4
;;; tmm.el ends here
diff --git a/lisp/tool-bar.el b/lisp/tool-bar.el
index 768fee70411..e3635f47fe7 100644
--- a/lisp/tool-bar.el
+++ b/lisp/tool-bar.el
@@ -55,23 +55,23 @@ conveniently adding tool bar items."
:group 'mouse
:group 'frames
(and (display-images-p)
- (let ((lines (if tool-bar-mode 1 0)))
- ;; Alter existing frames...
- (mapc (lambda (frame)
- (modify-frame-parameters frame
- (list (cons 'tool-bar-lines lines))))
- (frame-list))
- ;; ...and future ones.
- (let ((elt (assq 'tool-bar-lines default-frame-alist)))
- (if elt
- (setcdr elt lines)
- (add-to-list 'default-frame-alist (cons 'tool-bar-lines lines)))))
+ (modify-all-frames-parameters (list (cons 'tool-bar-lines
+ (if tool-bar-mode 1 0))))
(if (and tool-bar-mode
- (display-graphic-p)
- (= 1 (length (default-value 'tool-bar-map)))) ; not yet setup
+ (display-graphic-p))
(tool-bar-setup))))
;;;###autoload
+;; Used in the Show/Hide menu, to have the toggle reflect the current frame.
+(defun toggle-tool-bar-mode-from-frame (&optional arg)
+ "Toggle tool bar on or off, based on the status of the current frame.
+See `tool-bar-mode' for more information."
+ (interactive (list (or current-prefix-arg 'toggle)))
+ (if (eq arg 'toggle)
+ (tool-bar-mode (if (> (frame-parameter nil 'tool-bar-lines) 0) 0 1))
+ (tool-bar-mode arg)))
+
+;;;###autoload
;; We want to pretend the toolbar by standard is on, as this will make
;; customize consider disabling the toolbar a customization, and save
;; that. We could do this for real by setting :init-value above, but
@@ -228,42 +228,47 @@ holds a keymap."
;;; Set up some global items. Additions/deletions up for grabs.
-(defun tool-bar-setup ()
- ;; People say it's bad to have EXIT on the tool bar, since users
- ;; might inadvertently click that button.
- ;;(tool-bar-add-item-from-menu 'save-buffers-kill-emacs "exit")
- (tool-bar-add-item-from-menu 'find-file "new")
- (tool-bar-add-item-from-menu 'menu-find-file-existing "open")
- (tool-bar-add-item-from-menu 'dired "diropen")
- (tool-bar-add-item-from-menu 'kill-this-buffer "close")
- (tool-bar-add-item-from-menu 'save-buffer "save" nil
- :visible '(or buffer-file-name
- (not (eq 'special
- (get major-mode
- 'mode-class)))))
- (tool-bar-add-item-from-menu 'write-file "saveas" nil
- :visible '(or buffer-file-name
- (not (eq 'special
- (get major-mode
- 'mode-class)))))
- (tool-bar-add-item-from-menu 'undo "undo" nil
- :visible '(not (eq 'special (get major-mode
- 'mode-class))))
- (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [cut])
- "cut" nil
- :visible '(not (eq 'special (get major-mode
- 'mode-class))))
- (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [copy])
- "copy")
- (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [paste])
- "paste" nil
- :visible '(not (eq 'special (get major-mode
- 'mode-class))))
- (tool-bar-add-item-from-menu 'nonincremental-search-forward "search")
- ;;(tool-bar-add-item-from-menu 'ispell-buffer "spell")
-
- ;; There's no icon appropriate for News and we need a command rather
- ;; than a lambda for Read Mail.
+(defvar tool-bar-setup nil
+ "t if the tool-bar has been set up by `tool-bar-setup'.")
+
+(defun tool-bar-setup (&optional frame)
+ (unless tool-bar-setup
+ (with-selected-frame (or frame (selected-frame))
+ ;; People say it's bad to have EXIT on the tool bar, since users
+ ;; might inadvertently click that button.
+ ;;(tool-bar-add-item-from-menu 'save-buffers-kill-emacs "exit")
+ (tool-bar-add-item-from-menu 'find-file "new")
+ (tool-bar-add-item-from-menu 'menu-find-file-existing "open")
+ (tool-bar-add-item-from-menu 'dired "diropen")
+ (tool-bar-add-item-from-menu 'kill-this-buffer "close")
+ (tool-bar-add-item-from-menu 'save-buffer "save" nil
+ :visible '(or buffer-file-name
+ (not (eq 'special
+ (get major-mode
+ 'mode-class)))))
+ (tool-bar-add-item-from-menu 'write-file "saveas" nil
+ :visible '(or buffer-file-name
+ (not (eq 'special
+ (get major-mode
+ 'mode-class)))))
+ (tool-bar-add-item-from-menu 'undo "undo" nil
+ :visible '(not (eq 'special (get major-mode
+ 'mode-class))))
+ (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [cut])
+ "cut" nil
+ :visible '(not (eq 'special (get major-mode
+ 'mode-class))))
+ (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [copy])
+ "copy")
+ (tool-bar-add-item-from-menu (lookup-key menu-bar-edit-menu [paste])
+ "paste" nil
+ :visible '(not (eq 'special (get major-mode
+ 'mode-class))))
+ (tool-bar-add-item-from-menu 'nonincremental-search-forward "search")
+ ;;(tool-bar-add-item-from-menu 'ispell-buffer "spell")
+
+ ;; There's no icon appropriate for News and we need a command rather
+ ;; than a lambda for Read Mail.
;;(tool-bar-add-item-from-menu 'compose-mail "mail/compose")
(tool-bar-add-item-from-menu 'print-buffer "print")
@@ -281,9 +286,9 @@ holds a keymap."
(popup-menu menu-bar-help-menu))
'help
:help "Pop up the Help menu"))
- )
+ (setq tool-bar-setup t))))
-(provide 'tool-bar)
+(provide 'tool-bar)
;;; arch-tag: 15f30f0a-d0d7-4d50-bbb7-f48fd0c8582f
;;; tool-bar.el ends here
diff --git a/lisp/tooltip.el b/lisp/tooltip.el
index a5d0309f125..ffbebf06245 100644
--- a/lisp/tooltip.el
+++ b/lisp/tooltip.el
@@ -273,7 +273,7 @@ is based on the current syntax table."
(defmacro tooltip-region-active-p ()
"Value is non-nil if the region is currently active."
- (if (string-match "^GNU" (emacs-version))
+ (if (not (featurep 'xemacs))
`(and transient-mark-mode mark-active)
`(region-active-p)))
diff --git a/lisp/tutorial.el b/lisp/tutorial.el
index a7f239d7499..336593891ab 100644
--- a/lisp/tutorial.el
+++ b/lisp/tutorial.el
@@ -155,9 +155,9 @@ options:
" RET instead."))
(insert "\n\nWith your current key bindings"
" you can use "
- (if (string-equal "the menus" where)
+ (if (string-match "^the .*menus?$" where)
""
- "the key ")
+ "the key")
where
" to get the function `"
(format "%s" db)
@@ -210,14 +210,12 @@ LEFT and RIGHT are the elements to compare."
(defconst tutorial--default-keys
;; On window system, `suspend-emacs' is replaced in the default
;; keymap
- (let* ((suspend-emacs (if window-system
- 'iconify-or-deiconify-frame
- 'suspend-emacs))
+ (let* ((suspend-emacs 'suspend-frame)
(default-keys
`((ESC-prefix [27])
(Control-X-prefix [?\C-x])
(mode-specific-command-prefix [?\C-c])
- (save-buffers-kill-emacs [?\C-x ?\C-c])
+ (save-buffers-kill-terminal [?\C-x ?\C-c])
;; * SUMMARY
(scroll-up [?\C-v])
@@ -406,7 +404,7 @@ where
WHERE is a text describing the key sequences to which DEF-FUN is
bound now (or, if it is remapped, a key sequence
for the function it is remapped to)
- REMARK is a list with info about rebinding. It has either of
+ REMARK is a list with info about rebinding. It has either of
these formats:
\(TEXT cua-mode)
@@ -439,15 +437,27 @@ where
(if (eq def-fun 'Control-X-prefix)
(lookup-key global-map [24])
(key-binding key))))
- (where (where-is-internal (if rem-fun rem-fun def-fun))))
+ (where (where-is-internal (if rem-fun rem-fun def-fun)))
+ cwhere)
(if where
(progn
- (setq where (key-description (car where)))
+ (setq cwhere (car where)
+ where (key-description cwhere))
(when (and (< 10 (length where))
(string= (substring where 0 (length "<menu-bar>"))
"<menu-bar>"))
- (setq where "the menus")))
+ (setq where
+ (if (and (vectorp cwhere)
+ (setq cwhere (elt cwhere 1))
+ (setq cwhere
+ (cadr
+ (assoc cwhere
+ (lookup-key global-map
+ [menu-bar]))))
+ (stringp cwhere))
+ (format "the `%s' menu" cwhere)
+ "the menus"))))
(setq where ""))
(setq remark nil)
(unless
@@ -617,8 +627,7 @@ with some explanatory links."
(defun tutorial--saved-dir ()
"Directory to which tutorials are saved."
- (expand-file-name "tutorial"
- (if (eq system-type 'ms-dos) "~/_emacs.d/" "~/.emacs.d/")))
+ (expand-file-name "tutorial" user-emacs-directory))
(defun tutorial--saved-file ()
"File name in which to save tutorials."
@@ -837,7 +846,7 @@ Run the Viper tutorial? "))
(delete-region (point-min) (point))
(goto-char tutorial--point-before-chkeys)
(setq tutorial--point-before-chkeys (point-marker)))
- (insert-file-contents (expand-file-name filename data-directory))
+ (insert-file-contents (expand-file-name filename tutorial-directory))
(forward-line)
(setq tutorial--point-before-chkeys (point-marker)))
@@ -922,7 +931,7 @@ See `get-lang-string' for more information.")
In certain places Emacs can replace a string shown to the user with
a language specific string. This function retrieves such strings.
-LANG is the language specification. It should be one of those
+LANG is the language specification. It should be one of those
strings that can be returned by `read-language-name'. STRINGID
is a symbol that specifies the string to retrieve.
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index 5b9318241dc..492918c7f96 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -28,7 +28,7 @@
;;; Commentary:
;; Emacs's standard method for making buffer names unique adds <2>, <3>,
-;; etc. to the end of (all but one of) the buffers. This file replaces
+;; etc.. to the end of (all but one of) the buffers. This file replaces
;; that behavior, for buffers visiting files and dired buffers, with a
;; uniquification that adds parts of the file name until the buffer names
;; are unique. For instance, buffers visiting /u/mernst/tmp/Makefile and
@@ -95,7 +95,7 @@
(defcustom uniquify-buffer-name-style nil
- "*If non-nil, buffer names are uniquified with parts of directory name.
+ "If non-nil, buffer names are uniquified with parts of directory name.
The value determines the buffer name style and is one of `forward',
`reverse', `post-forward', or `post-forward-angle-brackets'.
For example, files `/foo/bar/mumble/name' and `/baz/quux/mumble/name'
@@ -104,7 +104,9 @@ would have the following buffer names in the various styles:
reverse name\\mumble\\bar name\\mumble\\quux
post-forward name|bar/mumble name|quux/mumble
post-forward-angle-brackets name<bar/mumble> name<quux/mumble>
- nil name name<2>"
+ nil name name<2>
+Of course, the \"mumble\" part may be stripped as well, depending on the setting
+of `uniquify-strip-common-suffix'."
:type '(radio (const forward)
(const reverse)
(const post-forward)
@@ -119,7 +121,7 @@ would have the following buffer names in the various styles:
:group 'uniquify)
(defcustom uniquify-ask-about-buffer-names-p nil
- "*If non-nil, permit user to choose names for buffers with same base file.
+ "If non-nil, permit user to choose names for buffers with same base file.
If the user chooses to name a buffer, uniquification is preempted and no
other buffer names are changed."
:type 'boolean
@@ -127,7 +129,7 @@ other buffer names are changed."
;; The default value matches certain Gnus buffers.
(defcustom uniquify-ignore-buffers-re nil
- "*Regular expression matching buffer names that should not be uniquified.
+ "Regular expression matching buffer names that should not be uniquified.
For instance, set this to \"^draft-[0-9]+$\" to avoid having uniquify rename
draft buffers even if `uniquify-after-kill-buffer-p' is non-nil and the
visited file name isn't the same as that of the buffer."
@@ -135,12 +137,12 @@ visited file name isn't the same as that of the buffer."
:group 'uniquify)
(defcustom uniquify-min-dir-content 0
- "*Minimum number of directory name components included in buffer name."
+ "Minimum number of directory name components included in buffer name."
:type 'integer
:group 'uniquify)
(defcustom uniquify-separator nil
- "*String separator for buffer name components.
+ "String separator for buffer name components.
When `uniquify-buffer-name-style' is `post-forward', separates
base file name from directory part in buffer names (default \"|\").
When `uniquify-buffer-name-style' is `reverse', separates all
@@ -149,7 +151,7 @@ file name components (default \"\\\")."
:group 'uniquify)
(defcustom uniquify-trailing-separator-p nil
- "*If non-nil, add a file name separator to dired buffer names.
+ "If non-nil, add a file name separator to dired buffer names.
If `uniquify-buffer-name-style' is `forward', add the separator at the end;
if it is `reverse', add the separator at the beginning; otherwise, this
variable is ignored."
@@ -263,7 +265,7 @@ in `uniquify-list-buffers-directory-modes', otherwise returns nil."
(directory-file-name filename))))))))
(defun uniquify-rerationalize-w/o-cb (fix-list)
- "Re-rationalize the buffers in FIX-LIST, but ignoring current-buffer."
+ "Re-rationalize the buffers in FIX-LIST, but ignoring `current-buffer'."
(let ((new-fix-list nil))
(dolist (item fix-list)
(let ((buf (uniquify-item-buffer item)))
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 7402de41aab..d5dd002cf7a 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,7 +1,21 @@
+2007-11-20 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * url-mailto.el (mail-send-and-exit):
+ * url-http.el (url-dav-file-attributes):
+ * url-file.el (ange-ftp-set-passwd, ange-ftp-copy-file-internal)
+ (url-generate-unique-filename): Declare as functions.
+
+ * url-privacy.el (url-device-type): Define unconditionally.
+
2007-11-15 Richard Stallman <rms@gnu.org>
* url.el (url-retrieve-synchronously): Call delete-process.
+2007-10-31 Juanma Barranquero <lekktu@gmail.com>
+
+ * url-vars.el (url-vars-unload-hook): Remove function and variable.
+ Hooks are automatically removed by `unload-feature'.
+
2007-10-13 Richard Stallman <rms@gnu.org>
* url-util.el (url-basepath): Function deleted.
@@ -26,6 +40,11 @@
(url-set-host, url-set-port, url-set-filename, url-set-target)
(url-set-attributes, url-set-full): Change macros to defuns.
+2007-09-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * url-dav.el (top):
+ * url-vars.el (top): Use `mapc' rather than `mapcar'.
+
2007-09-22 Diane Murray <disumu@x3y2z1.net>
* url-misc.el (url-generic-emulator-loader): Send the port as a
@@ -33,8 +52,7 @@
2007-09-21 Diane Murray <disumu@x3y2z1.net>
- * url-news.el (url-news-fetch-newsgroup): Fix formatting of Gnus
- method.
+ * url-news.el (url-news-fetch-newsgroup): Fix formatting of Gnus method.
* url-util.el (url-get-normalized-date): Pass full timezone
information to timezone-make-date-arpa-standard, since zone name
@@ -42,11 +60,27 @@
2007-09-03 Diane Murray <disumu@x3y2z1.net>
- * url-http.el: (url-http-parse-headers): Bind the current buffer
+ * url-http.el (url-http-parse-headers): Bind the current buffer
rather than calling `url-mark-buffer-as-dead' with
`current-buffer', so that the correct buffer is killed if
`url-retrieve-synchronously' gets redirected to a new URL.
+2007-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * url-parse.el (url): Use defstruct rather than macros.
+ (url-generic-parse-url):
+ * url-util.el (url-normalize-url, url-truncate-url-for-viewing):
+ * url-methods.el (url-scheme-register-proxy):
+ * url-mailto.el (url-mailto):
+ * url-file.el (url-file-build-filename):
+ * url-expand.el (url-identity-expander, url-default-expander):
+ Update all callers.
+
+2007-08-09 Edward O'Connor <hober0@gmail.com> (tiny change)
+
+ * url-auth.el (url-basic-auth): When prompting for username
+ and password, default to the username and password in the URL.
+
2007-08-08 Glenn Morris <rgm@gnu.org>
* url-auth.el, url-cache.el, url-dav.el, url-file.el, vc-dav.el:
@@ -56,11 +90,26 @@
* Relicense all FSF files to GPLv3 or later.
+2007-06-12 Tom Tromey <tromey@redhat.com>
+
+ * url.el (url-configuration-directory): Use user-emacs-directory.
+
+2007-06-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * url-cookie.el (url-cookie-name, url-cookie-value)
+ (url-cookie-expires, url-cookie-localpart, url-cookie-domain)
+ (url-cookie-secure, url-cookie-set-name, url-cookie-set-value)
+ (url-cookie-set-expires, url-cookie-set-localpart)
+ (url-cookie-set-domain, url-cookie-set-secure)
+ (url-cookie-retrieve-arg, url-cookie-create, url-cookie-p): Remove.
+ (url-cookie): New struct.
+ (url-cookie-store): Use setf instead of url-cookie-set-*.
+
2007-05-29 Chong Yidong <cyd@stupidchicken.com>
* url-mailto.el (url-mailto): Insert body after
mail-header-separator if present, so that it is before signature.
- Bug reported by Leo <sdl.web@gmail.com>.
+ Suggested by Leo <sdl.web@gmail.com>.
2007-04-15 Chong Yidong <cyd@stupidchicken.com>
diff --git a/lisp/url/url-auth.el b/lisp/url/url-auth.el
index c6fe270900b..98e351916c1 100644
--- a/lisp/url/url-auth.el
+++ b/lisp/url/url-auth.el
@@ -318,5 +318,5 @@ RATING a rating between 1 and 10 of the strength of the authentication.
(provide 'url-auth)
-;;; arch-tag: 04058625-616d-44e4-9dbf-4b46b00b2a91
+;; arch-tag: 04058625-616d-44e4-9dbf-4b46b00b2a91
;;; url-auth.el ends here
diff --git a/lisp/url/url-cookie.el b/lisp/url/url-cookie.el
index cdca65104ad..368c34e32a8 100644
--- a/lisp/url/url-cookie.el
+++ b/lisp/url/url-cookie.el
@@ -33,51 +33,6 @@
;; See http://home.netscape.com/newsref/std/cookie_spec.html for the
;; 'open standard' defining this crap.
-;;
-;; A cookie is stored internally as a vector of 7 slots
-;; [ cookie NAME VALUE EXPIRES LOCALPART DOMAIN SECURE ]
-
-(defsubst url-cookie-name (cookie) (aref cookie 1))
-(defsubst url-cookie-value (cookie) (aref cookie 2))
-(defsubst url-cookie-expires (cookie) (aref cookie 3))
-(defsubst url-cookie-localpart (cookie) (aref cookie 4))
-(defsubst url-cookie-domain (cookie) (aref cookie 5))
-(defsubst url-cookie-secure (cookie) (aref cookie 6))
-
-(defsubst url-cookie-set-name (cookie val) (aset cookie 1 val))
-(defsubst url-cookie-set-value (cookie val) (aset cookie 2 val))
-(defsubst url-cookie-set-expires (cookie val) (aset cookie 3 val))
-(defsubst url-cookie-set-localpart (cookie val) (aset cookie 4 val))
-(defsubst url-cookie-set-domain (cookie val) (aset cookie 5 val))
-(defsubst url-cookie-set-secure (cookie val) (aset cookie 6 val))
-(defsubst url-cookie-retrieve-arg (key args) (nth 1 (memq key args)))
-
-(defsubst url-cookie-create (&rest args)
- "Create a cookie vector object from keyword-value pairs ARGS.
-The keywords allowed are
- :name NAME
- :value VALUE
- :expires TIME
- :localpart LOCALPAR
- :domain DOMAIN
- :secure ???
-Could someone fill in more information?"
- (let ((retval (make-vector 7 nil)))
- (aset retval 0 'cookie)
- (url-cookie-set-name retval (url-cookie-retrieve-arg :name args))
- (url-cookie-set-value retval (url-cookie-retrieve-arg :value args))
- (url-cookie-set-expires retval (url-cookie-retrieve-arg :expires args))
- (url-cookie-set-localpart retval (url-cookie-retrieve-arg :localpart args))
- (url-cookie-set-domain retval (url-cookie-retrieve-arg :domain args))
- (url-cookie-set-secure retval (url-cookie-retrieve-arg :secure args))
- retval))
-
-(defun url-cookie-p (obj)
- "Return non-nil if OBJ is a cookie vector object.
-These objects represent cookies in the URL package.
-A cookie vector object is a vector of 7 slots:
- [cookie NAME VALUE EXPIRES LOCALPART DOMAIN SECURE]."
- (and (vectorp obj) (= (length obj) 7) (eq (aref obj 0) 'cookie)))
(defgroup url-cookie nil
"URL cookies."
@@ -85,6 +40,20 @@ A cookie vector object is a vector of 7 slots:
:prefix "url-cookie-"
:group 'url)
+;; A cookie is stored internally as a vector of 7 slots
+;; [ cookie NAME VALUE EXPIRES LOCALPART DOMAIN SECURE ]
+
+(defstruct (url-cookie
+ (:constructor url-cookie-create)
+ (:copier nil)
+ ;; For compatibility with a previous version which did not use
+ ;; defstruct, and also in order to make sure that the printed
+ ;; representation does not depend on CL internals, we use an
+ ;; explicitly managed tag.
+ (:type vector))
+ (tag 'cookie :read-only t)
+ name value expires localpart domain secure)
+
(defvar url-cookie-storage nil "Where cookies are stored.")
(defvar url-cookie-secure-storage nil "Where secure cookies are stored.")
(defcustom url-cookie-file nil
@@ -199,8 +168,8 @@ telling Microsoft that."
(if (and (equal localpart (url-cookie-localpart cur))
(equal name (url-cookie-name cur)))
(progn
- (url-cookie-set-expires cur expires)
- (url-cookie-set-value cur value)
+ (setf (url-cookie-expires cur) expires)
+ (setf (url-cookie-value cur) value)
(setq tmp t))))
(if (not tmp)
;; New cookie
diff --git a/lisp/url/url-dav.el b/lisp/url/url-dav.el
index b58c1672865..3c2ea872134 100644
--- a/lisp/url/url-dav.el
+++ b/lisp/url/url-dav.el
@@ -194,7 +194,7 @@
(while children
(setq node (car children)
node-type (intern
- (or
+ (or
(cdr-safe (assq url-dav-datatype-attribute
(xml-node-attributes node)))
"unknown"))
@@ -864,7 +864,7 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
(exists-p (url-http-file-exists-p newname)))
(if (and exists-p
- (or
+ (or
(null overwrite)
(and (numberp overwrite)
(not (yes-or-no-p
@@ -933,19 +933,19 @@ Returns nil if DIR contains no name starting with FILE."
(defun url-dav-register-handler (op)
(put op 'url-file-handlers (intern-soft (format "url-dav-%s" op))))
-(mapcar 'url-dav-register-handler
- ;; These handlers are disabled because they incorrectly presume that
- ;; the URL specifies an HTTP location and thus break FTP URLs.
- '(;; file-name-all-completions
- ;; file-name-completion
- ;; rename-file
- ;; make-directory
- ;; file-directory-p
- ;; directory-files
- ;; delete-file
- ;; delete-directory
- ;; file-attributes
- ))
+(mapc 'url-dav-register-handler
+ ;; These handlers are disabled because they incorrectly presume that
+ ;; the URL specifies an HTTP location and thus break FTP URLs.
+ '(;; file-name-all-completions
+ ;; file-name-completion
+ ;; rename-file
+ ;; make-directory
+ ;; file-directory-p
+ ;; directory-files
+ ;; delete-file
+ ;; delete-directory
+ ;; file-attributes
+ ))
;;; Version Control backend cruft
diff --git a/lisp/url/url-expand.el b/lisp/url/url-expand.el
index b7efd75b4b6..bebdbd9e04b 100644
--- a/lisp/url/url-expand.el
+++ b/lisp/url/url-expand.el
@@ -106,24 +106,24 @@ path components followed by `..' are removed, along with the `..' itself."
(url-recreate-url urlobj)))))
(defun url-identity-expander (urlobj defobj)
- (url-set-type urlobj (or (url-type urlobj) (url-type defobj))))
+ (setf (url-type urlobj) (or (url-type urlobj) (url-type defobj))))
(defun url-default-expander (urlobj defobj)
;; The default expansion routine - urlobj is modified by side effect!
(if (url-type urlobj)
;; Well, they told us the scheme, let's just go with it.
nil
- (url-set-type urlobj (or (url-type urlobj) (url-type defobj)))
- (url-set-port urlobj (or (url-port urlobj)
- (and (string= (url-type urlobj)
- (url-type defobj))
- (url-port defobj))))
+ (setf (url-type urlobj) (or (url-type urlobj) (url-type defobj)))
+ (setf (url-port urlobj) (or (url-port urlobj)
+ (and (string= (url-type urlobj)
+ (url-type defobj))
+ (url-port defobj))))
(if (not (string= "file" (url-type urlobj)))
- (url-set-host urlobj (or (url-host urlobj) (url-host defobj))))
+ (setf (url-host urlobj) (or (url-host urlobj) (url-host defobj))))
(if (string= "ftp" (url-type urlobj))
- (url-set-user urlobj (or (url-user urlobj) (url-user defobj))))
+ (setf (url-user urlobj) (or (url-user urlobj) (url-user defobj))))
(if (string= (url-filename urlobj) "")
- (url-set-filename urlobj "/"))
+ (setf (url-filename urlobj) "/"))
(if (string-match "^/" (url-filename urlobj))
nil
(let ((query nil)
@@ -137,9 +137,10 @@ path components followed by `..' are removed, along with the `..' itself."
(setq file (url-expander-remove-relative-links
(expand-file-name file
(url-file-directory (url-filename defobj)))))
- (url-set-filename urlobj (if query (concat file sepchar query) file))))))
+ (setf (url-filename urlobj)
+ (if query (concat file sepchar query) file))))))
(provide 'url-expand)
-;;; arch-tag: 7b5f744b-b721-49da-be47-484631680a5a
+;; arch-tag: 7b5f744b-b721-49da-be47-484631680a5a
;;; url-expand.el ends here
diff --git a/lisp/url/url-file.el b/lisp/url/url-file.el
index 6e771c9cd69..9af3bbb42b4 100644
--- a/lisp/url/url-file.el
+++ b/lisp/url/url-file.el
@@ -86,6 +86,12 @@ to them."
(error nil)))
(apply func args))))
+(declare-function ange-ftp-set-passwd "../net/ange-ftp" (host user passwd))
+(declare-function ange-ftp-copy-file-internal "../net/ange-ftp"
+ (filename newname ok-if-already-exists
+ keep-date &optional msg cont nowait))
+(declare-function url-generate-unique-filename "url-util" (&optional fmt))
+
(defun url-file-build-filename (url)
(if (not (vectorp url))
(setq url (url-generic-parse-url url)))
@@ -127,10 +133,11 @@ to them."
;; straighten it out for us?
;; (if (and (file-directory-p filename)
;; (not (string-match (format "%c$" directory-sep-char) filename)))
- ;; (url-set-filename url (format "%s%c" filename directory-sep-char)))
+ ;; (setf (url-filename url)
+ ;; (format "%s%c" filename directory-sep-char)))
(if (and (file-directory-p filename)
(not (string-match "/\\'" filename)))
- (url-set-filename url (format "%s/" filename)))
+ (setf (url-filename url) (format "%s/" filename)))
;; If it is a directory, look for an index file first.
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
index c5931c7d877..c8447dab859 100644
--- a/lisp/url/url-http.el
+++ b/lisp/url/url-http.el
@@ -1269,6 +1269,8 @@ CBARGS as the arguments."
nil nil nil) ;whether gid would change ; inode ; device.
(kill-buffer buffer)))))
+(declare-function url-dav-file-attributes (url &optional id-format))
+
;;;###autoload
(defun url-http-file-attributes (url &optional id-format)
(if (url-dav-supported-p url)
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index 10d08b9633f..5004c62415c 100644
--- a/lisp/url/url-mailto.el
+++ b/lisp/url/url-mailto.el
@@ -60,13 +60,15 @@
(save-excursion
(insert "\n"))))))
+(declare-function mail-send-and-exit "../mail/sendmail")
+
;;;###autoload
(defun url-mailto (url)
"Handle the mailto: URL syntax."
(if (url-user url)
;; malformed mailto URL (mailto://wmperry@gnu.org) instead of
;; mailto:wmperry@gnu.org
- (url-set-filename url (concat (url-user url) "@" (url-filename url))))
+ (setf (url-filename url) (concat (url-user url) "@" (url-filename url))))
(setq url (url-filename url))
(let (to args source-url subject func headers-start)
(if (string-match (regexp-quote "?") url)
diff --git a/lisp/url/url-methods.el b/lisp/url/url-methods.el
index 89c36bec737..94dcd49f00d 100644
--- a/lisp/url/url-methods.el
+++ b/lisp/url/url-methods.el
@@ -89,19 +89,19 @@
;; First check if its something like hostname:port
((string-match "^\\([^:]+\\):\\([0-9]+\\)$" env-proxy)
(setq urlobj (url-generic-parse-url nil)) ; Get a blank object
- (url-set-type urlobj "http")
- (url-set-host urlobj (match-string 1 env-proxy))
- (url-set-port urlobj (string-to-number (match-string 2 env-proxy))))
+ (setf (url-type urlobj) "http")
+ (setf (url-host urlobj) (match-string 1 env-proxy))
+ (setf (url-port urlobj) (string-to-number (match-string 2 env-proxy))))
;; Then check if its a fully specified URL
((string-match url-nonrelative-link env-proxy)
(setq urlobj (url-generic-parse-url env-proxy))
- (url-set-type urlobj "http")
- (url-set-target urlobj nil))
+ (setf (url-type urlobj) "http")
+ (setf (url-target urlobj) nil))
;; Finally, fall back on the assumption that its just a hostname
(t
(setq urlobj (url-generic-parse-url nil)) ; Get a blank object
- (url-set-type urlobj "http")
- (url-set-host urlobj env-proxy)))
+ (setf (url-type urlobj) "http")
+ (setf (url-host urlobj) env-proxy)))
(if (and (not cur-proxy) urlobj)
(progn
diff --git a/lisp/url/url-parse.el b/lisp/url/url-parse.el
index 57bebe56034..9f3437f401c 100644
--- a/lisp/url/url-parse.el
+++ b/lisp/url/url-parse.el
@@ -27,64 +27,24 @@
;;; Code:
(require 'url-vars)
+(eval-when-compile (require 'cl))
(autoload 'url-scheme-get-property "url-methods")
-(defun url-type (urlobj)
- (aref urlobj 0))
+(defstruct (url
+ (:constructor nil)
+ (:constructor url-parse-make-urlobj
+ (&optional type user password host portspec filename
+ target attributes fullness))
+ (:copier nil))
+ type user password host portspec filename target attributes fullness)
-(defun url-user (urlobj)
- (aref urlobj 1))
-
-(defun url-password (urlobj)
- (aref urlobj 2))
-
-(defun url-host (urlobj)
- (aref urlobj 3))
-
-(defun url-port (urlobj)
- (or (aref urlobj 4)
+(defsubst url-port (urlobj)
+ (or (url-portspec urlobj)
(if (url-fullness urlobj)
- (url-scheme-get-property (url-type urlobj) 'default-port))))
-
-(defun url-filename (urlobj)
- (aref urlobj 5))
-
-(defun url-target (urlobj)
- (aref urlobj 6))
-
-(defun url-attributes (urlobj)
- (aref urlobj 7))
-
-(defun url-fullness (urlobj)
- (aref urlobj 8))
-
-(defun url-set-type (urlobj type)
- (aset urlobj 0 type))
-
-(defun url-set-user (urlobj user)
- (aset urlobj 1 user))
-
-(defun url-set-password (urlobj pass)
- (aset urlobj 2 pass))
-
-(defun url-set-host (urlobj host)
- (aset urlobj 3 host))
-
-(defun url-set-port (urlobj port)
- (aset urlobj 4 port))
-
-(defun url-set-filename (urlobj file)
- (aset urlobj 5 file))
-
-(defun url-set-target (urlobj targ)
- (aset urlobj 6 targ))
-
-(defun url-set-attributes (urlobj targ)
- (aset urlobj 7 targ))
+ (url-scheme-get-property (url-type urlobj) 'default-port))))
-(defun url-set-full (urlobj val)
- (aset urlobj 8 val))
+(defsetf url-port (urlobj) (port) `(setf (url-portspec ,urlobj) ,port))
;;;###autoload
(defun url-recreate-url (urlobj)
@@ -123,17 +83,14 @@ Format is:
;; See RFC 3986.
(cond
((null url)
- (make-vector 9 nil))
+ (url-parse-make-urlobj))
((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)
- retval))
+ (url-parse-make-urlobj nil nil nil nil nil url))
(t
(with-temp-buffer
(set-syntax-table url-parse-syntax-table)
@@ -214,7 +171,8 @@ Format is:
(setq file (buffer-substring save-pos (point)))
(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))))))
+ (url-parse-make-urlobj
+ prot user pass host port file refs attr full))))))
(provide 'url-parse)
diff --git a/lisp/url/url-privacy.el b/lisp/url/url-privacy.el
index 6c29474752b..886e545ae7d 100644
--- a/lisp/url/url-privacy.el
+++ b/lisp/url/url-privacy.el
@@ -27,9 +27,10 @@
(eval-when-compile (require 'cl))
(require 'url-vars)
-(if (fboundp 'device-type)
- (defalias 'url-device-type 'device-type)
- (defun url-device-type (&optional device) (or window-system 'tty)))
+(defun url-device-type (&optional device)
+ (if (fboundp 'device-type)
+ (url-device-type device)
+ (or window-system 'tty)))
;;;###autoload
(defun url-setup-privacy-info ()
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index d7d8e2b4a4b..119f40b4da4 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -168,7 +168,7 @@ Strips out default port numbers, etc."
type (url-type data))
(if (member type '("www" "about" "mailto" "info"))
(setq retval url)
- (url-set-target data nil)
+ (setf (url-target data) nil)
(setq retval (url-recreate-url data)))
retval))
@@ -427,13 +427,13 @@ WIDTH defaults to the current frame width."
(string-match "/" fname))
(setq fname (substring fname (match-end 0) nil)
modified (1+ modified))
- (url-set-filename urlobj fname)
+ (setf (url-filename urlobj) fname)
(setq url (url-recreate-url urlobj)
str-width (length url)))
(if (> modified 1)
(setq fname (concat "/.../" fname))
(setq fname (concat "/" fname)))
- (url-set-filename urlobj fname)
+ (setf (url-filename urlobj) fname)
(setq url (url-recreate-url urlobj)))
url))
diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el
index 35e69e7990b..564be3e2eb6 100644
--- a/lisp/url/url-vars.el
+++ b/lisp/url/url-vars.el
@@ -62,12 +62,12 @@
(defvar url-current-mime-headers nil
"A parsed representation of the MIME headers for the current url.")
-(mapcar 'make-variable-buffer-local
- '(
- url-current-object
- url-current-referer
- url-current-mime-headers
- ))
+(mapc 'make-variable-buffer-local
+ '(
+ url-current-object
+ url-current-referer
+ url-current-mime-headers
+ ))
(defcustom url-honor-refresh-requests t
"*Whether to do automatic page reloads.
@@ -398,11 +398,6 @@ Currently supported methods:
This should be set, e.g. by mail user agents rendering HTML to avoid
`bugs' which call home.")
-(defun url-vars-unload-hook ()
- (remove-hook 'set-language-environment-hook 'url-set-mime-charset-string))
-
-(add-hook 'url-vars-unload-hook 'url-vars-unload-hook)
-
(provide 'url-vars)
;;; arch-tag: 29205e5f-c5ce-433c-8d5d-38cbaed64b49
diff --git a/lisp/url/url.el b/lisp/url/url.el
index 98dc939af99..c375a75e06f 100644
--- a/lisp/url/url.el
+++ b/lisp/url/url.el
@@ -50,7 +50,8 @@
(defvar url-configuration-directory
(cond
((file-directory-p "~/.url") "~/.url")
- ((file-directory-p "~/.emacs.d") "~/.emacs.d/url")
+ ((file-directory-p user-emacs-directory)
+ (concat user-emacs-directory "url"))
(t "~/.url")))
(defun url-do-setup ()
diff --git a/lisp/vc-arch.el b/lisp/vc-arch.el
index 36cb9d616da..ecaee28c6d2 100644
--- a/lisp/vc-arch.el
+++ b/lisp/vc-arch.el
@@ -62,7 +62,7 @@
;;;
(defvar vc-arch-command
- (let ((candidates '("tla")))
+ (let ((candidates '("tla" "baz")))
(while (and candidates (not (executable-find (car candidates))))
(setq candidates (cdr candidates)))
(or (car candidates) "tla")))
@@ -83,7 +83,10 @@
(comment-normalize-vars)
(goto-char (point-max))
(forward-comment -1)
- (unless (bolp) (insert "\n"))
+ (skip-chars-forward " \t\n")
+ (cond
+ ((not (bolp)) (insert "\n\n"))
+ ((not (eq ?\n (char-before (1- (point))))) (insert "\n")))
(let ((beg (point))
(idfile (and buffer-file-name
(expand-file-name
@@ -195,16 +198,17 @@ Only the value `maybe' can be trusted :-(."
;; creates a {arch} directory somewhere.
file 'arch-root (vc-find-root file "{arch}/=tagging-method"))))
-(defun vc-arch-register (file &optional rev comment)
+(defun vc-arch-register (files &optional rev comment)
(if rev (error "Explicit initial revision not supported for Arch"))
- (let ((tagmet (vc-arch-tagging-method file)))
- (if (and (memq tagmet '(tagline implicit)) comment-start)
- (with-current-buffer (find-file-noselect file)
- (if (buffer-modified-p)
- (error "Save %s first" (buffer-name)))
- (vc-arch-add-tagline)
- (save-buffer))
- (vc-arch-command nil 0 file "add"))))
+ (dolist (file files)
+ (let ((tagmet (vc-arch-tagging-method file)))
+ (if (and (memq tagmet '(tagline implicit)) comment-start)
+ (with-current-buffer (find-file-noselect file)
+ (if (buffer-modified-p)
+ (error "Save %s first" (buffer-name)))
+ (vc-arch-add-tagline)
+ (save-buffer)))))
+ (vc-arch-command nil 0 files "add"))
(defun vc-arch-registered (file)
;; Don't seriously check whether it's source or not. Checking would
@@ -261,7 +265,7 @@ Return non-nil if FILE is unchanged."
;; ID not found.
(if (equal (file-name-nondirectory sigfile)
(subst-char-in-string
- ?/ ?% (vc-arch-workfile-version file)))
+ ?/ ?% (vc-arch-working-revision file)))
'added
;; Might be `added' or `up-to-date' as well.
;; FIXME: Check in the patch logs to find out.
@@ -279,7 +283,7 @@ Return non-nil if FILE is unchanged."
'up-to-date
'edited)))))))))
-(defun vc-arch-workfile-version (file)
+(defun vc-arch-working-revision (file)
(let* ((root (expand-file-name "{arch}" (vc-arch-root file)))
(defbranch (vc-arch-default-version file)))
(when (and defbranch (string-match "\\`\\(.+@[^/\n]+\\)/\\(\\(\\(.*?\\)\\(?:--.*\\)?\\)--.*\\)\\'" defbranch))
@@ -317,7 +321,7 @@ Return non-nil if FILE is unchanged."
(defun vc-arch-mode-line-string (file)
"Return string for placement in modeline by `vc-mode-line' for FILE."
- (let ((rev (vc-workfile-version file)))
+ (let ((rev (vc-working-revision file)))
(dolist (rule vc-arch-mode-line-rewrite)
(if (string-match (car rule) rev)
(setq rev (replace-match (cdr rule) t nil rev))))
@@ -361,49 +365,51 @@ Return non-nil if FILE is unchanged."
(message "There are unresolved conflicts in %s"
(file-name-nondirectory rej))))))
-(defun vc-arch-find-file-not-found-hook ()
- ;; Do nothing. We are not sure whether the file is `source' or not,
- ;; so we shouldn't ask the user whether she wants to check it out.
- )
-
(defun vc-arch-checkout-model (file) 'implicit)
-(defun vc-arch-checkin (file rev comment)
+(defun vc-arch-checkin (files rev comment)
(if rev (error "Committing to a specific revision is unsupported"))
- (let ((summary (file-relative-name file (vc-arch-root file))))
+ ;; FIXME: This implementation probably only works for singleton filesets
+ (let ((summary (file-relative-name (car files) (vc-arch-root (car files)))))
;; Extract a summary from the comment.
(when (or (string-match "\\`Summary:[ \t]*\\(.*[^ \t\n]\\)\\([ \t]*\n\\)*" comment)
(string-match "\\`[ \t]*\\(.*[^ \t\n]\\)[ \t]*\\(\n?\\'\\|\n\\([ \t]*\n\\)+\\)" comment))
(setq summary (match-string 1 comment))
(setq comment (substring comment (match-end 0))))
- (vc-arch-command nil 0 file "commit" "-s" summary "-L" comment "--"
+ (vc-arch-command nil 0 files "commit" "-s" summary "-L" comment "--"
(vc-switches 'Arch 'checkin))))
-(defun vc-arch-diff (file &optional oldvers newvers buffer)
- "Get a difference report using Arch between two versions of FILE."
- (if (and newvers
- (vc-up-to-date-p file)
- (equal newvers (vc-workfile-version file)))
- ;; Newvers is the base revision and the current file is unchanged,
- ;; so we can diff with the current file.
- (setq newvers nil))
- (if newvers
- (error "Diffing specific revisions not implemented")
- (let* ((async (and (not vc-disable-async-diff) (fboundp 'start-process)))
- ;; Run the command from the root dir.
- (default-directory (vc-arch-root file))
- (status
- (vc-arch-command
- (or buffer "*vc-diff*")
- (if async 'async 1)
- nil "file-diffs"
- ;; Arch does not support the typical flags.
- ;; (vc-switches 'Arch 'diff)
- (file-relative-name file)
- (if (equal oldvers (vc-workfile-version file))
- nil
- oldvers))))
- (if async 1 status)))) ; async diff, pessimistic assumption.
+(defun vc-arch-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using Arch between two versions of FILES."
+ ;; FIXME: This implementation only works for singleton filesets. To make
+ ;; it work for more cases, we have to either call `file-diffs' manually on
+ ;; each and every `file' in the fileset, or use `changes --diffs' (and
+ ;; variants) and maybe filter the output with `filterdiff' to only include
+ ;; the files in which we're interested.
+ (let ((file (car files)))
+ (if (and newvers
+ (vc-up-to-date-p file)
+ (equal newvers (vc-working-revision file)))
+ ;; Newvers is the base revision and the current file is unchanged,
+ ;; so we can diff with the current file.
+ (setq newvers nil))
+ (if newvers
+ (error "Diffing specific revisions not implemented")
+ (let* ((async (not vc-disable-async-diff))
+ ;; Run the command from the root dir.
+ (default-directory (vc-arch-root file))
+ (status
+ (vc-arch-command
+ (or buffer "*vc-diff*")
+ (if async 'async 1)
+ nil "file-diffs"
+ ;; Arch does not support the typical flags.
+ ;; (vc-switches 'Arch 'diff)
+ (file-relative-name file)
+ (if (equal oldvers (vc-working-revision file))
+ nil
+ oldvers))))
+ (if async 1 status))))) ; async diff, pessimistic assumption.
(defun vc-arch-delete-file (file)
(vc-arch-command nil 0 file "rm"))
@@ -417,7 +423,7 @@ Return non-nil if FILE is unchanged."
"A wrapper around `vc-do-command' for use in vc-arch.el."
(apply 'vc-do-command buffer okstatus vc-arch-command file flags))
-(defun vc-arch-init-version () nil)
+(defun vc-arch-init-revision () nil)
;;; Completion of versions and revisions.
@@ -436,14 +442,112 @@ Return non-nil if FILE is unchanged."
(concat "*/" string))
"*"))))))
-(defun vc-arch-revision-completion-table (file)
- (lexical-let ((file file))
+(defun vc-arch-revision-completion-table (files)
+ (lexical-let ((files files))
(lambda (string pred action)
;; FIXME: complete revision patches as well.
- (let* ((root (expand-file-name "{arch}" (vc-arch-root file)))
+ (let* ((root (expand-file-name "{arch}" (vc-arch-root (car files))))
(table (vc-arch--version-completion-table root string)))
(complete-with-action action table string pred)))))
+;;; Trimming revision libraries.
+
+;; This code is not directly related to VC and there are many variants of
+;; this functionality available as scripts, but I like this version better,
+;; so maybe others will like it too.
+
+(defun vc-arch-trim-find-least-useful-rev (revs)
+ (let* ((first (pop revs))
+ (second (pop revs))
+ (third (pop revs))
+ ;; We try to give more importance to recent revisions. The idea is
+ ;; that it's OK if checking out a revision 1000-patch-old is ten
+ ;; times slower than checking out a revision 100-patch-old. But at
+ ;; the same time a 2-patch-old rev isn't really ten times more
+ ;; important than a 20-patch-old, so we use an arbitrary constant
+ ;; "100" to reduce this effect for recent revisions. Making this
+ ;; constant a float has the side effect of causing the subsequent
+ ;; computations to be done as floats as well.
+ (max (+ 100.0 (car (or (car (last revs)) third))))
+ (cost (lambda () (/ (- (car third) (car first)) (- max (car second)))))
+ (minrev second)
+ (mincost (funcall cost)))
+ (while revs
+ (setq first second)
+ (setq second third)
+ (setq third (pop revs))
+ (when (< (funcall cost) mincost)
+ (setq minrev second)
+ (setq mincost (funcall cost))))
+ minrev))
+
+(defun vc-arch-trim-make-sentinel (revs)
+ (if (null revs) (lambda (proc msg) (message "VC-Arch trimming ... done"))
+ `(lambda (proc msg)
+ (message "VC-Arch trimming %s..." ',(file-name-nondirectory (car revs)))
+ (rename-file ,(car revs) ,(concat (car revs) "*rm*"))
+ (setq proc (start-process "vc-arch-trim" nil
+ "rm" "-rf" ',(concat (car revs) "*rm*")))
+ (set-process-sentinel proc (vc-arch-trim-make-sentinel ',(cdr revs))))))
+
+(defun vc-arch-trim-one-revlib (dir)
+ "Delete half of the revisions in the revision library."
+ (interactive "Ddirectory: ")
+ (let ((revs
+ (sort (delq nil
+ (mapcar
+ (lambda (f)
+ (when (string-match "-\\([0-9]+\\)\\'" f)
+ (cons (string-to-number (match-string 1 f)) f)))
+ (directory-files dir nil nil 'nosort)))
+ 'car-less-than-car))
+ (subdirs nil))
+ (when (cddr revs)
+ (dotimes (i (/ (length revs) 2))
+ (let ((minrev (vc-arch-trim-find-least-useful-rev revs)))
+ (setq revs (delq minrev revs))
+ (push minrev subdirs)))
+ (funcall (vc-arch-trim-make-sentinel
+ (mapcar (lambda (x) (expand-file-name (cdr x) dir)) subdirs))
+ nil nil))))
+
+(defun vc-arch-trim-revlib ()
+ "Delete half of the revisions in the revision library."
+ (interactive)
+ (let ((rl-dir (with-output-to-string
+ (call-process vc-arch-command nil standard-output nil
+ "my-revision-library"))))
+ (while (string-match "\\(.*\\)\n" rl-dir)
+ (let ((dir (match-string 1 rl-dir)))
+ (setq rl-dir
+ (if (and (file-directory-p dir) (file-writable-p dir))
+ dir
+ (substring rl-dir (match-end 0))))))
+ (unless (file-writable-p rl-dir)
+ (error "No writable revlib directory found"))
+ (message "Revlib at %s" rl-dir)
+ (let* ((archives (directory-files rl-dir 'full "[^.]\\|..."))
+ (categories
+ (apply 'append
+ (mapcar (lambda (dir)
+ (when (file-directory-p dir)
+ (directory-files dir 'full "[^.]\\|...")))
+ archives)))
+ (branches
+ (apply 'append
+ (mapcar (lambda (dir)
+ (when (file-directory-p dir)
+ (directory-files dir 'full "[^.]\\|...")))
+ categories)))
+ (versions
+ (apply 'append
+ (mapcar (lambda (dir)
+ (when (file-directory-p dir)
+ (directory-files dir 'full "--.*--")))
+ branches))))
+ (mapc 'vc-arch-trim-one-revlib versions))
+ ))
+
(defvar vc-arch-extra-menu-map
(let ((map (make-sparse-keymap)))
(define-key map [add-tagline]
@@ -455,7 +559,7 @@ Return non-nil if FILE is unchanged."
;;; Less obvious implementations.
-(defun vc-arch-find-version (file rev buffer)
+(defun vc-arch-find-revision (file rev buffer)
(let ((out (make-temp-file "vc-out")))
(unwind-protect
(progn
diff --git a/lisp/vc-bzr.el b/lisp/vc-bzr.el
index e30af4369c2..801e1942cb6 100644
--- a/lisp/vc-bzr.el
+++ b/lisp/vc-bzr.el
@@ -92,6 +92,7 @@ Invoke the bzr command adding `BZR_PROGRESS_BAR=none' to the environment."
(apply 'vc-do-command buffer okstatus vc-bzr-program
file-or-list bzr-command (append vc-bzr-program-args args))))
+
;;;###autoload
(defconst vc-bzr-admin-dirname ".bzr" ; FIXME: "_bzr" on w32?
"Name of the directory containing Bzr repository status files.")
@@ -237,7 +238,7 @@ If any error occurred in running `bzr status', then return nil."
(defun vc-bzr-workfile-unchanged-p (file)
(eq 'unchanged (car (vc-bzr-status file))))
-(defun vc-bzr-workfile-version (file)
+(defun vc-bzr-working-revision (file)
(lexical-let*
((rootdir (vc-bzr-root file))
(branch-format-file (expand-file-name vc-bzr-admin-branch-format-file
@@ -283,7 +284,7 @@ If any error occurred in running `bzr status', then return nil."
"Register FILE under bzr.
Signal an error unless REV is nil.
COMMENT is ignored."
- (if rev (error "Can't register explicit version with bzr"))
+ (if rev (error "Can't register explicit revision with bzr"))
(vc-bzr-command "add" nil 0 files))
;; Could run `bzr status' in the directory and see if it succeeds, but
@@ -312,7 +313,7 @@ or a superior directory.")
(defun vc-bzr-checkin (files rev comment)
"Check FILE in to bzr with log message COMMENT.
REV non-nil gets an error."
- (if rev (error "Can't check in a specific version with bzr"))
+ (if rev (error "Can't check in a specific revision with bzr"))
(vc-bzr-command "commit" nil 0 files "-m" comment))
(defun vc-bzr-checkout (file &optional editable rev destfile)
@@ -364,11 +365,11 @@ EDITABLE is ignored."
(unless (fboundp 'vc-default-log-view-mode)
(add-hook 'log-view-mode-hook 'vc-bzr-log-view-mode)))
-(defun vc-bzr-show-log-entry (version)
- "Find entry for patch name VERSION in bzr change log buffer."
+(defun vc-bzr-show-log-entry (revision)
+ "Find entry for patch name REVISION in bzr change log buffer."
(goto-char (point-min))
(let (case-fold-search)
- (if (re-search-forward (concat "^-+\nrevno: " version "$") nil t)
+ (if (re-search-forward (concat "^-+\nrevno: " revision "$") nil t)
(beginning-of-line 0)
(goto-char (point-min)))))
@@ -376,7 +377,7 @@ EDITABLE is ignored."
(defun vc-bzr-diff (files &optional rev1 rev2 buffer)
"VC bzr backend for diff."
- (let ((working (vc-workfile-version (if (consp files) (car files) files))))
+ (let ((working (vc-working-revision (if (consp files) (car files) files))))
(if (and (equal rev1 working) (not rev2))
(setq rev1 nil))
(if (and (not rev1) rev2)
@@ -390,11 +391,10 @@ EDITABLE is ignored."
(list "-r" (format "%s..%s" rev1 rev2))
(list "-r" rev1))))))
-(defalias 'vc-bzr-diff-tree 'vc-bzr-diff)
-;; FIXME: vc-{next,previous}-version need fixing in vc.el to deal with
-;; straight integer versions.
+;; FIXME: vc-{next,previous}-revision need fixing in vc.el to deal with
+;; straight integer revisions.
(defun vc-bzr-delete-file (file)
"Delete FILE and delete it in the bzr repository."
@@ -411,12 +411,12 @@ EDITABLE is ignored."
"Internal use.")
(make-variable-buffer-local 'vc-bzr-annotation-table)
-(defun vc-bzr-annotate-command (file buffer &optional version)
+(defun vc-bzr-annotate-command (file buffer &optional revision)
"Prepare BUFFER for `vc-annotate' on FILE.
Each line is tagged with the revision number, which has a `help-echo'
property containing author and date information."
(apply #'vc-bzr-command "annotate" buffer 0 file "--long" "--all"
- (if version (list "-r" version)))
+ (if revision (list "-r" revision)))
(with-current-buffer buffer
;; Store the tags for the annotated source lines in a hash table
;; to allow saving space by sharing the text properties.
@@ -545,7 +545,7 @@ Optional argument LOCALP is always ignored."
(vc-file-setprop file 'vc-state current-vc-state)
(vc-file-setprop file 'vc-bzr-state current-bzr-state)
(when (eq 'added current-bzr-state)
- (vc-file-setprop file 'vc-workfile-version "0"))))
+ (vc-file-setprop file 'vc-working-revision "0"))))
(when (eq 'not-versioned current-bzr-state)
(let ((file (expand-file-name
(buffer-substring-no-properties
diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el
index a0eb2609ade..c9c50fceba2 100644
--- a/lisp/vc-cvs.el
+++ b/lisp/vc-cvs.el
@@ -31,6 +31,10 @@
(eval-when-compile (require 'cl) (require 'vc))
+;; Clear up the cache to force vc-call to check again and discover
+;; new functions when we reload this file.
+(put 'CVS 'vc-functions nil)
+
;;;
;;; Customization options
;;;
@@ -225,13 +229,13 @@ See also variable `vc-cvs-sticky-date-format-string'."
(goto-char (point-max))
(widen)))))))
-(defun vc-cvs-workfile-version (file)
- "CVS-specific version of `vc-workfile-version'."
+(defun vc-cvs-working-revision (file)
+ "CVS-specific version of `vc-working-revision'."
;; There is no need to consult RCS headers under CVS, because we
;; get the workfile version for free when we recognize that a file
;; is registered in CVS.
(vc-cvs-registered file)
- (vc-file-getprop file 'vc-workfile-version))
+ (vc-file-getprop file 'vc-working-revision))
(defun vc-cvs-checkout-model (file)
"CVS-specific version of `vc-checkout-model'."
@@ -254,20 +258,31 @@ See also variable `vc-cvs-sticky-date-format-string'."
Compared to the default implementation, this function does two things:
Handle the special case of a CVS file that is added but not yet
committed and support display of sticky tags."
- (let ((sticky-tag (vc-file-getprop file 'vc-cvs-sticky-tag))
- (string (if (string= (vc-workfile-version file) "0")
- ;; A file that is added but not yet committed.
- "CVS @@"
- (vc-default-mode-line-string 'CVS file))))
- (if (zerop (length sticky-tag))
- string
- (concat string "[" sticky-tag "]"))))
+ (let* ((sticky-tag (vc-file-getprop file 'vc-cvs-sticky-tag))
+ help-echo
+ (string
+ (if (string= (vc-working-revision file) "0")
+ ;; A file that is added but not yet committed.
+ (progn
+ (setq help-echo "Added file (needs commit) under CVS")
+ "CVS @@")
+ (let ((def-ml (vc-default-mode-line-string 'CVS file)))
+ (setq help-echo
+ (get-text-property 0 'help-echo def-ml))
+ def-ml))))
+ (propertize
+ (if (zerop (length sticky-tag))
+ string
+ (setq help-echo (format "%s on the '%s' branch"
+ help-echo sticky-tag))
+ (concat string "[" sticky-tag "]"))
+ 'help-echo help-echo)))
(defun vc-cvs-dired-state-info (file)
"CVS-specific version of `vc-dired-state-info'."
(let ((cvs-state (vc-state file)))
(cond ((eq cvs-state 'edited)
- (if (equal (vc-workfile-version file) "0")
+ (if (equal (vc-working-revision file) "0")
"(added)" "(modified)"))
((eq cvs-state 'needs-patch) "(patch)")
((eq cvs-state 'needs-merge) "(merge)"))))
@@ -277,21 +292,21 @@ committed and support display of sticky tags."
;;; State-changing functions
;;;
-(defun vc-cvs-register (file &optional rev comment)
- "Register FILE into the CVS version-control system.
-COMMENT can be used to provide an initial description of FILE.
+(defun vc-cvs-register (files &optional rev comment)
+ "Register FILES into the CVS version-control system.
+COMMENT can be used to provide an initial description of FILES.
`vc-register-switches' and `vc-cvs-register-switches' are passed to
the CVS command (in that order)."
(when (and (not (vc-cvs-responsible-p file))
- (vc-cvs-could-register file))
- ;; Register the directory if needed.
- (vc-cvs-register (directory-file-name (file-name-directory file))))
- (apply 'vc-cvs-command nil 0 file
- "add"
- (and comment (string-match "[^\t\n ]" comment)
- (concat "-m" comment))
- (vc-switches 'CVS 'register)))
+ (vc-cvs-could-register file))
+ ;; Register the directory if needed.
+ (vc-cvs-register (directory-file-name (file-name-directory file))))
+ (apply 'vc-cvs-command nil 0 files
+ "add"
+ (and comment (string-match "[^\t\n ]" comment)
+ (concat "-m" comment))
+ (vc-switches 'CVS 'register)))
(defun vc-cvs-responsible-p (file)
"Return non-nil if CVS thinks it is responsible for FILE."
@@ -313,17 +328,18 @@ its parents."
t (directory-file-name dir))))
(eq dir t)))
-(defun vc-cvs-checkin (file rev comment)
+(defun vc-cvs-checkin (files rev comment)
"CVS-specific version of `vc-backend-checkin'."
- (unless (or (not rev) (vc-cvs-valid-version-number-p rev))
+ (unless (or (not rev) (vc-cvs-valid-revision-number-p rev))
(if (not (vc-cvs-valid-symbolic-tag-name-p rev))
(error "%s is not a valid symbolic tag name" rev)
;; If the input revison is a valid symbolic tag name, we create it
;; as a branch, commit and switch to it.
- (apply 'vc-cvs-command nil 0 file "tag" "-b" (list rev))
- (apply 'vc-cvs-command nil 0 file "update" "-r" (list rev))
- (vc-file-setprop file 'vc-cvs-sticky-tag rev)))
- (let ((status (apply 'vc-cvs-command nil 1 file
+ (apply 'vc-cvs-command nil 0 files "tag" "-b" (list rev))
+ (apply 'vc-cvs-command nil 0 files "update" "-r" (list rev))
+ (mapc (lambda (file) (vc-file-setprop file 'vc-cvs-sticky-tag rev))
+ files)))
+ (let ((status (apply 'vc-cvs-command nil 1 files
"ci" (if rev (concat "-r" rev))
(concat "-m" comment)
(vc-switches 'CVS 'checkin))))
@@ -333,7 +349,8 @@ its parents."
;; Check checkin problem.
(cond
((re-search-forward "Up-to-date check failed" nil t)
- (vc-file-setprop file 'vc-state 'needs-merge)
+ (mapc (lambda (file) (vc-file-setprop file 'vc-state 'needs-merge))
+ files)
(error (substitute-command-keys
(concat "Up-to-date check failed: "
"type \\[vc-next-action] to merge in changes"))))
@@ -342,22 +359,27 @@ its parents."
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)
(error "Check-in failed"))))
- ;; Update file properties
- (vc-file-setprop
- file 'vc-workfile-version
- (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
- ;; Forget the checkout model of the file, because we might have
+ ;; Single-file commit? Then update the revision by parsing the buffer.
+ ;; Otherwise we can't necessarily tell what goes with what; clear
+ ;; its properties so they have to be refetched.
+ (if (= (length files) 1)
+ (vc-file-setprop
+ (car files) 'vc-working-revision
+ (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
+ (mapc (lambda (file) (vc-file-clearprops file)) files))
+ ;; Anyway, forget the checkout model of the file, because we might have
;; guessed wrong when we found the file. After commit, we can
;; tell it from the permissions of the file (see
;; vc-cvs-checkout-model).
- (vc-file-setprop file 'vc-checkout-model nil)
+ (mapc (lambda (file) (vc-file-setprop file 'vc-checkout-model nil))
+ files)
;; if this was an explicit check-in (does not include creation of
;; a branch), remove the sticky tag.
(if (and rev (not (vc-cvs-valid-symbolic-tag-name-p rev)))
- (vc-cvs-command nil 0 file "update" "-A"))))
+ (vc-cvs-command nil 0 files "update" "-A"))))
-(defun vc-cvs-find-version (file rev buffer)
+(defun vc-cvs-find-revision (file rev buffer)
(apply 'vc-cvs-command
buffer 0 file
"-Q" ; suppress diagnostic output
@@ -367,112 +389,58 @@ its parents."
"-p"
(vc-switches 'CVS 'checkout)))
-(defun vc-cvs-checkout (file &optional editable rev workfile)
- "Retrieve a revision of FILE into a WORKFILE.
+(defun vc-cvs-checkout (file &optional editable rev)
+ "Checkout a revision of FILE into the working area.
EDITABLE non-nil means that the file should be writable.
-REV is the revision to check out into WORKFILE."
- (let ((filename (or workfile file))
- (file-buffer (get-file-buffer file))
- switches)
- (message "Checking out %s..." filename)
- (save-excursion
- ;; Change buffers to get local value of vc-checkout-switches.
- (if file-buffer (set-buffer file-buffer))
- (setq switches (vc-switches 'CVS 'checkout))
- ;; Save this buffer's default-directory
- ;; and use save-excursion to make sure it is restored
- ;; in the same buffer it was saved in.
- (let ((default-directory default-directory))
- (save-excursion
- ;; Adjust the default-directory so that the check-out creates
- ;; the file in the right place.
- (setq default-directory (file-name-directory filename))
- (if workfile
- (let ((failed t)
- (backup-name (if (string= file workfile)
- (car (find-backup-file-name filename)))))
- (when backup-name
- (copy-file filename backup-name
- 'ok-if-already-exists 'keep-date)
- (unless (file-writable-p filename)
- (set-file-modes filename
- (logior (file-modes filename) 128))))
- (unwind-protect
- (progn
- (let ((coding-system-for-read 'no-conversion)
- (coding-system-for-write 'no-conversion))
- (with-temp-file filename
- (apply 'vc-cvs-command
- (current-buffer) 0 file
- "-Q" ; suppress diagnostic output
- "update"
- (and (stringp rev)
- (not (string= rev ""))
- (concat "-r" rev))
- "-p"
- switches)))
- (setq failed nil))
- (if failed
- (if backup-name
- (rename-file backup-name filename
- 'ok-if-already-exists)
- (if (file-exists-p filename)
- (delete-file filename)))
- (and backup-name
- (not vc-make-backup-files)
- (delete-file backup-name)))))
- (if (and (file-exists-p file) (not rev))
- ;; If no revision was specified, just make the file writable
- ;; if necessary (using `cvs-edit' if requested).
- (and editable (not (eq (vc-cvs-checkout-model file) 'implicit))
- (if vc-cvs-use-edit
- (vc-cvs-command nil 0 file "edit")
- (set-file-modes file (logior (file-modes file) 128))
- (if file-buffer (toggle-read-only -1))))
- ;; Check out a particular version (or recreate the file).
- (vc-file-setprop file 'vc-workfile-version nil)
- (apply 'vc-cvs-command nil 0 file
- (and editable
- (or (not (file-exists-p file))
- (not (eq (vc-cvs-checkout-model file)
- 'implicit)))
- "-w")
- "update"
- (when rev
- (unless (eq rev t)
- ;; default for verbose checkout: clear the
- ;; sticky tag so that the actual update will
- ;; get the head of the trunk
- (if (string= rev "")
- "-A"
- (concat "-r" rev))))
- switches))))
- (vc-mode-line file)
- (message "Checking out %s...done" filename)))))
+REV is the revision to check out."
+ (message "Checking out %s..." file)
+ ;; Change buffers to get local value of vc-checkout-switches.
+ (with-current-buffer (or (get-file-buffer file) (current-buffer))
+ (if (and (file-exists-p file) (not rev))
+ ;; If no revision was specified, just make the file writable
+ ;; if necessary (using `cvs-edit' if requested).
+ (and editable (not (eq (vc-cvs-checkout-model file) 'implicit))
+ (if vc-cvs-use-edit
+ (vc-cvs-command nil 0 file "edit")
+ (set-file-modes file (logior (file-modes file) 128))
+ (if (equal file buffer-file-name) (toggle-read-only -1))))
+ ;; Check out a particular revision (or recreate the file).
+ (vc-file-setprop file 'vc-working-revision nil)
+ (apply 'vc-cvs-command nil 0 file
+ (and editable "-w")
+ "update"
+ (when rev
+ (unless (eq rev t)
+ ;; default for verbose checkout: clear the
+ ;; sticky tag so that the actual update will
+ ;; get the head of the trunk
+ (if (string= rev "")
+ "-A"
+ (concat "-r" rev))))
+ (vc-switches 'CVS 'checkout)))
+ (vc-mode-line file))
+ (message "Checking out %s...done" file))
(defun vc-cvs-delete-file (file)
(vc-cvs-command nil 0 file "remove" "-f")
(vc-cvs-command nil 0 file "commit" "-mRemoved."))
(defun vc-cvs-revert (file &optional contents-done)
- "Revert FILE to the version it was based on."
- (unless contents-done
- ;; Check out via standard output (caused by the final argument
- ;; FILE below), so that no sticky tag is set.
- (vc-cvs-checkout file nil (vc-workfile-version file) file))
+ "Revert FILE to the working revision on which it was based."
+ (vc-default-revert 'CVS file contents-done)
(unless (eq (vc-checkout-model file) 'implicit)
(if vc-cvs-use-edit
(vc-cvs-command nil 0 file "unedit")
;; Make the file read-only by switching off all w-bits
(set-file-modes file (logand (file-modes file) 3950)))))
-(defun vc-cvs-merge (file first-version &optional second-version)
+(defun vc-cvs-merge (file first-revision &optional second-revision)
"Merge changes into current working copy of FILE.
-The changes are between FIRST-VERSION and SECOND-VERSION."
+The changes are between FIRST-REVISION and SECOND-REVISION."
(vc-cvs-command nil 0 file
"update" "-kk"
- (concat "-j" first-version)
- (concat "-j" second-version))
+ (concat "-j" first-revision)
+ (concat "-j" second-revision))
(vc-file-setprop file 'vc-state 'edited)
(with-current-buffer (get-buffer "*vc*")
(goto-char (point-min))
@@ -483,18 +451,18 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
(defun vc-cvs-merge-news (file)
"Merge in any new changes made to FILE."
(message "Merging changes into %s..." file)
- ;; (vc-file-setprop file 'vc-workfile-version nil)
+ ;; (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time 0)
(vc-cvs-command nil 0 file "update")
;; Analyze the merge result reported by CVS, and set
;; file properties accordingly.
(with-current-buffer (get-buffer "*vc*")
(goto-char (point-min))
- ;; get new workfile version
+ ;; get new working revision
(if (re-search-forward
"^Merging differences between [0-9.]* and \\([0-9.]*\\) into" nil t)
- (vc-file-setprop file 'vc-workfile-version (match-string 1))
- (vc-file-setprop file 'vc-workfile-version nil))
+ (vc-file-setprop file 'vc-working-revision (match-string 1))
+ (vc-file-setprop file 'vc-working-revision nil))
;; get file status
(prog1
(if (eq (buffer-size) 0)
@@ -531,37 +499,60 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
;;; History functions
;;;
-(defun vc-cvs-print-log (file &optional buffer)
+(defun vc-cvs-print-log (files &optional buffer)
"Get change log associated with FILE."
(vc-cvs-command
buffer
- (if (and (vc-stay-local-p file) (fboundp 'start-process)) 'async 0)
- file "log"))
-
-(defun vc-cvs-diff (file &optional oldvers newvers buffer)
- "Get a difference report using CVS between two versions of FILE."
- (if (string= (vc-workfile-version file) "0")
- ;; This file is added but not yet committed; there is no master file.
- (if (or oldvers newvers)
- (error "No revisions of %s exist" file)
- ;; We regard this as "changed".
- ;; Diff it against /dev/null.
- ;; Note: this is NOT a "cvs diff".
- (apply 'vc-do-command (or buffer "*vc-diff*")
- 1 "diff" file
- (append (vc-switches nil 'diff) '("/dev/null")))
- ;; Even if it's empty, it's locally modified.
- 1)
- (let* ((async (and (not vc-disable-async-diff)
- (vc-stay-local-p file)
- (fboundp 'start-process)))
- (status (apply 'vc-cvs-command (or buffer "*vc-diff*")
+ (if (vc-stay-local-p files) 'async 0)
+ files "log"))
+
+(defun vc-cvs-wash-log ()
+ "Remove all non-comment information from log output."
+ (vc-call-backend 'RCS 'wash-log)
+ nil)
+
+(defun vc-cvs-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using CVS between two revisions of FILE."
+ (let* ((async (and (not vc-disable-async-diff)
+ (vc-stay-local-p files)))
+ (invoke-cvs-diff-list nil)
+ status)
+ ;; Look through the file list and see if any files have backups
+ ;; that can be used to do a plain "diff" instead of "cvs diff".
+ (dolist (file files)
+ (let ((ov oldvers)
+ (nv newvers))
+ (when (or (not ov) (string-equal ov ""))
+ (setq ov (vc-working-revision file)))
+ (when (string-equal nv "")
+ (setq nv nil))
+ (let ((file-oldvers (vc-version-backup-file file ov))
+ (file-newvers (if (not nv)
+ file
+ (vc-version-backup-file file nv)))
+ (coding-system-for-read (vc-coding-system-for-diff file)))
+ (if (and file-oldvers file-newvers)
+ (progn
+ (apply 'vc-do-command (or buffer "*vc-diff*") 1 "diff" nil
+ (append (if (listp diff-switches)
+ diff-switches
+ (list diff-switches))
+ (if (listp vc-diff-switches)
+ vc-diff-switches
+ (list vc-diff-switches))
+ (list (file-relative-name file-oldvers)
+ (file-relative-name file-newvers))))
+ (setq status 0))
+ (push file invoke-cvs-diff-list)))))
+ (when invoke-cvs-diff-list
+ (setq status (apply 'vc-cvs-command (or buffer "*vc-diff*")
(if async 'async 1)
- file "diff"
+ invoke-cvs-diff-list "diff"
(and oldvers (concat "-r" oldvers))
(and newvers (concat "-r" newvers))
(vc-switches 'CVS 'diff))))
- (if async 1 status)))) ; async diff, pessimistic assumption
+ (if async 1 status))) ; async diff, pessimistic assumption
+
(defun vc-cvs-diff-tree (dir &optional rev1 rev2)
"Diff all files at and below DIR."
@@ -587,14 +578,36 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
(and rev2 (concat "-r" rev2))
(vc-switches 'CVS 'diff))))))
-(defun vc-cvs-annotate-command (file buffer &optional version)
+(defconst vc-cvs-annotate-first-line-re "^[0-9]")
+
+(defun vc-cvs-annotate-process-filter (process string)
+ (setq string (concat (process-get process 'output) string))
+ (if (not (string-match vc-cvs-annotate-first-line-re string))
+ ;; Still waiting for the first real line.
+ (process-put process 'output string)
+ (let ((vc-filter (process-get process 'vc-filter)))
+ (set-process-filter process vc-filter)
+ (funcall vc-filter process (substring string (match-beginning 0))))))
+
+(defun vc-cvs-annotate-command (file buffer &optional revision)
"Execute \"cvs annotate\" on FILE, inserting the contents in BUFFER.
-Optional arg VERSION is a version to annotate from."
- (vc-cvs-command buffer 0 file "annotate" (if version (concat "-r" version)))
- (with-current-buffer buffer
- (goto-char (point-min))
- (re-search-forward "^[0-9]")
- (delete-region (point-min) (1- (point)))))
+Optional arg REVISION is a revision to annotate from."
+ (vc-cvs-command buffer
+ (if (vc-stay-local-p file)
+ 'async 0)
+ file "annotate"
+ (if revision (concat "-r" revision)))
+ ;; Strip the leading few lines.
+ (let ((proc (get-buffer-process buffer)))
+ (if proc
+ ;; If running asynchronously, use a process filter.
+ (progn
+ (process-put proc 'vc-filter (process-filter proc))
+ (set-process-filter proc 'vc-cvs-annotate-process-filter))
+ (with-current-buffer buffer
+ (goto-char (point-min))
+ (re-search-forward vc-cvs-annotate-first-line-re)
+ (delete-region (point-min) (1- (point)))))))
(defun vc-cvs-annotate-current-time ()
"Return the current time, based at midnight of the current day, and
@@ -607,7 +620,8 @@ encoded as fractional days."
systime, or nil if there is none."
(let* ((bol (point))
(cache (get-text-property bol 'vc-cvs-annotate-time))
- buffer-read-only)
+ (inhibit-read-only t)
+ (inhibit-modification-hooks t))
(cond
(cache)
((looking-at
@@ -649,7 +663,7 @@ systime, or nil if there is none."
;;;
(defun vc-cvs-create-snapshot (dir name branchp)
- "Assign to DIR's current version a given NAME.
+ "Assign to DIR's current revision a given NAME.
If BRANCHP is non-nil, the name is created as a branch (and the current
workspace is immediately moved to that new branch)."
(vc-cvs-command nil 0 dir "tag" "-c" (if branchp "-b") name)
@@ -679,13 +693,13 @@ If UPDATE is non-nil, then update (resynch) any affected buffers."
((or (string= state "U")
(string= state "P"))
(vc-file-setprop file 'vc-state 'up-to-date)
- (vc-file-setprop file 'vc-workfile-version nil)
+ (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time
(nth 5 (file-attributes file))))
((or (string= state "M")
(string= state "C"))
(vc-file-setprop file 'vc-state 'edited)
- (vc-file-setprop file 'vc-workfile-version nil)
+ (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time 0)))
(vc-file-setprop file 'vc-cvs-sticky-tag sticky-tag)
(vc-resynch-buffer file t t))))
@@ -711,11 +725,11 @@ If UPDATE is non-nil, then update (resynch) any affected buffers."
;;; Internal functions
;;;
-(defun vc-cvs-command (buffer okstatus file &rest flags)
+(defun vc-cvs-command (buffer okstatus files &rest flags)
"A wrapper around `vc-do-command' for use in vc-cvs.el.
The difference to vc-do-command is that this function always invokes `cvs',
and that it passes `vc-cvs-global-switches' to it before FLAGS."
- (apply 'vc-do-command buffer okstatus "cvs" file
+ (apply 'vc-do-command buffer okstatus "cvs" files
(if (stringp vc-cvs-global-switches)
(cons vc-cvs-global-switches flags)
(append vc-cvs-global-switches
@@ -816,7 +830,7 @@ essential information."
"\\(RCS Version\\|RCS Revision\\|Repository revision\\):\
\[\t ]+\\([0-9.]+\\)"
nil t))
- (vc-file-setprop file 'vc-latest-version (match-string 2)))
+ (vc-file-setprop file 'vc-latest-revision (match-string 2)))
(vc-file-setprop
file 'vc-state
(cond
@@ -859,8 +873,8 @@ CVS/Entries should only be accessed through this function."
(and (string-match "^[a-zA-Z]" tag)
(not (string-match "[^a-z0-9A-Z-_]" tag))))
-(defun vc-cvs-valid-version-number-p (tag)
- "Return non-nil if TAG is a valid version number."
+(defun vc-cvs-valid-revision-number-p (tag)
+ "Return non-nil if TAG is a valid revision number."
(and (string-match "^[0-9]" tag)
(not (string-match "[^0-9.]" tag))))
@@ -924,7 +938,7 @@ is non-nil."
;; entry for a "locally added" file (not yet committed)
((looking-at "/[^/]+/0/")
(vc-file-setprop file 'vc-checkout-time 0)
- (vc-file-setprop file 'vc-workfile-version "0")
+ (vc-file-setprop file 'vc-working-revision "0")
(if set-state (vc-file-setprop file 'vc-state 'edited)))
;; normal entry
((looking-at
@@ -938,7 +952,7 @@ is non-nil."
;; sticky tag
"\\(.\\|\\)" ;Sticky tag type (date or tag name, could be empty)
"\\(.*\\)")) ;Sticky tag
- (vc-file-setprop file 'vc-workfile-version (match-string 1))
+ (vc-file-setprop file 'vc-working-revision (match-string 1))
(vc-file-setprop file 'vc-cvs-sticky-tag
(vc-cvs-parse-sticky-tag (match-string 4)
(match-string 5)))
@@ -978,15 +992,15 @@ is non-nil."
(push (match-string 1) res))
res)))
-(defun vc-cvs-revision-completion-table (file)
- (lexical-let ((file file)
+(defun vc-cvs-revision-completion-table (files)
+ (lexical-let ((files files)
table)
(setq table (lazy-completion-table
- table (lambda () (vc-cvs-revision-table file))))
+ table (lambda () (vc-cvs-revision-table (car files)))))
table))
(provide 'vc-cvs)
-;;; arch-tag: 60e1402a-aa53-4607-927a-cf74f144b432
+;; arch-tag: 60e1402a-aa53-4607-927a-cf74f144b432
;;; vc-cvs.el ends here
diff --git a/lisp/vc-git.el b/lisp/vc-git.el
index 88946f160ff..07714b26c32 100644
--- a/lisp/vc-git.el
+++ b/lisp/vc-git.el
@@ -53,22 +53,22 @@
;; * state (file) OK
;; - state-heuristic (file) NOT NEEDED
;; - dir-state (dir) OK
-;; * workfile-version (file) OK
+;; * working-revision (file) OK
;; - latest-on-branch-p (file) NOT NEEDED
;; * checkout-model (file) OK
;; - workfile-unchanged-p (file) OK
-;; - mode-line-string (file) NOT NEEDED
+;; - mode-line-string (file) OK
;; - dired-state-info (file) OK
;; STATE-CHANGING FUNCTIONS
;; * create-repo () OK
;; * register (files &optional rev comment) OK
-;; - init-version (file) NOT NEEDED
+;; - init-revision (file) NOT NEEDED
;; - responsible-p (file) OK
;; - could-register (file) NOT NEEDED, DEFAULT IS GOOD
;; - receive-file (file rev) NOT NEEDED
;; - unregister (file) OK
;; * checkin (files rev comment) OK
-;; * find-version (file rev buffer) OK
+;; * find-revision (file rev buffer) OK
;; * checkout (file &optional editable rev) OK
;; * revert (file &optional contents-done) OK
;; - rollback (files) COULD BE SUPPORTED
@@ -77,18 +77,17 @@
;; wouldn't be identified as a merge by git,
;; so it's probably not a good idea.
;; - merge-news (file) see `merge'
-;; - steal-lock (file &optional version) NOT NEEDED
+;; - steal-lock (file &optional revision) NOT NEEDED
;; HISTORY FUNCTIONS
;; * print-log (files &optional buffer) OK
;; - log-view-mode () OK
-;; - show-log-entry (version) NOT NEEDED, DEFAULT IS GOOD
+;; - show-log-entry (revision) NOT NEEDED, DEFAULT IS GOOD
;; - wash-log (file) COULD BE SUPPORTED
;; - logentry-check () NOT NEEDED
;; - comment-history (file) ??
;; - update-changelog (files) COULD BE SUPPORTED
;; * diff (file &optional rev1 rev2 buffer) OK
-;; - revision-completion-table (file) NOT SUPPORTED in emacs-22.x
-;; - diff-tree (dir &optional rev1 rev2) OK
+;; - revision-completion-table (files) NEEDED?
;; - annotate-command (file buf &optional rev) OK
;; - annotate-time () OK
;; - annotate-current-time () NOT NEEDED
@@ -100,8 +99,8 @@
;; MISCELLANEOUS
;; - make-version-backups-p (file) NOT NEEDED
;; - repository-hostname (dirname) NOT NEEDED
-;; - previous-version (file rev) OK
-;; - next-version (file rev) OK
+;; - previous-revision (file rev) OK
+;; - next-revision (file rev) OK
;; - check-headers () COULD BE SUPPORTED
;; - clear-headers () NOT NEEDED
;; - delete-file (file) OK
@@ -177,8 +176,8 @@
(vc-file-setprop file 'vc-state 'nil)))
(forward-line)))))
-(defun vc-git-workfile-version (file)
- "Git-specific version of `vc-workfile-version'."
+(defun vc-git-working-revision (file)
+ "Git-specific version of `vc-working-revision'."
(let ((str (with-output-to-string
(with-current-buffer standard-output
(call-process "git" nil '(t nil) nil "symbolic-ref" "HEAD")))))
@@ -192,6 +191,18 @@
(defun vc-git-workfile-unchanged-p (file)
(eq 'up-to-date (vc-git-state file)))
+(defun vc-git-mode-line-string (file)
+ "Return string for placement into the modeline for FILE."
+ (let* ((branch (vc-git-working-revision file))
+ (def-ml (vc-default-mode-line-string 'Git file))
+ (help-echo (get-text-property 0 'help-echo def-ml)))
+ (if (zerop (length branch))
+ (propertize
+ (concat def-ml "!")
+ 'help-echo (concat help-echo "\nNo current branch (detached HEAD)"))
+ (propertize def-ml
+ 'help-echo (concat help-echo "\nCurrent branch: " branch)))))
+
(defun vc-git-dired-state-info (file)
"Git-specific version of `vc-dired-state-info'."
(let ((git-state (vc-state file)))
@@ -220,7 +231,7 @@
(let ((coding-system-for-write git-commits-coding-system))
(vc-git-command nil 0 files "commit" "-m" comment "--only" "--")))
-(defun vc-git-find-version (file rev buffer)
+(defun vc-git-find-revision (file rev buffer)
(let ((coding-system-for-read 'binary)
(coding-system-for-write 'binary)
(fullname (substring
@@ -307,7 +318,8 @@
(vc-git-command buf 1 files "diff-tree" "--exit-code" "-p" rev1 rev2 "--")
(vc-git-command buf 1 files "diff-index" "--exit-code" "-p" (or rev1 "HEAD") "--"))))
-(defun vc-git-revision-table (file)
+(defun vc-git-revision-table (files)
+ ;; What about `files'?!? --Stef
(let ((table (list "HEAD")))
(with-temp-buffer
(vc-git-command t nil nil "for-each-ref" "--format=%(refname)")
@@ -316,16 +328,13 @@
(push (match-string 2) table)))
table))
-(defun vc-git-revision-completion-table (file)
- (lexical-let ((file file)
+(defun vc-git-revision-completion-table (files)
+ (lexical-let ((files files)
table)
(setq table (lazy-completion-table
- table (lambda () (vc-git-revision-table file))))
+ table (lambda () (vc-git-revision-table files))))
table))
-(defun vc-git-diff-tree (dir &optional rev1 rev2)
- (vc-git-diff dir rev1 rev2))
-
(defun vc-git-annotate-command (file buf &optional rev)
;; FIXME: rev is ignored
(let ((name (file-relative-name file)))
@@ -360,8 +369,8 @@
;;; MISCELLANEOUS
-(defun vc-git-previous-version (file rev)
- "Git-specific version of `vc-previous-version'."
+(defun vc-git-previous-revision (file rev)
+ "Git-specific version of `vc-previous-revision'."
(let ((default-directory (file-name-directory (expand-file-name file)))
(file (file-name-nondirectory file)))
(vc-git-symbolic-commit
@@ -378,8 +387,8 @@
(point)
(1- (point-max))))))))
-(defun vc-git-next-version (file rev)
- "Git-specific version of `vc-next-version'."
+(defun vc-git-next-revision (file rev)
+ "Git-specific version of `vc-next-revision'."
(let* ((default-directory (file-name-directory
(expand-file-name file)))
(file (file-name-nondirectory file))
diff --git a/lisp/vc-hg.el b/lisp/vc-hg.el
index a7c10eeb027..af2b4f133d2 100644
--- a/lisp/vc-hg.el
+++ b/lisp/vc-hg.el
@@ -38,42 +38,45 @@
;; beginning of vc.el. The current status is:
;; FUNCTION NAME STATUS
+;; BACKEND PROPERTIES
+;; * revision-granularity OK
+;; STATE-QUERYING FUNCTIONS
;; * registered (file) OK
;; * state (file) OK
;; - state-heuristic (file) ?? PROBABLY NOT NEEDED
;; - dir-state (dir) OK
-;; * workfile-version (file) OK
+;; * working-revision (file) OK
;; - latest-on-branch-p (file) ??
;; * checkout-model (file) OK
;; - workfile-unchanged-p (file) OK
;; - mode-line-string (file) NOT NEEDED
;; - dired-state-info (file) OK
;; STATE-CHANGING FUNCTIONS
-;; * register (file &optional rev comment) OK
-;; - init-version () NOT NEEDED
+;; * register (files &optional rev comment) OK
+;; * create-repo () OK
+;; - init-revision () NOT NEEDED
;; - responsible-p (file) OK
;; - could-register (file) OK
;; - receive-file (file rev) ?? PROBABLY NOT NEEDED
;; - unregister (file) COMMENTED OUT, MAY BE INCORRECT
-;; * checkin (file rev comment) OK
-;; * find-version (file rev buffer) OK
+;; * checkin (files rev comment) OK
+;; * find-revision (file rev buffer) OK
;; * checkout (file &optional editable rev) OK
;; * revert (file &optional contents-done) OK
-;; - cancel-version (file editable) ?? PROBABLY NOT NEEDED
+;; - rollback (files) ?? PROBABLY NOT NEEDED
;; - merge (file rev1 rev2) NEEDED
;; - merge-news (file) NEEDED
-;; - steal-lock (file &optional version) NOT NEEDED
+;; - steal-lock (file &optional revision) NOT NEEDED
;; HISTORY FUNCTIONS
-;; * print-log (file &optional buffer) OK
+;; * print-log (files &optional buffer) OK
;; - log-view-mode () OK
-;; - show-log-entry (version) NOT NEEDED, DEFAULT IS GOOD
+;; - show-log-entry (revision) NOT NEEDED, DEFAULT IS GOOD
;; - wash-log (file) ??
;; - logentry-check () NOT NEEDED
;; - comment-history (file) NOT NEEDED
;; - update-changelog (files) NOT NEEDED
-;; * diff (file &optional rev1 rev2 buffer) OK
-;; - revision-completion-table (file) COMMENTED OUT AS A WORKAROUND FOR A BUG
-;; - diff-tree (dir &optional rev1 rev2) TEST IT
+;; * diff (files &optional rev1 rev2 buffer) OK
+;; - revision-completion-table (files) OK?
;; - annotate-command (file buf &optional rev) OK
;; - annotate-time () OK
;; - annotate-current-time () ?? NOT NEEDED
@@ -85,8 +88,8 @@
;; MISCELLANEOUS
;; - make-version-backups-p (file) ??
;; - repository-hostname (dirname) ??
-;; - previous-version (file rev) OK
-;; - next-version (file rev) OK
+;; - previous-revision (file rev) OK
+;; - next-revision (file rev) OK
;; - check-headers () ??
;; - clear-headers () ??
;; - delete-file (file) TEST IT
@@ -125,6 +128,12 @@
:version "22.2"
:group 'vc)
+
+;;; Properties of the backend
+
+(defun vc-hg-revision-granularity ()
+ 'repository)
+
;;; State querying functions
;;;###autoload (defun vc-hg-registered (file)
@@ -188,7 +197,7 @@
;; should not show up in vc-dired, so don't deal with them
;; here.
((eq status-char ?A)
- (vc-file-setprop file 'vc-workfile-version "0")
+ (vc-file-setprop file 'vc-working-revision "0")
(vc-file-setprop file 'vc-state 'edited))
((eq status-char ?M)
(vc-file-setprop file 'vc-state 'edited))
@@ -197,8 +206,8 @@
(vc-file-setprop file 'vc-state 'nil)))
(forward-line)))))
-(defun vc-hg-workfile-version (file)
- "Hg-specific version of `vc-workfile-version'."
+(defun vc-hg-working-revision (file)
+ "Hg-specific version of `vc-working-revision'."
(let*
((status nil)
(out
@@ -221,8 +230,8 @@
;;; History functions
-(defun vc-hg-print-log(file &optional buffer)
- "Get change log associated with FILE."
+(defun vc-hg-print-log(files &optional buffer)
+ "Get change log associated with FILES."
;; `log-view-mode' needs to have the file name in order to function
;; correctly. "hg log" does not print it, so we insert it here by
;; hand.
@@ -233,21 +242,21 @@
;; If the buffer exists from a previous invocation it might be
;; read-only.
(let ((inhibit-read-only t))
- (with-current-buffer
- buffer
- (insert "File: " (file-name-nondirectory file) "\n")))
- (vc-hg-command
- buffer
- (if (and (vc-stay-local-p file) (fboundp 'start-process)) 'async 0)
- file "log"))
+ ;; We need to loop and call "hg log" on each file separately.
+ ;; "hg log" with multiple file arguments mashes all the logs
+ ;; together.
+ (dolist (file files)
+ (with-current-buffer
+ buffer
+ (insert "File: " (file-name-nondirectory file) "\n"))
+ (vc-hg-command buffer 0 file "log"))))
(defvar log-view-message-re)
(defvar log-view-file-re)
(defvar log-view-font-lock-keywords)
(define-derived-mode vc-hg-log-view-mode log-view-mode "Hg-Log-View"
- (require 'add-log) ;; we need the faces add-log
- ;; Don't have file markers, so use impossible regexp.
+ (require 'add-log) ;; we need the add-log faces
(set (make-local-variable 'log-view-file-re) "^File:[ \t]+\\(.+\\)")
(set (make-local-variable 'log-view-message-re)
"^changeset:[ \t]*\\([0-9]+\\):\\(.+\\)")
@@ -266,16 +275,16 @@
("^date: \\(.+\\)" (1 'change-log-date))
("^summary:[ \t]+\\(.+\\)" (1 'log-view-message))))))
-(defun vc-hg-diff (file &optional oldvers newvers buffer)
- "Get a difference report using hg between two versions of FILE."
- (let ((working (vc-workfile-version file)))
+(defun vc-hg-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using hg between two revisions of FILES."
+ (let ((working (vc-working-revision (car files))))
(if (and (equal oldvers working) (not newvers))
(setq oldvers nil))
(if (and (not oldvers) newvers)
(setq oldvers working))
(apply #'vc-hg-command (or buffer "*vc-diff*") nil
- (file-name-nondirectory file)
- "--cwd" (file-name-directory file)
+ (mapcar (lambda (file) (file-name-nondirectory file)) files)
+ "--cwd" (file-name-directory (car files))
"diff"
(append
(if oldvers
@@ -284,27 +293,25 @@
(list "-r" oldvers))
(list ""))))))
-(defun vc-hg-revision-table (file)
- (let ((default-directory (file-name-directory file)))
+(defun vc-hg-revision-table (files)
+ (let ((default-directory (file-name-directory (car files))))
(with-temp-buffer
- (vc-hg-command t nil file "log" "--template" "{rev} ")
+ (vc-hg-command t nil files "log" "--template" "{rev} ")
(split-string
(buffer-substring-no-properties (point-min) (point-max))))))
;; Modelled after the similar function in vc-cvs.el
-(defun vc-hg-revision-completion-table (file)
- (lexical-let ((file file)
+(defun vc-hg-revision-completion-table (files)
+ (lexical-let ((files files)
table)
(setq table (lazy-completion-table
- table (lambda () (vc-hg-revision-table file))))
+ table (lambda () (vc-hg-revision-table files))))
table))
-(defalias 'vc-hg-diff-tree 'vc-hg-diff)
-
-(defun vc-hg-annotate-command (file buffer &optional version)
+(defun vc-hg-annotate-command (file buffer &optional revision)
"Execute \"hg annotate\" on FILE, inserting the contents in BUFFER.
-Optional arg VERSION is a version to annotate from."
- (vc-hg-command buffer 0 file "annotate" "-d" "-n" (if version (concat "-r" version)))
+Optional arg REVISION is a revision to annotate from."
+ (vc-hg-command buffer 0 file "annotate" "-d" "-n" (if revision (concat "-r" revision)))
(with-current-buffer buffer
(goto-char (point-min))
(re-search-forward "^[0-9]")
@@ -327,22 +334,22 @@ Optional arg VERSION is a version to annotate from."
(beginning-of-line)
(if (looking-at vc-hg-annotate-re) (match-string-no-properties 1))))
-(defun vc-hg-previous-version (file rev)
+(defun vc-hg-previous-revision (file rev)
(let ((newrev (1- (string-to-number rev))))
(when (>= newrev 0)
(number-to-string newrev))))
-(defun vc-hg-next-version (file rev)
+(defun vc-hg-next-revision (file rev)
(let ((newrev (1+ (string-to-number rev)))
- (tip-version
+ (tip-revision
(with-temp-buffer
(vc-hg-command t 0 nil "tip")
(goto-char (point-min))
(re-search-forward "^changeset:[ \t]*\\([0-9]+\\):")
(string-to-number (match-string-no-properties 1)))))
- ;; We don't want to exceed the maximum possible version number, ie
- ;; the tip version.
- (when (<= newrev tip-version)
+ ;; We don't want to exceed the maximum possible revision number, ie
+ ;; the tip revision.
+ (when (<= newrev tip-revision)
(number-to-string newrev))))
;; Modelled after the similar function in vc-bzr.el
@@ -358,11 +365,15 @@ Optional arg VERSION is a version to annotate from."
"Rename file from OLD to NEW using `hg mv'."
(vc-hg-command nil 0 new old "mv"))
-(defun vc-hg-register (file &optional rev comment)
- "Register FILE under hg.
+(defun vc-hg-register (files &optional rev comment)
+ "Register FILES under hg.
REV is ignored.
COMMENT is ignored."
- (vc-hg-command nil 0 file "add"))
+ (vc-hg-command nil 0 files "add"))
+
+(defun vc-hg-create-repo ()
+ "Create a new Mercurial repository."
+ (vc-hg-command nil 0 nil "init"))
(defalias 'vc-hg-responsible-p 'vc-hg-root)
@@ -382,12 +393,12 @@ COMMENT is ignored."
;; "Unregister FILE from hg."
;; (vc-hg-command nil nil file "remove"))
-(defun vc-hg-checkin (file rev comment)
+(defun vc-hg-checkin (files rev comment)
"Hg-specific version of `vc-backend-checkin'.
REV is ignored."
- (vc-hg-command nil 0 file "commit" "-m" comment))
+ (vc-hg-command nil 0 files "commit" "-m" comment))
-(defun vc-hg-find-version (file rev buffer)
+(defun vc-hg-find-revision (file rev buffer)
(let ((coding-system-for-read 'binary)
(coding-system-for-write 'binary))
(if rev
@@ -417,7 +428,7 @@ REV is the revision to check out into WORKFILE."
"Hg-specific version of `vc-dired-state-info'."
(let ((hg-state (vc-state file)))
(if (eq hg-state 'edited)
- (if (equal (vc-workfile-version file) "0")
+ (if (equal (vc-working-revision file) "0")
"(added)" "(modified)")
;; fall back to the default VC representation
(vc-default-dired-state-info 'Hg file))))
@@ -427,13 +438,80 @@ REV is the revision to check out into WORKFILE."
(unless contents-done
(with-temp-buffer (vc-hg-command t 0 file "revert"))))
+;;; Hg specific functionality.
+
+;;; XXX This functionality is experimental/work in progress. It might
+;;; change without notice.
+(defvar vc-hg-extra-menu-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map [incoming] '(menu-item "Show incoming" vc-hg-incoming))
+ (define-key map [outgoing] '(menu-item "Show outgoing" vc-hg-outgoing))
+ map))
+
+(defun vc-hg-extra-menu () vc-hg-extra-menu-map)
+
+(define-derived-mode vc-hg-outgoing-mode vc-hg-log-view-mode "Hg-Outgoing")
+
+(define-derived-mode vc-hg-incoming-mode vc-hg-log-view-mode "Hg-Incoming")
+
+;; XXX this adds another top level menu, instead figure out how to
+;; replace the Log-View menu.
+(easy-menu-define log-view-mode-menu vc-hg-outgoing-mode-map
+ "Hg-outgoing Display Menu"
+ `("Hg-outgoing"
+ ["Push selected" vc-hg-push]))
+
+(easy-menu-define log-view-mode-menu vc-hg-incoming-mode-map
+ "Hg-incoming Display Menu"
+ `("Hg-incoming"
+ ["Pull selected" vc-hg-pull]))
+
+(defun vc-hg-outgoing ()
+ (interactive)
+ (let ((bname "*Hg outgoing*"))
+ (vc-hg-command bname 0 nil "outgoing" "-n")
+ (pop-to-buffer bname)
+ (vc-hg-outgoing-mode)))
+
+(defun vc-hg-incoming ()
+ (interactive)
+ (let ((bname "*Hg incoming*"))
+ (vc-hg-command bname 0 nil "incoming" "-n")
+ (pop-to-buffer bname)
+ (vc-hg-incoming-mode)))
+
+(declare-function log-view-get-marked "log-view" ())
+
+;; XXX maybe also add key bindings for these functions.
+(defun vc-hg-push ()
+ (interactive)
+ (let ((marked-list (log-view-get-marked)))
+ (if marked-list
+ (vc-hg-command
+ nil 0 nil
+ (cons "push"
+ (apply 'nconc
+ (mapcar (lambda (arg) (list "-r" arg)) marked-list))))
+ (error "No log entries selected for push"))))
+
+(defun vc-hg-pull ()
+ (interactive)
+ (let ((marked-list (log-view-get-marked)))
+ (if marked-list
+ (vc-hg-command
+ nil 0 nil
+ (cons "pull"
+ (apply 'nconc
+ (mapcar (lambda (arg) (list "-r" arg)) marked-list))))
+ (error "No log entries selected for pull"))))
+
;;; Internal functions
-(defun vc-hg-command (buffer okstatus file &rest flags)
+(defun vc-hg-command (buffer okstatus file-or-list &rest flags)
"A wrapper around `vc-do-command' for use in vc-hg.el.
The difference to vc-do-command is that this function always invokes `hg',
and that it passes `vc-hg-global-switches' to it before FLAGS."
- (apply 'vc-do-command buffer okstatus "hg" file
+ (apply 'vc-do-command buffer okstatus "hg" file-or-list
(if (stringp vc-hg-global-switches)
(cons vc-hg-global-switches flags)
(append vc-hg-global-switches
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 6684190e3d2..80f12af974a 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -73,26 +73,26 @@ Removing an entry from the list prevents VC from being activated
when visiting a file managed by that backend.
An empty list disables VC altogether."
:type '(repeat symbol)
- :version "22.2"
+ :version "23.1"
:group 'vc)
(defcustom vc-path
(if (file-directory-p "/usr/sccs")
'("/usr/sccs")
nil)
- "*List of extra directories to search for version control commands."
+ "List of extra directories to search for version control commands."
:type '(repeat directory)
:group 'vc)
(defcustom vc-make-backup-files nil
- "*If non-nil, backups of registered files are made as with other files.
+ "If non-nil, backups of registered files are made as with other files.
If nil (the default), files covered by version control don't get backups."
:type 'boolean
:group 'vc
:group 'backup)
(defcustom vc-follow-symlinks 'ask
- "*What to do if visiting a symbolic link to a file under version control.
+ "What to do if visiting a symbolic link to a file under version control.
Editing such a file through the link bypasses the version control system,
which is dangerous and probably not what you want.
@@ -106,26 +106,26 @@ visited and a warning displayed."
:group 'vc)
(defcustom vc-display-status t
- "*If non-nil, display revision number and lock status in modeline.
+ "If non-nil, display revision number and lock status in modeline.
Otherwise, not displayed."
:type 'boolean
:group 'vc)
(defcustom vc-consult-headers t
- "*If non-nil, identify work files by searching for version headers."
+ "If non-nil, identify work files by searching for version headers."
:type 'boolean
:group 'vc)
(defcustom vc-keep-workfiles t
- "*If non-nil, don't delete working files after registering changes.
+ "If non-nil, don't delete working files after registering changes.
If the back-end is CVS, workfiles are always kept, regardless of the
value of this flag."
:type 'boolean
:group 'vc)
(defcustom vc-mistrust-permissions nil
- "*If non-nil, don't assume permissions/ownership track version-control status.
+ "If non-nil, don't assume permissions/ownership track version-control status.
If nil, do rely on the permissions.
See also variable `vc-consult-headers'."
:type 'boolean
@@ -139,7 +139,7 @@ See also variable `vc-consult-headers'."
(vc-backend-subdirectory-name file)))))
(defcustom vc-stay-local t
- "*Non-nil means use local operations when possible for remote repositories.
+ "Non-nil means use local operations when possible for remote repositories.
This avoids slow queries over the network and instead uses heuristics
and past information to determine the current status of a file.
@@ -160,32 +160,36 @@ by these regular expressions."
(defun vc-stay-local-p (file)
"Return non-nil if VC should stay local when handling FILE.
-This uses the `repository-hostname' backend operation."
- (let* ((backend (vc-backend file))
- (sym (vc-make-backend-sym backend 'stay-local))
- (stay-local (if (boundp sym) (symbol-value sym) t)))
- (if (eq stay-local t) (setq stay-local vc-stay-local))
- (if (symbolp stay-local) stay-local
- (let ((dirname (if (file-directory-p file)
- (directory-file-name file)
- (file-name-directory file))))
- (eq 'yes
- (or (vc-file-getprop dirname 'vc-stay-local-p)
- (vc-file-setprop
- dirname 'vc-stay-local-p
- (let ((hostname (vc-call-backend
- backend 'repository-hostname dirname)))
- (if (not hostname)
- 'no
- (let ((default t))
- (if (eq (car-safe stay-local) 'except)
- (setq default nil stay-local (cdr stay-local)))
- (when (consp stay-local)
- (setq stay-local
- (mapconcat 'identity stay-local "\\|")))
- (if (if (string-match stay-local hostname)
- default (not default))
- 'yes 'no)))))))))))
+This uses the `repository-hostname' backend operation.
+If FILE is a list of files, return non-nil if any of them
+individually should stay local."
+ (if (listp file)
+ (delq nil (mapcar 'vc-stay-local-p file))
+ (let* ((backend (vc-backend file))
+ (sym (vc-make-backend-sym backend 'stay-local))
+ (stay-local (if (boundp sym) (symbol-value sym) t)))
+ (if (eq stay-local t) (setq stay-local vc-stay-local))
+ (if (symbolp stay-local) stay-local
+ (let ((dirname (if (file-directory-p file)
+ (directory-file-name file)
+ (file-name-directory file))))
+ (eq 'yes
+ (or (vc-file-getprop dirname 'vc-stay-local-p)
+ (vc-file-setprop
+ dirname 'vc-stay-local-p
+ (let ((hostname (vc-call-backend
+ backend 'repository-hostname dirname)))
+ (if (not hostname)
+ 'no
+ (let ((default t))
+ (if (eq (car-safe stay-local) 'except)
+ (setq default nil stay-local (cdr stay-local)))
+ (when (consp stay-local)
+ (setq stay-local
+ (mapconcat 'identity stay-local "\\|")))
+ (if (if (string-match stay-local hostname)
+ default (not default))
+ 'yes 'no))))))))))))
;;; This is handled specially now.
;; Tell Emacs about this new kind of minor mode
@@ -276,7 +280,10 @@ It is usually called via the `vc-call' macro."
(t (apply f args)))))
(defmacro vc-call (fun file &rest args)
- ;; BEWARE!! `file' is evaluated twice!!
+ "A convenience macro for calling VC backend functions.
+Functions called by this macro must accept FILE as the first argument.
+ARGS specifies any additional arguments. FUN should be unquoted.
+BEWARE!! `file' is evaluated twice!!"
`(vc-call-backend (vc-backend ,file) ',fun ,file ,@args))
(defsubst vc-parse-buffer (pattern i)
@@ -355,7 +362,8 @@ file was previously registered under a certain backend, then that
backend is tried first."
(let (handler)
(cond
- ((string-match vc-ignore-dir-regexp (file-name-directory file)) nil)
+ ((and (file-name-directory file) (string-match vc-ignore-dir-regexp (file-name-directory file)))
+ nil)
((and (boundp 'file-name-handler-alist)
(setq handler (find-file-name-handler file 'vc-registered)))
;; handler should set vc-backend and return t if registered
@@ -365,7 +373,7 @@ backend is tried first."
;; Try vc-BACKEND-registered for each handled BACKEND.
(catch 'found
(let ((backend (vc-file-getprop file 'vc-backend)))
- (mapcar
+ (mapc
(lambda (b)
(and (vc-call-backend b 'registered file)
(vc-file-setprop file 'vc-backend b)
@@ -377,20 +385,26 @@ backend is tried first."
(vc-file-setprop file 'vc-backend 'none)
nil)))))
-(defun vc-backend (file)
- "Return the version control type of FILE, nil if it is not registered."
+(defun vc-backend (file-or-list)
+ "Return the version control type of FILE-OR-LIST, nil if it's not registered.
+If the argument is a list, the files must all have the same back end."
;; `file' can be nil in several places (typically due to the use of
;; code like (vc-backend buffer-file-name)).
- (when (stringp file)
- (let ((property (vc-file-getprop file 'vc-backend)))
- ;; Note that internally, Emacs remembers unregistered
- ;; files by setting the property to `none'.
- (cond ((eq property 'none) nil)
- (property)
- ;; vc-registered sets the vc-backend property
- (t (if (vc-registered file)
- (vc-file-getprop file 'vc-backend)
- nil))))))
+ (cond ((stringp file-or-list)
+ (let ((property (vc-file-getprop file-or-list 'vc-backend)))
+ ;; Note that internally, Emacs remembers unregistered
+ ;; files by setting the property to `none'.
+ (cond ((eq property 'none) nil)
+ (property)
+ ;; vc-registered sets the vc-backend property
+ (t (if (vc-registered file-or-list)
+ (vc-file-getprop file-or-list 'vc-backend)
+ nil)))))
+ ((and file-or-list (listp file-or-list))
+ (vc-backend (car file-or-list)))
+ (t
+ nil)))
+
(defun vc-backend-subdirectory-name (file)
"Return where the master and lock FILEs for the current directory are kept."
@@ -479,12 +493,12 @@ For registered files, the value returned is one of:
prompt the user to do it)."
;; FIXME: New (sub)states needed (?):
;; - `added' (i.e. `edited' but with no base version yet,
- ;; typically represented by vc-workfile-version = "0")
+ ;; typically represented by vc-working-revision = "0")
;; - `conflict' (i.e. `edited' with conflict markers)
;; - `removed'
;; - `copied' and `moved' (might be handled by `removed' and `added')
(or (vc-file-getprop file 'vc-state)
- (if (vc-backend file)
+ (if (and (> (length file) 0) (vc-backend file))
(vc-file-setprop file 'vc-state
(vc-call state-heuristic file)))))
@@ -522,7 +536,7 @@ Return non-nil if FILE is unchanged."
(zerop (condition-case err
;; If the implementation supports it, let the output
;; go to *vc*, not *vc-diff*, since this is an internal call.
- (vc-call diff file nil nil "*vc*")
+ (vc-call diff (list file) nil nil "*vc*")
(wrong-number-of-arguments
;; If this error came from the above call to vc-BACKEND-diff,
;; try again without the optional buffer argument (for
@@ -533,15 +547,22 @@ Return non-nil if FILE is unchanged."
'diff))))
(not (eq (caddr err) 4)))
(signal (car err) (cdr err))
- (vc-call diff file))))))
+ (vc-call diff (list file)))))))
-(defun vc-workfile-version (file)
- "Return the version level of the current workfile FILE.
+(defun vc-working-revision (file)
+ "Return the repository version from which FILE was checked out.
If FILE is not registered, this function always returns nil."
- (or (vc-file-getprop file 'vc-workfile-version)
+ (or (vc-file-getprop file 'vc-working-revision)
(if (vc-backend file)
- (vc-file-setprop file 'vc-workfile-version
- (vc-call workfile-version file)))))
+ (vc-file-setprop file 'vc-working-revision
+ (vc-call working-revision file)))))
+;; Backward compatibility.
+(define-obsolete-function-alias
+ 'vc-workfile-version 'vc-working-revision "23.1")
+(defun vc-default-working-revision (backend file)
+ (message
+ "`working-revision' not found: using the old `workfile-version' instead")
+ (vc-call-backend backend 'workfile-version file))
(defun vc-default-registered (backend file)
"Check if FILE is registered in BACKEND using vc-BACKEND-master-templates."
@@ -642,14 +663,14 @@ a regexp for matching all such backup files, regardless of the version."
"\\.~.+" (unless manual "\\.") "~")
(expand-file-name (concat (file-name-nondirectory file)
".~" (subst-char-in-string
- ?/ ?_ (or rev (vc-workfile-version file)))
+ ?/ ?_ (or rev (vc-working-revision file)))
(unless manual ".") "~")
(file-name-directory file))))
(defun vc-delete-automatic-version-backups (file)
"Delete all existing automatic version backups for FILE."
(condition-case nil
- (mapcar
+ (mapc
'delete-file
(directory-files (or (file-name-directory file) default-directory) t
(vc-version-backup-file-name file nil nil t)))
@@ -684,6 +705,8 @@ Before doing that, check if there are any old backups and get rid of them."
(vc-call make-version-backups-p file)
(vc-make-version-backup file))))
+(declare-function vc-dired-resynch-file "vc" (file))
+
(defun vc-after-save ()
"Function to be called by `basic-save-buffer' (in files.el)."
;; If the file in the current buffer is under version control,
@@ -730,9 +753,22 @@ visiting FILE."
(let ((backend (vc-backend file)))
(if (not backend)
(setq vc-mode nil)
- (setq vc-mode (concat " " (if vc-display-status
- (vc-call mode-line-string file)
- (symbol-name backend))))
+ (let* ((ml-string (vc-call mode-line-string file))
+ (ml-echo (get-text-property 0 'help-echo ml-string)))
+ (setq vc-mode
+ (concat
+ " "
+ (if (null vc-display-status)
+ (symbol-name backend)
+ (propertize
+ ml-string
+ 'mouse-face 'mode-line-highlight
+ 'help-echo
+ (concat (or ml-echo
+ (format "File under the %s version control system"
+ backend))
+ "\nmouse-1: Version Control menu")
+ 'local-map vc-mode-line-map)))))
;; If the file is locked by some other user, make
;; the buffer read-only. Like this, even root
;; cannot modify a file that someone else has locked.
@@ -762,17 +798,24 @@ Format:
This function assumes that the file is registered."
(setq backend (symbol-name backend))
(let ((state (vc-state file))
- (rev (vc-workfile-version file)))
- (cond ((or (eq state 'up-to-date)
- (eq state 'needs-patch))
- (concat backend "-" rev))
- ((stringp state)
- (concat backend ":" state ":" rev))
- (t
- ;; Not just for the 'edited state, but also a fallback
- ;; for all other states. Think about different symbols
- ;; for 'needs-patch and 'needs-merge.
- (concat backend ":" rev)))))
+ (state-echo nil)
+ (rev (vc-working-revision file)))
+ (propertize
+ (cond ((or (eq state 'up-to-date)
+ (eq state 'needs-patch))
+ (setq state-echo "Up to date file")
+ (concat backend "-" rev))
+ ((stringp state)
+ (setq state-echo (concat "File locked by" state))
+ (concat backend ":" state ":" rev))
+ (t
+ ;; Not just for the 'edited state, but also a fallback
+ ;; for all other states. Think about different symbols
+ ;; for 'needs-patch and 'needs-merge.
+ (setq state-echo "Locally modified file")
+ (concat backend ":" rev)))
+ 'help-echo (concat state-echo " under the " backend
+ " version control system"))))
(defun vc-follow-link ()
"If current buffer visits a symbolic link, visit the real file.
@@ -803,7 +846,7 @@ current, and kill the buffer that visits the link."
(when buffer-file-name
(vc-file-clearprops buffer-file-name)
(cond
- ((ignore-errors (vc-backend buffer-file-name))
+ ((with-demoted-errors (vc-backend buffer-file-name))
;; Compute the state and put it in the modeline.
(vc-mode-line buffer-file-name)
(unless vc-make-backup-files
@@ -878,7 +921,7 @@ Used in `find-file-not-found-functions'."
(let ((map (make-sparse-keymap)))
(define-key map "a" 'vc-update-change-log)
(define-key map "b" 'vc-switch-backend)
- (define-key map "c" 'vc-cancel-version)
+ (define-key map "c" 'vc-rollback)
(define-key map "d" 'vc-directory)
(define-key map "g" 'vc-annotate)
(define-key map "h" 'vc-insert-headers)
@@ -887,10 +930,11 @@ Used in `find-file-not-found-functions'."
(define-key map "m" 'vc-merge)
(define-key map "r" 'vc-retrieve-snapshot)
(define-key map "s" 'vc-create-snapshot)
- (define-key map "u" 'vc-revert-buffer)
+ (define-key map "u" 'vc-revert)
(define-key map "v" 'vc-next-action)
+ (define-key map "+" 'vc-update)
(define-key map "=" 'vc-diff)
- (define-key map "~" 'vc-version-other-window)
+ (define-key map "~" 'vc-revision-other-window)
map))
(fset 'vc-prefix-map vc-prefix-map)
(define-key global-map "\C-xv" 'vc-prefix-map)
@@ -907,8 +951,8 @@ Used in `find-file-not-found-functions'."
(define-key map [separator1] '("----"))
(define-key map [vc-annotate] '("Annotate" . vc-annotate))
(define-key map [vc-rename-file] '("Rename File" . vc-rename-file))
- (define-key map [vc-version-other-window]
- '("Show Other Version" . vc-version-other-window))
+ (define-key map [vc-revision-other-window]
+ '("Show Other Version" . vc-revision-other-window))
(define-key map [vc-diff] '("Compare with Base Version" . vc-diff))
(define-key map [vc-update-change-log]
'("Update ChangeLog" . vc-update-change-log))
@@ -916,9 +960,9 @@ Used in `find-file-not-found-functions'."
(define-key map [separator2] '("----"))
(define-key map [vc-insert-header]
'("Insert Header" . vc-insert-headers))
- (define-key map [undo] '("Undo Last Check-In" . vc-cancel-version))
- (define-key map [vc-revert-buffer]
- '("Revert to Base Version" . vc-revert-buffer))
+ (define-key map [undo] '("Undo Last Check-In" . vc-rollback))
+ (define-key map [vc-revert]
+ '("Revert to Base Version" . vc-revert))
(define-key map [vc-update]
'("Update to Latest Version" . vc-update))
(define-key map [vc-next-action] '("Check In/Out" . vc-next-action))
@@ -950,13 +994,13 @@ Used in `find-file-not-found-functions'."
;;(put 'vc-rename-file 'menu-enable 'vc-mode)
;;(put 'vc-annotate 'menu-enable '(eq (vc-buffer-backend) 'CVS))
-;;(put 'vc-version-other-window 'menu-enable 'vc-mode)
+;;(put 'vc-revision-other-window 'menu-enable 'vc-mode)
;;(put 'vc-diff 'menu-enable 'vc-mode)
;;(put 'vc-update-change-log 'menu-enable
;; '(member (vc-buffer-backend) '(RCS CVS)))
;;(put 'vc-print-log 'menu-enable 'vc-mode)
-;;(put 'vc-cancel-version 'menu-enable 'vc-mode)
-;;(put 'vc-revert-buffer 'menu-enable 'vc-mode)
+;;(put 'vc-rollback 'menu-enable 'vc-mode)
+;;(put 'vc-revert 'menu-enable 'vc-mode)
;;(put 'vc-insert-headers 'menu-enable 'vc-mode)
;;(put 'vc-next-action 'menu-enable 'vc-mode)
;;(put 'vc-register 'menu-enable '(and buffer-file-name (not vc-mode)))
diff --git a/lisp/vc-mcvs.el b/lisp/vc-mcvs.el
index 0007aa45ea4..b5a81866eca 100644
--- a/lisp/vc-mcvs.el
+++ b/lisp/vc-mcvs.el
@@ -109,6 +109,11 @@ This is only meaningful if you don't use the implicit checkout model
:version "22.1"
:group 'vc)
+;;; Properties of the backend
+
+(defun vc-mcvs-revision-granularity ()
+ 'file)
+
;;;
;;; State-querying functions
;;;
@@ -191,8 +196,8 @@ This is only meaningful if you don't use the implicit checkout model
(goto-char (point-max))
(widen)))))))
-(defun vc-mcvs-workfile-version (file)
- (vc-cvs-workfile-version
+(defun vc-mcvs-working-revision (file)
+ (vc-cvs-working-revision
(expand-file-name (vc-file-getprop file 'mcvs-inode)
(vc-file-getprop file 'mcvs-root))))
@@ -202,13 +207,16 @@ This is only meaningful if you don't use the implicit checkout model
;;; State-changing functions
;;;
-(defun vc-mcvs-register (file &optional rev comment)
- "Register FILE into the Meta-CVS version-control system.
+(defun vc-mcvs-register (files &optional rev comment)
+ "Register FILES into the Meta-CVS version-control system.
COMMENT can be used to provide an initial description of FILE.
`vc-register-switches' and `vc-mcvs-register-switches' are passed to
the Meta-CVS command (in that order)."
- (let* ((filename (file-name-nondirectory file))
+ ;; FIXME: multiple-file case should be made to work
+ (if (> (length files) 1) (error "Registering filesets is not yet supported."))
+ (let* ((file (car files))
+ (filename (file-name-nondirectory file))
(extpos (string-match "\\." filename))
(ext (if extpos (substring filename (1+ extpos))))
(root (vc-mcvs-root file))
@@ -245,7 +253,7 @@ the Meta-CVS command (in that order)."
(vc-switches 'MCVS 'register))
;; I'm not sure exactly why, but if we don't setup the inode and root
;; prop of the file, things break later on in vc-mode-line that
- ;; ends up calling vc-mcvs-workfile-version.
+ ;; ends up calling vc-mcvs-working-revision.
;; We also need to set vc-checkout-time so that vc-workfile-unchanged-p
;; doesn't try to call `mcvs diff' on the file.
(vc-mcvs-registered file)))
@@ -257,9 +265,9 @@ the Meta-CVS command (in that order)."
"Return non-nil if FILE could be registered in Meta-CVS.
This is only possible if Meta-CVS is responsible for FILE's directory.")
-(defun vc-mcvs-checkin (file rev comment)
+(defun vc-mcvs-checkin (files rev comment)
"Meta-CVS-specific version of `vc-backend-checkin'."
- (unless (or (not rev) (vc-mcvs-valid-version-number-p rev))
+ (unless (or (not rev) (vc-mcvs-valid-revision-number-p rev))
(if (not (vc-mcvs-valid-symbolic-tag-name-p rev))
(error "%s is not a valid symbolic tag name" rev)
;; If the input revision is a valid symbolic tag name, we create it
@@ -267,14 +275,15 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
;; This file-specific form of branching is deprecated.
;; We can't use `mcvs branch' and `mcvs switch' because they cannot
;; be applied just to this one file.
- (apply 'vc-mcvs-command nil 0 file "tag" "-b" (list rev))
- (apply 'vc-mcvs-command nil 0 file "update" "-r" (list rev))
- (vc-file-setprop file 'vc-mcvs-sticky-tag rev)
+ (apply 'vc-mcvs-command nil 0 files "tag" "-b" (list rev))
+ (apply 'vc-mcvs-command nil 0 files "update" "-r" (list rev))
+ (mapc (lambda (file) (vc-file-setprop file 'vc-mcvs-sticky-tag rev))
+ files)
(setq rev nil)))
;; This commit might cvs-commit several files (e.g. MAP and TYPES)
;; so using numbered revs here is dangerous and somewhat meaningless.
(when rev (error "Cannot commit to a specific revision number"))
- (let ((status (apply 'vc-mcvs-command nil 1 file
+ (let ((status (apply 'vc-mcvs-command nil 1 files
"ci" "-m" comment
(vc-switches 'MCVS 'checkin))))
(set-buffer "*vc*")
@@ -283,7 +292,8 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
;; Check checkin problem.
(cond
((re-search-forward "Up-to-date check failed" nil t)
- (vc-file-setprop file 'vc-state 'needs-merge)
+ (mapc (lambda (file) (vc-file-setprop file 'vc-state 'needs-merge))
+ files)
(error (substitute-command-keys
(concat "Up-to-date check failed: "
"type \\[vc-next-action] to merge in changes"))))
@@ -292,22 +302,27 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)
(error "Check-in failed"))))
- ;; Update file properties
- (vc-file-setprop
- file 'vc-workfile-version
- (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
- ;; Forget the checkout model of the file, because we might have
+ ;; Single-file commit? Then update the revision by parsing the buffer.
+ ;; Otherwise we can't necessarily tell what goes with what; clear
+ ;; its properties so they have to be refetched.
+ (if (= (length files) 1)
+ (vc-file-setprop
+ (car files) 'vc-working-revision
+ (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
+ (mapc (lambda (file) (vc-file-clearprops file)) files))
+ ;; Anyway, forget the checkout model of the file, because we might have
;; guessed wrong when we found the file. After commit, we can
;; tell it from the permissions of the file (see
;; vc-mcvs-checkout-model).
- (vc-file-setprop file 'vc-checkout-model nil)
+ (mapc (lambda (file) (vc-file-setprop file 'vc-checkout-model nil))
+ files)
;; if this was an explicit check-in (does not include creation of
;; a branch), remove the sticky tag.
(if (and rev (not (vc-mcvs-valid-symbolic-tag-name-p rev)))
- (vc-mcvs-command nil 0 file "update" "-A"))))
+ (vc-mcvs-command nil 0 files "update" "-A"))))
-(defun vc-mcvs-find-version (file rev buffer)
+(defun vc-mcvs-find-revision (file rev buffer)
(apply 'vc-mcvs-command
buffer 0 file
"-Q" ; suppress diagnostic output
@@ -333,8 +348,8 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
(vc-mcvs-command nil 0 file "edit")
(set-file-modes file (logior (file-modes file) 128))
(if (equal file buffer-file-name) (toggle-read-only -1))))
- ;; Check out a particular version (or recreate the file).
- (vc-file-setprop file 'vc-workfile-version nil)
+ ;; Check out a particular revision (or recreate the file).
+ (vc-file-setprop file 'vc-working-revision nil)
(apply 'vc-mcvs-command nil 0 file
(if editable "-w")
"update"
@@ -349,7 +364,7 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
(vc-mcvs-command nil 0 new "move" (file-relative-name old)))
(defun vc-mcvs-revert (file &optional contents-done)
- "Revert FILE to the version it was based on."
+ "Revert FILE to the working revision it was based on."
(vc-default-revert 'MCVS file contents-done)
(unless (eq (vc-checkout-model file) 'implicit)
(if vc-mcvs-use-edit
@@ -357,13 +372,13 @@ This is only possible if Meta-CVS is responsible for FILE's directory.")
;; Make the file read-only by switching off all w-bits
(set-file-modes file (logand (file-modes file) 3950)))))
-(defun vc-mcvs-merge (file first-version &optional second-version)
+(defun vc-mcvs-merge (file first-revision &optional second-revision)
"Merge changes into current working copy of FILE.
-The changes are between FIRST-VERSION and SECOND-VERSION."
+The changes are between FIRST-REVISION and SECOND-REVISION."
(vc-mcvs-command nil 0 file
"update" "-kk"
- (concat "-j" first-version)
- (concat "-j" second-version))
+ (concat "-j" first-revision)
+ (concat "-j" second-revision))
(vc-file-setprop file 'vc-state 'edited)
(with-current-buffer (get-buffer "*vc*")
(goto-char (point-min))
@@ -374,18 +389,18 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
(defun vc-mcvs-merge-news (file)
"Merge in any new changes made to FILE."
(message "Merging changes into %s..." file)
- ;; (vc-file-setprop file 'vc-workfile-version nil)
+ ;; (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time 0)
(vc-mcvs-command nil 0 file "update")
;; Analyze the merge result reported by Meta-CVS, and set
;; file properties accordingly.
(with-current-buffer (get-buffer "*vc*")
(goto-char (point-min))
- ;; get new workfile version
+ ;; get new working revision
(if (re-search-forward
"^Merging differences between [0-9.]* and \\([0-9.]*\\) into" nil t)
- (vc-file-setprop file 'vc-workfile-version (match-string 1))
- (vc-file-setprop file 'vc-workfile-version nil))
+ (vc-file-setprop file 'vc-working-revision (match-string 1))
+ (vc-file-setprop file 'vc-working-revision nil))
;; get file status
(prog1
(if (eq (buffer-size) 0)
@@ -421,65 +436,39 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
;;; History functions
;;;
-(defun vc-mcvs-print-log (file &optional buffer)
- "Get change log associated with FILE."
- (let ((default-directory (vc-mcvs-root file)))
+(defun vc-mcvs-print-log (files &optional buffer)
+ "Get change log associated with FILES."
+ (let ((default-directory (vc-mcvs-root (car files))))
;; Run the command from the root dir so that `mcvs filt' returns
;; valid relative names.
(vc-mcvs-command
buffer
- (if (and (vc-stay-local-p file) (fboundp 'start-process)) 'async 0)
- file "log")))
-
-(defun vc-mcvs-diff (file &optional oldvers newvers buffer)
- "Get a difference report using Meta-CVS between two versions of FILE."
- (if (string= (vc-workfile-version file) "0")
- ;; This file is added but not yet committed; there is no master file.
- (if (or oldvers newvers)
- (error "No revisions of %s exist" file)
- ;; We regard this as "changed".
- ;; Diff it against /dev/null.
- ;; Note: this is NOT a "mcvs diff".
- (apply 'vc-do-command (or buffer "*vc-diff*")
- 1 "diff" file
- (append (vc-switches nil 'diff) '("/dev/null")))
- ;; Even if it's empty, it's locally modified.
- 1)
+ (if (vc-stay-local-p files) 'async 0)
+ files "log")))
+
+(defun vc-mcvs-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using Meta-CVS between two revisions of FILES."
(let* ((async (and (not vc-disable-async-diff)
- (vc-stay-local-p file)
- (fboundp 'start-process)))
+ (vc-stay-local-p files)))
;; Run the command from the root dir so that `mcvs filt' returns
;; valid relative names.
- (default-directory (vc-mcvs-root file))
+ (default-directory (vc-mcvs-root (car files)))
(status
(apply 'vc-mcvs-command (or buffer "*vc-diff*")
(if async 'async 1)
- file "diff"
+ files "diff"
(and oldvers (concat "-r" oldvers))
(and newvers (concat "-r" newvers))
(vc-switches 'MCVS 'diff))))
- (if async 1 status)))) ; async diff, pessimistic assumption.
+ (if async 1 status))) ; async diff, pessimistic assumption.
-(defun vc-mcvs-diff-tree (dir &optional rev1 rev2)
- "Diff all files at and below DIR."
- (with-current-buffer "*vc-diff*"
- ;; Run the command from the root dir so that `mcvs filt' returns
- ;; valid relative names.
- (setq default-directory (vc-mcvs-root dir))
- ;; cvs diff: use a single call for the entire tree
- (let ((coding-system-for-read (or coding-system-for-read 'undecided)))
- (apply 'vc-mcvs-command "*vc-diff*" 1 dir "diff"
- (and rev1 (concat "-r" rev1))
- (and rev2 (concat "-r" rev2))
- (vc-switches 'MCVS 'diff)))))
-
-(defun vc-mcvs-annotate-command (file buffer &optional version)
+(defun vc-mcvs-annotate-command (file buffer &optional revision)
"Execute \"mcvs annotate\" on FILE, inserting the contents in BUFFER.
-Optional arg VERSION is a version to annotate from."
+Optional arg REVISION is a revision to annotate from."
(vc-mcvs-command
buffer
- (if (and (vc-stay-local-p file) (fboundp 'start-process)) 'async 0)
- file "annotate" (if version (concat "-r" version)))
+ (if (vc-stay-local-p file) 'async 0)
+ file "annotate" (if revision (concat "-r" revision)))
(with-current-buffer buffer
(goto-char (point-min))
(re-search-forward "^[0-9]")
@@ -493,7 +482,7 @@ Optional arg VERSION is a version to annotate from."
;;;
(defun vc-mcvs-create-snapshot (dir name branchp)
- "Assign to DIR's current version a given NAME.
+ "Assign to DIR's current revision a given NAME.
If BRANCHP is non-nil, the name is created as a branch (and the current
workspace is immediately moved to that new branch)."
(if (not branchp)
@@ -525,13 +514,13 @@ If UPDATE is non-nil, then update (resynch) any affected buffers."
((or (string= state "U")
(string= state "P"))
(vc-file-setprop file 'vc-state 'up-to-date)
- (vc-file-setprop file 'vc-workfile-version nil)
+ (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time
(nth 5 (file-attributes file))))
((or (string= state "M")
(string= state "C"))
(vc-file-setprop file 'vc-state 'edited)
- (vc-file-setprop file 'vc-workfile-version nil)
+ (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time 0)))
(vc-file-setprop file 'vc-mcvs-sticky-tag sticky-tag)
(vc-resynch-buffer file t t))))
@@ -593,7 +582,7 @@ and that it passes `vc-mcvs-global-switches' to it before FLAGS."
(forward-line 1))))
(defalias 'vc-mcvs-valid-symbolic-tag-name-p 'vc-cvs-valid-symbolic-tag-name-p)
-(defalias 'vc-mcvs-valid-version-number-p 'vc-cvs-valid-version-number-p)
+(defalias 'vc-mcvs-valid-revision-number-p 'vc-cvs-valid-revision-number-p)
(provide 'vc-mcvs)
diff --git a/lisp/vc-mtn.el b/lisp/vc-mtn.el
index e24bf399ba1..04fdc65d87a 100644
--- a/lisp/vc-mtn.el
+++ b/lisp/vc-mtn.el
@@ -81,7 +81,7 @@
'edited
'up-to-date))))
-(defun vc-mtn-workfile-version (file)
+(defun vc-mtn-working-revision (file)
;; If `mtn' fails or returns status>0, or if the search fails, just
;; return nil.
(ignore-errors
@@ -134,7 +134,7 @@
(defun vc-mtn-checkin (files rev comment)
(vc-mtn-command nil 0 files "commit" "-m" comment))
-(defun vc-mtn-find-version (file rev buffer)
+(defun vc-mtn-find-revision (file rev buffer)
(vc-mtn-command buffer 0 file "cat" "-r" rev))
;; (defun vc-mtn-checkout (file &optional editable rev)
@@ -150,6 +150,10 @@
(defun vc-mtn-print-log (files &optional buffer)
(vc-mtn-command buffer 0 files "log"))
+(defvar log-view-message-re)
+(defvar log-view-file-re)
+(defvar log-view-font-lock-keywords)
+
(define-derived-mode vc-mtn-log-view-mode log-view-mode "Mtn-Log-View"
;; TODO: Not sure what to do about file markers for now.
(set (make-local-variable 'log-view-file-re) "\\'\\`")
@@ -163,12 +167,11 @@
'(("^[ |]+Author: \\(.*\\)" (1 'change-log-email))
("^[ |]+Date: \\(.*\\)" (1 'change-log-date-face))))))
-;; (defun vc-mtn-show-log-entry (version)
+;; (defun vc-mtn-show-log-entry (revision)
;; )
(defun vc-mtn-wash-log (file))
-(defalias 'vc-mtn-diff-tree 'vc-mtn-diff)
(defun vc-mtn-diff (files &optional rev1 rev2 buffer)
(apply 'vc-mtn-command (or buffer "*vc-diff*") 1 files "diff"
(append (if rev1 (list "-r" rev1)) (if rev2 (list "-r" rev2)))))
@@ -239,10 +242,11 @@
(push (match-string 0) ids))
ids)))
-(defun vc-mtn-revision-completion-table (file)
+(defun vc-mtn-revision-completion-table (files)
;; TODO: Implement completion for for selectors
;; TODO: Implement completion for composite selectors.
- (lexical-let ((file file))
+ (lexical-let ((files files))
+ ;; What about using `files'?!? --Stef
(lambda (string pred action)
(cond
;; "Tag" selectors.
diff --git a/lisp/vc-rcs.el b/lisp/vc-rcs.el
index b341f82a73b..35eba607bea 100644
--- a/lisp/vc-rcs.el
+++ b/lisp/vc-rcs.el
@@ -29,6 +29,10 @@
;; See vc.el
+;; TODO:
+;; - remove call to vc-expand-dirs by implementing our own (which can just
+;; list the RCS subdir instead).
+
;;; Code:
;;;
@@ -96,6 +100,11 @@ For a description of possible values, see `vc-check-master-templates'."
:group 'vc)
+;;; Properties of the backend
+
+(defun vc-rcs-revision-granularity ()
+ 'file)
+
;;;
;;; State-querying functions
;;;
@@ -114,12 +123,12 @@ For a description of possible values, see `vc-check-master-templates'."
(and vc-consult-headers
(vc-rcs-consult-headers file)))
(let ((state
- ;; vc-workfile-version might not be known; in that case the
+ ;; vc-working-revision might not be known; in that case the
;; property is nil. vc-rcs-fetch-master-state knows how to
;; handle that.
(vc-rcs-fetch-master-state file
(vc-file-getprop file
- 'vc-workfile-version))))
+ 'vc-working-revision))))
(if (not (eq state 'up-to-date))
state
(if (vc-workfile-unchanged-p file)
@@ -172,19 +181,19 @@ For a description of possible values, see `vc-check-master-templates'."
(vc-rcs-state file))))
(vc-rcs-state file)))))
-(defun vc-rcs-workfile-version (file)
- "RCS-specific version of `vc-workfile-version'."
+(defun vc-rcs-working-revision (file)
+ "RCS-specific version of `vc-working-revision'."
(or (and vc-consult-headers
(vc-rcs-consult-headers file)
- (vc-file-getprop file 'vc-workfile-version))
+ (vc-file-getprop file 'vc-working-revision))
(progn
(vc-rcs-fetch-master-state file)
- (vc-file-getprop file 'vc-workfile-version))))
+ (vc-file-getprop file 'vc-working-revision))))
(defun vc-rcs-latest-on-branch-p (file &optional version)
"Return non-nil if workfile version of FILE is the latest on its branch.
When VERSION is given, perform check for that version."
- (unless version (setq version (vc-workfile-version file)))
+ (unless version (setq version (vc-working-revision file)))
(with-temp-buffer
(string= version
(if (vc-trunk-p version)
@@ -212,7 +221,7 @@ When VERSION is given, perform check for that version."
"RCS-specific implementation of `vc-workfile-unchanged-p'."
;; Try to use rcsdiff --brief. If rcsdiff does not understand that,
;; do a double take and remember the fact for the future
- (let* ((version (concat "-r" (vc-workfile-version file)))
+ (let* ((version (concat "-r" (vc-working-revision file)))
(status (if (eq vc-rcsdiff-knows-brief 'no)
(vc-do-command nil 1 "rcsdiff" file version)
(vc-do-command nil 2 "rcsdiff" file "--brief" version))))
@@ -238,17 +247,23 @@ When VERSION is given, perform check for that version."
;;; State-changing functions
;;;
-(defun vc-rcs-register (file &optional rev comment)
- "Register FILE into the RCS version-control system.
-REV is the optional revision number for the file. COMMENT can be used
-to provide an initial description of FILE.
+(defun vc-rcs-create-repo ()
+ "Create a new RCS repository."
+ ;; RCS is totally file-oriented, so all we have to do is make the directory
+ (make-directory "RCS"))
+
+(defun vc-rcs-register (files &optional rev comment)
+ "Register FILES into the RCS version-control system.
+REV is the optional revision number for the files. COMMENT can be used
+to provide an initial description for each FILES.
`vc-register-switches' and `vc-rcs-register-switches' are passed to
the RCS command (in that order).
Automatically retrieve a read-only version of the file with keywords
expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
- (let ((subdir (expand-file-name "RCS" (file-name-directory file))))
+ (let ((subdir (expand-file-name "RCS" (file-name-directory file))))
+ (dolist (file files)
(and (not (file-exists-p subdir))
(not (directory-files (file-name-directory file)
nil ".*,v$" t))
@@ -277,11 +292,11 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
(expand-file-name
name
(file-name-directory file))))))
- (vc-file-setprop file 'vc-workfile-version
+ (vc-file-setprop file 'vc-working-revision
(if (re-search-forward
"^initial revision: \\([0-9.]+\\).*\n"
nil t)
- (match-string 1))))))
+ (match-string 1)))))))
(defun vc-rcs-responsible-p (file)
"Return non-nil if RCS thinks it would be responsible for registering FILE."
@@ -315,57 +330,59 @@ whether to remove it."
(yes-or-no-p (format "Directory %s is empty; remove it? " dir))
(delete-directory dir))))
-(defun vc-rcs-checkin (file rev comment)
+(defun vc-rcs-checkin (files rev comment)
"RCS-specific version of `vc-backend-checkin'."
(let ((switches (vc-switches 'RCS 'checkin)))
- (let ((old-version (vc-workfile-version file)) new-version
- (default-branch (vc-file-getprop file 'vc-rcs-default-branch)))
- ;; Force branch creation if an appropriate
- ;; default branch has been set.
- (and (not rev)
- default-branch
- (string-match (concat "^" (regexp-quote old-version) "\\.")
- default-branch)
- (setq rev default-branch)
- (setq switches (cons "-f" switches)))
- (if (and (not rev) old-version)
- (setq rev (vc-branch-part old-version)))
- (apply 'vc-do-command nil 0 "ci" (vc-name file)
- ;; if available, use the secure check-in option
- (and (vc-rcs-release-p "5.6.4") "-j")
- (concat (if vc-keep-workfiles "-u" "-r") rev)
- (concat "-m" comment)
- switches)
- (vc-file-setprop file 'vc-workfile-version nil)
-
- ;; determine the new workfile version
- (set-buffer "*vc*")
- (goto-char (point-min))
- (when (or (re-search-forward
- "new revision: \\([0-9.]+\\);" nil t)
- (re-search-forward
- "reverting to previous revision \\([0-9.]+\\)" nil t))
- (setq new-version (match-string 1))
- (vc-file-setprop file 'vc-workfile-version new-version))
-
- ;; if we got to a different branch, adjust the default
- ;; branch accordingly
- (cond
- ((and old-version new-version
- (not (string= (vc-branch-part old-version)
- (vc-branch-part new-version))))
- (vc-rcs-set-default-branch file
- (if (vc-trunk-p new-version) nil
- (vc-branch-part new-version)))
- ;; If this is an old RCS release, we might have
- ;; to remove a remaining lock.
- (if (not (vc-rcs-release-p "5.6.2"))
- ;; exit status of 1 is also accepted.
- ;; It means that the lock was removed before.
- (vc-do-command nil 1 "rcs" (vc-name file)
- (concat "-u" old-version))))))))
-
-(defun vc-rcs-find-version (file rev buffer)
+ ;; Now operate on the files
+ (dolist (file files)
+ (let ((old-version (vc-working-revision file)) new-version
+ (default-branch (vc-file-getprop file 'vc-rcs-default-branch)))
+ ;; Force branch creation if an appropriate
+ ;; default branch has been set.
+ (and (not rev)
+ default-branch
+ (string-match (concat "^" (regexp-quote old-version) "\\.")
+ default-branch)
+ (setq rev default-branch)
+ (setq switches (cons "-f" switches)))
+ (if (and (not rev) old-version)
+ (setq rev (vc-branch-part old-version)))
+ (apply 'vc-do-command nil 0 "ci" (vc-name file)
+ ;; if available, use the secure check-in option
+ (and (vc-rcs-release-p "5.6.4") "-j")
+ (concat (if vc-keep-workfiles "-u" "-r") rev)
+ (concat "-m" comment)
+ switches)
+ (vc-file-setprop file 'vc-working-revision nil)
+
+ ;; determine the new workfile version
+ (set-buffer "*vc*")
+ (goto-char (point-min))
+ (when (or (re-search-forward
+ "new revision: \\([0-9.]+\\);" nil t)
+ (re-search-forward
+ "reverting to previous revision \\([0-9.]+\\)" nil t))
+ (setq new-version (match-string 1))
+ (vc-file-setprop file 'vc-working-revision new-version))
+
+ ;; if we got to a different branch, adjust the default
+ ;; branch accordingly
+ (cond
+ ((and old-version new-version
+ (not (string= (vc-branch-part old-version)
+ (vc-branch-part new-version))))
+ (vc-rcs-set-default-branch file
+ (if (vc-trunk-p new-version) nil
+ (vc-branch-part new-version)))
+ ;; If this is an old RCS release, we might have
+ ;; to remove a remaining lock.
+ (if (not (vc-rcs-release-p "5.6.2"))
+ ;; exit status of 1 is also accepted.
+ ;; It means that the lock was removed before.
+ (vc-do-command nil 1 "rcs" (vc-name file)
+ (concat "-u" old-version)))))))))
+
+(defun vc-rcs-find-revision (file rev buffer)
(apply 'vc-do-command
buffer 0 "co" (vc-name file)
"-q" ;; suppress diagnostic output
@@ -404,7 +421,7 @@ whether to remove it."
(if (stringp rev)
;; a literal revision was specified
(concat "-r" rev)
- (let ((workrev (vc-workfile-version file)))
+ (let ((workrev (vc-working-revision file)))
(if workrev
(concat "-r"
(if (not rev)
@@ -424,7 +441,7 @@ whether to remove it."
(with-current-buffer "*vc*"
(setq new-version
(vc-parse-buffer "^revision \\([0-9.]+\\).*\n" 1)))
- (vc-file-setprop file 'vc-workfile-version new-version)
+ (vc-file-setprop file 'vc-working-revision new-version)
;; if necessary, adjust the default branch
(and rev (not (string= rev ""))
(vc-rcs-set-default-branch
@@ -435,40 +452,47 @@ whether to remove it."
new-version)))))
(message "Checking out %s...done" file)))))
+(defun vc-rcs-rollback (files)
+ "Roll back, undoing the most recent checkins of FILES."
+ (if (not files)
+ (error "RCS backend doesn't support directory-level rollback."))
+ (dolist (file files)
+ (let* ((discard (vc-working-revision file))
+ (previous (if (vc-trunk-p discard) "" (vc-branch-part discard)))
+ (config (current-window-configuration))
+ (done nil))
+ (if (null (yes-or-no-p (format "Remove version %s from %s history? "
+ discard file)))
+ (error "Aborted"))
+ (message "Removing revision %s from %s." discard file)
+ (vc-do-command nil 0 "rcs" (vc-name file) (concat "-o" discard))
+ ;; Check out the most recent remaining version. If it
+ ;; fails, because the whole branch got deleted, do a
+ ;; double-take and check out the version where the branch
+ ;; started.
+ (while (not done)
+ (condition-case err
+ (progn
+ (vc-do-command nil 0 "co" (vc-name file) "-f"
+ (concat "-u" previous))
+ (setq done t))
+ (error (set-buffer "*vc*")
+ (goto-char (point-min))
+ (if (search-forward "no side branches present for" nil t)
+ (progn (setq previous (vc-branch-part previous))
+ (vc-rcs-set-default-branch file previous)
+ ;; vc-do-command popped up a window with
+ ;; the error message. Get rid of it, by
+ ;; restoring the old window configuration.
+ (set-window-configuration config))
+ ;; No, it was some other error: re-signal it.
+ (signal (car err) (cdr err)))))))))
+
(defun vc-rcs-revert (file &optional contents-done)
"Revert FILE to the version it was based on."
(vc-do-command nil 0 "co" (vc-name file) "-f"
(concat (if (eq (vc-state file) 'edited) "-u" "-r")
- (vc-workfile-version file))))
-
-(defun vc-rcs-cancel-version (file editable)
- "Undo the most recent checkin of FILE.
-EDITABLE non-nil means previous version should be locked."
- (let* ((target (vc-workfile-version file))
- (previous (if (vc-trunk-p target) "" (vc-branch-part target)))
- (config (current-window-configuration))
- (done nil))
- (vc-do-command nil 0 "rcs" (vc-name file) (concat "-o" target))
- ;; Check out the most recent remaining version. If it fails, because
- ;; the whole branch got deleted, do a double-take and check out the
- ;; version where the branch started.
- (while (not done)
- (condition-case err
- (progn
- (vc-do-command nil 0 "co" (vc-name file) "-f"
- (concat (if editable "-l" "-u") previous))
- (setq done t))
- (error (set-buffer "*vc*")
- (goto-char (point-min))
- (if (search-forward "no side branches present for" nil t)
- (progn (setq previous (vc-branch-part previous))
- (vc-rcs-set-default-branch file previous)
- ;; vc-do-command popped up a window with
- ;; the error message. Get rid of it, by
- ;; restoring the old window configuration.
- (set-window-configuration config))
- ;; No, it was some other error: re-signal it.
- (signal (car err) (cdr err))))))))
+ (vc-working-revision file))))
(defun vc-rcs-merge (file first-version &optional second-version)
"Merge changes into current working copy of FILE.
@@ -492,19 +516,38 @@ Needs RCS 5.6.2 or later for -M."
;;; History functions
;;;
-(defun vc-rcs-print-log (file &optional buffer)
+(defun vc-rcs-print-log (files &optional buffer)
"Get change log associated with FILE."
- (vc-do-command buffer 0 "rlog" (vc-name file)))
+ (vc-do-command buffer 0 "rlog" (mapcar 'vc-name files)))
-(defun vc-rcs-diff (file &optional oldvers newvers buffer)
- "Get a difference report using RCS between two versions of FILE."
- (if (not oldvers) (setq oldvers (vc-workfile-version file)))
- (apply 'vc-do-command (or buffer "*vc-diff*") 1 "rcsdiff" file
+(defun vc-rcs-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using RCS between two sets of files."
+ (apply 'vc-do-command (or buffer "*vc-diff*")
+ 1 ;; Always go synchronous, the repo is local
+ "rcsdiff" (vc-expand-dirs files)
(append (list "-q"
- (concat "-r" oldvers)
+ (and oldvers (concat "-r" oldvers))
(and newvers (concat "-r" newvers)))
(vc-switches 'RCS 'diff))))
+(defun vc-rcs-wash-log ()
+ "Remove all non-comment information from log output."
+ (let ((separator (concat "^-+\nrevision [0-9.]+\ndate: .*\n"
+ "\\(branches: .*;\n\\)?"
+ "\\(\\*\\*\\* empty log message \\*\\*\\*\n\\)?")))
+ (goto-char (point-max)) (forward-line -1)
+ (while (looking-at "=*\n")
+ (delete-char (- (match-end 0) (match-beginning 0)))
+ (forward-line -1))
+ (goto-char (point-min))
+ (if (looking-at "[\b\t\n\v\f\r ]+")
+ (delete-char (- (match-end 0) (match-beginning 0))))
+ (goto-char (point-min))
+ (re-search-forward separator nil t)
+ (delete-region (point-min) (point))
+ (while (re-search-forward separator nil t)
+ (delete-region (match-beginning 0) (match-end 0)))))
+
(defun vc-rcs-annotate-command (file buffer &optional revision)
"Annotate FILE, inserting the results in BUFFER.
Optional arg REVISION is a revision to annotate from."
@@ -768,11 +811,11 @@ to its master version."
(or value
(vc-branch-part branch))))
-(defun vc-rcs-fetch-master-state (file &optional workfile-version)
+(defun vc-rcs-fetch-master-state (file &optional working-revision)
"Compute the master file's idea of the state of FILE.
If a WORKFILE-VERSION is given, compute the state of that version,
otherwise determine the workfile version based on the master file.
-This function sets the properties `vc-workfile-version' and
+This function sets the properties `vc-working-revision' and
`vc-checkout-model' to their correct values, based on the master
file."
(with-temp-buffer
@@ -783,7 +826,7 @@ file."
(let ((workfile-is-latest nil)
(default-branch (vc-parse-buffer "^branch[ \t\n]+\\([^;]*\\);" 1)))
(vc-file-setprop file 'vc-rcs-default-branch default-branch)
- (unless workfile-version
+ (unless working-revision
;; Workfile version not known yet. Determine that first. It
;; is either the head of the trunk, the head of the default
;; branch, or the "default branch" itself, if that is a full
@@ -791,19 +834,19 @@ file."
(cond
;; no default branch
((or (not default-branch) (string= "" default-branch))
- (setq workfile-version
+ (setq working-revision
(vc-parse-buffer "^head[ \t\n]+\\([^;]+\\);" 1))
(setq workfile-is-latest t))
;; default branch is actually a revision
((string-match "^[0-9]+\\.[0-9]+\\(\\.[0-9]+\\.[0-9]+\\)*$"
default-branch)
- (setq workfile-version default-branch))
+ (setq working-revision default-branch))
;; else, search for the head of the default branch
(t (vc-insert-file (vc-name file) "^desc")
- (setq workfile-version
+ (setq working-revision
(vc-rcs-find-most-recent-rev default-branch))
(setq workfile-is-latest t)))
- (vc-file-setprop file 'vc-workfile-version workfile-version))
+ (vc-file-setprop file 'vc-working-revision working-revision))
;; Check strict locking
(goto-char (point-min))
(vc-file-setprop file 'vc-checkout-model
@@ -813,14 +856,14 @@ file."
(goto-char (point-min))
(let ((locking-user
(vc-parse-buffer (concat "^locks[ \t\n]+[^;]*[ \t\n]+\\([^:]+\\):"
- (regexp-quote workfile-version)
+ (regexp-quote working-revision)
"[^0-9.]")
1)))
(cond
;; not locked
((not locking-user)
(if (or workfile-is-latest
- (vc-rcs-latest-on-branch-p file workfile-version))
+ (vc-rcs-latest-on-branch-p file working-revision))
;; workfile version is latest on branch
'up-to-date
;; workfile version is not latest on branch
@@ -830,7 +873,7 @@ file."
(string= locking-user (vc-user-login-name file)))
(if (or (eq (vc-checkout-model file) 'locking)
workfile-is-latest
- (vc-rcs-latest-on-branch-p file workfile-version))
+ (vc-rcs-latest-on-branch-p file working-revision))
'edited
;; Locking is not used for the file, but the owner does
;; have a lock, and there is a higher version on the current
@@ -911,7 +954,7 @@ Returns: nil if no headers were found
;; else: nothing found
;; -------------------
(t nil)))
- (if status (vc-file-setprop file 'vc-workfile-version version))
+ (if status (vc-file-setprop file 'vc-working-revision version))
(and (eq status 'rev-and-lock)
(vc-file-setprop file 'vc-state
(cond
diff --git a/lisp/vc-sccs.el b/lisp/vc-sccs.el
index f7a0f027a4c..06fcff3ceb5 100644
--- a/lisp/vc-sccs.el
+++ b/lisp/vc-sccs.el
@@ -27,6 +27,10 @@
;;; Commentary:
+;; TODO:
+;; - remove call to vc-expand-dirs by implementing our own (which can just
+;; list the SCCS subdir instead).
+
;;; Code:
(eval-when-compile
@@ -85,6 +89,11 @@ For a description of possible values, see `vc-check-master-templates'."
(defconst vc-sccs-name-assoc-file "VC-names")
+;;; Properties of the backend
+
+(defun vc-sccs-revision-granularity ()
+ 'file)
+
;;;
;;; State-querying functions
;;;
@@ -102,8 +111,8 @@ For a description of possible values, see `vc-check-master-templates'."
(with-temp-buffer
(if (vc-insert-file (vc-sccs-lock-file file))
(let* ((locks (vc-sccs-parse-locks))
- (workfile-version (vc-workfile-version file))
- (locking-user (cdr (assoc workfile-version locks))))
+ (working-revision (vc-working-revision file))
+ (locking-user (cdr (assoc working-revision locks))))
(if (not locking-user)
(if (vc-workfile-unchanged-p file)
'up-to-date
@@ -136,13 +145,13 @@ For a description of possible values, see `vc-check-master-templates'."
(vc-sccs-state file))))
(vc-sccs-state file)))
-(defun vc-sccs-workfile-version (file)
- "SCCS-specific version of `vc-workfile-version'."
+(defun vc-sccs-working-revision (file)
+ "SCCS-specific version of `vc-working-revision'."
(with-temp-buffer
- ;; The workfile version is always the latest version number.
+ ;; The working revision is always the latest revision number.
;; To find this number, search the entire delta table,
;; rather than just the first entry, because the
- ;; first entry might be a deleted ("R") version.
+ ;; first entry might be a deleted ("R") revision.
(vc-insert-file (vc-name file) "^\001e\n\001[^s]")
(vc-parse-buffer "^\001d D \\([^ ]+\\)" 1)))
@@ -154,23 +163,29 @@ For a description of possible values, see `vc-check-master-templates'."
"SCCS-specific implementation of `vc-workfile-unchanged-p'."
(zerop (apply 'vc-do-command nil 1 "vcdiff" (vc-name file)
(list "--brief" "-q"
- (concat "-r" (vc-workfile-version file))))))
+ (concat "-r" (vc-working-revision file))))))
;;;
;;; State-changing functions
;;;
-(defun vc-sccs-register (file &optional rev comment)
- "Register FILE into the SCCS version-control system.
+(defun vc-sccs-create-repo ()
+ "Create a new SCCS repository."
+ ;; SCCS is totally file-oriented, so all we have to do is make the directory
+ (make-directory "SCCS"))
+
+(defun vc-sccs-register (files &optional rev comment)
+ "Register FILES into the SCCS version-control system.
REV is the optional revision number for the file. COMMENT can be used
-to provide an initial description of FILE.
+to provide an initial description of FILES.
`vc-register-switches' and `vc-sccs-register-switches' are passed to
the SCCS command (in that order).
-Automatically retrieve a read-only version of the file with keywords
+Automatically retrieve a read-only version of the files with keywords
expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
+ (dolist (file files)
(let* ((dirname (or (file-name-directory file) ""))
(basename (file-name-nondirectory file))
(project-file (vc-sccs-search-project-dir dirname basename)))
@@ -178,14 +193,14 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
(or project-file
(format (car vc-sccs-master-templates) dirname basename))))
(apply 'vc-do-command nil 0 "admin" vc-name
- (and rev (concat "-r" rev))
+ (and rev (not (string= rev "")) (concat "-r" rev))
"-fb"
(concat "-i" (file-relative-name file))
(and comment (concat "-y" comment))
(vc-switches 'SCCS 'register)))
(delete-file file)
(if vc-keep-workfiles
- (vc-do-command nil 0 "get" (vc-name file)))))
+ (vc-do-command nil 0 "get" (vc-name file))))))
(defun vc-sccs-responsible-p (file)
"Return non-nil if SCCS thinks it would be responsible for registering FILE."
@@ -194,16 +209,17 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
(stringp (vc-sccs-search-project-dir (or (file-name-directory file) "")
(file-name-nondirectory file)))))
-(defun vc-sccs-checkin (file rev comment)
+(defun vc-sccs-checkin (files rev comment)
"SCCS-specific version of `vc-backend-checkin'."
- (apply 'vc-do-command nil 0 "delta" (vc-name file)
- (if rev (concat "-r" rev))
- (concat "-y" comment)
- (vc-switches 'SCCS 'checkin))
- (if vc-keep-workfiles
- (vc-do-command nil 0 "get" (vc-name file))))
-
-(defun vc-sccs-find-version (file rev buffer)
+ (dolist (file files)
+ (apply 'vc-do-command nil 0 "delta" (vc-name file)
+ (if rev (concat "-r" rev))
+ (concat "-y" comment)
+ (vc-switches 'SCCS 'checkin))
+ (if vc-keep-workfiles
+ (vc-do-command nil 0 "get" (vc-name file)))))
+
+(defun vc-sccs-find-revision (file rev buffer)
(apply 'vc-do-command
buffer 0 "get" (vc-name file)
"-s" ;; suppress diagnostic output
@@ -214,7 +230,7 @@ expanded if `vc-keep-workfiles' is non-nil, otherwise, delete the workfile."
(vc-switches 'SCCS 'checkout)))
(defun vc-sccs-checkout (file &optional editable rev)
- "Retrieve a copy of a saved version of SCCS controlled FILE.
+ "Retrieve a copy of a saved revision of SCCS controlled FILE.
EDITABLE non-nil means that the file should be writable and
locked. REV is the revision to check out."
(let ((file-buffer (get-file-buffer file))
@@ -242,24 +258,27 @@ locked. REV is the revision to check out."
switches))))
(message "Checking out %s...done" file)))
+(defun vc-sccs-rollback (files)
+ "Roll back, undoing the most recent checkins of FILES."
+ (if (not files)
+ (error "SCCS backend doesn't support directory-level rollback."))
+ (dolist (file files)
+ (let ((discard (vc-working-revision file)))
+ (if (null (yes-or-no-p (format "Remove version %s from %s history? "
+ discard file)))
+ (error "Aborted"))
+ (message "Removing revision %s from %s..." discard file)
+ (vc-do-command nil 0 "rmdel" (vc-name file) (concat "-r" discard))
+ (vc-do-command nil 0 "get" (vc-name file) nil))))
+
(defun vc-sccs-revert (file &optional contents-done)
"Revert FILE to the version it was based on."
(vc-do-command nil 0 "unget" (vc-name file))
(vc-do-command nil 0 "get" (vc-name file))
- ;; Checking out explicit versions is not supported under SCCS, yet.
- ;; We always "revert" to the latest version; therefore
- ;; vc-workfile-version is cleared here so that it gets recomputed.
- (vc-file-setprop file 'vc-workfile-version nil))
-
-(defun vc-sccs-cancel-version (file editable)
- "Undo the most recent checkin of FILE.
-EDITABLE non-nil means previous version should be locked."
- (vc-do-command nil 0 "rmdel"
- (vc-name file)
- (concat "-r" (vc-workfile-version file)))
- (vc-do-command nil 0 "get"
- (vc-name file)
- (if editable "-e")))
+ ;; Checking out explicit revisions is not supported under SCCS, yet.
+ ;; We always "revert" to the latest revision; therefore
+ ;; vc-working-revision is cleared here so that it gets recomputed.
+ (vc-file-setprop file 'vc-working-revision nil))
(defun vc-sccs-steal-lock (file &optional rev)
"Steal the lock on the current workfile for FILE and revision REV."
@@ -271,9 +290,14 @@ EDITABLE non-nil means previous version should be locked."
;;; History functions
;;;
-(defun vc-sccs-print-log (file &optional buffer)
- "Get change log associated with FILE."
- (vc-do-command buffer 0 "prs" (vc-name file)))
+(defun vc-sccs-print-log (files &optional buffer)
+ "Get change log associated with FILES."
+ (vc-do-command buffer 0 "prs" (mapcar 'vc-name files)))
+
+(defun vc-sccs-wash-log ()
+ "Remove all non-comment information from log output."
+ ;; FIXME: not implemented for SCCS
+ nil)
(defun vc-sccs-logentry-check ()
"Check that the log entry in the current buffer is acceptable for SCCS."
@@ -281,11 +305,12 @@ EDITABLE non-nil means previous version should be locked."
(goto-char 512)
(error "Log must be less than 512 characters; point is now at pos 512")))
-(defun vc-sccs-diff (file &optional oldvers newvers buffer)
- "Get a difference report using SCCS between two versions of FILE."
+(defun vc-sccs-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using SCCS between two filesets."
(setq oldvers (vc-sccs-lookup-triple file oldvers))
(setq newvers (vc-sccs-lookup-triple file newvers))
- (apply 'vc-do-command (or buffer "*vc-diff*") 1 "vcdiff" (vc-name file)
+ (apply 'vc-do-command (or buffer "*vc-diff*")
+ 1 "vcdiff" (mapcar 'vc-name (vc-expand-dirs files))
(append (list "-q"
(and oldvers (concat "-r" oldvers))
(and newvers (concat "-r" newvers)))
@@ -297,8 +322,8 @@ EDITABLE non-nil means previous version should be locked."
;;;
(defun vc-sccs-assign-name (file name)
- "Assign to FILE's latest version a given NAME."
- (vc-sccs-add-triple name file (vc-workfile-version file)))
+ "Assign to FILE's latest revision a given NAME."
+ (vc-sccs-add-triple name file (vc-working-revision file)))
;;;
@@ -363,7 +388,7 @@ find any project directory."
(defun vc-sccs-parse-locks ()
"Parse SCCS locks in current buffer.
-The result is a list of the form ((VERSION . USER) (VERSION . USER) ...)."
+The result is a list of the form ((REVISION . USER) (REVISION . USER) ...)."
(let (master-locks)
(goto-char (point-min))
(while (re-search-forward "^\\([0-9.]+\\) [0-9.]+ \\([^ ]+\\) .*\n?"
@@ -384,8 +409,8 @@ The result is a list of the form ((VERSION . USER) (VERSION . USER) ...)."
(kill-buffer (current-buffer))))
(defun vc-sccs-lookup-triple (file name)
- "Return the numeric version corresponding to a named snapshot of FILE.
-If NAME is nil or a version number string it's just passed through."
+ "Return the numeric revision corresponding to a named snapshot of FILE.
+If NAME is nil or a revision number string it's just passed through."
(if (or (null name)
(let ((firstchar (aref name 0)))
(and (>= firstchar ?0) (<= firstchar ?9))))
diff --git a/lisp/vc-svn.el b/lisp/vc-svn.el
index bfb0da68048..b83f8e0580f 100644
--- a/lisp/vc-svn.el
+++ b/lisp/vc-svn.el
@@ -24,11 +24,8 @@
;;; Commentary:
-;; This is preliminary support for Subversion (http://subversion.tigris.org/).
-;; It started as `sed s/cvs/svn/ vc.cvs.el' (from version 1.56)
-;; and hasn't been completely fixed since.
-
-;; Sync'd with Subversion's vc-svn.el as of revision 5801.
+;; Sync'd with Subversion's vc-svn.el as of revision 5801. but this version
+;; has been extensively modified since to handle filesets.
;;; Bugs:
@@ -96,6 +93,10 @@ If you want to force an empty list of arguments, use t."
(t ".svn"))
"The name of the \".svn\" subdirectory or its equivalent.")
+;;; Properties of the backend
+
+(defun vc-svn-revision-granularity ()
+ 'repository)
;;;
;;; State-querying functions
;;;
@@ -159,13 +160,13 @@ If you want to force an empty list of arguments, use t."
(vc-svn-command t 0 nil "status" (if localp "-v" "-u"))
(vc-svn-parse-status))))
-(defun vc-svn-workfile-version (file)
- "SVN-specific version of `vc-workfile-version'."
+(defun vc-svn-working-revision (file)
+ "SVN-specific version of `vc-working-revision'."
;; There is no need to consult RCS headers under SVN, because we
;; get the workfile version for free when we recognize that a file
;; is registered in SVN.
(vc-svn-registered file)
- (vc-file-getprop file 'vc-workfile-version))
+ (vc-file-getprop file 'vc-working-revision))
(defun vc-svn-checkout-model (file)
"SVN-specific version of `vc-checkout-model'."
@@ -179,25 +180,25 @@ If you want to force an empty list of arguments, use t."
"SVN-specific version of `vc-dired-state-info'."
(let ((svn-state (vc-state file)))
(cond ((eq svn-state 'edited)
- (if (equal (vc-workfile-version file) "0")
+ (if (equal (vc-working-revision file) "0")
"(added)" "(modified)"))
((eq svn-state 'needs-patch) "(patch)")
((eq svn-state 'needs-merge) "(merge)"))))
-(defun vc-svn-previous-version (file rev)
+(defun vc-svn-previous-revision (file rev)
(let ((newrev (1- (string-to-number rev))))
(when (< 0 newrev)
(number-to-string newrev))))
-(defun vc-svn-next-version (file rev)
+(defun vc-svn-next-revision (file rev)
(let ((newrev (1+ (string-to-number rev))))
- ;; The "workfile version" is an uneasy conceptual fit under Subversion;
+ ;; The "working revision" is an uneasy conceptual fit under Subversion;
;; we use it as the upper bound until a better idea comes along. If the
;; workfile version W coincides with the tree's latest revision R, then
;; this check prevents a "no such revision: R+1" error. Otherwise, it
;; inhibits showing of W+1 through R, which could be considered anywhere
;; from gracious to impolite.
- (unless (< (string-to-number (vc-file-getprop file 'vc-workfile-version))
+ (unless (< (string-to-number (vc-file-getprop file 'vc-working-revision))
newrev)
(number-to-string newrev))))
@@ -206,13 +207,19 @@ If you want to force an empty list of arguments, use t."
;;; State-changing functions
;;;
-(defun vc-svn-register (file &optional rev comment)
- "Register FILE into the SVN version-control system.
-COMMENT can be used to provide an initial description of FILE.
+(defun vc-svn-create-repo ()
+ "Create a new SVN repository."
+ (vc-do-command nil 0 "svnadmin" '("create" "SVN"))
+ (vc-do-command nil 0 "svn" '(".")
+ "checkout" (concat "file://" default-directory "SVN")))
+
+(defun vc-svn-register (files &optional rev comment)
+ "Register FILES into the SVN version-control system.
+The COMMENT argument is ignored This does an add but not a commit.
`vc-register-switches' and `vc-svn-register-switches' are passed to
the SVN command (in that order)."
- (apply 'vc-svn-command nil 0 file "add" (vc-switches 'SVN 'register)))
+ (apply 'vc-svn-command nil 0 files "add" (vc-switches 'SVN 'register)))
(defun vc-svn-responsible-p (file)
"Return non-nil if SVN thinks it is responsible for FILE."
@@ -225,10 +232,11 @@ the SVN command (in that order)."
"Return non-nil if FILE could be registered in SVN.
This is only possible if SVN is responsible for FILE's directory.")
-(defun vc-svn-checkin (file rev comment)
+(defun vc-svn-checkin (files rev comment)
"SVN-specific version of `vc-backend-checkin'."
+ (if rev (error "Committing to a specific revision is unsupported in SVN."))
(let ((status (apply
- 'vc-svn-command nil 1 file "ci"
+ 'vc-svn-command nil 1 files "ci"
(nconc (list "-m" comment) (vc-switches 'SVN 'checkin)))))
(set-buffer "*vc*")
(goto-char (point-min))
@@ -236,7 +244,8 @@ This is only possible if SVN is responsible for FILE's directory.")
;; Check checkin problem.
(cond
((search-forward "Transaction is out of date" nil t)
- (vc-file-setprop file 'vc-state 'needs-merge)
+ (mapc (lambda (file) (vc-file-setprop file 'vc-state 'needs-merge))
+ files)
(error (substitute-command-keys
(concat "Up-to-date check failed: "
"type \\[vc-next-action] to merge in changes"))))
@@ -247,11 +256,12 @@ This is only possible if SVN is responsible for FILE's directory.")
(error "Check-in failed"))))
;; Update file properties
;; (vc-file-setprop
- ;; file 'vc-workfile-version
+ ;; file 'vc-working-revision
;; (vc-parse-buffer "^\\(new\\|initial\\) revision: \\([0-9.]+\\)" 2))
))
-(defun vc-svn-find-version (file rev buffer)
+(defun vc-svn-find-revision (file rev buffer)
+ "SVN-specific retrieval of a specified version into a buffer."
(apply 'vc-svn-command
buffer 0 file
"cat"
@@ -271,7 +281,7 @@ This is only possible if SVN is responsible for FILE's directory.")
;; If no revision was specified, there's nothing to do.
nil
;; Check out a particular version (or recreate the file).
- (vc-file-setprop file 'vc-workfile-version nil)
+ (vc-file-setprop file 'vc-working-revision nil)
(apply 'vc-svn-command nil 0 file
"update"
;; default for verbose checkout: clear the sticky tag so
@@ -311,18 +321,18 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
(defun vc-svn-merge-news (file)
"Merge in any new changes made to FILE."
(message "Merging changes into %s..." file)
- ;; (vc-file-setprop file 'vc-workfile-version nil)
+ ;; (vc-file-setprop file 'vc-working-revision nil)
(vc-file-setprop file 'vc-checkout-time 0)
(vc-svn-command nil 0 file "update")
;; Analyze the merge result reported by SVN, and set
;; file properties accordingly.
(with-current-buffer (get-buffer "*vc*")
(goto-char (point-min))
- ;; get new workfile version
+ ;; get new working revision
(if (re-search-forward
"^\\(Updated to\\|At\\) revision \\([0-9]+\\)" nil t)
- (vc-file-setprop file 'vc-workfile-version (match-string 2))
- (vc-file-setprop file 'vc-workfile-version nil))
+ (vc-file-setprop file 'vc-working-revision (match-string 2))
+ (vc-file-setprop file 'vc-working-revision nil))
;; get file status
(goto-char (point-min))
(prog1
@@ -362,53 +372,60 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
;;; History functions
;;;
-(defun vc-svn-print-log (file &optional buffer)
- "Get change log associated with FILE."
+(defun vc-svn-print-log (files &optional buffer)
+ "Get change log(s) associated with FILES."
(save-current-buffer
(vc-setup-buffer buffer)
(let ((inhibit-read-only t))
(goto-char (point-min))
;; Add a line to tell log-view-mode what file this is.
- (insert "Working file: " (file-relative-name file) "\n"))
+ ;; FIXME if there are multiple files, log-view-current-file
+ ;; breaks. It's trivial to adapt log-view-file-re for the
+ ;; changed prefix, but less trivial to make
+ ;; log-view-current-file actually do the right thing in the
+ ;; multiple file case.
+ (insert (format "Working file%s: "
+ (if (= (length files) 1)
+ ""
+ "s"))
+ (vc-delistify (mapcar 'file-relative-name files)) "\n"))
(vc-svn-command
buffer
- (if (and (vc-stay-local-p file) (fboundp 'start-process)) 'async 0)
- file "log"
- ;; By default Subversion only shows the log upto the working version,
+ (if (and (= (length files) 1) (vc-stay-local-p (car files))) 'async 0)
+ files "log"
+ ;; By default Subversion only shows the log upto the working revision,
;; whereas we also want the log of the subsequent commits. At least
;; that's what the vc-cvs.el code does.
"-rHEAD:0")))
-(defun vc-svn-diff (file &optional oldvers newvers buffer)
- "Get a difference report using SVN between two versions of FILE."
- (unless buffer (setq buffer "*vc-diff*"))
- (if (and oldvers (equal oldvers (vc-workfile-version file)))
- ;; Use nil rather than the current revision because svn handles it
- ;; better (i.e. locally).
- (setq oldvers nil))
- (if (string= (vc-workfile-version file) "0")
- ;; This file is added but not yet committed; there is no master file.
- (if (or oldvers newvers)
- (error "No revisions of %s exist" file)
- ;; We regard this as "changed".
- ;; Diff it against /dev/null.
- ;; Note: this is NOT a "svn diff".
- (apply 'vc-do-command buffer
- 1 "diff" file
- (append (vc-switches nil 'diff) '("/dev/null")))
- ;; Even if it's empty, it's locally modified.
- 1)
- (let* ((switches
+(defun vc-svn-wash-log ()
+ "Remove all non-comment information from log output."
+ ;; FIXME: not implemented for SVN
+ nil)
+
+(defun vc-svn-diff (files &optional oldvers newvers buffer)
+ "Get a difference report using SVN between two revisions of fileset FILES."
+ (and oldvers
+ (catch 'no
+ (dolist (f files)
+ (or (equal oldvers (vc-working-revision f))
+ (throw 'no nil)))
+ t)
+ ;; Use nil rather than the current revision because svn handles
+ ;; it better (i.e. locally). Note that if _any_ of the files
+ ;; has a different revision, we fetch the lot, which is
+ ;; obviously sub-optimal.
+ (setq oldvers nil))
+ (let* ((switches
(if vc-svn-diff-switches
(vc-switches 'SVN 'diff)
(list "-x" (mapconcat 'identity (vc-switches nil 'diff) " "))))
(async (and (not vc-disable-async-diff)
- (vc-stay-local-p file)
- (or oldvers newvers) ; Svn diffs those locally.
- (fboundp 'start-process))))
+ (vc-stay-local-p files)
+ (or oldvers newvers)))) ; Svn diffs those locally.
(apply 'vc-svn-command buffer
(if async 'async 0)
- file "diff"
+ files "diff"
(append
switches
(when oldvers
@@ -417,18 +434,14 @@ The changes are between FIRST-VERSION and SECOND-VERSION."
(if async 1 ; async diff => pessimistic assumption
;; For some reason `svn diff' does not return a useful
;; status w.r.t whether the diff was empty or not.
- (buffer-size (get-buffer buffer))))))
-
-(defun vc-svn-diff-tree (dir &optional rev1 rev2)
- "Diff all files at and below DIR."
- (vc-svn-diff (file-name-as-directory dir) rev1 rev2))
+ (buffer-size (get-buffer buffer)))))
;;;
;;; Snapshot system
;;;
(defun vc-svn-create-snapshot (dir name branchp)
- "Assign to DIR's current version a given NAME.
+ "Assign to DIR's current revision a given NAME.
If BRANCHP is non-nil, the name is created as a branch (and the current
workspace is immediately moved to that new branch).
NAME is assumed to be a URL."
@@ -464,11 +477,16 @@ NAME is assumed to be a URL."
;;; Internal functions
;;;
-(defun vc-svn-command (buffer okstatus file &rest flags)
+(defcustom vc-svn-program "svn"
+ "Name of the svn executable."
+ :type 'string
+ :group 'vc)
+
+(defun vc-svn-command (buffer okstatus file-or-list &rest flags)
"A wrapper around `vc-do-command' for use in vc-svn.el.
The difference to vc-do-command is that this function always invokes `svn',
and that it passes `vc-svn-global-switches' to it before FLAGS."
- (apply 'vc-do-command buffer okstatus "svn" file
+ (apply 'vc-do-command buffer okstatus vc-svn-program file-or-list
(if (stringp vc-svn-global-switches)
(cons vc-svn-global-switches flags)
(append vc-svn-global-switches
@@ -487,7 +505,9 @@ and that it passes `vc-svn-global-switches' to it before FLAGS."
;; Old `svn' used name="svn:this_dir", newer use just name="".
(concat "name=\"\\(?:svn:this_dir\\)?\"[\n\t ]*"
"\\(?:[-a-z]+=\"[^\"]*\"[\n\t ]*\\)*?"
- "url=\"\\([^\"]+\\)\"") nil t)
+ "url=\"\\(?1:[^\"]+\\)\""
+ ;; Yet newer ones don't use XML any more.
+ "\\|^\ndir\n[0-9]+\n\\(?1:.*\\)") nil t)
;; This is not a hostname but a URL. This may actually be considered
;; as a feature since it allows vc-svn-stay-local to specify different
;; behavior for different modules on the same server.
@@ -541,7 +561,7 @@ information about FILENAME and return its status."
(unless filename (vc-file-setprop file 'vc-backend 'SVN))
;; Use the last-modified revision, so that searching in vc-print-log
;; output works.
- (vc-file-setprop file 'vc-workfile-version (match-string 3))
+ (vc-file-setprop file 'vc-working-revision (match-string 3))
;; Remember Svn's own status.
(vc-file-setprop file 'vc-svn-status status)
(vc-file-setprop
@@ -555,7 +575,7 @@ information about FILENAME and return its status."
'up-to-date))
((eq status ?A)
;; If the file was actually copied, (match-string 2) is "-".
- (vc-file-setprop file 'vc-workfile-version "0")
+ (vc-file-setprop file 'vc-working-revision "0")
(vc-file-setprop file 'vc-checkout-time 0)
'edited)
((memq status '(?M ?C))
@@ -577,8 +597,8 @@ information about FILENAME and return its status."
(and (string-match "^[a-zA-Z]" tag)
(not (string-match "[^a-z0-9A-Z-_]" tag))))
-(defun vc-svn-valid-version-number-p (tag)
- "Return non-nil if TAG is a valid version number."
+(defun vc-svn-valid-revision-number-p (tag)
+ "Return non-nil if TAG is a valid revision number."
(and (string-match "^[0-9]" tag)
(not (string-match "[^0-9]" tag))))
diff --git a/lisp/vc.el b/lisp/vc.el
index d532ea48ad8..5dc91bf14f8 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -29,8 +29,9 @@
;;; Credits:
;; VC was initially designed and implemented by Eric S. Raymond
-;; <esr@snark.thyrsus.com>. Over the years, many people have
+;; <esr@thyrsus.com> in 1992. Over the years, many other people have
;; contributed substantial amounts of work to VC. These include:
+;;
;; Per Cederqvist <ceder@lysator.liu.se>
;; Paul Eggert <eggert@twinsun.com>
;; Sebastian Kremer <sk@thp.uni-koeln.de>
@@ -41,6 +42,24 @@
;; Andre Spiegel <spiegel@gnu.org>
;; Richard Stallman <rms@gnu.org>
;; Thien-Thi Nguyen <ttn@gnu.org>
+;;
+;; In July 2007 ESR returned and redesigned the mode to cope better
+;; with modern version-control systems that do commits by fileset
+;; rather than per individual file.
+;;
+;; Features in the new version:
+;; * Key commands (vc-next-action = C-x v v, vc-print-log = C-x v l, vc-revert
+;; = C-x v u, vc-rollback = C-x v c, vc-diff = C-x v =, vc-update = C-x v +)
+;; now operate on filesets rather than individual files.
+;; * The fileset for a command is either (a) all marked files in VC-dired
+;; mode, (b) the currently visited file if it's under version control,
+;; or (c) the current directory if the visited buffer is not under
+;; version control and a wildcarding-enable flag has been set.
+;;
+;; If you maintain a client of the mode or customize it in your .emacs,
+;; note that some backend functions which formerly took single file arguments
+;; now take a list of files. These include: register, checkin, print-log,
+;; rollback, and diff.
;;; Commentary:
@@ -91,7 +110,7 @@
;; VC keeps some per-file information in the form of properties (see
;; vc-file-set/getprop in vc-hooks.el). The backend-specific functions
;; do not generally need to be aware of these properties. For example,
-;; `vc-sys-workfile-version' should compute the workfile version and
+;; `vc-sys-working-revision' should compute the working revision and
;; return it; it should not look it up in the property, and it needn't
;; store it there either. However, if a backend-specific function does
;; store a value in a property, that value takes precedence over any
@@ -102,6 +121,15 @@
;; with `vc-sys-'. Some of the functions are mandatory (marked with a
;; `*'), others are optional (`-').
;;
+;; BACKEND PROPERTIES
+;;
+;; * revision-granularity
+;;
+;; Takes no arguments. Returns either 'file or 'repository. Backends
+;; that return 'file have per-file revision numbering; backends
+;; that return 'repository have per-repository revision numbering,
+;; so a revision level implicitly identifies a changeset
+;;
;; STATE-QUERYING FUNCTIONS
;;
;; * registered (file)
@@ -136,16 +164,19 @@
;; anything, but rather store the files' states into the corresponding
;; `vc-state' properties.
;;
-;; * workfile-version (file)
+;; * working-revision (file)
;;
-;; Return the current workfile version of FILE.
+;; Return the working revision of FILE. This is the revision fetched
+;; by the last checkout or upate, not necessarily the same thing as the
+;; head or tip revision. Should return "0" for a file added but not yet
+;; committed.
;;
;; - latest-on-branch-p (file)
;;
-;; Return non-nil if the current workfile version of FILE is the latest
-;; on its branch. The default implementation always returns t, which
-;; means that working with non-current versions is not supported by
-;; default.
+;; Return non-nil if the working revision of FILE is the latest revision
+;; on its branch (many VCSes call this the 'tip' or 'head' revision).
+;; The default implementation always returns t, which means that
+;; working with non-current revisions is not supported by default.
;;
;; * checkout-model (file)
;;
@@ -154,19 +185,23 @@
;;
;; - workfile-unchanged-p (file)
;;
-;; Return non-nil if FILE is unchanged from its current workfile
-;; version. This function should do a brief comparison of FILE's
-;; contents with those of the master version. If the backend does not
-;; have such a brief-comparison feature, the default implementation of
-;; this function can be used, which delegates to a full
-;; vc-BACKEND-diff. (Note that vc-BACKEND-diff must not run
-;; asynchronously in this case, see variable `vc-disable-async-diff'.)
+;; Return non-nil if FILE is unchanged from the working revision.
+;; This function should do a brief comparison of FILE's contents
+;; with those of the repository master of the working revision. If
+;; the backend does not have such a brief-comparison feature, the
+;; default implementation of this function can be used, which
+;; delegates to a full vc-BACKEND-diff. (Note that vc-BACKEND-diff
+;; must not run asynchronously in this case, see variable
+;; `vc-disable-async-diff'.)
;;
;; - mode-line-string (file)
;;
-;; If provided, this function should return the VC-specific mode line
-;; string for FILE. The default implementation deals well with all
-;; states that `vc-state' can return.
+;; If provided, this function should return the VC-specific mode
+;; line string for FILE. The returned string should have a
+;; `help-echo' property which is the text to be displayed as a
+;; tooltip when the mouse hovers over the VC entry on the mode-line.
+;; The default implementation deals well with all states that
+;; `vc-state' can return.
;;
;; - dired-state-info (file)
;;
@@ -176,18 +211,26 @@
;;
;; STATE-CHANGING FUNCTIONS
;;
-;; * register (file &optional rev comment)
+;; * create-repo (backend)
+;;
+;; Create an empty repository in the current directory and initialize
+;; it so VC mode can add files to it. For file-oriented systems, this
+;; need do no more than create a subdirectory with the right name.
;;
-;; Register FILE in this backend. Optionally, an initial revision REV
-;; and an initial description of the file, COMMENT, may be specified.
+;; * register (files &optional rev comment)
+;;
+;; Register FILES in this backend. Optionally, an initial revision REV
+;; and an initial description of the file, COMMENT, may be specified,
+;; but it is not guaranteed that the backend will do anything with this.
;; The implementation should pass the value of vc-register-switches
-;; to the backend command.
+;; to the backend command. (Note: in older versions of VC, this
+;; command took a single file argument and not a list.)
;;
-;; - init-version (file)
+;; - init-revision (file)
;;
-;; The initial version to use when registering FILE if one is not
+;; The initial revision to use when registering FILE if one is not
;; specified by the user. If not provided, the variable
-;; vc-default-init-version is used instead.
+;; vc-default-init-revision is used instead.
;;
;; - responsible-p (file)
;;
@@ -215,14 +258,16 @@
;; Unregister FILE from this backend. This is only needed if this
;; backend may be used as a "more local" backend for temporary editing.
;;
-;; * checkin (file rev comment)
+;; * checkin (files rev comment)
;;
-;; Commit changes in FILE to this backend. If REV is non-nil, that
-;; should become the new revision number. COMMENT is used as a
-;; check-in comment. The implementation should pass the value of
-;; vc-checkin-switches to the backend command.
+;; Commit changes in FILES to this backend. If REV is non-nil, that
+;; should become the new revision number (not all backends do
+;; anything with it). COMMENT is used as a check-in comment. The
+;; implementation should pass the value of vc-checkin-switches to
+;; the backend command. (Note: in older versions of VC, this
+;; command took a single file argument and not a list.)
;;
-;; * find-version (file rev buffer)
+;; * find-revision (file rev buffer)
;;
;; Fetch revision REV of file FILE and put it into BUFFER.
;; If REV is the empty string, fetch the head of the trunk.
@@ -234,7 +279,7 @@
;; Check out revision REV of FILE into the working area. If EDITABLE
;; is non-nil, FILE should be writable by the user and if locking is
;; used for FILE, a lock should also be set. If REV is non-nil, that
-;; is the revision to check out (default is current workfile version).
+;; is the revision to check out (default is the working revision).
;; If REV is t, that means to check out the head of the current branch;
;; if it is the empty string, check out the head of the trunk.
;; The implementation should pass the value of vc-checkout-switches
@@ -242,18 +287,19 @@
;;
;; * revert (file &optional contents-done)
;;
-;; Revert FILE back to the current workfile version. If optional
+;; Revert FILE back to the working revision. If optional
;; arg CONTENTS-DONE is non-nil, then the contents of FILE have
;; already been reverted from a version backup, and this function
;; only needs to update the status of FILE within the backend.
;;
-;; - cancel-version (file editable)
+;; - rollback (files)
;;
-;; Cancel the current workfile version of FILE, i.e. remove it from the
-;; master. EDITABLE non-nil means that FILE should be writable
-;; afterwards, and if locking is used for FILE, then a lock should also
-;; be set. If this function is not provided, trying to cancel a
-;; version is caught as an error.
+;; Remove the tip revision of each of FILES from the repository. If
+;; this function is not provided, trying to cancel a revision is
+;; caught as an error. (Most backends don't provide it.) (Also
+;; note that older versions of this backend command were called
+;; 'cancel-version' and took a single file arg, not a list of
+;; files.)
;;
;; - merge (file rev1 rev2)
;;
@@ -263,19 +309,20 @@
;;
;; Merge recent changes from the current branch into FILE.
;;
-;; - steal-lock (file &optional version)
+;; - steal-lock (file &optional revision)
;;
-;; Steal any lock on the current workfile version of FILE, or on
-;; VERSION if that is provided. This function is only needed if
-;; locking is used for files under this backend, and if files can
-;; indeed be locked by other users.
+;; Steal any lock on the working revision of FILE, or on REVISION if
+;; that is provided. This function is only needed if locking is
+;; used for files under this backend, and if files can indeed be
+;; locked by other users.
;;
;; HISTORY FUNCTIONS
;;
-;; * print-log (file &optional buffer)
+;; * print-log (files &optional buffer)
;;
-;; Insert the revision log of FILE into BUFFER, or the *vc* buffer
-;; if BUFFER is nil.
+;; Insert the revision log for FILES into BUFFER, or the *vc* buffer
+;; if BUFFER is nil. (Note: older versions of this function expected
+;; only a single file argument.)
;;
;; - log-view-mode ()
;;
@@ -283,16 +330,15 @@
;; `log-view-mode' and is expected to be changed (if at all) to a derived
;; mode of `log-view-mode'.
;;
-;; - show-log-entry (version)
+;; - show-log-entry (revision)
;;
-;; If provided, search the log entry for VERSION in the current buffer,
+;; If provided, search the log entry for REVISION in the current buffer,
;; and make sure it is displayed in the buffer's window. The default
;; implementation of this function works for RCS-style logs.
;;
;; - wash-log (file)
;;
-;; Remove all non-comment information from the output of print-log. The
-;; default implementation of this function works for RCS-style logs.
+;; Remove all non-comment information from the output of print-log.
;;
;; - logentry-check ()
;;
@@ -316,34 +362,27 @@
;; default implementation runs rcs2log, which handles RCS- and
;; CVS-style logs.
;;
-;; * diff (file &optional rev1 rev2 buffer)
+;; * diff (files &optional rev1 rev2 buffer)
;;
;; Insert the diff for FILE into BUFFER, or the *vc-diff* buffer if
;; BUFFER is nil. If REV1 and REV2 are non-nil, report differences
-;; from REV1 to REV2. If REV1 is nil, use the current workfile
-;; version (as found in the repository) as the older version; if
-;; REV2 is nil, use the current workfile contents as the newer
-;; version. This function should pass the value of (vc-switches
-;; BACKEND 'diff) to the backend command. It should return a status
-;; of either 0 (no differences found), or 1 (either non-empty diff
-;; or the diff is run asynchronously).
+;; from REV1 to REV2. If REV1 is nil, use the working revision (as
+;; found in the repository) as the older revision; if REV2 is nil,
+;; use the current working-copy contents as the newer revision. This
+;; function should pass the value of (vc-switches BACKEND 'diff) to
+;; the backend command. It should return a status of either 0 (no
+;; differences found), or 1 (either non-empty diff or the diff is
+;; run asynchronously).
;;
-;; - revision-completion-table (file)
+;; - revision-completion-table (files)
;;
-;; Return a completion table for existing revisions of FILE.
+;; Return a completion table for existing revisions of FILES.
;; The default is to not use any completion table.
;;
-;; - diff-tree (dir &optional rev1 rev2)
-;;
-;; Insert the diff for all files at and below DIR into the *vc-diff*
-;; buffer. The meaning of REV1 and REV2 is the same as for
-;; vc-BACKEND-diff. The default implementation does an explicit tree
-;; walk, calling vc-BACKEND-diff for each individual file.
-;;
;; - annotate-command (file buf &optional rev)
;;
;; If this function is provided, it should produce an annotated display
-;; of FILE in BUF, relative to version REV. Annotation means each line
+;; of FILE in BUF, relative to revision REV. Annotation means each line
;; of FILE displayed is prefixed with version information associated with
;; its addition (deleted lines leave no history) and that the text of the
;; file is fontified according to age.
@@ -366,7 +405,7 @@
;;
;; Only required if `annotate-command' is defined for the backend,
;; AND you'd like the current time considered to be anything besides
-;; (vs-annotate-convert-time (current-time)) -- i.e. the current
+;; (vc-annotate-convert-time (current-time)) -- i.e. the current
;; time with hours, minutes, and seconds included. Probably safe to
;; ignore. Return the current-time, in units of fractional days.
;;
@@ -391,7 +430,7 @@
;;
;; - assign-name (file name)
;;
-;; Give name NAME to the current version of FILE, assuming it is
+;; Give name NAME to the working revision of FILE, assuming it is
;; up-to-date. Only used by the default version of `create-snapshot'.
;;
;; - retrieve-snapshot (dir name update)
@@ -401,13 +440,13 @@
;; snapshot that are currently visited. The default implementation
;; does a sanity check whether there aren't any uncommitted changes at
;; or below DIR, and then performs a tree walk, using the `checkout'
-;; function to retrieve the corresponding versions.
+;; function to retrieve the corresponding revisions.
;;
;; MISCELLANEOUS
;;
;; - make-version-backups-p (file)
;;
-;; Return non-nil if unmodified repository versions of FILE should be
+;; Return non-nil if unmodified repository revisions of FILE should be
;; backed up locally. If this is done, VC can perform `diff' and
;; `revert' operations itself, without calling the backend system. The
;; default implementation always returns nil.
@@ -420,15 +459,15 @@
;; This function is used in `vc-stay-local-p' which backends can use
;; for their convenience.
;;
-;; - previous-version (file rev)
+;; - previous-revision (file rev)
;;
-;; Return the version number that precedes REV for FILE, or nil if no such
-;; version exists.
+;; Return the revision number that precedes REV for FILE, or nil if no such
+;; revision exists.
;;
-;; - next-version (file rev)
+;; - next-revision (file rev)
;;
-;; Return the version number that follows REV for FILE, or nil if no such
-;; version exists.
+;; Return the revision number that follows REV for FILE, or nil if no such
+;; revision exists.
;;
;; - check-headers ()
;;
@@ -459,7 +498,7 @@
;;
;; Operation called in current buffer when opening a file. This can
;; be used by the backend to setup some local variables it might need.
-;
+;;
;; - find-file-not-found-hook ()
;;
;; Operation called in current buffer when opening a non-existing file.
@@ -513,8 +552,8 @@ preserve the setting."
:type 'boolean
:group 'vc)
-(defcustom vc-default-init-version "1.1"
- "A string used as the default version number when a new file is registered.
+(defcustom vc-default-init-revision "1.1"
+ "A string used as the default revision number when a new file is registered.
This can be overridden by giving a prefix argument to \\[vc-register]. This
can also be overridden by a particular VC backend."
:type 'string
@@ -569,13 +608,13 @@ These are passed to the checkin program by \\[vc-register]."
:version "20.3")
(defcustom vc-dired-terse-display t
- "If non-nil, show only locked files in VC Dired."
+ "If non-nil, show only locked or locally modified files in VC Dired."
:type 'boolean
:group 'vc
:version "20.3")
-(defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS" "MCVS" ".svn"
- ".git" ".hg" "{arch}")
+(defcustom vc-directory-exclusion-list '("SCCS" "RCS" "CVS" "MCVS" ".svn"
+ ".git" ".hg" ".bzr" "{arch}")
"List of directory names to be ignored when walking directory trees."
:type '(repeat string)
:group 'vc)
@@ -603,7 +642,7 @@ to use -L and sets this variable to remember whether it worked."
:group 'vc)
(defcustom vc-allow-async-revert nil
- "Specifies whether the diff during \\[vc-revert-buffer] may be asynchronous.
+ "Specifies whether the diff during \\[vc-revert] may be asynchronous.
Enabling this option means that you can confirm a revert operation even
if the local changes in the file have not been found and displayed yet."
:type '(choice (const :tag "No" nil)
@@ -630,7 +669,7 @@ See `run-hooks'."
;;;###autoload
(defcustom vc-checkin-hook nil
- "Normal hook (list of functions) run after a checkin is done.
+ "Normal hook (list of functions) run after commit or file checkin.
See also `log-edit-done-hook'."
:type 'hook
:options '(log-edit-comment-to-change-log)
@@ -638,7 +677,7 @@ See also `log-edit-done-hook'."
;;;###autoload
(defcustom vc-before-checkin-hook nil
- "Normal hook (list of functions) run before a file is checked in.
+ "Normal hook (list of functions) run before a commit or a file checkin.
See `run-hooks'."
:type 'hook
:group 'vc)
@@ -732,9 +771,9 @@ List of factors, used to expand/compress the time scale. See `vc-annotate'."
(define-key m "D" 'vc-annotate-show-diff-revision-at-line)
(define-key m "J" 'vc-annotate-revision-at-line)
(define-key m "L" 'vc-annotate-show-log-revision-at-line)
- (define-key m "N" 'vc-annotate-next-version)
- (define-key m "P" 'vc-annotate-prev-version)
- (define-key m "W" 'vc-annotate-workfile-version)
+ (define-key m "N" 'vc-annotate-next-revision)
+ (define-key m "P" 'vc-annotate-prev-revision)
+ (define-key m "W" 'vc-annotate-working-revision)
m)
"Local keymap used for VC-Annotate mode.")
@@ -791,65 +830,12 @@ and that its contents match what the master file says."
Backends that offer asynchronous diffs should respect this variable
in their implementation of vc-BACKEND-diff.")
-(defvar vc-log-file)
-(defvar vc-log-version)
+(defvar vc-log-fileset)
+(defvar vc-log-revision)
(defvar vc-dired-mode nil)
(make-variable-buffer-local 'vc-dired-mode)
-;; functions that operate on RCS revision numbers. This code should
-;; also be moved into the backends. It stays for now, however, since
-;; it is used in code below.
-;;;###autoload
-(defun vc-trunk-p (rev)
- "Return t if REV is a revision on the trunk."
- (not (eq nil (string-match "\\`[0-9]+\\.[0-9]+\\'" rev))))
-
-(defun vc-branch-p (rev)
- "Return t if REV is a branch revision."
- (not (eq nil (string-match "\\`[0-9]+\\(\\.[0-9]+\\.[0-9]+\\)*\\'" rev))))
-
-;;;###autoload
-(defun vc-branch-part (rev)
- "Return the branch part of a revision number REV."
- (let ((index (string-match "\\.[0-9]+\\'" rev)))
- (if index
- (substring rev 0 index))))
-
-(defun vc-minor-part (rev)
- "Return the minor version number of a revision number REV."
- (string-match "[0-9]+\\'" rev)
- (substring rev (match-beginning 0) (match-end 0)))
-
-(defun vc-default-previous-version (backend file rev)
- "Return the version number immediately preceding REV for FILE,
-or nil if there is no previous version. This default
-implementation works for MAJOR.MINOR-style version numbers as
-used by RCS and CVS."
- (let ((branch (vc-branch-part rev))
- (minor-num (string-to-number (vc-minor-part rev))))
- (when branch
- (if (> minor-num 1)
- ;; version does probably not start a branch or release
- (concat branch "." (number-to-string (1- minor-num)))
- (if (vc-trunk-p rev)
- ;; we are at the beginning of the trunk --
- ;; don't know anything to return here
- nil
- ;; we are at the beginning of a branch --
- ;; return version of starting point
- (vc-branch-part branch))))))
-
-(defun vc-default-next-version (backend file rev)
- "Return the version number immediately following REV for FILE,
-or nil if there is no next version. This default implementation
-works for MAJOR.MINOR-style version numbers as used by RCS
-and CVS."
- (when (not (string= rev (vc-workfile-version file)))
- (let ((branch (vc-branch-part rev))
- (minor-num (string-to-number (vc-minor-part rev))))
- (concat branch "." (number-to-string (1+ minor-num))))))
-
;; File property caching
(defun vc-clear-context ()
@@ -857,35 +843,30 @@ and CVS."
(interactive)
(fillarray vc-file-prop-obarray 0))
-(defmacro with-vc-properties (file form settings)
- "Execute FORM, then maybe set per-file properties for FILE.
+(defmacro with-vc-properties (files form settings)
+ "Execute FORM, then maybe set per-file properties for FILES.
SETTINGS is an association list of property/value pairs. After
executing FORM, set those properties from SETTINGS that have not yet
been updated to their corresponding values."
(declare (debug t))
`(let ((vc-touched-properties (list t)))
,form
- (mapcar (lambda (setting)
- (let ((property (car setting)))
- (unless (memq property vc-touched-properties)
- (put (intern ,file vc-file-prop-obarray)
- property (cdr setting)))))
- ,settings)))
-
-;; Random helper functions
-
-(defsubst vc-editable-p (file)
- "Return non-nil if FILE can be edited."
- (or (eq (vc-checkout-model file) 'implicit)
- (memq (vc-state file) '(edited needs-merge))))
+ (dolist (file ,files)
+ (dolist (setting ,settings)
+ (let ((property (car setting)))
+ (unless (memq property vc-touched-properties)
+ (put (intern file vc-file-prop-obarray)
+ property (cdr setting))))))))
;; Two macros for elisp programming
+
;;;###autoload
(defmacro with-vc-file (file comment &rest body)
"Check out a writable copy of FILE if necessary, then execute BODY.
Check in FILE with COMMENT (a string) after BODY has been executed.
FILE is passed through `expand-file-name'; BODY executed within
-`save-excursion'. If FILE is not under version control, or locked by
+`save-excursion'. If FILE is not under version control, or you are
+using a locking version-control system and the file is locked by
somebody else, signal error."
(declare (debug t) (indent 2))
(let ((filevar (make-symbol "file")))
@@ -899,7 +880,7 @@ somebody else, signal error."
(vc-checkout ,filevar t))))
(save-excursion
,@body)
- (vc-checkin ,filevar nil ,comment))))
+ (vc-checkin (list ,filevar) nil ,comment))))
;;;###autoload
(defmacro edit-vc-file (file comment &rest body)
@@ -916,16 +897,7 @@ However, before executing BODY, find FILE, and after BODY, save buffer."
,@body
(save-buffer)))))
-(defun vc-ensure-vc-buffer ()
- "Make sure that the current buffer visits a version-controlled file."
- (if vc-dired-mode
- (set-buffer (find-file-noselect (dired-get-filename)))
- (while vc-parent-buffer
- (set-buffer vc-parent-buffer))
- (if (not buffer-file-name)
- (error "Buffer %s is not associated with a file" (buffer-name))
- (if (not (vc-backend buffer-file-name))
- (error "File %s is not under version control" buffer-file-name)))))
+;; Common command execution logic to be used by backends
(defun vc-process-filter (p s)
"An alternative output filter for async process P.
@@ -955,6 +927,33 @@ BUF defaults to \"*vc*\", can be a string and will be created if necessary."
(inhibit-read-only t))
(erase-buffer))))
+(defvar vc-sentinel-movepoint) ;Dynamically scoped.
+
+(defun vc-process-sentinel (p s)
+ (let ((previous (process-get p 'vc-previous-sentinel)))
+ (if previous (funcall previous p s))
+ (with-current-buffer (process-buffer p)
+ (let (vc-sentinel-movepoint)
+ ;; Normally, we want async code such as sentinels to not move point.
+ (save-excursion
+ (goto-char (process-mark p))
+ (let ((cmds (process-get p 'vc-sentinel-commands)))
+ (process-put p 'vc-postprocess nil)
+ (dolist (cmd cmds)
+ ;; Each sentinel may move point and the next one should be run
+ ;; at that new point. We could get the same result by having
+ ;; each sentinel read&set process-mark, but since `cmd' needs
+ ;; to work both for async and sync processes, this would be
+ ;; difficult to achieve.
+ (vc-exec-after cmd))))
+ ;; But sometimes the sentinels really want to move point.
+ (if vc-sentinel-movepoint
+ (let ((win (get-buffer-window (current-buffer) 0)))
+ (if (not win)
+ (goto-char vc-sentinel-movepoint)
+ (with-selected-window win
+ (goto-char vc-sentinel-movepoint)))))))))
+
(defun vc-exec-after (code)
"Eval CODE when the current buffer's process is done.
If the current buffer has no process, just evaluate CODE.
@@ -967,30 +966,34 @@ Else, add CODE to the process' sentinel."
;; lost. Terminated processes get deleted automatically
;; anyway. -- cyd
((or (null proc) (eq (process-status proc) 'exit))
+ ;; Make sure we've read the process's output before going further.
+ (if proc (accept-process-output proc))
(eval code))
;; If a process is running, add CODE to the sentinel
((eq (process-status proc) 'run)
- (let ((sentinel (process-sentinel proc)))
- (set-process-sentinel proc
- `(lambda (p s)
- (with-current-buffer ',(current-buffer)
- (goto-char (process-mark p))
- ,@(append (cdr (cdr (cdr ;strip off `with-current-buffer buf
- ; (goto-char...)'
- (car (cdr (cdr ;strip off `lambda (p s)'
- sentinel))))))
- (list `(vc-exec-after ',code))))))))
+ (let ((previous (process-sentinel proc)))
+ (unless (eq previous 'vc-process-sentinel)
+ (process-put proc 'vc-previous-sentinel previous))
+ (set-process-sentinel proc 'vc-process-sentinel))
+ (process-put proc 'vc-sentinel-commands
+ (cons code (process-get proc 'vc-sentinel-commands))))
(t (error "Unexpected process state"))))
nil)
(defvar vc-post-command-functions nil
"Hook run at the end of `vc-do-command'.
Each function is called inside the buffer in which the command was run
-and is passed 3 arguments: the COMMAND, the FILE and the FLAGS.")
+and is passed 3 arguments: the COMMAND, the FILES and the FLAGS.")
(defvar w32-quote-process-args)
+
+(defun vc-delistify (filelist)
+ "Smash a FILELIST into a file list string suitable for info messages."
+ ;; FIXME what about file names with spaces?
+ (if (not filelist) "." (mapconcat 'identity filelist " ")))
+
;;;###autoload
-(defun vc-do-command (buffer okstatus command file &rest flags)
+(defun vc-do-command (buffer okstatus command file-or-list &rest flags)
"Execute a VC command, notifying user and checking for errors.
Output from COMMAND goes to BUFFER, or *vc* if BUFFER is nil or the
current buffer if BUFFER is t. If the destination buffer is not
@@ -998,65 +1001,83 @@ already current, set it up properly and erase it. The command is
considered successful if its exit status does not exceed OKSTATUS (if
OKSTATUS is nil, that means to ignore error status, if it is `async', that
means not to wait for termination of the subprocess; if it is t it means to
-ignore all execution errors). FILE is the
-name of the working file (may also be nil, to execute commands that
-don't expect a file name). If an optional list of FLAGS is present,
+ignore all execution errors). FILE-OR-LIST is the name of a working file;
+it may be a list of files or be nil (to execute commands that don't expect
+a file name or set of files). If an optional list of FLAGS is present,
that is inserted into the command line before the filename."
- (and file (setq file (expand-file-name file)))
- (if vc-command-messages
- (message "Running %s on %s..." command file))
- (save-current-buffer
- (unless (or (eq buffer t)
- (and (stringp buffer)
- (string= (buffer-name) buffer))
- (eq buffer (current-buffer)))
- (vc-setup-buffer buffer))
- (let ((squeezed (remq nil flags))
- (inhibit-read-only t)
- (status 0))
- (when file
- ;; FIXME: file-relative-name can return a bogus result because
- ;; it doesn't look at the actual file-system to see if symlinks
- ;; come into play.
- (setq squeezed (append squeezed (list (file-relative-name file)))))
- (let ((exec-path (append vc-path exec-path))
- ;; Add vc-path to PATH for the execution of this command.
- (process-environment
- (cons (concat "PATH=" (getenv "PATH")
- path-separator
- (mapconcat 'identity vc-path path-separator))
- process-environment))
- (w32-quote-process-args t))
- (if (and (eq okstatus 'async) (file-remote-p default-directory))
- ;; start-process does not support remote execution
- (setq okstatus nil))
- (if (eq okstatus 'async)
- (let ((proc
- (let ((process-connection-type nil))
- (apply 'start-process command (current-buffer) command
- squeezed))))
- (unless (active-minibuffer-window)
- (message "Running %s in the background..." command))
- ;;(set-process-sentinel proc (lambda (p msg) (delete-process p)))
- (set-process-filter proc 'vc-process-filter)
- (vc-exec-after
- `(unless (active-minibuffer-window)
- (message "Running %s in the background... done" ',command))))
- (let ((buffer-undo-list t))
- (setq status (apply 'process-file command nil t nil squeezed)))
- (when (and (not (eq t okstatus))
- (or (not (integerp status))
- (and okstatus (< okstatus status))))
- (pop-to-buffer (current-buffer))
- (goto-char (point-min))
- (shrink-window-if-larger-than-buffer)
- (error "Running %s...FAILED (%s)" command
- (if (integerp status) (format "status %d" status) status))))
- (if vc-command-messages
- (message "Running %s...OK" command)))
- (vc-exec-after
- `(run-hook-with-args 'vc-post-command-functions ',command ',file ',flags))
- status)))
+ ;; FIXME: file-relative-name can return a bogus result because
+ ;; it doesn't look at the actual file-system to see if symlinks
+ ;; come into play.
+ (let* ((files
+ (mapcar (lambda (f) (file-relative-name (expand-file-name f)))
+ (if (listp file-or-list) file-or-list (list file-or-list))))
+ (full-command
+ ;; What we're doing here is preparing a version of the command
+ ;; for display in a debug-progess message. If it's fewer than
+ ;; 20 characters display the entire command (without trailing
+ ;; newline). Otherwise display the first 20 followed by an ellipsis.
+ (concat (if (string= (substring command -1) "\n")
+ (substring command 0 -1)
+ command)
+ " "
+ (vc-delistify (mapcar (lambda (s) (if (> (length s) 20) (concat (substring s 0 2) "...") s)) flags))
+ " " (vc-delistify files))))
+ (save-current-buffer
+ (unless (or (eq buffer t)
+ (and (stringp buffer)
+ (string= (buffer-name) buffer))
+ (eq buffer (current-buffer)))
+ (vc-setup-buffer buffer))
+ (let ((squeezed (remq nil flags))
+ (inhibit-read-only t)
+ (status 0))
+ (when files
+ (setq squeezed (nconc squeezed files)))
+ (let ((exec-path (append vc-path exec-path))
+ ;; Add vc-path to PATH for the execution of this command.
+ (process-environment
+ (cons (concat "PATH=" (getenv "PATH")
+ path-separator
+ (mapconcat 'identity vc-path path-separator))
+ process-environment))
+ (w32-quote-process-args t))
+ (if (and (eq okstatus 'async) (file-remote-p default-directory))
+ ;; start-process does not support remote execution
+ (setq okstatus nil))
+ (if (eq okstatus 'async)
+ ;; Run asynchronously
+ (let ((proc
+ (let ((process-connection-type nil))
+ (apply 'start-process command (current-buffer) command
+ squeezed))))
+ (if vc-command-messages
+ (message "Running %s in background..." full-command))
+ ;;(set-process-sentinel proc (lambda (p msg) (delete-process p)))
+ (set-process-filter proc 'vc-process-filter)
+ (vc-exec-after
+ `(if vc-command-messages
+ (message "Running %s in background... done" ',full-command))))
+ ;; Run synchrously
+ (if vc-command-messages
+ (message "Running %s in foreground..." full-command))
+ (let ((buffer-undo-list t))
+ (setq status (apply 'process-file command nil t nil squeezed)))
+ (when (and (not (eq t okstatus))
+ (or (not (integerp status))
+ (and okstatus (< okstatus status))))
+ (pop-to-buffer (current-buffer))
+ (goto-char (point-min))
+ (shrink-window-if-larger-than-buffer)
+ (error "Running %s...FAILED (%s)" full-command
+ (if (integerp status) (format "status %d" status) status))))
+ ;; We're done. But don't emit a status message if running
+ ;; asychronously, it would just mislead.
+ (if (and vc-command-messages (not (eq okstatus 'async)))
+ (message "Running %s...OK = %d" full-command status)))
+ (vc-exec-after
+ `(run-hook-with-args 'vc-post-command-functions
+ ',command ',file-or-list ',flags))
+ status))))
(defun vc-position-context (posn)
"Save a bit of the text around POSN in the current buffer.
@@ -1140,7 +1161,8 @@ Used by `vc-restore-buffer-context' to later restore the context."
CONTEXT is that which `vc-buffer-context' returns."
(let ((point-context (nth 0 context))
(mark-context (nth 1 context))
- (reparse (nth 2 context)))
+ ;; (reparse (nth 2 context))
+ )
;; The new compilation code does not use compilation-error-list any
;; more, so the code below is now ineffective and might as well
;; be disabled. -- Stef
@@ -1172,9 +1194,124 @@ CONTEXT is that which `vc-buffer-context' returns."
(let ((new-mark (vc-find-position-by-context mark-context)))
(if new-mark (set-mark new-mark))))))
-(defun vc-revert-buffer1 (&optional arg no-confirm)
+;;; Code for deducing what fileset and backend to assume
+
+(defun vc-responsible-backend (file &optional register)
+ "Return the name of a backend system that is responsible for FILE.
+The optional argument REGISTER means that a backend suitable for
+registration should be found.
+
+If REGISTER is nil, then if FILE is already registered, return the
+backend of FILE. If FILE is not registered, or a directory, then the
+first backend in `vc-handled-backends' that declares itself
+responsible for FILE is returned. If no backend declares itself
+responsible, return the first backend.
+
+If REGISTER is non-nil, return the first responsible backend under
+which FILE is not yet registered. If there is no such backend, return
+the first backend under which FILE is not yet registered, but could
+be registered."
+ (if (not vc-handled-backends)
+ (error "No handled backends"))
+ (or (and (not (file-directory-p file)) (not register) (vc-backend file))
+ (catch 'found
+ ;; First try: find a responsible backend. If this is for registration,
+ ;; it must be a backend under which FILE is not yet registered.
+ (dolist (backend vc-handled-backends)
+ (and (or (not register)
+ (not (vc-call-backend backend 'registered file)))
+ (vc-call-backend backend 'responsible-p file)
+ (throw 'found backend)))
+ ;; no responsible backend
+ (if (not register)
+ ;; if this is not for registration, the first backend must do
+ (car vc-handled-backends)
+ ;; for registration, we need to find a new backend that
+ ;; could register FILE
+ (dolist (backend vc-handled-backends)
+ (and (not (vc-call-backend backend 'registered file))
+ (vc-call-backend backend 'could-register file)
+ (throw 'found backend)))
+ (error "No backend that could register")))))
+
+(defun vc-expand-dirs (file-or-dir-list)
+ "Expands directories in a file list specification.
+Only files already under version control are noticed."
+ ;; FIXME: Kill this function.
+ (let ((flattened '()))
+ (dolist (node file-or-dir-list)
+ (vc-file-tree-walk
+ node (lambda (f) (if (vc-backend f) (push f flattened)))))
+ (nreverse flattened)))
+
+(defun vc-deduce-fileset (&optional allow-directory-wildcard allow-unregistered)
+ "Deduce a set of files and a backend to which to apply an operation.
+
+If we're in VC-dired mode, the fileset is the list of marked files.
+Otherwise, if we're looking at a buffer visiting a version-controlled file,
+the fileset is a singleton containing this file.
+If neither of these things is true, but ALLOW-DIRECTORY-WILDCARD is on
+and we're in a dired buffer, select the current directory.
+If none of these conditions is met, but ALLOW_UNREGISTERED is in and the
+visited file is not registered, return a singletin fileset containing it.
+Otherwise, throw an error."
+ (cond (vc-dired-mode
+ (let ((marked (dired-map-over-marks (dired-get-filename) nil)))
+ (unless marked
+ (error "No files have been selected."))
+ ;; All members of the fileset must have the same backend
+ (let ((firstbackend (vc-backend (car marked))))
+ (dolist (f (cdr marked))
+ (unless (eq (vc-backend f) firstbackend)
+ (error "All members of a fileset must be under the same version-control system."))))
+ marked))
+ ((vc-backend buffer-file-name)
+ (list buffer-file-name))
+ ((and vc-parent-buffer (buffer-file-name vc-parent-buffer))
+ (progn
+ (set-buffer vc-parent-buffer)
+ (vc-deduce-fileset)))
+ ;; This is guarded by an enabling arg so users won't potentially
+ ;; shoot themselves in the foot by modifying a fileset they can't
+ ;; verify by eyeball. Allow it for nondestructive commands like
+ ;; making diffs, or possibly for destructive ones that have
+ ;; confirmation prompts.
+ ((and allow-directory-wildcard
+ ;; I think this is a misfeature. For now, I'll leave it in, but
+ ;; I'll disable it anywhere else than in dired buffers. --Stef
+ (and (derived-mode-p 'dired-mode)
+ (equal buffer-file-name nil)
+ (equal list-buffers-directory default-directory)))
+ (progn
+ (message "All version-controlled files below %s selected."
+ default-directory)
+ (list default-directory)))
+ ((and allow-unregistered (not (vc-registered buffer-file-name)))
+ (list buffer-file-name))
+ (t (error "No fileset is available here."))))
+
+(defun vc-ensure-vc-buffer ()
+ "Make sure that the current buffer visits a version-controlled file."
+ (if vc-dired-mode
+ (set-buffer (find-file-noselect (dired-get-filename)))
+ (while vc-parent-buffer
+ (set-buffer vc-parent-buffer))
+ (if (not buffer-file-name)
+ (error "Buffer %s is not associated with a file" (buffer-name))
+ (if (not (vc-backend buffer-file-name))
+ (error "File %s is not under version control" buffer-file-name)))))
+
+;;; Support for the C-x v v command. This is where all the single-file-oriented
+;;; code from before the fileset rewrite lives.
+
+(defsubst vc-editable-p (file)
+ "Return non-nil if FILE can be edited."
+ (or (eq (vc-checkout-model file) 'implicit)
+ (memq (vc-state file) '(edited needs-merge))))
+
+(defun vc-revert-buffer-internal (&optional arg no-confirm)
"Revert buffer, keeping point and mark where user expects them.
-Try to be clever in the face of changes due to expanded version control
+Try to be clever in the face of changes due to expanded version-control
key words. This is important for typeahead to work as expected.
ARG and NO-CONFIRM are passed on to `revert-buffer'."
(interactive "P")
@@ -1190,7 +1327,6 @@ ARG and NO-CONFIRM are passed on to `revert-buffer'."
(revert-buffer arg no-confirm t))
(vc-restore-buffer-context context)))
-
(defun vc-buffer-sync (&optional not-urgent)
"Make sure the current buffer and its working file are in sync.
NOT-URGENT means it is ok to continue if the user says not to save."
@@ -1201,135 +1337,171 @@ NOT-URGENT means it is ok to continue if the user says not to save."
(unless not-urgent
(error "Aborted")))))
-(defun vc-default-latest-on-branch-p (backend file)
- "Return non-nil if FILE is the latest on its branch.
-This default implementation always returns non-nil, which means that
-editing non-current versions is not supported by default."
- t)
+(defvar vc-dired-window-configuration)
-(defun vc-next-action-on-file (file verbose &optional comment)
- "Do The Right Thing for a given FILE under version control.
-If COMMENT is specified, it will be used as an admin or checkin comment.
-If VERBOSE is non-nil, query the user rather than using default parameters."
- (let ((visited (get-file-buffer file))
- state version)
- (when visited
- (if vc-dired-mode
- (switch-to-buffer-other-window visited)
- (set-buffer visited))
- ;; Check relation of buffer and file, and make sure
- ;; user knows what he's doing. First, finding the file
- ;; will check whether the file on disk is newer.
- ;; Ignore buffer-read-only during this test, and
- ;; preserve find-file-literally.
- (let ((buffer-read-only (not (file-writable-p file))))
- (find-file-noselect file nil find-file-literally))
- (if (not (verify-visited-file-modtime (current-buffer)))
- (if (yes-or-no-p "Replace file on disk with buffer contents? ")
- (write-file buffer-file-name)
- (error "Aborted"))
- ;; Now, check if we have unsaved changes.
- (vc-buffer-sync t)
- (if (buffer-modified-p)
- (or (y-or-n-p "Operate on disk file, keeping modified buffer? ")
- (error "Aborted")))))
+;; Here's the major entry point.
+;;;###autoload
+(defun vc-next-action (verbose)
+ "Do the next logical version control operation on the current fileset.
+This requires that all files in the fileset be in the same state.
+
+For locking systems:
+ If every file is not already registered, this registers each for version
+control.
+ If every file is registered and not locked by anyone, this checks out
+a writable and locked file of each ready for editing.
+ If every file is checked out and locked by the calling user, this
+first checks to see if each file has changed since checkout. If not,
+it performs a revert on that file.
+ If every file has been changed, this pops up a buffer for entry
+of a log message; when the message has been entered, it checks in the
+resulting changes along with the log message as change commentary. If
+the variable `vc-keep-workfiles' is non-nil (which is its default), a
+read-only copy of each changed file is left in place afterwards.
+ If the affected file is registered and locked by someone else, you are
+given the option to steal the lock(s).
+
+For merging systems:
+ If every file is not already registered, this registers each one for version
+control. This does an add, but not a commit.
+ If every file is added but not committed, each one is committed.
+ If every working file is changed, but the corresponding repository file is
+unchanged, this pops up a buffer for entry of a log message; when the
+message has been entered, it checks in the resulting changes along
+with the logmessage as change commentary. A writable file is retained.
+ If the repository file is changed, you are asked if you want to
+merge in the changes into your working copy."
+ (interactive "P")
+ (let* ((files (vc-deduce-fileset nil t))
+ (state (vc-state (car files)))
+ (model (vc-checkout-model (car files)))
+ revision)
+ ;; Verify that the fileset is homogenous
+ (dolist (file (cdr files))
+ (if (not (eq (vc-state file) state))
+ (error "Fileset is in a mixed-up state"))
+ (if (not (eq (vc-checkout-model file) model))
+ (error "Fileset has mixed checkout models")))
+ ;; Check for buffers in the fileset not matching the on-disk contents.
+ (dolist (file files)
+ (let ((visited (get-file-buffer file)))
+ (when visited
+ (if vc-dired-mode
+ (switch-to-buffer-other-window visited)
+ (set-buffer visited))
+ ;; Check relation of buffer and file, and make sure
+ ;; user knows what he's doing. First, finding the file
+ ;; will check whether the file on disk is newer.
+ ;; Ignore buffer-read-only during this test, and
+ ;; preserve find-file-literally.
+ (let ((buffer-read-only (not (file-writable-p file))))
+ (find-file-noselect file nil find-file-literally))
+ (if (not (verify-visited-file-modtime (current-buffer)))
+ (if (yes-or-no-p (format "Replace %s on disk with buffer contents? " file))
+ (write-file buffer-file-name)
+ (error "Aborted"))
+ ;; Now, check if we have unsaved changes.
+ (vc-buffer-sync t)
+ (if (buffer-modified-p)
+ (or (y-or-n-p (message "Use %s on disk, keeping modified buffer? " file))
+ (error "Aborted")))))))
;; Do the right thing
- (if (not (vc-registered file))
- (vc-register verbose comment)
- (vc-recompute-state file)
- (if visited (vc-mode-line file))
- (setq state (vc-state file))
+ (cond
+ ;; Files aren't registered
+ ((not state)
+ (mapc 'vc-register files))
+ ;; Files are up-to-date, or need a merge and user specified a revision
+ ((or (eq state 'up-to-date) (and verbose (eq state 'needs-patch)))
(cond
- ;; up-to-date
- ((or (eq state 'up-to-date)
- (and verbose (eq state 'needs-patch)))
- (cond
- (verbose
- ;; go to a different version
- (setq version
- (read-string "Branch, version, or backend to move to: "))
- (let ((vsym (intern-soft (upcase version))))
- (if (member vsym vc-handled-backends)
- (vc-transfer-file file vsym)
- (vc-checkout file (eq (vc-checkout-model file) 'implicit)
- version))))
- ((not (eq (vc-checkout-model file) 'implicit))
- ;; check the file out
- (vc-checkout file t))
- (t
- ;; do nothing
- (message "%s is up-to-date" file))))
-
- ;; Abnormal: edited but read-only
- ((and visited (eq state 'edited)
- buffer-read-only (not (file-writable-p file)))
- ;; Make the file+buffer read-write. If the user really wanted to
- ;; commit, he'll get a chance to do that next time around, anyway.
- (message "File is edited but read-only; making it writable")
- (set-file-modes buffer-file-name
- (logior (file-modes buffer-file-name) 128))
- (toggle-read-only -1))
-
- ;; edited
- ((eq state 'edited)
- (cond
- ;; For files with locking, if the file does not contain
- ;; any changes, just let go of the lock, i.e. revert.
- ((and (not (eq (vc-checkout-model file) 'implicit))
- (vc-workfile-unchanged-p file)
- ;; If buffer is modified, that means the user just
- ;; said no to saving it; in that case, don't revert,
- ;; because the user might intend to save after
- ;; finishing the log entry.
- (not (and visited (buffer-modified-p))))
- ;; DO NOT revert the file without asking the user!
- (if (not visited) (find-file-other-window file))
- (if (yes-or-no-p "Revert to master version? ")
- (vc-revert-buffer)))
- (t ;; normal action
+ (verbose
+ ;; go to a different revision
+ (setq revision (read-string "Branch, revision, or backend to move to: "))
+ (let ((vsym (intern-soft (upcase revision))))
+ (if (member vsym vc-handled-backends)
+ (dolist (file files) (vc-transfer-file file vsym))
+ (dolist (file files)
+ (vc-checkout file (eq model 'implicit) revision)))))
+ ((not (eq model 'implicit))
+ ;; check the files out
+ (dolist (file files) (vc-checkout file t)))
+ (t
+ ;; do nothing
+ (message "Fileset is up-to-date"))))
+ ;; Files have local changes
+ ((eq state 'edited)
+ (let ((ready-for-commit files))
+ ;; If files are edited but read-only, give user a chance to correct
+ (dolist (file files)
+ (if (not (file-writable-p file))
+ (progn
+ ;; Make the file+buffer read-write.
+ (unless (y-or-n-p (format "%s is edited but read-only; make it writable and continue?" file))
+ (error "Aborted"))
+ (set-file-modes file (logior (file-modes file) 128))
+ (let ((visited (get-file-buffer file)))
+ (if visited
+ (with-current-buffer visited
+ (toggle-read-only -1)))))))
+ ;; Allow user to revert files with no changes
+ (save-excursion
+ (dolist (file files)
+ (let ((visited (get-file-buffer file)))
+ ;; For files with locking, if the file does not contain
+ ;; any changes, just let go of the lock, i.e. revert.
+ (if (and (not (eq model 'implicit))
+ (vc-workfile-unchanged-p file)
+ ;; If buffer is modified, that means the user just
+ ;; said no to saving it; in that case, don't revert,
+ ;; because the user might intend to save after
+ ;; finishing the log entry and committing.
+ (not (and visited (buffer-modified-p))))
+ (progn
+ (vc-revert-file file)
+ (delete file ready-for-commit))))))
+ ;; Remaining files need to be committed
+ (if (not ready-for-commit)
+ (message "No files remain to be committed")
(if (not verbose)
- (vc-checkin file nil comment)
- (setq version (read-string "New version or backend: "))
- (let ((vsym (intern (upcase version))))
- (if (member vsym vc-handled-backends)
- (vc-transfer-file file vsym)
- (vc-checkin file version comment)))))))
-
- ;; locked by somebody else
- ((stringp state)
- (if comment
- (error "Sorry, you can't steal the lock on %s this way"
- (file-name-nondirectory file)))
- (vc-steal-lock file
- (if verbose (read-string "Version to steal: ")
- (vc-workfile-version file))
- state))
-
- ;; needs-patch
- ((eq state 'needs-patch)
+ (vc-checkin ready-for-commit)
+ (progn
+ (setq revision (read-string "New revision or backend: "))
+ (let ((vsym (intern (upcase revision))))
+ (if (member vsym vc-handled-backends)
+ (vc-transfer-file file vsym)
+ (vc-checkin ready-for-commit revision))))))))
+ ;; locked by somebody else (locking VCSes only)
+ ((stringp state)
+ (let ((revision
+ (if verbose
+ (read-string "Revision to steal: ")
+ (vc-working-revision file))))
+ (dolist (file files) (vc-steal-lock file revision state))))
+ ;; needs-patch
+ ((eq state 'needs-patch)
+ (dolist (file files)
(if (yes-or-no-p (format
- "%s is not up-to-date. Get latest version? "
+ "%s is not up-to-date. Get latest revision? "
(file-name-nondirectory file)))
- (vc-checkout file (eq (vc-checkout-model file) 'implicit) t)
- (if (and (not (eq (vc-checkout-model file) 'implicit))
- (yes-or-no-p "Lock this version? "))
- (vc-checkout file t)
- (error "Aborted"))))
-
- ;; needs-merge
- ((eq state 'needs-merge)
+ (vc-checkout file (eq model 'implicit) t)
+ (if (and (not (eq model 'implicit))
+ (yes-or-no-p "Lock this revision? "))
+ (vc-checkout file t)))))
+ ;; needs-merge
+ ((eq state 'needs-merge)
+ (dolist (file files)
(if (yes-or-no-p (format
"%s is not up-to-date. Merge in changes now? "
(file-name-nondirectory file)))
- (vc-maybe-resolve-conflicts file (vc-call merge-news file))
- (error "Aborted")))
+ (vc-maybe-resolve-conflicts file (vc-call merge-news file)))))
- ;; unlocked-changes
- ((eq state 'unlocked-changes)
- (if (not visited) (find-file-other-window file))
+ ;; unlocked-changes
+ ((eq state 'unlocked-changes)
+ (dolist (file files)
+ (if (not (equal buffer-file-name file))
+ (find-file-other-window file))
(if (save-window-excursion
- (vc-version-diff file (vc-workfile-version file) nil)
+ (vc-diff-internal nil (list file) (vc-working-revision file) nil)
(goto-char (point-min))
(let ((inhibit-read-only t))
(insert
@@ -1338,108 +1510,35 @@ If VERBOSE is non-nil, query the user rather than using default parameters."
(yes-or-no-p (concat "File has unlocked changes. "
"Claim lock retaining changes? ")))
(progn (vc-call steal-lock file)
- (clear-visited-file-modtime)
+ (clear-visited-file-modtime)
;; Must clear any headers here because they wouldn't
;; show that the file is locked now.
(vc-clear-headers file)
(write-file buffer-file-name)
(vc-mode-line file))
(if (not (yes-or-no-p
- "Revert to checked-in version, instead? "))
+ "Revert to checked-in revision, instead? "))
(error "Checkout aborted")
- (vc-revert-buffer1 t t)
+ (vc-revert-buffer-internal t t)
(vc-checkout file t))))))))
-(defvar vc-dired-window-configuration)
-
-(defun vc-next-action-dired (file rev comment)
- "Call `vc-next-action-on-file' on all the marked files.
-Ignores FILE and REV, but passes on COMMENT."
- (let ((dired-buffer (current-buffer)))
- (dired-map-over-marks
- (let ((file (dired-get-filename)))
- (message "Processing %s..." file)
- (vc-next-action-on-file file nil comment)
- (set-buffer dired-buffer)
- (set-window-configuration vc-dired-window-configuration)
- (message "Processing %s...done" file))
- nil t))
- (dired-move-to-filename))
-
-;; Here's the major entry point.
-
-;;;###autoload
-(defun vc-next-action (verbose)
- "Do the next logical version control operation on the current file.
-
-If you call this from within a VC dired buffer with no files marked,
-it will operate on the file in the current line.
-
-If you call this from within a VC dired buffer, and one or more
-files are marked, it will accept a log message and then operate on
-each one. The log message will be used as a comment for any register
-or checkin operations, but ignored when doing checkouts. Attempted
-lock steals will raise an error.
-
-A prefix argument lets you specify the version number to use.
-
-For RCS and SCCS files:
- If the file is not already registered, this registers it for version
-control.
- If the file is registered and not locked by anyone, this checks out
-a writable and locked file ready for editing.
- If the file is checked out and locked by the calling user, this
-first checks to see if the file has changed since checkout. If not,
-it performs a revert.
- If the file has been changed, this pops up a buffer for entry
-of a log message; when the message has been entered, it checks in the
-resulting changes along with the log message as change commentary. If
-the variable `vc-keep-workfiles' is non-nil (which is its default), a
-read-only copy of the changed file is left in place afterwards.
- If the file is registered and locked by someone else, you are given
-the option to steal the lock.
-
-For CVS files:
- If the file is not already registered, this registers it for version
-control. This does a \"cvs add\", but no \"cvs commit\".
- If the file is added but not committed, it is committed.
- If your working file is changed, but the repository file is
-unchanged, this pops up a buffer for entry of a log message; when the
-message has been entered, it checks in the resulting changes along
-with the logmessage as change commentary. A writable file is retained.
- If the repository file is changed, you are asked if you want to
-merge in the changes into your working copy."
-
- (interactive "P")
- (catch 'nogo
- (if vc-dired-mode
- (let ((files (dired-get-marked-files)))
- (set (make-local-variable 'vc-dired-window-configuration)
- (current-window-configuration))
- (if (string= ""
- (mapconcat
- (lambda (f)
- (if (not (vc-up-to-date-p f)) "@" ""))
- files ""))
- (vc-next-action-dired nil nil "dummy")
- (vc-start-entry nil nil nil nil
- "Enter a change comment for the marked files."
- 'vc-next-action-dired))
- (throw 'nogo nil)))
- (while vc-parent-buffer
- (pop-to-buffer vc-parent-buffer))
- (if buffer-file-name
- (vc-next-action-on-file buffer-file-name verbose)
- (error "Buffer %s is not associated with a file" (buffer-name)))))
-
-;; These functions help the vc-next-action entry point
-
-(defun vc-default-init-version (backend) vc-default-init-version)
+(defun vc-create-repo (backend)
+ "Create an empty repository in the current directory."
+ (interactive
+ (list
+ (intern
+ (upcase
+ (completing-read
+ "Create repository for: "
+ (mapcar (lambda (b) (list (downcase (symbol-name b)))) vc-handled-backends)
+ nil t)))))
+ (vc-call-backend backend 'create-repo))
;;;###autoload
-(defun vc-register (&optional set-version comment)
- "Register the current file into a version control system.
-With prefix argument SET-VERSION, allow user to specify initial version
+(defun vc-register (&optional fname set-revision comment)
+ "Register into a version control system.
+If FNAME is given register that file, otherwise register the current file.
+With prefix argument SET-REVISION, allow user to specify initial revision
level. If COMMENT is present, use that as an initial comment.
The version control system to use is found by cycling through the list
@@ -1449,88 +1548,52 @@ directory are already registered under that backend) will be used to
register the file. If no backend declares itself responsible, the
first backend that could register the file is used."
(interactive "P")
- (unless buffer-file-name (error "No visited file"))
- (when (vc-backend buffer-file-name)
- (if (vc-registered buffer-file-name)
- (error "This file is already registered")
- (unless (y-or-n-p "Previous master file has vanished. Make a new one? ")
- (error "Aborted"))))
- ;; Watch out for new buffers of size 0: the corresponding file
- ;; does not exist yet, even though buffer-modified-p is nil.
- (if (and (not (buffer-modified-p))
- (zerop (buffer-size))
- (not (file-exists-p buffer-file-name)))
- (set-buffer-modified-p t))
- (vc-buffer-sync)
-
- (vc-start-entry buffer-file-name
- (if set-version
- (read-string (format "Initial version level for %s: "
- (buffer-name)))
- (vc-call-backend (vc-responsible-backend buffer-file-name)
- 'init-version))
- (or comment (not vc-initial-comment))
- nil
- "Enter initial comment."
- (lambda (file rev comment)
- (message "Registering %s... " file)
- (let ((backend (vc-responsible-backend file t)))
- (vc-file-clearprops file)
- (vc-call-backend backend 'register file rev comment)
- (vc-file-setprop file 'vc-backend backend)
- (unless vc-make-backup-files
- (make-local-variable 'backup-inhibited)
- (setq backup-inhibited t)))
- (message "Registering %s... done" file))))
-
-
-(defun vc-responsible-backend (file &optional register)
- "Return the name of a backend system that is responsible for FILE.
-The optional argument REGISTER means that a backend suitable for
-registration should be found.
-
-If REGISTER is nil, then if FILE is already registered, return the
-backend of FILE. If FILE is not registered, or a directory, then the
-first backend in `vc-handled-backends' that declares itself
-responsible for FILE is returned. If no backend declares itself
-responsible, return the first backend.
-
-If REGISTER is non-nil, return the first responsible backend under
-which FILE is not yet registered. If there is no such backend, return
-the first backend under which FILE is not yet registered, but could
-be registered."
- (if (not vc-handled-backends)
- (error "No handled backends"))
- (or (and (not (file-directory-p file)) (not register) (vc-backend file))
- (catch 'found
- ;; First try: find a responsible backend. If this is for registration,
- ;; it must be a backend under which FILE is not yet registered.
- (dolist (backend vc-handled-backends)
- (and (or (not register)
- (not (vc-call-backend backend 'registered file)))
- (vc-call-backend backend 'responsible-p file)
- (throw 'found backend)))
- ;; no responsible backend
- (if (not register)
- ;; if this is not for registration, the first backend must do
- (car vc-handled-backends)
- ;; for registration, we need to find a new backend that
- ;; could register FILE
- (dolist (backend vc-handled-backends)
- (and (not (vc-call-backend backend 'registered file))
- (vc-call-backend backend 'could-register file)
- (throw 'found backend)))
- (error "No backend that could register")))))
-
-(defun vc-default-responsible-p (backend file)
- "Indicate whether BACKEND is reponsible for FILE.
-The default is to return nil always."
- nil)
-
-(defun vc-default-could-register (backend file)
- "Return non-nil if BACKEND could be used to register FILE.
-The default implementation returns t for all files."
- t)
+ (when (and (null fname) (null buffer-file-name)) (error "No visited file"))
+
+ (let ((bname (if fname (get-file-buffer fname) buffer-file-name)))
+ (unless fname (setq fname buffer-file-name))
+ (when (vc-backend fname)
+ (if (vc-registered fname)
+ (error "This file is already registered")
+ (unless (y-or-n-p "Previous master file has vanished. Make a new one? ")
+ (error "Aborted"))))
+ ;; Watch out for new buffers of size 0: the corresponding file
+ ;; does not exist yet, even though buffer-modified-p is nil.
+ (when bname
+ (with-current-buffer bname
+ (if (and (not (buffer-modified-p))
+ (zerop (buffer-size))
+ (not (file-exists-p buffer-file-name)))
+ (set-buffer-modified-p t))
+ (vc-buffer-sync)))
+ (vc-start-entry (list fname)
+ (if set-revision
+ (read-string (format "Initial revision level for %s: "
+ fname))
+ (vc-call-backend (vc-responsible-backend fname)
+ 'init-revision))
+ (or comment (not vc-initial-comment))
+ nil
+ "Enter initial comment."
+ (lambda (files rev comment)
+ (dolist (file files)
+ (message "Registering %s... " file)
+ (let ((backend (vc-responsible-backend file t)))
+ (vc-file-clearprops file)
+ (vc-call-backend backend 'register (list file) rev comment)
+ (vc-file-setprop file 'vc-backend backend)
+ (unless vc-make-backup-files
+ (make-local-variable 'backup-inhibited)
+ (setq backup-inhibited t)))
+ (message "Registering %s... done" file))))))
+
+(defun vc-register-with (backend)
+ "Register the current file with a specified back end."
+ (interactive "SBackend: ")
+ (if (not (member backend vc-handled-backends))
+ (error "Unknown back end."))
+ (let ((vc-handled-backends (list backend)))
+ (call-interactively 'vc-register)))
(defun vc-resynch-window (file &optional keep noquery)
"If FILE is in the current buffer, either revert or unvisit it.
@@ -1542,7 +1605,7 @@ rather than user editing!"
(and (string= buffer-file-name file)
(if keep
(progn
- (vc-revert-buffer1 t noquery)
+ (vc-revert-buffer-internal t noquery)
;; TODO: Adjusting view mode might no longer be necessary
;; after RMS change to files.el of 1999-08-08. Investigate
;; this when we install the new VC.
@@ -1567,8 +1630,8 @@ rather than user editing!"
(vc-resynch-window file keep noquery)))))
(vc-dired-resynch-file file))
-(defun vc-start-entry (file rev comment initial-contents msg action &optional after-hook)
- "Accept a comment for an operation on FILE revision REV.
+(defun vc-start-entry (files rev comment initial-contents msg action &optional after-hook)
+ "Accept a comment for an operation on FILES revision REV.
If COMMENT is nil, pop up a VC-log buffer, emit MSG, and set the
action on close to ACTION. If COMMENT is a string and
INITIAL-CONTENTS is non-nil, then COMMENT is used as the initial
@@ -1578,25 +1641,32 @@ entered COMMENT. If COMMENT is t, also do action immediately with an
empty comment. Remember the file's buffer in `vc-parent-buffer'
\(current one if no file). AFTER-HOOK specifies the local value
for vc-log-operation-hook."
- (let ((parent (or (and file (get-file-buffer file)) (current-buffer))))
- (if vc-before-checkin-hook
- (if file
- (with-current-buffer parent
- (run-hooks 'vc-before-checkin-hook))
- (run-hooks 'vc-before-checkin-hook)))
+ (let ((parent
+ (if (eq major-mode 'vc-dired-mode)
+ ;; If we are called from VC dired, the parent buffer is
+ ;; the current buffer.
+ (current-buffer)
+ (if (and files (equal (length files) 1))
+ (get-file-buffer (car files))
+ (current-buffer)))))
+ (when vc-before-checkin-hook
+ (if files
+ (with-current-buffer parent
+ (run-hooks 'vc-before-checkin-hook))
+ (run-hooks 'vc-before-checkin-hook)))
(if (and comment (not initial-contents))
(set-buffer (get-buffer-create "*VC-log*"))
(pop-to-buffer (get-buffer-create "*VC-log*")))
(set (make-local-variable 'vc-parent-buffer) parent)
(set (make-local-variable 'vc-parent-buffer-name)
(concat " from " (buffer-name vc-parent-buffer)))
- (if file (vc-mode-line file))
- (vc-log-edit file)
+ ;;(if file (vc-mode-line file))
+ (vc-log-edit files)
(make-local-variable 'vc-log-after-operation-hook)
- (if after-hook
- (setq vc-log-after-operation-hook after-hook))
+ (when after-hook
+ (setq vc-log-after-operation-hook after-hook))
(setq vc-log-operation action)
- (setq vc-log-version rev)
+ (setq vc-log-revision rev)
(when comment
(erase-buffer)
(when (stringp comment) (insert comment)))
@@ -1616,7 +1686,7 @@ After check-out, runs the normal hook `vc-checkout-hook'."
(vc-up-to-date-p file)
(vc-make-version-backup file))
(with-vc-properties
- file
+ (list file)
(condition-case err
(vc-call checkout file writable rev)
(file-error
@@ -1646,7 +1716,7 @@ After check-out, runs the normal hook `vc-checkout-hook'."
(error "Steal canceled"))
(message "Stealing lock on %s..." file)
(with-vc-properties
- file
+ (list file)
(vc-call steal-lock file rev)
`((vc-state . edited)))
(vc-resynch-buffer file t t)
@@ -1662,9 +1732,9 @@ After check-out, runs the normal hook `vc-checkout-hook'."
".\n")
(message "Please explain why you stole the lock. Type C-c C-c when done.")))
-(defun vc-checkin (file &optional rev comment initial-contents)
- "Check in FILE.
-The optional argument REV may be a string specifying the new version
+(defun vc-checkin (files &optional rev comment initial-contents)
+ "Check in FILES.
+The optional argument REV may be a string specifying the new revision
level (if nil increment the current level). COMMENT is a comment
string; if omitted, a buffer is popped up to accept a comment. If
INITIAL-CONTENTS is non-nil, then COMMENT is used as the initial contents
@@ -1675,25 +1745,25 @@ that the version control system supports this mode of operation.
Runs the normal hook `vc-checkin-hook'."
(vc-start-entry
- file rev comment initial-contents
+ files rev comment initial-contents
"Enter a change comment."
- (lambda (file rev comment)
- (message "Checking in %s..." file)
+ (lambda (files rev comment)
+ (message "Checking in %s..." (vc-delistify files))
;; "This log message intentionally left almost blank".
;; RCS 5.7 gripes about white-space-only comments too.
(or (and comment (string-match "[^\t\n ]" comment))
(setq comment "*** empty log message ***"))
(with-vc-properties
- file
- ;; Change buffers to get local value of vc-checkin-switches.
- (with-current-buffer (or (get-file-buffer file) (current-buffer))
- (progn
- (vc-call checkin file rev comment)
- (vc-delete-automatic-version-backups file)))
+ files
+ ;; We used to change buffers to get local value of vc-checkin-switches,
+ ;; but 'the' local buffer is not a well-defined concept for filesets.
+ (progn
+ (vc-call checkin files rev comment)
+ (mapc 'vc-delete-automatic-version-backups files))
`((vc-state . up-to-date)
(vc-checkout-time . ,(nth 5 (file-attributes file)))
- (vc-workfile-version . nil)))
- (message "Checking in %s...done" file))
+ (vc-working-revision . nil)))
+ (message "Checking in %s...done" (vc-delistify files)))
'vc-checkin-hook))
(defun vc-finish-logentry (&optional nocomment)
@@ -1705,7 +1775,7 @@ the buffer contents as a comment."
;; Check and record the comment, if any.
(unless nocomment
;; Comment too long?
- (vc-call-backend (or (and vc-log-file (vc-backend vc-log-file))
+ (vc-call-backend (or (if vc-log-fileset (vc-backend vc-log-fileset))
(vc-responsible-backend default-directory))
'logentry-check)
(run-hooks 'vc-logentry-check-hook))
@@ -1713,11 +1783,12 @@ the buffer contents as a comment."
;; But not if it is a vc-dired buffer.
(with-current-buffer vc-parent-buffer
(or vc-dired-mode (vc-buffer-sync)))
- (if (not vc-log-operation) (error "No log operation is pending"))
+ (if (not vc-log-operation)
+ (error "No log operation is pending"))
;; save the parameters held in buffer-local variables
(let ((log-operation vc-log-operation)
- (log-file vc-log-file)
- (log-version vc-log-version)
+ (log-fileset vc-log-fileset)
+ (log-revision vc-log-revision)
(log-entry (buffer-string))
(after-hook vc-log-after-operation-hook)
(tmp-vc-parent-buffer vc-parent-buffer))
@@ -1725,8 +1796,8 @@ the buffer contents as a comment."
;; OK, do it to it
(save-excursion
(funcall log-operation
- log-file
- log-version
+ log-fileset
+ log-revision
log-entry))
;; Remove checkin window (after the checkin so that if that fails
;; we don't zap the *VC-log* buffer and the typing therein).
@@ -1739,176 +1810,47 @@ the buffer contents as a comment."
(bury-buffer)
(pop-to-buffer tmp-vc-parent-buffer))))
;; Now make sure we see the expanded headers
- (if log-file
- (vc-resynch-buffer log-file vc-keep-workfiles t))
+ (if log-fileset
+ (mapc
+ (lambda (file) (vc-resynch-buffer file vc-keep-workfiles t))
+ log-fileset))
(if vc-dired-mode
(dired-move-to-filename))
(run-hooks after-hook 'vc-finish-logentry-hook)))
-;; Code for access to the comment ring
+;;; Additional entry points for examining version histories
+
+;; (defun vc-default-diff-tree (backend dir rev1 rev2)
+;; "List differences for all registered files at and below DIR.
+;; The meaning of REV1 and REV2 is the same as for `vc-revision-diff'."
+;; ;; This implementation does an explicit tree walk, and calls
+;; ;; vc-BACKEND-diff directly for each file. An optimization
+;; ;; would be to use `vc-diff-internal', so that diffs can be local,
+;; ;; and to call it only for files that are actually changed.
+;; ;; However, this is expensive for some backends, and so it is left
+;; ;; to backend-specific implementations.
+;; (setq default-directory dir)
+;; (vc-file-tree-walk
+;; default-directory
+;; (lambda (f)
+;; (vc-exec-after
+;; `(let ((coding-system-for-read (vc-coding-system-for-diff ',f)))
+;; (message "Looking at %s" ',f)
+;; (vc-call-backend ',(vc-backend f)
+;; 'diff (list ',f) ',rev1 ',rev2))))))
-;; Additional entry points for examining version histories
-
-;;;###autoload
-(defun vc-diff (historic &optional not-urgent)
- "Display diffs between file versions.
-Normally this compares the current file and buffer with the most
-recent checked in version of that file. This uses no arguments. With
-a prefix argument HISTORIC, it reads the file name to use and two
-version designators specifying which versions to compare. The
-optional argument NOT-URGENT non-nil means it is ok to say no to
-saving the buffer."
- (interactive (list current-prefix-arg t))
- (if historic
- (call-interactively 'vc-version-diff)
- (vc-ensure-vc-buffer)
- (let ((file buffer-file-name))
- (vc-buffer-sync not-urgent)
- (if (vc-workfile-unchanged-p buffer-file-name)
- (message "No changes to %s since latest version" file)
- (vc-version-diff file nil nil)))))
-
-(defun vc-default-revision-completion-table (backend file) nil)
-
-(defun vc-version-diff (file rev1 rev2)
- "List the differences between FILE's versions REV1 and REV2.
-If REV1 is empty or nil it means to use the current workfile version;
-REV2 empty or nil means the current file contents. FILE may also be
-a directory, in that case, generate diffs between the corresponding
-versions of all registered files in or below it."
- (interactive
- (let* ((file (expand-file-name
- (read-file-name (if buffer-file-name
- "File or dir to diff (default visited file): "
- "File or dir to diff: ")
- default-directory buffer-file-name t)))
- (rev1-default nil) (rev2-default nil)
- (completion-table (vc-call revision-completion-table file)))
- ;; compute default versions based on the file state
- (cond
- ;; if it's a directory, don't supply any version default
- ((file-directory-p file)
- nil)
- ;; if the file is not up-to-date, use current version as older version
- ((not (vc-up-to-date-p file))
- (setq rev1-default (vc-workfile-version file)))
- ;; if the file is not locked, use last and previous version as default
- (t
- (setq rev1-default (vc-call previous-version file
- (vc-workfile-version file)))
- (if (string= rev1-default "") (setq rev1-default nil))
- (setq rev2-default (vc-workfile-version file))))
- ;; construct argument list
- (let* ((rev1-prompt (if rev1-default
- (concat "Older version (default "
- rev1-default "): ")
- "Older version: "))
- (rev2-prompt (concat "Newer version (default "
- (or rev2-default "current source") "): "))
- (rev1 (if completion-table
- (completing-read rev1-prompt completion-table
- nil nil nil nil rev1-default)
- (read-string rev1-prompt nil nil rev1-default)))
- (rev2 (if completion-table
- (completing-read rev2-prompt completion-table
- nil nil nil nil rev2-default)
- (read-string rev2-prompt nil nil rev2-default))))
- (list file rev1 rev2))))
- (if (file-directory-p file)
- ;; recursive directory diff
- (progn
- (vc-setup-buffer "*vc-diff*")
- (if (string-equal rev1 "") (setq rev1 nil))
- (if (string-equal rev2 "") (setq rev2 nil))
- (let ((inhibit-read-only t))
- (insert "Diffs between "
- (or rev1 "last version checked in")
- " and "
- (or rev2 "current workfile(s)")
- ":\n\n"))
- (let ((dir (file-name-as-directory file)))
- (vc-call-backend (vc-responsible-backend dir)
- 'diff-tree dir rev1 rev2))
- (vc-exec-after `(let ((inhibit-read-only t))
- (insert "\nEnd of diffs.\n"))))
- ;; Single file diff. It is important that the vc-controlled buffer
- ;; is still current at this time, because any local settings in that
- ;; buffer should affect the diff command.
- (vc-diff-internal file rev1 rev2))
- (set-buffer "*vc-diff*")
- (if (and (zerop (buffer-size))
- (not (get-buffer-process (current-buffer))))
- (progn
- (if rev1
- (if rev2
- (message "No changes to %s between %s and %s" file rev1 rev2)
- (message "No changes to %s since %s" file rev1))
- (message "No changes to %s since latest version" file))
- nil)
- (pop-to-buffer (current-buffer))
- ;; Gnus-5.8.5 sets up an autoload for diff-mode, even if it's
- ;; not available. Work around that.
- (if (require 'diff-mode nil t) (diff-mode))
- (vc-exec-after '(let ((inhibit-read-only t))
- (if (eq (buffer-size) 0)
- (insert "No differences found.\n"))
- (goto-char (point-min))
- (shrink-window-if-larger-than-buffer)))
- t))
-
-(defun vc-diff-label (file file-rev rev)
- (concat (file-relative-name file)
- (format-time-string "\t%d %b %Y %T %z\t"
- (nth 5 (file-attributes file-rev)))
- rev))
-
-(defun vc-diff-internal (file rev1 rev2)
- "Run diff to compare FILE's revisions REV1 and REV2.
-Diff output goes to the *vc-diff* buffer. The exit status of the diff
-command is returned.
-
-This function takes care to set up a proper coding system for diff output.
-If both revisions are available as local files, then it also does not
-actually call the backend, but performs a local diff."
- (if (or (not rev1) (string-equal rev1 ""))
- (setq rev1 (vc-workfile-version file)))
- (if (string-equal rev2 "")
- (setq rev2 nil))
- (let ((file-rev1 (vc-version-backup-file file rev1))
- (file-rev2 (if (not rev2)
- file
- (vc-version-backup-file file rev2)))
- (coding-system-for-read (vc-coding-system-for-diff file)))
- (if (and file-rev1 file-rev2)
- (let ((status
- (if (eq vc-diff-knows-L 'no)
- (apply 'vc-do-command "*vc-diff*" 1 "diff" nil
- (append (vc-switches nil 'diff)
- (list (file-relative-name file-rev1)
- (file-relative-name file-rev2))))
- (apply 'vc-do-command "*vc-diff*" 2 "diff" nil
- (append (vc-switches nil 'diff)
- ;; Provide explicit labels like RCS or
- ;; CVS would do so diff-mode refers to
- ;; `file' rather than to `file-rev1'
- ;; when trying to find/apply/undo
- ;; hunks.
- (list "-L" (vc-diff-label file file-rev1 rev1)
- "-L" (vc-diff-label file file-rev2 rev2)
- (file-relative-name file-rev1)
- (file-relative-name file-rev2)))))))
- (if (eq status 2)
- (if (not vc-diff-knows-L)
- (setq vc-diff-knows-L 'no
- status (apply 'vc-do-command "*vc-diff*" 1 "diff" nil
- (append
- (vc-switches nil 'diff)
- (list (file-relative-name file-rev1)
- (file-relative-name file-rev2)))))
- (error "diff failed"))
- (if (not vc-diff-knows-L) (setq vc-diff-knows-L 'yes)))
- status)
- (vc-call diff file rev1 rev2))))
+(defun vc-coding-system-for-diff (file)
+ "Return the coding system for reading diff output for FILE."
+ (or coding-system-for-read
+ ;; if we already have this file open,
+ ;; use the buffer's coding system
+ (let ((buf (find-buffer-visiting file)))
+ (if buf (with-current-buffer buf
+ buffer-file-coding-system)))
+ ;; otherwise, try to find one based on the file name
+ (car (find-operation-coding-system 'insert-file-contents file))
+ ;; and a final fallback
+ 'undecided))
(defun vc-switches (backend op)
(let ((switches
@@ -1931,65 +1873,186 @@ actually call the backend, but performs a local diff."
(defmacro vc-diff-switches-list (backend) `(vc-switches ',backend 'diff))
(make-obsolete 'vc-diff-switches-list 'vc-switches "22.1")
-(defun vc-default-diff-tree (backend dir rev1 rev2)
- "List differences for all registered files at and below DIR.
-The meaning of REV1 and REV2 is the same as for `vc-version-diff'."
- ;; This implementation does an explicit tree walk, and calls
- ;; vc-BACKEND-diff directly for each file. An optimization
- ;; would be to use `vc-diff-internal', so that diffs can be local,
- ;; and to call it only for files that are actually changed.
- ;; However, this is expensive for some backends, and so it is left
- ;; to backend-specific implementations.
- (setq default-directory dir)
- (vc-file-tree-walk
- default-directory
- (lambda (f)
- (vc-exec-after
- `(let ((coding-system-for-read (vc-coding-system-for-diff ',f)))
- (message "Looking at %s" ',f)
- (vc-call-backend ',(vc-backend f)
- 'diff ',f ',rev1 ',rev2))))))
+(defun vc-diff-sentinel (verbose rev1-name rev2-name)
+ ;; The empty sync output case has already been handled, so the only
+ ;; possibility of an empty output is for an async process, in which case
+ ;; it's important to insert the "diffs end here" message in the buffer
+ ;; since the user may miss a message in the echo area.
+ (when verbose
+ (let ((inhibit-read-only t))
+ (if (eq (buffer-size) 0)
+ (insert "No differences found.\n")
+ (insert (format "\n\nDiffs between %s and %s end here." rev1-name rev2-name)))))
+ (goto-char (point-min))
+ (shrink-window-if-larger-than-buffer))
+
+(defvar vc-diff-added-files nil
+ "If non-nil, diff added files by comparing them to /dev/null.")
+
+(defun vc-diff-internal (async files rev1 rev2 &optional verbose)
+ "Report diffs between two revisions of a fileset.
+Diff output goes to the *vc-diff* buffer. The function
+returns t if the buffer had changes, nil otherwise."
+ (let* ((filenames (vc-delistify files))
+ (rev1-name (or rev1 "working revision"))
+ (rev2-name (or rev2 "workfile"))
+ ;; Set coding system based on the first file. It's a kluge,
+ ;; but the only way to set it for each file included would
+ ;; be to call the back end separately for each file.
+ (coding-system-for-read
+ (if files (vc-coding-system-for-diff (car files)) 'undecided)))
+ (vc-setup-buffer "*vc-diff*")
+ (message "Finding changes in %s..." filenames)
+ ;; Many backends don't handle well the case of a file that has been
+ ;; added but not yet committed to the repo (notably CVS and Subversion).
+ ;; Do that work here so the backends don't have to futz with it. --ESR
+ ;;
+ ;; Actually most backends (including CVS) have options to control the
+ ;; behavior since which one is better depends on the user and on the
+ ;; situation). Worse yet: this code does not handle the case where
+ ;; `file' is a directory which contains added files.
+ ;; I made it conditional on vc-diff-added-files but it should probably
+ ;; just be removed (or copied/moved to specific backends). --Stef.
+ (when vc-diff-added-files
+ (let ((filtered '()))
+ (dolist (file files)
+ (if (or (file-directory-p file)
+ (not (string= (vc-working-revision file) "0")))
+ (push file filtered)
+ ;; This file is added but not yet committed;
+ ;; there is no master file to diff against.
+ (if (or rev1 rev2)
+ (error "No revisions of %s exist" file)
+ ;; We regard this as "changed".
+ ;; Diff it against /dev/null.
+ (apply 'vc-do-command "*vc-diff*"
+ 1 "diff" file
+ (append (vc-switches nil 'diff) '("/dev/null"))))))
+ (setq files (nreverse filtered))))
+ (let ((vc-disable-async-diff (not async)))
+ (vc-call diff files rev1 rev2 "*vc-diff*"))
+ (set-buffer "*vc-diff*")
+ (if (and (zerop (buffer-size))
+ (not (get-buffer-process (current-buffer))))
+ ;; Treat this case specially so as not to pop the buffer.
+ (progn
+ (message "No changes between %s and %s" rev1-name rev2-name)
+ nil)
+ (diff-mode)
+ ;; Make the *vc-diff* buffer read only, the diff-mode key
+ ;; bindings are nicer for read only buffers. pcl-cvs does the
+ ;; same thing.
+ (setq buffer-read-only t)
+ (vc-exec-after `(vc-diff-sentinel ,verbose ,rev1-name ,rev2-name))
+ ;; Display the buffer, but at the end because it can change point.
+ (pop-to-buffer (current-buffer))
+ ;; In the async case, we return t even if there are no differences
+ ;; because we don't know that yet.
+ t)))
+
+;;;###autoload
+(defun vc-version-diff (files rev1 rev2)
+ "Report diffs between revisions of the fileset in the repository history."
+ (interactive
+ (let* ((files (vc-deduce-fileset t))
+ (first (car files))
+ (completion-table
+ (vc-call revision-completion-table files))
+ (rev1-default nil)
+ (rev2-default nil))
+ (cond
+ ;; someday we may be able to do revision completion on non-singleton
+ ;; filesets, but not yet.
+ ((/= (length files) 1)
+ nil)
+ ;; if it's a directory, don't supply any revision default
+ ((file-directory-p first)
+ nil)
+ ;; if the file is not up-to-date, use working revision as older revision
+ ((not (vc-up-to-date-p first))
+ (setq rev1-default (vc-working-revision first)))
+ ;; if the file is not locked, use last and previous revisions as defaults
+ (t
+ (setq rev1-default (vc-call previous-revision first
+ (vc-working-revision first)))
+ (if (string= rev1-default "") (setq rev1-default nil))
+ (setq rev2-default (vc-working-revision first))))
+ ;; construct argument list
+ (let* ((rev1-prompt (if rev1-default
+ (concat "Older revision (default "
+ rev1-default "): ")
+ "Older revision: "))
+ (rev2-prompt (concat "Newer revision (default "
+ (or rev2-default "current source") "): "))
+ (rev1 (if completion-table
+ (completing-read rev1-prompt completion-table
+ nil nil nil nil rev1-default)
+ (read-string rev1-prompt nil nil rev1-default)))
+ (rev2 (if completion-table
+ (completing-read rev2-prompt completion-table
+ nil nil nil nil rev2-default)
+ (read-string rev2-prompt nil nil rev2-default))))
+ (if (string= rev1 "") (setq rev1 nil))
+ (if (string= rev2 "") (setq rev2 nil))
+ (list files rev1 rev2))))
+ (if (and (not rev1) rev2)
+ (error "Not a valid revision range."))
+ (vc-diff-internal t files rev1 rev2 (interactive-p)))
+
+;; (defun vc-contains-version-controlled-file (dir)
+;; "Return t if DIR contains a version-controlled file, nil otherwise."
+;; (catch 'found
+;; (mapc (lambda (f) (and (not (file-directory-p f)) (vc-backend f) (throw 'found 't))) (directory-files dir))
+;; nil))
+
+;;;###autoload
+(defun vc-diff (historic &optional not-urgent)
+ "Display diffs between file revisions.
+Normally this compares the currently selected fileset with their
+working revisions. With a prefix argument HISTORIC, it reads two revision
+designators specifying which revisions to compare.
+
+If no current fileset is available (that is, we are not in
+VC-Dired mode and the visited file of the current buffer is not
+under version control) and we're in a Dired buffer, use
+the current directory.
+The optional argument NOT-URGENT non-nil means it is ok to say no to
+saving the buffer."
+ (interactive (list current-prefix-arg t))
+ (if historic
+ (call-interactively 'vc-version-diff)
+ (let* ((files (vc-deduce-fileset t)))
+ (if buffer-file-name (vc-buffer-sync not-urgent))
+ (vc-diff-internal t files nil nil (interactive-p)))))
-(defun vc-coding-system-for-diff (file)
- "Return the coding system for reading diff output for FILE."
- (or coding-system-for-read
- ;; if we already have this file open,
- ;; use the buffer's coding system
- (let ((buf (find-buffer-visiting file)))
- (if buf (with-current-buffer buf
- buffer-file-coding-system)))
- ;; otherwise, try to find one based on the file name
- (car (find-operation-coding-system 'insert-file-contents file))
- ;; and a final fallback
- 'undecided))
;;;###autoload
-(defun vc-version-other-window (rev)
- "Visit version REV of the current file in another window.
-If the current file is named `F', the version is named `F.~REV~'.
+(defun vc-revision-other-window (rev)
+ "Visit revision REV of the current file in another window.
+If the current file is named `F', the revision is named `F.~REV~'.
If `F.~REV~' already exists, use it instead of checking it out again."
(interactive
(save-current-buffer
(vc-ensure-vc-buffer)
(let ((completion-table
(vc-call revision-completion-table buffer-file-name))
- (prompt "Version to visit (default is workfile version): "))
+ (prompt "Revision to visit (default is working revision): "))
(list
(if completion-table
(completing-read prompt completion-table)
(read-string prompt))))))
(vc-ensure-vc-buffer)
(let* ((file buffer-file-name)
- (version (if (string-equal rev "")
- (vc-workfile-version file)
+ (revision (if (string-equal rev "")
+ (vc-working-revision file)
rev)))
- (switch-to-buffer-other-window (vc-find-version file version))))
+ (switch-to-buffer-other-window (vc-find-revision file revision))))
-(defun vc-find-version (file version)
- "Read VERSION of FILE into a buffer and return the buffer."
- (let ((automatic-backup (vc-version-backup-file-name file version))
+(defun vc-find-revision (file revision)
+ "Read REVISION of FILE into a buffer and return the buffer."
+ (let ((automatic-backup (vc-version-backup-file-name file revision))
(filebuf (or (get-file-buffer file) (current-buffer)))
- (filename (vc-version-backup-file-name file version 'manual)))
+ (filename (vc-version-backup-file-name file revision 'manual)))
(unless (file-exists-p filename)
(if (file-exists-p automatic-backup)
(rename-file automatic-backup filename nil)
@@ -2004,25 +2067,18 @@ If `F.~REV~' already exists, use it instead of checking it out again."
;; Change buffer to get local value of
;; vc-checkout-switches.
(with-current-buffer filebuf
- (vc-call find-version file version outbuf))))
+ (vc-call find-revision file revision outbuf))))
(setq failed nil))
- (if (and failed (file-exists-p filename))
- (delete-file filename))))
+ (when (and failed (file-exists-p filename))
+ (delete-file filename))))
(vc-mode-line file))
(message "Checking out %s...done" filename)))
- (find-file-noselect filename)))
-
-(defun vc-default-find-version (backend file rev buffer)
- "Provide the new `find-version' op based on the old `checkout' op.
-This is only for compatibility with old backends. They should be updated
-to provide the `find-version' operation instead."
- (let ((tmpfile (make-temp-file (expand-file-name file))))
- (unwind-protect
- (progn
- (vc-call-backend backend 'checkout file nil rev tmpfile)
- (with-current-buffer buffer
- (insert-file-contents-literally tmpfile)))
- (delete-file tmpfile))))
+ (let ((result-buf (find-file-noselect filename)))
+ (with-current-buffer result-buf
+ ;; Set the parent buffer so that things like
+ ;; C-x v g, C-x v l, ... etc work.
+ (setq vc-parent-buffer filebuf))
+ result-buf)))
;; Header-insertion code
@@ -2073,10 +2129,10 @@ The headers are reset to their non-expanded form."
;;;###autoload
(defun vc-merge ()
- "Merge changes between two versions into the current buffer's file.
-This asks for two versions to merge from in the minibuffer. If the
-first version is a branch number, then merge all changes from that
-branch. If the first version is empty, merge news, i.e. recent changes
+ "Merge changes between two revisions into the current buffer's file.
+This asks for two revisions to merge from in the minibuffer. If the
+first revision is a branch number, then merge all changes from that
+branch. If the first revision is empty, merge news, i.e. recent changes
from the current branch.
See Info node `Merging'."
@@ -2086,34 +2142,34 @@ See Info node `Merging'."
(let* ((file buffer-file-name)
(backend (vc-backend file))
(state (vc-state file))
- first-version second-version status)
+ first-revision second-revision status)
(cond
- ((stringp state)
+ ((stringp state) ;; Locking VCses only
(error "File is locked by %s" state))
((not (vc-editable-p file))
(if (y-or-n-p
"File must be checked out for merging. Check out now? ")
(vc-checkout file t)
(error "Merge aborted"))))
- (setq first-version
- (read-string (concat "Branch or version to merge from "
+ (setq first-revision
+ (read-string (concat "Branch or revision to merge from "
"(default news on current branch): ")))
- (if (string= first-version "")
+ (if (string= first-revision "")
(if (not (vc-find-backend-function backend 'merge-news))
(error "Sorry, merging news is not implemented for %s" backend)
(setq status (vc-call merge-news file)))
(if (not (vc-find-backend-function backend 'merge))
(error "Sorry, merging is not implemented for %s" backend)
- (if (not (vc-branch-p first-version))
- (setq second-version
- (read-string "Second version: "
- (concat (vc-branch-part first-version) ".")))
- ;; We want to merge an entire branch. Set versions
+ (if (not (vc-branch-p first-revision))
+ (setq second-revision
+ (read-string "Second revision: "
+ (concat (vc-branch-part first-revision) ".")))
+ ;; We want to merge an entire branch. Set revisions
;; accordingly, so that vc-BACKEND-merge understands us.
- (setq second-version first-version)
- ;; first-version must be the starting point of the branch
- (setq first-version (vc-branch-part first-version)))
- (setq status (vc-call merge file first-version second-version))))
+ (setq second-revision first-revision)
+ ;; first-revision must be the starting point of the branch
+ (setq first-revision (vc-branch-part first-revision)))
+ (setq status (vc-call merge file first-revision second-revision))))
(vc-maybe-resolve-conflicts file status "WORKFILE" "MERGE SOURCE")))
(defun vc-maybe-resolve-conflicts (file status &optional name-A name-B)
@@ -2140,7 +2196,7 @@ See Info node `Merging'."
(define-key vmap "t" 'vc-dired-toggle-terse-mode)
map))
-(define-derived-mode vc-dired-mode dired-mode "Dired under VC"
+(define-derived-mode vc-dired-mode dired-mode "Dired under "
"The major mode used in VC directory buffers.
It works like Dired, but lists only files under version control, with
@@ -2200,6 +2256,13 @@ There is a special command, `*l', to mark all files currently locked."
(set (make-local-variable 'dired-actual-switches)
vc-dired-switches))
(set (make-local-variable 'vc-dired-terse-mode) vc-dired-terse-display)
+ (let ((backend-name (symbol-name (vc-responsible-backend
+ default-directory))))
+ (setq mode-name (concat mode-name backend-name))
+ ;; Add menu after `vc-dired-mode-map' has `dired-mode-map' as the parent.
+ (let ((vc-dire-menu-map (copy-keymap vc-menu-map)))
+ (define-key-after (lookup-key vc-dired-mode-map [menu-bar]) [vc]
+ (cons backend-name vc-dire-menu-map) 'subdir)))
(setq vc-dired-mode t))
(defun vc-dired-toggle-terse-mode ()
@@ -2223,15 +2286,6 @@ There is a special command, `*l', to mark all files currently locked."
(define-key vc-dired-mode-map "*l" 'vc-dired-mark-locked)
-(defun vc-default-dired-state-info (backend file)
- (let ((state (vc-state file)))
- (cond
- ((stringp state) (concat "(" state ")"))
- ((eq state 'edited) (concat "(" (vc-user-login-name file) ")"))
- ((eq state 'needs-merge) "(merge)")
- ((eq state 'needs-patch) "(patch)")
- ((eq state 'unlocked-changes) "(stale)"))))
-
(defun vc-dired-reformat-line (vc-info)
"Reformat a directory-listing line.
Replace various columns with version control information, VC-INFO.
@@ -2249,7 +2303,7 @@ This code, like dired, assumes UNIX -l format."
"Reformat the listing according to version control.
Called by dired after any portion of a vc-dired buffer has been read in."
(message "Getting version information... ")
- (let (subdir filename (buffer-read-only nil))
+ (let (subdir filename (inhibit-read-only t))
(goto-char (point-min))
(while (not (eobp))
(cond
@@ -2258,7 +2312,9 @@ Called by dired after any portion of a vc-dired buffer has been read in."
;; if the backend supports it, get the state
;; of all files in this directory at once
(let ((backend (vc-responsible-backend subdir)))
- (if (vc-find-backend-function backend 'dir-state)
+ ;; check `backend' can really handle `subdir'.
+ (if (and (vc-call-backend backend 'responsible-p subdir)
+ (vc-find-backend-function backend 'dir-state))
(vc-call-backend backend 'dir-state subdir)))
(forward-line 1)
;; erase (but don't remove) the "total" line
@@ -2330,12 +2386,11 @@ Called by dired after any portion of a vc-dired buffer has been read in."
(let (result)
;; Check whether dired is loaded.
(when (fboundp 'dired-buffers-for-dir)
- (mapcar (lambda (buffer)
- (with-current-buffer buffer
- (if vc-dired-mode
- (setq result (append result (list buffer))))))
- (dired-buffers-for-dir dir)))
- result))
+ (dolist (buffer (dired-buffers-for-dir dir))
+ (with-current-buffer buffer
+ (if vc-dired-mode
+ (push buffer result)))))
+ (nreverse result)))
(defun vc-dired-resynch-file (file)
"Update the entries for FILE in any VC Dired buffers that list it."
@@ -2395,10 +2450,10 @@ Otherwise, return nil."
;;;###autoload
(defun vc-create-snapshot (dir name branchp)
"Descending recursively from DIR, make a snapshot called NAME.
-For each registered file, the version level of its latest version
-becomes part of the named configuration. If the prefix argument
-BRANCHP is given, the snapshot is made as a new branch and the files
-are checked out in that new branch."
+For each registered file, the working revision becomes part of
+the named configuration. If the prefix argument BRANCHP is
+given, the snapshot is made as a new branch and the files are
+checked out in that new branch."
(interactive
(list (read-file-name "Directory: " default-directory default-directory t)
(read-string "New snapshot name: ")
@@ -2409,27 +2464,16 @@ are checked out in that new branch."
'create-snapshot dir name branchp)
(message "Making %s... done" (if branchp "branch" "snapshot")))
-(defun vc-default-create-snapshot (backend dir name branchp)
- (when branchp
- (error "VC backend %s does not support module branches" backend))
- (let ((result (vc-snapshot-precondition dir)))
- (if (stringp result)
- (error "File %s is not up-to-date" result)
- (vc-file-tree-walk
- dir
- (lambda (f)
- (vc-call assign-name f name))))))
-
;;;###autoload
(defun vc-retrieve-snapshot (dir name)
"Descending recursively from DIR, retrieve the snapshot called NAME.
-If NAME is empty, it refers to the latest versions.
+If NAME is empty, it refers to the latest revisions.
If locking is used for the files in DIR, then there must not be any
locked files at or below DIR (but if NAME is empty, locked files are
allowed and simply skipped)."
(interactive
(list (read-file-name "Directory: " default-directory default-directory t)
- (read-string "Snapshot name to retrieve (default latest versions): ")))
+ (read-string "Snapshot name to retrieve (default latest revisions): ")))
(let ((update (yes-or-no-p "Update any affected buffers? "))
(msg (if (or (not name) (string= name ""))
(format "Updating %s... " (abbreviate-file-name dir))
@@ -2440,60 +2484,24 @@ allowed and simply skipped)."
'retrieve-snapshot dir name update)
(message "%s" (concat msg "done"))))
-(defun vc-default-retrieve-snapshot (backend dir name update)
- (if (string= name "")
- (progn
- (vc-file-tree-walk
- dir
- (lambda (f) (and
- (vc-up-to-date-p f)
- (vc-error-occurred
- (vc-call checkout f nil "")
- (if update (vc-resynch-buffer f t t)))))))
- (let ((result (vc-snapshot-precondition dir)))
- (if (stringp result)
- (error "File %s is locked" result)
- (setq update (and (eq result 'visited) update))
- (vc-file-tree-walk
- dir
- (lambda (f) (vc-error-occurred
- (vc-call checkout f nil name)
- (if update (vc-resynch-buffer f t t)))))))))
-
;; Miscellaneous other entry points
;;;###autoload
-(defun vc-print-log (&optional focus-rev)
- "List the change log of the current buffer in a window.
-If FOCUS-REV is non-nil, leave the point at that revision."
+(defun vc-print-log (&optional working-revision)
+ "List the change log of the current fileset in a window.
+If WORKING-REVISION is non-nil, leave the point at that revision."
(interactive)
- (vc-ensure-vc-buffer)
- (let ((file buffer-file-name))
- (or focus-rev (setq focus-rev (vc-workfile-version file)))
+ (let* ((files (vc-deduce-fileset))
+ (backend (vc-backend files))
+ (working-revision (or working-revision (vc-working-revision (car files)))))
;; Don't switch to the output buffer before running the command,
;; so that any buffer-local settings in the vc-controlled
;; buffer can be accessed by the command.
- (condition-case err
- (progn
- (vc-call print-log file "*vc-change-log*")
- (set-buffer "*vc-change-log*"))
- (wrong-number-of-arguments
- ;; If this error came from the above call to print-log, try again
- ;; without the optional buffer argument (for backward compatibility).
- ;; Otherwise, resignal.
- (if (or (not (eq (cadr err)
- (indirect-function
- (vc-find-backend-function (vc-backend file)
- 'print-log))))
- (not (eq (caddr err) 2)))
- (signal (car err) (cdr err))
- ;; for backward compatibility
- (vc-call print-log file)
- (set-buffer "*vc*"))))
- (pop-to-buffer (current-buffer))
+ (vc-call-backend backend 'print-log files "*vc-change-log*")
+ (pop-to-buffer "*vc-change-log*")
(vc-exec-after
`(let ((inhibit-read-only t))
- (vc-call-backend ',(vc-backend file) 'log-view-mode)
+ (vc-call-backend ',backend 'log-view-mode)
(goto-char (point-max)) (forward-line -1)
(while (looking-at "=*\n")
(delete-char (- (match-end 0) (match-beginning 0)))
@@ -2501,122 +2509,129 @@ If FOCUS-REV is non-nil, leave the point at that revision."
(goto-char (point-min))
(if (looking-at "[\b\t\n\v\f\r ]+")
(delete-char (- (match-end 0) (match-beginning 0))))
- ;; (shrink-window-if-larger-than-buffer)
- ;; move point to the log entry for the current version
- (vc-call-backend ',(vc-backend file)
- 'show-log-entry
- ',focus-rev)
+ (shrink-window-if-larger-than-buffer)
+ ;; move point to the log entry for the working revision
+ (vc-call-backend ',backend 'show-log-entry ',working-revision)
+ (setq vc-sentinel-movepoint (point))
(set-buffer-modified-p nil)))))
-(defun vc-default-log-view-mode (backend) (log-view-mode))
-(defun vc-default-show-log-entry (backend rev)
- (with-no-warnings
- (log-view-goto-rev rev)))
-
-(defun vc-default-comment-history (backend file)
- "Return a string with all log entries stored in BACKEND for FILE."
- (if (vc-find-backend-function backend 'print-log)
- (with-current-buffer "*vc*"
- (vc-call print-log file)
- (vc-call wash-log file)
- (buffer-string))))
-
-(defun vc-default-wash-log (backend file)
- "Remove all non-comment information from log output.
-This default implementation works for RCS logs; backends should override
-it if their logs are not in RCS format."
- (let ((separator (concat "^-+\nrevision [0-9.]+\ndate: .*\n"
- "\\(branches: .*;\n\\)?"
- "\\(\\*\\*\\* empty log message \\*\\*\\*\n\\)?")))
- (goto-char (point-max)) (forward-line -1)
- (while (looking-at "=*\n")
- (delete-char (- (match-end 0) (match-beginning 0)))
- (forward-line -1))
- (goto-char (point-min))
- (if (looking-at "[\b\t\n\v\f\r ]+")
- (delete-char (- (match-end 0) (match-beginning 0))))
- (goto-char (point-min))
- (re-search-forward separator nil t)
- (delete-region (point-min) (point))
- (while (re-search-forward separator nil t)
- (delete-region (match-beginning 0) (match-end 0)))))
-
;;;###autoload
-(defun vc-revert-buffer ()
- "Revert the current buffer's file to the version it was based on.
+(defun vc-revert ()
+ "Revert working copies of the selected fileset to their repository contents.
This asks for confirmation if the buffer contents are not identical
-to that version. This function does not automatically pick up newer
-changes found in the master file; use \\[universal-argument] \\[vc-next-action] to do so."
+to the working revision (except for keyword expansion)."
(interactive)
- (vc-ensure-vc-buffer)
- ;; Make sure buffer is saved. If the user says `no', abort since
- ;; we cannot show the changes and ask for confirmation to discard them.
- (vc-buffer-sync nil)
- (let ((file buffer-file-name)
- ;; This operation should always ask for confirmation.
- (vc-suppress-confirm nil)
- (obuf (current-buffer))
- status)
- (if (vc-up-to-date-p file)
- (unless (yes-or-no-p "File seems up-to-date. Revert anyway? ")
- (error "Revert canceled")))
- (unless (vc-workfile-unchanged-p file)
- (message "Finding changes...")
- ;; vc-diff selects the new window, which is not what we want:
- ;; if the new window is on another frame, that'd require the user
- ;; moving her mouse to answer the yes-or-no-p question.
- (let* ((vc-disable-async-diff (not vc-allow-async-revert))
- (win (save-selected-window
- (setq status (vc-diff nil t)) (selected-window))))
- (vc-exec-after `(message nil))
- (when status
- (unwind-protect
- (unless (yes-or-no-p "Discard changes? ")
- (error "Revert canceled"))
- (select-window win)
- (if (one-window-p t)
- (if (window-dedicated-p (selected-window))
- (make-frame-invisible))
- (delete-window))))))
- (set-buffer obuf)
- ;; Do the reverting
- (message "Reverting %s..." file)
- (vc-revert-file file)
- (message "Reverting %s...done" file)))
+ (let* ((files (vc-deduce-fileset)))
+ ;; If any of the files is visited by the current buffer, make
+ ;; sure buffer is saved. If the user says `no', abort since
+ ;; we cannot show the changes and ask for confirmation to
+ ;; discard them.
+ (if (or (not files) (memq (buffer-file-name) files))
+ (vc-buffer-sync nil))
+ (dolist (file files)
+ (let ((buf (get-file-buffer file)))
+ (if (and buf (buffer-modified-p buf))
+ (error "Please kill or save all modified buffers before reverting.")))
+ (if (vc-up-to-date-p file)
+ (unless (yes-or-no-p (format "%s seems up-to-date. Revert anyway? " file))
+ (error "Revert canceled"))))
+ (if (vc-diff-internal vc-allow-async-revert files nil nil)
+ (progn
+ (unless (yes-or-no-p (format "Discard changes in %s? " (vc-delistify files)))
+ (error "Revert canceled"))
+ (delete-windows-on "*vc-diff*")
+ (kill-buffer "*vc-diff*")))
+ (dolist (file files)
+ (progn
+ (message "Reverting %s..." (vc-delistify files))
+ (vc-revert-file file)
+ (message "Reverting %s...done" (vc-delistify files))))))
+
+;;;###autoload
+(defun vc-rollback ()
+ "Roll back (remove) the most recent changeset committed to the repository.
+This may be either a file-level or a repository-level operation,
+depending on the underlying version-control system."
+ (interactive)
+ (let* ((files (vc-deduce-fileset))
+ (backend (vc-backend files))
+ (granularity (vc-call-backend backend 'revision-granularity)))
+ (unless (vc-find-backend-function backend 'rollback)
+ (error "Rollback is not supported in %s" backend))
+ (if (and (not (eq granularity 'repository)) (/= (length files) 1))
+ (error "Rollback requires a singleton fileset or repository versioning"))
+ (if (not (vc-call latest-on-branch-p (car files)))
+ (error "Rollback is only possible at the tip revision."))
+ ;; If any of the files is visited by the current buffer, make
+ ;; sure buffer is saved. If the user says `no', abort since
+ ;; we cannot show the changes and ask for confirmation to
+ ;; discard them.
+ (if (or (not files) (memq (buffer-file-name) files))
+ (vc-buffer-sync nil))
+ (dolist (file files)
+ (if (buffer-modified-p (get-file-buffer file))
+ (error "Please kill or save all modified buffers before rollback."))
+ (if (not (vc-up-to-date-p file))
+ (error "Please revert all modified workfiles before rollback.")))
+ ;; Accumulate changes associated with the fileset
+ (vc-setup-buffer "*vc-diff*")
+ (not-modified)
+ (message "Finding changes...")
+ (let* ((tip (vc-working-revision (car files)))
+ (previous (vc-call previous-revision (car files) tip)))
+ (vc-diff-internal nil files previous tip))
+ ;; Display changes
+ (unless (yes-or-no-p "Discard these revisions? ")
+ (error "Rollback canceled"))
+ (delete-windows-on "*vc-diff*")
+ (kill-buffer"*vc-diff*")
+ ;; Do the actual reversions
+ (message "Rolling back %s..." (vc-delistify files))
+ (with-vc-properties
+ files
+ (vc-call-backend backend 'rollback files)
+ `((vc-state . ,'up-to-date)
+ (vc-checkout-time . , (nth 5 (file-attributes file)))
+ (vc-working-revision . nil)))
+ (dolist (f files) (vc-resynch-buffer f t t))
+ (message "Rolling back %s...done" (vc-delistify files))))
+
+;;;###autoload
+(define-obsolete-function-alias 'vc-revert-buffer 'vc-revert "23.1")
;;;###autoload
(defun vc-update ()
- "Update the current buffer's file to the latest version on its branch.
-If the file contains no changes, and is not locked, then this simply replaces
-the working file with the latest version on its branch. If the file contains
-changes, and the backend supports merging news, then any recent changes from
-the current branch are merged into the working file."
+ "Update the current fileset's files to their tip revisions.
+For each one that contains no changes, and is not locked, then this simply
+replaces the work file with the latest revision on its branch. If the file
+contains changes, and the backend supports merging news, then any recent
+changes from the current branch are merged into the working file."
(interactive)
- (vc-ensure-vc-buffer)
- (vc-buffer-sync nil)
- (let ((file buffer-file-name))
+ (dolist (file (vc-deduce-fileset))
+ (if (buffer-modified-p (get-file-buffer file))
+ (error "Please kill or save all modified buffers before updating."))
(if (vc-up-to-date-p file)
- (vc-checkout file nil "")
+ (vc-checkout file nil "")
(if (eq (vc-checkout-model file) 'locking)
- (if (eq (vc-state file) 'edited)
- (error
- (substitute-command-keys
- "File is locked--type \\[vc-revert-buffer] to discard changes"))
- (error
- (substitute-command-keys
- "Unexpected file state (%s)--type \\[vc-next-action] to correct")
- (vc-state file)))
- (if (not (vc-find-backend-function (vc-backend file) 'merge-news))
- (error "Sorry, merging news is not implemented for %s"
- (vc-backend file))
- (vc-call merge-news file)
- (vc-resynch-window file t t))))))
+ (if (eq (vc-state file) 'edited)
+ (error
+ (substitute-command-keys
+ "File is locked--type \\[vc-revert] to discard changes"))
+ (error
+ (substitute-command-keys
+ "Unexpected file state (%s)--type \\[vc-next-action] to correct")
+ (vc-state file)))
+ (if (not (vc-find-backend-function (vc-backend file) 'merge-news))
+ (error "Sorry, merging news is not implemented for %s"
+ (vc-backend file))
+ (vc-call merge-news file)
+ (vc-resynch-buffer file t t))))))
(defun vc-version-backup-file (file &optional rev)
"Return name of backup file for revision REV of FILE.
If version backups should be used for FILE, and there exists
-such a backup for REV or the current workfile version of file,
-return its name; otherwise return nil."
+such a backup for REV or the working revision of file, return
+its name; otherwise return nil."
(when (vc-call make-version-backups-p file)
(let ((backup-file (vc-version-backup-file-name file rev)))
(if (file-exists-p backup-file)
@@ -2626,37 +2641,10 @@ return its name; otherwise return nil."
(if (file-exists-p backup-file)
backup-file)))))
-(defun vc-default-revert (backend file contents-done)
- (unless contents-done
- (let ((rev (vc-workfile-version file))
- (file-buffer (or (get-file-buffer file) (current-buffer))))
- (message "Checking out %s..." file)
- (let ((failed t)
- (backup-name (car (find-backup-file-name file))))
- (when backup-name
- (copy-file file backup-name 'ok-if-already-exists 'keep-date)
- (unless (file-writable-p file)
- (set-file-modes file (logior (file-modes file) 128))))
- (unwind-protect
- (let ((coding-system-for-read 'no-conversion)
- (coding-system-for-write 'no-conversion))
- (with-temp-file file
- (let ((outbuf (current-buffer)))
- ;; Change buffer to get local value of vc-checkout-switches.
- (with-current-buffer file-buffer
- (let ((default-directory (file-name-directory file)))
- (vc-call find-version file rev outbuf)))))
- (setq failed nil))
- (when backup-name
- (if failed
- (rename-file backup-name file 'ok-if-already-exists)
- (and (not vc-make-backup-files) (delete-file backup-name))))))
- (message "Checking out %s...done" file))))
-
(defun vc-revert-file (file)
- "Revert FILE back to the version it was based on."
+ "Revert FILE back to the repository working revision it was based on."
(with-vc-properties
- file
+ (list file)
(let ((backup-file (vc-version-backup-file file)))
(when backup-file
(copy-file backup-file file 'ok-if-already-exists 'keep-date)
@@ -2667,53 +2655,6 @@ return its name; otherwise return nil."
(vc-resynch-buffer file t t))
;;;###autoload
-(defun vc-cancel-version (norevert)
- "Get rid of most recently checked in version of this file.
-A prefix argument NOREVERT means do not revert the buffer afterwards."
- (interactive "P")
- (vc-ensure-vc-buffer)
- (let* ((file buffer-file-name)
- (backend (vc-backend file))
- (target (vc-workfile-version file)))
- (cond
- ((not (vc-find-backend-function backend 'cancel-version))
- (error "Sorry, canceling versions is not supported under %s" backend))
- ((not (vc-call latest-on-branch-p file))
- (error "This is not the latest version; VC cannot cancel it"))
- ((not (vc-up-to-date-p file))
- (error "%s" (substitute-command-keys "File is not up to date; use \\[vc-revert-buffer] to discard changes"))))
- (if (null (yes-or-no-p (format "Remove version %s from master? " target)))
- (error "Aborted")
- (setq norevert (or norevert (not
- (yes-or-no-p "Revert buffer to most recent remaining version? "))))
-
- (message "Removing last change from %s..." file)
- (with-vc-properties
- file
- (vc-call cancel-version file norevert)
- `((vc-state . ,(if norevert 'edited 'up-to-date))
- (vc-checkout-time . ,(if norevert
- 0
- (nth 5 (file-attributes file))))
- (vc-workfile-version . nil)))
- (message "Removing last change from %s...done" file)
-
- (cond
- (norevert ;; clear version headers and mark the buffer modified
- (set-visited-file-name file)
- (when (not vc-make-backup-files)
- ;; inhibit backup for this buffer
- (make-local-variable 'backup-inhibited)
- (setq backup-inhibited t))
- (setq buffer-read-only nil)
- (vc-clear-headers)
- (vc-mode-line file)
- (vc-dired-resynch-file file))
- (t ;; revert buffer to file on disk
- (vc-resynch-buffer file t t)))
- (message "Version %s has been removed from the master" target))))
-
-;;;###autoload
(defun vc-switch-backend (file backend)
"Make BACKEND the current version control system for FILE.
FILE must already be registered in BACKEND. The change is not
@@ -2727,32 +2668,25 @@ To get a prompt, use a prefix argument."
(error "There is no version-controlled file in this buffer"))
(let ((backend (vc-backend buffer-file-name))
(backends nil))
- (unwind-protect
- (progn
- (unless backend
- (error "File %s is not under version control" buffer-file-name))
- ;; Find the registered backends.
- (dolist (backend vc-handled-backends)
- (when (vc-call-backend backend 'registered buffer-file-name)
- (push backend backends)))
- ;; Find the next backend.
- (let ((def (car (delq backend
- (append (memq backend backends) backends))))
- (others (delete backend backends)))
- (cond
- ((null others) (error "No other backend to switch to"))
- (current-prefix-arg
- (intern
- (upcase
- (completing-read
- (format "Switch to backend [%s]: " def)
- (mapcar (lambda (b) (list (downcase (symbol-name b)))) backends)
- nil t nil nil (downcase (symbol-name def))))))
- (t def))))
- ;; Calling the `registered' method can mess up the file
- ;; properties, so we want to revert them to what they were.
- (if (and backend (delete backend backends))
- (vc-call-backend backend 'registered buffer-file-name))))))
+ (unless backend
+ (error "File %s is not under version control" buffer-file-name))
+ ;; Find the registered backends.
+ (dolist (backend vc-handled-backends)
+ (when (vc-call-backend backend 'registered buffer-file-name)
+ (push backend backends)))
+ ;; Find the next backend.
+ (let ((def (car (delq backend (append (memq backend backends) backends))))
+ (others (delete backend backends)))
+ (cond
+ ((null others) (error "No other backend to switch to"))
+ (current-prefix-arg
+ (intern
+ (upcase
+ (completing-read
+ (format "Switch to backend [%s]: " def)
+ (mapcar (lambda (b) (list (downcase (symbol-name b)))) backends)
+ nil t nil nil (downcase (symbol-name def))))))
+ (t def))))))
(unless (eq backend (vc-backend file))
(vc-file-clearprops file)
(vc-file-setprop file 'vc-backend backend)
@@ -2767,7 +2701,7 @@ To get a prompt, use a prefix argument."
"Transfer FILE to another version control system NEW-BACKEND.
If NEW-BACKEND has a higher precedence than FILE's current backend
\(i.e. it comes earlier in `vc-handled-backends'), then register FILE in
-NEW-BACKEND, using the version number from the current backend as the
+NEW-BACKEND, using the revision number from the current backend as the
base level. If NEW-BACKEND has a lower precedence than the current
backend, then commit all changes that were made under the current
backend to NEW-BACKEND, and unregister FILE from the current backend.
@@ -2787,7 +2721,7 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
(set-file-modes file (logior (file-modes file) 128))
;; `registered' might have switched under us.
(vc-switch-backend file old-backend)
- (let* ((rev (vc-workfile-version file))
+ (let* ((rev (vc-working-revision file))
(modified-file (and edited (make-temp-file file)))
(unmodified-file (and modified-file (vc-version-backup-file file))))
;; Go back to the base unmodified file.
@@ -2801,7 +2735,7 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
(if unmodified-file
(copy-file unmodified-file file
'ok-if-already-exists 'keep-date)
- (if (y-or-n-p "Get base version from master? ")
+ (if (y-or-n-p "Get base revision from master? ")
(vc-revert-file file))))
(vc-call-backend new-backend 'receive-file file rev))
(when modified-file
@@ -2820,14 +2754,6 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
(vc-mode-line file)
(vc-checkin file nil comment (stringp comment)))))
-(defun vc-default-unregister (backend file)
- "Default implementation of `vc-unregister', signals an error."
- (error "Unregistering files is not supported for %s" backend))
-
-(defun vc-default-receive-file (backend file rev)
- "Let BACKEND receive FILE from another version control system."
- (vc-call-backend backend 'register file rev ""))
-
(defun vc-rename-master (oldmaster newfile templates)
"Rename OLDMASTER to be the master file for NEWFILE based on TEMPLATES."
(let* ((dir (file-name-directory (expand-file-name oldmaster)))
@@ -2878,14 +2804,6 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
;; If the backend hasn't deleted the file itself, let's do it for him.
(if (file-exists-p file) (delete-file file))))
-(defun vc-default-rename-file (backend old new)
- (condition-case nil
- (add-name-to-file old new)
- (error (rename-file old new)))
- (vc-delete-file old)
- (with-current-buffer (find-file-noselect new)
- (vc-register)))
-
;;;###autoload
(defun vc-rename-file (old new)
"Rename file OLD to NEW, and rename its master file likewise."
@@ -2907,7 +2825,7 @@ backend to NEW-BACKEND, and unregister FILE from the current backend.
(if (file-exists-p old) (rename-file old new))
;; ?? Renaming a file might change its contents due to keyword expansion.
;; We should really check out a new copy if the old copy was precisely equal
- ;; to some checked in version. However, testing for this is tricky....
+ ;; to some checked-in revision. However, testing for this is tricky....
(if oldbuf
(with-current-buffer oldbuf
(let ((buffer-read-only buffer-read-only))
@@ -2954,7 +2872,87 @@ log entries should be gathered."
(vc-call-backend (vc-responsible-backend default-directory)
'update-changelog args))
-(defun vc-default-update-changelog (backend files)
+;;; The default back end. Assumes RCS-like revision numbering.
+
+(defun vc-default-revision-granularity ()
+ (error "Your backend will not work with this version of VC mode."))
+
+;; functions that operate on RCS revision numbers. This code should
+;; also be moved into the backends. It stays for now, however, since
+;; it is used in code below.
+;;;###autoload
+(defun vc-trunk-p (rev)
+ "Return t if REV is a revision on the trunk."
+ (not (eq nil (string-match "\\`[0-9]+\\.[0-9]+\\'" rev))))
+
+(defun vc-branch-p (rev)
+ "Return t if REV is a branch revision."
+ (not (eq nil (string-match "\\`[0-9]+\\(\\.[0-9]+\\.[0-9]+\\)*\\'" rev))))
+
+;;;###autoload
+(defun vc-branch-part (rev)
+ "Return the branch part of a revision number REV."
+ (let ((index (string-match "\\.[0-9]+\\'" rev)))
+ (if index
+ (substring rev 0 index))))
+
+(defun vc-minor-part (rev)
+ "Return the minor revision number of a revision number REV."
+ (string-match "[0-9]+\\'" rev)
+ (substring rev (match-beginning 0) (match-end 0)))
+
+(defun vc-default-previous-revision (backend file rev)
+ "Return the revision number immediately preceding REV for FILE,
+or nil if there is no previous revision. This default
+implementation works for MAJOR.MINOR-style revision numbers as
+used by RCS and CVS."
+ (let ((branch (vc-branch-part rev))
+ (minor-num (string-to-number (vc-minor-part rev))))
+ (when branch
+ (if (> minor-num 1)
+ ;; revision does probably not start a branch or release
+ (concat branch "." (number-to-string (1- minor-num)))
+ (if (vc-trunk-p rev)
+ ;; we are at the beginning of the trunk --
+ ;; don't know anything to return here
+ nil
+ ;; we are at the beginning of a branch --
+ ;; return revision of starting point
+ (vc-branch-part branch))))))
+
+(defun vc-default-next-revision (backend file rev)
+ "Return the revision number immediately following REV for FILE,
+or nil if there is no next revision. This default implementation
+works for MAJOR.MINOR-style revision numbers as used by RCS
+and CVS."
+ (when (not (string= rev (vc-working-revision file)))
+ (let ((branch (vc-branch-part rev))
+ (minor-num (string-to-number (vc-minor-part rev))))
+ (concat branch "." (number-to-string (1+ minor-num))))))
+
+(defun vc-default-responsible-p (backend file)
+ "Indicate whether BACKEND is reponsible for FILE.
+The default is to return nil always."
+ nil)
+
+(defun vc-default-could-register (backend file)
+ "Return non-nil if BACKEND could be used to register FILE.
+The default implementation returns t for all files."
+ t)
+
+(defun vc-default-latest-on-branch-p (backend file)
+ "Return non-nil if FILE is the latest on its branch.
+This default implementation always returns non-nil, which means that
+editing non-current revisions is not supported by default."
+ t)
+
+(defun vc-default-init-revision (backend) vc-default-init-revision)
+
+(defalias 'vc-cvs-update-changelog 'vc-update-changelog-rcs2log)
+(defalias 'vc-rcs-update-changelog 'vc-update-changelog-rcs2log)
+;; FIXME: This should probably be moved to vc-rcs.el and replaced in
+;; vc-cvs.el by code using cvs2cl.
+(defun vc-update-changelog-rcs2log (files)
"Default implementation of update-changelog.
Uses `rcs2log' which only works for RCS and CVS."
;; FIXME: We (c|sh)ould add support for cvs2cl
@@ -2995,9 +2993,7 @@ Uses `rcs2log' which only works for RCS and CVS."
(mapcar
(lambda (f)
(file-relative-name
- (if (file-name-absolute-p f)
- f
- (concat odefault f))))
+ (expand-file-name f odefault)))
files)))
"done"
(pop-to-buffer (get-buffer-create "*vc*"))
@@ -3007,7 +3003,128 @@ Uses `rcs2log' which only works for RCS and CVS."
(setq default-directory (file-name-directory changelog))
(delete-file tempfile)))))
-;; Annotate functionality
+(defun vc-default-find-revision (backend file rev buffer)
+ "Provide the new `find-revision' op based on the old `checkout' op.
+This is only for compatibility with old backends. They should be updated
+to provide the `find-revision' operation instead."
+ (let ((tmpfile (make-temp-file (expand-file-name file))))
+ (unwind-protect
+ (progn
+ (vc-call-backend backend 'checkout file nil rev tmpfile)
+ (with-current-buffer buffer
+ (insert-file-contents-literally tmpfile)))
+ (delete-file tmpfile))))
+
+(defun vc-default-dired-state-info (backend file)
+ (let* ((state (vc-state file))
+ (statestring
+ (cond
+ ((stringp state) (concat "(" state ")"))
+ ((eq state 'edited) (concat "(" (vc-user-login-name file) ")"))
+ ((eq state 'needs-merge) "(merge)")
+ ((eq state 'needs-patch) "(patch)")
+ ((eq state 'unlocked-changes) "(stale)")))
+ (buffer
+ (get-file-buffer file))
+ (modflag
+ (if (and buffer (buffer-modified-p buffer)) "+" "")))
+ (concat statestring modflag)))
+
+(defun vc-default-rename-file (backend old new)
+ (condition-case nil
+ (add-name-to-file old new)
+ (error (rename-file old new)))
+ (vc-delete-file old)
+ (with-current-buffer (find-file-noselect new)
+ (vc-register)))
+
+(defalias 'vc-default-logentry-check 'ignore)
+(defalias 'vc-default-check-headers 'ignore)
+
+(defun vc-default-log-view-mode (backend) (log-view-mode))
+
+(defun vc-default-show-log-entry (backend rev)
+ (with-no-warnings
+ (log-view-goto-rev rev)))
+
+(defun vc-default-comment-history (backend file)
+ "Return a string with all log entries stored in BACKEND for FILE."
+ (if (vc-find-backend-function backend 'print-log)
+ (with-current-buffer "*vc*"
+ (vc-call print-log (list file))
+ (vc-call-backend backend 'wash-log)
+ (buffer-string))))
+
+(defun vc-default-receive-file (backend file rev)
+ "Let BACKEND receive FILE from another version control system."
+ (vc-call-backend backend 'register file rev ""))
+
+(defun vc-default-create-snapshot (backend dir name branchp)
+ (when branchp
+ (error "VC backend %s does not support module branches" backend))
+ (let ((result (vc-snapshot-precondition dir)))
+ (if (stringp result)
+ (error "File %s is not up-to-date" result)
+ (vc-file-tree-walk
+ dir
+ (lambda (f)
+ (vc-call assign-name f name))))))
+
+(defun vc-default-retrieve-snapshot (backend dir name update)
+ (if (string= name "")
+ (progn
+ (vc-file-tree-walk
+ dir
+ (lambda (f) (and
+ (vc-up-to-date-p f)
+ (vc-error-occurred
+ (vc-call checkout f nil "")
+ (if update (vc-resynch-buffer f t t)))))))
+ (let ((result (vc-snapshot-precondition dir)))
+ (if (stringp result)
+ (error "File %s is locked" result)
+ (setq update (and (eq result 'visited) update))
+ (vc-file-tree-walk
+ dir
+ (lambda (f) (vc-error-occurred
+ (vc-call checkout f nil name)
+ (if update (vc-resynch-buffer f t t)))))))))
+
+(defun vc-default-revert (backend file contents-done)
+ (unless contents-done
+ (let ((rev (vc-working-revision file))
+ (file-buffer (or (get-file-buffer file) (current-buffer))))
+ (message "Checking out %s..." file)
+ (let ((failed t)
+ (backup-name (car (find-backup-file-name file))))
+ (when backup-name
+ (copy-file file backup-name 'ok-if-already-exists 'keep-date)
+ (unless (file-writable-p file)
+ (set-file-modes file (logior (file-modes file) 128))))
+ (unwind-protect
+ (let ((coding-system-for-read 'no-conversion)
+ (coding-system-for-write 'no-conversion))
+ (with-temp-file file
+ (let ((outbuf (current-buffer)))
+ ;; Change buffer to get local value of vc-checkout-switches.
+ (with-current-buffer file-buffer
+ (let ((default-directory (file-name-directory file)))
+ (vc-call find-revision file rev outbuf)))))
+ (setq failed nil))
+ (when backup-name
+ (if failed
+ (rename-file backup-name file 'ok-if-already-exists)
+ (and (not vc-make-backup-files) (delete-file backup-name))))))
+ (message "Checking out %s...done" file))))
+
+(defalias 'vc-default-revision-completion-table 'ignore)
+
+(defun vc-check-headers ()
+ "Check if the current file has any headers in it."
+ (interactive)
+ (vc-call-backend (vc-backend buffer-file-name) 'check-headers))
+
+;;; Annotate functionality
;; Declare globally instead of additional parameter to
;; temp-buffer-show-function (not possible to pass more than one
@@ -3065,13 +3182,13 @@ cover the range from the oldest annotation to the newest."
;; Run through this file and find the oldest and newest dates annotated.
(save-excursion
(goto-char (point-min))
- (while (setq date (prog1 (vc-call-backend vc-annotate-backend
- 'annotate-time)
- (forward-line 1)))
- (if (> date newest)
- (setq newest date))
- (if (< date oldest)
- (setq oldest date))))
+ (while (not (eobp))
+ (when (setq date (vc-call-backend vc-annotate-backend 'annotate-time))
+ (if (> date newest)
+ (setq newest date))
+ (if (< date oldest)
+ (setq oldest date)))
+ (forward-line 1)))
(vc-annotate-display
(/ (- (if full newest current) oldest)
(vc-annotate-oldest-in-map vc-annotate-color-map))
@@ -3114,11 +3231,11 @@ cover the range from the oldest annotation to the newest."
:style toggle :selected
(eq vc-annotate-display-mode 'fullscale)]
"--"
- ["Annotate previous revision" vc-annotate-prev-version]
- ["Annotate next revision" vc-annotate-next-version]
+ ["Annotate previous revision" vc-annotate-prev-revision]
+ ["Annotate next revision" vc-annotate-next-revision]
["Annotate revision at line" vc-annotate-revision-at-line]
["Annotate revision previous to line" vc-annotate-revision-previous-to-line]
- ["Annotate latest revision" vc-annotate-workfile-version]
+ ["Annotate latest revision" vc-annotate-working-revision]
["Show log of revision at line" vc-annotate-show-log-revision-at-line]
["Show diff of revision at line" vc-annotate-show-diff-revision-at-line]))
@@ -3136,9 +3253,9 @@ use; you may override this using the second optional arg MODE."
(vc-annotate-display-default (or vc-annotate-ratio 1.0)))
;; One of the auto-scaling modes
((eq vc-annotate-display-mode 'scale)
- (vc-annotate-display-autoscale))
+ (vc-exec-after `(vc-annotate-display-autoscale)))
((eq vc-annotate-display-mode 'fullscale)
- (vc-annotate-display-autoscale t))
+ (vc-exec-after `(vc-annotate-display-autoscale t)))
((numberp vc-annotate-display-mode) ; A fixed number of days lookback
(vc-annotate-display-default
(/ vc-annotate-display-mode
@@ -3158,8 +3275,8 @@ default, the time scale stretches back one year into the past;
everything that is older than that is shown in blue.
With a prefix argument, this command asks two questions in the
-minibuffer. First, you may enter a version number; then the buffer
-displays and annotates that version instead of the current version
+minibuffer. First, you may enter a revision number; then the buffer
+displays and annotates that revision instead of the working revision
\(type RET in the minibuffer to leave that default unchanged). Then,
you are prompted for the time span in days which the color range
should cover. For example, a time span of 20 days means that changes
@@ -3169,17 +3286,17 @@ age, and everything that is older than that is shown in blue.
Customization variables:
`vc-annotate-menu-elements' customizes the menu elements of the
-mode-specific menu. `vc-annotate-color-map' and
-`vc-annotate-very-old-color' defines the mapping of time to
-colors. `vc-annotate-background' specifies the background color."
+mode-specific menu. `vc-annotate-color-map' and
+`vc-annotate-very-old-color' define the mapping of time to colors.
+`vc-annotate-background' specifies the background color."
(interactive
(save-current-buffer
(vc-ensure-vc-buffer)
(list buffer-file-name
- (let ((def (vc-workfile-version buffer-file-name)))
+ (let ((def (vc-working-revision buffer-file-name)))
(if (null current-prefix-arg) def
(read-string
- (format "Annotate from version (default %s): " def)
+ (format "Annotate from revision (default %s): " def)
nil nil def)))
(if (null current-prefix-arg)
vc-annotate-display-mode
@@ -3215,35 +3332,44 @@ colors. `vc-annotate-background' specifies the background color."
(set (make-local-variable 'vc-annotate-parent-rev) rev)
(set (make-local-variable 'vc-annotate-parent-display-mode)
display-mode)))
- (when current-line
- (goto-line current-line temp-buffer-name))
- (message "Annotating... done")))
-(defun vc-annotate-prev-version (prefix)
- "Visit the annotation of the version previous to this one.
-
-With a numeric prefix argument, annotate the version that many
-versions previous."
+ (with-current-buffer temp-buffer-name
+ (vc-exec-after
+ `(progn
+ ;; Ideally, we'd rather not move point if the user has already
+ ;; moved it elsewhere, but really point here is not the position
+ ;; of the user's cursor :-(
+ (when ,current-line ;(and (bobp))
+ (goto-line ,current-line)
+ (setq vc-sentinel-movepoint (point)))
+ (unless (active-minibuffer-window)
+ (message "Annotating... done")))))))
+
+(defun vc-annotate-prev-revision (prefix)
+ "Visit the annotation of the revision previous to this one.
+
+With a numeric prefix argument, annotate the revision that many
+revisions previous."
(interactive "p")
- (vc-annotate-warp-version (- 0 prefix)))
+ (vc-annotate-warp-revision (- 0 prefix)))
-(defun vc-annotate-next-version (prefix)
- "Visit the annotation of the version after this one.
+(defun vc-annotate-next-revision (prefix)
+ "Visit the annotation of the revision after this one.
-With a numeric prefix argument, annotate the version that many
-versions after."
+With a numeric prefix argument, annotate the revision that many
+revisions after."
(interactive "p")
- (vc-annotate-warp-version prefix))
+ (vc-annotate-warp-revision prefix))
-(defun vc-annotate-workfile-version ()
- "Visit the annotation of the workfile version of this file."
+(defun vc-annotate-working-revision ()
+ "Visit the annotation of the working revision of this file."
(interactive)
(if (not (equal major-mode 'vc-annotate-mode))
(message "Cannot be invoked outside of a vc annotate buffer")
- (let ((warp-rev (vc-workfile-version vc-annotate-parent-file)))
+ (let ((warp-rev (vc-working-revision vc-annotate-parent-file)))
(if (equal warp-rev vc-annotate-parent-rev)
- (message "Already at version %s" warp-rev)
- (vc-annotate-warp-version warp-rev)))))
+ (message "Already at revision %s" warp-rev)
+ (vc-annotate-warp-revision warp-rev)))))
(defun vc-annotate-extract-revision-at-line ()
"Extract the revision number of the current line."
@@ -3251,7 +3377,7 @@ versions after."
(vc-call-backend vc-annotate-backend 'annotate-extract-revision-at-line))
(defun vc-annotate-revision-at-line ()
- "Visit the annotation of the version identified in the current line."
+ "Visit the annotation of the revision identified in the current line."
(interactive)
(if (not (equal major-mode 'vc-annotate-mode))
(message "Cannot be invoked outside of a vc annotate buffer")
@@ -3259,11 +3385,11 @@ versions after."
(if (not rev-at-line)
(message "Cannot extract revision number from the current line")
(if (equal rev-at-line vc-annotate-parent-rev)
- (message "Already at version %s" rev-at-line)
- (vc-annotate-warp-version rev-at-line))))))
+ (message "Already at revision %s" rev-at-line)
+ (vc-annotate-warp-revision rev-at-line))))))
(defun vc-annotate-revision-previous-to-line ()
- "Visit the annotation of the version before the version at line."
+ "Visit the annotation of the revision before the revision at line."
(interactive)
(if (not (equal major-mode 'vc-annotate-mode))
(message "Cannot be invoked outside of a vc annotate buffer")
@@ -3272,11 +3398,11 @@ versions after."
(if (not rev-at-line)
(message "Cannot extract revision number from the current line")
(setq prev-rev
- (vc-call previous-version vc-annotate-parent-file rev-at-line))
- (vc-annotate-warp-version prev-rev)))))
+ (vc-call previous-revision vc-annotate-parent-file rev-at-line))
+ (vc-annotate-warp-revision prev-rev)))))
(defun vc-annotate-show-log-revision-at-line ()
- "Visit the log of the version at line."
+ "Visit the log of the revision at line."
(interactive)
(if (not (equal major-mode 'vc-annotate-mode))
(message "Cannot be invoked outside of a vc annotate buffer")
@@ -3286,7 +3412,7 @@ versions after."
(vc-print-log rev-at-line)))))
(defun vc-annotate-show-diff-revision-at-line ()
- "Visit the diff of the version at line from its previous version."
+ "Visit the diff of the revision at line from its previous revision."
(interactive)
(if (not (equal major-mode 'vc-annotate-mode))
(message "Cannot be invoked outside of a vc annotate buffer")
@@ -3295,19 +3421,20 @@ versions after."
(if (not rev-at-line)
(message "Cannot extract revision number from the current line")
(setq prev-rev
- (vc-call previous-version vc-annotate-parent-file rev-at-line))
+ (vc-call previous-revision vc-annotate-parent-file rev-at-line))
(if (not prev-rev)
- (message "Cannot diff from any version prior to %s" rev-at-line)
+ (message "Cannot diff from any revision prior to %s" rev-at-line)
(save-window-excursion
- (vc-version-diff vc-annotate-parent-file prev-rev rev-at-line))
+ (vc-diff-internal nil (list vc-annotate-parent-file)
+ prev-rev rev-at-line))
(switch-to-buffer "*vc-diff*"))))))
-(defun vc-annotate-warp-version (revspec)
- "Annotate the version described by REVSPEC.
+(defun vc-annotate-warp-revision (revspec)
+ "Annotate the revision described by REVSPEC.
-If REVSPEC is a positive integer, warp that many versions
+If REVSPEC is a positive integer, warp that many revisions
forward, if possible, otherwise echo a warning message. If
-REVSPEC is a negative integer, warp that many versions backward,
+REVSPEC is a negative integer, warp that many revisions backward,
if possible, otherwise echo a warning message. If REVSPEC is a
string, then it describes a revision number, so warp to that
revision."
@@ -3321,23 +3448,23 @@ revision."
((and (integerp revspec) (> revspec 0))
(setq newrev vc-annotate-parent-rev)
(while (and (> revspec 0) newrev)
- (setq newrev (vc-call next-version
+ (setq newrev (vc-call next-revision
vc-annotate-parent-file newrev))
(setq revspec (1- revspec)))
(if (not newrev)
- (message "Cannot increment %d versions from version %s"
+ (message "Cannot increment %d revisions from revision %s"
revspeccopy vc-annotate-parent-rev)))
((and (integerp revspec) (< revspec 0))
(setq newrev vc-annotate-parent-rev)
(while (and (< revspec 0) newrev)
- (setq newrev (vc-call previous-version
+ (setq newrev (vc-call previous-revision
vc-annotate-parent-file newrev))
(setq revspec (1+ revspec)))
(if (not newrev)
- (message "Cannot decrement %d versions from version %s"
+ (message "Cannot decrement %d revisions from revision %s"
(- 0 revspeccopy) vc-annotate-parent-rev)))
((stringp revspec) (setq newrev revspec))
- (t (error "Invalid argument to vc-annotate-warp-version")))
+ (t (error "Invalid argument to vc-annotate-warp-revision")))
(when newrev
(vc-annotate vc-annotate-parent-file newrev
vc-annotate-parent-display-mode
@@ -3392,61 +3519,41 @@ The annotations are relative to the current time, unless overridden by OFFSET."
(font-lock-mode 1))
(defun vc-annotate-lines (limit)
- (let (difference)
- (while (and (< (point) limit)
- (setq difference (vc-annotate-difference vc-annotate-offset)))
- (let* ((color (or (vc-annotate-compcar difference vc-annotate-color-map)
- (cons nil vc-annotate-very-old-color)))
- ;; substring from index 1 to remove any leading `#' in the name
- (face-name (concat "vc-annotate-face-"
- (if (string-equal
- (substring (cdr color) 0 1) "#")
- (substring (cdr color) 1)
- (cdr color))))
- ;; Make the face if not done.
- (face (or (intern-soft face-name)
- (let ((tmp-face (make-face (intern face-name))))
- (set-face-foreground tmp-face (cdr color))
- (if vc-annotate-background
- (set-face-background tmp-face
- vc-annotate-background))
- tmp-face))) ; Return the face
- (point (point)))
- (forward-line 1)
- (put-text-property point (point) 'face face)))
- ;; Pretend to font-lock there were no matches.
- nil))
-
-;; Collect back-end-dependent stuff here
-
-(defalias 'vc-default-logentry-check 'ignore)
-
-(defun vc-check-headers ()
- "Check if the current file has any headers in it."
- (interactive)
- (vc-call-backend (vc-backend buffer-file-name) 'check-headers))
-
-(defun vc-default-check-headers (backend)
- "Default implementation of check-headers; always returns nil."
+ (while (< (point) limit)
+ (let ((difference (vc-annotate-difference vc-annotate-offset))
+ (start (point))
+ (end (progn (forward-line 1) (point))))
+ (when difference
+ (let* ((color (or (vc-annotate-compcar difference vc-annotate-color-map)
+ (cons nil vc-annotate-very-old-color)))
+ ;; substring from index 1 to remove any leading `#' in the name
+ (face-name (concat "vc-annotate-face-"
+ (if (string-equal
+ (substring (cdr color) 0 1) "#")
+ (substring (cdr color) 1)
+ (cdr color))))
+ ;; Make the face if not done.
+ (face (or (intern-soft face-name)
+ (let ((tmp-face (make-face (intern face-name))))
+ (set-face-foreground tmp-face (cdr color))
+ (if vc-annotate-background
+ (set-face-background tmp-face
+ vc-annotate-background))
+ tmp-face)))) ; Return the face
+ (put-text-property start end 'face face)))))
+ ;; Pretend to font-lock there were no matches.
nil)
-
-;; Back-end-dependent stuff ends here.
+
;; Set up key bindings for use while editing log messages
-(defun vc-log-edit (file)
+(defun vc-log-edit (fileset)
"Set up `log-edit' for use with VC on FILE."
(setq default-directory
- (if file (file-name-directory file)
- (with-current-buffer vc-parent-buffer default-directory)))
- (log-edit 'vc-finish-logentry nil
- (if file `(lambda () ',(list (file-name-nondirectory file)))
- ;; If FILE is nil, we were called from vc-dired.
- (lambda ()
- (with-current-buffer vc-parent-buffer
- (dired-get-marked-files t)))))
- (set (make-local-variable 'vc-log-file) file)
- (make-local-variable 'vc-log-version)
+ (with-current-buffer vc-parent-buffer default-directory))
+ (log-edit 'vc-finish-logentry nil `(lambda () ',fileset))
+ (set (make-local-variable 'vc-log-fileset) fileset)
+ (make-local-variable 'vc-log-revision)
(set-buffer-modified-p nil)
(setq buffer-file-name nil))
@@ -3465,13 +3572,13 @@ Invoke FUNC f ARGS on each VC-managed file f underneath it."
(let ((dir (file-name-as-directory file)))
(mapcar
(lambda (f) (or
- (string-equal f ".")
- (string-equal f "..")
- (member f vc-directory-exclusion-list)
- (let ((dirf (expand-file-name f dir)))
- (or
- (file-symlink-p dirf);; Avoid possible loops
- (vc-file-tree-walk-internal dirf func args)))))
+ (string-equal f ".")
+ (string-equal f "..")
+ (member f vc-directory-exclusion-list)
+ (let ((dirf (expand-file-name f dir)))
+ (or
+ (file-symlink-p dirf) ;; Avoid possible loops.
+ (vc-file-tree-walk-internal dirf func args)))))
(directory-files dir)))))
(provide 'vc)
diff --git a/lisp/vcursor.el b/lisp/vcursor.el
index b8c93f64ff5..a05bb3c60c5 100644
--- a/lisp/vcursor.el
+++ b/lisp/vcursor.el
@@ -268,7 +268,7 @@
;; and also as usual \C-h in this map will list the key definitions, which
;; are designed to be easy to remember.
;;
-;; A special feature is provided by (vcursor-toggle-vcursor-map), bound
+;; A special feature is provided by (vcursor-use-vcursor-map), bound
;; to t in that keymap. With this in effect, the main keymap
;; is overridden by the vcursor map, so keys like \C-p and so on
;; move the vcursor instead. Remember how to turn it off (type t),
@@ -336,7 +336,7 @@
:group 'vcursor)
(defcustom vcursor-auto-disable nil
- "*If non-nil, disable the virtual cursor after use.
+ "If non-nil, disable the virtual cursor after use.
Any non-vcursor command will force `vcursor-disable' to be called.
If non-nil but not t, just make sure copying is toggled off, but don't
disable the vcursor."
@@ -344,7 +344,7 @@ disable the vcursor."
:group 'vcursor)
(defcustom vcursor-modifiers (list 'control 'shift)
- "*A list of modifiers that are used to define vcursor key bindings."
+ "A list of modifiers that are used to define vcursor key bindings."
:type '(repeat symbol)
:group 'vcursor)
@@ -464,7 +464,7 @@ on loading vcursor and from the customize package."
)))
(defcustom vcursor-key-bindings nil
- "*How to bind keys when vcursor is loaded.
+ "How to bind keys when vcursor is loaded.
If t, guess; if `xterm', use bindings suitable for an X terminal; if
`oemacs', use bindings which work on a PC with Oemacs. If nil, don't
define any key bindings.
@@ -476,7 +476,7 @@ Default is nil."
:version "20.3")
(defcustom vcursor-interpret-input nil
- "*If non-nil, input from the vcursor is treated as interactive input.
+ "If non-nil, input from the vcursor is treated as interactive input.
This will cause text insertion to be much slower. Note that no special
interpretation of strings is done: \"\C-x\" is a string of four
characters. The default is simply to copy strings."
@@ -506,49 +506,48 @@ scrolling set this. It is used by the `vcursor-auto-disable' code.")
;; automatically handle any new commands using the primitives.
(defcustom vcursor-copy-flag nil
- "*Non-nil means moving vcursor should copy characters moved over to point."
+ "Non-nil means moving vcursor should copy characters moved over to point."
:type 'boolean
:group 'vcursor)
(defvar vcursor-temp-goal-column nil
"Keeps track of temporary goal columns for the virtual cursor.")
-(defvar vcursor-use-vcursor-map nil
- "Non-nil if the vcursor map is mapped directly onto the main keymap.
-See `vcursor-toggle-vcursor-map'.")
-(make-variable-buffer-local 'vcursor-use-vcursor-map)
-
-(defvar vcursor-map nil "Keymap for vcursor command.")
-(define-prefix-command 'vcursor-map)
-
-(define-key vcursor-map "t" 'vcursor-toggle-vcursor-map)
-
-(define-key vcursor-map "\C-p" 'vcursor-previous-line)
-(define-key vcursor-map "\C-n" 'vcursor-next-line)
-(define-key vcursor-map "\C-b" 'vcursor-backward-char)
-(define-key vcursor-map "\C-f" 'vcursor-forward-char)
-
-(define-key vcursor-map "\r" 'vcursor-disable)
-(define-key vcursor-map " " 'vcursor-copy)
-(define-key vcursor-map "\C-y" 'vcursor-copy-word)
-(define-key vcursor-map "\C-i" 'vcursor-toggle-copy)
-(define-key vcursor-map "<" 'vcursor-beginning-of-buffer)
-(define-key vcursor-map ">" 'vcursor-end-of-buffer)
-(define-key vcursor-map "\M-v" 'vcursor-scroll-down)
-(define-key vcursor-map "\C-v" 'vcursor-scroll-up)
-(define-key vcursor-map "o" 'vcursor-other-window)
-(define-key vcursor-map "g" 'vcursor-goto)
-(define-key vcursor-map "x" 'vcursor-swap-point)
-(define-key vcursor-map "\C-s" 'vcursor-isearch-forward)
-(define-key vcursor-map "\C-r" 'vcursor-isearch-backward)
-(define-key vcursor-map "\C-a" 'vcursor-beginning-of-line)
-(define-key vcursor-map "\C-e" 'vcursor-end-of-line)
-(define-key vcursor-map "\M-w" 'vcursor-forward-word)
-(define-key vcursor-map "\M-b" 'vcursor-backward-word)
-(define-key vcursor-map "\M-l" 'vcursor-copy-line)
-(define-key vcursor-map "c" 'vcursor-compare-windows)
-(define-key vcursor-map "k" 'vcursor-execute-key)
-(define-key vcursor-map "\M-x" 'vcursor-execute-command)
+(defvar vcursor-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "t" 'vcursor-use-vcursor-map)
+
+ (define-key map "\C-p" 'vcursor-previous-line)
+ (define-key map "\C-n" 'vcursor-next-line)
+ (define-key map "\C-b" 'vcursor-backward-char)
+ (define-key map "\C-f" 'vcursor-forward-char)
+
+ (define-key map "\r" 'vcursor-disable)
+ (define-key map " " 'vcursor-copy)
+ (define-key map "\C-y" 'vcursor-copy-word)
+ (define-key map "\C-i" 'vcursor-toggle-copy)
+ (define-key map "<" 'vcursor-beginning-of-buffer)
+ (define-key map ">" 'vcursor-end-of-buffer)
+ (define-key map "\M-v" 'vcursor-scroll-down)
+ (define-key map "\C-v" 'vcursor-scroll-up)
+ (define-key map "o" 'vcursor-other-window)
+ (define-key map "g" 'vcursor-goto)
+ (define-key map "x" 'vcursor-swap-point)
+ (define-key map "\C-s" 'vcursor-isearch-forward)
+ (define-key map "\C-r" 'vcursor-isearch-backward)
+ (define-key map "\C-a" 'vcursor-beginning-of-line)
+ (define-key map "\C-e" 'vcursor-end-of-line)
+ (define-key map "\M-w" 'vcursor-forward-word)
+ (define-key map "\M-b" 'vcursor-backward-word)
+ (define-key map "\M-l" 'vcursor-copy-line)
+ (define-key map "c" 'vcursor-compare-windows)
+ (define-key map "k" 'vcursor-execute-key)
+ (define-key map "\M-x" 'vcursor-execute-command)
+ map)
+ "Keymap for vcursor command.")
+;; This seems unused, but it was done as part of define-prefix-command,
+;; so let's keep it for now.
+(fset 'vcursor-map vcursor-map)
;; If vcursor-key-bindings is already set on loading, bind the keys now.
;; This hybrid way of doing it retains compatibility while allowing
@@ -716,8 +715,7 @@ not be visible otherwise, display it in another window."
(interactive)
(let ((buf (current-buffer)) (here (point)) (win (selected-window)))
(vcursor-goto) ; will disable the vcursor
- (save-excursion
- (set-buffer buf)
+ (with-current-buffer buf
(setq vcursor-window win)
(vcursor-move here)))
)
@@ -801,8 +799,7 @@ This is called by most of the virtual-cursor copying commands to find
out how much to copy."
(vcursor-check)
- (save-excursion
- (set-buffer (overlay-buffer vcursor-overlay))
+ (with-current-buffer (overlay-buffer vcursor-overlay)
(let ((start (goto-char (overlay-start vcursor-overlay))))
(- (progn (apply func args) (point)) start)))
)
@@ -817,6 +814,16 @@ out how much to copy."
(t (error "The virtual cursor is not active now")))
)
+(define-minor-mode vcursor-use-vcursor-map
+ "Toggle the state of the vcursor key map.
+When on, the keys defined in it are mapped directly on top of the main
+keymap, allowing you to move the vcursor with ordinary motion keys.
+An indication \"!VC\" appears in the mode list. The effect is
+local to the current buffer.
+Disabling the vcursor automatically turns this off."
+ :keymap vcursor-map
+ :lighter " !VC")
+
(defun vcursor-disable (&optional arg)
"Disable the virtual cursor.
Next time you use it, it will start from point.
@@ -844,7 +851,7 @@ not copy text until you turn it on again."
((and arg (< (prefix-numeric-value arg) 0))
(vcursor-move (point))
(setq vcursor-window (selected-window)))
- (vcursor-use-vcursor-map (vcursor-toggle-vcursor-map 0)))
+ (vcursor-use-vcursor-map (vcursor-use-vcursor-map 0)))
(setq vcursor-copy-flag nil)
)
@@ -867,8 +874,7 @@ ALL-FRAMES is also used to decide whether to split the window."
;; We don't use fancy vcursor-find-window trickery, since we're
;; quite happy to have the vcursor cycle back into the current
;; window.
- (let ((sw (selected-window))
- (win (vcursor-find-window nil nil (not all-frames))))
+ (let ((win (vcursor-find-window nil nil (not all-frames))))
(if win (select-window win))
;; else start from here
(other-window n all-frames)
@@ -891,7 +897,7 @@ If `compare-ignore-case' is non-nil, changes in case are also ignored."
;; (vcursor-window-funcall 'compare-windows arg)
(require 'compare-w)
(let* (p1 p2 maxp1 maxp2 b1 b2 w2
- success size
+ success
(opoint1 (point))
opoint2
(skip-whitespace (if ignore-whitespace
@@ -905,8 +911,7 @@ If `compare-ignore-case' is non-nil, changes in case are also ignored."
(setq p2 (point) b2 (current-buffer)))
(setq opoint2 p2)
(setq maxp1 (point-max))
- (save-excursion
- (set-buffer b2)
+ (with-current-buffer b2
(setq maxp2 (point-max)))
(setq success t)
@@ -921,7 +926,7 @@ If `compare-ignore-case' is non-nil, changes in case are also ignored."
(and skip-whitespace
(save-excursion
- (let (p1a p2a w1 w2 result1 result2)
+ (let (p1a p2a result1 result2)
(setq result1
(if (stringp skip-whitespace)
(compare-windows-skip-whitespace opoint1)
@@ -1096,8 +1101,7 @@ is called interactively, so prefix argument etc. are usable."
(interactive "p")
(vcursor-check)
(vcursor-insert
- (save-excursion
- (set-buffer (overlay-buffer vcursor-overlay))
+ (with-current-buffer (overlay-buffer vcursor-overlay)
(let* ((ostart (overlay-start vcursor-overlay))
(end (+ ostart arg)))
(prog1
@@ -1126,32 +1130,8 @@ line is treated like ordinary characters."
(vcursor-copy (if (or (= count 0) arg) (1+ count) count)))
)
-(defun vcursor-toggle-vcursor-map (&optional force noredisp)
- "Toggle the state of the vcursor key map.
-When on, the keys defined in it are mapped directly on top of the main
-keymap, allowing you to move the vcursor with ordinary motion keys.
-An indication \"!VC\" appears in the mode list. The effect is
-local to the current buffer.
-With prefix FORCE, turn on, or off if it is 0.
-With NOREDISP, don't force redisplay.
-Disabling the vcursor automatically turns this off."
- (interactive "P")
- (let ((new (cond ((not force) (not vcursor-use-vcursor-map))
- ((eq force 0) nil)
- (t))))
- (or (eq new vcursor-use-vcursor-map)
- (progn
- (setq vcursor-use-vcursor-map new)
- (or (assq 'vcursor-use-vcursor-map minor-mode-map-alist)
- (setq minor-mode-map-alist
- (cons (cons 'vcursor-use-vcursor-map vcursor-map)
- minor-mode-map-alist)))
- (or (assq 'vcursor-use-vcursor-map minor-mode-alist)
- (setq minor-mode-alist
- (cons (list 'vcursor-use-vcursor-map " !VC")
- minor-mode-alist)))
- (or noredisp (redraw-display)))))
- )
+(define-obsolete-function-alias
+ 'vcursor-toggle-vcursor-map 'vcursor-use-vcursor-map "23.1")
(defun vcursor-post-command ()
(and vcursor-auto-disable (not vcursor-last-command)
@@ -1166,5 +1146,5 @@ Disabling the vcursor automatically turns this off."
(provide 'vcursor)
-;;; arch-tag: cdfe1cdc-2c46-4046-88e4-ed57d20f7aca
+;; arch-tag: cdfe1cdc-2c46-4046-88e4-ed57d20f7aca
;;; vcursor.el ends here
diff --git a/lisp/version.el b/lisp/version.el
index 9b6f06f2eff..6d82b194ff8 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -30,7 +30,7 @@
(defconst emacs-copyright "Copyright (C) 2007 Free Software Foundation, Inc."
"Short copyright string for this version of Emacs.")
-(defconst emacs-version "22.1.50" "\
+(defconst emacs-version "23.0.50" "\
Version numbers of this version of Emacs.")
(defconst emacs-major-version
diff --git a/lisp/view.el b/lisp/view.el
index c152383a48b..ad6ca9371b8 100644
--- a/lisp/view.el
+++ b/lisp/view.el
@@ -77,11 +77,15 @@ for all scroll commands in view mode."
:type 'boolean
:group 'view)
-(defcustom view-remove-frame-by-deleting nil
+;;;###autoload
+(defcustom view-remove-frame-by-deleting t
"*Determine how View mode removes a frame no longer needed.
If nil, make an icon of the frame. If non-nil, delete the frame."
:type 'boolean
- :group 'view)
+ :group 'view
+ ;; Changed the default of this to t for Emacs 23. Users consider
+ ;; frame iconification annoying.
+ :version "23.1")
(defcustom view-exits-all-viewing-windows nil
"*Non-nil means restore all windows used to view buffer.
@@ -146,10 +150,11 @@ See RETURN-TO-ALIST argument of function `view-mode-exit' for the format of
(put 'view-return-to-alist 'permanent-local t)
(defvar view-exit-action nil
- "nil or a function with one argument (a buffer) called when finished viewing.
-This is local in each buffer being viewed.
-The \\[view-file] and \\[view-file-other-window] commands may set this to
-`kill-buffer'.")
+ "If non-nil, a function with one argument (a buffer) called when finished viewing.
+Commands like \\[view-file] and \\[view-file-other-window] may
+set this to bury or kill the viewed buffer.
+Observe that the buffer viewed might not appear in any window at
+the time this function is called.")
(make-variable-buffer-local 'view-exit-action)
(defvar view-no-disable-on-exit nil
@@ -241,11 +246,11 @@ This is local in each buffer, once it is used.")
;;;###autoload
(defun view-file (file)
"View FILE in View mode, returning to previous buffer when done.
-Emacs commands editing the buffer contents are not available; instead,
-a special set of commands (mostly letters and punctuation)
-are defined for moving around in the buffer.
+Emacs commands editing the buffer contents are not available; instead, a
+special set of commands (mostly letters and punctuation) are defined for
+moving around in the buffer.
Space scrolls forward, Delete scrolls backward.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This command runs the normal hook `view-mode-hook'."
(interactive "fView file: ")
@@ -263,12 +268,12 @@ This command runs the normal hook `view-mode-hook'."
;;;###autoload
(defun view-file-other-window (file)
"View FILE in View mode in another window.
-Return that window to its previous buffer when done.
-Emacs commands editing the buffer contents are not available; instead,
-a special set of commands (mostly letters and punctuation)
-are defined for moving around in the buffer.
+Return that window to its previous buffer when done. Emacs commands
+editing the buffer contents are not available; instead, a special set of
+commands (mostly letters and punctuation) are defined for moving around
+in the buffer.
Space scrolls forward, Delete scrolls backward.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This command runs the normal hook `view-mode-hook'."
(interactive "fIn other window view file: ")
@@ -281,11 +286,11 @@ This command runs the normal hook `view-mode-hook'."
(defun view-file-other-frame (file)
"View FILE in View mode in another frame.
Maybe delete other frame and/or return to previous buffer when done.
-Emacs commands editing the buffer contents are not available; instead,
-a special set of commands (mostly letters and punctuation)
-are defined for moving around in the buffer.
+Emacs commands editing the buffer contents are not available; instead, a
+special set of commands (mostly letters and punctuation) are defined for
+moving around in the buffer.
Space scrolls forward, Delete scrolls backward.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This command runs the normal hook `view-mode-hook'."
(interactive "fIn other frame view file: ")
@@ -298,18 +303,17 @@ This command runs the normal hook `view-mode-hook'."
;;;###autoload
(defun view-buffer (buffer &optional exit-action)
"View BUFFER in View mode, returning to previous buffer when done.
-Emacs commands editing the buffer contents are not available; instead,
-a special set of commands (mostly letters and punctuation)
-are defined for moving around in the buffer.
+Emacs commands editing the buffer contents are not available; instead, a
+special set of commands (mostly letters and punctuation) are defined for
+moving around in the buffer.
Space scrolls forward, Delete scrolls backward.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This command runs the normal hook `view-mode-hook'.
Optional argument EXIT-ACTION is either nil or a function with buffer as
-argument. This function is called when finished viewing buffer.
-Use this argument instead of explicitly setting `view-exit-action'."
-
+argument. This function is called when finished viewing buffer. Use
+this argument instead of explicitly setting `view-exit-action'."
(interactive "bView buffer: ")
(let ((undo-window (list (window-buffer) (window-start) (window-point))))
(switch-to-buffer buffer)
@@ -319,18 +323,18 @@ Use this argument instead of explicitly setting `view-exit-action'."
;;;###autoload
(defun view-buffer-other-window (buffer &optional not-return exit-action)
"View BUFFER in View mode in another window.
-Return to previous buffer when done, unless optional NOT-RETURN is non-nil.
-Emacs commands editing the buffer contents are not available; instead,
-a special set of commands (mostly letters and punctuation)
-are defined for moving around in the buffer.
+Return to previous buffer when done, unless optional NOT-RETURN is
+non-nil. Emacs commands editing the buffer contents are not available;
+instead, a special set of commands (mostly letters and punctuation) are
+defined for moving around in the buffer.
Space scrolls forward, Delete scrolls backward.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This command runs the normal hook `view-mode-hook'.
Optional argument EXIT-ACTION is either nil or a function with buffer as
-argument. This function is called when finished viewing buffer.
-Use this argument instead of explicitly setting `view-exit-action'."
+argument. This function is called when finished viewing buffer. Use
+this argument instead of explicitly setting `view-exit-action'."
(interactive "bIn other window view buffer:\nP")
(let* ((win ; This window will be selected by
(get-lru-window)) ; switch-to-buffer-other-window below.
@@ -350,18 +354,18 @@ Use this argument instead of explicitly setting `view-exit-action'."
;;;###autoload
(defun view-buffer-other-frame (buffer &optional not-return exit-action)
"View BUFFER in View mode in another frame.
-Return to previous buffer when done, unless optional NOT-RETURN is non-nil.
-Emacs commands editing the buffer contents are not available; instead,
-a special set of commands (mostly letters and punctuation)
-are defined for moving around in the buffer.
+Return to previous buffer when done, unless optional NOT-RETURN is
+non-nil. Emacs commands editing the buffer contents are not available;
+instead, a special set of commands (mostly letters and punctuation) are
+defined for moving around in the buffer.
Space scrolls forward, Delete scrolls backward.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This command runs the normal hook `view-mode-hook'.
Optional argument EXIT-ACTION is either nil or a function with buffer as
-argument. This function is called when finished viewing buffer.
-Use this argument instead of explicitly setting `view-exit-action'."
+argument. This function is called when finished viewing buffer. Use
+this argument instead of explicitly setting `view-exit-action'."
(interactive "bView buffer in other frame: \nP")
(let ((return-to
(and (not not-return) (cons (selected-window) t)))) ; Old window.
@@ -495,34 +499,73 @@ Entry to view-mode runs the normal hook `view-mode-hook'."
(setq buffer-read-only view-old-buffer-read-only)))
;;;###autoload
-(defun view-mode-enter (&optional return-to exit-action) "\
-Enter View mode and set up exit from view mode depending on optional arguments.
-If RETURN-TO is non-nil it is added as an element to the buffer local alist
-`view-return-to-alist'.
-Save EXIT-ACTION in buffer local variable `view-exit-action'.
-It should be either nil or a function that takes a buffer as argument.
-This function will be called by `view-mode-exit'.
-
-RETURN-TO is either nil, meaning do nothing when exiting view mode, or
-it has the format (WINDOW OLD-WINDOW . OLD-BUF-INFO).
-WINDOW is a window used for viewing.
-OLD-WINDOW is nil or the window to select after viewing.
-OLD-BUF-INFO tells what to do with WINDOW when exiting. It is one of:
-1) nil Do nothing.
-2) t Delete WINDOW or, if it is the only window, its frame.
+(defun view-return-to-alist-update (buffer &optional item)
+ "Update `view-return-to-alist' of buffer BUFFER.
+Remove from `view-return-to-alist' all entries referencing dead
+windows. Optional argument ITEM non-nil means add ITEM to
+`view-return-to-alist' after purging. For a decsription of items
+that can be added see the RETURN-TO-ALIST argument of the
+function `view-mode-exit'. If `view-return-to-alist' contains an
+entry for the selected window, purge that entry from
+`view-return-to-alist' before adding ITEM."
+ (with-current-buffer buffer
+ (when view-return-to-alist
+ (let* ((list view-return-to-alist)
+ entry entry-window last)
+ (while list
+ (setq entry (car list))
+ (setq entry-window (car entry))
+ (if (and (windowp entry-window)
+ (or (and item (eq entry-window (selected-window)))
+ (not (window-live-p entry-window))))
+ ;; Remove that entry.
+ (if last
+ (setcdr last (cdr list))
+ (setq view-return-to-alist
+ (cdr view-return-to-alist)))
+ ;; Leave entry alone.
+ (setq last entry))
+ (setq list (cdr list)))))
+ ;; Add ITEM.
+ (when item
+ (setq view-return-to-alist
+ (cons item view-return-to-alist)))))
+
+;;;###autoload
+(defun view-mode-enter (&optional return-to exit-action)
+ "Enter View mode and set up exit from view mode depending on optional arguments.
+RETURN-TO non-nil means add RETURN-TO as an element to the buffer
+local alist `view-return-to-alist'. Save EXIT-ACTION in buffer
+local variable `view-exit-action'. It should be either nil or a
+function that takes a buffer as argument. This function will be
+called by `view-mode-exit'.
+
+RETURN-TO is either nil, meaning do nothing when exiting view
+mode, or must have the format (WINDOW OLD-WINDOW . OLD-BUF-INFO).
+WINDOW is the window used for viewing. OLD-WINDOW is nil or the
+window to select after viewing. OLD-BUF-INFO tells what to do
+with WINDOW when exiting. It is one of:
+1) nil Do nothing.
+2) t Delete WINDOW or, if it is the only window and
+ `view-remove-frame-by-deleting' is non-nil, its
+ frame.
3) (OLD-BUFF START POINT) Display buffer OLD-BUFF with displayed text
- starting at START and point at POINT in WINDOW.
-4) quit-window Do `quit-window' in WINDOW.
+ starting at START and point at POINT in WINDOW.
+4) quit-window Do `quit-window' in WINDOW.
+5) keep-frame Like case 2) but do not delete the frame.
-For list of all View commands, type H or h while viewing.
+For a list of all View commands, type H or h while viewing.
This function runs the normal hook `view-mode-hook'."
- (if return-to
- (let ((entry (assq (car return-to) view-return-to-alist)))
- (if entry (setcdr entry (cdr return-to))
- (setq view-return-to-alist (cons return-to view-return-to-alist)))))
- (if exit-action (setq view-exit-action exit-action))
- (unless view-mode ; Do nothing if already in view mode.
+ (when return-to
+ (let ((entry (assq (car return-to) view-return-to-alist)))
+ (if entry
+ (setcdr entry (cdr return-to))
+ (setq view-return-to-alist (cons return-to view-return-to-alist)))))
+ (when exit-action
+ (setq view-exit-action exit-action))
+
+ (unless view-mode
(view-mode-enable)
(force-mode-line-update)
(unless view-inhibit-help-message
@@ -532,88 +575,106 @@ View mode: type \\[help-command] for help, \\[describe-mode] for commands, \\[Vi
(defun view-mode-exit (&optional return-to-alist exit-action all-win)
"Exit View mode in various ways, depending on optional arguments.
-RETURN-TO-ALIST, EXIT-ACTION and ALL-WIN determine what to do after exit.
-EXIT-ACTION is nil or a function that is called with current buffer as
-argument.
-RETURN-TO-ALIST is an alist that for some of the windows displaying the
-current buffer, associate information on what to do with those windows.
-If ALL-WIN or the variable `view-exits-all-viewing-windows' is non-nil,
-then all windows on RETURN-TO-ALIST are restored to their old state.
-Otherwise only the selected window is affected (if it is on RETURN-TO-ALIST).
-
-Elements of RETURN-TO-ALIST have the format (WINDOW OLD-WINDOW . OLD-BUF-INFO).
-WINDOW is a window displaying the current buffer.
-OLD-WINDOW is nil or a window to select after viewing.
-OLD-BUF-INFO is information on what to do with WINDOW and is one of:
-1) nil Do nothing.
-2) t Delete WINDOW and, if it is the only window, its frame.
+RETURN-TO-ALIST, EXIT-ACTION and ALL-WIN determine what to do
+after exit. EXIT-ACTION is nil or a function that is called with
+current buffer as argument.
+
+RETURN-TO-ALIST is an alist that, for some of the windows
+displaying the current buffer, maintains information on what to
+do when exiting those windows. If ALL-WIN is non-nil or the
+variable `view-exits-all-viewing-windows' is non-nil,
+view-mode-exit attempts to restore all windows showing the
+current buffer to their old state. Otherwise, only the selected
+window is affected (provided it is on RETURN-TO-ALIST).
+
+Elements of RETURN-TO-ALIST must have the format
+ (WINDOW OLD-WINDOW . OLD-BUF-INFO) where
+
+WINDOW is a window displaying the current buffer and OLD-WINDOW
+is either nil or a window to select after viewing. OLD-BUF-INFO
+provides information on what to do with WINDOW and may be one of:
+1) nil Do nothing.
+2) t Delete WINDOW and, if it is the only window and
+ `view-remove-frame-by-deleting' is non-nil, its
+ frame.
3) (OLD-BUF START POINT) Display buffer OLD-BUF with displayed text
- starting at START and point at POINT in WINDOW.
-4) quit-window Do `quit-window' in WINDOW.
-
-If one of the WINDOW in RETURN-TO-ALIST is the selected window and the
-corresponding OLD-WINDOW is a live window, then select OLD-WINDOW."
- (setq all-win
- (and return-to-alist (or all-win view-exits-all-viewing-windows)))
- (if view-mode ; Only do something if in view mode.
- (let* ((buffer (current-buffer))
- window notlost
- (sel-old (assq (selected-window) return-to-alist))
- (alist (cond
- (all-win ; Try to restore all windows.
- (append return-to-alist nil)) ; Copy.
- (sel-old ; Only selected window.
- (list sel-old))))
- (old-window (if sel-old (car (cdr sel-old)))))
- (if all-win ; Follow chains of old-windows.
- (let ((c (length alist)) a)
- (while (and (> c 0) ; Safety if mutually refering windows.
- (or (not (window-live-p old-window))
- (eq buffer (window-buffer old-window)))
- (setq a (assq old-window alist)))
- (setq c (1- c))
- (setq old-window (car (cdr a))))
- (if (or (zerop c) (not (window-live-p old-window)))
- (setq old-window (selected-window)))))
- (or view-no-disable-on-exit
- (view-mode-disable))
- (while alist ; Restore windows with info.
- (setq notlost nil)
- (if (and (window-live-p (setq window (car (car alist))))
+ starting at START and point at POINT in WINDOW.
+4) quit-window Do `quit-window' in WINDOW.
+5) keep-frame Like case 2) but do not delete the frame.
+
+If one of the WINDOW in RETURN-TO-ALIST is the selected window
+and the corresponding OLD-WINDOW is a live window, then select
+OLD-WINDOW."
+ (when view-mode ; Only do something if in view mode.
+ (setq all-win
+ (and return-to-alist
+ (or all-win view-exits-all-viewing-windows)))
+ (let* ((buffer (current-buffer))
+ window notlost
+ (sel-old (assq (selected-window) return-to-alist))
+ (alist (cond
+ (all-win ; Try to restore all windows.
+ (append return-to-alist nil)) ; Copy.
+ (sel-old ; Only selected window.
+ (list sel-old))))
+ (old-window (if sel-old (car (cdr sel-old)))))
+ (if all-win ; Follow chains of old-windows.
+ (let ((c (length alist)) a)
+ (while (and (> c 0) ; Safety if mutually refering windows.
+ (or (not (window-live-p old-window))
+ (eq buffer (window-buffer old-window)))
+ (setq a (assq old-window alist)))
+ (setq c (1- c))
+ (setq old-window (car (cdr a))))
+ (if (or (zerop c) (not (window-live-p old-window)))
+ (setq old-window (selected-window)))))
+ (unless view-no-disable-on-exit
+ (view-mode-disable))
+ (while alist ; Restore windows with info.
+ (setq notlost nil)
+ (when (and (window-live-p (setq window (car (car alist))))
(eq buffer (window-buffer window)))
- (let ((frame (window-frame window))
- (old-buf-info (cdr (cdr (car alist)))))
- (if all-win (select-window window))
- (cond
- ((and (consp old-buf-info) ; Case 3.
- (buffer-live-p (car old-buf-info)))
- (set-window-buffer window (car old-buf-info)) ; old-buf
- (set-window-start window (car (cdr old-buf-info)))
- (set-window-point window (car (cdr (cdr old-buf-info)))))
- ((eq old-buf-info 'quit-window)
- (quit-window)) ; Case 4.
- ((not (eq old-buf-info t)) nil) ; Not case 2, do nothing.
- ((not (one-window-p t)) (delete-window))
- ((not (eq frame (next-frame)))
- ;; Not the only frame, so can safely be removed.
- (if view-remove-frame-by-deleting
- (delete-frame frame)
- (setq notlost t) ; Keep the window. See below.
- (iconify-frame frame))))))
- ;; If a frame is removed by iconifying it, then the window is not
- ;; really lost. In this case we keep the entry in
- ;; view-return-to-alist so that if the user deiconifies the frame
- ;; and then press q, then the frame is iconified again.
- (unless notlost
+ (let ((frame (window-frame window))
+ (old-buf-info (cdr (cdr (car alist)))))
+ (if all-win (select-window window))
+ (cond
+ ((and (consp old-buf-info) ; Case 3.
+ (buffer-live-p (car old-buf-info)))
+ (set-window-buffer window (car old-buf-info)) ; old-buf
+ (set-window-start window (car (cdr old-buf-info)))
+ (set-window-point window (car (cdr (cdr old-buf-info)))))
+ ((eq old-buf-info 'quit-window)
+ (quit-window)) ; Case 4.
+ (old-buf-info ; Case 2 or 5.
+ (cond
+ ((not (one-window-p t)) ; Not only window.
+ (delete-window))
+ ((eq old-buf-info 'keep-frame) ; Case 5.
+ (bury-buffer))
+ ((not (eq frame (next-frame))) ; Case 2 and only window.
+ ;; Not the only frame, so can safely be removed.
+ (if view-remove-frame-by-deleting
+ (delete-frame frame)
+ (setq notlost t) ; Keep the window. See below.
+ (iconify-frame frame))))))))
+ ;; If a frame is removed by iconifying it, the window is not
+ ;; really lost. In this case we keep the entry in
+ ;; `view-return-to-alist' so that if the user deiconifies the
+ ;; frame and then hits q, the frame is iconified again.
+ (unless notlost
+ (with-current-buffer buffer
(setq view-return-to-alist
- (delete (car alist) view-return-to-alist)))
- (setq alist (cdr alist)))
- (if (window-live-p old-window) ; still existing window
- (select-window old-window))
- (when exit-action
- (setq view-exit-action nil)
- (funcall exit-action buffer))
- (force-mode-line-update))))
+ (delete (car alist) view-return-to-alist))))
+ (setq alist (cdr alist)))
+ (when (window-live-p old-window)
+ ;; old-window is still alive => select it.
+ (select-window old-window))
+ (when exit-action
+ ;; Don't do that: If the user wants to quit the *Help* buffer a
+ ;; second time it won't have any effect.
+;;; (setq view-exit-action nil)
+ (funcall exit-action buffer))
+ (force-mode-line-update))))
(defun View-exit ()
"Exit View mode but stay in current buffer."
diff --git a/lisp/vms-patch.el b/lisp/vms-patch.el
index acc76c27171..39cec28d88d 100644
--- a/lisp/vms-patch.el
+++ b/lisp/vms-patch.el
@@ -27,6 +27,8 @@
;;; Code:
+(defvar print-region-function)
+
(setq auto-mode-alist (cons '(("\\.com\\'" . dcl-mode)) auto-mode-alist))
;;; Functions that need redefinition
diff --git a/lisp/vmsproc.el b/lisp/vmsproc.el
index e36400476f4..92df327dde1 100644
--- a/lisp/vmsproc.el
+++ b/lisp/vmsproc.el
@@ -122,11 +122,11 @@ line to the last line for resubmission."
(send-command-to-subprocess 1 current-line)
(if command-prefix-string
(progn (beginning-of-line) (insert command-prefix-string)))
- (next-line 1))))
+ (forward-line 1))))
;; else -- if not at last line in buffer
(goto-char (point-max))
(backward-char)
- (next-line 1)
+ (forward-line 1)
(insert
(if (compare-strings command-prefix-string nil nil
current-line 0 (length command-prefix-string))
@@ -141,5 +141,7 @@ line to the last line for resubmission."
(define-key esc-map "$" 'subprocess-command)
+(provide 'vmsproc)
+
;; arch-tag: 600b2512-f903-4887-bcd2-e76b306f5b66
;;; vmsproc.el ends here
diff --git a/lisp/w32-fns.el b/lisp/w32-fns.el
index 6826cc47f86..174a31d338c 100644
--- a/lisp/w32-fns.el
+++ b/lisp/w32-fns.el
@@ -34,14 +34,51 @@
;; audio bell initialized.
;;; Code:
+(require 'w32-vars)
(defvar explicit-shell-file-name)
-;; Map delete and backspace
-(define-key function-key-map [backspace] "\177")
-(define-key function-key-map [delete] "\C-d")
-(define-key function-key-map [M-backspace] [?\M-\177])
-(define-key function-key-map [C-M-backspace] [\C-\M-delete])
+;;;; Function keys
+
+(defvar x-alternatives-map
+ (let ((map (make-sparse-keymap)))
+ ;; Map certain keypad keys into ASCII characters that people usually expect.
+ (define-key map [backspace] [127])
+ (define-key map [delete] [127])
+ (define-key map [tab] [?\t])
+ (define-key map [linefeed] [?\n])
+ (define-key map [clear] [?\C-l])
+ (define-key map [return] [?\C-m])
+ (define-key map [escape] [?\e])
+ (define-key map [M-backspace] [?\M-\d])
+ (define-key map [M-delete] [?\M-\d])
+ (define-key map [M-tab] [?\M-\t])
+ (define-key map [M-linefeed] [?\M-\n])
+ (define-key map [M-clear] [?\M-\C-l])
+ (define-key map [M-return] [?\M-\C-m])
+ (define-key map [M-escape] [?\M-\e])
+ (define-key map [iso-lefttab] [backtab])
+ (define-key map [S-iso-lefttab] [backtab])
+ map)
+ "Keymap of possible alternative meanings for some keys.")
+
+(defun x-setup-function-keys (frame)
+ "Set up `function-key-map' on FRAME for w32."
+ ;; Don't do this twice on the same display, or it would break
+ ;; normal-erase-is-backspace-mode.
+ (unless (terminal-parameter frame 'x-setup-function-keys)
+ ;; Map certain keypad keys into ASCII characters that people usually expect.
+ (with-selected-frame frame
+ (let ((map (copy-keymap x-alternatives-map)))
+ (set-keymap-parent map (keymap-parent local-function-key-map))
+ (set-keymap-parent local-function-key-map map)))
+ (set-terminal-parameter frame 'x-setup-function-keys t)))
+
+(declare-function set-message-beep) ;; Defined in C.
+(declare-function w32-get-clipboard-data) ;; Defined in C.
+(declare-function w32-get-locale-info) ;; Defined in C.
+(declare-function w32-get-valid-locale-ids) ;; Defined in C.
+(declare-function w32-set-clipboard-data) ;; Defined in C.
;; Ignore case on file-name completion
(setq completion-ignore-case t)
@@ -81,6 +118,8 @@ That includes all Windows systems except for 9X/Me."
'("cmdproxy" "cmdproxy.exe"))
(w32-system-shell-p (getenv "COMSPEC")))))
+(defvar w32-quote-process-args) ;; defined in w32proc.c
+
(defun w32-check-shell-configuration ()
"Check the configuration of shell variables on Windows NT/9X.
This function is invoked after loading the init files and processing
@@ -307,25 +346,6 @@ This function is provided for backward compatibility, since
(global-set-key [lwindow] 'ignore)
(global-set-key [rwindow] 'ignore)
-;; Map certain keypad keys into ASCII characters
-;; that people usually expect.
-(define-key function-key-map [tab] [?\t])
-(define-key function-key-map [linefeed] [?\n])
-(define-key function-key-map [clear] [11])
-(define-key function-key-map [return] [13])
-(define-key function-key-map [escape] [?\e])
-(define-key function-key-map [M-tab] [?\M-\t])
-(define-key function-key-map [M-linefeed] [?\M-\n])
-(define-key function-key-map [M-clear] [?\M-\013])
-(define-key function-key-map [M-return] [?\M-\015])
-(define-key function-key-map [M-escape] [?\M-\e])
-
-;; These don't do the right thing (voelker)
-;(define-key function-key-map [backspace] [127])
-;(define-key function-key-map [delete] [127])
-;(define-key function-key-map [M-backspace] [?\M-\d])
-;(define-key function-key-map [M-delete] [?\M-\d])
-
;; These tell read-char how to convert
;; these special chars to ASCII.
(put 'tab 'ascii-character ?\t)
@@ -336,28 +356,6 @@ This function is provided for backward compatibility, since
(put 'backspace 'ascii-character 127)
(put 'delete 'ascii-character 127)
-;; W32 uses different color indexes than standard:
-
-(defvar w32-tty-standard-colors
- '(("black" 0 0 0 0)
- ("blue" 1 0 0 52480) ; MediumBlue
- ("green" 2 8704 35584 8704) ; ForestGreen
- ("cyan" 3 0 52736 53504) ; DarkTurquoise
- ("red" 4 45568 8704 8704) ; FireBrick
- ("magenta" 5 35584 0 35584) ; DarkMagenta
- ("brown" 6 40960 20992 11520) ; Sienna
- ("lightgray" 7 48640 48640 48640) ; Gray
- ("darkgray" 8 26112 26112 26112) ; Gray40
- ("lightblue" 9 0 0 65535) ; Blue
- ("lightgreen" 10 0 65535 0) ; Green
- ("lightcyan" 11 0 65535 65535) ; Cyan
- ("lightred" 12 65535 0 0) ; Red
- ("lightmagenta" 13 65535 0 65535) ; Magenta
- ("yellow" 14 65535 65535 0) ; Yellow
- ("white" 15 65535 65535 65535))
-"A list of VGA console colors, their indices and 16-bit RGB values.")
-
-
(defun w32-add-charset-info (xlfd-charset windows-charset codepage)
"Function to add character sets to display with Windows fonts.
Creates entries in `w32-charset-info-alist'.
diff --git a/lisp/w32-vars.el b/lisp/w32-vars.el
index 5eaac3ac3cb..d907f6bcf42 100644
--- a/lisp/w32-vars.el
+++ b/lisp/w32-vars.el
@@ -155,6 +155,7 @@ This is in addition to the primary selection."
:type 'boolean
:group 'killing)
+(provide 'w32-vars)
;;; arch-tag: ee2394fb-9db7-4c15-a8f0-66b47f4a2bb1
;;; w32-vars.el ends here
diff --git a/lisp/wdired.el b/lisp/wdired.el
index 37dc73dd408..a76ac809feb 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -106,7 +106,6 @@
(eval-when-compile (require 'cl))
(require 'dired)
(autoload 'dired-do-create-files-regexp "dired-aux")
-(autoload 'dired-call-process "dired-aux")
(defgroup wdired nil
"Mode to rename files by editing their names in dired buffers."
@@ -131,8 +130,8 @@ is not nil."
"If t, the \"up\" and \"down\" movement works as in Dired mode.
That is, always move the point to the beginning of the filename at line.
-If `sometimes, only move to the beginning of filename if the point is
-before it, and `track-eol' is honored. This behavior is very handy
+If `sometimes', only move to the beginning of filename if the point is
+before it, and `track-eol' is non-nil. This behavior is very handy
when editing several filenames.
If nil, \"up\" and \"down\" movement is done as in any other buffer."
@@ -176,6 +175,7 @@ program `dired-chmod-program', which must exist."
(define-key map "\C-c\C-c" 'wdired-finish-edit)
(define-key map "\C-c\C-k" 'wdired-abort-changes)
(define-key map "\C-c\C-[" 'wdired-abort-changes)
+ (define-key map "\C-x\C-q" 'wdired-exit)
(define-key map "\C-m" 'ignore)
(define-key map "\C-j" 'ignore)
(define-key map "\C-o" 'ignore)
@@ -424,6 +424,22 @@ non-nil means return old filename."
(set-buffer-modified-p nil)
(setq buffer-undo-list nil))
+(defun wdired-exit ()
+ "Exit wdired and return to dired mode.
+Just return to dired mode if there are no changes. Otherwise,
+ask a yes-or-no question whether to save or cancel changes,
+and proceed depending on the answer."
+ (interactive)
+ (if (buffer-modified-p)
+ (if (y-or-n-p (format "Buffer %s modified; save changes? "
+ (current-buffer)))
+ (wdired-finish-edit)
+ (wdired-abort-changes))
+ (wdired-change-to-dired-mode)
+ (set-buffer-modified-p nil)
+ (setq buffer-undo-list nil)
+ (message "(No changes need to be saved)")))
+
;; Rename a file, searching it in a modified dired buffer, in order
;; to be able to use `dired-do-create-files-regexp' and get its
;; "benefits".
@@ -483,7 +499,7 @@ Optional arguments are ignored."
See `wdired-use-dired-vertical-movement'. Optional prefix ARG
says how many lines to move; default is one line."
(interactive "p")
- (next-line arg)
+ (with-no-warnings (next-line arg))
(if (or (eq wdired-use-dired-vertical-movement t)
(and wdired-use-dired-vertical-movement
(< (current-column)
@@ -496,7 +512,7 @@ says how many lines to move; default is one line."
See `wdired-use-dired-vertical-movement'. Optional prefix ARG
says how many lines to move; default is one line."
(interactive "p")
- (previous-line arg)
+ (with-no-warnings (previous-line arg))
(if (or (eq wdired-use-dired-vertical-movement t)
(and wdired-use-dired-vertical-movement
(< (current-column)
@@ -684,7 +700,7 @@ Like original function but it skips read-only words."
(new-bit "-")
(pos-prop (- (point) (- (current-column) wdired-col-perm))))
(if (eq (char-after (point)) ?-)
- (setq new-bit
+ (setq new-bit
(if (= (% (- (current-column) wdired-col-perm) 3) 0) "r"
(if (= (% (- (current-column) wdired-col-perm) 3) 1) "w"
"x"))))
@@ -744,8 +760,8 @@ Like original function but it skips read-only words."
(progn
(setq perm-tmp
(int-to-string (wdired-perms-to-number perms-new)))
- (unless (equal 0 (dired-call-process dired-chmod-program
- t perm-tmp filename))
+ (unless (equal 0 (process-file dired-chmod-program
+ nil nil nil perm-tmp filename))
(setq errors (1+ errors))
(dired-log (concat dired-chmod-program " " perm-tmp
" `" filename "' failed\n\n"))))
diff --git a/lisp/whitespace.el b/lisp/whitespace.el
index 9c3a6cc18d8..f6c94534a00 100644
--- a/lisp/whitespace.el
+++ b/lisp/whitespace.el
@@ -709,7 +709,9 @@ periodically for whitespace."
If timer is not set, then set it to scan the files in
`whitespace-all-buffer-files' periodically (defined by
`whitespace-rescan-timer-time') for whitespace creep."
- (if (and whitespace-rescan-timer-time (not whitespace-rescan-timer))
+ (if (and whitespace-rescan-timer-time
+ (/= whitespace-rescan-timer-time 0)
+ (not whitespace-rescan-timer))
(setq whitespace-rescan-timer
(add-timeout whitespace-rescan-timer-time
'whitespace-rescan-files-in-buffers nil
diff --git a/lisp/wid-browse.el b/lisp/wid-browse.el
index ec702f7b45c..f0dab6626ac 100644
--- a/lisp/wid-browse.el
+++ b/lisp/wid-browse.el
@@ -40,14 +40,13 @@
;;; The Mode.
-(defvar widget-browse-mode-map nil
+(defvar widget-browse-mode-map
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map widget-keymap)
+ (define-key map "q" 'bury-buffer)
+ map)
"Keymap for `widget-browse-mode'.")
-(unless widget-browse-mode-map
- (setq widget-browse-mode-map (make-sparse-keymap))
- (set-keymap-parent widget-browse-mode-map widget-keymap)
- (define-key widget-browse-mode-map "q" 'bury-buffer))
-
(easy-menu-define widget-browse-mode-customize-menu
widget-browse-mode-map
"Menu used in widget browser buffers."
@@ -265,38 +264,21 @@ VALUE is assumed to be a list of widgets."
;;; Widget Minor Mode.
-(defvar widget-minor-mode nil
- "If non-nil, we are in Widget Minor Mode.")
-(make-variable-buffer-local 'widget-minor-mode)
-
-(defvar widget-minor-mode-map nil
+(defvar widget-minor-mode-map
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map widget-keymap)
+ map)
"Keymap used in Widget Minor Mode.")
-(unless widget-minor-mode-map
- (setq widget-minor-mode-map (make-sparse-keymap))
- (set-keymap-parent widget-minor-mode-map widget-keymap))
-
;;;###autoload
-(defun widget-minor-mode (&optional arg)
+(define-minor-mode widget-minor-mode
"Togle minor mode for traversing widgets.
With arg, turn widget mode on if and only if arg is positive."
- (interactive "P")
- (cond ((null arg)
- (setq widget-minor-mode (not widget-minor-mode)))
- ((<= arg 0)
- (setq widget-minor-mode nil))
- (t
- (setq widget-minor-mode t)))
- (force-mode-line-update))
-
-(add-to-list 'minor-mode-alist '(widget-minor-mode " Widget"))
-
-(add-to-list 'minor-mode-map-alist
- (cons 'widget-minor-mode widget-minor-mode-map))
+ :lighter " Widget")
;;; The End:
(provide 'wid-browse)
-;;; arch-tag: d5ffb18f-8984-4735-8502-edf70456db21
+;; arch-tag: d5ffb18f-8984-4735-8502-edf70456db21
;;; wid-browse.el ends here
diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
index 50df4bd56c6..48d74b4fb25 100644
--- a/lisp/wid-edit.el
+++ b/lisp/wid-edit.el
@@ -1450,7 +1450,7 @@ The value of the :type attribute should be an unconverted widget type."
(defun widget-default-complete (widget)
"Call the value of the :complete-function property of WIDGET.
-If that does not exists, call the value of `widget-complete-field'."
+If that does not exist, call the value of `widget-complete-field'."
(call-interactively (or (widget-get widget :complete-function)
widget-complete-field)))
@@ -1503,6 +1503,8 @@ If that does not exists, call the value of `widget-complete-field'."
(delete-backward-char 1))
(insert ?\n)
(setq doc-end (point)))))
+ ((eq escape ?h)
+ (widget-add-documentation-string-button widget))
((eq escape ?v)
(if (and button-begin (not button-end))
(widget-apply widget :value-create)
@@ -1528,44 +1530,7 @@ If that does not exists, call the value of `widget-complete-field'."
(widget-clear-undo))
(defun widget-default-format-handler (widget escape)
- ;; We recognize the %h escape by default.
- (let* ((buttons (widget-get widget :buttons)))
- (cond ((eq escape ?h)
- (let* ((doc-property (widget-get widget :documentation-property))
- (doc-try (cond ((widget-get widget :doc))
- ((functionp doc-property)
- (funcall doc-property
- (widget-get widget :value)))
- ((symbolp doc-property)
- (documentation-property
- (widget-get widget :value)
- doc-property))))
- (doc-text (and (stringp doc-try)
- (> (length doc-try) 1)
- doc-try))
- (doc-indent (widget-get widget :documentation-indent)))
- (when doc-text
- (and (eq (preceding-char) ?\n)
- (widget-get widget :indent)
- (insert-char ?\s (widget-get widget :indent)))
- ;; The `*' in the beginning is redundant.
- (when (eq (aref doc-text 0) ?*)
- (setq doc-text (substring doc-text 1)))
- ;; Get rid of trailing newlines.
- (when (string-match "\n+\\'" doc-text)
- (setq doc-text (substring doc-text 0 (match-beginning 0))))
- (push (widget-create-child-and-convert
- widget 'documentation-string
- :indent (cond ((numberp doc-indent )
- doc-indent)
- ((null doc-indent)
- nil)
- (t 0))
- doc-text)
- buttons))))
- (t
- (error "Unknown escape `%c'" escape)))
- (widget-put widget :buttons buttons)))
+ (error "Unknown escape `%c'" escape))
(defun widget-default-button-face-get (widget)
;; Use :button-face or widget-button-face
@@ -1677,13 +1642,32 @@ If that does not exists, call the value of `widget-complete-field'."
(widget-default-action widget event))
(defun widget-default-prompt-value (widget prompt value unbound)
- "Read an arbitrary value. Stolen from `set-variable'."
-;; (let ((initial (if unbound
-;; nil
-;; It would be nice if we could do a `(cons val 1)' here.
-;; (prin1-to-string (custom-quote value))))))
+ "Read an arbitrary value."
(eval-minibuffer prompt))
+(defun widget-docstring (widget)
+ "Return the documentation string specificied by WIDGET, or nil if none.
+If WIDGET has a `:doc' property, that specifies the documentation string.
+Otherwise, try the `:documentation-property' property. If this
+is a function, call it with the widget's value as an argument; if
+it is a symbol, use this symbol together with the widget's value
+as the argument to `documentation-property'."
+ (let ((doc (or (widget-get widget :doc)
+ (let ((doc-prop (widget-get widget :documentation-property))
+ (value (widget-get widget :value)))
+ (cond ((functionp doc-prop)
+ (funcall doc-prop value))
+ ((symbolp doc-prop)
+ (documentation-property value doc-prop)))))))
+ (when (and (stringp doc) (> (length doc) 0))
+ ;; Remove any redundant `*' in the beginning.
+ (when (eq (aref doc 0) ?*)
+ (setq doc (substring doc 1)))
+ ;; Remove trailing newlines.
+ (when (string-match "\n+\\'" doc)
+ (setq doc (substring doc 0 (match-beginning 0))))
+ doc)))
+
;;; The `item' Widget.
(define-widget 'item 'default
@@ -2925,7 +2909,8 @@ link for that string."
"A documentation string."
:format "%v"
:action 'widget-documentation-string-action
- :value-create 'widget-documentation-string-value-create)
+ :value-create 'widget-documentation-string-value-create
+ :visibility-widget 'visibility)
(defun widget-documentation-string-value-create (widget)
;; Insert documentation string.
@@ -2937,11 +2922,13 @@ link for that string."
(let ((before (substring doc 0 (match-beginning 0)))
(after (substring doc (match-beginning 0)))
button)
+ (when (and indent (not (zerop indent)))
+ (insert-char ?\s indent))
(insert before ?\s)
(widget-documentation-link-add widget start (point))
(setq button
(widget-create-child-and-convert
- widget 'visibility
+ widget (widget-get widget :visibility-widget)
:help-echo "Show or hide rest of the documentation."
:on "Hide Rest"
:off "More"
@@ -2955,6 +2942,8 @@ link for that string."
(insert after)
(widget-documentation-link-add widget start (point)))
(widget-put widget :buttons (list button)))
+ (when (and indent (not (zerop indent)))
+ (insert-char ?\s indent))
(insert doc)
(widget-documentation-link-add widget start (point))))
(insert ?\n))
@@ -2966,6 +2955,29 @@ link for that string."
(not (widget-get parent :documentation-shown))))
;; Redraw.
(widget-value-set widget (widget-value widget)))
+
+(defun widget-add-documentation-string-button (widget &rest args)
+ "Insert a new `documentation-string' widget based on WIDGET.
+The new widget becomes a child of WIDGET, and is also added to
+its `:buttons' list. The documentation string is found from
+WIDGET using the function `widget-docstring'.
+Optional ARGS specifies additional keyword arguments for the
+`documentation-string' widget."
+ (let ((doc (widget-docstring widget))
+ (indent (widget-get widget :indent))
+ (doc-indent (widget-get widget :documentation-indent)))
+ (when doc
+ (and (eq (preceding-char) ?\n)
+ indent
+ (insert-char ?\s indent))
+ (unless (or (numberp doc-indent) (null doc-indent))
+ (setq doc-indent 0))
+ (widget-put widget :buttons
+ (cons (apply 'widget-create-child-and-convert
+ widget 'documentation-string
+ :indent doc-indent
+ (nconc args (list doc)))
+ (widget-get widget :buttons))))))
;;; The Sexp Widgets.
diff --git a/lisp/window.el b/lisp/window.el
index 0626625ec86..94e4b48a3a7 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -57,15 +57,15 @@ BODY remains selected."
;; select-window changes frame-selected-window for whatever
;; frame that window is in.
(save-selected-window-alist
- (mapcar (lambda (frame) (list frame (frame-selected-window frame)))
+ (mapcar (lambda (frame) (cons frame (frame-selected-window frame)))
(frame-list))))
(save-current-buffer
(unwind-protect
(progn ,@body)
(dolist (elt save-selected-window-alist)
(and (frame-live-p (car elt))
- (window-live-p (cadr elt))
- (set-frame-selected-window (car elt) (cadr elt))))
+ (window-live-p (cdr elt))
+ (set-frame-selected-window (car elt) (cdr elt))))
(if (window-live-p save-selected-window-window)
(select-window save-selected-window-window))))))
@@ -396,11 +396,15 @@ subtree is balanced."
(defun bw-adjust-window (window delta horizontal)
"Wrapper around `adjust-window-trailing-edge' with error checking.
Arguments WINDOW, DELTA and HORIZONTAL are passed on to that function."
- (condition-case err
- (adjust-window-trailing-edge window delta horizontal)
- (error
- ;;(message "adjust: %s" (error-message-string err))
- )))
+ ;; `adjust-window-trailing-edge' may fail if delta is too large.
+ (while (>= (abs delta) 1)
+ (condition-case err
+ (progn
+ (adjust-window-trailing-edge window delta horizontal)
+ (setq delta 0))
+ (error
+ ;;(message "adjust: %s" (error-message-string err))
+ (setq delta (/ delta 2))))))
(defun bw-balance-sub (wt w h)
(setq wt (bw-refresh-edges wt))
@@ -423,6 +427,99 @@ Arguments WINDOW, DELTA and HORIZONTAL are passed on to that function."
(dolist (c childs)
(bw-balance-sub c cw ch)))))
+;;; A different solution to balance-windows
+
+(defun window-fixed-size-p (&optional window direction)
+ "Non-nil if WINDOW cannot be resized in DIRECTION.
+DIRECTION can be nil (i.e. any), `height' or `width'."
+ (with-current-buffer (window-buffer window)
+ (let ((fixed (and (boundp 'window-size-fixed) window-size-fixed)))
+ (when fixed
+ (not (and direction
+ (member (cons direction window-size-fixed)
+ '((height . width) (width . height)))))))))
+
+(defvar window-area-factor 1
+ "Factor by which the window area should be over-estimated.
+This is used by `balance-windows-area'.
+Changing this globally has no effect.")
+
+(defun balance-windows-area ()
+ "Make all visible windows the same area (approximately).
+See also `window-area-factor' to change the relative size of specific buffers."
+ (interactive)
+ (let* ((unchanged 0) (carry 0) (round 0)
+ ;; Remove fixed-size windows.
+ (wins (delq nil (mapcar (lambda (win)
+ (if (not (window-fixed-size-p win)) win))
+ (window-list nil 'nomini))))
+ (changelog nil)
+ next)
+ ;; Resizing a window changes the size of surrounding windows in complex
+ ;; ways, so it's difficult to balance them all. The introduction of
+ ;; `adjust-window-trailing-edge' made it a bit easier, but it is still
+ ;; very difficult to do. `balance-window' above takes an off-line
+ ;; approach: get the whole window tree, then balance it, then try to
+ ;; adjust the windows so they fit the result.
+ ;; Here, instead, we take a "local optimization" approach, where we just
+ ;; go through all the windows several times until nothing needs to be
+ ;; changed. The main problem with this approach is that it's difficult
+ ;; to make sure it terminates, so we use some heuristic to try and break
+ ;; off infinite loops.
+ ;; After a round without any change, we allow a second, to give a chance
+ ;; to the carry to propagate a minor imbalance from the end back to
+ ;; the beginning.
+ (while (< unchanged 2)
+ ;; (message "New round")
+ (setq unchanged (1+ unchanged) round (1+ round))
+ (dolist (win wins)
+ (setq next win)
+ (while (progn (setq next (next-window next))
+ (window-fixed-size-p next)))
+ ;; (assert (eq next (or (cadr (member win wins)) (car wins))))
+ (let* ((horiz
+ (< (car (window-edges win)) (car (window-edges next))))
+ (areadiff (/ (- (* (window-height next) (window-width next)
+ (buffer-local-value 'window-area-factor
+ (window-buffer next)))
+ (* (window-height win) (window-width win)
+ (buffer-local-value 'window-area-factor
+ (window-buffer win))))
+ (max (buffer-local-value 'window-area-factor
+ (window-buffer win))
+ (buffer-local-value 'window-area-factor
+ (window-buffer next)))))
+ (edgesize (if horiz
+ (+ (window-height win) (window-height next))
+ (+ (window-width win) (window-width next))))
+ (diff (/ areadiff edgesize)))
+ (when (zerop diff)
+ ;; Maybe diff is actually closer to 1 than to 0.
+ (setq diff (/ (* 3 areadiff) (* 2 edgesize))))
+ (when (and (zerop diff) (not (zerop areadiff)))
+ (setq diff (/ (+ areadiff carry) edgesize))
+ ;; Change things smoothly.
+ (if (or (> diff 1) (< diff -1)) (setq diff (/ diff 2))))
+ (if (zerop diff)
+ ;; Make sure negligible differences don't accumulate to
+ ;; become significant.
+ (setq carry (+ carry areadiff))
+ (bw-adjust-window win diff horiz)
+ ;; (sit-for 0.5)
+ (let ((change (cons win (window-edges win))))
+ ;; If the same change has been seen already for this window,
+ ;; we're most likely in an endless loop, so don't count it as
+ ;; a change.
+ (unless (member change changelog)
+ (push change changelog)
+ (setq unchanged 0 carry 0)))))))
+ ;; We've now basically balanced all the windows.
+ ;; But there may be some minor off-by-one imbalance left over,
+ ;; so let's do some fine tuning.
+ ;; (bw-finetune wins)
+ ;; (message "Done in %d rounds" round)
+ ))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; I think this should be the default; I think people will prefer it--rms.
@@ -645,10 +742,7 @@ header-line."
;; desired-height lines, constrained by MIN-HEIGHT and MAX-HEIGHT.
(- (max (min desired-height max-height)
(or min-height window-min-height))
- window-height))
- ;; We do our own height checking, so avoid any restrictions due to
- ;; window-min-height.
- (window-min-height 1))
+ window-height)))
;; Don't try to redisplay with the cursor at the end
;; on its own line--that would force a scroll and spoil things.
@@ -785,6 +879,44 @@ and the buffer that is killed or buried is the one in that window."
;; Maybe get rid of the window.
(and window (not window-handled) (not window-solitary)
(delete-window window))))
+
+(defvar recenter-last-op nil
+ "Indicates the last recenter operation performed.
+Possible values: `top', `middle', `bottom'.")
+
+(defun recenter-top-bottom (&optional arg)
+ "Move current line to window center, top, and bottom, successively.
+With a prefix argument, this is the same as `recenter':
+ With numeric prefix ARG, move current line to window-line ARG.
+ With plain `C-u', move current line to window center.
+
+Otherwise move current line to window center on first call, and to
+top, middle, or bottom on successive calls.
+
+The starting position of the window determines the cycling order:
+ If initially in the top or middle third: top -> middle -> bottom.
+ If initially in the bottom third: bottom -> middle -> top.
+
+Top and bottom destinations are actually `scroll-conservatively' lines
+from true window top and bottom."
+ (interactive "P")
+ (cond
+ (arg (recenter arg)) ; Always respect ARG.
+ ((not (eq this-command last-command))
+ ;; First time - save mode and recenter.
+ (let ((bottom (1+ (count-lines 1 (window-end))))
+ (current (1+ (count-lines 1 (point))))
+ (total (window-height)))
+ (setq recenter-last-op 'middle)
+ (recenter)))
+ (t ;; repeat: loop through various options.
+ (setq recenter-last-op
+ (ecase recenter-last-op
+ (middle (recenter scroll-conservatively) 'top)
+ (top (recenter (1- (- scroll-conservatively))) 'bottom)
+ (bottom (recenter) 'middle))))))
+
+(define-key global-map [?\C-l] 'recenter-top-bottom)
(defvar mouse-autoselect-window-timer nil
"Timer used by delayed window autoselection.")
diff --git a/lisp/woman.el b/lisp/woman.el
index 4d50b5d3f2e..876fd6fc311 100644
--- a/lisp/woman.el
+++ b/lisp/woman.el
@@ -502,7 +502,7 @@ As a special case, if PATHS is nil then replace it by calling
;; Assume no `cygpath' program available.
;; Hack /cygdrive/x/ or /x/ or (obsolete) //x/ to x:/
(when (string-match "\\`\\(/cygdrive\\|/\\)?/./" file)
- (if (match-string 1) ; /cygdrive/x/ or //x/ -> /x/
+ (if (match-beginning 1) ; /cygdrive/x/ or //x/ -> /x/
(setq file (substring file (match-end 1))))
(aset file 0 (aref file 1)) ; /x/ -> xx/
(aset file 1 ?:)) ; xx/ -> x:/
@@ -520,19 +520,19 @@ As a special case, if PATHS is nil then replace it by calling
:group 'help)
(defcustom woman-show-log nil
- "*If non-nil then show the *WoMan-Log* buffer if appropriate.
+ "If non-nil then show the *WoMan-Log* buffer if appropriate.
I.e. if any warning messages are written to it. Default is nil."
:type 'boolean
:group 'woman)
(defcustom woman-pre-format-hook nil
- "*Hook run by WoMan immediately before formatting a buffer.
+ "Hook run by WoMan immediately before formatting a buffer.
Change only via `Customization' or the function `add-hook'."
:type 'hook
:group 'woman)
(defcustom woman-post-format-hook nil
- "*Hook run by WoMan immediately after formatting a buffer.
+ "Hook run by WoMan immediately after formatting a buffer.
Change only via `Customization' or the function `add-hook'."
:type 'hook
:group 'woman)
@@ -550,7 +550,7 @@ Change only via `Customization' or the function `add-hook'."
(if (eq system-type 'windows-nt)
(mapcar 'woman-Cyg-to-Win path)
path))
- "*List of dirs to search and/or files to try for man config file.
+ "List of dirs to search and/or files to try for man config file.
A trailing separator (`/' for UNIX etc.) on directories is
optional, and the filename is used if a directory specified is
the first to start with \"man\" and has an extension starting
@@ -595,7 +595,7 @@ or
MANPATH_MAP[ \t]+\\(\\S-+\\)[ \t]+\\(\\S-+\\)\\)" nil t)
(add-to-list 'manpath
(if (match-beginning 1)
- (match-string 1)
+ (match-string 1)
(cons (match-string 2)
(match-string 3)))))
manpath))
@@ -606,7 +606,7 @@ MANPATH_MAP[ \t]+\\(\\S-+\\)[ \t]+\\(\\S-+\\)\\)" nil t)
(defcustom woman-manpath
(or (woman-parse-colon-path (getenv "MANPATH"))
'("/usr/man" "/usr/share/man" "/usr/local/man"))
- "*List of DIRECTORY TREES to search for UN*X manual files.
+ "List of DIRECTORY TREES to search for UN*X manual files.
Each element should be the name of a directory that contains
subdirectories of the form `man?', or more precisely subdirectories
selected by the value of `woman-manpath-man-regexp'. Non-directory
@@ -649,7 +649,7 @@ Microsoft platforms. Its purpose is to avoid `cat?', `.', `..', etc."
(defcustom woman-path
(if (eq system-type 'ms-dos) '("$DJDIR/info" "$DJDIR/man/cat[1-9onlp]"))
- "*List of SPECIFIC DIRECTORIES to search for UN*X manual files.
+ "List of SPECIFIC DIRECTORIES to search for UN*X manual files.
For example
(\"/emacs/etc\").
@@ -676,7 +676,7 @@ drive letters explicitly."
:group 'woman-interface)
(defcustom woman-cache-level 2
- "*The level of topic caching.
+ "The level of topic caching.
1 - cache only the topic and directory lists
(the only level before version 0.34 - only for compatibility);
2 - cache also the directories for each topic
@@ -695,7 +695,7 @@ file `woman-cache-filename' for a change to take effect.
:group 'woman-interface)
(defcustom woman-cache-filename nil
- "*The full pathname of the WoMan directory and topic cache file.
+ "The full pathname of the WoMan directory and topic cache file.
It is used to save and restore the cache between sessions. This is
especially useful with remote-mounted man page files! The default
value of nil suppresses this action. The `standard' non-nil
@@ -707,7 +707,7 @@ the `woman' command to update and re-write the cache."
:group 'woman-interface)
(defcustom woman-dired-keys t
- "*List of `dired' mode keys to define to run WoMan on current file.
+ "List of `dired' mode keys to define to run WoMan on current file.
E.g. '(\"w\" \"W\"), or any non-null atom to automatically define
\"w\" and \"W\" if they are unbound, or nil to do nothing.
Default is t."
@@ -719,20 +719,20 @@ Default is t."
(defcustom woman-imenu-generic-expression
'((nil "\n\\([A-Z].*\\)" 1) ; SECTION, but not TITLE
("*Subsections*" "^ \\([A-Z].*\\)" 1))
- "*Imenu support for Sections and Subsections.
+ "Imenu support for Sections and Subsections.
An alist with elements of the form (MENU-TITLE REGEXP INDEX) --
see the documentation for `imenu-generic-expression'."
:type 'sexp
:group 'woman-interface)
(defcustom woman-imenu nil
- "*If non-nil then WoMan adds a Contents menu to the menubar.
+ "If non-nil then WoMan adds a Contents menu to the menubar.
It does this by calling `imenu-add-to-menubar'. Default is nil."
:type 'boolean
:group 'woman-interface)
(defcustom woman-imenu-title "CONTENTS"
- "*The title to use if WoMan adds a Contents menu to the menubar.
+ "The title to use if WoMan adds a Contents menu to the menubar.
Default is \"CONTENTS\"."
:type 'string
:group 'woman-interface)
@@ -741,13 +741,13 @@ Default is \"CONTENTS\"."
;; `woman-use-topic-at-point' may be let-bound when woman is loaded,
;; in which case its global value does not get defined.
;; `woman-file-name' sets it to this value if it is unbound.
- "*Default value for `woman-use-topic-at-point'."
+ "Default value for `woman-use-topic-at-point'."
:type '(choice (const :tag "Yes" t)
(const :tag "No" nil))
:group 'woman-interface)
(defcustom woman-use-topic-at-point woman-use-topic-at-point-default
- "*Control use of the word at point as the default topic.
+ "Control use of the word at point as the default topic.
If non-nil the `woman' command uses the word at point automatically,
without interactive confirmation, if it exists as a topic."
:type '(choice (const :tag "Yes" t)
@@ -778,7 +778,7 @@ Used as :set cookie by Customize when customizing the user options
(defcustom woman-uncompressed-file-regexp
"\\.\\([0-9lmnt]\\w*\\)" ; disallow no extension
- "*Do not change this unless you are sure you know what you are doing!
+ "Do not change this unless you are sure you know what you are doing!
Regexp used to select man source files (ignoring any compression extension).
The SysV standard man pages use two character suffixes, and this is
@@ -793,7 +793,7 @@ MUST NOT end with any kind of string terminator such as $ or \\'."
(defcustom woman-file-compression-regexp
"\\.\\(g?z\\|bz2\\)\\'"
- "*Do not change this unless you are sure you know what you are doing!
+ "Do not change this unless you are sure you know what you are doing!
Regexp used to match compressed man file extensions for which
decompressors are available and handled by auto-compression mode,
e.g. \"\\\\.\\\\(g?z\\\\|bz2\\\\)\\\\'\" for `gzip' or `bzip2'.
@@ -809,7 +809,7 @@ Should begin with \\. and end with \\' and MUST NOT be optional."
(defcustom woman-use-own-frame ; window-system
(or (and (fboundp 'display-graphic-p) (display-graphic-p)) ; Emacs 21
(memq window-system '(x w32))) ; Emacs 20
- "*If non-nil then use a dedicated frame for displaying WoMan windows.
+ "If non-nil then use a dedicated frame for displaying WoMan windows.
Only useful when run on a graphic display such as X or MS-Windows."
:type 'boolean
:group 'woman-interface)
@@ -823,37 +823,37 @@ Only useful when run on a graphic display such as X or MS-Windows."
:group 'woman)
(defcustom woman-fill-column 65
- "*Right margin for formatted text -- default is 65."
+ "Right margin for formatted text -- default is 65."
:type 'integer
:group 'woman-formatting)
(defcustom woman-fill-frame nil
;; Based loosely on a suggestion by Theodore Jump:
- "*If non-nil then most of the window width is used."
+ "If non-nil then most of the window width is used."
:type 'boolean
:group 'woman-formatting)
(defcustom woman-default-indent 5
- "*Default prevailing indent set by -man macros -- default is 5.
+ "Default prevailing indent set by -man macros -- default is 5.
Set this variable to 7 to emulate GNU man formatting."
:type 'integer
:group 'woman-formatting)
(defcustom woman-bold-headings t
- "*If non-nil then embolden section and subsection headings. Default is t.
+ "If non-nil then embolden section and subsection headings. Default is t.
Heading emboldening is NOT standard `man' behavior."
:type 'boolean
:group 'woman-formatting)
(defcustom woman-ignore t
- "*If non-nil then unrecognized requests etc. are ignored. Default is t.
+ "If non-nil then unrecognized requests etc. are ignored. Default is t.
This gives the standard ?roff behavior. If nil then they are left in
the buffer, which may aid debugging."
:type 'boolean
:group 'woman-formatting)
(defcustom woman-preserve-ascii t
- "*If non-nil, preserve ASCII characters in the WoMan buffer.
+ "If non-nil, preserve ASCII characters in the WoMan buffer.
Otherwise, to save time, some backslashes and spaces may be
represented differently (as the values of the variables
`woman-escaped-escape-char' and `woman-unpadded-space-char'
@@ -865,7 +865,7 @@ buffer text is searched, copied or saved to a file."
:group 'woman-formatting)
(defcustom woman-emulation 'nroff
- "*WoMan emulation, currently either nroff or troff. Default is nroff.
+ "WoMan emulation, currently either nroff or troff. Default is nroff.
Troff emulation is experimental and largely untested.
\(Add groff later?)"
:type '(choice (const nroff) (const troff))
@@ -884,7 +884,7 @@ Troff emulation is experimental and largely untested.
(or (and (fboundp 'display-color-p) (display-color-p))
(and (fboundp 'display-graphic-p) (display-graphic-p))
(x-display-color-p))
- "*If non-nil then WoMan assumes that face support is available.
+ "If non-nil then WoMan assumes that face support is available.
It defaults to a non-nil value if the display supports either colors
or different fonts."
:type 'boolean
@@ -955,11 +955,10 @@ This is usually either black or white."
(let (symbol-fonts)
;; With NTEmacs 20.5, the PATTERN option to `x-list-fonts' does
;; not seem to work and fonts may be repeated, so ...
- (while fonts
- (and (string-match "-Symbol-" (car fonts))
- (not (member (car fonts) symbol-fonts))
- (setq symbol-fonts (cons (car fonts) symbol-fonts)))
- (setq fonts (cdr fonts)))
+ (dolist (font fonts)
+ (and (string-match "-Symbol-" font)
+ (not (member font symbol-fonts))
+ (setq symbol-fonts (cons font symbol-fonts))))
symbol-fonts))
(when woman-font-support
@@ -969,12 +968,12 @@ This is usually either black or white."
;; avoid unnecessarily upsetting the line spacing in NTEmacs 20.5!
(defcustom woman-use-extended-font t
- "*If non-nil then may use non-ASCII characters from the default font."
+ "If non-nil then may use non-ASCII characters from the default font."
:type 'boolean
:group 'woman-faces)
(defcustom woman-use-symbol-font nil
- "*If non-nil then may use the symbol font.
+ "If non-nil then may use the symbol font.
It is off by default, mainly because it may change the line spacing
\(in NTEmacs 20.5)."
:type 'boolean
@@ -986,7 +985,7 @@ It is off by default, mainly because it may change the line spacing
"Symbol font(s), preferably same size as default when WoMan was loaded.")
(defcustom woman-symbol-font (car woman-symbol-font-list)
- "*A string describing the symbol font to use for special characters.
+ "A string describing the symbol font to use for special characters.
It should be compatible with, and the same size as, the default text font.
Under MS-Windows, the default is
\"-*-Symbol-normal-r-*-*-*-*-96-96-p-*-ms-symbol\"."
@@ -1199,10 +1198,9 @@ Return t if the file exists, nil otherwise."
"Save the directory and topic cache.
It is saved to the file named by the variable `woman-cache-filename'."
(if woman-cache-filename
- (save-excursion ; to restore current buffer
+ (with-current-buffer (generate-new-buffer "WoMan tmp buffer")
;; Make a temporary buffer; name starting with space "hides" it.
- (let ((standard-output
- (set-buffer (generate-new-buffer "WoMan tmp buffer")))
+ (let ((standard-output (current-buffer))
(backup-inhibited t))
;; (switch-to-buffer standard-output t) ; only for debugging
(buffer-disable-undo standard-output)
@@ -1344,10 +1342,8 @@ Ignore any paths that are unreadable or not directories."
;; Allow each path to be a single string or a list of strings:
(if (not (listp woman-manpath)) (setq woman-manpath (list woman-manpath)))
(if (not (listp woman-path)) (setq woman-path (list woman-path)))
- (let (dir head dirs path)
- (while woman-manpath
- (setq dir (car woman-manpath)
- woman-manpath (cdr woman-manpath))
+ (let (head dirs path)
+ (dolist (dir woman-manpath)
(when (consp dir)
(unless path
(setq path (split-string (getenv "PATH") path-separator t)))
@@ -1361,9 +1357,7 @@ Ignore any paths that are unreadable or not directories."
(setq dir (woman-canonicalize-dir dir)
dirs (nconc dirs (directory-files
dir t woman-manpath-man-regexp)))))
- (while woman-path
- (setq dir (car woman-path)
- woman-path (cdr woman-path))
+ (dolist (dir woman-path)
(if (or (null dir)
(null (setq dir (woman-canonicalize-dir dir)
head (file-name-directory dir)))
@@ -1455,22 +1449,20 @@ Also make each path-info component into a list.
\(Note that this function changes the value of ALIST.)"
;; Replaces unreadably "optimized" O(n^2) implementation.
;; Instead we use sorting to merge stuff efficiently. -- dak
- (let (elt newalist)
+ (let (newalist)
;; Sort list into reverse order
(setq alist (sort alist (lambda(x y) (string< (car y) (car x)))))
;; merge duplicate keys.
(if (> woman-cache-level 1)
- (while alist
- (setq elt (pop alist))
+ (dolist (elt alist)
(if (equal (car elt) (caar newalist))
(unless (member (cdr elt) (cdar newalist))
(setcdr (car newalist) (cons (cdr elt)
(cdar newalist))))
(setcdr elt (list (cdr elt)))
(push elt newalist)))
- ;; woman-cache-level = 1 => elements are single-element lists ...
- (while alist
- (setq elt (pop alist))
+ ;; woman-cache-level = 1 => elements are single-element lists ...
+ (dolist (elt alist)
(unless (equal (car elt) (caar newalist))
(push elt newalist))))
newalist))
@@ -1496,10 +1488,9 @@ Also make each path-info component into a list.
;; Use cached path-info to locate files for each topic:
(let ((path-info (cdr (assoc topic topics)))
filename)
- (while path-info
- (setq dir (nth (car (car path-info)) path)
- filename (car (cdr (car path-info)))
- path-info (cdr path-info)
+ (dolist (elt path-info)
+ (setq dir (nth (car elt) path)
+ filename (car (cdr elt))
files (nconc files
;; Find the actual file name:
(if filename
@@ -1534,7 +1525,7 @@ Also make each path-info component into a list.
"Define dired keys to run WoMan according to `woman-dired-keys'."
(if woman-dired-keys
(if (listp woman-dired-keys)
- (mapcar 'woman-dired-define-key woman-dired-keys)
+ (mapc 'woman-dired-define-key woman-dired-keys)
(woman-dired-define-key-maybe "w")
(woman-dired-define-key-maybe "W")))
(define-key-after (lookup-key dired-mode-map [menu-bar immediate])
@@ -1648,7 +1639,10 @@ Do not call directly!"
(select-frame
(or (and (frame-live-p woman-frame) woman-frame)
(setq woman-frame (make-frame)))))
- (switch-to-buffer (get-buffer-create bufname))
+ (set-buffer (get-buffer-create bufname))
+ (condition-case nil
+ (switch-to-buffer (current-buffer))
+ (error (pop-to-buffer (current-buffer))))
(buffer-disable-undo)
(setq buffer-read-only nil)
(erase-buffer) ; NEEDED for reformat
@@ -1767,21 +1761,21 @@ Leave point at end of new text. Return length of inserted text."
;;; Major mode (Man) interface:
-(defvar woman-mode-map nil "Keymap for woman mode.")
+(defvar woman-mode-map
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map Man-mode-map)
-(unless woman-mode-map
- (setq woman-mode-map (make-sparse-keymap))
- (set-keymap-parent woman-mode-map Man-mode-map)
+ (define-key map "R" 'woman-reformat-last-file)
+ (define-key map "w" 'woman)
+ (define-key map "\en" 'WoMan-next-manpage)
+ (define-key map "\ep" 'WoMan-previous-manpage)
+ (define-key map [M-mouse-2] 'woman-follow-word)
- (define-key woman-mode-map "R" 'woman-reformat-last-file)
- (define-key woman-mode-map "w" 'woman)
- (define-key woman-mode-map "\en" 'WoMan-next-manpage)
- (define-key woman-mode-map "\ep" 'WoMan-previous-manpage)
- (define-key woman-mode-map [M-mouse-2] 'woman-follow-word)
-
- ;; We don't need to call `man' when we are in `woman-mode'.
- (define-key woman-mode-map [remap man] 'woman)
- (define-key woman-mode-map [remap man-follow] 'woman-follow))
+ ;; We don't need to call `man' when we are in `woman-mode'.
+ (define-key map [remap man] 'woman)
+ (define-key map [remap man-follow] 'woman-follow)
+ map)
+ "Keymap for woman mode.")
(defun woman-follow (topic)
"Get a Un*x manual page of the item under point and put it in a buffer."
@@ -1916,7 +1910,7 @@ See `Man-mode' for additional details."
;; necessary to avoid re-installing the same imenu:
(setq woman-imenu-done nil)
(if woman-imenu (woman-imenu))
- (let (buffer-read-only)
+ (let ((inhibit-read-only t))
(Man-highlight-references 'WoMan-xref-man-page))
(set-buffer-modified-p nil)
(run-mode-hooks 'woman-mode-hook))
@@ -1953,14 +1947,10 @@ Optional argument REDRAW, if non-nil, forces mode line to be updated."
(setq apropos-accumulator
(apropos-internal "woman"
(lambda (symbol)
- (or (commandp symbol)
- (user-variable-p symbol)))))
- ;; Filter out any inhibited symbols:
- (let ((tem apropos-accumulator))
- (while tem
- (if (get (car tem) 'apropos-inhibit)
- (setq apropos-accumulator (delq (car tem) apropos-accumulator)))
- (setq tem (cdr tem))))
+ (and
+ (or (commandp symbol)
+ (user-variable-p symbol))
+ (not (get symbol 'apropos-inhibit))))))
;; Find documentation strings:
(let ((p apropos-accumulator)
doc symbol)
@@ -2091,17 +2081,14 @@ alist in `woman-buffer-alist' and return nil."
(char-to-string woman-unpadded-space-char)
"Internal string representation of unpadded space characters.")
-(defvar woman-syntax-table nil
+(defvar woman-syntax-table
+ (let ((st (make-syntax-table)))
+ ;; The following internal chars must NOT have whitespace syntax:
+ (modify-syntax-entry woman-unpadded-space-char "." st)
+ (modify-syntax-entry woman-escaped-escape-char "." st)
+ st)
"Syntax table to support special characters used internally by WoMan.")
-(if woman-syntax-table
- ()
- (setq woman-syntax-table (make-syntax-table))
- ;; The following internal chars must NOT have whitespace syntax:
- (modify-syntax-entry woman-unpadded-space-char "." woman-syntax-table)
- (modify-syntax-entry woman-escaped-escape-char "." woman-syntax-table)
- )
-
(defun woman-set-buffer-display-table ()
"Set up a display table for a WoMan buffer.
This display table is used for displaying internal special characters, but
@@ -2169,14 +2156,14 @@ To be called on original buffer and any .so insertions."
(goto-char from)
;; .eo turns off escape character processing
(while (re-search-forward "\\(\\\\[\\e]\\)\\|^\\.eo" to t) ; \\
- (if (match-string 1)
+ (if (match-beginning 1)
(replace-match woman-escaped-escape-string t t)
(woman-delete-whole-line)
;; .ec turns on escape character processing (and sets the
;; escape character to its argument, if any, which I'm ignoring
;; for now!)
(while (and (re-search-forward "\\(\\\\\\)\\|^\\.ec" to t) ; \
- (match-string 1))
+ (match-beginning 1))
(replace-match woman-escaped-escape-string t t))
;; ***** Need test for .ec arg and warning here! *****
(woman-delete-whole-line)))
@@ -2190,15 +2177,13 @@ To be called on original buffer and any .so insertions."
(defun woman-non-underline-faces ()
"Prepare non-underlined versions of underlined faces."
(let ((face-list (face-list)))
- (while face-list
- (let* ((face (car face-list))
- (face-name (symbol-name face)))
+ (dolist (face face-list)
+ (let ((face-name (symbol-name face)))
(if (and (string-match "\\`woman-" face-name)
(face-underline-p face))
(let ((face-no-ul (intern (concat face-name "-no-ul"))))
(copy-face face face-no-ul)
- (set-face-underline-p face-no-ul nil))))
- (setq face-list (cdr face-list)))))
+ (set-face-underline-p face-no-ul nil)))))))
;; Preprocessors
;; =============
@@ -2449,7 +2434,7 @@ Preserves location of `point'."
to t)
(let ((from (match-beginning 0))
(delim (regexp-quote (match-string 1)))
- (absolute (match-string 2)) ; absolute position?
+ (absolute (match-beginning 2)) ; absolute position?
(N (woman-parse-numeric-arg)) ; distance
to
msg) ; for warning
@@ -2628,7 +2613,7 @@ If DELETE is non-nil then delete from point."
;; Interpret bogus `el \}' as `el \{',
;; especially for Tcl/Tk man pages:
"\\(\\\\{\\|el[ \t]*\\\\}\\)\\|\\(\n[.']\\)?[ \t]*\\\\}[ \t]*")
- (match-string 1))
+ (match-beginning 1))
(re-search-forward "\\\\}"))
(delete-region (if delete from (match-beginning 0)) (point))
(if (looking-at "^$") (delete-char 1))
@@ -2731,11 +2716,9 @@ If DELETE is non-nil then delete from point."
(defun woman0-rename ()
"Effect renaming required by .rn requests."
;; For now, do this backwards AFTER all macro expansion.
- (while woman0-rename-alist
- (let* ((new (car woman0-rename-alist))
- (old (cdr new))
- (new (car new)))
- (setq woman0-rename-alist (cdr woman0-rename-alist))
+ (dolist (new woman0-rename-alist)
+ (let ((old (cdr new))
+ (new (car new)))
(goto-char (point-min))
(setq new (concat "^[.'][ \t]*" (regexp-quote new)))
(setq old (concat "." old))
@@ -2752,7 +2735,7 @@ Replaces || by |, but | by \, where | denotes the internal escape."
(let (start)
(while (setq start (string-match woman-unescape-regex macro start))
(setq macro
- (if (match-string 1 macro)
+ (if (match-beginning 1)
(replace-match "" t t macro 1)
(replace-match "\\" t t macro))
start (1+ start)))
@@ -2875,7 +2858,7 @@ interpolated by `\*x' and `\*(xx' escapes."
(while
;; Find .ds requests and \* escapes:
(re-search-forward "\\(^[.'][ \t]*ds\\)\\|\\\\\\*" to t)
- (cond ((match-string 1) ; .ds
+ (cond ((match-beginning 1) ; .ds
(skip-chars-forward " \t")
(if (eolp) ; ignore if no argument
()
@@ -3004,7 +2987,7 @@ Set NEWTEXT in face FACE if specified."
((cadr replacement) ; Use ASCII simulation
(woman-replace-match (cadr replacement)))))
(WoMan-warn (concat "Special character "
- (if (match-string 1) "\\(%s" "\\[%s]")
+ (if (match-beginning 1) "\\(%s" "\\[%s]")
" not interpolated!") name)
(if woman-ignore (woman-delete-match 0))))
))
@@ -3016,8 +2999,7 @@ together with the corresponding glyphs from the default and symbol fonts.
Useful for constructing the alist variable `woman-special-characters'."
(interactive)
(with-output-to-temp-buffer "*WoMan Extended Font Map*"
- (save-excursion
- (set-buffer standard-output)
+ (with-current-buffer standard-output
(let ((i 32))
(while (< i 256)
(insert (format "\\%03o " i) (string i) " " (string i))
@@ -3238,7 +3220,7 @@ If optional arg CONCAT is non-nil then join arguments."
(setq c (concat "\\(" c "\\)\\|^[.'][ \t]*hc"))
(save-excursion
(while (and (re-search-forward c nil t)
- (match-string 1))
+ (match-beginning 1))
(delete-char -1)))
))
@@ -3315,7 +3297,7 @@ If optional arg CONCAT is non-nil then join arguments."
"^[.'][ \t]*\\(\\(\\ft\\)\\|\\(.P\\)\\)\\|\\(\\\\f\\)" nil 1)
(let (font beg notfont fescape)
;; Match font indicator and leave point at end of sequence:
- (cond ((match-string 2)
+ (cond ((match-beginning 2)
;; .ft request found
(setq beg (match-beginning 0))
(skip-chars-forward " \t")
@@ -3323,10 +3305,10 @@ If optional arg CONCAT is non-nil then join arguments."
(setq font previous-font)
(looking-at "[^ \t\n]+"))
(forward-line)) ; end of control line and \n
- ((match-string 3)
+ ((match-beginning 3)
;; Macro that resets font found
(setq font 'default))
- ((match-string 4)
+ ((match-beginning 4)
;; \f escape found
(setq beg (match-beginning 0)
fescape t)
@@ -3758,7 +3740,7 @@ expression in parentheses. Leaves point after the value."
(while
(and
(setq to (re-search-forward "\\(\\\\c\\)?\n[.']" nil t))
- (match-string 1)
+ (match-beginning 1)
(looking-at "br"))
(goto-char (match-beginning 0))
(woman-delete-line 2)))
@@ -3920,12 +3902,10 @@ Leave 1 blank line. Format paragraphs upto TO."
((eq c ?\t) ; skip
(if (eq (following-char) ?\t)
(forward-char) ; both tabs, just skip
- (let ((i woman-tab-width))
- (while (> i 0)
- (if (eolp)
- (insert ?\ ) ; extend line
- (forward-char)) ; skip
- (setq i (1- i)))
+ (dotimes (i woman-tab-width)
+ (if (eolp)
+ (insert ?\ ) ; extend line
+ (forward-char)) ; skip
)))
(t
(if (or (eq (following-char) ?\ ) ; overwrite OK
@@ -4312,7 +4292,7 @@ Format paragraphs upto TO. Set prevailing indent to I."
;; Necessary to avoid spaces inheriting underlines.
;; Cannot simply delete (current-column) whitespace
;; characters because some may be tabs!
- (while (> i 0) (insert ? ) (setq i (1- i)))))
+ (insert-char ?\s i)))
(goto-char to) ; necessary ???
))
))
@@ -4468,9 +4448,7 @@ tab stop columns or pairs (COLUMN . TYPE) where TYPE is R or C."
n (- (if n (1- n) eol) (point))
tab (- tab (if (eq type ?C) (/ n 2) n))) )
(setq n (- tab (current-column)))
- (while (> n 0)
- (insert ?\ )
- (setq n (1- n))))
+ (insert-char ?\s n))
(insert ?\ ))))
(defun woman2-DT (to)
@@ -4571,8 +4549,7 @@ Format paragraphs upto TO."
(defun WoMan-log-begin ()
"Log the beginning of formatting in *WoMan-Log*."
(let ((WoMan-current-buffer (buffer-name)))
- (save-excursion
- (set-buffer (get-buffer-create "*WoMan-Log*"))
+ (with-current-buffer (get-buffer-create "*WoMan-Log*")
(or (eq major-mode 'view-mode) (view-mode 1))
(setq buffer-read-only nil)
(goto-char (point-max))
@@ -4615,8 +4592,7 @@ with the message."
"Log a message STRING in *WoMan-Log*.
If optional argument END is non-nil then make buffer read-only after
logging the message."
- (save-excursion
- (set-buffer (get-buffer-create "*WoMan-Log*"))
+ (with-current-buffer (get-buffer-create "*WoMan-Log*")
(setq buffer-read-only nil)
(goto-char (point-max))
(or end (insert " ")) (insert string "\n")
@@ -4635,5 +4611,5 @@ logging the message."
(provide 'woman)
-;;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651
+;; arch-tag: eea35e90-552f-4712-a94b-d9ffd3db7651
;;; woman.el ends here
diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el
index 08fca38aab2..f6f3b75dc07 100644
--- a/lisp/x-dnd.el
+++ b/lisp/x-dnd.el
@@ -121,14 +121,15 @@ any protocol specific data.")
(defun x-dnd-init-frame (&optional frame)
"Setup drag and drop for FRAME (i.e. create appropriate properties)."
- (x-register-dnd-atom "DndProtocol" frame)
- (x-register-dnd-atom "_MOTIF_DRAG_AND_DROP_MESSAGE" frame)
- (x-register-dnd-atom "XdndEnter" frame)
- (x-register-dnd-atom "XdndPosition" frame)
- (x-register-dnd-atom "XdndLeave" frame)
- (x-register-dnd-atom "XdndDrop" frame)
- (x-dnd-init-xdnd-for-frame frame)
- (x-dnd-init-motif-for-frame frame))
+ (when (eq 'x (window-system frame))
+ (x-register-dnd-atom "DndProtocol" frame)
+ (x-register-dnd-atom "_MOTIF_DRAG_AND_DROP_MESSAGE" frame)
+ (x-register-dnd-atom "XdndEnter" frame)
+ (x-register-dnd-atom "XdndPosition" frame)
+ (x-register-dnd-atom "XdndLeave" frame)
+ (x-register-dnd-atom "XdndDrop" frame)
+ (x-dnd-init-xdnd-for-frame frame)
+ (x-dnd-init-motif-for-frame frame)))
(defun x-dnd-get-state-cons-for-frame (frame-or-window)
"Return the entry in x-dnd-current-state for a frame or window."
@@ -171,7 +172,7 @@ FRAME-OR-WINDOW is the frame or window that the mouse is over."
WINDOW is the window the mouse is over. ACTION is the suggested
action from the source. If nothing has changed, return the last
action and type we got from `x-dnd-test-function'."
- (let ((buffer (when (and (windowp window) (window-live-p window))
+ (let ((buffer (when (window-live-p window)
(window-buffer window)))
(current-state (x-dnd-get-state-for-frame window)))
(when (or (not (equal buffer (aref current-state 0)))
@@ -206,9 +207,7 @@ EXTRA-DATA is data needed for a specific protocol."
(when types (aset current-state 2 types))
(when extra-data (aset current-state 6 extra-data))
(aset current-state 1 window)
- (aset current-state 0 (if (and (windowp window)
- (window-live-p window))
- (window-buffer window) nil))
+ (aset current-state 0 (and (window-live-p window) (window-buffer window)))
(setcdr (x-dnd-get-state-cons-for-frame window) current-state)))
@@ -319,7 +318,7 @@ nil if not."
(action (aref state 5))
(w (posn-window (event-start event))))
(when handler
- (if (and (windowp w) (window-live-p w)
+ (if (and (window-live-p w)
(not (window-minibuffer-p w))
(not (window-dedicated-p w)))
;; If dropping in an ordinary window which we could use,
diff --git a/lisp/xt-mouse.el b/lisp/xt-mouse.el
index d14c9c85cd3..adb6f08943c 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -43,7 +43,7 @@
;;; Code:
-(define-key function-key-map "\e[M" 'xterm-mouse-translate)
+(defvar xterm-mouse-debug-buffer nil)
(defvar xterm-mouse-last)
@@ -75,7 +75,7 @@
(error "Unexpected escape sequence from XTerm")))
(let* ((click (if is-click down (xterm-mouse-event)))
- (click-command (nth 0 click))
+ ;; (click-command (nth 0 click))
(click-data (nth 1 click))
(click-where (nth 1 click-data)))
(if (memq down-binding '(nil ignore))
@@ -95,16 +95,20 @@
(list (intern (format "drag-mouse-%d"
(+ 1 xterm-mouse-last)))
down-data click-data)))))
+ (if xterm-mouse-debug-buffer
+ (print unread-command-events xterm-mouse-debug-buffer))
(if (and (symbolp down-where)
(consp down-where))
(vector (list down-where down-data) down)
(vector down))))))))
-(defvar xterm-mouse-x 0
- "Position of last xterm mouse event relative to the frame.")
-
-(defvar xterm-mouse-y 0
- "Position of last xterm mouse event relative to the frame.")
+;; These two variables have been converted to terminal parameters.
+;;
+;;(defvar xterm-mouse-x 0
+;; "Position of last xterm mouse event relative to the frame.")
+;;
+;;(defvar xterm-mouse-y 0
+;; "Position of last xterm mouse event relative to the frame.")
(defvar xt-mouse-epoch nil)
@@ -112,7 +116,9 @@
(defun xterm-mouse-position-function (pos)
"Bound to `mouse-position-function' in XTerm mouse mode."
- (setcdr pos (cons xterm-mouse-x xterm-mouse-y))
+ (when (terminal-parameter nil 'xterm-mouse-x)
+ (setcdr pos (cons (terminal-parameter nil 'xterm-mouse-x)
+ (terminal-parameter nil 'xterm-mouse-y))))
pos)
;; read xterm sequences above ascii 127 (#x7f)
@@ -137,7 +143,6 @@
(fdiff (- f (* 1.0 maxwrap dbig))))
(+ (truncate fdiff) (* maxwrap dbig))))))
-
(defun xterm-mouse-event ()
"Convert XTerm mouse event to Emacs mouse event."
(let* ((type (- (xterm-mouse-event-read) #o40))
@@ -146,11 +151,11 @@
;; Emulate timestamp information. This is accurate enough
;; for default value of mouse-1-click-follows-link (450msec).
(timestamp (xterm-mouse-truncate-wrap
- (* 1000
- (- (float-time)
- (or xt-mouse-epoch
- (setq xt-mouse-epoch (float-time)))))))
- (mouse (intern
+ (* 1000
+ (- (float-time)
+ (or xt-mouse-epoch
+ (setq xt-mouse-epoch (float-time)))))))
+ (mouse (intern
;; For buttons > 3, the release-event looks
;; differently (see xc/programs/xterm/button.c,
;; function EditorButton), and there seems to come in
@@ -172,8 +177,8 @@
(left (nth 0 ltrb))
(top (nth 1 ltrb)))
- (setq xterm-mouse-x x
- xterm-mouse-y y)
+ (set-terminal-parameter nil 'xterm-mouse-x x)
+ (set-terminal-parameter nil 'xterm-mouse-y y)
(setq
last-input-event
(list mouse
@@ -199,27 +204,73 @@ down the SHIFT key while pressing the mouse button."
:global t :group 'mouse
(if xterm-mouse-mode
;; Turn it on
- (unless window-system
+ (progn
+ ;; Frame creation and deletion.
+ (add-hook 'terminal-init-xterm-hook
+ 'turn-on-xterm-mouse-tracking-on-terminal)
+
+ (add-hook 'delete-frame-functions 'xterm-mouse-handle-delete-frame)
+
+ ;; Restore normal mouse behaviour outside Emacs.
+ (add-hook 'suspend-tty-functions
+ 'turn-off-xterm-mouse-tracking-on-terminal)
+ (add-hook 'resume-tty-functions
+ 'turn-on-xterm-mouse-tracking-on-terminal)
+ (add-hook 'suspend-hook 'turn-off-xterm-mouse-tracking)
+ (add-hook 'suspend-resume-hook 'turn-on-xterm-mouse-tracking)
+ (add-hook 'kill-emacs-hook 'turn-off-xterm-mouse-tracking)
(setq mouse-position-function #'xterm-mouse-position-function)
(turn-on-xterm-mouse-tracking))
;; Turn it off
+ (remove-hook 'delete-frame-functions 'xterm-mouse-handle-delete-frame)
+ (remove-hook 'suspend-tty-functions
+ 'turn-off-xterm-mouse-tracking-on-terminal)
+ (remove-hook 'resume-tty-functions
+ 'turn-on-xterm-mouse-tracking-on-terminal)
+ (remove-hook 'suspend-hook 'turn-off-xterm-mouse-tracking)
+ (remove-hook 'suspend-resume-hook 'turn-on-xterm-mouse-tracking)
+ (remove-hook 'kill-emacs-hook 'turn-off-xterm-mouse-tracking)
(turn-off-xterm-mouse-tracking 'force)
(setq mouse-position-function nil)))
(defun turn-on-xterm-mouse-tracking ()
"Enable Emacs mouse tracking in xterm."
- (if xterm-mouse-mode
- (send-string-to-terminal "\e[?1000h")))
+ (dolist (terminal (delete-dups (mapcar 'frame-terminal (frame-list))))
+ (turn-on-xterm-mouse-tracking-on-terminal terminal)))
(defun turn-off-xterm-mouse-tracking (&optional force)
"Disable Emacs mouse tracking in xterm."
- (if (or force xterm-mouse-mode)
- (send-string-to-terminal "\e[?1000l")))
-
-;; Restore normal mouse behaviour outside Emacs.
-(add-hook 'suspend-hook 'turn-off-xterm-mouse-tracking)
-(add-hook 'suspend-resume-hook 'turn-on-xterm-mouse-tracking)
-(add-hook 'kill-emacs-hook 'turn-off-xterm-mouse-tracking)
+ (dolist (terminal (delete-dups (mapcar 'frame-terminal (frame-list))))
+ (turn-off-xterm-mouse-tracking-on-terminal terminal)))
+
+(defun turn-on-xterm-mouse-tracking-on-terminal (&optional terminal)
+ "Enable xterm mouse tracking on TERMINAL."
+ (when (and xterm-mouse-mode (eq t (terminal-live-p terminal)))
+ (unless (terminal-parameter terminal 'xterm-mouse-mode)
+ ;; Simulate selecting a terminal by selecting one of its frames ;-(
+ (with-selected-frame (car (frames-on-display-list terminal))
+ (define-key input-decode-map "\e[M" 'xterm-mouse-translate))
+ (set-terminal-parameter terminal 'xterm-mouse-mode t))
+ (send-string-to-terminal "\e[?1000h" terminal)))
+
+(defun turn-off-xterm-mouse-tracking-on-terminal (terminal)
+ "Disable xterm mouse tracking on TERMINAL."
+ ;; Only send the disable command to those terminals to which we've already
+ ;; sent the enable command.
+ (when (and (terminal-parameter terminal 'xterm-mouse-mode)
+ (eq t (terminal-live-p terminal)))
+ ;; We could remove the key-binding and unset the `xterm-mouse-mode'
+ ;; terminal parameter, but it seems less harmful to send this escape
+ ;; command too many times (or to catch an unintended key sequence), than
+ ;; to send it too few times (or to fail to let xterm-mouse events
+ ;; pass by untranslated).
+ (send-string-to-terminal "\e[?1000l" terminal)))
+
+(defun xterm-mouse-handle-delete-frame (frame)
+ "Turn off xterm mouse tracking if FRAME is the last frame on its device."
+ (when (and (eq t (frame-live-p frame))
+ (<= 1 (length (frames-on-display-list (frame-terminal frame)))))
+ (turn-off-xterm-mouse-tracking-on-terminal frame)))
(provide 'xt-mouse)
diff --git a/lwlib/ChangeLog b/lwlib/ChangeLog
index 1ff2a140945..75597a9549e 100644
--- a/lwlib/ChangeLog
+++ b/lwlib/ChangeLog
@@ -1,9 +1,18 @@
+2007-08-29 Karoly Lorentey <lorentey@elte.hu>
+
+ * xlwmenu.c (XlwMenuRealize): Ignore X errors while setting up
+ cursor shape.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
* COPYING: Switch to GPLv3.
+2007-06-13 Chong Yidong <cyd@stupidchicken.com>
+
+ * lwlib-Xaw.c, lwlib.c: Link to xaw3d if available.
+
2007-06-02 Chong Yidong <cyd@stupidchicken.com>
* Version 22.1 released.
diff --git a/lwlib/lwlib-Xaw.c b/lwlib/lwlib-Xaw.c
index be1990ed6fe..4ef2d3fcb67 100644
--- a/lwlib/lwlib-Xaw.c
+++ b/lwlib/lwlib-Xaw.c
@@ -35,12 +35,21 @@ Boston, MA 02110-1301, USA. */
#include <X11/CoreP.h>
#include <X11/Shell.h>
+#ifdef HAVE_XAW3D
+#include <X11/Xaw3d/Scrollbar.h>
+#include <X11/Xaw3d/Paned.h>
+#include <X11/Xaw3d/Dialog.h>
+#include <X11/Xaw3d/Form.h>
+#include <X11/Xaw3d/Command.h>
+#include <X11/Xaw3d/Label.h>
+#else /* !HAVE_XAW3D */
#include <X11/Xaw/Scrollbar.h>
#include <X11/Xaw/Paned.h>
#include <X11/Xaw/Dialog.h>
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Label.h>
+#endif /* HAVE_XAW3D */
#include <X11/Xatom.h>
diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c
index bd5d9adbf9d..542b3ba5a60 100644
--- a/lwlib/lwlib.c
+++ b/lwlib/lwlib.c
@@ -48,7 +48,11 @@ Boston, MA 02110-1301, USA. */
#endif /* not USE_MOTIF && USE_LUCID */
#endif
#if defined (USE_XAW)
+#ifdef HAVE_XAW3D
+#include <X11/Xaw3d/Paned.h>
+#else /* !HAVE_XAW3D */
#include <X11/Xaw/Paned.h>
+#endif /* HAVE_XAW3D */
#include "lwlib-Xaw.h"
#endif
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index b3929d34a35..40a88fcced5 100644
--- a/lwlib/xlwmenu.c
+++ b/lwlib/xlwmenu.c
@@ -1844,7 +1844,16 @@ XlwMenuRealize (w, valueMask, attributes)
xswa.save_under = True;
xswa.cursor = mw->menu.cursor_shape;
mask = CWSaveUnder | CWCursor;
+ /* I sometimes get random BadCursor errors while creating the first
+ frame on a display. I can not find their reason, but they are
+ annoying so for now let's ignore any errors here. -- lorentey */
+#ifdef emacs
+ x_catch_errors (XtDisplay (w));
+#endif
XChangeWindowAttributes (XtDisplay (w), XtWindow (w), mask, &xswa);
+#ifdef emacs
+ x_uncatch_errors ();
+#endif
mw->menu.windows [0].window = XtWindow (w);
mw->menu.windows [0].x = w->core.x;
diff --git a/mac/ChangeLog b/mac/ChangeLog
index 742e200354b..bcf4d5b5624 100644
--- a/mac/ChangeLog
+++ b/mac/ChangeLog
@@ -1,3 +1,32 @@
+2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * inc/config.h: Remove HAVE_X11R5.
+
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * makefile.MPW (SOME_MACHINE_OBJECTS): Remove sunfns.o.
+
+2007-09-13 Seiji Zenitani <zenitani@mac.com>
+ Takanori Yamamoto <takanori.yamamoto@gmail.com>
+ Kentaro Ohkouchi <nanasess@fsm.ne.jp>
+
+ * Emacs.app/Contents/Info.plist: Add
+ filetype/extension entries for the document icon.
+ * Emacs.app/Contents/Resources/Emacs.icns: Update.
+ * Emacs.app/Contents/Resources/document.icns: New file.
+
+2007-08-29 Glenn Morris <rgm@gnu.org>
+
+ * Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings:
+ * src/Emacs.r: Increase version to 23.0.50.
+
+2007-08-29 Karoly Lorentey <lorentey@elte.hu>
+
+ * makefile.MPW (EmacsObjects): Add terminal.c.x.
+ (callproc.c.x): Add dependencies frame.h, termhooks.h.
+ ({Src}terminal.c.x): New.
+ (shortlisp): Add server.elc and termdev.elc.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
@@ -18,6 +47,11 @@
* INSTALL: Fix description about using colors in terminal.
Fix typos (/Application -> /Applications).
+2007-04-26 Glenn Morris <rgm@gnu.org>
+
+ * Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings:
+ * src/Emacs.r: Increase version to 22.1.50.
+
2007-04-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* make-package (compver): Don't hardcode processor type.
diff --git a/mac/Emacs.app/Contents/Info.plist b/mac/Emacs.app/Contents/Info.plist
index ed2c4a8bf7c..5a369772188 100644
--- a/mac/Emacs.app/Contents/Info.plist
+++ b/mac/Emacs.app/Contents/Info.plist
@@ -31,6 +31,428 @@ MA 02110-1301, USA.
<dict>
<key>CFBundleTypeExtensions</key>
<array>
+ <string>text</string>
+ <string>txt</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Plain text document</string>
+ <key>CFBundleTypeOSTypes</key>
+ <array>
+ <string>TEXT</string>
+ <string>utxt</string>
+ </array>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>html</string>
+ <string>htm</string>
+ <string>shtm</string>
+ <string>shtml</string>
+ <string>jsp</string>
+ <string>asp</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>HTML document</string>
+ <key>CFBundleTypeOSTypes</key>
+ <array>
+ <string>HTML</string>
+ </array>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>css</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>CSS style sheet</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>xhtml</string>
+ <string>xhtm</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>XHTML document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>xml</string>
+ <string>xsl</string>
+ <string>xslt</string>
+ <string>xbl</string>
+ <string>xul</string>
+ <string>rdf</string>
+ <string>dtd</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>XML document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>sgml</string>
+ <string>sgm</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>SGML document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>yml</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>YAML document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>js</string>
+ <string>JS</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>JavaScript script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>php</string>
+ <string>php3</string>
+ <string>php4</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>PHP script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>tcl</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Tcl script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>rb</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Ruby script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>py</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Python script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pl</string>
+ <string>pm</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Perl script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>sh</string>
+ <string>csh</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Shell script</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>h</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>C Header Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>c</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>C Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>hh</string>
+ <string>hp</string>
+ <string>hpp</string>
+ <string>hxx</string>
+ <string>h++</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>C++ Header Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>cc</string>
+ <string>cp</string>
+ <string>cpp</string>
+ <string>cxx</string>
+ <string>c++</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>C++ Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>m</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Objective-C Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>s</string>
+ <string>asm</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Assembly Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>java</string>
+ <string>jav</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Java Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>f</string>
+ <string>for</string>
+ <string>f77</string>
+ <string>f90</string>
+ <string>f95</string>
+ <string>f99</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Fortran Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pas</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Pascal Source file</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>ada</string>
+ <string>adb</string>
+ <string>ads</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Ada Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>el</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Emacs Lisp Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>hs</string>
+ <string>lhs</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Haskell Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>lua</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>Lua Source File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>pro</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>IDL Procedure File</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>gp</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>gnuplot file</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>bib</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>BibTeX document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
+ <string>tex</string>
+ <string>ltx</string>
+ <string>ctx</string>
+ <string>latex</string>
+ <string>texi</string>
+ </array>
+ <key>CFBundleTypeIconFile</key>
+ <string>document.icns</string>
+ <key>CFBundleTypeName</key>
+ <string>TeX document</string>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ </dict>
+ <dict>
+ <key>CFBundleTypeExtensions</key>
+ <array>
<string>*</string>
</array>
<key>CFBundleTypeName</key>
diff --git a/mac/Emacs.app/Contents/Resources/Emacs.icns b/mac/Emacs.app/Contents/Resources/Emacs.icns
index 25cc99fdd0e..de187c1142d 100644
--- a/mac/Emacs.app/Contents/Resources/Emacs.icns
+++ b/mac/Emacs.app/Contents/Resources/Emacs.icns
Binary files differ
diff --git a/mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings b/mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings
index fc069b9bb47..2d98a155d9e 100644
--- a/mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings
+++ b/mac/Emacs.app/Contents/Resources/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Emacs";
-CFBundleShortVersionString = "22.1.50";
-CFBundleGetInfoString = "22.1.50, Copyright (C) 2007 Free Software Foundation, Inc.";
+CFBundleShortVersionString = "23.0.50";
+CFBundleGetInfoString = "23.0.50, Copyright (C) 2007 Free Software Foundation, Inc.";
diff --git a/mac/Emacs.app/Contents/Resources/document.icns b/mac/Emacs.app/Contents/Resources/document.icns
new file mode 100644
index 00000000000..e93974645fc
--- /dev/null
+++ b/mac/Emacs.app/Contents/Resources/document.icns
Binary files differ
diff --git a/mac/inc/config.h b/mac/inc/config.h
index ae741b0681f..49bc7d6bae2 100644
--- a/mac/inc/config.h
+++ b/mac/inc/config.h
@@ -716,9 +716,6 @@ Boston, MA 02110-1301, USA. */
expects to use version 10. */
/* #undef HAVE_X11 */
-/* Define to 1 if you have the X11R5 or newer version of Xlib. */
-/* #undef HAVE_X11R5 */
-
/* Define to 1 if you have the X11R6 or newer version of Xlib. */
/* #undef HAVE_X11R6 */
@@ -1145,7 +1142,7 @@ typedef unsigned size_t;
#ifdef HAVE_X11R6
#define HAVE_X_I18N
-#elif defined HAVE_X11R5 && !defined X11R5_INHIBIT_I18N
+#elif !defined X11R5_INHIBIT_I18N
#define HAVE_X_I18N
#endif
diff --git a/mac/makefile.MPW b/mac/makefile.MPW
index 9c03942effa..c7cb790ce92 100644
--- a/mac/makefile.MPW
+++ b/mac/makefile.MPW
@@ -118,6 +118,7 @@ EmacsObjects = ¶
"{Src}sysdep.c.x" ¶
"{Src}term.c.x" ¶
"{Src}termcap.c.x" ¶
+ "{Src}terminal.c.x" ¶
"{Src}textprop.c.x" ¶
"{Src}tparam.c.x" ¶
"{Src}undo.c.x" ¶
@@ -260,8 +261,8 @@ buildobj.lst Ä
{CONFIG_H_GROUP} ¶
"{Includes}sys:types.h" ¶
"{Includes}sys:file.h" ¶
- "{Includes}sys:types.h" ¶
- "{Includes}sys:stat.h" ¶
+ "{Includes}sys:types.h" ¶
+ "{Includes}sys:stat.h" ¶
"{Src}lisp.h" ¶
"{Src}commands.h" ¶
"{Src}buffer.h" ¶
@@ -273,7 +274,9 @@ buildobj.lst Ä
"{Src}process.h" ¶
"{Src}syssignal.h" ¶
"{Src}systty.h" ¶
- "{Includes}termio.h"
+ "{Includes}termio.h" ¶
+ "{Src}frame.h" ¶
+ "{Src}termhooks.h"
{Src}casefiddle Ä ¶
{CONFIG_H_GROUP} ¶
@@ -798,6 +801,16 @@ buildobj.lst Ä
"{Src}lisp.h" ¶
"{Includes}sys:file.h"
+{Src}terminal.c.x Ä ¶
+ {CONFIG_H_GROUP} ¶
+ "{Src}lisp.h" ¶
+ "{Src}frame.h" ¶
+ "{Src}termchar.h" ¶
+ "{Src}termhooks.h" ¶
+ "{Src}charset.h" ¶
+ "{Src}coding.h" ¶
+ "{Src}keyboard.h"
+
{Src}textproc.c.x Ä ¶
{CONFIG_H_GROUP} ¶
"{Src}lisp.h" ¶
@@ -1004,7 +1017,7 @@ DistClean Ä Clean
# Variables and rules for target "Doc" #
#--------------------------------------#
-SOME_MACHINE_OBJECTS = sunfns.o dosfns.o msdos.o ¶
+SOME_MACHINE_OBJECTS = dosfns.o msdos.o ¶
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o ¶
mac.o macterm.o macfns.o macmenu.o macselect.o fontset.o ¶
w32.o w32bdf.o w32console.o w32fns.o w32heap.o w32inevt.o ¶
@@ -1014,6 +1027,7 @@ shortlisp = ¶
{Lisp}abbrev.elc ¶
{Lisp}buff-menu.elc ¶
{Lisp}button.elc ¶
+ {Lisp}server.elc ¶
{Lisp}emacs-lisp:byte-run.elc ¶
{Lisp}cus-face.elc ¶
{Lisp}cus-start.elc ¶
@@ -1027,6 +1041,7 @@ shortlisp = ¶
{Lisp}emacs-lisp:float-sup.elc ¶
{Lisp}format.elc ¶
{Lisp}frame.elc ¶
+ {Lisp}termdev.elc ¶
{Lisp}help.elc ¶
{Lisp}indent.elc ¶
{Lisp}isearch.elc ¶
diff --git a/mac/src/Emacs.r b/mac/src/Emacs.r
index 21204ea22bb..33f69ab4258 100644
--- a/mac/src/Emacs.r
+++ b/mac/src/Emacs.r
@@ -144,7 +144,7 @@ resource 'DITL' (128, purgeable) {
{10, 60, 72, 278},
StaticText {
disabled,
- "GNU Emacs 22 for Mac OS"
+ "GNU Emacs 23 for Mac OS"
}
}
};
@@ -218,13 +218,13 @@ resource 'FREF' (129) {
};
resource 'vers' (1) {
- 0x22, /* Major revision in BCD */
- 0x1, /* Minor revision in BCD */
+ 0x23, /* Major revision in BCD */
+ 0x0, /* Minor revision in BCD */
development, /* development, alpha, beta, or final (release) */
50, /* Non-final release # */
0, /* Region code */
- "22.1.50", /* Short version number */
- "22.1.50, Copyright \0xa9 2007 "
+ "23.0.50", /* Short version number */
+ "23.0.50, Copyright \0xa9 2007 "
"Free Software Foundation, Inc." /* Long version number */
};
diff --git a/make-dist b/make-dist
index 93054f8fb89..0703c51ab86 100755
--- a/make-dist
+++ b/make-dist
@@ -154,10 +154,10 @@ echo Version numbers are $version and $shortversion
if [ $update = yes ];
then
- if grep -s "@set EMACSVER *${shortversion}" ./man/emacs.texi > /dev/null; then
+ if grep -s "@set EMACSVER *${shortversion}" ./doc/emacs/emacs.texi > /dev/null; then
true
else
- echo "You must update the version number in \`./man/emacs.texi'"
+ echo "You must update the version number in \`./doc/emacs/emacs.texi'"
sleep 5
fi
fi
@@ -242,9 +242,10 @@ fi
if [ $update = yes ];
then
echo "Updating Info files"
- (cd man; make -f Makefile.in srcdir=. info)
- (cd lispref; make -f Makefile.in srcdir=. info)
- (cd lispintro; make -f Makefile.in SHELL=/bin/sh srcdir=. info VPATH=.)
+ (cd doc/emacs; make -f Makefile.in srcdir=. info)
+ (cd doc/misc; make -f Makefile.in srcdir=. info)
+ (cd doc/lispref; make -f Makefile.in srcdir=. info)
+ (cd doc/lispintro; make -f Makefile.in SHELL=/bin/sh srcdir=. info VPATH=.)
echo "Updating finder, custom and autoload data"
(cd lisp; make updates EMACS="$EMACS")
@@ -293,7 +294,7 @@ mkdir ${tempdir}
### tar file; this means that people can start reading the INSTALL and
### README while the rest of the tar file is still unpacking. Whoopee.
echo "Making links to top-level files"
-ln AUTHORS FTP INSTALL README BUGS CONTRIBUTE move-if-change ${tempdir}
+ln FTP INSTALL README BUGS move-if-change ${tempdir}
ln ChangeLog Makefile.in configure configure.in ${tempdir}
ln config.bat make-dist update-subdirs vpath.sed ${tempdir}
### Copy these files; they're cross-filesystem symlinks.
@@ -312,16 +313,19 @@ echo "Updating version number in README"
echo "Creating subdirectories"
-for subdir in lisp site-lisp lispref lispintro \
+for subdir in lisp site-lisp \
leim leim/CXTERM-DIC leim/MISC-DIC \
leim/SKK-DIC leim/ja-dic leim/quail \
src src/m src/s src/bitmaps lib-src oldXMenu lwlib \
nt nt/inc nt/inc/sys nt/inc/arpa nt/inc/netinet nt/icons \
- etc etc/e \
+ etc etc/e etc/gnus \
etc/images etc/images/ezimage etc/images/gnus etc/images/gud \
etc/images/icons etc/images/low-color etc/images/mail \
- etc/images/smilies etc/tree-widget etc/tree-widget/default \
- etc/tree-widget/folder info man m4 msdos vms mac mac/inc \
+ etc/images/smilies etc/images/smilies/grayscale \
+ etc/images/smilies/medium etc/images/tree-widget \
+ etc/images/tree-widget/default etc/images/tree-widget/folder \
+ etc/refcards etc/tutorials info doc doc/emacs doc/misc doc/man \
+ doc/lispref doc/lispintro m4 msdos vms mac mac/inc \
mac/inc/sys mac/src mac/Emacs.app mac/Emacs.app/Contents \
mac/Emacs.app/Contents/MacOS mac/Emacs.app/Contents/Resources \
mac/Emacs.app/Contents/Resources/English.lproj
@@ -569,10 +573,9 @@ echo "Making links to \`lwlib'"
echo "Making links to \`etc'"
### Don't distribute = files, TAGS, DOC files, backups, autosaves, or
### tex litter.
-### Don't distribute gfdl.1, since no man page references it.
(cd etc
files=`ls -d * | grep -v CVS | grep -v RCS | grep -v 'Old' | grep -v '^e$' \
- | grep -v '^images$' | grep -v '^tree-widget$'`
+ | grep -v '^images$' | grep -v '^refcards$' | grep -v '^tutorials$'`
ln $files ../${tempdir}/etc
## If we ended up with a symlink, or if we did not get anything
## due to a cross-device symlink, copy the file.
@@ -591,15 +594,17 @@ echo "Making links to \`etc'"
fi
done
cd ../${tempdir}/etc
- rm -f fns*.el gfdl.1
+ rm -f fns*.el
rm -f DOC* *~ \#*\# *.dvi *.log *.orig *.rej *,v =* core
rm -f TAGS)
-echo "Making links to \`etc/e'"
-(cd etc/e
- ln `ls -d * | grep -v CVS | grep -v RCS` ../../${tempdir}/etc/e
- cd ../../${tempdir}/etc/e
- rm -f *~ \#*\# *,v =* core)
+for dir in etc/e etc/gnus etc/tutorials etc/refcards ; do
+ echo "Making links to \`${dir}'"
+ (cd ${dir}
+ ln `ls -d * | grep -v CVS | grep -v RCS` ../../${tempdir}/${dir}
+ cd ../../${tempdir}/${dir}
+ rm -f *~ \#*\# *,v =* core)
+done
echo "Making links to \`etc/images'"
(cd etc/images
@@ -610,8 +615,7 @@ echo "Making links to \`etc/images'"
done)
for dir in etc/images/ezimage etc/images/gnus etc/images/gud etc/images/icons \
- etc/images/low-color etc/images/mail etc/images/smilies \
- etc/tree-widget/default etc/tree-widget/folder ; do
+ etc/images/low-color etc/images/mail etc/images/smilies ; do
echo "Making links to \`${dir}'"
(cd ${dir}
ln `ls -d * | grep -v CVS | grep -v RCS` ../../../${tempdir}/${dir}
@@ -619,6 +623,15 @@ for dir in etc/images/ezimage etc/images/gnus etc/images/gud etc/images/icons \
rm -f *~ \#*\# *,v =* core)
done
+for dir in etc/images/tree-widget/default etc/images/tree-widget/folder \
+ etc/images/smilies/grayscale etc/images/smilies/medium ; do
+ echo "Making links to \`${dir}'"
+ (cd ${dir}
+ ln `ls -d * | grep -v CVS | grep -v RCS` ../../../../${tempdir}/${dir}
+ cd ../../../../${tempdir}/${dir}
+ rm -f *~ \#*\# *,v =* core)
+done
+
echo "Making links to \`info'"
# Don't distribute backups or autosaves.
(cd info
@@ -629,44 +642,59 @@ echo "Making links to \`info'"
ln emacs dummy~ ; ln emacs \#dummy\#
rm -f *~ \#*\# core)
-echo "Making links to \`man'"
-(cd man
- ln *.texi *.aux *.cps *.fns *.kys *.vrs ../${tempdir}/man
- ln makefile.w32-in ../${tempdir}/man
- test -f README && ln README ../${tempdir}/man
- test -f Makefile.in && ln Makefile.in ../${tempdir}/man
- ln ChangeLog ../${tempdir}/man
- test -f split-man && ln split-man ../${tempdir}/man
- cp texinfo.tex ../${tempdir}/man
- cd ../${tempdir}/man
+echo "Making links to \`doc/emacs'"
+(cd doc/emacs
+ ln *.texi *.aux *.cps *.fns *.kys *.vrs ../../${tempdir}/doc/emacs
+ ln makefile.w32-in ../../${tempdir}/doc/emacs
+ test -f README && ln README ../../${tempdir}/doc/emacs
+ test -f Makefile.in && ln Makefile.in ../../${tempdir}/doc/emacs
+ ln ChangeLog ../../${tempdir}/doc/emacs
+ cp texinfo.tex ../../${tempdir}/doc/emacs
+ cd ../../${tempdir}/doc/emacs
+ rm -f \#*\# =* *~ core emacs-index* *.Z *.z xmail
+ rm -f emacs.?? termcap.?? gdb.?? *.log *.toc *.dvi *.oaux)
+
+echo "Making links to \`doc/misc'"
+(cd doc/misc
+ ln *.texi *.aux *.cps *.fns *.kys *.vrs ../../${tempdir}/doc/misc
+ ln makefile.w32-in ../../${tempdir}/doc/misc
+ test -f README && ln README ../../${tempdir}/doc/misc
+ test -f Makefile.in && ln Makefile.in ../../${tempdir}/doc/misc
+ ln ChangeLog ../../${tempdir}/doc/misc
+ cp texinfo.tex ../../${tempdir}/doc/misc
+ cd ../../${tempdir}/doc/misc
rm -f \#*\# =* *~ core emacs-index* *.Z *.z xmail
rm -f emacs.?? termcap.?? gdb.?? *.log *.toc *.dvi *.oaux)
-echo "Making links to \`lispref'"
-(cd lispref
- ln `ls -1 *.texi` ../${tempdir}/lispref
- ln *.aux *.cps *.fns *.kys *.vrs ../${tempdir}/lispref
- ln *.txt *.el spellfile tindex.pl ../${tempdir}/lispref
- ln makefile.w32-in ../${tempdir}/lispref
- test -f README && ln README ../${tempdir}/lispref
- test -f Makefile.in && ln Makefile.in ../${tempdir}/lispref
- ln ChangeLog ../${tempdir}/lispref
- cd ../${tempdir}/lispref
+echo "Making links to \`doc/lispref'"
+(cd doc/lispref
+ ln `ls -1 *.texi` ../../${tempdir}/doc/lispref
+ ln *.aux *.cps *.fns *.kys *.vrs ../../${tempdir}/doc/lispref
+ ln *.txt *.el spellfile tindex.pl ../../${tempdir}/doc/lispref
+ ln makefile.w32-in ../../${tempdir}/doc/lispref
+ test -f README && ln README ../../${tempdir}/doc/lispref
+ test -f Makefile.in && ln Makefile.in ../../${tempdir}/doc/lispref
+ ln ChangeLog ../../${tempdir}/doc/lispref
+ cd ../../${tempdir}/doc/lispref
rm -f \#*\# =* *~ core elisp-index* *.Z *.z xmail
rm -f elisp.?? *.log *.toc *.dvi *.oaux)
-echo "Making links to \`lispintro'"
-(cd lispintro
- ln *.texi *.aux *.cps *.fns *.kys *.vrs *.eps ../${tempdir}/lispintro
- ln makefile.w32-in ../${tempdir}/lispintro
- test -f texinfo.tex && ln texinfo.tex ../${tempdir}/lispintro
- test -f README && ln README ../${tempdir}/lispintro
- test -f Makefile.in && ln Makefile.in ../${tempdir}/lispintro
- ln ChangeLog ../${tempdir}/lispintro
- cd ../${tempdir}/lispintro
+echo "Making links to \`doc/lispintro'"
+(cd doc/lispintro
+ ln *.texi *.aux *.cps *.fns *.kys *.vrs *.eps ../../${tempdir}/doc/lispintro
+ ln makefile.w32-in ../../${tempdir}/doc/lispintro
+ test -f texinfo.tex && ln texinfo.tex ../../${tempdir}/doc/lispintro
+ test -f README && ln README ../../${tempdir}/doc/lispintro
+ test -f Makefile.in && ln Makefile.in ../../${tempdir}/doc/lispintro
+ ln ChangeLog ../../${tempdir}/doc/lispintro
+ cd ../../${tempdir}/doc/lispintro
rm -f \#*\# =* *~ core *.Z *.z xmail
rm -f emacs-lisp-intro.?? *.log *.toc *.dvi *.oaux)
+echo "Making links to \`doc/man'"
+(cd doc/man
+ ln *.1 ../../${tempdir}/doc/man)
+
echo "Making links to \`vms'"
(cd vms
test -f README && ln README ../${tempdir}/vms
diff --git a/mkinstalldirs b/mkinstalldirs
index 9e4b309b364..be98de6be01 100755
--- a/mkinstalldirs
+++ b/mkinstalldirs
@@ -1,38 +1,152 @@
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+
+scriptversion=2006-05-11.19
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
-# Public domain
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+nl='
+'
+IFS=" "" $nl"
errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage"
+ exit $?
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --version)
+ echo "$0 $scriptversion"
+ exit $?
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error. This is a problem when calling mkinstalldirs
+# from a parallel make. We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+ '')
+ if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ test -d ./-p && rmdir ./-p
+ test -d ./--version && rmdir ./--version
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+ test ! -d ./--version; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ else
+ # Clean up after NextStep and OpenStep mkdir.
+ for d in ./-m ./-p ./--version "./$dirmode";
+ do
+ test -d $d && rmdir $d
+ done
+ fi
+ ;;
+esac
for file
do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
+ case $file in
+ /*) pathcomp=/ ;;
+ *) pathcomp= ;;
+ esac
+ oIFS=$IFS
+ IFS=/
+ set fnord $file
+ shift
+ IFS=$oIFS
+
+ for d
+ do
+ test "x$d" = x && continue
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
+ pathcomp=$pathcomp$d
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
- (mkdir "$pathcomp" && chmod a+rx "$pathcomp") || lasterr=$?
+ mkdir "$pathcomp" || lasterr=$?
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
- fi
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
- pathcomp="$pathcomp/"
- done
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp=$pathcomp/
+ done
done
exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/msdos/ChangeLog b/msdos/ChangeLog
index 0fd192b7722..d61f9e27ace 100644
--- a/msdos/ChangeLog
+++ b/msdos/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-05 Eli Zaretskii <eliz@gnu.org>
+
+ * sed6.inp: Update comment to reflect doc directory structure.
+
+ * sed1v2.inp (RSVG_LIBS, RSVG_CFLAGS): Edit out.
+
2007-07-25 Glenn Morris <rgm@gnu.org>
* Relicense all FSF files to GPLv3 or later.
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index 688a946b5d5..5d3ae877c42 100644
--- a/msdos/sed1v2.inp
+++ b/msdos/sed1v2.inp
@@ -37,6 +37,8 @@ s/\.h\.in/.h-in/
/^GETLOADAVG_LIBS *=/s/@[^@\n]*@//
/^LIBSOUND *=/s/@LIBSOUND@//
/^CFLAGS_SOUND *=/s/@CFLAGS_SOUND@//
+/^RSVG_LIBS *=/s/@RSVG_LIBS@//
+/^RSVG_CFLAGS *=/s/@RSVG_CFLAGS@//
/^EXEEXT *=/s/@EXEEXT@//
/^LN_S *=/s/@[^@\n]*@/ln -s/
/^M_FILE *=/s!@[^@\n]*@!m/intel386.h!
diff --git a/msdos/sed6.inp b/msdos/sed6.inp
index fe377878b5d..1f290fe3fab 100644
--- a/msdos/sed6.inp
+++ b/msdos/sed6.inp
@@ -1,6 +1,6 @@
# -sed6.inp------------------------------------------------------------------
-# Configuration script for man/Makefile, lispref/Makefile, and
-# lispintro/Makefile under DJGPP v2.x
+# Configuration script for doc/emacs/Makefile, doc/lispref/Makefile,
+# doc/lispintro/Makefile, and doc/misc/Makefile under DJGPP v2.x
# ---------------------------------------------------------------------------
#
# Copyright (C) 1997, 2000, 2001, 2002, 2003, 2004,
diff --git a/nt/ChangeLog b/nt/ChangeLog
index aeb8068325d..d9e9540207d 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,18 @@
+2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * config.nt: Remove HAVE_X11R5.
+
+2007-10-22 Jason Rumney <jasonr@gnu.org>
+
+ * config.nt (HAVE_STRINGS_H, HAVE_STDLIB_H): Undefine.
+ (strings.h, stdlib.h): Conditionally include.
+ (w32_abort): Declare here.
+ (abort): Redefine to w32_abort (moved from src/s/ms-w32.h).
+
+2007-10-20 Jason Rumney <jasonr@gnu.org>
+
+ * makefile.w32-in (info-nmake): Change into correct directories.
+
2007-10-20 Eli Zaretskii <eliz@gnu.org>
* configure.bat (docflags, doldflags): New variables.
@@ -14,7 +29,19 @@
* nmake.defs (COMCTL32): New system library.
-2007-08-14 Dhuvra Krishnamurthy <dhuvrakm@gmail.com> (tiny change)
+2007-09-06 Glenn Morris <rgm@gnu.org>
+
+ * configure.bat:
+ * makefile.w32-in (info-nmake, info-gmake)
+ (clean-other-dirs-nmake): Change from ../man to ../doc/emacs and
+ ../doc/misc; and from ../lispref, ../lispintro to ../doc/lispref,
+ ../doc/lispintro.
+
+2007-08-29 Glenn Morris <rgm@gnu.org>
+
+ * emacs.rc: Increase version to 23.0.50.
+
+2007-08-14 Dhuvra Krishnamurthy <dhuvrakm@gmail.com> (tiny change)
* makefile.w32-in (bootstrap-nmake): Change directories once more.
@@ -24,12 +51,22 @@
* COPYING: Switch to GPLv3.
-2007-07-20 Eli Zaretskii <eliz@gnu.org>
+2007-07-16 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in (bootstrap, bootstrap-nmake, bootstrap-gmake):
Depend on cmdproxy.
(cleanall): Don't delete *~.
+2007-07-15 Jason Rumney <jasonr@gnu.org>
+
+ * inc/sys/socket.h (uint16_t): Define if C99 does not appear to
+ be fully supported.
+
+2007-07-14 Jason Rumney <jasonr@gnu.org>
+
+ * inc/sys/socket.h: Include winsock2.h and ws2tcpip.h instead
+ of winsock.h.
+
2007-07-11 Jason Rumney <jasonr@gnu.org>
* gmake.defs (OLE32): New library to link.
@@ -40,6 +77,10 @@
* cmdproxy.c (main): Set console codepages to "ANSI".
+2007-06-20 Jason Rumney <jasonr@gnu.org>
+
+ * configure.bat: Complain if image libraries are missing.
+
2007-06-15 Jason Rumney <jasonr@gnu.org>
* emacs.manifest: New file.
@@ -60,6 +101,10 @@
* INSTALL: Fix URL of EmacsW32 site where building with image
support is described.
+2007-04-26 Glenn Morris <rgm@gnu.org>
+
+ * emacs.rc: Increase version to 22.1.50.
+
2007-03-31 Eli Zaretskii <eliz@gnu.org>
* INSTALL: Mention the VCVARS32.BAT batch file for VS.NET users.
diff --git a/nt/config.nt b/nt/config.nt
index fb33f2797c7..10dbb3b06de 100644
--- a/nt/config.nt
+++ b/nt/config.nt
@@ -77,9 +77,6 @@ Boston, MA 02110-1301, USA. */
/* Define if we have the X11R6 or newer version of Xlib. */
#undef HAVE_X11R6
-/* Define if we have the X11R5 or newer version of Xlib. */
-#undef HAVE_X11R5
-
/* Define if netdb.h declares h_errno. */
#undef HAVE_H_ERRNO
@@ -140,6 +137,8 @@ Boston, MA 02110-1301, USA. */
#undef HAVE_TERMIOS_H
#undef HAVE_LIMITS_H
#undef HAVE_STRING_H
+#undef HAVE_STRINGS_H
+#undef HAVE_STDLIB_H
#undef HAVE_PWD_H
#undef STDC_HEADERS
#undef TIME_WITH_SYS_TIME
@@ -469,6 +468,12 @@ extern char *getenv ();
#ifdef HAVE_STRING_H
#include "string.h"
#endif
+#ifdef HAVE_STRINGS_H
+#include "strings.h"
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
#endif
#ifndef NO_RETURN
@@ -479,5 +484,13 @@ extern char *getenv ();
#endif
#endif
+/* Redefine abort. */
+#ifndef NOT_C_CODE
+#ifdef HAVE_NTGUI
+#define abort w32_abort
+void w32_abort (void) NO_RETURN;
+#endif
+#endif
+
/* arch-tag: df720992-aa5a-499a-882d-958dc5eeb5e9
(do not change this comment) */
diff --git a/nt/configure.bat b/nt/configure.bat
index 2ea58ecf933..ef0a746949b 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -120,11 +120,11 @@ echo. --no-opt disable optimization
echo. --no-cygwin use -mno-cygwin option with GCC
echo. --cflags FLAG pass FLAG to compiler
echo. --ldflags FLAG pass FLAG to compiler when linking
-echo. --without-png do not use libpng even if it is installed
-echo. --without-jpeg do not use jpeg-6b even if it is installed
-echo. --without-gif do not use libungif even if it is installed
-echo. --without-tiff do not use libtiff even if it is installed
-echo. --without-xpm do not use libXpm even if it is installed
+echo. --without-png do not use libpng
+echo. --without-jpeg do not use jpeg-6b
+echo. --without-gif do not use giflib or libungif
+echo. --without-tiff do not use libtiff
+echo. --without-xpm do not use libXpm
goto end
rem ----------------------------------------------------------------------
:setprefix
@@ -515,9 +515,10 @@ if exist config.tmp del config.tmp
copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
-copy /b config.settings+%MAKECMD%.defs+..\man\makefile.w32-in ..\man\makefile
-copy /b config.settings+%MAKECMD%.defs+..\lispref\makefile.w32-in ..\lispref\makefile
-copy /b config.settings+%MAKECMD%.defs+..\lispintro\makefile.w32-in ..\lispintro\makefile
+copy /b config.settings+%MAKECMD%.defs+..\doc\emacs\makefile.w32-in ..\doc\emacs\makefile
+copy /b config.settings+%MAKECMD%.defs+..\doc\misc\makefile.w32-in ..\doc\misc\makefile
+copy /b config.settings+%MAKECMD%.defs+..\doc\lispref\makefile.w32-in ..\doc\lispref\makefile
+copy /b config.settings+%MAKECMD%.defs+..\doc\lispintro\makefile.w32-in ..\doc\lispintro\makefile
if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
rem Use the default (no-op) Makefile.in if the nt version is not present.
@@ -539,6 +540,51 @@ copy subdirs.el ..\site-lisp\subdirs.el
:dontUpdateSubdirs
echo.
+
+rem check that we have all the libraries we need.
+set libsOK=1
+
+if not "(%HAVE_XPM%)" == "()" goto checkpng
+if (%xpmsupport%) == (N) goto checkpng
+ set libsOK=0
+ echo XPM support is missing. It is required for color icons in the toolbar.
+ echo Install libXpm development files or use --without-xpm
+
+:checkpng
+if not "(%HAVE_PNG%)" == "()" goto checkjpeg
+if (%pngsupport%) == (N) goto checkjpeg
+ set libsOK=0
+ echo PNG support is missing.
+ echo Install libpng development files or use --without-png
+
+:checkjpeg
+if not "(%HAVE_JPEG%)" == "()" goto checktiff
+if (%jpegsupport%) == (N) goto checktiff
+ set libsOK=0
+ echo JPEG support is missing.
+ echo Install jpeg development files or use --without-jpeg
+
+:checktiff
+if not "(%HAVE_TIFF%)" == "()" goto checkgif
+if (%tiffsupport%) == (N) goto checkgif
+ set libsOK=0
+ echo TIFF support is missing.
+ echo Install libtiff development files or use --without-tiff
+
+:checkgif
+if not "(%HAVE_GIF%)" == "()" goto donelibchecks
+if (%gifsupport%) == (N) goto donelibchecks
+ set libsOK=0
+ echo GIF support is missing.
+ echo Install giflib or libungif development files or use --without-gif
+
+:donelibchecks
+if (%libsOK%) == (1) goto success
+echo.
+echo Important libraries are missing. Fix these issues before running make.
+goto end
+
+:success
echo Emacs successfully configured.
echo Emacs successfully configured. >>config.log
echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
@@ -556,7 +602,9 @@ set nocygwin=
set COMPILER=
set MAKECMD=
set usercflags=
+set docflags=
set userldflags=
+set doldflags=
set mingwflag=
set mf=
diff --git a/nt/emacs.rc b/nt/emacs.rc
index 861b336fd35..3565493d003 100644
--- a/nt/emacs.rc
+++ b/nt/emacs.rc
@@ -7,8 +7,8 @@ Emacs ICON icons\emacs.ico
#endif
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 22,1,50,0
- PRODUCTVERSION 22,1,50,0
+ FILEVERSION 23,0,50,0
+ PRODUCTVERSION 23,0,50,0
FILEFLAGSMASK 0x3FL
#ifdef EMACSDEBUG
FILEFLAGS 0x1L
@@ -25,12 +25,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Free Software Foundation\0"
VALUE "FileDescription", "GNU Emacs for Windows NT/95/98/2000/ME/XP\0"
- VALUE "FileVersion", "22, 1, 50, 0\0"
+ VALUE "FileVersion", "23, 0, 50, 0\0"
VALUE "InternalName", "Emacs\0"
VALUE "LegalCopyright", "Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007\0"
VALUE "OriginalFilename", "emacs.exe"
VALUE "ProductName", "Emacs: The extensible self-documenting text editor\0"
- VALUE "ProductVersion", "22, 1, 50, 0\0"
+ VALUE "ProductVersion", "23, 0, 50, 0\0"
VALUE "OLESelfRegister", "\0"
END
END
diff --git a/nt/inc/sys/socket.h b/nt/inc/sys/socket.h
index 5050720a3f4..f848231299d 100644
--- a/nt/inc/sys/socket.h
+++ b/nt/inc/sys/socket.h
@@ -51,7 +51,13 @@ Boston, MA 02110-1301, USA. */
#define timeval ws_timeval
#endif
-#include <winsock.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+/* process.c uses uint16_t (from C99) for IPv6, but
+ apparently it is not defined in some versions of mingw and msvc. */
+#ifndef UINT16_C
+typedef unsigned short uint16_t;
+#endif
/* redefine select to reference our version */
#ifdef MUST_REDEF_SELECT
diff --git a/nt/makefile.w32-in b/nt/makefile.w32-in
index c8b94a639a0..a792889af24 100644
--- a/nt/makefile.w32-in
+++ b/nt/makefile.w32-in
@@ -234,23 +234,27 @@ install-other-dirs-gmake:
$(MAKE) $(MFLAGS) $(XMFLAGS) -C ../leim install
force-info:
-# Note that man/makefile knows how to
+# Note that doc/emacs/makefile knows how to
# put the info files in $(infodir),
# so we can do ok running make in the build dir.
info: force-info info-$(MAKETYPE)
info-nmake:
- cd ..\man
+ cd ..\doc\emacs
+ $(MAKE) $(MFLAGS) info
+ cd ..\misc
$(MAKE) $(MFLAGS) info
cd ..\lispref
$(MAKE) $(MFLAGS) info
cd ..\lispintro
$(MAKE) $(MFLAGS) info
+ cd $(MAKEDIR)
info-gmake:
- $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../man info
- $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lispref info
- $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../lispintro info
+ $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/emacs info
+ $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/misc info
+ $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispref info
+ $(MAKE) $(MFLAGS) $(XMFLAGS) -C ../doc/lispintro info
#
# Maintenance
#
@@ -267,13 +271,15 @@ clean-other-dirs-nmake:
$(MAKE) $(MFLAGS) clean
cd ..\lisp
$(MAKE) $(MFLAGS) clean
- cd ..\lispintro
+ cd ..\doc\lispintro
$(MAKE) $(MFLAGS) clean
- cd ..\lispref
+ cd ..\doc\lispref
$(MAKE) $(MFLAGS) clean
cd ..\leim
$(MAKE) $(MFLAGS) clean
- cd ..\man
+ cd ..\doc\emacs
+ $(MAKE) $(MFLAGS) clean
+ cd ..\doc\misc
$(MAKE) $(MFLAGS) clean
cd ..\nt
diff --git a/src/.arch-inventory b/src/.arch-inventory
index fe99529135f..c21e38d47d7 100644
--- a/src/.arch-inventory
+++ b/src/.arch-inventory
@@ -3,7 +3,10 @@ source ^\.(gdbinit|dbxinit)$
# Auto-generated files, which ignore
precious ^(config\.stamp|config\.h|epaths\.h|buildobj\.lst)$
+precious ^(TAGS-LISP)$
+precious ^(buildobj\.lst)$
backup ^(stamp-oldxmenu|prefix-args|temacs|emacs|emacs-[0-9.]*)$
+backup ^(bootstrap-emacs)$
# arch-tag: 277cc7ae-b3f5-44af-abf1-84c073164543
diff --git a/src/.gdbinit b/src/.gdbinit
index 851322059a8..ad7b666f188 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -998,7 +998,7 @@ define xbacktrace
xgettype (*$bt->function)
if $type == Lisp_Symbol
xprintsym (*$bt->function)
- printf " (0x%x)\n", *$bt->args
+ printf " (0x%x)\n", $bt->args
else
printf "0x%x ", *$bt->function
if $type == Lisp_Vectorlike
@@ -1115,7 +1115,7 @@ end
tbreak init_sys_modes
commands
silent
- xgetptr Vwindow_system
+ xgetptr Vinitial_window_system
set $tem = (struct Lisp_Symbol *) $ptr
xgetptr $tem->xname
set $tem = (struct Lisp_String *) $ptr
diff --git a/src/ChangeLog b/src/ChangeLog
index 5d3fdf4b9af..9f99493e668 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,19 +1,113 @@
-2007-11-19 Jason Rumney <jasonr@gnu.org>
+2007-11-21 Jason Rumney <jasonr@gnu.org>
* w32bdf.c (w32_init_bdf_font, w32_BDF_to_x_font): CreateFileMapping
returns NULL on failure.
-2007-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
* search.c (Fset_match_data): Remove the `evaporate' feature.
(unwind_set_match_data): Don't use the `evaporate' feature.
+2007-11-21 Jason Rumney <jasonr@gnu.org>
+
+ * dispnew.c (init_display) [WINDOWSNT]: Hardcode terminal_type.
+
+ * w32console.c (w32con_write_glyphs): Remove unused variables.
+
+2007-11-20 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * macterm.c (mac_term_init): Call add_keyboard_wait_descriptor.
+
+ * s/darwin.h (MULTI_KBOARD): Remove.
+
+ * macfns.c (x_create_tip_frame, Fx_create_frame)
+ (x_create_tip_frame): Don't deal with MULTI_KBOARD.
+
+2007-11-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * buffer.c (Fbuffer_local_value): Remove redundant test.
+ (swap_out_buffer_local_variables): Swap out binding in `buffer' rather
+ than in `current-buffer' to match the comment.
+ Do the swap using swap_in_global_binding.
+
+ * data.c (store_symval_forwarding, set_internal):
+ * eval.c (specbind): Remove dead code.
+
+ * coding.c (detect_coding, Fupdate_coding_systems_internal):
+ * fns.c (Fmd5): Use find_symbol_value rather than SYMBOL_VALUE
+ Since we do not want to see internal Lisp_*fwd objects here.
+
+2007-11-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * sysdep.c (init_system_name): Use getaddrinfo if available.
+
+ * xterm.c (x_scroll_bar_set_handle, x_scroll_bar_handle_click)
+ (x_scroll_bar_note_movement): start, end, with, height in struct
+ scroll_bar are integers and not Lisp_Object, so remove XINT for them.
+
+2007-11-17 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * puresize.h (BASE_PURESIZE): Increase to 1190000.
+
+2007-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * buffer.h (struct buffer): Move `undo_list' back to before `name'.
+ This undoes Richard's change of 14-Oct-2002.
+
+ * alloc.c (allocate_other_vector):
+ * lisp.h (allocate_other_vector): Remove.
+
+ * window.c (struct save_window_data): Move non-lisp data to the end
+ and make it `int' rather than Lisp_Object.
+ (Fcurrent_window_configuration): Use ALLOCATE_PSEUDOVECTOR.
+ Done wrap/unwrap integer values.
+ (Fset_window_configuration, compare_window_configurations):
+ Update use of fields to their new types.
+
+ * xterm.h (struct scroll_bar): Only use Lisp_Object for lisp data.
+ Turn integer fields into `int'. Merge x_window_low and x_window_high.
+ (SCROLL_BAR_PACK, SCROLL_BAR_UNPACK, SCROLL_BAR_X_WINDOW)
+ (SET_SCROLL_BAR_X_WINDOW): Remove.
+ (SCROLL_BAR_X_WIDGET, SET_SCROLL_BAR_X_WIDGET):
+ Access the new x_window field directly.
+ * xterm.c (x_scroll_bar_create): Use a pseudovector.
+ Don't wrap/unwrap integers into Lisp_Objects.
+ (XTset_vertical_scroll_bar, x_scroll_bar_handle_click)
+ (x_scroll_bar_report_motion):
+ Don't wrap/unwrap integers into Lisp_Objects.
+ (x_term_init): Use SDATA.
+ (x_window_to_scroll_bar, x_create_toolkit_scroll_bar)
+ (x_scroll_bar_set_handle, x_scroll_bar_remove)
+ (XTset_vertical_scroll_bar, x_scroll_bar_expose)
+ (x_scroll_bar_report_motion, x_scroll_bar_clear):
+ * xfns.c (x_set_background_color):
+ * gtkutil.c (xg_create_scroll_bar, xg_set_toolkit_scroll_bar_thumb):
+ Access the new x_window field directly.
+
+ * alloc.c (ALLOCATE_PSEUDOVECTOR): Move to lisp.h.
+ (allocate_pseudovector): Make non-static.
+
+ * lisp.h (enum pvec_type): New tag PVEC_OTHER.
+ (allocate_pseudovector): Declare.
+ (ALLOCATE_PSEUDOVECTOR): Move from alloc.c
+
2007-11-15 Andreas Schwab <schwab@suse.de>
* editfns.c (Fformat): Correctly format EMACS_INT values.
Also take precision into account when formatting an integer.
-2007-11-15 Juanma Barranquero <lekktu@gmail.com>
+ * keyboard.c (Fevent_symbol_parse_modifiers): Fix declaration.
+
+2007-11-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keyboard.c (Fevent_symbol_parse_modifiers): New function.
+ (syms_of_keyboard): Defsubr it.
+
+ * data.c (swap_in_global_binding): Fix longstanding bug where
+ store_symval_forwarding was not called with the right second argument,
+ thus causing objfwd-ing from being dropped.
+
+2007-11-14 Juanma Barranquero <lekktu@gmail.com>
* macfns.c (Fx_create_frame, Fx_display_pixel_width)
(Fx_display_pixel_height, Fx_display_planes)
@@ -39,7 +133,14 @@
corresponding to deleted entries; they are an implementation detail.
(gray_bitmap_width, gray_bitmap_height, gray_bitmap_bits):
Remove variables.
- (Fw32_define_rgb_color, Fw32_load_color_file): Fix typos in docstrings.
+ (w32_pass_extra_mouse_buttons_to_system, w32_strict_fontnames)
+ (w32_pass_multimedia_buttons_to_system, w32_strict_painting)
+ (Vw32_charset_info_alist, w32_to_x_color, w32_init_class)
+ (w32_createscrollbar, w32_createwindow, my_post_msg, w32_get_modifiers)
+ (w32_grabbed_keys, cancel_all_deferred_msgs): Make static.
+ (Fw32_define_rgb_color, Fw32_load_color_file)
+ (syms_of_w32fns) <w32-pass-multimedia-buttons-to-system>:
+ Fix typos in docstrings.
(Fx_server_version): Reflow docstring.
(Fw32_shell_execute): Doc fixes.
@@ -48,27 +149,45 @@
* w32fns.c (Fw32_register_hot_key): Don't try to register hot key
if w32_parse_hot_key returned nil.
-2007-11-10 Juri Linkov <juri@jurta.org>
-
- * puresize.h (BASE_PURESIZE): Increase to 1130000.
-
2007-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
* xdisp.c (load_overlay_strings): Fix copy&paste typo.
-2007-11-07 Chong Yidong <cyd@stupidchicken.com>
+2007-11-09 Jason Rumney <jasonr@gnu.org>
+
+ * s/ms-w32.c (USE_TOOLKIT_SCROLL_BARS): Define.
+
+ * w32term.c (w32_scroll_bar_handle_click): Use SCROLL_BAR_CLICK_EVENT.
+
+ * keyboard.c (discard_mouse_events, make_lispy_event) [WINDOWSNT]:
+ Remove W32_SCROLL_BAR_CLICK_EVENT.
+
+ * termhooks.h (enum event_kind) [WINDOWSNT]: Likewise.
+ Add MULTIMEDIA_KEY_EVENT.
+
+ * keyboard.c (lispy_function_keys) [WINDOWSNT]: Add more keys.
+ (lispy_multimedia_keys) [WINDOWSNT]: New array.
+ (make_lispy_event) [WINDOWSNT]: Use it to translate
+ MULTIMEDIA_KEY_EVENT.
+
+ * w32term.h (WM_APPCOMMAND): Define if not already.
+ (GET_APPCOMMAND_LPARAM): Likewise.
+
+ * w32term.c (w32_read_socket): Generate MULTIMEDIA_KEY_EVENT from
+ WM_APPCOMMAND.
+
+ * w32fns.c (w32_pass_multimedia_buttons_to_system): New user option.
+ (syms_of_w32fns): Export and initialize it.
+ (w32_wnd_proc): Pass WM_APPCOMMAND on to w32_read_socket.
+
+2007-11-09 Chong Yidong <cyd@stupidchicken.com>
* dispextern.h (struct it): Don't define OVERLAY_STRING_CHUNK_SIZE
twice.
* xdisp.c (handle_face_prop): Fix last change.
-2007-11-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
- abort with a message on unhandled store_type values.
-
-2007-11-04 Richard Stallman <rms@gnu.org>
+2007-11-09 Richard Stallman <rms@gnu.org>
* xdisp.c (handle_face_prop): Test for strings that came from overlays,
not just for after-strings and before-strings.
@@ -88,7 +207,7 @@
(face_for_overlay_string): Decl renamed from
face_at_buffer_position_no_overlays, and add argument.
-2007-11-03 Richard Stallman <rms@gnu.org>
+2007-11-09 Richard Stallman <rms@gnu.org>
* xdisp.c (handle_face_prop): Use face_at_buffer_position_no_overlays
to get the base face for an overlay string.
@@ -99,28606 +218,2826 @@
* xdisp.c (handle_stop): Move some code out of loop.
-2007-11-01 Johan Bockg,Ae(Brd <bojohan@gnu.org>
-
- * macterm.c, w32term.c, xterm.c (x_draw_stretch_glyph_string):
- Don't set s->stippled_p here, since it has already been set by
- x_set_glyph_string_gc from x_draw_glyph_string.
-
-2007-10-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* macfns.c [USE_ATSUI] (Fmac_atsu_font_face_attributes):
Fix conversion from Lisp object to ATSUFontID.
-2007-10-30 Jason Rumney <jasonr@gnu.org>
+2007-11-09 Jason Rumney <jasonr@gnu.org>
* xdisp.c (Fformat_mode_line): Do nothing when noninteractive.
-2007-10-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
* unexmacosx.c (unexec_regions_recorder, unexec_regions_merge):
Don't assume regions are aligned to page boundary.
(print_load_command_name): Add LC_UUID if defined.
-2007-10-30 Richard Stallman <rms@gnu.org>
+2007-11-09 Richard Stallman <rms@gnu.org>
* emacs.c (syms_of_emacs) <installation-directory>: Reflow docstring.
-2007-10-29 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs.c (syms_of_emacs) <kill-emacs-hook>: Fix typo in docstring.
- <installation-directory>: Reflow docstring.
-
-2007-10-26 Martin Rudalics <rudalics@gmx.at>
-
- * window.c (window_min_size_2): Don't count header-line.
-
-2007-10-25 Juanma Barranquero <lekktu@gmail.com>
-
- * w32.c (init_environment): Fix tiny memory leak.
- (w32_get_resource): Remove unused variable `ok'.
-
-2007-10-24 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c: Include math.h.
-
-2007-10-24 Richard Stallman <rms@gnu.org>
-
- * frame.c (x_figure_window_size): For fullscreen case,
- set USPosition | PPosition without clobbering rest of window_prompting.
-
- * keyboard.c (Fcurrent_idle_time): Doc fix.
-
- * print.c (Fwith_output_to_temp_buffer): Doc fix.
-
-2007-10-19 Juanma Barranquero <lekktu@gmail.com>
-
- * process.c (Fset_process_filter): Doc fix.
-
-2007-10-17 Glenn Morris <rgm@gnu.org>
-
- * minibuf.c (Qcompletion_ignore_case): New Lisp_Object.
- (syms_of_minibuf): Add Qcompletion_ignore_case.
- * dired.c (Qcompletion_ignore_case): Change to external.
- (syms_of_dired) [VMS]: Remove Qcompletion_ignore_case.
- * fileio.c (Qcompletion_ignore_case): New external Lisp_Object.
- (Fread_file_name): Use it rather than intern'ing.
-
- * coding.c (Qcompletion_ignore_case): New external Lisp_Object.
- (Fread_coding_system): Ignore case of user input.
-
-2007-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xdisp.c (handle_display_prop): Ignore display specs after
- replacing one when string text is being replaced.
- (handle_single_display_spec): Pretend as if characters with display
- property haven't been consumed only when buffer text is being replaced.
-
-2007-10-14 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (do_autoload): Don't save autoloads.
-
- * data.c (Ffset): Save autoload of the function being set.
-
-2007-10-07 John Paul Wallington <jpw@pobox.com>
-
- * xfns.c (x_create_tip_frame): Set the `display-type' frame
- parameter before setting up faces.
-
-2007-10-13 Eli Zaretskii <eliz@gnu.org>
-
- * msdos.c (dos_rawgetc): Undo last change (there's no ``leaving
- selected frame'' on MSDOS).
-
-2007-10-12 Martin Rudalics <rudalics@gmx.at>
-
- * frame.c (Qexplicit_name): New variable.
- (x_report_frame_params): Report it in parameter alist.
- (syms_of_frame): Intern and staticpro it.
-
-2007-10-09 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_set_window_size): Disable code that attempts to tell
- Lisp code about a size change before it actually happens.
-
-2007-10-09 Richard Stallman <rms@gnu.org>
-
- * xdisp.c (handle_invisible_prop): After setting up an ellipsis,
- return HANDLED_RETURN.
-
-2007-10-06 Martin Rudalics <rudalics@gmx.at>
-
- * keyboard.c (kbd_buffer_get_event): Break loop waiting for input
- when there's an unread command event.
-
- * frame.c (focus_follows_mouse): Moved here from frame.el to allow
- window autoselection act appropriately when leaving selected frame.
- (syms_of_frame): Initialize focus_follows_mouse.
- * frame.h (focus_follows_mouse): Extern it.
- * macterm.c (XTread_socket): When focus_follows_mouse is nil
- make SELECT_WINDOW_EVENT only if we don't leave the selected
- frame.
- * msdos.c (dos_rawgetc): Likewise.
- * w32term.c (w32_read_socket): Likewise.
- * xterm.c (handle_one_xevent): Likewise.
- * xdisp.c (syms_of_xdisp): In doc-string of
- mouse-autoselect-window mention focus-follows-mouse.
-
-2007-10-06 Andreas Schwab <schwab@suse.de>
-
- * fileio.c (Fwrite_region): Ignore EINVAL error from fsync.
-
-2007-10-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_load_query_font): Fix missing return value.
- [USE_CG_DRAWING] (mac_define_fringe_bitmap, mac_destroy_fringe_bitmap):
- Add BLOCK_INPUT.
-
-2007-10-04 Juanma Barranquero <lekktu@gmail.com>
-
- * image.c (syms_of_image) <image-types>: Fix typo in docstring.
-
-2007-10-02 Richard Stallman <rms@gnu.org>
-
- * xdisp.c (get_window_cursor_type): Implement documented behavior
- for cursor-in-non-selected-windows = t.
-
-2007-10-01 Juanma Barranquero <lekktu@gmail.com>
-
- * lread.c (Fload): Fix typo in docstring.
-
-2007-09-29 Juri Linkov <juri@jurta.org>
-
- * emacs.c (standard_args): Change priority of "--no-splash"
- from 40 to 3. Add "--no-desktop" with the same priority.
-
-2007-09-29 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (w32_get_resource): Always close registry keys.
-
-2007-09-27 Jason Rumney <jasonr@gnu.org>
-
- * makefile.w32-in (LIBS): Add COMCTL32.
-
- * w32fns.c (globals_of_w32fns): Init common controls.
-
-2007-09-21 Richard Stallman <rms@gnu.org>
-
- * image.c (our_memory_buffer): Renamed from omfib_buffer.
-
-2007-09-21 Juanma Barranquero <lekktu@gmail.com>
-
- * w32term.c (x_draw_glyph_string): Use strike_through_color, not
- underline_color, to draw strike-through.
-
-2007-09-20 Glenn Morris <rgm@gnu.org>
-
- * process.c (Fmake_network_process): Doc fix.
-
-2007-09-19 Richard Stallman <rms@gnu.org>
-
- * buffer.c (Foverlays_at): Doc fix.
-
-2007-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fns.c (Fplist_put): Preserve uneven tail data.
-
-2007-09-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_image_for_pixmap): Always create a GdkPixbuf
- when we have no file name for the icon.
- (xg_tool_bar_expose_callback): Remove.
- (xg_create_tool_bar): Don't connect expose signal to
- xg_tool_bar_expose_callback.
-
-2007-09-16 Andreas Schwab <schwab@suse.de>
-
- * alloc.c (reset_malloc_hooks): Set the hooks to the previous
- values instead of zapping them.
-
-2007-09-15 Glenn Morris <rgm@gnu.org>
-
- * s/hpux.h: No longer define `static' as nothing.
-
-2007-09-14 Glenn Morris <rgm@gnu.org>
-
- * fringe.c (init_fringe_bitmap) <swap nibble>: Move to file scope.
- * gtkutil.c (xg_separator_p) <separator_names>: Move to file scope.
- * image.c (our_memory_fill_input_buffer) <buffer>: Move to file
- scope and rename to omfib_buffer for clarity.
- (gif_load) <interlace_start, interlace_increment>: Move to file scope.
-
-2007-09-14 Peter O'Gorman <bug-gnu-emacs@mlists.thewrittenword.com> (tiny change)
-
- * gtkutil.c (xg_get_file_with_chooser): Move GCPRO1 after declarations.
-
- * termhooks.h (enum event_kind): Remove trailing comma.
-
- * frame.h (enum): Remove trailing comma.
-
-2007-09-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c, xterm.c, xfaces.c (abs): #undef before #define.
-
-2007-09-12 Glenn Morris <rgm@gnu.org>
-
- * gtkutil.c (cnt): Rename to menu_grab_callback_cnt for clarity.
- (menu_grab_callback): All uses changed.
-
- * xselect.c (cnt): Rename to x_reply_selection_request_cnt for clarity.
- (x_reply_selection_request): All uses changed.
-
-2007-09-06 Pixel <pixel@mandriva.com> (tiny change)
-
- * image.c (gif_load): Fix bug: Handle nonexistent colormap.
-
-2007-09-06 Glenn Morris <rgm@gnu.org>
-
- * gtkutil.c (menu_grab_callback) <cnt>:
- * xselect.c (x_reply_selection_request) <cnt>: Move static
- variable to file scope.
-
-2007-09-02 Dhuvra Krishnamurthy <dhuvrakm@gmail.com> (tiny change)
-
- * w32proc.c (delete_child): Don't terminate threads of zombies.
-
-2007-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c: Qrtl is new.
- (parse_tool_bar_item): Handle :rtl keyword.
- (syms_of_keyboard): Intern :rtl keyword.
-
- * dispextern.h (enum tool_bar_item_idx): Add TOOL_BAR_ITEM_RTL_IMAGE.
-
- * gtkutil.c (file_for_image, find_rtl_image): New functions.
- (xg_get_image_for_pixmap): Use file_for_image
- (update_frame_tool_bar): If direction is RTL, use RTL image if
- defined. Use Gtk stock images or named theme icons if defined.
-
-2007-08-29 Martin Rudalics <rudalics@gmx.at>
-
- * keyboard.h (struct kboard): New elt Vlast_repeatable_command.
-
- * keyboard.c (syms_of_keyboard): Set up new Lisp variable
- last-repeatable-command.
- (init_kboard): Initialize Vlast_repeatable_command.
- (command_loop_1): Set it to real_this_command unless that was
- bound to an input event.
- (mark_kboards): Mark it.
-
-2007-08-28 Juanma Barranquero <lekktu@gmail.com>
-
- * image.c (syms_of_image) <image-library-alist, cross-disabled-images>:
- Doc fixes.
-
-2007-08-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_expose_callback): Just do SET_FRAME_GARBAGED
- so no Lisp code is executed.
-
-2007-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (x_draw_composite_glyph_string_foreground): Draw rectangle
- for nonexistent or zero-width glyph in composition glyph.
-
-2007-08-27 Richard Stallman <rms@gnu.org>
-
- * eval.c (condition-case): Doc fix.
-
-2007-08-27 Masatake YAMATO <jet@gyve.org>
-
- * xfaces.c (tty_supports_face_attributes_p): Fix code
- for LFACE_INVERSE_INDEX and LFACE_BACKGROUND_INDEX; code
- was copied and not edited.
-
-2007-08-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lread.c (load_warn_old_style_backquotes): Fix up array size typo.
-
-2007-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lread.c (Qold_style_backquotes): New var.
- (syms_of_lread): Init and staticpro it.
- (load_warn_old_style_backquotes): New fun.
- (Fload): Use them to warn about old style backquotes.
- (end_of_file_error, Fload): Remove unused vars.
-
- * lisp.h (Fclear_face_cache, Fx_send_client_event): Declare.
-
- * lread.c (Vold_style_backquotes): New var.
- (syms_of_lread): Init and export it to Elisp.
- (read1): Set it when we find an old-style (back)quote.
-
-2007-08-22 Jason Rumney <jasonr@gnu.org>
-
- * w32reg.c (SYSTEM_DEFAULT_RESOURCES): Add missing NULL terminator.
-
-2007-08-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * insdel.c (reset_var_on_error): New fun.
- (signal_before_change, signal_after_change):
- Use it to reset (after|before)-change-functions to nil in case of error.
- Bind inhibit-modification-hooks to t.
- Don't bind (after|before)-change-functions to nil while they run.
-
-2007-08-19 Andreas Schwab <schwab@suse.de>
-
- * alloc.c (pure): Round PURESIZE up.
-
-2007-08-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Remove check that mouse click is in
- active frame.
-
-2007-08-15 Philippe Waroquiers <philippe.waroquiers@eurocontrol.int>
-
- * term.c (tty_default_color_capabilities): Declare static
- variables in file scope, to avoid HPUX compiler problem.
-
-2007-08-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-11-07 Jason Rumney <jasonr@gnu.org>
- * gtkutil.c (update_frame_tool_bar): Use -1 as index
- to gtk_toolbar_insert.
-
-2007-08-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xterm.c (x_draw_image_glyph_string): Adjust stipple origin when
- filling pixmap with stippled background.
-
-2007-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * print.c (new_backquote_output): Rename from old_backquote_output.
- (print): Inverse its logic (according to its name) so as to match the
- behavior of new_backquote_flag in lread.c.
-
-2007-08-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * gmalloc.c (posix_memalign): New function.
+ * s/windows95.h: Remove.
-2007-08-08 Glenn Morris <rgm@gnu.org>
-
- * Replace `iff' in doc-strings and comments.
-
-2007-08-07 Chong Yidong <cyd@stupidchicken.com>
-
- * dispextern.h (struct image): New members.
-
- * image.c: Sync to trunk version.
- (search_image_cache, uncache_image, image-refresh): New functions.
- Check for fg and bg colors.
- (lookup_image): Use search_image_cache. Cache fg and bg colors.
- (pbm_load): Another check for invalid image data.
- (png_load): Ignore default background field.
-
- * xdisp.c (move_it_by_lines): Remove incorrect optimization.
-
-2007-08-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gmalloc.c (__malloc_initialize): Remove pthread_once. Not needed.
-
-2007-08-07 Sam Steingold <sds@gnu.org>
-
- * gmalloc.c (__morecore): Fix the declaration to comply with the
- definition.
-
-2007-08-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * emacs.c (main)
- [HAVE_GTK_AND_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]:
- Call malloc_enable_thread on interactive startup.
-
- * gmalloc.c (_malloc_thread_enabled_p) [USE_PTHREAD]: New variable.
- (LOCK, UNLOCK, LOCK_ALIGNED_BLOCKS, UNLOCK_ALIGNED_BLOCKS)
- [USE_PTHREAD]: Conditionalize with it.
- (malloc_atfork_handler_prepare, malloc_atfork_handler_parent)
- (malloc_atfork_handler_child, malloc_enable_thread) [USE_PTHREAD]:
- New functions.
-
-2007-08-06 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (redisplay_window): When restoring original buffer
- position, make sure it is still valid.
-
-2007-08-06 Martin Rudalics <rudalics@gmx.at>
-
- * window.c (window_min_size_2): New function.
- (window_min_size_1, size_window, Fdisplay_buffer)
- (Fsplit_window, adjust_window_trailing_edge): Use it to avoid
- windows without mode- or header-lines when window-min-height is
- too small.
- (size_window): Reset nodelete_p after testing it, following an
- earlier note by Kim F. Storm.
- (display_buffer): Do not set split_height_threshold to twice the
- value of window_min_height to avoid changing the value of a
- customizable variable. Rather explicitly check whether the
- height of the window that shall be splitted is at least as large
- as split_height_threshold.
- (Fwindow_full_width_p): New defun.
- (syms_of_window): Defsubr it.
-
- * window.h: Add EXFUN for Fwindow_full_width_p.
-
-2007-08-06 Andreas Schwab <schwab@suse.de>
-
- * window.c (Fdisplay_buffer): Use NILP.
- (Fset_window_scroll_bars): Likewise.
-
-2007-08-03 Richard Stallman <rms@gnu.org>
-
- * fileio.c (Fvisited_file_modtime): Use make_time.
-
-2007-08-01 Ryo Yoshitake <ryo@shiftmode.net> (tiny change)
-
- * mac.c (init_mac_osx_environment): Adjust load-path on self-contained
- build.
-
-2007-07-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * eval.c (init_eval_once): Bump max_lisp_eval_depth to 400.
-
-2007-07-25 Glenn Morris <rgm@gnu.org>
-
- * Relicense all FSF files to GPLv3 or later.
-
- * COPYING: Switch to GPLv3.
-
-2007-07-24 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (x_real_positions): Get real position from OS instead of
- calculating it.
-
-2007-07-23 Jason Rumney <jasonr@gnu.org>
+2007-11-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * filelock.c (current_lock_owner): Allow for @ sign in username.
+ * gtkutil.c (xg_tool_bar_menu_proxy): Handle GTK_IMAGE_ICON_NAME and
+ abort with a message on unhandled store_type values.
-2007-07-20 Eli Zaretskii <eliz@gnu.org>
+2007-11-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * makefile.w32-in (clean): Don't delete *~.
+ * xterm.c, xfns.c, xselect.c, xterm.h, s/msdos.h, s/sco4.h, s/sco5.h:
+ Remove HAVE_X11R5 and HAVE_X11R4.
- * w32proc.c (IMAGE_NT_OPTIONAL_HDR32_MAGIC, IMAGE_OPTIONAL_HEADER32):
- Define if not defined.
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
-2007-07-18 Jason Rumney <jasonr@gnu.org>
+ * Makefile.in: Remove references to sunfns.c and sunfns.o.
- * w32proc.c (w32_executable_type): Handle 64 bit executables.
+2007-11-01 Johan Bockg,Ae(Brd <bojohan@gnu.org>
-2007-07-16 Juanma Barranquero <lekktu@gmail.com>
+ * macterm.c, w32term.c, xterm.c (x_draw_stretch_glyph_string):
+ Don't set s->stippled_p here, since it has already been set by
+ x_set_glyph_string_gc from x_draw_glyph_string.
- * coding.c (Ffind_operation_coding_system):
- * eval.c (For, Fand, Fprogn):
- * keyboard.c (Ftrack_mouse):
- * print.c (Fwith_output_to_temp_buffer):
- * window.c (Fsave_window_excursion): Doc fixes (some reported
- by Johan Bockg,Ae(Brd).
+2007-11-01 Dan Nicolaescu <dann@ics.uci.edu>
-2007-07-15 Richard Stallman <rms@gnu.org>
+ * sunfns.c: Remove file
- * data.c (Fsetq_default): Doc fix.
+ * m/sun386.h:
+ * m/sun2.h:
+ * m/sparc.h: Remove Sun windows code.
- * eval.c (Fsetq): Doc fix.
+2007-10-31 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-07-11 Jason Rumney <jasonr@gnu.org>
+ * keyboard.c (syms_of_keyboard): Initialize the initial_kboard.
+ (init_keyboard): Set current_kboard's window-system to nil.
+ (tty_read_avail_input): Typo.
+ * frame.c (make_initial_frame): Don't initialize the initial_kboard.
- * makefile.w32-in (LIBS): Include OLE32.
+2007-10-31 Dan Nicolaescu <dann@ics.uci.edu>
- * w32fns.c (w32_msg_pump) <WM_EMACS_CREATEWINDOW>: Initialize COM.
- (w32_msg_pump) <WM_DESTROY>: Uninitialize COM.
+ * s/usg5-4.h:
+ * s/usg5-3.h:
+ * s/ptx.h:
+ * m/is386.h:
+ * m/ibmps2-aix.h:
+ * Makefile.in: Remove all mentions of X10
-2007-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * dispnew.c (syms_of_display): Don't mention version 10.
- * macterm.c [USE_MAC_TSM] (mac_handle_text_input_event):
- Check WINDOWP before using XWINDOW.
+2007-10-28 Juanma Barranquero <lekktu@gmail.com>
-2007-06-27 Juanma Barranquero <lekktu@gmail.com>
+ * makefile.w32-in (OBJ1): Remove abbrev.$(O).
+ ($(BLD)/abbrev.$(O)): Remove.
- * buffer.c (syms_of_buffer) <selective-display>: Fix typo in docstring.
+2007-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
-2007-06-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ Rewrite abbrev.c in Elisp.
+ * image.c (Qcount): Don't declare as extern.
+ (syms_of_image): Initialize and staticpro `Qcount'.
+ * puresize.h (BASE_PURESIZE): Increase for the new abbrev.el functions.
+ * emacs.c (main): Don't call syms_of_abbrev.
+ * Makefile.in (obj): Remove abbrev.o.
+ (abbrev.o): Remove.
+ * abbrev.c: Remove.
- * gmalloc.c [HAVE_GTK_AND_PTHREAD]: Check this after including config.h.
- (_aligned_blocks_mutex) [USE_PTHREAD]: New variable.
- (LOCK_ALIGNED_BLOCKS, UNLOCK_ALIGNED_BLOCKS): New macros.
- (_free_internal, memalign): Use them.
- (_malloc_mutex, _aligned_blocks_mutex) [USE_PTHREAD]:
- Initialize to PTHREAD_MUTEX_INITIALIZER.
- (malloc_initialize_1) [USE_PTHREAD]: Don't use recursive mutex.
- (morecore_nolock): Rename from morecore. All uses changed.
- Use only nolock versions of internal allocation functions.
- (_malloc_internal_nolock, _realloc_internal_nolock)
- (_free_internal_nolock): New functions created from
- _malloc_internal, _realloc_internal, and _free_internal.
- (_malloc_internal, _realloc_internal, _free_internal): Use them.
- Copy hook value to automatic variable before its use.
- (memalign): Copy hook value to automatic variable before its use.
-
-2007-06-21 Jason Rumney <jasonr@gnu.org>
-
- * image.c (convert_mono_to_color_image): Swap fore and background.
-
-2007-06-20 Jason Rumney <jasonr@gnu.org>
+2007-10-26 Martin Rudalics <rudalics@gmx.at>
- * w32bdf.c (w32_BDF_to_x_font): Unmap memory when finished.
- (w32_free_bdf_font): Unmap memory not handle.
+ * window.c (window_min_size_2): Don't count header-line.
-2007-06-20 Juanma Barranquero <lekktu@gmail.com>
+2007-10-26 Dan Nicolaescu <dann@ics.uci.edu>
- * w32.c (_wsa_errlist): Fix typo in error message.
- (init_environment): Ignore any environment variable from the
- registry having a null value.
+ * frame.h (struct frame): Move all bit fields after the first bit
+ field to take advantage of the available space. Group all the
+ chars together to reduce wasted space due to padding.
-2007-06-17 Jason Rumney <jasonr@gnu.org>
+2007-10-26 Juanma Barranquero <lekktu@gmail.com>
- * w32menu.c (add_menu_item): Don't use multibyte string functions on
- unicode strings.
+ * minibuf.c (Fread_minibuffer, Feval_minibuffer): Reflow docstrings.
-2007-06-17 Juanma Barranquero <lekktu@gmail.com>
+ * alloc.c (spare_memory, stack_copy, stack_copy_size, ignore_warnings)
+ (Vdead, dont_register_blocks, staticvec, staticidx, interval_block)
+ (n_interval_blocks, init_strings, check_string_bytes, check_sblock)
+ (init_float, free_float, n_cons_blocks, init_cons, all_vectors)
+ (n_vectors, symbol_block, symbol_block_index, symbol_free_list)
+ (n_symbol_blocks, init_symbol, marker_block, marker_free_list)
+ (n_marker_blocks, init_marker, valid_pointer_p, make_pure_float)
+ (last_marked, mark_object_loop_halt): Make static.
- * xdisp.c (syms_of_xdisp) <auto-resize-tool-bars>:
+ * frame.c (syms_of_frame) <delete-frame-functions>:
Fix typo in docstring.
-2007-06-16 Eli Zaretskii <eliz@gnu.org>
-
- * w32menu.c (add_menu_item): Escape `&' characters in menu items
- and their keybindings.
-
-2007-06-14 Chong Yidong <cyd@stupidchicken.com>
-
- * composite.c (update_compositions): Check validity of compositions.
-
-2007-06-10 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fx_file_dialog): Take size from struct not pointer.
-
-2007-06-06 Jason Rumney <jasonr@gnu.org>
-
- * s/ms-w32.h: Don't define HAVE_TZNAME.
-
-2007-06-06 Chong Yidong <cyd@stupidchicken.com>
-
- * image.c (xpm_load): Remove spurious call to
- xpm_init_color_cache.
-
-2007-06-06 Martin Rudalics <rudalics@gmx.at>
-
- * syntax.c (scan_words): Fix arg to UPDATE_SYNTAX_TABLE_BACKWARD.
-
-2007-06-05 Dan Nicolaescu <dann@ics.uci.edu>
-
- * xfaces.c (syms_of_xfaces): Delete stray semicolon.
- * xdisp.c (next_element_from_buffer):
- * window.c (delete_window):
- * term.c (term_mouse_highlight):
- * msdos.c (getdefdir):
- * macterm.c (mac_create_bitmap_from_bitmap_data)
- (init_font_name_table):
- * fns.c (Fsxhash):
- * data.c (Fmake_local_variable):
- * ccl.c (ccl_driver): Likewise.
-
-2007-06-04 Juanma Barranquero <lekktu@gmail.com>
-
- * window.c (Fshrink_window): Reflow docstring.
-
-2007-06-02 Chong Yidong <cyd@stupidchicken.com>
-
- * Version 22.1 released.
-
- * xfns.c (x_set_name_internal): Undo last change.
-
-2007-06-01 Richard Stallman <rms@gnu.org>
-
- * xfns.c (x_encode_text): Add GCPRO.
- (x_set_name_internal): Separate USE_GTK and non-USE_GTK cases.
-
-2007-06-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xfns.c (x_set_name_internal): Save encoded name before
- x_encode_text in case string data is relocated.
-
-2007-05-31 Richard Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer): Doc fix.
-
-2007-05-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xdisp.c (redisplay_internal): Bind inhibit-point-motion-hooks to t
- around current_column call.
-
-2007-05-24 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (redisplay_window): If first window line is a
- continuation line, recompute the new window start instead of
- recentering.
-
-2007-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_CARBON_EVENTS] (mac_handle_window_event):
- Call mac_wakeup_from_rne on window size change.
-
-2007-05-22 Richard Stallman <rms@gnu.org>
-
- * xterm.c (x_connection_closed): Remove NO_RETURN.
-
-2007-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (skip_chars): Update syntax-table only after we checked that
- the new location is valid.
-
-2007-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (x_calc_absolute_position): Add BLOCK_INPUT around
- mac_get_window_bounds.
-
-2007-05-17 Glenn Morris <rgm@gnu.org>
-
- * m/macppc.h (ORDINARY_LINK): No longer define on OpenBSD.
-
-2007-05-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_CARBON_EVENTS] (mac_convert_event_ref): Also convert
- dead key repeat and up events.
-
-2007-05-13 Chong Yidong <cyd@stupidchicken.com>
-
- * xterm.c (XTread_socket): Revert last change.
-
-2007-05-12 Chong Yidong <cyd@stupidchicken.com>
-
- * image.c (pbm_load): Correctly check image size for greyscale pbm.
-
- * xterm.c (XTread_socket): Yet Another Uncaught X Error Crash (YAUXEC).
-
-2007-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * editfns.c (Ftranspose_regions): Yet another int/Lisp_Object mixup (YAILOM)
-
-2007-05-06 Richard Stallman <rms@gnu.org>
-
- * process.c: Undo May 3 change.
-
-2007-05-03 Per Cederqvist <ceder@lysator.liu.se> (tiny change)
-
- * process.c (Faccept_process_output): Revert 2006-03-22 change so
- that the third argument once again is in microseconds (not
- milliseconds). This makes it compatible with Emacs 21 and
- earlier. Problem found by Henrik Rindl,Av(Bw.
-
-2007-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (mac_dialog_show): Apply 2007-04-27 change for xmenu.c.
- (Fx_popup_dialog) [MAC_OSX]: Likewise.
-
-2007-04-29 Richard Stallman <rms@gnu.org>
-
- * insdel.c (replace_range): For undo, record insertion first.
-
-2007-04-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xdisp.c (try_window_reusing_current_matrix): Fix number of
- disabled lines.
-
-2007-04-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (xdialog_show): Call Fredisplay before showing the dialog.
-
- * gtkutil.c (xg_update_menubar, create_menus): Create empty
- submenu for menu bar items.
-
-2007-04-24 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (redisplay_window): Use BEG_UNCHANGED and END_UNCHANGED
- values of the actual window.
-
-2007-04-23 Richard Stallman <rms@gnu.org>
-
- * process.c (Fstart_process): Doc fix.
-
-2007-04-23 Eli Zaretskii <eliz@gnu.org>
-
- * process.c (Fstart_process): Doc fix.
-
-2007-04-22 Richard Stallman <rms@gnu.org>
-
- * abbrev.c (Fdefine_abbrev): Doc fix.
-
- * keymap.c (Fdefine_key): Minor doc fix.
-
-2007-04-21 Glenn Morris <rgm@gnu.org>
-
- * keymap.c (Fdefine_key): Fix info ref in doc string.
-
-2007-04-20 Glenn Morris <rgm@gnu.org>
-
- * sysdep.c (init_system_name): Don't accept localhost.localdomain.
-
-2007-04-19 Juanma Barranquero <lekktu@gmail.com>
-
- * minibuf.c (Fminibuffer_contents, Fminibuffer_contents_no_properties)
- (Fminibuffer_completion_contents, Fdelete_minibuffer_contents):
- Doc fixes.
-
-2007-04-16 Chong Yidong <cyd@stupidchicken.com>
-
- * dispnew.c (adjust_frame_glyphs_for_frame_redisplay):
- Set garbaged flag in presence of window margins.
- (showing_window_margins_p): New function.
-
- * xdisp.c (cursor_row_p): Only end row on newline if it's a
- display string. Suggested by Lennart Borgman.
-
-2007-04-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * alloc.c (mem_insert): Set min_heap_address and max_heap_address
- if they are not yet initialized.
-
-2007-04-15 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (redisplay_window): When deciding whether or not to
- recenter, don't use the reset values of BEG_UNCHANGED and
- END_UNCHANGED.
-
-2007-04-13 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (Fkill_buffer): gcpro BUF during kill_buffer_processes
- and check that buffer is still alive upon return.
-
-2007-04-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [!TARGET_API_MAC_CARBON]: Include Displays.h.
- (mac_screen_config_changed): New variable.
- (mac_handle_dm_notification, init_dm_notification_handler)
- (mac_get_screen_info): New functions.
- [MAC_OS8] (main): Call init_dm_notification_handler.
- (mac_initialize) [MAC_OSX]: Likewise.
- (XTread_socket): Call mac_get_screen_info if screen config changed.
- (mac_initialized): Make static.
- (mac_initialize_display_info): Remove function.
- (mac_term_init): Call mac_get_screen_info. Add partial contents of
- mac_initialize_display_info.
-
-2007-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (xrm_get_preference_database, Fmac_get_preference)
- [TARGET_API_MAC_CARBON]: Use CFPreferencesAppSynchronize.
-
- * macterm.c [TARGET_API_MAC_CARBON] (mac_post_mouse_moved_event):
- Use GetGlobalMouse instead of GetMouse and LocalToGlobal.
- (mac_initialize_display_info) [MAC_OSX]: Use CGRectZero.
- (mac_initialize_display_info) [!MAC_OSX]: dpyinfo->height and
- dpyinfo->width are those of whole screen.
-
-2007-04-10 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Don't decrement
- glyph pointer before start of glyph row.
-
-2007-04-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * s/darwin.h (__restrict, struct kboard): Remove outdated workarounds.
- (C_SWITCH_SYSTEM): Remove `-I../mac/src'.
-
-2007-04-09 Martin Rudalics <rudalics@gmx.at>
-
- * indent.c (Fmove_to_column): Set next_boundary with correct start pt.
-
-2007-04-08 Richard Stallman <rms@gnu.org>
-
- * xdisp.c (syms_of_xdisp) <message-log-max>: Default 100.
-
-2007-04-07 Chong Yidong <cyd@stupidchicken.com>
-
- * editfns.c (Ftranspose_regions): Validate interval before setting
- text properties.
-
-2007-04-03 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (main): Fix instructions for building Emacs for profiling.
-
-2007-04-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_update_menubar): Call g_list_next after moving
- menu bar item.
-
-2007-04-02 Juanma Barranquero <lekktu@gmail.com>
-
- * print.c (Fprin1_to_string): Use macro SPECPDL_INDEX.
-
-2007-04-01 Chong Yidong <cyd@stupidchicken.com>
-
- * keymap.c (Fcommand_remapping): New optional argument.
- (where_is_internal): Use new keymaps argument.
- (Fkey_binding): Caller changed.
-
- * keyboard.c (command_loop_1): Caller changed.
-
-2007-03-31 Eli Zaretskii <eliz@gnu.org>
-
- * window.c (Fget_lru_window): Doc fix.
-
-2007-03-30 Chong Yidong <cyd@stupidchicken.com>
-
- * undo.c (Fprimitive_undo): Give clearer error message when trying
- to change text properties outside accessible part of buffer.
-
-2007-03-29 Kim F. Storm <storm@cua.dk>
-
- * process.c (wait_reading_process_output) [HAVE_PTYS]:
- When EIO happens, clear channel from descriptor masks before raising
- SIGCHLD signal to avoid busy loop between read and sigchld_handler.
- (sigchld_handler): Remove sleep (2007-03-11 & 2007-03-26 changes).
-
-2007-03-29 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (Fset_buffer_major_mode): Check that BUFFER is valid.
-
- * process.c (Fformat_network_address): Return nil when the
- argument vector contains invalid values.
-
-2007-03-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * gmalloc.c [HAVE_GTK_AND_PTHREAD]: Define USE_PTHREAD.
- [USE_PTHREAD]: Include pthread.h.
- (malloc_init_once_control, _malloc_mutex) [USE_PTHREAD]: New variables.
- (malloc_initialize_1): New function created from __malloc_initialize.
- (__malloc_initialize): Use it.
- (LOCK, UNLOCK): New macros to make malloc etc. thread safe.
- (_malloc_internal, _free_internal, _realloc_internal): Use them.
-
- * lread.c (readchar): Extend BLOCK_INPUT block to ferror/clearerr.
-
-2007-03-27 Juanma Barranquero <lekktu@gmail.com>
-
- * process.c (Fformat_network_address): Make args array big enough
- to format IPv6 addresses.
-
-2007-03-27 Glenn Morris <rgm@gnu.org>
-
- * m/hp800.h: Restore HP-UX support (removed 2007-01-29).
-
-2007-03-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (Fx_display_mm_height, Fx_display_mm_width): Scale whole
- screen size in pixels by millimeters per pixel of main display.
-
- * macselect.c (get_scrap_target_type_list, x_own_selection):
- Move assignments outside predicate macros.
- (Vselection_converter_alist): Doc fix.
-
- * macterm.c (create_text_encoding_info_alist): Move assignments
- outside predicate macros.
- (mac_initialize_display_info) [MAC_OSX]: dpyinfo->height and
- dpyinfo->width are those of whole screen.
-
-2007-03-26 Sam Steingold <sds@gnu.org>
-
- * process.c (sigchld_handler): Delay by 1ms instead of 1s to
- alleviate sluggishness (the original problem is still fixed).
-
-2007-03-25 Kim F. Storm <storm@cua.dk>
-
- * intervals.c (merge_properties): Use explicit loop instead of
- Fplist_member to avoid QUIT. Don't use Fcdr.
- (intervals_equal): Likewise. Rewrite loop to perform length check
- on the fly rather than calling Flength. Don't use Fcar.
-
-2007-03-24 Eli Zaretskii <eliz@gnu.org>
-
- * editfns.c (Fgoto_char): Doc fix.
-
- * indent.c (Findent_to): Doc fix.
-
-2007-03-24 Chong Yidong <cyd@stupidchicken.com>
-
- * editfns.c (Ftranspose_regions): Use set_text_properties_1
- instead of Fset_text_properties to avoid GC. Signal after change.
-
-2007-03-24 Eli Zaretskii <eliz@gnu.org>
-
- * xfns.c (Fx_show_tip): Doc fix.
-
- * macfns.c (Fx_show_tip): Doc fix.
-
- * w32fns.c (Fx_show_tip): Doc fix.
-
-2007-03-23 Kim F. Storm <storm@cua.dk>
-
- * intervals.c (merge_properties, intervals_equal):
- Use Fplist_member instead of Fmemq to find properties.
-
-2007-03-23 Glenn Morris <rgm@gnu.org>
-
- * unexhp9k800.c: Restore file with clarified legal status.
- * m/sr2k.h: Restore since dependency unexhp9k800.c is restored.
-
-2007-03-22 Chong Yidong <cyd@stupidchicken.com>
-
- * widget.c (EmacsFrameSetCharSize): Catch X errors.
-
-2007-03-22 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Fcopy_file): Call barf_or_query_if_file_exists with
- non-encoded file name.
- (Frename_file): Likewise.
- (Fadd_name_to_file): Likewise.
- (Fmake_symbolic_link): Likewise.
-
-2007-03-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in (alloca.o, gtkutil.o): Depend on systime.h.
- (dired.o, editfns.o, fileio.o, msdos.o): Depend on atimer.h.
- (dosfns.o, window.o, fns.o, macselect.o): Depend on atimer.h and
- systime.h.
- (term.o, print.o, lread.o): Depend on blockinput.h, atimer.h, and
- systime.h.
- (macfns.o): Remove duplicate dependency on systime.h.
-
- * dispnew.c (Fopen_termscript): Add BLOCK_INPUT around fclose.
- (Fsend_string_to_terminal): Add BLOCK_INPUT around fwrite.
-
- * fileio.c (do_auto_save_unwind): Add BLOCK_INPUT around fclose.
- (Fdo_auto_save): Add BLOCK_INPUT around fwrite.
-
- * keyboard.c (record_char): Add BLOCK_INPUT around fwrite.
- (Fopen_dribble_file): Add BLOCK_INPUT around fclose.
-
- * lread.c: Include blockinput.h.
- (readchar, Fget_file_char): Add BLOCK_INPUT around getc.
- (unreadchar): Add BLOCK_INPUT around ungetc.
- (load_unwind): Add BLOCK_INPUT around fclose.
-
- * print.c: Include blockinput.h.
- (Fredirect_debugging_output): Add BLOCK_INPUT around fclose.
-
- * process.c (Fmake_network_process) [HAVE_GETADDRINFO]:
- Clear immediate_quit before calling freeaddrinfo.
- Add BLOCK_INPUT around freeaddrinfo.
-
- * term.c: Include blockinput.h.
- (write_glyphs, insert_glyphs): Add BLOCK_INPUT around fwrite.
-
-2007-03-19 Richard Stallman <rms@gnu.org>
-
- * keyboard.c (NUM_RECENT_KEYS): Bump up to 300.
-
- * buffer.c (syms_of_buffer): Doc fix.
-
-2007-03-18 Chong Yidong <cyd@stupidchicken.com>
-
- * image.c (pbm_load): Signal error for invalid image size.
-
-2007-03-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (note_mouse_movement): Don't return immediately for
- LeaveNotify case.
-
- * macmenu.c (popup_activated_flag): New variable.
- (x_activate_menubar, mac_menu_show): Set it during menu tracking.
- (popup_activated): New function.
-
- * xdisp.c (redisplay_internal, note_mouse_highlight):
- Check popup_activated for MAC_OS.
-
-2007-03-17 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (syms_of_buffer) <buffer-display-table>: Doc fix.
- Reported by Nikolaj Schumacher <n_schumacher@web.de>.
-
-2007-03-17 Richard Stallman <rms@gnu.org>
-
- * dired.c (file_name_completion): gcpro NAME.
-
-2007-03-17 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (try_window_id): Increment matrix positions if the
- buffer's byte count has increased, but not the character count.
-
-2007-03-12 Andreas Schwab <schwab@suse.de>
-
- * lisp.h: Declare check_obarray.
-
- * process.c (Fdelete_process): Properly handle deletion of first
- element of deleted_pid_list.
- (create_process): Declare pid as pid_t.
-
-2007-03-12 Kim F. Storm <storm@cua.dk>
-
- * process.c (sigchld_handler): Change type of pid to pid_t.
- Scan deleted_pid_list explicitly to avoid using Fmember which don't
- know about mark bits and make_fixnum_or_float which may malloc.
- Reported by Andreas Schwab.
-
- * keyboard.c (read_key_sequence): Store original event into keybuf
- when replaying sequence with local keymap(s) from string.
-
-2007-03-12 Glenn Morris <rgm@gnu.org>
-
- * editfns.c (Fdecode_time, Fencode_time): Doc fix ("daylight
- savings" to "daylight saving").
-
-2007-03-11 Sam Steingold <sds@gnu.org>
-
- * process.c (sigchld_handler): Sleep before wait3 to avoid a busyloop.
-
-2007-03-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (Fx_server_vendor): Change vendor string to "Apple Inc.".
-
-2007-03-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_CARBON_EVENTS] (mac_handle_mouse_event):
- Ignore mouse wheel movement on title bar or tool bar.
-
-2007-03-10 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (help_form_saved_window_configs): New var.
- (read_char_help_form_unwind): New function.
- (read_char): Don't restore window configuration if a mouse click
- arrives while the help form is being displayed.
-
-2007-03-10 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (redisplay_window): Don't automatically select a new window
- start for a contination line during mouse-click.
-
-2007-03-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Ignore buttons > 3 for the tool bar.
-
-2007-03-09 Juanma Barranquero <lekktu@gmail.com>
-
- * keymap.c (Fdescribe_buffer_bindings): Check that BUFFER is valid.
-
-2007-03-08 Richard Stallman <rms@gnu.org>
-
- * keyboard.c (syms_of_keyboard): Doc fix.
-
-2007-03-08 Chong Yidong <cyd@stupidchicken.com>
-
- * minibuf.c (Ftry_completion): Don't short circuit if
- completion-ignore-case is non-nil.
-
-2007-03-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (mac_set_scroll_bar_width, mac_frame_parm_handlers):
- Undo 2006-03-06 changes.
-
- * macterm.c (XTset_vertical_scroll_bar) [MAC_OSX]: Don't show scroll
- bar if its width is smaller than that of Aqua small scroll bar.
-
-2007-03-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * minibuf.c (read_minibuf): Bind inhibit-read-only a bit longer so as
- to handle correctly prompts with read-only property.
-
-2007-03-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * sound.c (wav_play): Check header->data_length to see how much we
- shall read.
- (alsa_period_size): Convert ALSA period size in frames to bytes.
- (alsa_write): Return if frames is zero.
-
-2007-03-06 Kenichi Handa <handa@m17n.org>
-
- * xselect.c (Vselection_coding_system): Documentation improved.
-
-2007-03-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (x_scroll_bar_create, XTread_socket): Replace #if
- USE_TOOLKIT_SCROLL_BARS with #ifdef USE_TOOLKIT_SCROLL_BARS.
- (x_set_window_size): Call SET_FRAME_GARBAGED. Clear window if
- internal border width has changed.
-
- * macterm.h (struct mac_output): New member `internal_border_width'.
-
-2007-03-04 Richard Stallman <rms@gnu.org>
-
- * window.c (Fdisplay_buffer): Doc fix.
-
-2007-03-03 Glenn Morris <rgm@gnu.org>
-
- * Makefile.in: Don't clear out LIB_X11_LIB, since XFT_LIBS does
- not include -lX11 on Solaris.
-
-2007-03-02 Stuart D. Herring <herring@lanl.gov>
-
- * keymap.c (Fkey_binding): Don't consider one-element lists as events.
-
-2007-03-01 Kenichi Handa <handa@m17n.org>
-
- * process.c (send_process_object): Check the process status and
- signal an error if something is wrong.
-
-2007-02-28 Chong Yidong <cyd@stupidchicken.com>
-
- * insdel.c (Fcombine_after_change_execute): Return nil if
- combine_after_change_buffer has been invalidated.
-
-2007-02-25 Dan Nicolaescu <dann@ics.uci.edu>
-
- * m/xtensa.h: New file.
-
-2007-02-24 Nick Roberts <nickrob@snap.net.nz>
-
- * .gdbinit (xprintstr): Ensure GDB (> 6.6) prints symbol name
- as strings and not character arrays.
-
-2007-02-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_drag)
- (x_set_toolkit_scroll_bar_thumb): Add bar->min_handle as margin to
- scroll bar handle size in order to avoid `scroll backward' problem.
- (x_scroll_bar_create, XTset_vertical_scroll_bar)
- [USE_TOOLKIT_SCROLL_BARS]: Initialize bar->min_handle.
-
- * macterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
- New member `min_handle'.
-
-2007-02-23 Kim F. Storm <storm@cua.dk>
-
- * print.c (print): Reset print_number_index if Vprint_number_table
- is nil.
-
-2007-02-23 Eli Zaretskii <eliz@gnu.org>
-
- * w32.c (stat, get_long_basename, is_unc_volume): Use _mbspbrk
- instead of strpbrk.
-
-2007-02-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (mac_menu_show): Call unbind_to early. Use variable
- `menu_item_selection' as in W32 version.
- [TARGET_API_MAC_CARBON] (mac_handle_dialog_event): Add explicit
- braces to avoid ambiguous `else'.
-
- * macterm.c (mac_display_info_for_display): Remove function.
- (mac_flush_display_optional) [USE_CG_DRAWING]: New function.
- (x_redisplay_interface) [USE_CG_DRAWING]: Set it as handler for
- flush_display_optional.
- [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_press):
- New argument MOUSE_POS. All uses changed. Set bar->dragging to
- negative integer if scroll bar handle is pressed.
- [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_release):
- Negative bar->dragging means scroll bar handle is not dragged.
- [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_drag): Get initial
- offset of scroll bar handle from negative bar->dragging.
- (XTread_socket) [USE_TOOLKIT_SCROLL_BARS]: Modifiers for scroll
- bar click is compared against mapped one. Set down/up_modifier
- for scroll bar click event with control key.
-
- * macterm.h (x_display_info_for_display): Remove extern.
- (SCROLL_BAR_UNPACK, SET_SCROLL_BAR_CONTROL_HANDLE): Don't limit
- value to be unpacked to 32-bit on LP64 model.
-
-2007-02-23 Kenichi Handa <handa@m17n.org>
-
- * process.c (send_process_object_unwind): New function.
- (send_process_object): New function.
- (Fprocess_send_region): Call send_process_object.
- (Fprocess_send_string): Likewise.
-
-2007-02-22 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (w32_menu_show): Mark the frame's menu as inactive
- when popup menu finishes.
-
- * w32fns.c (menubar_in_use): New flag.
- (w32_wnd_proc) <WM_INITMENU, WM_EXITMENULOOP, WM_TIMER, WM_COMMAND>:
- Use it.
-
- * w32menu.c (Fx_popup_menu): Don't free menu strings here.
- (w32_menu_show): Do it here instead.
-
- * w32fns.c (w32_wnd_proc) <WM_INITMENU>: Set menubar_active frame
- parameter.
-
- * w32menu.c (current_popup_menu): Make available globally.
- (menubar_selection_callback): Free menu strings before pushing the
- menu event into the keyboard buffer. Remove menu_command_in_progress.
-
- * w32fns.c (current_popup_menu): Use from w32menu.c.
- (w32_wnd_proc) <WM_EXITMENULOOP, WM_TIMER>: Use menubar_active
- and current_popup_menu to determine whether a menubar menu has
- been cancelled.
-
- * w32term.h (w32_output): Remove menu_command_in_progress.
-
-2007-02-22 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (update_frame, update_single_window): Set force_p here if
- redisplay_dont_pause is set or Vredisplay_preemption_period is nil...
- (update_window, update_frame_1): ... instead of here.
- (update_text_area): Clear mouse face on header lines.
-
-2007-02-21 Kim F. Storm <storm@cua.dk>
-
- * minibuf.c (Fassoc_string): Doc fix. Allow symbol for KEY too.
-
-2007-02-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (WINDOW_RESOURCE, TERM_WINDOW_RESOURCE): Remove macros.
- [USE_MAC_TSM] (mac_handle_text_input_event): Remove unused variable
- `mapped_modifiers'.
- (XTread_socket) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1020]: Use Keyboard
- Layout Services routines to get current Unicode keyboard layout.
-
-2007-02-20 Chong Yidong <cyd@stupidchicken.com>
-
- * frame.c (x_set_screen_gamma): Apply gamma value to the frame's
- bgcolor.
-
-2007-02-19 Kim F. Storm <storm@cua.dk>
-
- * minibuf.c (Fassoc_string): Allow symbols as keys.
-
- * w32term.c (w32_set_scroll_bar_thumb): Don't resize scroll-bar
- handle while dragging, except when we get close to eob.
- Fix position and size calculations so we don't scroll backwards
- just by clicking on the handle.
-
-2007-02-17 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in (${emacsapp}Contents/Resources/Emacs.rsrc)
- [HAVE_CARBON]: Remove target.
- (macosx-app) [HAVE_CARBON]: Don't depend on it.
-
-2007-02-17 Juanma Barranquero <lekktu@gmail.com>
-
- * callproc.c (syms_of_callproc) <doc-directory>:
- <configure-info-directory>:
- (Fgetenv_internal): Fix typos in docstrings.
-
- * doc.c (Fsubstitute_command_keys): Fix typo in docstring.
-
-2007-02-16 Andreas Schwab <schwab@suse.de>
-
- * frame.c (Fmodify_frame_parameters): Return a value.
-
- * editfns.c (Fformat): Add support for '+' flag.
- * doprnt.c (doprnt1): Likewise. Fix overflow checking.
-
-2007-02-14 Chong Yidong <cyd@stupidchicken.com>
-
- * s/umips.h: Unused file removed.
-
-2007-02-14 Juanma Barranquero <lekktu@gmail.com>
-
- * xfaces.c (Fcolor_distance): Don't continue checking a color for
- errors after it has been correctly parsed as an RGB list.
-
-2007-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (do_ewmh_fullscreen): Also check for _NET_WM_STATE_FULLSCREEN.
-
-2007-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (Fx_focus_frame): Move current process to foreground if
- it is not.
- [TARGET_API_MAC_CARBON] (Fx_file_dialog): Replace #if MAC_OSX with
- #ifdef MAC_OSX.
- (Fmac_set_font_panel_visible_p) [USE_MAC_FONT_PANEL]: Rename from
- Fmac_set_font_panel_visibility. All uses changed. Rename argument
- VISIBLE to FLAG.
-
- * macterm.c (MakeMeTheFrontProcess) [MAC_OSX]: Remove function.
- (mac_initialize) [MAC_OSX]: Call SetFrontProcess instead of
- MakeMeTheFrontProcess.
-
-2007-02-12 Chong Yidong <cyd@stupidchicken.com>
-
- * frame.c (x_set_screen_gamma): Clear face cache.
-
-2007-02-11 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (Fgenerate_new_buffer_name, Fbuffer_modified_tick):
- Reflow docstrings.
-
-2007-02-10 Eli Zaretskii <eliz@gnu.org>
-
- * window.c (Fwindow_height, Fwindow_hscroll)
- (Fwindow_redisplay_end_trigger, Fwindow_point, Fwindow_start)
- (Fwindow_end, Fwindow_display_table, Fwindow_text_height):
- Document the effect of WINDOW arg being nil.
-
-2007-02-08 Kim F. Storm <storm@cua.dk>
-
- * minibuf.c (read_minibuf): Fix 2007-01-30 change.
- Use Qlambda as interim value of Vminibuffer_completing_file_name.
- (Fcompleting_read): Use non-filename maps if value is Qlambda (or Qnil).
- (syms_of_minibuf) <minibuffer-completing-file-name>: Document lambda.
-
-2007-02-07 Juanma Barranquero <lekktu@gmail.com>
-
- * makefile.w32-in ($(TRES)): Use literal "../nt/emacs.rc" instead
- of $(ALL_DEPS).
-
-2007-02-07 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in ($(TRES)): Depend on stamp_BLD, since $(TRES) is
- put into $(BLD).
-
-2007-02-06 Chong Yidong <cyd@stupidchicken.com>
-
- * frame.c (Fmodify_frame_parameters): Don't bind
- Qinhibit_default_face_x_resources, which has no effect.
- (Qinhibit_default_face_x_resources): Symbol deleted.
-
-2007-02-03 Eli Zaretskii <eliz@gnu.org>
-
- * indent.c (Fmove_to_column): Document that the argument COLUMN is
- taken from prefix numeric argument.
-
-2007-02-03 Juanma Barranquero <lekktu@gmail.com>
-
- * lread.c (syms_of_lread) <load-history>: Doc fix.
-
-2007-01-29 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> (tiny change)
-
- * xterm.c [!USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_expose):
- Use the foreground color of the scroll-bar face when drawing
- the scroll-bar's border.
-
-2007-02-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (do_ewmh_fullscreen): Check that what != NULL before
- calling wm_supports.
-
-2007-02-01 Juanma Barranquero <lekktu@gmail.com>
-
- * lread.c (syms_of_lread) <user-init-file>: Doc fix.
- Wording by Eli Zaretskii.
-
-2007-01-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Initialize h/vmargin to 0.
-
-2007-01-30 Richard Stallman <rms@gnu.org>
-
- * minibuf.c (read_minibuf):
- Save and clear Vminibuffer_completing_file_name.
- (read_minibuf_unwind): Restore it.
- (Vminibuffer_completion_table, Qminibuffer_completion_table)
- (Vminibuffer_completion_predicate, Qminibuffer_completion_predicate)
- (Vminibuffer_completion_confirm, Qminibuffer_completion_confirm)
- (Vminibuffer_completing_file_name): Definitions moved up.
-
-2007-01-29 Chong Yidong <cyd@stupidchicken.com>
-
- * m/hp800.h: Restore, removing HP-UX support.
-
-2007-01-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * Makefile.in: Use a variable, XFT_LIBS, instead #define LIB_X11_LIB.
-
-2007-01-28 Richard Stallman <rms@gnu.org>
-
- * minibuf.c (Ftry_completion, Fall_completions)
- (Fcompleting_read, Ftest_completion):
- Rename arg ALIST or TABLE to COLLECTION.
-
-2007-01-27 Chong Yidong <cyd@stupidchicken.com>
-
- * unexhp9k800.c: Remove due to lack of legal papers.
-
- * m/sr2k.h, m/hp800.h: Remove due to dependence on above.
-
-2007-01-27 Eli Zaretskii <eliz@gnu.org>
-
- * keyboard.c (Fthis_command_keys, Fthis_command_keys_vector): Doc fix.
-
- * minibuf.c (Fcompleting_read): Doc fix.
-
-2007-01-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_initialize): Call XftInit if HAVE_XFT.
-
- * Makefile.in: Use XFT_LIBS if defined.
-
-2007-01-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Use
- BLOCK_INPUT/UNBLOCK_INPUT.
-
- * blockinput.h (interrupt_input_blocked): Declare volatile.
-
- * keyboard.c (interrupt_input_blocked): Declare volatile.
-
- * syssignal.h (SIGNAL_THREAD_CHECK): Use pthread_equal.
-
-2007-01-24 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (describe_map): Don't consider prefix keys to be shadowed.
-
-2007-01-23 Juanma Barranquero <lekktu@gmail.com>
-
- * editfns.c (Finsert_char): Doc fix.
- (Fget_internal_run_time, Fdecode_time): Fix typos in docstrings.
-
-2007-01-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macselect.c [TARGET_API_MAC_CARBON] (mac_do_receive_drag):
- Don't pass keyboard modifiers to mac_store_drag_event, but put
- them as kEventParamKeyModifiers Apple event parameter.
-
-2007-01-21 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (try_window): Revert previous change.
-
- * dispnew.c (update_text_area): Revert 2006-09-17 change.
- Always redraw non-mode-line rows with mouse-face.
-
-2007-01-20 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (try_window): Clear mouse-face highlights first.
-
- * window.c (set_window_buffer): Revert 2006-11-22 change.
-
-2007-01-20 Eli Zaretskii <eliz@gnu.org>
-
- * .gdbinit (ppt, xtype, xmisctype, xint, xptr, xmarker, xframe)
- (xbuffer, xcons, xcar, xcdr): Fix doc strings.
-
-2007-01-20 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (read_key_sequence): Extract local map only if the
- given position is in an accessible buffer region.
-
-2007-01-19 Nick Roberts <nickrob@snap.net.nz>
-
- * .gdbinit: Reformat documentation so that first sentence
- displays properly with "help user-defined" (like apropos).
-
-2007-01-18 Bruno Haible <bruno@clisp.org> (tiny change)
-
- * epaths.in: Move PATH_DOC from local/info to local/share/info.
-
-2007-01-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (create_and_show_dialog) [TARGET_API_MAC_CARBON]:
- Create movable modal window instead of movable alert window.
- (create_and_show_dialog) [!MAC_OSX]: Use DeactivateControl instead
- of DisableControl.
-
- * macselect.c (Fmac_resume_apple_event): Set error number when
- descriptor type of reply is non-null.
-
-2007-01-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (create_and_show_dialog) [TARGET_API_MAC_CARBON]:
- Use DisableControl for disabled items. Set default button to first
- enabled one. Use icon of application in execution.
-
-2007-01-13 Eli Zaretskii <eliz@gnu.org>
-
- * process.c (Fdelete_process, Fprocess_id, sigchld_handler):
- Copy PID into EMACS_INT to avoid GCC warnings.
-
- * fns.c (maybe_resize_hash_table): Copy new size of hash table
- into EMACS_INT to avoid GCC warnings.
-
- * editfns.c (Fuser_uid, Fuser_real_uid): Copy values returned by
- geteuid and getuid into EMACS_INT to avoid GCC warnings.
-
- * dired.c (Ffile_attributes): Fix last change.
-
-2007-01-12 Eli Zaretskii <eliz@gnu.org>
-
- * dired.c (Ffile_attributes): Copy some members of `struct stat'
- into int's to avoid GCC warnings about limited range of short in
- arguments to FIXNUM_OVERFLOW_P.
-
-2007-01-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (HAVE_DIALOGS): Define if TARGET_API_MAC_CARBON.
- (mac_handle_dialog_event, install_dialog_event_handler)
- (create_and_show_dialog) [TARGET_API_MAC_CARBON]: New functions.
- (DIALOG_LEFT_MARGIN, DIALOG_TOP_MARGIN, DIALOG_RIGHT_MARGIN)
- (DIALOG_BOTTOM_MARGIN, DIALOG_MIN_INNER_WIDTH)
- (DIALOG_MAX_INNER_WIDTH, DIALOG_BUTTON_BUTTON_HORIZONTAL_SPACE)
- (DIALOG_BUTTON_BUTTON_VERTICAL_SPACE, DIALOG_BUTTON_MIN_WIDTH)
- (DIALOG_TEXT_MIN_HEIGHT, DIALOG_TEXT_BUTTONS_VERTICAL_SPACE)
- (DIALOG_ICON_WIDTH, DIALOG_ICON_HEIGHT, DIALOG_ICON_LEFT_MARGIN)
- (DIALOG_ICON_TOP_MARGIN) [TARGET_API_MAC_CARBON]: New macros.
- (mac_dialog) [TARGET_API_MAC_CARBON]: Remove function.
- (mac_dialog_show) [TARGET_API_MAC_CARBON]: Use create_and_show_dialog.
-
- * macterm.c (x_free_frame_resources) [USE_CG_DRAWING]:
- Call mac_prepare_for_quickdraw.
- (quit_char, make_ctrl_char) [TARGET_API_MAC_CARBON]: Move externs
- outside #ifdef MAC_OSX.
- (mac_quit_char_key_p) [TARGET_API_MAC_CARBON]: Move function
- outside #ifdef MAC_OSX.
- (mac_check_bundle) [MAC_OSX]: Remove unused function.
-
- * macterm.h (mac_quit_char_key_p): Move extern outside #ifdef MAC_OSX.
- (HOURGLASS_WIDTH, HOURGLASS_HEIGHT): Parenthesize definitions.
-
-2007-01-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Use pthread_equal,
- block/unblock SIGIO.
-
-2007-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * editfns.c (Fformat): Allow integer-format to work with floats of size
- larger than most-positive-fixnum (but still smaller than MAXINT).
-
- * dired.c (Ffile_attributes): Use floats for large uids/gids.
-
-2007-01-09 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (syms_of_emacs) <path-separator>: Doc fix.
-
-2007-01-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * callproc.c (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
- around mkstemp.
-
- * image.c (XDrawLine) [MAC_OS]: Remove macro.
- (XCreateGC_pixmap) [!HAVE_NTGUI]: Likewise.
- (x_disable_image) [!HAVE_NTGUI]: Use XCreateGC instead of
- XCreateGC_pixmap.
-
- * macgui.h (Display): Typedef to opaque type.
-
- * macmenu.c (mac_dialog_modal_filter) [MAC_OSX]: New function.
- (Fx_popup_dialog) [MAC_OSX]: Use standard alert if called from
- Fmessage_box, Fyes_or_no_p, or Fy_or_n_p.
- [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030] (menu_quit_handler):
- Use mac_quit_char_key_p.
-
- * macterm.c (XDrawLine): Rename from mac_draw_line_to_pixmap.
- (XCreateGC): Change type of 2nd argument to void *.
- (XFreeGC) [USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
- Fix last change.
- (mac_to_emacs_modifiers): Change return type to int.
- [USE_CARBON_EVENTS] (mac_event_to_emacs_modifiers): Likewise.
- (mac_mapped_modifiers): New function.
- (XTread_socket): Use it.
- [USE_TSM] (mac_handle_text_input_event): Likewise.
- (do_window_update) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
- (mac_quit_char_modifiers, mac_quit_char_keycode) [MAC_OSX]:
- Remove variables.
- (mac_determine_quit_char_modifiers, init_quit_char_handler)
- [MAC_OSX]: Remove functions.
- (make_ctrl_char) [MAC_OSX]: Add extern.
- (mac_quit_char_key_p) [MAC_OSX]: New function.
- (mac_initialize) [MAC_OSX]: Don't call init_quit_char_handler.
-
- * macterm.h (FONT_MAX_WIDTH): Remove unused macro.
- (XCreateGC): Change type in extern.
- (XDrawLine): Rename from mac_draw_line_to_pixmap.
- (mac_quit_char_key_p) [MAC_OSX]: Add extern.
-
-2007-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c (init_keyboard): Initialize interrupt_input_blocked and
- interrupt_input_pending.
-
- * xterm.h (x_display_info): New: net_supported_atoms,
- nr_net_supported_atoms and net_supported_window.
-
- * xterm.c (last_user_time): New variable.
- (handle_one_xevent): Set last_user_time from events that have Time.
- Set net_supported_window to 0 when reparented.
- (wm_supports): New function.
- (do_ewmh_fullscreen): Use wm_supports to check for _NET_WM_STATE.
- (x_term_init): Initialize net_supported_atoms, nr_net_supported_atoms
- and net_supported_window.
-
-2007-01-05 Kim F. Storm <storm@cua.dk>
-
- * indent.c (Fvertical_motion): Fix it overshoot check for overlay
- strings without embedded newlines immediately followed by newline.
-
-2007-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * editfns.c (Fformat_time_string, Fdecode_time, Fencode_time)
- (Fcurrent_time_string, Fcurrent_time_zone): Add BLOCK_INPUT around
- gmtime/localtime/emacs_memftimeu/mktime.
-
- * mac.c (Fmac_set_file_creator): Use MAC_EMACS_CREATOR_CODE
- instead of 'EMAx'.
- [!MAC_OSX] (sys_open, sys_creat, sys_fopen): Likewise.
-
- * macgui.h (struct _XGC) [USE_CG_DRAWING
- && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: New members cg_fore_color
- and cg_back_color.
-
- * macmenu.c (Vshow_help_function) [TARGET_API_MAC_CARBON]: Add extern.
- (restore_show_help_function, menu_target_item_handler)
- [TARGET_API_MAC_CARBON]: New functions.
- (install_menu_target_item_handler): New function.
- (add_menu_item) [TARGET_API_MAC_CARBON]: Set help string as menu
- item property.
-
- * macterm.c (CG_SET_FILL_COLOR_MAYBE_WITH_CGCOLOR)
- (CG_SET_FILL_COLOR_WITH_GC_FOREGROUND)
- (CG_SET_FILL_COLOR_WITH_GC_BACKGROUND)
- (CG_SET_STROKE_COLOR_MAYBE_WITH_CGCOLOR)
- (CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND): New macros.
- (mac_cg_color_space_rgb) [USE_CG_DRAWING]: New variable.
- (mac_cg_color_black) [USE_CG_DRAWING
- && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: New variable.
- (init_cg_color) [USE_CG_DRAWING]: New function.
- (mac_draw_line, mac_draw_rectangle) [USE_CG_DRAWING]: Use
- CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND instead of CG_SET_STROKE_COLOR.
- (mac_erase_rectangle, mac_clear_window, mac_draw_cg_image)
- (mac_fill_rectangle, mac_draw_image_string_cg) [USE_CG_DRAWING]:
- Use CG_SET_FILL_COLOR_WITH_GC_FOREGROUND or
- CG_SET_FILL_COLOR_WITH_GC_BACKGROUND instead of CG_SET_FILL_COLOR.
- (mac_draw_string_common) [MAC_OSX && USE_ATSUI]: Likewise.
- (XCreateGC, XFreeGC, XSetForeground, XSetBackground) [USE_CG_DRAWING
- && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: Use gc->cg_fore_color and/or
- gc->cg_back_color.
- (install_drag_handler, remove_drag_handler): Make extern.
- (install_menu_target_item_handler): Add extern.
- (install_window_handler): Call install_menu_target_item_handler.
- [MAC_OS8] (main): Use MAC_EMACS_CREATOR_CODE instead of 'EMAx'.
- (mac_initialize) [USE_CG_DRAWING]: Call init_cg_color.
-
- * macterm.h (MAC_EMACS_CREATOR_CODE): New enumerator.
-
-2007-01-04 Juanma Barranquero <lekktu@gmail.com>
-
- * window.c (Fwindow_end): Fix use of >= operator.
-
-2007-01-03 Richard Stallman <rms@gnu.org>
-
- * window.c (Fwindow_end): Check BUF_OVERLAY_MODIFF like BUF_MODIFF.
-
-2007-01-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.h (xg_menu_item_cb_data_): Remove highlight_id and
- unhighlight_id.
-
- * gtkutil.c (menuitem_highlight_callback): Invoked widget is the
- parent of the menu item. Get menu item widget from event.
- (xg_create_one_menuitem, xg_update_menu_item): highlight_id and
- unhighlight_id has been removed.
- (create_menus): Connect enter/leave-notify-event to the menu instead
- of individual items.
-
-2006-12-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Connect create-menu-proxy with
- xg_tool_bar_menu_proxy.
- (xg_tool_bar_menu_proxy): New function.
- (xg_tool_bar_proxy_callback): New function.
-
-2006-12-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_button_cb): Save last modifier on widget.
- (xg_tool_bar_callback): Remove check for button.
- (update_frame_tool_bar): Put an event box in the tool bar and a button
- in the event box. Attach enter/leave-notify-event to the event box.
-
-2006-12-30 Richard Stallman <rms@gnu.org>
-
- * keymap.c (Fdefine_key): Doc fix.
-
-2006-12-29 Kim F. Storm <storm@cua.dk>
-
- * frame.h (struct frame): New member minimize_tool_bar_window_p.
-
- * xdisp.c (auto_resize_tool_bars_p): Replace with ...
- (Vauto_resize_tool_bars): ... this.
- (syms_of_xdisp): DEFVAR_LISP and initialize it. Update doc string
- to describe new value `grow-only', and use of C-l.
- (display_tool_bar_line): Only use default face for border below
- toolbar if not grow-only (to get acceptable visual appearence).
- Explicitly set visible_height for empty toolbar lines.
- (redisplay_tool_bar): Handle `grow-only' setting. Check and clear
- minimize_tool_bar_window_p flag.
-
- * window.c (Frecenter): Set minimize_tool_bar_window_p flag
- when called without arg to redraw with minimum toolbar height.
- Update doc string.
-
-2006-12-29 Jason Rumney <jasonr@gnu.org>
-
- * s/ms-w32.h (tzname): Do not define in msvc8.
- (utime): Do not define in msvc8.
-
- * regex.c (regerror): Change parameter name err_code.
-
-2006-12-26 Richard Stallman <rms@gnu.org>
-
- * search.c (Fsearch_forward): Doc fix.
-
- * callint.c (Finteractive): Doc fix.
-
-2006-12-25 Kim F. Storm <storm@cua.dk>
-
- * s/ms-w32.h (BROKEN_DATAGRAM_SOCKETS): Define it.
-
-2006-12-23 Eli Zaretskii <eliz@gnu.org>
-
- * keyboard.c (some_mouse_moved): Fix last change.
-
-2006-12-22 Eli Zaretskii <eliz@gnu.org>
-
- * callproc.c (syms_of_callproc) <shell-file-name>: Doc fix.
-
-2006-12-22 Mark Davies <mark@mcs.vuw.ac.nz>
-
- * m/amdx86-64.h, m/hp800.h: Add support for NetBSD.
- * m/sh3el.h: New file.
-
-2006-12-22 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (emacs, temacs): Depend on stamp_BLD instead of
- $(BLD).
- ($(OBJ0) $(OBJ1) $(WIN32OBJ)): New dependency on stamp_BLD.
- (bootstrap-temacs): Pass $(XMFLAGS) to sub-make.
- ($(OBJ0) $(OBJ1) $(WIN32OBJ)): Add lastfile.$(O) and firstfile.$(O).
- (clean): Delete stamp_BLD.
-
-2006-12-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (mac_update_title_bar) [TARGET_API_MAC_CARBON]:
- Call mac_update_proxy_icon also when buffer modification flag changed.
- [TARGET_API_MAC_CARBON] (mac_update_proxy_icon): Don't update alias,
- but compare FSRef/FSSpec of resolved alias.
-
-2006-12-21 Kim F. Storm <storm@cua.dk>
-
- * w32.c (_sys_wait_accept): Fix handle leak.
-
-2006-12-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * sound.c: Include <alsa/asoundlib.h> if ALSA_SUBDIR_INCLUDE is
- defined.
-
-2006-12-20 Kim F. Storm <storm@cua.dk>
-
- * s/ms-w32.h (BROKEN_NON_BLOCKING_CONNECT): Define it.
-
-2006-12-19 Juanma Barranquero <lekktu@gmail.com>
-
- * keyboard.c (syms_of_keyboard) <double-click-time>:
- * mac.c (Fmac_code_convert_string):
- * search.c (Fsearch_forward): Doc fixes.
-
-2006-12-19 Kim F. Storm <storm@cua.dk>
-
- Rework 2006-12-04 change. A SIGUSR1 (SIGUSR2) signal now generates
- a sigusr1 event instead of [signal usr1] sequence, and signal events
- are now supposed to be handled via special-event-map.
-
- * keyboard.c (kbd_buffer_store_event_hold): Undo 2006-12-04 change.
- (make_lispy_event): Don't generate Qsignal prefix for code 0.
- Abort if signal code is unknown.
- (store_user_signal_events): Don't make Qsignal prefix (code 0).
- (Qsignal): Move declaration back to process.c.
- (syms_of_keyboard): Don't intern or staticpro it here.
-
- * process.c (Qsignal): Declare here.
- (syms_of_process): Intern or staticpro it.
-
- * emacs.c (main): Rename user signals to sigusr1 and sigusr2.
-
- * .gdbinit: Pass on SIGUSR1 and SIGUSR2 to Emacs.
-
-2006-12-19 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (syms_of_buffer) <buffer-display-table>:
- <scroll-up-aggressively, scroll-down-aggressively>: Doc fixes.
-
-2006-12-17 Richard Stallman <rms@gnu.org>
-
- * fileio.c (Fread_file_name_internal): Pass Vread_file_name_predicate
- to Ffile_name_completion.
-
- * dired.c (file_name_completion): New arg PREDICATE. Some cleanup.
- (Ffile_name_completion): New arg PREDICATE.
-
-2006-12-17 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (Fkill_buffer): Doc fix.
- (syms_of_buffer) <kill-buffer-query-functions>: Doc fix.
-
-2006-12-16 Juanma Barranquero <lekktu@gmail.com>
-
- * minibuf.c (Ftry_completion): Check that obarray buckets are symbols.
-
-2006-12-16 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (w32-window-exists-p): New function.
- (syms_of_w32fns): Defsubr it.
-
- * prefix-args.c [STDC_HEADERS]: Include stdlib.h.
-
-2006-12-16 Juanma Barranquero <lekktu@gmail.com>
-
- * minibuf.c (Ftry_completion): Use `check_obarray' if ALIST is a vector.
-
-2006-12-15 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (USAGE3): Clarify documentation of --color.
-
-2006-12-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (wakeup_from_rne_enabled_p) [TARGET_API_MAC_CARBON]:
- New variable.
- (ENABLE_WAKEUP_FROM_RNE, DISABLE_WAKEUP_FROM_RNE): New macros.
- [!MAC_OSX] (select): Use them.
- [MAC_OSX] (select_and_poll_event, sys_select): Likewise.
- (mac_wakeup_from_rne) [TARGET_API_MAC_CARBON]: New function.
-
- * macfns.c (mac_atsu_font_face_attributes) [USE_ATSUI]: Add extern.
- (Fmac_atsu_font_face_attributes) [USE_ATSUI]: New function.
- (syms_of_macfns) [USE_ATSUI]: Defsubr it.
-
- * macselect.c [TARGET_API_MAC_CARBON] (mac_do_receive_drag):
- Use mac_wakeup_from_rne instead of mac_post_mouse_moved_event.
-
- * macterm.c (mac_query_char_extents) [USE_ATSUI]: Don't call
- ATSUGetGlyphBounds if not necessary.
- (Vmac_atsu_font_table) [USE_ATSUI]: Remove variable.
- (syms_of_macterm) [USE_ATSUI]: Don't defvar it.
- (fm_get_style_from_font, atsu_find_font_from_family_name)
- (atsu_find_font_family_name, mac_atsu_font_face_attributes)
- [USE_ATSUI]: New functions.
- (init_font_name_table) [USE_ATSUI]: Use atsu_find_font_family_name.
- (mac_load_query_font) [USE_ATSUI]: Use atsu_find_font_from_family_name.
- Don't get metrics for Latin-1 right half characters.
- (mac_load_query_font): Don't load font if space width is not positive.
- [TARGET_API_MAC_CARBON] (mac_store_event_ref_as_apple_event):
- Use mac_wakeup_from_rne instead of mac_post_mouse_moved_event.
- (XTread_socket): Call SelectWindow when unfocused frame is clicked.
-
- * macterm.h (mac_wakeup_from_rne) [TARGET_API_MAC_CARBON]: Add extern.
-
-2006-12-15 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (ignore_mouse_drag_p): New global var.
- (some_mouse_moved): Return 0 if it is non-zero.
- (make_lispy_event): Generate click event on mouse up if
- ignore_mouse_drag_p is non-zero, even if mouse moved.
- Clear ignore_mouse_drag_p on mouse down/up.
-
- * xdisp.c (redisplay_window): Set ignore_mouse_drag_p if tool-bar
- is resized to avoid generating a mouse drag event.
-
-2006-12-14 Juanma Barranquero <lekktu@gmail.com>
-
- * w32fns.c (w32_wnd_proc): Force non-tooltip frames to respect the
- minimum tracking size. Remove non-working old hack to do the same.
-
-2006-12-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * emacs.c (handle_user_signal): Move function to keyboard.c.
- (main): Use add_user_signal for SIGUSR1 and SIGUSR2.
-
- * keyboard.c (make_lispy_event): Use find_user_signal_name.
- (read_avail_input): Store pending user signal events.
- (struct user_signal_info): New struct.
- (user_signals): New variable.
- (add_user_signal, store_user_signal_events)
- (find_user_signal_name): New functions.
- (handle_user_signal): Move function from emacs.c. Don't store
- USER_SIGNAL_EVENT here, but increment number of pending signals.
-
- * keyboard.h (add_user_signals): Add extern.
-
-2006-12-11 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (syms_of_buffer) <cursor-in-non-selected-windows>:
- <default-scroll-up-aggressively, default-scroll-down-aggressively>:
- <line-spacing, left-margin>: Doc fixes.
-
- * xdisp.c (syms_of_xdisp) <mode-line-inverse-video>: Doc fix.
-
-2006-12-10 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (show_mouse_face): Never use text cursor in tool-bar.
-
-2006-12-10 Juanma Barranquero <lekktu@gmail.com>
-
- * abbrev.c (syms_of_abbrev) <last-abbrev-text>:
- * buffer.c (syms_of_buffer) <default-major-mode>:
- * keymap.c (Flookup_key):
- * lread.c (Feval_buffer, Feval_region):
- * macterm.c (syms_of_macterm) <x-use-underline-position-properties>:
- <x-underline-at-descent-line, mac-emulate-three-button-mouse>:
- * marker.c (Fmarker_insertion_type):
- * minibuf.c (syms_of_minibuf) <minibuffer-completion-table>:
- * msdos.c (syms_of_msdos) <delete-exited-processes>:
- * w32term.c (syms_of_w32term) <x-use-underline-position-properties>:
- <x-underline-at-descent-line>:
- * xdisp.c (format-mode-line):
- * xterm.c (syms_of_xterm) <x-use-underline-position-properties>:
- <x-underline-at-descent-line>: Doc fixes.
-
-2006-12-10 Andreas Schwab <schwab@suse.de>
-
- * systime.h (EMACS_GET_TIME): Remove check for
- HAVE_STRUCT_TIMEZONE which is never defined.
-
-2006-12-10 Alan Mackenzie <acm@muc.de>
-
- * syntax.c (Fpartial_parse_sexp): Correct Docco: Elt 8 of the
- result is now neither the last elt nor optional for OLDSTATE.
-
-2006-12-09 Eli Zaretskii <eliz@gnu.org>
-
- * process.c (Fsignal_process): Doc fix. Use XFLOAT_DATA to
- extract the process ID from a Lisp float.
-
-2006-12-09 Chong Yidong <cyd@stupidchicken.com>
-
- * xterm.c (XTframe_raise_lower): Comment out _NET_ACTIVE_WINDOW code.
-
-2006-12-08 Eli Zaretskii <eliz@gnu.org>
-
- * frame.h (PIX_TYPE): Redefine as `unsigned long', for 64-bit
- platforms where long is 64-bit.
-
- * msdos.h (PIX_TYPE): Redefine as `unsigned long'.
-
-2006-12-08 NAKAJI Hiroyuki <nakaji@jp.freebsd.org> (tiny change)
-
- * m/amdx86-64.h: Add support for Solaris 10 on x86-64.
-
-2006-12-08 Kenichi Handa <handa@m17n.org>
-
- * xterm.c (x_query_font): Use xstricmp instead off strcasecmp.
-
-2006-12-08 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs.c (syms_of_emacs) <system-type>: Doc fix.
-
-2006-12-07 Kim F. Storm <storm@cua.dk>
-
- * process.c (parse_signal): Use xstricmp instead of strcasecmp.
- (Fsignal_process): Don't use strncasecmp.
-
-2006-12-05 Glenn Morris <rgm@gnu.org>
-
- * abbrev.c (Qforce): New Lisp_Object.
- (Fdefine_abbrev): Do not overwrite non-system abbrevs with system
- abbrevs, unless 'force is applied.
- (syms_of_abbrev): Add Qforce.
-
-2006-12-04 Kim F. Storm <storm@cua.dk>
-
- * process.c (parse_signal): Rename macro from handle_signal.
- (Fsignal_process): Also accept lower-case variants of signal
- names (to align with signal names generated by Emacs itself).
-
- * emacs.c (handle_USR1_signal, handle_USR2_signal): Replace by...
- (handle_user_signal): ... this, which generates two USER_SIGNAL_EVENTs
- first with code == 0 [signal] and one with code == sig number.
- (main): Use it as handler for SIGUR1 and SIGUSR2.
-
- * keyboard.c (kbd_buffer_store_event_hold): Don't throw-on-input
- if first event in [signal xxx] sequence.
- (lispy_user_signals, Qusr1_signal, Qusr2_signal): Remove.
- (syms_of_keyboard): Don't intern and staticpro them.
- (Qsignal): Declare here.
- (syms_of_keyboard): Intern and staticpro it.
- (make_lispy_event): Use it. Intern symbols on the fly for other
- USER_SIGNAL_EVENTs events.
-
- * process.c (Qsignal): Declare extern.
- (syms_of_process): Don't intern/staticpro it here.
-
- * process.c (read_process_output): Abort if carryover < 0.
-
-2006-12-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * config.in: Regenerate.
-
- * fileio.c [__NetBSD__]: Don't define `unix'.
- (Funix_sync, syms_of_fileio): Use `#ifdef HAVE_SYNC' instead of
- `#ifdef unix'.
-
-2006-12-04 Glenn Morris <rgm@gnu.org>
-
- * Makefile.in (version): New variable, set by configure.
- (bootstrapclean, mostlyclean): Also remove emacs-${version}.
-
-2006-12-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Handle modifying a toolbar item
- without an image.
-
-2006-12-01 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (Fw32_shell_execute): Doc fix.
-
-2006-11-30 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (move_it_to): Correctly count tab glyphs for continued
- lines ending in tab.
-
-2006-11-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_raise_frame): Move setting of _NET_ACTIVE_WINDOW
- property ...
- (XTframe_raise_lower): ... to here.
-
-2006-11-30 Kenichi Handa <handa@m17n.org>
-
- * regex.c (regex_compile): Fix previous change.
-
-2006-11-29 Juanma Barranquero <lekktu@gmail.com>
-
- * sound.c (Fplay_sound_internal): Remove spurious newline in docstring.
-
-2006-11-28 Chong Yidong <cyd@stupidchicken.com>
-
- * config.in: Regenerate.
-
-2006-11-28 Kenichi Handa <handa@m17n.org>
-
- * regex.c (regex_compile): Don't call SET_LIST_BIT with a
- multibyte character.
-
-2006-11-27 Chong Yidong <cyd@stupidchicken.com>
-
- * s/aix4-2.h: Undefine _NO_PROTO. Suggested by Joe Buehler.
-
-2006-11-27 Kim F. Storm <storm@cua.dk>
-
- * window.c (set_window_buffer): Refactor recent changes.
-
-2006-11-27 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_msg_worker): Declare correctly.
- (w32_initialize): Don't cast w32_msg_worker.
-
- * w32fns.c (w32_msg_worker): Define as WINAPI and arg as void pointer.
-
-2006-11-26 Chong Yidong <cyd@stupidchicken.com>
-
- * m/amdx86-64.h: Look for standard libs in /usr/lib64 only if that
- directory exists.
-
-2006-11-25 Eli Zaretskii <eliz@gnu.org>
-
- * w16select.c (Fw16_set_clipboard_data): Fix the call to sit_for
- as per the calling sequence change on 2006-07-11.
-
-2006-11-25 Chong Yidong <cyd@stupidchicken.com>
-
- * window.c (set_window_buffer): Use BLOCK_INPUT.
-
-2006-11-24 Juanma Barranquero <lekktu@gmail.com>
-
- * fns.c (substring_both): Add missing address operator.
-
-2006-11-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fns.c: Use AREF/ASIZE macros.
- (concat): Provide the full ANSI prototype.
-
-2006-11-24 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (syms_of_buffer) <buffer-undo-list>: Doc fix.
-
-2006-11-23 William Smith <William.Smith@global360.com> (tiny change)
-
- * strftime.c (HAVE_SYS__MBSTATE_T_H): Fix typo.
-
-2006-11-22 Alfred M. Szmidt <ams@gnu.org> (tiny change)
-
- * s/openbsd.h (LD_SWITCH_SYSTEM): Remove /usr/pkg/lib and
- /usr/pkg/lib from the library search path.
- (LD_SWITCH_X_DEFAULT): New macro.
-
-2006-11-22 Chong Yidong <cyd@stupidchicken.com>
-
- * window.c (set_window_buffer): Clear mouse highlight if it is in
- this window.
-
-2006-11-21 Chong Yidong <cyd@stupidchicken.com>
-
- * xfaces.c (realize_default_face): Check if the default font name
- exists on this display before trying to use it.
-
-2006-11-21 Richard Stallman <rms@gnu.org>
-
- * fileio.c: Break line before &&, not after.
-
-2006-11-20 Eli Zaretskii <eliz@gnu.org>
-
- * fns.c (concat) [!__GNUC__]: Add prototype.
-
-2006-11-20 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Fread_file_name_internal): Use SBYTES (not SCHARS) to
- check the tailing slash of a filename.
-
-2006-11-20 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp> (tiny change)
-
- * indent.c (Fvertical_motion): Include composition in the case of
- overshoot expected.
-
-2006-11-19 Andreas Schwab <schwab@gnu.org>
-
- * xfaces.c (Fdisplay_supports_face_attributes_p): Initialize supports.
-
- * xmenu.c (Fx_popup_menu): Initialize selection.
-
-2006-11-18 Andreas Schwab <schwab@suse.de>
-
- * s/gnu-linux.h (GC_MARK_SECONDARY_STACK): Update call to mark_memory.
-
-2006-11-17 Tetsurou Okazaki <okazaki@be.to> (tiny change)
-
- * xterm.c (do_ewmh_fullscreen): Declare variable before XSETFRAME
- to avoid gcc 2.96 error.
-
-2006-11-17 NIIMI Satoshi <sa2c@sa2c.net> (tiny change)
-
- * search.c (simple_search): In the loop of backward searching,
- check also the byte position against the limit.
-
-2006-11-14 Romain Francoise <romain@orebokech.com>
-
- * minibuf.c (Fcompleting_read): Fix typo in docstring.
-
-2006-11-14 Kenichi Handa <handa@m17n.org>
-
- * coding.c (code_convert_region): Initialize coding->heading_ascii.
- (decode_coding_string, code_convert_region): Likewise.
-
-2006-11-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * config.in: Regenerate.
-
- * macfns.c (Fx_display_mm_height, Fx_display_mm_width)
- [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
- && MAC_OS_X_VERSION_MIN_REQUIRED == 1020]: Check if
- CGDisplayScreenSize is available.
-
- * macmenu.c (menu_quit_handler, install_menu_quit_handler):
- Replace `#ifdef HAVE_CANCELMENUTRACKING' with
- `#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030'.
- (install_menu_quit_handler) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
- && MAC_OS_X_VERSION_MIN_REQUIRED == 1020]: Check if
- CancelMenuTracking is available.
-
- * macterm.c [USE_CG_TEXT_DRAWING] (mac_draw_image_string_cg)
- [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
- && MAC_OS_X_VERSION_MIN_REQUIRED == 1020]: Check if
- CGContextShowGlyphsWithAdvances is available.
-
-2006-11-13 Jason Rumney <jasonr@gnu.org>
-
- * s/ms-w32.h: Define HAVE_INET_SOCKETS.
-
-2006-11-13 Nozomu Ando <nand@mac.com>
-
- * alloc.c (mark_memory): New argument OFFSET. All uses changed.
- Fix address calculations for case END < START.
- (mark_stack): Impose Lisp_Object alignment on jmp_buf.
-
-2006-11-12 Juanma Barranquero <lekktu@gmail.com>
-
- * coding.c (Fencode_sjis_char, Fencode_big5_char):
- Improve argument/docstring consistency.
-
- * editfns.c (Fmessage): Doc fixes.
-
- * process.c (syms_of_process) <delete-exited-processes>: Doc fix.
-
-2006-11-12 Chong Yidong <cyd@stupidchicken.com>
-
- * xmenu.c (popup_activated): Define outside HAVE_MENUS.
-
-2006-11-12 Romain Francoise <romain@orebokech.com>
-
- * xselect.c (selection-coding-system): Fix docstring.
-
-2006-11-12 Juanma Barranquero <lekktu@gmail.com>
-
- * category.c (Fchar_category_set): Improve arg/docstring consistency.
-
- * data.c (Flogxor):
- * fns.c (Frandom, Flength, Fsafe_length, Fstring_bytes)
- (Fstring_equal, Fcompare_strings, Fstring_lessp, Fcopy_sequence)
- (Fstring_make_unibyte): Fix typos in docstrings.
-
-2006-11-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (struct x_display_info): Fix indentation.
-
- * xterm.c (do_ewmh_fullscreen, XTfullscreen_hook): New functions.
- (x_check_fullscreen): Call do_ewmh_fullscreen.
- (x_initialize): Set fullscreen_hook to XTfullscreen_hook.
-
- * frame.c (x_set_fullscreen): Call fullscreen_hook if set.
-
- * term.c: Define fullscreen_hook.
- (syms_of_term): Initialize fullscreen_hook to NULL.
-
- * termhooks.h: Add fullscreen_hook.
-
-2006-11-08 Juanma Barranquero <lekktu@gmail.com>
-
- * bytecode.c (Fbyte_code):
- * data.c (Fmakunbound): Use SYMBOL_CONSTANT_P macro.
-
-2006-11-06 Juanma Barranquero <lekktu@gmail.com>
-
- * lread.c (syms_of_lread):
- * xsmfns.c (syms_of_xsmfns): Fix typo in docstring.
-
-2006-11-06 Martin Rudalics <rudalics@gmx.at>
-
- * macmenu.c (Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
-
- * w32menu.c (Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
- Return nil if building without menus.
-
- * xmenu.c (Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
- Return nil if building without menus.
-
-2006-11-05 Mark Davies <mark@mcs.vuw.ac.nz> (tiny change)
-
- * s/netbsd.h (POSIX_SIGNALS): Define.
-
-2006-11-05 Martin Rudalics <rudalics@gmx.at>
-
- * macmenu.c (Fmenu_or_popup_active_p): New function.
- (syms_of_macmenu): Defsubr it.
-
- * w32menu.c (Fmenu_or_popup_active_p): New function.
- (syms_of_w32menu): Defsubr it.
- (popup_activated_flag, popup_activated): Remove.
-
- * xdisp.c (note_mouse_highlight) [HAVE_NTGUI]: Don't bother to
- check popup_activated.
-
- * xmenu.c (Fmenu_or_popup_active_p): New function.
- (syms_of_xmenu): Defsubr it.
-
-2006-11-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * unexmacosx.c (malloc_cookie): Remove unused variable.
- (region_list_head, region_list_tail, lca, nlc, infile_lc_highest_addr)
- (text_seg_lowest_offset, mh, curr_header_offset, infd, outfd)
- (emacs_zone, data_segment_old_fileoff, data_segment_scp)
- (num_unexec_regions, unexec_regions): Make variables static.
- (print_regions, find_emacs_zone_regions): Make static.
- (unexec_region_info): New typedef.
- (unexec_regions): Change type from vm_range_t[] to unexec_region_info[].
- All uses changed.
- (unexec_regions_recorder): Subtract size of trailing null pages from
- filesize. Show filesize.
- (unexec_regions_merge): Don't merge if null pages of preceding region
- is not too small. Use long format in printf.
- (copy_segment, copy_data_segment): Show filesize.
- (copy_data_segment): Write filesize bytes of region data.
- Adjust filesize in segment command accordingly.
- (dump_it): Use long format in printf.
-
-2006-11-05 Juanma Barranquero <lekktu@gmail.com>
-
- * dosfns.c (Finsert_startup_screen):
- * fns.c (Ffeaturep, syms_of_fns):
- * frame.c (syms_of_frame): Fix typos in docstrings.
-
- * unexcw.c (unexec): Fix typo in output message.
-
-2006-11-04 Ralf Angeli <angeli@caeruleus.net>
-
- * w32fns.c (w32_createwindow): Remove code for handling -geometry
- command line option and `initial-frame-alist' which is superfluous
- after the last change to `w32_createwindow'.
-
-2006-11-04 Slawomir Nowaczyk <slawek@cs.lth.se> (tiny change)
-
- * w32proc.c (sys_wait): Only wait for processes with fd<0.
- Others should be handled by sys_select instead. Fixes problems
- with (progn (start-process "" nil "ls") (call-process "ls")).
-
-2006-11-04 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
-
- * xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
- avoid gcc 2.95 error.
-
-2006-11-04 Chong Yidong <cyd@stupidchicken.com>
-
- * gtkutil.c (update_frame_tool_bar): If icon image is invalid and
- wicon is null, insert an empty button.
-
-2006-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_raise_frame): Send _NET_ACTIVE_WINDOW when raising the
- window.
-
-2006-11-02 Juanma Barranquero <lekktu@gmail.com>
-
- * emacs.c (Fkill_emacs): Fix typo in docstring.
-
-2006-11-02 Nozomu Ando <nand@mac.com>
-
- * unexmacosx.c (mach_header, segment_command, vm_region, section)
- [_LP64]: New defines.
- (VM_REGION_BASIC_INFO_COUNT, VM_REGION_BASIC_INFO, LC_SEGMENT)
- (MH_MAGIC) [_LP64]: Redefine.
- (delta): Remove variable.
- (curr_file_offset, pagesize): New variables.
- (ROUNDUP_TO_PAGE_BOUNDARY): New macro.
- (data_segment_old_fileoff): Initialize explicitly.
- (print_region, unexec_regions_recorder, print_load_command_name)
- (copy_segment, copy_data_segment): Use long format in printf.
- (MAX_UNEXEC_REGIONS): Increase to 400.
- (unexec_regions_recorder): Don't warn too many regions here.
- (find_emacs_zone_regions): Warn too many regions here.
- (print_load_command_name) [_LP64]: Show correct load command name.
- (copy_segment, copy_data_segment): Use variable `curr_file_offset'.
- Show starting virtual memory address. Don't show ending file offset.
- (copy_symtab, copy_dysymtab, copy_twolevelhints): New argument DELTA.
- (dump_it): Use new local variable `linkedit_delta' and pass to them.
- Error if trying to handle multiple DATA segments.
- (unexec): Initialize variable `pagesize'.
-
-2006-11-01 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (Fcatch): Doc fix.
-
-2006-10-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c [MAC_OS] (image_load_qt_1, xpm_scan, xpm_make_color_table_v)
- (xpm_put_color_table_v, xpm_get_color_table_v, xpm_make_color_table_h)
- (xpm_put_color_table_h, xpm_get_color_table_h, xpm_str_to_color_key)
- (xpm_load_image): Add const qualifier to arguments.
- [MAC_OS] (xpm_color_key_strings): Make static const.
-
- * mac.c (create_apple_event_from_event_ref)
- (create_apple_event_from_drag_ref, skip_white_space, parse_comment)
- (parse_include_file, parse_binding, parse_component)
- (parse_resource_name, parse_value, parse_resource_line)
- (xrm_merge_string_database, xrm_get_resource)
- (xrm_get_preference_database): Add const qualifier to arguments.
- [MAC_OSX] (sys_select): Make variable `context' static const.
-
- * macfns.c (mac_color_map): Make static const.
- (mac_color_map_lookup): Add const qualifier to arguments.
-
- * macmenu.c (install_menu_quit_handler): Make variable `typesList'
- static const.
- (name_is_separator): Add const qualifier to arguments.
-
- * macselect.c (init_service_handler): Make variable `specs' static
- const.
-
- * macterm.c (mac_create_bitmap_from_bitmap_data): Make variable
- `swap_nibbles' static const.
- (atsu_get_text_layout_with_text_ptr): Make variables `lengths',
- `tags', `sizes', `values' static const.
- (mac_draw_string_common): Make variables `context' static.
- Make variables `tags', `sizes', and `values' static const.
- (pcm_get_status, x_detect_focus_change, x_scroll_bar_handle_click)
- (xlfdpat_create, xlfdpat_block_match_1, xlfdpat_match)
- (mac_to_x_fontname, parse_x_font_name, add_mac_font_name)
- (mac_do_list_fonts, is_fully_specified_xlfd, do_grow_window)
- (mac_store_event_ref_as_apple_event, mac_make_rdb): Add const
- qualifier to arguments.
- (xlfd_scalable_fields, keycode_to_xkeysym_table)
- (fn_keycode_to_keycode_table): Make static const.
- (mac_load_query_font): Make variables `tags', `sizes', `values',
- `types', and `selectors' static const.
- (mac_handle_command_event, mac_handle_window_event):
- Make variables `names' and `types' static const.
- (init_command_handler, install_window_handler): Make variables
- `specs*' static const.
- (mac_handle_font_event, mac_handle_text_input_event)
- (mac_store_service_event): Make variables `names' and `types'
- const. Make variables `names_*' and `types_*' static const.
-
- * macterm.h (create_apple_event_from_event_ref)
- (create_apple_event_from_drag_ref, xrm_merge_string_database)
- (xrm_get_resource, xrm_get_preference_database): Add const
- qualifier to arguments in externs.
-
-2006-10-31 Kenichi Handa <handa@m17n.org>
-
- * xfns.c (xic_create_xfontset): Fix previous change.
-
-2006-10-30 Chong Yidong <cyd@stupidchicken.com>
-
- * s/openbsd.h (LD_SWITCH_SYSTEM): Add /usr/pkg/lib and
- /usr/pkg/lib to library search path.
-
-2006-10-29 Mark Davies <mark@mcs.vuw.ac.nz> (tiny change)
-
- * ralloc.c (relinquish): Use a long for excess space counter to
- handle 64-bit case correctly.
-
-2006-10-29 Jeramey Crawford <jeramey@jeramey.com>
-
- * m/amdx86-64.h: Add defines for OpenBSD x86-64.
-
-2006-10-29 Juanma Barranquero <lekktu@gmail.com>
-
- * window.c (Fdisplay_buffer): Fix typo in docstring.
-
-2006-10-27 Ben North <ben@redfrontdoor.org> (tiny change)
-
- * w32term.c (x_draw_glyph_string_foreground): Set background mode
- to TRANSPARENT before using overstrike to simulate bold faces.
-
- * xfaces.c (best_matching_font): Fix logic to decide whether to
- use overstriking to simulate bold-face (it was reversed).
-
-2006-10-23 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (remember_mouse_glyph): Do nothing if glyphs are not
- initialized.
-
- * keyboard.c (read_char): Make an element (t . EVENT) in
- unread-command-events add EVENT to the current command's key sequence.
- (syms_of_keyboard) <unread-command-events>: Update doc.
-
-2006-10-21 Richard Stallman <rms@gnu.org>
-
- * minibuf.c (Vread_expression_map): Define here.
- (Qread_expression_history): New variable.
- (syms_of_minibuf): Initialize them.
- (Feval_minibuffer): Use Vread_expression_map and
- Qread_expression_history.
-
-2006-10-21 Kenichi Handa <handa@m17n.org>
-
- * xfns.c (xic_create_fontsetname): If ADSTYLE field is not a wild
- card, change it to "*".
- (xic_create_xfontset): Call XCreateFontSet for each single
- fontname in fontsetname.
-
-2006-10-19 Chong Yidong <cyd@stupidchicken.com>
-
- * callint.c (callint_message): Convert to a Lisp string.
- (syms_of_callint): Initialize it.
- (callint_message_size): Var deleted.
- (Fcall_interactively): Use Fformat instead of doprnt to construct
- prompt string.
-
-2006-10-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xdisp.c (display_mode_line): Clear enabled_p flag on mode-line row.
-
-2006-10-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (Vmac_carbon_version_string) [TARGET_API_MAC_CARBON]:
- New variable.
- (syms_of_macfns) [TARGET_API_MAC_CARBON]: Defvar it.
-
-2006-10-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (x_handle_selection_request): If the converted_selection
- is nil or XCDR (converted_selection) is nil, decline the request.
-
-2006-10-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (get_utf8_string): Remove warnings with casts.
- (xg_tool_bar_button_cb): Ditto.
- (xg_tool_bar_callback): Ditto.
-
-2006-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Remove unused
- variable ch_dim.
- (adjust_frame_glyphs_for_window_redisplay): Likewise. Don't allocate
- menu bar window matrices on non-X systems.
-
- * mac.c (Fmac_get_preference, Fmac_code_convert_string): Add GCPROs.
-
- * macterm.c (mac_query_char_extents): Don't return glyph ID if layout
- adjustment is needed.
- (mac_load_query_font): Check if width and height are positive.
-
-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.
-
-2006-09-30 Eli Zaretskii <eliz@gnu.org>
-
- * config.in: Regenerated.
-
-2006-09-29 Juri Linkov <juri@jurta.org>
-
- * buffer.c (syms_of_buffer): Reorder coding systems in the
- docstring of %z to the real order displayed in the modeline.
-
-2006-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (Fdefine_key): Yet another int/Lisp_Object mixup (YAILOM).
-
-2006-09-26 Chong Yidong <cyd@stupidchicken.com>
-
- * indent.c (Fvertical_motion): Do move back if the Lisp string
- being displayed contains newlines.
-
-2006-09-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_compute_glyph_string_overhangs, XLoadQueryFont)
- [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw before QDTextBounds.
-
-2006-09-26 Kenichi Handa <handa@m17n.org>
-
- * keymap.c (Fsingle_key_description): For an invalid char, return
- "Invalid char code NNNNN".
-
-2006-09-25 Chong Yidong <cyd@stupidchicken.com>
-
- * callint.c (Fcall_interactively): Doc fix.
-
-2006-09-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (x_underline_at_descent_line): New variable.
- (syms_of_macterm): DEFVAR_BOOL it.
- (x_draw_glyph_string): Use it.
- (XLoadQueryFont): Calculate min_bounds.descent and max_bounds.descent.
-
-2006-09-25 Kenichi Handa <handa@m17n.org>
-
- * keymap.c (Fsingle_key_description): Return unique names for
- generic characters.
-
-2006-09-24 Richard Stallman <rms@gnu.org>
-
- * search.c (compile_pattern_1): Don't BLOCK_INPUT.
-
-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.
-
- * w32proc.c (nl_langinfo): New function.
-
- * w32fns.c (w32-pass-alt-to-system, w32-alt-is-meta)
- (w32-pass-lwindow-to-system, w32-enable-num-lock)
- (w32-enable-caps-lock, w32-scroll-lock-modifier)
- (w32-lwindow-modifier, w32-rwindow-modifier)
- (w32-apps-modifier, w32-mouse-button-tolerance): Doc fix.
-
-2006-09-23 Juanma Barranquero <lekktu@gmail.com>
-
- * minibuf.c (Finternal_complete_buffer, Fread_minibuffer)
- (Fdisplay_completion_list): Fix typos in docstrings.
-
-2006-09-23 Romain Francoise <romain@orebokech.com>
-
- * s/gnu-linux.h (MAIL_USE_FLOCK): Check for HAVE_LIBLOCKFILE too.
-
-2006-09-23 Kenichi Handa <handa@m17n.org>
-
- * keymap.c (Fmap_keymap): Docstring mentions about generic character.
-
-2006-09-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * regex.c (analyse_first): For eight-bit-control chars, mark both the
- char's value and its leading byte in the fastmap.
- (re_search_2): When fast-scanning without translation, be careful to
- check that we only match the leading byte of a multibyte char.
-
- * charset.h (PREV_CHAR_BOUNDARY): Make it work from within a char's
- byte sequence.
- (AT_CHAR_BOUNDARY): New macro.
-
-2006-09-22 Kenichi Handa <handa@m17n.org>
-
- * fns.c (optimize_sub_char_table): Don't optimize a sub-char-table
- whose default value is non-nil.
-
-2006-09-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_file_with_chooser): Only show C-l help for
- Gtk+ versions < 2.10.
-
- * xfns.c (syms_of_xfns): Fix typo in help text for
- x-gtk-file-dialog-help-text.
-
-2006-09-21 Kim F. Storm <storm@cua.dk>
-
- * fns.c (Fmemq): Refill doc string.
- (Fmemql): New defun, like memq but using eql.
- (syms_of_fns): Defsubr it.
-
-2006-09-20 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (pos_visible_p): CHARPOS < 0 means return info for
- last visible glyph in window.
-
- * window.c (Fset_window_hscroll, Fwindow_line_height):
- Doc fix. Use "off-window" instead of "off-screen".
- (Fpos_visible_in_window_p): Likewise.
- If POS is t, return info for last visible glyph in window.
-
-2006-09-19 Chong Yidong <cyd@stupidchicken.com>
-
- * search.c (struct regexp_cache): New entry syntax_table.
- (compile_pattern_1): Set it.
- (syms_of_search): Initialize it.
- (compile_pattern): Require the syntax_table entry of the cache
- element to match the current syntax table entry.
-
-2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Fwindow_end): Fix recent change.
-
-2006-09-19 Kim F. Storm <storm@cua.dk>
+2007-10-25 Juanma Barranquero <lekktu@gmail.com>
- * window.c (Fset_window_hscroll, Fpos_visible_in_window_p):
- Doc fix. Use "off-screen" instead of "invisible".
- (Fwindow_line_height): Make line numbers 0-based. Make line arg
- optional; if nil, use current cursor row. Handle text terminals
- properly. Return nil if non-interactive or pseudo-window.
+ * w32.c (init_environment): Fix tiny memory leak.
+ (w32_get_resource): Remove unused variable `ok'.
-2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-10-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * keymap.c: Include alloca.h if available.
- (Fkey_binding): Only use AREF after checking it's a vector.
- Remove unused var `window'.
+ Make `window-system' into a keyboard-local variable (rather than
+ frame-local as done originally by multi-tty).
-2006-09-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * keyboard.h (struct kboard): Add Vwindow_system.
+ * keyboard.c (init_kboard): Set a default for Vwindow_system.
+ (mark_kboards): Mark Vwindow_system.
- * emacs.c (shut_down_emacs) [!subprocesses]: Don't set
- inhibit_sentinels.
+ * dispnew.c (syms_of_display) <window-system>: Declare terminal-local.
+ (init_display): Don't set the obsolete `window-system' frame-param.
- * mac.c [!MAC_OSX] (select): Fix argument name.
+ * xterm.c (x_term_init):
+ * w32term.c (w32_create_terminal):
+ * term.c (init_tty): Set Vwindow_system.
+ * macterm.c (mac_create_terminal): Set a keyboard (missing piece of the
+ multi-tty merge maybe?), copied from w32term.c. Set Vwindow_system.
- * macmenu.c (enum mac_menu_kind, min_menu_id): New enumerator and
- menu ID for Apple menu.
- (menubar_selection_callback): Remove function.
- (find_and_call_menu_selection): New function from xmenu.c.
- (x_activate_menubar): Use it.
- (set_frame_menubar): Don't use f->output_data.mac->menubar_active.
+ * xfns.c (Fx_create_frame, x_create_tip_frame):
+ * w32fns.c (Fx_create_frame, x_create_tip_frame):
+ * macfns.c (Fx_create_frame):
+ Don't set the obsolete `window-system' frame-param.
- * macterm.c (menubar_selection_callback): Remove extern.
- (M_APPLE): Change to 234.
- (do_apple_menu) [!TARGET_API_MAC_CARBON]: Make non-static.
- (do_menu_choice): Remove function.
+ * frame.h (Qwindow_system): Remove.
+ * frame.c (Qwindow_system): Remove. In `syms_of_frame' as well.
+ (Fmake_terminal_frame): Don't set obsolete `window-system' frame-param.
- * macterm.h (struct mac_output): Remove member menubar_active.
- (do_menu_choice): Remove extern.
- (do_apple_menu) [!TARGET_API_MAC_CARBON]: Add extern.
+2007-10-24 Richard Stallman <rms@gnu.org>
-2006-09-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * frame.c (x_figure_window_size): For fullscreen case,
+ set USPosition | PPosition without clobbering rest of window_prompting.
- * xfns.c (syms_of_xfns): Rename x_gtk_show_chooser_help_text to
- x_gtk_file_dialog_help_text.
+ * keyboard.c (Fcurrent_idle_time): Doc fix.
- * gtkutil.c (xg_uses_old_file_dialog): Rename x-use-old-gtk-file-dialog
- to x-gtk-use-old-file-dialog.
- (xg_get_file_with_chooser): Rename x_gtk_show_chooser_help_text to
- x_gtk_file_dialog_help_text.
+ * print.c (Fwith_output_to_temp_buffer): Doc fix.
- * xfns.c (syms_of_xfns): Ditto.
+2007-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-09-18 Kim F. Storm <storm@cua.dk>
+ * process.c (unwind_request_sigio): Only define if __ultrix__.
- * window.c (Fwindow_line_visibility): Remove.
- (Fwindow_line_height): New defun replacing it.
- (syms_of_window): Defsubr it.
+ * callproc.c (child_setup): Remove spurious *.
-2006-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * lisp.h (Fget_text_property): Declare.
+ (have_menus_p): Declare it here rather than in sys-dep header files.
+ * macterm.h (have_menus_p):
+ * msdos.h (have_menus_p):
+ * xterm.h (have_menus_p): Remove.
- * mac.c (SELECT_USE_CFSOCKET) [MAC_OSX]: Set default to 1.
- [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]: Fix pointer type.
+ * data.c (Fmake_variable_buffer_local, Fmake_local_variable)
+ (Fmake_variable_frame_local): Just check the variable's const-ness
+ rather than checking nil or t.
-2006-09-17 Jay Belanger <belanger@truman.edu>
+2007-10-22 Jason Rumney <jasonr@gnu.org>
- * gmalloc.c:
- * md5.c:
- * md5.h:
- * strftime.c: Replace "GNU Library General Public License" by "GNU
- General Public License" throughout.
+ * w32fns.c: Include math.h.
+ (w32_abort): Declaration moved to nt/config.nt.
-2006-09-17 Kim F. Storm <storm@cua.dk>
+ * s/ms-w32.h (HAVE_STDLIB_H): Define.
+ (abort): Redefinition moved to nt/config.nt.
- * dispnew.c (update_text_area): Undo 2000-07-18 change.
- Always redrawing whole row if line has mouse-face in it causes
- excessive flickering of the mode line.
+ * m/windowsnt.h: Remove.
-2006-09-17 Chong Yidong <cyd@stupidchicken.com>
+2007-10-22 Juanma Barranquero <lekktu@gmail.com>
- * search.c (clear_regexp_cache): New function.
+ * emacs.c (Fdump_emacs): Fix typo in message.
+ (syms_of_emacs) <kill-emacs-hook>: Fix typo in docstring.
+ <installation-directory>: Reflow docstring.
- * syntax.c (Fmodify_syntax_entry): Clear regexp cache.
+2007-10-22 Juri Linkov <juri@jurta.org>
-2006-09-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * minibuf.c: Allow minibuffer default to be a list of default values.
+ With empty input use the first element of this list as returned default.
+ (string_to_object)
+ (read_minibuf_noninteractive): If defalt is cons, set val to its car.
+ (read_minibuf): If defalt is cons, set histstring to its car.
+ (Fread_string): If default_value is cons, set val to its car.
+ (Fread_buffer): If def is cons, use its car.
+ (Fcompleting_read): If defalt is cons, set val to its car.
- * gtkutil.c (xg_get_file_with_chooser):
- Check x-gtk-show-chooser-help-text before adding the help text.
+2007-10-21 Michael Albinus <michael.albinus@gmx.de>
- * xfns.c (syms_of_xfns): New variable: x-gtk-show-chooser-help-text.
+ * fileio.c (Fcopy_file): Call file name handler with preserve_uid_gid.
- * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
- will simply crash if we fail.
+2007-10-20 Juanma Barranquero <lekktu@gmail.com>
-2006-09-16 Richard Stallman <rms@gnu.org>
+ * doc.c (Fdocumentation): Check for advice in all cases.
- * regex.c (re_compile_pattern): Set gl_state.current_syntax_table.
+2007-10-19 Chong Yidong <cyd@stupidchicken.com>
-2006-09-15 Kim F. Storm <storm@cua.dk>
+ * Makefile.in [HAVE_LIBRESOLV]: Add -lresolv to linker flags.
- * window.c (Fwindow_line_visibility): New defun for line-move-partial.
- (syms_of_window): Defsubr it.
- (Fwindow_end): Use window's buffer rather than current buffer.
+2007-10-19 Richard Stallman <rms@gnu.org>
-2006-09-15 Jay Belanger <belanger@truman.edu>
+ * doc.c (Fdocumentation): Check for and handle an advised function.
- * COPYING: Replace "Library Public License" by "Lesser Public
- License" throughout.
+2007-10-19 Juanma Barranquero <lekktu@gmail.com>
-2006-09-15 David Kastrup <dak@gnu.org>
+ * process.c (Fset_process_filter): Doc fix.
- * Makefile.in (keymap.o): Add "keymap.h" and "window.h" dependencies.
+2007-10-18 Stefan Monnier <monnier@iro.umontreal.ca>
- * keymap.c: include "window.h".
- (Fcommand_remapping): New optional POSITION argument.
- (Fkey_binding): New optional POSITION argument. Completely rework
- handling of mouse clicks to get the same order of keymaps as
- `read-key-sequence' and heed POSITION. Also temporarily switch
- buffers to location of mouse click and back.
+ * keyboard.c (read_key_sequence): Undo a change introduced by multi-tty
+ which caused key-translation-map to applied repeatedly (thus breaking
+ double-mode).
- * keyboard.c (command_loop_1): Adjust call of `Fcommand_remapping'
- for additional argument.
- (parse_menu_item): Adjust call of `Fkey_binding' for additional
- argument.
- (read_key_sequence): If there are both `local-map' and `keymap'
- text properties at some buffer position, heed both.
+2007-10-17 Stefan Monnier <monnier@iro.umontreal.ca>
- * keymap.h: Declare additional optional arguments of
- `Fcommand_remapping' and `Fkey_binding'.
+ * xselect.c (x_own_selection, x_handle_selection_clear)
+ (x_clear_frame_selections):
+ * w32menu.c (list_of_panes, list_of_items):
+ * w32fns.c (w32_color_map_lookup, Fx_create_frame, Fx_display_list):
+ * textprop.c (validate_plist, interval_has_all_properties)
+ (interval_has_some_properties, interval_has_some_properties_list)
+ (add_properties, text_property_list):
+ * process.c (Fget_buffer_process, list_processes_1, status_notify):
+ * minibuf.c (Fassoc_string):
+ * macselect.c (x_own_selection, x_clear_frame_selections)
+ (Fx_disown_selection_internal):
+ * keymap.c (Fcommand_remapping, where_is_internal, describe_map_tree):
+ Use CONSP rather than !NILP and XC[AD]R rather than Fc[ad]r.
-2006-09-15 Juanma Barranquero <lekktu@gmail.com>
+2007-10-17 Chong Yidong <cyd@stupidchicken.com>
- * indent.c (Fcurrent_column, Findent_to): Fix typos in docstring.
+ * process.c: Link to libs for calling res_init() if available.
+ (Fmake_network_process): Call res_init() before getaddrinfo or
+ gethostbyname, if possible.
-2006-09-14 Andreas Schwab <schwab@suse.de>
+2007-10-17 Stefan Monnier <monnier@iro.umontreal.ca>
- * print.c: Whitespace fixup.
+ * lread.c (read1): Set pvectype for char_tables.
-2006-09-14 Kim F. Storm <storm@cua.dk>
+ * lisp.h (XMISCANY, XMARKER, XINTFWD, XBOOLFWD, XOBJFWD, XOVERLAY)
+ (XBUFFER_OBJFWD, XBUFFER_LOCAL_VALUE, XKBOARD_OBJFWD, XSAVE_VALUE):
+ Add type checks.
+ (SOME_BUFFER_LOCAL_VALUEP, GC_SOME_BUFFER_LOCAL_VALUEP): Remove.
- * xdisp.c (produce_image_glyph): Automatically crop wide images at
- right window edge so we can draw the cursor on the same row to
- avoid confusing redisplay by placing the cursor outside the visible
- window area.
+ * alloc.c (free_misc): Use XMISCTYPE.
+ (live_misc_p, gc_sweep): Use Lisp_Misc_Any.
-2006-09-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-10-17 Glenn Morris <rgm@gnu.org>
- * xterm.c (x_initialize): Don't install Xt event timer here.
- (x_timeout_atimer_activated_flag): New var.
- (x_activate_timeout_atimer): New function to install Xt timer.
- (x_send_scroll_bar_event, x_process_timeouts): Use it.
+ * minibuf.c (Qcompletion_ignore_case): New Lisp_Object.
+ (syms_of_minibuf): Add Qcompletion_ignore_case.
+ * dired.c (Qcompletion_ignore_case): Change to external.
+ (syms_of_dired) [VMS]: Remove Qcompletion_ignore_case.
+ * fileio.c (Qcompletion_ignore_case): New external Lisp_Object.
+ (Fread_file_name): Use it rather than intern'ing.
- * xmenu.c (x_menu_set_in_use, popup_activate_callback)
- (create_and_show_popup_menu, create_and_show_dialog): Use it.
+ * coding.c (Qcompletion_ignore_case): New external Lisp_Object.
+ (Fread_coding_system): Ignore case of user input.
- * xterm.h (x_activate_timeout_atimer): Add prototype.
+2007-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2006-09-13 Richard Stallman <rms@gnu.org>
+ * xdisp.c (handle_display_prop): Ignore display specs after
+ replacing one when string text is being replaced.
+ (handle_single_display_spec): Pretend as if characters with display
+ property haven't been consumed only when buffer text is being replaced.
- * print.c (print_string): When printcharfun is t,
- copy string contents and call strout on the copy.
+2007-10-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xfns.c (Fx_create_frame, Fx_display_list):
+ * window.c (window_fixed_size_p, enlarge_window)
+ (shrink_window_lowest_first):
+ * macterm.c (init_font_name_table):
+ * macfns.c (Fx_create_frame, Fx_display_list):
+ * lread.c (close_load_descs):
+ * keyboard.c (read_char_x_menu_prompt):
+ * fns.c (Fmember, Fmemql, Fdelete, Fset_char_table_parent):
+ * coding.c (code_convert_region_unwind): Test the type of an object
+ rather than just !NILP before extracting data from it.
+
+ * alloc.c (Fpurecopy): Set the pvec tag on pseudo vectors.
+
+ * lisp.h (enum Lisp_Misc_Type): Del Lisp_Misc_Some_Buffer_Local_Value.
+ (XMISCANY): New macro.
+ (XMISCTYPE): Use it.
+ (struct Lisp_Misc_Any): New type.
+ (union Lisp_Misc): Use it.
+ (struct Lisp_Buffer_Local_Value): Add `local_if_set' bit.
+ * data.c (Fboundp, store_symval_forwarding, swap_in_global_binding)
+ (find_symbol_value, set_internal, default_value, Fset_default)
+ (Fmake_variable_buffer_local, Fmake_local_variable)
+ (Fkill_local_variable, Fmake_variable_frame_local, Flocal_variable_p)
+ (Flocal_variable_if_set_p, Fvariable_binding_locus):
+ The SOME_BUFFER_LOCAL_VALUEP distinction is replaced by local_if_set.
+ * alloc.c (allocate_buffer): Set the size and tag.
+ (allocate_misc, mark_maybe_object, mark_object, survives_gc_p):
+ Use XMISCANY.
+ (die): Follow the GNU convention for error messages.
+ * print.c (print_object): SOME_BUFFER_LOCAL_VALUEP -> local_if_set.
+ * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Don't set the
+ tag any more.
+ (set_buffer_internal_1):
+ * frame.c (store_frame_param):
+ * eval.c (specbind):
+ * xdisp.c (select_frame_for_redisplay): Drop SOME_BUFFER_LOCAL_VALUEP.
- * keyboard.c (read_char): If end_time specified, don't put the
- event into this_command_keys.
- (read_key_sequence): If Voverriding_terminal_local_map is specified,
- don't check Voverriding_local_map at all.
+ * doc.c (Fsnarf_documentation): Simplify.
-2006-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-10-14 Juanma Barranquero <lekktu@gmail.com>
- * textprop.c (Fnext_property_change, Fnext_single_property_change)
- (Fprevious_property_change, Fprevious_single_property_change):
- Avoid changing limit, so we can correctly catch the case where the
- property is constant up to limit.
+ * w32term.c (w32_font_is_double_byte, my_create_scrollbar): Make static.
+ (syms_of_w32term) <w32-enable-unicode-output>: Fix typo in docstring.
-2006-09-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-10-14 Stefan Monnier <monnier@iro.umontreal.ca>
- * macfns.c (mac_window) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
- * macterm.c (XTread_socket) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
- Undo 2006-09-08 change.
+ * buffer.c (Fmake_indirect_buffer): Set the buffer's tag.
-2006-09-11 Chong Yidong <cyd@stupidchicken.com>
+2007-10-14 Juanma Barranquero <lekktu@gmail.com>
- * keymap.c (Fkey_binding): Use string position for string objects.
+ * eval.c (do_autoload): Don't save autoloads.
-2006-09-11 Kim F. Storm <storm@cua.dk>
+ * data.c (Ffset): Save autoload of the function being set.
- * keymap.c (Fkey_binding): Fix last change.
+2007-10-07 John Paul Wallington <jpw@pobox.com>
- * editfns.c (Fmessage): Recommend using (message "%s" ...).
+ * xfns.c (x_create_tip_frame): Set the `display-type' frame
+ parameter before setting up faces.
-2006-09-10 Chong Yidong <cyd@stupidchicken.com>
+2007-10-13 Eli Zaretskii <eliz@gnu.org>
- * keymap.c (Fkey_binding): Check for local keymap for mouse click
- events.
+ * ccl.c (Fregister_code_conversion_map):
+ * keyboard.c (append_tool_bar_item): Reformat last change.
-2006-09-10 Kim F. Storm <storm@cua.dk>
+ * lisp.h (eabs): Rename from `abs'. All callers changed.
- * keyboard.c (Finput_pending_p): Check Vunread_input_method_events
- and Vunread_post_input_method_events.
+2007-10-05 Dmitry Antipov <dmantipov@yandex.ru>
- * dispnew.c (Fredisplay): Document return value.
+ * buffer.c (add_overlay_mod_hooklist):
+ * ccl.c (Fregister_ccl_program, Fregister_code_conversion_map):
+ * fontset.c (make_fontset):
+ * keyboard.c (GROW_RAW_KEYBUF, menu_bar_items, menu_bar_item)
+ (append_tool_bar_item):
+ * macmenu.c (grow_menu_items):
+ * w32menu.c (grow_menu_items):
+ * xmenu.c (grow_menu_items): Use larger_vector.
-2006-09-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-10-13 Eli Zaretskii <eliz@gnu.org>
- * xfns.c (Fx_close_connection): Call xg_display_close when USE_GTK.
+ * msdos.c (dos_rawgetc): Undo last change (there's no ``leaving
+ selected frame'' on MSDOS).
- * gtkutil.c (xg_display_close): Always change default display if needed,
- check for < Gtk+ version 2.10 before calling gdk_display_close.
+2007-10-10 Patrick Mahan <mahan@mahan.org> (tiny change)
-2006-09-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * macfns.c (x_create_tip_frame): Set terminal for frame.
- * mac.c [MAC_OSX] (sys_select): Check argument `nfds' more rigidly.
- Make variable `ofds' static. Remove variable `maxfd'.
+2007-10-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * macfns.c (Fx_file_dialog): Remove unused variable `f'.
- Call check_mac.
+ * frame.c (Qenvironment): Remove.
+ (syms_of_frame) <Qenvironment>: Don't initialize.
+ (Fdelete_frame): Don't treat the `environment' param specially.
+ * frame.h (Qenvironment): Don't declare.
+ * callproc.c (set_initial_environment): Don't set unused frame param.
- * macmenu.c (Vmenu_updating_frame, syms_of_macmenu):
- * w32menu.c (Vmenu_updating_frame, syms_of_w32menu):
- Apply 2006-09-08 change for xmenu.c.
+ * frame.c (Fframe_with_environment): Remove.
+ (syms_of_frame) <Sframe_with_environment>: Don't declare.
- * xfns.c (Fx_file_dialog): Call check_x.
+ * lisp.h (Fframe_with_environment): Don't declare.
-2006-09-10 Kim F. Storm <storm@cua.dk>
+2007-10-10 Juanma Barranquero <lekktu@gmail.com>
- * xdisp.c (get_window_cursor_type): Use hollow cursor on
- non-transparent images.
+ * indent.c (indent_tabs_mode, last_known_column)
+ (last_known_column_modified): Make static.
+ (syms_of_indent) <indent-tabs-mode>: Remove redundant info in docstring.
-2006-09-09 Eli Zaretskii <eliz@gnu.org>
+2007-10-10 Katsumi Yamaoka <yamaoka@jpl.org>
- * editfns.c (Fsystem_name): Mention "host" in the doc string.
- (syms_of_editfns) <system-name>: Likewise.
+ * puresize.h (BASE_PURESIZE): Increase to 1170000.
-2006-09-08 Martin Rudalics <rudalics@gmx.at>
+2007-10-09 Richard Stallman <rms@gnu.org>
- * xdisp.c (mouse_autoselect_window): Remove.
- (Vmouse_autoselect_window): New variable. DEFVAR_LISP it.
+ * xdisp.c (handle_invisible_prop): After setting up an ellipsis,
+ return HANDLED_RETURN.
- * dispextern.h (mouse_autoselect_window): Remove extern.
- (Vmouse_autoselect_window): Add extern.
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
- * macterm.c (XTread_socket): Test Vmouse_autoselect_window
- instead of mouse_autoselect_window.
+ * keyboard.c (kbd_buffer_get_event): Break loop waiting for input
+ when there's an unread command event.
+ * frame.c (focus_follows_mouse): Move here from frame.el to allow
+ window autoselection act appropriately when leaving selected frame.
+ (syms_of_frame): Initialize focus_follows_mouse.
+ * frame.h (focus_follows_mouse): Extern it.
+ * macterm.c (XTread_socket): When focus_follows_mouse is nil
+ make SELECT_WINDOW_EVENT only if we don't leave the selected frame.
* msdos.c (dos_rawgetc): Likewise.
-
* w32term.c (w32_read_socket): Likewise.
-
* xterm.c (handle_one_xevent): Likewise.
+ * xdisp.c (syms_of_xdisp): In doc-string of
+ mouse-autoselect-window mention focus-follows-mouse.
-2006-09-08 Richard Stallman <rms@gnu.org>
-
- * xdisp.c (Vmenu_updating_frame): Define here.
- (syms_of_xdisp): DEFVAR it here.
- (update_menu_bar): Always return hooks_run.
- Set Vmenu_updating_frame.
-
- * xdisp.c (redisplay_internal): Test Vinhibit_redisplay
- before calculating SELECTED_FRAME.
-
- * xmenu.c (Vmenu_updating_frame): Don't define here.
- (syms_of_xmenu): Don't DEFVAR it here.
-
- * xterm.c (x_error_quitter): For BadName error, just return.
-
- * eval.c (find_handler_clause): Give up on debugger if INPUT_BLOCKED_P.
-
- * casetab.c (init_casetab_once): Call set_case_table.
-
- * emacs.c (shut_down_emacs): Set inhibit_sentinels.
-
- * process.c (inhibit_sentinels): New variable.
- (exec_sentinel): Test inhibit_sentinels.
- (init_process): Initialize it.
-
- * process.h (inhibit_sentinels): Add decl.
-
- * search.c (looking_at_1, string_match_1, search_command):
- Make syntax table's canon table point to eqv table.
-
-2006-09-08 Andreas Schwab <schwab@suse.de>
-
- * print.c (strout): Fix whitespace.
-
-2006-09-08 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (x_draw_glyph_string): Fix 2006-08-24 change.
-
-2006-09-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c [!MAC_OSX]: Don't include keyboard.h.
- [!MAC_OSX] (select): Try detect_input_pending before ReceiveNextEvent
- in the same BLOCK_INPUT block, in case that some input has already
- been read asynchronously. Pretend to be interrupted by a signal
- if some input is available.
- [MAC_OSX] (select_and_poll_event, sys_select): Likewise.
- (SELECT_POLLING_PERIOD_USEC) [SELECT_USE_CFSOCKET]: Change to 100000.
- Now used for ReceiveNextEvent timeout instead of select timeout.
- (EVENT_CLASS_SOCK) [SELECT_USE_CFSOCKET]: Remove macro.
- [SELECT_USE_CFSOCKET] (socket_callback): Add non-blocking connect
- support. Quit event loop.
- [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]: Add non-blocking
- connect support. Reuse previously allocated CFRunLoopSource.
- (Fmac_process_hi_command) [TARGET_API_MAC_CARBON]: New function.
- (syms_of_mac) [TARGET_API_MAC_CARBON]: Defsubr it.
-
- * macfns.c (mac_window) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
- Specify kWindowAsyncDragAttribute.
-
- * macterm.c (mac_handle_origin_change, mac_handle_size_change)
- (mac_get_ideal_size): New functions.
- (x_set_offset, x_set_window_size, x_make_frame_visible)
- (do_zoom_window, mac_handle_window_event, XTread_socket): Use them.
- (install_window_handler, mac_handle_window_event)
- [USE_CARBON_EVENTS]: Handle kEventWindowGetIdealSize and
- kEventWindowBoundsChanged.
- (XTread_socket) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: Don't call
- DragWindow.
-
-2006-09-07 Andreas Schwab <schwab@suse.de>
-
- * m/ibms390x.h (START_FILES, LIB_STANDARD): Override to
- use lib64 instead of lib.
-
-2006-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * Makefile.in: Avoid double quotes when possible.
-
-2006-09-06 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Fformat_time_string): Use make_unibyte_string to make
- a Lisp string from the result of emacs_memftimeu call.
-
-2006-09-06 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (pos_visible_p): Remove exact_mode_line_heights_p arg;
- so calculate heights even when pos-visible-in-window-p is called
- with partially = t. Don't overshoot last_visible_y in move_it_to.
- Return row height and row number in new rowh and vpos args.
- (cursor_row_fully_visible_p): First line is always "fully visible".
- (try_window): Don't clear matrix if vscrolled.
-
- * lisp.h (pos_visible_p): Update prototype.
-
- * window.c (Fpos_visible_in_window_p): Adapt to new pos_visible_p.
- Return row height and row number for partially visible rows.
- Modify return value to a 2 element list for fully visible rows and
- 6 for partially visible row.
- (window_scroll_pixel_based): Use pos_visible_p directly instead of
- Fpos_visible_in_window_p. Fix auto vscrolling for partially
- visible lines. Only vscroll backwards if already vscrolled
- forwards. Unconditionally vscroll forwards if PT is first (and
- only) line. Set new window start instead of scrolling at
- start/end of tall line.
-
-2006-09-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (install_window_handler, mac_handle_window_event)
- [USE_CARBON_EVENTS]: Handle kEventWindowClose.
- [USE_MAC_TSM] (mac_handle_text_input_event): Set modifiers for
- ASCII keystroke event.
-
-2006-09-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
- the file chooser message. Only call gtk_file_chooser_set_current_name
- when action is SAVE.
-
-2006-09-04 Andreas Schwab <schwab@suse.de>
-
- * Makefile.in: Double all single and back quotes in C-style
- comments to help fontifier.
-
-2006-09-03 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (shutdown_handler): New function to exit cleanly on shutdown.
- (globals_of_w32): Register it as a signal handler.
-
-2006-09-02 Juri Linkov <juri@jurta.org>
-
- * marker.c (Fmarker_position): Doc fix.
-
-2006-09-03 Eli Zaretskii <eliz@gnu.org>
-
- * window.c (syms_of_window) <split-height-threshold>:
- <window-min-height, window-min-width>: Doc fix.
-
-2006-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
- for writing files. Call gtk_file_chooser_set_current_name to keep
- default filename.
-
- * minibuf.c (Finternal_complete_buffer): Move after DEFUN:s it calls
-
-2006-09-02 Jindrich Makovicka <makovick@gmail.com> (tiny change)
-
- * fns.c (concat) [__GNUC__]: Declare with
- `__attribute__((noinline))'.
-
- * eval.c (apply1, call2) [__GNUC__]: Declare with
- `__attribute__((noinline))'.
-
-2006-09-02 Stuart D. Herring <herring@lanl.gov>
-
- * minibuf.c (Finternal_complete_buffer): New function.
- (syms_of_minibuf): Defsubr it.
- (Fread_buffer): Use it, instead of Vbuffer_alist.
-
-2006-09-01 Martin Rudalics <rudalics@gmx.at>
-
- * buffer.h (struct buffer_text): New field chars_modiff.
- (CHARS_MODIFF, BUF_CHARS_MODIFF): New macros.
- * buffer.c (Fbuffer_chars_modified_tick): New function returning
- value of BUF_CHARS_MODIFF.
- (syms_of_buffer): Defsubr it.
- (Fget_buffer_create): Initialize BUF_CHARS_MODIFF.
- * insdel.c (modify_region): New argument preserve_chars_modiff.
- Set CHARS_MODIFF to MODIFF provided preserve_chars_modiff is zero.
- (insert_1_both, insert_from_string_1, insert_from_buffer_1)
- (adjust_after_replace, adjust_after_replace_noundo)
- (replace_range, replace_range_2, del_range_2): Reset CHARS_MODIFF.
- * lisp.h (modify_region): Add fourth argument in extern.
- * casefiddle.c (casify_region): Call modify_region with fourth
- argument zero to assert that CHARS_MODIFF is updated.
- * editfns.c (Fsubst_char_in_region, Ftranslate_region_internal)
- (Ftranspose_regions): Likewise.
- * textprop.c (Fadd_text_properties, Fset_text_properties)
- (Fremove_text_properties, Fremove_list_of_text_properties):
- Call modify_region with fourth argument 1 to avoid that
- CHARS_MODIFF is updated.
-
-2006-08-31 Richard Stallman <rms@gnu.org>
-
- * editfns.c (Fformat): Don't sign-extend for %o or %x.
-
-2006-08-29 Chong Yidong <cyd@stupidchicken.com>
-
- * indent.c (Fvertical_motion): Don't move back if we were
- displaying a Lisp string, either.
-
-2006-08-28 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_window_cursor_type) [!HAVE_WINDOW_SYSTEM]:
- Don't attempt to replace cursor on image glyphs.
-
-2006-08-28 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Fdetect_coding_region, Fdetect_coding_string):
- Fix docstring about ISO-2022 control characters.
-
-2006-08-28 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_window_cursor_type): Replace BOX cursor on images
- with a hollow box cursor if image is larger than 32x32 (or the default
- frame font if that is bigger). Replace any other cursor on images
- with hollow box cursor, as redisplay doesn't support bar and hbar
- cursors on images.
-
-2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Undo previous
- change. Move mutex lock/unlock operations inside BLOCK_INPUT.
-
- * dired.c (directory_files_internal_unwind, directory_files_internal)
- (file_name_completion): Add BLOCK_INPUT around opendir/closedir.
-
- * image.c [MAC_OS] (image_load_qt_1): Use ComponentResult instead
- of OSErr.
-
- * keyboard.c (in_sighandler): Remove variable.
- (Fcurrent_idle_time): Add missing `doc:'.
- (input_available_signal, init_keyboard): Undo previous change.
-
- * keyboard.h (in_sighandler): Remove extern.
-
- * mac.c (create_apple_event_from_event_ref, select)
- (Fmac_get_file_creator, Fmac_get_file_type, Fmac_set_file_creator)
- (Fmac_set_file_type, cfstring_create_normalized)
- (mac_get_system_locale, select_and_poll_event, sys_select):
- Use OSStatus instead of OSErr.
-
- * macfns.c [TARGET_API_MAC_CARBON] (mac_update_proxy_icon):
- Don't use FRAME_FILE_NAME. Use (FS)UpdateAlias.
- (Fx_create_frame): Apply 2006-07-03 for xfns.c.
-
- * macselect.c (get_scrap_from_symbol, clear_scrap, put_scrap_string)
- (put_scrap_private_timestamp, scrap_has_target_type, get_scrap_string)
- (get_scrap_private_timestamp, get_scrap_target_type_list)
- (x_own_selection, x_get_foreign_selection)
- (Fx_disown_selection_internal, Fx_selection_owner_p)
- (Fx_selection_exists_p): Use OSStatus instead of OSErr.
-
- * macterm.c (mac_draw_string_common, mac_query_char_extents)
- (x_iconify_frame, XLoadQueryFont, install_window_handler)
- (mac_handle_command_event, init_command_handler, init_menu_bar):
- Use OSStatus instead of OSErr.
- (x_free_frame_resources) [TARGET_API_MAC_CARBON]: Don't use
- FRAME_FILE_NAME.
- (x_query_font): Apply 2006-08-04 change for xterm.c.
- (Qhi_command): Rename from Qhicommand. All uses changed.
-
- * macterm.h (struct mac_output) [TARGET_API_MAC_CARBON]: Remove member
- file_name.
- (FRAME_FILE_NAME): Remove macro.
- (install_window_handler, create_apple_event_from_event_ref):
- Return OSStatus instead of OSErr.
-
-2006-08-26 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (Fset_buffer_multibyte):
- * editfns.c (Fcurrent_time, Fget_internal_run_time):
- * macfns.c (Fxw_color_values):
- * w32fns.c (Fxw_color_values):
- * xfns.c (Fxw_color_values): Simplify; use list3.
-
- * fileio.c (Fmake_directory_internal, Fdelete_directory)
- (Fdelete_file): Simplify; use list1.
- (Frename_file, Fadd_name_to_file, Fmake_symbolic_link):
- Simplify; remove NO_ARG_ARRAY stuff, use list2.
-
-2006-08-25 Richard Stallman <rms@gnu.org>
-
- * buffer.c (Fswitch_to_buffer): Fix previous change.
-
-2006-08-25 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (Fcurrent_idle_time): Simplify.
-
-2006-08-25 Richard Stallman <rms@gnu.org>
-
- * fns.c (sxhash_string): Rotate properly; don't lose bits.
-
-2006-08-24 Francesc Rocher <francesc.rocher@gmail.com>
-
- * xdisp.c (overline_margin): New variable.
- (x_produce_glyphs): Use it.
- (syms_of_xdisp): DEFVAR_INT it.
-
- * xterm.c (x_underline_at_descent_line): New variable.
- (syms_of_xterm): DEFVAR_BOOL it.
- (x_draw_glyph_string): Use it.
- Draw underline and overline up to the end of line if the face
- extends to the end of line.
-
- * macterm.c: Likewise.
-
- * w32term.c: Likewise.
-
-2006-08-24 Nick Roberts <nickrob@snap.net.nz>
-
- * buffer.c (Fswitch_to_buffer): Move buffer to front of
- buffer-alist if necessary.
-
-2006-08-22 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (update_tool_bar): Redisplay toolbar also when only
- number of items changes.
-
-2006-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * buffer.c (Fset_buffer_multibyte): Record proper undo entry.
-
-2006-08-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c: Clarify difference between in_sighandler and
- handling_signal.
-
-2006-08-21 Kim F. Storm <storm@cua.dk>
-
- * macterm.c (x_draw_stretch_glyph_string):
- * w32term.c (x_draw_stretch_glyph_string):
- * xterm.c (x_draw_stretch_glyph_string): It is ok to draw a
- stretch glyph in left marginal areas on header and mode lines.
-
-2006-08-21 Kenichi Handa <handa@m17n.org>
-
- * keyboard.c (syms_of_keyboard): Docstring of
- Vunread_post_input_method_events and Vunread_input_method_events
- fixed.
-
-2006-08-20 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (show_help_echo): Preserve mouse movement flag if
- tracking mouse.
-
-2006-08-20 Richard Stallman <rms@gnu.org>
-
- * xfaces.c (load_pixmap): Add quotes in error message.
-
- * keyboard.c (Fcurrent_idle_time): New function.
- (syms_of_keyboard): defsubr it.
-
-2006-08-18 Nick Roberts <nickrob@snap.net.nz>
-
- * window.c (Fset_window_fringes): Do nothing on a tty.
- (Fwindow_fringes): Put ? operator after the line break.
-
-2006-08-16 Andreas Schwab <schwab@suse.de>
-
- * print.c (debug_output_compilation_hack): Fix return type.
-
-2006-08-16 Richard Stallman <rms@gnu.org>
-
- * print.c (debug_output_compilation_hack): New function.
-
-2006-08-16 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (choose_write_coding_system): Use LF for end-of-line
- in auto-saving.
-
-2006-08-15 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (read_char): Don't change idle timer state at all if
- end_time is supplied.
-
-2006-08-15 Kenichi Handa <handa@m17n.org>
-
- * coding.c (ONE_MORE_BYTE_CHECK_MULTIBYTE): New arg RET. If SRC
- is exhausted, return with RET.
- (detect_coding_emacs_mule, detect_coding_iso2022)
- (detect_coding_sjis, detect_coding_big5, detect_coding_utf_8)
- (detect_coding_utf_16, detect_coding_ccl): Adjusted for the above
- change.
-
-2006-08-14 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (read_char): Don't reset idle timers if a time limit
- is supplied.
-
-2006-08-14 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (pitx): Print iterator position.
- Limit stack dump in case iterator is not initialized.
-
-2006-08-12 Eli Zaretskii <eliz@gnu.org>
-
- * frame.c (Fmouse_position, Fmouse_pixel_position)
- (Fset_mouse_position, Fset_mouse_pixel_position): Doc fix.
-
-2006-08-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (Fx_register_dnd_atom): New function.
- (syms_of_xselect): Defsubr it.
- (x_handle_dnd_message): Check that message_type is in
- dpyinfo->x_dnd_atoms before generating lisp event.
-
- * xterm.h (struct x_display_info): Add x_dnd_atoms* to keep track
- of drag and drop Atoms.
-
- * xterm.c (x_term_init): Initialize dpyinfo->x_dnd_atoms*
-
-2006-08-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c: Define in_sighandler.
- (input_available_signal): Set in_sighandler.
- (init_keyboard): Initialize in_sighandler.
-
- * keyboard.h: Declare in_sighandler.
-
- * alloc.c (UNBLOCK_INPUT_ALLOC, BLOCK_INPUT_ALLOC): Use in_sighandler
- to check if mutex should be locked or not.
-
-2006-08-09 Richard Stallman <rms@gnu.org>
-
- * keyboard.c (keyremap_step): No-op if fkey->parent = nil.
- (read_key_sequence): Always start fkey.start and fkey.end at 0,
- and likewise for keytran.
-
-2006-08-09 Kenichi Handa <handa@m17n.org>
-
- * coding.c (syms_of_coding): Improve the docstring
- of file-coding-system-alist.
-
-2006-08-07 Andreas Schwab <schwab@suse.de>
-
- * puresize.h (BASE_PURESIZE): Increase to 1120000.
-
-2006-08-06 Chong Yidong <cyd@stupidchicken.com>
-
- * buffer.c (Vchange_major_mode_hook, Qchange_major_mode_hook): New vars.
- (Fkill_all_local_variables): Use it.
- (syms_of_buffer): Defvar it.
-
-2006-08-05 Eli Zaretskii <eliz@gnu.org>
-
- * w32.c (w32_valid_pointer_p): New function.
-
- * w32.h: Add prototype for w32_valid_pointer_p.
-
- * alloc.c: Include w32.h.
- (valid_lisp_object_p) [WINDOWSNT]: Call w32_valid_pointer_p to do
- the job.
-
- * keyboard.c (kbd_buffer_get_event): Return Qnil when current time
- is exactly equal to end_time, not only when it is past that.
-
-2006-08-04 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (read_char): Rebalance specpdl after receiving jump.
-
- * process.c: Reapply 2006-08-01 change.
-
-2006-08-04 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (w32_query_font): Fix last change: use stricmp.
-
-2006-08-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * editfns.c (Fsubst_char_in_region): Redo the setup work after running
- the before-change-functions since they may have altered the buffer.
-
-2006-08-04 Ralf Angeli <angeli@caeruleus.net>
-
- * w32fns.c (w32_createwindow): Handle -geometry command line option
- and the geometry settings in the Registry.
-
-2006-08-04 Kenichi Handa <handa@m17n.org>
-
- * w32fns.c (w32_query_font): Compare names by ignoring case.
-
- * xterm.c (x_query_font): Compare names by ignoring case.
-
-2006-08-03 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (w32_menu_show, w32_dialog_show): Call Fsignal to quit
- when no option selected.
-
-2006-08-03 Chong Yidong <cyd@stupidchicken.com>
-
- * process.c: Revert last change.
-
-2006-08-01 Kim F. Storm <storm@cua.dk>
-
- * process.c (wait_reading_process_output_unwind): New function.
- Restores waiting_for_user_input_p to saved value.
- (wait_reading_process_output): Unwind protect waiting_for_user_input_p
- instead of save/restore old value on stack.
-
-2006-07-30 Thien-Thi Nguyen <ttn@gnu.org>
-
- * editfns.c: Undo 2006-06-27 change.
-
-2006-07-29 Eli Zaretskii <eliz@gnu.org>
-
- * coding.c (Ffind_operation_coding_system): Revert the change from
- 2006-05-29.
-
- * alloc.c [WINDOWSNT]: Include fcntl.h, to fix last change.
-
-2006-07-28 Richard Stallman <rms@gnu.org>
-
- * xfaces.c (lookup_named_face, Fdisplay_supports_face_attributes_p):
- Add conditional aborts for clarity.
-
- * xdisp.c (update_menu_bar): New arg HOOKS_RUN. Callers changed.
- Used to avoid running the hooks over and over for each frame.
- (prepare_menu_bars): Pass value from update_menu_bar
- as HOOKS_RUN of next call.
-
- * keyboard.c (safe_run_hooks_1): Don't crash if Vrun_hooks is nil.
-
-2006-07-28 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (valid_pointer_p): New function (from valid_lisp_object_p).
- (valid_lisp_object_p): Use it to check for valid SUBRP obj.
-
-2006-07-26 Chong Yidong <cyd@stupidchicken.com>
-
- * keyboard.c (read_char): New arg END_TIME specifying timeout.
- All callers changed. Turn off echoing if END_TIME is non-NULL.
- (kbd_buffer_get_event): New arg END_TIME.
-
- * lread.c (read_filtered_event): New arg SECONDS to wait until.
- (Fread_char, Fread_event, Fread_char_exclusive): New arg SECONDS.
-
- * lisp.h: Update read-char, read-event, and read_filtered_event
- prototypes.
-
- * keyboard.h: Include systime.h. Update read_char prototype.
-
-2006-07-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * alloc.c (find_string_data_in_pure): New function.
- (make_pure_string): Use it to reuse existing string data if possible.
-
- * puresize.h (BASE_PURESIZE): Decrease to 1102000.
-
-2006-07-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (Fdefine_key): If the key binding definition looks like an
- XEmacs-style key sequence, convert it to Emacs's format.
-
-2006-07-22 Ralf Angeli <angeli@caeruleus.net>
-
- * w32fns.c (w32_createwindow): If `left' and/or `top' frame
- parameters are bound to some values, use that instead of
- CW_USEDEFAULT.
-
-2006-07-21 Eli Zaretskii <eliz@gnu.org>
-
- * w32.c (convert_time): Use explicit long double constants to
- ensure long double arithmetics is used throughout.
-
-2006-07-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): New vars.
- (init_alloc_once): Initialize them.
- (pure_alloc): Allocate non-Lisp objects from the end of pure storage
- without alignment.
-
- * puresize.h (BASE_PURESIZE): Decrease to 1141000.
-
-2006-07-18 Francis Litterio <franl@world.std.com>
-
- * w32term.c (x_calc_absolute_position): Fix frame positioning
- with negative X/Y coordinates.
-
-2006-07-18 Dan Nicolaescu <dann@ics.uci.edu>
-
- * xterm.c (x_connection_closed, x_error_quitter): Mark as NO_RETURN.
-
- * textprop.c (text_read_only): Likewise.
-
- * lread.c (end_of_file_error): Likewise.
-
- * lisp.h (circular_list_error, memory_full, buffer_memory_full):
- Likewise.
-
- * eval.c (unwind_to_catch): Likewise.
-
- * buffer.h (buffer_slot_type_mismatch): Likewise.
-
-2006-07-18 Kim F. Storm <storm@cua.dk>
-
- Cleanup Fsignal calls that never returns; now only use it for Qquit.
-
- * eval.c (xsignal): New func. Like Fsignal, but marked no-return.
- (xsignal0, xsignal1, xsignal2, xsignal3): New no-return functions.
- (signal_error): New no-return function (from xfaces.c).
- (Fthrow): Use xsignal2 instead of Fsignal + abort.
- (error): Use xsignal1 instead of Fsignal + abort.
- (FletX, Flet, grow_specpdl): Use signal_error.
- (Feval, Ffuncall, funcall_lambda): Use xsignal1, xsignal2.
-
- * alloc.c (buffer_memory_full, memory_full): Use xsignal. Remove loop.
- (list1): New function.
-
- * lisp.h (list1): Add EXFUN.
- (xsignal, xsignal0, xsignal1, xsignal2, xsignal3, signal_error):
- Add prototypes. Mark them as no-return.
-
- * buffer.c (Fbuffer_local_value, Fbarf_if_buffer_read_only):
- Use xsignal1.
-
- * callint.c (check_mark): Use xsignal0.
-
- * casefiddle.c (casify_object): wrong_type_argument is no-return.
-
- * cmds.c (Fforward_char, Fdelete_char): Use xsignal0.
-
- * coding.c (Fcheck_coding_system): Use xsignal1. Remove loop.
- (Fdefine_coding_system_internal): Use xsignal1.
-
- * data.c (circular_list_error): Use xsignal.
- (wrong_type_argument): Use xsignal2. Don't care about return value.
- (args_out_of_range, args_out_of_range_3): Use xsignal2, xsignal3.
- Remove loop around Fsignal.
- (indirect_variable, Fsymbol_value, set_internal, Fdefault_value)
- (indirect_function, Findirect_function, Fstring_to_number)
- (Fmakunbound, Ffmakunbound, Fsymbol_function, Ffset): Use xsignal1.
- (arith_driver, float_arith_driver, Frem, Fmod, arith_error):
- Use xsignal0.
-
- * doc.c (Fdocumentation): Use xsignal1.
-
- * editfns.c (region_limit, Fget_internal_run_time): Use xsignal0.
-
- * fileio.c (report_file_error): Use xsignal.
- (barf_or_query_if_file_exists, Fcopy_file, Fdelete_file)
- (Finsert_file_contents): Use xsignal2.
- (syms_of_fileio): Use list2, list3.
-
- * floatfns.c (arith_error, range_error, domain_error): Use xsignal2.
- (range_error2, domain_error2): Use xsignal3.
- (rounding_driver, fmod_float): Use xsignal0.
- (float_error): Use xsignal1.
- (matherr): Use xsignal.
-
- * fns.c (Flength): wrong_type_argument is no-return.
- (hashfn_user_defined, Fmake_hash_table): Use signal_error.
- (Fmd5): Use xsignal1.
-
- * frame.c (x_set_line_spacing, x_set_screen_gamma): Use signal_error.
-
- * keyboard.c (recursive_edit_1): Use xsignal1.
-
- * keymap.c (Fmap_keymap): Use xsignal1.
-
- * lread.c (Fload): Use xsignal2, signal_error.
- (end_of_file_error): Use xsignal0, xsignal1.
- (read0): Use xsignal1.
- (invalid_syntax): New error function marked no-return.
- (read_integer, read1, read_list): Use it.
-
- * macselect.c (x_get_local_selection): Use signal_error.
-
- * msdos.c (Fmsdos_set_mouse_buttons): Use xsignal2.
-
- * search.c (compile_pattern_1): Use xsignal1.
- (signal_failure): Remove (was only called once).
- (search_command): Use xsignal1 instead of signal_failure.
-
- * syntax.c (scan_lists): Use xsignal3.
-
- * textprop.c (text_read_only): Use xsignal0, xsignal1.
-
- * unexsol.c (unexec): Use xsignal.
-
- * window.c (window_scroll_pixel_based, window_scroll_line_based):
- Use xsignal0.
-
- * xfaces.c (signal_error): Move to eval.c.
- (resolve_face_name): Use xsignal1.
-
- * xfns.c (x_decode_color): Use signal_error.
-
- * xselect.c (x_get_local_selection, copy_multiple_data)
- (x_get_window_property_as_lisp_data)
- (lisp_data_to_selection_data, CHECK_CUT_BUFFER)
- (Fx_get_cut_buffer_internal): Use signal_error.
-
-2006-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (XTread_socket): Undo previous change.
-
-2006-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (keycode_to_xkeysym): Remove function. All uses now
- directly lookup keycode_to_xkeysym_table.
- [USE_MAC_TSM] (mac_handle_text_input_event): Don't construct
- ASCII_KEYSTROKE_EVENT for non-zero keycode_to_xkeysym_table entries.
- (XTread_socket): Use character codes to construct keypad key events.
- (mac_initialize_display_info) [MAC_OSX]: Use CGDisplaySamplesPerPixel.
- (x_delete_display): Apply 2006-07-04 change for xterm.c.
-
-2006-07-17 Richard Stallman <rms@gnu.org>
-
- * keyboard.c (Vcommand_error_function): New variable.
- (syms_of_keyboard): Defvar it.
- (cmd_error_internal): Simplify, and handle Vcommand_error_function.
-
- * dispnew.c (init_display): Mention DISPLAY as well as TERM in err msg.
-
-2006-07-17 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (handle_single_display_spec): Ensure the right value of
- it->position is saved by push_it.
- (pop_it): Restore it->object for GET_FROM_BUFFER and GET_FROM_STRING.
- (reseat_1): Don't setup it->object twice.
- (set_iterator_to_next): No need to set it->object after pop_it.
- (move_it_to): Explicitly check to see if last move reached to_charpos.
-
-2006-07-17 Thien-Thi Nguyen <ttn@gnu.org>
-
- * xdisp.c (display_mode_line): Preserve match data.
-
-2006-07-14 Kim F. Storm <storm@cua.dk>
-
- * w32.c (pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
- (init_winsock): Load them. Use ws2_32.dll.
- (sys_listen): Undo last change. Just set FILE_LISTEN flag.
- (sys_accept): Undo last change. Instead, set child status to
- STATUS_READ_ACKNOWLEDGED and reset char_avail event so next
- sys_select will wakeup the reader thread.
- (_sys_wait_accept): New function used by reader thread to wait for
- an incoming connection on a server socket.
-
- * w32.h (_sys_read_ahead, _sys_wait_accept): Add prototypes.
-
- * w32proc.c (reader_thread): Use _sys_wait_accept to wait on a
- server socket (FILE_LISTEN flag).
-
-2006-07-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * sound.c (alsa_init): Call snd_pcm_close after successful snd_pcm_open.
-
-2006-07-14 Kim F. Storm <storm@cua.dk>
-
- * w32.c: Fix high cpu load for server sockets.
- (pfn_WSAEventSelect): New function ptr.
- (init_winsock): Load it.
- (sys_listen): Set FILE_LISTEN flag. Set event mask for socket's
- char_avail event object to FD_ACCEPT.
- (sys_accept): Check FILE_LISTEN flag. Set event mask on new
- socket's char_avail event object to FD_READ|FD_CLOSE.
-
- * w32.h (FILE_LISTEN): New filedesc flag value.
-
-2006-07-13 Kim F. Storm <storm@cua.dk>
-
- * bytecode.c (Fbyte_code): Use CAR, CDR for Bcar, Bcdr.
- Use CAR_SAFE, CDR_SAFE for Bcar_safe, Bcdr_safe.
- Simplify loops and use CAR for Bnth and Belt.
-
- * data.c (Findirect_function): Optimize for no indirection.
-
- * eval.c (Fthrow): Remove loop around Fsignal.
- (Feval, Fapply, Ffuncall): Optimize for no function indirection.
- Use original function name in all signaled errors.
- Simplify Fsignal calls (no return).
- (funcall_lambda): Simplify Fsignal calls (no return).
-
-2006-07-13 Andreas Schwab <schwab@suse.de>
-
- * syntax.c (scan_sexps_forward): Use EMACS_INT for out_bytepos and
- out_charpos.
-
-2006-07-13 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Fformat): Fix calculation of text property positions
- of format string.
-
-2006-07-12 Kim F. Storm <storm@cua.dk>
-
- * lisp.h (CHECK_TYPE): New macro for generic type checking.
- (CAR_SAFE, CDR_SAFE): New macros.
- (ARRAYP, CHECK_ARRAY): New macros.
- (CHECK_VECTOR_OR_STRING, CHECK_SUBR): New macros.
- (CHECK_WINDOW_CONFIGURATION): New macro.
- (CHECK_LIST_CONS, CHECK_LIST_END): New checks for list traversal.
- (CHECK_STRING_OR_BUFFER, CHECK_HASH_TABLE, CHECK_LIST)
- (CHECK_STRING, CHECK_STRING_CAR, CHECK_CONS, CHECK_SYMBOL)
- (CHECK_CHAR_TABLE, CHECK_VECTOR, CHECK_VECTOR_OR_CHAR_TABLE)
- (CHECK_BUFFER, CHECK_WINDOW, CHECK_LIVE_WINDOW, CHECK_PROCESS)
- (CHECK_NUMBER, CHECK_NATNUM, CHECK_MARKER, CHECK_OVERLAY)
- (CHECK_NUMBER_COERCE_MARKER, CHECK_FLOAT, CHECK_NUMBER_OR_FLOAT)
- (CHECK_NUMBER_OR_FLOAT_COERCE_MARKER): Use CHECK_TYPE.
-
- * category.h (CHECK_CATEGORY, CHECK_CATEGORY_SET):
- * frame.h (CHECK_FRAME, CHECK_LIVE_FRAME): Use CHECK_TYPE.
-
- * callint.c (Fcall_interactively):
- * casefiddle.c (casify_object):
- * editfns.c (general_insert_function):
- * fns.c (Flength, Felt, Ffillarray):
- * data.c (Fcar, Fcdr): Remove loop around wrong_type_argument.
-
- * data.c (wrong_type_argument): Remove loop around Fsignal.
- (Farrayp, Fsequencep): Use ARRAYP.
- (Fcar): Use CAR.
- (Fcar_safe): Use CAR_SAFE.
- (Fcdr): Use CDR.
- (Fcdr_safe): Use CDR_SAFE.
- (Fsetcar, Fsetcdr): Use CHECK_CONS.
- (Fsubr_arity, Fsubr_name): Use CHECK_SUBR.
- (Faset): Use CHECK_ARRAY.
-
- * fns.c (Felt): Use CHECK_ARRAY.
- (concat): Use CHECK_NUMBER.
- (Fsubstring, substring_both): Use CHECK_VECTOR_OR_STRING.
- (Fmemq): Use CHECK_LIST.
- (Fassq, Fassoc, Frassq, Frassoc): Use CAR.
- (assq_no_quit): Use CAR_SAFE.
- (Fnthcdr, Fmember, Fdelq, Fdelete, Fnreverse, Fnconc):
- Use CHECK_LIST_CONS.
- (Freverse, Fplist_get, Flax_plist_get): Use CHECK_LIST_END.
-
- * bytecode.c (Fbyte_code): Use CHECK_VECTOR.
-
- * casetab.c (check_case_table):
- * category.c (check_category_table):
- * marker.c (Fcopy_marker):
- * syntax.c (check_syntax_table):
- * xfaces.c (load_pixmap): Use CHECK_TYPE.
-
- * fns.c (Fcopy_sequence, concat):
- * fringe.c (Fdefine_fringe_bitmap):
- * lread.c (check_obarray): Cleanup wrong_type_argument use.
-
- * keyboard.c (access_keymap_keyremap): Use ARRAYP.
-
- * keymap.c (Fdefine_key, Flookup_key):
- * macros.c (Fstart_kbd_macro): Use CHECK_VECTOR_OR_STRING.
-
- * mac.c (Fmac_get_preference): Use CHECK_LIST_END.
-
- * search.c (Fset_match_data): Use CHECK_LIST.
-
- * sunfns.c (sun_item_create): Use CHECK_LIST_CONS.
-
- * window.c (Fwindow_configuration_frame, Fset_window_configuration):
- (compare_window_configurations): Use CHECK_WINDOW_CONFIGURATION.
-
-2006-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in (dired.o, editfns.o, fileio.o): Depend on blockinput.h.
-
- * dired.c: Include blockinput.h.
- (Ffile_attributes): Add BLOCK_INPUT around getpwuid/getgrgid.
-
- * editfns.c: Include blockinput.h.
- (Fuser_login_name, Fuser_full_name): Add BLOCK_INPUT around
- getpwuid/getpwnam.
-
- * fileio.c: Include blockinput.h.
- (Fexpand_file_name, search_embedded_absfilename): Add BLOCK_INPUT
- around getpwnam.
- (search_embedded_absfilename): Remove spurious xfree.
-
-2006-07-11 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (sit_for): Reduce number of args from 5 to 3.
- Now just one TIMEOUT arg that can be a Lisp float or Lisp int.
- Combine args DISPLAY and INITIAL_DISPLAY into one arg DO_DISPLAY.
- Signal error if TIMEOUT is not a number.
- Undo 2006-06-14 change for non-preemptive display if TIMEOUT < 0.
- The rework of sit_for args also fixes several incorrect Qt args
- which should have been 1.
- (Fredisplay): Pass 1 instead of Qt to swallow_events and
- detect_input_pending_run_timers.
-
- * lisp.h (sit_for): Update prototype.
- (Fredisplay): Add EXFUN.
-
- * dispextern.h (sit_for): Remove prototype.
-
- * callint.c (Fcall_interactively):
- * minibuf.c (temp_echo_area_glyphs):
- * keyboard.c (command_loop_1, read_char, Fexecute_extended_command):
- * fileio.c (Fdo_auto_save): Update/simplify sit_for calls.
-
-2006-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (forw_comment): Also use EMACS_INT for buffer positions.
-
-2006-07-11 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (Fredisplay): Add FORCE argument to force redisplay when
- input is available. Fix test for redisplay_dont_pause non-nil.
- Specbind redisplay-dont-pause to t if FORCE non-nil.
-
-2006-07-10 Chong Yidong <cyd@stupidchicken.com>
-
- * puresize.h (BASE_PURESIZE): Increment to 1211000.
-
- * dispnew.c (Fredisplay): New function, equivalent to (sit-for 0).
- (Fsit_for): Function deleted.
-
- * keyboard.c (command_loop_1, Fexecute_extended_command):
- Call sit_for instead of Fsit_for.
-
- * minibuf.c (temp_echo_area_glyphs): Likewise.
-
-2006-07-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (Fforward_comment): Revert the reversion.
- (back_comment, scan_lists): Also use EMACS_INT for buffer positions.
-
-2006-07-09 John Paul Wallington <jpw@pobox.com>
-
- * syntax.c (Fforward_comment): Revert previous change.
-
-2006-07-09 Kim F. Storm <storm@cua.dk>
-
- * window.c (Fforce_window_update): Doc fix.
-
-2006-07-08 Stephen Gildea <gildea@stop.mail-abuse.org>
-
- * fileio.c (do_auto_save_make_dir): Make the auto-save-list-file
- directory unreadable for better user privacy.
-
-2006-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (Fforward_comment): Fix int-32 vs EMACS_INT-64 mixup.
-
- * lread.c (read_filtered_event): Remove `register' qualifier because it
- causes compilation problem with gcc-4.0.2-20051125 on amd64.
- (readevalloop): Remove unused var `bpos'.
- Yet another int/Lisp_Object mixup (YAILOM).
-
-2006-07-07 Eli Zaretskii <eliz@gnu.org>
-
- * keyboard.c (Fexecute_extended_command): Mention the argument
- PREFIXARG in the doc string.
-
-2006-07-07 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (Fdefine_fringe_bitmap): Doc fix.
-
-2006-07-05 Chong Yidong <cyd@stupidchicken.com>
-
- * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
- clash detection using the base buffer.
-
- * puresize.h (BASE_PURESIZE): Increment to 1210500.
-
-2006-07-04 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (x_delete_display): Don't free or derefence NULL pointers.
-
-2006-07-04 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (Fset_overriding_fontspec_internal): Check if we need
- to update Voverriding_fontspec_alist.
-
-2006-07-03 Richard Stallman <rms@gnu.org>
-
- * xfns.c (Fx_create_frame): Move unwind_create_frame setup down.
-
- * xfaces.c (Fface_attribute_relative_p): Doc fix.
-
- * textprop.c (Fget_char_property_and_overlay): Doc fix.
-
- * eval.c (Fdefvaralias): Doc fix.
-
-2006-07-03 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (sit_for): Fix preempt condition.
-
-2006-07-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lread.c (read_filtered_event): Treat select-window just like
- switch-frame.
-
-2006-07-02 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (display_tool_bar_line): Skip glyphs which are too big
- to ever fit the tool-bar,
- (MAX_FRAME_TOOL_BAR_HEIGHT): New macro.
- (tool_bar_lines_needed): Use unused mode-line row as temp_row.
- (redisplay_tool_bar): Only clear desired matrix if we actually
- change the tool-bar window height. Only try to make the tool-bar
- window bigger if there is actually room for it.
-
-2006-06-30 Ralf Angeli <angeli@caeruleus.net>
-
- * w32term.c (x_make_frame_visible): Use SystemParametersInfo with
- SPI_GETWORKAREA to find the dimensions of the screen work area,
- and adjust vertical position of the frame in order to avoid being
- covered by the task bar.
-
- * w32fns.c (w32_createwindow): Use CW_USEDEFAULT instead of
- f->left_pos and SH_SHOW instead of f->top_pos in the call to
- CreateWindow. Record the actual position in f->left_pos and
- f->top_pos.
-
-2006-06-30 John Paul Wallington <jpw@pobox.com>
-
- * w32console.c (syms_of_ntterm) <w32-use-full-screen-buffer>:
- Doc fix - default value has changed.
-
-2006-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c [!TARGET_API_MAC_CARBON]: Don't include FixMath.h or Scrap.h.
-
- * macfns.c (Fx_create_frame): Apply 2006-06-24 change for xfns.c.
-
- * macgui.h (USE_MAC_TSM) [TARGET_API_MAC_CARBON]: Set default to 1.
-
- * macterm.c (Qeql): Add extern.
- (x_set_mouse_pixel_position) [MAC_OSX]: Use CGWarpMouseCursorPosition.
- (fm_style_face_attributes_alist) [USE_ATSUI]: New variable.
- (syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it.
- Change keys of Vmac_atsu_font_table from strings to numbers.
- (fm_style_to_face_attributes) [USE_ATSUI]: New function.
- (init_font_name_table) [USE_ATSUI]: Use it.
- (saved_ts_script_language_on_focus) [USE_MAC_TSM]: New variable.
- (syms_of_macterm) [USE_MAC_TSM]: Initialize and staticpro it.
- [USE_MAC_TSM] (mac_tsm_resume): Restore script and language codes
- only when saved_ts_script_language_on_focus coincides with
- Vmac_ts_script_language_on_focus.
- [USE_MAC_TSM] (mac_tsm_suspend): Save value of
- Vmac_ts_script_language_on_focus to saved_ts_script_language_on_focus.
- (XTread_socket) [USE_MAC_TSM]: Add Mac OS Classic support.
- [USE_MAC_TSM] (mac_handle_text_input_event, init_tsm): Likewise.
-
-2006-06-27 Chong Yidong <cyd@stupidchicken.com>
-
- * editfns.c (Fdelete_field, Ffield_string, Ffield_beginning)
- (Ffield_string_no_properties, Ffield_end): Mention
- args-out-of-range error condition in docstring.
-
-2006-06-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (handle_composition_prop): Set stop_charpos before push_it.
-
-2006-06-25 Kim F. Storm <storm@cua.dk>
-
- * s/gnu-linux.h (SIGNALS_VIA_CHARACTERS): Define for Linux kernel
- version 2.4 and later.
-
-2006-06-24 Chong Yidong <cyd@stupidchicken.com>
-
- * xfns.c (Fx_create_frame): Set font parameter directly instead of
- using x_default_parameter, since x_get_args clears the parm alist.
-
-2006-06-24 Eli Zaretskii <eliz@gnu.org>
-
- * dired.c (directory_files_internal) [WINDOWSNT]: Find files
- case-insensitively.
-
-2006-06-24 Aidan Kehoe <kehoea@parhasard.net>
-
- * lread.c (read_escape): When an unknown Unicode code point is
- encountered as a string or character escape, signal an error.
-
-2006-06-23 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (pitx): Dump iterator stack.
-
- * xdisp.c (handle_composition_prop): Push iterator on stack.
- (set_iterator_to_next): Pop iterator at end of composition.
-
-2006-06-23 Martin Rudalics <rudalics@gmx.at>
-
- * fileio.c (Frename_file) [DOS_NT]: Don't try to move directory to
- itself on DOS_NT platforms, if the old and new names are identical
- but for the letter-case.
-
-2006-06-21 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct it): Add `position' member to iterator stack.
- Rename `pos' member to `current'. Rearrange and add comments.
-
- * xdisp.c (handle_stop): Set it->ignore_overlay_strings_at_pos_p
- if we get any overlays.
- (set_cursor_from_row): Don't clobber `end' if we rescan from
- start_string.
- (push_it, pop_it): Save it->position.
-
-2006-06-19 Richard Stallman <rms@gnu.org>
-
- * window.c (size_window): New arg FIRST_ONLY. All callers changed.
- (adjust_window_trailing_edge): Specially compute FIRST_PARALLEL
- for the case of a top-level window and the following minibuffer.
- Don't exit because of no `next' when there is a parent.
- Use the FIRST_ONLY feature when resizing following windows.
-
- * syntax.c (init_syntax_once): Give most control chars' syntax Spunct.
-
-2006-06-17 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (update_frame): Check for input pending on entry.
- (update_window, update_frame_1): Break loop if input is detected.
-
-2006-06-16 Francis Litterio <flitterio@gmail.com>
-
- * xterm.c (x_check_expected_move, handle_one_xevent)
- (x_set_offset, x_check_fullscreen): Extensive changes to make
- frame positioning deterministic under X.
-
- * 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>
-
- * dispextern.h (struct it): Add union to iterator stack to save
- image, composition, and stretch specific paramters.
-
- * xdisp.c (next_overlay_string): Fix assert.
- (push_it, pop_it): Handle composition and stretch specific values.
- Only handle it->slice in image (for now).
- (back_to_previous_visible_line_start): Continue search if newline is
- part of a compisition. Simplify.
- (reseat_1): Set it->object to buffer.
- (set_iterator_to_next): Set it->object to string or buffer, when
- setting it->method to GET_FROM_STRING or GET_FROM_BUFFER.
- (next_element_from_composition): Set it->object to buffer if not
- from string.
- (set_cursor_from_row): Only save start of string if not already
- done to handle multiple strings in a row.
-
- * .gdbinit (pitx): Show composition parameters.
- (pgx, pg): New commands to print a glyph structure.
- (pgi, pgn): New commands to print specific/next glyph.
- (pgrowx, pgrow): New commands to print all glyphs in a row.
-
-2006-06-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (Fx_display_mm_height, Fx_display_mm_width)
- [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: Use CGDisplayScreenSize.
-
- * macterm.c (do_app_resume, do_app_suspend): Remove functions.
- (mac_tsm_resume, mac_tsm_suspend) [USE_MAC_TSM]: New functions.
- (mac_handle_window_event, XTread_socket) [USE_MAC_TSM]: Use them.
- (Vmac_ts_script_language_on_focus) [USE_MAC_TSM]: New variable.
- (syms_of_macterm) [USE_MAC_TSM]: Defvar it.
- (saved_ts_language, saved_ts_component) [USE_MAC_TSM]: New variables.
- (mac_initialize_display_info) [MAC_OSX]: Use Quartz Display
- Services functions to get size of main display in pixels.
-
-2006-06-14 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (back_to_previous_visible_line_start):
- Reset it->continuation_lines_width.
-
-2006-06-14 Richard Stallman <rms@gnu.org>
-
- * eval.c (Fdefconst): Mark variable as risky.
-
- * callproc.c (Fcall_process): Doc fix.
-
- * window.c (adjust_window_trailing_edge): Don't break out of the loop
- because there's no next window, if there are parallel windows.
- Do break out when WINDOW is nil.
-
-2006-06-14 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (IT_STACK_SIZE): New macro specifying size of
- iterator stack (instead of hardcoded number). Increase from 2 to
- 4 to make room for propertized overlay strings before and after a
- display string, image or composition.
- (struct it): Add image_id and method members to iterator stack.
-
- * xdisp.c (init_from_display_pos): Don't set it->method and
- overlay_string_index after pop_it. Add asserts.
- (handle_stop): Look for overlay strings around a display string,
- image, or composition. Handle properties on those strings.
- (next_overlay_string): Don't set string, pos or method after pop_it.
- (get_overlay_strings_1): Split from get_overlay_strings; don't
- modify it if no overlay strings are found.
- (get_overlay_strings): Use get_overlay_strings_1. Always set
- it->string and it->method.
- (push_it): Push it->image_id and it->method. Push it->object
- instead of it->string if method is GET_FROM_IMAGE.
- (pop_it): Pop it->image_id and it->method. Ppo it->object
- instead of it->string if method is GET_FROM_IMAGE.
- Reset it->current.string_pos if popped it->string is nil.
- (reseat_1): Remove comment dated 19 May 2003. It expressed doubt
- whether a given change was correct; but the change is correct.
- Clear it->string_from_display_prop_p.
- (set_iterator_to_next): Rely on it->method and it->image_id from
- iterator stack, instead of setting them explicitly after pop_it.
-
- * dispnew.c (sit_for): Undo 2006-06-01 change. Instead, a
- negative time forces redisplay even when input is available.
- (Fsit_for): Doc fix.
-
-2006-06-13 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c: Modify preemptive redisplay to be based on periodic
- checks for input.
- (PERIODIC_PREEMPTION_CHECKING): Define to 1 iff EMACS_HAS_USECS.
- (Vredisplay_preemption_period): New variable.
- (syms_of_display): DEFVAR_LISP and initialize it.
- (preemption_period, preemption_next_check): New variables.
- (update_frame, update_single_window): Initialize them based on
- Vredisplay_preemption_period if !force_p.
- (update_window, update_frame_1): Use them to determine when to
- check for input.
-
-2006-06-03 Aidan Kehoe <kehoea@parhasard.net>
-
- * lread.c (read_escape): Provide a Unicode character escape
- syntax; \u followed by exactly four or \U followed by exactly
- eight hex digits in a comment or string is read as a Unicode
- character with that code point.
-
-2006-06-09 Eli Zaretskii <eliz@gnu.org>
-
- * window.c (window_scroll_pixel_based): Signal "Beginning of
- buffer" when scroll-down at the beginning of an empty buffer.
-
-2006-06-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_MAC_TSM] (mac_handle_text_input_event):
- Exclude 0x7f from ASCII range.
-
-2006-06-05 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_set_scroll_bar_thumb, x_scroll_bar_create)
- (w32_set_vertical_scroll_bar, w32_scroll_bar_handle_click)
- (x_scroll_bar_report_motion): Remove workarounds for
- versions of Windows NT < 3.51.
- [!SIF_ALL]: Remove.
- (pfnSetScrollInfo, pfnGetScrollInfo): Remove.
- (w32_initialize): Don't dynamically load Get/SetScrollInfo.
-
-2006-06-04 David Kastrup <dak@gnu.org>
-
- * dispnew.c: Mention `redisplay-dont-pause' in doc string of
- `sit-for'.
-
-2006-06-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (x_set_icon_name): Apply 2006-06-02 change for xfns.c.
-
- * macgui.h (USE_MAC_TSM): Set default to 1 on Mac OS X.
-
- * macterm.c (tsm_document_id) [USE_MAC_TSM]: New variable.
- (Qtext_input, Qupdate_active_input_area, Qunicode_for_key_event)
- [USE_MAC_TSM]: Likewise.
- (syms_of_macterm) [USE_MAC_TSM]: Intern and staticpro them.
- (Qbefore_string) [USE_MAC_TSM]: Add extern.
- (do_app_resume, do_app_suspend) [USE_MAC_TSM]: Call
- ActivateTSMDocument/DeactivateTSMDocument.
- (mac_store_event_ref_as_apple_event): Call mac_post_mouse_moved_event.
- (mac_handle_window_event) [USE_MAC_TSM]: Handle
- kEventWindowFocusAcquired/kEventWindowFocusRelinquish.
- (mac_handle_text_input_event) [USE_MAC_TSM]: New function.
- (install_window_handler) [USE_MAC_TSM]: Install it. Register
- kEventWindowFocusAcquired/kEventWindowFocusRelinquish.
- (keycode_to_xkeysym_table): Add entry for f16.
- (XTread_socket) [USE_MAC_TSM]: Set/reset read_socket_inev
- before/after passing keystroke event to toolbox dispatcher.
- (init_tsm) [USE_MAC_TSM]: New function.
- (mac_initialize) [USE_MAC_TSM]: Call it.
- (Vmac_ts_active_input_overlay) [USE_MAC_TSM]: New defvar.
-
- * macterm.h (EVENT_PARAM_TEXT_INPUT_SEQUENCE_NUMBER): New enumerator.
-
-2006-06-02 John Paul Wallington <jpw@gnu.org>
-
- * xfns.c (x_set_name_internal): Set icon to `text', derived from
- name, when frame's icon_name isn't a string rather than only when
- it is nil.
-
-2006-06-03 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (x_set_icon_name): Don't use arg if it's not a string
- and not nil.
-
-2006-06-02 Chong Yidong <cyd@stupidchicken.com>
-
- * xfns.c (x_set_icon_name): No-op if arg is non-nil and not a
- string.
-
-2006-06-02 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xdisp.c (next_element_from_composition): Set it->object to
- it->string if composition is coming from string.
- (set_cursor_from_row): Don't return 0 unless row displays a
- continued line.
- (dump_glyph): Dump composite glyph.
-
-2006-06-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
-
-2006-06-01 Richard Stallman <rms@gnu.org>
-
- * window.c (Fsplit_window): Doc fix.
-
-2006-06-01 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
-
- * process.c (deleted_pid_list): New variable to store the pids
- of deleted processes. Declare it only if SIGCHLD is defined.
- (init_process): Initialize it.
- (syms_of_process): Staticpro it.
- (Fdelete_process): Add pid of the deleted process to it. Check after
- the addition and before the kill if the process is already stopped,
- in which case it is deleted from the list and not killed.
- (sigchld_handler): Define it only if SIGCHLD is. Search the process
- that signaled Emacs in `deleted_pid_list' before `Vprocess_alist'.
- Original idea by Stefan Monnier.
-
-2006-06-01 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (sit_for): Perform redisplay even if input is pending
- when redisplay-dont-pause is non-nil.
-
-2006-06-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_handle_visibility_change): Set buf.arg to Qnil.
- (XTread_socket): Remove obsolete comment.
-
-2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (syms_of_xmenu): Make accelerate-menu an alias for
- menu-bar-open.
-
-2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (Fmenu_bar_open, syms_of_xmenu): Change menu-bar-start to
- menu-bar-open.
-
- * gtkutil.c (menu_nav_ended): Change x-menu-bar-start to menu-bar-open.
-
-2006-05-31 Juri Linkov <juri@jurta.org>
-
- * minibuf.c (Vhistory_add_new_input): New variable.
- (read_minibuf): Use it.
- (syms_of_minibuf) <history-add-new-input>: New Lisp variable.
- (syms_of_minibuf) <history-delete-duplicates>: Doc fix.
-
-2006-05-31 Kim F. Storm <storm@cua.dk>
-
- * process.c (select_wrapper): Add wrapper around select to work around
- "incomplete backtrace" bug in gdb 5.3, when emacs is stopped inside
- select called from wait_reading_process_output.
-
-2006-05-30 Andreas Schwab <schwab@suse.de>
-
- * xmenu.c (Fmenu_bar_start): Return a value.
-
-2006-05-30 Richard Stallman <rms@gnu.org>
-
- * coding.c (Ffind_operation_coding_system): Doc fix.
-
-2006-05-30 Eli Zaretskii <eliz@gnu.org>
-
- * w32term.c (x_draw_hollow_cursor): Fix last change.
-
-2006-05-29 Kim F. Storm <storm@cua.dk>
-
- * w32term.c (x_draw_stretch_glyph_string): Fix last change.
-
-2006-05-29 Eli Zaretskii <eliz@gnu.org>
-
- * coding.c (Ffind_operation_coding_system): Doc fix.
-
-2006-05-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c [USE_MAC_FONT_PANEL] (Fmac_set_font_panel_visibility):
- Call mac_set_font_info_for_selection if font panel is made visible.
-
- * macterm.c (font_panel_shown_p) [USE_MAC_FONT_PANEL]: New variable.
- (mac_font_panel_visible_p, mac_show_hide_font_panel)
- [USE_MAC_FONT_PANEL]: New functions.
- [USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection):
- Return immediately if font panel is not visible.
-
- * macterm.h (mac_font_panel_visible_p, mac_show_hide_font_panel):
- Add externs.
-
-2006-05-29 Dan Nicolaescu <dann@ics.uci.edu>
-
- * search.c (matcher_overflow): Mark as NO_RETURN.
-
- * xterm.c (x_connection_closed): Likewise.
-
- * sysdep.c (croak): Likewise.
-
- * sound.c (sound_perror, alsa_sound_perror): Likewise.
-
- * lisp.h (die, nsberror): Likewise.
-
-2006-05-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * sound.c (alsa_open, alsa_configure, alsa_write):
- Move assignment to err out of if-statement.
-
- * gtkutil.c (menu_nav_ended): New function.
- (create_menus): Connect menu_nav_ended to "selection-done" to fix
- grabs.
-
- * xmenu.c (Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
-
-2006-05-28 Dan Nicolaescu <dann@ics.uci.edu>
-
- * charset.h (invalid_character): Mark as NO_RETURN.
-
-2006-05-29 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Ffind_operation_coding_system): Call a function by
- safe_call1 instead of call1.
-
-2006-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (struct saved_window): Add `dedicated'.
- (Fset_window_configuration, save_window_save): Save/restore the
- `dedicated' flag.
-
-2006-05-28 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (set_cursor_from_row): If cursor cannot be set in row,
- don't update w->cursor and return 0. Return 1 on success.
- (try_cursor_movement): Repeat set_cursor_from_row on successive rows
- until it succeeds.
-
- * dispextern.h (set_cursor_from_row): Update prototype.
-
-2006-05-28 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_phys_cursor_geometry): Return computed x and y through
- parameters. Adjust x and width in case cursor in on a partially
- visible stretch glyph on the left edge.
- (erase_phys_cursor): Don't erase into left fringe/margin in case
- previous cursor glyph is a partially visible stretch glyph on left.
-
- * dispextern.h (get_phys_cursor_geometry): Update prototype.
-
- * xterm.c (x_draw_stretch_glyph_string): Fix problems with invisible
- cursor and erasing cursor on partially visible stretch glyph on left.
- (x_draw_hollow_cursor): Compute x via get_phys_cursor_geometry.
-
- * macterm.c: Likewise.
-
- * w32term.c: Likewise.
-
-2006-05-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macselect.c (mac_handle_apple_event):
- Return errAEEventNotHandled if key binding is not found.
-
-2006-05-26 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (main) [PROFILING]: Enable also for __MINGW32__.
- [__MINGW32__]: MinGW-specific declaration of `etext'.
-
- * w32heap.c (etext, edata): Remove unused definitions.
-
-2006-05-26 Chong Yidong <cyd@stupidchicken.com>
-
- * fileio.c (Fcopy_file): Delete argument MUSTBENEW.
- Incorporate the exclusive file-opening functionality into the behavior
- when OK-IF-ALREADY-EXISTS is nil.
- (Frename_file): Call Fcopy_file without MUSTBENEW argument.
-
-2006-05-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * sound.c (alsa_configure): Move get period/buffer_size after
- setting hwparams.
-
-2006-05-26 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Ffind_operation_coding_system): Allow (FILENAME
- . BUFFER) in TARGET.
-
-2006-05-25 Chong Yidong <cyd@stupidchicken.com>
-
- * image.c (png_load): Don't call fclose on NULL.
-
-2006-05-25 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Fyes_or_no_p):
- * callint.c (Fcall_interactively): Fread_from_minibuffer now takes
- only seven args.
-
-2006-05-25 Juri Linkov <juri@jurta.org>
-
- * lisp.h (Fread_from_minibuffer): Decrement number of args.
-
- * minibuf.c (read_minibuf): Remove arg KEEP_ALL. Callers changed.
- (Fread_from_minibuffer): Remove arg KEEP_ALL. Callers changed.
-
- * buffer.c (mode-line-format): Fix docstring.
-
-2006-05-25 Richard Stallman <rms@gnu.org>
-
- * emacs.c (main, Fdump_emacs): Don't test __linux or __linux__.
-
-2006-05-24 Luc Teirlinck <teirllm@auburn.edu>
-
- * puresize.h (BASE_PURESIZE): Increase to 1210000.
-
-2006-05-24 Alan Mackenzie <acm@muc.de>
-
- * lread.c (Vload_history): Enhance doc-string to say that the file
- is the absolute truename of the loaded file.
-
- * lread.c (Vafter_load_alist): doc-string: state that an element
- now has a regexp to match file names, not a file name as such.
-
- * lread.c (readevalloop): Call file-truename on the name for
- load-history, except at preloading time.
-
- * lread.c (Fload): At preloading time, preserve the extension of
- the filename which goes into load-history. New var hist_file_name.
-
- * lread.c (Fload): Do eval-after-load stuff by calling the lisp
- function do-after-load-evaluation.
-
-2006-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (ae_attr_table): New variable.
- (syms_of_mac): Intern and staticpro its elements.
- (mac_aelist_to_lisp): Also convert Apple event attributes.
- (mac_ae_put_lisp): New function.
- (create_apple_event_from_event_ref) [MAC_OSX]: Use typeUTF8Text.
-
- * macfns.c (Fx_server_version): Use gestaltSystemVersionMajor etc.
-
- * macselect.c (Qemacs_suspension_id): New variable.
- (syms_of_macselect): Intern and staticpro it.
- (struct suspended_ae_info): New struct.
- (deferred_apple_events, defer_apple_events)
- (Fmac_process_deferred_apple_events): Use it.
- (suspended_apple_events): New variable.
- (mac_handle_apple_event_1): New function.
- (mac_handle_apple_event): Use it. Don't process previously
- suspended events.
- (cleanup_suspended_apple_events, get_suspension_id)
- (cleanup_all_suspended_apple_events): New functions.
- (init_apple_event_handler): Call cleanup_all_suspended_apple_events
- at exit.
- (Fmac_cleanup_expired_apple_events, Fmac_ae_set_reply_parameter)
- (Fmac_resume_apple_event): New defuns.
- (syms_of_macselect): Defsubr them.
-
- * macterm.c (fn_keycode_to_keycode_table, XTread_socket) [MAC_OSX]:
- Fix last change. Don't map `fn' modifier if pressed with F1 ... F12.
-
- * macterm.h (TYPE_FILE_NAME): Change from macro to enumerator.
- (KEY_EMACS_SUSPENSION_ID_ATTR): New enumerator.
- (keyReplyRequestedAttr) [MAC_OS_X_VERSION_MAX_ALLOWED < 1030]: Likewise.
- (gestaltSystemVersionMajor, gestaltSystemVersionMinor)
- (gestaltSystemVersionBugFix) [MAC_OS_X_VERSION_MAX_ALLOWED < 1040]:
- Likewise.
- (typeUTF8Text, kEventParamWindowMouseLocation)
- [MAC_OSX && MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Likewise.
- (x_get_focus_frame, mac_ae_put_lisp): Add externs.
-
-2006-05-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (fn_keycode_to_xkeysym_table, convert_fn_keycode): Remove.
- (fn_keycode_to_keycode_table) [MAC_OSX]: New variable.
- (mac_set_unicode_keystroke_event) [TARGET_API_MAC_CARBON]: New function.
- (XTread_socket) [TARGET_API_MAC_CARBON]: Use it.
- (XTread_socket) [MAC_OSX]: Try 'uchr' Unicode keyboard-layout
- resource to backtranslate key with modifiers.
- (XTread_socket): Don't set read_socket_inev around AEProcessAppleEvent.
-
-2006-05-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c: Remove declarations already in xterm.h
-
- * xterm.h: Add extern declarations for x_clear_errors,
- x_fully_uncatch_errors, x_catching_errors and
- x_alloc_lighter_color_for_widget. Remove duplicated declarations.
-
-2006-05-21 Richard Stallman <rms@gnu.org>
-
- * xfaces.c (best_matching_font): Abort for best == NULL
- before we start to use it.
-
- * buffer.c (syms_of_buffer, Fmake_overlay): Doc fixes.
-
-2006-05-20 Kim F. Storm <storm@cua.dk>
-
- * xfaces.c (best_matching_font): Fix crash in 2006-05-17 change.
-
-2006-05-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (convert_fn_keycode): Fix last change.
-
-2006-05-19 Eli Zaretskii <eliz@gnu.org>
-
- * w32.c (init_environment): Perform the processing of environment
- variables on a copy of default variables and their values, not on
- the original. Simplify code that calls ExpandEnvironmentStrings
- and make buf1[] and buf2[] more visible for easier debugging.
-
-2006-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * frame.c (x_set_border_width): Remove #ifndef MAC_OS.
-
- * image.c [MAC_OS] (gif_load): Allocate Lisp string first.
-
- * macfns.c (Fx_focus_frame): Don't check dpyinfo->x_focus_frame.
-
- * macterm.c (XTread_socket) [TARGET_API_MAC_CARBON && MAC_OSX]:
- Forward keyUp events to toolbox_dispatcher.
-
- * window.c (foreach_window): Check WINDOWP (FRAME_ROOT_WINDOW (f)).
-
-2006-05-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * config.in: Regenerated (HAVE_ALSA).
-
- * sound.c (alsa_sound_perror, alsa_open, alsa_period_size)
- (alsa_configure, alsa_close, alsa_choose_format, alsa_write)
- (snd_error_quiet, alsa_init): New functions.
- (vox_init): Return 0 if unable to open device.
- (Fplay_sound_internal): Test for alsa first and use vox (oss) as
- a fallback.
- (struct sound_device): Add period_size.
- (wav_play, au_play): Use period_size if set.
-
- * Makefile.in (CFLAGS_SOUND): New flags for ALSA.
- (ALL_CFLAGS): Add CFLAGS_SOUND.
-
-2006-05-18 Kenichi Handa <handa@m17n.org>
-
- * callproc.c (Fcall_process): Reject encoding arguments by
- ascii-incompatible coding systems (e.g. utf-16).
-
- * coding.c (Qascii_incompatible): New variable.
- (syms_of_coding): Setup Qascii_incompatible.
- (setup_coding_system): Be sure to initialize coding->common_flags.
- Check `ascii-incompatible' property of the coding system.
-
- * coding.h (CODING_ASCII_INCOMPATIBLE_MASK): New macro.
-
-2006-05-18 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (display_tool_bar_line): Restore entire tool-bar
- geometry when backtracking in case last image doesn't fit on line.
-
-2006-05-18 MIYOSHI Masanori <miyoshi@meadowy.org> (tiny change)
-
- * xdisp.c (display_tool_bar_line): Don't adjust tool-bar height by
- more than height of one frame default line.
-
-2006-05-17 Richard Stallman <rms@gnu.org>
-
- * xfaces.c (better_font_p): Any font beats no font.
- (best_matching_font): Simplify based on above change.
-
- * buffer.c (Fprevious_overlay_change, Fnext_overlay_change): Doc fixes.
-
-2006-05-16 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (handle_one_xevent): Check that f is not NULL before
- calling x_kill_gs_process.
-
-2006-05-14 Richard Stallman <rms@gnu.org>
-
- * textprop.c (Fnext_single_char_property_change)
- (Fprevious_single_char_property_change): Don't allow returning
- value beyond LIMIT in any cases.
- (Fnext_char_property_change, Fprevious_char_property_change): Doc fix.
-
- * intervals.c (get_local_map): Abort if POSITION outside BEGV, ZV.
-
-2006-05-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Check that f is not NULL before
- calling _XEditResCheckMessages.
-
-2006-05-14 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (handle_one_xevent): Fix crash in 2006-03-24 change.
-
-2006-05-13 Eli Zaretskii <eliz@gnu.org>
-
- * frame.c (x_set_border_width): Fix error message to say "frame",
- not "window".
-
- * Makefile.in (SOME_MACHINE_LISP): Add fringe.elc.
-
-2006-05-12 Chong Yidong <cyd@stupidchicken.com>
-
- * intervals.c (set_point_both): Fix mixup before before and after
- in variable names.
-
- * editfns.c (Fline_beginning_position): Inhibit point-motion hooks
- while setting point temporarily.
-
-2006-05-11 Richard Stallman <rms@gnu.org>
-
- * lread.c (readevalloop): Abort if START non-nil for non-buffer input.
-
-2006-05-11 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (redisplay_tool_bar): Handle large tool-bar-border values.
-
-2006-05-11 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Finsert_file_contents): Fix for the case of IO error
- while handling replace operation.
-
-2006-05-10 Kenichi Handa <handa@m17n.org>
-
- * xfaces.c (realize_default_face) [HAVE_X_WINDOWS]: If the font
- chosen for the default face was different from the frame font,
- adjust the frame font.
-
-2006-05-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c (Qduration) [MAC_OS]: Undo previous change.
- (syms_of_image) [MAC_OS]: Likewise.
- [MAC_OS] (gif_load): Emulate Graphic Control Extension block.
+2007-10-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * macfns.c (x_to_mac_color): Fix shift amount change.
- (mac_set_font) [USE_MAC_FONT_PANEL]: Use x_get_focus_frame.
- [USE_MAC_FONT_PANEL] (Fmac_set_font_panel_visibility): Doc fix.
+ * macterm.c (mac_load_query_font): Fix missing return value.
+ [USE_CG_DRAWING] (mac_define_fringe_bitmap, mac_destroy_fringe_bitmap):
+ Add BLOCK_INPUT.
- * macselect.c (Vmac_service_selection) [MAC_OSX]: Rename from
- Vmac_services_selection. All uses changed.
- (mac_store_service_event): Rename from mac_store_services_event in
- extern and calls.
+2007-10-08 Richard Stallman <rms@gnu.org>
- * macterm.c (Qservice) [MAC_OSX]: Rename from Qservices. All uses
- changed.
- [MAC_OSX] (mac_store_service_event): Rename from
- mac_store_services_event. All callers changed.
- [USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection): Add args
- FACE_ID and C. All callers changed.
- (x_free_frame_resources) [USE_MAC_FONT_PANEL]: Call
- mac_set_font_info_for_selection when focus frame is destroyed.
- (XTread_socket): Revert to FrontNonFloatingWindow/FrontWindow.
+ * xdisp.c (get_window_cursor_type): Implement documented behavior
+ for cursor-in-non-selected-windows = t.
- * macterm.h (mac_set_font_info_for_selection): Add 2nd and 3rd
- args in extern.
+2007-10-08 Jason Rumney <jasonr@gnu.org>
-2006-05-09 Chong Yidong <cyd@stupidchicken.com>
+ * w32.c (w32_get_resource): Always close registry keys.
- * keymap.c (describe_map): Avoid generating duplicate entries if
- the shadowed binding has the same definition.
+2007-10-08 Jason Rumney <jasonr@gnu.org>
-2006-05-09 Kenichi Handa <handa@m17n.org>
+ * makefile.w32-in (LIBS): Add COMCTL32.
- * keymap.c (push_key_description): Handle invalid character key.
+ * w32fns.c (globals_of_w32fns): Init common controls.
-2006-05-08 Kenichi Handa <handa@m17n.org>
+2007-10-08 Richard Stallman <rms@gnu.org>
- * callproc.c (Fcall_process): Use system_eol_type for encoding
- arguments if eol_type is not yet decided.
+ * image.c (our_memory_buffer): Rename from omfib_buffer.
- * coding.h (system_eol_type): Extern it.
+2007-10-08 Richard Stallman <rms@gnu.org>
- * coding.c (setup_coding_system): For invalid coding-system, set
- coding->eol_type to CODING_EOL_UNDECIDED.
- (encode_coding): Cancel previous change.
- (shrink_encoding_region): Likewise.
- (code_convert_region1): Likewise.
- (code_convert_string1): Likewise.
- (code_convert_string_norecord): Likewise.
+ * buffer.c (Foverlays_at): Doc fix.
- * fileio.c (choose_write_coding_system): Use system_eol_type for
- encoding if eol_type is not yet decided.
+2007-10-08 Stefan Monnier <monnier@iro.umontreal.ca>
- * process.c (setup_process_coding_systems): Use system_eol_type
- for encoding if eol_type is not yet decided.
- (read_process_output): Likewise.
- (send_process): Likewise.
+ * fns.c (Fplist_put): Preserve uneven tail data.
-2006-05-07 Juanma Barranquero <lekktu@gmail.com>
+2007-10-08 Peter O'Gorman <bug-gnu-emacs@mlists.thewrittenword.com> (tiny change)
- * minibuf.c (syms_of_minibuf) <history-length>: Fix typo in doc.
+ * termhooks.h (enum event_kind): Remove trailing comma.
-2006-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * frame.h (enum): Remove trailing comma.
- * mac.c (Fmac_clear_font_name_table): Move defun to macfns.c.
- (syms_of_mac): Likewise for defsubr.
+2007-10-08 Dhuvra Krishnamurthy <dhuvrakm@gmail.com> (tiny change)
- * macfns.c (mac_set_font): New function.
- (mac_frame_parm_handlers, syms_of_macfns): Replace x_set_font with it.
- (mac_window) [TARGET_API_MAC_CARBON && MAC_OSX]: Specify
- kWindowToolbarButtonAttribute when creating window.
- (Fmac_clear_font_name_table): Move from macfns.c.
- (syms_of_macfns): Likewise for defsubr.
- [USE_MAC_FONT_PANEL] (Fmac_set_font_panel_visibility): New defun.
- (syms_of_macfns) [USE_MAC_FONT_PANEL]: Defsubr it.
+ * w32proc.c (delete_child): Don't terminate threads of zombies.
- * macgui.h (USE_MAC_FONT_PANEL): Define to 1 if USE_ATSUI is set
- and build is done on Mac OS X 10.2 and later.
+2007-10-08 Martin Rudalics <rudalics@gmx.at>
- * macselect.c (mac_do_receive_drag): Remove unused variable `index'.
- (mac_store_services_event): Change return type in extern.
+ * keyboard.h (struct kboard): New elt Vlast_repeatable_command.
- * macterm.c (XLoadQueryFont) [USE_ATSUI]: Set font->mac_fontnum to
- FMFontFamily value.
- [USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection): New function.
- (x_new_focus_frame) [USE_MAC_FONT_PANEL]: Use it.
- (QCfamily, QCweight, QCslant, Qnormal, Qbold, Qitalic): Add extern.
- (QWindow) [MAC_OSX]: Likewise.
- (Qfont) [USE_MAC_FONT_PANEL]: Likewise.
- (Vmac_atsu_font_table) [USE_ATSUI]: New variable.
- (syms_of_macterm) [USE_ATSUI]: Defvar it.
- (Qtoolbar_switch_mode) [MAC_OSX]: New variable.
- (Qpanel_closed, Qselection) [USE_MAC_FONT_PANEL]: Likewise.
- (syms_of_macterm): Intern and staticpro them.
- (init_font_name_table) [USE_ATSUI]: Add data to Vmac_atsu_font_table.
- [TARGET_API_MAC_CARBON] (mac_store_event_ref_as_apple_event):
- New function.
- [USE_CARBON_EVENTS] (mac_handle_command_event): Use it.
- [MAC_OSX] (mac_store_services_event): Likewise.
- [USE_CARBON_EVENTS] (mac_handle_window_event) [MAC_OSX]: Handle
- kEventWindowToolbarSwitchMode event.
- (install_window_handler) [USE_CARBON_EVENTS && MAC_OSX]: Register it.
- [MAC_OSX] (mac_store_services_event): Change return type to OSStatus.
- [USE_MAC_FONT_PANEL] (mac_handle_font_event): New function.
- (install_window_handler) [USE_MAC_FONT_PANEL]: Install it.
- (XTread_socket): Select window on mouse click if x_focus_frame is NULL.
-
- * macterm.h (mac_set_font_info_for_selection): Add extern.
-
-2006-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c (Qduration) [MAC_OS]: New variable.
- (syms_of_image) [MAC_OS]: Intern and staticpro it.
- [MAC_OS] (gif_load): Save image extension data in img->data.lisp_val.
- [MAC_OSX] (image_load_quartz2d): Use cfstring_create_with_utf8_cstring
- instead of cfstring_create_with_string.
-
-2006-05-06 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (xframe): Print frame name.
- (xlist): New command to print a list (max 10 elements).
- (xpr): Print lisp object of any type.
- (pitx): Print it->pixel_width.
-
-2006-05-05 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (handle_composition_prop): Fix for the case of empty
- composition component.
-
-2006-05-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c (make_lispy_event) [MAC_OS]: Get Apple event info
- from event->arg.
-
- * termhooks.h (enum event_kind) [MAC_OS]: Update comment for
- MAC_APPLE_EVENT.
-
- * macterm.h (mac_make_lispy_event_code): Remove extern.
- (mac_post_mouse_moved_event): Add extern.
- (mac_aelist_to_lisp, mac_aedesc_to_lisp): Change arg 1 to
- `const AEDesc *' in externs.
- (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: New extern.
-
- * mac.c (mac_aelist_to_lisp, mac_aedesc_to_lisp): Change arg 1 to
- `const AEDesc *'.
- [TARGET_API_MAC_CARBON] (create_apple_event): New function.
- [TARGET_API_MAC_CARBON] (create_apple_event_from_event_ref): Use it.
- Use xrealloc instead of repeated xmalloc/xfree.
- [TARGET_API_MAC_CARBON] (create_apple_event_from_drag_ref):
- New function.
+ * keyboard.c (syms_of_keyboard): Set up new Lisp variable
+ last-repeatable-command.
+ (init_kboard): Initialize Vlast_repeatable_command.
+ (command_loop_1): Set it to real_this_command unless that was
+ bound to an input event.
+ (mark_kboards): Mark it.
- * macmenu.c (restore_menu_items, cleanup_popup_menu): Return a value.
-
- * macselect.c: Update copyright year.
- (mac_store_apple_event): Change return type to void in extern.
- (mac_handle_apple_event): Don't get return value from
- mac_store_apple_event.
- [TARGET_API_MAC_CARBON] (Vmac_dnd_known_types): New variable.
- (syms_of_macselect) [TARGET_API_MAC_CARBON]: Defvar it.
- [TARGET_API_MAC_CARBON] (mac_do_track_drag): Move function from
- macterm.c. Use Vmac_dnd_known_types as acceptable flavors.
- [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Likewise. New
- implementation using create_apple_event_from_drag_ref.
- [TARGET_API_MAC_CARBON] (mac_do_track_dragUPP)
- (mac_do_receive_dragUPP): Move variables from macterm.c.
- (install_drag_handler, remove_drag_handler): New functions.
-
- * macterm.c (XTread_socket) [TARGET_API_MAC_CARBON]: Try window
- path select also for proxy icon click.
- [TARGET_API_MAC_CARBON] (mac_post_mouse_moved_event): New function.
- [USE_TOOLKIT_SCROLL_BARS] (scroll_bar_timer_callback): Use it.
- (xlfdpat_create): Remove unused label `error' and trailing sentences.
- (mac_do_track_drag, mac_do_receive_drag): Move functions to macselect.c.
- (mac_do_track_dragUPP, mac_do_receive_dragUPP): Move variables to
- macselect.c.
- (install_drag_handler, remove_drag_handler): Add extern.
- (mac_store_apple_event): Change return type to void. All uses changed.
- Create Lisp object from Apple event and store it into input event.
- (mac_make_lispy_event_code): Remove function.
- [TARGET_API_MAC_CARBON] (mac_store_drag_event): New function.
- (install_window_handler): Call install_drag_handler.
- (remove_window_handler): Call remove_drag_handler.
+2007-10-08 Richard Stallman <rms@gnu.org>
-2006-05-03 Richard Stallman <rms@gnu.org>
+ * eval.c (condition-case): Doc fix.
- * sound.c (Fplay_sound_internal): Dynamically allocate
- current_sound_device and current_sound.
- (sound_cleanup): Free them.
+2007-10-08 Masatake YAMATO <jet@gyve.org>
- * minibuf.c (read_minibuf): Don't use read_minibuf_noninteractive
- when inside a keyboard macro.
+ * xfaces.c (tty_supports_face_attributes_p): Fix code
+ for LFACE_INVERSE_INDEX and LFACE_BACKGROUND_INDEX; code
+ was copied and not edited.
-2006-05-02 Andreas Schwab <schwab@suse.de>
+2007-10-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ Add new `input-decode-map' keymap and use it for terminal
+ escape sequences.
+ * keyboard.h (struct kboard): Add Vinput_decode_map.
+ Remove Vlocal_key_translation_map.
+ * keyboard.c (read_key_sequence): Add support for input-decode-map.
+ (init_kboard): Init input-decode-map.
+ Replace local-key-translation-map back with key-translation-map.
+ (syms_of_keyboard): Declare input-decode-map.
+ Remove local-key-translation-map. Update docstrings.
+ (mark_kboards): Mark Vinput_decode_map.
+ Don't mark Vlocal_key_translation_map.
+ * keymap.c (Fdescribe_buffer_bindings): Describe input-decode-map.
+ Replace local-key-translation-map back with key-translation-map.
+ * term.c (term_get_fkeys_1, CONDITIONAL_REASSIGN):
+ Bind in input-decode-map rather than function-key-map.
+
+ * lisp.h (XSETPSEUDOVECTOR): Don't set the tag anymore.
+ This was made redundant by the previous introduction of XSETPVECTYPE.
- * xmenu.c (restore_menu_items): Return a value.
+2007-10-09 Richard Stallman <rms@gnu.org>
-2006-05-01 Martin Rudalics <rudalics@gmx.at>
+ * image.c (free_bitmap_record): Rename from Free_Bitmap_Record.
- * syntax.c (Fforward_comment): Detect generic comment at beginning of
- buffer when moving backwards.
+2007-09-29 Richard Stallman <rms@gnu.org>
-2006-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * eval.c (internal_condition_case_2, internal_condition_case_1)
+ (internal_condition_case): Reenable abort if x_catching_errors ()
+ to see if that really happens and why.
- * dispnew.c (update_window): Don't set changed_p when mode/header
- line is updated.
+2007-10-06 Andreas Schwab <schwab@suse.de>
- * xdisp.c (prepare_menu_bars) [MAC_OS]: Call mac_update_title_bar.
- (get_glyph_face_and_encoding, get_char_face_and_encoding):
- Don't distinguish known faces from others.
+ * fileio.c (Fwrite_region): Ignore EINVAL error from fsync.
- * mac.c (mac_coerce_file_name_ptr): Try typeFSRef if coercion
- through typeFileURL failed.
+2007-10-04 Juanma Barranquero <lekktu@gmail.com>
- * macfns.c (mac_update_title_bar): New function.
- [TARGET_API_MAC_CARBON] (mac_update_proxy_icon): New function.
- (show_hourglass, hide_hourglass) [USE_CG_DRAWING]:
- Call mac_prepare_for_quickdraw.
+ * image.c (syms_of_image) <image-types>: Fix typo in docstring.
- * macgui.h (USE_ATSUI): Set default to 1 if MAC_OSX is defined.
- (USE_CG_DRAWING): Don't define if compiled on Mac OS X 10.1.
- (enum pcm_status): New enum.
- (XCHARSTRUCTROW_CHAR_VALID_P, XCHARSTRUCTROW_SET_CHAR_VALID)
- (XCharStructRow): Remove. Now validity is represented by
- non-negativeness of sum of ascent and descent.
- (struct MacFontStruct): Change type of member `rows'.
- (struct _XGC) [USE_CG_DRAWING]: Add member `clip_rects'.
+2007-10-03 Stefan Monnier <monnier@iro.umontreal.ca>
- * macterm.c (mac_draw_line, mac_draw_line_to_pixmap):
- Adjust endpoints of strictly horizontal/vertical lines.
- (mac_set_clip_rectangles) [USE_CG_DRAWING]: Set clip_rects.
- (pcm_init, pcm_get_status): New functions.
- (x_per_char_metric, XLoadQueryFont): Use them instead of
- XCharStructRow and related macros.
- (x_draw_relief_rect): Don't adjust arguments of mac_draw_line.
- (x_free_frame_resources) [TARGET_API_MAC_CARBON]: Free FRAME_FILE_NAME.
- (XTread_socket) [TARGET_API_MAC_CARBON]: Handle proxy icon drag
- and window path pop-up menu on title bar.
- (mac_use_core_graphics) [USE_CG_DRAWING]: Set default to 1.
+ * frame.h (struct frame): Don't try to GC-mark menu_bar_items_used.
- * macterm.h (mac_update_title_bar): Add extern.
- (struct mac_output) [TARGET_API_MAC_CARBON]: New member `file_name'.
- (FRAME_FILE_NAME): New macro.
+2007-10-02 Stefan Monnier <monnier@iro.umontreal.ca>
- * unexmacosx.c (unexec): Error if trying unexec from dumped executable.
+ * window.h (struct window):
+ * window.c (struct save_window_data, struct saved_window):
+ * termhooks.h (struct terminal):
+ * process.h (struct Lisp_Process):
+ * frame.h (struct frame):
+ * buffer.h (struct buffer):
+ * lisp.h (struct Lisp_Vector, struct Lisp_Char_Table)
+ (struct Lisp_Bool_Vector, struct Lisp_Subr, struct Lisp_Hash_Table):
+ The size field of (pseudo)vectors is now unsigned.
+ (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG): Simplify accordingly.
-2006-04-30 Richard Stallman <rms@gnu.org>
+ * lisp.h (struct Lisp_Hash_Table): Move non-traced elements at the end.
+ Turn `count' into an integer.
- * keymap.c (Fdefine_key): Improve error message
- when KEY begins with a non-prefix key.
+ * fns.c (make_hash_table, hash_put, hash_remove, hash_clear)
+ (sweep_weak_table, sweep_weak_hash_tables, Fhash_table_count):
+ * print.c (print_object) <HASH_TABLE_P>: `count' is an int.
+ * alloc.c (allocate_hash_table): Use ALLOCATE_PSEUDOVECTOR.
+ (mark_object) <HASH_TABLE_P>: Use mark_vectorlike.
-2006-04-30 Martin Rudalics <rudalics@gmx.at>
+ * alloc.c (allocate_pseudovector): New fun.
+ (ALLOCATE_PSEUDOVECTOR): New macro.
+ (allocate_window, allocate_terminal, allocate_frame)
+ (allocate_process): Use it.
+ (mark_vectorlike): New function.
+ (mark_object) <FRAMEP, WINDOWP, BOOL_VECTOR_P, VECTORP>: Use it.
+ (mark_terminals): Use it.
+ (Fmake_bool_vector, Fmake_char_table, make_sub_char_table)
+ (Fmake_byte_code): Use XSETPVECTYPE.
- * syntax.c (Fforward_comment): Don't forget to break out of the loop
- when we skipped backward over a generic comment.
+ * frame.c (Fframe_parameters): Minor simplification.
-2006-04-27 Nick Roberts <nickrob@snap.net.nz>
+ * insdel.c (adjust_markers_for_insert): Generalize assertion checks.
- * .gdbinit (pp1, pv1): Only print value as expression is now
- printed out by gud-print.
- (pv1): Correct doc string.
+ * marker.c (Fmarker_buffer): Make test for odd case into a failure.
-2006-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
+ * buffer.c (Fget_buffer_create, init_buffer_once):
+ * lread.c (defsubr):
+ * window.c (Fcurrent_window_configuration): Use XSETPVECTYPE.
- * keymap.c (store_in_keymap): Change `def' arg to not be `register'.
- Seems to trigger a bug in gcc-amd64 4.0.2 20051125 (Red Hat 4.0.2-8):
- keymap.c:895: error: address of register variable `def' requested.
+ * lisp.h (ARRAY_MARK_FLAG, PSEUDOVECTOR_FLAG): Don't let them be
+ defined differently in the m/*.h files.
+ (XCHAR_TABLE, XBOOL_VECTOR): Add assertion checking.
+ (XSETPVECTYPE): New macro.
+ (XSETPSEUDOVECTOR): Use it.
-2006-04-26 Jason Rumney <jasonr@gnu.org>
+ * buffer.c (syms_of_buffer) <local-abbrev-table>: Move from abbrev.c.
+ (DEFVAR_PER_BUFFER, defvar_per_buffer): Move from lisp.h and lread.c.
- * w32term.c (construct_mouse_wheel): Handle negative coordinates.
+ * lisp.h (defvar_per_buffer, DEFVAR_PER_BUFFER):
+ * lread.c (defvar_per_buffer):
+ * abbrev.c (syms_of_abbrev) <local-abbrev-tabl>: Move to buffer.c.
- * w32fns.c (w32_wnd_proc) <WM_LBUTTONDOWN, WM_RBUTTONDOWN>:
- <WM_LBUTTONUP, WM_RBUTTONUP>: Call signal_user_input in the cases
- where we preempt mouse_button_timer.
+ * window.c (candidate_window_p): Only consider as visible frames that
+ are on the same terminal.
-2006-04-25 Miles Bader <miles@gnu.org>
+ * m/ibms390x.h (MARKBIT): Remove unused macro.
- * editfns.c (Ffield_beginning, find_field): Undo change of 2006-04-23.
+2007-10-01 Juanma Barranquero <lekktu@gmail.com>
-2006-04-24 Stefan Monnier <monnier@iro.umontreal.ca>
+ * lread.c (Fload): Fix typo in docstring.
- * process.h: Include headers for pid_t.
+2007-10-01 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
-2006-04-24 Kim F. Storm <storm@cua.dk>
+ * floatfns.c (Fexpt): Manually check for overflows, so that a power
+ of a non-zero value can't yield zero.
- * xdisp.c (fill_stretch_glyph_string): Set s->nchars = 1 for code which
- does last_glyph=s->first_glyph+s->nchars-1, e.g. if stretch has relief.
- (produce_stretch_glyph): Assume that face box height and width is
- already included in stretch glyph size so caller doesn't have to
- consider the extra space otherwise added (fixes problem in ses.el).
+2007-09-29 Stefan Monnier <monnier@iro.umontreal.ca>
- * frame.c (x_set_font): Clear f->n_tool_bar_rows and current frame
- matrices to force recalculation of tool-bar height after font change.
+ * term.c (term_clear_mouse_face, term_mouse_highlight)
+ (tty_write_glyphs_with_face): Only define is HAVE_GPM.
- * xdisp.c (tool_bar_lines_needed): New local `temp_row' for clarity.
- Clear it when done, so we don't accidentally draw a second copy of
- the tool-bar after resetting f->n_tool_bar_rows.
- (redisplay_tool_bar): Update tool-bar-lines frame parameter whenever
- we recalculate f->n_tool_bar_rows.
+ * print.c (safe_debug_print): Use XHASH.
-2006-04-23 Lars Hansen <larsh@soem.dk>
+ * lisp.h (DECL_ALIGN, USE_LSB_TAG): Move logic to before definition of
+ Lisp elements such as tags.
+ (XHASH): New macro.
+ (EQ): Use it.
+ (SREF, SSET, STRING_COPYIN): Use SDATA.
+ (VOID_TO_LISP, CVOID_TO_LISP, LISP_TO_VOID, LISP_TO_CVOID): Remove.
- * editfns.c (find_field): Fix comment.
- (Ffield_beginning): Fix bug when POS is at field beginning.
+ * alloc.c (mark_terminal): Remove left-over declaration.
+ (enum mem_type): Replace all vector subtypes -> MEM_TYPE_VECTORLIKE.
+ (allocate_vectorlike): Remove type argument. Adjust callers.
+ (live_vector_p, mark_maybe_pointer, valid_lisp_object_p):
+ Only handle the one remaining MEM_TYPE_VECTORLIKE.
-2006-04-22 Eli Zaretskii <eliz@gnu.org>
+ * alloc.c (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT): New macros
+ to avoid unnecessary BLOCK_INPUTs when SYNC_INPUT is used.
+ (xmalloc, xrealloc, xfree, lisp_malloc, lisp_free, lisp_align_malloc)
+ (lisp_align_free, make_interval, allocate_string, allocate_string_data)
+ (make_float, Fcons, allocate_vectorlike, Fmake_symbol, allocate_misc):
+ Use them.
- * puresize.h (BASE_PURESIZE): Increase to 1205000.
+ * xfaces.c (load_face_font, free_realized_face, clear_face_gcs):
+ Don't let signal handlers run when a GC is freed but not yet NULL'ed.
+ (x_free_gc): Remove BLOCK_INPUT since it's now redundant.
-2006-04-21 Kim F. Storm <storm@cua.dk>
+2007-09-28 Dan Nicolaescu <dann@ics.uci.edu>
- * xdisp.c (redisplay_window): Fix last change. Don't recenter if
- window start is at BEGV.
+ * Makefile.in (lisp, shortlisp): Delete server.elc, it is not
+ loaded by default.
- * dispextern.h (struct image): New member `corners'.
- (TOP_CORNER, LEFT_CORNER, BOT_CORNER, RIGHT_CORNER): New macros.
+2007-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
- * image.c (four_corners_best): New arg CORNERS specifies what pixels
- to look at in case image has margin.
- (x_create_bitmap_mask): Pass NULL for CORNERS to four_corners_best.
- (image_background, image_background_transparent)
- (x_build_heuristic_mask): Pass img->corners to four_corners_best.
- (gif_load): Set img->corners according to image's margin spec.
- Use img->corners values directly where applicable.
- Save image extension data in img->data.lisp_val.
- (gif_clear_image): New function to free img->data.lisp_val.
- (gif_type): Use it instead of generic x_clear_image.
- (Fimage_extension_data): New defun.
- (syms_of_image): Defsubr it.
+ * term.c (Fgpm_mouse_start): Don't signal an error if already activated
+ on this tty.
+ (Fgpm_mouse_stop): Only deactivate if it was activated on this tty.
-2006-04-21 John Sullivan <john@wjsullivan.net> (tiny change)
+ * term.c (mouse_face_window): Rename from Qmouse_face_window.
+ Update all users.
+ (handle_one_term_event): Use Gpm_DrawPointer.
+ (Fgpm_mouse_start): Rename from Fterm_open_connection.
+ Signal errors instead of returning nil. Always return nil.
+ (Fgpm_mouse_stop): Rename from Fterm_close_connection.
+ Make it a noop if gpm-mouse was not activated.
+ (syms_of_term): Update names.
- * window.c (Fdisplay_buffer): Doc fix.
+2007-09-27 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-21 Eli Zaretskii <eliz@gnu.org>
+ * sysdep.c (narrow_foreground_group, widen_foreground_group): Static.
+ (init_sys_modes): Check that gpm_tty is the current tty.
- * s/ms-w32.h (SYSTEM_PURESIZE_EXTRA): Increase to 25000.
+ * alloc.c (allocate_terminal): Set the vector size to only count the
+ lisp fields. Initialize those to nil.
+ (mark_object): Don't treat terminals specially.
+ (mark_terminal): Remove.
+ (mark_terminals): Use mark_object instead.
-2006-04-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * termhooks.h (struct terminal): Move all Lisp_Object fields traced by
+ the GC to the beginning.
- * image.c [MAC_OS] (xpm_load_image): Fill in background field
- while we have ximg handy.
+ * indent.h:
+ * indent.c: Use EMACS_INT for ints coming from Elisp data.
- * macmenu.c (restore_menu_items, save_menu_items): New functions
- from xmenu.c.
- (set_frame_menubar, digest_single_submenu): Apply 2006-04-18
- changes for xmenu.c.
+ * indent.c (Fmove_to_column): Use EMACS_INT for buffer positions.
- * macterm.c (x_per_char_metric): Return NULL if glyph width is 0.
- (add_mac_font_name): New function.
- (init_font_name_table): Use it. Adopt the first found font from
- those having the same family name.
+2007-09-25 Jason Rumney <jasonr@gnu.org>
-2006-04-21 Nick Roberts <nickrob@snap.net.nz>
+ * frame.c (make_terminal_frame): Remove special case for WINDOWSNT.
- * xdisp.c (note_mouse_highlight): Use build_string.
+ * w32console.c (create_w32cons_output): Remove.
-2006-04-20 Lars Hansen <larsh@soem.dk>
+ * term.c (init_tty): Call init_sys_modes on WINDOWSNT also.
- * textprop.c (Fremove_list_of_text_properties):
- Ensure modify_region is called only when buffer is modified and that
- signal_after_change is allways called in that case.
+ * sysdep.c (init_sys_modes): Use set_terminal_modes_hook.
+ (reset_sys_modes): Use reset_terminal_modes_hook.
- * print.c (PRINTFINISH): Call signal_after_change.
+2007-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-20 Kim F. Storm <storm@cua.dk>
+ * eval.c (do_autoload): Don't output any message.
- * xdisp.c (redisplay_window): Fix last change.
+2007-09-24 Juri Linkov <juri@jurta.org>
- * xdisp.c (redisplay_window): If current window start is not at the
- beginning of a line, select a new window start if buffer is modified
- and window start is in the modified region, but the first change is
- before window start.
+ * emacs.c (standard_args): Change priority of "--no-splash"
+ from 40 to 3. Add "--no-desktop" with the same priority.
-2006-04-18 Richard Stallman <rms@gnu.org>
+2007-09-23 Dmitry Antipov <dmantipov@yandex.ru>
- * xmenu.c (restore_menu_items, save_menu_items): New fns.
- (set_frame_menubar): Use save_menu_items. Save updated vector in
- the frame before unwinding it. Don't use unuse_menu_items.
- Don't use discard_menu_items.
- (digest_single_submenu): Abort if an item is not in a pane.
- (init_menu_items): Put the error check at the top.
+ * alloc.c (gc_sweep): Check cons cell mark bits word by word
+ and optimize the case where they are all 1.
- * keymap.c (describe_map): Make "shadowed" warning more verbose.
+2007-09-23 Johannes Weiner <hannes@saeurebad.de>
- * window.c (adjust_window_trailing_edge): Correctly distinguish
- series vs parallel cases, even when window has no parent.
+ * lisp.h (abs): Define if not defined.
+ * keyboard.c, sound.c, w32term.c, xfaces.c, xterm.c:
+ Don't define `abs', since it's defined in lisp.h.
- * abbrev.c (record_symbol): New function.
- (Finsert_abbrev_table_description): Sort the abbrevs alphabetically.
+2007-09-22 Eli Zaretskii <eliz@gnu.org>
-2006-04-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * term.c (DEV_TTY): New macro. Provide a definition for MS-Windows.
+ (FRAME_TERMCAP_P) [WINDOWSNT]: Don't define to zero.
+ (Fcontrolling_tty_p, Fresume_tty, dissociate_if_controlling_tty)
+ (init_tty): Use DEV_TTY instead of "/dev/tty".
+ [WINDOWSNT]: No need to protect from NAME arg being null.
- * image.c (x_create_bitmap_from_data) [MAC_OS]: Don't check return
- value of xmalloc.
+2007-09-21 Dan Nicolaescu <dann@ics.uci.edu>
- * mac.c (mac_coerce_file_name_ptr, mac_coerce_file_name_desc)
- (create_apple_event_from_event_ref, xrm_get_preference_database)
- (cfstring_create_normalized): Don't check return value of xmalloc.
+ * term.c (Fsuspend_tty): Run suspend-tty-functions before cleaning
+ up the tty state.
- * macselect.c (get_scrap_target_type_list, defer_apple_events)
- (copy_scrap_flavor_data, mac_handle_service_event): Don't check
- return value of xmalloc/xrealloc.
+2007-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
- * macterm.c (XCreateGC, x_per_char_metric, xlfdpat_create)
- (init_font_name_table, init_font_name_table, mac_do_list_fonts)
- (XLoadQueryFont, mac_store_apple_event): Don't check return value
- of xmalloc.
+ * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
+ (gpm_tty): Change its type.
+ * term.c (term_gpm): Delete. Use gpm_tty's NULLness instead.
+ (gpm_tty): Change its type and initialize it.
+ (Fterm_open_connection): Check the frame is indeed a tty.
+ Use the new gpm_tty.
+ (Fterm_close_connection): Use the new gpm_tty.
+ * keyboard.c (tty_read_avail_input): Use the new gpm_tty.
+ * sysdep.c (init_sys_modes): term_gpm -> gpm_tty.
-2006-04-17 Kim F. Storm <storm@cua.dk>
+2007-09-21 Juanma Barranquero <lekktu@gmail.com>
- * window.c (coordinates_in_window): On the vertical border,
- calculate the row number measured from the top of the window, not
- the top of the frame.
- (window_loop): Test w->dedicated with !NILP instead of EQ Qt.
- (window_scroll_pixel_based): Fix off-by-one bug in 2002-12-23 change.
+ * w32term.c (x_draw_glyph_string): Use strike_through_color, not
+ underline_color, to draw strike-through.
-2006-04-16 Eli Zaretskii <eliz@gnu.org>
+2007-09-21 Stefan Monnier <monnier@iro.umontreal.ca>
- * s/ms-w32.h (SYSTEM_PURESIZE_EXTRA): Reduce to 24000.
+ * lisp.h (allocate_terminal): Declare.
-2006-04-16 Romain Francoise <romain@orebokech.com>
+ * window.c (candidate_window_p): Consider frames that are being placed
+ by the user as somewhere between visible and iconified.
+ (window_loop): Prefer windows on the current frame.
+ (Fselect_window): Move the use of select-frame to the beginning so we
+ can just delegate all the work (it'll call us back anyway).
- * puresize.h (BASE_PURESIZE): Decrement back to 1200000.
+ * frame.c (Qdisplay_environment_variable):
+ * frame.h (Qdisplay_environment_variable): Delete.
-2006-04-16 Andreas Schwab <schwab@suse.de>
+ * .gdbinit (xbacktrace): Print the arg's address rather than the value
+ of the first arg, since that value may be a union.
- * puresize.h (PURESIZE_RATIO): Reduce to 10/6.
+ * callproc.c (child_setup, getenv_internal): Use the frame's `display'
+ parameter rather than Qdisplay_environment_variable. If all else
+ fails, look for DISPLAY in initial-environment.
-2006-04-15 Romain Francoise <romain@orebokech.com>
+2007-09-21 Glenn Morris <rgm@gnu.org>
- * puresize.h (BASE_PURESIZE): Increment to 1210000.
+ * Makefile.in (emacstool): Remove target.
+ (lisp, shortlisp): Remove termdev.elc.
-2006-04-13 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+2007-09-21 Markus Triska <markus.triska@gmx.at>
- * print.c (Fprin1_to_string): Mention in the `doc' that the
- behavior is modified by `print-level' and `print-length'.
+ * xterm.c (x_delete_display): Compile session management conditionally.
-2006-04-13 Kenichi Handa <handa@m17n.org>
+2007-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
- * coding.c (setup_coding_system): If eol-type is not yet decided
- and system_eol_type is not LF, set CODING_REQUIRE_ENCODING_MASK.
- If coding_system is nil, return 0.
- (code_convert_region1): Even if coding_system is nil, don't skip
- conversion if system_eol_type is not LF.
- (code_convert_string1): Likewise.
- (code_convert_string_norecord): Likewise.
+ * callproc.c (getenv_internal_1): New function.
+ (getenv_internal): Use it.
+ (Fgetenv_internal): Use it. Accept an env-list as optional arg.
-2006-04-13 Kenichi Handa <handa@m17n.org>
+ * terminal.c (get_terminal): Don't accept ints to represent terminals.
+ (Fterminal_name, Fterminal_parameters, Fterminal_parameter)
+ (Fset_terminal_parameter): Work with dead terminals as well.
+ (Fmodify_terminal_parameters): Remove.
- * coding.c (setup_coding_system): Fix previous change.
- (encode_coding): If eol_type is not yet decided, use system_eol_type.
- (shrink_encoding_region): If eol_type is not yet decided and
- system_eol_type is not LF, don't shrink.
+ * terminal.c (get_terminal): Handle terminals.
+ Make sure the terminal returned is live.
+ (create_terminal): Use allocate_terminal.
+ (mark_terminals): Move to alloc.c.
+ (delete_terminal): Use terminal->name as liveness status.
+ NULL out fields after freeing their contents.
+ Don't deallocate the object.
+ (Fframe_terminal): Use FRAME_TERMINAL. Return the terminal object
+ rather than an int.
+ (Fterminal_live_p): Accept non-integer arguments.
+ (Fterminal_list): Return terminal objects rather than an ints.
-2006-04-13 Nick Roberts <nickrob@snap.net.nz>
+ * alloc.c (enum mem_type): New member for `terminal' objects.
+ (allocate_terminal): New function.
+ (mark_maybe_pointer, valid_lisp_object_p, mark_object):
+ Handle terminals.
+ (mark_terminal): New fun.
+ (mark_terminals): Move from terminal.c.
- * xdisp.c (note_mouse_highlight): Add help echo for dragging vertical
- line.
+ * term.c (get_tty_terminal): Don't treat output_initial specially.
+ (Fsuspend_tty, Fresume_tty): Use terminal objects rather than ints.
+ (delete_tty): Use terminal->name as liveness status.
-2006-04-12 Richard Stallman <rms@gnu.org>
+ * termhooks.h (struct terminal): Make it into a pseudovector.
+ Remove `deleted' replaced by checking `name's nullness.
- * keyboard.c (read_key_sequence): Explicitly avoid keybuf[-1].
+ * print.c (print_object): Handle terminals.
- * process.c (conv_lisp_to_sockaddr): If FAMILY unknown, just return.
- (Fprocess_send_eof): Abort if fail to open null device.
+ * lisp.h (enum pvec_type): New `terminal' pseudovector.
+ (XTERMINAL, XSETTERMINAL, TERMINALP, GC_TERMINALP): New macros.
-2006-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * frame.c (make_terminal_frame):
+ * keyboard.c (tty_read_avail_input):
+ * w32term.c (x_delete_terminal):
+ * xfns.c (Fx_create_frame, x_create_tip_frame):
+ * xterm.c (x_delete_terminal): Use terminal->name as liveness status.
- * fns.c [HAVE_MENUS && MAC_OS]: Include macterm.h.
+2007-09-20 Glenn Morris <rgm@gnu.org>
- * image.c [MAC_OS] (xpm_load_image): Add parentheses around
- assignment used as truth value. Add explicit braces to avoid
- ambiguous `else'.
- [MAC_OS] (gif_load): Remove unused variable `gcpro1'.
+ * process.c (Fmake_network_process): Doc fix.
- * lisp.h (syms_of_fontset, Fset_fontset_font): Put extern and
- EXFUN in #ifdef HAVE_WINDOW_SYSTEM.
- (syms_of_xfns, syms_of_xsmfns, syms_of_xselect, syms_of_xterm):
- Put externs in #ifdef HAVE_X_WINDOWS.
- (syms_of_macfns, syms_of_macselect, syms_of_macterm)
- (syms_of_macmenu, syms_of_mac) [MAC_OS]: Add externs.
- (init_mac_osx_environment) [MAC_OSX]: Add extern.
+2007-09-19 Jason Rumney <jasonr@gnu.org>
- * mac.c (init_process): Remove undef.
- (select) [MAC_OSX]: Undefine before including sysselect.h.
- (posix_pathname_to_fsspec, fsspec_to_posix_pathname) [MAC_OSX]:
- Remove functions and prototypes.
- (parse_value): Add parentheses around + inside shift.
- (path_from_vol_dir_name): Make static.
- (get_temp_dir_name): Remove unused variables `cpb' and `dir_name'.
- [!MAC_OSX] (get_path_to_system_folder): Likewise.
- (Fmac_get_file_creator, Fmac_get_file_type): Remove unused
- variable `cCode'.
- (Fmac_coerce_ae_data): Remove unused variables `fref' and `fs'.
- (Fmac_get_preference): Add explicit braces to avoid ambiguous `else'.
+ * dispextern.h (w32_init_fringe, mac_init_fringe): Declare rif argument.
- * macfns.c (x_to_mac_color): Remove unused variable `tail'.
- (x_set_mouse_color): Remove unused variable `dpy'.
- (Fx_create_frame): Remove unused variable `x_frame_count'.
- (Fx_server_version): Add explicit braces to avoid ambiguous `else'.
- (x_sync): Move from macterm.c.
- (Fx_file_dialog): Remove unused variable `default_filter_index'.
+2007-09-19 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * macmenu.c (min_menu_id): Make element type explicit.
+ * coding.c (detect_eol_type, detect_eol_type_in_2_octet_form):
+ Fix a C warning regarding variable constness.
- * macselect.c (get_flavor_type_from_symbol): Remove unused
- variable `val'.
- (get_scrap_private_timestamp, x_get_foreign_selection)
- (copy_scrap_flavor_data): Add explicit braces to avoid ambiguous `else'.
- (Fmac_process_deferred_apple_events): Remove unused variables
- `keyword', `reply', `apple_event', `count', and `err'.
+ * xterm.c (handle_one_xevent): Fix a C warning.
- * macterm.c: Don't include gnu.h.
- (x_io_error_quitter, x_draw_image_foreground_1): Remove prototypes.
- (x_sync): Move to macfns.c.
- [USE_CG_DRAWING] (mac_define_fringe_bitmap): Remove unused
- variable `mask_bits'.
- (mac_compute_glyph_string_overhangs): Avoid ambiguous `else'.
- (x_draw_image_glyph_string): Remove unused variable `pixmap'.
- (x_mac_to_emacs_modifiers): Remove function.
- (XTset_vertical_scroll_bar, mac_handle_visibility_change)
- (x_make_frame_visible, xlfdpat_create, mac_handle_command_event):
- Add explicit braces to avoid ambiguous `else'.
- (x_make_frame_visible): Remove unused variables `type',
- `original_top', and `original_left'.
- (mac_do_list_fonts, XTread_socket): Add parentheses around && within ||.
- (x_load_font): Remove unused variables `full_name', and `value'.
- (do_get_menus, do_init_managers, do_check_ram_size) [!MAC_OS8]:
- Remove functions.
- (do_zoom_window): Reorganize variables with respect to conditionals.
- (init_command_handler): Remove unused variable `err'.
- [MAC_OSX] (mac_check_bundle): Remove unused variable `child'.
+2007-09-18 Jason Rumney <jasonr@gnu.org>
- * macterm.h (x_set_mouse_position, x_set_mouse_pixel_position)
- (x_make_frame_invisible, x_iconify_frame, x_free_frame_resources)
- (x_destroy_window, x_wm_set_size_hint, x_delete_display, XFreeGC)
- (do_menu_choice, have_menus_p, x_real_positions)
- (x_set_menu_bar_lines, x_pixel_width, x_pixel_height, x_char_width)
- (x_char_height, x_sync, x_set_tool_bar_lines, x_activate_menubar)
- (free_frame_menubar): Add externs.
+ * w32fns.c (Fx_focus_frame): Rename from Fw32_focus_frame.
- * unexmacosx.c: Include config.h before using HAVE_MALLOC_MALLOC_H.
- (malloc, realloc, free): Add undefs.
- (read_load_commands): Remove unused variable `n' and `j'.
- (copy_data_segment): Remove unused variable `r'.
+2007-09-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * xdisp.c (get_glyph_string_clip_rects): Add parentheses around &&
- within ||. Add explicit braces to avoid ambiguous `else'.
- (dump_glyph_row): Remove label for `inverse_p' from legend.
+ * gtkutil.c (gdpy_def): New variable.
+ (xg_initialize): Initialize gdpy_def.
+ (xg_display_close): If no other display exists, set gdpy_def to a
+ new connection.
- * xfaces.c (Finternal_merge_in_global_face, try_font_list):
- Add explicit braces to avoid ambiguous `else'.
+2007-09-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2006-04-11 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+ * gtkutil.c (xg_get_image_for_pixmap): Always create a GdkPixbuf
+ when we have no file name for the icon.
+ (xg_tool_bar_expose_callback): Remove.
+ (xg_create_tool_bar): Don't connect expose signal to
+ xg_tool_bar_expose_callback.
+ (xg_get_file_with_chooser): Move GCPRO1 after declarations.
- * dispnew.c (init_display): Don't init X display if the user asked
- for a non-X display.
+2007-09-16 Andreas Schwab <schwab@suse.de>
-2006-04-12 Kenichi Handa <handa@m17n.org>
+ * alloc.c (reset_malloc_hooks): Set the hooks to the previous
+ values instead of zapping them.
- * coding.c (setup_coding_system): Use system_eol_type for default
- coding->eol_type.
+2007-09-14 Glenn Morris <rgm@gnu.org>
-2006-04-11 Dan Nicolaescu <dann@ics.uci.edu>
+ * fringe.c (init_fringe_bitmap) <swap_nibble>: Move to file scope.
+ * gtkutil.c (xg_separator_p) <separator_names>: Move to file scope.
+ * image.c (our_memory_fill_input_buffer) <buffer>: Move to file
+ scope and rename to omfib_buffer for clarity.
+ (gif_load) <interlace_start, interlace_increment>: Move to file scope.
- * lisp.h (wrong_type_argument): Mark as NO_RETURN.
+2007-09-14 Kenichi Handa <handa@m17n.org>
- * data.c (wrong_type_argument): Try to avoid compiler warnings due
- to the fact the function is now marked as NO_RETURN.
+ * xterm.c (handle_one_xevent): Skip decoding if nbytes is zero.
-2006-04-10 Eli Zaretskii <eliz@gnu.org>
+2007-09-13 Jason Rumney <jasonr@gnu.org>
- * s/ms-w32.h (pid_t) [_MSC_VER]: New typedef.
+ * fringe.c (w32_init_fringe, mac_init_fringe): Add rif argument.
-2006-04-10 Romain Francoise <romain@orebokech.com>
+ * w32term.c (w32_term_init): Pass rif to w32_init_fringe.
- * xrdb.c (gethomedir): Use xstrdup.
+ * macterm.c (mac_initialize): Don't call mac_init_fringe here.
+ (mac_term_init): Call here instead, passing rif.
-2006-04-10 Andreas Schwab <schwab@suse.de>
+2007-09-13 Glenn Morris <rgm@gnu.org>
- * xrdb.c (gethomedir): Make sure to always return a pointer that
- can be passed to free.
+ * s/hpux.h: No longer define `static' as nothing.
-2006-04-09 Richard Stallman <rms@gnu.org>
+2007-09-13 Johan Bockg,Ae(Brd <bojohan@gnu.org>
- * lisp.h (Fkill_emacs): Undo previous change.
+ * callint.c (Fcall_interactively): Remove unused var `fun'.
-2006-04-08 Richard Stallman <rms@gnu.org>
+2007-09-12 Romain Francoise <romain@orebokech.com>
- * search.c (boyer_moore): Test ch >= 0400, not >.
+ * window.c (prefer_window_split_horizontally, display_buffer):
+ Revert 2007-09-08 change.
-2006-04-09 Dan Nicolaescu <dann@ics.uci.edu>
+2007-09-12 Glenn Morris <rgm@gnu.org>
- * puresize.h (pure_write_error): Mark as NO_RETURN.
+ * alloca.c: Remove file.
+ * Makefile.in (alloca): Do not undef.
+ (allocaobj, alloca.o): Remove.
+ (otherobj): Remove allocaobj.
+ * keyboard.c (command_loop_1): Remove #ifdef C_ALLOCA block.
+ * regex.c (C_ALLOCA): Remove all references and code that was only
+ used when this was defined.
+ * search.c (boyer_moore): Remove #ifdef C_ALLOCA block.
+ * xmenu.c (xmenu_show): Remove #ifdef C_ALLOCA block.
+ * m/ibms390x.h, m/sh3el.h (C_ALLOCA): Remove references to this.
- * lisp.h (args_out_of_range, args_out_of_range_3)
+ * Makefile.in (SOURCES, unlock, relock): Delete.
-2006-04-08 Eli Zaretskii <eliz@gnu.org>
+ * gtkutil.c (cnt): Rename to menu_grab_callback_cnt for clarity.
+ (menu_grab_callback): All uses changed.
- * w32fns.c (w32_wnd_proc) <WM_MOUSEMOVE>: Ignore mouse movements
- if a menu is active on this frame.
+ * xselect.c (cnt): Rename to x_reply_selection_request_cnt for clarity.
+ (x_reply_selection_request): All uses changed.
-2006-04-08 Dan Nicolaescu <dann@ics.uci.edu>
+2007-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
- * lisp.h (report_file_error): Mark as NO_RETURN.
+ * lread.c (load_warn_old_style_backquotes): Change message to look
+ better when it appears in the middle of byte-compiler messages.
-2006-04-08 Eli Zaretskii <eliz@gnu.org>
+2007-09-10 Dan Nicolaescu <dann@ics.uci.edu>
- * alloc.c [STDC_HEADERS]: Include stddef.h.
+ * s/darwin.h (MULTI_KBOARD): Only define for Carbon.
- * lisp.h (PSEUDOVECSIZE): Fix last change.
+ * xterm.c (x_create_terminal): Add comment.
-2006-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
+ * term.c (clear_tty_hooks, set_tty_hooks): Add comments.
- * process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
- `raw_status_high', and `raw_status_low' with plain integers, and move
- them to the end of the structure.
+2007-09-10 Richard Stallman <rms@gnu.org>
- * alloc.c (allocate_process): Use PSEUDOVECSIZE to initialize the
- pseudovector's size field so only the Lisp_Object fields get GC'd.
+ * xterm.c (x_term_init): Give error if can't open DISPLAY_NAME.
- * process.c (update_status, make_process, Fdelete_process)
- (Fprocess_status, list_processes_1, start_process_unwind)
- (create_process, Fmake_network_process, server_accept_connection)
- (wait_reading_process_output, send_process, Fprocess_running_child_p)
- (process_send_signal, proc_encode_coding_system, Fprocess_send_eof)
- (sigchld_handler, status_notify): Adjust to new non-Lisp fields for
- `pid' and `raw_status'.
- (Fprocess_id, Fsignal_process): Same, and additionally use floats when
- representing PIDs that are larger than most-positive-fixnum.
+2007-09-10 Micha,Ak(Bl Cadilhac <michael@cadilhac.name>
- * keymap.c (describe_map): Only use XINT if we checked INTEGERP.
+ * lisp.h (struct Lisp_Subr): Rename `prompt' field to `intspec'.
+ (DEFUN): Document `intspec', use it instead of `prompt'.
- * lisp.h (OFFSETOF, PSEUDOVECSIZE): New macros.
+ * eval.c (Fcommandp): Change `->prompt' to `->intspec'.
-2006-04-08 Eli Zaretskii <eliz@gnu.org>
+ * data.c (Finteractive_form): If the interactive specification starts
+ with a `(', use it as a Lisp form.
- * w32fns.c (Fx_show_tip): Add 3 to the 5th arg of SetWindowPos.
+ * fileio.c (Fset_file_modes): Add an interactive spec that reads a file
+ name and file modes.
-2006-04-03 Paul Eggert <eggert@cs.ucla.edu>
+ * callint.c (Fcall_interactively): Comment fixes.
- * editfns.c (TM_YEAR_IN_ASCTIME_RANGE): New macro, identical to
- ../lib-src/b2m.c and ../lib-src/editfns.c.
- (Fcurrent_time_string): Use it.
- Document that the year might not consume 4 columns if it's outside
- the range 1000-9999.
- Check for asctime failure.
- Don't assume that the output string length is always exactly 24.
+2007-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-04-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * callint.c (Fcall_interactively): Use Finteractive_form also for subrs
+ and compiled functions.
- * macterm.c (XTread_socket): Initialize variable `f' before its use.
+2007-09-08 Fredrik Axelsson <f.axelsson@gmail.com>
-2006-04-03 Kenichi Handa <handa@m17n.org>
+ * window.c (prefer_window_split_horizontally): New variable.
+ (display_buffer): Consider splitting window horizontally depending
+ on prefer_window_split_horizontally.
- * image.c: Include "charset.h" and "coding.h".
- (x_find_image_file): Return an encoded file name.
+2007-09-08 Eli Zaretskii <eliz@gnu.org>
-2006-04-01 Eli Zaretskii <eliz@gnu.org>
+ * sysdep.c [WINDOWSNT]: Don't include sysselect.h.
- * configure: Regenerated.
+2007-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-03-31 Kenichi Handa <handa@m17n.org>
+ * s/cygwin.h (GC_MARK_STACK): Enable conservative stack marking.
- * xfns.c (xg_set_icon): Delete superfluous UNGCPRO.
+ * frame.c (x_set_frame_parameters): Check number is positive before
+ using XFASTINT.
-2006-03-30 Dan Nicolaescu <dann@ics.uci.edu>
+ * window.c (freeze_window_start): Don't presume selected_window holds
+ a window object.
+ (Fdisplay_buffer): Remove `register' since `buffer' needs to be gcpro'd.
- * xdisp.c (syms_of_xdisp): Fix variable name.
+2007-09-07 Angelo Graziosi <Angelo.Graziosi@roma1.infn.it> (tiny change)
-2006-03-30 Kenichi Handa <handa@m17n.org>
+ * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
- * xterm.c (x_term_init): Delete superfluous UNGCPRO.
+2007-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-03-29 Juanma Barranquero <lekktu@gmail.com>
+ * window.c (Vsplit_window_preferred_function): New var.
+ (Fdisplay_buffer): Use it.
+ (syms_of_window): Export, and initialize it.
- * keyboard.c (process_tool_bar_item): Reorder dummy args.
+2007-09-06 Pixel <pixel@mandriva.com> (tiny change)
-2006-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
+ * image.c (gif_load): Fix bug: Handle nonexistent colormap.
- * keyboard.c (tool_bar_items): Use map_keymap.
- (process_tool_bar_item): Add dummy args to fit the required interface.
+2007-09-06 Glenn Morris <rgm@gnu.org>
-2006-03-25 Eli Zaretskii <eliz@gnu.org>
+ * gtkutil.c (menu_grab_callback) <cnt>:
+ * xselect.c (x_reply_selection_request) <cnt>: Move static
+ variable to file scope.
- * .gdbinit (pr, pp, pp1, pv, pv1): Force print_output_debug_flag
- to zero before calling debug_print or safe_debug_print.
+2007-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
- * print.c (print_output_debug_flag): New global variable.
- (Fexternal_debugging_output) [WINDOWSNT]: Don't call
- OutputDebugString if print_output_debug_flag is zero.
+ * xdisp.c (redisplay_internal): Make sure Elisp code always sees
+ consistent values of selected_frame and selected_window.
-2006-03-24 Paul Eggert <eggert@cs.ucla.edu>
+2007-09-04 Jason Rumney <jasonr@gnu.org>
- * editfns.c (TM_YEAR_BASE): Move up, so the changes below can use it.
- (Fdecode_time, Fencode_time): Use TM_YEAR_BASE instead of 1900.
- (Fdecode_time): Cast tm_year to EMACS_INT.
- (Fcurrent_time_string): Report an invalid time specification if
- the argument is invalid. Also, check for out-of-range time stamps.
+ * w32console.c (initialize_w32_display): Zero unused hooks.
-2006-03-24 Kim F. Storm <storm@cua.dk>
+2007-09-04 Dan Nicolaescu <dann@ics.uci.edu>
- * xterm.c (handle_one_xevent):
- * w32term.c (w32_read_socket):
- * macterm.c (XTread_socket): Don't let key-press clear mouse face
- on in toolbar window if mouse-highlight is an integer.
+ * term.c (Vsuspend_tty_functions, Vresume_tty_functions)
+ (syms_of_term, Fsuspend_tty, Fresume_tty): Undo previous change.
- * fns.c (sxhash_list): Include last non-nil CDR in hash.
+2007-09-04 Jason Rumney <jasonr@gnu.org>
-2006-03-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * term.c (init_tty) [WINDOWSNT]: Add hooks that are not accessible
+ in w32console.c. Set up input. Remove XXX comments that have been
+ confirmed as correct.
- * macmenu.c (enum mac_menu_kind): New enum.
- (min_menu_id): New variable.
- (POPUP_SUBMENU_ID, MIN_POPUP_SUBMENU_ID, MIN_MENU_ID)
- (MIN_SUBMENU_ID): Remove defines. All uses are replaced with
- min_menu_id and enumerators in enum mac_menu_kind.
- (fill_menu, dispose_menus, install_menu_quit_handler): New arg KIND.
- All uses changed. Add range check for menu ID.
- (fill_menubar): Add range check for menu ID.
- [HAVE_CANCELMENUTRACKING] (menu_quit_handler): Check error code of
- GetEventParameter.
- (set_frame_menubar, mac_menu_show): Call install_menu_quit_handler
- for each menu kind.
+ * s/ms-w32.h (MULTI_KBOARD): Define.
-2006-03-22 Kim F. Storm <storm@cua.dk>
+ * w32console.c (one_and_only_w32cons): Remove.
+ (initialize_w32_display): Take terminal argument.
- * xdisp.c: Undo 2006-03-21 change.
+ * term.c (init_tty) [WINDOWSNT]: Pass terminal to
+ initialize_w32_display.
+ (init_tty) [MULTI_KBOARD]: Include this code on WINDOWSNT too.
- * term.c: Define aliases for append_glyph and produce_stretch_glyph
- when `static' is defined to avoid name clash with those in xdisp.c.
+ * termhooks.h (enum event_kind) <HORIZ_WHEEL_EVENT>: New event.
- * process.c (Faccept_process_output): Fix to comply with lisp
- reference. Change arg "timeout" to "seconds" and allow both
- integer and float value. Change arg "timeout-msec" to "millisec"
- and interpret" as milliseconds rather than microseconds. Fix doc
- string accordingly.
+ * keyboard.c (discard_mouse_events): Discard it.
+ (make_lispy_event): Translate it to a lisp event.
+ (lispy_wheel_names): Add wheel-left and right events.
+ (syms_of_keyboard): Enlarge wheel_syms.
-2006-03-21 Ken Raeburn <raeburn@raeburn.org>
+ * w32fns.c (w32_wnd_proc) <WM_DROPFILES>: Merge with WM_MOUSEWHEEL.
+ <WM_MOUSEHWHEEL>: Pass new system message to lisp.
- * xdisp.c (store_next_glyph): Rename from append_glyph.
- (generate_stretch_glyph): Rename from produce_stretch_glyph.
- All callers changed accordingly.
+ * w32term.h (WM_MOUSEHWHEEL): Define if system headers don't.
-2006-03-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * w32term.c (construct_mouse_wheel): Make HORIZ_WHEEL_EVENT
+ from WM_MOUSEHWHEEL.
+ (w32_read_socket) <WM_MOUSEHWHEEL>: Treat as WM_MOUSEWHEEL.
- * xterm.c: x_session_initialized new variable.
- (x_term_init): Use x_session_initialized to check if
- x_session_initialize should be called.
- (x_initialize): Initialize x_session_initialized.
+ * w32fns.c (x_create_tip_frame) [MULTI_KBOARD]: Get keyboard from
+ terminal.
-2006-03-21 Kim F. Storm <storm@cua.dk>
+ * w32term.c (w32_create_terminal) [MULTI_KBOARD]: Create a new
+ keyboard for the terminal.
- * fringe.c (draw_fringe_bitmap): Don't calculate default overlay arrow
- bitmap here, but ...
- (update_window_fringes): ... here, so we can test if it has changed.
+2007-09-04 Dan Nicolaescu <dann@ics.uci.edu>
-2006-03-20 Andreas Schwab <schwab@suse.de>
+ * term.c (Vsuspend_tty_hook): Rename from Vsuspend_tty_functions.
+ (Vresume_tty_hook): Rename from Vresume_tty_functions.
+ (syms_of_term): Rename suspend-tty-functions to suspend-tty-hook
+ and resume-tty-function to resume-tty-hook.
+ (Fsuspend_tty, Fresume_tty): Use new names.
- * dispnew.c (init_display): Check DISPLAY here.
+2007-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * emacs.c (main): Don't check here.
+ * gtkutil.c (update_frame_tool_bar): Handle stock name as a named icon
+ if it starts with "n:".
- * xterm.c (x_display_ok): Don't use DISPLAY env var.
+2007-08-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2006-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
+ * gtkutil.c (update_frame_tool_bar): Initialize wbutton to NULL.
- * window.c (window_scroll_pixel_based): Yet another int/Lisp_Object
- mixup (YAILOM).
+2007-08-31 Stefan Monnier <monnier@iro.umontreal.ca>
-2006-03-20 Eli Zaretskii <eliz@gnu.org>
+ * frame.h:
+ * frame.c (Qterm_environment_variable): Remove.
+ (syms_of_frame): Don't init and staticpro it.
- * emacs.c (main): Fix last change.
+ * callproc.c (getenv_internal): Remove special case for $TERM.
-2006-03-20 Kenichi Handa <handa@m17n.org>
+ * callproc.c (Vinitial_environment): New variable.
+ (set_initial_environment): Initialize it.
+ (syms_of_callproc): Declare it.
+ (child_setup): Don't mess with TERM via Qterm_environment_variable; the
+ TERM under which a process runs is never related to the TERM in which
+ Emacs is running.
- * fileio.c (Fwrite_region): Set visit_file to Qnil before GCPRO it.
+2007-08-29 Dan Nicolaescu <dann@ics.uci.edu>
- * keymap.c (map_keymap): Set tail to Qnil before GCPRO it.
+ * config.in (HAVE_WINDOW_SYSTEM): Don't undef MULTI_KBOARD here...
+ * s/darwin.h: ... do it here.
- * xfns.c (xg_set_icon): Remove unnecessary GCPRO.
+2007-08-29 Stefan Monnier <monnier@iro.umontreal.ca>
- * xterm.c (x_term_init): Remove unnecessary GCPRO.
+ * lisp.h (set_initial_environment): Rename from set_global_environment.
-2006-03-19 Kim F. Storm <storm@cua.dk>
+ * Makefile.in (${etc}DOC): Re-add a ${EXEEXT} which seems to have been
+ removed by mistake on the multi-tty branch.
- * xdisp.c (set_cursor_from_row): Fix cursor property on overlay string,
- so it doesn't associate overlay string with following glyph by default.
- Allow integer property value to specify explicit number of buffer
- positions associate with overlay string.
+ * frame.c (make_terminal_frame): Yet Another Int/Lisp_Object Mixup.
+ (Fmodify_frame_parameters): Return a value.
-2006-03-18 Chong Yidong <cyd@stupidchicken.com>
+ * image.c (png_load): Comment-out var only used in commented-out code.
- * xterm.c (x_display_ok): Fix minor bug and compilation warnings.
+ * term.c (mark_ttys): Don't bother checking top_frame (incorrectly)
+ before passing it to mark_object.
-2006-03-18 Nozomu Ando <nand@mac.com>
+ * xfaces.c (internal_resolve_face_name): Return a value.
+ (internal_resolve_face_name, resolve_face_name_error): Comment out.
- * m/pmax.h (BROKEN_NOCOMBRELOC) [__NetBSD__]: Define.
- (LIB_STANDARD, START_FILES) [__NetBSD__]: Don't define.
- (START_FILES, RUN_TIME_REMAP, UNEXEC) [__NetBSD__, __OpenBSD__]:
- Don't redefine.
+ * xfns.c (check_x_display_info): Yet Another Int/Lisp_Object Mixup.
+ (x_icon): Comment-out var only used in commented-out code.
- * m/mips.h: Don't use unexmips on NetBSD.
- (LIBS_MACHINE): Move definition lower, so it doesn't use
- LD_SWITCH_MACHINE, START_FILES, LIB_STANDARD, LIBS_TERMCAP,
- C_SWITCH_MACHINE, and C_DEBUG_SWITCH.
+2007-08-29 Romain Francoise <romain@orebokech.com>
- * unexelf.c [BROKEN_NOCOMBRELOC]: Include assert.h.
- (unexec) [BROKEN_NOCOMBRELOC]: Handle platforms whose nocombreloc
- option is broken (e.g., MIPS/NetBSD).
+ * keyboard.c (Fset_input_mode): Don't call `Fset_quit_char' if
+ QUIT hasn't been provided.
-2006-03-18 Craig McDaniel <craigmcd@gmail.com> (tiny change)
+2007-08-29 Dan Nicolaescu <dann@ics.uci.edu>
- * sheap.c (STATIC_HEAP_SIZE): Enlarge STATIC_HEAP_SIZE to 12MB.
- Remove the HAVE_X_WINDOWS conditional.
+ * callproc.c (child_setup, getenv_internal): Use the
+ display-environment-variable and term-environment-variable frame
+ params.
+ (set_initial_environment): Initialise Vprocess_environment.
-2006-03-18 Vivek Dasmohapatra <vivek@etla.org> (tiny change)
+ * config.in: Disable multi-keyboard support on a mac.
- * emacs.c (main): If user asks for a display that is unavailable,
- simulate -nw.
+ * frame.c (Qterm_environment_variable)
+ (Qdisplay_environment_variable): New variables.
+ (syms_of_frame): Intern and staticpro them.
+ (Fmake_terminal_frame): Disable output method test.
- * xterm.c (x_display_ok): New function.
+ * frame.h: Declare them here.
- * xterm.h: Add prototype for x_display_ok.
+ * macfns.c (x_set_mouse_color): Get rif from the frame.
+ (x_set_tool_bar_lines): Don't use updating_frame.
+ (mac_window): Add 2 new parameters for consistency with other systems.
+ (Fx_create_frame): Fix doc string. Rename the parameter. Set the
+ frame parameters following what is done in X11 and w32. Don't use
+ FRAME_MAC_DISPLAY_INFO.
+ (Fx_open_connection, start_hourglass): Remove window-system check.
+ (x_create_tip_frame): Get the keyboard from the terminal.
-2006-03-18 Eli Zaretskii <eliz@gnu.org>
+ * macmenu.c: Reorder includes.
+ (Fx_popup_menu): Use terminal specific mouse_position_hook.
- * w32fns.c (Fw32_select_font): Doc fix.
+ * macterm.c (XTset_terminal_modes, XTreset_terminal_modes): Add a
+ terminal parameter.
+ (x_clear_frame): Add a frame parameter.
+ (note_mouse_movement): Get rif from the frame.
+ (mac_term_init): Initialize the terminal.
+ (mac_initialize): Make static and move terminal initialization ...
+ (mac_create_terminal): ... to this new function.
-2006-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * macterm.h (struct mac_display_info): Add terminal.
+ (mac_initialize): Delete declaration.
- * image.c [MAC_OS] (XPutPixel, XGetPixel)
- [!WORDS_BIG_ENDIAN && USE_CG_DRAWING]: Don't use specialized
- version when depth is 32.
- (mac_create_cg_image_from_image) [MAC_OS && USE_CG_DRAWING]:
- New function.
- (prepare_image_for_display) [MAC_OS && USE_CG_DRAWING]: Use it.
- (x_clear_image_1) [MAC_OS && USE_CG_DRAWING]: Release CGImage.
+ * puresize.h (BASE_PURESIZE): Increase base value to 1164000.
- * macterm.c (XCreatePixmap) [!WORDS_BIG_ENDIAN && USE_CG_DRAWING]:
- Create GWorld in ARGB pixel format.
- (mac_copy_area, mac_copy_area_with_mask) [USE_CG_DRAWING]:
- Remove functions.
- (x_draw_image_foreground) [USE_CG_DRAWING]: Use mac_draw_cg_image
- instead of mac_copy_area/mac_copy_area_with_mask.
+ * sysdep.c: Comment out text after #endif.
-2006-03-15 Kim F. Storm <storm@cua.dk>
+ * term.c (init_tty): Only use terminal->kboard when MULTI_KBOARD
+ is defined. Better initialize ttys in windows. Use terminal
+ specific mouse_position_hook.
- * xdisp.c (extend_face_to_end_of_line): Always add space glyph to
- empty row. Fixes memory corruption revealed by 2006-03-02 change.
- (display_tool_bar_line): Skip empty tool-bar line if HEIGHT < 0.
- (tool_bar_lines_needed): Fix tool-bar display in case the tool-bar
- width is exactly the same as the window width. Don't count a final
- empty tool-bar line (pass HEIGHT = -1 to display_tool_bar_line).
+ * termhooks.h (union display_info): Add mac_display_info.
-2006-03-15 Juanma Barranquero <lekktu@gmail.com>
+ * w32fns.c (Fx_create_frame): Use kboard from the terminal.
+ Set the default minibuffer frame, window_system and the rest of the
+ frame parameters following what is done in X11.
- * fringe.c (w32_init_fringe, w32_reset_fringes): Revert to being
- conditional on HAVE_NTGUI, not WINDOWS_NT.
+ * w32term.c (w32_initialize): Make static.
-2006-03-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * xselect.c (x_handle_selection_clear): Only access
+ terminal->kboard when MULTI_KBOARD is defined.
- * dispextern.h (mac_init_fringe) [MAC_OS]: Add prototype.
+ * s/darwin.h (SYSTEM_PURESIZE_EXTRA): Define here.
+ (SYSTEM_PURESIZE_EXTRA): Only define on Carbon.
- * fringe.c (mac_init_fringe) [MAC_OS]: New function.
+2007-08-29 Jason Rumney <jasonr@gnu.org>
- * macterm.c (mac_initialize) [USE_CG_DRAWING]: Call mac_init_fringe.
- (max_fringe_bmp, fringe_bmp) [USE_CG_DRAWING]: New variables.
- (mac_define_fringe_bitmap, mac_destroy_fringe_bitmap)
- (mac_draw_cg_image) [USE_CG_DRAWING]: New functions.
- (mac_draw_bitmap) [USE_CG_DRAWING]: Remove function.
- (x_draw_fringe_bitmap) [USE_CG_DRAWING]: Use mac_draw_cg_image
- instead of mac_draw_bitmap.
- (x_redisplay_interface) [USE_CG_DRAWING]: Set handlers for
- define_fringe_bitmap and destroy_fringe_bitmap.
+ * frame.c (Fdelete_frame): Only get kboard when MULTI_KBOARD defined.
+ (make_terminal_frame) [WINDOWSNT]: Initialize terminal.
-2006-03-14 Chong Yidong <cyd@stupidchicken.com>
+ * fringe.c (w32_init_fringe w32_reset_fringes) [HAVE_NTGUI]:
+ (mac_init_fringe) [MAC_OS]: Get rif from selected_frame.
- * xterm.c (x_uncatch_errors): Block input for entire function.
+ * keyboard.c (restore_kboard_configuration): Only define when
+ MULTI_KBOARD defined.
-2006-03-12 Jason Rumney <jasonr@gnu.org>
+ * makefile.w32-in: Update dependancies from Makefile.in.
+ (OBJ1): Add terminal.$(O)
- * w32fns.c (Fx_create_frame): Remove call to
- Qface_set_after_frame_default (from xfns.c 2003-05-26).
+ * term.c (dissociate_if_controlling_tty) [WINDOWSNT]:
+ Don't define function body.
+ (init_tty) [WINDOWSNT]: Use selected_frame for initializing.
- * w32menu.c (Fx_popup_menu): Call w32_free_menu_strings when
- finished with the menu.
+ * termhooks.h (display_info) [WINDOWSNT]: Add w32.
- * w32term.c: Sync 2005-10-24 xterm.c changes.
- (last_mouse_glyph_frame): New var.
- (note_mouse_movement): Say mouse moved if current frame differs
- from last_mouse_glyph_frame, and update last_mouse_glyph_frame.
- (w32_mouse_position): Set last_mouse_glyph_frame.
- Remove OLD_REDISPLAY_CODE block.
+ * w32.c (request_sigio, unrequest_sigio): Remove.
-2006-03-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * w32console.c (w32con_move_cursor, w32con_clear_to_end)
+ (w32con_clear_frame, w32con_clear_end_of_line)
+ (w32con_ins_del_lines, w32con_insert_glyphs, w32con_write_glyphs)
+ (w32con_delete_glyphs, w32con_set_terminal_window)
+ (scroll_line, w32_sys_ring_bell): Add frame arg.
+ (w32con_set_terminal_modes, w32con_reset_terminal_modes):
+ Add terminal arg.
+ (PICK_FRAME): Remove.
+ (w32con_write_glyphs): Use frame specific terminal coding.
+ (one_and_only_w32cons): New global variable.
+ (initialize_w32_display): Use it for storing hooks.
+ (create_w32cons_output): New function.
- * macgui.h [USE_ATSUI && MAC_OSX]: Define USE_CG_TEXT_DRAWING to 1.
+ * w32inevt.c, w32inevt.h (w32_console_read_socket): Make first
+ arg a frame.
- * macterm.h (struct mac_output) [USE_CG_DRAWING]: New member cg_context.
- (mac_prepare_for_quickdraw) [USE_CG_DRAWING]: Add prototype.
+ * w32fns.c (x_create_tip_frame): Set terminal and ref count.
+ Set window_system.
+ (x_set_tool_bar_lines): Don't use updating_frame.
+ (Fx_create_frame): Set terminal and ref count.
+ (Fx_open_connection): Remove window-system check.
- * mac.c (sys_select) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
+ * w32menu.c (Fx_popup_menu): Use terminal specific mouse_position_hook.
- * macfns.c (x_create_tip_frame): Apply 2006-03-11 change for xfns.c.
+ * w32term.c (w32_term_init): Call add_keyboard_wait_descriptor.
+ (w32_set_terminal_modes, w32_reset_terminal_modes): Add terminal arg.
+ (x_clear_frame, x_delete_glyphs, w32_ring_bell, x_ins_del_lines):
+ Add frame arg.
+ (x_delete_terminal, w32_create_terminal): New functions.
+ (w32_term_init): Create a terminal.
+ (w32_initialize): Move terminal specific initialization to
+ w32_create_terminal.
- * macterm.c (mac_draw_rectangle, x_draw_glyph_string_foreground)
- (x_draw_composite_glyph_string_foreground)
- (x_draw_image_foreground): Undo previous changes.
- (x_draw_hollow_cursor): Likewise. Subtract 1 from the last
- argument of mac_draw_rectangle.
- (CG_SET_FILL_COLOR, CG_SET_STROKE_COLOR): New macros.
- (mac_draw_string_common, mac_draw_image_string_cg): Use them.
- (FRAME_CG_CONTEXT) [USE_CG_DRAWING]: New macro.
- (mac_begin_cg_clip, mac_end_cg_clip, mac_prepare_for_quickdraw)
- [USE_CG_DRAWING]: New functions.
- (mac_draw_line, mac_erase_rectangle, mac_clear_window)
- (mac_fill_rectangle, mac_draw_rectangle, mac_draw_string_common)
- (mac_draw_image_string_cg) [USE_CG_DRAWING]: Add Quartz 2D drawing part.
- (mac_draw_bitmap, mac_invert_rectangle, mac_draw_string_common)
- (mac_copy_area, mac_scroll_area, x_scroll_bar_create)
- (x_scroll_bar_remove, XTset_vertical_scroll_bar, x_set_window_size)
- (XTread_socket) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
+ * w32term.h (x_output): Remove foreground_pixel and background_pixel.
+ (w32_clear_rect, w32_clear_area): Use background from frame.
+ (w32_display_info): Add terminal.
+ (w32_sys_ring_bell, x_delete_display): Declare here.
-2006-03-12 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+ * xdisp.c (display_menu_bar) [HAVE_NTGUI]: Check frame type.
- * xfns.c (x_icon): Disable redundant call to `x_wm_set_window_state'.
+ * s/ms-w32.h (SYSTEM_PURESIZE_EXTRA): Bump to 50k.
-2006-03-11 Jason Rumney <jasonr@gnu.org>
+2007-08-29 Kalle Olavi Niemitalo <kon@iki.fi> (tiny change)
- * w32fns.c (signal_user_input): New function.
- (post_character_message): Use it for keyboard input.
- (w32_msg_pump): Use it for mouse input.
+ * keyboard.c (interrupt_signal, handle_interrupt, Fset_quit_char):
+ Fix get_named_tty calls for the controlling tty.
-2006-03-11 Luc Teirlinck <teirllm@auburn.edu>
+2007-08-29 ARISAWA Akihiro <ari@mbf.ocn.ne.jp> (tiny change)
- * window.c: Rename preserve_y to window_scroll_pixel_based_preserve_y.
- (window_scroll_pixel_based, syms_of_window): Adapt to above change.
+ * term.c (dissociate_if_controlling_tty)[USG]: Fix parse error.
-2006-03-11 Eli Zaretskii <eliz@gnu.org>
+2007-08-29 Yoshiaki Kasahara <kasahara@nc.kyushu-u.ac.jp> (tiny change)
- * w32fns.c (w32_wnd_proc): Ignore middle and extra button events
- if a menu is already active (the menubar_active flag is on).
+ * term.c (tty_insert_glyphs): Add missing first parameter.
-2006-03-11 David Ponce <david@dponce.com>
+2007-08-29 K,Aa(Broly L$,1 q(Brentey <karoly@lorentey.hu>
- * xfns.c (x_create_tip_frame): Preserve received parms by copying them.
+ * buffer.c (Fbuffer_list, Fbury_buffer):
+ Take frame->buried_buffer_list into account.
-2006-03-11 Eli Zaretskii <eliz@gnu.org>
+ * cm.c (current_tty): New variable, for cmputc().
+ (cmputc): Use it.
+ (cmcheckmagic): Add tty parameter, look up terminal streams there.
+ (calccost): Add tty parameter. Use emacs_tputs() instead of tputs().
+ (cmgoto): Add tty parameter. Pass it on to calccost().
+ Use emacs_tputs() instead of tputs().
- * w32term.c: Add x_fully_uncatch_errors and x_catching_errors to
- the list of unused display error handling functions.
+ * cm.h (emacs_tputs): New macro to set current_tty, and then call
+ tputs().
+ (current_tty): New variable, for cmputc().
+ (cmcheckmagic, cmputc, cmgoto): Add prototypes.
- * eval.c (unwind_to_catch): Call x_fully_uncatch_errors only if
- HAVE_X_WINDOWS.
+ * eval.c (unwind_to_catch): Don't call x_fully_uncatch_errors.
(internal_condition_case, internal_condition_case_1)
- (internal_condition_case_2): Call x_catching_errors only if
- HAVE_X_WINDOWS.
-
- * vm-limit.c [HAVE_GETRLIMIT]: Don't define unconditionally.
- Don't include sys/resource.h unless defined.
-
-2006-03-11 Richard Stallman <rms@gnu.org>
-
- * keymap.c (describe_map): Shorten string to indicate shadowed binding.
-
- * vm-limit.c (get_lim_data, lim_data, data_space_start):
- Move from mem-limits.h.
- (enum warnlevel): New data type.
- (check_memory_limits): Rewrite the logic about warnings.
- Use standard `struct rlimit'. Check return values for nonsense.
- (memory_warnings): Always clear lim_data.
-
- * mem-limits.h (get_lim_data, lim_data, data_space_start):
- Move to vm-limit.c.
-
- * xterm.c (x_fully_uncatch_errors, x_catching_errors): New functions.
-
- * eval.c (unwind_to_catch): Call x_fully_uncatch_errors.
- (internal_condition_case_1, internal_condition_case_2):
- Abort if within unclosed x_catch_errors.
-
-2006-03-11 Romain Francoise <romain@orebokech.com>
-
- * process.c (Vprocess_adaptive_read_buffering): Doc fix.
-
-2006-03-11 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
-
- * lisp.h: Remove duplicate prototypes. Make the prototype of
- getloadavg be conditioned on HAVE_GETLOADAVG being undefined.
-
-2006-03-11 Eli Zaretskii <eliz@gnu.org>
-
- * xterm.c (x_draw_hollow_cursor): Subtract 1 from the last
- argument of XDrawRectangle.
-
- * xdisp.c (get_phys_cursor_geometry): Don't decrease height by 1.
-
- * macterm.c (mac_draw_rectangle): Don't add 1 to width and height.
- (x_draw_glyph_string_foreground)
- (x_draw_composite_glyph_string_foreground)
- (x_draw_image_foreground): Don't subtract 1 from width and height
- arguments to mac_draw_rectangle.
- (x_draw_hollow_cursor): Add 1 to w->phys_cursor_width.
-
-2006-03-10 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (USE_POSIX_MEMALIGN): Fix last change.
-
-2006-03-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (USE_POSIX_MEMALIGN): New macro.
- (ABLOCKS_BASE, lisp_align_malloc, lisp_align_free): Use it.
-
-2006-03-09 Kenichi Handa <handa@m17n.org>
-
- * coding.c (DECODE_EMACS_MULE_COMPOSITION_CHAR): Fix decoding
- ASCII component of a composition.
-
-2006-03-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * window.c: Declare preserve_y as a static global variable.
- (window_scroll_pixel_based): No longer declare preserve_y;
- it is global now.
- (syms_of_window): Set preserve_y to -1.
-
-2006-03-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c [MAC_OS] (XPutPixel): Set alpha channel bits if pixmap
- depth is 32.
- [MAC_OS] (XGetPixel): Strip off alpha channel bits if pixmap
- depth is 32.
-
-2006-03-06 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (handle_invisible_prop): Don't update it->position with
- a buffer position if we're in a display string.
-
-2006-03-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.h (MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH)
- (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH): New defines.
-
- * macfns.c (x_default_scroll_bar_color_parameter)
- (x_set_scroll_bar_foreground, x_set_scroll_bar_background):
- Remove unnecessary prototypes.
- (x_set_scroll_bar_default_width):
- Use MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH.
- (mac_set_scroll_bar_width): New function.
- (mac_frame_parm_handlers): Set it as handler for scroll-bar-width.
-
- * macterm.c (get_control_part_bounds): Fix type of return value.
- (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
- (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]: Don't show
- scroll bar if it is not tall enough to display scroll bar thumb.
- [USE_CARBON_EVENTS] (mac_convert_event_ref)
- (mac_handle_command_event, mac_handle_window_event)
- (mac_handle_mouse_event): Check error code of GetEventParameter.
- (convert_fn_keycode) [MAC_OSX]: Likewise.
-
-2006-03-05 Andreas Schwab <schwab@suse.de>
-
- * xselect.c (x_catch_errors_unwind): Fix missing return value.
-
-2006-03-02 Kim F. Storm <storm@cua.dk>
-
- * frame.h (struct frame): New member n_tool_bar_rows.
-
- * xdisp.c: Minimize the unpleasent visual impact of the requirement
- that non-toolkit tool-bars must occupy an integral number of screen
- lines, by distributing the rows evenly over the tool-bar screen area.
- (Vtool_bar_border): New variable.
- (syms_of_xdisp): DEFVAR_LISP it.
- (display_tool_bar_line): Add HEIGHT arg for desired row height.
- Make tool-bar row the desired height. Use default face for border
- below tool-bar.
- (tool_bar_lines_needed): Add N_ROWS arg. Use it to return number of
- actual tool-bar rows.
- (redisplay_tool_bar): Calculate f->n_tool_bar_rows initially.
- Adjust the height of the tool-bar rows to fill tool-bar screen area.
- (redisplay_tool_bar): Calculate f->n_tool_bar_rows when tool-bar area
- is resized.
-
-2006-03-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * search.c (Fregexp_quote): Do not precede a literal `]' with two
- backslashes to try to make clear that it has a literal meaning; it
- does not do that. (It could close a character alternative
- containing a backslash.)
-
-2006-02-28 Chong Yidong <cyd@stupidchicken.com>
-
- * xselect.c (x_catch_errors_unwind): New function.
- (x_reply_selection_request): Put x_uncatch_errors in an unwind.
- (Fx_get_atom_name): Call x_uncatch_errors earlier.
-
- * window.c (Qscroll_up, Qscroll_down): New syms.
- (window_scroll_pixel_based): Make preserve_y static to avoid
- getting point stuck when scrolling 1 line.
-
-2006-02-26 Chong Yidong <cyd@stupidchicken.com>
-
- * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary argument.
-
- * xterm.c (x_load_font, x_term_init, XTmouse_position)
- (handle_one_xevent, x_connection_closed, x_list_fonts):
- No arg for x_uncatch_errors.
-
- * xselect.c (x_own_selection, x_decline_selection_request)
- (x_reply_selection_request, x_get_foreign_selection)
- (Fx_get_atom_name, Fx_send_client_event): Likewise.
-
- * xfns.c (x_real_positions, x_set_mouse_color, Fx_focus_frame):
- Likewise.
-
-2006-02-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * lread.c: Declare Vload_file_rep_suffixes instead of
- deleted variable default_suffixes.
- (Fget_load_suffixes): New function.
- (Fload): Use Fget_load_suffixes and Vload_file_rep_suffixes.
- No longer use deleted variable default_suffixes. Update docstring.
- (syms_of_lread): defsubr Sget_load_suffixes.
- Expand `load-suffixes' docstring.
- Delete default_suffixes and DEFVAR_LISP the new variable
- `load-file-rep-suffixes'.
-
- * w32.c (check_windows_init_file): Use Fget_load_suffixes instead
- of Vload_suffixes.
-
- * lisp.h: EXFUN Fget_load_suffixes.
- Extern Vload_file_rep_suffixes.
-
- * eval.c (specpdl_ptr): Remove volatile qualifier for consistency
- with lisp.h.
-
-2006-02-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lisp.h (struct specbinding, specpdl_ptr): Remove the volatile
- qualifier which was trying to avoid the bug that was fixed by
- yesterday's changes to xterm.c.
-
-2006-02-25 Chong Yidong <cyd@stupidchicken.com>
-
- * xterm.h (x_catch_errors) Return value changed to void.
- (x_uncatch_errors): Delete unused count argument.
-
- * xterm.c (x_catch_errors): Don't use record_unwind_protect, since
- it can be called in a signal handler.
- (x_catch_errors_unwind): Function deleted.
- (x_uncatch_errors): Deallocate last x_error_message_stack struct.
- (x_check_errors): Call x_uncatch_errors before signalling error.
-
- (x_load_font, x_term_init, XTmouse_position, handle_one_xevent)
- (x_connection_closed, x_list_fonts): Use new versions of
- x_catch_errors and x_uncatch_errors.
-
- * xselect.c (x_own_selection, x_decline_selection_request)
- (x_reply_selection_request, x_get_foreign_selection)
- (Fx_get_atom_name, Fx_send_client_event): Likewise.
-
- * xfns.c (x_real_positions, x_set_mouse_color, Fx_focus_frame):
- Likewise.
-
- * eval.c (record_unwind_protect): Add an assertion.
-
-2006-02-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * process.c (Fmake_network_process): Init the process's mark.
-
-2006-02-25 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (modify_overlay): Force redisplay if we modify an
- overlay at the end of the buffer.
-
-2006-02-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
- nil the image file has been removed, in that case use the (cached)
- pixmap.
-
-2006-02-24 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Finsert_file_contents): When a text is replaced
- partially, be sure to set point before the inserted characters.
-
-2006-02-23 Zhang Wei <id.brep@gmail.com> (tiny change)
-
- * xfns.c (Fx_file_dialog): Return a decoded file name.
-
-2006-02-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * dispnew.c (update_text_area): Avoid needless redraw of rightmost
- glyph whose face is extended to the text area end.
-
- * macterm.c (x_set_toolkit_scroll_bar_thumb): Don't set control
- values if control is not visible or values are not changed.
-
-2006-02-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Fwindow_list): Check `window' before doing XWINDOW.
- The default `window' should not be "on a different frame".
-
-2006-02-22 Kim F. Storm <storm@cua.dk>
-
- * indent.c (Fvertical_motion): Only try to move back if we can.
-
-2006-02-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macgui.h (struct _XGC) [!MAC_OSX || !USE_ATSUI]: New member
- n_clip_rects.
-
- * macmenu.c (digest_single_submenu): Apply 2006-02-19 change for
- xmenu.c.
-
- * macterm.c (GC_CLIP_REGION): Remove macro.
- (mac_begin_clip, mac_end_clip): Take arg GC instead of REGION.
- All uses changed. Don't do clipping if n_clip_rects is zero.
- (mac_set_clip_rectangles): Use xassert instead of abort.
- Set n_clip_rects. Don't make clip_region empty when number of
- clipping rectangles is zero.
- (mac_reset_clip_rectangles): Set n_clip_rects directly instead of
- calling mac_set_clip_rectangles.
- (x_set_toolkit_scroll_bar_thumb): Temporarily hide scroll bar to
- avoid multiple redraws.
-
-2006-02-22 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (draw_fringe_bitmap): Fix overlay-arrow display.
-
-2006-02-21 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (syms_of_fringe) <fringe-bitmaps>: Doc fix.
-
-2006-02-21 Zhang Wei <brep@newsmth.org>
-
- * xfns.c (Fx_file_dialog, Motif and GTK): DECODE_FILE before
- returning it.
-
-2006-02-21 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
-
- * fringe.c (horizontal_bar_bits): Rename from `horisontal_bar_bits'.
- (standard_bitmaps): Use it.
-
-2006-02-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_draw_string_common): Remove arg MODE. New arg
- BG_WIDTH. All uses changed. Draw background if BG_WIDTH is not zero.
- (mac_draw_image_string, mac_draw_image_string_16): New arg BG_WIDTH.
- [USE_CG_TEXT_DRAWING] (mac_draw_image_string_cg): Rename from
- mac_draw_string_cg. New arg BG_WIDTH. All uses changed.
- Draw background if BG_WIDTH is not zero. Use float constants as
- divisors instead of double. Use alloca instead of xmalloc/xfree.
- (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
- [!MAC_OS8 || USE_ATSUI]: Background may be drawn using
- mac_draw_image_string* functions.
- (XLoadQueryFont) [MAC_OS8 && USE_ATSUI]: Don't adjust heights of
- some fonts when srcCopy text transfer mode might be used.
- (mac_begin_clip, mac_end_clip): Check if region is empty.
- (mac_set_clip_rectangles): When resetting clip region, make it
- empty instead of disposing of it.
-
-2006-02-20 Kim F. Storm <storm@cua.dk>
-
- * Makefile.in: Add fringe.elc to WINDOW_SUPPORT.
-
- * buffer.h (struct buffer): New members fringe_indicator_alist and
- fringe_cursor_alist.
-
- * buffer.c (init_buffer_once): Set dummy default values for
- fringe-indicator-alist and fringe-cursor-alist. The proper
- default values are set by pre-loading fringe.el.
- (syms_of_buffer): defvar_per_buffer new fringe-indicator-alist and
- fringe-cursor-alist buffer-local variables and defvar_lisp_nopro
- corresponding default- variables.
+ (internal_condition_case_2): Don't abort when x_catching_errors.
- * fringe.c (enum fringe_bitmap_type): Remove. Change all uses
- to use `int'.
- (NO_FRINGE_BITMAP, UNDEF_FRINGE_BITMAP, MAX_STANDARD_FRINGE_BITMAPS):
- Define explicitly.
- (Qtruncation, Qcontinuation, Qempty_line, Qtop_bottom)
- (Qhollow_small): New variables.
- (syms_of_fringe): Intern and staticpro them.
- (question_mark_bits): Rename from unknown_bits.
- (left_curly_arrow_bits): Rename from continuation_bits.
- (right_curly_arrow_bits): Rename from continued_bits.
- (left_triangle_bits): Rename from ov_bits.
- (right_triangle_bits): Add.
- (filled_rectangle_bits): Rename from filled_box_cursor_bits.
- (hollow_rectangle_bits): Rename from hollow_box_cursor_bits.
- (filled_square_bits): Add.
- (vertical_bar_bits): Rename from bar_cursor_bits.
- (horizontal_bar_bits): Rename from hbar_cursor_bits.
- (empty_line_bits): Rename from zv_bits.
- (standard_bitmaps): Update to use new names.
- (draw_fringe_bitmap_1): Make static.
- (get_logical_cursor_bitmap, get_logical_fringe_bitmap): New functions
- to map from logical cursors and indicators to physical bitmaps.
- (draw_fringe_bitmap): Resolve fringe cursor and overlay-arrow
- bitmaps using symbol names instead of bitmap numbers.
- (update_window_fringes): Use logical indicator symbol names
- instead of bitmap numbers for logical. Add bitmap cache.
- (LEFT_FRINGE, RIGHT_FRINGE): New helper macros.
+ * fns.c (Fyes_or_no_p): Don't try to open an X dialog on tty terminals.
+ (Fy_or_n_p): Likewise. Use temporarily_switch_to_single_kboard to
+ prevent crashes caused by bogus longjmps in read_char.
-2006-02-20 Chong Yidong <cyd@stupidchicken.com>
+ * keymap.h (Fset_keymap_parent): Add EXFUN.
- * regex.c: Revert 2006-02-19 change.
- (xmalloc, xrealloc): Define these when not linked to Emacs.
- Redefine malloc -> xmalloc, realloc -> xrealloc as in Emacs case.
+ * macterm.h (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL)
+ * w32term.h (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL):
+ Remove redundant definition.
-2006-02-19 Luc Teirlinck <teirllm@auburn.edu>
+ * macfns.c (x_set_mouse_color, x_make_gc):
+ Use FRAME_BACKGROUND_PIXEL and FRAME_FOREGROUND_PIXEL.
- * regex.c (extend_range_table_work_area): Fix typo.
+ * w32term.c (x_free_frame_resources):
+ Use FRAME_BACKGROUND_PIXEL and FRAME_FOREGROUND_PIXEL.
+ (w32_initialize): Use the accessor macros for terminal characteristics.
-2006-02-19 Richard M. Stallman <rms@gnu.org>
+ * macterm.c (mac_initialize): Use Fset_input_interrupt_mode.
+ Use the accessor macros for terminal characteristics.
+ * msdos.c (internal_terminal_init): Use the accessor macros for
+ terminal characteristics.
+ (ScreenVisualBell, internal_terminal_init):
+ Use FRAME_BACKGROUND_PIXEL and FRAME_FOREGROUND_PIXEL.
- * xterm.c (x_catch_errors): Use xmalloc.
+ * termopts.h (no_redraw_on_reenter): Declare.
- * regex.c (extend_range_table_work_area): Call xmalloc and xrealloc.
- (regex_compile): Likewise.
- (regcomp): Use xmalloc.
+ * alloc.c (emacs_blocked_malloc): Disable mallopt call.
+ (mark_terminals, mark_ttys): Declare.
+ (Fgarbage_collect): Call them.
+ (mark_object): Mark buried_buffer_list.
- * gtkutil.c (malloc_widget_value): Use xmalloc.
+ * prefix-args.c: Include stdlib.h for exit.
- * vm-limit.c [HAVE_GETRLIMIT]: Include sys/resource.h.
- (check_memory_limits) [HAVE_GETRLIMIT]: Use getrlimit.
+ * syssignal.h: Add comment.
- * xmenu.c (digest_single_submenu): When pane_string is empty,
- do initialize save_wv.
+ * indent.c: Include stdio.h.
-2006-02-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * window.h (Vinitial_window_system): Declare.
+ (Vwindow_system): Delete declaration.
- * xdisp.c (update_menu_bar) [MAC_OS]: Don't set
- w->update_mode_line if arg F is not the selected frame.
+ * fontset.c (Finternal_char_font): Use FRAME_RIF.
- * macmenu.c (popup_activated_flag, submenu_id)
- (next_menubar_widget_id): Remove variables.
- (initialize_frame_menubar): Remove function.
- (pop_down_menu, mac_menu_show): Simplify save value.
- (dispose_menus): New function.
- (pop_down_menu, fill_menubar): Use it.
- (fill_submenu): Remove function. All uses changed to fill_menu.
- (add_menu_item): Remove args SUBMENU and FORCE_DISABLE. New arg
- POS. Don't call SetMenuItemHierarchicalID here.
- (fill_menu): Add arg SUBMENU_ID. Return submenu_id that is to be
- used next. Call SetMenuItemHierarchicalID here.
- (fill_menubar): Add arg DEEP_P. All uses changed. Clean up menu
- objects if needed. Reuse existing menu bar titles if possible.
- (set_frame_menubar): Don't clean up menu objects here.
+ * image.c (lookup_image): Don't initialize `c' until the xasserts
+ have been run.
-2006-02-18 Chong Yidong <cyd@stupidchicken.com>
-
- * window.c (window_min_size_1): Ensure room for the scroll bar and
- fringes.
-
-2006-02-17 Romain Francoise <romain@orebokech.com>
-
- * puresize.h (BASE_PURESIZE): Increment to 1200000.
-
-2006-02-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (Fmake_symbol): Comment-out left-over assert from before the
- addition of the BLOCK_INPUTs.
-
-2006-02-17 Juanma Barranquero <lekktu@gmail.com>
-
- * window.c (Fset_window_scroll_bars): Doc fix.
-
-2006-02-17 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (display_mode_element): Call display_string with correct
- PREC arg (which must be a number of characters, not column width).
-
-2006-02-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * frame.c (x_get_arg): Clear out PARAM in ALIST also on Mac.
-
- * macfns.c (x_set_menu_bar_lines): Menu bar is always shown on Mac.
-
- * macmenu.c (set_frame_menubar): Don't call DrawMenuBar.
-
-2006-02-14 Richard M. Stallman <rms@gnu.org>
-
- * frame.c (x_get_arg): Clear out all occurrences of PARAM in ALIST.
-
- * m/ibms390x.h: New file.
-
-2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
- value of x-gtk-whole-detached-tool-bar.
- (xg_tool_bar_attach_callback): Set show-arrow to TRUE.
-
- * xfns.c (syms_of_xfns): New variable: x-gtk-whole-detached-tool-bar.
-
-2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_x_to_emacs_modifiers): Make non-static.
-
- * xterm.h: Declare x_x_to_emacs_modifiers.
-
- * gtkutil.c (xg_tool_bar_button_cb): New function.
- (xg_tool_bar_callback): Call x_x_to_emacs_modifiers to
- store modifiers in event.
- (update_frame_tool_bar): Connect button-release-event to
- xg_tool_bar_button_cb.
-
-2006-02-13 Richard M. Stallman <rms@gnu.org>
-
- * .gdbinit (xwindow): Update the code to show the window box.
-
-2006-02-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (note_mouse_movement): Check for NULL FRAME_X_OUTPUT (frame).
-
-2006-02-12 Richard M. Stallman <rms@gnu.org>
-
- * cmds.c (internal_self_insert): Handle weird auto-fill-function.
-
-2006-02-11 Eli Zaretskii <eliz@gnu.org>
-
- * keyboard.c (Venable_disabled_menus_and_buttons): New variable.
- (syms_of_keyboard): DEVFAR_LISP and initialize it.
- (parse_tool_bar_item, parse_menu_item): If that variable is
- non-nil, don't disable menu items and tool-bar buttons.
-
-2006-02-11 Juanma Barranquero <lekktu@gmail.com>
-
- * doc.c (Fsubstitute_command_keys): Doc fix.
-
-2006-02-10 Thien-Thi Nguyen <ttn@gnu.org>
-
- * data.c (Findirect_function): Rewrite docstring.
- Fix omission bug: Declare new arg NOERROR.
-
-2006-02-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (x_set_mouse_color): Don't call rif->define_frame_cursor
- if window_desc is not set yet.
- (Fx_create_frame): Remove variable x_frame_name. Apply 2005-12-07
- and 2006-01-26 changes for xfns.c. Call x_iconify_frame if frame
- parameter `visibility' is `icon'.
- (Fx_create_frame, x_create_tip_frame): Use "fontset-standard"
- instead of "fontset-mac".
- (Fx_focus_frame): New defun.
- (syms_of_macfns): Defsubr it.
-
- * macterm.c (mac_define_frame_cursor): Don't change pointer shape
- for unfocused frame.
- (x_raise_frame): Call BringToFront instead of SelectWindow.
- (x_lower_frame): Use NULL instead of nil.
- (x_make_frame_visible): Don't call SelectWindow.
- (XTread_socket): Increment handling_signal at the start, decrement
- it at the end.
- [USE_CG_TEXT_DRAWING] (init_cg_text_anti_aliasing_threshold): Use
- CFPreferencesGetAppIntegerValue instead of Fmac_get_preference.
-
-2006-02-10 Kim F. Storm <storm@cua.dk>
-
- * data.c (Findirect_function): Add NOERROR arg. All callers changed
- to pass Qnil for NOERROR.
-
- * keymap.c (current_minor_maps_error): Remove.
- (current_minor_maps): Pass Qt for NOERROR to Findirect_function
- instead of using internal_condition_case_1+current_minor_maps_error.
-
-2006-02-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Must note mouse movement even for nil
- frames for GTK, in that case it is the tool bar. This is so that
- highlighted text get reset properly.
-
-2006-02-09 Juanma Barranquero <lekktu@gmail.com>
-
- * alloc.c (Fmake_bool_vector, Fpurecopy): Doc fixes.
-
-2006-02-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * window.c (adjust_window_trailing_edge): Check that shrinking
- does not set a window to size zero or less.
-
-2006-02-08 Miles Bader <miles@gnu.org>
-
- * editfns.c (Fconstrain_to_field): Use Fget_char_property instead
- of Fget_text_property (other field functions work with overlays as
- well as text-properties).
-
-2006-02-07 Kenichi Handa <handa@m17n.org>
-
- * dispextern.h (unibyte_display_via_language_environment): Extern it.
-
- * xterm.h (unibyte_display_via_language_environment):
- * w32term.h (unibyte_display_via_language_environment):
- * macterm.h (unibyte_display_via_language_environment): Delete extern.
-
-2006-02-07 Kenichi Handa <handa@m17n.org>
-
- * term.c (append_glyph): Refer to it->char_to_display instead of it->c.
- (produce_glyphs): Set the character to print in
- it->char_to_display. Handle unibyte-display-via-language-environment.
- (produce_stretch_glyph): Set character to print in it->char_to_display.
-
-2006-02-06 Kenichi Handa <handa@m17n.org>
-
- * lread.c (openp): Initialize encoded_fn before GCPRO it.
-
-2006-02-05 Ken Raeburn <raeburn@raeburn.org>
-
- * editfns.c (Fconstrain_to_field): Fix int/Lisp_Object mixup.
-
- * lisp.h (XPNTR) [!NO_UNION_TYPE && !HAVE_SHM && !DATA_SEG_BITS]:
- Cast bitfield value to EMACS_INT, to suppress gcc warning.
-
- * xrdb.c (malloc, realloc, free) [emacs]: Undefine macros before
- defining.
-
-2006-02-03 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c: Cache last merged escape glyph face.
- (last_escape_glyph_frame, last_escape_glyph_face_id)
- (last_escape_glyph_merged_face_id): New variables.
- (get_next_display_element): Use/update them.
- (redisplay_internal): Reset them before redisplay.
-
- * xdisp.c (set_iterator_to_next): Optimize 2004-12-13 fix.
- Only recheck faces after displaying ellipsis.
-
-2006-02-02 Kenichi Handa <handa@m17n.org>
-
- * coding.c (decode_composition_emacs_mule): Fix handling of
- incorrect format data.
-
-2006-01-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Use new tool bar function
- gtk_toolbar_insert() so we can have tool bars of different sizes.
-
-2006-01-30 Luc Teirlinck <teirllm@auburn.edu>
-
- * data.c (Flistp): Doc fix.
-
-2006-01-30 Juanma Barranquero <lekktu@gmail.com>
-
- * window.c (Fother_window, Fwindow_vscroll, Fset_window_vscroll):
- Fix typos in docstrings.
-
-2006-01-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * data.c (Fcar, Fcdr): Add links to Elisp manual to the docstrings.
-
-2006-01-27 Chong Yidong <cyd@stupidchicken.com>
-
- * alloc.c (make_interval, allocate_string)
- (allocate_string_data, make_float, Fcons, allocate_vectorlike)
- (Fmake_symbol, allocate_misc): Use BLOCK_INPUT when accessing
- global variables.
-
-2006-01-27 Eli Zaretskii <eliz@gnu.org>
-
- * dired.c (DIRENTRY_NONEMPTY) [__CYGWIN__]: Don't use d_ino; use
- the MSDOS definition.
-
-2006-01-26 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (check_pure_size): Make overflow message an "error message".
-
- * keymap.c (Fmap_keymap): Doc fix.
-
- * xfns.c (Fx_create_frame): Put all specified parms into f->param_alist
- unless they were cleared out.
-
- * frame.c (x_get_arg): "Clear out" the parm in ALIST if found there.
-
-2006-01-26 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
-
- * editfns.c (Fconstrain_to_field): Fix behaviour on field boundaries.
- (find_field): Set before_field to after_field when pos is at BEGV.
- (Fline_beginning_position, Fline_end_position):
- Clarify confusing doc string.
-
- * cmds.c (Fbeginning_of_line, Fend_of_line): Clarify confusing doc
- string.
-
-2006-01-26 Kenichi Handa <handa@m17n.org>
-
- * callproc.c (Fcall_process): GCPRO error_file. Encode infile,
- current_dir, and error_file. On reporting an error, decode them
- back.
-
-2006-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * regex.c (IMMEDIATE_QUIT_CHECK): Use it with SYNC_INPUT as well.
- (re_match_2_internal) <on_failure_jump, on_failure_jump_smart>:
- Don't check for quit, since any loop will go through fail or jump.
-
-2006-01-24 Chong Yidong <cyd@stupidchicken.com>
-
- * alloc.c (allocate_string_data): Update next_free immediately, to
- reduce risk of memory clobberage.
-
-2006-01-24 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
-
- * xdisp.c (handle_invisible_prop): Set it->position to fix cursor
- display when point moves across an ellipsis. If there are
- adjacent invisible texts, don't lose the second one's ellipsis.
- (x_produce_glyphs): Doc fix.
-
-2006-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c (x_catch_errors_unwind): Yet another int/Lisp_Object mixup.
-
-2006-01-23 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (handle_single_display_spec): Fix handling of space
- property on char from string: set *position rather than
- it->current.pos.
- (produce_stretch_glyph): Reduce width of stretch glyphs so they
- don't get wider than the window (unless truncate-lines is on).
-
-2006-01-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c: Avoid allocating Lisp data from a signal handler.
- (x_error_message): New var to replace x_error_message_string.
- (x_error_catcher, x_catch_errors, x_catch_errors_unwind)
- (x_check_errors, x_had_errors_p, x_clear_errors, x_error_handler)
- (syms_of_xterm): Use it instead of x_error_message_string.
-
- * alloc.c (lisp_align_free): Add an assertion.
- (make_interval, allocate_string, make_float, Fcons, Fmake_symbol)
- (allocate_misc): If ENABLE_CHECKING is on, check we're not called from
- a signal handler.
-
-2006-01-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * dired.c (syms_of_dired) <completion-ignored-extensions>: Doc fix.
-
-2006-01-21 Romain Francoise <romain@orebokech.com>
-
- * xdisp.c (get_window_cursor_type): Fix last change.
- Update copyright year.
-
-2006-01-20 Eli Zaretskii <eliz@gnu.org>
-
- * lread.c (Fload): Don't leak the file descriptor returned by
- openp if we are going to signal an error.
-
- * w32.c (sys_close): If FD is outside [0..MAXDESC) limits, pass it
- directly to _close.
- (sys_dup): Protect against new_fd larger than fd_info[] can handle.
- (sys_read): If FD is outside [0..MAXDESC) limits, pass it directly
- to _read.
- (sys_write): If FD is outside [0..MAXDESC) limits, pass it
- directly to _write.
-
- * .gdbinit: Don't dereference Vsystem_type's Lisp_Symbol pointer
- if it is NULL.
-
-2006-01-20 Kenichi Handa <handa@m17n.org>
-
- * puresize.h (BASE_PURESIZE): Increment to 1190000.
-
-2006-01-19 Chong Yidong <cyd@stupidchicken.com>
-
- * xdisp.c (get_window_cursor_type): Use cursor type specified by
- the selected buffer for the echo area too.
-
-2006-01-19 Richard M. Stallman <rms@gnu.org>
-
- * keymap.c (Fmap_keymap): Doc fix.
-
- * s/irix6-5.h (GC_SETJMP_WORKS, GC_MARK_STACK): New definitions.
-
- * keyboard.c (echo_char): Don't omit the space between first two
- echoed chars.
-
- * minibuf.c (read_minibuf): Fix previous change.
-
-2006-01-19 Kenichi Handa <handa@m17n.org>
-
- * xterm.c (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF.
-
-2006-01-17 Richard M. Stallman <rms@gnu.org>
-
- * frame.c (x_frame_get_and_record_arg): Don't record Qunbound
- value in f->param_alist.
-
-2006-01-15 Andreas Schwab <schwab@suse.de>
-
- * search.c (Freplace_match): Use UPPERCASEP instead of !NOCASEP.
-
-2006-01-13 Richard M. Stallman <rms@gnu.org>
-
- * Makefile.in: Define new macro WINDOW_SUPPORT.
- (lisp): Use it.
- (SOME_MACHINE_LISP): Add conditionally loaded files.
-
-2006-01-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_ATSUI] (atsu_get_text_layout_with_text_ptr)
- [MAC_OS_X_VERSION_MAX_ALLOWED >= 1020]: Specify kATSLineUseQDRendering.
- (XLoadQueryFont) [USE_ATSUI]: Display diacritical marks in
- decomposed form.
-
- * process.c [HAVE_INTTYPES_H]: Include inttypes.h.
- (ifflag_table): Fix typo (IFF_OACTIV -> IFF_OACTIVE).
- (Fnetwork_interface_info): Use HAVE_STRUCT_IFREQ_IFR_NETMASK
- macro. Also try member ifr_addr when getting netmask.
-
-2006-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (Fexpand_file_name): Remove redundant tests.
- Fix elimination of // so that it doesn't prevent elimination of an
- immediately following /. or /..
-
-2006-01-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_toggle_notify_cb): New function.
- (xg_toggle_visibility_cb): Move setting of x_gtk_show_hidden_files to
- xg_toggle_notify_cb.
- (xg_get_file_with_chooser): Add callback to xg_toggle_notify_cb when
- parameter value changes so the toggle button gets updated.
-
-2006-01-06 Nick Roberts <nickrob@snap.net.nz>
-
- * .gdbinit: Fix typo.
-
-2006-01-05 Eli Zaretskii <eliz@gnu.org>
-
- * .gdbinit: Fix last change.
-
-2006-01-05 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fmake_network_process): Use AF_INET instead of
- AF_UNSPEC when AF_INET6 is not defined.
-
-2006-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (mac_coerce_file_name_ptr, mac_coerce_file_name_desc):
- Don't check that the other type is known file-related one.
-
- * macfns.c (Fx_server_version): Use gestaltSystemVersionMajor,
- gestaltSystemVersionMinor, and gestaltSystemVersionBugFix on Mac
- OS X 10.4 and later.
-
-2006-01-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
- let GTK do all image processing. Importing Emacs own pixmaps to GTK
- looks bad for inactive tool bar items with some Gnome themes.
-
-2006-01-04 Eli Zaretskii <eliz@gnu.org>
-
- * .gdbinit: Avoid a warning message when x_error_quitter is not
- compiled in.
-
- * process.c [WINDOWSNT]: Undef AF_INET6 to disable IPv6 support
- for w32.
-
-2006-01-04 Kim F. Storm <storm@cua.dk>
-
- * process.c: Add IPv6 support.
- (Qipv4, Qipv6): New vars.
- (syms_of_process): Intern and staticpro them.
- (Fformat_network_address): Handle 9 or 8 element vector as IPv6 address
- with or without port number. Handle 4 element vector as IPv4 address
- without port number.
- (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size)
- (conv_lisp_to_sockaddr): Handle IPv6 addresses.
- (Fmake_network_process): Use :family 'ipv4 and 'ipv6 to explicitly
- request that address family only. :family nil or omitted means to
- determine address family from the specified :host and :service.
- (ifflag_table): Add missing OpenBSD IFF_ flags.
- (server_accept_connection): Handle IPv6 addresses.
- (init_process): Add (:family ipv4) and (:family ipv6) sub-features.
-
- * .gdbinit: Undo last change. Instead, look at Vsystem_type to
- determine which breakpoints to set.
-
-2006-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (describe_map_compare): Yet another int/Lisp_Object mixup.
-
- * window.h (Fwindow_minibuffer_p): Declare (for use in minibuf.c).
-
-2006-01-03 Romain Francoise <romain@orebokech.com>
-
- * emacs.c (main): Update copyright year.
-
-2006-01-03 Ken Raeburn <raeburn@gnu.org>
-
- * callproc.c (delete_temp_file): Bind file-name-handler-alist to
- nil for the call to internal_delete_file.
-
-2006-01-01 Ken Raeburn <raeburn@gnu.org>
-
- * callproc.c (Fcall_process_region): Bind file-name-handler-alist
- to nil for the call to Fwrite_region.
-
-2005-12-31 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (read_minibuf): Clear out all other minibuffer windows.
-
-2005-12-31 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (gdb_pvec_type): A dummy variable for GDB's sake.
-
-2005-12-30 Luc Teirlinck <teirllm@auburn.edu>
-
- * textprop.c (set_text_properties): Reword description of return value.
- Return Qnil if caller wants to remove all text properties from a
- string and the string already has no intervals.
-
-2005-12-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * term.c (visible_cursor): New boolean var.
- (set_terminal_modes, tty_show_cursor): Use "vs" or "ve" depending on
- visible_cursor.
- (syms_of_term): Export the new var as "visible-cursor".
-
-2005-12-30 Eli Zaretskii <eliz@gnu.org>
-
- * .gdbinit: Tell users not to worry about GDB warnings that some
- functions do not exist in the binary.
-
-2005-12-30 Andreas Schwab <schwab@suse.de>
-
- * process.c (Fnetwork_interface_info): Correctly terminate the
- loop over ifflag_table.
-
-2005-12-29 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (readevalloop): Test for reading a whole buffer
- before actually reading anything. Handle all cases, including
- START = END = nil and an already-narrowed buffer.
- Convert END to a marker if it is a number.
-
- * keymap.c (describe_map): Put sparse map elements into an array,
- sort them, then output a sequence of identical bindings on one line.
- (struct describe_map_elt): New data type.
- (describe_map_compare): New function.
-
-2005-12-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_file_with_chooser): Change message shown
- in file chooser.
-
-2005-12-27 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (readevalloop): Set PT and ZV in the proper buffer,
- not the current one.
-
- * minibuf.c (Fminibuffer_message): Doc fix.
- (read_minibuf): Set current_buffer->enable_multibyte_characters sooner.
-
- * eval.c (do_autoload): Ignore elements of Vautoload_queue
- where car is not symbol.
-
-2005-12-27 Kenichi Handa <handa@m17n.org>
-
- * charset.c (lisp_string_width): Check multibyteness of STRING.
-
-2005-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_show_hidden_files): New variable.
- (syms_of_xfns): Defvar it.
-
- * gtkutil.c (xg_toggle_visibility_cb): New function.
- (xg_get_file_with_chooser): Add toggle hidden files and a message
- to the new file chooser dialog. Show hidden files if
- x_show_hidden_files is non-zero.
-
-2005-12-26 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.h: Undo previous change.
-
- * Makefile.in (undo.o): Undo previous change.
-
- * undo.c: Undo previous change.
-
-2005-12-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * keyboard.h: extern last_point_position_window.
-
- * undo.c: include keyboard.h.
-
- * Makefile.in (undo.o): Depend on keyboard.h.
-
-2005-12-26 Richard M. Stallman <rms@gnu.org>
-
- * commands.h (last_point_position_window): Declare.
-
- * undo.c: Depend on window.h.
- (record_point): Save old point from the correct window.
-
- * keyboard.c (last_point_position_window): New variable.
- (command_loop_1): Set last_point_position_window.
- (syms_of_keyboard): Init it.
-
- * Makefile.in (undo.o): Depend on window.h.
-
-2005-12-25 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (un_autoload): Expect (0 . OFEATURES) in Vautoload_queue
- to undo a `provide'.
-
- * fns.c (Fprovide): Store (0 . OFEATURES) in Vautoload_queue.
-
-2005-12-25 Giorgos Keramidas <keramida@ceid.upatras.gr>
-
- * m/amdx86-64.h [__FreeBSD__] (START_FILES, LIB_STANDARD):
- define for FreeBSD on this platform.
-
-2005-12-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.h (TYPE_FILE_NAME): New define.
- (posix_pathname_to_fsspec, fsspec_to_posix_pathname): Remove externs.
-
- * mac.c (posix_pathname_to_fsspec, fsspec_to_posix_pathname):
- Add prototypes. Make static.
- (mac_aedesc_to_lisp): Initialize err to noErr.
- (mac_coerce_file_name_ptr, mac_coerce_file_name_desc)
- (init_coercion_handler): New functions.
- (Fmac_coerce_ae_data): Use coercion of Apple event data for
- translation from/to file names.
-
- * macterm.c: Don't include sys/param.h.
- (init_coercion_handler): Add extern.
- [MAC_OS8] (main): Call init_coercion_handler.
- (mac_initialize) [MAC_OSX]: Likewise.
- [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Use coercion of
- Apple event data for translation from/to file names.
-
- * macfns.c [TARGET_API_MAC_CARBON] (Fx_file_dialog): Likewise.
-
- * image.c [MAC_OS] (find_image_fsspec): Likewise.
-
-2005-12-23 Martin Rudalics <rudalics@gmx.at>
-
- * insdel.c (insert, insert_and_inherit, insert_before_markers)
- (insert_before_markers_and_inherit): Make sure FROM is correct
- when `after-change-functions' are called.
-
-2005-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (Fx_uses_old_gtk_dialog): New function.
-
- * gtkutil.c (xg_uses_old_file_dialog): New function.
- (xg_get_file_name): Use xg_uses_old_file_dialog.
-
- * gtkutil.h: Declare xg_uses_old_file_dialog.
-
-2005-12-22 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (xmenu_show): Call inhibit_garbage_collection.
-
-2005-12-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (Fmac_coerce_ae_data) [MAC_OSX]: Fix memory leak.
-
- * macgui.h (XCharStruct): Remove member `valid_p'.
- (STORE_XCHARSTRUCT): Don't set member `valid_p'.
- (XCharStructRow): New typedef.
- (XCHARSTRUCTROW_CHAR_VALID_P, XCHARSTRUCTROW_SET_CHAR_VALID):
- New macros.
- (struct MacFontStruct): Add member `bounds'. Remove member
- `per_char'. All uses for QuichDraw Text fonts are changed to
- `bounds.per_char'. ATSUI font bounds are represented as an array
- `bounds.rows' of XCharStructRow's, each of which consists of a
- bitmap of valid entries and an array of char bounds.
-
- * macterm.c (mac_per_char_metric): Add prototype.
- (x_per_char_metric) [USE_CG_TEXT_DRAWING]: Remove prototype.
- (mac_query_char_extents): New function.
- (x_per_char_metric): Use it.
- (XLoadQueryFont): Likewise. Consolidate min/max_bounds calculations.
- [USE_CG_TEXT_DRAWING] (mac_draw_string_cg):
- Use mac_per_char_metric instead of x_per_char_metric.
- (mac_text_extents_16): New function.
- (mac_compute_glyph_string_overhangs): Use it.
- (mac_unload_font): Free member `bounds' in struct MacFontStruct.
-
-2005-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * minibuf.c (Fdisplay_completion_list): Use XCAR/XCDR.
- (Fminibuffer_completion_help): Remove duplicates before display.
-
-2005-12-21 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+ * gtkutil.c (xg_create_frame_widgets): Use FRAME_BACKGROUND_PIXEL and
+ FRAME_FOREGROUND_PIXEL.
* print.c (print_preprocess): Don't lose print_depth levels while
iterating.
-2005-12-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (Qmac_apple_event): Add extern.
- (set_frame_menubar, mac_menu_show keymp_panes)
- (single_keymap_panes, list_of_panes, list_of_item)
- (single_menu_item): Add argument types to prototypes.
- (mac_dialog_show) [HAVE_DIALOGS]: Likewise.
- (struct skp): New struct (from xmenu.c).
- (single_keymap_panes, single_menu_item, list_of_panes)
- (list_of_item): Sync with xmenu.c.
- (Fx_popup_menu, Fx_popup_dialog): Likewise. Don't get window from
- POSITION if it is mac-apple-event event.
- (menubar_selection_callback): Don't use menu_command_in_progress.
- (set_frame_menubar): First parse all submenus, then make
- widget_value trees from them. Don't allocate any widget_value
- objects until we are done with the parsing.
- (parse_single_submenu, digest_single_submenu): New functions.
- (single_submenu): Function deleted, replaced by those two.
- (install_menu_quit_handler) [HAVE_CANCELMENUTRACKING]: Don't create
- or dispose of EventHandlerUPP. Install hander to all submenus.
- (mac_menu_show) [!HAVE_MULTILINGUAL_MENU]: Use ENCODE_MENU_STRING
- instead of ENCODE_SYSTEM.
- (free_frame_menubar, fill_submenu, fill_menu): Don't use NULL for
- integer values.
- [HAVE_DIALOGS] (mac_dialog_show): Sync with xdialog_show (in xmenu.c).
- (add_menu_item) [TARGET_API_MAC_CARBON]: Use CFString functions to
- format menu item string. Don't use NULL for integer value.
-
- * macterm.h (struct mac_output): Remove unused member
- menu_command_in_progress.
-
-2005-12-20 Juri Linkov <juri@jurta.org>
-
- * xmenu.c (Fx_popup_menu): Set Vmenu_updating_frame to f if
- position is non-nil, else set it to nil.
-
- * macmenu.c (Fx_popup_menu): Add `else' to set
- Vmenu_updating_frame to nil only if position is nil.
-
- * w32menu.c (Fx_popup_menu): Add `else' to set
- Vmenu_updating_frame to nil only if position is nil.
-
-2005-12-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c (make_lispy_event): Drag-and-drop items are now
- stored in member `args' of struct input_event.
-
- * termhooks.h (struct input_event): Fix comment for DRAG_N_DROP_EVENT.
-
- * xselect.c (x_handle_dnd_message): Drag-and-drop items are now
- stored in member `args' of struct input_event.
-
- * w32term.c (construct_drag_n_drop): Likewise.
-
- * macterm.c (mac_do_receive_drag): Likewise.
- (x_use_underline_position_properties): Undo 2005-07-13 change.
- (syms_of_macterm) <x-use-underline-position-properties>: Likewise.
- (mac_use_core_graphics, mac_wheel_button_is_mouse_2)
- (mac_pass_command_to_system, mac_pass_control_to_system):
- New boolean variables renamed from Lisp_Object ones
- Vmac_use_core_graphics, Vmac_wheel_button_is_mouse_2,
- Vmac_pass_command_to_system, and Vmac_pass_control_to_system.
- All uses changed.
- (syms_of_macterm): DEFVAR_BOOL them. Remove previous DEFVAR_LISPs.
- Make them user options.
- (mac_handle_command_event, mac_store_services_event):
- Call create_apple_event_from_event_ref without 5th argument.
- (backtranslate_modified_keycode): Mask off modifier keys that are
- mapped to some Emacs modifiers before passing it to KeyTranslate.
- (syms_of_macterm): Make variables `mac-emulate-three-button-mouse',
- `mac-wheel-button-is-mouse-2', and `mac-*-modifier' user options.
- Fix docstrings of `mac-*-modifier'.
-
- * mac.c (create_apple_event_from_event_ref): Remove arg `types'.
- (do_applescript): Change argument types to Lisp_Object.
- All uses changed.
-
- * macterm.h (create_apple_event_from_event_ref): Remove 5th
- argument from extern.
-
-2005-12-18 Dan Nicolaescu <dann@ics.uci.edu>
-
- * xfns.c (Fx_backspace_delete_keys_p): In case we cannot determine
- the answer, return `lambda', not nil.
-
-2005-12-17 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in (bootstrap-temacs): Warn that parts of commands
- enclosed in $(ARGQUOTE)s should not be split between two lines, as
- that will break with GNU Make >3.80, when sh.exe is used and
- arg quoting is with '..'.
-
-2005-12-17 Chong Yidong <cyd@stupidchicken.com>
-
- * print.c (print_preprocess): Just signal an error if print_depth
- is exceeded.
-
-2005-12-17 Eli Zaretskii <eliz@gnu.org>
-
- * .gdbinit: Set a breakpoint on w32_abort.
-
-2005-12-16 Juri Linkov <juri@jurta.org>
-
- * minibuf.c (Fminibuffer_completion_contents): New Lisp function
- created from minibuffer_completion_contents.
- (minibuffer_completion_contents): Remove.
- (do_completion, Fminibuffer_complete_word)
- (Fminibuffer_completion_help): Replace minibuffer_completion_contents
- with Fminibuffer_completion_contents.
- (syms_of_minibuf): Add Sminibuffer_completion_contents.
- (Fdisplay_completion_list): Doc fix.
- (display_completion_list_1): Use `nil' for second arg of
- `Fdisplay_completion_list'.
-
-2005-12-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (compute_tip_xy): Handle negative dx and dy.
-
- * w32fns.c (compute_tip_xy): Ditto.
-
- * macfns.c (compute_tip_xy): Ditto.
-
-2005-12-14 Chong Yidong <cyd@stupidchicken.com>
-
- * print.c (print_preprocess): Go to a deeper print_depth to avoid
- print_object loop.
-
-2005-12-14 Kyotaro HORIGUCHI <horiguti@meadowy.org> (tiny change)
-
- * coding.c (code_convert_region_unwind): GCPRO arg.
-
-2005-12-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (compute_tip_xy): Calculate root_y the same way as root_x,
- i.e. dy is offset from top of frame instead of bottom.
-
- * macfns.c (compute_tip_xy): Ditto.
-
- * w32fns.c (compute_tip_xy): Ditto.
-
- * gtkutil.c (SSDATA): New macro to remove compiler warnings.
- (xg_get_image_for_pixmap, xg_create_frame_widgets)
- (xg_get_file_with_chooser): Use SSDATA instead of SDATA.
-
- * xmenu.c (menubar_selection_callback): Do nothing if the callback
- is for an unselected radio menu item.
-
-2005-12-11 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (syms_of_xdisp) <blink-cursor-alist>: Doc fix.
-
- * lisp.h [! NO_UNION_TYPE] (EQ): Use == so args are computed just once.
-
- * keymap.c (Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
- (Flookup_key): Doc fix.
- (syms_of_keymap) <function-key-map>: Doc fix.
-
- * fns.c (Frequire): Treat evaluating from a source file
- like loading the file.
-
- * floatfns.c (Flog): Doc fix.
-
- * fileio.c (Finsert_file_contents): Set Vdeactivate_mark
- when we change the buffer.
-
-2005-12-11 Juri Linkov <juri@jurta.org>
-
- * minibuf.c (display_completion_list_1):
- Call `minibuffer_completion_contents' instead of using `nil' as
- second arg of `Fdisplay_completion_list'.
- (keys_of_minibuf): Unbind SPC in
- Vminibuffer_local_filename_completion_map (see also related
- change on 2005-12-06).
-
-2005-12-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * emacs.c (main) [MAC_OS8]: Undo previous change.
-
- * macselect.c (syms_of_macselect) <mac-apple-event-map>:
- Initialize to nil. Keymap is now created in lisp/term/mac-win.el.
-
-2005-12-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in (macselect.o): Depend on keymap.h.
-
- * emacs.c (main) [MAC_OS8]: Call syms_of_keymap before
- syms_of_macselect.
-
- * image.c (init_image) [MAC_OS]: Don't call EnterMovies.
- [!HAVE_GIF && MAC_OS] (gif_load): Call EnterMovies.
-
- * keyboard.c (Qmac_apple_event) [MAC_OS]: New variable.
- (syms_of_keyboard) [MAC_OS]: Initialize it.
- (make_lispy_event) [MAC_OS]: Build lisp event for MAC_APPLE_EVENT.
-
- * mac.c (Qundecoded_file_name): New variable.
- (syms_of_mac): Initialize it.
- (mac_aelist_to_lisp, mac_aedesc_to_lisp): New functions.
- [TARGET_API_MAC_CARBON] (create_apple_event_from_event_ref): New fun.
- (Fmac_coerce_ae_data): New defun.
- (syms_of_mac): Defsubr it.
-
- * macselect.c: Include keymap.h.
- (mac_ready_for_apple_events): New variable.
- (Vmac_apple_event_map, Qmac_apple_event_class)
- (Qmac_apple_event_id): New variables.
- (syms_of_macselect): Initialize them.
- (Qundefined, mac_store_apple_event): Add externs.
- (struct apple_event_binding): New struct.
- (find_event_binding_fun, find_event_binding)
- (mac_find_apple_event_spec, defer_apple_events)
- (mac_handle_apple_event, init_apple_event_handler)
- (copy_scrap_flavor_data): New functions.
- (Fmac_process_deferred_apple_events): New defun.
- (syms_of_macselect): Defsubr it.
- (mac_store_services_event): Fix extern.
- (mac_handle_service_event): Don't allocate Lisp objects during
- asynchronous input processing. Use mac_store_services_event
- instead of mac_store_application_menu_event.
-
- * macterm.c (Qmac_ready_for_drag_n_drop, Qapplication, Qabout)
- (Qpreferences): Remove variables.
- (syms_of_macterm) : Don't initialize them.
- (Qhicommand) [USE_CARBON_EVENTS]: New variable.
- (syms_of_macterm) [USE_CARBON_EVENTS]: Initialize it.
- (init_required_apple_events, do_ae_open_application)
- (do_ae_print_documents, do_ae_open_documents)
- (do_ae_quit_application): Remove functions and prototypes.
- (mac_ready_for_apple_events, Qundefined, init_apple_event_handler)
- (mac_find_apple_event_spec): Add externs.
- (mac_store_application_menu_event): Remove function.
- (mac_store_apple_event, mac_make_lispy_event_code): New functions.
- (mac_handle_command_event): Create Apple event from Carbon event.
- Use mac_store_apple_event instead of mac_store_application_menu_event.
- [MAC_OSX] (mac_store_services_event): Likewise.
- (struct SelectionRange, SelectionRange): Remove struct and typedef.
- [MAC_OS8] (main): Call init_apple_event_handler instead of
- init_required_apple_events.
- (mac_initialize) [MAC_OSX]: Likewise.
- [!USE_CARBON_EVENTS] (mac_wait_next_event):
- Use mac_ready_for_apple_events instead of Qmac_ready_for_drag_n_drop.
-
- * macterm.h (mac_make_lispy_event_code, mac_aedesc_to_lisp):
- Add externs.
- (create_apple_event_from_event_ref) [TARGET_API_MAC_CARBON]: Likewise.
- (Fmac_get_preference): Add EXFUN.
-
- * termhooks.h (enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT
- event.
-
-2005-12-09 Richard M. Stallman <rms@gnu.org>
-
- * xfns.c (Fx_create_frame): Reinstate previous change.
-
-2005-12-09 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (w32_abort) [__GNUC__]: Add instructions for attaching
- GDB to the abort dialog.
-
-2005-12-09 Kyotaro HORIGUCHI <horiguti@meadowy.org> (tiny change)
-
- * indent.c (Fvertical_motion): Force move if starting on
- stretch glyph.
-
-2005-12-08 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (read_escape) <\s>: Don't treat strings specially.
-
- * xfns.c (Fx_create_frame): Comment out previous change.
-
-2005-12-07 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
-
- * xfns.c (Fx_create_frame): Initialize Vdefault_minibuffer_frame,
- when needed.
-
-2005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * minibuf.c (keys_of_minibuf): Just unbind SPC in
- Vminibuffer_local_filename_completion_map rather than forcing it
- explicitly to the same binding as the global map.
-
-2005-12-06 Ken Raeburn <raeburn@gnu.org>
-
- * buffer.c (Fkill_buffer): Avoid dangerous side effects in NILP args.
- * bytecode.c (Fbyte_code): Likewise.
- * fileio.c (internal_delete_file, Fread_file_name_internal): Likewise.
- * minibuf.c (Fminibuffer_complete_and_exit): Likewise.
- * undo.c (truncate_undo_list): Likewise.
-
-2005-12-05 Richard M. Stallman <rms@gnu.org>
-
- * window.c (enlarge_window): Eliminate arg preserve_before.
- Assume it is 0. All callers changed.
- (Fenlarge_window, Fshrink_window): Likewise.
-
-2005-12-02 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (compute_tip_xy): Put tip above pointer if it doesn't
- fit below.
-
-2005-12-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h: Add prototype for xg_set_icon_from_xpm_data.
-
- * xfns.c (x_real_positions): int ign => unsigned int.
- (xg_set_icon_from_xpm_data): Remove unused variable err.
- (x_set_name_internal, Fx_create_frame, xg_set_icon): Add cast
- to remove compiler warning.
- (compute_tip_xy): Put tip above pointer if it doesn't fit below.
-
-2005-12-02 David Reitter <david.reitter@gmail.com>
-
- * minibuf.c (Fcompleting_read): If Vminibuffer_completing_file_name is
- non-nil, use the new keymaps Vminibuffer_local_filename_completion_map
- and Vminibuffer_local_must_match_filename_map keymaps.
- (keys_of_minibuf): Bind SPC in the new file-name completion keymaps.
-
- * keymap.c (Vminibuffer_local_filename_completion_map)
- (Vminibuffer_local_must_match_filename_map): New variables.
- (syms_of_keymap): DEFVAR_LISP them, initialize them, and set their
- parent to be Vminibuffer_local_completion_map and
- Vminibuffer_local_must_match_map, respectively.
-
- * commands.h (Vminibuffer_local_filename_completion_map)
- (Vminibuffer_local_must_match_filename_map): Declare the new keymaps.
-
-2005-12-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Fset_window_configuration): Don't accidentally copy the
- window-point of one window to another.
-
-2005-11-30 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
-
- * buffer.c (Fpop_to_buffer): Remove superfluous call to record_buffer.
-
-2005-11-30 Kim F. Storm <storm@cua.dk>
-
- * alloc.c: Include fcntl.h. Define O_WRONLY if not defined.
- (valid_lisp_object_p) [!GC_MARK_STACK]: Validate pointer by
- passing it to `emacs_write'.
-
-2005-11-29 Ari Roponen <arjuropo@cc.jyu.fi> (tiny change)
-
- * atimer.c (stop_other_atimers): Fix loop to correctly compute `prev'.
-
-2005-11-27 Richard M. Stallman <rms@gnu.org>
-
- * window.c (adjust_window_trailing_edge): New function.
- (Fadjust_window_trailing_edge): New function.
- (syms_of_window): Defsubr it.
- (window_deletion_count): New variable.
- (delete_window): Update window_deletion_count.
-
-2005-11-26 Eli Zaretskii <eliz@gnu.org>
-
- * minibuf.c (syms_of_minibuf): Mention the extension of
- `completion-auto-help's meaning by complete.el.
-
-2005-11-26 Henrik Enberg <henrik.enberg@telia.com>
-
- * xfaces.c (Finternal_set_lisp_face_attribute_from_resource):
- Handle :inherit property as a lisp expression.
-
-2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (Qcontrol): Rename from Qctrl. All uses changed.
- (syms_of_macterm): Staticpro Qcontrol, Qmeta, Qalt, Qhyper,
- Qsuper, and Qmodifier_value.
- (Vmac_control_modifier, Vmac_option_modifier)
- (Vmac_command_modifier, Vmac_function_modifier)
- (Vmac_emulate_three_button_mouse, Vmac_wheel_button_is_mouse_2)
- (Vmac_pass_command_to_system, Vmac_pass_control_to_system)
- (Vmac_charset_info_alist): Doc fixes.
-
-2005-11-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * emacs.c (main) [MAC_OSX]: Change working directory to home
- directory if `-psn_*' option is specified.
-
- * mac.c (DECODE_UTF_8): Remove macro.
- [TARGET_API_MAC_CARBON] (cfstring_to_lisp_nodecode): New function
- created from cfstring_to_lisp.
- [TARGET_API_MAC_CARBON] (cfstring_to_lisp): Use it.
- (xrm_get_preference_database) [TARGET_API_MAC_CARBON]: Likewise.
-
- * macterm.h (cfstring_to_lisp_nodecode) [TARGET_API_MAC_CARBON]:
- Add prototype.
-
-2005-11-21 Ken Raeburn <raeburn@gnu.org>
-
- * keymap.c (shadow_lookup): Use make_number to pass a number to
- Fsubstring.
-
-2005-11-21 Juri Linkov <juri@jurta.org>
-
- * puresize.h (BASE_PURESIZE): Increment to 1180000.
-
-2005-11-20 Chong Yidong <cyd@stupidchicken.com>
-
- * xfaces.c (Finternal_set_lisp_face_attribute):
- Use :ignore-defface for new frame defaults when `unspecified' is
- supplied.
- (Finternal_get_lisp_face_attribute): Hide :ignore-defface.
- (merge_face_vectors): Don't do :ignore-defface overwriting here.
- (Finternal_merge_in_global_face): Do it here.
-
-2005-11-20 Juri Linkov <juri@jurta.org>
-
- * charset.c (invalid_character): Use Lisp-readable syntax
- for octal and hex. Reorder decimal, octal and hex values.
-
-2005-11-20 Nick Roberts <nickrob@snap.net.nz>
-
- * lisp.h: Use typedef when Lisp_Object is EMACS_INT so that
- this type is recognised when debugging.
-
-2005-11-19 Andreas Schwab <schwab@suse.de>
-
- * .gdbinit (nextcons, xcdr, xfloat): Update for changes in
- Lisp_Cons and Lisp_Float.
-
-2005-11-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_CG_TEXT_DRAWING] (cg_text_anti_aliasing_threshold):
- New variable.
- [USE_CG_TEXT_DRAWING] (init_cg_text_anti_aliasing_threshold): New fun.
- (init_font_name_table) [USE_ATSUI && USE_CG_TEXT_DRAWING]: Use it.
- [USE_CG_TEXT_DRAWING] (mac_draw_string_cg): Don't do antialiasing if
- font size is smaller than or equal to cg_text_anti_aliasing_threshold.
-
-2005-11-17 Chong Yidong <cyd@stupidchicken.com>
-
- * image.c (x_create_bitmap_from_xpm_data): Free attributes on fail.
-
- * xfaces.c (Qignore_defface): New variable.
- (syms_of_xfaces): Provide `:ignore-defface'.
- (IGNORE_DEFFACE_P): New macro.
- (check_lface_attrs, lface_fully_specified_p)
- (Finternal_set_lisp_face_attribute)
- (Fface_attribute_relative_p, Fmerge_face_attribute):
- Handle Qignore_defface as a possible value.
- (merge_face_vectors): The merged face is `unspecified' if the
- mergee specifies `:ignore-defface'.
-
-2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lread.c (readevalloop): Add missing GCPROs.
-
-2005-11-16 Chong Yidong <cyd@stupidchicken.com>
-
- * xfns.c (xg_set_icon_from_xpm_data): New function.
-
- * gnu.h (gnu_xpm_bits): Rename from gnu_bits.
- (gnu_xbm_bits): Rename from gnu_bits (xbm version).
-
- * xterm.c (x_bitmap_icon): Use the xpm if available.
-
- * image.c (x_create_bitmap_from_xpm_data): New function.
- (x_create_bitmap_from_xpm_data): Initialize XpmAttributes.
-
-2005-11-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * Makefile.in (lisp, shortlisp): Add rfn-eshadow.
-
-2005-11-16 Nick Roberts <nickrob@snap.net.nz>
-
- * .gdbinit: Make SIGTSTP work like SIGINT normally does.
-
-2005-11-15 Andreas Schwab <schwab@suse.de>
-
- * lisp.h (struct Lisp_Cons): Make cdr a union.
- (XCDR_AS_LVALUE): Adjust.
- (struct Lisp_Float): Make data a union.
- (XFLOAT_DATA): Adjust.
-
- * alloc.c (free_float): Make free list chaining aliasing-safe.
- (make_float): Likewise.
- (free_cons): Likewise.
- (Fcons): Likewise.
- (check_cons_list): Likewise.
- (Fmake_symbol): Likewise.
- (allocate_misc): Likewise.
- (free_misc): Likewise.
- (gc_sweep): Likewise.
-
-2005-11-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (HASHKEY_QUERY_CACHE): New define.
- (xrm_create_database, xrm_q_put_resource): Empty query cache.
- (xrm_get_resource): Use query cache.
-
- * image.c (init_image) [MAC_OS]: Don't call EnterMovies if
- inhibit_window_system is set.
-
-2005-11-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macgui.h (USE_CG_TEXT_DRAWING): New define.
- (struct MacFontStruct) [USE_CG_TEXT_DRAWING]: New members cg_font
- and cg_glyphs.
-
- * macterm.c [USE_CG_TEXT_DRAWING] (mac_draw_string_cg): New function.
- (x_draw_glyph_string_foreground) [USE_CG_TEXT_DRAWING]: Use it.
- (XLoadQueryFont) [USE_CG_TEXT_DRAWING]: Set members cg_font and
- cg_glyphs in struct MacFontStruct if synthesized bold or italic is
- not used and font substitution never occurs for ASCII and Latin-1
- characters.
- (XLoadQueryFont): Maximum and minimum metrics are now those among
- ASCII characters.
- (XLoadQueryFont) [!MAC_OS8 || USE_ATSUI]: Apply WebKit-style
- height adjustments for Courier, Helvetica, and Times.
-
- * s/darwin.h (LIBS_CARBON) [!HAVE_CARBON]: Remove `-framework Carbon'.
-
-2005-11-11 David Reitter <david.reitter@gmail.com>
-
- * macterm.c (syms_of_macterm): Remove macCtrlKey, macShiftKey,
- macMetaKey, macAltKey. Introduce Qctrl, Qmeta,
- Vmac_control_modifier / mac-control-modifier,
- Vmac_option_modifier / mac-option-modifier,
- Vmac_command_modifier / mac-command-modifier.
- (mac_to_emacs_modifiers): Use the new style modifier
- variables. Return UInt32 (modifiers are longs now.)
- (backtranslate_modified_keycode): New function (refactoring).
- (XTread_socket): Use new modifier variables and refactored function.
- (mac_determine_quit_char_modifiers): Remove macMetaKey (there is
- no dedicated meta key. Not in use anyway.)
- (convert_fn_keycode): Map Fn-keys to their original keycode
- using a table (english keyboard only).
-
-2005-11-11 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (pitx): Fix output format if n_overlay_strings > 0.
- Add post hook to "backtrace" to always dump lisp call stack to
- increase chance of people sending it to us when reporting bugs.
-
- * doc.c (Fsubstitute_command_keys): Doc fix.
-
- * dispextern.h (struct it): New member ignore_overlay_strings_at_pos_p.
-
- * xdisp.c (handle_stop): Skip overlay string handling if
- ignore_overlay_strings_at_pos_p is set.
- (set_iterator_to_next): At end of display vector, set
- ignore_overlay_strings_at_pos_p if dpvec came from an overlay
- string, so we skip those overlay strings at current pos.
-
-2005-11-10 Lars Hansen <larsh@soem.dk>
-
- * fileio.c (file-regular-p): Doc fix.
-
-2005-11-10 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (valid_lisp_object_p): New function to validate that
- an object is really a valid Lisp_Object.
-
- * lisp.h (valid_lisp_object_p): Add prototype.
-
- * print.c (safe_debug_print): New function to be called from gdb
- to print Lisp objects; use valid_lisp_object_p to avoid crashing
- if user tries to print something which is not a Lisp object.
-
- * .gdbinit (pp, pp1): Use safe_debug_print.
- (pv, pv1): New commands to print value of a lisp variable.
-
-2005-11-10 Nick Roberts <nickrob@snap.net.nz>
-
- * .gdbinit (pp1): New user-defined function.
-
-2005-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c [MAC_OSX] (image_load_quartz2d): Fix memory leak.
-
- * mac.c [MAC_OSX] (init_mac_osx_environment): Reinitialize locale
- related variables for dumped executable.
-
- * unexmacosx.c (unexec_write_zero): New function.
- (copy_data_segment): Clear uninitialized local variables in
- statically linked libraries.
-
- * s/darwin.h (C_SWITCH_SYSTEM): Remove -fno-common.
-
-2005-11-09 Juri Linkov <juri@jurta.org>
-
- * keymap.c (shadow_lookup): If Flookup_key returns a number,
- call it again with a sub-key-sequence, and if its return value
- is non-nil (sub-key is bound), return nil.
-
-2005-11-08 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fsignal_process): Recognize signal names with and
- without SIG prefix, e.g. SIGHUP and HUP.
-
- * search.c (search_buffer): No need to initialize base_pat.
-
-2005-11-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Fget_lru_window, Fget_largest_window, window_loop):
- Don't abuse the `mini' arg. Use the `obj' arg instead.
-
-2005-11-04 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (show_mouse_face): Clear mouse face to eol.
-
-2005-11-03 Dan Nicolaescu <dann@ics.uci.edu>
-
- * Makefile.in (lisp, shortlisp): Add emacs-lisp/syntax.elc,
- font-lock.elc and jit-lock.elc.
-
-2005-11-03 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Fenlarge_window): Rename SIDE to HORIZONTAL.
- (enlarge_window): Rename WIDTHFLAG to HORIZ_FLAG.
- (CURBEG, CURSIZE): Use HORIZ_FLAG instead of WIDTHFLAG.
-
- * sheap.c (STATIC_HEAP_SIZE): Increment both definitions.
-
- * alloc.c (refill_memory_reserve): Move decl out of conditionals.
-
-2005-11-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Fdisplay_buffer): Fix last change to not use
- a dedicated window.
-
-2005-11-01 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (update_window_fringes): Undo 2005-10-27 change.
- Instead, rotate the bottom angle bitmap 180 degrees to indicate
- that the bottom row does not end in a newline.
-
-2005-11-01 Andreas Schwab <schwab@suse.de>
-
- * unexelf.c (unexec): Handle .plt section in BSS segment.
-
-2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lread.c (readevalloop): Yet another int/Lisp_Object mixup (YAILOM).
-
- * window.c (window_loop): For LRU and LARGEST, let the `mini' argument
- determine whether to consider dedicated windows as well.
- (Fget_lru_window, Fget_largest_window): Add `dedicated' argument.
- (Fdisplay_buffer): Do consider dedicated windows in those cases where
- we will split the window rather than reuse it.
- Don't try to use windows on other displays.
-
-2005-10-31 Dan Nicolaescu <dann@ics.uci.edu>
-
- * puresize.h (BASE_PURESIZE): Increment to 1170000.
-
-2005-10-31 Romain Francoise <romain@orebokech.com>
-
- * macfns.c: Update copyright year.
- * m/gould.h: Likewise.
-
-2005-10-30 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (display_line): Restore it->current_x and call
- extend_face_to_end_of_line when last glyph doesn't fit on line.
- (set_glyph_string_background_width): Remove specific tests here
- to see if face background should extend to end of line. Simplify.
-
-2005-10-30 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (BYTES_USED): Use uordblks, not arena.
- (bytes_used_when_reconsidered): New variable.
- (emacs_blocked_free): Set that.
-
-2005-10-29 Chong Yidong <cyd@stupidchicken.com>
-
- * alloc.c (emacs_blocked_free): Fix typo.
-
-2005-10-29 Richard M. Stallman <rms@gnu.org>
-
- * data.c (Fmake_variable_frame_local): Doc fix.
-
- * xdisp.c (handle_fontified_prop): Do nothing if memory full.
- (format_mode_line_unwind_data): New arg SAVE_PROPTRANS
- controls whether to save and restore mode_line_proptrans_alist.
- Callers changed.
- (unwind_format_mode_line): Work with that feature.
- (redisplay_internal): Don't call prepare_menu_bars if memory full.
- (move_elt_to_front): New function.
- (display_mode_element): Use move_elt_to_front.
- Don't bother munging text props on a null string.
- Delete obsolete elts from mode_line_proptrans_alist.
- (decode_mode_spec): Test Vmemory_full, not spare_memory.
- (Fformat_mode_line): Clear mode_line_proptrans_alist after saving.
-
- * lisp.h (memory_full_cons_threshold): Declare.
- (internal_lisp_condition_case): Declare.
-
- * alloc.c (syms_of_alloc) <memory-full>: Doc fix.
- (Fmemory_full_p): Function deleted.
- (syms_of_alloc): Don't defsubr it.
- (memory_full_cons_threshold): New variable.
- (spare_memory): Now a vector of 7 elts.
- (buffer_memory_full): Don't set Vmemory_full here.
- (xfree): Don't try to refill here.
- (emacs_blocked_free): Record BYTES_USED in local var.
- (memory_full): Now free all the slots in spare_memory.
- (refill_memory_reserve): Allocate each slot in spare_memory.
- (init_alloc_once): Call refill_memory_reserve.
-
- * keyboard.c (command_loop_1): Don't set Vmemory_full here.
-
- * eval.c (internal_lisp_condition_case): New function.
- (Fcondition_case): Use internal_lisp_condition_case.
- (Feval): Test Vmemory_full and memory_full_cons_threshold.
- (Ffuncall): Likewise.
-
- * bytecode.c (Fbyte_code): Use internal_lisp_condition_case.
-
-2005-10-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (Fparse_partial_sexp): Fix docstring.
-
-2005-10-28 Romain Francoise <romain@orebokech.com>
-
- * puresize.h (BASE_PURESIZE): Increment to 1130000.
-
-2005-10-28 Richard M. Stallman <rms@gnu.org>
-
- * xfns.c (syms_of_xfns): Provide `x' as feature.
-
- * xdisp.c (decode_mode_spec): Define %e to indicate memory full.
-
- * editfns.c (Fformat): Don't include string padding
- between info[n].start and info[n].end.
-
- * alloc.c (spare_memory): No longer static.
- (xfree) [!SYSTEM_MALLOC]: Call refill_memory_reserve.
-
- * puresize.h (BASE_PURESIZE): Increment to 1120000.
-
-2005-10-27 Chong Yidong <cyd@stupidchicken.com>
-
- * data.c (Fmake_variable_frame_local): Add clarification to docstring.
-
- * fringe.c (update_window_fringes): Handle case where buffer ends
- with a newline.
-
-2005-10-27 Kenichi Handa <handa@m17n.org>
-
- * coding.h (DECODE_SYSTEM): Fix argument name; name->str.
-
-2005-10-24 Kenichi Handa <handa@m17n.org>
-
- * charset.h (charset_mule_unicode_0100_24ff)
- (charset_mule_unicode_2500_33ff, charset_mule_unicode_e000_ffff):
- Extern them.
-
- * charset.c (charset_mule_unicode_0100_24ff)
- (charset_mule_unicode_2500_33ff, charset_mule_unicode_e000_ffff):
- New variables.
- (Fsetup_special_charsets): Initialize them.
-
- * xterm.c (handle_one_xevent): Handle keysyms directly mapped to
- supported Unicode characters.
-
-2005-10-25 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_to_x_font): Avoid forcing font widths.
-
-2005-10-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c [MAC_OS] (image_load_qt_1): Check image size.
- Use GraphicsImportGetImageDescription instead of
- GraphicsImportGetNaturalBounds.
- [MAC_OSX] (image_load_quartz2d): Check image size.
- [MAC_OS] (xpm_load_image): Likewise.
-
- * macterm.c (last_mouse_glyph_frame): New var.
- (note_mouse_movement): Say mouse moved if current frame differs
- from last_mouse_glyph_frame, and update last_mouse_glyph_frame.
- (XTmouse_position): Set last_mouse_glyph_frame.
- (XTread_socket): Clear last_mouse_glyph_frame on mouse up/down event.
- (mac_draw_string_common) [USE_ATSUI && WORDS_BIG_ENDIAN]: Fix typo.
- Use EndianU16_BtoN.
- (mac_draw_string_common) [MAC_OSX]: Don't use ATSUClearLayoutControls.
- (x_per_char_metric, XLoadQueryFont)
- [MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Use device origins to get
- glyph bounds.
- (mac_to_x_fontname, mac_do_list_fonts)
- (mac_initialize_display_info): Change screen resolutions to 72dpi.
-
-2005-10-25 Masatake YAMATO <jet@gyve.org>
-
- * minibuf.c (Fdisplay_completion_list): Small doc fix.
-
-2005-10-24 Kim F. Storm <storm@cua.dk>
-
- * xterm.c: Undo 2005-10-23 change.
- (last_mouse_glyph_frame): New var.
- (note_mouse_movement): Say mouse moved if current frame differs
- from last_mouse_glyph_frame, and update last_mouse_glyph_frame.
- (XTmouse_position): Set last_mouse_glyph_frame.
- (handle_one_xevent): Clear last_mouse_glyph_frame [instead of
- last_mouse_glyph] on mouse up/down event.
-
- * editfns.c (Fcompare_buffer_substrings): Fix last change.
-
-2005-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * editfns.c (Fcompare_buffer_substrings): Handle multibyte chars.
-
-2005-10-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (note_mouse_movement): Always call note_mouse_highlight
- so tool tips don't interfere with press on tool bar button.
-
-2005-10-23 Richard M. Stallman <rms@gnu.org>
-
- * casetab.c (Fset_case_table): Doc fix.
-
- * lread.c (build_load_history): Replace STREAM arg with ENTIRE.
- (readevalloop): Compute ENTIRE properly.
- (syms_of_lread) <load-history>: Doc fix.
-
-2005-10-21 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (Fload): Simplify gcpro structure.
- Gcpro FOUND as well as FILE, but not EFOUND.
- Unless preloading, record FOUND instead of FILE in Vload_history.
- Rename repeat local FILE to MSG_FILE.
- (syms_of_lread) <load-history>: Doc fix.
-
-2005-10-21 Kenichi Handa <handa@m17n.org>
-
- * search.c (boyer_moore): Add parens to fix and/or precedence bug.
-
-2005-10-20 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (clone_per_buffer_values): Remove unused var tem.
- (init_buffer): Remove unused vars dotstat, pwdstat.
-
- * ccl.c (check_ccl_update): Remove unused var vp.
-
- * fileio.c (auto_save_error): Call SAFE_FREE.
-
- * fns.c (Fchar_table_range): Remove unused var i.
-
- * minibuf.c (display_completion_list_1): New wrapper function
- for Fdisplay_completion_list.
- (Fminibuffer_completion_help): Use it.
-
- * term.c (encode_terminal_code): Remove unused var src_start.
-
- * window.c (Fwindow_tree): Remove unused var alist.
-
- * xterm.c (x_calc_absolute_position): Remove unused vars win_x, win_y.
-
-2005-10-20 Aubrey Jaffer <agj@alum.mit.edu> (tiny change)
-
- * unexelf.c (unexec): Fix calls to `fatal' with less than 3 arguments.
-
-2005-10-20 Olli Savia <ops@iki.fi> (tiny change)
-
- * syssignal.h [__Lynx__]: Undef SIGPOLL along with SIGIO.
-
-2005-10-20 Andreas Schwab <schwab@suse.de>
-
- * minibuf.c (Fdisplay_completion_list): Doc fix.
-
-2005-10-19 Kim F. Storm <storm@cua.dk>
-
- * image.c (check_image_size): Handle integer Vmax_image_size value
- directly as max pixel value. Use default frame size for null frame.
- (syms_of_image) <max-image-size>: Describe integer value.
-
-2005-10-19 Romain Francoise <romain@orebokech.com>
-
- * emacs.c (main): Update copyright year.
-
-2005-10-18 Chong Yidong <cyd@stupidchicken.com>
-
- * image.c (Vmax_image_size): New variable.
- (check_image_size): New function.
- (xbm_read_bitmap_data, pbm_load, png_load, jpeg_load, tiff_load)
- (gif_load, gs_load): Use it.
- (lookup_image): Try loading again if previous load failed.
- (xbm_read_bitmap_data): Add a new argument, a pointer to the frame
- to display in, NULL if none.
- (xbm_load_image, xbm_file_p): Pass xbm_read_bitmap_data the new
- argument.
-
-2005-10-18 Richard M. Stallman <rms@gnu.org>
-
- * search.c (Fstring_match): Doc fix.
-
-2005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (note_mouse_movement): Use PtInRect.
- (XTread_socket): Also ignore mouse motion just before a button
- release event. Don't process button release event when mouse is
- not grabbed.
-
-2005-10-16 Masatake YAMATO <jet@gyve.org>
-
- * minibuf.c (Fdisplay_completion_list): Add new optional
- argument COMMON_SUBSTRING. Bind `completion-common-substring'
- to the optional argument during running `completion-setup-hook'.
-
-2005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c [TARGET_API_MAC_CARBON] (get_cfstring_encoding_from_lisp):
- Allow nil as argument.
- [TARGET_API_MAC_CARBON] (Fmac_code_convert_string): Regard nil
- for encoding arguments as UTF-16 in native byte order, no BOM.
-
- * macfns.c (Fx_create_frame): Add debugging code.
- (Fx_show_tip): Set frame pixel width and height.
-
- * macterm.c (MAC_WINDOW_NORMAL_GC): Remove macro.
- (FRAME_NORMAL_GC): New macro.
- (mac_draw_line, mac_clear_area, mac_clear_window)
- (mac_fill_rectangle, mac_draw_string, mac_draw_string_16)
- (mac_draw_image_string, mac_draw_image_string_16): Rename from
- XDrawLine, XClearArea, XClearWindow, XFillRectangle, XDrawString,
- XDrawString16, XDrawImageString, and XDrawImageString16, respectively.
- All uses changed.
- (mac_draw_line, mac_erase_rectangle, mac_clear_area)
- (mac_clear_window, mac_draw_bitmap, mac_draw_rectangle)
- (mac_invert_rectangle, mac_draw_string_common, mac_draw_string)
- (mac_draw_string_16, mac_draw_image_string)
- (mac_draw_image_string_16, mac_copy_area, mac_copy_area_with_mask)
- (mac_scroll_area): Drawing functions now take frame as destination.
- All uses changed.
- (mac_draw_string_common): Get port height with FRAME_PIXEL_HEIGHT.
- (x_draw_fringe_bitmap): Set clipping area in face->gc.
-
- * macterm.h (mac_clear_area): Add extern.
-
-2005-10-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (note_mouse_movement, XTread_socket): Apply 2005-10-14
- changes for xterm.c.
-
- * w32term.c (note_mouse_movement, w32_read_socket): Likewise.
-
-2005-10-14 Kenichi Handa <handa@m17n.org>
-
- * search.c (search_buffer): Give up BM search on case-fold-search
- if one of a target character has a case-equivalence of different
- charset even if that target charcter is an ASCII.
-
- * casefiddle.c (casify_object): Fix for the case that case
- conversion change the byte length.
-
-2005-10-14 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (note_mouse_movement): Return 1 if mouse moved; 0 otherwise.
- (handle_one_xevent): Only clear help_echo_string; restore it if
- note_mouse_movement didn't record any mouse movement.
-
- * xdisp.c (pos_visible_p): Convert w->hscroll to pixels before use.
- (remember_mouse_glyph): Clear RECT if mouse is over an image glyph.
-
- * keyboard.c (make_lispy_position): Adjust wx for left margin if
- ON_TEXT.
- (Fposn_at_x_y): Fix calculation of x coordinate.
- (Fposn_at_point): Return nil if point is hscrolled out of view.
-
-2005-10-13 Andreas Schwab <schwab@suse.de>
-
- * sysdep.c (request_sigio, unrequest_sigio): Do nothing in
- non-interactive mode.
-
-2005-10-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xterm.c, w32term.c, macterm.c (note_mouse_movement): Undo last change.
-
-2005-10-12 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (handle_one_xevent): Clear last_mouse_glyph on mouse up/down.
-
-2005-10-12 Romain Francoise <romain@orebokech.com>
-
- * buffer.c (init_buffer): Rename `rc' to `len' for clarity.
-
-2005-10-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * xdisp.c (remember_mouse_glyph): Use MATRIX_BOTTOM_TEXT_ROW to
- get end of text rows. Obtain header-line/mode-line rows directly.
-
- * xterm.c, w32term.c, macterm.c (note_mouse_movement):
- Restore help_echo_string if mouse is moved inside last_mouse_glyph.
-
-2005-10-12 Kim F. Storm <storm@cua.dk>
+ * widget.c (update_from_various_frame_slots):
+ Use FRAME_BACKGROUND_PIXEL and FRAME_FOREGROUND_PIXEL.
- * xdisp.c (remember_mouse_glyph): New generic version based on
- glyph_rect and remember_mouse_glyph from xterm.c enhanced to
- properly handle all different window areas.
-
- * dispextern.h (remember_mouse_glyph): Add prototype.
-
- * xterm.c (glyph_rect, remember_mouse_glyph): Remove X versions.
- (note_mouse_movement, XTmouse_position): Use generic
- remember_mouse_glyph, add last_mouse_glyph arg.
-
- * w32term.c (note_mouse_movement): Fix last_mouse_glyph check.
- (glyph_rect, remember_mouse_glyph): Remove w32 specific versions.
- (note_mouse_movement, w32_mouse_position): Use generic
- remember_mouse_glyph, add last_mouse_glyph arg.
-
- * macterm.c (note_mouse_movement): Add call to remember_mouse_glyph.
- (glyph_rect, remember_mouse_glyph): Remove mac specific versions.
- (XTmouse_position): Adapt to use generic remember_mouse_glyph
- instead of pixel_to_glyph_coords.
-
- * window.c (coordinates_in_window): Fix x position for ON_RIGHT_MARGIN.
- Fix x position for ON_TEXT when left margin width > 0.
-
-2005-10-11 Kim F. Storm <storm@cua.dk>
-
- * window.c (coordinates_in_window): Fix y position for ON_SCROLL_BAR.
-
- * keyboard.c (make_lispy_position): Fix buffer calculations for
- mouse click or movement in right fringe and the margins.
-
-2005-10-11 Juanma Barranquero <lekktu@gmail.com>
-
- * image.c (fn_jpeg_stdio_src): Don't define it.
- (init_jpeg_functions): Don't initialize `fn_jpeg_stdio_src'.
- (our_common_init_source): Rename from `our_init_source'.
- (our_common_term_source): Rename from `our_term_source'.
- (our_memory_fill_input_buffer): Rename from
- `our_fill_input_buffer'.
- (our_memory_skip_input_data): Rename from `our_skip_input_data'.
- (jpeg_memory_src): Use the new names.
- (struct jpeg_stdio_mgr): New struct.
- (JPEG_STDIO_BUFFER_SIZE): New constant.
- (our_stdio_fill_input_buffer, our_stdio_skip_input_data)
- (jpeg_file_src): New functions.
- (jpeg_load): Use `jpeg_file_src' instead of `fn_jpeg_stdio_src'.
-
-2005-10-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (PER_CHAR_METRIC): Remove unused macro.
- (fm_font_family_alist): New variable.
- (syms_of_macterm): Initialize and staticpro it.
- (decode_mac_font_name): Replace '-' in family name with '_' if it
- occurs just once. Lower family name.
- (parse_x_font_name): Rename from x_font_name_to_mac_font_name.
- All uses changed. Remove argument MF and code conversion for it.
- Add argument SIZE. Rename argument MF_DECODED to FAMILY, and CS
- to CHARSET. Parse font size. Lower family name. Return integer
- value for status of parsing.
- (init_font_name_table) [USE_ATSUI]: Use decode_mac_font_name.
- Don't use Fdowncase because family name is already lowered by
- decode_mac_font_name.
- (init_font_name_table): Always call decode_mac_font_name.
- Add pair of family name and its reference to fm_font_family_alist.
- (mac_clear_font_name_table): Clear fm_font_family_alist.
- (XLoadQueryFont): Move font size parsing part to parse_x_font_name.
- Lookup fm_font_family_alist to get font family reference.
- (XLoadQueryFont) [USE_ATSUI]: Don't use Fdowncase because family
- name is already lowered by parse_x_font_name.
-
-2005-10-11 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (glyph_rect): Return 0 if position is outside text area.
-
- * keyboard.c (make_lispy_position): Fix buffer position calculation for
- mouse click or movement in fringe.
-
-2005-10-10 Jason Rumney <jasonr@gnu.org>
-
- * xterm.c (remember_mouse_glyph): New function.
- (note_mouse_movement): Use it to remember the current glyph if changed.
- (XTmouse_position): Fix calculation of fake glyph under mouse.
- Move code to calculate glyph under mouse into remember_mouse_glyph.
-
-2005-10-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * emacs.c (USAGE3, standard_args): -nb => -nbi.
-
-2005-10-10 Juanma Barranquero <lekktu@gmail.com>
-
- * frame.c (Fredirect_frame_focus): Fix typos in docstring.
- (next_frame, prev_frame, set_term_frame_name): Make static.
-
- * window.c (Fwindow_tree): Fix spelling.
-
-2005-10-09 Romain Francoise <romain@orebokech.com>
-
- * window.c (Fwindow_end): Don't try to redisplay if non-interactive.
-
-2005-10-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * emacs.c (standard_args): Remove options -i, -itype, --icon-type.
- Add options -nb, --no-bitmap-icon.
-
- * xfns.c (Fx_create_frame): Make bitmapIcon have default on.
-
-2005-10-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macgui.h (MAX_CLIP_RECTS): New define.
- (struct _XGC): New member clip_region.
- (struct _XGC) [MAC_OSX && USE_ATSUI]: New members n_clip_rects and
- clip_rects.
-
- * macterm.c (GC_CLIP_REGION): New macro.
- (saved_port_clip_region): New variable.
- (mac_begin_clip, mac_end_clip): New functions.
- (XDrawLine, mac_erase_rectangle, mac_draw_bitmap, XFillRectangle)
- (mac_draw_rectangle, mac_draw_string_common, mac_copy_area)
- (mac_copy_area_with_mask, mac_scroll_area): Use them.
- (mac_set_clip_rectangle, mac_reset_clipping): Remove functions.
- [USE_ATSUI] (atsu_get_text_layout_with_text_ptr)
- [MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Specify kATSLineFractDisable.
- (mac_draw_string_common) [MAC_OSX && USE_ATSUI]: Clip to clipping
- rectangles stored in gc.
- (XFreeGC): Dispose of clipping region.
- (mac_set_clip_rectangles, mac_reset_clip_rectangles): New functions.
- (x_draw_fringe_bitmap, x_set_glyph_string_clipping)
- (x_draw_relief_rect, x_draw_box_rect, x_draw_stretch_glyph_string)
- (x_draw_glyph_string, x_clip_to_row, x_draw_hollow_cursor)
- (x_draw_bar_cursor): Use them.
- (x_set_glyph_string_clipping): Use get_glyph_string_clip_rects to
- get multiple clipping rectangles.
-
- * macterm.h (mac_term_init): Add types to extern.
- (struct mac_output): Remove members mWP and pending_menu_activation.
- Put members scroll_bar_foreground_pixel and
- scroll_bar_background_pixel in #if 0.
- (FRAME_MAC_WINDOW, FRAME_X_WINDOW): Use window_desc.
-
- * xfaces.c (x_create_gc, x_free_gc) [MAC_OS]: Add BLOCK_INPUT.
- Add debugging code.
-
-2005-10-08 Kim F. Storm <storm@cua.dk>
-
- * window.c (window_tree, Fwindow_tree): Rename fns added 2005-10-04.
-
-2005-10-07 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (redraw_overlapped_rows, redraw_overlapping_rows)
- [!HAVE_WINDOW_SYSTEM]: Don't declare them...
- (update_window) [!HAVE_WINDOW_SYSTEM]: ...and don't call them.
-
-2005-10-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * dispextern.h (struct glyph_string): Rename member for_overlaps_p
- to for_overlaps. Now occupy 3 bits.
- (OVERLAPS_PRED, OVERLAPS_SUCC, OVERLAPS_BOTH)
- (OVERLAPS_ERASED_CURSOR): New defines.
- (struct redisplay_interface): Add new OVERLAPS arg to member
- fix_overlapping_area.
- (x_fix_overlapping_area): Add new OVERLAPS arg.
- (get_glyph_string_clip_rects): Add extern.
-
- * dispnew.c (redraw_overlapping_rows):
- Call rif->fix_overlapping_area with new OVERLAPS arg as redrawn part.
-
- * xdisp.c: Rename member for_overlaps_p in struct glyph_string to
- for_overlaps.
- (get_glyph_string_clip_rects): New function created from
- get_glyph_string_clip_rect. Set clipping rectangles according to the
- value of for_overlaps. Enable to store multiple clipping rectangles.
- (get_glyph_string_clip_rect): Use get_glyph_string_clip_rects.
- (fill_composite_glyph_string, fill_glyph_string, draw_glyphs):
- Rename argument OVERLAPS_P to OVERLAPS. All uses in macros changed.
- (x_fix_overlapping_area): Add OVERLAPS arg. Pass it to draw_glyphs.
- (draw_phys_cursor_glyph): Set width of erased cursor to use it for
- calculating clipping rectangles later. Call x_fix_overlapping_area
- with new OVERLAPS arg to draw only erased cursor area.
- (expose_overlaps): Call x_fix_overlapping_area with new OVERLAPS arg
- to draw overlaps in both preceding and succeeding rows.
-
- * xterm.c, w32term.c, macterm.c: Rename member for_overlaps_p in
- struct glyph_string to for_overlaps.
-
-2005-10-04 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (refill_memory_reserve): Conditionalize the body,
- not the function's existence.
-
-2005-10-04 Kim F. Storm <storm@cua.dk>
-
- * window.c (window_split_tree): New function.
- (Fwindow_split_tree): New defun.
- (syms_of_window): Defsubr it.
-
-2005-10-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_invert_rectangle): New function.
- (XTflash): Use it.
-
-2005-10-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * regex.h (re_char): Don't expose it in the interface.
- (re_set_whitespace_regexp): Adjust the arg's type to not use it.
-
- * regex.c (re_char): Move it back here.
- (re_set_whitespace_regexp): Change the arg's type to not use it.
-
- * keyboard.c (make_lispy_event): If point has moved between down and up
- event, make it a drag, not a click, to mirror what
- mouse-drag-region expects.
-
-2005-10-02 Dan Nicolaescu <dann@ics.uci.edu>
-
- * lisp.h (fatal): Undo previous change.
- * term.c (fatal): Undo previous change.
-
-2005-10-01 Richard M. Stallman <rms@gnu.org>
-
- * xfaces.c (face_color_gray_p): Colors close to black count as gray.
-
-2005-10-01 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (try_window): Skip scroll-margin check if ZV is visible.
-
-2005-10-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c (init_keyboard) [MAC_OSX]: Don't install SIGINT handler.
-
- * macfns.c (start_hourglass): Apply 2005-05-07 change for xfns.c.
- (x_create_tip_frame) [GLYPH_DEBUG]: Uncomment debugging code.
- (Fx_create_frame, x_create_tip_frame) [USE_ATSUI]:
- Try ATSUI-compatible 12pt Monaco font first.
-
- * macgui.h (struct _XCharStruct): New member valid_p.
- (STORE_XCHARSTRUCT): Set valid_p.
- (struct MacFontStruct) [USE_ATSUI]: New member mac_style.
-
- * macterm.c (mac_draw_string_common, x_per_char_metric)
- (mac_compute_glyph_string_overhangs, init_font_name_table)
- (XLoadQueryFont, mac_unload_font) [USE_ATSUI]: Add ATSUI support.
- (atsu_get_text_layout_with_text_ptr) [USE_ATSUI]: New function.
- (x_draw_glyph_string_background)
- (x_draw_glyph_string_foreground) [MAC_OS8 && USE_ATSUI]: Don't use
- XDrawImageString. Always draw background and foreground separately.
- (x_draw_glyph_string_foreground) [USE_ATSUI]: Don't use 8-bit
- functions for one-byte chars when using ATSUI-compatible fonts.
- (atsu_font_id_hash) [USE_ATSUI]: New variable.
- (syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it.
- (XLoadQueryFont): Set min_byte1, max_byte1, min_char_or_byte2, and
- max_char_or_byte2 more in detail.
- (quit_char_comp, mac_check_for_quit_char) [MAC_OSX]: Remove functions.
-
-2005-09-30 Dan Nicolaescu <dann@ics.uci.edu>
-
- * image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct type.
- * xterm.c (handle_one_xevent, handle_one_xevent): Likewise.
-
- * unexelf.c (fatal): Fix prototype.
-
- * term.c (fatal): Implement using varargs.
-
- * regex.c (re_char): Move typedef ...
- * regex.h (re_char): ... here.
- (re_iswctype, re_wctype, re_set_whitespace_regexp): New prototypes.
-
- * emacs.c (malloc_set_state): Fix return type.
- (endif): Fix type.
-
- * lisp.h (fatal): Add argument types.
-
- * dispextern.h (fatal): Delete prototype.
-
- * systime.h (make_time): Prototype moved from ...
- * editfns.c (make_time): ... here.
-
- * editfns.c: Move systime.h include after lisp.h.
- * dired.c:
- * xsmfns.c:
- * process.c: Likewise.
-
- * alloc.c (old_malloc_hook, old_realloc_hook, old_realloc_hook):
- Add parameter types.
- (__malloc_hook, __realloc_hook, __free_hook): Fix prototypes.
- (emacs_blocked_free): Change definition to match __free_hook.
- (emacs_blocked_malloc): Change definition to match __malloc_hook.
- (emacs_blocked_realloc): Change definition to match __realloc_hook.
-
-2005-09-30 Romain Francoise <romain@orebokech.com>
-
- * minibuf.c (Fread_buffer): Follow convention for reading from the
- minibuffer with a default value. Doc fix.
-
-2005-09-29 Juri Linkov <juri@jurta.org>
-
- * editfns.c (Fmessage, Fmessage_box, Fmessage_or_box):
- Rename argument name `string' to `format-string'.
- (Fformat): Doc fix.
-
-2005-09-28 Kim F. Storm <storm@cua.dk>
-
- * image.c (gif_load): Fix size of allocated image buffer
- for images where a sub-image may be larger than the image's
- total height/width specifications.
-
-2005-09-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macgui.h (struct _XCharStruct): Each member now takes short value.
-
-2005-09-27 Dan Nicolaescu <dann@ics.uci.edu>
-
- * xfaces.c (lookup_derived_face): Add parameter type.
-
- * xdisp.c (cursor_row_fully_visible_p): Add parameter type.
-
- * marker.c (verify_bytepos): Add parameter type.
-
- * process.c (get_operating_system_release): Move prototype ...
-
- * systime.h (get_operating_system_release): ... here.
-
- * xterm.c (handle_one_xevent): Refer to union field to match the
- type required by the function definition.
- (set_vertical_scroll_bar): Move prototype ...
-
- * xterm.h: ... here.
-
- * fns.c (internal_equal, seed_random): Fix prototypes.
- (internal_equal): Add missing parameter.
-
-2005-09-25 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (update_menu_bindings): Variable deleted.
- (syms_of_keyboard): Don't defvar it.
- (parse_menu_item): Don't test it.
-
-2005-09-23 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fformat): Explicitly test for end of format string
- and don't use `index'.
-
-2005-09-23 Dan Nicolaescu <dann@ics.uci.edu>
-
- * s/aix4-2.h (BROKEN_GET_CURRENT_DIR_NAME):
- Define BROKEN_GET_CURRENT_DIR_NAME.
-
- * sysdep.c (get_current_dir_name): Also define if
- BROKEN_GET_CURRENT_DIR_NAME.
-
- * m/ibmrs6000.h: Test for USG5, not USG5_4.
-
-2005-09-22 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (message_dolog): Add warning about GC and Lisp strings.
- (message2): Fix commentary. Ok to use alloca'ed memory.
- Still not ok to use Lisp string data (because of GC).
- (set_message): Add comment why GC cannot happen.
-
-2005-09-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (xlfdpat_block_match_1): Fix assertion.
- (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't add style
- variants for a scalable font multiple times.
-
-2005-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * process.c (create_process) [RTU || UNIPLUS || DONT_REOPEN_PTY]:
- Setup slave tty options before forking.
-
-2005-09-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_set_geometry): Do a gtk_window_move if program
- positions have been set for the frame (as is done for frames in
- special-display-buffer-names).
-
-2005-09-19 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Fformat): Don't scan past end of format string that
- ends in %. Reported by Johan Bockg,Ae(Brd.
-
-2005-09-18 Andreas Schwab <schwab@suse.de>
-
- * window.h (struct window): Remove height_fixed_p, no longer set.
-
- * window.c (make_window): Don't initialize height_fixed_p.
- (window_fixed_size_p): Don't use it.
-
-2005-09-18 John Paul Wallington <jpw@pobox.com>
-
- * data.c (Fdefalias): Signal an error if SYMBOL is not a symbol.
-
-2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in (SOME_MACHINE_OBJECTS): Undo previous change.
-
- * macfns.c (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
- New variables.
- [TARGET_API_MAC_CARBON] (Fx_file_dialog): Don't allow multiple
- file selection.
-
- * sysdep.c [MAC_OS8]: Don't include stdlib.h. Include sys/param.h.
-
-2005-09-17 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (XMENU_OBJ) [!HAVE_CARBON]: Reinstate variable.
- (obj): Use XMENU_OBJ, not a literal xmenu.o.
-
-2005-09-16 Romain Francoise <romain@orebokech.com>
-
- * fileio.c (syms_of_fileio) <write-region-inhibit-fsync>: Doc fix.
-
-2005-09-15 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (overlay_arrow_at_row): Add HAVE_WINDOW_SYSTEM conditional.
- (display_mode_element): Instead of `lisp_string' and `this',
- record `offset' and increment that.
- `last_offset' replaces `last'.
-
- * Makefile.in (XMENU_OBJ): Variable deleted.
- (obj): Use xmenu.o unconditionally.
- (SOME_MACHINE_OBJECTS): Delete xmenu.o.
-
- * emacs.c (main): Don't conditionalize syms_of_xmenu on HAVE_XMENU.
-
-2005-09-15 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_vertically): Don't try to fetch byte BEGV-1.
- (reseat_at_next_visible_line_start): Likewise (in xassert).
-
-2005-09-14 Romain Francoise <romain@orebokech.com>
-
- * fileio.c (write_region_inhibit_fsync): New variable.
- (Fwrite_region): Use it to skip call to fsync.
- (syms_of_fileio): Initialize it.
-
-2005-09-14 Kenichi Handa <handa@m17n.org>
-
- * coding.c (code_convert_region_unwind): Argument format changed.
- (run_pre_post_conversion_on_str): If pre-write-conversion function
- changed the current buffer, delete the new buffer.
- (run_pre_write_conversin_on_c_str): Likewise.
-
- * fileio.c (Fexpand_file_name): Check multibyteness of
- default_directory.
-
-2005-09-13 Kenichi Handa <handa@m17n.org>
-
- * composite.c (compose_chars_in_text): Delete it.
-
- * composite.h (compose_chars_in_text): Delete extern.
-
-2005-09-13 Kim F. Storm <storm@cua.dk>
-
- * print.c (print_error_message): Fix last change.
-
-2005-09-12 Kim F. Storm <storm@cua.dk>
-
- * composite.c (compose_chars_in_text): Fix setup of `pend'.
- Unconditionally reload `ptr' and `pend' after eval.
-
- * xdisp.c (message3): Pass copy of lisp string to message_dolog.
-
- * print.c (print_error_message): Pass copy of caller name to
- message_dolog.
-
- * fileio.c (auto_save_error): Pass copy of lisp string to message2.
-
-2005-09-12 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (display_mode_element): Be sure to make variables THIS
- and LISP_STRING point into a string data of ELT.
-
-2005-09-12 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Ftranslate_region_internal): Reload `tt' after
- signal_after_change that may have GC'ed.
- (Fmessage, Fmessage_box, Fmessage_or_box): Doc fix.
-
- * keymap.c (Fdescribe_buffer_bindings): Reload `translate'
- after insert while runs signal_after_change.
-
- * minibuf.c (Fminibuffer_complete_word): Move `completion_string'
- declaration to where it is used.
-
- * w32.c (check_windows_init_file): Fix allocation of error buffer.
-
- * xfns.c (x_encode_text): Declare static. Add FREEP arg.
- (x_set_name_internal): Call x_encode_text with new FREEP arg to
- know if xfree is needed instead of guessing.
-
- * xterm.h (x_encode_text): Remove prototype.
-
-2005-09-11 Chris Prince <cprince@gmail.com> (tiny change)
-
- * w32term.c (x_bitmap_icon): Load small icons too.
-
-2005-09-10 Romain Francoise <romain@orebokech.com>
-
- * buffer.c (init_buffer): Grow buffer to add directory separator
- and terminal zero. Fix typos.
-
-2005-09-10 Eli Zaretskii <eliz@gnu.org>
-
- * buffer.c (init_buffer): Fix error message for failed call to
- get_current_dir_name.
- (get_current_dir_name): Remove prototype.
-
- * xsmfns.c (get_current_dir_name): Remove prototype.
-
- * lisp.h (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]:
- Add prototype.
-
- * sysdep.c [WINDOWSNT]: Add prototype for getwd.
- Don't #undef NULL after including blockinput.h.
-
- * config.in: Regenerated.
-
-2005-09-10 Giuseppe Scrivano <gscrivano@gmail.com>
-
- Remove the MAXPATHLEN limitations:
-
- * sysdep.c (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]:
- New function.
-
- * buffer.c (init_buffer): Use it.
-
- * xsmfns.c (smc_save_yourself_CB): Ditto.
-
-2005-09-09 Kim F. Storm <storm@cua.dk>
-
- * doc.c (Fsubstitute_command_keys): Lookup key binding for
- commands that are remapped from some other command.
-
- * xdisp.c (try_window_reusing_current_matrix): Clear mode_line_p
- flag in disabled rows below the window.
-
- * frame.h (struct frame): New member updated_p.
-
- * xdisp.c (redisplay_internal): Mark updated frames in new updated_p
- member. Remove local `updated' array and associated variables.
-
-2005-09-07 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (handle_display_prop): Respect overlay window property.
-
- * xdisp.c (try_window): Remove superfluous cursor_height calculation.
- Fixes crash reported by YAMAMOTO Mitsuharu.
-
-2005-09-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (struct xlfdpat_block, struct xlfdpat): New structs.
- (xlfdpat_destroy, xlfdpat_create, xlfdpat_exact_p)
- (xlfdpat_block_match_1, xlfdpat_match): New functions.
- (xlfdpat_block_match): New macro.
- (mac_to_x_fontname): Don't use tolower for non-ASCII characters.
- (x_font_name_to_mac_font_name): Set coding.dst_multibyte to 0.
- (add_font_name_table_entry): Increase font_name_table_size more
- rapidly.
- (mac_c_string_match): Remove function.
- (mac_do_list_fonts): Use XLFD pattern match instead of regular
- expression match.
-
- * xfaces.c (xstrlwr): Don't use tolower for non-ASCII characters.
-
-2005-09-03 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (redisplay_internal): Make UPDATED as long as needed.
- (move_it_in_display_line_to): Stop after last char on line even
- on a windowing terminal, if that's the specified stop position.
-
- * fns.c (Fsort): Doc fix.
-
- * editfns.c (Fpropertize): Don't insist that properties be symbols.
-
-2005-09-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * dired.c (directory_files_internal_unwind, directory_files_internal)
- (file_name_completion): Use a Save_Value object rather than a cons of
- two 16bit ints to store the DIR*.
- (directory_files_internal, file_name_completion): Handle both EINTR and
- EAGAIN consistently after `readdir'.
-
-2005-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * intervals.c (update_interval): Add position info in error.
-
- * dispnew.c (window_to_frame_hpos, update_window):
- Avoid gcc warning about unused variable `f'.
-
-2005-08-31 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (add_menu_item): If unicode_append_menu returns an
- error, revert to using AppendMenu.
-
-2005-08-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c (PIX_MASK_DRAW, PIX_MASK_RETAIN): Remove argument.
- All uses changed.
- [MAC_OS] (XPutPixel, XGetPixel): Add efficient versions for common
- cases.
- (x_create_x_image_and_pixmap) [MAC_OS]: Don't call x_destroy_x_image.
- [MAC_OS] (find_image_fsspec) [!MAC_OSX]: Don't use FSRef.
- Use posix_pathname_to_fsspec.
- [MAC_OS] (xpm_load_image): Fill in background_transparent field
- while we have mask.
-
- * macgui.h [!TARGET_API_MAC_CARBON] (GetPixDepth): New define.
-
- * macterm.h (PIX_MASK_DRAW, PIX_MASK_RETAIN): Move defines to image.c.
-
-2005-08-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (update_syntax_table): Properly reproduce the special +1
- setting of e_property at the end of the buffer when bumping into the
- INTERVALS_AT_ONCE limit.
-
-2005-08-27 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (USAGE1): Fix the description of the -Q option.
-
-2005-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xdisp.c (pos_visible_p): Yet another int/Lisp_Object mixup (YAILOM).
-
-2005-08-26 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (resize_mini_window): Fix 2005-08-20 change.
- Don't move PT to new window start.
-
-2005-08-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c (kbd_buffer_get_event) [MAC_OS]: Make events for
- ICONIFY/DEICONIFY_EVENT.
-
- * macterm.c (mac_copy_area, mac_copy_area_with_mask):
- Restore background color.
- (mac_handle_visibility_change): New function.
- (x_make_frame_invisible, x_iconify_frame)
- (XTread_socket) [!USE_CARBON_EVENTS]: Use it.
- [USE_CARBON_EVENTS] (mac_handle_window_event)
- (install_window_handler): Handle visibility change events.
- (x_make_frame_visible): Don't reposition window if it is iconified
- or asked for visible before. Select and uncollapse window when it
- is made visible.
- (x_make_frame_invisible): Don't reset x_highlight_frame.
- (x_iconify_frame): Likewise. Make invisible frame visible before
- it is iconified.
- (read_socket_inev): Move variable outside #if USE_CARBON_EVENTS.
- (do_window_update): Don't change visibility of invisible frame.
-
-2005-08-22 Juri Linkov <juri@jurta.org>
-
- * term.c (turn_on_face): Check for TS_set_foreground and
- TS_set_background depending on standout_mode. Simplify.
-
-2005-08-21 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (update_window_fringes): Only put TOP and BOTTOM
- bitmaps on fully visible rows.
-
- * fringe.c (update_window_fringes): Replace FORCE_P arg with
- KEEP_CURRENT_P arg; if non-zero, don't update current row fringes,
- and return 0.
-
- * xdisp.c (redisplay_window): Call update_window_fringes with
- KEEP_CURRENT_P non-0 if we are going to refresh fringes later.
-
-2005-08-20 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (display_echo_area_1): Get display start pos from w->start.
- (resize_mini_window): Set w->start, and PT, so as to display the tail
- end of the buffer, if it doesn't all fit.
-
-2005-08-18 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (calc_pixel_width_or_height): Use actual display
- resolution when available instead of Vdisplay_pixels_per_inch.
-
-2005-08-17 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (pos_visible_p): Adjust X value if window is hscrolled.
-
- * dispnew.c (buffer_posn_from_coords): Check that target row is
- within matrix.
-
-2005-08-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_wm_set_icon_pixmap): Move GTK specific code to
- xg_set_frame_icon and call it.
-
- * gtkutil.c (xg_set_frame_icon): New function.
-
- * gtkutil.h (xg_set_frame_icon): Declare it.
-
-2005-08-16 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (increment_row_positions): Skip non-enabled rows.
-
- * window.c (SAVED_WINDOW_VECTOR_SIZE): Remove dangerous define.
- (Fcurrent_window_configuration): Use VECSIZE macro instead.
-
-2005-08-15 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (message3_nolog): Clear echo_message_buffer.
-
-2005-08-15 Kim F. Storm <storm@cua.dk>
-
- * lisp.h (QUIT) [!SYNC_INPUT]: Throw t to Vthrow_on_input.
-
- * process.c (deactivate_process, status_notify, read_process_output)
- (update_status, status_convert, decode_status, allocate_pty)
- (make_process, remove_process, list_processes_1)
- (create_process_1, unwind_request_sigio, read_process_output)
- (send_process, keyboard_bit_set): Declare static.
- (Fdelete_process): Simplify. Pass process to status_notify, so we
- don't try to read output from it.
- (status_notify): New arg deleting_process--don't try to read
- output from that process.
-
- * lisp.h (deactivate_process, status_notify, read_process_output):
- Remove prototypes.
-
-2005-08-14 Richard M. Stallman <rms@gnu.org>
-
- * image.c (syms_of_image): Init Qxbm, Qpbm before calling
- define_image_type.
-
-2005-08-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
- (xg_get_image_for_pixmap): Move some code to
- xg_get_pixbuf_from_pix_and_mask, and call it.
-
- * gtkutil.h (xg_get_pixbuf_from_pix_and_mask): Declare.
-
- * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
- to get an GTK icon and set it with GTK functions to avoid having GTK
- override an icon set with just X functions.
-
-2005-08-11 Richard M. Stallman <rms@gnu.org>
-
- * image.c (syms_of_image): Init image_types here, and call
- define_image_type.
- (init_image): Not here.
-
-2005-08-09 Richard M. Stallman <rms@gnu.org>
-
- * bytecode.c (BYTE_CODE_QUIT): Throw t to Vthrow_on_input.
-
- * lisp.h (QUIT): Throw t to Vthrow_on_input.
-
-2005-08-09 Thien-Thi Nguyen <ttn@gnu.org>
-
- * floatfns.c (Fexpt): Use floats for negative exponent.
-
-2005-08-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_modify_menubar_widgets): Remove semicolon that
- should not be there, causing menu display errors with GTK 2.6.9.
-
-2005-08-07 Richard M. Stallman <rms@gnu.org>
-
- * floatfns.c (Fexpt): Undo previous change.
-
- * dispnew.c (Fframe_or_buffer_changed_p): Take an arg
- so it can be used with various state vectors.
-
- * emacs.c (endif): Convert -script into -scriptload.
- (standard_args): Add -scriptload. Allow -basic-display with one dash.
-
- * fns.c (syms_of_fns): Add `emacs' to features.
-
- * term.c (set_terminal_modes): If no TS_termcap_modes string,
- output newlines to scroll the old screen contents off the screen.
-
-2005-08-06 Thien-Thi Nguyen <ttn@gnu.org>
-
- * floatfns.c (Fexpt): Use floats for negative exponent.
- Reported by D Goel.
-
-2005-08-02 Richard M. Stallman <rms@gnu.org>
-
- * frame.c (Fframe_char_width): Doc fix.
-
-2005-07-30 Juanma Barranquero <lekktu@gmail.com>
-
- * xdisp.c (syms_of_xdisp) <redisplay-end-trigger-functions>:
- Defvar it.
-
-2005-07-28 Juanma Barranquero <lekktu@gmail.com>
-
- * w32fns.c (my_set_window_pos, my_show_window): Don't declare.
- (my_create_window, my_create_tip_window): Make static.
-
- * w32term.c (my_show_window, my_set_window_pos, my_set_focus)
- (my_set_foreground_window, my_destroy_window): Make static.
-
-2005-07-26 Paul Eggert <eggert@cs.ucla.edu>
-
- Merge gnulib getopt implementation into Emacs.
-
- * s/cygwin.h (C_SWITCH_SYSTEM): Remove, since gettext.h is
- now part of lib-src.
-
-2005-07-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * eval.c (Fdefvar): Allow (defvar enable-multibyte-characters).
-
-2005-07-25 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (w32_menu_display_help): Suppress tooltip when
- navigating menus with the keyboard.
-
-2005-07-23 Richard M. Stallman <rms@gnu.org>
-
- * insdel.c (syms_of_insdel): staticpro combine_after_change_buffer.
-
- * bytecode.c (MAYBE_GC): Test gc_cons_threshold and
- gc_relative_threshold, one by one.
-
- * keyboard.c (read_char): Test gc_cons_threshold.
- (syms_of_keyboard): staticpro Qecho_area_clear_hook.
-
- * eval.c (Feval, Ffuncall): Test gc_cons_threshold and
- gc_relative_threshold, one by one.
-
- * alloc.c (gc_cons_threshold): Not static.
- (gc_cons_combined_threshold): Var deleted.
- (gc_relative_threshold): New variable.
- (Fgarbage_collect, init_alloc_once): Compute gc_relative_threshold
- instead of gc_cons_combined_threshold.
-
- * lisp.h (gc_cons_threshold, gc_relative_threshold): Declare.
- (gc_cons_combined_threshold): Declaration deleted.
-
-2005-07-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+ * window.c (set_window_buffer): Don't call clear_mouse_face on tty
+ frames.
+ (window_internal_height): Remove bogus make_number call.
+ (init_window_once): Call make_terminal_frame with two zero parameters.
- * mac.c: Don't include stdlib.h or string.h.
- (Fdo_applescript, Fmac_file_name_to_posix)
- (Fmac_file_name_to_posix): Doc fixes.
- [TARGET_API_MAC_CARBON] (Fmac_get_preference)
- (Fmac_code_convert_string): Likewise.
- [MAC_OSX] (init_mac_osx_environment): Fall back on terminal mode
- if the executable is not contained in a bundle.
+ * fileio.c (Fread_file_name): Update comment.
- * macfns.c: Don't include stdlib.h or string.h. Include atimer.h.
- (gray_width, gray_height): Remove defines.
- (gray_bits, gray_bitmap_width, gray_bitmap_height)
- (gray_bitmap_bits): Remove variables.
- (lispy_function_keys): Remove extern.
- (free_frame_menubar): Add extern.
- (x_window_to_frame): Remove function.
- (unwind_create_tip_frame): Add declaration.
- (x_set_name_internal): New function.
- (x_set_name, x_set_title): Use it.
- (Fx_create_frame, Fx_display_grayscale_p, Fx_display_pixel_width)
- (Fx_display_pixel_height, Fx_display_planes)
- (Fx_display_color_cells, Fx_server_max_request_size)
- (Fx_server_vendor, Fx_server_version, Fx_display_screens)
- (Fx_display_mm_height, Fx_display_mm_width)
+ * callint.c (Fcall_interactively):
+ Use temporarily_switch_to_single_kboard instead of single_kboard_state.
+ Make sure it is correctly unwound.
+
+ * xsmfns.c (x_session_close): New function.
+
+ * coding.h (terminal_coding, safe_terminal_coding, keyboard_coding):
+ Delete declarations.
+
+ * xterm.h: Remove declaration for x_fully_uncatch_errors.
+ (x_output): Remove background_pixel and foreground_pixel fields.
+ (x_display_info): Add new field TERMINAL. Remove KBOARD field.
+ (x_delete_device):
+ (x_session_close): Declare.
+
+ * lread.c: Include setjmp.h. Update declaration of `read_char'.
+ (read_filtered_event): Call `read_char' with a local
+ `wrong_kboard_jmpbuf'.
+
+ * minibuf.c (read_minibuf): Call temporarily_switch_to_single_kboard.
+ Don't call single_kboard_state. Use FRAME_RIF.
+
+ * process.c (Fmake_network_process): Don't unrequest_sigio on modern
+ systems.
+
+ * lisp.h (set_process_environment): Rename to `set_global_environment'.
+ (Fframe_with_environment, Fset_input_meta_mode)
+ (Fset_quit_char): EXFUN.
+ (x_create_device, tty_output, terminal, tty_display_info): Declare.
+ (init_sys_modes, reset_sys_modes): Update prototypes.
+ (init_all_sys_modes, reset_all_sys_modes): New prototypes.
+
+ * keyboard.h (struct kboard): Add new fields Vlocal_function_key_map,
+ Vlocal_key_translation_map, and Vkeyboard_translate_table.
+ (Vfunction_key_map, Vkeyboard_translate_table, single_kboard_state):
+ Delete declarations.
+ (Vfunction_key_map, Vkey_translation_map, push_kboard, pop_kboard)
+ (temporarily_switch_to_single_kboard, tty_read_avail_input):
+ New declarations.
+
+ * emacs.c (main): Don't call init_sys_modes(), the new term_init()
+ already does that during init_display(). Call syms_of_keymap
+ before syms_of_keyboard. Call `syms_of_terminal'.
+ Call set_initial_environment, not set_process_environment.
+ (shut_down_emacs): Call reset_all_sys_modes() instead of
+ reset_sys_modes().
+
+ * xfaces.c (x_free_gc): Protect xassert with GLYPH_DEBUG.
+ (internal_resolve_face_name, resolve_face_name_error): New functions.
+ (resolve_face_name): Protect against loops and errors thrown by Fget.
+ (realize_default_face): Don't use FRAME_FONT unless frame is an X frame.
+ (Ftty_supports_face_attributes_p): Update tty_capable_p call.
+
+ * scroll.c: Replace CURTTY() with local variables throughout the
+ file (where applicable).
+ (calculate_scrolling, calculate_direct_scrolling)
+ (scrolling_1, scroll_cost): Use the accessor macros for terminal
+ characteristics.
+
+ * keymap.c (Vfunction_key_map): Remove.
+ (Fdescribe_buffer_bindings): Update references to Vfunction_key_map.
+ (syms_of_keymap): Remove DEFVAR for Vfunction_key_map.
+ (Vkey_translation_map): Remove.
+ (syms_of_keymap): Remove DEFVAR for key-translation-map.
+ (Fdescribe_buffer_bindings):
+ (read_key_sequence, init_kboard, syms_of_keyboard, mark_kboards):
+ Update for terminal-local key-translation-map.
+
+ * Makefile.in (callproc.o): Update dependencies.
+ (lisp, shortlisp): Add termdev.elc.
+ (obj): Add terminal.o.
+ (terminal.o): Add dependencies.
+ [HAVE_CARBON]: Make terminal.o depend on macgui.h.
+ (data.o, fns.o): Add termhooks.h dependency.
+ (SOME_MACHINE_LISP): Add dnd.elc.
+ (minibuf.o): Fix typo.
+ Update dependencies.
+
+ * data.c (do_symval_forwarding, store_symval_forwarding)
+ (find_symbol_value): Use the selected frame's keyboard, not
+ current_kboard.
+
+ * .gdbinit (init_sys_modes): Use Vinitial_window_system instead of
+ Vwindow_system.
+
+ * xmenu.c (Fx_menu_bar_open) [USE_X_TOOLKIT, USE_GTK]: Rename from
+ Fmenu_bar_open.
+ (syms_of_xmenu): Update defsubr.
+ (mouse_position_for_popup, Fx_popup_menu)
+ (Fx_popup_dialog, x_activate_menubar, update_frame_menubar)
+ (set_frame_menubar, free_frame_menubar)
+ (create_and_show_popup_menu, xmenu_show, )
+ (create_and_show_dialog, xdialog_show, xmenu_show): Abort if not
+ an X frame.
+
+ * xselect.c (x_own_selection): Abort if not an X frame.
+ (some_frame_on_display): Check if it is an X frame.
+ (x_handle_selection_clear): Deal with MULTI_KBOARD.
+
+ * coding.c: Include frame.h and termhooks.h.
+ (terminal_coding, keyboard_coding): Delete.
+ (Fset_terminal_coding_system_internal):
+ (Fset_keyboard_coding_system_internal):
+ (Fkeyboard_coding_system):
+ (Fterminal_coding_system): Add a terminal parameter.
+ Get terminal_coding from the terminal.
+ (init_coding_once): Don't call setup_coding_system here.
+
+ * dispextern.h (set_scroll_region, turn_off_insert)
+ (turn_off_highlight, background_highlight, clear_end_of_line_raw)
+ (tty_clear_end_of_line, tty_setup_colors)
+ (delete_tty, updating_frame)
+ (produce_special_glyphs, produce_glyphs, write_glyphs)
+ (insert_glyphs): Remove.
+ (raw_cursor_to, clear_to_end, tty_turn_off_insert)
+ (tty_turn_off_highlight, get_tty_size): Add declaration.
+ (tabs_safe_p, init_baud_rate, get_tty_terminal): Update prototypes.
+
+ * frame.h (enum output_method): Add output_initial.
+ (struct x_output): Delete.
+ (FRAME_FOREGROUND_PIXEL, FRAME_BACKGROUND_PIXEL):
+ Access foreground_pixel and background_pixel directly from the frame.
+ (tty_display): Delete.
+ (struct frame): Add buried_buffer_list, foreground_pixel,
+ background_pixel and terminal. Delete kboard
+ (union output_data): Add tty.
+ (FRAME_KBOARD): Get the kboard from the terminal.
+ (FRAME_INITIAL_P): New macro.
+ (Qtty, Qtty_type, Qterminal, Qterminal_live_p, Qenvironment)
+ (Qterm_environment_variable, Qdisplay_environment_variable)
+ (make_terminal_frame, Qburied_buffer_list, Qwindow_system):
+ New declarations.
+
+ * termchar.h (tty_output, tty_display_info): New structures.
+ (tty_list): Declare.
+ (FRAME_TTY, CURTTY): New macros.
+ (must_write_spaces, min_padding_speed, fast_clear_end_of_line)
+ (line_ins_del_ok, char_ins_del_ok, scroll_region_ok)
+ (scroll_region_cost, memory_below_frame, fast_clear_end_of_line)
+ (dont_calculate_costs, no_redraw_on_reenter): Remove declarations.
+
+ * callproc.c: Include frame.h and termhooks.h, for terminal
+ parameters.
+ (add_env): New function.
+ (child_setup): Use it.
+ (child_setup, getenv_internal): Handle the new Vprocess_environment.
+ (getenv_internal): Fix get_terminal_param call.
+ (Fgetenv_internal, egetenv): Update doc.
+ (syms_of_callproc): Initialize Vprocess_environment to nil.
+ Register and initialize them. Remove obsolete defvars. Update doc
+ strings.
+ (child_setup): Handle Vlocal_environment_variables.
+ (getenv_internal): Add terminal parameter.
+ Handle Vlocal_environment_variables.
+ (Fgetenv_internal): Add terminal parameter.
+ (child_setup, getenv_internal, Fgetenv_internal): Store the local
+ environment in a frame (not terminal) parameter. Update doc strings.
+ (set_initial_environment): Rename from set_global_environment.
+ Store Emacs environment in initial frame parameter.
+
+ * xdisp.c (redisplay_internal): Update references to
+ `previous_terminal_frame'.
+ (display_mode_line, Fformat_mode_line): Replace calls to
+ `push_frame_kboard' with `push_kboard'.
+ (get_glyph_string_clip_rects): Add extra parentheses and
+ braces to prevent compiler warnings.
+ (calc_pixel_width_or_height): Add xassert to check that the
+ frame is alive. Don't call `lookup_image' on a termcap frame.
+ (message2_nolog, message3_nolog, redisplay_internal)
+ (set_vertical_scroll_bar, redisplay_window, check_x_display_info)
+ (x_set_scroll_bar_foreground, x_set_scroll_bar_background)
+ (Fx_create_frame, Fxw_display_color_p, Fx_display_grayscale_p)
+ (Fx_display_pixel_width, Fx_display_pixel_height)
+ (Fx_display_planes, Fx_display_color_cells)
+ (Fx_server_max_request_size, Fx_server_vendor, Fx_server_version)
+ (Fx_display_screens, Fx_display_mm_height, Fx_display_mm_width)
(Fx_display_backing_store, Fx_display_visual_class)
- (Fx_display_save_under, Fx_synchronize, Fx_show_tip): Doc fixes.
-
- * macmenu.c (Fx_popup_menu, Fx_popup_dialog): Doc fixes.
-
- * macselect.c (Fx_own_selection_internal): Follow error conventions.
- (Fx_get_selection_internal, Fx_selection_owner_p)
- (Fx_selection_exists_p): Doc fixes.
- (syms_of_macselect) <selection-converter-alist>: Likewise.
-
-2005-07-21 Juanma Barranquero <lekktu@gmail.com>
-
- * buffer.c (syms_of_buffer) <cursor-type>: Doc fix.
-
- * ccl.c (Fregister_ccl_program): Fix typos in docstring.
- (Fccl_execute_on_string): Likewise; add usage info.
-
- * composite.c (Fcompose_region_internal)
- (Fcompose_string_internal):
- Improve argument/docstring consistency.
-
- * minibuf.c (Fminibuffer_prompt_end, Feval_minibuffer):
- Fix typos in docstrings.
-
- * textprop.c (Fnext_char_property_change)
- (Fprevious_char_property_change): Doc fixes.
-
- * window.c (Fset_window_margins, Fset_window_fringes):
- Improve argument/docstring consistency.
-
- * xfaces.c (Finternal_lisp_face_p): Doc fix.
-
-2005-07-21 Andreas Schwab <schwab@suse.de>
-
- * eval.c (restore_stack_limits): Return a value.
-
-2005-07-20 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (Fdefvar): Doc fix.
-
-2005-07-20 Kim F. Storm <storm@cua.dk>
-
- * fileio.c (Fdo_auto_save, do_auto_save_unwind):
- Use make_save_value to unwind protect stream.
-
- * lread.c (Fload, load_unwind):
- Use make_save_value to unwind protect stream.
-
-2005-07-19 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (Fprog2, Fcalled_interactively_p),
- (syms_of_eval) <debug-on-quit>: Doc fixes.
- (syms_of_eval) <max-specpdl-size>:
- (Finteractive_p): Fix typos in docstrings.
-
-2005-07-19 Kim F. Storm <storm@cua.dk>
-
- * w32fns.c (Vx_hand_shape): Variable removed.
- (syms_of_w32fns): Intern and staticpro Qw32_charset_default.
-
-2005-07-19 Kenichi Handa <handa@m17n.org>
-
- * fns.c (Fstring_as_multibyte): Escape backslashes in the docstring.
-
-2005-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * buffer.h (Fgenerate_new_buffer_name): Declare (for use in coding.c).
-
-2005-07-18 Kim F. Storm <storm@cua.dk>
-
- * frame.h (struct frame): New member already_hscrolled_p.
-
- * xdisp.c (redisplay_internal): Only try to hscroll each frame once
- to avoid redisplay looping hscrolling back and forth ad infinitum.
-
-2005-07-18 Juri Linkov <juri@jurta.org>
-
- * buffer.c (scroll-up-aggressively, scroll-down-aggressively):
- * keymap.c (Fminor_mode_key_binding):
- * macterm.c (mac-emulate-three-button-mouse):
- Delete duplicate duplicate words.
-
-2005-07-18 Ken Raeburn <raeburn@gnu.org>
-
- * minibuf.c (Ftest_completion): Fix odd syntax in test.
-
-2005-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (x_set_cursor_color): Use XSetBackground and XSetForeground.
-
- * macgui.h (struct _XGC): New struct.
- (GC): Use it.
- (GCForeground, GCBackground, GCFont): Use X11 mask values.
- (XCreateGC, XParseGeometry): Move externs to macterm.h.
-
- * macterm.c (x_bitmap_icon, x_make_frame_visible): Remove declarations.
- (XSetFont): Add declaration.
- (mac_set_forecolor, mac_set_backcolor, mac_set_colors):
- Remove functions.
- (GC_FORE_COLOR, GC_BACK_COLOR, GC_FONT, MAC_WINDOW_NORMAL_GC):
- New defines.
- (XDrawLine, mac_draw_line_to_pixmap, XClearWindow)
- (mac_draw_bitmap, XCreatePixmapFromBitmapData, XFillRectangle)
- (mac_draw_rectangle, mac_draw_string_common, mac_scroll_area):
- Use them.
- (mac_erase_rectangle): New function.
- (XClearArea, x_draw_fringe_bitmap, x_clear_glyph_string_rect)
- (x_draw_stretch_glyph_string): Use it.
- (XChangeGC, XCreateGC, XGetGCValues, XSetForeground)
- (XSetBackground, XSetFont): Adjust for new GC implementation.
- (x_draw_fringe_bitmap, x_draw_box_rect): Use GC to set colors.
- (XTset_vertical_scroll_bar): Clear area under scroll bar.
-
- * macterm.h (struct mac_display_info): Change types of
- scratch_cursor_gc black_relief.gc, and white_relief.gc to GC.
- (XCreateGC, XParseGeometry): Move externs from macgui.h.
-
- * xfaces.c [MAC_OS] (XCreateGC): Remove extern.
-
-2005-07-16 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fmake_overlay): Doc fix.
-
-2005-07-16 Eli Zaretskii <eliz@gnu.org>
-
- * w32proc.c (syms_of_ntproc): staticpro Qhigh, Qlow,
- Vw32_valid_locale_ids, and Vw32_valid_codepages.
-
-2005-07-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c [TARGET_API_MAC_CARBON] (Fmac_code_convert_string):
- Use Fstring_as_unibyte instead of string_make_unibyte.
-
-2005-07-15 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (select_frame_for_redisplay): Use find_symbol_value.
-
-2005-07-15 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c: Fix redisplay loop in last change.
- (IT_POS_VALID_AFTER_MOVE_P): New macro.
- (move_it_vertically_backward, move_it_by_lines): Use it.
-
-2005-07-14 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (init_environment): Default HOME directory to user's
- appdata directory if possible.
-
-2005-07-14 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (pitx): Fix output format. Print string charpos.
-
- * lread.c (syms_of_lread): Initialize seen_list.
-
- * search.c (syms_of_search): Staticpro searchbuf.whitespace_regexp.
-
- * syntax.c (syms_of_syntax): Staticpro lisp objects in gl_state.
- Staticpro re_match_object.
-
-2005-07-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macselect.c (get_scrap_target_type_list): Avoid NULL pointer
- dereference.
-
- * macterm.c (mac_window_to_frame): Remove duplicate define.
-
-2005-07-14 Kenichi Handa <handa@m17n.org>
-
- * coding.c (code_convert_region_unwind): ARG is changed to a cons.
- (code_convert_region): Adjust for the above change.
- (set_conversion_work_buffer): If the work buffer is already in
- use, generate a new buffer and return it. Otherwise return Qnil.
- (run_pre_post_conversion_on_str): Adjust for the above change.
- (run_pre_write_conversin_on_c_str): Likewise.
-
-2005-07-13 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (start_display): Don't reseat to next visible line start
- if current start position is in a string or image.
- (move_it_vertically_backward): Be sure to move out of strings and
- images when moving it2 forward.
- (move_it_by_lines): When moving forward, move to next buffer
- position if we end up in a string or image. When moving backward,
- count rows moved over when moving to start of current row in case
- row starts in middle of a string or image. Also move further
- backward if we end up in a string or image.
- (try_cursor_movement): If overlay string spans multiple lines,
- move backward to set cursor on start of an overlay string.
- (cursor_row_p): Row is ok if cursor is at newline from string, but
- string starts on this line (so we always position cursor at start
- of string).
-
- * indent.c (Fvertical_motion): If start position is on an image,
- don't move back if we move too far (that's almost certain to happen).
-
- * xdisp.c (cursor_row_fully_visible_p): Allow partially visible
- row in minibuffer windows.
- (try_window): Don't check margins in minibuffer windows.
-
-2005-07-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c: Don't include stdlib.h or composite.h.
- (x_use_underline_position_properties, last_mouse_press_frame)
- (x_noop_count, Qvendor_specific_keysyms): Remove unused variables.
- (syms_of_macterm, mac_initialize): Don't initialize them.
- (waiting_for_input, initial_argv, initial_argc)
- (Vcommand_line_args, Vx_no_window_manager, errno, window_scroll)
- (set_frame_menubar, path_from_vol_dir_name): Remove externs.
- (extra_keyboard_modifiers): Fix type in extern.
- (x_window_to_frame, x_window_to_scroll_bar): Remove declarations.
- (x_scroll_bar_report_motion): Add argument types to declaration.
- (mac_compute_glyph_string_overhangs): Add declaration.
- (disable_mouse_highlight): Remove unused variable.
- [USE_TOOLKIT_SCROLL_BARS] (construct_scroll_bar_click)
- (x_scroll_bar_handle_press, x_scroll_bar_handle_release)
- (x_scroll_bar_handle_drag): Remove argument `timestamp'.
- All callers changed.
- [USE_TOOLKIT_SCROLL_BARS] (construct_scroll_bar_click): Don't set
- timestamp.
- [USE_CARBON_EVENTS] (mac_handle_mouse_event): Likewise.
- (x_scroll_bar_create, XTset_vertical_scroll_bar): Show scroll bar
- only when its width is less than the height.
- (XTredeem_scroll_bar): Sync with xterm.c.
- (font_name_table, font_name_table_size, font_name_count):
- Make static.
- (drag_and_drop_file_list): Remove variable. Previous use is now
- local to function.
- (do_ae_open_documents): Move DRAG_N_DROP event construction part
- from XTread_socket.
- (XTread_socket): Consolidate setting of event timestamp.
- Move DRAG_N_DROP event construction part to do_ae_open_documents.
- Support extra_keyboard_modifiers.
-
- * xfaces.c (try_font_list) [MAC_OS]: Try font family name
- beginning with that for ASCII.
-
-2005-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (gc_cons_combined_threshold, Vgc_cons_percentage): New vars.
- (Fgarbage_collect, init_alloc_once): Set gc_cons_combined_threshold.
- (syms_of_alloc): Declare gc-cons-percentage.
-
- * eval.c (Feval, Ffuncall):
- * keyboard.c (read_char):
- * bytecode.c (MAYBE_GC): Use gc_cons_combined_threshold.
-
- * lisp.h (gc_cons_combined_threshold): Declare.
-
-2005-07-12 Kim F. Storm <storm@cua.dk>
-
- * coding.c (Qprocess_argument):
- * coding.h (Qprocess_argument): Remove unused var.
-
- * xselect.c (intern): Remove dup. intern and staticpro for QTIMESTAMP.
-
-2005-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c [!TARGET_API_MAC_CARBON]: Include charset.h, coding.h, and
- Endian.h.
- [!MAC_OSX] (fchmod, fchown): New functions.
- (mac_get_code_from_arg): Don't accept Lisp integer as argument.
- Use SBYTES and EndianU32_BtoN.
- (mac_get_object_from_code): Return 4 byte string even if argument
- is 0. Use make_unibyte_string and EndianU32_NtoB.
- (Fmac_get_file_creator, Fmac_get_file_type, Fmac_set_file_creator)
- (Fmac_set_file_type): Fix documents and argument declarations.
- Don't specify kFSCatInfoNodeFlags. Support Mac OS Classic.
-
-2005-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Frecenter): Yet another int/Lisp_Object mixup (YAILOM).
-
-2005-07-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfaces.c (x_update_menu_appearance): Use fontSet resource for
- Lucid if X_I18N, font otherwise.
-
-2005-07-10 Steven Tamm <steventamm@mac.com>
-
- * mac.c (Fmac_get_file_type, Fmac_get_file_creator): Add.
- (Fmac_set_file_type, Fmac_set_file_creator): Add.
- (mac_get_object_from_code, mac_get_code_from_arg): Add.
-
-2005-07-10 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (Qeval_buffer_list, Veval_buffer_list): New vars.
- (syms_of_lread): Set up eval-buffer-list.
- (Feval_buffer, Feval_region): Bind eval-buffer-list.
-
-2005-07-08 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (Fdefvar): Allow defvaring a constant to itself quoted.
-
-2005-07-08 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (menu_bar_items): Don't GCPRO menu_bar_items_vector here.
- (syms_of_keyboard): Initialize and staticpro menu_bar_items_vector.
-
-2005-07-07 Kim F. Storm <storm@cua.dk>
-
- * window.c (Frecenter): Fix last change (set iarg before use).
-
-2005-07-06 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Frecenter): When arg is inside the scroll margin,
- move it out of the margin.
-
-2005-07-06 Jason Rumney <jasonr@gnu.org>
-
- * w32console.c (initialize_w32_display): Detect when the console
- dimensions are insane, and default to 80x25 instead.
- (w32_use_full_screen_buffer): Default to nil.
-
-2005-07-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_draw_vertical_window_border): Use foreground of
- VERTICAL_BORDER_FACE_ID for vertical border line.
- (mac_encode_char): Call check_ccl_update in advance.
- (mac_to_x_fontname, x_font_name_to_mac_font_name)
- (init_font_name_table, mac_do_list_fonts, XLoadQueryFont):
- Don't assume that font family length is less than 32.
- (x_compute_min_glyph_bounds): Make static.
- (x_load_font): Never set fonts_changed_p to zero.
-
-2005-07-04 Lute Kamstra <lute@gnu.org>
-
- * Update FSF's address in GPL notices.
-
-2005-07-03 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (try_window): Fix previous change in how it handles
- a partially-visible line or one only partly past the margin.
-
- * window.c (window_scroll_pixel_based): Take account
- of this_scroll_margin when finding point when scrolling up.
-
-2005-06-29 Ralf Angeli <angeli@iwi.uni-sb.de>
-
- * window.c (window_scroll_pixel_based, window_scroll_line_based):
- Handle `scroll-preserve-screen-position' non-nil, non-t specially.
- (syms_of_window) <scroll-preserve-screen-position>: Doc fix.
-
-2005-07-02 Juri Linkov <juri@jurta.org>
-
- * w32term.c (w32_draw_vertical_window_border): Use foreground of
- VERTICAL_BORDER_FACE_ID for vertical border line.
-
-2005-07-02 Eli Zaretskii <eliz@gnu.org>
-
- * fileio.c (Fcopy_file): Rearrange the code that calls fchown and
- fchmod so that chmod doesn't get called on MSDOS before the file
- is closed.
-
-2005-07-01 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (cleartype_active): New flag for enabling sub-pixel
- workaround.
- (w32_initialize): Initialize it.
- (w32_native_per_char_metric): Allow a couple of extra pixels when
- Cleartype is active.
-
- * w32term.c (w32_initialize): Move check for screen reader here
- from syms_of_w32term.
-
-2005-06-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): bzero compose_status when nbytes
- is not zero.
-
-2005-07-01 Masatake YAMATO <jet@gyve.org>
-
- * emacs.c (main): Passing ADD_NO_RANDOMIZE to `personality'.
-
-2005-06-30 Juri Linkov <juri@jurta.org>
-
- * xdisp.c (x_draw_vertical_border): If left fringe is not present
- decrease x coord of vertical border by 1 pixel to not occupy text
- area of the right window.
-
- * xterm.c (x_draw_vertical_window_border): Use foreground of
- VERTICAL_BORDER_FACE_ID for vertical border line.
-
- * term.c (turn_on_face): In standout mode apply specified
- fg to bg, and specified bg to fg (this makes the logic of
- inversion on terminal consistent with X).
-
-2005-06-29 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (user_variable_p_eh): New function.
- (Fuser_variable_p): Use it. Clarify docstring.
- Return t for aliases of user options, nil for alias loops.
-
-2005-06-27 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (Fdefvar): Improve error message.
-
-2005-06-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c [USE_CARBON_EVENTS] (mac_convert_event_ref): Fix last
- change.
-
-2005-06-27 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (Fdefvar): Don't try to set constant symbols.
-
-2005-06-25 Richard M. Stallman <rms@gnu.org>
-
- * macfns.c (Fx_show_tip): Pass new arg to try_window.
-
- * w32fns.c (Fx_show_tip): Pass new arg to try_window.
-
- * xfns.c (Fx_show_tip): Pass new arg to try_window.
-
- * xdisp.c (try_window): New arg CHECK_MARGINS. Calls changed.
- (redisplay_window): Handle try_window reporting point in scroll margin.
-
- * dispextern.h (try_window): Declare new arg.
-
- * fileio.c (Fcopy_file): New arg PRESERVE_UID_GID.
- Use fchmod to copy the file modes.
- (Frename_file): Don't copy UID and GID here;
- instead, specify t for PRESERVE_UID_GID when calling Fcopy_file.
-
- * eval.c (call_debugger): Take full care of extending stack limits
- to make space for the debugger, and restore the change afterward.
- Bind debug-on-error to nil.
- (restore_stack_limits): New subroutine.
- (Fsignal): Extend specpdl bound along with eval depth bound,
- for calling edebug. Don't do either one, for calling debugger.
- (find_handler_clause): Don't bind debug-on-error here.
- Don't unbind anything either.
- Temporarily advance max_specpdl_size for calling
- internal_with_output_to_temp_buffer.
- (grow_specpdl): Don't alter max_specpdl_size before signaling
- an error.
- (syms_of_eval) <max-specpdl-size>: Doc fix.
-
- * lread.c (read1): 0.0e+NaN should make a "positive" NaN.
-
-2005-06-24 Eli Zaretskii <eliz@gnu.org>
-
- * fileio.c (Frename_file): Undo last change: no need to ifdef away
- chown on DOS_NT platforms.
-
- * w32.c (sys_chown): New function.
-
- * s/ms-w32.h (chown): New; define to sys_chown.
-
-2005-06-24 Juanma Barranquero <lekktu@gmail.com>
-
- * xdisp.c (syms_of_xdisp) <nobreak-char-display>: Doc fix.
- (syms_of_xdisp) <void-text-area-pointer>: Doc fix.
-
- * fileio.c (Frename_file)[!DOS_NT]: Don't call chown on MSDOS/Windows.
-
-2005-06-23 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (get_next_display_element): Finish reversing the tests of
- Vnobreak_char_display.
-
- * xdisp.c (Vnobreak_char_display): Rename from Vshow_nonbreak_escape.
- All uses changed.
- (Qnobreak_space): Rename from Qno_break_space. All uses changed.
- (syms_of_xdisp): Define nobreak-char-display and nobreak-space.
-
- * fileio.c (Frename_file): Preserve owner and group, if possible,
- when copying.
-
-2005-06-23 Juanma Barranquero <lekktu@gmail.com>
-
- * abbrev.c (Funexpand_abbrev):
- * category.c (Fmake_category_set):
- * dispnew.c (Fsleep_for, Fsit_for):
- * editfns.c (Fsubst_char_in_region):
- * eval.c (Fdefvar, Fdefconst, Feval, Ffuncall):
- * frame.c (make_frame_without_minibuffer):
- * lread.c (read_vector):
- * macfns.c (check_x_frame):
- * process.c (Fstop_process, Fcontinue_process):
- * search.c (Freplace_match):
- * syntax.c (Fstring_to_syntax):
- * w32fns.c (check_x_frame, check_x_display_info):
- * xfaces.c (x_supports_face_attributes_p):
- * xselect.c (Fx_own_selection_internal): Follow error conventions.
-
- * image.c (fn_png_init_io): Don't define it.
- (init_png_functions) [HAVE_NTGUI]: Don't initialize fn_png_init_io.
- (png_read_from_file): New function, based on png_read_from_memory.
- (png_load): Use it, instead of fn_png_init_io.
-
-2005-06-23 Kim F. Storm <storm@cua.dk>
-
- * search.c (Fmatch_data): Remove evaporate option.
- (Fset_match_data): Do not mention evaporate option in doc string.
- Add commentary explaining evaporate arg (for internal use only).
- (unwind_set_match_data): Add comment on evaporate use.
-
-2005-06-22 Miles Bader <miles@gnu.org>
-
- * xfaces.c (Qvertical_border): Rename from `Qvertical_divider'.
- (realize_basic_faces, syms_of_xfaces): Update references to it.
- * dispextern.h (enum face_id): Rename `VERTICAL_DIVIDER_FACE_ID'
- to `VERTICAL_BORDER_FACE_ID'.
- * dispnew.c (build_frame_matrix_from_leaf_window): Update references.
-
-2005-06-21 Juri Linkov <juri@jurta.org>
-
- * dispextern.h: Add extern Qframe_set_background_mode.
-
- * xfaces.c: Rename obsolete function Qframe_update_face_colors to
- Qframe_set_background_mode.
-
- * frame.c (Fmodify_frame_parameters):
- Call frame-set-background-mode after changing the background color
- on non-window non-dos branch.
-
-2005-06-21 Juanma Barranquero <lekktu@gmail.com>
-
- * fns.c (Fchar_table_range):
- * process.c (Fmake_network_process): Fix spellings.
-
-2005-06-20 Kim F. Storm <storm@cua.dk>
-
- * fns.c (Fsort): Doc fix.
-
-2005-06-20 Miles Bader <miles@gnu.org>
-
- * xfaces.c (Qvertical_divider): New variable.
- (realize_basic_faces): Realize its face.
- (syms_of_xfaces): Initialize it.
-
- * dispextern.h (enum face_id): Add `VERTICAL_DIVIDER_FACE_ID'.
-
- * dispnew.c (build_frame_matrix_from_leaf_window): Display vertical
- window-separator on ttys using `vertical-divider' face by default.
-
-2005-06-17 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (get_next_display_element):
- Reverse test of Vshow_nonbreak_escape.
-
- * term.c (produce_special_glyphs): Use spec_glyph_lookup_face.
- (Ftty_no_underline): New function.
- (syms_of_term): defsubr it.
-
- * keyboard.c (read_char): Call restore_getcjmp after jump occurs.
-
- * dispnew.c (spec_glyph_lookup_face): New function.
- (build_frame_matrix_from_leaf_window): Use it.
-
- * dispextern.h (spec_glyph_lookup_face): Add declaration.
-
- * buffer.c (syms_of_buffer) <cursor-type>: Doc fix.
-
-2005-06-12 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (read_char): After catching a longjmp,
- call restore_getcjmp.
-
-2005-06-17 Juanma Barranquero <lekktu@gmail.com>
-
- * xselect.c (lisp_data_to_selection_data): Fix spelling.
-
-2005-06-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_compute_glyph_string_overhangs): Don't set
- overhangs unless the given glyph type is noncomposite CHAR_GLYPH.
- [USE_CARBON_EVENTS] (mac_convert_event_ref): Convert dead key down
- events.
- (XTread_socket): Don't pass keyboard events with the option
- modifier to the system when Vmac_command_key_is_meta is nil or
- Vmac_option_modifier is non-nil.
- [USE_CARBON_EVENTS] (read_socket_inev): New variable.
- [USE_CARBON_EVENTS] (init_command_handler): Fix argument.
- [USE_CARBON_EVENTS] (mac_handle_mouse_event): New Carbon event
- handler function.
- (install_window_handler) [USE_CARBON_EVENTS]: Install it.
- (XTread_socket) [USE_CARBON_EVENTS]: Move mouse wheel event
- handler part to mac_handle_mouse_event.
-
-2005-06-14 Juanma Barranquero <lekktu@gmail.com>
-
- * eval.c (Fdefvaralias): Rename arguments SYMBOL and ALIASED to
- NEW-ALIAS and BASE-VARIABLE, respectively.
-
-2005-06-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Lisp_Object/int mixup.
- (get_phys_cursor_geometry, format_mode_line_unwind_data)
- (get_line_height_property, x_produce_glyphs): Remove unused vars.
-
- * coding.c (run_pre_post_conversion_on_str): Remove unused var `buf'.
-
-2005-06-13 Eli Zaretskii <eliz@gnu.org>
-
- * w32term.c (x_use_underline_position_properties): New variable.
- (x_draw_glyph_string): Remind in a comment to change doc string of
- x-use-underline-position-properties if/when underline positioning
- is implemented.
- (syms_of_w32term): DEFVAR_BOOL x-use-underline-position-properties,
- and initialize it to nil.
-
-2005-06-12 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (NEWOPENFILENAME): New struct.
- (Fx_file_dialog): Use it to trick the system into giving us up to
- date dialogs on systems that are documented to support it.
- Do not set OFN_FILEMUSTEXIST flag if looking for a directory.
-
-2005-06-12 Eli Zaretskii <eliz@gnu.org>
-
- * w32fns.c (w32_abort): Use the MB_YESNO dialog instead of
- MB_ABORTRETRYIGNORE. Never return, even if DebugBreak does.
-
-2005-06-11 Eli Zaretskii <eliz@gnu.org>
-
- * image.c (x_create_x_image_and_pixmap) [HAVE_NTGUI]: Cast 4th arg
- to CreateDIBSection to avoid a compiler warning.
- (pbm_load): Cast 3rd arg to IMAGE_BACKGROUND to avoid a compiler
- warning.
- (png_load): Cast return values of fn_png_create_read_struct and
- fn_png_create_info_struct, to avoid compiler warnings on W32.
- Cast 3rd arg to IMAGE_BACKGROUND and image_background_transparent
- to avoid compiler warnings.
- (jpeg_load): Cast return value of fn_jpeg_std_error to avoid a
- compiler warning on W32. Cast 3rd arg to IMAGE_BACKGROUND to
- avoid a compiler warning.
- (tiff_load): Cast return values of fn_TIFFOpen and
- fn_TIFFClientOpen to avoid compiler warning on W32. Cast 3rd arg
- to IMAGE_BACKGROUND to avoid a compiler warning.
- (gif_load): Cast return values of fn_DGifOpenFileName and
- fn_DGifOpen to avoid compiler warnings on W32. Cast 3rd arg to
- IMAGE_BACKGROUND to avoid a compiler warning.
- (DrawText) [HAVE_NTGUI || MAC_OS]: If already defined, undef
- before redefining.
-
- * w32bdf.c (create_offscreen_bitmap): Cast `bitsp' to `void **' in
- the call to CreateDIBSection, to avoid a compiler warning.
-
-2005-06-11 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fx_file_dialog): Unblock input before falling back to
- minibuffer.
- * macfns.c (Fx_file_dialog): Likewise.
-
-2005-06-10 Eli Zaretskii <eliz@gnu.org>
-
- * makefile.w32-in ($(TEMACS)): Depend on addsection.exe.
-
-2005-06-10 Juanma Barranquero <lekktu@gmail.com>
-
- * process.c (syms_of_process) [ADAPTIVE_READ_BUFFERING]:
- * w32fns.c (syms_of_w32fns): Fix spellings.
-
-2005-06-10 Eli Zaretskii <eliz@gnu.org>
-
- * unexw32.c (COPY_CHUNK, COPY_PROC_CHUNK): Add a new argument
- `verbose'; print diagnostic messages only if it is non-zero.
- All callers changed to pass a zero value unless DEBUG_DUMP is defined
- in the environment.
- (copy_executable_and_dump_data): Print section names with %.8s.
-
-2005-06-10 Masatake YAMATO <jet@gyve.org>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Call clear_mouse_face
- when mouse_face is not given.
-
-2005-06-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * window.c (Fselect_window): Adapt call to Fselect_frame.
-
- * lisp.h: Update EXFUN of Fselect_frame.
-
- * keyboard.c (command_loop_1): Adapt call to Fselect_frame.
-
- * frame.c (Fhandle_switch_frame, Fselect_frame): Delete unused arg
- no_enter.
- (Fset_mouse_position, Fset_mouse_pixel_position, Ficonify_frame):
- Adapt to above change.
-
-2005-06-10 Juanma Barranquero <lekktu@gmail.com>
-
- * fns.c (Fmemq, Fmaphash): Doc fixes.
-
-2005-06-09 Juanma Barranquero <lekktu@gmail.com>
-
- * xfaces.c (Fdisplay_supports_face_attributes_p):
- Fix typo in docstring.
-
-2005-06-08 Steven Tamm <steventamm@mac.com>
-
- * unexmacosx.c (copy_data_segment): Copy __la_sym_ptr2 section
- used by gcc4 on intel mac.
-
-2005-06-09 Kim F. Storm <storm@cua.dk>
-
- * search.c (Fmatch_data): Add optional RESEAT arg. Unchain markers
- in REUSE list if non-nil; free them if equal to evaporate.
- (Fset_match_data): Add optional RESEAT arg. Unchain markers in LIST
- if non-nil; free them if equal to evaporate. Use XCAR/XCDR.
- (restore_search_regs): Rename from restore_match_data. Uses changed.
- (unwind_set_match_data): New function.
- (record_unwind_save_match_data): New function like save-match-data.
-
- * lisp.h (Fmatch_data, Fset_match_data): Fix EXFUN.
- (record_unwind_save_match_data): Add prototype.
- (restore_search_regs): Rename from restore_match_data.
-
- * composite.c (compose_chars_in_text):
- * eval.c (do_autoload):
- * macmenu.c (set_frame_menubar):
- * process.c (read_process_output, exec_sentinel):
- * xmenu.c (set_frame_menubar):
- * xdisp.c (prepare_menu_bars, update_menu_bar, update_tool_bar):
- * w32menu.c (set_frame_menubar):
- Use record_unwind_save_match_data.
-
-2005-06-08 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (get_next_display_element): Alter previous change:
- Distinguish Vshow_nonbreak_escape = t or not t.
- For t, use escape_glyph once again, as before previous change.
- Use space or hyphen for display, instead of the non-ASCII char.
- (syms_of_xdisp) <show-nonbreak-escape>: Doc fix.
-
- * process.c (Fstart_process): Don't touch command_channel_p slot.
-
- * process.h (struct process): Delete command_channel_p.
-
-2005-06-07 Masatake YAMATO <jet@gyve.org>
-
- * xdisp.c (note_mode_line_or_margin_highlight):
- Check the overlapping of re-rendering area to avoid flickering.
- (note_mouse_highlight): Call clear_mouse_face if PART
- is not ON_MODE_LINE nor ON_HEADER_LINE.
-
-2005-06-07 Kim F. Storm <storm@cua.dk>
-
- * process.c: Improve commentary for adaptive read buffering.
-
-2005-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars
- if available.
-
-2005-06-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * macmenu.c (menu_quit_handler, install_menu_quit_handler):
- New functions for popping down menus on C-g.
- (set_frame_menubar, mac_menu_show): Call install_menu_quit_handler.
-
- * macterm.c: Make mac_quit_char_modifiers and mac_quit_char_keycode
- non-static.
-
- * config.in: Add HAVE_CANCELMENUTRACKING.
-
-2005-06-06 Eli Zaretskii <eliz@gnu.org>
-
- * w32heap.h (OFFSET_TO_RVA, RVA_TO_OFFSET, RVA_TO_PTR): Remove macros.
-
- * unexw32.c (RVA_TO_PTR): Move here from w32heap.h.
-
- * w32proc.c (RVA_TO_PTR): New macro.
-
- * w32heap.c (RVA_TO_PTR): No need to #undef now.
-
- * makefile.w32-in ($(BLD)/emacs.$(O), $(BLD)/w32select.$(O)):
- Depend on w32heap.h.
-
-2005-06-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * keyboard.c (command_loop_1): Update Vthis_original_command.
-
-2005-06-06 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (popup_get_selection): Undo previous change.
-
-2005-06-06 Juri Linkov <juri@jurta.org>
-
- * xdisp.c (Qno_break_space): New variable.
- (syms_of_xdisp): Initialize it.
- (get_next_display_element): Add no-break space and soft hypen
- codes for iso8859-2 and iso8859-5. Don't add `\' for them.
- Use `no-break-space' face for no-break spaces.
-
-2005-06-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * window.c (delete_window): Handle the case where a h/vchild has
- a h/vchild.
-
-2005-06-05 Eli Zaretskii <eliz@gnu.org>
-
- * w32.c (sys_setsockopt): Change arg 4 to `const void *'. In the
- call to pfn_setsockopt, cast optval to `const char *'.
-
-2005-06-04 Eli Zaretskii <eliz@gnu.org>
-
- * w32.c (gettimeofday): Use struct _timeb, not struct timeb.
- (open_unc_volume): Cast return value of map_w32_filename, to avoid
- compiler warnings.
-
- * s/ms-w32.h (fileno): Don't define if already defined.
-
- * emacs.c: Include w32heap.h, to avoid compiler warning about sbrk.
-
- * makefile.w32-in (DOC): Define to point to the generated DOC-X.
-
-2005-06-04 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (popup_get_selection): Click not in menu deactivates menu.
-
-2005-06-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * macmenu.c (cleanup_popup_menu): New function.
- (Fx_popup_menu): Unwind protect cleanup_popup_menu in case
- mac_menu_show Quit:s.
- (mac_menu_show): Quit on cancel if not popped up on click (i.e.
- a dialog).
-
-2005-06-04 Kim F. Storm <storm@cua.dk>
-
- * coding.c (decode_coding_string): Handle CODING_FINISH_INTERRUPT.
-
- * callproc.c (Fcall_process): Don't use alloca to gradually
- increase size of buf, as it effectively uses twice the necessary
- space on the stack. Instead, pre-allocate buf of full size, and
- gradually increase the read size.
-
- * bytecode.c (BYTE_CODE_QUIT): Check Vthrow_on_input.
-
- * eval.c (unbind_to): Preserve value of Vquit_flag.
-
- * xterm.c (handle_one_xevent): Also ignore mouse motion just
- before a button release event.
-
-2005-06-03 Juanma Barranquero <lekktu@gmail.com>
-
- * xfaces.c (Finternal_lisp_face_equal_p): Really report
- on faces in a frame, if the argument FRAME is non-nil.
- Improve argument/docstring consistency.
-
-2005-06-02 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (MODE_LINE_NOPROP_LEN): New macro.
- (x_consider_frame_title, Fformat_mode_line): Save offset into
- mode_line_noprop_buf rather than pointer, in case buffer is relocated.
-
-2005-06-01 Kim F. Storm <storm@cua.dk>
-
- * fns.c (mapcar1): Maybe exit loop if original sequence was modified.
-
-2005-06-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_to_x_fontname, mac_do_list_fonts): Set XLFD
- resolution fields for scalable fonts to 0.
-
- * xfaces.c (build_scalable_font_name): Round pixel size to the
- nearest integer.
-
-2005-06-01 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (display_mode_line): Support nested calls to redisplay
- and format-mode-line. Set mode_line_target to MODE_LINE_DISPLAY.
-
-2005-05-31 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (Finsert_file_contents):
- * xdisp.c (note_mode_line_or_margin_highlight): Lisp_Object/int mixup.
-
-2005-05-31 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (mode_line_noprop_buf, mode_line_noprop_buf_end)
- (mode_line_noprop_ptr): Rename from frame_title_*.
- (store_mode_line_noprop_char): Rename from store_frame_title_char.
- (store_mode_line_noprop): Rename from store_frame_title.
- (mode_line_target): New enum to specify current output target
- for mode line formatting.
- (display_mode_element): Test it rather than frame_title_ptr and
- mode_line_string_list to determine where output should go.
- (mode_line_proptrans_alist, mode_line_string_alist): Make static.
- (Vmode_line_unwind_vector): New variable.
- (format_mode_line_unwind_data, unwind_format_mode_line):
- New functions for unwind protection in mode line formatting.
- (x_consider_frame_title): Use them and new local var 'title_start'
- to support nested calls to format-mode-line and redisplay.
- Set mode_line_target to MODE_LINE_TITLE.
- (Fformat_mode_line): Use them and new local var 'string_start' to
- support nested calls to format-mode-line and redisplay.
- Set mode_line_target to MODE_LINE_NOPROP or MODE_LINE_STRING.
- Don't trim trailing dashes.
- (decode_mode_spec): Don't make infinite number of trailing dashes
- for MODE_LINE_NOPROP and MODE_LINE_STRING targets.
- (syms_of_xdisp): Initialize and staticpro mode_line_string_face,
- mode_line_string_face_prop, and Vmode_line_unwind_vector.
- (init_xdisp): Initialize mode_line_noprop_ptr to start of _buf.
- Initialize mode_line_target to MODE_LINE_DISPLAY.
-
-2005-05-29 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fbuffer_local_value): Call indirect_variable.
-
-2005-05-28 Masatake YAMATO <jet@gyve.org>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Change the
- pointer to a hand cursor when hoovering over a mouse-face.
-
-2005-05-27 Kenichi Handa <handa@m17n.org>
-
- * xterm.c (x_encode_char): Call check_ccl_update in advance.
-
- * ccl.c: Now an element of Vccl_program_table is a vector of
- length 4, not 3.
- (ccl_get_compiled_code): New arg idx. Caller changed.
- Adjust for the change of Vccl_program_table.
- (setup_ccl_program): Adjust for the change of Vccl_program_table.
- (check_ccl_update): New function.
- (Fregister_ccl_program): Use ASET to set an element of a vector.
- Adjusted for the change of Vccl_program_table.
-
- * ccl.h (struct ccl_program): New member idx.
- (check_ccl_update): Extern it.
-
-2005-05-27 Juanma Barranquero <lekktu@gmail.com>
-
- * image.c (Vimage_library_alist): Move from image.el.
- (syms_of_image): Defvar it.
- (lookup_image_type): Use it.
-
- * buffer.c (Fbuffer_local_value): Make argument name match its use
- in docstring.
-
-2005-05-26 Juanma Barranquero <lekktu@gmail.com>
-
- * keyboard.c (Frecursive_edit): Fix typo in docstring.
- (Fposn_at_x_y): Make argument name match its use in docstring.
-
-2005-05-26 Lute Kamstra <lute@gnu.org>
-
- * eval.c (Frun_hooks): Mention run-mode-hooks in docstring.
-
-2005-05-24 Masatake YAMATO <jet@gyve.org>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Use b and e
- as loop sentinels.
-
-2005-05-24 Nick Roberts <nickrob@snap.net.nz>
-
- * xmenu.c (Fx_popup_dialog): Add a third boolean argument to
- select frame title ("Question"/"Information").
- (xdialog_show): Use it.
-
- * macmenu.c (Fx_popup_dialog, mac_dialog_show): As for xmenu.c.
-
- * w32menu.c (Fx_popup_dialog, w32_dialog_show): As for xmenu.c.
-
- * fns.c (Fyes_or_no_p, Fy_or_n_p): Call Fx_popup_dialog with
- a third argument (Qnil).
-
- * lisp.h: x-popup-dialog can have three arguments.
-
- * editfns.c (Fmessage_box): Use "Information" for frame title.
-
-2005-05-23 Thien-Thi Nguyen <ttn@gnu.org>
-
- * termcap.c [VMS]: Include <starlet.h>.
-
-2005-05-23 Masatake YAMATO <jet@gyve.org>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Add code
- for mouse-face. Change the type of the first argument from `window'
- to `Lisp_Object'.
- (note_mouse_highlight): Call note_mode_line_or_margin_highlight with
- window instead of w.
-
-2005-05-22 Andreas Schwab <schwab@suse.de>
-
- * process.c (send_process): Move misplaced volatile.
-
-2005-05-21 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (display_mode_element): If we're processing a list and
- padding is specified, put it after the last element.
-
-2005-05-21 Eli Zaretskii <eliz@gnu.org>
-
- * fileio.c (Fexpand_file_name) [DOS_NT]: Don't try to support
- "superroot" on DOS_NT systems.
-
-2005-05-21 David Hunter <hunterd42@comcast.net> (tiny change)
-
- * process.c (send_process): Restore the SIGPIPE handler if we
- catch a SIGPIPE.
-
-2005-05-20 Juanma Barranquero <lekktu@gmail.com>
-
- * image.c (lookup_image, png_read_from_memory): Remove hacks (and
- misleading comments).
- (DEF_IMGLIB_FN): Use C calling convention for image libraries.
-
-2005-05-20 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
-
- * window.c (Fwindow_inside_edges, Fwindow_inside_pixel_edges):
- Correct the right value.
-
-2005-05-19 Nick Roberts <nickrob@snap.net.nz>
-
- * keyboard.c (syms_of_keyboard): Remove Lisp variables
- post-command-idle-hook and post-command-idle-delay.
- (command_loop_1): Don't try to execute post-command-idle-hook.
-
-2005-05-16 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (handle_display_prop): Handle empty replacement.
- (handle_single_display_spec): Return -1 for empty replacement.
-
- * keyboard.c (adjust_point_for_property): Skip empty overlay string.
-
- * .gdbinit (pitx): Print more info about iterator.
-
-2005-05-16 Andreas Schwab <schwab@suse.de>
-
- * unexmacosx.c (unexec_realloc): Move declarations before statements.
-
-2005-05-14 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (message3): Call cancel_echoing.
-
- * alloc.c (Fmemory_full_p): New function.
- (syms_of_alloc): defsubr it.
-
- * process.c (send_process_trap): Unblock SIGPIPE.
- (send_process): Reset SIGPIPE handler before reporting error.
-
-2005-05-14 Nick Roberts <nickrob@snap.net.nz>
-
- * emacs.c (syms_of_emacs): Fix doc string for system-type.
-
-2005-05-13 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Ffind_file_name_handler): Handle lambda-exp as handler.
- (Finsert_file_contents): If we read 0 bytes from a special file,
- unlock the visited file if we locked it.
- (Fmake_symbolic_link, Frecent_auto_save_p): Doc fixes.
- (Ffile_exists_p, Ffile_symlink_p): Doc fixes.
-
-2005-05-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * emacs.c (main) [MAC_OS8]: Call init_atimer before mac_term_init.
-
- * keyboard.c (readable_events) [USE_TOOLKIT_SCROLL_BARS]:
- Regard toolkit scroll bar thumb drag events as squeezable and prevent
- redisplay from being paused by them.
-
- * mac.c [!MAC_OSX]: Include keyboard.h and syssignal.h.
- [!MAC_OSX] (target_ticks): Remove variable.
- [!MAC_OSX] (check_alarm, pause, index): Remove functions.
- [!MAC_OSX && __MRC__] (sys_strftime): Likewise.
- [!MAC_OSX] (select): If fd 0 is not set in rfds and some input
- event occurs before timeout, behave as if the function were interrupted.
- [!MAC_OSX] (sigblock, sigsetmask, alarm): Simulate SIGALRM
- handling using Time Manager routines.
- [!MAC_OSX] (mac_atimer_task, mac_atimer_qlink, signal_mask):
- New variables.
- [!MAC_OSX] (mac_atimer_handler, set_mac_atimer, remove_mac_atimer)
- (setitimer): New functions.
-
- * macfns.c, macmenu.c: Don't include signal.h.
-
- * macterm.c [USE_TOOLKIT_SCROLL_BARS] (get_control_part_bounds):
- Rename from get_control_part_bound. All callers changed.
- (x_scroll_bar_clear): New function.
- (x_clear_frame): Use it.
- (XTset_vertical_scroll_bar): Don't call Draw1Control.
- (x_scroll_bar_handle_click): Change type of second argument from
- int to ControlPartCode.
- (check_alarm): Remove declaration.
- (XTread_socket) [!TARGET_API_MAC_CARBON]: Don't call it.
- (XTread_socket): Use ControlPartCode instead of SInt16.
-
-2005-05-13 Nozomu Ando <nand@mac.com>
-
- * unexmacosx.c: Include assert.h.
- (MACOSX_MALLOC_MULT16): New define.
- [MACOSX_MALLOC_MULT16] (ptr_in_unexec_regions): Determine whether
- ptr is in unexec regions by checking it is multiple of 16.
- (unexec_malloc_header_t): New typedef.
- (unexec_malloc, unexec_realloc, unexec_free): Store and use
- allocated size information in unexec_malloc_header.
-
-2005-05-10 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (noinclude): Add #undef.
-
- * image.c, xfns.c, xmenu.c: Don't include signal.h.
-
-2005-05-09 Juanma Barranquero <lekktu@gmail.com>
-
- * fileio.c (Fexpand_file_name, Frename_file, Fadd_name_to_file)
- (Fmake_symbolic_link, Faccess_file, Frecent_auto_save_p):
- Doc fixes.
-
- * dired.c (Ffile_name_completion): Make argument name
- match its use in docstring.
-
-2005-05-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * eval.c (Fdefvaralias): Remove any pre-existing
- variable-documentation property of the alias.
-
-2005-05-07 Thien-Thi Nguyen <ttn@gnu.org>
-
- * xfns.c (start_hourglass): Do nothing when running on a tty.
-
-2005-05-07 Juanma Barranquero <lekktu@gmail.com>
-
- * fns.c (Fchar_table_range): Fix typos in docstring.
-
-2005-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fns.c (Fchar_table_range): Yet Another Int/Lisp_Object Mixup.
-
-2005-05-06 Eli Zaretskii <eliz@gnu.org>
-
- * lread.c (Flocate_file_internal): Doc fix.
-
- * Makefile.in (lisp, shortlisp): Add jka-cmpr-hook.elc.
-
-2005-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macselect.c (x_own_selection): Accept Lisp string as result of
- selection converter function.
- (x_clear_frame_selections): Don't call x-lost-selection-functions
- if Emacs is not owner of the selection.
- (Vmac_services_selection): Put variable and initialization in
- #ifdef MAC_OSX.
- (syms_of_macselect) [MAC_OSX]: Set default value of
- Vmac_services_selection to PRIMARY.
-
- * macterm.c (toolkit_scroll_bar_interaction): Remove unused variable.
- (mac_handle_tool_bar_click): Remove unused function and declaration.
- [USE_TOOLKIT_SCROLL_BARS] (scroll_bar_timer_callback)
- (install_scroll_bar_timer, set_scroll_bar_timer)
- (control_part_code_to_scroll_bar_part, construct_scroll_bar_click)
- (get_control_part_bound, x_scroll_bar_handle_press)
- (x_scroll_bar_handle_release, x_scroll_bar_handle_drag)
- (x_set_toolkit_scroll_bar_thumb): New functions and declarations.
- [USE_TOOLKIT_SCROLL_BARS] (last_scroll_bar_part, scroll_bar_timer)
- (scroll_bar_timer_event_posted_p): New variables.
- [USE_TOOLKIT_SCROLL_BARS] (SCROLL_BAR_FIRST_DELAY)
- (SCROLL_BAR_CONTINUOUS_DELAY): New macros.
- (x_scroll_bar_create): Set control reference with NewControl.
- (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]:
- Initialize track_top and track_height to nil.
- (x_scroll_bar_set_handle, x_scroll_bar_note_movement):
- Put functions in #ifndef USE_TOOLKIT_SCROLL_BARS.
- (XTset_vertical_scroll_bar): Don't make space between scroll bar
- and associated window.
- (XTset_vertical_scroll_bar) [MAC_OSX]: Get scroll bar area width
- from window config.
- (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
- Set track_top and track_height to nil when scroll bar size is changed.
- Recalculate them if they are nil.
- (XTread_socket) [MAC_OSX]: Use control kind to determine if the
- clicked control is a scroll bar.
- (XTread_socket) [USE_TOOLKIT_SCROLL_BARS]: Use toolkit scroll bar
- event handler functions. Don't add modifiers to scroll bar click
- events. Call scroll bar release handler when window is deactivated.
- (mac_initialize): Remove unused code for X toolkit.
- (syms_of_macterm) [!USE_TOOLKIT_SCROLL_BARS]:
- Initialize Vx_toolkit_scroll_bars to nil.
-
- * macterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
- New members track_top and track_height.
-
- * sysselect.h [DARWIN || MAC_OSX]: Temporarily undefine
- init_process when including sys/select.h.
-
-2005-05-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * eval.c (Fdefvaralias): Doc fix.
-
- * xmenu.c (Fx_popup_menu, Fx_popup_dialog): Doc fixes.
-
-2005-05-05 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (init_buffer_once): Set cursor_in_non_selected_windows
- default value.
- (syms_of_buffer): Add default-cursor-in-non-selected-windows.
- Fix type of cursor-in-non-selected-windows.
-
-2005-05-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * mac.c: #undef init_process so not to conflict with system headers.
-
-2005-05-02 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer): Define cursor-in-non-selected-windows.
-
- * buffer.h (struct buffer): Add cursor_in_non_selected_windows slot.
-
- * xdisp.c (Vcursor_in_non_selected_windows)
- (Qcursor_in_non_selected_windows): Vars deleted.
- (syms_of_xdisp): Don't initialize them.
- (get_window_cursor_type): Use cursor_in_non_selected_windows
- buffer slot.
-
-2005-05-02 Kim F. Storm <storm@cua.dk>
-
- * macros.c (executing_kbd_macro_index): Rename from
- executing_macro_index. All uses changed.
- (executing_kbd_macro_iterations): Rename from
- executing_macro_iterations. All uses changed.
- (executing_kbd_macro): Rename from executing_macro.
- All uses changed.
- (syms_of_macros): Rename Lisp var executing-macro-index to
- executing-kbd-macro-index.
-
- * xdisp.c (move_it_in_display_line_to): Fix last change.
-
-2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * xmenu.c (Fx_popup_menu): Doc fix.
-
- * charset.c (syms_of_charset): Delete defsubr for Schars_in_region.
-
-2005-05-02 Jason Rumney <jasonr@gnu.org>
-
- * emacs.c (USAGE3, USAGE4): Keep strings below 2048 bytes.
-
-2005-05-02 Nozomu Ando <nand@mac.com>
-
- * sysselect.h: Fix typo.
-
-2005-05-02 Nick Roberts <nickrob@snap.net.nz>
-
- * charset.c (Fchars_in_region): Remove as obsolete.
-
-2005-05-01 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_in_display_line_to): Stop if we move beyond
- TO_CHARPOS. This may happen if last glyphs was an image or stretch
- glyph.
-
-2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
-
- * dispnew.c (sit_for): Vexecuting_macro -> Vexecuting_kbd_macro.
-
-2005-05-01 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c [not HAVE_X_TOOLKIT] (xmenu_show):
- If user cancels the menu, quit unless FOR_CLICK.
-
- * macros.c (Vexecuting_kbd_macro): Rename from Vexecuting_macro.
- All uses changed.
- (syms_of_macros): Define only executing-kbd-macro, not executing-macro.
- * keyboard.c: Change Vexecuting_macro to Vexecuting_kbd_macro.
- * macros.h (Vexecuting_kbd_macro): Declare instead of Vexecuting_macro.
- * commands.h (Vexecuting_kbd_macro): Likewise.
-
-2005-05-01 Thien-Thi Nguyen <ttn@gnu.org>
-
- * sysdep.c (get_frame_size) [VMS]: Use a fresh i/o channel.
-
-2005-04-30 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Ffind_file_name_handler): Handle the `operations'
- property of the file name handler.
- (Qoperations): New variable.
- (syms_of_fileio): Initialize and staticpro it.
-
- * xdisp.c (set_message_1): Delete xassert.
-
-2005-04-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c: Don't include time.h. Include sysselect.h after systime.h.
-
- * macfns.c (Fx_server_version): Add BLOCK_INPUT around Gestalt.
-
- * macgui.h [HAVE_CARBON && MAC_OSX]: Don't undefine/define mktime
- before/after including Carbon.h if there is a working mktime.
-
-2005-04-28 Kim F. Storm <storm@cua.dk>
-
- * xfaces.c (resolve_face_name): Add arg SIGNAL_P. Calls changed.
- Fix cyclic alias check. If alias loop is detected, signal
- circular-list error if SIGNAL_P, and return Qdefault if !SIGNAL_P.
-
-2005-04-28 Lute Kamstra <lute@gnu.org>
-
- * eval.c (do_autoload): Record only autoloads in the autoload
- property of symbols.
-
-2005-04-28 Nick Roberts <nickrob@snap.net.nz>
-
- * emacs.c (USAGE1): Add --basic-display and --quick options.
-
-2005-04-27 Kim F. Storm <storm@cua.dk>
-
- * data.c (syms_of_data) Staticpro Qcyclic_variable_indirection.
-
-2005-04-26 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Fsame_window_p, Fspecial_display_p): Doc fixes.
- (syms_of_window): Doc fixes.
-
- * indent.c (Fvertical_motion): Undo previous change.
-
-2005-04-26 Kenichi Handa <handa@m17n.org>
-
- * fns.c (char_table_range): New function.
- (Fchar_table_range): Signal an error if characters in the range
- have inconsistent values. Don't check the parent.
-
-2005-04-25 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (fontset_set): Fix previous change.
-
-2005-04-24 Richard M. Stallman <rms@gnu.org>
-
- * indent.c (Fvertical_motion): Bind fontification-functions to nil.
-
-2005-04-24 Eli Zaretskii <eliz@gnu.org>
-
- * regex.c (re_search_2, re_match_2_internal): Convert second arg
- of RE_TRANSLATE to int, to shut up GCC warnings.
-
- * fileio.c (Fcopy_file): Doc fix.
- [MSDOS]: Fix call to emacs_open: buffer_file_type not defined and
- not needed.
-
-2005-04-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in [HAVE_CARBON] (MAC_OBJ): Add macselect.o.
- (SOME_MACHINE_OBJECTS): Likewise.
- (mac.o): Depend on ccl.h.
- (macselect.o): New target.
-
- * emacs.c (main) [MAC_OS8 || MAC_OSX && HAVE_CARBON]:
- Call syms_of_macselect.
-
- * frame.c (Fdelete_frame) [MAC_OS]: Call x_clear_frame_selections.
-
- * mac.c [!TARGET_API_MAC_CARBON]: Don't include charset.h or coding.h.
- (QCLIPBOARD): Remove variable.
- (syms_of_mac): Don't initialize it.
- (Fmac_paste_function, Fmac_cut_function, Fx_selection_exists_p):
- Remove functions.
- (syms_of_mac): Don't defsubr them.
- [TARGET_API_MAC_CARBON] (Qmime_charset, QNFD, QNFKD, QNFC, QNFKC)
- (QHFS_plus_D, QHFS_plus_C): New variables.
- (syms_of_mac) [TARGET_API_MAC_CARBON]: Initialize them.
- [TARGET_API_MAC_CARBON] (get_cfstring_encoding_from_lisp)
- (cfstring_create_normalized): New functions.
- [TARGET_API_MAC_CARBON] (Fmac_code_convert_string): Likewise.
- (syms_of_mac) [TARGET_API_MAC_CARBON]: Defsubr it.
-
- * macterm.c (handling_window_update, terminate_flag):
- Remove variables.
- (do_window_update, do_ae_quit_application, XTread_socket):
- Don't use them.
- (WNE_SLEEP_AT_SUSPEND, WNE_SLEEP_AT_RESUME): Don't define.
- [USE_CARBON_EVENTS && MAC_OSX] (mac_handle_service_event)
- (init_service_handler): Move to macselect.c. Remove declarations.
- [USE_CARBON_EVENTS && MAC_OSX] (init_service_handler): Add extern.
- (Qapplication, Qabout): New variables.
- (syms_of_mac): Initialize them.
- [USE_CARBON_EVENTS && MAC_OSX] (Qpreferences, Qservices, Qpaste)
- (Qperform): New variables.
- (syms_of_mac) [USE_CARBON_EVENTS && MAC_OSX]: Initialize them.
- (do_get_menus) [TARGET_API_MAC_CARBON]: Don't call AppendResMenu.
- (do_menu_choice): Unhighlight menu bar also when menu_id is 0.
- (mac_store_application_menu_event, init_menu_bar): New functions.
- [USE_CARBON_EVENTS] (mac_handle_command_event)
- (init_command_handler): New functions.
- (mac_handle_window_event): Return noErr on window update event.
- (do_ae_quit_application): Call mac_store_application_menu_event.
- (mac_initialize) [USE_CARBON_EVENTS]: Call init_command_handler
- and init_menu_bar.
-
- * macterm.h (x_clear_frame_selections): Add extern.
-
- * macselect.c: New file for selection processing on Mac OS.
-
-2005-04-23 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fcopy_file): New arg MUSTBENEW.
- (Frename_file): Pass new arg to Fcopy_file.
-
- * window.c (window_size_fixed): Variable deleted.
- (syms_of_window): Initialize window-size-fixed to nil.
- But don't DEFVAR window_size_fixed.
-
-2005-04-23 Andreas Schwab <schwab@suse.de>
-
- * m/macppc.h (LD_SWITCH_MACHINE) [LINUX]: Don't define.
- (START_FILES, LIB_STANDARD) [LINUX && _ARCH_PPC64]: Override to
- use lib64 instead of lib.
- (_LP64) [_ARCH_PPC64]: Define if not defined.
-
-2005-04-23 David Hunter <hunterd42@comcast.net> (tiny change)
-
- * s/ms-w32.h (HAVE_PWD_H): Define.
-
-2005-04-22 Kenichi Handa <handa@m17n.org>
-
- * fns.c (copy_sub_char_table): Explicitly copy the default value
- of the sub-chartable.
-
- * fontset.c (fontset_set): When a sub-chartable is created,
- explicitly sets the defalt value.
-
-2005-04-22 Kim F. Storm <storm@cua.dk>
-
- * fns.c (Fplist_get): Replace by Fsafe_plist_get.
- (Fsafe_plist_get): Rename to Fplist_get.
- (Fsafe_get): Remove, as Fget now uses safe Fplist_get.
- (defsubr): Remove defsubr for Fsafe_plist_get and Fsafe_get.
-
- * lisp.h (Fsafe_plist_get, Fsafe_get): Remove EXFUN.
-
- * xdisp.c (store_mode_line_string, produce_stretch_glyph)
- (note_mode_line_or_margin_highlight, note_mouse_highlight):
- Use Fplist_get instead of Fsafe_plist_get.
-
- * xfaces.c (resolve_face_name): Use Fget instead of Fsafe_get.
-
-2005-04-21 Miles Bader <miles@gnu.org>
-
- * xdisp.c (dump_glyph_row): Don't display overlay_arrow_p field.
-
-2005-04-20 Thien-Thi Nguyen <ttn@gnu.org>
-
- * sysdep.c: Remove reference to defunct vms-pwd.h.
- * dired.c: Likewise. Also, for pwd.h, use HAVE_PWD_H, not !VMS.
- * editfns.c, fileio.c, filelock.c, sysdep.c, xrdb.c: Likewise.
-
- * config.in: Regenerate.
-
-2005-04-20 Kenichi Handa <handa@m17n.org>
-
- * lisp.h (CHAR_TABLE_DEFAULT_SLOT_ASCII): New macro.
- (CHAR_TABLE_DEFAULT_SLOT_8_BIT_CONTROL): New macro.
- (CHAR_TABLE_DEFAULT_SLOT_8_BIT_GRAPHIC): New macro.
-
- * alloc.c (make_sub_char_table): Argument changed to initial
- value of the slots.
-
- * data.c (Faref): Handle special slots used as default values of
- ascii, eight-bit-control, eight-bit-control. Don't ignore a
- default value set for a group of characters.
- (Faset): Signal an error if IDXVAL is not a valid character code.
- Make a sub-chartable with correct initial value.
-
- * fns.c (Fset_char_table_range): Don't set slots used as default
- values for ascii, eight-bit-control, eight-bit-graphic.
- Don't call Faref with charset-id.
- (Fset_char_table_default): Document how to treat normal character
- argument. Handle special slots used as default values of ascii,
- eight-bit-control, eight-bit-control. Make a sub chartable if
- necessary.
-
-2005-04-20 Kenichi Handa <handa@m17n.org>
-
- * search.c (boyer_moore): Fix previous change.
-
-2005-04-19 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (setup_for_ellipsis): Reset saved_face_id to use default
- face unless last visible char and first invisible char have the
- same face. Also use default face if saved_face_id is undefined.
-
-2005-04-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macgui.h (MacFontStruct): Remove member `fontname'. Add member
- `full_name'.
- [TARGET_API_MAC_CARBON] (MacFontStruct): Use type int for
- mac_scriptcode member.
-
- * macterm.c (Qbig5, Qcn_gb, Qsjis, Qeuc_kr): Remove variables.
- (syms_of_mac): Don't initialize them.
- (Vmac_charset_info_alist): New variable.
- (syms_of_mac): Defvar it.
- (create_text_encoding_info_alist): New function.
- (decode_mac_font_name, mac_to_x_fontname)
- (x_font_name_to_mac_font_name, init_font_name_table): Don't hard
- code the correspondence among XLFD charsets, Mac script codes, and
- Emacs coding systems. Use Vmac_charset_info_alist and result of
- create_text_encoding_info_alist instead.
- (init_font_name_table) [TARGET_API_MAC_CARBON]: Use Font Manager
- routines also on Mac OS Classic.
- (init_font_name_table) [!TARGET_API_MAC_CARBON]:
- Use add_font_name_table_entry.
- (mac_do_list_fonts): Regard 0 in XLFD scaleble fields as
- specified. Derive unspecified scalable fields from specified one.
- (x_list_fonts): Consider Valternate_fontname_alist.
- (kDefaultFontSize): Change value from 9 to 12.
- (XLoadQueryFont): Get decoded font family, font face, and charset
- from x_font_name_to_mac_font_name. Set full name of loaded font.
- (mac_unload_font): Free `full_name' member.
- (x_load_font): Don't try XLoadQueryFont if x_list_fonts returns
- NULL. Copy full_name member of struct MacFontStruct to that of
- struct font_info.
-
-2005-04-19 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (handle_stop): Set saved_face_id to current face if
- selective_display_ellipsis_p so ellipsis will be shown in same
- face as preceding text.
- (setup_for_ellipsis): Don't set saved_face_id here.
- (next_element_from_display_vector): Default to saved_face_id.
-
- * fns.c (Fsafe_get): New function.
- (syms_of_fns): Defsubr it.
-
- * lisp.h (Fsafe_get): EXFUN it.
-
- * xfaces.c (resolve_face_name): Use Fsafe_get to avoid redisplay
- loops in case of bad face property lists. Limit number of face
- alias lookups to 10 (in case of face alias loops).
-
-2005-04-18 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct glyph_row): New member overlay_arrow_bitmap.
- It replaces the corresponding member from struct window, as a
- window may now show multiple overlay arrows.
- Remove member overlay_arrow_p, superseeded by overlay_arrow_bitmap.
-
- * dispnew.c (row_equal_p, update_window_line, scrolling_window):
- Compare overlay_arrow_bitmap than overlay_arrow_p members.
-
- * fringe.c (draw_fringe_bitmap): Use overlay_arrow_bitmap from row
- rather than from window.
- (update_window_fringes): Compare overlay_arrow_bitmap rather than
- overlay_arrow_p members.
- (Ffringe_bitmaps_at_pos): Return fringe overlay_arrow_bitmap name
- if not default.
-
- * window.h (struct window): Remove member overlay_arrow_bitmap.
-
- * window.c (make_window): Don't initialize overlay_arrow_bitmap.
-
- * xdisp.c (overlay_arrow_string_or_property): Remove PBITMAP arg.
- Calls changed. Don't check for overlay-arrow-bitmap property here.
- (overlay_arrow_at_row): Remove PBITMAP arg. Instead, if left
- fringe is present, return Lisp integer for bitmap (or -1 for default).
- Fix value of overlay-arrow-bitmap property to be a symbol, use
- lookup_fringe_bitmap to parse it.
- (display_line): Change call to overlay_arrow_at_row. Store integer
- return value as overlay bitmap in row rather than window.
- Only show overlay arrow if row displays text, or if no other overlay
- arrow is seen in window (if overlay marker is at point-max).
-
-2005-04-18 Thien-Thi Nguyen <ttn@gnu.org>
-
- * xfaces.c (realize_x_face) [!HAVE_WINDOW_SYSTEM]: Return NULL.
-
-2005-04-18 Lute Kamstra <lute@gnu.org>
-
- * lread.c (Vloads_in_progress): Static.
- * fns.c (Vloads_in_progress): Remove extern.
- (load_in_progress): Add extern.
- (Frequire): Use load_in_progress instead of Vloads_in_progress.
-
-2005-04-18 Thien-Thi Nguyen <ttn@gnu.org>
-
- * xmenu.c (Fx_popup_menu): Initialize error_name to NULL.
-
-2005-04-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (XTread_socket): Don't beep on keyboard input even if
- no frame is visible.
-
-2005-04-16 Dan Nicolaescu <dann@ics.uci.edu>
-
- * term.c (struct keys): Add support for shifted keys.
-
-2005-04-16 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (with_echo_area_buffer): Delete WHICH < 0 case.
- (set_message): Call with_echo_area_buffer with WHICH = 0.
- (set_message_1): Erase the echo area buffer first thing.
- (echo_area_display): Don't clear echo_message_buffer.
-
-2005-04-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * Makefile.in (mac.o): Depend on charset.h and coding.h.
-
- * mac.c: Include charset.h and coding.h.
- [TARGET_API_MAC_CARBON] (Qutf_8): Remove extern.
- [TARGET_API_MAC_CARBON] (cfstring_create_with_string): New function.
- [TARGET_API_MAC_CARBON] (Fmac_get_preference): Use it.
-
- * macfns.c [TARGET_API_MAC_CARBON] (Fx_file_dialog): Likewise.
-
- * image.c [MAC_OSX] (image_load_quartz2d): Likewise.
-
- * macterm.c (x_autoselect_window_p): Remove variable.
- (last_window): New variable.
- (XTreassert_line_highlight, x_change_line_highlight):
- Remove declarations.
- (mac_focus_changed, x_detect_focus_change): New functions and
- declarations.
- (XTextExtents16, front_emacs_window): Remove function.
- (mac_focus_frame): New function.
- (XTmouse_position, do_menu_choice, do_zoom_window, XTread_socket)
- (mac_check_for_quit_char): Use it instead of front_emacs_window.
- (x_scroll_bar_report_motion): Obtain window from control owner.
- (x_make_frame_invisible): Set window manager size hint.
- (do_mouse_moved): Remove function.
- (XTread_socket): Move its contents here. Generate select-window
- event on mouse movement if needed. Use x_detect_focus_change on
- activate/deactivate events. Don't deiconify frame or invalidate
- window rectangle when dnd items are dropped.
- Don't activate/deactivate root control.
- (frame_highlight, frame_unhighlight): Activate/deactivate root
- control here.
- (syms_of_macterm): Delete DEFVAR_BOOL for x_autoselect_window_p.
-
- * macterm.h (cfstring_create_with_string) [TARGET_API_MAC_CARBON]:
- New extern.
-
-2005-04-15 Luc Teirlinck <teirllm@auburn.edu>
-
- * Makefile.in: Define new macro TOOLTIP_SUPPORT.
- (lisp): Use it.
- (SOME_MACHINE_LISP): Add tooltip.
-
-2005-04-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c [!TARGET_API_MAC_CARBON]: Include MacLocales.h.
- Don't include TextEncodingConverter.h.
- (mac_system_script_code, Vmac_system_locale): New variables.
- (syms_of_mac): Defvar them.
- (mac_get_system_locale): New function.
-
- * macfns.c (x_set_name, x_set_title) [!TARGET_API_MAC_CARBON]:
- Use ENCODE_SYSTEM to encode title bar string.
- (x_create_tip_frame): Apply 2005-03-18 change for xfns.c.
- (Fx_file_dialog) [TARGET_API_MAC_CARBON && !MAC_OSX]:
- Use CFStringGetSystemEncoding to get system default string encoding.
-
- * macterm.c [!TARGET_API_MAC_CARBON]: Don't include
- TextEncodingConverter.h.
-
-2005-04-13 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (syms_of_macterm): Remove redundant definition of
- mac-pass-control-to-system.
-
-2005-04-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (Fset_window_configuration): Be careful when you choose
- among several possible points for the new_current_buffer.
-
-2005-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c (poll_for_input) [SYNC_INPUT]: Don't call
- poll_for_input_1. Set interrupt_input_pending to 1 instead.
- (Qlanguage_change) [MAC_OS]: New variable.
- (syms_of_keyboard) [MAC_OS]: Intern and staticpro it.
- (kbd_buffer_get_event) [MAC_OS]: Make event for LANGUAGE_CHANGE_EVENT.
-
- * macterm.c (mac_keyboard_text_encoding)
- (current_mac_keyboard_text_encoding): Remove variables.
- (XTread_socket): Store language-change event if keyboard script change
- is detected. Don't convert input to `mac_keyboard_text_encoding'.
- (syms_of_macterm): Delete DEFVAR_INT for mac-keyboard-text-encoding.
-
- * termhooks.h (enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
-
-2005-04-10 Richard M. Stallman <rms@gnu.org>
-
- * emacs.c (standard_args): Rename --bare-bones to --quick.
- Add -D aka --basic-display.
-
- * buffer.c (Fmake_indirect_buffer): Clear out some local variables.
-
-2005-04-09 Richard M. Stallman <rms@gnu.org>
-
- * keymap.c (where_is_internal): Convert a string used as event type
- into "(any string)".
-
- * lread.c (Vloads_in_progress): Not static.
- * fns.c (Vloads_in_progress): Add extern.
- (Frequire): Don't do LOADHIST_ATTACH if Vloads_in_progress is nil.
-
-2005-04-09 Thien-Thi Nguyen <ttn@surf.glug.org>
-
- * dispnew.c (mirror_line_dance): Avoid crash if W2 is null.
-
-2005-04-09 Lute Kamstra <lute@gnu.org>
-
- * print.c (PRINTPREPARE): Check if the marker PRINTCHARFUN is
- within the accessible part of the buffer.
-
-2005-04-09 Kim F. Storm <storm@cua.dk>
-
- * lread.c (readevalloop): Add args START and END as region in
- current buffer to read. Callers changed.
- When specified, narrow to this region only when reading,
- not during eval. Track next point to read from during eval.
- Also restore point to "real" buffer position before eval.
- (Feval_region): Don't save excursion and restriction here, and
- don't narrow to region. Just pass region to readevalloop.
- Note: Point is now preserved even when PRINTFLAG is nil.
-
-2005-04-08 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (syms_of_xdisp): Init overlay-arrow-string to "=>".
-
-2005-04-06 Kim F. Storm <storm@cua.dk>
-
- * emacs.c (standard_args): Add -Q, --bare-bones, -bare-bones.
-
-2005-04-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (cfdate_to_lisp): Add `const' for variable `epoch_gdate'.
- (Fmac_get_preference): Doc fix.
-
- * macfns.c (Fx_create_frame, x_create_tip_frame):
- Add "fontset-mac" to fallback font/fontsets.
-
-2005-04-04 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (Fgarbage_collect): Call CHECK_CONS_LIST before and after gc.
-
- * eval.c (Ffuncall): Always call CHECK_CONS_LIST on entry.
- Call it again after autoload.
-
-2005-04-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling
- mallopt.
-
- * ralloc.c (r_alloc_init): Ditto.
-
-2005-04-01 Kenichi Handa <handa@m17n.org>
-
- * lisp.h (Vascii_upcase_table, Vascii_canon_table)
- (Vascii_eqv_table): Extern them.
-
- * casetab.c (set_case_table): If standard is nonzero, setup
- Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table.
-
- * search.c (looking_at_1): Use current_buffer->case_canon_table,
- not DOWNCASE_TABLE.
- (string_match_1): Likewise.
- (fast_c_string_match_ignore_case): Use Vascii_canon_table, not
- Vascii_downcase_table.
- (fast_string_match_ignore_case): Likewise.
- (search_buffer): Fix checking of boyer-moore usability.
- (boyer_moore): Calculate translate_prev_byte1/2/3 in advance.
- No need of tranlating characters in PAT. Fix calculation of
- simple_translate.
-
-2005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap.
- (x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it.
- Use XtNtopShadowPixel and XtNbottomShadowPixel.
- (x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't
- really work and that breaks with some versions of Xaw3d.
-
-2005-03-31 Kenichi Handa <handa@m17n.org>
-
- * coding.c (syms_of_coding): Fix previous change.
-
-2005-03-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (search_embedded_absfilename): Fix last change.
-
-2005-03-25 Kenichi Handa <handa@m17n.org>
-
- * coding.c (syms_of_coding): Suggest to use set-coding-category in
- the docstring of coding-category-list.
-
-2005-03-31 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (Qmouse_fixup_help_message): New var.
- (syms_of_keyboard): Intern and staticpro it.
- (show_help_echo): Apply mouse-fixup-help-message to help string.
-
-2005-03-30 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (display_line): Allow multiple overlay arrows in window.
-
-2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP.
- (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p.
- (Ffile_name_absolute_p): Use it.
- (search_embedded_absfilename): New fun, extracted from
- Fsubstitute_in_file_name. Use file_name_absolute_p.
- Free the pw data after use.
- (Fsubstitute_in_file_name): Use it.
- After cutting a prefix, re-check file-name-handler.
-
-2005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se>
-
- * w32term.h (x_output): Add focus_state.
-
- * w32term.c (x_focus_changed, w32_detect_focus_change): New functions.
- (w32_read_socket) <WM_SETFOCUS>: Call w32_detect_focus_change.
-
-2005-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * minibuf.c (Fminibuffer_complete_and_exit, Fself_insert_and_exit):
- Use Fexit_minibuffer.
- (Fexit_minibuffer): Mark it as no-return, deactivate the mark.
-
-2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * dired.c (Ffile_attributes): Add a missing gcpro.
-
- * alloc.c (make_number): The arg can be bigger than `int'.
- * lisp.h (make_number): Make prototype more precise.
-
- * process.c, dired.c (Vfile_name_coding_system)
- (Vdefault_file_name_coding_system):
- * callproc.c (Vdoc_file_name, Vfile_name_coding_system)
- (Vdefault_file_name_coding_system): Remove unused declarations.
-
-2005-03-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (create_and_show_popup_menu): Just remove menu and return
- if it failed to pop up (Gnome "show pointer on ctrl" option makes
- menus fail to pop up).
-
-2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xdisp.c (get_next_display_element): Also use `\ ' & `\-' for latin-9.
- Just prepend a backslash without replacing the NBSP by an SPC.
-
-2005-03-22 Kim F. Storm <storm@cua.dk>
-
- * xfaces.c (lookup_derived_face): Add arg SIGNAL_P.
- * dispextern.h (lookup_derived_face): Fix prototype.
- * msdos.c (XMenuActivate): Fix call to lookup_derived_face.
-
- * xdisp.c (handle_single_display_spec): Derive left-fringe and
- right-fringe face from fringe face.
-
- * fringe.c (draw_fringe_bitmap_1, Fset_fringe_bitmap_face):
- Derive face from fringe face.
-
-2005-03-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xrdb.c (x_load_resources): Undo previous change (2005-03-18).
-
-2005-03-22 David Kastrup <dak@gnu.org>
-
- * textprop.c (Fnext_char_property_change)
- (Fprevious_char_property_change): Allow marker as limit.
- (Fnext_single_char_property_change)
- (Fprevious_single_char_property_change): Check that limit is a
- number in strings.
- (Fnext_single_char_property_change): Coerce position to integer.
- (Fprevious_single_char_property_change): Same here.
-
-2005-03-21 Thien-Thi Nguyen <ttn@gnu.org>
-
- * s/openbsd.h (LD_SWITCH_SYSTEM_tmp): Define if undefined.
-
-2005-03-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * frame.c (Fignore_event): Remove.
- (syms_of_frame): Don't defsubr it.
-
- * keyboard.c (keys_of_keyboard): Just use `ignore' instead of the
- redundant `ignore-event'.
-
-2005-03-19 Eli Zaretskii <eliz@gnu.org>
-
- * unexec.c (write_segment, unexec): Move these functions to avoid
- forward references (which cause errors with "gcc -gcoff").
-
-2005-03-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_create_tip_frame): Remove setting of Vx_resource_name so
- that it doesn't become "tooltip". The specbind is enough.
-
- * xrdb.c (x_load_resources): Use different char *helv when I18N
- is present.
-
-2005-03-17 Kenichi Handa <handa@m17n.org>
-
- * coding.c (syms_of_coding): Docstring of coding-category-list fixed.
-
-2005-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xfaces.c (x_update_menu_appearance) [HAVE_X_I18N]:
- Use xic_create_fontsetname even for non-Motif menus.
- Don't forget to free the fontsetname.
-
- * xfns.c (xic_create_fontsetname): Add a final catch-all font pattern.
-
-2005-03-17 Richard M. Stallman <rms@gnu.org>
-
- * dispnew.c (mirror_line_dance): Set W2 according to FRAME_FROM.
-
- * fileio.c (Fcopy_file, Frename_file, Fadd_name_to_file)
- (Fmake_symbolic_link): Use G to read the new file name.
-
- * callint.c (Finteractive): Document G option.
- (Fcall_interactively): Implement G option.
-
- * buffer.c (buffer_lisp_local_variables): New function,
- broken out from Fbuffer_local_variables.
- (clone_per_buffer_values): Use buffer_lisp_local_variables.
-
-2005-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xfns.c (xic_create_fontsetname): Add `motif' argument.
- Always return a freshly allocated string.
- (xic_create_xfontset): Adjust call.
-
- * xfaces.c (x_update_menu_appearance) [USE_MOTIF]:
- Use xic_create_fontsetname to create a fontset so utf-8 locales work.
- (dump_realized_face): Fix warning.
-
- * emacs.c (Fkill_emacs): YAILOM.
-
- * frame.c (Fignore_event): Fix ancient obscure C-u handling bug.
-
-2005-03-17 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (HASHKEY_TERMINAL): Remove.
- (HASHKEY_MAX_NID): New macro.
- (xrm_q_get_resource_1): Rename from xrm_q_get_resource. Add extra
- argument.
- (xrm_q_get_resource): Call xrm_q_get_resource_1 with extra argument.
- (xrm_create_database, xrm_q_put_resource)
- (xrm_merge_string_database, xrm_q_get_resource_1)
- (xrm_q_get_resource): Change resource database representation so
- that it may not use multiple hash tables for a single database.
- [TARGET_API_MAC_CARBON] (xrm_cfproperty_list_to_value): YAILOM.
-
-2005-03-16 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xmenu.c (ENCODE_MENU_STRING) [HAVE_X_I18N]: Use ENCODE_SYSTEM.
-
- * coding.h (ENCODE_SYSTEM, DECODE_SYSTEM) [!WINDOWSNT]: Use the
- locale-coding-system, as was already done for WINDOWSNT.
-
- * keyboard.c (read_char): Only do the 7-bit-meta -> 27-bit-meta
- translation for chars in the 0-255 range.
-
-2005-03-16 Lute Kamstra <lute@gnu.org>
-
- * floatfns.c (Ffloor): Doc fix.
-
-2005-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c: Include macterm.h instead of directly including Carbon.h.
- [TARGET_API_MAC_CARBON] (Qstring, Qnumber, Qboolean, Qdate, Qdata)
- (Qarray, Qdictionary): New variables.
- (syms_of_mac) [TARGET_API_MAC_CARBON]: Initialize them.
- [TARGET_API_MAC_CARBON] (Qutf_8): Add extern.
- [TARGET_API_MAC_CARBON] (DECODE_UTF_8): New macro.
- [TARGET_API_MAC_CARBON] (struct cfdict_context): New struct used
- in callback for CFDictionaryApplyFunction.
- [TARGET_API_MAC_CARBON] (cfdata_to_lisp, cfstring_to_lisp)
- (cfnumber_to_lisp, cfdate_to_lisp, cfboolean_to_lisp)
- (cfobject_desc_to_lisp, cfdictionary_add_to_list)
- (cfdictionary_puthash, cfproperty_list_to_lisp): New functions.
- [TARGET_API_MAC_CARBON] (Fmac_get_preference): New function.
- (syms_of_mac) [TARGET_API_MAC_CARBON]: Defsubr it.
- (P, LOOSE_BINDING, SINGLE_COMPONENT, HASHKEY_TERMINAL): New macro.
- (skip_white_space, parse_comment, parse_include_file)
- (parse_binding, parse_component, parse_resource_name, parse_value)
- (parse_resource_line, xrm_create_database, xrm_q_put_resource)
- (xrm_merge_string_database, xrm_q_get_resource, xrm_get_resource)
- (xrm_cfproperty_list_to_value, xrm_get_preference_database):
- New functions.
-
- * macfns.c (mac_get_rdb_resource): Remove function.
- (x_get_string_resource): Use xrm_get_resource.
-
- * macgui.h (XrmDatabase): Typedef to Lisp_Object.
-
- * macterm.c (x_list_fonts): FONT-LIST-CACHE is now cadr part of
- name_list_element.
- (mac_make_rdb): Create resource database from preferences and
- argument string.
- (mac_term_init): Save resource database to cddr part of
- name_list_element.
-
- * macterm.h (xrm_merge_string_database, xrm_get_resource)
- (xrm_get_preference_database): Add externs.
- [TARGET_API_MAC_CARBON] (cfdata_to_lisp, cfstring_to_lisp)
- (cfnumber_to_lisp, cfdate_to_lisp, cfboolean_to_lisp)
- (cfobject_desc_to_lisp, cfproperty_list_to_lisp): Likewise.
-
- * process.c (init_process): Change `#ifdef DARWIN' to `#if
- defined (DARWIN) || defined (MAC_OSX)'
-
- * s/darwin.h (DARWIN): Don't define.
-
-2005-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (Qhyper, Qsuper, Qmeta, Qalt, Qctrl, Qcontrol, Qshift):
- Remove unused variables.
- (syms_of_macfns): Don't initialize them. Likewise for
- Qface_set_after_frame_default. Defvar and initialize
- Vx_window_horizontal_drag_shape.
- (x_set_mouse_color): Change mouse pointer shape.
- (mac_window) [!MAC_OSX]: Create root control.
- (Fx_create_frame): Remove initializations of mouse pointer shapes.
- (hourglass_started): New function (from xfns.c).
- (start_hourglass, cancel_hourglass): Put function body in #ifdef
- MAC_OSX.
- (show_hourglass) [TARGET_API_MAC_CARBON]: Create progress
- indicator for each non-tooltip frame if needed, and show it.
- (hide_hourglass) [TARGET_API_MAC_CARBON]: Hide progress indicators.
-
- * macgui.h [!TARGET_API_MAC_CARBON]: Include Appearance.h and
- Controls.h. Use ThemeCursor instead of CursHandle.
-
- * macterm.c (activate_scroll_bars, deactivate_scroll_bars):
- Remove functions and declarations.
- (mac_set_colors): Take argument for saving background color.
- All callers changed.
- (XDrawLine, XClearArea, mac_draw_bitmap, XFillRectangle)
- (mac_draw_rectangle, mac_draw_string_common): Save and Restore
- background color.
- (x_update_end, mac_do_track_drag): Don't reset background color.
- (mac_define_frame_cursor) [!TARGET_API_MAC_CARBON]:
- Use SetThemeCursor.
- (x_set_window_size) [TARGET_API_MAC_CARBON]: Move progress
- indicator control to the upper-right corner of the window.
- (arrow_cursor) [!TARGET_API_MAC_CARBON]: Remove variable.
- (do_init_managers) [!TARGET_API_MAC_CARBON]: Don't initialize it.
- (do_window_update): Update controls after updating content area.
- (mac_handle_window_event): Remove unused extern.
- (XTread_socket): Check both control handle and control part code
- to determine whether a scroll bar is clicked. Activate/deactivate
- root control instead of contained scroll bar controls.
- (make_mac_terminal_frame): Use ThemeCursor constants.
-
- * macterm.h (struct mac_output) [TARGET_API_MAC_CARBON]:
- New member hourglass_control.
- (HOURGLASS_WIDTH, HOURGLASS_HEIGHT): New defines.
- (activate_scroll_bars, deactivate_scroll_bars): Remove declarations.
-
-2005-03-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (keycode_to_xkeysym_table): Change mapping so that it
- coincides with that in Apple X11 except `clear', `enter' on
- laptops, and fn + `enter' on laptops.
-
-2005-03-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xmenu.c (ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
- (list_of_panes, list_of_items, Fx_popup_menu): Use XCAR/XCDR.
- (digest_single_submenu, xmenu_show): Use ENCODE_MENU_STRING.
-
- * xfns.c (xic_defaut_fontset): New constant.
- (xic_create_fontsetname): New function.
- Extracted from create_frame_xic. Try to generate a slightly
- better fontset.
- (xic_create_xfontset): Use it.
- (create_frame_xic): Simplify.
-
-2005-03-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (Fmake_symbolic_link): Fix last change.
-
-2005-03-11 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Frename_file, Fadd_name_to_file)
- (Fmake_symbolic_link): If NEWNAME or LINKNAME is a directory,
- expand the basename of FILE relative to it.
-
-2005-03-11 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Finsert_file_contents): Call Fcheck_coding_system
- before calling setup_coding_system so that autoloading of a coding
- system work.
-
-2005-03-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (hourglass_started): New function.
-
- * dispextern.h: Declare hourglass_started.
-
- * keyboard.c (Fexecute_extended_command): Restart hourglass
- after call to Fcompleting_read if already started.
-
- * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
- GTK main loop is entered in xterm.c, thus doing the redraw.
-
-2005-03-10 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (pos_visible_p): Fix X value in last line of buffer.
-
-2005-03-08 Kenichi Handa <handa@m17n.org>
-
- * frame.c (x_set_font): Call set_default_ascii_font if an
- available font is found.
-
- * fontset.c (set_default_ascii_font): New function.
- (syms_of_fontset): Don't set FONTSET_ASCII (Vdefault_fontset) here.
-
- * fontset.h (set_default_ascii_font): Extern it.
-
-2005-03-07 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (CLEAR_IMAGE_CACHE_COUNT): New const.
- (clear_image_cache_count): New var.
- (redisplay_internal): Don't clear face and image caches in the
- middle of redisplay; do it afterwards.
-
- * blockinput.h (TOTALLY_UNBLOCK_INPUT): Avoid dangling else.
-
- * xdisp.c (notice_overwritten_cursor): Check that phys_cursor.vpos
- is valid. If not, clear phys_cursor_on_p and return.
-
-2005-03-07 Andreas Schwab <schwab@suse.de>
-
- * blockinput.h (UNBLOCK_INPUT_TO): Always call UNBLOCK_INPUT.
-
-2005-03-06 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (Ftop_level): Let Fthrow deal with UNBLOCK_INPUT.
-
- * eval.c (unwind_to_catch): Use UNBLOCK_INPUT_TO.
- (Feval, Ffuncall): Use CHECK_CONS_LIST.
-
- * lisp.h (CHECK_CONS_LIST): New macro (two definitions).
-
- * blockinput.h (UNBLOCK_INPUT_TO): New macro.
- (TOTALLY_UNBLOCK_INPUT): Handle a pending signal if any.
-
-2005-03-05 Juri Linkov <juri@jurta.org>
-
- * emacs.c (USAGE1): Replace Info node name "command arguments"
- with "emacs invocation".
- (USAGE3): Fix usage of `--color=MODE' which actually doesn't
- allow arguments `--color' and `MODE' to be separated by space.
- Add --no-blinking-cursor, -nbc.
- (standard_args): Add -nbc, --no-blinking-cursor.
-
-2005-03-04 Thien-Thi Nguyen <ttn@gnu.org>
-
- * s/vms.h: Define NO_HYPHENS_IN_FILENAMES.
- * s/vms4-4.h, s/vms5-5.h: Undefine NO_HYPHENS_IN_FILENAMES.
- * fileio.c (Fexpand_file_name) [VMS]:
- Use NO_HYPHENS_IN_FILENAMES, not VMS4_4.
- * doc.c (munge_doc_file_name) [VMS]: Likewise.
- (Fsnarf_documentation): Call munge_doc_file_name.
-
-2005-03-04 Thien-Thi Nguyen <ttn@gnu.org>
-
- * s/vms.h (FILE_SYSTEM_CASE): New macro.
- * fileio.c (Fexpand_file_name) [VMS]: Don't upcase the name
- "manually"; this is now handled generally via FILE_SYSTEM_CASE.
-
-2005-03-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * emacs.c (main): Change `#ifdef HAVE_CARBON' to `#if
- defined (MAC_OSX) && defined (HAVE_CARBON)'.
-
- * image.c [!MAC_OSX && TARGET_API_MAC_CARBON]: Include QuickTime.h.
-
- * mac.c [!MAC_OSX && HAVE_CARBON]: Include Carbon.h.
- [!MAC_OSX] (select) [TARGET_API_MAC_CARBON]: Use ReceiveNextEvent.
- (posix_pathname_to_fsspec, fsspec_to_posix_pathname): New functions.
- (mac_clear_font_name_table): Move extern to macterm.h.
-
- * macfns.c (install_window_handler): Move extern to macterm.h.
- (Fx_file_dialog): Check STRINGP (default_filename) to see it is
- valid. Don't check !NILP (dir) because it is already checked with
- CHECK_STRING.
- (Fx_file_dialog) [!MAC_OSX]: Use FSSpec instead of FSRef for
- specifying the default location and obtaining the selected filename.
-
- * macgui.h [!MAC_OSX && HAVE_CARBON]: Include Carbon.h.
-
- * macmenu.c [TARGET_API_MAC_CARBON]: Don't include headers that
- are included via Carbon.h.
-
- * macterm.c [TARGET_API_MAC_CARBON && !MAC_OSX]:
- Define USE_CARBON_EVENTS to 1.
- (qd) [__MRC__ && TARGET_API_MAC_CARBON]: Don't declare.
- (x_free_frame_resources): Call remove_window_handler for
- non-tooltip windows.
- [TARGET_API_MAC_CARBON]: Don't include headers that are included
- via Carbon.h.
- [TARGET_API_MAC_CARBON] (mac_do_track_dragUPP)
- (mac_do_receive_dragUPP): New variables.
- (mac_handle_service_event, init_service_handler): Put declarations
- and definitions in #ifdef MAC_OSX.
- (install_window_handler) [TARGET_API_MAC_CARBON]: Create UPPs for
- drag-and-drop handler functions and register them.
- (remove_window_handler): New function.
- (do_ae_open_documents, mac_do_receive_drag) [!MAC_OSX]:
- Use fsspec_to_posix_pathname.
- (main): Change #if !TARGET_API_MAC_CARBON to #ifdef MAC_OS8.
- (XTread_socket) [!MAC_OSX]: Don't pass keyboard events to TSM.
- [MAC_OS8] (make_mac_terminal_frame) [TARGET_API_MAC_CARBON]:
- Set default cursors.
- (mac_initialize) [USE_CARBON_EVENTS && !MAC_OSX]: Don't call
- init_service_handler or init_quit_char_handler.
- (mac_initialize) [!MAC_OSX]: Don't call MakeMeTheFrontProcess.
-
- * macterm.h (install_window_handler, remove_window_handler)
- (posix_pathname_to_fsspec, fsspec_to_posix_pathname)
- (mac_clear_font_name_table): New externs.
-
-2005-03-03 Thien-Thi Nguyen <ttn@gnu.org>
-
- * fileio.c (FILE_SYSTEM_CASE): Define macro if not already defined.
- (Ffile_name_directory): Use FILE_SYSTEM_CASE unconditionally.
- (Fexpand_file_name): Likewise.
-
-2005-03-03 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs.c (Fkill_emacs): Use EXIT_SUCCESS;
- no longer special-case VMS. Add bogus return value.
-
-2005-03-02 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (XASSERTS): Define to 0 if not already defined.
- (xassert) [!XASSERTS]: Define dummy version.
-
-2005-03-02 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (redisplay_window): YABX (yet another bogus xassert).
- Reported by David Kastrup.
-
-2005-03-01 Ehud Karni <ehud@unix.mvs.co.il>
-
- * xdisp.c (get_next_display_element): Fix control and escape
- glyph from display vector.
-
-2005-03-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keyboard.c (Fposn_at_x_y): Check integerness of X and Y.
-
-2005-02-27 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (fast_find_position): Rename END to BEG.
- (syms_of_xdisp) <menu-bar-update-hook>: Doc fix.
-
-2005-02-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_resize_outer_widget): Remove unneeded call to
- gtk_window_resize and x_wm_set_size_hint.
-
-2005-02-25 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (OVERLAY_STRING_CHUNK_SIZE): Increase from 3 to 16.
-
- * xdisp.c (init_from_display_pos): Don't read past end of
- it->overlay_strings array.
-
-2005-02-25 Stephan Stahl <stahl@eos.franken.de> (tiny change)
-
- * buffer.c (syms_of_buffer): Fix typo.
-
-2005-02-23 Lute Kamstra <lute@gnu.org>
-
- * buffer.c (Foverlay_buffer): Doc fix.
-
-2005-02-22 Kim F. Storm <storm@cua.dk>
-
- * minibuf.c (Ftry_completion, Fall_completions): Allow both string
- and symbol keys in alists and hash tables.
-
- * xdisp.c (fast_find_position): Fix search for start of overlay.
-
-2005-02-21 Kim F. Storm <storm@cua.dk>
-
- * window.c (window_scroll_pixel_based): When scrolling backwards,
- handle partial visible line at end of window even when we hit PT.
-
-2005-02-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.h: Declare Fcurrent_active_maps, used in doc.c.
-
-2005-02-21 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_vertically_backward): Eliminate two xasserts.
- I think those asserts are bogus if buffer contains invisible text
- or images.
-
-2005-02-21 David Kastrup <dak@gnu.org>
-
- * gtkutil.c (xg_create_frame_widgets): UNBLOCK_INPUT on error.
-
-2005-02-20 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (pos_visible_p): Be sure to move to the specified
- position. Always get the full ascent / descent of the
- corresponding row, to return reliable rtop and rbot values.
- (back_to_previous_visible_line_start): Fix 2005-01-18 change.
- Must look one character back, as back_to_previous_line_start
- returns position after the newline.
- (move_it_vertically_backward): Fix heuristic for when to move further
- back in case line_height * 2/3 is larger than window height.
- (cursor_row_fully_visible_p): Rename make_cursor_line_fully_visible_p
- as it does not do anything anymore. Add arg current_matrix_p to
- use current matrix rather than desired matrix when set.
- (try_cursor_movement): Don't scroll to make cursor row fully
- visible if cursor didn't move. This avoids unexpected recentering
- in case of blinking cursor or accepting process output.
- Use current matrix to check cursor row visibility.
- (redisplay_window): Fix whether to recenter or move to top in case
- cursor line is taller than window height.
- (find_first_unchanged_at_end_row): Stop search if we reach a row
- which not enabled (instead of abort).
-
-2005-02-18 Kim F. Storm <storm@cua.dk>
-
- * xfaces.c (Finternal_set_lisp_face_attribute): Allow :color property
- to be nil in a :box attribute value list; customize prints that
- as lisp value when no box color is specified.
-
- * .gdbinit (pitx, pit): Pretty print display iterator.
- (prowx, prow): Pretty print glyph row.
- (pcursorx, pcursor): Pretty print a window cursor.
- (pwinx, pwin): Pretty print struct window.
-
-2005-02-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (BLOCK_BYTES): Harmless typo.
-
-2005-02-17 Andreas Schwab <schwab@suse.de>
-
- * xfns.c (hack_wm_protocols): Use correct type for last parameter
- of XGetWindowProperty to avoid aliasing issues.
- (Fx_window_property): Likewise.
-
- * xselect.c (Fx_disown_selection_internal): Use union of struct
- input_event and struct selection_input_event to avoid aliasing issues.
-
- * xterm.c (handle_one_xevent): Use union of struct input_event and
- struct selection_input_event to avoid aliasing issues.
- (SET_SAVED_MENU_EVENT): Adapt reference to inev.
-
-2005-02-17 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (enum it_method): New enum.
- (GET_FROM_*): Its members.
- (struct it): Change member method from function pointer to enum.
-
- * xdisp.c (check_it, init_from_display_pos, handle_stop)
- (setup_for_ellipsis, handle_single_display_spec)
- (handle_composition_prop, next_overlay_string)
- (get_overlay_strings, reseat_1, reseat_to_string)
- (next_element_from_ellipsis, BUFFER_POS_REACHED_P)
- (in_display_vector_p, display_line, get_next_display_element):
- Change it->method from function pointer to enum.
- (get_next_element): New array to map it->method to function.
- (get_next_display_element): Use it.
- (set_iterator_to_next): Use switch instead of if/else chain.
-
-2005-02-15 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
-
- * w32select.c: Summary: Thorough rework to implement Unicode
- clipboard operations and delayed rendering.
-
- Drop last_clipboard_text and related code, keep track of
- ownership via clipboard_owner instead. Drop old #if0 sections.
-
- (DEFAULT_LCID, ANSICP, OEMCP, QUNICODE, QANSICP, QOEMCP)
- (clipboard_owner, modifying_clipboard, cfg_coding_system)
- (cfg_codepage, cfg_lcid, cfg_clipboard_type, current_text)
- (current_coding_system, current_requires_encoding)
- (current_num_nls, current_clipboard_type, current_lcid):
- New static variables.
-
- (convert_to_handle_as_ascii, convert_to_handle_as_coded)
- (render, render_all, run_protected, lisp_error_handler)
- (owner_callback, create_owner, setup_config)
- (enum_locale_callback, cp_from_locale, coding_from_cp):
- New local functions.
-
- (term_w32select, globals_of_w32select): New global functions.
-
- (Fw32_set_clipboard_data): Ignore parameter FRAME, use
- clipboard_owner instead. Use delayed rendering and provide
- all text formats. Provide CF_LOCALE if necessary.
-
- (Fw32_get_clipboard_data): Handle CF_UNICODETEXT and
- CF_LOCALE. Fall back to CF_TEXT, if CF_UNICODETEXT is not
- available. Force DOS line-ends for decoding.
-
- (Fx_selection_exists_p): Handle CF_UNICODETEXT.
-
- (syms_of_w32select): Init and register new variables.
-
- * w32.h: Add prototypes for globals_of_w32select and
- term_w32select. Make the neighboring K&R declarations into
- prototypes, too.
-
- * emacs.c: Include w32.h to get function prototypes.
- (main): Call globals_of_w32select.
-
- * w32.c (term_ntproc): Call term_w32select.
-
- * s/ms-w32.h: Guard MSC-specific #pragmas with an #ifdef.
-
-2005-02-16 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (BUFFER_POS_REACHED_P): Return true if pos reached and
- at end of display vector.
-
-2005-02-15 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (get_next_display_element): Fix escape-glyph criterion
- for mode and header lines.
-
- * lread.c (syms_of_lread) <user-init-file>: Doc fix.
-
- * keymap.h (describe_map_tree): Change decl.
-
- * keyboard.c (command_loop_1): Always use safe_run_hooks
- to run Qdeferred_action_function.
-
- * keymap.c (describe_map_tree): New arg MENTION_SHADOW. Calls changed.
- (describe_map, describe_vector): Likewise. When it's 1,
- don't omit shadowed bindings, instead mark them as shadowed.
-
- * doc.c (Fsubstitute_command_keys): Compute list of shadowing maps
- for describe_map_tree. Pass 1 for MENTION_SHADOW.
-
- * data.c (Fsetq_default): Allow no arg case.
-
-2005-02-14 Kenichi Handa <handa@m17n.org>
-
- * coding.c (encode_coding_string): Always return a unibyte string.
- If NOCOPY is nonzero and there's no need of encoding, make STR
- unibyte directly.
-
- * xselect.c (lisp_data_to_selection_data): If OBJ is a non-ASCII
- multibyte string, signal an error instead of aborting.
-
-2005-02-12 Dan Nicolaescu <dann@ics.uci.edu>
-
- * keyboard.c: If HAVE_FCNTL_H include fcntl.h.
-
-2005-02-12 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (expose_window): Don't fix overlaps for mode lines.
-
-2005-02-10 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (try_window_id): Set first_unchanged_at_end_row to NULL
- if it moves outside window or it doesn't display text.
-
-2005-02-09 Kim F. Storm <storm@cua.dk>
-
- * undo.c (Fprimitive_undo): Check that undo function does not
- switch buffer.
-
-2005-02-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (selection_data_to_lisp_data): For the special case
- type == XA_ATOM, data contains array of int, not array of Atom.
- (x_property_data_to_lisp, selection_data_to_lisp_data):
- Comment update: data must be array of int for format == 32.
-
-2005-02-08 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * undo.c (Fprimitive_undo): Check veracity of delta,start,end.
-
-2005-02-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (Fx_change_window_property): Use long array when format is 32.
- (Fx_window_property): If format is 32 and long is bigger than 32 bits,
- convert long array returned from XGetWindowProperty to an int array.
- (x_set_tool_bar_lines): Check that width and height is greater than
- zero before clearing area.
-
- * xselect.c (x_reply_selection_request): Pass long array to
- XChangeProperty so that 64 bit longs are handeled correctly.
- (x_get_window_property): If format is 32 and long is bigger than 32
- bits convert data from XGetWindowProperty from long array to int array.
- (lisp_data_to_selection_data): When the input is a vector and the
- format is 32, allocate a long array even if long is bigger than 32 bits.
- (x_fill_property_data): Use char, short and long as the man page
- for XChangeProperty specifies. This way the data returned is OK for
- both 32 and 64 bit machines.
- (x_handle_dnd_message): Calculate size correctly even for 64 bit
- machines.
- (Fx_send_client_event): Undo change from 2005-02-05,
- x_fill_property_data now handles that case.
-
- * xfns.c (Fx_backspace_delete_keys_p): Add comment about the
- reason for the approach in the code.
-
-2005-02-07 Kim F. Storm <storm@cua.dk>
-
- * undo.c (Fprimitive_undo): Record max one dummmy apply element.
-
-2005-02-06 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (Frun_hook_with_args)
- (Frun_hook_with_args_until_success)
- (Frun_hook_with_args_until_failure): Doc fixes.
-
-2005-02-05 Andreas Schwab <schwab@suse.de>
-
- * sysdep.c (sys_subshell): Properly terminate execlp argument list.
-
-2005-02-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
- the longs in a XClientMessageEvent correctly when long is 64 bits.
-
-2005-02-05 Eli Zaretskii <eliz@gnu.org>
-
- * xfaces.c (face_color_supported_p): Use HAVE_WINDOW_SYSTEM
- instead of HAVE_X_WINDOWS, for non-X windowed sessions.
-
-2005-02-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (menubar_selection_callback): Force out GTK buffered
- events so the menu event comes after them. This is to prevent sit-for
- from exiting on buffered events directly after a menu selection,
- lisp code for Help => About Emacs uses sit-for.
-
- * gtkutil.c (create_menus): Connect selection-done event instead of
- the deactivate event to deactivate_cb. This will make the last
- leave event come before the call to deactivate_cb, so the leave
- event does not make sit-for exit after a menu selection.
-
-2005-02-03 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (build_frame_matrix_from_leaf_window)
- [!GLYPH_DEBUG]: Fix xassert.
-
- * xfaces.c (x_free_gc) [!GLYPH_DEBUG]: Fix xassert.
-
- * xfns.c (unwind_create_frame) [!GLYPH_DEBUG]: Fix xassert.
-
-2005-02-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c: Use MAC_OS_X_VERSION_MAX_ALLOWED to conditionalize by
- the compiling OS version.
-
- * macfns.c (x_create_tip_frame): Likewise.
-
- * macterm.c (mac_draw_string_common, x_make_frame_visible): Likewise.
-
-2005-02-03 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (x_error_quitter): On GCC 3 and up, specify noinline.
-
- * xdisp.c (echo_area_display): Clear echo_message_buffer.
-
- * buffer.c (Fbury_buffer): Doc fix.
-
-2005-02-02 Steven Tamm <steventamm@mac.com>
-
- * macfns.c (unwind_create_frame): Fix compile error due to
- xassert being uncondition, but predicate is.
- * dispnew.c (update_window): Fix compile error due to
- xassert being uncondition, but predicate is.
-
-2005-02-02 Miles Bader <miles@gnu.org>
-
- * dispextern.h (xassert): Enable unconditionally.
-
-2005-02-02 Kim F. Storm <storm@cua.dk>
-
- * undo.c (Fprimitive_undo): Fix dummy apply undo entry.
-
-2005-02-02 Kenichi Handa <handa@m17n.org>
-
- * casefiddle.c (casify_object): Enable changing characters of
- different byte length.
- (casify_region): Fix loop condition, args to replace_range_2, and
- update opoint_byte.
-
- * insdel.c (replace_range_2): Fix bugs in adjusting markers and point.
-
-2005-02-01 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (back_to_previous_visible_line_start): Reset iterator
- stack before calling handle_display_prop.
-
-2005-01-31 Kim F. Storm <storm@cua.dk>
-
- * undo.c (Qapply): New lisp var.
- (syms_of_undo): Intern and staticpro it.
- (Fprimitive_undo): Support formats (apply FUNNAME . ARGS) and
- (apply DELTA BEG END FUNNAME . ARGS) instead of (FUNNAME . ARGS).
-
- * buffer.c (syms_of_buffer) <buffer-undo-list>: Doc fix.
-
-2005-01-30 Jesper Harder <harder@phys.au.dk>
-
- * macterm.c (syms_of_macterm) <mac-reverse-ctrl-meta>
- <mac-emulate-three-button-mouse>: Fix docstring indentation.
-
-2005-01-29 Luc Teirlinck <teirllm@auburn.edu>
-
- * undo.c (syms_of_undo) <undo-outer-limit>: Doc update.
- Increase value to 3 Meg.
-
-2005-01-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (show_hourglass): Use FRAME_X_WINDOW as parent for GTK,
- button events are not received otherwise.
-
-2005-01-29 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer) <buffer-undo-list>: Doc fix.
-
- * undo.c (Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
-
-2005-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (access_keymap): YAILOM.
-
-2005-01-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_phys_cursor_geometry): New function to calculate
- phys cursor position and size for hollow cursor. Position is
- aligned with get_glyph_string_clip_rect and ensures that a hollow
- cursor is shown, even when the actual glyph is not visible.
-
- * dispextern.h (get_phys_cursor_geometry): Add prototype.
-
- * xterm.c (x_clip_to_row): Ensure y >= 0.
- (x_draw_hollow_cursor): Use get_phys_cursor_geometry.
-
- * w32term.c (x_draw_hollow_cursor): Use get_phys_cursor_geometry.
-
- * macterm.c (x_draw_hollow_cursor): Use get_phys_cursor_geometry.
-
-2005-01-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c (x_error_quitter): Add a prototype. Make it static again.
-
-2005-01-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_glyph_string_clip_rect): Always show a cursor
- glyph, even when row is only partially visible and actual cursor
- position is not visible.
-
-2005-01-24 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (x_error_quitter): No longer static, and moved after
- x_error_handler.
-
-2005-01-24 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_by_lines): If we move forward after going too
- far back, cancel move if end position is same as start position.
-
-2005-01-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * dispextern.h (struct glyph_string): New members clip_head and
- clip_tail.
-
- * xdisp.c (get_glyph_string_clip_rect): Restrict horizontal clip
- region to the area between clip_head and clip_tail.
- (draw_glyphs): Record the area that need to be actually redrawn to
- the new variables clip_head and clip_tail when there are
- overhangs. Set values of these variables to the corresponding
- members in struct glyph_string. Refine x coordinates for
- notice_overwritten_cursor using clip_head and clip_tail.
-
- * macgui.h (STORE_XCHARSETSTRUCT): New macro.
-
- * macterm.c (mac_compute_glyph_string_overhangs): Implement with
- QDTextBounds.
- (x_draw_glyph_string): Don't fill the background of the successor
- of a glyph with a right overhang if the successor will draw a cursor.
- (XLoadQueryFont): Obtain font metrics using QDTextBounds.
- (x_redisplay_interface): Add entry for compute_glyph_string_overhangs.
-
-2005-01-24 Kim F. Storm <storm@cua.dk>
-
- * window.c (window_scroll_pixel_based): Fix scrolling in the wrong
- direction if window height was smaller than next-screen-context-lines.
- Now always scroll at least one line in the requested direction.
- Ensure that we actually do scroll backwards when requested to do so.
-
- * xdisp.c (redisplay_window): Only try to make cursor line fully
- visible once (to avoid redisplay loop).
-
-2005-01-23 Kim F. Storm <storm@cua.dk>
-
- * window.c (Fpos_visible_in_window_p): Simplify return value for
- partially visible rows.
- (window_scroll_pixel_based): Adapt to that change.
-
- * window.c (window_scroll_pixel_based): Force moving to next line
- if scrolling doesn't move start point, e.g. if looking at tall image.
-
- * xdisp.c (pos_visible_p): Return 0 if non-interactive.
- Clear last_height before calling line_bottom_y to get real height.
- Fix calculation of y.
-
-2005-01-22 Steven Tamm <steventamm@mac.com>
-
- * s/darwin.h: Removed PTY_ITERATION from here.
- (DARWIN): Define.
-
- * process.c (init_process): Default process-connection-type to
- nil on darwin 6 or less, t if it is 7 or higher. This way the
- broken pty behavior is still allowed on darwin 6 for interactive
- processes for people that know what they are doing.
-
-2005-01-22 Kim F. Storm <storm@cua.dk>
-
- * window.c (auto_window_vscroll_p): New boolean.
- (syms_of_window): DEFVAR_BOOL it.
- (Fpos_visible_in_window_p): Extend return value to include RTOP
- and RBOT values if FULLY is nil.
- (window_scroll_pixel_based): Adjust vscroll for partially visible
- rows if auto_window_vscroll_p is set.
- (Fset_window_vscroll): Do nothing if vscroll is not modified.
-
- * xdisp.c (pos_visible_p): Replace FULLY arg by RTOP and RBOT args
- to return number of partially invisible pixels at top and bottom
- of the dislay row at POS.
-
- * lisp.h (pos_visible_p): Fix prototype.
-
-2005-01-21 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fcopy_file): Doc fix.
-
-2005-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_detach_callback): Remove unused variable bw.
- (xg_get_file_name): Move declaration ofx_use_old_gtk_file_dialog to
- start of function for older compilers.
-
-2005-01-20 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fmessage): If arg is "", return "" (as before).
-
- * keymap.c (access_keymap): Protect from bad value of meta_prefix_char.
-
- * .gdbinit (xgetptr, xgetint, xgettype): Copy $arg0 into a temp
- variable.
-
-2005-01-20 Steven Tamm <steventamm@mac.com>
-
- * editfns.c (Voperating_system_release): Add.
- (init_editfns): Assign new variable operating-system-release
- based on call to uname if available.
- (get_operating_system_release): Add function to
- allow c-level access to operating system release.
-
- * config.h: Regenerated.
-
- * s/darwin.h (PTY_ITERATION): Don't allow PTYs on darwin 6 or less.
- (MIN_PTY_KERNEL_VERSION): Define minimum kernel version for
- using ptys as '7'.
-
-2005-01-20 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (STRING_MARKED_P, VECTOR_MARKED_P): Return boolean.
-
- * xterm.c (x_draw_glyph_string_box): Fix last_x for full width rows.
- Thanks to Chong Yidong <cyd@stupidchicken.com> for debugging this.
-
- * macterm.c (x_draw_glyph_string_box): Likewise.
-
- * w32term.c (x_draw_glyph_string_box): Likewise.
-
- * indent.c (Fvertical_motion): Temporarily disable selective display.
-
-2005-01-19 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Fix :pointer
- image property.
-
- * fns.c (sweep_weak_table): Advance prev pointer when we keep a pair.
-
-2005-01-18 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (fast_find_position): Backtrack to find first row if
- charpos is inside a display overlay that spans multiple lines.
-
-2005-01-18 Kenichi Handa <handa@m17n.org>
-
- * coding.c (decode_coding_iso2022): Translate invalid codes if
- translation-table is specified.
-
-2005-01-18 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (back_to_previous_visible_line_start): Undo 2004-12-28
- change. If handle_display_prop indicates newline is replaced by
- image or text, move back to start of relevant overlay or interval
- and continue scan from there. Simplify.
-
-2005-01-17 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (mode_line_string, marginal_area_string):
- Fix off-by-one error in search for glyph.
-
-2005-01-16 Kim F. Storm <storm@cua.dk>
-
- * macterm.c (syms_of_macterm) <mac-allow-anti-aliasing>: Doc fix.
-
-2005-01-16 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (mac_to_x_fontname): Remove spurious argument.
-
-2005-01-16 Andreas Schwab <schwab@suse.de>
-
- * macterm.c (mac_draw_string_common): Fix compilation on OSX 10.1.
-
-2005-01-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * fringe.c (Fdefine_fringe_bitmap, init_fringe): When assigning
- fringe_faces, cast result from xmalloc/xrealloc to Lisp_Object *.
-
-2005-01-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c (READABLE_EVENTS_DO_TIMERS_NOW)
- (READABLE_EVENTS_FILTER_EVENTS, READABLE_EVENTS_IGNORE_SQUEEZABLES):
- New flags for readable_events.
- (get_filtered_input_pending, readable_filtered_events): Remove.
- (tracking_off): Call readable_events and get_input_pending with
- flag READABLE_EVENTS_DO_TIMERS_NOW.
- (readable_events): Move code from old readable_filtered_events here,
- but check new READABLE_EVENTS_* in argument flags instead of previous
- two boolean arguments do_timers_now and filter_events.
- If we are doing mouse tracking and the mouse moved, return only if
- READABLE_EVENTS_IGNORE_SQUEEZABLES is not set in flags.
- (swallow_events): Call get_input_pending with flag
- READABLE_EVENTS_DO_TIMERS_NOW.
- (get_input_pending): Move code from old get_filtered_input_pending
- here. Replace boolean arguments do_timers_now, filter_events with
- flags, and pass flags to readable_events. Document new
- READABLE_EVENTS_* flags.
- (detect_input_pending_ignore_squeezables): New function.
- (detect_input_pending_run_timers): Call get_input_pending with flag
- READABLE_EVENTS_DO_TIMERS_NOW.
- (Finput_pending_p): Call get_input_pending with flags
- READABLE_EVENTS_DO_TIMERS_NOW and READABLE_EVENTS_FILTER_EVENTS.
-
- * dispnew.c (update_window, update_frame_1): Replace calls to
- detect_input_pending with detect_input_pending_ignore_squeezables
- so that redisplay is not paused if the event queue contains only
- mouse movements.
-
- * lisp.h: Declare detect_input_pending_ignore_squeezables.
-
-2005-01-15 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (Vmac_use_core_graphics): Declare variable for
- mac-allow-anti-aliasing.
- (syms_of_macterm): DEFVAR_LISP and initialize it.
- (mac_draw_string_common): Use core graphics text rendering if
- mac-allow-anti-aliasing is enabled.
-
- * macfns.c (Fx_file_dialog): Save As dialog includes only the
- file name in the text box.
-
-2005-01-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (x_set_foreground_color, x_set_background_color):
- Sync with xfns.c.
- (mac_window, x_create_tip_frame): Use XSetWindowBackground.
- * macterm.c (XSetBackground, XSetWindowBackground): New functions.
- * macterm.h (XSetBackground, XSetWindowBackground): Add externs.
-
-2005-01-14 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (Fposn_at_x_y): Add optional arg WHOLE.
-
-2005-01-13 Richard M. Stallman <rms@gnu.org>
-
- * keymap.c (Fcurrent_active_maps): Ignore Voverriding_local_map
- if Voverriding_terminal_local_map is non-nil.
-
- * keyboard.c (syms_of_keyboard): Doc fix.
-
-2005-01-13 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (Fformat_mode_line): Fix last change. Remove NO_PROPS arg
- (specify 0 for FACE instead). Reorder arg list. Doc fix.
-
-2005-01-12 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (Fformat_mode_line): New arg FACE specifies a default
- face property for characters that don't specify one.
-
- * fns.c (Frequire): Record in load-history unconditionally.
-
-2005-01-10 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (merge_faces): Rename from merge_into_realized_face.
-
- * xfaces.c (merge_faces): Rename from merge_into_realized_face.
- Callers changed.
- Add support to merge with lisp face id too (if face_name is t).
-
- * xdisp.c (get_next_display_element, next_element_from_display_vector):
- Don't lookup lface_id from display table glyphs here; instead use
- merge_faces to merge the lisp face id into current face.
-
-2005-01-09 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct it): New member dpvec_face_id.
- (merge_into_realized_face): Add prototype.
-
- * xfaces.c (merge_into_realized_face): New function. Used to
- merge escape-glyph face or face from display table into current face.
-
- * xdisp.c (Vshow_nonbreak_escape): New lisp var.
- (syms_of_xdisp): DEFVAR_LISP it.
- (escape_glyph_face): Remove var.
- (redisplay_window): Don't initialize it.
- (setup_for_ellipsis, get_next_display_element):
- Set it->dpvec_face_id to -1.
- (get_next_display_element): Test Vshow_nonbreak_escape.
- Do not setup escape_glyph_face.
- Properly merge escape-glyph face or face from display table with
- current face for escape and control characters.
- Set it->dpvec_face_id to relevant face id instead of adding it to each
- element of display vector.
- (next_element_from_display_vector): If it->dpvec_face_id is set,
- use that instead of lface_id from glyph itself.
-
-2005-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (struct x_output): New member, toolbar_detached.
-
- * gtkutil.c (xg_create_frame_widgets): Set initial tool bar height to
- 38.
- (xg_tool_bar_detach_callback): Set toolbar_detached to 1.
- (xg_tool_bar_attach_callback): Set toolbar_detached to 0.
- (xg_create_tool_bar): Initialize toolbar_detached.
- (update_frame_tool_bar): Only set FRAME_TOOLBAR_HEIGHT (f) if
- toolbar_detached is zero.
-
-2005-01-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (create_and_show_popup_menu): Pass zero as button to
- gtk_menu_popup if not for_click, so callbacks for the menu are called.
-
- * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
- (xg_tool_bar_callback, xg_tool_bar_help_callback)
- (update_frame_tool_bar): Cast to EMACS_INT to avoid compiler warning.
-
- * xselect.c (x_get_foreign_selection, x_fill_property_data)
- (Fx_get_atom_name, Fx_send_client_event): Replace XFLOAT with
- XFLOAT_DATA to get extract number from Lisp object.
-
-2005-01-07 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (set_iterator_to_next): Fix 2004-12-13 change.
- Set stop_charpos to current charpos instead of 0.
-
-2005-01-06 Nick Roberts <nickrob@snap.net.nz>
-
- * xdisp.c (Fformat_mode_line): First arg now required.
-
-2005-01-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (XLoadQueryFont): Correctly handle 0 size
- font widths that are returned from some Japanese fonts.
-
-2005-01-06 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (fringe_faces): Change to Lisp_Object pointer.
- (draw_fringe_bitmap_1): Lookup user defined fringe faces here.
- (destroy_fringe_bitmap): Set fringe_faces element to nil.
- (Fdefine_fringe_bitmap, init_fringe): Change allocation of
- fringe_faces array and init elements to nil.
- (Fset_fringe_bitmap_face): Set fringe_faces to face name instead of
- non-persistent face id.
- (mark_fringe_data): New function for GC.
-
- * alloc.c (mark_fringe_data): Declare extern.
- (Fgarbage_collect): Call mark_fringe_data.
-
- * alloc.c (overrun_check_free): Invalidate freed memory if
- XMALLOC_CLEAR_FREE_MEMORY is defined.
-
-2005-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c: Include sys/param.h.
- [TARGET_API_MAC_CARBON] (mac_nav_event_callback): New declaration
- and function.
- [TARGET_API_MAC_CARBON] (Fx_file_dialog): Use MAXPATHLEN for size
- of filename string. Set event callback function when creating
- dialog boxes. Add code conversions for filenames. Don't dispose
- of apple event descriptor record if failed to create it.
-
- * macterm.c: Include sys/param.h.
- [USE_CARBON_EVENTS] (mac_handle_window_event): Add handler for
- kEventWindowUpdate.
- (install_window_handler) [USE_CARBON_EVENTS]: Register it.
- (do_ae_open_documents) [TARGET_API_MAC_CARBON]: Get FSRef instead
- of FSSpec from apple event descriptor record.
- (do_ae_open_documents) [TARGET_API_MAC_CARBON]: Use MAXPATHLEN for
- size of filename string.
- [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Likewise.
- [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Return error when a
- file dialog is in action.
- [TARGET_API_MAC_CARBON] (mac_do_track_drag): Likewise.
- Reject only when there are no filename items. Set background color
- before (un)highlighting the window below the dragged items.
- (XTread_socket) [USE_CARBON_EVENTS]: Don't call do_window_update.
-
-2005-01-05 Romain Francoise <romain@orebokech.com>
-
- * term.c (encode_terminal_code): Fix buffer size computation.
-
-2005-01-04 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (Fformat_mode_line): Doc fix.
-
-2005-01-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (refill_memory_reserve): Move.
- (emacs_blocked_free, emacs_blocked_malloc, emacs_blocked_realloc)
- (reset_malloc_hooks, uninterrupt_malloc) [SYNC_INPUT]: Don't define.
-
-2005-01-03 Richard M. Stallman <rms@gnu.org>
-
- * window.c (window_scroll_pixel_based): Don't correct preserve_y
- for CURRENT_HEADER_LINE_HEIGHT when moving backwards.
-
-2005-01-03 Jason Rumney <jasonr@gnu.org>
-
- * w32bdf.c (w32_load_bdf_font): Set fontp->average_width and
- fontp->space_width to FONT_WIDTH so they are valid.
-
- * w32fns.c (w32_load_system_font): Set FONT_WIDTH to maximum, not
- average width. Set fontp->average_width and fontp->space_width to
- their appropriate values.
-
- * w32term.c (x_new_font): Set FRAME_COLUMN_WIDTH to
- fontp->average_width, not FONT_WIDTH. Set FRAME_SPACE_WIDTH to
- fontp->space_width.
-
-2005-01-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (x_new_font): Set FRAME_SPACE_WIDTH.
- (x_font_min_bounds, XLoadQueryFont): Use the correct font width
- metrics for max and min bounds.
- (x_load_font): Correctly calculate average font width metrics.
-
-2005-01-02 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (Fgarbage_collect): Don't truncate_undo_list on dead buffers.
-
-2004-12-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
-
-2004-12-31 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (setup_for_ellipsis, get_next_display_element):
- Set it->ellipsis_p to 1 or 0.
- (display_line): Record whether row ends in mid-ellipsis.
- (set_cursor_from_row): If ends in ellipsis, find start of it.
- (cursor_row_p): If PT's at the end of the ellipsis the row
- ends within, don't display cursor on this row.
-
- * dispextern.h (struct it): New element ellipsis_p.
- (struct glyph_row): New element ends_in_ellipsis_p.
-
- * xdisp.c (BUFFER_POS_REACHED_P): We haven't reached the specified
- position if we're reading from something other than the buffer.
-
- * window.c (window_scroll_pixel_based): Only look at
- Vscroll_preserve_screen_position if the old PT can't be kept.
- (syms_of_window) <scroll-preserve-screen-position>: Doc fix.
-
-2004-12-30 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_line_height_property): New function extracted from
- original calc_line_height_property.
- (calc_line_height_property): Rework. Handle t and (nil . ratio).
- (x_produce_glyphs): Use them to handle line-height and
- line-spacing according to new height spec.
- (Qtotal): Remove.
- (syms_of_xdisp): Remove intern and staticpro for Qtotal.
-
-2004-12-30 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Finsert_file_contents): Don't use
- current_buffer->buffer_file_coding_system even if REPLACE is
- non-nil. Call Qafter_insert_file_set_coding with the second arg VISIT.
-
- * fontset.h (struct font_info): New members space_width and
- average_width.
-
- * frame.h (struct frame): New member space_width.
- (FRAME_SPACE_WIDTH): New macro.
-
- * xterm.h (struct x_display_info): New member Xatom_AVERAGE_WIDTH.
-
- * xterm.c (x_new_font): Set FRAME_COLUMN_WIDTH to
- fontp->average_width, not FONT_WIDTH. Set FRAME_SPACE_WIDTH to
- fontp->space_width.
- (x_load_font): Calculate fontp->space_width and fontp->average_width.
- (x_term_init): Initialize dpyinfo->Xatom_AVERAGE_WIDTH.
-
- * xdisp.c (x_produce_glyphs): Calculate tab width by
- FRAME_SPACE_WIDTH, not FRAME_COLUMN_WIDTH.
-
-2004-12-29 Sanghyuk Suh <han9kin@mac.com>
-
- * macterm.c (SelectionRange): Add Xcode position apple event struct.
- (do_ae_open_documents): Handle Xcode-style file position open events.
-
-2004-12-29 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.c (syms_of_buffer) <vertical-scroll-bar>: Correct typo.
-
-2004-12-29 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer) <vertical-scroll-bar>: Doc fix.
-
-2004-12-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (install_window_handler): Modify extern to return OSErr
- value.
- (mac_window): Handle return value of install_window_handler.
-
- * macterm.c (reflect_byte): Remove function.
- (mac_create_bitmap_from_bitmap_data): Don't call reflect_byte.
- Lookup table instead.
- (mac_do_font_lists): Simplify calculation of the longest
- nonspecial string.
- (init_mac_drag_n_drop): Remove function and declaration.
- (mac_initialize) [TARGET_API_MAC_CARBON]: Don't call
- init_mac_drag_n_drop.
- (mac_do_track_drag): New function and declaration.
- (install_window_handler): Return OSErr value.
- (install_window_handler) [TARGET_API_MAC_CARBON]:
- Register handlers for tracking/receiving drag-and-drop items.
- (do_ae_open_documents): Generate unibyte strings for filenames.
- (mac_do_receive_drag) [TARGET_API_MAC_CARBON]: Likewise.
- Reject only non-filename items. Set event modifiers, and return value.
-
-2004-12-28 Dan Nicolaescu <dann@ics.uci.edu>
-
- * coding.c (decode_coding): Fix previous change.
-
-2004-12-28 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (back_to_previous_visible_line_start):
- Don't call handle_display_prop.
-
-2004-12-28 Dan Nicolaescu <dann@ics.uci.edu>
-
- * coding.c (decode_coding_XXX, decode_composition_emacs_mule)
- (decode_coding_emacs_mule, encode_coding_emacs_mule)
- (decode_coding_iso2022, encode_designation_at_bol)
- (encode_coding_iso2022, decode_coding_sjis_big5, decode_eol)
- (decode_coding): Constify arguments and local vars.
-
-2004-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (popup_get_selection): Only pop down dialogs
- on C-g and Escape.
- (popup_get_selection): Remove parameter down_on_keypress.
- (create_and_show_popup_menu, create_and_show_dialog):
- Remove parameter down_on_keypress to popup_get_selection.
-
-2004-12-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * dispextern.h: Change HAVE_CARBON to MAC_OS.
- (struct glyph_string): Likewise.
-
- * emacs.c (main) [MAC_OS8]: Call mac_term_init instead of
- mac_initialize.
-
- * fileio.c (Fnext_read_file_uses_dialog_p, Fread_file_name):
- Change TARGET_API_MAC_CARBON to HAVE_CARBON.
-
- * fns.c (vector): Change MAC_OSX to MAC_OS.
-
- * frame.c (x_set_frame_parameters, x_report_frame_params)
- (x_set_fullscreen): Remove #ifndef HAVE_CARBON.
- (x_set_border_width, Vdefault_frame_scroll_bars):
- Change HAVE_CARBON to MAC_OS.
-
- * image.c [MAC_OS]: Include sys/stat.h.
- [MAC_OS && !MAC_OSX]: Include sys/param.h, ImageCompression.h, and
- QuickTimeComponents.h.
-
- * mac.c [!MAC_OSX] (mac_wait_next_event): Add extern.
- [!MAC_OSX] (select): Use mac_wait_next_event.
- [!MAC_OSX] (run_mac_command): Change EXEC_SUFFIXES to Vexec_suffixes.
- [!MAC_OSX] (select, run_mac_command): Change `#ifdef
- TARGET_API_MAC_CARBON' to `#if TARGET_API_MAC_CARBON'.
- (mac_clear_font_name_table): Add extern.
- (Fmac_clear_font_name_table): New defun.
- (syms_of_mac): Defsubr it.
- [MAC_OSX] (SELECT_POLLING_PERIOD_USEC): New define.
- [MAC_OSX] (select_and_poll_event): New function.
- [MAC_OSX] (sys_select): Use it.
- [MAC_OSX && SELECT_USE_CFSOCKET] (socket_callback): New function.
- [MAC_OSX && SELECT_USE_CFSOCKET]
- (SELECT_TIMEOUT_THRESHOLD_RUNLOOP, EVENT_CLASS_SOCK): New defines.
- [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]: Use CFSocket and
- RunLoop for simultaneously monitoring two kinds of inputs, window
- events and process outputs, without periodically polling.
-
- * macfns.c (mac_initialized): Remove extern.
- (stricmp): Put in #if 0. All callers changed to use xstricmp in
- xfaces.c.
- (strnicmp): Decrement `n' at the end of each loop, not the beginning.
- (check_mac): Use the term "Mac native windows" instead of "Mac OS".
- (check_x_display_info, x_display_info_for_name): Sync with xfns.c.
- (mac_get_rdb_resource): New function (from w32reg.c).
- (x_get_string_resource): Use it.
- (install_window_handler): Add extern.
- (mac_window): New function.
- (Fx_create_frame): Use it instead of make_mac_frame.
- Set parameter for Qfullscreen. Call x_wm_set_size_hint.
- (Fx_open_connection, Fx_close_connection): New defuns.
- (syms_of_macfns): Defsubr them.
- (x_create_tip_frame) [TARGET_API_MAC_CARBON]:
- Add kWindowNoUpdatesAttribute to the window attribute.
- (x_create_tip_frame) [!TARGET_API_MAC_CARBON]: Use NewCWindow.
- (x_create_tip_frame): Don't call ShowWindow.
- (Fx_show_tip): Call ShowWindow.
- (Fx_file_dialog): Change `#ifdef TARGET_API_MAC_CARBON' to `#if
- TARGET_API_MAC_CARBON'.
- (mac_frame_parm_handlers): Set handlers for Qfullscreen.
- (syms_of_macfns) [MAC_OSX]: Initialize mac_in_use to 0.
-
- * macgui.h [!MAC_OSX]: Don't include Controls.h. Include Windows.h.
- (Window): Typedef to WindowPtr and move outside `#if
- TARGET_API_MAC_CARBON'.
- (XSizeHints): New struct.
-
- * macterm.c (x_update_begin, x_update_end)
- [TARGET_API_MAC_CARBON]: Disable screen updates during update of a
- frame.
- (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
- [MAC_OS8]: Use XDrawImageString/XDrawImageString16.
- (construct_mouse_click): Put in #if 0.
- (x_check_fullscreen, x_check_fullscreen_move): Remove decls.
- (x_scroll_bar_create, x_scroll_bar_handle_click): Change `#ifdef
- TARGET_API_MAC_CARBON' to `#if TARGET_API_MAC_CARBON'.
- (activate_scroll_bars, deactivate_scroll_bars)
- [!TARGET_API_MAC_CARBON]: Use ActivateControl/DeactivateControl.
- (x_make_frame_visible) [TARGET_API_MAC_CARBON]: Reposition window
- if the position is neither user-specified nor program-specified.
- (x_free_frame_resources): Free size_hints.
- (x_wm_set_size_hint): Allocate size_hints if needed. Set size_hints.
- (mac_clear_font_name_table): New function.
- (mac_do_list_fonts): Initialize font_name_table if needed.
- (x_list_fonts): Don't initialize font_name_table. Add BLOCK_INPUT
- around mac_do_list_fonts.
- (mac_unload_font): New function.
- (x_load_font): Add BLOCK_INPUT around XLoadQueryFont.
- (init_mac_drag_n_drop, mac_do_receive_drag): Enclose declarations
- and definitions with #if TARGET_API_MAC_CARBON.
- [USE_CARBON_EVENTS] (mac_handle_window_event): Add decl.
- (install_window_handler): Add decl.
- (do_window_update): Add BeginUpdate/EndUpdate for the tooltip
- window. Use UpdateControls. Get the rectangle that should be
- updated and restrict the target of expose_frame to it.
- (do_grow_window): Set minimum height/width according to size_hints.
- (do_grow_window) [TARGET_API_MAC_CARBON]: Use ResizeWindow.
- (do_zoom_window): Don't use x_set_window_size.
- [USE_CARBON_EVENTS] (mac_handle_window_event): New function.
- (install_window_handler): New function.
- [!USE_CARBON_EVENTS] (mouse_region): New variable.
- [!USE_CARBON_EVENTS] (mac_wait_next_event): New function.
- (XTread_socket) [USE_CARBON_EVENTS]: Move call to
- GetEventDispatcherTarget inside BLOCK_INPUT.
- (XTread_socket) [!USE_CARBON_EVENTS]: Use mac_wait_next_event.
- Update mouse_region when mouse is moved.
- (make_mac_frame): Remove.
- (make_mac_terminal_frame): Put in #ifdef MAC_OS8.
- Initialize mouse pointer shapes. Change values of f->left_pos and
- f->top_pos. Don't use make_mac_frame. Use NewCWindow.
- Don't call ShowWindow.
- (mac_initialize_display_info) [MAC_OSX]: Create mac_id_name from
- Vinvocation_name and Vsystem_name.
- (mac_make_rdb): New function (from w32term.c).
- (mac_term_init): Use it. Add BLOCK_INPUT. Error if display has
- already been opened. Don't pass argument to
- mac_initialize_display_info. Don't set dpyinfo->height/width.
- Add entries to x_display_list and x_display_name_list.
- (x_delete_display): New function.
- (mac_initialize): Don't call mac_initialize_display_info.
- (syms_of_macterm) [!MAC_OSX]: Don't call Fprovide.
-
- * macterm.h (check_mac): Add extern.
- (struct mac_output): New member size_hints.
- (FRAME_SIZE_HINTS): New macro.
- (mac_unload_font): Add extern.
-
- * xdisp.c (expose_window, expose_frame): Remove kludges for Mac.
-
- * xfaces.c (clear_font_table) [MAC_OS]: Call mac_unload_font.
-
-2004-12-27 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fbuffer_disable_undo): Delete (move to simple.el).
- (syms_of_buffer): Don't defsubr it.
-
- * process.c (list_processes_1): Set undo_list instead
- of calling Fbuffer_disable_undo.
-
- * xdisp.c (single_display_spec_string_p): Rename from
- single_display_prop_string_p.
- (single_display_spec_intangible_p): Rename from
- single_display_prop_intangible_p.
- (handle_single_display_spec): Rename from handle_single_display_prop.
- Rewritten to be easier to understand.
-
- Change in load-history format. Functions now get (defun . NAME),
- and variables get just NAME.
-
- * data.c (Fdefalias): Use (defun . FN_NAME) in LOADHIST_ATTACH.
-
- * eval.c (Fdefun, Fdefmacro): Use (defun . FN_NAME) in LOADHIST_ATTACH.
- (Fdefvaralias, Fdefvar, Fdefconst): Use just SYM in LOADHIST_ATTACH.
- (Qdefvar): Var deleted.
- (syms_of_eval): Don't initialze it.
-
- * lread.c (syms_of_lread) <load-history>: Doc fix.
-
-2004-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (popup_get_selection): Pop down on C-g.
- (set_frame_menubar): Install translations for Lucid/Motif/Lesstif that
- pops down menu on C-g.
- (xdialog_show): If dialog popped down and no button in the dialog was
- pushed, call Fsignal to quit.
- (xmenu_show): In no toolkit version, if menu returns NO_SELECT call
- Fsignal to quit.
-
- * xfns.c (Fx_file_dialog): Motif/Lesstif version: Pop down on C-g.
-
- * gtkutil.c (xg_initialize): Install bindings for C-g so that
- dialogs and menus pop down.
-
-2004-12-27 Kenichi Handa <handa@m17n.org>
-
- * coding.c (code_convert_region): Fix calculation of `ratio'.
-
-2004-12-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Make the value of
- tool-bar-button-margin control margins of images in tool bar.
-
- * alloc.c (check_depth): New variable.
- (overrun_check_malloc, overrun_check_realloc): Only add
- overhead and write check pattern if check_depth is 1 (to handle
- recursive calls). Increase/decrease check_depth in entry/exit.
- (overrun_check_free): Only check for overhead if check_depth is 1.
- Increase/decrease check_depth in entry/exit.
-
-2004-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c (input_available_signal): Call SIGNAL_THREAD_CHECK
- before touching input_available_clear_time, to avoid accessing it
- from multiple threads.
-
-2004-12-23 Jason Rumney <jasonr@gnu.org>
-
- * image.c (__WIN32__) [HAVE_NTGUI]: Define for correct behaviour
- of JPEG library.
-
-2004-12-22 Richard M. Stallman <rms@gnu.org>
+ (Fx_display_save_under, Fx_close_connection, x_create_tip_frame):
+ Use FRAME_TERMINAL_P, FRAME_WINDOW_P, FRAME_TTY and FRAME_RIF.
+
+ * xfns.c (x_set_foreground_color x_set_background_color)
+ (x_set_mouse_color, x_set_cursor_color, x_make_gc):
+ Use FRAME_BACKGROUND_PIXEL and FRAME_FOREGROUND_PIXEL.
+ (Fx_create_frame, x_create_tip_frame, build_string, x_window)
+ (Fx_create_frame, x_create_tip_frame): Don't create frames on a
+ terminal that is being deleted.
+ (Fx_create_frame): Use `store_frame_param' to set `window-system'
+ frame parameter, and make sure it overrides any user-supplied setting.
+ (Fx_close_connection, Fx_synchronize): Unify argument names with
+ the rest of the DEFUNs.
+
+ * dispnew.c (Fsend_string_to_terminal): Update call to
+ `get_tty_terminal'.
+ (Fredraw_frame, Fsend_string_to_terminal)
+ (Fsend_string_to_terminal, init_display): Use FRAME_RIF,
+ FRAME_TERMCAP_P and FRAME_TTY.
+ (window_change_signal): Don't believe width/height values that are
+ impossibly small.
+ (Vinitial_window_system): Rename from Vwindow_system.
+ (termscript, Wcm, rif): Delete.
+
+ * termhooks.h (struct terminal): New struct containing the
+ previously global text display hooks and new members NAME,
+ DELETED and PARAM_ALIST.
+ (FRAME_TERMINAL, TERMINAL_TERMINAL_CODING)
+ (TERMINAL_KEYBOARD_CODING, TERMINAL_ACTIVE_P, FRAME_WINDOW_P)
+ (FRAME_RIF): New macros.
+ (get_terminal_param, get_device): New declarations.
+ (termscript): Delete declaration.
+
+ * xterm.c (x_initialize): Use Fset_input_interrupt_mode.
+ (XTflash, x_free_frame_resources, x_scroll_bar_create)
+ (x_scroll_bar_set_handle): Use FRAME_BACKGROUND_PIXEL and
+ FRAME_FOREGROUND_PIXEL.
+ (x_fully_uncatch_errors): Disable definition.
+ (x_scroll_bar_expose): Fix reference to foreground pixel.
+ (XTread_socket): Disable loop on all X displays.
+ (x_delete_terminal): Don't set terminal->deleted and let
+ delete_terminal delete the frames on the terminal.
+ (x_delete_display): Doc update to reflect changes in
+ delete_terminal.
+ (x_display_info) <terminal>: Move member earlier in the struct.
+ (deleting_tty): Remove old variable.
+ (Fsuspend_tty): Call clear_tty_hooks.
+ (Fresume_tty, init_tty): Call set_tty_hooks.
+ (Ftty_display_color_p, Ftty_display_color_cells): Don't throw
+ errors on X frames.
+ (x_catch_errors_unwind): Abort if x_error_message is NULL.
+ (handle_one_xevent): Initialize `f' to NULL.
+ (x_delete_terminal, x_create_terminal): New functions.
+ (XTset_terminal_modes, XTreset_terminal_modes)
+ (XTread_socket, x_connection_closed, x_term_init)
+ (x_term_init, x_delete_display): Add terminal parameter.
+ (x_term_init) [!HAVE_GTK_MULTIDISPLAY]: Refuse to create secondary
+ X connections.
+
+ * frame.c (Fframep): Deal with output_initial.
+ (Qbuffer_predicate, Qbuffer_list, Qburied_buffer_list, Qtty)
+ (Qtty_type, Qwindow_system, Qenvironment)
+ (Qterm_environment_variable, Qdisplay_environment_variable): New vars.
+ (x_set_screen_gamma, store_frame_param): Fix compilation errors.
+ (make_terminal_frame): Don't create frames on a terminal that is
+ being deleted.
+ (make_terminal_frame): Use FRAME_BACKGROUND_PIXEL and
+ FRAME_FOREGROUND_PIXEL.
+ (store_frame_param): Check for found_for_frame before calling XFRAME.
+ (Fmake_terminal_frame): Handle NULL tty names correctly.
+ (syms_of_frame): Enhance doc string of `default-frame-alist'.
+ (Fdelete_frame): Remove unused variable `count'.
+ (Qenvironment): New variable.
+ (Fdelete_frame): Don't allow other frames to refer to a deleted
+ frame in their 'environment parameter.
+ (Fframe_with_environment): New function.
+ (syms_of_frame): Defsubr it. Initialize and staticpro Qenvironment.
+ (get_future_frame_param): New function.
+ (Fmake_terminal_frame): Use it.
+ (x_set_frame_parameters, x_set_screen_gamma): Use FRAME_RIF.
+
+ * sysdep.c (init_sys_modes, reset_sys_modes): Update for renames.
+ * sysdep.c (reset_sys_modes): Update for renames.
+
+ * keyboard.c (tty_read_avail_input): New function.
+ (Fset_input_interrupt_mode, Fset_output_flow_control): New functions.
+ (syms_of_keyboard): Defsubr them.
+ (Fset_input_meta_mode, Fset_quit_char): New functions.
+ (Fset_input_mode): Split to above functions.
+
+ (read_char_minibuf_menu_prompt): Add wrong_kboard_jmpbuf
+ parameter. Use it in call to `read_char'.
+ (read_char): Declare. Update call to `read_char_minibuf_menu_prompt'.
+ Set wrong_kboard_jmpbuf correctly in recursive calls.
+ Use current_kboard to access Vkeyboard_translate_table.
+ Enhance comment before extra longjmp to wrong_kboard_jmpbuf.
+ Add wrong_kboard_jmpbuf parameter to allow for recursive calls.
+ Update longjmp invocations. Remember the original current_kboard,
+ and longjmp to `wrong_kboard_jmpbuf' when a filter, timer or sentinel
+ changes it. Comment out unnecessary calls to
+ `record_single_kboard_state' and `any_kboard_state'.
+ Update recursive calls.
+ (wrong_kboard_jmpbuf): Remove global variable.
+ (read_key_sequence): Remove unused variable wrong_kboard_jmpbuf.
+ Handle deleted interrupted_kboards correctly; that is a legal
+ case. Add `wrong_kboard_jmpbuf' local variable. Update setjmp
+ and read_char calls. Abort if interrupted_kboard died in read_char.
+ (any_kboard_state, single_kboard_state)
+ (push_frame_kboard): Remove function.
+ (pop_kboard): Switch out of single_kboard mode if the kboard has
+ been deleted. Remove unused variable. Help debugging by not
+ changing current_kboard unnecessarily. Set current_kboard to the
+ kboard of the selected frame when the stored kboard object has
+ been deleted before pop_kboard.
+ (temporarily_switch_to_single_kboard): Change first parameter to a
+ frame pointer. Throw an error when caller wants to change kboards
+ while in single_kboard mode. Don't push_kboard if we weren't in
+ single kboard state. Don't pop_kboard if we popped into any
+ kboard state.
+ (restore_kboard_configuration): Abort if pop_kboard changed the
+ kboard in single_kboard mode. Call pop_kboard only after setting
+ up single_kboard mode.
+ (Frecursive_edit): Switch to single_kboard mode only in nested
+ command loops.
+ (cmd_error, command_loop, command_loop_1, timer_check):
+ Comment out unnecessary call to `any_kboard_state' and
+ `record_single_kboard_state'.
+ (delete_kboard): Exit single_kboard mode if we have just deleted
+ that kboard. Use FRAME_KBOARD.
+ (interrupt_signal): Use `Fkill_emacs' to exit Emacs, not
+ `fatal_error_signal'.
+ (record_single_kboard_state): Don't push_kboard if we weren't in
+ single kboard state. Don't pop_kboard if we popped into any
+ kboard state.
+ (push_frame_kboard): Rename to push_kboard.
+ (kbd_buffer_get_event): Use FRAME_TERMINAL.
+ (read_avail_input): Read input from all terminals.
+ (mark_kboards): Also mark Vkeyboard_translate_table.
+ (kbd_buffer_store_event_hold): Simplify condition.
+ (read_key_sequence): Reinitialize fkey and keytran at each replay.
+ (Vkeyboard_translate_table): Move to struct kboard.
+ (init_kboard): Initialize Vkeyboard_translate_table.
+ (syms_of_keyboard): Use DEFVAR_KBOARD to define
+ Vkeyboard_translate_table. Update doc strings. Update docs of
+ local-function-key-map and function-key-map.
+
+ * terminal.c: New file.
+
+ * term.c: Include errno.h.
+ (Vring_bell_function, device_list, initial_device)
+ (next_device_id, ring_bell, update_begin, update_end)
+ (set_terminal_window, cursor_to, raw_cursor_to)
+ (clear_to_end, clear_frame, clear_end_of_line)
+ (write_glyphs, insert_glyphs, delete_glyphs, ins_del_lines)
+ (Fdisplay_name, create_device, delete_device): Move to terminal.c.
+ (syms_of_term): Move their initialization to terminal.c.
+ (get_tty_terminal, Fdisplay_tty_type, Ftty_display_color_p)
+ (Ftty_display_color_cells)
+ (Ftty_no_underline, Fsuspend_tty, Fresume_tty, create_tty_output)
+ (clear_tty_hooks, set_tty_hooks)
+ (init_tty, maybe_fatal): New functions.
+ (Ftty_type): Return nil if terminal is not on a tty instead of
+ throwing an error. Doc update.
+ (syms_of_term) <Vsuspend_tty_functions, Vresume_tty_functions>:
+ Doc update. Initialize new subrs and variables.
+ (delete_tty): Use terminal->deleted.
+ (tty_set_terminal_modes): Rename from set_terminal_modes.
+ (tty_reset_terminal_modes): Rename from reset_terminal_modes.
+ (set_scroll_region): Rename to `tty_set_scroll_region'.
+ (turn_on_insert): Rename to `tty_turn_on_insert'.
+ (turn_off_insert): Rename to `tty_turn_off_insert'.
+ (turn_off_highlight): Rename to `tty_turn_off_highlight'.
+ (turn_on_highlight): Rename to `tty_turn_on_highlight'.
+ (toggle_highligh): Rename to `tty_toggle_highlight'.
+ (background_highlight): Rename to `tty_background_highlight'.
+ (highlight_if_desired): Rename to `tty_highlight_if_desired'.
+ (tty_ring_bell, tty_update_end, tty_set_terminal_window)
+ (tty_set_scroll_region, tty_background_highlight)
+ (tty_cursor_to, tty_raw_cursor_to, tty_clear_to_end)
+ (tty_clear_frame, tty_clear_end_of_line, tty_write_glyphs)
+ (tty_insert_glyphs, tty_delete_glyphs, tty_ins_del_lines)
+ (term_get_fkeys, tty_setup_colors, dissociate_if_controlling_tty):
+ Add static modifier.
+ (tty_reset_terminal_modes, tty_set_terminal_window)
+ (tty_set_scroll_region, tty_background_highlight)
+ (tty_highlight_if_desired, tty_cursor_to)
+ (tty_raw_cursor_to, tty_clear_to_end, tty_clear_frame)
+ (tty_clear_end_of_line, tty_write_glyphs, tty_insert_glyphs)
+ (tty_delete_glyphs, tty_ins_del_lines, turn_on_face): Update for
+ renames.
- * emacs.c (main): If batch mode, set Vundo_outer_limit to nil.
+2007-08-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * lisp.h (Vundo_outer_limit): Fix decl.
+ * keyboard.c: Qrtl is new.
+ (parse_tool_bar_item): Handle :rtl keyword.
+ (syms_of_keyboard): Intern :rtl keyword.
- * undo.c (Vundo_outer_limit): Replaces undo_outer_limit.
- Uses changed.
- (syms_of_undo): Initialize appropriately.
- (truncate_undo_list): If it's nil, there's no limit.
+ * dispextern.h (enum tool_bar_item_idx): Add TOOL_BAR_ITEM_RTL_IMAGE.
-2004-12-22 Kenichi Handa <handa@m17n.org>
+ * gtkutil.c (xg_tool_bar_expose_callback): Just do SET_FRAME_GARBAGED
+ so no Lisp code is executed.
+ (file_for_image, find_rtl_image): New functions.
+ (xg_get_image_for_pixmap): Use file_for_image
+ (update_frame_tool_bar): If direction is RTL, use RTL image if
+ defined. Use Gtk stock images if defined.
- * xselect.c (Fx_get_cut_buffer_internal): Return a unibyte string.
+2007-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2004-12-21 Richard M. Stallman <rms@gnu.org>
+ * macterm.c (x_draw_composite_glyph_string_foreground): Draw rectangle
+ for nonexistent or zero-width glyph in composition glyph.
- * eval.c (unwind_to_catch): Clear immediate_quit.
+2007-08-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * xdisp.c (get_next_display_element): Display codes 8a0 and 8ad
- specially as `\ ' and `\-'.
+ * m/amdx86-64.h: Redirect to intel386.h if compiling for i386.
- * keyboard.c (kbd_buffer_store_event_hold):
- In the code for while-no-input, handle immediate_quit.
+ * xdisp.c (Finvisible_p): New function.
+ (syms_of_xdisp): defsubr it.
- * alloc.c (Fgarbage_collect): Update call to truncate_undo_list.
- Call that at the very start.
- (undo_limit, undo_strong_limit, undo_outer_limit): Move to undo.c.
- (syms_of_alloc): Don't define undo-limit,
- undo-strong-limit and undo-outer-limit here.
+2007-08-24 Juanma Barranquero <lekktu@gmail.com>
- * undo.c (truncate_undo_list): Return void.
- Take just one argument, the buffer.
- Make it current, and inhibit recursive GC.
- Access and update the undo list directly; return void.
- Refer to the undo...limit variables directly.
- Test undo_outer_limit only after counting the whole current command.
- When it's exceeded, call the function in undo-outer-limit-function.
- (undo_limit, undo_strong_limit, undo_outer_limit): From alloc.c.
- (Vundo_outer_limit_function): New variable.
- (syms_of_undo): Define undo-limit, undo-strong-limit
- and undo-outer-limit here, and undo-outer-limit-function.
+ * image.c (syms_of_image) <image-library-alist, cross-disabled-images>:
Doc fixes.
- * lisp.h (truncate_undo_list): Update decl.
-
-2004-12-21 Piet van Oostrum <piet@cs.uu.nl>
-
- * fileio.c (Fread_file_name): Delete duplicates in
- file-name-history when history_delete_duplicates is true.
-
-2004-12-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_do_list_fonts): Fix memory leak
-
-2004-12-20 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (re_match_2_internal) <symend, wordend>:
- Fix calls to UPDATE_SYNTAX_TABLE_FORWARD.
-
-2004-12-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (endif, x_font_name_to_mac_font_name):
- Use maccentraleurroman instead of maccentraleuropean
- (mac_c_string_match, mac_do_list_fonts): Speed up font search by
- quickly finding a specific font without needing regexps.
-
-2004-12-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * syssignal.h: Declare main_thread.
- (SIGNAL_THREAD_CHECK): New macro.
-
- * keyboard.c (input_available_signal): Move thread checking code
- to macro SIGNAL_THREAD_CHECK and call that macro.
- (interrupt_signal): Call SIGNAL_THREAD_CHECK.
-
- * alloc.c (uninterrupt_malloc): Move main_thread to emacs.c.
-
- * emacs.c: Define main_thread.
- (main): Initialize main_thread.
- (handle_USR1_signal, handle_USR2_signal, fatal_error_signal)
- (memory_warning_signal): Call SIGNAL_THREAD_CHECK.
-
- * floatfns.c (float_error): Call SIGNAL_THREAD_CHECK.
-
- * dispnew.c (window_change_signal): Call SIGNAL_THREAD_CHECK.
-
- * sysdep.c (select_alarm): Call SIGNAL_THREAD_CHECK.
-
- * process.c (send_process_trap, sigchld_handler):
- Call SIGNAL_THREAD_CHECK.
-
- * data.c (arith_error): Call SIGNAL_THREAD_CHECK.
-
- * atimer.c (alarm_signal_handler): Call SIGNAL_THREAD_CHECK.
-
- * xterm.c (xg_scroll_callback): Update XG_LAST_SB_DATA before
- returning when xg_ignore_gtk_scrollbar is true.
-
-2004-12-14 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (read_char): Save and restore echo_string when
- handling input method.
-
-2004-12-13 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (syms_of_eval) <quit-flag>: Doc fix.
-
- * keyboard.c (Vthrow_on_input): New variable.
- (syms_of_keyboard): Defvar and initialize it.
- (kbd_buffer_store_event_hold): Handle Vthrow_on_input.
-
- * lisp.h (QUIT): Check for Vthrow_on_input.
- (Vthrow_on_input): Declare it.
-
-2004-12-13 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (set_iterator_to_next): Reset stop_charpos after display
- vector.
-
-2004-12-12 Richard M. Stallman <rms@gnu.org>
-
- * indent.c (Fvertical_motion): Call move_it_by_lines even if LINES = 0.
-
- * minibuf.c (Fall_completions): Add var `zero' and use it in loop.
- (Ftry_completion): Really use outer `zero'; eliminate inner one.
-
-2004-12-12 Kenichi Handa <handa@m17n.org>
-
- * term.c (encode_terminal_code): Fix previous change.
-
-2004-12-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keyboard.c (handle_async_input): Remove pthread mutex handling.
- (input_available_signal): Move pthread thingy to !SYNC_INPUT branch.
-
- * syntax.c (Fforward_word): Avoid non-idempotent side-effects
- in macro arguments.
-
- * minibuf.c (Ftry_completion, Fall_completions): Don't use
- XFASTINT blindly.
-
- * emacs.c (main, Fdump_emacs): Don't touch malloc hooks if SYNC_INPUT.
-
-2004-12-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * w32term.c (x_calc_absolute_position): Remove calculation of
- difference between inner and outer window. Don't subtract difference
- for left and top calculations.
-
- * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
- for left and top calculations. Remove call to x_real_positions.
- [Bug report by Drew Adams in November.]
- (x_check_expected_move): Do not set change_gravity to 1 when calling
- x_set_offset.
-
-2004-12-08 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (get_next_display_element): Use `escape-glyph' for
- control chars and escaped octal codes.
- (Qescape_glyph): New variable.
- (syms_of_xdisp): Initialize it.
- (escape_glyph_face): New variable.
- (redisplay_window): Initialize it.
-
-2004-12-07 Paul Eggert <eggert@cs.ucla.edu>
-
- * image.c (our_fill_input_buffer, jpeg_load, CHECK_LIB_AVAILABLE)
- (init_image): Use 1 rather than TRUE. TRUE's not always defined.
-
-2004-12-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * emacs.c (Fdump_emacs): Add ! defined (SYSTEM_MALLOC) around
- reset_malloc_hooks.
-
- * keyboard.c (handle_async_input, input_available_signal):
- Add ! defined (SYSTEM_MALLOC) around thread code.
-
- * alloc.c: Add comment about the reason for (UN)BLOCK_INPUT_ALLOC.
-
-2004-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * eval.c (init_eval_once): Increase max_specpdl_size to 1000.
-
- * config.in: Regenerate.
-
-2004-12-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (Fx_popup_menu): Correct documentation about position.
- (xmenu_show): Do not call XTranslateCoordinates. Adjust position
- if not given by a mouse click to correspond with x-popup-menu
- documentation.
-
- * config.in: Regenerate.
-
- * gtkutil.c: Include signal.h and syssignal.h.
- (xg_get_file_name): Block and unblock __SIGRTMIN if defined.
-
- * alloc.c: If HAVE_GTK_AND_PTHREAD, include pthread.h,
- new variables main_thread and alloc_mutex,
- define (UN)BLOCK_INPUT_ALLOC to use alloc_mutex to protect
- emacs_blocked_* calls and only do (UN)BLOCK_INPUT in the main thread.
- If not HAVE_GTK_AND_PTHREAD, (UN)BLOCK_INPUT_ALLOC is the same
- as (UN)BLOCK_INPUT.
- (emacs_blocked_free, emacs_blocked_malloc)
- (emacs_blocked_realloc): Use (UN)BLOCK_INPUT_ALLOC.
- (uninterrupt_malloc): Initialize main_thread and alloc_mutex.
- (reset_malloc_hooks): New function.
-
- * lisp.h: Declare reset_malloc_hooks.
-
- * emacs.c (Fdump_emacs): Call reset_malloc_hooks.
-
- * keyboard.c: Conditionally include pthread.h.
- (handle_async_input, input_available_signalt): If not in the main
- thread, block signal, send signal to main thread and return.
-
- * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
- Set current folder in file chooser if default_filename is a directory.
-
-2004-12-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * regex.c (GET_UNSIGNED_NUMBER): Signal an error when reaching the end.
- Remove redundant correctness checks.
- (regex_compile): Fix up error codes for \{..\} expressions.
-
-2004-12-05 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (regex_compile): Fix end-of-pattern case for space.
-
-2004-12-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.h (cfstring_create_with_utf8_cstring): Add prototype.
- * mac.c (cfstring_create_with_utf8_cstring): Add to prevent
- crashes with invalid characters.
- * macmenu.c (add_menu_item): Use it.
- * image.c (image_load_quartz2d): Likewise.
- * macfns.c (x_set_name, x_set_title): Likewise.
- (Fx_file_dialog): Likewise. Use constant CFRefs instead of
- creating them each time for labels.
-
-2004-12-02 Richard M. Stallman <rms@gnu.org>
-
- * config.in (RE_TRANSLATE_P): If make_number is not a macro,
- don't use it here.
-
- * eval.c (Fcalled_interactively_p): Don't check INTERACTIVE.
- (interactive_p): Skip Scalled_interactively_p frames
- like Sinteractive_p frames.
- (unwind_to_catch): Clear handling_signal.
-
- * data.c (Fmake_variable_buffer_local): Doc fix.
- (Fmake_local_variable): Doc fix.
-
- * insdel.c (insert_from_string_before_markers)
- (insert_from_string): Don't modify buffer on empty insertion.
+2007-08-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * window.c (Fget_lru_window, Fget_largest_window): Doc fixes.
+ * mac.c [MAC_OSX] (select_and_poll_event, sys_select): Fix last changes.
-2004-12-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-08-24 Martin Rudalics <rudalics@gmx.at>
- * macmenu.c (add_menu_item): Fallback on MacRoman if encoding
- menu text as UTF8 fails.
+ * fileio.c (Finsert_file_contents): Consult CHARS_MODIFF to tell
+ whether decoding has modified buffer contents.
-2004-12-01 Kim F. Storm <storm@cua.dk>
+2007-08-24 Jason Rumney <jasonr@gnu.org>
- * alloc.c: Add commentary for last change.
- (XMALLOC_PUT_SIZE, XMALLOC_GET_SIZE): New macros to handle
- sizeof(size_t) != 4.
- (overrun_check_malloc, overrun_check_realloc, overrun_check_free):
- Use them. Also clear header and trailer of freed memory.
- (GC_STRING_OVERRUN_COOKIE_SIZE): Rename from GC_STRING_EXTRA.
- (string_overrun_cookie): Rename from string_overrun_pattern.
- (GC_STRING_EXTRA): Define from GC_STRING_OVERRUN_COOKIE_SIZE.
+ * image.c [HAVE_NTGUI]: Define dynamic loaded functions for SVG.
+ (Qgdk_pixbuf, Qglib) [HAVE_NTGUI]: New symbols.
+ (syms_of_image) [HAVE_NTGUI]: Intern and staticpro them.
+ (init_svg_functions) [HAVE_NTGUI]: New function.
+ (fn_g_type_init, fn_g_object_unref, fn_g_error_free): New #defines.
+ (svg_load_image): Use them.
+ (svg_load_image) [HAVE_NTGUI]: Implement background.
-2004-12-01 Andreas Schwab <schwab@suse.de>
+2007-08-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * lisp.h: Declare string_to_multibyte.
+ * Makefile.in (RSVG_LIBS, RSVG_CFLAGS): New variables.
+ (ALL_CFLAGS): Use ${RSVG_CFLAGS} instead of @RSVG_CFLAGS@.
+ (LIBX): Remove @RSVG_LIBS@.
+ (LIBES): Add $(RSVG_LIBS).
-2004-12-01 Kenichi Handa <handa@m17n.org>
+ * image.c (svg_load_image): Blend with specified background if exists.
+ Use IMAGE_BACKGROUND. Add Mac OS Support.
- * w32console.c (w32con_write_glyphs): Decide coding here.
- Adjusted for the change of encode_terminal_code.
+ * mac.c (wakeup_from_rne_enabled_p) [MAC_OSX]: Remove variable.
+ (ENABLE_WAKEUP_FROM_RNE, DISABLE_WAKEUP_FROM_RNE) [MAC_OSX]:
+ Remove macros.
+ [MAC_OSX] (socket_callback): Do nothing.
+ [MAC_OSX] (select_and_poll_event): Use CFRunLoopRunInMode instead of
+ ReceiveNextEvent.
+ [MAC_OSX] (sys_select): Likewise. Don't set context as argument to
+ socket_callback.
+ (mac_wakeup_from_rne) [MAC_OSX]: Do nothing.
- * term.c (encode_terminal_code): Don't make it "static".
+2007-08-22 Glenn Morris <rgm@gnu.org>
-2004-11-30 Kenichi Handa <handa@m17n.org>
+ * image.c (x_find_image_file): Search in etc/images/ rather than etc/.
- * term.c (encode_terminal_buf, encode_terminal_bufsize): New variables.
- (encode_terminal_code): Argument changed. Encode all
- characters at once, and return a pointer to the result of encoding.
- (write_glyphs): Decide coding here. Adjusted for the above change.
- (insert_glyphs): Likewise.
- (term_init): Initialize encode_terminal_bufsize to 0.
+2007-08-22 Paul Pogonyshev <pogonyshev@gmx.net>
- * coding.c (Vcode_conversion_workbuf_name): New variable.
- (syms_of_coding): Initialize and staticpro it.
- (set_conversion_work_buffer): New function.
- (run_pre_post_conversion_on_str): Use it.
- (run_pre_write_conversin_on_c_str): New function.
+ * Makefile.in (ALL_CFLAGS, LIBX): Add RSVG_LIBS.
- * coding.h (run_pre_write_conversin_on_c_str): Extern it.
+ * image.c: Add support for SVG images. Some additional comments
+ by Joakim Verona <joakim@verona.se>. When HAVE_RSVG is defined:
+ (svg_image_p): New function to test for SVG image.
+ (svg_load): New function to load SVG image.
+ (svg_load_image): New function, helper for svg_load.
+ (Qsvg): New Lisp_object.
+ (svg_keyword_index): New enum.
+ (svg_format): New static `image_keyword' struct.
+ (svg_type): New static `image_type' struct.
+ (librsvg/rsvg.h): Include it.
-2004-11-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * keyboard.c: Don't undef SIGIO
- * s/darwin.h (NO_SOCK_SIGIO): Define NO_SOCK_SIGIO on carbon
- * Makefile.in (mac.o): Depend on blockinput.h and atimer.h.
- (macfns.o): Don't depend on ccl.h.
- * macfns.c (mac_frame_parm_handlers): Set handlers for
- Qleft_fringe and Qright_fringe.
- * macterm.c (mac_fill_rectangle_to_pixmap)
- (mac_draw_rectangle_to_pixmap, mac_copy_area_to_pixmap)
- (mac_copy_area_with_mask_to_pixmap, x_draw_image_foreground_1):
- Put in #if 0.
- (mac_scroll_area) [TARGET_API_MAC_CARBON]: Use ScrollWindowRect.
- (x_flush) [TARGET_API_MAC_CARBON]: Don't traverse frames.
- (XFlush) [TARGET_API_MAC_CARBON]: Define to an empty replacement.
- (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
- [!MAC_OS8]: Added ifdef'd out code for os8. Don't use
- XDrawImageString. Always draw background and foreground separately.
- (x_draw_image_foreground): Use clipping instead of computing the
- intersection rectangle.
- (x_draw_image_glyph_string): Don't draw an image with mask to a
- pixmap.
- (x_redisplay_interface): Set flush_display_optional member to 0.
- (XTread_socket): Correctly reset the TEConverter
- object.
-
-2004-11-30 Kim F. Storm <storm@cua.dk>
-
- * lisp.h: New defines to enable buffer overrun checking.
- (GC_CHECK_STRING_OVERRUN, GC_CHECK_STRING_FREE_LIST)
- (XMALLOC_OVERRUN_CHECK, GC_CHECK_CONS_LIST): Add.
-
- * alloc.c: Add more checks for buffer overruns.
- (XMALLOC_OVERRUN_CHECK_SIZE, xmalloc_overrun_check_header)
- xmalloc_overrun_check_trailer, overrun_check_malloc)
- overrun_check_realloc, overrun_check_free): Add.
- (GC_STRING_EXTRA, string_overrun_pattern): Add.
- (check_sblock, allocate_string_data, compact_small_strings):
- Set and check string_overrun_pattern if GC_CHECK_STRING_OVERRUN.
- (check_cons_list): Condition on GC_CHECK_CONS_LIST.
- (check_string_free_list): Add.
- (allocate_string, sweep_strings): Call check_string_free_list.
-
- * emacs.c (malloc_initialize_hook): Don't free malloc_state_ptr if
- XMALLOC_OVERRUN_CHECK to avoid crash during load.
-
-2004-11-29 Kim F. Storm <storm@cua.dk>
-
- * fns.c (concat): Use SAFE_ALLOCA.
-
-2004-11-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * sysdep.c (emacs_write): Don't use QUIT.
-
-2004-11-29 Kenichi Handa <handa@m17n.org>
-
- * buffer.c (init_buffer): Set current_buffer->directory to a
- multibyte string made by string_to_multibyte.
-
- * emacs.c (init_cmdargs): Set unibyte strings in Vcommand_line_args.
-
-2004-11-27 Andreas Schwab <schwab@suse.de>
-
- * alloc.c (mark_stack): Call GC_MARK_SECONDARY_STACK if defined.
-
- * s/gnu-linux.h: Enable no-op gcpros on ia64.
- (GC_MARK_SECONDARY_STACK) [__ia64__]: Define.
-
- * filelock.c (lock_file_1): Call get_boot_time early.
- Increase buffer size.
-
-2004-11-27 Eli Zaretskii <eliz@gnu.org>
-
- * lisp.h (DECL_ALIGN): Define non-trivially only if NO_DECL_ALIGN
- is not defined.
-
-2004-11-27 Kim F. Storm <storm@cua.dk>
-
- * search.c (syms_of_search) <search-spaces-regexp>: Move 'doc:'
- marker out of doc string.
-
-2004-11-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * s/darwin.h (POSIX_SIGNALS): Undo the removal of 2002-08-25,
- which was not mentioned in the log.
-
-2004-11-26 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (update_window_fringes): Prefer truncation bitmaps over
- angle bitmaps at top/bottom line.
-
- * xdisp.c: Undo recent changes for restoring saved_face_id. Instead,
- set it when it->method is set to next_element_from_display_vector.
- (setup_for_ellipsis): Add LEN argument. Callers changed.
- Set it->saved_face_id.
- (get_next_display_element): Use loop instead of recursion.
- Set it->saved_face_id. Combine duplicate code for ctr chars.
- (next_element_from_display_vector): Do not set it->saved_face_id.
- (next_element_from_ellipsis): Use setup_for_ellipsis.
-
-2004-11-26 Eli Zaretskii <eliz@gnu.org>
-
- * eval.c (Fdefvar): Declare pdl from last change as `volatile' to
- prevent compiler warnings.
-
-2004-11-25 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keyboard.c (command_loop_1): Print a message describing the key
- the user just pressed when this key has no binding.
-
- * sysdep.c (sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
- (emacs_open, emacs_read, emacs_write): Check QUIT when interrupted.
-
- * lread.c (readchar): Check QUIT when `getc' is interrupted.
-
-2004-11-24 Richard M. Stallman <rms@gnu.org>
-
- * coding.c (run_pre_post_conversion_on_str): Bind Qinhibit_read_only.
-
- * buffer.c (syms_of_buffer) <indicate-buffer-boundaries>: Doc fix.
-
-2004-11-24 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_in_display_line_to, display_line):
- Restore saved_face_id also when truncate-lines or hscrolled.
-
-2004-11-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_file_name): Rename use-old-gtk-file-dialog to
- x-use-old-gtk-file-dialog.
-
- * xfns.c: Define x_use_old_gtk_file_dialog.
- (syms_of_xfns): Rename use-old-gtk-file-dialog to x-... Move it
- outside ifdef USE_GTK.
-
-2004-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * coding.h (ENCODE_FILE, DECODE_FILE, ENCODE_SYSTEM, DECODE_SYSTEM):
- Don't use XFASTINT blindly.
-
- * config.in (RE_TRANSLATE_P): Don't use XFASTINT blindly.
-
- * indent.c (skip_invisible): Avoid non-idempotent side-effects
- in macro arguments.
-
- * keymap.c (Flookup_key): Check INTEGERP before XINT.
-
- * lread.c (oblookup): Don't use XFASTINT blindly.
-
- * window.c (Fset_window_scroll_bars): Don't use XINT if it isn't int.
- (decode_next_window_args, window_loop): Don't use XFASTINT blindly.
-
-2004-11-23 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P)
- (MATRIX_ROW_STARTS_IN_MIDDLE_OF_CHAR_P): Not if dpvec_index is zero.
-
- * xfaces.c (lookup_named_face): Add signal_p arg. Return -1 if
- signal_p is zero and face name is unknown.
- (Fx_list_fonts): Don't signal error in lookup_named_face.
- (Fface_font): Signal error in lookup_named_face.
- (ascii_face_of_lisp_face): Likewise.
-
- * dispextern.h (lookup_named_face): Fix prototype.
-
- * xdisp.c (handle_single_display_prop): Don't signal error in
- lookup_named_face for unknown fringe face name.
- (highlight_trailing_whitespace): Don't signal error in
- lookup_named_face if trailing-whitespace face unknown.
- (calc_line_height_property): Don't signal error in
- lookup_named_face if specified face name is unknown.
-
- * fringe.c (update_window_fringes): Show top row indicator if
- window has header-line. Don't show arrow at bob and eob
- if the boundary indicators are not used.
- (Fset_fringe_bitmap_face): Signal error in lookup_named_face.
-
- * window.c (set_window_buffer): Clear display_error_modiff.
-
-2004-11-22 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (update_window_fringes): Provide sensible fall-back
- value for non-nil indicate-buffer-boundaries setting.
-
-2004-11-22 Markus Rost <rost@ias.edu>
-
- * minibuf.c (Fminibuffer_complete_and_exit): Fix previous change.
-
-2004-11-22 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * eval.c (Fdefvar): Warn when var is let-bound but globally void.
-
-2004-11-21 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (erase_phys_cursor): Clear hollow cursor inside TEXT_AREA.
-
- * xterm.c (x_clip_to_row): Add area arg. Callers changed.
- (x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
-
- * w32term.c (w32_clip_to_row): Add area arg. Callers changed.
- (x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
-
- * macterm.c (x_clip_to_row): Add area arg. Callers changed.
- (x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
-
- * xdisp.c (move_it_in_display_line_to, display_line):
- Restore saved_face_id if overflow-newline-into-fringe is enabled and
- line is continued before or in middle of element from display vector.
-
- * indent.c (Fvertical_motion): Fix last change. Use another
- method to detect if iterator moved too far ahead after reseat.
-
- * xdisp.c (IT_EXPAND_MATRIX_WIDTH): New macro. Do not
- expand matrix width for overflow in zero-width area.
- (append_glyph, append_composite_glyph, produce_image_glyph)
- (append_stretch_glyph): Use it to avoid loop in redisplay.
- (note_mode_line_or_margin_highlight): Don't let help-echo from
- string override help-echo from image map.
-
-2004-11-20 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Fyes_or_no_p): Call Fread_from_minibuffer with extra argument.
- * callint.c (Fcall_interactively): Ditto.
-
-2004-11-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * minibuf.c (Fminibuffer_complete_and_exit):
- Fixup the case of the completed value, for case-indep completion.
-
-2004-11-20 Richard M. Stallman <rms@gnu.org>
-
- * lisp.h (Fread_from_minibuffer): Add arg in decl.
-
- * minibuf.c (read_minibuf): New arg KEEP_ALL. Callers changed.
- (Fread_from_minibuffer): New arg KEEP_ALL. Callers changed.
-
- * search.c (Vsearch_spaces_regexp):
- Rename from Vsearch_whitespace_regexp. All uses changed.
-
-2004-11-20 Thien-Thi Nguyen <ttn@gnu.org>
-
- * eval.c (init_eval_once): Increase `max_specpdl_size' to 650.
-
-2004-11-19 Richard M. Stallman <rms@gnu.org>
-
- * search.c (Vsearch_whitespace_regexp): New variable.
- (syms_of_search): Defvar it.
- (compile_pattern_1): Call re_set_whitespace_regexp with it.
- (search_buffer): No regexp is trivial if Vsearch_whitespace_regexp
- is non-nil.
- (struct regexp_cache): New element whitespace_regexp.
- (syms_of_search): Initialize whitespace_regexp elements.
- (compile_pattern): Compare whitespace_regexp elements.
- (compile_pattern_1): Set whitespace_regexp elements.
-
- * regex.c (regex_compile): Substitute whitespace_regexp
- for spaces, if it is nonzero.
- (whitespace_regexp): New variable.
- (re_set_whitespace_regexp): New function.
-
-2004-11-19 Kim F. Storm <storm@cua.dk>
-
- * indent.c (Fvertical_motion): Fix last change.
-
-2004-11-18 Kim F. Storm <storm@cua.dk>
-
- * indent.c (Fvertical_motion): Undo 2004-11-16 change.
- Instead, move back again if reseating moves too far ahead.
-
-2004-11-17 Luc Teirlinck <teirllm@auburn.edu>
+2007-08-23 Stefan Monnier <monnier@iro.umontreal.ca>
- * xdisp.c (message3): Call clear_message.
+ * lread.c (load_warn_old_style_backquotes): Fix up array size typo.
-2004-11-17 Kim F. Storm <storm@cua.dk>
+2007-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
- * xdisp.c (erase_phys_cursor): Adjust cursor row visible height.
+ * lread.c (Qold_style_backquotes): New var.
+ (syms_of_lread): Init and staticpro it.
+ (load_warn_old_style_backquotes): New fun.
+ (Fload): Use them to warn about old style backquotes.
+ (end_of_file_error, Fload): Remove unused vars.
-2004-11-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * lisp.h (Fclear_face_cache, Fx_send_client_event): Declare.
- * gtkutil.c (xg_get_file_name): Typo in HAVE_GTK_FILE_SELECTION_NEW.
+ * lread.c (Vold_style_backquotes): New var.
+ (syms_of_lread): Init and export it to Elisp.
+ (read1): Set it when we find an old-style (back)quote.
- * xmenu.c (x_menu_in_use): Remove.
- (x_menu_set_in_use): Also set popup_activated_flag.
+2007-08-22 Jason Rumney <jasonr@gnu.org>
- * xfns.c (Fx_file_dialog): Call popup_activated instead of
- x_menu_in_use. Call x_menu_set_in_use in Motif version also.
+ * w32reg.c (SYSTEM_DEFAULT_RESOURCES): Add missing NULL terminator.
- * xterm.h (x_menu_in_use): Remove.
+2007-08-22 Katsumi Yamaoka <yamaoka@jpl.org>
-2004-11-16 Richard M. Stallman <rms@gnu.org>
+ * puresize.h (BASE_PURESIZE): Increase to 1140000.
- * keymap.c (Fmap_keymap): New arg SORT-FIRST.
- Use map-keymap-internal to implement that.
+2007-08-19 Richard Stallman <rms@gnu.org>
- * indent.c (Fvertical_motion): In batch mode, use vmotion directly.
+ * eval.c (Ffunction, Fquote): Signal error if not 1 argument.
-2004-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-08-19 Andreas Schwab <schwab@suse.de>
- * xdisp.c (get_glyph_string_clip_rect, init_glyph_string): Check it's
- a window before using XWINDOW.
+ * alloc.c (pure): Round PURESIZE up.
- * window.c (make_window, Fselect_window, make_dummy_parent)
- (save_window_save):
- * frame.c (make_frame):
- * fns.c (concat): Avoid side-effects inside XSETFASTINT's arguments.
+2007-08-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * lisp.h (NILP): Use EQ rather than XFASTINT.
+ * xterm.c (handle_one_xevent): Remove check that mouse click is in
+ active frame.
-2004-11-16 Kim F. Storm <storm@cua.dk>
+2007-08-16 Richard Stallman <rms@gnu.org>
- * fringe.c (Fdefine_fringe_bitmap): Always set 'h'. Simplify.
+ * eval.c (Fcommandp): Add parens to clarify.
- * indent.c (Fvertical_motion): Fix last change. Only reseat when
- moving backwards.
+ * minibuf.c (Fall_completions): Use enum for type of table.
-2004-11-16 Luc Teirlinck <teirllm@auburn.edu>
+ * emacs.c (USAGE2): Improve text.
- * dispextern.h: Extern reseat_at_previous_visible_line_start.
+2007-08-15 Philippe Waroquiers <philippe.waroquiers@eurocontrol.int>
-2004-11-16 Kenichi Handa <handa@m17n.org>
+ * term.c (tty_default_color_capabilities): Declare static
+ variables in file scope, to avoid HPUX compiler problem.
- * xdisp.c (display_mode_element): Fix previous change (calculate
- end position of substring to display correctly).
+2007-08-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2004-11-16 Kim F. Storm <storm@cua.dk>
+ * gtkutil.c (update_frame_tool_bar): Use -1 as index
+ to gtk_toolbar_insert.
- * keyboard.c (Fposn_at_point): Remove extra */ after doc string.
- Reported by Andrew M. Scott.
+2007-08-13 Stefan Monnier <monnier@iro.umontreal.ca>
-2004-11-15 Kim F. Storm <storm@cua.dk>
+ * fileio.c (Finsert_file_contents): Yet Another Int/Lisp_Object Mixup.
- * fns.c (Fsafe_plist_get): New defun.
- (syms_of_fns): Defsubr it.
+ * insdel.c (reset_var_on_error): New fun.
+ (signal_before_change, signal_after_change):
+ Use it to reset (after|before)-change-functions to nil in case of error.
+ Bind inhibit-modification-hooks to t.
+ Don't bind (after|before)-change-functions to nil while they run.
- * lisp.h (Fsafe_plist_get): Add EXFUN.
+2007-08-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * xdisp.c (store_mode_line_string, produce_stretch_glyph):
- Use Fsafe_plist_get.
- (note_mode_line_or_margin_highlight, note_mouse_highlight):
- Fix image map element parsing. Use Fsafe_plist_get.
+ * xterm.c (x_draw_image_glyph_string): Adjust stipple origin when
+ filling pixmap with stippled background.
-2004-11-15 Richard M. Stallman <rms@gnu.org>
+2007-08-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * xdisp.c (get_next_display_element): Fix previous change.
+ * macterm.c [TARGET_API_MAC_CARBON] (mac_handle_window_event):
+ Don't use invisible frame as parent window for repositioning.
-2004-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
- * window.c (shrink_windows): Handle special case of one window left
- when trying to shrink the final reminder. Grow windows if
- total_removed is less than total_shrink.
+ * print.c (new_backquote_output): Rename from old_backquote_output.
+ (print): Inverse its logic (according to its name) so as to match the
+ behavior of new_backquote_flag in lread.c.
- * xmenu.c (pop_down_menu): Remove global variable current_menu,
- extract pointer from arg with XSAVE_VALUE.
- (create_and_show_popup_menu, create_and_show_dialog, xmenu_show):
- Construct arg to record_unwind_protect with make_save_value.
+2007-08-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2004-11-13 Richard M. Stallman <rms@gnu.org>
+ * gmalloc.c (posix_memalign): New function.
- * xdisp.c (reseat_at_previous_visible_line_start): No longer static.
- (get_next_display_element): Fix previous change to apply only to \n.
+ * macterm.c (frame_highlight, frame_unhighlight): Don't call
+ ActivateControl/DeactivateControl here.
+ [USE_MAC_TOOLBAR] (free_frame_tool_bar): Suppress animation when
+ frame-notice-user-settings is non-nil.
+ [USE_MAC_FONT_PANEL] (mac_handle_font_event): Also record parameter
+ for kEventParamFMFontStyle.
+ [TARGET_API_MAC_CARBON] (mac_handle_keyboard_event): Don't check
+ mac_pass_command_to_system and mac_pass_control_to_system here.
+ (XTread_socket): Call ActivateControl/DeactivateControl here.
+ (XTread_socket) [TARGET_API_MAC_CARBON]:
+ Check mac_pass_command_to_system and mac_pass_control_to_system here.
+ (mac_handle_window_event) [USE_MAC_TOOLBAR]: Add further workaround
+ for window repositioning.
- * indent.c (Fvertical_motion): Scan to PT from start of line to
- make iterator consistent.
+2007-08-08 Glenn Morris <rgm@gnu.org>
- * minibuf.c (syms_of_minibuf) <completion-ignore-case>: Doc fix.
+ * Replace `iff' in doc-strings and comments.
-2004-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-08-07 Chong Yidong <cyd@stupidchicken.com>
- * gtkutil.c (pop_down_file_dialog): Add BLOCK_INPUT.
+ * xdisp.c (move_it_by_lines): Remove incorrect optimization.
- * xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
- Record unwind with clean_up_file_dialog.
+2007-08-07 Martin Rudalics <rudalics@gmx.at>
- * xterm.h (x_menu_in_use, x_menu_set_in_use, x_menu_wait_for_event):
- Declare.
+ * fileio.c (Finsert_file_contents): Run format-decode and
+ after_insert_file_functions on entire buffer when REPLACE is
+ non-nil and inhibit modification_hooks and point_motion_hooks.
+ For consistency, run after_insert_file_functions iff something
+ got inserted. Move signal_after_change and update_compositions
+ after code running after_insert_file_functions. Make sure that
+ undo_list doesn't record intermediate steps of the decoding process.
- * xmenu.c (x_menu_in_use, x_menu_set_in_use): New functions.
+2007-08-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2004-11-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * emacs.c (main)
+ [HAVE_GTK_AND_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]:
+ Call malloc_enable_thread on interactive startup.
- * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
- (xg_file_sel_destroy): Remove.
- (xg_file_response_cb, pop_down_file_dialog)
- (xg_get_file_name_from_chooser, xg_get_file_name_from_selector):
+ * gmalloc.c (_malloc_thread_enabled_p) [USE_PTHREAD]: New variable.
+ (LOCK, UNLOCK, LOCK_ALIGNED_BLOCKS, UNLOCK_ALIGNED_BLOCKS)
+ [USE_PTHREAD]: Conditionalize with it.
+ (malloc_atfork_handler_prepare, malloc_atfork_handler_parent)
+ (malloc_atfork_handler_child, malloc_enable_thread) [USE_PTHREAD]:
New functions.
- (xg_get_file_with_chooser, xg_get_file_with_selection):
- Take new arg func, set it to xg_get_file_name_from_chooser/selector.
- Move common code to xg_get_file_name. Return widget created.
- (xg_get_file_name): Set name, transient for, modal and destroy
- with parent here. Connect response signal to xg_file_response_cb,
- connect delete-event to gtk_true. Record pop_down_file_dialog
- for unwind. Do event loop and call x_menu_wait_for_event in loop.
- (xg_create_widget): Make dialogs modal.
-
- * xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
- Lisp_Object.
- (popup_get_selection): Move unwind protect ...
- (create_and_show_popup_menu, create_and_show_dialog): ... to here.
- Move destroy of widget to pop_down_menu.
- (popup_widget_loop): Move unwind protect ...
- (create_and_show_popup_menu, create_and_show_dialog): ... to here.
- Move destroy of widget to pop_down_menu.
- (pop_down_menu): BLOCK_INPUT and destroy widget/window.
- (xmenu_show): Record unwind pop_down_menu. Move XMenuDestroy,
- x_mouse_leave and grabbed = 0 to pop_down_menu.
-
-2004-11-13 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (make_cursor_line_fully_visible_p): New variable.
- (syms_of_xdisp): DEFVAR_BOOL it.
- (make_cursor_line_fully_visible, try_cursor_movement)
- (try_window_id): Use it.
-
-2004-11-12 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct glyph_row): New member extra_line_spacing.
- (struct it): New member max_extra_line_spacing.
- (MR_PARTIALLY_VISIBLE, MR_PARTIALLY_VISIBLE_AT_TOP)
- (MR_PARTIALLY_VISIBLE_AT_BOTTOM): New helper macros.
- (MATRIX_ROW_PARTIALLY_VISIBLE_P): Fix to return false if invisible
- part of last line is only extra line spacing (so the text on the
- line is fully visible). Use helper macros.
- Add W arg (to use them). All callers changed.
- (MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P)
- (MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P): Use helper macros.
-
- * window.c (window_scroll_pixel_based, Frecenter):
- Use move_it_vertically_backward directly.
- (Frecenter): Fix calculation of new start pos for negative arg.
- Before, the new start pos was sometimes chosen too far back, so
- the last line became only partially visible, and thus would be
- either only semi-visible or automatically scrolled to the middle
- of the window by redisplay.
-
- * xdisp.c (init_iterator): Clear it.max_extra_line_spacing.
- (move_it_vertically_backward): Don't recure to move further back.
- (move_it_vertically): Remove superfluous condition.
- (move_it_by_lines): Clear last_height when moved 0 lines.
- (resize_mini_window): Use it.max_extra_line_spacing.
- (display_tool_bar_line): Clear row->extra_line_spacing.
- (try_scrolling): Use move_it_vertically_backward directly.
- (redisplay_window): Likewise.
- (compute_line_metrics): Set row->extra_line_spacing.
- (display_line, display_string): Likewise.
- (x_produce_glyphs): Update it->max_extra_line_spacing.
-
- * xmenu.c (pop_down_menu): Return nil.
-
-2004-11-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (x_menu_wait_for_event): New function.
- (popup_get_selection, popup_widget_loop): Call x_menu_wait_for_event
- to handle timers.
- (popup_widget_loop): Add argument do_timers.
- (create_and_show_popup_menu, create_and_show_dialog): Pass 1 for
- do_timers to popup_widget_loop.
- (xmenu_show): Call XMenuActivateSetWaitFunction so that
- x_menu_wait_for_event is called by XMenuActivate.
- (create_and_show_popup_menu): Pass 1 for do_timers to
- popup_get_selection.
- (pop_down_menu): New function.
- (popup_get_selection, popup_widget_loop): Unwind protect to
- pop_down_menu.
- (popup_widget_loop): Add argument widget.
- (create_and_show_popup_menu, create_and_show_dialog): Pass new
- argument widget to popup_widget_loop.
-
-2004-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (Fkeymap_prompt): Accept symbol keymaps.
-
-2004-11-09 Kim F. Storm <storm@cua.dk>
-
- * xselect.c: Include <sys/types.h> and <unistd.h> (for getpid).
- Fix various comments referring to XEvents instead of input events.
- (x_queue_event): Fix format strings.
- (x_stop_queuing_selection_requests): Likewise.
-
- * xdisp.c (produce_image_glyph): Remove unused variable 'face_ascent'.
- (pint2hrstr): Add extra braces to silence compiler.
-
- * print.c (print_object): Fix format string.
-
- * lread.c (read1): Fix next_char matching.
-
- * lisp.h (Fdelete): Add EXFUN.
- (replace_range_2): Add prototype.
-
- * keyboard.c (read_avail_input): Remove unused variable 'discard'.
-
- * intervals.h (NULL_INTERVAL_P): Add separate version when
- ENABLE_CHECKING is not defined to silence compiler.
- (compare_string_intervals): Add prototype.
-
- * fringe.c (destroy_fringe_bitmap): Fix return type.
- (Ffringe_bitmaps_at_pos): Remove unused var 'old_buffer'.
-
- * emacs.c (Fdump_emacs): Fix format string.
-
- * doc.c: Include <ctype.h>.
- (Fsubstitute_command_keys): Remove unused variable 'firstkey'.
-
- * data.c (store_symval_forwarding): Remove unused variables.
-
- * callint.c (Fcall_interactively): Remove unused variable 'funcar'.
-
-2004-11-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * Makefile.in (stamp-oldxmenu): If HAVE_GTK, don't add dependencies
- to ${OLDXMENU}.
-
-2004-11-09 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fmake_network_process): Remove kludge for interrupted
- connects on BSD. If connect is interrupted, just close socket and
- start over rather than sleeping and retry with same socket.
-
-2004-11-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * .cvsignore: Add buildobj.lst.
-
- * doc.c: New variable Vbuild_files.
- (Fsnarf_documentation): If Vbuild_files is nil, populate it with
- file names from buildobj.lst. Only attach docstrings from files
- that are in Vbuild_files.
- (syms_of_doc): Defvar Vbuild_files.
-
- * Makefile.in (SOME_MACHINE_OBJECTS): Add fringe.o, image.o
- and w32*.o.
- (temacs${EXEEXT}): Generate buildobj.lst when temacs is linked.
- (mostlyclean): Rm buildobj.lst
-
- * makefile.w32-in ($(TEMACS)): Generate buildobj.lst when temacs
- is linked.
-
-2004-11-09 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (update_window_fringes): Update fringe bitmaps if
- cur and row ends_at_zv_p differs. If bitmaps of a row is updated,
- also update previous row to get rid of misc. artifacts.
-
-2004-11-08 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (fast_find_position): Fix start pos if header line present.
- (note_mouse_highlight): Clear mouse face if we move out of text area.
-
-2004-11-08 Eli Zaretskii <eliz@gnu.org>
-
- * editfns.c: Move #include "systime.h" before <sys/resource.h>.
- Don't include <sys/time.h> explicitly.
- Include <stdio.h> unconditionally, not just on MacOS.
-
-2004-11-08 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (fontset_pattern_regexp): Cancel my previous change;
- don't pay attention to '\' before '*'.
- (fontset_pattern_regexp): Change the meaning of the second arg.
- (Fnew_fontset): Call fs_query_fontset, not Fquery_fontset.
- (check_fontset_name): Try NAME as literal at first, and if it
- failes, try NAME as pattern.
-
-2004-11-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * emacs.c (Fdump_emacs): Only output warning on GNU/Linux.
-
-2004-11-07 Andreas Schwab <schwab@suse.de>
-
- * lisp.h (Fmsdos_downcase_filename): Declare.
- * dired.c (Fmsdos_downcase_filename): Don't declare here.
- * fileio.c: Likewise.
-
-2004-11-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * dosfns.c (Fdos_memget, Fdos_memput): Use integer variable offs in
- comparisons with integers instead of Lisp_Object address.
- (Fmsdos_set_keyboard): Declare argument allkeys.
-
- * msdos.c (IT_set_frame_parameters): Use EQ, not ==, for Lisp_Object:s.
-
- * dired.c (Fmsdos_downcase_filename): Declare extern on MSDOS to avoid
- int/Lisp_Object mixup.
-
- * fileio.c: Ditto.
-
-2004-11-06 Steven Tamm <steventamm@mac.com>
-
- * editfns.c: Need to include sys/time.h before resource.h on darwin.
-
-2004-11-06 Richard M. Stallman <rms@gnu.org>
-
- * callint.c (Fcall_interactively): Avoid reusing EVENT for other data.
-
- * xfaces.c (merge_named_face): GCPRO the face_name in the
- named_merge_point struct that we make.
- (merge_face_heights): Eliminate GCPRO arg. All callers changed.
-
- * keyboard.c (command_loop_1): Change Vtransient_mark_mode
- before deciding whether to inactivate mark.
-
-2004-11-06 Lars Brinkhoff <lars@nocrew.org>
-
- * config.in: Regenerate (add HAVE_GETRUSAGE).
- * editfns.c (Fget_internal_run_time): New function.
- (syms_of_data): Defsubr it.
- * fns.c (sxhash): As far as possible, merge calculation of
- hash code for symbols and strings.
-
-2004-11-06 Eli Zaretskii <eliz@gnu.org>
-
- * frame.c (syms_of_frame): Fix the example in the doc string.
-
-2004-11-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * eval.c (Feval): Remove check for INPUT_BLOCKED_P.
-
- * xmenu.c (popup_get_selection, create_and_show_popup_menu)
- (create_and_show_dialog): Revert change from 2004-10-31.
-
-2004-11-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * macros.c (syms_of_macros) <defining-kbd-macro>: Doc fix.
-
-2004-11-05 Kim F. Storm <storm@cua.dk>
-
- * print.c (print_object): Print Lisp_Misc_Save_Value objects.
-
- * fileio.c (Ffile_modes): Doc fix.
- (auto_save_1): Check for Ffile_modes nil value.
-
-2004-11-05 Kim F. Storm <storm@cua.dk>
-
- * xselect.c (struct selection_event_queue, selection_queue)
- (x_queue_selection_requests, x_queue_event)
- (x_start_queuing_selection_requests)
- (x_stop_queuing_selection_requests): Add new queue for selection
- input events to replace previous XEvent queue in xterm.c.
- (queue_selection_requests_unwind): Adapt to new queue.
- (x_reply_selection_request): Adapt to new queue.
- Unexpect wait_object in case of x errors (memory leak).
- (x_handle_selection_request, x_handle_selection_clear): Make static.
- (x_handle_selection_event): New function. May queue selection events.
- (wait_for_property_change_unwind): Use save_value instead of cons.
- Clear property_change_reply_object.
- (wait_for_property_change): Abort if already waiting.
- Use save_value instead of cons for unwind data.
- (x_handle_property_notify): Skip events already arrived, but don't
- free them, as "arrived" field is checked by wait_for_property_change,
- and it will be freed by unwind or explicit unexpect_property_change.
- (x_get_foreign_selection): Add to new queue.
- (receive_incremental_selection): Don't unexpect wait_object when done
- as it has already been freed by previous wait_for_property_change.
-
- * xterm.h (x_start_queuing_selection_requests)
- (x_stop_queuing_selection_requests, x_handle_selection_request)
- (x_handle_selection_clear): Remove prototypes.
- (x_handle_selection_event): Add prototype.
-
- * xterm.c (handle_one_xevent): Don't queue X selection events
- here, it may be too late if we start queuing after we have already
- stored some selection events into the kbd buffer.
- (struct selection_event_queue, queue, x_queue_selection_requests)
- (x_queue_event, x_unqueue_events, x_start_queuing_selection_requests)
- (x_stop_queuing_selection_requests): Remove/move to xselect.c.
- (x_catch_errors_unwind): Block input around final XSync.
-
- * keyboard.h (kbd_buffer_unget_event): Add prototype.
-
- * keyboard.c (kbd_buffer_store_event_hold): Remove obsolete code.
- (kbd_buffer_unget_event): New function.
- (kbd_buffer_get_event, swallow_events): Combine SELECTION events
- and use x_handle_selection_event.
- (mark_kboards): Don't mark x and y of SELECTION_CLEAR_EVENT.
-
-2004-11-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (TRACE3): New debug macro.
- (x_reply_selection_request): Use it.
- (receive_incremental_selection): In call to TRACE0, the name of
- a symbol is in xname.
-
-2004-11-05 Kim F. Storm <storm@cua.dk>
-
- * fontset.c (fontset_pattern_regexp): Use unsigned char.
-
-2004-11-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * fileio.c (Fnext_read_file_uses_dialog_p): New function.
-
- * gtkutil.h (use_old_gtk_file_dialog): Declare.
-
- * gtkutil.c: Make use_old_gtk_file_dialog non-static.
- (xg_initialize): Move DEFVAR_BOOL for use_old_gtk_file_dialog ...
- * xfns.c (syms_of_xfns): ... to here.
-
- * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
- it doesn't start with /.
-
-2004-11-04 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (fontset_pattern_regexp): If '*' is preceded by '\',
- treat it as a literal character.
-
-2004-11-03 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (ppt): New function.
-
-2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_window_to_scroll_bar): Only call
- xg_get_scroll_id_for_window if toolkit scroll bars are used.
-
- * gtkutil.c (xg_get_file_with_chooser): Use GTK_STOCK_OK instead
- of save.
-
-2004-11-02 Andreas Schwab <schwab@suse.de>
-
- * window.c (Fscroll_right): Fix last change.
-
-2004-11-02 Kim F. Storm <storm@cua.dk>
-
- * Makefile.in (callproc.o): Depend on blockinput.h, atimer.h, systime.h.
-
-2004-11-02 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * callproc.c (Fcall_process): Block input around vfork.
-
-2004-11-02 Kim F. Storm <storm@cua.dk>
-
- * eval.c (Fcalled_interactively_p): Rename from Fcall_interactive_p.
- (syms_of_eval): Defsubr it.
-
-2004-11-02 Richard M. Stallman <rms@gnu.org>
-
- * insdel.c (replace_range_2): New function.
-
- * casefiddle.c (casify_region): Handle changes in byte-length
- using replace_range_2.
-
- * emacs.c (USAGE3): Delete --horizontal-scroll-bars, -hb.
-
- * xdisp.c (back_to_previous_visible_line_start):
- Subtract 1 from pos when checking previous newline for invisibility.
-
- * window.c (window_scroll_pixel_based): Update preserve_y
- for header line if any.
- (Fscroll_left, Fscroll_right): Don't call interactive_p;
- use a new second argument instead.
-
- * eval.c (Fcall_interactive_p): New function.
- (interactive_p): Don't test INTERACTIVE here.
- (Finteractive_p): Doc fix.
-
- * eval.c (Feval): Abort if INPUT_BLOCKED_P.
-
-2004-11-02 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
-
- * w32fns.c (w32_font_match): Use fast_string_match_ignore_case for
- comparing font names.
-
-2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
- Fx_file_dialog if only directories should be read.
-
- * lisp.h: Fx_file_dialog takes 5 parameters.
-
- * xfns.c (Fx_file_dialog): Both Motif and GTK version:
- Add parameter only_dir_p.
- In Motif version, don't put DEFAULT_FILENAME in filter part of the
- dialog, just text field part. Do not add DEFAULT_FILENAME
- to list of files if it isn't there.
- In GTK version, pass only_dir_p parameter to xg_get_file_name.
-
- * macfns.c (Fx_file_dialog): Add parameter only_dir_p.
- Check only_dir_p instead of comparing prompt to "Dired". When using
- a save dialog, add option kNavDontConfirmReplacement, change title
- to "Enter name", change text for save button to "Ok".
-
- * w32fns.c (Fx_file_dialog): Add parameter only_dir_p.
- Check only_dir_p instead of comparing prompt to "Dired".
-
- * gtkutil.c (xg_get_file_with_chooser, xg_get_file_with_selection):
- New functions, only defined ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
- and HAVE_GTK_FILE_SELECTION_NEW respectively.
- (xg_get_file_name): Add parameter only_dir_p.
- Call xg_get_file_with_chooser or xg_get_file_with_selection
- depending on HAVE_GTK_FILE* and the value of use_old_gtk_file_dialog.
- (xg_initialize): New DEFVAR_BOOL use_old_gtk_file_dialog.
-
- * gtkutil.h (xg_get_file_name): Add parameter only_dir_p.
-
- * config.in: Rebuild (added HAVE_GTK_FILE_*).
-
-2004-11-01 Kim F. Storm <storm@cua.dk>
-
- * process.c (connect_wait_mask, num_pending_connects):
- Only declare and use them if NON_BLOCKING_CONNECT is defined.
- (init_process): Initialize them if NON_BLOCKING_CONNECT defined.
- (IF_NON_BLOCKING_CONNECT): New helper macro.
- (wait_reading_process_output): Only declare and use local vars
- Connecting and check_connect when NON_BLOCKING_CONNECT is defined.
-
-2004-11-01 Andy Petrusenco <Igrek@star-sw.com> (tiny change)
-
- * w32term.c (x_scroll_run): Delete region objects after use.
-
-2004-10-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c: Add prototypes for forward function declarations.
- (popup_get_selection): Remove parameter do_timers, remove call to
- timer_check.
- (create_and_show_popup_menu, create_and_show_dialog):
- Remove parameter do_timers from call to popup_get_selection.
-
- * xdisp.c (update_tool_bar): Pass a copy of f->tool_bar_items to
- tool_bar_items and assign the result to f->tool_bar_items if
- not equal. Move BLOCK/UNBLOCK_INPUT from around call to
- tool_bar_items to assignment of result.
-
- * atimer.c (alarm_signal_handler): Do not call set_alarm if
- pending_atimers is non-zero.
-
-2004-10-31 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (margin_glyphs_to_reserve): Don't use ncols_scale_factor.
-
-2004-10-28 Will <will@glozer.net>
-
- * macterm.c: Allow user to assign key modifiers to the Mac Option
- key via a 'mac-option-modifier' variable.
-2004-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xselect.c (Vx_lost_selection_functions, Vx_sent_selection_functions):
- Rename from Vx_lost_selection_hooks and Vx_sent_selection_hooks.
- (x_handle_selection_request, x_handle_selection_clear)
- (x_clear_frame_selections, syms_of_xselect): Adjust accordingly.
-
-2004-10-28 Richard M. Stallman <rms@gnu.org>
-
- * w32fns.c (Fx_server_vendor, Fx_server_version): Doc fixes.
-
- * xfns.c (Fx_server_vendor, Fx_server_version): Doc fixes.
-
-2004-10-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (scan_sexps_forward): Give precedence to a 2-char
- comment-starter over a 1-char one.
-
-2004-10-27 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (get_next_display_element): In mode lines,
- treat newline and tab like other control characters.
-
- * editfns.c (Fmessage): Doc fix.
-
- * indent.c (vmotion): When moving up, check the newline before.
- Make prevline an int, not a Lisp_Object.
-
-2004-10-27 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Fformat): Allocate discarded table with SAFE_ALLOCA.
- Only allocate info and discarded tables once.
-
- * lisp.h (USE_SAFE_ALLOCA): Add and init sa_must_free integer.
- (SAFE_ALLOCA, SAFE_ALLOCA_LISP): Increment it when malloc is used.
- (SAFE_FREE): Test it to determine if we need to unwind to free.
- Remove size arg. All users changed.
- (SAFE_FREE_LISP) Remove. All users changed to use SAFE_FREE.
-
-2004-10-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c: Put empty line between comment and function body.
- (xg_destroy_widgets): Rename from remove_from_container.
- Just destroy all widgets in list. Argument wcont removed.
- (xg_update_menubar, xg_update_submenu): Call xg_destroy_widgets
- instead of remove_from_container.
- (xg_display_close, xg_create_tool_bar, update_frame_tool_bar)
- (free_frame_tool_bar): Add comment.
-
- * xfns.c (xic_create_xfontset): Check that FRAME_XIC_BASE_FONTNAME
- is not NULL before strcmp.
-
-2004-10-26 Kim F. Storm <storm@cua.dk>
-
- * callint.c (Fcall_interactively): Add 'U' code to get the
- up-event discarded by a previous 'k' or 'K' argument.
-
-2004-10-26 David Kastrup <dak@gnu.org>
-
- * buffer.c (syms_of_buffer): Fix a few typos.
-
-2004-10-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xsmfns.c: Put empty line between comment and function body.
- Use two spaces before comment end.
-
-2004-10-25 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (fontset_pattern_regexp): Optimize for the case that
- PATTERN is full XLFD.
-
-2004-10-24 Kenichi Handa <handa@m17n.org>
-
- * regex.h (enum reg_errcode_t): New value REG_ERANGEX.
-
- * regex.c (re_error_msgid): Add an entry for REG_ERANGEX.
- (regex_compile): Return REG_ERANGEX if appropriate.
-
-2004-10-22 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Ftranslate_region_internal): New function.
- (syms_of_editfns): Defsubr it.
-
-2004-10-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (xic_create_xfontset): Initialize missing_list to NULL.
-
-2004-10-21 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * xterm.h (x_output): New member `xic_base_fontname'.
- (FRAME_XIC_BASE_FONTNAME): New macro.
- (xic_free_xfontset): Declare.
-
- * xfns.c (xic_create_xfontset): Share fontsets between frames
- based on base_fontname.
- (xic_free_xfontset): New function.
- (free_frame_xic): Use it.
- (xic_set_xfontset): Ditto.
-
- * xterm.c (xim_destroy_callback): Ditto.
-
-2004-10-20 B. Anyos <banyos@freemail.hu> (tiny change)
-
- * w32term.c (x_draw_glyph_string): Use overline_color for overlines.
-
-2004-10-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (XSync): If USE_GTK, define XSync as process_all and then
- XSync.
-
- * emacs.c (my_heap_start, heap_bss_diff, MAX_HEAP_BSS_DIFF):
- New variables and constant.
- (main): Calculate heap_bss_diff. If we are dumping and the
- heap_bss_diff is greater than MAX_HEAP_BSS_DIFF, set PER_LINUX32
- and exec ourself again.
- (Fdump_emacs): If heap_bss_diff is greater than MAX_HEAP_BSS_DIFF
- print a warning.
-
- * lastfile.c: Make my_endbss and my_endbss_static available on all
- platforms.
-
- * Makefile.in (RUN_TEMACS): Remove @SETARCH@.
- * config.in (HAVE_PERSONALITY_LINUX32): Regenerate.
-
-2004-10-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * data.c (Flocal_variable_if_set_p): Doc fix.
-
-2004-10-19 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (init_environment): Set emacs_dir correctly when running
- emacs from the build directory.
-
-2004-10-19 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fdelete_and_extract_region):
- If region is empty, return null string.
-
-2004-10-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.h (xg_update_scrollbar_pos): Remove arguments real_left
- and canon_width.
- (xg_frame_cleared): Remove.
-
- * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose)
- (xg_find_top_left_in_fixed): Remove.
- (xg_create_scroll_bar): Put an event box widget between
- the scroll bar widget and the edit widget.
- (xg_show_scroll_bar): Show the parent widget (the event box).
- (xg_remove_scroll_bar): Destroy parent (the event box) also.
- (xg_update_scrollbar_pos): Remove arguments real_left and canon_width.
- Move the parent (the event box) widget inside the fixed widget.
- Move window clear to xterm.c.
-
- * gtkutil.h (xg_frame_cleared): Remove.
-
- * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
- (x_scroll_bar_create, XTset_vertical_scroll_bar):
- Remove arguments left and width to xg_update_scrollbar_pos.
- (XTset_vertical_scroll_bar): Do x_clear_area for USE_GTK also.
-
-2004-10-19 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (display_mode_element): Fix display of wide chars.
-
-2004-10-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-08-06 Chong Yidong <cyd@stupidchicken.com>
- * gtkutil.c (xg_update_scrollbar_pos): Change XClearWindow to
- gdk_window_clear and move gdk_window_process_all_updates after
- clear so events are sent to the X server in correct order.
+ * xdisp.c (redisplay_window): When restoring original buffer
+ position, make sure it is still valid.
-2004-10-18 Kenichi Handa <handa@m17n.org>
+ * image.c (png_load): Ignore png-supplied background color.
- * fontset.c (fs_load_font): Use fast_string_match_ignore_case for
- comparing font names.
- (fs_query_fontset): Use fast_string_match for comparing fontset names.
- (list_fontsets): Likewise.
+2007-08-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * search.c (fast_string_match_ignore_case): New function.
+ * mac.c [TARGET_API_MAC_CARBON] (cfdate_to_lisp): Obtain microsec value.
+ Use kCFAbsoluteTimeIntervalSince1970.
- * lisp.h (fast_string_match_ignore_case): Extern it.
+ * macmenu.c (quit_dialog_event_loop) [TARGET_API_MAC_CARBON]:
+ New variable.
+ [TARGET_API_MAC_CARBON] (mac_handle_dialog_event): Set it if dialog
+ event loop should be quit.
+ [TARGET_API_MAC_CARBON] (create_and_show_dialog) [!MAC_OSX]:
+ Quit dialog event loop if quit_dialog_event_loop is set.
+
+ * macselect.c [!TARGET_API_MAC_CARBON]: Include Scrap.h.
+ (Selection): New typedef. Use instead of ScrapRef.
+ (mac_get_selection_from_symbol): Rename from get_scrap_from_symbol.
+ (mac_valid_selection_target_p): Rename from valid_scrap_target_type_p.
+ (mac_clear_selection): Rename from clear_scrap.
+ (get_flavor_type_from_symbol): New argument SEL and subsume function of
+ scrap_has_target_type. All uses changed.
+ (mac_get_selection_ownership_info, mac_valid_selection_value_p)
+ (mac_selection_has_target_p): New functions.
+ (mac_put_selection_value): Rename from put_scrap_string.
+ (mac_get_selection_value): Rename from get_scrap_string.
+ (mac_get_selection_target_list): Rename from get_scrap_target_type_list.
+ (put_scrap_private_timestamp, scrap_has_target_type)
+ (get_scrap_private_timestamp): Remove functions.
+ (SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP): Remove define.
+ (x_own_selection, x_get_local_selection):
+ Use mac_valid_selection_value_p.
+ (x_own_selection): Don't use put_scrap_private_timestamp.
+ Record OWNERSHIP-INFO into Vselection_alist instead.
+ (x_get_local_selection): Don't check type if request is local.
+ (Fx_selection_owner_p): Don't use get_scrap_private_timestamp.
+ Detect ownership change with OWNERSHIP-INFO in Vselection_alist instead.
+
+2007-08-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_callback): Generate two TOOL_BAR_EVENT:s,
+ add comment explaining why.
-2004-10-17 Kim F. Storm <storm@cua.dk>
+2007-08-03 Richard Stallman <rms@gnu.org>
- * xdisp.c (overlay_arrow_at_row): Return overlay string rather
- than bitmap if there is not left fringe.
- (get_overlay_arrow_glyph_row): Also used on windows system.
- (display_line): Display overlay string if no left fringe.
+ * fileio.c (Fvisited_file_modtime): Use make_time.
-2004-10-16 Jason Rumney <jasonr@gnu.org>
+2007-08-01 Ryo Yoshitake <ryo@shiftmode.net> (tiny change)
- * w32fns.c (w32_font_match): Encode font name being matched.
+ * mac.c (init_mac_osx_environment): Adjust load-path on self-contained
+ build.
-2004-10-16 Richard M. Stallman <rms@gnu.org>
+2007-07-31 Stefan Monnier <monnier@iro.umontreal.ca>
- * window.c (Fspecial_display_p): Doc fix.
+ * gtkutil.c (xg_tool_bar_callback): Generate a single TOOL_BAR_EVENT.
-2004-10-15 Stefan Monnier <monnier@iro.umontreal.ca>
+2007-07-30 Katsumi Yamaoka <yamaoka@jpl.org>
- * doc.c (Fsubstitute_command_keys): Fix remap-handling.
- Don't ignore menus, because where-is-internal already does it for us.
+ * puresize.h (BASE_PURESIZE): Increase to 1130000.
-2004-10-15 Kim F. Storm <storm@cua.dk>
+2007-07-30 Richard Stallman <rms@gnu.org>
- * xdisp.c (redisplay_window): Only update fringes and vertical
- border on window frames.
+ * lread.c (readevalloop, read1): Treat NBSP as whitespace.
-2004-10-14 Andreas Schwab <schwab@suse.de>
+2007-07-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * m/ia64.h (DATA_SEG_BITS): Don't define.
+ * gmalloc.c (__malloc_initialize): Remove pthread_once. Not needed.
-2004-10-14 Kim F. Storm <storm@cua.dk>
+2007-07-28 Nick Roberts <nickrob@snap.net.nz>
- * xterm.h: Include Xutil.h after keysym.h to work around bug
- in some X versions.
+ * xdisp.c (decode_mode_spec): Use '@' instead of 'R' to test for
+ remote default-directory.
-2004-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+ * buffer.c (mode-line-format): Update doc string.
- * fns.c (map_char_table): Add missing gcpros.
+2007-07-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2004-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+ * w32term.c (w32_draw_fringe_bitmap): Extend fringe background to
+ scroll bar gap.
+ (x_scroll_bar_create): Set bar->fringe_extended_p.
+ (w32_set_vertical_scroll_bar): Put leftmost/rightmost scroll bars
+ on frame edge. Check fringe background extension. Don't clear
+ extended fringe background area.
- * keymap.c (get_keymap): An autoload form is not a keymap.
+ * w32term.h (struct scroll_bar): New member fringe_extended_p.
+ (w32_fill_area): Enclose multiple statements with do ... while (0).
- * textprop.c (syms_of_textprop): Make `syntax-table' nonsticky.
+ * xterm.c (x_draw_fringe_bitmap) [USE_TOOLKIT_SCROLL_BARS]:
+ Extend fringe background to scroll bar gap.
+ (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]:
+ Set bar->fringe_extended_p.
+ (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
+ Put leftmost/rightmost scroll bars on frame edge. Check fringe
+ background extension. Don't clear extended fringe background area.
-2004-10-13 Kim F. Storm <storm@cua.dk>
+ * xterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
+ New member fringe_extended_p.
- * callproc.c (Fcall_process): Simplify handling of display arg.
- Resume `display_on_the_fly' once a coding system is determined.
+2007-07-25 Glenn Morris <rgm@gnu.org>
- * xdisp.c (redisplay_preserve_echo_area): Fix last change.
+ * Relicense all FSF files to GPLv3 or later.
-2004-10-12 Kim F. Storm <storm@cua.dk>
+ * COPYING: Switch to GPLv3.
- * xdisp.c (redisplay_preserve_echo_area): Flush display in case
- caller, such as call-process, is not going to poll for input.
- (calc_line_height_property): Handle case where it->object is nil.
+2007-07-25 Stefan Monnier <monnier@iro.umontreal.ca>
- * xterm.c (x_redisplay_interface): Fix flush_display_optional.
+ * eval.c (Fcommandp): Pay attention to the `interactive-form' property.
-2004-10-12 Kenichi Handa <handa@m17n.org>
+ * data.c (Finteractive_form): Check for the presence of an
+ `interactive-form' symbol property more thoroughly.
- * xdisp.c (get_next_display_element):
- If unibyte_display_via_language_environment is zero, display 8-bit
- chars in octal in unibyte buffer.
+ * data.c (Finteractive_form): Use an `interactive-form' property if
+ present, analogous to the function-documentation property.
-2004-10-12 Kim F. Storm <storm@cua.dk>
+2007-07-24 Jason Rumney <jasonr@gnu.org>
- * doc.c (Fsubstitute_command_keys): Ignore remappings unless there
- are no ordinary bindings.
+ * w32fns.c (x_real_positions): Get real position from OS instead of
+ calculating it.
-2004-10-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-07-23 Jason Rumney <jasonr@gnu.org>
- * xfns.c (syms_of_xfns): Defsubr x-file-dialog for GTK also.
+ * filelock.c (current_lock_owner): Allow for @ sign in username.
-2004-10-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-07-22 Nick Roberts <nickrob@snap.net.nz>
- * macterm.c (x_raise_frame): Add BLOCK_INPUT around SelectWindow.
- (x_lower_frame): Add BLOCK_INPUT around SendBehind.
- (make_mac_frame): Add BLOCK_INPUT around the making of a
- terminal frame.
- (mac_initialize): Add BLOCK_INPUT around carbon initialization.
- * macgui.h (mktime): Use emacs_mktime.
- * macfns.c (Fx_file_dialog): Add BLOCK_INPUT around more code.
- Make a cancel file-open dialog be like C-g.
- * mac.c (mktime): Use emacs_mktime.
- (Fdo_applescript): Add BLOCK_INPUT around do_applescript.
- (Fmac_paste_function): Add better error handling for carbon cut/paste.
+ * xdisp.c (decode_mode_spec): Add case 'R' for to test for
+ remote default-directory.
-2004-10-10 Kim F. Storm <storm@cua.dk>
+ * buffer.c (mode-line-format): Describe above case in doc string.
- * keyboard.c (timer_resume_idle): New function to resume idle
- timer without resetting timers on the idle list.
- (read_char): Use timer_resume_idle. Remove local var last_idle_start.
- (timer_start_idle, timer_stop_idle): Declare static.
- (read_key_sequence): Use timer_resume_idle instead of timer_start_idle.
+2007-07-20 Eli Zaretskii <eliz@gnu.org>
- * keyboard.h (timer_start_idle, timer_stop_idle): Remove prototypes.
+ * w32proc.c (IMAGE_NT_OPTIONAL_HDR32_MAGIC, IMAGE_OPTIONAL_HEADER32):
+ Define if not defined.
-2004-10-08 Steven Tamm <steventamm@mac.com>
+2007-07-18 Jason Rumney <jasonr@gnu.org>
- * config.in (HAVE_MALLOC_MALLOC_H): Regenerate.
- * macterm.c (mac_check_for_quit_char): Remove warning for using
- NULL where 0 should be used.
- * unexmacosx.c: Use malloc/malloc.h on Tiger instead of
- objc/malloc.h
- * mac.c: Include time.h for Tiger compatibility.
+ * w32proc.c (w32_executable_type): Handle 64 bit executables.
-2004-10-07 Kim F. Storm <storm@cua.dk>
+2007-07-18 Richard Stallman <rms@gnu.org>
- * xdisp.c (redisplay_window): Fix flicker on vertical line between
- windows. Update vertical line after drawing window fringes, but
- only if actually drawing any bitmaps--or there is no fringe.
+ * data.c (Fsetq_default): Doc fix.
- * xterm.c (x_update_window_end): Likewise.
- * macterm.c (x_update_window_end): Likewise.
- * w32term.c (x_update_window_end): Likewise.
+ * eval.c (Fsetq): Doc fix.
- * fringe.c (draw_window_fringes): Return value now indicates if
- any fringe bitmaps were redrawn (or there are no fringes).
+2007-07-18 Juanma Barranquero <lekktu@gmail.com>
- * dispextern.h (draw_window_fringes): Update prototype.
+ * coding.c (Ffind_operation_coding_system):
+ * eval.c (For, Fand): Doc fixes.
+ Reported by Johan Bockg,Ae(Brd.
-2004-10-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+2007-07-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * macfns.c (mac_get_window_bounds): Add extern.
- (x_real_positions): Use mac_get_window_bounds.
+ * xfns.c (Fx_focus_frame): Call x_ewmh_activate_frame.
- * macmenu.c (update_submenu_strings): Apply 2004-09-07 change for
- xmenu.c (YAILOM).
+ * xterm.h: Declare x_ewmh_activate_frame.
- * macterm.c [!MAC_OSX]: Include Windows.h.
- (front_emacs_window): Rename from mac_front_window. All uses
- changed. Return the frontmost non-tooltip emacs window.
- (mac_get_window_bounds): New function.
- (x_calc_absolute_position): Use the difference of width and height
- between the inner and outer window.
- (x_set_offset): Specify window position by the coordinae of the
- outer window. Adjust the position if the title bar is completely
- outside the screen.
- (app_is_suspended, app_sleep_time): Remove unused variables.
- (do_app_resume, do_app_suspend): Remove their contents because
- window-activate/deactivate events will do the job.
- (do_zoom_window): Remove unused variables. Make compliant to the
- standard way of zooming. Set f->left_pos and f->top_pos.
- (XTread_socket): Don't use argument `expected'. Don't use
- FrontWindow to determine the clicked window. Exclude unprocessed
- mouseUp cases in the early stage. Add parentheses to fix operator
- precedence.
- (XTread_socket) [TARGET_API_MAC_CARBON]: Don't specify drag area.
+ * xterm.c (x_ewmh_activate_frame): New function.
+ (XTframe_raise_lower): Move code to x_ewmh_activate_frame.
-2004-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+2007-07-17 Martin Rudalics <rudalics@gmx.at>
- * config.in: Regenerate.
+ * window.c (Fdisplay_buffer): If largest or LRU window is the
+ only window, split it even if it is not eligible for splitting.
+ This restores the original behavior broken by the 2007-07-15
+ change.
- * Makefile.in (RUN_TEMACS): Check HAVE_RANDOM_HEAPSTART instead of
- HAVE_EXECSHIELD.
+2007-07-17 Glenn Morris <rgm@gnu.org>
-2004-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * abbrev.c (abbrev_check_chars): New function.
+ (Fdefine_global_abbrev, Fdefine_mode_abbrev):
+ Call abbrev_check_chars to check abbrev characters are word
+ constituents. Doc fix.
- * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
- a row if Alt or Meta has been found for that row. Also stop scanning
- for Keysyms for that row.
+2007-07-17 Stefan Monnier <monnier@iro.umontreal.ca>
-2004-10-04 Kim F. Storm <storm@cua.dk>
+ * process.c (Fstart_process, Fmake_network_process)
+ (read_process_output): Fix up last changes.
- * fringe.c (Ffringe_bitmaps_at_pos): Change return value from cons
- to list. Include overlay arrow bitmap in return value.
+2007-07-16 Eli Zaretskii <eliz@gnu.org>
- * xterm.c (XTset_vertical_scroll_bar): Improve handling of scroll
- bars with fractional column width. If scroll bar separates two
- windows, move it towards the window it belongs to. Only update
- the padding area below the scroll bar widget when necessary,
- i.e. when scroll bar widget is created, moved, or resized.
+ * makefile.w32-in (clean): Don't delete *~.
- * xdisp.c (define_frame_cursor1): Do not change frame cursor
- while tracking/dragging mouse.
- (x_draw_vertical_border): Do not draw line if frame has scroll bars.
+2007-07-16 Andreas Schwab <schwab@suse.de>
- * window.c (coordinates_in_window): Relax check for cursor
- on vertial border between mode lines.
- (Fset_window_fringes): Do not allow negative widths.
+ * window.c (Fdisplay_buffer): Use NILP.
(Fset_window_scroll_bars): Likewise.
- * .gdbinit (pp): Shorthand for p ARG + pr.
- (ff): New command: flush frame updates (X only).
-
-2004-10-03 Michael Albinus <michael.albinus@gmx.de>
-
- * fileio.c (auto_save_1) Call Ffile_modes for remote files.
-
-2004-09-30 Kenichi Handa <handa@m17n.org>
-
- * process.c (send_process): Free composition data.
-
- * fileio.c (Finsert_file_contents): Free composition data.
-
- * coding.c (code_convert_region): Don't skip ASCIIs if there are
- compositions to encode.
- (encode_coding_string): Likewise. Free composition data.
-
-2004-09-30 Florian Weimer <fw@deneb.enyo.de>
-
- * coding.c (code_convert_region): Free composition data.
-
-2004-09-29 Kim F. Storm <storm@cua.dk>
-
- * fringe.c: Remove limit on number of bitmaps.
- (fringe_bitmaps, fringe_faces): Change to pointers.
- (max_fringe_bitmaps): New var.
- (Fdefine_fringe_bitmap): Expand fringe_bitmaps and fringe_faces.
- (init_fringe): Allocate fringe_bitmaps and fringe_faces.
-
- * dispextern.h (FRINGE_ID_BITS): Increase to 16 bits (64K bitmaps).
- (struct glyph_row): Reorder fringe_bitmap related fields.
- (struct it): Likewise.
-
- * w32term.c (fringe_bmp): Change to pointer.
- (max_fringe_bmp): New var.
- (w32_define_fringe_bitmap): Expand fringe_bmp.
- (w32_draw_fringe_bitmap): Check max_fringe_bmp.
- (w32_destroy_fringe_bitmap): Likewise.
-
-2004-09-29 Kim F. Storm <storm@cua.dk>
-
- * fringe.c: Simplify last change.
- (lookup_fringe_bitmap): New function.
- (valid_fringe_bitmap_p, resolve_fringe_bitmap): Remove.
- (Fdestroy_fringe_bitmap): Use lookup_fringe_bitmap.
- Keep standard bitmaps in Vfringe_bitmaps.
- (Fdefine_fringe_bitmap): Use lookup_fringe_bitmap.
- (Fset_fringe_bitmap_face): Likewise.
-
- * dispextern.h (lookup_fringe_bitmap): Add prototype.
- (valid_fringe_bitmap_p): Remove prototype.
-
- * xdisp.c (handle_single_display_prop): Use lookup_fringe_bitmap.
-
-2004-09-29 Kim F. Storm <storm@cua.dk>
-
- * fringe.c (destroy_fringe_bitmap, init_fringe_bitmap)
- (w32_init_fringe, w32_reset_fringes): Fix bootstrap (NULL rif).
-
- * dispextern.h (valid_fringe_bitmap_p): Fix prototype.
-
- * fringe.c (Vfringe_bitmaps): New variable.
- (syms_of_fringe): DEFVAR_LISP it.
- (valid_fringe_bitmap_p): Rename from valid_fringe_bitmap_id_p.
- Change arg to Lisp_Object and fail if not an integer.
- (get_fringe_bitmap_name, resolve_fringe_bitmap)
- (destroy_fringe_bitmap): New functions.
- (Fdestroy_fringe_bitmap): Change arg to bitmap symbol.
- Use destroy_fringe_bitmap. Remove symbol from Vfringe_bitmaps and
- clear its fringe property.
- (init_fringe_bitmap): Use destroy_fringe_bitmap instead of
- Fdestroy_fringe_bitmap.
- (Fdefine_fringe_bitmap): Add BITMAP arg specifying new or existing
- bitmap symbol; remove WHICH arg. Add symbol to Vfringe_bitmaps
- and set fringe property. Signal error if no free slots.
- (Fset_fringe_bitmap_face): Change arg to bitmap symbol.
- (Ffringe_bitmaps_at_pos): Return bitmap symbols instead of numbers.
-
- * xdisp.c (handle_single_display_prop): Fringe bitmaps are now
- symbols with a fringe property.
-
-2004-09-27 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (syms_of_buffer) <indicate-buffer-boundaries>:
- Doc fix. Format may now be a symbol or alist, not a cons.
-
- * fringe.c (update_window_fringes): Handle new formats of
- indicate-buffer-boundaries (symbol or alist). No longer
- allow a simple cons.
- (Ffringe_bitmaps_at_pos): Use nil value for no bitmap.
-
-2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * config.in: Rebuild.
-
-2004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * config.in: Rebuild.
-
- * Makefile.in: Run setarch i386 ./temacs if exec-shield is present.
-
-2004-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c (x_term_init): Work around a bug in some X servers.
-
-2004-09-18 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer) <default-major-mode>: Doc fix.
-
- * xdisp.c (try_window_reusing_current_matrix):
- Handle the case where we reach the old displayed text,
- out of sync with the old line boundary.
-
-2004-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (Finsert_file_contents): Fix case of replacement in a
- narrowed buffer.
-
-2004-09-14 Kim F. Storm <storm@cua.dk>
-
- * puresize.h (PURESIZE_RATIO): Define based on BITS_PER_EMACS_INT.
-
- * xfaces.c (Qface_no_inherit): New var.
- (syms_of_xfaces): Intern and staticpro it.
- (Finternal_make_lisp_face, Finternal_set_lisp_face_attribute)
- (Finternal_copy_lisp_face, update_face_from_frame_parameter):
- Don't increment face_change_count when face has non-nil
- face-no-inherit property.
-
-2004-09-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * bytecode.c (BYTE_CODE_QUIT): Add missing AFTER_POTENTIAL_GC.
- (Fbyte_code): Remove dead code after `wrong_type_argument'.
-
- * alloc.c (Fgarbage_collect): Mark keyboards, gtk data, and specpdl
- before doing the mark_stack_check_gcpros since they're not on the stack.
-
-2004-09-12 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Fformat): Handle format strings with multiple text
- properties. Reverse text property list from the format string,
- so the positions are in increasing order.
-
-2004-09-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (x_reply_selection_request): XSync and UNBLOCK before
- x_uncatch_errors so that possible protocol errors are delivered.
-
-2004-09-10 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (msdos.o): Depend on buffer.h, commands.h, and
- blockinput.h.
- (dosfns.o): Depend on blockinput.h, window.h, dispextern.h,
- charset.h, and coding.h
- (w16select.o): Depend on buffer.h, charset.h, coding.h, and composite.h.
- (term.o): Depend on window.h and keymap.h.
- (abbrev.o): Depend on syntax.h.
- (callint.o): Depend on keymap.h.
- (casefiddle.o): Depend on charset.h and keymap.h.
- (category.o): Depend on keymap.h.
- (coding.o): Depend on dispextern.h.
- (cmds.o): Depend on keyboard.h and keymap.h.
- (dispnew.o): Depend on indent.h and intervals.h.
- (doc.o): Depend on keymap.h.
- (editfns.o): Depend on frame.h.
- (emacs.o): Depend on dispextern.h.
- (fileio.o): Don't depend on ccl.h.
- (filelock.o): Depend on charset.h and coding.h.
- (frame.o): Depend on w32term.h and macterm.h.
- (insdel.o): Depend on region-cache.h.
- (keyboard.o): Depend on keymap.h, w32term.h, and macterm.h.
- (minibuf.o): Depend on $(INTERVALS_SRC) and keymap.h.
- (search.o): Depend on $(INTERVALS_SRC).
- (syntax.o): Depend on keymap.h, regex.h, and $(INTERVALS_SRC).
- (window.o): Depend on keymap.h, blockinput.h, $(INTERVALS_SRC),
- xterm.h, w32term.h, and macterm.h.
- (xdisp.o): Depend on keyboard.h, $(INTERVALS_SRC), xterm.h,
- w32term.h, and macterm.h.
- (xfaces.o): Depend on keyboard.h, $(INTERVALS_SRC),
- region-cache.h, xterm.h, w32term.h, and macterm.h.
- (bytecode.o): Depend on dispextern.h, frame.h, and xterm.h.
- (data.o): Depend on frame.h.
- (fns.o): Depend on keymap.h, xterm.h, and blockinput.h.
- (print.o): Depend on termchar.h and $(INTERVALS_SRC).
- (lread.o): Depend on $(INTERVALS_SRC), termhooks.h, and coding.h.
- (intervals.o): Depend on keymap.h.
-
- * msdos.c (msdos_set_cursor_shape, IT_display_cursor):
- Add debugging print-out to termscript.
-
-2004-09-09 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (decode_mode_spec): Use current buffer for most purposes.
-
-2004-09-08 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Fset_window_buffer): Doc fix.
-
- * xdisp.c (Fformat_mode_line): New arg BUFFER says which buffer to use.
-
-2004-09-08 Dan Nicolaescu <dann@ics.uci.edu>
-
- * minibuf.c (history_delete_duplicates): New variable.
- (read_minibuf): Use it.
- (syms_of_minibuf): Create the corresponding lisp variable.
-
-2004-09-08 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (set_cursor_from_row): Also look at 'cursor' property in
- overlay just before point.
-
-2004-09-07 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.h (struct buffer): Add auto_save_file_format field.
- * buffer.c (reset_buffer, init_buffer_once):
- Handle auto_save_file_format field.
- (syms_of_buffer): Add DEFVAR_PER_BUFFER for
- `buffer-auto-save-file-format'.
- * fileio.c: Delete declaration for removed Vauto_save_file_format.
- (build_annotations): Adapt to replacement of
- `auto-save-file-format' with the new buffer-local variable
- `buffer-auto-save-file-format'.
- (syms_of_fileio): Delete DEFVAR_LISP for auto-save-file-format.
-
-2004-09-07 Jason Rumney <jasonr@gnu.org>
-
- * w32term.h (AppendMenuW_Proc): Move declaration from w32menu.c.
-
- * w32fns.c (w32_wnd_proc) <WM_MEASUREITEM, WM_DRAWITEM>:
- Handle Unicode menu titles.
-
-2004-09-07 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (set_cursor_from_row): Fix last change. Only use 'cursor'
- property from text property or overlay strings at point.
-
-2004-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xmenu.c (update_submenu_strings): YAILOM.
- (set_frame_menubar): Make sure last_i is initialized.
-
-2004-09-03 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (_widget_value): Add lname and lkey.
- (digest_single_submenu): Set lname and lkey in widget_value
- instead of name and key.
- (update_submenu_strings): New function.
- (set_frame_menubar): Remove call to inhibit_garbage_collection,
- call update_submenu_strings.
-
- * w32menu.c (globals_of_w32menu): Check for Unicode API.
- (digest_single_submenu, w32_menu_show): Encode menu strings as
- UTF-8 if Unicode API is available.
- (utf8to16): New function.
- (add_menu_item): Use it when calling Unicode API.
-
-2004-09-03 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (set_cursor_from_row): Look for non-nil `cursor' property
- in overlay or text-property strings; set cursor on corresponding
- glyph rather than at end of the string.
-
-2004-09-02 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c (x_real_positions): Save the current window port and
- set a new one before obtaining the global coordinate.
- Use FRAME_MAC_WINDOW.
- (x_set_name, x_set_title): Encode title to UTF8.
- Use SetWindowTitleWithCFString.
- (Fx_server_version): Get correct OS version.
-
- * macmenu.c (add_menu_item): Remove unused variable `i'.
- Don't let separator items destroy refence constants of other menu items.
-
- * macterm.c (x_update_end): Move SetPortWindowPort to inside
- BLOCK_INPUT.
- (x_set_offset): Use FRAME_MAC_WINDOW.
-
- * xdisp.c (note_mouse_highlight): Set the mouse pointer shape to
- nontext_cursor if it is on a scroll bar.
-
- * s/darwin.h (LIBS_CARBON): New define to specify libraries for
- Carbon support.
- (LD_SWITCH_SYSTEM_TEMACS): Don't link with unused libstdc++.
- Use LIBS_CARBON.
-
-2004-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_set_name_internal): New function. Check if we shall call
- xfree before ENCODE_UTF_8.
- (x_set_name, x_set_title): Call x_set_name_internal.
-
-2004-08-31 NAKAMURA Toshikazu <nr-tkz@nifty.com> (tiny change)
-
- * w32fns.c (w32_load_font): If a BDF font is already loaded, do not
- reload it.
-
-2004-08-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * macmenu.c (_widget_value): Add lname and lkey.
- (single_submenu): Set lname and lkey in widget_value
- instead of name and key.
- (update_submenu_strings): New function.
- (set_frame_menubar): Remove call to inhibit_garbage_collection,
- call update_submenu_strings.
-
- * xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
- instead of name and key.
- (update_submenu_strings): New function.
- (set_frame_menubar): Remove call to inhibit_garbage_collection,
- call update_submenu_strings.
-
- * gtkutil.h (_widget_value): Added lname and lkey.
-
-2004-08-30 Steven Tamm <steventamm@mac.com>
-
- * macmenu.c (mac_menu_show): Remove shadowing of menu variable
- by using different names for inner loop variables.
-
-2004-08-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (set_frame_menubar): Reintroduce inhibit_garbage_collection
- from 2002-07-15T00:01:34Z!raeburn@raeburn.org so that strings from ENCODE_UTF_8 isn't GC:ed before used.
-
- * gtkutil.c (xg_create_frame_widgets): Compensate for tool bar when
- tool bar items is 0.
-
-2004-08-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macmenu.c (ENCODE_MENU_STRING): Added to handle multibyte
- strings in menu items.
- (single_submenu): Use ENCODE_MENU_STRING
- (mac_menu_show): Use ENCODE_MENU_STRING. Reset grabbed because
- button release isn't passed to event loop
- (add_menu_item): Use SetMenuItemWithCFString
-
-2004-08-26 Steven Tamm <steventamm@mac.com>
-
- * fileio.c (Fread_file_name): Call x_file_dialog on carbon on
- tool-bar/menu click.
- * macfns.c (Fx_file_dialog): Implement using NavServices.
-
-2004-08-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
-
- * xfns.c (x_window_to_frame, x_any_window_to_frame)
- (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
- (x_top_window_to_frame): Return 0 if wdesc is None.
-
-2004-08-22 Richard M. Stallman <rms@gnu.org>
-
- * process.c (process_send_signal) [SIGNALS_VIA_CHARACTERS,
- HAVE_TERMIOS]: If there's no char for this signal, drop through
- and use system calls.
-
- * bytecode.c (Fbyte_code) <unwind-protect>: Cannot GC.
-
-2004-08-20 Kim F. Storm <storm@cua.dk>
-
- * process.c (wait_reading_process_output): Rename from
- wait_reading_process_input. All uses changed.
- (wait_reading_process_output_1): Rename from
- wait_reading_process_input_1. All uses changed.
-
- * dispnew.c (Fsleep_for): Remove obsolete code.
-
-2004-08-20 Kenichi Handa <handa@m17n.org>
-
- * syntax.c (skip_chars): Fix for unibyte case.
-
-2004-08-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (char_quoted): Mixup byte/char pos.
- (back_comment): Fixup globals in all cases.
-
-2004-08-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_set_name, x_set_title): Encode title to UTF8 before
- passing it to gtk_window_set_title.
-
-2004-08-19 Kim F. Storm <storm@cua.dk>
-
- * process.c (wait_reading_process_input): Clean up.
- Add wait_for_cell, wait_proc, and just_wait_proc args
- to avoid overloading `read_kbd' and `do_display' args.
- Change read_kbd arg to int. All callers changed.
-
- * process.c (process_send_signal): Use CDISABLE.
-
- * sysdep.c (child_setup_tty, init_sys_modes): Use CDISABLE.
-
-2004-08-18 Kim F. Storm <storm@cua.dk>
-
- * process.c (Faccept_process_output): Add arg JUST-THIS-ONE;
- forward to wait_reading_process_input via DO_DISPLAY arg.
- (wait_reading_process_input): If DO_DISPLAY < 0 for a process
- object, only process output from that process; also inhibit
- running timers if DO_DISPLAY==-2.
-
-2004-08-17 Kim F. Storm <storm@cua.dk>
-
- * process.c (process_send_signal): Fix last change--use
- _POSIX_VDISABLE instead of CVDISABLE when available.
-
-2004-08-16 Richard M. Stallman <rms@gnu.org>
-
- * sysdep.c (child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
- Set VQUIT and VINTR chars to the standard ones if they are unset.
- [AIX]: Don't do that here. And don't force VINTR to standard
- when SIGNALS_VIA_CHARACTERS.
-
- * process.c (process_send_signal)
- [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
- Do nothing if the character is CVDISABLE.
-
- * xfaces.c (merge_face_ref): Specifying `unspecified' is a no-op.
-
- * intervals.c (move_if_not_intangible):
- Force POSITION to be between BEGV and ZV.
-
-2004-08-14 John Paul Wallington <jpw@gnu.org>
-
- * buffer.c (Frestore_buffer_modified_p): Doc fix.
-
- * fileio.c (Fread_file_name): Doc fix.
-
- * minibuf.c (syms_of_minibuf) <completion-ignore-case>: Doc fix.
-
-2004-08-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * keymap.c (Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
-
-2004-08-08 Luc Teirlinck <teirllm@auburn.edu>
-
- * keyboard.c: Declare Qdisabled_command_function instead of
- Qdisabled_command_hook.
- (Fcommand_execute): Use Qdisabled_command_function instead of
- Qdisabled_command_hook.
- (syms_of_keyboard): Ditto.
-
-2004-08-07 Luc Teirlinck <teirllm@auburn.edu>
-
- * keymap.c (Flocal_key_binding, Fglobal_key_binding)
- (syms_of_keymap) <key-translation-map>: Doc fixes.
-
-2004-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * window.c (window_list_1): YAILOM.
-
- * fileio.c (make_temp_name): Handle multibyte prefixes.
-
-2004-08-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * keyboard.c (syms_of_keyboard) <overriding-terminal-local-map>:
- Doc fix.
-
-2004-08-03 Kenichi Handa <handa@m17n.org>
-
- * coding.c (decode_coding_string): Adjust coding->consumed, and
- etc. with shrinked_bytes.
-
-2004-08-03 Kim F. Storm <storm@cua.dk>
-
- * indent.c (compute_motion): Fix check for full width window
- in non-window case. Do not count left truncation glyph on
- window systems.
-
-2004-08-02 Luc Teirlinck <teirllm@auburn.edu>
-
- * data.c (Finteractive_form): Doc fix.
-
-2004-08-02 Kim F. Storm <storm@cua.dk>
-
- * indent.c (compute_motion): Use actual window width if WIDTH is -1,
- properly accounting for continuation glyph on non-window systems.
- (Fcompute_motion): Use actual window width if WIDTH is nil, and
- actual window width/height if TOPOS is nil, properly accounting for
- continuation glyphs on non-window systems, and optional header lines.
- (vmotion): Let compute_motion calculate actual window width.
-
- * window.c (window_scroll_line_based): Let compute_motion
- calculate actual window width.
-
-2004-08-02 Kim F. Storm <storm@cua.dk>
-
- * process.c (read_process_output): Use whole read buffer.
- Don't trigger adaptive read buffering on errors.
-
-2004-07-31 Luc Teirlinck <teirllm@auburn.edu>
-
- * keymap.c (Fset_keymap_parent, Fdefine_prefix_command): Doc fixes.
-
- * keyboard.c (syms_of_keyboard) <disable-point-adjustment>: Doc fix.
-
- * callint.c (Fcall_interactively): Doc fix.
-
-2004-07-30 Richard M. Stallman <rms@gnu.org>
-
- * abbrev.c (Fexpand_abbrev): Undo previous change.
-
-2004-07-30 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Fformat): Allocate extra (dummy) element in info.
-
-2004-07-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * eval.c (Fdefvar, Fdefconst): Doc fixes.
-
-2004-07-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_in_display_line_to): Check BUFFER_POS_REACHED_P after
- we have ensured that the glyph fits on the current line (or returned
- MOVE_LINE_CONTINUED otherwise).
-
-2004-07-26 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_in_display_line_to): If overflow-newline-into-fringe
- is enabled, return MOVE_LINE_CONTINUED rather than MOVE_POS_MATCH_OR_ZV
- if target position is at end of display line but char is not a newline.
-
-2004-07-25 Richard M. Stallman <rms@gnu.org>
-
- * window.c (coordinates_in_window): Return ON_SCROLL_BAR
- instead of ON_VERTICAL_BORDER, when on scroll bar.
- (Fcoordinates_in_window_p): Handle ON_SCROLL_BAR--return nil.
-
- * dispextern.h (enum window_part): Add ON_SCROLL_BAR.
-
- * window.c (Fcoordinates_in_window_p):
- Take account of FRAME_INTERNAL_BORDER_WIDTH.
-
- * alloc.c (check_cons_list): New function (contents commented out).
-
-2004-07-24 Luc Teirlinck <teirllm@auburn.edu>
-
- * xfaces.c (Fcolor_supported_p): Doc fix.
-
- * frame.c (Fselect_frame, Fset_frame_selected_window)
- (Fframe_visible_p, Fraise_frame): Doc fixes.
-
-2004-07-24 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.h (not_single_kboard_state): Declare.
-
- * fileio.c (Fwrite_region): Doc fix.
-
- * window.c (Fwindow_at): Take account of FRAME_INTERNAL_BORDER_WIDTH.
-
- * abbrev.c (Fexpand_abbrev): Run Qpre_abbrev_expand_hook
- only when a real abbrev is present.
-
- * xfns.c (x_icon_verify): New function.
- (Fx_create_frame): Use it.
-
-2004-07-22 Barry Fishman <barry_fishman@att.net> (tiny change)
-
- * s/gnu-linux.h: Use GC_MARK_STACK if __amd64__ is defined.
-
-2004-07-21 Kim F. Storm <storm@cua.dk>
-
- * window.h (struct glyph_matrix): New members nrows_scale_factor
- and ncols_scale_factor.
-
- * window.c (make_window): Initialize nrows_scale_factor and
- ncols_scale_factor members.
-
- * dispnew.c (margin_glyphs_to_reserve): Apply ncols_scale_factor.
- (allocate_matrices_for_frame_redisplay): Fix left/right margin mix-up.
- (required_matrix_height): Apply nrows_scale_factor.
- (required_matrix_width): Apply ncols_scale_factor.
-
- * xdisp.c (display_line): Increment nrows_scale_factor and set
- fonts_changed_p if past last allocated row.
- (append_glyph, append_composite_glyph, produce_image_glyph)
- (append_stretch_glyph): Increment ncols_scale_factor and set
- fonts_changed_p if current area is full.
-
-2004-07-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * widget.c (EmacsFrameDestroy): Don't abort if normal_gc is 0.
-
-2004-07-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * window.c (Fpos_visible_in_window_p, Fset_window_hscroll)
- (Fwindow_inside_pixel_edges, Fwindow_end, Fset_window_point)
- (Fset_window_start, Fscroll_up, Fscroll_down)
- (Fother_window_for_scrolling, Fscroll_other_window)
- (Fsave_window_excursion, Fset_window_vscroll)
- (syms_of_window) <window-size-fixed>: Doc fixes.
-
-2004-07-19 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
-
- * w32fns.c (Fx_file_dialog): Use ENCODE_FILE instead of
- ENCODE_SYSTEM for filenames.
-
-2004-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (sys_select): Block input around call to
- ReceiveNextEvent to prevent breakage. Correctly handle
- blocking on event queue only by calling ReceiveNextEvent
- instead of select (since GUI events aren't on an fd).
- (sys_read): Remove function
- * sysdep.c: Remove redefine of read to sys_read if HAVE_CARBON
-
-2004-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * mac.c (sys_select): Redo sys_select to use alarm-based
- polling instead of 1 sec timeouts (like solaris).
-
- * macterm.c (x_make_frame_visible): Comment in polling on
- frame creation.
-
- * keyboard.c: Undef SIGIO on Carbon
-
- * atimer.c (alarm_signal_handler): Call alarm handlers after
- scheduling.
-
- * eval.c (Feval): Remove quit_char test
-
- * process.c (wait_reading_process_input): Remove clearing
- stdin for select call on process input.
-
-2004-07-18 Luc Teirlinck <teirllm@auburn.edu>
-
- * xdisp.c (syms_of_xdisp) <window-scroll-functions>: Correct
- capitalization error in docstring.
-
-2004-07-17 Juanma Barranquero <lektu@terra.es>
-
- * keyboard.c (not_single_kboard_state): Do nothing unless
- MULTI_KBOARD is defined.
-
-2004-07-17 Richard M. Stallman <rms@gnu.org>
-
- * window.c (coordinates_in_window): Inside the window but outside
- its box to the L or R, return ON_VERTICAL_BORDER.
- (window_list_1): Rotate the list to start with WINDOW.
-
- * print.c (print_preprocess): Test for print_depth at limit
- before entering in being_printed.
-
- * keyboard.c (not_single_kboard_state): New function.
- (stuff_buffered_input): Now no-op only if no SIGTSTP.
-
- * frame.c (Fdelete_frame): If we're in single_bboard_state on
- this kboard, and we delete its last frame, go to any_kboard_state.
-
- * buffer.c (syms_of_buffer) <transient-mark-mode>: Doc fix.
-
-2004-07-15 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
-
- * w32fns.c (Fx_file_dialog): Encode strings in system coding
- system before passing them to OS functions for display.
-
-2004-07-15 David Kastrup <dak@gnu.org>
-
- * search.c (syms_of_search): Staticpro `saved_last_thing_searched'.
- Apparently fixes an abort condition.
-
-2004-07-14 Luc Teirlinck <teirllm@auburn.edu>
-
- * fileio.c (Fvisited_file_modtime): Return a list of two integers,
- instead of a cons.
-
-2004-07-14 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * keyboard.c (echo_dash): Do nothing if there already is a dash
- at the end of the echo string.
-
-2004-07-12 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (mark_object): Only look at Lisp_Misc_Save_Value
- if GC_MARK_STACK.
-
-2004-07-10 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.c (Fswitch_to_buffer, Fpop_to_buffer): Doc fixes.
-
- * window.c (Fwindow_buffer, Fother_window, Fget_lru_window)
- (Fget_largest_window, Fget_buffer_window, Fdelete_windows_on)
- (Freplace_buffer_in_windows, Fset_window_buffer)
- (Fselect-window, Fdisplay-buffer, Fsplit_window): Doc fixes.
- (syms_of_window): Expand docstring of `display-buffer-function'.
-
-2004-07-09 Luc Teirlinck <teirllm@auburn.edu>
-
- * editfns.c (Ffloat_time, Fformat_time_string, Fdecode_time)
- (Fcurrent_time_string, Fcurrent_time_zone): Mention in docstrings
- that time values of the type (HIGH . LOW) are considered obsolete.
-
-2004-07-06 Luc Teirlinck <teirllm@auburn.edu>
-
- * keyboard.c (syms_of_keyboard): Fix `keyboard-translate-table'
- docstring.
-
- * fns.c (Fclear_string): Declare `len' before call to CHECK_STRING.
-
-2004-07-06 John Paul Wallington <jpw@gnu.org>
-
- * eval.c (Fdefmacro): Signal an error if NAME is not a symbol.
-
- * fns.c (Fclear_string): Signal an error if STRING is not a string.
-
-2004-07-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * macterm.c (mac_initialize_display_info): Use CGGetActiveDisplayList
- instead of CGMainDisplayID (only in OSX 10.2 and later).
-
-2004-07-04 John Paul Wallington <jpw@gnu.org>
-
- * fileio.c (read_file_name_completion_ignore_case): New variable.
- (syms_of_fileio): Declare and initialise it.
- (Fread_file_name): Bind `completion-ignore-case' to respect it.
-
-2004-07-03 Eli Zaretskii <eliz@gnu.org>
-
- * msdos.c (dos_rawgetc): Use make_number to produce Lisp objects
- for event.x and event.y.
-
-2004-07-01 Kenichi Handa <handa@m17n.org>
-
- * w32select.c (Fw32_set_clipboard_data): Update `nbytes' correctly
- after getting a new string by pre-write-conversion.
-
-2004-06-30 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xterm.c (x_detect_focus_change): Remove unused var `nr_events'.
- (x_calc_absolute_position): Remove unused var `child'.
-
- * xfaces.c (x_supports_face_attributes_p)
- (Fdisplay_supports_face_attributes_p): YAILOM.
- (tty_supports_face_attributes_p): Remove unused var `i'.
-
- * syntax.c (skip_chars): Remove unused labels fwd_unibyte_ok and
- back_unibyte_ok.
-
- * search.c (match_limit, Fmatch_data, Fset_match_data): YAILOM.
-
- * fontset.c (Fset_fontset_font): Remove unused vars `family' and
- `registry'.
-
- * Makefile.in (${etc}DOC): Fix file name of make-docfile.
-
-2004-06-30 Andreas Schwab <schwab@suse.de>
-
- * image.c (CHECK_LIB_AVAILABLE): Add third parameter LIBRARIES.
- (Finit_image_library): Pass LIBRARIES through to
- CHECK_LIB_AVAILABLE. Declare parameters. Doc fix.
- (lookup_image_type): Pass Qnil as second argument to
- Finit_image_library.
-
- * lisp.h (Finit_image_library): Declare.
-
-2004-06-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (do_window_activate, do_window_deactivate): Remove.
- (XTread_socket): Send mouse button events to the toolbox
- dispatcher even when the mouse is grabbed. Don't process window
- activate events for non-Emacs windows. Replace function calls to
- do_window_activate and do_window_deactivate with their contents.
- Reset mouse grabbing status when a window is deactivated.
-
-2004-06-29 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (mac_get_emulated_btn)
- (mac_event_to_emacs_modifiers): Fix emulated mouse button
- support to correctly mask out modifiers.
-
-2004-06-29 David Kastrup <dak@gnu.org>
-
- * search.c (Fset_match_data): Allow buffer before end of list
- which can happen if set-match-data is using a pre-consed list.
-
-2004-06-28 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (XTread_socket): Correctly set the frame position
- after the window is moved.
-
-2004-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_image_for_pixmap): Call g_object_unref on
- gpix and gmask just before return to avoid memory leak.
- (xg_get_image_for_pixmap): Add workaround for monochrome displays
- so insensitive and activated icons look ok.
-
-2004-06-27 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (file_dialog_callback): Disable edit control if set
- to directories only on CDN_INITDONE message.
- (Fx_file_dialog): Default to directories only when prompt starts
- with "Dired".
-
-2004-06-25 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (allocate_misc): Update total_free_markers.
- (free_misc): New function.
- (safe_alloca_unwind, free_marker): Use it.
-
- * lisp.h (free_misc): Add prototype.
-
- * fns.c (Fmapconcat, Fmapcar): Remove superfluous GCPROs.
-
-2004-06-24 Richard M. Stallman <rms@gnu.org>
-
- * emacs.c (Vsignal_USR1_hook, Vsignal_USR2_hook): Definitions deleted.
- (syms_of_emacs): Lisp variables deleted.
-
-2004-06-23 David Kastrup <dak@gnu.org>
-
- * search.c (Freplace_match): Adjust the match-data more thoroughly
- when replacing strings in the buffer.
- (Fmatch_data): When INTEGERS is non-nil and the last match was in
- a buffer, add the buffer as last element to the match data.
- (Fset_match_data): If an additional element of the match-data is a
- buffer, restore it to last_thing_searched.
- (save_search_regs): Save last_thing_searched as part of the match data.
- (restore_match_data): Restore it again.
-
-2004-06-23 Luc Teirlinck <teirllm@auburn.edu>
-
- * keymap.c (Ftext_char_description): Doc fix.
- * doc.c (Fsnarf_documentation): Doc fix.
-
-2004-06-22 Kim F. Storm <storm@cua.dk>
-
- * fns.c (Fmapcar, Fmapconcat): GCPRO the args array.
-
- * lisp.h (struct Lisp_Save_Value): New member dogc.
- (SAFE_ALLOCA_LISP): Change second arg to number of elements.
- Set dogc member in Lisp_Save_Value object so it will be GC'ed.
- (SAFE_FREE_LISP): New macro.
-
- * alloc.c (safe_alloca_unwind): Clear dogc and pointer members.
- (make_save_value): Init new dogc member.
- (mark_object): Mark Lisp_Save_Value pointer array if dogc is set.
-
- * fns.c (Fmapconcat, Fmapcar): Use new SAFE_ALLOCA_LISP and
- SAFE_FREE_LISP macros.
-
-2004-06-22 Kim F. Storm <storm@cua.dk>
-
- * lisp.h (SAFE_ALLOCA_LISP): New macro to allocate Lisp_Objects.
- Temporarily inhibits GC if memory is xmalloc'ed, as the Lisp_Objects
- in that memory area are unknown to GC. Add comments.
-
- * fns.c (Fmapconcat, Fmapcar): Use SAFE_ALLOCA_LISP.
-
-2004-06-21 Kim F. Storm <storm@cua.dk>
-
- * lisp.h (MAX_ALLOCA): Define here.
- (safe_alloca_unwind): Add prototype.
- (USE_SAFE_ALLOCA, SAFE_ALLOCA, SAFE_FREE): New macros.
-
- * alloc.c (safe_alloca_unwind): New function.
-
- * casefiddle.c (casify_object): Use SAFE_ALLOCA.
-
- * charset.c (Fstring): Use SAFE_ALLOCA.
-
- * coding.c (MAX_ALLOCA): Remove define.
-
- * data.c (MAX_ALLOCA): Remove define.
- (Faset): Use SAFE_ALLOCA.
-
- * editfns.c (Fformat, Ftranspose_regions): Use SAFE_ALLOCA.
-
- * fns.c (string_make_multibyte, string_to_multibyte)
- (string_make_unibyte, Fmapconcat, Fmapcar): Use SAFE_ALLOCA.
- (MAX_ALLOCA): Remove define.
- (Fbase64_encode_region, Fbase64_encode_string)
- (Fbase64_decode_region, Fbase64_decode_string): Use SAFE_ALLOCA.
- (Fbase64_encode_region, Fbase64_encode_string): Fix potential
- memory leak if encoding fails.
-
- * xdisp.c (add_to_log): Use SAFE_ALLOCA.
-
-2004-06-21 Eli Zaretskii <eliz@gnu.org>
-
- * print.c (Fwith_output_to_temp_buffer): Doc fix.
-
-2004-06-20 Richard M. Stallman <rms@gnu.org>
-
- * xfaces.c (Finternal_copy_lisp_face): Small cleanup; doc fix.
-
- * search.c (match_limit): Cleaner err msg when no match data available.
-
- * window.c (syms_of_window): Doc fix.
-
- * keyboard.c (command_loop_1): Handle values `only' and `identity'
- for Vtransient_mark_mode.
-
- * buffer.c (syms_of_buffer): Doc fix.
-
-2004-06-21 David Kastrup <dak@gnu.org>
-
- * minibuf.c (Ftry_completion, Fall_completions): Do lazy binding
- and unbinding of `case-fold-search' according to
- `completion-ignore-case' around calls of string-match and
- predicates, respectively. Should give satisfactory performance
- in all relevant cases.
-
-2004-06-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_draw_image_foreground_1): Subtract slice.x/y from
- clip_x/y_origin.
-
- * fns.c (string_to_multibyte): Use xmalloc/xfree instead of alloca.
-
- * macfns.c (Fx_display_color_cells): Do not limit return value to 256.
-
- * macterm.c (mac_initialize_display_info): Initialize n_planes correctly
- on Mac OSX.
-
-2004-06-16 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.c (syms_of_buffer): Clarify `fill-column' docstring.
-
-2004-06-16 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (Vimage_types): Remove extern.
-
-2004-06-16 Miles Bader <miles@gnu.org>
-
- * image.c (lookup_image_type): Initialize image type if necessary.
-
-2004-06-15 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (try_cursor_movement): Exclude header line from scroll
- margin at top of window.
- (try_window_reusing_current_matrix): Calculate proper cursor position
- after scrolling up with non-zero scroll margin, as the old cursor
- position corresponds to value of PT before executing this command.
- (try_window_id): Consider scroll margin at bottom of window too;
- otherwise we fail to scroll when hl-line-mode is enabled.
-
- * syntax.c (skip_chars): Only recognize [:class:] when it has the
- proper format and class is a lower-case word.
-
-2004-06-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_get_image_for_pixmap): New function.
- (xg_get_gdk_pixmap_and_mask): Remove.
- (update_frame_tool_bar): Call xg_get_image_for_pixmap instead of
- xg_get_gdk_pixmap_and_mask.
-
- * xterm.h (struct x_display_info): Typo in comment fixed.
-
-2004-06-14 Juanma Barranquero <lektu@terra.es>
-
- * dispextern.h (Vimage_types): Make it conditional on
- HAVE_WINDOW_SYSTEM.
-
- * image.c (Vimage_types): Move from xdisp.c.
- (Vimage_type_cache): New variable.
- (define_image_type): New argument indicating whether an image
- library was loaded; cache loaded status and return t on success,
- nil otherwise.
- (CACHE_IMAGE_TYPE, ADD_IMAGE_TYPE): New macros.
- (w32_delayed_load): New function to load an image library from a
- list of possible filenames.
- (init_xpm_functions, init_png_functions, init_jpeg_functions)
- (init_tiff_functions, init_gif_functions): Use `w32_delayed_load'.
- (CHECK_LIB_AVAILABLE): Call `define_image_library' with new argument.
- (Finit_image_library): New function, extracted from `init_image'.
- Try to initialize an image library on demand and cache whether we
- were successful or not.
- (syms_of_image): Initialize `Vimage_types' and
- `Vimage_type_cache'. Add recognized image types to Vimage_types.
- Export `init-image-library'.
- (init_image): Remove initialization of all image types, except xbm
- and pbm.
-
- * xdisp.c (Vimage_types): Delete (moved to image.c).
-
-2004-06-14 Andreas Schwab <schwab@suse.de>
-
- * minibuf.c (Ftry_completion, Fall_completions, Ftest_completion):
- Avoid calling specbind when completion-regexp-list is empty.
-
-2004-06-13 Richard M. Stallman <rms@gnu.org>
-
- * regex.h (CHAR_CLASS_MAX_LENGTH, re_wctype_t, re_wchar_t)
- (re_wctype, re_iswctype, re_wctype_to_bit):
- Non-function definitions moved here from regex.c.
-
- * regex.c (re_wctype, re_iswctype): Function defs longer static.
- (CHAR_CLASS_MAX_LENGTH, re_wctype_t, re_wchar_t)
- (re_wctype, re_iswctype, re_wctype_to_bit):
- Non-function definitions moved to regex.h.
-
- * window.c (Fselect_window): Doc fix.
-
- * syntax.c: Include regex.h.
- (skip_chars): New arg HANDLE_ISO_CLASSES. Callers changed.
- If requested, make a list of classes, then check the scanned
- chars for membership in them.
- (in_classes): New function.
- Doc fix.
-
- * keyboard.c (cmd_error): Don't call any_kboard_state
- if inside a recursive edit level.
-
-2004-06-13 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * keyboard.c (command_loop): Call any_kboard_state before
- command_loop_2 when at top level.
-
-2004-06-13 Andreas Schwab <schwab@suse.de>
-
- * print.c (print_object): Always use %ld for printing EMACS_INT.
-
- * keyboard.c (cancel_hourglass_unwind): Return a value.
- (modify_event_symbol): Always use %ld for printing EMACS_INT.
- (Fexecute_extended_command): Likewise.
-
- * syntax.h (SYNTAX_ENTRY_FOLLOW_PARENT): Rename local variable to
- avoid clashes.
- (SYNTAX): Likewise.
- (SYNTAX_WITH_FLAGS): Likewise.
- (SYNTAX_MATCH): Likewise.
-
- * syntax.c (char_quoted): Avoid warning about undefined operation.
- (find_defun_start): Likewise.
- (scan_lists): Likewise.
- (INC_FROM): Likewise.
- (scan_sexps_forward): Likewise.
-
- * image.c: Include <ctype.h>.
-
- * xfaces.c (face_attr_equal_p): Declare parameters.
-
-2004-06-13 Kenichi Handa <handa@m17n.org>
-
- * ccl.c (CCL_READ_CHAR): If hit EOF, set REG to -1.
-
-2004-06-12 Matthew Mundell <matt@mundell.ukfsn.org>
-
- * eval.c (Fdefun): Signal an error if NAME is not a symbol.
-
-2004-06-12 Kenichi Handa <handa@m17n.org>
-
- * ccl.c (CCL_CALL_FOR_MAP_INSTRUCTION): Save eof_ic in
- ccl_prog_stack_struct and update it.
- (CCL_INVALID_CMD): If CCL_DEBUG is defined, call ccl_debug_hook.
- (CCL_READ_CHAR): Get instruction counter from eof_ic, not from
- ccl->eof_ic on EOF.
- (ccl_debug_hook): New function.
- (struct ccl_prog_stack): New member eof_ic.
- (ccl_driver): Handle EOF in subrountine call correctly.
-
-2004-06-11 Kenichi Handa <handa@m17n.org>
-
- * coding.c (encode_coding_string): Check CODING_FINISH_INTERRUPT.
-
-2004-06-11 Kim F. Storm <storm@cua.dk>
-
- * emacs.c (shut_down_emacs): Inhibit redisplay during shutdown.
-
-2004-06-11 Juanma Barranquero <lektu@terra.es>
-
- * keyboard.c (Fposn_at_point): Doc fix.
-
-2004-06-11 David Kastrup <dak@gnu.org>
-
- * search.c (match_limit): Don't flag an error if match-data
- exceeding the allocated search_regs.num_regs gets requested, just
- return Qnil.
-
-2004-06-08 Miles Bader <miles@gnu.org>
-
- * xfaces.c (push_named_merge_point): Return 0 when a cycle is detected.
-
-2004-06-07 Juanma Barranquero <lektu@terra.es>
-
- * editfns.c (Fuser_login_name, Ffloat_time, Fencode_time)
- (Fcurrent_time_string, Fcurrent_time_zone)
- (Finsert_buffer_substring, Ftranspose_regions): Doc fixes.
-
-2004-06-07 Miles Bader <miles@gnu.org>
-
- * xfaces.c (struct named_merge_point): New type.
- (push_named_merge_point): New function.
- (merge_named_face): New function.
- (merge_face_ref, face_at_buffer_position, face_at_string_position):
- Use `merge_named_face'.
- (merge_face_inheritance): Function removed.
- (merge_face_ref): Rename from `merge_face_vector_with_property'.
- Add new `err_msgs' and `named_merge_points' args. Return error
- status. Only print error messages if ERR_MSGS is true. Don't try to
- do :inherit attribute validation.
- (merge_face_heights): Handle `unspecified' in both directions.
- (merge_face_vectors): Rename `cycle_check' arg to `named_merge_points'.
- Call `merge_face_ref' instead of `merge_face_inheritance'.
- (Fdisplay_supports_face_attributes_p, Fface_attributes_as_vector)
- (compute_char_face, face_at_buffer_position)
- (face_at_string_position): Call `merge_face_ref' instead of
- `merge_face_vector_with_property'.
-
-2004-06-07 Kenichi Handa <handa@m17n.org>
-
- * coding.c (find_safe_codings): Check NILP (safe_codings) only at
- the necessary places.
-
-2004-06-07 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fdelete_process): Undo 2004-05-28 change.
- Instead, call status_notify also for network process.
- (status_message): Use process instead of status as arg.
- Give messages "deleted" or "connection broken by remote peer" for
- an exited network process.
- (status_notify): Change call to status_message.
- (read_process_output): Increase readmax to 4096. Do not increase
- buffer size for datagram channels (default is now large enough).
-
-2004-06-06 Steven Tamm <tamm@Steven-Tamms-Computer.local>
-
- * macfns.c (x_create_tip_frame): Fix Mac OS X 10.1 compilation
- problem due to newly defined variable.
-
-2004-06-06 Miles Bader <miles@gnu.org>
-
- * xfaces.c (Fdisplay_supports_face_attributes_p): Give up
- immediately if non-interactive or not initialized.
-
-2004-06-05 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (Fcompleting_read): Doc fix.
-
-2004-06-05 Andreas Schwab <schwab@suse.de>
-
- * macfns.c (x_create_tip_frame): Fix declaration after statement.
-
-2004-06-05 Juanma Barranquero <lektu@terra.es>
-
- * keymap.c (Fdescribe_vector): Fix docstring.
- (Fkey_description, Fglobal_key_binding): Fix typo in docstring.
-
-2004-06-05 Miles Bader <miles@gnu.org>
-
- * xfaces.c (tty_supports_face_attributes_p): Make sure the specified
- attributes have different values than the default face.
-
-2004-06-04 Eli Zaretskii <eliz@gnu.org>
-
- * xfaces.c (x_supports_face_attributes_p): Make this function
- conditional on HAVE_WINDOW_SYSTEM.
- (Fdisplay_supports_face_attributes_p) [HAVE_WINDOW_SYSTEM]:
- Don't call x_supports_face_attributes_p if it was not compiled in.
-
-2004-06-04 Miles Bader <miles@gnu.org>
-
- * xfaces.c (tty_supports_face_attributes_p): New function, mostly
- from Ftty_supports_face_attributes_p.
- (x_supports_face_attributes_p): New function.
- (Ftty_supports_face_attributes_p): Function deleted.
- (Fdisplay_supports_face_attributes_p): New function.
- (syms_of_xfaces): Initialize Sdisplay_supports_face_attributes_p.
- (face_attr_equal_p): New function.
- (lface_equal_p): Use it.
-
-2004-06-03 Juanma Barranquero <lektu@terra.es>
-
- * w32fns.c (Fx_display_grayscale_p, Fw32_send_sys_command)
- (Vw32_color_map): Fix typo in docstring.
- (Fx_create_frame, Fw32_find_bdf_fonts, Fx_show_tip)
- (Fw32_unregister_hot_key, Fw32_reconstruct_hot_key):
- Make argument names match their use in docstring.
-
-2004-06-02 Juanma Barranquero <lektu@terra.es>
-
- Work around bugs/problems with MinGW builds of graphics libraries
- called from MSVC builds of Emacs.
-
- * image.c (lookup_image): Make pointer to img static.
- (png_read_from_memory): Disable "global" optimization.
-
-2004-06-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * eval.c (Fcondition_case): Fix usage. Simplify.
-
- * mem-limits.h (EXCEEDS_LISP_PTR) [USE_LSB_TAG]: Never true.
-
-2004-05-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macfns.c: Don't include ccl.h.
- [MAC_OSX]: Don't include QuickTime/QuickTime.h.
- [!MAC_OSX]: Don't include alloca.h, Windows.h, Gestalt.h, or
- TextUtils.h.
- (Fx_create_frame): Sync with xfns.c. Initialize cursor descriptors.
- (Fx_display_mm_height, Fx_display_mm_width): Calculate length from
- display height/width.
- (compute_tip_xy, Vx_max_tooltip_size): Declare.
- (unwind_create_tip_frame, compute_tip_xy): New functions.
- (x_create_tip_frame, Fx_show_tip, Fx_hide_tip): Sync with xfns.c.
- (syms_of_macfns): Initialize Qcancel_timer, Vx_max_tooltip_size,
- and last_show_tip_args.
-
- * macgui.h [!MAC_OSX]: Include Gestalt.h.
- (Cursor, No_Cursor): New defines.
- [!TARGET_API_MAC_CARBON] (SetPortWindowPort): New compatibility macro.
- [!TARGET_API_MAC_CARBON] (arrow_cursor): Declare.
-
- * macmenu.c (mac_menu_show, mac_dialog): Use SetPortWindowPort.
-
- * macterm.c: Don't include Gestalt.h.
- (enum mouse_tracking_type, mouse_tracking_in_progress): Remove.
- (XDrawLine, XClearArea, XClearWindow, mac_draw_bitmap)
- (mac_set_clip_rectangle, mac_reset_clipping, XCreatePixmap)
- (XFillRectangle, mac_draw_rectangle, mac_draw_string_common)
- (mac_copy_area, mac_copy_area_with_mask, x_update_end)
- (construct_mouse_click, XTmouse_position)
- (x_scroll_bar_report_motion, x_calc_absolute_position)
- (do_mouse_moved, do_zoom_window, mac_do_receive_drag)
- (XTread_socket, make_mac_frame): Use SetPortWindowPort.
- (note_mouse_movement): Clear the mouse face and reset the pointer
- shape when the pointer goes outside the frame without grabbing.
- (mac_front_window): New function.
- (mac_window_to_frame): New macro.
- (XTmouse_position, x_scroll_bar_report_motion, do_window_update)
- (do_window_activate, do_window_deactivate, do_app_resume)
- (do_app_suspend, do_mouse_moved, do_menu_choice, do_grow_window)
- (do_zoom_window, mac_do_receive_drag, XTread_socket)
- (mac_check_for_quit_char): Use mac_front_window and/or
- mac_window_to_frame.
- (x_scroll_bar_handle_click): Set `(PORTION . WHOLE)' part in a
- scroll-bar click event.
- (mac_define_frame_cursor): Change the pointer shape.
- (x_free_frame_resources): Reset tip_window to NULL when it is
- disposed of.
- [!TARGET_API_MAC_CARBON] (arrow_cursor): New variable.
- [!TARGET_API_MAC_CARBON] (do_init_managers): Initialize arrow_cursor.
- (do_window_update): Don't do anything if the updated window is the
- tooltip window.
- (do_mouse_moved): Handle mouse movement events here (previously in
- XTread_socket). Clear the mouse face if
- dpyinfo->mouse_face_hidden is set.
- (do_os_event, do_events): Remove (now in XTread_socket).
- (XTread_socket): Immediately return if interrupt_input_blocked.
- Loop until all the events in the queue are processed.
- Rearrange codes for mouse grabbing. Add tooltip support. Include the
- contents of do_os_event and do_events. Remove mouse movement
- handling (now in do_mouse_moved). Add the case where
- Vmouse_highlight has an integer value.
- (NewMacWindow): Remove.
- (make_mac_frame): Do what NewMacWindow previously did. Don't do
- excess initializations.
- (make_mac_terminal_frame): Previous initializations in
- make_mac_frame are moved here.
- (mac_initialize_display_info):
- Initialize dpyinfo->mouse_face_overlay and dpyinfo->mouse_face_hidden.
-
- * xdisp.c [MAC_OS] (No_Cursor): Remove variable.
- (define_frame_cursor1): Don't treat HAVE_CARBON as a special case.
-
-2004-05-29 Richard M. Stallman <rms@gnu.org>
-
- * lisp.h (truncate_undo_list): Update decl.
-
- * alloc.c (undo_outer_limit): New variable.
- (syms_of_alloc): Defvar it.
- (Fgarbage_collect): Pass undo_outer_limit to truncate_undo_list.
-
- * undo.c (truncate_undo_list): New arg LIMITSIZE.
-
- * alloc.c (lisp_align_malloc): Check for base == 0
- regardless of HAVE_POSIX_MEMALIGN.
- Clean up HAVE_POSIX_MEMALIGN handling of `err'.
-
-2004-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c: Undo Kim's recent changes and fix the same bug differently.
- (marker_blocks_pending_free): Remove.
- (Fgarbage_collect): Sweep after cleaning up undo-lists.
- Mark the undo lists after claning them up.
- Don't free block in marker_blocks_pending_free.
- (mark_buffer): Don't mark undo_list.
- (gc_sweep): Sweep hash-tables and strings first.
- Do free marker blocks that are empty.
-
-2004-05-28 Jim Blandy <jimb@redhat.com>
-
- * regex.c (print_partial_compiled_pattern): Add missing 'break'
- after 'case wordend'. For symbeg and symend, print to stderr,
- like the other cases.
-
-2004-05-28 Noah Friedman <friedman@splode.com>
-
- * process.c (Fdelete_process): Do not call remove_process.
-
-2004-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (struct backtrace): Remove.
- (Fgarbage_collect): Use the new mark_backtrace.
-
- * eval.c (mark_backtrace): New function.
-
- * minibuf.c (run_exit_minibuf_hook): New function.
- (read_minibuf_unwind): Don't run exit-minibuffer-hook any more.
- (read_minibuf): Use separate unwind handler to run exit-minibuf-hook.
-
-2004-05-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (back_to_previous_visible_line_start): Skip backwards
- over display properties, e.g. images, that replace buffer text.
-
-2004-05-25 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (marker_blocks_pending_free): New var.
- (gc_sweep): Store free marker blocks on that list.
- (Fgarbage_collect): Free them after undo-list cleanup.
-
- * process.c (wait_reading_process_input): Check connect_wait_mask
- before actually accepting connection in case it has already been
- accepted due to recursion.
-
-2004-05-23 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
-
- * coding.c (Fset_safe_terminal_coding_system_internal):
- Set suppress_error in safe_terminal_coding, not terminal_coding.
-
-2004-05-22 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (Fmake_string): Doc fix.
-
- * buffer.c (clone_per_buffer_values): Copy the alist of local vars,
- and the alist pairs too.
-
- * casefiddle.c (casify_object): Return OBJ unchanged if not real char.
-
- * emacs.c (main): Update copyright year.
-
- * fileio.c (Fread_file_name): Expand DIR if not absolute.
-
- * insdel.c (del_range_2, replace_range): Don't write an anchor
- if the gap is empty.
-
- * xdisp.c (try_scrolling): If scroll-up-aggressively or
- scroll-down-aggressively is small but positive, put point
- near the screen edge.
-
-2004-05-22 Juanma Barranquero <lektu@terra.es>
-
- * keymap.c (Fdefine_key): Doc fix.
-
-2004-05-22 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (struct backtrace): Add debug_on_exit member.
- (Fgarbage_collect): Clear out buffer undo_list markers after gc_sweep.
- Identify those markers as Lisp_Misc_Free objects. Clear car and cdr of
- the removed cons cells.
- (mark_object): Undo previous change - disallow Lisp_Misc_Free objects.
- (gc_sweep): Clear cons_blocks before sweeping strings, so we don't have
- any cons cells pointing to unallocated stings.
- Do not lisp_free any marker blocks, as there may still be pointers
- to them from buffer undo lists at this stage of GC.
-
- * keyboard.c (struct backtrace): Add debug_on_exit member.
- (Fcommand_execute): Clear it.
-
-2004-05-20 Luc Teirlinck <teirllm@auburn.edu>
-
- * intervals.c (lookup_char_property): Do not prematurely return nil.
-
-2004-05-19 Jim Blandy <jimb@redhat.com>
-
- Add support for new '\_<' and '\_>' regexp operators, matching the
- beginning and end of symbols.
-
- * regex.c (enum syntaxcode): Add Ssymbol.
- (init_syntax_once): Set the syntax for '_' to Ssymbol, not Sword.
- (re_opcode_t): New opcodes `symbeg' and `symend'.
- (print_partial_compiled_pattern): Print the new opcodes properly.
- (regex_compile): Parse the new operators.
- (analyse_first): Skip sym(beg|end) (they match only the empty string).
- (mutually_exclusive_p): `symend' is mutually exclusive with \s_ and
- \sw; `symbeg' is mutually exclusive with \S_ and \Sw.
- (re_match_2_internal): Match symbeg and symend.
-
- * search.c (trivial_regexp_p): \_ is no longer a trivial regexp.
-
-2004-05-19 Kim F. Storm <storm@cua.dk>
-
- * .gdbinit (xsymbol): Fix last change.
-
-2004-05-18 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * .gdbinit (xprintstr): New fun.
- (xstring, xprintsym): Use it.
-
- * w32proc.c (create_child): Use INTMASK.
-
- * alloc.c (Fgarbage_collect): Do all the marking before flushing
- unmarked elements of the undo list.
-
-2004-05-18 David Ponce <david@dponce.com>
-
- * print.c (print): Reset print_depth before to call print_object.
-
-2004-05-18 Jason Rumney <jasonr@gnu.org>
-
- * w32console.c: Prefix RIF functions with w32con_ to avoid
- namespace clash with functions in term.c and w32term.c.
-
- * w32menu.c (add_menu_item, w32_menu_display_help)
- [USE_LISP_UNION_TYPE]: Cast from Lisp_Object using i member.
-
- * w32term.h (display_x_get_resource, vga_stdcolor_name): Add prototype.
-
-2004-05-18 Eli Zaretskii <eliz@gnu.org>
-
- * lisp.h (DECL_ALIGN): Remove restriction on MS-DOS systems.
-
- * msdos.c (syms_of_msdos): Initialize dos-unsupported-char-glyph
- with make_number.
- (IT_write_glyphs): Extract glyph from dos-unsupported-char-glyph
- with XINT.
-
-2004-05-18 Kim F. Storm <storm@cua.dk>
-
- * blockinput.h (INPUT_BLOCKED_P): New macros.
-
- * keyboard.c (Frecursive_edit): Return immediately if input blocked.
- (Ftop_level): Unblock input if blocked.
-
- * buffer.h (GET_OVERLAYS_AT): New macro.
- * msdos.c (IT_note_mouse_highlight): Use it.
- * textprop.c (get_char_property_and_overlay): Use it.
- * xdisp.c (next_overlay_change, note_mouse_highlight): Use it.
- * xfaces.c (face_at_buffer_position): Use it.
-
- * print.c (print_object): Increase buf size.
+2007-07-15 Martin Rudalics <rudalics@gmx.at>
-2004-05-17 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fw32_register_hot_key, Fw32_unregister_hot_key)
- (Fw32_toggle_lock_key) [USE_LISP_UNION_TYPE]: Cast from
- Lisp_Object using i member.
- (w32_quit_key): Rename from Vw32_quit_key, and make an int.
- (syms_of_w32fns, globals_of_w32fns): Use Lisp_Object and int
- consistently.
-
- * w32proc.c (create_child): Use make_number instead of masking pid.
-
- * w32fns.c (w32_color_map_lookup): Return a Lisp_Object.
- (x_to_w32_charset, w32_to_x_charset, w32_to_all_x_charsets):
- Use EQ to compare Lisp_Objects.
- (w32_parse_hot_key): Use int for lisp_modifiers consistently.
-
- * w32term.c (w32_num_mouse_buttons): Rename from
- Vw32_num_mouse_buttons and make it an int.
-
- * w32.c (init_environment): Use it.
-
- * w32fns.c (w32_wnd_proc): Likewise.
-
- * w32proc.c (w32_pipe_read_delay): Rename from
- Vw32_pipe_read_delay and make it an int.
-
- * w32.c (_sys_read_ahead): Use it.
-
- * lisp.h (egetenv) [USE_CRT_DLL]: Remove condition.
-
- * w32proc.c (create_child) [USE_LSB_TAG]: Don't try to mask pid.
-
- * w32inevt.c (w32_console_mouse_position, do_mouse_event)
- (key_event): Don't mix Lisp_Object and int.
-
- * w32heap.c (init_heap) [USE_LSB_TAG]: Don't check heap location.
-
- * keyboard.c (kbd_buffer_get_event): Don't use event->code and
- modifiers in language change event.
-
-2004-05-17 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (mark_object): Ignore Lisp_Misc_Free objects.
- Such objects may be freed markers which still exist on an undo list.
-
-2004-05-16 Juanma Barranquero <lektu@terra.es>
-
- * data.c (Fset_default): Make argument names match their use in
- docstring.
-
-2004-05-15 Andreas Schwab <schwab@suse.de>
-
- * emacs.c (gdb_array_mark_flag): Define.
- * .gdbinit: Mask off gdb_array_mark_flag from vector sizes.
-
-2004-05-15 Eli Zaretskii <eliz@gnu.org>
-
- * lisp.h (DECL_ALIGN) [MSDOS]: Don't define DECL_ALIGN to use
- __attribute__((__aligned__)), so that USE_LSB_TAG would not become
- defined for the MS-DOS build.
-
-2004-05-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * w32fns.c (Fw32_define_rgb_color): Avoid XSET.
-
-2004-05-14 Kenichi Handa <handa@m17n.org>
-
- * ccl.c (Fccl_execute_on_string): Fix setting elements of STATUS.
-
-2004-05-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * lisp.h (Vx_resource_name, Vx_resource_class): Move from xfns.c
- section to frame.c section.
- (Fxw_display_color_p, Fx_file_dialog): Declare if
- HAVE_WINDOW_SYSTEM defined.
-
- * macfns.c (Fx_create_frame): Fix int/Lisp_Object mixup.
-
- * macmenu.c (set_frame_menubar): Use NILP to test a lisp value.
-
- * macterm.c (mac_get_emulated_btn, mac_event_to_emacs_modifiers)
- (mac_get_mouse_btn): Use NILP and EQ to test/compare lisp values.
- (XTread_socket): Fix int/Lisp_Object mixup.
- (mac_check_for_quit_char): Fix pointer/Lisp_Object mixup.
-
- * macterm.h (struct frame, struct face, struct image)
- (display_x_get_resource, Fx_display_color_p)
- (Fx_display_grayscale_p, Fx_display_planes, x_free_gcs):
- Add prototypes.
-
-2004-05-14 Kim F. Storm <storm@cua.dk>
-
- * process.c (wait_reading_process_input): Make reentrant.
- Make Available and Connecting non-static. Save and restore value
- of waiting_for_user_input_p.
-
-2004-05-13 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (mark_kboards): Don't mark x and y members
- that are overloaded in selection request events.
-
-2004-05-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lisp.h (USE_LSB_TAG): Make it the default when it is known to work.
-
-2004-05-13 Glenn Morris <gmorris@ast.cam.ac.uk>
-
- * window.c (Fdisplay_buffer, Fsplit_window)
- (split-height-threshold): Doc fix.
-
-2004-05-13 Juanma Barranquero <lektu@terra.es>
-
- * xfaces.c (Ftty_supports_face_attributes_p)
- (Finternal_copy_lisp_face): Fix typo in docstring.
- (Finternal_get_lisp_face_attribute): Fix docstring.
-
-2004-05-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (syms_of_xfns): Provide x-toolkit also for GTK.
-
-2004-05-11 Steven Tamm <steventamm@mac.com>
-
- * macfns.c (Fx_create_frame): Default to using tool-bar by
- setting tool-bar-lines to 1 in default-frame-alist.
-
-2004-05-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * image.c (xpm_scan, xpm_make_color_table_v, xpm_put_color_table_v)
- (xpm_get_color_table_v, xpm_make_color_table_h)
- (xpm_put_color_table_h, xpm_get_color_table_h)
- (xpm_str_to_color_key, xpm_load_image, xpm_load)
- (syms_of_image): Support XPM on Carbon Emacs. Does not
- depend on libXpm, but only supports XPM version 3 without extensions.
-
-2004-05-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (x_flush, XTframe_up_to_date): Use FRAME_MAC_P
- instead of FRAME_X_P
-
-2004-05-11 Kim F. Storm <storm@cua.dk>
-
- * process.c (read_process_output): Grow decoding_buf when needed;
- this could cause a crash in allocate_string and compact_small_strings.
-
-2004-04-29 Jim Blandy <jimb@redhat.com>
-
- * regex.c (mutually_exclusive_p): In 'case wordbeg', compare op2
- against proper opcode.
-
-2004-05-10 Juanma Barranquero <lektu@terra.es>
-
- * process.c (Fstart_process): Fix docstring.
-
- * charset.c (Fget_unused_iso_final_char): Fix typos in docstring.
- (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction)
- (Fsplit_char, Fchar_charset): Make argument names match their use
- in docstring.
-
-2004-05-10 Richard M. Stallman <rms@gnu.org>
-
- * print.c (print_preprocess): Use being_printed, loop_count and
- halftail to detect overdeep nesting and cyclic cdr chains.
-
-2004-05-10 Andreas Schwab <schwab@suse.de>
-
- * lisp.h (Fmake_symbolic_link): Declare.
-
- * fileio.c (Frename_file): Remove extra argument in call to
- Fmake_symbolic_link.
-
-2004-05-10 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (calc_line_height_property): Use string position when
- object is a string.
-
-2004-05-10 Kenichi Handa <handa@m17n.org>
-
- * print.c (temp_output_buffer_setup): Bind inhibit-read-only and
- inhibit-modification-hooks to t temporarily before calling
- Ferase_buffer.
-
- * xfns.c (x_create_tip_frame): Bind inhibit-read-only and
- inhibit-modification-hooks to t temporarily before calling
- Ferase_buffer.
-
- * w32fns.c (x_create_tip_frame): Bind inhibit-read-only and
- inhibit-modification-hooks to t temporarily before calling
- Ferase_buffer.
-
- * fns.c (count_combining): Delete it.
- (concat): Don't check combining bytes.
-
-2004-05-09 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Vw32_ansi_code_page): New Lisp variable.
- (globals_of_w32fns): Set it.
-
-2004-05-09 Piet van Oostrum <piet@cs.uu.nl>
-
- * data.c (Fquo): Simplify.
-
-2004-05-08 Peter Whaite <emacs@whaite.ca> (tiny change)
-
- * data.c (Fquo): If any argument is float, do the computation in
- floating point.
-
-2004-05-08 Juanma Barranquero <lektu@terra.es>
-
- * process.c (Fwaiting_for_user_input_p, Fmake_network_process)
- (Fset_process_query_on_exit_flag, Vprocess_adaptive_read_buffering):
- Fix spelling of Emacs on docstring.
- (Fset_process_coding_system, Fprocess_coding_system)
- (Fset_process_filter_multibyte, Fprocess_filter_multibyte_p):
- Make argument names match their use in docstring.
- (Fprocess_id, Fprocess_query_on_exit_flag, Finterrupt_process):
- Fix docstring.
-
- * editfns.c (Finsert_buffer_substring): Make argument names match their
- use in docstring.
-
- * syntax.c (Fmodify_syntax_entry): Fix docstring.
-
-2004-05-07 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
- around call to ReceiveEvent to avoid certain crashes.
-
-2004-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (mac_draw_line_to_pixmap, XCreatePixmapFromBitmapData)
- (mac_fill_rectangle_to_pixmap, mac_draw_rectangle_to_pixmap)
- (mac_copy_area_to_pixmap, mac_copy_area_with_mask_to_pixmap):
- Save/restore the current graphics port and device handle when
- drawing into an offscreen graphics world.
-
- * image.c [MAC_OS] (XPutPixel, XGetPixel, image_load_qt_1)
- (gif_load): Likewise.
-
-2004-05-07 Juanma Barranquero <lektu@terra.es>
-
- * window.c (Fset_window_buffer): Fix docstring.
-
-2004-05-06 Thien-Thi Nguyen <ttn@gnu.org>
-
- * emacs.c (main) [VMS]: Fix var ref.
-
-2004-05-06 Romain Francoise <romain@orebokech.com>
-
- * data.c (Fsetq_default): Fix docstring.
-
-2004-05-06 Jason Rumney <jasonr@gnu.org>
-
- * image.c (Display) [HAVE_NTGUI]: Redefine while loading xpm.h
- to avoid name clash.
-
-2004-05-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * fileio.c (barf_or_query_if_file_exists): Use lstat.
- (Frename_file): Handle renaming of symlinks across file systems.
- (Frename_file): Put symlink handling inside #ifdef S_IFLNK.
-
-2004-05-04 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (Qtotal): New var.
- (syms_of_xdisp): Intern and staticpro it.
- (calc_line_height_property): New arg total. Set it if
- line-spacing property has format (total . VALUE).
- (x_produce_glyphs): Ignore line-spacing if line-height is 0.
- Handle total line-spacing property.
-
-2004-05-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
- "under" scroll bar when size/position changes.
-
-2004-05-03 Jason Rumney <jasonr@gnu.org>
-
- * makefile.nt: Remove.
-
-2004-05-02 Eli Zaretskii <eliz@gnu.org>
-
- * syntax.h (SET_RAW_SYNTAX_ENTRY, SYNTAX_ENTRY_INT):
- Avoid compiler warnings.
-
- * Makefile.in (region-cache.o): Depend on config.h.
-
-2004-05-02 Romain Francoise <romain@orebokech.com>
-
- * indent.c (compute_motion): Save vpos in prev_vpos when dealing
- with continuation lines, too.
-
-2004-05-02 Thien-Thi Nguyen <ttn@gnu.org>
-
- * syssignal.h (init_signals): Move decl outside `#ifdef POSIX_SIGNALS'.
-
-2004-05-01 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xdisp.c (calc_line_height_property): YAILOM (yet another
- int/Lisp_Object mixup).
-
-2004-05-01 Eli Zaretskii <eliz@gnu.org>
-
- * msdos.c (top-level): Add "#pragma pack(0)" after <dir.h>, to
- undo bad effect of pack(4) in some versions of system headers.
-
-2004-05-01 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_draw_hollow_cursor): Sync with xterm.c
-
-2004-04-30 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (syms_of_buffer) <line-spacing>: Allow float value.
- (syms_of_buffer) <cursor-type>: Doc fix.
-
- * dispextern.h (struct it): Remove member use_default_face.
- Add members override_ascent, override_descent, override_boff.
-
- * xdisp.c (init_iterator): Handle line-spacing float value.
- Initialize override_ascent member.
- (append_space_for_newline): Reset override_ascent.
- Remove use_default_face.
- (calc_line_height_property): New function to calculate value of
- line-height and line-spacing properties. Look at overlays, too.
- Set override_ascent, override_descent, override_boff members when
- using another face than the current face. Float values are now
- relative to the frame default font, by default; accept a cons
- of ratio and face name to specify value relative to a specific face.
- (x_produce_glyphs): Use calc_line_height_property.
- Use override_ascent etc. when set to handle different face heights.
- A negative line-spacing property value is interpreted as a total
- line height, rather than inter-line spacing.
- (note_mouse_highlight): Allocate room for 40 overlays initially.
-
-2004-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * data.c (Fsubr_name): New fun.
- (syms_of_data): Defsubr it.
-
-2004-04-29 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (null_glyph_slice): New var.
- (append_glyph, append_composite_glyph, append_stretch_glyph):
- Use it to initialize glyph slice.
-
-2004-04-27 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xdisp.c (x_produce_glyphs): Fix the proverbial int/Lisp_Object mixup.
- (on_hot_spot_p): Make sure we always return a value.
- (Flookup_image_map): Remove unused var ix and iy.
- (note_mode_line_or_margin_highlight): Remove unused var `image'.
-
-2004-04-27 Eli Zaretskii <eliz@gnu.org>
-
- * msdos.c (init_environment): If one of the TMP... environment
- variables is set to a drive letter without a trailing slash,
- append a slash.
-
-2004-04-27 Matthew Mundell <matt@mundell.ukfsn.org>
-
- * editfns.c (lisp_time_argument): Provide externally.
-
- * fileio.c (Fset_file_times): New function.
- (syms_of_fileio): Intern and staticpro it.
-
-2004-04-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (x_produce_glyphs): Fix last change; handle newline in
- header line strings.
-
- * dispextern.h (struct it): New member use_default_face.
-
- * xdisp.c (Qline_height): New variable.
- (syms_of_xdisp): Intern and staticpro it.
- (append_space_for_newline): Partially undo 2004-04-25 change;
- add default_face_p arg, and restore callers.
- Clear it->use_default_face after use.
- (x_produce_glyphs): Set default font for ascii char if
- it->use_default_font is set. Change line-spacing property to set
- just extra line spacing. Handle new line-height property.
-
-2004-04-26 Andreas Schwab <schwab@suse.de>
-
- * print.c (print_object): Print non-ascii characters in bool
- vector representation as octal escapes.
-
- * lisp.h (BOOL_VECTOR_BITS_PER_CHAR): Define.
- * print.c (print_object): Use it instead of BITS_PER_CHAR for
- bool vectors.
- * lread.c (read1): Likewise.
- * alloc.c (Fmake_bool_vector): Likewise.
- * data.c (Faref, Faset): Likewise.
- * fns.c (Fcopy_sequence, concat, internal_equal, Ffillarray)
- (mapcar1): Likewise.
-
-2004-04-26 Steven Tamm <tamm@Steven-Tamms-Computer.local>
-
- * lread.c (init_lread): Fix typo in HAVE_CARBON test logic.
-
-2004-04-26 Miles Bader <miles@gnu.org>
-
- * lisp.h (CYCLE_CHECK): Macro moved from xfaces.c.
-
-2004-04-26 Juanma Barranquero <lektu@terra.es>
-
- * buffer.c (Fpop_to_buffer): Fix docstring.
-
-2004-04-26 Steven Tamm <steventamm@mac.com>
-
- * lread.c (init_lread): Don't display missing lisp directory
- warnings with Carbon Emacs because self-contained bundled Emacs
- may be built without correct installation path.
-
-2004-04-25 Kim F. Storm <storm@cua.dk>
-
- * macterm.c (x_draw_hollow_cursor): Fix height of box for narrow lines.
-
- * xterm.c (x_draw_hollow_cursor): Fix height of box for narrow lines.
-
- * xdisp.c (append_space_for_newline): Rename from append_space.
- Remove DEFAULT_FACE_P arg; always use current face. Callers changed.
- (x_produce_glyphs): Handle line-spacing property on newline char.
- If value is t, adjust ascent and descent to fit current row height.
- If value is an integer or float, set extra_line_spacing to integer
- value, or to float value x current line height.
-
-2004-04-23 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (Finternal_char_font): If POSITION is nil, return
- font for displaying CH with the default face.
-
-2004-04-23 Juanma Barranquero <lektu@terra.es>
-
- * makefile.w32-in: Add "-*- makefile -*-" mode tag.
-
-2004-04-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lisp.h (XINT) [EXPLICIT_SIGN_EXTEND && !NO_UNION_TYPE]:
- Don't make assumptions about the relative place of i and val.
- (EQ) [!NO_UNION_TYPE]: Don't forget to check the type match as well.
-
-2004-04-21 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct glyph_slice): New struct.
- (struct glyph): New member slice.
- (GLYPH_SLICE_EQUAL_P): New macro.
- (GLYPH_EQUAL_P): Use it.
- (struct glyph_string): New member slice.
- (struct it_slice): New struct.
- (struct it): New member slice, add member to stack too.
- New member constrain_row_ascent_descent_p.
- (image_ascent): Add prototype.
-
- * dispnew.c (buffer_posn_from_coords): Return full image width
- and height even for image slices (posn is relative to full image).
- (marginal_area_string): Adjust x0,y0 for image slice.
-
- * image.c (image_ascent): Add slice arg; calculate ascent for
- image slice (or full image).
-
- * keyboard.c (Fposn_at_x_y, Fposn_at_point): New defuns.
- (syms_of_keyboard): Defsubr them.
-
- * lisp.h (pos_visible_p): Fix prototype.
-
- * macterm.c (x_draw_relief_rect): Add top_p and bot_p args.
- (x_draw_glyph_string_box): Fix call to x_draw_relief_rect.
- (x_draw_image_foreground, x_draw_image_relief)
- (x_draw_image_foreground_1, x_draw_image_glyph_string):
- Draw sliced images.
-
- * w32term.c (w32_draw_relief_rect): Add top_p and bot_p args.
- (x_draw_glyph_string_box): Fix call to x_draw_relief_rect.
- (x_draw_image_foreground, x_draw_image_relief)
- (w32_draw_image_foreground_1, x_draw_image_glyph_string):
- Draw sliced images.
-
- * w32term.h (image_ascent): Remove prototype.
-
- * window.c (Fpos_visible_in_window_p): Return pixel position if
- PARTIALLY arg is non-nil. Simplify. Doc fix.
- (Fwindow_vscroll, Fset_window_vscroll): Add optional PIXEL_P arg
- to return/set vscroll in pixels.
-
- * window.h (Fwindow_vscroll, Fset_window_vscroll): Fix EXFUN.
-
- * xdisp.c (Qslice): New variable.
- (syms_of_xdisp): Intern and staticpro it.
- (pos_visible_p): Return pixel position in new x and y args.
- (init_iterator): Reset it->slice info.
- (handle_display_prop): Parse (slice ...) property.
- (push_it, pop_it): Save/restore slice info.
- (make_cursor_line_fully_visible): Fix 2004-04-14 change. Do not
- force repositioning of tall row if window is vscrolled, as that
- would reset vscroll.
- (append_space): Set it->constrain_row_ascent_descent_p to avoid
- increasing row height if row is non-empty.
- (fill_image_glyph_string): Copy slice info.
- (take_vertical_position_into_account): Simplify.
- (produce_image_glyph): Handle iterator slice info, setup glyph
- slice info. Do not force minimum line height.
- (x_produce_glyphs): If it->constrain_row_ascent_descent_p is set,
- do not increase height (ascent/descent) of non-empty row when
- adding normal character glyph; instead reduce glyph ascent/descent
- appropriately; if row is higher than current glyph, adjust glyph
- descent/ascent to reposition glyph within the existing row.
- Likewise, when char is newline, only set ascent/descent if row is
- currently empty.
- (note_mouse_highlight): Handle hotspots with sliced image.
-
- * xterm.c (x_draw_relief_rect): Add top_p and bot_p args.
- (x_draw_glyph_string_box): Fix call to x_draw_relief_rect.
- (x_draw_image_foreground, x_draw_image_relief)
- (x_draw_image_foreground_1, x_draw_image_glyph_string):
- Draw sliced images.
-
- * xterm.h (image_ascent): Remove prototype.
-
-2004-04-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (Fkey_description): Fix the usual int/Lisp_Object mixup.
-
-2004-04-20 John Paul Wallington <jpw@gnu.org>
-
- * fns.c (Fassoc, Feql): Fix indentation.
-
- * fontset.c (regularize_fontname): Rename from regulalize_fontname.
-
-2004-04-19 John Paul Wallington <jpw@gnu.org>
-
- * fns.c (Feql): New function.
- (syms_of_fns): Defsubr it.
-
-2004-04-18 Jason Rumney <jasonr@gnu.org>
-
- * w32select.c (Fw32_set_clipboard_data): Get sequence number
- after closing the clipboard.
-
-2004-04-16 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.c (Fbuffer_base_buffer): Doc fix.
-
-2004-04-17 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (Fkey_description): Add optional PREFIX arg.
- Combine prefix with KEYS to make up the full key sequence to describe.
- Correlate meta_prefix_char and following (simple) key to describe
- as meta modifier. All callers changed.
- (describe_map): Rename arg `keys' to `prefix'. Remove local
- `elt_prefix' var. Use Fkey_description with prefix instead of
- elt_prefix combined with Fsingle_key_description.
- (describe_vector): Declare static. Replace arg `elt_prefix' with
- `prefix'. Add KEYMAP_P arg. Add local var `elt_prefix'; use it
- if !KEYMAP_P. Use Fkey_description with prefix instead of
- Fsingle_key_description.
-
- * keymap.h (Fkey_description): Fix prototype.
- (describe_vector): Remove prototype.
-
- * xdisp.c (update_overlay_arrows): Fix handling of up_to_date < 0.
-
- * image.c (PNG_BG_COLOR_SHIFT): Remove.
- (png_load): Fix calculation of transparent background color on X
- and W32 platforms.
-
-2004-04-16 Juanma Barranquero <lektu@terra.es>
-
- * xdisp.c (try_scrolling): Make sure `scroll-conservatively' is
- not too large before computing how much to scroll.
-
-2004-04-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * dired.c (Ffile_attributes): Don't pass extra nil arg to file-handler.
-
-2004-04-14 Luc Teirlinck <teirllm@auburn.edu>
-
- * fileio.c (Fverify_visited_file_modtime, Fvisited_file_modtime):
- Add hyperlink to Elisp manual to the docstring.
-
-2004-04-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * callint.c (fix_command): Use XDCR.
-
-2004-04-14 Nick Roberts <nick@nick.uklinux.net>
-
- * window.c (Fget_lru_window): Doc fix.
-
-2004-04-14 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Fformat): Fix allocation size of precision array.
-
- * dispnew.c (update_window): Only set changed_p if
- scrolling_window actually did scroll.
- (scrolling_window): Only return 1 if we actually did scroll.
-
- * xdisp.c (get_glyph_string_clip_rect): Fix reduction of cursor
- height to glyph height when cursor row is not fully visible.
- (make_cursor_line_fully_visible): Add FORCE_P arg to return
- failure in case row is higher than window. Callers changed.
- (try_scrolling): Fix loop in scrolling if last_line_misfit (from Gerd).
- Try to scroll partially visible, higher-than-window cursor row.
- (redisplay_window): Always try to scroll partially visible,
- higher-than-window cursor row - both initially and again with
- centering_position = 0.
- Clear desired matrix before retrying with centering_position = 0.
-
-2004-04-13 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * syntax.c (scan_lists): Simplify backward string scan.
- Fix off-by-one boundary check for string and comment fences.
-
-2004-04-13 Joe Buehler <jbuehler@hekimian.com>
-
- * sheap.c, unexcw.c: New files.
-
-2004-04-12 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.c (Fmake_indirect_buffer): Throw an error if the intended
- base buffer has been killed. Correct the error message if the
- base buffer does not exist.
-
-2004-04-12 Joe Buehler <jbuehler@hekimian.com>
-
- * s/cygwin.h: Changes for Cygwin unexec() support, changes in
- Cygwin itself. Add support for Xaw3d scrollbars.
-
- * puresize.h: Set up PURE_P() for Cygwin unexec() support.
-
- * lastfile.c: Define my_endbss[] for Cygwin unexec() support.
-
- * gmalloc.c (__default_morecore): Use bss_sbrk(), not __sbrk(),
- before Cygwin unexec.
-
- * Makefile.in: Link changes for Cygwin unexec() support.
-
-2004-04-12 Andreas Schwab <schwab@suse.de>
-
- * buffer.c (Fmake_indirect_buffer): Check that NAME is a string.
-
-2004-04-11 Luc Teirlinck <teirllm@auburn.edu>
-
- * buffer.c (Fgenerate_new_buffer_name): Return NAME argument if
- IGNORE argument equals NAME. Doc fix.
-
-2004-04-11 Masatake YAMATO <jet@gyve.org>
-
- * buffer.c (fix_start_end_in_overlays): Make overlays
- empty if they are backwards.
-
-2004-04-09 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * xfaces.c (face_color_supported_p): Fix compilation without X11.
-
-2004-04-07 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * doc.c (Fsnarf_documentation): Ignore new file name entries.
-
-2004-04-06 Kim F. Storm <storm@cua.dk>
-
- * msdos.c (clear_mouse_face): Only clear mouse highlight if not hidden.
- (dos_rawgetc): Set mouse_face_hidden after clearing highlight.
-
- * w32term.c (w32_read_socket): Set mouse_face_hidden after
- clearing highlight.
-
- * xdisp.c (clear_mouse_face): Only clear mouse highlight if not hidden.
-
- * xterm.c (handle_one_xevent): Set mouse_face_hidden after
- clearing highlight.
-
- * indent.c (vmotion): Do not reserve one column for continuation
- marks on window frames.
-
-2004-04-04 Eli Zaretskii <eliz@gnu.org>
-
- * charset.h (SINGLE_BYTE_CHAR_P): Fix macro to avoid warnings
- from GCC.
-
-2004-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * .gdbinit-union: Remove.
-
- * .gdbinit: Make it work for USE_LSB_TAG and !NO_LISP_UNION.
- (xgetptr, xgetint, xgettype): New funs. Use them everywhere.
- ($nonvalbits): Remove.
- ($valmask): Set it by calling xreload to avoid redundancy.
-
- * emacs.c (gdb_use_union, gdb_use_lsb): New vars.
- (gdb_emacs_intbits): Remove.
-
-2004-03-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * data.c (Fbyteorder): Make test work even if unsigned is not 4 bytes.
-
-2004-03-30 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Fformat): Fix initialization of the array info.
-
-2004-03-30 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (x_mouse_click_focus_ignore_position): New var.
- (syms_of_xterm): DEFVAR_BOOL it.
- (ignore_next_mouse_click_timeout): New var.
- (handle_one_xevent): Clear it on KeyPress, set it on EnterNotify.
- Use it to filter mouse clicks following focus event.
-
-2004-03-29 David Ponce <david@dponce.com>
-
- * callint.c (Fcall_interactively): Fix last change.
-
-2004-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * eval.c (Fcommandp): Simplify.
-
- * data.c (Finteractive_form): Rename from Fsubr_interactive_form.
- Extend to handle all kinds of functions.
-
- * lisp.h (Finteractive_form): Declare.
-
- * callint.c (Fcall_interactively): Use it.
-
-2004-03-26 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (syms_of_xdisp): Include `void-variable' in list_of_error
- to catch errors in calc_pixel_width_or_height during redisplay.
-
-2004-03-26 Masatake YAMATO <jet@gyve.org>
-
- * buffer.c (fix_start_end_in_overlays): Rename fix_overlays_in_range.
-
- * lisp.h (fix_start_end_in_overlays): Likewise.
-
- * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
-
- * editfns.c (Ftranspose_regions): Likewise.
-
-2004-03-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Do not pass key press events to GTK.
-
-2004-03-19 Richard M. Stallman <rms@gnu.org>
-
- * s/sol2-6.h: Delete previous change.
-
-2004-03-19 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (move_it_in_display_line_to): Fix MOVE_TO_POS case when
- to_charpos corresponds to newline in right fringe. Use local
- BUFFER_POS_REACHED_P macro.
-
-2004-03-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xdisp.c (calc_pixel_width_or_height): Add ifdef HAVE_WINDOW_SYSTEM
- to compile on non-window system.
-
-2004-03-19 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (calc_pixel_width_or_height): Add prototype.
-
- * image.c (Qcenter): Move to xdisp.c.
-
- * xdisp.c (Qcenter): Declare here.
- (syms_of_xdisp): Intern and staticpro it.
- (handle_single_display_prop): Allow space display property on all
- platforms.
- (display_mode_line): Set mode_line_p before displaying line.
- (calc_pixel_width_or_height): Declare extern. Add separate :align-to
- handling. Remove complex cases for fringes and scroll-bars.
- Add left, right, and center alignment positions. Add text (area)
- width/height. Return width or height for image specs.
- (produce_stretch_glyph): Improve handling of :align-to. Is now
- relative to left of text area by default, but other base offsets
- can be specified -- also for text lines.
-
- * term.c (produce_glyphs): Handle IT_STRETCH.
- (produce_stretch_glyph): New function to handle space width and
- align-to display properties on non-window systems.
-
-2004-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * fileio.c (Fread_file_name): Set completion-ignore-case for
- case-insensitive systems.
-
-2004-03-14 Masatake YAMATO <jet@gyve.org>
-
- * xdisp.c (note_mode_line_or_margin_highlight): Accept HEADER_LINE
- when keymap and cursor are setup.
-
-2004-03-14 Steven Tamm <steventamm@mac.com>
-
- * Makefile.in (XMENU_OBJ) [HAVE_CARBON]: Do not include xmenu.o.
-
-2004-03-14 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (x_find_image_file): Add prototype.
-
- * image.c (x_find_image_file): Make extern.
-
- * xfns.c (x_find_image_file): Remove prototype.
-
-2004-03-13 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (XMENU_OBJ): Include xmenu.o if HAVE_MENUS is defined.
-
- * emacs.c (main): Call syms_of_xmenu only if HAVE_MENUS is defined.
-
-2004-03-12 Richard M. Stallman <rms@gnu.org>
-
- * fns.c (internal_equal): New arg PROPS controls comparing
- text properties. All callers changed.
- (Fequal_including_properties): New function.
- (syms_of_fns): defsubr it.
-
-2004-03-12 Kim F. Storm <storm@cua.dk>
-
- Fix image support on MAC. From YAMAMOTO Mitsuharu.
-
- * dispextern.h (XImagePtr, XImagePtr_or_DC): Add typedefs.
- (image_background, image_background_transparent): Fix prototypes.
-
- * image.c (XImagePtr, XImagePtr_or_DC): Move typedefs to dispextern.h.
-
- * macfns.c (x_list_fonts, x_get_font_info, x_load_font)
- (x_query_font, x_find_ccl_program, x_set_window_size)
- (x_make_frame_visible, mac_initialize, XCreatePixmap)
- (XCreatePixmapFromBitmapData, XFreePixmap, XSetForeground)
- (mac_draw_line_to_pixmap): Move prototypes to macterm.h.
-
- * macterm.h (x_list_fonts, x_get_font_info, x_load_font)
- (x_query_font, x_find_ccl_program, x_set_window_size)
- (x_make_frame_visible, mac_initialize, XCreatePixmap)
- (XCreatePixmapFromBitmapData, XFreePixmap, XSetForeground)
- (mac_draw_line_to_pixmap): Add prototypes.
-
-2004-03-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * macterm.c (XTread_socket): Fix mouse click on tool bar.
-
-2004-03-11 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h: Move image related prototypes from xfns.c section
- to image.c. Condition them by HAVE_WINDOW_SYSTEM rather than
- HAVE_X_WINDOWS.
-
- * Makefile.in (XOBJ): Consolidate into one list. Add image.o.
- Move gtkutil.o to new GTK_OBJ list.
- (XMENU_OBJ) [HAVE_MENUS]: Move declaration to proper place.
- (GTK_OBJ) [USE_GTK]: New declaration.
- (obj): Add $(GTK_OBJ) to list.
-
-2004-03-11 Steven Tamm <steventamm@mac.com>
-
- * image.c [MAC_OSX]: Include sys/stat.h.
-
- * macfns.c (syms_of_macfns): Remove definitions of things now
- defined in image.c.
-
-2004-03-11 Kim F. Storm <storm@cua.dk>
-
- The following changes consolidates the identical/similar image
- support code previously found in xfns.c, w32fns.c, and macfns.c
- into a new file image.c.
-
- * makefile.w32-in (OBJ1): Add image.o.
- ($(BLD)/image.$(O)): Add dependencies.
-
- * Makefile.in (XOBJ, MAC_OBJ): Add image.o.
- (image.o): Add dependencies.
-
- * image.c: New file with consolidated image support code.
- (COLOR_TABLE_SUPPORT): New define to control whether
- color table support is available (X only).
- (Bitmap_Record): Common name for x_bitmap_record,
- w32_bitmap_record, and mac_bitmap_record.
- (XImagePtr): Common name for pointer to XImage or equivalent.
- (XImagePtr_or_DC): New type to simplify code sharing; equivalent
- to XImagePtr on X+MAC, and to HDC on W32.
- (GET_PIXEL): Wrapper for XGetPixel or equivalent.
- (NO_PIXMAP): Common name for "None" or equivalent.
- (PNG_BG_COLOR_SHIFT): Bits to shift PNG background colors.
- (RGB_PIXEL_COLOR): Common type for an integer "pixel color" value.
- (PIX_MASK_RETAIN, PIX_MASK_DRAW): Portability macros (from macfns.c).
- (FRAME_X_VISUAL, x_defined_color, DefaultDepthOfScreen):
- Define with suitable equivalents on W32 and MAC for code sharing.
- (XDrawLine): Define on MAC for code sharing.
- (Destroy_Image, Free_Pixmap): Wrappers for code sharing.
- (IF_LIB_AVAILABLE): Macro to simplify code sharing.
- (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
- (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
- (x_reference_bitmap, x_create_bitmap_from_data)
- (x_create_bitmap_from_file, x_destroy_bitmap)
- (x_destroy_all_bitmaps, x_create_bitmap_mask)
- (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
- (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
- (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
- (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
- (define_image_type, lookup_image_type, valid_image_p)
- (image_error, enum image_value_type, struct image_keyword)
- (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
- (make_image, free_image, prepare_image_for_display, image_ascent)
- (four_corners_best, image_background, image_background_transparent)
- (x_clear_image_1, x_clear_image, x_alloc_image_color)
- (make_image_cache, free_image_cache, clear_image_cache)
- (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
- (forall_images_in_image_cache, x_create_x_image_and_pixmap)
- (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
- (find_image_fsspec, image_load_qt_1, image_load_quicktime)
- (init_image_func_pointer, image_load_quartz2d)
- (struct ct_color, init_color_table, free_color_table)
- (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
- (cross_disabled_images, x_to_xcolors, x_from_xcolors)
- (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
- (x_disable_image, x_build_heuristic_mask)
- (XBM support, XPM support, PBM support, PNG support, JPEG support)
- (TIFF support, GIF support, Ghostscript support): Consolidate image
- code from xfns.c, w32fns.c, and macfns.c.
- (syms_of_image): Consolidate image related symbol setup here.
- (init_image): Consolidate image related initializations here.
-
- * emacs.c (main) [HAVE_WINDOW_SYSTEM]: Add calls to syms_of_image
- and init_image. Remove call to init_xfns.
-
- * macterm.h (struct mac_bitmap_record): Add file member.
- Not currently used, but simplifies code sharing.
-
- * macfns.c (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
- (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
- (x_reference_bitmap, x_create_bitmap_from_data)
- (x_create_bitmap_from_file, x_destroy_bitmap)
- (x_destroy_all_bitmaps, x_create_bitmap_mask)
- (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
- (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
- (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
- (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
- (define_image_type, lookup_image_type, valid_image_p)
- (image_error, enum image_value_type, struct image_keyword)
- (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
- (make_image, free_image, prepare_image_for_display, image_ascent)
- (four_corners_best, image_background, image_background_transparent)
- (x_clear_image_1, x_clear_image, x_alloc_image_color)
- (make_image_cache, free_image_cache, clear_image_cache)
- (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
- (forall_images_in_image_cache, x_create_x_image_and_pixmap)
- (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
- (find_image_fsspec, image_load_qt_1, image_load_quicktime)
- (init_image_func_pointer, image_load_quartz2d)
- (struct ct_color, init_color_table, free_color_table)
- (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
- (cross_disabled_images, x_to_xcolors, x_from_xcolors)
- (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
- (x_disable_image, x_build_heuristic_mask)
- (XBM support, XPM support, PBM support, PNG support, JPEG support)
- (TIFF support, GIF support, Ghostscript support): Merge with image
- code from xfns.c and macfns.c into image.c.
- (syms_of_xfns): Move image related symbols to image.c.
- (init_external_image_libraries, init_xfns): Remove; initialization
- moved to init_image in image.c.
-
- * w32fns.c (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
- (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
- (x_reference_bitmap, x_create_bitmap_from_data)
- (x_create_bitmap_from_file, x_destroy_bitmap)
- (x_destroy_all_bitmaps, x_create_bitmap_mask)
- (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
- (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
- (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
- (define_image_type, lookup_image_type, valid_image_p)
- (image_error, enum image_value_type, struct image_keyword)
- (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
- (make_image, free_image, prepare_image_for_display, image_ascent)
- (four_corners_best, image_background, image_background_transparent)
- (x_clear_image_1, x_clear_image, x_alloc_image_color)
- (make_image_cache, free_image_cache, clear_image_cache)
- (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
- (forall_images_in_image_cache, x_create_x_image_and_pixmap)
- (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
- (struct ct_color, init_color_table, free_color_table)
- (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
- (cross_disabled_images, x_to_xcolors, x_from_xcolors)
- (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
- (x_disable_image, x_build_heuristic_mask)
- (XBM support, XPM support, PBM support, PNG support, JPEG support)
- (TIFF support, GIF support, Ghostscript support): Merge with image
- code from xfns.c and macfns.c into image.c.
- (syms_of_xfns): Move image related symbols to image.c.
- (init_external_image_libraries, init_xfns): Remove; initialization
- moved to init_image in image.c.
-
- * xfns.c (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
- (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
- (x_reference_bitmap, x_create_bitmap_from_data)
- (x_create_bitmap_from_file, x_destroy_bitmap)
- (x_destroy_all_bitmaps, x_create_bitmap_mask)
- (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
- (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
- (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
- (define_image_type, lookup_image_type, valid_image_p)
- (image_error, enum image_value_type, struct image_keyword)
- (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
- (make_image, free_image, prepare_image_for_display, image_ascent)
- (four_corners_best, image_background, image_background_transparent)
- (x_clear_image_1, x_clear_image, x_alloc_image_color)
- (make_image_cache, free_image_cache, clear_image_cache)
- (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
- (forall_images_in_image_cache, x_create_x_image_and_pixmap)
- (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
- (struct ct_color, init_color_table, free_color_table)
- (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
- (cross_disabled_images, x_to_xcolors, x_from_xcolors)
- (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
- (x_disable_image, x_build_heuristic_mask)
- (XBM support, XPM support, PBM support, PNG support, JPEG support)
- (TIFF support, GIF support, Ghostscript support): Merge with
- w32fns.c and macfns.c image code into image.c.
- (syms_of_xfns): Move image related symbols to image.c.
- (init_xfns): Remove; initialization moved to init_image in image.c.
-
- * lisp.h (syms_of_image, init_image): Add protoypes.
- (init_xfns): Remove prototype.
-
- * dispextern.h (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
- (x_reference_bitmap, x_create_bitmap_from_data)
- (x_create_bitmap_from_file, x_destroy_bitmap)
- (x_create_bitmap_mask): Move prototypes from dispextern.h.
- (gamma_correct) [MAC_OS]: Add prototype.
-
- * xterm.h (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
- (x_reference_bitmap, x_create_bitmap_from_data)
- (x_create_bitmap_from_file, x_destroy_bitmap)
- (x_create_bitmap_mask): Move prototypes to dispextern.h.
-
-2004-03-09 Kenichi Handa <handa@etlken2>
-
- * coding.c (decode_coding_emacs_mule): Handle insufficent source
- correctly.
-
-2004-03-04 Richard M. Stallman <rms@gnu.org>
-
- * s/sol2-6.h (LD_SWITCH_SYSTEM_TEMACS): New definition.
-
- * window.c (Fdisplay_buffer): Doc fix.
-
- * buffer.c (Fpop_to_buffer): Doc fix.
-
-2004-03-03 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (display_line): Fix call to get_overlay_arrow_glyph_row.
-
-2004-03-02 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * editfns.c (Ftranslate_region): Lisp_Object/int mixup.
-
-2004-03-02 Richard M. Stallman <rms@gnu.org>
-
- * indent.c (compute_motion): Save vpos in prev_vpos, like hpos etc.
-
-2004-03-02 Kenichi Handa <handa@m17n.org>
-
- * doc.c (Fsubstitute_command_keys): Fix counding bytes.
-
-2004-03-02 Kim F. Storm <storm@cua.dk>
-
- * window.h (struct window): New member overlay_arrow_bitmap.
-
- * window.c (make_window): Initialize overlay_arrow_bitmap.
-
- * xdisp.c (Voverlay_arrow_variable_list): New variable to properly
- implement and integrate multiple overlay arrows with redisplay.
- (syms_of_xdisp): DEFVAR_LISP and initialize it.
- (last_arrow_position, last_arrow_string): Replace by properties.
- (Qlast_arrow_position, Qlast_arrow_string)
- (Qoverlay_arrow_string, Qoverlay_arrow_bitmap): New variables.
- (syms_of_xdisp): Intern and staticpro them.
- (overlay_arrow_string_or_property, update_overlay_arrows)
- (overlay_arrow_in_current_buffer_p, overlay_arrows_changed_p)
- (overlay_arrow_at_row): New functions for multiple overlay arrows.
- (redisplay_internal): Use them instead of directly accessing
- Voverlay_arrow_position etc. for multiple overlay arrows.
- (mark_window_display_accurate): Use update_overlay_arrows.
- (try_cursor_movement): Use overlay_arrow_in_current_buffer_p.
- (try_window_id): Use overlay_arrows_changed_p.
- (get_overlay_arrow_glyph_row): Add overlay_arrow_string arg.
- (display_line): Use overlay_arrow_at_row to check multiple
- overlay arrows, and get relevant overlay-arrow-string and
- overlay-arrow-bitmap. Set w->overlay_arrow_bitmap accordingly.
- (produce_image_glyph): Set pixel_width = 0 for fringe bitmap.
- (syms_of_xdisp): Remove last_arrow_position and last_arrow_string.
-
- * fringe.c (draw_fringe_bitmap): Use w->overlay_arrow_bitmap if set.
- (update_window_fringes): Remove unused code.
-
-2004-03-01 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_read_socket): Fix last change to ButtonPress handling.
-
-2004-03-01 Juanma Barranquero <lektu@terra.es>
-
- * fringe.c (Fdefine_fringe_bitmap): Fix typo in docstring.
-
- * makefile.w32-in ($(BLD)/fringe.$(O)): Add dependencies.
-
-2004-03-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (Fx_display_color_cells): Use number of planes to calculate
- how many colors can be displayed.
-
-2004-03-01 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Ftranslate_region): Handle multibyte chars in TABLE
- correctly.
-
-2004-02-28 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (update_window): Update header line also if there are
- no other changes in window (move code after set_cursor label).
-
- * lisp.h (mark_window_display_accurate): Remove prototype.
-
- * window.c (window_loop, Fforce_window_update): Force mode line
- updates by setting prevent_redisplay_optimizations_p and
- update_mode_lines.
-
-2004-02-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_window): Fix indentation.
-
- * xterm.c (x_calc_absolute_position): Call x_real_positions
- to get WM window sizes and use those to calculate position.
- (x_set_offset): Remove code commented out.
-
-2004-02-28 Miles Bader <miles@gnu.org>
-
- * keyboard.c (adjust_point_for_property): #ifdef-out dodgy xassert.
-
-2004-02-28 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (kbd_buffer_store_event_hold): New function to store
- an event into kbd fifo, but with special handling of quit event;
- a quit event is saved for later, and further events are discarded
- until the saved quit event has been processed.
- (kbd_buffer_store_event): Use kbd_buffer_store_event_hold.
- (gen_help_event): Store help event in kbd fifo.
- (NREAD_INPUT_EVENTS): Remove.
- (read_avail_input): Adapt to new read_socket_hook interface.
- Remove allocation and initialization of local input_event buffer,
- as read_socket_hook stores events directly in fifo. Allocate and
- initialize local hold_quit event to handle postponed quit event
- (and store it if set by kbd_buffer_store_event_hold).
-
- * keyboard.h (kbd_buffer_store_event_hold): Add prototype.
- (gen_help_event): Fix prototype.
-
- * macterm.c (XTread_socket): Remove bufp_r and
- numcharsp args. Add hold_quit arg.
- Rework to use just one, local, inev input_event. Store inev
- directly in fifo using kbd_buffer_store_event_hold.
-
- * sysdep.c (BUFFER_SIZE_FACTOR): Remove.
- (read_input_waiting): Adapt to new read_socket_hook interface.
- Remove allocation and initialization of local input_event buffer,
- as read_socket_hook stores events directly in fifo. Allocate and
- initialize local hold_quit event to handle postponed quit event
- (and store it if set by kbd_buffer_store_event_hold).
-
- * term.c (read_socket_hook): Fix arg list.
-
- * termhooks.h (read_socket_hook): Fix prototype.
-
- * w32inevt.c (w32_console_read_socket): Remove bufp_r and
- numcharsp args. Add hold_quit arg.
- Rework to use just one, local, inev input_event. Store inev
- directly in fifo using kbd_buffer_store_event_hold.
-
- * w32inevt.h (w32_console_mouse_position): Fix prototype.
-
- * w32term.c (w32_read_socket): Remove bufp_r and numcharsp args.
- Add hold_quit arg. Rework to use just one, local, inev
- input_event. Store inev directly in fifo using
- kbd_buffer_store_event_hold. Update count in one place.
- Postpone call to gen_help_event until inev is stored; use new
- local do_help for this.
- Remove local emacs_event in handing of ButtonPress event; just use
- inev instead (so no reason to copy it later).
-
- * xsmfns.c (x_session_check_input): Remove numchars arg.
-
- * xterm.c (x_focus_changed, x_detect_focus_change):
- Remove numchars arg. Always store event into bufp arg.
- Return nothing. Callers changed accordingly.
- (glyph_rect): Simplify.
- (STORE_KEYSYM_FOR_DEBUG): New macro.
- (SET_SAVED_MENU_EVENT): Use inev instead of bufp, etc.
- (current_bufp, current_numcharsp) [USE_GTK]: Remove.
- (current_hold_quit) [USE_GTK]: Add.
- (event_handler_gdk): Adapt to new handle_one_xevent.
- (handle_one_xevent): Remove bufp_r and numcharsp args.
- Add hold_quit arg. Rework to use just one, local, inev
- input_event. Store inev directly in fifo using
- kbd_buffer_store_event_hold. Update count in one place.
- Postpone call to gen_help_event until inev is stored; use new
- local do_help for this.
- Simplify handling of keysyms (consolidate common code). Fix bug
- where count was updated with nchars instead of nbytes.
- Remove local emacs_event in handing of ButtonPress event; just use
- inev instead (so no reason to copy it later).
- Remove `out' label. Rename label `ret' to `done'; add various
- `goto done' to clarify code flow in deeply nested blocks.
- (x_dispatch_event): Simplify as handle_one_xevent now calls
- kbd_buffer_store_event itself.
- (XTread_socket): Remove bufp_r and numcharsp args. Add hold_quit
- arg. Call handle_one_xevent with new arglist. Store event from
- x_session_check_input in fifo.
- [USE_GTK]: Setup current_hold_quit.
- Decrement handling_signal before unblocking input.
- (x_initialize) [USE_GTK]: Initialize current_count.
-
- * xterm.h (x_session_check_input): Fix prototype.
-
-2004-02-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * s/darwin.h (LD_SWITCH_SYSTEM_TEMACS): Add `-framework QuickTime'.
-
- * dispextern.h [MAC_OSX]: Do not include Carbon/Carbon.h (now in
- macgui.h).
-
- * emacs.c (main) [HAVE_CARBON]: Call init_xfns.
-
- * macgui.h [MAC_OSX]: Include Carbon/Carbon.h.
- (mktime, DEBUG, Z, free, malloc, realloc, max, min)
- (init_process) [MAC_OSX]: Avoid conflicts with Carbon/Carbon.h.
- [!MAC_OSX]: Include QDOffscreen.h and Controls.h.
- (INFINITY) [MAC_OSX]: Avoid conflict with definition in math.h.
- (Bitmap): Remove typedef.
- (Pixmap): Change int to GWorldPtr.
-
- * macmenu.c [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
-
- * macterm.h [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
- (RED16_FROM_ULONG, GREEN16_FROM_ULONG, BLUE16_FROM_ULONG):
- New #define to extract 16-bit depth color components from unsigned
- long representation.
- (PIX_MASK_DRAW, PIX_MASK_RETAIN): New #define to represent pixel
- colors used for masks.
- (struct mac_display_info): Add color_p. Remove n_cbits.
-
- * macfns.c: Include sys/types.h and sys/stat.h.
- [MAC_OSX]: Do not include Carbon/Carbon.h (now in macgui.h).
- Include QuickTime/QuickTime.h.
- (XCreatePixmap, XCreatePixmapFromBitmapData, XFreePixmap)
- (XSetForeground, mac_draw_line_to_pixmap): Add externs for
- functions defined in macterm.c.
- (XImagePtr): New typedef. Corresponds to XImage * in xfns.c.
- (ZPixmap): New #define for compatibility with xfns.c.
- (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
- (x_create_x_image_and_pixmap, x_destroy_x_image, x_put_x_image)
- (find_image_fsspec, image_load_qt_1, image_load_quicktime):
- New functions.
- (four_corners_best, x_create_x_image_and_pixmap)
- (x_destroy_x_image, unwind_create_frame, x_disable_image)
- (x_edge_detection, init_color_table, colors_in_color_table)
- (lookup_rgb_color, lookup_pixel_color, postprocess_image)
- (x_put_x_image, slurp_file, xbm_scan, xbm_load, xbm_load_image)
- (xbm_image_p, xbm_read_bitmap_data, xbm_file_p, x_to_xcolors)
- (x_from_xcolors, x_detect_edges): New declarations (from xfns.c).
- (mac_color_map_lookup, x_to_mac_color): Fix Lisp_Object/unsigned
- long mixup.
- (mac_defined_color, x_to_x_colors): Use RED16_FROM_ULONG etc.
- (x_decode_color): Don't use n_cbits (in struct mac_display_info).
- (x_set_foreground_color, x_set_cursor_color): Sync with w32fns.c.
- (x_set_cursor_type, Fxw_color_values, valid_image_p)
- (image_value_type, parse_image_spec, image_ascent, x_clear_image)
- (x_alloc_image_color, clear_image_cache, lookup_image)
- (x_find_image_file, xbm_read_bitmap_file_data)
- (enum xbm_keyword_index, xbm_format, xbm_image_p, xbm_scan)
- (xbm_read_bitmap_data, xbm_load, pbm_image_p, pbm_scan_number)
- (enum pbm_keyword_index, pbm_format, enum png_keyword_index)
- (png_format, png_image_p, enum jpeg_keyword_index, jpeg_format)
- (jpeg_image_p, enum tiff_keyword_index, tiff_format, tiff_image_p)
- (enum gif_keyword_index, gif_format, gif_image_p): Sync with xfns.c.
- (x_make_gc): Sync with xfns.c. Enclose unused `border_tile' with
- #if 0.
- (x_free_gcs): Sync with xfns.c. Enclose unused `border_tile' with
- #if 0. Free white_relief.gc and black_relief.gc.
- (unwind_create_frame, x_emboss, x_laplace, x_edge_detection):
- New functions (from xfns.c).
- (Fx_create_frame): Record unwind_create_frame.
- (Fxw_display_color_p): Use dpyinfo->color_p.
- (Fx_display_grayscale_p, Fx_display_planes): Don't use
- dpyinfo->n_cbits.
- (Fx_display_color_cells): Use dpyinfo->n_planes;
- (QCmatrix, QCcolor_adjustment, QCmask, Qemboss, Qedge_detection)
- (Qheuristic, cross_disabled_images, emboss_matrix)
- (laplace_matrix): New variables (from xfns.c).
- (Fimage_size, Fimage_mask_p, four_corners_best, image_background)
- (x_clear_image_1, postprocess_image, slurp_file, xbm_load_image)
- (xbm_file_p, x_to_xcolors, x_from_xcolors, x_detect_edges)
- (image_background_transparent): New function (from xfns.c).
- Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
- (image_load_quicktime): Add declaration.
- [MAC_OSX] (image_load_quartz2d): Likewise.
- [MAC_OSX] (CGImageCreateWithPNGDataProviderProcType): New typedef.
- [MAC_OSX] (MyCGImageCreateWithPNGDataProvider): New variable.
- [MAC_OSX] (init_image_func_pointer, image_load_quartz2d): New funs.
- (xbm_load_image_from_file, x_laplace_read_row)
- (x_laplace_write_row, pbm_read_file): Remove functions.
- [HAVE_XPM] (enum xpm_keyword_index, xpm_format, xpm_image_p)
- (xpm_load): Sync with xfns.c (although XPM is not supported yet).
- (colors_in_color_table): Sync with xfns.c (although not used).
- (lookup_rgb_color): Don't lookup color table. Just do gamma
- correction.
- (COLOR_INTENSITY): New #define (from xfns.c).
- (x_disable_image): New function (from xfns.c).
- Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
- (x_build_heuristic_mask): Sync with xfns.c.
- Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
- (HAVE_PBM): Remove #ifdef.
- (pbm_load): Sync with xfns.c. Set img->width and img->height
- before IMAGE_BACKGROUND.
- (png_image_p, png_load): Don't enclose declarations with #if HAVE_PNG.
- (Qpng, enum png_keyword_index, png_format, png_type, png_image_p):
- Don't enclose with #if HAVE_PNG.
- [!HAVE_PNG] (png_load) [MAC_OSX]: Use image_load_quartz2d if a
- symbol _CGImageCreateWithPNGDataProvider is defined.
- Otherwise use image_load_quicktime.
- [!HAVE_PNG] (png_load) [!MAC_OSX]: Use image_load_quicktime.
- [HAVE_PNG] (png_load): Sync with xfns.c.
- Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
- (jpeg_image_p, jpeg_load): Don't enclose declarations with #if
- HAVE_JPEG.
- (Qjpeg, enum jpeg_keyword_index, jpeg_format, jpeg_type)
- (jpeg_image_p): Don't enclose with #if HAVE_JPEG.
- [!HAVE_JPEG] (jpeg_load) [MAC_OSX]: Use image_load_quartz2d.
- [!HAVE_JPEG] (jpeg_load) [!MAC_OSX]: Use image_load_quicktime.
- [HAVE_JPEG] (jpeg_load): Sync with xfns.c.
- (tiff_image_p, tiff_load): Don't enclose declarations with #if
- HAVE_TIFF.
- (Qtiff, enum tiff_keyword_index, tiff_format, tiff_type)
- (tiff_image_p): Don't enclose with #if HAVE_TIFF.
- [!HAVE_TIFF] (tiff_load): Use image_load_quicktime.
- [HAVE_TIFF] (tiff_error_handler, tiff_warning_handler):
- New functions (from xfns.c).
- [HAVE_TIFF] (tiff_load): Sync with xfns.c.
- (gif_image_p, gif_load): Don't enclose declarations with #if HAVE_GIF.
- (Qgif, enum gif_keyword_index, gif_format, gif_type, gif_image_p):
- Don't enclose with #if HAVE_GIF.
- [!HAVE_GIF] (gif_load): Use Quicktime Movie Toolbox if it is
- animated gif. Otherwise use image_load_quicktime.
- [HAVE_GIF] (gif_lib.h): Temporarily define DrawText as
- gif_DrawText to avoid conflict with QuickdrawText.h.
- [HAVE_GIF] (gif_load): Sync with xfns.c.
- (enum gs_keyword_index, gs_format, gs_image_p, gs_load)
- [HAVE_GHOSTSCRIPT] (x_kill_gs_process): Sync with xfns.c (although
- Ghostscript is not supported yet).
- (syms_of_macfns): Initialize Qemboss, Qedge_detection, Qheuristic,
- QCmatrix, QCcolor_adjustment, and QCmask. Add DEFVAR_BOOL
- cross_disabled_images (from xfns.c). Remove #if 0 for supported
- image types. Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and
- HAVE_PNG. Add defsubr for Simage_size and Simage_mask_p.
- (init_xfns): Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and
- HAVE_PNG. Call EnterMovies to support animated gifs.
- Call init_image_func_pointer to bind a symbol
- _CGImageCreateWithPNGDataProvider if it is defined.
-
- * macterm.c [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
- (x_draw_bar_cursor): Sync declaration with xterm.c.
- (XFreePixmap, mac_draw_rectangle_to_pixmap, mac_copy_area)
- (mac_copy_area_to_pixmap): Implementation with GWorld (offscreen
- graphics).
- (mac_set_forecolor, mac_set_backcolor): Use RED16_FROM_ULONG etc.
- (mac_draw_line_to_pixmap, XCreatePixmap)
- (XCreatePixmapFromBitmapData, mac_fill_rectangle_to_pixmap)
- (mac_copy_area_with_mask, mac_copy_area_with_mask_to_pixmap):
- New functions.
- (mac_draw_bitmap) [TARGET_API_MAC_CARBON]:
- Use GetPortBitMapForCopyBits instead of the cast to Bitmap *.
- Cast bits to char *.
- (reflect_byte): New function (from w32fns.c).
- (mac_create_bitmap_from_bitmap_data): Use it and don't stuff bits
- due to byte alignment.
- (mac_scroll_area) [TARGET_API_MAC_CARBON]:
- Use GetPortBitMapForCopyBits instead of the cast to Bitmap *.
- (XSetForeground): Remove static (now used in macfns.c).
- (HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New #define (from w32term.c).
- (mac_alloc_lighter_color, x_destroy_window): Sync with w32term.c.
- (x_setup_relief_color, x_setup_relief_colors, x_draw_box_rect)
- (x_draw_glyph_string_box, x_draw_image_foreground)
- (x_draw_image_foreground_1, x_draw_image_glyph_string)
- (x_draw_stretch_glyph_string, x_draw_glyph_string)
- (x_draw_hollow_cursor, x_draw_bar_cursor, mac_draw_window_cursor):
- Sync with xterm.c.
- (x_draw_relief_rect): Sync with xterm.c. Make 1 pixel shorter
- than the xterm.c version when a strictly horizontal or vertical
- line is drawn.
- (XTset_terminal_window): Add static.
- (x_make_frame_visible): Add UNBLOCK_INPUT.
- (x_free_frame_resources): New funcion (from xterm.c).
- (XTread_socket): Call handle_tool_bar_click if mouse up/down event
- occurs in tool bar area.
- (mac_initialize_display_info): Remove dpyinfo->n_cbits.
- Set dpyinfo->color_p. Determine dpyinfo->n_planes using HasDepth.
- Initialize image cache.
- (stricmp, wildstrieq, mac_font_pattern_match, mac_font_match):
- Enclose unused functions with #if 0.
- (Qbig5, Qcn_gb, Qsjis, Qeuc_kr): New variables.
- (decode_mac_font_name): New function to apply code conversions
- from a mac font name to an XLFD font name according to its script code.
- (x_font_name_to_mac_font_name): Apply code conversion from an XLFD
- font name to a mac font name according to REGISTRY and ENCODING fields.
- (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't use a font
- whose name starts with `.'.
- (init_font_name_table): Use decode_mac_font_name. Add both
- jisx0208.1983-sjis and jisx0201.1976-0 entries if the script code
- of a font is smJapanese.
- (mac_do_list_fonts): New function to list fonts that match a given
- pattern.
- (x_list_fonts, XLoadQueryFont): Use it.
- (XLoadQueryFont): Set rbearing field for each variable width
- character to avoid needless redraw.
- (syms_of_macterm): Initialize Qbig5, Qcn_gb, Qsjis, and Qeuc_kr.
-
-2004-02-26 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (NREAD_INPUT_EVENTS): Temporarily increase to 512
- as read_socket_hook handler on X aborts if buffer is too small
- and W32 handler doesn't always check buffer limit.
-
- * xdisp.c (handle_single_display_prop): Handle left-fringe and
- right-fringe similar to a display margin image. Specifically,
- the characters having the fringe prop are no longer shown, and
- we use IT_IMAGE/next_element_from_image with image_id = -1 to
- do this. Set fringe bitmap face_id in it->face_id.
- (produce_image_glyph): Handle image_id < 0 as "no image" case, but
- still realize it->face (i.e. the fringe bitmap face).
-
-2004-02-25 Miles Bader <miles@gnu.org>
-
- * xdisp.c (check_it): Check string/string_pos consistency.
- (init_iterator): Initialize string-related fields properly.
-
-2004-02-11 Miles Bader <miles@gnu.org>
-
- * xdisp.c (produce_image_glyph): Force negative descents to zero.
-
-2004-02-10 Miles Bader <miles@gnu.org>
-
- * xfns.c (lookup_image): Remove xassert(!interrupt_input_blocked);
- BLOCK_INPUT can be nested, so it doesn't make much sense.
-
-2004-02-24 Michael Mauger <mmaug@yahoo.com>
-
- * w32fns.c (slurp_file, xbm_scan, xbm_load_image)
- (xbm_read_bitmap_data): Use unsigned char for image data.
-
-2004-02-23 Luc Teirlinck <teirllm@auburn.edu>
-
- * abbrev.c (Finsert_abbrev_table_description): Doc fix.
-
-2004-02-22 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_draw_fringe_bitmap): Draw overlaid bitmaps
- correctly over other bitmaps.
-
-2004-02-21 Eli Zaretskii <eliz@gnu.org>
-
- * emacs.c (USAGE1): Split into two halves.
- (USAGE2): Second half of the old USAGE1.
- (USAGE3): Rename from USAGE2.
- (USAGE4): Rename from USAGE3.
-
-2004-02-21 Juri Linkov <juri@jurta.org>
-
- * emacs.c (USAGE1): Add --no-desktop. Move --display from USAGE2.
- Fix --multibyte. Move --help, --version to USAGE2. Add alias
- --file. Fix -f, -l. Sort options. Untabify.
- (USAGE2): Add -hb. Fix --name, --title. Sort options. Untabify.
-
-2004-02-19 Luc Teirlinck <teirllm@auburn.edu>
-
- * category.c (Fdefine_category, Fcategory_docstring)
- (Fget_unused_category, Fset_category_table)
- (Fcategory_set_mnemonics): Doc fixes.
-
-2004-02-20 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c: Undo 2004-02-16 and 2004-02-17 changes.
- The following changes are relative to the 2004-01-21 revision.
- (NREAD_INPUT_EVENTS): Define as max number of input events to read
- in one call to read_socket_hook. Value is 8.
- (read_avail_input): Separate and rework handling of read_socket_hook
- and non-read_socket_hook cases. Use smaller input_event buffer
- in read_socket_hook case, and repeat if full buffer is read.
- Use new local variable 'discard' to skip input after C-g.
- In non-read_socket_hook case, just use a single input_event, and
- call kbd_buffer_store_event on the fly for each character.
-
-2004-02-19 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lisp.h (union Lisp_Object): Give a more precise type for `type'.
- Remove unused `gu' alternative.
-
-2004-02-19 Andreas Schwab <schwab@suse.de>
-
- * fringe.c (Fdefine_fringe_bitmap): Use && instead of & to avoid
- warning.
-
-2004-02-18 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_window_cursor_type, display_and_set_cursor):
- Fix last change.
-
-2004-02-17 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (fast_find_position): Fix return value of new version;
- it was inverted compared to the 21.1 version.
- (get_window_cursor_type): Don't look at glyph if NULL.
- (display_and_set_cursor): Set glyph to NULL if cursor in fringe.
-
- * keyboard.c: Rework previous change; it didn't consider that the
- buf array was allocated on the stack.
- (prev_read): Remove variable.
- (read_avail_input_buf): New static event buffer array.
- (in_read_avail_input): New static variable to handle re-entrancy.
- (read_avail_input): Change buf to pinter to read_avail_input_buf.
- Use in_read_avail_input to handle re-entrance; when re-entered,
- fully initialize and use tmp_buf array instead of read_avail_input_buf.
- Do not initialize read_avail_input_buf in full here; instead assume it
- is always cleared on entry. To ensure that, we clear (just) the
- entries that were used before we return.
- (init_keyboard): Initialize read_avail_input_buf here.
-
-2004-02-16 Jesper Harder <harder@ifa.au.dk>
-
- * cmds.c (Fend_of_line): Doc fix.
-
-2004-02-16 Dmitry Antipov <dmitry.antipov@mail.ru> (tiny change)
-
- * keyboard.c (prev_read): New static variable.
- (read_avail_input): Use it to zero out only those slots in buf[]
- that were used last time we were called.
-
-2004-02-16 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (obj): Move fringe.o from here...
- (XOBJ, MAC_OBJ): ...to here.
-
-2004-02-16 Stephen Eglen <stephen@gnu.org>
-
- * fringe.c (init_fringe_bitmap): Define j in MAC_OS code.
-
-2004-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * data.c (Fbyteorder):
- * fringe.c (Fdefine_fringe_bitmap):
- * xdisp.c (handle_single_display_prop):
- * xselect.c (x_handle_dnd_message): Lisp_Object/int mixup.
-
-2004-02-16 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_draw_fringe_bitmap): Handle overlay fringe bitmaps.
-
-2004-02-15 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (Vmac_emulate_three_button_mouse): New variable for
- controlling emulation of a three button mouse with option and
- command keys.
- (Qreverse, mac_get_enumlated_btn): Handle the emulation.
- (mac_event_to_emacs_modifiers, XTread_socket): Ditto.
-
-2004-02-15 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (syms_of_buffer): Doc fix for indicate-buffer-boundaries.
-
- * fringe.c (init_fringe_bitmap) [MAC_OS, WORDS_BIG_ENDIAN]:
- Perform byte-swapping.
-
-2004-02-14 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct draw_fringe_bitmap_params): Change member
- bits from char to short to facilitate wider bitmaps.
- (struct redisplay_interface): Fix prototype of define_fringe_bitmap
- member.
-
- * fringe.c (struct fringe_bitmap): Change member bits from char to
- short to facilitate 16 bits wide bitmaps. Modify all standard
- bitmaps accordingly.
- (BYTES_PER_BITMAP_ROW, STANDARD_BITMAP_HEIGHT): New macros.
- (FRBITS): Use STANDARD_BITMAP_HEIGHT instead of just sizeof.
- (draw_fringe_bitmap): Ditto.
- (init_fringe_bitmap) [MAC_OS]: Don't bitswap.
- (init_fringe_bitmap) [HAVE_X_WINDOWS]: Enhance bitswapping to
- handle up to 16 bits wide bitmaps.
- (Fdefine_fringe_bitmap): Doc fix. Handle wider bitmaps.
- (Ffringe_bitmaps_at_pos): Add missing arg declarations.
-
- * macterm.c (mac_draw_bitmap): Handle 16 bits wide bitmaps directly.
- (x_draw_fringe_bitmap): Use enhanced mac_draw_bitmap, so we no longer
- need to call mac_create_bitmap_from_bitmap_data and mac_free_bitmap.
-
- * w32term.c (w32_define_fringe_bitmap): Bitmaps are now 16 bits wide,
- so it is no longer necessary to expand them here.
-
- * xterm.c (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
-
-2004-02-12 Kim F. Storm <storm@cua.dk>
-
- * window.c (Fwindow_fringes): Doc fix.
-
-2004-02-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xselect.c (x_get_foreign_selection): Add new optional parameter
- time_stamp.
- (Fx_get_selection_internal): Ditto, pass time_stamp to
- x_get_foreign_selection.
-
- * data.c (Fbyteorder): New function.
-
-2004-02-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * atimer.c: Move include stdio.h to same place as in other files.
-
- * region-cache.c: Ditto.
-
- * sysdep.c: Ditto.
-
- * xfaces.c: Ditto.
-
-2004-02-09 Sam Steingold <sds@gnu.org>
-
- * w32term.c (w32_draw_fringe_bitmap): Fix a typo in the last patch.
-
-2004-02-09 Kim F. Storm <storm@cua.dk>
-
- * fringe.c: New file. Move original fringe related declarations
- and code from dispextern.h and xdisp.c here.
- Rework code to support user defined fringe bitmaps, redefining
- standard bitmaps, ability to overlay user defined bitmap with
- overlay arrow bitmap, and add faces to bitmaps.
- (Voverflow_newline_into_fringe): Declare here.
- (enum fringe_bitmap_align): New enum.
- (..._bits): All bitmaps are now defined without bitswapping; that
- is now done in init_fringe_once (if necessary).
- (standard_bitmaps): New array with specifications for the
- standard fringe bitmaps.
- (fringe_faces): New array.
- (valid_fringe_bitmap_id_p): New function.
- (draw_fringe_bitmap_1): Rename from draw_fringe_bitmap.
- (draw_fringe_bitmap): New function which draws fringe bitmap,
- possibly overlaying bitmap with cursor in right fringe or the
- overlay arrow in the left fringe.
- (update_window_fringes): Do not handle overlay arrow here.
- Compare and copy fringe bitmap faces.
- (init_fringe_bitmap): New function.
- (Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to
- define and destroy user defined fringe bitmaps.
- (Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap.
- (Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps.
- (syms_of_fringe): New function. Defsubr new DEFUNs.
- DEFVAR_LISP Voverflow_newline_into_fringe.
- (init_fringe_once, init_fringe): New functions.
- (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
-
- * Makefile.in (obj): Add fringe.o.
- (fringe.o): New dependencies.
-
- * dispextern.h (FRINGE_ID_BITS): New definition for number of
- bits allocated to hold a fringe number. Increase number of bits
- from 4 to 8 to allow user defined fringe bitmaps.
- (struct glyph_row, struct it): New members left_user_fringe_bitmap,
- left_user_fringe_face_id, right_user_fringe_bitmap,
- right_user_fringe_face_id.
- (enum fringe_bitmap_type, struct fringe_bitmap, fringe_bitmaps):
- Move to new file fringe.c.
- (MAX_FRINGE_BITMAPS): Define here.
- (struct draw_fringe_bitmap_params): New members bits, cursor_p,
- and overlay_p. Change member which to int.
- (struct redisplay_interface): New members define_fringe_bitmap
- and destroy_fringe_bitmap.
- (valid_fringe_bitmap_id_p): Add prototype.
- (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: Add prototypes.
-
- * dispnew.c (row_equal_p): Compare fringe bitmap faces and overlay
- arrows.
- (update_frame): Do flush_display if force_flush_display_p to
- ensure display (specifically fringes) are updated in a timely
- manner when resizing the frame by dragging the mouse.
- (update_window_line): Update row if overlay arrow changed.
- (scrolling_window): Redraw fringe bitmaps if fringe bitmap faces
- or overlay arrow changed.
-
- * emacs.c (main) [HAVE_WINDOW_SYSTEM]: Call init_fringe_once,
- syms_of_fringe, and init_fringe.
-
- * frame.h (struct frame): New member force_flush_display_p.
-
- * lisp.h (syms_of_fringe, init_fringe, init_fringe_once):
- Add prototypes.
-
- * macterm.c (mac_draw_bitmap): Add overlay_p arg.
- (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps;
- thanks to YAMAMOTO Mitsuharu for advice on how to do this.
- Use cursor color for displaying cursor in fringe.
- (x_redisplay_interface): Add null handlers for
- define_fringe_bitmap and destroy_fringe_bitmap functions.
-
- * w32term.c (w32_draw_fringe_bitmap): Copy unadapted code from
- xterm.c to handle overlayed fringe bitmaps and to use cursor color
- for displaying cursor in fringe.
- (w32_define_fringe_bitmap, w32_destroy_fringe_bitmap): New W32
- specific functions to define and destroy fringe bitmaps in fringe_bmp.
- (w32_redisplay_interface): Add them to redisplay_interface.
- (w32_term_init): Call w32_init_fringe instead of explicitly
- defining fringe bitmaps in fringe_bmp array.
- (x_delete_display): Call w32_reset_fringes instead of explicitly
- destroying fringe bitmaps in fringe_bmp array.
-
- * xdisp.c (Voverflow_newline_into_fringe, syms_of_xdisp)
- (left_bits, right_bits, up_arrow_bits, down_arrow_bits)
- (continued_bits, continuation_bits, ov_bits, first_line_bits)
- (last_line_bits, filled_box_cursor_bits, hollow_box_cursor_bits)
- (bar_cursor_bits, hbar_cursor_bits, zv_bits, hollow_square_bits)
- (fringe_bitmaps, draw_fringe_bitmap, draw_row_fringe_bitmaps)
- (draw_window_fringes, compute_fringe_widths, update_window_fringes):
- Move fringe handling vars and code to new file fringe.c.
- (handle_display_prop): Handle left-fringe and right-fringe
- display properties; store user fringe bitmaps in iterator.
- (move_it_in_display_line_to): Handle cursor in fringe at eob.
- (clear_garbaged_frames): Set force_flush_display_p if resized.
- (redisplay_window): Redraw fringe bitmaps if not just_this_one_p.
- (display_line): Handle cursor in fringe at eob.
- (display_line): Set row user fringe bitmaps from iterator.
-
- * xterm.c (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
- Use cursor color for displaying cursor in fringe.
- (x_redisplay_interface): Add null handlers for
- define_fringe_bitmap and destroy_fringe_bitmap functions.
-
-2004-02-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * macfns.c (Fx_change_window_property): Make doc string and
- parameters same as for X version.
-
- * w32fns.c (Fx_change_window_property): Ditto.
-
-2004-02-07 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (hscroll_window_tree): Position cursor near to right
- margin in hscrolled window when jumping to end of line (rather
- than centering cursor).
-
- * process.c (wait_reading_process_input): Don't do adaptive read
- buffering if waiting for a specific process.
-
-2004-02-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * minibuf.c (Fminibufferp, Fread_from_minibuffer)
- (Fread_minibuffer, Feval_minibuffer)
- (Fread_string, Fread_no_blanks_input)
- (Fcompleting_read): Doc fixes.
- (syms_of_minibuf): Doc fixes for minibuffer-completion-table and
- completion-regexp-list. Define Qcase_fold_search and staticpro it.
- (read_minibuf): Fix initial comment.
- (Ftry_completion, Fall_completions, Ftest_completion): Bind
- case-fold-search to the value of completion-ignore-case when
- checking completion-regexp-list.
- (Fdisplay_completion_list): Make it handle arguments that are
- symbols. Doc fix.
-
-2004-02-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h: Add declaration of free_frame_menubar.
-
- * xfns.c (x_create_bitmap_mask): Removed unused variable depth.
- (x_set_menu_bar_lines): Added ! defined USE_GTK for olines.
- (Fx_change_window_property): Add declaration of parameters type and
- format. Remove unused variable cons.
-
- * xselect.c: Include stdio.h.
-
-2004-02-05 Kenichi Handa <handa@m17n.org>
-
- * fns.c (Fset_char_table_range): Fix previous change.
-
- * buffer.c (Fset_buffer_multibyte): Fix docstring.
-
-2004-02-04 Luc Teirlinck <teirllm@auburn.edu>
-
- * editfns.c (Fchar_after, Fchar_before): Doc fixes.
-
-2004-02-04 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keymap.c (Vmouse_events): Rename from Vmenu_events.
- (syms_of_keymap): Add mouse-[45], header-line, and mode-line to it.
-
-2004-02-04 Kenichi Handa <handa@m17n.org>
-
- * fns.c (Fset_char_table_range): Handle charsets ascii,
- eight-bit-control, and eight-bit-graphic correctly.
-
-2004-02-03 Jason Rumney <jasonr@gnu.org>
-
- * w32select.c (Fw32_set_clipboard_data): Make coding iso2022 safe.
-
- * w32fns.c (x_to_w32_font): Likewise.
-
-2004-02-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h: Add x_handle_dnd_message, x_check_property_data,
- x_fill_property_data, x_property_data_to_lisp and check_x_display_info.
-
- * xterm.c (handle_one_xevent): Call x_handle_dnd_message for
- ClientMessages.
-
- * xselect.c: Include termhooks.h and X11/Xproto.h.
- (x_check_property_data, x_fill_property_data)
- (x_property_data_to_lisp, mouse_position_for_drop)
- (Fx_get_atom_name, x_handle_dnd_message): New functions for DND support.
- (Fx_send_client_event): Move here from xfns.c.
- (syms_of_xselect): Add Sx_get_atom_name and Sx_send_client_message.
-
- * xfns.c (x-send-client-message): Move to xselect.c.
- (Fx_change_window_property): Add optional arguments TYPE, FORMAT and
- OUTER_P.
- (Fx_window_property): Add optional arguments TYPE, SOURCE, DELETE_P,
- VECTOR_RET_P. Handle AnyPropertyType. Call x_property_data_to_lisp
- if vector_ret_p is true.
- (syms_of_xfns): Sx_send_client_message moved to xselect.c.
-
-2004-02-02 Eli Zaretskii <eliz@gnu.org>
-
- * fileio.c (Fcopy_file): If NEWNAME is a directory, expand the
- basename of FILE relative to it, not FILE itself.
-
-2004-02-02 Kenichi Handa <handa@m17n.org>
-
- * coding.c (coding_restore_composition): Check invalid
- composition data more rigidly.
-
-2004-01-30 Luc Teirlinck <teirllm@auburn.edu>
-
- * fileio.c (Fread_file_name_internal): Correctly handle the case
- where insert-default-directory is nil.
- (Fread_file_name): Always return an empty string if the user exits
- with an empty minibuffer. Adapt the docstring accordingly.
- (syms_of_fileio): Adapt the docstring of insert-default-directory
- to the change in Fread_file_name.
-
-2004-01-29 Eli Zaretskii <eliz@gnu.org>
-
- * alloca.c [!alloca]: Fix the prototype for xfree.
-
-2004-01-29 Kenichi Handa <handa@m17n.org>
-
- * fns.c (string_char_to_byte): Optimize for ASCII only string.
- (string_byte_to_char): Likewise.
-
-2004-01-28 Peter Runestig <peter@runestig.com>
-
- * makefile.w32-in, w32fns.c: Add `default-printer-name' function.
-
-2004-01-27 Steven Tamm <steventamm@mac.com>
-
- * unexmacosx.c (unexec_copy): Do not copy more than was
- requested to prevent overwriting during unexec.
-
-2004-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * process.c (sigchld_handler): Add comment about not calling malloc.
-
- * process.h: Add extern to synch_process_termsig.
-
-2004-01-27 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (make_mac_frame, make_mac_terminal_frame):
- Move setting of scroll bars from make_mac_frame to
- make_mac_terminal_frame to prevent clobbering of scroll-bar-mode.
-
-2004-01-26 Richard M. Stallman <rms@gnu.org>
-
- * search.c (Freplace_match): Handle nonexistent
- back-references properly.
-
-2004-01-03 Richard M. Stallman <rms@gnu.org>
-
- * window.c (decode_any_window): New function.
- (Fwindow_height, Fwindow_width, Fwindow_edges)
- (Fwindow_pixel_edges, Fwindow_inside_edges)
- (Fwindow_inside_pixel_edges): Use decode_any_window.
-
-2004-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * process.h: synch_process_termsig new variable.
-
- * callproc.c: Define synch_process_termsig.
- (Fcall_process): Initiate synch_process_termsig to zero and
- check if non-zero and get signal name after subprocess has ended.
-
- * process.c (sigchld_handler): Set synch_process_termsig
- if terminated by a signal. synch_process_death setting removed.
-
- * sysdep.c (mkdir, rmdir): Also check synch_process_termsig.
-
-2004-01-26 Andreas Schwab <schwab@suse.de>
-
- * print.c (print_preprocess): Declare size as EMACS_INT to not
- lose bits.
- (print_object): Likewise.
- * alloc.c (Fpurecopy): Likewise.
-
-2004-01-25 Luc Teirlinck <teirllm@auburn.edu>
-
- * window.c (Fwindow_minibuffer_p): Doc fix.
-
-2004-01-24 Jonathan Yavner <jyavner@member.fsf.org>
-
- * editfns.c (Fformat): Make both passes accept the same set of flags.
-
-2004-01-23 Kenichi Handa <handa@m17n.org>
-
- * fns.c (Fmd5): If OBJECT is a buffer different from the current
- one, set buffer to OBJECT temporarily.
-
-2004-01-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * keyboard.c (kbd_buffer_gcpro): Remove.
- (kbd_buffer_store_event, clear_event, Fdiscard_input)
- (stuff_buffered_input, init_keyboard, syms_of_keyboard):
- Don't initialize and/or maintain the variable any more. It was made
- redundant by my commit of 2003-06-15.
-
- * lisp.h [USE_LSB_TAG && !DECL_ALIGN]: Signal an error.
-
-2004-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * lisp.h: Add undef DECL_ALIGN.
-
-2004-01-21 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * process.c (wait_reading_process_input) [SYNC_INPUT]:
- Check interrupt_input_pending explicitly.
-
- * lisp.h (QUIT) [SYNC_INPUT]: Check interrupt_input_pending as well.
-
- * keyboard.c (handle_async_input): New fun,
- extracted from input_available_signal.
- (input_available_signal, reinvoke_input_signal): Use it.
-
-2004-01-20 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * buffer.c (buffer_defaults, buffer_local_symbols): Use DECL_ALIGN.
-
- * lisp.h [USE_LSB_TAG]: Add definitions for Lisp_Object value
- manipulation macros for when tags are in the lower bits.
- (struct Lisp_Free) [USE_LSB_TAG]: Add padding.
- (DECL_ALIGN): New macro.
- (DEFUN): Use it.
-
- * lisp.h [ENABLE_CHECKING]: Don't force union type.
-
- * s/darwin.h (__attribute__): Remove outdated workaround.
-
- * macterm.c (main) [USE_LSB_TAG]: Don't range check the ram.
-
- * alloc.c (lisp_malloc, lisp_align_malloc) [USE_LSB_TAG]:
- Don't check range of malloc address.
- (pure_alloc) [USE_LSB_TAG]: Enforce alignment.
-
- * process.c (wait_reading_process_input): Lisp_Object/int mixup.
-
- * dired.c (Ffile_attributes): Lisp_Object/int mixup.
-
-2004-01-19 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (fontset_font_pattern): Fix previous change.
-
-2004-01-16 Miles Bader <miles@gnu.ai.mit.edu>
-
- * xdisp.c (Voverflow_newline_into_fringe)
- (move_it_in_display_line_to, redisplay_internal)
- (update_window_fringes, redisplay_window, display_line, window):
- Add `#ifdef HAVE_WINDOW_SYSTEM' around fringe-drawing stuff, so
- that it compiles without a window-system.
- * dispnew.c (direct_output_for_insert, update_window): Likewise.
-
-2004-01-16 Kim F. Storm <storm@cua.dk>
-
- * buffer.h (struct buffer): New member indicate_buffer_boundaries.
-
- * buffer.c (init_buffer_once): Set buffer_defaults and
- buffer_local_flags for indicate_buffer_boundaries.
- (syms_of_buffer): Defvar_per_buffer it, and defvar_lisp_nopro
- default- variable for it.
-
- * dispextern.h (struct glyph_row): New members left_fringe_bitmap,
- right_fringe_bitmap, redraw_fringe_bitmaps_p for new fringe handling.
- New members exact_window_width_line_p and cursor_in_fringe_p for
- overflowing newlines into right fringe.
- New members indicate_bob_p, indicate_top_line_p, indicate_eob_p,
- and indicate_bottom_line_p for buffer boundaries and scrolling.
- (enum fringe_bitmap_type): Add UP_ARROW_BITMAP, DOWN_ARROW_BITMAP,
- FIRST_LINE_BITMAP, LAST_LINE_BITMAP, FILLED_BOX_CURSOR_BITMAP,
- HOLLOW_BOX_CURSOR_BITMAP, BAR_CURSOR_BITMAP, HBAR_CURSOR_BITMAP,
- and HOLLOW_SQUARE_BITMAP.
- (draw_fringe_bitmap, draw_window_fringes, update_window_fringes):
- Add prototypes.
-
- * dispnew.c (row_equal_p, update_window_line): Compare fringe bitmaps
- instead of related indicator fields.
- Compare exact_window_width_line_p and cursor_in_mouse_face_p indicators.
- (direct_output_for_insert): Handle exact width lines like
- contined lines. Call update_window_fringes.
- (update_window): Call update_window_fringes.
- (scrolling_window): Don't skip desired rows with changed bitmaps.
- Check if fringe bitmaps changes when assigning scrolled rows.
-
- * xdisp.c (Voverflow_newline_into_fringe): New variable.
- (IT_OVERFLOW_NEWLINE_INTO_FRINGE): New macro.
- (move_it_in_display_line_to): Overflow newline into fringe for
- rows that are exactly as wide as the window.
- (up_arrow_bits, down_arrow_bits, first_line_bits, last_line_bits)
- (filled_box_cursor_bits, hollow_box_cursor_bits, bar_cursor_bits)
- (hbar_cursor_bits, hollow_square_bits): New fringe bitmaps.
- (fringe_bitmaps): Add new bitmaps.
- (draw_fringe_bitmap): Make extern. Remove WHICH arg.
- Select proper bitmap for cursor in fringe when appropriate.
- Handle alignment of bitmap to top or bottom of row.
- (draw_row_fringe_bitmaps): Don't select bitmaps here; that is now
- done by update_window_fringes.
- (update_window_fringes, draw_window_fringes): New functions.
- (redisplay_internal): Call update_window_fringes in case only
- cursor row is updated.
- (redisplay_window): Call update_window_fringes.
- Explicitly call draw_window_fringes if redisplay was done using
- the current matrix or the overlay arrow is in the window.
- (try_window_reusing_current_matrix): Mark scrolled rows for
- fringe update (to update buffer-boundaries / scrolling icons).
- (find_last_unchanged_at_beg_row): Handle exact width lines line
- continued lines.
- (display_line): Overflow newline into fringe for rows that are
- exactly as wide as the window. Don't append space for newline
- in this case.
- (notice_overwritten_cursor): Explicitly clear cursor bitmap
- in fringe as if it had been overwritten.
- (erase_phys_cursor): Erase cursor bitmap in fringe.
- (syms_of_xdisp): Mark show-trailing-whitespace and
- void-text-area-pointer as user options.
- DEFVAR_LISP Voverflow_newline_into_fringe. Enable by default.
-
- * xterm.c (x_update_window_end): Call draw_window_fringes.
- (x_after_update_window_line): Just set redraw_fringe_bitmaps_p
- in row instead of actually drawing fringe bitmaps.
- (x_draw_fringe_bitmap): Handle bottom aligned bitmaps.
- (x_draw_window_cursor): Draw cursor in fringe.
-
- * w32term.c (x_update_window_end): Call draw_window_fringes.
- (x_after_update_window_line): Just set redraw_fringe_bitmaps_p
- in row instead of actually drawing fringe bitmaps.
- (w32_draw_fringe_bitmap): Handle bottom aligned bitmaps.
- (w32_draw_window_cursor): Draw cursor in fringe.
-
- * macterm.c (x_update_window_end): Call draw_window_fringes.
- (x_after_update_window_line): Just set redraw_fringe_bitmaps_p
- in row instead of actually drawing fringe bitmaps.
- (x_draw_fringe_bitmap): Handle bottom aligned bitmaps.
- (mac_draw_window_cursor): Draw cursor in fringe.
-
-2004-01-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Don't handle characters that are part
- of an old style (XLookupString) compose sequence.
-
-2004-01-15 Kenichi Handa <handa@m17n.org>
-
- * search.c (Freplace_match): Use make_multibyte_string or
- make_unibyte_string according to the buffer multibyteness.
-
-2004-01-14 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (struct interval_block, struct string_block)
- (struct symbol_block, struct marker_block, live_string_p)
- (live_cons_p, live_symbol_p, live_float_p, live_misc_p):
- Better preserve alignment for objects in blocks.
- (FLOAT_BLOCK_SIZE): Adjust for possible alignment padding.
-
- * lread.c (defvar_per_buffer): Remove dead declaration.
-
- * macterm.c (do_check_ram_size): Don't hardcode the lisp address
- space size.
-
-2004-01-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (popup_get_selection): Check new parameter down_on_keypress
- if a key press should pop down. Only pop down if a key is pressed
- outside the menu/dialog.
- (create_and_show_popup_menu): Pass 0 for down_on_keypress to
- popup_get_selection.
- (create_and_show_dialog): Pass 1 for down_on_keypress to
- popup_get_selection.
-
-2004-01-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * alloc.c (allocate_vectorlike): Surround calls to mallopt with
- BLOCK/UNBLOCK_INPUT.
-
-2004-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
- specified.
-
-2004-01-08 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Fformat): Fix '&' to '&&'.
-
-2004-01-08 Andreas Schwab <schwab@suse.de>
-
- * print.c (print_preprocess) <case Lisp_Vectorlike>: Only mask
- size if PSEUDOVECTOR_FLAG is set.
-
-2004-01-07 Kenichi Handa <handa@m17n.org>
-
- * charset.c (Fdeclare_equiv_charset): Fix docstring.
-
- * fontset.c (fontset_ref_via_base): Fix previous change.
-
-2004-01-07 Kim F. Storm <storm@cua.dk>
-
- * process.c (read_process_output): Only activate adaptive
- buffering if we read less than 256 bytes at a time.
-
-2004-01-06 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (buffer_posn_from_coords): Return both buffer/string
- object and image object. Return glyph width and height.
- (mode_line_string, marginal_area_string): Ditto.
-
- * dispextern.h (buffer_posn_from_coords, mode_line_string)
- (marginal_area_string): Fix prototypes.
-
- * keyboard.h (POSN_POSN, POSN_SET_POSN): Rename macros from
- POSN_BUFFER_POSN and POSN_SET_BUFFER_POSN. All uses changed.
- (POSN_INBUFFER_P, POSN_BUFFER_POSN): New macros.
-
- * keyboard.c (make_lispy_position): Use modified mode_line_string,
- buffer_posn_from_coords, and marginal_area_string functions to
- include both string object and image object in the lispy position.
- Also add actual glyph width and height to position.
- (read_key_sequence): Use real buffer position from mouse
- event to find keymap property even when click is in marginal area.
-
- * xdisp.c (note_mode_line_or_margin_highlight): Use modified
- mode_line_string and marginal_area_string functions to handle
- both string object and image object properties.
-
-2004-01-06 Andreas Schwab <schwab@suse.de>
-
- * syntax.c (skip_chars): Treat '-' at end of string as ordinary
- character.
-
-2004-01-02 Andreas Schwab <schwab@suse.de>
-
- * macterm.c (emacs_options, x_initialized, same_x_server):
- Remove unused (and duplicated) definitions.
-
-2004-01-02 Kim F. Storm <storm@cua.dk>
-
- * process.h (struct Lisp_Process): New members for adaptive read
- buffering: adaptive_read_buffering, read_output_delay, and
- read_output_skip.
-
- * process.c (ADAPTIVE_READ_BUFFERING): New conditional.
- (READ_OUTPUT_DELAY_INCREMENT, READ_OUTPUT_DELAY_MAX)
- (READ_OUTPUT_DELAY_MAX_MAX): New constants.
- (process_output_delay_count, process_output_skip): New vars.
- (Vprocess_adaptive_read_buffering): New variable.
- (make_process): Initialize adaptive read buffering members.
- (Fstart_process): Set adaptive_read_buffering member.
- (deactivate_process): Cleanup adaptive read buffering.
- (wait_reading_process_input): Temporarily omit delayed
- subprocesses from the set of file descriptors to read from;
- adjust the select timeout if we skipped any subprocesses.
- (read_process_output): Increase adaptive read buffering delay if
- we read less than a full buffer; reduce delay when we read a
- full buffer.
- (send_process): Simplify using local Lisp_Process var.
- Reset adaptive read buffering delay after write.
- (init_process): Initialize process_output_delay_count and
- process_output_skip.
- (syms_of_process): DEFVAR_LISP Vprocess_adaptive_read_buffering.
-
-2004-01-01 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_text_out): Use s->font, for consistency with callers.
-
-2003-12-30 Luc Teirlinck <teirllm@auburn.edu>
-
- * print.c (Ferror_message_string): Add hyperlink in the docstring
- to the definition of `signal' in the Elisp manual.
- * eval.c (Fsignal): Ditto.
-
-2003-12-29 James Clark <jjc@jclark.com>
-
- * fns.c (internal_equal): Return t for two NaN arguments.
-
-2003-12-29 Richard M. Stallman <rms@gnu.org>
-
- * data.c (store_symval_forwarding): Handle setting
- default-fill-column, etc., by changing the value in
- buffers that use the default.
-
- * minibuf.c (Fset_minibuffer_window): Doc fix.
-
- * fileio.c (choose_write_coding_system): Ignore auto_saving
- if using the visited file for auto saves.
- (Fwrite_region): Don't update SAVE_MODIFF
- if auto-saving in visited file.
-
-2003-12-29 Kenichi Handa <handa@m17n.org>
-
- * dispextern.h (face_font_available_p): Extern it.
-
- * fontset.c (Voverriding_fontspec_alist): New variable.
- (lookup_overriding_fontspec): New function.
- (fontset_ref_via_base): Call lookup_overriding_fontspec if necessary.
- (fontset_font_pattern): Likewise.
- (regulalize_fontname): New function.
- (Fset_fontset_font): Call regulalize_fontname.
- (Fset_overriding_fontspec_internal): New function.
- (syms_of_fontset): Initialize and staticpro Voverriding_fontspec_alist.
- Defsubr Sset_overriding_fontspec_internal.
-
- * xfaces.c (face_font_available_p): New function.
-
-2003-12-28 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fother_buffer): Don't crash if BUF is nil
- or if its name is nil.
-
- * buffer.c (Fkill_buffer): Don't delete auto-save file
- if it's the same as the visited file.
-
-2003-12-28 Luc Teirlinck <teirllm@auburn.edu>
-
- * coding.c (Fcheck_coding_system): Doc fix.
-
-2003-12-28 Kim F. Storm <storm@cua.dk>
-
- * Makefile.in (eval.o): Depend on dispextern.h.
-
- * dispnew.c (buffer_posn_from_coords): Fix calculation of dy for
- image glyph using image's ascent.
- (mode_line_string): Return image glyph as object clicked on.
- Adjust y0 for image glyph using image's ascent.
-
- * dispextern.h (FACE_ID_BITS, MAX_FACE_ID): New defines.
- (struct glyph): New members, ascent and descent. Used to save
- this glyph's ascent and descent, instead of having.
- (struct glyph): Declare member face_id using FACE_ID_BITS.
- (find_hot_spot): Add prototype.
-
- * keyboard.c (Qimage): Remove extern (now in lisp.h).
- (QCmap): Declare extern.
- (make_lispy_position): When position is inside image hot-spot,
- use hot-spot element's id as posn element.
-
- * lisp.h (IMAGEP): New macro to test for image object type.
- (Qimage): Declare extern.
-
- * macfns.c (Qimage): Remove extern (now in lisp.h).
- (valid_image_p, parse_image_spec): Use IMAGEP macro.
-
- * macterm.c (Qface, Qmouse_face): Remove unused externs.
-
- * w32fns.c (Qimage): Remove extern (now in lisp.h).
- (valid_image_p, parse_image_spec): Use IMAGEP macro.
-
- * w32menu.c (Qmouse_click, Qevent_kind): Remove unused externs.
-
- * w32term.c (Qface, Qmouse_face): Remove unused externs.
-
- * xdisp.c (Qarrow, Qhand, Qtext, Qpointer): New variables for
- pointer types.
- (Qrelative_width, Qalign_to): Remove unused variables.
- (Vvoid_text_area_pointer): Replace Vshow_text_cursor_in_void.
- (QCmap, QCpointer, Qrect, Qcircle, Qpoly): New variables for image
- maps.
- (x_y_to_hpos_vpos): Return glyph relative coordinates through new
- dx and dy args. Remove buffer_only_p arg (always 0). Simplify
- code accordingly.
- (get_glyph_string_clip_rect): Draw cursor using glyph's rather
- than row's ascent and height, to get sensible height on tall rows.
- (build_desired_tool_bar_string): Remove Qimage extern.
- (get_tool_bar_item): Fix call to x_y_to_hpos_vpos.
- (produce_image_glyph): Adjust it.ascent to minimum row ascent if
- image glyph is alone on the last line.
- (append_glyph, append_composite_glyph, produce_image_glyph)
- (append_stretch_glyph): Set glyph's ascent and descent.
- (on_hot_spot_p): New function to check if position is inside an
- rectangular, circular, or polygon-shaped image hot-spot,
- (find_hot_spot): New function to search for image hot-spot.
- (Flookup_image_map): New defun to search for image hot-spot.
- (define_frame_cursor1): New aux function to determine frame
- pointer.
- (note_mode_line_or_margin_highlight, note_mouse_highlight): Handle
- `pointer' text property and :pointer image property to control
- frame pointer shape. Detect image hot-spots for pointer and
- help_echo properties. Use define_frame_cursor1.
- (note_mouse_highlight): Use Vvoid_text_area_pointer.
- (syms_of_xdisp): Defsubr new defun. Intern and staticpro new
- variables. DEFVAR_LISP Vvoid_text_area_pointer instead of
- Vshow_text_cursor_in_void.
-
- * xfaces.c (cache_face): Abort if c->size exceeds MAX_FACE_ID.
-
- * xfns.c (x_set_mouse_color): Remove bogus x_check_errors call.
- (Qimage): Remove extern (now in lisp.h).
- (valid_image_p, parse_image_spec): Use IMAGEP macro.
-
- * xmenu.c (show_help_event): Remove unused code.
-
- * xterm.c (Qface, Qmouse_face): Remove unused externs.
- (x_draw_hollow_cursor): Draw cursor using glyph's rather than
- row's ascent and descent, to get a sensible height on tall rows.
-
-2003-12-25 Luc Teirlinck <teirllm@auburn.edu>
-
- * minibuf.c (Fcompleting_read): Undo previous change.
-
-2003-12-25 Lars Hansen <larsh@math.ku.dk>
-
- * dired.c (Fdirectory_files, Fdirectory_files_and_attributes):
- Arguments GCPRO'ed in call to file name handler.
-
-2003-12-25 Thien-Thi Nguyen <ttn@gnu.org>
-
- * termcap.c (tgetst1): Scan for "%pN"; if all
- N are continuous in [1,9], remove all "%pN".
-
-2003-12-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_frame_set_char_size): Call x_wm_set_size_hint.
-
- * xfaces.c (lface_fully_specified_p): Take into account that
- MAC OS always have unspecified stipple.
-
-2003-12-24 Thien-Thi Nguyen <ttn@gnu.org>
-
- * tparam.c (tparam1): Add handling for `%pN', which
- means use param N for the next substitution.
-
-2003-12-24 Thien-Thi Nguyen <ttn@gnu.org>
-
- * xfaces.c (Fcolor_gray_p): Fix omission bug:
- In case `frame' is nil, consult the selected frame.
- (Fcolor_supported_p): Likewise.
-
-2003-12-23 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Frandom, Fstring_make_multibyte, Fset_char_table_range):
- Doc fixes.
-
- * minibuf.c (read_minibuf): Allow INITIAL to be a cons of a string
- and an integer. Adapt the introductory comment accordingly.
- (Fread_from_minibuffer): Delete code moved into read_minibuf.
- Doc fix.
- (Fread_minibuffer, Fread_no_blanks_input): Adapt to changes in
- read_minibuf.
- (Fcompleting_read): Delete code moved into read_minibuf.
- (Ftest_completion): Make it handle obarrays and hash tables correctly.
-
-2003-12-03 Kenichi Handa <handa@m17n.org>
-
- * coding.c (decode_coding_iso2022): Fix for preserving UTF-8
- encoding sequence.
-
-2003-12-01 Kenichi Handa <handa@m17n.org>
-
- * composite.c (syms_of_composite): Don't make the compostion hash
- table week.
-
-2003-11-30 Luc Teirlinck <teirllm@auburn.edu>
-
- * intervals.h: Add EXFUN for Fget_char_property_and_overlay.
- * textprop.c (Fget_char_property_and_overlay): New function.
- (syms_of_textprop): Defsubr it.
-
-2003-11-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * dispnew.c (buffer_posn_from_coords): Add ifdef HAVE_WINDOW_SYSTEM
- to compile on terminal configuration.
-
- * fileio.c (Fread_file_name): Check use_file_dialog also before
- calling Fx_file_dialog.
-
- * fns.c (use_file_dialog): New variable.
- (syms_of_fns): DEFVAR_BOOL use-file-dialog.
-
-2003-11-29 Kim F. Storm <storm@cua.dk>
-
- * msdos.c (Qcursor_type, Qbar, Qhbar): Declare extern.
- (syms_of_msdos): Don't intern and staticpro them.
-
-2003-11-27 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (buffer_posn_from_coords): Calculate and return pixel
- coordinates relative to glyph at posn. If glyph is an image,
- return that as object at posn. Callers changed.
- (mode_line_string, marginal_area_string): Calculate and return
- pixel coordinates relative to glyph. Callers changed.
-
- * dispextern.h (buffer_posn_from_coords, mode_line_string)
- (marginal_area_string): Fix prototypes.
- (window_box_left_offset, window_box_right_offset): Add prototypes.
-
- * frame.h (get_specified_cursor_type, get_window_cursor_type):
- Remove prototypes.
-
- * keyboard.h (EVENT_CLICK_COUNT, POSN_SCROLLBAR_PART): Fix defines.
-
- * keyboard.c (make_lispy_position): Add x and y coordinates
- relative to the current glyph as 7th element of position.
- If glyph is an image, return it in the object element.
- (read_key_sequence): Skip checks for keymap property in cases
- where POSN_STRING is not a string (e.g. an image).
-
- * xdisp.c (Vdisplay_pixels_per_inch): New variable.
- (Vshow_text_cursor_in_void): New variable.
- (glyph_to_pixel_coords): Don't use negative hpos.
- (x_y_to_hpos_vpos): Fix for partially visible first glyph.
- (append_stretch_glyph): Change ascent arg to be actual value
- in pixels rather than ratio to height. Callers changed.
- (calc_pixel_width_or_height): New aux function, implementing
- pixel based artihmetic for glyph widths and heights.
- (produce_stretch_glyph): Use calc_pixel_width_or_height for
- :width, :height, :align-to, and :ascent, thus allowing these to
- be specified in pixels as well as multiples of characters.
- Don't produce stretch glyphs with zero width or height.
- (get_specified_cursor_type): Declare static.
- (get_window_cursor_type): Declare static. Add glyph arg to be
- able to know when cursor is on an image; always substitute
- hollow-box cursor for filled-box cursor on images, to avoid
- negative images and flicker when blinking the cursor.
- (display_and_set_cursor): Pass glyph to get_window_cursor_type.
- (note_mode_line_or_margin_highlight): Use non-text cursor rather
- than vertical scroll-bar cursor in display margins.
- (note_mouse_highlight): Use non-text cursor rather than text
- cursor in fringes and over images in the text area.
- Use non-text cursor when mouse pointer is outside editable text,
- i.e. in the void after end-of-line or end-of-buffer; this was
- already done for W32, but is now standard for all systems --
- user can toggle show-text-cursor-in-void to get old behaviour.
- (syms_of_xdisp): DEFVAR_LISP Vshow_text_cursor_in_void and
- Vdisplay_pixels_per_inch.
-
-2003-11-25 Andreas Schwab <schwab@suse.de>
-
- * fns.c (internal_equal) <case Lisp_Vectorlike>: Declare size as
- EMACS_INT to not lose bits.
- (Ffillarray): Don't set bits beyond the size of a bool vector.
-
-2003-11-25 Kim F. Storm <storm@cua.dk>
-
- * print.c (Fredirect_debugging_output) [!GNU_LINUX]: Do not
- define this defun on systems that cannot use stderr as lvalue.
-
-2003-11-24 Gerd Moellmann <gerd@gnu.org>
-
- * s/freebsd.h (LD_SWITCH_SYSTEM_TEMACS)
- [__FreeBSD_version >= 500042]: Define as -znocombreloc because
- ld's default is incompatible with unexec.
-
-2003-11-23 Kim F. Storm <storm@cua.dk>
-
- * window.c (enum window_loop): Add REDISPLAY_BUFFER_WINDOWS.
- (window_loop): Handle REDISPLAY_BUFFER_WINDOWS.
- (Fforce_window_update): New defun.
+ * window.c (window_min_size_2): New function.
+ (window_min_size_1, size_window, Fdisplay_buffer)
+ (Fsplit_window, adjust_window_trailing_edge): Use it to avoid
+ windows without mode- or header-lines when window-min-height is
+ too small.
+ (size_window): Reset nodelete_p after testing it, following an
+ earlier note by Kim F. Storm.
+ (display_buffer): Do not set split_height_threshold to twice the
+ value of window_min_height to avoid changing the value of a
+ customizable variable. Rather explicitly check whether the
+ height of the window that shall be splitted is at least as large
+ as split_height_threshold.
+ (Fwindow_full_width_p): New defun.
(syms_of_window): Defsubr it.
- (Fset_window_margins, Fset_window_fringes): Doc fix.
-
- * print.c (Fredirect_debugging_output): New defun.
- (syms_of_print): Defsubr it.
-
-2003-11-22 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Fset_char_table_parent): Doc fix.
-
-2003-11-22 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (buffer_posn_from_coords): Return actual row/column
- for glyph clicked on, rather than (unused) pixel positions.
- (mode_line_string, marginal_area_string): Change X and Y args to
- pointers for returning actual row/column for glyph clicked on.
- Simplify and optimize loops.
-
- * dispextern.h (mode_line_string, marginal_area_string):
- Update prototypes.
-
- * keyboard.c (make_lispy_position): New function for generating
- mouse click positions from frame and pixel coordinates.
- Enhanced to return buffer position and actual row/column for
- events outside the text area using updated mode_line_string and
- marginal_area_string functions.
- Return left-fringe and right-fringe clicks as such, rather than
- clicks in text area.
- (make_lispy_event) [USE_X_TOOLKIT, USE_GTK]: Don't call
- pixel_to_glyph_coords, as we never use the results.
- (make_lispy_event): Use make_lispy_position for MOUSE_CLICK_EVENT,
- WHEEL_EVENT, and DRAG_N_DROP_EVENT to replace redundant code.
- Eliminate unused code in WHEEL_EVENT handling.
- (make_lispy_movement): Use make_lispy_position.
-
- * window.c (coordinates_in_window): Remove redundant tests.
- Fix returned X pixel value for left-margin.
-
- * xdisp.c (note_mode_line_or_margin_highlight): Adapt to new
- mode_line_string and marginal_area_string parameters.
-
-2003-11-22 Lars Hansen <larsh@math.ku.dk>
-
- * w32.c (struct the_group, getgrgid): Add.
- * mac.c (struct my_group, getgrgid): Add.
-
-2003-11-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Fassq, Fassoc, Frassq, Frassoc): Doc fixes.
-
-2003-11-21 Lars Hansen <larsh@math.ku.dk>
-
- * dired.c (Ffile_attributes): Add parameter ID-FORMAT and
- include in call to file name handler. Optionally translate numeric
- UID and GID to strings. Update docstring.
- (directory_files_internal): Add parameter ID-FORMAT.
- (Fdirectory_files_and_attributes): Add parameter ID-FORMAT and
- include in call to file name handler and call to
- directory_files_internal. Update Docstring.
- (Fdirectory_files): Add dummy parameter in call to
- directory_files_internal.
- * lisp.h (Qinteger): Add.
- (Qinteger_or_floatp, Qinteger_or_float_or_marker_p): Remove.
- (Ffile_attributes): Add parameter.
- * data.c (Qinteger): Export.
-
-2003-11-21 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Freverse, Fnreverse): Doc fixes.
-
-2003-11-19 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (init_iterator): Initialize it->start to position
- before reseating (in case start position is invisible).
- (init_to_row_start): Set it->start to row-start.
- (redisplay_window): Accept optional_new_start if start position
- is invisible (in which case IT_CHARPOS overshoots PT).
- (display_line): Setup row->start from it->start (rather than
- it->current which is wrong if first char on line is invisible).
- When done, reseat it->start to it->current (= start of next row).
- (expose_area): Fix exposure of text area when first char (e.g. TAB)
- is only partially visible.
-
- * dispextern.h (struct it): New member start.
-
-2003-11-17 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * alloc.c (make_float, Fcons): Clear the markbit at init time.
- (make_float, Fcons, Fmake_symbol, allocate_misc): Move the increment
- of block_index outside of the macro call.
- (Fgarbage_collect): Remove null code.
-
- * m/amdx86-64.h: Don't redefine XPNTR.
-
- * keyboard.c (parse_modifiers, apply_modifiers): Use INTMASK instead
- of VALMASK.
-
- * fns.c (hashfn_eq, hashfn_eql, hashfn_equal, hash_put)
- (sxhash_string, sxhash): Use INTMASK instead of VALMASK.
- (maybe_resize_hash_table): Use MOST_POSITIVE_FIXNUM.
-
- * lisp.h (VALMASK): Only define for non-union type.
- (MARKBIT): Remove.
- (ARRAY_MARK_FLAG): Use previous value of MARKBIT.
- (XTYPE): Define unconditionally.
- (XSETTYPE): Remove one more remnant.
- (EQ): Define differently for the union and non-union cases.
- (INTMASK): New bit mask.
- (struct Lisp_Marker): Move down to prepare for upcoming patch.
- (GC_EQ): Delegate to EQ.
-
- * coding.c (coding_restore_composition): Lisp_Object/int mixup.
-
-2003-11-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_window_to_scroll_bar): Move check of display to
- where window_id is compared.
-
-2003-11-17 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (struct it): New member first_vpos.
-
- * xdisp.c (start_display): Set it->first_vpos.
- (try_window_id): Use first_vpos to start display in first _text_
- line if no reusable lines at start of window with header line.
-
-2003-11-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * w32fns.c (XPutPixel):
- * w32bdf.c (w32_init_bdf_font):
- * sunfns.c (sel_read):
- * process.c (Fmake_network_process):
- * frame.c (store_frame_param):
- * fontset.c (Fset_fontset_font):
- * emacs.c (shut_down_emacs):
- * ccl.c (ccl_driver): Remove period at end of error message.
-
- * config.in: Regenerate.
-
- * xfns.c (x_window_to_frame, x_any_window_to_frame)
- (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
- (x_top_window_to_frame): Add Display* argument to xg_win_to_widget.
- (x_create_bitmap_mask, xg_set_icon, create_frame_xic)
- (xic_set_statusarea, x_window, gif_load): Formatting adjustments.
-
- * xterm.h (struct x_display_info): New field xg_cursor for GTK.
-
- * xterm.c: Add Display * to x_window_to_scroll_bar declaration.
- (XTmouse_position, handle_one_xevent): Pass Display* to
- x_window_to_scroll_bar.
- (x_window_to_scroll_bar): Take a Display* argument.
- Check that display for frame is equal to Display* argument.
- (event_handler_gdk): Remove current_dpyinfo. Get dpyinfo from
- x_display_info_for_display instead. Use Display in xev instead
- of GDK_DISPLAY.
- (x_dispatch_event): Call x_display_info_for_display.
- (XTread_socket): Move GTK part out of loop. current_dpyinfo removed.
- (x_connection_closed): Call xg_display_close for GTK.
- (x_term_init): Call xg_display_open for additional displays.
- Initiate dpyinfo->xg_cursor with call to xg_create_default_cursor
- for GTK.
-
- * xmenu.c (single_menu_item, mouse_position_for_popup)
- (x_activate_menubar): Formatting adjustments.
-
- * xdisp.c (update_tool_bar, redisplay_tool_bar): Formatting
- adjustments.
-
- * gtkutil.c (xg_get_gdk_display, xg_set_screen, xg_display_open)
- (xg_display_close, xg_create_default_cursor)
- (xg_get_gdk_pixmap_and_mask): New functions for multiple display
- handling.
- (xg_left_ptr_cursor): Remove.
- (xg_set_cursor): Change cursor to GdkCursor*. Do not create
- cursor here.
- (xg_win_to_widget): Take Display* argument, call
- gdk_xid_table_lookup_for_display.
- (xg_create_frame_widgets, xg_get_file_name, create_menus)
- (xg_create_widget, xg_modify_menubar_widgets): Call xg_set_screen.
- (xg_create_widget, xg_create_scroll_bar): Use xg_cursor
- in FRAME_X_DISPLAY_INFO.
- (xg_get_scroll_id_for_window): Take Display* argument.
- (update_frame_tool_bar): Call xg_get_gdk_pixmap_and_mask.
- (xg_initialize): Remove xg_left_ptr_cursor.
-
- * gtkutil.h (xg_get_scroll_id_for_window, xg_win_to_widget): Add
- Display* argument.
- (xg_display_open, xg_display_close, xg_create_default_cursor): Declare.
-
-2003-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_detect_focus_change): Do not change focus frame for
- Enter/LeaveNotify if the current focus frame has explicit focus.
-
-2003-11-14 Kim F. Storm <storm@cua.dk>
-
- * dispnew.c (update_text_area): Fix redisplay error when hscroll
- is active and first glyph is only partially visible.
-
-2003-11-13 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (select_frame_for_redisplay): New function.
- (redisplay_internal): Record also selected_frame for
- unwind_redisplay. Call select_frame_for_redisplay before
- redrawing each frame.
- (unwind_redisplay): Argument changed to a cons.
-
-2003-11-12 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Fstring_to_multibyte): Doc fix.
-
-2003-11-11 Kenichi Handa <handa@m17n.org>
-
- * xterm.c (x_list_fonts): Fix excluding of auto-scaled fonts.
-
-2003-11-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_window): Set XtNx and XtNy in shell widget for
- program specified positions.
-
-2003-11-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (XAW_ARROW_SCROLLBARS): Define it for Xaw 1.5E.
-
-2003-11-08 Kenichi Handa <handa@m17n.org>
-
- * Makefile.in (lisp): Add kannada.el.
- (shortlisp): Likewise.
-
-2003-11-07 Kenichi Handa <handa@m17n.org>
-
- * coding.c (coding_allocate_composition_data):
- Reset coding->composing to COMPOSITION_NO.
- (coding_restore_composition): Detect invalid composition data.
- Give Fstring and Fvector a Lispy integer, not C int.
-
-2003-11-05 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * floatfns.c (Flogb): Don't use VALMASK.
-
- * m/amdx86-64.h (VALBITS, XINT, XUINT): Remove.
- * m/ia64.h (VALBITS, XINT, XUINT): Remove.
-
- * lisp.h (XINT): Move the cast to clarify what is going on.
- (GCTYPEMASK, XSETTYPE): Remove.
- (XGCTYPE): Make it an alias of XTYPE.
-
-2003-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_term_init): Fix formatting.
-
-2003-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.h (xg_have_tear_offs): Declare.
- (xg_keep_popup, xg_did_tearoff): Remove.
-
- * gtkutil.c: Remove variable xg_did_tearoff.
- (xg_have_tear_offs): New function.
- (tearoff_remove): Just decrease xg_detached_menus.
- (tearoff_activate): Increase xg_detached_menus and call
- tearoff_remove when tearoff is removed.
- (xg_keep_popup): Remove function.
- (create_menus): Give add_tearoff_p as argument to recursive
- call to create_menus.
- (xg_create_widget): Use variables instead of multiple
- strcmp. Tell create_menus to create tear off only for
- menu bar menus.
- (xg_update_menubar): Change title for a detached menu also.
- (xg_modify_menubar_widgets): Always call xg_update_menubar, regardless
- of deep_p.
- (xg_initialize): Initialize xg_detached_menus, remove
- initialization of xg_did_tearoff.
-
- * xmenu.c (set_frame_menubar): For GTK, set deep_p if
- xg_have_tear_offs returns non-zero.
- (create_and_show_popup_menu): Remove setting of xg_did_tearoff and
- call to xg_keep_popup.
-
-2003-11-01 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTread_socket): Handle menubar selection and grow
- window only for mouseDown events.
-
-2003-10-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_term_init): For GTK part, increase x_initialized
- to check for more than one display. Use error instead of return 0.
-
-2003-10-31 Andrew Choi <akochoi@shaw.ca>
-
- * unexmacosx.c (unrelocate): New function (contributed by Nozomu Ando).
- (copy_dysymtab): Call it.
-
-2003-10-31 Luc Teirlinck <teirllm@auburn.edu>
-
- * eval.c (Fdefvaralias): Doc fix.
-
-2003-10-26 Luc Teirlinck <teirllm@auburn.edu>
-
- * data.c (Fsetplist): Doc fix.
-
-2003-10-14 Lute Kamstra <lute@gnu.org>
-
- * window.c (Fset_window_fringes): Clarify docstring.
-
-2003-10-14 Kim F. Storm <storm@cua.dk>
-
- * window.c (Fset_window_margins): Simplify arg checking.
-
-2003-10-13 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (MAX_BUF_SIZE): Reduce to 2**15.
- (print_partial_compiled_pattern): Replace assert with a printout.
- (skip_noops, mutually_exclusive_p): Change args, values to re_char *.
-
- * alloc.c (lisp_align_malloc): If BASE is 0, call memory_full.
-
- * window.c (Fset_window_margins): Allow only integers as args.
- (syms_of_window) <special-display-buffer-names,
- special-display-regexps>: Doc fixes.
-
-2003-10-13 Lute Kamstra <lute@gnu.org>
-
- * window.c (Fset_window_fringes): Elaborate docstring.
-
-2003-10-12 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTread_socket): Call DragWindow only for mouseDown events.
-
- * s/darwin.h (GC_MARK_STACK): Define.
-
-2003-10-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * window.c (shrink_windows): New function.
- (size_window): Call shrink_windows to calculate window sizes when
- shrinking frame with more than one window.
-
-2003-10-12 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (compute_fringe_widths): Doc fix.
-
-2003-10-08 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Fcoding_system_p): Return t for auto-loading coding system.
-
-2003-10-07 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Qcoding_system_define_form): New variable.
- (syms_of_coding): Intern and staticpro it.
- (Fcheck_coding_system): Try to autoload the definition of
- CODING-SYSTEM.
-
-2003-10-05 Luc Teirlinck <teirllm@auburn.edu>
-
- * fns.c (Frequire): Doc fix.
-
-2003-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (Fx_send_client_event): New function as a base for
- manipulating extended window manager hints.
- (Fx_send_client_event): Remove unused variable s.
-
- * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
- that function is removed.
-
- * xterm.c (x_set_offset): Use move_offset_left/top instead of
- x/y_pixels_outer_diff.
- (x_check_expected_move): Calculate move_offset_left/top.
-
- * xterm.h (struct x_output): New members: move_offset_top/left.
-
- * frame.c (x_set_frame_parameters): Remove x_fullscreen_move,
- call x_set_offset directly.
-
- * frame.h (enum): FULLSCREEN_MOVE_WAIT removed.
-
- * frame.c (Fdelete_frame): Free decode_mode_spec_buffer.
-
- * xterm.c (x_delete_display): Free font names and font_encoder
- in dpyinfo->font_table.
-
- * xfns.c (Fx_close_connection): Only call XFreeFont here.
- Move xfree of font names to x_delete_display.
-
- * xterm.h (struct x_display_info): New member, wm_type.
- (struct x_output): New members, expected_top/left and
- check_expected_move.
-
- * xterm.c (handle_one_xevent): Reset wm_type when ReparentNotify
- is received.
- (handle_one_xevent): Rename x_check_expected_move from
- x_check_fullscreen_move.
- (x_set_offset): Only add WM decoration sizes to modified_top/left
- for X_WMTYPE_A. Set check_expected_move when WM type is unknown.
- (x_check_expected_move): Rename from x_check_fullscreen_move.
- Removed fullscreen specific code. Use check_expected_move,
- expected_left/top instead. Also, set wm_type.
- (x_term_init): Initialize wm_type to unknown.
-
- * frame.c (x_fullscreen_move): Remove addition of WM decoration
- sizes to move_x/y.
-
-2003-10-03 Kenichi Handa <handa@m17n.org>
-
- * macterm.c (x_load_font): Clear all members of FONTP before start
- filling them.
-
-2003-10-02 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (fs_load_font): Don't set fontp->font_encoder to NULL
- before calling find_ccl_program_func. Call find_ccl_program_func
- only when fontp->font_encoder is not NULL.
-
- * xterm.c (x_load_font): Clear all members of FONTP before start
- filling them.
-
-2003-10-03 John Paul Wallington <jpw@gnu.org>
-
- * keymap.c (map_keymap): Don't abort when binding is a vector.
-
-2003-10-02 Jason Rumney <jasonr@gnu.org>
-
- * makefile.w32-in (emacs.o, coding.o, bytecode.o):
- Sync dependencies with Makefile.in.
- (alloca.o): Remove.
-
- * w32fns.c (w32_load_system_font): Clear all members of FONTP before
- filling them.
-
- * w32bdf.c (w32_load_bdf_font): Likewise.
-
-2003-09-30 Richard M. Stallman <rms@gnu.org>
-
- * term.c (set_tty_color_mode): Calculate current_mode_spec
- regardless of value of VAL.
-
- * intervals.c (graft_intervals_into_buffer):
- Set BUF_INTERVALS (buffer)->up_obj when appropriate.
- Handle over_used when splitting UNDER.
-
-2003-09-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-
- * regex.c (regex_compile): Free the stack when returning from function.
-
-2003-09-28 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (Finternal_char_font): Change return value to
- cons (FONT-NAME . GLYPH-CODE).
-
-2003-09-28 Eli Zaretskii <eliz@gnu.org>
-
- * term.c (tty_setup_colors): Treat any negative argument as -1.
-
-2003-09-27 Gaute B Strokkenes <biggaute@uwc.net> (tiny change)
-
- * process.c (send_process): Delete unused temp_buf.
-
-2003-09-26 Dave Love <fx@gnu.org>
-
- * xterm.c (x_bitmap_mask): Declare.
-
-2003-09-25 Dave Love <fx@gnu.org>
-
- * Makefile.in (fns.o): Depend on md5.h.
-
-2003-09-25 Kim F. Storm <storm@cua.dk>
-
- * window.c (set_window_buffer): Fix redisplay problems when
- switching between buffers with different display margin widths.
-
-2003-09-23 Kim F. Storm <storm@cua.dk>
-
- * process.c (set_socket_option): Fix :bindtodevice option.
- (Fset_network_process_option): Update process contact list when
- setting option succeeds.
- (Fmake_network_process): Doc fix.
-
-2003-09-23 Dave Love <fx@gnu.org>
-
- * process.c (Fnetwork_interface_info): Use HAVE_STRUCT_IFREQ... macros.
-
-2003-09-22 Eli Zaretskii <eliz@gnu.org>
-
- * term.c (set_tty_color_mode): Use INTEGERP to test whether a
- color mode is an integer number (it could be -1).
-
-2003-09-22 Richard M. Stallman <rms@gnu.org>
-
- * intervals.c (graft_intervals_into_buffer): Correct the main loop
- in the case where OVER is longer than UNDER.
-
-2003-09-22 Masatake YAMATO <jet@gyve.org>
-
- * window.c (Fset_window_scroll_bars): Validate the value of
- `vertical_type'.
-
-2003-09-21 Kim F. Storm <storm@cua.dk>
-
- * frame.c (Vdefault_frame_scroll_bars): New variable.
- (x_set_vertical_scroll_bars): Use it instead of hardcoded values.
- (syms_of_frame): DEFVAR_LISP it, and initialize according to
- window-system default scroll bar position.
-
- * window.c (Fwindow_scroll_bars): Doc fix.
-
-2003-09-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_set_offset): Take window manager decorations into account.
-
-2003-09-19 Richard M. Stallman <rms@gnu.org>
-
- * atimer.h: Don't include lisp.h.
- (P_): Define it here (as well as elsewhere).
-
- * print.c (Fprin1_to_string): Move the PRINTPREPARE
- later, so that PRINTFINISH won't unbind Qinhibit_modification_hooks.
-
- * data.c (Fvariable_binding_locus): New function.
- (syms_of_data): defsubr it.
- (Flocal_variable_p): Delete duplicate call to indirect_variable.
-
-2003-09-18 Dave Love <fx@gnu.org>
-
- * alloc.c (GC_MALLOC_CHECK): Move conditional undef after lisp.h.
-
- * process.c (Fnetwork_interface_info): Fix type error.
- (Fnetwork_interface_list): Doc fix.
- (read_process_output, read_process_output): Delete unused var.
-
-2003-09-17 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fnetwork_interface_list, Fnetwork_interface_info):
- Require HAVE_NET_IF_H and HAVE_SYS_IOCTL_H to include these fns.
- (Fnetwork_interface_info): Check that ifreq struct has required
- fields before accessing them; this requires that those fields are
- defined as macros, which may be too restrictive on some platforms,
- but it is better than failing on other platforms.
- (syms_of_process): Only defsubr above fns when included.
-
-2003-09-17 Dave Love <fx@gnu.org>
-
- * unexalpha.c: Don't include varargs.h.
-
-2003-09-17 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fset_process_sentinel): Add sentinel to childp plist
- for network process.
- (socket_options): Add `:' prefix to option names. Add optbit field.
- (set_socket_option): Remove no_error arg and special handling of s < 0.
- Return 1<<optbit for known option, 0 for unknown.
- Do not interpret 0 as false for boolean option (only nil).
- Pass failed option and value to report_file_error.
- (Fset_network_process_options): Replace by Fset_network_process_option.
- (Fset_network_process_option): New function to set just one option.
- (Fmake_network_process): Allow :coding arg to be a cons.
- Allow :server arg to be an integer specifying backlog size.
- Remove :options arg, and allow options to be specified directly
- as :KEY, VALUE pairs. Parse these options before binding socket.
- As before, :reuseaddr t is default for a server process, but this
- can now be disabled by specifying :reuseaddr nil.
- (Fnetwork_interface_info): Rename from Fget_network_interface_info.
- (init_process): Availability of network options is now checked with
- simpler syntax (featurep 'make-network-process :OPTION); use loop to
- setup features.
- (syms_of_process): Fix defsubr's for the replaced functions.
-
-2003-09-16 Dave Love <fx@gnu.org>
-
- * Makefile.in: Depend on coding.h.
-
-2003-09-14 Kim F. Storm <storm@cua.dk>
-
- * process.c [HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
- (Fnetwork_interface_list, Fget_network_interface_info): New defuns.
- (syms_of_process): Defsubr them.
-
- * config.in: Regenerate.
-
-2003-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * m/sr2k.h (XMARKBIT, XUNMARK): Remove.
- * m/news-r6.h (XUNMARK): Remove.
- * m/mips.h (XUNMARK): Remove.
- * m/mips-siemens.h (XUNMARK): Remove.
- * m/iris4d.h (XUNMARK): Remove.
- * m/hp800.h (XMARKBIT, XUNMARK): Remove.
-
-2003-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * lisp.h (VALBITS): Don't remove 1 for the markbit.
- (union Lisp_Object): Use unsigned int for types. Remove markbit.
- (MARKBIT): Remove 1 from VALBITS so we still use same old val.
- (XTYPE): Use unsigned right-shift.
- (XMARKBIT, XMARK, XUNMARK): Remove.
-
- * alloc.c (init_intervals, init_symbol, init_marker):
- Don't preallocate anything.
- (Fgarbage_collect, mark_object): Ignore the markbit.
-
- * bytecode.c (mark_byte_stack, unmark_byte_stack): Ignore the markbit.
-
-2003-09-08 Lute Kamstra <lute@gnu.org>
-
- * xdisp.c (pint2hrstr): New function.
- (decode_mode_spec): Add `%i' and `%I' specs.
- * buffer.c (syms_of_buffer): Document `%i' and `%I' constructs
- for `mode-line-format'.
-
-2003-09-07 Andreas Schwab <schwab@suse.de>
-
- * alloc.c: Use long instead of int when casting ABLOCKS_BUSY to
- avoid warning.
-
-2003-09-07 Eli Zaretskii <eliz@gnu.org>
-
- * editfns.c (region_limit): Support any non-zero value of BEGINNINGP.
-
-2003-09-03 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_window_cursor_type): Partially undo 2002-03-01
- change (superseded by 2002-08-30 change); the default blink-off
- cursor is now again "no cursor".
-
-2003-09-01 Jason Rumney <jasonr@gnu.org>
-
- * makefile.w32-in (alloca.o): Remove.
- (coding.o): Depend on intervals.h
- (emacs.o, bytecode.o): Depend on window.h
-
-2003-09-01 Dave Love <fx@gnu.org>
-
- * Makefile.in (alloca.o): Remove commands.
- (coding.o): Depend on intervals.h composite.h window.h.
- (emacs.o): Depend on window.h keyboard.h keymap.h.
- (gtkutil.o): Depend on keyboard.h charset.h coding.h.
- (bytecode.o): Depend on window.h.
-
-2003-08-31 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_per_char_metric): Allow cached metrics to be
- returned even when font_type is unknown.
-
- * xdisp.c (init_iterator): Remove old WINDOWSNT conditional.
-
-2003-08-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_term_init): Initialize new fields in x_display_info.
-
- * xterm.h (struct x_display_info): Add red/green/blue_bits and
- *_offset.
-
- * xfns.c (lookup_rgb_color): Use new fields in x_display_info to
- calculate pixel value.
-
-2003-08-29 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xdisp.c (redisplay_internal): Fix change of 2003-04-30.
- Don't tell redisplay display is accurate when it's actually been
- paused for pending input.
-
-2003-08-29 Richard M. Stallman <rms@gnu.org>
-
- * dispnew.c (adjust_glyph_matrix): Call window_box
- whenever W is nonzero.
-
- * data.c (Fmake_variable_buffer_local, Fmake_local_variable)
- (Fkill_local_variable, Fmake_variable_frame_local)
- (Flocal_variable_p, Flocal_variable_if_set_p):
- Use indirect_variable to trace thru variable aliases.
-
- * config.in: Updated.
-
- * callint.c (Fcall_interactively): Save and restore
- Vthis_command, Vthis_original_command, real_this_command,
- and current_kboard->Vlast_command.
-
- * abbrev.c (Fexpand_abbrev): Insert before deleting.
-
-2003-08-29 Gerd Moellmann <gerd@gnu.org>
-
- * xfns.c (lookup_rgb_color): Handle TrueColor visuals specially.
-
-2003-08-28 David Abrahams <dave@boost-consulting.com> (tiny change)
-
- * coding.c (decode_coding_iso2022): Initialize local variable c2.
- (decode_coding_sjis_big5): Likewise.
-
-2003-08-27 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (sys_pipe): Protect against file descriptor overflow.
-
- * w32fns.c (syms_of_w32fns): Remove non-existent functions.
-
- * w32term.c (w32_read_socket): Fix WM_MOUSEWHEEL assignment.
-
-2003-08-26 Terje Rosten <terjeros@phys.ntnu.no>
-
- * xfns.c (Vgtk_version_string): New variable.
- (syms_of_xfns): DEFVAR_LISP it. Provide gtk.
-
-2003-08-24 Eli Zaretskii <eliz@gnu.org>
-
- * term.c (term_init): Remove `const' from buffer_size's declaration.
-
- * Makefile.in (msdos.o): Depend on intervals.h.
-
- * msdos.c: Include intervals.h, since STRING_INTERVALS requires that.
-
-2003-08-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (struct x_display_info): New fields: client_leader_window
- and Xatom_wm_client_leader.
-
- * xterm.c (x_initialize): Move call to x_session_initialize to ...
- (x_term_init): ... here. Initialize client_leader fields in dpyinfo.
-
- * xsmfns.c (create_client_leader_window): New function.
- (x_session_initialize): Call create_client_leader_window, take
- dpyinfo as argument.
-
- * xfns.c (Fx_create_frame): Set property WM_CLIENT_LEADER.
-
- * Makefile.in (xsmfns.o): Add more depenedencies.
-
-2003-08-21 Dave Love <fx@gnu.org>
-
- * m/iris4d.h: Use _MIPS_SZLONG, not _LP64.
-
-2003-08-21 Kenichi Handa <handa@m17n.org>
-
- * term.c (term_init): Fix previous change; don't rely on the
- length of `buffer' if TERMINFO is defined.
-
-2003-08-20 Dave Love <fx@gnu.org>
-
- * atimer.h: Include lisp.h.
-
- * lisp.h (EMACS_LISP_H): New.
- (popup_activated_flag): Don't declare.
-
- * alloca.c: Some merging with gnulib. Change logic and doc
- concerning (x)malloc/(x)free -- no longer Emacs-specific.
- [DO_BLOCK_INPUT]: Don't include lisp.h.
- (xmalloc, xfree): Declare.
- (malloc): Don't declare.
-
- * Makefile.in (LWLIB_OPTIONS): Remove (unused).
- (alloca.o): Remove obsolete stuff concerning alloca.s. Depend on
- atimer.h, blockinput.h.
-
- * alloc.c (lisp_align_malloc): Change type of `aligned'.
-
- * alloca.s: Remove.
-
-2003-08-19 Gerd Moellmann <gerd@gnu.org>
-
- * s/freebsd.h [__FreeBSD_version >= 400000]: Define TERMINFO,
- use -lncurses.
-
- * term.c (term_init): Use a buffer of size 4096 for tgetent since
- FreeBSD returns something longer than 2044. Abort if the end of
- the buffer is overwritten.
-
-2003-08-19 Miles Bader <miles@gnu.org>
-
- * xterm.c (x_term_init): Correctly use result of Ffile_readable_p.
-
-2003-08-19 Gerd Moellmann <gerd@gnu.org>
-
- * alloc.c (lisp_align_malloc): Check for memory full when
- allocating ablocks, which also avoids freeing a pointer into an
- ablocks structure.
-
- * puresize.h (BASE_PURESIZE): Increase to 1100000.
- * buffer.c (Fmove_overlay): Set overlay's next pointer unconditionally.
-
-2003-08-16 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fencode_time): Doc fix.
-
-2003-08-16 David Ponce <david@dponce.com>
-
- * fileio.c (Fwrite_region): Fix conditional expression to issue
- the right message.
-
-2003-08-16 Juri Linkov <juri@jurta.org>
-
- * syntax.c (Fforward_word): Argument changed to optional.
- Set default value to 1.
-
-2003-08-15 Kenichi Handa <handa@m17n.org>
-
- * xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
- what autoscaled.
- (best_matching_font): Once we find a better scalable font, set
- non_scalable_has_exact_height_p to 1.
- (try_font_list): Call try_alternative_families to try any family
- with the given registry.
-
-2003-08-09 Andreas Schwab <schwab@suse.de>
-
- * alloc.c (mark_object): Handle Lisp_Misc_Save_Value.
-
- * print.c (print_string): Fix printing of multibyte string with
- nontrivial printcharfun.
-
-2003-07-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (xg_set_icon): Rewrite to compile with GTK 2.0 and 2.2.
-
- * xterm.c (x_bitmap_icon): Return if xg_set_icon succeeds.
-
-2003-07-31 Kenichi Handa <handa@m17n.org>
-
- * process.c (read_process_output): Return the actually read bytes
- instead of the result of decoding.
-
-2003-07-31 Kenichi Handa <handa@m17n.org>
-
- * xterm.h (struct x_bitmap_record): New member have_mask.
-
- * xfns.c (x_create_bitmap_from_data): Initialize have_mask member
- to 0.
- (x_create_bitmap_from_file): Likewise.
- (x_destroy_bitmap): Check have_mask member before freeing a mask.
- (x_destroy_all_bitmaps): Likewise.
- (x_create_bitmap_mask): Set have_mask member to 1.
-
-2003-07-30 Richard M. Stallman <rms@gnu.org>
-
- * Makefile.in (CFLAGS) [!OPTIMIZE]: Undo previous change.
-
-2003-07-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_mark_data): Update calls to mark_object.
-
-2003-07-29 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (xim_open_dpy, xim_initialize, xim_close_dpy):
- Conditionalize XIM code on HAVE_XIM.
-
- * fns.c (Fclear_string): New function.
- (syms_of_fns): defsubr it.
-
-2003-07-28 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
-
- * xfns.c (xic_set_preeditarea): Add the left fringe width to spot.x.
-
-2003-07-22 Stefan Monnier <monnier@cs.yale.edu>
-
- * xfns.c: Don't check HAVE_PNG_H: autoconf doesn't seem to find it.
-
- * buffer.c (delete_all_overlays): New function.
- * buffer.h (delete_all_overlays): Declare.
- * coding.c (run_pre_post_conversion_on_str):
- * print.c (temp_output_buffer_setup):
- * fileio.c (Finsert_file_contents):
- * minibuf.c (get_minibuffer): Use it.
-
-2003-07-22 Andrew Choi <akochoi@shaw.ca>
-
- * unexmacosx.c (unexec_regions_sort_compare):
- (unexec_regions_merge): New functions. Sort and merge unexec
- regions before dumping them.
-
-2003-07-22 Dave Love <fx@gnu.org>
-
- * xfns.c [HAVE_PNG]: Consider both png.h and libpng/png.h.
-
-2003-07-21 Stefan Monnier <monnier@cs.yale.edu>
-
- * alloc.c (MARK_STRING, UNMARK_STRING, STRING_MARKED_P)
- (GC_STRING_CHARS, string_bytes): Use ARRAY_MARK_FLAG rather than
- MARKBIT as the gcmarkbit for strings.
-
-2003-07-21 Richard M. Stallman <rms@gnu.org>
-
- * s/openbsd.h (LD_SWITCH_SYSTEM_TEMACS): Add undef.
-
- * fns.c (Flocale_info): Rename from Flanginfo. Doc fixes.
- (syms_of_fns): Corresponding change.
-
- * alloc.c (syms_of_alloc): Doc fixes.
-
-2003-07-20 Han Boetes <han@mijncomputer.nl> (tiny change)
-
- * s/netbsd.h: Use -Wl syntax.
-
-2003-07-17 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (xim_initialize): Redo 6/24 change.
-
-2003-07-15 Stefan Monnier <monnier@cs.yale.edu>
-
- * buffer.c (copy_overlays): Use EMACS_INT for positions.
- (Fswitch_to_buffer): Don't signal an error when switching to the same
- buffer in a dedicated window.
-
- * alloc.c: Use bitmaps for cons, as was done for floats.
- (init_float, init_cons): Let the normal code allocate the first block.
- (CONS_BLOCK_SIZE): Redefine based on BLOCK_BYTES and bitmap size.
- (CONS_BLOCK, CONS_INDEX, CONS_MARKED_P, CONS_MARK, CONS_UNMARK):
- New macros.
- (struct cons_block): Move conses to the beginning. Add gcmarkbits.
- (Fcons): Use lisp_align_malloc and CONS_UNMARK.
- (live_cons_p): Check the pointer is not past the `conses' array.
- (mark_maybe_object, mark_maybe_pointer): Use CONS_MARKED_P.
- (mark_object, mark_buffer): Use CONS_MARKED_P and CONS_MARK.
- (survives_gc_p): Use CONS_MARKED_P and simplify.
- (gc_sweep): Use CONS_MARKED_P, CONS_UNMARK, and lisp_align_free.
-
-2003-07-13 Paul Eggert <eggert@twinsun.com>
-
- GCC 3.3 (sparc) no longer puts "int foo = 0;" into data; it
- puts it into BSS instead, at least on Solaris 8 and 9.
- This is a valid optimization, and it may occur on other platforms,
- so Emacs should not assume that initializing a static variable to
- zero puts it into data.
- * alloc.c (pure, staticvec):
- Initialize these arrays to nonzero, so that they're not
- put into BSS by that optimization.
-
-2003-07-13 Stefan Monnier <monnier@cs.yale.edu>
-
- * alloc.c (BLOCK_PADDING): Rename from ABLOCKS_PADDING. Update users.
- (lisp_align_malloc): Use posix_memalign is available.
- (ABLOCKS_BASE): Use HAVE_POSIX_MEMALIGN as an optimization.
- (STRING_BLOCK_SIZE): Rename from STRINGS_IN_STRING_BLOCK
- for consistency. Update users.
-
-2003-07-13 Richard M. Stallman <rms@gnu.org>
-
- * s/netbsd.h (START_FILES_1, END_FILES_1): Always define them.
-
-2003-07-13 Terje Rosten <terjeros@phys.ntnu.no>
-
- * xterm.c (x_bitmap_icon, x_wm_set_icon_pixmap): Modify to add mask,
- and use the Gtk+ function gtk_window_icon_from_file if available.
-
- * xfns.c (x_bitmap_mask, x_create_bitmap_mask): New functions to
- handle mask of bitmaps.
- (x_allocate_bitmap_record, x_destroy_bitmap): Modify to handle the
- mask property.
- (xg_set_icon): New function, wrapper for gtk_window_icon_from_file.
-
- * xterm.h (xg_set_icon): New function.
-
-2003-07-12 Paul Eggert <eggert@twinsun.com>
-
- * unexelf.c (unexec): Consider a section to precede the .bss
- section if its addresses overlap that of .bss.
-
-2003-07-12 Richard M. Stallman <rms@gnu.org>
-
- * Makefile.in (CFLAGS) [!OPTIMIZE]: Set CFLAGS to -g.
-
- * config.in (HAVE_CRTIN): Add #undef.
- (INLINE): Really inline only if OPTIMIZE is defined.
-
- * s/netbsd.h (START_FILES, LIB_STANDARD): Use START_FILES_1,
- END_FILES_1.
- (START_FILES_1, END_FILES_1): New macros (conditional).
- (LD_SWITCH_SYSTEM_TEMACS): Define.
-
- * s/openbsd.h: Don't include bsd4-3.h.
- (TERMINFO): Define.
- (LIBS_TERMCAP): Define.
- (LD_SWITCH_SYSTEM): Define (two definitions).
-
- * xfns.c: Include libpng/png.h instead of png.h.
-
-2003-07-11 Andreas Schwab <schwab@suse.de>
-
- * buffer.c (modify_overlay): Update prototype.
- * lisp.h (adjust_overlays_for_insert, adjust_overlays_for_delete):
- Likewise.
-
-2003-07-09 Stefan Monnier <monnier@cs.yale.edu>
-
- * lisp.h (VALBITS): Define in terms of GCTYPEBITS.
- (struct interval): Move to intervals.h.
- (struct Lisp_Marker): Use EMACS_INT for position info.
- (forward_point): Remove prototype of defunct function.
- (Qmodification_hooks, Qrear_nonsticky, Fnext_property_change)
- (Fget_text_property, Fset_text_properties, Ftext_propertes_not_all)
- (syms_of_textprop, set_text_properties): Remove prototypes that are
- already in intervals.h.
-
- * intervals.h (struct interval): Move from lisp.h.
- Use EMACS_INT for position and size info.
-
- * coding.c: Include intervals.h for Fset_text_properties.
-
- * buffer.h (struct buffer_text, struct buffer): Use EMACS_INT for
- position and length information.
-
-2003-07-09 Stefan Monnier <monnier@cs.yale.edu>
-
- * buffer.h (struct buffer_text, struct buffer): Use EMACS_INT for
- position and length information.
-
-2003-07-09 Stefan Monnier <monnier@cs.yale.edu>
-
- Change overlays_after and overlays_before so the overlays themselves
- are linked into lists, rather than using cons cells. After all each
- Lisp_Misc already occupies 5 words, so we can add a `next' field to
- Lisp_Overlay for free and save up one cons cell per overlay (not
- to mention one indirection when traversing the list of overlay).
-
- * lisp.h (struct Lisp_Overlay): New field `next'.
-
- * buffer.h (struct buffer): Change overlays_before and overlays_after
- from Lisp lists of overlays to pointers to overlays.
-
- * buffer.c (overlay_strings, recenter_overlay_lists):
- Fix typo in eassert in last commit.
- (unchain_overlay): New function.
- (add_overlay_mod_hooklist): Use AREF.
- (copy_overlays, reset_buffer, overlays_at, overlays_in)
- (overlay_touches_p, overlay_strings, recenter_overlay_lists)
- (fix_overlays_in_range, fix_overlays_before, Fmake_overlay)
- (Fmove_overlay, Fdelete_overlay, Foverlay_lists)
- (report_overlay_modification, evaporate_overlays, init_buffer_once):
- Adjust to new type of overlays_(before|after).
-
- * alloc.c (mark_object): Mark the new `next' field of overlays.
- (mark_buffer): Manually mark the overlays_(after|before) fields.
-
- * coding.c (run_pre_post_conversion_on_str):
- * editfns.c (overlays_around):
- * xdisp.c (load_overlay_strings):
- * fileio.c (Finsert_file_contents):
- * indent.c (current_column):
- * insdel.c (signal_before_change, signal_after_change):
- * intervals.c (set_point_both):
- * print.c (temp_output_buffer_setup): Use new type for
- overlays_(before|after).
-
-2003-07-08 Stefan Monnier <monnier@cs.yale.edu>
-
- * buffer.c (report_overlay_modification): Don't run hooks while
- traversing the list of overlays.
-
- * buffer.h (struct buffer): Use an int for overlay_center.
- (overlays_at, evaporate_overlays, recenter_overlay_lists)
- (overlay_strings, fix_overlays_before): Use EMACS_INT for positions.
-
- * buffer.c (reset_buffer, recenter_overlay_lists)
- (adjust_overlays_for_insert, adjust_overlays_for_delete)
- (fix_overlays_in_range, Fmake_overlay, Fmove_overlay)
- (evaporate_overlays, init_buffer_once): Update use of overlay_center.
- (overlays_at, evaporate_overlays, recenter_overlay_lists)
- (overlay_strings, fix_overlays_before): Use EMACS_INT for positions.
-
- * xdisp.c (fast_find_position): Remove unused var.
-
- * cmds.c (Qexpand_abbrev): New sym.
- (syms_of_cmds): Initialize it.
- (internal_self_insert): Use it to call expand-abbrev.
-
-2003-07-09 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (use_xim) [!USE_XIM]: Default to disable XIM if Emacs
- was configured with --without-xim.
- (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
-
-2003-07-07 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (reseat_1): Set it->area to TEXT_AREA.
-
- * alloc.c (Fgarbage_collect): Doc fix.
-
-2003-07-07 Nozomu Ando <nand@mac.com>
-
- * buffer.c (Fkill_buffer): Clear charpos cache if necessary.
-
-2003-07-06 Stefan Monnier <monnier@cs.yale.edu>
-
- * minibuf.c (read_minibuf): UNGCPRO before returning.
- (Ftry_completion, Fall_completions): Doc fix.
-
- * alloc.c (live_float_p): Check that p is not past the `floats' array,
- now that `floats' is not the last element of the struct any more.
-
-2003-07-06 Jason Rumney <jasonr@gnu.org>
-
- * w32term.h (ClipboardSequence_Proc): New type.
-
- * w32fns.c (clipboard_sequence_fn): New variable.
- (globals_of_w32fns): Initialize it.
-
- * w32select.c (last_clipboard_sequence_number): New variable.
- (Fw32_set_clipboard_data, Fw32_get_clipboard_data): Use sequence
- number if possible.
-
-2003-07-06 Stefan Monnier <monnier@cs.yale.edu>
-
- * m/amdx86-64.h (MARKBIT):
- * m/ia64.h (MARKBIT): Remove definition since lisp.h does not compare
- MARKBIT and ARRAY_MARK_FLAG any more.
-
- * m/hp800.h (XSETMARKBIT):
- * m/sr2k.h (XSETMARKBIT):
- * lisp.h (XSETMARKBIT): Remove unused macro.
-
- * lisp.h (mark_object): Change prototype.
-
- * alloc.c (mark_object): Change arg *Lisp_Object -> Lisp_Object.
- (last_marked): Change accordingly.
- (mark_interval, mark_maybe_object, mark_maybe_pointer)
- (Fgarbage_collect, mark_glyph_matrix, mark_face_cache, mark_image)
- (mark_buffer): Update calls to mark_object.
-
- * bytecode.c (mark_byte_stack):
- * fns.c (sweep_weak_table):
- * keyboard.c (mark_kboards): Update calls to mark_object.
-
-2003-07-06 Jason Rumney <jasonr@gnu.org>
-
- * alloc.c (struct ablock): Only include padding when there is some.
-
-2003-07-04 Stefan Monnier <monnier@cs.yale.edu>
-
- * alloc.c (ALIGN): Add casts to simplify usage.
- (BLOCK_ALIGN, BLOCK_BYTES, ABLOCKS_PADDING, ABLOCKS_SIZE)
- (ABLOCKS_BYTES, ABLOCK_ABASE, ABLOCKS_BUSY, ABLOCKS_BASE): New macros.
- (struct ablock, struct ablocks): New types.
- (free_ablock): New global var.
- (lisp_align_malloc, lisp_align_free): New functions.
- (FLOAT_BLOCK_SIZE): Redefine in terms of BLOCK_BYTES.
- (struct float_block): Reorder and add gcmarkbits.
- (GETMARKBIT, SETMARKBIT, UNSETMARKBIT, FLOAT_BLOCK, FLOAT_INDEX)
- (FLOAT_MARKED_P, FLOAT_MARK, FLOAT_UNMARK): New macros.
- (init_float, make_float): Use lisp_align_malloc.
- (free_float, live_float_p): Don't use `type' any more.
- (make_float): Use FLOAT_UNMARK to access to mark bit.
- (mark_maybe_object, mark_maybe_pointer, survives_gc_p):
- Use FLOAT_MARKED_P to access the mark bit.
- (pure_alloc): Simplify use of ALIGN.
- (mark_object): Use FLOAT_MARK to access the mark bit.
- (gc_sweep): Use new macros to access the float's mark bit.
- (init_alloc_once): Init free_ablock.
-
- * lisp.h (struct Lisp_Float): Remove unused field `type'.
-
-2003-06-27 Stefan Monnier <monnier@cs.yale.edu>
-
- * alloc.c (VECTOR_MARK, VECTOR_UNMARK, VECTOR_MARKED_P): New macros.
- (GC_STRING_BYTES): Don't mask markbit (it's only used on `size').
- (allocate_buffer): Move.
- (string_bytes): Don't mask markbit of `size_byte'.
- (mark_maybe_object, mark_maybe_pointer, Fgarbage_collect)
- (mark_object, mark_buffer, survives_gc_p, gc_sweep):
- Use the `size' field of buffers (rather than the `name' field) for
- the mark bit, as is done for all other vectorlike objects.
- Use the new macros to access the mark bit of vectorlike objects.
-
-2003-06-26 Richard M. Stallman <rms@gnu.org>
-
- * puresize.h (BASE_PURESIZE): Increment base size.
-
- * xdisp.c (fast_find_position): Enable Gerd's new definition.
-
- * xterm.c (xim_initialize): Undo previous change.
-
-2003-06-26 Stefan Monnier <monnier@cs.yale.edu>
-
- * alloc.c (survives_gc_p): Simplify.
-
- * buffer.c (set_buffer_internal_1): Test CONSP for lists.
-
- * window.c (Fset_window_dedicated_p): Simplify.
- (display_buffer_1): Don't raise the win from which minibuf was entered.
- (temp_output_buffer_show): Don't assume BEG == 1. Simplify.
- (Fminibuffer_selected_window): Simplify.
-
- * buffer.h (struct buffer_text): Lisp_Object `markers' => Lisp_Marker.
-
- * lisp.h (unchain_marker): Lisp_Object arg => Lisp_Marker.
- (struct Lisp_Marker): Lisp_Object `chain' => Lisp_Marker `next'.
-
- * insdel.c (check_markers, adjust_markers_for_delete)
- (adjust_markers_for_insert, adjust_markers_for_replace)
- (prepare_to_modify_buffer, RESTORE_VALUE):
- * marker.c (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
- (Fset_marker, set_marker_restricted, set_marker_both, unchain_marker)
- (set_marker_restricted_both, Fbuffer_has_markers_at, count_markers):
- * alloc.c (Fmake_marker, free_marker, gc_sweep):
- * buffer.c (Fget_buffer_create, Fkill_buffer, Fset_buffer_multibyte):
- * editfns.c (save_excursion_restore, transpose_markers):
- * window.c (delete_window):
- * xdisp.c (message_dolog): Update for new types.
-
-2003-06-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfaces.c (set_font_frame_param): Set default_face_done_p to zero.
- (realize_default_face): Use default_face_done_p for the force_p
- argument to set_lface_from_font_name. Set default_face_done_p to one.
-
- * frame.c (make_frame): Initialize default_face_done_p.
-
- * frame.h (struct frame): Add default_face_done_p.
-
- * config.in: Add XRegisterIMInstantiateCallback_arg6 so it
- will be defined.
-
-2003-06-25 Stefan Monnier <monnier@cs.yale.edu>
-
- * alloc.c (make_interval, Fmake_symbol, allocate_misc):
- Initialize the new field `gcmarkbit'.
- (mark_interval, MARK_INTERVAL_TREE): Use the new `gcmarkbit' field.
- (mark_interval_tree): Don't mark the tree separately from the nodes.
- (UNMARK_BALANCE_INTERVALS): Don't unmark the tree.
- (mark_maybe_object, mark_maybe_pointer, Fgarbage_collect)
- (mark_object, survives_gc_p, gc_sweep): Use new `gcmarkbit' fields.
-
- * lisp.h (struct interval, struct Lisp_Symbol, struct Lisp_Free)
- (struct Lisp_Marker, struct Lisp_Intfwd, struct Lisp_Boolfwd)
- (struct Lisp_Kboard_Objfwd, struct Lisp_Save_Value)
- (struct Lisp_Buffer_Local_Value, struct Lisp_Overlay)
- (struct Lisp_Objfwd, struct Lisp_Buffer_Objfwd): Add `gcmarkbit' field.
-
-2003-06-24 Dave Love <fx@gnu.org>
-
- * xterm.c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
-
- * strftime.c: Test HAVE_SYS__MBSTATE_H, not __hpux. Merge changes
- from gnulib.
-
-2003-06-21 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fwrite_region): Alternate messages
- for append and partial write.
-
- * keyboard.c (read_key_sequence): When converting upcase fn key to
- downcase, update fkey and keytran so `backspace' gets translated.
-
- * keyboard.c (read_avail_input): Don't signal SIGHUP in batch mode.
-
- * process.c (wait_reading_process_input): Don't signal SIGIO
- in batch mode.
-
-2003-06-17 Kenichi Handa <handa@m17n.org>
-
- * Makefile.in (xselect.o): Don't depend on charset.h, coding.h,
- composite.h.
-
- * xselect.c: Don't include charset.h, coding.h, composite.h.
- (Qforeign_selection): New variable.
- (syms_of_xselect): Intern and static it.
- (selection_data_to_lisp_data): Return a unibyte string made from
- data with `foreign-selection' text property.
-
-2003-06-15 Stefan Monnier <monnier@cs.yale.edu>
-
- * termhooks.h (EVENT_INIT): New macro.
-
- * keyboard.c (mark_kboards): Move from alloc.c. Mark kbd_buffer.
-
- * alloc.c (mark_kboards): Move to keyboard.c.
-
- * keyboard.c (record_asynch_buffer_change, read_avail_input):
- * xterm.c (x_dispatch_event):
- * xmenu.c (find_and_call_menu_selection):
- * xdisp.c (handle_tool_bar_click):
- * w32menu.c (menubar_selection_callback):
- * sysdep.c (kbd_input_ast, read_input_waiting):
- * msdos.c (dos_rawgetc):
- * macterm.c (mac_check_for_quit_char):
- * macmenu.c (menubar_selection_callback):
- * gtkutil.c (xg_tool_bar_callback): Don't pass uninitialized
- data to kbd_buffer_store_event.
-
-2003-06-15 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (x_fix_overlapping_area): Always use area relative X
- to fix redisplay problem with tall characters (such as ,AC(B).
-
-2003-06-13 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
-
- * fileio.c (Fcopy_file): Doc fix: copies file modes, too.
-
-2003-06-12 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Fwrite_region): Save and restore restriction.
-
-2003-06-12 Dave Love <fx@gnu.org>
-
- * alloca.c (alloca): Declare arg as size_t.
-
- * sysdep.c: Remove redundant include of unistd.h, stdlib.h.
- Use HAVE_DECL_SYS_SIGLIST, not SYS_SIGLIST_DECLARED.
-
-2003-06-11 Dave Love <fx@gnu.org>
-
- * search.c (shrink_regexp_cache): Use xrealloc.
- (syms_of_search): Use xmalloc.
-
-2003-06-10 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (phys_cursor_in_rect_p): Fix 2003-05-24 change.
- Adjust phys_cursor.x to be relative to window box, rather than
- text area before checking -- to ensure cursor is redrawn when
- exposing window.
- Note: This also fixes a similar (older) bug if display margins
- are present.
-
-2003-06-06 Kenichi Handa <handa@m17n.org>
-
- * coding.c (encoding_buffer_size): If coding->type is
- coding_type_ccl, double magnification on CRLF encoding.
-
-2003-06-06 Jason Rumney <jasonr@gnu.org>
-
- * w32reg.c (SYSTEM_DEFAULT_RESOURCES): New constant.
- (w32_get_string_resource): Try SYSTEM_DEFAULT_RESOURCES last.
-
- * xfaces.c (Finternal_face_x_get_resource): Do it on Windows and
- Mac too.
-
-2003-06-05 Dave Love <fx@gnu.org>
-
- * strftime.c: Merge changes from gnulib.
-
- * mktime.c (__mktime_internal): Merge changes from gnulib
- involving year 69 and dst2.
-
- Changes to merge with gnulib version and be consistent with the
- autoconf test:
-
- * getloadavg.c: Set NLIST_STRUCT from HAVE_NLIST_H.
- Use HAVE_STRUCT_NLIST_N_UN_N_NAME, not NLIST_NAME_UNION.
- [HAVE_LOCALE_H]: Include locale.h.
- (getloadavg) [HAVE_SETLOCALE]: Run sscanf in C locale.
-
-2003-06-05 Kim F. Storm <storm@cua.dk>
-
- * window.c (coordinates_in_window): Convert X and Y to window
- relative coordinates inside mode-line and header-line parts.
- Convert X and Y to margin area relative coordinates inside left
- and right display margin parts.
-
-2003-06-05 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (add_system_logical_colors_to_map): New function.
- (Fx_open_connection): Use it.
-
-2003-06-04 Stefan Monnier <monnier@cs.yale.edu>
-
- * process.c (allocate_pty): Revert part of the previous patch.
- (Faccept_process_output): Simplify.
-
-2003-06-04 Jason Rumney <jasonr@gnu.org>
-
- * termhooks.h (enum event_kind): Remove MOUSE_WHEEL_EVENT.
-
- * keyboard.c (Qmouse_wheel, mouse_wheel_syms)
- (lispy_mouse_wheel_names): Remove.
- (syms_of_keyboard): Remove Qmouse_wheel and mouse_wheel_syms.
- Always define drag_and_drop_syms.
-
- * macterm.c (XTread_socket): Map mouse wheel events to Emacs
- WHEEL_EVENT events.
-
-2003-06-03 Stefan Monnier <monnier@cs.yale.edu>
-
- * xdisp.c (update_tool_bar): Add missing UNGCPRO.
-
- * buffer.c (init_buffer_once): Make kill-buffer-hook permanent-local.
-
-2003-06-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
- menu item label.
-
-2003-06-03 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Fwindow_edges): Doc fix.
- (Fwindow_pixel_edges, Fwindow_inside_edges)
- (Fwindow_inside_pixel_edges): New functions.
- (syms_of_window): defsubr them.
-
- * window.h (WINDOW_LEFT_FRINGE_COLS, WINDOW_RIGHT_FRINGE_COLS)
- (WINDOW_MODE_LINE_LINES, WINDOW_HEADER_LINE_LINES): New macros.
-
-2003-06-02 Stefan Monnier <monnier@cs.yale.edu>
-
- * dispnew.c (Fsit_for): Don't lie about the number of args.
-
-2003-06-02 Dave Love <fx@gnu.org>
-
- * callproc.c: Use HAVE_FCNTL_H, not USG5.
- (syms_of_callproc) <process-environment>: Doc fix.
-
- * doc.c: Use HAVE_FCNTL_H, not USG5.
-
- * xfaces.c (font_rescale_ratio): Fix for K&R.
-
- * termcap.c: Use HAVE_FCNTL_H, not _POSIX_VERSION.
-
- * mem-limits.h: Use HAVE_SYS_RESOURCE_H, HAVE_SYS_VLIMIT_H.
-
- * lread.c [HAVE_FCNTL_H]: Include fcntl.h.
-
- * gtkutil.c: Include keyboard.h, charset.h, coding.h.
- (xg_create_frame_widgets): Use ENCODE_UTF_8.
+ * window.h: Add EXFUN for Fwindow_full_width_p.
- * xterm.c (Qutf_8): Move to coding.c
+2007-07-14 Jason Rumney <jasonr@gnu.org>
- * xmenu.c (ENCODE_MENU_STRING): New.
- (list_of_panes, list_of_items, digest_single_submenu, xmenu_show):
- Use it.
+ * process.c [WINDOWSNT]: Don't undefine AF_INET6.
- * coding.h (ENCODE_UTF_8): New.
- (Qutf_8): Declare.
+2007-07-14 Richard Stallman <rms@gnu.org>
- * coding.c (Qutf_8): New.
- (syms_of_coding): Intern it.
+ * eval.c (maybe_call_debugger): New function.
+ (find_handler_clause): Use maybe_call_debugger.
+ Call it when the handler says `debug'.
+ Eliminate DEBUGGER_VALUE_PTR.
+ (Fsignal): Eliminate debugger_value.
+ (Qdebug): New variable.
+ (syms_of_eval): Initialize it.
- * fns.c: Doc fixes.
+2007-07-14 Juanma Barranquero <lekktu@gmail.com>
-2003-06-02 Kenichi Handa <handa@m17n.org>
+ * eval.c (Fprogn):
+ * keyboard.c (Ftrack_mouse):
+ * print.c (Fwith_output_to_temp_buffer):
+ * window.c (Fsave_window_excursion): Doc fix.
- * buffer.c (Fset_buffer_multibyte): Fix previous change.
+2007-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
-2003-06-01 Stefan Monnier <monnier@cs.yale.edu>
+ * eval.c (init_eval_once): Bump max_lisp_eval_depth to 400.
- * lread.c (openp): Make sure STR is a string.
+2007-07-12 Stefan Monnier <monnier@iro.umontreal.ca>
-2003-06-01 David Ponce <david@dponce.com>
+ * process.h (struct Lisp_Process): Turn slots infd, outfd,
+ kill_without_query, pty_flag, tick, update_tick, decoding_carryover,
+ inherit_coding_system_flag, filter_multibyte, adaptive_read_buffering,
+ read_output_delay, and read_output_skip from Lisp_Objects to ints.
+ Remove unused encoding_carryover.
+ * process.c: Adjust all functions accordingly.
- * termhooks.h (enum event_kind): Add new WHEEL_EVENT event.
- Declare MOUSE_WHEEL_EVENT only if MAC_OSX defined.
+2007-07-12 Richard Stallman <rms@gnu.org>
- * keyboard.c (Qmouse_wheel): Declare only if MAC_OSX defined.
- (mouse_wheel_syms, lispy_mouse_wheel_names): Likewise.
- (discard_mouse_events): Discard WHEEL_EVENT events too.
- (lispy_wheel_names, wheel_syms): New.
- (syms_of_keyboard): Init and staticpro `wheel_syms'. Init and
- staticpro `Qmouse_wheel' and `mouse_wheel_syms' only if MAC_OSX defined.
- (make_lispy_event): Add WHEEL_EVENT handler.
+ * term.c: Include unistd.h only if HAVE_UNISTD_H.
- * w32term.c (construct_mouse_wheel): Construct WHEEL_EVENT.
- (w32_read_socket): Map w32 WM_MOUSEWHEEL events to Emacs
- WHEEL_EVENT events.
+2007-07-11 Jason Rumney <jasonr@gnu.org>
-2003-05-31 John Paul Wallington <jpw@gnu.org>
+ * makefile.w32-in (LIBS): Include OLE32.
- * Makefile.in (lisp, shortlisp): byte-run, float-sup, map-ynp, and
- timer are in lisp/emacs-lisp.
+ * w32fns.c (w32_msg_pump) <WM_EMACS_CREATEWINDOW>: Initialize COM.
+ (w32_msg_pump) <WM_DESTROY>: Uninitialize COM.
-2003-05-31 Kenichi Handa <handa@m17n.org>
+2007-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
- * buffer.c (Fset_buffer_multibyte): Correctly recover a narrowed
- region when a buffer is changed to unibyte.
+ * lisp.h (struct Lisp_Hash_Table): Turn next_weak into a bare pointer.
+ * fns.c (weak_hash_tables): Rename from Vweak_hash_tables and turned
+ from a Lisp_Object into a bare pointer.
+ (make_hash_table, copy_hash_table, sweep_weak_hash_tables, init_fns):
+ Adjust the code correspondingly.
- * charset.h (VALID_LEADING_CODE_P): New macro.
- (UNIBYTE_STR_AS_MULTIBYTE_P): Check more rigidly.
+ * alloc.c (emacs_blocked_free): Remove unused var `bytes_used_now'.
- * coding.c (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
- is nonzero, accept multibyte form of eight-bit-control chars.
- (decode_composition_emacs_mule): Likewise.
- (decode_coding_emacs_mule): Likewise.
- (encode_coding_emacs_mule): If coding->flags is nonzero, produce
- multibyte form of eight-bit-control chars.
+ * term.c: Include unistd.h for ttyname, used in handle_one_term_event.
+ (term_show_mouse_face): Remove unused var `j'.
+ (handle_one_term_event): Remove unused vars `i' and `j'.
+ Don't cast return value of ttyname since it's not necessary.
- * fileio.c (Qauto_save_coding, auto_save_coding): New variables.
- (Finsert_file_contents): If coding-system-for-read is bound to
- Qauto_save_coding, use the coding system emacs-mule with special
- setting for recovering a file.
- (choose_write_coding_system): On auto saving, use the coding
- system emacs-mule with special setting for auto saving.
- (syms_of_fileio) <Qauto_save_coding>: Intern and staticpro it.
+2007-07-10 Stefan Monnier <monnier@iro.umontreal.ca>
-2003-05-30 Kenichi Handa <handa@m17n.org>
+ * alloc.c (mark_maybe_pointer): Enforce mult-of-8 alignment when using
+ USE_LSB_TAG. Suggested by Dmitry Antipov <dmantipov@yandex.ru>.
- * coding.c (ccl_coding_driver): Set ccl->eight_bit_control
- properly before calling ccl_driver.
+ * fns.c (map_char_table): Use an array of int for `indices' rather than
+ an array of Lisp_Objects (which are only ever integers anyway).
+ (Fmap_char_table): Update caller.
+ * lisp.h: Update prototype.
+ * keymap.c (Fset_keymap_parent, map_keymap, Fcopy_keymap):
+ * fontset.c (Ffontset_info):
+ * casetab.c (set_case_table): Update callers.
- * ccl.h (struct ccl_program) <eight_bit_control>: Comment fixed.
+ * editfns.c (Ftranspose_regions): Use EMACS_INT for positions.
- * ccl.c (CCL_WRITE_CHAR): Increment extra_bytes only when it is nonzero.
- (ccl_driver): Initialize extra_bytes to ccl->eight_bit_control.
- (setup_ccl_program): Initialize ccl->eight_bit_control to zero.
+ * keymap.c (struct accessible_keymaps_data)
+ (struct where_is_internal_data): New structures.
+ (accessible_keymaps_1, where_is_internal_1): Use them to change
+ interface to adhere to the one used by map_keymap.
+ (Faccessible_keymaps, where_is_internal): Use map_keymap.
+ (accessible_keymaps_char_table, where_is_internal_2): Remove.
-2003-05-29 Glenn Morris <gmorris@ast.cam.ac.uk>
+ * keymap.h (map_keymap_function_t): More informative prototype.
- * xfaces.c (realize_default_face): Do not abort if lface is
- non-existent - reverts change from 2003-05-19.
+2007-07-10 Guanpeng Xu <herberteuler@hotmail.com>
-2003-05-29 Kenichi Handa <handa@m17n.org>
+ * search.c (Vinhibit_changing_match_data, search_regs_1): New vars.
+ (looking_at_1): Don't change search_regs and last_thing_searched
+ if `inhibit-changing-match-data' is non-nil.
+ (string_match_1, search_buffer, set_search_regs): Likewise.
+ (syms_of_search): Add Lisp level definition for
+ `inhibit-changing-match-data' and set it to nil.
+ (boyer_moore): If `inhibit-changing-match-data' is non-nil, compute
+ start and end of the match, instead of using values in search_regs.
- * coding.c (decode_coding_iso2022): Pay attention to the byte
- sequence of CTEXT extended segment, and retain those bytes as is.
+2007-07-01 Stefan Monnier <monnier@iro.umontreal.ca>
-2003-05-28 Kenichi Handa <handa@m17n.org>
+ * minibuf.c (Fcompleting_read): New value `confirm-only'
+ for `require-match'.
- * coding.c (ENCODE_UNSAFE_CHARACTER): Adjust for the name change
- of CODING_REPLACEMENT_CHARACTER.
- (decode_coding_iso2022): If CODING_FLAG_ISO_SAFE, set
- CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag in coding->mode, and
- check this flag on encoding.
- (encode_coding_sjis_big5):
- Check CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag of coding->mode.
- (Fset_terminal_coding_system_internal):
- Set CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag in terminal_coding.mode
- instead of setting CODING_FLAG_ISO_SAFE flag in terminal_coding.flags.
+2007-06-28 Stefan Monnier <monnier@iro.umontreal.ca>
- * coding.h (CODING_REPLACEMENT_CHARACTER): Rename from
- CODING_INHIBIT_CHARACTER_SUBSTITUTION.
- (CODING_MODE_INHIBIT_UNENCODABLE_CHAR): New macro.
+ * fileio.c (Fdo_auto_save): Revert last patch installed unwillingly as
+ part of the 2007-06-27 change to syms_of_fileio.
-2003-05-28 Richard M. Stallman <rms@gnu.org>
+2007-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * print.c (syms_of_print) <print-escape-nonascii>: Doc fix.
+ * macterm.c [USE_MAC_TSM] (mac_handle_text_input_event):
+ Check WINDOWP before using XWINDOW. Consolidate return statements.
- * eval.c (unbind_to): Move init of this_binding to separate statement.
+2007-06-27 Richard Stallman <rms@gnu.org>
-2003-05-28 Kim F. Storm <storm@cua.dk>
+ * fileio.c (syms_of_fileio) <after-insert-file-functions>: Doc fix.
- * xdisp.c (expose_window): Fix error in calculation of
- window relative coordinates of area to redisplay.
+2007-06-27 Juanma Barranquero <lekktu@gmail.com>
-2003-05-27 Jason Rumney <jasonr@gnu.org>
+ * buffer.c (syms_of_buffer) <selective-display>: Fix typo in docstring.
- * w32term.c (GET_WHEEL_DELTA_WPARAM): New macro.
+2007-06-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2003-05-27 David Ponce <david@dponce.com>
+ * gmalloc.c [HAVE_GTK_AND_PTHREAD]: Check this after including config.h.
+ (_aligned_blocks_mutex) [USE_PTHREAD]: New variable.
+ (LOCK_ALIGNED_BLOCKS, UNLOCK_ALIGNED_BLOCKS): New macros.
+ (_free_internal, memalign): Use them.
+ (_malloc_mutex, _aligned_blocks_mutex) [USE_PTHREAD]:
+ Initialize to PTHREAD_MUTEX_INITIALIZER.
+ (malloc_initialize_1) [USE_PTHREAD]: Don't use recursive mutex.
+ (morecore_nolock): Rename from morecore. All uses changed.
+ Use only nolock versions of internal allocation functions.
+ (_malloc_internal_nolock, _realloc_internal_nolock)
+ (_free_internal_nolock): New functions created from
+ _malloc_internal, _realloc_internal, and _free_internal.
+ (_malloc_internal, _realloc_internal, _free_internal): Use them.
+ Copy hook value to automatic variable before its use.
+ (memalign): Copy hook value to automatic variable before its use.
- Handle W32 mouse wheel events as mouse click events, like in X.
+2007-06-26 Kenichi Handa <handa@m17n.org>
- * keyboard.c (make_lispy_event) [WINDOWSNT]: Don't handle
- MOUSE_WHEEL_EVENT anymore.
+ * coding.c (Ffind_operation_coding_system): Docstring improved.
+ (syms_of_coding): Docstring of `file-coding-system-alist' improved.
- * w32term.c (construct_mouse_wheel): Result is a MOUSE_CLICK_EVENT.
- Scrolling down/up the mouse wheel is respectively mapped to mouse
- button 4 and 5.
- (w32_read_socket): Map w32 WM_MOUSEWHEEL events to Emacs
- MOUSE_CLICK_EVENT events. Forward w32 MSH_MOUSEWHEEL events as
- WM_MOUSEWHEEL events.
+2007-06-25 David Kastrup <dak@gnu.org>
-2003-05-27 Andreas Schwab <schwab@suse.de>
+ * keymap.c (Fcurrent_active_maps): Add `position' argument.
+ (Fwhere_is_internal): Adjust call to `current-active-maps' to
+ cater for additional parameter.
- * buffer.c (syms_of_buffer) <default-direction-reversed>: Doc fix.
+ * keymap.h: Adjust number of parameters to `current-active-maps'.
- * xdisp.c (try_window_id): Avoid aborting if PT is inside a
- partially visible line.
+ * doc.c (Fsubstitute_command_keys): Adjust call of
+ `current-active-maps'.
- * alloc.c (Fgarbage_collect): Fix last change.
+2007-06-25 David Kastrup <dak@gnu.org>
-2003-05-26 John Paul Wallington <jpw@gnu.org>
+ * callint.c (Fcall_interactively): Make the parsing of interactive
+ specs somewhat more readable.
- * xfns.c (Fx_create_frame): Don't call Qface_set_after_frame_default.
+2007-06-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2003-05-25 Stefan Monnier <monnier@cs.yale.edu>
+ * macterm.c (x_draw_fringe_bitmap) [MAC_OSX]: Extend fringe background
+ to scroll bar gap also when bitmap fills fringe. Draw only foreground
+ if extended background has already been filled.
- * window.c (Fset_window_buffer): Add type of `keep_margins'.
- (Fset_window_fringes, Fset_window_scroll_bars): Declare before use.
+2007-06-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * window.h (window_box_text_cols): Declare.
+ * macgui.h (USE_CG_DRAWING): Don't require USE_ATSUI.
+ (USE_MAC_TOOLBAR): Require USE_CG_DRAWING.
- * xdisp.c (window_text_bottom_y, draw_row_fringe_bitmaps)
- (x_draw_vertical_border): Remove unused var `f'.
+ * macmenu.c (mac_dialog_modal_filter, Fx_popup_dialog) [MAC_OSX]:
+ Put special treatment for Fmessage_box, Fyes_or_no_p, and Fy_or_n_p
+ in #if 0 as it is not compatible with y-or-n-p-with-timeout.
+ (timer_check) [TARGET_API_MAC_CARBON]: Add extern.
+ [TARGET_API_MAC_CARBON] (mac_handle_dialog_event): Use QuitEventLoop
+ instead of QuitAppModalLoopForWindow. Consolidate QuitEventLoop calls.
+ (pop_down_dialog) [TARGET_API_MAC_CARBON]: New function.
+ [TARGET_API_MAC_CARBON] (create_and_show_dialog): Use it for unwind.
+ Run timers during dialog popup.
+ (Fmenu_or_popup_active_p) [TARGET_API_MAC_CARBON]: Use popup_activated.
- * xfaces.c (build_scalable_font_name): Remove `unused var
- pixel_size' warning.
+2007-06-21 Jason Rumney <jasonr@gnu.org>
- * xfns.c (png_load): Remove `unused vars intent, image_gamma' warning.
+ * image.c (convert_mono_to_color_image): Swap fore and background.
- * unexelf.c (unexec): Remove `unused var n' warning.
+2007-06-20 Jason Rumney <jasonr@gnu.org>
- * strftime.c (my_strftime_localtime_r): Remove `defined but
- unused' warning.
+ * w32bdf.c (w32_BDF_to_x_font): Unmap memory when finished.
+ (w32_free_bdf_font): Unmap memory not handle.
- * process.c (allocate_pty): Remove `unused var stb' and
- `cp might be used uninitialized' warnings.
+2007-06-20 Sam Steingold <sds@gnu.org>
- * dispnew.c (mode_line_string): Remove unused var `f'.
+ * gmalloc.c (__morecore): Fix the declaration to comply with the
+ definition.
- * coding.c (find_safe_codings): Remove unused var `i'.
+2007-06-20 Juanma Barranquero <lekktu@gmail.com>
- * bytecode.c (Fbyte_code): Remove `unused val' warning.
+ * w32term.c (w32_delete_display): Remove leftover declaration.
+ (w32_define_cursor, w32_initialize): Make static.
- * buffer.c (Fkill_buffer): Remove unused var `list'.
+ * w32.c (_wsa_errlist): Fix typo in error message.
+ (init_environment): Ignore any environment variable from the
+ registry having a null value.
- * alloc.c (Fgarbage_collect): Remove `unused var tail' warning.
+2007-06-20 Glenn Morris <rgm@gnu.org>
-2003-05-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+ * Makefile.in (LIBGIF): Default to -lgif.
- * frame.c (make_frame): Condition want_fullscreen with
- HAVE_WINDOW_SYSTEM.
+2007-06-17 Jason Rumney <jasonr@gnu.org>
-2003-05-25 Juanma Barranquero <lektu@terra.es>
-
- * window.c (Fset_window_scroll_bars): Fix typo in argument name.
- (Fwindow_scroll_bars): Fix typo in docstring.
-
-2003-05-24 Kim F. Storm <storm@cua.dk>
-
- The following changes serve several purposes:
-
- 1) Swap the position of fringes and display margins in windows, i.e.
- the fringes are now displayed between the margins and the text area
- (by default).
-
- 2) Allow fringe and scroll bar parameters to be set per-buffer and
- per-window (like display margins). Such settings are now stored
- in window configurations, preserved when frames are resized, and
- copied when windows are split vertically or horizontally.
- Several bugs related to display margins have been fixed.
-
- 3) Consistently use FRAME_FONT and FRAME_FONTSET macros.
-
- 4) Use FRAME_COLUMN_WIDTH (f) consistently throughout the code
- rather than FRAME_WIDTH (FRAME_FONT (f)).
-
- 5) Introduce a consistent naming of variables, members and macros
- depending on whether their value is measured in pixels or in
- canonical columns/lines. Pixel dimensions are named *_width and
- *_height, while canonical columns/lines are named *_cols and
- *_lines. Pixel positions are named *_x and *_y, while column/line
- positions are named *_col and *_line.
-
- 6) Consolidate more of the X, W32, and MAC gui code by moving
- common data into struct frame, and generalize it for the non-gui
- case by using suitable defaults.
-
- 7) Cleanup and consolidate the macros controlling frame and window
- layout into frame.h and window.h, and generalize the use of the
- various window_box_* functions (enhanced to handle the new fringe
- position and the per-window fringe and scroll bar settings).
-
- * frame.h (struct frame): Rename members height to text_lines,
- width to text_cols, window_height to total_lines, window_width to
- total_cols, new_height to new_text_lines, new_width to
- new_text_cols. All uses changed.
- (struct frame): New members which consolidate common members of
- x_output, w32_output, and mac_output structures: left_pos,
- top_pos, pixel_height, pixel_width, x_pixels_diff, y_pixels_diff,
- win_gravity, size_hint_flags, border_width, internal_border_width,
- line_height, fringe_cols, left_fringe_width, right_fringe_width,
- want_fullscreen. All uses changed.
- (struct frame): New member column_width contaning the canonical
- column width, analogue to line_height. All uses changed.
- (struct frame): Rename members scroll_bar_pixel_width to
- config_scroll_bar_width, and scroll_bar_cols to
- config_scroll_bar_cols. All uses changed.
- (struct frame): New member scroll_bar_actual_width which
- consolidates and renames the vertical_scroll_bar_extra member of
- x_output, w32_output, and mac_output structures. All uses changed.
- (FRAME_PIXEL_HEIGHT): Rename from PIXEL_HEIGHT and moved
- from x/w32/macterm.h files. All uses changed. Also change code
- which referred to f->output_data...->pixel_height.
- (FRAME_PIXEL_WIDTH): Rename from PIXEL_WIDTH and moved
- from x/w32/macterm.h files. All uses changed. Also change code
- which referred to f->output_data...->pixel_width.
- (FRAME_LINES): Rename from FRAME_HEIGHT. All uses changed.
- Also change code which referred to f->height.
- (FRAME_COLS): Rename from FRAME_WIDTH. All uses changed.
- Also change code which referred to f->width.
- (FRAME_NEW_HEIGHT, FRAME_NEW_WIDTH): Remove macros; change uses
- to update new_text_lines and new_text_cols members directly.
- (FRAME_CONFIG_SCROLL_BAR_WIDTH): Rename from
- FRAME_SCROLL_BAR_PIXEL_WIDTH. All uses changed.
- (FRAME_CONFIG_SCROLL_BAR_COLS): Rename from
- FRAME_SCROLL_BAR_COLS. All uses changed.
- (FRAME_LEFT_SCROLL_BAR_COLS, FRAME_RIGHT_SCROLL_BAR_COLS):
- Rename from FRAME_LEFT_SCROLL_BAR_WIDTH and
- FRAME_RIGHT_SCROLL_BAR_WIDTH, resp. All uses changed.
- (FRAME_SCROLL_BAR_AREA_WIDTH, FRAME_LEFT_SCROLL_BAR_AREA_WIDTH)
- (FRAME_RIGHT_SCROLL_BAR_AREA_WIDTH): New macros.
- (FRAME_TOTAL_COLS): Rename from FRAME_WINDOW_WIDTH.
- (SET_FRAME_COLS): Rename from SET_FRAME_WIDTH.
- (FRAME_TOTAL_COLS_ARG): Rename from FRAME_WINDOW_WIDTH_ARG.
- (WINDOW_VERTICAL_SCROLL_BAR_COLUMN): Remove unused macro.
- (WINDOW_VERTICAL_SCROLL_BAR_HEIGHT): Remove unused macro.
- (FRAME_LINE_HEIGHT): Rename from CANON_Y_UNIT.
- Unconditionally return line_height member (it now has proper value
- also for non-window frames).
- (FRAME_COLUMN_WIDTH): Rename from CANON_X_UNIT. Unconditionally
- return new column_width member (rather than the default font width).
- (FRAME_FRINGE_COLS, FRAME_LEFT_FRINGE_WIDTH)
- (FRAME_RIGHT_FRINGE_WIDTH): Rename from FRAME_X_... and moved
- from x/w32/macterm.h files. Unconditionally return corresponding
- member of frame structure (they now have proper values also for
- non-window frames).
- (FRAME_TOTAL_FRINGE_WIDTH): Rename from FRAME_FRINGE_WIDTH.
- Calculate return value from left and right widths.
- (FRAME_INTERNAL_BORDER_WIDTH): Unconditionally return
- internal_border_width member (has proper value for non-window frame).
- (FRAME_PIXEL_X_FROM_CANON_X): Rename from PIXEL_X_FROM_CANON_X.
- (FRAME_PIXEL_Y_FROM_CANON_Y): Rename from PIXEL_Y_FROM_CANON_Y.
- (FRAME_CANON_X_FROM_PIXEL_X): Rename from CANON_X_FROM_PIXEL_X.
- (FRAME_CANON_Y_FROM_PIXEL_Y): Rename from CANON_Y_FROM_PIXEL_Y.
- (FRAME_LINE_TO_PIXEL_Y): Rename from CHAR_TO_PIXEL_ROW,
- consolidated from xterm.h, macterm.h, and w32term.h.
- (FRAME_COL_TO_PIXEL_X): Rename from CHAR_TO_PIXEL_COL,
- consolidated from xterm.h, macterm.h, and w32term.h.
- (FRAME_TEXT_COLS_TO_PIXEL_WIDTH): Rename from
- CHAR_TO_PIXEL_WIDTH consolidated from x/mac/w32term.h.
- (FRAME_TEXT_LINES_TO_PIXEL_HEIGHT): Rename from
- CHAR_TO_PIXEL_HEIGHT consolidated from x/mac/w32term.h.
- (FRAME_PIXEL_Y_TO_LINE): Rename from PIXEL_TO_CHAR_ROW
- consolidated from x/mac/w32term.h.
- (FRAME_PIXEL_X_TO_COL): Rename from PIXEL_TO_CHAR_COL
- consolidated from x/mac/w32term.h.
- (FRAME_PIXEL_WIDTH_TO_TEXT_COLS): Rename from
- PIXEL_TO_CHAR_WIDTH consolidated from x/mac/w32term.h.
- (FRAME_PIXEL_HEIGHT_TO_TEXT_LINES): Rename from
- PIXEL_TO_CHAR_HEIGHT consolidated from x/mac/w32term.h.
-
- * window.h (struct window): Rename members left to left_col,
- top to top_line, height to total_lines, width to total_cols,
- left_margin_width to left_margin_cols, right_margin_width to
- right_margin_cols, orig_height to orig_total_lines, orig_top to
- orig_top_line. All uses changed.
- (struct window): New members left_fringe_width, right_fringe_width,
- fringes_outside_margins, scroll_bar_width, vertical_scroll_bar_type.
- (WINDOW_XFRAME, WINDOW_FRAME_COLUMN_WIDTH, WINDOW_FRAME_LINE_HEIGHT):
- New macros primarily used to simplify other macros.
- (WINDOW_TOTAL_COLS): New macro. Change relevant code that
- referred to XINT (w->width).
- (WINDOW_TOTAL_LINES): New macro. Change relevant code that
- referred to XINT (w->height).
- (WINDOW_TOTAL_WIDTH): New macro. Change relevant code that
- referred to XINT (w->width) * canon_x_unit.
- (WINDOW_TOTAL_HEIGHT): New macro. Change relevant code that
- referred to XINT (w->height) * canon_y_unit.
- (WINDOW_LEFT_EDGE_COL): New macro. Change relevant code that
- referred to XINT (w->left).
- (WINDOW_RIGHT_EDGE_COL): Rename from WINDOW_RIGHT_EDGE. Change
- all uses and code that referred to XINT (w->left) + XINT (w->width).
- (WINDOW_TOP_EDGE_LINE): New macro. Change relevant code that
- referred to XINT (w->top).
- (WINDOW_BOTTOM_EDGE_LINE): New macro. Change relevant code that
- referred to XINT (w->top) + XINT (w->height).
- (WINDOW_LEFT_EDGE_X): New macro. Change relevant code that
- referred to XINT (w->left) * canon_x_unit.
- (WINDOW_RIGHT_EDGE_X): New macro. Change relevant code that
- referred to (XINT (w->left) + XINT (w->width)) * canon_x_unit.
- (WINDOW_TOP_EDGE_Y): New macro. Change relevant code that
- referred to XINT (w->top) * canon_y_unit.
- (WINDOW_BOTTOM_EDGE_Y): New macro. Change relevant code that
- referred to (XINT (w->top) + XINT (w->height)) * canon_y_unit.
- (WINDOW_LEFTMOST_P): New macro.
- (WINDOW_BOX_LEFT_EDGE_COL): Rename from WINDOW_LEFT_MARGIN.
- All uses changed.
- (WINDOW_BOX_RIGHT_EDGE_COL): Rename from WINDOW_RIGHT_MARGIN.
- All uses changed.
- (WINDOW_BOX_LEFT_EDGE_X): Rename from
- WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X, moved from dispextern.h.
- Do not exclude left fringe width.
- (WINDOW_BOX_RIGHT_EDGE_X): Rename from
- WINDOW_DISPLAY_RIGHT_EDGE_PIXEL_X, moved from dispextern.h.
- Do not exclude fringe widths.
- (WINDOW_LEFT_FRINGE_WIDTH, WINDOW_RIGHT_FRINGE_WIDTH)
- (WINDOW_FRINGE_COLS, WINDOW_TOTAL_FRINGE_WIDTH): New macros.
- Change relevant code that referred to FRAME_LEFT_FRINGE_WIDTH,
- FRAME_RIGHT_FRINGE_WIDTH, FRAME_FRINGE_COLS, and
- FRAME_TOTAL_FRINGE_WIDTH to allow per-window fringe settings.
- (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS): New macro.
- (WINDOW_VERTICAL_SCROLL_BAR_TYPE, WINDOW_HAS_VERTICAL_SCROLL_BAR)
- (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT)
- (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT)
- (WINDOW_CONFIG_SCROLL_BAR_WIDTH, WINDOW_CONFIG_SCROLL_BAR_COLS):
- New macros. Change code which referenced corresponding
- FRAME_VERTICAL_SCROLL_BAR_TYPE, FRAME_HAS_VERTICAL_SCROLL_BARS,
- FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT,
- FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT,
- FRAME_SCROLL_BAR_PIXEL_WIDTH, and FRAME_SCROLL_BAR_COLS macros to
- allow per-window scroll-bar settings.
- (WINDOW_LEFT_SCROLL_BAR_COLS, WINDOW_RIGHT_SCROLL_BAR_COLS): New macros.
- (WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH): New macro. Change code that
- referred to FRAME_LEFT_SCROLL_BAR_WIDTH.
- (WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH): New macro. Change code
- that referred to FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT and
- FRAME_SCROLL_BAR_WIDTH.
- (WINDOW_SCROLL_BAR_COLS, WINDOW_SCROLL_BAR_AREA_WIDTH)
- (WINDOW_SCROLL_BAR_AREA_X): New macros.
- (WINDOW_HEADER_LINE_HEIGHT): Rename from
- WINDOW_DISPLAY_HEADER_LINE_HEIGHT, moved from dispextern.h.
- (WINDOW_BOX_HEIGHT_NO_MODE_LINE): Rename from
- WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE, moved from dispextern.h.
- (WINDOW_BOX_TEXT_HEIGHT): Rename from
- WINDOW_DISPLAY_PIXEL_WIDTH, moved from dispextern.h.
- (WINDOW_TO_FRAME_PIXEL_X, WINDOW_TO_FRAME_PIXEL_Y)
- (FRAME_TO_WINDOW_PIXEL_X, FRAME_TO_WINDOW_PIXEL_Y)
- (WINDOW_TEXT_TO_FRAME_PIXEL_X): Move here from dispextern.h.
- (WINDOW_LEFT_MARGIN_WIDTH): Rename from
- WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH, moved from dispextern.h.
- (WINDOW_RIGHT_MARGIN_WIDTH): Rename from
- WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH, moved from dispextern.h.
- (window_from_coordinates): Update prototype.
- (Fset_window_buffer): Update EXFUN.
- (set_window_buffer): Update prototype.
-
- * dispextern.h (struct glyph_matrix): Rename members window_left_x
- to window_left_col, window_top_y to window_top_line. All uses
- changed.
- (FRAME_INTERNAL_BORDER_WIDTH_SAFE): Remove macro; can now safely
- use FRAME_INTERNAL_BORDER_WIDTH macro instead as
- internal_border_width is now set to 0 for non-window frames.
- (WINDOW_DISPLAY_PIXEL_WIDTH, WINDOW_DISPLAY_PIXEL_HEIGHT)
- (WINDOW_DISPLAY_MODE_LINE_HEIGHT, WINDOW_DISPLAY_HEADER_LINE_HEIGHT)
- (WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE, WINDOW_DISPLAY_TEXT_HEIGHT)
- (WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X, WINDOW_DISPLAY_RIGHT_EDGE_PIXEL_X)
- (WINDOW_DISPLAY_TOP_EDGE_PIXEL_Y, WINDOW_DISPLAY_BOTTOM_EDGE_PIXEL_Y)
- (WINDOW_TO_FRAME_PIXEL_X, WINDOW_TO_FRAME_PIXEL_Y)
- (FRAME_TO_WINDOW_PIXEL_X, FRAME_TO_WINDOW_PIXEL_Y)
- (WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH)
- (WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH, WINDOW_WANTS_MODELINE_P):
- Move to window.h and renamed [see window.h changes].
- (WINDOW_AREA_TO_FRAME_PIXEL_X, WINDOW_AREA_PIXEL_WIDTH)
- (WINDOW_DISPLAY_TEXT_AREA_PIXEL_WIDTH): Remove macros.
- (WINDOW_WANTS_MODELINE_P, WINDOW_WANTS_HEADER_LINE_P):
- Use WINDOW_TOTAL_LINES.
- (frame_update_line_height): Remove prototype.
-
- * buffer.h (struct buffer): Rename members measured in columns:
- left_margin_width to left_margin_cols, right_margin_width to
- right_margin_cols. All uses changed.
- New members left_fringe_width, right_fringe_width,
- fringes_outside_margins for per-buffer fringe settings.
- New members scroll_bar_width and vertical_scroll_bar_type for
- per-buffer scroll bar settings.
-
- * buffer.c (init_buffer_once): Set buffer_defaults and
- buffer_local_flags for new buffer-local variables
- left_fringe_width, right_fringe_width, fringes_outside_margins,
- scroll_bar_width, and vertical_scroll_bar_type.
- (syms_of_buffer): Defvar_per_buffer them, and defvar_lisp_nopro
- default-* variables for them.
-
- * dispnew.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (mode_line_string): No need to adjust width for mode lines, as it
- is already adjusted by the caller.
- (marginal_area_string): Handle fringes inside/outside margins.
-
- * frame.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (make_frame): Initialize left_fringe_width, right_fringe_width,
- fringe_cols, scroll_bar_actual_width, border_width,
- internal_border_width, column_width, line_height, x_pixels_diff,
- y_pixels_diff, want_fullscreen, size_hint_flags, and win_gravity
- members with values suitable for a non-window frames.
-
- * gtkutil.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * indent.c: Make (few) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * keyboard.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (make_lispy_event): Use window positions returned from
- window_from_coordinates when constructing the lisp event for
- MOUSE_CLICK_EVENT and DRAG_N_DROP_EVENT, rather than calculating
- (incorrect) values locally.
- (make_lispy_movement): Use window positions returned from
- window_from_coordinates when constructing the lisp event, rather
- than calculating (incorrect) values locally.
-
- * scroll.c: Make (some) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * sunfns.c (Fsun_menu_internal): Adapt to per-window fringes and
- scroll-bars.
-
- * sysdep.c: Make (few) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * term.c: Make (some) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * widget.c: Make (few) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * window.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (make_window): Initialize new members
- left_margin_cols, right_margin_cols, left_fringe_width,
- right_fringe_width, fringes_outside_margins, scroll_bar_width,
- and vertical_scroll_bar_type.
- (coordinates_in_window): Adapt to new fringe/margin positions
- and per-window fringes and scroll-bars.
- Fix bug related to incorrectly adjusting coordinates by
- frame's internal_border_width (the effect normally negible since
- the internal_border_width is typically 0 or 1 pixel, but very
- noticeable for an internal_border_width of e.g. 25 pixels).
- Upon successful return (other than ON_NOTHING), the coordinates
- are now always properly converted to window relative for the
- given display element.
- (window_from_coordinates): Add new parameters wx and wy to
- return the window relative x and y position in the returned
- window and part. A null arg means, don't return the position.
- All callers changed.
- (adjust_window_margins): New function which may reduce the width
- of the display margins if a window's text area is too small after
- resizing or splitting windows.
- (size_window): Fix bug that did not account for display margin
- widths when checking the minimum width of a window; use
- adjust_window_margins.
- (set_window_buffer): Call Fset_window_fringes and
- Fset_window_scroll_bars to setup per-window elements.
- Add new arg KEEP_MARGINS_P. Non-nil means to keep window's
- existing display margin, fringe widths, and scroll bar settings
- (e.g. after splitting a window or resizing the frame).
- All callers changed.
- (Fset_window_buffer): New arg KEEP_MARGINS. All callers changed.
- (Fsplit_window): Duplicate original window's display margin,
- fringe, and scroll-bar settings; then call Fset_window_buffer with
- KEEP_MARGINS non-nil. This fixes a bug which caused a split
- window to only preserve the display margins in one of the windows.
- When splitting horizontally, call adjust_window_margins on both
- windows to ensure that the text area of the new windows is non too
- narrow. This fixes a bug which could cause Emacs to trap if the
- width of the split window was less than the width of the display
- margins.
- (window_box_text_cols): Rename from window_internal_width.
- All uses changed. Adapt to per-window fringes and scroll bars.
- Fix bug that caused vertical separator to be subtracted also on
- window frames. Fix another bug that did not reduce the returned
- value by the columns used for display margins.
- (window_scroll_line_based): Fix bug related to scrolling too much
- when display margins are present (implicitly fixed by the fix to
- window_box_text_cols).
- (scroll_left, scroll_right): Fix bug related to scrolling too far
- by default when display margins are present (implicitly fixed by
- the fix to window_box_text_cols).
- (struct saved_window): Rename members left to left_col, top to
- top_line, width to total_cols, height to total_lines, orig_top to
- orig_top_line, orig_height to orig_total_lines. All uses changed.
- New members left_margin_cols, right_margin_cols,
- left_fringe_width, right_fringe_width, fringes_outside_margins,
- scroll_bar_width, and vertical_scroll_bar_type for saving
- per-window display elements.
- (Fset_window_configuration): Restore display margins, fringes,
- and scroll bar settings. This fixes a bug which caused display
- margins to be discarded when saving and restoring a window
- configuration.
- (save_window_save): Save display margins, fringes, and scroll bar
- settings. This fixes a bug which caused display margins to be
- discarded when saving and restoring a window configuration.
- (Fset_window_margins): Do nothing if display margins are not
- really changed. Otherwise, call adjust_window_margins to ensure
- the text area doesn't get too narrow. This fixes a bug which
- could cause Emacs to trap if setting display margins wider than
- the width of the window.
- (Fset_window_fringes): New defun to allow user to specifically set
- this window's fringe widths and position vs. display margins.
- (Fwindow_fringes): New defun to return window's actual fringe settings.
- (Fset_window_scroll_bars): New defun to allow user to specifically
- set this window's scroll bar width and position.
- (Fwindow_scroll_bars): New defun to return window's actual scroll
- bar settings.
- (compare_window_configurations): Also compare display margins,
- fringes, and scroll bar settings.
- (syms_of_window): Defsubr new defuns for fringe and scroll bars.
-
- * xdisp.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (window_box_width): Adapt to per-window fringes and scroll bars,
- and new fringe vs. display margin position. Note that returned
- value is no longer guaranteed to be a whole multiple of the frame
- column width, since per-window fringes may now be any width.
- (window_box_left_offset): New function like window_box_left, but
- value is relative to left border of window (rather than frame).
- (window_box_right_offset): New function like window_box_right,
- but value is relative to left border of window.
- (window_box_left): Adapt to per-window fringes and scroll bars,
- and new fringe vs. display margin position. Simplify by using
- WINDOW_LEFT_EDGE_X and window_box_left_offset.
- (window_box): Allow null args for unnecessary return values;
- change/simplify relevant callers.
- (x_y_to_hpos_vpos): Adapt to per-window fringes and scroll bars,
- and new fringe vs. display margin position.
- Use window_box_left_offset and window_box_right_offset
- (get_glyph_string_clip_rect): Adapt to per-window fringes and
- scroll bars, and new fringe vs. display margin position.
- Use WINDOW_LEFT_EDGE_X and WINDOW_TOTAL_WIDTH.
- (draw_fringe_bitmap): Rework to handle per-window fringes and new
- fringe vs. display margin position.
- (hscroll_window_tree): Use window_box_width instead of window_box.
- (redisplay_window): Adapt to per-window scroll bars.
- (draw_glyphs): Rework to handle per-window fringes and scroll
- bars, and new fringe vs. display margin position.
- Use WINDOW_LEFT_EDGE_X, WINDOW_TOTAL_WIDTH, and window_box_left.
- (x_clear_end_of_line): Adapt to per-window fringes and scroll
- bars, and new fringe vs. display margin position. Fix bug which
- increased total width of full_width rows by width of scroll bars
- although window's total width already includes that.
- (x_fix_overlapping_area): Simplify using window_box_left_offset.
- (expose_area): Simplify using window_box_left_offset.
- (x_draw_vertical_border): Handle per-window scroll bar settings,
- mixing windows with left, right and no scroll bars.
-
- * xfaces.c [WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
- where it's used in x_list_fonts (for clarity).
- (frame_update_line_height): Remove unused function; functionality
- is now done directly when setting the default font in x_set_font.
-
- * xfns.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * xmenu.c: Make (some) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * xterm.h (struct x_output): Move members left_pos, top_pos,
- border_width, pixel_height, pixel_width, line_height,
- internal_border_width, vertical_scroll_bar_extra,
- left_fringe_width, right_fringe_width, fringe_cols,
- fringes_extra, win_gravity, size_hint_flags, want_fullscreen,
- x_pixels_diff, and y_pixels_diff to struct frame (frame.h).
- (FRAME_INTERNAL_BORDER_WIDTH, FRAME_LINE_HEIGHT): Move to frame.h.
- (FRAME_DEFAULT_FONT_WIDTH): Remove macro.
- (PIXEL_WIDTH, PIXEL_HEIGHT)
- (FRAME_X_FRINGE_COLS, FRAME_X_FRINGE_WIDTH)
- (FRAME_X_LEFT_FRINGE_WIDTH, FRAME_X_RIGHT_FRINGE_WIDTH): Move to
- frame.h and renamed [see frame.h changes].
- (CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, CHAR_TO_PIXEL_WIDTH)
- (CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_ROW, PIXEL_TO_CHAR_COL)
- (PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Move to frame.h
- and renamed [see frame.h changes].
-
- * xterm.c: Make (several) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (x_draw_glyph_string_box): Adapt to per-window fringes and scroll-bars.
- (scroll_run): Adapt to new fringe position.
- (glyph_rect): Use window coordinates returned from
- window_from_coordinates rather than frame_to_window_pixel_xy.
- (XTset_vertical_scroll_bar): Adapt to per-window fringes and
- scroll-bars.
- (handle_one_xevent): Simplify a USE_GTK conditional.
- (x_clip_to_row): Remove superfluous whole_line_p arg and code
- (fringes are now inside margins, i.e. always in the clipping area).
- All callers changed.
- (x_new_font): Set FRAME_COLUMN_WIDTH and FRAME_LINE_HEIGHT
- directly, then call compute_fringe_widths. Don't call
- frame_update_line_height.
-
- * w32term.h (struct w32_output): Move members left_pos, top_pos,
- border_width, pixel_height, pixel_width, line_height,
- internal_border_width, vertical_scroll_bar_extra,
- left_fringe_width, right_fringe_width, fringe_cols,
- fringes_extra, win_gravity, size_hint_flags, want_fullscreen,
- x_pixels_diff, and y_pixels_diff to struct frame (frame.h).
- (FRAME_INTERNAL_BORDER_WIDTH, FRAME_LINE_HEIGHT): Move to frame.h.
- (FRAME_DEFAULT_FONT_WIDTH): Remove macro.
- (PIXEL_WIDTH, PIXEL_HEIGHT)
- (FRAME_X_FRINGE_COLS, FRAME_X_FRINGE_WIDTH)
- (FRAME_X_LEFT_FRINGE_WIDTH, FRAME_X_RIGHT_FRINGE_WIDTH): Move to
- frame.h and renamed [see frame.h changes].
- (CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, CHAR_TO_PIXEL_WIDTH)
- (CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_ROW, PIXEL_TO_CHAR_COL)
- (PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Move to frame.h
- and renamed [see frame.h changes].
-
- * w32term.c: Make (several) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (x_draw_glyph_string_box): Adapt to per-window fringes and scroll-bars.
- (glyph_rect): Use window coordinates returned from
- window_from_coordinates rather than frame_to_window_pixel_xy.
- (XTset_vertical_scroll_bar): Adapt to per-window fringes and
- scroll-bars.
- (w32_clip_to_row): Remove superfluous whole_line_p arg and code
- (fringes are now inside margins, i.e. always in the clipping area).
- All callers changed.
- (x_new_font): Set FRAME_COLUMN_WIDTH and FRAME_LINE_HEIGHT
- directly, then call compute_fringe_widths. Don't call
- frame_update_line_height.
-
- * w32console.c: Make (few) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * w32fns.c: Make (many) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * w32menu.c: Make (few) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * macterm.h (struct mac_output): Move members left_pos, top_pos,
- border_width, pixel_height, pixel_width, line_height,
- internal_border_width, vertical_scroll_bar_extra,
- left_fringe_width, right_fringe_width, fringe_cols,
- fringes_extra, win_gravity, size_hint_flags, want_fullscreen,
- x_pixels_diff, y_pixels_diff to struct frame (frame.h).
- (FRAME_INTERNAL_BORDER_WIDTH, FRAME_LINE_HEIGHT): Move to frame.h.
- (FRAME_DEFAULT_FONT_WIDTH): Remove macro.
- (PIXEL_WIDTH, PIXEL_HEIGHT)
- (FRAME_X_FRINGE_COLS, FRAME_X_FRINGE_WIDTH)
- (FRAME_X_LEFT_FRINGE_WIDTH, FRAME_X_RIGHT_FRINGE_WIDTH): Move to
- frame.h and renamed [see frame.h changes].
- (CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, CHAR_TO_PIXEL_WIDTH)
- (CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_ROW, PIXEL_TO_CHAR_COL)
- (PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Move to frame.h
- and renamed [see frame.h changes].
-
- * macterm.c: Make (several) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (x_draw_glyph_string_box): Adapt to per-window fringes and scroll-bars.
- (glyph_rect): Use window coordinates returned from
- window_from_coordinates rather than frame_to_window_pixel_xy.
- (XTset_vertical_scroll_bar): Adapt to per-window fringes and
- scroll-bars.
- (x_clip_to_row): Remove superfluous whole_line_p arg and code
- (fringes are now inside margins, i.e. always in the clipping area).
- All callers changed.
- (x_new_font): Set FRAME_COLUMN_WIDTH and FRAME_LINE_HEIGHT
- directly, then call compute_fringe_widths. Don't call
- frame_update_line_height.
-
- * macfns.c: Make (several) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (x_real_positions): Set f->x_pixels_diff and f->y_pixels_diff to 0.
-
- * macmenu.c: Make (few) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
-
- * msdos.h (struct x_output): Remove members left_pos, top_pos,
- and line_height, and use corresponding new members in struct
- frame. All uses changed.
- (FRAME_LINE_HEIGHT, FRAME_INTERNAL_BORDER_WIDTH): Remove macros;
- superseeded by corresponding macros in frame.h.
-
- * msdos.c: Make (several) trivial substitutions for renamed and
- new macros in dispextern.h, frame.h and window.h.
- (IT_note_mouse_highlight): Use updated window coordinates returned
- by window_from_coordinates, rather than adjusting them locally.
- (internal_terminal_init): No need to initialize line_height here;
- it now defaults to 1.
+ * w32menu.c (add_menu_item): Don't use multibyte string functions on
+ unicode strings.
-2003-05-24 Stefan Monnier <monnier@cs.yale.edu>
+2007-06-16 Juanma Barranquero <lekktu@gmail.com>
- * keyboard.c (read_key_sequence): Adjust fkey and keytran when
- dropping `down' events.
+ * xdisp.c (syms_of_xdisp) <auto-resize-tool-bars>:
+ Fix typo in docstring.
-2003-05-24 Andreas Schwab <schwab@suse.de>
+2007-06-16 Eli Zaretskii <eliz@gnu.org>
- * coding.c (find_safe_codings): Fix last change.
+ * w32menu.c (add_menu_item): Escape `&' characters in menu items
+ and their keybindings.
-2003-05-24 Istvan Marko <mi@imarko.dhs.org> (tiny change)
+2007-06-15 Chong Yidong <cyd@stupidchicken.com>
- * xfns.c (x_window): Fix typo from 2003-05-21 change.
+ * composite.c (update_compositions): Fix last fix.
-2003-05-23 Stefan Monnier <monnier@cs.yale.edu>
+2007-06-14 Jason Rumney <jasonr@gnu.org>
- * xdisp.c (display_mode_element): Increase max depth.
- Simplify the error handling code. Use a different error string
- for the case where we hit the depth limit.
+ * w32.c (get_process_times_fn): New function pointer.
+ (globals_of_w32): Intialize it if present in kernel32.dll.
+ (w32_get_internal_run_time): New function.
- * lisp.h (Vfundamental_mode_abbrev_table): Don't declare.
+ * editfns.c (Fget_internal_run_time) [WINDOWSNT]: Use it.
- * buffer.c (reset_buffer_local_variables): Remove redundant setting.
+2007-06-14 Kenichi Handa <handa@etlken.m17n.org>
-2003-05-21 Stefan Monnier <monnier@cs.yale.edu>
+ * composite.c (update_compositions): Check the validness of
+ compositions.
- * intervals.c (get_local_map): Don't get char-property of previous
- point any more: get_pos_property already does it and better.
+2007-06-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2003-05-21 Dave Love <fx@gnu.org>
+ * frame.h (struct frame) [MAC_OS]: New member external_tool_bar.
+ (FRAME_EXTERNAL_TOOL_BAR) [MAC_OS]: Use it.
- [Merged from unicode branch.]
+ * macfns.c (mac_window) [USE_MAC_TOOLBAR]: Set toolbar_win_gravity.
+ (x_set_tool_bar_lines) [USE_MAC_TOOLBAR]: Set FRAME_EXTERNAL_TOOL_BAR.
- * xfns.c (x_window, x_window): Use use_xim.
+ * macgui.h (USE_MAC_TOOLBAR): New define.
- * xterm.c (use_xim): Initialize.
- (xim_open_dpy, xim_initialize, xim_close_dpy): Use use_xim.
- (x_term_init): Maybe set use_xim.
+ * macmenu.c [TARGET_API_MAC_CARBON] (menu_target_item_handler):
+ Return immediately unless popup is activated.
- * xterm.h (use_xim) [HAVE_X_I18N]: Declare.
+ * macterm.c (x_draw_fringe_bitmap) [MAC_OSX]: Extend fringe
+ background to scroll bar gap.
+ (x_scroll_bar_create) [MAC_OSX]: Set bar->fringe_extended_p.
+ (XTset_vertical_scroll_bar) [MAC_OSX]: Put leftmost/rightmost
+ scroll bars on frame edge. Check fringe background extension.
+ Don't clear extended fringe background area.
+ (TOOLBAR_IDENTIFIER, TOOLBAR_ICON_ITEM_IDENTIFIER)
+ (TOOLBAR_ITEM_COMMAND_ID_OFFSET, TOOLBAR_ITEM_COMMAND_ID_P)
+ (TOOLBAR_ITEM_COMMAND_ID_VALUE, TOOLBAR_ITEM_MAKE_COMMAND_ID):
+ [USE_MAC_TOOLBAR]: New macros.
+ (mac_move_window_with_gravity, mac_get_window_origin_with_gravity)
+ (mac_handle_toolbar_event, mac_image_spec_to_cg_image)
+ (mac_create_frame_tool_bar, update_frame_tool_bar, free_frame_tool_bar)
+ (mac_tool_bar_note_mouse_movement, mac_handle_toolbar_command_event)
+ [USE_MAC_TOOLBAR]: New functions.
+ (mac_handle_window_event) [USE_MAC_TOOLBAR]: Reposition window
+ manually if previous repositioning has failed.
+ (mac_handle_keyboard_event): Use precomputed event kind.
+ (XTread_socket) [USE_MAC_TOOLBAR]: Handle click in structure region
+ as tool bar item click. Handle mouse movement over tool bar items.
-2003-05-21 Jason Rumney <jasonr@gnu.org>
+ * macterm.h (struct mac_output) [USE_MAC_TOOLBAR]: New member
+ toolbar_win_gravity.
+ (struct scroll_bar) [MAC_OSX]: New member fringe_extended_p.
+ (update_frame_tool_bar, free_frame_tool_bar) [USE_MAC_TOOLBAR]:
+ Add externs.
- * unexw32.c (_start): Remove _fmode initialization.
+ * xdisp.c (update_tool_bar, redisplay_tool_bar, redisplay_window)
+ [USE_MAC_TOOLBAR]: Sync with GTK+ tool bar display.
- * emacs.c (main) [WINDOWSNT]: Move it here.
+2007-06-14 Chong Yidong <cyd@stupidchicken.com>
-2003-05-20 Dave Love <fx@gnu.org>
+ * image.c (search_image_cache): Remove unused variable.
- * s/gnu-linux.h (MAIL_USE_FLOCK): Make it conditional.
+2007-06-13 Chong Yidong <cyd@stupidchicken.com>
-2003-05-19 Richard M. Stallman <rms@gnu.org>
+ * xfns.c, xmenu.c: Link to xaw3d if available.
- * xfaces.c (Finternal_set_lisp_face_attribute): Handle Qunspecified
- as value for QCfont attribute.
- (realize_default_face): lface should already exist; crash if not.
- Specify 0 for FORCE_P when calling set_lface_from_font_name.
+2007-06-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * frame.c (Fignore_event): Doc fix.
+ * dispextern.h (struct image) [HAVE_WINDOW_SYSTEM]: New members
+ frame_foreground and frame_background.
-2003-05-19 Kenichi Handa <handa@m17n.org>
+ * image.c (lookup_image): Save frame foreground and background colors.
+ (search_image_cache): Check if saved and current frame colors match.
- * coding.c (decode_coding_string): Handle post-read-conversion
- even if the coding doesn't require decoding.
+2007-06-12 Stefan Monnier <monnier@iro.umontreal.ca>
-2003-05-18 Richard M. Stallman <rms@gnu.org>
+ * regex.c (regex_compile): Remove the `regnum' counter.
+ Use bufp->re_nsub instead. Add support for \(?N:RE\).
- * callproc.c (Fcall_process_region): Doc fix.
+2007-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
-2003-05-17 Stefan Monnier <monnier@cs.yale.edu>
+ * term.c: Include intervals.h to declare Fget_text_property.
- * lread.c (Fload): Print a message if package is obsolete.
+2007-06-10 Jason Rumney <jasonr@gnu.org>
- * window.c (Fselect_window): Add optional `norecord' arg.
- (select_window_1): Fold into Fselect_window.
- (select_window_norecord): New function.
- (temp_output_buffer_show): Use it. Preserve current buffer.
+ * w32fns.c (Fx_file_dialog): Take size from struct not pointer.
- * window.h (Fselect_window): Update declaration.
+2007-06-08 Juanma Barranquero <lekktu@gmail.com>
- * window.c (delete_window, Fother_window, Fset_window_configuration):
- * minibuf.c (read_minibuf):
- * macterm.c (x_new_focus_frame):
- * frame.c (do_switch_frame, Fset_frame_selected_window, Fdelete_frame):
* callint.c (Fcall_interactively):
- * xterm.c (x_new_focus_frame): Pass nil as new arg to Fselect_window.
-
- * buffer.c (Fpop_to_buffer): Pass norecord to Fselect_window.
-
-2003-05-17 David Kastrup <dak@gnu.org>
-
- * process.c (read_process_output): Back out change from 2003-03-09.
-
-2003-05-17 Stefan Monnier <monnier@cs.yale.edu>
-
- * editfns.c (get_pos_property): Don't assume that `object' = nil.
-
- * textprop.c (text_property_stickiness): New arg `buffer'.
-
- * intervals.h (text_property_stickiness): New arg `buffer'.
- (get_pos_property): Declare.
-
- * intervals.c (get_local_map): Use get_pos_property, to obey
- stickiness and empty overlays.
- (create_root_interval, graft_intervals_into_buffer): Use BEG.
- (merge_properties, intervals_equal, merge_properties_sticky):
- Use XCAR, XCDR.
- (adjust_for_invis_intang): Pass new arg to text_property_stickiness.
-
-2003-05-17 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (read_minibuf): If buffer is empty, record the default
- in the history.
- (Fminibuffer_complete_word): When deleting the overlap, take account
- of its real position.
-
- * fns.c (map_char_table): Fix previous change.
-
- * syntax.c (find_defun_start):
- When open_paren_in_column_0_is_defun_start,
- return beginning of buffer.
-
- * lisp.h (map_char_table): Declare added arg.
-
- * fns.c (map_char_table): New arg TABLE gets the master table.
- All calls changed.
- Process default and inheritance, resorting to Faref if necessary.
-
- * keymap.c (Fset_keymap_parent, map_keymap, Fcopy_keymap)
- (Faccessible_keymaps): Pass new arg to map_char_table.
-
- * fontset.c (Ffontset_info): Pass new arg to map_char_table.
-
- * casetab.c (set_case_table): Pass new arg to map_char_table.
-
- * data.c (let_shadows_buffer_binding_p): Make target of p volatile.
-
- * lisp.h (specbinding_func): New typedef.
- (struct specbinding): Use specbinding_func, to put the `volatile'
- in the right place.
-
- * alloc.c (Fgarbage_collect): Cast pointers into specpdl
- to avoid GCC warning.
-
-2003-05-16 Ralph Schleicher <rs@nunatak.allgaeu.org>
-
- * fileio.c (Fdelete_file): Handle symlinks pointing to directories.
-
-2003-05-15 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (apply_modifiers): Don't fill the other cache.
-
-2003-05-14 Stefan Monnier <monnier@cs.yale.edu>
-
- * .gdbinit-union: New file, for USE_LISP_UNION_TYPE users.
-
- * window.h (Qwindowp, Qwindow_live_p, Vwindow_list)
- (Fwindow_end, Fselected_window, Fdelete_window, Fwindow_buffer)
- (Fget_buffer_window, Fsave_window_excursion, Fsplit_window)
- (Fset_window_configuration, Fcurrent_window_configuration)
- (compare_window_configurations, Fcoordinates_in_window_p, Fwindow_at)
- (Fpos_visible_in_window_p, mark_window_cursors_off)
- (window_internal_height, window_internal_width, Frecenter)
- (Fscroll_other_window, Fset_window_start, temp_output_buffer_show)
- (replace_buffer_in_all_windows, init_window_once, init_window)
- (syms_of_window, keys_of_window): Move from lisp.h.
- * lisp.h: Move window.c declarations to window.h.
-
- * bytecode.c: Include window.h.
- * emacs.c: Include window.h.
-
- * keyboard.c (make_lispy_event): Apply modifiers to multibyte-char key.
- (keyremap): Add `parent' field.
- (keyremap_step): Use it. Remove `parent' argument.
- (read_key_sequence): Setup and use the new `parent' field.
-
-2003-05-11 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (adjust_point_for_property): Ensure termination.
-
-2003-05-10 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (follow_key): Remove dead variable `did_meta'.
- (access_keymap_keyremap, keyremap_step): New funs, extracted from the
- duplicated handling of function-key-map and key-translation-map
- in read_key_sequence.
- (read_key_sequence): Use them.
-
- * keyboard.c (adjust_point_for_property): Try harder to move point
- to the non-sticky end of an invisible property.
-
- * xdisp.c (single_display_prop_intangible_p): Make `space' display
- property intangible as well.
-
-2003-05-10 Andreas Schwab <schwab@suse.de>
-
- * xmenu.c (single_menu_item): Change last parameter to void* to
- avoid warning.
-
-2003-05-09 Richard M. Stallman <rms@gnu.org>
-
- * print.c (Fprin1_to_string): Instead of gcpro, set abort_on_gc.
- Bind Qinhibit_modification_hooks to t so there will be no GC.
- Rename local `tem' to `save_deactivate_mark'.
-
- * eval.c (specpdl_ptr): Declare volatile.
- (unbind_to): Copy the whole binding and decrement specpdl_ptr
- before doing the work of unbinding it.
-
- * lisp.h (struct specbinding): Declare elements volatile.
- (specpdl_ptr): Declare volatile.
-
- * Makefile.in (alloca.o): Specify -DDO_BLOCK_INPUT in compiling.
-
- * alloca.c: Test DO_BLOCK_INPUT rather than `emacs'
- for use of BLOCK_INPUT and inclusion of lisp.h and blockinput.h.
-
-2003-05-08 Dave Love <fx@gnu.org>
-
- * coding.c (Vlast_coding_system_used): Doc fix.
-
-2003-05-07 Jason Rumney <jasonr@gnu.org>
-
- * fileio.c (Ffile_symlink_p): Let handlers handle symlinks even
- when system does not support them.
-
-2003-05-05 Stefan Monnier <monnier@cs.yale.edu>
-
- * fileio.c (Qwrite_region_annotate_functions): New var.
- (build_annotations): Use it to process the global part of the hook.
- (syms_of_fileio): Init and staticpro it.
-
- * keyboard.c (safe_run_hooks_error): Display a message instead of
- silently ignoring the error.
-
-2003-05-03 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (input_available_signal): Mark static.
- (menu_bar_items): Use map_keymap.
- (menu_bar_one_keymap): Remove.
- (menu_bar_item): Adjust arglist (for use in map_keymap).
- Properly hide a second binding when not both are keymaps.
-
- * xmenu.c (struct skp): New struct, to pass args through map_keymap.
- (single_keymap_panes): Use it and map_keymap.
- (single_menu_item): Use skp as well.
-
- * keymap.h (map_keymap_function_t): New type.
- (map_keymap): Declare.
-
- * keymap.c (map_keymap_item, map_keymap_char_table_item, map_keymap)
- (map_keymap_call, Fmap_keymap): New functions.
- (syms_of_keymap): Defsubr map-keymap.
-
-2003-05-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (create_dialog, make_widget_for_menu_item)
- (make_menu_item, create_menus, xg_update_menu_item): Don't call
- ..._with_mnemonic functions for menu items.
-
-2003-05-01 Kenichi Handa <handa@m17n.org>
-
- * coding.c (coding_system_accept_latin_extra_p): Delete this
- function.
- (find_safe_codings): Pay attention to
- the property tranlsation-table-for-encode of each codings.
- (syms_of_coding): Give Qtranslation_table the extra slot number 2.
-
-2003-05-01 Stefan Monnier <monnier@cs.yale.edu>
-
- * eval.c (Funwind_protect): Use func=Fprogn rather than symbol=Qnil.
-
-2003-04-30 Stefan Monnier <monnier@cs.yale.edu>
-
- * eval.c (unbind_to): Don't handle symbol = Qnil any more.
-
- * lisp.h (CHECK): Wrap args in parenthesis.
- (specbind): Fix doc: symbol = Qnil is not supported any more.
-
- * bytecode.c (Fbyte_code) <unwind-protect>:
- Use Fprogn rather than 0 and Qnil.
-
- * keyboard.c (parse_modifiers_uncached): Parse `down', `drag',
- `double', and `triple' modifiers as well.
-
-2003-04-30 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (echo_char): Don't clear out a dash that follows a space.
-
- * alloc.c (abort_on_gc): New variable.
- (Fgarbage_collect): Abort if abort_on_gc is set.
-
- * lisp.h (abort_on_gc): Add decl.
-
- * eval.c (Fsignal): Clear abort_on_gc.
-
- * editfns.c (Fformat): Set abort_on_gc during first scan of format.
- Reinit FORMAT_START and END before second scan.
-
- * xdisp.c (move_it_vertically_backward): Do the final big else
- even if nlines is 0.
-
- * xdisp.c (redisplay_internal): Finish the per-frame loop
- even if redisplay is suspended by input.
-
-2003-04-24 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (x_list_fonts): Return all fonts that match if
- maxnames = -1.
-
-2003-04-25 Kenichi Handa <handa@m17n.org>
-
- * syntax.c (skip_chars): Fix previous change.
-
-2003-04-24 Kenichi Handa <handa@m17n.org>
-
- * syntax.c (skip_chars): Make the code faster by using the common
- technique of *p, *stop, and *endp.
-
-2003-04-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xdisp.c (update_tool_bar): BLOCK_INPUT before calling
- tool_bar_items so GTK tool bar expose callback does not access items
- being updated.
-
-2003-04-19 Stefan Monnier <monnier@cs.yale.edu>
-
- * eval.c (Fapply): Undo last change and add a comment about why.
-
-2003-04-18 Miles Bader <miles@gnu.org>
-
- * data.c (Faset): Calculate nbytes earlier, to satisfy the now
- pickier PARSE_MULTIBYTE_SEQ.
-
-2003-04-17 Stefan Monnier <monnier@cs.yale.edu>
-
- * eval.c (For, Fand, Fprogn, un_autoload, do_autoload):
- Use XCDR, XCAR, CONSP.
- (Fdefmacro): Fix docstring. Use XCAR, XCDR.
- (Fapply): Remove unnecessary GCPRO.
-
- * doc.c (Fsubstitute_command_keys): Remove spurious casts.
-
- * charset.h (PARSE_MULTIBYTE_SEQ): Pretend `length' is used.
-
- * buffer.h: Don't hardcode BEG==1.
-
- * abbrev.c (Fdefine_abbrev_table): Use XCAR, XCDR.
-
-2003-04-16 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (try_window, try_window_reusing_current_matrix):
- When at end of window, set window_end_pos to Z-ZV.
-
- * buffer.c (Foverlay_recenter): Doc fix.
-
-2003-04-14 Stefan Monnier <monnier@cs.yale.edu>
-
- * dispnew.c (Fsit_For): Support XEmacs-style arg list.
-
-2003-04-14 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (mac_check_for_quit_char): Don't check more often than
- once a second.
-
-2003-04-11 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (kbd_buffer_get_event): Don't handle SELECT_WINDOW_EVENT
- specially, so that they can't hide an implicit switch-frame event.
- (make_lispy_event): Handle SELECT_WINDOW_EVENT.
- (head_table): Use switch-frame as event_kind for select-window.
- (keys_of_keyboard): Don't bind [select-window] in special-event-map.
-
- * editfns.c (Fformat): Lisp_Object/int mixup.
- (format2): Remove unused var numargs.
-
-2003-04-11 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Vafter_insert_file_adjust_coding_function): Delete.
- (Qafter_insert_file_set_coding): New variable.
- (syms_of_fileio): Initialize and staticpro it. Delete declaration
- for after-insert-file-adjust-coding-function.
- (Finsert_file_contents): Call Qafter_insert_file_set_coding
- instead of Vafter_insert_file_adjust_coding_function.
-
-2003-04-11 Kenichi Handa <handa@m17n.org>
-
- * lisp.h (temp_echo_area_glyphs): Adjust prototype.
-
- * minibuf.c (temp_echo_area_glyphs): Change the arg to Lisp
- string. Callers changed.
-
-2003-04-10 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Vafter_insert_file_adjust_coding_function): New variable.
- (syms_of_fileio): Declare it as a lisp variable.
- (Finsert_file_contents):
- Call Vafter_insert_file_adjust_coding_function before calling
- decode-format.
-
-2003-04-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
- get GtkAdjustment as widget now is a GtkRange.
-
- * gtkutil.c (xg_create_scroll_bar): Connect to value-changed on
- GtkRange to avoid memory leak.
-
-2003-04-09 Kenichi Handa <handa@m17n.org>
-
- * xfaces.c (Vface_font_rescale_alist): New variable.
- (struct font_name): New member rescale_ratio.
- (font_rescale_ratio): New function.
- (split_font_name): If NUMERIC_P is nonzero, set font->rescale_ratio.
- (better_font_p): On comparing point sized, pay attention to
- recale_ratio member of fonts.
- (build_scalable_font_name): Reflect font->rescale_ratio in the
- font name.
- (syms_of_xfaces): Declare Vface_font_rescale_alist as a Lisp variable.
-
- * lread.c (read1): Before calling index, check if the 2nd
- arguemnt is in ASCII range.
-
-2003-04-08 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Ffile_symlink_p): Doc fix.
-
- * editfns.c (Fformat): Translate positions of text properties
- in the format string to apply them to the result.
-
- * fileio.c (Finsert_file_contents): Doc fix.
- (syms_of_fileio) <after-insert-file-functions>: Doc fix.
-
-2003-04-08 Ivan Zakharyaschev <imz@altlinux.org> (tiny change)
-
- * lread.c (openp): Get the Qfile_exists_p handler for STRING, not FN.
-
-2003-04-08 Steven Tamm <steventamm@mac.com>
-
- * mac.c (init_mac_osx_environment): Switch libexec and bin so
- that self-contained application finds libexec files.
-
-2003-04-08 Kenichi Handa <handa@m17n.org>
-
- * coding.c (code_convert_region_unwind):
- Set Vlast_coding_system_used to the argument.
- (code_convert_region): If post-read-conversion function changed
- the value of last-coding-sytem, keep the new value in
- coding->symbol so that it won't be overridden.
- (run_pre_post_conversion_on_str): Likewise.
- (coding_system_accept_latin_extra_p): New function.
- (find_safe_codings): Pay attention to characters registered in
- latin-extra-code-table.
-
-2003-04-07 Thien-Thi Nguyen <ttn@gnu.org>
-
- * Makefile.in (md5.o): Add missing dependency info.
-
-2003-04-06 Richard M. Stallman <rms@gnu.org>
-
- * xselect.c (x_handle_selection_request): Move UNGCPRO to very end.
-
- * marker.c (verify_bytepos): New function.
-
- * intervals.c (set_intervals_multibyte_1): When becoming
- multibyte, adjust right and left child sizes to a whole set of
- characters. If an interval gets zero total-length, delete it.
- If an interval consists of just its children, delete one of them.
-
- * intervals.h (CHECK_TOTAL_LENGTH): New macro.
- * intervals.c: Add many calls to CHECK_TOTAL_LENGTH.
-
- * alloc.c (VALIDATE_LISP_STORAGE): Macro deleted.
- All calls deleted.
- (lisp_malloc): Do the work here directly.
-
-2003-04-06 Gareth Jones <emacs@referential.org.uk> (tiny change)
-
- * fns.c (Flength): Return SUB_CHAR_TABLE_ORDINARY_SLOTS for sub
- char tables.
-
-2003-04-04 Kenichi Handa <handa@m17n.org>
-
- * editfns.c (Fformat): Use a copy of FORMAT string so that we can
- destructively change "%S" to "%s".
-
-2003-04-03 Miles Bader <miles@gnu.org>
-
- * xfaces.c (choose_face_font): Make sure *NEEDS_OVERSTRIKE is
- always set.
-
-2003-04-01 Dave Love <fx@gnu.org>
-
- * xfns.c (xpm_lookup_color): Grok "opaque".
-
-2003-03-31 Andrew Choi <akochoi@shaw.ca>
-
- * frame.c (x_report_frame_params) [HAVE_CARBON]: Do not report
- parent window ID.
-
- * macfns.c (syms_of_macfns): Remove call to init_x_parm_symbols.
-
- * macterm.h (struct mac_output): Define x_pixels_diff and
- y_pixels_diff.
-
-2003-03-31 Juanma Barranquero <lektu@terra.es>
-
- * makefile.w32-in ($(BLD)/frame.$(O)): Add dependency on
- blockinput.h and files included from it.
-
-2003-03-31 Kim F. Storm <storm@cua.dk>
-
- The following changes consolidates the common code related to
- frame-parameter handling from the xfns.c, w32fns.c, and macfns.c
- files into frame.c.
-
- * frame.c: Include blockinput.h.
- (Vx_resource_name, Vx_resource_class, Qx_frame_parameter)
- (Qx_resource_name, Qface_set_after_frame_default): Define vars here.
- (Qauto_raise, Qauto_lower, ...): Define all frame parameter
- related vars here.
- (struct frame_parm_table, frame_parms): New table for describing
- frame parameters and their associated Q-variable.
- The order of the parameters corresponds to the sequence of the
- frame_parm_handlers table in redisplay_interface.
- (x_fullscreen_move, x_set_frame_parameters)
- (x_report_frame_params, x_set_fullscreen, x_set_line_spacing)
- (x_set_screen_gamma, x_set_font, x_set_fringe_width)
- (x_set_border_width, x_set_internal_border_width, x_set_visibility)
- (x_set_autoraise, x_set_autolower, x_set_unsplittable)
- (x_set_vertical_scroll_bars, x_set_scroll_bar_width, x_icon_type):
- Generic functions for processing of frame parameters.
- (validate_x_resource_name, xrdb_get_resource, Fx_get_resource)
- (display_x_get_resource, x_get_resource_string): Functions for
- generic access to X resources.
- (x_get_arg, x_frame_get_arg, x_frame_get_and_record_arg)
- (x_default_parameter, Fx_parse_geometry): Functions for generic
- access to frame parameters.
- (x_figure_window_size): Generic calculation of frame size.
- Fixed to add space needed for tool bar. Also setup size_hint_flags.
- (syms_of_frame): Intern and staticpro frame parameter variables.
- Defvar_lisp Vx_resource_class and Vx_resource_name here.
- Defsubr Sx_get_resource and Sx_parse_geometry.
-
- * frame.h (Qauto_raise, Qauto_lower, ...): Declare extern all frame
- parameter related vars defined in frame.c.
- (EMACS_CLASS): Define here.
- (enum FULLSCREEN_*): Define here.
- (x_set_scroll_bar_default_width, x_wm_set_icon_position)
- (x_set_offset, x_new_font, x_new_fontset): Add prototypes.
- (x_fullscreen_adjust, x_set_frame_parameters, x_report_frame_params)
- (x_set_fullscreen, x_set_line_spacing, x_set_screen_gamma, x_set_font)
- (x_set_fringe_width, x_set_border_width, x_set_internal_border_width)
- (x_set_visibility, x_set_autoraise, x_set_autolower)
- (x_set_unsplittable, x_set_vertical_scroll_bars)
- (x_set_scroll_bar_width, x_icon_type, validate_x_resource_name)
- (x_figure_window_size): Add prototypes.
-
- * dispextern.h (frame_parm_handler): New typedef.
- (struct redisplay_interface): New member frame_parm_handlers.
- (enum resource_types): Move declaration here.
- (x_get_arg, x_frame_get_arg, x_frame_get_and_record_arg)
- (x_default_parameter): Add prototypes.
-
- * window.c: Remove extern decl for frame parameter vars.
- (change_window_heights): New generic function;
- replaces x_change_window_heights. All users changed.
-
- * window.h (change_window_heights): Add prototype.
-
- * xfaces.c: Remove extern decl for frame parameter vars.
-
- * xterm.h (EMACS_CLASS): Remove. Use generic define.
- (struct w32_display_info): Fix type of xrdb member.
- (enum FULLSCREEN_*): Remove.
- Remove prototypes for generic functions (in frame.h).
-
- * xfns.c (Qauto_raise, Qauto_lower, ...): Remove vars for frame
- parameters now defined in frame.h and frame.c.
- (Vx_resource_name): Remove. Use generic var.
- (enum x_frame_parms): Remove (bogus, unused enum).
- (check_x_display_info): Make non-static (for frame.c).
- (struct x_frame_parm_table, x_frame_parms): Remove.
- (init_x_parm_symbols, x_set_frame_parameters, x_report_frame_params)
- (x_set_line_spacing, x_set_screen_gamma, x_icon_type, x_set_font)
- (x_set_border_width, x_set_internal_border_width, x_set_visibility)
- (x_change_window_heights, x_set_autoraise, x_set_autolower)
- (x_set_vertical_scroll_bars, x_set_scroll_bar_width)
- (validate_x_resource_name, Fx_get_resource, x_get_resource_string)
- (x_default_parameter, Fx_parse_geometry, x_figure_window_size):
- Remove. Use generic functions instead.
- (enum resource_types): Remove.
- (x_set_scroll_bar_default_width): New global function (for frame.c).
- (Fx_create_frame): Depend on x_figure_window_size to add space for
- toolbar and setup size_hint_flags.
- (x_frame_parm_handlers): New table for redisplay_interface.
- (syms_of_xfns): Don't intern/staticpro removed vars.
-
- * xterm.c: Remove unnecessary extern declarations.
- (x_fullscreen_adjust): Remove. Use generic instead.
- (x_redisplay_interface): Add x_frame_parm_handlers member.
-
- * w32gui.h (XrmDatabase): New (dummy) typedef.
-
- * w32term.h (EMACS_CLASS): Remove. Use generic define.
- (struct w32_display_info): Fix type of xrdb member.
- (enum FULLSCREEN_*): Remove.
- (x_fullscreen_adjust): Remove prototype.
-
- * w32fns.c (Qauto_raise, Qauto_lower, ...): Remove vars for frame
- parameters now defined in frame.h and frame.c.
- (Vx_resource_name): Remove. Use generic var.
- (enum x_frame_parms): Remove (bogus, unused enum).
- (check_x_display_info): Make non-static (for frame.c).
- (struct x_frame_parm_table, x_frame_parms): Remove.
- (init_x_parm_symbols, x_set_frame_parameters, x_report_frame_params)
- (x_set_line_spacing, x_set_screen_gamma, x_icon_type, x_set_font)
- (x_set_border_width, x_set_internal_border_width, x_set_visibility)
- (x_change_window_heights, x_set_autoraise, x_set_autolower)
- (x_set_vertical_scroll_bars, x_set_scroll_bar_width)
- (validate_x_resource_name, Fx_get_resource, x_get_resource_string)
- (x_default_parameter, Fx_parse_geometry, x_figure_window_size):
- Remove. Use generic functions instead.
- (enum resource_types): Remove.
- (x_set_scroll_bar_default_width): New global function (for frame.c).
- (Fx_create_frame): Depend on x_figure_window_size to add space for
- toolbar and setup size_hint_flags.
- (w32_frame_parm_handlers): New table for redisplay_interface.
- (syms_of_w32fns): Don't intern/staticpro removed vars.
-
- * w32term.c: Remove unnecessary extern declarations.
- (x_fullscreen_adjust): Remove. Use generic instead.
- (x_redisplay_interface): Add w32_frame_parm_handlers member.
-
- * w32reg.c (x_get_string_resource): Use XrmDatabase.
-
- * macgui.h (XrmDatabase): New (dummy) typedef.
-
- * macterm.h (EMACS_CLASS): Remove.
- (struct mac_display_info): Add xrdb member.
- (struct mac_output): Add want_fullscreen member.
-
- * macfns.c (Qauto_raise, Qauto_lower, ...): Remove vars for frame
- parameters now defined in frame.h and frame.c.
- (Vx_resource_name): Remove. Use generic var.
- (check_x_display_info): Make non-static (for frame.c).
- (struct x_frame_parm_table, x_frame_parms): Remove.
- (init_x_parm_symbols, x_set_frame_parameters, x_report_frame_params)
- (x_set_line_spacing, x_set_screen_gamma, x_icon_type, x_set_font)
- (x_set_border_width, x_set_internal_border_width, x_set_visibility)
- (x_change_window_heights, x_set_autoraise, x_set_autolower)
- (x_set_vertical_scroll_bars, x_set_scroll_bar_width)
- (validate_x_resource_name, Fx_get_resource, x_get_resource_string)
- (x_default_parameter, Fx_parse_geometry, x_figure_window_size):
- Remove. Use generic functions instead.
- (enum resource_types): Remove.
- (x_set_scroll_bar_default_width): New global function (for frame.c).
- (mac_frame_parm_handlers): New table for redisplay_interface.
- (syms_of_macfns): Don't intern/staticpro removed vars.
-
- * macterm.c: Remove unnecessary extern declarations.
- (x_redisplay_interface): Add mac_frame_parm_handlers member.
-
- * Makefile.in (frame.o): Add dependency on blockinput.h and files
- included from it (atimer.h and systime.h).
-
-2003-03-30 Andreas Schwab <schwab@suse.de>
-
- * xdisp.c (x_insert_glyphs): Fix swapped width and height
- parameters for shift_glyphs_for_insert.
-
- * macterm.c (x_redisplay_interface): Add missing entry for
- draw_vertical_window_border.
-
-2003-03-29 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
-
- * fileio.c (Fexpand_file_name): In the no-handler case, after
- expanding, look again for a handler and invoke it. This is needed
- for filenames like "/foo/../user@host:/bar/../baz" -- the first
- expansion produces "/user@host:/bar/../baz" which needs to be
- expanded again for the finame result "/user@host:/baz".
-
-2003-03-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
- of area to be redrawn for better performance.
-
-2003-03-28 Stefan Monnier <monnier@cs.yale.edu>
-
- * xterm.c (take_vertical_position_into_account): Remove.
- (xt_action_hook): Call set_vertical_scroll_bar if needed.
- (XM_SB_MIN, XM_SB_RANGE): Remove (min is now set to 0).
- (xm_scroll_callback, x_create_toolkit_scroll_bar)
- (x_set_toolkit_scroll_bar_thumb): Simplify.
- (x_scroll_bar_expose): Only compile if !USE_TOOLKIT_SCROLL_BARS.
- (XTread_socket): Remove unused var.
- (x_make_frame_invisible): Replace goto with else.
-
- * xdisp.c (set_vertical_scroll_bar): New fun.
- (redisplay_window): Use it.
-
-2003-03-26 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (update_tool_bar): Recompute tool bar if
- update_mode_lines is set. Set w->update_mode_line
- only if the tool bar contents actually change.
- (update_menu_bar): Undo previous change.
-
-2003-03-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
- (xg_frame_set_char_size): Calculate scroll bar width before frame
- width. Call SET_FRAME_GARBAGED and cancel_mouse_face.
- (xg_separator_p): Check for all documented separator types.
- (xg_update_scrollbar_pos): Variable gheight not needed, use height.
- (update_frame_tool_bar): Don't call gdk_window_process_all_updates.
-
- * xdisp.c (update_menu_bar): Set w->update_mode_line to Qt
- so tool bar gets updated.
-
-2003-03-26 Stefan Monnier <monnier@cs.yale.edu>
-
- * data.c (store_symval_forwarding): Re-instate part of the code
- that was deleted with too much enthusiasm.
-
-2003-03-25 Stefan Monnier <monnier@cs.yale.edu>
-
- * data.c (store_symval_forwarding): Delete special read-only
- hack for type == -1, since we now use ->constant instead.
- (Fkill_local_variable): Don't use XBUFFER if it can be nil.
-
- * buffer.c (overlays_in): Declare static.
- (syms_of_buffer) <enable-multibyte-characters>: Use the symbol's
- `constant' field rather than the variable's `type' field.
-
-2003-03-24 Andrew Choi <akochoi@shaw.ca>
-
- * config.in [MAC_OSX]: Do not redefine bcopy, bzero, and bcmp.
-
- * dispextern.h [HAVE_CARBON]: Include Carbon.h.
-
- * fns.c [MAC_OSX]: Do not redefine vector.
-
- * keyboard.c [MAC_OSX]: Handle SIGINT with interrupt_signal.
-
- * macgui.h: Remove definition of No_Cursor.
-
- * macterm.h: Include Carbon.h. Replace (struct Cursor *) by Cursor.
-
- * xdisp.c: Define No_Cursor.
- (x_write_glyphs, notice_overwritten_cursor)
- (draw_phys_cursor_glyph, note_mode_line_or_margin_highlight)
- (note_mouse_highlight): Remove Mac-specific code.
- (note_mouse_highlight): Use bcmp instead of == to compare Cursors.
-
-2003-03-24 John Paul Wallington <jpw@gnu.org>
-
- * xdisp.c (redisplay_window): If mini window's buffer is not
- empty, then redisplay it like other windows.
-
-2003-03-23 Kim F. Storm <storm@cua.dk>
-
- * w32term.c (w32_draw_window_cursor): Fix last change.
-
-2003-03-23 Kenichi Handa <handa@m17n.org>
-
- * alloc.c (make_string_from_bytes, make_specified_string):
- Add `const' for the arg CONTENTS.
-
- * lisp.h (make_string_from_bytes, make_specified_string):
- Prototypes adjusted.
-
-2003-03-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xdisp.c (get_glyph_string_clip_rect): Remove ; at end of #endif.
-
- * gtkutil.h: Take two more arguments to xg_update_scrollbar_pos.
- (XG_SB_RANGE): New define.
-
- * gtkutil.c (xg_fixed_handle_expose): New function.
- (xg_create_frame_widgets): Call xg_fixed_handle_expose for
- expose events.
- (xg_update_scrollbar_pos): Take two more arguments, left and width
- of scroll bar including borders.
- Clear left and right part outside scroll bar separately as some
- themes have bars that are not an even number of pixels.
- Don't set reallocate_redraws, don't call
- gdk_window_process_all_updates.
- (xg_set_toolkit_scroll_bar_thumb): Upper value is fixed,
- so no need to change it. Calculate size and value with XG_SB_RANGE.
-
- * xterm.c (x_scroll_bar_create, XTset_vertical_scroll_bar):
- Pass left and width of scroll bar including borders to
- xg_update_scrollbar_pos.
-
-2003-03-22 Thien-Thi Nguyen <ttn@gnu.org>
-
- * Makefile.in: Make sure space precedes end-of-line backslashes.
-
-2003-03-22 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (pixel_to_glyph_coords, glyph_to_pixel_coords):
- Add generic versions here. Remove system specific versions
- defined elsewhere.
-
- * dispextern.h (pixel_to_glyph_coords, glyph_to_pixel_coords):
- Add prototypes.
-
- * xterm.h (STORE_NATIVE_RECT): New macro.
-
-2003-03-21 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_glyph_string_clip_rect):
- Use FRAME_INTERNAL_BORDER_WIDTH.
-
- * dispextern.h (struct redisplay_interface): Add active_p
- argument to draw_window_cursor member. All uses changed.
-
-2003-03-21 Kim F. Storm <storm@cua.dk>
-
- The following changes consolidate code related to writing and
- inserting glyphs, exposing frame, the tool bar, the mouse face,
- the output cursor, and help echo from xterm.c, w32term.c and
- macterm.c into xdisp.c. It also generalizes the use of the
- window_part enum instead of using numeric values throughout.
-
- * xdisp.c: Consolidate gui-independent code here.
- Include keymap.h.
- (Qhelp_echo): Import.
- (mouse_autoselect_window, x_stretch_cursor_p): Declare here.
- (help_echo_string, help_echo_window, help_echo_object)
- (previous_help_echo_string, help_echo_pos): Declare here.
- (output_cursor, last_mouse_frame, last_tool_bar_item): Declare here.
- (estimate_mode_line_height): Define here. Handle windowing
- systems directly (without using estimate_mode_line_height_hook).
- (x_y_to_hpos_vpos, get_tool_bar_item, note_tool_bar_highlight):
- (update_window_cursor, update_cursor_in_window_tree)
- (fast_find_position, fast_find_string_pos)
- (note_mode_line_highlight, note_mode_line_or_margin_highlight)
- (expose_area, expose_line, expose_overlaps, expose_window)
- (expose_window_tree, phys_cursor_in_rect_p): New generic versions;
- declared static as they are only used locally in xdisp.c.
- (draw_glyphs): Rename from x_draw_glyphs and make static.
- (tool_bar_item_info, notice_overwritten_cursor): Make static.
- (frame_to_window_pixel_xy, get_glyph_string_clip_rect)
- (set_output_cursor, x_cursor_to, handle_tool_bar_click)
- (x_write_glyphs, x_insert_glyphs, x_clear_end_of_line):
- (x_fix_overlapping_area, draw_phys_cursor_glyph, erase_phys_cursor)
- (display_and_set_cursor, x_update_cursor, x_clear_cursor)
- (show_mouse_face, clear_mouse_face, cursor_in_mouse_face_p)
- (note_mouse_highlight, x_clear_window_mouse_face)
- (cancel_mouse_face, x_draw_vertical_border, expose_frame)
- (x_intersect_rectangles): New generic functions for use by xdisp.c
- and GUI front-ends.
- (syms_of_xdisp): Initialize and staticpro help_echo* variables.
- Defvar_bool "x-streach-cursor" and "mouse-autoselect-window" here.
-
- * dispextern.h (Display_Info): Generic typedef for *_display_info.
- (NativeRectangle): Generic typedef for rectangle type.
- (enum window_part): Move here from window.c.
- (struct redisplay_interface): New members flush_display_optional,
- define_frame_cursor, clear_frame_area, draw_window_cursor,
- draw_vertical_window_border, shift_glyphs_for_insert.
- Rename member clear_mouse_face to clear_window_mouse_face.
- (estimate_mode_line_height_hook): Remove hook.
- (auto_raise_tool_bar_buttons_p): Don't declare extern.
- (tool_bar_item_info): Remove prototype.
- (help_echo_string, help_echo_window, help_echo_object)
- (previous_help_echo_string, help_echo_pos)
- (last_mouse_frame, last_tool_bar_item, mouse_autoselect_window):
- (x_stretch_cursor_p, output_cursor): Declare extern.
- (x_draw_glyphs, notice_overwritten_cursor): Remove prototypes.
- (x_write_glyphs), x_insert_glyphs, x_clear_end_of_line)
- (x_fix_overlapping_area, draw_phys_cursor_glyph, erase_phys_cursor)
- (display_and_set_cursor, set_output_cursor, x_cursor_to)
- (x_update_cursor, x_clear_cursor, x_draw_vertical_border)
- (frame_to_window_pixel_xy, get_glyph_string_clip_rect)
- (note_mouse_highlight, x_clear_window_mouse_face, cancel_mouse_face)
- (handle_tool_bar_click, clear_mouse_face, show_mouse_face)
- (cursor_in_mouse_face_p, expose_frame, x_intersect_rectangles):
- Add prototypes.
- (mode_line_string, marginal_area_string): Fix prototypes.
-
- * window.c (enum window_part): Move to dispextern.h.
- (coordinates_in_window): Use enum window_part member names
- instead of numbers to describe return value.
- (struct check_window_data): Change part member to window_part.
- (check_window_containing): Return window_part unaltered.
- (window_from_coordinates): Change part arg from int to enum
- window_part. Allow part arg to be null. All users changed.
-
- * window.h (window_from_coordinates): Fix prototype.
-
- * term.c (estimate_mode_line_height): Move to xdisp.c.
-
- * keyboard.c (make_lispy_event): Use enum window_part.
-
- * dispnew.c (mode_line_string, marginal_area_string): Use enum
- window_part instead of int in arg list. Users changed.
-
- * xterm.h (No_Cursor): Declare as None for X.
- (struct mac_output): Replace member cross_cursor by hand_cursor.
-
- * xterm.c: Remove consolidated defines and code.
- (BETWEEN): Remove unused macro.
- (x_draw_vertical_window_border, x_shift_glyphs_for_insert)
- (x_define_frame_cursor, x_clear_frame_area)
- (x_draw_window_cursor): New X-specific functions for RIF.
- (x_redisplay_interface): Add new members.
-
- * xfns.c: Setup and use hand_cursor instead of cross_cursor.
-
- * w32term.h (struct w32_output): Remove cross_cursor member.
-
- * w32term.c: Remove consolidated defines and code.
- (BETWEEN): Remove unused macro.
- (w32_draw_vertical_window_border, w32_shift_glyphs_for_insert)
- (w32_define_frame_cursor, w32_clear_frame_area)
- (w32_draw_window_cursor): New W32-specific functions for RIF.
- (w32_redisplay_interface): Add new members.
-
- * w32gui.h (No_Cursor): Define as 0 for W32.
- (XRectangle): Add X compatible rectangle type.
- (NativeRectangle): Declare as RECT for W32.
- (CONVERT_TO_XRECT, CONVERT_FROM_XRECT, STORE_NATIVE_RECT): New macros.
-
- * w32fns.c: Remove setup of cross_cursor (already has hand_cursor).
-
- * w32console.c: Remove consolidated defines and code.
-
- * msdos.h (Display_Info): Add generic typedef.
-
- * msdos.c: Remove consolidated defines and code.
- (IT_note_mouse_highlight, dos_rawgetc): Use enum window_part.
-
- * macterm.h (struct mac_output): Replace member cross_cursor by
- hand_cursor.
- (activate_scroll_bars, deactivate_scroll_bars): Add prototypes.
-
- * macterm.c: Remove consolidated defines and code.
- (BETWEEN): Remove unused macro.
- (mac_draw_vertical_window_border, mac_shift_glyphs_for_insert)
- (mac_define_frame_cursor, mac_clear_frame_area)
- (mac_draw_window_cursor): New Mac-specific functions for RIF.
- (x_redisplay_interface): Add new members.
-
- * macgui.h (No_Cursor): Define as 0 for Mac.
- (XRectangle): Add X compatible rectangle type.
- (NativeRectangle): Declare as Rect for Mac.
- (CONVERT_TO_XRECT, CONVERT_FROM_XRECT, STORE_NATIVE_RECT): New macros.
-
- * macfns.c (x_set_mouse_color): Setup hand_cursor.
- (x_set_cursor_color): Use x_display_and_set_cursor.
-
- * Makefile.in (xdisp.o): Add dependency on blockinput.h and files
- included from it. Add dependency on keymap.h.
-
- * makefile.w32-in (xdisp.o): Add dependency on keymap.h.
-
-2003-03-21 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Fexpand_file_name): Fix previous change.
-
-2003-03-19 Kenichi Handa <handa@m17n.org>
-
- * fileio.c (Ffile_name_directory): Reconstruct file name by
- make_specified_string.
- (Ffile_name_nondirectory, Ffile_name_as_directory)
- (Fdirectory_file_name, Fexpand_file_name)
- (Fsubstitute_in_file_name): Likewise.
- (Fread_file_name): Compare decoded homedir with DIR and
- DEFAULT_FILENAME.
-
- * alloc.c (make_specified_string): If NCHARS is negative, count
- the number of characters.
-
-2003-03-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_frame_cleared): Call gtk_widget_queue_draw for
- all widgets.
-
- * gtkutil.h: Removed xg_ignore_next_thumb.
-
-2003-03-18 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Vchar_coding_system_table): Remove this variable.
- (Vcoding_system_safe_chars): New variable.
- (intersection): Remove this function.
- (find_safe_codings): Don't use Vchar_coding_system_table, but try
- all codings in SAFE_CODINGS.
- (Ffind_coding_systems_region_internal): Adjust for the change of
- find_safe_codings. Get generic coding systems from
- Vcoding_system_safe_chars.
- (Fdefine_coding_system_internal): New function.
- (syms_of_coding): Defsubr Sdefine_coding_system_internal.
- Initialize and staticpro Vcoding_system_safe_chars.
-
-2003-03-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
- equal old values before updating.
-
- * xterm.c (xg_scroll_callback): Remove xg_ignore_next_thumb.
-
- * gtkutil.c (xg_initialize): Remove xg_ignore_next_thumb.
-
-2003-03-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c: Removed handle_fixed_child, struct xg_last_sb_pos.
- (xg_resize_widgets): Don't call foreach(handle_fixed_child).
- (xg_gtk_scroll_destroy): Remove free of struct xg_last_sb_pos.
- (scroll_bar_button_cb): Set bar->dragging to nil on button release.
- (xg_create_scroll_bar): Pass bar to button event callback.
- (xg_find_top_left_in_fixed): New function.
- (xg_update_scrollbar_pos): Don't call gdk_window_clear on
- whole scroll bar area. Get old position with
- xg_find_top_left_in_fixed, calculate and only clear needed areas.
- (xg_set_toolkit_scroll_bar_thumb): Do not adjust scroll bar if
- dragging is in progress. Calculate whole as for Motif.
- Remove code that saved last values. Call gtk_range functions to
- set scroll bar sizes.
-
- * gtkutil.h: Removed xg_ignore_next_thumb.
-
-2003-03-17 Juanma Barranquero <lektu@terra.es>
-
- * makefile.w32-in ($(BLD)/xdisp.$(O)): Add dependency on blockinput.h
- and files included from it.
-
-2003-03-18 Stefan Monnier <monnier@cs.yale.edu>
-
- * keymap.c (accessible_keymaps_1): Break cycles but without preventing
- multiple occurrences of the same keymap under different prefixes.
- (Faccessible_keymaps): Remove code redundant since 1994-08-03T07:39:00Z!rms@gnu.org.
-
-2003-03-16 Jason Rumney <jasonr@gnu.org>
-
- * w32gui.h: Use HDC for Display.
-
- * w32term.c (w32_encode_char): Prevent double-byte chars from
- crashing Emacs.
-
- * w32fns.c (jpeg_load, png_load, slurp_file): Read image files
- as binary.
-
-2003-03-16 Juanma Barranquero <lektu@terra.es>
-
- * xdisp.c (x_produce_glyphs): Use FRAME_BASELINE_OFFSET.
-
-2003-03-16 Kim F. Storm <storm@cua.dk>
-
- The following changes consolidate some of the gui-independent
- parts of the processing and drawing of "glyph strings" from
- xterm.c, w32term.c, and macterm.c into xdisp.c.
-
- * dispextern.h (struct glyph): Reduce face_id member from 22 to
- 21 bits (this reduces number of faces from 4M to 2M).
- Replace W32 specific w32_font_type member (2 bits) by generic
- font_type member (3 bits) for portability.
- (FONT_TYPE_UNKNOWN): New define, default for font_type member.
- (enum draw_glyphs_face): Define here.
- (struct glyph_string): Define here. Merge W32 and X versions.
- (struct redisplay_interface): New members per_char_metric,
- encode_char, compute_glyph_string_overhangs, draw_glyph_string.
- (VCENTER_BASELINE_OFFSET): Define here.
- (dump_glyph_string, x_get_glyph_overhangs, x_produce_glyphs)
- (x_draw_glyphs, notice_overwritten_cursor): Declare prototypes here.
-
- * xdisp.c: Consolidate gui-independent "glyph string" code here.
- (dump_glyph_string): Moved here.
- (init_glyph_string, append_glyph_string_lists, append_glyph_string)
- (prepend_glyph_string_lists, get_glyph_face_and_encoding)
- (fill_composite_glyph_string, fill_glyph_string)
- (fill_image_glyph_string, fill_stretch_glyph_string)
- (left_overwritten, left_overwriting, right_overwritten)
- (right_overwriting, get_char_face_and_encoding)
- (set_glyph_string_background_width, compute_overhangs_and_x)
- (append_glyph, append_composite_glyph, produce_image_glyph)
- (take_vertical_position_into_account, append_stretch_glyph)
- (produce_stretch_glyph): New generic functions (based on X version).
- Call platform specific functions through rif.
- (INIT_GLYPH_STRING): New macro, hides W32 details.
- (BUILD_STRETCH_GLYPH_STRING, BUILD_IMAGE_GLYPH_STRING)
- (BUILD_CHAR_GLYPH_STRINGS, BUILD_COMPOSITE_GLYPH_STRING)
- (BUILD_GLYPH_STRINGS): Generic macros (based on X version).
- (x_draw_glyphs, x_get_glyph_overhangs, x_produce_glyphs)
- (notice_overwritten_cursor):
- Generic functions exported to platform modules. Users changed.
-
- * xterm.h (FONT_DESCENT, FRAME_X_OUTPUT, FRAME_BASELINE_OFFSET)
- (FONT_TYPE_FOR_UNIBYTE, FONT_TYPE_FOR_MULTIBYTE)
- (STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2):
- New macros for consolidated code.
-
- * xterm.c: Remove consolidated defines and code.
- (x_per_char_metric, x_encode_char)
- (x_compute_glyph_string_overhangs): Adapt to RIF requirements.
- (x_redisplay_interface): Add new members.
-
- * w32gui.h (Display): Add dummy typedef for consolidation.
- (XChar2b): Define alias for wchar_t for consolidation.
- (STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2): New macros.
-
- * w32term.h (FRAME_X_OUTPUT, FRAME_X_WINDOW, FRAME_X_DISPLAY)
- (FONT_TYPE_FOR_UNIBYTE, FONT_TYPE_FOR_MULTIBYTE):
- New macros for consolidation.
-
- * w32term.c: Remove consolidated defines and code.
- (BUILD_WCHAR_T, BYTE1, BYTE2): Macros removed; callers changed
- to use STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2 instead.
- (w32_per_char_metric): Change font_type arg to int for RIF.
- (w32_encode_char): Return int according to RIF requirements.
- (w32_compute_glyph_string_overhangs): Adapt to RIF.
- (w32_get_glyph_overhangs): New function for RIF. Uses generic
- x_get_glyph_overhangs.
- (w32_redisplay_interface): Add new members.
-
- * macgui.h (XChar2b): Move typedef here for consolidation.
- (STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2): New macros.
-
- * macterm.h (FRAME_X_OUTPUT, FRAME_X_WINDOW, FRAME_X_DISPLAY):
- (FONT_TYPE_FOR_UNIBYTE, FONT_TYPE_FOR_MULTIBYTE): New macros for
- consolidation.
-
- * macterm.c: Remove consolidated defines and code.
- (mac_per_char_metric): New function for RIF.
- (mac_encode_char): Adapt to new RIF requirements.
- (mac_compute_glyph_string_overhangs): Adapt for RIF.
- (x_redisplay_interface): Add new members.
-
-2003-03-15 Stefan Monnier <monnier@cs.yale.edu>
-
- * keymap.c (Vmenu_events): New var.
- (syms_of_keymap): Initialize it.
- (where_is_internal): Check more carefully what is a menu event.
-
-2003-03-14 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (read1): After #!, exit loop on eof.
-
-2003-03-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.h: Add declaration for xg_frame_cleared.
-
- * xterm.c (x_clear_frame): Call xg_frame_cleared for GTK.
-
- * gtkutil.c (struct xg_last_sb_pos): New structure.
- (handle_fixed_child): New function.
- (xg_resize_widgets): Call handle_fixed_child on all scroll bar widgets
- and force a redraw on them.
- (xg_gtk_scroll_destroy): Free struct xg_last_sb_pos also.
- (xg_create_scroll_bar): Add struct xg_last_sb_pos to scroll bar
- so we can avoid unneeded redraws.
- (xg_update_scrollbar_pos): Invalidate data in xg_last_sb_pos
- and force a redraw on the scroll bar.
- (xg_set_toolkit_scroll_bar_thumb): Do not change/redraw scroll bar
- if xg_last_sb_pos shows the positions are up to date.
- (xg_frame_cleared): New function.
-
-2003-03-13 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Fdetect_coding_region): Fix docstring.
- (Fdetect_coding_string): Fix docstring.
-
-2003-03-13 Andreas Schwab <schwab@suse.de>
-
- * gtkutil.c: Add prototype for create_menus.
-
- * data.c (long_to_cons): Fix type of top.
-
- * xselect.c (selection_data_to_lisp_data): Use int instead of
- long for an integer of size 4.
-
- * gtkutil.c (xg_update_frame_menubar): Add missing return value.
- (xg_tool_bar_help_callback): Likewise.
-
-2003-03-12 Andreas Schwab <schwab@suse.de>
-
- * xterm.c (x_term_init) [USE_GTK]: Fix typo.
-
-2003-03-12 Kim F. Storm <storm@cua.dk>
-
- The following changes consolidate the fringe handling from
- xterm.c, w32term.c, and macterm.c into xdisp.c.
-
- * xdisp.c: Consolidate fringe handling code here.
- (left_bits, right_bits, continued_bits, continuation_bits)
- (ov_bits, zv_bits): Define fringe bitmaps.
- (fringe_bitmaps): New array holding fringe bitmaps.
- (draw_fringe_bitmap): Draw a specific bitmap; call display
- specific drawing routine via rif->draw_fringe_bitmap.
- (draw_row_fringe_bitmaps): Generic replacement for
- x_draw_row_fringe_bitmaps; all callers changed.
- (compute_fringe_widths): Generic replacement for
- x_compute_fringe_widths; all callers changed.
-
- * dispextern.h (enum fringe_bitmap_type): Define here.
- (struct fringe_bitmap, struct draw_fringe_bitmap_params): New.
- (fringe_bitmaps): Declare extern.
- (struct redisplay_interface): New member draw_fringe_bitmap.
- (draw_row_fringe_bitmaps, compute_fringe_widths): Declare extern.
-
- * xterm.c: Remove generic fringe code.
- (x_draw_fringe_bitmap): Only perform actual fringe drawing.
- (x_redisplay_interface): Add x_draw_fringe_bitmap member.
-
- * w32term.c: Remove generic fringe code.
- (w32_draw_fringe_bitmap): Only perform actual fringe drawing.
- (w32_redisplay_interface): Add w32_draw_fringe_bitmap member.
-
- * macterm.c: Remove generic fringe code.
- (x_draw_fringe_bitmap): Only perform actual fringe drawing.
- (x_redisplay_interface): Add x_draw_fringe_bitmap member.
-
-2003-03-11 Stefan Monnier <monnier@cs.yale.edu>
-
- * print.c (Fprin1_to_string): Return unibyte string if possible.
-
-2003-03-09 David Kastrup <dak@gnu.org>
-
- * process.c (read_process_output): We have allocated enough space
- for readmax and carryover, so actually use the alloted space.
-
-2003-03-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c (make_lispy_event): Extend mouse_syms if needed for
- toolkit scrollbar click.
-
- * xterm.c (x_window_to_scroll_bar): Call xg_get_scroll_id_for_window
- for USE_GTK.
- (x_scroll_bar_handle_click): Use this function for toolkit scrollbars
- also.
- (handle_one_xevent): ButtonPress/Release: If event is for a toolkit
- scrollbar and control is pressed, call x_scroll_bar_handle_click.
-
- * gtkutil.h (xg_get_scroll_id_for_window): Declare.
-
- * gtkutil.c (xg_get_scroll_id_for_window): New function.
- (xg_tool_bar_item_expose_callback): New function.
- (xg_tool_bar_expose_callback): Call update_frame_tool_bar.
- (xg_create_tool_bar): Connect xg_tool_bar_expose_callback to expose
- on the tool bar widget.
- (update_frame_tool_bar): Connect xg_tool_bar_item_expose_callback
- to expose on the tool bar item widgets.
-
-2003-03-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Compare pixmap ID instead of
- struct image* when deciding to update (struct image* may have been
- deleted from the image cache).
-
- * xterm.c (handle_one_xevent): Pass ReparentNotify to Xt even if
- the event isn't for a frame (i.e. for dialogs).
-
-2003-03-07 Kenichi Handa <handa@m17n.org>
-
- * coding.c (CODING_ADD_COMPOSITION_COMPONENT): If the number of
- composition components reaches the limit, terminate composing.
- (COMPOSITION_OK): New macro.
- (detect_coding_iso2022): Use it if an escape sequence for
- composition is found.
- (coding_restore_composition): Adjust the number of composition
- components if it is not sane.
-
-2003-03-06 Juanma Barranquero <lektu@terra.es>
-
- * w32term.h (struct w32_display_info): Add xrdb member to support
- passing resources via -xrm on Windows.
-
- * w32term.c (w32_make_rdb): New function.
- (w32_term_init): Use it to initialize xrdb member of w32_display_info
- struct. Delete leftover code.
-
- * w32fns.c (Fx_get_resource, x_get_resource_string): Pass xrdb to check
- for resources passed on the command line.
-
- * w32reg.c (w32_get_rdb_resource): New function.
- (x_get_string_resource): Use it, so resources passed with -xrm
- supercede the ones in the registry.
-
-2003-03-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_detect_focus_change): Call x_any_window_to_frame
- instead of x_top_window_to_frame.
-
-2003-03-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
- when restarting Emacs.
-
-2003-03-03 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fkill_buffer): Use Frun_hook_with_args_until_failure
- to run kill-buffer-query-functions.
- (Qkill_buffer_query_functions): New var.
- (syms_of_buffer): Init and staticpro it.
-
-2003-03-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (XSync): Define as gdk_window_process_all_updates for GTK.
-
-2003-02-25 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (redisplay_window): Fix infinite loop in redisplay.
- If centering point failed to make whole line visible and vscroll
- is non-zero, disable vscroll and try centering point again.
-
- * lread.c (read1): Accept `single space' syntax like (? x).
-
-2003-02-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c (cancel_hourglass_unwind): Surround with
- #ifdef HAVE_X_WINDOWS.
-
-2003-02-25 Kenichi Handa <handa@m17n.org>
-
- * buffer.c (Fset_buffer_multibyte): Pay attention to the buffer
- process only when "subprocesses" is defined.
-
-2003-02-24 Stefan Monnier <monnier@cs.yale.edu>
-
- * syntax.c (back_comment): Only check nestedness of 2nd char if needed.
-
-2003-02-24 Juanma Barranquero <lektu@terra.es>
-
- * callint.c (fix_command): Declare as static void and move before
- Fcall_interactively.
-
- * xdisp.c (Qwhen): Declare external; it's now defined in callint.c.
- (syms_of_xdisp): Don't initialize Qwhen.
-
-2003-02-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c (cancel_hourglass_unwind): New function.
- (command_loop_1): Cancel hourglass with unwind-protect.
-
-2003-02-23 Richard M. Stallman <rms@gnu.org>
-
- * callint.c (fix_command): New subroutine, from Fcall_interactively.
- Detect (when ... (region-beginning)) etc.
- (Fcall_interactively): Call fix_command.
- (Qif, Qwhen): New variables.
- (syms_of_callint): Init and staticpro them.
-
- * regex.c (print_partial_compiled_pattern): Output to stderr.
-
-2003-02-23 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
-
- * dired.c (directory_files_internal): Don't expand directory.
- (Fdirectory_files, Fdirectory_files_and_attributes): Do it here
- instead. From Lars Hansen <larsh@math.ku.dk>.
-
-2003-02-22 Stefan Monnier <monnier@cs.yale.edu>
-
- * fns.c (string_to_multibyte): Remove unused var i.
- (Flanginfo): Fix int/Lisp_Object mixup.
- (void_call2): New fun.
- (Fmap_char_table): Use it in place of call2.
-
- * xfaces.c (x_face_list_fonts): Fix int/Lisp_Object mixup.
-
- * macros.c (Fstart_kbd_macro): Remove redundant assignment.
-
- * keymap.c (copy_keymap_1): Make it static.
-
- * alloc.c (Fgarbage_collect): Don't use XSETFLOAT.
-
-2003-02-22 David Ponce <david@dponce.com>
-
- * lread.c (Fload): Don't check STRING_MULTIBYTE.
-
-2003-02-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * process.h: Removed subtty field from struct Lisp_Process.
-
- * process.c (create_process): Remove setting of subtty.
- (emacs_get_tty_pgrp): New function.
- (Fprocess_running_child_p, process_send_signal):
- Call emacs_get_tty_pgrp instead of ioctl.
- (process_send_signal): Call EMACS_KILLPG if ioctl TIOCSIGSEND fails.
-
-2003-02-21 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
-
- * keymap.c (Fdefine_key): Doc fix.
-
-2003-02-21 Juanma Barranquero <lektu@terra.es>
-
- Port of patch for RC by Klaus Zeitler <kzeitler@lucent.com>.
-
- * s/hpux10.h: Define POLL_INTERRUPTED_SYS_CALL, not
- POLLING_PROBLEM_IN_SELECT.
-
- * s/hpux11.h: Include hpux10-20.h instead of hpux10.h.
- Delete #undef of POLLING_PROBLEM_IN_SELECT.
-
- * s/hpux10-20.h: New file.
-
- * process.c (wait_reading_process_input):
- Use POLL_INTERRUPTED_SYS_CALL, not POLLING_PROBLEM_IN_SELECT.
-
-2003-02-20 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (check_fontset_name): If NAME is nil, return the
- default fontset.
- (override_font_info): New function.
- (Fset_fontset_font): Document that NAME nil means the default fontset.
- (Ffontset_info): If FONTSET is not the default fontset, merge
- FONTSET onto the copy of the default fontset, and work on that
- copy. Document that NAME nil means the default fontset.
- (Ffontset_font): Document that NAME nil means the default fontset.
-
- * process.c (setup_process_coding_systems): If the process's
- in/out descriptor is -1, do nothing.
-
-2003-02-19 Andreas Schwab <schwab@suse.de>
-
- * lisp.h (Fcancel_kbd_macro_events, Fstring_to_multibyte):
- Add prototypes.
-
-2003-02-19 Kenichi Handa <handa@m17n.org>
-
- * xfaces.c (try_alternative_families): Try all scalable fonts if
- Vscalable_fonts_allowed is not Qt.
-
-2003-02-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
-
-2003-02-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
- names.
-
- * xfaces.c (x_face_list_fonts): Allocate struct font_name here.
- (sorted_font_list): Move allocation of struct font_name to
- x_face_list_fonts.
- (Fx_font_family_list): Set font-list-limit to -1 to get all font names.
- (Fx_list_fonts): Set maxnames to -1 to get all font names.
-
-2003-02-18 Kim F. Storm <storm@cua.dk>
-
- * lread.c (read1): Fix last change.
- "`" is not always special. Allow "?" after a character constant.
-
-2003-02-18 Andrew Choi <akochoi@shaw.ca>
-
- * unexmacosx.c (copy_data_segment): Also copy __cfstring section.
-
-2003-02-18 Andreas Schwab <schwab@suse.de>
-
- * window.c (window_scroll_pixel_based): Move outside a
- multi-glyph character before setting new window start.
-
- * xdisp.c (in_display_vector_p): New function.
- * dispextern.h (in_display_vector_p): Declare.
-
-2003-02-18 Kim F. Storm <storm@cua.dk>
-
- * lread.c (read1): Fix and relax read syntax.
- Recognize "[", ";", "#", and "?" after a dotted-pair dot.
- Only recognize "," after dotted-pair dot if inside backquote.
- Never include "`" or "," (inside backquote) in a symbol.
- Allow dotted-pair dot after a character constant.
- Allow "`" and "," (inside backquote) after a character constant.
-
-2003-02-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_tool_bar_expose_callback): New function.
- (xg_create_tool_bar): Force style of tool bar to be horizontal with
- icons. Set name of tool bar to emacs-toolbar.
- (update_frame_tool_bar): Connect expose event to
- xg_tool_bar_expose_callback.
-
-2003-02-17 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (this_command_key_count_reset): New variable.
- Initiatize to 0 where this_command_key_count is set.
- (read_char): Save and restore this_command_key_count_reset
- around input method code.
- (read_char): If this_command_key_count_reset, echo reread commands.
- (Freset_this_command_lengths): Set this_command_key_count_reset to 1.
-
-2003-02-17 Kenichi Handa <handa@m17n.org>
-
- * fns.c (string_to_multibyte): Always return a multibyte string.
-
-2003-02-16 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_list_bdf_fonts, w32_list_fonts):
- Negative max_fonts parameter means list all.
-
-2003-02-14 Dave Love <fx@gnu.org>
-
- * fns.c (Flanginfo): Doc fix.
-
-2003-02-13 Kim F. Storm <storm@cua.dk>
-
- * lread.c (read_escape): Interpret \s as a SPACE character, except
- for \s-X in a character constant which still is the super modifier.
- (read1): Signal an `invalid read syntax' error if a character
- constant is immediately followed by a digit or symbol character.
-
- * search.c (Fmatch_data): Doc fix. Explicitly state that
- match-data is undefined if last search failed.
-
- * keymap.c (Fcommand_remapping): Rename from Fremap_command.
- All uses changed.
-
-2003-02-12 Juanma Barranquero <lektu@terra.es>
-
- * eval.c (Fdefmacro): Fix typo.
-
-2003-02-12 Kim F. Storm <storm@cua.dk>
-
- * macros.c (Fstart_kbd_macro): If appending, and last keyboard
- macro is a string, convert meta modifiers in string when copying
- the string into a vector.
-
-2003-02-11 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (Fremap_command): Return nil if arg is not a symbol.
-
-2003-02-11 Kenichi Handa <handa@m17n.org>
-
- * Makefile.in (lisp, shortlisp): Add malayalam.el and tamil.el.
-
-2003-02-10 Kim F. Storm <storm@cua.dk>
-
- * process.c: Doc fixes.
- (syms_of_process): Add `:' prefix to QCfilter_multibyte.
-
-2003-02-10 Kenichi Handa <handa@m17n.org>
-
- * fns.c (Fstring_to_multibyte): Fix typo in the docstring.
-
- * process.c (QCfilter_multibyte): New variable.
- (setup_process_coding_systems): New function.
- (Fset_process_buffer, Fset_process_filter):
- Call setup_process_coding_systems.
- (Fstart_process): Initialize the member `filter_multibyte' of
- struct Lisp_Process.
- (create_process): Call setup_process_coding_systems.
- (Fmake_network_process): New keyward `:filter-multibyte'.
- Initialize the member `filter_multibyte' of struct Lisp_Process.
- Call setup_process_coding_systems.
- (server_accept_connection): Call setup_process_coding_systems.
- (read_process_output): If the process has a filter, decide the
- multibyteness of a string to given to the filter by
- `filter_multibyte' member of the process. If the process doesn't
- have a filter and the result of conversion is unibyte, use
- Fstring_to_multibyte (not Fstring_make_multibyte) to get the
- multibyte form.
- (Fset_process_coding_system): Call setup_process_coding_systems.
- (Fset_process_filter_multibyte): New function.
- (Fprocess_filter_multibyte_p): New function.
- (syms_of_process): Intern and staticpro QCfilter_multibyte.
- Defsubr Sset_process_filter_multibyte and
- Sprocess_filter_multibyte_p.
-
- * process.h (struct Lisp_Process): New member filter_multibyte.
-
- * lisp.h (setup_process_coding_systems): Add prototype.
-
- * buffer.c (Fset_buffer_multibyte): If the current buffer has a
- process, update coding systems for the process.
-
-2003-02-09 Kenichi Handa <handa@m17n.org>
-
- * fns.c (string_to_multibyte): New function.
- (Fstring_to_multibyte): New function.
- (syms_of_fns): Defsubr it.
-
-2003-02-08 Andreas Schwab <schwab@suse.de>
-
- * Makefile.in (EXEEXT): Define to @EXEEXT@ and use this variable
- instead of the substitution.
-
-2003-02-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
-
- * xmenu.c (menu_position_func): Adjust menu popup position so that
- the menu is fully visible.
-
-2003-02-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (x_text_icon, x_raise_frame, x_lower_frame)
- (x_make_frame_invisible, x_wm_set_icon_position):
- Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif.
-
- * xfns.c (x_set_name, x_set_title): Ditto.
-
-2003-02-04 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (echo_now): Update before_command_echo_length.
- (Freset_this_command_lengths): Reset this_command_key_count etc.
- immediately rather than arranging to do it later.
- (before_command_key_count_1, before_command_echo_length_1)
- (before_command_restore_flag): Vars deleted.
- (add_command_key): Don't handle before_command_restore_flag.
- (read_char, record_menu_key): Don't update before_command_key_count or
- before_command_echo_length.
- (read_char): Don't handle before_command_restore_flag.
-
- * keyboard.c (command_loop_1): Don't call adjust_point_for_property
- in direct-output clauses if it wouldn't be called in the ordinary case.
-
-2003-02-04 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (syms_of_keyboard) <this-original-command>: Doc fix.
-
-2003-02-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (remove_from_container): Copying list is not needed.
- (xg_update_menubar, xg_update_menu_item, xg_update_submenu)
- (xg_modify_menubar_widgets, update_frame_tool_bar): Call g_list_free
- on list returned from gtk_container_get_children to avoid memory leak.
-
-2003-02-01 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_create_pixmap_from_bitmap_data): Use alloca for
- local malloc.
- [HAVE_XPM]: Avoid clashes with XColor, XImage and Pixel
- definitions in xpm.h.
- (init_xpm_functions): New function.
- (xpm_load): Sync with xfns.c. Adapt for Windows version of libXpm.
- (init_external_image_libraries): Try to load libXpm.dll.
-
- * fileio.c (Fcopy_file) [WINDOWSNT]: Reverse logic for setting
- timestamp.
-
-2003-01-31 Dave Love <fx@gnu.org>
-
- * syntax.c (Fskip_chars_forward)
- (open-paren-in-column-0-is-defun-start): Doc fix.
-
-2003-01-31 Joe Buehler <jhpb@draco.hekimian.com>
-
- * fileio.c: Support // at start of name for Cygwin (just added proper
- preprocessor tests).
-
- * keyboard.c: Port to Cygwin (just added proper preprocessor tests).
-
- * Makefile.in: Use @EXEEXT@ for Cygwin.
-
- * mem-limits.h: Added ifdef to define BSD4_2 for Cygwin.
-
- * s/cygwin.h: Added for Cygwin port.
-
-2003-01-31 Juanma Barranquero <lektu@terra.es>
-
- * w32fns.c (DrawText): Kludge to avoid a redefinition on Windows
- when including gif_lib.h.
- (init_gif_functions, init_tiff_functions): New functions.
- (gif_load, tiff_load): Sync with xfns.c version. Adjust colors for
- Windows. Disable color table lookups. Call library functions
- through pointers determined at runtime.
- (init_external_image_libraries): Try to load libungif.dll and
- libtiff.dll.
-
-2003-01-31 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (SKIP_GLYPHS): New macro.
- (set_cursor_from_row): Skip all glyphs that comes from overlay string.
-
-2003-01-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (free_frame_tool_bar): Remove debug printf.
-
-2003-01-30 Dave Love <fx@gnu.org>
-
- * alloc.c (Vgc_elapsed, gcs_done): New variables.
- (Fgarbage_collect): Use them.
- (init_alloc, syms_of_alloc): Set them up.
-
-2003-01-30 Juanma Barranquero <lektu@terra.es>
-
- * w32fns.c (init_external_image_libraries): Add missing operator.
-
-2003-01-29 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (init_external_image_libraries): Allow jpeg-62.dll as
- an alternative name for jpeg.dll.
-
-2003-01-29 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (set_cursor_from_row): Pay attention to string display
- properties.
-
-2003-01-28 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
-
- * macterm.c (keycode_to_xkeysym_table): Add <tab>, <backspace>,
- <escape>.
- (keycode_to_xkeysym_table): Reformat and add more comments.
- (XTread_socket): Drop special case for backspace.
-
-2003-01-28 Andrew Choi <akochoi@shaw.ca>
-
- * macfns.c (x_to_mac_color): Correct the order for parsing the RGB
- values in old-style RGB specs.
-
-2003-01-27 Juanma Barranquero <lektu@terra.es>
-
- * w32fns.c (init_external_image_libraries): Try alternate names for the
- jpeg dll.
-
-2003-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (create_dialog, xg_separator_p)
- (xg_item_label_same_p, xg_update_menu_item): Check for NULL string
- before calling strcmp or strlen.
-
-2003-01-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
- and handle image load failure.
-
-2003-01-26 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (init_jpeg_functions, jpeg_resync_to_restart_wrapper):
- New functions.
- (jpeg_load): Sync with xfns.c version. Adjust colors for Windows.
- Disable color table lookups. Call jpeg library functions
- through pointers determined at runtime.
- (init_external_image_libraries): Try to load jpeg.dll.
-
-2003-01-25 Richard M. Stallman <rms@gnu.org>
-
- * lisp.h: Declare format2 instead of format1.
-
- * fileio.c (barf_or_query_if_file_exists):
- Call format2 instead of format1.
-
- * editfns.c (format2): New function, replaces format1
- but takes exactly two Lisp Objects as format args.
-
- * buffer.c (Fkill_buffer): Call format2 instead of format1.
-
-2003-01-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h: Change to return value of x_dispatch_event to int.
-
- * xterm.c (x_filter_event): New function.
- (event_handler_gdk, XTread_socket): Call x_filter_event.
- (x_dispatch_event): Change to return value of finish.
- (event_handler_gdk): Use return value from x_dispatch_event.
-
- * xfns.c (x_window): Call create_frame_xic for GTK version to
- initialize input methods.
-
- * gtkutil.h: Add (void) prototypes.
-
- * gtkutil.c (create_menus): Remove code that puts the help menu to
- the right.
-
-2003-01-25 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (XPutPixel): Handle monochrome images; used for masks.
- [HAVE_PNG]: Sync with xfns.c version.
- (png_load): Adjust colors for Windows. Use Windows
- bitmaps. Disable color table lookups.
- (DEF_IMGLIB_FN, LOAD_IMGLIB_FN): New macros.
- (init_png_functions): New function.
- (png_read_from_memory, png_load): Call png library functions
- through pointers determined at runtime.
- (QCloader, QCbounding_box, QCpt_width, QCpt_height): Declare.
- (init_external_image_libraries): New function.
- (init_xfns): Call it.
-
-2003-01-24 Andreas Schwab <schwab@suse.de>
-
- * minibuf.c (Fminibuffer_message): Verify type of parameter.
-
-2003-01-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_initialize): Initialize id_to_widget here instead
- of static initializer.
-
-2003-01-24 Dave Love <fx@gnu.org>
-
- * s/gnu-linux.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define for more
- architectures.
-
- * alloc.c (mark_stack) [!GC_LISP_OBJECT_ALIGNMENT && __GNUC__]:
- Use __alignof__.
-
-2003-01-24 Kenichi Handa <handa@m17n.org>
-
- * keyboard.c (adjust_point_for_property): New second arg MODIFIED.
- It it is nonzero, don't pretend that an invisible area doesn't exist.
- (command_loop_1): Call adjust_point_for_property with proper
- second arg.
-
-2003-01-22 Jason Rumney <jasonr@gnu.org>
-
- Sync changes with xterm.c and xfns.c.
-
- * w32term.c (x_draw_glyph_string_foreground)
- (x_draw_composite_glyph_string_foreground): Implement overstriking.
-
- * w32term.c (x_write_glyphs): Clear phys_cursor_on_p if current
- phys_cursor's hpos is overwritten. This is still not completely
- correct, as it doesn't really make sense to use hpos at all to
- get the cursor glyph (as that is relative to the width of the
- characters on the line, which may have changed during the update).
-
- * w32term.c (notice_overwritten_cursor): Handle the special case
- of the cursor being in the first blank non-text line at the
- end of a window.
-
- * w32term.c (x_draw_hollow_cursor, x_draw_bar_cursor)
- (x_draw_phys_cursor_glyph): Set phys_cursor_width here.
- Compute from the x position returned by x_draw_glyphs.
-
- (x_display_and_set_cursor): Don't set phys_cursor_width here,
- except for NO_CURSOR and system caret, to make phys_cursor_width
- contain what its name suggests.
- (notice_overwritten_cursor): Consider the cursor image erased if
- the output area intersects the cursor image in y-direction.
-
- * w32term.c (note_mode_line_or_margin_highlight): Rename from
- note_mode_line_highlight and extend.
-
- * w32term.c (last_window): New variable.
- (w32_read_socket) <WM_MOUSEMOVE>: Generate SELECT_WINDOW_EVENTs.
- (note_mouse_movement): Remove reimplemented code in #if 0.
-
- * w32fns.c (x_set_cursor_type): Set cursor_type_changed,
- not update_mode_lines, and always set it to 1.
-
-2003-01-21 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (IDC_HAND): Define it if system headers don't.
-
-2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
-
- * w32term.h (struct w32_output): New member hand_cursor.
- (WM_EMACS_SETCURSOR): New message definition.
-
- * w32term.c (note_mode_line_highlight): Delete #if 0 to enable
- function w32_define_cursor.
- (note_mouse_highlight): Initialize, setup cursor accoding to mouse
- position, change member name output_data.x to output_data.w32 and
- add function w32_define_cursor.
- (show_mouse_face): Delete #if 0 to enable function w32_define_cursor
- and change member name output_data.x to output_data.w32.
- (w32_initialize_display_info):
- Setup dpyinfo->vertical_scroll_bar_cursor.
-
- * w32fns.c (Vx_hand_shape): New variable.
- (w32_wnd_proc): Add message entries for WM_SETCURSOR and
- WM_EMACS_SETCURSOR.
- (x-create-frame): Setup Cursor types.
-
-2003-01-21 David Ponce <david@dponce.com>
-
- * w32term.c (w32_encode_char): For DIM=1 charset, set
- ccl->reg[2] to -1 before calling ccl_driver.
- (Sync. with xterm.c x_encode_char change by Kenichi Handa
- <handa@m17n.org> on 2002-09-30.)
- (w32_draw_relief_rect): Declare all args.
- (w32_define_cursor): New.
-
- * w32fns.c (w32_load_cursor): New function.
- (w32_init_class): Use it.
- (x_put_x_image): Declare all args.
-
-2003-01-21 Richard Dawe <rich@phekda.freeserve.co.uk>
-
- * Makefile.in (ALL_CFLAGS): Include MYCPPFLAGS, not MYCPPFLAG.
-
-2003-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c: Must include stdio.h before termhooks.h.
-
-2003-01-21 Dave Love <fx@gnu.org>
-
- * alloc.c (Fgc_status): Print zombie list.
- (mark_maybe_object) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]:
- Fix assignment of zombies.
- (Fgarbage_collect) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]:
- Don't take car of non-cons.
-
- * s/sol2-5.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
-
- * s/sunos4-0.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
-
-2003-01-20 David Ponce <david@dponce.com>
-
- * w32menu.c (digest_single_submenu): Declare all args.
-
- Sync with 2002-12-23 Richard M. Stallman <rms@gnu.org>
- changes in xmenu.c:
-
- (parse_single_submenu): Use individual keymap's prompt
- string as pane name, if there is one.
- (set_frame_menubar): Save menu_items_n_panes from each call to
- parse_single_submenu and use it when calling digest_single_submenu.
-
-2003-01-20 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (XTread_socket): Check for valid, visible window
- before sending a scroll-wheel event.
-
-2003-01-20 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (redisplay_window): If mini window's buffer is not
- a minibuffer, then redisplay it like other windows.
-
-2003-01-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * gtkutil.c (xg_create_frame_widgets): Check if there is an
- external tool bar before setting tool bar height.
-
-2003-01-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (handle_one_xevent): Surround popup_activated
- with #ifdef:s for non-toolkit version.
-
- * Makefile.in (XOBJ): Add gtkutil.o if USE_GTK.
- (gtkutil.o): New file.
- (TOOLKIT_DEFINES): Set to -DUSE_GTK if HAVE_GTK.
- (LIBW): Set to @GTK_LIBS@ if USE_GTK.
-
- * gtkutil.c: New file for GTK version.
-
- * gtkutil.h: New file for GTK version.
-
- * xterm.h: Add xt_or_gtk_widget.
- Include gtk files for USE_GTK.
- (struct x_output): Add toolbar_height.
- (struct x_output): Add GTK widgets and Gdk size_hints.
- (GTK_WIDGET_TO_X_WIN, FRAME_GTK_OUTER_WIDGET, FRAME_GTK_WIDGET)
- (FRAME_OUTER_WINDOW): New macros for USE_GTK.
- (FRAME_OUTER_TO_INNER_DIFF_Y): Add FRAME_TOOLBAR_HEIGHT to calculation.
-
- * xterm.c: Include gtkutil.h for USE_GTK.
- (free_frame_menubar): Declare extern void for USE_GTK.
- (note_mouse_highlight): Check popup_activated for USE_GTK.
- (xt_action_hook): Don't compile if USE_GTK.
- (x_scroll_bar_to_input_event): Use CurrentTime for USE_GTK.
- (xg_scroll_callback): New function.
- (x_create_toolkit_scroll_bar): Call xg_create_scroll_bar for USE_GTK.
- (x_set_toolkit_scroll_bar_thumb): Call xg_set_toolkit_scroll_bar_thumb
- for USE_GTK.
- (x_scroll_bar_create): Call xg_update_scrollbar_pos and
- xg_show_scroll_bar for USE_GTK.
- (x_scroll_bar_remove): Call xg_remove_scroll_bar for USE_GTK.
- (XTset_vertical_scroll_bar): Call xg_update_scrollbar_pos for USE_GTK.
- (event_handler_gdk): New function for USE_GTK.
- (handle_one_xevent): Call xg_resize_widgets for USE_GTK.
- (handle_one_xevent): Make sure widget is mapped before
- calling x_real_positions for USE_GTK.
- (XTread_socket): Add GTK event loop for USE_GTK.
- (x_set_window_size): Call xg_frame_set_char_size for USE_GTK.
- (x_make_frame_visible): Call gtk_widget_show_all for USE_GTK.
- (x_make_frame_invisible): Call gtk_widget_hide for USE_GTK.
- (x_iconify_frame): Add code for USE_GTK.
- (x_free_frame_resources): Call gtk_widget_destroy for USE_GTK.
- (x_wm_set_size_hint): Only compile if not USE_GTK. GTK version
- is in gtkutil.c.
- (x_term_init): Add initialization for GTK.
- (syms_of_xterm): Set Vx_toolkit_scroll_bars for USE_GTK.
-
- * xmenu.c: Include gtkutil.h for USE_GTK.
- (Fx_popup_menu): Use current position if x and y are nil.
- (single_menu_item, single_menu_item, Fx_popup_dialog):
- Check for USE_GTK.
- (popup_widget_loop): New function for USE_GTK.
- (x_activate_menubar): Add code for USE_GTK.
- (popup_activate_callback, popup_deactivate_callback)
- (menu_highlight_callback, menubar_selection_callback):
- Add USE_GTK versions.
- (update_frame_menubar): Call xg_update_frame_menubar for USE_GTK.
- (set_frame_menubar): Call xg_modify_menubar_widgets for USE_GTK.
- (free_frame_menubar): Only compile if not USE_GTK. GTK version
- is in gtkutil.c.
- (popup_selection_callback): New version for USE_GTK.
- (create_and_show_popup_menu): New fuction, one USE_GTK version and
- one USE_X_TOOLKIT version.
- (xmenu_show): Call create_and_show_popup_menu.
- (dialog_selection_callback): New version for USE_GTK.
- (create_and_show_dialog): New fuction, one USE_GTK version and
- one USE_X_TOOLKIT version.
- (xdialog_show): Call create_and_show_dialog.
-
- * xfns.c: Include gtkutil for USE_GTK.
- (x_window_to_frame, x_any_window_to_frame)
- (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
- (x_top_window_to_frame): Add code for USE_GTK.
- (x_set_background_color): Call xg_set_background_color for GTK.
- (x_set_menu_bar_lines): Check for USE_GTK.
- (x_set_tool_bar_lines): Call update_frame_tool_bar for USE_GTK.
- (x_set_name, x_set_title): Call gtk_window_set_title for USE_GTK.
- (x_window): Call xg_create_frame_widgets for USE_GTK.
- (Fx_create_frame): Check for USE_GTK.
- (Fx_file_dialog): New implementation for USE_GTK.
-
- * xdisp.c: Add check for USE_GTK for extern void set_frame_menubar.
- (update_menu_bar): Add check for USE_GTK.
- (update_tool_bar): Add check for USE_GTK and external tool bar.
- (redisplay_tool_bar): Add check for USE_GTK and external tool bar.
- (redisplay_internal): Add check for USE_GTK and popup_activated.
- (redisplay_window): Add check for USE_GTK and FRAME_EXTERNAL_MENU_BAR.
- (redisplay_window): Add check for USE_GTK and FRAME_EXTERNAL_TOOL_BAR.
- (display_menu_bar): Add check for USE_GTK
-
- * lisp.h (Vx_resource_name): Declare extern.
-
- * keyboard.c (kbd_buffer_get_event): Check MENU_BAR_ACTIVATE_EVENT
- for USE_GTK.
- (make_lispy_event): Check MENU_BAR_EVENT for USE_GTK.
-
- * frame.h (struct frame): Add external_tool_bar. Check for USE_GTK.
- (FRAME_EXTERNAL_TOOL_BAR): New macro.
- (FRAME_EXTERNAL_MENU_BAR): Check for USE_GTK.
-
- * fileio.c (Fread_file_name): Add check for USE_GTK.
-
- * dispnew.c (adjust_frame_glyphs_for_window_redisplay):
- Add check for USE_GTK.
-
- * config.in: Added HAVE_GTK.
-
- * alloc.c (Fgarbage_collect): Call xg_mark_data for GTK.
-
-2003-01-18 Stefan Monnier <monnier@cs.yale.edu>
-
- * charset.h (Funibyte_char_to_multibyte): Export.
-
-2003-01-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xmenu.c (mouse_position_for_popup): New function.
- (Fx_popup_menu): Call mouse_position_for_popup for X and
- mouse_position_hook for others.
-
-2003-01-17 Kim F. Storm <storm@cua.dk>
-
- * editfns.c (Finsert): Mention `string-make-multibyte' and
- `string-as-multibyte' in doc string.
-
-2003-01-17 Kenichi Handa <handa@m17n.org>
-
- * fontset.c (syms_of_fontset): Setup Vfont_encoding_alist here.
-
- * editfns.c (Fformat): Convert an unibyte char argument that is
- formatted by "%c" to multibyte if the total result must be a
- multibyte string.
-
-2003-01-16 Kim F. Storm <storm@cua.dk>
-
- * process.c (set-process-filter): Document unibyte/multibyte-ness
- of string argument.
-
-2003-01-16 Kenichi Handa <handa@m17n.org>
-
- * charset.h (NEXT_CHAR_BOUNDARY, PREV_CHAR_BOUNDARY): New macros.
-
- * regex.c (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
- (re_search_2): Likewise.
-
-2003-01-15 Kenichi Handa <handa@m17n.org>
-
- * xdisp.c (message_dolog): Fix bug of the case that *Message*
- buffer is unibyte.
-
-2003-01-15 Francesco Potort,Al(B <pot@gnu.org>
-
- * fns.c (Fsubstring): Clarify doc string.
-
- * textprop.c (Ftext_properties_at, Fnext_char_property_change)
- (Fprevious_char_property_change)
- (Fnext_single_char_property_change)
- (Fprevious_single_char_property_change, Fnext_property_change)
- (Fnext_single_property_change, Fprevious_property_change)
- (Fprevious_single_property_change, Fadd_text_properties)
- (Fput_text_property, Fset_text_properties)
- (Fremove_text_properties, Fremove_list_of_text_properties)
- (Ftext_property_any, Ftext_property_not_all): Clarify doc strings.
-
-2003-01-14 Kim F. Storm <storm@cua.dk>
-
- * process.h (struct Lisp_Process): New member plist replaces old
- member private_vars. All uses changed.
-
- * process.c: Reworked 2003-01-12 change -- call a plist a plist!
- (QCplist): Rename from QCvars. Change all uses.
- (Fprocess_plist): Replaces Fprocess_variable. Simplified.
- (Fset_process_plist): Replaces Fset_process_variable. Simplify.
- (syms_of_process): Intern, staticpro, defsubr these.
- (Fmake_network_process): Describe :plist arg. Remove :vars arg.
-
-2003-01-14 Francesco Potort,Al(B <pot@gnu.org>
-
- * m/delta.h: Remove (obsolete).
-
-2003-01-13 Francesco Potort,Al(B <pot@gnu.org>
-
- * fileio.c (Fdelete_directory, Fdelete_file): Document the
- behaviour in front of symlinks.
- (Fdelete_file): Raise an error on directories.
-
-2003-01-13 Dave Love <fx@gnu.org>
-
- * fns.c (Freverse): Use QUIT.
-
-2003-01-13 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (minibuffer_completion_contents):
- Error if point is inside prompt.
-
- * keyboard.c (command_loop_1): Don't redisplay directly
- if there's a post-command-hook.
-
- * fileio.c (syms_of_fileio) <directory-sep-char>: Doc fix.
- (Fdo_auto_save): Add gcpros around Ffile_name_directory.
-
-2003-01-12 Kim F. Storm <storm@cua.dk>
-
- * process.h (struct Lisp_Process): New member private_vars.
-
- * process.c (QCvars): New variable.
- (syms_of_process): Intern and staticpro it.
- (Fset_process_contact): Removed function.
- (Fprocess_variable, Fset_process_variable): New functions.
- (syms_of_process): Defsubr them.
- (Fstart_process): Initialize private_vars plist to nil.
- (Fmake_network_process): New arg :vars to setup the private
- variables for new network process.
- (server_accept_connection): Copy server's private variables to
- client process.
-
- * alloc.c (pure_alloc): Fixed 2003-01-10 changed (caused spurious
- crashes). Code rewritten and simplified. Now directly aligns the
- pointer and recalculates pure_bytes_used, rather than aligning the
- size and adjusting the pointer.
-
-2003-01-11 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fset_process_contact): New function.
- (syms_of_process): defsubr it.
- (make-network-process): Update doc.
-
-2003-01-10 Andreas Schwab <schwab@suse.de>
-
- * alloc.c (pure_alloc): Correct alignment for Lisp_Floats.
- Reported by Berthold Gunreben <b.gunreben@web.de>.
-
-2003-01-10 Dave Love <fx@gnu.org>
-
- * composite.c (syms_of_composite): Make composition_hash_table weak.
-
-2003-01-09 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fmake_network_process): Convert new port number
- to host byte order for `:service t' case. From Mario Lang.
-
-2003-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (Fx_file_dialog): Call XtAppNextEvent and x_dispatch_event
- instead of XtAppProcessEvent.
-
- * xterm.c (handle_one_xevent): New function.
- (x_dispatch_event): New function.
- (XTread_socket): Call handle_one_xevent.
-
- * xterm.h (FRAME_OUTER_TO_INNER_DIFF_X/Y): New.
-
- * xmenu.c (Fx_popup_menu): If popping up at mouse position,
- call XQueryPointer to get coordinates.
- (popup_get_selection): Do not set popup_activated_flag to zero,
- let popup_deactivate_callback do that. Needed for Motif.
- Call x_dispatch_event instead of XtDispatchEvent.
- (xmenu_show): Calculate root coordinate from frame top/left position.
-
-2003-01-08 Kim F. Storm <storm@cua.dk>
-
- * process.c (server_accept_connection): Fix recording of new
- connection's local address in :local property of contact info.
- (Fmake_network_process): Record local network address for new
- client processes in :local property of contact info.
- (format-network-address): Add arg OMIT-PORT. Change callers.
-
-2003-01-07 Dave Love <fx@gnu.org>
-
- * Makefile.in (fns.o): Depend on coding.h.
-
-2003-01-06 Dave Love <fx@gnu.org>
-
- * fns.c: Include coding.h. Use POINTER_TYPE*, not void*.
- (Vlocale_coding_system): Declare.
- (Qcodeset, Qdays, Qmonths, Qpaper): New.
- (Flanginfo): New.
- (syms_of_fns): Initialize new stuff.
-
-2003-01-07 Markus Rost <rost@math.ohio-state.edu>
-
- * minibuf.c (Fread_variable): Doc fix.
-
- * eval.c (Fuser_variable_p): Doc change. For custom variables,
- use the same test as for custom-variable-p.
-
-2003-01-05 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (try_scrolling): New arg LAST_LINE_MISFIT.
- Count LAST_LINE_MISFIT in scroll margin for end of window.
- Move label too_near_end before setting SCROLL_MARGIN_POS.
- Set LAST_LINE_MISFIT before jumping there.
-
- * xdisp.c (try_scrolling): Calculate amount_to_scroll better in
- scroll_conservatively case. If scrolling that much doesn't change
- STARTP, move it down one line.
-
- * xdisp.c (redisplay_window): Pass last_line_misfit arg to
- try_scrolling. Make it 1 after make_cursor_line_fully_visible fails.
-
- * xdisp.c (setup_echo_area_for_printing): Kill Emacs if no
- selected frame.
-
- * keymap.c (apropos_predicate, apropos_accumulate): Make them static.
- (syms_of_keymap): Staticpro them.
- (Fapropos_internal): Initialize them and clear them out.
- Don't GCPRO them.
-
- * buffer.c (syms_of_buffer) <scroll-up|down-aggressively>: Doc fixes.
-
- * lisp.h: New misc type Lisp_Save_Value.
- (enum Lisp_Misc_Type): Add Lisp_Misc_Save_Value.
- (XSAVE_VALUE): New macro.
- (struct Lisp_Save_Value): New data type.
- (union Lisp_Misc): Add u_save_value alternative.
- (make_save_value): Declare.
-
- * alloc.c (make_save_value): New function.
-
- * xterm.c (x_catch_errors): Save dpy using make_save_value.
- (x_catch_errors_unwind): Call XSync.
-
-2003-01-01 Richard M. Stallman <rms@gnu.org>
-
- * window.c (window_scroll_pixel_based): Partially undo last change.
-
- * keyboard.c (command_loop_1): Call adjust_point_for_property
- in direct action cases for Qforward_char and Qbackward_char.
- Set already_adjusted so it won't be done twice.
-
-2002-12-30 Richard Dawe <rich@phekda.freeserve.co.uk>
-
- * src/config.in (!HAVE_SIZE_T): Fix order of arguments in
- type definition of size_t.
-
-2003-01-02 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (syms_of_macterm): Provide the feature "mac-carbon" to
- distinguish Carbon GUI builds from X11 builds on darwin.
-
-2002-12-30 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (syms_of_macterm): Set mac-wheel-button-is-mouse-2
- to default to t.
-
-2002-12-29 Francesco Potort,Al(B <pot@gnu.org>
-
- * data.c (Fstring_to_number, Fminus): Better English in doc strings.
-
-2002-12-28 Steven Tamm <steventamm@mac.com>
-
- * Makefile.in (macosx-bundle): Fix Mac OS X/Carbon port to
- allow building in a different directory than source. Uses some
- GNU Make extensions, but there is no other make on Mac OS X.
-
-2002-12-26 Francesco Potort,Al(B <pot@gnu.org>
-
- * data.c (Fmakunbound, Ffmakunbound, Fmake_variable_buffer_local)
- (Fsetq_default, Fmake_local_variable, Fkill_local_variable)
- (Fmake_variable_frame_local, Faset, Fnumber_to_string, Fminus)
- (Fstring_to_number): Mention the returned value in the doc strings.
-
-2002-12-23 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer) <scroll-up-aggressively>
- <scroll-down-aggressively>: Doc fix.
-
- * xmenu.c (parse_single_submenu): Use individual keymap's prompt
- string as pane name, if there is one.
- (set_frame_menubar): Save menu_items_n_panes from each call to
- parse_single_submenu and use it when calling digest_single_submenu.
-
- * window.c (window_scroll_pixel_based): Fix check for reaching BEGV.
- Don't try to make last line fully visible if it is past end of window.
-
-2002-12-22 Steven Tamm <steventamm@mac.com>
-
- * macmenu.c (MIN_POPUP_SUBMENU_ID): Add.
- (mac_menu_show): Add support for hierarchical popup menus.
- (add_menu_item): Remove indentation support.
- (fill_submenu, fill_menu): Create hierarchical menus
- instead of using indentation.
-
-2002-12-22 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (try_cursor_movement): Don't call try_window here.
- (redisplay_window): Never redisplay minibuffer when inactive.
-
- * window.c (select_window_1): Undo 9/21 change.
-
-2002-12-22 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (XTread_socket): Call KeyTranslate for control and
- meta to deal correctly shifted non-alpha characters, like C-S-5
- being treated like C-%. Do not look for shift key to deal
- with masking off control-key with mac-reverse-ctrl-meta.
-
-2002-12-21 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (popup_get_selection): Now static. New arg DO_TIMERS.
- If it is non-nil, run timers. Use an unwind-protect to requeue
- the events that were read ahead.
- (popup_get_selection_unwind): New subroutine.
- (popup_get_selection_queue): File-scope variable now holds that queue.
- (xmenu_show): Pass 0 for DO_TIMERS to popup_get_selection.
- (xdialog_show): Pass 1 for DO_TIMERS to popup_get_selection.
- Use an unwind-protect to pop down the dialog box.
- (xdialog_show_unwind): New subroutine implements that.
-
- * xdisp.c (row_containing_pos): Change exit test using last_y.
- (try_window_id): Abort if row_containing_pos returns null.
-
- * lread.c (load_error_handler): New function.
- (Fload): Handle errors in Fsubstitute_in_file_name.
- Don't expect Fsignal to return.
-
- * eval.c: Errors and throws work right with interrupt blocking.
- (struct catchtag): New elt interrupt_input_blocked.
- (unwind_to_catch): Restore interrupt_input_blocked from saved value.
- (internal_catch, Fcondition_case, internal_condition_case)
- (internal_condition_case_1, internal_condition_case_2): Save it.
- (Fsignal): Don't do TOTALLY_UNBLOCK_INPUT.
-
- * editfns.c (Fformat): Add parens.
-
- * dired.c (file_name_completion): Fix that change.
- Delete special quit-handling code; just use QUIT.
-
-2002-12-21 Tak Ota <Takaaki.Ota@am.sony.com>
-
- * dired.c (file_name_completion): Close directory on error
- just as in directory_files_internal.
-
-2002-12-19 David Kastrup <David.Kastrup@t-online.de>
-
- * window.c (Fset_window_configuration): Set old_point to correct
- value when new_current_buffer == current_buffer.
-
-2002-12-17 Ben Key <bkey1@tampabay.rr.com>
-
- Revisited my earlier fix for the following entry in etc/PROBLEMS:
- "Emacs built on Windows 9x/ME crashes at startup on Windows XP,
- or Emacs builtpart of on XP crashes at startup on Windows 9x/ME."
-
- These changes were in part based upon suggestions made by Peter
- 'Luna' Runestig [peter@runestig.com].
-
- * w32.c (g_b_init_is_windows_9x, g_b_init_open_process_token)
- (g_b_init_get_token_information, g_b_init_lookup_account_sid)
- (g_b_init_get_sid_identifier_authority ): Add several static
- global variables.
-
- * w32.c (globals_of_w32): New function. Used to initialize those
- global variables that must always be initialized on startup even
- when the global variable initialized is non zero. Its primary
- purpose at this time is to set the global variables
- g_b_init_is_windows_9x, g_b_init_open_process_token,
- g_b_init_get_token_information, g_b_init_lookup_account_sid, and
- g_b_init_get_sid_identifier_authority to 0 on startup.
- Called from main.
-
- * w32.c (is_windows_9x): Perform initialization only if
- g_b_init_is_windows_9x is equal to 0. On initialization set
- g_b_init_is_windows_9x equal to 1.
-
- * w32.c (open_process_token): Perform initialization only if
- g_b_init_open_process_token is equal to 0. On initialization set
- g_b_init_open_process_token equal to 1.
-
- * w32.c (get_token_information): Perform initialization only if
- g_b_init_get_token_information is equal to 0. On initialization
- set g_b_init_get_token_information equal to 1.
-
- * w32.c (lookup_account_sid): Perform initialization only if
- g_b_init_lookup_account_sid is equal to 0. On initialization
- set g_b_init_lookup_account_sid equal to 1.
-
- * w32.c (get_sid_identifier_authority): Perform initialization
- only if g_b_init_get_sid_identifier_authority is equal to 0.
- On initialization set g_b_init_get_sid_identifier_authority equal to 1.
-
- * w32fns.c (globals_of_w32fns): New function. Used to initialize
- those global variables that must always be initialized on startup
- even when the global variable initialized is non zero.
- Its primary purpose at this time is to initialize the global variable
- track_mouse_event_fn.
-
- * w32fns.c (w32_wnd_proc): Remove initialization of
- track_mouse_event_fn from the handler for the WM_SETFOCUS message.
-
- * w32fns.c (syms_of_w32fns): Call globals_of_w32fns.
-
- * w32menu.c (globals_of_w32menu): New function. Used to
- initialize those global variables that must always be initialized
- on startup even when the global variable initialized is non zero.
- Its primary purpose at this time is to initialize the global
- variables get_menu_item_info and set_menu_item_info.
-
- * w32menu.c (initialize_frame_menubar): Remove initialization of
- get_menu_item_info and set_menu_item_info.
-
- * w32menu.c (syms_of_w32menu): Call globals_of_w32menu.
-
- * w32.h (globals_of_w32, globals_of_w32fns, globals_of_w32menu):
- Declare them.
-
- * emacs.c (main): Call globals_of_w32 prior to calling
- init_environment if WINDOWSNT is defined. Call globals_of_w32fns
- and globals_of_w32menu if initialized is non zero and HAVE_NTGUI
- is defined.
-
- * w32term.c (x_update_window_begin): Fix Windows API error
- detected by BoundsChecker. Test to determine if
- w32_system_caret_hwnd is NULL prior to attempting to use
- SendMessage to send the WM_EMACS_HIDE_CARET message to it.
-
- * w32term.c (x_update_window_end): Fix Windows API error
- detected by BoundsChecker. Test to determine if
- w32_system_caret_hwnd is NULL prior to attempting to use
- SendMessage to send the WM_EMACS_SHOW_CARET message to it.
-
-2002-12-17 Kenichi Handa <handa@m17n.org>
-
- * coding.c (coding_system_require_warning): New variable.
- (syms_of_coding): DEFVAR it.
-
- * coding.h (coding_system_require_warning): Extern it.
-
- * fileio.c (choose_write_coding_system): Even if
- Vcoding_system_for_write is non-nil, if
- coding_system_require_warning is nonzero, call
- Vselect_safe_coding_system_function.
-
-2002-12-17 Markus Rost <rost@math.ohio-state.edu>
-
- * Makefile.in (lisp, shortlisp): Add cus-face and timer.
- (lisp): Add font-core.
-
-2002-12-13 Stefan Monnier <monnier@cs.yale.edu>
-
- * textprop.c (text_read_only): New arg `propval'.
- (get_char_property_and_overlay): Remove unused var `next_overlay'.
- (verify_interval_modification): Use text_read_only's new arg.
-
-2002-12-13 Kenichi Handa <handa@m17n.org>
-
- * coding.c (Funencodable_char_position): Set pend correctly.
-
-2002-12-12 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (last_mousemove_x, last_mousemove_y): New variables.
- (w32_read_socket) <WM_MOUSEMOVE>: Use them to detect non-movement.
- Be more careful about when help_events are generated.
-
-2002-12-12 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (mac_check_for_quit_char): Correctly set the
- modifiers of the event to 0.
- * mac.c (sys_select): Duplicate rfds before calling select to
- ensure that rfds survive the while loop.
-
-2002-12-11 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (try_window_id): Don't call set_cursor_from_row if
- row_containing_pos returned NULL.
-
-2002-12-10 Steven Tamm <steventamm@mac.com>
-
- * mac.c (sys_read): Fix sys_read to not call select if IO is
- non-blocking.
- (sys_select): Fix sys_select to not use a timeout larger than
- the one given.
-
-2002-12-10 Juanma Barranquero <lektu@terra.es>
-
- * editfns.c (Fformat): Use alloca, not _alloca.
-
-2002-12-09 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fget_buffer_create): Call Qucs_set_table_for_input
- as the last thing.
-
-2002-12-09 Dave Love <fx@gnu.org>
-
- * s/sol2-8.h: Removed. (Not necessary.)
-
-2002-12-09 Matthew Swift <swift@alum.mit.edu>
-
- * editfns.c (Fformat): Handle precision in string conversion
- specifiers like libc functions do (ie, print at most that many
- characters).
-
-2002-12-08 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (row_containing_pos): Check more carefully
- whether charpos is really in the row before returning it.
-
-2002-12-07 Steven Tamm <steventamm@mac.com>
-
- * sysdep.c (emacs_read) [HAVE_CARBON]: Have emacs_read use sys_read.
-
- * eval.c (Feval) [HAVE_CARBON]: Calls mac_check_for_quit_char at
- each stack frame. This may change as it could be time consuming.
-
- * macterm.c (mac_check_for_quit_char, quit_char_comp)
- (init_quit_char_handler, mac_determine_quit_char_modifiers)
- (mac_initialize): Add code to check for pressing of quit_char
- in the OS event queue.
-
- * mac.c (sys_select): Call mac_check_for_quit_char every second
- while blocking on select.
-
- * mac.c (sys_read): Use sys_select to test for input first
- before calling read, to allow C-g to break.
-
-2002-12-07 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (Fcompleting_read): Doc fix.
-
- * lread.c (syms_of_lread) <load-history>: Doc fix.
-
- * fileio.c (Fcopy_file): Set immediate_quit around emacs_open call.
-
- * eval.c (Fdefun, Fdefmacro): Record in load-history redefining an
- autoload.
-
- * data.c (Fdefalias): Record in load-history redefining an autoload.
-
- * alloca.c: Undo ifdef change accidentally made on 12-04.
-
-2002-12-06 Francesco Potort,Al(B <pot@gnu.org>
-
- * xfns.c (png_load): Avoid double gamma correction for PNG images.
-
-2002-12-04 Richard M. Stallman <rms@gnu.org>
-
- * sysdep.c (fcntl.h): Test only HAVE_FCNTL_H.
-
- * fileio.c (fcntl.h): Test only HAVE_FCNTL_H.
-
- * alloca.c: Don't use #error.
-
-2002-12-03 Dave Love <fx@gnu.org>
-
- * buffer.c (Qucs_set_table_for_input): New.
- (Fget_buffer_create): Use it.
- (Qset_buffer_major_mode_hook): Deleted.
- (Fset_buffer_major_mode): Revert previous change.
- (init_buffer_once): Intern ucs-set-table-for-input.
- (syms_of_buffer): Delete Qset_buffer_major_mode_hook.
- Add &Qucs_set_table_for_input.
-
-2002-12-03 Andreas Schwab <schwab@suse.de>
-
- * callint.c (Fcall_interactively): Use next_event only if less
- than key_count.
-
-2002-12-02 Andrew Choi <akochoi@shaw.ca>
-
- * macmenu.c (add_menu_item, fill_menubar): Truncate menu item
- names to 255 characters.
-
- * macterm.c (XTread_socket): If all frames have been collapsed,
- expand the first one before handling drag-and-drop events.
-
- * s/darwin.h (GETPGRP_NO_ARG): Delete. Replaced by GETPGRP_VOID,
- which is detected by autoconf.
-
-2002-12-01 Steven Tamm <steventamm@mac.com>
-
- * unexmacosx.c (copy_twolevelhints, dump_it): Now corrects the
- offset in two hints table to allow prebinding to be redone and
- allow the executable to be stripped.
-
-2002-11-29 Dave Love <fx@gnu.org>
-
- * fns.c (Frequire): Don't call LOADHIST_ATTACH if feature was
- already provided.
-
-2002-11-29 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (start_display): Check more intelligently for
- whether the line is continued.
- (move_it_vertically_backward): Clear it->continuation_lines_width.
-
-2002-11-28 Dave Love <fx@gnu.org>
-
- * s/amdahl.h, s/unipl5-0.h, m/sgi3000.h, s/3700.h, s/alliant-2800.h:
- * s/alliant.h, s/altos.h: Deleted. (Unused/empty.)
-
-2002-11-27 Steven Tamm <steventamm@mac.com>
-
- * fns.c (Frequire): Change nesting allowance from 2 to 3 to cause
- more descriptive error output from lread.c:Fload upon most require
- cycles during boostrapping.
-
-2002-11-27 Jason Rumney <jasonr@gnu.org>
-
- * fileio.c (Finsert_file_contents): Give a more appropriate error
- for files bigger than 2Gb when off_t is 32 bit.
-
- * dired.c (Ffile_attributes): Don't return negative file sizes for
- files bigger than 2Gb when off_t is 32 bit.
-
-2002-11-27 Dave Love <fx@gnu.org>
-
- * s/irix6-0.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
-
- * systty.h: Don't conditionally define GETPGRP_NO_ARG.
- Test GETPGRP_VOID instead.
- [BSD_TERMIOS]: Remove definitions (never used).
-
- * s/osf5-0.h (WAIT_USE_INT, SYS_SIGLIST_DECLARED, sys_siglist):
- Don't define.
- (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
-
- * m/mips.h (WORDS_BIG_ENDIAN): Define conditionally.
-
-2002-11-25 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (sys_write): Avoid non-blocking mode, which is not fully
- supported.
-
-2002-11-25 Dave Love <fx@gnu.org>
-
- * unexalpha.c (update_dynamic_symbols): Cast arg of fatal_unexec.
-
- * Makefile.in (TEMACS_LDFLAGS): Update last change.
-
-2002-11-25 Andreas Schwab <schwab@suse.de>
-
- * m/ia64.h: Restore `#ifndef NOT_C_CODE' deleted by last change.
-
-2002-11-24 Steven Tamm <steventamm@mac.com>
-
- * unexmacosx.c (unexec_realloc): Use malloc_default_zone to
- determine the size of pointers alloced in unexed space instead
- of using possibly invalid emacs_zone pointers. This fixes the
- binary incompatibility problems caused by updates to libSystem.B.
-
-2002-11-24 Richard M. Stallman <rms@gnu.org>
-
- * search.c (Fstring_match): Doc fix.
-
- * callint.c (Fcall_interactively): If a command fails because
- `*' detects a read-only buffer, but RECORD_FLAG is set,
- record it anyway if the args don't actually do tty input.
-
-2002-11-22 Dave Love <fx@gnu.org>
-
- * sysdep.c (stuff_char) [PROTOTYPES]: Provide ISO C arglist.
-
- * keyboard.c (interrupt_signal): Provide forward declaration.
- (kbd_buffer_store_event): Don't declare interrupt_signal.
-
- * xdisp.c (store_frame_title_char) [PROTOTYPES]: Provide ISO C arglist.
-
-2002-11-21 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (interactive_p): Skip any number of bytecode
- and special form frames, in any order.
-
-2002-11-20 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (convert_mono_to_color_image): New function.
- (xbm_load, xbm_load_image): Use it when foreground or background
- is explicitly set.
-
-2002-11-19 Dave Love <fx@gnu.org>
-
- * s/usg5-4.h, sco4.h (bcopy, bzero, bcmp): Don't define.
-
-2002-11-18 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (x_build_heuristic_mask): Filter palette info from color.
- (XPutPixel): Swap blue and red.
- (xpm_format, pbm_format, png_format, jpeg_format, tiff_format)
- (gif_format, gs_format): Use IMAGE_ASCENT_VALUE.
- (xpm_image_p, pbm_image_p, png_image_p, jpeg_image_p)
- (tiff_image_p, gif_image_p, gs_image_p): Don't check ascent.
-
-2002-11-18 Dave Love <fx@gnu.org>
-
- * m/orion105.h (HAVE_ALLOCA): Don't define.
-
- * m/m68k.h, m/arm.h, mtekxd88.h, m/tower32v3.h: Don't define alloca.
-
- * m/intel386.h: Don't include alloca.h or define alloca.
-
- * m/ia64.h: Don't include alloca.h, stdlib.h. Don't declare
- malloc, realloc, calloc.
-
- * m/hp800.h, m/sr2k.h, m/ns16000.h, m/wicat.h (bcopy, bzero)
- (bcmp): Don't define.
-
- * m/delta.h (bcopy, bzero, bcmp, alloca): Don't define.
-
- * m/amdahl.h: Don't define LIB_STANDARD.
-
- * m/alpha.h: Move OSF1 stuff from here to s/osf1.h.
-
- * s/osf1.h: Move OSF1 stuff from m/alpha.h to here.
-
- * s/irix4-0.h, s/irix5-0.h, m/powerpcle.h, m/sparc.h:
- Don't include alloca.h.
-
- * s/aix3-2.h (HAVE_FSYNC): Don't define.
-
- * regex.c (_GNU_SOURCE): Don't define.
-
- * process.c (_GNU_SOURCE): Don't define.
-
- * fileio.c (_GNU_SOURCE, HAVE_FSYNC): Don't define.
-
-2002-11-18 Markus Rost <rost@math.ohio-state.edu>
-
- * s/sol2-8.h: Include sol2-6.h.
-
-2002-11-18 Miles Bader <miles@gnu.org>
-
- * dispextern.h (struct face): Add `overstrike' field.
- * xterm.c (x_draw_glyph_string_foreground)
- (x_draw_composite_glyph_string_foreground): Implement overstriking.
- * xfaces.c (load_face_font): Set `face->overstrike' based on
- result from choose_face_font.
- (best_matching_font, choose_face_font): Add `needs_overstrike'
- argument, and use it to return whether overstriking is desirable
- for this face/font combo.
- (set_font_frame_param: Pass new argument to choose_face_font.
-
-2002-11-17 Ben Key <BKey1@tampabay.rr.com>
-
- This change is my fix for the following entry in etc/PROBLEMS:
- "Emacs built on Windows 9x/ME crashes at startup on Windows XP,
- or Emacs builtpart of on XP crashes at startup on Windows 9x/ME."
-
- * w32.c: Added wrapper functions around the win32 API functions
- OpenProcessToken, GetTokenInformation, LookupAccountSid, and
- GetSidIdentifierAuthority. These wrapper functions serve two
- purposes:
- 1. They ensure that the wrapped function can never be called
- when Emacs is running on an operating system on which they are
- not supported (Microsoft Windows 95 / 98 / ME).
- 2. They call the wrapped functions via function pointers rather
- than calling them directly. This avoids taking advantage of the
- undocumented fact that although these functions are not supported
- in the 9x branch of Microsoft Windows, the functions do exist in
- the version of advapi32.dll that is found in the 9x branch of
- Microsoft Windows.
-
- * w32.c (init_user_info): Replace the calls to the win32 API
- functions OpenProcessToken, GetTokenInformation, LookupAccountSid,
- and GetSidIdentifierAuthority with calls to the newly added
- wrapper functions.
-
- * w32.h: Added extern declarations for the following functions:
- syms_of_w32term, syms_of_w32fns, syms_of_w32select,
- syms_of_w32menu, and void syms_of_fontset.
-
- * w32fns.c (w32_wnd_proc): Add code to reinitialize the
- function pointer track_mouse_event_fn in the handler for the
- WM_SETFOCUS message.
-
- * w32menu.c (initialize_frame_menubar): Add code to
- reinitialize the function pointers set_menu_item_info and
- get_menu_item_info.
-
-2002-11-17 Ben Key <BKey1@tampabay.rr.com>
-
- * sound.c: Added a partial implementation of play-sound-internal
- for Microsoft Windows. Added various #ifdef / #else / #endif
- code blocks to separate the code that will compile under
- Microsoft Windows from the code that is specific to GNU/Linux.
- Moved several blocks of code around to make this separation of code
- into Windows compatible and GNU/Linux compatible code blocks easier.
-
- * makefile.w32-in: Include sound.c and link with WinMM.lib.
-
- * s/ms-w32.h: Defined the symbol HAVE_SOUND so that the newly
- added support for play-sound-internal under Windows would be
- included in the build of Emacs.
-
-2002-11-16 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_load_system_font): Don't disable Cleartype.
-
- * w32term.c (w32_get_glyph_string_clip_rect): Clip cursor tightly.
-
-2002-11-15 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (command_loop_1): Fix int/Lisp_Object mixup.
- (adjust_point_for_property): Move out of display and invisible even if
- we were already inside before (in case a property was added while
- we weren't looking). Be more careful when handling invisible props.
- Skip invisible text as if it really wasn't there at all.
-
-2002-11-15 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_draw_image_foreground)
- (w32_draw_image_foreground_1): Use standard copy and invert
- operations to draw images.
-
- * w32fns.c (x_create_x_image_and_pixmap): Fill in palette for
- depth of 1.
- (xbm_read_bitmap_data): Invert bits as xbm is read in.
- (XPutPixel): Don't invert bits here.
-
-2002-11-15 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_draw_image_foreground, x_draw_image_glyph_string)
- (w32_draw_image_foreground_1): Handle image masks.
- (x_draw_image_glyph_string): Don't BitBlt transparently.
-
- * w32fns.c (w32_defined_color): Adjust RGB values for Emacs.
- (x_from_xcolors): Adjust RGB values for W32.
- (image_background, image_background_transparent)
- (postprocess_image, x_to_xcolors, x_disable_image)
- (x_build_heuristic_mask): Adapt for W32 and enable.
- (x_create_x_image_and_pixmap): Mark images with palettes as such.
- (xbm_load): Remove unused variable.
-
-2002-11-14 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer): Doc fix.
-
-2002-11-14 Dave Love <fx@gnu.org>
-
- * alloc.c (SETJMP_WILL_NOT_WORK): Add note.
-
- * xterm.c (x_draw_relief_rect, x_draw_box_rect, x_update_cursor):
- * xmenu.c (unuse_menu_items, digest_single_submenu):
- * xfns.c (x_put_x_image):
- * xdisp.c (message2_nolog, set_message):
- * undo.c (record_point):
- * terminfo.c (tparam):
- * syntax.c (scan_sexps_forward):
- * scroll.c (calculate_scrolling, calculate_direct_scrolling):
- * composite.c (update_compositions):
- * cm.c (calccost, cmgoto):
- * charset.c (c_string_width): Declare all args (per C99).
-
- * frame.h (get_specified_cursor_type, get_window_cursor_type): Declare.
-
- * lisp.h (get_specified_cursor_type, get_window_cursor_type):
- Don't declare.
-
- * emacs.c (main) [!VMS]: Avoid third arg.
-
- * fns.c (Fcopy_sequence): Doc fix.
- (Fmap_char_table): Cast `call2'.
-
-2002-11-14 Francesco Potort,Al(B <pot@gnu.org>
-
- * s/sol2-8.h: New file.
-
-2002-11-14 Kim F. Storm <storm@cua.dk>
-
- * buffer.c (syms_of_buffer) <mode-line-format>: Document symbol
- dependency on `risky-local-variable' and the :propertize form.
-
-2002-11-12 Stefan Monnier <monnier@cs.yale.edu>
-
- * fns.c (Fmap_char_table): Don't use map_char_table's function arg.
-
- * syntax.c (scan_sexps_forward): Undo last patch.
- Use a more obvious fix: check eob before updating the syntax table.
-
-2002-11-09 Stefan Monnier <monnier@cs.yale.edu>
-
- * syntax.c (scan_sexps_forward): Update syntax table before reading
- a char rather than after so we don't update the table past eob.
-
-2002-11-09 Dave Love <fx@gnu.org>
-
- * buffer.c (Fset_buffer_major_mode): Fix last change.
-
- * regex.c (regexec): Fix pmatch declaration.
-
- * cmds.c (Fself_insert_command): Apply Vtranslation_table_for_input.
-
- * keyboard.c (command_loop_1): Apply Vtranslation_table_for_input
- to self-inserting characters.
- (syms_of_keyboard) <keyboard-translate-table>: Doc fix.
-
- * coding.c (Vtranslation_table_for_input): New.
- (syms_of_coding): DEFVAR it.
-
-2002-11-08 Juanma Barranquero <lektu@terra.es>
-
- * w32term.c (w32_draw_fringe_bitmap): Remove unused local variable
- window.
-
-2002-11-08 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * process.c (Fformat_network_address): Remove unused locals p,
- cp, and i.
-
-2002-11-06 Dave Love <fx@gnu.org>
-
- * buffer.c (Qset_buffer_major_mode_hook): New.
- (Fset_buffer_major_mode): Use it.
-
-2002-11-06 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (x_term_init): Use turn_on_atimers, not start_polling
- and stop_polling.
-
- * process.c (wait_reading_process_input):
- Test POLLING_PROBLEM_IN_SELECT, not hpux.
- Avoid initialization for auto Lisp_Object var.
-
- * s/hpux11.h (POLLING_PROBLEM_IN_SELECT): Add #undef.
-
- * s/hpux10.h (POLLING_PROBLEM_IN_SELECT): Defined.
-
-2002-11-05 Richard M. Stallman <rms@gnu.org>
-
- * s/sol2-5.h (BROKEN_SIGIO): Turn off the #undef.
-
- * callint.c (Fcall_interactively): New local filter_specs.
- (Fcall_interactively): Check for progn as well as let.
- Add a gcpro.
- (Qprogn): New variable.
- (syms_of_callint): Staticpro and init Qprogn.
-
-2002-11-04 John Paul Wallington <jpw@shootybangbang.com>
-
- * lread.c (Feval_buffer): Doc fix.
-
-2002-11-04 Dave Love <fx@gnu.org>
-
- * keyboard.c (read_char): Always translate iff
- Vkeyboard_translate_table is a char table and c is valid.
-
- * xterm.c (XTread_socket): Check Lisp types for Vx_keysym_table
- and fix C types.
-
-2002-11-03 Stefan Monnier <monnier@cs.yale.edu>
-
- * xdisp.c (single_display_prop_intangible_p): Strings are intangible.
-
- * editfns.c (get_pos_property): Don't hardcode Qfield.
-
- * keyboard.c (adjust_point_for_property): Handle `display' prop on
- overlays. Also handle `invisible' prop.
-
-2002-11-02 Stefan Monnier <monnier@cs.yale.edu>
-
- * coding.c (decode_coding_emacs_mule, decode_coding_iso2022)
- (decode_coding_sjis_big5, decode_eol): Allow lone \r in DOS EOL.
-
-2002-11-01 Andreas Schwab <schwab@suse.de>
-
- * editfns.c (Fmessage): Revert last change to properly handle %%.
-
-2002-11-01 Stefan Monnier <monnier@cs.yale.edu>
-
- * xmenu.c (unuse_menu_items): New fun.
- (menu_items_inuse): New var.
- (syms_of_xmenu): Initialize it.
- (init_menu_items): Use it to detect re-entrance.
- (Fx_popup_menu, Fx_popup_dialog, set_frame_menubar): Reset when done.
- (Fx_popup_menu): Remove spurious XSETFRAME.
-
- * editfns.c (find_field): Make an exception for nil fields.
-
-2002-11-01 Dave Love <fx@gnu.org>
-
- * m/gec63.h: Deleted.
-
-2002-10-31 Dave Love <fx@gnu.org>
-
- * xterm.c (XTread_socket): Fix last change.
- (xaw_scroll_callback): Cast call_data to long to avoid warning.
-
-2002-10-31 Stefan Monnier <monnier@cs.yale.edu>
-
- * process.c (Fformat_network_address): Fix int/Lisp_Object mixup.
-
-2002-10-30 Stefan Monnier <monnier@cs.yale.edu>
-
- * editfns.c (overlays_around, get_pos_property): New funs.
- (find_field): Use them.
- Also be careful not to modify POS before its last use.
- (Fmessage): Don't Fformat if there's nothing to format.
-
-2002-10-30 Dave Love <fx@gnu.org>
-
- * process.c [HAVE_SYS_WAIT]: Include sys/wait.h.
- [HAVE_PTY_H]; Include pty.h.
-
- * lread.c (Fload) <!load_dangerous_libraries>: Close fd.
-
- * xterm.c (Qeql): Declare.
- (Vx_keysym_table): New.
- (syms_of_xterm): Initialize it.
- (XTread_socket): Use it. Deal with ASCII keysyms.
- (XSetIMValues) [HAVE_X11R6]: Prototype.
-
- * keyboard.c (lispy_accent_codes, lispy_accent_keys): Extended.
- (lispy_kana_keys): Comment out.
- (make_lispy_event) [XK_kana_A]: Comment out.
- (modify_event_symbol) <sizeof (long) == sizeof (EMACS_INT)>:
- Fix sprintf call.
-
- * s/osf5-0.h (C_SWITCH_SYSTEM): Revert last change (fixed by
- regexp.h change).
- (TERMINFO, LIBS_TERMCAP): Define.
-
- * s/usg5-4.h (bcopy, bzero): Define conditional on HAVE_BCOPY.
- (bcmp): Define conditional on HAVE_BCMP.
- (NO_SIOCTL_H): Don't define.
- (TIOCSIGSEND): Don't make conditional on IRIX6.
-
- * s/sol2-5.h: Don't include strings.h.
- (bcopy, bzero, bcmp) [HAVE_BCOPY]: Don't undef.
-
- * s/irix6-0.h (IRIX6): Don't define.
- (bcopy, bcmp, bzero): Don't undef.
-
- * s/irix6-5.h: Don't include strings.h.
- (IRIX6): Don't define.
- (bcopy, bcmp, bzero): Don't undef.
-
- * syntax.c (Fforward_comment): Doc fix.
-
-2002-10-29 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fsignal_process): Allow PROCESS to be specified by
- name in addition to pid (as integer or string).
-
-2002-10-28 Harald Maier <Harald.Maier.BW@t-online.de> (tiny change)
-
- * w32heap.c: Don't redefine _heap_init and _heap_term on MSVC 7 build
- environments.
-
-2002-10-27 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (note_mouse_highlight): Don't use mouse-face if hidden.
-
- * w32term.c (note_mouse_highlight): Don't use mouse-face if hidden.
-
- * msdos.c (IT_note_mouse_highlight): Don't use mouse-face if hidden.
-
- * macterm.c (note_mouse_highlight): Don't use mouse-face if hidden.
-
-2002-10-26 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fformat): Detect invalid format letters for floats.
-
-2002-10-25 Kenichi Handa <handa@m17n.org>
-
- * xfns.c (x_set_name): Encode by Qcompound_text unconditionally.
- (x_set_title): Likewise.
-
-2002-10-25 Juanma Barranquero <lektu@terra.es>
-
- * macgui.h:
- * w32gui.h: Remove definition of XColor.
-
- * dispextern.h [!HAVE_X_WINDOWS]: Define XColor.
-
-2002-10-24 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (get_window_cursor_type): New arg ACTIVE_CURSOR.
- Callers changed (supply dummy arg).
-
- * lisp.h (get_window_cursor_type): Update prototype.
-
- * w32term.c (x_display_and_set_cursor): Get active_cursor from
- get_window_cursor_type to track system caret.
-
-2002-10-24 Kim F. Storm <storm@cua.dk>
-
- * process.c (Fformat_network_address): New function.
- (syms_of_process): Defsubr it.
- (list_processes_1): Use it to format :local/:remote address if
- service/host is not set; before Emacs would crash in that case.
- (Fmake_network_process): Don't use Ffind_operation_coding_system
- to setup coding system if host or service is not set.
-
-2002-10-23 Juanma Barranquero <lektu@terra.es>
-
- Patch suggested by Jay Finger <jay_finger@hotmail.com>.
-
- * w32term.c (w32_term_init): Pass XColor to w32_define_color, not
- COLORREF.
-
- * macgui.h:
- * w32gui.h: Add definition of XColor.
-
- * macfns.c:
- * w32fns.c:
- * xfaces.c: Remove definition of XColor.
-
-2002-10-22 Stefan Monnier <monnier@cs.yale.edu>
-
- * xfns.c (x_set_name, x_set_title): `icon.value' has unsigned char.
-
- * window.c (window_loop): For GET_LRU_WINDOW and GET_LARGEST_WINDOW>,
- Only ignore truly dedicated windows. For UNSHOW_BUFFER, delete the
- window if it is dedicated.
- (Fshrink_window): Add preserve_before as was done for enlarge_window.
- (Vspecial_display_function): Update docstring.
-
- * buffer.c (assoc_ignore_text_properties, Fother_buffer, Fkill_buffer)
- (call_overlay_mod_hooks): Use CONSP and XCAR/XCDR.
- (Fget_buffer_create, advance_to_char_boundary): Use BEG and BEG_BYTE;
-
-2002-10-21 Stefan Monnier <monnier@cs.yale.edu>
-
- * casefiddle.c (casify_region): Don't treat a prefix char as part
- of a word when at the beginning.
-
-2002-10-17 Juanma Barranquero <lektu@terra.es>
-
- * lread.c (syms_of_lread): Fix typos.
-
-2002-10-17 Dave Love <fx@gnu.org>
-
- * Makefile.in (TEMACS_LDFLAGS): Add trailing comment.
-
-2002-10-16 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fcopy_file): Fix backward test of KEEP_TIME.
-
-2002-10-14 Juanma Barranquero <lektu@terra.es>
-
- * w16select.c (syms_of_win16select): Fix docstring for
- `selection-coding-system'.
-
- * w32select.c (syms_of_w32select): Likewise.
-
-2002-10-14 Stefan Monnier <monnier@cs.yale.edu>
-
- * syntax.c (scan_lists): Don't get fooled by a symbol ending with
- a backslash-quoted char.
- (scan_lists, scan_sexps_forward): Pacify the compiler.
-
-2002-10-13 Richard M. Stallman <rms@gnu.org>
-
- * window.c (window_scroll): Set immediate_quit.
-
- * print.c (print): When backquote form is the car of a list,
- output in old style. Use old_backquote_output to output all
- comma forms inside it in old style too.
-
- * buffer.h (struct buffer): Move `undo_list' down below `name'.
-
-2002-10-11 Markus Rost <rost@math.ohio-state.edu>
-
- * emacs.c (syms_of_emacs) <kill-emacs-hook>: Doc fix (not run in
- batch mode).
-
- * lread.c (Fload): Doc fix (load-suffixes).
-
-2002-10-10 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (syms_of_macterm, mac_get_mouse_btn):
- Reverse functionality of mac-wheel-button-is-mouse-2 to be correct.
- Also switch the default to Qnil from Qt.
-
-2002-10-08 Kenichi Handa <handa@m17n.org>
-
- * coding.c (code_convert_region): When we need more GAP for
- conversion, pay attention to the case that coding->produced is not
- greater than coding->consumed.
-
-2002-10-07 Richard M. Stallman <rms@gnu.org>
-
- * unexelf.c (unexec): Redo 9/16 change, but only if IRIX6_5.
-
-2002-10-06 Andrew Choi <akochoi@shaw.ca>
-
- * macmenu.c (mac_menu_show): Add j to count menu items; match
- menu_item_selection to it to find selected item.
-
-2002-10-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (XTread_socket): Fix from 2002-10-03 didn't cover all
- cases. The correct fix is to pass ReparentNotify to Xt.
- The shell widget interprets ConfigureNotify differently depending
- on if it has been reparented or not.
-
-2002-10-05 Markus Rost <rost@math.ohio-state.edu>
-
- * editfns.c (Fformat_time_string): Doc fix.
-
-2002-10-05 John Paul Wallington <jpw@shootybangbang.com>
-
- * fns.c (Flength): Doc fix.
-
-2002-10-04 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (keyremap): New struct.
- (read_key_sequence): Use it: globally replace keytran_foo with
- keytran.foo and fkey_foo with fkey.foo. Rename temp vars
- keytran_next and fkey_next to just `next'.
-
-2002-10-04 Steven Tamm <steventamm@mac.com>
-
- * macterm.c (keycode_to_xkeysym_table): Change return to be
- treated like an X keysym.
-
-2002-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.c (XTread_socket): For ConfigureNotify, with x and y == 0,
- and USE_MOTIF, call XTranslateCoordinates to get the real x and y.
- This is to also handle x/y changes that occur because of a resize.
-
-2002-10-02 John Paul Wallington <jpw@shootybangbang.com>
-
- * frame.c (Vdelete_frame_functions): New variable.
- (syms_of_frame): Initialize and defvar it.
- (Fdelete_frame): Use it instead of delete-frame-hook. Don't run
- it when frame's `tooltip' parameter is non-nil.
-
- * xfns.c (x_create_tip_frame): Set `tooltip' frame parameter to t.
-
- * w32fns.c (x_create_tip_frame): Likewise.
-
- * macfns.c (x_create_tip_frame): Likewise.
-
-2002-09-30 Kenichi Handa <handa@m17n.org>
-
- * xterm.c (x_encode_char): For DIM=1 charset, set ccl->reg[2] to
- -1 before calling ccl_driver.
-
- * coding.c (decode_coding_emacs_mule): Check coding->cmp_data.
- Only when it is non-nil, handle composition sequence.
- (setup_coding_system) <0>: Don't force composition handling.
-
- * Makefile.in (lisp, shortlisp): Add utf-16.elc.
-
-2002-09-29 Richard M. Stallman <rms@gnu.org>
-
- * search.c (Freplace_match): Adjust match data for the substitution
- just made in the buffer.
-
- * xdisp.c (STOP_POLLING, RESUME_POLLING): New macros.
- (redisplay_internal): Use them. Do RESUME_POLLING at end of function.
-
-2002-09-27 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (STOP_POLLING, RESUME_POLLING): New macros.
- (read_char): Use them. Do all exits thru the end of the function.
-
-2002-09-27 Kenichi Handa <handa@etl.go.jp>
-
- * xfaces.c (try_font_list): Pay attention to the case that FAMILY
- is nil.
-
-2002-09-26 Richard M. Stallman <rms@gnu.org>
-
- * regex.h (__restrict_arr): Don't define if already defined.
-
- * coding.c (run_pre_post_conversion_on_str):
- Save and restore Vdeactivate_mark.
-
-2002-09-26 John Paul Wallington <jpw@shootybangbang.com>
-
- * minibuf.c (Fminibufferp): Add an optional `buffer' argument.
-
-2002-09-26 Kenichi Handa <handa@etl.go.jp>
-
- * xfaces.c (try_font_list): New arg PREFER_FACE_FAMILY. If it is
- nonzero, try face's family at first. Otherwise try FAMILY at first.
- (choose_face_font): If C is a single byte char or latin-1, call
- try_font_list with PREFER_FACE_FAMILY 1.
-
-2002-09-21 Richard M. Stallman <rms@gnu.org>
-
- * window.c (select_window_1): Don't select frame.
- Set frame's selected window only when frame itself is selected.
- (Fselect_window): Doc fix.
-
-2002-09-18 Kim F. Storm <storm@cua.dk>
-
- * process.c (make-network-process): Doc fix (there is no
- network-server-log-function hook).
-
-2002-09-18 Richard M. Stallman <rms@gnu.org>
-
- * print.c (print): Clear out the unused parts of Vprint_number_table.
- (syms_of_print): Doc fix for `print-number-table'.
-
- * unexelf.c (unexec): Undo previous change.
-
-2002-09-17 Andreas Schwab <schwab@suse.de>
-
- * m/alpha.h [LINUX]: Don't define DATA_START.
-
-2002-09-16 Dave Love <fx@gnu.org>
-
- * unexelf.c (unexec): Deal with .got, reinstating change from
- 25-08-1999.
-
-2002-09-13 Richard M. Stallman <rms@gnu.org>
-
- * s/sol2-6.h (UNEXEC): Comment out definition.
-
- * unexsol.c (unexec): Don't downcase first letter of error msg.
-
- * xfaces.c (Fcolor_supported_p): Just one arg is required.
-
-2002-09-12 Markus Rost <rost@math.ohio-state.edu>
-
- * unexsol.c: Include buffer.h, charset.h, coding.h.
-
-2002-09-11 Richard M. Stallman <rms@gnu.org>
-
- * unexsol.c: Don't use report_file_error; do it by hand
- using dlerror.
-
- * process.c (wait_reading_process_input, both versions):
- Before calling turn_on_atimers, call stop_polling.
-
- * emacs.c (syms_of_emacs) <command-line-args>: Doc fix.
-
- * xdisp.c (try_scrolling): If after make_cursor_line_fully_visible
- we go to too_near_end, call clear_glyph_matrix.
- (redisplay_window): After make_cursor_line_fully_visible,
- call clear_glyph_matrix and bypass `goto done'.
-
- * xfns.c (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
- and we have non-toolkit scroll bars, return nil for scroll-bar-width.
-
-2002-09-10 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fdo_auto_save): Catch error making directory.
- Only call push_message if we need to.
- At the same time, make an unwind-protect to pop it.
- Rename local message_p to old_message_p.
- (do_auto_save_make_dir, do_auto_save_eh): New functions.
- (do_auto_save_unwind): Don't call pop_message.
-
- * lisp.h (pop_message_unwind): Renamed from push_message_unwind.
-
- * keyboard.c (Fexecute_extended_command): Use pop_message_unwind.
-
- * alloc.c (Fgarbage_collect): Use pop_message_unwind.
-
- * xdisp.c (pop_message_unwind): Renamed from push_message_unwind.
-
-2002-09-10 Stefan Monnier <monnier@cs.yale.edu>
-
- * regex.c (DISCARD_FAILURE_REG_OR_COUNT): Delete.
- (CHECK_INFINITE_LOOP): Don't pop anything: just set `cycle' to 1.
- (re_match_2_internal): Be more careful with infinite loops.
-
-2002-09-10 Kim F. Storm <storm@cua.dk>
-
- * macros.c (end_kbd_macro): New function.
- (Fend_kbd_macro): Use it.
-
- * macros.h (end_kbd_macro): Declare extern.
-
- * keyboard.c (Fdiscard_input): If defining keyboard macro,
- end and save it instead of discarding it.
-
-2002-09-09 Markus Rost <rost@math.ohio-state.edu>
-
- * s/sol2-6.h: Fix typo. Add comment.
-
-2002-09-09 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (regnum_t): Use signed int, not unsigned int.
-
- * s/sol2-6.h: New file.
-
- * s/sol2-5.h (UNEXEC): Definition deleted.
-
-2002-09-08 Kim F. Storm <storm@cua.dk>
-
- * macros.c (executing_macro_index): Change type to EMACS_INT.
- (syms_of_macros): DEFVAR_INT it (needed by kmacro).
-
- * macros.h (executing_macro_index): Change type to EMACS_INT.
-
-2002-09-06 Richard M. Stallman <rms@gnu.org>
-
- * casetab.c (set_case_table): Make canon table point to eqv table.
-
-2002-09-06 Juanma Barranquero <lektu@terra.es>
-
- * coding.c (syms_of_coding): Fix spacing.
-
- * composite.c (Fcompose_region_internal)
- (Fcompose_string_internal): Likewise.
-
- * data.c (Flsh): Likewise.
-
- * fontset.c (Fset_fontset_font): Likewise.
-
- * macfns.c (Fx_server_max_request_size): Likewise.
-
- * w16select.c (syms_of_win16select): Likewise.
-
- * w32select.c (syms_of_w32select): Likewise.
-
- * xselect.c (syms_of_xselect): Likewise.
-
-2002-09-05 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (set_image_of_range_1): In no-TRANSLATE case,
- call EXTEND_RANGE_TABLE and return a proper value.
- (set_image_of_range): Don't call set_image_of_range_1
- if no TRANSLATE or if range includes all of Latin-1.
- Only call it for the Latin-1 part of the range.
- For other cases, make two separate ranges,
- one for the original specified characters and one for
- their case-conversions.
-
-2002-09-04 Richard M. Stallman <rms@gnu.org>
-
- * s/sol2-5.h (UNEXEC): Use unexsol.o.
-
- * window.c (displayed_window_lines): Correct for one-off bug
- in HEIGHT on non-window displays.
-
- * regex.c (set_image_of_range_1): New function.
- (set_image_of_range): Use set_image_of_range_1 for Latin-1.
- Return a value to indicate running out of memory.
- (SET_RANGE_TABLE_WORK_AREA): Check value from set_image_of_range.
- (extend_range_table_work_area): New subroutine.
- (EXTEND_RANGE_TABLE): Replaces EXTEND_RANGE_TABLE_WORK_AREA.
- Different calling conventions, and used from set_image_of_range{,_1}.
- (IMMEDIATE_QUIT_CHECK): Definitions moved.
-
-2002-09-04 Juanma Barranquero <lektu@terra.es>
-
- * makefile.w32-in: All dependencies updated.
-
-2002-09-01 Richard M. Stallman <rms@gnu.org>
-
- * unexsol.c: New file.
-
- * xfns.c (Qbox): Declare external, don't define.
-
- * xdisp.c (redisplay_window) <force-start case>:
- If point is on semi-visible last line, reposition
- it at previous line.
-
- * alloc.c (display_malloc_warning): Use display-warning.
- (malloc_warning_1): Function deleted.
-
- * alloc.c [ALLOC_DEBUG]: #undef INLINE.
-
- * lread.c (read1): Handle #! by skipping the line.
-
-2002-08-31 Richard M. Stallman <rms@gnu.org>
-
- * Makefile.in (TEMACS_LDFLAGS): Renamed from ALL_LDFLAGS.
- Don't include LDFLAGS.
- (temacs): Pass LDFLAGS separately, and not via YMF_PASS_LDFLAGS.
-
-2002-08-31 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xdisp.c (get_window_cursor_type): Don't use x_highlight_frame
- member of x_display_info unless we compile for some window system.
-
-2002-08-31 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (Valternate_cursor_type, Qalternate_cursor_type): Removed.
- (get_window_cursor_type): Don't use them.
- (syms_of_xdisp): Remove intern, staticpro, and defvar for them.
-
-2002-08-30 Kenichi Handa <handa@etl.go.jp>
-
- * xdisp.c (get_next_display_element): Fix previous change.
-
-2002-08-30 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (expose_overlaps): New function (merge code from xterm.c).
- (expose_window): Use it to fix the display of overlapping
- rows (merge code from xterm.c).
-
- * macfns.c (Qbox): Add extern declaration.
-
-2002-08-30 Juanma Barranquero <lektu@terra.es>
-
- * w32fns.c (Qbox): Make extern.
- (syms_of_w32fns): Remove initialization of Qbox.
-
-2002-08-30 Rune Kleveland <runekl@viewpoint.no> (tiny change)
-
- * xfns.c (Fx_open_connection): Fix error message.
-
-2002-08-30 Kim F. Storm <storm@cua.dk>
-
- The following changes consolidates the handling of the cursor
- type in xdisp.c, moving duplicate code and functionality from
- xfns.c, xterm.c, w32fns.c, w32term.c, macfns.c, and macterm.c.
-
- * frame.h (enum text_cursor_kinds): Consolidated here.
- Added DEFAULT_CURSOR value.
- (struct frame) <desired_cursor, cursor_width>
- <blink_off_cursor, blink_off_cursor_width>: New fields.
- Consolidated from output_x, output_w32 and output_mac structs.
- (FRAME_DESIRED_CURSOR, FRAME_CURSOR_WIDTH, FRAME_BLINK_OFF_CURSOR)
- (FRAME_BLINK_OFF_CURSOR_WIDTH): Macros consolidated here.
-
- * xdisp.c (Qbar, Qhbar, Qbox, Qhollow, Vblink_cursor_alist):
- Variables consolidated here.
- (Valternate_cursor_type, Qalternate_cursor_type): New variables.
- (Vcursor_in_non_selected_windows): Renamed from
- cursor_in_non_selected_windows and changed to Lisp_Object.
- (syms_of_xdisp): Define and staticpro new and moved variables.
- (get_specified_cursor_type): Renamed from x_specified_cursor_type;
- consolidated here. Recognize Qhollow setting.
- (set_frame_cursor_types): New function to set frame cursor types
- based on the frame parameters.
- (get_window_cursor_type): New function to calculate new cursor
- type and width for the specified window. Based on duplicated
- code consolidated here.
- Enhancements: cursor-in-non-selected-windows may be a cursor type,
- check buffer-local alternate-cursor-type and blink-cursor-alist
- before using built-in blink off methods.
-
- * dispextern.h (cursor_in_non_selected_windows): Extern removed.
-
- * lisp.h (Qcursor_in_non_selected_windows): Extern removed.
- (get_specified_cursor_type, get_window_cursor_type)
- (set_frame_cursor_types): Added prototypes.
-
- * macfns.c (x_specified_cursor_type): Removed.
- (x_set_cursor_type): Use set_frame_cursor_types.
- (Qbar, Qbox): Removed.
- (syms_of_macfns): Don't intern or staticpro them.
-
- * macterm.c (x_specified_cursor_type): Remove prototype.
- (x_draw_bar_cursor): Use FRAME_CURSOR_WIDTH.
- (x_display_and_set_cursor): Use get_window_cursor_type.
- Remove unused local variables cursor_non_selected, active_cursor.
- Redraw cursor if hbar cursor width changes.
- (make_mac_frame): Set FRAME_DESIRED_CURSOR.
-
- * macterm.h (enum text_cursor_kinds): Removed.
- (struct output_mac) <current_cursor, desired_cursor, cursor_width>
- <blink_off_cursor, blink_off_cursor_width>: Members removed.
- (FRAME_DESIRED_CURSOR): Macro removed.
-
- * w32fns.c (Vblink_cursor_alist): Removed.
- (Qbar, Qhbar, Qbox, Qhollow): Removed.
- (syms_of_w32fns): Don't intern, staticpro, or define them.
- (x_specified_cursor_type): Removed.
- (x_set_cursor_type): Use set_frame_cursor_types.
-
- * w32term.c (x_specified_cursor_type): Remove prototype.
- (x_draw_bar_cursor): Use FRAME_CURSOR_WIDTH.
- (x_display_and_set_cursor): Use get_window_cursor_type.
- Remove unused local variables cursor_off_state.
- Redraw cursor if hbar cursor width changes.
- Changed all occurrences of w32_highlight_frame to x_highlight_frame.
-
- * w32term.h (enum text_cursor_kinds): Removed.
- (struct output_w32) <current_cursor, desired_cursor, cursor_width>
- <blink_off_cursor, blink_off_cursor_width>: Members removed.
- (FRAME_DESIRED_CURSOR, FRAME_CURSOR_WIDTH, FRAME_BLINK_OFF_CURSOR)
- (FRAME_BLINK_OFF_CURSOR_WIDTH): Macros removed.
- (struct w32_display_info) <x_highlight_frame>: Renamed member from
- w32_highlight_frame.
-
- * xfns.c (Vblink_cursor_alist): Removed.
- (Qbar, Qhbar, Qbox, Qhollow): Removed.
- (syms_of_xfns): Don't intern, staticpro, or define them.
- (x_specified_cursor_type): Removed.
- (x_set_cursor_type): Use set_frame_cursor_types.
-
- * xterm.c (x_specified_cursor_type): Remove prototype.
- (x_draw_bar_cursor): Use FRAME_CURSOR_WIDTH.
- (x_display_and_set_cursor): Use get_window_cursor_type.
- Remove unused local variables cursor_off_state.
- Redraw cursor if hbar cursor width changes.
-
- * xterm.h (enum text_cursor_kinds): Removed.
- (struct output_x) <current_cursor, desired_cursor, cursor_width>
- <blink_off_cursor, blink_off_cursor_width>: Members removed.
- (FRAME_DESIRED_CURSOR, FRAME_CURSOR_WIDTH, FRAME_BLINK_OFF_CURSOR)
- (FRAME_BLINK_OFF_CURSOR_WIDTH): Macros removed.
- (x_specified_cursor_type): Remove prototype.
-
-2002-08-28 Richard M. Stallman <rms@gnu.org>
-
- * w32fns.c (x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and
- FRAME_BLINK_OFF_CURSOR_WIDTH using defaults and Vblink_cursor_alist.
- (Vblink_cursor_alist): New variable.
- (syms_of_w32fns): Initialize and defvar it.
- (x_specified_cursor_type): Recognize Qbox for filled box.
- Exceptions are hollow boxes.
- (Qbox, Qhollow): New variables.
- (syms_of_w32fns): Initialize and staticpro them.
-
- * w32term.h (FRAME_BLINK_OFF_CURSOR, FRAME_BLINK_OFF_CURSOR_WIDTH):
- New macros.
- (struct w32_output): New fields blink_off_cursor,
- blink_off_cursor_width.
- (FRAME_CURSOR_WIDTH): New macro.
-
- * w32term.c (x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
- and FRAME_BLINK_OFF_CURSOR_WIDTH for blinking cursor off.
-
- * w32term.c (x_display_and_set_cursor): Check FRAME_CURSOR_WIDTH
- for bar cursor.
-
- * w32term.c (expose_overlaps): New function.
- (expose_window): Use it to fix the display of overlapping rows.
-
-2002-08-28 Simon Josefsson <jas@extundo.com>
-
- * xfns.c (Fx_open_connection): Improve help when X connection
- fails, xhost is insecure and xauth is better.
-
-2002-08-28 Juanma Barranquero <lektu@terra.es>
-
- * makefile.w32-in: Add missing dependencies on w32term.h and
- composite.h.
-
- * emacs.c (USAGE1): Add missing newline.
-
-2002-08-27 Andrew Choi <akochoi@shaw.ca>
-
- * s/darwin.h [HAVE_LIBNCURSES]: Define HAVE_TERMINFO.
-
-2002-08-27 Richard M. Stallman <rms@gnu.org>
-
- * xfns.c (x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and
- FRAME_BLINK_OFF_CURSOR_WIDTH using defaults and Vblink_cursor_alist.
- (Vblink_cursor_alist): New variable.
- (syms_of_xfns): Initialize and defvar it.
- (x_specified_cursor_type): Recognize Qbox for filled box.
- Exceptions are hollow boxes.
- (Qbox, Qhollow): New variables.
- (syms_of_xfns): Initialize and staticpro them.
-
- * xterm.h (FRAME_BLINK_OFF_CURSOR, FRAME_BLINK_OFF_CURSOR_WIDTH):
- New macros.
- (struct x_output): New fields blink_off_cursor, blink_off_cursor_width.
-
- * xterm.c (x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
- and FRAME_BLINK_OFF_CURSOR_WIDTH for blinking cursor off.
-
- * emacs.c (main): Handle --script.
- (USAGE1): Mention --script.
- (standard_args): Define sort order for --script.
-
-2002-08-27 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xdisp.c (redisplay_updating_p): Variable removed.
- (inhibit_free_realized_faces, Qinhibit_free_realized_faces):
- New variables.
- (init_iterator): Don't free realized faces if
- inhibit_free_realized_faces is set.
- (redisplay_internal): Bind Qinhibit_free_realized_faces to nil.
- (syms_of_xdisp): DEFVAR_BOOL inhibit-free-realized-faces,
- initialize Qinhibit_free_realized_faces.
-
- * dispextern.h (PRODUCE_GLYPHS): Set inhibit_free_realized_faces
- when iterator is adding glyphs to a glyph matrix.
-
-2002-08-27 Kenichi Handa <handa@etl.go.jp>
-
- * xdisp.c (get_next_display_element): In unibyte case, don't use
- octal form for such eight-bit characters that can be converted to
- multibyte char.
-
-2002-08-26 Kim F. Storm <storm@cua.dk>
-
- * frame.c (make_terminal_frame) [CANNOT_DUMP]: Initialize
- foreground and background colors. From Joe Buehler.
-
-2002-08-26 Miles Bader <miles@gnu.org>
-
- * bytecode.c (Fbyte_code): Fsub1 can GC, so protect it.
-
-2002-08-25 Andrew Choi <akochoi@shaw.ca>
-
- * emacs.c (main): Call init_mac_osx_environment if HAVE_CARBON is
- defined instead of MAC_OSX.
-
- * s/darwin.h (select): Define select to sys_select only if
- HAVE_CARBON is defined.
- (HAVE_WORKING_VFORK): #undef it. Define vfork to fork.
- (DONT_REOPEN_PTY): #def it.
-
- * macterm.c (XTread_socket): Remove code to call
- SendEventToEventTarget for keys with command modifiers when
- mac_command_key_is_meta is nil.
-
-2002-08-24 Andreas Schwab <schwab@suse.de>
-
- * eval.c (Fdefvar): Fix last change.
-
-2002-08-23 Richard M. Stallman <rms@gnu.org>
-
- * eval.c (Fdefvar, Fdefconst, Fdefvaralias):
- Record variables in load history as (defvar . VAR).
- (Fdefvar): Don't record in load history if no initial value.
- (Qdefvar): New variable.
- (syms_of_eval): Init and staticpro it.
-
- * lread.c (syms_of_lread): Doc fix.
- (build_load_history): Use Fmember to see if a definition
- is already in the Vload_history element.
-
- * process.c (Fstart_process): Remove /: from program name.
-
- * emacs.c (decode_env_path): Don't add /: if file name handler
- has a `safe-magic' property.
-
- * callproc.c (Fcall_process): Remove /: from program name.
-
-2002-08-23 Stefan Monnier <monnier@cs.yale.edu>
-
- * regex.c (PATFETCH): Remove the translating fetch.
- (PATFETCH_RAW): Rename to PATFETCH.
- (set_image_of_range): New fun.
- (SET_RANGE_TABLE_WORK_AREA): Use it.
- (regex_compile): Don't translate the pattern chars so eagerly.
- Only do it when inserting an `exactn' bytecode or when handling
- a char-range.
- (mutually_exclusive_p): Avoid empty statement.
-
-2002-08-22 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (redisplay_window): Do not `goto try_to_scroll' when we
- end up on a partially visible line; this reverts a specific part
- of the 2002-07-07 change by Richard M. Stallman to "fix" a nasty
- display error which has been reported several times now.
- However it introduces the problem that changes was supposed to fix.
- See my comments in the source if you want to debug this further.
-
-2002-08-20 Kenichi Handa <handa@etl.go.jp>
-
- * abbrev.c (Fexpand_abbrev): Fix for the multibyte case.
-
-2002-08-19 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (croak): Add `void' to definition.
-
- * sysdep.c (request_sigio, unrequest_sigio) [MSDOS]:
- Don't define them, they are defined in msdos.c.
-
- * mem-limits.h [MSDOS]: Declare etext.
-
- * fileio.c (Ffile_name_directory) [DOS_NT]: Don't declare `beg'
- `const' since CORRECT_DIR_SEPS modifies its target.
-
-2002-08-19 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (Fclear_this_command_keys): Add optional arg
- KEEP-RECORD to avoid clearing lossage when we just want to clear
- the current key sequence (kmacro needs this).
-
-2002-08-19 Kenichi Handa <handa@localhost>
-
- * composite.c (run_composition_function): Call FUNC if it is fboundp.
-
- * composite.h (COMPOSITION_MODIFICATION_FUNC): If PROP is not a
- cons, return Qnil.
-
-2002-08-17 Richard M. Stallman <rms@gnu.org>
-
- * s/sol2-5.h (BROKEN_SIGIO): Add #undef.
-
- * sysdep.c [!VMS]: Include sys/files.h.
-
- * editfns.c (save_restriction_restore): Defend from unchained marker.
-
- * buffer.c (overlays_at): Handle extending vec uniformly.
- (overlays_in): Handle extending vec from length 0 as in overlays_at.
-
-2002-08-15 Andrew Choi <akochoi@shaw.ca>
-
- * mac.c (init_mac_osx_environment): New function.
-
- * emacs.c (main) [MAC_OSX]: Call init_mac_osx_environment.
-
-2002-08-14 Kim F. Storm <storm@cua.dk>
-
- * macros.c (Fstart_kbd_macro): Added NO-EXEC argument to inhibit
- executing macro before appending to it (when used from Lisp).
- (Fexecute_kbd_macro): Added LOOPFUNC argument to supply function
- which is called prior to each iteration of macro (for kmacro.el).
- (Fend_kbd_macro, Fcall_last_kbd_macro): Likewise.
-
- * lisp.h (Fexecute_kbd_macro): Update prototype.
-
- * keyboard.c (Fcommand_execute): Update call to Fexecute_kbd_macro.
-
-2002-08-14 Kenichi Handa <handa@etl.go.jp>
-
- * xselect.c (QUTF8_STRING): New variable.
- (symbol_to_x_atom): Pay attention to QUTF8_STRING.
- (x_atom_to_symbol): Likewise.
- (x_get_local_selection): New argument local_request. If it is
- nonzero, call handler_fn with the second arg nil.
- (x_handle_selection_request): Call x_get_local_selection with
- local_request 0.
- (lisp_data_to_selection_data): Don't encode the string here.
- (Fx_get_selection_internal): Call x_get_local_selection with
- local_request 1.
- (syms_of_xselect): Intern and staticpro QUTF8_STRING.
-
- * xterm.c (x_term_init): Initialize dpyinfo->Xatom_UTF8_STRING.
-
- * xterm.h (struct x_display_info): New member Xatom_UTF8_STRING.
-
-2002-08-13 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (Fminibufferp): New function.
- (syms_of_minibuf): Defsubr it.
- (Fminibuffer_prompt_end): Handle non-minibuffers specially.
-
-2002-08-13 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * coding.c (Funencodable_char_position): Lisp_Object/int mixup.
-
-2002-08-12 Richard M. Stallman <rms@gnu.org>
-
- * syswait.h: Only the include of sys/wait.h tests HAVE_SYS_WAIT_H.
- [!VMS] (WCOREDUMP, WEXITSTATUS, WIFEXITED, WIFSTOPPED, WIFSIGNALED)
- (WSTOPSIG, WTERMSIG): Define each one independently if not defined
- already.
-
- * buffer.c (syms_of_buffer) <fill-column>: Doc fix.
-
-2002-08-11 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTmouse_position): Check wp with is_emacs_window.
- (Vmac_pass_command_to_system): New variable.
- (Vmac_pass_control_to_system): New variable.
- (do_mouse_moved): Check wp with is_emacs_window.
- (XTread_socket): Check window_ptr with is_emacs_window.
- Call FrontNonFloatingWindow instead of FrontWindow. Send keydown
- events back to Mac Toolbox for processing, depending on values of
- Vmac_pass_command_to_system and Vmac_pass_control_to_system.
- (syms_of_macterm): DEFVAR_LISP Vmac_pass_command_to_system and
- Vmac_pass_control_to_system.
-
-2002-08-10 Kenichi Handa <handa@etl.go.jp>
-
- * coding.c (unencodable_char_position): New function.
- (Funencodable_char_position): New function.
- (syms_of_coding): Defsubr Funencodable_char_position.
-
-2002-08-10 Andrew Choi <akochoi@shaw.ca>
-
- * mac.c (sys_select) [MAC_OSX]: New function.
-
- * macterm.c (MakeMeTheFrontProcess): New function.
- (mac_initialize): Call MakeMeTheFrontProcess.
-
- * s/darwin.h: Define select to sys_select.
-
-2002-08-09 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (make_lispy_event): Test WINDOWSNT, not WINDOWS_NT.
-
-2002-08-09 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xdisp.c (forward_to_next_line_start): Return 0 when reaching the
- end of the buffer.
-
-2002-08-08 Ken Raeburn <raeburn@gnu.org>
-
- * coding.c (Ffind_operation_coding_system): Fix Lisp_Object/int mixup.
-
- * puresize.h (BASE_PURESIZE): Increase to 910000.
-
-2002-08-08 Kenichi Handa <handa@etl.go.jp>
-
- * coding.c (Ffind_operation_coding_system): For write-region, if
- VISIT is a filename, make it the target.
-
-2002-08-07 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (mark_object): Detect long lists for debugging.
- (mark_object_loop_halt): New variable.
-
- * s/hpux10.h (C_SWITCH_SYSTEM): #undef it.
-
- * data.c (Fmake_variable_frame_local): Doc fix.
-
-2002-08-01 David Ponce <david@dponce.com>
-
- * w32menu.c (local_heap, local_alloc, local_free): New macros.
- (malloc_widget_value, free_widget_value)
- (w32_free_submenu_strings): Use them.
-
- (push_submenu_start, push_submenu_end, push_left_right_boundary)
- (push_menu_pane, push_menu_item, single_keymap_panes)
- (single_menu_item, Fx_popup_menu, menubar_selection_callback)
- (single_submenu, set_frame_menubar)
- (w32_menu_show, w32_dialog_show): Use AREF, ASET, ASIZE.
-
- (Fx_popup_menu): Don't show pop up menu until preceding one is
- actually cleaned up. Moved UNGCPRO outside #ifdef HAVE_MENUS block.
-
- * w32menu.c: Changes adapted from xmenu.c
- (set_frame_menubar): First parse all submenus,
- then make widget_value trees from them.
- Don't allocate any widget_value objects
- until we are done with the parsing.
- (parse_single_submenu): New function.
- (digest_single_submenu): New function.
- (single_submenu): Function deleted, replaced by those two.
-
-2002-08-04 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTread_socket): Check that FrontNonFloatingWindow
- returns a valid window pointer before proceeding for keyDown and
- autoKey events.
-
-2002-08-03 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (USE_CARBON_EVENTS): New macro.
- (macCtrlKey, macShiftKey, macMetaKey, macAltKey): New macros.
- (x_iconify_frame): Call CollapseWindow.
- (Vmac_reverse_ctrl_meta): New variable.
- (Vmac_wheel_button_is_mouse_2): New variable.
- (init_mac_drag_n_drop): New function.
- (mac_do_receive_drag): New function.
- (mac_handle_service_event): New function.
- (init_service_handler): New function.
- (mac_to_emacs_modifiers): New function.
- (mac_event_to_emacs_modifiers): New function.
- (mac_get_mouse_btn): New function.
- (mac_convert_event_ref): New function.
- (XTread_socket) [USE_CARBON_EVENTS]: Call ReceiveNextEvent,
- SendEventToEventTarget, mac_event_to_emacs_modifiers, and
- mac_get_mouse_btn.
- (mac_initialize): Call init_mac_drag_n_drop and init_service_handler.
-
- * keyboard.c: Define Qmouse_wheel, mouse_wheel_syms, and
- lispy_mouse_wheel_names for MAC_OSX as well as for WINDOWS_NT.
- (kbd_buffer_get_event): Set used_mouse_menu for MENU_BAR_EVENT and
- TOOL_BAR_EVENT for MAC_OS as well.
- (make_lispy_event): Handle MOUSE_WHEEL_EVENT for MAC_OSX as well
- as for WINDOWS_NT.
- (syms_of_keyboard): Initialize Qmouse_wheel for MAC_OSX.
-
- * termhooks.h (event_kind): Define MOUSE_WHEEL_EVENT also for MAC_OSX.
-
-2002-08-03 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xdisp.c (forward_to_next_line_start): Fix a condition that
- lead to a newline being skipped.
-
-2002-08-02 Andrew Choi <akochoi@shaw.ca>
-
- * mac.c (syms_of_mac): Defsubr Sx_selection_exists_p.
-
-2002-08-01 Richard M. Stallman <rms@gnu.org>
-
- * Makefile.in (SOME_MACHINE_OBJECTS): Add fontset.o.
-
-2002-07-31 Andrew Choi <akochoi@shaw.ca>
-
- * macfns.c: #undef init_process before #define-ing it.
-
- * s/darwin.h: Define MAC_OS, SYMS_SYSTEM, and OTHER_FILES only if
- HAVE_CARBON is defined.
-
-2002-07-31 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (set_frame_menubar): First parse all submenus,
- then make widget_value trees from them.
- Don't allocate any widget_value objects
- until we are done with the parsing.
- (parse_single_submenu): New function.
- (digest_single_submenu): New function.
- (single_submenu): Function deleted, replaced by those two.
-
-2002-07-30 Juanma Barranquero <lektu@terra.es>
-
- * w32proc.c (syms_of_ntproc): Fix docstring of
- `w32-get-true-file-attributes'.
-
-2002-07-28 Richard M. Stallman <rms@gnu.org>
-
- * s/hpux8.h (HPUX8): Define this before including hpux.h.
- (HAVE_SYS_WAIT_H): #define deleted; we let Autoconf decide.
-
- * s/hpux.h (HAVE_SYS_WAIT_H): The #undef is conditional on HPUX8.
-
- * keyboard.c (make_lispy_event):
- Use #ifdef to test USE_TOOLKIT_SCROLL_BARS.
- Explicitly clear up_modifier in event->modifiers.
-
-2002-07-27 Richard M. Stallman <rms@gnu.org>
-
- * xterm.h (FRAME_CURSOR_WIDTH): New macro.
-
- * xterm.c (x_display_and_set_cursor): Check FRAME_CURSOR_WIDTH
- for bar cursor.
-
-2002-07-26 Kenichi Handa <handa@etl.go.jp>
-
- * coding.c (detect_coding_iso2022): While checking a byte sequence
- for CODING_CATEGORY_MASK_ISO_8_2, if we read one extra byte, check
- it in the normal loop.
-
-2002-07-24 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xterm.c (expose_overlaps): New function.
- (expose_window): Use it to fix the display of overlapping rows.
-
- * xdisp.c (unwind_redisplay): Clear redisplay_updating_p.
-
-2002-07-23 Ken Raeburn <raeburn@gnu.org>
-
- * lisp.h (XPNTR): Use NO_UNION_TYPE version for union as well,
- since it only depends on XUINT.
-
- * m/alpha.h (BITS_PER_LONG, BITS_PER_EMACS_INT, EMACS_INT,
- EMACS_UINT, SPECIAL_EMACS_INT, DATA_SEG_BITS,
- PNTR_COMPARISON_TYPE, VALBITS, MARKBIT, XINT, XUINT, XPNTR):
- Macros deleted.
-
- * mem-limits.h (start_of_data): If DATA_START is defined, prefer
- its value over other approaches.
- * sysdep.c (start_of_data): Don't define the function if a macro
- form has been defined.
-
-2002-07-23 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xdisp.c (redisplay_updating_p): New variable.
- (init_iterator): Don't free realized faces when
- redisplay_updating_p is set.
- (redisplay_internal): Set redisplay_updating_p while updating
- the display.
-
-2002-07-23 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fmessage): Treat "" like nil.
-
-2002-07-23 Kenichi Handa <handa@etl.go.jp>
-
- * xdisp.c (face_before_or_after_it_pos):
- Call FETCH_MULTIBYTE_CHAR with byte postion, not char position.
-
-2002-07-22 Juanma Barranquero <lektu@terra.es>
-
- * callproc.c (init_callproc) [DOS_NT]:
- Initialize Vshared_game_score_directory to nil.
- (syms_of_callproc) [DOS_NT]: Likewise.
-
-2002-07-22 Gerd Moellmann <gerd.moellmann@t-online.de>
-
- * xdisp.c (display_line): Replace an abort with xassert.
-
-2002-07-21 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (redisplay_window): Don't test BEG_UNCHANGED
- and END_UNCHANGED when setting buffer_unchanged_p.
- Use current_matrix_up_to_date_p to decide whether to use
- try_cursor_movement.
-
- * config.in (HAVE_SHARED_GAME_DIR): Undef deleted.
-
- * epaths.in (PATH_GAME): New macro, edited by ../Makefile.in.
-
- * callproc.c (init_callproc): Set up Vshared_game_score_directory.
- Set to nil if dir does not exist.
- (syms_of_callproc): Init unconditionally and simply.
-
- * buffer.c (Fbuffer_list): Doc fix.
-
-2002-07-21 Ken Raeburn <raeburn@gnu.org>
-
- * sysdep.c (end_of_text, end_of_data): Unused functions deleted.
-
- * buffer.c (mmap_realloc): When shrinking, make sure number of
- pages to unmap is rounded towards zero.
-
- * m/mips-siemens.h (XSETUINT, XSETPNTR): Unused macros deleted.
- (XSETINT): Deleted.
-
- * m/att3b.h (XINT): Don't define.
- (VALBITS, VALMASK, XTYPE): Deleted.
- (DATA_SEG_BITS): Define.
- * m/gec63.h (VALBITS, VALAMASK, XTYPE, XSETTYPE, XPNTR, XSET,
- ARRAY_MARK_FLAG): Deleted.
- (DATA_SEG_BITS): Define.
- * m/pfa50.h (VALBITS, VALMASK, XTYPE): Deleted.
- (DATA_SEG_BITS): Define.
-
-2002-07-20 Richard M. Stallman <rms@gnu.org>
-
- * print.c (print_error_message): New args CONTEXT and CALLER.
- Calls changed.
-
- * lisp.h (print_error_message): Declare new args.
-
- * keyboard.c (cmd_error_internal): Pass Vsignaling_function
- and CONTEXT to print_error_message, don't print them here.
- For a Quit, don't use Vsignaling_function.
- Call message_log_maybe_newline.
-
- * Makefile.in (xsmfns.o): Don't depend on lisp.h.
-
-2002-07-20 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (redisplay_window): Test MODIFF to set buffer_unchanged_p.
-
-2002-07-19 Ken Raeburn <raeburn@gnu.org>
-
- * bytecode.c (struct byte_stack): Pointers into byte string now
- point to const.
- * callproc.c (Fcall_process): Make NEW_ARGV array hold pointer to
- const.
- * charset.h (BCOPY_SHORT): Source pointer now points to const.
- * coding.c (encode_eol, detect_coding, detect_eol):
- (decode_coding, encode_coding, detect_coding_system):
- Source strings now treated as const.
- (decode_coding_string, encode_coding_string): Use STRING_COPYIN to
- modify Lisp string contents.
- * coding.h (decode_coding, encode_coding, detect_coding,
- detect_eol): Declarations updated.
- * composite.c (compose_chars_in_text): Treat Lisp string contents
- as const.
- * dispnew.c (safe_bcopy): Source pointer now points to const.
- * lisp.h (STRING_COPYIN): New macro.
- (detect_coding_system, safe_bcopy, temp_output_buffer_setup):
- (internal_with_output_to_temp_buffer): Declarations updated.
- * print.c (temp_output_buffer_setup):
- (internal_with_output_to_temp_buffer): Buffer name argument is now
- pointer to const.
- * sound.c (struct sound_device): Function pointer field "write"
- buffer argument now points to const.
- (vox_write): Buffer argument points to const.
- * syntax.c (Fstring_to_syntax, skip_chars): Treat Lisp string
- contents as const.
- * sysdep.c (emacs_write): Buffer pointer now const.
- * term.c (encode_terminal_code): Buffer pointer now const.
- * xfaces.c (may_use_scalable_font_p): Argument now points to const.
- (x_face_list_fonts, x_update_menu_appearance):
- (hash_string_case_insensitive): Treat Lisp string contents as const.
-
-2002-07-19 Juanma Barranquero <lektu@terra.es>
-
- * xdisp.c (syms_of_xdisp): Remove redundant deprecation info.
-
- * fileio.c (syms_of_fileio): Likewise.
- (Ffile_name_as_directory): Fix argument name in docstring.
- (file_name_as_directory): Use literal '/' instead of DIRECTORY_SEP.
-
-2002-07-18 Richard M. Stallman <rms@gnu.org>
-
- * data.c (Fdefalias): Doc fix.
-
-2002-07-17 Dave Love <fx@gnu.org>
-
- * intervals.h (text_property_stickiness): Use P_.
-
- * ccl.c: Remove `emacs' conditionals.
- (ccl_backtrace_table): Fix size spec.
- (ccl_driver): Fix type errors.
-
-2002-07-16 Ken Raeburn <raeburn@gnu.org>
-
- * alloc.c (xstrdup, make_string, make_unibyte_string)
- (make_multibyte_string, build_string): String pointer args now
- point to const.
- * charset.c (find_charset_in_text, c_string_width):
- (chars_in_text, multibyte_chars_in_text, parse_str_as_multibyte):
- * fileio.c (report_file_error):
- * insdel.c (copy_text, count_size_as_multibyte, insert_1):
- (count_combining_before, count_combining_after, insert_1_both):
- (insert, insert_and_inherit, insert_string):
- (insert_before_markers, insert_before_markers_and_inherit):
- * lread.c (intern, oblookup, hash_string):
- * minibuf.c (temp_echo_area_glyphs):
- * search.c (fast_c_string_match_ignore_case):
- * sysdep.c (emacs_open, set_file_times):
- * xfaces.c (xstricmp):
- * xdisp.c (store_frame_title, string_char_and_length):
- (message_dolog, message2, message2_nolog, set_message): Likewise.
- (set_message_1): Cast message string argument to const pointer.
- * editfns.c (general_insert_function): Insertion function now
- takes pointer to const for input data.
- * charset.h (find_charset_in_text, c_string_width):
- (parse_str_as_multibyte): Declarations updated.
- * dispextern.h (xstricmp): Declaration updated.
- * lisp.h (chars_in_text, multibyte_chars_in_text, copy_text):
- (count_size_as_multibyte, count_combining_before):
- (count_combining_after, insert_1, insert_1_both, message_dolog):
- (insert, insert_and_inherit, insert_before_markers)
- (insert_before_markers_and_inherit, set_message, message2):
- (message2_dolog, build_string, make_string, make_unibyte_string):
- (make_multibyte_string, intern, oblookup, report_file_error):
- (fast_c_string_match_ignore_case, temp_echo_area_glyphs):
- (emacs_open, xstrdup): Declarations updated.
- * systime.h (set_file_times): Declaration updated.
-
- * charset.c (find_charset_in_text, lisp_string_width): Use const
- for pointer to lisp string data.
- * charset.h (FETCH_STRING_CHAR_ADVANCE):
- (FETCH_STRING_CHAR_ADVANCE_NO_CHECK):
- * coding.c (Ffind_coding_systems_region_interval):
- * fileio.c (Ffile_name_directory, Ffile_name_nondirectory):
- (Fmake_directory_internal, Fdelete_directory):
- (Ffile_name_absolute_p, Fwrite_region, double_dollars):
- * fontset.c (font_family_registry, fs_query_fontset):
- (list_fontsets):
- * frame.c (Fframe_parameter):
+ * editfns.c (Fdelete_and_extract_region):
+ * fileio.c (Fread_file_name):
+ * fns.c (Fmapconcat):
* keyboard.c (cmd_error_internal):
- * keymap.c (Fdescribe_buffer_bindings):
- * lread.c (complete_filename_p, openp):
- * minibuf.c (Fminibuffer_complete_word):
- * xdisp.c (string_pos_nchars_ahead, init_from_display_pos):
- (face_before_or_after_it_pos, next_element_from_string):
- (get_overlay_arrow_glyph_row, display_mode_element):
- (decode_mode_spec_coding):
- * xterm.c (same_x_server): Likewise.
-
- * buffer.c (reset_buffer_local_variables): Delete "#if 0"
- settings of non-existent fields.
-
- * editfns.c (Fstring_to_char): Don't use XSTRING/XSETSTRING to
- copy a lisp value.
-
- * lread.c (Fintern_soft): Use string macros instead of
- Lisp_String fields.
- * keyboard.c (echo_char, parse_modifiers_uncached):
- (parse_solitary_modifier, Fexecute_extended_command): Likewise.
- * textprop.c (validate_interval_range, interval_of): Likewise.
-
- * fontset.c (Fset_fontset_font): Use SDATA instead of XSTRING()->data.
-
- * charset.h (FETCH_STRING_CHAR_ADVANCE)
- (FETCH_STRING_CHAR_ADVANCE_NO_CHECK): Use SBYTES instead of
- XSTRING()->size_byte.
-
- * lisp.h (SDATA, SREF): Produce rvalue.
- (SSET): New macro.
- * alloc.c (make_event_array): Use SSET for storing into a string.
- * buffer.c (Fother_buffer): Use SREF when retrieving a byte from
- a string.
- * casefiddle.c (casify_object): Use SSET.
- * charset.h (FETCH_STRING_CHAR_ADVANCE)
- (FETCH_STRING_CHAR_ADVANCE_NO_CHECK): Use SDATA when getting
- address of string contents.
- * data.c (Faref): Use SDATA.
- (Faset): Use SDATA, SSET.
- * dired.c (directory_files_internal): Use SSET.
- * fileio.c (Fmake_symbolic_link, Fexpand_file_name): Use SSET.
- (Fread_file_name): Use SREF, SSET.
- * fns.c (concat): Use SSET.
- (concat, Fdelete): Use SDATA.
- * insdel.c (insert_from_string_1): Use SDATA.
- * keyboard.c (Fevent_convert_list): Use SREF.
- * lread.c (Fload): Use SDATA, SSET.
- * macfns.c (validate_x_resource_name): Use SSET.
- * process.c (status_message): Use SSET.
- * search.c (wordify): Use SDATA.
- (Freplace_match): Use SREF.
- * w32fns.c (validate_x_resource_name): Use SSET.
- * xfns.c (validate_x_resource_name): Use SSET.
- * xterm.c (x_catch_errors, x_clear_errors): Use SSET.
-
-2002-07-16 Richard M. Stallman <rms@gnu.org>
-
- * s/hpux11.h (USG_SUBTTY_WORKS): Defined.
-
- * xdisp.c (reconsider_clip_changes):
- Don't test prevent_redisplay_optimizations_p.
- (redisplay_internal): Test prevent_redisplay_optimizations_p
- along with clip_changed in some cases.
- (try_window_id): Likewise.
- (redisplay_window): New local var buffer_unchanged_p.
-
- * keyboard.c (cmd_error) [HAVE_X_WINDOWS]: Maybe call cancel_houglass.
-
- * process.c (create_process): Test USG_SUBTTY_WORKS.
- (process_send_signal): Clean up handling of GID.
- Detect errors in ioctls meant to set GID.
-
- * window.c (temp_output_buffer_show):
- Don't set prevent_redisplay_optimizations_p.
-
-2002-07-15 Juanma Barranquero <lektu@terra.es>
-
- * eval.c (Fdefvaralias): Add docstring argument.
-
-2002-07-15 Ken Raeburn <raeburn@gnu.org>
-
- * lisp.h (STRING_INTERVALS): Produce rvalue.
- (STRING_SET_INTERVALS): New macro.
- * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Use it.
- * fns.c (Fstring_as_multibyte): Likewise.
- * intervals.c (balance_possible_root_interval, delete_interval)
- (create_root_interval, copy_intervals_to_string): Likewise.
- * textprop.c (set_text_properties): Likewise. Use NULL_INTERVAL
- instead of 0.
-
-2002-07-14 Ken Raeburn <raeburn@gnu.org>
-
- * lisp.h (STRING_SET_CHARS): New macro.
- (SCHARS, SBYTES): Produce rvalues.
- * dired.c (directory_files_internal): Use STRING_SET_CHARS.
- * fns.c (concat): Likewise.
- * lread.c (read_vector): Likewise.
-
- * lisp.h (SMBP): Delete. All uses changed to STRING_MULTIBYTE.
- (STRING_SET_UNIBYTE): New macro.
- (SET_STRING_BYTES): Delete. Callers (all of which supplied a
- length of -1) changed to use STRING_SET_UNIBYTE.
- * abbrev.c, alloc.c, buffer.c, bytecode.c, callint.c, callproc.c,
- casefiddle.c, category.c, ccl.c, charset.c, charset.h, coding.c,
- composite.c, data.c, dired.c, dispnew.c, disptab.h, doc.c,
- dosfns.c, editfns.c, emacs.c, eval.c, fileio.c, filelock.c, fn.c,
- fontset.c, frame.c, indent.c, insdel.c, intervals.c, keyboard.c,
- keymap.c, lread.c, mac.c, macfns.c, macmenu.c, macterm.c,
- minibuf.c, msdos.c, print.c, process.c, search.c, sound.c,
- sunfns.c, syntax.c, syntax.h, sysdep.c, textprop.c, undo.c,
- w16select.c, w32.c, w32fns.c, w32menu.c, w32proc.c, w32select.c,
- w32term.c, window.c, xdisp.c, xfaces.c, xfns.c, xmenu.c,
- xselect.c, xsmfns.c, xterm.c: Most uses of XSTRING combined with
- STRING_BYTES or indirection changed to SCHARS, SBYTES,
- STRING_INTERVALS, SREF, SDATA; explicit size_byte references left
- unchanged for now.
-
-2002-07-13 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (command_loop_1): Invert check on Vmemory_full.
-
-2002-07-12 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fwrite_region): Doc fix.
-
- * print.c (print_error_message): Don't handle Vsignaling_function here.
-
- * keyboard.c (cmd_error_internal): Handle Vsignaling_function here.
- (command_loop_1): Avoid certain actions after memory-full error.
-
- * eval.c (Fsignal): Don't call cancel_hourglass.
- For a memory-full error, don't call Vsignal_hook_function
- and don't set Vsignaling_function.
-
- * process.c (process_send_signal): Add abort call.
-
-2002-07-11 Markus Rost <rost@math.ohio-state.edu>
-
- * keymap.c (Fkey_binding): Fix typo.
-
-2002-07-11 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (Vmemory_full): New variable.
- (Vmemory_signal_data): Rename from memory_signal_data.
- Uses changed.
- (syms_of_alloc): Defvar them.
- (memory_full, buffer_memory_full): Set Vmemory_full.
-
- * lisp.h (Vmemory_full): Add declaration.
- (current_column, indented_beyond_p): Change declaration.
-
- * indent.c (last_known_column): Declare as double, not float.
- (current_column, current_column_1, string_display_width)
- (position_indentation): Return `double'.
- (indented_beyond_p): Arg `column' is `double'. Callers changed.
-
- * xdisp.c (message_dolog): Do nothing if Vmemory_full is non-nil.
- (back_to_previous_visible_line_start)
- (reseat_at_next_visible_line_start, next_element_from_buffer):
- Use `double', not `float', when calling indented_beyond_p.
-
- * s/hpux11.h (BROKEN_SA_RESTART): Define.
-
- * sysdep.c (sys_signal): Test BROKEN_SA_RESTART.
-
-2002-07-11 Juanma Barranquero <lektu@terra.es>
-
- * alloc.c, buffer.c, bytecode.c, callint.c, callproc.c, coding.c,
- * composite.c, dired.c, dispnew.c, editfns.c, emacs.c, eval.c,
- * fileio.c, fns.c, insdel.c, keyboard.c, keymap.c, lread.c, macfns.c,
- * macmenu.c, macros.c, minibuf.c, print.c, process.c, sound.c,
- * textprop.c, w32fns.c, w32menu.c, window.c, xfaces.c, xfns.c,
- * xmenu.c, xselect.c, xterm.c: Use SPECPDL_INDEX wherever makes sense.
-
-2002-07-10 Juanma Barranquero <lektu@terra.es>
-
- * lisp.h (SPECPDL_INDEX): Rename from BINDING_STACK_SIZE.
- All callers changed.
-
-2002-07-09 Stefan Monnier <monnier@cs.yale.edu>
-
- * data.c (Fdefalias): Add an optional `docstring' argument.
- (set_internal, Fsetq_default): Use XCAR/XCDR.
-
- * composite.c (HASH_VALUE, HASH_KEY):
- * ccl.c (HASH_VALUE): Remove (it's in lisp.h now).
-
-2002-07-09 Kenichi Handa <handa@etl.go.jp>
-
- * callproc.c (Fcall_process): Fix previous change.
-
-2002-07-07 Stefan Monnier <monnier@cs.yale.edu>
-
- * minibuf.c (Ftry_completion, Fall_completions, Ftest_completion):
- Add support for hash-tables.
- (Ftry_completion): Return t even if the string appears multiple times.
-
- * fns.c (Fnconc): Use XCDR.
- (Fprovide): Use CONSP and XCDR.
- (HASH_KEY, HASH_VALUE, HASH_NEXT, HASH_HASH, HASH_INDEX)
- (HASH_TABLE_SIZE): Delete: moved to lisp.h.
- (Fmake_hash_table): Accept `:size nil'.
- (Fmakehash): Delete: moved to subr.el.
- (syms_of_fns): Don't defsubr makehash.
-
- * lisp.h (HASH_KEY, HASH_VALUE, HASH_NEXT, HASH_HASH, HASH_INDEX)
- (HASH_TABLE_SIZE): Move from fns.c.
-
-2002-07-07 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (make_cursor_line_fully_visible): Don't try short scrolls.
- Instead just return 0 when there is something to be done.
- (try_scrolling): If make_cursor_line_fully_visible returns 0,
- retry scrolling as if cursor were off the bottom.
- (try_cursor_movement): If make_cursor_line_fully_visible returns 0,
- return CURSOR_MOVEMENT_MUST_SCROLL.
- (redisplay_window): If make_cursor_line_fully_visible returns 0,
- go to try_to_scroll.
-
- * buffer.c (Fbuffer_local_value): Store current value into its binding
- so we get the up-to-date value for the binding that is loaded.
-
- * eval.c (Fdefmacro): Doc fix.
-
-2002-07-05 Dave Love <fx@gnu.org>
-
- * keyboard.c (read_key_sequence): Set initial_idleness_start_time
- correctly.
-
- * ccl.c (Vtranslation_hash_table_vector, GET_HASH_TABLE)
- (HASH_VALUE, CCL_LookupIntConstTbl, CCL_LookupCharConstTbl): New.
- (ccl_driver): Add cases for CCL_LookupIntConstTbl,
- CCL_LookupCharConstTbl.
- (syms_of_ccl): Defvar translation-hash-table-vector.
-
-2002-07-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xdisp.c: Remove unused variable `face'.
-
-2002-07-04 Juanma Barranquero <lektu@terra.es>
-
- * keyboard.c (post_command_idle_hook): Remove redundant (and inexact)
- obsolescence information.
-
-2002-07-03 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (x_list_fonts): Fix comment. Cache fonts matching
- pattern. Search cache first.
- (init_font_name_table): Also add entry for jisx0201.1976-0 coding
- for Japanese font.
- (XLoadQueryFont): Use it.
-
-2002-07-02 Richard M. Stallman <rms@gnu.org>
-
- * keymap.c (Fdefine_key): Doc fix.
-
- * xterm.c (x_term_init): Turn off polling around XtOpenDisplay.
-
-2002-07-02 Juanma Barranquero <lektu@terra.es>
-
- * keymap.c (syms_of_keymap): Fix typo.
-
-2002-07-01 Andrew Choi <akochoi@shaw.ca>
-
- * s/darwin.h: Define POSIX_SIGNALS.
-
- * macterm.c (do_ae_open_documents) [MAC_OSX]: Call FSpMakeFSRef
- and FSRefMakePath to convert FSSpec returned with Apple Event to
- Posix pathname.
- (mac_initialize) [TARGET_API_MAC_CARBON]:
- Call init_required_apple_events and disable the `Quit' menu item
- provided automatically by the Carbon Toolbox.
-
-2002-07-01 Dave Love <fx@gnu.org>
-
- * keyboard.c (kbd_buffer_store_event): Fix interrupt_signal decl
- for K&R.
-
- * xterm.c: Fix prototype for K&R.
-
- * term.c (costs_set): Declare static, non-initialized for pcc.
-
-2002-07-01 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (timer_last_idleness_start_time): New variable.
- (timer_start_idle): Set that.
- (read_key_sequence): Use that to reset timer_idleness_start_time
- to previous value.
-
- * window.c (Frecenter): With arg, set optional_new_start.
-
- * xdisp.c (redisplay_internal): Make optional_new_start really work.
-
- * minibuf.c (Fminibuffer_complete_and_exit): Move to end of
- buffer for completion.
-
-2002-06-29 Ken Raeburn <raeburn@gnu.org>
-
- * xdisp.c (store_mode_line_string): Lisp_Object/int mixup.
-
-2002-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * keyboard.c (readable_filtered_events): New function that filters
- FOCUS_IN_EVENT depending on parameter.
- (readable_events): Calls readable_filtered_events, not filtering
- FOCUS_IN_EVENT.
- (get_filtered_input_pending): New function, filtering parameter passed
- to readable_filtered_events.
- (get_input_pending): Calls get_filtered_input_pending, not filtering
- FOCUS_IN_EVENT.
- (Finput_pending_p): Calls get_filtered_input_pending, DO filter
- FOCUS_IN_EVENT.
-
- * xterm.h (struct x_output): Add focus_state.
-
- * xterm.c (x_focus_changed): New function.
- (x_detect_focus_change): New function.
- (XTread_socket): Call x_detect_focus_change for FocusIn/FocusOut
- EnterNotify and LeaveNotify to track X focus changes.
-
-2002-06-28 Andreas Schwab <schwab@suse.de>
-
- * lisp.h: Remove duplicate declaration of code_convert_string_norecord.
-
-2002-06-27 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (mode_line_string_list, mode_line_string_face)
- (mode_line_string_face_prop): New variables.
- (store_mode_line_string): New function.
- (display_mode_element): Use store_mode_line_string to
- add mode-line string elements to mode_line_string_list
- when mode_line_string_list is non-nil.
- (Fformat_mode_line): Now returns propertized string by
- default. New arg NO-PROPS to ignore properties.
- (decode_mode_spec): Only add two dashes for %- in propertized
- mode-line string.
- (syms_of_xdisp): Init and staticpro mode_line_string_list.
-
-2002-06-27 Stefan Monnier <monnier@cs.yale.edu>
-
- * minibuf.c (minibuffer_completion_contents): Add return type.
-
-2002-06-27 Juanma Barranquero <lektu@terra.es>
-
- * charset.c (Fchar_bytes): Remove obsolescence info from docstring.
-
-2002-06-26 Juanma Barranquero <lektu@terra.es>
-
- * fileio.c (read_file_name_cleanup): Add missing return.
-
-2002-06-26 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Frecenter): Don't set force_start flag.
-
- * minibuf.c (do_completion, Fminibuffer_complete_word)
- (Fminibuffer_completion_help): Complete just the text before point.
- (minibuffer_completion_contents): New function.
-
- * buffer.c (Fbury_buffer): Use frames_discard_buffer.
-
- * frame.c (frames_bury_buffer): Function deleted.
-
-2002-06-25 Miles Bader <miles@gnu.org>
-
- * callint.c (Fcall_interactively): When checking to see if doprnt hit
- the end of callint_message, allow for a terminating '\0'.
-
-2002-06-24 Juanma Barranquero <lektu@terra.es>
-
- * w32select.c: Include composite.h.
-
- * w16select.c: Likewise.
-
-2002-06-24 Kenichi Handa <handa@etl.go.jp>
-
- * callproc.c (Fcall_process): If code detection is necessary,
- call detect_coding directly here.
-
- * coding.c (detect_eol): Preserve coding->cmp_data.
-
- * w16select.c (Fw16_get_clipboard_data):
- * w32fns.c (w32_to_x_font):
- * w32select.c (Fw32_get_clipboard_data):
- * xselect.c (selection_data_to_lisp_data):
- * xterm.c (XTread_socket): Disable composition handling.
-
-2002-06-24 Stefan Monnier <monnier@cs.yale.edu>
-
- * print.c (temp_output_buffer_setup): Kill all local variables.
-
-2002-06-22 Stefan Monnier <monnier@cs.yale.edu>
-
- * lread.c (Fread): Remove redundant and imprecise declaration.
-
- * xfns.c (check_x_display_info): Use check_x_frame.
-
- * .gdbinit (xprintsym): Use the new `xname' field.
- (xsymbol): Use it.
-
-2002-06-22 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (file_dialog_callback): New function.
- (Fx_file_dialog): Allow selecting directories as well as files.
-
-2002-06-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * m/pmax.h (START_FILES): Define START_FILES for NetBSD and
- OpenBSD. Add support for mipseb-*-netbsd* machines.
-
-2002-06-17 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (mac_scroll_area): Set foreground and backcolor to
- black and white before scrolling. Restore frame background and
- foreground color after scrolling.
- (do_window_update): Call XClearWindow before calling expose_frame.
- (make_mac_frame): Don't set FRAME_BACKGROUND_PIXEL and
- FRAME_FOREGROUND_PIXEL of frame.
-
- * macterm.c (XTread_socket): If Vmac_command_key_is_meta is nil,
- test Mac command key as <ALT> key.
-
-2002-06-17 Stefan Monnier <monnier@cs.yale.edu>
-
- * window.c (Fset_window_configuration): Lisp_Object/int mixup.
-
- * keyboard.c (read_key_sequence): Be more careful with first_unbound.
- Lookup keys in function-key-map immediately so that key-translation-map
- can be applied earlier.
- Remove function_key_possible and key_translation_possible, replaced
- by checking `keytran_start < t'.
-
- * .gdbinit (xsymbol): Use the new `xname' field.
-
-2002-06-17 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTread_socket): If Vmac_command_key_is_meta is nil,
- test Mac command key as <ALT> key.
-
- * mac.c (do_applescript): Call initialize_applescript if necessary
- when first called. Dispose of result_desc only when there is no error.
- (Fdo_applescript): Use %d format specifier instead of %ld.
-
-2002-06-16 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTread_socket): Call FrontNonFloatingWindow instead
- of FrontWindow for cases keyDown and autoKey.
-
- * fontset.c (syms_of_fontset) [MAC_OS]: Set ASCII font of
- Vdefault_fontset to Monaco with mac-roman coding.
-
- * mac.c, macfns.c, macmenu.c, macterm.c: Undefine and redefine
- init_process before and after inclusion of Carbon/Carbon.h, resp.
-
- * macterm.c (x_new_font): Set font for normal_gc, reverse_gc, and
- cursor_gc.
- (add_font_name_table_entry): New function.
- (init_font_name_table): Use add_font_name_table_entry; add italic,
- bold, and bold-italic entries for truetype fonts.
-
- * xfaces.c (init_frame_faces) [MAC_OS]: Call realize_basic_faces
- for Mac too.
- (try_font_list) [MAC_OS]: If no font matches given registry, try
- fonts with any registry matching face_family.
- (realize_x_face) [MAC_OS]: Remove old ad-hoc fix to load font here.
-
- * s/darwin.h: If autoconf detects the Ncurses library, define
- LIBS_TERMCAP to -lncurses to use it.
-
-2002-06-16 Eli Zaretskii <eliz@is.elta.co.il>
-
- * strftime.c [__hpux]: Include sys/_mbstate_t.h.
-
-2002-06-15 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Fset_window_configuration): Explicitly preserve
- the point value that new_current_buffer had at the start.
-
-2002-06-14 Juanma Barranquero <lektu@terra.es>
-
- * composite.c (Fcompose_region_internal, Fcompose_string_internal):
- Fix typos.
-
-2002-06-14 Kim F. Storm <storm@cua.dk>
-
- * insdel.c (insert_1_both, insert_from_string_1)
- (insert_from_buffer_1): Recalculate END_UNCHANGED in case the
- insert happened in the end_unchanged region. Otherwise, the
- redisplay may be confused and duplicate the last line in the
- buffer [seen after save-buffer when require-final-newline==t].
-
-2002-06-13 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (init_environment): Remove EMACSLOCKDIR.
- (stat): Swap _S_IFDIR and _S_IFREG.
-
-2002-06-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c, macterm.c, macmenu.c, msdos.c, sysdep.c
- * termhooks.h, xmenu.c, xsmfns.c, xterm.h, xterm.c, w32term.c,
- * w32menu.c, w32inevt.c: Rename enum event_kind as follows:
- ascii_keystroke to ASCII_KEYSTROKE_EVENT, multibyte_char_keystroke
- to MULTIBYTE_CHAR_KEYSTROKE_EVENT, non_ascii_keystroke to
- NON_ASCII_KEYSTROKE_EVENT, timer_event to TIMER_EVENT, mouse_click
- to MOUSE_CLICK_EVENT, mouse_wheel to MOUSE_WHEEL_EVENT,
- language_change_event to LANGUAGE_CHANGE_EVENT, scroll_bar_click
- to SCROLL_BAR_CLICK_EVENT, w32_scroll_bar_click to
- W32_SCROLL_BAR_CLICK_EVENT, selection_request_event to
- SELECTION_REQUEST_EVENT, selection_clear_event to
- SELECTION_CLEAR_EVENT, buffer_switch_event to BUFFER_SWITCH_EVENT,
- delete_window_event to DELETE_WINDOW_EVENT, iconify_event to
- ICONIFY_EVENT, deiconify_event to DEICONIFY_EVENT,
- menu_bar_activate_event to MENU_BAR_ACTIVATE_EVENT, drag_n_drop to
- DRAG_N_DROP_EVENT, save_session_event to SAVE_SESSION_EVENT and
- no_event to NO_EVENT.
-
-2002-06-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * macmenu.c: Remove declaration of Qmouse_click and Qevent_kind.
-
-2002-06-12 Stefan Monnier <monnier@cs.yale.edu>
-
- * intervals.c (textget): Don't forget to `return'.
- (lookup_char_property): Use XCAR/XCDR.
-
-2002-06-12 Juanma Barranquero <lektu@terra.es>
-
- * xdisp.c (Fformat_mode_line): Fix typo.
-
-2002-06-12 Kim F. Storm <storm@cua.dk>
-
- * xdisp.c (Fformat_mode_line): New function.
- (frame_title_buf, frame_title_buf_end, frame_title_ptr)
- (store_frame_title_char, store_frame_title): Use unconditionally.
- (init_xdisp): Defsubr Fformat_mode_line.
- Initialize frame_title_buf etc. unconditionally.
-
-2002-06-11 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (read_key_sequence):
- Remove prev_(fkey|keytran}_(map|start|end) since we don't want to pass
- things through those maps after downcasing events.
- Enforce that keytran_end <= fkey_start, i.e. that key-translation-map
- applies after function-key-map.
- Make sure that keytran can be done in the middle in the sequence.
- Be careful not to throw away events past the one we downcase.
-
- * lread.c (read_integer): Remove unused var `tem'.
- (read1): Fix int/Lisp_Object mixup.
-
- * xfaces.c (tty_lookup_color): Type bool/Lisp_Object mismatch fixed.
-
-2002-06-11 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (readable_events): Ignore any number of
- FOCUS_IN_EVENT events and return 0 if nothing else in buffer.
-
-2002-06-09 Miles Bader <miles@gnu.org>
-
- * xfaces.c (Ftty_supports_face_attributes_p): New function.
- (parse_rgb_list, tty_lookup_color): New functions.
- (tty_defined_color): Use `tty_lookup_color' to do all the work.
- (color_distance, Fcolor_distance): New functions.
- (TTY_SAME_COLOR_THRESHOLD): New macro.
- (Qtty_color_standard_values): New variable.
- (syms_of_xfaces): Initialize new vars & functions.
-
-2002-06-08 Colin Walters <walters@verbum.org>
-
- * textprop.c (Vchar_property_alias_alist): New variable.
- (syms_of_textprop) <Vchar_property_alias_alist>: DEFVAR_LISP.
-
- * intervals.c (lookup_char_property): New function for looking up
- overlay and text properties, created from textget.
- (textget): Use it.
-
- * intervals.h (lookup_char_property): Declare.
- (Vchar_property_alias_alist): Declare.
-
- * buffer.c (Foverlay_get): Use lookup_char_property.
-
-2002-06-07 Sam Steingold <sds@gnu.org>
-
- * xselect.c (lisp_data_to_selection_data): Fix last change:
- *data_ret is not a Lisp string, while unibyte_string is.
-
-2002-06-07 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xselect.c (lisp_data_to_selection_data): Fix last change:
- set size_ret.
-
-2002-06-07 Andreas Schwab <schwab@suse.de>
-
- * m/amdx86-64.h: New file.
-
-2002-06-05 Eli Zaretskii <eliz@is.elta.co.il>
-
- * fns.c (Fstring_make_unibyte): Doc fix.
-
- * xselect.c (lisp_data_to_selection_data): If the requested type
- is STRING, call string_make_unibyte to encode the selected text
- as a string.
-
- * window.c (Fset_window_hscroll): Doc fix.
-
-2002-06-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * fileio.c (choose_write_coding_system):
- Call select-safe-coding-system properly.
-
-2002-06-03 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (message_with_string): Error if STRING is not a string.
-
- * fns.c (md5): Pass FILE arg to Vselect_safe_coding_system_function.
-
- * fileio.c (choose_write_coding_system): Pass FILE arg to
- Vselect_safe_coding_system_function.
-
-2002-06-03 Ken Raeburn <raeburn@gnu.org>
-
- * buffer.c (fix_overlays_before): Fix list-walking bug in 05-19 change.
-
-2002-06-02 Thien-Thi Nguyen <ttn@gnu.org>
-
- * bytecode.c (Fbyte_code): Cast `current_column' return value to int.
- * cmds.c (Fdelete_backward_char, internal_self_insert): Likewise.
- * keymap.c (describe_command): Likewise.
- * minibuf.c (read_minibuf): Likewise.
-
- * xdisp.c (redisplay_internal, redisplay_window, decode_mode_spec):
- Cast `current_column' return value to int.
- (back_to_previous_visible_line_start)
- (reseat_at_next_visible_line_start, next_element_from_buffer):
- Cast `indented_beyond_p' 3rd arg to float.
-
- * indent.c (last_known_column): Now a float.
- (current_column_1, position_indentation, current_column)
- (string_display_width): Return float.
- (Fcurrent_column): Cast `current_column' return value to int.
- (Fcurrent_indentation): Cast `position_indentation' retval to int.
- (indented_beyond_p): Third arg now a float.
- (compute_motion, vmotion): Cast `indented_beyond_p' 3rd arg to float.
-
- * lisp.h (current_column): Now returns float.
- (indented_beyond_p): 3rd arg now a float.
-
-2002-05-31 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xfns.c (x_encode_text): Return stringp non-NULL if coding_system
- is Qcompound_text_with_extensions.
-
- * xselect.c (lisp_data_to_selection_data): Always set selection
- type as string if x_encode_text returns streingp non-NULL.
-
- * s/netbsd.h: Include /usr/pkg in the run time shared library path.
-
-2002-05-30 Richard M. Stallman <rms@gnu.org>
-
- * window.c (Fset_window_configuration): Correct the handling
- of point in current buffer, to work with multiple windows.
-
-2002-05-29 Colin Walters <walters@verbum.org>
-
- * lread.c (Fread_from_string): Don't depend on order of evaluation
- for C function parameters.
-
-2002-05-28 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (x_display_and_set_cursor): Change the cursor in the same
- way for blinked-off state and for a nonselected window.
-
- * window.c (window_scroll_pixel_based): Don't call Fbolp;
- instead, see if the new start pos is at beginning of line.
-
- * fileio.c (Fwrite_region): If START is a string, don't
- make any annotations.
-
- * eval.c (syms_of_eval): Doc fix.
-
-2002-05-28 Colin Walters <walters@debian.org>
-
- * emacs.c (USAGE1): Add --no-splash.
- (standard_args): Ditto.
-
-2002-05-28 Colin Walters <walters@gnu.org>
-
- * lread.c (readchar_count): New variable.
- (readchar): Increment it.
- (unreadchar): Decrement it.
- (read_multibyte): Decrement it.
- (Vread_with_symbol_positions): New variable.
- (Vread_symbol_positions_list): New variable.
- (read_internal_start): New function, created from Fread and
- Fread_from_string. Handle Vread_symbol_positions_list and
- Vread_with_symbol_positions.
- (readevalloop, Fread, Fread_from_string): Use it.
- (read1): Use readchar_count to add symbol positions to
- Vread_symbol_positions_list if Vread_with_symbol_positions is non-nil.
- (syms_of_lread): DEFVAR_LISP and initialize them.
-
- * lread.c (read0, read1, read_list, read_vector, read_multibyte)
- (substitute_object_recurse, substitute_object_in_subtree)
- (substitute_in_interval): Prototype.
- (read_multibyte): Return c if it's less than zero.
-
-2002-05-28 Kim F. Storm <storm@cua.dk>
-
- * fileio.c (Fread_file_name_internal): Added brute-force
- speed up for using predicate file-directory-p.
-
-2002-05-28 Kim F. Storm <storm@cua.dk>
-
- * fileio.c (Vread_file_name_function, Vread_file_name_predicate):
- New variables.
- (syms_of_fileio): DEFVAR_LISP them.
- (read_file_name_cleanup): New unwind function.
- (Fread_file_name_internal): Only return completions satifying
- Vread_file_name_predicate. Temporarily unwind protect and rebind
- default-directory while checking completions against the predicate.
- (Fread_file_name): Added PREDICATE argument. Specbind it to
- Vread_file_name_predicate during completion.
- Call Vread_file_name_function to read the file name if non-nil.
-
- * lisp.h (Fread_file_name): Now has 6 args.
-
- * callint.c (Fcall_interactively) <"D">: Supply Qfile_directory_p
- predicate for Fread_file_name when reading directory name.
- Supply Qnil for predicate in other calls to Fread_file_name.
-
-2002-05-26 Miles Bader <miles@gnu.org>
-
- * term.c (tty_capable_p): New function.
- * dispextern.h (tty_capable_p): New function declaration.
- (TTY_CAP_INVERSE, TTY_CAP_UNDERLINE, TTY_CAP_BOLD, TTY_CAP_DIM)
- (TTY_CAP_BLINK, TTY_CAP_ALT_CHARSET): New macros.
-
-2002-05-23 Stefan Monnier <monnier@cs.yale.edu>
-
- * fileio.c (read_non_regular, Finsert_file_contents): Use BEG_BYTE.
- (Finsert_file_contents, build_annotations): Use XCAR, XCDR.
- (Vwrite_region_annotate_functions): Docstring fix.
-
-2002-05-23 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (x_write_glyphs): Clear phys_cursor_on_p if current
- phys_cursor's hpos is overwritten. This is still not completely
- correct, as it doesn't really make sense to use hpos at all to
- get the cursor glyph (as that is relative to the width of the
- characters on the line, which may have changed during the update).
-
-2002-05-22 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (enumfont_t): Remove tail, make pattern a normal
- Lisp_Object.
- (enum_font_cb2, enum_font_maybe_add_to_list, w32_list_fonts):
- Use modified enumfont_t struct.
-
- * w32term.h (text_cursor_kinds): New enumeration member HBAR_CURSOR.
-
- * w32term.c (x_draw_bar_cursor): New argument KIND; callers changed.
- Handle the `hbar' cursor type.
- (x_display_and_set_cursor): Handle the HBAR_CURSOR case.
-
- * w32fns.c (Qhbar): New variable.
- (x_specified_cursor_type): Use it.
-
-2002-05-21 Ken Raeburn <raeburn@gnu.org>
-
- * w32fns.c (enum_font_maybe_add_to_list): Use XCDR_AS_LVALUE for
- now, when the address is needed.
-
-2002-05-21 Colin Walters <walters@gnu.org>
-
- * Makefile.in (shortlisp): Add font-core.el.
-
-2002-05-20 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer) <cursor-type>: Doc fix.
-
- * keyboard.c (read_char_minibuf_menu_prompt): Don't list
- equivalent key bindings here.
-
-2002-05-20 Ken Raeburn <raeburn@gnu.org>
-
- Change symbol structure to contain a lisp object for the symbol
- name:
- * lisp.h (struct Lisp_Symbol): Replace field "name" with a lisp
- object field named "xname".
- (SYMBOL_NAME): New macro.
- * abbrev.c (write_abbrev): Use SYMBOL_NAME instead of XSYMBOL and
- name field.
- * alloc.c (Fmake_symbol): Set symbol xname field instead of name.
- (mark_object, gc_sweep): Use symbol xname field and XSTRING
- instead of name field.
- * buffer.c (buffer_slot_type_mismatch): Use XSTRING and
- SYMBOL_NAME instead of XSYMBOL and name field.
- * callint.c (Fcall_interactively): Use XSTRING and SYMBOL_NAME
- instead of XSYMBOL and name field.
- * charset.c (Fdefine_charset, Fdeclare_equiv_charset): Use XSTRING
- and SYMBOL_NAME instead of XSYMBOL and name field.
- * coding.c (Fread_coding_system, code_convert_region1)
- (code_convert_string1, code_convert_string_norecord)
- (Ffind_operation_coding_system): Use SYMBOL_NAME instead of
- XSYMBOL and name field.
- * data.c (Fkeywordp, Fsymbol_name, store_symval_forwarding)
- (Fmake_variable_buffer_local, Fmake_local_variable)
- (Fmake_variable_frame_local): Use SYMBOL_NAME and XSTRING instead
- of XSYMBOL and name field.
- * editfns.c (Fformat): Use SYMBOL_NAME and XSTRING instead of
- XSYMBOL and name field.
- * emacs.c (shut_down_emacs) [#if 0]: Use SYMBOL_NAME and XSTRING
- instead of XSYMBOL and name field.
- * eval.c (do_autoload): Use SYMBOL_NAME and XSTRING instead of
- XSYMBOL and name field.
- * fns.c (Fstring_equal, Fstring_lessp, Frequire, sxhash):
- Use SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
- * fontset.c (Fset_fontset_font): Use SYMBOL_NAME and XSTRING
- instead of XSYMBOL and name field.
- * keyboard.c (echo_char, record_char, parse_modifiers_uncached)
- (parse_modifiers, apply_modifiers, Fevent_convert_list)
- (parse_solitary_modifier, Fexecute_extended_command):
- Use SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
- * keymap.c (silly_event_symbol_error, Fsingle_key_description)
- (Fdescribe_buffer_bindings): Use SYMBOL_NAME and XSTRING instead
- of XSYMBOL and name field.
- (describe_command, describe_translation): Use SYMBOL_NAME and
- assignment instead of XSYMBOL and name field and XSETSTRING.
- * lread.c (Fintern_soft, oblookup): Use SYMBOL_NAME and XSTRING
- instead of XSYMBOL and name field.
- (Funintern): Use SYMBOL_NAME and assignment instead of XSYMBOL and
- name field and XSETSTRING.
- * macfns.c (parse_image_spec): Use SYMBOL_NAME and XSTRING instead
- of XSYMBOL and name field.
- * minibuf.c (Fread_command, Fread_variable): Use SYMBOL_NAME and
- assignment instead of XSYMBOL and name field and XSETSTRING.
- * print.c (print_error_message, print_object): Use SYMBOL_NAME and
- XSTRING instead of XSYMBOL and name field.
- * process.c (set_socket_options, Fsignal_process): Use SYMBOL_NAME
- and XSTRING instead of XSYMBOL and name field.
- * w32fns.c (parse_image_spec, w32_parse_hot_key): Use SYMBOL_NAME
- and XSTRING instead of XSYMBOL and name field.
- * xfaces.c (merge_face_vector_with_property): Use SYMBOL_NAME and
- XSTRING instead of XSYMBOL and name field.
- * xfns.c (parse_image_spec): Use SYMBOL_NAME and XSTRING instead
- of XSYMBOL and name field.
- * xselect.c (symbol_to_x_atom, x_get_foreign_selection):
- Use SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
-
-2002-05-19 Ken Raeburn <raeburn@gnu.org>
-
- * lisp.h (LISP_MAKE_RVALUE): Delete disabled version, making XCAR
- and XCDR real rvalues in most configurations.
-
- * buffer.c (fix_overlays_in_range, fix_overlays_before):
- Don't take the address of the cdr part of a cons cell; instead, track
- the parent cell and call XSETCDR, or set the variable for the head
- of the list if we haven't started down the list yet.
-
-2002-05-19 Richard M. Stallman <rms@gnu.org>
-
- * doc.c (reread_doc_file): Don't ask for confirmation.
-
-2002-05-18 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_create_pixmap_from_bitmap_data): New function.
- (xbm_load_image): Use it.
- (xbm_load): Ditto.
- (xbm_read_bitmap_data): Reverted to xfns.c version.
- From David Ponce <david@dponce.com>.
-
-2002-05-17 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (sig_suspender, sigprocmask): Don't define for DJGPP
- 2.02 and later.
-
-2002-05-16 Juanma Barranquero <lektu@terra.es>
-
- * keyboard.c (Fthis_command_keys, Fthis_command_keys_vector): Fix typo.
-
-2002-05-15 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (read_char_x_menu_prompt): Use an equivalent but more
- meaningful test.
- (read_char_minibuf_menu_prompt): Fix typo.
-
-2002-05-15 Eli Zaretskii <eliz@is.elta.co.il>
-
- * eval.c (Fcommandp): Doc fix.
-
-2002-05-13 Stefan Monnier <monnier@cs.yale.edu>
-
- * keymap.c (keymap_parent): New fun, extracted from Fkeymap_parent.
- (Fkeymap_parent, keymap_memberp, fix_submap_inheritance): Use it.
- (Fset_keymap_parent): Gcpro a bit more.
- (access_keymap): Gcpro around meta_map call and around the main loop.
- (get_keyelt): Gcpro when following indirect references.
- (copy_keymap_item): New fun, extracted from Fcopy_keymap.
- (copy_keymap_1, Fcopy_keymap): Use it. Don't copy the parent map.
- (Fdefine_key, Flookup_key): Gcpro before calling get_keymap.
- Remove useless ad-hoc remap code.
-
-2002-05-13 Richard M. Stallman <rms@gnu.org>
-
- * search.c (search_buffer): Give up boyer moore search if inverse
- translation change charset_base.
-
-2002-05-12 Eli Zaretskii <eliz@is.elta.co.il>
-
- * coding.c (decode_coding) <coding_type_ccl>: If a lone CR
- characters is carried over from the previous block of text, adjust
- coding->produced to account for the extra character.
-
-2002-05-11 Andreas Schwab <schwab@suse.de>
-
- * coding.c (intersection): Keep the elements of the returned list
- in the same order as in the first list.
-
-2002-05-11 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (current_minor_maps): Fix resizing of cmm_maps;
- only update cmm_size if realloc actually succeeds.
- Testing with initial size of 2 elements revealed that using
- realloc on GNU/Linux would cause a random trap in xmalloc
- later on, so I rewrote the code to use malloc/bcopy/free instead
- of realloc.
-
-2002-05-10 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (enum_font_cb2): Avoid DBCS raster fonts.
-
-2002-05-10 Eli Zaretskii <eliz@is.elta.co.il>
-
- * coding.c (encode_coding_sjis_big5): Enclose bitwise AND in
- parens, to ensure correct evaluation order.
-
-2002-05-10 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (Vemulation_mode_map_alists): New variable.
- (syms_of_keymap): DEFVAR_LISP it.
- (current_minor_maps): Process keymap alists in that list before
- minor-mode-overriding-map-alist and minor-mode-map-alist.
-
-2002-05-09 Richard M. Stallman <rms@gnu.org>
-
- * search.c (Freplace_match): Doc fix.
-
-2002-05-09 Kim F. Storm <storm@cua.dk>
-
- * macterm.c (x_draw_image_foreground, x_draw_image_foreground_1):
- Enlarge cursor rectangle drawn around image with non-zero relief.
-
- * w32term.c (x_draw_image_foreground, w32_draw_image_foreground_1):
- Enlarge cursor rectangle drawn around image with non-zero relief.
-
- * xterm.c (x_draw_image_foreground, x_draw_image_foreground_1):
- Enlarge cursor rectangle drawn around image with non-zero relief.
-
-2002-05-07 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xselect.c (lisp_data_to_selection_data): Don't set selection
- type if comes from the Lisp object's car. If the selection
- contains a pure ASCII text, always return QSTRING as its type.
-
-2002-05-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * mac.c (mac-cut-function): Doc fix.
-
-2002-05-05 Richard M. Stallman <rms@gnu.org>
-
- * s/gnu.h [DOUG_LEA_MALLOC] (REL_ALLOC): Undefine it.
-
-2002-05-04 Jason Rumney <jasonr@gnu.org>
-
- * keyboard.c (make_lispy_event) <mouse-wheel>: Set count to 1
- for event-click-count.
-
- * process.c (init_process): Only add server subfeature if we can
- use non-blocking I/O.
-
-2002-05-04 Andrew Choi <akochoi@shaw.ca>
-
- * macterm.c (XTread_socket): Call WaitNextEvent once instead of
- repeatedly.
-
-2002-05-03 Jason Rumney <jasonr@gnu.org>
-
- * process.c (Fmake_network_process): Only support server sockets
- when we can make them non-blocking.
-
- * s/ms-w32.h (HAVE_SELECT): Define.
-
- * w32.h (FILE_NDELAY): New flag.
-
- * w32.c (sys_getpeername, fcntl): New functions.
- (_sys_read_ahead): Temporarily block on non-blocking sockets.
-
- * w32proc.c: Include sys/file.h.
-
-2002-05-03 Colin Walters <walters@verbum.org>
-
- * callproc.c (Vgame_score_directory): Renamed to
- Vshared_game_score_directory.
-
-2002-04-30 Richard M. Stallman <rms@gnu.org>
-
- * s/gnu.h [emacs]: Include stdio.h.
- (GNU_LIBRARY_PENDING_OUTPUT_COUNT): New definition, conditional.
-
- * eval.c (do_autoload): Error if called while preparing to dump.
-
- * fns.c (Frequire): Error if need to load while preparing to dump.
-
-2002-04-28 Colin Walters <walters@verbum.org>
+ * keymap.c (Fkey_description):
+ * lread.c (openp):
+ * minibuf.c (read_minibuf):
+ * search.c (wordify):
+ * sunfns.c (sel_read):
+ * xdisp.c (Fformat_mode_line, syms_of_xdisp):
+ * xfns.c (x_default_scroll_bar_color_parameter):
+ * xmenu.c (menu_help_callback):
+ * xselect.c (Fx_get_atom_name):
+ * xterm.c (x_term_init): Use empty_unibyte_string.
- * callproc.c (Vgame_score_directory) [!HAVE_SHARED_GAME_DIR]:
- Default to "~/.emacs.d/games".
+2007-06-08 Dmitry Antipov <dmantipov@yandex.ru> (tiny change)
-2002-04-29 Stefan Monnier <monnier@cs.yale.edu>
+ * alloc.c (init_strings): Initialize canonical empty strings.
+ (make_uninit_string, make_uninit_multibyte_string): Return appropriate
+ canonical empty string when the requested size is 0.
- * lread.c (openp): Change arg exec_only to predicate.
- (build_load_history): Use XCAR/XCDR.
- (Flocate_file_internal): New fun.
- (syms_of_lread): Defsubr it.
- (Fload): Update call to openp.
+ * emacs.c (empty_unibyte_string): Rename from empty_string.
+ (empty_multibyte_string): New canonical empty string.
+ (syms_of_emacs): Don't initialize empty_string.
- * lisp.h (openp): Update prototype.
+ * lisp.h (STRING_SET_UNIBYTE): Return the canonical empty unibyte
+ string, if appropriate.
+ (empty_unibyte_string, empty_multibyte_string): New externs.
+ (empty_string): Remove extern.
- * xfns.c (x_create_bitmap_from_file, x_find_image_file):
- * w32proc.c (sys_spawnve):
- * w32fns.c (x_create_bitmap_from_file, x_find_image_file):
- * w32.c (check_windows_init_file):
- * sound.c (Fplay_sound_internal):
- * process.c (Fstart_process):
- * macfns.c (x_create_bitmap_from_file, x_find_image_file):
- * mac.c (run_mac_command):
- * emacs.c (init_cmdargs):
- * callproc.c (Fcall_process): Update call to openp.
+ * lread.c (syms_of_lread): Use empty_unibyte_string.
- * textprop.c (remove_properties): Don't use XCAR without CONSP.
+2007-06-07 Jason Rumney <jasonr@gnu.org>
- * xterm.c (XTread_socket): Disable the Xutf8LookupString code.
+ * s/ms-w32.h: Don't define HAVE_TZNAME.
-2002-04-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+ * editfns.c (Fcurrent_time_zone): Remove hack for Japanese Windows.
- * dispextern.h (DEFAULT_TOOL_BAR_BUTTON_MARGIN)
- (DEFAULT_TOOL_BAR_BUTTON_RELIEF): Change default values.
+2007-06-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2002-04-28 Richard M. Stallman <rms@gnu.org>
+ * mac.c (xrm_get_preference_database): Remove BLOCK_INPUT.
- * minibuf.c (Fall_completions, Ftry_completion): New arg to Fcommandp.
+ * macfns.c (mac_get_window_bounds): Move extern to macterm.h.
+ (compute_tip_xy) [TARGET_API_MAC_CARBON]: Use GetGlobalMouse.
- * eval.c (Fcommandp): New arg for_call_interactively.
- * lisp.h (Fcommandp): Declare new arg.
+ * macmenu.c [TARGET_API_MAC_CARBON] (menu_target_item_handler):
+ Don't call next handler.
+ [TARGET_API_MAC_CARBON] (install_menu_target_item_handler):
+ Remove argument. Install handler to application.
+ (set_frame_menubar): Don't change deep_p.
+ (mac_menu_show): Use FRAME_OUTER_TO_INNER_DIFF_X and
+ FRAME_OUTER_TO_INNER_DIFF_Y.
+ (DIALOG_BUTTON_COMMAND_ID_OFFSET, DIALOG_BUTTON_COMMAND_ID_P)
+ (DIALOG_BUTTON_COMMAND_ID_VALUE, DIALOG_BUTTON_MAKE_COMMAND_ID)
+ [HAVE_DIALOGS]: New macros.
+ [HAVE_DIALOGS] (mac_handle_dialog_event, create_and_show_dialog):
+ Use them.
+ (fill_menubar) [TARGET_API_MAC_CARBON]: Use CFString.
+
+ * macselect.c [MAC_OSX] (install_service_handler): Rename from
+ init_service_handler. All callers changed. Return OSStatus value.
+
+ * macterm.c (mac_begin_cg_clip): New arg F. Call SetPortWindowPort.
+ All callers changed so as not to call SetPortWindowPort.
+ (mac_begin_cg_clip) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
+ (mac_draw_image_string_atsui) [USE_ATSUI]: New function created from
+ mac_draw_string_common.
+ (mac_draw_image_string_qd): Likewise.
+ (mac_draw_string_common): Use them. Add INLINE.
+ (XTmouse_position, x_scroll_bar_report_motion) [TARGET_API_MAC_CARBON]:
+ Use FRAME_OUTER_TO_INNER_DIFF_X, FRAME_OUTER_TO_INNER_DIFF_Y, and
+ GetGlobalMouse.
+ (x_set_mouse_pixel_position) [MAC_OSX]: Use FRAME_OUTER_TO_INNER_DIFF_X
+ and FRAME_OUTER_TO_INNER_DIFF_Y.
+ [TARGET_API_MAC_CARBON] (mac_handle_mouse_event): Likewise.
+ [USE_MAC_TSM] (mac_handle_text_input_event): Likewise.
+ (x_make_frame_visible) [TARGET_API_MAC_CARBON]: Move code for
+ repositioning window to mac_handle_window_event.
+ (x_make_frame_invisible) [TARGET_API_MAC_CARBON]: Move code for
+ saving window location to mac_handle_window_event
+ [USE_MAC_FONT_PANEL] (mac_show_hide_font_panel): Install handler here.
+ (install_menu_target_item_handler): Remove argument in extern.
+ [TARGET_API_MAC_CARBON] (mac_event_to_emacs_modifiers):
+ Also accept command events.
+ (do_keystroke): New function created from XTread_socket.
+ (init_command_handler): Remove functions.
+ [TARGET_API_MAC_CARBON] (mac_handle_window_event): Reposition window
+ and save window location by kEventWindowShowing and kEventWindowHiding
+ handlers here. Don't call next handler for window state change and
+ focus events.
+ (mac_handle_application_event, mac_handle_keyboard_event)
+ [TARGET_API_MAC_CARBON]: New functions.
+ (install_window_handler) [TARGET_API_MAC_CARBON]: Register handlers for
+ kEventWindowShowing and kEventWindowHiding events. Move installation
+ of mouse, font, text input and menu target item handlers to
+ install_application_handler.
+ (install_application_handler) [TARGET_API_MAC_CARBON]: New function.
+ (mac_handle_cg_display_reconfig) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
+ New function.
+ (init_dm_notification_handler) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
+ Register it.
+ (XTread_socket) [TARGET_API_MAC_CARBON]:
+ Consolidate SendEventToEventTarget calls.
+ Use FRAME_OUTER_TO_INNER_DIFF_X and FRAME_OUTER_TO_INNER_DIFF_Y.
+ Move application activation handler to mac_handle_application_event.
+ Move keyboard handler to mac_handle_keyboard_event.
+ (XTread_socket) [!TARGET_API_MAC_CARBON]: Use do_keystroke.
+ (mac_initialize) [TARGET_API_MAC_CARBON]: Don't call
+ init_command_handler. Call install_application_handler.
-2002-04-28 Jason Rumney <jasonr@gnu.org>
+ * macterm.h (mac_get_window_bounds): Move extern from macfns.c.
+ (FRAME_OUTER_TO_INNER_DIFF_X, FRAME_OUTER_TO_INNER_DIFF_Y): New macros.
- * w32proc.c (syms_of_w32proc): Get true file attributes by default.
+2007-06-07 Glenn Morris <rgm@gnu.org>
- * w32.c (stat, fstat): Use file index information to generate
- inodes for directories where available.
+ * emacs.c (main): Use `emacs-copyright' in --version output.
-2002-04-26 Andrew Choi <akochoi@shaw.ca>
+2007-06-06 Chong Yidong <cyd@stupidchicken.com>
- * Makefile.in (C_SWITCH_SYSTEM_TEMACS): Add.
- [HAVE_CARBON]: Include Mac object files.
+ * image.c (xpm_load): Remove spurious call to xpm_init_color_cache.
- * alloc.c, callproc.c, dispextern.h, dispnew.c, emacs.c,
- fontset.c, frame.c, frame.h, keyboard.c, sysdep.c, term.c,
- termcap.c, window.c, xdisp.c, xfaces.c: Use macros MAC_OS8,
- MAC_OSX, and MAC_OS instead of macintosh.
+2007-06-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * editfns.c [MAC_OS8]: Include stdio.h.
+ * macfns.c (mac_window): Replace WindowPtr with WindowRef.
- * emacs.c [MAC_OS8]: Call mac_initialize instead of x_term_init.
+ * macgui.h: Replace WindowPtr with WindowRef.
- * fontset.c [MAC_OS]: Set Vdefault_fontset to ETL Fixed instead of
- Apple Monaco.
+ * macmenu.c: Replace MenuHandle and GetMenuHandle with MenuRef and
+ GetMenuRef, respectively. Replace WindowPtr with WindowRef.
+ Replace ControlHandle with ControlRef.
+ (install_menu_quit_handler): Rename arg MENU_HANDLE to ROOT_MENU.
- * process.c (QCfamily, QCfilte): Declare extern.
- (wait_reading_process_input) [MAC_OSX]: Clear bit for stdin before
- calling select.
+ * macterm.c: Replace MenuHandle and GetMenuHandle with MenuRef and
+ GetMenuRef, respectively. Replace WindowPtr with WindowRef.
+ Replace ControlHandle with ControlRef.
+ (USE_CARBON_EVENTS): Remove. Use TARGET_API_MAC_CARBON instead.
+ [MAC_OS8] (do_get_menus): Rename variable `menu_handle' to `menu'.
- * termcap.c [MAC_OSX]: Don't define tgetnum, PC, tputs, and tgetent.
+ * macterm.h (struct scroll_bar): Rename member control_handle_low
+ and control_handle_high to control_ref_low and control_ref_high.
+ All uses changed.
+ (SCROLL_BAR_CONTROL_REF, SET_SCROLL_BAR_CONTROL_REF): Rename from
+ SCROLL_BAR_CONTROL_HANDLE and SET_SCROLL_BAR_CONTROL_HANDLE,
+ respectively. All uses changed.
+ (XCreatePixmap, XCreatePixmapFromBitmapData, XSetWindowBackground)
+ (install_window_handler, remove_window_handler): Replace WindowPtr
+ with WindowRef in externs.
- * tparam.c [MAC_OSX]: Don't define BC and UP.
+2007-06-05 Juanma Barranquero <lekktu@gmail.com>
- * config.in [HAVE_CARBON]: Add.
+ * xfaces.c (Finternal_lisp_face_p): Signal error for face alias loops.
- * mac.c, macgui.h, macfns.c, macmenu.c, macterm.c, macterm.h:
- Move here from mac/src and mac/inc.
+2007-06-03 Nick Roberts <nickrob@snap.net.nz>
- * s/darwin.h, m/powermac.h, unexmacosx.c: New files.
+ * keyboard.c (discard_mouse_events): Add GPM_CLICK_EVENT case.
-2002-04-26 Gerd Moellmann <gerd@gnu.org>
+ * frame.c (Fmouse_position, Fmouse_pixel_position):
+ Condition on HAVE_GPM too.
- * xterm.c (x_draw_phys_cursor_glyph): Undo last change.
- Compute phys_cursor_width from the x position returned
- by x_draw_glyhs, which is cheaper.
- (x_display_and_set_cursor): Compute the buffer-local value
- of `cursor-in-non-selected-windows' only when needed.
+ * term.c (term_mouse_highlight): Remove unused variables.
+ (Fterm_open_connection): Set gpm_zerobased to 1.
+ (term_mouse_movement, term_mouse_click, handle_one_term_event):
+ Use zero based co-ordinates.
+ (handle_one_term_event): Report a drag as mouse movement too.
-2002-04-25 Gerd Moellmann <gerd@gnu.org>
+ * Makefile.in (MOUSE_SUPPORT): Define for HAVE_GPM.
- * xterm.c (x_draw_phys_cursor_glyph): Take into account that a box
- cursor on a stretch glyph has a width that depends on
- x_stretch_cursor_p.
+2007-06-03 Chong Yidong <cyd@stupidchicken.com>
-2002-04-25 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+ * image.c (search_image_cache): New function. Require background
+ color match if background color is unspecified in the image spec.
+ (uncache_image, lookup_image): Use it.
- * abbrev.c (abbrev-start-location): Doc fix.
+2007-06-01 Juanma Barranquero <lekktu@gmail.com>
- * indent.c (Fvertical_motion): Fix last change.
+ * window.c (Fshrink_window): Reflow docstring.
-2002-04-25 Gerd Moellmann <gerd@gnu.org>
+2007-06-02 Chong Yidong <cyd@stupidchicken.com>
- * indent.c (Fvertical_motion): Move to the start of the line
- containing PT before moving up or down.
+ * Version 22.1 released.
-2002-04-24 Gerd Moellmann <gerd@gnu.org>
+2007-06-01 Richard Stallman <rms@gnu.org>
- * dispnew.c (update_text_area): Set phys_cursor_on_p to 0 in the
- case of writing a whole row, more or less analogous to the case of
- writing only parts of a row.
+ * xfns.c (x_encode_text): Add GCPRO.
- * xterm.c (x_display_and_set_cursor): Set phys_cursor_width to
- 0 for NO_CURSOR.
+2007-06-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * xterm.c (notice_overwritten_cursor): Fix an off by 1 error.
+ * xfns.c (x_set_name_internal): Save encoded name before
+ x_encode_text in case string data is relocated.
-2002-04-23 Colin Walters <walters@verbum.org>
+2007-05-31 Richard Stallman <rms@gnu.org>
* buffer.c (syms_of_buffer): Doc fix.
-2002-04-23 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (notice_overwritten_cursor): Handle the special case
- of the cursor being in the first blank non-text line at the
- end of a window.
-
- * xterm.c (x_draw_hollow_cursor, x_draw_bar_cursor)
- (x_draw_phys_cursor_glyph): Set phys_cursor_width here.
- (x_display_and_set_cursor): Don't set phys_cursor_width here, for
- bar cursors only, to make phys_cursor_width contain what its name
- suggests.
- (notice_overwritten_cursor): Consider the cursor image erased if
- the output area intersects the cursor image in y-direction.
-
-2002-04-23 Simon Marshall <simon@gnu.org>
-
- * xfns.c (x_set_mouse_color): Change default for cross_cursor
- to XC_hand2.
-
-2002-04-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xdisp.c: Remove unused global variable `minibuf_prompt_pixel_width'.
-
-2002-04-22 Kim F. Storm <storm@cua.dk>
-
- * textprop.c (remove_properties): Fixed trap for malformed plist.
-
-2002-04-22 Richard M. Stallman <rms@gnu.org>
-
- * cmds.c (Fend_of_line): Handle intangible text in mid line.
-
- * window.c (make_window): Initialize height_fixed_p,
- last_cursor_off_p, and p->cursor_off_p slots.
-
-2002-04-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * fns.c (use-dialog-box): Doc fix.
-
-2002-04-19 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xterm.c (note_mode_line_or_margin_highlight): Remove unused
- variables `row', `i' and `area'.
- (XTread_socket) <KeyPress>: Pass KeyPress events when in menu to
- toolkit library.
-
-2002-04-19 Stefan Monnier <monnier@cs.yale.edu>
-
- * xfaces.c (clear_font_table): Don't free the default font of
- a frame even if it's on another display.
- (Finternal_set_lisp_face_attribute): Don't use XFRAME on something
- that could be Qt.
-
-2002-04-19 Juanma Barranquero <lektu@terra.es>
-
- * indent.c (Fmove_to_column): Remove unused local variable
- `next_boundary_byte'.
- (current_column_1): Likewise.
-
-2002-04-19 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (Qhbar): New variable.
- (syms_of_msdos): Intern and staticpro it.
- (IT_set_cursor_type, IT_set_frame_parameters): Handle the `hbar'
- cursor type.
-
-2002-04-19 Dave Lambert <dlambert@acm.org>
-
- Theses change implement an underscore-like (`hbar') cursor.
-
- * xterm.h (text_cursor_kinds): New enumeration member HBAR_CURSOR.
-
- * xterm.c (x_draw_bar_cursor): New argument KIND; callers changed.
- Handle the `hbar' cursor type.
- (x_display_and_set_cursor): Handle the HBAR_CURSOR case.
-
- * xfns.c (Qhbar): New variable.
- (syms_of_xfns): Intern and staticpro it.
- (x_specified_cursor_type): Handle `hbar' cursor.
-
- * s/sol2-5.h (bcopy, bzero, bcmp): Define only if HAVE_BCOPY is
- not defined.
-
-2002-04-18 Richard M. Stallman <rms@gnu.org>
-
- * textprop.c (remove_properties): New arg LIST allows scanning
- either a list or a plist.
- (interval_has_some_properties_list): New function, like
- interval_has_some_properties using list instead of plist.
- All callers changed.
- (Fremove_list_of_text_properties): New function.
- (syms_of_textprop): Defsubr it.
-
-2002-04-17 Eli Zaretskii <eliz@is.elta.co.il>
-
- * s/sol2.h (HAVE_LIBKSTAT): Define only if not already defined.
-
-2002-04-17 Juanma Barranquero <lektu@terra.es>
-
- * indent.c (Fmove_to_column): Remove unused local variable `end_byte'.
-
-2002-04-17 Eli Zaretskii <eliz@is.elta.co.il>
-
- * window.c (coordinates_in_window): Don't report on margin area
- if its width is zero.
-
-2002-04-16 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fx_file_dialog): Decode file name before using.
-
- * w32term.c (construct_drag_n_drop): Likewise.
-
-2002-04-16 Eli Zaretskii <eliz@is.elta.co.il>
-
- * puresize.h (BASE_PURESIZE): Increase to 830000, since we now
- store load-history in pure space.
-
- * s/msdos.h (SYSTEM_PURESIZE_EXTRA): Reduce to 50000.
-
-2002-04-16 Stefan Monnier <monnier@cs.yale.edu>
-
- * xterm.c (Qlatin_1, Qutf_8): New vars.
- (syms_of_xterm): Initialize them.
- (XTread_socket): Eliminate incorrect optimization that tried to avoid
- decoding the output of X*LookupString.
- Always use latin-1 to decode the output of XLookupString.
- Try Xutf8LookupString if XmbLookupString failed.
-
- * region-cache.c (new_region_cache): Use BEG.
-
-2002-04-16 Gerd Moellmann <gerd@gnu.org>
-
- * buffer.c (MMAP_ALLOCATED_P): New macro to be set from system
- configuration files.
- (mmap_enlarge): Enlarge mapped regions only if MMAP_ALLOCATED_P
- returns 0.
-
-2002-04-15 Andreas Schwab <schwab@suse.de>
-
- * config.in: Regenerated using autoheader.
-
- * m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/alpha.h,
- m/altos.h, m/amdahl.h, m/apollo.h, m/arm.h, m/att3b.h, m/aviion.h,
- m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h,
- m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/gec63.h,
- m/gould.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ia64.h,
- m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h,
- m/ibms390.h, m/intel386.h, m/iris4d.h, m/irist.h, m/isi-ov.h,
- m/m68k.h, m/macppc.h, m/masscomp.h, m/mg1.h, m/mips-siemens.h,
- m/mips.h, m/news-r6.h, m/news.h, m/next.h, m/nh3000.h, m/nh4000.h
- m/ns32000.h, m/orion.h, m/pfa50.h, m/plexus.h, m/pmax.h,
- m/powerpcle.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h,
- m/sparc.h, m/sr2k.h, m/symmetry.h, m/tad68k.h, m/tahoe.h,
- m/targon31.h, m/tek4300.h, m/tekxd88.h, m/template.h, m/tower32.h,
- m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/windowsnt.h,
- m/xps100.h, s/aix3-2.h, s/aix4-2.h, s/irix4-0.h, s/irix5-0.h,
- s/sco5.h, s/unixware.h: Don't set HAVE_ALLOCA, C_ALLOCA and
- STACK_DIRECTION, now set by autoconf.
-
-2002-04-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * dispnew.c (marginal_area_string): Sort arguments.
-
- * dispextern.h (marginal_area_string): Add prototype.
-
-2002-04-13 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Finsert_file_contents):
- Don't call temp_output_buffer_setup--do just part, by hand.
-
- * coding.c (run_pre_post_conversion_on_str):
- Don't call temp_output_buffer_setup--do just part, by hand.
-
- * keyboard.c (command_loop_1): Don't call start_hourglass
- or cancel_hourglass when executing a macro.
-
- * marker.c (count_markers): New function.
-
- * xdisp.c (display_mode_element): Don't let mode_line_proptrans_alist
- grow without limit. Move recently used elements to the front.
-
-2002-04-13 Eli Zaretskii <eliz@is.elta.co.il>
-
- * unexelf.c (unexec) [__sgi]: Undo the change from 2002-01-20.
-
-2002-04-12 Gerd Moellmann <gerd@gnu.org>
-
- * xdisp.c (sync_frame_with_window_matrix_rows): Don't give frame
- rows marginal areas.
- (Fdump_frame_glyph_matrix) [GLYPH_DEBUG]: New function.
- (syms_of_xdisp) [GLYPH_DEBUG]: Defsubr it.
-
- * dispnew.c (marginal_area_string): Check that glyph row is enabled.
-
-2002-04-12 Dave Love <fx@gnu.org>
-
- * dispnew.c (marginal_area_string): New.
-
- * window.c (window_part): Add ON_LEFT_MARGIN, ON_RIGHT_MARGIN.
- (Qleft_margin, Qright_margin): Declare.
- (coordinates_in_window, (Fcoordinates_in_window_p): Deal with margins.
-
- * xterm.c (note_mode_line_or_margin_highlight): Renamed from
- note_mode_line_highlight and extended.
-
- * keyboard.c (Qleft_margin, Qright_margin): Declare.
- (make_lispy_event): Deal with mouse events in margins.
-
-2002-04-12 Stefan Monnier <monnier@cs.yale.edu>
-
- * msdos.c (dos_rawgetc): Use a single event for HELP_EVENT.
-
- * keyboard.c (command_loop_1): Turn off transient-mark-mode rather
- than deactivating the mark if tmm is set to `lambda'.
- (gen_help_event, kbd_buffer_store_help_event, kbd_buffer_get_event):
- Use a single event for HELP_EVENT.
- (Fexecute_extended_command): Save last_point_position.
-
-2002-04-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * lisp.h (Fpropertize): Add prototype.
-
- * fns.c (Fy_or_n_p): Use `minibuffer-prompt' face for prompt.
-
-2002-04-10 Colin Walters <walters@verbum.org>
-
- * config.in: Add HAVE_SHARED_GAME_DIR.
-
- * callproc.c (Vgame_score_directory): New variable.
- (syms_of_callproc) <Vgame_score_directory>: DEFVAR_LISP.
-
-2002-04-10 Richard M. Stallman <rms@gnu.org>
-
- * puresize.h (BASE_PURESIZE): Reduce again to avoid big excess.
-
-2002-04-09 Stefan Monnier <monnier@cs.yale.edu>
-
- * minibuf.c (read_minibuf): Use empty_string.
- (Ftry_completion): Allow lambda forms and lists of strings for `alist'.
- Short-circuit the search as soon as it "failed".
- (Fall_completions): Allow lambda forms and lists of strings for alist.
- (Fcompleting_read): Set Qminibuffer_completion_confirm to nil
- when require_match is nil.
- (Ftest_completion): Rename from `test_completion' and export to elisp.
- Call the predicate also when alist is a list.
- Obey Vcompletion_regexp_list.
- (do_completion, Fminibuffer_complete_and_exit): Use it.
- (Fassoc_string): Rename from `assoc_for_completion'.
- Allow list of strings as well and export to elisp.
-
-2002-04-08 Stefan Monnier <monnier@cs.yale.edu>
-
- * puresize.h (BASE_PURESIZE): Increase to 900KB.
-
-2002-04-08 Juanma Barranquero <lektu@terra.es>
-
- * w32.c (sys_accept): Don't hide variable `s'.
-
-2002-04-05 Gerd Moellmann <gerd@gnu.org>
-
- * callint.c (Fcall_interactively): Use INTEGERP instead of
- NUMBERP for checking Vhistory_length.
-
-2002-04-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * sound.c (Fplay_sound_internal): Renamed from Fplay_sound.
- Doc fix to reflect it.
-
-2002-04-04 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (display_mode_element): New arg RISKY.
- Disregard text props found or specified within a variable
- that isn't marked risky-local-variable.
- (Qrisky_local_variable): New variable.
- (syms_of_xdisp): Init and staticpro it.
-
-2002-04-04 Stefan Monnier <monnier@cs.yale.edu>
-
- * undo.c (record_point): New fun.
- (record_delete, record_insert): Use it.
-
-2002-04-03 Juanma Barranquero <lektu@terra.es>
-
- * doc.c (Fdocumentation): Add missing parentheses.
- (Fdocumentation_property): Likewise.
-
-2002-04-03 Stefan Monnier <monnier@cs.yale.edu>
-
- * doc.c (Fdocumentation, Fdocumentation_property): When the doc
- data is 0, just return nil.
-
-2002-04-03 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (syms_of_msdos): Fix last change with
- mouse_autoselect_window.
-
-2002-04-03 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * w32term.c, xterm.c, msdos.c: Rename autoselect_window_p to
- mouse_autoselect_window.
-
-2002-04-02 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (make_lispy_event): Handle unknown keysyms together
- with system-specific keysyms. Use it also for unknown function keys.
-
- * doc.c (reread_doc_file): Return whether reload was attempted.
- (Fdocumentation, Fdocumentation_property): Don't try to reload
- if the doc is 0 and only ask once.
-
- * Makefile.in (lisp, shortlisp): Add ucs-tables.elc.
-
-2002-04-02 Eli Zaretskii <eliz@is.elta.co.il>
-
- * keyboard.c (read_char): If the event was Qselect_window,
- restore timer_idleness_start_time to its previous value.
-
- * msdos.c (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
-
-2002-04-01 Stefan Monnier <monnier@cs.yale.edu>
-
- * region-cache.c (new_region_cache): Use BEG.
-
- * marker.c (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
- Use BEG and BEG_BYTE.
-
- * doc.c (get_doc_string): Return nil if the location is wrong.
- (reread_doc_file): New fun.
- (Fdocumentation, Fdocumentation_property):
- Call it if get_doc_string fails.
- (Fsnarf_documentation): Make it work for a dumped Emacs.
-
- * charset.h (DEC_POS, BUF_DEC_POS): Use BEG_BYTE.
- Bound the search with MAX_MULTIBYTE_LENGTH to avoid pathological case.
-
- * charset.c (Fstring): Allow 0 arguments.
-
- * xterm.c (XTread_socket): Fix int/Lisp_Object confusion.
-
- * process.c (DATAGRAM_CONN_P, list_processes_1)
- (Fprocess_datagram_address, Fset_process_datagram_address)
- (Fset_network_process_options, server_accept_connection):
- Fix some int/Lisp_Object confusions (thank you union types).
-
-2002-04-01 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * msdos.c: Rename x_autoselect_window_p to autoselect_window_p.
-
- * w32term.c: Likewise.
- (note_mouse_movement): Put code for x_autoselect_window_p in #if 0.
-
- * keyboard.c (Qselect_window): New symbol.
- (head_table): Use it.
- (keys_of_keyboard): Bound select-window event to handle-select-window.
- (kbd_buffer_get_event): Make a Lisp event from SELECT_WINDOW_EVENT.
-
- * xterm.c: Rename x_autoselect_window_p to autoselect_window_p.
- (last_window): New variable.
- (XTread_socket): Generate SELECT_WINDOW_EVENTs.
- (note_mouse_movement): Remove reimplemented code in #if 0.
- (XTread_socket): Generate SELECT_WINDOW_EVENTs only for
- Emacs windows.
-
- * termhooks.h (enum event_kind): New event type `SELECT_WINDOW_EVENT'.
-
-2002-03-31 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_get_char_face_and_encoding): Add parameter DISPLAY_P.
- Callers changed.
-
-2002-03-30 Richard M. Stallman <rms@gnu.org>
-
- * window.c (window_scroll_pixel_based): Exit the move_it_by_lines
- loop whenever it stops making progress.
-
- * widget.c (set_frame_size): Don't call change_frame_size.
-
-2002-03-30 Gerd Moellmann <gerd@gnu.org>
-
- * dispnew.c (direct_output_for_insert):
- Call mark_window_display_accurate.
-
-2002-03-29 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_draw_relief_rect): Fix calculations of line lengths.
-
-2002-03-29 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (lread.o): Depend on coding.h.
-
- * lread.c (openp, Fload): Encode the file name before passing it
- to `stat', `access', and `emacs_open'.
- (openp): GCPRO the encoded file name. Don't recompute Lisp
- strings unnecessarily.
-
-2002-03-29 Kim F. Storm <storm@cua.dk>
-
- * fns.c (Flax_plist_put): Doc fix.
-
-2002-03-28 Miles Bader <miles@gnu.org>
-
- * process.c (DATAGRAM_CONN_P): Make sure PROC is really a process.
-
-2002-03-27 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * process.c (set-network-process-options): Add usage.
- (make-network-process): Doc fix.
-
-2002-03-26 Eli Zaretskii <eliz@is.elta.co.il>
-
- * emacs.c (Fdump_emacs): Fix a typo in "command-line-processed".
-
-2002-03-26 Richard M. Stallman <rms@gnu.org>
-
- * fns.c (Fsubstring_no_properties): New function.
- (Flax_plist_get, Flax_plist_put): New functions.
- (syms_of_fns): defsubr them.
-
- * xdisp.c (update_menu_bar): Test only update_mode_lines;
- don't test or alter w->update_mode_line.
-
- * window.c (Fdisplay_buffer): Doc fix.
-
-2002-03-24 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (GET_UNSIGNED_NUMBER): Give proper error for spaces.
-
-2002-03-24 Gerd Moellmann <gerd@gnu.org>
-
- * eval.c (Qdeclare, Vmacro_declaration_function): New variables.
- (Fdefmacro): Handle `(declare ...)'.
- (syms_of_eval) <Qdeclare>: Initialize and staticpro.
- (syms_of_eval) <Vmacro_declaration_function>: DEFVAR_LISP.
-
-2002-03-24 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (xbm_scan, xbm_load_image, xbm_read_bitmap_data)
- (xbm_file_p): Add prototypes.
- (xbm_format, xbm_image_p): Sync with xfns.c.
- (reflect_byte): New function.
- (xbm_read_bitmap_data): Sync with xfns.c, adapt for Windows.
- (xbm_load_image): Create bitmaps with a depth of 1.
- (init_xfns): Enable XBM images.
-
-2002-03-23 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_handle_tool_bar_click): Detect up and down events
- correctly. Do not pass up_modifier to keyboard buffer.
-
- * w32fns.c [HAVE_IMAGES, HAVE_PBM]: Remove conditionals.
-
-2002-03-22 Stefan Monnier <monnier@cs.yale.edu>
-
- * Makefile.in (bootstrapclean): New target.
- (bootstrap-temacs, bootstrap-doc): Remove.
- (bootstrap-emacs): Use a bog-standard `temacs'.
- Don't bother to build a DOC file.
-
- * sysdep.c (wait_for_termination): Use sigsuspend rather than sigpause.
-
- * emacs.c (main): Handle --unibyte, --multibyte, and --no-loadup
- in temacs even if !CANNOT_DUMP.
- (standard_args): Keep --no-loadup even if !CANNOT_DUMP.
-
- * alloc.c (check_pure_size): Only output a warning.
-
-2002-03-22 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fx_create_frame): Enable tool-bar when images are
- supported.
-
- * w32term.c (zv_bits): Declare as short, for word alignment.
- (w32_read_socket) <WM_XBUTTONUP>: Fix last change.
- (syms_of_w32term): Define x-use-underline-position-properties.
+2007-05-30 Nick Roberts <nickrob@snap.net.nz>
- * w32fns.c (x_set_cursor_color): Set cursor_gc as well.
- (clear_image_cache): Block input, fix logic, clear matrices in
- all frames that share this cache.
+ * sysdep.c (init_sys_modes): Add rather than replace with
+ O_NONBLOCK.
-2002-03-22 Eli Zaretskii <eliz@is.elta.co.il>
+ * frame.c [HAVE_GPM] (Fset_mouse_pixel_position): Add call to
+ term_mouse_moveto.
- * emacs.c (main): Update the Copyright year in the blurb printed
- by "emacs --version".
+ * termhooks.h (term_mouse_moveto): New extern.
- * xdisp.c (message_with_string): Fix syntax of a call to GCPRO2.
+ * term.c (mouse_face_window): Rename...
+ (Qmouse_face_window): ...to this.
+ (term_show_mouse_face, term_clear_mouse_face)
+ (term_mouse_highlight): Use Qmouse_face_window.
+ (term_mouse_moveto): New function.
+ (term_mouse_position): Make it work.
+ (syms_of_term): Uncomment assignment to mouse_position_hook.
+ Staticpro Qmouse_face_window.
- * xterm.c (XTread_socket): If XK_ISO_Lock and
- XK_ISO_Last_Group_Lock are defined, handle keysyms between
- XK_ISO_Lock and XK_ISO_Last_Group_Lock similarly to Mode_switch.
-
-2002-03-21 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (menu_bar_items): Mostly undo 2002-02-20 patch, so
- menu-bar bindings in keymap and local-map properties _are_ used.
- But try keymap property first in accordance with 2002-01-03 patch.
- Added comment describing why this is not always reliable.
- (tool_bar_items): Ditto for tool-bar.
-
-2002-03-21 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (x_clear_image_1): Disable color table code.
-
-2002-03-21 Kim F. Storm <storm@cua.dk>
-
- * lisp.h (DEFUN) [USE_NONANSI_DEFUN]: The 2001-10-17 patch
- removed the wrong version of the DEFUN macro; fixed it.
-
- * fns.c (Ffeaturep): Allow subfeature to be a list (test using
- Fmember rather than Fmemq).
- (Fprovide): Check that subfeatures is a list.
-
- * process.c (QCfeature, QCdatagram): Removed variables.
- (QCtype, Qdatagram): New variables.
- (network_process_featurep): Removed function.
- (Fmake_network_process): Removed :feature check.
- Use :type 'datagram instead of :datagram t to create a datagram
- socket. This allows us to add other connection types (e.g. raw
- sockets) later in a consistent manner.
- (init_process) [subprocess, HAVE_SOCKETS]: Provide list of
- supported subfeatures for feature make-network-process.
- (syms_of_process) [subprocess]: Remove QCfeature and QCdatagram.
- Intern and staticpro QCtype and Qdatagram.
- (syms_of_process) [!subprocess]: Intern and staticpro QCtype.
-
- * xfns.c (QCtype): Remove duplicate declaration and
- initialization (is now declared in process.c).
-
- * w32fns.c (QCtype): Remove duplicate declaration and
- initialization (is now declared in process.c).
-
-2002-03-21 Richard M. Stallman <rms@gnu.org>
-
- * regex.c (DISCARD_FAILURE_REG_OR_COUNT): New macro.
- (CHECK_INFINITE_LOOP): Use DISCARD_FAILURE_REG_OR_COUNT
- when jumping to `fail' to avoid undoing reg changes in the
- last iteration of the loop.
- (GET_UNSIGNED_NUMBER): Skip spaces around the number.
-
- * Makefile.in (dispnew.o, sysdep.o, xdisp.o, xselect.o, alloc.o):
- Depend on process.h.
-
-2002-03-20 Jason Rumney <jasonr@gnu.org>
-
- Most of the following changes are still conditional on HAVE_IMAGES
- which is not set by default on Windows.
-
- * emacs.c (main) [WINDOWSNT]: Call init_xfns.
-
- * w32fns.c (x_set_cursor_color): Set foreground of cursor, not frame.
- (Fimage_size, Fimage_mask_p, XPutPixel): New functions.
- (four_corners_best, x_clear_image_1, x_clear_image)
- (x_alloc_image_color, postprocess_image)
- (x_create_x_image_and_pixmap, x_destroy_x_image, xbm_load_image)
- (x_from_x_colors, x_disable_image, pbm_load): Adapt for Windows.
- (init_xfns, syms_of_w32fns): Initialize image functions and constants.
-
- * w32gui.h (struct XImage): Define.
-
- * w32term.c (w32_read_socket) <WM_XBUTTONUP>: Use XFASTINT to
- extract mouse co-ordinates.
-
-2002-03-20 Jason Rumney <jasonr@gnu.org>
-
- * w32.c (init_winsock): Dynamically load new server and UDP
- socket functions.
- (socket_to_fd): New function.
- (sys_socket): Use it.
- (sys_setsockopt, sys_listen, sys_getsockname, sys_accept)
- (sys_recvfrom, sys_sendto): New wrapper functions.
-
- * process.c (QCfamily, QCfilter): Remove duplicate declaration
- and initialization.
-
- * makefile.w32-in (LIBS): Remove $(WSOCK32).
-
-2002-03-20 Eli Zaretskii <eliz@is.elta.co.il>
-
- * process.c (conv_sockaddr_to_lisp, conv_lisp_to_sockaddr):
- Don't use "sun" as a variable, it's a predefined constant on Sun
- machines.
-
-2002-03-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * bytecode.c (Fbyte_code): Revert last change.
-
-2002-03-19 Kim F. Storm <storm@cua.dk>
-
- * makefile.w32-in (LIBS): Add $(WSOCK32).
- From David Ponce <dponce@voila.fr>.
-
-2002-03-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * process.c (wait_reading_process_input): Move variables `pname'
- and `pnamelen' down where they are used.
-
- * bytecode.c (Fbyte_code): Discard unused computed value to
- prevent gcc warning.
-
- * lisp.h (Fplist_member): Add prototype.
-
-2002-03-18 Kim F. Storm <storm@cua.dk>
-
- * config.in: Add HAVE_SENDTO, HAVE_RECVFROM, HAVE_SETSOCKOPT,
- HAVE_GETSOCKOPT, HAVE_GETPEERNAME, HAVE_GETSOCKNAME, and HAVE_SYS_UN_H.
-
- * process.c: Define HAVE_LOCAL_SOCKETS based on HAVE_SYS_UN_H.
- Remove explicit GNU_LINUX settings for datagram support.
-
-2002-03-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * process.c (Fmake_network_process): Remove unused variable `sa'.
- Doc fix. Add usage:.
- (set_socket_options): Remove unused variables `optnum' and `opttype'.
-
-2002-03-17 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (cursor_type_changed): New variable.
- (redisplay_internal): Redisplay all windows if cursor_type_changed.
- Clear it when clearing windows_or_buffers_changed.
- (try_cursor_movement, redisplay_window, try_window_id)
- (try_window_reusing_current_matrix): Test cursor_type_changed
- along with windows_or_buffers_changed.
-
- * window.h (cursor_type_changed): New variable.
-
- * xfns.c (x_set_cursor_type): Set cursor_type_changed,
- not update_mode_lines, and always set it to 1.
-
- * xdisp.c (clear_garbaged_frames): Don't set windows_or_buffers_changed
- if no frames needed redrawing.
-
-2002-03-17 Kim F. Storm <storm@cua.dk>
-
- The following changes add support for network server processes,
- datagram connections, and local (unix) sockets.
-
- * process.h (struct Lisp_Process): New member log.
- Doc fix: Member command used to indicate stopped network process.
- Doc fix: Member childp contains plist for network process.
- Doc fix: Member kill_without_query is inverse of query-on-exit flag.
-
- * process.c (Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
- (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery, QCstop)
- (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature): New
- variables.
- (NETCONN1_P): New macro.
- (DATAGRAM_SOCKETS): New conditional symbol.
- (datagram_address): New array.
- (DATAGRAM_CONN_P, DATAGRAM_CHAN_P): New macros.
- (status_message): Use concat3.
- (Fprocess_status): Add `listen' status to doc string. Return
- `stop' for a stopped network process.
- (Fset_process_buffer): Update contact plist for network process.
- (Fset_process_filter): Ditto. Don't enable input for stopped
- network processes. Server must listen, even if filter is t.
- (Fset_process_query_on_exit_flag, Fprocess_query_on_exit_flag):
- New functions.
- (Fprocess_kill_without_query): Removed. Now defined in simple.el.
- (Fprocess_contact): Added KEY argument. Handle datagrams.
- (list_processes_1): Optionally show only processes with the query
- on exit flag set. Dynamically adjust column widths. Omit tty
- column if not needed. Report stopped network processes. Identify
- server and datagram network processes.
- (Flist_processes): New optional arg `query-only'.
- (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size)
- (conv_lisp_to_sockaddr, set_socket_options)
- (network_process_featurep, unwind_request_sigio): New helper
- functions.
- (Fprocess_datagram_address, Fset_process_datagram_address):
- (Fset_network_process_options): New lisp functions.
- (Fopen_network_stream): Removed. Now defined in simple.el.
- (Fmake_network_process): New lisp function. Code is based on
- previous Fopen_network_stream, but heavily reworked with new
- property list based argument list, support for datagrams, server
- processes, and local sockets in addition to old client-only
- functionality.
- (server_accept_connection): New function.
- (wait_reading_process_input): Use it to handle incoming connects.
- Do not enable input on a new connection if process is stopped.
- (read_process_output): Handle datagram sockets. Use 2k buffer for
- them.
- (send_process): Handle datagram sockets.
- (Fstop_process, Fcontinue_process): Apply to network processes. A
- stopped network process is indicated by setting command field to t.
- (Fprocess_send_eof): No-op if datagram connection.
- (Fstatus_notify): Don't read input for a stream server socket or a
- stopped network process.
- (init_process): Initialize datagram_address array.
- (syms_of_process): Intern and staticpro new variables, defsubr new
- functions.
-
-2002-03-16 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_to_all_x_charsets): Return correct type in
- startup case.
-
-2002-03-16 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (redisplay_internal, redisplay_windows):
- Use list_of_error to call internal_condition_case_1.
- (safe_eval, safe_call): Pass Qt to internal_condition_case_{1,2}
- so as to catch all errors with no possibility of debugger redisplay.
- (list_of_error): New variable.
- (syms_of_xdisp): Init and staticpro it.
-
- * print.c (print_object): Delete `\ ' from printed rep of frame.
-
-2002-03-15 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (dos_rawgetc): Disable the x-autoselect-window feature,
- until its implementation is fixed.
-
-2002-03-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xfns.c (png_load): Remove unused variable `gamma_str'.
-
-2002-03-14 Richard M. Stallman <rms@gnu.org>
-
- * xfns.c (x_real_positions): Handle failure in XQueryTree.
-
-2002-03-14 Miles Bader <miles@gnu.org>
-
- * intervals.c (adjust_for_invis_intang): New function.
- (set_point_both): Use `adjust_for_invis_intang' to do most of the
- work for dealing with invisible+intangible regions. Do so before
- and after both forward and backward movements, to handle both
- front-sticky and rear-sticky cases.
- * textprop.c (text_property_stickiness): Function moved here from
- `editfns.c'.
- * intervals.h (text_property_stickiness): New declaration.
- * editfns.c (char_property_eq): Function removed.
- (text_property_stickiness): Function moved to `textprop.c'.
-
-2002-03-13 Jason Rumney <jasonr@gnu.org>
-
- * config.in: Add STRFTIME_NO_POSIX2.
-
- * strftime.c (my_strftime) [STRFTIME_NO_POSIX2]: Handle %h, %EX
- and %OX when underlying strftime does not.
-
-2002-03-13 Stefan Monnier <monnier@cs.yale.edu>
-
- * xterm.c (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>:
- Use a fixed-size thumb (based on an ad-hoc estimate of 30 chars per
- line) to avoid annoying flicker.
- (xm_scroll_callback): Get rid of the now unnecessary kludge.
- (XTread_socket): Mark it static.
-
- * xdisp.c (display_mode_element): Fix int/Lisp_Object mixup.
-
-2002-03-13 Kim F. Storm <storm@cua.dk>
-
- * puresize.h (BASE_PURESIZE): Increase to 775000.
-
-2002-03-12 Juanma Barranquero <lektu@terra.es>
-
- * editfns.c (syms_of_editfns): Fix typo.
-
-2002-03-12 Gerd Moellmann <gerd@gnu.org>
-
- * xsmfns.c: Include stdio.h because termhooks.h needs it.
- Include termopt.h for interrupt_input.
-
-2002-03-11 Andreas Schwab <schwab@suse.de>
-
- * coding.c (syms_of_coding) <file-coding-system-alist>: Doc fix.
-
-2002-03-11 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (note_mouse_movement): Put code for
- x_autoselect_window_p in #if 0.
-
- * lread.c (Fload): Don't assume that message_with_string uses the
- string it is given like a C string.
-
-2002-03-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (x_session_check_input, x_session_initialize): Declare.
-
- * xterm.c (XTread_socket): Add call to x_session_check_input and
- x_session_have_connection.
- (x_initialize): Add call to x_session_initialize.
-
- * termhooks.h (enum event_kind): Add save_session_event.
-
- * keyboard.c: Add Emacs event save_session_event.
-
- * emacs.c (main): Add call to syms_of_xsmfns.
-
- * lisp.h (syms_of_xsmfns): Declare extern.
-
- * config.in: Add HAVE_X_SM.
-
- * Makefile.in (LIBXT): Add -lSM -lICE
- if HAVE_X_SM and not USE_X_TOOLKIT.
- (XOBJ): New file xsmfns.c added.
-
- * xsmfns.c: New file for X session management.
-
-2002-03-09 Jason Rumney <jasonr@gnu.org>
-
- * fileio.c (Fcopy_file) [WINDOWS_NT]: Ensure file is not
- read-only when setting modified time.
-
-2002-03-08 Gerd Moellmann <gerd@gnu.org>
-
- * xdisp.c (move_it_vertically_backward): At the end of the function,
- when moving forward by lines, treat terminal frames specially.
-
- * keyboard.c (echo_char): Make sure to add a separator between
- keys even if echo_dash hasn't been called.
-
- * xdisp.c: Use new string macros.
- (update_echo_area): Pass number of bytes to message3 instead of
- number of chars.
- (set_message_1): Don't access a string's size_byte directly.
- (decode_mode_spec_coding): Use number of bytes of eoltype string
- instead number of chars.
-
- * lisp.h (SREF, SDATA, SCHARS, SBYTES, SMBP): New macros.
-
-2002-03-08 Juanma Barranquero <lektu@terra.es>
-
- * w32fns.c (Fx_display_color_cells): Force 24+ bit color depths to
- 24-bit.
-
-2002-03-06 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_draw_hollow_cursor): Draw same size as block cursor.
-
-2002-03-06 Gerd Moellmann <gerd@gnu.org>
-
- * keyboard.c (echo_prompt, echo_char, echo_dash, echo_now)
- (cancel_echoing, echo_length, echo_truncate): Changed to
- work with new kboard definition.
- (echo_now): Use message3_nolog instead of message2_nolog.
-
- * alloc.c (mark_kboards): Mark echo_string.
-
- * keyboard.h (ECHOBUFSIZE): Removed.
- (struct kboard): Member echoptr removed, member echobuf renamed
- to echo_string.
-
- * xdisp.c (message_with_string): Use Fformat instead of doprnt and
- message3 instead of message2 to display the message using STRING's
- text properties.
-
-2002-03-05 Andreas Schwab <schwab@suse.de>
-
- * xdisp.c (hscroll_margin): Change to EMACS_INT.
-
-2002-03-05 Per Abrahamsen <abraham@dina.kvl.dk>
-
- * frame.c (default-frame-alist): Explain that setting it doesn't
- affect existing frames.
-
-2002-03-05 Stefan Monnier <monnier@cs.yale.edu>
-
- * indent.c (skip_invisible): Fix my brain fart.
-
- * dispnew.c (sit_for): Don't wait if executing a kbd macro.
-
-2002-03-04 Stefan Monnier <monnier@cs.yale.edu>
-
- * dosfns.c, dosfns.h, dispnew.c, dispextern.h, commands.h, charset.c,
- * alloc.c, abbrev.c, emacs.c, eval.c, keyboard.c, keyboard.h,
- * lisp.h, lread.c, sysdep.c, termcap.c, termchar.h, w32term.c,
- * window.c, xdisp.c, xselect.c, xterm.c: Change defvar_int definition
- and variables to use EMACS_INT instead of just int.
-
- * buffer.c (syms_of_buffer): Allow non-string `mode-name'.
-
-2002-03-04 Eli Zaretskii <eliz@is.elta.co.il>
-
- * sysdep.c (sys_subshell) [MSDOS]: If PWD is set in the
- environment, pass it down with corrected value.
-
-2002-03-04 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * lread.c (read_filtered_event): Do not call start_hourglass
- before returning.
-
-2002-03-04 Juanma Barranquero <lektu@terra.es>
-
- * w32term.c (x_display_and_set_cursor): Fix typo.
-
-2002-03-03 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fmake_temp_name): Doc fix.
-
-2002-03-03 Gary Wong <gtw@gnu.org>
-
- * termcap.c [!emacs]: Replace ospeed for building standalone
- libtermcap, for binary compatibility.
-
- * tparam.c [!emacs]: Move #define of bcopy to after string.h.
-
-2002-03-03 Richard M. Stallman <rms@gnu.org>
-
- * xrdb.c (file_p): Rename arg `path' to `filename'.
-
- * abbrev.c (Fexpand_abbrev): Increment plist as use count
- only if it is an integer.
-
- * xfns.c (png_load): Set screen_gamma based on f->gamma.
- If png_get_sRGB gives an answer, call png_set_gamma
- using the default image gamma value.
-
- * lread.c (read1): When reading from a file, default string to
- multibyte only if it has some multibyte characters.
-
- * print.c (print_object): Output multibyte chars 128...255
- using \x even if ! print_escape_multibyte.
-
- * xdisp.c (display_mode_element): Move the places where
- bytepos, charpos, this, and lisp_string are set.
- Use lisp_string to set bytepos.
-
- * xdisp.c (redisplay_internal):
- Call clear_image_cache only if HAVE_WINDOW_SYSTEM.
-
- * xdisp.c (display_mode_element): Merge properties specified with
- :propertize onto those that come with the string.
-
-2002-03-03 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xdisp.c (syms_of_xdisp) <auto-hscroll-mode>: Renamed from
- automatic-hscrolling. Users changed.
- <hscroll-margin>: Renamed from automatic-hscroll-margin.
- Users changed.
- <hscroll-step>: Renamed from automatic-hscroll-step. Users changed.
-
-2002-03-02 Eli Zaretskii <eliz@is.elta.co.il>
-
- * buffer.c (syms_of_buffer) <buffer-file-coding-system>: Doc fix.
-
-2002-03-02 Kim F. Storm <storm@cua.dk>
-
- * window.c (Fminibuffer_selected_window): New function.
- (syms_of_window): Defsubr it.
-
-2002-03-01 Kim F. Storm <storm@cua.dk>
-
- * window.h (struct window): New member phys_cursor_width.
-
- * window.c (make_window, replace_window): Init phys_cursor_width.
-
- * xterm.c (x_display_and_set_cursor): Blink box cursor using
- hollow box cursor. Blink bar cursor using 1 pixel wide bar.
-
- * w32term.c (x_display_and_set_cursor): Blink box cursor using
- hollow box cursor. Blink bar cursor using 1 pixel wide bar.
-
- * lisp.h (GCPRO6): New macro.
-
- * process.c (Fopen_network_stream): Use GCPRO6.
-
-2002-03-01 Kim F. Storm <storm@cua.dk>
-
- * process.c (Qconnect, Qfailed): New variables.
- (syms_of_process): Intern and staticpro them.
- (Fprocess_status): Document connect and failed return values.
- [NON_BLOCKING_CONNECT]: New conditional.
- (connect_wait_mask, num_pending_connects): New variables.
- (status_message): Convert Qfailed status.
- (Fopen_network_stream): Added support for non-blocking connect.
- New optional args: filter, sentinel, non_blocking. Doc updated.
- [HAVE_GETADDRINFO, !HAVE_GETADDRINFO]: Merged common code.
- (deactivate_process): Handle pending non-blocking connect.
- (wait_reading_process_input): Poll for status of non-blocking
- connects. Exec sentinel directly when connect succeeds.
- (status_notify): Don't read process output if not yet connected.
-
-2002-02-28 Kim F. Storm <storm@cua.dk>
-
- * window.c (minibuf_selected_window): Renamed from
- Vminibuf_selected_window. Users changed.
- (syms_of_window): Staticpro it.
-
-2002-02-26 Kim F. Storm <storm@cua.dk>
-
- The following changes add a new Vminibuf_selected_window variable
- which is similar to Vminibuf_scroll_window, but which is only set
- on entry to the minibuffer (from a non-minibuffer window):
-
- * window.c (Vminibuf_selected_window): New variable.
- (struct save_window_data): New member minibuf_selected_window.
- (Fset_window_configuration): Restore Vminibuf_selected_window.
- (Fcurrent_window_configuration): Save Vminibuf_selected_window.
- Set minibuf_scroll_window member to nil if minibuf_level is 0.
- (compare_window_configurations): Compare minibuf_selected_window.
-
- * window.h (Vminibuf_selected_window): Declare extern.
-
- * minibuf.c (read_minibuf): Set Vminibuf_selected_window on first
- entry to minibuffer or on entry from a non-minibuffer window.
-
- * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3): Compare with
- Vminibuf_selected_window instead of Vminibuf_scroll_window.
-
- * xdisp.c (init_iterator): Compare with Vminibuf_selected_window
- instead of Vminibuf_scroll_window when deciding in which window
- the region should be highlighted. Consequently, the region remains
- highlighteded even when a completion buffer is also displayed.
-
-2002-02-26 Eli Zaretskii <eliz@is.elta.co.il>
-
- * fileio.c (Fsubstitute_in_file_name): Fix the change from 2002-02-08.
-
- * xselect.c (Qcompound_text_with_extensions): Renamed from
- Qcompound_text_no_extensions.
- (lisp_data_to_selection_data, syms_of_xselect): Use the new name.
-
-2002-02-26 Juanma Barranquero <lektu@terra.es>
-
- * w32proc.c (syms_of_ntproc): Doc fix.
-
-2002-02-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * intervals.h: Include "dispextern.h" unconditionally.
-
-2002-02-24 Jason Rumney <jasonr@gnu.org>
-
- * Makefile.in (WINNT_SUPPORT) [WINDOWSNT]: Add w32-vars.elc
- and disp-table.elc.
- (lisp): Add emacs-lisp/backquote.elc.
-
-2002-02-24 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (Flookup_key): Fix problem in 2001-12-28 patch:
- The validation of the event type was too strict as it didn't
- allow string events; buffer names are used in bindings for
- menu-bar-select-buffer (see `menu-bar-update-buffers').
-
-2002-02-23 Kim F. Storm <storm@cua.dk>
-
- The following changes rework my patch of 2002-02-06 which
- added command remapping by entering the commands directly into
- the keymaps. Now, command remapping uses an explicit `remap'
- prefix in the keymaps, i.e. [remap COMMAND].
-
- * keymap.c (Qremap, remap_command_vector): New variables.
- (is_command_symbol): Remove function.
- (Fdefine_key): No longer accept a symbol for KEY.
- Added validation of [remap COMMAND] argument for KEY.
- The DEF is no longer required to be a symbol when remapping a command.
- (Fremap_command): New function to remap command through keymaps.
- (Flookup_key): Perform command remapping initiated by
- Fremap_command directly for speed.
- (Fkey_binding): Use Fremap_command for command remapping.
- (where_is_internal): Handle new command remapping representation.
- (syms_of_keymap): Intern Qremap, initialize remap_command_vector,
- staticpro them. Defsubr Fremap_command.
-
- * keymap.h (Fremap_command): Declare extern.
- (is_command_symbol): Remove extern.
-
- * keyboard.c (command_loop_1): Use Fremap_command for command
- remapping; now try command remapping for all symbols.
-
-2002-02-23 Eli Zaretskii <eliz@is.elta.co.il>
-
- * coding.h (run_pre_post_conversion_on_str): Add prototype.
-
-2002-02-23 Jason Rumney <jasonr@gnu.org>
-
- * w32select.c (Fw32_set_clipboard_data): Run pre-write-conversion
- on the string before encoding it.
- (Fw32_get_clipboard_data): Run post-read-conversion on the string
- after decoding it.
-
- * w32fns.c (w32_wnd_proc) <WM_TIMER>: Fix last change.
-
-2002-02-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * w32term.c (enter_timestamp): Remove unused static variable to
- prevent warning.
-
- * xterm.c (enter_timestamp): Put in #if 0 to prevent warning.
-
-2002-02-23 Eli Zaretskii <eliz@is.elta.co.il>
-
- * w16select.c (Fw16_get_clipboard_data): Fix last change.
-
- * xselect.c (selection_data_to_lisp_data): Fix last change.
-
-2002-02-22 Jason Rumney <jasonr@gnu.org>
-
- * w32term.h (struct w32_output): New member menu_command_in_progress.
-
- * w32menu.c (menubar_selection_callback): Free the menu and
- clear the menu_command_in_progress flag.
-
- * w32fns.c (mouse_move_timer, mouse_button_timer): Initialize.
- (menu_free_timer): New variable.
- (MENU_FREE_ID, MENU_FREE_DELAY): New constants.
- (w32_wnd_proc) <WM_TIMER>: Handle menu_free_timer.
- <WM_EXITMENULOOP>: Delay before freeing menu. Do nothing if a
- menu command is in progress.
- <WM_COMMAND>: Set the menu_command_in_progress flag.
- Kill any menu_free_timer that is running.
-
- * w32term.c (w32_text_out): Renamed from W32_TEXTOUT.
- Call ExtTextOutA rather than ExtTextOut.
-
-2002-02-22 Eli Zaretskii <eliz@gnu.org>
-
- * puresize.h (BASE_PURESIZE): Increase to 755000.
-
-2002-02-22 Eli Zaretskii <eliz@is.elta.co.il>
-
- * w16select.c (Fw16_set_clipboard_data): Run pre-write-conversion
- on the string before encoding it.
- (Fw16_get_clipboard_data): Run post-read-conversion on the string
- after decoding it.
-
-2002-02-22 Eli Zaretskii <eliz@is.elta.co.il>
-
- Support for ICCCM Extended Segments in X selections:
-
- * xselect.c <Qcompound_text_no_extensions>: New variable.
- (syms_of_xselect): Intern and staticpro it.
- (selection_data_to_lisp_data): Run post-read-conversion on decoded
- selection text.
- (lisp_data_to_selection_data): If next-selection-coding-system is
- compound-text-no-extensions, set the type of selection to be
- compound-text.
-
- * xterm.h (x_encode_text): Update prototype.
-
- * xfns.c (x_encode_text): Accept additional arg SELECTIONP; all
- callers changed. If SELECTIONP is non-zero, run the
- pre-write-conversion function before encoding the selection text.
-
-2002-02-21 Kim F. Storm <storm@cua.dk>
-
- * frame.c (syms_of_frame): Change mouse-highlight default to t.
-
- * keyboard.c (kbd_buffer_get_event) [WINDOWSNT]:
- Correct composing of language-change event.
-
-2002-02-20 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (menu_bar_items): Don't include keymap or local-map
- bindings at PT when building menu (the menu is not updated often
- enough for this to work reliable).
- (tool_bar_items): Likewise.
- (current_active_maps): Removed unused (and buggy) function.
-
-2002-02-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xfns.c (gif_load): Use correct width and height for GIF images.
-
-2002-02-19 Eli Zaretskii <eliz@is.elta.co.il>
-
- * floatfns.c (Fatan): Accept an optional second arg and call
- atan2 if passed 2 args.
-
-2002-02-18 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (glyph_rect): Determine the row and glyph more precisely.
-
-2002-02-17 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_autoselect_window_p): New variable.
- (syms_of_w32term): DEFVAR_BOOL and initialize it.
- (note_mouse_movement): Use it.
-
- * w32fns.c (w32_load_system_font): Never set fonts_changed_p to zero.
-
- * w32bdf.c (w32_load_bdf_font): Maybe set fonts_changed_p.
-
- * w32fns.c (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth):
- New variables.
- (syms_of_w32fns): Intern and staticpro them.
- (x_frame_parms) <"fullscreen">: New parameter.
- (x_fullscreen_move, x_set_fullscreen): New functions.
- (x_set_frame_parameters): Support Qfullscreen.
- (x_real_positions): Save x/y_pixels_diff frame params.
- (x_figure_window_size): Support full-screen frames.
- (Fx_create_frame): Default the fullscreen parameter.
-
- * w32term.c (x_check_fullscreen, x_check_fullscreen_move)
- (x_fullscreen_adjust): New functions.
- (w32_read_socket) <WM_WINDOWPOSCHANGED>: Don't resize to
- fullscreen. Call x_check_fullscreen_move, and set the
- want_fullscreen member of output_data.w32
- <WM_ACTIVATE, WM_ACTIVATEAPP>: Call x_check_fullscreen.
-
- * w32term.h: New enum for FULLSCREEN_* constants.
- (struct w32_output): New members want_fullscreen, x_pixels_diff,
- y_pixels_diff, x_pixels_outer_diff, and y_pixels_outer_diff.
- (x-fullscreen-adjust): New prototype.
-
-2002-02-17 Kim F. Storm <storm@cua.dk>
-
- * frame.c (Vmouse_highlight): New variable.
- (syms_of_frame): DEFVAR_LISP it.
-
- * frame.h (Vmouse_highlight): Declare extern.
-
- * xterm.h (struct x_display_info): Add mouse_face_hidden.
-
- * xterm.c (disable_mouse_highlight): Removed variable.
- (note_mouse_highlight): Don't highlight if Vmouse_highlight is nil.
- (show_mouse_face): Don't show highlight if mouse_face_hidden is set.
- (XTread_socket): Turn mouse_face_hidden off after mouse movement,
- and on after keyboard input.
- (x_term_init): Initialize mouse_face_hidden.
-
- * msdos.h (struct display_info): Add mouse_face_hidden.
-
- * msdos.c (disable_mouse_highlight): Removed variable.
- (show_mouse_face): Don't show highlight if mouse_face_hidden is set.
- (IT_note_mouse_highlight): Don't highlight if Vmouse_highlight is nil.
- (internal_terminal_init): Initialize mouse_face_hidden.
- (dos_rawgetc): Turn mouse_face_hidden off after mouse movement,
- and on after keyboard input.
-
- * w32term.h (struct w32_display_info): Add mouse_face_hidden.
-
- * w32term.c (disable_mouse_highlight): Removed variable.
- (note_mouse_highlight): Disable highlight if Vmouse_highlight is nil.
- (show_mouse_face): Don't show highlight if mouse_face_hidden is set.
- (w32_read_socket): Turn mouse_face_hidden off after mouse movement,
- and on after keyboard input.
- (w32_initialize_display_info): Initialize mouse_face_hidden.
-
-2002-02-16 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (last_mouse_window): New variable.
- (dos_rawgetc): Fix last change--if the mouse is in the same window
- as recorded in last_mouse_window, don't select this window.
-
- * Makefile.in (lisp, shortlisp): Use cus-start.elc, not cus-start.el.
-
- * msdos.c (x_autoselect_window_p): New variable.
- (syms_of_msdos): Defvar it.
- (dos_rawgetc): If x_autoselect_window_p is set, select the window in
- which the last mouse movement occured, unless it is already selected.
-
- * xdisp.c (automatic_hscroll_margin, Vautomatic_hscroll_step):
- New variables.
- (syms_of_xdisp): DEVFAR them.
- (hscroll_window_tree): Use automatic_hscroll_margin and
- Vautomatic_hscroll_step to compute the amount of window scrolling.
-
-2002-02-16 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xterm.c (x-autoselect-window): New variable.
- (note_mouse_movement): Use it.
-
- * keyboard.c: Do not include "systime.h" twice.
-
-2002-02-15 Andreas Schwab <schwab@suse.de>
-
- * puresize.h (PURESIZE_RATIO): Increase to 9/5.
-
- * alloc.c (NSTATICS): Increase to 1280.
-
-2002-02-15 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
- * alloc.c (NSTATICS): Bump to 1026.
-
- * xterm.c (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
- (Vx_super_keysym): New variables.
- (syms_of_xterm): DEFVAR_LISP them.
- (x_x_to_emacs_modifiers, x_emacs_to_x_modifiers): Use the
- variables to determine which keys to use for the various modifiers.
-
-2002-02-13 Kim F. Storm <storm@cua.dk>
-
- * window.c (Vmode_line_in_non_selected_windows): Removed.
- (mode_line_in_non_selected_windows): New variable.
- (syms_of_window): DEFVAR_BOOL it.
-
- * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3):
- Use mode_line_in_non_selected_windows.
- (mode_line_in_non_selected_windows): Declare extern.
- (Vmode_line_in_non_selected_windows): Removed extern.
-
-2002-02-13 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (Fthis_command_keys, Fthis_command_keys_vector)
- (Fthis_single_command_keys, Fthis_single_command_raw_keys)
- (Fclear_this_command_keys): Doc fixes.
-
- * xfaces.c (Finternal_make_lisp_face, Finternal_copy_lisp_face)
- (update_face_from_frame_parameter): Increment face_change_count
- and windows_or_buffers_changed to force redisplay using changed faces.
-
- * xdisp.c (QCpropertize): New variable.
- (mode_line_proptrans_alist): New variable.
- (display_mode_element): New arg PROPS; all calls changed.
- Implement this, for strings.
- Handle literal output of strings by sharing the
- main-line code for strings, using local var `literal'.
- Handle :propertize feature.
- (syms_of_xdisp): Initialze and staticpro QCpropertize and
- mode_line_proptrans_alist.
-
-2002-02-11 Kim F. Storm <storm@cua.dk>
-
- * window.c (Vmode_line_in_non_selected_windows): New variable.
- (syms_of_window): DEFVAR_LISP it.
-
- * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3): New macro.
- (CURRENT_MODE_LINE_FACE_ID): Use it.
- (Vmode_line_in_non_selected_windows): Declare extern.
-
- * xdisp.c (display_mode_lines): Use CURRENT_MODE_LINE_FACE_ID_3
- to get mode line face.
-
-2002-02-11 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (Vx_bitmap_file_path, x_stretch_cursor_p): Remove these
- variables; cus-start.el doesn't need them anymore.
-
-2002-02-09 Kim F. Storm <storm@cua.dk>
-
- * insdel.c (make_gap_smaller): Preserve BEG_UNCHANGED during gap
- reduction. This fixes a display problem where stray newlines were
- inserted in the window (corrected by C-l). Clarified code (IMHO).
-
-2002-02-09 Eli Zaretskii <eliz@is.elta.co.il>
-
- * dispextern.h (CURRENT_MODE_LINE_FACE_ID): Fix last change.
-
- * xdisp.c (display_mode_lines): Fix last change.
-
-2002-02-09 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (enum_font_cb2): Don't let charsets unknown to Windows
- match each other.
- (w32_load_system_font): Prevent Cleartype fonts from loading.
- (Fx_show_tip): Ensure tip frames are above other topmost windows.
-
-2002-02-09 Kim F. Storm <storm@cua.dk>
-
- * dispextern.h (CURRENT_MODE_LINE_FACE_ID): New macro.
- (CURRENT_MODE_LINE_HEIGHT): Use it.
- (enum face_id): Add MODE_LINE_INACTIVE_FACE_ID.
-
- * xdisp.c (window_box_height): Use CURRENT_MODE_LINE_FACE_ID.
- (pos_visible_p, handle_face_prop): Likewise.
- (display_mode_lines): Likewise, but for the real selected window.
- (init_iterator) [row == NULL]: Handle MODE_LINE_INACTIVE_FACE_ID.
-
- * xfaces.c (Qmode_line_inactive): New face variable for mode-line
- in non-selected windows.
- (realize_basic_faces): Realize it.
- (syms_of_term): Intern and staticpro it.
-
-2002-02-08 Kim F. Storm <storm@cua.dk>
-
- * alloc.c (SETJMP_WILL_LIKELY_WORK, SETJMP_WILL_NOT_WORK):
- Changed mail addresses to emacs-devel@gnu.org.
-
-2002-02-08 Eli Zaretskii <eliz@is.elta.co.il>
-
- * fileio.c (Fsubstitute_in_file_name): If the file name includes
- ~user, and there's no such user, don't discard everything before ~user.
-
- * floatfns.c (Fround): Doc fix.
-
-2002-02-08 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * sysdep.c (init_system_name): Put unused variable `p' in #if 0.
-
-2002-02-07 Stefan Monnier <monnier@cs.yale.edu>
-
- * lisp.h (Fx_file_dialog): Add extern decl (used in fileio.c).
-
-2002-02-07 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (where_is_internal): Only check whether definition is
- remapped if it fulfills is_command_symbol.
-
-2002-02-07 Andreas Schwab <schwab@suse.de>
-
- * s/gnu-linux.h (GC_LISP_OBJECT_ALIGNMENT): Define to 2 for m68k.
-
- * alloc.c (mark_stack): Don't assume sizeof (Lisp_Object) is 4.
-
-2002-02-06 Kim F. Storm <storm@cua.dk>
-
- * keymap.c (Fdefine_key): Allow symbol as KEY argument for
- defining command remapping. Doc updated.
- (Flookup_key): Remap command through keymap if KEY is a symbol.
- (is_command_symbol): New function.
- (Fkey_binding): Use it. New optional argument NO-REMAP.
- Doc updated. Callers changed. Perform command remapping via
- recursive call unless that arg is non-nil.
- (where_is_internal): New argument no_remap. Callers changed.
- Call recursively to find original key bindings for a remapped
- comand unless that arg is non-nil.
- (Fwhere_is_internal): New optional argument NO-REMAP.
- Doc updated. Callers changed. Pass arg to where_is_internal.
-
- * keymap.h (Fkey_binding, Fwhere_is_internal): Update prototype.
- (is_command_symbol): Add prototype.
-
- * keyboard.c (Vthis_original_command): New variable.
- (syms_of_keyboard): DEFVAR_LISP it.
- (command_loop_1): Set it, and perform command remapping.
-
-2002-02-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c (recursive_edit_1): Call cancel_hourglass unconditionally.
-
-2002-02-06 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_native_per_char_metric): Disable 2002-01-20 change.
-
-2002-02-06 Eli Zaretskii <eliz@is.elta.co.il>
-
- * charset.c (get_charset_id): Use if-else instead of ?:.
-
-2002-02-06 Richard M. Stallman <rms@gnu.org>
-
- * filelock.c (S_ISLNK): Define if not defined.
-
-2002-02-03 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fdo_auto_save): Improve "auto save disabled" msg.
-
- * lread.c (read1): Redesign strategy for force_multibyte and
- force_singlebyte. Now is_multibyte records whether read_buffer
- is multibyte. Encountering any multibyte character makes it so.
-
-2002-02-02 Stefan Monnier <monnier@cs.yale.edu>
-
- * term.c (term_get_fkeys_1): If `k0' and `k;' are both specified and
- with the same sequence, map that sequence to f10 rather than f0.
-
-2002-02-03 Andreas Schwab <schwab@suse.de>
-
- * s/gnu-linux.h: Check for __mc68000__ instead of __m68k__, the
- latter never being defined on GNU/Linux.
-
-2002-02-02 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xfaces.c (realize_default_face): Don't set the weight and slant of
- the default face to Qnormal, unless these attributes are unspecified.
-
-2002-02-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c (command_loop_1) [HAVE_X_WINDOWS]:
- Call cancel_hourglass unconditionally.
-
- * eval.c (Fsignal): Remove duplicated declaration of
- the variable `display_hourglass_p'.
-
-2002-01-31 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (region_limit): Nicer error message.
-
- * coding.c (decode_composition_emacs_mule):
- Give up if NCOMPONENT gets too large to index `component'.
-
- * callint.c (check_mark): New arg to specify clearer error message.
- Callers changed.
-
-2002-01-27 Richard M. Stallman <rms@gnu.org>
-
- * minibuf.c (Fcompleting_read): Doc fix.
-
-2002-01-27 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * minibuf.c (Fread_from_minibuffer, Fread_command, Fread_function)
- (Fread_variable, Fread_buffer, minibuffer-completion-confirm):
- Fix doc-strings.
-
-2002-01-26 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (syms_of_buffer): Doc fixes for scroll-...-aggressively.
-
- * xdisp.c (try_scrolling): Exchange uses of scroll_down_aggressively
- and scroll_up_aggressively.
-
-2002-01-26 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c (parse_tool_bar_item): Remove duplicated prototypes.
-
-2002-01-25 Stefan Monnier <monnier@cs.yale.edu>
-
- * textprop.c (Fnext_property_change, Fnext_single_property_change)
- (Fprevious_property_change, Fprevious_single_property_change):
- Stay within the narrowed-buffer boundaries.
-
-2002-01-25 Eli Zaretskii <eliz@is.elta.co.il>
-
- * term.c (Ftty_display_color_cells): New function.
- (syms_of_term): Defsubr it.
- (Ftty_display_color_cells, Ftty_display_color_p): Change the
- argument name to DISPLAY. Doc fix.
-
- * dispextern.h: Add prototype for set_tty_color_mode and
- tty_setup_colors.
-
-2002-01-24 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_scroll_run): Use ScrollWindowEx in place of BitBlt.
- If region left to draw is not what was expected, mark the frame as
- garbaged.
-
- * w32fns.c (w32_wnd_proc) <WM_PAINT>: Initialize update_rect.
- Combine the regions returned by BeginPaint and GetUpdateRect.
-
-2002-01-23 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_update_window_begin): Only hide caret if
- w32_use_visible_system_caret is set.
- (x_update_window_end): Only show caret if
- w32_use_visible_system_caret is set.
- (syms_of_w32term): Handle SystemParametersInfo call failing.
-
- * w32fns.c (syms_of_w32fns): Initialize w32_visible_system_caret_hwnd.
-
-2002-01-22 Richard M. Stallman <rms@gnu.org>
-
- * unexelf.c (unexec): Define n so as to cause compilation error
- for the code where people have often written n instead of nn.
-
- * .gdbinit (hookpost-run): Defined.
-
-2002-01-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_set_frame_parameters): Typo in previous fix corrected.
-
-2002-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
- if fullscreen is being set.
-
-2002-01-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * minibuf.c (Fminibuffer_contents)
- (Fminibuffer_contents_no_properties, Fread_from_minibuffer)
- (Fread_string, Fread_no_blanks_input, Fcompleting_read): Doc fixes.
-
-2002-01-21 Richard M. Stallman <rms@gnu.org>
-
- * window.c (check_frame_size): Fix minimum height calculation.
-
-2002-01-20 Ken Raeburn <raeburn@gnu.org>
-
- * dispextern.h (WINDOW_WANTS_MODELINE_P): Use XFASTINT on window
- height before comparison.
- (WINDOW_WANTS_HEADER_LINE_P): Likewise.
-
-2002-01-20 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_system_caret_width): Remove.
- (w32_use_visible_system_caret): New user flag.
- (syms_of_w32term): DEFVAR_BOOL it. Initialize based on whether
- Windows reports a screen reader running.
- (x_update_window_begin): Hide the system caret.
- (x_update_window_end): Show the system caret.
- (x_display_and_set_cursor): Don't draw a cursor when
- w32_use_visible_system_caret is set. Do not adjust width.
-
- * w32fns.c (w32_visible_system_caret_hwnd): New static variable.
- (w32_wnd_proc) <WM_KILL_FOCUS, WM_EMACS_DESTROY_CARET>: Set it.
- <WM_EMACS_TRACK_CARET>: Arrange for system caret to be visible if
- the user requests it. Use system default width when creating.
- <WM_EMACS_HIDE_CARET, WM_EMACS_SHOW_CARET>: Handle new messages.
-
- * w32term.h (WM_EMACS_SHOW_CARET, WM_EMACS_HIDE_CARET):
- New window messages.
-
-2002-01-20 Richard M. Stallman <rms@gnu.org>
-
- * window.c (MIN_SAFE_WINDOW_HEIGHT): Value now 1.
-
-2002-01-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * doprnt.c (doprnt1): Fix typos in error call.
-
-2002-01-20 Eli Zaretskii <eliz@is.elta.co.il>
-
- * unexelf.c (unexec) [__sgi]: Support the .got sections.
-
-2002-01-20 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (w32_native_per_char_metric): Don't trust the metrics
- that Windows returns. If a double check fails, try to guess how
- ExtTextOut is going to act.
-
- * w32fns.c (w32_load_system_font, w32_to_x_charset): Use strnicmp
- in place of stricmp.
- (w32_list_synthesized_fonts): Removed.
- (w32_to_all_x_charsets, enum_font_maybe_add_to_list): New functions.
- (struct enumfont_t): New element; list.
- (enum_font_cb2): List all style and charset variations of a font.
- (Fw32_select_font): New optional argument; include_proportional.
- Exclude vertical fonts. Exclude proportional fonts unless
- include_proportional is non-nil.
- (w32_enable_synthesized_fonts): Change to a boolean.
- (Fw32_send_sys_command): Doc fix.
-
-2002-01-19 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * dispnew.c (update_frame): Move the variable `tem' to the block
- where it is used.
-
-2002-01-19 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fx_create_frame): Bind redisplay-dont-pause around
- call to face-set-after-frame-default.
-
-2002-01-18 Richard M. Stallman <rms@gnu.org>
-
- * dispextern.h (WINDOW_WANTS_MODELINE_P): Check window height > 1.
- (WINDOW_WANTS_HEADER_LINE_P): Check window height provides room.
-
-2002-01-17 Richard M. Stallman <rms@gnu.org>
-
- * window.c (enlarge_window): When exceeding size of parent,
- directly delete all the siblings instead of trying to resize it.
-
-2002-01-17 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * term.c (set_tty_color_mode): Remove unused variable `tem'.
-
-2002-01-16 Henrik Enberg <henrik@enberg.org>
-
- * lread.c (init_lread): Move the installed-lisp dirs later in the path.
-
-2002-01-16 Kim F. Storm <storm@cua.dk>
-
- * xterm.c (x_erase_phys_cursor): Don't erase cursor if cursor row
- is invisible. This can happen if cursor is on top line of a
- window, and we switch to a buffer with a header line.
-
- * w32term.c (x_erase_phys_cursor): Ditto.
-
-2002-01-16 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xterm.c (XTread_socket) [!USE_X_TOOLKIT]: Compute the value of
- `dont_resize' only when used.
-
- * xdisp.c: Remove forgotten extern declaration of `Qimage'.
-
-2002-01-15 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xdisp.c (display_mode_element): When computing charpos, depend
- on multibyteness of elt, not the text in field.
-
-2002-01-15 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * buffer.c (Fkill_all_local_variables):
- Increment `update_mode_lines' only once.
-
-2002-01-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * lisp.h (adjust_after_replace_noundo)
- (Fupdate_coding_systems_internal): Add prototypes.
-
- * sound.c (Fplay_sound): Initialize header_size also for :data case.
-
-2002-01-14 Eli Zaretskii <eliz@is.elta.co.il>
-
- Support for the --color command-line argument and tty-color-mode
- frame parameter:
-
- * term.c (tty_default_color_capabilities, tty_setup_colors)
- (set_tty_color_mode): New functions.
- (term_init): Call tty_default_color_capabilities.
- (Qtty_color_mode_alist): New variable.
- (syms_of_term): Intern and staticpro it.
-
- * frame.c (store_frame_param): Call set_tty_color_mode for termcap
- frames.
- (do_switch_frame): For termcap frames, switch the tty
- color mode as specified by the frame's parameters.
- (Qtty_color_mode): New variable.
- (syms_of_frame): Intern and staticpro it.
-
- * emacs.c (USAGE2): Add the --color option.
- (standard_args): Ditto.
-
-2002-01-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-
- * xterm.h (struct x_output): New members want_fullscreen,
- x_pixels_diff, y_pixels_diff, x_pixels_outer_diff, and
- y_pixels_outer_diff.
- New enum for FULLSCREEN_* constants.
- (FRAME_OUTER_WINDOW): Handle the case where output_data.x->widget
- is NULL.
- (x_fullscreen_adjust): Add prototype.
-
- * emacs.c (USAGE2): Add the new full-screen arguments.
- (standard_args): Ditto.
-
- * xfns.c (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth):
- New variables.
- (syms_of_xfns): Intern and staticpro them.
- (x_frame_parms) <"fullscreen">: New parameter.
- (x_fullscreen_move, x_set_fullscreen): New functions.
- (x_set_frame_parameters): Support for Qfullscreen.
- (x_real_positions): More accurate computation of the frame position.
- (x_figure_window_size): Support full-screen frames.
- (Fx_create_frame): Default the fullscreen parameter.
-
- * xterm.c (x_check_fullscreen, x_fullscreen_adjust): New functions.
- (XTread_socket) <Expose>: Call x_check_fullscreen.
- <ConfigureNotify>: Don't resize to fullscreen.
- Call x_check_fullscreen_move, and set the want_fullscreen member of
- output_data.x.
-
-2002-01-13 Jason Rumney <jasonr@gnu.org>
-
- * w32term.h (WM_XBUTTONDOWN, WM_XBUTTONUP): New window messages
- for mice with more than 3 buttons.
-
- * w32term.c (parse_button): New parameter xbutton. Callers changed.
- (w32_read_socket): Handle new "XBUTTON" messages.
-
- * w32fns.c (w32_pass_extra_mouse_buttons_to_system): New user option.
- (syms_of_w32fns): DEFVAR_BOOL it.
- (w32_wnd_proc): Handle new "XBUTTON" messages.
-
-2002-01-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c (read_key_sequence): Remove unused variable `extra_maps'.
-
-2002-01-13 Andreas Schwab <schwab@suse.de>
-
- * xterm.c (x_load_font): Never set fonts_changed_p to zero.
-
-2002-01-12 Andreas Schwab <schwab@suse.de>
-
- * .gdbinit (xbuffer): Remove address operator since data is now a
- pointer.
-
-2002-01-11 Richard M. Stallman <rms@gnu.org>
-
- * insdel.c (adjust_after_replace_noundo): New function.
-
- * coding.c (code_convert_region): Don't copy old text if undo disabled.
-
-2002-01-09 Jason Rumney <jasonr@gnu.org>
-
- * xdisp.c (x_consider_frame_title): Don't count the tooltip frame
- when checking for multiple frames.
-
-2002-01-08 Richard M. Stallman <rms@gnu.org>
-
- * window.c (delete_window): Rewrite the code for changing the
- selected window to handle the case where WINDOW is not a leaf.
-
-2002-01-07 Eli Zaretskii <eliz@is.elta.co.il>
-
- * process.c (send_process): Set src_multibyte to 1 after the call
- top setup_coding_system, not before the call.
-
-2002-01-07 Jason Rumney <jasonr@gnu.org>
-
- * xmenu.c (set_frame_menubar, xmenu_show):
- (xdialog_show): Initialize wv->help to Qnil.
-
- * w32menu.c (single_submenu, set_frame_menubar, w32_menu_show):
- (w32_dialog_show): Initialize wv->help to Qnil.
-
-2002-01-06 Jason Rumney <jasonr@gnu.org>
-
- * xmenu.c (single_submenu): Initialize wv->help to Qnil.
-
- * w32menu.c (w32_menu_display_help): Revert last change.
-
- * xmenu.c (menu_highlight_callback): Revert last change.
-
-2002-01-06 Andreas Schwab <schwab@suse.de>
-
- * insdel.c (make_gap_larger): Make sure buffer size does not
- overflow range of int.
-
-2002-01-05 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_draw_glyphs): Don't call notice_overwritten_cursor if
- OVERLAPS_P.
-
- * w32menu.c (w32_menu_display_help): Hide any tooltip window.
-
- * w32fns.c (compute_tip_xy): If tooltip won't fit on the screen
- to the left or to the right of the pointer, put it against
- the left screen edge.
- (x_frame_parms): Add missing braces around initializer.
-
- * w32term.c (x_setup_relief_colors): Don't compute an image's
- background color if it doesn't have a Pixmap.
- (notice_overwritten_cursor): Don't depend on
- output_cursor and updated_area. Compare pixel coordinates with
- window's cursor pixel coordinates.
- (x_draw_glyphs, x_clear_end_of_line, show_mouse_face):
- Call notice_overwritten_cursor with new arg list.
- (show_mouse_face): Fix bug setting a row's mouse_face_p flag
- unconditionally.
- (x_draw_image_relief): Use predefined macro instead of
- constant when the value of `tool_bar_button_relief' is negative.
-
- * w32term.c (x_display_and_set_cursor): Fix PostMessage arg types.
-
-2002-01-04 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (menu_highlight_callback): Hide any tooltip window.
-
-2002-01-03 Richard M. Stallman <rms@gnu.org>
-
- * keymap.c (Fcurrent_active_maps): Put the `keymap' property map first.
- (Fkey_binding): Try the `keymap' property map first.
- (Fdescribe_buffer_bindings): Show `keymap' property bindings before
- minor mode bindings.
-
-2002-01-03 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (read_key_sequence): Fix cast of submaps arg to bcopy.
-
-2002-01-02 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (read_key_sequence): Handle the keymap property
- before minor mode maps.
-
- * editfns.c (Fformat): Update thissize from field_width
- based on the actual width, in the string case.
-
-2002-01-01 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * charset.h (UNIBYTE_STR_AS_MULTIBYTE_P): Parenthesize assignment
- when used as truth value to prevent gcc warnings.
-
- * sysdep.c, unexapollo.c, w32.c, w32bdf.c, w32heap.c, w32inevt.c,
- * w32proc.c: Include <config.h>.
-
-2002-01-01 Andreas Schwab <schwab@suse.de>
-
- * eval.c (max_specpdl_size, max_lisp_eval_depth): Define as int,
- not EMACS_INT, to make them compatible with DEFVAR_INT.
- * lisp.h (max_specpdl_size): Adjust declaration.
-
-2002-01-01 Richard M. Stallman <rms@gnu.org>
-
- * print.c (print_object): Test print_escape_nonascii only for
- unibyte strings.
- (PRINTPREPARE): Once again bind Qprint_escape_nonascii
- when outputting to a multibyte buffer.
-
-2001-12-29 Richard M. Stallman <rms@gnu.org>
-
- * print.c (print_object): In multibyte string, use hex escapes.
- Use octal only for unibyte strings.
- (PRINTPREPARE): Don't ever set Qprint_escape_nonascii.
-
- * lread.c (read_escape): New arg BYTEREP for reporting whether
- escape forces unibyte or multibyte.
- (read1): When reading a string, take note of that info.
-
-2001-12-29 Ken Raeburn <raeburn@gnu.org>
-
- * abbrev.c (Fexpand_abbrev): Use NILP instead of implicit zero
- comparison to test lisp value returned by Fget.
-
-2001-12-29 Richard M. Stallman <rms@gnu.org>
-
- * lisp.h (max_specpdl_size): Add declaration.
-
- * fileio.c (Fdo_auto_save): If NO_MESSAGE, don't call push_message.
-
- * keymap.c (silly_event_symbol_error): New subrtn, from Fdefine_key.
- Handle modifier bits. Correct typo in error message.
-
-2001-12-28 Richard M. Stallman <rms@gnu.org>
-
- * abbrev.c: Use the plist of an abbrev for multiple params if nec.
- (Fdefine_abbrev): New arg SYSTEM-FLAG for a system abbrev.
- (Fdefine_global_abbrev, Fdefine_mode_abbrev):
- Update calls to Fdefine_abbrev.
- (write_abbrev): Update for changed data format.
- Don't list "system" abbrevs.
- (Fexpand_abbrev): Update use count with new data format.
- (describe_abbrev): Update for changed data format.
- (Fdefine_abbrev_table): Handle the new SYSTEM-FLAG.
-
- * config.in (HAVE_MBSINIT): Add #undef.
-
- * strftime.c (mbsinit): Define as no-op if not available.
-
- * s/sco5.h (LIBX11_SYSTEM) [MOTIF]: Add -lgen.
- (sigprocmask_set): Conditionalize decl on ! NOT_C_CODE.
-
- * keymap.c (Flookup_key): Error message if key has wrong data type.
- (Fdefine_key): Add error message for trying to bind [DEL], [RET], etc.
- (exclude_key): New variable.
-
-2001-12-28 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_setup_relief_colors): Don't compute an image's
- background color if it doesn't have a Pixmap.
-
- * xterm.c (notice_overwritten_cursor): Don't depend on
- output_cursor and updated_area. Compare pixel coordinates with
- window's cursor pixel coordinates.
- (x_draw_glyphs, x_clear_end_of_line, show_mouse_face):
- Call notice_overwritten_cursor with new arg list.
- (show_mouse_face): Fix bug setting a row's mouse_face_p flag
- unconditionally.
-
- * xdisp.c (try_scrolling) <PT below scroll margin>: Add the
- height of the cursor line to the amount to scroll.
-
-2001-12-27 Richard M. Stallman <rms@gnu.org>
-
- * intervals.c (set_point_both): The position after an invisible,
- intangible character is not an acceptable stopping point.
-
-2001-12-27 Ken Raeburn <raeburn@gnu.org>
-
- * window.c (enlarge_window): In new preserve_before code, convert
- CURBEG from lisp object to integer before doing arithmetic.
-
-2001-12-27 Richard M. Stallman <rms@gnu.org>
-
- * bytecode.c (Fbyte_code): Undo previous change.
-
-2001-12-26 Kim F. Storm <storm@cua.dk>
-
- * keyboard.c (record_char): Ignore duplicate help-echo events only
- separated by mouse-movement. When tracking mouse, only record
- first and last mouse-movement event in same window.
- Don't record mouse-movement events in keyboard macros.
-
-2001-12-25 Richard M. Stallman <rms@gnu.org>
-
- * window.c (enlarge_window): New arg PRESERVE_BEFORE. Callers changed.
- (Fenlarge_window): New arg PRESERVE_BEFORE.
-
- * bytecode.c (Fbyte_code): Use Fstring_make_unibyte
- instead of Fstring_as_unibyte.
-
-2001-12-22 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- The following changes remove mocklisp support:
-
- * mocklisp.h, mocklisp.c: Files removed.
-
- * lisp.h: Remove declarations of variables `Vmocklisp_arguments',
- `Qmocklisp' and `Qmocklisp_arguments'.
- Remove prototype of syms_of_mocklisp.
-
- * makefile.nt, makefile.w32-in, Makefile.in: Remove mocklisp files.
-
- * callint.c: Do not include mocklisp.h.
- (Fcall_interactively): Do not test for mocklisp case.
-
- * eval.c: Remove variables `Qmocklisp_arguments',
- `Vmocklisp_arguments' and `Qmocklisp'. Remove prototype of ml_apply.
- (Fprogn, Fwhile, Fcommandp, Feval, Ffuncall, funcall_lambda):
- Do not test for mocklisp case.
- (Fwhile): Remove unused variable `tem'.
- (syms_of_eval): Remove variable `moclisp-arguments'.
-
- * data.c (wrong_type_argument): Remove mocklisp case.
-
- * doc.c (Fdocumentation): Remove mocklisp case.
-
- * emacs.c (main): Do not call syms_of_mocklisp.
-
-2001-12-21 Richard M. Stallman <rms@gnu.org>
-
- * xfns.c (compute_tip_xy): If tooltip won't fit on the screen
- to the left or to the right of the pointer, put it against
- the left screen edge.
-
-2001-12-21 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (distclean): Remove .gdbinit if we are building
- outside the source tree.
-
-2001-12-19 Eli Zaretskii <eliz@is.elta.co.il>
-
- * w32.c (emacs_root_dir): New function.
-
- * msdos.c (emacs_root_dir): New function.
-
- * fileio.c (Fexpand_file_name) [DOS_NT]: Use the root directory
- of the current drive as the fallback for default_directory.
-
- * dired.c (file_name_completion): Run the elements of
- completion-ignored-extensions through ENCODE_FILE.
-
- * lisp.h (scmp): Remove prototype, since it's now a static
- function private to dired.c.
-
-2001-12-18 Richard M. Stallman <rms@gnu.org>
-
- * dired.c (scmp): Function moved from minibuf.c.
- Delete multibyte handling--used only on encoded strings.
-
- * minibuf.c (scmp): Function moved to dired.c.
-
- * fns.c (merge): Add QUIT call.
-
-2001-12-18 Dave Love <fx@gnu.org>
-
- * Makefile.in (lisp, shortlisp): Add language/utf-8-lang.el,
- language/georgian.el.
-
-2001-12-18 Eli Zaretskii <eliz@is.elta.co.il>
-
- * Makefile.in (lisp, shortlisp): Synchronize with changes to
- lisp/Makefile.in:DONTCOMPILE.
-
-2001-12-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xdisp.c (window_box_height): Do not return negative values.
- From Gerd Moellmann <gerd@gnu.org>.
-
- * keyboard.c (head_table): Add missing braces around initializer.
-
- * term.c (keys): Likewise.
-
- * xfns.c (x_frame_parms, visual_classes): Likewise.
-
-2001-12-17 Sam Steingold <sds@gnu.org>
-
- * coding.c (DECODE_COMPOSITION_END): Fixed a typo in the last
- patch (COMPOSING_P, not COMPOSING).
-
-2001-12-17 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fcompare_buffer_substrings): Add QUIT to main loop.
-
- * coding.c (code_convert_region): Update coding->cmp_data->char_offset
- before calling decode_coding.
-
- * charset.c (Fdefine_charset): Call Fupdate_coding_systems_internal.
-
- * coding.c (DECODE_COMPOSITION_END): Check for ! COMPOSING_P (coding)
- instead of only for COMPOSITION_DISABLED.
-
-2001-12-16 Richard M. Stallman <rms@gnu.org>
-
- * alloc.c (pure_alloc): After overflow, allocate just a small block.
-
- * Makefile.in (xmenu.o, xterm.o, fontset.o): Depend on buffer.h.
-
- * buffer.h (struct buffer): New field `display_error_modiff'.
- * buffer.c (reset_buffer): Initialize `display_error_modiff'.
-
- * window.c (Frecenter): Clear display_error_modiff field.
-
- * xdisp.c (redisplay_window_0, redisplay_window_1): New functions.
- Call redisplay_window, but not if display_error_modiff field says no.
- (redisplay_window_error): New function.
- (displayed_buffer): New variable.
- (redisplay_internal, redisplay_windows): Call the new functions
- instead of redisplay_window directly.
-
-2001-12-15 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (syms_of_keyboard) <double-click-fuzz>: Doc fix.
-
-2001-12-14 Andrew Innes <andrewi@gnu.org>
-
- * makefile.w32-in (EMACSLOADPATH): Define.
- ($(EMACS)): Run `list-load-path-shadows' after dumping Emacs.
- (bootstrap-temacs): Remove dependency on bootstrap-clean.
-
-2001-12-13 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xfns.c (x_report_frame_params): Make the scroll-bar-width frame
- parameter have a numeric value all the time.
-
- * w32fns.c (x_report_frame_params): Likewise.
-
-2001-12-12 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fwrite_region): Doc fix.
-
- * xdisp.c (CLEAR_FACE_CACHE_COUNT): Redefine as 500.
- (redisplay_internal): Call clear_image_cache only for window terminals.
-
-2001-12-12 Gerd Moellmann <gerd@gnu.org>
-
- * xdisp.c (move_it_vertically_backward): Change heuristic
- for the case that we didn't move far enough initially.
-
- * window.c (Frecenter): Simplify computation in the case of window
- system frames and ARG < 0; use window_box_height.
-
-2001-12-11 Richard M. Stallman <rms@gnu.org>
-
- * Makefile.in, mem-limits.h, dispnew.c, emacs.c, fileio.c:
- * process.c, sysdep.c, unexec.c: Test GNU_LINUX, not LINUX.
-
-2001-12-11 Andrew Innes <andrewi@gnu.org>
-
- * insdel.c (make_gap) [DOUG_LEA_MALLOC]: Call make_gap_smaller if
- arg is negative.
-
-2001-12-11 Richard M. Stallman <rms@gnu.org>
-
- * m/hp800.h: Split the __hpux conditional into the parts
- that are right for GNU/Linux too and the parts that are not.
- Use the former if GNU_LINUX.
- (HAVE_ALLOCA, LOAD_AVE_TYPE, LOAD_AVE_CVT): New defs for GNU/Linux.
-
- * s/gnu-linux.h (GNU_LINUX): Defined.
-
-2001-12-11 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * macros.c, msdos.c, w16select.c: Change doc-string comments to
- `new style' [w/`doc:' keyword].
-
-2001-12-10 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (w32_free_submenu_strings): Clear menu item struct
- before using.
-
-2001-12-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * dosfns.c: Change doc-string comments to `new style' [w/`doc:'
- keyword].
-
-2001-12-09 Eli Zaretskii <eliz@is.elta.co.il>
-
- * dosfns.c (dos-display-scancodes, dos-decimal): Doc fix.
-
- * s/hpux10.h (srand48): Don't undefine.
-
-2001-12-09 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (_widget_value): Make `help' field a Lisp_Object.
- Add comment to explain where the struct came from.
- (single_submenu, w32_menu_show): Set `help' field as Lisp_Object.
- (add_menu_item): Process pop-up menus first to avoid memory leak.
- (add_menu_item, w32_menu_display_help): Use `help' field as
- Lisp_Object.
- (w32_free_submenu_strings): Only free owner-drawn strings.
-
-2001-12-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * COPYING: Moved back.
-
- * charset.c (char_to_string_1, translate_char, Fdefine_charset):
- Add parentheses around && within ||.
-
- * indent.c (compute_motion): Likewise.
-
- * intervals.c (merge_properties_sticky): Likewise.
-
- * coding.c (setup_coding_system, shrink_encoding_region)
- (Fdecode_sjis_char): Likewise.
-
-2001-12-07 Andreas Schwab <schwab@suse.de>
-
- * xdisp.c (display_mode_element): Don't read past end of string if
- it ends with '%'.
-
- * alloc.c (inhibit_garbage_collection): Don't exceed value an int
- can hold.
-
- * data.c (Vmost_positive_fixnum, Vmost_negative_fixnum):
- Rename from most_positive_fixnum and most_negative_fixnum, resp., and
- type changed to Lisp_Object.
- (syms_of_data): DEFVAR_LISP them.
-
-2001-12-07 Richard M. Stallman <rms@gnu.org>
-
- * callproc.c (init_callproc): Set Vdata_directory based on the source
- location whenever Emacs was run uninstalled.
-
-2001-12-06 Paul Eggert <eggert@twinsun.com>
-
- * config.in (HAVE_WORKING_VFORK): New #undefs.
- * process.c (create_process):
- Use HAVE_WORKING_VFORK, not HAVE_VFORK.
- * m/cnvrgnt.h (HAVE_VFORK): Remove #define.
- * m/ibm370aix.h (HAVE_VFORK): Remove #undef.
- * m/ibmps2-aix.h (HAVE_VFORK): Remove #define.
- * m/intel386.h (HAVE_VFORK): Likewise.
- * m/mips-siemens.h (HAVE_VFORK): Likewise.
- * m/mips.h (HAVE_VFORK): Likewise.
- * s/freebsd.h (vfork): Remove #define.
- * s/lynxos.h (HAVE_VFORK): Remove #undef.
- * s/usg5-4-2.h: Fix comment about vfork.
-
-2001-12-06 Richard M. Stallman <rms@gnu.org>
-
- * s/hpux10.h (random): Add undef.
- (HAVE_RANDOM): Define it just once.
-
-2001-12-06 Stefan Monnier <monnier@cs.yale.edu>
-
- * eval.c: Undo last change: the standard syntax is not wanted.
-
-2001-12-06 Eli Zaretskii <eliz@is.elta.co.il>
-
- * xterm.c (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
- scroll bars of the frame before deleting the frame itself. If the
- frame has a widget, delete the frame with XtDestroyWidget, and do
- not call XDestroyWindow before that.
-
-2001-12-06 Kim F. Storm <storm@cua.dk>
-
- * xfns.c (x_report_frame_params): Return actual fringe widths.
-
- * w32fns.c (x_report_frame_params): Return actual fringe widths.
-
-2001-12-05 Andrew Innes <andrewi@gnu.org>
-
- * alloc.c (Fgarbage_collect): Shrink buffer gaps that are
- excessively large.
-
- * insdel.c (make_gap_larger): New function.
- (make_gap_smaller): New function.
- (make_gap) [USE_MMAP_FOR_BUFFERS || REL_ALLOC]:
- Call make_gap_smaller if arg is negative.
-
-2001-12-04 Stefan Monnier <monnier@cs.yale.edu>
-
- * keyboard.c (kbd_buffer_store_event): Fix interrupt_signal prototype.
- Pass a dummy argument when calling interrupt_signal.
- (parse_menu_item): Mark disabled items before checking for empty def.
- (read_char_minibuf_menu_prompt): Make safety more visible.
- (read_key_sequence): Add a `first_unbound' variable.
- Use it to detect C-c ESC ESC ESC ESC ... cases and drop the
- unbound prefix as soon as we can detect it.
-
- * doc.c (Fsnarf_documentation): Add prototype.
- (get_doc_string): Handle negative arguments.
- (Fdocumentation): Use AREF and ASIZE.
- Move the calls to get_doc_string to a single place.
- Don't confuse an interactive-spec for a docstring reference.
- (Fdocumentation_property): Take advantage of the fact that
- get_doc_string now ignores the sign of the docstring position.
-
- * eval.c: Use standard syntax for usage in docstrings.
-
-2001-12-03 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xdisp.c (syms_of_xdisp): Make `tool-bar-button-relief' an option.
-
-2001-12-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xterm.c (x_draw_image_relief): Use predefined macro instead of
- constant when the value of `tool_bar_button_relief' is negative.
-
-2001-12-02 Richard M. Stallman <rms@gnu.org>
-
- * xmenu.c (menu_highlight_callback): Use `help' field as Lisp_Object.
- (single_submenu, xmenu_show): Set `help' field as Lisp_Object.
-
- * fileio.c (read_non_regular): Delete Fsignal call.
-
-2001-12-01 Stefan Monnier <monnier@cs.yale.edu>
-
- * lisp.h (run_hook_list_with_args): Undo last change.
-
-2001-12-01 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_draw_fringe_bitmap): Always undo clipping.
-
-2001-12-01 Jason Rumney <jasonr@gnu.org>
-
- * window.c (Qleft_fringe, Qright_fringe): Remove. Now in frame.c.
-
- * w32term.h (WM_MOUSELEAVE, TME_LEAVE, TRACKMOUSEEVENT)
- [!WM_MOUSELEAVE]: Define.
-
- * w32menu.c (current_popup_menu, get_menu_item_info):
- (set_menu_item_info): New vars.
- (set_frame_menubar): Doc fix clarifying GC interaction with menus.
- (w32_menu_show): Set current_popup_menu.
- (add_menu_item): Allocate new strings for owner-drawn menu items
- and help strings.
- Use owner-draw for disabled menu items again.
- (w32_menu_display_help): Ignore owner-drawn items and popup menus.
- (w32_free_submenu_strings, w32_free_menu_strings): New functions.
-
- * w32fns.c (trackmouse_window, track_mouse_event_fn): New vars.
- (w32_wnd_proc) <WM_MOUSEMOVE>: Notice when mouse enters frame.
- <WM_EXITMENULOOP>: Free menu strings.
- <WM_MOUSELEAVE>: Stop tracking mouse.
- (x_create_tip_frame): Specify no minibuffer, modeline or fringes.
-
- * w32term.c (w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
- and mouse face.
-
-2001-12-01 Kim F. Storm <storm@cua.dk>
-
- The following changes add left-fringe and right-fringe
- frame parameters to adjust fringe widths, or remove one or
- both fringes.
-
- * frame.h (struct frame): Remove trunc_area_pixel_width and
- trunc_area_cols fields.
- (Qleft_fringe, Qright_fringe): Declare.
- (FRAME_RIGHT_FRINGE_WIDTH): New macro.
-
- * frame.c (Qleft_fringe, Qright_fringe): New vars.
- (syms_of_frame): Initialize them.
-
- * window.c (coordinates_in_window): Handle separate left and right
- fringe widths.
-
- * xterm.h (struct x_output): Add left_fringe_width, right_fringe_width,
- and fringe_cols fields.
- (FRAME_FRINGE_BITMAP_WIDTH, FRAME_FRINGE_BITMAP_HEIGHT): Remove macros.
- (FRAME_X_FRINGE_COLS): Use fringe_cols field.
- (FRAME_X_FRINGE_WIDTH): Use fringes_extra field.
- (FRAME_X_LEFT_FRINGE_WIDTH): Use left_fringe_width field.
- (FRAME_X_RIGHT_FRINGE_WIDTH): Use right_fringe_width field.
- (x_compute_fringe_widths): Add prototype.
-
- * xterm.c (zv_height, zv_bits, zv_period): Changed zv bitmap to
- fill fringe evenly with small dashes.
- (x_draw_fringe_bitmap): Clear background if necessary. Align and
- clip the new ZV bitmap to avoid jitter between rows.
- (x_draw_row_fringe_bitmaps): Rely on x_draw_fringe_bitmap to clear
- background. Don't draw fringe bitmaps if fringe width is zero.
- (x_compute_fringe_widths): New function.
- (x_new_font, x_set_window_size_1): Use it.
-
- * xfns.c (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
- (x_set_frame_parameters): Process `font' parameter before other
- parameters as fringe widths depend on it.
- (x_set_fringe_width): New function.
- (x_figure_window_size): Use x_compute_fringe_widths.
- (Fx_create_frame): Process `left-fringe' and `right-fringe' frame
- parameters.
-
- * widget.c (set_frame_size): Use x_compute_fringe_widths.
- (EmacsFrameSetCharSize): Ditto.
-
- * w32term.h: Merged changes from xterm.h.
- * w32term.c: Merged changes from xterm.c.
- * w32fns.c: Merged changes from xfns.c.
-
-2001-11-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * COPYING: Removed.
-
-2001-11-29 Dave Love <fx@gnu.org>
-
- * coding.c (syms_of_coding) <Qchar_coding_system>: Give it an
- extra extra slot.
- (detect_coding_mask): Fix call of detect_coding_iso2022.
-
-2001-11-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * fileio.c (file-name-coding-system)
- (default-file-name-coding-system): Doc fix (links to referenced
- variables added).
-
-2001-11-28 Stefan Monnier <monnier@cs.yale.edu>
-
- * lisp.h (GCPRO1, GCPRO2, GCPRO3, GCPRO4, GCPRO5):
- Add dummy uses of gcproN variables.
-
- * category.c (describe_category, describe_category_1)
- (Fdescribe_categories): Remove. (Moved to lisp/help-fns.el.)
- (syms_of_category): Don't defsubr Sdescribe_categories.
-
-2001-11-28 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Ffind_file_name_handler): Avoid initializer for `result'.
-
- * Makefile.in (lispdir): New variable, referring to build dir.
- (TAGS-LISP): Find Makefile in $(lispdir), not $(lispsource).
-
-2001-11-28 Andrew Innes <andrewi@gnu.org>
-
- * w32menu.c (w32_menu_display_help): Actually add the new argument
- OWNER.
-
-2001-11-28 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (add_menu_item): Do not use owner-draw for disabled
- menu items. From David Ponce <dponce@wanadoo.fr>.
- (w32_dialog_show) [HAVE_DIALOGS]: Compile whole function
- conditionally.
- (w32_menu_display_help): New argument OWNER. Rewritten to store a
- help event in the owner frame's keyboard buffer.
-
- * w32fns.c (w32_wnd_proc) <WM_MENUSELECT>: Display help directly.
- (Fx_show_tip): Don't subtract last width from row width.
-
- * w32term.c (w32_read_socket) <WM_MENUSELECT>: Remove.
- (w32_read_socket): Use EQ to compare frames.
-
-2001-11-28 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_draw_glyphs): Don't call notice_overwritten_cursor if
- OVERLAPS_P.
-
-2001-11-28 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xdisp.c (message_dolog): Remove unused variables `gcpro2',
- `gcpro3' and `gcpro4'.
-
- * coding.c (decode_coding_string): Remove unused variable `gcpro1'.
-
-2001-11-28 Stefan Monnier <monnier@cs.yale.edu>
-
- * ccl.c: Use AREF and ASIZE.
-
-2001-11-27 Stefan Monnier <monnier@cs.yale.edu>
-
- * lisp.h (run_hook_list_with_args): Remove.
- (LIST_END_P): Fix call to wrong_type_argument.
- (make_fixnum_or_float): Use EMACS_INT rather than int.
-
-2001-11-26 Stefan Monnier <monnier@cs.yale.edu>
-
- * syntax.c (syms_of_syntax): Remove defsubr of Sdescribe_syntax.
- (describe_syntax, describe_syntax_1, Fdescribe_syntax): Remove.
-
- * eval.c: Use AREF and ASIZE.
- (Ffetch_bytecode): Add the file name to the error message.
-
- * fileio.c (Ffind_file_name_handler): Give precedence to handlers
- which match the end of the file-name.
- (Fsubstitute_in_file_name): Don't signal an error if $ENVVAR
- is not a valid env var, but leave it as is instead.
-
- * keymap.c (access_keymap): Handle t bindings like nil bindings.
- Make nil bindings in char-tables transparent.
- (store_in_keymap): Turn a nil binding into a t binding for char-tables.
-
-2001-11-26 Richard M. Stallman <rms@gnu.org>
-
- * textprop.c (set_text_properties_1): Allow START, END in either order.
- Do nothing if range is empty.
-
- * Makefile.in (mallocobj): Simplify logic using auxiliary vars.
-
- * Makefile.in (mostlyclean): Delete bootstrap-emacs here.
- (clean): Not here.
-
-2001-11-25 Stefan Monnier <monnier@cs.yale.edu>
-
- * textprop.c (set_text_properties_1): Clearly mark that the
- interval should not be empty.
-
- * intervals.c (graft_intervals_into_buffer):
- Don't call set_text_properties_1 on an empty interval.
-
-2001-11-25 Richard M. Stallman <rms@gnu.org>
-
- * unexelf.c (unexec): Index by n, not nn, when checking for ".sbss".
-
- * callproc.c (Fcall_process): When we make a bigger buffer for bufptr,
- don't lose the data in it.
-
-2001-11-25 Juanma Barranquero <lektu@terra.es>
-
- * abbrev.c (Fexpand_abbrev): Use Frun_hooks instead of Vrun_hooks.
-
- * buffer.c (Fkill_buffer): Likewise.
-
- * print.c (temp_output_buffer_setup): Likewise.
-
-2001-11-25 Stefan Monnier <monnier@cs.yale.edu>
-
- * xfaces.c (merge_face_heights): Coerce back to int explicitly.
-
-2001-11-25 Eli Zaretskii <eliz@is.elta.co.il>
-
- * window.c (Fset_window_vscroll): Doc fix. From Kalle Olavi
- Niemitalo <kon@iki.fi>.
-
-2001-11-25 Jason Rumney <jasonr@gnu.org>
-
- * w32term.h (FRAME_X_FRINGE_COLS): No fringe on tip frames.
-
- * w32fns.c (x_create_tip_frame): Set frame's fringes_extra to 0.
- (Fx_show_tip): Block input during frame creation.
- (Fx_show_tip, Fx_hide_tip): Enable.
-
-2001-11-24 Richard M. Stallman <rms@gnu.org>
-
- * lread.c (Fload): Detect recursive load error for more than 3
- nestings of the same file.
- (Vrecursive_load_depth_limit): Variable deleted.
- (syms_of_lread) <recursive-load-depth-limit>: Variable deleted.
-
-2001-11-24 Jason Rumney <jasonr@gnu.org>
-
- * xfns.c (compute_tip_xy): Initialize root_x and root_y from
- mouse position if either left or top is not specified.
-
- * w32fns.c (w32_wnd_proc) <WM_MENUSELECT>: Revert last change.
- <WM_WINDOWPOSCHANGING>: Let tip frames resize without restriction.
- (my_create_tip_window, Fx_show_tip): Adjust size for external border.
- (my_create_tip_window): Assign tip_window.
- (x_create_tip_frame): Use same defaults as X.
- (compute_tip_xy): Remove unused variable. Use full screen width.
- (Fx_show_tip): Do not double height. Call ShowWindow directly.
-
- * w32term.c (x_after_update_window_line): Doc fix.
- (w32_read_socket): Doc fix. Avoid SET_FRAME_GARBAGED for tip
- frames.
- <WM_SHOWWINDOW>: Redo mouse highlight when hiding tip frame.
-
- * xdisp.c (prepare_menu_bars) [HAVE_WINDOW_SYSTEM]: Use tip_frame
- for all Windowed systems.
-
-2001-11-23 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.c (IT_clear_screen): If the frame's faces are not yet
- realized, use the initial screen colors to clear the screen.
-
-2001-11-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * textprop.c (Fset_text_properties): Remove unused variables
- `unchanged', `prev_changed', `s' and `len'.
-
- * search.c (Freplace_match): Remove unused variable `inslen'.
-
- * keymap.c (access_keymap): Remove unused variables `c1' and `c2'.
-
-2001-11-22 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (x_window_to_frame): Remove irrelevant TODO comment.
- (w32_wnd_proc) <WM_MENUSELECT>: Show help echo directly.
- (my_create_tip_window): New function.
- (x_create_tip_frame, compute_tip_xy): Adapt for Windows.
- (Fx_show_tip, Fx_hide_tip) [TEST_TOOLTIPS]: Adapt for Windows.
-
-2001-11-20 Jason Rumney <jasonr@gnu.org>
-
- * coding.h (Vw32_system_coding_system) [WINDOWSNT]: Remove.
- (ENCODE_SYSTEM, DECODE_SYSTEM) [WINDOWSNT]: Use Vlocale_coding_system.
-
- * w32fns.c (Vw32_system_coding_system): Remove.
- (w32_to_x_font, x_to_w32_font): Use Vlocale_coding_system.
-
-2001-11-19 Stefan Monnier <monnier@cs.yale.edu>
-
- * fileio.c (Fwrite_region): Move choose_write_coding_system to
- after build_annotations.
-
- * syntax.c (describe_syntax): Add dummy arg.
- (describe_syntax_1): Update call to describe_vector.
-
- * category.c (describe_category): Add dummy arg.
- (describe_category_1): Update call to describe_vector.
-
- * keymap.c (Fdescribe_vector): Add `describer' parameter.
- (describe_command, describe_translation): Add dummy second param.
- (describe_map): Call elt_describer with two arguments.
- (describe_vector_princ): Add `fun' parameter.
- Call it instead of the hardcoded `princ'.
- (describe_vector): Add arg `args'.
- Pass it as a new second argument to elt_describer.
-
- * keymap.h (describe_vector): Update prototype.
-
- * frame.c: Don't include keymap.h any more.
- (keys_of_frame): Remove.
-
- * lisp.h (keys_of_frame): Remove declaration.
-
- * emacs.c (main): Don't call `keys_of_frame' any more.
-
-2001-11-14 Andreas Schwab <schwab@suse.de>
-
- * unexelf.c [!defined MAP_ANON]: Define MAP_ANON to MAP_ANONYMOUS
- if defined, 0 otherwise.
- (MAP_FAILED): Define if not defined and use it to test mmap failure.
- (unexec) [!MAP_ANON]: Use /dev/zero as file to map.
-
-2001-11-19 Richard M. Stallman <rms@gnu.org>
-
- * indent.c (current_column_1): Fix handling of scan_bytes for mb chars.
-
-2001-11-18 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (note_mouse_highlight): Fix type of variable `ignore'.
- (x_draw_bar_cursor): If the background color of the glyph under
- the cursor equals the frame's cursor color, use the glyph's
- foreground color for drawing the bar cursor.
- (x_after_update_window_line): Clear internal border in different
- circumstances.
- (w32_set_vertical_scroll_bar): Check for width and height > 0.
- (w32_draw_relief_rect): Correct relief by 1 pixel.
- (x_set_glyph_string_background_width):
- Set extends_to_end_of_line_p if the row's fill_line_p is set and
- drawing the last glyph with DRAW_IMAGE_{RAISED,SUNKEN}.
- (x_display_and_set_cursor): If cursor_in_echo_area, use NO_CURSOR
- if cursor_in_non_selected_windows is false.
- (show_mouse_face): Clean up. Recognize overwritten cursor differently.
- (x_draw_glyphs): Remove parameters REAL_START and REAL_END.
- Notice if cursor gets overwritten.
- (notice_overwritten_cursor): Renamed from
- note_overwritten_text_cursor. Rewritten to take glyph widths
- into account, and to take X positions as parameters.
- (x_draw_phys_cursor_glyph): Save state of w->phys_cursor_on_p
- around call to x_draw_glyphs.
- (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
- `IMAGE_BACKGROUND_TRANSPARENT' to calculate the correct background
- color to use for image glyph reliefs.
- (x_draw_image_relief): Accept zero tool_bar_button_relief.
- (glyph_rect): Remove unused variable `area'.
-
- * w32fns.c (x_set_frame_parameters): Avoid infinite recursion for
- some items.
- (x_set_internal_border_width): Set frame garbaged when window
- doesn't exist yet.
- (Fx_create_frame): Accept zero tool_bar_button_relief.
- (x_clear_image_1, four_corners_best, image_background)
- (image_background_transparent): New functions.
- (xpm_format, png_format, jpeg_format, tiff_format, gif_format)
- (gs_format): Add `:background' entry.
- (lookup_image): Set IMG's background color if specified.
- (pbm_load, xbm_load_image, png_load): Set IMG's background field
- when appropriate.
- (x_clear_image_1): Reset `background_valid' and
- `background_transparent_valid' fields.
- (x_build_heuristic_mask): Use IMAGE_BACKGROUND instead of
- calculating it here. Set IMG's background_transparent field.
- (enum xpm_keyword_index): Add XPM_BACKGROUND.
- (enum png_keyword_index): Add PNG_BACKGROUND.
- (enum jpeg_keyword_index): Add JPEG_BACKGROUND.
- (enum tiff_keyword_index): Add TIFF_BACKGROUND.
- (enum gif_keyword_index): Add GIF_BACKGROUND.
- (enum gs_keyword_index): Add GS_BACKGROUND.
- (pbm_load, png_load, jpeg_load, tiff_load, gif_load):
- Pre-calculate image background color where necessary.
- (x_create_x_image_and_pixmap, xbm_load, gs_load):
- Use display info's n_cbits entry for screen depth.
- (Fx_show_tip): Remove unused variables `buffer', `top',
- `left', `max_width' and `max_height'.
-
- * w32menu.c (w32_menu_show, push_menu_pane): Doc fixes.
-
-2001-11-18 Gerd Moellmann <gerd@gnu.org>
-
- * puresize.h (BASE_PURESIZE): Increase to 750000.
-
-2001-11-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * frame.c (Fframe_live_p): Doc fix.
-
-2001-11-18 Richard M. Stallman <rms@gnu.org>
-
- * xdisp.c (message_dolog_marker1, message_dolog_marker2)
- (message_dolog_marker3): New static variables hold three markers.
- (syms_of_xdisp): Initialize and staticpro them.
- (message_dolog): Use message_dolog_marker1..3 instead of
- allocating markers each time. Unchain them when done.
-
-2001-11-17 Richard M. Stallman <rms@gnu.org>
-
- * doc.c (Fsnarf_documentation): Doc fix.
-
-2001-11-17 Andreas Schwab <schwab@suse.de>
-
- * xterm.c (note_mouse_highlight): Fix type of variable `ignore'.
-
-2001-11-17 Richard M. Stallman <rms@gnu.org>
-
- * fileio.c (Fwrite_region): Avoid initializer for Lisp_Object.
-
-2001-11-17 Jason Rumney <jasonr@gnu.org>
-
- * xterm.c (notice_overwritten_cursor): Take care of end < 0 case.
-
-2001-11-17 Gerd Moellmann <gerd@gnu.org>
-
- * xdisp.c (tool_bar_item_info): Avoid calling Fget_text_property
- with invalid position.
-
-2001-11-16 Richard M. Stallman <rms@gnu.org>
-
- * syswait.h: Delete conditionals for HPUX7, ISC 4.1, and convex.
-
- * s/isc4-1.h (HAVE_SYS_WAIT_H): Add #undef.
- * s/hpux.h (HAVE_SYS_WAIT_H): Add #undef.
- * s/hpux8.h (HAVE_SYS_WAIT_H): Define it.
-
- * m/convex.h (HAVE_SYS_WAIT_H): Add #undef.
-
-2001-11-16 Stefan Monnier <monnier@cs.yale.edu>
-
- * fileio.c (build_annotations): Split off the tail.
- (build_annotations_2): New fun. Extracted from build_annotations.
- (Fwrite_region): Split the call to build_annotations into two
- calls to build_annotations and build_annotations_2.
-
-2001-11-16 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * sysdep.c (wait_for_kbd_input) [VMS]: Do not call
- clear_waiting_for_input with argument.
-
- * xterm.h (x_update_cursor): Remove duplicated prototype.
-
- * keyboard.h (clear_waiting_for_input): Remove duplicated prototype.
-
- * xterm.c (waiting_for_input): Remove unnecessary declaration.
-
- * data.c (Ftimes, Fquo, Frem, Fmod): Doc fix.
-
-2001-11-16 Stefan Monnier <monnier@cs.yale.edu>
-
- * fileio.c (choose_write_coding_system): New fun, extracted
- from Fwrite_region.
- (Fwrite_region): Use it.
-
- * eval.c (max_specpdl_size, max_lisp_eval_depth): Use EMACS_INT.
- (funcall_lambda, run_hook_with_args): Make static and add prototype.
- (ml_apply, find_handler_clause): Add prototype.
-
-2001-11-16 Eli Zaretskii <eliz@gnu.org>
-
- * config.in: Add #undef HAVE_COFF_H.
-
- * unexec.c (coff.h): Don't include unless HAVE_COFF_H is defined.
- Required for ISC 4.1.
-
-2001-11-16 Eli Zaretskii <eliz@is.elta.co.il>
-
- * syswait.h (HAVE_SYS_WAIT_H): Undef for ISC 4.1. Reported by
- Andrew Wiseman <a.wiseman@btclick.com>.
-
-2001-11-16 Kim F. Storm <storm@cua.dk>
-
- The following changes are made to clean up the various internal
- references to the fringes to actually use the term `fringe' for
- them. Previously, they were called `flags areas', `bitmap areas',
- `left/right side of windows', or implicitly as `flags' or
- `bitmaps':
-
- * dispextern.h (FRINGE_FACE_ID): Renamed from BITMAP_AREA_FACE_ID.
- Comments fixed. Use renamed symbols.
-
- * dispnew.c: Comment fix. Use renamed symbols.
-
- * frame.h (FRAME_FRINGE_COLS): Renamed from FRAME_FLAGS_AREA_COLS.
- (FRAME_FRINGE_WIDTH): Renamed from FRAME_FLAGS_AREA_WIDTH.
- (FRAME_LEFT_FRINGE_WIDTH): Renamed from FRAME_LEFT_FLAGS_AREA_WIDTH.
-
- * msdos.c: Comment fix.
-
- * w32fns.c: Use renamed symbols.
-
- * w32term.c: Comment fixes. Use renamed symbols.
- (fringe_bitmap_type): Renamed from bitmap_type.
- (NO_FRINGE_BITMAP): Renamed from NO_BITMAP.
- (w32_draw_fringe_bitmap): Renamed from w32_draw_bitmap.
- (x_draw_row_fringe_bitmaps): Renamed from x_draw_row_bitmaps.
-
- * w32term.h: Comment fixes. Use renamed symbols.
- (fringes_extra): Renamed from flags_areas_extra.
- (FRAME_FRINGE_BITMAP_WIDTH): Renamed from FRAME_FLAGS_BITMAP_WIDTH.
- (FRAME_FRINGE_BITMAP_HEIGHT): Renamed from FRAME_FLAGS_BITMAP_HEIGHT.
- (FRAME_X_FRINGE_COLS): Renamed from FRAME_X_FLAGS_AREA_COLS.
- (FRAME_X_FRINGE_WIDTH): Renamed from FRAME_X_FLAGS_AREA_WIDTH.
- (FRAME_X_LEFT_FRINGE_WIDTH):
- Renamed from FRAME_X_LEFT_FLAGS_AREA_WIDTH.
- (FRAME_X_RIGHT_FRINGE_WIDTH):
- Renamed from FRAME_X_RIGHT_FLAGS_AREA_WIDTH.
-
- * widget.c: Use renamed symbols.
-
- * window.c: Comment fixes. Use renamed symbols.
- (coordinates-in-window-p): Doc fix.
-
- * xdisp.c: Comment fixes. Use renamed symbols.
-
- * xfaces.c (realize_basic_faces): Use FRINGE_FACE_ID.
-
- * xfns.c: Use renamed symbols.
-
- * xterm.c: Comment fixes. Use renamed symbols.
- (fringe_bitmap_type): Renamed from bitmap_type.
- (NO_FRINGE_BITMAP): Renamed from NO_BITMAP.
- (x_draw_fringe_bitmap): Renamed from x_draw_bitmap.
- (x_draw_row_fringe_bitmaps): Renamed from x_draw_row_bitmaps.
-
- * xterm.h: Comment fixes. Use renamed symbols.
- (fringes_extra): Renamed from flags_areas_extra.
- (FRAME_FRINGE_BITMAP_WIDTH): Renamed from FRAME_FLAGS_BITMAP_WIDTH.
- (FRAME_FRINGE_BITMAP_HEIGHT): Renamed from FRAME_FLAGS_BITMAP_HEIGHT.
- (FRAME_X_FRINGE_COLS): Renamed from FRAME_X_FLAGS_AREA_COLS.
- (FRAME_X_FRINGE_WIDTH): Renamed from FRAME_X_FLAGS_AREA_WIDTH.
- (FRAME_X_LEFT_FRINGE_WIDTH):
- Renamed from FRAME_X_LEFT_FLAGS_AREA_WIDTH.
- (FRAME_X_RIGHT_FRINGE_WIDTH):
- Renamed from FRAME_X_RIGHT_FLAGS_AREA_WIDTH.
-
-2001-11-15 Jason Rumney <jasonr@gnu.org>
-
- * w32menu.c (add-menu-item): Make help_echo and radio buttons
- work for most menu items. From David Ponce
- <david.ponce@wanadoo.fr>.
-
-2001-11-15 Gerd Moellmann <gerd@gnu.org>
-
- * xfns.c (x_set_frame_parameters): Revert change of 2001-11-07.
- Some x_set_* function expect to be called even if old and new
- value are equal.
-
- * xdisp.c (build_desired_tool_bar_string): Accept zero
- tool_bar_button_relief.
-
- * xfns.c (Fx_create_frame): Accept zero tool_bar_button_relief.
-
- * xterm.c (x_draw_image_relief): Accept zero tool_bar_button_relief.
-
- * xterm.c (x_draw_bar_cursor): If the background color of the
- glyph under the cursor equals the frame's cursor color, use
- the glyph's foreground color for drawing the bar cursor.
-
- * dispnew.c (direct_output_forward_char): Fix character/byte
- position comparison.
-
-2001-11-15 Miles Bader <miles@gnu.org>
-
- * editfns.c (find_field): Add BEG_LIMIT and END_LIMIT parameters.
- (Fdelete_field, Ffield_string, Ffield_string_no_properties):
- Update arguments to find_field.
- (Ffield_beginning, Ffield_end): Add LIMIT param, pass to find_field.
- (Fconstrain_to_field): Use LIMIT arg to shorten search time.
- * lisp.h (Ffield_beginning, Ffield_end): Update EXFUN decl.
- * minibuf.c (Fminibuffer_prompt_end): Update args to Ffield_end.
-
-2001-11-14 Richard M. Stallman <rms@gnu.org>
-
- * editfns.c (Fpropertize): Allow call with 1 arg.
-
- * dispextern.h (image_background, image_background_transparent):
- Conditionalize on HAVE_X_WINDOWS.
-
-2001-11-13 Richard M. Stallman <rms@gnu.org>
-
- * print.c (Fprin1_to_string): Doc fix.
-
- * sunfns.c (Fsun_change_cursor_icon): Doc fix.
-
- * floatfns.c (Fceiling, Ffloor): Doc fixes.
-
- * filelock.c (Funlock_buffer, Ffile_locked_p): Doc fixes.
-
- * fileio.c (Ffile_accessible_directory_p): Doc fix.
-
- * eval.c (syms_of_eval): Doc fix.
-
- * coding.c (syms_of_coding): Doc fix.
-
- * doc.c (Fsnarf_documentation): Doc fix.
-
- * dispnew.c (syms_of_display): Doc fix.
-
- * category.c (Fget_unused_category): Doc fix.
-
- * buffer.c (syms_of_buffer): Doc fixes.
-
-2001-11-14 Eli Zaretskii <eliz@is.elta.co.il>
-
- * print.c (prin1, print): Doc fix.
-
-2001-11-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * fontset.h: Remove declarations of variables
- `Vhighlight_wrong_size_font' and `Vclip_large_size_font'.
-
- * fontset.c: Remove variables `Vhighlight_wrong_size_font' and
- `Vclip_large_size_font'.
-
-2001-11-13 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c: Doc fix.
-
-2001-11-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xfaces.c (Fface_attributes_as_vector): Doc fix.
-
- * fns.c: Doc fix.
-
- * emacs.c: Doc fix.
-
- * coding.c: Doc fix.
-
- * cmds.c, composite.c, dired.c, doc.c, filelock.c, floatfns.c,
- * fontset.c, insdel.c, keymap.c: Change doc-string comments to
- `new style' [w/`doc:' keyword].
-
-2001-11-12 Richard M. Stallman <rms@gnu.org>
-
- * xterm.c (XTread_socket): Don't update focus for EnterNotify or
- LeaveNotify events. Only FocusIn and FocusOut do that now.
- (x_display_and_set_cursor): Do display hollow cursors in active
- minibuffer windows when they are not selected.
-
-2001-11-12 Jason Rumney <jasonr@gnu.org>
-
- * w32console.c, w32fns.c, w32menu.c, w32proc.c, w32select.c,
- * w32term.c: Change doc-string comments to `new style'
- [w/`doc:' keyword]. Doc fixes.
-
- * w32fns.c: Don't define max.
- (Fx_open_connection): Only execute once.
-
-2001-11-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * ccl.c: Change macros to use do-while block instead of if-else.
- Use braces to follow GNU Coding Standards.
-
-2001-11-11 Richard M. Stallman <rms@gnu.org>
-
- * sysdep.c (child_setup_tty): Don't clear ICRNL or INLCR.
-
- * lread.c (read_escape): Use end_of_file_error for reporting eof.
-
- * insdel.c (replace_range): Use adjust_markers_for_replace
- instead of adjust_markers_for_delete and adjust_markers_for_insert.
-
- * intervals.h (set_text_properties, set_text_properties_1): Declare.
-
- * textprop.c (set_text_properties_1): New subroutine
- broken out of set_text_properties.
- (set_text_properties): Use set_text_properties_1.
-
- * intervals.c (graft_intervals_into_buffer):
- Use set_text_properties_1 to clear out properties.
-
- * search.c (Freplace_match): Use replace_range to insert
- and delete. Don't request property inheritance from
- surrounding text.
-
-2001-11-10 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (enum_font_cb2): Use leading @ on face name to detect
- vertical fonts. Allow them if face name is explicitly specified.
- Do not give up if we find a font that cannot be converted to an xlfd.
-
-2001-11-10 Gerd Moellmann <gerd@gnu.org>
-
- * unexelf.c (unexec): Use mmap/munmap to allocate buffers
- instead of malloc/free.
-
-2001-11-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xfaces.c (merge_face_vectors): Use braces to follow GNU
- Coding Standards.
- (Finternal_set_lisp_face_attribute): Likewise.
-
- * buffer.c (Fbury_buffer): Likewise.
-
- * indent.c (current_column_1): Remove unused variable `prev_col'.
-
- * coding.c (encode_coding): Use precomputed value of `src'.
- (encode_coding): Remove unused variable `src_end'.
- (code_convert_region): Remove unused variables `count'.
-
-2001-11-07 Jason Rumney <jasonr@gnu.org>
-
- * w32term.c (x_display_and_set_cursor): Do not move system caret
- if cursor_glyph is NULL.
-
-2001-11-07 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keymap.c (access_keymap): Fix compilation error.
-
-2001-11-07 Miles Bader <miles@gnu.org>
-
- * xfns.c (x_set_frame_parameters): Avoid infinite recursion.
-
-2001-11-07 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * intervals.c (graft_intervals_into_buffer):
- Remove #ifdef'd-out code.
- (graft_intervals_into_buffer): Remove unused variable `middle'.
-
- * lread.c (Feval_region): Remove obsolete #ifdef'd-out
- code (eval-current-buffer).
- Change doc-string comments to `new style' [w/`doc:' keyword].
-
-2001-11-06 Richard M. Stallman <rms@gnu.org>
-
- * keymap.c (access_keymap): Don't use initializers on Lisp_Object.
-
-2001-11-06 Stefan Monnier <monnier@cs.yale.edu>
-
- * lread.c (read1): Fix behavior with nested backquoting.
-
- * keyboard.c (make_lispy_event): Check integerness and fix
- Lisp_Object/int mixup.
-
-2001-11-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * fns.c (copy_hash_table): Remove unused variable `v'.
-
- * fontset.c (fontset_font_pattern): Remove unused variable
- `family_registry'.
-
- * indent.c (current_column_1): Remove unused variable `prev_col'.
-
-2001-11-05 Richard M. Stallman <rms@gnu.org>
-
- * m/news-risc.h (BROKEN_PROTOTYPES): Defined.
-
- * buffer.c (Fkill_buffer): Don't delete auto save file
- if buffer is modified.
-
-2001-11-05 Andrew Innes <andrewi@gnu.org>
-
- * w32proc.c (Fw32_set_keyboard_layout): Use CHECK_NUMBER_CAR and
- CHECK_NUMBER_CDR.
-
-2001-11-05 Richard M. Stallman <rms@gnu.org>
-
- * unexelf.c (unexec): Minor changes; clean up comments.
-
-2001-11-05 Sam Steingold <sds@gnu.org>
-
- * w32term.c (x_display_and_set_cursor): Fix w32 compilation error.
-
-2001-11-05 Andreas Schwab <schwab@suse.de>
-
- * sound.c (sound_perror): Save errno from being clobbered.
-
-2001-11-05 Dale Hagglund <rdh@yottayotta.com>
-
- * unexelf.c (unexec): Don't use `mmap'. Instead, read and write
- the program image directly.
-
-2001-11-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * buffer.h (Fbuffer_local_value): Add prototype.
-
-2001-11-04 Richard M. Stallman <rms@gnu.org>
-
- * buffer.c (Fbuffer_local_value): Remove extra args from CHECK_SYMBOL
- and CHECK_BUFFER.
-
- * keyboard.c (read_char): Use Fcar and Fcdr, not Fnth.
- (record_char): Likewise.
-
- * keyboard.c (make_lispy_event): Don't insist a drag event must
- move to a different buffer position. Instead, check for moving at
- least double_click_fuzz.
-
- * fns.c (Fmake_hash_table): Use XCAR and XCDR, not Fnth and Flength.
-
- * keyboard.c (echo-area-clear-hook): Undo Oct 29 change.
-
- * indent.c (current_column_1, Fmove_to_column): Separate the code
- for display-table glyphs from the code for buffer text, to fix
- bugs in the former.
-
-2001-11-04 Michael Welsh Duggan <md5i@cs.cmu.edu>
-
- * buffer.c (Fbuffer_local_value): New function.
- (syms_of_buffer): Defsubr it.
-
- * xterm.c, w32term.c (x_display_and_set_cursor): Use buffer-local
- value of `cursor-in-non-selected-windows'.
-
- * lisp.h (Qcursor_in_non_selected_windows): New declaration.
- * xdisp.c (Qcursor_in_non_selected_windows): New variable.
- (syms_of_xdisp): Initialize it.
-
-2001-11-04 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xfns.c (Fx_create_frame): Doc fix.
-
- * coding.c: Change doc-string comments to `new style' [w/`doc:'
- keyword].
-
- * eval.c (top_level_value, top_level_set): Remove commented and
- #ifdef'd-out code.
- (Fdefvar): Fix usage in doc-string.
-
-2001-11-03 Richard M. Stallman <rms@gnu.org>
-
- * xfns.c: Include unistd.h, if it exists.
-
- * editfns.c: Move the include of ctype.h after unistd.h.
-
- * gmalloc.c: Test BROKEN_PROTOTYPES.
-
-2001-11-03 Ken Raeburn <raeburn@gnu.org>
-
- * lisp.h (CHECK_STRING_CAR): New macro.
- * lread.c (Fload): Use XSETCARFASTINT, XSETCDRFASTINT instead of
- treating XCAR and XCDR as lvalues.
- (openp): Use CHECK_STRING_CAR.
- (read_list): Use XSETCDR instead of treating XCDR as lvalue.
-
-2001-11-03 Eli Zaretskii <eliz@is.elta.co.il>
-
- * s/sco5.h (sigprocmask_set): Declare as extern SIGMASKTYPE.
- (SIGMASKTYPE): Define.
-
- * syssignal.h (sigunblock): Don't define if already defined.
-
-2001-11-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * eval.c (debugger_may_continue, Vdebug_ignored_errors)
- (call_debugger, Fcondition_case, skip_debugger, unbind_to):
- Fix typos in comments.
-
- * mocklisp.c (Fml_defun, Fml_while, Fml_substr): Remove commented
- and #ifdef'd-out code.
- Fix and reindent comments.
-
- * mocklisp.h: Remove comment which is a copy of comment in mocklisp.c.
-
- * category.h (CHECK_CATEGORY, CHECK_CATEGORY_SET): Remove unused
- argument `i' in macros.
-
- * frame.h (CHECK_FRAME, CHECK_LIVE_FRAME): Remove unused argument
- `i' in macros.
-
- * lisp.h (CHECK_STRING_OR_BUFFER, CHECK_HASH_TABLE, CHECK_LIST)
- (CHECK_STRING, CHECK_CONS, CHECK_SYMBOL, CHECK_CHAR_TABLE)
- (CHECK_VECTOR, CHECK_VECTOR_OR_CHAR_TABLE, CHECK_BUFFER)
- (CHECK_WINDOW, CHECK_LIVE_WINDOW, CHECK_PROCESS, CHECK_NUMBER)
- (CHECK_NATNUM, CHECK_MARKER, CHECK_NUMBER_COERCE_MARKER)
- (CHECK_FLOAT, CHECK_NUMBER_OR_FLOAT)
- (CHECK_NUMBER_OR_FLOAT_COERCE_MARKER, CHECK_OVERLAY)
- (CHECK_NUMBER_CAR, CHECK_NUMBER_CDR): Remove unused argument `i'
- in macros.
-
- * abbrev.c, alloc.c, buffer.c, bytecode.c, callint.c, callproc.c,
- * casefiddle.c, category.c, ccl.c, charset.c, cmds.c, coding.c,
- * composite.c, data.c, dired.c, dispnew.c, doc.c, dosfns.c, emacs.c,
- * eval.c, fileio.c, filelock.c, fns.c, fontset.c, frame.c, frame.h,
- * indent.c, keyboard.c, keymap.c, lread.c, macros.c, marker.c,
- * minibuf.c, mocklisp.c, msdos.c, print.c, process.c, search.c,
- * sunfns.c, syntax.c, textprop.c, undo.c, w16select.c, w32console.c,
- * w32fns.c, w32menu.c, w32proc.c, w32select.c, window.c, xdisp.c,
- * xfaces.c, xmenu.c, xselect.c: Update usage of CHECK_ macros
- (remove unused second argument).
-
-2001-11-02 Stefan Monnier <monnier@cs.yale.edu>
-
- * syntax.c (describe_syntax): New wrapper.
- (Finternal_describe_syntax_value): Rename from describe_syntax.
- Don't insert space at front and \n at the end.
- (syms_of_syntax): Defsubr Sinternal_describe_syntax_value.
-
- * regex.c (re_wctype): Try to fix some warnings.
- (regcomp, regexec): Don't forget the __restrict.
-
-2001-11-02 Richard M. Stallman <rms@gnu.org>
-
- * textprop.c (Fget_char_property): Doc fix.
-
-2001-11-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * process.c (Fstart_process): Add usage to doc-string.
-
- * data.c (Fsetq_default): Ditto.
-
- * callint.c (Finteractive): Ditto.
-
-2001-11-01 Stefan Monnier <monnier@cs.yale.edu>
-
- * macros.c: Don't include keymap.h any more.
-
-2001-11-01 Richard M. Stallman <rms@gnu.org>
-
- * data.c (Fmake_local_variable): Doc fix.
-
- * eval.c (Frun_hooks, Frun_hook_with_args_until_failure): Doc fix.
- (Frun_hook_with_args_until_success, Frun_hook_with_args): Doc fix.
-
- * keymap.c (Fdescribe_buffer_bindings): Print character property
- bindings along with or instead of the buffer local map.
- Make the overriding maps override what they should.
-
-2001-11-01 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * window.c (grow_mini_window): Fix typo in comment.
-
-2001-11-01 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_scroll_bar_create): Check for width and height > 0.
- (XTset_vertical_scroll_bar): Likewise.
-
- * xfns.c (x_build_heuristic_mask): Use four_corners_best
- instead of IMAGE_BACKGROUND.
-
- * xfns.c (four_corners_best): Reindent.
-
- * xfaces.c (Finternal_set_lisp_face_attribute_from_resource):
- Handle :box so that it is possible to specify sexprs.
-
-2001-10-31 Eli Zaretskii <eliz@is.elta.co.il>
-
- * s/hpux11.h: New file.
-
-2001-10-31 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * emacs.c (USAGE1): Show command line option --no-window-system
- instead of --no-windows in usage.
- (standard_args): Rename --no-windows to --no-window-system.
- (bug_reporting_address): Follow Emacs coding conventions.
-
- * eval.c (Fcommandp): Doc fix.
- Change doc-string comments to `new style' [w/`doc:' keyword].
-
- * frame.c (Fframe_live_p): Doc fix.
-
- * buffer.c (selective-display-ellipses): Doc fix.
-
-2001-10-31 Gerd Moellmann <gerd@gnu.org>
-
- * lread.c (to_multibyte): Fix computation of new read_buffer_size.
-
- * xfaces.c (realize_x_face): If C is not a single-byte character,
- set the face's colors_copied_bitwise_p instead of the defaulted_p
- members which have a different meaning.
- (free_face_colors): Do nothing for a face whose colors have been
- copied bitwise.
-
- * dispextern.h (struct face) <colors_copied_bitwise_p>: New member.
-
-2001-10-31 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * marker.c, mocklisp.c: Change doc-string comments to `new style'
- [w/`doc:' keyword].
-
-2001-10-31 Gerd Moellmann <gerd@gnu.org>
-
- * fns.c (require_unwind): Return Lisp_Object.
-
-2001-10-31 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c (lucid-menu-bar-dirty-flag): Doc fix.
- (last-input-char): Revert doc-string to be the same as the
- doc-string of `last-input-event'.
-
- * xdisp.c: Fix typos in comments.
-
-2001-10-31 Gerd Moellmann <gerd@gnu.org>
-
- * window.c (grow_mini_window): Handle case that the root
- window is already smaller than the nominal mininum height.
-
-2001-10-30 Stefan Monnier <monnier@cs.yale.edu>
-
- * emacs.c (main): Don't call keys_of_macros any more.
-
- * lisp.h (keys_of_macros): Remove.
-
- * macros.c (keys_of_macros): Remove.
-
- * xfaces.c (Fface_attribute_relative_p): Declare args.
-
-2001-10-30 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_to_x_charset): Increase size of XLFD charset buffer.
- (enum_font_cb2): Ignore fonts with vertical orientation.
-
-2001-10-30 Richard M. Stallman <rms@gnu.org>
-
- * keyboard.c (Finput_pending_p): Doc fix.
-
-2001-10-30 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_after_update_window_line): Don't run the code
- clearing in borders for rows whose visible height is 0.
-
- * xdisp.c (clear_garbaged_frames): Redraw the frame only if its
- resized_p flag is set. If not set, use the much less flickering
- method previously used.
-
- * dispnew.c (change_frame_size_1): Set frame's resized_p.
-
- * frame.h (struct frame) <resized_p>: New member.
-
- * lread.c (to_multibyte): Ensure read_buffer is at least twice
- as large as the number of bytes to convert.
-
- * lread.c (to_multibyte): New function.
- (read1): Use it.
-
-2001-10-30 Eli Zaretskii <eliz@is.elta.co.il>
-
- * msdos.h (FRAME_LINE_HEIGHT): Define (it's used by xmenu.c).
-
-2001-10-30 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_draw_relief_rect): Correct bottom relief by 1 pixel.
- (x_set_glyph_string_background_width): Set extends_to_end_of_line_p
- if the row's fill_line_p is set and drawing the last glyph with
- DRAW_IMAGE_{RAISED,SUNKEN}.
-
- * xdisp.c (clear_garbaged_frames): Call Fredraw_frame.
-
-2001-10-29 Stefan Monnier <monnier@cs.yale.edu>
-
- * xmenu.c: Include coding.h and charset.h.
- (Fx_popup_menu): Use FRAME_PTR and FRAME_FONT and FRAME_LINE_HEIGHT.
- (Fx_popup_dialog): Use FRAME_PTR and enum scroll_bar_part.
- (single_submenu, xmenu_show): Use ENCODE_SYSTEM.
- Explicitly set wv->help. Use `TRUE' rather than `True'.
- (menu_help_callback): Use empty_string.
-
- * w32menu.c (Fx_popup_menu): Explicitly init f, xpos, and ypos.
- (Fx_popup_dialog): Explicitly init f.
- (w32_menu_display_help): Use empty_string.
-
-2001-10-29 Richard M. Stallman <rms@gnu.org>
-
- * fns.c (Frequire): Detect recursive try to require the same
- feature 3 or more levels deep, and get error.
- (require_unwind): New subroutine.
- (require_nesting_list): New variable.
- (syms_of_fns): Init and staticpro it.
-
- * print.c (print_object): Clarify indication of insertion type.
-
-2001-10-29 Eli Zaretskii <eliz@is.elta.co.il>
-
- * coding.c (syms_of_coding): Document that locale-coding-system is
- used for decoding input on X.
-
- * window.c (Fscroll_left, Fscroll_right): Doc fix.
-
-2001-10-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * keyboard.c (Finput_pending_p): Fix typo in doc-string.
- (echo-area-clear-hook): Properly DEFVAR_LISP and staticpro it.
-
-2001-10-29 Gerd Moellmann <gerd@gnu.org>
-
- * xterm.c (x_display_and_set_cursor): If cursor_in_echo_area,
- use NO_CURSOR if cursor_in_non_selected_windows is false.
-
- * xfaces.c (Fface_font): Use UNSPECIFIEDP instead of NILP for
- the slant attribute if FRAME is t.
-
- * xfns.c (x_set_internal_border_width): Set frame garbaged
- when X window doesn't exist yet.
-
- * xterm.c (x_after_update_window_line): Clear internal border
- in different circumstances.
-
- * xterm.c (XTread_socket) <KeyPress>: Don't use
- STRING_CHAR_AND_LENGTH if nchars == nbytes. From Kenichi Handa
- <handa@etl.go.jp>.
-
-2001-10-28 Eli Zaretskii <eliz@is.elta.co.il>
-
- * m/ibms390.h: New file. From Adam Thornton
- <athornton@sinenomine.net>.
-
-2001-10-28 Gerd Moellmann <gerd@gnu.org>
-
- * xfns.c (x_build_heuristic_mask): Use x_alloc_image_color.
-
- * xfns.c (x_build_heuristic_mask): Fix a bug not incrementing
- a loop counter.
-
-2001-10-28 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * emacs.c: Use argv[0] instead of "emacs" when -t was specified.
-
- * keyboard.c: Change doc-string comments to `new style' [w/`doc:'
- keyword].
- Fix typos in comments.
-
- * emacs.c (bug_reporting_address): New function.
- Use it when displaying usage message.
-
- * minibuf.c (read_minibuf): Remove unused external declaration of
- variable `Qread_only'.
-
- * keymap.c (access_keymap): Remove unused variable `charset'.
-
-2001-10-28 Miles Bader <miles@gnu.org>
-
- * xfaces.c (merge_face_heights): Handle TO being relative as well.
- Remove #ifdef'd-out code.
- (Fface_attribute_relative_p, Fmerge_face_attribute): New functions.
- (syms_of_xfaces): Initialize them.
-
-2001-10-27 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (w32_wnd_proc) <WM_KILLFOCUS>: Destroy the system caret.
- <WM_EMACS_DESTROY_CARET, WM_EMACS_TRACK_CARET>: Track cursor
- position using the system caret.
-
- * w32term.c (w32_system_caret_hwnd, w32_system_caret_width)
- (w32_system_caret_height, w32_system_caret_x)
- (w32_system_caret_y): New variables for tracking system caret.
- (w32_initialize): Initialize them.
- (x_display_and_set_cursor): Make system caret follow the active cursor.
-
- * w32term.h (WM_EMACS_TRACK_CARET, WM_EMACS_DESTROY_CARET):
- New messages types.
-
- * w32term.c (note_mouse_highlight): Clear old help_echo.
-
-2001-10-27 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * xterm.c: Fix typo in a comment.
-
- * emacs.c: Fix typos in comments.
- Remove unnecessary spaces.
- Change doc-string comments to `new style' [w/`doc:' keyword].
- (USAGE2): Fix typos in usage string.
-
- * xterm.c: Fix typo in a comment.
-
- * lisp.h (gdb_lisp_params): Remove code in #if 0 which is now in
- emacs.c.
-
-2001-10-27 Gerd Moellmann <gerd@gnu.org>
-
- * xdisp.c (move_it_vertically_backward): Use 2/3 line_height
- instead of 1/2 line_height in the heuristic for skipping
- farther backward when target_y was not reached.
-
- * sound.c (sound_perror): Unblock SIGIO, turn on atimers.
- Display errno only if non-zero.
- (sound_warning): New function.
- (vox_configure): Don't treat failing to set sample rate as error.
- (various places): Improve error messages.
-
-2001-10-26 Eli Zaretskii <eliz@is.elta.co.il>
-
- * fileio.c (Faccess_file): Run the argument filename through
- Fexpand_file_name, before using it.
-
- * dispnew.c (syms_of_display) <visible-bell>: Add a reference to
- ring-bell-function. Suggested by Alf-Ivar Holm <alfh@ifi.uio.no>
-
-2001-10-26 Gerd Moellmann <gerd@gnu.org>
-
- * insdel.c (insert_1_both): Do nothing if NCHARS == 0.
-
- * xterm.c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
- Fix clearing in the case of scroll bars on the right.
-
-2001-10-26 Juanma Barranquero <lektu@terra.es>
-
- * w32gui.h (XImage): Add a dummy typedef.
-
-2001-10-26 Gerd Moellmann <gerd@gnu.org>
-
- * xfns.c (XScreenNumberOfScreen): Fix struct to pointer comparison.
-
-2001-10-25 Eli Zaretskii <eliz@is.elta.co.il>
+2007-05-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * frame.c (Fframe_parameter): Fix last change.
+ * xdisp.c (redisplay_internal): Bind inhibit-point-motion-hooks to t
+ around current_column call.
- * fileio.c: Revert last change (which removed old commented-out
- version of expand-file-name). Add a comment that explains why
- this old version should not be removed.
+2007-05-26 Dan Nicolaescu <dann@ics.uci.edu>
-2001-10-25 Gerd Moellmann <gerd@gnu.org>
+ * xfaces.c (syms_of_xfaces): Delete stray semicolon.
+ * xdisp.c (next_element_from_buffer):
+ * window.c (delete_window):
+ * term.c (term_mouse_highlight):
+ * msdos.c (getdefdir):
+ * macterm.c (mac_create_bitmap_from_bitmap_data)
+ (init_font_name_table):
+ * fns.c (Fsxhash):
+ * data.c (Fmake_local_variable):
+ * ccl.c (ccl_driver): Likewise.
- * frame.c (Fframe_parameter): Fix a bug whereby some
- ``artificial'' frame parameters, like `minibuffer' were not
- obtained by calling Fframe_parameters.
+2007-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * xterm.c (show_mouse_face): Clean up. Recognize overwritten
- cursor differently.
+ * macterm.c [USE_CARBON_EVENTS] (mac_handle_window_event):
+ Call mac_wakeup_from_rne on window size change.
- * xdisp.c (move_it_vertically_backward): Compute line height
- differently. Add heuristic to try to be more compatible to 20.x.
+2007-05-25 Chong Yidong <cyd@stupidchicken.com>
-2001-10-25 Stefan Monnier <monnier@cs.yale.edu>
+ * image.c (uncache_image): Fix typo.
- * lisp.h (make_fixnum_or_float): Coerce double to int explicitly.
+2007-05-23 Johannes Weiner <hannes@saeurebad.de> (tiny change)
- * editfns.c (text_property_stickiness): Fix Lisp_Object used as
- boolean.
+ * keyboard.c (make_lispy_movement): Condition on HAVE_GPM too.
-2001-10-25 Miles Bader <miles@gnu.org>
+2007-05-22 Richard Stallman <rms@gnu.org>
- * xfns.c (png_load): Make sure SPECIFIED_BG is a string.
- BG is a pointer to a structure, not a structure.
- (gif_format, png_format): Add missing commas.
+ * xterm.c (x_connection_closed): Remove NO_RETURN.
-2001-10-24 Richard M. Stallman <rms@gnu.org>
+2007-05-22 Martin Rudalics <rudalics@gmx.at>
- * xfaces.c (Fface_attributes_as_vector): New function.
- (syms_of_xfaces): Defsubr it.
+ * syntax.c (scan_words): Fix arg to UPDATE_SYNTAX_TABLE_BACKWARD.
-2001-10-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2007-05-21 Chong Yidong <cyd@stupidchicken.com>
- * dispnew.c (sync_window_with_frame_matrix_rows): Remove unused
- variable `area'.
+ * image.c (uncache_image): New function.
+ (Fimage_refresh): New function.
-2001-10-25 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2007-05-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
- * search.c (scan_newline): Remove unused variable `selective_display'.
+ * Makefile.in: Move GPM check outside HAVE_X_WINDOWS.
-2001-10-25 Miles Bader <miles@gnu.org>
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
- * dispextern.h (struct image): Add `background',
- `background_valid', and `background_transparent' fields.
- (image_background, image_background_transparent): New declarations.
- (IMAGE_BACKGROUND, IMAGE_BACKGROUND_TRANSPARENT): New macros.
- * xfns.c (image_background, image_background_transparent)
- (four_corners_best): New functions.
- (xpm_format, png_format, jpeg_format, tiff_format, gif_format)
- (gs_format): Add `:background' entry.
- (lookup_image): Set IMG's background color if specified.
- (pbm_load, xbm_load_image, png_load): Set IMG's background field
- when appropriate.
- (x_clear_image_1): Reset `background_valid' and
- `background_transparent_valid' fields.
- (x_build_heuristic_mask): Use IMAGE_BACKGROUND instead of
- calculating it here. Set IMG's background_transparent field.
- (enum xpm_keyword_index): Add XPM_BACKGROUND.
- (enum png_keyword_index): Add PNG_BACKGROUND.
- (enum jpeg_keyword_index): Add JPEG_BACKGROUND.
- (enum tiff_keyword_index): Add TIFF_BACKGROUND.
- (enum gif_keyword_index): Add GIF_BACKGROUND.
- (enum gs_keyword_index): Add GS_BACKGROUND.
- (pbm_load, png_load, jpeg_load, tiff_load, gif_load):
- Pre-calculate image background color where necessary.
- * xterm.c (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
- `IMAGE_BACKGROUND_TRANSPARENT' to calculate the correct background
- color to use for image glyph reliefs.
+ * config.in, keyboard.c, Makefile.in, sysdep.c, term.c,
+ * termhooks.h: Use HAVE_GPM instead of HAVE_GPM_H.
-2001-10-24 Gerd Moellmann <gerd@gnu.org>
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
- * xterm.c (x_draw_glyphs): Don't check for cursor overwriting
- in full-width rows.
+ * keyboard.c (make_lispy_event): Make case GPM_CLICK_EVENT
+ conditional on [HAVE_GPM_H].
- * xterm.c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
- Fix clearing of area not covered by scroll bar.
+2007-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
-2001-10-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+ * syntax.c (skip_chars): Update syntax-table only after we checked that
+ the new location is valid.
- * xterm.c (x_insert_glyphs): Remove unused variables `real_end'
- and `real_start'.
- (x_draw_image_foreground): Remove unused variables `mask' and `xgcv'.
- (glyph_rect): Remove unused variable `area'.
+2007-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
-2001-10-24 Gerd Moellmann <gerd@gnu.org>
+ * macterm.c (x_calc_absolute_position): Add BLOCK_INPUT around
+ mac_get_window_bounds.
- * xdisp.c: Change #ifdef GLYPH_DEBUG to #if.
+2007-05-20 Nick Roberts <nickrob@snap.net.nz>
- * xdisp.c (try_window_reusing_current_matrix): Use row_containing_pos.
- (row_containing_pos): Take additional argument DY.
- Treat rows ending in middle of char differently.
- (display_line): Handle tabs on window systems differently.
+ * Makefile.in (LIBGPM): Allow it to be set from configure.
+ If set then link Emacs with it.
- * xterm.c, w32term.c (fast_find_position): Call row_containing_pos
- with additional argument.
+ * config.in: Regenerate.
- * dispextern.h (row_containing_pos): Adjust prototype.
+ * lisp.h (add_gpm_wait_descriptor, delete_gpm_wait_descriptor):
+ New externs.
+
+ * termhooks.h [HAVE_GPM_H] (enum event_kind): Add GPM_CLICK_EVENT.
+ Include gpm.h.
+ (handle_one_term_event, term_gpm): New externs.
+
+ * sysdep.c [HAVE_GPM_H] (init_sys_modes): Make gpm_fd nonblocking
+ and allow it to be interrupted by SIGIO.
+
+ * process.c (gpm_wait_mask, max_gpm_desc): New variables.
+ (wait_reading_process_output): Wait on gpm_fd too.
+ (add_gpm_wait_descriptor, delete_gpm_wait_descriptor)): New functions.
+ (add_gpm_wait_descriptor_called_flag): New variable.
+ (delete_keyboard_wait_descriptor): Check gpm_wait_mask.
+
+ * keyboard.c [HAVE_GPM_H] (Qmouse_fixup_help_message)
+ (make_lispy_movement, tracking_off, Ftrack_mouse, some_mouse_moved)
+ (show_help_echo, readable_events, kbd_buffer_get_event, init_keyboard):
+ Extend HAVE_MOUSE ifdefs to HAVE_GPM_H.
+ (make_lispy_event): Add case GPM_CLICK_EVENT.
+ (read_avail_input): Handle mouse input.
+
+ * term.c (write_glyphs_with_face): New function.
+ [HAVE_GPM_H]: Include buffer.h, sys/fcntl.h.
+ (mouse_face_beg_row, mouse_face_beg_col, mouse_face_end_row)
+ (mouse_face_end_col, mouse_face_past_end, mouse_face_window)
+ (mouse_face_face_id, term_gpm, pos_x, pos_y)
+ (last_mouse_x, last_mouse_y): New variables.
+ (term_show_mouse_face, term_clear_mouse_face, fast_find_position)
+ (term_mouse_highlight, term_mouse_movement, term_mouse_position)
+ (term_mouse_click, handle_one_term_event, Fterm_open_connection)
+ (Fterm_close_connection): New functions.
+ (term_init): Initialise mouse_face_window.
+
+2007-05-19 Chong Yidong <cyd@stupidchicken.com>
- * xdisp.c (inhibit_try_window_id, inhibit_try_window_reusing)
- (inhibit_try_cursor_movement) [GLYPH_DEBUG]: New variables.
- (try_window_id, try_window_reusing_current_matrix)
- (try_cursor_movement) [GLYPH_DEBUG]: Don't run if inhibited.
- (syms_of_xdisp) [GLYPH_DEBUG]: DEFVAR_BOOL the variables.
+ * xdisp.c (redisplay_window): If first window line is a
+ continuation line, recompute the new window start instead of
+ recentering.
-2001-10-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2007-05-18 Glenn Morris <rgm@gnu.org>
- * xmenu.c: Spell the name of Emacs properly (GNU Emacs instead of
- gnuemacs).
- (HAVE_BOXES): Fix typo in comment.
- (push_menu_pane): Fix typo in comment.
+ * m/alpha.h (ORDINARY_LINK): No longer define on OpenBSD.
+ Suggested by Alfred M. Szmidt <ams@gnu.org>.
- * xdisp.c (display_prop_string_p): Remove unused local declaration
- of `Qwhen'.
- (single_display_prop_string_p): Remove unused local declarations
- of `Qwhen' and `Qmargin'.
- (string_buffer_position): Remove unused variable `around'.
- (store_frame_title): Remove unused variable `width'.
+2007-05-17 Glenn Morris <rgm@gnu.org>
- * window.c: Don't define max.
- (coordinates_in_window): Remove unused variable `uy'.
+ * m/macppc.h (ORDINARY_LINK): No longer define on OpenBSD.
- * widget.c: Don't define max.
+2007-05-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * process.c: Don't define max.
- (create_process): Remove unused variable `buffer'.
+ * macterm.c [USE_CARBON_EVENTS] (mac_convert_event_ref): Also convert
+ dead key repeat and up events.
-2001-10-23 Gerd Moellmann <gerd@gnu.org>
+2007-05-14 Chong Yidong <cyd@stupidchicken.com>
- * xfaces.c (Finternal_set_lisp_face_attribute): Fix compilation error.
+ * image.c (pbm_load): Check image size for monochrome pbm.
-2001-10-23 Eli Zaretskii <eliz@is.elta.co.il>
+2007-05-13 Chong Yidong <cyd@stupidchicken.com>
- * xfaces.c (Finternal_set_lisp_face_attribute)
- [HAVE_WINDOW_SYSTEM]: Don't do anything for QCfont unless the
- frame is on a windowed display.
+ * xterm.c (XTread_socket): Revert last change.
-2001-10-23 Gerd Moellmann <gerd@gnu.org>
+2007-05-12 Chong Yidong <cyd@stupidchicken.com>
- * dispnew.c (sync_window_with_frame_matrix_rows):
- Fix handling of windows which aren't full-width, fix handling
- of marginal areas.
+ * image.c (pbm_load): Correctly check image size for greyscale pbm.
- * lread.c (syms_of_lread) <recursive-load-depth-limit>: Raise to 50.
+ * xterm.c (XTread_socket): Yet Another Uncaught X Error Crash (YAUXEC).
-2001-10-23 Andreas Schwab <schwab@suse.de>
+2007-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
- * m/macppc.h [LINUX]: Undef LD_SWITCH_SYSTEM_TEMACS and override
- LD_SWITCH_MACHINE_TEMACS with "-Xlinker -znocombreloc".
+ * editfns.c (Ftranspose_regions): Yet another int/Lisp_Object
+ mixup (YAILOM).
-2001-10-23 Gerd Moellmann <gerd@gnu.org>
+2007-05-07 Andreas Schwab <schwab@suse.de>
- * xterm.c (x_draw_glyphs): Remove parameters READ_START and
- REAL_END. Notice if cursor gets overwritten.
- (notice_overwritten_cursor): Take X positions as parameters.
- (x_draw_phys_cursor_glyph): Save state of w->phys_cursor_on_p
- around call to x_draw_glyphs.
+ * keymap.c (Flookup_key): Fix typo in last change.
-2001-10-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2007-05-07 Stefan Monnier <monnier@iro.umontreal.ca>
- * syntax.c (modify-syntax-entry): Fix argument names (use CHAR
- instead of C) and usage.
+ * keymap.c (Fdefine_key, Flookup_key): Only do the 0x80->meta_modifier
+ mapping for unibyte strings.
- * editfns.c (char-to-string): Fix argument names (use CHAR instead
- of C) and usage.
+2007-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * xfns.c (Fx_show_tip): Remove unused variables `buffer', `top',
- `left', `max_width' and `max_height'.
+ * macmenu.c (mac_dialog_show): Apply 2007-04-27 change for xmenu.c.
+ (Fx_popup_dialog) [MAC_OSX]: Likewise.
-2001-10-23 Gerd Moellmann <gerd@gnu.org>
+2007-04-29 Richard Stallman <rms@gnu.org>
- * xdisp.c (display_line): For a tab continued to the next line,
- set row's ends_in_middle_of_char_p.
+ * insdel.c (replace_range): For undo, record insertion first.
-2001-10-22 Gerd Moellmann <gerd@gnu.org>
+2007-04-29 Andreas Schwab <schwab@suse.de>
- * xdisp.c (display_line): Fix computation of continuation lines
- width for TABs.
+ * lisp.h (VECSIZE): Use OFFSETOF.
-2001-10-22 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+2007-04-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
- * xdisp.c (build_desired_tool_bar_string): Remove unused variable
- `Qlaplace'.
+ * xdisp.c (try_window_reusing_current_matrix): Fix number of
+ disabled lines.
- * fileio.c: Remove unused code.
+2007-04-28 Richard Stallman <rms@gnu.org>
-2001-10-22 Miles Bader <miles@gnu.org>
+ * lread.c (read_escape): In a string, \s is always space.
- * lisp.h (DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL)
- (DEFVAR_INT, DEFVAR_PER_BUFFER, DEFVAR_KBOARD):
- Remove `DOC_STRINGS_IN_COMMENTS' cases.
+2007-04-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
-2001-10-21 Jason Rumney <jasonr@gnu.org>
+ * xmenu.c (xdialog_show): Call Fredisplay before showing the dialog.
- * w32term.c (x_erase_phys_cursor): Remove inverse_p again.
+ * gtkutil.c (xg_update_menubar, create_menus): Create empty
+ submenu for menu bar items.
-2001-10-21 Eli Zaretskii <eliz@is.elta.co.il>
-
- * mocklisp.c (Fml_if, Fml_provide_prefix_argument)
- (Finsert_string): Avoid the multi-line string literals warning.
-
-2001-10-22 Miles Bader <miles@gnu.org>
-
- * doc.c (Vhelp_manyarg_func_alist): Variable removed.
- (Fdocumentation): Don't use it.
- (syms_of_doc): Don't initialize it.
-
- * keyboard.c (Ftrack_mouse): Add usage: string to doc string.
- * print.c (Fwith_output_to_temp_buffer): Likewise.
- * window.c (Fsave_window_excursion): Likewise.
- * editfns.c (Fsave_excursion, Fsave_current_buffer)
- (Fsave_restriction): Likewise.
- * eval.c (Frun_hooks, Frun_hook_with_args)
- (Frun_hook_with_args_until_failure)
- (Frun_hook_with_args_until_success, Ffuncall, For, Fand, Fif)
- (Fcond, Fprogn, Fprog1, Fprog2, Fsetq, Fquote, Ffunction, Fdefun)
- (Fdefmacro, Fdefvar, Fdefconst, FletX, Flet, Fwhile, Fcatch)
- (Funwind_protect, Fcondition_case): Likewise.
- * coding.c (Ffind_operation_coding_system): Likewise.
- * keyboard.c (Ftrack_mouse): Likewise.
-
-2001-10-21 Miles Bader <miles@gnu.org>
-
- * fns.c (Fappend, Fconcat, Fvconcat, Fnconc, Fwidget_apply)
- (Fmake_hash_table): Add usage: string to doc string.
- * editfns.c (Finsert, Finsert_and_inherit, Finsert_before_markers)
- (Fmessage, Fmessage_box, Fmessage_or_box, Fpropertize, Fformat)
- (Fencode_time, Finsert_and_inherit_before_markers): Likewise.
- * mocklisp.c (Finsert_string, Fml_if, Fml_provide_prefix_argument)
- (Fml_prefix_argument_loop): Likewise.
-
-2001-10-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * fileio.c (Finsert_file_contents): Remove unused variable `gap_size'.
-
- * sysdep.c (init_sys_modes): Change doc-string comments to `new
- style' [w/`doc:' keyword].
-
- * data.c, fileio.c, indent.c, print.c, search.c, sound.c,
- * sunfns.c, textprop.c, undo.c, xselect.c: Change doc-string
- comments to `new style' [w/`doc:' keyword].
-
-2001-10-21 Jason Rumney <jasonr@gnu.org>
-
- * w32fns.c (Fx_file_dialog): Pass a filter to GetOpenFileName.
-
- * w32term.c (remember_mouse_glyph): New function.
- (w32_mouse_position): Use it.
- (note_mouse_movement): If the mouse moved off the glyph, remember
- its new position.
-
- * w32term.h (struct w32_output): Correct spelling of x_compatible.
- (w32_display_info): Add mouse_face_overlay.
-
- * w32term.c (notice_overwritten_cursor): Renamed from
- note_overwritten_text_cursor. Rewritten to take glyph widths into
- account.
- (x_y_to_hpos_vpos): Add parameter BUFFER_ONLY_P.
- (fast_find_string_pos): New function.
- (fast_find_position): Return the correct vpos. Add parameter
- STOP. In the final row, stop before glyphs having STOP as object.
- Don't consider glyphs that are not from a buffer.
- (fast_find_position) [0]: Add a presumably more correct version
- for after 21.1.
- (expose_window_tree, expose_frame): Don't compute intersections here.
- (expose_window): Do it here instead.
- (expose_window_tree, expose_window, expose_line): Return 1 when
- overwriting mouse-face.
- (expose_window): If W is the window currently being updated, mark
- the frame garbaged.
- (expose_frame): If mouse-face was overwritten, redo it.
- (x_use_underline_position_properties): New variable.
- (syms_of_xterm): DEFVAR_BOOL it.
- (x_draw_glyph_string): Add comment to use it in future.
- (x_draw_glyph_string): Restore clipping after drawing box.
- Fix a computation of the underline position.
- (w32_get_glyph_string_clip_rect): Minor cleanup.
- (x_fill_stretch_glyph_string): Remove an assertion.
- (x_produce_glyphs): Don't convert multibyte characters
- to unibyte characters in unibyte buffers.
- (cursor_in_mouse_face_p): New function.
- (x_draw_stretch_glyph_string): Use it to choose a different GC
- when drawing a cursor within highlighted text. Don't draw
- background again if it has already been drawn.
- (x_draw_glyph_string_box): Don't draw a full-width
- box just because the glyph row's full_width_p flag is set.
- (x_draw_glyphs): Fix computation of rightmost x for
- full-width rows.
- (x_dump_glyph_string): Put in #if GLYPH_DEBUG.
- (w32_draw_relief_rect): Extend left shadow to the bottom and left;
- change bottom shadow accordingly. Some cleanup.
- (x_update_window_end): Handle overwritten mouse face
- also for tool bar windows.
- (show_mouse_face): Set the glyph row's mouse_face_p flag also when
- DRAW is DRAW_IMAGE_RAISED.
- (clear_mouse_face): Return 1 if text with mouse face was
- actually redrawn. Make the function static.
- Reset dpyinfo->mouse_face_overlay otherwise note_mouse_highlight might
- optimize away highlighting if we pass over that same overlay again.
- (note_mouse_highlight): Call mouse_face_overlay_overlaps
- to detect a case where we have to highlight a different region
- despite not having left the currently highlighted region.
- Set mouse_face_overlay in the x_display_info. Avoid changing the
- mouse pointer shape when show_mouse_face has already done it, or
- there is no need. Handle mouse-face and help-echo in strings.
- (glyph_rect): New function.
- (w32_mouse_position): Use it to raise the threshold for mouse
- movement event generation.
- (w32_initialize_display_info): Initialize the x_display_info's
- mouse_face_overlay.
- (w32_set_vertical_scroll_bar): Don't clear a zero height
- or width area.
- (w32_set_vertical_scroll_bar, x_scroll_bar_create): Don't configure
- a widget to zero height.
-
- * w32menu.c (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
- Protect unibyte strings created by replacing their multibyte
- equivalents in menu_items.
- (w32_menu_show): Don't overwrite an item's name with its key
- description in case the description is a multibyte string.
- (single_submenu): Some cleanup.
-
- * w32fns.c (x_laplace_read_row, x_laplace_write_row): Removed.
- (postprocess_image): New function.
- (lookup_image): Call it for all image types except PostScript.
- (x_kill_gs_process): Call postprocess_image.
- (tiff_error_handler, tiff_warning_handler): New functions.
- (tiff_load): Install them as handlers.
- (x_kill_gs_process): Recognize if someone has cleared the image
- cache under us.
- (valid_image_p): Protect better against invalid image
- specifications. Previous code could signal an error.
- (Fx_hide_tip, Fshow_tip): Doc fix.
- (Fv_max_tooltip_size): New variable.
- (syns_of_xfns): DEFVAR_LISP it.
- (Fx_show_tip): Add parameter TEXT. Set the tip frame's root
- window buffer to *tip* right after creating the frame. Set frame's
- window_width. Use a maximum tooltip size specified by
- Vx_max_tooltip_size, if that has valid contents.
- (compute_tip_xy): Add parameters WIDTH and HEIGHT.
- Make sure the tooltip is completely visible.
- (x_create_tip_frame): Set tooltip buffer's truncate-lines to nil.
- (Fx_create_frame): Adjust the frame's height for presence
- of the tool bar before calling x_figure_window_size.
- (x_set_tool_bar_lines): Clear the tool bar window's current matrix
- when the window gets smaller.
- (x_set_foreground_color): Set frame's cursor_pixel.
- (x_set_foreground_color, x_set_background_color): Cleaned up.
- (x_set_font): Handle case of x_new_fontset returning the same name
- as before, although there was a change in fontsets.
-
-2001-10-21 Miles Bader <miles@gnu.org>
-
- * data.c (Fplus, Fminus, Fmax, Ftimes, Fquo, Flogand, Flogior)
- (Flogxor): Add usage: string to doc string.
- * charset.c (Fstring): Likewise.
- * callproc.c (Fcall_process_region, Fcall_process): Likewise.
- * alloc.c (Fmake_byte_code, Fvector, Flist): Likewise.
-
-2001-10-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
-
- * buffer.c: Reindent DEFUNs and DEFVARs with doc: keywords.
-
- * alloc.c: Reindent DEFUNs with doc: keywords.
-
- * abbrev.c (Finsert_abbrev_table_description): Reindent.
-
- * frame.c: Change doc-string comments to `new style' [w/`doc:'
- keyword].
-
-See ChangeLog.9 for earlier changes.
+See ChangeLog.10 for earlier changes.
;; Local Variables:
;; coding: iso-2022-7bit
;; add-log-time-zone-rule: t
;; End:
- Copyright (C) 2001, 2002, 2003, 2004, 2005,
- 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -28717,4 +3056,4 @@ See ChangeLog.9 for earlier changes.
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
-;;; arch-tag: 5dcc435f-4038-4141-b3bf-5be51cd76bd4
+;; arch-tag: dfb6ad96-1550-4905-9e53-d2059ee84c40
diff --git a/src/ChangeLog.10 b/src/ChangeLog.10
new file mode 100644
index 00000000000..b7187263257
--- /dev/null
+++ b/src/ChangeLog.10
@@ -0,0 +1,27939 @@
+2007-04-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * Branch for 22.1.
+
+2007-04-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (redisplay_window): Use BEG_UNCHANGED and END_UNCHANGED
+ values of the actual window.
+
+2007-04-23 Richard Stallman <rms@gnu.org>
+
+ * process.c (Fstart_process): Doc fix.
+
+2007-04-23 Eli Zaretskii <eliz@gnu.org>
+
+ * process.c (Fstart_process): Doc fix.
+
+2007-04-22 Richard Stallman <rms@gnu.org>
+
+ * abbrev.c (Fdefine_abbrev): Doc fix.
+
+ * keymap.c (Fdefine_key): Minor doc fix.
+
+2007-04-21 Glenn Morris <rgm@gnu.org>
+
+ * keymap.c (Fdefine_key): Fix info ref in doc string.
+
+2007-04-20 Glenn Morris <rgm@gnu.org>
+
+ * sysdep.c (init_system_name): Don't accept localhost.localdomain.
+
+2007-04-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * minibuf.c (Fminibuffer_contents, Fminibuffer_contents_no_properties)
+ (Fminibuffer_completion_contents, Fdelete_minibuffer_contents):
+ Doc fixes.
+
+2007-04-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * dispnew.c (adjust_frame_glyphs_for_frame_redisplay):
+ Set garbaged flag in presence of window margins.
+ (showing_window_margins_p): New function.
+
+ * xdisp.c (cursor_row_p): Only end row on newline if it's a
+ display string. Suggested by Lennart Borgman.
+
+2007-04-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * alloc.c (mem_insert): Set min_heap_address and max_heap_address
+ if they are not yet initialized.
+
+2007-04-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (redisplay_window): When deciding whether or not to
+ recenter, don't use the reset values of BEG_UNCHANGED and
+ END_UNCHANGED.
+
+2007-04-13 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (Fkill_buffer): gcpro BUF during kill_buffer_processes
+ and check that buffer is still alive upon return.
+
+2007-04-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [!TARGET_API_MAC_CARBON]: Include Displays.h.
+ (mac_screen_config_changed): New variable.
+ (mac_handle_dm_notification, init_dm_notification_handler)
+ (mac_get_screen_info): New functions.
+ [MAC_OS8] (main): Call init_dm_notification_handler.
+ (mac_initialize) [MAC_OSX]: Likewise.
+ (XTread_socket): Call mac_get_screen_info if screen config changed.
+ (mac_initialized): Make static.
+ (mac_initialize_display_info): Remove function.
+ (mac_term_init): Call mac_get_screen_info. Add partial contents of
+ mac_initialize_display_info.
+
+2007-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (xrm_get_preference_database, Fmac_get_preference)
+ [TARGET_API_MAC_CARBON]: Use CFPreferencesAppSynchronize.
+
+ * macterm.c [TARGET_API_MAC_CARBON] (mac_post_mouse_moved_event):
+ Use GetGlobalMouse instead of GetMouse and LocalToGlobal.
+ (mac_initialize_display_info) [MAC_OSX]: Use CGRectZero.
+ (mac_initialize_display_info) [!MAC_OSX]: dpyinfo->height and
+ dpyinfo->width are those of whole screen.
+
+2007-04-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Don't decrement
+ glyph pointer before start of glyph row.
+
+2007-04-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * s/darwin.h (__restrict, struct kboard): Remove outdated workarounds.
+ (C_SWITCH_SYSTEM): Remove `-I../mac/src'.
+
+2007-04-09 Martin Rudalics <rudalics@gmx.at>
+
+ * indent.c (Fmove_to_column): Set next_boundary with correct start pt.
+
+2007-04-08 Richard Stallman <rms@gnu.org>
+
+ * xdisp.c (syms_of_xdisp) <message-log-max>: Default 100.
+
+2007-04-07 Chong Yidong <cyd@stupidchicken.com>
+
+ * editfns.c (Ftranspose_regions): Validate interval before setting
+ text properties.
+
+2007-04-03 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (main): Fix instructions for building Emacs for profiling.
+
+2007-04-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_update_menubar): Call g_list_next after moving
+ menu bar item.
+
+2007-04-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * print.c (Fprin1_to_string): Use macro SPECPDL_INDEX.
+
+2007-04-01 Chong Yidong <cyd@stupidchicken.com>
+
+ * keymap.c (Fcommand_remapping): New optional argument.
+ (where_is_internal): Use new keymaps argument.
+ (Fkey_binding): Caller changed.
+
+ * keyboard.c (command_loop_1): Caller changed.
+
+2007-03-31 Eli Zaretskii <eliz@gnu.org>
+
+ * window.c (Fget_lru_window): Doc fix.
+
+2007-03-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * undo.c (Fprimitive_undo): Give clearer error message when trying
+ to change text properties outside accessible part of buffer.
+
+2007-03-29 Kim F. Storm <storm@cua.dk>
+
+ * process.c (wait_reading_process_output) [HAVE_PTYS]:
+ When EIO happens, clear channel from descriptor masks before raising
+ SIGCHLD signal to avoid busy loop between read and sigchld_handler.
+ (sigchld_handler): Remove sleep (2007-03-11 & 2007-03-26 changes).
+
+2007-03-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (Fset_buffer_major_mode): Check that BUFFER is valid.
+
+ * process.c (Fformat_network_address): Return nil when the
+ argument vector contains invalid values.
+
+2007-03-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * gmalloc.c [HAVE_GTK_AND_PTHREAD]: Define USE_PTHREAD.
+ [USE_PTHREAD]: Include pthread.h.
+ (malloc_init_once_control, _malloc_mutex) [USE_PTHREAD]: New variables.
+ (malloc_initialize_1): New function created from __malloc_initialize.
+ (__malloc_initialize): Use it.
+ (LOCK, UNLOCK): New macros to make malloc etc. thread safe.
+ (_malloc_internal, _free_internal, _realloc_internal): Use them.
+
+ * lread.c (readchar): Extend BLOCK_INPUT block to ferror/clearerr.
+
+2007-03-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * process.c (Fformat_network_address): Make args array big enough
+ to format IPv6 addresses.
+
+2007-03-27 Glenn Morris <rgm@gnu.org>
+
+ * m/hp800.h: Restore HP-UX support (removed 2007-01-29).
+
+2007-03-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (Fx_display_mm_height, Fx_display_mm_width): Scale whole
+ screen size in pixels by millimeters per pixel of main display.
+
+ * macselect.c (get_scrap_target_type_list, x_own_selection):
+ Move assignments outside predicate macros.
+ (Vselection_converter_alist): Doc fix.
+
+ * macterm.c (create_text_encoding_info_alist): Move assignments
+ outside predicate macros.
+ (mac_initialize_display_info) [MAC_OSX]: dpyinfo->height and
+ dpyinfo->width are those of whole screen.
+
+2007-03-26 Sam Steingold <sds@gnu.org>
+
+ * process.c (sigchld_handler): Delay by 1ms instead of 1s to
+ alleviate sluggishness (the original problem is still fixed).
+
+2007-03-25 Kim F. Storm <storm@cua.dk>
+
+ * intervals.c (merge_properties): Use explicit loop instead of
+ Fplist_member to avoid QUIT. Don't use Fcdr.
+ (intervals_equal): Likewise. Rewrite loop to perform length check
+ on the fly rather than calling Flength. Don't use Fcar.
+
+2007-03-24 Eli Zaretskii <eliz@gnu.org>
+
+ * editfns.c (Fgoto_char): Doc fix.
+
+ * indent.c (Findent_to): Doc fix.
+
+2007-03-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * editfns.c (Ftranspose_regions): Use set_text_properties_1
+ instead of Fset_text_properties to avoid GC. Signal after change.
+
+2007-03-24 Eli Zaretskii <eliz@gnu.org>
+
+ * xfns.c (Fx_show_tip): Doc fix.
+
+ * macfns.c (Fx_show_tip): Doc fix.
+
+ * w32fns.c (Fx_show_tip): Doc fix.
+
+2007-03-23 Kim F. Storm <storm@cua.dk>
+
+ * intervals.c (merge_properties, intervals_equal):
+ Use Fplist_member instead of Fmemq to find properties.
+
+2007-03-23 Glenn Morris <rgm@gnu.org>
+
+ * unexhp9k800.c: Restore file with clarified legal status.
+ * m/sr2k.h: Restore since dependency unexhp9k800.c is restored.
+
+2007-03-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * widget.c (EmacsFrameSetCharSize): Catch X errors.
+
+2007-03-22 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Fcopy_file): Call barf_or_query_if_file_exists with
+ non-encoded file name.
+ (Frename_file): Likewise.
+ (Fadd_name_to_file): Likewise.
+ (Fmake_symbolic_link): Likewise.
+
+2007-03-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in (alloca.o, gtkutil.o): Depend on systime.h.
+ (dired.o, editfns.o, fileio.o, msdos.o): Depend on atimer.h.
+ (dosfns.o, window.o, fns.o, macselect.o): Depend on atimer.h and
+ systime.h.
+ (term.o, print.o, lread.o): Depend on blockinput.h, atimer.h, and
+ systime.h.
+ (macfns.o): Remove duplicate dependency on systime.h.
+
+ * dispnew.c (Fopen_termscript): Add BLOCK_INPUT around fclose.
+ (Fsend_string_to_terminal): Add BLOCK_INPUT around fwrite.
+
+ * fileio.c (do_auto_save_unwind): Add BLOCK_INPUT around fclose.
+ (Fdo_auto_save): Add BLOCK_INPUT around fwrite.
+
+ * keyboard.c (record_char): Add BLOCK_INPUT around fwrite.
+ (Fopen_dribble_file): Add BLOCK_INPUT around fclose.
+
+ * lread.c: Include blockinput.h.
+ (readchar, Fget_file_char): Add BLOCK_INPUT around getc.
+ (unreadchar): Add BLOCK_INPUT around ungetc.
+ (load_unwind): Add BLOCK_INPUT around fclose.
+
+ * print.c: Include blockinput.h.
+ (Fredirect_debugging_output): Add BLOCK_INPUT around fclose.
+
+ * process.c (Fmake_network_process) [HAVE_GETADDRINFO]:
+ Clear immediate_quit before calling freeaddrinfo.
+ Add BLOCK_INPUT around freeaddrinfo.
+
+ * term.c: Include blockinput.h.
+ (write_glyphs, insert_glyphs): Add BLOCK_INPUT around fwrite.
+
+2007-03-19 Richard Stallman <rms@gnu.org>
+
+ * keyboard.c (NUM_RECENT_KEYS): Bump up to 300.
+
+ * buffer.c (syms_of_buffer): Doc fix.
+
+2007-03-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.c (pbm_load): Signal error for invalid image size.
+
+2007-03-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (note_mouse_movement): Don't return immediately for
+ LeaveNotify case.
+
+ * macmenu.c (popup_activated_flag): New variable.
+ (x_activate_menubar, mac_menu_show): Set it during menu tracking.
+ (popup_activated): New function.
+
+ * xdisp.c (redisplay_internal, note_mouse_highlight):
+ Check popup_activated for MAC_OS.
+
+2007-03-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (syms_of_buffer) <buffer-display-table>: Doc fix.
+ Reported by Nikolaj Schumacher <n_schumacher@web.de>.
+
+2007-03-17 Richard Stallman <rms@gnu.org>
+
+ * dired.c (file_name_completion): gcpro NAME.
+
+2007-03-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (try_window_id): Increment matrix positions if the
+ buffer's byte count has increased, but not the character count.
+
+2007-03-12 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h: Declare check_obarray.
+
+ * process.c (Fdelete_process): Properly handle deletion of first
+ element of deleted_pid_list.
+ (create_process): Declare pid as pid_t.
+
+2007-03-12 Kim F. Storm <storm@cua.dk>
+
+ * process.c (sigchld_handler): Change type of pid to pid_t.
+ Scan deleted_pid_list explicitly to avoid using Fmember which don't
+ know about mark bits and make_fixnum_or_float which may malloc.
+ Reported by Andreas Schwab.
+
+ * keyboard.c (read_key_sequence): Store original event into keybuf
+ when replaying sequence with local keymap(s) from string.
+
+2007-03-12 Glenn Morris <rgm@gnu.org>
+
+ * editfns.c (Fdecode_time, Fencode_time): Doc fix ("daylight
+ savings" to "daylight saving").
+
+2007-03-11 Sam Steingold <sds@gnu.org>
+
+ * process.c (sigchld_handler): Sleep before wait3 to avoid a busyloop.
+
+2007-03-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (Fx_server_vendor): Change vendor string to "Apple Inc.".
+
+2007-03-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [USE_CARBON_EVENTS] (mac_handle_mouse_event):
+ Ignore mouse wheel movement on title bar or tool bar.
+
+2007-03-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (help_form_saved_window_configs): New var.
+ (read_char_help_form_unwind): New function.
+ (read_char): Don't restore window configuration if a mouse click
+ arrives while the help form is being displayed.
+
+2007-03-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Don't automatically select a new window
+ start for a contination line during mouse-click.
+
+2007-03-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Ignore buttons > 3 for the tool bar.
+
+2007-03-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * keymap.c (Fdescribe_buffer_bindings): Check that BUFFER is valid.
+
+2007-03-08 Richard Stallman <rms@gnu.org>
+
+ * keyboard.c (syms_of_keyboard): Doc fix.
+
+2007-03-08 Chong Yidong <cyd@stupidchicken.com>
+
+ * minibuf.c (Ftry_completion): Don't short circuit if
+ completion-ignore-case is non-nil.
+
+2007-03-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (mac_set_scroll_bar_width, mac_frame_parm_handlers):
+ Undo 2006-03-06 changes.
+
+ * macterm.c (XTset_vertical_scroll_bar) [MAC_OSX]: Don't show scroll
+ bar if its width is smaller than that of Aqua small scroll bar.
+
+2007-03-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuf.c (read_minibuf): Bind inhibit-read-only a bit longer so as
+ to handle correctly prompts with read-only property.
+
+2007-03-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * sound.c (wav_play): Check header->data_length to see how much we
+ shall read.
+ (alsa_period_size): Convert ALSA period size in frames to bytes.
+ (alsa_write): Return if frames is zero.
+
+2007-03-06 Kenichi Handa <handa@m17n.org>
+
+ * xselect.c (Vselection_coding_system): Documentation improved.
+
+2007-03-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (x_scroll_bar_create, XTread_socket): Replace #if
+ USE_TOOLKIT_SCROLL_BARS with #ifdef USE_TOOLKIT_SCROLL_BARS.
+ (x_set_window_size): Call SET_FRAME_GARBAGED. Clear window if
+ internal border width has changed.
+
+ * macterm.h (struct mac_output): New member `internal_border_width'.
+
+2007-03-04 Richard Stallman <rms@gnu.org>
+
+ * window.c (Fdisplay_buffer): Doc fix.
+
+2007-03-03 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in: Don't clear out LIB_X11_LIB, since XFT_LIBS does
+ not include -lX11 on Solaris.
+
+2007-03-02 Stuart D. Herring <herring@lanl.gov>
+
+ * keymap.c (Fkey_binding): Don't consider one-element lists as events.
+
+2007-03-01 Kenichi Handa <handa@m17n.org>
+
+ * process.c (send_process_object): Check the process status and
+ signal an error if something is wrong.
+
+2007-02-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * insdel.c (Fcombine_after_change_execute): Return nil if
+ combine_after_change_buffer has been invalidated.
+
+2007-02-25 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * m/xtensa.h: New file.
+
+2007-02-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * .gdbinit (xprintstr): Ensure GDB (> 6.6) prints symbol name
+ as strings and not character arrays.
+
+2007-02-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_drag)
+ (x_set_toolkit_scroll_bar_thumb): Add bar->min_handle as margin to
+ scroll bar handle size in order to avoid `scroll backward' problem.
+ (x_scroll_bar_create, XTset_vertical_scroll_bar)
+ [USE_TOOLKIT_SCROLL_BARS]: Initialize bar->min_handle.
+
+ * macterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
+ New member `min_handle'.
+
+2007-02-23 Kim F. Storm <storm@cua.dk>
+
+ * print.c (print): Reset print_number_index if Vprint_number_table
+ is nil.
+
+2007-02-23 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (stat, get_long_basename, is_unc_volume): Use _mbspbrk
+ instead of strpbrk.
+
+2007-02-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (mac_menu_show): Call unbind_to early. Use variable
+ `menu_item_selection' as in W32 version.
+ [TARGET_API_MAC_CARBON] (mac_handle_dialog_event): Add explicit
+ braces to avoid ambiguous `else'.
+
+ * macterm.c (mac_display_info_for_display): Remove function.
+ (mac_flush_display_optional) [USE_CG_DRAWING]: New function.
+ (x_redisplay_interface) [USE_CG_DRAWING]: Set it as handler for
+ flush_display_optional.
+ [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_press):
+ New argument MOUSE_POS. All uses changed. Set bar->dragging to
+ negative integer if scroll bar handle is pressed.
+ [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_release):
+ Negative bar->dragging means scroll bar handle is not dragged.
+ [USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_handle_drag): Get initial
+ offset of scroll bar handle from negative bar->dragging.
+ (XTread_socket) [USE_TOOLKIT_SCROLL_BARS]: Modifiers for scroll
+ bar click is compared against mapped one. Set down/up_modifier
+ for scroll bar click event with control key.
+
+ * macterm.h (x_display_info_for_display): Remove extern.
+ (SCROLL_BAR_UNPACK, SET_SCROLL_BAR_CONTROL_HANDLE): Don't limit
+ value to be unpacked to 32-bit on LP64 model.
+
+2007-02-23 Kenichi Handa <handa@m17n.org>
+
+ * process.c (send_process_object_unwind): New function.
+ (send_process_object): New function.
+ (Fprocess_send_region): Call send_process_object.
+ (Fprocess_send_string): Likewise.
+
+2007-02-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (w32_menu_show): Mark the frame's menu as inactive
+ when popup menu finishes.
+
+ * w32fns.c (menubar_in_use): New flag.
+ (w32_wnd_proc) <WM_INITMENU, WM_EXITMENULOOP, WM_TIMER, WM_COMMAND>:
+ Use it.
+
+ * w32menu.c (Fx_popup_menu): Don't free menu strings here.
+ (w32_menu_show): Do it here instead.
+
+ * w32fns.c (w32_wnd_proc) <WM_INITMENU>: Set menubar_active frame
+ parameter.
+
+ * w32menu.c (current_popup_menu): Make available globally.
+ (menubar_selection_callback): Free menu strings before pushing the
+ menu event into the keyboard buffer. Remove menu_command_in_progress.
+
+ * w32fns.c (current_popup_menu): Use from w32menu.c.
+ (w32_wnd_proc) <WM_EXITMENULOOP, WM_TIMER>: Use menubar_active
+ and current_popup_menu to determine whether a menubar menu has
+ been cancelled.
+
+ * w32term.h (w32_output): Remove menu_command_in_progress.
+
+2007-02-22 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (update_frame, update_single_window): Set force_p here if
+ redisplay_dont_pause is set or Vredisplay_preemption_period is nil...
+ (update_window, update_frame_1): ... instead of here.
+ (update_text_area): Clear mouse face on header lines.
+
+2007-02-21 Kim F. Storm <storm@cua.dk>
+
+ * minibuf.c (Fassoc_string): Doc fix. Allow symbol for KEY too.
+
+2007-02-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (WINDOW_RESOURCE, TERM_WINDOW_RESOURCE): Remove macros.
+ [USE_MAC_TSM] (mac_handle_text_input_event): Remove unused variable
+ `mapped_modifiers'.
+ (XTread_socket) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1020]: Use Keyboard
+ Layout Services routines to get current Unicode keyboard layout.
+
+2007-02-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * frame.c (x_set_screen_gamma): Apply gamma value to the frame's
+ bgcolor.
+
+2007-02-19 Kim F. Storm <storm@cua.dk>
+
+ * minibuf.c (Fassoc_string): Allow symbols as keys.
+
+ * w32term.c (w32_set_scroll_bar_thumb): Don't resize scroll-bar
+ handle while dragging, except when we get close to eob.
+ Fix position and size calculations so we don't scroll backwards
+ just by clicking on the handle.
+
+2007-02-17 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in (${emacsapp}Contents/Resources/Emacs.rsrc)
+ [HAVE_CARBON]: Remove target.
+ (macosx-app) [HAVE_CARBON]: Don't depend on it.
+
+2007-02-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * callproc.c (syms_of_callproc) <doc-directory>:
+ <configure-info-directory>:
+ (Fgetenv_internal): Fix typos in docstrings.
+
+ * doc.c (Fsubstitute_command_keys): Fix typo in docstring.
+
+2007-02-16 Andreas Schwab <schwab@suse.de>
+
+ * frame.c (Fmodify_frame_parameters): Return a value.
+
+ * editfns.c (Fformat): Add support for '+' flag.
+ * doprnt.c (doprnt1): Likewise. Fix overflow checking.
+
+2007-02-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * s/umips.h: Unused file removed.
+
+2007-02-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * xfaces.c (Fcolor_distance): Don't continue checking a color for
+ errors after it has been correctly parsed as an RGB list.
+
+2007-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (do_ewmh_fullscreen): Also check for _NET_WM_STATE_FULLSCREEN.
+
+2007-02-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (Fx_focus_frame): Move current process to foreground if
+ it is not.
+ [TARGET_API_MAC_CARBON] (Fx_file_dialog): Replace #if MAC_OSX with
+ #ifdef MAC_OSX.
+ (Fmac_set_font_panel_visible_p) [USE_MAC_FONT_PANEL]: Rename from
+ Fmac_set_font_panel_visibility. All uses changed. Rename argument
+ VISIBLE to FLAG.
+
+ * macterm.c (MakeMeTheFrontProcess) [MAC_OSX]: Remove function.
+ (mac_initialize) [MAC_OSX]: Call SetFrontProcess instead of
+ MakeMeTheFrontProcess.
+
+2007-02-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * frame.c (x_set_screen_gamma): Clear face cache.
+
+2007-02-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (Fgenerate_new_buffer_name, Fbuffer_modified_tick):
+ Reflow docstrings.
+
+2007-02-10 Eli Zaretskii <eliz@gnu.org>
+
+ * window.c (Fwindow_height, Fwindow_hscroll)
+ (Fwindow_redisplay_end_trigger, Fwindow_point, Fwindow_start)
+ (Fwindow_end, Fwindow_display_table, Fwindow_text_height):
+ Document the effect of WINDOW arg being nil.
+
+2007-02-08 Kim F. Storm <storm@cua.dk>
+
+ * minibuf.c (read_minibuf): Fix 2007-01-30 change.
+ Use Qlambda as interim value of Vminibuffer_completing_file_name.
+ (Fcompleting_read): Use non-filename maps if value is Qlambda (or Qnil).
+ (syms_of_minibuf) <minibuffer-completing-file-name>: Document lambda.
+
+2007-02-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in ($(TRES)): Use literal "../nt/emacs.rc" instead
+ of $(ALL_DEPS).
+
+2007-02-07 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in ($(TRES)): Depend on stamp_BLD, since $(TRES) is
+ put into $(BLD).
+
+2007-02-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * frame.c (Fmodify_frame_parameters): Don't bind
+ Qinhibit_default_face_x_resources, which has no effect.
+ (Qinhibit_default_face_x_resources): Symbol deleted.
+
+2007-02-03 Eli Zaretskii <eliz@gnu.org>
+
+ * indent.c (Fmove_to_column): Document that the argument COLUMN is
+ taken from prefix numeric argument.
+
+2007-02-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * lread.c (syms_of_lread) <load-history>: Doc fix.
+
+2007-01-29 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> (tiny change)
+
+ * xterm.c [!USE_TOOLKIT_SCROLL_BARS] (x_scroll_bar_expose):
+ Use the foreground color of the scroll-bar face when drawing
+ the scroll-bar's border.
+
+2007-02-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (do_ewmh_fullscreen): Check that what != NULL before
+ calling wm_supports.
+
+2007-02-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * lread.c (syms_of_lread) <user-init-file>: Doc fix.
+ Wording by Eli Zaretskii.
+
+2007-01-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Initialize h/vmargin to 0.
+
+2007-01-30 Richard Stallman <rms@gnu.org>
+
+ * minibuf.c (read_minibuf):
+ Save and clear Vminibuffer_completing_file_name.
+ (read_minibuf_unwind): Restore it.
+ (Vminibuffer_completion_table, Qminibuffer_completion_table)
+ (Vminibuffer_completion_predicate, Qminibuffer_completion_predicate)
+ (Vminibuffer_completion_confirm, Qminibuffer_completion_confirm)
+ (Vminibuffer_completing_file_name): Definitions moved up.
+
+2007-01-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * m/hp800.h: Restore, removing HP-UX support.
+
+2007-01-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * Makefile.in: Use a variable, XFT_LIBS, instead #define LIB_X11_LIB.
+
+2007-01-28 Richard Stallman <rms@gnu.org>
+
+ * minibuf.c (Ftry_completion, Fall_completions)
+ (Fcompleting_read, Ftest_completion):
+ Rename arg ALIST or TABLE to COLLECTION.
+
+2007-01-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * unexhp9k800.c: Remove due to lack of legal papers.
+
+ * m/sr2k.h, m/hp800.h: Remove due to dependence on above.
+
+2007-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * keyboard.c (Fthis_command_keys, Fthis_command_keys_vector): Doc fix.
+
+ * minibuf.c (Fcompleting_read): Doc fix.
+
+2007-01-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_initialize): Call XftInit if HAVE_XFT.
+
+ * Makefile.in: Use XFT_LIBS if defined.
+
+2007-01-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Use
+ BLOCK_INPUT/UNBLOCK_INPUT.
+
+ * blockinput.h (interrupt_input_blocked): Declare volatile.
+
+ * keyboard.c (interrupt_input_blocked): Declare volatile.
+
+ * syssignal.h (SIGNAL_THREAD_CHECK): Use pthread_equal.
+
+2007-01-24 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (describe_map): Don't consider prefix keys to be shadowed.
+
+2007-01-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * editfns.c (Finsert_char): Doc fix.
+ (Fget_internal_run_time, Fdecode_time): Fix typos in docstrings.
+
+2007-01-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macselect.c [TARGET_API_MAC_CARBON] (mac_do_receive_drag):
+ Don't pass keyboard modifiers to mac_store_drag_event, but put
+ them as kEventParamKeyModifiers Apple event parameter.
+
+2007-01-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (try_window): Revert previous change.
+
+ * dispnew.c (update_text_area): Revert 2006-09-17 change.
+ Always redraw non-mode-line rows with mouse-face.
+
+2007-01-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (try_window): Clear mouse-face highlights first.
+
+ * window.c (set_window_buffer): Revert 2006-11-22 change.
+
+2007-01-20 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit (ppt, xtype, xmisctype, xint, xptr, xmarker, xframe)
+ (xbuffer, xcons, xcar, xcdr): Fix doc strings.
+
+2007-01-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (read_key_sequence): Extract local map only if the
+ given position is in an accessible buffer region.
+
+2007-01-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * .gdbinit: Reformat documentation so that first sentence
+ displays properly with "help user-defined" (like apropos).
+
+2007-01-18 Bruno Haible <bruno@clisp.org> (tiny change)
+
+ * epaths.in: Move PATH_DOC from local/info to local/share/info.
+
+2007-01-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (create_and_show_dialog) [TARGET_API_MAC_CARBON]:
+ Create movable modal window instead of movable alert window.
+ (create_and_show_dialog) [!MAC_OSX]: Use DeactivateControl instead
+ of DisableControl.
+
+ * macselect.c (Fmac_resume_apple_event): Set error number when
+ descriptor type of reply is non-null.
+
+2007-01-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (create_and_show_dialog) [TARGET_API_MAC_CARBON]:
+ Use DisableControl for disabled items. Set default button to first
+ enabled one. Use icon of application in execution.
+
+2007-01-13 Eli Zaretskii <eliz@gnu.org>
+
+ * process.c (Fdelete_process, Fprocess_id, sigchld_handler):
+ Copy PID into EMACS_INT to avoid GCC warnings.
+
+ * fns.c (maybe_resize_hash_table): Copy new size of hash table
+ into EMACS_INT to avoid GCC warnings.
+
+ * editfns.c (Fuser_uid, Fuser_real_uid): Copy values returned by
+ geteuid and getuid into EMACS_INT to avoid GCC warnings.
+
+ * dired.c (Ffile_attributes): Fix last change.
+
+2007-01-12 Eli Zaretskii <eliz@gnu.org>
+
+ * dired.c (Ffile_attributes): Copy some members of `struct stat'
+ into int's to avoid GCC warnings about limited range of short in
+ arguments to FIXNUM_OVERFLOW_P.
+
+2007-01-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (HAVE_DIALOGS): Define if TARGET_API_MAC_CARBON.
+ (mac_handle_dialog_event, install_dialog_event_handler)
+ (create_and_show_dialog) [TARGET_API_MAC_CARBON]: New functions.
+ (DIALOG_LEFT_MARGIN, DIALOG_TOP_MARGIN, DIALOG_RIGHT_MARGIN)
+ (DIALOG_BOTTOM_MARGIN, DIALOG_MIN_INNER_WIDTH)
+ (DIALOG_MAX_INNER_WIDTH, DIALOG_BUTTON_BUTTON_HORIZONTAL_SPACE)
+ (DIALOG_BUTTON_BUTTON_VERTICAL_SPACE, DIALOG_BUTTON_MIN_WIDTH)
+ (DIALOG_TEXT_MIN_HEIGHT, DIALOG_TEXT_BUTTONS_VERTICAL_SPACE)
+ (DIALOG_ICON_WIDTH, DIALOG_ICON_HEIGHT, DIALOG_ICON_LEFT_MARGIN)
+ (DIALOG_ICON_TOP_MARGIN) [TARGET_API_MAC_CARBON]: New macros.
+ (mac_dialog) [TARGET_API_MAC_CARBON]: Remove function.
+ (mac_dialog_show) [TARGET_API_MAC_CARBON]: Use create_and_show_dialog.
+
+ * macterm.c (x_free_frame_resources) [USE_CG_DRAWING]:
+ Call mac_prepare_for_quickdraw.
+ (quit_char, make_ctrl_char) [TARGET_API_MAC_CARBON]: Move externs
+ outside #ifdef MAC_OSX.
+ (mac_quit_char_key_p) [TARGET_API_MAC_CARBON]: Move function
+ outside #ifdef MAC_OSX.
+ (mac_check_bundle) [MAC_OSX]: Remove unused function.
+
+ * macterm.h (mac_quit_char_key_p): Move extern outside #ifdef MAC_OSX.
+ (HOURGLASS_WIDTH, HOURGLASS_HEIGHT): Parenthesize definitions.
+
+2007-01-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Use pthread_equal,
+ block/unblock SIGIO.
+
+2007-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * editfns.c (Fformat): Allow integer-format to work with floats of size
+ larger than most-positive-fixnum (but still smaller than MAXINT).
+
+ * dired.c (Ffile_attributes): Use floats for large uids/gids.
+
+2007-01-09 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (syms_of_emacs) <path-separator>: Doc fix.
+
+2007-01-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * callproc.c (Fcall_process_region) [HAVE_MKSTEMP]: Add BLOCK_INPUT
+ around mkstemp.
+
+ * image.c (XDrawLine) [MAC_OS]: Remove macro.
+ (XCreateGC_pixmap) [!HAVE_NTGUI]: Likewise.
+ (x_disable_image) [!HAVE_NTGUI]: Use XCreateGC instead of
+ XCreateGC_pixmap.
+
+ * macgui.h (Display): Typedef to opaque type.
+
+ * macmenu.c (mac_dialog_modal_filter) [MAC_OSX]: New function.
+ (Fx_popup_dialog) [MAC_OSX]: Use standard alert if called from
+ Fmessage_box, Fyes_or_no_p, or Fy_or_n_p.
+ [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030] (menu_quit_handler):
+ Use mac_quit_char_key_p.
+
+ * macterm.c (XDrawLine): Rename from mac_draw_line_to_pixmap.
+ (XCreateGC): Change type of 2nd argument to void *.
+ (XFreeGC) [USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
+ Fix last change.
+ (mac_to_emacs_modifiers): Change return type to int.
+ [USE_CARBON_EVENTS] (mac_event_to_emacs_modifiers): Likewise.
+ (mac_mapped_modifiers): New function.
+ (XTread_socket): Use it.
+ [USE_TSM] (mac_handle_text_input_event): Likewise.
+ (do_window_update) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
+ (mac_quit_char_modifiers, mac_quit_char_keycode) [MAC_OSX]:
+ Remove variables.
+ (mac_determine_quit_char_modifiers, init_quit_char_handler)
+ [MAC_OSX]: Remove functions.
+ (make_ctrl_char) [MAC_OSX]: Add extern.
+ (mac_quit_char_key_p) [MAC_OSX]: New function.
+ (mac_initialize) [MAC_OSX]: Don't call init_quit_char_handler.
+
+ * macterm.h (FONT_MAX_WIDTH): Remove unused macro.
+ (XCreateGC): Change type in extern.
+ (XDrawLine): Rename from mac_draw_line_to_pixmap.
+ (mac_quit_char_key_p) [MAC_OSX]: Add extern.
+
+2007-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c (init_keyboard): Initialize interrupt_input_blocked and
+ interrupt_input_pending.
+
+ * xterm.h (x_display_info): New: net_supported_atoms,
+ nr_net_supported_atoms and net_supported_window.
+
+ * xterm.c (last_user_time): New variable.
+ (handle_one_xevent): Set last_user_time from events that have Time.
+ Set net_supported_window to 0 when reparented.
+ (wm_supports): New function.
+ (do_ewmh_fullscreen): Use wm_supports to check for _NET_WM_STATE.
+ (x_term_init): Initialize net_supported_atoms, nr_net_supported_atoms
+ and net_supported_window.
+
+2007-01-05 Kim F. Storm <storm@cua.dk>
+
+ * indent.c (Fvertical_motion): Fix it overshoot check for overlay
+ strings without embedded newlines immediately followed by newline.
+
+2007-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * editfns.c (Fformat_time_string, Fdecode_time, Fencode_time)
+ (Fcurrent_time_string, Fcurrent_time_zone): Add BLOCK_INPUT around
+ gmtime/localtime/emacs_memftimeu/mktime.
+
+ * mac.c (Fmac_set_file_creator): Use MAC_EMACS_CREATOR_CODE
+ instead of 'EMAx'.
+ [!MAC_OSX] (sys_open, sys_creat, sys_fopen): Likewise.
+
+ * macgui.h (struct _XGC) [USE_CG_DRAWING
+ && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: New members cg_fore_color
+ and cg_back_color.
+
+ * macmenu.c (Vshow_help_function) [TARGET_API_MAC_CARBON]: Add extern.
+ (restore_show_help_function, menu_target_item_handler)
+ [TARGET_API_MAC_CARBON]: New functions.
+ (install_menu_target_item_handler): New function.
+ (add_menu_item) [TARGET_API_MAC_CARBON]: Set help string as menu
+ item property.
+
+ * macterm.c (CG_SET_FILL_COLOR_MAYBE_WITH_CGCOLOR)
+ (CG_SET_FILL_COLOR_WITH_GC_FOREGROUND)
+ (CG_SET_FILL_COLOR_WITH_GC_BACKGROUND)
+ (CG_SET_STROKE_COLOR_MAYBE_WITH_CGCOLOR)
+ (CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND): New macros.
+ (mac_cg_color_space_rgb) [USE_CG_DRAWING]: New variable.
+ (mac_cg_color_black) [USE_CG_DRAWING
+ && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: New variable.
+ (init_cg_color) [USE_CG_DRAWING]: New function.
+ (mac_draw_line, mac_draw_rectangle) [USE_CG_DRAWING]: Use
+ CG_SET_STROKE_COLOR_WITH_GC_FOREGROUND instead of CG_SET_STROKE_COLOR.
+ (mac_erase_rectangle, mac_clear_window, mac_draw_cg_image)
+ (mac_fill_rectangle, mac_draw_image_string_cg) [USE_CG_DRAWING]:
+ Use CG_SET_FILL_COLOR_WITH_GC_FOREGROUND or
+ CG_SET_FILL_COLOR_WITH_GC_BACKGROUND instead of CG_SET_FILL_COLOR.
+ (mac_draw_string_common) [MAC_OSX && USE_ATSUI]: Likewise.
+ (XCreateGC, XFreeGC, XSetForeground, XSetBackground) [USE_CG_DRAWING
+ && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: Use gc->cg_fore_color and/or
+ gc->cg_back_color.
+ (install_drag_handler, remove_drag_handler): Make extern.
+ (install_menu_target_item_handler): Add extern.
+ (install_window_handler): Call install_menu_target_item_handler.
+ [MAC_OS8] (main): Use MAC_EMACS_CREATOR_CODE instead of 'EMAx'.
+ (mac_initialize) [USE_CG_DRAWING]: Call init_cg_color.
+
+ * macterm.h (MAC_EMACS_CREATOR_CODE): New enumerator.
+
+2007-01-04 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.c (Fwindow_end): Fix use of >= operator.
+
+2007-01-03 Richard Stallman <rms@gnu.org>
+
+ * window.c (Fwindow_end): Check BUF_OVERLAY_MODIFF like BUF_MODIFF.
+
+2007-01-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.h (xg_menu_item_cb_data_): Remove highlight_id and
+ unhighlight_id.
+
+ * gtkutil.c (menuitem_highlight_callback): Invoked widget is the
+ parent of the menu item. Get menu item widget from event.
+ (xg_create_one_menuitem, xg_update_menu_item): highlight_id and
+ unhighlight_id has been removed.
+ (create_menus): Connect enter/leave-notify-event to the menu instead
+ of individual items.
+
+2006-12-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Connect create-menu-proxy with
+ xg_tool_bar_menu_proxy.
+ (xg_tool_bar_menu_proxy): New function.
+ (xg_tool_bar_proxy_callback): New function.
+
+2006-12-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_button_cb): Save last modifier on widget.
+ (xg_tool_bar_callback): Remove check for button.
+ (update_frame_tool_bar): Put an event box in the tool bar and a button
+ in the event box. Attach enter/leave-notify-event to the event box.
+
+2006-12-30 Richard Stallman <rms@gnu.org>
+
+ * keymap.c (Fdefine_key): Doc fix.
+
+2006-12-29 Kim F. Storm <storm@cua.dk>
+
+ * frame.h (struct frame): New member minimize_tool_bar_window_p.
+
+ * xdisp.c (auto_resize_tool_bars_p): Replace with ...
+ (Vauto_resize_tool_bars): ... this.
+ (syms_of_xdisp): DEFVAR_LISP and initialize it. Update doc string
+ to describe new value `grow-only', and use of C-l.
+ (display_tool_bar_line): Only use default face for border below
+ toolbar if not grow-only (to get acceptable visual appearence).
+ Explicitly set visible_height for empty toolbar lines.
+ (redisplay_tool_bar): Handle `grow-only' setting. Check and clear
+ minimize_tool_bar_window_p flag.
+
+ * window.c (Frecenter): Set minimize_tool_bar_window_p flag
+ when called without arg to redraw with minimum toolbar height.
+ Update doc string.
+
+2006-12-29 Jason Rumney <jasonr@gnu.org>
+
+ * s/ms-w32.h (tzname): Do not define in msvc8.
+ (utime): Do not define in msvc8.
+
+ * regex.c (regerror): Change parameter name err_code.
+
+2006-12-26 Richard Stallman <rms@gnu.org>
+
+ * search.c (Fsearch_forward): Doc fix.
+
+ * callint.c (Finteractive): Doc fix.
+
+2006-12-25 Kim F. Storm <storm@cua.dk>
+
+ * s/ms-w32.h (BROKEN_DATAGRAM_SOCKETS): Define it.
+
+2006-12-23 Eli Zaretskii <eliz@gnu.org>
+
+ * keyboard.c (some_mouse_moved): Fix last change.
+
+2006-12-22 Eli Zaretskii <eliz@gnu.org>
+
+ * callproc.c (syms_of_callproc) <shell-file-name>: Doc fix.
+
+2006-12-22 Mark Davies <mark@mcs.vuw.ac.nz>
+
+ * m/amdx86-64.h, m/hp800.h: Add support for NetBSD.
+ * m/sh3el.h: New file.
+
+2006-12-22 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (emacs, temacs): Depend on stamp_BLD instead of
+ $(BLD).
+ ($(OBJ0) $(OBJ1) $(WIN32OBJ)): New dependency on stamp_BLD.
+ (bootstrap-temacs): Pass $(XMFLAGS) to sub-make.
+ ($(OBJ0) $(OBJ1) $(WIN32OBJ)): Add lastfile.$(O) and firstfile.$(O).
+ (clean): Delete stamp_BLD.
+
+2006-12-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (mac_update_title_bar) [TARGET_API_MAC_CARBON]:
+ Call mac_update_proxy_icon also when buffer modification flag changed.
+ [TARGET_API_MAC_CARBON] (mac_update_proxy_icon): Don't update alias,
+ but compare FSRef/FSSpec of resolved alias.
+
+2006-12-21 Kim F. Storm <storm@cua.dk>
+
+ * w32.c (_sys_wait_accept): Fix handle leak.
+
+2006-12-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * sound.c: Include <alsa/asoundlib.h> if ALSA_SUBDIR_INCLUDE is
+ defined.
+
+2006-12-20 Kim F. Storm <storm@cua.dk>
+
+ * s/ms-w32.h (BROKEN_NON_BLOCKING_CONNECT): Define it.
+
+2006-12-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * keyboard.c (syms_of_keyboard) <double-click-time>:
+ * mac.c (Fmac_code_convert_string):
+ * search.c (Fsearch_forward): Doc fixes.
+
+2006-12-19 Kim F. Storm <storm@cua.dk>
+
+ Rework 2006-12-04 change. A SIGUSR1 (SIGUSR2) signal now generates
+ a sigusr1 event instead of [signal usr1] sequence, and signal events
+ are now supposed to be handled via special-event-map.
+
+ * keyboard.c (kbd_buffer_store_event_hold): Undo 2006-12-04 change.
+ (make_lispy_event): Don't generate Qsignal prefix for code 0.
+ Abort if signal code is unknown.
+ (store_user_signal_events): Don't make Qsignal prefix (code 0).
+ (Qsignal): Move declaration back to process.c.
+ (syms_of_keyboard): Don't intern or staticpro it here.
+
+ * process.c (Qsignal): Declare here.
+ (syms_of_process): Intern or staticpro it.
+
+ * emacs.c (main): Rename user signals to sigusr1 and sigusr2.
+
+ * .gdbinit: Pass on SIGUSR1 and SIGUSR2 to Emacs.
+
+2006-12-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (syms_of_buffer) <buffer-display-table>:
+ <scroll-up-aggressively, scroll-down-aggressively>: Doc fixes.
+
+2006-12-17 Richard Stallman <rms@gnu.org>
+
+ * fileio.c (Fread_file_name_internal): Pass Vread_file_name_predicate
+ to Ffile_name_completion.
+
+ * dired.c (file_name_completion): New arg PREDICATE. Some cleanup.
+ (Ffile_name_completion): New arg PREDICATE.
+
+2006-12-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (Fkill_buffer): Doc fix.
+ (syms_of_buffer) <kill-buffer-query-functions>: Doc fix.
+
+2006-12-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * minibuf.c (Ftry_completion): Check that obarray buckets are symbols.
+
+2006-12-16 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (w32-window-exists-p): New function.
+ (syms_of_w32fns): Defsubr it.
+
+ * prefix-args.c [STDC_HEADERS]: Include stdlib.h.
+
+2006-12-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * minibuf.c (Ftry_completion): Use `check_obarray' if ALIST is a vector.
+
+2006-12-15 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (USAGE3): Clarify documentation of --color.
+
+2006-12-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (wakeup_from_rne_enabled_p) [TARGET_API_MAC_CARBON]:
+ New variable.
+ (ENABLE_WAKEUP_FROM_RNE, DISABLE_WAKEUP_FROM_RNE): New macros.
+ [!MAC_OSX] (select): Use them.
+ [MAC_OSX] (select_and_poll_event, sys_select): Likewise.
+ (mac_wakeup_from_rne) [TARGET_API_MAC_CARBON]: New function.
+
+ * macfns.c (mac_atsu_font_face_attributes) [USE_ATSUI]: Add extern.
+ (Fmac_atsu_font_face_attributes) [USE_ATSUI]: New function.
+ (syms_of_macfns) [USE_ATSUI]: Defsubr it.
+
+ * macselect.c [TARGET_API_MAC_CARBON] (mac_do_receive_drag):
+ Use mac_wakeup_from_rne instead of mac_post_mouse_moved_event.
+
+ * macterm.c (mac_query_char_extents) [USE_ATSUI]: Don't call
+ ATSUGetGlyphBounds if not necessary.
+ (Vmac_atsu_font_table) [USE_ATSUI]: Remove variable.
+ (syms_of_macterm) [USE_ATSUI]: Don't defvar it.
+ (fm_get_style_from_font, atsu_find_font_from_family_name)
+ (atsu_find_font_family_name, mac_atsu_font_face_attributes)
+ [USE_ATSUI]: New functions.
+ (init_font_name_table) [USE_ATSUI]: Use atsu_find_font_family_name.
+ (mac_load_query_font) [USE_ATSUI]: Use atsu_find_font_from_family_name.
+ Don't get metrics for Latin-1 right half characters.
+ (mac_load_query_font): Don't load font if space width is not positive.
+ [TARGET_API_MAC_CARBON] (mac_store_event_ref_as_apple_event):
+ Use mac_wakeup_from_rne instead of mac_post_mouse_moved_event.
+ (XTread_socket): Call SelectWindow when unfocused frame is clicked.
+
+ * macterm.h (mac_wakeup_from_rne) [TARGET_API_MAC_CARBON]: Add extern.
+
+2006-12-15 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (ignore_mouse_drag_p): New global var.
+ (some_mouse_moved): Return 0 if it is non-zero.
+ (make_lispy_event): Generate click event on mouse up if
+ ignore_mouse_drag_p is non-zero, even if mouse moved.
+ Clear ignore_mouse_drag_p on mouse down/up.
+
+ * xdisp.c (redisplay_window): Set ignore_mouse_drag_p if tool-bar
+ is resized to avoid generating a mouse drag event.
+
+2006-12-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32fns.c (w32_wnd_proc): Force non-tooltip frames to respect the
+ minimum tracking size. Remove non-working old hack to do the same.
+
+2006-12-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * emacs.c (handle_user_signal): Move function to keyboard.c.
+ (main): Use add_user_signal for SIGUSR1 and SIGUSR2.
+
+ * keyboard.c (make_lispy_event): Use find_user_signal_name.
+ (read_avail_input): Store pending user signal events.
+ (struct user_signal_info): New struct.
+ (user_signals): New variable.
+ (add_user_signal, store_user_signal_events)
+ (find_user_signal_name): New functions.
+ (handle_user_signal): Move function from emacs.c. Don't store
+ USER_SIGNAL_EVENT here, but increment number of pending signals.
+
+ * keyboard.h (add_user_signals): Add extern.
+
+2006-12-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (syms_of_buffer) <cursor-in-non-selected-windows>:
+ <default-scroll-up-aggressively, default-scroll-down-aggressively>:
+ <line-spacing, left-margin>: Doc fixes.
+
+ * xdisp.c (syms_of_xdisp) <mode-line-inverse-video>: Doc fix.
+
+2006-12-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (show_mouse_face): Never use text cursor in tool-bar.
+
+2006-12-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * abbrev.c (syms_of_abbrev) <last-abbrev-text>:
+ * buffer.c (syms_of_buffer) <default-major-mode>:
+ * keymap.c (Flookup_key):
+ * lread.c (Feval_buffer, Feval_region):
+ * macterm.c (syms_of_macterm) <x-use-underline-position-properties>:
+ <x-underline-at-descent-line, mac-emulate-three-button-mouse>:
+ * marker.c (Fmarker_insertion_type):
+ * minibuf.c (syms_of_minibuf) <minibuffer-completion-table>:
+ * msdos.c (syms_of_msdos) <delete-exited-processes>:
+ * w32term.c (syms_of_w32term) <x-use-underline-position-properties>:
+ <x-underline-at-descent-line>:
+ * xdisp.c (format-mode-line):
+ * xterm.c (syms_of_xterm) <x-use-underline-position-properties>:
+ <x-underline-at-descent-line>: Doc fixes.
+
+2006-12-10 Andreas Schwab <schwab@suse.de>
+
+ * systime.h (EMACS_GET_TIME): Remove check for
+ HAVE_STRUCT_TIMEZONE which is never defined.
+
+2006-12-10 Alan Mackenzie <acm@muc.de>
+
+ * syntax.c (Fpartial_parse_sexp): Correct Docco: Elt 8 of the
+ result is now neither the last elt nor optional for OLDSTATE.
+
+2006-12-09 Eli Zaretskii <eliz@gnu.org>
+
+ * process.c (Fsignal_process): Doc fix. Use XFLOAT_DATA to
+ extract the process ID from a Lisp float.
+
+2006-12-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * xterm.c (XTframe_raise_lower): Comment out _NET_ACTIVE_WINDOW code.
+
+2006-12-08 Eli Zaretskii <eliz@gnu.org>
+
+ * frame.h (PIX_TYPE): Redefine as `unsigned long', for 64-bit
+ platforms where long is 64-bit.
+
+ * msdos.h (PIX_TYPE): Redefine as `unsigned long'.
+
+2006-12-08 NAKAJI Hiroyuki <nakaji@jp.freebsd.org> (tiny change)
+
+ * m/amdx86-64.h: Add support for Solaris 10 on x86-64.
+
+2006-12-08 Kenichi Handa <handa@m17n.org>
+
+ * xterm.c (x_query_font): Use xstricmp instead off strcasecmp.
+
+2006-12-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs.c (syms_of_emacs) <system-type>: Doc fix.
+
+2006-12-07 Kim F. Storm <storm@cua.dk>
+
+ * process.c (parse_signal): Use xstricmp instead of strcasecmp.
+ (Fsignal_process): Don't use strncasecmp.
+
+2006-12-05 Glenn Morris <rgm@gnu.org>
+
+ * abbrev.c (Qforce): New Lisp_Object.
+ (Fdefine_abbrev): Do not overwrite non-system abbrevs with system
+ abbrevs, unless 'force is applied.
+ (syms_of_abbrev): Add Qforce.
+
+2006-12-04 Kim F. Storm <storm@cua.dk>
+
+ * process.c (parse_signal): Rename macro from handle_signal.
+ (Fsignal_process): Also accept lower-case variants of signal
+ names (to align with signal names generated by Emacs itself).
+
+ * emacs.c (handle_USR1_signal, handle_USR2_signal): Replace by...
+ (handle_user_signal): ... this, which generates two USER_SIGNAL_EVENTs
+ first with code == 0 [signal] and one with code == sig number.
+ (main): Use it as handler for SIGUR1 and SIGUSR2.
+
+ * keyboard.c (kbd_buffer_store_event_hold): Don't throw-on-input
+ if first event in [signal xxx] sequence.
+ (lispy_user_signals, Qusr1_signal, Qusr2_signal): Remove.
+ (syms_of_keyboard): Don't intern and staticpro them.
+ (Qsignal): Declare here.
+ (syms_of_keyboard): Intern and staticpro it.
+ (make_lispy_event): Use it. Intern symbols on the fly for other
+ USER_SIGNAL_EVENTs events.
+
+ * process.c (Qsignal): Declare extern.
+ (syms_of_process): Don't intern/staticpro it here.
+
+ * process.c (read_process_output): Abort if carryover < 0.
+
+2006-12-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * config.in: Regenerate.
+
+ * fileio.c [__NetBSD__]: Don't define `unix'.
+ (Funix_sync, syms_of_fileio): Use `#ifdef HAVE_SYNC' instead of
+ `#ifdef unix'.
+
+2006-12-04 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (version): New variable, set by configure.
+ (bootstrapclean, mostlyclean): Also remove emacs-${version}.
+
+2006-12-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Handle modifying a toolbar item
+ without an image.
+
+2006-12-01 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (Fw32_shell_execute): Doc fix.
+
+2006-11-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (move_it_to): Correctly count tab glyphs for continued
+ lines ending in tab.
+
+2006-11-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_raise_frame): Move setting of _NET_ACTIVE_WINDOW
+ property ...
+ (XTframe_raise_lower): ... to here.
+
+2006-11-30 Kenichi Handa <handa@m17n.org>
+
+ * regex.c (regex_compile): Fix previous change.
+
+2006-11-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * sound.c (Fplay_sound_internal): Remove spurious newline in docstring.
+
+2006-11-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * config.in: Regenerate.
+
+2006-11-28 Kenichi Handa <handa@m17n.org>
+
+ * regex.c (regex_compile): Don't call SET_LIST_BIT with a
+ multibyte character.
+
+2006-11-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * s/aix4-2.h: Undefine _NO_PROTO. Suggested by Joe Buehler.
+
+2006-11-27 Kim F. Storm <storm@cua.dk>
+
+ * window.c (set_window_buffer): Refactor recent changes.
+
+2006-11-27 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_msg_worker): Declare correctly.
+ (w32_initialize): Don't cast w32_msg_worker.
+
+ * w32fns.c (w32_msg_worker): Define as WINAPI and arg as void pointer.
+
+2006-11-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * m/amdx86-64.h: Look for standard libs in /usr/lib64 only if that
+ directory exists.
+
+2006-11-25 Eli Zaretskii <eliz@gnu.org>
+
+ * w16select.c (Fw16_set_clipboard_data): Fix the call to sit_for
+ as per the calling sequence change on 2006-07-11.
+
+2006-11-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * window.c (set_window_buffer): Use BLOCK_INPUT.
+
+2006-11-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * fns.c (substring_both): Add missing address operator.
+
+2006-11-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fns.c: Use AREF/ASIZE macros.
+ (concat): Provide the full ANSI prototype.
+
+2006-11-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (syms_of_buffer) <buffer-undo-list>: Doc fix.
+
+2006-11-23 William Smith <William.Smith@global360.com> (tiny change)
+
+ * strftime.c (HAVE_SYS__MBSTATE_T_H): Fix typo.
+
+2006-11-22 Alfred M. Szmidt <ams@gnu.org> (tiny change)
+
+ * s/openbsd.h (LD_SWITCH_SYSTEM): Remove /usr/pkg/lib and
+ /usr/pkg/lib from the library search path.
+ (LD_SWITCH_X_DEFAULT): New macro.
+
+2006-11-22 Chong Yidong <cyd@stupidchicken.com>
+
+ * window.c (set_window_buffer): Clear mouse highlight if it is in
+ this window.
+
+2006-11-21 Chong Yidong <cyd@stupidchicken.com>
+
+ * xfaces.c (realize_default_face): Check if the default font name
+ exists on this display before trying to use it.
+
+2006-11-21 Richard Stallman <rms@gnu.org>
+
+ * fileio.c: Break line before &&, not after.
+
+2006-11-20 Eli Zaretskii <eliz@gnu.org>
+
+ * fns.c (concat) [!__GNUC__]: Add prototype.
+
+2006-11-20 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Fread_file_name_internal): Use SBYTES (not SCHARS) to
+ check the tailing slash of a filename.
+
+2006-11-20 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp> (tiny change)
+
+ * indent.c (Fvertical_motion): Include composition in the case of
+ overshoot expected.
+
+2006-11-19 Andreas Schwab <schwab@gnu.org>
+
+ * xfaces.c (Fdisplay_supports_face_attributes_p): Initialize supports.
+
+ * xmenu.c (Fx_popup_menu): Initialize selection.
+
+2006-11-18 Andreas Schwab <schwab@suse.de>
+
+ * s/gnu-linux.h (GC_MARK_SECONDARY_STACK): Update call to mark_memory.
+
+2006-11-17 Tetsurou Okazaki <okazaki@be.to> (tiny change)
+
+ * xterm.c (do_ewmh_fullscreen): Declare variable before XSETFRAME
+ to avoid gcc 2.96 error.
+
+2006-11-17 NIIMI Satoshi <sa2c@sa2c.net> (tiny change)
+
+ * search.c (simple_search): In the loop of backward searching,
+ check also the byte position against the limit.
+
+2006-11-14 Romain Francoise <romain@orebokech.com>
+
+ * minibuf.c (Fcompleting_read): Fix typo in docstring.
+
+2006-11-14 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (code_convert_region): Initialize coding->heading_ascii.
+ (decode_coding_string, code_convert_region): Likewise.
+
+2006-11-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * config.in: Regenerate.
+
+ * macfns.c (Fx_display_mm_height, Fx_display_mm_width)
+ [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+ && MAC_OS_X_VERSION_MIN_REQUIRED == 1020]: Check if
+ CGDisplayScreenSize is available.
+
+ * macmenu.c (menu_quit_handler, install_menu_quit_handler):
+ Replace `#ifdef HAVE_CANCELMENUTRACKING' with
+ `#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030'.
+ (install_menu_quit_handler) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+ && MAC_OS_X_VERSION_MIN_REQUIRED == 1020]: Check if
+ CancelMenuTracking is available.
+
+ * macterm.c [USE_CG_TEXT_DRAWING] (mac_draw_image_string_cg)
+ [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+ && MAC_OS_X_VERSION_MIN_REQUIRED == 1020]: Check if
+ CGContextShowGlyphsWithAdvances is available.
+
+2006-11-13 Jason Rumney <jasonr@gnu.org>
+
+ * s/ms-w32.h: Define HAVE_INET_SOCKETS.
+
+2006-11-13 Nozomu Ando <nand@mac.com>
+
+ * alloc.c (mark_memory): New argument OFFSET. All uses changed.
+ Fix address calculations for case END < START.
+ (mark_stack): Impose Lisp_Object alignment on jmp_buf.
+
+2006-11-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * coding.c (Fencode_sjis_char, Fencode_big5_char):
+ Improve argument/docstring consistency.
+
+ * editfns.c (Fmessage): Doc fixes.
+
+ * process.c (syms_of_process) <delete-exited-processes>: Doc fix.
+
+2006-11-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * xmenu.c (popup_activated): Define outside HAVE_MENUS.
+
+2006-11-12 Romain Francoise <romain@orebokech.com>
+
+ * xselect.c (selection-coding-system): Fix docstring.
+
+2006-11-12 Juanma Barranquero <lekktu@gmail.com>
+
+ * category.c (Fchar_category_set): Improve arg/docstring consistency.
+
+ * data.c (Flogxor):
+ * fns.c (Frandom, Flength, Fsafe_length, Fstring_bytes)
+ (Fstring_equal, Fcompare_strings, Fstring_lessp, Fcopy_sequence)
+ (Fstring_make_unibyte): Fix typos in docstrings.
+
+2006-11-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (struct x_display_info): Fix indentation.
+
+ * xterm.c (do_ewmh_fullscreen, XTfullscreen_hook): New functions.
+ (x_check_fullscreen): Call do_ewmh_fullscreen.
+ (x_initialize): Set fullscreen_hook to XTfullscreen_hook.
+
+ * frame.c (x_set_fullscreen): Call fullscreen_hook if set.
+
+ * term.c: Define fullscreen_hook.
+ (syms_of_term): Initialize fullscreen_hook to NULL.
+
+ * termhooks.h: Add fullscreen_hook.
+
+2006-11-08 Juanma Barranquero <lekktu@gmail.com>
+
+ * bytecode.c (Fbyte_code):
+ * data.c (Fmakunbound): Use SYMBOL_CONSTANT_P macro.
+
+2006-11-06 Juanma Barranquero <lekktu@gmail.com>
+
+ * lread.c (syms_of_lread):
+ * xsmfns.c (syms_of_xsmfns): Fix typo in docstring.
+
+2006-11-06 Martin Rudalics <rudalics@gmx.at>
+
+ * macmenu.c (Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
+
+ * w32menu.c (Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
+ Return nil if building without menus.
+
+ * xmenu.c (Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
+ Return nil if building without menus.
+
+2006-11-05 Mark Davies <mark@mcs.vuw.ac.nz> (tiny change)
+
+ * s/netbsd.h (POSIX_SIGNALS): Define.
+
+2006-11-05 Martin Rudalics <rudalics@gmx.at>
+
+ * macmenu.c (Fmenu_or_popup_active_p): New function.
+ (syms_of_macmenu): Defsubr it.
+
+ * w32menu.c (Fmenu_or_popup_active_p): New function.
+ (syms_of_w32menu): Defsubr it.
+ (popup_activated_flag, popup_activated): Remove.
+
+ * xdisp.c (note_mouse_highlight) [HAVE_NTGUI]: Don't bother to
+ check popup_activated.
+
+ * xmenu.c (Fmenu_or_popup_active_p): New function.
+ (syms_of_xmenu): Defsubr it.
+
+2006-11-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * unexmacosx.c (malloc_cookie): Remove unused variable.
+ (region_list_head, region_list_tail, lca, nlc, infile_lc_highest_addr)
+ (text_seg_lowest_offset, mh, curr_header_offset, infd, outfd)
+ (emacs_zone, data_segment_old_fileoff, data_segment_scp)
+ (num_unexec_regions, unexec_regions): Make variables static.
+ (print_regions, find_emacs_zone_regions): Make static.
+ (unexec_region_info): New typedef.
+ (unexec_regions): Change type from vm_range_t[] to unexec_region_info[].
+ All uses changed.
+ (unexec_regions_recorder): Subtract size of trailing null pages from
+ filesize. Show filesize.
+ (unexec_regions_merge): Don't merge if null pages of preceding region
+ is not too small. Use long format in printf.
+ (copy_segment, copy_data_segment): Show filesize.
+ (copy_data_segment): Write filesize bytes of region data.
+ Adjust filesize in segment command accordingly.
+ (dump_it): Use long format in printf.
+
+2006-11-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * dosfns.c (Finsert_startup_screen):
+ * fns.c (Ffeaturep, syms_of_fns):
+ * frame.c (syms_of_frame): Fix typos in docstrings.
+
+ * unexcw.c (unexec): Fix typo in output message.
+
+2006-11-04 Ralf Angeli <angeli@caeruleus.net>
+
+ * w32fns.c (w32_createwindow): Remove code for handling -geometry
+ command line option and `initial-frame-alist' which is superfluous
+ after the last change to `w32_createwindow'.
+
+2006-11-04 Slawomir Nowaczyk <slawek@cs.lth.se> (tiny change)
+
+ * w32proc.c (sys_wait): Only wait for processes with fd<0.
+ Others should be handled by sys_select instead. Fixes problems
+ with (progn (start-process "" nil "ls") (call-process "ls")).
+
+2006-11-04 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+
+ * xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
+ avoid gcc 2.95 error.
+
+2006-11-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * gtkutil.c (update_frame_tool_bar): If icon image is invalid and
+ wicon is null, insert an empty button.
+
+2006-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_raise_frame): Send _NET_ACTIVE_WINDOW when raising the
+ window.
+
+2006-11-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs.c (Fkill_emacs): Fix typo in docstring.
+
+2006-11-02 Nozomu Ando <nand@mac.com>
+
+ * unexmacosx.c (mach_header, segment_command, vm_region, section)
+ [_LP64]: New defines.
+ (VM_REGION_BASIC_INFO_COUNT, VM_REGION_BASIC_INFO, LC_SEGMENT)
+ (MH_MAGIC) [_LP64]: Redefine.
+ (delta): Remove variable.
+ (curr_file_offset, pagesize): New variables.
+ (ROUNDUP_TO_PAGE_BOUNDARY): New macro.
+ (data_segment_old_fileoff): Initialize explicitly.
+ (print_region, unexec_regions_recorder, print_load_command_name)
+ (copy_segment, copy_data_segment): Use long format in printf.
+ (MAX_UNEXEC_REGIONS): Increase to 400.
+ (unexec_regions_recorder): Don't warn too many regions here.
+ (find_emacs_zone_regions): Warn too many regions here.
+ (print_load_command_name) [_LP64]: Show correct load command name.
+ (copy_segment, copy_data_segment): Use variable `curr_file_offset'.
+ Show starting virtual memory address. Don't show ending file offset.
+ (copy_symtab, copy_dysymtab, copy_twolevelhints): New argument DELTA.
+ (dump_it): Use new local variable `linkedit_delta' and pass to them.
+ Error if trying to handle multiple DATA segments.
+ (unexec): Initialize variable `pagesize'.
+
+2006-11-01 Juanma Barranquero <lekktu@gmail.com>
+
+ * eval.c (Fcatch): Doc fix.
+
+2006-10-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c [MAC_OS] (image_load_qt_1, xpm_scan, xpm_make_color_table_v)
+ (xpm_put_color_table_v, xpm_get_color_table_v, xpm_make_color_table_h)
+ (xpm_put_color_table_h, xpm_get_color_table_h, xpm_str_to_color_key)
+ (xpm_load_image): Add const qualifier to arguments.
+ [MAC_OS] (xpm_color_key_strings): Make static const.
+
+ * mac.c (create_apple_event_from_event_ref)
+ (create_apple_event_from_drag_ref, skip_white_space, parse_comment)
+ (parse_include_file, parse_binding, parse_component)
+ (parse_resource_name, parse_value, parse_resource_line)
+ (xrm_merge_string_database, xrm_get_resource)
+ (xrm_get_preference_database): Add const qualifier to arguments.
+ [MAC_OSX] (sys_select): Make variable `context' static const.
+
+ * macfns.c (mac_color_map): Make static const.
+ (mac_color_map_lookup): Add const qualifier to arguments.
+
+ * macmenu.c (install_menu_quit_handler): Make variable `typesList'
+ static const.
+ (name_is_separator): Add const qualifier to arguments.
+
+ * macselect.c (init_service_handler): Make variable `specs' static
+ const.
+
+ * macterm.c (mac_create_bitmap_from_bitmap_data): Make variable
+ `swap_nibbles' static const.
+ (atsu_get_text_layout_with_text_ptr): Make variables `lengths',
+ `tags', `sizes', `values' static const.
+ (mac_draw_string_common): Make variables `context' static.
+ Make variables `tags', `sizes', and `values' static const.
+ (pcm_get_status, x_detect_focus_change, x_scroll_bar_handle_click)
+ (xlfdpat_create, xlfdpat_block_match_1, xlfdpat_match)
+ (mac_to_x_fontname, parse_x_font_name, add_mac_font_name)
+ (mac_do_list_fonts, is_fully_specified_xlfd, do_grow_window)
+ (mac_store_event_ref_as_apple_event, mac_make_rdb): Add const
+ qualifier to arguments.
+ (xlfd_scalable_fields, keycode_to_xkeysym_table)
+ (fn_keycode_to_keycode_table): Make static const.
+ (mac_load_query_font): Make variables `tags', `sizes', `values',
+ `types', and `selectors' static const.
+ (mac_handle_command_event, mac_handle_window_event):
+ Make variables `names' and `types' static const.
+ (init_command_handler, install_window_handler): Make variables
+ `specs*' static const.
+ (mac_handle_font_event, mac_handle_text_input_event)
+ (mac_store_service_event): Make variables `names' and `types'
+ const. Make variables `names_*' and `types_*' static const.
+
+ * macterm.h (create_apple_event_from_event_ref)
+ (create_apple_event_from_drag_ref, xrm_merge_string_database)
+ (xrm_get_resource, xrm_get_preference_database): Add const
+ qualifier to arguments in externs.
+
+2006-10-31 Kenichi Handa <handa@m17n.org>
+
+ * xfns.c (xic_create_xfontset): Fix previous change.
+
+2006-10-30 Chong Yidong <cyd@stupidchicken.com>
+
+ * s/openbsd.h (LD_SWITCH_SYSTEM): Add /usr/pkg/lib and
+ /usr/pkg/lib to library search path.
+
+2006-10-29 Mark Davies <mark@mcs.vuw.ac.nz> (tiny change)
+
+ * ralloc.c (relinquish): Use a long for excess space counter to
+ handle 64-bit case correctly.
+
+2006-10-29 Jeramey Crawford <jeramey@jeramey.com>
+
+ * m/amdx86-64.h: Add defines for OpenBSD x86-64.
+
+2006-10-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.c (Fdisplay_buffer): Fix typo in docstring.
+
+2006-10-27 Ben North <ben@redfrontdoor.org> (tiny change)
+
+ * w32term.c (x_draw_glyph_string_foreground): Set background mode
+ to TRANSPARENT before using overstrike to simulate bold faces.
+
+ * xfaces.c (best_matching_font): Fix logic to decide whether to
+ use overstriking to simulate bold-face (it was reversed).
+
+2006-10-23 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (remember_mouse_glyph): Do nothing if glyphs are not
+ initialized.
+
+ * keyboard.c (read_char): Make an element (t . EVENT) in
+ unread-command-events add EVENT to the current command's key sequence.
+ (syms_of_keyboard) <unread-command-events>: Update doc.
+
+2006-10-21 Richard Stallman <rms@gnu.org>
+
+ * minibuf.c (Vread_expression_map): Define here.
+ (Qread_expression_history): New variable.
+ (syms_of_minibuf): Initialize them.
+ (Feval_minibuffer): Use Vread_expression_map and
+ Qread_expression_history.
+
+2006-10-21 Kenichi Handa <handa@m17n.org>
+
+ * xfns.c (xic_create_fontsetname): If ADSTYLE field is not a wild
+ card, change it to "*".
+ (xic_create_xfontset): Call XCreateFontSet for each single
+ fontname in fontsetname.
+
+2006-10-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * callint.c (callint_message): Convert to a Lisp string.
+ (syms_of_callint): Initialize it.
+ (callint_message_size): Var deleted.
+ (Fcall_interactively): Use Fformat instead of doprnt to construct
+ prompt string.
+
+2006-10-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (display_mode_line): Clear enabled_p flag on mode-line row.
+
+2006-10-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (Vmac_carbon_version_string) [TARGET_API_MAC_CARBON]:
+ New variable.
+ (syms_of_macfns) [TARGET_API_MAC_CARBON]: Defvar it.
+
+2006-10-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (x_handle_selection_request): If the converted_selection
+ is nil or XCDR (converted_selection) is nil, decline the request.
+
+2006-10-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (get_utf8_string): Remove warnings with casts.
+ (xg_tool_bar_button_cb): Ditto.
+ (xg_tool_bar_callback): Ditto.
+
+2006-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Remove unused
+ variable ch_dim.
+ (adjust_frame_glyphs_for_window_redisplay): Likewise. Don't allocate
+ menu bar window matrices on non-X systems.
+
+ * mac.c (Fmac_get_preference, Fmac_code_convert_string): Add GCPROs.
+
+ * macterm.c (mac_query_char_extents): Don't return glyph ID if layout
+ adjustment is needed.
+ (mac_load_query_font): Check if width and height are positive.
+
+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.
+
+2006-09-30 Eli Zaretskii <eliz@gnu.org>
+
+ * config.in: Regenerated.
+
+2006-09-29 Juri Linkov <juri@jurta.org>
+
+ * buffer.c (syms_of_buffer): Reorder coding systems in the
+ docstring of %z to the real order displayed in the modeline.
+
+2006-09-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (Fdefine_key): Yet another int/Lisp_Object mixup (YAILOM).
+
+2006-09-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * indent.c (Fvertical_motion): Do move back if the Lisp string
+ being displayed contains newlines.
+
+2006-09-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_compute_glyph_string_overhangs, XLoadQueryFont)
+ [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw before QDTextBounds.
+
+2006-09-26 Kenichi Handa <handa@m17n.org>
+
+ * keymap.c (Fsingle_key_description): For an invalid char, return
+ "Invalid char code NNNNN".
+
+2006-09-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * callint.c (Fcall_interactively): Doc fix.
+
+2006-09-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (x_underline_at_descent_line): New variable.
+ (syms_of_macterm): DEFVAR_BOOL it.
+ (x_draw_glyph_string): Use it.
+ (XLoadQueryFont): Calculate min_bounds.descent and max_bounds.descent.
+
+2006-09-25 Kenichi Handa <handa@m17n.org>
+
+ * keymap.c (Fsingle_key_description): Return unique names for
+ generic characters.
+
+2006-09-24 Richard Stallman <rms@gnu.org>
+
+ * search.c (compile_pattern_1): Don't BLOCK_INPUT.
+
+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.
+
+ * w32proc.c (nl_langinfo): New function.
+
+ * w32fns.c (w32-pass-alt-to-system, w32-alt-is-meta)
+ (w32-pass-lwindow-to-system, w32-enable-num-lock)
+ (w32-enable-caps-lock, w32-scroll-lock-modifier)
+ (w32-lwindow-modifier, w32-rwindow-modifier)
+ (w32-apps-modifier, w32-mouse-button-tolerance): Doc fix.
+
+2006-09-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * minibuf.c (Finternal_complete_buffer, Fread_minibuffer)
+ (Fdisplay_completion_list): Fix typos in docstrings.
+
+2006-09-23 Romain Francoise <romain@orebokech.com>
+
+ * s/gnu-linux.h (MAIL_USE_FLOCK): Check for HAVE_LIBLOCKFILE too.
+
+2006-09-23 Kenichi Handa <handa@m17n.org>
+
+ * keymap.c (Fmap_keymap): Docstring mentions about generic character.
+
+2006-09-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * regex.c (analyse_first): For eight-bit-control chars, mark both the
+ char's value and its leading byte in the fastmap.
+ (re_search_2): When fast-scanning without translation, be careful to
+ check that we only match the leading byte of a multibyte char.
+
+ * charset.h (PREV_CHAR_BOUNDARY): Make it work from within a char's
+ byte sequence.
+ (AT_CHAR_BOUNDARY): New macro.
+
+2006-09-22 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (optimize_sub_char_table): Don't optimize a sub-char-table
+ whose default value is non-nil.
+
+2006-09-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_with_chooser): Only show C-l help for
+ Gtk+ versions < 2.10.
+
+ * xfns.c (syms_of_xfns): Fix typo in help text for
+ x-gtk-file-dialog-help-text.
+
+2006-09-21 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (Fmemq): Refill doc string.
+ (Fmemql): New defun, like memq but using eql.
+ (syms_of_fns): Defsubr it.
+
+2006-09-20 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (pos_visible_p): CHARPOS < 0 means return info for
+ last visible glyph in window.
+
+ * window.c (Fset_window_hscroll, Fwindow_line_height):
+ Doc fix. Use "off-window" instead of "off-screen".
+ (Fpos_visible_in_window_p): Likewise.
+ If POS is t, return info for last visible glyph in window.
+
+2006-09-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * search.c (struct regexp_cache): New entry syntax_table.
+ (compile_pattern_1): Set it.
+ (syms_of_search): Initialize it.
+ (compile_pattern): Require the syntax_table entry of the cache
+ element to match the current syntax table entry.
+
+2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Fwindow_end): Fix recent change.
+
+2006-09-19 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fset_window_hscroll, Fpos_visible_in_window_p):
+ Doc fix. Use "off-screen" instead of "invisible".
+ (Fwindow_line_height): Make line numbers 0-based. Make line arg
+ optional; if nil, use current cursor row. Handle text terminals
+ properly. Return nil if non-interactive or pseudo-window.
+
+2006-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c: Include alloca.h if available.
+ (Fkey_binding): Only use AREF after checking it's a vector.
+ Remove unused var `window'.
+
+2006-09-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * emacs.c (shut_down_emacs) [!subprocesses]: Don't set
+ inhibit_sentinels.
+
+ * mac.c [!MAC_OSX] (select): Fix argument name.
+
+ * macmenu.c (enum mac_menu_kind, min_menu_id): New enumerator and
+ menu ID for Apple menu.
+ (menubar_selection_callback): Remove function.
+ (find_and_call_menu_selection): New function from xmenu.c.
+ (x_activate_menubar): Use it.
+ (set_frame_menubar): Don't use f->output_data.mac->menubar_active.
+
+ * macterm.c (menubar_selection_callback): Remove extern.
+ (M_APPLE): Change to 234.
+ (do_apple_menu) [!TARGET_API_MAC_CARBON]: Make non-static.
+ (do_menu_choice): Remove function.
+
+ * macterm.h (struct mac_output): Remove member menubar_active.
+ (do_menu_choice): Remove extern.
+ (do_apple_menu) [!TARGET_API_MAC_CARBON]: Add extern.
+
+2006-09-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (syms_of_xfns): Rename x_gtk_show_chooser_help_text to
+ x_gtk_file_dialog_help_text.
+
+ * gtkutil.c (xg_uses_old_file_dialog): Rename x-use-old-gtk-file-dialog
+ to x-gtk-use-old-file-dialog.
+ (xg_get_file_with_chooser): Rename x_gtk_show_chooser_help_text to
+ x_gtk_file_dialog_help_text.
+
+ * xfns.c (syms_of_xfns): Ditto.
+
+2006-09-18 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fwindow_line_visibility): Remove.
+ (Fwindow_line_height): New defun replacing it.
+ (syms_of_window): Defsubr it.
+
+2006-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (SELECT_USE_CFSOCKET) [MAC_OSX]: Set default to 1.
+ [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]: Fix pointer type.
+
+2006-09-17 Jay Belanger <belanger@truman.edu>
+
+ * gmalloc.c:
+ * md5.c:
+ * md5.h:
+ * strftime.c: Replace "GNU Library General Public License" by "GNU
+ General Public License" throughout.
+
+2006-09-17 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (update_text_area): Undo 2000-07-18 change.
+ Always redrawing whole row if line has mouse-face in it causes
+ excessive flickering of the mode line.
+
+2006-09-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * search.c (clear_regexp_cache): New function.
+
+ * syntax.c (Fmodify_syntax_entry): Clear regexp cache.
+
+2006-09-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_with_chooser):
+ Check x-gtk-show-chooser-help-text before adding the help text.
+
+ * xfns.c (syms_of_xfns): New variable: x-gtk-show-chooser-help-text.
+
+ * gtkutil.c (get_utf8_string): Try harder to convert to UTF8. Gtk+
+ will simply crash if we fail.
+
+2006-09-16 Richard Stallman <rms@gnu.org>
+
+ * regex.c (re_compile_pattern): Set gl_state.current_syntax_table.
+
+2006-09-15 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fwindow_line_visibility): New defun for line-move-partial.
+ (syms_of_window): Defsubr it.
+ (Fwindow_end): Use window's buffer rather than current buffer.
+
+2006-09-15 Jay Belanger <belanger@truman.edu>
+
+ * COPYING: Replace "Library Public License" by "Lesser Public
+ License" throughout.
+
+2006-09-15 David Kastrup <dak@gnu.org>
+
+ * Makefile.in (keymap.o): Add "keymap.h" and "window.h" dependencies.
+
+ * keymap.c: include "window.h".
+ (Fcommand_remapping): New optional POSITION argument.
+ (Fkey_binding): New optional POSITION argument. Completely rework
+ handling of mouse clicks to get the same order of keymaps as
+ `read-key-sequence' and heed POSITION. Also temporarily switch
+ buffers to location of mouse click and back.
+
+ * keyboard.c (command_loop_1): Adjust call of `Fcommand_remapping'
+ for additional argument.
+ (parse_menu_item): Adjust call of `Fkey_binding' for additional
+ argument.
+ (read_key_sequence): If there are both `local-map' and `keymap'
+ text properties at some buffer position, heed both.
+
+ * keymap.h: Declare additional optional arguments of
+ `Fcommand_remapping' and `Fkey_binding'.
+
+2006-09-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * indent.c (Fcurrent_column, Findent_to): Fix typos in docstring.
+
+2006-09-14 Andreas Schwab <schwab@suse.de>
+
+ * print.c: Whitespace fixup.
+
+2006-09-14 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (produce_image_glyph): Automatically crop wide images at
+ right window edge so we can draw the cursor on the same row to
+ avoid confusing redisplay by placing the cursor outside the visible
+ window area.
+
+2006-09-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xterm.c (x_initialize): Don't install Xt event timer here.
+ (x_timeout_atimer_activated_flag): New var.
+ (x_activate_timeout_atimer): New function to install Xt timer.
+ (x_send_scroll_bar_event, x_process_timeouts): Use it.
+
+ * xmenu.c (x_menu_set_in_use, popup_activate_callback)
+ (create_and_show_popup_menu, create_and_show_dialog): Use it.
+
+ * xterm.h (x_activate_timeout_atimer): Add prototype.
+
+2006-09-13 Richard Stallman <rms@gnu.org>
+
+ * print.c (print_string): When printcharfun is t,
+ copy string contents and call strout on the copy.
+
+ * keyboard.c (read_char): If end_time specified, don't put the
+ event into this_command_keys.
+ (read_key_sequence): If Voverriding_terminal_local_map is specified,
+ don't check Voverriding_local_map at all.
+
+2006-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * textprop.c (Fnext_property_change, Fnext_single_property_change)
+ (Fprevious_property_change, Fprevious_single_property_change):
+ Avoid changing limit, so we can correctly catch the case where the
+ property is constant up to limit.
+
+2006-09-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (mac_window) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
+ * macterm.c (XTread_socket) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
+ Undo 2006-09-08 change.
+
+2006-09-11 Chong Yidong <cyd@stupidchicken.com>
+
+ * keymap.c (Fkey_binding): Use string position for string objects.
+
+2006-09-11 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (Fkey_binding): Fix last change.
+
+ * editfns.c (Fmessage): Recommend using (message "%s" ...).
+
+2006-09-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * keymap.c (Fkey_binding): Check for local keymap for mouse click
+ events.
+
+2006-09-10 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (Finput_pending_p): Check Vunread_input_method_events
+ and Vunread_post_input_method_events.
+
+ * dispnew.c (Fredisplay): Document return value.
+
+2006-09-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_close_connection): Call xg_display_close when USE_GTK.
+
+ * gtkutil.c (xg_display_close): Always change default display if needed,
+ check for < Gtk+ version 2.10 before calling gdk_display_close.
+
+2006-09-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [MAC_OSX] (sys_select): Check argument `nfds' more rigidly.
+ Make variable `ofds' static. Remove variable `maxfd'.
+
+ * macfns.c (Fx_file_dialog): Remove unused variable `f'.
+ Call check_mac.
+
+ * macmenu.c (Vmenu_updating_frame, syms_of_macmenu):
+ * w32menu.c (Vmenu_updating_frame, syms_of_w32menu):
+ Apply 2006-09-08 change for xmenu.c.
+
+ * xfns.c (Fx_file_dialog): Call check_x.
+
+2006-09-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_window_cursor_type): Use hollow cursor on
+ non-transparent images.
+
+2006-09-09 Eli Zaretskii <eliz@gnu.org>
+
+ * editfns.c (Fsystem_name): Mention "host" in the doc string.
+ (syms_of_editfns) <system-name>: Likewise.
+
+2006-09-08 Martin Rudalics <rudalics@gmx.at>
+
+ * xdisp.c (mouse_autoselect_window): Remove.
+ (Vmouse_autoselect_window): New variable. DEFVAR_LISP it.
+
+ * dispextern.h (mouse_autoselect_window): Remove extern.
+ (Vmouse_autoselect_window): Add extern.
+
+ * macterm.c (XTread_socket): Test Vmouse_autoselect_window
+ instead of mouse_autoselect_window.
+
+ * msdos.c (dos_rawgetc): Likewise.
+
+ * w32term.c (w32_read_socket): Likewise.
+
+ * xterm.c (handle_one_xevent): Likewise.
+
+2006-09-08 Richard Stallman <rms@gnu.org>
+
+ * xdisp.c (Vmenu_updating_frame): Define here.
+ (syms_of_xdisp): DEFVAR it here.
+ (update_menu_bar): Always return hooks_run.
+ Set Vmenu_updating_frame.
+
+ * xdisp.c (redisplay_internal): Test Vinhibit_redisplay
+ before calculating SELECTED_FRAME.
+
+ * xmenu.c (Vmenu_updating_frame): Don't define here.
+ (syms_of_xmenu): Don't DEFVAR it here.
+
+ * xterm.c (x_error_quitter): For BadName error, just return.
+
+ * eval.c (find_handler_clause): Give up on debugger if INPUT_BLOCKED_P.
+
+ * casetab.c (init_casetab_once): Call set_case_table.
+
+ * emacs.c (shut_down_emacs): Set inhibit_sentinels.
+
+ * process.c (inhibit_sentinels): New variable.
+ (exec_sentinel): Test inhibit_sentinels.
+ (init_process): Initialize it.
+
+ * process.h (inhibit_sentinels): Add decl.
+
+ * search.c (looking_at_1, string_match_1, search_command):
+ Make syntax table's canon table point to eqv table.
+
+2006-09-08 Andreas Schwab <schwab@suse.de>
+
+ * print.c (strout): Fix whitespace.
+
+2006-09-08 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (x_draw_glyph_string): Fix 2006-08-24 change.
+
+2006-09-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [!MAC_OSX]: Don't include keyboard.h.
+ [!MAC_OSX] (select): Try detect_input_pending before ReceiveNextEvent
+ in the same BLOCK_INPUT block, in case that some input has already
+ been read asynchronously. Pretend to be interrupted by a signal
+ if some input is available.
+ [MAC_OSX] (select_and_poll_event, sys_select): Likewise.
+ (SELECT_POLLING_PERIOD_USEC) [SELECT_USE_CFSOCKET]: Change to 100000.
+ Now used for ReceiveNextEvent timeout instead of select timeout.
+ (EVENT_CLASS_SOCK) [SELECT_USE_CFSOCKET]: Remove macro.
+ [SELECT_USE_CFSOCKET] (socket_callback): Add non-blocking connect
+ support. Quit event loop.
+ [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]: Add non-blocking
+ connect support. Reuse previously allocated CFRunLoopSource.
+ (Fmac_process_hi_command) [TARGET_API_MAC_CARBON]: New function.
+ (syms_of_mac) [TARGET_API_MAC_CARBON]: Defsubr it.
+
+ * macfns.c (mac_window) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]:
+ Specify kWindowAsyncDragAttribute.
+
+ * macterm.c (mac_handle_origin_change, mac_handle_size_change)
+ (mac_get_ideal_size): New functions.
+ (x_set_offset, x_set_window_size, x_make_frame_visible)
+ (do_zoom_window, mac_handle_window_event, XTread_socket): Use them.
+ (install_window_handler, mac_handle_window_event)
+ [USE_CARBON_EVENTS]: Handle kEventWindowGetIdealSize and
+ kEventWindowBoundsChanged.
+ (XTread_socket) [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: Don't call
+ DragWindow.
+
+2006-09-07 Andreas Schwab <schwab@suse.de>
+
+ * m/ibms390x.h (START_FILES, LIB_STANDARD): Override to
+ use lib64 instead of lib.
+
+2006-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * Makefile.in: Avoid double quotes when possible.
+
+2006-09-06 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Fformat_time_string): Use make_unibyte_string to make
+ a Lisp string from the result of emacs_memftimeu call.
+
+2006-09-06 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (pos_visible_p): Remove exact_mode_line_heights_p arg;
+ so calculate heights even when pos-visible-in-window-p is called
+ with partially = t. Don't overshoot last_visible_y in move_it_to.
+ Return row height and row number in new rowh and vpos args.
+ (cursor_row_fully_visible_p): First line is always "fully visible".
+ (try_window): Don't clear matrix if vscrolled.
+
+ * lisp.h (pos_visible_p): Update prototype.
+
+ * window.c (Fpos_visible_in_window_p): Adapt to new pos_visible_p.
+ Return row height and row number for partially visible rows.
+ Modify return value to a 2 element list for fully visible rows and
+ 6 for partially visible row.
+ (window_scroll_pixel_based): Use pos_visible_p directly instead of
+ Fpos_visible_in_window_p. Fix auto vscrolling for partially
+ visible lines. Only vscroll backwards if already vscrolled
+ forwards. Unconditionally vscroll forwards if PT is first (and
+ only) line. Set new window start instead of scrolling at
+ start/end of tall line.
+
+2006-09-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (install_window_handler, mac_handle_window_event)
+ [USE_CARBON_EVENTS]: Handle kEventWindowClose.
+ [USE_MAC_TSM] (mac_handle_text_input_event): Set modifiers for
+ ASCII keystroke event.
+
+2006-09-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_with_chooser): Don't mention specific keys in
+ the file chooser message. Only call gtk_file_chooser_set_current_name
+ when action is SAVE.
+
+2006-09-04 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.in: Double all single and back quotes in C-style
+ comments to help fontifier.
+
+2006-09-03 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (shutdown_handler): New function to exit cleanly on shutdown.
+ (globals_of_w32): Register it as a signal handler.
+
+2006-09-02 Juri Linkov <juri@jurta.org>
+
+ * marker.c (Fmarker_position): Doc fix.
+
+2006-09-03 Eli Zaretskii <eliz@gnu.org>
+
+ * window.c (syms_of_window) <split-height-threshold>:
+ <window-min-height, window-min-width>: Doc fix.
+
+2006-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_with_chooser): Change file chooser message
+ for writing files. Call gtk_file_chooser_set_current_name to keep
+ default filename.
+
+ * minibuf.c (Finternal_complete_buffer): Move after DEFUN:s it calls.
+
+2006-09-02 Jindrich Makovicka <makovick@gmail.com> (tiny change)
+
+ * fns.c (concat) [__GNUC__]: Declare with
+ `__attribute__((noinline))'.
+
+ * eval.c (apply1, call2) [__GNUC__]: Declare with
+ `__attribute__((noinline))'.
+
+2006-09-02 Stuart D. Herring <herring@lanl.gov>
+
+ * minibuf.c (Finternal_complete_buffer): New function.
+ (syms_of_minibuf): Defsubr it.
+ (Fread_buffer): Use it, instead of Vbuffer_alist.
+
+2006-09-01 Martin Rudalics <rudalics@gmx.at>
+
+ * buffer.h (struct buffer_text): New field chars_modiff.
+ (CHARS_MODIFF, BUF_CHARS_MODIFF): New macros.
+ * buffer.c (Fbuffer_chars_modified_tick): New function returning
+ value of BUF_CHARS_MODIFF.
+ (syms_of_buffer): Defsubr it.
+ (Fget_buffer_create): Initialize BUF_CHARS_MODIFF.
+ * insdel.c (modify_region): New argument preserve_chars_modiff.
+ Set CHARS_MODIFF to MODIFF provided preserve_chars_modiff is zero.
+ (insert_1_both, insert_from_string_1, insert_from_buffer_1)
+ (adjust_after_replace, adjust_after_replace_noundo)
+ (replace_range, replace_range_2, del_range_2): Reset CHARS_MODIFF.
+ * lisp.h (modify_region): Add fourth argument in extern.
+ * casefiddle.c (casify_region): Call modify_region with fourth
+ argument zero to assert that CHARS_MODIFF is updated.
+ * editfns.c (Fsubst_char_in_region, Ftranslate_region_internal)
+ (Ftranspose_regions): Likewise.
+ * textprop.c (Fadd_text_properties, Fset_text_properties)
+ (Fremove_text_properties, Fremove_list_of_text_properties):
+ Call modify_region with fourth argument 1 to avoid that
+ CHARS_MODIFF is updated.
+
+2006-08-31 Richard Stallman <rms@gnu.org>
+
+ * editfns.c (Fformat): Don't sign-extend for %o or %x.
+
+2006-08-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * indent.c (Fvertical_motion): Don't move back if we were
+ displaying a Lisp string, either.
+
+2006-08-28 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_window_cursor_type) [!HAVE_WINDOW_SYSTEM]:
+ Don't attempt to replace cursor on image glyphs.
+
+2006-08-28 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Fdetect_coding_region, Fdetect_coding_string):
+ Fix docstring about ISO-2022 control characters.
+
+2006-08-28 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_window_cursor_type): Replace BOX cursor on images
+ with a hollow box cursor if image is larger than 32x32 (or the default
+ frame font if that is bigger). Replace any other cursor on images
+ with hollow box cursor, as redisplay doesn't support bar and hbar
+ cursors on images.
+
+2006-08-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * alloc.c (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Undo previous
+ change. Move mutex lock/unlock operations inside BLOCK_INPUT.
+
+ * dired.c (directory_files_internal_unwind, directory_files_internal)
+ (file_name_completion): Add BLOCK_INPUT around opendir/closedir.
+
+ * image.c [MAC_OS] (image_load_qt_1): Use ComponentResult instead
+ of OSErr.
+
+ * keyboard.c (in_sighandler): Remove variable.
+ (Fcurrent_idle_time): Add missing `doc:'.
+ (input_available_signal, init_keyboard): Undo previous change.
+
+ * keyboard.h (in_sighandler): Remove extern.
+
+ * mac.c (create_apple_event_from_event_ref, select)
+ (Fmac_get_file_creator, Fmac_get_file_type, Fmac_set_file_creator)
+ (Fmac_set_file_type, cfstring_create_normalized)
+ (mac_get_system_locale, select_and_poll_event, sys_select):
+ Use OSStatus instead of OSErr.
+
+ * macfns.c [TARGET_API_MAC_CARBON] (mac_update_proxy_icon):
+ Don't use FRAME_FILE_NAME. Use (FS)UpdateAlias.
+ (Fx_create_frame): Apply 2006-07-03 for xfns.c.
+
+ * macselect.c (get_scrap_from_symbol, clear_scrap, put_scrap_string)
+ (put_scrap_private_timestamp, scrap_has_target_type, get_scrap_string)
+ (get_scrap_private_timestamp, get_scrap_target_type_list)
+ (x_own_selection, x_get_foreign_selection)
+ (Fx_disown_selection_internal, Fx_selection_owner_p)
+ (Fx_selection_exists_p): Use OSStatus instead of OSErr.
+
+ * macterm.c (mac_draw_string_common, mac_query_char_extents)
+ (x_iconify_frame, XLoadQueryFont, install_window_handler)
+ (mac_handle_command_event, init_command_handler, init_menu_bar):
+ Use OSStatus instead of OSErr.
+ (x_free_frame_resources) [TARGET_API_MAC_CARBON]: Don't use
+ FRAME_FILE_NAME.
+ (x_query_font): Apply 2006-08-04 change for xterm.c.
+ (Qhi_command): Rename from Qhicommand. All uses changed.
+
+ * macterm.h (struct mac_output) [TARGET_API_MAC_CARBON]: Remove member
+ file_name.
+ (FRAME_FILE_NAME): Remove macro.
+ (install_window_handler, create_apple_event_from_event_ref):
+ Return OSStatus instead of OSErr.
+
+2006-08-26 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (Fset_buffer_multibyte):
+ * editfns.c (Fcurrent_time, Fget_internal_run_time):
+ * macfns.c (Fxw_color_values):
+ * w32fns.c (Fxw_color_values):
+ * xfns.c (Fxw_color_values): Simplify; use list3.
+
+ * fileio.c (Fmake_directory_internal, Fdelete_directory)
+ (Fdelete_file): Simplify; use list1.
+ (Frename_file, Fadd_name_to_file, Fmake_symbolic_link):
+ Simplify; remove NO_ARG_ARRAY stuff, use list2.
+
+2006-08-25 Richard Stallman <rms@gnu.org>
+
+ * buffer.c (Fswitch_to_buffer): Fix previous change.
+
+2006-08-25 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (Fcurrent_idle_time): Simplify.
+
+2006-08-25 Richard Stallman <rms@gnu.org>
+
+ * fns.c (sxhash_string): Rotate properly; don't lose bits.
+
+2006-08-24 Francesc Rocher <francesc.rocher@gmail.com>
+
+ * xdisp.c (overline_margin): New variable.
+ (x_produce_glyphs): Use it.
+ (syms_of_xdisp): DEFVAR_INT it.
+
+ * xterm.c (x_underline_at_descent_line): New variable.
+ (syms_of_xterm): DEFVAR_BOOL it.
+ (x_draw_glyph_string): Use it.
+ Draw underline and overline up to the end of line if the face
+ extends to the end of line.
+
+ * macterm.c: Likewise.
+
+ * w32term.c: Likewise.
+
+2006-08-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * buffer.c (Fswitch_to_buffer): Move buffer to front of
+ buffer-alist if necessary.
+
+2006-08-22 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (update_tool_bar): Redisplay toolbar also when only
+ number of items changes.
+
+2006-08-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * buffer.c (Fset_buffer_multibyte): Record proper undo entry.
+
+2006-08-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c: Clarify difference between in_sighandler and
+ handling_signal.
+
+2006-08-21 Kim F. Storm <storm@cua.dk>
+
+ * macterm.c (x_draw_stretch_glyph_string):
+ * w32term.c (x_draw_stretch_glyph_string):
+ * xterm.c (x_draw_stretch_glyph_string): It is ok to draw a
+ stretch glyph in left marginal areas on header and mode lines.
+
+2006-08-21 Kenichi Handa <handa@m17n.org>
+
+ * keyboard.c (syms_of_keyboard): Docstring of
+ Vunread_post_input_method_events and Vunread_input_method_events
+ fixed.
+
+2006-08-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (show_help_echo): Preserve mouse movement flag if
+ tracking mouse.
+
+2006-08-20 Richard Stallman <rms@gnu.org>
+
+ * xfaces.c (load_pixmap): Add quotes in error message.
+
+ * keyboard.c (Fcurrent_idle_time): New function.
+ (syms_of_keyboard): defsubr it.
+
+2006-08-18 Nick Roberts <nickrob@snap.net.nz>
+
+ * window.c (Fset_window_fringes): Do nothing on a tty.
+ (Fwindow_fringes): Put ? operator after the line break.
+
+2006-08-16 Andreas Schwab <schwab@suse.de>
+
+ * print.c (debug_output_compilation_hack): Fix return type.
+
+2006-08-16 Richard Stallman <rms@gnu.org>
+
+ * print.c (debug_output_compilation_hack): New function.
+
+2006-08-16 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (choose_write_coding_system): Use LF for end-of-line
+ in auto-saving.
+
+2006-08-15 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (read_char): Don't change idle timer state at all if
+ end_time is supplied.
+
+2006-08-15 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (ONE_MORE_BYTE_CHECK_MULTIBYTE): New arg RET. If SRC
+ is exhausted, return with RET.
+ (detect_coding_emacs_mule, detect_coding_iso2022)
+ (detect_coding_sjis, detect_coding_big5, detect_coding_utf_8)
+ (detect_coding_utf_16, detect_coding_ccl): Adjusted for the above
+ change.
+
+2006-08-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (read_char): Don't reset idle timers if a time limit
+ is supplied.
+
+2006-08-14 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (pitx): Print iterator position.
+ Limit stack dump in case iterator is not initialized.
+
+2006-08-12 Eli Zaretskii <eliz@gnu.org>
+
+ * frame.c (Fmouse_position, Fmouse_pixel_position)
+ (Fset_mouse_position, Fset_mouse_pixel_position): Doc fix.
+
+2006-08-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (Fx_register_dnd_atom): New function.
+ (syms_of_xselect): Defsubr it.
+ (x_handle_dnd_message): Check that message_type is in
+ dpyinfo->x_dnd_atoms before generating lisp event.
+
+ * xterm.h (struct x_display_info): Add x_dnd_atoms* to keep track
+ of drag and drop Atoms.
+
+ * xterm.c (x_term_init): Initialize dpyinfo->x_dnd_atoms*.
+
+2006-08-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c: Define in_sighandler.
+ (input_available_signal): Set in_sighandler.
+ (init_keyboard): Initialize in_sighandler.
+
+ * keyboard.h: Declare in_sighandler.
+
+ * alloc.c (UNBLOCK_INPUT_ALLOC, BLOCK_INPUT_ALLOC): Use in_sighandler
+ to check if mutex should be locked or not.
+
+2006-08-09 Richard Stallman <rms@gnu.org>
+
+ * keyboard.c (keyremap_step): No-op if fkey->parent = nil.
+ (read_key_sequence): Always start fkey.start and fkey.end at 0,
+ and likewise for keytran.
+
+2006-08-09 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (syms_of_coding): Improve the docstring
+ of file-coding-system-alist.
+
+2006-08-07 Andreas Schwab <schwab@suse.de>
+
+ * puresize.h (BASE_PURESIZE): Increase to 1120000.
+
+2006-08-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * buffer.c (Vchange_major_mode_hook, Qchange_major_mode_hook): New vars.
+ (Fkill_all_local_variables): Use it.
+ (syms_of_buffer): Defvar it.
+
+2006-08-05 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (w32_valid_pointer_p): New function.
+
+ * w32.h: Add prototype for w32_valid_pointer_p.
+
+ * alloc.c: Include w32.h.
+ (valid_lisp_object_p) [WINDOWSNT]: Call w32_valid_pointer_p to do
+ the job.
+
+ * keyboard.c (kbd_buffer_get_event): Return Qnil when current time
+ is exactly equal to end_time, not only when it is past that.
+
+2006-08-04 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (read_char): Rebalance specpdl after receiving jump.
+
+ * process.c: Reapply 2006-08-01 change.
+
+2006-08-04 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (w32_query_font): Fix last change: use stricmp.
+
+2006-08-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * editfns.c (Fsubst_char_in_region): Redo the setup work after running
+ the before-change-functions since they may have altered the buffer.
+
+2006-08-04 Ralf Angeli <angeli@caeruleus.net>
+
+ * w32fns.c (w32_createwindow): Handle -geometry command line option
+ and the geometry settings in the Registry.
+
+2006-08-04 Kenichi Handa <handa@m17n.org>
+
+ * w32fns.c (w32_query_font): Compare names by ignoring case.
+
+ * xterm.c (x_query_font): Compare names by ignoring case.
+
+2006-08-03 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (w32_menu_show, w32_dialog_show): Call Fsignal to quit
+ when no option selected.
+
+2006-08-03 Chong Yidong <cyd@stupidchicken.com>
+
+ * process.c: Revert last change.
+
+2006-08-01 Kim F. Storm <storm@cua.dk>
+
+ * process.c (wait_reading_process_output_unwind): New function.
+ Restores waiting_for_user_input_p to saved value.
+ (wait_reading_process_output): Unwind protect waiting_for_user_input_p
+ instead of save/restore old value on stack.
+
+2006-07-30 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * editfns.c: Undo 2006-06-27 change.
+
+2006-07-29 Eli Zaretskii <eliz@gnu.org>
+
+ * coding.c (Ffind_operation_coding_system): Revert the change from
+ 2006-05-29.
+
+ * alloc.c [WINDOWSNT]: Include fcntl.h, to fix last change.
+
+2006-07-28 Richard Stallman <rms@gnu.org>
+
+ * xfaces.c (lookup_named_face, Fdisplay_supports_face_attributes_p):
+ Add conditional aborts for clarity.
+
+ * xdisp.c (update_menu_bar): New arg HOOKS_RUN. Callers changed.
+ Used to avoid running the hooks over and over for each frame.
+ (prepare_menu_bars): Pass value from update_menu_bar
+ as HOOKS_RUN of next call.
+
+ * keyboard.c (safe_run_hooks_1): Don't crash if Vrun_hooks is nil.
+
+2006-07-28 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (valid_pointer_p): New function (from valid_lisp_object_p).
+ (valid_lisp_object_p): Use it to check for valid SUBRP obj.
+
+2006-07-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * keyboard.c (read_char): New arg END_TIME specifying timeout.
+ All callers changed. Turn off echoing if END_TIME is non-NULL.
+ (kbd_buffer_get_event): New arg END_TIME.
+
+ * lread.c (read_filtered_event): New arg SECONDS to wait until.
+ (Fread_char, Fread_event, Fread_char_exclusive): New arg SECONDS.
+
+ * lisp.h: Update read-char, read-event, and read_filtered_event
+ prototypes.
+
+ * keyboard.h: Include systime.h. Update read_char prototype.
+
+2006-07-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * alloc.c (find_string_data_in_pure): New function.
+ (make_pure_string): Use it to reuse existing string data if possible.
+
+ * puresize.h (BASE_PURESIZE): Decrease to 1102000.
+
+2006-07-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (Fdefine_key): If the key binding definition looks like an
+ XEmacs-style key sequence, convert it to Emacs's format.
+
+2006-07-22 Ralf Angeli <angeli@caeruleus.net>
+
+ * w32fns.c (w32_createwindow): If `left' and/or `top' frame
+ parameters are bound to some values, use that instead of
+ CW_USEDEFAULT.
+
+2006-07-21 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (convert_time): Use explicit long double constants to
+ ensure long double arithmetics is used throughout.
+
+2006-07-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * alloc.c (pure_bytes_used_lisp, pure_bytes_used_non_lisp): New vars.
+ (init_alloc_once): Initialize them.
+ (pure_alloc): Allocate non-Lisp objects from the end of pure storage
+ without alignment.
+
+ * puresize.h (BASE_PURESIZE): Decrease to 1141000.
+
+2006-07-18 Francis Litterio <franl@world.std.com>
+
+ * w32term.c (x_calc_absolute_position): Fix frame positioning
+ with negative X/Y coordinates.
+
+2006-07-18 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * xterm.c (x_connection_closed, x_error_quitter): Mark as NO_RETURN.
+
+ * textprop.c (text_read_only): Likewise.
+
+ * lread.c (end_of_file_error): Likewise.
+
+ * lisp.h (circular_list_error, memory_full, buffer_memory_full):
+ Likewise.
+
+ * eval.c (unwind_to_catch): Likewise.
+
+ * buffer.h (buffer_slot_type_mismatch): Likewise.
+
+2006-07-18 Kim F. Storm <storm@cua.dk>
+
+ Cleanup Fsignal calls that never returns; now only use it for Qquit.
+
+ * eval.c (xsignal): New func. Like Fsignal, but marked no-return.
+ (xsignal0, xsignal1, xsignal2, xsignal3): New no-return functions.
+ (signal_error): New no-return function (from xfaces.c).
+ (Fthrow): Use xsignal2 instead of Fsignal + abort.
+ (error): Use xsignal1 instead of Fsignal + abort.
+ (FletX, Flet, grow_specpdl): Use signal_error.
+ (Feval, Ffuncall, funcall_lambda): Use xsignal1, xsignal2.
+
+ * alloc.c (buffer_memory_full, memory_full): Use xsignal. Remove loop.
+ (list1): New function.
+
+ * lisp.h (list1): Add EXFUN.
+ (xsignal, xsignal0, xsignal1, xsignal2, xsignal3, signal_error):
+ Add prototypes. Mark them as no-return.
+
+ * buffer.c (Fbuffer_local_value, Fbarf_if_buffer_read_only):
+ Use xsignal1.
+
+ * callint.c (check_mark): Use xsignal0.
+
+ * casefiddle.c (casify_object): wrong_type_argument is no-return.
+
+ * cmds.c (Fforward_char, Fdelete_char): Use xsignal0.
+
+ * coding.c (Fcheck_coding_system): Use xsignal1. Remove loop.
+ (Fdefine_coding_system_internal): Use xsignal1.
+
+ * data.c (circular_list_error): Use xsignal.
+ (wrong_type_argument): Use xsignal2. Don't care about return value.
+ (args_out_of_range, args_out_of_range_3): Use xsignal2, xsignal3.
+ Remove loop around Fsignal.
+ (indirect_variable, Fsymbol_value, set_internal, Fdefault_value)
+ (indirect_function, Findirect_function, Fstring_to_number)
+ (Fmakunbound, Ffmakunbound, Fsymbol_function, Ffset): Use xsignal1.
+ (arith_driver, float_arith_driver, Frem, Fmod, arith_error):
+ Use xsignal0.
+
+ * doc.c (Fdocumentation): Use xsignal1.
+
+ * editfns.c (region_limit, Fget_internal_run_time): Use xsignal0.
+
+ * fileio.c (report_file_error): Use xsignal.
+ (barf_or_query_if_file_exists, Fcopy_file, Fdelete_file)
+ (Finsert_file_contents): Use xsignal2.
+ (syms_of_fileio): Use list2, list3.
+
+ * floatfns.c (arith_error, range_error, domain_error): Use xsignal2.
+ (range_error2, domain_error2): Use xsignal3.
+ (rounding_driver, fmod_float): Use xsignal0.
+ (float_error): Use xsignal1.
+ (matherr): Use xsignal.
+
+ * fns.c (Flength): wrong_type_argument is no-return.
+ (hashfn_user_defined, Fmake_hash_table): Use signal_error.
+ (Fmd5): Use xsignal1.
+
+ * frame.c (x_set_line_spacing, x_set_screen_gamma): Use signal_error.
+
+ * keyboard.c (recursive_edit_1): Use xsignal1.
+
+ * keymap.c (Fmap_keymap): Use xsignal1.
+
+ * lread.c (Fload): Use xsignal2, signal_error.
+ (end_of_file_error): Use xsignal0, xsignal1.
+ (read0): Use xsignal1.
+ (invalid_syntax): New error function marked no-return.
+ (read_integer, read1, read_list): Use it.
+
+ * macselect.c (x_get_local_selection): Use signal_error.
+
+ * msdos.c (Fmsdos_set_mouse_buttons): Use xsignal2.
+
+ * search.c (compile_pattern_1): Use xsignal1.
+ (signal_failure): Remove (was only called once).
+ (search_command): Use xsignal1 instead of signal_failure.
+
+ * syntax.c (scan_lists): Use xsignal3.
+
+ * textprop.c (text_read_only): Use xsignal0, xsignal1.
+
+ * unexsol.c (unexec): Use xsignal.
+
+ * window.c (window_scroll_pixel_based, window_scroll_line_based):
+ Use xsignal0.
+
+ * xfaces.c (signal_error): Move to eval.c.
+ (resolve_face_name): Use xsignal1.
+
+ * xfns.c (x_decode_color): Use signal_error.
+
+ * xselect.c (x_get_local_selection, copy_multiple_data)
+ (x_get_window_property_as_lisp_data)
+ (lisp_data_to_selection_data, CHECK_CUT_BUFFER)
+ (Fx_get_cut_buffer_internal): Use signal_error.
+
+2006-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (XTread_socket): Undo previous change.
+
+2006-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (keycode_to_xkeysym): Remove function. All uses now
+ directly lookup keycode_to_xkeysym_table.
+ [USE_MAC_TSM] (mac_handle_text_input_event): Don't construct
+ ASCII_KEYSTROKE_EVENT for non-zero keycode_to_xkeysym_table entries.
+ (XTread_socket): Use character codes to construct keypad key events.
+ (mac_initialize_display_info) [MAC_OSX]: Use CGDisplaySamplesPerPixel.
+ (x_delete_display): Apply 2006-07-04 change for xterm.c.
+
+2006-07-17 Richard Stallman <rms@gnu.org>
+
+ * keyboard.c (Vcommand_error_function): New variable.
+ (syms_of_keyboard): Defvar it.
+ (cmd_error_internal): Simplify, and handle Vcommand_error_function.
+
+ * dispnew.c (init_display): Mention DISPLAY as well as TERM in err msg.
+
+2006-07-17 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (handle_single_display_spec): Ensure the right value of
+ it->position is saved by push_it.
+ (pop_it): Restore it->object for GET_FROM_BUFFER and GET_FROM_STRING.
+ (reseat_1): Don't setup it->object twice.
+ (set_iterator_to_next): No need to set it->object after pop_it.
+ (move_it_to): Explicitly check to see if last move reached to_charpos.
+
+2006-07-17 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * xdisp.c (display_mode_line): Preserve match data.
+
+2006-07-14 Kim F. Storm <storm@cua.dk>
+
+ * w32.c (pfn_WSACreateEvent, pfn_WSACloseEvent): New func ptrs.
+ (init_winsock): Load them. Use ws2_32.dll.
+ (sys_listen): Undo last change. Just set FILE_LISTEN flag.
+ (sys_accept): Undo last change. Instead, set child status to
+ STATUS_READ_ACKNOWLEDGED and reset char_avail event so next
+ sys_select will wakeup the reader thread.
+ (_sys_wait_accept): New function used by reader thread to wait for
+ an incoming connection on a server socket.
+
+ * w32.h (_sys_read_ahead, _sys_wait_accept): Add prototypes.
+
+ * w32proc.c (reader_thread): Use _sys_wait_accept to wait on a
+ server socket (FILE_LISTEN flag).
+
+2006-07-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * sound.c (alsa_init): Call snd_pcm_close after successful snd_pcm_open.
+
+2006-07-14 Kim F. Storm <storm@cua.dk>
+
+ * w32.c: Fix high cpu load for server sockets.
+ (pfn_WSAEventSelect): New function ptr.
+ (init_winsock): Load it.
+ (sys_listen): Set FILE_LISTEN flag. Set event mask for socket's
+ char_avail event object to FD_ACCEPT.
+ (sys_accept): Check FILE_LISTEN flag. Set event mask on new
+ socket's char_avail event object to FD_READ|FD_CLOSE.
+
+ * w32.h (FILE_LISTEN): New filedesc flag value.
+
+2006-07-13 Kim F. Storm <storm@cua.dk>
+
+ * bytecode.c (Fbyte_code): Use CAR, CDR for Bcar, Bcdr.
+ Use CAR_SAFE, CDR_SAFE for Bcar_safe, Bcdr_safe.
+ Simplify loops and use CAR for Bnth and Belt.
+
+ * data.c (Findirect_function): Optimize for no indirection.
+
+ * eval.c (Fthrow): Remove loop around Fsignal.
+ (Feval, Fapply, Ffuncall): Optimize for no function indirection.
+ Use original function name in all signaled errors.
+ Simplify Fsignal calls (no return).
+ (funcall_lambda): Simplify Fsignal calls (no return).
+
+2006-07-13 Andreas Schwab <schwab@suse.de>
+
+ * syntax.c (scan_sexps_forward): Use EMACS_INT for out_bytepos and
+ out_charpos.
+
+2006-07-13 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Fformat): Fix calculation of text property positions
+ of format string.
+
+2006-07-12 Kim F. Storm <storm@cua.dk>
+
+ * lisp.h (CHECK_TYPE): New macro for generic type checking.
+ (CAR_SAFE, CDR_SAFE): New macros.
+ (ARRAYP, CHECK_ARRAY): New macros.
+ (CHECK_VECTOR_OR_STRING, CHECK_SUBR): New macros.
+ (CHECK_WINDOW_CONFIGURATION): New macro.
+ (CHECK_LIST_CONS, CHECK_LIST_END): New checks for list traversal.
+ (CHECK_STRING_OR_BUFFER, CHECK_HASH_TABLE, CHECK_LIST)
+ (CHECK_STRING, CHECK_STRING_CAR, CHECK_CONS, CHECK_SYMBOL)
+ (CHECK_CHAR_TABLE, CHECK_VECTOR, CHECK_VECTOR_OR_CHAR_TABLE)
+ (CHECK_BUFFER, CHECK_WINDOW, CHECK_LIVE_WINDOW, CHECK_PROCESS)
+ (CHECK_NUMBER, CHECK_NATNUM, CHECK_MARKER, CHECK_OVERLAY)
+ (CHECK_NUMBER_COERCE_MARKER, CHECK_FLOAT, CHECK_NUMBER_OR_FLOAT)
+ (CHECK_NUMBER_OR_FLOAT_COERCE_MARKER): Use CHECK_TYPE.
+
+ * category.h (CHECK_CATEGORY, CHECK_CATEGORY_SET):
+ * frame.h (CHECK_FRAME, CHECK_LIVE_FRAME): Use CHECK_TYPE.
+
+ * callint.c (Fcall_interactively):
+ * casefiddle.c (casify_object):
+ * editfns.c (general_insert_function):
+ * fns.c (Flength, Felt, Ffillarray):
+ * data.c (Fcar, Fcdr): Remove loop around wrong_type_argument.
+
+ * data.c (wrong_type_argument): Remove loop around Fsignal.
+ (Farrayp, Fsequencep): Use ARRAYP.
+ (Fcar): Use CAR.
+ (Fcar_safe): Use CAR_SAFE.
+ (Fcdr): Use CDR.
+ (Fcdr_safe): Use CDR_SAFE.
+ (Fsetcar, Fsetcdr): Use CHECK_CONS.
+ (Fsubr_arity, Fsubr_name): Use CHECK_SUBR.
+ (Faset): Use CHECK_ARRAY.
+
+ * fns.c (Felt): Use CHECK_ARRAY.
+ (concat): Use CHECK_NUMBER.
+ (Fsubstring, substring_both): Use CHECK_VECTOR_OR_STRING.
+ (Fmemq): Use CHECK_LIST.
+ (Fassq, Fassoc, Frassq, Frassoc): Use CAR.
+ (assq_no_quit): Use CAR_SAFE.
+ (Fnthcdr, Fmember, Fdelq, Fdelete, Fnreverse, Fnconc):
+ Use CHECK_LIST_CONS.
+ (Freverse, Fplist_get, Flax_plist_get): Use CHECK_LIST_END.
+
+ * bytecode.c (Fbyte_code): Use CHECK_VECTOR.
+
+ * casetab.c (check_case_table):
+ * category.c (check_category_table):
+ * marker.c (Fcopy_marker):
+ * syntax.c (check_syntax_table):
+ * xfaces.c (load_pixmap): Use CHECK_TYPE.
+
+ * fns.c (Fcopy_sequence, concat):
+ * fringe.c (Fdefine_fringe_bitmap):
+ * lread.c (check_obarray): Cleanup wrong_type_argument use.
+
+ * keyboard.c (access_keymap_keyremap): Use ARRAYP.
+
+ * keymap.c (Fdefine_key, Flookup_key):
+ * macros.c (Fstart_kbd_macro): Use CHECK_VECTOR_OR_STRING.
+
+ * mac.c (Fmac_get_preference): Use CHECK_LIST_END.
+
+ * search.c (Fset_match_data): Use CHECK_LIST.
+
+ * sunfns.c (sun_item_create): Use CHECK_LIST_CONS.
+
+ * window.c (Fwindow_configuration_frame, Fset_window_configuration):
+ (compare_window_configurations): Use CHECK_WINDOW_CONFIGURATION.
+
+2006-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in (dired.o, editfns.o, fileio.o): Depend on blockinput.h.
+
+ * dired.c: Include blockinput.h.
+ (Ffile_attributes): Add BLOCK_INPUT around getpwuid/getgrgid.
+
+ * editfns.c: Include blockinput.h.
+ (Fuser_login_name, Fuser_full_name): Add BLOCK_INPUT around
+ getpwuid/getpwnam.
+
+ * fileio.c: Include blockinput.h.
+ (Fexpand_file_name, search_embedded_absfilename): Add BLOCK_INPUT
+ around getpwnam.
+ (search_embedded_absfilename): Remove spurious xfree.
+
+2006-07-11 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (sit_for): Reduce number of args from 5 to 3.
+ Now just one TIMEOUT arg that can be a Lisp float or Lisp int.
+ Combine args DISPLAY and INITIAL_DISPLAY into one arg DO_DISPLAY.
+ Signal error if TIMEOUT is not a number.
+ Undo 2006-06-14 change for non-preemptive display if TIMEOUT < 0.
+ The rework of sit_for args also fixes several incorrect Qt args
+ which should have been 1.
+ (Fredisplay): Pass 1 instead of Qt to swallow_events and
+ detect_input_pending_run_timers.
+
+ * lisp.h (sit_for): Update prototype.
+ (Fredisplay): Add EXFUN.
+
+ * dispextern.h (sit_for): Remove prototype.
+
+ * callint.c (Fcall_interactively):
+ * minibuf.c (temp_echo_area_glyphs):
+ * keyboard.c (command_loop_1, read_char, Fexecute_extended_command):
+ * fileio.c (Fdo_auto_save): Update/simplify sit_for calls.
+
+2006-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (forw_comment): Also use EMACS_INT for buffer positions.
+
+2006-07-11 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (Fredisplay): Add FORCE argument to force redisplay when
+ input is available. Fix test for redisplay_dont_pause non-nil.
+ Specbind redisplay-dont-pause to t if FORCE non-nil.
+
+2006-07-10 Chong Yidong <cyd@stupidchicken.com>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1211000.
+
+ * dispnew.c (Fredisplay): New function, equivalent to (sit-for 0).
+ (Fsit_for): Function deleted.
+
+ * keyboard.c (command_loop_1, Fexecute_extended_command):
+ Call sit_for instead of Fsit_for.
+
+ * minibuf.c (temp_echo_area_glyphs): Likewise.
+
+2006-07-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (Fforward_comment): Revert the reversion.
+ (back_comment, scan_lists): Also use EMACS_INT for buffer positions.
+
+2006-07-09 John Paul Wallington <jpw@pobox.com>
+
+ * syntax.c (Fforward_comment): Revert previous change.
+
+2006-07-09 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fforce_window_update): Doc fix.
+
+2006-07-08 Stephen Gildea <gildea@stop.mail-abuse.org>
+
+ * fileio.c (do_auto_save_make_dir): Make the auto-save-list-file
+ directory unreadable for better user privacy.
+
+2006-07-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (Fforward_comment): Fix int-32 vs EMACS_INT-64 mixup.
+
+ * lread.c (read_filtered_event): Remove `register' qualifier because it
+ causes compilation problem with gcc-4.0.2-20051125 on amd64.
+ (readevalloop): Remove unused var `bpos'.
+ Yet another int/Lisp_Object mixup (YAILOM).
+
+2006-07-07 Eli Zaretskii <eliz@gnu.org>
+
+ * keyboard.c (Fexecute_extended_command): Mention the argument
+ PREFIXARG in the doc string.
+
+2006-07-07 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (Fdefine_fringe_bitmap): Doc fix.
+
+2006-07-05 Chong Yidong <cyd@stupidchicken.com>
+
+ * insdel.c (prepare_to_modify_buffer): For an indirect buffer, do
+ clash detection using the base buffer.
+
+ * puresize.h (BASE_PURESIZE): Increment to 1210500.
+
+2006-07-04 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (x_delete_display): Don't free or derefence NULL pointers.
+
+2006-07-04 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (Fset_overriding_fontspec_internal): Check if we need
+ to update Voverriding_fontspec_alist.
+
+2006-07-03 Richard Stallman <rms@gnu.org>
+
+ * xfns.c (Fx_create_frame): Move unwind_create_frame setup down.
+
+ * xfaces.c (Fface_attribute_relative_p): Doc fix.
+
+ * textprop.c (Fget_char_property_and_overlay): Doc fix.
+
+ * eval.c (Fdefvaralias): Doc fix.
+
+2006-07-03 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (sit_for): Fix preempt condition.
+
+2006-07-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lread.c (read_filtered_event): Treat select-window just like
+ switch-frame.
+
+2006-07-02 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (display_tool_bar_line): Skip glyphs which are too big
+ to ever fit the tool-bar,
+ (MAX_FRAME_TOOL_BAR_HEIGHT): New macro.
+ (tool_bar_lines_needed): Use unused mode-line row as temp_row.
+ (redisplay_tool_bar): Only clear desired matrix if we actually
+ change the tool-bar window height. Only try to make the tool-bar
+ window bigger if there is actually room for it.
+
+2006-06-30 Ralf Angeli <angeli@caeruleus.net>
+
+ * w32term.c (x_make_frame_visible): Use SystemParametersInfo with
+ SPI_GETWORKAREA to find the dimensions of the screen work area,
+ and adjust vertical position of the frame in order to avoid being
+ covered by the task bar.
+
+ * w32fns.c (w32_createwindow): Use CW_USEDEFAULT instead of
+ f->left_pos and SH_SHOW instead of f->top_pos in the call to
+ CreateWindow. Record the actual position in f->left_pos and
+ f->top_pos.
+
+2006-06-30 John Paul Wallington <jpw@pobox.com>
+
+ * w32console.c (syms_of_ntterm) <w32-use-full-screen-buffer>:
+ Doc fix - default value has changed.
+
+2006-06-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [!TARGET_API_MAC_CARBON]: Don't include FixMath.h or Scrap.h.
+
+ * macfns.c (Fx_create_frame): Apply 2006-06-24 change for xfns.c.
+
+ * macgui.h (USE_MAC_TSM) [TARGET_API_MAC_CARBON]: Set default to 1.
+
+ * macterm.c (Qeql): Add extern.
+ (x_set_mouse_pixel_position) [MAC_OSX]: Use CGWarpMouseCursorPosition.
+ (fm_style_face_attributes_alist) [USE_ATSUI]: New variable.
+ (syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it.
+ Change keys of Vmac_atsu_font_table from strings to numbers.
+ (fm_style_to_face_attributes) [USE_ATSUI]: New function.
+ (init_font_name_table) [USE_ATSUI]: Use it.
+ (saved_ts_script_language_on_focus) [USE_MAC_TSM]: New variable.
+ (syms_of_macterm) [USE_MAC_TSM]: Initialize and staticpro it.
+ [USE_MAC_TSM] (mac_tsm_resume): Restore script and language codes
+ only when saved_ts_script_language_on_focus coincides with
+ Vmac_ts_script_language_on_focus.
+ [USE_MAC_TSM] (mac_tsm_suspend): Save value of
+ Vmac_ts_script_language_on_focus to saved_ts_script_language_on_focus.
+ (XTread_socket) [USE_MAC_TSM]: Add Mac OS Classic support.
+ [USE_MAC_TSM] (mac_handle_text_input_event, init_tsm): Likewise.
+
+2006-06-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * editfns.c (Fdelete_field, Ffield_string, Ffield_beginning)
+ (Ffield_string_no_properties, Ffield_end): Mention
+ args-out-of-range error condition in docstring.
+
+2006-06-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (handle_composition_prop): Set stop_charpos before push_it.
+
+2006-06-25 Kim F. Storm <storm@cua.dk>
+
+ * s/gnu-linux.h (SIGNALS_VIA_CHARACTERS): Define for Linux kernel
+ version 2.4 and later.
+
+2006-06-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * xfns.c (Fx_create_frame): Set font parameter directly instead of
+ using x_default_parameter, since x_get_args clears the parm alist.
+
+2006-06-24 Eli Zaretskii <eliz@gnu.org>
+
+ * dired.c (directory_files_internal) [WINDOWSNT]: Find files
+ case-insensitively.
+
+2006-06-24 Aidan Kehoe <kehoea@parhasard.net>
+
+ * lread.c (read_escape): When an unknown Unicode code point is
+ encountered as a string or character escape, signal an error.
+
+2006-06-23 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (pitx): Dump iterator stack.
+
+ * xdisp.c (handle_composition_prop): Push iterator on stack.
+ (set_iterator_to_next): Pop iterator at end of composition.
+
+2006-06-23 Martin Rudalics <rudalics@gmx.at>
+
+ * fileio.c (Frename_file) [DOS_NT]: Don't try to move directory to
+ itself on DOS_NT platforms, if the old and new names are identical
+ but for the letter-case.
+
+2006-06-21 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct it): Add `position' member to iterator stack.
+ Rename `pos' member to `current'. Rearrange and add comments.
+
+ * xdisp.c (handle_stop): Set it->ignore_overlay_strings_at_pos_p
+ if we get any overlays.
+ (set_cursor_from_row): Don't clobber `end' if we rescan from
+ start_string.
+ (push_it, pop_it): Save it->position.
+
+2006-06-19 Richard Stallman <rms@gnu.org>
+
+ * window.c (size_window): New arg FIRST_ONLY. All callers changed.
+ (adjust_window_trailing_edge): Specially compute FIRST_PARALLEL
+ for the case of a top-level window and the following minibuffer.
+ Don't exit because of no `next' when there is a parent.
+ Use the FIRST_ONLY feature when resizing following windows.
+
+ * syntax.c (init_syntax_once): Give most control chars' syntax Spunct.
+
+2006-06-17 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (update_frame): Check for input pending on entry.
+ (update_window, update_frame_1): Break loop if input is detected.
+
+2006-06-16 Francis Litterio <flitterio@gmail.com>
+
+ * xterm.c (x_check_expected_move, handle_one_xevent)
+ (x_set_offset, x_check_fullscreen): Extensive changes to make
+ frame positioning deterministic under X.
+
+ * 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>
+
+ * dispextern.h (struct it): Add union to iterator stack to save
+ image, composition, and stretch specific paramters.
+
+ * xdisp.c (next_overlay_string): Fix assert.
+ (push_it, pop_it): Handle composition and stretch specific values.
+ Only handle it->slice in image (for now).
+ (back_to_previous_visible_line_start): Continue search if newline is
+ part of a compisition. Simplify.
+ (reseat_1): Set it->object to buffer.
+ (set_iterator_to_next): Set it->object to string or buffer, when
+ setting it->method to GET_FROM_STRING or GET_FROM_BUFFER.
+ (next_element_from_composition): Set it->object to buffer if not
+ from string.
+ (set_cursor_from_row): Only save start of string if not already
+ done to handle multiple strings in a row.
+
+ * .gdbinit (pitx): Show composition parameters.
+ (pgx, pg): New commands to print a glyph structure.
+ (pgi, pgn): New commands to print specific/next glyph.
+ (pgrowx, pgrow): New commands to print all glyphs in a row.
+
+2006-06-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (Fx_display_mm_height, Fx_display_mm_width)
+ [MAC_OS_X_VERSION_MAX_ALLOWED >= 1030]: Use CGDisplayScreenSize.
+
+ * macterm.c (do_app_resume, do_app_suspend): Remove functions.
+ (mac_tsm_resume, mac_tsm_suspend) [USE_MAC_TSM]: New functions.
+ (mac_handle_window_event, XTread_socket) [USE_MAC_TSM]: Use them.
+ (Vmac_ts_script_language_on_focus) [USE_MAC_TSM]: New variable.
+ (syms_of_macterm) [USE_MAC_TSM]: Defvar it.
+ (saved_ts_language, saved_ts_component) [USE_MAC_TSM]: New variables.
+ (mac_initialize_display_info) [MAC_OSX]: Use Quartz Display
+ Services functions to get size of main display in pixels.
+
+2006-06-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (back_to_previous_visible_line_start):
+ Reset it->continuation_lines_width.
+
+2006-06-14 Richard Stallman <rms@gnu.org>
+
+ * eval.c (Fdefconst): Mark variable as risky.
+
+ * callproc.c (Fcall_process): Doc fix.
+
+ * window.c (adjust_window_trailing_edge): Don't break out of the loop
+ because there's no next window, if there are parallel windows.
+ Do break out when WINDOW is nil.
+
+2006-06-14 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (IT_STACK_SIZE): New macro specifying size of
+ iterator stack (instead of hardcoded number). Increase from 2 to
+ 4 to make room for propertized overlay strings before and after a
+ display string, image or composition.
+ (struct it): Add image_id and method members to iterator stack.
+
+ * xdisp.c (init_from_display_pos): Don't set it->method and
+ overlay_string_index after pop_it. Add asserts.
+ (handle_stop): Look for overlay strings around a display string,
+ image, or composition. Handle properties on those strings.
+ (next_overlay_string): Don't set string, pos or method after pop_it.
+ (get_overlay_strings_1): Split from get_overlay_strings; don't
+ modify it if no overlay strings are found.
+ (get_overlay_strings): Use get_overlay_strings_1. Always set
+ it->string and it->method.
+ (push_it): Push it->image_id and it->method. Push it->object
+ instead of it->string if method is GET_FROM_IMAGE.
+ (pop_it): Pop it->image_id and it->method. Ppo it->object
+ instead of it->string if method is GET_FROM_IMAGE.
+ Reset it->current.string_pos if popped it->string is nil.
+ (reseat_1): Remove comment dated 19 May 2003. It expressed doubt
+ whether a given change was correct; but the change is correct.
+ Clear it->string_from_display_prop_p.
+ (set_iterator_to_next): Rely on it->method and it->image_id from
+ iterator stack, instead of setting them explicitly after pop_it.
+
+ * dispnew.c (sit_for): Undo 2006-06-01 change. Instead, a
+ negative time forces redisplay even when input is available.
+ (Fsit_for): Doc fix.
+
+2006-06-13 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c: Modify preemptive redisplay to be based on periodic
+ checks for input.
+ (PERIODIC_PREEMPTION_CHECKING): Define to 1 iff EMACS_HAS_USECS.
+ (Vredisplay_preemption_period): New variable.
+ (syms_of_display): DEFVAR_LISP and initialize it.
+ (preemption_period, preemption_next_check): New variables.
+ (update_frame, update_single_window): Initialize them based on
+ Vredisplay_preemption_period if !force_p.
+ (update_window, update_frame_1): Use them to determine when to
+ check for input.
+
+2006-06-03 Aidan Kehoe <kehoea@parhasard.net>
+
+ * lread.c (read_escape): Provide a Unicode character escape
+ syntax; \u followed by exactly four or \U followed by exactly
+ eight hex digits in a comment or string is read as a Unicode
+ character with that code point.
+
+2006-06-09 Eli Zaretskii <eliz@gnu.org>
+
+ * window.c (window_scroll_pixel_based): Signal "Beginning of
+ buffer" when scroll-down at the beginning of an empty buffer.
+
+2006-06-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [USE_MAC_TSM] (mac_handle_text_input_event):
+ Exclude 0x7f from ASCII range.
+
+2006-06-05 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_set_scroll_bar_thumb, x_scroll_bar_create)
+ (w32_set_vertical_scroll_bar, w32_scroll_bar_handle_click)
+ (x_scroll_bar_report_motion): Remove workarounds for
+ versions of Windows NT < 3.51.
+ [!SIF_ALL]: Remove.
+ (pfnSetScrollInfo, pfnGetScrollInfo): Remove.
+ (w32_initialize): Don't dynamically load Get/SetScrollInfo.
+
+2006-06-04 David Kastrup <dak@gnu.org>
+
+ * dispnew.c: Mention `redisplay-dont-pause' in doc string of
+ `sit-for'.
+
+2006-06-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (x_set_icon_name): Apply 2006-06-02 change for xfns.c.
+
+ * macgui.h (USE_MAC_TSM): Set default to 1 on Mac OS X.
+
+ * macterm.c (tsm_document_id) [USE_MAC_TSM]: New variable.
+ (Qtext_input, Qupdate_active_input_area, Qunicode_for_key_event)
+ [USE_MAC_TSM]: Likewise.
+ (syms_of_macterm) [USE_MAC_TSM]: Intern and staticpro them.
+ (Qbefore_string) [USE_MAC_TSM]: Add extern.
+ (do_app_resume, do_app_suspend) [USE_MAC_TSM]: Call
+ ActivateTSMDocument/DeactivateTSMDocument.
+ (mac_store_event_ref_as_apple_event): Call mac_post_mouse_moved_event.
+ (mac_handle_window_event) [USE_MAC_TSM]: Handle
+ kEventWindowFocusAcquired/kEventWindowFocusRelinquish.
+ (mac_handle_text_input_event) [USE_MAC_TSM]: New function.
+ (install_window_handler) [USE_MAC_TSM]: Install it. Register
+ kEventWindowFocusAcquired/kEventWindowFocusRelinquish.
+ (keycode_to_xkeysym_table): Add entry for f16.
+ (XTread_socket) [USE_MAC_TSM]: Set/reset read_socket_inev
+ before/after passing keystroke event to toolbox dispatcher.
+ (init_tsm) [USE_MAC_TSM]: New function.
+ (mac_initialize) [USE_MAC_TSM]: Call it.
+ (Vmac_ts_active_input_overlay) [USE_MAC_TSM]: New defvar.
+
+ * macterm.h (EVENT_PARAM_TEXT_INPUT_SEQUENCE_NUMBER): New enumerator.
+
+2006-06-02 John Paul Wallington <jpw@gnu.org>
+
+ * xfns.c (x_set_name_internal): Set icon to `text', derived from
+ name, when frame's icon_name isn't a string rather than only when
+ it is nil.
+
+2006-06-03 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (x_set_icon_name): Don't use arg if it's not a string
+ and not nil.
+
+2006-06-02 Chong Yidong <cyd@stupidchicken.com>
+
+ * xfns.c (x_set_icon_name): No-op if arg is non-nil and not a
+ string.
+
+2006-06-02 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (next_element_from_composition): Set it->object to
+ it->string if composition is coming from string.
+ (set_cursor_from_row): Don't return 0 unless row displays a
+ continued line.
+ (dump_glyph): Dump composite glyph.
+
+2006-06-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (menu_nav_ended): Check that menubar_widget is not NULL.
+
+2006-06-01 Richard Stallman <rms@gnu.org>
+
+ * window.c (Fsplit_window): Doc fix.
+
+2006-06-01 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * process.c (deleted_pid_list): New variable to store the pids
+ of deleted processes. Declare it only if SIGCHLD is defined.
+ (init_process): Initialize it.
+ (syms_of_process): Staticpro it.
+ (Fdelete_process): Add pid of the deleted process to it. Check after
+ the addition and before the kill if the process is already stopped,
+ in which case it is deleted from the list and not killed.
+ (sigchld_handler): Define it only if SIGCHLD is. Search the process
+ that signaled Emacs in `deleted_pid_list' before `Vprocess_alist'.
+ Original idea by Stefan Monnier.
+
+2006-06-01 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (sit_for): Perform redisplay even if input is pending
+ when redisplay-dont-pause is non-nil.
+
+2006-06-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_handle_visibility_change): Set buf.arg to Qnil.
+ (XTread_socket): Remove obsolete comment.
+
+2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (syms_of_xmenu): Make accelerate-menu an alias for
+ menu-bar-open.
+
+2006-06-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (Fmenu_bar_open, syms_of_xmenu): Change menu-bar-start to
+ menu-bar-open.
+
+ * gtkutil.c (menu_nav_ended): Change x-menu-bar-start to menu-bar-open.
+
+2006-05-31 Juri Linkov <juri@jurta.org>
+
+ * minibuf.c (Vhistory_add_new_input): New variable.
+ (read_minibuf): Use it.
+ (syms_of_minibuf) <history-add-new-input>: New Lisp variable.
+ (syms_of_minibuf) <history-delete-duplicates>: Doc fix.
+
+2006-05-31 Kim F. Storm <storm@cua.dk>
+
+ * process.c (select_wrapper): Add wrapper around select to work around
+ "incomplete backtrace" bug in gdb 5.3, when emacs is stopped inside
+ select called from wait_reading_process_output.
+
+2006-05-30 Andreas Schwab <schwab@suse.de>
+
+ * xmenu.c (Fmenu_bar_start): Return a value.
+
+2006-05-30 Richard Stallman <rms@gnu.org>
+
+ * coding.c (Ffind_operation_coding_system): Doc fix.
+
+2006-05-30 Eli Zaretskii <eliz@gnu.org>
+
+ * w32term.c (x_draw_hollow_cursor): Fix last change.
+
+2006-05-29 Kim F. Storm <storm@cua.dk>
+
+ * w32term.c (x_draw_stretch_glyph_string): Fix last change.
+
+2006-05-29 Eli Zaretskii <eliz@gnu.org>
+
+ * coding.c (Ffind_operation_coding_system): Doc fix.
+
+2006-05-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c [USE_MAC_FONT_PANEL] (Fmac_set_font_panel_visibility):
+ Call mac_set_font_info_for_selection if font panel is made visible.
+
+ * macterm.c (font_panel_shown_p) [USE_MAC_FONT_PANEL]: New variable.
+ (mac_font_panel_visible_p, mac_show_hide_font_panel)
+ [USE_MAC_FONT_PANEL]: New functions.
+ [USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection):
+ Return immediately if font panel is not visible.
+
+ * macterm.h (mac_font_panel_visible_p, mac_show_hide_font_panel):
+ Add externs.
+
+2006-05-29 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * search.c (matcher_overflow): Mark as NO_RETURN.
+
+ * xterm.c (x_connection_closed): Likewise.
+
+ * sysdep.c (croak): Likewise.
+
+ * sound.c (sound_perror, alsa_sound_perror): Likewise.
+
+ * lisp.h (die, nsberror): Likewise.
+
+2006-05-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * sound.c (alsa_open, alsa_configure, alsa_write):
+ Move assignment to err out of if-statement.
+
+ * gtkutil.c (menu_nav_ended): New function.
+ (create_menus): Connect menu_nav_ended to "selection-done" to fix
+ grabs.
+
+ * xmenu.c (Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
+
+2006-05-28 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * charset.h (invalid_character): Mark as NO_RETURN.
+
+2006-05-29 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Ffind_operation_coding_system): Call a function by
+ safe_call1 instead of call1.
+
+2006-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (struct saved_window): Add `dedicated'.
+ (Fset_window_configuration, save_window_save): Save/restore the
+ `dedicated' flag.
+
+2006-05-28 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_cursor_from_row): If cursor cannot be set in row,
+ don't update w->cursor and return 0. Return 1 on success.
+ (try_cursor_movement): Repeat set_cursor_from_row on successive rows
+ until it succeeds.
+
+ * dispextern.h (set_cursor_from_row): Update prototype.
+
+2006-05-28 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_phys_cursor_geometry): Return computed x and y through
+ parameters. Adjust x and width in case cursor in on a partially
+ visible stretch glyph on the left edge.
+ (erase_phys_cursor): Don't erase into left fringe/margin in case
+ previous cursor glyph is a partially visible stretch glyph on left.
+
+ * dispextern.h (get_phys_cursor_geometry): Update prototype.
+
+ * xterm.c (x_draw_stretch_glyph_string): Fix problems with invisible
+ cursor and erasing cursor on partially visible stretch glyph on left.
+ (x_draw_hollow_cursor): Compute x via get_phys_cursor_geometry.
+
+ * macterm.c: Likewise.
+
+ * w32term.c: Likewise.
+
+2006-05-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macselect.c (mac_handle_apple_event):
+ Return errAEEventNotHandled if key binding is not found.
+
+2006-05-26 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (main) [PROFILING]: Enable also for __MINGW32__.
+ [__MINGW32__]: MinGW-specific declaration of `etext'.
+
+ * w32heap.c (etext, edata): Remove unused definitions.
+
+2006-05-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * fileio.c (Fcopy_file): Delete argument MUSTBENEW.
+ Incorporate the exclusive file-opening functionality into the behavior
+ when OK-IF-ALREADY-EXISTS is nil.
+ (Frename_file): Call Fcopy_file without MUSTBENEW argument.
+
+2006-05-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * sound.c (alsa_configure): Move get period/buffer_size after
+ setting hwparams.
+
+2006-05-26 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Ffind_operation_coding_system): Allow (FILENAME
+ . BUFFER) in TARGET.
+
+2006-05-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.c (png_load): Don't call fclose on NULL.
+
+2006-05-25 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Fyes_or_no_p):
+ * callint.c (Fcall_interactively): Fread_from_minibuffer now takes
+ only seven args.
+
+2006-05-25 Juri Linkov <juri@jurta.org>
+
+ * lisp.h (Fread_from_minibuffer): Decrement number of args.
+
+ * minibuf.c (read_minibuf): Remove arg KEEP_ALL. Callers changed.
+ (Fread_from_minibuffer): Remove arg KEEP_ALL. Callers changed.
+
+ * buffer.c (mode-line-format): Fix docstring.
+
+2006-05-25 Richard Stallman <rms@gnu.org>
+
+ * emacs.c (main, Fdump_emacs): Don't test __linux or __linux__.
+
+2006-05-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * puresize.h (BASE_PURESIZE): Increase to 1210000.
+
+2006-05-24 Alan Mackenzie <acm@muc.de>
+
+ * lread.c (Vload_history): Enhance doc-string to say that the file
+ is the absolute truename of the loaded file.
+
+ * lread.c (Vafter_load_alist): doc-string: state that an element
+ now has a regexp to match file names, not a file name as such.
+
+ * lread.c (readevalloop): Call file-truename on the name for
+ load-history, except at preloading time.
+
+ * lread.c (Fload): At preloading time, preserve the extension of
+ the filename which goes into load-history. New var hist_file_name.
+
+ * lread.c (Fload): Do eval-after-load stuff by calling the lisp
+ function do-after-load-evaluation.
+
+2006-05-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (ae_attr_table): New variable.
+ (syms_of_mac): Intern and staticpro its elements.
+ (mac_aelist_to_lisp): Also convert Apple event attributes.
+ (mac_ae_put_lisp): New function.
+ (create_apple_event_from_event_ref) [MAC_OSX]: Use typeUTF8Text.
+
+ * macfns.c (Fx_server_version): Use gestaltSystemVersionMajor etc.
+
+ * macselect.c (Qemacs_suspension_id): New variable.
+ (syms_of_macselect): Intern and staticpro it.
+ (struct suspended_ae_info): New struct.
+ (deferred_apple_events, defer_apple_events)
+ (Fmac_process_deferred_apple_events): Use it.
+ (suspended_apple_events): New variable.
+ (mac_handle_apple_event_1): New function.
+ (mac_handle_apple_event): Use it. Don't process previously
+ suspended events.
+ (cleanup_suspended_apple_events, get_suspension_id)
+ (cleanup_all_suspended_apple_events): New functions.
+ (init_apple_event_handler): Call cleanup_all_suspended_apple_events
+ at exit.
+ (Fmac_cleanup_expired_apple_events, Fmac_ae_set_reply_parameter)
+ (Fmac_resume_apple_event): New defuns.
+ (syms_of_macselect): Defsubr them.
+
+ * macterm.c (fn_keycode_to_keycode_table, XTread_socket) [MAC_OSX]:
+ Fix last change. Don't map `fn' modifier if pressed with F1 ... F12.
+
+ * macterm.h (TYPE_FILE_NAME): Change from macro to enumerator.
+ (KEY_EMACS_SUSPENSION_ID_ATTR): New enumerator.
+ (keyReplyRequestedAttr) [MAC_OS_X_VERSION_MAX_ALLOWED < 1030]: Likewise.
+ (gestaltSystemVersionMajor, gestaltSystemVersionMinor)
+ (gestaltSystemVersionBugFix) [MAC_OS_X_VERSION_MAX_ALLOWED < 1040]:
+ Likewise.
+ (typeUTF8Text, kEventParamWindowMouseLocation)
+ [MAC_OSX && MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Likewise.
+ (x_get_focus_frame, mac_ae_put_lisp): Add externs.
+
+2006-05-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (fn_keycode_to_xkeysym_table, convert_fn_keycode): Remove.
+ (fn_keycode_to_keycode_table) [MAC_OSX]: New variable.
+ (mac_set_unicode_keystroke_event) [TARGET_API_MAC_CARBON]: New function.
+ (XTread_socket) [TARGET_API_MAC_CARBON]: Use it.
+ (XTread_socket) [MAC_OSX]: Try 'uchr' Unicode keyboard-layout
+ resource to backtranslate key with modifiers.
+ (XTread_socket): Don't set read_socket_inev around AEProcessAppleEvent.
+
+2006-05-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c: Remove declarations already in xterm.h.
+
+ * xterm.h: Add extern declarations for x_clear_errors,
+ x_fully_uncatch_errors, x_catching_errors and
+ x_alloc_lighter_color_for_widget. Remove duplicated declarations.
+
+2006-05-21 Richard Stallman <rms@gnu.org>
+
+ * xfaces.c (best_matching_font): Abort for best == NULL
+ before we start to use it.
+
+ * buffer.c (syms_of_buffer, Fmake_overlay): Doc fixes.
+
+2006-05-20 Kim F. Storm <storm@cua.dk>
+
+ * xfaces.c (best_matching_font): Fix crash in 2006-05-17 change.
+
+2006-05-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (convert_fn_keycode): Fix last change.
+
+2006-05-19 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (init_environment): Perform the processing of environment
+ variables on a copy of default variables and their values, not on
+ the original. Simplify code that calls ExpandEnvironmentStrings
+ and make buf1[] and buf2[] more visible for easier debugging.
+
+2006-05-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * frame.c (x_set_border_width): Remove #ifndef MAC_OS.
+
+ * image.c [MAC_OS] (gif_load): Allocate Lisp string first.
+
+ * macfns.c (Fx_focus_frame): Don't check dpyinfo->x_focus_frame.
+
+ * macterm.c (XTread_socket) [TARGET_API_MAC_CARBON && MAC_OSX]:
+ Forward keyUp events to toolbox_dispatcher.
+
+ * window.c (foreach_window): Check WINDOWP (FRAME_ROOT_WINDOW (f)).
+
+2006-05-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * config.in: Regenerated (HAVE_ALSA).
+
+ * sound.c (alsa_sound_perror, alsa_open, alsa_period_size)
+ (alsa_configure, alsa_close, alsa_choose_format, alsa_write)
+ (snd_error_quiet, alsa_init): New functions.
+ (vox_init): Return 0 if unable to open device.
+ (Fplay_sound_internal): Test for alsa first and use vox (oss) as
+ a fallback.
+ (struct sound_device): Add period_size.
+ (wav_play, au_play): Use period_size if set.
+
+ * Makefile.in (CFLAGS_SOUND): New flags for ALSA.
+ (ALL_CFLAGS): Add CFLAGS_SOUND.
+
+2006-05-18 Kenichi Handa <handa@m17n.org>
+
+ * callproc.c (Fcall_process): Reject encoding arguments by
+ ascii-incompatible coding systems (e.g. utf-16).
+
+ * coding.c (Qascii_incompatible): New variable.
+ (syms_of_coding): Setup Qascii_incompatible.
+ (setup_coding_system): Be sure to initialize coding->common_flags.
+ Check `ascii-incompatible' property of the coding system.
+
+ * coding.h (CODING_ASCII_INCOMPATIBLE_MASK): New macro.
+
+2006-05-18 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (display_tool_bar_line): Restore entire tool-bar
+ geometry when backtracking in case last image doesn't fit on line.
+
+2006-05-18 MIYOSHI Masanori <miyoshi@meadowy.org> (tiny change)
+
+ * xdisp.c (display_tool_bar_line): Don't adjust tool-bar height by
+ more than height of one frame default line.
+
+2006-05-17 Richard Stallman <rms@gnu.org>
+
+ * xfaces.c (better_font_p): Any font beats no font.
+ (best_matching_font): Simplify based on above change.
+
+ * buffer.c (Fprevious_overlay_change, Fnext_overlay_change): Doc fixes.
+
+2006-05-16 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (handle_one_xevent): Check that f is not NULL before
+ calling x_kill_gs_process.
+
+2006-05-14 Richard Stallman <rms@gnu.org>
+
+ * textprop.c (Fnext_single_char_property_change)
+ (Fprevious_single_char_property_change): Don't allow returning
+ value beyond LIMIT in any cases.
+ (Fnext_char_property_change, Fprevious_char_property_change): Doc fix.
+
+ * intervals.c (get_local_map): Abort if POSITION outside BEGV, ZV.
+
+2006-05-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Check that f is not NULL before
+ calling _XEditResCheckMessages.
+
+2006-05-14 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (handle_one_xevent): Fix crash in 2006-03-24 change.
+
+2006-05-13 Eli Zaretskii <eliz@gnu.org>
+
+ * frame.c (x_set_border_width): Fix error message to say "frame",
+ not "window".
+
+ * Makefile.in (SOME_MACHINE_LISP): Add fringe.elc.
+
+2006-05-12 Chong Yidong <cyd@stupidchicken.com>
+
+ * intervals.c (set_point_both): Fix mixup before before and after
+ in variable names.
+
+ * editfns.c (Fline_beginning_position): Inhibit point-motion hooks
+ while setting point temporarily.
+
+2006-05-11 Richard Stallman <rms@gnu.org>
+
+ * lread.c (readevalloop): Abort if START non-nil for non-buffer input.
+
+2006-05-11 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_tool_bar): Handle large tool-bar-border values.
+
+2006-05-11 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Finsert_file_contents): Fix for the case of IO error
+ while handling replace operation.
+
+2006-05-10 Kenichi Handa <handa@m17n.org>
+
+ * xfaces.c (realize_default_face) [HAVE_X_WINDOWS]: If the font
+ chosen for the default face was different from the frame font,
+ adjust the frame font.
+
+2006-05-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c (Qduration) [MAC_OS]: Undo previous change.
+ (syms_of_image) [MAC_OS]: Likewise.
+ [MAC_OS] (gif_load): Emulate Graphic Control Extension block.
+
+ * macfns.c (x_to_mac_color): Fix shift amount change.
+ (mac_set_font) [USE_MAC_FONT_PANEL]: Use x_get_focus_frame.
+ [USE_MAC_FONT_PANEL] (Fmac_set_font_panel_visibility): Doc fix.
+
+ * macselect.c (Vmac_service_selection) [MAC_OSX]: Rename from
+ Vmac_services_selection. All uses changed.
+ (mac_store_service_event): Rename from mac_store_services_event in
+ extern and calls.
+
+ * macterm.c (Qservice) [MAC_OSX]: Rename from Qservices. All uses
+ changed.
+ [MAC_OSX] (mac_store_service_event): Rename from
+ mac_store_services_event. All callers changed.
+ [USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection): Add args
+ FACE_ID and C. All callers changed.
+ (x_free_frame_resources) [USE_MAC_FONT_PANEL]: Call
+ mac_set_font_info_for_selection when focus frame is destroyed.
+ (XTread_socket): Revert to FrontNonFloatingWindow/FrontWindow.
+
+ * macterm.h (mac_set_font_info_for_selection): Add 2nd and 3rd
+ args in extern.
+
+2006-05-09 Chong Yidong <cyd@stupidchicken.com>
+
+ * keymap.c (describe_map): Avoid generating duplicate entries if
+ the shadowed binding has the same definition.
+
+2006-05-09 Kenichi Handa <handa@m17n.org>
+
+ * keymap.c (push_key_description): Handle invalid character key.
+
+2006-05-08 Kenichi Handa <handa@m17n.org>
+
+ * callproc.c (Fcall_process): Use system_eol_type for encoding
+ arguments if eol_type is not yet decided.
+
+ * coding.h (system_eol_type): Extern it.
+
+ * coding.c (setup_coding_system): For invalid coding-system, set
+ coding->eol_type to CODING_EOL_UNDECIDED.
+ (encode_coding): Cancel previous change.
+ (shrink_encoding_region): Likewise.
+ (code_convert_region1): Likewise.
+ (code_convert_string1): Likewise.
+ (code_convert_string_norecord): Likewise.
+
+ * fileio.c (choose_write_coding_system): Use system_eol_type for
+ encoding if eol_type is not yet decided.
+
+ * process.c (setup_process_coding_systems): Use system_eol_type
+ for encoding if eol_type is not yet decided.
+ (read_process_output): Likewise.
+ (send_process): Likewise.
+
+2006-05-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * minibuf.c (syms_of_minibuf) <history-length>: Fix typo in doc.
+
+2006-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (Fmac_clear_font_name_table): Move defun to macfns.c.
+ (syms_of_mac): Likewise for defsubr.
+
+ * macfns.c (mac_set_font): New function.
+ (mac_frame_parm_handlers, syms_of_macfns): Replace x_set_font with it.
+ (mac_window) [TARGET_API_MAC_CARBON && MAC_OSX]: Specify
+ kWindowToolbarButtonAttribute when creating window.
+ (Fmac_clear_font_name_table): Move from macfns.c.
+ (syms_of_macfns): Likewise for defsubr.
+ [USE_MAC_FONT_PANEL] (Fmac_set_font_panel_visibility): New defun.
+ (syms_of_macfns) [USE_MAC_FONT_PANEL]: Defsubr it.
+
+ * macgui.h (USE_MAC_FONT_PANEL): Define to 1 if USE_ATSUI is set
+ and build is done on Mac OS X 10.2 and later.
+
+ * macselect.c (mac_do_receive_drag): Remove unused variable `index'.
+ (mac_store_services_event): Change return type in extern.
+
+ * macterm.c (XLoadQueryFont) [USE_ATSUI]: Set font->mac_fontnum to
+ FMFontFamily value.
+ [USE_MAC_FONT_PANEL] (mac_set_font_info_for_selection): New function.
+ (x_new_focus_frame) [USE_MAC_FONT_PANEL]: Use it.
+ (QCfamily, QCweight, QCslant, Qnormal, Qbold, Qitalic): Add extern.
+ (QWindow) [MAC_OSX]: Likewise.
+ (Qfont) [USE_MAC_FONT_PANEL]: Likewise.
+ (Vmac_atsu_font_table) [USE_ATSUI]: New variable.
+ (syms_of_macterm) [USE_ATSUI]: Defvar it.
+ (Qtoolbar_switch_mode) [MAC_OSX]: New variable.
+ (Qpanel_closed, Qselection) [USE_MAC_FONT_PANEL]: Likewise.
+ (syms_of_macterm): Intern and staticpro them.
+ (init_font_name_table) [USE_ATSUI]: Add data to Vmac_atsu_font_table.
+ [TARGET_API_MAC_CARBON] (mac_store_event_ref_as_apple_event):
+ New function.
+ [USE_CARBON_EVENTS] (mac_handle_command_event): Use it.
+ [MAC_OSX] (mac_store_services_event): Likewise.
+ [USE_CARBON_EVENTS] (mac_handle_window_event) [MAC_OSX]: Handle
+ kEventWindowToolbarSwitchMode event.
+ (install_window_handler) [USE_CARBON_EVENTS && MAC_OSX]: Register it.
+ [MAC_OSX] (mac_store_services_event): Change return type to OSStatus.
+ [USE_MAC_FONT_PANEL] (mac_handle_font_event): New function.
+ (install_window_handler) [USE_MAC_FONT_PANEL]: Install it.
+ (XTread_socket): Select window on mouse click if x_focus_frame is NULL.
+
+ * macterm.h (mac_set_font_info_for_selection): Add extern.
+
+2006-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c (Qduration) [MAC_OS]: New variable.
+ (syms_of_image) [MAC_OS]: Intern and staticpro it.
+ [MAC_OS] (gif_load): Save image extension data in img->data.lisp_val.
+ [MAC_OSX] (image_load_quartz2d): Use cfstring_create_with_utf8_cstring
+ instead of cfstring_create_with_string.
+
+2006-05-06 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (xframe): Print frame name.
+ (xlist): New command to print a list (max 10 elements).
+ (xpr): Print lisp object of any type.
+ (pitx): Print it->pixel_width.
+
+2006-05-05 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (handle_composition_prop): Fix for the case of empty
+ composition component.
+
+2006-05-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c (make_lispy_event) [MAC_OS]: Get Apple event info
+ from event->arg.
+
+ * termhooks.h (enum event_kind) [MAC_OS]: Update comment for
+ MAC_APPLE_EVENT.
+
+ * macterm.h (mac_make_lispy_event_code): Remove extern.
+ (mac_post_mouse_moved_event): Add extern.
+ (mac_aelist_to_lisp, mac_aedesc_to_lisp): Change arg 1 to
+ `const AEDesc *' in externs.
+ (create_apple_event_from_drag_ref) [TARGET_API_MAC_CARBON]: New extern.
+
+ * mac.c (mac_aelist_to_lisp, mac_aedesc_to_lisp): Change arg 1 to
+ `const AEDesc *'.
+ [TARGET_API_MAC_CARBON] (create_apple_event): New function.
+ [TARGET_API_MAC_CARBON] (create_apple_event_from_event_ref): Use it.
+ Use xrealloc instead of repeated xmalloc/xfree.
+ [TARGET_API_MAC_CARBON] (create_apple_event_from_drag_ref):
+ New function.
+
+ * macmenu.c (restore_menu_items, cleanup_popup_menu): Return a value.
+
+ * macselect.c: Update copyright year.
+ (mac_store_apple_event): Change return type to void in extern.
+ (mac_handle_apple_event): Don't get return value from
+ mac_store_apple_event.
+ [TARGET_API_MAC_CARBON] (Vmac_dnd_known_types): New variable.
+ (syms_of_macselect) [TARGET_API_MAC_CARBON]: Defvar it.
+ [TARGET_API_MAC_CARBON] (mac_do_track_drag): Move function from
+ macterm.c. Use Vmac_dnd_known_types as acceptable flavors.
+ [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Likewise. New
+ implementation using create_apple_event_from_drag_ref.
+ [TARGET_API_MAC_CARBON] (mac_do_track_dragUPP)
+ (mac_do_receive_dragUPP): Move variables from macterm.c.
+ (install_drag_handler, remove_drag_handler): New functions.
+
+ * macterm.c (XTread_socket) [TARGET_API_MAC_CARBON]: Try window
+ path select also for proxy icon click.
+ [TARGET_API_MAC_CARBON] (mac_post_mouse_moved_event): New function.
+ [USE_TOOLKIT_SCROLL_BARS] (scroll_bar_timer_callback): Use it.
+ (xlfdpat_create): Remove unused label `error' and trailing sentences.
+ (mac_do_track_drag, mac_do_receive_drag): Move functions to macselect.c.
+ (mac_do_track_dragUPP, mac_do_receive_dragUPP): Move variables to
+ macselect.c.
+ (install_drag_handler, remove_drag_handler): Add extern.
+ (mac_store_apple_event): Change return type to void. All uses changed.
+ Create Lisp object from Apple event and store it into input event.
+ (mac_make_lispy_event_code): Remove function.
+ [TARGET_API_MAC_CARBON] (mac_store_drag_event): New function.
+ (install_window_handler): Call install_drag_handler.
+ (remove_window_handler): Call remove_drag_handler.
+
+2006-05-03 Richard Stallman <rms@gnu.org>
+
+ * sound.c (Fplay_sound_internal): Dynamically allocate
+ current_sound_device and current_sound.
+ (sound_cleanup): Free them.
+
+ * minibuf.c (read_minibuf): Don't use read_minibuf_noninteractive
+ when inside a keyboard macro.
+
+2006-05-02 Andreas Schwab <schwab@suse.de>
+
+ * xmenu.c (restore_menu_items): Return a value.
+
+2006-05-01 Martin Rudalics <rudalics@gmx.at>
+
+ * syntax.c (Fforward_comment): Detect generic comment at beginning of
+ buffer when moving backwards.
+
+2006-05-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispnew.c (update_window): Don't set changed_p when mode/header
+ line is updated.
+
+ * xdisp.c (prepare_menu_bars) [MAC_OS]: Call mac_update_title_bar.
+ (get_glyph_face_and_encoding, get_char_face_and_encoding):
+ Don't distinguish known faces from others.
+
+ * mac.c (mac_coerce_file_name_ptr): Try typeFSRef if coercion
+ through typeFileURL failed.
+
+ * macfns.c (mac_update_title_bar): New function.
+ [TARGET_API_MAC_CARBON] (mac_update_proxy_icon): New function.
+ (show_hourglass, hide_hourglass) [USE_CG_DRAWING]:
+ Call mac_prepare_for_quickdraw.
+
+ * macgui.h (USE_ATSUI): Set default to 1 if MAC_OSX is defined.
+ (USE_CG_DRAWING): Don't define if compiled on Mac OS X 10.1.
+ (enum pcm_status): New enum.
+ (XCHARSTRUCTROW_CHAR_VALID_P, XCHARSTRUCTROW_SET_CHAR_VALID)
+ (XCharStructRow): Remove. Now validity is represented by
+ non-negativeness of sum of ascent and descent.
+ (struct MacFontStruct): Change type of member `rows'.
+ (struct _XGC) [USE_CG_DRAWING]: Add member `clip_rects'.
+
+ * macterm.c (mac_draw_line, mac_draw_line_to_pixmap):
+ Adjust endpoints of strictly horizontal/vertical lines.
+ (mac_set_clip_rectangles) [USE_CG_DRAWING]: Set clip_rects.
+ (pcm_init, pcm_get_status): New functions.
+ (x_per_char_metric, XLoadQueryFont): Use them instead of
+ XCharStructRow and related macros.
+ (x_draw_relief_rect): Don't adjust arguments of mac_draw_line.
+ (x_free_frame_resources) [TARGET_API_MAC_CARBON]: Free FRAME_FILE_NAME.
+ (XTread_socket) [TARGET_API_MAC_CARBON]: Handle proxy icon drag
+ and window path pop-up menu on title bar.
+ (mac_use_core_graphics) [USE_CG_DRAWING]: Set default to 1.
+
+ * macterm.h (mac_update_title_bar): Add extern.
+ (struct mac_output) [TARGET_API_MAC_CARBON]: New member `file_name'.
+ (FRAME_FILE_NAME): New macro.
+
+ * unexmacosx.c (unexec): Error if trying unexec from dumped executable.
+
+2006-04-30 Richard Stallman <rms@gnu.org>
+
+ * keymap.c (Fdefine_key): Improve error message
+ when KEY begins with a non-prefix key.
+
+2006-04-30 Martin Rudalics <rudalics@gmx.at>
+
+ * syntax.c (Fforward_comment): Don't forget to break out of the loop
+ when we skipped backward over a generic comment.
+
+2006-04-27 Nick Roberts <nickrob@snap.net.nz>
+
+ * .gdbinit (pp1, pv1): Only print value as expression is now
+ printed out by gud-print.
+ (pv1): Correct doc string.
+
+2006-04-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (store_in_keymap): Change `def' arg to not be `register'.
+ Seems to trigger a bug in gcc-amd64 4.0.2 20051125 (Red Hat 4.0.2-8):
+ keymap.c:895: error: address of register variable `def' requested.
+
+2006-04-26 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (construct_mouse_wheel): Handle negative coordinates.
+
+ * w32fns.c (w32_wnd_proc) <WM_LBUTTONDOWN, WM_RBUTTONDOWN>:
+ <WM_LBUTTONUP, WM_RBUTTONUP>: Call signal_user_input in the cases
+ where we preempt mouse_button_timer.
+
+2006-04-25 Miles Bader <miles@gnu.org>
+
+ * editfns.c (Ffield_beginning, find_field): Undo change of 2006-04-23.
+
+2006-04-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * process.h: Include headers for pid_t.
+
+2006-04-24 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (fill_stretch_glyph_string): Set s->nchars = 1 for code which
+ does last_glyph=s->first_glyph+s->nchars-1, e.g. if stretch has relief.
+ (produce_stretch_glyph): Assume that face box height and width is
+ already included in stretch glyph size so caller doesn't have to
+ consider the extra space otherwise added (fixes problem in ses.el).
+
+ * frame.c (x_set_font): Clear f->n_tool_bar_rows and current frame
+ matrices to force recalculation of tool-bar height after font change.
+
+ * xdisp.c (tool_bar_lines_needed): New local `temp_row' for clarity.
+ Clear it when done, so we don't accidentally draw a second copy of
+ the tool-bar after resetting f->n_tool_bar_rows.
+ (redisplay_tool_bar): Update tool-bar-lines frame parameter whenever
+ we recalculate f->n_tool_bar_rows.
+
+2006-04-23 Lars Hansen <larsh@soem.dk>
+
+ * editfns.c (find_field): Fix comment.
+ (Ffield_beginning): Fix bug when POS is at field beginning.
+
+2006-04-22 Eli Zaretskii <eliz@gnu.org>
+
+ * puresize.h (BASE_PURESIZE): Increase to 1205000.
+
+2006-04-21 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Fix last change. Don't recenter if
+ window start is at BEGV.
+
+ * dispextern.h (struct image): New member `corners'.
+ (TOP_CORNER, LEFT_CORNER, BOT_CORNER, RIGHT_CORNER): New macros.
+
+ * image.c (four_corners_best): New arg CORNERS specifies what pixels
+ to look at in case image has margin.
+ (x_create_bitmap_mask): Pass NULL for CORNERS to four_corners_best.
+ (image_background, image_background_transparent)
+ (x_build_heuristic_mask): Pass img->corners to four_corners_best.
+ (gif_load): Set img->corners according to image's margin spec.
+ Use img->corners values directly where applicable.
+ Save image extension data in img->data.lisp_val.
+ (gif_clear_image): New function to free img->data.lisp_val.
+ (gif_type): Use it instead of generic x_clear_image.
+ (Fimage_extension_data): New defun.
+ (syms_of_image): Defsubr it.
+
+2006-04-21 John Sullivan <john@wjsullivan.net> (tiny change)
+
+ * window.c (Fdisplay_buffer): Doc fix.
+
+2006-04-21 Eli Zaretskii <eliz@gnu.org>
+
+ * s/ms-w32.h (SYSTEM_PURESIZE_EXTRA): Increase to 25000.
+
+2006-04-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c [MAC_OS] (xpm_load_image): Fill in background field
+ while we have ximg handy.
+
+ * macmenu.c (restore_menu_items, save_menu_items): New functions
+ from xmenu.c.
+ (set_frame_menubar, digest_single_submenu): Apply 2006-04-18
+ changes for xmenu.c.
+
+ * macterm.c (x_per_char_metric): Return NULL if glyph width is 0.
+ (add_mac_font_name): New function.
+ (init_font_name_table): Use it. Adopt the first found font from
+ those having the same family name.
+
+2006-04-21 Nick Roberts <nickrob@snap.net.nz>
+
+ * xdisp.c (note_mouse_highlight): Use build_string.
+
+2006-04-20 Lars Hansen <larsh@soem.dk>
+
+ * textprop.c (Fremove_list_of_text_properties):
+ Ensure modify_region is called only when buffer is modified and that
+ signal_after_change is allways called in that case.
+
+ * print.c (PRINTFINISH): Call signal_after_change.
+
+2006-04-20 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Fix last change.
+
+ * xdisp.c (redisplay_window): If current window start is not at the
+ beginning of a line, select a new window start if buffer is modified
+ and window start is in the modified region, but the first change is
+ before window start.
+
+2006-04-18 Richard Stallman <rms@gnu.org>
+
+ * xmenu.c (restore_menu_items, save_menu_items): New fns.
+ (set_frame_menubar): Use save_menu_items. Save updated vector in
+ the frame before unwinding it. Don't use unuse_menu_items.
+ Don't use discard_menu_items.
+ (digest_single_submenu): Abort if an item is not in a pane.
+ (init_menu_items): Put the error check at the top.
+
+ * keymap.c (describe_map): Make "shadowed" warning more verbose.
+
+ * window.c (adjust_window_trailing_edge): Correctly distinguish
+ series vs parallel cases, even when window has no parent.
+
+ * abbrev.c (record_symbol): New function.
+ (Finsert_abbrev_table_description): Sort the abbrevs alphabetically.
+
+2006-04-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c (x_create_bitmap_from_data) [MAC_OS]: Don't check return
+ value of xmalloc.
+
+ * mac.c (mac_coerce_file_name_ptr, mac_coerce_file_name_desc)
+ (create_apple_event_from_event_ref, xrm_get_preference_database)
+ (cfstring_create_normalized): Don't check return value of xmalloc.
+
+ * macselect.c (get_scrap_target_type_list, defer_apple_events)
+ (copy_scrap_flavor_data, mac_handle_service_event): Don't check
+ return value of xmalloc/xrealloc.
+
+ * macterm.c (XCreateGC, x_per_char_metric, xlfdpat_create)
+ (init_font_name_table, init_font_name_table, mac_do_list_fonts)
+ (XLoadQueryFont, mac_store_apple_event): Don't check return value
+ of xmalloc.
+
+2006-04-17 Kim F. Storm <storm@cua.dk>
+
+ * window.c (coordinates_in_window): On the vertical border,
+ calculate the row number measured from the top of the window, not
+ the top of the frame.
+ (window_loop): Test w->dedicated with !NILP instead of EQ Qt.
+ (window_scroll_pixel_based): Fix off-by-one bug in 2002-12-23 change.
+
+2006-04-16 Eli Zaretskii <eliz@gnu.org>
+
+ * s/ms-w32.h (SYSTEM_PURESIZE_EXTRA): Reduce to 24000.
+
+2006-04-16 Romain Francoise <romain@orebokech.com>
+
+ * puresize.h (BASE_PURESIZE): Decrement back to 1200000.
+
+2006-04-16 Andreas Schwab <schwab@suse.de>
+
+ * puresize.h (PURESIZE_RATIO): Reduce to 10/6.
+
+2006-04-15 Romain Francoise <romain@orebokech.com>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1210000.
+
+2006-04-13 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * print.c (Fprin1_to_string): Mention in the `doc' that the
+ behavior is modified by `print-level' and `print-length'.
+
+2006-04-13 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (setup_coding_system): If eol-type is not yet decided
+ and system_eol_type is not LF, set CODING_REQUIRE_ENCODING_MASK.
+ If coding_system is nil, return 0.
+ (code_convert_region1): Even if coding_system is nil, don't skip
+ conversion if system_eol_type is not LF.
+ (code_convert_string1): Likewise.
+ (code_convert_string_norecord): Likewise.
+
+2006-04-13 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (setup_coding_system): Fix previous change.
+ (encode_coding): If eol_type is not yet decided, use system_eol_type.
+ (shrink_encoding_region): If eol_type is not yet decided and
+ system_eol_type is not LF, don't shrink.
+
+2006-04-13 Nick Roberts <nickrob@snap.net.nz>
+
+ * xdisp.c (note_mouse_highlight): Add help echo for dragging vertical
+ line.
+
+2006-04-12 Richard Stallman <rms@gnu.org>
+
+ * keyboard.c (read_key_sequence): Explicitly avoid keybuf[-1].
+
+ * process.c (conv_lisp_to_sockaddr): If FAMILY unknown, just return.
+ (Fprocess_send_eof): Abort if fail to open null device.
+
+2006-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * fns.c [HAVE_MENUS && MAC_OS]: Include macterm.h.
+
+ * image.c [MAC_OS] (xpm_load_image): Add parentheses around
+ assignment used as truth value. Add explicit braces to avoid
+ ambiguous `else'.
+ [MAC_OS] (gif_load): Remove unused variable `gcpro1'.
+
+ * lisp.h (syms_of_fontset, Fset_fontset_font): Put extern and
+ EXFUN in #ifdef HAVE_WINDOW_SYSTEM.
+ (syms_of_xfns, syms_of_xsmfns, syms_of_xselect, syms_of_xterm):
+ Put externs in #ifdef HAVE_X_WINDOWS.
+ (syms_of_macfns, syms_of_macselect, syms_of_macterm)
+ (syms_of_macmenu, syms_of_mac) [MAC_OS]: Add externs.
+ (init_mac_osx_environment) [MAC_OSX]: Add extern.
+
+ * mac.c (init_process): Remove undef.
+ (select) [MAC_OSX]: Undefine before including sysselect.h.
+ (posix_pathname_to_fsspec, fsspec_to_posix_pathname) [MAC_OSX]:
+ Remove functions and prototypes.
+ (parse_value): Add parentheses around + inside shift.
+ (path_from_vol_dir_name): Make static.
+ (get_temp_dir_name): Remove unused variables `cpb' and `dir_name'.
+ [!MAC_OSX] (get_path_to_system_folder): Likewise.
+ (Fmac_get_file_creator, Fmac_get_file_type): Remove unused
+ variable `cCode'.
+ (Fmac_coerce_ae_data): Remove unused variables `fref' and `fs'.
+ (Fmac_get_preference): Add explicit braces to avoid ambiguous `else'.
+
+ * macfns.c (x_to_mac_color): Remove unused variable `tail'.
+ (x_set_mouse_color): Remove unused variable `dpy'.
+ (Fx_create_frame): Remove unused variable `x_frame_count'.
+ (Fx_server_version): Add explicit braces to avoid ambiguous `else'.
+ (x_sync): Move from macterm.c.
+ (Fx_file_dialog): Remove unused variable `default_filter_index'.
+
+ * macmenu.c (min_menu_id): Make element type explicit.
+
+ * macselect.c (get_flavor_type_from_symbol): Remove unused
+ variable `val'.
+ (get_scrap_private_timestamp, x_get_foreign_selection)
+ (copy_scrap_flavor_data): Add explicit braces to avoid ambiguous `else'.
+ (Fmac_process_deferred_apple_events): Remove unused variables
+ `keyword', `reply', `apple_event', `count', and `err'.
+
+ * macterm.c: Don't include gnu.h.
+ (x_io_error_quitter, x_draw_image_foreground_1): Remove prototypes.
+ (x_sync): Move to macfns.c.
+ [USE_CG_DRAWING] (mac_define_fringe_bitmap): Remove unused
+ variable `mask_bits'.
+ (mac_compute_glyph_string_overhangs): Avoid ambiguous `else'.
+ (x_draw_image_glyph_string): Remove unused variable `pixmap'.
+ (x_mac_to_emacs_modifiers): Remove function.
+ (XTset_vertical_scroll_bar, mac_handle_visibility_change)
+ (x_make_frame_visible, xlfdpat_create, mac_handle_command_event):
+ Add explicit braces to avoid ambiguous `else'.
+ (x_make_frame_visible): Remove unused variables `type',
+ `original_top', and `original_left'.
+ (mac_do_list_fonts, XTread_socket): Add parentheses around && within ||.
+ (x_load_font): Remove unused variables `full_name', and `value'.
+ (do_get_menus, do_init_managers, do_check_ram_size) [!MAC_OS8]:
+ Remove functions.
+ (do_zoom_window): Reorganize variables with respect to conditionals.
+ (init_command_handler): Remove unused variable `err'.
+ [MAC_OSX] (mac_check_bundle): Remove unused variable `child'.
+
+ * macterm.h (x_set_mouse_position, x_set_mouse_pixel_position)
+ (x_make_frame_invisible, x_iconify_frame, x_free_frame_resources)
+ (x_destroy_window, x_wm_set_size_hint, x_delete_display, XFreeGC)
+ (do_menu_choice, have_menus_p, x_real_positions)
+ (x_set_menu_bar_lines, x_pixel_width, x_pixel_height, x_char_width)
+ (x_char_height, x_sync, x_set_tool_bar_lines, x_activate_menubar)
+ (free_frame_menubar): Add externs.
+
+ * unexmacosx.c: Include config.h before using HAVE_MALLOC_MALLOC_H.
+ (malloc, realloc, free): Add undefs.
+ (read_load_commands): Remove unused variable `n' and `j'.
+ (copy_data_segment): Remove unused variable `r'.
+
+ * xdisp.c (get_glyph_string_clip_rects): Add parentheses around &&
+ within ||. Add explicit braces to avoid ambiguous `else'.
+ (dump_glyph_row): Remove label for `inverse_p' from legend.
+
+ * xfaces.c (Finternal_merge_in_global_face, try_font_list):
+ Add explicit braces to avoid ambiguous `else'.
+
+2006-04-11 Micha,Ak(Bl Cadilhac <michael.cadilhac@lrde.org>
+
+ * dispnew.c (init_display): Don't init X display if the user asked
+ for a non-X display.
+
+2006-04-12 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (setup_coding_system): Use system_eol_type for default
+ coding->eol_type.
+
+2006-04-11 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * lisp.h (wrong_type_argument): Mark as NO_RETURN.
+
+ * data.c (wrong_type_argument): Try to avoid compiler warnings due
+ to the fact the function is now marked as NO_RETURN.
+
+2006-04-10 Eli Zaretskii <eliz@gnu.org>
+
+ * s/ms-w32.h (pid_t) [_MSC_VER]: New typedef.
+
+2006-04-10 Romain Francoise <romain@orebokech.com>
+
+ * xrdb.c (gethomedir): Use xstrdup.
+
+2006-04-10 Andreas Schwab <schwab@suse.de>
+
+ * xrdb.c (gethomedir): Make sure to always return a pointer that
+ can be passed to free.
+
+2006-04-09 Richard Stallman <rms@gnu.org>
+
+ * lisp.h (Fkill_emacs): Undo previous change.
+
+2006-04-08 Richard Stallman <rms@gnu.org>
+
+ * search.c (boyer_moore): Test ch >= 0400, not >.
+
+2006-04-09 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * puresize.h (pure_write_error): Mark as NO_RETURN.
+
+ * lisp.h (args_out_of_range, args_out_of_range_3, Fkill_emacs):
+ Likewise.
+
+2006-04-08 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (w32_wnd_proc) <WM_MOUSEMOVE>: Ignore mouse movements
+ if a menu is active on this frame.
+
+2006-04-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * lisp.h (report_file_error): Mark as NO_RETURN.
+
+2006-04-08 Eli Zaretskii <eliz@gnu.org>
+
+ * alloc.c [STDC_HEADERS]: Include stddef.h.
+
+ * lisp.h (PSEUDOVECSIZE): Fix last change.
+
+2006-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * process.h (struct Lisp_Process): Replace Lisp_Objects `pid',
+ `raw_status_high', and `raw_status_low' with plain integers, and move
+ them to the end of the structure.
+
+ * alloc.c (allocate_process): Use PSEUDOVECSIZE to initialize the
+ pseudovector's size field so only the Lisp_Object fields get GC'd.
+
+ * process.c (update_status, make_process, Fdelete_process)
+ (Fprocess_status, list_processes_1, start_process_unwind)
+ (create_process, Fmake_network_process, server_accept_connection)
+ (wait_reading_process_output, send_process, Fprocess_running_child_p)
+ (process_send_signal, proc_encode_coding_system, Fprocess_send_eof)
+ (sigchld_handler, status_notify): Adjust to new non-Lisp fields for
+ `pid' and `raw_status'.
+ (Fprocess_id, Fsignal_process): Same, and additionally use floats when
+ representing PIDs that are larger than most-positive-fixnum.
+
+ * keymap.c (describe_map): Only use XINT if we checked INTEGERP.
+
+ * lisp.h (OFFSETOF, PSEUDOVECSIZE): New macros.
+
+2006-04-08 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (Fx_show_tip): Add 3 to the 5th arg of SetWindowPos.
+
+2006-04-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * editfns.c (TM_YEAR_IN_ASCTIME_RANGE): New macro, identical to
+ ../lib-src/b2m.c and ../lib-src/editfns.c.
+ (Fcurrent_time_string): Use it.
+ Document that the year might not consume 4 columns if it's outside
+ the range 1000-9999.
+ Check for asctime failure.
+ Don't assume that the output string length is always exactly 24.
+
+2006-04-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (XTread_socket): Initialize variable `f' before its use.
+
+2006-04-03 Kenichi Handa <handa@m17n.org>
+
+ * image.c: Include "charset.h" and "coding.h".
+ (x_find_image_file): Return an encoded file name.
+
+2006-04-01 Eli Zaretskii <eliz@gnu.org>
+
+ * configure: Regenerated.
+
+2006-03-31 Kenichi Handa <handa@m17n.org>
+
+ * xfns.c (xg_set_icon): Delete superfluous UNGCPRO.
+
+2006-03-30 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * xdisp.c (syms_of_xdisp): Fix variable name.
+
+2006-03-30 Kenichi Handa <handa@m17n.org>
+
+ * xterm.c (x_term_init): Delete superfluous UNGCPRO.
+
+2006-03-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * keyboard.c (process_tool_bar_item): Reorder dummy args.
+
+2006-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keyboard.c (tool_bar_items): Use map_keymap.
+ (process_tool_bar_item): Add dummy args to fit the required interface.
+
+2006-03-25 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit (pr, pp, pp1, pv, pv1): Force print_output_debug_flag
+ to zero before calling debug_print or safe_debug_print.
+
+ * print.c (print_output_debug_flag): New global variable.
+ (Fexternal_debugging_output) [WINDOWSNT]: Don't call
+ OutputDebugString if print_output_debug_flag is zero.
+
+2006-03-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * editfns.c (TM_YEAR_BASE): Move up, so the changes below can use it.
+ (Fdecode_time, Fencode_time): Use TM_YEAR_BASE instead of 1900.
+ (Fdecode_time): Cast tm_year to EMACS_INT.
+ (Fcurrent_time_string): Report an invalid time specification if
+ the argument is invalid. Also, check for out-of-range time stamps.
+
+2006-03-24 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (handle_one_xevent):
+ * w32term.c (w32_read_socket):
+ * macterm.c (XTread_socket): Don't let key-press clear mouse face
+ on in toolbar window if mouse-highlight is an integer.
+
+ * fns.c (sxhash_list): Include last non-nil CDR in hash.
+
+2006-03-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (enum mac_menu_kind): New enum.
+ (min_menu_id): New variable.
+ (POPUP_SUBMENU_ID, MIN_POPUP_SUBMENU_ID, MIN_MENU_ID)
+ (MIN_SUBMENU_ID): Remove defines. All uses are replaced with
+ min_menu_id and enumerators in enum mac_menu_kind.
+ (fill_menu, dispose_menus, install_menu_quit_handler): New arg KIND.
+ All uses changed. Add range check for menu ID.
+ (fill_menubar): Add range check for menu ID.
+ [HAVE_CANCELMENUTRACKING] (menu_quit_handler): Check error code of
+ GetEventParameter.
+ (set_frame_menubar, mac_menu_show): Call install_menu_quit_handler
+ for each menu kind.
+
+2006-03-22 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c: Undo 2006-03-21 change.
+
+ * term.c: Define aliases for append_glyph and produce_stretch_glyph
+ when `static' is defined to avoid name clash with those in xdisp.c.
+
+ * process.c (Faccept_process_output): Fix to comply with lisp
+ reference. Change arg "timeout" to "seconds" and allow both
+ integer and float value. Change arg "timeout-msec" to "millisec"
+ and interpret" as milliseconds rather than microseconds. Fix doc
+ string accordingly.
+
+2006-03-21 Ken Raeburn <raeburn@raeburn.org>
+
+ * xdisp.c (store_next_glyph): Rename from append_glyph.
+ (generate_stretch_glyph): Rename from produce_stretch_glyph.
+ All callers changed accordingly.
+
+2006-03-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c: x_session_initialized new variable.
+ (x_term_init): Use x_session_initialized to check if
+ x_session_initialize should be called.
+ (x_initialize): Initialize x_session_initialized.
+
+2006-03-21 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (draw_fringe_bitmap): Don't calculate default overlay arrow
+ bitmap here, but ...
+ (update_window_fringes): ... here, so we can test if it has changed.
+
+2006-03-20 Andreas Schwab <schwab@suse.de>
+
+ * dispnew.c (init_display): Check DISPLAY here.
+
+ * emacs.c (main): Don't check here.
+
+ * xterm.c (x_display_ok): Don't use DISPLAY env var.
+
+2006-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (window_scroll_pixel_based): Yet another int/Lisp_Object
+ mixup (YAILOM).
+
+2006-03-20 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (main): Fix last change.
+
+2006-03-20 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Fwrite_region): Set visit_file to Qnil before GCPRO it.
+
+ * keymap.c (map_keymap): Set tail to Qnil before GCPRO it.
+
+ * xfns.c (xg_set_icon): Remove unnecessary GCPRO.
+
+ * xterm.c (x_term_init): Remove unnecessary GCPRO.
+
+2006-03-19 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_cursor_from_row): Fix cursor property on overlay string,
+ so it doesn't associate overlay string with following glyph by default.
+ Allow integer property value to specify explicit number of buffer
+ positions associate with overlay string.
+
+2006-03-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * xterm.c (x_display_ok): Fix minor bug and compilation warnings.
+
+2006-03-18 Nozomu Ando <nand@mac.com>
+
+ * m/pmax.h (BROKEN_NOCOMBRELOC) [__NetBSD__]: Define.
+ (LIB_STANDARD, START_FILES) [__NetBSD__]: Don't define.
+ (START_FILES, RUN_TIME_REMAP, UNEXEC) [__NetBSD__, __OpenBSD__]:
+ Don't redefine.
+
+ * m/mips.h: Don't use unexmips on NetBSD.
+ (LIBS_MACHINE): Move definition lower, so it doesn't use
+ LD_SWITCH_MACHINE, START_FILES, LIB_STANDARD, LIBS_TERMCAP,
+ C_SWITCH_MACHINE, and C_DEBUG_SWITCH.
+
+ * unexelf.c [BROKEN_NOCOMBRELOC]: Include assert.h.
+ (unexec) [BROKEN_NOCOMBRELOC]: Handle platforms whose nocombreloc
+ option is broken (e.g., MIPS/NetBSD).
+
+2006-03-18 Craig McDaniel <craigmcd@gmail.com> (tiny change)
+
+ * sheap.c (STATIC_HEAP_SIZE): Enlarge STATIC_HEAP_SIZE to 12MB.
+ Remove the HAVE_X_WINDOWS conditional.
+
+2006-03-18 Vivek Dasmohapatra <vivek@etla.org> (tiny change)
+
+ * emacs.c (main): If user asks for a display that is unavailable,
+ simulate -nw.
+
+ * xterm.c (x_display_ok): New function.
+
+ * xterm.h: Add prototype for x_display_ok.
+
+2006-03-18 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (Fw32_select_font): Doc fix.
+
+2006-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c [MAC_OS] (XPutPixel, XGetPixel)
+ [!WORDS_BIG_ENDIAN && USE_CG_DRAWING]: Don't use specialized
+ version when depth is 32.
+ (mac_create_cg_image_from_image) [MAC_OS && USE_CG_DRAWING]:
+ New function.
+ (prepare_image_for_display) [MAC_OS && USE_CG_DRAWING]: Use it.
+ (x_clear_image_1) [MAC_OS && USE_CG_DRAWING]: Release CGImage.
+
+ * macterm.c (XCreatePixmap) [!WORDS_BIG_ENDIAN && USE_CG_DRAWING]:
+ Create GWorld in ARGB pixel format.
+ (mac_copy_area, mac_copy_area_with_mask) [USE_CG_DRAWING]:
+ Remove functions.
+ (x_draw_image_foreground) [USE_CG_DRAWING]: Use mac_draw_cg_image
+ instead of mac_copy_area/mac_copy_area_with_mask.
+
+2006-03-15 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (extend_face_to_end_of_line): Always add space glyph to
+ empty row. Fixes memory corruption revealed by 2006-03-02 change.
+ (display_tool_bar_line): Skip empty tool-bar line if HEIGHT < 0.
+ (tool_bar_lines_needed): Fix tool-bar display in case the tool-bar
+ width is exactly the same as the window width. Don't count a final
+ empty tool-bar line (pass HEIGHT = -1 to display_tool_bar_line).
+
+2006-03-15 Juanma Barranquero <lekktu@gmail.com>
+
+ * fringe.c (w32_init_fringe, w32_reset_fringes): Revert to being
+ conditional on HAVE_NTGUI, not WINDOWS_NT.
+
+2006-03-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispextern.h (mac_init_fringe) [MAC_OS]: Add prototype.
+
+ * fringe.c (mac_init_fringe) [MAC_OS]: New function.
+
+ * macterm.c (mac_initialize) [USE_CG_DRAWING]: Call mac_init_fringe.
+ (max_fringe_bmp, fringe_bmp) [USE_CG_DRAWING]: New variables.
+ (mac_define_fringe_bitmap, mac_destroy_fringe_bitmap)
+ (mac_draw_cg_image) [USE_CG_DRAWING]: New functions.
+ (mac_draw_bitmap) [USE_CG_DRAWING]: Remove function.
+ (x_draw_fringe_bitmap) [USE_CG_DRAWING]: Use mac_draw_cg_image
+ instead of mac_draw_bitmap.
+ (x_redisplay_interface) [USE_CG_DRAWING]: Set handlers for
+ define_fringe_bitmap and destroy_fringe_bitmap.
+
+2006-03-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * xterm.c (x_uncatch_errors): Block input for entire function.
+
+2006-03-12 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fx_create_frame): Remove call to
+ Qface_set_after_frame_default (from xfns.c 2003-05-26).
+
+ * w32menu.c (Fx_popup_menu): Call w32_free_menu_strings when
+ finished with the menu.
+
+ * w32term.c: Sync 2005-10-24 xterm.c changes.
+ (last_mouse_glyph_frame): New var.
+ (note_mouse_movement): Say mouse moved if current frame differs
+ from last_mouse_glyph_frame, and update last_mouse_glyph_frame.
+ (w32_mouse_position): Set last_mouse_glyph_frame.
+ Remove OLD_REDISPLAY_CODE block.
+
+2006-03-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macgui.h [USE_ATSUI && MAC_OSX]: Define USE_CG_TEXT_DRAWING to 1.
+
+ * macterm.h (struct mac_output) [USE_CG_DRAWING]: New member cg_context.
+ (mac_prepare_for_quickdraw) [USE_CG_DRAWING]: Add prototype.
+
+ * mac.c (sys_select) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
+
+ * macfns.c (x_create_tip_frame): Apply 2006-03-11 change for xfns.c.
+
+ * macterm.c (mac_draw_rectangle, x_draw_glyph_string_foreground)
+ (x_draw_composite_glyph_string_foreground)
+ (x_draw_image_foreground): Undo previous changes.
+ (x_draw_hollow_cursor): Likewise. Subtract 1 from the last
+ argument of mac_draw_rectangle.
+ (CG_SET_FILL_COLOR, CG_SET_STROKE_COLOR): New macros.
+ (mac_draw_string_common, mac_draw_image_string_cg): Use them.
+ (FRAME_CG_CONTEXT) [USE_CG_DRAWING]: New macro.
+ (mac_begin_cg_clip, mac_end_cg_clip, mac_prepare_for_quickdraw)
+ [USE_CG_DRAWING]: New functions.
+ (mac_draw_line, mac_erase_rectangle, mac_clear_window)
+ (mac_fill_rectangle, mac_draw_rectangle, mac_draw_string_common)
+ (mac_draw_image_string_cg) [USE_CG_DRAWING]: Add Quartz 2D drawing part.
+ (mac_draw_bitmap, mac_invert_rectangle, mac_draw_string_common)
+ (mac_copy_area, mac_scroll_area, x_scroll_bar_create)
+ (x_scroll_bar_remove, XTset_vertical_scroll_bar, x_set_window_size)
+ (XTread_socket) [USE_CG_DRAWING]: Call mac_prepare_for_quickdraw.
+
+2006-03-12 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+
+ * xfns.c (x_icon): Disable redundant call to `x_wm_set_window_state'.
+
+2006-03-11 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (signal_user_input): New function.
+ (post_character_message): Use it for keyboard input.
+ (w32_msg_pump): Use it for mouse input.
+
+2006-03-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * window.c: Rename preserve_y to window_scroll_pixel_based_preserve_y.
+ (window_scroll_pixel_based, syms_of_window): Adapt to above change.
+
+2006-03-11 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (w32_wnd_proc): Ignore middle and extra button events
+ if a menu is already active (the menubar_active flag is on).
+
+2006-03-11 David Ponce <david@dponce.com>
+
+ * xfns.c (x_create_tip_frame): Preserve received parms by copying them.
+
+2006-03-11 Eli Zaretskii <eliz@gnu.org>
+
+ * w32term.c: Add x_fully_uncatch_errors and x_catching_errors to
+ the list of unused display error handling functions.
+
+ * eval.c (unwind_to_catch): Call x_fully_uncatch_errors only if
+ HAVE_X_WINDOWS.
+ (internal_condition_case, internal_condition_case_1)
+ (internal_condition_case_2): Call x_catching_errors only if
+ HAVE_X_WINDOWS.
+
+ * vm-limit.c [HAVE_GETRLIMIT]: Don't define unconditionally.
+ Don't include sys/resource.h unless defined.
+
+2006-03-11 Richard Stallman <rms@gnu.org>
+
+ * keymap.c (describe_map): Shorten string to indicate shadowed binding.
+
+ * vm-limit.c (get_lim_data, lim_data, data_space_start):
+ Move from mem-limits.h.
+ (enum warnlevel): New data type.
+ (check_memory_limits): Rewrite the logic about warnings.
+ Use standard `struct rlimit'. Check return values for nonsense.
+ (memory_warnings): Always clear lim_data.
+
+ * mem-limits.h (get_lim_data, lim_data, data_space_start):
+ Move to vm-limit.c.
+
+ * xterm.c (x_fully_uncatch_errors, x_catching_errors): New functions.
+
+ * eval.c (unwind_to_catch): Call x_fully_uncatch_errors.
+ (internal_condition_case_1, internal_condition_case_2):
+ Abort if within unclosed x_catch_errors.
+
+2006-03-11 Romain Francoise <romain@orebokech.com>
+
+ * process.c (Vprocess_adaptive_read_buffering): Doc fix.
+
+2006-03-11 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+
+ * lisp.h: Remove duplicate prototypes. Make the prototype of
+ getloadavg be conditioned on HAVE_GETLOADAVG being undefined.
+
+2006-03-11 Eli Zaretskii <eliz@gnu.org>
+
+ * xterm.c (x_draw_hollow_cursor): Subtract 1 from the last
+ argument of XDrawRectangle.
+
+ * xdisp.c (get_phys_cursor_geometry): Don't decrease height by 1.
+
+ * macterm.c (mac_draw_rectangle): Don't add 1 to width and height.
+ (x_draw_glyph_string_foreground)
+ (x_draw_composite_glyph_string_foreground)
+ (x_draw_image_foreground): Don't subtract 1 from width and height
+ arguments to mac_draw_rectangle.
+ (x_draw_hollow_cursor): Add 1 to w->phys_cursor_width.
+
+2006-03-10 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (USE_POSIX_MEMALIGN): Fix last change.
+
+2006-03-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (USE_POSIX_MEMALIGN): New macro.
+ (ABLOCKS_BASE, lisp_align_malloc, lisp_align_free): Use it.
+
+2006-03-09 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (DECODE_EMACS_MULE_COMPOSITION_CHAR): Fix decoding
+ ASCII component of a composition.
+
+2006-03-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * window.c: Declare preserve_y as a static global variable.
+ (window_scroll_pixel_based): No longer declare preserve_y;
+ it is global now.
+ (syms_of_window): Set preserve_y to -1.
+
+2006-03-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c [MAC_OS] (XPutPixel): Set alpha channel bits if pixmap
+ depth is 32.
+ [MAC_OS] (XGetPixel): Strip off alpha channel bits if pixmap
+ depth is 32.
+
+2006-03-06 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (handle_invisible_prop): Don't update it->position with
+ a buffer position if we're in a display string.
+
+2006-03-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.h (MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH)
+ (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH): New defines.
+
+ * macfns.c (x_default_scroll_bar_color_parameter)
+ (x_set_scroll_bar_foreground, x_set_scroll_bar_background):
+ Remove unnecessary prototypes.
+ (x_set_scroll_bar_default_width):
+ Use MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH.
+ (mac_set_scroll_bar_width): New function.
+ (mac_frame_parm_handlers): Set it as handler for scroll-bar-width.
+
+ * macterm.c (get_control_part_bounds): Fix type of return value.
+ (x_set_toolkit_scroll_bar_thumb, x_scroll_bar_create)
+ (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]: Don't show
+ scroll bar if it is not tall enough to display scroll bar thumb.
+ [USE_CARBON_EVENTS] (mac_convert_event_ref)
+ (mac_handle_command_event, mac_handle_window_event)
+ (mac_handle_mouse_event): Check error code of GetEventParameter.
+ (convert_fn_keycode) [MAC_OSX]: Likewise.
+
+2006-03-05 Andreas Schwab <schwab@suse.de>
+
+ * xselect.c (x_catch_errors_unwind): Fix missing return value.
+
+2006-03-02 Kim F. Storm <storm@cua.dk>
+
+ * frame.h (struct frame): New member n_tool_bar_rows.
+
+ * xdisp.c: Minimize the unpleasent visual impact of the requirement
+ that non-toolkit tool-bars must occupy an integral number of screen
+ lines, by distributing the rows evenly over the tool-bar screen area.
+ (Vtool_bar_border): New variable.
+ (syms_of_xdisp): DEFVAR_LISP it.
+ (display_tool_bar_line): Add HEIGHT arg for desired row height.
+ Make tool-bar row the desired height. Use default face for border
+ below tool-bar.
+ (tool_bar_lines_needed): Add N_ROWS arg. Use it to return number of
+ actual tool-bar rows.
+ (redisplay_tool_bar): Calculate f->n_tool_bar_rows initially.
+ Adjust the height of the tool-bar rows to fill tool-bar screen area.
+ (redisplay_tool_bar): Calculate f->n_tool_bar_rows when tool-bar area
+ is resized.
+
+2006-03-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * search.c (Fregexp_quote): Do not precede a literal `]' with two
+ backslashes to try to make clear that it has a literal meaning; it
+ does not do that. (It could close a character alternative
+ containing a backslash.)
+
+2006-02-28 Chong Yidong <cyd@stupidchicken.com>
+
+ * xselect.c (x_catch_errors_unwind): New function.
+ (x_reply_selection_request): Put x_uncatch_errors in an unwind.
+ (Fx_get_atom_name): Call x_uncatch_errors earlier.
+
+ * window.c (Qscroll_up, Qscroll_down): New syms.
+ (window_scroll_pixel_based): Make preserve_y static to avoid
+ getting point stuck when scrolling 1 line.
+
+2006-02-26 Chong Yidong <cyd@stupidchicken.com>
+
+ * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary argument.
+
+ * xterm.c (x_load_font, x_term_init, XTmouse_position)
+ (handle_one_xevent, x_connection_closed, x_list_fonts):
+ No arg for x_uncatch_errors.
+
+ * xselect.c (x_own_selection, x_decline_selection_request)
+ (x_reply_selection_request, x_get_foreign_selection)
+ (Fx_get_atom_name, Fx_send_client_event): Likewise.
+
+ * xfns.c (x_real_positions, x_set_mouse_color, Fx_focus_frame):
+ Likewise.
+
+2006-02-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * lread.c: Declare Vload_file_rep_suffixes instead of
+ deleted variable default_suffixes.
+ (Fget_load_suffixes): New function.
+ (Fload): Use Fget_load_suffixes and Vload_file_rep_suffixes.
+ No longer use deleted variable default_suffixes. Update docstring.
+ (syms_of_lread): defsubr Sget_load_suffixes.
+ Expand `load-suffixes' docstring.
+ Delete default_suffixes and DEFVAR_LISP the new variable
+ `load-file-rep-suffixes'.
+
+ * w32.c (check_windows_init_file): Use Fget_load_suffixes instead
+ of Vload_suffixes.
+
+ * lisp.h: EXFUN Fget_load_suffixes.
+ Extern Vload_file_rep_suffixes.
+
+ * eval.c (specpdl_ptr): Remove volatile qualifier for consistency
+ with lisp.h.
+
+2006-02-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp.h (struct specbinding, specpdl_ptr): Remove the volatile
+ qualifier which was trying to avoid the bug that was fixed by
+ yesterday's changes to xterm.c.
+
+2006-02-25 Chong Yidong <cyd@stupidchicken.com>
+
+ * xterm.h (x_catch_errors) Return value changed to void.
+ (x_uncatch_errors): Delete unused count argument.
+
+ * xterm.c (x_catch_errors): Don't use record_unwind_protect, since
+ it can be called in a signal handler.
+ (x_catch_errors_unwind): Function deleted.
+ (x_uncatch_errors): Deallocate last x_error_message_stack struct.
+ (x_check_errors): Call x_uncatch_errors before signalling error.
+
+ (x_load_font, x_term_init, XTmouse_position, handle_one_xevent)
+ (x_connection_closed, x_list_fonts): Use new versions of
+ x_catch_errors and x_uncatch_errors.
+
+ * xselect.c (x_own_selection, x_decline_selection_request)
+ (x_reply_selection_request, x_get_foreign_selection)
+ (Fx_get_atom_name, Fx_send_client_event): Likewise.
+
+ * xfns.c (x_real_positions, x_set_mouse_color, Fx_focus_frame):
+ Likewise.
+
+ * eval.c (record_unwind_protect): Add an assertion.
+
+2006-02-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * process.c (Fmake_network_process): Init the process's mark.
+
+2006-02-25 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (modify_overlay): Force redisplay if we modify an
+ overlay at the end of the buffer.
+
+2006-02-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_image_for_pixmap): If x_find_image_file returns
+ nil the image file has been removed, in that case use the (cached)
+ pixmap.
+
+2006-02-24 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Finsert_file_contents): When a text is replaced
+ partially, be sure to set point before the inserted characters.
+
+2006-02-23 Zhang Wei <id.brep@gmail.com> (tiny change)
+
+ * xfns.c (Fx_file_dialog): Return a decoded file name.
+
+2006-02-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispnew.c (update_text_area): Avoid needless redraw of rightmost
+ glyph whose face is extended to the text area end.
+
+ * macterm.c (x_set_toolkit_scroll_bar_thumb): Don't set control
+ values if control is not visible or values are not changed.
+
+2006-02-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Fwindow_list): Check `window' before doing XWINDOW.
+ The default `window' should not be "on a different frame".
+
+2006-02-22 Kim F. Storm <storm@cua.dk>
+
+ * indent.c (Fvertical_motion): Only try to move back if we can.
+
+2006-02-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macgui.h (struct _XGC) [!MAC_OSX || !USE_ATSUI]: New member
+ n_clip_rects.
+
+ * macmenu.c (digest_single_submenu): Apply 2006-02-19 change for
+ xmenu.c.
+
+ * macterm.c (GC_CLIP_REGION): Remove macro.
+ (mac_begin_clip, mac_end_clip): Take arg GC instead of REGION.
+ All uses changed. Don't do clipping if n_clip_rects is zero.
+ (mac_set_clip_rectangles): Use xassert instead of abort.
+ Set n_clip_rects. Don't make clip_region empty when number of
+ clipping rectangles is zero.
+ (mac_reset_clip_rectangles): Set n_clip_rects directly instead of
+ calling mac_set_clip_rectangles.
+ (x_set_toolkit_scroll_bar_thumb): Temporarily hide scroll bar to
+ avoid multiple redraws.
+
+2006-02-22 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (draw_fringe_bitmap): Fix overlay-arrow display.
+
+2006-02-21 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (syms_of_fringe) <fringe-bitmaps>: Doc fix.
+
+2006-02-21 Zhang Wei <brep@newsmth.org>
+
+ * xfns.c (Fx_file_dialog, Motif and GTK): DECODE_FILE before
+ returning it.
+
+2006-02-21 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change)
+
+ * fringe.c (horizontal_bar_bits): Rename from `horisontal_bar_bits'.
+ (standard_bitmaps): Use it.
+
+2006-02-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_draw_string_common): Remove arg MODE. New arg
+ BG_WIDTH. All uses changed. Draw background if BG_WIDTH is not zero.
+ (mac_draw_image_string, mac_draw_image_string_16): New arg BG_WIDTH.
+ [USE_CG_TEXT_DRAWING] (mac_draw_image_string_cg): Rename from
+ mac_draw_string_cg. New arg BG_WIDTH. All uses changed.
+ Draw background if BG_WIDTH is not zero. Use float constants as
+ divisors instead of double. Use alloca instead of xmalloc/xfree.
+ (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
+ [!MAC_OS8 || USE_ATSUI]: Background may be drawn using
+ mac_draw_image_string* functions.
+ (XLoadQueryFont) [MAC_OS8 && USE_ATSUI]: Don't adjust heights of
+ some fonts when srcCopy text transfer mode might be used.
+ (mac_begin_clip, mac_end_clip): Check if region is empty.
+ (mac_set_clip_rectangles): When resetting clip region, make it
+ empty instead of disposing of it.
+
+2006-02-20 Kim F. Storm <storm@cua.dk>
+
+ * Makefile.in: Add fringe.elc to WINDOW_SUPPORT.
+
+ * buffer.h (struct buffer): New members fringe_indicator_alist and
+ fringe_cursor_alist.
+
+ * buffer.c (init_buffer_once): Set dummy default values for
+ fringe-indicator-alist and fringe-cursor-alist. The proper
+ default values are set by pre-loading fringe.el.
+ (syms_of_buffer): defvar_per_buffer new fringe-indicator-alist and
+ fringe-cursor-alist buffer-local variables and defvar_lisp_nopro
+ corresponding default- variables.
+
+ * fringe.c (enum fringe_bitmap_type): Remove. Change all uses
+ to use `int'.
+ (NO_FRINGE_BITMAP, UNDEF_FRINGE_BITMAP, MAX_STANDARD_FRINGE_BITMAPS):
+ Define explicitly.
+ (Qtruncation, Qcontinuation, Qempty_line, Qtop_bottom)
+ (Qhollow_small): New variables.
+ (syms_of_fringe): Intern and staticpro them.
+ (question_mark_bits): Rename from unknown_bits.
+ (left_curly_arrow_bits): Rename from continuation_bits.
+ (right_curly_arrow_bits): Rename from continued_bits.
+ (left_triangle_bits): Rename from ov_bits.
+ (right_triangle_bits): Add.
+ (filled_rectangle_bits): Rename from filled_box_cursor_bits.
+ (hollow_rectangle_bits): Rename from hollow_box_cursor_bits.
+ (filled_square_bits): Add.
+ (vertical_bar_bits): Rename from bar_cursor_bits.
+ (horizontal_bar_bits): Rename from hbar_cursor_bits.
+ (empty_line_bits): Rename from zv_bits.
+ (standard_bitmaps): Update to use new names.
+ (draw_fringe_bitmap_1): Make static.
+ (get_logical_cursor_bitmap, get_logical_fringe_bitmap): New functions
+ to map from logical cursors and indicators to physical bitmaps.
+ (draw_fringe_bitmap): Resolve fringe cursor and overlay-arrow
+ bitmaps using symbol names instead of bitmap numbers.
+ (update_window_fringes): Use logical indicator symbol names
+ instead of bitmap numbers for logical. Add bitmap cache.
+ (LEFT_FRINGE, RIGHT_FRINGE): New helper macros.
+
+2006-02-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * regex.c: Revert 2006-02-19 change.
+ (xmalloc, xrealloc): Define these when not linked to Emacs.
+ Redefine malloc -> xmalloc, realloc -> xrealloc as in Emacs case.
+
+2006-02-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * regex.c (extend_range_table_work_area): Fix typo.
+
+2006-02-19 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (x_catch_errors): Use xmalloc.
+
+ * regex.c (extend_range_table_work_area): Call xmalloc and xrealloc.
+ (regex_compile): Likewise.
+ (regcomp): Use xmalloc.
+
+ * gtkutil.c (malloc_widget_value): Use xmalloc.
+
+ * vm-limit.c [HAVE_GETRLIMIT]: Include sys/resource.h.
+ (check_memory_limits) [HAVE_GETRLIMIT]: Use getrlimit.
+
+ * xmenu.c (digest_single_submenu): When pane_string is empty,
+ do initialize save_wv.
+
+2006-02-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (update_menu_bar) [MAC_OS]: Don't set
+ w->update_mode_line if arg F is not the selected frame.
+
+ * macmenu.c (popup_activated_flag, submenu_id)
+ (next_menubar_widget_id): Remove variables.
+ (initialize_frame_menubar): Remove function.
+ (pop_down_menu, mac_menu_show): Simplify save value.
+ (dispose_menus): New function.
+ (pop_down_menu, fill_menubar): Use it.
+ (fill_submenu): Remove function. All uses changed to fill_menu.
+ (add_menu_item): Remove args SUBMENU and FORCE_DISABLE. New arg
+ POS. Don't call SetMenuItemHierarchicalID here.
+ (fill_menu): Add arg SUBMENU_ID. Return submenu_id that is to be
+ used next. Call SetMenuItemHierarchicalID here.
+ (fill_menubar): Add arg DEEP_P. All uses changed. Clean up menu
+ objects if needed. Reuse existing menu bar titles if possible.
+ (set_frame_menubar): Don't clean up menu objects here.
+
+2006-02-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * window.c (window_min_size_1): Ensure room for the scroll bar and
+ fringes.
+
+2006-02-17 Romain Francoise <romain@orebokech.com>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1200000.
+
+2006-02-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (Fmake_symbol): Comment-out left-over assert from before the
+ addition of the BLOCK_INPUTs.
+
+2006-02-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.c (Fset_window_scroll_bars): Doc fix.
+
+2006-02-17 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (display_mode_element): Call display_string with correct
+ PREC arg (which must be a number of characters, not column width).
+
+2006-02-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * frame.c (x_get_arg): Clear out PARAM in ALIST also on Mac.
+
+ * macfns.c (x_set_menu_bar_lines): Menu bar is always shown on Mac.
+
+ * macmenu.c (set_frame_menubar): Don't call DrawMenuBar.
+
+2006-02-14 Richard M. Stallman <rms@gnu.org>
+
+ * frame.c (x_get_arg): Clear out all occurrences of PARAM in ALIST.
+
+ * m/ibms390x.h: New file.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_detach_callback): Set show-arrow to the
+ value of x-gtk-whole-detached-tool-bar.
+ (xg_tool_bar_attach_callback): Set show-arrow to TRUE.
+
+ * xfns.c (syms_of_xfns): New variable: x-gtk-whole-detached-tool-bar.
+
+2006-02-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_x_to_emacs_modifiers): Make non-static.
+
+ * xterm.h: Declare x_x_to_emacs_modifiers.
+
+ * gtkutil.c (xg_tool_bar_button_cb): New function.
+ (xg_tool_bar_callback): Call x_x_to_emacs_modifiers to
+ store modifiers in event.
+ (update_frame_tool_bar): Connect button-release-event to
+ xg_tool_bar_button_cb.
+
+2006-02-13 Richard M. Stallman <rms@gnu.org>
+
+ * .gdbinit (xwindow): Update the code to show the window box.
+
+2006-02-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (note_mouse_movement): Check for NULL FRAME_X_OUTPUT (frame).
+
+2006-02-12 Richard M. Stallman <rms@gnu.org>
+
+ * cmds.c (internal_self_insert): Handle weird auto-fill-function.
+
+2006-02-11 Eli Zaretskii <eliz@gnu.org>
+
+ * keyboard.c (Venable_disabled_menus_and_buttons): New variable.
+ (syms_of_keyboard): DEVFAR_LISP and initialize it.
+ (parse_tool_bar_item, parse_menu_item): If that variable is
+ non-nil, don't disable menu items and tool-bar buttons.
+
+2006-02-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * doc.c (Fsubstitute_command_keys): Doc fix.
+
+2006-02-10 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * data.c (Findirect_function): Rewrite docstring.
+ Fix omission bug: Declare new arg NOERROR.
+
+2006-02-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (x_set_mouse_color): Don't call rif->define_frame_cursor
+ if window_desc is not set yet.
+ (Fx_create_frame): Remove variable x_frame_name. Apply 2005-12-07
+ and 2006-01-26 changes for xfns.c. Call x_iconify_frame if frame
+ parameter `visibility' is `icon'.
+ (Fx_create_frame, x_create_tip_frame): Use "fontset-standard"
+ instead of "fontset-mac".
+ (Fx_focus_frame): New defun.
+ (syms_of_macfns): Defsubr it.
+
+ * macterm.c (mac_define_frame_cursor): Don't change pointer shape
+ for unfocused frame.
+ (x_raise_frame): Call BringToFront instead of SelectWindow.
+ (x_lower_frame): Use NULL instead of nil.
+ (x_make_frame_visible): Don't call SelectWindow.
+ (XTread_socket): Increment handling_signal at the start, decrement
+ it at the end.
+ [USE_CG_TEXT_DRAWING] (init_cg_text_anti_aliasing_threshold): Use
+ CFPreferencesGetAppIntegerValue instead of Fmac_get_preference.
+
+2006-02-10 Kim F. Storm <storm@cua.dk>
+
+ * data.c (Findirect_function): Add NOERROR arg. All callers changed
+ to pass Qnil for NOERROR.
+
+ * keymap.c (current_minor_maps_error): Remove.
+ (current_minor_maps): Pass Qt for NOERROR to Findirect_function
+ instead of using internal_condition_case_1+current_minor_maps_error.
+
+2006-02-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Must note mouse movement even for nil
+ frames for GTK, in that case it is the tool bar. This is so that
+ highlighted text get reset properly.
+
+2006-02-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * alloc.c (Fmake_bool_vector, Fpurecopy): Doc fixes.
+
+2006-02-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * window.c (adjust_window_trailing_edge): Check that shrinking
+ does not set a window to size zero or less.
+
+2006-02-08 Miles Bader <miles@gnu.org>
+
+ * editfns.c (Fconstrain_to_field): Use Fget_char_property instead
+ of Fget_text_property (other field functions work with overlays as
+ well as text-properties).
+
+2006-02-07 Kenichi Handa <handa@m17n.org>
+
+ * dispextern.h (unibyte_display_via_language_environment): Extern it.
+
+ * xterm.h (unibyte_display_via_language_environment):
+ * w32term.h (unibyte_display_via_language_environment):
+ * macterm.h (unibyte_display_via_language_environment): Delete extern.
+
+2006-02-07 Kenichi Handa <handa@m17n.org>
+
+ * term.c (append_glyph): Refer to it->char_to_display instead of it->c.
+ (produce_glyphs): Set the character to print in
+ it->char_to_display. Handle unibyte-display-via-language-environment.
+ (produce_stretch_glyph): Set character to print in it->char_to_display.
+
+2006-02-06 Kenichi Handa <handa@m17n.org>
+
+ * lread.c (openp): Initialize encoded_fn before GCPRO it.
+
+2006-02-05 Ken Raeburn <raeburn@raeburn.org>
+
+ * editfns.c (Fconstrain_to_field): Fix int/Lisp_Object mixup.
+
+ * lisp.h (XPNTR) [!NO_UNION_TYPE && !HAVE_SHM && !DATA_SEG_BITS]:
+ Cast bitfield value to EMACS_INT, to suppress gcc warning.
+
+ * xrdb.c (malloc, realloc, free) [emacs]: Undefine macros before
+ defining.
+
+2006-02-03 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c: Cache last merged escape glyph face.
+ (last_escape_glyph_frame, last_escape_glyph_face_id)
+ (last_escape_glyph_merged_face_id): New variables.
+ (get_next_display_element): Use/update them.
+ (redisplay_internal): Reset them before redisplay.
+
+ * xdisp.c (set_iterator_to_next): Optimize 2004-12-13 fix.
+ Only recheck faces after displaying ellipsis.
+
+2006-02-02 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (decode_composition_emacs_mule): Fix handling of
+ incorrect format data.
+
+2006-01-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Use new tool bar function
+ gtk_toolbar_insert() so we can have tool bars of different sizes.
+
+2006-01-30 Luc Teirlinck <teirllm@auburn.edu>
+
+ * data.c (Flistp): Doc fix.
+
+2006-01-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.c (Fother_window, Fwindow_vscroll, Fset_window_vscroll):
+ Fix typos in docstrings.
+
+2006-01-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * data.c (Fcar, Fcdr): Add links to Elisp manual to the docstrings.
+
+2006-01-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * alloc.c (make_interval, allocate_string)
+ (allocate_string_data, make_float, Fcons, allocate_vectorlike)
+ (Fmake_symbol, allocate_misc): Use BLOCK_INPUT when accessing
+ global variables.
+
+2006-01-27 Eli Zaretskii <eliz@gnu.org>
+
+ * dired.c (DIRENTRY_NONEMPTY) [__CYGWIN__]: Don't use d_ino; use
+ the MSDOS definition.
+
+2006-01-26 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (check_pure_size): Make overflow message an "error message".
+
+ * keymap.c (Fmap_keymap): Doc fix.
+
+ * xfns.c (Fx_create_frame): Put all specified parms into f->param_alist
+ unless they were cleared out.
+
+ * frame.c (x_get_arg): "Clear out" the parm in ALIST if found there.
+
+2006-01-26 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+
+ * editfns.c (Fconstrain_to_field): Fix behaviour on field boundaries.
+ (find_field): Set before_field to after_field when pos is at BEGV.
+ (Fline_beginning_position, Fline_end_position):
+ Clarify confusing doc string.
+
+ * cmds.c (Fbeginning_of_line, Fend_of_line): Clarify confusing doc
+ string.
+
+2006-01-26 Kenichi Handa <handa@m17n.org>
+
+ * callproc.c (Fcall_process): GCPRO error_file. Encode infile,
+ current_dir, and error_file. On reporting an error, decode them
+ back.
+
+2006-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * regex.c (IMMEDIATE_QUIT_CHECK): Use it with SYNC_INPUT as well.
+ (re_match_2_internal) <on_failure_jump, on_failure_jump_smart>:
+ Don't check for quit, since any loop will go through fail or jump.
+
+2006-01-24 Chong Yidong <cyd@stupidchicken.com>
+
+ * alloc.c (allocate_string_data): Update next_free immediately, to
+ reduce risk of memory clobberage.
+
+2006-01-24 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+
+ * xdisp.c (handle_invisible_prop): Set it->position to fix cursor
+ display when point moves across an ellipsis. If there are
+ adjacent invisible texts, don't lose the second one's ellipsis.
+ (x_produce_glyphs): Doc fix.
+
+2006-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c (x_catch_errors_unwind): Yet another int/Lisp_Object mixup.
+
+2006-01-23 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (handle_single_display_spec): Fix handling of space
+ property on char from string: set *position rather than
+ it->current.pos.
+ (produce_stretch_glyph): Reduce width of stretch glyphs so they
+ don't get wider than the window (unless truncate-lines is on).
+
+2006-01-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c: Avoid allocating Lisp data from a signal handler.
+ (x_error_message): New var to replace x_error_message_string.
+ (x_error_catcher, x_catch_errors, x_catch_errors_unwind)
+ (x_check_errors, x_had_errors_p, x_clear_errors, x_error_handler)
+ (syms_of_xterm): Use it instead of x_error_message_string.
+
+ * alloc.c (lisp_align_free): Add an assertion.
+ (make_interval, allocate_string, make_float, Fcons, Fmake_symbol)
+ (allocate_misc): If ENABLE_CHECKING is on, check we're not called from
+ a signal handler.
+
+2006-01-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * dired.c (syms_of_dired) <completion-ignored-extensions>: Doc fix.
+
+2006-01-21 Romain Francoise <romain@orebokech.com>
+
+ * xdisp.c (get_window_cursor_type): Fix last change.
+ Update copyright year.
+
+2006-01-20 Eli Zaretskii <eliz@gnu.org>
+
+ * lread.c (Fload): Don't leak the file descriptor returned by
+ openp if we are going to signal an error.
+
+ * w32.c (sys_close): If FD is outside [0..MAXDESC) limits, pass it
+ directly to _close.
+ (sys_dup): Protect against new_fd larger than fd_info[] can handle.
+ (sys_read): If FD is outside [0..MAXDESC) limits, pass it directly
+ to _read.
+ (sys_write): If FD is outside [0..MAXDESC) limits, pass it
+ directly to _write.
+
+ * .gdbinit: Don't dereference Vsystem_type's Lisp_Symbol pointer
+ if it is NULL.
+
+2006-01-20 Kenichi Handa <handa@m17n.org>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1190000.
+
+2006-01-19 Chong Yidong <cyd@stupidchicken.com>
+
+ * xdisp.c (get_window_cursor_type): Use cursor type specified by
+ the selected buffer for the echo area too.
+
+2006-01-19 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (Fmap_keymap): Doc fix.
+
+ * s/irix6-5.h (GC_SETJMP_WORKS, GC_MARK_STACK): New definitions.
+
+ * keyboard.c (echo_char): Don't omit the space between first two
+ echoed chars.
+
+ * minibuf.c (read_minibuf): Fix previous change.
+
+2006-01-19 Kenichi Handa <handa@m17n.org>
+
+ * xterm.c (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF.
+
+2006-01-17 Richard M. Stallman <rms@gnu.org>
+
+ * frame.c (x_frame_get_and_record_arg): Don't record Qunbound
+ value in f->param_alist.
+
+2006-01-15 Andreas Schwab <schwab@suse.de>
+
+ * search.c (Freplace_match): Use UPPERCASEP instead of !NOCASEP.
+
+2006-01-13 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in: Define new macro WINDOW_SUPPORT.
+ (lisp): Use it.
+ (SOME_MACHINE_LISP): Add conditionally loaded files.
+
+2006-01-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [USE_ATSUI] (atsu_get_text_layout_with_text_ptr)
+ [MAC_OS_X_VERSION_MAX_ALLOWED >= 1020]: Specify kATSLineUseQDRendering.
+ (XLoadQueryFont) [USE_ATSUI]: Display diacritical marks in
+ decomposed form.
+
+ * process.c [HAVE_INTTYPES_H]: Include inttypes.h.
+ (ifflag_table): Fix typo (IFF_OACTIV -> IFF_OACTIVE).
+ (Fnetwork_interface_info): Use HAVE_STRUCT_IFREQ_IFR_NETMASK
+ macro. Also try member ifr_addr when getting netmask.
+
+2006-01-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (Fexpand_file_name): Remove redundant tests.
+ Fix elimination of // so that it doesn't prevent elimination of an
+ immediately following /. or /..
+
+2006-01-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_toggle_notify_cb): New function.
+ (xg_toggle_visibility_cb): Move setting of x_gtk_show_hidden_files to
+ xg_toggle_notify_cb.
+ (xg_get_file_with_chooser): Add callback to xg_toggle_notify_cb when
+ parameter value changes so the toggle button gets updated.
+
+2006-01-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * .gdbinit: Fix typo.
+
+2006-01-05 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit: Fix last change.
+
+2006-01-05 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fmake_network_process): Use AF_INET instead of
+ AF_UNSPEC when AF_INET6 is not defined.
+
+2006-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (mac_coerce_file_name_ptr, mac_coerce_file_name_desc):
+ Don't check that the other type is known file-related one.
+
+ * macfns.c (Fx_server_version): Use gestaltSystemVersionMajor,
+ gestaltSystemVersionMinor, and gestaltSystemVersionBugFix on Mac
+ OS X 10.4 and later.
+
+2006-01-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_image_for_pixmap): If the image is from a file,
+ let GTK do all image processing. Importing Emacs own pixmaps to GTK
+ looks bad for inactive tool bar items with some Gnome themes.
+
+2006-01-04 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit: Avoid a warning message when x_error_quitter is not
+ compiled in.
+
+ * process.c [WINDOWSNT]: Undef AF_INET6 to disable IPv6 support
+ for w32.
+
+2006-01-04 Kim F. Storm <storm@cua.dk>
+
+ * process.c: Add IPv6 support.
+ (Qipv4, Qipv6): New vars.
+ (syms_of_process): Intern and staticpro them.
+ (Fformat_network_address): Handle 9 or 8 element vector as IPv6 address
+ with or without port number. Handle 4 element vector as IPv4 address
+ without port number.
+ (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size)
+ (conv_lisp_to_sockaddr): Handle IPv6 addresses.
+ (Fmake_network_process): Use :family 'ipv4 and 'ipv6 to explicitly
+ request that address family only. :family nil or omitted means to
+ determine address family from the specified :host and :service.
+ (ifflag_table): Add missing OpenBSD IFF_ flags.
+ (server_accept_connection): Handle IPv6 addresses.
+ (init_process): Add (:family ipv4) and (:family ipv6) sub-features.
+
+ * .gdbinit: Undo last change. Instead, look at Vsystem_type to
+ determine which breakpoints to set.
+
+2006-01-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (describe_map_compare): Yet another int/Lisp_Object mixup.
+
+ * window.h (Fwindow_minibuffer_p): Declare (for use in minibuf.c).
+
+2006-01-03 Romain Francoise <romain@orebokech.com>
+
+ * emacs.c (main): Update copyright year.
+
+2006-01-03 Ken Raeburn <raeburn@gnu.org>
+
+ * callproc.c (delete_temp_file): Bind file-name-handler-alist to
+ nil for the call to internal_delete_file.
+
+2006-01-01 Ken Raeburn <raeburn@gnu.org>
+
+ * callproc.c (Fcall_process_region): Bind file-name-handler-alist
+ to nil for the call to Fwrite_region.
+
+2005-12-31 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (read_minibuf): Clear out all other minibuffer windows.
+
+2005-12-31 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (gdb_pvec_type): A dummy variable for GDB's sake.
+
+2005-12-30 Luc Teirlinck <teirllm@auburn.edu>
+
+ * textprop.c (set_text_properties): Reword description of return value.
+ Return Qnil if caller wants to remove all text properties from a
+ string and the string already has no intervals.
+
+2005-12-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * term.c (visible_cursor): New boolean var.
+ (set_terminal_modes, tty_show_cursor): Use "vs" or "ve" depending on
+ visible_cursor.
+ (syms_of_term): Export the new var as "visible-cursor".
+
+2005-12-30 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit: Tell users not to worry about GDB warnings that some
+ functions do not exist in the binary.
+
+2005-12-30 Andreas Schwab <schwab@suse.de>
+
+ * process.c (Fnetwork_interface_info): Correctly terminate the
+ loop over ifflag_table.
+
+2005-12-29 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (readevalloop): Test for reading a whole buffer
+ before actually reading anything. Handle all cases, including
+ START = END = nil and an already-narrowed buffer.
+ Convert END to a marker if it is a number.
+
+ * keymap.c (describe_map): Put sparse map elements into an array,
+ sort them, then output a sequence of identical bindings on one line.
+ (struct describe_map_elt): New data type.
+ (describe_map_compare): New function.
+
+2005-12-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_with_chooser): Change message shown
+ in file chooser.
+
+2005-12-27 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (readevalloop): Set PT and ZV in the proper buffer,
+ not the current one.
+
+ * minibuf.c (Fminibuffer_message): Doc fix.
+ (read_minibuf): Set current_buffer->enable_multibyte_characters sooner.
+
+ * eval.c (do_autoload): Ignore elements of Vautoload_queue
+ where car is not symbol.
+
+2005-12-27 Kenichi Handa <handa@m17n.org>
+
+ * charset.c (lisp_string_width): Check multibyteness of STRING.
+
+2005-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_show_hidden_files): New variable.
+ (syms_of_xfns): Defvar it.
+
+ * gtkutil.c (xg_toggle_visibility_cb): New function.
+ (xg_get_file_with_chooser): Add toggle hidden files and a message
+ to the new file chooser dialog. Show hidden files if
+ x_show_hidden_files is non-zero.
+
+2005-12-26 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.h: Undo previous change.
+
+ * Makefile.in (undo.o): Undo previous change.
+
+ * undo.c: Undo previous change.
+
+2005-12-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keyboard.h: extern last_point_position_window.
+
+ * undo.c: include keyboard.h.
+
+ * Makefile.in (undo.o): Depend on keyboard.h.
+
+2005-12-26 Richard M. Stallman <rms@gnu.org>
+
+ * commands.h (last_point_position_window): Declare.
+
+ * undo.c: Depend on window.h.
+ (record_point): Save old point from the correct window.
+
+ * keyboard.c (last_point_position_window): New variable.
+ (command_loop_1): Set last_point_position_window.
+ (syms_of_keyboard): Init it.
+
+ * Makefile.in (undo.o): Depend on window.h.
+
+2005-12-25 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (un_autoload): Expect (0 . OFEATURES) in Vautoload_queue
+ to undo a `provide'.
+
+ * fns.c (Fprovide): Store (0 . OFEATURES) in Vautoload_queue.
+
+2005-12-25 Giorgos Keramidas <keramida@ceid.upatras.gr>
+
+ * m/amdx86-64.h [__FreeBSD__] (START_FILES, LIB_STANDARD):
+ define for FreeBSD on this platform.
+
+2005-12-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.h (TYPE_FILE_NAME): New define.
+ (posix_pathname_to_fsspec, fsspec_to_posix_pathname): Remove externs.
+
+ * mac.c (posix_pathname_to_fsspec, fsspec_to_posix_pathname):
+ Add prototypes. Make static.
+ (mac_aedesc_to_lisp): Initialize err to noErr.
+ (mac_coerce_file_name_ptr, mac_coerce_file_name_desc)
+ (init_coercion_handler): New functions.
+ (Fmac_coerce_ae_data): Use coercion of Apple event data for
+ translation from/to file names.
+
+ * macterm.c: Don't include sys/param.h.
+ (init_coercion_handler): Add extern.
+ [MAC_OS8] (main): Call init_coercion_handler.
+ (mac_initialize) [MAC_OSX]: Likewise.
+ [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Use coercion of
+ Apple event data for translation from/to file names.
+
+ * macfns.c [TARGET_API_MAC_CARBON] (Fx_file_dialog): Likewise.
+
+ * image.c [MAC_OS] (find_image_fsspec): Likewise.
+
+2005-12-23 Martin Rudalics <rudalics@gmx.at>
+
+ * insdel.c (insert, insert_and_inherit, insert_before_markers)
+ (insert_before_markers_and_inherit): Make sure FROM is correct
+ when `after-change-functions' are called.
+
+2005-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_uses_old_gtk_dialog): New function.
+
+ * gtkutil.c (xg_uses_old_file_dialog): New function.
+ (xg_get_file_name): Use xg_uses_old_file_dialog.
+
+ * gtkutil.h: Declare xg_uses_old_file_dialog.
+
+2005-12-22 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (xmenu_show): Call inhibit_garbage_collection.
+
+2005-12-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (Fmac_coerce_ae_data) [MAC_OSX]: Fix memory leak.
+
+ * macgui.h (XCharStruct): Remove member `valid_p'.
+ (STORE_XCHARSTRUCT): Don't set member `valid_p'.
+ (XCharStructRow): New typedef.
+ (XCHARSTRUCTROW_CHAR_VALID_P, XCHARSTRUCTROW_SET_CHAR_VALID):
+ New macros.
+ (struct MacFontStruct): Add member `bounds'. Remove member
+ `per_char'. All uses for QuichDraw Text fonts are changed to
+ `bounds.per_char'. ATSUI font bounds are represented as an array
+ `bounds.rows' of XCharStructRow's, each of which consists of a
+ bitmap of valid entries and an array of char bounds.
+
+ * macterm.c (mac_per_char_metric): Add prototype.
+ (x_per_char_metric) [USE_CG_TEXT_DRAWING]: Remove prototype.
+ (mac_query_char_extents): New function.
+ (x_per_char_metric): Use it.
+ (XLoadQueryFont): Likewise. Consolidate min/max_bounds calculations.
+ [USE_CG_TEXT_DRAWING] (mac_draw_string_cg):
+ Use mac_per_char_metric instead of x_per_char_metric.
+ (mac_text_extents_16): New function.
+ (mac_compute_glyph_string_overhangs): Use it.
+ (mac_unload_font): Free member `bounds' in struct MacFontStruct.
+
+2005-12-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuf.c (Fdisplay_completion_list): Use XCAR/XCDR.
+ (Fminibuffer_completion_help): Remove duplicates before display.
+
+2005-12-21 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+
+ * print.c (print_preprocess): Don't lose print_depth levels while
+ iterating.
+
+2005-12-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (Qmac_apple_event): Add extern.
+ (set_frame_menubar, mac_menu_show keymp_panes)
+ (single_keymap_panes, list_of_panes, list_of_item)
+ (single_menu_item): Add argument types to prototypes.
+ (mac_dialog_show) [HAVE_DIALOGS]: Likewise.
+ (struct skp): New struct (from xmenu.c).
+ (single_keymap_panes, single_menu_item, list_of_panes)
+ (list_of_item): Sync with xmenu.c.
+ (Fx_popup_menu, Fx_popup_dialog): Likewise. Don't get window from
+ POSITION if it is mac-apple-event event.
+ (menubar_selection_callback): Don't use menu_command_in_progress.
+ (set_frame_menubar): First parse all submenus, then make
+ widget_value trees from them. Don't allocate any widget_value
+ objects until we are done with the parsing.
+ (parse_single_submenu, digest_single_submenu): New functions.
+ (single_submenu): Function deleted, replaced by those two.
+ (install_menu_quit_handler) [HAVE_CANCELMENUTRACKING]: Don't create
+ or dispose of EventHandlerUPP. Install hander to all submenus.
+ (mac_menu_show) [!HAVE_MULTILINGUAL_MENU]: Use ENCODE_MENU_STRING
+ instead of ENCODE_SYSTEM.
+ (free_frame_menubar, fill_submenu, fill_menu): Don't use NULL for
+ integer values.
+ [HAVE_DIALOGS] (mac_dialog_show): Sync with xdialog_show (in xmenu.c).
+ (add_menu_item) [TARGET_API_MAC_CARBON]: Use CFString functions to
+ format menu item string. Don't use NULL for integer value.
+
+ * macterm.h (struct mac_output): Remove unused member
+ menu_command_in_progress.
+
+2005-12-20 Juri Linkov <juri@jurta.org>
+
+ * xmenu.c (Fx_popup_menu): Set Vmenu_updating_frame to f if
+ position is non-nil, else set it to nil.
+
+ * macmenu.c (Fx_popup_menu): Add `else' to set
+ Vmenu_updating_frame to nil only if position is nil.
+
+ * w32menu.c (Fx_popup_menu): Add `else' to set
+ Vmenu_updating_frame to nil only if position is nil.
+
+2005-12-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c (make_lispy_event): Drag-and-drop items are now
+ stored in member `args' of struct input_event.
+
+ * termhooks.h (struct input_event): Fix comment for DRAG_N_DROP_EVENT.
+
+ * xselect.c (x_handle_dnd_message): Drag-and-drop items are now
+ stored in member `args' of struct input_event.
+
+ * w32term.c (construct_drag_n_drop): Likewise.
+
+ * macterm.c (mac_do_receive_drag): Likewise.
+ (x_use_underline_position_properties): Undo 2005-07-13 change.
+ (syms_of_macterm) <x-use-underline-position-properties>: Likewise.
+ (mac_use_core_graphics, mac_wheel_button_is_mouse_2)
+ (mac_pass_command_to_system, mac_pass_control_to_system):
+ New boolean variables renamed from Lisp_Object ones
+ Vmac_use_core_graphics, Vmac_wheel_button_is_mouse_2,
+ Vmac_pass_command_to_system, and Vmac_pass_control_to_system.
+ All uses changed.
+ (syms_of_macterm): DEFVAR_BOOL them. Remove previous DEFVAR_LISPs.
+ Make them user options.
+ (mac_handle_command_event, mac_store_services_event):
+ Call create_apple_event_from_event_ref without 5th argument.
+ (backtranslate_modified_keycode): Mask off modifier keys that are
+ mapped to some Emacs modifiers before passing it to KeyTranslate.
+ (syms_of_macterm): Make variables `mac-emulate-three-button-mouse',
+ `mac-wheel-button-is-mouse-2', and `mac-*-modifier' user options.
+ Fix docstrings of `mac-*-modifier'.
+
+ * mac.c (create_apple_event_from_event_ref): Remove arg `types'.
+ (do_applescript): Change argument types to Lisp_Object.
+ All uses changed.
+
+ * macterm.h (create_apple_event_from_event_ref): Remove 5th
+ argument from extern.
+
+2005-12-18 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * xfns.c (Fx_backspace_delete_keys_p): In case we cannot determine
+ the answer, return `lambda', not nil.
+
+2005-12-17 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in (bootstrap-temacs): Warn that parts of commands
+ enclosed in $(ARGQUOTE)s should not be split between two lines, as
+ that will break with GNU Make >3.80, when sh.exe is used and
+ arg quoting is with '..'.
+
+2005-12-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * print.c (print_preprocess): Just signal an error if print_depth
+ is exceeded.
+
+2005-12-17 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit: Set a breakpoint on w32_abort.
+
+2005-12-16 Juri Linkov <juri@jurta.org>
+
+ * minibuf.c (Fminibuffer_completion_contents): New Lisp function
+ created from minibuffer_completion_contents.
+ (minibuffer_completion_contents): Remove.
+ (do_completion, Fminibuffer_complete_word)
+ (Fminibuffer_completion_help): Replace minibuffer_completion_contents
+ with Fminibuffer_completion_contents.
+ (syms_of_minibuf): Add Sminibuffer_completion_contents.
+ (Fdisplay_completion_list): Doc fix.
+ (display_completion_list_1): Use `nil' for second arg of
+ `Fdisplay_completion_list'.
+
+2005-12-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (compute_tip_xy): Handle negative dx and dy.
+
+ * w32fns.c (compute_tip_xy): Ditto.
+
+ * macfns.c (compute_tip_xy): Ditto.
+
+2005-12-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * print.c (print_preprocess): Go to a deeper print_depth to avoid
+ print_object loop.
+
+2005-12-14 Kyotaro HORIGUCHI <horiguti@meadowy.org> (tiny change)
+
+ * coding.c (code_convert_region_unwind): GCPRO arg.
+
+2005-12-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (compute_tip_xy): Calculate root_y the same way as root_x,
+ i.e. dy is offset from top of frame instead of bottom.
+
+ * macfns.c (compute_tip_xy): Ditto.
+
+ * w32fns.c (compute_tip_xy): Ditto.
+
+ * gtkutil.c (SSDATA): New macro to remove compiler warnings.
+ (xg_get_image_for_pixmap, xg_create_frame_widgets)
+ (xg_get_file_with_chooser): Use SSDATA instead of SDATA.
+
+ * xmenu.c (menubar_selection_callback): Do nothing if the callback
+ is for an unselected radio menu item.
+
+2005-12-11 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (syms_of_xdisp) <blink-cursor-alist>: Doc fix.
+
+ * lisp.h [! NO_UNION_TYPE] (EQ): Use == so args are computed just once.
+
+ * keymap.c (Fset_keymap_parent, store_in_keymap): Use CHECK_IMPURE.
+ (Flookup_key): Doc fix.
+ (syms_of_keymap) <function-key-map>: Doc fix.
+
+ * fns.c (Frequire): Treat evaluating from a source file
+ like loading the file.
+
+ * floatfns.c (Flog): Doc fix.
+
+ * fileio.c (Finsert_file_contents): Set Vdeactivate_mark
+ when we change the buffer.
+
+2005-12-11 Juri Linkov <juri@jurta.org>
+
+ * minibuf.c (display_completion_list_1):
+ Call `minibuffer_completion_contents' instead of using `nil' as
+ second arg of `Fdisplay_completion_list'.
+ (keys_of_minibuf): Unbind SPC in
+ Vminibuffer_local_filename_completion_map (see also related
+ change on 2005-12-06).
+
+2005-12-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * emacs.c (main) [MAC_OS8]: Undo previous change.
+
+ * macselect.c (syms_of_macselect) <mac-apple-event-map>:
+ Initialize to nil. Keymap is now created in lisp/term/mac-win.el.
+
+2005-12-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in (macselect.o): Depend on keymap.h.
+
+ * emacs.c (main) [MAC_OS8]: Call syms_of_keymap before
+ syms_of_macselect.
+
+ * image.c (init_image) [MAC_OS]: Don't call EnterMovies.
+ [!HAVE_GIF && MAC_OS] (gif_load): Call EnterMovies.
+
+ * keyboard.c (Qmac_apple_event) [MAC_OS]: New variable.
+ (syms_of_keyboard) [MAC_OS]: Initialize it.
+ (make_lispy_event) [MAC_OS]: Build lisp event for MAC_APPLE_EVENT.
+
+ * mac.c (Qundecoded_file_name): New variable.
+ (syms_of_mac): Initialize it.
+ (mac_aelist_to_lisp, mac_aedesc_to_lisp): New functions.
+ [TARGET_API_MAC_CARBON] (create_apple_event_from_event_ref): New fun.
+ (Fmac_coerce_ae_data): New defun.
+ (syms_of_mac): Defsubr it.
+
+ * macselect.c: Include keymap.h.
+ (mac_ready_for_apple_events): New variable.
+ (Vmac_apple_event_map, Qmac_apple_event_class)
+ (Qmac_apple_event_id): New variables.
+ (syms_of_macselect): Initialize them.
+ (Qundefined, mac_store_apple_event): Add externs.
+ (struct apple_event_binding): New struct.
+ (find_event_binding_fun, find_event_binding)
+ (mac_find_apple_event_spec, defer_apple_events)
+ (mac_handle_apple_event, init_apple_event_handler)
+ (copy_scrap_flavor_data): New functions.
+ (Fmac_process_deferred_apple_events): New defun.
+ (syms_of_macselect): Defsubr it.
+ (mac_store_services_event): Fix extern.
+ (mac_handle_service_event): Don't allocate Lisp objects during
+ asynchronous input processing. Use mac_store_services_event
+ instead of mac_store_application_menu_event.
+
+ * macterm.c (Qmac_ready_for_drag_n_drop, Qapplication, Qabout)
+ (Qpreferences): Remove variables.
+ (syms_of_macterm): Don't initialize them.
+ (Qhicommand) [USE_CARBON_EVENTS]: New variable.
+ (syms_of_macterm) [USE_CARBON_EVENTS]: Initialize it.
+ (init_required_apple_events, do_ae_open_application)
+ (do_ae_print_documents, do_ae_open_documents)
+ (do_ae_quit_application): Remove functions and prototypes.
+ (mac_ready_for_apple_events, Qundefined, init_apple_event_handler)
+ (mac_find_apple_event_spec): Add externs.
+ (mac_store_application_menu_event): Remove function.
+ (mac_store_apple_event, mac_make_lispy_event_code): New functions.
+ (mac_handle_command_event): Create Apple event from Carbon event.
+ Use mac_store_apple_event instead of mac_store_application_menu_event.
+ [MAC_OSX] (mac_store_services_event): Likewise.
+ (struct SelectionRange, SelectionRange): Remove struct and typedef.
+ [MAC_OS8] (main): Call init_apple_event_handler instead of
+ init_required_apple_events.
+ (mac_initialize) [MAC_OSX]: Likewise.
+ [!USE_CARBON_EVENTS] (mac_wait_next_event):
+ Use mac_ready_for_apple_events instead of Qmac_ready_for_drag_n_drop.
+
+ * macterm.h (mac_make_lispy_event_code, mac_aedesc_to_lisp):
+ Add externs.
+ (create_apple_event_from_event_ref) [TARGET_API_MAC_CARBON]: Likewise.
+ (Fmac_get_preference): Add EXFUN.
+
+ * termhooks.h (enum event_kind) [MAC_OS]: Add new MAC_APPLE_EVENT
+ event.
+
+2005-12-09 Richard M. Stallman <rms@gnu.org>
+
+ * xfns.c (Fx_create_frame): Reinstate previous change.
+
+2005-12-09 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (w32_abort) [__GNUC__]: Add instructions for attaching
+ GDB to the abort dialog.
+
+2005-12-09 Kyotaro HORIGUCHI <horiguti@meadowy.org> (tiny change)
+
+ * indent.c (Fvertical_motion): Force move if starting on
+ stretch glyph.
+
+2005-12-08 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (read_escape) <\s>: Don't treat strings specially.
+
+ * xfns.c (Fx_create_frame): Comment out previous change.
+
+2005-12-07 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+
+ * xfns.c (Fx_create_frame): Initialize Vdefault_minibuffer_frame,
+ when needed.
+
+2005-12-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuf.c (keys_of_minibuf): Just unbind SPC in
+ Vminibuffer_local_filename_completion_map rather than forcing it
+ explicitly to the same binding as the global map.
+
+2005-12-06 Ken Raeburn <raeburn@gnu.org>
+
+ * buffer.c (Fkill_buffer): Avoid dangerous side effects in NILP args.
+ * bytecode.c (Fbyte_code): Likewise.
+ * fileio.c (internal_delete_file, Fread_file_name_internal): Likewise.
+ * minibuf.c (Fminibuffer_complete_and_exit): Likewise.
+ * undo.c (truncate_undo_list): Likewise.
+
+2005-12-05 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (enlarge_window): Eliminate arg preserve_before.
+ Assume it is 0. All callers changed.
+ (Fenlarge_window, Fshrink_window): Likewise.
+
+2005-12-02 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (compute_tip_xy): Put tip above pointer if it doesn't
+ fit below.
+
+2005-12-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h: Add prototype for xg_set_icon_from_xpm_data.
+
+ * xfns.c (x_real_positions): int ign => unsigned int.
+ (xg_set_icon_from_xpm_data): Remove unused variable err.
+ (x_set_name_internal, Fx_create_frame, xg_set_icon): Add cast
+ to remove compiler warning.
+ (compute_tip_xy): Put tip above pointer if it doesn't fit below.
+
+2005-12-02 David Reitter <david.reitter@gmail.com>
+
+ * minibuf.c (Fcompleting_read): If Vminibuffer_completing_file_name is
+ non-nil, use the new keymaps Vminibuffer_local_filename_completion_map
+ and Vminibuffer_local_must_match_filename_map keymaps.
+ (keys_of_minibuf): Bind SPC in the new file-name completion keymaps.
+
+ * keymap.c (Vminibuffer_local_filename_completion_map)
+ (Vminibuffer_local_must_match_filename_map): New variables.
+ (syms_of_keymap): DEFVAR_LISP them, initialize them, and set their
+ parent to be Vminibuffer_local_completion_map and
+ Vminibuffer_local_must_match_map, respectively.
+
+ * commands.h (Vminibuffer_local_filename_completion_map)
+ (Vminibuffer_local_must_match_filename_map): Declare the new keymaps.
+
+2005-12-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Fset_window_configuration): Don't accidentally copy the
+ window-point of one window to another.
+
+2005-11-30 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
+
+ * buffer.c (Fpop_to_buffer): Remove superfluous call to record_buffer.
+
+2005-11-30 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c: Include fcntl.h. Define O_WRONLY if not defined.
+ (valid_lisp_object_p) [!GC_MARK_STACK]: Validate pointer by
+ passing it to `emacs_write'.
+
+2005-11-29 Ari Roponen <arjuropo@cc.jyu.fi> (tiny change)
+
+ * atimer.c (stop_other_atimers): Fix loop to correctly compute `prev'.
+
+2005-11-27 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (adjust_window_trailing_edge): New function.
+ (Fadjust_window_trailing_edge): New function.
+ (syms_of_window): Defsubr it.
+ (window_deletion_count): New variable.
+ (delete_window): Update window_deletion_count.
+
+2005-11-26 Eli Zaretskii <eliz@gnu.org>
+
+ * minibuf.c (syms_of_minibuf): Mention the extension of
+ `completion-auto-help's meaning by complete.el.
+
+2005-11-26 Henrik Enberg <henrik.enberg@telia.com>
+
+ * xfaces.c (Finternal_set_lisp_face_attribute_from_resource):
+ Handle :inherit property as a lisp expression.
+
+2005-11-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (Qcontrol): Rename from Qctrl. All uses changed.
+ (syms_of_macterm): Staticpro Qcontrol, Qmeta, Qalt, Qhyper,
+ Qsuper, and Qmodifier_value.
+ (Vmac_control_modifier, Vmac_option_modifier)
+ (Vmac_command_modifier, Vmac_function_modifier)
+ (Vmac_emulate_three_button_mouse, Vmac_wheel_button_is_mouse_2)
+ (Vmac_pass_command_to_system, Vmac_pass_control_to_system)
+ (Vmac_charset_info_alist): Doc fixes.
+
+2005-11-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * emacs.c (main) [MAC_OSX]: Change working directory to home
+ directory if `-psn_*' option is specified.
+
+ * mac.c (DECODE_UTF_8): Remove macro.
+ [TARGET_API_MAC_CARBON] (cfstring_to_lisp_nodecode): New function
+ created from cfstring_to_lisp.
+ [TARGET_API_MAC_CARBON] (cfstring_to_lisp): Use it.
+ (xrm_get_preference_database) [TARGET_API_MAC_CARBON]: Likewise.
+
+ * macterm.h (cfstring_to_lisp_nodecode) [TARGET_API_MAC_CARBON]:
+ Add prototype.
+
+2005-11-21 Ken Raeburn <raeburn@gnu.org>
+
+ * keymap.c (shadow_lookup): Use make_number to pass a number to
+ Fsubstring.
+
+2005-11-21 Juri Linkov <juri@jurta.org>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1180000.
+
+2005-11-20 Chong Yidong <cyd@stupidchicken.com>
+
+ * xfaces.c (Finternal_set_lisp_face_attribute):
+ Use :ignore-defface for new frame defaults when `unspecified' is
+ supplied.
+ (Finternal_get_lisp_face_attribute): Hide :ignore-defface.
+ (merge_face_vectors): Don't do :ignore-defface overwriting here.
+ (Finternal_merge_in_global_face): Do it here.
+
+2005-11-20 Juri Linkov <juri@jurta.org>
+
+ * charset.c (invalid_character): Use Lisp-readable syntax
+ for octal and hex. Reorder decimal, octal and hex values.
+
+2005-11-20 Nick Roberts <nickrob@snap.net.nz>
+
+ * lisp.h: Use typedef when Lisp_Object is EMACS_INT so that
+ this type is recognised when debugging.
+
+2005-11-19 Andreas Schwab <schwab@suse.de>
+
+ * .gdbinit (nextcons, xcdr, xfloat): Update for changes in
+ Lisp_Cons and Lisp_Float.
+
+2005-11-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [USE_CG_TEXT_DRAWING] (cg_text_anti_aliasing_threshold):
+ New variable.
+ [USE_CG_TEXT_DRAWING] (init_cg_text_anti_aliasing_threshold): New fun.
+ (init_font_name_table) [USE_ATSUI && USE_CG_TEXT_DRAWING]: Use it.
+ [USE_CG_TEXT_DRAWING] (mac_draw_string_cg): Don't do antialiasing if
+ font size is smaller than or equal to cg_text_anti_aliasing_threshold.
+
+2005-11-17 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.c (x_create_bitmap_from_xpm_data): Free attributes on fail.
+
+ * xfaces.c (Qignore_defface): New variable.
+ (syms_of_xfaces): Provide `:ignore-defface'.
+ (IGNORE_DEFFACE_P): New macro.
+ (check_lface_attrs, lface_fully_specified_p)
+ (Finternal_set_lisp_face_attribute)
+ (Fface_attribute_relative_p, Fmerge_face_attribute):
+ Handle Qignore_defface as a possible value.
+ (merge_face_vectors): The merged face is `unspecified' if the
+ mergee specifies `:ignore-defface'.
+
+2005-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lread.c (readevalloop): Add missing GCPROs.
+
+2005-11-16 Chong Yidong <cyd@stupidchicken.com>
+
+ * xfns.c (xg_set_icon_from_xpm_data): New function.
+
+ * gnu.h (gnu_xpm_bits): Rename from gnu_bits.
+ (gnu_xbm_bits): Rename from gnu_bits (xbm version).
+
+ * xterm.c (x_bitmap_icon): Use the xpm if available.
+
+ * image.c (x_create_bitmap_from_xpm_data): New function.
+ (x_create_bitmap_from_xpm_data): Initialize XpmAttributes.
+
+2005-11-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * Makefile.in (lisp, shortlisp): Add rfn-eshadow.
+
+2005-11-16 Nick Roberts <nickrob@snap.net.nz>
+
+ * .gdbinit: Make SIGTSTP work like SIGINT normally does.
+
+2005-11-15 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h (struct Lisp_Cons): Make cdr a union.
+ (XCDR_AS_LVALUE): Adjust.
+ (struct Lisp_Float): Make data a union.
+ (XFLOAT_DATA): Adjust.
+
+ * alloc.c (free_float): Make free list chaining aliasing-safe.
+ (make_float): Likewise.
+ (free_cons): Likewise.
+ (Fcons): Likewise.
+ (check_cons_list): Likewise.
+ (Fmake_symbol): Likewise.
+ (allocate_misc): Likewise.
+ (free_misc): Likewise.
+ (gc_sweep): Likewise.
+
+2005-11-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (HASHKEY_QUERY_CACHE): New define.
+ (xrm_create_database, xrm_q_put_resource): Empty query cache.
+ (xrm_get_resource): Use query cache.
+
+ * image.c (init_image) [MAC_OS]: Don't call EnterMovies if
+ inhibit_window_system is set.
+
+2005-11-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macgui.h (USE_CG_TEXT_DRAWING): New define.
+ (struct MacFontStruct) [USE_CG_TEXT_DRAWING]: New members cg_font
+ and cg_glyphs.
+
+ * macterm.c [USE_CG_TEXT_DRAWING] (mac_draw_string_cg): New function.
+ (x_draw_glyph_string_foreground) [USE_CG_TEXT_DRAWING]: Use it.
+ (XLoadQueryFont) [USE_CG_TEXT_DRAWING]: Set members cg_font and
+ cg_glyphs in struct MacFontStruct if synthesized bold or italic is
+ not used and font substitution never occurs for ASCII and Latin-1
+ characters.
+ (XLoadQueryFont): Maximum and minimum metrics are now those among
+ ASCII characters.
+ (XLoadQueryFont) [!MAC_OS8 || USE_ATSUI]: Apply WebKit-style
+ height adjustments for Courier, Helvetica, and Times.
+
+ * s/darwin.h (LIBS_CARBON) [!HAVE_CARBON]: Remove `-framework Carbon'.
+
+2005-11-11 David Reitter <david.reitter@gmail.com>
+
+ * macterm.c (syms_of_macterm): Remove macCtrlKey, macShiftKey,
+ macMetaKey, macAltKey. Introduce Qctrl, Qmeta,
+ Vmac_control_modifier / mac-control-modifier,
+ Vmac_option_modifier / mac-option-modifier,
+ Vmac_command_modifier / mac-command-modifier.
+ (mac_to_emacs_modifiers): Use the new style modifier
+ variables. Return UInt32 (modifiers are longs now.)
+ (backtranslate_modified_keycode): New function (refactoring).
+ (XTread_socket): Use new modifier variables and refactored function.
+ (mac_determine_quit_char_modifiers): Remove macMetaKey (there is
+ no dedicated meta key. Not in use anyway.)
+ (convert_fn_keycode): Map Fn-keys to their original keycode
+ using a table (english keyboard only).
+
+2005-11-11 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (pitx): Fix output format if n_overlay_strings > 0.
+ Add post hook to "backtrace" to always dump lisp call stack to
+ increase chance of people sending it to us when reporting bugs.
+
+ * doc.c (Fsubstitute_command_keys): Doc fix.
+
+ * dispextern.h (struct it): New member ignore_overlay_strings_at_pos_p.
+
+ * xdisp.c (handle_stop): Skip overlay string handling if
+ ignore_overlay_strings_at_pos_p is set.
+ (set_iterator_to_next): At end of display vector, set
+ ignore_overlay_strings_at_pos_p if dpvec came from an overlay
+ string, so we skip those overlay strings at current pos.
+
+2005-11-10 Lars Hansen <larsh@soem.dk>
+
+ * fileio.c (file-regular-p): Doc fix.
+
+2005-11-10 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (valid_lisp_object_p): New function to validate that
+ an object is really a valid Lisp_Object.
+
+ * lisp.h (valid_lisp_object_p): Add prototype.
+
+ * print.c (safe_debug_print): New function to be called from gdb
+ to print Lisp objects; use valid_lisp_object_p to avoid crashing
+ if user tries to print something which is not a Lisp object.
+
+ * .gdbinit (pp, pp1): Use safe_debug_print.
+ (pv, pv1): New commands to print value of a lisp variable.
+
+2005-11-10 Nick Roberts <nickrob@snap.net.nz>
+
+ * .gdbinit (pp1): New user-defined function.
+
+2005-11-09 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c [MAC_OSX] (image_load_quartz2d): Fix memory leak.
+
+ * mac.c [MAC_OSX] (init_mac_osx_environment): Reinitialize locale
+ related variables for dumped executable.
+
+ * unexmacosx.c (unexec_write_zero): New function.
+ (copy_data_segment): Clear uninitialized local variables in
+ statically linked libraries.
+
+ * s/darwin.h (C_SWITCH_SYSTEM): Remove -fno-common.
+
+2005-11-09 Juri Linkov <juri@jurta.org>
+
+ * keymap.c (shadow_lookup): If Flookup_key returns a number,
+ call it again with a sub-key-sequence, and if its return value
+ is non-nil (sub-key is bound), return nil.
+
+2005-11-08 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fsignal_process): Recognize signal names with and
+ without SIG prefix, e.g. SIGHUP and HUP.
+
+ * search.c (search_buffer): No need to initialize base_pat.
+
+2005-11-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Fget_lru_window, Fget_largest_window, window_loop):
+ Don't abuse the `mini' arg. Use the `obj' arg instead.
+
+2005-11-04 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (show_mouse_face): Clear mouse face to eol.
+
+2005-11-03 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * Makefile.in (lisp, shortlisp): Add emacs-lisp/syntax.elc,
+ font-lock.elc and jit-lock.elc.
+
+2005-11-03 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fenlarge_window): Rename SIDE to HORIZONTAL.
+ (enlarge_window): Rename WIDTHFLAG to HORIZ_FLAG.
+ (CURBEG, CURSIZE): Use HORIZ_FLAG instead of WIDTHFLAG.
+
+ * sheap.c (STATIC_HEAP_SIZE): Increment both definitions.
+
+ * alloc.c (refill_memory_reserve): Move decl out of conditionals.
+
+2005-11-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Fdisplay_buffer): Fix last change to not use
+ a dedicated window.
+
+2005-11-01 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (update_window_fringes): Undo 2005-10-27 change.
+ Instead, rotate the bottom angle bitmap 180 degrees to indicate
+ that the bottom row does not end in a newline.
+
+2005-11-01 Andreas Schwab <schwab@suse.de>
+
+ * unexelf.c (unexec): Handle .plt section in BSS segment.
+
+2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lread.c (readevalloop): Yet another int/Lisp_Object mixup (YAILOM).
+
+ * window.c (window_loop): For LRU and LARGEST, let the `mini' argument
+ determine whether to consider dedicated windows as well.
+ (Fget_lru_window, Fget_largest_window): Add `dedicated' argument.
+ (Fdisplay_buffer): Do consider dedicated windows in those cases where
+ we will split the window rather than reuse it.
+ Don't try to use windows on other displays.
+
+2005-10-31 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1170000.
+
+2005-10-31 Romain Francoise <romain@orebokech.com>
+
+ * macfns.c: Update copyright year.
+ * m/gould.h: Likewise.
+
+2005-10-30 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (display_line): Restore it->current_x and call
+ extend_face_to_end_of_line when last glyph doesn't fit on line.
+ (set_glyph_string_background_width): Remove specific tests here
+ to see if face background should extend to end of line. Simplify.
+
+2005-10-30 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (BYTES_USED): Use uordblks, not arena.
+ (bytes_used_when_reconsidered): New variable.
+ (emacs_blocked_free): Set that.
+
+2005-10-29 Chong Yidong <cyd@stupidchicken.com>
+
+ * alloc.c (emacs_blocked_free): Fix typo.
+
+2005-10-29 Richard M. Stallman <rms@gnu.org>
+
+ * data.c (Fmake_variable_frame_local): Doc fix.
+
+ * xdisp.c (handle_fontified_prop): Do nothing if memory full.
+ (format_mode_line_unwind_data): New arg SAVE_PROPTRANS
+ controls whether to save and restore mode_line_proptrans_alist.
+ Callers changed.
+ (unwind_format_mode_line): Work with that feature.
+ (redisplay_internal): Don't call prepare_menu_bars if memory full.
+ (move_elt_to_front): New function.
+ (display_mode_element): Use move_elt_to_front.
+ Don't bother munging text props on a null string.
+ Delete obsolete elts from mode_line_proptrans_alist.
+ (decode_mode_spec): Test Vmemory_full, not spare_memory.
+ (Fformat_mode_line): Clear mode_line_proptrans_alist after saving.
+
+ * lisp.h (memory_full_cons_threshold): Declare.
+ (internal_lisp_condition_case): Declare.
+
+ * alloc.c (syms_of_alloc) <memory-full>: Doc fix.
+ (Fmemory_full_p): Function deleted.
+ (syms_of_alloc): Don't defsubr it.
+ (memory_full_cons_threshold): New variable.
+ (spare_memory): Now a vector of 7 elts.
+ (buffer_memory_full): Don't set Vmemory_full here.
+ (xfree): Don't try to refill here.
+ (emacs_blocked_free): Record BYTES_USED in local var.
+ (memory_full): Now free all the slots in spare_memory.
+ (refill_memory_reserve): Allocate each slot in spare_memory.
+ (init_alloc_once): Call refill_memory_reserve.
+
+ * keyboard.c (command_loop_1): Don't set Vmemory_full here.
+
+ * eval.c (internal_lisp_condition_case): New function.
+ (Fcondition_case): Use internal_lisp_condition_case.
+ (Feval): Test Vmemory_full and memory_full_cons_threshold.
+ (Ffuncall): Likewise.
+
+ * bytecode.c (Fbyte_code): Use internal_lisp_condition_case.
+
+2005-10-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (Fparse_partial_sexp): Fix docstring.
+
+2005-10-28 Romain Francoise <romain@orebokech.com>
+
+ * puresize.h (BASE_PURESIZE): Increment to 1130000.
+
+2005-10-28 Richard M. Stallman <rms@gnu.org>
+
+ * xfns.c (syms_of_xfns): Provide `x' as feature.
+
+ * xdisp.c (decode_mode_spec): Define %e to indicate memory full.
+
+ * editfns.c (Fformat): Don't include string padding
+ between info[n].start and info[n].end.
+
+ * alloc.c (spare_memory): No longer static.
+ (xfree) [!SYSTEM_MALLOC]: Call refill_memory_reserve.
+
+ * puresize.h (BASE_PURESIZE): Increment to 1120000.
+
+2005-10-27 Chong Yidong <cyd@stupidchicken.com>
+
+ * data.c (Fmake_variable_frame_local): Add clarification to docstring.
+
+ * fringe.c (update_window_fringes): Handle case where buffer ends
+ with a newline.
+
+2005-10-27 Kenichi Handa <handa@m17n.org>
+
+ * coding.h (DECODE_SYSTEM): Fix argument name; name->str.
+
+2005-10-24 Kenichi Handa <handa@m17n.org>
+
+ * charset.h (charset_mule_unicode_0100_24ff)
+ (charset_mule_unicode_2500_33ff, charset_mule_unicode_e000_ffff):
+ Extern them.
+
+ * charset.c (charset_mule_unicode_0100_24ff)
+ (charset_mule_unicode_2500_33ff, charset_mule_unicode_e000_ffff):
+ New variables.
+ (Fsetup_special_charsets): Initialize them.
+
+ * xterm.c (handle_one_xevent): Handle keysyms directly mapped to
+ supported Unicode characters.
+
+2005-10-25 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_to_x_font): Avoid forcing font widths.
+
+2005-10-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c [MAC_OS] (image_load_qt_1): Check image size.
+ Use GraphicsImportGetImageDescription instead of
+ GraphicsImportGetNaturalBounds.
+ [MAC_OSX] (image_load_quartz2d): Check image size.
+ [MAC_OS] (xpm_load_image): Likewise.
+
+ * macterm.c (last_mouse_glyph_frame): New var.
+ (note_mouse_movement): Say mouse moved if current frame differs
+ from last_mouse_glyph_frame, and update last_mouse_glyph_frame.
+ (XTmouse_position): Set last_mouse_glyph_frame.
+ (XTread_socket): Clear last_mouse_glyph_frame on mouse up/down event.
+ (mac_draw_string_common) [USE_ATSUI && WORDS_BIG_ENDIAN]: Fix typo.
+ Use EndianU16_BtoN.
+ (mac_draw_string_common) [MAC_OSX]: Don't use ATSUClearLayoutControls.
+ (x_per_char_metric, XLoadQueryFont)
+ [MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Use device origins to get
+ glyph bounds.
+ (mac_to_x_fontname, mac_do_list_fonts)
+ (mac_initialize_display_info): Change screen resolutions to 72dpi.
+
+2005-10-25 Masatake YAMATO <jet@gyve.org>
+
+ * minibuf.c (Fdisplay_completion_list): Small doc fix.
+
+2005-10-24 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c: Undo 2005-10-23 change.
+ (last_mouse_glyph_frame): New var.
+ (note_mouse_movement): Say mouse moved if current frame differs
+ from last_mouse_glyph_frame, and update last_mouse_glyph_frame.
+ (XTmouse_position): Set last_mouse_glyph_frame.
+ (handle_one_xevent): Clear last_mouse_glyph_frame [instead of
+ last_mouse_glyph] on mouse up/down event.
+
+ * editfns.c (Fcompare_buffer_substrings): Fix last change.
+
+2005-10-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * editfns.c (Fcompare_buffer_substrings): Handle multibyte chars.
+
+2005-10-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (note_mouse_movement): Always call note_mouse_highlight
+ so tool tips don't interfere with press on tool bar button.
+
+2005-10-23 Richard M. Stallman <rms@gnu.org>
+
+ * casetab.c (Fset_case_table): Doc fix.
+
+ * lread.c (build_load_history): Replace STREAM arg with ENTIRE.
+ (readevalloop): Compute ENTIRE properly.
+ (syms_of_lread) <load-history>: Doc fix.
+
+2005-10-21 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (Fload): Simplify gcpro structure.
+ Gcpro FOUND as well as FILE, but not EFOUND.
+ Unless preloading, record FOUND instead of FILE in Vload_history.
+ Rename repeat local FILE to MSG_FILE.
+ (syms_of_lread) <load-history>: Doc fix.
+
+2005-10-21 Kenichi Handa <handa@m17n.org>
+
+ * search.c (boyer_moore): Add parens to fix and/or precedence bug.
+
+2005-10-20 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (clone_per_buffer_values): Remove unused var tem.
+ (init_buffer): Remove unused vars dotstat, pwdstat.
+
+ * ccl.c (check_ccl_update): Remove unused var vp.
+
+ * fileio.c (auto_save_error): Call SAFE_FREE.
+
+ * fns.c (Fchar_table_range): Remove unused var i.
+
+ * minibuf.c (display_completion_list_1): New wrapper function
+ for Fdisplay_completion_list.
+ (Fminibuffer_completion_help): Use it.
+
+ * term.c (encode_terminal_code): Remove unused var src_start.
+
+ * window.c (Fwindow_tree): Remove unused var alist.
+
+ * xterm.c (x_calc_absolute_position): Remove unused vars win_x, win_y.
+
+2005-10-20 Aubrey Jaffer <agj@alum.mit.edu> (tiny change)
+
+ * unexelf.c (unexec): Fix calls to `fatal' with less than 3 arguments.
+
+2005-10-20 Olli Savia <ops@iki.fi> (tiny change)
+
+ * syssignal.h [__Lynx__]: Undef SIGPOLL along with SIGIO.
+
+2005-10-20 Andreas Schwab <schwab@suse.de>
+
+ * minibuf.c (Fdisplay_completion_list): Doc fix.
+
+2005-10-19 Kim F. Storm <storm@cua.dk>
+
+ * image.c (check_image_size): Handle integer Vmax_image_size value
+ directly as max pixel value. Use default frame size for null frame.
+ (syms_of_image) <max-image-size>: Describe integer value.
+
+2005-10-19 Romain Francoise <romain@orebokech.com>
+
+ * emacs.c (main): Update copyright year.
+
+2005-10-18 Chong Yidong <cyd@stupidchicken.com>
+
+ * image.c (Vmax_image_size): New variable.
+ (check_image_size): New function.
+ (xbm_read_bitmap_data, pbm_load, png_load, jpeg_load, tiff_load)
+ (gif_load, gs_load): Use it.
+ (lookup_image): Try loading again if previous load failed.
+ (xbm_read_bitmap_data): Add a new argument, a pointer to the frame
+ to display in, NULL if none.
+ (xbm_load_image, xbm_file_p): Pass xbm_read_bitmap_data the new
+ argument.
+
+2005-10-18 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (Fstring_match): Doc fix.
+
+2005-10-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (note_mouse_movement): Use PtInRect.
+ (XTread_socket): Also ignore mouse motion just before a button
+ release event. Don't process button release event when mouse is
+ not grabbed.
+
+2005-10-16 Masatake YAMATO <jet@gyve.org>
+
+ * minibuf.c (Fdisplay_completion_list): Add new optional
+ argument COMMON_SUBSTRING. Bind `completion-common-substring'
+ to the optional argument during running `completion-setup-hook'.
+
+2005-10-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [TARGET_API_MAC_CARBON] (get_cfstring_encoding_from_lisp):
+ Allow nil as argument.
+ [TARGET_API_MAC_CARBON] (Fmac_code_convert_string): Regard nil
+ for encoding arguments as UTF-16 in native byte order, no BOM.
+
+ * macfns.c (Fx_create_frame): Add debugging code.
+ (Fx_show_tip): Set frame pixel width and height.
+
+ * macterm.c (MAC_WINDOW_NORMAL_GC): Remove macro.
+ (FRAME_NORMAL_GC): New macro.
+ (mac_draw_line, mac_clear_area, mac_clear_window)
+ (mac_fill_rectangle, mac_draw_string, mac_draw_string_16)
+ (mac_draw_image_string, mac_draw_image_string_16): Rename from
+ XDrawLine, XClearArea, XClearWindow, XFillRectangle, XDrawString,
+ XDrawString16, XDrawImageString, and XDrawImageString16, respectively.
+ All uses changed.
+ (mac_draw_line, mac_erase_rectangle, mac_clear_area)
+ (mac_clear_window, mac_draw_bitmap, mac_draw_rectangle)
+ (mac_invert_rectangle, mac_draw_string_common, mac_draw_string)
+ (mac_draw_string_16, mac_draw_image_string)
+ (mac_draw_image_string_16, mac_copy_area, mac_copy_area_with_mask)
+ (mac_scroll_area): Drawing functions now take frame as destination.
+ All uses changed.
+ (mac_draw_string_common): Get port height with FRAME_PIXEL_HEIGHT.
+ (x_draw_fringe_bitmap): Set clipping area in face->gc.
+
+ * macterm.h (mac_clear_area): Add extern.
+
+2005-10-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (note_mouse_movement, XTread_socket): Apply 2005-10-14
+ changes for xterm.c.
+
+ * w32term.c (note_mouse_movement, w32_read_socket): Likewise.
+
+2005-10-14 Kenichi Handa <handa@m17n.org>
+
+ * search.c (search_buffer): Give up BM search on case-fold-search
+ if one of a target character has a case-equivalence of different
+ charset even if that target charcter is an ASCII.
+
+ * casefiddle.c (casify_object): Fix for the case that case
+ conversion change the byte length.
+
+2005-10-14 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (note_mouse_movement): Return 1 if mouse moved; 0 otherwise.
+ (handle_one_xevent): Only clear help_echo_string; restore it if
+ note_mouse_movement didn't record any mouse movement.
+
+ * xdisp.c (pos_visible_p): Convert w->hscroll to pixels before use.
+ (remember_mouse_glyph): Clear RECT if mouse is over an image glyph.
+
+ * keyboard.c (make_lispy_position): Adjust wx for left margin if
+ ON_TEXT.
+ (Fposn_at_x_y): Fix calculation of x coordinate.
+ (Fposn_at_point): Return nil if point is hscrolled out of view.
+
+2005-10-13 Andreas Schwab <schwab@suse.de>
+
+ * sysdep.c (request_sigio, unrequest_sigio): Do nothing in
+ non-interactive mode.
+
+2005-10-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xterm.c, w32term.c, macterm.c (note_mouse_movement): Undo last change.
+
+2005-10-12 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (handle_one_xevent): Clear last_mouse_glyph on mouse up/down.
+
+2005-10-12 Romain Francoise <romain@orebokech.com>
+
+ * buffer.c (init_buffer): Rename `rc' to `len' for clarity.
+
+2005-10-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (remember_mouse_glyph): Use MATRIX_BOTTOM_TEXT_ROW to
+ get end of text rows. Obtain header-line/mode-line rows directly.
+
+ * xterm.c, w32term.c, macterm.c (note_mouse_movement):
+ Restore help_echo_string if mouse is moved inside last_mouse_glyph.
+
+2005-10-12 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (remember_mouse_glyph): New generic version based on
+ glyph_rect and remember_mouse_glyph from xterm.c enhanced to
+ properly handle all different window areas.
+
+ * dispextern.h (remember_mouse_glyph): Add prototype.
+
+ * xterm.c (glyph_rect, remember_mouse_glyph): Remove X versions.
+ (note_mouse_movement, XTmouse_position): Use generic
+ remember_mouse_glyph, add last_mouse_glyph arg.
+
+ * w32term.c (note_mouse_movement): Fix last_mouse_glyph check.
+ (glyph_rect, remember_mouse_glyph): Remove w32 specific versions.
+ (note_mouse_movement, w32_mouse_position): Use generic
+ remember_mouse_glyph, add last_mouse_glyph arg.
+
+ * macterm.c (note_mouse_movement): Add call to remember_mouse_glyph.
+ (glyph_rect, remember_mouse_glyph): Remove mac specific versions.
+ (XTmouse_position): Adapt to use generic remember_mouse_glyph
+ instead of pixel_to_glyph_coords.
+
+ * window.c (coordinates_in_window): Fix x position for ON_RIGHT_MARGIN.
+ Fix x position for ON_TEXT when left margin width > 0.
+
+2005-10-11 Kim F. Storm <storm@cua.dk>
+
+ * window.c (coordinates_in_window): Fix y position for ON_SCROLL_BAR.
+
+ * keyboard.c (make_lispy_position): Fix buffer calculations for
+ mouse click or movement in right fringe and the margins.
+
+2005-10-11 Juanma Barranquero <lekktu@gmail.com>
+
+ * image.c (fn_jpeg_stdio_src): Don't define it.
+ (init_jpeg_functions): Don't initialize `fn_jpeg_stdio_src'.
+ (our_common_init_source): Rename from `our_init_source'.
+ (our_common_term_source): Rename from `our_term_source'.
+ (our_memory_fill_input_buffer): Rename from
+ `our_fill_input_buffer'.
+ (our_memory_skip_input_data): Rename from `our_skip_input_data'.
+ (jpeg_memory_src): Use the new names.
+ (struct jpeg_stdio_mgr): New struct.
+ (JPEG_STDIO_BUFFER_SIZE): New constant.
+ (our_stdio_fill_input_buffer, our_stdio_skip_input_data)
+ (jpeg_file_src): New functions.
+ (jpeg_load): Use `jpeg_file_src' instead of `fn_jpeg_stdio_src'.
+
+2005-10-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (PER_CHAR_METRIC): Remove unused macro.
+ (fm_font_family_alist): New variable.
+ (syms_of_macterm): Initialize and staticpro it.
+ (decode_mac_font_name): Replace '-' in family name with '_' if it
+ occurs just once. Lower family name.
+ (parse_x_font_name): Rename from x_font_name_to_mac_font_name.
+ All uses changed. Remove argument MF and code conversion for it.
+ Add argument SIZE. Rename argument MF_DECODED to FAMILY, and CS
+ to CHARSET. Parse font size. Lower family name. Return integer
+ value for status of parsing.
+ (init_font_name_table) [USE_ATSUI]: Use decode_mac_font_name.
+ Don't use Fdowncase because family name is already lowered by
+ decode_mac_font_name.
+ (init_font_name_table): Always call decode_mac_font_name.
+ Add pair of family name and its reference to fm_font_family_alist.
+ (mac_clear_font_name_table): Clear fm_font_family_alist.
+ (XLoadQueryFont): Move font size parsing part to parse_x_font_name.
+ Lookup fm_font_family_alist to get font family reference.
+ (XLoadQueryFont) [USE_ATSUI]: Don't use Fdowncase because family
+ name is already lowered by parse_x_font_name.
+
+2005-10-11 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (glyph_rect): Return 0 if position is outside text area.
+
+ * keyboard.c (make_lispy_position): Fix buffer position calculation for
+ mouse click or movement in fringe.
+
+2005-10-10 Jason Rumney <jasonr@gnu.org>
+
+ * xterm.c (remember_mouse_glyph): New function.
+ (note_mouse_movement): Use it to remember the current glyph if changed.
+ (XTmouse_position): Fix calculation of fake glyph under mouse.
+ Move code to calculate glyph under mouse into remember_mouse_glyph.
+
+2005-10-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * emacs.c (USAGE3, standard_args): -nb => -nbi.
+
+2005-10-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * frame.c (Fredirect_frame_focus): Fix typos in docstring.
+ (next_frame, prev_frame, set_term_frame_name): Make static.
+
+ * window.c (Fwindow_tree): Fix spelling.
+
+2005-10-09 Romain Francoise <romain@orebokech.com>
+
+ * window.c (Fwindow_end): Don't try to redisplay if non-interactive.
+
+2005-10-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * emacs.c (standard_args): Remove options -i, -itype, --icon-type.
+ Add options -nb, --no-bitmap-icon.
+
+ * xfns.c (Fx_create_frame): Make bitmapIcon have default on.
+
+2005-10-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macgui.h (MAX_CLIP_RECTS): New define.
+ (struct _XGC): New member clip_region.
+ (struct _XGC) [MAC_OSX && USE_ATSUI]: New members n_clip_rects and
+ clip_rects.
+
+ * macterm.c (GC_CLIP_REGION): New macro.
+ (saved_port_clip_region): New variable.
+ (mac_begin_clip, mac_end_clip): New functions.
+ (XDrawLine, mac_erase_rectangle, mac_draw_bitmap, XFillRectangle)
+ (mac_draw_rectangle, mac_draw_string_common, mac_copy_area)
+ (mac_copy_area_with_mask, mac_scroll_area): Use them.
+ (mac_set_clip_rectangle, mac_reset_clipping): Remove functions.
+ [USE_ATSUI] (atsu_get_text_layout_with_text_ptr)
+ [MAC_OS_X_VERSION_MAX_ALLOWED < 1020]: Specify kATSLineFractDisable.
+ (mac_draw_string_common) [MAC_OSX && USE_ATSUI]: Clip to clipping
+ rectangles stored in gc.
+ (XFreeGC): Dispose of clipping region.
+ (mac_set_clip_rectangles, mac_reset_clip_rectangles): New functions.
+ (x_draw_fringe_bitmap, x_set_glyph_string_clipping)
+ (x_draw_relief_rect, x_draw_box_rect, x_draw_stretch_glyph_string)
+ (x_draw_glyph_string, x_clip_to_row, x_draw_hollow_cursor)
+ (x_draw_bar_cursor): Use them.
+ (x_set_glyph_string_clipping): Use get_glyph_string_clip_rects to
+ get multiple clipping rectangles.
+
+ * macterm.h (mac_term_init): Add types to extern.
+ (struct mac_output): Remove members mWP and pending_menu_activation.
+ Put members scroll_bar_foreground_pixel and
+ scroll_bar_background_pixel in #if 0.
+ (FRAME_MAC_WINDOW, FRAME_X_WINDOW): Use window_desc.
+
+ * xfaces.c (x_create_gc, x_free_gc) [MAC_OS]: Add BLOCK_INPUT.
+ Add debugging code.
+
+2005-10-08 Kim F. Storm <storm@cua.dk>
+
+ * window.c (window_tree, Fwindow_tree): Rename fns added 2005-10-04.
+
+2005-10-07 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (redraw_overlapped_rows, redraw_overlapping_rows)
+ [!HAVE_WINDOW_SYSTEM]: Don't declare them...
+ (update_window) [!HAVE_WINDOW_SYSTEM]: ...and don't call them.
+
+2005-10-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispextern.h (struct glyph_string): Rename member for_overlaps_p
+ to for_overlaps. Now occupy 3 bits.
+ (OVERLAPS_PRED, OVERLAPS_SUCC, OVERLAPS_BOTH)
+ (OVERLAPS_ERASED_CURSOR): New defines.
+ (struct redisplay_interface): Add new OVERLAPS arg to member
+ fix_overlapping_area.
+ (x_fix_overlapping_area): Add new OVERLAPS arg.
+ (get_glyph_string_clip_rects): Add extern.
+
+ * dispnew.c (redraw_overlapping_rows):
+ Call rif->fix_overlapping_area with new OVERLAPS arg as redrawn part.
+
+ * xdisp.c: Rename member for_overlaps_p in struct glyph_string to
+ for_overlaps.
+ (get_glyph_string_clip_rects): New function created from
+ get_glyph_string_clip_rect. Set clipping rectangles according to the
+ value of for_overlaps. Enable to store multiple clipping rectangles.
+ (get_glyph_string_clip_rect): Use get_glyph_string_clip_rects.
+ (fill_composite_glyph_string, fill_glyph_string, draw_glyphs):
+ Rename argument OVERLAPS_P to OVERLAPS. All uses in macros changed.
+ (x_fix_overlapping_area): Add OVERLAPS arg. Pass it to draw_glyphs.
+ (draw_phys_cursor_glyph): Set width of erased cursor to use it for
+ calculating clipping rectangles later. Call x_fix_overlapping_area
+ with new OVERLAPS arg to draw only erased cursor area.
+ (expose_overlaps): Call x_fix_overlapping_area with new OVERLAPS arg
+ to draw overlaps in both preceding and succeeding rows.
+
+ * xterm.c, w32term.c, macterm.c: Rename member for_overlaps_p in
+ struct glyph_string to for_overlaps.
+
+2005-10-04 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (refill_memory_reserve): Conditionalize the body,
+ not the function's existence.
+
+2005-10-04 Kim F. Storm <storm@cua.dk>
+
+ * window.c (window_split_tree): New function.
+ (Fwindow_split_tree): New defun.
+ (syms_of_window): Defsubr it.
+
+2005-10-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_invert_rectangle): New function.
+ (XTflash): Use it.
+
+2005-10-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * regex.h (re_char): Don't expose it in the interface.
+ (re_set_whitespace_regexp): Adjust the arg's type to not use it.
+
+ * regex.c (re_char): Move it back here.
+ (re_set_whitespace_regexp): Change the arg's type to not use it.
+
+ * keyboard.c (make_lispy_event): If point has moved between down and up
+ event, make it a drag, not a click, to mirror what
+ mouse-drag-region expects.
+
+2005-10-02 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * lisp.h (fatal): Undo previous change.
+ * term.c (fatal): Undo previous change.
+
+2005-10-01 Richard M. Stallman <rms@gnu.org>
+
+ * xfaces.c (face_color_gray_p): Colors close to black count as gray.
+
+2005-10-01 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (try_window): Skip scroll-margin check if ZV is visible.
+
+2005-10-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c (init_keyboard) [MAC_OSX]: Don't install SIGINT handler.
+
+ * macfns.c (start_hourglass): Apply 2005-05-07 change for xfns.c.
+ (x_create_tip_frame) [GLYPH_DEBUG]: Uncomment debugging code.
+ (Fx_create_frame, x_create_tip_frame) [USE_ATSUI]:
+ Try ATSUI-compatible 12pt Monaco font first.
+
+ * macgui.h (struct _XCharStruct): New member valid_p.
+ (STORE_XCHARSTRUCT): Set valid_p.
+ (struct MacFontStruct) [USE_ATSUI]: New member mac_style.
+
+ * macterm.c (mac_draw_string_common, x_per_char_metric)
+ (mac_compute_glyph_string_overhangs, init_font_name_table)
+ (XLoadQueryFont, mac_unload_font) [USE_ATSUI]: Add ATSUI support.
+ (atsu_get_text_layout_with_text_ptr) [USE_ATSUI]: New function.
+ (x_draw_glyph_string_background)
+ (x_draw_glyph_string_foreground) [MAC_OS8 && USE_ATSUI]: Don't use
+ XDrawImageString. Always draw background and foreground separately.
+ (x_draw_glyph_string_foreground) [USE_ATSUI]: Don't use 8-bit
+ functions for one-byte chars when using ATSUI-compatible fonts.
+ (atsu_font_id_hash) [USE_ATSUI]: New variable.
+ (syms_of_macterm) [USE_ATSUI]: Initialize and staticpro it.
+ (XLoadQueryFont): Set min_byte1, max_byte1, min_char_or_byte2, and
+ max_char_or_byte2 more in detail.
+ (quit_char_comp, mac_check_for_quit_char) [MAC_OSX]: Remove functions.
+
+2005-09-30 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * image.c (slurp_file, xbm_read_bitmap_data): Cast to the correct type.
+ * xterm.c (handle_one_xevent, handle_one_xevent): Likewise.
+
+ * unexelf.c (fatal): Fix prototype.
+
+ * term.c (fatal): Implement using varargs.
+
+ * regex.c (re_char): Move typedef ...
+ * regex.h (re_char): ... here.
+ (re_iswctype, re_wctype, re_set_whitespace_regexp): New prototypes.
+
+ * emacs.c (malloc_set_state): Fix return type.
+ (endif): Fix type.
+
+ * lisp.h (fatal): Add argument types.
+
+ * dispextern.h (fatal): Delete prototype.
+
+ * systime.h (make_time): Prototype moved from ...
+ * editfns.c (make_time): ... here.
+
+ * editfns.c: Move systime.h include after lisp.h.
+ * dired.c:
+ * xsmfns.c:
+ * process.c: Likewise.
+
+ * alloc.c (old_malloc_hook, old_realloc_hook, old_realloc_hook):
+ Add parameter types.
+ (__malloc_hook, __realloc_hook, __free_hook): Fix prototypes.
+ (emacs_blocked_free): Change definition to match __free_hook.
+ (emacs_blocked_malloc): Change definition to match __malloc_hook.
+ (emacs_blocked_realloc): Change definition to match __realloc_hook.
+
+2005-09-30 Romain Francoise <romain@orebokech.com>
+
+ * minibuf.c (Fread_buffer): Follow convention for reading from the
+ minibuffer with a default value. Doc fix.
+
+2005-09-29 Juri Linkov <juri@jurta.org>
+
+ * editfns.c (Fmessage, Fmessage_box, Fmessage_or_box):
+ Rename argument name `string' to `format-string'.
+ (Fformat): Doc fix.
+
+2005-09-28 Kim F. Storm <storm@cua.dk>
+
+ * image.c (gif_load): Fix size of allocated image buffer
+ for images where a sub-image may be larger than the image's
+ total height/width specifications.
+
+2005-09-28 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macgui.h (struct _XCharStruct): Each member now takes short value.
+
+2005-09-27 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * xfaces.c (lookup_derived_face): Add parameter type.
+
+ * xdisp.c (cursor_row_fully_visible_p): Add parameter type.
+
+ * marker.c (verify_bytepos): Add parameter type.
+
+ * process.c (get_operating_system_release): Move prototype ...
+
+ * systime.h (get_operating_system_release): ... here.
+
+ * xterm.c (handle_one_xevent): Refer to union field to match the
+ type required by the function definition.
+ (set_vertical_scroll_bar): Move prototype ...
+
+ * xterm.h: ... here.
+
+ * fns.c (internal_equal, seed_random): Fix prototypes.
+ (internal_equal): Add missing parameter.
+
+2005-09-25 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (update_menu_bindings): Variable deleted.
+ (syms_of_keyboard): Don't defvar it.
+ (parse_menu_item): Don't test it.
+
+2005-09-23 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fformat): Explicitly test for end of format string
+ and don't use `index'.
+
+2005-09-23 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * s/aix4-2.h (BROKEN_GET_CURRENT_DIR_NAME):
+ Define BROKEN_GET_CURRENT_DIR_NAME.
+
+ * sysdep.c (get_current_dir_name): Also define if
+ BROKEN_GET_CURRENT_DIR_NAME.
+
+ * m/ibmrs6000.h: Test for USG5, not USG5_4.
+
+2005-09-22 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (message_dolog): Add warning about GC and Lisp strings.
+ (message2): Fix commentary. Ok to use alloca'ed memory.
+ Still not ok to use Lisp string data (because of GC).
+ (set_message): Add comment why GC cannot happen.
+
+2005-09-22 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (xlfdpat_block_match_1): Fix assertion.
+ (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't add style
+ variants for a scalable font multiple times.
+
+2005-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * process.c (create_process) [RTU || UNIPLUS || DONT_REOPEN_PTY]:
+ Setup slave tty options before forking.
+
+2005-09-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_set_geometry): Do a gtk_window_move if program
+ positions have been set for the frame (as is done for frames in
+ special-display-buffer-names).
+
+2005-09-19 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Fformat): Don't scan past end of format string that
+ ends in %. Reported by Johan Bockg,Ae(Brd.
+
+2005-09-18 Andreas Schwab <schwab@suse.de>
+
+ * window.h (struct window): Remove height_fixed_p, no longer set.
+
+ * window.c (make_window): Don't initialize height_fixed_p.
+ (window_fixed_size_p): Don't use it.
+
+2005-09-18 John Paul Wallington <jpw@pobox.com>
+
+ * data.c (Fdefalias): Signal an error if SYMBOL is not a symbol.
+
+2005-09-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in (SOME_MACHINE_OBJECTS): Undo previous change.
+
+ * macfns.c (image_cache_refcount, dpyinfo_refcount) [GLYPH_DEBUG]:
+ New variables.
+ [TARGET_API_MAC_CARBON] (Fx_file_dialog): Don't allow multiple
+ file selection.
+
+ * sysdep.c [MAC_OS8]: Don't include stdlib.h. Include sys/param.h.
+
+2005-09-17 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (XMENU_OBJ) [!HAVE_CARBON]: Reinstate variable.
+ (obj): Use XMENU_OBJ, not a literal xmenu.o.
+
+2005-09-16 Romain Francoise <romain@orebokech.com>
+
+ * fileio.c (syms_of_fileio) <write-region-inhibit-fsync>: Doc fix.
+
+2005-09-15 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (overlay_arrow_at_row): Add HAVE_WINDOW_SYSTEM conditional.
+ (display_mode_element): Instead of `lisp_string' and `this',
+ record `offset' and increment that.
+ `last_offset' replaces `last'.
+
+ * Makefile.in (XMENU_OBJ): Variable deleted.
+ (obj): Use xmenu.o unconditionally.
+ (SOME_MACHINE_OBJECTS): Delete xmenu.o.
+
+ * emacs.c (main): Don't conditionalize syms_of_xmenu on HAVE_XMENU.
+
+2005-09-15 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_vertically): Don't try to fetch byte BEGV-1.
+ (reseat_at_next_visible_line_start): Likewise (in xassert).
+
+2005-09-14 Romain Francoise <romain@orebokech.com>
+
+ * fileio.c (write_region_inhibit_fsync): New variable.
+ (Fwrite_region): Use it to skip call to fsync.
+ (syms_of_fileio): Initialize it.
+
+2005-09-14 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (code_convert_region_unwind): Argument format changed.
+ (run_pre_post_conversion_on_str): If pre-write-conversion function
+ changed the current buffer, delete the new buffer.
+ (run_pre_write_conversin_on_c_str): Likewise.
+
+ * fileio.c (Fexpand_file_name): Check multibyteness of
+ default_directory.
+
+2005-09-13 Kenichi Handa <handa@m17n.org>
+
+ * composite.c (compose_chars_in_text): Delete it.
+
+ * composite.h (compose_chars_in_text): Delete extern.
+
+2005-09-13 Kim F. Storm <storm@cua.dk>
+
+ * print.c (print_error_message): Fix last change.
+
+2005-09-12 Kim F. Storm <storm@cua.dk>
+
+ * composite.c (compose_chars_in_text): Fix setup of `pend'.
+ Unconditionally reload `ptr' and `pend' after eval.
+
+ * xdisp.c (message3): Pass copy of lisp string to message_dolog.
+
+ * print.c (print_error_message): Pass copy of caller name to
+ message_dolog.
+
+ * fileio.c (auto_save_error): Pass copy of lisp string to message2.
+
+2005-09-12 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (display_mode_element): Be sure to make variables THIS
+ and LISP_STRING point into a string data of ELT.
+
+2005-09-12 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Ftranslate_region_internal): Reload `tt' after
+ signal_after_change that may have GC'ed.
+ (Fmessage, Fmessage_box, Fmessage_or_box): Doc fix.
+
+ * keymap.c (Fdescribe_buffer_bindings): Reload `translate'
+ after insert while runs signal_after_change.
+
+ * minibuf.c (Fminibuffer_complete_word): Move `completion_string'
+ declaration to where it is used.
+
+ * w32.c (check_windows_init_file): Fix allocation of error buffer.
+
+ * xfns.c (x_encode_text): Declare static. Add FREEP arg.
+ (x_set_name_internal): Call x_encode_text with new FREEP arg to
+ know if xfree is needed instead of guessing.
+
+ * xterm.h (x_encode_text): Remove prototype.
+
+2005-09-11 Chris Prince <cprince@gmail.com> (tiny change)
+
+ * w32term.c (x_bitmap_icon): Load small icons too.
+
+2005-09-10 Romain Francoise <romain@orebokech.com>
+
+ * buffer.c (init_buffer): Grow buffer to add directory separator
+ and terminal zero. Fix typos.
+
+2005-09-10 Eli Zaretskii <eliz@gnu.org>
+
+ * buffer.c (init_buffer): Fix error message for failed call to
+ get_current_dir_name.
+ (get_current_dir_name): Remove prototype.
+
+ * xsmfns.c (get_current_dir_name): Remove prototype.
+
+ * lisp.h (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]:
+ Add prototype.
+
+ * sysdep.c [WINDOWSNT]: Add prototype for getwd.
+ Don't #undef NULL after including blockinput.h.
+
+ * config.in: Regenerated.
+
+2005-09-10 Giuseppe Scrivano <gscrivano@gmail.com>
+
+ Remove the MAXPATHLEN limitations:
+
+ * sysdep.c (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]:
+ New function.
+
+ * buffer.c (init_buffer): Use it.
+
+ * xsmfns.c (smc_save_yourself_CB): Ditto.
+
+2005-09-09 Kim F. Storm <storm@cua.dk>
+
+ * doc.c (Fsubstitute_command_keys): Lookup key binding for
+ commands that are remapped from some other command.
+
+ * xdisp.c (try_window_reusing_current_matrix): Clear mode_line_p
+ flag in disabled rows below the window.
+
+ * frame.h (struct frame): New member updated_p.
+
+ * xdisp.c (redisplay_internal): Mark updated frames in new updated_p
+ member. Remove local `updated' array and associated variables.
+
+2005-09-07 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (handle_display_prop): Respect overlay window property.
+
+ * xdisp.c (try_window): Remove superfluous cursor_height calculation.
+ Fixes crash reported by YAMAMOTO Mitsuharu.
+
+2005-09-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (struct xlfdpat_block, struct xlfdpat): New structs.
+ (xlfdpat_destroy, xlfdpat_create, xlfdpat_exact_p)
+ (xlfdpat_block_match_1, xlfdpat_match): New functions.
+ (xlfdpat_block_match): New macro.
+ (mac_to_x_fontname): Don't use tolower for non-ASCII characters.
+ (x_font_name_to_mac_font_name): Set coding.dst_multibyte to 0.
+ (add_font_name_table_entry): Increase font_name_table_size more
+ rapidly.
+ (mac_c_string_match): Remove function.
+ (mac_do_list_fonts): Use XLFD pattern match instead of regular
+ expression match.
+
+ * xfaces.c (xstrlwr): Don't use tolower for non-ASCII characters.
+
+2005-09-03 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (redisplay_internal): Make UPDATED as long as needed.
+ (move_it_in_display_line_to): Stop after last char on line even
+ on a windowing terminal, if that's the specified stop position.
+
+ * fns.c (Fsort): Doc fix.
+
+ * editfns.c (Fpropertize): Don't insist that properties be symbols.
+
+2005-09-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * dired.c (directory_files_internal_unwind, directory_files_internal)
+ (file_name_completion): Use a Save_Value object rather than a cons of
+ two 16bit ints to store the DIR*.
+ (directory_files_internal, file_name_completion): Handle both EINTR and
+ EAGAIN consistently after `readdir'.
+
+2005-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * intervals.c (update_interval): Add position info in error.
+
+ * dispnew.c (window_to_frame_hpos, update_window):
+ Avoid gcc warning about unused variable `f'.
+
+2005-08-31 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (add_menu_item): If unicode_append_menu returns an
+ error, revert to using AppendMenu.
+
+2005-08-31 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c (PIX_MASK_DRAW, PIX_MASK_RETAIN): Remove argument.
+ All uses changed.
+ [MAC_OS] (XPutPixel, XGetPixel): Add efficient versions for common
+ cases.
+ (x_create_x_image_and_pixmap) [MAC_OS]: Don't call x_destroy_x_image.
+ [MAC_OS] (find_image_fsspec) [!MAC_OSX]: Don't use FSRef.
+ Use posix_pathname_to_fsspec.
+ [MAC_OS] (xpm_load_image): Fill in background_transparent field
+ while we have mask.
+
+ * macgui.h [!TARGET_API_MAC_CARBON] (GetPixDepth): New define.
+
+ * macterm.h (PIX_MASK_DRAW, PIX_MASK_RETAIN): Move defines to image.c.
+
+2005-08-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (update_syntax_table): Properly reproduce the special +1
+ setting of e_property at the end of the buffer when bumping into the
+ INTERVALS_AT_ONCE limit.
+
+2005-08-27 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (USAGE1): Fix the description of the -Q option.
+
+2005-08-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xdisp.c (pos_visible_p): Yet another int/Lisp_Object mixup (YAILOM).
+
+2005-08-26 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (resize_mini_window): Fix 2005-08-20 change.
+ Don't move PT to new window start.
+
+2005-08-25 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c (kbd_buffer_get_event) [MAC_OS]: Make events for
+ ICONIFY/DEICONIFY_EVENT.
+
+ * macterm.c (mac_copy_area, mac_copy_area_with_mask):
+ Restore background color.
+ (mac_handle_visibility_change): New function.
+ (x_make_frame_invisible, x_iconify_frame)
+ (XTread_socket) [!USE_CARBON_EVENTS]: Use it.
+ [USE_CARBON_EVENTS] (mac_handle_window_event)
+ (install_window_handler): Handle visibility change events.
+ (x_make_frame_visible): Don't reposition window if it is iconified
+ or asked for visible before. Select and uncollapse window when it
+ is made visible.
+ (x_make_frame_invisible): Don't reset x_highlight_frame.
+ (x_iconify_frame): Likewise. Make invisible frame visible before
+ it is iconified.
+ (read_socket_inev): Move variable outside #if USE_CARBON_EVENTS.
+ (do_window_update): Don't change visibility of invisible frame.
+
+2005-08-22 Juri Linkov <juri@jurta.org>
+
+ * term.c (turn_on_face): Check for TS_set_foreground and
+ TS_set_background depending on standout_mode. Simplify.
+
+2005-08-21 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (update_window_fringes): Only put TOP and BOTTOM
+ bitmaps on fully visible rows.
+
+ * fringe.c (update_window_fringes): Replace FORCE_P arg with
+ KEEP_CURRENT_P arg; if non-zero, don't update current row fringes,
+ and return 0.
+
+ * xdisp.c (redisplay_window): Call update_window_fringes with
+ KEEP_CURRENT_P non-0 if we are going to refresh fringes later.
+
+2005-08-20 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (display_echo_area_1): Get display start pos from w->start.
+ (resize_mini_window): Set w->start, and PT, so as to display the tail
+ end of the buffer, if it doesn't all fit.
+
+2005-08-18 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (calc_pixel_width_or_height): Use actual display
+ resolution when available instead of Vdisplay_pixels_per_inch.
+
+2005-08-17 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (pos_visible_p): Adjust X value if window is hscrolled.
+
+ * dispnew.c (buffer_posn_from_coords): Check that target row is
+ within matrix.
+
+2005-08-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_wm_set_icon_pixmap): Move GTK specific code to
+ xg_set_frame_icon and call it.
+
+ * gtkutil.c (xg_set_frame_icon): New function.
+
+ * gtkutil.h (xg_set_frame_icon): Declare it.
+
+2005-08-16 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (increment_row_positions): Skip non-enabled rows.
+
+ * window.c (SAVED_WINDOW_VECTOR_SIZE): Remove dangerous define.
+ (Fcurrent_window_configuration): Use VECSIZE macro instead.
+
+2005-08-15 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (message3_nolog): Clear echo_message_buffer.
+
+2005-08-15 Kim F. Storm <storm@cua.dk>
+
+ * lisp.h (QUIT) [!SYNC_INPUT]: Throw t to Vthrow_on_input.
+
+ * process.c (deactivate_process, status_notify, read_process_output)
+ (update_status, status_convert, decode_status, allocate_pty)
+ (make_process, remove_process, list_processes_1)
+ (create_process_1, unwind_request_sigio, read_process_output)
+ (send_process, keyboard_bit_set): Declare static.
+ (Fdelete_process): Simplify. Pass process to status_notify, so we
+ don't try to read output from it.
+ (status_notify): New arg deleting_process--don't try to read
+ output from that process.
+
+ * lisp.h (deactivate_process, status_notify, read_process_output):
+ Remove prototypes.
+
+2005-08-14 Richard M. Stallman <rms@gnu.org>
+
+ * image.c (syms_of_image): Init Qxbm, Qpbm before calling
+ define_image_type.
+
+2005-08-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_pixbuf_from_pix_and_mask): New function.
+ (xg_get_image_for_pixmap): Move some code to
+ xg_get_pixbuf_from_pix_and_mask, and call it.
+
+ * gtkutil.h (xg_get_pixbuf_from_pix_and_mask): Declare.
+
+ * xterm.c (x_wm_set_icon_pixmap): Call xg_get_pixbuf_from_pix_and_mask
+ to get an GTK icon and set it with GTK functions to avoid having GTK
+ override an icon set with just X functions.
+
+2005-08-11 Richard M. Stallman <rms@gnu.org>
+
+ * image.c (syms_of_image): Init image_types here, and call
+ define_image_type.
+ (init_image): Not here.
+
+2005-08-09 Richard M. Stallman <rms@gnu.org>
+
+ * bytecode.c (BYTE_CODE_QUIT): Throw t to Vthrow_on_input.
+
+ * lisp.h (QUIT): Throw t to Vthrow_on_input.
+
+2005-08-09 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * floatfns.c (Fexpt): Use floats for negative exponent.
+
+2005-08-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_modify_menubar_widgets): Remove semicolon that
+ should not be there, causing menu display errors with GTK 2.6.9.
+
+2005-08-07 Richard M. Stallman <rms@gnu.org>
+
+ * floatfns.c (Fexpt): Undo previous change.
+
+ * dispnew.c (Fframe_or_buffer_changed_p): Take an arg
+ so it can be used with various state vectors.
+
+ * emacs.c (endif): Convert -script into -scriptload.
+ (standard_args): Add -scriptload. Allow -basic-display with one dash.
+
+ * fns.c (syms_of_fns): Add `emacs' to features.
+
+ * term.c (set_terminal_modes): If no TS_termcap_modes string,
+ output newlines to scroll the old screen contents off the screen.
+
+2005-08-06 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * floatfns.c (Fexpt): Use floats for negative exponent.
+ Reported by D Goel.
+
+2005-08-02 Richard M. Stallman <rms@gnu.org>
+
+ * frame.c (Fframe_char_width): Doc fix.
+
+2005-07-30 Juanma Barranquero <lekktu@gmail.com>
+
+ * xdisp.c (syms_of_xdisp) <redisplay-end-trigger-functions>:
+ Defvar it.
+
+2005-07-28 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32fns.c (my_set_window_pos, my_show_window): Don't declare.
+ (my_create_window, my_create_tip_window): Make static.
+
+ * w32term.c (my_show_window, my_set_window_pos, my_set_focus)
+ (my_set_foreground_window, my_destroy_window): Make static.
+
+2005-07-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge gnulib getopt implementation into Emacs.
+
+ * s/cygwin.h (C_SWITCH_SYSTEM): Remove, since gettext.h is
+ now part of lib-src.
+
+2005-07-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eval.c (Fdefvar): Allow (defvar enable-multibyte-characters).
+
+2005-07-25 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (w32_menu_display_help): Suppress tooltip when
+ navigating menus with the keyboard.
+
+2005-07-23 Richard M. Stallman <rms@gnu.org>
+
+ * insdel.c (syms_of_insdel): staticpro combine_after_change_buffer.
+
+ * bytecode.c (MAYBE_GC): Test gc_cons_threshold and
+ gc_relative_threshold, one by one.
+
+ * keyboard.c (read_char): Test gc_cons_threshold.
+ (syms_of_keyboard): staticpro Qecho_area_clear_hook.
+
+ * eval.c (Feval, Ffuncall): Test gc_cons_threshold and
+ gc_relative_threshold, one by one.
+
+ * alloc.c (gc_cons_threshold): Not static.
+ (gc_cons_combined_threshold): Var deleted.
+ (gc_relative_threshold): New variable.
+ (Fgarbage_collect, init_alloc_once): Compute gc_relative_threshold
+ instead of gc_cons_combined_threshold.
+
+ * lisp.h (gc_cons_threshold, gc_relative_threshold): Declare.
+ (gc_cons_combined_threshold): Declaration deleted.
+
+2005-07-23 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c: Don't include stdlib.h or string.h.
+ (Fdo_applescript, Fmac_file_name_to_posix)
+ (Fmac_file_name_to_posix): Doc fixes.
+ [TARGET_API_MAC_CARBON] (Fmac_get_preference)
+ (Fmac_code_convert_string): Likewise.
+ [MAC_OSX] (init_mac_osx_environment): Fall back on terminal mode
+ if the executable is not contained in a bundle.
+
+ * macfns.c: Don't include stdlib.h or string.h. Include atimer.h.
+ (gray_width, gray_height): Remove defines.
+ (gray_bits, gray_bitmap_width, gray_bitmap_height)
+ (gray_bitmap_bits): Remove variables.
+ (lispy_function_keys): Remove extern.
+ (free_frame_menubar): Add extern.
+ (x_window_to_frame): Remove function.
+ (unwind_create_tip_frame): Add declaration.
+ (x_set_name_internal): New function.
+ (x_set_name, x_set_title): Use it.
+ (Fx_create_frame, Fx_display_grayscale_p, Fx_display_pixel_width)
+ (Fx_display_pixel_height, Fx_display_planes)
+ (Fx_display_color_cells, Fx_server_max_request_size)
+ (Fx_server_vendor, Fx_server_version, Fx_display_screens)
+ (Fx_display_mm_height, Fx_display_mm_width)
+ (Fx_display_backing_store, Fx_display_visual_class)
+ (Fx_display_save_under, Fx_synchronize, Fx_show_tip): Doc fixes.
+
+ * macmenu.c (Fx_popup_menu, Fx_popup_dialog): Doc fixes.
+
+ * macselect.c (Fx_own_selection_internal): Follow error conventions.
+ (Fx_get_selection_internal, Fx_selection_owner_p)
+ (Fx_selection_exists_p): Doc fixes.
+ (syms_of_macselect) <selection-converter-alist>: Likewise.
+
+2005-07-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * buffer.c (syms_of_buffer) <cursor-type>: Doc fix.
+
+ * ccl.c (Fregister_ccl_program): Fix typos in docstring.
+ (Fccl_execute_on_string): Likewise; add usage info.
+
+ * composite.c (Fcompose_region_internal)
+ (Fcompose_string_internal):
+ Improve argument/docstring consistency.
+
+ * minibuf.c (Fminibuffer_prompt_end, Feval_minibuffer):
+ Fix typos in docstrings.
+
+ * textprop.c (Fnext_char_property_change)
+ (Fprevious_char_property_change): Doc fixes.
+
+ * window.c (Fset_window_margins, Fset_window_fringes):
+ Improve argument/docstring consistency.
+
+ * xfaces.c (Finternal_lisp_face_p): Doc fix.
+
+2005-07-21 Andreas Schwab <schwab@suse.de>
+
+ * eval.c (restore_stack_limits): Return a value.
+
+2005-07-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * eval.c (Fdefvar): Doc fix.
+
+2005-07-20 Kim F. Storm <storm@cua.dk>
+
+ * fileio.c (Fdo_auto_save, do_auto_save_unwind):
+ Use make_save_value to unwind protect stream.
+
+ * lread.c (Fload, load_unwind):
+ Use make_save_value to unwind protect stream.
+
+2005-07-19 Juanma Barranquero <lekktu@gmail.com>
+
+ * eval.c (Fprog2, Fcalled_interactively_p),
+ (syms_of_eval) <debug-on-quit>: Doc fixes.
+ (syms_of_eval) <max-specpdl-size>:
+ (Finteractive_p): Fix typos in docstrings.
+
+2005-07-19 Kim F. Storm <storm@cua.dk>
+
+ * w32fns.c (Vx_hand_shape): Variable removed.
+ (syms_of_w32fns): Intern and staticpro Qw32_charset_default.
+
+2005-07-19 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (Fstring_as_multibyte): Escape backslashes in the docstring.
+
+2005-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * buffer.h (Fgenerate_new_buffer_name): Declare (for use in coding.c).
+
+2005-07-18 Kim F. Storm <storm@cua.dk>
+
+ * frame.h (struct frame): New member already_hscrolled_p.
+
+ * xdisp.c (redisplay_internal): Only try to hscroll each frame once
+ to avoid redisplay looping hscrolling back and forth ad infinitum.
+
+2005-07-18 Juri Linkov <juri@jurta.org>
+
+ * buffer.c (scroll-up-aggressively, scroll-down-aggressively):
+ * keymap.c (Fminor_mode_key_binding):
+ * macterm.c (mac-emulate-three-button-mouse):
+ Delete duplicate duplicate words.
+
+2005-07-18 Ken Raeburn <raeburn@gnu.org>
+
+ * minibuf.c (Ftest_completion): Fix odd syntax in test.
+
+2005-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (x_set_cursor_color): Use XSetBackground and XSetForeground.
+
+ * macgui.h (struct _XGC): New struct.
+ (GC): Use it.
+ (GCForeground, GCBackground, GCFont): Use X11 mask values.
+ (XCreateGC, XParseGeometry): Move externs to macterm.h.
+
+ * macterm.c (x_bitmap_icon, x_make_frame_visible): Remove declarations.
+ (XSetFont): Add declaration.
+ (mac_set_forecolor, mac_set_backcolor, mac_set_colors):
+ Remove functions.
+ (GC_FORE_COLOR, GC_BACK_COLOR, GC_FONT, MAC_WINDOW_NORMAL_GC):
+ New defines.
+ (XDrawLine, mac_draw_line_to_pixmap, XClearWindow)
+ (mac_draw_bitmap, XCreatePixmapFromBitmapData, XFillRectangle)
+ (mac_draw_rectangle, mac_draw_string_common, mac_scroll_area):
+ Use them.
+ (mac_erase_rectangle): New function.
+ (XClearArea, x_draw_fringe_bitmap, x_clear_glyph_string_rect)
+ (x_draw_stretch_glyph_string): Use it.
+ (XChangeGC, XCreateGC, XGetGCValues, XSetForeground)
+ (XSetBackground, XSetFont): Adjust for new GC implementation.
+ (x_draw_fringe_bitmap, x_draw_box_rect): Use GC to set colors.
+ (XTset_vertical_scroll_bar): Clear area under scroll bar.
+
+ * macterm.h (struct mac_display_info): Change types of
+ scratch_cursor_gc black_relief.gc, and white_relief.gc to GC.
+ (XCreateGC, XParseGeometry): Move externs from macgui.h.
+
+ * xfaces.c [MAC_OS] (XCreateGC): Remove extern.
+
+2005-07-16 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fmake_overlay): Doc fix.
+
+2005-07-16 Eli Zaretskii <eliz@gnu.org>
+
+ * w32proc.c (syms_of_ntproc): staticpro Qhigh, Qlow,
+ Vw32_valid_locale_ids, and Vw32_valid_codepages.
+
+2005-07-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [TARGET_API_MAC_CARBON] (Fmac_code_convert_string):
+ Use Fstring_as_unibyte instead of string_make_unibyte.
+
+2005-07-15 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (select_frame_for_redisplay): Use find_symbol_value.
+
+2005-07-15 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c: Fix redisplay loop in last change.
+ (IT_POS_VALID_AFTER_MOVE_P): New macro.
+ (move_it_vertically_backward, move_it_by_lines): Use it.
+
+2005-07-14 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (init_environment): Default HOME directory to user's
+ appdata directory if possible.
+
+2005-07-14 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (pitx): Fix output format. Print string charpos.
+
+ * lread.c (syms_of_lread): Initialize seen_list.
+
+ * search.c (syms_of_search): Staticpro searchbuf.whitespace_regexp.
+
+ * syntax.c (syms_of_syntax): Staticpro lisp objects in gl_state.
+ Staticpro re_match_object.
+
+2005-07-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macselect.c (get_scrap_target_type_list): Avoid NULL pointer
+ dereference.
+
+ * macterm.c (mac_window_to_frame): Remove duplicate define.
+
+2005-07-14 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (code_convert_region_unwind): ARG is changed to a cons.
+ (code_convert_region): Adjust for the above change.
+ (set_conversion_work_buffer): If the work buffer is already in
+ use, generate a new buffer and return it. Otherwise return Qnil.
+ (run_pre_post_conversion_on_str): Adjust for the above change.
+ (run_pre_write_conversin_on_c_str): Likewise.
+
+2005-07-13 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (start_display): Don't reseat to next visible line start
+ if current start position is in a string or image.
+ (move_it_vertically_backward): Be sure to move out of strings and
+ images when moving it2 forward.
+ (move_it_by_lines): When moving forward, move to next buffer
+ position if we end up in a string or image. When moving backward,
+ count rows moved over when moving to start of current row in case
+ row starts in middle of a string or image. Also move further
+ backward if we end up in a string or image.
+ (try_cursor_movement): If overlay string spans multiple lines,
+ move backward to set cursor on start of an overlay string.
+ (cursor_row_p): Row is ok if cursor is at newline from string, but
+ string starts on this line (so we always position cursor at start
+ of string).
+
+ * indent.c (Fvertical_motion): If start position is on an image,
+ don't move back if we move too far (that's almost certain to happen).
+
+ * xdisp.c (cursor_row_fully_visible_p): Allow partially visible
+ row in minibuffer windows.
+ (try_window): Don't check margins in minibuffer windows.
+
+2005-07-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c: Don't include stdlib.h or composite.h.
+ (x_use_underline_position_properties, last_mouse_press_frame)
+ (x_noop_count, Qvendor_specific_keysyms): Remove unused variables.
+ (syms_of_macterm, mac_initialize): Don't initialize them.
+ (waiting_for_input, initial_argv, initial_argc)
+ (Vcommand_line_args, Vx_no_window_manager, errno, window_scroll)
+ (set_frame_menubar, path_from_vol_dir_name): Remove externs.
+ (extra_keyboard_modifiers): Fix type in extern.
+ (x_window_to_frame, x_window_to_scroll_bar): Remove declarations.
+ (x_scroll_bar_report_motion): Add argument types to declaration.
+ (mac_compute_glyph_string_overhangs): Add declaration.
+ (disable_mouse_highlight): Remove unused variable.
+ [USE_TOOLKIT_SCROLL_BARS] (construct_scroll_bar_click)
+ (x_scroll_bar_handle_press, x_scroll_bar_handle_release)
+ (x_scroll_bar_handle_drag): Remove argument `timestamp'.
+ All callers changed.
+ [USE_TOOLKIT_SCROLL_BARS] (construct_scroll_bar_click): Don't set
+ timestamp.
+ [USE_CARBON_EVENTS] (mac_handle_mouse_event): Likewise.
+ (x_scroll_bar_create, XTset_vertical_scroll_bar): Show scroll bar
+ only when its width is less than the height.
+ (XTredeem_scroll_bar): Sync with xterm.c.
+ (font_name_table, font_name_table_size, font_name_count):
+ Make static.
+ (drag_and_drop_file_list): Remove variable. Previous use is now
+ local to function.
+ (do_ae_open_documents): Move DRAG_N_DROP event construction part
+ from XTread_socket.
+ (XTread_socket): Consolidate setting of event timestamp.
+ Move DRAG_N_DROP event construction part to do_ae_open_documents.
+ Support extra_keyboard_modifiers.
+
+ * xfaces.c (try_font_list) [MAC_OS]: Try font family name
+ beginning with that for ASCII.
+
+2005-07-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (gc_cons_combined_threshold, Vgc_cons_percentage): New vars.
+ (Fgarbage_collect, init_alloc_once): Set gc_cons_combined_threshold.
+ (syms_of_alloc): Declare gc-cons-percentage.
+
+ * eval.c (Feval, Ffuncall):
+ * keyboard.c (read_char):
+ * bytecode.c (MAYBE_GC): Use gc_cons_combined_threshold.
+
+ * lisp.h (gc_cons_combined_threshold): Declare.
+
+2005-07-12 Kim F. Storm <storm@cua.dk>
+
+ * coding.c (Qprocess_argument):
+ * coding.h (Qprocess_argument): Remove unused var.
+
+ * xselect.c (intern): Remove dup. intern and staticpro for QTIMESTAMP.
+
+2005-07-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [!TARGET_API_MAC_CARBON]: Include charset.h, coding.h, and
+ Endian.h.
+ [!MAC_OSX] (fchmod, fchown): New functions.
+ (mac_get_code_from_arg): Don't accept Lisp integer as argument.
+ Use SBYTES and EndianU32_BtoN.
+ (mac_get_object_from_code): Return 4 byte string even if argument
+ is 0. Use make_unibyte_string and EndianU32_NtoB.
+ (Fmac_get_file_creator, Fmac_get_file_type, Fmac_set_file_creator)
+ (Fmac_set_file_type): Fix documents and argument declarations.
+ Don't specify kFSCatInfoNodeFlags. Support Mac OS Classic.
+
+2005-07-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Frecenter): Yet another int/Lisp_Object mixup (YAILOM).
+
+2005-07-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfaces.c (x_update_menu_appearance): Use fontSet resource for
+ Lucid if X_I18N, font otherwise.
+
+2005-07-10 Steven Tamm <steventamm@mac.com>
+
+ * mac.c (Fmac_get_file_type, Fmac_get_file_creator): Add.
+ (Fmac_set_file_type, Fmac_set_file_creator): Add.
+ (mac_get_object_from_code, mac_get_code_from_arg): Add.
+
+2005-07-10 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (Qeval_buffer_list, Veval_buffer_list): New vars.
+ (syms_of_lread): Set up eval-buffer-list.
+ (Feval_buffer, Feval_region): Bind eval-buffer-list.
+
+2005-07-08 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (Fdefvar): Allow defvaring a constant to itself quoted.
+
+2005-07-08 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (menu_bar_items): Don't GCPRO menu_bar_items_vector here.
+ (syms_of_keyboard): Initialize and staticpro menu_bar_items_vector.
+
+2005-07-07 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Frecenter): Fix last change (set iarg before use).
+
+2005-07-06 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Frecenter): When arg is inside the scroll margin,
+ move it out of the margin.
+
+2005-07-06 Jason Rumney <jasonr@gnu.org>
+
+ * w32console.c (initialize_w32_display): Detect when the console
+ dimensions are insane, and default to 80x25 instead.
+ (w32_use_full_screen_buffer): Default to nil.
+
+2005-07-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_draw_vertical_window_border): Use foreground of
+ VERTICAL_BORDER_FACE_ID for vertical border line.
+ (mac_encode_char): Call check_ccl_update in advance.
+ (mac_to_x_fontname, x_font_name_to_mac_font_name)
+ (init_font_name_table, mac_do_list_fonts, XLoadQueryFont):
+ Don't assume that font family length is less than 32.
+ (x_compute_min_glyph_bounds): Make static.
+ (x_load_font): Never set fonts_changed_p to zero.
+
+2005-07-04 Lute Kamstra <lute@gnu.org>
+
+ * Update FSF's address in GPL notices.
+
+2005-07-03 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (try_window): Fix previous change in how it handles
+ a partially-visible line or one only partly past the margin.
+
+ * window.c (window_scroll_pixel_based): Take account
+ of this_scroll_margin when finding point when scrolling up.
+
+2005-06-29 Ralf Angeli <angeli@iwi.uni-sb.de>
+
+ * window.c (window_scroll_pixel_based, window_scroll_line_based):
+ Handle `scroll-preserve-screen-position' non-nil, non-t specially.
+ (syms_of_window) <scroll-preserve-screen-position>: Doc fix.
+
+2005-07-02 Juri Linkov <juri@jurta.org>
+
+ * w32term.c (w32_draw_vertical_window_border): Use foreground of
+ VERTICAL_BORDER_FACE_ID for vertical border line.
+
+2005-07-02 Eli Zaretskii <eliz@gnu.org>
+
+ * fileio.c (Fcopy_file): Rearrange the code that calls fchown and
+ fchmod so that chmod doesn't get called on MSDOS before the file
+ is closed.
+
+2005-07-01 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (cleartype_active): New flag for enabling sub-pixel
+ workaround.
+ (w32_initialize): Initialize it.
+ (w32_native_per_char_metric): Allow a couple of extra pixels when
+ Cleartype is active.
+
+ * w32term.c (w32_initialize): Move check for screen reader here
+ from syms_of_w32term.
+
+2005-06-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): bzero compose_status when nbytes
+ is not zero.
+
+2005-07-01 Masatake YAMATO <jet@gyve.org>
+
+ * emacs.c (main): Passing ADD_NO_RANDOMIZE to `personality'.
+
+2005-06-30 Juri Linkov <juri@jurta.org>
+
+ * xdisp.c (x_draw_vertical_border): If left fringe is not present
+ decrease x coord of vertical border by 1 pixel to not occupy text
+ area of the right window.
+
+ * xterm.c (x_draw_vertical_window_border): Use foreground of
+ VERTICAL_BORDER_FACE_ID for vertical border line.
+
+ * term.c (turn_on_face): In standout mode apply specified
+ fg to bg, and specified bg to fg (this makes the logic of
+ inversion on terminal consistent with X).
+
+2005-06-29 Juanma Barranquero <lekktu@gmail.com>
+
+ * eval.c (user_variable_p_eh): New function.
+ (Fuser_variable_p): Use it. Clarify docstring.
+ Return t for aliases of user options, nil for alias loops.
+
+2005-06-27 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (Fdefvar): Improve error message.
+
+2005-06-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c [USE_CARBON_EVENTS] (mac_convert_event_ref): Fix last
+ change.
+
+2005-06-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * eval.c (Fdefvar): Don't try to set constant symbols.
+
+2005-06-25 Richard M. Stallman <rms@gnu.org>
+
+ * macfns.c (Fx_show_tip): Pass new arg to try_window.
+
+ * w32fns.c (Fx_show_tip): Pass new arg to try_window.
+
+ * xfns.c (Fx_show_tip): Pass new arg to try_window.
+
+ * xdisp.c (try_window): New arg CHECK_MARGINS. Calls changed.
+ (redisplay_window): Handle try_window reporting point in scroll margin.
+
+ * dispextern.h (try_window): Declare new arg.
+
+ * fileio.c (Fcopy_file): New arg PRESERVE_UID_GID.
+ Use fchmod to copy the file modes.
+ (Frename_file): Don't copy UID and GID here;
+ instead, specify t for PRESERVE_UID_GID when calling Fcopy_file.
+
+ * eval.c (call_debugger): Take full care of extending stack limits
+ to make space for the debugger, and restore the change afterward.
+ Bind debug-on-error to nil.
+ (restore_stack_limits): New subroutine.
+ (Fsignal): Extend specpdl bound along with eval depth bound,
+ for calling edebug. Don't do either one, for calling debugger.
+ (find_handler_clause): Don't bind debug-on-error here.
+ Don't unbind anything either.
+ Temporarily advance max_specpdl_size for calling
+ internal_with_output_to_temp_buffer.
+ (grow_specpdl): Don't alter max_specpdl_size before signaling
+ an error.
+ (syms_of_eval) <max-specpdl-size>: Doc fix.
+
+ * lread.c (read1): 0.0e+NaN should make a "positive" NaN.
+
+2005-06-24 Eli Zaretskii <eliz@gnu.org>
+
+ * fileio.c (Frename_file): Undo last change: no need to ifdef away
+ chown on DOS_NT platforms.
+
+ * w32.c (sys_chown): New function.
+
+ * s/ms-w32.h (chown): New; define to sys_chown.
+
+2005-06-24 Juanma Barranquero <lekktu@gmail.com>
+
+ * xdisp.c (syms_of_xdisp) <nobreak-char-display>: Doc fix.
+ (syms_of_xdisp) <void-text-area-pointer>: Doc fix.
+
+ * fileio.c (Frename_file)[!DOS_NT]: Don't call chown on MSDOS/Windows.
+
+2005-06-23 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element): Finish reversing the tests of
+ Vnobreak_char_display.
+
+ * xdisp.c (Vnobreak_char_display): Rename from Vshow_nonbreak_escape.
+ All uses changed.
+ (Qnobreak_space): Rename from Qno_break_space. All uses changed.
+ (syms_of_xdisp): Define nobreak-char-display and nobreak-space.
+
+ * fileio.c (Frename_file): Preserve owner and group, if possible,
+ when copying.
+
+2005-06-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * abbrev.c (Funexpand_abbrev):
+ * category.c (Fmake_category_set):
+ * dispnew.c (Fsleep_for, Fsit_for):
+ * editfns.c (Fsubst_char_in_region):
+ * eval.c (Fdefvar, Fdefconst, Feval, Ffuncall):
+ * frame.c (make_frame_without_minibuffer):
+ * lread.c (read_vector):
+ * macfns.c (check_x_frame):
+ * process.c (Fstop_process, Fcontinue_process):
+ * search.c (Freplace_match):
+ * syntax.c (Fstring_to_syntax):
+ * w32fns.c (check_x_frame, check_x_display_info):
+ * xfaces.c (x_supports_face_attributes_p):
+ * xselect.c (Fx_own_selection_internal): Follow error conventions.
+
+ * image.c (fn_png_init_io): Don't define it.
+ (init_png_functions) [HAVE_NTGUI]: Don't initialize fn_png_init_io.
+ (png_read_from_file): New function, based on png_read_from_memory.
+ (png_load): Use it, instead of fn_png_init_io.
+
+2005-06-23 Kim F. Storm <storm@cua.dk>
+
+ * search.c (Fmatch_data): Remove evaporate option.
+ (Fset_match_data): Do not mention evaporate option in doc string.
+ Add commentary explaining evaporate arg (for internal use only).
+ (unwind_set_match_data): Add comment on evaporate use.
+
+2005-06-22 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (Qvertical_border): Rename from `Qvertical_divider'.
+ (realize_basic_faces, syms_of_xfaces): Update references to it.
+ * dispextern.h (enum face_id): Rename `VERTICAL_DIVIDER_FACE_ID'
+ to `VERTICAL_BORDER_FACE_ID'.
+ * dispnew.c (build_frame_matrix_from_leaf_window): Update references.
+
+2005-06-21 Juri Linkov <juri@jurta.org>
+
+ * dispextern.h: Add extern Qframe_set_background_mode.
+
+ * xfaces.c: Rename obsolete function Qframe_update_face_colors to
+ Qframe_set_background_mode.
+
+ * frame.c (Fmodify_frame_parameters):
+ Call frame-set-background-mode after changing the background color
+ on non-window non-dos branch.
+
+2005-06-21 Juanma Barranquero <lekktu@gmail.com>
+
+ * fns.c (Fchar_table_range):
+ * process.c (Fmake_network_process): Fix spellings.
+
+2005-06-20 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (Fsort): Doc fix.
+
+2005-06-20 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (Qvertical_divider): New variable.
+ (realize_basic_faces): Realize its face.
+ (syms_of_xfaces): Initialize it.
+
+ * dispextern.h (enum face_id): Add `VERTICAL_DIVIDER_FACE_ID'.
+
+ * dispnew.c (build_frame_matrix_from_leaf_window): Display vertical
+ window-separator on ttys using `vertical-divider' face by default.
+
+2005-06-17 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element):
+ Reverse test of Vshow_nonbreak_escape.
+
+ * term.c (produce_special_glyphs): Use spec_glyph_lookup_face.
+ (Ftty_no_underline): New function.
+ (syms_of_term): defsubr it.
+
+ * keyboard.c (read_char): Call restore_getcjmp after jump occurs.
+
+ * dispnew.c (spec_glyph_lookup_face): New function.
+ (build_frame_matrix_from_leaf_window): Use it.
+
+ * dispextern.h (spec_glyph_lookup_face): Add declaration.
+
+ * buffer.c (syms_of_buffer) <cursor-type>: Doc fix.
+
+2005-06-12 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (read_char): After catching a longjmp,
+ call restore_getcjmp.
+
+2005-06-17 Juanma Barranquero <lekktu@gmail.com>
+
+ * xselect.c (lisp_data_to_selection_data): Fix spelling.
+
+2005-06-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_compute_glyph_string_overhangs): Don't set
+ overhangs unless the given glyph type is noncomposite CHAR_GLYPH.
+ [USE_CARBON_EVENTS] (mac_convert_event_ref): Convert dead key down
+ events.
+ (XTread_socket): Don't pass keyboard events with the option
+ modifier to the system when Vmac_command_key_is_meta is nil or
+ Vmac_option_modifier is non-nil.
+ [USE_CARBON_EVENTS] (read_socket_inev): New variable.
+ [USE_CARBON_EVENTS] (init_command_handler): Fix argument.
+ [USE_CARBON_EVENTS] (mac_handle_mouse_event): New Carbon event
+ handler function.
+ (install_window_handler) [USE_CARBON_EVENTS]: Install it.
+ (XTread_socket) [USE_CARBON_EVENTS]: Move mouse wheel event
+ handler part to mac_handle_mouse_event.
+
+2005-06-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * eval.c (Fdefvaralias): Rename arguments SYMBOL and ALIASED to
+ NEW-ALIAS and BASE-VARIABLE, respectively.
+
+2005-06-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Lisp_Object/int mixup.
+ (get_phys_cursor_geometry, format_mode_line_unwind_data)
+ (get_line_height_property, x_produce_glyphs): Remove unused vars.
+
+ * coding.c (run_pre_post_conversion_on_str): Remove unused var `buf'.
+
+2005-06-13 Eli Zaretskii <eliz@gnu.org>
+
+ * w32term.c (x_use_underline_position_properties): New variable.
+ (x_draw_glyph_string): Remind in a comment to change doc string of
+ x-use-underline-position-properties if/when underline positioning
+ is implemented.
+ (syms_of_w32term): DEFVAR_BOOL x-use-underline-position-properties,
+ and initialize it to nil.
+
+2005-06-12 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (NEWOPENFILENAME): New struct.
+ (Fx_file_dialog): Use it to trick the system into giving us up to
+ date dialogs on systems that are documented to support it.
+ Do not set OFN_FILEMUSTEXIST flag if looking for a directory.
+
+2005-06-12 Eli Zaretskii <eliz@gnu.org>
+
+ * w32fns.c (w32_abort): Use the MB_YESNO dialog instead of
+ MB_ABORTRETRYIGNORE. Never return, even if DebugBreak does.
+
+2005-06-11 Eli Zaretskii <eliz@gnu.org>
+
+ * image.c (x_create_x_image_and_pixmap) [HAVE_NTGUI]: Cast 4th arg
+ to CreateDIBSection to avoid a compiler warning.
+ (pbm_load): Cast 3rd arg to IMAGE_BACKGROUND to avoid a compiler
+ warning.
+ (png_load): Cast return values of fn_png_create_read_struct and
+ fn_png_create_info_struct, to avoid compiler warnings on W32.
+ Cast 3rd arg to IMAGE_BACKGROUND and image_background_transparent
+ to avoid compiler warnings.
+ (jpeg_load): Cast return value of fn_jpeg_std_error to avoid a
+ compiler warning on W32. Cast 3rd arg to IMAGE_BACKGROUND to
+ avoid a compiler warning.
+ (tiff_load): Cast return values of fn_TIFFOpen and
+ fn_TIFFClientOpen to avoid compiler warning on W32. Cast 3rd arg
+ to IMAGE_BACKGROUND to avoid a compiler warning.
+ (gif_load): Cast return values of fn_DGifOpenFileName and
+ fn_DGifOpen to avoid compiler warnings on W32. Cast 3rd arg to
+ IMAGE_BACKGROUND to avoid a compiler warning.
+ (DrawText) [HAVE_NTGUI || MAC_OS]: If already defined, undef
+ before redefining.
+
+ * w32bdf.c (create_offscreen_bitmap): Cast `bitsp' to `void **' in
+ the call to CreateDIBSection, to avoid a compiler warning.
+
+2005-06-11 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fx_file_dialog): Unblock input before falling back to
+ minibuffer.
+ * macfns.c (Fx_file_dialog): Likewise.
+
+2005-06-10 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in ($(TEMACS)): Depend on addsection.exe.
+
+2005-06-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * process.c (syms_of_process) [ADAPTIVE_READ_BUFFERING]:
+ * w32fns.c (syms_of_w32fns): Fix spellings.
+
+2005-06-10 Eli Zaretskii <eliz@gnu.org>
+
+ * unexw32.c (COPY_CHUNK, COPY_PROC_CHUNK): Add a new argument
+ `verbose'; print diagnostic messages only if it is non-zero.
+ All callers changed to pass a zero value unless DEBUG_DUMP is defined
+ in the environment.
+ (copy_executable_and_dump_data): Print section names with %.8s.
+
+2005-06-10 Masatake YAMATO <jet@gyve.org>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Call clear_mouse_face
+ when mouse_face is not given.
+
+2005-06-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * window.c (Fselect_window): Adapt call to Fselect_frame.
+
+ * lisp.h: Update EXFUN of Fselect_frame.
+
+ * keyboard.c (command_loop_1): Adapt call to Fselect_frame.
+
+ * frame.c (Fhandle_switch_frame, Fselect_frame): Delete unused arg
+ no_enter.
+ (Fset_mouse_position, Fset_mouse_pixel_position, Ficonify_frame):
+ Adapt to above change.
+
+2005-06-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * fns.c (Fmemq, Fmaphash): Doc fixes.
+
+2005-06-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * xfaces.c (Fdisplay_supports_face_attributes_p):
+ Fix typo in docstring.
+
+2005-06-08 Steven Tamm <steventamm@mac.com>
+
+ * unexmacosx.c (copy_data_segment): Copy __la_sym_ptr2 section
+ used by gcc4 on intel mac.
+
+2005-06-09 Kim F. Storm <storm@cua.dk>
+
+ * search.c (Fmatch_data): Add optional RESEAT arg. Unchain markers
+ in REUSE list if non-nil; free them if equal to evaporate.
+ (Fset_match_data): Add optional RESEAT arg. Unchain markers in LIST
+ if non-nil; free them if equal to evaporate. Use XCAR/XCDR.
+ (restore_search_regs): Rename from restore_match_data. Uses changed.
+ (unwind_set_match_data): New function.
+ (record_unwind_save_match_data): New function like save-match-data.
+
+ * lisp.h (Fmatch_data, Fset_match_data): Fix EXFUN.
+ (record_unwind_save_match_data): Add prototype.
+ (restore_search_regs): Rename from restore_match_data.
+
+ * composite.c (compose_chars_in_text):
+ * eval.c (do_autoload):
+ * macmenu.c (set_frame_menubar):
+ * process.c (read_process_output, exec_sentinel):
+ * xmenu.c (set_frame_menubar):
+ * xdisp.c (prepare_menu_bars, update_menu_bar, update_tool_bar):
+ * w32menu.c (set_frame_menubar):
+ Use record_unwind_save_match_data.
+
+2005-06-08 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element): Alter previous change:
+ Distinguish Vshow_nonbreak_escape = t or not t.
+ For t, use escape_glyph once again, as before previous change.
+ Use space or hyphen for display, instead of the non-ASCII char.
+ (syms_of_xdisp) <show-nonbreak-escape>: Doc fix.
+
+ * process.c (Fstart_process): Don't touch command_channel_p slot.
+
+ * process.h (struct process): Delete command_channel_p.
+
+2005-06-07 Masatake YAMATO <jet@gyve.org>
+
+ * xdisp.c (note_mode_line_or_margin_highlight):
+ Check the overlapping of re-rendering area to avoid flickering.
+ (note_mouse_highlight): Call clear_mouse_face if PART
+ is not ON_MODE_LINE nor ON_HEADER_LINE.
+
+2005-06-07 Kim F. Storm <storm@cua.dk>
+
+ * process.c: Improve commentary for adaptive read buffering.
+
+2005-06-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c (x_create_toolkit_scroll_bar): Use XtNarrowScrollbars
+ if available.
+
+2005-06-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * macmenu.c (menu_quit_handler, install_menu_quit_handler):
+ New functions for popping down menus on C-g.
+ (set_frame_menubar, mac_menu_show): Call install_menu_quit_handler.
+
+ * macterm.c: Make mac_quit_char_modifiers and mac_quit_char_keycode
+ non-static.
+
+ * config.in: Add HAVE_CANCELMENUTRACKING.
+
+2005-06-06 Eli Zaretskii <eliz@gnu.org>
+
+ * w32heap.h (OFFSET_TO_RVA, RVA_TO_OFFSET, RVA_TO_PTR): Remove macros.
+
+ * unexw32.c (RVA_TO_PTR): Move here from w32heap.h.
+
+ * w32proc.c (RVA_TO_PTR): New macro.
+
+ * w32heap.c (RVA_TO_PTR): No need to #undef now.
+
+ * makefile.w32-in ($(BLD)/emacs.$(O), $(BLD)/w32select.$(O)):
+ Depend on w32heap.h.
+
+2005-06-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keyboard.c (command_loop_1): Update Vthis_original_command.
+
+2005-06-06 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (popup_get_selection): Undo previous change.
+
+2005-06-06 Juri Linkov <juri@jurta.org>
+
+ * xdisp.c (Qno_break_space): New variable.
+ (syms_of_xdisp): Initialize it.
+ (get_next_display_element): Add no-break space and soft hypen
+ codes for iso8859-2 and iso8859-5. Don't add `\' for them.
+ Use `no-break-space' face for no-break spaces.
+
+2005-06-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * window.c (delete_window): Handle the case where a h/vchild has
+ a h/vchild.
+
+2005-06-05 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (sys_setsockopt): Change arg 4 to `const void *'. In the
+ call to pfn_setsockopt, cast optval to `const char *'.
+
+2005-06-04 Eli Zaretskii <eliz@gnu.org>
+
+ * w32.c (gettimeofday): Use struct _timeb, not struct timeb.
+ (open_unc_volume): Cast return value of map_w32_filename, to avoid
+ compiler warnings.
+
+ * s/ms-w32.h (fileno): Don't define if already defined.
+
+ * emacs.c: Include w32heap.h, to avoid compiler warning about sbrk.
+
+ * makefile.w32-in (DOC): Define to point to the generated DOC-X.
+
+2005-06-04 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (popup_get_selection): Click not in menu deactivates menu.
+
+2005-06-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * macmenu.c (cleanup_popup_menu): New function.
+ (Fx_popup_menu): Unwind protect cleanup_popup_menu in case
+ mac_menu_show Quit:s.
+ (mac_menu_show): Quit on cancel if not popped up on click (i.e.
+ a dialog).
+
+2005-06-04 Kim F. Storm <storm@cua.dk>
+
+ * coding.c (decode_coding_string): Handle CODING_FINISH_INTERRUPT.
+
+ * callproc.c (Fcall_process): Don't use alloca to gradually
+ increase size of buf, as it effectively uses twice the necessary
+ space on the stack. Instead, pre-allocate buf of full size, and
+ gradually increase the read size.
+
+ * bytecode.c (BYTE_CODE_QUIT): Check Vthrow_on_input.
+
+ * eval.c (unbind_to): Preserve value of Vquit_flag.
+
+ * xterm.c (handle_one_xevent): Also ignore mouse motion just
+ before a button release event.
+
+2005-06-03 Juanma Barranquero <lekktu@gmail.com>
+
+ * xfaces.c (Finternal_lisp_face_equal_p): Really report
+ on faces in a frame, if the argument FRAME is non-nil.
+ Improve argument/docstring consistency.
+
+2005-06-02 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (MODE_LINE_NOPROP_LEN): New macro.
+ (x_consider_frame_title, Fformat_mode_line): Save offset into
+ mode_line_noprop_buf rather than pointer, in case buffer is relocated.
+
+2005-06-01 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (mapcar1): Maybe exit loop if original sequence was modified.
+
+2005-06-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_to_x_fontname, mac_do_list_fonts): Set XLFD
+ resolution fields for scalable fonts to 0.
+
+ * xfaces.c (build_scalable_font_name): Round pixel size to the
+ nearest integer.
+
+2005-06-01 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (display_mode_line): Support nested calls to redisplay
+ and format-mode-line. Set mode_line_target to MODE_LINE_DISPLAY.
+
+2005-05-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (Finsert_file_contents):
+ * xdisp.c (note_mode_line_or_margin_highlight): Lisp_Object/int mixup.
+
+2005-05-31 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (mode_line_noprop_buf, mode_line_noprop_buf_end)
+ (mode_line_noprop_ptr): Rename from frame_title_*.
+ (store_mode_line_noprop_char): Rename from store_frame_title_char.
+ (store_mode_line_noprop): Rename from store_frame_title.
+ (mode_line_target): New enum to specify current output target
+ for mode line formatting.
+ (display_mode_element): Test it rather than frame_title_ptr and
+ mode_line_string_list to determine where output should go.
+ (mode_line_proptrans_alist, mode_line_string_alist): Make static.
+ (Vmode_line_unwind_vector): New variable.
+ (format_mode_line_unwind_data, unwind_format_mode_line):
+ New functions for unwind protection in mode line formatting.
+ (x_consider_frame_title): Use them and new local var 'title_start'
+ to support nested calls to format-mode-line and redisplay.
+ Set mode_line_target to MODE_LINE_TITLE.
+ (Fformat_mode_line): Use them and new local var 'string_start' to
+ support nested calls to format-mode-line and redisplay.
+ Set mode_line_target to MODE_LINE_NOPROP or MODE_LINE_STRING.
+ Don't trim trailing dashes.
+ (decode_mode_spec): Don't make infinite number of trailing dashes
+ for MODE_LINE_NOPROP and MODE_LINE_STRING targets.
+ (syms_of_xdisp): Initialize and staticpro mode_line_string_face,
+ mode_line_string_face_prop, and Vmode_line_unwind_vector.
+ (init_xdisp): Initialize mode_line_noprop_ptr to start of _buf.
+ Initialize mode_line_target to MODE_LINE_DISPLAY.
+
+2005-05-29 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fbuffer_local_value): Call indirect_variable.
+
+2005-05-28 Masatake YAMATO <jet@gyve.org>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Change the
+ pointer to a hand cursor when hoovering over a mouse-face.
+
+2005-05-27 Kenichi Handa <handa@m17n.org>
+
+ * xterm.c (x_encode_char): Call check_ccl_update in advance.
+
+ * ccl.c: Now an element of Vccl_program_table is a vector of
+ length 4, not 3.
+ (ccl_get_compiled_code): New arg idx. Caller changed.
+ Adjust for the change of Vccl_program_table.
+ (setup_ccl_program): Adjust for the change of Vccl_program_table.
+ (check_ccl_update): New function.
+ (Fregister_ccl_program): Use ASET to set an element of a vector.
+ Adjusted for the change of Vccl_program_table.
+
+ * ccl.h (struct ccl_program): New member idx.
+ (check_ccl_update): Extern it.
+
+2005-05-27 Juanma Barranquero <lekktu@gmail.com>
+
+ * image.c (Vimage_library_alist): Move from image.el.
+ (syms_of_image): Defvar it.
+ (lookup_image_type): Use it.
+
+ * buffer.c (Fbuffer_local_value): Make argument name match its use
+ in docstring.
+
+2005-05-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * keyboard.c (Frecursive_edit): Fix typo in docstring.
+ (Fposn_at_x_y): Make argument name match its use in docstring.
+
+2005-05-26 Lute Kamstra <lute@gnu.org>
+
+ * eval.c (Frun_hooks): Mention run-mode-hooks in docstring.
+
+2005-05-24 Masatake YAMATO <jet@gyve.org>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Use b and e
+ as loop sentinels.
+
+2005-05-24 Nick Roberts <nickrob@snap.net.nz>
+
+ * xmenu.c (Fx_popup_dialog): Add a third boolean argument to
+ select frame title ("Question"/"Information").
+ (xdialog_show): Use it.
+
+ * macmenu.c (Fx_popup_dialog, mac_dialog_show): As for xmenu.c.
+
+ * w32menu.c (Fx_popup_dialog, w32_dialog_show): As for xmenu.c.
+
+ * fns.c (Fyes_or_no_p, Fy_or_n_p): Call Fx_popup_dialog with
+ a third argument (Qnil).
+
+ * lisp.h: x-popup-dialog can have three arguments.
+
+ * editfns.c (Fmessage_box): Use "Information" for frame title.
+
+2005-05-23 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * termcap.c [VMS]: Include <starlet.h>.
+
+2005-05-23 Masatake YAMATO <jet@gyve.org>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Add code
+ for mouse-face. Change the type of the first argument from `window'
+ to `Lisp_Object'.
+ (note_mouse_highlight): Call note_mode_line_or_margin_highlight with
+ window instead of w.
+
+2005-05-22 Andreas Schwab <schwab@suse.de>
+
+ * process.c (send_process): Move misplaced volatile.
+
+2005-05-21 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (display_mode_element): If we're processing a list and
+ padding is specified, put it after the last element.
+
+2005-05-21 Eli Zaretskii <eliz@gnu.org>
+
+ * fileio.c (Fexpand_file_name) [DOS_NT]: Don't try to support
+ "superroot" on DOS_NT systems.
+
+2005-05-21 David Hunter <hunterd42@comcast.net> (tiny change)
+
+ * process.c (send_process): Restore the SIGPIPE handler if we
+ catch a SIGPIPE.
+
+2005-05-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * image.c (lookup_image, png_read_from_memory): Remove hacks (and
+ misleading comments).
+ (DEF_IMGLIB_FN): Use C calling convention for image libraries.
+
+2005-05-20 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
+
+ * window.c (Fwindow_inside_edges, Fwindow_inside_pixel_edges):
+ Correct the right value.
+
+2005-05-19 Nick Roberts <nickrob@snap.net.nz>
+
+ * keyboard.c (syms_of_keyboard): Remove Lisp variables
+ post-command-idle-hook and post-command-idle-delay.
+ (command_loop_1): Don't try to execute post-command-idle-hook.
+
+2005-05-16 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (handle_display_prop): Handle empty replacement.
+ (handle_single_display_spec): Return -1 for empty replacement.
+
+ * keyboard.c (adjust_point_for_property): Skip empty overlay string.
+
+ * .gdbinit (pitx): Print more info about iterator.
+
+2005-05-16 Andreas Schwab <schwab@suse.de>
+
+ * unexmacosx.c (unexec_realloc): Move declarations before statements.
+
+2005-05-14 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (message3): Call cancel_echoing.
+
+ * alloc.c (Fmemory_full_p): New function.
+ (syms_of_alloc): defsubr it.
+
+ * process.c (send_process_trap): Unblock SIGPIPE.
+ (send_process): Reset SIGPIPE handler before reporting error.
+
+2005-05-14 Nick Roberts <nickrob@snap.net.nz>
+
+ * emacs.c (syms_of_emacs): Fix doc string for system-type.
+
+2005-05-13 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Ffind_file_name_handler): Handle lambda-exp as handler.
+ (Finsert_file_contents): If we read 0 bytes from a special file,
+ unlock the visited file if we locked it.
+ (Fmake_symbolic_link, Frecent_auto_save_p): Doc fixes.
+ (Ffile_exists_p, Ffile_symlink_p): Doc fixes.
+
+2005-05-13 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * emacs.c (main) [MAC_OS8]: Call init_atimer before mac_term_init.
+
+ * keyboard.c (readable_events) [USE_TOOLKIT_SCROLL_BARS]:
+ Regard toolkit scroll bar thumb drag events as squeezable and prevent
+ redisplay from being paused by them.
+
+ * mac.c [!MAC_OSX]: Include keyboard.h and syssignal.h.
+ [!MAC_OSX] (target_ticks): Remove variable.
+ [!MAC_OSX] (check_alarm, pause, index): Remove functions.
+ [!MAC_OSX && __MRC__] (sys_strftime): Likewise.
+ [!MAC_OSX] (select): If fd 0 is not set in rfds and some input
+ event occurs before timeout, behave as if the function were interrupted.
+ [!MAC_OSX] (sigblock, sigsetmask, alarm): Simulate SIGALRM
+ handling using Time Manager routines.
+ [!MAC_OSX] (mac_atimer_task, mac_atimer_qlink, signal_mask):
+ New variables.
+ [!MAC_OSX] (mac_atimer_handler, set_mac_atimer, remove_mac_atimer)
+ (setitimer): New functions.
+
+ * macfns.c, macmenu.c: Don't include signal.h.
+
+ * macterm.c [USE_TOOLKIT_SCROLL_BARS] (get_control_part_bounds):
+ Rename from get_control_part_bound. All callers changed.
+ (x_scroll_bar_clear): New function.
+ (x_clear_frame): Use it.
+ (XTset_vertical_scroll_bar): Don't call Draw1Control.
+ (x_scroll_bar_handle_click): Change type of second argument from
+ int to ControlPartCode.
+ (check_alarm): Remove declaration.
+ (XTread_socket) [!TARGET_API_MAC_CARBON]: Don't call it.
+ (XTread_socket): Use ControlPartCode instead of SInt16.
+
+2005-05-13 Nozomu Ando <nand@mac.com>
+
+ * unexmacosx.c: Include assert.h.
+ (MACOSX_MALLOC_MULT16): New define.
+ [MACOSX_MALLOC_MULT16] (ptr_in_unexec_regions): Determine whether
+ ptr is in unexec regions by checking it is multiple of 16.
+ (unexec_malloc_header_t): New typedef.
+ (unexec_malloc, unexec_realloc, unexec_free): Store and use
+ allocated size information in unexec_malloc_header.
+
+2005-05-10 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (noinclude): Add #undef.
+
+ * image.c, xfns.c, xmenu.c: Don't include signal.h.
+
+2005-05-09 Juanma Barranquero <lekktu@gmail.com>
+
+ * fileio.c (Fexpand_file_name, Frename_file, Fadd_name_to_file)
+ (Fmake_symbolic_link, Faccess_file, Frecent_auto_save_p):
+ Doc fixes.
+
+ * dired.c (Ffile_name_completion): Make argument name
+ match its use in docstring.
+
+2005-05-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * eval.c (Fdefvaralias): Remove any pre-existing
+ variable-documentation property of the alias.
+
+2005-05-07 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * xfns.c (start_hourglass): Do nothing when running on a tty.
+
+2005-05-07 Juanma Barranquero <lekktu@gmail.com>
+
+ * fns.c (Fchar_table_range): Fix typos in docstring.
+
+2005-05-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fns.c (Fchar_table_range): Yet Another Int/Lisp_Object Mixup.
+
+2005-05-06 Eli Zaretskii <eliz@gnu.org>
+
+ * lread.c (Flocate_file_internal): Doc fix.
+
+ * Makefile.in (lisp, shortlisp): Add jka-cmpr-hook.elc.
+
+2005-05-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macselect.c (x_own_selection): Accept Lisp string as result of
+ selection converter function.
+ (x_clear_frame_selections): Don't call x-lost-selection-functions
+ if Emacs is not owner of the selection.
+ (Vmac_services_selection): Put variable and initialization in
+ #ifdef MAC_OSX.
+ (syms_of_macselect) [MAC_OSX]: Set default value of
+ Vmac_services_selection to PRIMARY.
+
+ * macterm.c (toolkit_scroll_bar_interaction): Remove unused variable.
+ (mac_handle_tool_bar_click): Remove unused function and declaration.
+ [USE_TOOLKIT_SCROLL_BARS] (scroll_bar_timer_callback)
+ (install_scroll_bar_timer, set_scroll_bar_timer)
+ (control_part_code_to_scroll_bar_part, construct_scroll_bar_click)
+ (get_control_part_bound, x_scroll_bar_handle_press)
+ (x_scroll_bar_handle_release, x_scroll_bar_handle_drag)
+ (x_set_toolkit_scroll_bar_thumb): New functions and declarations.
+ [USE_TOOLKIT_SCROLL_BARS] (last_scroll_bar_part, scroll_bar_timer)
+ (scroll_bar_timer_event_posted_p): New variables.
+ [USE_TOOLKIT_SCROLL_BARS] (SCROLL_BAR_FIRST_DELAY)
+ (SCROLL_BAR_CONTINUOUS_DELAY): New macros.
+ (x_scroll_bar_create): Set control reference with NewControl.
+ (x_scroll_bar_create) [USE_TOOLKIT_SCROLL_BARS]:
+ Initialize track_top and track_height to nil.
+ (x_scroll_bar_set_handle, x_scroll_bar_note_movement):
+ Put functions in #ifndef USE_TOOLKIT_SCROLL_BARS.
+ (XTset_vertical_scroll_bar): Don't make space between scroll bar
+ and associated window.
+ (XTset_vertical_scroll_bar) [MAC_OSX]: Get scroll bar area width
+ from window config.
+ (XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
+ Set track_top and track_height to nil when scroll bar size is changed.
+ Recalculate them if they are nil.
+ (XTread_socket) [MAC_OSX]: Use control kind to determine if the
+ clicked control is a scroll bar.
+ (XTread_socket) [USE_TOOLKIT_SCROLL_BARS]: Use toolkit scroll bar
+ event handler functions. Don't add modifiers to scroll bar click
+ events. Call scroll bar release handler when window is deactivated.
+ (mac_initialize): Remove unused code for X toolkit.
+ (syms_of_macterm) [!USE_TOOLKIT_SCROLL_BARS]:
+ Initialize Vx_toolkit_scroll_bars to nil.
+
+ * macterm.h (struct scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
+ New members track_top and track_height.
+
+ * sysselect.h [DARWIN || MAC_OSX]: Temporarily undefine
+ init_process when including sys/select.h.
+
+2005-05-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * eval.c (Fdefvaralias): Doc fix.
+
+ * xmenu.c (Fx_popup_menu, Fx_popup_dialog): Doc fixes.
+
+2005-05-05 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (init_buffer_once): Set cursor_in_non_selected_windows
+ default value.
+ (syms_of_buffer): Add default-cursor-in-non-selected-windows.
+ Fix type of cursor-in-non-selected-windows.
+
+2005-05-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * mac.c: #undef init_process so not to conflict with system headers.
+
+2005-05-02 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer): Define cursor-in-non-selected-windows.
+
+ * buffer.h (struct buffer): Add cursor_in_non_selected_windows slot.
+
+ * xdisp.c (Vcursor_in_non_selected_windows)
+ (Qcursor_in_non_selected_windows): Vars deleted.
+ (syms_of_xdisp): Don't initialize them.
+ (get_window_cursor_type): Use cursor_in_non_selected_windows
+ buffer slot.
+
+2005-05-02 Kim F. Storm <storm@cua.dk>
+
+ * macros.c (executing_kbd_macro_index): Rename from
+ executing_macro_index. All uses changed.
+ (executing_kbd_macro_iterations): Rename from
+ executing_macro_iterations. All uses changed.
+ (executing_kbd_macro): Rename from executing_macro.
+ All uses changed.
+ (syms_of_macros): Rename Lisp var executing-macro-index to
+ executing-kbd-macro-index.
+
+ * xdisp.c (move_it_in_display_line_to): Fix last change.
+
+2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * xmenu.c (Fx_popup_menu): Doc fix.
+
+ * charset.c (syms_of_charset): Delete defsubr for Schars_in_region.
+
+2005-05-02 Jason Rumney <jasonr@gnu.org>
+
+ * emacs.c (USAGE3, USAGE4): Keep strings below 2048 bytes.
+
+2005-05-02 Nozomu Ando <nand@mac.com>
+
+ * sysselect.h: Fix typo.
+
+2005-05-02 Nick Roberts <nickrob@snap.net.nz>
+
+ * charset.c (Fchars_in_region): Remove as obsolete.
+
+2005-05-01 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_in_display_line_to): Stop if we move beyond
+ TO_CHARPOS. This may happen if last glyphs was an image or stretch
+ glyph.
+
+2005-05-01 Luc Teirlinck <teirllm@auburn.edu>
+
+ * dispnew.c (sit_for): Vexecuting_macro -> Vexecuting_kbd_macro.
+
+2005-05-01 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c [not HAVE_X_TOOLKIT] (xmenu_show):
+ If user cancels the menu, quit unless FOR_CLICK.
+
+ * macros.c (Vexecuting_kbd_macro): Rename from Vexecuting_macro.
+ All uses changed.
+ (syms_of_macros): Define only executing-kbd-macro, not executing-macro.
+ * keyboard.c: Change Vexecuting_macro to Vexecuting_kbd_macro.
+ * macros.h (Vexecuting_kbd_macro): Declare instead of Vexecuting_macro.
+ * commands.h (Vexecuting_kbd_macro): Likewise.
+
+2005-05-01 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * sysdep.c (get_frame_size) [VMS]: Use a fresh i/o channel.
+
+2005-04-30 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Ffind_file_name_handler): Handle the `operations'
+ property of the file name handler.
+ (Qoperations): New variable.
+ (syms_of_fileio): Initialize and staticpro it.
+
+ * xdisp.c (set_message_1): Delete xassert.
+
+2005-04-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c: Don't include time.h. Include sysselect.h after systime.h.
+
+ * macfns.c (Fx_server_version): Add BLOCK_INPUT around Gestalt.
+
+ * macgui.h [HAVE_CARBON && MAC_OSX]: Don't undefine/define mktime
+ before/after including Carbon.h if there is a working mktime.
+
+2005-04-28 Kim F. Storm <storm@cua.dk>
+
+ * xfaces.c (resolve_face_name): Add arg SIGNAL_P. Calls changed.
+ Fix cyclic alias check. If alias loop is detected, signal
+ circular-list error if SIGNAL_P, and return Qdefault if !SIGNAL_P.
+
+2005-04-28 Lute Kamstra <lute@gnu.org>
+
+ * eval.c (do_autoload): Record only autoloads in the autoload
+ property of symbols.
+
+2005-04-28 Nick Roberts <nickrob@snap.net.nz>
+
+ * emacs.c (USAGE1): Add --basic-display and --quick options.
+
+2005-04-27 Kim F. Storm <storm@cua.dk>
+
+ * data.c (syms_of_data) Staticpro Qcyclic_variable_indirection.
+
+2005-04-26 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fsame_window_p, Fspecial_display_p): Doc fixes.
+ (syms_of_window): Doc fixes.
+
+ * indent.c (Fvertical_motion): Undo previous change.
+
+2005-04-26 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (char_table_range): New function.
+ (Fchar_table_range): Signal an error if characters in the range
+ have inconsistent values. Don't check the parent.
+
+2005-04-25 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fontset_set): Fix previous change.
+
+2005-04-24 Richard M. Stallman <rms@gnu.org>
+
+ * indent.c (Fvertical_motion): Bind fontification-functions to nil.
+
+2005-04-24 Eli Zaretskii <eliz@gnu.org>
+
+ * regex.c (re_search_2, re_match_2_internal): Convert second arg
+ of RE_TRANSLATE to int, to shut up GCC warnings.
+
+ * fileio.c (Fcopy_file): Doc fix.
+ [MSDOS]: Fix call to emacs_open: buffer_file_type not defined and
+ not needed.
+
+2005-04-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in [HAVE_CARBON] (MAC_OBJ): Add macselect.o.
+ (SOME_MACHINE_OBJECTS): Likewise.
+ (mac.o): Depend on ccl.h.
+ (macselect.o): New target.
+
+ * emacs.c (main) [MAC_OS8 || MAC_OSX && HAVE_CARBON]:
+ Call syms_of_macselect.
+
+ * frame.c (Fdelete_frame) [MAC_OS]: Call x_clear_frame_selections.
+
+ * mac.c [!TARGET_API_MAC_CARBON]: Don't include charset.h or coding.h.
+ (QCLIPBOARD): Remove variable.
+ (syms_of_mac): Don't initialize it.
+ (Fmac_paste_function, Fmac_cut_function, Fx_selection_exists_p):
+ Remove functions.
+ (syms_of_mac): Don't defsubr them.
+ [TARGET_API_MAC_CARBON] (Qmime_charset, QNFD, QNFKD, QNFC, QNFKC)
+ (QHFS_plus_D, QHFS_plus_C): New variables.
+ (syms_of_mac) [TARGET_API_MAC_CARBON]: Initialize them.
+ [TARGET_API_MAC_CARBON] (get_cfstring_encoding_from_lisp)
+ (cfstring_create_normalized): New functions.
+ [TARGET_API_MAC_CARBON] (Fmac_code_convert_string): Likewise.
+ (syms_of_mac) [TARGET_API_MAC_CARBON]: Defsubr it.
+
+ * macterm.c (handling_window_update, terminate_flag):
+ Remove variables.
+ (do_window_update, do_ae_quit_application, XTread_socket):
+ Don't use them.
+ (WNE_SLEEP_AT_SUSPEND, WNE_SLEEP_AT_RESUME): Don't define.
+ [USE_CARBON_EVENTS && MAC_OSX] (mac_handle_service_event)
+ (init_service_handler): Move to macselect.c. Remove declarations.
+ [USE_CARBON_EVENTS && MAC_OSX] (init_service_handler): Add extern.
+ (Qapplication, Qabout): New variables.
+ (syms_of_mac): Initialize them.
+ [USE_CARBON_EVENTS && MAC_OSX] (Qpreferences, Qservices, Qpaste)
+ (Qperform): New variables.
+ (syms_of_mac) [USE_CARBON_EVENTS && MAC_OSX]: Initialize them.
+ (do_get_menus) [TARGET_API_MAC_CARBON]: Don't call AppendResMenu.
+ (do_menu_choice): Unhighlight menu bar also when menu_id is 0.
+ (mac_store_application_menu_event, init_menu_bar): New functions.
+ [USE_CARBON_EVENTS] (mac_handle_command_event)
+ (init_command_handler): New functions.
+ (mac_handle_window_event): Return noErr on window update event.
+ (do_ae_quit_application): Call mac_store_application_menu_event.
+ (mac_initialize) [USE_CARBON_EVENTS]: Call init_command_handler
+ and init_menu_bar.
+
+ * macterm.h (x_clear_frame_selections): Add extern.
+
+ * macselect.c: New file for selection processing on Mac OS.
+
+2005-04-23 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fcopy_file): New arg MUSTBENEW.
+ (Frename_file): Pass new arg to Fcopy_file.
+
+ * window.c (window_size_fixed): Variable deleted.
+ (syms_of_window): Initialize window-size-fixed to nil.
+ But don't DEFVAR window_size_fixed.
+
+2005-04-23 Andreas Schwab <schwab@suse.de>
+
+ * m/macppc.h (LD_SWITCH_MACHINE) [LINUX]: Don't define.
+ (START_FILES, LIB_STANDARD) [LINUX && _ARCH_PPC64]: Override to
+ use lib64 instead of lib.
+ (_LP64) [_ARCH_PPC64]: Define if not defined.
+
+2005-04-23 David Hunter <hunterd42@comcast.net> (tiny change)
+
+ * s/ms-w32.h (HAVE_PWD_H): Define.
+
+2005-04-22 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (copy_sub_char_table): Explicitly copy the default value
+ of the sub-chartable.
+
+ * fontset.c (fontset_set): When a sub-chartable is created,
+ explicitly sets the defalt value.
+
+2005-04-22 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (Fplist_get): Replace by Fsafe_plist_get.
+ (Fsafe_plist_get): Rename to Fplist_get.
+ (Fsafe_get): Remove, as Fget now uses safe Fplist_get.
+ (defsubr): Remove defsubr for Fsafe_plist_get and Fsafe_get.
+
+ * lisp.h (Fsafe_plist_get, Fsafe_get): Remove EXFUN.
+
+ * xdisp.c (store_mode_line_string, produce_stretch_glyph)
+ (note_mode_line_or_margin_highlight, note_mouse_highlight):
+ Use Fplist_get instead of Fsafe_plist_get.
+
+ * xfaces.c (resolve_face_name): Use Fget instead of Fsafe_get.
+
+2005-04-21 Miles Bader <miles@gnu.org>
+
+ * xdisp.c (dump_glyph_row): Don't display overlay_arrow_p field.
+
+2005-04-20 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * sysdep.c: Remove reference to defunct vms-pwd.h.
+ * dired.c: Likewise. Also, for pwd.h, use HAVE_PWD_H, not !VMS.
+ * editfns.c, fileio.c, filelock.c, sysdep.c, xrdb.c: Likewise.
+
+ * config.in: Regenerate.
+
+2005-04-20 Kenichi Handa <handa@m17n.org>
+
+ * lisp.h (CHAR_TABLE_DEFAULT_SLOT_ASCII): New macro.
+ (CHAR_TABLE_DEFAULT_SLOT_8_BIT_CONTROL): New macro.
+ (CHAR_TABLE_DEFAULT_SLOT_8_BIT_GRAPHIC): New macro.
+
+ * alloc.c (make_sub_char_table): Argument changed to initial
+ value of the slots.
+
+ * data.c (Faref): Handle special slots used as default values of
+ ascii, eight-bit-control, eight-bit-control. Don't ignore a
+ default value set for a group of characters.
+ (Faset): Signal an error if IDXVAL is not a valid character code.
+ Make a sub-chartable with correct initial value.
+
+ * fns.c (Fset_char_table_range): Don't set slots used as default
+ values for ascii, eight-bit-control, eight-bit-graphic.
+ Don't call Faref with charset-id.
+ (Fset_char_table_default): Document how to treat normal character
+ argument. Handle special slots used as default values of ascii,
+ eight-bit-control, eight-bit-control. Make a sub chartable if
+ necessary.
+
+2005-04-20 Kenichi Handa <handa@m17n.org>
+
+ * search.c (boyer_moore): Fix previous change.
+
+2005-04-19 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (setup_for_ellipsis): Reset saved_face_id to use default
+ face unless last visible char and first invisible char have the
+ same face. Also use default face if saved_face_id is undefined.
+
+2005-04-19 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macgui.h (MacFontStruct): Remove member `fontname'. Add member
+ `full_name'.
+ [TARGET_API_MAC_CARBON] (MacFontStruct): Use type int for
+ mac_scriptcode member.
+
+ * macterm.c (Qbig5, Qcn_gb, Qsjis, Qeuc_kr): Remove variables.
+ (syms_of_mac): Don't initialize them.
+ (Vmac_charset_info_alist): New variable.
+ (syms_of_mac): Defvar it.
+ (create_text_encoding_info_alist): New function.
+ (decode_mac_font_name, mac_to_x_fontname)
+ (x_font_name_to_mac_font_name, init_font_name_table): Don't hard
+ code the correspondence among XLFD charsets, Mac script codes, and
+ Emacs coding systems. Use Vmac_charset_info_alist and result of
+ create_text_encoding_info_alist instead.
+ (init_font_name_table) [TARGET_API_MAC_CARBON]: Use Font Manager
+ routines also on Mac OS Classic.
+ (init_font_name_table) [!TARGET_API_MAC_CARBON]:
+ Use add_font_name_table_entry.
+ (mac_do_list_fonts): Regard 0 in XLFD scaleble fields as
+ specified. Derive unspecified scalable fields from specified one.
+ (x_list_fonts): Consider Valternate_fontname_alist.
+ (kDefaultFontSize): Change value from 9 to 12.
+ (XLoadQueryFont): Get decoded font family, font face, and charset
+ from x_font_name_to_mac_font_name. Set full name of loaded font.
+ (mac_unload_font): Free `full_name' member.
+ (x_load_font): Don't try XLoadQueryFont if x_list_fonts returns
+ NULL. Copy full_name member of struct MacFontStruct to that of
+ struct font_info.
+
+2005-04-19 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (handle_stop): Set saved_face_id to current face if
+ selective_display_ellipsis_p so ellipsis will be shown in same
+ face as preceding text.
+ (setup_for_ellipsis): Don't set saved_face_id here.
+ (next_element_from_display_vector): Default to saved_face_id.
+
+ * fns.c (Fsafe_get): New function.
+ (syms_of_fns): Defsubr it.
+
+ * lisp.h (Fsafe_get): EXFUN it.
+
+ * xfaces.c (resolve_face_name): Use Fsafe_get to avoid redisplay
+ loops in case of bad face property lists. Limit number of face
+ alias lookups to 10 (in case of face alias loops).
+
+2005-04-18 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct glyph_row): New member overlay_arrow_bitmap.
+ It replaces the corresponding member from struct window, as a
+ window may now show multiple overlay arrows.
+ Remove member overlay_arrow_p, superseeded by overlay_arrow_bitmap.
+
+ * dispnew.c (row_equal_p, update_window_line, scrolling_window):
+ Compare overlay_arrow_bitmap than overlay_arrow_p members.
+
+ * fringe.c (draw_fringe_bitmap): Use overlay_arrow_bitmap from row
+ rather than from window.
+ (update_window_fringes): Compare overlay_arrow_bitmap rather than
+ overlay_arrow_p members.
+ (Ffringe_bitmaps_at_pos): Return fringe overlay_arrow_bitmap name
+ if not default.
+
+ * window.h (struct window): Remove member overlay_arrow_bitmap.
+
+ * window.c (make_window): Don't initialize overlay_arrow_bitmap.
+
+ * xdisp.c (overlay_arrow_string_or_property): Remove PBITMAP arg.
+ Calls changed. Don't check for overlay-arrow-bitmap property here.
+ (overlay_arrow_at_row): Remove PBITMAP arg. Instead, if left
+ fringe is present, return Lisp integer for bitmap (or -1 for default).
+ Fix value of overlay-arrow-bitmap property to be a symbol, use
+ lookup_fringe_bitmap to parse it.
+ (display_line): Change call to overlay_arrow_at_row. Store integer
+ return value as overlay bitmap in row rather than window.
+ Only show overlay arrow if row displays text, or if no other overlay
+ arrow is seen in window (if overlay marker is at point-max).
+
+2005-04-18 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * xfaces.c (realize_x_face) [!HAVE_WINDOW_SYSTEM]: Return NULL.
+
+2005-04-18 Lute Kamstra <lute@gnu.org>
+
+ * lread.c (Vloads_in_progress): Static.
+ * fns.c (Vloads_in_progress): Remove extern.
+ (load_in_progress): Add extern.
+ (Frequire): Use load_in_progress instead of Vloads_in_progress.
+
+2005-04-18 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * xmenu.c (Fx_popup_menu): Initialize error_name to NULL.
+
+2005-04-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (XTread_socket): Don't beep on keyboard input even if
+ no frame is visible.
+
+2005-04-16 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * term.c (struct keys): Add support for shifted keys.
+
+2005-04-16 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (with_echo_area_buffer): Delete WHICH < 0 case.
+ (set_message): Call with_echo_area_buffer with WHICH = 0.
+ (set_message_1): Erase the echo area buffer first thing.
+ (echo_area_display): Don't clear echo_message_buffer.
+
+2005-04-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * Makefile.in (mac.o): Depend on charset.h and coding.h.
+
+ * mac.c: Include charset.h and coding.h.
+ [TARGET_API_MAC_CARBON] (Qutf_8): Remove extern.
+ [TARGET_API_MAC_CARBON] (cfstring_create_with_string): New function.
+ [TARGET_API_MAC_CARBON] (Fmac_get_preference): Use it.
+
+ * macfns.c [TARGET_API_MAC_CARBON] (Fx_file_dialog): Likewise.
+
+ * image.c [MAC_OSX] (image_load_quartz2d): Likewise.
+
+ * macterm.c (x_autoselect_window_p): Remove variable.
+ (last_window): New variable.
+ (XTreassert_line_highlight, x_change_line_highlight):
+ Remove declarations.
+ (mac_focus_changed, x_detect_focus_change): New functions and
+ declarations.
+ (XTextExtents16, front_emacs_window): Remove function.
+ (mac_focus_frame): New function.
+ (XTmouse_position, do_menu_choice, do_zoom_window, XTread_socket)
+ (mac_check_for_quit_char): Use it instead of front_emacs_window.
+ (x_scroll_bar_report_motion): Obtain window from control owner.
+ (x_make_frame_invisible): Set window manager size hint.
+ (do_mouse_moved): Remove function.
+ (XTread_socket): Move its contents here. Generate select-window
+ event on mouse movement if needed. Use x_detect_focus_change on
+ activate/deactivate events. Don't deiconify frame or invalidate
+ window rectangle when dnd items are dropped.
+ Don't activate/deactivate root control.
+ (frame_highlight, frame_unhighlight): Activate/deactivate root
+ control here.
+ (syms_of_macterm): Delete DEFVAR_BOOL for x_autoselect_window_p.
+
+ * macterm.h (cfstring_create_with_string) [TARGET_API_MAC_CARBON]:
+ New extern.
+
+2005-04-15 Luc Teirlinck <teirllm@auburn.edu>
+
+ * Makefile.in: Define new macro TOOLTIP_SUPPORT.
+ (lisp): Use it.
+ (SOME_MACHINE_LISP): Add tooltip.
+
+2005-04-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c [!TARGET_API_MAC_CARBON]: Include MacLocales.h.
+ Don't include TextEncodingConverter.h.
+ (mac_system_script_code, Vmac_system_locale): New variables.
+ (syms_of_mac): Defvar them.
+ (mac_get_system_locale): New function.
+
+ * macfns.c (x_set_name, x_set_title) [!TARGET_API_MAC_CARBON]:
+ Use ENCODE_SYSTEM to encode title bar string.
+ (x_create_tip_frame): Apply 2005-03-18 change for xfns.c.
+ (Fx_file_dialog) [TARGET_API_MAC_CARBON && !MAC_OSX]:
+ Use CFStringGetSystemEncoding to get system default string encoding.
+
+ * macterm.c [!TARGET_API_MAC_CARBON]: Don't include
+ TextEncodingConverter.h.
+
+2005-04-13 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (syms_of_macterm): Remove redundant definition of
+ mac-pass-control-to-system.
+
+2005-04-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (Fset_window_configuration): Be careful when you choose
+ among several possible points for the new_current_buffer.
+
+2005-04-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c (poll_for_input) [SYNC_INPUT]: Don't call
+ poll_for_input_1. Set interrupt_input_pending to 1 instead.
+ (Qlanguage_change) [MAC_OS]: New variable.
+ (syms_of_keyboard) [MAC_OS]: Intern and staticpro it.
+ (kbd_buffer_get_event) [MAC_OS]: Make event for LANGUAGE_CHANGE_EVENT.
+
+ * macterm.c (mac_keyboard_text_encoding)
+ (current_mac_keyboard_text_encoding): Remove variables.
+ (XTread_socket): Store language-change event if keyboard script change
+ is detected. Don't convert input to `mac_keyboard_text_encoding'.
+ (syms_of_macterm): Delete DEFVAR_INT for mac-keyboard-text-encoding.
+
+ * termhooks.h (enum event_kind) [MAC_OS]: Add LANGUAGE_CHANGE_EVENT.
+
+2005-04-10 Richard M. Stallman <rms@gnu.org>
+
+ * emacs.c (standard_args): Rename --bare-bones to --quick.
+ Add -D aka --basic-display.
+
+ * buffer.c (Fmake_indirect_buffer): Clear out some local variables.
+
+2005-04-09 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (where_is_internal): Convert a string used as event type
+ into "(any string)".
+
+ * lread.c (Vloads_in_progress): Not static.
+ * fns.c (Vloads_in_progress): Add extern.
+ (Frequire): Don't do LOADHIST_ATTACH if Vloads_in_progress is nil.
+
+2005-04-09 Thien-Thi Nguyen <ttn@surf.glug.org>
+
+ * dispnew.c (mirror_line_dance): Avoid crash if W2 is null.
+
+2005-04-09 Lute Kamstra <lute@gnu.org>
+
+ * print.c (PRINTPREPARE): Check if the marker PRINTCHARFUN is
+ within the accessible part of the buffer.
+
+2005-04-09 Kim F. Storm <storm@cua.dk>
+
+ * lread.c (readevalloop): Add args START and END as region in
+ current buffer to read. Callers changed.
+ When specified, narrow to this region only when reading,
+ not during eval. Track next point to read from during eval.
+ Also restore point to "real" buffer position before eval.
+ (Feval_region): Don't save excursion and restriction here, and
+ don't narrow to region. Just pass region to readevalloop.
+ Note: Point is now preserved even when PRINTFLAG is nil.
+
+2005-04-08 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (syms_of_xdisp): Init overlay-arrow-string to "=>".
+
+2005-04-06 Kim F. Storm <storm@cua.dk>
+
+ * emacs.c (standard_args): Add -Q, --bare-bones, -bare-bones.
+
+2005-04-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (cfdate_to_lisp): Add `const' for variable `epoch_gdate'.
+ (Fmac_get_preference): Doc fix.
+
+ * macfns.c (Fx_create_frame, x_create_tip_frame):
+ Add "fontset-mac" to fallback font/fontsets.
+
+2005-04-04 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (Fgarbage_collect): Call CHECK_CONS_LIST before and after gc.
+
+ * eval.c (Ffuncall): Always call CHECK_CONS_LIST on entry.
+ Call it again after autoload.
+
+2005-04-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling
+ mallopt.
+
+ * ralloc.c (r_alloc_init): Ditto.
+
+2005-04-01 Kenichi Handa <handa@m17n.org>
+
+ * lisp.h (Vascii_upcase_table, Vascii_canon_table)
+ (Vascii_eqv_table): Extern them.
+
+ * casetab.c (set_case_table): If standard is nonzero, setup
+ Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table.
+
+ * search.c (looking_at_1): Use current_buffer->case_canon_table,
+ not DOWNCASE_TABLE.
+ (string_match_1): Likewise.
+ (fast_c_string_match_ignore_case): Use Vascii_canon_table, not
+ Vascii_downcase_table.
+ (fast_string_match_ignore_case): Likewise.
+ (search_buffer): Fix checking of boyer-moore usability.
+ (boyer_moore): Calculate translate_prev_byte1/2/3 in advance.
+ No need of tranlating characters in PAT. Fix calculation of
+ simple_translate.
+
+2005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap.
+ (x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it.
+ Use XtNtopShadowPixel and XtNbottomShadowPixel.
+ (x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't
+ really work and that breaks with some versions of Xaw3d.
+
+2005-03-31 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (syms_of_coding): Fix previous change.
+
+2005-03-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (search_embedded_absfilename): Fix last change.
+
+2005-03-25 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (syms_of_coding): Suggest to use set-coding-category in
+ the docstring of coding-category-list.
+
+2005-03-31 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (Qmouse_fixup_help_message): New var.
+ (syms_of_keyboard): Intern and staticpro it.
+ (show_help_echo): Apply mouse-fixup-help-message to help string.
+
+2005-03-30 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (display_line): Allow multiple overlay arrows in window.
+
+2005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP.
+ (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p.
+ (Ffile_name_absolute_p): Use it.
+ (search_embedded_absfilename): New fun, extracted from
+ Fsubstitute_in_file_name. Use file_name_absolute_p.
+ Free the pw data after use.
+ (Fsubstitute_in_file_name): Use it.
+ After cutting a prefix, re-check file-name-handler.
+
+2005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se>
+
+ * w32term.h (x_output): Add focus_state.
+
+ * w32term.c (x_focus_changed, w32_detect_focus_change): New functions.
+ (w32_read_socket) <WM_SETFOCUS>: Call w32_detect_focus_change.
+
+2005-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuf.c (Fminibuffer_complete_and_exit, Fself_insert_and_exit):
+ Use Fexit_minibuffer.
+ (Fexit_minibuffer): Mark it as no-return, deactivate the mark.
+
+2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * dired.c (Ffile_attributes): Add a missing gcpro.
+
+ * alloc.c (make_number): The arg can be bigger than `int'.
+ * lisp.h (make_number): Make prototype more precise.
+
+ * process.c, dired.c (Vfile_name_coding_system)
+ (Vdefault_file_name_coding_system):
+ * callproc.c (Vdoc_file_name, Vfile_name_coding_system)
+ (Vdefault_file_name_coding_system): Remove unused declarations.
+
+2005-03-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (create_and_show_popup_menu): Just remove menu and return
+ if it failed to pop up (Gnome "show pointer on ctrl" option makes
+ menus fail to pop up).
+
+2005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xdisp.c (get_next_display_element): Also use `\ ' & `\-' for latin-9.
+ Just prepend a backslash without replacing the NBSP by an SPC.
+
+2005-03-22 Kim F. Storm <storm@cua.dk>
+
+ * xfaces.c (lookup_derived_face): Add arg SIGNAL_P.
+ * dispextern.h (lookup_derived_face): Fix prototype.
+ * msdos.c (XMenuActivate): Fix call to lookup_derived_face.
+
+ * xdisp.c (handle_single_display_spec): Derive left-fringe and
+ right-fringe face from fringe face.
+
+ * fringe.c (draw_fringe_bitmap_1, Fset_fringe_bitmap_face):
+ Derive face from fringe face.
+
+2005-03-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xrdb.c (x_load_resources): Undo previous change (2005-03-18).
+
+2005-03-22 David Kastrup <dak@gnu.org>
+
+ * textprop.c (Fnext_char_property_change)
+ (Fprevious_char_property_change): Allow marker as limit.
+ (Fnext_single_char_property_change)
+ (Fprevious_single_char_property_change): Check that limit is a
+ number in strings.
+ (Fnext_single_char_property_change): Coerce position to integer.
+ (Fprevious_single_char_property_change): Same here.
+
+2005-03-21 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * s/openbsd.h (LD_SWITCH_SYSTEM_tmp): Define if undefined.
+
+2005-03-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * frame.c (Fignore_event): Remove.
+ (syms_of_frame): Don't defsubr it.
+
+ * keyboard.c (keys_of_keyboard): Just use `ignore' instead of the
+ redundant `ignore-event'.
+
+2005-03-19 Eli Zaretskii <eliz@gnu.org>
+
+ * unexec.c (write_segment, unexec): Move these functions to avoid
+ forward references (which cause errors with "gcc -gcoff").
+
+2005-03-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_create_tip_frame): Remove setting of Vx_resource_name so
+ that it doesn't become "tooltip". The specbind is enough.
+
+ * xrdb.c (x_load_resources): Use different char *helv when I18N
+ is present.
+
+2005-03-17 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (syms_of_coding): Docstring of coding-category-list fixed.
+
+2005-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xfaces.c (x_update_menu_appearance) [HAVE_X_I18N]:
+ Use xic_create_fontsetname even for non-Motif menus.
+ Don't forget to free the fontsetname.
+
+ * xfns.c (xic_create_fontsetname): Add a final catch-all font pattern.
+
+2005-03-17 Richard M. Stallman <rms@gnu.org>
+
+ * dispnew.c (mirror_line_dance): Set W2 according to FRAME_FROM.
+
+ * fileio.c (Fcopy_file, Frename_file, Fadd_name_to_file)
+ (Fmake_symbolic_link): Use G to read the new file name.
+
+ * callint.c (Finteractive): Document G option.
+ (Fcall_interactively): Implement G option.
+
+ * buffer.c (buffer_lisp_local_variables): New function,
+ broken out from Fbuffer_local_variables.
+ (clone_per_buffer_values): Use buffer_lisp_local_variables.
+
+2005-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xfns.c (xic_create_fontsetname): Add `motif' argument.
+ Always return a freshly allocated string.
+ (xic_create_xfontset): Adjust call.
+
+ * xfaces.c (x_update_menu_appearance) [USE_MOTIF]:
+ Use xic_create_fontsetname to create a fontset so utf-8 locales work.
+ (dump_realized_face): Fix warning.
+
+ * emacs.c (Fkill_emacs): YAILOM.
+
+ * frame.c (Fignore_event): Fix ancient obscure C-u handling bug.
+
+2005-03-17 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (HASHKEY_TERMINAL): Remove.
+ (HASHKEY_MAX_NID): New macro.
+ (xrm_q_get_resource_1): Rename from xrm_q_get_resource. Add extra
+ argument.
+ (xrm_q_get_resource): Call xrm_q_get_resource_1 with extra argument.
+ (xrm_create_database, xrm_q_put_resource)
+ (xrm_merge_string_database, xrm_q_get_resource_1)
+ (xrm_q_get_resource): Change resource database representation so
+ that it may not use multiple hash tables for a single database.
+ [TARGET_API_MAC_CARBON] (xrm_cfproperty_list_to_value): YAILOM.
+
+2005-03-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xmenu.c (ENCODE_MENU_STRING) [HAVE_X_I18N]: Use ENCODE_SYSTEM.
+
+ * coding.h (ENCODE_SYSTEM, DECODE_SYSTEM) [!WINDOWSNT]: Use the
+ locale-coding-system, as was already done for WINDOWSNT.
+
+ * keyboard.c (read_char): Only do the 7-bit-meta -> 27-bit-meta
+ translation for chars in the 0-255 range.
+
+2005-03-16 Lute Kamstra <lute@gnu.org>
+
+ * floatfns.c (Ffloor): Doc fix.
+
+2005-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c: Include macterm.h instead of directly including Carbon.h.
+ [TARGET_API_MAC_CARBON] (Qstring, Qnumber, Qboolean, Qdate, Qdata)
+ (Qarray, Qdictionary): New variables.
+ (syms_of_mac) [TARGET_API_MAC_CARBON]: Initialize them.
+ [TARGET_API_MAC_CARBON] (Qutf_8): Add extern.
+ [TARGET_API_MAC_CARBON] (DECODE_UTF_8): New macro.
+ [TARGET_API_MAC_CARBON] (struct cfdict_context): New struct used
+ in callback for CFDictionaryApplyFunction.
+ [TARGET_API_MAC_CARBON] (cfdata_to_lisp, cfstring_to_lisp)
+ (cfnumber_to_lisp, cfdate_to_lisp, cfboolean_to_lisp)
+ (cfobject_desc_to_lisp, cfdictionary_add_to_list)
+ (cfdictionary_puthash, cfproperty_list_to_lisp): New functions.
+ [TARGET_API_MAC_CARBON] (Fmac_get_preference): New function.
+ (syms_of_mac) [TARGET_API_MAC_CARBON]: Defsubr it.
+ (P, LOOSE_BINDING, SINGLE_COMPONENT, HASHKEY_TERMINAL): New macro.
+ (skip_white_space, parse_comment, parse_include_file)
+ (parse_binding, parse_component, parse_resource_name, parse_value)
+ (parse_resource_line, xrm_create_database, xrm_q_put_resource)
+ (xrm_merge_string_database, xrm_q_get_resource, xrm_get_resource)
+ (xrm_cfproperty_list_to_value, xrm_get_preference_database):
+ New functions.
+
+ * macfns.c (mac_get_rdb_resource): Remove function.
+ (x_get_string_resource): Use xrm_get_resource.
+
+ * macgui.h (XrmDatabase): Typedef to Lisp_Object.
+
+ * macterm.c (x_list_fonts): FONT-LIST-CACHE is now cadr part of
+ name_list_element.
+ (mac_make_rdb): Create resource database from preferences and
+ argument string.
+ (mac_term_init): Save resource database to cddr part of
+ name_list_element.
+
+ * macterm.h (xrm_merge_string_database, xrm_get_resource)
+ (xrm_get_preference_database): Add externs.
+ [TARGET_API_MAC_CARBON] (cfdata_to_lisp, cfstring_to_lisp)
+ (cfnumber_to_lisp, cfdate_to_lisp, cfboolean_to_lisp)
+ (cfobject_desc_to_lisp, cfproperty_list_to_lisp): Likewise.
+
+ * process.c (init_process): Change `#ifdef DARWIN' to `#if
+ defined (DARWIN) || defined (MAC_OSX)'.
+
+ * s/darwin.h (DARWIN): Don't define.
+
+2005-03-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (Qhyper, Qsuper, Qmeta, Qalt, Qctrl, Qcontrol, Qshift):
+ Remove unused variables.
+ (syms_of_macfns): Don't initialize them. Likewise for
+ Qface_set_after_frame_default. Defvar and initialize
+ Vx_window_horizontal_drag_shape.
+ (x_set_mouse_color): Change mouse pointer shape.
+ (mac_window) [!MAC_OSX]: Create root control.
+ (Fx_create_frame): Remove initializations of mouse pointer shapes.
+ (hourglass_started): New function (from xfns.c).
+ (start_hourglass, cancel_hourglass): Put function body in #ifdef
+ MAC_OSX.
+ (show_hourglass) [TARGET_API_MAC_CARBON]: Create progress
+ indicator for each non-tooltip frame if needed, and show it.
+ (hide_hourglass) [TARGET_API_MAC_CARBON]: Hide progress indicators.
+
+ * macgui.h [!TARGET_API_MAC_CARBON]: Include Appearance.h and
+ Controls.h. Use ThemeCursor instead of CursHandle.
+
+ * macterm.c (activate_scroll_bars, deactivate_scroll_bars):
+ Remove functions and declarations.
+ (mac_set_colors): Take argument for saving background color.
+ All callers changed.
+ (XDrawLine, XClearArea, mac_draw_bitmap, XFillRectangle)
+ (mac_draw_rectangle, mac_draw_string_common): Save and Restore
+ background color.
+ (x_update_end, mac_do_track_drag): Don't reset background color.
+ (mac_define_frame_cursor) [!TARGET_API_MAC_CARBON]:
+ Use SetThemeCursor.
+ (x_set_window_size) [TARGET_API_MAC_CARBON]: Move progress
+ indicator control to the upper-right corner of the window.
+ (arrow_cursor) [!TARGET_API_MAC_CARBON]: Remove variable.
+ (do_init_managers) [!TARGET_API_MAC_CARBON]: Don't initialize it.
+ (do_window_update): Update controls after updating content area.
+ (mac_handle_window_event): Remove unused extern.
+ (XTread_socket): Check both control handle and control part code
+ to determine whether a scroll bar is clicked. Activate/deactivate
+ root control instead of contained scroll bar controls.
+ (make_mac_terminal_frame): Use ThemeCursor constants.
+
+ * macterm.h (struct mac_output) [TARGET_API_MAC_CARBON]:
+ New member hourglass_control.
+ (HOURGLASS_WIDTH, HOURGLASS_HEIGHT): New defines.
+ (activate_scroll_bars, deactivate_scroll_bars): Remove declarations.
+
+2005-03-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (keycode_to_xkeysym_table): Change mapping so that it
+ coincides with that in Apple X11 except `clear', `enter' on
+ laptops, and fn + `enter' on laptops.
+
+2005-03-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xmenu.c (ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
+ (list_of_panes, list_of_items, Fx_popup_menu): Use XCAR/XCDR.
+ (digest_single_submenu, xmenu_show): Use ENCODE_MENU_STRING.
+
+ * xfns.c (xic_defaut_fontset): New constant.
+ (xic_create_fontsetname): New function.
+ Extracted from create_frame_xic. Try to generate a slightly
+ better fontset.
+ (xic_create_xfontset): Use it.
+ (create_frame_xic): Simplify.
+
+2005-03-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (Fmake_symbolic_link): Fix last change.
+
+2005-03-11 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Frename_file, Fadd_name_to_file)
+ (Fmake_symbolic_link): If NEWNAME or LINKNAME is a directory,
+ expand the basename of FILE relative to it.
+
+2005-03-11 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Finsert_file_contents): Call Fcheck_coding_system
+ before calling setup_coding_system so that autoloading of a coding
+ system work.
+
+2005-03-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (hourglass_started): New function.
+
+ * dispextern.h: Declare hourglass_started.
+
+ * keyboard.c (Fexecute_extended_command): Restart hourglass
+ after call to Fcompleting_read if already started.
+
+ * gtkutil.c (xg_update_scrollbar_pos): Call x_sync so that the
+ GTK main loop is entered in xterm.c, thus doing the redraw.
+
+2005-03-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (pos_visible_p): Fix X value in last line of buffer.
+
+2005-03-08 Kenichi Handa <handa@m17n.org>
+
+ * frame.c (x_set_font): Call set_default_ascii_font if an
+ available font is found.
+
+ * fontset.c (set_default_ascii_font): New function.
+ (syms_of_fontset): Don't set FONTSET_ASCII (Vdefault_fontset) here.
+
+ * fontset.h (set_default_ascii_font): Extern it.
+
+2005-03-07 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (CLEAR_IMAGE_CACHE_COUNT): New const.
+ (clear_image_cache_count): New var.
+ (redisplay_internal): Don't clear face and image caches in the
+ middle of redisplay; do it afterwards.
+
+ * blockinput.h (TOTALLY_UNBLOCK_INPUT): Avoid dangling else.
+
+ * xdisp.c (notice_overwritten_cursor): Check that phys_cursor.vpos
+ is valid. If not, clear phys_cursor_on_p and return.
+
+2005-03-07 Andreas Schwab <schwab@suse.de>
+
+ * blockinput.h (UNBLOCK_INPUT_TO): Always call UNBLOCK_INPUT.
+
+2005-03-06 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (Ftop_level): Let Fthrow deal with UNBLOCK_INPUT.
+
+ * eval.c (unwind_to_catch): Use UNBLOCK_INPUT_TO.
+ (Feval, Ffuncall): Use CHECK_CONS_LIST.
+
+ * lisp.h (CHECK_CONS_LIST): New macro (two definitions).
+
+ * blockinput.h (UNBLOCK_INPUT_TO): New macro.
+ (TOTALLY_UNBLOCK_INPUT): Handle a pending signal if any.
+
+2005-03-05 Juri Linkov <juri@jurta.org>
+
+ * emacs.c (USAGE1): Replace Info node name "command arguments"
+ with "emacs invocation".
+ (USAGE3): Fix usage of `--color=MODE' which actually doesn't
+ allow arguments `--color' and `MODE' to be separated by space.
+ Add --no-blinking-cursor, -nbc.
+ (standard_args): Add -nbc, --no-blinking-cursor.
+
+2005-03-04 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * s/vms.h: Define NO_HYPHENS_IN_FILENAMES.
+ * s/vms4-4.h, s/vms5-5.h: Undefine NO_HYPHENS_IN_FILENAMES.
+ * fileio.c (Fexpand_file_name) [VMS]:
+ Use NO_HYPHENS_IN_FILENAMES, not VMS4_4.
+ * doc.c (munge_doc_file_name) [VMS]: Likewise.
+ (Fsnarf_documentation): Call munge_doc_file_name.
+
+2005-03-04 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * s/vms.h (FILE_SYSTEM_CASE): New macro.
+ * fileio.c (Fexpand_file_name) [VMS]: Don't upcase the name
+ "manually"; this is now handled generally via FILE_SYSTEM_CASE.
+
+2005-03-04 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * emacs.c (main): Change `#ifdef HAVE_CARBON' to `#if
+ defined (MAC_OSX) && defined (HAVE_CARBON)'.
+
+ * image.c [!MAC_OSX && TARGET_API_MAC_CARBON]: Include QuickTime.h.
+
+ * mac.c [!MAC_OSX && HAVE_CARBON]: Include Carbon.h.
+ [!MAC_OSX] (select) [TARGET_API_MAC_CARBON]: Use ReceiveNextEvent.
+ (posix_pathname_to_fsspec, fsspec_to_posix_pathname): New functions.
+ (mac_clear_font_name_table): Move extern to macterm.h.
+
+ * macfns.c (install_window_handler): Move extern to macterm.h.
+ (Fx_file_dialog): Check STRINGP (default_filename) to see it is
+ valid. Don't check !NILP (dir) because it is already checked with
+ CHECK_STRING.
+ (Fx_file_dialog) [!MAC_OSX]: Use FSSpec instead of FSRef for
+ specifying the default location and obtaining the selected filename.
+
+ * macgui.h [!MAC_OSX && HAVE_CARBON]: Include Carbon.h.
+
+ * macmenu.c [TARGET_API_MAC_CARBON]: Don't include headers that
+ are included via Carbon.h.
+
+ * macterm.c [TARGET_API_MAC_CARBON && !MAC_OSX]:
+ Define USE_CARBON_EVENTS to 1.
+ (qd) [__MRC__ && TARGET_API_MAC_CARBON]: Don't declare.
+ (x_free_frame_resources): Call remove_window_handler for
+ non-tooltip windows.
+ [TARGET_API_MAC_CARBON]: Don't include headers that are included
+ via Carbon.h.
+ [TARGET_API_MAC_CARBON] (mac_do_track_dragUPP)
+ (mac_do_receive_dragUPP): New variables.
+ (mac_handle_service_event, init_service_handler): Put declarations
+ and definitions in #ifdef MAC_OSX.
+ (install_window_handler) [TARGET_API_MAC_CARBON]: Create UPPs for
+ drag-and-drop handler functions and register them.
+ (remove_window_handler): New function.
+ (do_ae_open_documents, mac_do_receive_drag) [!MAC_OSX]:
+ Use fsspec_to_posix_pathname.
+ (main): Change #if !TARGET_API_MAC_CARBON to #ifdef MAC_OS8.
+ (XTread_socket) [!MAC_OSX]: Don't pass keyboard events to TSM.
+ [MAC_OS8] (make_mac_terminal_frame) [TARGET_API_MAC_CARBON]:
+ Set default cursors.
+ (mac_initialize) [USE_CARBON_EVENTS && !MAC_OSX]: Don't call
+ init_service_handler or init_quit_char_handler.
+ (mac_initialize) [!MAC_OSX]: Don't call MakeMeTheFrontProcess.
+
+ * macterm.h (install_window_handler, remove_window_handler)
+ (posix_pathname_to_fsspec, fsspec_to_posix_pathname)
+ (mac_clear_font_name_table): New externs.
+
+2005-03-03 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * fileio.c (FILE_SYSTEM_CASE): Define macro if not already defined.
+ (Ffile_name_directory): Use FILE_SYSTEM_CASE unconditionally.
+ (Fexpand_file_name): Likewise.
+
+2005-03-03 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs.c (Fkill_emacs): Use EXIT_SUCCESS;
+ no longer special-case VMS. Add bogus return value.
+
+2005-03-02 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (XASSERTS): Define to 0 if not already defined.
+ (xassert) [!XASSERTS]: Define dummy version.
+
+2005-03-02 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): YABX (yet another bogus xassert).
+ Reported by David Kastrup.
+
+2005-03-01 Ehud Karni <ehud@unix.mvs.co.il>
+
+ * xdisp.c (get_next_display_element): Fix control and escape
+ glyph from display vector.
+
+2005-03-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keyboard.c (Fposn_at_x_y): Check integerness of X and Y.
+
+2005-02-27 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (fast_find_position): Rename END to BEG.
+ (syms_of_xdisp) <menu-bar-update-hook>: Doc fix.
+
+2005-02-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_resize_outer_widget): Remove unneeded call to
+ gtk_window_resize and x_wm_set_size_hint.
+
+2005-02-25 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (OVERLAY_STRING_CHUNK_SIZE): Increase from 3 to 16.
+
+ * xdisp.c (init_from_display_pos): Don't read past end of
+ it->overlay_strings array.
+
+2005-02-25 Stephan Stahl <stahl@eos.franken.de> (tiny change)
+
+ * buffer.c (syms_of_buffer): Fix typo.
+
+2005-02-23 Lute Kamstra <lute@gnu.org>
+
+ * buffer.c (Foverlay_buffer): Doc fix.
+
+2005-02-22 Kim F. Storm <storm@cua.dk>
+
+ * minibuf.c (Ftry_completion, Fall_completions): Allow both string
+ and symbol keys in alists and hash tables.
+
+ * xdisp.c (fast_find_position): Fix search for start of overlay.
+
+2005-02-21 Kim F. Storm <storm@cua.dk>
+
+ * window.c (window_scroll_pixel_based): When scrolling backwards,
+ handle partial visible line at end of window even when we hit PT.
+
+2005-02-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.h: Declare Fcurrent_active_maps, used in doc.c.
+
+2005-02-21 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_vertically_backward): Eliminate two xasserts.
+ I think those asserts are bogus if buffer contains invisible text
+ or images.
+
+2005-02-21 David Kastrup <dak@gnu.org>
+
+ * gtkutil.c (xg_create_frame_widgets): UNBLOCK_INPUT on error.
+
+2005-02-20 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (pos_visible_p): Be sure to move to the specified
+ position. Always get the full ascent / descent of the
+ corresponding row, to return reliable rtop and rbot values.
+ (back_to_previous_visible_line_start): Fix 2005-01-18 change.
+ Must look one character back, as back_to_previous_line_start
+ returns position after the newline.
+ (move_it_vertically_backward): Fix heuristic for when to move further
+ back in case line_height * 2/3 is larger than window height.
+ (cursor_row_fully_visible_p): Rename make_cursor_line_fully_visible_p
+ as it does not do anything anymore. Add arg current_matrix_p to
+ use current matrix rather than desired matrix when set.
+ (try_cursor_movement): Don't scroll to make cursor row fully
+ visible if cursor didn't move. This avoids unexpected recentering
+ in case of blinking cursor or accepting process output.
+ Use current matrix to check cursor row visibility.
+ (redisplay_window): Fix whether to recenter or move to top in case
+ cursor line is taller than window height.
+ (find_first_unchanged_at_end_row): Stop search if we reach a row
+ which not enabled (instead of abort).
+
+2005-02-18 Kim F. Storm <storm@cua.dk>
+
+ * xfaces.c (Finternal_set_lisp_face_attribute): Allow :color property
+ to be nil in a :box attribute value list; customize prints that
+ as lisp value when no box color is specified.
+
+ * .gdbinit (pitx, pit): Pretty print display iterator.
+ (prowx, prow): Pretty print glyph row.
+ (pcursorx, pcursor): Pretty print a window cursor.
+ (pwinx, pwin): Pretty print struct window.
+
+2005-02-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (BLOCK_BYTES): Harmless typo.
+
+2005-02-17 Andreas Schwab <schwab@suse.de>
+
+ * xfns.c (hack_wm_protocols): Use correct type for last parameter
+ of XGetWindowProperty to avoid aliasing issues.
+ (Fx_window_property): Likewise.
+
+ * xselect.c (Fx_disown_selection_internal): Use union of struct
+ input_event and struct selection_input_event to avoid aliasing issues.
+
+ * xterm.c (handle_one_xevent): Use union of struct input_event and
+ struct selection_input_event to avoid aliasing issues.
+ (SET_SAVED_MENU_EVENT): Adapt reference to inev.
+
+2005-02-17 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (enum it_method): New enum.
+ (GET_FROM_*): Its members.
+ (struct it): Change member method from function pointer to enum.
+
+ * xdisp.c (check_it, init_from_display_pos, handle_stop)
+ (setup_for_ellipsis, handle_single_display_spec)
+ (handle_composition_prop, next_overlay_string)
+ (get_overlay_strings, reseat_1, reseat_to_string)
+ (next_element_from_ellipsis, BUFFER_POS_REACHED_P)
+ (in_display_vector_p, display_line, get_next_display_element):
+ Change it->method from function pointer to enum.
+ (get_next_element): New array to map it->method to function.
+ (get_next_display_element): Use it.
+ (set_iterator_to_next): Use switch instead of if/else chain.
+
+2005-02-15 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
+
+ * w32select.c: Summary: Thorough rework to implement Unicode
+ clipboard operations and delayed rendering.
+
+ Drop last_clipboard_text and related code, keep track of
+ ownership via clipboard_owner instead. Drop old #if0 sections.
+
+ (DEFAULT_LCID, ANSICP, OEMCP, QUNICODE, QANSICP, QOEMCP)
+ (clipboard_owner, modifying_clipboard, cfg_coding_system)
+ (cfg_codepage, cfg_lcid, cfg_clipboard_type, current_text)
+ (current_coding_system, current_requires_encoding)
+ (current_num_nls, current_clipboard_type, current_lcid):
+ New static variables.
+
+ (convert_to_handle_as_ascii, convert_to_handle_as_coded)
+ (render, render_all, run_protected, lisp_error_handler)
+ (owner_callback, create_owner, setup_config)
+ (enum_locale_callback, cp_from_locale, coding_from_cp):
+ New local functions.
+
+ (term_w32select, globals_of_w32select): New global functions.
+
+ (Fw32_set_clipboard_data): Ignore parameter FRAME, use
+ clipboard_owner instead. Use delayed rendering and provide
+ all text formats. Provide CF_LOCALE if necessary.
+
+ (Fw32_get_clipboard_data): Handle CF_UNICODETEXT and
+ CF_LOCALE. Fall back to CF_TEXT, if CF_UNICODETEXT is not
+ available. Force DOS line-ends for decoding.
+
+ (Fx_selection_exists_p): Handle CF_UNICODETEXT.
+
+ (syms_of_w32select): Init and register new variables.
+
+ * w32.h: Add prototypes for globals_of_w32select and
+ term_w32select. Make the neighboring K&R declarations into
+ prototypes, too.
+
+ * emacs.c: Include w32.h to get function prototypes.
+ (main): Call globals_of_w32select.
+
+ * w32.c (term_ntproc): Call term_w32select.
+
+ * s/ms-w32.h: Guard MSC-specific #pragmas with an #ifdef.
+
+2005-02-16 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (BUFFER_POS_REACHED_P): Return true if pos reached and
+ at end of display vector.
+
+2005-02-15 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element): Fix escape-glyph criterion
+ for mode and header lines.
+
+ * lread.c (syms_of_lread) <user-init-file>: Doc fix.
+
+ * keymap.h (describe_map_tree): Change decl.
+
+ * keyboard.c (command_loop_1): Always use safe_run_hooks
+ to run Qdeferred_action_function.
+
+ * keymap.c (describe_map_tree): New arg MENTION_SHADOW. Calls changed.
+ (describe_map, describe_vector): Likewise. When it's 1,
+ don't omit shadowed bindings, instead mark them as shadowed.
+
+ * doc.c (Fsubstitute_command_keys): Compute list of shadowing maps
+ for describe_map_tree. Pass 1 for MENTION_SHADOW.
+
+ * data.c (Fsetq_default): Allow no arg case.
+
+2005-02-14 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (encode_coding_string): Always return a unibyte string.
+ If NOCOPY is nonzero and there's no need of encoding, make STR
+ unibyte directly.
+
+ * xselect.c (lisp_data_to_selection_data): If OBJ is a non-ASCII
+ multibyte string, signal an error instead of aborting.
+
+2005-02-12 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * keyboard.c: If HAVE_FCNTL_H include fcntl.h.
+
+2005-02-12 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (expose_window): Don't fix overlaps for mode lines.
+
+2005-02-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (try_window_id): Set first_unchanged_at_end_row to NULL
+ if it moves outside window or it doesn't display text.
+
+2005-02-09 Kim F. Storm <storm@cua.dk>
+
+ * undo.c (Fprimitive_undo): Check that undo function does not
+ switch buffer.
+
+2005-02-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (selection_data_to_lisp_data): For the special case
+ type == XA_ATOM, data contains array of int, not array of Atom.
+ (x_property_data_to_lisp, selection_data_to_lisp_data):
+ Comment update: data must be array of int for format == 32.
+
+2005-02-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * undo.c (Fprimitive_undo): Check veracity of delta,start,end.
+
+2005-02-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_change_window_property): Use long array when format is 32.
+ (Fx_window_property): If format is 32 and long is bigger than 32 bits,
+ convert long array returned from XGetWindowProperty to an int array.
+ (x_set_tool_bar_lines): Check that width and height is greater than
+ zero before clearing area.
+
+ * xselect.c (x_reply_selection_request): Pass long array to
+ XChangeProperty so that 64 bit longs are handeled correctly.
+ (x_get_window_property): If format is 32 and long is bigger than 32
+ bits convert data from XGetWindowProperty from long array to int array.
+ (lisp_data_to_selection_data): When the input is a vector and the
+ format is 32, allocate a long array even if long is bigger than 32 bits.
+ (x_fill_property_data): Use char, short and long as the man page
+ for XChangeProperty specifies. This way the data returned is OK for
+ both 32 and 64 bit machines.
+ (x_handle_dnd_message): Calculate size correctly even for 64 bit
+ machines.
+ (Fx_send_client_event): Undo change from 2005-02-05,
+ x_fill_property_data now handles that case.
+
+ * xfns.c (Fx_backspace_delete_keys_p): Add comment about the
+ reason for the approach in the code.
+
+2005-02-07 Kim F. Storm <storm@cua.dk>
+
+ * undo.c (Fprimitive_undo): Record max one dummmy apply element.
+
+2005-02-06 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (Frun_hook_with_args)
+ (Frun_hook_with_args_until_success)
+ (Frun_hook_with_args_until_failure): Doc fixes.
+
+2005-02-05 Andreas Schwab <schwab@suse.de>
+
+ * sysdep.c (sys_subshell): Properly terminate execlp argument list.
+
+2005-02-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
+ the longs in a XClientMessageEvent correctly when long is 64 bits.
+
+2005-02-05 Eli Zaretskii <eliz@gnu.org>
+
+ * xfaces.c (face_color_supported_p): Use HAVE_WINDOW_SYSTEM
+ instead of HAVE_X_WINDOWS, for non-X windowed sessions.
+
+2005-02-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (menubar_selection_callback): Force out GTK buffered
+ events so the menu event comes after them. This is to prevent sit-for
+ from exiting on buffered events directly after a menu selection,
+ lisp code for Help => About Emacs uses sit-for.
+
+ * gtkutil.c (create_menus): Connect selection-done event instead of
+ the deactivate event to deactivate_cb. This will make the last
+ leave event come before the call to deactivate_cb, so the leave
+ event does not make sit-for exit after a menu selection.
+
+2005-02-03 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (build_frame_matrix_from_leaf_window)
+ [!GLYPH_DEBUG]: Fix xassert.
+
+ * xfaces.c (x_free_gc) [!GLYPH_DEBUG]: Fix xassert.
+
+ * xfns.c (unwind_create_frame) [!GLYPH_DEBUG]: Fix xassert.
+
+2005-02-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c: Use MAC_OS_X_VERSION_MAX_ALLOWED to conditionalize by
+ the compiling OS version.
+
+ * macfns.c (x_create_tip_frame): Likewise.
+
+ * macterm.c (mac_draw_string_common, x_make_frame_visible): Likewise.
+
+2005-02-03 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (x_error_quitter): On GCC 3 and up, specify noinline.
+
+ * xdisp.c (echo_area_display): Clear echo_message_buffer.
+
+ * buffer.c (Fbury_buffer): Doc fix.
+
+2005-02-02 Steven Tamm <steventamm@mac.com>
+
+ * macfns.c (unwind_create_frame): Fix compile error due to
+ xassert being uncondition, but predicate is.
+ * dispnew.c (update_window): Fix compile error due to
+ xassert being uncondition, but predicate is.
+
+2005-02-02 Miles Bader <miles@gnu.org>
+
+ * dispextern.h (xassert): Enable unconditionally.
+
+2005-02-02 Kim F. Storm <storm@cua.dk>
+
+ * undo.c (Fprimitive_undo): Fix dummy apply undo entry.
+
+2005-02-02 Kenichi Handa <handa@m17n.org>
+
+ * casefiddle.c (casify_object): Enable changing characters of
+ different byte length.
+ (casify_region): Fix loop condition, args to replace_range_2, and
+ update opoint_byte.
+
+ * insdel.c (replace_range_2): Fix bugs in adjusting markers and point.
+
+2005-02-01 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (back_to_previous_visible_line_start): Reset iterator
+ stack before calling handle_display_prop.
+
+2005-01-31 Kim F. Storm <storm@cua.dk>
+
+ * undo.c (Qapply): New lisp var.
+ (syms_of_undo): Intern and staticpro it.
+ (Fprimitive_undo): Support formats (apply FUNNAME . ARGS) and
+ (apply DELTA BEG END FUNNAME . ARGS) instead of (FUNNAME . ARGS).
+
+ * buffer.c (syms_of_buffer) <buffer-undo-list>: Doc fix.
+
+2005-01-30 Jesper Harder <harder@phys.au.dk>
+
+ * macterm.c (syms_of_macterm) <mac-reverse-ctrl-meta>
+ <mac-emulate-three-button-mouse>: Fix docstring indentation.
+
+2005-01-29 Luc Teirlinck <teirllm@auburn.edu>
+
+ * undo.c (syms_of_undo) <undo-outer-limit>: Doc update.
+ Increase value to 3 Meg.
+
+2005-01-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (show_hourglass): Use FRAME_X_WINDOW as parent for GTK,
+ button events are not received otherwise.
+
+2005-01-29 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer) <buffer-undo-list>: Doc fix.
+
+ * undo.c (Fprimitive_undo): Handle (FUNNAME . ARGS) by calling FUNNAME.
+
+2005-01-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (access_keymap): YAILOM.
+
+2005-01-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_phys_cursor_geometry): New function to calculate
+ phys cursor position and size for hollow cursor. Position is
+ aligned with get_glyph_string_clip_rect and ensures that a hollow
+ cursor is shown, even when the actual glyph is not visible.
+
+ * dispextern.h (get_phys_cursor_geometry): Add prototype.
+
+ * xterm.c (x_clip_to_row): Ensure y >= 0.
+ (x_draw_hollow_cursor): Use get_phys_cursor_geometry.
+
+ * w32term.c (x_draw_hollow_cursor): Use get_phys_cursor_geometry.
+
+ * macterm.c (x_draw_hollow_cursor): Use get_phys_cursor_geometry.
+
+2005-01-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c (x_error_quitter): Add a prototype. Make it static again.
+
+2005-01-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_glyph_string_clip_rect): Always show a cursor
+ glyph, even when row is only partially visible and actual cursor
+ position is not visible.
+
+2005-01-24 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (x_error_quitter): No longer static, and moved after
+ x_error_handler.
+
+2005-01-24 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_by_lines): If we move forward after going too
+ far back, cancel move if end position is same as start position.
+
+2005-01-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispextern.h (struct glyph_string): New members clip_head and
+ clip_tail.
+
+ * xdisp.c (get_glyph_string_clip_rect): Restrict horizontal clip
+ region to the area between clip_head and clip_tail.
+ (draw_glyphs): Record the area that need to be actually redrawn to
+ the new variables clip_head and clip_tail when there are
+ overhangs. Set values of these variables to the corresponding
+ members in struct glyph_string. Refine x coordinates for
+ notice_overwritten_cursor using clip_head and clip_tail.
+
+ * macgui.h (STORE_XCHARSETSTRUCT): New macro.
+
+ * macterm.c (mac_compute_glyph_string_overhangs): Implement with
+ QDTextBounds.
+ (x_draw_glyph_string): Don't fill the background of the successor
+ of a glyph with a right overhang if the successor will draw a cursor.
+ (XLoadQueryFont): Obtain font metrics using QDTextBounds.
+ (x_redisplay_interface): Add entry for compute_glyph_string_overhangs.
+
+2005-01-24 Kim F. Storm <storm@cua.dk>
+
+ * window.c (window_scroll_pixel_based): Fix scrolling in the wrong
+ direction if window height was smaller than next-screen-context-lines.
+ Now always scroll at least one line in the requested direction.
+ Ensure that we actually do scroll backwards when requested to do so.
+
+ * xdisp.c (redisplay_window): Only try to make cursor line fully
+ visible once (to avoid redisplay loop).
+
+2005-01-23 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fpos_visible_in_window_p): Simplify return value for
+ partially visible rows.
+ (window_scroll_pixel_based): Adapt to that change.
+
+ * window.c (window_scroll_pixel_based): Force moving to next line
+ if scrolling doesn't move start point, e.g. if looking at tall image.
+
+ * xdisp.c (pos_visible_p): Return 0 if non-interactive.
+ Clear last_height before calling line_bottom_y to get real height.
+ Fix calculation of y.
+
+2005-01-22 Steven Tamm <steventamm@mac.com>
+
+ * s/darwin.h: Removed PTY_ITERATION from here.
+ (DARWIN): Define.
+
+ * process.c (init_process): Default process-connection-type to
+ nil on darwin 6 or less, t if it is 7 or higher. This way the
+ broken pty behavior is still allowed on darwin 6 for interactive
+ processes for people that know what they are doing.
+
+2005-01-22 Kim F. Storm <storm@cua.dk>
+
+ * window.c (auto_window_vscroll_p): New boolean.
+ (syms_of_window): DEFVAR_BOOL it.
+ (Fpos_visible_in_window_p): Extend return value to include RTOP
+ and RBOT values if FULLY is nil.
+ (window_scroll_pixel_based): Adjust vscroll for partially visible
+ rows if auto_window_vscroll_p is set.
+ (Fset_window_vscroll): Do nothing if vscroll is not modified.
+
+ * xdisp.c (pos_visible_p): Replace FULLY arg by RTOP and RBOT args
+ to return number of partially invisible pixels at top and bottom
+ of the dislay row at POS.
+
+ * lisp.h (pos_visible_p): Fix prototype.
+
+2005-01-21 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fcopy_file): Doc fix.
+
+2005-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_detach_callback): Remove unused variable bw.
+ (xg_get_file_name): Move declaration ofx_use_old_gtk_file_dialog to
+ start of function for older compilers.
+
+2005-01-20 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fmessage): If arg is "", return "" (as before).
+
+ * keymap.c (access_keymap): Protect from bad value of meta_prefix_char.
+
+ * .gdbinit (xgetptr, xgetint, xgettype): Copy $arg0 into a temp
+ variable.
+
+2005-01-20 Steven Tamm <steventamm@mac.com>
+
+ * editfns.c (Voperating_system_release): Add.
+ (init_editfns): Assign new variable operating-system-release
+ based on call to uname if available.
+ (get_operating_system_release): Add function to
+ allow c-level access to operating system release.
+
+ * config.h: Regenerated.
+
+ * s/darwin.h (PTY_ITERATION): Don't allow PTYs on darwin 6 or less.
+ (MIN_PTY_KERNEL_VERSION): Define minimum kernel version for
+ using ptys as '7'.
+
+2005-01-20 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (STRING_MARKED_P, VECTOR_MARKED_P): Return boolean.
+
+ * xterm.c (x_draw_glyph_string_box): Fix last_x for full width rows.
+ Thanks to Chong Yidong <cyd@stupidchicken.com> for debugging this.
+
+ * macterm.c (x_draw_glyph_string_box): Likewise.
+
+ * w32term.c (x_draw_glyph_string_box): Likewise.
+
+ * indent.c (Fvertical_motion): Temporarily disable selective display.
+
+2005-01-19 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Fix :pointer
+ image property.
+
+ * fns.c (sweep_weak_table): Advance prev pointer when we keep a pair.
+
+2005-01-18 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (fast_find_position): Backtrack to find first row if
+ charpos is inside a display overlay that spans multiple lines.
+
+2005-01-18 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (decode_coding_iso2022): Translate invalid codes if
+ translation-table is specified.
+
+2005-01-18 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (back_to_previous_visible_line_start): Undo 2004-12-28
+ change. If handle_display_prop indicates newline is replaced by
+ image or text, move back to start of relevant overlay or interval
+ and continue scan from there. Simplify.
+
+2005-01-17 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (mode_line_string, marginal_area_string):
+ Fix off-by-one error in search for glyph.
+
+2005-01-16 Kim F. Storm <storm@cua.dk>
+
+ * macterm.c (syms_of_macterm) <mac-allow-anti-aliasing>: Doc fix.
+
+2005-01-16 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (mac_to_x_fontname): Remove spurious argument.
+
+2005-01-16 Andreas Schwab <schwab@suse.de>
+
+ * macterm.c (mac_draw_string_common): Fix compilation on OSX 10.1.
+
+2005-01-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * fringe.c (Fdefine_fringe_bitmap, init_fringe): When assigning
+ fringe_faces, cast result from xmalloc/xrealloc to Lisp_Object *.
+
+2005-01-16 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c (READABLE_EVENTS_DO_TIMERS_NOW)
+ (READABLE_EVENTS_FILTER_EVENTS, READABLE_EVENTS_IGNORE_SQUEEZABLES):
+ New flags for readable_events.
+ (get_filtered_input_pending, readable_filtered_events): Remove.
+ (tracking_off): Call readable_events and get_input_pending with
+ flag READABLE_EVENTS_DO_TIMERS_NOW.
+ (readable_events): Move code from old readable_filtered_events here,
+ but check new READABLE_EVENTS_* in argument flags instead of previous
+ two boolean arguments do_timers_now and filter_events.
+ If we are doing mouse tracking and the mouse moved, return only if
+ READABLE_EVENTS_IGNORE_SQUEEZABLES is not set in flags.
+ (swallow_events): Call get_input_pending with flag
+ READABLE_EVENTS_DO_TIMERS_NOW.
+ (get_input_pending): Move code from old get_filtered_input_pending
+ here. Replace boolean arguments do_timers_now, filter_events with
+ flags, and pass flags to readable_events. Document new
+ READABLE_EVENTS_* flags.
+ (detect_input_pending_ignore_squeezables): New function.
+ (detect_input_pending_run_timers): Call get_input_pending with flag
+ READABLE_EVENTS_DO_TIMERS_NOW.
+ (Finput_pending_p): Call get_input_pending with flags
+ READABLE_EVENTS_DO_TIMERS_NOW and READABLE_EVENTS_FILTER_EVENTS.
+
+ * dispnew.c (update_window, update_frame_1): Replace calls to
+ detect_input_pending with detect_input_pending_ignore_squeezables
+ so that redisplay is not paused if the event queue contains only
+ mouse movements.
+
+ * lisp.h: Declare detect_input_pending_ignore_squeezables.
+
+2005-01-15 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (Vmac_use_core_graphics): Declare variable for
+ mac-allow-anti-aliasing.
+ (syms_of_macterm): DEFVAR_LISP and initialize it.
+ (mac_draw_string_common): Use core graphics text rendering if
+ mac-allow-anti-aliasing is enabled.
+
+ * macfns.c (Fx_file_dialog): Save As dialog includes only the
+ file name in the text box.
+
+2005-01-15 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (x_set_foreground_color, x_set_background_color):
+ Sync with xfns.c.
+ (mac_window, x_create_tip_frame): Use XSetWindowBackground.
+ * macterm.c (XSetBackground, XSetWindowBackground): New functions.
+ * macterm.h (XSetBackground, XSetWindowBackground): Add externs.
+
+2005-01-14 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (Fposn_at_x_y): Add optional arg WHOLE.
+
+2005-01-13 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (Fcurrent_active_maps): Ignore Voverriding_local_map
+ if Voverriding_terminal_local_map is non-nil.
+
+ * keyboard.c (syms_of_keyboard): Doc fix.
+
+2005-01-13 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (Fformat_mode_line): Fix last change. Remove NO_PROPS arg
+ (specify 0 for FACE instead). Reorder arg list. Doc fix.
+
+2005-01-12 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (Fformat_mode_line): New arg FACE specifies a default
+ face property for characters that don't specify one.
+
+ * fns.c (Frequire): Record in load-history unconditionally.
+
+2005-01-10 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (merge_faces): Rename from merge_into_realized_face.
+
+ * xfaces.c (merge_faces): Rename from merge_into_realized_face.
+ Callers changed.
+ Add support to merge with lisp face id too (if face_name is t).
+
+ * xdisp.c (get_next_display_element, next_element_from_display_vector):
+ Don't lookup lface_id from display table glyphs here; instead use
+ merge_faces to merge the lisp face id into current face.
+
+2005-01-09 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct it): New member dpvec_face_id.
+ (merge_into_realized_face): Add prototype.
+
+ * xfaces.c (merge_into_realized_face): New function. Used to
+ merge escape-glyph face or face from display table into current face.
+
+ * xdisp.c (Vshow_nonbreak_escape): New lisp var.
+ (syms_of_xdisp): DEFVAR_LISP it.
+ (escape_glyph_face): Remove var.
+ (redisplay_window): Don't initialize it.
+ (setup_for_ellipsis, get_next_display_element):
+ Set it->dpvec_face_id to -1.
+ (get_next_display_element): Test Vshow_nonbreak_escape.
+ Do not setup escape_glyph_face.
+ Properly merge escape-glyph face or face from display table with
+ current face for escape and control characters.
+ Set it->dpvec_face_id to relevant face id instead of adding it to each
+ element of display vector.
+ (next_element_from_display_vector): If it->dpvec_face_id is set,
+ use that instead of lface_id from glyph itself.
+
+2005-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (struct x_output): New member, toolbar_detached.
+
+ * gtkutil.c (xg_create_frame_widgets): Set initial tool bar height to
+ 38.
+ (xg_tool_bar_detach_callback): Set toolbar_detached to 1.
+ (xg_tool_bar_attach_callback): Set toolbar_detached to 0.
+ (xg_create_tool_bar): Initialize toolbar_detached.
+ (update_frame_tool_bar): Only set FRAME_TOOLBAR_HEIGHT (f) if
+ toolbar_detached is zero.
+
+2005-01-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (create_and_show_popup_menu): Pass zero as button to
+ gtk_menu_popup if not for_click, so callbacks for the menu are called.
+
+ * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
+ (xg_tool_bar_callback, xg_tool_bar_help_callback)
+ (update_frame_tool_bar): Cast to EMACS_INT to avoid compiler warning.
+
+ * xselect.c (x_get_foreign_selection, x_fill_property_data)
+ (Fx_get_atom_name, Fx_send_client_event): Replace XFLOAT with
+ XFLOAT_DATA to get extract number from Lisp object.
+
+2005-01-07 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_iterator_to_next): Fix 2004-12-13 change.
+ Set stop_charpos to current charpos instead of 0.
+
+2005-01-06 Nick Roberts <nickrob@snap.net.nz>
+
+ * xdisp.c (Fformat_mode_line): First arg now required.
+
+2005-01-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (XLoadQueryFont): Correctly handle 0 size
+ font widths that are returned from some Japanese fonts.
+
+2005-01-06 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (fringe_faces): Change to Lisp_Object pointer.
+ (draw_fringe_bitmap_1): Lookup user defined fringe faces here.
+ (destroy_fringe_bitmap): Set fringe_faces element to nil.
+ (Fdefine_fringe_bitmap, init_fringe): Change allocation of
+ fringe_faces array and init elements to nil.
+ (Fset_fringe_bitmap_face): Set fringe_faces to face name instead of
+ non-persistent face id.
+ (mark_fringe_data): New function for GC.
+
+ * alloc.c (mark_fringe_data): Declare extern.
+ (Fgarbage_collect): Call mark_fringe_data.
+
+ * alloc.c (overrun_check_free): Invalidate freed memory if
+ XMALLOC_CLEAR_FREE_MEMORY is defined.
+
+2005-01-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c: Include sys/param.h.
+ [TARGET_API_MAC_CARBON] (mac_nav_event_callback): New declaration
+ and function.
+ [TARGET_API_MAC_CARBON] (Fx_file_dialog): Use MAXPATHLEN for size
+ of filename string. Set event callback function when creating
+ dialog boxes. Add code conversions for filenames. Don't dispose
+ of apple event descriptor record if failed to create it.
+
+ * macterm.c: Include sys/param.h.
+ [USE_CARBON_EVENTS] (mac_handle_window_event): Add handler for
+ kEventWindowUpdate.
+ (install_window_handler) [USE_CARBON_EVENTS]: Register it.
+ (do_ae_open_documents) [TARGET_API_MAC_CARBON]: Get FSRef instead
+ of FSSpec from apple event descriptor record.
+ (do_ae_open_documents) [TARGET_API_MAC_CARBON]: Use MAXPATHLEN for
+ size of filename string.
+ [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Likewise.
+ [TARGET_API_MAC_CARBON] (mac_do_receive_drag): Return error when a
+ file dialog is in action.
+ [TARGET_API_MAC_CARBON] (mac_do_track_drag): Likewise.
+ Reject only when there are no filename items. Set background color
+ before (un)highlighting the window below the dragged items.
+ (XTread_socket) [USE_CARBON_EVENTS]: Don't call do_window_update.
+
+2005-01-05 Romain Francoise <romain@orebokech.com>
+
+ * term.c (encode_terminal_code): Fix buffer size computation.
+
+2005-01-04 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (Fformat_mode_line): Doc fix.
+
+2005-01-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (refill_memory_reserve): Move.
+ (emacs_blocked_free, emacs_blocked_malloc, emacs_blocked_realloc)
+ (reset_malloc_hooks, uninterrupt_malloc) [SYNC_INPUT]: Don't define.
+
+2005-01-03 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (window_scroll_pixel_based): Don't correct preserve_y
+ for CURRENT_HEADER_LINE_HEIGHT when moving backwards.
+
+2005-01-03 Jason Rumney <jasonr@gnu.org>
+
+ * w32bdf.c (w32_load_bdf_font): Set fontp->average_width and
+ fontp->space_width to FONT_WIDTH so they are valid.
+
+ * w32fns.c (w32_load_system_font): Set FONT_WIDTH to maximum, not
+ average width. Set fontp->average_width and fontp->space_width to
+ their appropriate values.
+
+ * w32term.c (x_new_font): Set FRAME_COLUMN_WIDTH to
+ fontp->average_width, not FONT_WIDTH. Set FRAME_SPACE_WIDTH to
+ fontp->space_width.
+
+2005-01-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (x_new_font): Set FRAME_SPACE_WIDTH.
+ (x_font_min_bounds, XLoadQueryFont): Use the correct font width
+ metrics for max and min bounds.
+ (x_load_font): Correctly calculate average font width metrics.
+
+2005-01-02 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (Fgarbage_collect): Don't truncate_undo_list on dead buffers.
+
+2004-12-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Clear area in expose event for GTK.
+
+2004-12-31 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (setup_for_ellipsis, get_next_display_element):
+ Set it->ellipsis_p to 1 or 0.
+ (display_line): Record whether row ends in mid-ellipsis.
+ (set_cursor_from_row): If ends in ellipsis, find start of it.
+ (cursor_row_p): If PT's at the end of the ellipsis the row
+ ends within, don't display cursor on this row.
+
+ * dispextern.h (struct it): New element ellipsis_p.
+ (struct glyph_row): New element ends_in_ellipsis_p.
+
+ * xdisp.c (BUFFER_POS_REACHED_P): We haven't reached the specified
+ position if we're reading from something other than the buffer.
+
+ * window.c (window_scroll_pixel_based): Only look at
+ Vscroll_preserve_screen_position if the old PT can't be kept.
+ (syms_of_window) <scroll-preserve-screen-position>: Doc fix.
+
+2004-12-30 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_line_height_property): New function extracted from
+ original calc_line_height_property.
+ (calc_line_height_property): Rework. Handle t and (nil . ratio).
+ (x_produce_glyphs): Use them to handle line-height and
+ line-spacing according to new height spec.
+ (Qtotal): Remove.
+ (syms_of_xdisp): Remove intern and staticpro for Qtotal.
+
+2004-12-30 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Finsert_file_contents): Don't use
+ current_buffer->buffer_file_coding_system even if REPLACE is
+ non-nil. Call Qafter_insert_file_set_coding with the second arg VISIT.
+
+ * fontset.h (struct font_info): New members space_width and
+ average_width.
+
+ * frame.h (struct frame): New member space_width.
+ (FRAME_SPACE_WIDTH): New macro.
+
+ * xterm.h (struct x_display_info): New member Xatom_AVERAGE_WIDTH.
+
+ * xterm.c (x_new_font): Set FRAME_COLUMN_WIDTH to
+ fontp->average_width, not FONT_WIDTH. Set FRAME_SPACE_WIDTH to
+ fontp->space_width.
+ (x_load_font): Calculate fontp->space_width and fontp->average_width.
+ (x_term_init): Initialize dpyinfo->Xatom_AVERAGE_WIDTH.
+
+ * xdisp.c (x_produce_glyphs): Calculate tab width by
+ FRAME_SPACE_WIDTH, not FRAME_COLUMN_WIDTH.
+
+2004-12-29 Sanghyuk Suh <han9kin@mac.com>
+
+ * macterm.c (SelectionRange): Add Xcode position apple event struct.
+ (do_ae_open_documents): Handle Xcode-style file position open events.
+
+2004-12-29 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.c (syms_of_buffer) <vertical-scroll-bar>: Correct typo.
+
+2004-12-29 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer) <vertical-scroll-bar>: Doc fix.
+
+2004-12-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (install_window_handler): Modify extern to return OSErr
+ value.
+ (mac_window): Handle return value of install_window_handler.
+
+ * macterm.c (reflect_byte): Remove function.
+ (mac_create_bitmap_from_bitmap_data): Don't call reflect_byte.
+ Lookup table instead.
+ (mac_do_font_lists): Simplify calculation of the longest
+ nonspecial string.
+ (init_mac_drag_n_drop): Remove function and declaration.
+ (mac_initialize) [TARGET_API_MAC_CARBON]: Don't call
+ init_mac_drag_n_drop.
+ (mac_do_track_drag): New function and declaration.
+ (install_window_handler): Return OSErr value.
+ (install_window_handler) [TARGET_API_MAC_CARBON]:
+ Register handlers for tracking/receiving drag-and-drop items.
+ (do_ae_open_documents): Generate unibyte strings for filenames.
+ (mac_do_receive_drag) [TARGET_API_MAC_CARBON]: Likewise.
+ Reject only non-filename items. Set event modifiers, and return value.
+
+2004-12-28 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * coding.c (decode_coding): Fix previous change.
+
+2004-12-28 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (back_to_previous_visible_line_start):
+ Don't call handle_display_prop.
+
+2004-12-28 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * coding.c (decode_coding_XXX, decode_composition_emacs_mule)
+ (decode_coding_emacs_mule, encode_coding_emacs_mule)
+ (decode_coding_iso2022, encode_designation_at_bol)
+ (encode_coding_iso2022, decode_coding_sjis_big5, decode_eol)
+ (decode_coding): Constify arguments and local vars.
+
+2004-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (popup_get_selection): Only pop down dialogs
+ on C-g and Escape.
+ (popup_get_selection): Remove parameter down_on_keypress.
+ (create_and_show_popup_menu, create_and_show_dialog):
+ Remove parameter down_on_keypress to popup_get_selection.
+
+2004-12-27 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * dispextern.h: Change HAVE_CARBON to MAC_OS.
+ (struct glyph_string): Likewise.
+
+ * emacs.c (main) [MAC_OS8]: Call mac_term_init instead of
+ mac_initialize.
+
+ * fileio.c (Fnext_read_file_uses_dialog_p, Fread_file_name):
+ Change TARGET_API_MAC_CARBON to HAVE_CARBON.
+
+ * fns.c (vector): Change MAC_OSX to MAC_OS.
+
+ * frame.c (x_set_frame_parameters, x_report_frame_params)
+ (x_set_fullscreen): Remove #ifndef HAVE_CARBON.
+ (x_set_border_width, Vdefault_frame_scroll_bars):
+ Change HAVE_CARBON to MAC_OS.
+
+ * image.c [MAC_OS]: Include sys/stat.h.
+ [MAC_OS && !MAC_OSX]: Include sys/param.h, ImageCompression.h, and
+ QuickTimeComponents.h.
+
+ * mac.c [!MAC_OSX] (mac_wait_next_event): Add extern.
+ [!MAC_OSX] (select): Use mac_wait_next_event.
+ [!MAC_OSX] (run_mac_command): Change EXEC_SUFFIXES to Vexec_suffixes.
+ [!MAC_OSX] (select, run_mac_command): Change `#ifdef
+ TARGET_API_MAC_CARBON' to `#if TARGET_API_MAC_CARBON'.
+ (mac_clear_font_name_table): Add extern.
+ (Fmac_clear_font_name_table): New defun.
+ (syms_of_mac): Defsubr it.
+ [MAC_OSX] (SELECT_POLLING_PERIOD_USEC): New define.
+ [MAC_OSX] (select_and_poll_event): New function.
+ [MAC_OSX] (sys_select): Use it.
+ [MAC_OSX && SELECT_USE_CFSOCKET] (socket_callback): New function.
+ [MAC_OSX && SELECT_USE_CFSOCKET]
+ (SELECT_TIMEOUT_THRESHOLD_RUNLOOP, EVENT_CLASS_SOCK): New defines.
+ [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]: Use CFSocket and
+ RunLoop for simultaneously monitoring two kinds of inputs, window
+ events and process outputs, without periodically polling.
+
+ * macfns.c (mac_initialized): Remove extern.
+ (stricmp): Put in #if 0. All callers changed to use xstricmp in
+ xfaces.c.
+ (strnicmp): Decrement `n' at the end of each loop, not the beginning.
+ (check_mac): Use the term "Mac native windows" instead of "Mac OS".
+ (check_x_display_info, x_display_info_for_name): Sync with xfns.c.
+ (mac_get_rdb_resource): New function (from w32reg.c).
+ (x_get_string_resource): Use it.
+ (install_window_handler): Add extern.
+ (mac_window): New function.
+ (Fx_create_frame): Use it instead of make_mac_frame.
+ Set parameter for Qfullscreen. Call x_wm_set_size_hint.
+ (Fx_open_connection, Fx_close_connection): New defuns.
+ (syms_of_macfns): Defsubr them.
+ (x_create_tip_frame) [TARGET_API_MAC_CARBON]:
+ Add kWindowNoUpdatesAttribute to the window attribute.
+ (x_create_tip_frame) [!TARGET_API_MAC_CARBON]: Use NewCWindow.
+ (x_create_tip_frame): Don't call ShowWindow.
+ (Fx_show_tip): Call ShowWindow.
+ (Fx_file_dialog): Change `#ifdef TARGET_API_MAC_CARBON' to `#if
+ TARGET_API_MAC_CARBON'.
+ (mac_frame_parm_handlers): Set handlers for Qfullscreen.
+ (syms_of_macfns) [MAC_OSX]: Initialize mac_in_use to 0.
+
+ * macgui.h [!MAC_OSX]: Don't include Controls.h. Include Windows.h.
+ (Window): Typedef to WindowPtr and move outside `#if
+ TARGET_API_MAC_CARBON'.
+ (XSizeHints): New struct.
+
+ * macterm.c (x_update_begin, x_update_end)
+ [TARGET_API_MAC_CARBON]: Disable screen updates during update of a
+ frame.
+ (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
+ [MAC_OS8]: Use XDrawImageString/XDrawImageString16.
+ (construct_mouse_click): Put in #if 0.
+ (x_check_fullscreen, x_check_fullscreen_move): Remove decls.
+ (x_scroll_bar_create, x_scroll_bar_handle_click): Change `#ifdef
+ TARGET_API_MAC_CARBON' to `#if TARGET_API_MAC_CARBON'.
+ (activate_scroll_bars, deactivate_scroll_bars)
+ [!TARGET_API_MAC_CARBON]: Use ActivateControl/DeactivateControl.
+ (x_make_frame_visible) [TARGET_API_MAC_CARBON]: Reposition window
+ if the position is neither user-specified nor program-specified.
+ (x_free_frame_resources): Free size_hints.
+ (x_wm_set_size_hint): Allocate size_hints if needed. Set size_hints.
+ (mac_clear_font_name_table): New function.
+ (mac_do_list_fonts): Initialize font_name_table if needed.
+ (x_list_fonts): Don't initialize font_name_table. Add BLOCK_INPUT
+ around mac_do_list_fonts.
+ (mac_unload_font): New function.
+ (x_load_font): Add BLOCK_INPUT around XLoadQueryFont.
+ (init_mac_drag_n_drop, mac_do_receive_drag): Enclose declarations
+ and definitions with #if TARGET_API_MAC_CARBON.
+ [USE_CARBON_EVENTS] (mac_handle_window_event): Add decl.
+ (install_window_handler): Add decl.
+ (do_window_update): Add BeginUpdate/EndUpdate for the tooltip
+ window. Use UpdateControls. Get the rectangle that should be
+ updated and restrict the target of expose_frame to it.
+ (do_grow_window): Set minimum height/width according to size_hints.
+ (do_grow_window) [TARGET_API_MAC_CARBON]: Use ResizeWindow.
+ (do_zoom_window): Don't use x_set_window_size.
+ [USE_CARBON_EVENTS] (mac_handle_window_event): New function.
+ (install_window_handler): New function.
+ [!USE_CARBON_EVENTS] (mouse_region): New variable.
+ [!USE_CARBON_EVENTS] (mac_wait_next_event): New function.
+ (XTread_socket) [USE_CARBON_EVENTS]: Move call to
+ GetEventDispatcherTarget inside BLOCK_INPUT.
+ (XTread_socket) [!USE_CARBON_EVENTS]: Use mac_wait_next_event.
+ Update mouse_region when mouse is moved.
+ (make_mac_frame): Remove.
+ (make_mac_terminal_frame): Put in #ifdef MAC_OS8.
+ Initialize mouse pointer shapes. Change values of f->left_pos and
+ f->top_pos. Don't use make_mac_frame. Use NewCWindow.
+ Don't call ShowWindow.
+ (mac_initialize_display_info) [MAC_OSX]: Create mac_id_name from
+ Vinvocation_name and Vsystem_name.
+ (mac_make_rdb): New function (from w32term.c).
+ (mac_term_init): Use it. Add BLOCK_INPUT. Error if display has
+ already been opened. Don't pass argument to
+ mac_initialize_display_info. Don't set dpyinfo->height/width.
+ Add entries to x_display_list and x_display_name_list.
+ (x_delete_display): New function.
+ (mac_initialize): Don't call mac_initialize_display_info.
+ (syms_of_macterm) [!MAC_OSX]: Don't call Fprovide.
+
+ * macterm.h (check_mac): Add extern.
+ (struct mac_output): New member size_hints.
+ (FRAME_SIZE_HINTS): New macro.
+ (mac_unload_font): Add extern.
+
+ * xdisp.c (expose_window, expose_frame): Remove kludges for Mac.
+
+ * xfaces.c (clear_font_table) [MAC_OS]: Call mac_unload_font.
+
+2004-12-27 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fbuffer_disable_undo): Delete (move to simple.el).
+ (syms_of_buffer): Don't defsubr it.
+
+ * process.c (list_processes_1): Set undo_list instead
+ of calling Fbuffer_disable_undo.
+
+ * xdisp.c (single_display_spec_string_p): Rename from
+ single_display_prop_string_p.
+ (single_display_spec_intangible_p): Rename from
+ single_display_prop_intangible_p.
+ (handle_single_display_spec): Rename from handle_single_display_prop.
+ Rewritten to be easier to understand.
+
+ Change in load-history format. Functions now get (defun . NAME),
+ and variables get just NAME.
+
+ * data.c (Fdefalias): Use (defun . FN_NAME) in LOADHIST_ATTACH.
+
+ * eval.c (Fdefun, Fdefmacro): Use (defun . FN_NAME) in LOADHIST_ATTACH.
+ (Fdefvaralias, Fdefvar, Fdefconst): Use just SYM in LOADHIST_ATTACH.
+ (Qdefvar): Var deleted.
+ (syms_of_eval): Don't initialze it.
+
+ * lread.c (syms_of_lread) <load-history>: Doc fix.
+
+2004-12-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (popup_get_selection): Pop down on C-g.
+ (set_frame_menubar): Install translations for Lucid/Motif/Lesstif that
+ pops down menu on C-g.
+ (xdialog_show): If dialog popped down and no button in the dialog was
+ pushed, call Fsignal to quit.
+ (xmenu_show): In no toolkit version, if menu returns NO_SELECT call
+ Fsignal to quit.
+
+ * xfns.c (Fx_file_dialog): Motif/Lesstif version: Pop down on C-g.
+
+ * gtkutil.c (xg_initialize): Install bindings for C-g so that
+ dialogs and menus pop down.
+
+2004-12-27 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (code_convert_region): Fix calculation of `ratio'.
+
+2004-12-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Make the value of
+ tool-bar-button-margin control margins of images in tool bar.
+
+ * alloc.c (check_depth): New variable.
+ (overrun_check_malloc, overrun_check_realloc): Only add
+ overhead and write check pattern if check_depth is 1 (to handle
+ recursive calls). Increase/decrease check_depth in entry/exit.
+ (overrun_check_free): Only check for overhead if check_depth is 1.
+ Increase/decrease check_depth in entry/exit.
+
+2004-12-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c (input_available_signal): Call SIGNAL_THREAD_CHECK
+ before touching input_available_clear_time, to avoid accessing it
+ from multiple threads.
+
+2004-12-23 Jason Rumney <jasonr@gnu.org>
+
+ * image.c (__WIN32__) [HAVE_NTGUI]: Define for correct behaviour
+ of JPEG library.
+
+2004-12-22 Richard M. Stallman <rms@gnu.org>
+
+ * emacs.c (main): If batch mode, set Vundo_outer_limit to nil.
+
+ * lisp.h (Vundo_outer_limit): Fix decl.
+
+ * undo.c (Vundo_outer_limit): Replaces undo_outer_limit.
+ Uses changed.
+ (syms_of_undo): Initialize appropriately.
+ (truncate_undo_list): If it's nil, there's no limit.
+
+2004-12-22 Kenichi Handa <handa@m17n.org>
+
+ * xselect.c (Fx_get_cut_buffer_internal): Return a unibyte string.
+
+2004-12-21 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (unwind_to_catch): Clear immediate_quit.
+
+ * xdisp.c (get_next_display_element): Display codes 8a0 and 8ad
+ specially as `\ ' and `\-'.
+
+ * keyboard.c (kbd_buffer_store_event_hold):
+ In the code for while-no-input, handle immediate_quit.
+
+ * alloc.c (Fgarbage_collect): Update call to truncate_undo_list.
+ Call that at the very start.
+ (undo_limit, undo_strong_limit, undo_outer_limit): Move to undo.c.
+ (syms_of_alloc): Don't define undo-limit,
+ undo-strong-limit and undo-outer-limit here.
+
+ * undo.c (truncate_undo_list): Return void.
+ Take just one argument, the buffer.
+ Make it current, and inhibit recursive GC.
+ Access and update the undo list directly; return void.
+ Refer to the undo...limit variables directly.
+ Test undo_outer_limit only after counting the whole current command.
+ When it's exceeded, call the function in undo-outer-limit-function.
+ (undo_limit, undo_strong_limit, undo_outer_limit): From alloc.c.
+ (Vundo_outer_limit_function): New variable.
+ (syms_of_undo): Define undo-limit, undo-strong-limit
+ and undo-outer-limit here, and undo-outer-limit-function.
+ Doc fixes.
+
+ * lisp.h (truncate_undo_list): Update decl.
+
+2004-12-21 Piet van Oostrum <piet@cs.uu.nl>
+
+ * fileio.c (Fread_file_name): Delete duplicates in
+ file-name-history when history_delete_duplicates is true.
+
+2004-12-20 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_do_list_fonts): Fix memory leak.
+
+2004-12-20 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (re_match_2_internal) <symend, wordend>:
+ Fix calls to UPDATE_SYNTAX_TABLE_FORWARD.
+
+2004-12-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (endif, x_font_name_to_mac_font_name):
+ Use maccentraleurroman instead of maccentraleuropean
+ (mac_c_string_match, mac_do_list_fonts): Speed up font search by
+ quickly finding a specific font without needing regexps.
+
+2004-12-15 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * syssignal.h: Declare main_thread.
+ (SIGNAL_THREAD_CHECK): New macro.
+
+ * keyboard.c (input_available_signal): Move thread checking code
+ to macro SIGNAL_THREAD_CHECK and call that macro.
+ (interrupt_signal): Call SIGNAL_THREAD_CHECK.
+
+ * alloc.c (uninterrupt_malloc): Move main_thread to emacs.c.
+
+ * emacs.c: Define main_thread.
+ (main): Initialize main_thread.
+ (handle_USR1_signal, handle_USR2_signal, fatal_error_signal)
+ (memory_warning_signal): Call SIGNAL_THREAD_CHECK.
+
+ * floatfns.c (float_error): Call SIGNAL_THREAD_CHECK.
+
+ * dispnew.c (window_change_signal): Call SIGNAL_THREAD_CHECK.
+
+ * sysdep.c (select_alarm): Call SIGNAL_THREAD_CHECK.
+
+ * process.c (send_process_trap, sigchld_handler):
+ Call SIGNAL_THREAD_CHECK.
+
+ * data.c (arith_error): Call SIGNAL_THREAD_CHECK.
+
+ * atimer.c (alarm_signal_handler): Call SIGNAL_THREAD_CHECK.
+
+ * xterm.c (xg_scroll_callback): Update XG_LAST_SB_DATA before
+ returning when xg_ignore_gtk_scrollbar is true.
+
+2004-12-14 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (read_char): Save and restore echo_string when
+ handling input method.
+
+2004-12-13 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (syms_of_eval) <quit-flag>: Doc fix.
+
+ * keyboard.c (Vthrow_on_input): New variable.
+ (syms_of_keyboard): Defvar and initialize it.
+ (kbd_buffer_store_event_hold): Handle Vthrow_on_input.
+
+ * lisp.h (QUIT): Check for Vthrow_on_input.
+ (Vthrow_on_input): Declare it.
+
+2004-12-13 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_iterator_to_next): Reset stop_charpos after display
+ vector.
+
+2004-12-12 Richard M. Stallman <rms@gnu.org>
+
+ * indent.c (Fvertical_motion): Call move_it_by_lines even if LINES = 0.
+
+ * minibuf.c (Fall_completions): Add var `zero' and use it in loop.
+ (Ftry_completion): Really use outer `zero'; eliminate inner one.
+
+2004-12-12 Kenichi Handa <handa@m17n.org>
+
+ * term.c (encode_terminal_code): Fix previous change.
+
+2004-12-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keyboard.c (handle_async_input): Remove pthread mutex handling.
+ (input_available_signal): Move pthread thingy to !SYNC_INPUT branch.
+
+ * syntax.c (Fforward_word): Avoid non-idempotent side-effects
+ in macro arguments.
+
+ * minibuf.c (Ftry_completion, Fall_completions): Don't use
+ XFASTINT blindly.
+
+ * emacs.c (main, Fdump_emacs): Don't touch malloc hooks if SYNC_INPUT.
+
+2004-12-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * w32term.c (x_calc_absolute_position): Remove calculation of
+ difference between inner and outer window. Don't subtract difference
+ for left and top calculations.
+
+ * xterm.c (x_calc_absolute_position): Don't subtract outer_pixel_diff
+ for left and top calculations. Remove call to x_real_positions.
+ [Bug report by Drew Adams in November.]
+ (x_check_expected_move): Do not set change_gravity to 1 when calling
+ x_set_offset.
+
+2004-12-08 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element): Use `escape-glyph' for
+ control chars and escaped octal codes.
+ (Qescape_glyph): New variable.
+ (syms_of_xdisp): Initialize it.
+ (escape_glyph_face): New variable.
+ (redisplay_window): Initialize it.
+
+2004-12-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * image.c (our_fill_input_buffer, jpeg_load, CHECK_LIB_AVAILABLE)
+ (init_image): Use 1 rather than TRUE. TRUE's not always defined.
+
+2004-12-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * emacs.c (Fdump_emacs): Add ! defined (SYSTEM_MALLOC) around
+ reset_malloc_hooks.
+
+ * keyboard.c (handle_async_input, input_available_signal):
+ Add ! defined (SYSTEM_MALLOC) around thread code.
+
+ * alloc.c: Add comment about the reason for (UN)BLOCK_INPUT_ALLOC.
+
+2004-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eval.c (init_eval_once): Increase max_specpdl_size to 1000.
+
+ * config.in: Regenerate.
+
+2004-12-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (Fx_popup_menu): Correct documentation about position.
+ (xmenu_show): Do not call XTranslateCoordinates. Adjust position
+ if not given by a mouse click to correspond with x-popup-menu
+ documentation.
+
+ * config.in: Regenerate.
+
+ * gtkutil.c: Include signal.h and syssignal.h.
+ (xg_get_file_name): Block and unblock __SIGRTMIN if defined.
+
+ * alloc.c: If HAVE_GTK_AND_PTHREAD, include pthread.h,
+ new variables main_thread and alloc_mutex,
+ define (UN)BLOCK_INPUT_ALLOC to use alloc_mutex to protect
+ emacs_blocked_* calls and only do (UN)BLOCK_INPUT in the main thread.
+ If not HAVE_GTK_AND_PTHREAD, (UN)BLOCK_INPUT_ALLOC is the same
+ as (UN)BLOCK_INPUT.
+ (emacs_blocked_free, emacs_blocked_malloc)
+ (emacs_blocked_realloc): Use (UN)BLOCK_INPUT_ALLOC.
+ (uninterrupt_malloc): Initialize main_thread and alloc_mutex.
+ (reset_malloc_hooks): New function.
+
+ * lisp.h: Declare reset_malloc_hooks.
+
+ * emacs.c (Fdump_emacs): Call reset_malloc_hooks.
+
+ * keyboard.c: Conditionally include pthread.h.
+ (handle_async_input, input_available_signalt): If not in the main
+ thread, block signal, send signal to main thread and return.
+
+ * gtkutil.c (xg_get_file_with_chooser): Handle local files only.
+ Set current folder in file chooser if default_filename is a directory.
+
+2004-12-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * regex.c (GET_UNSIGNED_NUMBER): Signal an error when reaching the end.
+ Remove redundant correctness checks.
+ (regex_compile): Fix up error codes for \{..\} expressions.
+
+2004-12-05 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (regex_compile): Fix end-of-pattern case for space.
+
+2004-12-03 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.h (cfstring_create_with_utf8_cstring): Add prototype.
+ * mac.c (cfstring_create_with_utf8_cstring): Add to prevent
+ crashes with invalid characters.
+ * macmenu.c (add_menu_item): Use it.
+ * image.c (image_load_quartz2d): Likewise.
+ * macfns.c (x_set_name, x_set_title): Likewise.
+ (Fx_file_dialog): Likewise. Use constant CFRefs instead of
+ creating them each time for labels.
+
+2004-12-02 Richard M. Stallman <rms@gnu.org>
+
+ * config.in (RE_TRANSLATE_P): If make_number is not a macro,
+ don't use it here.
+
+ * eval.c (Fcalled_interactively_p): Don't check INTERACTIVE.
+ (interactive_p): Skip Scalled_interactively_p frames
+ like Sinteractive_p frames.
+ (unwind_to_catch): Clear handling_signal.
+
+ * data.c (Fmake_variable_buffer_local): Doc fix.
+ (Fmake_local_variable): Doc fix.
+
+ * insdel.c (insert_from_string_before_markers)
+ (insert_from_string): Don't modify buffer on empty insertion.
+
+ * window.c (Fget_lru_window, Fget_largest_window): Doc fixes.
+
+2004-12-01 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (add_menu_item): Fallback on MacRoman if encoding
+ menu text as UTF8 fails.
+
+2004-12-01 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c: Add commentary for last change.
+ (XMALLOC_PUT_SIZE, XMALLOC_GET_SIZE): New macros to handle
+ sizeof(size_t) != 4.
+ (overrun_check_malloc, overrun_check_realloc, overrun_check_free):
+ Use them. Also clear header and trailer of freed memory.
+ (GC_STRING_OVERRUN_COOKIE_SIZE): Rename from GC_STRING_EXTRA.
+ (string_overrun_cookie): Rename from string_overrun_pattern.
+ (GC_STRING_EXTRA): Define from GC_STRING_OVERRUN_COOKIE_SIZE.
+
+2004-12-01 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h: Declare string_to_multibyte.
+
+2004-12-01 Kenichi Handa <handa@m17n.org>
+
+ * w32console.c (w32con_write_glyphs): Decide coding here.
+ Adjusted for the change of encode_terminal_code.
+
+ * term.c (encode_terminal_code): Don't make it "static".
+
+2004-11-30 Kenichi Handa <handa@m17n.org>
+
+ * term.c (encode_terminal_buf, encode_terminal_bufsize): New variables.
+ (encode_terminal_code): Argument changed. Encode all
+ characters at once, and return a pointer to the result of encoding.
+ (write_glyphs): Decide coding here. Adjusted for the above change.
+ (insert_glyphs): Likewise.
+ (term_init): Initialize encode_terminal_bufsize to 0.
+
+ * coding.c (Vcode_conversion_workbuf_name): New variable.
+ (syms_of_coding): Initialize and staticpro it.
+ (set_conversion_work_buffer): New function.
+ (run_pre_post_conversion_on_str): Use it.
+ (run_pre_write_conversin_on_c_str): New function.
+
+ * coding.h (run_pre_write_conversin_on_c_str): Extern it.
+
+2004-11-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * keyboard.c: Don't undef SIGIO
+ * s/darwin.h (NO_SOCK_SIGIO): Define NO_SOCK_SIGIO on carbon
+ * Makefile.in (mac.o): Depend on blockinput.h and atimer.h.
+ (macfns.o): Don't depend on ccl.h.
+ * macfns.c (mac_frame_parm_handlers): Set handlers for
+ Qleft_fringe and Qright_fringe.
+ * macterm.c (mac_fill_rectangle_to_pixmap)
+ (mac_draw_rectangle_to_pixmap, mac_copy_area_to_pixmap)
+ (mac_copy_area_with_mask_to_pixmap, x_draw_image_foreground_1):
+ Put in #if 0.
+ (mac_scroll_area) [TARGET_API_MAC_CARBON]: Use ScrollWindowRect.
+ (x_flush) [TARGET_API_MAC_CARBON]: Don't traverse frames.
+ (XFlush) [TARGET_API_MAC_CARBON]: Define to an empty replacement.
+ (x_draw_glyph_string_background, x_draw_glyph_string_foreground)
+ [!MAC_OS8]: Added ifdef'd out code for os8. Don't use
+ XDrawImageString. Always draw background and foreground separately.
+ (x_draw_image_foreground): Use clipping instead of computing the
+ intersection rectangle.
+ (x_draw_image_glyph_string): Don't draw an image with mask to a
+ pixmap.
+ (x_redisplay_interface): Set flush_display_optional member to 0.
+ (XTread_socket): Correctly reset the TEConverter
+ object.
+
+2004-11-30 Kim F. Storm <storm@cua.dk>
+
+ * lisp.h: New defines to enable buffer overrun checking.
+ (GC_CHECK_STRING_OVERRUN, GC_CHECK_STRING_FREE_LIST)
+ (XMALLOC_OVERRUN_CHECK, GC_CHECK_CONS_LIST): Add.
+
+ * alloc.c: Add more checks for buffer overruns.
+ (XMALLOC_OVERRUN_CHECK_SIZE, xmalloc_overrun_check_header)
+ xmalloc_overrun_check_trailer, overrun_check_malloc)
+ overrun_check_realloc, overrun_check_free): Add.
+ (GC_STRING_EXTRA, string_overrun_pattern): Add.
+ (check_sblock, allocate_string_data, compact_small_strings):
+ Set and check string_overrun_pattern if GC_CHECK_STRING_OVERRUN.
+ (check_cons_list): Condition on GC_CHECK_CONS_LIST.
+ (check_string_free_list): Add.
+ (allocate_string, sweep_strings): Call check_string_free_list.
+
+ * emacs.c (malloc_initialize_hook): Don't free malloc_state_ptr if
+ XMALLOC_OVERRUN_CHECK to avoid crash during load.
+
+2004-11-29 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (concat): Use SAFE_ALLOCA.
+
+2004-11-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * sysdep.c (emacs_write): Don't use QUIT.
+
+2004-11-29 Kenichi Handa <handa@m17n.org>
+
+ * buffer.c (init_buffer): Set current_buffer->directory to a
+ multibyte string made by string_to_multibyte.
+
+ * emacs.c (init_cmdargs): Set unibyte strings in Vcommand_line_args.
+
+2004-11-27 Andreas Schwab <schwab@suse.de>
+
+ * alloc.c (mark_stack): Call GC_MARK_SECONDARY_STACK if defined.
+
+ * s/gnu-linux.h: Enable no-op gcpros on ia64.
+ (GC_MARK_SECONDARY_STACK) [__ia64__]: Define.
+
+ * filelock.c (lock_file_1): Call get_boot_time early.
+ Increase buffer size.
+
+2004-11-27 Eli Zaretskii <eliz@gnu.org>
+
+ * lisp.h (DECL_ALIGN): Define non-trivially only if NO_DECL_ALIGN
+ is not defined.
+
+2004-11-27 Kim F. Storm <storm@cua.dk>
+
+ * search.c (syms_of_search) <search-spaces-regexp>: Move 'doc:'
+ marker out of doc string.
+
+2004-11-26 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * s/darwin.h (POSIX_SIGNALS): Undo the removal of 2002-08-25,
+ which was not mentioned in the log.
+
+2004-11-26 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (update_window_fringes): Prefer truncation bitmaps over
+ angle bitmaps at top/bottom line.
+
+ * xdisp.c: Undo recent changes for restoring saved_face_id. Instead,
+ set it when it->method is set to next_element_from_display_vector.
+ (setup_for_ellipsis): Add LEN argument. Callers changed.
+ Set it->saved_face_id.
+ (get_next_display_element): Use loop instead of recursion.
+ Set it->saved_face_id. Combine duplicate code for ctr chars.
+ (next_element_from_display_vector): Do not set it->saved_face_id.
+ (next_element_from_ellipsis): Use setup_for_ellipsis.
+
+2004-11-26 Eli Zaretskii <eliz@gnu.org>
+
+ * eval.c (Fdefvar): Declare pdl from last change as `volatile' to
+ prevent compiler warnings.
+
+2004-11-25 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keyboard.c (command_loop_1): Print a message describing the key
+ the user just pressed when this key has no binding.
+
+ * sysdep.c (sys_signal): Don't use SA_RESTART if SYNC_INPUT is set.
+ (emacs_open, emacs_read, emacs_write): Check QUIT when interrupted.
+
+ * lread.c (readchar): Check QUIT when `getc' is interrupted.
+
+2004-11-24 Richard M. Stallman <rms@gnu.org>
+
+ * coding.c (run_pre_post_conversion_on_str): Bind Qinhibit_read_only.
+
+ * buffer.c (syms_of_buffer) <indicate-buffer-boundaries>: Doc fix.
+
+2004-11-24 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_in_display_line_to, display_line):
+ Restore saved_face_id also when truncate-lines or hscrolled.
+
+2004-11-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_name): Rename use-old-gtk-file-dialog to
+ x-use-old-gtk-file-dialog.
+
+ * xfns.c: Define x_use_old_gtk_file_dialog.
+ (syms_of_xfns): Rename use-old-gtk-file-dialog to x-... Move it
+ outside ifdef USE_GTK.
+
+2004-11-23 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * coding.h (ENCODE_FILE, DECODE_FILE, ENCODE_SYSTEM, DECODE_SYSTEM):
+ Don't use XFASTINT blindly.
+
+ * config.in (RE_TRANSLATE_P): Don't use XFASTINT blindly.
+
+ * indent.c (skip_invisible): Avoid non-idempotent side-effects
+ in macro arguments.
+
+ * keymap.c (Flookup_key): Check INTEGERP before XINT.
+
+ * lread.c (oblookup): Don't use XFASTINT blindly.
+
+ * window.c (Fset_window_scroll_bars): Don't use XINT if it isn't int.
+ (decode_next_window_args, window_loop): Don't use XFASTINT blindly.
+
+2004-11-23 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (MATRIX_ROW_ENDS_IN_MIDDLE_OF_CHAR_P)
+ (MATRIX_ROW_STARTS_IN_MIDDLE_OF_CHAR_P): Not if dpvec_index is zero.
+
+ * xfaces.c (lookup_named_face): Add signal_p arg. Return -1 if
+ signal_p is zero and face name is unknown.
+ (Fx_list_fonts): Don't signal error in lookup_named_face.
+ (Fface_font): Signal error in lookup_named_face.
+ (ascii_face_of_lisp_face): Likewise.
+
+ * dispextern.h (lookup_named_face): Fix prototype.
+
+ * xdisp.c (handle_single_display_prop): Don't signal error in
+ lookup_named_face for unknown fringe face name.
+ (highlight_trailing_whitespace): Don't signal error in
+ lookup_named_face if trailing-whitespace face unknown.
+ (calc_line_height_property): Don't signal error in
+ lookup_named_face if specified face name is unknown.
+
+ * fringe.c (update_window_fringes): Show top row indicator if
+ window has header-line. Don't show arrow at bob and eob
+ if the boundary indicators are not used.
+ (Fset_fringe_bitmap_face): Signal error in lookup_named_face.
+
+ * window.c (set_window_buffer): Clear display_error_modiff.
+
+2004-11-22 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (update_window_fringes): Provide sensible fall-back
+ value for non-nil indicate-buffer-boundaries setting.
+
+2004-11-22 Markus Rost <rost@ias.edu>
+
+ * minibuf.c (Fminibuffer_complete_and_exit): Fix previous change.
+
+2004-11-22 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eval.c (Fdefvar): Warn when var is let-bound but globally void.
+
+2004-11-21 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (erase_phys_cursor): Clear hollow cursor inside TEXT_AREA.
+
+ * xterm.c (x_clip_to_row): Add area arg. Callers changed.
+ (x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
+
+ * w32term.c (w32_clip_to_row): Add area arg. Callers changed.
+ (x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
+
+ * macterm.c (x_clip_to_row): Add area arg. Callers changed.
+ (x_draw_hollow_cursor, x_draw_bar_cursor): Clip to TEXT_AREA.
+
+ * xdisp.c (move_it_in_display_line_to, display_line):
+ Restore saved_face_id if overflow-newline-into-fringe is enabled and
+ line is continued before or in middle of element from display vector.
+
+ * indent.c (Fvertical_motion): Fix last change. Use another
+ method to detect if iterator moved too far ahead after reseat.
+
+ * xdisp.c (IT_EXPAND_MATRIX_WIDTH): New macro. Do not
+ expand matrix width for overflow in zero-width area.
+ (append_glyph, append_composite_glyph, produce_image_glyph)
+ (append_stretch_glyph): Use it to avoid loop in redisplay.
+ (note_mode_line_or_margin_highlight): Don't let help-echo from
+ string override help-echo from image map.
+
+2004-11-20 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Fyes_or_no_p): Call Fread_from_minibuffer with extra argument.
+ * callint.c (Fcall_interactively): Ditto.
+
+2004-11-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuf.c (Fminibuffer_complete_and_exit):
+ Fixup the case of the completed value, for case-indep completion.
+
+2004-11-20 Richard M. Stallman <rms@gnu.org>
+
+ * lisp.h (Fread_from_minibuffer): Add arg in decl.
+
+ * minibuf.c (read_minibuf): New arg KEEP_ALL. Callers changed.
+ (Fread_from_minibuffer): New arg KEEP_ALL. Callers changed.
+
+ * search.c (Vsearch_spaces_regexp):
+ Rename from Vsearch_whitespace_regexp. All uses changed.
+
+2004-11-20 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * eval.c (init_eval_once): Increase `max_specpdl_size' to 650.
+
+2004-11-19 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (Vsearch_whitespace_regexp): New variable.
+ (syms_of_search): Defvar it.
+ (compile_pattern_1): Call re_set_whitespace_regexp with it.
+ (search_buffer): No regexp is trivial if Vsearch_whitespace_regexp
+ is non-nil.
+ (struct regexp_cache): New element whitespace_regexp.
+ (syms_of_search): Initialize whitespace_regexp elements.
+ (compile_pattern): Compare whitespace_regexp elements.
+ (compile_pattern_1): Set whitespace_regexp elements.
+
+ * regex.c (regex_compile): Substitute whitespace_regexp
+ for spaces, if it is nonzero.
+ (whitespace_regexp): New variable.
+ (re_set_whitespace_regexp): New function.
+
+2004-11-19 Kim F. Storm <storm@cua.dk>
+
+ * indent.c (Fvertical_motion): Fix last change.
+
+2004-11-18 Kim F. Storm <storm@cua.dk>
+
+ * indent.c (Fvertical_motion): Undo 2004-11-16 change.
+ Instead, move back again if reseating moves too far ahead.
+
+2004-11-17 Luc Teirlinck <teirllm@auburn.edu>
+
+ * xdisp.c (message3): Call clear_message.
+
+2004-11-17 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (erase_phys_cursor): Adjust cursor row visible height.
+
+2004-11-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_file_name): Typo in HAVE_GTK_FILE_SELECTION_NEW.
+
+ * xmenu.c (x_menu_in_use): Remove.
+ (x_menu_set_in_use): Also set popup_activated_flag.
+
+ * xfns.c (Fx_file_dialog): Call popup_activated instead of
+ x_menu_in_use. Call x_menu_set_in_use in Motif version also.
+
+ * xterm.h (x_menu_in_use): Remove.
+
+2004-11-16 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (Fmap_keymap): New arg SORT-FIRST.
+ Use map-keymap-internal to implement that.
+
+ * indent.c (Fvertical_motion): In batch mode, use vmotion directly.
+
+2004-11-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xdisp.c (get_glyph_string_clip_rect, init_glyph_string): Check it's
+ a window before using XWINDOW.
+
+ * window.c (make_window, Fselect_window, make_dummy_parent)
+ (save_window_save):
+ * frame.c (make_frame):
+ * fns.c (concat): Avoid side-effects inside XSETFASTINT's arguments.
+
+ * lisp.h (NILP): Use EQ rather than XFASTINT.
+
+2004-11-16 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (Fdefine_fringe_bitmap): Always set 'h'. Simplify.
+
+ * indent.c (Fvertical_motion): Fix last change. Only reseat when
+ moving backwards.
+
+2004-11-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * dispextern.h: Extern reseat_at_previous_visible_line_start.
+
+2004-11-16 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (display_mode_element): Fix previous change (calculate
+ end position of substring to display correctly).
+
+2004-11-16 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (Fposn_at_point): Remove extra */ after doc string.
+ Reported by Andrew M. Scott.
+
+2004-11-15 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (Fsafe_plist_get): New defun.
+ (syms_of_fns): Defsubr it.
+
+ * lisp.h (Fsafe_plist_get): Add EXFUN.
+
+ * xdisp.c (store_mode_line_string, produce_stretch_glyph):
+ Use Fsafe_plist_get.
+ (note_mode_line_or_margin_highlight, note_mouse_highlight):
+ Fix image map element parsing. Use Fsafe_plist_get.
+
+2004-11-15 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element): Fix previous change.
+
+2004-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * window.c (shrink_windows): Handle special case of one window left
+ when trying to shrink the final reminder. Grow windows if
+ total_removed is less than total_shrink.
+
+ * xmenu.c (pop_down_menu): Remove global variable current_menu,
+ extract pointer from arg with XSAVE_VALUE.
+ (create_and_show_popup_menu, create_and_show_dialog, xmenu_show):
+ Construct arg to record_unwind_protect with make_save_value.
+
+2004-11-13 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (reseat_at_previous_visible_line_start): No longer static.
+ (get_next_display_element): Fix previous change to apply only to \n.
+
+ * indent.c (Fvertical_motion): Scan to PT from start of line to
+ make iterator consistent.
+
+ * minibuf.c (syms_of_minibuf) <completion-ignore-case>: Doc fix.
+
+2004-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (pop_down_file_dialog): Add BLOCK_INPUT.
+
+ * xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
+ Record unwind with clean_up_file_dialog.
+
+ * xterm.h (x_menu_in_use, x_menu_set_in_use, x_menu_wait_for_event):
+ Declare.
+
+ * xmenu.c (x_menu_in_use, x_menu_set_in_use): New functions.
+
+2004-11-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_file_sel_ok, xg_file_sel_cancel)
+ (xg_file_sel_destroy): Remove.
+ (xg_file_response_cb, pop_down_file_dialog)
+ (xg_get_file_name_from_chooser, xg_get_file_name_from_selector):
+ New functions.
+ (xg_get_file_with_chooser, xg_get_file_with_selection):
+ Take new arg func, set it to xg_get_file_name_from_chooser/selector.
+ Move common code to xg_get_file_name. Return widget created.
+ (xg_get_file_name): Set name, transient for, modal and destroy
+ with parent here. Connect response signal to xg_file_response_cb,
+ connect delete-event to gtk_true. Record pop_down_file_dialog
+ for unwind. Do event loop and call x_menu_wait_for_event in loop.
+ (xg_create_widget): Make dialogs modal.
+
+ * xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
+ Lisp_Object.
+ (popup_get_selection): Move unwind protect ...
+ (create_and_show_popup_menu, create_and_show_dialog): ... to here.
+ Move destroy of widget to pop_down_menu.
+ (popup_widget_loop): Move unwind protect ...
+ (create_and_show_popup_menu, create_and_show_dialog): ... to here.
+ Move destroy of widget to pop_down_menu.
+ (pop_down_menu): BLOCK_INPUT and destroy widget/window.
+ (xmenu_show): Record unwind pop_down_menu. Move XMenuDestroy,
+ x_mouse_leave and grabbed = 0 to pop_down_menu.
+
+2004-11-13 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (make_cursor_line_fully_visible_p): New variable.
+ (syms_of_xdisp): DEFVAR_BOOL it.
+ (make_cursor_line_fully_visible, try_cursor_movement)
+ (try_window_id): Use it.
+
+2004-11-12 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct glyph_row): New member extra_line_spacing.
+ (struct it): New member max_extra_line_spacing.
+ (MR_PARTIALLY_VISIBLE, MR_PARTIALLY_VISIBLE_AT_TOP)
+ (MR_PARTIALLY_VISIBLE_AT_BOTTOM): New helper macros.
+ (MATRIX_ROW_PARTIALLY_VISIBLE_P): Fix to return false if invisible
+ part of last line is only extra line spacing (so the text on the
+ line is fully visible). Use helper macros.
+ Add W arg (to use them). All callers changed.
+ (MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P)
+ (MATRIX_ROW_PARTIALLY_VISIBLE_AT_BOTTOM_P): Use helper macros.
+
+ * window.c (window_scroll_pixel_based, Frecenter):
+ Use move_it_vertically_backward directly.
+ (Frecenter): Fix calculation of new start pos for negative arg.
+ Before, the new start pos was sometimes chosen too far back, so
+ the last line became only partially visible, and thus would be
+ either only semi-visible or automatically scrolled to the middle
+ of the window by redisplay.
+
+ * xdisp.c (init_iterator): Clear it.max_extra_line_spacing.
+ (move_it_vertically_backward): Don't recure to move further back.
+ (move_it_vertically): Remove superfluous condition.
+ (move_it_by_lines): Clear last_height when moved 0 lines.
+ (resize_mini_window): Use it.max_extra_line_spacing.
+ (display_tool_bar_line): Clear row->extra_line_spacing.
+ (try_scrolling): Use move_it_vertically_backward directly.
+ (redisplay_window): Likewise.
+ (compute_line_metrics): Set row->extra_line_spacing.
+ (display_line, display_string): Likewise.
+ (x_produce_glyphs): Update it->max_extra_line_spacing.
+
+ * xmenu.c (pop_down_menu): Return nil.
+
+2004-11-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (x_menu_wait_for_event): New function.
+ (popup_get_selection, popup_widget_loop): Call x_menu_wait_for_event
+ to handle timers.
+ (popup_widget_loop): Add argument do_timers.
+ (create_and_show_popup_menu, create_and_show_dialog): Pass 1 for
+ do_timers to popup_widget_loop.
+ (xmenu_show): Call XMenuActivateSetWaitFunction so that
+ x_menu_wait_for_event is called by XMenuActivate.
+ (create_and_show_popup_menu): Pass 1 for do_timers to
+ popup_get_selection.
+ (pop_down_menu): New function.
+ (popup_get_selection, popup_widget_loop): Unwind protect to
+ pop_down_menu.
+ (popup_widget_loop): Add argument widget.
+ (create_and_show_popup_menu, create_and_show_dialog): Pass new
+ argument widget to popup_widget_loop.
+
+2004-11-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (Fkeymap_prompt): Accept symbol keymaps.
+
+2004-11-09 Kim F. Storm <storm@cua.dk>
+
+ * xselect.c: Include <sys/types.h> and <unistd.h> (for getpid).
+ Fix various comments referring to XEvents instead of input events.
+ (x_queue_event): Fix format strings.
+ (x_stop_queuing_selection_requests): Likewise.
+
+ * xdisp.c (produce_image_glyph): Remove unused variable 'face_ascent'.
+ (pint2hrstr): Add extra braces to silence compiler.
+
+ * print.c (print_object): Fix format string.
+
+ * lread.c (read1): Fix next_char matching.
+
+ * lisp.h (Fdelete): Add EXFUN.
+ (replace_range_2): Add prototype.
+
+ * keyboard.c (read_avail_input): Remove unused variable 'discard'.
+
+ * intervals.h (NULL_INTERVAL_P): Add separate version when
+ ENABLE_CHECKING is not defined to silence compiler.
+ (compare_string_intervals): Add prototype.
+
+ * fringe.c (destroy_fringe_bitmap): Fix return type.
+ (Ffringe_bitmaps_at_pos): Remove unused var 'old_buffer'.
+
+ * emacs.c (Fdump_emacs): Fix format string.
+
+ * doc.c: Include <ctype.h>.
+ (Fsubstitute_command_keys): Remove unused variable 'firstkey'.
+
+ * data.c (store_symval_forwarding): Remove unused variables.
+
+ * callint.c (Fcall_interactively): Remove unused variable 'funcar'.
+
+2004-11-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * Makefile.in (stamp-oldxmenu): If HAVE_GTK, don't add dependencies
+ to ${OLDXMENU}.
+
+2004-11-09 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fmake_network_process): Remove kludge for interrupted
+ connects on BSD. If connect is interrupted, just close socket and
+ start over rather than sleeping and retry with same socket.
+
+2004-11-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * .cvsignore: Add buildobj.lst.
+
+ * doc.c: New variable Vbuild_files.
+ (Fsnarf_documentation): If Vbuild_files is nil, populate it with
+ file names from buildobj.lst. Only attach docstrings from files
+ that are in Vbuild_files.
+ (syms_of_doc): Defvar Vbuild_files.
+
+ * Makefile.in (SOME_MACHINE_OBJECTS): Add fringe.o, image.o
+ and w32*.o.
+ (temacs${EXEEXT}): Generate buildobj.lst when temacs is linked.
+ (mostlyclean): Rm buildobj.lst.
+
+ * makefile.w32-in ($(TEMACS)): Generate buildobj.lst when temacs
+ is linked.
+
+2004-11-09 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (update_window_fringes): Update fringe bitmaps if
+ cur and row ends_at_zv_p differs. If bitmaps of a row is updated,
+ also update previous row to get rid of misc. artifacts.
+
+2004-11-08 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (fast_find_position): Fix start pos if header line present.
+ (note_mouse_highlight): Clear mouse face if we move out of text area.
+
+2004-11-08 Eli Zaretskii <eliz@gnu.org>
+
+ * editfns.c: Move #include "systime.h" before <sys/resource.h>.
+ Don't include <sys/time.h> explicitly.
+ Include <stdio.h> unconditionally, not just on MacOS.
+
+2004-11-08 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fontset_pattern_regexp): Cancel my previous change;
+ don't pay attention to '\' before '*'.
+ (fontset_pattern_regexp): Change the meaning of the second arg.
+ (Fnew_fontset): Call fs_query_fontset, not Fquery_fontset.
+ (check_fontset_name): Try NAME as literal at first, and if it
+ failes, try NAME as pattern.
+
+2004-11-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * emacs.c (Fdump_emacs): Only output warning on GNU/Linux.
+
+2004-11-07 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h (Fmsdos_downcase_filename): Declare.
+ * dired.c (Fmsdos_downcase_filename): Don't declare here.
+ * fileio.c: Likewise.
+
+2004-11-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * dosfns.c (Fdos_memget, Fdos_memput): Use integer variable offs in
+ comparisons with integers instead of Lisp_Object address.
+ (Fmsdos_set_keyboard): Declare argument allkeys.
+
+ * msdos.c (IT_set_frame_parameters): Use EQ, not ==, for Lisp_Object:s.
+
+ * dired.c (Fmsdos_downcase_filename): Declare extern on MSDOS to avoid
+ int/Lisp_Object mixup.
+
+ * fileio.c: Ditto.
+
+2004-11-06 Steven Tamm <steventamm@mac.com>
+
+ * editfns.c: Need to include sys/time.h before resource.h on darwin.
+
+2004-11-06 Richard M. Stallman <rms@gnu.org>
+
+ * callint.c (Fcall_interactively): Avoid reusing EVENT for other data.
+
+ * xfaces.c (merge_named_face): GCPRO the face_name in the
+ named_merge_point struct that we make.
+ (merge_face_heights): Eliminate GCPRO arg. All callers changed.
+
+ * keyboard.c (command_loop_1): Change Vtransient_mark_mode
+ before deciding whether to inactivate mark.
+
+2004-11-06 Lars Brinkhoff <lars@nocrew.org>
+
+ * config.in: Regenerate (add HAVE_GETRUSAGE).
+ * editfns.c (Fget_internal_run_time): New function.
+ (syms_of_data): Defsubr it.
+ * fns.c (sxhash): As far as possible, merge calculation of
+ hash code for symbols and strings.
+
+2004-11-06 Eli Zaretskii <eliz@gnu.org>
+
+ * frame.c (syms_of_frame): Fix the example in the doc string.
+
+2004-11-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * eval.c (Feval): Remove check for INPUT_BLOCKED_P.
+
+ * xmenu.c (popup_get_selection, create_and_show_popup_menu)
+ (create_and_show_dialog): Revert change from 2004-10-31.
+
+2004-11-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * macros.c (syms_of_macros) <defining-kbd-macro>: Doc fix.
+
+2004-11-05 Kim F. Storm <storm@cua.dk>
+
+ * print.c (print_object): Print Lisp_Misc_Save_Value objects.
+
+ * fileio.c (Ffile_modes): Doc fix.
+ (auto_save_1): Check for Ffile_modes nil value.
+
+2004-11-05 Kim F. Storm <storm@cua.dk>
+
+ * xselect.c (struct selection_event_queue, selection_queue)
+ (x_queue_selection_requests, x_queue_event)
+ (x_start_queuing_selection_requests)
+ (x_stop_queuing_selection_requests): Add new queue for selection
+ input events to replace previous XEvent queue in xterm.c.
+ (queue_selection_requests_unwind): Adapt to new queue.
+ (x_reply_selection_request): Adapt to new queue.
+ Unexpect wait_object in case of x errors (memory leak).
+ (x_handle_selection_request, x_handle_selection_clear): Make static.
+ (x_handle_selection_event): New function. May queue selection events.
+ (wait_for_property_change_unwind): Use save_value instead of cons.
+ Clear property_change_reply_object.
+ (wait_for_property_change): Abort if already waiting.
+ Use save_value instead of cons for unwind data.
+ (x_handle_property_notify): Skip events already arrived, but don't
+ free them, as "arrived" field is checked by wait_for_property_change,
+ and it will be freed by unwind or explicit unexpect_property_change.
+ (x_get_foreign_selection): Add to new queue.
+ (receive_incremental_selection): Don't unexpect wait_object when done
+ as it has already been freed by previous wait_for_property_change.
+
+ * xterm.h (x_start_queuing_selection_requests)
+ (x_stop_queuing_selection_requests, x_handle_selection_request)
+ (x_handle_selection_clear): Remove prototypes.
+ (x_handle_selection_event): Add prototype.
+
+ * xterm.c (handle_one_xevent): Don't queue X selection events
+ here, it may be too late if we start queuing after we have already
+ stored some selection events into the kbd buffer.
+ (struct selection_event_queue, queue, x_queue_selection_requests)
+ (x_queue_event, x_unqueue_events, x_start_queuing_selection_requests)
+ (x_stop_queuing_selection_requests): Remove/move to xselect.c.
+ (x_catch_errors_unwind): Block input around final XSync.
+
+ * keyboard.h (kbd_buffer_unget_event): Add prototype.
+
+ * keyboard.c (kbd_buffer_store_event_hold): Remove obsolete code.
+ (kbd_buffer_unget_event): New function.
+ (kbd_buffer_get_event, swallow_events): Combine SELECTION events
+ and use x_handle_selection_event.
+ (mark_kboards): Don't mark x and y of SELECTION_CLEAR_EVENT.
+
+2004-11-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (TRACE3): New debug macro.
+ (x_reply_selection_request): Use it.
+ (receive_incremental_selection): In call to TRACE0, the name of
+ a symbol is in xname.
+
+2004-11-05 Kim F. Storm <storm@cua.dk>
+
+ * fontset.c (fontset_pattern_regexp): Use unsigned char.
+
+2004-11-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * fileio.c (Fnext_read_file_uses_dialog_p): New function.
+
+ * gtkutil.h (use_old_gtk_file_dialog): Declare.
+
+ * gtkutil.c: Make use_old_gtk_file_dialog non-static.
+ (xg_initialize): Move DEFVAR_BOOL for use_old_gtk_file_dialog ...
+ * xfns.c (syms_of_xfns): ... to here.
+
+ * gtkutil.c (xg_get_file_with_chooser): Expand DEFAULT_FILENAME if
+ it doesn't start with /.
+
+2004-11-04 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fontset_pattern_regexp): If '*' is preceded by '\',
+ treat it as a literal character.
+
+2004-11-03 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (ppt): New function.
+
+2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_window_to_scroll_bar): Only call
+ xg_get_scroll_id_for_window if toolkit scroll bars are used.
+
+ * gtkutil.c (xg_get_file_with_chooser): Use GTK_STOCK_OK instead
+ of save.
+
+2004-11-02 Andreas Schwab <schwab@suse.de>
+
+ * window.c (Fscroll_right): Fix last change.
+
+2004-11-02 Kim F. Storm <storm@cua.dk>
+
+ * Makefile.in (callproc.o): Depend on blockinput.h, atimer.h, systime.h.
+
+2004-11-02 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * callproc.c (Fcall_process): Block input around vfork.
+
+2004-11-02 Kim F. Storm <storm@cua.dk>
+
+ * eval.c (Fcalled_interactively_p): Rename from Fcall_interactive_p.
+ (syms_of_eval): Defsubr it.
+
+2004-11-02 Richard M. Stallman <rms@gnu.org>
+
+ * insdel.c (replace_range_2): New function.
+
+ * casefiddle.c (casify_region): Handle changes in byte-length
+ using replace_range_2.
+
+ * emacs.c (USAGE3): Delete --horizontal-scroll-bars, -hb.
+
+ * xdisp.c (back_to_previous_visible_line_start):
+ Subtract 1 from pos when checking previous newline for invisibility.
+
+ * window.c (window_scroll_pixel_based): Update preserve_y
+ for header line if any.
+ (Fscroll_left, Fscroll_right): Don't call interactive_p;
+ use a new second argument instead.
+
+ * eval.c (Fcall_interactive_p): New function.
+ (interactive_p): Don't test INTERACTIVE here.
+ (Finteractive_p): Doc fix.
+
+ * eval.c (Feval): Abort if INPUT_BLOCKED_P.
+
+2004-11-02 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
+
+ * w32fns.c (w32_font_match): Use fast_string_match_ignore_case for
+ comparing font names.
+
+2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * fileio.c (Fread_file_name): Pass Qt as fifth parameter to
+ Fx_file_dialog if only directories should be read.
+
+ * lisp.h: Fx_file_dialog takes 5 parameters.
+
+ * xfns.c (Fx_file_dialog): Both Motif and GTK version:
+ Add parameter only_dir_p.
+ In Motif version, don't put DEFAULT_FILENAME in filter part of the
+ dialog, just text field part. Do not add DEFAULT_FILENAME
+ to list of files if it isn't there.
+ In GTK version, pass only_dir_p parameter to xg_get_file_name.
+
+ * macfns.c (Fx_file_dialog): Add parameter only_dir_p.
+ Check only_dir_p instead of comparing prompt to "Dired". When using
+ a save dialog, add option kNavDontConfirmReplacement, change title
+ to "Enter name", change text for save button to "Ok".
+
+ * w32fns.c (Fx_file_dialog): Add parameter only_dir_p.
+ Check only_dir_p instead of comparing prompt to "Dired".
+
+ * gtkutil.c (xg_get_file_with_chooser, xg_get_file_with_selection):
+ New functions, only defined ifdef HAVE_GTK_FILE_CHOOSER_DIALOG_NEW
+ and HAVE_GTK_FILE_SELECTION_NEW respectively.
+ (xg_get_file_name): Add parameter only_dir_p.
+ Call xg_get_file_with_chooser or xg_get_file_with_selection
+ depending on HAVE_GTK_FILE* and the value of use_old_gtk_file_dialog.
+ (xg_initialize): New DEFVAR_BOOL use_old_gtk_file_dialog.
+
+ * gtkutil.h (xg_get_file_name): Add parameter only_dir_p.
+
+ * config.in: Rebuild (added HAVE_GTK_FILE_*).
+
+2004-11-01 Kim F. Storm <storm@cua.dk>
+
+ * process.c (connect_wait_mask, num_pending_connects):
+ Only declare and use them if NON_BLOCKING_CONNECT is defined.
+ (init_process): Initialize them if NON_BLOCKING_CONNECT defined.
+ (IF_NON_BLOCKING_CONNECT): New helper macro.
+ (wait_reading_process_output): Only declare and use local vars
+ Connecting and check_connect when NON_BLOCKING_CONNECT is defined.
+
+2004-11-01 Andy Petrusenco <Igrek@star-sw.com> (tiny change)
+
+ * w32term.c (x_scroll_run): Delete region objects after use.
+
+2004-10-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c: Add prototypes for forward function declarations.
+ (popup_get_selection): Remove parameter do_timers, remove call to
+ timer_check.
+ (create_and_show_popup_menu, create_and_show_dialog):
+ Remove parameter do_timers from call to popup_get_selection.
+
+ * xdisp.c (update_tool_bar): Pass a copy of f->tool_bar_items to
+ tool_bar_items and assign the result to f->tool_bar_items if
+ not equal. Move BLOCK/UNBLOCK_INPUT from around call to
+ tool_bar_items to assignment of result.
+
+ * atimer.c (alarm_signal_handler): Do not call set_alarm if
+ pending_atimers is non-zero.
+
+2004-10-31 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (margin_glyphs_to_reserve): Don't use ncols_scale_factor.
+
+2004-10-28 Will <will@glozer.net>
+
+ * macterm.c: Allow user to assign key modifiers to the Mac Option
+ key via a 'mac-option-modifier' variable.
+
+2004-10-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xselect.c (Vx_lost_selection_functions, Vx_sent_selection_functions):
+ Rename from Vx_lost_selection_hooks and Vx_sent_selection_hooks.
+ (x_handle_selection_request, x_handle_selection_clear)
+ (x_clear_frame_selections, syms_of_xselect): Adjust accordingly.
+
+2004-10-28 Richard M. Stallman <rms@gnu.org>
+
+ * w32fns.c (Fx_server_vendor, Fx_server_version): Doc fixes.
+
+ * xfns.c (Fx_server_vendor, Fx_server_version): Doc fixes.
+
+2004-10-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (scan_sexps_forward): Give precedence to a 2-char
+ comment-starter over a 1-char one.
+
+2004-10-27 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (get_next_display_element): In mode lines,
+ treat newline and tab like other control characters.
+
+ * editfns.c (Fmessage): Doc fix.
+
+ * indent.c (vmotion): When moving up, check the newline before.
+ Make prevline an int, not a Lisp_Object.
+
+2004-10-27 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Fformat): Allocate discarded table with SAFE_ALLOCA.
+ Only allocate info and discarded tables once.
+
+ * lisp.h (USE_SAFE_ALLOCA): Add and init sa_must_free integer.
+ (SAFE_ALLOCA, SAFE_ALLOCA_LISP): Increment it when malloc is used.
+ (SAFE_FREE): Test it to determine if we need to unwind to free.
+ Remove size arg. All users changed.
+ (SAFE_FREE_LISP): Remove. All users changed to use SAFE_FREE.
+
+2004-10-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c: Put empty line between comment and function body.
+ (xg_destroy_widgets): Rename from remove_from_container.
+ Just destroy all widgets in list. Argument wcont removed.
+ (xg_update_menubar, xg_update_submenu): Call xg_destroy_widgets
+ instead of remove_from_container.
+ (xg_display_close, xg_create_tool_bar, update_frame_tool_bar)
+ (free_frame_tool_bar): Add comment.
+
+ * xfns.c (xic_create_xfontset): Check that FRAME_XIC_BASE_FONTNAME
+ is not NULL before strcmp.
+
+2004-10-26 Kim F. Storm <storm@cua.dk>
+
+ * callint.c (Fcall_interactively): Add 'U' code to get the
+ up-event discarded by a previous 'k' or 'K' argument.
+
+2004-10-26 David Kastrup <dak@gnu.org>
+
+ * buffer.c (syms_of_buffer): Fix a few typos.
+
+2004-10-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xsmfns.c: Put empty line between comment and function body.
+ Use two spaces before comment end.
+
+2004-10-25 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fontset_pattern_regexp): Optimize for the case that
+ PATTERN is full XLFD.
+
+2004-10-24 Kenichi Handa <handa@m17n.org>
+
+ * regex.h (enum reg_errcode_t): New value REG_ERANGEX.
+
+ * regex.c (re_error_msgid): Add an entry for REG_ERANGEX.
+ (regex_compile): Return REG_ERANGEX if appropriate.
+
+2004-10-22 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Ftranslate_region_internal): New function.
+ (syms_of_editfns): Defsubr it.
+
+2004-10-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (xic_create_xfontset): Initialize missing_list to NULL.
+
+2004-10-21 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * xterm.h (x_output): New member `xic_base_fontname'.
+ (FRAME_XIC_BASE_FONTNAME): New macro.
+ (xic_free_xfontset): Declare.
+
+ * xfns.c (xic_create_xfontset): Share fontsets between frames
+ based on base_fontname.
+ (xic_free_xfontset): New function.
+ (free_frame_xic): Use it.
+ (xic_set_xfontset): Ditto.
+
+ * xterm.c (xim_destroy_callback): Ditto.
+
+2004-10-20 B. Anyos <banyos@freemail.hu> (tiny change)
+
+ * w32term.c (x_draw_glyph_string): Use overline_color for overlines.
+
+2004-10-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (XSync): If USE_GTK, define XSync as process_all and then
+ XSync.
+
+ * emacs.c (my_heap_start, heap_bss_diff, MAX_HEAP_BSS_DIFF):
+ New variables and constant.
+ (main): Calculate heap_bss_diff. If we are dumping and the
+ heap_bss_diff is greater than MAX_HEAP_BSS_DIFF, set PER_LINUX32
+ and exec ourself again.
+ (Fdump_emacs): If heap_bss_diff is greater than MAX_HEAP_BSS_DIFF
+ print a warning.
+
+ * lastfile.c: Make my_endbss and my_endbss_static available on all
+ platforms.
+
+ * Makefile.in (RUN_TEMACS): Remove @SETARCH@.
+ * config.in (HAVE_PERSONALITY_LINUX32): Regenerate.
+
+2004-10-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * data.c (Flocal_variable_if_set_p): Doc fix.
+
+2004-10-19 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (init_environment): Set emacs_dir correctly when running
+ emacs from the build directory.
+
+2004-10-19 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fdelete_and_extract_region):
+ If region is empty, return null string.
+
+2004-10-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.h (xg_update_scrollbar_pos): Remove arguments real_left
+ and canon_width.
+ (xg_frame_cleared): Remove.
+
+ * gtkutil.c (xg_frame_cleared, xg_fixed_handle_expose)
+ (xg_find_top_left_in_fixed): Remove.
+ (xg_create_scroll_bar): Put an event box widget between
+ the scroll bar widget and the edit widget.
+ (xg_show_scroll_bar): Show the parent widget (the event box).
+ (xg_remove_scroll_bar): Destroy parent (the event box) also.
+ (xg_update_scrollbar_pos): Remove arguments real_left and canon_width.
+ Move the parent (the event box) widget inside the fixed widget.
+ Move window clear to xterm.c.
+
+ * gtkutil.h (xg_frame_cleared): Remove.
+
+ * xterm.c (x_clear_frame): Remove call to xg_frame_cleared
+ (x_scroll_bar_create, XTset_vertical_scroll_bar):
+ Remove arguments left and width to xg_update_scrollbar_pos.
+ (XTset_vertical_scroll_bar): Do x_clear_area for USE_GTK also.
+
+2004-10-19 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (display_mode_element): Fix display of wide chars.
+
+2004-10-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_update_scrollbar_pos): Change XClearWindow to
+ gdk_window_clear and move gdk_window_process_all_updates after
+ clear so events are sent to the X server in correct order.
+
+2004-10-18 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fs_load_font): Use fast_string_match_ignore_case for
+ comparing font names.
+ (fs_query_fontset): Use fast_string_match for comparing fontset names.
+ (list_fontsets): Likewise.
+
+ * search.c (fast_string_match_ignore_case): New function.
+
+ * lisp.h (fast_string_match_ignore_case): Extern it.
+
+2004-10-17 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (overlay_arrow_at_row): Return overlay string rather
+ than bitmap if there is not left fringe.
+ (get_overlay_arrow_glyph_row): Also used on windows system.
+ (display_line): Display overlay string if no left fringe.
+
+2004-10-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_font_match): Encode font name being matched.
+
+2004-10-16 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fspecial_display_p): Doc fix.
+
+2004-10-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * doc.c (Fsubstitute_command_keys): Fix remap-handling.
+ Don't ignore menus, because where-is-internal already does it for us.
+
+2004-10-15 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Only update fringes and vertical
+ border on window frames.
+
+2004-10-14 Andreas Schwab <schwab@suse.de>
+
+ * m/ia64.h (DATA_SEG_BITS): Don't define.
+
+2004-10-14 Kim F. Storm <storm@cua.dk>
+
+ * xterm.h: Include Xutil.h after keysym.h to work around bug
+ in some X versions.
+
+2004-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fns.c (map_char_table): Add missing gcpros.
+
+2004-10-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (get_keymap): An autoload form is not a keymap.
+
+ * textprop.c (syms_of_textprop): Make `syntax-table' nonsticky.
+
+2004-10-13 Kim F. Storm <storm@cua.dk>
+
+ * callproc.c (Fcall_process): Simplify handling of display arg.
+ Resume `display_on_the_fly' once a coding system is determined.
+
+ * xdisp.c (redisplay_preserve_echo_area): Fix last change.
+
+2004-10-12 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_preserve_echo_area): Flush display in case
+ caller, such as call-process, is not going to poll for input.
+ (calc_line_height_property): Handle case where it->object is nil.
+
+ * xterm.c (x_redisplay_interface): Fix flush_display_optional.
+
+2004-10-12 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (get_next_display_element):
+ If unibyte_display_via_language_environment is zero, display 8-bit
+ chars in octal in unibyte buffer.
+
+2004-10-12 Kim F. Storm <storm@cua.dk>
+
+ * doc.c (Fsubstitute_command_keys): Ignore remappings unless there
+ are no ordinary bindings.
+
+2004-10-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (syms_of_xfns): Defsubr x-file-dialog for GTK also.
+
+2004-10-10 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (x_raise_frame): Add BLOCK_INPUT around SelectWindow.
+ (x_lower_frame): Add BLOCK_INPUT around SendBehind.
+ (make_mac_frame): Add BLOCK_INPUT around the making of a
+ terminal frame.
+ (mac_initialize): Add BLOCK_INPUT around carbon initialization.
+ * macgui.h (mktime): Use emacs_mktime.
+ * macfns.c (Fx_file_dialog): Add BLOCK_INPUT around more code.
+ Make a cancel file-open dialog be like C-g.
+ * mac.c (mktime): Use emacs_mktime.
+ (Fdo_applescript): Add BLOCK_INPUT around do_applescript.
+ (Fmac_paste_function): Add better error handling for carbon cut/paste.
+
+2004-10-10 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (timer_resume_idle): New function to resume idle
+ timer without resetting timers on the idle list.
+ (read_char): Use timer_resume_idle. Remove local var last_idle_start.
+ (timer_start_idle, timer_stop_idle): Declare static.
+ (read_key_sequence): Use timer_resume_idle instead of timer_start_idle.
+
+ * keyboard.h (timer_start_idle, timer_stop_idle): Remove prototypes.
+
+2004-10-08 Steven Tamm <steventamm@mac.com>
+
+ * config.in (HAVE_MALLOC_MALLOC_H): Regenerate.
+ * macterm.c (mac_check_for_quit_char): Remove warning for using
+ NULL where 0 should be used.
+ * unexmacosx.c: Use malloc/malloc.h on Tiger instead of
+ objc/malloc.h
+ * mac.c: Include time.h for Tiger compatibility.
+
+2004-10-07 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Fix flicker on vertical line between
+ windows. Update vertical line after drawing window fringes, but
+ only if actually drawing any bitmaps--or there is no fringe.
+
+ * xterm.c (x_update_window_end): Likewise.
+ * macterm.c (x_update_window_end): Likewise.
+ * w32term.c (x_update_window_end): Likewise.
+
+ * fringe.c (draw_window_fringes): Return value now indicates if
+ any fringe bitmaps were redrawn (or there are no fringes).
+
+ * dispextern.h (draw_window_fringes): Update prototype.
+
+2004-10-06 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (mac_get_window_bounds): Add extern.
+ (x_real_positions): Use mac_get_window_bounds.
+
+ * macmenu.c (update_submenu_strings): Apply 2004-09-07 change for
+ xmenu.c (YAILOM).
+
+ * macterm.c [!MAC_OSX]: Include Windows.h.
+ (front_emacs_window): Rename from mac_front_window. All uses
+ changed. Return the frontmost non-tooltip emacs window.
+ (mac_get_window_bounds): New function.
+ (x_calc_absolute_position): Use the difference of width and height
+ between the inner and outer window.
+ (x_set_offset): Specify window position by the coordinae of the
+ outer window. Adjust the position if the title bar is completely
+ outside the screen.
+ (app_is_suspended, app_sleep_time): Remove unused variables.
+ (do_app_resume, do_app_suspend): Remove their contents because
+ window-activate/deactivate events will do the job.
+ (do_zoom_window): Remove unused variables. Make compliant to the
+ standard way of zooming. Set f->left_pos and f->top_pos.
+ (XTread_socket): Don't use argument `expected'. Don't use
+ FrontWindow to determine the clicked window. Exclude unprocessed
+ mouseUp cases in the early stage. Add parentheses to fix operator
+ precedence.
+ (XTread_socket) [TARGET_API_MAC_CARBON]: Don't specify drag area.
+
+2004-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * config.in: Regenerate.
+
+ * Makefile.in (RUN_TEMACS): Check HAVE_RANDOM_HEAPSTART instead of
+ HAVE_EXECSHIELD.
+
+2004-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
+ a row if Alt or Meta has been found for that row. Also stop scanning
+ for Keysyms for that row.
+
+2004-10-04 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (Ffringe_bitmaps_at_pos): Change return value from cons
+ to list. Include overlay arrow bitmap in return value.
+
+ * xterm.c (XTset_vertical_scroll_bar): Improve handling of scroll
+ bars with fractional column width. If scroll bar separates two
+ windows, move it towards the window it belongs to. Only update
+ the padding area below the scroll bar widget when necessary,
+ i.e. when scroll bar widget is created, moved, or resized.
+
+ * xdisp.c (define_frame_cursor1): Do not change frame cursor
+ while tracking/dragging mouse.
+ (x_draw_vertical_border): Do not draw line if frame has scroll bars.
+
+ * window.c (coordinates_in_window): Relax check for cursor
+ on vertial border between mode lines.
+ (Fset_window_fringes): Do not allow negative widths.
+ (Fset_window_scroll_bars): Likewise.
+
+ * .gdbinit (pp): Shorthand for p ARG + pr.
+ (ff): New command: flush frame updates (X only).
+
+2004-10-03 Michael Albinus <michael.albinus@gmx.de>
+
+ * fileio.c (auto_save_1) Call Ffile_modes for remote files.
+
+2004-09-30 Kenichi Handa <handa@m17n.org>
+
+ * process.c (send_process): Free composition data.
+
+ * fileio.c (Finsert_file_contents): Free composition data.
+
+ * coding.c (code_convert_region): Don't skip ASCIIs if there are
+ compositions to encode.
+ (encode_coding_string): Likewise. Free composition data.
+
+2004-09-30 Florian Weimer <fw@deneb.enyo.de>
+
+ * coding.c (code_convert_region): Free composition data.
+
+2004-09-29 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c: Remove limit on number of bitmaps.
+ (fringe_bitmaps, fringe_faces): Change to pointers.
+ (max_fringe_bitmaps): New var.
+ (Fdefine_fringe_bitmap): Expand fringe_bitmaps and fringe_faces.
+ (init_fringe): Allocate fringe_bitmaps and fringe_faces.
+
+ * dispextern.h (FRINGE_ID_BITS): Increase to 16 bits (64K bitmaps).
+ (struct glyph_row): Reorder fringe_bitmap related fields.
+ (struct it): Likewise.
+
+ * w32term.c (fringe_bmp): Change to pointer.
+ (max_fringe_bmp): New var.
+ (w32_define_fringe_bitmap): Expand fringe_bmp.
+ (w32_draw_fringe_bitmap): Check max_fringe_bmp.
+ (w32_destroy_fringe_bitmap): Likewise.
+
+2004-09-29 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c: Simplify last change.
+ (lookup_fringe_bitmap): New function.
+ (valid_fringe_bitmap_p, resolve_fringe_bitmap): Remove.
+ (Fdestroy_fringe_bitmap): Use lookup_fringe_bitmap.
+ Keep standard bitmaps in Vfringe_bitmaps.
+ (Fdefine_fringe_bitmap): Use lookup_fringe_bitmap.
+ (Fset_fringe_bitmap_face): Likewise.
+
+ * dispextern.h (lookup_fringe_bitmap): Add prototype.
+ (valid_fringe_bitmap_p): Remove prototype.
+
+ * xdisp.c (handle_single_display_prop): Use lookup_fringe_bitmap.
+
+2004-09-29 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c (destroy_fringe_bitmap, init_fringe_bitmap)
+ (w32_init_fringe, w32_reset_fringes): Fix bootstrap (NULL rif).
+
+ * dispextern.h (valid_fringe_bitmap_p): Fix prototype.
+
+ * fringe.c (Vfringe_bitmaps): New variable.
+ (syms_of_fringe): DEFVAR_LISP it.
+ (valid_fringe_bitmap_p): Rename from valid_fringe_bitmap_id_p.
+ Change arg to Lisp_Object and fail if not an integer.
+ (get_fringe_bitmap_name, resolve_fringe_bitmap)
+ (destroy_fringe_bitmap): New functions.
+ (Fdestroy_fringe_bitmap): Change arg to bitmap symbol.
+ Use destroy_fringe_bitmap. Remove symbol from Vfringe_bitmaps and
+ clear its fringe property.
+ (init_fringe_bitmap): Use destroy_fringe_bitmap instead of
+ Fdestroy_fringe_bitmap.
+ (Fdefine_fringe_bitmap): Add BITMAP arg specifying new or existing
+ bitmap symbol; remove WHICH arg. Add symbol to Vfringe_bitmaps
+ and set fringe property. Signal error if no free slots.
+ (Fset_fringe_bitmap_face): Change arg to bitmap symbol.
+ (Ffringe_bitmaps_at_pos): Return bitmap symbols instead of numbers.
+
+ * xdisp.c (handle_single_display_prop): Fringe bitmaps are now
+ symbols with a fringe property.
+
+2004-09-27 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (syms_of_buffer) <indicate-buffer-boundaries>:
+ Doc fix. Format may now be a symbol or alist, not a cons.
+
+ * fringe.c (update_window_fringes): Handle new formats of
+ indicate-buffer-boundaries (symbol or alist). No longer
+ allow a simple cons.
+ (Ffringe_bitmaps_at_pos): Use nil value for no bitmap.
+
+2004-09-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * config.in: Rebuild.
+
+2004-09-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * config.in: Rebuild.
+
+ * Makefile.in: Run setarch i386 ./temacs if exec-shield is present.
+
+2004-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c (x_term_init): Work around a bug in some X servers.
+
+2004-09-18 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer) <default-major-mode>: Doc fix.
+
+ * xdisp.c (try_window_reusing_current_matrix):
+ Handle the case where we reach the old displayed text,
+ out of sync with the old line boundary.
+
+2004-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (Finsert_file_contents): Fix case of replacement in a
+ narrowed buffer.
+
+2004-09-14 Kim F. Storm <storm@cua.dk>
+
+ * puresize.h (PURESIZE_RATIO): Define based on BITS_PER_EMACS_INT.
+
+ * xfaces.c (Qface_no_inherit): New var.
+ (syms_of_xfaces): Intern and staticpro it.
+ (Finternal_make_lisp_face, Finternal_set_lisp_face_attribute)
+ (Finternal_copy_lisp_face, update_face_from_frame_parameter):
+ Don't increment face_change_count when face has non-nil
+ face-no-inherit property.
+
+2004-09-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * bytecode.c (BYTE_CODE_QUIT): Add missing AFTER_POTENTIAL_GC.
+ (Fbyte_code): Remove dead code after `wrong_type_argument'.
+
+ * alloc.c (Fgarbage_collect): Mark keyboards, gtk data, and specpdl
+ before doing the mark_stack_check_gcpros since they're not on the stack.
+
+2004-09-12 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Fformat): Handle format strings with multiple text
+ properties. Reverse text property list from the format string,
+ so the positions are in increasing order.
+
+2004-09-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (x_reply_selection_request): XSync and UNBLOCK before
+ x_uncatch_errors so that possible protocol errors are delivered.
+
+2004-09-10 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (msdos.o): Depend on buffer.h, commands.h, and
+ blockinput.h.
+ (dosfns.o): Depend on blockinput.h, window.h, dispextern.h,
+ charset.h, and coding.h
+ (w16select.o): Depend on buffer.h, charset.h, coding.h, and composite.h.
+ (term.o): Depend on window.h and keymap.h.
+ (abbrev.o): Depend on syntax.h.
+ (callint.o): Depend on keymap.h.
+ (casefiddle.o): Depend on charset.h and keymap.h.
+ (category.o): Depend on keymap.h.
+ (coding.o): Depend on dispextern.h.
+ (cmds.o): Depend on keyboard.h and keymap.h.
+ (dispnew.o): Depend on indent.h and intervals.h.
+ (doc.o): Depend on keymap.h.
+ (editfns.o): Depend on frame.h.
+ (emacs.o): Depend on dispextern.h.
+ (fileio.o): Don't depend on ccl.h.
+ (filelock.o): Depend on charset.h and coding.h.
+ (frame.o): Depend on w32term.h and macterm.h.
+ (insdel.o): Depend on region-cache.h.
+ (keyboard.o): Depend on keymap.h, w32term.h, and macterm.h.
+ (minibuf.o): Depend on $(INTERVALS_SRC) and keymap.h.
+ (search.o): Depend on $(INTERVALS_SRC).
+ (syntax.o): Depend on keymap.h, regex.h, and $(INTERVALS_SRC).
+ (window.o): Depend on keymap.h, blockinput.h, $(INTERVALS_SRC),
+ xterm.h, w32term.h, and macterm.h.
+ (xdisp.o): Depend on keyboard.h, $(INTERVALS_SRC), xterm.h,
+ w32term.h, and macterm.h.
+ (xfaces.o): Depend on keyboard.h, $(INTERVALS_SRC),
+ region-cache.h, xterm.h, w32term.h, and macterm.h.
+ (bytecode.o): Depend on dispextern.h, frame.h, and xterm.h.
+ (data.o): Depend on frame.h.
+ (fns.o): Depend on keymap.h, xterm.h, and blockinput.h.
+ (print.o): Depend on termchar.h and $(INTERVALS_SRC).
+ (lread.o): Depend on $(INTERVALS_SRC), termhooks.h, and coding.h.
+ (intervals.o): Depend on keymap.h.
+
+ * msdos.c (msdos_set_cursor_shape, IT_display_cursor):
+ Add debugging print-out to termscript.
+
+2004-09-09 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (decode_mode_spec): Use current buffer for most purposes.
+
+2004-09-08 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fset_window_buffer): Doc fix.
+
+ * xdisp.c (Fformat_mode_line): New arg BUFFER says which buffer to use.
+
+2004-09-08 Dan Nicolaescu <dann@ics.uci.edu>
+
+ * minibuf.c (history_delete_duplicates): New variable.
+ (read_minibuf): Use it.
+ (syms_of_minibuf): Create the corresponding lisp variable.
+
+2004-09-08 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_cursor_from_row): Also look at 'cursor' property in
+ overlay just before point.
+
+2004-09-07 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.h (struct buffer): Add auto_save_file_format field.
+ * buffer.c (reset_buffer, init_buffer_once):
+ Handle auto_save_file_format field.
+ (syms_of_buffer): Add DEFVAR_PER_BUFFER for
+ `buffer-auto-save-file-format'.
+ * fileio.c: Delete declaration for removed Vauto_save_file_format.
+ (build_annotations): Adapt to replacement of
+ `auto-save-file-format' with the new buffer-local variable
+ `buffer-auto-save-file-format'.
+ (syms_of_fileio): Delete DEFVAR_LISP for auto-save-file-format.
+
+2004-09-07 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.h (AppendMenuW_Proc): Move declaration from w32menu.c.
+
+ * w32fns.c (w32_wnd_proc) <WM_MEASUREITEM, WM_DRAWITEM>:
+ Handle Unicode menu titles.
+
+2004-09-07 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_cursor_from_row): Fix last change. Only use 'cursor'
+ property from text property or overlay strings at point.
+
+2004-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xmenu.c (update_submenu_strings): YAILOM.
+ (set_frame_menubar): Make sure last_i is initialized.
+
+2004-09-03 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (_widget_value): Add lname and lkey.
+ (digest_single_submenu): Set lname and lkey in widget_value
+ instead of name and key.
+ (update_submenu_strings): New function.
+ (set_frame_menubar): Remove call to inhibit_garbage_collection,
+ call update_submenu_strings.
+
+ * w32menu.c (globals_of_w32menu): Check for Unicode API.
+ (digest_single_submenu, w32_menu_show): Encode menu strings as
+ UTF-8 if Unicode API is available.
+ (utf8to16): New function.
+ (add_menu_item): Use it when calling Unicode API.
+
+2004-09-03 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (set_cursor_from_row): Look for non-nil `cursor' property
+ in overlay or text-property strings; set cursor on corresponding
+ glyph rather than at end of the string.
+
+2004-09-02 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c (x_real_positions): Save the current window port and
+ set a new one before obtaining the global coordinate.
+ Use FRAME_MAC_WINDOW.
+ (x_set_name, x_set_title): Encode title to UTF8.
+ Use SetWindowTitleWithCFString.
+ (Fx_server_version): Get correct OS version.
+
+ * macmenu.c (add_menu_item): Remove unused variable `i'.
+ Don't let separator items destroy refence constants of other menu items.
+
+ * macterm.c (x_update_end): Move SetPortWindowPort to inside
+ BLOCK_INPUT.
+ (x_set_offset): Use FRAME_MAC_WINDOW.
+
+ * xdisp.c (note_mouse_highlight): Set the mouse pointer shape to
+ nontext_cursor if it is on a scroll bar.
+
+ * s/darwin.h (LIBS_CARBON): New define to specify libraries for
+ Carbon support.
+ (LD_SWITCH_SYSTEM_TEMACS): Don't link with unused libstdc++.
+ Use LIBS_CARBON.
+
+2004-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_set_name_internal): New function. Check if we shall call
+ xfree before ENCODE_UTF_8.
+ (x_set_name, x_set_title): Call x_set_name_internal.
+
+2004-08-31 NAKAMURA Toshikazu <nr-tkz@nifty.com> (tiny change)
+
+ * w32fns.c (w32_load_font): If a BDF font is already loaded, do not
+ reload it.
+
+2004-08-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * macmenu.c (_widget_value): Add lname and lkey.
+ (single_submenu): Set lname and lkey in widget_value
+ instead of name and key.
+ (update_submenu_strings): New function.
+ (set_frame_menubar): Remove call to inhibit_garbage_collection,
+ call update_submenu_strings.
+
+ * xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
+ instead of name and key.
+ (update_submenu_strings): New function.
+ (set_frame_menubar): Remove call to inhibit_garbage_collection,
+ call update_submenu_strings.
+
+ * gtkutil.h (_widget_value): Added lname and lkey.
+
+2004-08-30 Steven Tamm <steventamm@mac.com>
+
+ * macmenu.c (mac_menu_show): Remove shadowing of menu variable
+ by using different names for inner loop variables.
+
+2004-08-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (set_frame_menubar): Reintroduce inhibit_garbage_collection
+ from 2002-07-15T00:01:34Z!raeburn@raeburn.org so that strings from ENCODE_UTF_8 isn't GC:ed before used.
+
+ * gtkutil.c (xg_create_frame_widgets): Compensate for tool bar when
+ tool bar items is 0.
+
+2004-08-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macmenu.c (ENCODE_MENU_STRING): Added to handle multibyte
+ strings in menu items.
+ (single_submenu): Use ENCODE_MENU_STRING
+ (mac_menu_show): Use ENCODE_MENU_STRING. Reset grabbed because
+ button release isn't passed to event loop
+ (add_menu_item): Use SetMenuItemWithCFString.
+
+2004-08-26 Steven Tamm <steventamm@mac.com>
+
+ * fileio.c (Fread_file_name): Call x_file_dialog on carbon on
+ tool-bar/menu click.
+ * macfns.c (Fx_file_dialog): Implement using NavServices.
+
+2004-08-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_catch_errors_unwind): Do not XSync if display has closed.
+
+ * xfns.c (x_window_to_frame, x_any_window_to_frame)
+ (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
+ (x_top_window_to_frame): Return 0 if wdesc is None.
+
+2004-08-22 Richard M. Stallman <rms@gnu.org>
+
+ * process.c (process_send_signal) [SIGNALS_VIA_CHARACTERS,
+ HAVE_TERMIOS]: If there's no char for this signal, drop through
+ and use system calls.
+
+ * bytecode.c (Fbyte_code) <unwind-protect>: Cannot GC.
+
+2004-08-20 Kim F. Storm <storm@cua.dk>
+
+ * process.c (wait_reading_process_output): Rename from
+ wait_reading_process_input. All uses changed.
+ (wait_reading_process_output_1): Rename from
+ wait_reading_process_input_1. All uses changed.
+
+ * dispnew.c (Fsleep_for): Remove obsolete code.
+
+2004-08-20 Kenichi Handa <handa@m17n.org>
+
+ * syntax.c (skip_chars): Fix for unibyte case.
+
+2004-08-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (char_quoted): Mixup byte/char pos.
+ (back_comment): Fixup globals in all cases.
+
+2004-08-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_set_name, x_set_title): Encode title to UTF8 before
+ passing it to gtk_window_set_title.
+
+2004-08-19 Kim F. Storm <storm@cua.dk>
+
+ * process.c (wait_reading_process_input): Clean up.
+ Add wait_for_cell, wait_proc, and just_wait_proc args
+ to avoid overloading `read_kbd' and `do_display' args.
+ Change read_kbd arg to int. All callers changed.
+
+ * process.c (process_send_signal): Use CDISABLE.
+
+ * sysdep.c (child_setup_tty, init_sys_modes): Use CDISABLE.
+
+2004-08-18 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Faccept_process_output): Add arg JUST-THIS-ONE;
+ forward to wait_reading_process_input via DO_DISPLAY arg.
+ (wait_reading_process_input): If DO_DISPLAY < 0 for a process
+ object, only process output from that process; also inhibit
+ running timers if DO_DISPLAY==-2.
+
+2004-08-17 Kim F. Storm <storm@cua.dk>
+
+ * process.c (process_send_signal): Fix last change--use
+ _POSIX_VDISABLE instead of CVDISABLE when available.
+
+2004-08-16 Richard M. Stallman <rms@gnu.org>
+
+ * sysdep.c (child_setup_tty) [SIGNALS_VIA_CHARACTERS]:
+ Set VQUIT and VINTR chars to the standard ones if they are unset.
+ [AIX]: Don't do that here. And don't force VINTR to standard
+ when SIGNALS_VIA_CHARACTERS.
+
+ * process.c (process_send_signal)
+ [SIGNALS_VIA_CHARACTERS, HAVE_TERMIOS]: Clean up.
+ Do nothing if the character is CVDISABLE.
+
+ * xfaces.c (merge_face_ref): Specifying `unspecified' is a no-op.
+
+ * intervals.c (move_if_not_intangible):
+ Force POSITION to be between BEGV and ZV.
+
+2004-08-14 John Paul Wallington <jpw@gnu.org>
+
+ * buffer.c (Frestore_buffer_modified_p): Doc fix.
+
+ * fileio.c (Fread_file_name): Doc fix.
+
+ * minibuf.c (syms_of_minibuf) <completion-ignore-case>: Doc fix.
+
+2004-08-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keymap.c (Fmake_keymap, Fmap_keymap, Fwhere_is_internal): Doc fixes.
+
+2004-08-08 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keyboard.c: Declare Qdisabled_command_function instead of
+ Qdisabled_command_hook.
+ (Fcommand_execute): Use Qdisabled_command_function instead of
+ Qdisabled_command_hook.
+ (syms_of_keyboard): Ditto.
+
+2004-08-07 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keymap.c (Flocal_key_binding, Fglobal_key_binding)
+ (syms_of_keymap) <key-translation-map>: Doc fixes.
+
+2004-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (window_list_1): YAILOM.
+
+ * fileio.c (make_temp_name): Handle multibyte prefixes.
+
+2004-08-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keyboard.c (syms_of_keyboard) <overriding-terminal-local-map>:
+ Doc fix.
+
+2004-08-03 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (decode_coding_string): Adjust coding->consumed, and
+ etc. with shrinked_bytes.
+
+2004-08-03 Kim F. Storm <storm@cua.dk>
+
+ * indent.c (compute_motion): Fix check for full width window
+ in non-window case. Do not count left truncation glyph on
+ window systems.
+
+2004-08-02 Luc Teirlinck <teirllm@auburn.edu>
+
+ * data.c (Finteractive_form): Doc fix.
+
+2004-08-02 Kim F. Storm <storm@cua.dk>
+
+ * indent.c (compute_motion): Use actual window width if WIDTH is -1,
+ properly accounting for continuation glyph on non-window systems.
+ (Fcompute_motion): Use actual window width if WIDTH is nil, and
+ actual window width/height if TOPOS is nil, properly accounting for
+ continuation glyphs on non-window systems, and optional header lines.
+ (vmotion): Let compute_motion calculate actual window width.
+
+ * window.c (window_scroll_line_based): Let compute_motion
+ calculate actual window width.
+
+2004-08-02 Kim F. Storm <storm@cua.dk>
+
+ * process.c (read_process_output): Use whole read buffer.
+ Don't trigger adaptive read buffering on errors.
+
+2004-07-31 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keymap.c (Fset_keymap_parent, Fdefine_prefix_command): Doc fixes.
+
+ * keyboard.c (syms_of_keyboard) <disable-point-adjustment>: Doc fix.
+
+ * callint.c (Fcall_interactively): Doc fix.
+
+2004-07-30 Richard M. Stallman <rms@gnu.org>
+
+ * abbrev.c (Fexpand_abbrev): Undo previous change.
+
+2004-07-30 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Fformat): Allocate extra (dummy) element in info.
+
+2004-07-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * eval.c (Fdefvar, Fdefconst): Doc fixes.
+
+2004-07-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_in_display_line_to): Check BUFFER_POS_REACHED_P after
+ we have ensured that the glyph fits on the current line (or returned
+ MOVE_LINE_CONTINUED otherwise).
+
+2004-07-26 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_in_display_line_to): If overflow-newline-into-fringe
+ is enabled, return MOVE_LINE_CONTINUED rather than MOVE_POS_MATCH_OR_ZV
+ if target position is at end of display line but char is not a newline.
+
+2004-07-25 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (coordinates_in_window): Return ON_SCROLL_BAR
+ instead of ON_VERTICAL_BORDER, when on scroll bar.
+ (Fcoordinates_in_window_p): Handle ON_SCROLL_BAR--return nil.
+
+ * dispextern.h (enum window_part): Add ON_SCROLL_BAR.
+
+ * window.c (Fcoordinates_in_window_p):
+ Take account of FRAME_INTERNAL_BORDER_WIDTH.
+
+ * alloc.c (check_cons_list): New function (contents commented out).
+
+2004-07-24 Luc Teirlinck <teirllm@auburn.edu>
+
+ * xfaces.c (Fcolor_supported_p): Doc fix.
+
+ * frame.c (Fselect_frame, Fset_frame_selected_window)
+ (Fframe_visible_p, Fraise_frame): Doc fixes.
+
+2004-07-24 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.h (not_single_kboard_state): Declare.
+
+ * fileio.c (Fwrite_region): Doc fix.
+
+ * window.c (Fwindow_at): Take account of FRAME_INTERNAL_BORDER_WIDTH.
+
+ * abbrev.c (Fexpand_abbrev): Run Qpre_abbrev_expand_hook
+ only when a real abbrev is present.
+
+ * xfns.c (x_icon_verify): New function.
+ (Fx_create_frame): Use it.
+
+2004-07-22 Barry Fishman <barry_fishman@att.net> (tiny change)
+
+ * s/gnu-linux.h: Use GC_MARK_STACK if __amd64__ is defined.
+
+2004-07-21 Kim F. Storm <storm@cua.dk>
+
+ * window.h (struct glyph_matrix): New members nrows_scale_factor
+ and ncols_scale_factor.
+
+ * window.c (make_window): Initialize nrows_scale_factor and
+ ncols_scale_factor members.
+
+ * dispnew.c (margin_glyphs_to_reserve): Apply ncols_scale_factor.
+ (allocate_matrices_for_frame_redisplay): Fix left/right margin mix-up.
+ (required_matrix_height): Apply nrows_scale_factor.
+ (required_matrix_width): Apply ncols_scale_factor.
+
+ * xdisp.c (display_line): Increment nrows_scale_factor and set
+ fonts_changed_p if past last allocated row.
+ (append_glyph, append_composite_glyph, produce_image_glyph)
+ (append_stretch_glyph): Increment ncols_scale_factor and set
+ fonts_changed_p if current area is full.
+
+2004-07-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * widget.c (EmacsFrameDestroy): Don't abort if normal_gc is 0.
+
+2004-07-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * window.c (Fpos_visible_in_window_p, Fset_window_hscroll)
+ (Fwindow_inside_pixel_edges, Fwindow_end, Fset_window_point)
+ (Fset_window_start, Fscroll_up, Fscroll_down)
+ (Fother_window_for_scrolling, Fscroll_other_window)
+ (Fsave_window_excursion, Fset_window_vscroll)
+ (syms_of_window) <window-size-fixed>: Doc fixes.
+
+2004-07-19 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
+
+ * w32fns.c (Fx_file_dialog): Use ENCODE_FILE instead of
+ ENCODE_SYSTEM for filenames.
+
+2004-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (sys_select): Block input around call to
+ ReceiveNextEvent to prevent breakage. Correctly handle
+ blocking on event queue only by calling ReceiveNextEvent
+ instead of select (since GUI events aren't on an fd).
+ (sys_read): Remove function
+ * sysdep.c: Remove redefine of read to sys_read if HAVE_CARBON.
+
+2004-07-18 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * mac.c (sys_select): Redo sys_select to use alarm-based
+ polling instead of 1 sec timeouts (like solaris).
+
+ * macterm.c (x_make_frame_visible): Comment in polling on
+ frame creation.
+
+ * keyboard.c: Undef SIGIO on Carbon.
+
+ * atimer.c (alarm_signal_handler): Call alarm handlers after
+ scheduling.
+
+ * eval.c (Feval): Remove quit_char test.
+
+ * process.c (wait_reading_process_input): Remove clearing
+ stdin for select call on process input.
+
+2004-07-18 Luc Teirlinck <teirllm@auburn.edu>
+
+ * xdisp.c (syms_of_xdisp) <window-scroll-functions>: Correct
+ capitalization error in docstring.
+
+2004-07-17 Juanma Barranquero <lektu@terra.es>
+
+ * keyboard.c (not_single_kboard_state): Do nothing unless
+ MULTI_KBOARD is defined.
+
+2004-07-17 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (coordinates_in_window): Inside the window but outside
+ its box to the L or R, return ON_VERTICAL_BORDER.
+ (window_list_1): Rotate the list to start with WINDOW.
+
+ * print.c (print_preprocess): Test for print_depth at limit
+ before entering in being_printed.
+
+ * keyboard.c (not_single_kboard_state): New function.
+ (stuff_buffered_input): Now no-op only if no SIGTSTP.
+
+ * frame.c (Fdelete_frame): If we're in single_bboard_state on
+ this kboard, and we delete its last frame, go to any_kboard_state.
+
+ * buffer.c (syms_of_buffer) <transient-mark-mode>: Doc fix.
+
+2004-07-15 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
+
+ * w32fns.c (Fx_file_dialog): Encode strings in system coding
+ system before passing them to OS functions for display.
+
+2004-07-15 David Kastrup <dak@gnu.org>
+
+ * search.c (syms_of_search): Staticpro `saved_last_thing_searched'.
+ Apparently fixes an abort condition.
+
+2004-07-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fileio.c (Fvisited_file_modtime): Return a list of two integers,
+ instead of a cons.
+
+2004-07-14 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * keyboard.c (echo_dash): Do nothing if there already is a dash
+ at the end of the echo string.
+
+2004-07-12 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (mark_object): Only look at Lisp_Misc_Save_Value
+ if GC_MARK_STACK.
+
+2004-07-10 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.c (Fswitch_to_buffer, Fpop_to_buffer): Doc fixes.
+
+ * window.c (Fwindow_buffer, Fother_window, Fget_lru_window)
+ (Fget_largest_window, Fget_buffer_window, Fdelete_windows_on)
+ (Freplace_buffer_in_windows, Fset_window_buffer)
+ (Fselect-window, Fdisplay-buffer, Fsplit_window): Doc fixes.
+ (syms_of_window): Expand docstring of `display-buffer-function'.
+
+2004-07-09 Luc Teirlinck <teirllm@auburn.edu>
+
+ * editfns.c (Ffloat_time, Fformat_time_string, Fdecode_time)
+ (Fcurrent_time_string, Fcurrent_time_zone): Mention in docstrings
+ that time values of the type (HIGH . LOW) are considered obsolete.
+
+2004-07-06 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keyboard.c (syms_of_keyboard): Fix `keyboard-translate-table'
+ docstring.
+
+ * fns.c (Fclear_string): Declare `len' before call to CHECK_STRING.
+
+2004-07-06 John Paul Wallington <jpw@gnu.org>
+
+ * eval.c (Fdefmacro): Signal an error if NAME is not a symbol.
+
+ * fns.c (Fclear_string): Signal an error if STRING is not a string.
+
+2004-07-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * macterm.c (mac_initialize_display_info): Use CGGetActiveDisplayList
+ instead of CGMainDisplayID (only in OSX 10.2 and later).
+
+2004-07-04 John Paul Wallington <jpw@gnu.org>
+
+ * fileio.c (read_file_name_completion_ignore_case): New variable.
+ (syms_of_fileio): Declare and initialise it.
+ (Fread_file_name): Bind `completion-ignore-case' to respect it.
+
+2004-07-03 Eli Zaretskii <eliz@gnu.org>
+
+ * msdos.c (dos_rawgetc): Use make_number to produce Lisp objects
+ for event.x and event.y.
+
+2004-07-01 Kenichi Handa <handa@m17n.org>
+
+ * w32select.c (Fw32_set_clipboard_data): Update `nbytes' correctly
+ after getting a new string by pre-write-conversion.
+
+2004-06-30 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xterm.c (x_detect_focus_change): Remove unused var `nr_events'.
+ (x_calc_absolute_position): Remove unused var `child'.
+
+ * xfaces.c (x_supports_face_attributes_p)
+ (Fdisplay_supports_face_attributes_p): YAILOM.
+ (tty_supports_face_attributes_p): Remove unused var `i'.
+
+ * syntax.c (skip_chars): Remove unused labels fwd_unibyte_ok and
+ back_unibyte_ok.
+
+ * search.c (match_limit, Fmatch_data, Fset_match_data): YAILOM.
+
+ * fontset.c (Fset_fontset_font): Remove unused vars `family' and
+ `registry'.
+
+ * Makefile.in (${etc}DOC): Fix file name of make-docfile.
+
+2004-06-30 Andreas Schwab <schwab@suse.de>
+
+ * image.c (CHECK_LIB_AVAILABLE): Add third parameter LIBRARIES.
+ (Finit_image_library): Pass LIBRARIES through to
+ CHECK_LIB_AVAILABLE. Declare parameters. Doc fix.
+ (lookup_image_type): Pass Qnil as second argument to
+ Finit_image_library.
+
+ * lisp.h (Finit_image_library): Declare.
+
+2004-06-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (do_window_activate, do_window_deactivate): Remove.
+ (XTread_socket): Send mouse button events to the toolbox
+ dispatcher even when the mouse is grabbed. Don't process window
+ activate events for non-Emacs windows. Replace function calls to
+ do_window_activate and do_window_deactivate with their contents.
+ Reset mouse grabbing status when a window is deactivated.
+
+2004-06-29 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (mac_get_emulated_btn)
+ (mac_event_to_emacs_modifiers): Fix emulated mouse button
+ support to correctly mask out modifiers.
+
+2004-06-29 David Kastrup <dak@gnu.org>
+
+ * search.c (Fset_match_data): Allow buffer before end of list
+ which can happen if set-match-data is using a pre-consed list.
+
+2004-06-28 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (XTread_socket): Correctly set the frame position
+ after the window is moved.
+
+2004-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_image_for_pixmap): Call g_object_unref on
+ gpix and gmask just before return to avoid memory leak.
+ (xg_get_image_for_pixmap): Add workaround for monochrome displays
+ so insensitive and activated icons look ok.
+
+2004-06-27 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (file_dialog_callback): Disable edit control if set
+ to directories only on CDN_INITDONE message.
+ (Fx_file_dialog): Default to directories only when prompt starts
+ with "Dired".
+
+2004-06-25 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (allocate_misc): Update total_free_markers.
+ (free_misc): New function.
+ (safe_alloca_unwind, free_marker): Use it.
+
+ * lisp.h (free_misc): Add prototype.
+
+ * fns.c (Fmapconcat, Fmapcar): Remove superfluous GCPROs.
+
+2004-06-24 Richard M. Stallman <rms@gnu.org>
+
+ * emacs.c (Vsignal_USR1_hook, Vsignal_USR2_hook): Definitions deleted.
+ (syms_of_emacs): Lisp variables deleted.
+
+2004-06-23 David Kastrup <dak@gnu.org>
+
+ * search.c (Freplace_match): Adjust the match-data more thoroughly
+ when replacing strings in the buffer.
+ (Fmatch_data): When INTEGERS is non-nil and the last match was in
+ a buffer, add the buffer as last element to the match data.
+ (Fset_match_data): If an additional element of the match-data is a
+ buffer, restore it to last_thing_searched.
+ (save_search_regs): Save last_thing_searched as part of the match data.
+ (restore_match_data): Restore it again.
+
+2004-06-23 Luc Teirlinck <teirllm@auburn.edu>
+
+ * keymap.c (Ftext_char_description): Doc fix.
+ * doc.c (Fsnarf_documentation): Doc fix.
+
+2004-06-22 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (Fmapcar, Fmapconcat): GCPRO the args array.
+
+ * lisp.h (struct Lisp_Save_Value): New member dogc.
+ (SAFE_ALLOCA_LISP): Change second arg to number of elements.
+ Set dogc member in Lisp_Save_Value object so it will be GC'ed.
+ (SAFE_FREE_LISP): New macro.
+
+ * alloc.c (safe_alloca_unwind): Clear dogc and pointer members.
+ (make_save_value): Init new dogc member.
+ (mark_object): Mark Lisp_Save_Value pointer array if dogc is set.
+
+ * fns.c (Fmapconcat, Fmapcar): Use new SAFE_ALLOCA_LISP and
+ SAFE_FREE_LISP macros.
+
+2004-06-22 Kim F. Storm <storm@cua.dk>
+
+ * lisp.h (SAFE_ALLOCA_LISP): New macro to allocate Lisp_Objects.
+ Temporarily inhibits GC if memory is xmalloc'ed, as the Lisp_Objects
+ in that memory area are unknown to GC. Add comments.
+
+ * fns.c (Fmapconcat, Fmapcar): Use SAFE_ALLOCA_LISP.
+
+2004-06-21 Kim F. Storm <storm@cua.dk>
+
+ * lisp.h (MAX_ALLOCA): Define here.
+ (safe_alloca_unwind): Add prototype.
+ (USE_SAFE_ALLOCA, SAFE_ALLOCA, SAFE_FREE): New macros.
+
+ * alloc.c (safe_alloca_unwind): New function.
+
+ * casefiddle.c (casify_object): Use SAFE_ALLOCA.
+
+ * charset.c (Fstring): Use SAFE_ALLOCA.
+
+ * coding.c (MAX_ALLOCA): Remove define.
+
+ * data.c (MAX_ALLOCA): Remove define.
+ (Faset): Use SAFE_ALLOCA.
+
+ * editfns.c (Fformat, Ftranspose_regions): Use SAFE_ALLOCA.
+
+ * fns.c (string_make_multibyte, string_to_multibyte)
+ (string_make_unibyte, Fmapconcat, Fmapcar): Use SAFE_ALLOCA.
+ (MAX_ALLOCA): Remove define.
+ (Fbase64_encode_region, Fbase64_encode_string)
+ (Fbase64_decode_region, Fbase64_decode_string): Use SAFE_ALLOCA.
+ (Fbase64_encode_region, Fbase64_encode_string): Fix potential
+ memory leak if encoding fails.
+
+ * xdisp.c (add_to_log): Use SAFE_ALLOCA.
+
+2004-06-21 Eli Zaretskii <eliz@gnu.org>
+
+ * print.c (Fwith_output_to_temp_buffer): Doc fix.
+
+2004-06-20 Richard M. Stallman <rms@gnu.org>
+
+ * xfaces.c (Finternal_copy_lisp_face): Small cleanup; doc fix.
+
+ * search.c (match_limit): Cleaner err msg when no match data available.
+
+ * window.c (syms_of_window): Doc fix.
+
+ * keyboard.c (command_loop_1): Handle values `only' and `identity'
+ for Vtransient_mark_mode.
+
+ * buffer.c (syms_of_buffer): Doc fix.
+
+2004-06-21 David Kastrup <dak@gnu.org>
+
+ * minibuf.c (Ftry_completion, Fall_completions): Do lazy binding
+ and unbinding of `case-fold-search' according to
+ `completion-ignore-case' around calls of string-match and
+ predicates, respectively. Should give satisfactory performance
+ in all relevant cases.
+
+2004-06-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_draw_image_foreground_1): Subtract slice.x/y from
+ clip_x/y_origin.
+
+ * fns.c (string_to_multibyte): Use xmalloc/xfree instead of alloca.
+
+ * macfns.c (Fx_display_color_cells): Do not limit return value to 256.
+
+ * macterm.c (mac_initialize_display_info): Initialize n_planes correctly
+ on Mac OSX.
+
+2004-06-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.c (syms_of_buffer): Clarify `fill-column' docstring.
+
+2004-06-16 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (Vimage_types): Remove extern.
+
+2004-06-16 Miles Bader <miles@gnu.org>
+
+ * image.c (lookup_image_type): Initialize image type if necessary.
+
+2004-06-15 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (try_cursor_movement): Exclude header line from scroll
+ margin at top of window.
+ (try_window_reusing_current_matrix): Calculate proper cursor position
+ after scrolling up with non-zero scroll margin, as the old cursor
+ position corresponds to value of PT before executing this command.
+ (try_window_id): Consider scroll margin at bottom of window too;
+ otherwise we fail to scroll when hl-line-mode is enabled.
+
+ * syntax.c (skip_chars): Only recognize [:class:] when it has the
+ proper format and class is a lower-case word.
+
+2004-06-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_get_image_for_pixmap): New function.
+ (xg_get_gdk_pixmap_and_mask): Remove.
+ (update_frame_tool_bar): Call xg_get_image_for_pixmap instead of
+ xg_get_gdk_pixmap_and_mask.
+
+ * xterm.h (struct x_display_info): Typo in comment fixed.
+
+2004-06-14 Juanma Barranquero <lektu@terra.es>
+
+ * dispextern.h (Vimage_types): Make it conditional on
+ HAVE_WINDOW_SYSTEM.
+
+ * image.c (Vimage_types): Move from xdisp.c.
+ (Vimage_type_cache): New variable.
+ (define_image_type): New argument indicating whether an image
+ library was loaded; cache loaded status and return t on success,
+ nil otherwise.
+ (CACHE_IMAGE_TYPE, ADD_IMAGE_TYPE): New macros.
+ (w32_delayed_load): New function to load an image library from a
+ list of possible filenames.
+ (init_xpm_functions, init_png_functions, init_jpeg_functions)
+ (init_tiff_functions, init_gif_functions): Use `w32_delayed_load'.
+ (CHECK_LIB_AVAILABLE): Call `define_image_library' with new argument.
+ (Finit_image_library): New function, extracted from `init_image'.
+ Try to initialize an image library on demand and cache whether we
+ were successful or not.
+ (syms_of_image): Initialize `Vimage_types' and
+ `Vimage_type_cache'. Add recognized image types to Vimage_types.
+ Export `init-image-library'.
+ (init_image): Remove initialization of all image types, except xbm
+ and pbm.
+
+ * xdisp.c (Vimage_types): Delete (moved to image.c).
+
+2004-06-14 Andreas Schwab <schwab@suse.de>
+
+ * minibuf.c (Ftry_completion, Fall_completions, Ftest_completion):
+ Avoid calling specbind when completion-regexp-list is empty.
+
+2004-06-13 Richard M. Stallman <rms@gnu.org>
+
+ * regex.h (CHAR_CLASS_MAX_LENGTH, re_wctype_t, re_wchar_t)
+ (re_wctype, re_iswctype, re_wctype_to_bit):
+ Non-function definitions moved here from regex.c.
+
+ * regex.c (re_wctype, re_iswctype): Function defs longer static.
+ (CHAR_CLASS_MAX_LENGTH, re_wctype_t, re_wchar_t)
+ (re_wctype, re_iswctype, re_wctype_to_bit):
+ Non-function definitions moved to regex.h.
+
+ * window.c (Fselect_window): Doc fix.
+
+ * syntax.c: Include regex.h.
+ (skip_chars): New arg HANDLE_ISO_CLASSES. Callers changed.
+ If requested, make a list of classes, then check the scanned
+ chars for membership in them.
+ (in_classes): New function.
+ Doc fix.
+
+ * keyboard.c (cmd_error): Don't call any_kboard_state
+ if inside a recursive edit level.
+
+2004-06-13 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * keyboard.c (command_loop): Call any_kboard_state before
+ command_loop_2 when at top level.
+
+2004-06-13 Andreas Schwab <schwab@suse.de>
+
+ * print.c (print_object): Always use %ld for printing EMACS_INT.
+
+ * keyboard.c (cancel_hourglass_unwind): Return a value.
+ (modify_event_symbol): Always use %ld for printing EMACS_INT.
+ (Fexecute_extended_command): Likewise.
+
+ * syntax.h (SYNTAX_ENTRY_FOLLOW_PARENT): Rename local variable to
+ avoid clashes.
+ (SYNTAX): Likewise.
+ (SYNTAX_WITH_FLAGS): Likewise.
+ (SYNTAX_MATCH): Likewise.
+
+ * syntax.c (char_quoted): Avoid warning about undefined operation.
+ (find_defun_start): Likewise.
+ (scan_lists): Likewise.
+ (INC_FROM): Likewise.
+ (scan_sexps_forward): Likewise.
+
+ * image.c: Include <ctype.h>.
+
+ * xfaces.c (face_attr_equal_p): Declare parameters.
+
+2004-06-13 Kenichi Handa <handa@m17n.org>
+
+ * ccl.c (CCL_READ_CHAR): If hit EOF, set REG to -1.
+
+2004-06-12 Matthew Mundell <matt@mundell.ukfsn.org>
+
+ * eval.c (Fdefun): Signal an error if NAME is not a symbol.
+
+2004-06-12 Kenichi Handa <handa@m17n.org>
+
+ * ccl.c (CCL_CALL_FOR_MAP_INSTRUCTION): Save eof_ic in
+ ccl_prog_stack_struct and update it.
+ (CCL_INVALID_CMD): If CCL_DEBUG is defined, call ccl_debug_hook.
+ (CCL_READ_CHAR): Get instruction counter from eof_ic, not from
+ ccl->eof_ic on EOF.
+ (ccl_debug_hook): New function.
+ (struct ccl_prog_stack): New member eof_ic.
+ (ccl_driver): Handle EOF in subrountine call correctly.
+
+2004-06-11 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (encode_coding_string): Check CODING_FINISH_INTERRUPT.
+
+2004-06-11 Kim F. Storm <storm@cua.dk>
+
+ * emacs.c (shut_down_emacs): Inhibit redisplay during shutdown.
+
+2004-06-11 Juanma Barranquero <lektu@terra.es>
+
+ * keyboard.c (Fposn_at_point): Doc fix.
+
+2004-06-11 David Kastrup <dak@gnu.org>
+
+ * search.c (match_limit): Don't flag an error if match-data
+ exceeding the allocated search_regs.num_regs gets requested, just
+ return Qnil.
+
+2004-06-08 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (push_named_merge_point): Return 0 when a cycle is detected.
+
+2004-06-07 Juanma Barranquero <lektu@terra.es>
+
+ * editfns.c (Fuser_login_name, Ffloat_time, Fencode_time)
+ (Fcurrent_time_string, Fcurrent_time_zone)
+ (Finsert_buffer_substring, Ftranspose_regions): Doc fixes.
+
+2004-06-07 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (struct named_merge_point): New type.
+ (push_named_merge_point): New function.
+ (merge_named_face): New function.
+ (merge_face_ref, face_at_buffer_position, face_at_string_position):
+ Use `merge_named_face'.
+ (merge_face_inheritance): Function removed.
+ (merge_face_ref): Rename from `merge_face_vector_with_property'.
+ Add new `err_msgs' and `named_merge_points' args. Return error
+ status. Only print error messages if ERR_MSGS is true. Don't try to
+ do :inherit attribute validation.
+ (merge_face_heights): Handle `unspecified' in both directions.
+ (merge_face_vectors): Rename `cycle_check' arg to `named_merge_points'.
+ Call `merge_face_ref' instead of `merge_face_inheritance'.
+ (Fdisplay_supports_face_attributes_p, Fface_attributes_as_vector)
+ (compute_char_face, face_at_buffer_position)
+ (face_at_string_position): Call `merge_face_ref' instead of
+ `merge_face_vector_with_property'.
+
+2004-06-07 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (find_safe_codings): Check NILP (safe_codings) only at
+ the necessary places.
+
+2004-06-07 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fdelete_process): Undo 2004-05-28 change.
+ Instead, call status_notify also for network process.
+ (status_message): Use process instead of status as arg.
+ Give messages "deleted" or "connection broken by remote peer" for
+ an exited network process.
+ (status_notify): Change call to status_message.
+ (read_process_output): Increase readmax to 4096. Do not increase
+ buffer size for datagram channels (default is now large enough).
+
+2004-06-06 Steven Tamm <tamm@Steven-Tamms-Computer.local>
+
+ * macfns.c (x_create_tip_frame): Fix Mac OS X 10.1 compilation
+ problem due to newly defined variable.
+
+2004-06-06 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (Fdisplay_supports_face_attributes_p): Give up
+ immediately if non-interactive or not initialized.
+
+2004-06-05 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (Fcompleting_read): Doc fix.
+
+2004-06-05 Andreas Schwab <schwab@suse.de>
+
+ * macfns.c (x_create_tip_frame): Fix declaration after statement.
+
+2004-06-05 Juanma Barranquero <lektu@terra.es>
+
+ * keymap.c (Fdescribe_vector): Fix docstring.
+ (Fkey_description, Fglobal_key_binding): Fix typo in docstring.
+
+2004-06-05 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (tty_supports_face_attributes_p): Make sure the specified
+ attributes have different values than the default face.
+
+2004-06-04 Eli Zaretskii <eliz@gnu.org>
+
+ * xfaces.c (x_supports_face_attributes_p): Make this function
+ conditional on HAVE_WINDOW_SYSTEM.
+ (Fdisplay_supports_face_attributes_p) [HAVE_WINDOW_SYSTEM]:
+ Don't call x_supports_face_attributes_p if it was not compiled in.
+
+2004-06-04 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (tty_supports_face_attributes_p): New function, mostly
+ from Ftty_supports_face_attributes_p.
+ (x_supports_face_attributes_p): New function.
+ (Ftty_supports_face_attributes_p): Function deleted.
+ (Fdisplay_supports_face_attributes_p): New function.
+ (syms_of_xfaces): Initialize Sdisplay_supports_face_attributes_p.
+ (face_attr_equal_p): New function.
+ (lface_equal_p): Use it.
+
+2004-06-03 Juanma Barranquero <lektu@terra.es>
+
+ * w32fns.c (Fx_display_grayscale_p, Fw32_send_sys_command)
+ (Vw32_color_map): Fix typo in docstring.
+ (Fx_create_frame, Fw32_find_bdf_fonts, Fx_show_tip)
+ (Fw32_unregister_hot_key, Fw32_reconstruct_hot_key):
+ Make argument names match their use in docstring.
+
+2004-06-02 Juanma Barranquero <lektu@terra.es>
+
+ Work around bugs/problems with MinGW builds of graphics libraries
+ called from MSVC builds of Emacs.
+
+ * image.c (lookup_image): Make pointer to img static.
+ (png_read_from_memory): Disable "global" optimization.
+
+2004-06-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eval.c (Fcondition_case): Fix usage. Simplify.
+
+ * mem-limits.h (EXCEEDS_LISP_PTR) [USE_LSB_TAG]: Never true.
+
+2004-05-29 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macfns.c: Don't include ccl.h.
+ [MAC_OSX]: Don't include QuickTime/QuickTime.h.
+ [!MAC_OSX]: Don't include alloca.h, Windows.h, Gestalt.h, or
+ TextUtils.h.
+ (Fx_create_frame): Sync with xfns.c. Initialize cursor descriptors.
+ (Fx_display_mm_height, Fx_display_mm_width): Calculate length from
+ display height/width.
+ (compute_tip_xy, Vx_max_tooltip_size): Declare.
+ (unwind_create_tip_frame, compute_tip_xy): New functions.
+ (x_create_tip_frame, Fx_show_tip, Fx_hide_tip): Sync with xfns.c.
+ (syms_of_macfns): Initialize Qcancel_timer, Vx_max_tooltip_size,
+ and last_show_tip_args.
+
+ * macgui.h [!MAC_OSX]: Include Gestalt.h.
+ (Cursor, No_Cursor): New defines.
+ [!TARGET_API_MAC_CARBON] (SetPortWindowPort): New compatibility macro.
+ [!TARGET_API_MAC_CARBON] (arrow_cursor): Declare.
+
+ * macmenu.c (mac_menu_show, mac_dialog): Use SetPortWindowPort.
+
+ * macterm.c: Don't include Gestalt.h.
+ (enum mouse_tracking_type, mouse_tracking_in_progress): Remove.
+ (XDrawLine, XClearArea, XClearWindow, mac_draw_bitmap)
+ (mac_set_clip_rectangle, mac_reset_clipping, XCreatePixmap)
+ (XFillRectangle, mac_draw_rectangle, mac_draw_string_common)
+ (mac_copy_area, mac_copy_area_with_mask, x_update_end)
+ (construct_mouse_click, XTmouse_position)
+ (x_scroll_bar_report_motion, x_calc_absolute_position)
+ (do_mouse_moved, do_zoom_window, mac_do_receive_drag)
+ (XTread_socket, make_mac_frame): Use SetPortWindowPort.
+ (note_mouse_movement): Clear the mouse face and reset the pointer
+ shape when the pointer goes outside the frame without grabbing.
+ (mac_front_window): New function.
+ (mac_window_to_frame): New macro.
+ (XTmouse_position, x_scroll_bar_report_motion, do_window_update)
+ (do_window_activate, do_window_deactivate, do_app_resume)
+ (do_app_suspend, do_mouse_moved, do_menu_choice, do_grow_window)
+ (do_zoom_window, mac_do_receive_drag, XTread_socket)
+ (mac_check_for_quit_char): Use mac_front_window and/or
+ mac_window_to_frame.
+ (x_scroll_bar_handle_click): Set `(PORTION . WHOLE)' part in a
+ scroll-bar click event.
+ (mac_define_frame_cursor): Change the pointer shape.
+ (x_free_frame_resources): Reset tip_window to NULL when it is
+ disposed of.
+ [!TARGET_API_MAC_CARBON] (arrow_cursor): New variable.
+ [!TARGET_API_MAC_CARBON] (do_init_managers): Initialize arrow_cursor.
+ (do_window_update): Don't do anything if the updated window is the
+ tooltip window.
+ (do_mouse_moved): Handle mouse movement events here (previously in
+ XTread_socket). Clear the mouse face if
+ dpyinfo->mouse_face_hidden is set.
+ (do_os_event, do_events): Remove (now in XTread_socket).
+ (XTread_socket): Immediately return if interrupt_input_blocked.
+ Loop until all the events in the queue are processed.
+ Rearrange codes for mouse grabbing. Add tooltip support. Include the
+ contents of do_os_event and do_events. Remove mouse movement
+ handling (now in do_mouse_moved). Add the case where
+ Vmouse_highlight has an integer value.
+ (NewMacWindow): Remove.
+ (make_mac_frame): Do what NewMacWindow previously did. Don't do
+ excess initializations.
+ (make_mac_terminal_frame): Previous initializations in
+ make_mac_frame are moved here.
+ (mac_initialize_display_info):
+ Initialize dpyinfo->mouse_face_overlay and dpyinfo->mouse_face_hidden.
+
+ * xdisp.c [MAC_OS] (No_Cursor): Remove variable.
+ (define_frame_cursor1): Don't treat HAVE_CARBON as a special case.
+
+2004-05-29 Richard M. Stallman <rms@gnu.org>
+
+ * lisp.h (truncate_undo_list): Update decl.
+
+ * alloc.c (undo_outer_limit): New variable.
+ (syms_of_alloc): Defvar it.
+ (Fgarbage_collect): Pass undo_outer_limit to truncate_undo_list.
+
+ * undo.c (truncate_undo_list): New arg LIMITSIZE.
+
+ * alloc.c (lisp_align_malloc): Check for base == 0
+ regardless of HAVE_POSIX_MEMALIGN.
+ Clean up HAVE_POSIX_MEMALIGN handling of `err'.
+
+2004-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c: Undo Kim's recent changes and fix the same bug differently.
+ (marker_blocks_pending_free): Remove.
+ (Fgarbage_collect): Sweep after cleaning up undo-lists.
+ Mark the undo lists after claning them up.
+ Don't free block in marker_blocks_pending_free.
+ (mark_buffer): Don't mark undo_list.
+ (gc_sweep): Sweep hash-tables and strings first.
+ Do free marker blocks that are empty.
+
+2004-05-28 Jim Blandy <jimb@redhat.com>
+
+ * regex.c (print_partial_compiled_pattern): Add missing 'break'
+ after 'case wordend'. For symbeg and symend, print to stderr,
+ like the other cases.
+
+2004-05-28 Noah Friedman <friedman@splode.com>
+
+ * process.c (Fdelete_process): Do not call remove_process.
+
+2004-05-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (struct backtrace): Remove.
+ (Fgarbage_collect): Use the new mark_backtrace.
+
+ * eval.c (mark_backtrace): New function.
+
+ * minibuf.c (run_exit_minibuf_hook): New function.
+ (read_minibuf_unwind): Don't run exit-minibuffer-hook any more.
+ (read_minibuf): Use separate unwind handler to run exit-minibuf-hook.
+
+2004-05-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (back_to_previous_visible_line_start): Skip backwards
+ over display properties, e.g. images, that replace buffer text.
+
+2004-05-25 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (marker_blocks_pending_free): New var.
+ (gc_sweep): Store free marker blocks on that list.
+ (Fgarbage_collect): Free them after undo-list cleanup.
+
+ * process.c (wait_reading_process_input): Check connect_wait_mask
+ before actually accepting connection in case it has already been
+ accepted due to recursion.
+
+2004-05-23 K,Aa(Broly L$,1 q(Brentey <lorentey@elte.hu>
+
+ * coding.c (Fset_safe_terminal_coding_system_internal):
+ Set suppress_error in safe_terminal_coding, not terminal_coding.
+
+2004-05-22 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (Fmake_string): Doc fix.
+
+ * buffer.c (clone_per_buffer_values): Copy the alist of local vars,
+ and the alist pairs too.
+
+ * casefiddle.c (casify_object): Return OBJ unchanged if not real char.
+
+ * emacs.c (main): Update copyright year.
+
+ * fileio.c (Fread_file_name): Expand DIR if not absolute.
+
+ * insdel.c (del_range_2, replace_range): Don't write an anchor
+ if the gap is empty.
+
+ * xdisp.c (try_scrolling): If scroll-up-aggressively or
+ scroll-down-aggressively is small but positive, put point
+ near the screen edge.
+
+2004-05-22 Juanma Barranquero <lektu@terra.es>
+
+ * keymap.c (Fdefine_key): Doc fix.
+
+2004-05-22 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (struct backtrace): Add debug_on_exit member.
+ (Fgarbage_collect): Clear out buffer undo_list markers after gc_sweep.
+ Identify those markers as Lisp_Misc_Free objects. Clear car and cdr of
+ the removed cons cells.
+ (mark_object): Undo previous change - disallow Lisp_Misc_Free objects.
+ (gc_sweep): Clear cons_blocks before sweeping strings, so we don't have
+ any cons cells pointing to unallocated stings.
+ Do not lisp_free any marker blocks, as there may still be pointers
+ to them from buffer undo lists at this stage of GC.
+
+ * keyboard.c (struct backtrace): Add debug_on_exit member.
+ (Fcommand_execute): Clear it.
+
+2004-05-20 Luc Teirlinck <teirllm@auburn.edu>
+
+ * intervals.c (lookup_char_property): Do not prematurely return nil.
+
+2004-05-19 Jim Blandy <jimb@redhat.com>
+
+ Add support for new '\_<' and '\_>' regexp operators, matching the
+ beginning and end of symbols.
+
+ * regex.c (enum syntaxcode): Add Ssymbol.
+ (init_syntax_once): Set the syntax for '_' to Ssymbol, not Sword.
+ (re_opcode_t): New opcodes `symbeg' and `symend'.
+ (print_partial_compiled_pattern): Print the new opcodes properly.
+ (regex_compile): Parse the new operators.
+ (analyse_first): Skip sym(beg|end) (they match only the empty string).
+ (mutually_exclusive_p): `symend' is mutually exclusive with \s_ and
+ \sw; `symbeg' is mutually exclusive with \S_ and \Sw.
+ (re_match_2_internal): Match symbeg and symend.
+
+ * search.c (trivial_regexp_p): \_ is no longer a trivial regexp.
+
+2004-05-19 Kim F. Storm <storm@cua.dk>
+
+ * .gdbinit (xsymbol): Fix last change.
+
+2004-05-18 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * .gdbinit (xprintstr): New fun.
+ (xstring, xprintsym): Use it.
+
+ * w32proc.c (create_child): Use INTMASK.
+
+ * alloc.c (Fgarbage_collect): Do all the marking before flushing
+ unmarked elements of the undo list.
+
+2004-05-18 David Ponce <david@dponce.com>
+
+ * print.c (print): Reset print_depth before to call print_object.
+
+2004-05-18 Jason Rumney <jasonr@gnu.org>
+
+ * w32console.c: Prefix RIF functions with w32con_ to avoid
+ namespace clash with functions in term.c and w32term.c.
+
+ * w32menu.c (add_menu_item, w32_menu_display_help)
+ [USE_LISP_UNION_TYPE]: Cast from Lisp_Object using i member.
+
+ * w32term.h (display_x_get_resource, vga_stdcolor_name): Add prototype.
+
+2004-05-18 Eli Zaretskii <eliz@gnu.org>
+
+ * lisp.h (DECL_ALIGN): Remove restriction on MS-DOS systems.
+
+ * msdos.c (syms_of_msdos): Initialize dos-unsupported-char-glyph
+ with make_number.
+ (IT_write_glyphs): Extract glyph from dos-unsupported-char-glyph
+ with XINT.
+
+2004-05-18 Kim F. Storm <storm@cua.dk>
+
+ * blockinput.h (INPUT_BLOCKED_P): New macros.
+
+ * keyboard.c (Frecursive_edit): Return immediately if input blocked.
+ (Ftop_level): Unblock input if blocked.
+
+ * buffer.h (GET_OVERLAYS_AT): New macro.
+ * msdos.c (IT_note_mouse_highlight): Use it.
+ * textprop.c (get_char_property_and_overlay): Use it.
+ * xdisp.c (next_overlay_change, note_mouse_highlight): Use it.
+ * xfaces.c (face_at_buffer_position): Use it.
+
+ * print.c (print_object): Increase buf size.
+
+2004-05-17 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fw32_register_hot_key, Fw32_unregister_hot_key)
+ (Fw32_toggle_lock_key) [USE_LISP_UNION_TYPE]: Cast from
+ Lisp_Object using i member.
+ (w32_quit_key): Rename from Vw32_quit_key, and make an int.
+ (syms_of_w32fns, globals_of_w32fns): Use Lisp_Object and int
+ consistently.
+
+ * w32proc.c (create_child): Use make_number instead of masking pid.
+
+ * w32fns.c (w32_color_map_lookup): Return a Lisp_Object.
+ (x_to_w32_charset, w32_to_x_charset, w32_to_all_x_charsets):
+ Use EQ to compare Lisp_Objects.
+ (w32_parse_hot_key): Use int for lisp_modifiers consistently.
+
+ * w32term.c (w32_num_mouse_buttons): Rename from
+ Vw32_num_mouse_buttons and make it an int.
+
+ * w32.c (init_environment): Use it.
+
+ * w32fns.c (w32_wnd_proc): Likewise.
+
+ * w32proc.c (w32_pipe_read_delay): Rename from
+ Vw32_pipe_read_delay and make it an int.
+
+ * w32.c (_sys_read_ahead): Use it.
+
+ * lisp.h (egetenv) [USE_CRT_DLL]: Remove condition.
+
+ * w32proc.c (create_child) [USE_LSB_TAG]: Don't try to mask pid.
+
+ * w32inevt.c (w32_console_mouse_position, do_mouse_event)
+ (key_event): Don't mix Lisp_Object and int.
+
+ * w32heap.c (init_heap) [USE_LSB_TAG]: Don't check heap location.
+
+ * keyboard.c (kbd_buffer_get_event): Don't use event->code and
+ modifiers in language change event.
+
+2004-05-17 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (mark_object): Ignore Lisp_Misc_Free objects.
+ Such objects may be freed markers which still exist on an undo list.
+
+2004-05-16 Juanma Barranquero <lektu@terra.es>
+
+ * data.c (Fset_default): Make argument names match their use in
+ docstring.
+
+2004-05-15 Andreas Schwab <schwab@suse.de>
+
+ * emacs.c (gdb_array_mark_flag): Define.
+ * .gdbinit: Mask off gdb_array_mark_flag from vector sizes.
+
+2004-05-15 Eli Zaretskii <eliz@gnu.org>
+
+ * lisp.h (DECL_ALIGN) [MSDOS]: Don't define DECL_ALIGN to use
+ __attribute__((__aligned__)), so that USE_LSB_TAG would not become
+ defined for the MS-DOS build.
+
+2004-05-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * w32fns.c (Fw32_define_rgb_color): Avoid XSET.
+
+2004-05-14 Kenichi Handa <handa@m17n.org>
+
+ * ccl.c (Fccl_execute_on_string): Fix setting elements of STATUS.
+
+2004-05-14 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * lisp.h (Vx_resource_name, Vx_resource_class): Move from xfns.c
+ section to frame.c section.
+ (Fxw_display_color_p, Fx_file_dialog): Declare if
+ HAVE_WINDOW_SYSTEM defined.
+
+ * macfns.c (Fx_create_frame): Fix int/Lisp_Object mixup.
+
+ * macmenu.c (set_frame_menubar): Use NILP to test a lisp value.
+
+ * macterm.c (mac_get_emulated_btn, mac_event_to_emacs_modifiers)
+ (mac_get_mouse_btn): Use NILP and EQ to test/compare lisp values.
+ (XTread_socket): Fix int/Lisp_Object mixup.
+ (mac_check_for_quit_char): Fix pointer/Lisp_Object mixup.
+
+ * macterm.h (struct frame, struct face, struct image)
+ (display_x_get_resource, Fx_display_color_p)
+ (Fx_display_grayscale_p, Fx_display_planes, x_free_gcs):
+ Add prototypes.
+
+2004-05-14 Kim F. Storm <storm@cua.dk>
+
+ * process.c (wait_reading_process_input): Make reentrant.
+ Make Available and Connecting non-static. Save and restore value
+ of waiting_for_user_input_p.
+
+2004-05-13 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (mark_kboards): Don't mark x and y members
+ that are overloaded in selection request events.
+
+2004-05-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp.h (USE_LSB_TAG): Make it the default when it is known to work.
+
+2004-05-13 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * window.c (Fdisplay_buffer, Fsplit_window)
+ (split-height-threshold): Doc fix.
+
+2004-05-13 Juanma Barranquero <lektu@terra.es>
+
+ * xfaces.c (Ftty_supports_face_attributes_p)
+ (Finternal_copy_lisp_face): Fix typo in docstring.
+ (Finternal_get_lisp_face_attribute): Fix docstring.
+
+2004-05-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (syms_of_xfns): Provide x-toolkit also for GTK.
+
+2004-05-11 Steven Tamm <steventamm@mac.com>
+
+ * macfns.c (Fx_create_frame): Default to using tool-bar by
+ setting tool-bar-lines to 1 in default-frame-alist.
+
+2004-05-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * image.c (xpm_scan, xpm_make_color_table_v, xpm_put_color_table_v)
+ (xpm_get_color_table_v, xpm_make_color_table_h)
+ (xpm_put_color_table_h, xpm_get_color_table_h)
+ (xpm_str_to_color_key, xpm_load_image, xpm_load)
+ (syms_of_image): Support XPM on Carbon Emacs. Does not
+ depend on libXpm, but only supports XPM version 3 without extensions.
+
+2004-05-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (x_flush, XTframe_up_to_date): Use FRAME_MAC_P
+ instead of FRAME_X_P.
+
+2004-05-11 Kim F. Storm <storm@cua.dk>
+
+ * process.c (read_process_output): Grow decoding_buf when needed;
+ this could cause a crash in allocate_string and compact_small_strings.
+
+2004-04-29 Jim Blandy <jimb@redhat.com>
+
+ * regex.c (mutually_exclusive_p): In 'case wordbeg', compare op2
+ against proper opcode.
+
+2004-05-10 Juanma Barranquero <lektu@terra.es>
+
+ * process.c (Fstart_process): Fix docstring.
+
+ * charset.c (Fget_unused_iso_final_char): Fix typos in docstring.
+ (Fchar_bytes, Fchar_width, Fstring_width, Fchar_direction)
+ (Fsplit_char, Fchar_charset): Make argument names match their use
+ in docstring.
+
+2004-05-10 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (print_preprocess): Use being_printed, loop_count and
+ halftail to detect overdeep nesting and cyclic cdr chains.
+
+2004-05-10 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h (Fmake_symbolic_link): Declare.
+
+ * fileio.c (Frename_file): Remove extra argument in call to
+ Fmake_symbolic_link.
+
+2004-05-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (calc_line_height_property): Use string position when
+ object is a string.
+
+2004-05-10 Kenichi Handa <handa@m17n.org>
+
+ * print.c (temp_output_buffer_setup): Bind inhibit-read-only and
+ inhibit-modification-hooks to t temporarily before calling
+ Ferase_buffer.
+
+ * xfns.c (x_create_tip_frame): Bind inhibit-read-only and
+ inhibit-modification-hooks to t temporarily before calling
+ Ferase_buffer.
+
+ * w32fns.c (x_create_tip_frame): Bind inhibit-read-only and
+ inhibit-modification-hooks to t temporarily before calling
+ Ferase_buffer.
+
+ * fns.c (count_combining): Delete it.
+ (concat): Don't check combining bytes.
+
+2004-05-09 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Vw32_ansi_code_page): New Lisp variable.
+ (globals_of_w32fns): Set it.
+
+2004-05-09 Piet van Oostrum <piet@cs.uu.nl>
+
+ * data.c (Fquo): Simplify.
+
+2004-05-08 Peter Whaite <emacs@whaite.ca> (tiny change)
+
+ * data.c (Fquo): If any argument is float, do the computation in
+ floating point.
+
+2004-05-08 Juanma Barranquero <lektu@terra.es>
+
+ * process.c (Fwaiting_for_user_input_p, Fmake_network_process)
+ (Fset_process_query_on_exit_flag, Vprocess_adaptive_read_buffering):
+ Fix spelling of Emacs on docstring.
+ (Fset_process_coding_system, Fprocess_coding_system)
+ (Fset_process_filter_multibyte, Fprocess_filter_multibyte_p):
+ Make argument names match their use in docstring.
+ (Fprocess_id, Fprocess_query_on_exit_flag, Finterrupt_process):
+ Fix docstring.
+
+ * editfns.c (Finsert_buffer_substring): Make argument names match their
+ use in docstring.
+
+ * syntax.c (Fmodify_syntax_entry): Fix docstring.
+
+2004-05-07 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (mac_check_for_quit_char): Adding BLOCK_INPUT
+ around call to ReceiveEvent to avoid certain crashes.
+
+2004-05-07 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (mac_draw_line_to_pixmap, XCreatePixmapFromBitmapData)
+ (mac_fill_rectangle_to_pixmap, mac_draw_rectangle_to_pixmap)
+ (mac_copy_area_to_pixmap, mac_copy_area_with_mask_to_pixmap):
+ Save/restore the current graphics port and device handle when
+ drawing into an offscreen graphics world.
+
+ * image.c [MAC_OS] (XPutPixel, XGetPixel, image_load_qt_1)
+ (gif_load): Likewise.
+
+2004-05-07 Juanma Barranquero <lektu@terra.es>
+
+ * window.c (Fset_window_buffer): Fix docstring.
+
+2004-05-06 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * emacs.c (main) [VMS]: Fix var ref.
+
+2004-05-06 Romain Francoise <romain@orebokech.com>
+
+ * data.c (Fsetq_default): Fix docstring.
+
+2004-05-06 Jason Rumney <jasonr@gnu.org>
+
+ * image.c (Display) [HAVE_NTGUI]: Redefine while loading xpm.h
+ to avoid name clash.
+
+2004-05-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * fileio.c (barf_or_query_if_file_exists): Use lstat.
+ (Frename_file): Handle renaming of symlinks across file systems.
+ (Frename_file): Put symlink handling inside #ifdef S_IFLNK.
+
+2004-05-04 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (Qtotal): New var.
+ (syms_of_xdisp): Intern and staticpro it.
+ (calc_line_height_property): New arg total. Set it if
+ line-spacing property has format (total . VALUE).
+ (x_produce_glyphs): Ignore line-spacing if line-height is 0.
+ Handle total line-spacing property.
+
+2004-05-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_update_scrollbar_pos): Call XClearWindow to clear
+ "under" scroll bar when size/position changes.
+
+2004-05-03 Jason Rumney <jasonr@gnu.org>
+
+ * makefile.nt: Remove.
+
+2004-05-02 Eli Zaretskii <eliz@gnu.org>
+
+ * syntax.h (SET_RAW_SYNTAX_ENTRY, SYNTAX_ENTRY_INT):
+ Avoid compiler warnings.
+
+ * Makefile.in (region-cache.o): Depend on config.h.
+
+2004-05-02 Romain Francoise <romain@orebokech.com>
+
+ * indent.c (compute_motion): Save vpos in prev_vpos when dealing
+ with continuation lines, too.
+
+2004-05-02 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * syssignal.h (init_signals): Move decl outside `#ifdef POSIX_SIGNALS'.
+
+2004-05-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xdisp.c (calc_line_height_property): YAILOM (yet another
+ int/Lisp_Object mixup).
+
+2004-05-01 Eli Zaretskii <eliz@gnu.org>
+
+ * msdos.c (top-level): Add "#pragma pack(0)" after <dir.h>, to
+ undo bad effect of pack(4) in some versions of system headers.
+
+2004-05-01 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_draw_hollow_cursor): Sync with xterm.c.
+
+2004-04-30 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (syms_of_buffer) <line-spacing>: Allow float value.
+ (syms_of_buffer) <cursor-type>: Doc fix.
+
+ * dispextern.h (struct it): Remove member use_default_face.
+ Add members override_ascent, override_descent, override_boff.
+
+ * xdisp.c (init_iterator): Handle line-spacing float value.
+ Initialize override_ascent member.
+ (append_space_for_newline): Reset override_ascent.
+ Remove use_default_face.
+ (calc_line_height_property): New function to calculate value of
+ line-height and line-spacing properties. Look at overlays, too.
+ Set override_ascent, override_descent, override_boff members when
+ using another face than the current face. Float values are now
+ relative to the frame default font, by default; accept a cons
+ of ratio and face name to specify value relative to a specific face.
+ (x_produce_glyphs): Use calc_line_height_property.
+ Use override_ascent etc. when set to handle different face heights.
+ A negative line-spacing property value is interpreted as a total
+ line height, rather than inter-line spacing.
+ (note_mouse_highlight): Allocate room for 40 overlays initially.
+
+2004-04-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * data.c (Fsubr_name): New fun.
+ (syms_of_data): Defsubr it.
+
+2004-04-29 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (null_glyph_slice): New var.
+ (append_glyph, append_composite_glyph, append_stretch_glyph):
+ Use it to initialize glyph slice.
+
+2004-04-27 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xdisp.c (x_produce_glyphs): Fix the proverbial int/Lisp_Object mixup.
+ (on_hot_spot_p): Make sure we always return a value.
+ (Flookup_image_map): Remove unused var ix and iy.
+ (note_mode_line_or_margin_highlight): Remove unused var `image'.
+
+2004-04-27 Eli Zaretskii <eliz@gnu.org>
+
+ * msdos.c (init_environment): If one of the TMP... environment
+ variables is set to a drive letter without a trailing slash,
+ append a slash.
+
+2004-04-27 Matthew Mundell <matt@mundell.ukfsn.org>
+
+ * editfns.c (lisp_time_argument): Provide externally.
+
+ * fileio.c (Fset_file_times): New function.
+ (syms_of_fileio): Intern and staticpro it.
+
+2004-04-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (x_produce_glyphs): Fix last change; handle newline in
+ header line strings.
+
+ * dispextern.h (struct it): New member use_default_face.
+
+ * xdisp.c (Qline_height): New variable.
+ (syms_of_xdisp): Intern and staticpro it.
+ (append_space_for_newline): Partially undo 2004-04-25 change;
+ add default_face_p arg, and restore callers.
+ Clear it->use_default_face after use.
+ (x_produce_glyphs): Set default font for ascii char if
+ it->use_default_font is set. Change line-spacing property to set
+ just extra line spacing. Handle new line-height property.
+
+2004-04-26 Andreas Schwab <schwab@suse.de>
+
+ * print.c (print_object): Print non-ascii characters in bool
+ vector representation as octal escapes.
+
+ * lisp.h (BOOL_VECTOR_BITS_PER_CHAR): Define.
+ * print.c (print_object): Use it instead of BITS_PER_CHAR for
+ bool vectors.
+ * lread.c (read1): Likewise.
+ * alloc.c (Fmake_bool_vector): Likewise.
+ * data.c (Faref, Faset): Likewise.
+ * fns.c (Fcopy_sequence, concat, internal_equal, Ffillarray)
+ (mapcar1): Likewise.
+
+2004-04-26 Steven Tamm <tamm@Steven-Tamms-Computer.local>
+
+ * lread.c (init_lread): Fix typo in HAVE_CARBON test logic.
+
+2004-04-26 Miles Bader <miles@gnu.org>
+
+ * lisp.h (CYCLE_CHECK): Macro moved from xfaces.c.
+
+2004-04-26 Juanma Barranquero <lektu@terra.es>
+
+ * buffer.c (Fpop_to_buffer): Fix docstring.
+
+2004-04-26 Steven Tamm <steventamm@mac.com>
+
+ * lread.c (init_lread): Don't display missing lisp directory
+ warnings with Carbon Emacs because self-contained bundled Emacs
+ may be built without correct installation path.
+
+2004-04-25 Kim F. Storm <storm@cua.dk>
+
+ * macterm.c (x_draw_hollow_cursor): Fix height of box for narrow lines.
+
+ * xterm.c (x_draw_hollow_cursor): Fix height of box for narrow lines.
+
+ * xdisp.c (append_space_for_newline): Rename from append_space.
+ Remove DEFAULT_FACE_P arg; always use current face. Callers changed.
+ (x_produce_glyphs): Handle line-spacing property on newline char.
+ If value is t, adjust ascent and descent to fit current row height.
+ If value is an integer or float, set extra_line_spacing to integer
+ value, or to float value x current line height.
+
+2004-04-23 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (Finternal_char_font): If POSITION is nil, return
+ font for displaying CH with the default face.
+
+2004-04-23 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in: Add "-*- makefile -*-" mode tag.
+
+2004-04-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp.h (XINT) [EXPLICIT_SIGN_EXTEND && !NO_UNION_TYPE]:
+ Don't make assumptions about the relative place of i and val.
+ (EQ) [!NO_UNION_TYPE]: Don't forget to check the type match as well.
+
+2004-04-21 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct glyph_slice): New struct.
+ (struct glyph): New member slice.
+ (GLYPH_SLICE_EQUAL_P): New macro.
+ (GLYPH_EQUAL_P): Use it.
+ (struct glyph_string): New member slice.
+ (struct it_slice): New struct.
+ (struct it): New member slice, add member to stack too.
+ New member constrain_row_ascent_descent_p.
+ (image_ascent): Add prototype.
+
+ * dispnew.c (buffer_posn_from_coords): Return full image width
+ and height even for image slices (posn is relative to full image).
+ (marginal_area_string): Adjust x0,y0 for image slice.
+
+ * image.c (image_ascent): Add slice arg; calculate ascent for
+ image slice (or full image).
+
+ * keyboard.c (Fposn_at_x_y, Fposn_at_point): New defuns.
+ (syms_of_keyboard): Defsubr them.
+
+ * lisp.h (pos_visible_p): Fix prototype.
+
+ * macterm.c (x_draw_relief_rect): Add top_p and bot_p args.
+ (x_draw_glyph_string_box): Fix call to x_draw_relief_rect.
+ (x_draw_image_foreground, x_draw_image_relief)
+ (x_draw_image_foreground_1, x_draw_image_glyph_string):
+ Draw sliced images.
+
+ * w32term.c (w32_draw_relief_rect): Add top_p and bot_p args.
+ (x_draw_glyph_string_box): Fix call to x_draw_relief_rect.
+ (x_draw_image_foreground, x_draw_image_relief)
+ (w32_draw_image_foreground_1, x_draw_image_glyph_string):
+ Draw sliced images.
+
+ * w32term.h (image_ascent): Remove prototype.
+
+ * window.c (Fpos_visible_in_window_p): Return pixel position if
+ PARTIALLY arg is non-nil. Simplify. Doc fix.
+ (Fwindow_vscroll, Fset_window_vscroll): Add optional PIXEL_P arg
+ to return/set vscroll in pixels.
+
+ * window.h (Fwindow_vscroll, Fset_window_vscroll): Fix EXFUN.
+
+ * xdisp.c (Qslice): New variable.
+ (syms_of_xdisp): Intern and staticpro it.
+ (pos_visible_p): Return pixel position in new x and y args.
+ (init_iterator): Reset it->slice info.
+ (handle_display_prop): Parse (slice ...) property.
+ (push_it, pop_it): Save/restore slice info.
+ (make_cursor_line_fully_visible): Fix 2004-04-14 change. Do not
+ force repositioning of tall row if window is vscrolled, as that
+ would reset vscroll.
+ (append_space): Set it->constrain_row_ascent_descent_p to avoid
+ increasing row height if row is non-empty.
+ (fill_image_glyph_string): Copy slice info.
+ (take_vertical_position_into_account): Simplify.
+ (produce_image_glyph): Handle iterator slice info, setup glyph
+ slice info. Do not force minimum line height.
+ (x_produce_glyphs): If it->constrain_row_ascent_descent_p is set,
+ do not increase height (ascent/descent) of non-empty row when
+ adding normal character glyph; instead reduce glyph ascent/descent
+ appropriately; if row is higher than current glyph, adjust glyph
+ descent/ascent to reposition glyph within the existing row.
+ Likewise, when char is newline, only set ascent/descent if row is
+ currently empty.
+ (note_mouse_highlight): Handle hotspots with sliced image.
+
+ * xterm.c (x_draw_relief_rect): Add top_p and bot_p args.
+ (x_draw_glyph_string_box): Fix call to x_draw_relief_rect.
+ (x_draw_image_foreground, x_draw_image_relief)
+ (x_draw_image_foreground_1, x_draw_image_glyph_string):
+ Draw sliced images.
+
+ * xterm.h (image_ascent): Remove prototype.
+
+2004-04-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (Fkey_description): Fix the usual int/Lisp_Object mixup.
+
+2004-04-20 John Paul Wallington <jpw@gnu.org>
+
+ * fns.c (Fassoc, Feql): Fix indentation.
+
+ * fontset.c (regularize_fontname): Rename from regulalize_fontname.
+
+2004-04-19 John Paul Wallington <jpw@gnu.org>
+
+ * fns.c (Feql): New function.
+ (syms_of_fns): Defsubr it.
+
+2004-04-18 Jason Rumney <jasonr@gnu.org>
+
+ * w32select.c (Fw32_set_clipboard_data): Get sequence number
+ after closing the clipboard.
+
+2004-04-16 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.c (Fbuffer_base_buffer): Doc fix.
+
+2004-04-17 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (Fkey_description): Add optional PREFIX arg.
+ Combine prefix with KEYS to make up the full key sequence to describe.
+ Correlate meta_prefix_char and following (simple) key to describe
+ as meta modifier. All callers changed.
+ (describe_map): Rename arg `keys' to `prefix'. Remove local
+ `elt_prefix' var. Use Fkey_description with prefix instead of
+ elt_prefix combined with Fsingle_key_description.
+ (describe_vector): Declare static. Replace arg `elt_prefix' with
+ `prefix'. Add KEYMAP_P arg. Add local var `elt_prefix'; use it
+ if !KEYMAP_P. Use Fkey_description with prefix instead of
+ Fsingle_key_description.
+
+ * keymap.h (Fkey_description): Fix prototype.
+ (describe_vector): Remove prototype.
+
+ * xdisp.c (update_overlay_arrows): Fix handling of up_to_date < 0.
+
+ * image.c (PNG_BG_COLOR_SHIFT): Remove.
+ (png_load): Fix calculation of transparent background color on X
+ and W32 platforms.
+
+2004-04-16 Juanma Barranquero <lektu@terra.es>
+
+ * xdisp.c (try_scrolling): Make sure `scroll-conservatively' is
+ not too large before computing how much to scroll.
+
+2004-04-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * dired.c (Ffile_attributes): Don't pass extra nil arg to file-handler.
+
+2004-04-14 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fileio.c (Fverify_visited_file_modtime, Fvisited_file_modtime):
+ Add hyperlink to Elisp manual to the docstring.
+
+2004-04-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * callint.c (fix_command): Use XDCR.
+
+2004-04-14 Nick Roberts <nick@nick.uklinux.net>
+
+ * window.c (Fget_lru_window): Doc fix.
+
+2004-04-14 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Fformat): Fix allocation size of precision array.
+
+ * dispnew.c (update_window): Only set changed_p if
+ scrolling_window actually did scroll.
+ (scrolling_window): Only return 1 if we actually did scroll.
+
+ * xdisp.c (get_glyph_string_clip_rect): Fix reduction of cursor
+ height to glyph height when cursor row is not fully visible.
+ (make_cursor_line_fully_visible): Add FORCE_P arg to return
+ failure in case row is higher than window. Callers changed.
+ (try_scrolling): Fix loop in scrolling if last_line_misfit (from Gerd).
+ Try to scroll partially visible, higher-than-window cursor row.
+ (redisplay_window): Always try to scroll partially visible,
+ higher-than-window cursor row - both initially and again with
+ centering_position = 0.
+ Clear desired matrix before retrying with centering_position = 0.
+
+2004-04-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * syntax.c (scan_lists): Simplify backward string scan.
+ Fix off-by-one boundary check for string and comment fences.
+
+2004-04-13 Joe Buehler <jbuehler@hekimian.com>
+
+ * sheap.c, unexcw.c: New files.
+
+2004-04-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.c (Fmake_indirect_buffer): Throw an error if the intended
+ base buffer has been killed. Correct the error message if the
+ base buffer does not exist.
+
+2004-04-12 Joe Buehler <jbuehler@hekimian.com>
+
+ * s/cygwin.h: Changes for Cygwin unexec() support, changes in
+ Cygwin itself. Add support for Xaw3d scrollbars.
+
+ * puresize.h: Set up PURE_P() for Cygwin unexec() support.
+
+ * lastfile.c: Define my_endbss[] for Cygwin unexec() support.
+
+ * gmalloc.c (__default_morecore): Use bss_sbrk(), not __sbrk(),
+ before Cygwin unexec.
+
+ * Makefile.in: Link changes for Cygwin unexec() support.
+
+2004-04-12 Andreas Schwab <schwab@suse.de>
+
+ * buffer.c (Fmake_indirect_buffer): Check that NAME is a string.
+
+2004-04-11 Luc Teirlinck <teirllm@auburn.edu>
+
+ * buffer.c (Fgenerate_new_buffer_name): Return NAME argument if
+ IGNORE argument equals NAME. Doc fix.
+
+2004-04-11 Masatake YAMATO <jet@gyve.org>
+
+ * buffer.c (fix_start_end_in_overlays): Make overlays
+ empty if they are backwards.
+
+2004-04-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * xfaces.c (face_color_supported_p): Fix compilation without X11.
+
+2004-04-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * doc.c (Fsnarf_documentation): Ignore new file name entries.
+
+2004-04-06 Kim F. Storm <storm@cua.dk>
+
+ * msdos.c (clear_mouse_face): Only clear mouse highlight if not hidden.
+ (dos_rawgetc): Set mouse_face_hidden after clearing highlight.
+
+ * w32term.c (w32_read_socket): Set mouse_face_hidden after
+ clearing highlight.
+
+ * xdisp.c (clear_mouse_face): Only clear mouse highlight if not hidden.
+
+ * xterm.c (handle_one_xevent): Set mouse_face_hidden after
+ clearing highlight.
+
+ * indent.c (vmotion): Do not reserve one column for continuation
+ marks on window frames.
+
+2004-04-04 Eli Zaretskii <eliz@gnu.org>
+
+ * charset.h (SINGLE_BYTE_CHAR_P): Fix macro to avoid warnings
+ from GCC.
+
+2004-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * .gdbinit-union: Remove.
+
+ * .gdbinit: Make it work for USE_LSB_TAG and !NO_LISP_UNION.
+ (xgetptr, xgetint, xgettype): New funs. Use them everywhere.
+ ($nonvalbits): Remove.
+ ($valmask): Set it by calling xreload to avoid redundancy.
+
+ * emacs.c (gdb_use_union, gdb_use_lsb): New vars.
+ (gdb_emacs_intbits): Remove.
+
+2004-03-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * data.c (Fbyteorder): Make test work even if unsigned is not 4 bytes.
+
+2004-03-30 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Fformat): Fix initialization of the array info.
+
+2004-03-30 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (x_mouse_click_focus_ignore_position): New var.
+ (syms_of_xterm): DEFVAR_BOOL it.
+ (ignore_next_mouse_click_timeout): New var.
+ (handle_one_xevent): Clear it on KeyPress, set it on EnterNotify.
+ Use it to filter mouse clicks following focus event.
+
+2004-03-29 David Ponce <david@dponce.com>
+
+ * callint.c (Fcall_interactively): Fix last change.
+
+2004-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eval.c (Fcommandp): Simplify.
+
+ * data.c (Finteractive_form): Rename from Fsubr_interactive_form.
+ Extend to handle all kinds of functions.
+
+ * lisp.h (Finteractive_form): Declare.
+
+ * callint.c (Fcall_interactively): Use it.
+
+2004-03-26 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (syms_of_xdisp): Include `void-variable' in list_of_error
+ to catch errors in calc_pixel_width_or_height during redisplay.
+
+2004-03-26 Masatake YAMATO <jet@gyve.org>
+
+ * buffer.c (fix_start_end_in_overlays): Rename fix_overlays_in_range.
+
+ * lisp.h (fix_start_end_in_overlays): Likewise.
+
+ * insdel.c (adjust_markers_for_insert): Call fix_start_end_in_overlays.
+
+ * editfns.c (Ftranspose_regions): Likewise.
+
+2004-03-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Do not pass key press events to GTK.
+
+2004-03-19 Richard M. Stallman <rms@gnu.org>
+
+ * s/sol2-6.h: Delete previous change.
+
+2004-03-19 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (move_it_in_display_line_to): Fix MOVE_TO_POS case when
+ to_charpos corresponds to newline in right fringe. Use local
+ BUFFER_POS_REACHED_P macro.
+
+2004-03-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xdisp.c (calc_pixel_width_or_height): Add ifdef HAVE_WINDOW_SYSTEM
+ to compile on non-window system.
+
+2004-03-19 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (calc_pixel_width_or_height): Add prototype.
+
+ * image.c (Qcenter): Move to xdisp.c.
+
+ * xdisp.c (Qcenter): Declare here.
+ (syms_of_xdisp): Intern and staticpro it.
+ (handle_single_display_prop): Allow space display property on all
+ platforms.
+ (display_mode_line): Set mode_line_p before displaying line.
+ (calc_pixel_width_or_height): Declare extern. Add separate :align-to
+ handling. Remove complex cases for fringes and scroll-bars.
+ Add left, right, and center alignment positions. Add text (area)
+ width/height. Return width or height for image specs.
+ (produce_stretch_glyph): Improve handling of :align-to. Is now
+ relative to left of text area by default, but other base offsets
+ can be specified -- also for text lines.
+
+ * term.c (produce_glyphs): Handle IT_STRETCH.
+ (produce_stretch_glyph): New function to handle space width and
+ align-to display properties on non-window systems.
+
+2004-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * fileio.c (Fread_file_name): Set completion-ignore-case for
+ case-insensitive systems.
+
+2004-03-14 Masatake YAMATO <jet@gyve.org>
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Accept HEADER_LINE
+ when keymap and cursor are setup.
+
+2004-03-14 Steven Tamm <steventamm@mac.com>
+
+ * Makefile.in (XMENU_OBJ) [HAVE_CARBON]: Do not include xmenu.o.
+
+2004-03-14 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (x_find_image_file): Add prototype.
+
+ * image.c (x_find_image_file): Make extern.
+
+ * xfns.c (x_find_image_file): Remove prototype.
+
+2004-03-13 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (XMENU_OBJ): Include xmenu.o if HAVE_MENUS is defined.
+
+ * emacs.c (main): Call syms_of_xmenu only if HAVE_MENUS is defined.
+
+2004-03-12 Richard M. Stallman <rms@gnu.org>
+
+ * fns.c (internal_equal): New arg PROPS controls comparing
+ text properties. All callers changed.
+ (Fequal_including_properties): New function.
+ (syms_of_fns): defsubr it.
+
+2004-03-12 Kim F. Storm <storm@cua.dk>
+
+ Fix image support on MAC. From YAMAMOTO Mitsuharu.
+
+ * dispextern.h (XImagePtr, XImagePtr_or_DC): Add typedefs.
+ (image_background, image_background_transparent): Fix prototypes.
+
+ * image.c (XImagePtr, XImagePtr_or_DC): Move typedefs to dispextern.h.
+
+ * macfns.c (x_list_fonts, x_get_font_info, x_load_font)
+ (x_query_font, x_find_ccl_program, x_set_window_size)
+ (x_make_frame_visible, mac_initialize, XCreatePixmap)
+ (XCreatePixmapFromBitmapData, XFreePixmap, XSetForeground)
+ (mac_draw_line_to_pixmap): Move prototypes to macterm.h.
+
+ * macterm.h (x_list_fonts, x_get_font_info, x_load_font)
+ (x_query_font, x_find_ccl_program, x_set_window_size)
+ (x_make_frame_visible, mac_initialize, XCreatePixmap)
+ (XCreatePixmapFromBitmapData, XFreePixmap, XSetForeground)
+ (mac_draw_line_to_pixmap): Add prototypes.
+
+2004-03-12 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * macterm.c (XTread_socket): Fix mouse click on tool bar.
+
+2004-03-11 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h: Move image related prototypes from xfns.c section
+ to image.c. Condition them by HAVE_WINDOW_SYSTEM rather than
+ HAVE_X_WINDOWS.
+
+ * Makefile.in (XOBJ): Consolidate into one list. Add image.o.
+ Move gtkutil.o to new GTK_OBJ list.
+ (XMENU_OBJ) [HAVE_MENUS]: Move declaration to proper place.
+ (GTK_OBJ) [USE_GTK]: New declaration.
+ (obj): Add $(GTK_OBJ) to list.
+
+2004-03-11 Steven Tamm <steventamm@mac.com>
+
+ * image.c [MAC_OSX]: Include sys/stat.h.
+
+ * macfns.c (syms_of_macfns): Remove definitions of things now
+ defined in image.c.
+
+2004-03-11 Kim F. Storm <storm@cua.dk>
+
+ The following changes consolidates the identical/similar image
+ support code previously found in xfns.c, w32fns.c, and macfns.c
+ into a new file image.c.
+
+ * makefile.w32-in (OBJ1): Add image.o.
+ ($(BLD)/image.$(O)): Add dependencies.
+
+ * Makefile.in (XOBJ, MAC_OBJ): Add image.o.
+ (image.o): Add dependencies.
+
+ * image.c: New file with consolidated image support code.
+ (COLOR_TABLE_SUPPORT): New define to control whether
+ color table support is available (X only).
+ (Bitmap_Record): Common name for x_bitmap_record,
+ w32_bitmap_record, and mac_bitmap_record.
+ (XImagePtr): Common name for pointer to XImage or equivalent.
+ (XImagePtr_or_DC): New type to simplify code sharing; equivalent
+ to XImagePtr on X+MAC, and to HDC on W32.
+ (GET_PIXEL): Wrapper for XGetPixel or equivalent.
+ (NO_PIXMAP): Common name for "None" or equivalent.
+ (PNG_BG_COLOR_SHIFT): Bits to shift PNG background colors.
+ (RGB_PIXEL_COLOR): Common type for an integer "pixel color" value.
+ (PIX_MASK_RETAIN, PIX_MASK_DRAW): Portability macros (from macfns.c).
+ (FRAME_X_VISUAL, x_defined_color, DefaultDepthOfScreen):
+ Define with suitable equivalents on W32 and MAC for code sharing.
+ (XDrawLine): Define on MAC for code sharing.
+ (Destroy_Image, Free_Pixmap): Wrappers for code sharing.
+ (IF_LIB_AVAILABLE): Macro to simplify code sharing.
+ (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
+ (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+ (x_reference_bitmap, x_create_bitmap_from_data)
+ (x_create_bitmap_from_file, x_destroy_bitmap)
+ (x_destroy_all_bitmaps, x_create_bitmap_mask)
+ (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
+ (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
+ (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
+ (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
+ (define_image_type, lookup_image_type, valid_image_p)
+ (image_error, enum image_value_type, struct image_keyword)
+ (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
+ (make_image, free_image, prepare_image_for_display, image_ascent)
+ (four_corners_best, image_background, image_background_transparent)
+ (x_clear_image_1, x_clear_image, x_alloc_image_color)
+ (make_image_cache, free_image_cache, clear_image_cache)
+ (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
+ (forall_images_in_image_cache, x_create_x_image_and_pixmap)
+ (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
+ (find_image_fsspec, image_load_qt_1, image_load_quicktime)
+ (init_image_func_pointer, image_load_quartz2d)
+ (struct ct_color, init_color_table, free_color_table)
+ (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
+ (cross_disabled_images, x_to_xcolors, x_from_xcolors)
+ (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
+ (x_disable_image, x_build_heuristic_mask)
+ (XBM support, XPM support, PBM support, PNG support, JPEG support)
+ (TIFF support, GIF support, Ghostscript support): Consolidate image
+ code from xfns.c, w32fns.c, and macfns.c.
+ (syms_of_image): Consolidate image related symbol setup here.
+ (init_image): Consolidate image related initializations here.
+
+ * emacs.c (main) [HAVE_WINDOW_SYSTEM]: Add calls to syms_of_image
+ and init_image. Remove call to init_xfns.
+
+ * macterm.h (struct mac_bitmap_record): Add file member.
+ Not currently used, but simplifies code sharing.
+
+ * macfns.c (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
+ (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+ (x_reference_bitmap, x_create_bitmap_from_data)
+ (x_create_bitmap_from_file, x_destroy_bitmap)
+ (x_destroy_all_bitmaps, x_create_bitmap_mask)
+ (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
+ (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
+ (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
+ (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
+ (define_image_type, lookup_image_type, valid_image_p)
+ (image_error, enum image_value_type, struct image_keyword)
+ (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
+ (make_image, free_image, prepare_image_for_display, image_ascent)
+ (four_corners_best, image_background, image_background_transparent)
+ (x_clear_image_1, x_clear_image, x_alloc_image_color)
+ (make_image_cache, free_image_cache, clear_image_cache)
+ (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
+ (forall_images_in_image_cache, x_create_x_image_and_pixmap)
+ (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
+ (find_image_fsspec, image_load_qt_1, image_load_quicktime)
+ (init_image_func_pointer, image_load_quartz2d)
+ (struct ct_color, init_color_table, free_color_table)
+ (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
+ (cross_disabled_images, x_to_xcolors, x_from_xcolors)
+ (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
+ (x_disable_image, x_build_heuristic_mask)
+ (XBM support, XPM support, PBM support, PNG support, JPEG support)
+ (TIFF support, GIF support, Ghostscript support): Merge with image
+ code from xfns.c and macfns.c into image.c.
+ (syms_of_xfns): Move image related symbols to image.c.
+ (init_external_image_libraries, init_xfns): Remove; initialization
+ moved to init_image in image.c.
+
+ * w32fns.c (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
+ (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+ (x_reference_bitmap, x_create_bitmap_from_data)
+ (x_create_bitmap_from_file, x_destroy_bitmap)
+ (x_destroy_all_bitmaps, x_create_bitmap_mask)
+ (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
+ (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
+ (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
+ (define_image_type, lookup_image_type, valid_image_p)
+ (image_error, enum image_value_type, struct image_keyword)
+ (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
+ (make_image, free_image, prepare_image_for_display, image_ascent)
+ (four_corners_best, image_background, image_background_transparent)
+ (x_clear_image_1, x_clear_image, x_alloc_image_color)
+ (make_image_cache, free_image_cache, clear_image_cache)
+ (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
+ (forall_images_in_image_cache, x_create_x_image_and_pixmap)
+ (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
+ (struct ct_color, init_color_table, free_color_table)
+ (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
+ (cross_disabled_images, x_to_xcolors, x_from_xcolors)
+ (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
+ (x_disable_image, x_build_heuristic_mask)
+ (XBM support, XPM support, PBM support, PNG support, JPEG support)
+ (TIFF support, GIF support, Ghostscript support): Merge with image
+ code from xfns.c and macfns.c into image.c.
+ (syms_of_xfns): Move image related symbols to image.c.
+ (init_external_image_libraries, init_xfns): Remove; initialization
+ moved to init_image in image.c.
+
+ * xfns.c (Vx_bitmap_file_path, Vimage_cache_eviction_delay)
+ (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+ (x_reference_bitmap, x_create_bitmap_from_data)
+ (x_create_bitmap_from_file, x_destroy_bitmap)
+ (x_destroy_all_bitmaps, x_create_bitmap_mask)
+ (QCascent, QCmargin, QCrelief, QCconversion, QCcolor_symbols)
+ (QCheuristic_mask, QCindex, QCmatrix, QCcolor_adjustment, QCmask)
+ (Qlaplace, Qemboss, Qedge_detection, Qheuristic, Qcenter)
+ (define_image_type, lookup_image_type, valid_image_p)
+ (image_error, enum image_value_type, struct image_keyword)
+ (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
+ (make_image, free_image, prepare_image_for_display, image_ascent)
+ (four_corners_best, image_background, image_background_transparent)
+ (x_clear_image_1, x_clear_image, x_alloc_image_color)
+ (make_image_cache, free_image_cache, clear_image_cache)
+ (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
+ (forall_images_in_image_cache, x_create_x_image_and_pixmap)
+ (x_destroy_x_image, x_put_x_image, x_find_image_file, slurp_file)
+ (struct ct_color, init_color_table, free_color_table)
+ (lookup_rgb_color, lookup_pixel_color, colors_in_color_table)
+ (cross_disabled_images, x_to_xcolors, x_from_xcolors)
+ (x_detect_edges, x_emboss, x_laplace, x_edge_detection)
+ (x_disable_image, x_build_heuristic_mask)
+ (XBM support, XPM support, PBM support, PNG support, JPEG support)
+ (TIFF support, GIF support, Ghostscript support): Merge with
+ w32fns.c and macfns.c image code into image.c.
+ (syms_of_xfns): Move image related symbols to image.c.
+ (init_xfns): Remove; initialization moved to init_image in image.c.
+
+ * lisp.h (syms_of_image, init_image): Add protoypes.
+ (init_xfns): Remove prototype.
+
+ * dispextern.h (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+ (x_reference_bitmap, x_create_bitmap_from_data)
+ (x_create_bitmap_from_file, x_destroy_bitmap)
+ (x_create_bitmap_mask): Move prototypes from dispextern.h.
+ (gamma_correct) [MAC_OS]: Add prototype.
+
+ * xterm.h (x_bitmap_height, x_bitmap_width, x_bitmap_pixmap)
+ (x_reference_bitmap, x_create_bitmap_from_data)
+ (x_create_bitmap_from_file, x_destroy_bitmap)
+ (x_create_bitmap_mask): Move prototypes to dispextern.h.
+
+2004-03-09 Kenichi Handa <handa@etlken2>
+
+ * coding.c (decode_coding_emacs_mule): Handle insufficent source
+ correctly.
+
+2004-03-04 Richard M. Stallman <rms@gnu.org>
+
+ * s/sol2-6.h (LD_SWITCH_SYSTEM_TEMACS): New definition.
+
+ * window.c (Fdisplay_buffer): Doc fix.
+
+ * buffer.c (Fpop_to_buffer): Doc fix.
+
+2004-03-03 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (display_line): Fix call to get_overlay_arrow_glyph_row.
+
+2004-03-02 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * editfns.c (Ftranslate_region): Lisp_Object/int mixup.
+
+2004-03-02 Richard M. Stallman <rms@gnu.org>
+
+ * indent.c (compute_motion): Save vpos in prev_vpos, like hpos etc.
+
+2004-03-02 Kenichi Handa <handa@m17n.org>
+
+ * doc.c (Fsubstitute_command_keys): Fix counding bytes.
+
+2004-03-02 Kim F. Storm <storm@cua.dk>
+
+ * window.h (struct window): New member overlay_arrow_bitmap.
+
+ * window.c (make_window): Initialize overlay_arrow_bitmap.
+
+ * xdisp.c (Voverlay_arrow_variable_list): New variable to properly
+ implement and integrate multiple overlay arrows with redisplay.
+ (syms_of_xdisp): DEFVAR_LISP and initialize it.
+ (last_arrow_position, last_arrow_string): Replace by properties.
+ (Qlast_arrow_position, Qlast_arrow_string)
+ (Qoverlay_arrow_string, Qoverlay_arrow_bitmap): New variables.
+ (syms_of_xdisp): Intern and staticpro them.
+ (overlay_arrow_string_or_property, update_overlay_arrows)
+ (overlay_arrow_in_current_buffer_p, overlay_arrows_changed_p)
+ (overlay_arrow_at_row): New functions for multiple overlay arrows.
+ (redisplay_internal): Use them instead of directly accessing
+ Voverlay_arrow_position etc. for multiple overlay arrows.
+ (mark_window_display_accurate): Use update_overlay_arrows.
+ (try_cursor_movement): Use overlay_arrow_in_current_buffer_p.
+ (try_window_id): Use overlay_arrows_changed_p.
+ (get_overlay_arrow_glyph_row): Add overlay_arrow_string arg.
+ (display_line): Use overlay_arrow_at_row to check multiple
+ overlay arrows, and get relevant overlay-arrow-string and
+ overlay-arrow-bitmap. Set w->overlay_arrow_bitmap accordingly.
+ (produce_image_glyph): Set pixel_width = 0 for fringe bitmap.
+ (syms_of_xdisp): Remove last_arrow_position and last_arrow_string.
+
+ * fringe.c (draw_fringe_bitmap): Use w->overlay_arrow_bitmap if set.
+ (update_window_fringes): Remove unused code.
+
+2004-03-01 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_read_socket): Fix last change to ButtonPress handling.
+
+2004-03-01 Juanma Barranquero <lektu@terra.es>
+
+ * fringe.c (Fdefine_fringe_bitmap): Fix typo in docstring.
+
+ * makefile.w32-in ($(BLD)/fringe.$(O)): Add dependencies.
+
+2004-03-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_display_color_cells): Use number of planes to calculate
+ how many colors can be displayed.
+
+2004-03-01 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Ftranslate_region): Handle multibyte chars in TABLE
+ correctly.
+
+2004-02-28 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (update_window): Update header line also if there are
+ no other changes in window (move code after set_cursor label).
+
+ * lisp.h (mark_window_display_accurate): Remove prototype.
+
+ * window.c (window_loop, Fforce_window_update): Force mode line
+ updates by setting prevent_redisplay_optimizations_p and
+ update_mode_lines.
+
+2004-02-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_window): Fix indentation.
+
+ * xterm.c (x_calc_absolute_position): Call x_real_positions
+ to get WM window sizes and use those to calculate position.
+ (x_set_offset): Remove code commented out.
+
+2004-02-28 Miles Bader <miles@gnu.org>
+
+ * keyboard.c (adjust_point_for_property): #ifdef-out dodgy xassert.
+
+2004-02-28 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (kbd_buffer_store_event_hold): New function to store
+ an event into kbd fifo, but with special handling of quit event;
+ a quit event is saved for later, and further events are discarded
+ until the saved quit event has been processed.
+ (kbd_buffer_store_event): Use kbd_buffer_store_event_hold.
+ (gen_help_event): Store help event in kbd fifo.
+ (NREAD_INPUT_EVENTS): Remove.
+ (read_avail_input): Adapt to new read_socket_hook interface.
+ Remove allocation and initialization of local input_event buffer,
+ as read_socket_hook stores events directly in fifo. Allocate and
+ initialize local hold_quit event to handle postponed quit event
+ (and store it if set by kbd_buffer_store_event_hold).
+
+ * keyboard.h (kbd_buffer_store_event_hold): Add prototype.
+ (gen_help_event): Fix prototype.
+
+ * macterm.c (XTread_socket): Remove bufp_r and
+ numcharsp args. Add hold_quit arg.
+ Rework to use just one, local, inev input_event. Store inev
+ directly in fifo using kbd_buffer_store_event_hold.
+
+ * sysdep.c (BUFFER_SIZE_FACTOR): Remove.
+ (read_input_waiting): Adapt to new read_socket_hook interface.
+ Remove allocation and initialization of local input_event buffer,
+ as read_socket_hook stores events directly in fifo. Allocate and
+ initialize local hold_quit event to handle postponed quit event
+ (and store it if set by kbd_buffer_store_event_hold).
+
+ * term.c (read_socket_hook): Fix arg list.
+
+ * termhooks.h (read_socket_hook): Fix prototype.
+
+ * w32inevt.c (w32_console_read_socket): Remove bufp_r and
+ numcharsp args. Add hold_quit arg.
+ Rework to use just one, local, inev input_event. Store inev
+ directly in fifo using kbd_buffer_store_event_hold.
+
+ * w32inevt.h (w32_console_mouse_position): Fix prototype.
+
+ * w32term.c (w32_read_socket): Remove bufp_r and numcharsp args.
+ Add hold_quit arg. Rework to use just one, local, inev
+ input_event. Store inev directly in fifo using
+ kbd_buffer_store_event_hold. Update count in one place.
+ Postpone call to gen_help_event until inev is stored; use new
+ local do_help for this.
+ Remove local emacs_event in handing of ButtonPress event; just use
+ inev instead (so no reason to copy it later).
+
+ * xsmfns.c (x_session_check_input): Remove numchars arg.
+
+ * xterm.c (x_focus_changed, x_detect_focus_change):
+ Remove numchars arg. Always store event into bufp arg.
+ Return nothing. Callers changed accordingly.
+ (glyph_rect): Simplify.
+ (STORE_KEYSYM_FOR_DEBUG): New macro.
+ (SET_SAVED_MENU_EVENT): Use inev instead of bufp, etc.
+ (current_bufp, current_numcharsp) [USE_GTK]: Remove.
+ (current_hold_quit) [USE_GTK]: Add.
+ (event_handler_gdk): Adapt to new handle_one_xevent.
+ (handle_one_xevent): Remove bufp_r and numcharsp args.
+ Add hold_quit arg. Rework to use just one, local, inev
+ input_event. Store inev directly in fifo using
+ kbd_buffer_store_event_hold. Update count in one place.
+ Postpone call to gen_help_event until inev is stored; use new
+ local do_help for this.
+ Simplify handling of keysyms (consolidate common code). Fix bug
+ where count was updated with nchars instead of nbytes.
+ Remove local emacs_event in handing of ButtonPress event; just use
+ inev instead (so no reason to copy it later).
+ Remove `out' label. Rename label `ret' to `done'; add various
+ `goto done' to clarify code flow in deeply nested blocks.
+ (x_dispatch_event): Simplify as handle_one_xevent now calls
+ kbd_buffer_store_event itself.
+ (XTread_socket): Remove bufp_r and numcharsp args. Add hold_quit
+ arg. Call handle_one_xevent with new arglist. Store event from
+ x_session_check_input in fifo.
+ [USE_GTK]: Setup current_hold_quit.
+ Decrement handling_signal before unblocking input.
+ (x_initialize) [USE_GTK]: Initialize current_count.
+
+ * xterm.h (x_session_check_input): Fix prototype.
+
+2004-02-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * s/darwin.h (LD_SWITCH_SYSTEM_TEMACS): Add `-framework QuickTime'.
+
+ * dispextern.h [MAC_OSX]: Do not include Carbon/Carbon.h (now in
+ macgui.h).
+
+ * emacs.c (main) [HAVE_CARBON]: Call init_xfns.
+
+ * macgui.h [MAC_OSX]: Include Carbon/Carbon.h.
+ (mktime, DEBUG, Z, free, malloc, realloc, max, min)
+ (init_process) [MAC_OSX]: Avoid conflicts with Carbon/Carbon.h.
+ [!MAC_OSX]: Include QDOffscreen.h and Controls.h.
+ (INFINITY) [MAC_OSX]: Avoid conflict with definition in math.h.
+ (Bitmap): Remove typedef.
+ (Pixmap): Change int to GWorldPtr.
+
+ * macmenu.c [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
+
+ * macterm.h [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
+ (RED16_FROM_ULONG, GREEN16_FROM_ULONG, BLUE16_FROM_ULONG):
+ New #define to extract 16-bit depth color components from unsigned
+ long representation.
+ (PIX_MASK_DRAW, PIX_MASK_RETAIN): New #define to represent pixel
+ colors used for masks.
+ (struct mac_display_info): Add color_p. Remove n_cbits.
+
+ * macfns.c: Include sys/types.h and sys/stat.h.
+ [MAC_OSX]: Do not include Carbon/Carbon.h (now in macgui.h).
+ Include QuickTime/QuickTime.h.
+ (XCreatePixmap, XCreatePixmapFromBitmapData, XFreePixmap)
+ (XSetForeground, mac_draw_line_to_pixmap): Add externs for
+ functions defined in macterm.c.
+ (XImagePtr): New typedef. Corresponds to XImage * in xfns.c.
+ (ZPixmap): New #define for compatibility with xfns.c.
+ (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
+ (x_create_x_image_and_pixmap, x_destroy_x_image, x_put_x_image)
+ (find_image_fsspec, image_load_qt_1, image_load_quicktime):
+ New functions.
+ (four_corners_best, x_create_x_image_and_pixmap)
+ (x_destroy_x_image, unwind_create_frame, x_disable_image)
+ (x_edge_detection, init_color_table, colors_in_color_table)
+ (lookup_rgb_color, lookup_pixel_color, postprocess_image)
+ (x_put_x_image, slurp_file, xbm_scan, xbm_load, xbm_load_image)
+ (xbm_image_p, xbm_read_bitmap_data, xbm_file_p, x_to_xcolors)
+ (x_from_xcolors, x_detect_edges): New declarations (from xfns.c).
+ (mac_color_map_lookup, x_to_mac_color): Fix Lisp_Object/unsigned
+ long mixup.
+ (mac_defined_color, x_to_x_colors): Use RED16_FROM_ULONG etc.
+ (x_decode_color): Don't use n_cbits (in struct mac_display_info).
+ (x_set_foreground_color, x_set_cursor_color): Sync with w32fns.c.
+ (x_set_cursor_type, Fxw_color_values, valid_image_p)
+ (image_value_type, parse_image_spec, image_ascent, x_clear_image)
+ (x_alloc_image_color, clear_image_cache, lookup_image)
+ (x_find_image_file, xbm_read_bitmap_file_data)
+ (enum xbm_keyword_index, xbm_format, xbm_image_p, xbm_scan)
+ (xbm_read_bitmap_data, xbm_load, pbm_image_p, pbm_scan_number)
+ (enum pbm_keyword_index, pbm_format, enum png_keyword_index)
+ (png_format, png_image_p, enum jpeg_keyword_index, jpeg_format)
+ (jpeg_image_p, enum tiff_keyword_index, tiff_format, tiff_image_p)
+ (enum gif_keyword_index, gif_format, gif_image_p): Sync with xfns.c.
+ (x_make_gc): Sync with xfns.c. Enclose unused `border_tile' with
+ #if 0.
+ (x_free_gcs): Sync with xfns.c. Enclose unused `border_tile' with
+ #if 0. Free white_relief.gc and black_relief.gc.
+ (unwind_create_frame, x_emboss, x_laplace, x_edge_detection):
+ New functions (from xfns.c).
+ (Fx_create_frame): Record unwind_create_frame.
+ (Fxw_display_color_p): Use dpyinfo->color_p.
+ (Fx_display_grayscale_p, Fx_display_planes): Don't use
+ dpyinfo->n_cbits.
+ (Fx_display_color_cells): Use dpyinfo->n_planes;
+ (QCmatrix, QCcolor_adjustment, QCmask, Qemboss, Qedge_detection)
+ (Qheuristic, cross_disabled_images, emboss_matrix)
+ (laplace_matrix): New variables (from xfns.c).
+ (Fimage_size, Fimage_mask_p, four_corners_best, image_background)
+ (x_clear_image_1, postprocess_image, slurp_file, xbm_load_image)
+ (xbm_file_p, x_to_xcolors, x_from_xcolors, x_detect_edges)
+ (image_background_transparent): New function (from xfns.c).
+ Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
+ (image_load_quicktime): Add declaration.
+ [MAC_OSX] (image_load_quartz2d): Likewise.
+ [MAC_OSX] (CGImageCreateWithPNGDataProviderProcType): New typedef.
+ [MAC_OSX] (MyCGImageCreateWithPNGDataProvider): New variable.
+ [MAC_OSX] (init_image_func_pointer, image_load_quartz2d): New funs.
+ (xbm_load_image_from_file, x_laplace_read_row)
+ (x_laplace_write_row, pbm_read_file): Remove functions.
+ [HAVE_XPM] (enum xpm_keyword_index, xpm_format, xpm_image_p)
+ (xpm_load): Sync with xfns.c (although XPM is not supported yet).
+ (colors_in_color_table): Sync with xfns.c (although not used).
+ (lookup_rgb_color): Don't lookup color table. Just do gamma
+ correction.
+ (COLOR_INTENSITY): New #define (from xfns.c).
+ (x_disable_image): New function (from xfns.c).
+ Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
+ (x_build_heuristic_mask): Sync with xfns.c.
+ Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
+ (HAVE_PBM): Remove #ifdef.
+ (pbm_load): Sync with xfns.c. Set img->width and img->height
+ before IMAGE_BACKGROUND.
+ (png_image_p, png_load): Don't enclose declarations with #if HAVE_PNG.
+ (Qpng, enum png_keyword_index, png_format, png_type, png_image_p):
+ Don't enclose with #if HAVE_PNG.
+ [!HAVE_PNG] (png_load) [MAC_OSX]: Use image_load_quartz2d if a
+ symbol _CGImageCreateWithPNGDataProvider is defined.
+ Otherwise use image_load_quicktime.
+ [!HAVE_PNG] (png_load) [!MAC_OSX]: Use image_load_quicktime.
+ [HAVE_PNG] (png_load): Sync with xfns.c.
+ Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
+ (jpeg_image_p, jpeg_load): Don't enclose declarations with #if
+ HAVE_JPEG.
+ (Qjpeg, enum jpeg_keyword_index, jpeg_format, jpeg_type)
+ (jpeg_image_p): Don't enclose with #if HAVE_JPEG.
+ [!HAVE_JPEG] (jpeg_load) [MAC_OSX]: Use image_load_quartz2d.
+ [!HAVE_JPEG] (jpeg_load) [!MAC_OSX]: Use image_load_quicktime.
+ [HAVE_JPEG] (jpeg_load): Sync with xfns.c.
+ (tiff_image_p, tiff_load): Don't enclose declarations with #if
+ HAVE_TIFF.
+ (Qtiff, enum tiff_keyword_index, tiff_format, tiff_type)
+ (tiff_image_p): Don't enclose with #if HAVE_TIFF.
+ [!HAVE_TIFF] (tiff_load): Use image_load_quicktime.
+ [HAVE_TIFF] (tiff_error_handler, tiff_warning_handler):
+ New functions (from xfns.c).
+ [HAVE_TIFF] (tiff_load): Sync with xfns.c.
+ (gif_image_p, gif_load): Don't enclose declarations with #if HAVE_GIF.
+ (Qgif, enum gif_keyword_index, gif_format, gif_type, gif_image_p):
+ Don't enclose with #if HAVE_GIF.
+ [!HAVE_GIF] (gif_load): Use Quicktime Movie Toolbox if it is
+ animated gif. Otherwise use image_load_quicktime.
+ [HAVE_GIF] (gif_lib.h): Temporarily define DrawText as
+ gif_DrawText to avoid conflict with QuickdrawText.h.
+ [HAVE_GIF] (gif_load): Sync with xfns.c.
+ (enum gs_keyword_index, gs_format, gs_image_p, gs_load)
+ [HAVE_GHOSTSCRIPT] (x_kill_gs_process): Sync with xfns.c (although
+ Ghostscript is not supported yet).
+ (syms_of_macfns): Initialize Qemboss, Qedge_detection, Qheuristic,
+ QCmatrix, QCcolor_adjustment, and QCmask. Add DEFVAR_BOOL
+ cross_disabled_images (from xfns.c). Remove #if 0 for supported
+ image types. Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and
+ HAVE_PNG. Add defsubr for Simage_size and Simage_mask_p.
+ (init_xfns): Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and
+ HAVE_PNG. Call EnterMovies to support animated gifs.
+ Call init_image_func_pointer to bind a symbol
+ _CGImageCreateWithPNGDataProvider if it is defined.
+
+ * macterm.c [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
+ (x_draw_bar_cursor): Sync declaration with xterm.c.
+ (XFreePixmap, mac_draw_rectangle_to_pixmap, mac_copy_area)
+ (mac_copy_area_to_pixmap): Implementation with GWorld (offscreen
+ graphics).
+ (mac_set_forecolor, mac_set_backcolor): Use RED16_FROM_ULONG etc.
+ (mac_draw_line_to_pixmap, XCreatePixmap)
+ (XCreatePixmapFromBitmapData, mac_fill_rectangle_to_pixmap)
+ (mac_copy_area_with_mask, mac_copy_area_with_mask_to_pixmap):
+ New functions.
+ (mac_draw_bitmap) [TARGET_API_MAC_CARBON]:
+ Use GetPortBitMapForCopyBits instead of the cast to Bitmap *.
+ Cast bits to char *.
+ (reflect_byte): New function (from w32fns.c).
+ (mac_create_bitmap_from_bitmap_data): Use it and don't stuff bits
+ due to byte alignment.
+ (mac_scroll_area) [TARGET_API_MAC_CARBON]:
+ Use GetPortBitMapForCopyBits instead of the cast to Bitmap *.
+ (XSetForeground): Remove static (now used in macfns.c).
+ (HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New #define (from w32term.c).
+ (mac_alloc_lighter_color, x_destroy_window): Sync with w32term.c.
+ (x_setup_relief_color, x_setup_relief_colors, x_draw_box_rect)
+ (x_draw_glyph_string_box, x_draw_image_foreground)
+ (x_draw_image_foreground_1, x_draw_image_glyph_string)
+ (x_draw_stretch_glyph_string, x_draw_glyph_string)
+ (x_draw_hollow_cursor, x_draw_bar_cursor, mac_draw_window_cursor):
+ Sync with xterm.c.
+ (x_draw_relief_rect): Sync with xterm.c. Make 1 pixel shorter
+ than the xterm.c version when a strictly horizontal or vertical
+ line is drawn.
+ (XTset_terminal_window): Add static.
+ (x_make_frame_visible): Add UNBLOCK_INPUT.
+ (x_free_frame_resources): New funcion (from xterm.c).
+ (XTread_socket): Call handle_tool_bar_click if mouse up/down event
+ occurs in tool bar area.
+ (mac_initialize_display_info): Remove dpyinfo->n_cbits.
+ Set dpyinfo->color_p. Determine dpyinfo->n_planes using HasDepth.
+ Initialize image cache.
+ (stricmp, wildstrieq, mac_font_pattern_match, mac_font_match):
+ Enclose unused functions with #if 0.
+ (Qbig5, Qcn_gb, Qsjis, Qeuc_kr): New variables.
+ (decode_mac_font_name): New function to apply code conversions
+ from a mac font name to an XLFD font name according to its script code.
+ (x_font_name_to_mac_font_name): Apply code conversion from an XLFD
+ font name to a mac font name according to REGISTRY and ENCODING fields.
+ (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't use a font
+ whose name starts with `.'.
+ (init_font_name_table): Use decode_mac_font_name. Add both
+ jisx0208.1983-sjis and jisx0201.1976-0 entries if the script code
+ of a font is smJapanese.
+ (mac_do_list_fonts): New function to list fonts that match a given
+ pattern.
+ (x_list_fonts, XLoadQueryFont): Use it.
+ (XLoadQueryFont): Set rbearing field for each variable width
+ character to avoid needless redraw.
+ (syms_of_macterm): Initialize Qbig5, Qcn_gb, Qsjis, and Qeuc_kr.
+
+2004-02-26 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (NREAD_INPUT_EVENTS): Temporarily increase to 512
+ as read_socket_hook handler on X aborts if buffer is too small
+ and W32 handler doesn't always check buffer limit.
+
+ * xdisp.c (handle_single_display_prop): Handle left-fringe and
+ right-fringe similar to a display margin image. Specifically,
+ the characters having the fringe prop are no longer shown, and
+ we use IT_IMAGE/next_element_from_image with image_id = -1 to
+ do this. Set fringe bitmap face_id in it->face_id.
+ (produce_image_glyph): Handle image_id < 0 as "no image" case, but
+ still realize it->face (i.e. the fringe bitmap face).
+
+2004-02-25 Miles Bader <miles@gnu.org>
+
+ * xdisp.c (check_it): Check string/string_pos consistency.
+ (init_iterator): Initialize string-related fields properly.
+
+2004-02-11 Miles Bader <miles@gnu.org>
+
+ * xdisp.c (produce_image_glyph): Force negative descents to zero.
+
+2004-02-10 Miles Bader <miles@gnu.org>
+
+ * xfns.c (lookup_image): Remove xassert(!interrupt_input_blocked);
+ BLOCK_INPUT can be nested, so it doesn't make much sense.
+
+2004-02-24 Michael Mauger <mmaug@yahoo.com>
+
+ * w32fns.c (slurp_file, xbm_scan, xbm_load_image)
+ (xbm_read_bitmap_data): Use unsigned char for image data.
+
+2004-02-23 Luc Teirlinck <teirllm@auburn.edu>
+
+ * abbrev.c (Finsert_abbrev_table_description): Doc fix.
+
+2004-02-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_draw_fringe_bitmap): Draw overlaid bitmaps
+ correctly over other bitmaps.
+
+2004-02-21 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs.c (USAGE1): Split into two halves.
+ (USAGE2): Second half of the old USAGE1.
+ (USAGE3): Rename from USAGE2.
+ (USAGE4): Rename from USAGE3.
+
+2004-02-21 Juri Linkov <juri@jurta.org>
+
+ * emacs.c (USAGE1): Add --no-desktop. Move --display from USAGE2.
+ Fix --multibyte. Move --help, --version to USAGE2. Add alias
+ --file. Fix -f, -l. Sort options. Untabify.
+ (USAGE2): Add -hb. Fix --name, --title. Sort options. Untabify.
+
+2004-02-19 Luc Teirlinck <teirllm@auburn.edu>
+
+ * category.c (Fdefine_category, Fcategory_docstring)
+ (Fget_unused_category, Fset_category_table)
+ (Fcategory_set_mnemonics): Doc fixes.
+
+2004-02-20 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c: Undo 2004-02-16 and 2004-02-17 changes.
+ The following changes are relative to the 2004-01-21 revision.
+ (NREAD_INPUT_EVENTS): Define as max number of input events to read
+ in one call to read_socket_hook. Value is 8.
+ (read_avail_input): Separate and rework handling of read_socket_hook
+ and non-read_socket_hook cases. Use smaller input_event buffer
+ in read_socket_hook case, and repeat if full buffer is read.
+ Use new local variable 'discard' to skip input after C-g.
+ In non-read_socket_hook case, just use a single input_event, and
+ call kbd_buffer_store_event on the fly for each character.
+
+2004-02-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp.h (union Lisp_Object): Give a more precise type for `type'.
+ Remove unused `gu' alternative.
+
+2004-02-19 Andreas Schwab <schwab@suse.de>
+
+ * fringe.c (Fdefine_fringe_bitmap): Use && instead of & to avoid
+ warning.
+
+2004-02-18 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_window_cursor_type, display_and_set_cursor):
+ Fix last change.
+
+2004-02-17 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (fast_find_position): Fix return value of new version;
+ it was inverted compared to the 21.1 version.
+ (get_window_cursor_type): Don't look at glyph if NULL.
+ (display_and_set_cursor): Set glyph to NULL if cursor in fringe.
+
+ * keyboard.c: Rework previous change; it didn't consider that the
+ buf array was allocated on the stack.
+ (prev_read): Remove variable.
+ (read_avail_input_buf): New static event buffer array.
+ (in_read_avail_input): New static variable to handle re-entrancy.
+ (read_avail_input): Change buf to pinter to read_avail_input_buf.
+ Use in_read_avail_input to handle re-entrance; when re-entered,
+ fully initialize and use tmp_buf array instead of read_avail_input_buf.
+ Do not initialize read_avail_input_buf in full here; instead assume it
+ is always cleared on entry. To ensure that, we clear (just) the
+ entries that were used before we return.
+ (init_keyboard): Initialize read_avail_input_buf here.
+
+2004-02-16 Jesper Harder <harder@ifa.au.dk>
+
+ * cmds.c (Fend_of_line): Doc fix.
+
+2004-02-16 Dmitry Antipov <dmantipov@yandex.ru> (tiny change)
+
+ * keyboard.c (prev_read): New static variable.
+ (read_avail_input): Use it to zero out only those slots in buf[]
+ that were used last time we were called.
+
+2004-02-16 Eli Zaretskii <eliz@gnu.org>
+
+ * Makefile.in (obj): Move fringe.o from here...
+ (XOBJ, MAC_OBJ): ...to here.
+
+2004-02-16 Stephen Eglen <stephen@gnu.org>
+
+ * fringe.c (init_fringe_bitmap): Define j in MAC_OS code.
+
+2004-02-15 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * data.c (Fbyteorder):
+ * fringe.c (Fdefine_fringe_bitmap):
+ * xdisp.c (handle_single_display_prop):
+ * xselect.c (x_handle_dnd_message): Lisp_Object/int mixup.
+
+2004-02-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_draw_fringe_bitmap): Handle overlay fringe bitmaps.
+
+2004-02-15 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (Vmac_emulate_three_button_mouse): New variable for
+ controlling emulation of a three button mouse with option and
+ command keys.
+ (Qreverse, mac_get_enumlated_btn): Handle the emulation.
+ (mac_event_to_emacs_modifiers, XTread_socket): Ditto.
+
+2004-02-15 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (syms_of_buffer): Doc fix for indicate-buffer-boundaries.
+
+ * fringe.c (init_fringe_bitmap) [MAC_OS, WORDS_BIG_ENDIAN]:
+ Perform byte-swapping.
+
+2004-02-14 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct draw_fringe_bitmap_params): Change member
+ bits from char to short to facilitate wider bitmaps.
+ (struct redisplay_interface): Fix prototype of define_fringe_bitmap
+ member.
+
+ * fringe.c (struct fringe_bitmap): Change member bits from char to
+ short to facilitate 16 bits wide bitmaps. Modify all standard
+ bitmaps accordingly.
+ (BYTES_PER_BITMAP_ROW, STANDARD_BITMAP_HEIGHT): New macros.
+ (FRBITS): Use STANDARD_BITMAP_HEIGHT instead of just sizeof.
+ (draw_fringe_bitmap): Ditto.
+ (init_fringe_bitmap) [MAC_OS]: Don't bitswap.
+ (init_fringe_bitmap) [HAVE_X_WINDOWS]: Enhance bitswapping to
+ handle up to 16 bits wide bitmaps.
+ (Fdefine_fringe_bitmap): Doc fix. Handle wider bitmaps.
+ (Ffringe_bitmaps_at_pos): Add missing arg declarations.
+
+ * macterm.c (mac_draw_bitmap): Handle 16 bits wide bitmaps directly.
+ (x_draw_fringe_bitmap): Use enhanced mac_draw_bitmap, so we no longer
+ need to call mac_create_bitmap_from_bitmap_data and mac_free_bitmap.
+
+ * w32term.c (w32_define_fringe_bitmap): Bitmaps are now 16 bits wide,
+ so it is no longer necessary to expand them here.
+
+ * xterm.c (x_draw_fringe_bitmap): Handle wider bitmaps (max 16 bits).
+
+2004-02-12 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fwindow_fringes): Doc fix.
+
+2004-02-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xselect.c (x_get_foreign_selection): Add new optional parameter
+ time_stamp.
+ (Fx_get_selection_internal): Ditto, pass time_stamp to
+ x_get_foreign_selection.
+
+ * data.c (Fbyteorder): New function.
+
+2004-02-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * atimer.c: Move include stdio.h to same place as in other files.
+
+ * region-cache.c: Ditto.
+
+ * sysdep.c: Ditto.
+
+ * xfaces.c: Ditto.
+
+2004-02-09 Sam Steingold <sds@gnu.org>
+
+ * w32term.c (w32_draw_fringe_bitmap): Fix a typo in the last patch.
+
+2004-02-09 Kim F. Storm <storm@cua.dk>
+
+ * fringe.c: New file. Move original fringe related declarations
+ and code from dispextern.h and xdisp.c here.
+ Rework code to support user defined fringe bitmaps, redefining
+ standard bitmaps, ability to overlay user defined bitmap with
+ overlay arrow bitmap, and add faces to bitmaps.
+ (Voverflow_newline_into_fringe): Declare here.
+ (enum fringe_bitmap_align): New enum.
+ (..._bits): All bitmaps are now defined without bitswapping; that
+ is now done in init_fringe_once (if necessary).
+ (standard_bitmaps): New array with specifications for the
+ standard fringe bitmaps.
+ (fringe_faces): New array.
+ (valid_fringe_bitmap_id_p): New function.
+ (draw_fringe_bitmap_1): Rename from draw_fringe_bitmap.
+ (draw_fringe_bitmap): New function which draws fringe bitmap,
+ possibly overlaying bitmap with cursor in right fringe or the
+ overlay arrow in the left fringe.
+ (update_window_fringes): Do not handle overlay arrow here.
+ Compare and copy fringe bitmap faces.
+ (init_fringe_bitmap): New function.
+ (Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to
+ define and destroy user defined fringe bitmaps.
+ (Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap.
+ (Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps.
+ (syms_of_fringe): New function. Defsubr new DEFUNs.
+ DEFVAR_LISP Voverflow_newline_into_fringe.
+ (init_fringe_once, init_fringe): New functions.
+ (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
+
+ * Makefile.in (obj): Add fringe.o.
+ (fringe.o): New dependencies.
+
+ * dispextern.h (FRINGE_ID_BITS): New definition for number of
+ bits allocated to hold a fringe number. Increase number of bits
+ from 4 to 8 to allow user defined fringe bitmaps.
+ (struct glyph_row, struct it): New members left_user_fringe_bitmap,
+ left_user_fringe_face_id, right_user_fringe_bitmap,
+ right_user_fringe_face_id.
+ (enum fringe_bitmap_type, struct fringe_bitmap, fringe_bitmaps):
+ Move to new file fringe.c.
+ (MAX_FRINGE_BITMAPS): Define here.
+ (struct draw_fringe_bitmap_params): New members bits, cursor_p,
+ and overlay_p. Change member which to int.
+ (struct redisplay_interface): New members define_fringe_bitmap
+ and destroy_fringe_bitmap.
+ (valid_fringe_bitmap_id_p): Add prototype.
+ (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: Add prototypes.
+
+ * dispnew.c (row_equal_p): Compare fringe bitmap faces and overlay
+ arrows.
+ (update_frame): Do flush_display if force_flush_display_p to
+ ensure display (specifically fringes) are updated in a timely
+ manner when resizing the frame by dragging the mouse.
+ (update_window_line): Update row if overlay arrow changed.
+ (scrolling_window): Redraw fringe bitmaps if fringe bitmap faces
+ or overlay arrow changed.
+
+ * emacs.c (main) [HAVE_WINDOW_SYSTEM]: Call init_fringe_once,
+ syms_of_fringe, and init_fringe.
+
+ * frame.h (struct frame): New member force_flush_display_p.
+
+ * lisp.h (syms_of_fringe, init_fringe, init_fringe_once):
+ Add prototypes.
+
+ * macterm.c (mac_draw_bitmap): Add overlay_p arg.
+ (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps;
+ thanks to YAMAMOTO Mitsuharu for advice on how to do this.
+ Use cursor color for displaying cursor in fringe.
+ (x_redisplay_interface): Add null handlers for
+ define_fringe_bitmap and destroy_fringe_bitmap functions.
+
+ * w32term.c (w32_draw_fringe_bitmap): Copy unadapted code from
+ xterm.c to handle overlayed fringe bitmaps and to use cursor color
+ for displaying cursor in fringe.
+ (w32_define_fringe_bitmap, w32_destroy_fringe_bitmap): New W32
+ specific functions to define and destroy fringe bitmaps in fringe_bmp.
+ (w32_redisplay_interface): Add them to redisplay_interface.
+ (w32_term_init): Call w32_init_fringe instead of explicitly
+ defining fringe bitmaps in fringe_bmp array.
+ (x_delete_display): Call w32_reset_fringes instead of explicitly
+ destroying fringe bitmaps in fringe_bmp array.
+
+ * xdisp.c (Voverflow_newline_into_fringe, syms_of_xdisp)
+ (left_bits, right_bits, up_arrow_bits, down_arrow_bits)
+ (continued_bits, continuation_bits, ov_bits, first_line_bits)
+ (last_line_bits, filled_box_cursor_bits, hollow_box_cursor_bits)
+ (bar_cursor_bits, hbar_cursor_bits, zv_bits, hollow_square_bits)
+ (fringe_bitmaps, draw_fringe_bitmap, draw_row_fringe_bitmaps)
+ (draw_window_fringes, compute_fringe_widths, update_window_fringes):
+ Move fringe handling vars and code to new file fringe.c.
+ (handle_display_prop): Handle left-fringe and right-fringe
+ display properties; store user fringe bitmaps in iterator.
+ (move_it_in_display_line_to): Handle cursor in fringe at eob.
+ (clear_garbaged_frames): Set force_flush_display_p if resized.
+ (redisplay_window): Redraw fringe bitmaps if not just_this_one_p.
+ (display_line): Handle cursor in fringe at eob.
+ (display_line): Set row user fringe bitmaps from iterator.
+
+ * xterm.c (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps.
+ Use cursor color for displaying cursor in fringe.
+ (x_redisplay_interface): Add null handlers for
+ define_fringe_bitmap and destroy_fringe_bitmap functions.
+
+2004-02-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * macfns.c (Fx_change_window_property): Make doc string and
+ parameters same as for X version.
+
+ * w32fns.c (Fx_change_window_property): Ditto.
+
+2004-02-07 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (hscroll_window_tree): Position cursor near to right
+ margin in hscrolled window when jumping to end of line (rather
+ than centering cursor).
+
+ * process.c (wait_reading_process_input): Don't do adaptive read
+ buffering if waiting for a specific process.
+
+2004-02-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * minibuf.c (Fminibufferp, Fread_from_minibuffer)
+ (Fread_minibuffer, Feval_minibuffer)
+ (Fread_string, Fread_no_blanks_input)
+ (Fcompleting_read): Doc fixes.
+ (syms_of_minibuf): Doc fixes for minibuffer-completion-table and
+ completion-regexp-list. Define Qcase_fold_search and staticpro it.
+ (read_minibuf): Fix initial comment.
+ (Ftry_completion, Fall_completions, Ftest_completion): Bind
+ case-fold-search to the value of completion-ignore-case when
+ checking completion-regexp-list.
+ (Fdisplay_completion_list): Make it handle arguments that are
+ symbols. Doc fix.
+
+2004-02-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h: Add declaration of free_frame_menubar.
+
+ * xfns.c (x_create_bitmap_mask): Removed unused variable depth.
+ (x_set_menu_bar_lines): Added ! defined USE_GTK for olines.
+ (Fx_change_window_property): Add declaration of parameters type and
+ format. Remove unused variable cons.
+
+ * xselect.c: Include stdio.h.
+
+2004-02-05 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (Fset_char_table_range): Fix previous change.
+
+ * buffer.c (Fset_buffer_multibyte): Fix docstring.
+
+2004-02-04 Luc Teirlinck <teirllm@auburn.edu>
+
+ * editfns.c (Fchar_after, Fchar_before): Doc fixes.
+
+2004-02-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keymap.c (Vmouse_events): Rename from Vmenu_events.
+ (syms_of_keymap): Add mouse-[45], header-line, and mode-line to it.
+
+2004-02-04 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (Fset_char_table_range): Handle charsets ascii,
+ eight-bit-control, and eight-bit-graphic correctly.
+
+2004-02-03 Jason Rumney <jasonr@gnu.org>
+
+ * w32select.c (Fw32_set_clipboard_data): Make coding iso2022 safe.
+
+ * w32fns.c (x_to_w32_font): Likewise.
+
+2004-02-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h: Add x_handle_dnd_message, x_check_property_data,
+ x_fill_property_data, x_property_data_to_lisp and check_x_display_info.
+
+ * xterm.c (handle_one_xevent): Call x_handle_dnd_message for
+ ClientMessages.
+
+ * xselect.c: Include termhooks.h and X11/Xproto.h.
+ (x_check_property_data, x_fill_property_data)
+ (x_property_data_to_lisp, mouse_position_for_drop)
+ (Fx_get_atom_name, x_handle_dnd_message): New functions for DND support.
+ (Fx_send_client_event): Move here from xfns.c.
+ (syms_of_xselect): Add Sx_get_atom_name and Sx_send_client_message.
+
+ * xfns.c (x-send-client-message): Move to xselect.c.
+ (Fx_change_window_property): Add optional arguments TYPE, FORMAT and
+ OUTER_P.
+ (Fx_window_property): Add optional arguments TYPE, SOURCE, DELETE_P,
+ VECTOR_RET_P. Handle AnyPropertyType. Call x_property_data_to_lisp
+ if vector_ret_p is true.
+ (syms_of_xfns): Sx_send_client_message moved to xselect.c.
+
+2004-02-02 Eli Zaretskii <eliz@gnu.org>
+
+ * fileio.c (Fcopy_file): If NEWNAME is a directory, expand the
+ basename of FILE relative to it, not FILE itself.
+
+2004-02-02 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (coding_restore_composition): Check invalid
+ composition data more rigidly.
+
+2004-01-30 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fileio.c (Fread_file_name_internal): Correctly handle the case
+ where insert-default-directory is nil.
+ (Fread_file_name): Always return an empty string if the user exits
+ with an empty minibuffer. Adapt the docstring accordingly.
+ (syms_of_fileio): Adapt the docstring of insert-default-directory
+ to the change in Fread_file_name.
+
+2004-01-29 Eli Zaretskii <eliz@gnu.org>
+
+ * alloca.c [!alloca]: Fix the prototype for xfree.
+
+2004-01-29 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (string_char_to_byte): Optimize for ASCII only string.
+ (string_byte_to_char): Likewise.
+
+2004-01-28 Peter Runestig <peter@runestig.com>
+
+ * makefile.w32-in, w32fns.c: Add `default-printer-name' function.
+
+2004-01-27 Steven Tamm <steventamm@mac.com>
+
+ * unexmacosx.c (unexec_copy): Do not copy more than was
+ requested to prevent overwriting during unexec.
+
+2004-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * process.c (sigchld_handler): Add comment about not calling malloc.
+
+ * process.h: Add extern to synch_process_termsig.
+
+2004-01-27 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (make_mac_frame, make_mac_terminal_frame):
+ Move setting of scroll bars from make_mac_frame to
+ make_mac_terminal_frame to prevent clobbering of scroll-bar-mode.
+
+2004-01-26 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (Freplace_match): Handle nonexistent
+ back-references properly.
+
+2004-01-03 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (decode_any_window): New function.
+ (Fwindow_height, Fwindow_width, Fwindow_edges)
+ (Fwindow_pixel_edges, Fwindow_inside_edges)
+ (Fwindow_inside_pixel_edges): Use decode_any_window.
+
+2004-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * process.h: synch_process_termsig new variable.
+
+ * callproc.c: Define synch_process_termsig.
+ (Fcall_process): Initiate synch_process_termsig to zero and
+ check if non-zero and get signal name after subprocess has ended.
+
+ * process.c (sigchld_handler): Set synch_process_termsig
+ if terminated by a signal. synch_process_death setting removed.
+
+ * sysdep.c (mkdir, rmdir): Also check synch_process_termsig.
+
+2004-01-26 Andreas Schwab <schwab@suse.de>
+
+ * print.c (print_preprocess): Declare size as EMACS_INT to not
+ lose bits.
+ (print_object): Likewise.
+ * alloc.c (Fpurecopy): Likewise.
+
+2004-01-25 Luc Teirlinck <teirllm@auburn.edu>
+
+ * window.c (Fwindow_minibuffer_p): Doc fix.
+
+2004-01-24 Jonathan Yavner <jyavner@member.fsf.org>
+
+ * editfns.c (Fformat): Make both passes accept the same set of flags.
+
+2004-01-23 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (Fmd5): If OBJECT is a buffer different from the current
+ one, set buffer to OBJECT temporarily.
+
+2004-01-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * keyboard.c (kbd_buffer_gcpro): Remove.
+ (kbd_buffer_store_event, clear_event, Fdiscard_input)
+ (stuff_buffered_input, init_keyboard, syms_of_keyboard):
+ Don't initialize and/or maintain the variable any more. It was made
+ redundant by my commit of 2003-06-15.
+
+ * lisp.h [USE_LSB_TAG && !DECL_ALIGN]: Signal an error.
+
+2004-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * lisp.h: Add undef DECL_ALIGN.
+
+2004-01-21 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * process.c (wait_reading_process_input) [SYNC_INPUT]:
+ Check interrupt_input_pending explicitly.
+
+ * lisp.h (QUIT) [SYNC_INPUT]: Check interrupt_input_pending as well.
+
+ * keyboard.c (handle_async_input): New fun,
+ extracted from input_available_signal.
+ (input_available_signal, reinvoke_input_signal): Use it.
+
+2004-01-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * buffer.c (buffer_defaults, buffer_local_symbols): Use DECL_ALIGN.
+
+ * lisp.h [USE_LSB_TAG]: Add definitions for Lisp_Object value
+ manipulation macros for when tags are in the lower bits.
+ (struct Lisp_Free) [USE_LSB_TAG]: Add padding.
+ (DECL_ALIGN): New macro.
+ (DEFUN): Use it.
+
+ * lisp.h [ENABLE_CHECKING]: Don't force union type.
+
+ * s/darwin.h (__attribute__): Remove outdated workaround.
+
+ * macterm.c (main) [USE_LSB_TAG]: Don't range check the ram.
+
+ * alloc.c (lisp_malloc, lisp_align_malloc) [USE_LSB_TAG]:
+ Don't check range of malloc address.
+ (pure_alloc) [USE_LSB_TAG]: Enforce alignment.
+
+ * process.c (wait_reading_process_input): Lisp_Object/int mixup.
+
+ * dired.c (Ffile_attributes): Lisp_Object/int mixup.
+
+2004-01-19 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fontset_font_pattern): Fix previous change.
+
+2004-01-16 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * xdisp.c (Voverflow_newline_into_fringe)
+ (move_it_in_display_line_to, redisplay_internal)
+ (update_window_fringes, redisplay_window, display_line, window):
+ Add `#ifdef HAVE_WINDOW_SYSTEM' around fringe-drawing stuff, so
+ that it compiles without a window-system.
+ * dispnew.c (direct_output_for_insert, update_window): Likewise.
+
+2004-01-16 Kim F. Storm <storm@cua.dk>
+
+ * buffer.h (struct buffer): New member indicate_buffer_boundaries.
+
+ * buffer.c (init_buffer_once): Set buffer_defaults and
+ buffer_local_flags for indicate_buffer_boundaries.
+ (syms_of_buffer): Defvar_per_buffer it, and defvar_lisp_nopro
+ default- variable for it.
+
+ * dispextern.h (struct glyph_row): New members left_fringe_bitmap,
+ right_fringe_bitmap, redraw_fringe_bitmaps_p for new fringe handling.
+ New members exact_window_width_line_p and cursor_in_fringe_p for
+ overflowing newlines into right fringe.
+ New members indicate_bob_p, indicate_top_line_p, indicate_eob_p,
+ and indicate_bottom_line_p for buffer boundaries and scrolling.
+ (enum fringe_bitmap_type): Add UP_ARROW_BITMAP, DOWN_ARROW_BITMAP,
+ FIRST_LINE_BITMAP, LAST_LINE_BITMAP, FILLED_BOX_CURSOR_BITMAP,
+ HOLLOW_BOX_CURSOR_BITMAP, BAR_CURSOR_BITMAP, HBAR_CURSOR_BITMAP,
+ and HOLLOW_SQUARE_BITMAP.
+ (draw_fringe_bitmap, draw_window_fringes, update_window_fringes):
+ Add prototypes.
+
+ * dispnew.c (row_equal_p, update_window_line): Compare fringe bitmaps
+ instead of related indicator fields.
+ Compare exact_window_width_line_p and cursor_in_mouse_face_p indicators.
+ (direct_output_for_insert): Handle exact width lines like
+ contined lines. Call update_window_fringes.
+ (update_window): Call update_window_fringes.
+ (scrolling_window): Don't skip desired rows with changed bitmaps.
+ Check if fringe bitmaps changes when assigning scrolled rows.
+
+ * xdisp.c (Voverflow_newline_into_fringe): New variable.
+ (IT_OVERFLOW_NEWLINE_INTO_FRINGE): New macro.
+ (move_it_in_display_line_to): Overflow newline into fringe for
+ rows that are exactly as wide as the window.
+ (up_arrow_bits, down_arrow_bits, first_line_bits, last_line_bits)
+ (filled_box_cursor_bits, hollow_box_cursor_bits, bar_cursor_bits)
+ (hbar_cursor_bits, hollow_square_bits): New fringe bitmaps.
+ (fringe_bitmaps): Add new bitmaps.
+ (draw_fringe_bitmap): Make extern. Remove WHICH arg.
+ Select proper bitmap for cursor in fringe when appropriate.
+ Handle alignment of bitmap to top or bottom of row.
+ (draw_row_fringe_bitmaps): Don't select bitmaps here; that is now
+ done by update_window_fringes.
+ (update_window_fringes, draw_window_fringes): New functions.
+ (redisplay_internal): Call update_window_fringes in case only
+ cursor row is updated.
+ (redisplay_window): Call update_window_fringes.
+ Explicitly call draw_window_fringes if redisplay was done using
+ the current matrix or the overlay arrow is in the window.
+ (try_window_reusing_current_matrix): Mark scrolled rows for
+ fringe update (to update buffer-boundaries / scrolling icons).
+ (find_last_unchanged_at_beg_row): Handle exact width lines line
+ continued lines.
+ (display_line): Overflow newline into fringe for rows that are
+ exactly as wide as the window. Don't append space for newline
+ in this case.
+ (notice_overwritten_cursor): Explicitly clear cursor bitmap
+ in fringe as if it had been overwritten.
+ (erase_phys_cursor): Erase cursor bitmap in fringe.
+ (syms_of_xdisp): Mark show-trailing-whitespace and
+ void-text-area-pointer as user options.
+ DEFVAR_LISP Voverflow_newline_into_fringe. Enable by default.
+
+ * xterm.c (x_update_window_end): Call draw_window_fringes.
+ (x_after_update_window_line): Just set redraw_fringe_bitmaps_p
+ in row instead of actually drawing fringe bitmaps.
+ (x_draw_fringe_bitmap): Handle bottom aligned bitmaps.
+ (x_draw_window_cursor): Draw cursor in fringe.
+
+ * w32term.c (x_update_window_end): Call draw_window_fringes.
+ (x_after_update_window_line): Just set redraw_fringe_bitmaps_p
+ in row instead of actually drawing fringe bitmaps.
+ (w32_draw_fringe_bitmap): Handle bottom aligned bitmaps.
+ (w32_draw_window_cursor): Draw cursor in fringe.
+
+ * macterm.c (x_update_window_end): Call draw_window_fringes.
+ (x_after_update_window_line): Just set redraw_fringe_bitmaps_p
+ in row instead of actually drawing fringe bitmaps.
+ (x_draw_fringe_bitmap): Handle bottom aligned bitmaps.
+ (mac_draw_window_cursor): Draw cursor in fringe.
+
+2004-01-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Don't handle characters that are part
+ of an old style (XLookupString) compose sequence.
+
+2004-01-15 Kenichi Handa <handa@m17n.org>
+
+ * search.c (Freplace_match): Use make_multibyte_string or
+ make_unibyte_string according to the buffer multibyteness.
+
+2004-01-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (struct interval_block, struct string_block)
+ (struct symbol_block, struct marker_block, live_string_p)
+ (live_cons_p, live_symbol_p, live_float_p, live_misc_p):
+ Better preserve alignment for objects in blocks.
+ (FLOAT_BLOCK_SIZE): Adjust for possible alignment padding.
+
+ * lread.c (defvar_per_buffer): Remove dead declaration.
+
+ * macterm.c (do_check_ram_size): Don't hardcode the lisp address
+ space size.
+
+2004-01-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (popup_get_selection): Check new parameter down_on_keypress
+ if a key press should pop down. Only pop down if a key is pressed
+ outside the menu/dialog.
+ (create_and_show_popup_menu): Pass 0 for down_on_keypress to
+ popup_get_selection.
+ (create_and_show_dialog): Pass 1 for down_on_keypress to
+ popup_get_selection.
+
+2004-01-11 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * alloc.c (allocate_vectorlike): Surround calls to mallopt with
+ BLOCK/UNBLOCK_INPUT.
+
+2004-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
+ specified.
+
+2004-01-08 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Fformat): Fix '&' to '&&'.
+
+2004-01-08 Andreas Schwab <schwab@suse.de>
+
+ * print.c (print_preprocess) <case Lisp_Vectorlike>: Only mask
+ size if PSEUDOVECTOR_FLAG is set.
+
+2004-01-07 Kenichi Handa <handa@m17n.org>
+
+ * charset.c (Fdeclare_equiv_charset): Fix docstring.
+
+ * fontset.c (fontset_ref_via_base): Fix previous change.
+
+2004-01-07 Kim F. Storm <storm@cua.dk>
+
+ * process.c (read_process_output): Only activate adaptive
+ buffering if we read less than 256 bytes at a time.
+
+2004-01-06 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (buffer_posn_from_coords): Return both buffer/string
+ object and image object. Return glyph width and height.
+ (mode_line_string, marginal_area_string): Ditto.
+
+ * dispextern.h (buffer_posn_from_coords, mode_line_string)
+ (marginal_area_string): Fix prototypes.
+
+ * keyboard.h (POSN_POSN, POSN_SET_POSN): Rename macros from
+ POSN_BUFFER_POSN and POSN_SET_BUFFER_POSN. All uses changed.
+ (POSN_INBUFFER_P, POSN_BUFFER_POSN): New macros.
+
+ * keyboard.c (make_lispy_position): Use modified mode_line_string,
+ buffer_posn_from_coords, and marginal_area_string functions to
+ include both string object and image object in the lispy position.
+ Also add actual glyph width and height to position.
+ (read_key_sequence): Use real buffer position from mouse
+ event to find keymap property even when click is in marginal area.
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Use modified
+ mode_line_string and marginal_area_string functions to handle
+ both string object and image object properties.
+
+2004-01-06 Andreas Schwab <schwab@suse.de>
+
+ * syntax.c (skip_chars): Treat '-' at end of string as ordinary
+ character.
+
+2004-01-02 Andreas Schwab <schwab@suse.de>
+
+ * macterm.c (emacs_options, x_initialized, same_x_server):
+ Remove unused (and duplicated) definitions.
+
+2004-01-02 Kim F. Storm <storm@cua.dk>
+
+ * process.h (struct Lisp_Process): New members for adaptive read
+ buffering: adaptive_read_buffering, read_output_delay, and
+ read_output_skip.
+
+ * process.c (ADAPTIVE_READ_BUFFERING): New conditional.
+ (READ_OUTPUT_DELAY_INCREMENT, READ_OUTPUT_DELAY_MAX)
+ (READ_OUTPUT_DELAY_MAX_MAX): New constants.
+ (process_output_delay_count, process_output_skip): New vars.
+ (Vprocess_adaptive_read_buffering): New variable.
+ (make_process): Initialize adaptive read buffering members.
+ (Fstart_process): Set adaptive_read_buffering member.
+ (deactivate_process): Cleanup adaptive read buffering.
+ (wait_reading_process_input): Temporarily omit delayed
+ subprocesses from the set of file descriptors to read from;
+ adjust the select timeout if we skipped any subprocesses.
+ (read_process_output): Increase adaptive read buffering delay if
+ we read less than a full buffer; reduce delay when we read a
+ full buffer.
+ (send_process): Simplify using local Lisp_Process var.
+ Reset adaptive read buffering delay after write.
+ (init_process): Initialize process_output_delay_count and
+ process_output_skip.
+ (syms_of_process): DEFVAR_LISP Vprocess_adaptive_read_buffering.
+
+2004-01-01 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_text_out): Use s->font, for consistency with callers.
+
+2003-12-30 Luc Teirlinck <teirllm@auburn.edu>
+
+ * print.c (Ferror_message_string): Add hyperlink in the docstring
+ to the definition of `signal' in the Elisp manual.
+ * eval.c (Fsignal): Ditto.
+
+2003-12-29 James Clark <jjc@jclark.com>
+
+ * fns.c (internal_equal): Return t for two NaN arguments.
+
+2003-12-29 Richard M. Stallman <rms@gnu.org>
+
+ * data.c (store_symval_forwarding): Handle setting
+ default-fill-column, etc., by changing the value in
+ buffers that use the default.
+
+ * minibuf.c (Fset_minibuffer_window): Doc fix.
+
+ * fileio.c (choose_write_coding_system): Ignore auto_saving
+ if using the visited file for auto saves.
+ (Fwrite_region): Don't update SAVE_MODIFF
+ if auto-saving in visited file.
+
+2003-12-29 Kenichi Handa <handa@m17n.org>
+
+ * dispextern.h (face_font_available_p): Extern it.
+
+ * fontset.c (Voverriding_fontspec_alist): New variable.
+ (lookup_overriding_fontspec): New function.
+ (fontset_ref_via_base): Call lookup_overriding_fontspec if necessary.
+ (fontset_font_pattern): Likewise.
+ (regulalize_fontname): New function.
+ (Fset_fontset_font): Call regulalize_fontname.
+ (Fset_overriding_fontspec_internal): New function.
+ (syms_of_fontset): Initialize and staticpro Voverriding_fontspec_alist.
+ Defsubr Sset_overriding_fontspec_internal.
+
+ * xfaces.c (face_font_available_p): New function.
+
+2003-12-28 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fother_buffer): Don't crash if BUF is nil
+ or if its name is nil.
+
+ * buffer.c (Fkill_buffer): Don't delete auto-save file
+ if it's the same as the visited file.
+
+2003-12-28 Luc Teirlinck <teirllm@auburn.edu>
+
+ * coding.c (Fcheck_coding_system): Doc fix.
+
+2003-12-28 Kim F. Storm <storm@cua.dk>
+
+ * Makefile.in (eval.o): Depend on dispextern.h.
+
+ * dispnew.c (buffer_posn_from_coords): Fix calculation of dy for
+ image glyph using image's ascent.
+ (mode_line_string): Return image glyph as object clicked on.
+ Adjust y0 for image glyph using image's ascent.
+
+ * dispextern.h (FACE_ID_BITS, MAX_FACE_ID): New defines.
+ (struct glyph): New members, ascent and descent. Used to save
+ this glyph's ascent and descent, instead of having.
+ (struct glyph): Declare member face_id using FACE_ID_BITS.
+ (find_hot_spot): Add prototype.
+
+ * keyboard.c (Qimage): Remove extern (now in lisp.h).
+ (QCmap): Declare extern.
+ (make_lispy_position): When position is inside image hot-spot,
+ use hot-spot element's id as posn element.
+
+ * lisp.h (IMAGEP): New macro to test for image object type.
+ (Qimage): Declare extern.
+
+ * macfns.c (Qimage): Remove extern (now in lisp.h).
+ (valid_image_p, parse_image_spec): Use IMAGEP macro.
+
+ * macterm.c (Qface, Qmouse_face): Remove unused externs.
+
+ * w32fns.c (Qimage): Remove extern (now in lisp.h).
+ (valid_image_p, parse_image_spec): Use IMAGEP macro.
+
+ * w32menu.c (Qmouse_click, Qevent_kind): Remove unused externs.
+
+ * w32term.c (Qface, Qmouse_face): Remove unused externs.
+
+ * xdisp.c (Qarrow, Qhand, Qtext, Qpointer): New variables for
+ pointer types.
+ (Qrelative_width, Qalign_to): Remove unused variables.
+ (Vvoid_text_area_pointer): Replace Vshow_text_cursor_in_void.
+ (QCmap, QCpointer, Qrect, Qcircle, Qpoly): New variables for image
+ maps.
+ (x_y_to_hpos_vpos): Return glyph relative coordinates through new
+ dx and dy args. Remove buffer_only_p arg (always 0). Simplify
+ code accordingly.
+ (get_glyph_string_clip_rect): Draw cursor using glyph's rather
+ than row's ascent and height, to get sensible height on tall rows.
+ (build_desired_tool_bar_string): Remove Qimage extern.
+ (get_tool_bar_item): Fix call to x_y_to_hpos_vpos.
+ (produce_image_glyph): Adjust it.ascent to minimum row ascent if
+ image glyph is alone on the last line.
+ (append_glyph, append_composite_glyph, produce_image_glyph)
+ (append_stretch_glyph): Set glyph's ascent and descent.
+ (on_hot_spot_p): New function to check if position is inside an
+ rectangular, circular, or polygon-shaped image hot-spot,
+ (find_hot_spot): New function to search for image hot-spot.
+ (Flookup_image_map): New defun to search for image hot-spot.
+ (define_frame_cursor1): New aux function to determine frame
+ pointer.
+ (note_mode_line_or_margin_highlight, note_mouse_highlight): Handle
+ `pointer' text property and :pointer image property to control
+ frame pointer shape. Detect image hot-spots for pointer and
+ help_echo properties. Use define_frame_cursor1.
+ (note_mouse_highlight): Use Vvoid_text_area_pointer.
+ (syms_of_xdisp): Defsubr new defun. Intern and staticpro new
+ variables. DEFVAR_LISP Vvoid_text_area_pointer instead of
+ Vshow_text_cursor_in_void.
+
+ * xfaces.c (cache_face): Abort if c->size exceeds MAX_FACE_ID.
+
+ * xfns.c (x_set_mouse_color): Remove bogus x_check_errors call.
+ (Qimage): Remove extern (now in lisp.h).
+ (valid_image_p, parse_image_spec): Use IMAGEP macro.
+
+ * xmenu.c (show_help_event): Remove unused code.
+
+ * xterm.c (Qface, Qmouse_face): Remove unused externs.
+ (x_draw_hollow_cursor): Draw cursor using glyph's rather than
+ row's ascent and descent, to get a sensible height on tall rows.
+
+2003-12-25 Luc Teirlinck <teirllm@auburn.edu>
+
+ * minibuf.c (Fcompleting_read): Undo previous change.
+
+2003-12-25 Lars Hansen <larsh@math.ku.dk>
+
+ * dired.c (Fdirectory_files, Fdirectory_files_and_attributes):
+ Arguments GCPRO'ed in call to file name handler.
+
+2003-12-25 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * termcap.c (tgetst1): Scan for "%pN"; if all
+ N are continuous in [1,9], remove all "%pN".
+
+2003-12-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_frame_set_char_size): Call x_wm_set_size_hint.
+
+ * xfaces.c (lface_fully_specified_p): Take into account that
+ MAC OS always have unspecified stipple.
+
+2003-12-24 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * tparam.c (tparam1): Add handling for `%pN', which
+ means use param N for the next substitution.
+
+2003-12-24 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * xfaces.c (Fcolor_gray_p): Fix omission bug:
+ In case `frame' is nil, consult the selected frame.
+ (Fcolor_supported_p): Likewise.
+
+2003-12-23 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Frandom, Fstring_make_multibyte, Fset_char_table_range):
+ Doc fixes.
+
+ * minibuf.c (read_minibuf): Allow INITIAL to be a cons of a string
+ and an integer. Adapt the introductory comment accordingly.
+ (Fread_from_minibuffer): Delete code moved into read_minibuf.
+ Doc fix.
+ (Fread_minibuffer, Fread_no_blanks_input): Adapt to changes in
+ read_minibuf.
+ (Fcompleting_read): Delete code moved into read_minibuf.
+ (Ftest_completion): Make it handle obarrays and hash tables correctly.
+
+2003-12-03 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (decode_coding_iso2022): Fix for preserving UTF-8
+ encoding sequence.
+
+2003-12-01 Kenichi Handa <handa@m17n.org>
+
+ * composite.c (syms_of_composite): Don't make the compostion hash
+ table week.
+
+2003-11-30 Luc Teirlinck <teirllm@auburn.edu>
+
+ * intervals.h: Add EXFUN for Fget_char_property_and_overlay.
+ * textprop.c (Fget_char_property_and_overlay): New function.
+ (syms_of_textprop): Defsubr it.
+
+2003-11-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * dispnew.c (buffer_posn_from_coords): Add ifdef HAVE_WINDOW_SYSTEM
+ to compile on terminal configuration.
+
+ * fileio.c (Fread_file_name): Check use_file_dialog also before
+ calling Fx_file_dialog.
+
+ * fns.c (use_file_dialog): New variable.
+ (syms_of_fns): DEFVAR_BOOL use-file-dialog.
+
+2003-11-29 Kim F. Storm <storm@cua.dk>
+
+ * msdos.c (Qcursor_type, Qbar, Qhbar): Declare extern.
+ (syms_of_msdos): Don't intern and staticpro them.
+
+2003-11-27 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (buffer_posn_from_coords): Calculate and return pixel
+ coordinates relative to glyph at posn. If glyph is an image,
+ return that as object at posn. Callers changed.
+ (mode_line_string, marginal_area_string): Calculate and return
+ pixel coordinates relative to glyph. Callers changed.
+
+ * dispextern.h (buffer_posn_from_coords, mode_line_string)
+ (marginal_area_string): Fix prototypes.
+ (window_box_left_offset, window_box_right_offset): Add prototypes.
+
+ * frame.h (get_specified_cursor_type, get_window_cursor_type):
+ Remove prototypes.
+
+ * keyboard.h (EVENT_CLICK_COUNT, POSN_SCROLLBAR_PART): Fix defines.
+
+ * keyboard.c (make_lispy_position): Add x and y coordinates
+ relative to the current glyph as 7th element of position.
+ If glyph is an image, return it in the object element.
+ (read_key_sequence): Skip checks for keymap property in cases
+ where POSN_STRING is not a string (e.g. an image).
+
+ * xdisp.c (Vdisplay_pixels_per_inch): New variable.
+ (Vshow_text_cursor_in_void): New variable.
+ (glyph_to_pixel_coords): Don't use negative hpos.
+ (x_y_to_hpos_vpos): Fix for partially visible first glyph.
+ (append_stretch_glyph): Change ascent arg to be actual value
+ in pixels rather than ratio to height. Callers changed.
+ (calc_pixel_width_or_height): New aux function, implementing
+ pixel based artihmetic for glyph widths and heights.
+ (produce_stretch_glyph): Use calc_pixel_width_or_height for
+ :width, :height, :align-to, and :ascent, thus allowing these to
+ be specified in pixels as well as multiples of characters.
+ Don't produce stretch glyphs with zero width or height.
+ (get_specified_cursor_type): Declare static.
+ (get_window_cursor_type): Declare static. Add glyph arg to be
+ able to know when cursor is on an image; always substitute
+ hollow-box cursor for filled-box cursor on images, to avoid
+ negative images and flicker when blinking the cursor.
+ (display_and_set_cursor): Pass glyph to get_window_cursor_type.
+ (note_mode_line_or_margin_highlight): Use non-text cursor rather
+ than vertical scroll-bar cursor in display margins.
+ (note_mouse_highlight): Use non-text cursor rather than text
+ cursor in fringes and over images in the text area.
+ Use non-text cursor when mouse pointer is outside editable text,
+ i.e. in the void after end-of-line or end-of-buffer; this was
+ already done for W32, but is now standard for all systems --
+ user can toggle show-text-cursor-in-void to get old behaviour.
+ (syms_of_xdisp): DEFVAR_LISP Vshow_text_cursor_in_void and
+ Vdisplay_pixels_per_inch.
+
+2003-11-25 Andreas Schwab <schwab@suse.de>
+
+ * fns.c (internal_equal) <case Lisp_Vectorlike>: Declare size as
+ EMACS_INT to not lose bits.
+ (Ffillarray): Don't set bits beyond the size of a bool vector.
+
+2003-11-25 Kim F. Storm <storm@cua.dk>
+
+ * print.c (Fredirect_debugging_output) [!GNU_LINUX]: Do not
+ define this defun on systems that cannot use stderr as lvalue.
+
+2003-11-24 Gerd Moellmann <gerd@gnu.org>
+
+ * s/freebsd.h (LD_SWITCH_SYSTEM_TEMACS)
+ [__FreeBSD_version >= 500042]: Define as -znocombreloc because
+ ld's default is incompatible with unexec.
+
+2003-11-23 Kim F. Storm <storm@cua.dk>
+
+ * window.c (enum window_loop): Add REDISPLAY_BUFFER_WINDOWS.
+ (window_loop): Handle REDISPLAY_BUFFER_WINDOWS.
+ (Fforce_window_update): New defun.
+ (syms_of_window): Defsubr it.
+ (Fset_window_margins, Fset_window_fringes): Doc fix.
+
+ * print.c (Fredirect_debugging_output): New defun.
+ (syms_of_print): Defsubr it.
+
+2003-11-22 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Fset_char_table_parent): Doc fix.
+
+2003-11-22 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (buffer_posn_from_coords): Return actual row/column
+ for glyph clicked on, rather than (unused) pixel positions.
+ (mode_line_string, marginal_area_string): Change X and Y args to
+ pointers for returning actual row/column for glyph clicked on.
+ Simplify and optimize loops.
+
+ * dispextern.h (mode_line_string, marginal_area_string):
+ Update prototypes.
+
+ * keyboard.c (make_lispy_position): New function for generating
+ mouse click positions from frame and pixel coordinates.
+ Enhanced to return buffer position and actual row/column for
+ events outside the text area using updated mode_line_string and
+ marginal_area_string functions.
+ Return left-fringe and right-fringe clicks as such, rather than
+ clicks in text area.
+ (make_lispy_event) [USE_X_TOOLKIT, USE_GTK]: Don't call
+ pixel_to_glyph_coords, as we never use the results.
+ (make_lispy_event): Use make_lispy_position for MOUSE_CLICK_EVENT,
+ WHEEL_EVENT, and DRAG_N_DROP_EVENT to replace redundant code.
+ Eliminate unused code in WHEEL_EVENT handling.
+ (make_lispy_movement): Use make_lispy_position.
+
+ * window.c (coordinates_in_window): Remove redundant tests.
+ Fix returned X pixel value for left-margin.
+
+ * xdisp.c (note_mode_line_or_margin_highlight): Adapt to new
+ mode_line_string and marginal_area_string parameters.
+
+2003-11-22 Lars Hansen <larsh@math.ku.dk>
+
+ * w32.c (struct the_group, getgrgid): Add.
+ * mac.c (struct my_group, getgrgid): Add.
+
+2003-11-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Fassq, Fassoc, Frassq, Frassoc): Doc fixes.
+
+2003-11-21 Lars Hansen <larsh@math.ku.dk>
+
+ * dired.c (Ffile_attributes): Add parameter ID-FORMAT and
+ include in call to file name handler. Optionally translate numeric
+ UID and GID to strings. Update docstring.
+ (directory_files_internal): Add parameter ID-FORMAT.
+ (Fdirectory_files_and_attributes): Add parameter ID-FORMAT and
+ include in call to file name handler and call to
+ directory_files_internal. Update Docstring.
+ (Fdirectory_files): Add dummy parameter in call to
+ directory_files_internal.
+ * lisp.h (Qinteger): Add.
+ (Qinteger_or_floatp, Qinteger_or_float_or_marker_p): Remove.
+ (Ffile_attributes): Add parameter.
+ * data.c (Qinteger): Export.
+
+2003-11-21 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Freverse, Fnreverse): Doc fixes.
+
+2003-11-19 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (init_iterator): Initialize it->start to position
+ before reseating (in case start position is invisible).
+ (init_to_row_start): Set it->start to row-start.
+ (redisplay_window): Accept optional_new_start if start position
+ is invisible (in which case IT_CHARPOS overshoots PT).
+ (display_line): Setup row->start from it->start (rather than
+ it->current which is wrong if first char on line is invisible).
+ When done, reseat it->start to it->current (= start of next row).
+ (expose_area): Fix exposure of text area when first char (e.g. TAB)
+ is only partially visible.
+
+ * dispextern.h (struct it): New member start.
+
+2003-11-17 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (make_float, Fcons): Clear the markbit at init time.
+ (make_float, Fcons, Fmake_symbol, allocate_misc): Move the increment
+ of block_index outside of the macro call.
+ (Fgarbage_collect): Remove null code.
+
+ * m/amdx86-64.h: Don't redefine XPNTR.
+
+ * keyboard.c (parse_modifiers, apply_modifiers): Use INTMASK instead
+ of VALMASK.
+
+ * fns.c (hashfn_eq, hashfn_eql, hashfn_equal, hash_put)
+ (sxhash_string, sxhash): Use INTMASK instead of VALMASK.
+ (maybe_resize_hash_table): Use MOST_POSITIVE_FIXNUM.
+
+ * lisp.h (VALMASK): Only define for non-union type.
+ (MARKBIT): Remove.
+ (ARRAY_MARK_FLAG): Use previous value of MARKBIT.
+ (XTYPE): Define unconditionally.
+ (XSETTYPE): Remove one more remnant.
+ (EQ): Define differently for the union and non-union cases.
+ (INTMASK): New bit mask.
+ (struct Lisp_Marker): Move down to prepare for upcoming patch.
+ (GC_EQ): Delegate to EQ.
+
+ * coding.c (coding_restore_composition): Lisp_Object/int mixup.
+
+2003-11-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_window_to_scroll_bar): Move check of display to
+ where window_id is compared.
+
+2003-11-17 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (struct it): New member first_vpos.
+
+ * xdisp.c (start_display): Set it->first_vpos.
+ (try_window_id): Use first_vpos to start display in first _text_
+ line if no reusable lines at start of window with header line.
+
+2003-11-16 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * w32fns.c (XPutPixel):
+ * w32bdf.c (w32_init_bdf_font):
+ * sunfns.c (sel_read):
+ * process.c (Fmake_network_process):
+ * frame.c (store_frame_param):
+ * fontset.c (Fset_fontset_font):
+ * emacs.c (shut_down_emacs):
+ * ccl.c (ccl_driver): Remove period at end of error message.
+
+ * config.in: Regenerate.
+
+ * xfns.c (x_window_to_frame, x_any_window_to_frame)
+ (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
+ (x_top_window_to_frame): Add Display* argument to xg_win_to_widget.
+ (x_create_bitmap_mask, xg_set_icon, create_frame_xic)
+ (xic_set_statusarea, x_window, gif_load): Formatting adjustments.
+
+ * xterm.h (struct x_display_info): New field xg_cursor for GTK.
+
+ * xterm.c: Add Display * to x_window_to_scroll_bar declaration.
+ (XTmouse_position, handle_one_xevent): Pass Display* to
+ x_window_to_scroll_bar.
+ (x_window_to_scroll_bar): Take a Display* argument.
+ Check that display for frame is equal to Display* argument.
+ (event_handler_gdk): Remove current_dpyinfo. Get dpyinfo from
+ x_display_info_for_display instead. Use Display in xev instead
+ of GDK_DISPLAY.
+ (x_dispatch_event): Call x_display_info_for_display.
+ (XTread_socket): Move GTK part out of loop. current_dpyinfo removed.
+ (x_connection_closed): Call xg_display_close for GTK.
+ (x_term_init): Call xg_display_open for additional displays.
+ Initiate dpyinfo->xg_cursor with call to xg_create_default_cursor
+ for GTK.
+
+ * xmenu.c (single_menu_item, mouse_position_for_popup)
+ (x_activate_menubar): Formatting adjustments.
+
+ * xdisp.c (update_tool_bar, redisplay_tool_bar): Formatting
+ adjustments.
+
+ * gtkutil.c (xg_get_gdk_display, xg_set_screen, xg_display_open)
+ (xg_display_close, xg_create_default_cursor)
+ (xg_get_gdk_pixmap_and_mask): New functions for multiple display
+ handling.
+ (xg_left_ptr_cursor): Remove.
+ (xg_set_cursor): Change cursor to GdkCursor*. Do not create
+ cursor here.
+ (xg_win_to_widget): Take Display* argument, call
+ gdk_xid_table_lookup_for_display.
+ (xg_create_frame_widgets, xg_get_file_name, create_menus)
+ (xg_create_widget, xg_modify_menubar_widgets): Call xg_set_screen.
+ (xg_create_widget, xg_create_scroll_bar): Use xg_cursor
+ in FRAME_X_DISPLAY_INFO.
+ (xg_get_scroll_id_for_window): Take Display* argument.
+ (update_frame_tool_bar): Call xg_get_gdk_pixmap_and_mask.
+ (xg_initialize): Remove xg_left_ptr_cursor.
+
+ * gtkutil.h (xg_get_scroll_id_for_window, xg_win_to_widget): Add
+ Display* argument.
+ (xg_display_open, xg_display_close, xg_create_default_cursor): Declare.
+
+2003-11-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_detect_focus_change): Do not change focus frame for
+ Enter/LeaveNotify if the current focus frame has explicit focus.
+
+2003-11-14 Kim F. Storm <storm@cua.dk>
+
+ * dispnew.c (update_text_area): Fix redisplay error when hscroll
+ is active and first glyph is only partially visible.
+
+2003-11-13 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (select_frame_for_redisplay): New function.
+ (redisplay_internal): Record also selected_frame for
+ unwind_redisplay. Call select_frame_for_redisplay before
+ redrawing each frame.
+ (unwind_redisplay): Argument changed to a cons.
+
+2003-11-12 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Fstring_to_multibyte): Doc fix.
+
+2003-11-11 Kenichi Handa <handa@m17n.org>
+
+ * xterm.c (x_list_fonts): Fix excluding of auto-scaled fonts.
+
+2003-11-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_window): Set XtNx and XtNy in shell widget for
+ program specified positions.
+
+2003-11-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (XAW_ARROW_SCROLLBARS): Define it for Xaw 1.5E.
+
+2003-11-08 Kenichi Handa <handa@m17n.org>
+
+ * Makefile.in (lisp): Add kannada.el.
+ (shortlisp): Likewise.
+
+2003-11-07 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (coding_allocate_composition_data):
+ Reset coding->composing to COMPOSITION_NO.
+ (coding_restore_composition): Detect invalid composition data.
+ Give Fstring and Fvector a Lispy integer, not C int.
+
+2003-11-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * floatfns.c (Flogb): Don't use VALMASK.
+
+ * m/amdx86-64.h (VALBITS, XINT, XUINT): Remove.
+ * m/ia64.h (VALBITS, XINT, XUINT): Remove.
+
+ * lisp.h (XINT): Move the cast to clarify what is going on.
+ (GCTYPEMASK, XSETTYPE): Remove.
+ (XGCTYPE): Make it an alias of XTYPE.
+
+2003-11-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_term_init): Fix formatting.
+
+2003-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.h (xg_have_tear_offs): Declare.
+ (xg_keep_popup, xg_did_tearoff): Remove.
+
+ * gtkutil.c: Remove variable xg_did_tearoff.
+ (xg_have_tear_offs): New function.
+ (tearoff_remove): Just decrease xg_detached_menus.
+ (tearoff_activate): Increase xg_detached_menus and call
+ tearoff_remove when tearoff is removed.
+ (xg_keep_popup): Remove function.
+ (create_menus): Give add_tearoff_p as argument to recursive
+ call to create_menus.
+ (xg_create_widget): Use variables instead of multiple
+ strcmp. Tell create_menus to create tear off only for
+ menu bar menus.
+ (xg_update_menubar): Change title for a detached menu also.
+ (xg_modify_menubar_widgets): Always call xg_update_menubar, regardless
+ of deep_p.
+ (xg_initialize): Initialize xg_detached_menus, remove
+ initialization of xg_did_tearoff.
+
+ * xmenu.c (set_frame_menubar): For GTK, set deep_p if
+ xg_have_tear_offs returns non-zero.
+ (create_and_show_popup_menu): Remove setting of xg_did_tearoff and
+ call to xg_keep_popup.
+
+2003-11-01 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTread_socket): Handle menubar selection and grow
+ window only for mouseDown events.
+
+2003-10-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_term_init): For GTK part, increase x_initialized
+ to check for more than one display. Use error instead of return 0.
+
+2003-10-31 Andrew Choi <akochoi@shaw.ca>
+
+ * unexmacosx.c (unrelocate): New function (contributed by Nozomu Ando).
+ (copy_dysymtab): Call it.
+
+2003-10-31 Luc Teirlinck <teirllm@auburn.edu>
+
+ * eval.c (Fdefvaralias): Doc fix.
+
+2003-10-26 Luc Teirlinck <teirllm@auburn.edu>
+
+ * data.c (Fsetplist): Doc fix.
+
+2003-10-14 Lute Kamstra <lute@gnu.org>
+
+ * window.c (Fset_window_fringes): Clarify docstring.
+
+2003-10-14 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fset_window_margins): Simplify arg checking.
+
+2003-10-13 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (MAX_BUF_SIZE): Reduce to 2**15.
+ (print_partial_compiled_pattern): Replace assert with a printout.
+ (skip_noops, mutually_exclusive_p): Change args, values to re_char *.
+
+ * alloc.c (lisp_align_malloc): If BASE is 0, call memory_full.
+
+ * window.c (Fset_window_margins): Allow only integers as args.
+ (syms_of_window) <special-display-buffer-names,
+ special-display-regexps>: Doc fixes.
+
+2003-10-13 Lute Kamstra <lute@gnu.org>
+
+ * window.c (Fset_window_fringes): Elaborate docstring.
+
+2003-10-12 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTread_socket): Call DragWindow only for mouseDown events.
+
+ * s/darwin.h (GC_MARK_STACK): Define.
+
+2003-10-12 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * window.c (shrink_windows): New function.
+ (size_window): Call shrink_windows to calculate window sizes when
+ shrinking frame with more than one window.
+
+2003-10-12 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (compute_fringe_widths): Doc fix.
+
+2003-10-08 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Fcoding_system_p): Return t for auto-loading coding system.
+
+2003-10-07 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Qcoding_system_define_form): New variable.
+ (syms_of_coding): Intern and staticpro it.
+ (Fcheck_coding_system): Try to autoload the definition of
+ CODING-SYSTEM.
+
+2003-10-05 Luc Teirlinck <teirllm@auburn.edu>
+
+ * fns.c (Frequire): Doc fix.
+
+2003-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_send_client_event): New function as a base for
+ manipulating extended window manager hints.
+ (Fx_send_client_event): Remove unused variable s.
+
+ * w32term.c (w32_read_socket): Remove call to x_check_fullscreen_move,
+ that function is removed.
+
+ * xterm.c (x_set_offset): Use move_offset_left/top instead of
+ x/y_pixels_outer_diff.
+ (x_check_expected_move): Calculate move_offset_left/top.
+
+ * xterm.h (struct x_output): New members: move_offset_top/left.
+
+ * frame.c (x_set_frame_parameters): Remove x_fullscreen_move,
+ call x_set_offset directly.
+
+ * frame.h (enum): FULLSCREEN_MOVE_WAIT removed.
+
+ * frame.c (Fdelete_frame): Free decode_mode_spec_buffer.
+
+ * xterm.c (x_delete_display): Free font names and font_encoder
+ in dpyinfo->font_table.
+
+ * xfns.c (Fx_close_connection): Only call XFreeFont here.
+ Move xfree of font names to x_delete_display.
+
+ * xterm.h (struct x_display_info): New member, wm_type.
+ (struct x_output): New members, expected_top/left and
+ check_expected_move.
+
+ * xterm.c (handle_one_xevent): Reset wm_type when ReparentNotify
+ is received.
+ (handle_one_xevent): Rename x_check_expected_move from
+ x_check_fullscreen_move.
+ (x_set_offset): Only add WM decoration sizes to modified_top/left
+ for X_WMTYPE_A. Set check_expected_move when WM type is unknown.
+ (x_check_expected_move): Rename from x_check_fullscreen_move.
+ Removed fullscreen specific code. Use check_expected_move,
+ expected_left/top instead. Also, set wm_type.
+ (x_term_init): Initialize wm_type to unknown.
+
+ * frame.c (x_fullscreen_move): Remove addition of WM decoration
+ sizes to move_x/y.
+
+2003-10-03 Kenichi Handa <handa@m17n.org>
+
+ * macterm.c (x_load_font): Clear all members of FONTP before start
+ filling them.
+
+2003-10-02 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (fs_load_font): Don't set fontp->font_encoder to NULL
+ before calling find_ccl_program_func. Call find_ccl_program_func
+ only when fontp->font_encoder is not NULL.
+
+ * xterm.c (x_load_font): Clear all members of FONTP before start
+ filling them.
+
+2003-10-03 John Paul Wallington <jpw@gnu.org>
+
+ * keymap.c (map_keymap): Don't abort when binding is a vector.
+
+2003-10-02 Jason Rumney <jasonr@gnu.org>
+
+ * makefile.w32-in (emacs.o, coding.o, bytecode.o):
+ Sync dependencies with Makefile.in.
+ (alloca.o): Remove.
+
+ * w32fns.c (w32_load_system_font): Clear all members of FONTP before
+ filling them.
+
+ * w32bdf.c (w32_load_bdf_font): Likewise.
+
+2003-09-30 Richard M. Stallman <rms@gnu.org>
+
+ * term.c (set_tty_color_mode): Calculate current_mode_spec
+ regardless of value of VAL.
+
+ * intervals.c (graft_intervals_into_buffer):
+ Set BUF_INTERVALS (buffer)->up_obj when appropriate.
+ Handle over_used when splitting UNDER.
+
+2003-09-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * regex.c (regex_compile): Free the stack when returning from function.
+
+2003-09-28 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (Finternal_char_font): Change return value to
+ cons (FONT-NAME . GLYPH-CODE).
+
+2003-09-28 Eli Zaretskii <eliz@gnu.org>
+
+ * term.c (tty_setup_colors): Treat any negative argument as -1.
+
+2003-09-27 Gaute B Strokkenes <biggaute@uwc.net> (tiny change)
+
+ * process.c (send_process): Delete unused temp_buf.
+
+2003-09-26 Dave Love <fx@gnu.org>
+
+ * xterm.c (x_bitmap_mask): Declare.
+
+2003-09-25 Dave Love <fx@gnu.org>
+
+ * Makefile.in (fns.o): Depend on md5.h.
+
+2003-09-25 Kim F. Storm <storm@cua.dk>
+
+ * window.c (set_window_buffer): Fix redisplay problems when
+ switching between buffers with different display margin widths.
+
+2003-09-23 Kim F. Storm <storm@cua.dk>
+
+ * process.c (set_socket_option): Fix :bindtodevice option.
+ (Fset_network_process_option): Update process contact list when
+ setting option succeeds.
+ (Fmake_network_process): Doc fix.
+
+2003-09-23 Dave Love <fx@gnu.org>
+
+ * process.c (Fnetwork_interface_info): Use HAVE_STRUCT_IFREQ... macros.
+
+2003-09-22 Eli Zaretskii <eliz@gnu.org>
+
+ * term.c (set_tty_color_mode): Use INTEGERP to test whether a
+ color mode is an integer number (it could be -1).
+
+2003-09-22 Richard M. Stallman <rms@gnu.org>
+
+ * intervals.c (graft_intervals_into_buffer): Correct the main loop
+ in the case where OVER is longer than UNDER.
+
+2003-09-22 Masatake YAMATO <jet@gyve.org>
+
+ * window.c (Fset_window_scroll_bars): Validate the value of
+ `vertical_type'.
+
+2003-09-21 Kim F. Storm <storm@cua.dk>
+
+ * frame.c (Vdefault_frame_scroll_bars): New variable.
+ (x_set_vertical_scroll_bars): Use it instead of hardcoded values.
+ (syms_of_frame): DEFVAR_LISP it, and initialize according to
+ window-system default scroll bar position.
+
+ * window.c (Fwindow_scroll_bars): Doc fix.
+
+2003-09-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_set_offset): Take window manager decorations into account.
+
+2003-09-19 Richard M. Stallman <rms@gnu.org>
+
+ * atimer.h: Don't include lisp.h.
+ (P_): Define it here (as well as elsewhere).
+
+ * print.c (Fprin1_to_string): Move the PRINTPREPARE
+ later, so that PRINTFINISH won't unbind Qinhibit_modification_hooks.
+
+ * data.c (Fvariable_binding_locus): New function.
+ (syms_of_data): defsubr it.
+ (Flocal_variable_p): Delete duplicate call to indirect_variable.
+
+2003-09-18 Dave Love <fx@gnu.org>
+
+ * alloc.c (GC_MALLOC_CHECK): Move conditional undef after lisp.h.
+
+ * process.c (Fnetwork_interface_info): Fix type error.
+ (Fnetwork_interface_list): Doc fix.
+ (read_process_output, read_process_output): Delete unused var.
+
+2003-09-17 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fnetwork_interface_list, Fnetwork_interface_info):
+ Require HAVE_NET_IF_H and HAVE_SYS_IOCTL_H to include these fns.
+ (Fnetwork_interface_info): Check that ifreq struct has required
+ fields before accessing them; this requires that those fields are
+ defined as macros, which may be too restrictive on some platforms,
+ but it is better than failing on other platforms.
+ (syms_of_process): Only defsubr above fns when included.
+
+2003-09-17 Dave Love <fx@gnu.org>
+
+ * unexalpha.c: Don't include varargs.h.
+
+2003-09-17 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fset_process_sentinel): Add sentinel to childp plist
+ for network process.
+ (socket_options): Add `:' prefix to option names. Add optbit field.
+ (set_socket_option): Remove no_error arg and special handling of s < 0.
+ Return 1<<optbit for known option, 0 for unknown.
+ Do not interpret 0 as false for boolean option (only nil).
+ Pass failed option and value to report_file_error.
+ (Fset_network_process_options): Replace by Fset_network_process_option.
+ (Fset_network_process_option): New function to set just one option.
+ (Fmake_network_process): Allow :coding arg to be a cons.
+ Allow :server arg to be an integer specifying backlog size.
+ Remove :options arg, and allow options to be specified directly
+ as :KEY, VALUE pairs. Parse these options before binding socket.
+ As before, :reuseaddr t is default for a server process, but this
+ can now be disabled by specifying :reuseaddr nil.
+ (Fnetwork_interface_info): Rename from Fget_network_interface_info.
+ (init_process): Availability of network options is now checked with
+ simpler syntax (featurep 'make-network-process :OPTION); use loop to
+ setup features.
+ (syms_of_process): Fix defsubr's for the replaced functions.
+
+2003-09-16 Dave Love <fx@gnu.org>
+
+ * Makefile.in: Depend on coding.h.
+
+2003-09-14 Kim F. Storm <storm@cua.dk>
+
+ * process.c [HAVE_SOCKETS]: Include sys/ioctl.h and net/if.h.
+ (Fnetwork_interface_list, Fget_network_interface_info): New defuns.
+ (syms_of_process): Defsubr them.
+
+ * config.in: Regenerate.
+
+2003-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * m/sr2k.h (XMARKBIT, XUNMARK): Remove.
+ * m/news-r6.h (XUNMARK): Remove.
+ * m/mips.h (XUNMARK): Remove.
+ * m/mips-siemens.h (XUNMARK): Remove.
+ * m/iris4d.h (XUNMARK): Remove.
+ * m/hp800.h (XMARKBIT, XUNMARK): Remove.
+
+2003-09-11 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp.h (VALBITS): Don't remove 1 for the markbit.
+ (union Lisp_Object): Use unsigned int for types. Remove markbit.
+ (MARKBIT): Remove 1 from VALBITS so we still use same old val.
+ (XTYPE): Use unsigned right-shift.
+ (XMARKBIT, XMARK, XUNMARK): Remove.
+
+ * alloc.c (init_intervals, init_symbol, init_marker):
+ Don't preallocate anything.
+ (Fgarbage_collect, mark_object): Ignore the markbit.
+
+ * bytecode.c (mark_byte_stack, unmark_byte_stack): Ignore the markbit.
+
+2003-09-08 Lute Kamstra <lute@gnu.org>
+
+ * xdisp.c (pint2hrstr): New function.
+ (decode_mode_spec): Add `%i' and `%I' specs.
+ * buffer.c (syms_of_buffer): Document `%i' and `%I' constructs
+ for `mode-line-format'.
+
+2003-09-07 Andreas Schwab <schwab@suse.de>
+
+ * alloc.c: Use long instead of int when casting ABLOCKS_BUSY to
+ avoid warning.
+
+2003-09-07 Eli Zaretskii <eliz@gnu.org>
+
+ * editfns.c (region_limit): Support any non-zero value of BEGINNINGP.
+
+2003-09-03 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_window_cursor_type): Partially undo 2002-03-01
+ change (superseded by 2002-08-30 change); the default blink-off
+ cursor is now again "no cursor".
+
+2003-09-01 Jason Rumney <jasonr@gnu.org>
+
+ * makefile.w32-in (alloca.o): Remove.
+ (coding.o): Depend on intervals.h
+ (emacs.o, bytecode.o): Depend on window.h.
+
+2003-09-01 Dave Love <fx@gnu.org>
+
+ * Makefile.in (alloca.o): Remove commands.
+ (coding.o): Depend on intervals.h composite.h window.h.
+ (emacs.o): Depend on window.h keyboard.h keymap.h.
+ (gtkutil.o): Depend on keyboard.h charset.h coding.h.
+ (bytecode.o): Depend on window.h.
+
+2003-08-31 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_per_char_metric): Allow cached metrics to be
+ returned even when font_type is unknown.
+
+ * xdisp.c (init_iterator): Remove old WINDOWSNT conditional.
+
+2003-08-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_term_init): Initialize new fields in x_display_info.
+
+ * xterm.h (struct x_display_info): Add red/green/blue_bits and
+ *_offset.
+
+ * xfns.c (lookup_rgb_color): Use new fields in x_display_info to
+ calculate pixel value.
+
+2003-08-29 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xdisp.c (redisplay_internal): Fix change of 2003-04-30.
+ Don't tell redisplay display is accurate when it's actually been
+ paused for pending input.
+
+2003-08-29 Richard M. Stallman <rms@gnu.org>
+
+ * dispnew.c (adjust_glyph_matrix): Call window_box
+ whenever W is nonzero.
+
+ * data.c (Fmake_variable_buffer_local, Fmake_local_variable)
+ (Fkill_local_variable, Fmake_variable_frame_local)
+ (Flocal_variable_p, Flocal_variable_if_set_p):
+ Use indirect_variable to trace thru variable aliases.
+
+ * config.in: Updated.
+
+ * callint.c (Fcall_interactively): Save and restore
+ Vthis_command, Vthis_original_command, real_this_command,
+ and current_kboard->Vlast_command.
+
+ * abbrev.c (Fexpand_abbrev): Insert before deleting.
+
+2003-08-29 Gerd Moellmann <gerd@gnu.org>
+
+ * xfns.c (lookup_rgb_color): Handle TrueColor visuals specially.
+
+2003-08-28 David Abrahams <dave@boost-consulting.com> (tiny change)
+
+ * coding.c (decode_coding_iso2022): Initialize local variable c2.
+ (decode_coding_sjis_big5): Likewise.
+
+2003-08-27 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (sys_pipe): Protect against file descriptor overflow.
+
+ * w32fns.c (syms_of_w32fns): Remove non-existent functions.
+
+ * w32term.c (w32_read_socket): Fix WM_MOUSEWHEEL assignment.
+
+2003-08-26 Terje Rosten <terjeros@phys.ntnu.no>
+
+ * xfns.c (Vgtk_version_string): New variable.
+ (syms_of_xfns): DEFVAR_LISP it. Provide gtk.
+
+2003-08-24 Eli Zaretskii <eliz@gnu.org>
+
+ * term.c (term_init): Remove `const' from buffer_size's declaration.
+
+ * Makefile.in (msdos.o): Depend on intervals.h.
+
+ * msdos.c: Include intervals.h, since STRING_INTERVALS requires that.
+
+2003-08-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (struct x_display_info): New fields: client_leader_window
+ and Xatom_wm_client_leader.
+
+ * xterm.c (x_initialize): Move call to x_session_initialize to ...
+ (x_term_init): ... here. Initialize client_leader fields in dpyinfo.
+
+ * xsmfns.c (create_client_leader_window): New function.
+ (x_session_initialize): Call create_client_leader_window, take
+ dpyinfo as argument.
+
+ * xfns.c (Fx_create_frame): Set property WM_CLIENT_LEADER.
+
+ * Makefile.in (xsmfns.o): Add more depenedencies.
+
+2003-08-21 Dave Love <fx@gnu.org>
+
+ * m/iris4d.h: Use _MIPS_SZLONG, not _LP64.
+
+2003-08-21 Kenichi Handa <handa@m17n.org>
+
+ * term.c (term_init): Fix previous change; don't rely on the
+ length of `buffer' if TERMINFO is defined.
+
+2003-08-20 Dave Love <fx@gnu.org>
+
+ * atimer.h: Include lisp.h.
+
+ * lisp.h (EMACS_LISP_H): New.
+ (popup_activated_flag): Don't declare.
+
+ * alloca.c: Some merging with gnulib. Change logic and doc
+ concerning (x)malloc/(x)free -- no longer Emacs-specific.
+ [DO_BLOCK_INPUT]: Don't include lisp.h.
+ (xmalloc, xfree): Declare.
+ (malloc): Don't declare.
+
+ * Makefile.in (LWLIB_OPTIONS): Remove (unused).
+ (alloca.o): Remove obsolete stuff concerning alloca.s. Depend on
+ atimer.h, blockinput.h.
+
+ * alloc.c (lisp_align_malloc): Change type of `aligned'.
+
+ * alloca.s: Remove.
+
+2003-08-19 Gerd Moellmann <gerd@gnu.org>
+
+ * s/freebsd.h [__FreeBSD_version >= 400000]: Define TERMINFO,
+ use -lncurses.
+
+ * term.c (term_init): Use a buffer of size 4096 for tgetent since
+ FreeBSD returns something longer than 2044. Abort if the end of
+ the buffer is overwritten.
+
+2003-08-19 Miles Bader <miles@gnu.org>
+
+ * xterm.c (x_term_init): Correctly use result of Ffile_readable_p.
+
+2003-08-19 Gerd Moellmann <gerd@gnu.org>
+
+ * alloc.c (lisp_align_malloc): Check for memory full when
+ allocating ablocks, which also avoids freeing a pointer into an
+ ablocks structure.
+
+ * puresize.h (BASE_PURESIZE): Increase to 1100000.
+
+ * buffer.c (Fmove_overlay): Set overlay's next pointer unconditionally.
+
+2003-08-16 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fencode_time): Doc fix.
+
+2003-08-16 David Ponce <david@dponce.com>
+
+ * fileio.c (Fwrite_region): Fix conditional expression to issue
+ the right message.
+
+2003-08-16 Juri Linkov <juri@jurta.org>
+
+ * syntax.c (Fforward_word): Argument changed to optional.
+ Set default value to 1.
+
+2003-08-15 Kenichi Handa <handa@m17n.org>
+
+ * xfaces.c (better_font_p): Prefer a real scalable font; i.e. not
+ what autoscaled.
+ (best_matching_font): Once we find a better scalable font, set
+ non_scalable_has_exact_height_p to 1.
+ (try_font_list): Call try_alternative_families to try any family
+ with the given registry.
+
+2003-08-09 Andreas Schwab <schwab@suse.de>
+
+ * alloc.c (mark_object): Handle Lisp_Misc_Save_Value.
+
+ * print.c (print_string): Fix printing of multibyte string with
+ nontrivial printcharfun.
+
+2003-07-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (xg_set_icon): Rewrite to compile with GTK 2.0 and 2.2.
+
+ * xterm.c (x_bitmap_icon): Return if xg_set_icon succeeds.
+
+2003-07-31 Kenichi Handa <handa@m17n.org>
+
+ * process.c (read_process_output): Return the actually read bytes
+ instead of the result of decoding.
+
+2003-07-31 Kenichi Handa <handa@m17n.org>
+
+ * xterm.h (struct x_bitmap_record): New member have_mask.
+
+ * xfns.c (x_create_bitmap_from_data): Initialize have_mask member
+ to 0.
+ (x_create_bitmap_from_file): Likewise.
+ (x_destroy_bitmap): Check have_mask member before freeing a mask.
+ (x_destroy_all_bitmaps): Likewise.
+ (x_create_bitmap_mask): Set have_mask member to 1.
+
+2003-07-30 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in (CFLAGS) [!OPTIMIZE]: Undo previous change.
+
+2003-07-29 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_mark_data): Update calls to mark_object.
+
+2003-07-29 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (xim_open_dpy, xim_initialize, xim_close_dpy):
+ Conditionalize XIM code on HAVE_XIM.
+
+ * fns.c (Fclear_string): New function.
+ (syms_of_fns): defsubr it.
+
+2003-07-28 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
+
+ * xfns.c (xic_set_preeditarea): Add the left fringe width to spot.x.
+
+2003-07-22 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xfns.c: Don't check HAVE_PNG_H: autoconf doesn't seem to find it.
+
+ * buffer.c (delete_all_overlays): New function.
+ * buffer.h (delete_all_overlays): Declare.
+ * coding.c (run_pre_post_conversion_on_str):
+ * print.c (temp_output_buffer_setup):
+ * fileio.c (Finsert_file_contents):
+ * minibuf.c (get_minibuffer): Use it.
+
+2003-07-22 Andrew Choi <akochoi@shaw.ca>
+
+ * unexmacosx.c (unexec_regions_sort_compare):
+ (unexec_regions_merge): New functions. Sort and merge unexec
+ regions before dumping them.
+
+2003-07-22 Dave Love <fx@gnu.org>
+
+ * xfns.c [HAVE_PNG]: Consider both png.h and libpng/png.h.
+
+2003-07-21 Stefan Monnier <monnier@cs.yale.edu>
+
+ * alloc.c (MARK_STRING, UNMARK_STRING, STRING_MARKED_P)
+ (GC_STRING_CHARS, string_bytes): Use ARRAY_MARK_FLAG rather than
+ MARKBIT as the gcmarkbit for strings.
+
+2003-07-21 Richard M. Stallman <rms@gnu.org>
+
+ * s/openbsd.h (LD_SWITCH_SYSTEM_TEMACS): Add undef.
+
+ * fns.c (Flocale_info): Rename from Flanginfo. Doc fixes.
+ (syms_of_fns): Corresponding change.
+
+ * alloc.c (syms_of_alloc): Doc fixes.
+
+2003-07-20 Han Boetes <han@mijncomputer.nl> (tiny change)
+
+ * s/netbsd.h: Use -Wl syntax.
+
+2003-07-17 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (xim_initialize): Redo 6/24 change.
+
+2003-07-15 Stefan Monnier <monnier@cs.yale.edu>
+
+ * buffer.c (copy_overlays): Use EMACS_INT for positions.
+ (Fswitch_to_buffer): Don't signal an error when switching to the same
+ buffer in a dedicated window.
+
+ * alloc.c: Use bitmaps for cons, as was done for floats.
+ (init_float, init_cons): Let the normal code allocate the first block.
+ (CONS_BLOCK_SIZE): Redefine based on BLOCK_BYTES and bitmap size.
+ (CONS_BLOCK, CONS_INDEX, CONS_MARKED_P, CONS_MARK, CONS_UNMARK):
+ New macros.
+ (struct cons_block): Move conses to the beginning. Add gcmarkbits.
+ (Fcons): Use lisp_align_malloc and CONS_UNMARK.
+ (live_cons_p): Check the pointer is not past the `conses' array.
+ (mark_maybe_object, mark_maybe_pointer): Use CONS_MARKED_P.
+ (mark_object, mark_buffer): Use CONS_MARKED_P and CONS_MARK.
+ (survives_gc_p): Use CONS_MARKED_P and simplify.
+ (gc_sweep): Use CONS_MARKED_P, CONS_UNMARK, and lisp_align_free.
+
+2003-07-13 Paul Eggert <eggert@twinsun.com>
+
+ GCC 3.3 (sparc) no longer puts "int foo = 0;" into data; it
+ puts it into BSS instead, at least on Solaris 8 and 9.
+ This is a valid optimization, and it may occur on other platforms,
+ so Emacs should not assume that initializing a static variable to
+ zero puts it into data.
+ * alloc.c (pure, staticvec):
+ Initialize these arrays to nonzero, so that they're not
+ put into BSS by that optimization.
+
+2003-07-13 Stefan Monnier <monnier@cs.yale.edu>
+
+ * alloc.c (BLOCK_PADDING): Rename from ABLOCKS_PADDING. Update users.
+ (lisp_align_malloc): Use posix_memalign is available.
+ (ABLOCKS_BASE): Use HAVE_POSIX_MEMALIGN as an optimization.
+ (STRING_BLOCK_SIZE): Rename from STRINGS_IN_STRING_BLOCK
+ for consistency. Update users.
+
+2003-07-13 Richard M. Stallman <rms@gnu.org>
+
+ * s/netbsd.h (START_FILES_1, END_FILES_1): Always define them.
+
+2003-07-13 Terje Rosten <terjeros@phys.ntnu.no>
+
+ * xterm.c (x_bitmap_icon, x_wm_set_icon_pixmap): Modify to add mask,
+ and use the Gtk+ function gtk_window_icon_from_file if available.
+
+ * xfns.c (x_bitmap_mask, x_create_bitmap_mask): New functions to
+ handle mask of bitmaps.
+ (x_allocate_bitmap_record, x_destroy_bitmap): Modify to handle the
+ mask property.
+ (xg_set_icon): New function, wrapper for gtk_window_icon_from_file.
+
+ * xterm.h (xg_set_icon): New function.
+
+2003-07-12 Paul Eggert <eggert@twinsun.com>
+
+ * unexelf.c (unexec): Consider a section to precede the .bss
+ section if its addresses overlap that of .bss.
+
+2003-07-12 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in (CFLAGS) [!OPTIMIZE]: Set CFLAGS to -g.
+
+ * config.in (HAVE_CRTIN): Add #undef.
+ (INLINE): Really inline only if OPTIMIZE is defined.
+
+ * s/netbsd.h (START_FILES, LIB_STANDARD): Use START_FILES_1,
+ END_FILES_1.
+ (START_FILES_1, END_FILES_1): New macros (conditional).
+ (LD_SWITCH_SYSTEM_TEMACS): Define.
+
+ * s/openbsd.h: Don't include bsd4-3.h.
+ (TERMINFO): Define.
+ (LIBS_TERMCAP): Define.
+ (LD_SWITCH_SYSTEM): Define (two definitions).
+
+ * xfns.c: Include libpng/png.h instead of png.h.
+
+2003-07-11 Andreas Schwab <schwab@suse.de>
+
+ * buffer.c (modify_overlay): Update prototype.
+ * lisp.h (adjust_overlays_for_insert, adjust_overlays_for_delete):
+ Likewise.
+
+2003-07-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lisp.h (VALBITS): Define in terms of GCTYPEBITS.
+ (struct interval): Move to intervals.h.
+ (struct Lisp_Marker): Use EMACS_INT for position info.
+ (forward_point): Remove prototype of defunct function.
+ (Qmodification_hooks, Qrear_nonsticky, Fnext_property_change)
+ (Fget_text_property, Fset_text_properties, Ftext_propertes_not_all)
+ (syms_of_textprop, set_text_properties): Remove prototypes that are
+ already in intervals.h.
+
+ * intervals.h (struct interval): Move from lisp.h.
+ Use EMACS_INT for position and size info.
+
+ * coding.c: Include intervals.h for Fset_text_properties.
+
+ * buffer.h (struct buffer_text, struct buffer): Use EMACS_INT for
+ position and length information.
+
+2003-07-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ * buffer.h (struct buffer_text, struct buffer): Use EMACS_INT for
+ position and length information.
+
+2003-07-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ Change overlays_after and overlays_before so the overlays themselves
+ are linked into lists, rather than using cons cells. After all each
+ Lisp_Misc already occupies 5 words, so we can add a `next' field to
+ Lisp_Overlay for free and save up one cons cell per overlay (not
+ to mention one indirection when traversing the list of overlay).
+
+ * lisp.h (struct Lisp_Overlay): New field `next'.
+
+ * buffer.h (struct buffer): Change overlays_before and overlays_after
+ from Lisp lists of overlays to pointers to overlays.
+
+ * buffer.c (overlay_strings, recenter_overlay_lists):
+ Fix typo in eassert in last commit.
+ (unchain_overlay): New function.
+ (add_overlay_mod_hooklist): Use AREF.
+ (copy_overlays, reset_buffer, overlays_at, overlays_in)
+ (overlay_touches_p, overlay_strings, recenter_overlay_lists)
+ (fix_overlays_in_range, fix_overlays_before, Fmake_overlay)
+ (Fmove_overlay, Fdelete_overlay, Foverlay_lists)
+ (report_overlay_modification, evaporate_overlays, init_buffer_once):
+ Adjust to new type of overlays_(before|after).
+
+ * alloc.c (mark_object): Mark the new `next' field of overlays.
+ (mark_buffer): Manually mark the overlays_(after|before) fields.
+
+ * coding.c (run_pre_post_conversion_on_str):
+ * editfns.c (overlays_around):
+ * xdisp.c (load_overlay_strings):
+ * fileio.c (Finsert_file_contents):
+ * indent.c (current_column):
+ * insdel.c (signal_before_change, signal_after_change):
+ * intervals.c (set_point_both):
+ * print.c (temp_output_buffer_setup): Use new type for
+ overlays_(before|after).
+
+2003-07-08 Stefan Monnier <monnier@cs.yale.edu>
+
+ * buffer.c (report_overlay_modification): Don't run hooks while
+ traversing the list of overlays.
+
+ * buffer.h (struct buffer): Use an int for overlay_center.
+ (overlays_at, evaporate_overlays, recenter_overlay_lists)
+ (overlay_strings, fix_overlays_before): Use EMACS_INT for positions.
+
+ * buffer.c (reset_buffer, recenter_overlay_lists)
+ (adjust_overlays_for_insert, adjust_overlays_for_delete)
+ (fix_overlays_in_range, Fmake_overlay, Fmove_overlay)
+ (evaporate_overlays, init_buffer_once): Update use of overlay_center.
+ (overlays_at, evaporate_overlays, recenter_overlay_lists)
+ (overlay_strings, fix_overlays_before): Use EMACS_INT for positions.
+
+ * xdisp.c (fast_find_position): Remove unused var.
+
+ * cmds.c (Qexpand_abbrev): New sym.
+ (syms_of_cmds): Initialize it.
+ (internal_self_insert): Use it to call expand-abbrev.
+
+2003-07-09 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (use_xim) [!USE_XIM]: Default to disable XIM if Emacs
+ was configured with --without-xim.
+ (x_term_init) [!USE_XIM]: Use `useXIM' resource to turn on XIM.
+
+2003-07-07 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (reseat_1): Set it->area to TEXT_AREA.
+
+ * alloc.c (Fgarbage_collect): Doc fix.
+
+2003-07-07 Nozomu Ando <nand@mac.com>
+
+ * buffer.c (Fkill_buffer): Clear charpos cache if necessary.
+
+2003-07-06 Stefan Monnier <monnier@cs.yale.edu>
+
+ * minibuf.c (read_minibuf): UNGCPRO before returning.
+ (Ftry_completion, Fall_completions): Doc fix.
+
+ * alloc.c (live_float_p): Check that p is not past the `floats' array,
+ now that `floats' is not the last element of the struct any more.
+
+2003-07-06 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.h (ClipboardSequence_Proc): New type.
+
+ * w32fns.c (clipboard_sequence_fn): New variable.
+ (globals_of_w32fns): Initialize it.
+
+ * w32select.c (last_clipboard_sequence_number): New variable.
+ (Fw32_set_clipboard_data, Fw32_get_clipboard_data): Use sequence
+ number if possible.
+
+2003-07-06 Stefan Monnier <monnier@cs.yale.edu>
+
+ * m/amdx86-64.h (MARKBIT):
+ * m/ia64.h (MARKBIT): Remove definition since lisp.h does not compare
+ MARKBIT and ARRAY_MARK_FLAG any more.
+
+ * m/hp800.h (XSETMARKBIT):
+ * m/sr2k.h (XSETMARKBIT):
+ * lisp.h (XSETMARKBIT): Remove unused macro.
+
+ * lisp.h (mark_object): Change prototype.
+
+ * alloc.c (mark_object): Change arg *Lisp_Object -> Lisp_Object.
+ (last_marked): Change accordingly.
+ (mark_interval, mark_maybe_object, mark_maybe_pointer)
+ (Fgarbage_collect, mark_glyph_matrix, mark_face_cache, mark_image)
+ (mark_buffer): Update calls to mark_object.
+
+ * bytecode.c (mark_byte_stack):
+ * fns.c (sweep_weak_table):
+ * keyboard.c (mark_kboards): Update calls to mark_object.
+
+2003-07-06 Jason Rumney <jasonr@gnu.org>
+
+ * alloc.c (struct ablock): Only include padding when there is some.
+
+2003-07-04 Stefan Monnier <monnier@cs.yale.edu>
+
+ * alloc.c (ALIGN): Add casts to simplify usage.
+ (BLOCK_ALIGN, BLOCK_BYTES, ABLOCKS_PADDING, ABLOCKS_SIZE)
+ (ABLOCKS_BYTES, ABLOCK_ABASE, ABLOCKS_BUSY, ABLOCKS_BASE): New macros.
+ (struct ablock, struct ablocks): New types.
+ (free_ablock): New global var.
+ (lisp_align_malloc, lisp_align_free): New functions.
+ (FLOAT_BLOCK_SIZE): Redefine in terms of BLOCK_BYTES.
+ (struct float_block): Reorder and add gcmarkbits.
+ (GETMARKBIT, SETMARKBIT, UNSETMARKBIT, FLOAT_BLOCK, FLOAT_INDEX)
+ (FLOAT_MARKED_P, FLOAT_MARK, FLOAT_UNMARK): New macros.
+ (init_float, make_float): Use lisp_align_malloc.
+ (free_float, live_float_p): Don't use `type' any more.
+ (make_float): Use FLOAT_UNMARK to access to mark bit.
+ (mark_maybe_object, mark_maybe_pointer, survives_gc_p):
+ Use FLOAT_MARKED_P to access the mark bit.
+ (pure_alloc): Simplify use of ALIGN.
+ (mark_object): Use FLOAT_MARK to access the mark bit.
+ (gc_sweep): Use new macros to access the float's mark bit.
+ (init_alloc_once): Init free_ablock.
+
+ * lisp.h (struct Lisp_Float): Remove unused field `type'.
+
+2003-06-27 Stefan Monnier <monnier@cs.yale.edu>
+
+ * alloc.c (VECTOR_MARK, VECTOR_UNMARK, VECTOR_MARKED_P): New macros.
+ (GC_STRING_BYTES): Don't mask markbit (it's only used on `size').
+ (allocate_buffer): Move.
+ (string_bytes): Don't mask markbit of `size_byte'.
+ (mark_maybe_object, mark_maybe_pointer, Fgarbage_collect)
+ (mark_object, mark_buffer, survives_gc_p, gc_sweep):
+ Use the `size' field of buffers (rather than the `name' field) for
+ the mark bit, as is done for all other vectorlike objects.
+ Use the new macros to access the mark bit of vectorlike objects.
+
+2003-06-26 Richard M. Stallman <rms@gnu.org>
+
+ * puresize.h (BASE_PURESIZE): Increment base size.
+
+ * xdisp.c (fast_find_position): Enable Gerd's new definition.
+
+ * xterm.c (xim_initialize): Undo previous change.
+
+2003-06-26 Stefan Monnier <monnier@cs.yale.edu>
+
+ * alloc.c (survives_gc_p): Simplify.
+
+ * buffer.c (set_buffer_internal_1): Test CONSP for lists.
+
+ * window.c (Fset_window_dedicated_p): Simplify.
+ (display_buffer_1): Don't raise the win from which minibuf was entered.
+ (temp_output_buffer_show): Don't assume BEG == 1. Simplify.
+ (Fminibuffer_selected_window): Simplify.
+
+ * buffer.h (struct buffer_text): Lisp_Object `markers' => Lisp_Marker.
+
+ * lisp.h (unchain_marker): Lisp_Object arg => Lisp_Marker.
+ (struct Lisp_Marker): Lisp_Object `chain' => Lisp_Marker `next'.
+
+ * insdel.c (check_markers, adjust_markers_for_delete)
+ (adjust_markers_for_insert, adjust_markers_for_replace)
+ (prepare_to_modify_buffer, RESTORE_VALUE):
+ * marker.c (buf_charpos_to_bytepos, buf_bytepos_to_charpos)
+ (Fset_marker, set_marker_restricted, set_marker_both, unchain_marker)
+ (set_marker_restricted_both, Fbuffer_has_markers_at, count_markers):
+ * alloc.c (Fmake_marker, free_marker, gc_sweep):
+ * buffer.c (Fget_buffer_create, Fkill_buffer, Fset_buffer_multibyte):
+ * editfns.c (save_excursion_restore, transpose_markers):
+ * window.c (delete_window):
+ * xdisp.c (message_dolog): Update for new types.
+
+2003-06-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfaces.c (set_font_frame_param): Set default_face_done_p to zero.
+ (realize_default_face): Use default_face_done_p for the force_p
+ argument to set_lface_from_font_name. Set default_face_done_p to one.
+
+ * frame.c (make_frame): Initialize default_face_done_p.
+
+ * frame.h (struct frame): Add default_face_done_p.
+
+ * config.in: Add XRegisterIMInstantiateCallback_arg6 so it
+ will be defined.
+
+2003-06-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * alloc.c (make_interval, Fmake_symbol, allocate_misc):
+ Initialize the new field `gcmarkbit'.
+ (mark_interval, MARK_INTERVAL_TREE): Use the new `gcmarkbit' field.
+ (mark_interval_tree): Don't mark the tree separately from the nodes.
+ (UNMARK_BALANCE_INTERVALS): Don't unmark the tree.
+ (mark_maybe_object, mark_maybe_pointer, Fgarbage_collect)
+ (mark_object, survives_gc_p, gc_sweep): Use new `gcmarkbit' fields.
+
+ * lisp.h (struct interval, struct Lisp_Symbol, struct Lisp_Free)
+ (struct Lisp_Marker, struct Lisp_Intfwd, struct Lisp_Boolfwd)
+ (struct Lisp_Kboard_Objfwd, struct Lisp_Save_Value)
+ (struct Lisp_Buffer_Local_Value, struct Lisp_Overlay)
+ (struct Lisp_Objfwd, struct Lisp_Buffer_Objfwd): Add `gcmarkbit' field.
+
+2003-06-24 Dave Love <fx@gnu.org>
+
+ * xterm.c (xim_initialize): Use XRegisterIMInstantiateCallback_arg6.
+
+ * strftime.c: Test HAVE_SYS__MBSTATE_H, not __hpux. Merge changes
+ from gnulib.
+
+2003-06-21 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fwrite_region): Alternate messages
+ for append and partial write.
+
+ * keyboard.c (read_key_sequence): When converting upcase fn key to
+ downcase, update fkey and keytran so `backspace' gets translated.
+
+ * keyboard.c (read_avail_input): Don't signal SIGHUP in batch mode.
+
+ * process.c (wait_reading_process_input): Don't signal SIGIO
+ in batch mode.
+
+2003-06-17 Kenichi Handa <handa@m17n.org>
+
+ * Makefile.in (xselect.o): Don't depend on charset.h, coding.h,
+ composite.h.
+
+ * xselect.c: Don't include charset.h, coding.h, composite.h.
+ (Qforeign_selection): New variable.
+ (syms_of_xselect): Intern and static it.
+ (selection_data_to_lisp_data): Return a unibyte string made from
+ data with `foreign-selection' text property.
+
+2003-06-15 Stefan Monnier <monnier@cs.yale.edu>
+
+ * termhooks.h (EVENT_INIT): New macro.
+
+ * keyboard.c (mark_kboards): Move from alloc.c. Mark kbd_buffer.
+
+ * alloc.c (mark_kboards): Move to keyboard.c.
+
+ * keyboard.c (record_asynch_buffer_change, read_avail_input):
+ * xterm.c (x_dispatch_event):
+ * xmenu.c (find_and_call_menu_selection):
+ * xdisp.c (handle_tool_bar_click):
+ * w32menu.c (menubar_selection_callback):
+ * sysdep.c (kbd_input_ast, read_input_waiting):
+ * msdos.c (dos_rawgetc):
+ * macterm.c (mac_check_for_quit_char):
+ * macmenu.c (menubar_selection_callback):
+ * gtkutil.c (xg_tool_bar_callback): Don't pass uninitialized
+ data to kbd_buffer_store_event.
+
+2003-06-15 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (x_fix_overlapping_area): Always use area relative X
+ to fix redisplay problem with tall characters (such as ,AC(B).
+
+2003-06-13 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+
+ * fileio.c (Fcopy_file): Doc fix: copies file modes, too.
+
+2003-06-12 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Fwrite_region): Save and restore restriction.
+
+2003-06-12 Dave Love <fx@gnu.org>
+
+ * alloca.c (alloca): Declare arg as size_t.
+
+ * sysdep.c: Remove redundant include of unistd.h, stdlib.h.
+ Use HAVE_DECL_SYS_SIGLIST, not SYS_SIGLIST_DECLARED.
+
+2003-06-11 Dave Love <fx@gnu.org>
+
+ * search.c (shrink_regexp_cache): Use xrealloc.
+ (syms_of_search): Use xmalloc.
+
+2003-06-10 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (phys_cursor_in_rect_p): Fix 2003-05-24 change.
+ Adjust phys_cursor.x to be relative to window box, rather than
+ text area before checking -- to ensure cursor is redrawn when
+ exposing window.
+ Note: This also fixes a similar (older) bug if display margins
+ are present.
+
+2003-06-06 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (encoding_buffer_size): If coding->type is
+ coding_type_ccl, double magnification on CRLF encoding.
+
+2003-06-06 Jason Rumney <jasonr@gnu.org>
+
+ * w32reg.c (SYSTEM_DEFAULT_RESOURCES): New constant.
+ (w32_get_string_resource): Try SYSTEM_DEFAULT_RESOURCES last.
+
+ * xfaces.c (Finternal_face_x_get_resource): Do it on Windows and
+ Mac too.
+
+2003-06-05 Dave Love <fx@gnu.org>
+
+ * strftime.c: Merge changes from gnulib.
+
+ * mktime.c (__mktime_internal): Merge changes from gnulib
+ involving year 69 and dst2.
+
+ Changes to merge with gnulib version and be consistent with the
+ autoconf test:
+
+ * getloadavg.c: Set NLIST_STRUCT from HAVE_NLIST_H.
+ Use HAVE_STRUCT_NLIST_N_UN_N_NAME, not NLIST_NAME_UNION.
+ [HAVE_LOCALE_H]: Include locale.h.
+ (getloadavg) [HAVE_SETLOCALE]: Run sscanf in C locale.
+
+2003-06-05 Kim F. Storm <storm@cua.dk>
+
+ * window.c (coordinates_in_window): Convert X and Y to window
+ relative coordinates inside mode-line and header-line parts.
+ Convert X and Y to margin area relative coordinates inside left
+ and right display margin parts.
+
+2003-06-05 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (add_system_logical_colors_to_map): New function.
+ (Fx_open_connection): Use it.
+
+2003-06-04 Stefan Monnier <monnier@cs.yale.edu>
+
+ * process.c (allocate_pty): Revert part of the previous patch.
+ (Faccept_process_output): Simplify.
+
+2003-06-04 Jason Rumney <jasonr@gnu.org>
+
+ * termhooks.h (enum event_kind): Remove MOUSE_WHEEL_EVENT.
+
+ * keyboard.c (Qmouse_wheel, mouse_wheel_syms)
+ (lispy_mouse_wheel_names): Remove.
+ (syms_of_keyboard): Remove Qmouse_wheel and mouse_wheel_syms.
+ Always define drag_and_drop_syms.
+
+ * macterm.c (XTread_socket): Map mouse wheel events to Emacs
+ WHEEL_EVENT events.
+
+2003-06-03 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xdisp.c (update_tool_bar): Add missing UNGCPRO.
+
+ * buffer.c (init_buffer_once): Make kill-buffer-hook permanent-local.
+
+2003-06-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (make_menu_item): Make sure we don't crash on a NULL
+ menu item label.
+
+2003-06-03 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fwindow_edges): Doc fix.
+ (Fwindow_pixel_edges, Fwindow_inside_edges)
+ (Fwindow_inside_pixel_edges): New functions.
+ (syms_of_window): defsubr them.
+
+ * window.h (WINDOW_LEFT_FRINGE_COLS, WINDOW_RIGHT_FRINGE_COLS)
+ (WINDOW_MODE_LINE_LINES, WINDOW_HEADER_LINE_LINES): New macros.
+
+2003-06-02 Stefan Monnier <monnier@cs.yale.edu>
+
+ * dispnew.c (Fsit_for): Don't lie about the number of args.
+
+2003-06-02 Dave Love <fx@gnu.org>
+
+ * callproc.c: Use HAVE_FCNTL_H, not USG5.
+ (syms_of_callproc) <process-environment>: Doc fix.
+
+ * doc.c: Use HAVE_FCNTL_H, not USG5.
+
+ * xfaces.c (font_rescale_ratio): Fix for K&R.
+
+ * termcap.c: Use HAVE_FCNTL_H, not _POSIX_VERSION.
+
+ * mem-limits.h: Use HAVE_SYS_RESOURCE_H, HAVE_SYS_VLIMIT_H.
+
+ * lread.c [HAVE_FCNTL_H]: Include fcntl.h.
+
+ * gtkutil.c: Include keyboard.h, charset.h, coding.h.
+ (xg_create_frame_widgets): Use ENCODE_UTF_8.
+
+ * xterm.c (Qutf_8): Move to coding.c.
+
+ * xmenu.c (ENCODE_MENU_STRING): New.
+ (list_of_panes, list_of_items, digest_single_submenu, xmenu_show):
+ Use it.
+
+ * coding.h (ENCODE_UTF_8): New.
+ (Qutf_8): Declare.
+
+ * coding.c (Qutf_8): New.
+ (syms_of_coding): Intern it.
+
+ * fns.c: Doc fixes.
+
+2003-06-02 Kenichi Handa <handa@m17n.org>
+
+ * buffer.c (Fset_buffer_multibyte): Fix previous change.
+
+2003-06-01 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lread.c (openp): Make sure STR is a string.
+
+2003-06-01 David Ponce <david@dponce.com>
+
+ * termhooks.h (enum event_kind): Add new WHEEL_EVENT event.
+ Declare MOUSE_WHEEL_EVENT only if MAC_OSX defined.
+
+ * keyboard.c (Qmouse_wheel): Declare only if MAC_OSX defined.
+ (mouse_wheel_syms, lispy_mouse_wheel_names): Likewise.
+ (discard_mouse_events): Discard WHEEL_EVENT events too.
+ (lispy_wheel_names, wheel_syms): New.
+ (syms_of_keyboard): Init and staticpro `wheel_syms'. Init and
+ staticpro `Qmouse_wheel' and `mouse_wheel_syms' only if MAC_OSX defined.
+ (make_lispy_event): Add WHEEL_EVENT handler.
+
+ * w32term.c (construct_mouse_wheel): Construct WHEEL_EVENT.
+ (w32_read_socket): Map w32 WM_MOUSEWHEEL events to Emacs
+ WHEEL_EVENT events.
+
+2003-05-31 John Paul Wallington <jpw@gnu.org>
+
+ * Makefile.in (lisp, shortlisp): byte-run, float-sup, map-ynp, and
+ timer are in lisp/emacs-lisp.
+
+2003-05-31 Kenichi Handa <handa@m17n.org>
+
+ * buffer.c (Fset_buffer_multibyte): Correctly recover a narrowed
+ region when a buffer is changed to unibyte.
+
+ * charset.h (VALID_LEADING_CODE_P): New macro.
+ (UNIBYTE_STR_AS_MULTIBYTE_P): Check more rigidly.
+
+ * coding.c (DECODE_EMACS_MULE_COMPOSITION_CHAR): If coding->flags
+ is nonzero, accept multibyte form of eight-bit-control chars.
+ (decode_composition_emacs_mule): Likewise.
+ (decode_coding_emacs_mule): Likewise.
+ (encode_coding_emacs_mule): If coding->flags is nonzero, produce
+ multibyte form of eight-bit-control chars.
+
+ * fileio.c (Qauto_save_coding, auto_save_coding): New variables.
+ (Finsert_file_contents): If coding-system-for-read is bound to
+ Qauto_save_coding, use the coding system emacs-mule with special
+ setting for recovering a file.
+ (choose_write_coding_system): On auto saving, use the coding
+ system emacs-mule with special setting for auto saving.
+ (syms_of_fileio) <Qauto_save_coding>: Intern and staticpro it.
+
+2003-05-30 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (ccl_coding_driver): Set ccl->eight_bit_control
+ properly before calling ccl_driver.
+
+ * ccl.h (struct ccl_program) <eight_bit_control>: Comment fixed.
+
+ * ccl.c (CCL_WRITE_CHAR): Increment extra_bytes only when it is nonzero.
+ (ccl_driver): Initialize extra_bytes to ccl->eight_bit_control.
+ (setup_ccl_program): Initialize ccl->eight_bit_control to zero.
+
+2003-05-29 Glenn Morris <gmorris@ast.cam.ac.uk>
+
+ * xfaces.c (realize_default_face): Do not abort if lface is
+ non-existent - reverts change from 2003-05-19.
+
+2003-05-29 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (decode_coding_iso2022): Pay attention to the byte
+ sequence of CTEXT extended segment, and retain those bytes as is.
+
+2003-05-28 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (ENCODE_UNSAFE_CHARACTER): Adjust for the name change
+ of CODING_REPLACEMENT_CHARACTER.
+ (decode_coding_iso2022): If CODING_FLAG_ISO_SAFE, set
+ CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag in coding->mode, and
+ check this flag on encoding.
+ (encode_coding_sjis_big5):
+ Check CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag of coding->mode.
+ (Fset_terminal_coding_system_internal):
+ Set CODING_MODE_INHIBIT_UNENCODABLE_CHAR flag in terminal_coding.mode
+ instead of setting CODING_FLAG_ISO_SAFE flag in terminal_coding.flags.
+
+ * coding.h (CODING_REPLACEMENT_CHARACTER): Rename from
+ CODING_INHIBIT_CHARACTER_SUBSTITUTION.
+ (CODING_MODE_INHIBIT_UNENCODABLE_CHAR): New macro.
+
+2003-05-28 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (syms_of_print) <print-escape-nonascii>: Doc fix.
+
+ * eval.c (unbind_to): Move init of this_binding to separate statement.
+
+2003-05-28 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (expose_window): Fix error in calculation of
+ window relative coordinates of area to redisplay.
+
+2003-05-27 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (GET_WHEEL_DELTA_WPARAM): New macro.
+
+2003-05-27 David Ponce <david@dponce.com>
+
+ Handle W32 mouse wheel events as mouse click events, like in X.
+
+ * keyboard.c (make_lispy_event) [WINDOWSNT]: Don't handle
+ MOUSE_WHEEL_EVENT anymore.
+
+ * w32term.c (construct_mouse_wheel): Result is a MOUSE_CLICK_EVENT.
+ Scrolling down/up the mouse wheel is respectively mapped to mouse
+ button 4 and 5.
+ (w32_read_socket): Map w32 WM_MOUSEWHEEL events to Emacs
+ MOUSE_CLICK_EVENT events. Forward w32 MSH_MOUSEWHEEL events as
+ WM_MOUSEWHEEL events.
+
+2003-05-27 Andreas Schwab <schwab@suse.de>
+
+ * buffer.c (syms_of_buffer) <default-direction-reversed>: Doc fix.
+
+ * xdisp.c (try_window_id): Avoid aborting if PT is inside a
+ partially visible line.
+
+ * alloc.c (Fgarbage_collect): Fix last change.
+
+2003-05-26 John Paul Wallington <jpw@gnu.org>
+
+ * xfns.c (Fx_create_frame): Don't call Qface_set_after_frame_default.
+
+2003-05-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * window.c (Fset_window_buffer): Add type of `keep_margins'.
+ (Fset_window_fringes, Fset_window_scroll_bars): Declare before use.
+
+ * window.h (window_box_text_cols): Declare.
+
+ * xdisp.c (window_text_bottom_y, draw_row_fringe_bitmaps)
+ (x_draw_vertical_border): Remove unused var `f'.
+
+ * xfaces.c (build_scalable_font_name): Remove `unused var
+ pixel_size' warning.
+
+ * xfns.c (png_load): Remove `unused vars intent, image_gamma' warning.
+
+ * unexelf.c (unexec): Remove `unused var n' warning.
+
+ * strftime.c (my_strftime_localtime_r): Remove `defined but
+ unused' warning.
+
+ * process.c (allocate_pty): Remove `unused var stb' and
+ `cp might be used uninitialized' warnings.
+
+ * dispnew.c (mode_line_string): Remove unused var `f'.
+
+ * coding.c (find_safe_codings): Remove unused var `i'.
+
+ * bytecode.c (Fbyte_code): Remove `unused val' warning.
+
+ * buffer.c (Fkill_buffer): Remove unused var `list'.
+
+ * alloc.c (Fgarbage_collect): Remove `unused var tail' warning.
+
+2003-05-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * frame.c (make_frame): Condition want_fullscreen with
+ HAVE_WINDOW_SYSTEM.
+
+2003-05-25 Juanma Barranquero <lektu@terra.es>
+
+ * window.c (Fset_window_scroll_bars): Fix typo in argument name.
+ (Fwindow_scroll_bars): Fix typo in docstring.
+
+2003-05-24 Kim F. Storm <storm@cua.dk>
+
+ The following changes serve several purposes:
+
+ 1) Swap the position of fringes and display margins in windows, i.e.
+ the fringes are now displayed between the margins and the text area
+ (by default).
+
+ 2) Allow fringe and scroll bar parameters to be set per-buffer and
+ per-window (like display margins). Such settings are now stored
+ in window configurations, preserved when frames are resized, and
+ copied when windows are split vertically or horizontally.
+ Several bugs related to display margins have been fixed.
+
+ 3) Consistently use FRAME_FONT and FRAME_FONTSET macros.
+
+ 4) Use FRAME_COLUMN_WIDTH (f) consistently throughout the code
+ rather than FRAME_WIDTH (FRAME_FONT (f)).
+
+ 5) Introduce a consistent naming of variables, members and macros
+ depending on whether their value is measured in pixels or in
+ canonical columns/lines. Pixel dimensions are named *_width and
+ *_height, while canonical columns/lines are named *_cols and
+ *_lines. Pixel positions are named *_x and *_y, while column/line
+ positions are named *_col and *_line.
+
+ 6) Consolidate more of the X, W32, and MAC gui code by moving
+ common data into struct frame, and generalize it for the non-gui
+ case by using suitable defaults.
+
+ 7) Cleanup and consolidate the macros controlling frame and window
+ layout into frame.h and window.h, and generalize the use of the
+ various window_box_* functions (enhanced to handle the new fringe
+ position and the per-window fringe and scroll bar settings).
+
+ * frame.h (struct frame): Rename members height to text_lines,
+ width to text_cols, window_height to total_lines, window_width to
+ total_cols, new_height to new_text_lines, new_width to
+ new_text_cols. All uses changed.
+ (struct frame): New members which consolidate common members of
+ x_output, w32_output, and mac_output structures: left_pos,
+ top_pos, pixel_height, pixel_width, x_pixels_diff, y_pixels_diff,
+ win_gravity, size_hint_flags, border_width, internal_border_width,
+ line_height, fringe_cols, left_fringe_width, right_fringe_width,
+ want_fullscreen. All uses changed.
+ (struct frame): New member column_width contaning the canonical
+ column width, analogue to line_height. All uses changed.
+ (struct frame): Rename members scroll_bar_pixel_width to
+ config_scroll_bar_width, and scroll_bar_cols to
+ config_scroll_bar_cols. All uses changed.
+ (struct frame): New member scroll_bar_actual_width which
+ consolidates and renames the vertical_scroll_bar_extra member of
+ x_output, w32_output, and mac_output structures. All uses changed.
+ (FRAME_PIXEL_HEIGHT): Rename from PIXEL_HEIGHT and moved
+ from x/w32/macterm.h files. All uses changed. Also change code
+ which referred to f->output_data...->pixel_height.
+ (FRAME_PIXEL_WIDTH): Rename from PIXEL_WIDTH and moved
+ from x/w32/macterm.h files. All uses changed. Also change code
+ which referred to f->output_data...->pixel_width.
+ (FRAME_LINES): Rename from FRAME_HEIGHT. All uses changed.
+ Also change code which referred to f->height.
+ (FRAME_COLS): Rename from FRAME_WIDTH. All uses changed.
+ Also change code which referred to f->width.
+ (FRAME_NEW_HEIGHT, FRAME_NEW_WIDTH): Remove macros; change uses
+ to update new_text_lines and new_text_cols members directly.
+ (FRAME_CONFIG_SCROLL_BAR_WIDTH): Rename from
+ FRAME_SCROLL_BAR_PIXEL_WIDTH. All uses changed.
+ (FRAME_CONFIG_SCROLL_BAR_COLS): Rename from
+ FRAME_SCROLL_BAR_COLS. All uses changed.
+ (FRAME_LEFT_SCROLL_BAR_COLS, FRAME_RIGHT_SCROLL_BAR_COLS):
+ Rename from FRAME_LEFT_SCROLL_BAR_WIDTH and
+ FRAME_RIGHT_SCROLL_BAR_WIDTH, resp. All uses changed.
+ (FRAME_SCROLL_BAR_AREA_WIDTH, FRAME_LEFT_SCROLL_BAR_AREA_WIDTH)
+ (FRAME_RIGHT_SCROLL_BAR_AREA_WIDTH): New macros.
+ (FRAME_TOTAL_COLS): Rename from FRAME_WINDOW_WIDTH.
+ (SET_FRAME_COLS): Rename from SET_FRAME_WIDTH.
+ (FRAME_TOTAL_COLS_ARG): Rename from FRAME_WINDOW_WIDTH_ARG.
+ (WINDOW_VERTICAL_SCROLL_BAR_COLUMN): Remove unused macro.
+ (WINDOW_VERTICAL_SCROLL_BAR_HEIGHT): Remove unused macro.
+ (FRAME_LINE_HEIGHT): Rename from CANON_Y_UNIT.
+ Unconditionally return line_height member (it now has proper value
+ also for non-window frames).
+ (FRAME_COLUMN_WIDTH): Rename from CANON_X_UNIT. Unconditionally
+ return new column_width member (rather than the default font width).
+ (FRAME_FRINGE_COLS, FRAME_LEFT_FRINGE_WIDTH)
+ (FRAME_RIGHT_FRINGE_WIDTH): Rename from FRAME_X_... and moved
+ from x/w32/macterm.h files. Unconditionally return corresponding
+ member of frame structure (they now have proper values also for
+ non-window frames).
+ (FRAME_TOTAL_FRINGE_WIDTH): Rename from FRAME_FRINGE_WIDTH.
+ Calculate return value from left and right widths.
+ (FRAME_INTERNAL_BORDER_WIDTH): Unconditionally return
+ internal_border_width member (has proper value for non-window frame).
+ (FRAME_PIXEL_X_FROM_CANON_X): Rename from PIXEL_X_FROM_CANON_X.
+ (FRAME_PIXEL_Y_FROM_CANON_Y): Rename from PIXEL_Y_FROM_CANON_Y.
+ (FRAME_CANON_X_FROM_PIXEL_X): Rename from CANON_X_FROM_PIXEL_X.
+ (FRAME_CANON_Y_FROM_PIXEL_Y): Rename from CANON_Y_FROM_PIXEL_Y.
+ (FRAME_LINE_TO_PIXEL_Y): Rename from CHAR_TO_PIXEL_ROW,
+ consolidated from xterm.h, macterm.h, and w32term.h.
+ (FRAME_COL_TO_PIXEL_X): Rename from CHAR_TO_PIXEL_COL,
+ consolidated from xterm.h, macterm.h, and w32term.h.
+ (FRAME_TEXT_COLS_TO_PIXEL_WIDTH): Rename from
+ CHAR_TO_PIXEL_WIDTH consolidated from x/mac/w32term.h.
+ (FRAME_TEXT_LINES_TO_PIXEL_HEIGHT): Rename from
+ CHAR_TO_PIXEL_HEIGHT consolidated from x/mac/w32term.h.
+ (FRAME_PIXEL_Y_TO_LINE): Rename from PIXEL_TO_CHAR_ROW
+ consolidated from x/mac/w32term.h.
+ (FRAME_PIXEL_X_TO_COL): Rename from PIXEL_TO_CHAR_COL
+ consolidated from x/mac/w32term.h.
+ (FRAME_PIXEL_WIDTH_TO_TEXT_COLS): Rename from
+ PIXEL_TO_CHAR_WIDTH consolidated from x/mac/w32term.h.
+ (FRAME_PIXEL_HEIGHT_TO_TEXT_LINES): Rename from
+ PIXEL_TO_CHAR_HEIGHT consolidated from x/mac/w32term.h.
+
+ * window.h (struct window): Rename members left to left_col,
+ top to top_line, height to total_lines, width to total_cols,
+ left_margin_width to left_margin_cols, right_margin_width to
+ right_margin_cols, orig_height to orig_total_lines, orig_top to
+ orig_top_line. All uses changed.
+ (struct window): New members left_fringe_width, right_fringe_width,
+ fringes_outside_margins, scroll_bar_width, vertical_scroll_bar_type.
+ (WINDOW_XFRAME, WINDOW_FRAME_COLUMN_WIDTH, WINDOW_FRAME_LINE_HEIGHT):
+ New macros primarily used to simplify other macros.
+ (WINDOW_TOTAL_COLS): New macro. Change relevant code that
+ referred to XINT (w->width).
+ (WINDOW_TOTAL_LINES): New macro. Change relevant code that
+ referred to XINT (w->height).
+ (WINDOW_TOTAL_WIDTH): New macro. Change relevant code that
+ referred to XINT (w->width) * canon_x_unit.
+ (WINDOW_TOTAL_HEIGHT): New macro. Change relevant code that
+ referred to XINT (w->height) * canon_y_unit.
+ (WINDOW_LEFT_EDGE_COL): New macro. Change relevant code that
+ referred to XINT (w->left).
+ (WINDOW_RIGHT_EDGE_COL): Rename from WINDOW_RIGHT_EDGE. Change
+ all uses and code that referred to XINT (w->left) + XINT (w->width).
+ (WINDOW_TOP_EDGE_LINE): New macro. Change relevant code that
+ referred to XINT (w->top).
+ (WINDOW_BOTTOM_EDGE_LINE): New macro. Change relevant code that
+ referred to XINT (w->top) + XINT (w->height).
+ (WINDOW_LEFT_EDGE_X): New macro. Change relevant code that
+ referred to XINT (w->left) * canon_x_unit.
+ (WINDOW_RIGHT_EDGE_X): New macro. Change relevant code that
+ referred to (XINT (w->left) + XINT (w->width)) * canon_x_unit.
+ (WINDOW_TOP_EDGE_Y): New macro. Change relevant code that
+ referred to XINT (w->top) * canon_y_unit.
+ (WINDOW_BOTTOM_EDGE_Y): New macro. Change relevant code that
+ referred to (XINT (w->top) + XINT (w->height)) * canon_y_unit.
+ (WINDOW_LEFTMOST_P): New macro.
+ (WINDOW_BOX_LEFT_EDGE_COL): Rename from WINDOW_LEFT_MARGIN.
+ All uses changed.
+ (WINDOW_BOX_RIGHT_EDGE_COL): Rename from WINDOW_RIGHT_MARGIN.
+ All uses changed.
+ (WINDOW_BOX_LEFT_EDGE_X): Rename from
+ WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X, moved from dispextern.h.
+ Do not exclude left fringe width.
+ (WINDOW_BOX_RIGHT_EDGE_X): Rename from
+ WINDOW_DISPLAY_RIGHT_EDGE_PIXEL_X, moved from dispextern.h.
+ Do not exclude fringe widths.
+ (WINDOW_LEFT_FRINGE_WIDTH, WINDOW_RIGHT_FRINGE_WIDTH)
+ (WINDOW_FRINGE_COLS, WINDOW_TOTAL_FRINGE_WIDTH): New macros.
+ Change relevant code that referred to FRAME_LEFT_FRINGE_WIDTH,
+ FRAME_RIGHT_FRINGE_WIDTH, FRAME_FRINGE_COLS, and
+ FRAME_TOTAL_FRINGE_WIDTH to allow per-window fringe settings.
+ (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS): New macro.
+ (WINDOW_VERTICAL_SCROLL_BAR_TYPE, WINDOW_HAS_VERTICAL_SCROLL_BAR)
+ (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT)
+ (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT)
+ (WINDOW_CONFIG_SCROLL_BAR_WIDTH, WINDOW_CONFIG_SCROLL_BAR_COLS):
+ New macros. Change code which referenced corresponding
+ FRAME_VERTICAL_SCROLL_BAR_TYPE, FRAME_HAS_VERTICAL_SCROLL_BARS,
+ FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT,
+ FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT,
+ FRAME_SCROLL_BAR_PIXEL_WIDTH, and FRAME_SCROLL_BAR_COLS macros to
+ allow per-window scroll-bar settings.
+ (WINDOW_LEFT_SCROLL_BAR_COLS, WINDOW_RIGHT_SCROLL_BAR_COLS): New macros.
+ (WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH): New macro. Change code that
+ referred to FRAME_LEFT_SCROLL_BAR_WIDTH.
+ (WINDOW_RIGHT_SCROLL_BAR_AREA_WIDTH): New macro. Change code
+ that referred to FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT and
+ FRAME_SCROLL_BAR_WIDTH.
+ (WINDOW_SCROLL_BAR_COLS, WINDOW_SCROLL_BAR_AREA_WIDTH)
+ (WINDOW_SCROLL_BAR_AREA_X): New macros.
+ (WINDOW_HEADER_LINE_HEIGHT): Rename from
+ WINDOW_DISPLAY_HEADER_LINE_HEIGHT, moved from dispextern.h.
+ (WINDOW_BOX_HEIGHT_NO_MODE_LINE): Rename from
+ WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE, moved from dispextern.h.
+ (WINDOW_BOX_TEXT_HEIGHT): Rename from
+ WINDOW_DISPLAY_PIXEL_WIDTH, moved from dispextern.h.
+ (WINDOW_TO_FRAME_PIXEL_X, WINDOW_TO_FRAME_PIXEL_Y)
+ (FRAME_TO_WINDOW_PIXEL_X, FRAME_TO_WINDOW_PIXEL_Y)
+ (WINDOW_TEXT_TO_FRAME_PIXEL_X): Move here from dispextern.h.
+ (WINDOW_LEFT_MARGIN_WIDTH): Rename from
+ WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH, moved from dispextern.h.
+ (WINDOW_RIGHT_MARGIN_WIDTH): Rename from
+ WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH, moved from dispextern.h.
+ (window_from_coordinates): Update prototype.
+ (Fset_window_buffer): Update EXFUN.
+ (set_window_buffer): Update prototype.
+
+ * dispextern.h (struct glyph_matrix): Rename members window_left_x
+ to window_left_col, window_top_y to window_top_line. All uses
+ changed.
+ (FRAME_INTERNAL_BORDER_WIDTH_SAFE): Remove macro; can now safely
+ use FRAME_INTERNAL_BORDER_WIDTH macro instead as
+ internal_border_width is now set to 0 for non-window frames.
+ (WINDOW_DISPLAY_PIXEL_WIDTH, WINDOW_DISPLAY_PIXEL_HEIGHT)
+ (WINDOW_DISPLAY_MODE_LINE_HEIGHT, WINDOW_DISPLAY_HEADER_LINE_HEIGHT)
+ (WINDOW_DISPLAY_HEIGHT_NO_MODE_LINE, WINDOW_DISPLAY_TEXT_HEIGHT)
+ (WINDOW_DISPLAY_LEFT_EDGE_PIXEL_X, WINDOW_DISPLAY_RIGHT_EDGE_PIXEL_X)
+ (WINDOW_DISPLAY_TOP_EDGE_PIXEL_Y, WINDOW_DISPLAY_BOTTOM_EDGE_PIXEL_Y)
+ (WINDOW_TO_FRAME_PIXEL_X, WINDOW_TO_FRAME_PIXEL_Y)
+ (FRAME_TO_WINDOW_PIXEL_X, FRAME_TO_WINDOW_PIXEL_Y)
+ (WINDOW_DISPLAY_LEFT_AREA_PIXEL_WIDTH)
+ (WINDOW_DISPLAY_RIGHT_AREA_PIXEL_WIDTH, WINDOW_WANTS_MODELINE_P):
+ Move to window.h and renamed [see window.h changes].
+ (WINDOW_AREA_TO_FRAME_PIXEL_X, WINDOW_AREA_PIXEL_WIDTH)
+ (WINDOW_DISPLAY_TEXT_AREA_PIXEL_WIDTH): Remove macros.
+ (WINDOW_WANTS_MODELINE_P, WINDOW_WANTS_HEADER_LINE_P):
+ Use WINDOW_TOTAL_LINES.
+ (frame_update_line_height): Remove prototype.
+
+ * buffer.h (struct buffer): Rename members measured in columns:
+ left_margin_width to left_margin_cols, right_margin_width to
+ right_margin_cols. All uses changed.
+ New members left_fringe_width, right_fringe_width,
+ fringes_outside_margins for per-buffer fringe settings.
+ New members scroll_bar_width and vertical_scroll_bar_type for
+ per-buffer scroll bar settings.
+
+ * buffer.c (init_buffer_once): Set buffer_defaults and
+ buffer_local_flags for new buffer-local variables
+ left_fringe_width, right_fringe_width, fringes_outside_margins,
+ scroll_bar_width, and vertical_scroll_bar_type.
+ (syms_of_buffer): Defvar_per_buffer them, and defvar_lisp_nopro
+ default-* variables for them.
+
+ * dispnew.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (mode_line_string): No need to adjust width for mode lines, as it
+ is already adjusted by the caller.
+ (marginal_area_string): Handle fringes inside/outside margins.
+
+ * frame.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (make_frame): Initialize left_fringe_width, right_fringe_width,
+ fringe_cols, scroll_bar_actual_width, border_width,
+ internal_border_width, column_width, line_height, x_pixels_diff,
+ y_pixels_diff, want_fullscreen, size_hint_flags, and win_gravity
+ members with values suitable for a non-window frames.
+
+ * gtkutil.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * indent.c: Make (few) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * keyboard.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (make_lispy_event): Use window positions returned from
+ window_from_coordinates when constructing the lisp event for
+ MOUSE_CLICK_EVENT and DRAG_N_DROP_EVENT, rather than calculating
+ (incorrect) values locally.
+ (make_lispy_movement): Use window positions returned from
+ window_from_coordinates when constructing the lisp event, rather
+ than calculating (incorrect) values locally.
+
+ * scroll.c: Make (some) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * sunfns.c (Fsun_menu_internal): Adapt to per-window fringes and
+ scroll-bars.
+
+ * sysdep.c: Make (few) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * term.c: Make (some) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * widget.c: Make (few) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * window.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (make_window): Initialize new members
+ left_margin_cols, right_margin_cols, left_fringe_width,
+ right_fringe_width, fringes_outside_margins, scroll_bar_width,
+ and vertical_scroll_bar_type.
+ (coordinates_in_window): Adapt to new fringe/margin positions
+ and per-window fringes and scroll-bars.
+ Fix bug related to incorrectly adjusting coordinates by
+ frame's internal_border_width (the effect normally negible since
+ the internal_border_width is typically 0 or 1 pixel, but very
+ noticeable for an internal_border_width of e.g. 25 pixels).
+ Upon successful return (other than ON_NOTHING), the coordinates
+ are now always properly converted to window relative for the
+ given display element.
+ (window_from_coordinates): Add new parameters wx and wy to
+ return the window relative x and y position in the returned
+ window and part. A null arg means, don't return the position.
+ All callers changed.
+ (adjust_window_margins): New function which may reduce the width
+ of the display margins if a window's text area is too small after
+ resizing or splitting windows.
+ (size_window): Fix bug that did not account for display margin
+ widths when checking the minimum width of a window; use
+ adjust_window_margins.
+ (set_window_buffer): Call Fset_window_fringes and
+ Fset_window_scroll_bars to setup per-window elements.
+ Add new arg KEEP_MARGINS_P. Non-nil means to keep window's
+ existing display margin, fringe widths, and scroll bar settings
+ (e.g. after splitting a window or resizing the frame).
+ All callers changed.
+ (Fset_window_buffer): New arg KEEP_MARGINS. All callers changed.
+ (Fsplit_window): Duplicate original window's display margin,
+ fringe, and scroll-bar settings; then call Fset_window_buffer with
+ KEEP_MARGINS non-nil. This fixes a bug which caused a split
+ window to only preserve the display margins in one of the windows.
+ When splitting horizontally, call adjust_window_margins on both
+ windows to ensure that the text area of the new windows is non too
+ narrow. This fixes a bug which could cause Emacs to trap if the
+ width of the split window was less than the width of the display
+ margins.
+ (window_box_text_cols): Rename from window_internal_width.
+ All uses changed. Adapt to per-window fringes and scroll bars.
+ Fix bug that caused vertical separator to be subtracted also on
+ window frames. Fix another bug that did not reduce the returned
+ value by the columns used for display margins.
+ (window_scroll_line_based): Fix bug related to scrolling too much
+ when display margins are present (implicitly fixed by the fix to
+ window_box_text_cols).
+ (scroll_left, scroll_right): Fix bug related to scrolling too far
+ by default when display margins are present (implicitly fixed by
+ the fix to window_box_text_cols).
+ (struct saved_window): Rename members left to left_col, top to
+ top_line, width to total_cols, height to total_lines, orig_top to
+ orig_top_line, orig_height to orig_total_lines. All uses changed.
+ New members left_margin_cols, right_margin_cols,
+ left_fringe_width, right_fringe_width, fringes_outside_margins,
+ scroll_bar_width, and vertical_scroll_bar_type for saving
+ per-window display elements.
+ (Fset_window_configuration): Restore display margins, fringes,
+ and scroll bar settings. This fixes a bug which caused display
+ margins to be discarded when saving and restoring a window
+ configuration.
+ (save_window_save): Save display margins, fringes, and scroll bar
+ settings. This fixes a bug which caused display margins to be
+ discarded when saving and restoring a window configuration.
+ (Fset_window_margins): Do nothing if display margins are not
+ really changed. Otherwise, call adjust_window_margins to ensure
+ the text area doesn't get too narrow. This fixes a bug which
+ could cause Emacs to trap if setting display margins wider than
+ the width of the window.
+ (Fset_window_fringes): New defun to allow user to specifically set
+ this window's fringe widths and position vs. display margins.
+ (Fwindow_fringes): New defun to return window's actual fringe settings.
+ (Fset_window_scroll_bars): New defun to allow user to specifically
+ set this window's scroll bar width and position.
+ (Fwindow_scroll_bars): New defun to return window's actual scroll
+ bar settings.
+ (compare_window_configurations): Also compare display margins,
+ fringes, and scroll bar settings.
+ (syms_of_window): Defsubr new defuns for fringe and scroll bars.
+
+ * xdisp.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (window_box_width): Adapt to per-window fringes and scroll bars,
+ and new fringe vs. display margin position. Note that returned
+ value is no longer guaranteed to be a whole multiple of the frame
+ column width, since per-window fringes may now be any width.
+ (window_box_left_offset): New function like window_box_left, but
+ value is relative to left border of window (rather than frame).
+ (window_box_right_offset): New function like window_box_right,
+ but value is relative to left border of window.
+ (window_box_left): Adapt to per-window fringes and scroll bars,
+ and new fringe vs. display margin position. Simplify by using
+ WINDOW_LEFT_EDGE_X and window_box_left_offset.
+ (window_box): Allow null args for unnecessary return values;
+ change/simplify relevant callers.
+ (x_y_to_hpos_vpos): Adapt to per-window fringes and scroll bars,
+ and new fringe vs. display margin position.
+ Use window_box_left_offset and window_box_right_offset
+ (get_glyph_string_clip_rect): Adapt to per-window fringes and
+ scroll bars, and new fringe vs. display margin position.
+ Use WINDOW_LEFT_EDGE_X and WINDOW_TOTAL_WIDTH.
+ (draw_fringe_bitmap): Rework to handle per-window fringes and new
+ fringe vs. display margin position.
+ (hscroll_window_tree): Use window_box_width instead of window_box.
+ (redisplay_window): Adapt to per-window scroll bars.
+ (draw_glyphs): Rework to handle per-window fringes and scroll
+ bars, and new fringe vs. display margin position.
+ Use WINDOW_LEFT_EDGE_X, WINDOW_TOTAL_WIDTH, and window_box_left.
+ (x_clear_end_of_line): Adapt to per-window fringes and scroll
+ bars, and new fringe vs. display margin position. Fix bug which
+ increased total width of full_width rows by width of scroll bars
+ although window's total width already includes that.
+ (x_fix_overlapping_area): Simplify using window_box_left_offset.
+ (expose_area): Simplify using window_box_left_offset.
+ (x_draw_vertical_border): Handle per-window scroll bar settings,
+ mixing windows with left, right and no scroll bars.
+
+ * xfaces.c [WINDOWSNT]: Move redefinition of FONT_WIDTH macro to
+ where it's used in x_list_fonts (for clarity).
+ (frame_update_line_height): Remove unused function; functionality
+ is now done directly when setting the default font in x_set_font.
+
+ * xfns.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * xmenu.c: Make (some) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * xterm.h (struct x_output): Move members left_pos, top_pos,
+ border_width, pixel_height, pixel_width, line_height,
+ internal_border_width, vertical_scroll_bar_extra,
+ left_fringe_width, right_fringe_width, fringe_cols,
+ fringes_extra, win_gravity, size_hint_flags, want_fullscreen,
+ x_pixels_diff, and y_pixels_diff to struct frame (frame.h).
+ (FRAME_INTERNAL_BORDER_WIDTH, FRAME_LINE_HEIGHT): Move to frame.h.
+ (FRAME_DEFAULT_FONT_WIDTH): Remove macro.
+ (PIXEL_WIDTH, PIXEL_HEIGHT)
+ (FRAME_X_FRINGE_COLS, FRAME_X_FRINGE_WIDTH)
+ (FRAME_X_LEFT_FRINGE_WIDTH, FRAME_X_RIGHT_FRINGE_WIDTH): Move to
+ frame.h and renamed [see frame.h changes].
+ (CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, CHAR_TO_PIXEL_WIDTH)
+ (CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_ROW, PIXEL_TO_CHAR_COL)
+ (PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Move to frame.h
+ and renamed [see frame.h changes].
+
+ * xterm.c: Make (several) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (x_draw_glyph_string_box): Adapt to per-window fringes and scroll-bars.
+ (scroll_run): Adapt to new fringe position.
+ (glyph_rect): Use window coordinates returned from
+ window_from_coordinates rather than frame_to_window_pixel_xy.
+ (XTset_vertical_scroll_bar): Adapt to per-window fringes and
+ scroll-bars.
+ (handle_one_xevent): Simplify a USE_GTK conditional.
+ (x_clip_to_row): Remove superfluous whole_line_p arg and code
+ (fringes are now inside margins, i.e. always in the clipping area).
+ All callers changed.
+ (x_new_font): Set FRAME_COLUMN_WIDTH and FRAME_LINE_HEIGHT
+ directly, then call compute_fringe_widths. Don't call
+ frame_update_line_height.
+
+ * w32term.h (struct w32_output): Move members left_pos, top_pos,
+ border_width, pixel_height, pixel_width, line_height,
+ internal_border_width, vertical_scroll_bar_extra,
+ left_fringe_width, right_fringe_width, fringe_cols,
+ fringes_extra, win_gravity, size_hint_flags, want_fullscreen,
+ x_pixels_diff, and y_pixels_diff to struct frame (frame.h).
+ (FRAME_INTERNAL_BORDER_WIDTH, FRAME_LINE_HEIGHT): Move to frame.h.
+ (FRAME_DEFAULT_FONT_WIDTH): Remove macro.
+ (PIXEL_WIDTH, PIXEL_HEIGHT)
+ (FRAME_X_FRINGE_COLS, FRAME_X_FRINGE_WIDTH)
+ (FRAME_X_LEFT_FRINGE_WIDTH, FRAME_X_RIGHT_FRINGE_WIDTH): Move to
+ frame.h and renamed [see frame.h changes].
+ (CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, CHAR_TO_PIXEL_WIDTH)
+ (CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_ROW, PIXEL_TO_CHAR_COL)
+ (PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Move to frame.h
+ and renamed [see frame.h changes].
+
+ * w32term.c: Make (several) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (x_draw_glyph_string_box): Adapt to per-window fringes and scroll-bars.
+ (glyph_rect): Use window coordinates returned from
+ window_from_coordinates rather than frame_to_window_pixel_xy.
+ (XTset_vertical_scroll_bar): Adapt to per-window fringes and
+ scroll-bars.
+ (w32_clip_to_row): Remove superfluous whole_line_p arg and code
+ (fringes are now inside margins, i.e. always in the clipping area).
+ All callers changed.
+ (x_new_font): Set FRAME_COLUMN_WIDTH and FRAME_LINE_HEIGHT
+ directly, then call compute_fringe_widths. Don't call
+ frame_update_line_height.
+
+ * w32console.c: Make (few) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * w32fns.c: Make (many) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * w32menu.c: Make (few) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * macterm.h (struct mac_output): Move members left_pos, top_pos,
+ border_width, pixel_height, pixel_width, line_height,
+ internal_border_width, vertical_scroll_bar_extra,
+ left_fringe_width, right_fringe_width, fringe_cols,
+ fringes_extra, win_gravity, size_hint_flags, want_fullscreen,
+ x_pixels_diff, y_pixels_diff to struct frame (frame.h).
+ (FRAME_INTERNAL_BORDER_WIDTH, FRAME_LINE_HEIGHT): Move to frame.h.
+ (FRAME_DEFAULT_FONT_WIDTH): Remove macro.
+ (PIXEL_WIDTH, PIXEL_HEIGHT)
+ (FRAME_X_FRINGE_COLS, FRAME_X_FRINGE_WIDTH)
+ (FRAME_X_LEFT_FRINGE_WIDTH, FRAME_X_RIGHT_FRINGE_WIDTH): Move to
+ frame.h and renamed [see frame.h changes].
+ (CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, CHAR_TO_PIXEL_WIDTH)
+ (CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_ROW, PIXEL_TO_CHAR_COL)
+ (PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Move to frame.h
+ and renamed [see frame.h changes].
+
+ * macterm.c: Make (several) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (x_draw_glyph_string_box): Adapt to per-window fringes and scroll-bars.
+ (glyph_rect): Use window coordinates returned from
+ window_from_coordinates rather than frame_to_window_pixel_xy.
+ (XTset_vertical_scroll_bar): Adapt to per-window fringes and
+ scroll-bars.
+ (x_clip_to_row): Remove superfluous whole_line_p arg and code
+ (fringes are now inside margins, i.e. always in the clipping area).
+ All callers changed.
+ (x_new_font): Set FRAME_COLUMN_WIDTH and FRAME_LINE_HEIGHT
+ directly, then call compute_fringe_widths. Don't call
+ frame_update_line_height.
+
+ * macfns.c: Make (several) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (x_real_positions): Set f->x_pixels_diff and f->y_pixels_diff to 0.
+
+ * macmenu.c: Make (few) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+
+ * msdos.h (struct x_output): Remove members left_pos, top_pos,
+ and line_height, and use corresponding new members in struct
+ frame. All uses changed.
+ (FRAME_LINE_HEIGHT, FRAME_INTERNAL_BORDER_WIDTH): Remove macros;
+ superseeded by corresponding macros in frame.h.
+
+ * msdos.c: Make (several) trivial substitutions for renamed and
+ new macros in dispextern.h, frame.h and window.h.
+ (IT_note_mouse_highlight): Use updated window coordinates returned
+ by window_from_coordinates, rather than adjusting them locally.
+ (internal_terminal_init): No need to initialize line_height here;
+ it now defaults to 1.
+
+2003-05-24 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (read_key_sequence): Adjust fkey and keytran when
+ dropping `down' events.
+
+2003-05-24 Andreas Schwab <schwab@suse.de>
+
+ * coding.c (find_safe_codings): Fix last change.
+
+2003-05-24 Istvan Marko <mi@imarko.dhs.org> (tiny change)
+
+ * xfns.c (x_window): Fix typo from 2003-05-21 change.
+
+2003-05-23 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xdisp.c (display_mode_element): Increase max depth.
+ Simplify the error handling code. Use a different error string
+ for the case where we hit the depth limit.
+
+ * lisp.h (Vfundamental_mode_abbrev_table): Don't declare.
+
+ * buffer.c (reset_buffer_local_variables): Remove redundant setting.
+
+2003-05-21 Stefan Monnier <monnier@cs.yale.edu>
+
+ * intervals.c (get_local_map): Don't get char-property of previous
+ point any more: get_pos_property already does it and better.
+
+2003-05-21 Dave Love <fx@gnu.org>
+
+ [Merged from unicode branch.]
+
+ * xfns.c (x_window, x_window): Use use_xim.
+
+ * xterm.c (use_xim): Initialize.
+ (xim_open_dpy, xim_initialize, xim_close_dpy): Use use_xim.
+ (x_term_init): Maybe set use_xim.
+
+ * xterm.h (use_xim) [HAVE_X_I18N]: Declare.
+
+2003-05-21 Jason Rumney <jasonr@gnu.org>
+
+ * unexw32.c (_start): Remove _fmode initialization.
+
+ * emacs.c (main) [WINDOWSNT]: Move it here.
+
+2003-05-20 Dave Love <fx@gnu.org>
+
+ * s/gnu-linux.h (MAIL_USE_FLOCK): Make it conditional.
+
+2003-05-19 Richard M. Stallman <rms@gnu.org>
+
+ * xfaces.c (Finternal_set_lisp_face_attribute): Handle Qunspecified
+ as value for QCfont attribute.
+ (realize_default_face): lface should already exist; crash if not.
+ Specify 0 for FORCE_P when calling set_lface_from_font_name.
+
+ * frame.c (Fignore_event): Doc fix.
+
+2003-05-19 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (decode_coding_string): Handle post-read-conversion
+ even if the coding doesn't require decoding.
+
+2003-05-18 Richard M. Stallman <rms@gnu.org>
+
+ * callproc.c (Fcall_process_region): Doc fix.
+
+2003-05-17 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lread.c (Fload): Print a message if package is obsolete.
+
+ * window.c (Fselect_window): Add optional `norecord' arg.
+ (select_window_1): Fold into Fselect_window.
+ (select_window_norecord): New function.
+ (temp_output_buffer_show): Use it. Preserve current buffer.
+
+ * window.h (Fselect_window): Update declaration.
+
+ * window.c (delete_window, Fother_window, Fset_window_configuration):
+ * minibuf.c (read_minibuf):
+ * macterm.c (x_new_focus_frame):
+ * frame.c (do_switch_frame, Fset_frame_selected_window, Fdelete_frame):
+ * callint.c (Fcall_interactively):
+ * xterm.c (x_new_focus_frame): Pass nil as new arg to Fselect_window.
+
+ * buffer.c (Fpop_to_buffer): Pass norecord to Fselect_window.
+
+2003-05-17 David Kastrup <dak@gnu.org>
+
+ * process.c (read_process_output): Back out change from 2003-03-09.
+
+2003-05-17 Stefan Monnier <monnier@cs.yale.edu>
+
+ * editfns.c (get_pos_property): Don't assume that `object' = nil.
+
+ * textprop.c (text_property_stickiness): New arg `buffer'.
+
+ * intervals.h (text_property_stickiness): New arg `buffer'.
+ (get_pos_property): Declare.
+
+ * intervals.c (get_local_map): Use get_pos_property, to obey
+ stickiness and empty overlays.
+ (create_root_interval, graft_intervals_into_buffer): Use BEG.
+ (merge_properties, intervals_equal, merge_properties_sticky):
+ Use XCAR, XCDR.
+ (adjust_for_invis_intang): Pass new arg to text_property_stickiness.
+
+2003-05-17 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (read_minibuf): If buffer is empty, record the default
+ in the history.
+ (Fminibuffer_complete_word): When deleting the overlap, take account
+ of its real position.
+
+ * fns.c (map_char_table): Fix previous change.
+
+ * syntax.c (find_defun_start):
+ When open_paren_in_column_0_is_defun_start,
+ return beginning of buffer.
+
+ * lisp.h (map_char_table): Declare added arg.
+
+ * fns.c (map_char_table): New arg TABLE gets the master table.
+ All calls changed.
+ Process default and inheritance, resorting to Faref if necessary.
+
+ * keymap.c (Fset_keymap_parent, map_keymap, Fcopy_keymap)
+ (Faccessible_keymaps): Pass new arg to map_char_table.
+
+ * fontset.c (Ffontset_info): Pass new arg to map_char_table.
+
+ * casetab.c (set_case_table): Pass new arg to map_char_table.
+
+ * data.c (let_shadows_buffer_binding_p): Make target of p volatile.
+
+ * lisp.h (specbinding_func): New typedef.
+ (struct specbinding): Use specbinding_func, to put the `volatile'
+ in the right place.
+
+ * alloc.c (Fgarbage_collect): Cast pointers into specpdl
+ to avoid GCC warning.
+
+2003-05-16 Ralph Schleicher <rs@nunatak.allgaeu.org>
+
+ * fileio.c (Fdelete_file): Handle symlinks pointing to directories.
+
+2003-05-15 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (apply_modifiers): Don't fill the other cache.
+
+2003-05-14 Stefan Monnier <monnier@cs.yale.edu>
+
+ * .gdbinit-union: New file, for USE_LISP_UNION_TYPE users.
+
+ * window.h (Qwindowp, Qwindow_live_p, Vwindow_list)
+ (Fwindow_end, Fselected_window, Fdelete_window, Fwindow_buffer)
+ (Fget_buffer_window, Fsave_window_excursion, Fsplit_window)
+ (Fset_window_configuration, Fcurrent_window_configuration)
+ (compare_window_configurations, Fcoordinates_in_window_p, Fwindow_at)
+ (Fpos_visible_in_window_p, mark_window_cursors_off)
+ (window_internal_height, window_internal_width, Frecenter)
+ (Fscroll_other_window, Fset_window_start, temp_output_buffer_show)
+ (replace_buffer_in_all_windows, init_window_once, init_window)
+ (syms_of_window, keys_of_window): Move from lisp.h.
+ * lisp.h: Move window.c declarations to window.h.
+
+ * bytecode.c: Include window.h.
+ * emacs.c: Include window.h.
+
+ * keyboard.c (make_lispy_event): Apply modifiers to multibyte-char key.
+ (keyremap): Add `parent' field.
+ (keyremap_step): Use it. Remove `parent' argument.
+ (read_key_sequence): Setup and use the new `parent' field.
+
+2003-05-11 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (adjust_point_for_property): Ensure termination.
+
+2003-05-10 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (follow_key): Remove dead variable `did_meta'.
+ (access_keymap_keyremap, keyremap_step): New funs, extracted from the
+ duplicated handling of function-key-map and key-translation-map
+ in read_key_sequence.
+ (read_key_sequence): Use them.
+
+ * keyboard.c (adjust_point_for_property): Try harder to move point
+ to the non-sticky end of an invisible property.
+
+ * xdisp.c (single_display_prop_intangible_p): Make `space' display
+ property intangible as well.
+
+2003-05-10 Andreas Schwab <schwab@suse.de>
+
+ * xmenu.c (single_menu_item): Change last parameter to void* to
+ avoid warning.
+
+2003-05-09 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (Fprin1_to_string): Instead of gcpro, set abort_on_gc.
+ Bind Qinhibit_modification_hooks to t so there will be no GC.
+ Rename local `tem' to `save_deactivate_mark'.
+
+ * eval.c (specpdl_ptr): Declare volatile.
+ (unbind_to): Copy the whole binding and decrement specpdl_ptr
+ before doing the work of unbinding it.
+
+ * lisp.h (struct specbinding): Declare elements volatile.
+ (specpdl_ptr): Declare volatile.
+
+ * Makefile.in (alloca.o): Specify -DDO_BLOCK_INPUT in compiling.
+
+ * alloca.c: Test DO_BLOCK_INPUT rather than `emacs'
+ for use of BLOCK_INPUT and inclusion of lisp.h and blockinput.h.
+
+2003-05-08 Dave Love <fx@gnu.org>
+
+ * coding.c (Vlast_coding_system_used): Doc fix.
+
+2003-05-07 Jason Rumney <jasonr@gnu.org>
+
+ * fileio.c (Ffile_symlink_p): Let handlers handle symlinks even
+ when system does not support them.
+
+2003-05-05 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fileio.c (Qwrite_region_annotate_functions): New var.
+ (build_annotations): Use it to process the global part of the hook.
+ (syms_of_fileio): Init and staticpro it.
+
+ * keyboard.c (safe_run_hooks_error): Display a message instead of
+ silently ignoring the error.
+
+2003-05-03 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (input_available_signal): Mark static.
+ (menu_bar_items): Use map_keymap.
+ (menu_bar_one_keymap): Remove.
+ (menu_bar_item): Adjust arglist (for use in map_keymap).
+ Properly hide a second binding when not both are keymaps.
+
+ * xmenu.c (struct skp): New struct, to pass args through map_keymap.
+ (single_keymap_panes): Use it and map_keymap.
+ (single_menu_item): Use skp as well.
+
+ * keymap.h (map_keymap_function_t): New type.
+ (map_keymap): Declare.
+
+ * keymap.c (map_keymap_item, map_keymap_char_table_item, map_keymap)
+ (map_keymap_call, Fmap_keymap): New functions.
+ (syms_of_keymap): Defsubr map-keymap.
+
+2003-05-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (create_dialog, make_widget_for_menu_item)
+ (make_menu_item, create_menus, xg_update_menu_item): Don't call
+ ..._with_mnemonic functions for menu items.
+
+2003-05-01 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (coding_system_accept_latin_extra_p): Delete this
+ function.
+ (find_safe_codings): Pay attention to
+ the property tranlsation-table-for-encode of each codings.
+ (syms_of_coding): Give Qtranslation_table the extra slot number 2.
+
+2003-05-01 Stefan Monnier <monnier@cs.yale.edu>
+
+ * eval.c (Funwind_protect): Use func=Fprogn rather than symbol=Qnil.
+
+2003-04-30 Stefan Monnier <monnier@cs.yale.edu>
+
+ * eval.c (unbind_to): Don't handle symbol = Qnil any more.
+
+ * lisp.h (CHECK): Wrap args in parenthesis.
+ (specbind): Fix doc: symbol = Qnil is not supported any more.
+
+ * bytecode.c (Fbyte_code) <unwind-protect>:
+ Use Fprogn rather than 0 and Qnil.
+
+ * keyboard.c (parse_modifiers_uncached): Parse `down', `drag',
+ `double', and `triple' modifiers as well.
+
+2003-04-30 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (echo_char): Don't clear out a dash that follows a space.
+
+ * alloc.c (abort_on_gc): New variable.
+ (Fgarbage_collect): Abort if abort_on_gc is set.
+
+ * lisp.h (abort_on_gc): Add decl.
+
+ * eval.c (Fsignal): Clear abort_on_gc.
+
+ * editfns.c (Fformat): Set abort_on_gc during first scan of format.
+ Reinit FORMAT_START and END before second scan.
+
+ * xdisp.c (move_it_vertically_backward): Do the final big else
+ even if nlines is 0.
+
+ * xdisp.c (redisplay_internal): Finish the per-frame loop
+ even if redisplay is suspended by input.
+
+2003-04-24 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (x_list_fonts): Return all fonts that match if
+ maxnames = -1.
+
+2003-04-25 Kenichi Handa <handa@m17n.org>
+
+ * syntax.c (skip_chars): Fix previous change.
+
+2003-04-24 Kenichi Handa <handa@m17n.org>
+
+ * syntax.c (skip_chars): Make the code faster by using the common
+ technique of *p, *stop, and *endp.
+
+2003-04-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xdisp.c (update_tool_bar): BLOCK_INPUT before calling
+ tool_bar_items so GTK tool bar expose callback does not access items
+ being updated.
+
+2003-04-19 Stefan Monnier <monnier@cs.yale.edu>
+
+ * eval.c (Fapply): Undo last change and add a comment about why.
+
+2003-04-18 Miles Bader <miles@gnu.org>
+
+ * data.c (Faset): Calculate nbytes earlier, to satisfy the now
+ pickier PARSE_MULTIBYTE_SEQ.
+
+2003-04-17 Stefan Monnier <monnier@cs.yale.edu>
+
+ * eval.c (For, Fand, Fprogn, un_autoload, do_autoload):
+ Use XCDR, XCAR, CONSP.
+ (Fdefmacro): Fix docstring. Use XCAR, XCDR.
+ (Fapply): Remove unnecessary GCPRO.
+
+ * doc.c (Fsubstitute_command_keys): Remove spurious casts.
+
+ * charset.h (PARSE_MULTIBYTE_SEQ): Pretend `length' is used.
+
+ * buffer.h: Don't hardcode BEG==1.
+
+ * abbrev.c (Fdefine_abbrev_table): Use XCAR, XCDR.
+
+2003-04-16 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (try_window, try_window_reusing_current_matrix):
+ When at end of window, set window_end_pos to Z-ZV.
+
+ * buffer.c (Foverlay_recenter): Doc fix.
+
+2003-04-14 Stefan Monnier <monnier@cs.yale.edu>
+
+ * dispnew.c (Fsit_For): Support XEmacs-style arg list.
+
+2003-04-14 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (mac_check_for_quit_char): Don't check more often than
+ once a second.
+
+2003-04-11 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (kbd_buffer_get_event): Don't handle SELECT_WINDOW_EVENT
+ specially, so that they can't hide an implicit switch-frame event.
+ (make_lispy_event): Handle SELECT_WINDOW_EVENT.
+ (head_table): Use switch-frame as event_kind for select-window.
+ (keys_of_keyboard): Don't bind [select-window] in special-event-map.
+
+ * editfns.c (Fformat): Lisp_Object/int mixup.
+ (format2): Remove unused var numargs.
+
+2003-04-11 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Vafter_insert_file_adjust_coding_function): Delete.
+ (Qafter_insert_file_set_coding): New variable.
+ (syms_of_fileio): Initialize and staticpro it. Delete declaration
+ for after-insert-file-adjust-coding-function.
+ (Finsert_file_contents): Call Qafter_insert_file_set_coding
+ instead of Vafter_insert_file_adjust_coding_function.
+
+2003-04-11 Kenichi Handa <handa@m17n.org>
+
+ * lisp.h (temp_echo_area_glyphs): Adjust prototype.
+
+ * minibuf.c (temp_echo_area_glyphs): Change the arg to Lisp
+ string. Callers changed.
+
+2003-04-10 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Vafter_insert_file_adjust_coding_function): New variable.
+ (syms_of_fileio): Declare it as a lisp variable.
+ (Finsert_file_contents):
+ Call Vafter_insert_file_adjust_coding_function before calling
+ decode-format.
+
+2003-04-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (xg_scroll_callback): Call gtk_range_get_adjustment to
+ get GtkAdjustment as widget now is a GtkRange.
+
+ * gtkutil.c (xg_create_scroll_bar): Connect to value-changed on
+ GtkRange to avoid memory leak.
+
+2003-04-09 Kenichi Handa <handa@m17n.org>
+
+ * xfaces.c (Vface_font_rescale_alist): New variable.
+ (struct font_name): New member rescale_ratio.
+ (font_rescale_ratio): New function.
+ (split_font_name): If NUMERIC_P is nonzero, set font->rescale_ratio.
+ (better_font_p): On comparing point sized, pay attention to
+ recale_ratio member of fonts.
+ (build_scalable_font_name): Reflect font->rescale_ratio in the
+ font name.
+ (syms_of_xfaces): Declare Vface_font_rescale_alist as a Lisp variable.
+
+ * lread.c (read1): Before calling index, check if the 2nd
+ arguemnt is in ASCII range.
+
+2003-04-08 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Ffile_symlink_p): Doc fix.
+
+ * editfns.c (Fformat): Translate positions of text properties
+ in the format string to apply them to the result.
+
+ * fileio.c (Finsert_file_contents): Doc fix.
+ (syms_of_fileio) <after-insert-file-functions>: Doc fix.
+
+2003-04-08 Ivan Zakharyaschev <imz@altlinux.org> (tiny change)
+
+ * lread.c (openp): Get the Qfile_exists_p handler for STRING, not FN.
+
+2003-04-08 Steven Tamm <steventamm@mac.com>
+
+ * mac.c (init_mac_osx_environment): Switch libexec and bin so
+ that self-contained application finds libexec files.
+
+2003-04-08 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (code_convert_region_unwind):
+ Set Vlast_coding_system_used to the argument.
+ (code_convert_region): If post-read-conversion function changed
+ the value of last-coding-sytem, keep the new value in
+ coding->symbol so that it won't be overridden.
+ (run_pre_post_conversion_on_str): Likewise.
+ (coding_system_accept_latin_extra_p): New function.
+ (find_safe_codings): Pay attention to characters registered in
+ latin-extra-code-table.
+
+2003-04-07 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * Makefile.in (md5.o): Add missing dependency info.
+
+2003-04-06 Richard M. Stallman <rms@gnu.org>
+
+ * xselect.c (x_handle_selection_request): Move UNGCPRO to very end.
+
+ * marker.c (verify_bytepos): New function.
+
+ * intervals.c (set_intervals_multibyte_1): When becoming
+ multibyte, adjust right and left child sizes to a whole set of
+ characters. If an interval gets zero total-length, delete it.
+ If an interval consists of just its children, delete one of them.
+
+ * intervals.h (CHECK_TOTAL_LENGTH): New macro.
+ * intervals.c: Add many calls to CHECK_TOTAL_LENGTH.
+
+ * alloc.c (VALIDATE_LISP_STORAGE): Macro deleted.
+ All calls deleted.
+ (lisp_malloc): Do the work here directly.
+
+2003-04-06 Gareth Jones <emacs@referential.org.uk> (tiny change)
+
+ * fns.c (Flength): Return SUB_CHAR_TABLE_ORDINARY_SLOTS for sub
+ char tables.
+
+2003-04-04 Kenichi Handa <handa@m17n.org>
+
+ * editfns.c (Fformat): Use a copy of FORMAT string so that we can
+ destructively change "%S" to "%s".
+
+2003-04-03 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (choose_face_font): Make sure *NEEDS_OVERSTRIKE is
+ always set.
+
+2003-04-01 Dave Love <fx@gnu.org>
+
+ * xfns.c (xpm_lookup_color): Grok "opaque".
+
+2003-03-31 Andrew Choi <akochoi@shaw.ca>
+
+ * frame.c (x_report_frame_params) [HAVE_CARBON]: Do not report
+ parent window ID.
+
+ * macfns.c (syms_of_macfns): Remove call to init_x_parm_symbols.
+
+ * macterm.h (struct mac_output): Define x_pixels_diff and
+ y_pixels_diff.
+
+2003-03-31 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in ($(BLD)/frame.$(O)): Add dependency on
+ blockinput.h and files included from it.
+
+2003-03-31 Kim F. Storm <storm@cua.dk>
+
+ The following changes consolidates the common code related to
+ frame-parameter handling from the xfns.c, w32fns.c, and macfns.c
+ files into frame.c.
+
+ * frame.c: Include blockinput.h.
+ (Vx_resource_name, Vx_resource_class, Qx_frame_parameter)
+ (Qx_resource_name, Qface_set_after_frame_default): Define vars here.
+ (Qauto_raise, Qauto_lower, ...): Define all frame parameter
+ related vars here.
+ (struct frame_parm_table, frame_parms): New table for describing
+ frame parameters and their associated Q-variable.
+ The order of the parameters corresponds to the sequence of the
+ frame_parm_handlers table in redisplay_interface.
+ (x_fullscreen_move, x_set_frame_parameters)
+ (x_report_frame_params, x_set_fullscreen, x_set_line_spacing)
+ (x_set_screen_gamma, x_set_font, x_set_fringe_width)
+ (x_set_border_width, x_set_internal_border_width, x_set_visibility)
+ (x_set_autoraise, x_set_autolower, x_set_unsplittable)
+ (x_set_vertical_scroll_bars, x_set_scroll_bar_width, x_icon_type):
+ Generic functions for processing of frame parameters.
+ (validate_x_resource_name, xrdb_get_resource, Fx_get_resource)
+ (display_x_get_resource, x_get_resource_string): Functions for
+ generic access to X resources.
+ (x_get_arg, x_frame_get_arg, x_frame_get_and_record_arg)
+ (x_default_parameter, Fx_parse_geometry): Functions for generic
+ access to frame parameters.
+ (x_figure_window_size): Generic calculation of frame size.
+ Fixed to add space needed for tool bar. Also setup size_hint_flags.
+ (syms_of_frame): Intern and staticpro frame parameter variables.
+ Defvar_lisp Vx_resource_class and Vx_resource_name here.
+ Defsubr Sx_get_resource and Sx_parse_geometry.
+
+ * frame.h (Qauto_raise, Qauto_lower, ...): Declare extern all frame
+ parameter related vars defined in frame.c.
+ (EMACS_CLASS): Define here.
+ (enum FULLSCREEN_*): Define here.
+ (x_set_scroll_bar_default_width, x_wm_set_icon_position)
+ (x_set_offset, x_new_font, x_new_fontset): Add prototypes.
+ (x_fullscreen_adjust, x_set_frame_parameters, x_report_frame_params)
+ (x_set_fullscreen, x_set_line_spacing, x_set_screen_gamma, x_set_font)
+ (x_set_fringe_width, x_set_border_width, x_set_internal_border_width)
+ (x_set_visibility, x_set_autoraise, x_set_autolower)
+ (x_set_unsplittable, x_set_vertical_scroll_bars)
+ (x_set_scroll_bar_width, x_icon_type, validate_x_resource_name)
+ (x_figure_window_size): Add prototypes.
+
+ * dispextern.h (frame_parm_handler): New typedef.
+ (struct redisplay_interface): New member frame_parm_handlers.
+ (enum resource_types): Move declaration here.
+ (x_get_arg, x_frame_get_arg, x_frame_get_and_record_arg)
+ (x_default_parameter): Add prototypes.
+
+ * window.c: Remove extern decl for frame parameter vars.
+ (change_window_heights): New generic function;
+ replaces x_change_window_heights. All users changed.
+
+ * window.h (change_window_heights): Add prototype.
+
+ * xfaces.c: Remove extern decl for frame parameter vars.
+
+ * xterm.h (EMACS_CLASS): Remove. Use generic define.
+ (struct w32_display_info): Fix type of xrdb member.
+ (enum FULLSCREEN_*): Remove.
+ Remove prototypes for generic functions (in frame.h).
+
+ * xfns.c (Qauto_raise, Qauto_lower, ...): Remove vars for frame
+ parameters now defined in frame.h and frame.c.
+ (Vx_resource_name): Remove. Use generic var.
+ (enum x_frame_parms): Remove (bogus, unused enum).
+ (check_x_display_info): Make non-static (for frame.c).
+ (struct x_frame_parm_table, x_frame_parms): Remove.
+ (init_x_parm_symbols, x_set_frame_parameters, x_report_frame_params)
+ (x_set_line_spacing, x_set_screen_gamma, x_icon_type, x_set_font)
+ (x_set_border_width, x_set_internal_border_width, x_set_visibility)
+ (x_change_window_heights, x_set_autoraise, x_set_autolower)
+ (x_set_vertical_scroll_bars, x_set_scroll_bar_width)
+ (validate_x_resource_name, Fx_get_resource, x_get_resource_string)
+ (x_default_parameter, Fx_parse_geometry, x_figure_window_size):
+ Remove. Use generic functions instead.
+ (enum resource_types): Remove.
+ (x_set_scroll_bar_default_width): New global function (for frame.c).
+ (Fx_create_frame): Depend on x_figure_window_size to add space for
+ toolbar and setup size_hint_flags.
+ (x_frame_parm_handlers): New table for redisplay_interface.
+ (syms_of_xfns): Don't intern/staticpro removed vars.
+
+ * xterm.c: Remove unnecessary extern declarations.
+ (x_fullscreen_adjust): Remove. Use generic instead.
+ (x_redisplay_interface): Add x_frame_parm_handlers member.
+
+ * w32gui.h (XrmDatabase): New (dummy) typedef.
+
+ * w32term.h (EMACS_CLASS): Remove. Use generic define.
+ (struct w32_display_info): Fix type of xrdb member.
+ (enum FULLSCREEN_*): Remove.
+ (x_fullscreen_adjust): Remove prototype.
+
+ * w32fns.c (Qauto_raise, Qauto_lower, ...): Remove vars for frame
+ parameters now defined in frame.h and frame.c.
+ (Vx_resource_name): Remove. Use generic var.
+ (enum x_frame_parms): Remove (bogus, unused enum).
+ (check_x_display_info): Make non-static (for frame.c).
+ (struct x_frame_parm_table, x_frame_parms): Remove.
+ (init_x_parm_symbols, x_set_frame_parameters, x_report_frame_params)
+ (x_set_line_spacing, x_set_screen_gamma, x_icon_type, x_set_font)
+ (x_set_border_width, x_set_internal_border_width, x_set_visibility)
+ (x_change_window_heights, x_set_autoraise, x_set_autolower)
+ (x_set_vertical_scroll_bars, x_set_scroll_bar_width)
+ (validate_x_resource_name, Fx_get_resource, x_get_resource_string)
+ (x_default_parameter, Fx_parse_geometry, x_figure_window_size):
+ Remove. Use generic functions instead.
+ (enum resource_types): Remove.
+ (x_set_scroll_bar_default_width): New global function (for frame.c).
+ (Fx_create_frame): Depend on x_figure_window_size to add space for
+ toolbar and setup size_hint_flags.
+ (w32_frame_parm_handlers): New table for redisplay_interface.
+ (syms_of_w32fns): Don't intern/staticpro removed vars.
+
+ * w32term.c: Remove unnecessary extern declarations.
+ (x_fullscreen_adjust): Remove. Use generic instead.
+ (x_redisplay_interface): Add w32_frame_parm_handlers member.
+
+ * w32reg.c (x_get_string_resource): Use XrmDatabase.
+
+ * macgui.h (XrmDatabase): New (dummy) typedef.
+
+ * macterm.h (EMACS_CLASS): Remove.
+ (struct mac_display_info): Add xrdb member.
+ (struct mac_output): Add want_fullscreen member.
+
+ * macfns.c (Qauto_raise, Qauto_lower, ...): Remove vars for frame
+ parameters now defined in frame.h and frame.c.
+ (Vx_resource_name): Remove. Use generic var.
+ (check_x_display_info): Make non-static (for frame.c).
+ (struct x_frame_parm_table, x_frame_parms): Remove.
+ (init_x_parm_symbols, x_set_frame_parameters, x_report_frame_params)
+ (x_set_line_spacing, x_set_screen_gamma, x_icon_type, x_set_font)
+ (x_set_border_width, x_set_internal_border_width, x_set_visibility)
+ (x_change_window_heights, x_set_autoraise, x_set_autolower)
+ (x_set_vertical_scroll_bars, x_set_scroll_bar_width)
+ (validate_x_resource_name, Fx_get_resource, x_get_resource_string)
+ (x_default_parameter, Fx_parse_geometry, x_figure_window_size):
+ Remove. Use generic functions instead.
+ (enum resource_types): Remove.
+ (x_set_scroll_bar_default_width): New global function (for frame.c).
+ (mac_frame_parm_handlers): New table for redisplay_interface.
+ (syms_of_macfns): Don't intern/staticpro removed vars.
+
+ * macterm.c: Remove unnecessary extern declarations.
+ (x_redisplay_interface): Add mac_frame_parm_handlers member.
+
+ * Makefile.in (frame.o): Add dependency on blockinput.h and files
+ included from it (atimer.h and systime.h).
+
+2003-03-30 Andreas Schwab <schwab@suse.de>
+
+ * xdisp.c (x_insert_glyphs): Fix swapped width and height
+ parameters for shift_glyphs_for_insert.
+
+ * macterm.c (x_redisplay_interface): Add missing entry for
+ draw_vertical_window_border.
+
+2003-03-29 Kai Gro,A_(Bjohann <kai.grossjohann@gmx.net>
+
+ * fileio.c (Fexpand_file_name): In the no-handler case, after
+ expanding, look again for a handler and invoke it. This is needed
+ for filenames like "/foo/../user@host:/bar/../baz" -- the first
+ expansion produces "/user@host:/bar/../baz" which needs to be
+ expanded again for the finame result "/user@host:/baz".
+
+2003-03-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_item_expose_callback): Reduce size
+ of area to be redrawn for better performance.
+
+2003-03-28 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xterm.c (take_vertical_position_into_account): Remove.
+ (xt_action_hook): Call set_vertical_scroll_bar if needed.
+ (XM_SB_MIN, XM_SB_RANGE): Remove (min is now set to 0).
+ (xm_scroll_callback, x_create_toolkit_scroll_bar)
+ (x_set_toolkit_scroll_bar_thumb): Simplify.
+ (x_scroll_bar_expose): Only compile if !USE_TOOLKIT_SCROLL_BARS.
+ (XTread_socket): Remove unused var.
+ (x_make_frame_invisible): Replace goto with else.
+
+ * xdisp.c (set_vertical_scroll_bar): New fun.
+ (redisplay_window): Use it.
+
+2003-03-26 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (update_tool_bar): Recompute tool bar if
+ update_mode_lines is set. Set w->update_mode_line
+ only if the tool bar contents actually change.
+ (update_menu_bar): Undo previous change.
+
+2003-03-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_resize_widgets): Don't call xg_frame_cleared.
+ (xg_frame_set_char_size): Calculate scroll bar width before frame
+ width. Call SET_FRAME_GARBAGED and cancel_mouse_face.
+ (xg_separator_p): Check for all documented separator types.
+ (xg_update_scrollbar_pos): Variable gheight not needed, use height.
+ (update_frame_tool_bar): Don't call gdk_window_process_all_updates.
+
+ * xdisp.c (update_menu_bar): Set w->update_mode_line to Qt
+ so tool bar gets updated.
+
+2003-03-26 Stefan Monnier <monnier@cs.yale.edu>
+
+ * data.c (store_symval_forwarding): Re-instate part of the code
+ that was deleted with too much enthusiasm.
+
+2003-03-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * data.c (store_symval_forwarding): Delete special read-only
+ hack for type == -1, since we now use ->constant instead.
+ (Fkill_local_variable): Don't use XBUFFER if it can be nil.
+
+ * buffer.c (overlays_in): Declare static.
+ (syms_of_buffer) <enable-multibyte-characters>: Use the symbol's
+ `constant' field rather than the variable's `type' field.
+
+2003-03-24 Andrew Choi <akochoi@shaw.ca>
+
+ * config.in [MAC_OSX]: Do not redefine bcopy, bzero, and bcmp.
+
+ * dispextern.h [HAVE_CARBON]: Include Carbon.h.
+
+ * fns.c [MAC_OSX]: Do not redefine vector.
+
+ * keyboard.c [MAC_OSX]: Handle SIGINT with interrupt_signal.
+
+ * macgui.h: Remove definition of No_Cursor.
+
+ * macterm.h: Include Carbon.h. Replace (struct Cursor *) by Cursor.
+
+ * xdisp.c: Define No_Cursor.
+ (x_write_glyphs, notice_overwritten_cursor)
+ (draw_phys_cursor_glyph, note_mode_line_or_margin_highlight)
+ (note_mouse_highlight): Remove Mac-specific code.
+ (note_mouse_highlight): Use bcmp instead of == to compare Cursors.
+
+2003-03-24 John Paul Wallington <jpw@gnu.org>
+
+ * xdisp.c (redisplay_window): If mini window's buffer is not
+ empty, then redisplay it like other windows.
+
+2003-03-23 Kim F. Storm <storm@cua.dk>
+
+ * w32term.c (w32_draw_window_cursor): Fix last change.
+
+2003-03-23 Kenichi Handa <handa@m17n.org>
+
+ * alloc.c (make_string_from_bytes, make_specified_string):
+ Add `const' for the arg CONTENTS.
+
+ * lisp.h (make_string_from_bytes, make_specified_string):
+ Prototypes adjusted.
+
+2003-03-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xdisp.c (get_glyph_string_clip_rect): Remove ; at end of #endif.
+
+ * gtkutil.h: Take two more arguments to xg_update_scrollbar_pos.
+ (XG_SB_RANGE): New define.
+
+ * gtkutil.c (xg_fixed_handle_expose): New function.
+ (xg_create_frame_widgets): Call xg_fixed_handle_expose for
+ expose events.
+ (xg_update_scrollbar_pos): Take two more arguments, left and width
+ of scroll bar including borders.
+ Clear left and right part outside scroll bar separately as some
+ themes have bars that are not an even number of pixels.
+ Don't set reallocate_redraws, don't call
+ gdk_window_process_all_updates.
+ (xg_set_toolkit_scroll_bar_thumb): Upper value is fixed,
+ so no need to change it. Calculate size and value with XG_SB_RANGE.
+
+ * xterm.c (x_scroll_bar_create, XTset_vertical_scroll_bar):
+ Pass left and width of scroll bar including borders to
+ xg_update_scrollbar_pos.
+
+2003-03-22 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * Makefile.in: Make sure space precedes end-of-line backslashes.
+
+2003-03-22 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (pixel_to_glyph_coords, glyph_to_pixel_coords):
+ Add generic versions here. Remove system specific versions
+ defined elsewhere.
+
+ * dispextern.h (pixel_to_glyph_coords, glyph_to_pixel_coords):
+ Add prototypes.
+
+ * xterm.h (STORE_NATIVE_RECT): New macro.
+
+2003-03-21 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_glyph_string_clip_rect):
+ Use FRAME_INTERNAL_BORDER_WIDTH.
+
+ * dispextern.h (struct redisplay_interface): Add active_p
+ argument to draw_window_cursor member. All uses changed.
+
+2003-03-21 Kim F. Storm <storm@cua.dk>
+
+ The following changes consolidate code related to writing and
+ inserting glyphs, exposing frame, the tool bar, the mouse face,
+ the output cursor, and help echo from xterm.c, w32term.c and
+ macterm.c into xdisp.c. It also generalizes the use of the
+ window_part enum instead of using numeric values throughout.
+
+ * xdisp.c: Consolidate gui-independent code here.
+ Include keymap.h.
+ (Qhelp_echo): Import.
+ (mouse_autoselect_window, x_stretch_cursor_p): Declare here.
+ (help_echo_string, help_echo_window, help_echo_object)
+ (previous_help_echo_string, help_echo_pos): Declare here.
+ (output_cursor, last_mouse_frame, last_tool_bar_item): Declare here.
+ (estimate_mode_line_height): Define here. Handle windowing
+ systems directly (without using estimate_mode_line_height_hook).
+ (x_y_to_hpos_vpos, get_tool_bar_item, note_tool_bar_highlight):
+ (update_window_cursor, update_cursor_in_window_tree)
+ (fast_find_position, fast_find_string_pos)
+ (note_mode_line_highlight, note_mode_line_or_margin_highlight)
+ (expose_area, expose_line, expose_overlaps, expose_window)
+ (expose_window_tree, phys_cursor_in_rect_p): New generic versions;
+ declared static as they are only used locally in xdisp.c.
+ (draw_glyphs): Rename from x_draw_glyphs and make static.
+ (tool_bar_item_info, notice_overwritten_cursor): Make static.
+ (frame_to_window_pixel_xy, get_glyph_string_clip_rect)
+ (set_output_cursor, x_cursor_to, handle_tool_bar_click)
+ (x_write_glyphs, x_insert_glyphs, x_clear_end_of_line):
+ (x_fix_overlapping_area, draw_phys_cursor_glyph, erase_phys_cursor)
+ (display_and_set_cursor, x_update_cursor, x_clear_cursor)
+ (show_mouse_face, clear_mouse_face, cursor_in_mouse_face_p)
+ (note_mouse_highlight, x_clear_window_mouse_face)
+ (cancel_mouse_face, x_draw_vertical_border, expose_frame)
+ (x_intersect_rectangles): New generic functions for use by xdisp.c
+ and GUI front-ends.
+ (syms_of_xdisp): Initialize and staticpro help_echo* variables.
+ Defvar_bool "x-streach-cursor" and "mouse-autoselect-window" here.
+
+ * dispextern.h (Display_Info): Generic typedef for *_display_info.
+ (NativeRectangle): Generic typedef for rectangle type.
+ (enum window_part): Move here from window.c.
+ (struct redisplay_interface): New members flush_display_optional,
+ define_frame_cursor, clear_frame_area, draw_window_cursor,
+ draw_vertical_window_border, shift_glyphs_for_insert.
+ Rename member clear_mouse_face to clear_window_mouse_face.
+ (estimate_mode_line_height_hook): Remove hook.
+ (auto_raise_tool_bar_buttons_p): Don't declare extern.
+ (tool_bar_item_info): Remove prototype.
+ (help_echo_string, help_echo_window, help_echo_object)
+ (previous_help_echo_string, help_echo_pos)
+ (last_mouse_frame, last_tool_bar_item, mouse_autoselect_window):
+ (x_stretch_cursor_p, output_cursor): Declare extern.
+ (x_draw_glyphs, notice_overwritten_cursor): Remove prototypes.
+ (x_write_glyphs), x_insert_glyphs, x_clear_end_of_line)
+ (x_fix_overlapping_area, draw_phys_cursor_glyph, erase_phys_cursor)
+ (display_and_set_cursor, set_output_cursor, x_cursor_to)
+ (x_update_cursor, x_clear_cursor, x_draw_vertical_border)
+ (frame_to_window_pixel_xy, get_glyph_string_clip_rect)
+ (note_mouse_highlight, x_clear_window_mouse_face, cancel_mouse_face)
+ (handle_tool_bar_click, clear_mouse_face, show_mouse_face)
+ (cursor_in_mouse_face_p, expose_frame, x_intersect_rectangles):
+ Add prototypes.
+ (mode_line_string, marginal_area_string): Fix prototypes.
+
+ * window.c (enum window_part): Move to dispextern.h.
+ (coordinates_in_window): Use enum window_part member names
+ instead of numbers to describe return value.
+ (struct check_window_data): Change part member to window_part.
+ (check_window_containing): Return window_part unaltered.
+ (window_from_coordinates): Change part arg from int to enum
+ window_part. Allow part arg to be null. All users changed.
+
+ * window.h (window_from_coordinates): Fix prototype.
+
+ * term.c (estimate_mode_line_height): Move to xdisp.c.
+
+ * keyboard.c (make_lispy_event): Use enum window_part.
+
+ * dispnew.c (mode_line_string, marginal_area_string): Use enum
+ window_part instead of int in arg list. Users changed.
+
+ * xterm.h (No_Cursor): Declare as None for X.
+ (struct mac_output): Replace member cross_cursor by hand_cursor.
+
+ * xterm.c: Remove consolidated defines and code.
+ (BETWEEN): Remove unused macro.
+ (x_draw_vertical_window_border, x_shift_glyphs_for_insert)
+ (x_define_frame_cursor, x_clear_frame_area)
+ (x_draw_window_cursor): New X-specific functions for RIF.
+ (x_redisplay_interface): Add new members.
+
+ * xfns.c: Setup and use hand_cursor instead of cross_cursor.
+
+ * w32term.h (struct w32_output): Remove cross_cursor member.
+
+ * w32term.c: Remove consolidated defines and code.
+ (BETWEEN): Remove unused macro.
+ (w32_draw_vertical_window_border, w32_shift_glyphs_for_insert)
+ (w32_define_frame_cursor, w32_clear_frame_area)
+ (w32_draw_window_cursor): New W32-specific functions for RIF.
+ (w32_redisplay_interface): Add new members.
+
+ * w32gui.h (No_Cursor): Define as 0 for W32.
+ (XRectangle): Add X compatible rectangle type.
+ (NativeRectangle): Declare as RECT for W32.
+ (CONVERT_TO_XRECT, CONVERT_FROM_XRECT, STORE_NATIVE_RECT): New macros.
+
+ * w32fns.c: Remove setup of cross_cursor (already has hand_cursor).
+
+ * w32console.c: Remove consolidated defines and code.
+
+ * msdos.h (Display_Info): Add generic typedef.
+
+ * msdos.c: Remove consolidated defines and code.
+ (IT_note_mouse_highlight, dos_rawgetc): Use enum window_part.
+
+ * macterm.h (struct mac_output): Replace member cross_cursor by
+ hand_cursor.
+ (activate_scroll_bars, deactivate_scroll_bars): Add prototypes.
+
+ * macterm.c: Remove consolidated defines and code.
+ (BETWEEN): Remove unused macro.
+ (mac_draw_vertical_window_border, mac_shift_glyphs_for_insert)
+ (mac_define_frame_cursor, mac_clear_frame_area)
+ (mac_draw_window_cursor): New Mac-specific functions for RIF.
+ (x_redisplay_interface): Add new members.
+
+ * macgui.h (No_Cursor): Define as 0 for Mac.
+ (XRectangle): Add X compatible rectangle type.
+ (NativeRectangle): Declare as Rect for Mac.
+ (CONVERT_TO_XRECT, CONVERT_FROM_XRECT, STORE_NATIVE_RECT): New macros.
+
+ * macfns.c (x_set_mouse_color): Setup hand_cursor.
+ (x_set_cursor_color): Use x_display_and_set_cursor.
+
+ * Makefile.in (xdisp.o): Add dependency on blockinput.h and files
+ included from it. Add dependency on keymap.h.
+
+ * makefile.w32-in (xdisp.o): Add dependency on keymap.h.
+
+2003-03-21 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Fexpand_file_name): Fix previous change.
+
+2003-03-19 Kenichi Handa <handa@m17n.org>
+
+ * fileio.c (Ffile_name_directory): Reconstruct file name by
+ make_specified_string.
+ (Ffile_name_nondirectory, Ffile_name_as_directory)
+ (Fdirectory_file_name, Fexpand_file_name)
+ (Fsubstitute_in_file_name): Likewise.
+ (Fread_file_name): Compare decoded homedir with DIR and
+ DEFAULT_FILENAME.
+
+ * alloc.c (make_specified_string): If NCHARS is negative, count
+ the number of characters.
+
+2003-03-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_frame_cleared): Call gtk_widget_queue_draw for
+ all widgets.
+
+ * gtkutil.h: Removed xg_ignore_next_thumb.
+
+2003-03-18 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Vchar_coding_system_table): Remove this variable.
+ (Vcoding_system_safe_chars): New variable.
+ (intersection): Remove this function.
+ (find_safe_codings): Don't use Vchar_coding_system_table, but try
+ all codings in SAFE_CODINGS.
+ (Ffind_coding_systems_region_internal): Adjust for the change of
+ find_safe_codings. Get generic coding systems from
+ Vcoding_system_safe_chars.
+ (Fdefine_coding_system_internal): New function.
+ (syms_of_coding): Defsubr Sdefine_coding_system_internal.
+ Initialize and staticpro Vcoding_system_safe_chars.
+
+2003-03-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_set_toolkit_scroll_bar_thumb): Check if new values
+ equal old values before updating.
+
+ * xterm.c (xg_scroll_callback): Remove xg_ignore_next_thumb.
+
+ * gtkutil.c (xg_initialize): Remove xg_ignore_next_thumb.
+
+2003-03-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c: Removed handle_fixed_child, struct xg_last_sb_pos.
+ (xg_resize_widgets): Don't call foreach(handle_fixed_child).
+ (xg_gtk_scroll_destroy): Remove free of struct xg_last_sb_pos.
+ (scroll_bar_button_cb): Set bar->dragging to nil on button release.
+ (xg_create_scroll_bar): Pass bar to button event callback.
+ (xg_find_top_left_in_fixed): New function.
+ (xg_update_scrollbar_pos): Don't call gdk_window_clear on
+ whole scroll bar area. Get old position with
+ xg_find_top_left_in_fixed, calculate and only clear needed areas.
+ (xg_set_toolkit_scroll_bar_thumb): Do not adjust scroll bar if
+ dragging is in progress. Calculate whole as for Motif.
+ Remove code that saved last values. Call gtk_range functions to
+ set scroll bar sizes.
+
+ * gtkutil.h: Removed xg_ignore_next_thumb.
+
+2003-03-17 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in ($(BLD)/xdisp.$(O)): Add dependency on blockinput.h
+ and files included from it.
+
+2003-03-18 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keymap.c (accessible_keymaps_1): Break cycles but without preventing
+ multiple occurrences of the same keymap under different prefixes.
+ (Faccessible_keymaps): Remove code redundant since 1994-08-03T07:39:00Z!rms@gnu.org.
+
+2003-03-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32gui.h: Use HDC for Display.
+
+ * w32term.c (w32_encode_char): Prevent double-byte chars from
+ crashing Emacs.
+
+ * w32fns.c (jpeg_load, png_load, slurp_file): Read image files
+ as binary.
+
+2003-03-16 Juanma Barranquero <lektu@terra.es>
+
+ * xdisp.c (x_produce_glyphs): Use FRAME_BASELINE_OFFSET.
+
+2003-03-16 Kim F. Storm <storm@cua.dk>
+
+ The following changes consolidate some of the gui-independent
+ parts of the processing and drawing of "glyph strings" from
+ xterm.c, w32term.c, and macterm.c into xdisp.c.
+
+ * dispextern.h (struct glyph): Reduce face_id member from 22 to
+ 21 bits (this reduces number of faces from 4M to 2M).
+ Replace W32 specific w32_font_type member (2 bits) by generic
+ font_type member (3 bits) for portability.
+ (FONT_TYPE_UNKNOWN): New define, default for font_type member.
+ (enum draw_glyphs_face): Define here.
+ (struct glyph_string): Define here. Merge W32 and X versions.
+ (struct redisplay_interface): New members per_char_metric,
+ encode_char, compute_glyph_string_overhangs, draw_glyph_string.
+ (VCENTER_BASELINE_OFFSET): Define here.
+ (dump_glyph_string, x_get_glyph_overhangs, x_produce_glyphs)
+ (x_draw_glyphs, notice_overwritten_cursor): Declare prototypes here.
+
+ * xdisp.c: Consolidate gui-independent "glyph string" code here.
+ (dump_glyph_string): Moved here.
+ (init_glyph_string, append_glyph_string_lists, append_glyph_string)
+ (prepend_glyph_string_lists, get_glyph_face_and_encoding)
+ (fill_composite_glyph_string, fill_glyph_string)
+ (fill_image_glyph_string, fill_stretch_glyph_string)
+ (left_overwritten, left_overwriting, right_overwritten)
+ (right_overwriting, get_char_face_and_encoding)
+ (set_glyph_string_background_width, compute_overhangs_and_x)
+ (append_glyph, append_composite_glyph, produce_image_glyph)
+ (take_vertical_position_into_account, append_stretch_glyph)
+ (produce_stretch_glyph): New generic functions (based on X version).
+ Call platform specific functions through rif.
+ (INIT_GLYPH_STRING): New macro, hides W32 details.
+ (BUILD_STRETCH_GLYPH_STRING, BUILD_IMAGE_GLYPH_STRING)
+ (BUILD_CHAR_GLYPH_STRINGS, BUILD_COMPOSITE_GLYPH_STRING)
+ (BUILD_GLYPH_STRINGS): Generic macros (based on X version).
+ (x_draw_glyphs, x_get_glyph_overhangs, x_produce_glyphs)
+ (notice_overwritten_cursor):
+ Generic functions exported to platform modules. Users changed.
+
+ * xterm.h (FONT_DESCENT, FRAME_X_OUTPUT, FRAME_BASELINE_OFFSET)
+ (FONT_TYPE_FOR_UNIBYTE, FONT_TYPE_FOR_MULTIBYTE)
+ (STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2):
+ New macros for consolidated code.
+
+ * xterm.c: Remove consolidated defines and code.
+ (x_per_char_metric, x_encode_char)
+ (x_compute_glyph_string_overhangs): Adapt to RIF requirements.
+ (x_redisplay_interface): Add new members.
+
+ * w32gui.h (Display): Add dummy typedef for consolidation.
+ (XChar2b): Define alias for wchar_t for consolidation.
+ (STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2): New macros.
+
+ * w32term.h (FRAME_X_OUTPUT, FRAME_X_WINDOW, FRAME_X_DISPLAY)
+ (FONT_TYPE_FOR_UNIBYTE, FONT_TYPE_FOR_MULTIBYTE):
+ New macros for consolidation.
+
+ * w32term.c: Remove consolidated defines and code.
+ (BUILD_WCHAR_T, BYTE1, BYTE2): Macros removed; callers changed
+ to use STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2 instead.
+ (w32_per_char_metric): Change font_type arg to int for RIF.
+ (w32_encode_char): Return int according to RIF requirements.
+ (w32_compute_glyph_string_overhangs): Adapt to RIF.
+ (w32_get_glyph_overhangs): New function for RIF. Uses generic
+ x_get_glyph_overhangs.
+ (w32_redisplay_interface): Add new members.
+
+ * macgui.h (XChar2b): Move typedef here for consolidation.
+ (STORE_XCHAR2B, XCHAR2B_BYTE1, XCHAR2B_BYTE2): New macros.
+
+ * macterm.h (FRAME_X_OUTPUT, FRAME_X_WINDOW, FRAME_X_DISPLAY):
+ (FONT_TYPE_FOR_UNIBYTE, FONT_TYPE_FOR_MULTIBYTE): New macros for
+ consolidation.
+
+ * macterm.c: Remove consolidated defines and code.
+ (mac_per_char_metric): New function for RIF.
+ (mac_encode_char): Adapt to new RIF requirements.
+ (mac_compute_glyph_string_overhangs): Adapt for RIF.
+ (x_redisplay_interface): Add new members.
+
+2003-03-15 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keymap.c (Vmenu_events): New var.
+ (syms_of_keymap): Initialize it.
+ (where_is_internal): Check more carefully what is a menu event.
+
+2003-03-14 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (read1): After #!, exit loop on eof.
+
+2003-03-14 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.h: Add declaration for xg_frame_cleared.
+
+ * xterm.c (x_clear_frame): Call xg_frame_cleared for GTK.
+
+ * gtkutil.c (struct xg_last_sb_pos): New structure.
+ (handle_fixed_child): New function.
+ (xg_resize_widgets): Call handle_fixed_child on all scroll bar widgets
+ and force a redraw on them.
+ (xg_gtk_scroll_destroy): Free struct xg_last_sb_pos also.
+ (xg_create_scroll_bar): Add struct xg_last_sb_pos to scroll bar
+ so we can avoid unneeded redraws.
+ (xg_update_scrollbar_pos): Invalidate data in xg_last_sb_pos
+ and force a redraw on the scroll bar.
+ (xg_set_toolkit_scroll_bar_thumb): Do not change/redraw scroll bar
+ if xg_last_sb_pos shows the positions are up to date.
+ (xg_frame_cleared): New function.
+
+2003-03-13 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Fdetect_coding_region): Fix docstring.
+ (Fdetect_coding_string): Fix docstring.
+
+2003-03-13 Andreas Schwab <schwab@suse.de>
+
+ * gtkutil.c: Add prototype for create_menus.
+
+ * data.c (long_to_cons): Fix type of top.
+
+ * xselect.c (selection_data_to_lisp_data): Use int instead of
+ long for an integer of size 4.
+
+ * gtkutil.c (xg_update_frame_menubar): Add missing return value.
+ (xg_tool_bar_help_callback): Likewise.
+
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * xterm.c (x_term_init) [USE_GTK]: Fix typo.
+
+2003-03-12 Kim F. Storm <storm@cua.dk>
+
+ The following changes consolidate the fringe handling from
+ xterm.c, w32term.c, and macterm.c into xdisp.c.
+
+ * xdisp.c: Consolidate fringe handling code here.
+ (left_bits, right_bits, continued_bits, continuation_bits)
+ (ov_bits, zv_bits): Define fringe bitmaps.
+ (fringe_bitmaps): New array holding fringe bitmaps.
+ (draw_fringe_bitmap): Draw a specific bitmap; call display
+ specific drawing routine via rif->draw_fringe_bitmap.
+ (draw_row_fringe_bitmaps): Generic replacement for
+ x_draw_row_fringe_bitmaps; all callers changed.
+ (compute_fringe_widths): Generic replacement for
+ x_compute_fringe_widths; all callers changed.
+
+ * dispextern.h (enum fringe_bitmap_type): Define here.
+ (struct fringe_bitmap, struct draw_fringe_bitmap_params): New.
+ (fringe_bitmaps): Declare extern.
+ (struct redisplay_interface): New member draw_fringe_bitmap.
+ (draw_row_fringe_bitmaps, compute_fringe_widths): Declare extern.
+
+ * xterm.c: Remove generic fringe code.
+ (x_draw_fringe_bitmap): Only perform actual fringe drawing.
+ (x_redisplay_interface): Add x_draw_fringe_bitmap member.
+
+ * w32term.c: Remove generic fringe code.
+ (w32_draw_fringe_bitmap): Only perform actual fringe drawing.
+ (w32_redisplay_interface): Add w32_draw_fringe_bitmap member.
+
+ * macterm.c: Remove generic fringe code.
+ (x_draw_fringe_bitmap): Only perform actual fringe drawing.
+ (x_redisplay_interface): Add x_draw_fringe_bitmap member.
+
+2003-03-11 Stefan Monnier <monnier@cs.yale.edu>
+
+ * print.c (Fprin1_to_string): Return unibyte string if possible.
+
+2003-03-09 David Kastrup <dak@gnu.org>
+
+ * process.c (read_process_output): We have allocated enough space
+ for readmax and carryover, so actually use the alloted space.
+
+2003-03-09 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c (make_lispy_event): Extend mouse_syms if needed for
+ toolkit scrollbar click.
+
+ * xterm.c (x_window_to_scroll_bar): Call xg_get_scroll_id_for_window
+ for USE_GTK.
+ (x_scroll_bar_handle_click): Use this function for toolkit scrollbars
+ also.
+ (handle_one_xevent): ButtonPress/Release: If event is for a toolkit
+ scrollbar and control is pressed, call x_scroll_bar_handle_click.
+
+ * gtkutil.h (xg_get_scroll_id_for_window): Declare.
+
+ * gtkutil.c (xg_get_scroll_id_for_window): New function.
+ (xg_tool_bar_item_expose_callback): New function.
+ (xg_tool_bar_expose_callback): Call update_frame_tool_bar.
+ (xg_create_tool_bar): Connect xg_tool_bar_expose_callback to expose
+ on the tool bar widget.
+ (update_frame_tool_bar): Connect xg_tool_bar_item_expose_callback
+ to expose on the tool bar item widgets.
+
+2003-03-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Compare pixmap ID instead of
+ struct image* when deciding to update (struct image* may have been
+ deleted from the image cache).
+
+ * xterm.c (handle_one_xevent): Pass ReparentNotify to Xt even if
+ the event isn't for a frame (i.e. for dialogs).
+
+2003-03-07 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (CODING_ADD_COMPOSITION_COMPONENT): If the number of
+ composition components reaches the limit, terminate composing.
+ (COMPOSITION_OK): New macro.
+ (detect_coding_iso2022): Use it if an escape sequence for
+ composition is found.
+ (coding_restore_composition): Adjust the number of composition
+ components if it is not sane.
+
+2003-03-06 Juanma Barranquero <lektu@terra.es>
+
+ * w32term.h (struct w32_display_info): Add xrdb member to support
+ passing resources via -xrm on Windows.
+
+ * w32term.c (w32_make_rdb): New function.
+ (w32_term_init): Use it to initialize xrdb member of w32_display_info
+ struct. Delete leftover code.
+
+ * w32fns.c (Fx_get_resource, x_get_resource_string): Pass xrdb to check
+ for resources passed on the command line.
+
+ * w32reg.c (w32_get_rdb_resource): New function.
+ (x_get_string_resource): Use it, so resources passed with -xrm
+ supercede the ones in the registry.
+
+2003-03-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_detect_focus_change): Call x_any_window_to_frame
+ instead of x_top_window_to_frame.
+
+2003-03-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xsmfns.c (smc_save_yourself_CB): Add --no-splash to options
+ when restarting Emacs.
+
+2003-03-03 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fkill_buffer): Use Frun_hook_with_args_until_failure
+ to run kill-buffer-query-functions.
+ (Qkill_buffer_query_functions): New var.
+ (syms_of_buffer): Init and staticpro it.
+
+2003-03-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (XSync): Define as gdk_window_process_all_updates for GTK.
+
+2003-02-25 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Fix infinite loop in redisplay.
+ If centering point failed to make whole line visible and vscroll
+ is non-zero, disable vscroll and try centering point again.
+
+ * lread.c (read1): Accept `single space' syntax like (? x).
+
+2003-02-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c (cancel_hourglass_unwind): Surround with
+ #ifdef HAVE_X_WINDOWS.
+
+2003-02-25 Kenichi Handa <handa@m17n.org>
+
+ * buffer.c (Fset_buffer_multibyte): Pay attention to the buffer
+ process only when "subprocesses" is defined.
+
+2003-02-24 Stefan Monnier <monnier@cs.yale.edu>
+
+ * syntax.c (back_comment): Only check nestedness of 2nd char if needed.
+
+2003-02-24 Juanma Barranquero <lektu@terra.es>
+
+ * callint.c (fix_command): Declare as static void and move before
+ Fcall_interactively.
+
+ * xdisp.c (Qwhen): Declare external; it's now defined in callint.c.
+ (syms_of_xdisp): Don't initialize Qwhen.
+
+2003-02-23 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c (cancel_hourglass_unwind): New function.
+ (command_loop_1): Cancel hourglass with unwind-protect.
+
+2003-02-23 Richard M. Stallman <rms@gnu.org>
+
+ * callint.c (fix_command): New subroutine, from Fcall_interactively.
+ Detect (when ... (region-beginning)) etc.
+ (Fcall_interactively): Call fix_command.
+ (Qif, Qwhen): New variables.
+ (syms_of_callint): Init and staticpro them.
+
+ * regex.c (print_partial_compiled_pattern): Output to stderr.
+
+2003-02-23 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+
+ * dired.c (directory_files_internal): Don't expand directory.
+ (Fdirectory_files, Fdirectory_files_and_attributes): Do it here
+ instead. From Lars Hansen <larsh@math.ku.dk>.
+
+2003-02-22 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fns.c (string_to_multibyte): Remove unused var i.
+ (Flanginfo): Fix int/Lisp_Object mixup.
+ (void_call2): New fun.
+ (Fmap_char_table): Use it in place of call2.
+
+ * xfaces.c (x_face_list_fonts): Fix int/Lisp_Object mixup.
+
+ * macros.c (Fstart_kbd_macro): Remove redundant assignment.
+
+ * keymap.c (copy_keymap_1): Make it static.
+
+ * alloc.c (Fgarbage_collect): Don't use XSETFLOAT.
+
+2003-02-22 David Ponce <david@dponce.com>
+
+ * lread.c (Fload): Don't check STRING_MULTIBYTE.
+
+2003-02-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * process.h: Removed subtty field from struct Lisp_Process.
+
+ * process.c (create_process): Remove setting of subtty.
+ (emacs_get_tty_pgrp): New function.
+ (Fprocess_running_child_p, process_send_signal):
+ Call emacs_get_tty_pgrp instead of ioctl.
+ (process_send_signal): Call EMACS_KILLPG if ioctl TIOCSIGSEND fails.
+
+2003-02-21 Kai Gro,A_(Bjohann <kai.grossjohann@uni-duisburg.de>
+
+ * keymap.c (Fdefine_key): Doc fix.
+
+2003-02-21 Juanma Barranquero <lektu@terra.es>
+
+ Port of patch for RC by Klaus Zeitler <kzeitler@lucent.com>.
+
+ * s/hpux10.h: Define POLL_INTERRUPTED_SYS_CALL, not
+ POLLING_PROBLEM_IN_SELECT.
+
+ * s/hpux11.h: Include hpux10-20.h instead of hpux10.h.
+ Delete #undef of POLLING_PROBLEM_IN_SELECT.
+
+ * s/hpux10-20.h: New file.
+
+ * process.c (wait_reading_process_input):
+ Use POLL_INTERRUPTED_SYS_CALL, not POLLING_PROBLEM_IN_SELECT.
+
+2003-02-20 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (check_fontset_name): If NAME is nil, return the
+ default fontset.
+ (override_font_info): New function.
+ (Fset_fontset_font): Document that NAME nil means the default fontset.
+ (Ffontset_info): If FONTSET is not the default fontset, merge
+ FONTSET onto the copy of the default fontset, and work on that
+ copy. Document that NAME nil means the default fontset.
+ (Ffontset_font): Document that NAME nil means the default fontset.
+
+ * process.c (setup_process_coding_systems): If the process's
+ in/out descriptor is -1, do nothing.
+
+2003-02-19 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h (Fcancel_kbd_macro_events, Fstring_to_multibyte):
+ Add prototypes.
+
+2003-02-19 Kenichi Handa <handa@m17n.org>
+
+ * xfaces.c (try_alternative_families): Try all scalable fonts if
+ Vscalable_fonts_allowed is not Qt.
+
+2003-02-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfaces.c (x_face_list_fonts): Set *pfonts to 0 if no fonts found.
+
+2003-02-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_list_fonts): If maxnames is less than 0, get all font
+ names.
+
+ * xfaces.c (x_face_list_fonts): Allocate struct font_name here.
+ (sorted_font_list): Move allocation of struct font_name to
+ x_face_list_fonts.
+ (Fx_font_family_list): Set font-list-limit to -1 to get all font names.
+ (Fx_list_fonts): Set maxnames to -1 to get all font names.
+
+2003-02-18 Kim F. Storm <storm@cua.dk>
+
+ * lread.c (read1): Fix last change.
+ "`" is not always special. Allow "?" after a character constant.
+
+2003-02-18 Andrew Choi <akochoi@shaw.ca>
+
+ * unexmacosx.c (copy_data_segment): Also copy __cfstring section.
+
+2003-02-18 Andreas Schwab <schwab@suse.de>
+
+ * window.c (window_scroll_pixel_based): Move outside a
+ multi-glyph character before setting new window start.
+
+ * xdisp.c (in_display_vector_p): New function.
+ * dispextern.h (in_display_vector_p): Declare.
+
+2003-02-18 Kim F. Storm <storm@cua.dk>
+
+ * lread.c (read1): Fix and relax read syntax.
+ Recognize "[", ";", "#", and "?" after a dotted-pair dot.
+ Only recognize "," after dotted-pair dot if inside backquote.
+ Never include "`" or "," (inside backquote) in a symbol.
+ Allow dotted-pair dot after a character constant.
+ Allow "`" and "," (inside backquote) after a character constant.
+
+2003-02-17 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_tool_bar_expose_callback): New function.
+ (xg_create_tool_bar): Force style of tool bar to be horizontal with
+ icons. Set name of tool bar to emacs-toolbar.
+ (update_frame_tool_bar): Connect expose event to
+ xg_tool_bar_expose_callback.
+
+2003-02-17 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (this_command_key_count_reset): New variable.
+ Initiatize to 0 where this_command_key_count is set.
+ (read_char): Save and restore this_command_key_count_reset
+ around input method code.
+ (read_char): If this_command_key_count_reset, echo reread commands.
+ (Freset_this_command_lengths): Set this_command_key_count_reset to 1.
+
+2003-02-17 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (string_to_multibyte): Always return a multibyte string.
+
+2003-02-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_list_bdf_fonts, w32_list_fonts):
+ Negative max_fonts parameter means list all.
+
+2003-02-14 Dave Love <fx@gnu.org>
+
+ * fns.c (Flanginfo): Doc fix.
+
+2003-02-13 Kim F. Storm <storm@cua.dk>
+
+ * lread.c (read_escape): Interpret \s as a SPACE character, except
+ for \s-X in a character constant which still is the super modifier.
+ (read1): Signal an `invalid read syntax' error if a character
+ constant is immediately followed by a digit or symbol character.
+
+ * search.c (Fmatch_data): Doc fix. Explicitly state that
+ match-data is undefined if last search failed.
+
+ * keymap.c (Fcommand_remapping): Rename from Fremap_command.
+ All uses changed.
+
+2003-02-12 Juanma Barranquero <lektu@terra.es>
+
+ * eval.c (Fdefmacro): Fix typo.
+
+2003-02-12 Kim F. Storm <storm@cua.dk>
+
+ * macros.c (Fstart_kbd_macro): If appending, and last keyboard
+ macro is a string, convert meta modifiers in string when copying
+ the string into a vector.
+
+2003-02-11 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (Fremap_command): Return nil if arg is not a symbol.
+
+2003-02-11 Kenichi Handa <handa@m17n.org>
+
+ * Makefile.in (lisp, shortlisp): Add malayalam.el and tamil.el.
+
+2003-02-10 Kim F. Storm <storm@cua.dk>
+
+ * process.c: Doc fixes.
+ (syms_of_process): Add `:' prefix to QCfilter_multibyte.
+
+2003-02-10 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (Fstring_to_multibyte): Fix typo in the docstring.
+
+ * process.c (QCfilter_multibyte): New variable.
+ (setup_process_coding_systems): New function.
+ (Fset_process_buffer, Fset_process_filter):
+ Call setup_process_coding_systems.
+ (Fstart_process): Initialize the member `filter_multibyte' of
+ struct Lisp_Process.
+ (create_process): Call setup_process_coding_systems.
+ (Fmake_network_process): New keyward `:filter-multibyte'.
+ Initialize the member `filter_multibyte' of struct Lisp_Process.
+ Call setup_process_coding_systems.
+ (server_accept_connection): Call setup_process_coding_systems.
+ (read_process_output): If the process has a filter, decide the
+ multibyteness of a string to given to the filter by
+ `filter_multibyte' member of the process. If the process doesn't
+ have a filter and the result of conversion is unibyte, use
+ Fstring_to_multibyte (not Fstring_make_multibyte) to get the
+ multibyte form.
+ (Fset_process_coding_system): Call setup_process_coding_systems.
+ (Fset_process_filter_multibyte): New function.
+ (Fprocess_filter_multibyte_p): New function.
+ (syms_of_process): Intern and staticpro QCfilter_multibyte.
+ Defsubr Sset_process_filter_multibyte and
+ Sprocess_filter_multibyte_p.
+
+ * process.h (struct Lisp_Process): New member filter_multibyte.
+
+ * lisp.h (setup_process_coding_systems): Add prototype.
+
+ * buffer.c (Fset_buffer_multibyte): If the current buffer has a
+ process, update coding systems for the process.
+
+2003-02-09 Kenichi Handa <handa@m17n.org>
+
+ * fns.c (string_to_multibyte): New function.
+ (Fstring_to_multibyte): New function.
+ (syms_of_fns): Defsubr it.
+
+2003-02-08 Andreas Schwab <schwab@suse.de>
+
+ * Makefile.in (EXEEXT): Define to @EXEEXT@ and use this variable
+ instead of the substitution.
+
+2003-02-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
+
+ * xmenu.c (menu_position_func): Adjust menu popup position so that
+ the menu is fully visible.
+
+2003-02-07 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_text_icon, x_raise_frame, x_lower_frame)
+ (x_make_frame_invisible, x_wm_set_icon_position):
+ Use FRAME_OUTER_WINDOW instead of ifdef X_TOOLKIT/else/endif.
+
+ * xfns.c (x_set_name, x_set_title): Ditto.
+
+2003-02-04 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (echo_now): Update before_command_echo_length.
+ (Freset_this_command_lengths): Reset this_command_key_count etc.
+ immediately rather than arranging to do it later.
+ (before_command_key_count_1, before_command_echo_length_1)
+ (before_command_restore_flag): Vars deleted.
+ (add_command_key): Don't handle before_command_restore_flag.
+ (read_char, record_menu_key): Don't update before_command_key_count or
+ before_command_echo_length.
+ (read_char): Don't handle before_command_restore_flag.
+
+ * keyboard.c (command_loop_1): Don't call adjust_point_for_property
+ in direct-output clauses if it wouldn't be called in the ordinary case.
+
+2003-02-04 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (syms_of_keyboard) <this-original-command>: Doc fix.
+
+2003-02-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (remove_from_container): Copying list is not needed.
+ (xg_update_menubar, xg_update_menu_item, xg_update_submenu)
+ (xg_modify_menubar_widgets, update_frame_tool_bar): Call g_list_free
+ on list returned from gtk_container_get_children to avoid memory leak.
+
+2003-02-01 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_create_pixmap_from_bitmap_data): Use alloca for
+ local malloc.
+ [HAVE_XPM]: Avoid clashes with XColor, XImage and Pixel
+ definitions in xpm.h.
+ (init_xpm_functions): New function.
+ (xpm_load): Sync with xfns.c. Adapt for Windows version of libXpm.
+ (init_external_image_libraries): Try to load libXpm.dll.
+
+ * fileio.c (Fcopy_file) [WINDOWSNT]: Reverse logic for setting
+ timestamp.
+
+2003-01-31 Dave Love <fx@gnu.org>
+
+ * syntax.c (Fskip_chars_forward)
+ (open-paren-in-column-0-is-defun-start): Doc fix.
+
+2003-01-31 Joe Buehler <jhpb@draco.hekimian.com>
+
+ * fileio.c: Support // at start of name for Cygwin (just added proper
+ preprocessor tests).
+
+ * keyboard.c: Port to Cygwin (just added proper preprocessor tests).
+
+ * Makefile.in: Use @EXEEXT@ for Cygwin.
+
+ * mem-limits.h: Added ifdef to define BSD4_2 for Cygwin.
+
+ * s/cygwin.h: Added for Cygwin port.
+
+2003-01-31 Juanma Barranquero <lektu@terra.es>
+
+ * w32fns.c (DrawText): Kludge to avoid a redefinition on Windows
+ when including gif_lib.h.
+ (init_gif_functions, init_tiff_functions): New functions.
+ (gif_load, tiff_load): Sync with xfns.c version. Adjust colors for
+ Windows. Disable color table lookups. Call library functions
+ through pointers determined at runtime.
+ (init_external_image_libraries): Try to load libungif.dll and
+ libtiff.dll.
+
+2003-01-31 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (SKIP_GLYPHS): New macro.
+ (set_cursor_from_row): Skip all glyphs that comes from overlay string.
+
+2003-01-30 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (free_frame_tool_bar): Remove debug printf.
+
+2003-01-30 Dave Love <fx@gnu.org>
+
+ * alloc.c (Vgc_elapsed, gcs_done): New variables.
+ (Fgarbage_collect): Use them.
+ (init_alloc, syms_of_alloc): Set them up.
+
+2003-01-30 Juanma Barranquero <lektu@terra.es>
+
+ * w32fns.c (init_external_image_libraries): Add missing operator.
+
+2003-01-29 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (init_external_image_libraries): Allow jpeg-62.dll as
+ an alternative name for jpeg.dll.
+
+2003-01-29 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (set_cursor_from_row): Pay attention to string display
+ properties.
+
+2003-01-28 Benjamin Riefenstahl <Benjamin.Riefenstahl@epost.de>
+
+ * macterm.c (keycode_to_xkeysym_table): Add <tab>, <backspace>,
+ <escape>.
+ (keycode_to_xkeysym_table): Reformat and add more comments.
+ (XTread_socket): Drop special case for backspace.
+
+2003-01-28 Andrew Choi <akochoi@shaw.ca>
+
+ * macfns.c (x_to_mac_color): Correct the order for parsing the RGB
+ values in old-style RGB specs.
+
+2003-01-27 Juanma Barranquero <lektu@terra.es>
+
+ * w32fns.c (init_external_image_libraries): Try alternate names for the
+ jpeg dll.
+
+2003-01-27 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (create_dialog, xg_separator_p)
+ (xg_item_label_same_p, xg_update_menu_item): Check for NULL string
+ before calling strcmp or strlen.
+
+2003-01-26 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (update_frame_tool_bar): Call prepare_image_for_display
+ and handle image load failure.
+
+2003-01-26 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (init_jpeg_functions, jpeg_resync_to_restart_wrapper):
+ New functions.
+ (jpeg_load): Sync with xfns.c version. Adjust colors for Windows.
+ Disable color table lookups. Call jpeg library functions
+ through pointers determined at runtime.
+ (init_external_image_libraries): Try to load jpeg.dll.
+
+2003-01-25 Richard M. Stallman <rms@gnu.org>
+
+ * lisp.h: Declare format2 instead of format1.
+
+ * fileio.c (barf_or_query_if_file_exists):
+ Call format2 instead of format1.
+
+ * editfns.c (format2): New function, replaces format1
+ but takes exactly two Lisp Objects as format args.
+
+ * buffer.c (Fkill_buffer): Call format2 instead of format1.
+
+2003-01-25 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h: Change to return value of x_dispatch_event to int.
+
+ * xterm.c (x_filter_event): New function.
+ (event_handler_gdk, XTread_socket): Call x_filter_event.
+ (x_dispatch_event): Change to return value of finish.
+ (event_handler_gdk): Use return value from x_dispatch_event.
+
+ * xfns.c (x_window): Call create_frame_xic for GTK version to
+ initialize input methods.
+
+ * gtkutil.h: Add (void) prototypes.
+
+ * gtkutil.c (create_menus): Remove code that puts the help menu to
+ the right.
+
+2003-01-25 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (XPutPixel): Handle monochrome images; used for masks.
+ [HAVE_PNG]: Sync with xfns.c version.
+ (png_load): Adjust colors for Windows. Use Windows
+ bitmaps. Disable color table lookups.
+ (DEF_IMGLIB_FN, LOAD_IMGLIB_FN): New macros.
+ (init_png_functions): New function.
+ (png_read_from_memory, png_load): Call png library functions
+ through pointers determined at runtime.
+ (QCloader, QCbounding_box, QCpt_width, QCpt_height): Declare.
+ (init_external_image_libraries): New function.
+ (init_xfns): Call it.
+
+2003-01-24 Andreas Schwab <schwab@suse.de>
+
+ * minibuf.c (Fminibuffer_message): Verify type of parameter.
+
+2003-01-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_initialize): Initialize id_to_widget here instead
+ of static initializer.
+
+2003-01-24 Dave Love <fx@gnu.org>
+
+ * s/gnu-linux.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define for more
+ architectures.
+
+ * alloc.c (mark_stack) [!GC_LISP_OBJECT_ALIGNMENT && __GNUC__]:
+ Use __alignof__.
+
+2003-01-24 Kenichi Handa <handa@m17n.org>
+
+ * keyboard.c (adjust_point_for_property): New second arg MODIFIED.
+ It it is nonzero, don't pretend that an invisible area doesn't exist.
+ (command_loop_1): Call adjust_point_for_property with proper
+ second arg.
+
+2003-01-22 Jason Rumney <jasonr@gnu.org>
+
+ Sync changes with xterm.c and xfns.c.
+
+ * w32term.c (x_draw_glyph_string_foreground)
+ (x_draw_composite_glyph_string_foreground): Implement overstriking.
+
+ * w32term.c (x_write_glyphs): Clear phys_cursor_on_p if current
+ phys_cursor's hpos is overwritten. This is still not completely
+ correct, as it doesn't really make sense to use hpos at all to
+ get the cursor glyph (as that is relative to the width of the
+ characters on the line, which may have changed during the update).
+
+ * w32term.c (notice_overwritten_cursor): Handle the special case
+ of the cursor being in the first blank non-text line at the
+ end of a window.
+
+ * w32term.c (x_draw_hollow_cursor, x_draw_bar_cursor)
+ (x_draw_phys_cursor_glyph): Set phys_cursor_width here.
+ Compute from the x position returned by x_draw_glyphs.
+
+ (x_display_and_set_cursor): Don't set phys_cursor_width here,
+ except for NO_CURSOR and system caret, to make phys_cursor_width
+ contain what its name suggests.
+ (notice_overwritten_cursor): Consider the cursor image erased if
+ the output area intersects the cursor image in y-direction.
+
+ * w32term.c (note_mode_line_or_margin_highlight): Rename from
+ note_mode_line_highlight and extend.
+
+ * w32term.c (last_window): New variable.
+ (w32_read_socket) <WM_MOUSEMOVE>: Generate SELECT_WINDOW_EVENTs.
+ (note_mouse_movement): Remove reimplemented code in #if 0.
+
+ * w32fns.c (x_set_cursor_type): Set cursor_type_changed,
+ not update_mode_lines, and always set it to 1.
+
+2003-01-21 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (IDC_HAND): Define it if system headers don't.
+
+2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
+
+ * w32term.h (struct w32_output): New member hand_cursor.
+ (WM_EMACS_SETCURSOR): New message definition.
+
+ * w32term.c (note_mode_line_highlight): Delete #if 0 to enable
+ function w32_define_cursor.
+ (note_mouse_highlight): Initialize, setup cursor accoding to mouse
+ position, change member name output_data.x to output_data.w32 and
+ add function w32_define_cursor.
+ (show_mouse_face): Delete #if 0 to enable function w32_define_cursor
+ and change member name output_data.x to output_data.w32.
+ (w32_initialize_display_info):
+ Setup dpyinfo->vertical_scroll_bar_cursor.
+
+ * w32fns.c (Vx_hand_shape): New variable.
+ (w32_wnd_proc): Add message entries for WM_SETCURSOR and
+ WM_EMACS_SETCURSOR.
+ (x-create-frame): Setup Cursor types.
+
+2003-01-21 David Ponce <david@dponce.com>
+
+ * w32term.c (w32_encode_char): For DIM=1 charset, set
+ ccl->reg[2] to -1 before calling ccl_driver.
+ (Sync. with xterm.c x_encode_char change by Kenichi Handa
+ <handa@m17n.org> on 2002-09-30.)
+ (w32_draw_relief_rect): Declare all args.
+ (w32_define_cursor): New.
+
+ * w32fns.c (w32_load_cursor): New function.
+ (w32_init_class): Use it.
+ (x_put_x_image): Declare all args.
+
+2003-01-21 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * Makefile.in (ALL_CFLAGS): Include MYCPPFLAGS, not MYCPPFLAG.
+
+2003-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c: Must include stdio.h before termhooks.h.
+
+2003-01-21 Dave Love <fx@gnu.org>
+
+ * alloc.c (Fgc_status): Print zombie list.
+ (mark_maybe_object) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]:
+ Fix assignment of zombies.
+ (Fgarbage_collect) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]:
+ Don't take car of non-cons.
+
+ * s/sol2-5.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
+
+ * s/sunos4-0.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
+
+2003-01-20 David Ponce <david@dponce.com>
+
+ * w32menu.c (digest_single_submenu): Declare all args.
+
+ Sync with 2002-12-23 Richard M. Stallman <rms@gnu.org>
+ changes in xmenu.c:
+
+ (parse_single_submenu): Use individual keymap's prompt
+ string as pane name, if there is one.
+ (set_frame_menubar): Save menu_items_n_panes from each call to
+ parse_single_submenu and use it when calling digest_single_submenu.
+
+2003-01-20 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (XTread_socket): Check for valid, visible window
+ before sending a scroll-wheel event.
+
+2003-01-20 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (redisplay_window): If mini window's buffer is not
+ a minibuffer, then redisplay it like other windows.
+
+2003-01-20 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (xg_create_frame_widgets): Check if there is an
+ external tool bar before setting tool bar height.
+
+2003-01-19 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (handle_one_xevent): Surround popup_activated
+ with #ifdef:s for non-toolkit version.
+
+ * Makefile.in (XOBJ): Add gtkutil.o if USE_GTK.
+ (gtkutil.o): New file.
+ (TOOLKIT_DEFINES): Set to -DUSE_GTK if HAVE_GTK.
+ (LIBW): Set to @GTK_LIBS@ if USE_GTK.
+
+ * gtkutil.c: New file for GTK version.
+
+ * gtkutil.h: New file for GTK version.
+
+ * xterm.h: Add xt_or_gtk_widget.
+ Include gtk files for USE_GTK.
+ (struct x_output): Add toolbar_height.
+ (struct x_output): Add GTK widgets and Gdk size_hints.
+ (GTK_WIDGET_TO_X_WIN, FRAME_GTK_OUTER_WIDGET, FRAME_GTK_WIDGET)
+ (FRAME_OUTER_WINDOW): New macros for USE_GTK.
+ (FRAME_OUTER_TO_INNER_DIFF_Y): Add FRAME_TOOLBAR_HEIGHT to calculation.
+
+ * xterm.c: Include gtkutil.h for USE_GTK.
+ (free_frame_menubar): Declare extern void for USE_GTK.
+ (note_mouse_highlight): Check popup_activated for USE_GTK.
+ (xt_action_hook): Don't compile if USE_GTK.
+ (x_scroll_bar_to_input_event): Use CurrentTime for USE_GTK.
+ (xg_scroll_callback): New function.
+ (x_create_toolkit_scroll_bar): Call xg_create_scroll_bar for USE_GTK.
+ (x_set_toolkit_scroll_bar_thumb): Call xg_set_toolkit_scroll_bar_thumb
+ for USE_GTK.
+ (x_scroll_bar_create): Call xg_update_scrollbar_pos and
+ xg_show_scroll_bar for USE_GTK.
+ (x_scroll_bar_remove): Call xg_remove_scroll_bar for USE_GTK.
+ (XTset_vertical_scroll_bar): Call xg_update_scrollbar_pos for USE_GTK.
+ (event_handler_gdk): New function for USE_GTK.
+ (handle_one_xevent): Call xg_resize_widgets for USE_GTK.
+ (handle_one_xevent): Make sure widget is mapped before
+ calling x_real_positions for USE_GTK.
+ (XTread_socket): Add GTK event loop for USE_GTK.
+ (x_set_window_size): Call xg_frame_set_char_size for USE_GTK.
+ (x_make_frame_visible): Call gtk_widget_show_all for USE_GTK.
+ (x_make_frame_invisible): Call gtk_widget_hide for USE_GTK.
+ (x_iconify_frame): Add code for USE_GTK.
+ (x_free_frame_resources): Call gtk_widget_destroy for USE_GTK.
+ (x_wm_set_size_hint): Only compile if not USE_GTK. GTK version
+ is in gtkutil.c.
+ (x_term_init): Add initialization for GTK.
+ (syms_of_xterm): Set Vx_toolkit_scroll_bars for USE_GTK.
+
+ * xmenu.c: Include gtkutil.h for USE_GTK.
+ (Fx_popup_menu): Use current position if x and y are nil.
+ (single_menu_item, single_menu_item, Fx_popup_dialog):
+ Check for USE_GTK.
+ (popup_widget_loop): New function for USE_GTK.
+ (x_activate_menubar): Add code for USE_GTK.
+ (popup_activate_callback, popup_deactivate_callback)
+ (menu_highlight_callback, menubar_selection_callback):
+ Add USE_GTK versions.
+ (update_frame_menubar): Call xg_update_frame_menubar for USE_GTK.
+ (set_frame_menubar): Call xg_modify_menubar_widgets for USE_GTK.
+ (free_frame_menubar): Only compile if not USE_GTK. GTK version
+ is in gtkutil.c.
+ (popup_selection_callback): New version for USE_GTK.
+ (create_and_show_popup_menu): New fuction, one USE_GTK version and
+ one USE_X_TOOLKIT version.
+ (xmenu_show): Call create_and_show_popup_menu.
+ (dialog_selection_callback): New version for USE_GTK.
+ (create_and_show_dialog): New fuction, one USE_GTK version and
+ one USE_X_TOOLKIT version.
+ (xdialog_show): Call create_and_show_dialog.
+
+ * xfns.c: Include gtkutil for USE_GTK.
+ (x_window_to_frame, x_any_window_to_frame)
+ (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
+ (x_top_window_to_frame): Add code for USE_GTK.
+ (x_set_background_color): Call xg_set_background_color for GTK.
+ (x_set_menu_bar_lines): Check for USE_GTK.
+ (x_set_tool_bar_lines): Call update_frame_tool_bar for USE_GTK.
+ (x_set_name, x_set_title): Call gtk_window_set_title for USE_GTK.
+ (x_window): Call xg_create_frame_widgets for USE_GTK.
+ (Fx_create_frame): Check for USE_GTK.
+ (Fx_file_dialog): New implementation for USE_GTK.
+
+ * xdisp.c: Add check for USE_GTK for extern void set_frame_menubar.
+ (update_menu_bar): Add check for USE_GTK.
+ (update_tool_bar): Add check for USE_GTK and external tool bar.
+ (redisplay_tool_bar): Add check for USE_GTK and external tool bar.
+ (redisplay_internal): Add check for USE_GTK and popup_activated.
+ (redisplay_window): Add check for USE_GTK and FRAME_EXTERNAL_MENU_BAR.
+ (redisplay_window): Add check for USE_GTK and FRAME_EXTERNAL_TOOL_BAR.
+ (display_menu_bar): Add check for USE_GTK.
+
+ * lisp.h (Vx_resource_name): Declare extern.
+
+ * keyboard.c (kbd_buffer_get_event): Check MENU_BAR_ACTIVATE_EVENT
+ for USE_GTK.
+ (make_lispy_event): Check MENU_BAR_EVENT for USE_GTK.
+
+ * frame.h (struct frame): Add external_tool_bar. Check for USE_GTK.
+ (FRAME_EXTERNAL_TOOL_BAR): New macro.
+ (FRAME_EXTERNAL_MENU_BAR): Check for USE_GTK.
+
+ * fileio.c (Fread_file_name): Add check for USE_GTK.
+
+ * dispnew.c (adjust_frame_glyphs_for_window_redisplay):
+ Add check for USE_GTK.
+
+ * config.in: Added HAVE_GTK.
+
+ * alloc.c (Fgarbage_collect): Call xg_mark_data for GTK.
+
+2003-01-18 Stefan Monnier <monnier@cs.yale.edu>
+
+ * charset.h (Funibyte_char_to_multibyte): Export.
+
+2003-01-18 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xmenu.c (mouse_position_for_popup): New function.
+ (Fx_popup_menu): Call mouse_position_for_popup for X and
+ mouse_position_hook for others.
+
+2003-01-17 Kim F. Storm <storm@cua.dk>
+
+ * editfns.c (Finsert): Mention `string-make-multibyte' and
+ `string-as-multibyte' in doc string.
+
+2003-01-17 Kenichi Handa <handa@m17n.org>
+
+ * fontset.c (syms_of_fontset): Setup Vfont_encoding_alist here.
+
+ * editfns.c (Fformat): Convert an unibyte char argument that is
+ formatted by "%c" to multibyte if the total result must be a
+ multibyte string.
+
+2003-01-16 Kim F. Storm <storm@cua.dk>
+
+ * process.c (set-process-filter): Document unibyte/multibyte-ness
+ of string argument.
+
+2003-01-16 Kenichi Handa <handa@m17n.org>
+
+ * charset.h (NEXT_CHAR_BOUNDARY, PREV_CHAR_BOUNDARY): New macros.
+
+ * regex.c (GET_CHAR_BEFORE_2): Use PREV_CHAR_BOUNDARY.
+ (re_search_2): Likewise.
+
+2003-01-15 Kenichi Handa <handa@m17n.org>
+
+ * xdisp.c (message_dolog): Fix bug of the case that *Message*
+ buffer is unibyte.
+
+2003-01-15 Francesco Potort,Al(B <pot@gnu.org>
+
+ * fns.c (Fsubstring): Clarify doc string.
+
+ * textprop.c (Ftext_properties_at, Fnext_char_property_change)
+ (Fprevious_char_property_change)
+ (Fnext_single_char_property_change)
+ (Fprevious_single_char_property_change, Fnext_property_change)
+ (Fnext_single_property_change, Fprevious_property_change)
+ (Fprevious_single_property_change, Fadd_text_properties)
+ (Fput_text_property, Fset_text_properties)
+ (Fremove_text_properties, Fremove_list_of_text_properties)
+ (Ftext_property_any, Ftext_property_not_all): Clarify doc strings.
+
+2003-01-14 Kim F. Storm <storm@cua.dk>
+
+ * process.h (struct Lisp_Process): New member plist replaces old
+ member private_vars. All uses changed.
+
+ * process.c: Reworked 2003-01-12 change -- call a plist a plist!
+ (QCplist): Rename from QCvars. Change all uses.
+ (Fprocess_plist): Replaces Fprocess_variable. Simplified.
+ (Fset_process_plist): Replaces Fset_process_variable. Simplify.
+ (syms_of_process): Intern, staticpro, defsubr these.
+ (Fmake_network_process): Describe :plist arg. Remove :vars arg.
+
+2003-01-14 Francesco Potort,Al(B <pot@gnu.org>
+
+ * m/delta.h: Remove (obsolete).
+
+2003-01-13 Francesco Potort,Al(B <pot@gnu.org>
+
+ * fileio.c (Fdelete_directory, Fdelete_file): Document the
+ behaviour in front of symlinks.
+ (Fdelete_file): Raise an error on directories.
+
+2003-01-13 Dave Love <fx@gnu.org>
+
+ * fns.c (Freverse): Use QUIT.
+
+2003-01-13 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (minibuffer_completion_contents):
+ Error if point is inside prompt.
+
+ * keyboard.c (command_loop_1): Don't redisplay directly
+ if there's a post-command-hook.
+
+ * fileio.c (syms_of_fileio) <directory-sep-char>: Doc fix.
+ (Fdo_auto_save): Add gcpros around Ffile_name_directory.
+
+2003-01-12 Kim F. Storm <storm@cua.dk>
+
+ * process.h (struct Lisp_Process): New member private_vars.
+
+ * process.c (QCvars): New variable.
+ (syms_of_process): Intern and staticpro it.
+ (Fset_process_contact): Removed function.
+ (Fprocess_variable, Fset_process_variable): New functions.
+ (syms_of_process): Defsubr them.
+ (Fstart_process): Initialize private_vars plist to nil.
+ (Fmake_network_process): New arg :vars to setup the private
+ variables for new network process.
+ (server_accept_connection): Copy server's private variables to
+ client process.
+
+ * alloc.c (pure_alloc): Fixed 2003-01-10 changed (caused spurious
+ crashes). Code rewritten and simplified. Now directly aligns the
+ pointer and recalculates pure_bytes_used, rather than aligning the
+ size and adjusting the pointer.
+
+2003-01-11 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fset_process_contact): New function.
+ (syms_of_process): defsubr it.
+ (make-network-process): Update doc.
+
+2003-01-10 Andreas Schwab <schwab@suse.de>
+
+ * alloc.c (pure_alloc): Correct alignment for Lisp_Floats.
+ Reported by Berthold Gunreben <b.gunreben@web.de>.
+
+2003-01-10 Dave Love <fx@gnu.org>
+
+ * composite.c (syms_of_composite): Make composition_hash_table weak.
+
+2003-01-09 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fmake_network_process): Convert new port number
+ to host byte order for `:service t' case. From Mario Lang.
+
+2003-01-08 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (Fx_file_dialog): Call XtAppNextEvent and x_dispatch_event
+ instead of XtAppProcessEvent.
+
+ * xterm.c (handle_one_xevent): New function.
+ (x_dispatch_event): New function.
+ (XTread_socket): Call handle_one_xevent.
+
+ * xterm.h (FRAME_OUTER_TO_INNER_DIFF_X/Y): New.
+
+ * xmenu.c (Fx_popup_menu): If popping up at mouse position,
+ call XQueryPointer to get coordinates.
+ (popup_get_selection): Do not set popup_activated_flag to zero,
+ let popup_deactivate_callback do that. Needed for Motif.
+ Call x_dispatch_event instead of XtDispatchEvent.
+ (xmenu_show): Calculate root coordinate from frame top/left position.
+
+2003-01-08 Kim F. Storm <storm@cua.dk>
+
+ * process.c (server_accept_connection): Fix recording of new
+ connection's local address in :local property of contact info.
+ (Fmake_network_process): Record local network address for new
+ client processes in :local property of contact info.
+ (format-network-address): Add arg OMIT-PORT. Change callers.
+
+2003-01-07 Dave Love <fx@gnu.org>
+
+ * Makefile.in (fns.o): Depend on coding.h.
+
+2003-01-06 Dave Love <fx@gnu.org>
+
+ * fns.c: Include coding.h. Use POINTER_TYPE*, not void*.
+ (Vlocale_coding_system): Declare.
+ (Qcodeset, Qdays, Qmonths, Qpaper): New.
+ (Flanginfo): New.
+ (syms_of_fns): Initialize new stuff.
+
+2003-01-07 Markus Rost <rost@math.ohio-state.edu>
+
+ * minibuf.c (Fread_variable): Doc fix.
+
+ * eval.c (Fuser_variable_p): Doc change. For custom variables,
+ use the same test as for custom-variable-p.
+
+2003-01-05 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (try_scrolling): New arg LAST_LINE_MISFIT.
+ Count LAST_LINE_MISFIT in scroll margin for end of window.
+ Move label too_near_end before setting SCROLL_MARGIN_POS.
+ Set LAST_LINE_MISFIT before jumping there.
+
+ * xdisp.c (try_scrolling): Calculate amount_to_scroll better in
+ scroll_conservatively case. If scrolling that much doesn't change
+ STARTP, move it down one line.
+
+ * xdisp.c (redisplay_window): Pass last_line_misfit arg to
+ try_scrolling. Make it 1 after make_cursor_line_fully_visible fails.
+
+ * xdisp.c (setup_echo_area_for_printing): Kill Emacs if no
+ selected frame.
+
+ * keymap.c (apropos_predicate, apropos_accumulate): Make them static.
+ (syms_of_keymap): Staticpro them.
+ (Fapropos_internal): Initialize them and clear them out.
+ Don't GCPRO them.
+
+ * buffer.c (syms_of_buffer) <scroll-up|down-aggressively>: Doc fixes.
+
+ * lisp.h: New misc type Lisp_Save_Value.
+ (enum Lisp_Misc_Type): Add Lisp_Misc_Save_Value.
+ (XSAVE_VALUE): New macro.
+ (struct Lisp_Save_Value): New data type.
+ (union Lisp_Misc): Add u_save_value alternative.
+ (make_save_value): Declare.
+
+ * alloc.c (make_save_value): New function.
+
+ * xterm.c (x_catch_errors): Save dpy using make_save_value.
+ (x_catch_errors_unwind): Call XSync.
+
+2003-01-01 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (window_scroll_pixel_based): Partially undo last change.
+
+ * keyboard.c (command_loop_1): Call adjust_point_for_property
+ in direct action cases for Qforward_char and Qbackward_char.
+ Set already_adjusted so it won't be done twice.
+
+2002-12-30 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * src/config.in (!HAVE_SIZE_T): Fix order of arguments in
+ type definition of size_t.
+
+2003-01-02 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (syms_of_macterm): Provide the feature "mac-carbon" to
+ distinguish Carbon GUI builds from X11 builds on darwin.
+
+2002-12-30 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (syms_of_macterm): Set mac-wheel-button-is-mouse-2
+ to default to t.
+
+2002-12-29 Francesco Potort,Al(B <pot@gnu.org>
+
+ * data.c (Fstring_to_number, Fminus): Better English in doc strings.
+
+2002-12-28 Steven Tamm <steventamm@mac.com>
+
+ * Makefile.in (macosx-bundle): Fix Mac OS X/Carbon port to
+ allow building in a different directory than source. Uses some
+ GNU Make extensions, but there is no other make on Mac OS X.
+
+2002-12-26 Francesco Potort,Al(B <pot@gnu.org>
+
+ * data.c (Fmakunbound, Ffmakunbound, Fmake_variable_buffer_local)
+ (Fsetq_default, Fmake_local_variable, Fkill_local_variable)
+ (Fmake_variable_frame_local, Faset, Fnumber_to_string, Fminus)
+ (Fstring_to_number): Mention the returned value in the doc strings.
+
+2002-12-23 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer) <scroll-up-aggressively>
+ <scroll-down-aggressively>: Doc fix.
+
+ * xmenu.c (parse_single_submenu): Use individual keymap's prompt
+ string as pane name, if there is one.
+ (set_frame_menubar): Save menu_items_n_panes from each call to
+ parse_single_submenu and use it when calling digest_single_submenu.
+
+ * window.c (window_scroll_pixel_based): Fix check for reaching BEGV.
+ Don't try to make last line fully visible if it is past end of window.
+
+2002-12-22 Steven Tamm <steventamm@mac.com>
+
+ * macmenu.c (MIN_POPUP_SUBMENU_ID): Add.
+ (mac_menu_show): Add support for hierarchical popup menus.
+ (add_menu_item): Remove indentation support.
+ (fill_submenu, fill_menu): Create hierarchical menus
+ instead of using indentation.
+
+2002-12-22 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (try_cursor_movement): Don't call try_window here.
+ (redisplay_window): Never redisplay minibuffer when inactive.
+
+ * window.c (select_window_1): Undo 9/21 change.
+
+2002-12-22 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (XTread_socket): Call KeyTranslate for control and
+ meta to deal correctly shifted non-alpha characters, like C-S-5
+ being treated like C-%. Do not look for shift key to deal
+ with masking off control-key with mac-reverse-ctrl-meta.
+
+2002-12-21 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (popup_get_selection): Now static. New arg DO_TIMERS.
+ If it is non-nil, run timers. Use an unwind-protect to requeue
+ the events that were read ahead.
+ (popup_get_selection_unwind): New subroutine.
+ (popup_get_selection_queue): File-scope variable now holds that queue.
+ (xmenu_show): Pass 0 for DO_TIMERS to popup_get_selection.
+ (xdialog_show): Pass 1 for DO_TIMERS to popup_get_selection.
+ Use an unwind-protect to pop down the dialog box.
+ (xdialog_show_unwind): New subroutine implements that.
+
+ * xdisp.c (row_containing_pos): Change exit test using last_y.
+ (try_window_id): Abort if row_containing_pos returns null.
+
+ * lread.c (load_error_handler): New function.
+ (Fload): Handle errors in Fsubstitute_in_file_name.
+ Don't expect Fsignal to return.
+
+ * eval.c: Errors and throws work right with interrupt blocking.
+ (struct catchtag): New elt interrupt_input_blocked.
+ (unwind_to_catch): Restore interrupt_input_blocked from saved value.
+ (internal_catch, Fcondition_case, internal_condition_case)
+ (internal_condition_case_1, internal_condition_case_2): Save it.
+ (Fsignal): Don't do TOTALLY_UNBLOCK_INPUT.
+
+ * editfns.c (Fformat): Add parens.
+
+ * dired.c (file_name_completion): Fix that change.
+ Delete special quit-handling code; just use QUIT.
+
+2002-12-21 Tak Ota <Takaaki.Ota@am.sony.com>
+
+ * dired.c (file_name_completion): Close directory on error
+ just as in directory_files_internal.
+
+2002-12-19 David Kastrup <David.Kastrup@t-online.de>
+
+ * window.c (Fset_window_configuration): Set old_point to correct
+ value when new_current_buffer == current_buffer.
+
+2002-12-17 Ben Key <bkey1@tampabay.rr.com>
+
+ Revisited my earlier fix for the following entry in etc/PROBLEMS:
+ "Emacs built on Windows 9x/ME crashes at startup on Windows XP,
+ or Emacs builtpart of on XP crashes at startup on Windows 9x/ME."
+
+ These changes were in part based upon suggestions made by Peter
+ 'Luna' Runestig [peter@runestig.com].
+
+ * w32.c (g_b_init_is_windows_9x, g_b_init_open_process_token)
+ (g_b_init_get_token_information, g_b_init_lookup_account_sid)
+ (g_b_init_get_sid_identifier_authority ): Add several static
+ global variables.
+
+ * w32.c (globals_of_w32): New function. Used to initialize those
+ global variables that must always be initialized on startup even
+ when the global variable initialized is non zero. Its primary
+ purpose at this time is to set the global variables
+ g_b_init_is_windows_9x, g_b_init_open_process_token,
+ g_b_init_get_token_information, g_b_init_lookup_account_sid, and
+ g_b_init_get_sid_identifier_authority to 0 on startup.
+ Called from main.
+
+ * w32.c (is_windows_9x): Perform initialization only if
+ g_b_init_is_windows_9x is equal to 0. On initialization set
+ g_b_init_is_windows_9x equal to 1.
+
+ * w32.c (open_process_token): Perform initialization only if
+ g_b_init_open_process_token is equal to 0. On initialization set
+ g_b_init_open_process_token equal to 1.
+
+ * w32.c (get_token_information): Perform initialization only if
+ g_b_init_get_token_information is equal to 0. On initialization
+ set g_b_init_get_token_information equal to 1.
+
+ * w32.c (lookup_account_sid): Perform initialization only if
+ g_b_init_lookup_account_sid is equal to 0. On initialization
+ set g_b_init_lookup_account_sid equal to 1.
+
+ * w32.c (get_sid_identifier_authority): Perform initialization
+ only if g_b_init_get_sid_identifier_authority is equal to 0.
+ On initialization set g_b_init_get_sid_identifier_authority equal to 1.
+
+ * w32fns.c (globals_of_w32fns): New function. Used to initialize
+ those global variables that must always be initialized on startup
+ even when the global variable initialized is non zero.
+ Its primary purpose at this time is to initialize the global variable
+ track_mouse_event_fn.
+
+ * w32fns.c (w32_wnd_proc): Remove initialization of
+ track_mouse_event_fn from the handler for the WM_SETFOCUS message.
+
+ * w32fns.c (syms_of_w32fns): Call globals_of_w32fns.
+
+ * w32menu.c (globals_of_w32menu): New function. Used to
+ initialize those global variables that must always be initialized
+ on startup even when the global variable initialized is non zero.
+ Its primary purpose at this time is to initialize the global
+ variables get_menu_item_info and set_menu_item_info.
+
+ * w32menu.c (initialize_frame_menubar): Remove initialization of
+ get_menu_item_info and set_menu_item_info.
+
+ * w32menu.c (syms_of_w32menu): Call globals_of_w32menu.
+
+ * w32.h (globals_of_w32, globals_of_w32fns, globals_of_w32menu):
+ Declare them.
+
+ * emacs.c (main): Call globals_of_w32 prior to calling
+ init_environment if WINDOWSNT is defined. Call globals_of_w32fns
+ and globals_of_w32menu if initialized is non zero and HAVE_NTGUI
+ is defined.
+
+ * w32term.c (x_update_window_begin): Fix Windows API error
+ detected by BoundsChecker. Test to determine if
+ w32_system_caret_hwnd is NULL prior to attempting to use
+ SendMessage to send the WM_EMACS_HIDE_CARET message to it.
+
+ * w32term.c (x_update_window_end): Fix Windows API error
+ detected by BoundsChecker. Test to determine if
+ w32_system_caret_hwnd is NULL prior to attempting to use
+ SendMessage to send the WM_EMACS_SHOW_CARET message to it.
+
+2002-12-17 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (coding_system_require_warning): New variable.
+ (syms_of_coding): DEFVAR it.
+
+ * coding.h (coding_system_require_warning): Extern it.
+
+ * fileio.c (choose_write_coding_system): Even if
+ Vcoding_system_for_write is non-nil, if
+ coding_system_require_warning is nonzero, call
+ Vselect_safe_coding_system_function.
+
+2002-12-17 Markus Rost <rost@math.ohio-state.edu>
+
+ * Makefile.in (lisp, shortlisp): Add cus-face and timer.
+ (lisp): Add font-core.
+
+2002-12-13 Stefan Monnier <monnier@cs.yale.edu>
+
+ * textprop.c (text_read_only): New arg `propval'.
+ (get_char_property_and_overlay): Remove unused var `next_overlay'.
+ (verify_interval_modification): Use text_read_only's new arg.
+
+2002-12-13 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (Funencodable_char_position): Set pend correctly.
+
+2002-12-12 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (last_mousemove_x, last_mousemove_y): New variables.
+ (w32_read_socket) <WM_MOUSEMOVE>: Use them to detect non-movement.
+ Be more careful about when help_events are generated.
+
+2002-12-12 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (mac_check_for_quit_char): Correctly set the
+ modifiers of the event to 0.
+ * mac.c (sys_select): Duplicate rfds before calling select to
+ ensure that rfds survive the while loop.
+
+2002-12-11 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (try_window_id): Don't call set_cursor_from_row if
+ row_containing_pos returned NULL.
+
+2002-12-10 Steven Tamm <steventamm@mac.com>
+
+ * mac.c (sys_read): Fix sys_read to not call select if IO is
+ non-blocking.
+ (sys_select): Fix sys_select to not use a timeout larger than
+ the one given.
+
+2002-12-10 Juanma Barranquero <lektu@terra.es>
+
+ * editfns.c (Fformat): Use alloca, not _alloca.
+
+2002-12-09 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fget_buffer_create): Call Qucs_set_table_for_input
+ as the last thing.
+
+2002-12-09 Dave Love <fx@gnu.org>
+
+ * s/sol2-8.h: Removed. (Not necessary.)
+
+2002-12-09 Matthew Swift <swift@alum.mit.edu>
+
+ * editfns.c (Fformat): Handle precision in string conversion
+ specifiers like libc functions do (ie, print at most that many
+ characters).
+
+2002-12-08 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (row_containing_pos): Check more carefully
+ whether charpos is really in the row before returning it.
+
+2002-12-07 Steven Tamm <steventamm@mac.com>
+
+ * sysdep.c (emacs_read) [HAVE_CARBON]: Have emacs_read use sys_read.
+
+ * eval.c (Feval) [HAVE_CARBON]: Calls mac_check_for_quit_char at
+ each stack frame. This may change as it could be time consuming.
+
+ * macterm.c (mac_check_for_quit_char, quit_char_comp)
+ (init_quit_char_handler, mac_determine_quit_char_modifiers)
+ (mac_initialize): Add code to check for pressing of quit_char
+ in the OS event queue.
+
+ * mac.c (sys_select): Call mac_check_for_quit_char every second
+ while blocking on select.
+
+ * mac.c (sys_read): Use sys_select to test for input first
+ before calling read, to allow C-g to break.
+
+2002-12-07 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (Fcompleting_read): Doc fix.
+
+ * lread.c (syms_of_lread) <load-history>: Doc fix.
+
+ * fileio.c (Fcopy_file): Set immediate_quit around emacs_open call.
+
+ * eval.c (Fdefun, Fdefmacro): Record in load-history redefining an
+ autoload.
+
+ * data.c (Fdefalias): Record in load-history redefining an autoload.
+
+ * alloca.c: Undo ifdef change accidentally made on 12-04.
+
+2002-12-06 Francesco Potort,Al(B <pot@gnu.org>
+
+ * xfns.c (png_load): Avoid double gamma correction for PNG images.
+
+2002-12-04 Richard M. Stallman <rms@gnu.org>
+
+ * sysdep.c (fcntl.h): Test only HAVE_FCNTL_H.
+
+ * fileio.c (fcntl.h): Test only HAVE_FCNTL_H.
+
+ * alloca.c: Don't use #error.
+
+2002-12-03 Dave Love <fx@gnu.org>
+
+ * buffer.c (Qucs_set_table_for_input): New.
+ (Fget_buffer_create): Use it.
+ (Qset_buffer_major_mode_hook): Deleted.
+ (Fset_buffer_major_mode): Revert previous change.
+ (init_buffer_once): Intern ucs-set-table-for-input.
+ (syms_of_buffer): Delete Qset_buffer_major_mode_hook.
+ Add &Qucs_set_table_for_input.
+
+2002-12-03 Andreas Schwab <schwab@suse.de>
+
+ * callint.c (Fcall_interactively): Use next_event only if less
+ than key_count.
+
+2002-12-02 Andrew Choi <akochoi@shaw.ca>
+
+ * macmenu.c (add_menu_item, fill_menubar): Truncate menu item
+ names to 255 characters.
+
+ * macterm.c (XTread_socket): If all frames have been collapsed,
+ expand the first one before handling drag-and-drop events.
+
+ * s/darwin.h (GETPGRP_NO_ARG): Delete. Replaced by GETPGRP_VOID,
+ which is detected by autoconf.
+
+2002-12-01 Steven Tamm <steventamm@mac.com>
+
+ * unexmacosx.c (copy_twolevelhints, dump_it): Now corrects the
+ offset in two hints table to allow prebinding to be redone and
+ allow the executable to be stripped.
+
+2002-11-29 Dave Love <fx@gnu.org>
+
+ * fns.c (Frequire): Don't call LOADHIST_ATTACH if feature was
+ already provided.
+
+2002-11-29 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (start_display): Check more intelligently for
+ whether the line is continued.
+ (move_it_vertically_backward): Clear it->continuation_lines_width.
+
+2002-11-28 Dave Love <fx@gnu.org>
+
+ * s/amdahl.h, s/unipl5-0.h, m/sgi3000.h, s/3700.h, s/alliant-2800.h:
+ * s/alliant.h, s/altos.h: Deleted. (Unused/empty.)
+
+2002-11-27 Steven Tamm <steventamm@mac.com>
+
+ * fns.c (Frequire): Change nesting allowance from 2 to 3 to cause
+ more descriptive error output from lread.c:Fload upon most require
+ cycles during boostrapping.
+
+2002-11-27 Jason Rumney <jasonr@gnu.org>
+
+ * fileio.c (Finsert_file_contents): Give a more appropriate error
+ for files bigger than 2Gb when off_t is 32 bit.
+
+ * dired.c (Ffile_attributes): Don't return negative file sizes for
+ files bigger than 2Gb when off_t is 32 bit.
+
+2002-11-27 Dave Love <fx@gnu.org>
+
+ * s/irix6-0.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
+
+ * systty.h: Don't conditionally define GETPGRP_NO_ARG.
+ Test GETPGRP_VOID instead.
+ [BSD_TERMIOS]: Remove definitions (never used).
+
+ * s/osf5-0.h (WAIT_USE_INT, SYS_SIGLIST_DECLARED, sys_siglist):
+ Don't define.
+ (GC_SETJMP_WORKS, GC_MARK_STACK): Define.
+
+ * m/mips.h (WORDS_BIG_ENDIAN): Define conditionally.
+
+2002-11-25 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (sys_write): Avoid non-blocking mode, which is not fully
+ supported.
+
+2002-11-25 Dave Love <fx@gnu.org>
+
+ * unexalpha.c (update_dynamic_symbols): Cast arg of fatal_unexec.
+
+ * Makefile.in (TEMACS_LDFLAGS): Update last change.
+
+2002-11-25 Andreas Schwab <schwab@suse.de>
+
+ * m/ia64.h: Restore `#ifndef NOT_C_CODE' deleted by last change.
+
+2002-11-24 Steven Tamm <steventamm@mac.com>
+
+ * unexmacosx.c (unexec_realloc): Use malloc_default_zone to
+ determine the size of pointers alloced in unexed space instead
+ of using possibly invalid emacs_zone pointers. This fixes the
+ binary incompatibility problems caused by updates to libSystem.B.
+
+2002-11-24 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (Fstring_match): Doc fix.
+
+ * callint.c (Fcall_interactively): If a command fails because
+ `*' detects a read-only buffer, but RECORD_FLAG is set,
+ record it anyway if the args don't actually do tty input.
+
+2002-11-22 Dave Love <fx@gnu.org>
+
+ * sysdep.c (stuff_char) [PROTOTYPES]: Provide ISO C arglist.
+
+ * keyboard.c (interrupt_signal): Provide forward declaration.
+ (kbd_buffer_store_event): Don't declare interrupt_signal.
+
+ * xdisp.c (store_frame_title_char) [PROTOTYPES]: Provide ISO C arglist.
+
+2002-11-21 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (interactive_p): Skip any number of bytecode
+ and special form frames, in any order.
+
+2002-11-20 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (convert_mono_to_color_image): New function.
+ (xbm_load, xbm_load_image): Use it when foreground or background
+ is explicitly set.
+
+2002-11-19 Dave Love <fx@gnu.org>
+
+ * s/usg5-4.h, sco4.h (bcopy, bzero, bcmp): Don't define.
+
+2002-11-18 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (x_build_heuristic_mask): Filter palette info from color.
+ (XPutPixel): Swap blue and red.
+ (xpm_format, pbm_format, png_format, jpeg_format, tiff_format)
+ (gif_format, gs_format): Use IMAGE_ASCENT_VALUE.
+ (xpm_image_p, pbm_image_p, png_image_p, jpeg_image_p)
+ (tiff_image_p, gif_image_p, gs_image_p): Don't check ascent.
+
+2002-11-18 Dave Love <fx@gnu.org>
+
+ * m/orion105.h (HAVE_ALLOCA): Don't define.
+
+ * m/m68k.h, m/arm.h, mtekxd88.h, m/tower32v3.h: Don't define alloca.
+
+ * m/intel386.h: Don't include alloca.h or define alloca.
+
+ * m/ia64.h: Don't include alloca.h, stdlib.h. Don't declare
+ malloc, realloc, calloc.
+
+ * m/hp800.h, m/sr2k.h, m/ns16000.h, m/wicat.h (bcopy, bzero)
+ (bcmp): Don't define.
+
+ * m/delta.h (bcopy, bzero, bcmp, alloca): Don't define.
+
+ * m/amdahl.h: Don't define LIB_STANDARD.
+
+ * m/alpha.h: Move OSF1 stuff from here to s/osf1.h.
+
+ * s/osf1.h: Move OSF1 stuff from m/alpha.h to here.
+
+ * s/irix4-0.h, s/irix5-0.h, m/powerpcle.h, m/sparc.h:
+ Don't include alloca.h.
+
+ * s/aix3-2.h (HAVE_FSYNC): Don't define.
+
+ * regex.c (_GNU_SOURCE): Don't define.
+
+ * process.c (_GNU_SOURCE): Don't define.
+
+ * fileio.c (_GNU_SOURCE, HAVE_FSYNC): Don't define.
+
+2002-11-18 Markus Rost <rost@math.ohio-state.edu>
+
+ * s/sol2-8.h: Include sol2-6.h.
+
+2002-11-18 Miles Bader <miles@gnu.org>
+
+ * dispextern.h (struct face): Add `overstrike' field.
+ * xterm.c (x_draw_glyph_string_foreground)
+ (x_draw_composite_glyph_string_foreground): Implement overstriking.
+ * xfaces.c (load_face_font): Set `face->overstrike' based on
+ result from choose_face_font.
+ (best_matching_font, choose_face_font): Add `needs_overstrike'
+ argument, and use it to return whether overstriking is desirable
+ for this face/font combo.
+ (set_font_frame_param): Pass new argument to choose_face_font.
+
+2002-11-17 Ben Key <BKey1@tampabay.rr.com>
+
+ This change is my fix for the following entry in etc/PROBLEMS:
+ "Emacs built on Windows 9x/ME crashes at startup on Windows XP,
+ or Emacs builtpart of on XP crashes at startup on Windows 9x/ME."
+
+ * w32.c: Added wrapper functions around the win32 API functions
+ OpenProcessToken, GetTokenInformation, LookupAccountSid, and
+ GetSidIdentifierAuthority. These wrapper functions serve two
+ purposes:
+ 1. They ensure that the wrapped function can never be called
+ when Emacs is running on an operating system on which they are
+ not supported (Microsoft Windows 95 / 98 / ME).
+ 2. They call the wrapped functions via function pointers rather
+ than calling them directly. This avoids taking advantage of the
+ undocumented fact that although these functions are not supported
+ in the 9x branch of Microsoft Windows, the functions do exist in
+ the version of advapi32.dll that is found in the 9x branch of
+ Microsoft Windows.
+
+ * w32.c (init_user_info): Replace the calls to the win32 API
+ functions OpenProcessToken, GetTokenInformation, LookupAccountSid,
+ and GetSidIdentifierAuthority with calls to the newly added
+ wrapper functions.
+
+ * w32.h: Added extern declarations for the following functions:
+ syms_of_w32term, syms_of_w32fns, syms_of_w32select,
+ syms_of_w32menu, and void syms_of_fontset.
+
+ * w32fns.c (w32_wnd_proc): Add code to reinitialize the
+ function pointer track_mouse_event_fn in the handler for the
+ WM_SETFOCUS message.
+
+ * w32menu.c (initialize_frame_menubar): Add code to
+ reinitialize the function pointers set_menu_item_info and
+ get_menu_item_info.
+
+2002-11-17 Ben Key <BKey1@tampabay.rr.com>
+
+ * sound.c: Added a partial implementation of play-sound-internal
+ for Microsoft Windows. Added various #ifdef / #else / #endif
+ code blocks to separate the code that will compile under
+ Microsoft Windows from the code that is specific to GNU/Linux.
+ Moved several blocks of code around to make this separation of code
+ into Windows compatible and GNU/Linux compatible code blocks easier.
+
+ * makefile.w32-in: Include sound.c and link with WinMM.lib.
+
+ * s/ms-w32.h: Defined the symbol HAVE_SOUND so that the newly
+ added support for play-sound-internal under Windows would be
+ included in the build of Emacs.
+
+2002-11-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_load_system_font): Don't disable Cleartype.
+
+ * w32term.c (w32_get_glyph_string_clip_rect): Clip cursor tightly.
+
+2002-11-15 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (command_loop_1): Fix int/Lisp_Object mixup.
+ (adjust_point_for_property): Move out of display and invisible even if
+ we were already inside before (in case a property was added while
+ we weren't looking). Be more careful when handling invisible props.
+ Skip invisible text as if it really wasn't there at all.
+
+2002-11-15 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_draw_image_foreground)
+ (w32_draw_image_foreground_1): Use standard copy and invert
+ operations to draw images.
+
+ * w32fns.c (x_create_x_image_and_pixmap): Fill in palette for
+ depth of 1.
+ (xbm_read_bitmap_data): Invert bits as xbm is read in.
+ (XPutPixel): Don't invert bits here.
+
+2002-11-15 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_draw_image_foreground, x_draw_image_glyph_string)
+ (w32_draw_image_foreground_1): Handle image masks.
+ (x_draw_image_glyph_string): Don't BitBlt transparently.
+
+ * w32fns.c (w32_defined_color): Adjust RGB values for Emacs.
+ (x_from_xcolors): Adjust RGB values for W32.
+ (image_background, image_background_transparent)
+ (postprocess_image, x_to_xcolors, x_disable_image)
+ (x_build_heuristic_mask): Adapt for W32 and enable.
+ (x_create_x_image_and_pixmap): Mark images with palettes as such.
+ (xbm_load): Remove unused variable.
+
+2002-11-14 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer): Doc fix.
+
+2002-11-14 Dave Love <fx@gnu.org>
+
+ * alloc.c (SETJMP_WILL_NOT_WORK): Add note.
+
+ * xterm.c (x_draw_relief_rect, x_draw_box_rect, x_update_cursor):
+ * xmenu.c (unuse_menu_items, digest_single_submenu):
+ * xfns.c (x_put_x_image):
+ * xdisp.c (message2_nolog, set_message):
+ * undo.c (record_point):
+ * terminfo.c (tparam):
+ * syntax.c (scan_sexps_forward):
+ * scroll.c (calculate_scrolling, calculate_direct_scrolling):
+ * composite.c (update_compositions):
+ * cm.c (calccost, cmgoto):
+ * charset.c (c_string_width): Declare all args (per C99).
+
+ * frame.h (get_specified_cursor_type, get_window_cursor_type): Declare.
+
+ * lisp.h (get_specified_cursor_type, get_window_cursor_type):
+ Don't declare.
+
+ * emacs.c (main) [!VMS]: Avoid third arg.
+
+ * fns.c (Fcopy_sequence): Doc fix.
+ (Fmap_char_table): Cast `call2'.
+
+2002-11-14 Francesco Potort,Al(B <pot@gnu.org>
+
+ * s/sol2-8.h: New file.
+
+2002-11-14 Kim F. Storm <storm@cua.dk>
+
+ * buffer.c (syms_of_buffer) <mode-line-format>: Document symbol
+ dependency on `risky-local-variable' and the :propertize form.
+
+2002-11-12 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fns.c (Fmap_char_table): Don't use map_char_table's function arg.
+
+ * syntax.c (scan_sexps_forward): Undo last patch.
+ Use a more obvious fix: check eob before updating the syntax table.
+
+2002-11-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ * syntax.c (scan_sexps_forward): Update syntax table before reading
+ a char rather than after so we don't update the table past eob.
+
+2002-11-09 Dave Love <fx@gnu.org>
+
+ * buffer.c (Fset_buffer_major_mode): Fix last change.
+
+ * regex.c (regexec): Fix pmatch declaration.
+
+ * cmds.c (Fself_insert_command): Apply Vtranslation_table_for_input.
+
+ * keyboard.c (command_loop_1): Apply Vtranslation_table_for_input
+ to self-inserting characters.
+ (syms_of_keyboard) <keyboard-translate-table>: Doc fix.
+
+ * coding.c (Vtranslation_table_for_input): New.
+ (syms_of_coding): DEFVAR it.
+
+2002-11-08 Juanma Barranquero <lektu@terra.es>
+
+ * w32term.c (w32_draw_fringe_bitmap): Remove unused local variable
+ window.
+
+2002-11-08 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * process.c (Fformat_network_address): Remove unused locals p,
+ cp, and i.
+
+2002-11-06 Dave Love <fx@gnu.org>
+
+ * buffer.c (Qset_buffer_major_mode_hook): New.
+ (Fset_buffer_major_mode): Use it.
+
+2002-11-06 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (x_term_init): Use turn_on_atimers, not start_polling
+ and stop_polling.
+
+ * process.c (wait_reading_process_input):
+ Test POLLING_PROBLEM_IN_SELECT, not hpux.
+ Avoid initialization for auto Lisp_Object var.
+
+ * s/hpux11.h (POLLING_PROBLEM_IN_SELECT): Add #undef.
+
+ * s/hpux10.h (POLLING_PROBLEM_IN_SELECT): Defined.
+
+2002-11-05 Richard M. Stallman <rms@gnu.org>
+
+ * s/sol2-5.h (BROKEN_SIGIO): Turn off the #undef.
+
+ * callint.c (Fcall_interactively): New local filter_specs.
+ (Fcall_interactively): Check for progn as well as let.
+ Add a gcpro.
+ (Qprogn): New variable.
+ (syms_of_callint): Staticpro and init Qprogn.
+
+2002-11-04 John Paul Wallington <jpw@shootybangbang.com>
+
+ * lread.c (Feval_buffer): Doc fix.
+
+2002-11-04 Dave Love <fx@gnu.org>
+
+ * keyboard.c (read_char): Always translate iff
+ Vkeyboard_translate_table is a char table and c is valid.
+
+ * xterm.c (XTread_socket): Check Lisp types for Vx_keysym_table
+ and fix C types.
+
+2002-11-03 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xdisp.c (single_display_prop_intangible_p): Strings are intangible.
+
+ * editfns.c (get_pos_property): Don't hardcode Qfield.
+
+ * keyboard.c (adjust_point_for_property): Handle `display' prop on
+ overlays. Also handle `invisible' prop.
+
+2002-11-02 Stefan Monnier <monnier@cs.yale.edu>
+
+ * coding.c (decode_coding_emacs_mule, decode_coding_iso2022)
+ (decode_coding_sjis_big5, decode_eol): Allow lone \r in DOS EOL.
+
+2002-11-01 Andreas Schwab <schwab@suse.de>
+
+ * editfns.c (Fmessage): Revert last change to properly handle %%.
+
+2002-11-01 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xmenu.c (unuse_menu_items): New fun.
+ (menu_items_inuse): New var.
+ (syms_of_xmenu): Initialize it.
+ (init_menu_items): Use it to detect re-entrance.
+ (Fx_popup_menu, Fx_popup_dialog, set_frame_menubar): Reset when done.
+ (Fx_popup_menu): Remove spurious XSETFRAME.
+
+ * editfns.c (find_field): Make an exception for nil fields.
+
+2002-11-01 Dave Love <fx@gnu.org>
+
+ * m/gec63.h: Deleted.
+
+2002-10-31 Dave Love <fx@gnu.org>
+
+ * xterm.c (XTread_socket): Fix last change.
+ (xaw_scroll_callback): Cast call_data to long to avoid warning.
+
+2002-10-31 Stefan Monnier <monnier@cs.yale.edu>
+
+ * process.c (Fformat_network_address): Fix int/Lisp_Object mixup.
+
+2002-10-30 Stefan Monnier <monnier@cs.yale.edu>
+
+ * editfns.c (overlays_around, get_pos_property): New funs.
+ (find_field): Use them.
+ Also be careful not to modify POS before its last use.
+ (Fmessage): Don't Fformat if there's nothing to format.
+
+2002-10-30 Dave Love <fx@gnu.org>
+
+ * process.c [HAVE_SYS_WAIT]: Include sys/wait.h.
+ [HAVE_PTY_H]; Include pty.h.
+
+ * lread.c (Fload) <!load_dangerous_libraries>: Close fd.
+
+ * xterm.c (Qeql): Declare.
+ (Vx_keysym_table): New.
+ (syms_of_xterm): Initialize it.
+ (XTread_socket): Use it. Deal with ASCII keysyms.
+ (XSetIMValues) [HAVE_X11R6]: Prototype.
+
+ * keyboard.c (lispy_accent_codes, lispy_accent_keys): Extended.
+ (lispy_kana_keys): Comment out.
+ (make_lispy_event) [XK_kana_A]: Comment out.
+ (modify_event_symbol) <sizeof (long) == sizeof (EMACS_INT)>:
+ Fix sprintf call.
+
+ * s/osf5-0.h (C_SWITCH_SYSTEM): Revert last change (fixed by
+ regexp.h change).
+ (TERMINFO, LIBS_TERMCAP): Define.
+
+ * s/usg5-4.h (bcopy, bzero): Define conditional on HAVE_BCOPY.
+ (bcmp): Define conditional on HAVE_BCMP.
+ (NO_SIOCTL_H): Don't define.
+ (TIOCSIGSEND): Don't make conditional on IRIX6.
+
+ * s/sol2-5.h: Don't include strings.h.
+ (bcopy, bzero, bcmp) [HAVE_BCOPY]: Don't undef.
+
+ * s/irix6-0.h (IRIX6): Don't define.
+ (bcopy, bcmp, bzero): Don't undef.
+
+ * s/irix6-5.h: Don't include strings.h.
+ (IRIX6): Don't define.
+ (bcopy, bcmp, bzero): Don't undef.
+
+ * syntax.c (Fforward_comment): Doc fix.
+
+2002-10-29 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fsignal_process): Allow PROCESS to be specified by
+ name in addition to pid (as integer or string).
+
+2002-10-28 Harald Maier <Harald.Maier.BW@t-online.de> (tiny change)
+
+ * w32heap.c: Don't redefine _heap_init and _heap_term on MSVC 7 build
+ environments.
+
+2002-10-27 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (note_mouse_highlight): Don't use mouse-face if hidden.
+
+ * w32term.c (note_mouse_highlight): Don't use mouse-face if hidden.
+
+ * msdos.c (IT_note_mouse_highlight): Don't use mouse-face if hidden.
+
+ * macterm.c (note_mouse_highlight): Don't use mouse-face if hidden.
+
+2002-10-26 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fformat): Detect invalid format letters for floats.
+
+2002-10-25 Kenichi Handa <handa@m17n.org>
+
+ * xfns.c (x_set_name): Encode by Qcompound_text unconditionally.
+ (x_set_title): Likewise.
+
+2002-10-25 Juanma Barranquero <lektu@terra.es>
+
+ * macgui.h:
+ * w32gui.h: Remove definition of XColor.
+
+ * dispextern.h [!HAVE_X_WINDOWS]: Define XColor.
+
+2002-10-24 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (get_window_cursor_type): New arg ACTIVE_CURSOR.
+ Callers changed (supply dummy arg).
+
+ * lisp.h (get_window_cursor_type): Update prototype.
+
+ * w32term.c (x_display_and_set_cursor): Get active_cursor from
+ get_window_cursor_type to track system caret.
+
+2002-10-24 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Fformat_network_address): New function.
+ (syms_of_process): Defsubr it.
+ (list_processes_1): Use it to format :local/:remote address if
+ service/host is not set; before Emacs would crash in that case.
+ (Fmake_network_process): Don't use Ffind_operation_coding_system
+ to setup coding system if host or service is not set.
+
+2002-10-23 Juanma Barranquero <lektu@terra.es>
+
+ Patch suggested by Jay Finger <jay_finger@hotmail.com>.
+
+ * w32term.c (w32_term_init): Pass XColor to w32_define_color, not
+ COLORREF.
+
+ * macgui.h:
+ * w32gui.h: Add definition of XColor.
+
+ * macfns.c:
+ * w32fns.c:
+ * xfaces.c: Remove definition of XColor.
+
+2002-10-22 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xfns.c (x_set_name, x_set_title): `icon.value' has unsigned char.
+
+ * window.c (window_loop): For GET_LRU_WINDOW and GET_LARGEST_WINDOW>,
+ Only ignore truly dedicated windows. For UNSHOW_BUFFER, delete the
+ window if it is dedicated.
+ (Fshrink_window): Add preserve_before as was done for enlarge_window.
+ (Vspecial_display_function): Update docstring.
+
+ * buffer.c (assoc_ignore_text_properties, Fother_buffer, Fkill_buffer)
+ (call_overlay_mod_hooks): Use CONSP and XCAR/XCDR.
+ (Fget_buffer_create, advance_to_char_boundary): Use BEG and BEG_BYTE.
+
+2002-10-21 Stefan Monnier <monnier@cs.yale.edu>
+
+ * casefiddle.c (casify_region): Don't treat a prefix char as part
+ of a word when at the beginning.
+
+2002-10-17 Juanma Barranquero <lektu@terra.es>
+
+ * lread.c (syms_of_lread): Fix typos.
+
+2002-10-17 Dave Love <fx@gnu.org>
+
+ * Makefile.in (TEMACS_LDFLAGS): Add trailing comment.
+
+2002-10-16 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fcopy_file): Fix backward test of KEEP_TIME.
+
+2002-10-14 Juanma Barranquero <lektu@terra.es>
+
+ * w16select.c (syms_of_win16select): Fix docstring for
+ `selection-coding-system'.
+
+ * w32select.c (syms_of_w32select): Likewise.
+
+2002-10-14 Stefan Monnier <monnier@cs.yale.edu>
+
+ * syntax.c (scan_lists): Don't get fooled by a symbol ending with
+ a backslash-quoted char.
+ (scan_lists, scan_sexps_forward): Pacify the compiler.
+
+2002-10-13 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (window_scroll): Set immediate_quit.
+
+ * print.c (print): When backquote form is the car of a list,
+ output in old style. Use old_backquote_output to output all
+ comma forms inside it in old style too.
+
+ * buffer.h (struct buffer): Move `undo_list' down below `name'.
+
+2002-10-11 Markus Rost <rost@math.ohio-state.edu>
+
+ * emacs.c (syms_of_emacs) <kill-emacs-hook>: Doc fix (not run in
+ batch mode).
+
+ * lread.c (Fload): Doc fix (load-suffixes).
+
+2002-10-10 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (syms_of_macterm, mac_get_mouse_btn):
+ Reverse functionality of mac-wheel-button-is-mouse-2 to be correct.
+ Also switch the default to Qnil from Qt.
+
+2002-10-08 Kenichi Handa <handa@m17n.org>
+
+ * coding.c (code_convert_region): When we need more GAP for
+ conversion, pay attention to the case that coding->produced is not
+ greater than coding->consumed.
+
+2002-10-07 Richard M. Stallman <rms@gnu.org>
+
+ * unexelf.c (unexec): Redo 9/16 change, but only if IRIX6_5.
+
+2002-10-06 Andrew Choi <akochoi@shaw.ca>
+
+ * macmenu.c (mac_menu_show): Add j to count menu items; match
+ menu_item_selection to it to find selected item.
+
+2002-10-06 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (XTread_socket): Fix from 2002-10-03 didn't cover all
+ cases. The correct fix is to pass ReparentNotify to Xt.
+ The shell widget interprets ConfigureNotify differently depending
+ on if it has been reparented or not.
+
+2002-10-05 Markus Rost <rost@math.ohio-state.edu>
+
+ * editfns.c (Fformat_time_string): Doc fix.
+
+2002-10-05 John Paul Wallington <jpw@shootybangbang.com>
+
+ * fns.c (Flength): Doc fix.
+
+2002-10-04 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (keyremap): New struct.
+ (read_key_sequence): Use it: globally replace keytran_foo with
+ keytran.foo and fkey_foo with fkey.foo. Rename temp vars
+ keytran_next and fkey_next to just `next'.
+
+2002-10-04 Steven Tamm <steventamm@mac.com>
+
+ * macterm.c (keycode_to_xkeysym_table): Change return to be
+ treated like an X keysym.
+
+2002-10-03 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.c (XTread_socket): For ConfigureNotify, with x and y == 0,
+ and USE_MOTIF, call XTranslateCoordinates to get the real x and y.
+ This is to also handle x/y changes that occur because of a resize.
+
+2002-10-02 John Paul Wallington <jpw@shootybangbang.com>
+
+ * frame.c (Vdelete_frame_functions): New variable.
+ (syms_of_frame): Initialize and defvar it.
+ (Fdelete_frame): Use it instead of delete-frame-hook. Don't run
+ it when frame's `tooltip' parameter is non-nil.
+
+ * xfns.c (x_create_tip_frame): Set `tooltip' frame parameter to t.
+
+ * w32fns.c (x_create_tip_frame): Likewise.
+
+ * macfns.c (x_create_tip_frame): Likewise.
+
+2002-09-30 Kenichi Handa <handa@m17n.org>
+
+ * xterm.c (x_encode_char): For DIM=1 charset, set ccl->reg[2] to
+ -1 before calling ccl_driver.
+
+ * coding.c (decode_coding_emacs_mule): Check coding->cmp_data.
+ Only when it is non-nil, handle composition sequence.
+ (setup_coding_system) <0>: Don't force composition handling.
+
+ * Makefile.in (lisp, shortlisp): Add utf-16.elc.
+
+2002-09-29 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (Freplace_match): Adjust match data for the substitution
+ just made in the buffer.
+
+ * xdisp.c (STOP_POLLING, RESUME_POLLING): New macros.
+ (redisplay_internal): Use them. Do RESUME_POLLING at end of function.
+
+2002-09-27 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (STOP_POLLING, RESUME_POLLING): New macros.
+ (read_char): Use them. Do all exits thru the end of the function.
+
+2002-09-27 Kenichi Handa <handa@etl.go.jp>
+
+ * xfaces.c (try_font_list): Pay attention to the case that FAMILY
+ is nil.
+
+2002-09-26 Richard M. Stallman <rms@gnu.org>
+
+ * regex.h (__restrict_arr): Don't define if already defined.
+
+ * coding.c (run_pre_post_conversion_on_str):
+ Save and restore Vdeactivate_mark.
+
+2002-09-26 John Paul Wallington <jpw@shootybangbang.com>
+
+ * minibuf.c (Fminibufferp): Add an optional `buffer' argument.
+
+2002-09-26 Kenichi Handa <handa@etl.go.jp>
+
+ * xfaces.c (try_font_list): New arg PREFER_FACE_FAMILY. If it is
+ nonzero, try face's family at first. Otherwise try FAMILY at first.
+ (choose_face_font): If C is a single byte char or latin-1, call
+ try_font_list with PREFER_FACE_FAMILY 1.
+
+2002-09-21 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (select_window_1): Don't select frame.
+ Set frame's selected window only when frame itself is selected.
+ (Fselect_window): Doc fix.
+
+2002-09-18 Kim F. Storm <storm@cua.dk>
+
+ * process.c (make-network-process): Doc fix (there is no
+ network-server-log-function hook).
+
+2002-09-18 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (print): Clear out the unused parts of Vprint_number_table.
+ (syms_of_print): Doc fix for `print-number-table'.
+
+ * unexelf.c (unexec): Undo previous change.
+
+2002-09-17 Andreas Schwab <schwab@suse.de>
+
+ * m/alpha.h [LINUX]: Don't define DATA_START.
+
+2002-09-16 Dave Love <fx@gnu.org>
+
+ * unexelf.c (unexec): Deal with .got, reinstating change from
+ 25-08-1999.
+
+2002-09-13 Richard M. Stallman <rms@gnu.org>
+
+ * s/sol2-6.h (UNEXEC): Comment out definition.
+
+ * unexsol.c (unexec): Don't downcase first letter of error msg.
+
+ * xfaces.c (Fcolor_supported_p): Just one arg is required.
+
+2002-09-12 Markus Rost <rost@math.ohio-state.edu>
+
+ * unexsol.c: Include buffer.h, charset.h, coding.h.
+
+2002-09-11 Richard M. Stallman <rms@gnu.org>
+
+ * unexsol.c: Don't use report_file_error; do it by hand
+ using dlerror.
+
+ * process.c (wait_reading_process_input, both versions):
+ Before calling turn_on_atimers, call stop_polling.
+
+ * emacs.c (syms_of_emacs) <command-line-args>: Doc fix.
+
+ * xdisp.c (try_scrolling): If after make_cursor_line_fully_visible
+ we go to too_near_end, call clear_glyph_matrix.
+ (redisplay_window): After make_cursor_line_fully_visible,
+ call clear_glyph_matrix and bypass `goto done'.
+
+ * xfns.c (x_report_frame_params): If FRAME_SCROLL_BAR_PIXEL_WIDTH is 0
+ and we have non-toolkit scroll bars, return nil for scroll-bar-width.
+
+2002-09-10 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fdo_auto_save): Catch error making directory.
+ Only call push_message if we need to.
+ At the same time, make an unwind-protect to pop it.
+ Rename local message_p to old_message_p.
+ (do_auto_save_make_dir, do_auto_save_eh): New functions.
+ (do_auto_save_unwind): Don't call pop_message.
+
+ * lisp.h (pop_message_unwind): Renamed from push_message_unwind.
+
+ * keyboard.c (Fexecute_extended_command): Use pop_message_unwind.
+
+ * alloc.c (Fgarbage_collect): Use pop_message_unwind.
+
+ * xdisp.c (pop_message_unwind): Renamed from push_message_unwind.
+
+2002-09-10 Stefan Monnier <monnier@cs.yale.edu>
+
+ * regex.c (DISCARD_FAILURE_REG_OR_COUNT): Delete.
+ (CHECK_INFINITE_LOOP): Don't pop anything: just set `cycle' to 1.
+ (re_match_2_internal): Be more careful with infinite loops.
+
+2002-09-10 Kim F. Storm <storm@cua.dk>
+
+ * macros.c (end_kbd_macro): New function.
+ (Fend_kbd_macro): Use it.
+
+ * macros.h (end_kbd_macro): Declare extern.
+
+ * keyboard.c (Fdiscard_input): If defining keyboard macro,
+ end and save it instead of discarding it.
+
+2002-09-09 Markus Rost <rost@math.ohio-state.edu>
+
+ * s/sol2-6.h: Fix typo. Add comment.
+
+2002-09-09 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (regnum_t): Use signed int, not unsigned int.
+
+ * s/sol2-6.h: New file.
+
+ * s/sol2-5.h (UNEXEC): Definition deleted.
+
+2002-09-08 Kim F. Storm <storm@cua.dk>
+
+ * macros.c (executing_macro_index): Change type to EMACS_INT.
+ (syms_of_macros): DEFVAR_INT it (needed by kmacro).
+
+ * macros.h (executing_macro_index): Change type to EMACS_INT.
+
+2002-09-06 Richard M. Stallman <rms@gnu.org>
+
+ * casetab.c (set_case_table): Make canon table point to eqv table.
+
+2002-09-06 Juanma Barranquero <lektu@terra.es>
+
+ * coding.c (syms_of_coding): Fix spacing.
+
+ * composite.c (Fcompose_region_internal)
+ (Fcompose_string_internal): Likewise.
+
+ * data.c (Flsh): Likewise.
+
+ * fontset.c (Fset_fontset_font): Likewise.
+
+ * macfns.c (Fx_server_max_request_size): Likewise.
+
+ * w16select.c (syms_of_win16select): Likewise.
+
+ * w32select.c (syms_of_w32select): Likewise.
+
+ * xselect.c (syms_of_xselect): Likewise.
+
+2002-09-05 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (set_image_of_range_1): In no-TRANSLATE case,
+ call EXTEND_RANGE_TABLE and return a proper value.
+ (set_image_of_range): Don't call set_image_of_range_1
+ if no TRANSLATE or if range includes all of Latin-1.
+ Only call it for the Latin-1 part of the range.
+ For other cases, make two separate ranges,
+ one for the original specified characters and one for
+ their case-conversions.
+
+2002-09-04 Richard M. Stallman <rms@gnu.org>
+
+ * s/sol2-5.h (UNEXEC): Use unexsol.o.
+
+ * window.c (displayed_window_lines): Correct for one-off bug
+ in HEIGHT on non-window displays.
+
+ * regex.c (set_image_of_range_1): New function.
+ (set_image_of_range): Use set_image_of_range_1 for Latin-1.
+ Return a value to indicate running out of memory.
+ (SET_RANGE_TABLE_WORK_AREA): Check value from set_image_of_range.
+ (extend_range_table_work_area): New subroutine.
+ (EXTEND_RANGE_TABLE): Replaces EXTEND_RANGE_TABLE_WORK_AREA.
+ Different calling conventions, and used from set_image_of_range{,_1}.
+ (IMMEDIATE_QUIT_CHECK): Definitions moved.
+
+2002-09-04 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in: All dependencies updated.
+
+2002-09-01 Richard M. Stallman <rms@gnu.org>
+
+ * unexsol.c: New file.
+
+ * xfns.c (Qbox): Declare external, don't define.
+
+ * xdisp.c (redisplay_window) <force-start case>:
+ If point is on semi-visible last line, reposition
+ it at previous line.
+
+ * alloc.c (display_malloc_warning): Use display-warning.
+ (malloc_warning_1): Function deleted.
+
+ * alloc.c [ALLOC_DEBUG]: #undef INLINE.
+
+ * lread.c (read1): Handle #! by skipping the line.
+
+2002-08-31 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in (TEMACS_LDFLAGS): Renamed from ALL_LDFLAGS.
+ Don't include LDFLAGS.
+ (temacs): Pass LDFLAGS separately, and not via YMF_PASS_LDFLAGS.
+
+2002-08-31 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xdisp.c (get_window_cursor_type): Don't use x_highlight_frame
+ member of x_display_info unless we compile for some window system.
+
+2002-08-31 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (Valternate_cursor_type, Qalternate_cursor_type): Removed.
+ (get_window_cursor_type): Don't use them.
+ (syms_of_xdisp): Remove intern, staticpro, and defvar for them.
+
+2002-08-30 Kenichi Handa <handa@etl.go.jp>
+
+ * xdisp.c (get_next_display_element): Fix previous change.
+
+2002-08-30 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (expose_overlaps): New function (merge code from xterm.c).
+ (expose_window): Use it to fix the display of overlapping
+ rows (merge code from xterm.c).
+
+ * macfns.c (Qbox): Add extern declaration.
+
+2002-08-30 Juanma Barranquero <lektu@terra.es>
+
+ * w32fns.c (Qbox): Make extern.
+ (syms_of_w32fns): Remove initialization of Qbox.
+
+2002-08-30 Rune Kleveland <runekl@viewpoint.no> (tiny change)
+
+ * xfns.c (Fx_open_connection): Fix error message.
+
+2002-08-30 Kim F. Storm <storm@cua.dk>
+
+ The following changes consolidates the handling of the cursor
+ type in xdisp.c, moving duplicate code and functionality from
+ xfns.c, xterm.c, w32fns.c, w32term.c, macfns.c, and macterm.c.
+
+ * frame.h (enum text_cursor_kinds): Consolidated here.
+ Added DEFAULT_CURSOR value.
+ (struct frame) <desired_cursor, cursor_width>
+ <blink_off_cursor, blink_off_cursor_width>: New fields.
+ Consolidated from output_x, output_w32 and output_mac structs.
+ (FRAME_DESIRED_CURSOR, FRAME_CURSOR_WIDTH, FRAME_BLINK_OFF_CURSOR)
+ (FRAME_BLINK_OFF_CURSOR_WIDTH): Macros consolidated here.
+
+ * xdisp.c (Qbar, Qhbar, Qbox, Qhollow, Vblink_cursor_alist):
+ Variables consolidated here.
+ (Valternate_cursor_type, Qalternate_cursor_type): New variables.
+ (Vcursor_in_non_selected_windows): Renamed from
+ cursor_in_non_selected_windows and changed to Lisp_Object.
+ (syms_of_xdisp): Define and staticpro new and moved variables.
+ (get_specified_cursor_type): Renamed from x_specified_cursor_type;
+ consolidated here. Recognize Qhollow setting.
+ (set_frame_cursor_types): New function to set frame cursor types
+ based on the frame parameters.
+ (get_window_cursor_type): New function to calculate new cursor
+ type and width for the specified window. Based on duplicated
+ code consolidated here.
+ Enhancements: cursor-in-non-selected-windows may be a cursor type,
+ check buffer-local alternate-cursor-type and blink-cursor-alist
+ before using built-in blink off methods.
+
+ * dispextern.h (cursor_in_non_selected_windows): Extern removed.
+
+ * lisp.h (Qcursor_in_non_selected_windows): Extern removed.
+ (get_specified_cursor_type, get_window_cursor_type)
+ (set_frame_cursor_types): Added prototypes.
+
+ * macfns.c (x_specified_cursor_type): Removed.
+ (x_set_cursor_type): Use set_frame_cursor_types.
+ (Qbar, Qbox): Removed.
+ (syms_of_macfns): Don't intern or staticpro them.
+
+ * macterm.c (x_specified_cursor_type): Remove prototype.
+ (x_draw_bar_cursor): Use FRAME_CURSOR_WIDTH.
+ (x_display_and_set_cursor): Use get_window_cursor_type.
+ Remove unused local variables cursor_non_selected, active_cursor.
+ Redraw cursor if hbar cursor width changes.
+ (make_mac_frame): Set FRAME_DESIRED_CURSOR.
+
+ * macterm.h (enum text_cursor_kinds): Removed.
+ (struct output_mac) <current_cursor, desired_cursor, cursor_width>
+ <blink_off_cursor, blink_off_cursor_width>: Members removed.
+ (FRAME_DESIRED_CURSOR): Macro removed.
+
+ * w32fns.c (Vblink_cursor_alist): Removed.
+ (Qbar, Qhbar, Qbox, Qhollow): Removed.
+ (syms_of_w32fns): Don't intern, staticpro, or define them.
+ (x_specified_cursor_type): Removed.
+ (x_set_cursor_type): Use set_frame_cursor_types.
+
+ * w32term.c (x_specified_cursor_type): Remove prototype.
+ (x_draw_bar_cursor): Use FRAME_CURSOR_WIDTH.
+ (x_display_and_set_cursor): Use get_window_cursor_type.
+ Remove unused local variables cursor_off_state.
+ Redraw cursor if hbar cursor width changes.
+ Changed all occurrences of w32_highlight_frame to x_highlight_frame.
+
+ * w32term.h (enum text_cursor_kinds): Removed.
+ (struct output_w32) <current_cursor, desired_cursor, cursor_width>
+ <blink_off_cursor, blink_off_cursor_width>: Members removed.
+ (FRAME_DESIRED_CURSOR, FRAME_CURSOR_WIDTH, FRAME_BLINK_OFF_CURSOR)
+ (FRAME_BLINK_OFF_CURSOR_WIDTH): Macros removed.
+ (struct w32_display_info) <x_highlight_frame>: Renamed member from
+ w32_highlight_frame.
+
+ * xfns.c (Vblink_cursor_alist): Removed.
+ (Qbar, Qhbar, Qbox, Qhollow): Removed.
+ (syms_of_xfns): Don't intern, staticpro, or define them.
+ (x_specified_cursor_type): Removed.
+ (x_set_cursor_type): Use set_frame_cursor_types.
+
+ * xterm.c (x_specified_cursor_type): Remove prototype.
+ (x_draw_bar_cursor): Use FRAME_CURSOR_WIDTH.
+ (x_display_and_set_cursor): Use get_window_cursor_type.
+ Remove unused local variables cursor_off_state.
+ Redraw cursor if hbar cursor width changes.
+
+ * xterm.h (enum text_cursor_kinds): Removed.
+ (struct output_x) <current_cursor, desired_cursor, cursor_width>
+ <blink_off_cursor, blink_off_cursor_width>: Members removed.
+ (FRAME_DESIRED_CURSOR, FRAME_CURSOR_WIDTH, FRAME_BLINK_OFF_CURSOR)
+ (FRAME_BLINK_OFF_CURSOR_WIDTH): Macros removed.
+ (x_specified_cursor_type): Remove prototype.
+
+2002-08-28 Richard M. Stallman <rms@gnu.org>
+
+ * w32fns.c (x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and
+ FRAME_BLINK_OFF_CURSOR_WIDTH using defaults and Vblink_cursor_alist.
+ (Vblink_cursor_alist): New variable.
+ (syms_of_w32fns): Initialize and defvar it.
+ (x_specified_cursor_type): Recognize Qbox for filled box.
+ Exceptions are hollow boxes.
+ (Qbox, Qhollow): New variables.
+ (syms_of_w32fns): Initialize and staticpro them.
+
+ * w32term.h (FRAME_BLINK_OFF_CURSOR, FRAME_BLINK_OFF_CURSOR_WIDTH):
+ New macros.
+ (struct w32_output): New fields blink_off_cursor,
+ blink_off_cursor_width.
+ (FRAME_CURSOR_WIDTH): New macro.
+
+ * w32term.c (x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
+ and FRAME_BLINK_OFF_CURSOR_WIDTH for blinking cursor off.
+
+ * w32term.c (x_display_and_set_cursor): Check FRAME_CURSOR_WIDTH
+ for bar cursor.
+
+ * w32term.c (expose_overlaps): New function.
+ (expose_window): Use it to fix the display of overlapping rows.
+
+2002-08-28 Simon Josefsson <jas@extundo.com>
+
+ * xfns.c (Fx_open_connection): Improve help when X connection
+ fails, xhost is insecure and xauth is better.
+
+2002-08-28 Juanma Barranquero <lektu@terra.es>
+
+ * makefile.w32-in: Add missing dependencies on w32term.h and
+ composite.h.
+
+ * emacs.c (USAGE1): Add missing newline.
+
+2002-08-27 Andrew Choi <akochoi@shaw.ca>
+
+ * s/darwin.h [HAVE_LIBNCURSES]: Define HAVE_TERMINFO.
+
+2002-08-27 Richard M. Stallman <rms@gnu.org>
+
+ * xfns.c (x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and
+ FRAME_BLINK_OFF_CURSOR_WIDTH using defaults and Vblink_cursor_alist.
+ (Vblink_cursor_alist): New variable.
+ (syms_of_xfns): Initialize and defvar it.
+ (x_specified_cursor_type): Recognize Qbox for filled box.
+ Exceptions are hollow boxes.
+ (Qbox, Qhollow): New variables.
+ (syms_of_xfns): Initialize and staticpro them.
+
+ * xterm.h (FRAME_BLINK_OFF_CURSOR, FRAME_BLINK_OFF_CURSOR_WIDTH):
+ New macros.
+ (struct x_output): New fields blink_off_cursor, blink_off_cursor_width.
+
+ * xterm.c (x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
+ and FRAME_BLINK_OFF_CURSOR_WIDTH for blinking cursor off.
+
+ * emacs.c (main): Handle --script.
+ (USAGE1): Mention --script.
+ (standard_args): Define sort order for --script.
+
+2002-08-27 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xdisp.c (redisplay_updating_p): Variable removed.
+ (inhibit_free_realized_faces, Qinhibit_free_realized_faces):
+ New variables.
+ (init_iterator): Don't free realized faces if
+ inhibit_free_realized_faces is set.
+ (redisplay_internal): Bind Qinhibit_free_realized_faces to nil.
+ (syms_of_xdisp): DEFVAR_BOOL inhibit-free-realized-faces,
+ initialize Qinhibit_free_realized_faces.
+
+ * dispextern.h (PRODUCE_GLYPHS): Set inhibit_free_realized_faces
+ when iterator is adding glyphs to a glyph matrix.
+
+2002-08-27 Kenichi Handa <handa@etl.go.jp>
+
+ * xdisp.c (get_next_display_element): In unibyte case, don't use
+ octal form for such eight-bit characters that can be converted to
+ multibyte char.
+
+2002-08-26 Kim F. Storm <storm@cua.dk>
+
+ * frame.c (make_terminal_frame) [CANNOT_DUMP]: Initialize
+ foreground and background colors. From Joe Buehler.
+
+2002-08-26 Miles Bader <miles@gnu.org>
+
+ * bytecode.c (Fbyte_code): Fsub1 can GC, so protect it.
+
+2002-08-25 Andrew Choi <akochoi@shaw.ca>
+
+ * emacs.c (main): Call init_mac_osx_environment if HAVE_CARBON is
+ defined instead of MAC_OSX.
+
+ * s/darwin.h (select): Define select to sys_select only if
+ HAVE_CARBON is defined.
+ (HAVE_WORKING_VFORK): #undef it. Define vfork to fork.
+ (DONT_REOPEN_PTY): #def it.
+
+ * macterm.c (XTread_socket): Remove code to call
+ SendEventToEventTarget for keys with command modifiers when
+ mac_command_key_is_meta is nil.
+
+2002-08-24 Andreas Schwab <schwab@suse.de>
+
+ * eval.c (Fdefvar): Fix last change.
+
+2002-08-23 Richard M. Stallman <rms@gnu.org>
+
+ * eval.c (Fdefvar, Fdefconst, Fdefvaralias):
+ Record variables in load history as (defvar . VAR).
+ (Fdefvar): Don't record in load history if no initial value.
+ (Qdefvar): New variable.
+ (syms_of_eval): Init and staticpro it.
+
+ * lread.c (syms_of_lread): Doc fix.
+ (build_load_history): Use Fmember to see if a definition
+ is already in the Vload_history element.
+
+ * process.c (Fstart_process): Remove /: from program name.
+
+ * emacs.c (decode_env_path): Don't add /: if file name handler
+ has a `safe-magic' property.
+
+ * callproc.c (Fcall_process): Remove /: from program name.
+
+2002-08-23 Stefan Monnier <monnier@cs.yale.edu>
+
+ * regex.c (PATFETCH): Remove the translating fetch.
+ (PATFETCH_RAW): Rename to PATFETCH.
+ (set_image_of_range): New fun.
+ (SET_RANGE_TABLE_WORK_AREA): Use it.
+ (regex_compile): Don't translate the pattern chars so eagerly.
+ Only do it when inserting an `exactn' bytecode or when handling
+ a char-range.
+ (mutually_exclusive_p): Avoid empty statement.
+
+2002-08-22 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Do not `goto try_to_scroll' when we
+ end up on a partially visible line; this reverts a specific part
+ of the 2002-07-07 change by Richard M. Stallman to "fix" a nasty
+ display error which has been reported several times now.
+ However it introduces the problem that changes was supposed to fix.
+ See my comments in the source if you want to debug this further.
+
+2002-08-20 Kenichi Handa <handa@etl.go.jp>
+
+ * abbrev.c (Fexpand_abbrev): Fix for the multibyte case.
+
+2002-08-19 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (croak): Add `void' to definition.
+
+ * sysdep.c (request_sigio, unrequest_sigio) [MSDOS]:
+ Don't define them, they are defined in msdos.c.
+
+ * mem-limits.h [MSDOS]: Declare etext.
+
+ * fileio.c (Ffile_name_directory) [DOS_NT]: Don't declare `beg'
+ `const' since CORRECT_DIR_SEPS modifies its target.
+
+2002-08-19 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (Fclear_this_command_keys): Add optional arg
+ KEEP-RECORD to avoid clearing lossage when we just want to clear
+ the current key sequence (kmacro needs this).
+
+2002-08-19 Kenichi Handa <handa@localhost>
+
+ * composite.c (run_composition_function): Call FUNC if it is fboundp.
+
+ * composite.h (COMPOSITION_MODIFICATION_FUNC): If PROP is not a
+ cons, return Qnil.
+
+2002-08-17 Richard M. Stallman <rms@gnu.org>
+
+ * s/sol2-5.h (BROKEN_SIGIO): Add #undef.
+
+ * sysdep.c [!VMS]: Include sys/files.h.
+
+ * editfns.c (save_restriction_restore): Defend from unchained marker.
+
+ * buffer.c (overlays_at): Handle extending vec uniformly.
+ (overlays_in): Handle extending vec from length 0 as in overlays_at.
+
+2002-08-15 Andrew Choi <akochoi@shaw.ca>
+
+ * mac.c (init_mac_osx_environment): New function.
+
+ * emacs.c (main) [MAC_OSX]: Call init_mac_osx_environment.
+
+2002-08-14 Kim F. Storm <storm@cua.dk>
+
+ * macros.c (Fstart_kbd_macro): Added NO-EXEC argument to inhibit
+ executing macro before appending to it (when used from Lisp).
+ (Fexecute_kbd_macro): Added LOOPFUNC argument to supply function
+ which is called prior to each iteration of macro (for kmacro.el).
+ (Fend_kbd_macro, Fcall_last_kbd_macro): Likewise.
+
+ * lisp.h (Fexecute_kbd_macro): Update prototype.
+
+ * keyboard.c (Fcommand_execute): Update call to Fexecute_kbd_macro.
+
+2002-08-14 Kenichi Handa <handa@etl.go.jp>
+
+ * xselect.c (QUTF8_STRING): New variable.
+ (symbol_to_x_atom): Pay attention to QUTF8_STRING.
+ (x_atom_to_symbol): Likewise.
+ (x_get_local_selection): New argument local_request. If it is
+ nonzero, call handler_fn with the second arg nil.
+ (x_handle_selection_request): Call x_get_local_selection with
+ local_request 0.
+ (lisp_data_to_selection_data): Don't encode the string here.
+ (Fx_get_selection_internal): Call x_get_local_selection with
+ local_request 1.
+ (syms_of_xselect): Intern and staticpro QUTF8_STRING.
+
+ * xterm.c (x_term_init): Initialize dpyinfo->Xatom_UTF8_STRING.
+
+ * xterm.h (struct x_display_info): New member Xatom_UTF8_STRING.
+
+2002-08-13 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (Fminibufferp): New function.
+ (syms_of_minibuf): Defsubr it.
+ (Fminibuffer_prompt_end): Handle non-minibuffers specially.
+
+2002-08-13 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * coding.c (Funencodable_char_position): Lisp_Object/int mixup.
+
+2002-08-12 Richard M. Stallman <rms@gnu.org>
+
+ * syswait.h: Only the include of sys/wait.h tests HAVE_SYS_WAIT_H.
+ [!VMS] (WCOREDUMP, WEXITSTATUS, WIFEXITED, WIFSTOPPED, WIFSIGNALED)
+ (WSTOPSIG, WTERMSIG): Define each one independently if not defined
+ already.
+
+ * buffer.c (syms_of_buffer) <fill-column>: Doc fix.
+
+2002-08-11 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTmouse_position): Check wp with is_emacs_window.
+ (Vmac_pass_command_to_system): New variable.
+ (Vmac_pass_control_to_system): New variable.
+ (do_mouse_moved): Check wp with is_emacs_window.
+ (XTread_socket): Check window_ptr with is_emacs_window.
+ Call FrontNonFloatingWindow instead of FrontWindow. Send keydown
+ events back to Mac Toolbox for processing, depending on values of
+ Vmac_pass_command_to_system and Vmac_pass_control_to_system.
+ (syms_of_macterm): DEFVAR_LISP Vmac_pass_command_to_system and
+ Vmac_pass_control_to_system.
+
+2002-08-10 Kenichi Handa <handa@etl.go.jp>
+
+ * coding.c (unencodable_char_position): New function.
+ (Funencodable_char_position): New function.
+ (syms_of_coding): Defsubr Funencodable_char_position.
+
+2002-08-10 Andrew Choi <akochoi@shaw.ca>
+
+ * mac.c (sys_select) [MAC_OSX]: New function.
+
+ * macterm.c (MakeMeTheFrontProcess): New function.
+ (mac_initialize): Call MakeMeTheFrontProcess.
+
+ * s/darwin.h: Define select to sys_select.
+
+2002-08-09 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (make_lispy_event): Test WINDOWSNT, not WINDOWS_NT.
+
+2002-08-09 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xdisp.c (forward_to_next_line_start): Return 0 when reaching the
+ end of the buffer.
+
+2002-08-08 Ken Raeburn <raeburn@gnu.org>
+
+ * coding.c (Ffind_operation_coding_system): Fix Lisp_Object/int mixup.
+
+ * puresize.h (BASE_PURESIZE): Increase to 910000.
+
+2002-08-08 Kenichi Handa <handa@etl.go.jp>
+
+ * coding.c (Ffind_operation_coding_system): For write-region, if
+ VISIT is a filename, make it the target.
+
+2002-08-07 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (mark_object): Detect long lists for debugging.
+ (mark_object_loop_halt): New variable.
+
+ * s/hpux10.h (C_SWITCH_SYSTEM): #undef it.
+
+ * data.c (Fmake_variable_frame_local): Doc fix.
+
+2002-08-01 David Ponce <david@dponce.com>
+
+ * w32menu.c (local_heap, local_alloc, local_free): New macros.
+ (malloc_widget_value, free_widget_value)
+ (w32_free_submenu_strings): Use them.
+
+ (push_submenu_start, push_submenu_end, push_left_right_boundary)
+ (push_menu_pane, push_menu_item, single_keymap_panes)
+ (single_menu_item, Fx_popup_menu, menubar_selection_callback)
+ (single_submenu, set_frame_menubar)
+ (w32_menu_show, w32_dialog_show): Use AREF, ASET, ASIZE.
+
+ (Fx_popup_menu): Don't show pop up menu until preceding one is
+ actually cleaned up. Moved UNGCPRO outside #ifdef HAVE_MENUS block.
+
+ * w32menu.c: Changes adapted from xmenu.c
+ (set_frame_menubar): First parse all submenus,
+ then make widget_value trees from them.
+ Don't allocate any widget_value objects
+ until we are done with the parsing.
+ (parse_single_submenu): New function.
+ (digest_single_submenu): New function.
+ (single_submenu): Function deleted, replaced by those two.
+
+2002-08-04 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTread_socket): Check that FrontNonFloatingWindow
+ returns a valid window pointer before proceeding for keyDown and
+ autoKey events.
+
+2002-08-03 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (USE_CARBON_EVENTS): New macro.
+ (macCtrlKey, macShiftKey, macMetaKey, macAltKey): New macros.
+ (x_iconify_frame): Call CollapseWindow.
+ (Vmac_reverse_ctrl_meta): New variable.
+ (Vmac_wheel_button_is_mouse_2): New variable.
+ (init_mac_drag_n_drop): New function.
+ (mac_do_receive_drag): New function.
+ (mac_handle_service_event): New function.
+ (init_service_handler): New function.
+ (mac_to_emacs_modifiers): New function.
+ (mac_event_to_emacs_modifiers): New function.
+ (mac_get_mouse_btn): New function.
+ (mac_convert_event_ref): New function.
+ (XTread_socket) [USE_CARBON_EVENTS]: Call ReceiveNextEvent,
+ SendEventToEventTarget, mac_event_to_emacs_modifiers, and
+ mac_get_mouse_btn.
+ (mac_initialize): Call init_mac_drag_n_drop and init_service_handler.
+
+ * keyboard.c: Define Qmouse_wheel, mouse_wheel_syms, and
+ lispy_mouse_wheel_names for MAC_OSX as well as for WINDOWS_NT.
+ (kbd_buffer_get_event): Set used_mouse_menu for MENU_BAR_EVENT and
+ TOOL_BAR_EVENT for MAC_OS as well.
+ (make_lispy_event): Handle MOUSE_WHEEL_EVENT for MAC_OSX as well
+ as for WINDOWS_NT.
+ (syms_of_keyboard): Initialize Qmouse_wheel for MAC_OSX.
+
+ * termhooks.h (event_kind): Define MOUSE_WHEEL_EVENT also for MAC_OSX.
+
+2002-08-03 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xdisp.c (forward_to_next_line_start): Fix a condition that
+ lead to a newline being skipped.
+
+2002-08-02 Andrew Choi <akochoi@shaw.ca>
+
+ * mac.c (syms_of_mac): Defsubr Sx_selection_exists_p.
+
+2002-08-01 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in (SOME_MACHINE_OBJECTS): Add fontset.o.
+
+2002-07-31 Andrew Choi <akochoi@shaw.ca>
+
+ * macfns.c: #undef init_process before #define-ing it.
+
+ * s/darwin.h: Define MAC_OS, SYMS_SYSTEM, and OTHER_FILES only if
+ HAVE_CARBON is defined.
+
+2002-07-31 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (set_frame_menubar): First parse all submenus,
+ then make widget_value trees from them.
+ Don't allocate any widget_value objects
+ until we are done with the parsing.
+ (parse_single_submenu): New function.
+ (digest_single_submenu): New function.
+ (single_submenu): Function deleted, replaced by those two.
+
+2002-07-30 Juanma Barranquero <lektu@terra.es>
+
+ * w32proc.c (syms_of_ntproc): Fix docstring of
+ `w32-get-true-file-attributes'.
+
+2002-07-28 Richard M. Stallman <rms@gnu.org>
+
+ * s/hpux8.h (HPUX8): Define this before including hpux.h.
+ (HAVE_SYS_WAIT_H): #define deleted; we let Autoconf decide.
+
+ * s/hpux.h (HAVE_SYS_WAIT_H): The #undef is conditional on HPUX8.
+
+ * keyboard.c (make_lispy_event):
+ Use #ifdef to test USE_TOOLKIT_SCROLL_BARS.
+ Explicitly clear up_modifier in event->modifiers.
+
+2002-07-27 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.h (FRAME_CURSOR_WIDTH): New macro.
+
+ * xterm.c (x_display_and_set_cursor): Check FRAME_CURSOR_WIDTH
+ for bar cursor.
+
+2002-07-26 Kenichi Handa <handa@etl.go.jp>
+
+ * coding.c (detect_coding_iso2022): While checking a byte sequence
+ for CODING_CATEGORY_MASK_ISO_8_2, if we read one extra byte, check
+ it in the normal loop.
+
+2002-07-24 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xterm.c (expose_overlaps): New function.
+ (expose_window): Use it to fix the display of overlapping rows.
+
+ * xdisp.c (unwind_redisplay): Clear redisplay_updating_p.
+
+2002-07-23 Ken Raeburn <raeburn@gnu.org>
+
+ * lisp.h (XPNTR): Use NO_UNION_TYPE version for union as well,
+ since it only depends on XUINT.
+
+ * m/alpha.h (BITS_PER_LONG, BITS_PER_EMACS_INT, EMACS_INT,
+ EMACS_UINT, SPECIAL_EMACS_INT, DATA_SEG_BITS,
+ PNTR_COMPARISON_TYPE, VALBITS, MARKBIT, XINT, XUINT, XPNTR):
+ Macros deleted.
+
+ * mem-limits.h (start_of_data): If DATA_START is defined, prefer
+ its value over other approaches.
+ * sysdep.c (start_of_data): Don't define the function if a macro
+ form has been defined.
+
+2002-07-23 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xdisp.c (redisplay_updating_p): New variable.
+ (init_iterator): Don't free realized faces when
+ redisplay_updating_p is set.
+ (redisplay_internal): Set redisplay_updating_p while updating
+ the display.
+
+2002-07-23 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fmessage): Treat "" like nil.
+
+2002-07-23 Kenichi Handa <handa@etl.go.jp>
+
+ * xdisp.c (face_before_or_after_it_pos):
+ Call FETCH_MULTIBYTE_CHAR with byte postion, not char position.
+
+2002-07-22 Juanma Barranquero <lektu@terra.es>
+
+ * callproc.c (init_callproc) [DOS_NT]:
+ Initialize Vshared_game_score_directory to nil.
+ (syms_of_callproc) [DOS_NT]: Likewise.
+
+2002-07-22 Gerd Moellmann <gerd.moellmann@t-online.de>
+
+ * xdisp.c (display_line): Replace an abort with xassert.
+
+2002-07-21 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (redisplay_window): Don't test BEG_UNCHANGED
+ and END_UNCHANGED when setting buffer_unchanged_p.
+ Use current_matrix_up_to_date_p to decide whether to use
+ try_cursor_movement.
+
+ * config.in (HAVE_SHARED_GAME_DIR): Undef deleted.
+
+ * epaths.in (PATH_GAME): New macro, edited by ../Makefile.in.
+
+ * callproc.c (init_callproc): Set up Vshared_game_score_directory.
+ Set to nil if dir does not exist.
+ (syms_of_callproc): Init unconditionally and simply.
+
+ * buffer.c (Fbuffer_list): Doc fix.
+
+2002-07-21 Ken Raeburn <raeburn@gnu.org>
+
+ * sysdep.c (end_of_text, end_of_data): Unused functions deleted.
+
+ * buffer.c (mmap_realloc): When shrinking, make sure number of
+ pages to unmap is rounded towards zero.
+
+ * m/mips-siemens.h (XSETUINT, XSETPNTR): Unused macros deleted.
+ (XSETINT): Deleted.
+
+ * m/att3b.h (XINT): Don't define.
+ (VALBITS, VALMASK, XTYPE): Deleted.
+ (DATA_SEG_BITS): Define.
+ * m/gec63.h (VALBITS, VALAMASK, XTYPE, XSETTYPE, XPNTR, XSET,
+ ARRAY_MARK_FLAG): Deleted.
+ (DATA_SEG_BITS): Define.
+ * m/pfa50.h (VALBITS, VALMASK, XTYPE): Deleted.
+ (DATA_SEG_BITS): Define.
+
+2002-07-20 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (print_error_message): New args CONTEXT and CALLER.
+ Calls changed.
+
+ * lisp.h (print_error_message): Declare new args.
+
+ * keyboard.c (cmd_error_internal): Pass Vsignaling_function
+ and CONTEXT to print_error_message, don't print them here.
+ For a Quit, don't use Vsignaling_function.
+ Call message_log_maybe_newline.
+
+ * Makefile.in (xsmfns.o): Don't depend on lisp.h.
+
+2002-07-20 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (redisplay_window): Test MODIFF to set buffer_unchanged_p.
+
+2002-07-19 Ken Raeburn <raeburn@gnu.org>
+
+ * bytecode.c (struct byte_stack): Pointers into byte string now
+ point to const.
+ * callproc.c (Fcall_process): Make NEW_ARGV array hold pointer to
+ const.
+ * charset.h (BCOPY_SHORT): Source pointer now points to const.
+ * coding.c (encode_eol, detect_coding, detect_eol):
+ (decode_coding, encode_coding, detect_coding_system):
+ Source strings now treated as const.
+ (decode_coding_string, encode_coding_string): Use STRING_COPYIN to
+ modify Lisp string contents.
+ * coding.h (decode_coding, encode_coding, detect_coding,
+ detect_eol): Declarations updated.
+ * composite.c (compose_chars_in_text): Treat Lisp string contents
+ as const.
+ * dispnew.c (safe_bcopy): Source pointer now points to const.
+ * lisp.h (STRING_COPYIN): New macro.
+ (detect_coding_system, safe_bcopy, temp_output_buffer_setup):
+ (internal_with_output_to_temp_buffer): Declarations updated.
+ * print.c (temp_output_buffer_setup):
+ (internal_with_output_to_temp_buffer): Buffer name argument is now
+ pointer to const.
+ * sound.c (struct sound_device): Function pointer field "write"
+ buffer argument now points to const.
+ (vox_write): Buffer argument points to const.
+ * syntax.c (Fstring_to_syntax, skip_chars): Treat Lisp string
+ contents as const.
+ * sysdep.c (emacs_write): Buffer pointer now const.
+ * term.c (encode_terminal_code): Buffer pointer now const.
+ * xfaces.c (may_use_scalable_font_p): Argument now points to const.
+ (x_face_list_fonts, x_update_menu_appearance):
+ (hash_string_case_insensitive): Treat Lisp string contents as const.
+
+2002-07-19 Juanma Barranquero <lektu@terra.es>
+
+ * xdisp.c (syms_of_xdisp): Remove redundant deprecation info.
+
+ * fileio.c (syms_of_fileio): Likewise.
+ (Ffile_name_as_directory): Fix argument name in docstring.
+ (file_name_as_directory): Use literal '/' instead of DIRECTORY_SEP.
+
+2002-07-18 Richard M. Stallman <rms@gnu.org>
+
+ * data.c (Fdefalias): Doc fix.
+
+2002-07-17 Dave Love <fx@gnu.org>
+
+ * intervals.h (text_property_stickiness): Use P_.
+
+ * ccl.c: Remove `emacs' conditionals.
+ (ccl_backtrace_table): Fix size spec.
+ (ccl_driver): Fix type errors.
+
+2002-07-16 Ken Raeburn <raeburn@gnu.org>
+
+ * alloc.c (xstrdup, make_string, make_unibyte_string)
+ (make_multibyte_string, build_string): String pointer args now
+ point to const.
+ * charset.c (find_charset_in_text, c_string_width):
+ (chars_in_text, multibyte_chars_in_text, parse_str_as_multibyte):
+ * fileio.c (report_file_error):
+ * insdel.c (copy_text, count_size_as_multibyte, insert_1):
+ (count_combining_before, count_combining_after, insert_1_both):
+ (insert, insert_and_inherit, insert_string):
+ (insert_before_markers, insert_before_markers_and_inherit):
+ * lread.c (intern, oblookup, hash_string):
+ * minibuf.c (temp_echo_area_glyphs):
+ * search.c (fast_c_string_match_ignore_case):
+ * sysdep.c (emacs_open, set_file_times):
+ * xfaces.c (xstricmp):
+ * xdisp.c (store_frame_title, string_char_and_length):
+ (message_dolog, message2, message2_nolog, set_message): Likewise.
+ (set_message_1): Cast message string argument to const pointer.
+ * editfns.c (general_insert_function): Insertion function now
+ takes pointer to const for input data.
+ * charset.h (find_charset_in_text, c_string_width):
+ (parse_str_as_multibyte): Declarations updated.
+ * dispextern.h (xstricmp): Declaration updated.
+ * lisp.h (chars_in_text, multibyte_chars_in_text, copy_text):
+ (count_size_as_multibyte, count_combining_before):
+ (count_combining_after, insert_1, insert_1_both, message_dolog):
+ (insert, insert_and_inherit, insert_before_markers)
+ (insert_before_markers_and_inherit, set_message, message2):
+ (message2_dolog, build_string, make_string, make_unibyte_string):
+ (make_multibyte_string, intern, oblookup, report_file_error):
+ (fast_c_string_match_ignore_case, temp_echo_area_glyphs):
+ (emacs_open, xstrdup): Declarations updated.
+ * systime.h (set_file_times): Declaration updated.
+
+ * charset.c (find_charset_in_text, lisp_string_width): Use const
+ for pointer to lisp string data.
+ * charset.h (FETCH_STRING_CHAR_ADVANCE):
+ (FETCH_STRING_CHAR_ADVANCE_NO_CHECK):
+ * coding.c (Ffind_coding_systems_region_interval):
+ * fileio.c (Ffile_name_directory, Ffile_name_nondirectory):
+ (Fmake_directory_internal, Fdelete_directory):
+ (Ffile_name_absolute_p, Fwrite_region, double_dollars):
+ * fontset.c (font_family_registry, fs_query_fontset):
+ (list_fontsets):
+ * frame.c (Fframe_parameter):
+ * keyboard.c (cmd_error_internal):
+ * keymap.c (Fdescribe_buffer_bindings):
+ * lread.c (complete_filename_p, openp):
+ * minibuf.c (Fminibuffer_complete_word):
+ * xdisp.c (string_pos_nchars_ahead, init_from_display_pos):
+ (face_before_or_after_it_pos, next_element_from_string):
+ (get_overlay_arrow_glyph_row, display_mode_element):
+ (decode_mode_spec_coding):
+ * xterm.c (same_x_server): Likewise.
+
+ * buffer.c (reset_buffer_local_variables): Delete "#if 0"
+ settings of non-existent fields.
+
+ * editfns.c (Fstring_to_char): Don't use XSTRING/XSETSTRING to
+ copy a lisp value.
+
+ * lread.c (Fintern_soft): Use string macros instead of
+ Lisp_String fields.
+ * keyboard.c (echo_char, parse_modifiers_uncached):
+ (parse_solitary_modifier, Fexecute_extended_command): Likewise.
+ * textprop.c (validate_interval_range, interval_of): Likewise.
+
+ * fontset.c (Fset_fontset_font): Use SDATA instead of XSTRING()->data.
+
+ * charset.h (FETCH_STRING_CHAR_ADVANCE)
+ (FETCH_STRING_CHAR_ADVANCE_NO_CHECK): Use SBYTES instead of
+ XSTRING()->size_byte.
+
+ * lisp.h (SDATA, SREF): Produce rvalue.
+ (SSET): New macro.
+ * alloc.c (make_event_array): Use SSET for storing into a string.
+ * buffer.c (Fother_buffer): Use SREF when retrieving a byte from
+ a string.
+ * casefiddle.c (casify_object): Use SSET.
+ * charset.h (FETCH_STRING_CHAR_ADVANCE)
+ (FETCH_STRING_CHAR_ADVANCE_NO_CHECK): Use SDATA when getting
+ address of string contents.
+ * data.c (Faref): Use SDATA.
+ (Faset): Use SDATA, SSET.
+ * dired.c (directory_files_internal): Use SSET.
+ * fileio.c (Fmake_symbolic_link, Fexpand_file_name): Use SSET.
+ (Fread_file_name): Use SREF, SSET.
+ * fns.c (concat): Use SSET.
+ (concat, Fdelete): Use SDATA.
+ * insdel.c (insert_from_string_1): Use SDATA.
+ * keyboard.c (Fevent_convert_list): Use SREF.
+ * lread.c (Fload): Use SDATA, SSET.
+ * macfns.c (validate_x_resource_name): Use SSET.
+ * process.c (status_message): Use SSET.
+ * search.c (wordify): Use SDATA.
+ (Freplace_match): Use SREF.
+ * w32fns.c (validate_x_resource_name): Use SSET.
+ * xfns.c (validate_x_resource_name): Use SSET.
+ * xterm.c (x_catch_errors, x_clear_errors): Use SSET.
+
+2002-07-16 Richard M. Stallman <rms@gnu.org>
+
+ * s/hpux11.h (USG_SUBTTY_WORKS): Defined.
+
+ * xdisp.c (reconsider_clip_changes):
+ Don't test prevent_redisplay_optimizations_p.
+ (redisplay_internal): Test prevent_redisplay_optimizations_p
+ along with clip_changed in some cases.
+ (try_window_id): Likewise.
+ (redisplay_window): New local var buffer_unchanged_p.
+
+ * keyboard.c (cmd_error) [HAVE_X_WINDOWS]: Maybe call cancel_houglass.
+
+ * process.c (create_process): Test USG_SUBTTY_WORKS.
+ (process_send_signal): Clean up handling of GID.
+ Detect errors in ioctls meant to set GID.
+
+ * window.c (temp_output_buffer_show):
+ Don't set prevent_redisplay_optimizations_p.
+
+2002-07-15 Juanma Barranquero <lektu@terra.es>
+
+ * eval.c (Fdefvaralias): Add docstring argument.
+
+2002-07-15 Ken Raeburn <raeburn@gnu.org>
+
+ * lisp.h (STRING_INTERVALS): Produce rvalue.
+ (STRING_SET_INTERVALS): New macro.
+ * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Use it.
+ * fns.c (Fstring_as_multibyte): Likewise.
+ * intervals.c (balance_possible_root_interval, delete_interval)
+ (create_root_interval, copy_intervals_to_string): Likewise.
+ * textprop.c (set_text_properties): Likewise. Use NULL_INTERVAL
+ instead of 0.
+
+2002-07-14 Ken Raeburn <raeburn@gnu.org>
+
+ * lisp.h (STRING_SET_CHARS): New macro.
+ (SCHARS, SBYTES): Produce rvalues.
+ * dired.c (directory_files_internal): Use STRING_SET_CHARS.
+ * fns.c (concat): Likewise.
+ * lread.c (read_vector): Likewise.
+
+ * lisp.h (SMBP): Delete. All uses changed to STRING_MULTIBYTE.
+ (STRING_SET_UNIBYTE): New macro.
+ (SET_STRING_BYTES): Delete. Callers (all of which supplied a
+ length of -1) changed to use STRING_SET_UNIBYTE.
+ * abbrev.c, alloc.c, buffer.c, bytecode.c, callint.c, callproc.c,
+ casefiddle.c, category.c, ccl.c, charset.c, charset.h, coding.c,
+ composite.c, data.c, dired.c, dispnew.c, disptab.h, doc.c,
+ dosfns.c, editfns.c, emacs.c, eval.c, fileio.c, filelock.c, fn.c,
+ fontset.c, frame.c, indent.c, insdel.c, intervals.c, keyboard.c,
+ keymap.c, lread.c, mac.c, macfns.c, macmenu.c, macterm.c,
+ minibuf.c, msdos.c, print.c, process.c, search.c, sound.c,
+ sunfns.c, syntax.c, syntax.h, sysdep.c, textprop.c, undo.c,
+ w16select.c, w32.c, w32fns.c, w32menu.c, w32proc.c, w32select.c,
+ w32term.c, window.c, xdisp.c, xfaces.c, xfns.c, xmenu.c,
+ xselect.c, xsmfns.c, xterm.c: Most uses of XSTRING combined with
+ STRING_BYTES or indirection changed to SCHARS, SBYTES,
+ STRING_INTERVALS, SREF, SDATA; explicit size_byte references left
+ unchanged for now.
+
+2002-07-13 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (command_loop_1): Invert check on Vmemory_full.
+
+2002-07-12 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fwrite_region): Doc fix.
+
+ * print.c (print_error_message): Don't handle Vsignaling_function here.
+
+ * keyboard.c (cmd_error_internal): Handle Vsignaling_function here.
+ (command_loop_1): Avoid certain actions after memory-full error.
+
+ * eval.c (Fsignal): Don't call cancel_hourglass.
+ For a memory-full error, don't call Vsignal_hook_function
+ and don't set Vsignaling_function.
+
+ * process.c (process_send_signal): Add abort call.
+
+2002-07-11 Markus Rost <rost@math.ohio-state.edu>
+
+ * keymap.c (Fkey_binding): Fix typo.
+
+2002-07-11 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (Vmemory_full): New variable.
+ (Vmemory_signal_data): Rename from memory_signal_data.
+ Uses changed.
+ (syms_of_alloc): Defvar them.
+ (memory_full, buffer_memory_full): Set Vmemory_full.
+
+ * lisp.h (Vmemory_full): Add declaration.
+ (current_column, indented_beyond_p): Change declaration.
+
+ * indent.c (last_known_column): Declare as double, not float.
+ (current_column, current_column_1, string_display_width)
+ (position_indentation): Return `double'.
+ (indented_beyond_p): Arg `column' is `double'. Callers changed.
+
+ * xdisp.c (message_dolog): Do nothing if Vmemory_full is non-nil.
+ (back_to_previous_visible_line_start)
+ (reseat_at_next_visible_line_start, next_element_from_buffer):
+ Use `double', not `float', when calling indented_beyond_p.
+
+ * s/hpux11.h (BROKEN_SA_RESTART): Define.
+
+ * sysdep.c (sys_signal): Test BROKEN_SA_RESTART.
+
+2002-07-11 Juanma Barranquero <lektu@terra.es>
+
+ * alloc.c, buffer.c, bytecode.c, callint.c, callproc.c, coding.c,
+ * composite.c, dired.c, dispnew.c, editfns.c, emacs.c, eval.c,
+ * fileio.c, fns.c, insdel.c, keyboard.c, keymap.c, lread.c, macfns.c,
+ * macmenu.c, macros.c, minibuf.c, print.c, process.c, sound.c,
+ * textprop.c, w32fns.c, w32menu.c, window.c, xfaces.c, xfns.c,
+ * xmenu.c, xselect.c, xterm.c: Use SPECPDL_INDEX wherever makes sense.
+
+2002-07-10 Juanma Barranquero <lektu@terra.es>
+
+ * lisp.h (SPECPDL_INDEX): Rename from BINDING_STACK_SIZE.
+ All callers changed.
+
+2002-07-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ * data.c (Fdefalias): Add an optional `docstring' argument.
+ (set_internal, Fsetq_default): Use XCAR/XCDR.
+
+ * composite.c (HASH_VALUE, HASH_KEY):
+ * ccl.c (HASH_VALUE): Remove (it's in lisp.h now).
+
+2002-07-09 Kenichi Handa <handa@etl.go.jp>
+
+ * callproc.c (Fcall_process): Fix previous change.
+
+2002-07-07 Stefan Monnier <monnier@cs.yale.edu>
+
+ * minibuf.c (Ftry_completion, Fall_completions, Ftest_completion):
+ Add support for hash-tables.
+ (Ftry_completion): Return t even if the string appears multiple times.
+
+ * fns.c (Fnconc): Use XCDR.
+ (Fprovide): Use CONSP and XCDR.
+ (HASH_KEY, HASH_VALUE, HASH_NEXT, HASH_HASH, HASH_INDEX)
+ (HASH_TABLE_SIZE): Delete: moved to lisp.h.
+ (Fmake_hash_table): Accept `:size nil'.
+ (Fmakehash): Delete: moved to subr.el.
+ (syms_of_fns): Don't defsubr makehash.
+
+ * lisp.h (HASH_KEY, HASH_VALUE, HASH_NEXT, HASH_HASH, HASH_INDEX)
+ (HASH_TABLE_SIZE): Move from fns.c.
+
+2002-07-07 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (make_cursor_line_fully_visible): Don't try short scrolls.
+ Instead just return 0 when there is something to be done.
+ (try_scrolling): If make_cursor_line_fully_visible returns 0,
+ retry scrolling as if cursor were off the bottom.
+ (try_cursor_movement): If make_cursor_line_fully_visible returns 0,
+ return CURSOR_MOVEMENT_MUST_SCROLL.
+ (redisplay_window): If make_cursor_line_fully_visible returns 0,
+ go to try_to_scroll.
+
+ * buffer.c (Fbuffer_local_value): Store current value into its binding
+ so we get the up-to-date value for the binding that is loaded.
+
+ * eval.c (Fdefmacro): Doc fix.
+
+2002-07-05 Dave Love <fx@gnu.org>
+
+ * keyboard.c (read_key_sequence): Set initial_idleness_start_time
+ correctly.
+
+ * ccl.c (Vtranslation_hash_table_vector, GET_HASH_TABLE)
+ (HASH_VALUE, CCL_LookupIntConstTbl, CCL_LookupCharConstTbl): New.
+ (ccl_driver): Add cases for CCL_LookupIntConstTbl,
+ CCL_LookupCharConstTbl.
+ (syms_of_ccl): Defvar translation-hash-table-vector.
+
+2002-07-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xdisp.c: Remove unused variable `face'.
+
+2002-07-04 Juanma Barranquero <lektu@terra.es>
+
+ * keyboard.c (post_command_idle_hook): Remove redundant (and inexact)
+ obsolescence information.
+
+2002-07-03 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (x_list_fonts): Fix comment. Cache fonts matching
+ pattern. Search cache first.
+ (init_font_name_table): Also add entry for jisx0201.1976-0 coding
+ for Japanese font.
+ (XLoadQueryFont): Use it.
+
+2002-07-02 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (Fdefine_key): Doc fix.
+
+ * xterm.c (x_term_init): Turn off polling around XtOpenDisplay.
+
+2002-07-02 Juanma Barranquero <lektu@terra.es>
+
+ * keymap.c (syms_of_keymap): Fix typo.
+
+2002-07-01 Andrew Choi <akochoi@shaw.ca>
+
+ * s/darwin.h: Define POSIX_SIGNALS.
+
+ * macterm.c (do_ae_open_documents) [MAC_OSX]: Call FSpMakeFSRef
+ and FSRefMakePath to convert FSSpec returned with Apple Event to
+ Posix pathname.
+ (mac_initialize) [TARGET_API_MAC_CARBON]:
+ Call init_required_apple_events and disable the `Quit' menu item
+ provided automatically by the Carbon Toolbox.
+
+2002-07-01 Dave Love <fx@gnu.org>
+
+ * keyboard.c (kbd_buffer_store_event): Fix interrupt_signal decl
+ for K&R.
+
+ * xterm.c: Fix prototype for K&R.
+
+ * term.c (costs_set): Declare static, non-initialized for pcc.
+
+2002-07-01 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (timer_last_idleness_start_time): New variable.
+ (timer_start_idle): Set that.
+ (read_key_sequence): Use that to reset timer_idleness_start_time
+ to previous value.
+
+ * window.c (Frecenter): With arg, set optional_new_start.
+
+ * xdisp.c (redisplay_internal): Make optional_new_start really work.
+
+ * minibuf.c (Fminibuffer_complete_and_exit): Move to end of
+ buffer for completion.
+
+2002-06-29 Ken Raeburn <raeburn@gnu.org>
+
+ * xdisp.c (store_mode_line_string): Lisp_Object/int mixup.
+
+2002-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * keyboard.c (readable_filtered_events): New function that filters
+ FOCUS_IN_EVENT depending on parameter.
+ (readable_events): Calls readable_filtered_events, not filtering
+ FOCUS_IN_EVENT.
+ (get_filtered_input_pending): New function, filtering parameter passed
+ to readable_filtered_events.
+ (get_input_pending): Calls get_filtered_input_pending, not filtering
+ FOCUS_IN_EVENT.
+ (Finput_pending_p): Calls get_filtered_input_pending, DO filter
+ FOCUS_IN_EVENT.
+
+ * xterm.h (struct x_output): Add focus_state.
+
+ * xterm.c (x_focus_changed): New function.
+ (x_detect_focus_change): New function.
+ (XTread_socket): Call x_detect_focus_change for FocusIn/FocusOut
+ EnterNotify and LeaveNotify to track X focus changes.
+
+2002-06-28 Andreas Schwab <schwab@suse.de>
+
+ * lisp.h: Remove duplicate declaration of code_convert_string_norecord.
+
+2002-06-27 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (mode_line_string_list, mode_line_string_face)
+ (mode_line_string_face_prop): New variables.
+ (store_mode_line_string): New function.
+ (display_mode_element): Use store_mode_line_string to
+ add mode-line string elements to mode_line_string_list
+ when mode_line_string_list is non-nil.
+ (Fformat_mode_line): Now returns propertized string by
+ default. New arg NO-PROPS to ignore properties.
+ (decode_mode_spec): Only add two dashes for %- in propertized
+ mode-line string.
+ (syms_of_xdisp): Init and staticpro mode_line_string_list.
+
+2002-06-27 Stefan Monnier <monnier@cs.yale.edu>
+
+ * minibuf.c (minibuffer_completion_contents): Add return type.
+
+2002-06-27 Juanma Barranquero <lektu@terra.es>
+
+ * charset.c (Fchar_bytes): Remove obsolescence info from docstring.
+
+2002-06-26 Juanma Barranquero <lektu@terra.es>
+
+ * fileio.c (read_file_name_cleanup): Add missing return.
+
+2002-06-26 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Frecenter): Don't set force_start flag.
+
+ * minibuf.c (do_completion, Fminibuffer_complete_word)
+ (Fminibuffer_completion_help): Complete just the text before point.
+ (minibuffer_completion_contents): New function.
+
+ * buffer.c (Fbury_buffer): Use frames_discard_buffer.
+
+ * frame.c (frames_bury_buffer): Function deleted.
+
+2002-06-25 Miles Bader <miles@gnu.org>
+
+ * callint.c (Fcall_interactively): When checking to see if doprnt hit
+ the end of callint_message, allow for a terminating '\0'.
+
+2002-06-24 Juanma Barranquero <lektu@terra.es>
+
+ * w32select.c: Include composite.h.
+
+ * w16select.c: Likewise.
+
+2002-06-24 Kenichi Handa <handa@etl.go.jp>
+
+ * callproc.c (Fcall_process): If code detection is necessary,
+ call detect_coding directly here.
+
+ * coding.c (detect_eol): Preserve coding->cmp_data.
+
+ * w16select.c (Fw16_get_clipboard_data):
+ * w32fns.c (w32_to_x_font):
+ * w32select.c (Fw32_get_clipboard_data):
+ * xselect.c (selection_data_to_lisp_data):
+ * xterm.c (XTread_socket): Disable composition handling.
+
+2002-06-24 Stefan Monnier <monnier@cs.yale.edu>
+
+ * print.c (temp_output_buffer_setup): Kill all local variables.
+
+2002-06-22 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lread.c (Fread): Remove redundant and imprecise declaration.
+
+ * xfns.c (check_x_display_info): Use check_x_frame.
+
+ * .gdbinit (xprintsym): Use the new `xname' field.
+ (xsymbol): Use it.
+
+2002-06-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (file_dialog_callback): New function.
+ (Fx_file_dialog): Allow selecting directories as well as files.
+
+2002-06-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * m/pmax.h (START_FILES): Define START_FILES for NetBSD and
+ OpenBSD. Add support for mipseb-*-netbsd* machines.
+
+2002-06-17 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (mac_scroll_area): Set foreground and backcolor to
+ black and white before scrolling. Restore frame background and
+ foreground color after scrolling.
+ (do_window_update): Call XClearWindow before calling expose_frame.
+ (make_mac_frame): Don't set FRAME_BACKGROUND_PIXEL and
+ FRAME_FOREGROUND_PIXEL of frame.
+
+ * macterm.c (XTread_socket): If Vmac_command_key_is_meta is nil,
+ test Mac command key as <ALT> key.
+
+2002-06-17 Stefan Monnier <monnier@cs.yale.edu>
+
+ * window.c (Fset_window_configuration): Lisp_Object/int mixup.
+
+ * keyboard.c (read_key_sequence): Be more careful with first_unbound.
+ Lookup keys in function-key-map immediately so that key-translation-map
+ can be applied earlier.
+ Remove function_key_possible and key_translation_possible, replaced
+ by checking `keytran_start < t'.
+
+ * .gdbinit (xsymbol): Use the new `xname' field.
+
+2002-06-17 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTread_socket): If Vmac_command_key_is_meta is nil,
+ test Mac command key as <ALT> key.
+
+ * mac.c (do_applescript): Call initialize_applescript if necessary
+ when first called. Dispose of result_desc only when there is no error.
+ (Fdo_applescript): Use %d format specifier instead of %ld.
+
+2002-06-16 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTread_socket): Call FrontNonFloatingWindow instead
+ of FrontWindow for cases keyDown and autoKey.
+
+ * fontset.c (syms_of_fontset) [MAC_OS]: Set ASCII font of
+ Vdefault_fontset to Monaco with mac-roman coding.
+
+ * mac.c, macfns.c, macmenu.c, macterm.c: Undefine and redefine
+ init_process before and after inclusion of Carbon/Carbon.h, resp.
+
+ * macterm.c (x_new_font): Set font for normal_gc, reverse_gc, and
+ cursor_gc.
+ (add_font_name_table_entry): New function.
+ (init_font_name_table): Use add_font_name_table_entry; add italic,
+ bold, and bold-italic entries for truetype fonts.
+
+ * xfaces.c (init_frame_faces) [MAC_OS]: Call realize_basic_faces
+ for Mac too.
+ (try_font_list) [MAC_OS]: If no font matches given registry, try
+ fonts with any registry matching face_family.
+ (realize_x_face) [MAC_OS]: Remove old ad-hoc fix to load font here.
+
+ * s/darwin.h: If autoconf detects the Ncurses library, define
+ LIBS_TERMCAP to -lncurses to use it.
+
+2002-06-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * strftime.c [__hpux]: Include sys/_mbstate_t.h.
+
+2002-06-15 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fset_window_configuration): Explicitly preserve
+ the point value that new_current_buffer had at the start.
+
+2002-06-14 Juanma Barranquero <lektu@terra.es>
+
+ * composite.c (Fcompose_region_internal, Fcompose_string_internal):
+ Fix typos.
+
+2002-06-14 Kim F. Storm <storm@cua.dk>
+
+ * insdel.c (insert_1_both, insert_from_string_1)
+ (insert_from_buffer_1): Recalculate END_UNCHANGED in case the
+ insert happened in the end_unchanged region. Otherwise, the
+ redisplay may be confused and duplicate the last line in the
+ buffer [seen after save-buffer when require-final-newline==t].
+
+2002-06-13 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (init_environment): Remove EMACSLOCKDIR.
+ (stat): Swap _S_IFDIR and _S_IFREG.
+
+2002-06-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c, macterm.c, macmenu.c, msdos.c, sysdep.c
+ * termhooks.h, xmenu.c, xsmfns.c, xterm.h, xterm.c, w32term.c,
+ * w32menu.c, w32inevt.c: Rename enum event_kind as follows:
+ ascii_keystroke to ASCII_KEYSTROKE_EVENT, multibyte_char_keystroke
+ to MULTIBYTE_CHAR_KEYSTROKE_EVENT, non_ascii_keystroke to
+ NON_ASCII_KEYSTROKE_EVENT, timer_event to TIMER_EVENT, mouse_click
+ to MOUSE_CLICK_EVENT, mouse_wheel to MOUSE_WHEEL_EVENT,
+ language_change_event to LANGUAGE_CHANGE_EVENT, scroll_bar_click
+ to SCROLL_BAR_CLICK_EVENT, w32_scroll_bar_click to
+ W32_SCROLL_BAR_CLICK_EVENT, selection_request_event to
+ SELECTION_REQUEST_EVENT, selection_clear_event to
+ SELECTION_CLEAR_EVENT, buffer_switch_event to BUFFER_SWITCH_EVENT,
+ delete_window_event to DELETE_WINDOW_EVENT, iconify_event to
+ ICONIFY_EVENT, deiconify_event to DEICONIFY_EVENT,
+ menu_bar_activate_event to MENU_BAR_ACTIVATE_EVENT, drag_n_drop to
+ DRAG_N_DROP_EVENT, save_session_event to SAVE_SESSION_EVENT and
+ no_event to NO_EVENT.
+
+2002-06-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * macmenu.c: Remove declaration of Qmouse_click and Qevent_kind.
+
+2002-06-12 Stefan Monnier <monnier@cs.yale.edu>
+
+ * intervals.c (textget): Don't forget to `return'.
+ (lookup_char_property): Use XCAR/XCDR.
+
+2002-06-12 Juanma Barranquero <lektu@terra.es>
+
+ * xdisp.c (Fformat_mode_line): Fix typo.
+
+2002-06-12 Kim F. Storm <storm@cua.dk>
+
+ * xdisp.c (Fformat_mode_line): New function.
+ (frame_title_buf, frame_title_buf_end, frame_title_ptr)
+ (store_frame_title_char, store_frame_title): Use unconditionally.
+ (init_xdisp): Defsubr Fformat_mode_line.
+ Initialize frame_title_buf etc. unconditionally.
+
+2002-06-11 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (read_key_sequence):
+ Remove prev_(fkey|keytran}_(map|start|end) since we don't want to pass
+ things through those maps after downcasing events.
+ Enforce that keytran_end <= fkey_start, i.e. that key-translation-map
+ applies after function-key-map.
+ Make sure that keytran can be done in the middle in the sequence.
+ Be careful not to throw away events past the one we downcase.
+
+ * lread.c (read_integer): Remove unused var `tem'.
+ (read1): Fix int/Lisp_Object mixup.
+
+ * xfaces.c (tty_lookup_color): Type bool/Lisp_Object mismatch fixed.
+
+2002-06-11 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (readable_events): Ignore any number of
+ FOCUS_IN_EVENT events and return 0 if nothing else in buffer.
+
+2002-06-09 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (Ftty_supports_face_attributes_p): New function.
+ (parse_rgb_list, tty_lookup_color): New functions.
+ (tty_defined_color): Use `tty_lookup_color' to do all the work.
+ (color_distance, Fcolor_distance): New functions.
+ (TTY_SAME_COLOR_THRESHOLD): New macro.
+ (Qtty_color_standard_values): New variable.
+ (syms_of_xfaces): Initialize new vars & functions.
+
+2002-06-08 Colin Walters <walters@verbum.org>
+
+ * textprop.c (Vchar_property_alias_alist): New variable.
+ (syms_of_textprop) <Vchar_property_alias_alist>: DEFVAR_LISP.
+
+ * intervals.c (lookup_char_property): New function for looking up
+ overlay and text properties, created from textget.
+ (textget): Use it.
+
+ * intervals.h (lookup_char_property): Declare.
+ (Vchar_property_alias_alist): Declare.
+
+ * buffer.c (Foverlay_get): Use lookup_char_property.
+
+2002-06-07 Sam Steingold <sds@gnu.org>
+
+ * xselect.c (lisp_data_to_selection_data): Fix last change:
+ *data_ret is not a Lisp string, while unibyte_string is.
+
+2002-06-07 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xselect.c (lisp_data_to_selection_data): Fix last change:
+ set size_ret.
+
+2002-06-07 Andreas Schwab <schwab@suse.de>
+
+ * m/amdx86-64.h: New file.
+
+2002-06-05 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * fns.c (Fstring_make_unibyte): Doc fix.
+
+ * xselect.c (lisp_data_to_selection_data): If the requested type
+ is STRING, call string_make_unibyte to encode the selected text
+ as a string.
+
+ * window.c (Fset_window_hscroll): Doc fix.
+
+2002-06-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * fileio.c (choose_write_coding_system):
+ Call select-safe-coding-system properly.
+
+2002-06-03 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (message_with_string): Error if STRING is not a string.
+
+ * fns.c (md5): Pass FILE arg to Vselect_safe_coding_system_function.
+
+ * fileio.c (choose_write_coding_system): Pass FILE arg to
+ Vselect_safe_coding_system_function.
+
+2002-06-03 Ken Raeburn <raeburn@gnu.org>
+
+ * buffer.c (fix_overlays_before): Fix list-walking bug in 05-19 change.
+
+2002-06-02 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * bytecode.c (Fbyte_code): Cast `current_column' return value to int.
+ * cmds.c (Fdelete_backward_char, internal_self_insert): Likewise.
+ * keymap.c (describe_command): Likewise.
+ * minibuf.c (read_minibuf): Likewise.
+
+ * xdisp.c (redisplay_internal, redisplay_window, decode_mode_spec):
+ Cast `current_column' return value to int.
+ (back_to_previous_visible_line_start)
+ (reseat_at_next_visible_line_start, next_element_from_buffer):
+ Cast `indented_beyond_p' 3rd arg to float.
+
+ * indent.c (last_known_column): Now a float.
+ (current_column_1, position_indentation, current_column)
+ (string_display_width): Return float.
+ (Fcurrent_column): Cast `current_column' return value to int.
+ (Fcurrent_indentation): Cast `position_indentation' retval to int.
+ (indented_beyond_p): Third arg now a float.
+ (compute_motion, vmotion): Cast `indented_beyond_p' 3rd arg to float.
+
+ * lisp.h (current_column): Now returns float.
+ (indented_beyond_p): 3rd arg now a float.
+
+2002-05-31 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xfns.c (x_encode_text): Return stringp non-NULL if coding_system
+ is Qcompound_text_with_extensions.
+
+ * xselect.c (lisp_data_to_selection_data): Always set selection
+ type as string if x_encode_text returns streingp non-NULL.
+
+ * s/netbsd.h: Include /usr/pkg in the run time shared library path.
+
+2002-05-30 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (Fset_window_configuration): Correct the handling
+ of point in current buffer, to work with multiple windows.
+
+2002-05-29 Colin Walters <walters@verbum.org>
+
+ * lread.c (Fread_from_string): Don't depend on order of evaluation
+ for C function parameters.
+
+2002-05-28 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (x_display_and_set_cursor): Change the cursor in the same
+ way for blinked-off state and for a nonselected window.
+
+ * window.c (window_scroll_pixel_based): Don't call Fbolp;
+ instead, see if the new start pos is at beginning of line.
+
+ * fileio.c (Fwrite_region): If START is a string, don't
+ make any annotations.
+
+ * eval.c (syms_of_eval): Doc fix.
+
+2002-05-28 Colin Walters <walters@debian.org>
+
+ * emacs.c (USAGE1): Add --no-splash.
+ (standard_args): Ditto.
+
+2002-05-28 Colin Walters <walters@gnu.org>
+
+ * lread.c (readchar_count): New variable.
+ (readchar): Increment it.
+ (unreadchar): Decrement it.
+ (read_multibyte): Decrement it.
+ (Vread_with_symbol_positions): New variable.
+ (Vread_symbol_positions_list): New variable.
+ (read_internal_start): New function, created from Fread and
+ Fread_from_string. Handle Vread_symbol_positions_list and
+ Vread_with_symbol_positions.
+ (readevalloop, Fread, Fread_from_string): Use it.
+ (read1): Use readchar_count to add symbol positions to
+ Vread_symbol_positions_list if Vread_with_symbol_positions is non-nil.
+ (syms_of_lread): DEFVAR_LISP and initialize them.
+
+ * lread.c (read0, read1, read_list, read_vector, read_multibyte)
+ (substitute_object_recurse, substitute_object_in_subtree)
+ (substitute_in_interval): Prototype.
+ (read_multibyte): Return c if it's less than zero.
+
+2002-05-28 Kim F. Storm <storm@cua.dk>
+
+ * fileio.c (Fread_file_name_internal): Added brute-force
+ speed up for using predicate file-directory-p.
+
+2002-05-28 Kim F. Storm <storm@cua.dk>
+
+ * fileio.c (Vread_file_name_function, Vread_file_name_predicate):
+ New variables.
+ (syms_of_fileio): DEFVAR_LISP them.
+ (read_file_name_cleanup): New unwind function.
+ (Fread_file_name_internal): Only return completions satifying
+ Vread_file_name_predicate. Temporarily unwind protect and rebind
+ default-directory while checking completions against the predicate.
+ (Fread_file_name): Added PREDICATE argument. Specbind it to
+ Vread_file_name_predicate during completion.
+ Call Vread_file_name_function to read the file name if non-nil.
+
+ * lisp.h (Fread_file_name): Now has 6 args.
+
+ * callint.c (Fcall_interactively) <"D">: Supply Qfile_directory_p
+ predicate for Fread_file_name when reading directory name.
+ Supply Qnil for predicate in other calls to Fread_file_name.
+
+2002-05-26 Miles Bader <miles@gnu.org>
+
+ * term.c (tty_capable_p): New function.
+ * dispextern.h (tty_capable_p): New function declaration.
+ (TTY_CAP_INVERSE, TTY_CAP_UNDERLINE, TTY_CAP_BOLD, TTY_CAP_DIM)
+ (TTY_CAP_BLINK, TTY_CAP_ALT_CHARSET): New macros.
+
+2002-05-23 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fileio.c (read_non_regular, Finsert_file_contents): Use BEG_BYTE.
+ (Finsert_file_contents, build_annotations): Use XCAR, XCDR.
+ (Vwrite_region_annotate_functions): Docstring fix.
+
+2002-05-23 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (x_write_glyphs): Clear phys_cursor_on_p if current
+ phys_cursor's hpos is overwritten. This is still not completely
+ correct, as it doesn't really make sense to use hpos at all to
+ get the cursor glyph (as that is relative to the width of the
+ characters on the line, which may have changed during the update).
+
+2002-05-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (enumfont_t): Remove tail, make pattern a normal
+ Lisp_Object.
+ (enum_font_cb2, enum_font_maybe_add_to_list, w32_list_fonts):
+ Use modified enumfont_t struct.
+
+ * w32term.h (text_cursor_kinds): New enumeration member HBAR_CURSOR.
+
+ * w32term.c (x_draw_bar_cursor): New argument KIND; callers changed.
+ Handle the `hbar' cursor type.
+ (x_display_and_set_cursor): Handle the HBAR_CURSOR case.
+
+ * w32fns.c (Qhbar): New variable.
+ (x_specified_cursor_type): Use it.
+
+2002-05-21 Ken Raeburn <raeburn@gnu.org>
+
+ * w32fns.c (enum_font_maybe_add_to_list): Use XCDR_AS_LVALUE for
+ now, when the address is needed.
+
+2002-05-21 Colin Walters <walters@gnu.org>
+
+ * Makefile.in (shortlisp): Add font-core.el.
+
+2002-05-20 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer) <cursor-type>: Doc fix.
+
+ * keyboard.c (read_char_minibuf_menu_prompt): Don't list
+ equivalent key bindings here.
+
+2002-05-20 Ken Raeburn <raeburn@gnu.org>
+
+ Change symbol structure to contain a lisp object for the symbol
+ name:
+ * lisp.h (struct Lisp_Symbol): Replace field "name" with a lisp
+ object field named "xname".
+ (SYMBOL_NAME): New macro.
+ * abbrev.c (write_abbrev): Use SYMBOL_NAME instead of XSYMBOL and
+ name field.
+ * alloc.c (Fmake_symbol): Set symbol xname field instead of name.
+ (mark_object, gc_sweep): Use symbol xname field and XSTRING
+ instead of name field.
+ * buffer.c (buffer_slot_type_mismatch): Use XSTRING and
+ SYMBOL_NAME instead of XSYMBOL and name field.
+ * callint.c (Fcall_interactively): Use XSTRING and SYMBOL_NAME
+ instead of XSYMBOL and name field.
+ * charset.c (Fdefine_charset, Fdeclare_equiv_charset): Use XSTRING
+ and SYMBOL_NAME instead of XSYMBOL and name field.
+ * coding.c (Fread_coding_system, code_convert_region1)
+ (code_convert_string1, code_convert_string_norecord)
+ (Ffind_operation_coding_system): Use SYMBOL_NAME instead of
+ XSYMBOL and name field.
+ * data.c (Fkeywordp, Fsymbol_name, store_symval_forwarding)
+ (Fmake_variable_buffer_local, Fmake_local_variable)
+ (Fmake_variable_frame_local): Use SYMBOL_NAME and XSTRING instead
+ of XSYMBOL and name field.
+ * editfns.c (Fformat): Use SYMBOL_NAME and XSTRING instead of
+ XSYMBOL and name field.
+ * emacs.c (shut_down_emacs) [#if 0]: Use SYMBOL_NAME and XSTRING
+ instead of XSYMBOL and name field.
+ * eval.c (do_autoload): Use SYMBOL_NAME and XSTRING instead of
+ XSYMBOL and name field.
+ * fns.c (Fstring_equal, Fstring_lessp, Frequire, sxhash):
+ Use SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
+ * fontset.c (Fset_fontset_font): Use SYMBOL_NAME and XSTRING
+ instead of XSYMBOL and name field.
+ * keyboard.c (echo_char, record_char, parse_modifiers_uncached)
+ (parse_modifiers, apply_modifiers, Fevent_convert_list)
+ (parse_solitary_modifier, Fexecute_extended_command):
+ Use SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
+ * keymap.c (silly_event_symbol_error, Fsingle_key_description)
+ (Fdescribe_buffer_bindings): Use SYMBOL_NAME and XSTRING instead
+ of XSYMBOL and name field.
+ (describe_command, describe_translation): Use SYMBOL_NAME and
+ assignment instead of XSYMBOL and name field and XSETSTRING.
+ * lread.c (Fintern_soft, oblookup): Use SYMBOL_NAME and XSTRING
+ instead of XSYMBOL and name field.
+ (Funintern): Use SYMBOL_NAME and assignment instead of XSYMBOL and
+ name field and XSETSTRING.
+ * macfns.c (parse_image_spec): Use SYMBOL_NAME and XSTRING instead
+ of XSYMBOL and name field.
+ * minibuf.c (Fread_command, Fread_variable): Use SYMBOL_NAME and
+ assignment instead of XSYMBOL and name field and XSETSTRING.
+ * print.c (print_error_message, print_object): Use SYMBOL_NAME and
+ XSTRING instead of XSYMBOL and name field.
+ * process.c (set_socket_options, Fsignal_process): Use SYMBOL_NAME
+ and XSTRING instead of XSYMBOL and name field.
+ * w32fns.c (parse_image_spec, w32_parse_hot_key): Use SYMBOL_NAME
+ and XSTRING instead of XSYMBOL and name field.
+ * xfaces.c (merge_face_vector_with_property): Use SYMBOL_NAME and
+ XSTRING instead of XSYMBOL and name field.
+ * xfns.c (parse_image_spec): Use SYMBOL_NAME and XSTRING instead
+ of XSYMBOL and name field.
+ * xselect.c (symbol_to_x_atom, x_get_foreign_selection):
+ Use SYMBOL_NAME and XSTRING instead of XSYMBOL and name field.
+
+2002-05-19 Ken Raeburn <raeburn@gnu.org>
+
+ * lisp.h (LISP_MAKE_RVALUE): Delete disabled version, making XCAR
+ and XCDR real rvalues in most configurations.
+
+ * buffer.c (fix_overlays_in_range, fix_overlays_before):
+ Don't take the address of the cdr part of a cons cell; instead, track
+ the parent cell and call XSETCDR, or set the variable for the head
+ of the list if we haven't started down the list yet.
+
+2002-05-19 Richard M. Stallman <rms@gnu.org>
+
+ * doc.c (reread_doc_file): Don't ask for confirmation.
+
+2002-05-18 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_create_pixmap_from_bitmap_data): New function.
+ (xbm_load_image): Use it.
+ (xbm_load): Ditto.
+ (xbm_read_bitmap_data): Reverted to xfns.c version.
+ From David Ponce <david@dponce.com>.
+
+2002-05-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (sig_suspender, sigprocmask): Don't define for DJGPP
+ 2.02 and later.
+
+2002-05-16 Juanma Barranquero <lektu@terra.es>
+
+ * keyboard.c (Fthis_command_keys, Fthis_command_keys_vector): Fix typo.
+
+2002-05-15 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (read_char_x_menu_prompt): Use an equivalent but more
+ meaningful test.
+ (read_char_minibuf_menu_prompt): Fix typo.
+
+2002-05-15 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * eval.c (Fcommandp): Doc fix.
+
+2002-05-13 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keymap.c (keymap_parent): New fun, extracted from Fkeymap_parent.
+ (Fkeymap_parent, keymap_memberp, fix_submap_inheritance): Use it.
+ (Fset_keymap_parent): Gcpro a bit more.
+ (access_keymap): Gcpro around meta_map call and around the main loop.
+ (get_keyelt): Gcpro when following indirect references.
+ (copy_keymap_item): New fun, extracted from Fcopy_keymap.
+ (copy_keymap_1, Fcopy_keymap): Use it. Don't copy the parent map.
+ (Fdefine_key, Flookup_key): Gcpro before calling get_keymap.
+ Remove useless ad-hoc remap code.
+
+2002-05-13 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (search_buffer): Give up boyer moore search if inverse
+ translation change charset_base.
+
+2002-05-12 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * coding.c (decode_coding) <coding_type_ccl>: If a lone CR
+ characters is carried over from the previous block of text, adjust
+ coding->produced to account for the extra character.
+
+2002-05-11 Andreas Schwab <schwab@suse.de>
+
+ * coding.c (intersection): Keep the elements of the returned list
+ in the same order as in the first list.
+
+2002-05-11 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (current_minor_maps): Fix resizing of cmm_maps;
+ only update cmm_size if realloc actually succeeds.
+ Testing with initial size of 2 elements revealed that using
+ realloc on GNU/Linux would cause a random trap in xmalloc
+ later on, so I rewrote the code to use malloc/bcopy/free instead
+ of realloc.
+
+2002-05-10 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (enum_font_cb2): Avoid DBCS raster fonts.
+
+2002-05-10 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * coding.c (encode_coding_sjis_big5): Enclose bitwise AND in
+ parens, to ensure correct evaluation order.
+
+2002-05-10 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (Vemulation_mode_map_alists): New variable.
+ (syms_of_keymap): DEFVAR_LISP it.
+ (current_minor_maps): Process keymap alists in that list before
+ minor-mode-overriding-map-alist and minor-mode-map-alist.
+
+2002-05-09 Richard M. Stallman <rms@gnu.org>
+
+ * search.c (Freplace_match): Doc fix.
+
+2002-05-09 Kim F. Storm <storm@cua.dk>
+
+ * macterm.c (x_draw_image_foreground, x_draw_image_foreground_1):
+ Enlarge cursor rectangle drawn around image with non-zero relief.
+
+ * w32term.c (x_draw_image_foreground, w32_draw_image_foreground_1):
+ Enlarge cursor rectangle drawn around image with non-zero relief.
+
+ * xterm.c (x_draw_image_foreground, x_draw_image_foreground_1):
+ Enlarge cursor rectangle drawn around image with non-zero relief.
+
+2002-05-07 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xselect.c (lisp_data_to_selection_data): Don't set selection
+ type if comes from the Lisp object's car. If the selection
+ contains a pure ASCII text, always return QSTRING as its type.
+
+2002-05-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * mac.c (mac-cut-function): Doc fix.
+
+2002-05-05 Richard M. Stallman <rms@gnu.org>
+
+ * s/gnu.h [DOUG_LEA_MALLOC] (REL_ALLOC): Undefine it.
+
+2002-05-04 Jason Rumney <jasonr@gnu.org>
+
+ * keyboard.c (make_lispy_event) <mouse-wheel>: Set count to 1
+ for event-click-count.
+
+ * process.c (init_process): Only add server subfeature if we can
+ use non-blocking I/O.
+
+2002-05-04 Andrew Choi <akochoi@shaw.ca>
+
+ * macterm.c (XTread_socket): Call WaitNextEvent once instead of
+ repeatedly.
+
+2002-05-03 Jason Rumney <jasonr@gnu.org>
+
+ * process.c (Fmake_network_process): Only support server sockets
+ when we can make them non-blocking.
+
+ * s/ms-w32.h (HAVE_SELECT): Define.
+
+ * w32.h (FILE_NDELAY): New flag.
+
+ * w32.c (sys_getpeername, fcntl): New functions.
+ (_sys_read_ahead): Temporarily block on non-blocking sockets.
+
+ * w32proc.c: Include sys/file.h.
+
+2002-05-03 Colin Walters <walters@verbum.org>
+
+ * callproc.c (Vgame_score_directory): Renamed to
+ Vshared_game_score_directory.
+
+2002-04-30 Richard M. Stallman <rms@gnu.org>
+
+ * s/gnu.h [emacs]: Include stdio.h.
+ (GNU_LIBRARY_PENDING_OUTPUT_COUNT): New definition, conditional.
+
+ * eval.c (do_autoload): Error if called while preparing to dump.
+
+ * fns.c (Frequire): Error if need to load while preparing to dump.
+
+2002-04-28 Colin Walters <walters@verbum.org>
+
+ * callproc.c (Vgame_score_directory) [!HAVE_SHARED_GAME_DIR]:
+ Default to "~/.emacs.d/games".
+
+2002-04-29 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lread.c (openp): Change arg exec_only to predicate.
+ (build_load_history): Use XCAR/XCDR.
+ (Flocate_file_internal): New fun.
+ (syms_of_lread): Defsubr it.
+ (Fload): Update call to openp.
+
+ * lisp.h (openp): Update prototype.
+
+ * xfns.c (x_create_bitmap_from_file, x_find_image_file):
+ * w32proc.c (sys_spawnve):
+ * w32fns.c (x_create_bitmap_from_file, x_find_image_file):
+ * w32.c (check_windows_init_file):
+ * sound.c (Fplay_sound_internal):
+ * process.c (Fstart_process):
+ * macfns.c (x_create_bitmap_from_file, x_find_image_file):
+ * mac.c (run_mac_command):
+ * emacs.c (init_cmdargs):
+ * callproc.c (Fcall_process): Update call to openp.
+
+ * textprop.c (remove_properties): Don't use XCAR without CONSP.
+
+ * xterm.c (XTread_socket): Disable the Xutf8LookupString code.
+
+2002-04-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * dispextern.h (DEFAULT_TOOL_BAR_BUTTON_MARGIN)
+ (DEFAULT_TOOL_BAR_BUTTON_RELIEF): Change default values.
+
+2002-04-28 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (Fall_completions, Ftry_completion): New arg to Fcommandp.
+
+ * eval.c (Fcommandp): New arg for_call_interactively.
+ * lisp.h (Fcommandp): Declare new arg.
+
+2002-04-28 Jason Rumney <jasonr@gnu.org>
+
+ * w32proc.c (syms_of_w32proc): Get true file attributes by default.
+
+ * w32.c (stat, fstat): Use file index information to generate
+ inodes for directories where available.
+
+2002-04-26 Andrew Choi <akochoi@shaw.ca>
+
+ * Makefile.in (C_SWITCH_SYSTEM_TEMACS): Add.
+ [HAVE_CARBON]: Include Mac object files.
+
+ * alloc.c, callproc.c, dispextern.h, dispnew.c, emacs.c,
+ fontset.c, frame.c, frame.h, keyboard.c, sysdep.c, term.c,
+ termcap.c, window.c, xdisp.c, xfaces.c: Use macros MAC_OS8,
+ MAC_OSX, and MAC_OS instead of macintosh.
+
+ * editfns.c [MAC_OS8]: Include stdio.h.
+
+ * emacs.c [MAC_OS8]: Call mac_initialize instead of x_term_init.
+
+ * fontset.c [MAC_OS]: Set Vdefault_fontset to ETL Fixed instead of
+ Apple Monaco.
+
+ * process.c (QCfamily, QCfilte): Declare extern.
+ (wait_reading_process_input) [MAC_OSX]: Clear bit for stdin before
+ calling select.
+
+ * termcap.c [MAC_OSX]: Don't define tgetnum, PC, tputs, and tgetent.
+
+ * tparam.c [MAC_OSX]: Don't define BC and UP.
+
+ * config.in [HAVE_CARBON]: Add.
+
+ * mac.c, macgui.h, macfns.c, macmenu.c, macterm.c, macterm.h:
+ Move here from mac/src and mac/inc.
+
+ * s/darwin.h, m/powermac.h, unexmacosx.c: New files.
+
+2002-04-26 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_phys_cursor_glyph): Undo last change.
+ Compute phys_cursor_width from the x position returned
+ by x_draw_glyhs, which is cheaper.
+ (x_display_and_set_cursor): Compute the buffer-local value
+ of `cursor-in-non-selected-windows' only when needed.
+
+2002-04-25 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_phys_cursor_glyph): Take into account that a box
+ cursor on a stretch glyph has a width that depends on
+ x_stretch_cursor_p.
+
+2002-04-25 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * abbrev.c (abbrev-start-location): Doc fix.
+
+ * indent.c (Fvertical_motion): Fix last change.
+
+2002-04-25 Gerd Moellmann <gerd@gnu.org>
+
+ * indent.c (Fvertical_motion): Move to the start of the line
+ containing PT before moving up or down.
+
+2002-04-24 Gerd Moellmann <gerd@gnu.org>
+
+ * dispnew.c (update_text_area): Set phys_cursor_on_p to 0 in the
+ case of writing a whole row, more or less analogous to the case of
+ writing only parts of a row.
+
+ * xterm.c (x_display_and_set_cursor): Set phys_cursor_width to
+ 0 for NO_CURSOR.
+
+ * xterm.c (notice_overwritten_cursor): Fix an off by 1 error.
+
+2002-04-23 Colin Walters <walters@verbum.org>
+
+ * buffer.c (syms_of_buffer): Doc fix.
+
+2002-04-23 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (notice_overwritten_cursor): Handle the special case
+ of the cursor being in the first blank non-text line at the
+ end of a window.
+
+ * xterm.c (x_draw_hollow_cursor, x_draw_bar_cursor)
+ (x_draw_phys_cursor_glyph): Set phys_cursor_width here.
+ (x_display_and_set_cursor): Don't set phys_cursor_width here, for
+ bar cursors only, to make phys_cursor_width contain what its name
+ suggests.
+ (notice_overwritten_cursor): Consider the cursor image erased if
+ the output area intersects the cursor image in y-direction.
+
+2002-04-23 Simon Marshall <simon@gnu.org>
+
+ * xfns.c (x_set_mouse_color): Change default for cross_cursor
+ to XC_hand2.
+
+2002-04-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xdisp.c: Remove unused global variable `minibuf_prompt_pixel_width'.
+
+2002-04-22 Kim F. Storm <storm@cua.dk>
+
+ * textprop.c (remove_properties): Fixed trap for malformed plist.
+
+2002-04-22 Richard M. Stallman <rms@gnu.org>
+
+ * cmds.c (Fend_of_line): Handle intangible text in mid line.
+
+ * window.c (make_window): Initialize height_fixed_p,
+ last_cursor_off_p, and p->cursor_off_p slots.
+
+2002-04-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * fns.c (use-dialog-box): Doc fix.
+
+2002-04-19 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xterm.c (note_mode_line_or_margin_highlight): Remove unused
+ variables `row', `i' and `area'.
+ (XTread_socket) <KeyPress>: Pass KeyPress events when in menu to
+ toolkit library.
+
+2002-04-19 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xfaces.c (clear_font_table): Don't free the default font of
+ a frame even if it's on another display.
+ (Finternal_set_lisp_face_attribute): Don't use XFRAME on something
+ that could be Qt.
+
+2002-04-19 Juanma Barranquero <lektu@terra.es>
+
+ * indent.c (Fmove_to_column): Remove unused local variable
+ `next_boundary_byte'.
+ (current_column_1): Likewise.
+
+2002-04-19 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (Qhbar): New variable.
+ (syms_of_msdos): Intern and staticpro it.
+ (IT_set_cursor_type, IT_set_frame_parameters): Handle the `hbar'
+ cursor type.
+
+2002-04-19 Dave Lambert <dlambert@acm.org>
+
+ Theses change implement an underscore-like (`hbar') cursor.
+
+ * xterm.h (text_cursor_kinds): New enumeration member HBAR_CURSOR.
+
+ * xterm.c (x_draw_bar_cursor): New argument KIND; callers changed.
+ Handle the `hbar' cursor type.
+ (x_display_and_set_cursor): Handle the HBAR_CURSOR case.
+
+ * xfns.c (Qhbar): New variable.
+ (syms_of_xfns): Intern and staticpro it.
+ (x_specified_cursor_type): Handle `hbar' cursor.
+
+ * s/sol2-5.h (bcopy, bzero, bcmp): Define only if HAVE_BCOPY is
+ not defined.
+
+2002-04-18 Richard M. Stallman <rms@gnu.org>
+
+ * textprop.c (remove_properties): New arg LIST allows scanning
+ either a list or a plist.
+ (interval_has_some_properties_list): New function, like
+ interval_has_some_properties using list instead of plist.
+ All callers changed.
+ (Fremove_list_of_text_properties): New function.
+ (syms_of_textprop): Defsubr it.
+
+2002-04-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * s/sol2.h (HAVE_LIBKSTAT): Define only if not already defined.
+
+2002-04-17 Juanma Barranquero <lektu@terra.es>
+
+ * indent.c (Fmove_to_column): Remove unused local variable `end_byte'.
+
+2002-04-17 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * window.c (coordinates_in_window): Don't report on margin area
+ if its width is zero.
+
+2002-04-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fx_file_dialog): Decode file name before using.
+
+ * w32term.c (construct_drag_n_drop): Likewise.
+
+2002-04-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * puresize.h (BASE_PURESIZE): Increase to 830000, since we now
+ store load-history in pure space.
+
+ * s/msdos.h (SYSTEM_PURESIZE_EXTRA): Reduce to 50000.
+
+2002-04-16 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xterm.c (Qlatin_1, Qutf_8): New vars.
+ (syms_of_xterm): Initialize them.
+ (XTread_socket): Eliminate incorrect optimization that tried to avoid
+ decoding the output of X*LookupString.
+ Always use latin-1 to decode the output of XLookupString.
+ Try Xutf8LookupString if XmbLookupString failed.
+
+ * region-cache.c (new_region_cache): Use BEG.
+
+2002-04-16 Gerd Moellmann <gerd@gnu.org>
+
+ * buffer.c (MMAP_ALLOCATED_P): New macro to be set from system
+ configuration files.
+ (mmap_enlarge): Enlarge mapped regions only if MMAP_ALLOCATED_P
+ returns 0.
+
+2002-04-15 Andreas Schwab <schwab@suse.de>
+
+ * config.in: Regenerated using autoheader.
+
+ * m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/alpha.h,
+ m/altos.h, m/amdahl.h, m/apollo.h, m/arm.h, m/att3b.h, m/aviion.h,
+ m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h,
+ m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/gec63.h,
+ m/gould.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ia64.h,
+ m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h,
+ m/ibms390.h, m/intel386.h, m/iris4d.h, m/irist.h, m/isi-ov.h,
+ m/m68k.h, m/macppc.h, m/masscomp.h, m/mg1.h, m/mips-siemens.h,
+ m/mips.h, m/news-r6.h, m/news.h, m/next.h, m/nh3000.h, m/nh4000.h
+ m/ns32000.h, m/orion.h, m/pfa50.h, m/plexus.h, m/pmax.h,
+ m/powerpcle.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h,
+ m/sparc.h, m/sr2k.h, m/symmetry.h, m/tad68k.h, m/tahoe.h,
+ m/targon31.h, m/tek4300.h, m/tekxd88.h, m/template.h, m/tower32.h,
+ m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/windowsnt.h,
+ m/xps100.h, s/aix3-2.h, s/aix4-2.h, s/irix4-0.h, s/irix5-0.h,
+ s/sco5.h, s/unixware.h: Don't set HAVE_ALLOCA, C_ALLOCA and
+ STACK_DIRECTION, now set by autoconf.
+
+2002-04-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * dispnew.c (marginal_area_string): Sort arguments.
+
+ * dispextern.h (marginal_area_string): Add prototype.
+
+2002-04-13 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Finsert_file_contents):
+ Don't call temp_output_buffer_setup--do just part, by hand.
+
+ * coding.c (run_pre_post_conversion_on_str):
+ Don't call temp_output_buffer_setup--do just part, by hand.
+
+ * keyboard.c (command_loop_1): Don't call start_hourglass
+ or cancel_hourglass when executing a macro.
+
+ * marker.c (count_markers): New function.
+
+ * xdisp.c (display_mode_element): Don't let mode_line_proptrans_alist
+ grow without limit. Move recently used elements to the front.
+
+2002-04-13 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * unexelf.c (unexec) [__sgi]: Undo the change from 2002-01-20.
+
+2002-04-12 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (sync_frame_with_window_matrix_rows): Don't give frame
+ rows marginal areas.
+ (Fdump_frame_glyph_matrix) [GLYPH_DEBUG]: New function.
+ (syms_of_xdisp) [GLYPH_DEBUG]: Defsubr it.
+
+ * dispnew.c (marginal_area_string): Check that glyph row is enabled.
+
+2002-04-12 Dave Love <fx@gnu.org>
+
+ * dispnew.c (marginal_area_string): New.
+
+ * window.c (window_part): Add ON_LEFT_MARGIN, ON_RIGHT_MARGIN.
+ (Qleft_margin, Qright_margin): Declare.
+ (coordinates_in_window, (Fcoordinates_in_window_p): Deal with margins.
+
+ * xterm.c (note_mode_line_or_margin_highlight): Renamed from
+ note_mode_line_highlight and extended.
+
+ * keyboard.c (Qleft_margin, Qright_margin): Declare.
+ (make_lispy_event): Deal with mouse events in margins.
+
+2002-04-12 Stefan Monnier <monnier@cs.yale.edu>
+
+ * msdos.c (dos_rawgetc): Use a single event for HELP_EVENT.
+
+ * keyboard.c (command_loop_1): Turn off transient-mark-mode rather
+ than deactivating the mark if tmm is set to `lambda'.
+ (gen_help_event, kbd_buffer_store_help_event, kbd_buffer_get_event):
+ Use a single event for HELP_EVENT.
+ (Fexecute_extended_command): Save last_point_position.
+
+2002-04-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * lisp.h (Fpropertize): Add prototype.
+
+ * fns.c (Fy_or_n_p): Use `minibuffer-prompt' face for prompt.
+
+2002-04-10 Colin Walters <walters@verbum.org>
+
+ * config.in: Add HAVE_SHARED_GAME_DIR.
+
+ * callproc.c (Vgame_score_directory): New variable.
+ (syms_of_callproc) <Vgame_score_directory>: DEFVAR_LISP.
+
+2002-04-10 Richard M. Stallman <rms@gnu.org>
+
+ * puresize.h (BASE_PURESIZE): Reduce again to avoid big excess.
+
+2002-04-09 Stefan Monnier <monnier@cs.yale.edu>
+
+ * minibuf.c (read_minibuf): Use empty_string.
+ (Ftry_completion): Allow lambda forms and lists of strings for `alist'.
+ Short-circuit the search as soon as it "failed".
+ (Fall_completions): Allow lambda forms and lists of strings for alist.
+ (Fcompleting_read): Set Qminibuffer_completion_confirm to nil
+ when require_match is nil.
+ (Ftest_completion): Rename from `test_completion' and export to elisp.
+ Call the predicate also when alist is a list.
+ Obey Vcompletion_regexp_list.
+ (do_completion, Fminibuffer_complete_and_exit): Use it.
+ (Fassoc_string): Rename from `assoc_for_completion'.
+ Allow list of strings as well and export to elisp.
+
+2002-04-08 Stefan Monnier <monnier@cs.yale.edu>
+
+ * puresize.h (BASE_PURESIZE): Increase to 900KB.
+
+2002-04-08 Juanma Barranquero <lektu@terra.es>
+
+ * w32.c (sys_accept): Don't hide variable `s'.
+
+2002-04-05 Gerd Moellmann <gerd@gnu.org>
+
+ * callint.c (Fcall_interactively): Use INTEGERP instead of
+ NUMBERP for checking Vhistory_length.
+
+2002-04-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * sound.c (Fplay_sound_internal): Renamed from Fplay_sound.
+ Doc fix to reflect it.
+
+2002-04-04 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (display_mode_element): New arg RISKY.
+ Disregard text props found or specified within a variable
+ that isn't marked risky-local-variable.
+ (Qrisky_local_variable): New variable.
+ (syms_of_xdisp): Init and staticpro it.
+
+2002-04-04 Stefan Monnier <monnier@cs.yale.edu>
+
+ * undo.c (record_point): New fun.
+ (record_delete, record_insert): Use it.
+
+2002-04-03 Juanma Barranquero <lektu@terra.es>
+
+ * doc.c (Fdocumentation): Add missing parentheses.
+ (Fdocumentation_property): Likewise.
+
+2002-04-03 Stefan Monnier <monnier@cs.yale.edu>
+
+ * doc.c (Fdocumentation, Fdocumentation_property): When the doc
+ data is 0, just return nil.
+
+2002-04-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (syms_of_msdos): Fix last change with
+ mouse_autoselect_window.
+
+2002-04-03 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * w32term.c, xterm.c, msdos.c: Rename autoselect_window_p to
+ mouse_autoselect_window.
+
+2002-04-02 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (make_lispy_event): Handle unknown keysyms together
+ with system-specific keysyms. Use it also for unknown function keys.
+
+ * doc.c (reread_doc_file): Return whether reload was attempted.
+ (Fdocumentation, Fdocumentation_property): Don't try to reload
+ if the doc is 0 and only ask once.
+
+ * Makefile.in (lisp, shortlisp): Add ucs-tables.elc.
+
+2002-04-02 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * keyboard.c (read_char): If the event was Qselect_window,
+ restore timer_idleness_start_time to its previous value.
+
+ * msdos.c (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
+
+2002-04-01 Stefan Monnier <monnier@cs.yale.edu>
+
+ * region-cache.c (new_region_cache): Use BEG.
+
+ * marker.c (buf_charpos_to_bytepos, buf_bytepos_to_charpos):
+ Use BEG and BEG_BYTE.
+
+ * doc.c (get_doc_string): Return nil if the location is wrong.
+ (reread_doc_file): New fun.
+ (Fdocumentation, Fdocumentation_property):
+ Call it if get_doc_string fails.
+ (Fsnarf_documentation): Make it work for a dumped Emacs.
+
+ * charset.h (DEC_POS, BUF_DEC_POS): Use BEG_BYTE.
+ Bound the search with MAX_MULTIBYTE_LENGTH to avoid pathological case.
+
+ * charset.c (Fstring): Allow 0 arguments.
+
+ * xterm.c (XTread_socket): Fix int/Lisp_Object confusion.
+
+ * process.c (DATAGRAM_CONN_P, list_processes_1)
+ (Fprocess_datagram_address, Fset_process_datagram_address)
+ (Fset_network_process_options, server_accept_connection):
+ Fix some int/Lisp_Object confusions (thank you union types).
+
+2002-04-01 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * msdos.c: Rename x_autoselect_window_p to autoselect_window_p.
+
+ * w32term.c: Likewise.
+ (note_mouse_movement): Put code for x_autoselect_window_p in #if 0.
+
+ * keyboard.c (Qselect_window): New symbol.
+ (head_table): Use it.
+ (keys_of_keyboard): Bound select-window event to handle-select-window.
+ (kbd_buffer_get_event): Make a Lisp event from SELECT_WINDOW_EVENT.
+
+ * xterm.c: Rename x_autoselect_window_p to autoselect_window_p.
+ (last_window): New variable.
+ (XTread_socket): Generate SELECT_WINDOW_EVENTs.
+ (note_mouse_movement): Remove reimplemented code in #if 0.
+ (XTread_socket): Generate SELECT_WINDOW_EVENTs only for
+ Emacs windows.
+
+ * termhooks.h (enum event_kind): New event type `SELECT_WINDOW_EVENT'.
+
+2002-03-31 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_get_char_face_and_encoding): Add parameter DISPLAY_P.
+ Callers changed.
+
+2002-03-30 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (window_scroll_pixel_based): Exit the move_it_by_lines
+ loop whenever it stops making progress.
+
+ * widget.c (set_frame_size): Don't call change_frame_size.
+
+2002-03-30 Gerd Moellmann <gerd@gnu.org>
+
+ * dispnew.c (direct_output_for_insert):
+ Call mark_window_display_accurate.
+
+2002-03-29 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_draw_relief_rect): Fix calculations of line lengths.
+
+2002-03-29 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (lread.o): Depend on coding.h.
+
+ * lread.c (openp, Fload): Encode the file name before passing it
+ to `stat', `access', and `emacs_open'.
+ (openp): GCPRO the encoded file name. Don't recompute Lisp
+ strings unnecessarily.
+
+2002-03-29 Kim F. Storm <storm@cua.dk>
+
+ * fns.c (Flax_plist_put): Doc fix.
+
+2002-03-28 Miles Bader <miles@gnu.org>
+
+ * process.c (DATAGRAM_CONN_P): Make sure PROC is really a process.
+
+2002-03-27 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * process.c (set-network-process-options): Add usage.
+ (make-network-process): Doc fix.
+
+2002-03-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * emacs.c (Fdump_emacs): Fix a typo in "command-line-processed".
+
+2002-03-26 Richard M. Stallman <rms@gnu.org>
+
+ * fns.c (Fsubstring_no_properties): New function.
+ (Flax_plist_get, Flax_plist_put): New functions.
+ (syms_of_fns): defsubr them.
+
+ * xdisp.c (update_menu_bar): Test only update_mode_lines;
+ don't test or alter w->update_mode_line.
+
+ * window.c (Fdisplay_buffer): Doc fix.
+
+2002-03-24 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (GET_UNSIGNED_NUMBER): Give proper error for spaces.
+
+2002-03-24 Gerd Moellmann <gerd@gnu.org>
+
+ * eval.c (Qdeclare, Vmacro_declaration_function): New variables.
+ (Fdefmacro): Handle `(declare ...)'.
+ (syms_of_eval) <Qdeclare>: Initialize and staticpro.
+ (syms_of_eval) <Vmacro_declaration_function>: DEFVAR_LISP.
+
+2002-03-24 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (xbm_scan, xbm_load_image, xbm_read_bitmap_data)
+ (xbm_file_p): Add prototypes.
+ (xbm_format, xbm_image_p): Sync with xfns.c.
+ (reflect_byte): New function.
+ (xbm_read_bitmap_data): Sync with xfns.c, adapt for Windows.
+ (xbm_load_image): Create bitmaps with a depth of 1.
+ (init_xfns): Enable XBM images.
+
+2002-03-23 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_handle_tool_bar_click): Detect up and down events
+ correctly. Do not pass up_modifier to keyboard buffer.
+
+ * w32fns.c [HAVE_IMAGES, HAVE_PBM]: Remove conditionals.
+
+2002-03-22 Stefan Monnier <monnier@cs.yale.edu>
+
+ * Makefile.in (bootstrapclean): New target.
+ (bootstrap-temacs, bootstrap-doc): Remove.
+ (bootstrap-emacs): Use a bog-standard `temacs'.
+ Don't bother to build a DOC file.
+
+ * sysdep.c (wait_for_termination): Use sigsuspend rather than sigpause.
+
+ * emacs.c (main): Handle --unibyte, --multibyte, and --no-loadup
+ in temacs even if !CANNOT_DUMP.
+ (standard_args): Keep --no-loadup even if !CANNOT_DUMP.
+
+ * alloc.c (check_pure_size): Only output a warning.
+
+2002-03-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fx_create_frame): Enable tool-bar when images are
+ supported.
+
+ * w32term.c (zv_bits): Declare as short, for word alignment.
+ (w32_read_socket) <WM_XBUTTONUP>: Fix last change.
+ (syms_of_w32term): Define x-use-underline-position-properties.
+
+ * w32fns.c (x_set_cursor_color): Set cursor_gc as well.
+ (clear_image_cache): Block input, fix logic, clear matrices in
+ all frames that share this cache.
+
+2002-03-22 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * emacs.c (main): Update the Copyright year in the blurb printed
+ by "emacs --version".
+
+ * xdisp.c (message_with_string): Fix syntax of a call to GCPRO2.
+
+ * xterm.c (XTread_socket): If XK_ISO_Lock and
+ XK_ISO_Last_Group_Lock are defined, handle keysyms between
+ XK_ISO_Lock and XK_ISO_Last_Group_Lock similarly to Mode_switch.
+
+2002-03-21 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (menu_bar_items): Mostly undo 2002-02-20 patch, so
+ menu-bar bindings in keymap and local-map properties _are_ used.
+ But try keymap property first in accordance with 2002-01-03 patch.
+ Added comment describing why this is not always reliable.
+ (tool_bar_items): Ditto for tool-bar.
+
+2002-03-21 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (x_clear_image_1): Disable color table code.
+
+2002-03-21 Kim F. Storm <storm@cua.dk>
+
+ * lisp.h (DEFUN) [USE_NONANSI_DEFUN]: The 2001-10-17 patch
+ removed the wrong version of the DEFUN macro; fixed it.
+
+ * fns.c (Ffeaturep): Allow subfeature to be a list (test using
+ Fmember rather than Fmemq).
+ (Fprovide): Check that subfeatures is a list.
+
+ * process.c (QCfeature, QCdatagram): Removed variables.
+ (QCtype, Qdatagram): New variables.
+ (network_process_featurep): Removed function.
+ (Fmake_network_process): Removed :feature check.
+ Use :type 'datagram instead of :datagram t to create a datagram
+ socket. This allows us to add other connection types (e.g. raw
+ sockets) later in a consistent manner.
+ (init_process) [subprocess, HAVE_SOCKETS]: Provide list of
+ supported subfeatures for feature make-network-process.
+ (syms_of_process) [subprocess]: Remove QCfeature and QCdatagram.
+ Intern and staticpro QCtype and Qdatagram.
+ (syms_of_process) [!subprocess]: Intern and staticpro QCtype.
+
+ * xfns.c (QCtype): Remove duplicate declaration and
+ initialization (is now declared in process.c).
+
+ * w32fns.c (QCtype): Remove duplicate declaration and
+ initialization (is now declared in process.c).
+
+2002-03-21 Richard M. Stallman <rms@gnu.org>
+
+ * regex.c (DISCARD_FAILURE_REG_OR_COUNT): New macro.
+ (CHECK_INFINITE_LOOP): Use DISCARD_FAILURE_REG_OR_COUNT
+ when jumping to `fail' to avoid undoing reg changes in the
+ last iteration of the loop.
+ (GET_UNSIGNED_NUMBER): Skip spaces around the number.
+
+ * Makefile.in (dispnew.o, sysdep.o, xdisp.o, xselect.o, alloc.o):
+ Depend on process.h.
+
+2002-03-20 Jason Rumney <jasonr@gnu.org>
+
+ Most of the following changes are still conditional on HAVE_IMAGES
+ which is not set by default on Windows.
+
+ * emacs.c (main) [WINDOWSNT]: Call init_xfns.
+
+ * w32fns.c (x_set_cursor_color): Set foreground of cursor, not frame.
+ (Fimage_size, Fimage_mask_p, XPutPixel): New functions.
+ (four_corners_best, x_clear_image_1, x_clear_image)
+ (x_alloc_image_color, postprocess_image)
+ (x_create_x_image_and_pixmap, x_destroy_x_image, xbm_load_image)
+ (x_from_x_colors, x_disable_image, pbm_load): Adapt for Windows.
+ (init_xfns, syms_of_w32fns): Initialize image functions and constants.
+
+ * w32gui.h (struct XImage): Define.
+
+ * w32term.c (w32_read_socket) <WM_XBUTTONUP>: Use XFASTINT to
+ extract mouse co-ordinates.
+
+2002-03-20 Jason Rumney <jasonr@gnu.org>
+
+ * w32.c (init_winsock): Dynamically load new server and UDP
+ socket functions.
+ (socket_to_fd): New function.
+ (sys_socket): Use it.
+ (sys_setsockopt, sys_listen, sys_getsockname, sys_accept)
+ (sys_recvfrom, sys_sendto): New wrapper functions.
+
+ * process.c (QCfamily, QCfilter): Remove duplicate declaration
+ and initialization.
+
+ * makefile.w32-in (LIBS): Remove $(WSOCK32).
+
+2002-03-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * process.c (conv_sockaddr_to_lisp, conv_lisp_to_sockaddr):
+ Don't use "sun" as a variable, it's a predefined constant on Sun
+ machines.
+
+2002-03-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * bytecode.c (Fbyte_code): Revert last change.
+
+2002-03-19 Kim F. Storm <storm@cua.dk>
+
+ * makefile.w32-in (LIBS): Add $(WSOCK32).
+ From David Ponce <dponce@voila.fr>.
+
+2002-03-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * process.c (wait_reading_process_input): Move variables `pname'
+ and `pnamelen' down where they are used.
+
+ * bytecode.c (Fbyte_code): Discard unused computed value to
+ prevent gcc warning.
+
+ * lisp.h (Fplist_member): Add prototype.
+
+2002-03-18 Kim F. Storm <storm@cua.dk>
+
+ * config.in: Add HAVE_SENDTO, HAVE_RECVFROM, HAVE_SETSOCKOPT,
+ HAVE_GETSOCKOPT, HAVE_GETPEERNAME, HAVE_GETSOCKNAME, and HAVE_SYS_UN_H.
+
+ * process.c: Define HAVE_LOCAL_SOCKETS based on HAVE_SYS_UN_H.
+ Remove explicit GNU_LINUX settings for datagram support.
+
+2002-03-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * process.c (Fmake_network_process): Remove unused variable `sa'.
+ Doc fix. Add usage:.
+ (set_socket_options): Remove unused variables `optnum' and `opttype'.
+
+2002-03-17 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (cursor_type_changed): New variable.
+ (redisplay_internal): Redisplay all windows if cursor_type_changed.
+ Clear it when clearing windows_or_buffers_changed.
+ (try_cursor_movement, redisplay_window, try_window_id)
+ (try_window_reusing_current_matrix): Test cursor_type_changed
+ along with windows_or_buffers_changed.
+
+ * window.h (cursor_type_changed): New variable.
+
+ * xfns.c (x_set_cursor_type): Set cursor_type_changed,
+ not update_mode_lines, and always set it to 1.
+
+ * xdisp.c (clear_garbaged_frames): Don't set windows_or_buffers_changed
+ if no frames needed redrawing.
+
+2002-03-17 Kim F. Storm <storm@cua.dk>
+
+ The following changes add support for network server processes,
+ datagram connections, and local (unix) sockets.
+
+ * process.h (struct Lisp_Process): New member log.
+ Doc fix: Member command used to indicate stopped network process.
+ Doc fix: Member childp contains plist for network process.
+ Doc fix: Member kill_without_query is inverse of query-on-exit flag.
+
+ * process.c (Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
+ (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery, QCstop)
+ (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature): New
+ variables.
+ (NETCONN1_P): New macro.
+ (DATAGRAM_SOCKETS): New conditional symbol.
+ (datagram_address): New array.
+ (DATAGRAM_CONN_P, DATAGRAM_CHAN_P): New macros.
+ (status_message): Use concat3.
+ (Fprocess_status): Add `listen' status to doc string. Return
+ `stop' for a stopped network process.
+ (Fset_process_buffer): Update contact plist for network process.
+ (Fset_process_filter): Ditto. Don't enable input for stopped
+ network processes. Server must listen, even if filter is t.
+ (Fset_process_query_on_exit_flag, Fprocess_query_on_exit_flag):
+ New functions.
+ (Fprocess_kill_without_query): Removed. Now defined in simple.el.
+ (Fprocess_contact): Added KEY argument. Handle datagrams.
+ (list_processes_1): Optionally show only processes with the query
+ on exit flag set. Dynamically adjust column widths. Omit tty
+ column if not needed. Report stopped network processes. Identify
+ server and datagram network processes.
+ (Flist_processes): New optional arg `query-only'.
+ (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size)
+ (conv_lisp_to_sockaddr, set_socket_options)
+ (network_process_featurep, unwind_request_sigio): New helper
+ functions.
+ (Fprocess_datagram_address, Fset_process_datagram_address):
+ (Fset_network_process_options): New lisp functions.
+ (Fopen_network_stream): Removed. Now defined in simple.el.
+ (Fmake_network_process): New lisp function. Code is based on
+ previous Fopen_network_stream, but heavily reworked with new
+ property list based argument list, support for datagrams, server
+ processes, and local sockets in addition to old client-only
+ functionality.
+ (server_accept_connection): New function.
+ (wait_reading_process_input): Use it to handle incoming connects.
+ Do not enable input on a new connection if process is stopped.
+ (read_process_output): Handle datagram sockets. Use 2k buffer for
+ them.
+ (send_process): Handle datagram sockets.
+ (Fstop_process, Fcontinue_process): Apply to network processes. A
+ stopped network process is indicated by setting command field to t.
+ (Fprocess_send_eof): No-op if datagram connection.
+ (Fstatus_notify): Don't read input for a stream server socket or a
+ stopped network process.
+ (init_process): Initialize datagram_address array.
+ (syms_of_process): Intern and staticpro new variables, defsubr new
+ functions.
+
+2002-03-16 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_to_all_x_charsets): Return correct type in
+ startup case.
+
+2002-03-16 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (redisplay_internal, redisplay_windows):
+ Use list_of_error to call internal_condition_case_1.
+ (safe_eval, safe_call): Pass Qt to internal_condition_case_{1,2}
+ so as to catch all errors with no possibility of debugger redisplay.
+ (list_of_error): New variable.
+ (syms_of_xdisp): Init and staticpro it.
+
+ * print.c (print_object): Delete `\ ' from printed rep of frame.
+
+2002-03-15 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (dos_rawgetc): Disable the x-autoselect-window feature,
+ until its implementation is fixed.
+
+2002-03-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xfns.c (png_load): Remove unused variable `gamma_str'.
+
+2002-03-14 Richard M. Stallman <rms@gnu.org>
+
+ * xfns.c (x_real_positions): Handle failure in XQueryTree.
+
+2002-03-14 Miles Bader <miles@gnu.org>
+
+ * intervals.c (adjust_for_invis_intang): New function.
+ (set_point_both): Use `adjust_for_invis_intang' to do most of the
+ work for dealing with invisible+intangible regions. Do so before
+ and after both forward and backward movements, to handle both
+ front-sticky and rear-sticky cases.
+ * textprop.c (text_property_stickiness): Function moved here from
+ `editfns.c'.
+ * intervals.h (text_property_stickiness): New declaration.
+ * editfns.c (char_property_eq): Function removed.
+ (text_property_stickiness): Function moved to `textprop.c'.
+
+2002-03-13 Jason Rumney <jasonr@gnu.org>
+
+ * config.in: Add STRFTIME_NO_POSIX2.
+
+ * strftime.c (my_strftime) [STRFTIME_NO_POSIX2]: Handle %h, %EX
+ and %OX when underlying strftime does not.
+
+2002-03-13 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xterm.c (x_set_toolkit_scroll_bar_thumb) <USE_MOTIF>:
+ Use a fixed-size thumb (based on an ad-hoc estimate of 30 chars per
+ line) to avoid annoying flicker.
+ (xm_scroll_callback): Get rid of the now unnecessary kludge.
+ (XTread_socket): Mark it static.
+
+ * xdisp.c (display_mode_element): Fix int/Lisp_Object mixup.
+
+2002-03-13 Kim F. Storm <storm@cua.dk>
+
+ * puresize.h (BASE_PURESIZE): Increase to 775000.
+
+2002-03-12 Juanma Barranquero <lektu@terra.es>
+
+ * editfns.c (syms_of_editfns): Fix typo.
+
+2002-03-12 Gerd Moellmann <gerd@gnu.org>
+
+ * xsmfns.c: Include stdio.h because termhooks.h needs it.
+ Include termopt.h for interrupt_input.
+
+2002-03-11 Andreas Schwab <schwab@suse.de>
+
+ * coding.c (syms_of_coding) <file-coding-system-alist>: Doc fix.
+
+2002-03-11 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (note_mouse_movement): Put code for
+ x_autoselect_window_p in #if 0.
+
+ * lread.c (Fload): Don't assume that message_with_string uses the
+ string it is given like a C string.
+
+2002-03-10 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (x_session_check_input, x_session_initialize): Declare.
+
+ * xterm.c (XTread_socket): Add call to x_session_check_input and
+ x_session_have_connection.
+ (x_initialize): Add call to x_session_initialize.
+
+ * termhooks.h (enum event_kind): Add save_session_event.
+
+ * keyboard.c: Add Emacs event save_session_event.
+
+ * emacs.c (main): Add call to syms_of_xsmfns.
+
+ * lisp.h (syms_of_xsmfns): Declare extern.
+
+ * config.in: Add HAVE_X_SM.
+
+ * Makefile.in (LIBXT): Add -lSM -lICE
+ if HAVE_X_SM and not USE_X_TOOLKIT.
+ (XOBJ): New file xsmfns.c added.
+
+ * xsmfns.c: New file for X session management.
+
+2002-03-09 Jason Rumney <jasonr@gnu.org>
+
+ * fileio.c (Fcopy_file) [WINDOWS_NT]: Ensure file is not
+ read-only when setting modified time.
+
+2002-03-08 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (move_it_vertically_backward): At the end of the function,
+ when moving forward by lines, treat terminal frames specially.
+
+ * keyboard.c (echo_char): Make sure to add a separator between
+ keys even if echo_dash hasn't been called.
+
+ * xdisp.c: Use new string macros.
+ (update_echo_area): Pass number of bytes to message3 instead of
+ number of chars.
+ (set_message_1): Don't access a string's size_byte directly.
+ (decode_mode_spec_coding): Use number of bytes of eoltype string
+ instead number of chars.
+
+ * lisp.h (SREF, SDATA, SCHARS, SBYTES, SMBP): New macros.
+
+2002-03-08 Juanma Barranquero <lektu@terra.es>
+
+ * w32fns.c (Fx_display_color_cells): Force 24+ bit color depths to
+ 24-bit.
+
+2002-03-06 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_draw_hollow_cursor): Draw same size as block cursor.
+
+2002-03-06 Gerd Moellmann <gerd@gnu.org>
+
+ * keyboard.c (echo_prompt, echo_char, echo_dash, echo_now)
+ (cancel_echoing, echo_length, echo_truncate): Changed to
+ work with new kboard definition.
+ (echo_now): Use message3_nolog instead of message2_nolog.
+
+ * alloc.c (mark_kboards): Mark echo_string.
+
+ * keyboard.h (ECHOBUFSIZE): Removed.
+ (struct kboard): Member echoptr removed, member echobuf renamed
+ to echo_string.
+
+ * xdisp.c (message_with_string): Use Fformat instead of doprnt and
+ message3 instead of message2 to display the message using STRING's
+ text properties.
+
+2002-03-05 Andreas Schwab <schwab@suse.de>
+
+ * xdisp.c (hscroll_margin): Change to EMACS_INT.
+
+2002-03-05 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * frame.c (default-frame-alist): Explain that setting it doesn't
+ affect existing frames.
+
+2002-03-05 Stefan Monnier <monnier@cs.yale.edu>
+
+ * indent.c (skip_invisible): Fix my brain fart.
+
+ * dispnew.c (sit_for): Don't wait if executing a kbd macro.
+
+2002-03-04 Stefan Monnier <monnier@cs.yale.edu>
+
+ * dosfns.c, dosfns.h, dispnew.c, dispextern.h, commands.h, charset.c,
+ * alloc.c, abbrev.c, emacs.c, eval.c, keyboard.c, keyboard.h,
+ * lisp.h, lread.c, sysdep.c, termcap.c, termchar.h, w32term.c,
+ * window.c, xdisp.c, xselect.c, xterm.c: Change defvar_int definition
+ and variables to use EMACS_INT instead of just int.
+
+ * buffer.c (syms_of_buffer): Allow non-string `mode-name'.
+
+2002-03-04 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * sysdep.c (sys_subshell) [MSDOS]: If PWD is set in the
+ environment, pass it down with corrected value.
+
+2002-03-04 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * lread.c (read_filtered_event): Do not call start_hourglass
+ before returning.
+
+2002-03-04 Juanma Barranquero <lektu@terra.es>
+
+ * w32term.c (x_display_and_set_cursor): Fix typo.
+
+2002-03-03 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fmake_temp_name): Doc fix.
+
+2002-03-03 Gary Wong <gtw@gnu.org>
+
+ * termcap.c [!emacs]: Replace ospeed for building standalone
+ libtermcap, for binary compatibility.
+
+ * tparam.c [!emacs]: Move #define of bcopy to after string.h.
+
+2002-03-03 Richard M. Stallman <rms@gnu.org>
+
+ * xrdb.c (file_p): Rename arg `path' to `filename'.
+
+ * abbrev.c (Fexpand_abbrev): Increment plist as use count
+ only if it is an integer.
+
+ * xfns.c (png_load): Set screen_gamma based on f->gamma.
+ If png_get_sRGB gives an answer, call png_set_gamma
+ using the default image gamma value.
+
+ * lread.c (read1): When reading from a file, default string to
+ multibyte only if it has some multibyte characters.
+
+ * print.c (print_object): Output multibyte chars 128...255
+ using \x even if ! print_escape_multibyte.
+
+ * xdisp.c (display_mode_element): Move the places where
+ bytepos, charpos, this, and lisp_string are set.
+ Use lisp_string to set bytepos.
+
+ * xdisp.c (redisplay_internal):
+ Call clear_image_cache only if HAVE_WINDOW_SYSTEM.
+
+ * xdisp.c (display_mode_element): Merge properties specified with
+ :propertize onto those that come with the string.
+
+2002-03-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xdisp.c (syms_of_xdisp) <auto-hscroll-mode>: Renamed from
+ automatic-hscrolling. Users changed.
+ <hscroll-margin>: Renamed from automatic-hscroll-margin.
+ Users changed.
+ <hscroll-step>: Renamed from automatic-hscroll-step. Users changed.
+
+2002-03-02 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * buffer.c (syms_of_buffer) <buffer-file-coding-system>: Doc fix.
+
+2002-03-02 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Fminibuffer_selected_window): New function.
+ (syms_of_window): Defsubr it.
+
+2002-03-01 Kim F. Storm <storm@cua.dk>
+
+ * window.h (struct window): New member phys_cursor_width.
+
+ * window.c (make_window, replace_window): Init phys_cursor_width.
+
+ * xterm.c (x_display_and_set_cursor): Blink box cursor using
+ hollow box cursor. Blink bar cursor using 1 pixel wide bar.
+
+ * w32term.c (x_display_and_set_cursor): Blink box cursor using
+ hollow box cursor. Blink bar cursor using 1 pixel wide bar.
+
+ * lisp.h (GCPRO6): New macro.
+
+ * process.c (Fopen_network_stream): Use GCPRO6.
+
+2002-03-01 Kim F. Storm <storm@cua.dk>
+
+ * process.c (Qconnect, Qfailed): New variables.
+ (syms_of_process): Intern and staticpro them.
+ (Fprocess_status): Document connect and failed return values.
+ [NON_BLOCKING_CONNECT]: New conditional.
+ (connect_wait_mask, num_pending_connects): New variables.
+ (status_message): Convert Qfailed status.
+ (Fopen_network_stream): Added support for non-blocking connect.
+ New optional args: filter, sentinel, non_blocking. Doc updated.
+ [HAVE_GETADDRINFO, !HAVE_GETADDRINFO]: Merged common code.
+ (deactivate_process): Handle pending non-blocking connect.
+ (wait_reading_process_input): Poll for status of non-blocking
+ connects. Exec sentinel directly when connect succeeds.
+ (status_notify): Don't read process output if not yet connected.
+
+2002-02-28 Kim F. Storm <storm@cua.dk>
+
+ * window.c (minibuf_selected_window): Renamed from
+ Vminibuf_selected_window. Users changed.
+ (syms_of_window): Staticpro it.
+
+2002-02-26 Kim F. Storm <storm@cua.dk>
+
+ The following changes add a new Vminibuf_selected_window variable
+ which is similar to Vminibuf_scroll_window, but which is only set
+ on entry to the minibuffer (from a non-minibuffer window):
+
+ * window.c (Vminibuf_selected_window): New variable.
+ (struct save_window_data): New member minibuf_selected_window.
+ (Fset_window_configuration): Restore Vminibuf_selected_window.
+ (Fcurrent_window_configuration): Save Vminibuf_selected_window.
+ Set minibuf_scroll_window member to nil if minibuf_level is 0.
+ (compare_window_configurations): Compare minibuf_selected_window.
+
+ * window.h (Vminibuf_selected_window): Declare extern.
+
+ * minibuf.c (read_minibuf): Set Vminibuf_selected_window on first
+ entry to minibuffer or on entry from a non-minibuffer window.
+
+ * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3): Compare with
+ Vminibuf_selected_window instead of Vminibuf_scroll_window.
+
+ * xdisp.c (init_iterator): Compare with Vminibuf_selected_window
+ instead of Vminibuf_scroll_window when deciding in which window
+ the region should be highlighted. Consequently, the region remains
+ highlighteded even when a completion buffer is also displayed.
+
+2002-02-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * fileio.c (Fsubstitute_in_file_name): Fix the change from 2002-02-08.
+
+ * xselect.c (Qcompound_text_with_extensions): Renamed from
+ Qcompound_text_no_extensions.
+ (lisp_data_to_selection_data, syms_of_xselect): Use the new name.
+
+2002-02-26 Juanma Barranquero <lektu@terra.es>
+
+ * w32proc.c (syms_of_ntproc): Doc fix.
+
+2002-02-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * intervals.h: Include "dispextern.h" unconditionally.
+
+2002-02-24 Jason Rumney <jasonr@gnu.org>
+
+ * Makefile.in (WINNT_SUPPORT) [WINDOWSNT]: Add w32-vars.elc
+ and disp-table.elc.
+ (lisp): Add emacs-lisp/backquote.elc.
+
+2002-02-24 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (Flookup_key): Fix problem in 2001-12-28 patch:
+ The validation of the event type was too strict as it didn't
+ allow string events; buffer names are used in bindings for
+ menu-bar-select-buffer (see `menu-bar-update-buffers').
+
+2002-02-23 Kim F. Storm <storm@cua.dk>
+
+ The following changes rework my patch of 2002-02-06 which
+ added command remapping by entering the commands directly into
+ the keymaps. Now, command remapping uses an explicit `remap'
+ prefix in the keymaps, i.e. [remap COMMAND].
+
+ * keymap.c (Qremap, remap_command_vector): New variables.
+ (is_command_symbol): Remove function.
+ (Fdefine_key): No longer accept a symbol for KEY.
+ Added validation of [remap COMMAND] argument for KEY.
+ The DEF is no longer required to be a symbol when remapping a command.
+ (Fremap_command): New function to remap command through keymaps.
+ (Flookup_key): Perform command remapping initiated by
+ Fremap_command directly for speed.
+ (Fkey_binding): Use Fremap_command for command remapping.
+ (where_is_internal): Handle new command remapping representation.
+ (syms_of_keymap): Intern Qremap, initialize remap_command_vector,
+ staticpro them. Defsubr Fremap_command.
+
+ * keymap.h (Fremap_command): Declare extern.
+ (is_command_symbol): Remove extern.
+
+ * keyboard.c (command_loop_1): Use Fremap_command for command
+ remapping; now try command remapping for all symbols.
+
+2002-02-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * coding.h (run_pre_post_conversion_on_str): Add prototype.
+
+2002-02-23 Jason Rumney <jasonr@gnu.org>
+
+ * w32select.c (Fw32_set_clipboard_data): Run pre-write-conversion
+ on the string before encoding it.
+ (Fw32_get_clipboard_data): Run post-read-conversion on the string
+ after decoding it.
+
+ * w32fns.c (w32_wnd_proc) <WM_TIMER>: Fix last change.
+
+2002-02-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * w32term.c (enter_timestamp): Remove unused static variable to
+ prevent warning.
+
+ * xterm.c (enter_timestamp): Put in #if 0 to prevent warning.
+
+2002-02-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * w16select.c (Fw16_get_clipboard_data): Fix last change.
+
+ * xselect.c (selection_data_to_lisp_data): Fix last change.
+
+2002-02-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.h (struct w32_output): New member menu_command_in_progress.
+
+ * w32menu.c (menubar_selection_callback): Free the menu and
+ clear the menu_command_in_progress flag.
+
+ * w32fns.c (mouse_move_timer, mouse_button_timer): Initialize.
+ (menu_free_timer): New variable.
+ (MENU_FREE_ID, MENU_FREE_DELAY): New constants.
+ (w32_wnd_proc) <WM_TIMER>: Handle menu_free_timer.
+ <WM_EXITMENULOOP>: Delay before freeing menu. Do nothing if a
+ menu command is in progress.
+ <WM_COMMAND>: Set the menu_command_in_progress flag.
+ Kill any menu_free_timer that is running.
+
+ * w32term.c (w32_text_out): Renamed from W32_TEXTOUT.
+ Call ExtTextOutA rather than ExtTextOut.
+
+2002-02-22 Eli Zaretskii <eliz@gnu.org>
+
+ * puresize.h (BASE_PURESIZE): Increase to 755000.
+
+2002-02-22 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * w16select.c (Fw16_set_clipboard_data): Run pre-write-conversion
+ on the string before encoding it.
+ (Fw16_get_clipboard_data): Run post-read-conversion on the string
+ after decoding it.
+
+2002-02-22 Eli Zaretskii <eliz@is.elta.co.il>
+
+ Support for ICCCM Extended Segments in X selections:
+
+ * xselect.c <Qcompound_text_no_extensions>: New variable.
+ (syms_of_xselect): Intern and staticpro it.
+ (selection_data_to_lisp_data): Run post-read-conversion on decoded
+ selection text.
+ (lisp_data_to_selection_data): If next-selection-coding-system is
+ compound-text-no-extensions, set the type of selection to be
+ compound-text.
+
+ * xterm.h (x_encode_text): Update prototype.
+
+ * xfns.c (x_encode_text): Accept additional arg SELECTIONP; all
+ callers changed. If SELECTIONP is non-zero, run the
+ pre-write-conversion function before encoding the selection text.
+
+2002-02-21 Kim F. Storm <storm@cua.dk>
+
+ * frame.c (syms_of_frame): Change mouse-highlight default to t.
+
+ * keyboard.c (kbd_buffer_get_event) [WINDOWSNT]:
+ Correct composing of language-change event.
+
+2002-02-20 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (menu_bar_items): Don't include keymap or local-map
+ bindings at PT when building menu (the menu is not updated often
+ enough for this to work reliable).
+ (tool_bar_items): Likewise.
+ (current_active_maps): Removed unused (and buggy) function.
+
+2002-02-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xfns.c (gif_load): Use correct width and height for GIF images.
+
+2002-02-19 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * floatfns.c (Fatan): Accept an optional second arg and call
+ atan2 if passed 2 args.
+
+2002-02-18 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (glyph_rect): Determine the row and glyph more precisely.
+
+2002-02-17 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_autoselect_window_p): New variable.
+ (syms_of_w32term): DEFVAR_BOOL and initialize it.
+ (note_mouse_movement): Use it.
+
+ * w32fns.c (w32_load_system_font): Never set fonts_changed_p to zero.
+
+ * w32bdf.c (w32_load_bdf_font): Maybe set fonts_changed_p.
+
+ * w32fns.c (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth):
+ New variables.
+ (syms_of_w32fns): Intern and staticpro them.
+ (x_frame_parms) <"fullscreen">: New parameter.
+ (x_fullscreen_move, x_set_fullscreen): New functions.
+ (x_set_frame_parameters): Support Qfullscreen.
+ (x_real_positions): Save x/y_pixels_diff frame params.
+ (x_figure_window_size): Support full-screen frames.
+ (Fx_create_frame): Default the fullscreen parameter.
+
+ * w32term.c (x_check_fullscreen, x_check_fullscreen_move)
+ (x_fullscreen_adjust): New functions.
+ (w32_read_socket) <WM_WINDOWPOSCHANGED>: Don't resize to
+ fullscreen. Call x_check_fullscreen_move, and set the
+ want_fullscreen member of output_data.w32
+ <WM_ACTIVATE, WM_ACTIVATEAPP>: Call x_check_fullscreen.
+
+ * w32term.h: New enum for FULLSCREEN_* constants.
+ (struct w32_output): New members want_fullscreen, x_pixels_diff,
+ y_pixels_diff, x_pixels_outer_diff, and y_pixels_outer_diff.
+ (x-fullscreen-adjust): New prototype.
+
+2002-02-17 Kim F. Storm <storm@cua.dk>
+
+ * frame.c (Vmouse_highlight): New variable.
+ (syms_of_frame): DEFVAR_LISP it.
+
+ * frame.h (Vmouse_highlight): Declare extern.
+
+ * xterm.h (struct x_display_info): Add mouse_face_hidden.
+
+ * xterm.c (disable_mouse_highlight): Removed variable.
+ (note_mouse_highlight): Don't highlight if Vmouse_highlight is nil.
+ (show_mouse_face): Don't show highlight if mouse_face_hidden is set.
+ (XTread_socket): Turn mouse_face_hidden off after mouse movement,
+ and on after keyboard input.
+ (x_term_init): Initialize mouse_face_hidden.
+
+ * msdos.h (struct display_info): Add mouse_face_hidden.
+
+ * msdos.c (disable_mouse_highlight): Removed variable.
+ (show_mouse_face): Don't show highlight if mouse_face_hidden is set.
+ (IT_note_mouse_highlight): Don't highlight if Vmouse_highlight is nil.
+ (internal_terminal_init): Initialize mouse_face_hidden.
+ (dos_rawgetc): Turn mouse_face_hidden off after mouse movement,
+ and on after keyboard input.
+
+ * w32term.h (struct w32_display_info): Add mouse_face_hidden.
+
+ * w32term.c (disable_mouse_highlight): Removed variable.
+ (note_mouse_highlight): Disable highlight if Vmouse_highlight is nil.
+ (show_mouse_face): Don't show highlight if mouse_face_hidden is set.
+ (w32_read_socket): Turn mouse_face_hidden off after mouse movement,
+ and on after keyboard input.
+ (w32_initialize_display_info): Initialize mouse_face_hidden.
+
+2002-02-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (last_mouse_window): New variable.
+ (dos_rawgetc): Fix last change--if the mouse is in the same window
+ as recorded in last_mouse_window, don't select this window.
+
+ * Makefile.in (lisp, shortlisp): Use cus-start.elc, not cus-start.el.
+
+ * msdos.c (x_autoselect_window_p): New variable.
+ (syms_of_msdos): Defvar it.
+ (dos_rawgetc): If x_autoselect_window_p is set, select the window in
+ which the last mouse movement occured, unless it is already selected.
+
+ * xdisp.c (automatic_hscroll_margin, Vautomatic_hscroll_step):
+ New variables.
+ (syms_of_xdisp): DEVFAR them.
+ (hscroll_window_tree): Use automatic_hscroll_margin and
+ Vautomatic_hscroll_step to compute the amount of window scrolling.
+
+2002-02-16 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xterm.c (x-autoselect-window): New variable.
+ (note_mouse_movement): Use it.
+
+ * keyboard.c: Do not include "systime.h" twice.
+
+2002-02-15 Andreas Schwab <schwab@suse.de>
+
+ * puresize.h (PURESIZE_RATIO): Increase to 9/5.
+
+ * alloc.c (NSTATICS): Increase to 1280.
+
+2002-02-15 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+ * alloc.c (NSTATICS): Bump to 1026.
+
+ * xterm.c (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
+ (Vx_super_keysym): New variables.
+ (syms_of_xterm): DEFVAR_LISP them.
+ (x_x_to_emacs_modifiers, x_emacs_to_x_modifiers): Use the
+ variables to determine which keys to use for the various modifiers.
+
+2002-02-13 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Vmode_line_in_non_selected_windows): Removed.
+ (mode_line_in_non_selected_windows): New variable.
+ (syms_of_window): DEFVAR_BOOL it.
+
+ * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3):
+ Use mode_line_in_non_selected_windows.
+ (mode_line_in_non_selected_windows): Declare extern.
+ (Vmode_line_in_non_selected_windows): Removed extern.
+
+2002-02-13 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (Fthis_command_keys, Fthis_command_keys_vector)
+ (Fthis_single_command_keys, Fthis_single_command_raw_keys)
+ (Fclear_this_command_keys): Doc fixes.
+
+ * xfaces.c (Finternal_make_lisp_face, Finternal_copy_lisp_face)
+ (update_face_from_frame_parameter): Increment face_change_count
+ and windows_or_buffers_changed to force redisplay using changed faces.
+
+ * xdisp.c (QCpropertize): New variable.
+ (mode_line_proptrans_alist): New variable.
+ (display_mode_element): New arg PROPS; all calls changed.
+ Implement this, for strings.
+ Handle literal output of strings by sharing the
+ main-line code for strings, using local var `literal'.
+ Handle :propertize feature.
+ (syms_of_xdisp): Initialze and staticpro QCpropertize and
+ mode_line_proptrans_alist.
+
+2002-02-11 Kim F. Storm <storm@cua.dk>
+
+ * window.c (Vmode_line_in_non_selected_windows): New variable.
+ (syms_of_window): DEFVAR_LISP it.
+
+ * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3): New macro.
+ (CURRENT_MODE_LINE_FACE_ID): Use it.
+ (Vmode_line_in_non_selected_windows): Declare extern.
+
+ * xdisp.c (display_mode_lines): Use CURRENT_MODE_LINE_FACE_ID_3
+ to get mode line face.
+
+2002-02-11 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (Vx_bitmap_file_path, x_stretch_cursor_p): Remove these
+ variables; cus-start.el doesn't need them anymore.
+
+2002-02-09 Kim F. Storm <storm@cua.dk>
+
+ * insdel.c (make_gap_smaller): Preserve BEG_UNCHANGED during gap
+ reduction. This fixes a display problem where stray newlines were
+ inserted in the window (corrected by C-l). Clarified code (IMHO).
+
+2002-02-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * dispextern.h (CURRENT_MODE_LINE_FACE_ID): Fix last change.
+
+ * xdisp.c (display_mode_lines): Fix last change.
+
+2002-02-09 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (enum_font_cb2): Don't let charsets unknown to Windows
+ match each other.
+ (w32_load_system_font): Prevent Cleartype fonts from loading.
+ (Fx_show_tip): Ensure tip frames are above other topmost windows.
+
+2002-02-09 Kim F. Storm <storm@cua.dk>
+
+ * dispextern.h (CURRENT_MODE_LINE_FACE_ID): New macro.
+ (CURRENT_MODE_LINE_HEIGHT): Use it.
+ (enum face_id): Add MODE_LINE_INACTIVE_FACE_ID.
+
+ * xdisp.c (window_box_height): Use CURRENT_MODE_LINE_FACE_ID.
+ (pos_visible_p, handle_face_prop): Likewise.
+ (display_mode_lines): Likewise, but for the real selected window.
+ (init_iterator) [row == NULL]: Handle MODE_LINE_INACTIVE_FACE_ID.
+
+ * xfaces.c (Qmode_line_inactive): New face variable for mode-line
+ in non-selected windows.
+ (realize_basic_faces): Realize it.
+ (syms_of_term): Intern and staticpro it.
+
+2002-02-08 Kim F. Storm <storm@cua.dk>
+
+ * alloc.c (SETJMP_WILL_LIKELY_WORK, SETJMP_WILL_NOT_WORK):
+ Changed mail addresses to emacs-devel@gnu.org.
+
+2002-02-08 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * fileio.c (Fsubstitute_in_file_name): If the file name includes
+ ~user, and there's no such user, don't discard everything before ~user.
+
+ * floatfns.c (Fround): Doc fix.
+
+2002-02-08 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * sysdep.c (init_system_name): Put unused variable `p' in #if 0.
+
+2002-02-07 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lisp.h (Fx_file_dialog): Add extern decl (used in fileio.c).
+
+2002-02-07 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (where_is_internal): Only check whether definition is
+ remapped if it fulfills is_command_symbol.
+
+2002-02-07 Andreas Schwab <schwab@suse.de>
+
+ * s/gnu-linux.h (GC_LISP_OBJECT_ALIGNMENT): Define to 2 for m68k.
+
+ * alloc.c (mark_stack): Don't assume sizeof (Lisp_Object) is 4.
+
+2002-02-06 Kim F. Storm <storm@cua.dk>
+
+ * keymap.c (Fdefine_key): Allow symbol as KEY argument for
+ defining command remapping. Doc updated.
+ (Flookup_key): Remap command through keymap if KEY is a symbol.
+ (is_command_symbol): New function.
+ (Fkey_binding): Use it. New optional argument NO-REMAP.
+ Doc updated. Callers changed. Perform command remapping via
+ recursive call unless that arg is non-nil.
+ (where_is_internal): New argument no_remap. Callers changed.
+ Call recursively to find original key bindings for a remapped
+ comand unless that arg is non-nil.
+ (Fwhere_is_internal): New optional argument NO-REMAP.
+ Doc updated. Callers changed. Pass arg to where_is_internal.
+
+ * keymap.h (Fkey_binding, Fwhere_is_internal): Update prototype.
+ (is_command_symbol): Add prototype.
+
+ * keyboard.c (Vthis_original_command): New variable.
+ (syms_of_keyboard): DEFVAR_LISP it.
+ (command_loop_1): Set it, and perform command remapping.
+
+2002-02-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c (recursive_edit_1): Call cancel_hourglass unconditionally.
+
+2002-02-06 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_native_per_char_metric): Disable 2002-01-20 change.
+
+2002-02-06 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * charset.c (get_charset_id): Use if-else instead of ?:.
+
+2002-02-06 Richard M. Stallman <rms@gnu.org>
+
+ * filelock.c (S_ISLNK): Define if not defined.
+
+2002-02-03 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fdo_auto_save): Improve "auto save disabled" msg.
+
+ * lread.c (read1): Redesign strategy for force_multibyte and
+ force_singlebyte. Now is_multibyte records whether read_buffer
+ is multibyte. Encountering any multibyte character makes it so.
+
+2002-02-02 Stefan Monnier <monnier@cs.yale.edu>
+
+ * term.c (term_get_fkeys_1): If `k0' and `k;' are both specified and
+ with the same sequence, map that sequence to f10 rather than f0.
+
+2002-02-03 Andreas Schwab <schwab@suse.de>
+
+ * s/gnu-linux.h: Check for __mc68000__ instead of __m68k__, the
+ latter never being defined on GNU/Linux.
+
+2002-02-02 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xfaces.c (realize_default_face): Don't set the weight and slant of
+ the default face to Qnormal, unless these attributes are unspecified.
+
+2002-02-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c (command_loop_1) [HAVE_X_WINDOWS]:
+ Call cancel_hourglass unconditionally.
+
+ * eval.c (Fsignal): Remove duplicated declaration of
+ the variable `display_hourglass_p'.
+
+2002-01-31 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (region_limit): Nicer error message.
+
+ * coding.c (decode_composition_emacs_mule):
+ Give up if NCOMPONENT gets too large to index `component'.
+
+ * callint.c (check_mark): New arg to specify clearer error message.
+ Callers changed.
+
+2002-01-27 Richard M. Stallman <rms@gnu.org>
+
+ * minibuf.c (Fcompleting_read): Doc fix.
+
+2002-01-27 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * minibuf.c (Fread_from_minibuffer, Fread_command, Fread_function)
+ (Fread_variable, Fread_buffer, minibuffer-completion-confirm):
+ Fix doc-strings.
+
+2002-01-26 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (syms_of_buffer): Doc fixes for scroll-...-aggressively.
+
+ * xdisp.c (try_scrolling): Exchange uses of scroll_down_aggressively
+ and scroll_up_aggressively.
+
+2002-01-26 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c (parse_tool_bar_item): Remove duplicated prototypes.
+
+2002-01-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * textprop.c (Fnext_property_change, Fnext_single_property_change)
+ (Fprevious_property_change, Fprevious_single_property_change):
+ Stay within the narrowed-buffer boundaries.
+
+2002-01-25 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * term.c (Ftty_display_color_cells): New function.
+ (syms_of_term): Defsubr it.
+ (Ftty_display_color_cells, Ftty_display_color_p): Change the
+ argument name to DISPLAY. Doc fix.
+
+ * dispextern.h: Add prototype for set_tty_color_mode and
+ tty_setup_colors.
+
+2002-01-24 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_scroll_run): Use ScrollWindowEx in place of BitBlt.
+ If region left to draw is not what was expected, mark the frame as
+ garbaged.
+
+ * w32fns.c (w32_wnd_proc) <WM_PAINT>: Initialize update_rect.
+ Combine the regions returned by BeginPaint and GetUpdateRect.
+
+2002-01-23 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_update_window_begin): Only hide caret if
+ w32_use_visible_system_caret is set.
+ (x_update_window_end): Only show caret if
+ w32_use_visible_system_caret is set.
+ (syms_of_w32term): Handle SystemParametersInfo call failing.
+
+ * w32fns.c (syms_of_w32fns): Initialize w32_visible_system_caret_hwnd.
+
+2002-01-22 Richard M. Stallman <rms@gnu.org>
+
+ * unexelf.c (unexec): Define n so as to cause compilation error
+ for the code where people have often written n instead of nn.
+
+ * .gdbinit (hookpost-run): Defined.
+
+2002-01-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_set_frame_parameters): Typo in previous fix corrected.
+
+2002-01-21 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xfns.c (x_set_frame_parameters): Just call x_fullscreen_adjust
+ if fullscreen is being set.
+
+2002-01-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * minibuf.c (Fminibuffer_contents)
+ (Fminibuffer_contents_no_properties, Fread_from_minibuffer)
+ (Fread_string, Fread_no_blanks_input, Fcompleting_read): Doc fixes.
+
+2002-01-21 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (check_frame_size): Fix minimum height calculation.
+
+2002-01-20 Ken Raeburn <raeburn@gnu.org>
+
+ * dispextern.h (WINDOW_WANTS_MODELINE_P): Use XFASTINT on window
+ height before comparison.
+ (WINDOW_WANTS_HEADER_LINE_P): Likewise.
+
+2002-01-20 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_system_caret_width): Remove.
+ (w32_use_visible_system_caret): New user flag.
+ (syms_of_w32term): DEFVAR_BOOL it. Initialize based on whether
+ Windows reports a screen reader running.
+ (x_update_window_begin): Hide the system caret.
+ (x_update_window_end): Show the system caret.
+ (x_display_and_set_cursor): Don't draw a cursor when
+ w32_use_visible_system_caret is set. Do not adjust width.
+
+ * w32fns.c (w32_visible_system_caret_hwnd): New static variable.
+ (w32_wnd_proc) <WM_KILL_FOCUS, WM_EMACS_DESTROY_CARET>: Set it.
+ <WM_EMACS_TRACK_CARET>: Arrange for system caret to be visible if
+ the user requests it. Use system default width when creating.
+ <WM_EMACS_HIDE_CARET, WM_EMACS_SHOW_CARET>: Handle new messages.
+
+ * w32term.h (WM_EMACS_SHOW_CARET, WM_EMACS_HIDE_CARET):
+ New window messages.
+
+2002-01-20 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (MIN_SAFE_WINDOW_HEIGHT): Value now 1.
+
+2002-01-20 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * doprnt.c (doprnt1): Fix typos in error call.
+
+2002-01-20 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * unexelf.c (unexec) [__sgi]: Support the .got sections.
+
+2002-01-20 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (w32_native_per_char_metric): Don't trust the metrics
+ that Windows returns. If a double check fails, try to guess how
+ ExtTextOut is going to act.
+
+ * w32fns.c (w32_load_system_font, w32_to_x_charset): Use strnicmp
+ in place of stricmp.
+ (w32_list_synthesized_fonts): Removed.
+ (w32_to_all_x_charsets, enum_font_maybe_add_to_list): New functions.
+ (struct enumfont_t): New element; list.
+ (enum_font_cb2): List all style and charset variations of a font.
+ (Fw32_select_font): New optional argument; include_proportional.
+ Exclude vertical fonts. Exclude proportional fonts unless
+ include_proportional is non-nil.
+ (w32_enable_synthesized_fonts): Change to a boolean.
+ (Fw32_send_sys_command): Doc fix.
+
+2002-01-19 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * dispnew.c (update_frame): Move the variable `tem' to the block
+ where it is used.
+
+2002-01-19 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fx_create_frame): Bind redisplay-dont-pause around
+ call to face-set-after-frame-default.
+
+2002-01-18 Richard M. Stallman <rms@gnu.org>
+
+ * dispextern.h (WINDOW_WANTS_MODELINE_P): Check window height > 1.
+ (WINDOW_WANTS_HEADER_LINE_P): Check window height provides room.
+
+2002-01-17 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (enlarge_window): When exceeding size of parent,
+ directly delete all the siblings instead of trying to resize it.
+
+2002-01-17 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * term.c (set_tty_color_mode): Remove unused variable `tem'.
+
+2002-01-16 Henrik Enberg <henrik@enberg.org>
+
+ * lread.c (init_lread): Move the installed-lisp dirs later in the path.
+
+2002-01-16 Kim F. Storm <storm@cua.dk>
+
+ * xterm.c (x_erase_phys_cursor): Don't erase cursor if cursor row
+ is invisible. This can happen if cursor is on top line of a
+ window, and we switch to a buffer with a header line.
+
+ * w32term.c (x_erase_phys_cursor): Ditto.
+
+2002-01-16 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xterm.c (XTread_socket) [!USE_X_TOOLKIT]: Compute the value of
+ `dont_resize' only when used.
+
+ * xdisp.c: Remove forgotten extern declaration of `Qimage'.
+
+2002-01-15 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xdisp.c (display_mode_element): When computing charpos, depend
+ on multibyteness of elt, not the text in field.
+
+2002-01-15 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * buffer.c (Fkill_all_local_variables):
+ Increment `update_mode_lines' only once.
+
+2002-01-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * lisp.h (adjust_after_replace_noundo)
+ (Fupdate_coding_systems_internal): Add prototypes.
+
+ * sound.c (Fplay_sound): Initialize header_size also for :data case.
+
+2002-01-14 Eli Zaretskii <eliz@is.elta.co.il>
+
+ Support for the --color command-line argument and tty-color-mode
+ frame parameter:
+
+ * term.c (tty_default_color_capabilities, tty_setup_colors)
+ (set_tty_color_mode): New functions.
+ (term_init): Call tty_default_color_capabilities.
+ (Qtty_color_mode_alist): New variable.
+ (syms_of_term): Intern and staticpro it.
+
+ * frame.c (store_frame_param): Call set_tty_color_mode for termcap
+ frames.
+ (do_switch_frame): For termcap frames, switch the tty
+ color mode as specified by the frame's parameters.
+ (Qtty_color_mode): New variable.
+ (syms_of_frame): Intern and staticpro it.
+
+ * emacs.c (USAGE2): Add the --color option.
+ (standard_args): Ditto.
+
+2002-01-13 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
+
+ * xterm.h (struct x_output): New members want_fullscreen,
+ x_pixels_diff, y_pixels_diff, x_pixels_outer_diff, and
+ y_pixels_outer_diff.
+ New enum for FULLSCREEN_* constants.
+ (FRAME_OUTER_WINDOW): Handle the case where output_data.x->widget
+ is NULL.
+ (x_fullscreen_adjust): Add prototype.
+
+ * emacs.c (USAGE2): Add the new full-screen arguments.
+ (standard_args): Ditto.
+
+ * xfns.c (Qfullscreen, Qfullwidth, Qfullheight, Qfullboth):
+ New variables.
+ (syms_of_xfns): Intern and staticpro them.
+ (x_frame_parms) <"fullscreen">: New parameter.
+ (x_fullscreen_move, x_set_fullscreen): New functions.
+ (x_set_frame_parameters): Support for Qfullscreen.
+ (x_real_positions): More accurate computation of the frame position.
+ (x_figure_window_size): Support full-screen frames.
+ (Fx_create_frame): Default the fullscreen parameter.
+
+ * xterm.c (x_check_fullscreen, x_fullscreen_adjust): New functions.
+ (XTread_socket) <Expose>: Call x_check_fullscreen.
+ <ConfigureNotify>: Don't resize to fullscreen.
+ Call x_check_fullscreen_move, and set the want_fullscreen member of
+ output_data.x.
+
+2002-01-13 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.h (WM_XBUTTONDOWN, WM_XBUTTONUP): New window messages
+ for mice with more than 3 buttons.
+
+ * w32term.c (parse_button): New parameter xbutton. Callers changed.
+ (w32_read_socket): Handle new "XBUTTON" messages.
+
+ * w32fns.c (w32_pass_extra_mouse_buttons_to_system): New user option.
+ (syms_of_w32fns): DEFVAR_BOOL it.
+ (w32_wnd_proc): Handle new "XBUTTON" messages.
+
+2002-01-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c (read_key_sequence): Remove unused variable `extra_maps'.
+
+2002-01-13 Andreas Schwab <schwab@suse.de>
+
+ * xterm.c (x_load_font): Never set fonts_changed_p to zero.
+
+2002-01-12 Andreas Schwab <schwab@suse.de>
+
+ * .gdbinit (xbuffer): Remove address operator since data is now a
+ pointer.
+
+2002-01-11 Richard M. Stallman <rms@gnu.org>
+
+ * insdel.c (adjust_after_replace_noundo): New function.
+
+ * coding.c (code_convert_region): Don't copy old text if undo disabled.
+
+2002-01-09 Jason Rumney <jasonr@gnu.org>
+
+ * xdisp.c (x_consider_frame_title): Don't count the tooltip frame
+ when checking for multiple frames.
+
+2002-01-08 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (delete_window): Rewrite the code for changing the
+ selected window to handle the case where WINDOW is not a leaf.
+
+2002-01-07 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * process.c (send_process): Set src_multibyte to 1 after the call
+ top setup_coding_system, not before the call.
+
+2002-01-07 Jason Rumney <jasonr@gnu.org>
+
+ * xmenu.c (set_frame_menubar, xmenu_show):
+ (xdialog_show): Initialize wv->help to Qnil.
+
+ * w32menu.c (single_submenu, set_frame_menubar, w32_menu_show):
+ (w32_dialog_show): Initialize wv->help to Qnil.
+
+2002-01-06 Jason Rumney <jasonr@gnu.org>
+
+ * xmenu.c (single_submenu): Initialize wv->help to Qnil.
+
+ * w32menu.c (w32_menu_display_help): Revert last change.
+
+ * xmenu.c (menu_highlight_callback): Revert last change.
+
+2002-01-06 Andreas Schwab <schwab@suse.de>
+
+ * insdel.c (make_gap_larger): Make sure buffer size does not
+ overflow range of int.
+
+2002-01-05 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_draw_glyphs): Don't call notice_overwritten_cursor if
+ OVERLAPS_P.
+
+ * w32menu.c (w32_menu_display_help): Hide any tooltip window.
+
+ * w32fns.c (compute_tip_xy): If tooltip won't fit on the screen
+ to the left or to the right of the pointer, put it against
+ the left screen edge.
+ (x_frame_parms): Add missing braces around initializer.
+
+ * w32term.c (x_setup_relief_colors): Don't compute an image's
+ background color if it doesn't have a Pixmap.
+ (notice_overwritten_cursor): Don't depend on
+ output_cursor and updated_area. Compare pixel coordinates with
+ window's cursor pixel coordinates.
+ (x_draw_glyphs, x_clear_end_of_line, show_mouse_face):
+ Call notice_overwritten_cursor with new arg list.
+ (show_mouse_face): Fix bug setting a row's mouse_face_p flag
+ unconditionally.
+ (x_draw_image_relief): Use predefined macro instead of
+ constant when the value of `tool_bar_button_relief' is negative.
+
+ * w32term.c (x_display_and_set_cursor): Fix PostMessage arg types.
+
+2002-01-04 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (menu_highlight_callback): Hide any tooltip window.
+
+2002-01-03 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (Fcurrent_active_maps): Put the `keymap' property map first.
+ (Fkey_binding): Try the `keymap' property map first.
+ (Fdescribe_buffer_bindings): Show `keymap' property bindings before
+ minor mode bindings.
+
+2002-01-03 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (read_key_sequence): Fix cast of submaps arg to bcopy.
+
+2002-01-02 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (read_key_sequence): Handle the keymap property
+ before minor mode maps.
+
+ * editfns.c (Fformat): Update thissize from field_width
+ based on the actual width, in the string case.
+
+2002-01-01 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * charset.h (UNIBYTE_STR_AS_MULTIBYTE_P): Parenthesize assignment
+ when used as truth value to prevent gcc warnings.
+
+ * sysdep.c, unexapollo.c, w32.c, w32bdf.c, w32heap.c, w32inevt.c,
+ * w32proc.c: Include <config.h>.
+
+2002-01-01 Andreas Schwab <schwab@suse.de>
+
+ * eval.c (max_specpdl_size, max_lisp_eval_depth): Define as int,
+ not EMACS_INT, to make them compatible with DEFVAR_INT.
+ * lisp.h (max_specpdl_size): Adjust declaration.
+
+2002-01-01 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (print_object): Test print_escape_nonascii only for
+ unibyte strings.
+ (PRINTPREPARE): Once again bind Qprint_escape_nonascii
+ when outputting to a multibyte buffer.
+
+2001-12-29 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (print_object): In multibyte string, use hex escapes.
+ Use octal only for unibyte strings.
+ (PRINTPREPARE): Don't ever set Qprint_escape_nonascii.
+
+ * lread.c (read_escape): New arg BYTEREP for reporting whether
+ escape forces unibyte or multibyte.
+ (read1): When reading a string, take note of that info.
+
+2001-12-29 Ken Raeburn <raeburn@gnu.org>
+
+ * abbrev.c (Fexpand_abbrev): Use NILP instead of implicit zero
+ comparison to test lisp value returned by Fget.
+
+2001-12-29 Richard M. Stallman <rms@gnu.org>
+
+ * lisp.h (max_specpdl_size): Add declaration.
+
+ * fileio.c (Fdo_auto_save): If NO_MESSAGE, don't call push_message.
+
+ * keymap.c (silly_event_symbol_error): New subrtn, from Fdefine_key.
+ Handle modifier bits. Correct typo in error message.
+
+2001-12-28 Richard M. Stallman <rms@gnu.org>
+
+ * abbrev.c: Use the plist of an abbrev for multiple params if nec.
+ (Fdefine_abbrev): New arg SYSTEM-FLAG for a system abbrev.
+ (Fdefine_global_abbrev, Fdefine_mode_abbrev):
+ Update calls to Fdefine_abbrev.
+ (write_abbrev): Update for changed data format.
+ Don't list "system" abbrevs.
+ (Fexpand_abbrev): Update use count with new data format.
+ (describe_abbrev): Update for changed data format.
+ (Fdefine_abbrev_table): Handle the new SYSTEM-FLAG.
+
+ * config.in (HAVE_MBSINIT): Add #undef.
+
+ * strftime.c (mbsinit): Define as no-op if not available.
+
+ * s/sco5.h (LIBX11_SYSTEM) [MOTIF]: Add -lgen.
+ (sigprocmask_set): Conditionalize decl on ! NOT_C_CODE.
+
+ * keymap.c (Flookup_key): Error message if key has wrong data type.
+ (Fdefine_key): Add error message for trying to bind [DEL], [RET], etc.
+ (exclude_key): New variable.
+
+2001-12-28 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_setup_relief_colors): Don't compute an image's
+ background color if it doesn't have a Pixmap.
+
+ * xterm.c (notice_overwritten_cursor): Don't depend on
+ output_cursor and updated_area. Compare pixel coordinates with
+ window's cursor pixel coordinates.
+ (x_draw_glyphs, x_clear_end_of_line, show_mouse_face):
+ Call notice_overwritten_cursor with new arg list.
+ (show_mouse_face): Fix bug setting a row's mouse_face_p flag
+ unconditionally.
+
+ * xdisp.c (try_scrolling) <PT below scroll margin>: Add the
+ height of the cursor line to the amount to scroll.
+
+2001-12-27 Richard M. Stallman <rms@gnu.org>
+
+ * intervals.c (set_point_both): The position after an invisible,
+ intangible character is not an acceptable stopping point.
+
+2001-12-27 Ken Raeburn <raeburn@gnu.org>
+
+ * window.c (enlarge_window): In new preserve_before code, convert
+ CURBEG from lisp object to integer before doing arithmetic.
+
+2001-12-27 Richard M. Stallman <rms@gnu.org>
+
+ * bytecode.c (Fbyte_code): Undo previous change.
+
+2001-12-26 Kim F. Storm <storm@cua.dk>
+
+ * keyboard.c (record_char): Ignore duplicate help-echo events only
+ separated by mouse-movement. When tracking mouse, only record
+ first and last mouse-movement event in same window.
+ Don't record mouse-movement events in keyboard macros.
+
+2001-12-25 Richard M. Stallman <rms@gnu.org>
+
+ * window.c (enlarge_window): New arg PRESERVE_BEFORE. Callers changed.
+ (Fenlarge_window): New arg PRESERVE_BEFORE.
+
+ * bytecode.c (Fbyte_code): Use Fstring_make_unibyte
+ instead of Fstring_as_unibyte.
+
+2001-12-22 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ The following changes remove mocklisp support:
+
+ * mocklisp.h, mocklisp.c: Files removed.
+
+ * lisp.h: Remove declarations of variables `Vmocklisp_arguments',
+ `Qmocklisp' and `Qmocklisp_arguments'.
+ Remove prototype of syms_of_mocklisp.
+
+ * makefile.nt, makefile.w32-in, Makefile.in: Remove mocklisp files.
+
+ * callint.c: Do not include mocklisp.h.
+ (Fcall_interactively): Do not test for mocklisp case.
+
+ * eval.c: Remove variables `Qmocklisp_arguments',
+ `Vmocklisp_arguments' and `Qmocklisp'. Remove prototype of ml_apply.
+ (Fprogn, Fwhile, Fcommandp, Feval, Ffuncall, funcall_lambda):
+ Do not test for mocklisp case.
+ (Fwhile): Remove unused variable `tem'.
+ (syms_of_eval): Remove variable `moclisp-arguments'.
+
+ * data.c (wrong_type_argument): Remove mocklisp case.
+
+ * doc.c (Fdocumentation): Remove mocklisp case.
+
+ * emacs.c (main): Do not call syms_of_mocklisp.
+
+2001-12-21 Richard M. Stallman <rms@gnu.org>
+
+ * xfns.c (compute_tip_xy): If tooltip won't fit on the screen
+ to the left or to the right of the pointer, put it against
+ the left screen edge.
+
+2001-12-21 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (distclean): Remove .gdbinit if we are building
+ outside the source tree.
+
+2001-12-19 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * w32.c (emacs_root_dir): New function.
+
+ * msdos.c (emacs_root_dir): New function.
+
+ * fileio.c (Fexpand_file_name) [DOS_NT]: Use the root directory
+ of the current drive as the fallback for default_directory.
+
+ * dired.c (file_name_completion): Run the elements of
+ completion-ignored-extensions through ENCODE_FILE.
+
+ * lisp.h (scmp): Remove prototype, since it's now a static
+ function private to dired.c.
+
+2001-12-18 Richard M. Stallman <rms@gnu.org>
+
+ * dired.c (scmp): Function moved from minibuf.c.
+ Delete multibyte handling--used only on encoded strings.
+
+ * minibuf.c (scmp): Function moved to dired.c.
+
+ * fns.c (merge): Add QUIT call.
+
+2001-12-18 Dave Love <fx@gnu.org>
+
+ * Makefile.in (lisp, shortlisp): Add language/utf-8-lang.el,
+ language/georgian.el.
+
+2001-12-18 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * Makefile.in (lisp, shortlisp): Synchronize with changes to
+ lisp/Makefile.in:DONTCOMPILE.
+
+2001-12-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xdisp.c (window_box_height): Do not return negative values.
+ From Gerd Moellmann <gerd@gnu.org>.
+
+ * keyboard.c (head_table): Add missing braces around initializer.
+
+ * term.c (keys): Likewise.
+
+ * xfns.c (x_frame_parms, visual_classes): Likewise.
+
+2001-12-17 Sam Steingold <sds@gnu.org>
+
+ * coding.c (DECODE_COMPOSITION_END): Fixed a typo in the last
+ patch (COMPOSING_P, not COMPOSING).
+
+2001-12-17 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fcompare_buffer_substrings): Add QUIT to main loop.
+
+ * coding.c (code_convert_region): Update coding->cmp_data->char_offset
+ before calling decode_coding.
+
+ * charset.c (Fdefine_charset): Call Fupdate_coding_systems_internal.
+
+ * coding.c (DECODE_COMPOSITION_END): Check for ! COMPOSING_P (coding)
+ instead of only for COMPOSITION_DISABLED.
+
+2001-12-16 Richard M. Stallman <rms@gnu.org>
+
+ * alloc.c (pure_alloc): After overflow, allocate just a small block.
+
+ * Makefile.in (xmenu.o, xterm.o, fontset.o): Depend on buffer.h.
+
+ * buffer.h (struct buffer): New field `display_error_modiff'.
+ * buffer.c (reset_buffer): Initialize `display_error_modiff'.
+
+ * window.c (Frecenter): Clear display_error_modiff field.
+
+ * xdisp.c (redisplay_window_0, redisplay_window_1): New functions.
+ Call redisplay_window, but not if display_error_modiff field says no.
+ (redisplay_window_error): New function.
+ (displayed_buffer): New variable.
+ (redisplay_internal, redisplay_windows): Call the new functions
+ instead of redisplay_window directly.
+
+2001-12-15 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (syms_of_keyboard) <double-click-fuzz>: Doc fix.
+
+2001-12-14 Andrew Innes <andrewi@gnu.org>
+
+ * makefile.w32-in (EMACSLOADPATH): Define.
+ ($(EMACS)): Run `list-load-path-shadows' after dumping Emacs.
+ (bootstrap-temacs): Remove dependency on bootstrap-clean.
+
+2001-12-13 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xfns.c (x_report_frame_params): Make the scroll-bar-width frame
+ parameter have a numeric value all the time.
+
+ * w32fns.c (x_report_frame_params): Likewise.
+
+2001-12-12 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fwrite_region): Doc fix.
+
+ * xdisp.c (CLEAR_FACE_CACHE_COUNT): Redefine as 500.
+ (redisplay_internal): Call clear_image_cache only for window terminals.
+
+2001-12-12 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (move_it_vertically_backward): Change heuristic
+ for the case that we didn't move far enough initially.
+
+ * window.c (Frecenter): Simplify computation in the case of window
+ system frames and ARG < 0; use window_box_height.
+
+2001-12-11 Richard M. Stallman <rms@gnu.org>
+
+ * Makefile.in, mem-limits.h, dispnew.c, emacs.c, fileio.c:
+ * process.c, sysdep.c, unexec.c: Test GNU_LINUX, not LINUX.
+
+2001-12-11 Andrew Innes <andrewi@gnu.org>
+
+ * insdel.c (make_gap) [DOUG_LEA_MALLOC]: Call make_gap_smaller if
+ arg is negative.
+
+2001-12-11 Richard M. Stallman <rms@gnu.org>
+
+ * m/hp800.h: Split the __hpux conditional into the parts
+ that are right for GNU/Linux too and the parts that are not.
+ Use the former if GNU_LINUX.
+ (HAVE_ALLOCA, LOAD_AVE_TYPE, LOAD_AVE_CVT): New defs for GNU/Linux.
+
+ * s/gnu-linux.h (GNU_LINUX): Defined.
+
+2001-12-11 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * macros.c, msdos.c, w16select.c: Change doc-string comments to
+ `new style' [w/`doc:' keyword].
+
+2001-12-10 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (w32_free_submenu_strings): Clear menu item struct
+ before using.
+
+2001-12-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * dosfns.c: Change doc-string comments to `new style' [w/`doc:'
+ keyword].
+
+2001-12-09 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * dosfns.c (dos-display-scancodes, dos-decimal): Doc fix.
+
+ * s/hpux10.h (srand48): Don't undefine.
+
+2001-12-09 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (_widget_value): Make `help' field a Lisp_Object.
+ Add comment to explain where the struct came from.
+ (single_submenu, w32_menu_show): Set `help' field as Lisp_Object.
+ (add_menu_item): Process pop-up menus first to avoid memory leak.
+ (add_menu_item, w32_menu_display_help): Use `help' field as
+ Lisp_Object.
+ (w32_free_submenu_strings): Only free owner-drawn strings.
+
+2001-12-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * COPYING: Moved back.
+
+ * charset.c (char_to_string_1, translate_char, Fdefine_charset):
+ Add parentheses around && within ||.
+
+ * indent.c (compute_motion): Likewise.
+
+ * intervals.c (merge_properties_sticky): Likewise.
+
+ * coding.c (setup_coding_system, shrink_encoding_region)
+ (Fdecode_sjis_char): Likewise.
+
+2001-12-07 Andreas Schwab <schwab@suse.de>
+
+ * xdisp.c (display_mode_element): Don't read past end of string if
+ it ends with '%'.
+
+ * alloc.c (inhibit_garbage_collection): Don't exceed value an int
+ can hold.
+
+ * data.c (Vmost_positive_fixnum, Vmost_negative_fixnum):
+ Rename from most_positive_fixnum and most_negative_fixnum, resp., and
+ type changed to Lisp_Object.
+ (syms_of_data): DEFVAR_LISP them.
+
+2001-12-07 Richard M. Stallman <rms@gnu.org>
+
+ * callproc.c (init_callproc): Set Vdata_directory based on the source
+ location whenever Emacs was run uninstalled.
+
+2001-12-06 Paul Eggert <eggert@twinsun.com>
+
+ * config.in (HAVE_WORKING_VFORK): New #undefs.
+ * process.c (create_process):
+ Use HAVE_WORKING_VFORK, not HAVE_VFORK.
+ * m/cnvrgnt.h (HAVE_VFORK): Remove #define.
+ * m/ibm370aix.h (HAVE_VFORK): Remove #undef.
+ * m/ibmps2-aix.h (HAVE_VFORK): Remove #define.
+ * m/intel386.h (HAVE_VFORK): Likewise.
+ * m/mips-siemens.h (HAVE_VFORK): Likewise.
+ * m/mips.h (HAVE_VFORK): Likewise.
+ * s/freebsd.h (vfork): Remove #define.
+ * s/lynxos.h (HAVE_VFORK): Remove #undef.
+ * s/usg5-4-2.h: Fix comment about vfork.
+
+2001-12-06 Richard M. Stallman <rms@gnu.org>
+
+ * s/hpux10.h (random): Add undef.
+ (HAVE_RANDOM): Define it just once.
+
+2001-12-06 Stefan Monnier <monnier@cs.yale.edu>
+
+ * eval.c: Undo last change: the standard syntax is not wanted.
+
+2001-12-06 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xterm.c (x_free_frame_resources) [USE_X_TOOLKIT]: Remove all the
+ scroll bars of the frame before deleting the frame itself. If the
+ frame has a widget, delete the frame with XtDestroyWidget, and do
+ not call XDestroyWindow before that.
+
+2001-12-06 Kim F. Storm <storm@cua.dk>
+
+ * xfns.c (x_report_frame_params): Return actual fringe widths.
+
+ * w32fns.c (x_report_frame_params): Return actual fringe widths.
+
+2001-12-05 Andrew Innes <andrewi@gnu.org>
+
+ * alloc.c (Fgarbage_collect): Shrink buffer gaps that are
+ excessively large.
+
+ * insdel.c (make_gap_larger): New function.
+ (make_gap_smaller): New function.
+ (make_gap) [USE_MMAP_FOR_BUFFERS || REL_ALLOC]:
+ Call make_gap_smaller if arg is negative.
+
+2001-12-04 Stefan Monnier <monnier@cs.yale.edu>
+
+ * keyboard.c (kbd_buffer_store_event): Fix interrupt_signal prototype.
+ Pass a dummy argument when calling interrupt_signal.
+ (parse_menu_item): Mark disabled items before checking for empty def.
+ (read_char_minibuf_menu_prompt): Make safety more visible.
+ (read_key_sequence): Add a `first_unbound' variable.
+ Use it to detect C-c ESC ESC ESC ESC ... cases and drop the
+ unbound prefix as soon as we can detect it.
+
+ * doc.c (Fsnarf_documentation): Add prototype.
+ (get_doc_string): Handle negative arguments.
+ (Fdocumentation): Use AREF and ASIZE.
+ Move the calls to get_doc_string to a single place.
+ Don't confuse an interactive-spec for a docstring reference.
+ (Fdocumentation_property): Take advantage of the fact that
+ get_doc_string now ignores the sign of the docstring position.
+
+ * eval.c: Use standard syntax for usage in docstrings.
+
+2001-12-03 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xdisp.c (syms_of_xdisp): Make `tool-bar-button-relief' an option.
+
+2001-12-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xterm.c (x_draw_image_relief): Use predefined macro instead of
+ constant when the value of `tool_bar_button_relief' is negative.
+
+2001-12-02 Richard M. Stallman <rms@gnu.org>
+
+ * xmenu.c (menu_highlight_callback): Use `help' field as Lisp_Object.
+ (single_submenu, xmenu_show): Set `help' field as Lisp_Object.
+
+ * fileio.c (read_non_regular): Delete Fsignal call.
+
+2001-12-01 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lisp.h (run_hook_list_with_args): Undo last change.
+
+2001-12-01 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_fringe_bitmap): Always undo clipping.
+
+2001-12-01 Jason Rumney <jasonr@gnu.org>
+
+ * window.c (Qleft_fringe, Qright_fringe): Remove. Now in frame.c.
+
+ * w32term.h (WM_MOUSELEAVE, TME_LEAVE, TRACKMOUSEEVENT)
+ [!WM_MOUSELEAVE]: Define.
+
+ * w32menu.c (current_popup_menu, get_menu_item_info):
+ (set_menu_item_info): New vars.
+ (set_frame_menubar): Doc fix clarifying GC interaction with menus.
+ (w32_menu_show): Set current_popup_menu.
+ (add_menu_item): Allocate new strings for owner-drawn menu items
+ and help strings.
+ Use owner-draw for disabled menu items again.
+ (w32_menu_display_help): Ignore owner-drawn items and popup menus.
+ (w32_free_submenu_strings, w32_free_menu_strings): New functions.
+
+ * w32fns.c (trackmouse_window, track_mouse_event_fn): New vars.
+ (w32_wnd_proc) <WM_MOUSEMOVE>: Notice when mouse enters frame.
+ <WM_EXITMENULOOP>: Free menu strings.
+ <WM_MOUSELEAVE>: Stop tracking mouse.
+ (x_create_tip_frame): Specify no minibuffer, modeline or fringes.
+
+ * w32term.c (w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
+ and mouse face.
+
+2001-12-01 Kim F. Storm <storm@cua.dk>
+
+ The following changes add left-fringe and right-fringe
+ frame parameters to adjust fringe widths, or remove one or
+ both fringes.
+
+ * frame.h (struct frame): Remove trunc_area_pixel_width and
+ trunc_area_cols fields.
+ (Qleft_fringe, Qright_fringe): Declare.
+ (FRAME_RIGHT_FRINGE_WIDTH): New macro.
+
+ * frame.c (Qleft_fringe, Qright_fringe): New vars.
+ (syms_of_frame): Initialize them.
+
+ * window.c (coordinates_in_window): Handle separate left and right
+ fringe widths.
+
+ * xterm.h (struct x_output): Add left_fringe_width, right_fringe_width,
+ and fringe_cols fields.
+ (FRAME_FRINGE_BITMAP_WIDTH, FRAME_FRINGE_BITMAP_HEIGHT): Remove macros.
+ (FRAME_X_FRINGE_COLS): Use fringe_cols field.
+ (FRAME_X_FRINGE_WIDTH): Use fringes_extra field.
+ (FRAME_X_LEFT_FRINGE_WIDTH): Use left_fringe_width field.
+ (FRAME_X_RIGHT_FRINGE_WIDTH): Use right_fringe_width field.
+ (x_compute_fringe_widths): Add prototype.
+
+ * xterm.c (zv_height, zv_bits, zv_period): Changed zv bitmap to
+ fill fringe evenly with small dashes.
+ (x_draw_fringe_bitmap): Clear background if necessary. Align and
+ clip the new ZV bitmap to avoid jitter between rows.
+ (x_draw_row_fringe_bitmaps): Rely on x_draw_fringe_bitmap to clear
+ background. Don't draw fringe bitmaps if fringe width is zero.
+ (x_compute_fringe_widths): New function.
+ (x_new_font, x_set_window_size_1): Use it.
+
+ * xfns.c (x_frame_parms): Add `left-fringe' and `right-fringe' parms.
+ (x_set_frame_parameters): Process `font' parameter before other
+ parameters as fringe widths depend on it.
+ (x_set_fringe_width): New function.
+ (x_figure_window_size): Use x_compute_fringe_widths.
+ (Fx_create_frame): Process `left-fringe' and `right-fringe' frame
+ parameters.
+
+ * widget.c (set_frame_size): Use x_compute_fringe_widths.
+ (EmacsFrameSetCharSize): Ditto.
+
+ * w32term.h: Merged changes from xterm.h.
+ * w32term.c: Merged changes from xterm.c.
+ * w32fns.c: Merged changes from xfns.c.
+
+2001-11-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * COPYING: Removed.
+
+2001-11-29 Dave Love <fx@gnu.org>
+
+ * coding.c (syms_of_coding) <Qchar_coding_system>: Give it an
+ extra extra slot.
+ (detect_coding_mask): Fix call of detect_coding_iso2022.
+
+2001-11-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * fileio.c (file-name-coding-system)
+ (default-file-name-coding-system): Doc fix (links to referenced
+ variables added).
+
+2001-11-28 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lisp.h (GCPRO1, GCPRO2, GCPRO3, GCPRO4, GCPRO5):
+ Add dummy uses of gcproN variables.
+
+ * category.c (describe_category, describe_category_1)
+ (Fdescribe_categories): Remove. (Moved to lisp/help-fns.el.)
+ (syms_of_category): Don't defsubr Sdescribe_categories.
+
+2001-11-28 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Ffind_file_name_handler): Avoid initializer for `result'.
+
+ * Makefile.in (lispdir): New variable, referring to build dir.
+ (TAGS-LISP): Find Makefile in $(lispdir), not $(lispsource).
+
+2001-11-28 Andrew Innes <andrewi@gnu.org>
+
+ * w32menu.c (w32_menu_display_help): Actually add the new argument
+ OWNER.
+
+2001-11-28 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (add_menu_item): Do not use owner-draw for disabled
+ menu items. From David Ponce <dponce@wanadoo.fr>.
+ (w32_dialog_show) [HAVE_DIALOGS]: Compile whole function
+ conditionally.
+ (w32_menu_display_help): New argument OWNER. Rewritten to store a
+ help event in the owner frame's keyboard buffer.
+
+ * w32fns.c (w32_wnd_proc) <WM_MENUSELECT>: Display help directly.
+ (Fx_show_tip): Don't subtract last width from row width.
+
+ * w32term.c (w32_read_socket) <WM_MENUSELECT>: Remove.
+ (w32_read_socket): Use EQ to compare frames.
+
+2001-11-28 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_glyphs): Don't call notice_overwritten_cursor if
+ OVERLAPS_P.
+
+2001-11-28 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xdisp.c (message_dolog): Remove unused variables `gcpro2',
+ `gcpro3' and `gcpro4'.
+
+ * coding.c (decode_coding_string): Remove unused variable `gcpro1'.
+
+2001-11-28 Stefan Monnier <monnier@cs.yale.edu>
+
+ * ccl.c: Use AREF and ASIZE.
+
+2001-11-27 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lisp.h (run_hook_list_with_args): Remove.
+ (LIST_END_P): Fix call to wrong_type_argument.
+ (make_fixnum_or_float): Use EMACS_INT rather than int.
+
+2001-11-26 Stefan Monnier <monnier@cs.yale.edu>
+
+ * syntax.c (syms_of_syntax): Remove defsubr of Sdescribe_syntax.
+ (describe_syntax, describe_syntax_1, Fdescribe_syntax): Remove.
+
+ * eval.c: Use AREF and ASIZE.
+ (Ffetch_bytecode): Add the file name to the error message.
+
+ * fileio.c (Ffind_file_name_handler): Give precedence to handlers
+ which match the end of the file-name.
+ (Fsubstitute_in_file_name): Don't signal an error if $ENVVAR
+ is not a valid env var, but leave it as is instead.
+
+ * keymap.c (access_keymap): Handle t bindings like nil bindings.
+ Make nil bindings in char-tables transparent.
+ (store_in_keymap): Turn a nil binding into a t binding for char-tables.
+
+2001-11-26 Richard M. Stallman <rms@gnu.org>
+
+ * textprop.c (set_text_properties_1): Allow START, END in either order.
+ Do nothing if range is empty.
+
+ * Makefile.in (mallocobj): Simplify logic using auxiliary vars.
+
+ * Makefile.in (mostlyclean): Delete bootstrap-emacs here.
+ (clean): Not here.
+
+2001-11-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * textprop.c (set_text_properties_1): Clearly mark that the
+ interval should not be empty.
+
+ * intervals.c (graft_intervals_into_buffer):
+ Don't call set_text_properties_1 on an empty interval.
+
+2001-11-25 Richard M. Stallman <rms@gnu.org>
+
+ * unexelf.c (unexec): Index by n, not nn, when checking for ".sbss".
+
+ * callproc.c (Fcall_process): When we make a bigger buffer for bufptr,
+ don't lose the data in it.
+
+2001-11-25 Juanma Barranquero <lektu@terra.es>
+
+ * abbrev.c (Fexpand_abbrev): Use Frun_hooks instead of Vrun_hooks.
+
+ * buffer.c (Fkill_buffer): Likewise.
+
+ * print.c (temp_output_buffer_setup): Likewise.
+
+2001-11-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xfaces.c (merge_face_heights): Coerce back to int explicitly.
+
+2001-11-25 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * window.c (Fset_window_vscroll): Doc fix. From Kalle Olavi
+ Niemitalo <kon@iki.fi>.
+
+2001-11-25 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.h (FRAME_X_FRINGE_COLS): No fringe on tip frames.
+
+ * w32fns.c (x_create_tip_frame): Set frame's fringes_extra to 0.
+ (Fx_show_tip): Block input during frame creation.
+ (Fx_show_tip, Fx_hide_tip): Enable.
+
+2001-11-24 Richard M. Stallman <rms@gnu.org>
+
+ * lread.c (Fload): Detect recursive load error for more than 3
+ nestings of the same file.
+ (Vrecursive_load_depth_limit): Variable deleted.
+ (syms_of_lread) <recursive-load-depth-limit>: Variable deleted.
+
+2001-11-24 Jason Rumney <jasonr@gnu.org>
+
+ * xfns.c (compute_tip_xy): Initialize root_x and root_y from
+ mouse position if either left or top is not specified.
+
+ * w32fns.c (w32_wnd_proc) <WM_MENUSELECT>: Revert last change.
+ <WM_WINDOWPOSCHANGING>: Let tip frames resize without restriction.
+ (my_create_tip_window, Fx_show_tip): Adjust size for external border.
+ (my_create_tip_window): Assign tip_window.
+ (x_create_tip_frame): Use same defaults as X.
+ (compute_tip_xy): Remove unused variable. Use full screen width.
+ (Fx_show_tip): Do not double height. Call ShowWindow directly.
+
+ * w32term.c (x_after_update_window_line): Doc fix.
+ (w32_read_socket): Doc fix. Avoid SET_FRAME_GARBAGED for tip
+ frames.
+ <WM_SHOWWINDOW>: Redo mouse highlight when hiding tip frame.
+
+ * xdisp.c (prepare_menu_bars) [HAVE_WINDOW_SYSTEM]: Use tip_frame
+ for all Windowed systems.
+
+2001-11-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.c (IT_clear_screen): If the frame's faces are not yet
+ realized, use the initial screen colors to clear the screen.
+
+2001-11-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * textprop.c (Fset_text_properties): Remove unused variables
+ `unchanged', `prev_changed', `s' and `len'.
+
+ * search.c (Freplace_match): Remove unused variable `inslen'.
+
+ * keymap.c (access_keymap): Remove unused variables `c1' and `c2'.
+
+2001-11-22 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (x_window_to_frame): Remove irrelevant TODO comment.
+ (w32_wnd_proc) <WM_MENUSELECT>: Show help echo directly.
+ (my_create_tip_window): New function.
+ (x_create_tip_frame, compute_tip_xy): Adapt for Windows.
+ (Fx_show_tip, Fx_hide_tip) [TEST_TOOLTIPS]: Adapt for Windows.
+
+2001-11-20 Jason Rumney <jasonr@gnu.org>
+
+ * coding.h (Vw32_system_coding_system) [WINDOWSNT]: Remove.
+ (ENCODE_SYSTEM, DECODE_SYSTEM) [WINDOWSNT]: Use Vlocale_coding_system.
+
+ * w32fns.c (Vw32_system_coding_system): Remove.
+ (w32_to_x_font, x_to_w32_font): Use Vlocale_coding_system.
+
+2001-11-19 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fileio.c (Fwrite_region): Move choose_write_coding_system to
+ after build_annotations.
+
+ * syntax.c (describe_syntax): Add dummy arg.
+ (describe_syntax_1): Update call to describe_vector.
+
+ * category.c (describe_category): Add dummy arg.
+ (describe_category_1): Update call to describe_vector.
+
+ * keymap.c (Fdescribe_vector): Add `describer' parameter.
+ (describe_command, describe_translation): Add dummy second param.
+ (describe_map): Call elt_describer with two arguments.
+ (describe_vector_princ): Add `fun' parameter.
+ Call it instead of the hardcoded `princ'.
+ (describe_vector): Add arg `args'.
+ Pass it as a new second argument to elt_describer.
+
+ * keymap.h (describe_vector): Update prototype.
+
+ * frame.c: Don't include keymap.h any more.
+ (keys_of_frame): Remove.
+
+ * lisp.h (keys_of_frame): Remove declaration.
+
+ * emacs.c (main): Don't call `keys_of_frame' any more.
+
+2001-11-14 Andreas Schwab <schwab@suse.de>
+
+ * unexelf.c [!defined MAP_ANON]: Define MAP_ANON to MAP_ANONYMOUS
+ if defined, 0 otherwise.
+ (MAP_FAILED): Define if not defined and use it to test mmap failure.
+ (unexec) [!MAP_ANON]: Use /dev/zero as file to map.
+
+2001-11-19 Richard M. Stallman <rms@gnu.org>
+
+ * indent.c (current_column_1): Fix handling of scan_bytes for mb chars.
+
+2001-11-18 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (note_mouse_highlight): Fix type of variable `ignore'.
+ (x_draw_bar_cursor): If the background color of the glyph under
+ the cursor equals the frame's cursor color, use the glyph's
+ foreground color for drawing the bar cursor.
+ (x_after_update_window_line): Clear internal border in different
+ circumstances.
+ (w32_set_vertical_scroll_bar): Check for width and height > 0.
+ (w32_draw_relief_rect): Correct relief by 1 pixel.
+ (x_set_glyph_string_background_width):
+ Set extends_to_end_of_line_p if the row's fill_line_p is set and
+ drawing the last glyph with DRAW_IMAGE_{RAISED,SUNKEN}.
+ (x_display_and_set_cursor): If cursor_in_echo_area, use NO_CURSOR
+ if cursor_in_non_selected_windows is false.
+ (show_mouse_face): Clean up. Recognize overwritten cursor differently.
+ (x_draw_glyphs): Remove parameters REAL_START and REAL_END.
+ Notice if cursor gets overwritten.
+ (notice_overwritten_cursor): Renamed from
+ note_overwritten_text_cursor. Rewritten to take glyph widths
+ into account, and to take X positions as parameters.
+ (x_draw_phys_cursor_glyph): Save state of w->phys_cursor_on_p
+ around call to x_draw_glyphs.
+ (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
+ `IMAGE_BACKGROUND_TRANSPARENT' to calculate the correct background
+ color to use for image glyph reliefs.
+ (x_draw_image_relief): Accept zero tool_bar_button_relief.
+ (glyph_rect): Remove unused variable `area'.
+
+ * w32fns.c (x_set_frame_parameters): Avoid infinite recursion for
+ some items.
+ (x_set_internal_border_width): Set frame garbaged when window
+ doesn't exist yet.
+ (Fx_create_frame): Accept zero tool_bar_button_relief.
+ (x_clear_image_1, four_corners_best, image_background)
+ (image_background_transparent): New functions.
+ (xpm_format, png_format, jpeg_format, tiff_format, gif_format)
+ (gs_format): Add `:background' entry.
+ (lookup_image): Set IMG's background color if specified.
+ (pbm_load, xbm_load_image, png_load): Set IMG's background field
+ when appropriate.
+ (x_clear_image_1): Reset `background_valid' and
+ `background_transparent_valid' fields.
+ (x_build_heuristic_mask): Use IMAGE_BACKGROUND instead of
+ calculating it here. Set IMG's background_transparent field.
+ (enum xpm_keyword_index): Add XPM_BACKGROUND.
+ (enum png_keyword_index): Add PNG_BACKGROUND.
+ (enum jpeg_keyword_index): Add JPEG_BACKGROUND.
+ (enum tiff_keyword_index): Add TIFF_BACKGROUND.
+ (enum gif_keyword_index): Add GIF_BACKGROUND.
+ (enum gs_keyword_index): Add GS_BACKGROUND.
+ (pbm_load, png_load, jpeg_load, tiff_load, gif_load):
+ Pre-calculate image background color where necessary.
+ (x_create_x_image_and_pixmap, xbm_load, gs_load):
+ Use display info's n_cbits entry for screen depth.
+ (Fx_show_tip): Remove unused variables `buffer', `top',
+ `left', `max_width' and `max_height'.
+
+ * w32menu.c (w32_menu_show, push_menu_pane): Doc fixes.
+
+2001-11-18 Gerd Moellmann <gerd@gnu.org>
+
+ * puresize.h (BASE_PURESIZE): Increase to 750000.
+
+2001-11-18 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * frame.c (Fframe_live_p): Doc fix.
+
+2001-11-18 Richard M. Stallman <rms@gnu.org>
+
+ * xdisp.c (message_dolog_marker1, message_dolog_marker2)
+ (message_dolog_marker3): New static variables hold three markers.
+ (syms_of_xdisp): Initialize and staticpro them.
+ (message_dolog): Use message_dolog_marker1..3 instead of
+ allocating markers each time. Unchain them when done.
+
+2001-11-17 Richard M. Stallman <rms@gnu.org>
+
+ * doc.c (Fsnarf_documentation): Doc fix.
+
+2001-11-17 Andreas Schwab <schwab@suse.de>
+
+ * xterm.c (note_mouse_highlight): Fix type of variable `ignore'.
+
+2001-11-17 Richard M. Stallman <rms@gnu.org>
+
+ * fileio.c (Fwrite_region): Avoid initializer for Lisp_Object.
+
+2001-11-17 Jason Rumney <jasonr@gnu.org>
+
+ * xterm.c (notice_overwritten_cursor): Take care of end < 0 case.
+
+2001-11-17 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (tool_bar_item_info): Avoid calling Fget_text_property
+ with invalid position.
+
+2001-11-16 Richard M. Stallman <rms@gnu.org>
+
+ * syswait.h: Delete conditionals for HPUX7, ISC 4.1, and convex.
+
+ * s/isc4-1.h (HAVE_SYS_WAIT_H): Add #undef.
+ * s/hpux.h (HAVE_SYS_WAIT_H): Add #undef.
+ * s/hpux8.h (HAVE_SYS_WAIT_H): Define it.
+
+ * m/convex.h (HAVE_SYS_WAIT_H): Add #undef.
+
+2001-11-16 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fileio.c (build_annotations): Split off the tail.
+ (build_annotations_2): New fun. Extracted from build_annotations.
+ (Fwrite_region): Split the call to build_annotations into two
+ calls to build_annotations and build_annotations_2.
+
+2001-11-16 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * sysdep.c (wait_for_kbd_input) [VMS]: Do not call
+ clear_waiting_for_input with argument.
+
+ * xterm.h (x_update_cursor): Remove duplicated prototype.
+
+ * keyboard.h (clear_waiting_for_input): Remove duplicated prototype.
+
+ * xterm.c (waiting_for_input): Remove unnecessary declaration.
+
+ * data.c (Ftimes, Fquo, Frem, Fmod): Doc fix.
+
+2001-11-16 Stefan Monnier <monnier@cs.yale.edu>
+
+ * fileio.c (choose_write_coding_system): New fun, extracted
+ from Fwrite_region.
+ (Fwrite_region): Use it.
+
+ * eval.c (max_specpdl_size, max_lisp_eval_depth): Use EMACS_INT.
+ (funcall_lambda, run_hook_with_args): Make static and add prototype.
+ (ml_apply, find_handler_clause): Add prototype.
+
+2001-11-16 Eli Zaretskii <eliz@gnu.org>
+
+ * config.in: Add #undef HAVE_COFF_H.
+
+ * unexec.c (coff.h): Don't include unless HAVE_COFF_H is defined.
+ Required for ISC 4.1.
+
+2001-11-16 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * syswait.h (HAVE_SYS_WAIT_H): Undef for ISC 4.1. Reported by
+ Andrew Wiseman <a.wiseman@btclick.com>.
+
+2001-11-16 Kim F. Storm <storm@cua.dk>
+
+ The following changes are made to clean up the various internal
+ references to the fringes to actually use the term `fringe' for
+ them. Previously, they were called `flags areas', `bitmap areas',
+ `left/right side of windows', or implicitly as `flags' or
+ `bitmaps':
+
+ * dispextern.h (FRINGE_FACE_ID): Renamed from BITMAP_AREA_FACE_ID.
+ Comments fixed. Use renamed symbols.
+
+ * dispnew.c: Comment fix. Use renamed symbols.
+
+ * frame.h (FRAME_FRINGE_COLS): Renamed from FRAME_FLAGS_AREA_COLS.
+ (FRAME_FRINGE_WIDTH): Renamed from FRAME_FLAGS_AREA_WIDTH.
+ (FRAME_LEFT_FRINGE_WIDTH): Renamed from FRAME_LEFT_FLAGS_AREA_WIDTH.
+
+ * msdos.c: Comment fix.
+
+ * w32fns.c: Use renamed symbols.
+
+ * w32term.c: Comment fixes. Use renamed symbols.
+ (fringe_bitmap_type): Renamed from bitmap_type.
+ (NO_FRINGE_BITMAP): Renamed from NO_BITMAP.
+ (w32_draw_fringe_bitmap): Renamed from w32_draw_bitmap.
+ (x_draw_row_fringe_bitmaps): Renamed from x_draw_row_bitmaps.
+
+ * w32term.h: Comment fixes. Use renamed symbols.
+ (fringes_extra): Renamed from flags_areas_extra.
+ (FRAME_FRINGE_BITMAP_WIDTH): Renamed from FRAME_FLAGS_BITMAP_WIDTH.
+ (FRAME_FRINGE_BITMAP_HEIGHT): Renamed from FRAME_FLAGS_BITMAP_HEIGHT.
+ (FRAME_X_FRINGE_COLS): Renamed from FRAME_X_FLAGS_AREA_COLS.
+ (FRAME_X_FRINGE_WIDTH): Renamed from FRAME_X_FLAGS_AREA_WIDTH.
+ (FRAME_X_LEFT_FRINGE_WIDTH):
+ Renamed from FRAME_X_LEFT_FLAGS_AREA_WIDTH.
+ (FRAME_X_RIGHT_FRINGE_WIDTH):
+ Renamed from FRAME_X_RIGHT_FLAGS_AREA_WIDTH.
+
+ * widget.c: Use renamed symbols.
+
+ * window.c: Comment fixes. Use renamed symbols.
+ (coordinates-in-window-p): Doc fix.
+
+ * xdisp.c: Comment fixes. Use renamed symbols.
+
+ * xfaces.c (realize_basic_faces): Use FRINGE_FACE_ID.
+
+ * xfns.c: Use renamed symbols.
+
+ * xterm.c: Comment fixes. Use renamed symbols.
+ (fringe_bitmap_type): Renamed from bitmap_type.
+ (NO_FRINGE_BITMAP): Renamed from NO_BITMAP.
+ (x_draw_fringe_bitmap): Renamed from x_draw_bitmap.
+ (x_draw_row_fringe_bitmaps): Renamed from x_draw_row_bitmaps.
+
+ * xterm.h: Comment fixes. Use renamed symbols.
+ (fringes_extra): Renamed from flags_areas_extra.
+ (FRAME_FRINGE_BITMAP_WIDTH): Renamed from FRAME_FLAGS_BITMAP_WIDTH.
+ (FRAME_FRINGE_BITMAP_HEIGHT): Renamed from FRAME_FLAGS_BITMAP_HEIGHT.
+ (FRAME_X_FRINGE_COLS): Renamed from FRAME_X_FLAGS_AREA_COLS.
+ (FRAME_X_FRINGE_WIDTH): Renamed from FRAME_X_FLAGS_AREA_WIDTH.
+ (FRAME_X_LEFT_FRINGE_WIDTH):
+ Renamed from FRAME_X_LEFT_FLAGS_AREA_WIDTH.
+ (FRAME_X_RIGHT_FRINGE_WIDTH):
+ Renamed from FRAME_X_RIGHT_FLAGS_AREA_WIDTH.
+
+2001-11-15 Jason Rumney <jasonr@gnu.org>
+
+ * w32menu.c (add-menu-item): Make help_echo and radio buttons
+ work for most menu items. From David Ponce
+ <david.ponce@wanadoo.fr>.
+
+2001-11-15 Gerd Moellmann <gerd@gnu.org>
+
+ * xfns.c (x_set_frame_parameters): Revert change of 2001-11-07.
+ Some x_set_* function expect to be called even if old and new
+ value are equal.
+
+ * xdisp.c (build_desired_tool_bar_string): Accept zero
+ tool_bar_button_relief.
+
+ * xfns.c (Fx_create_frame): Accept zero tool_bar_button_relief.
+
+ * xterm.c (x_draw_image_relief): Accept zero tool_bar_button_relief.
+
+ * xterm.c (x_draw_bar_cursor): If the background color of the
+ glyph under the cursor equals the frame's cursor color, use
+ the glyph's foreground color for drawing the bar cursor.
+
+ * dispnew.c (direct_output_forward_char): Fix character/byte
+ position comparison.
+
+2001-11-15 Miles Bader <miles@gnu.org>
+
+ * editfns.c (find_field): Add BEG_LIMIT and END_LIMIT parameters.
+ (Fdelete_field, Ffield_string, Ffield_string_no_properties):
+ Update arguments to find_field.
+ (Ffield_beginning, Ffield_end): Add LIMIT param, pass to find_field.
+ (Fconstrain_to_field): Use LIMIT arg to shorten search time.
+ * lisp.h (Ffield_beginning, Ffield_end): Update EXFUN decl.
+ * minibuf.c (Fminibuffer_prompt_end): Update args to Ffield_end.
+
+2001-11-14 Richard M. Stallman <rms@gnu.org>
+
+ * editfns.c (Fpropertize): Allow call with 1 arg.
+
+ * dispextern.h (image_background, image_background_transparent):
+ Conditionalize on HAVE_X_WINDOWS.
+
+2001-11-13 Richard M. Stallman <rms@gnu.org>
+
+ * print.c (Fprin1_to_string): Doc fix.
+
+ * sunfns.c (Fsun_change_cursor_icon): Doc fix.
+
+ * floatfns.c (Fceiling, Ffloor): Doc fixes.
+
+ * filelock.c (Funlock_buffer, Ffile_locked_p): Doc fixes.
+
+ * fileio.c (Ffile_accessible_directory_p): Doc fix.
+
+ * eval.c (syms_of_eval): Doc fix.
+
+ * coding.c (syms_of_coding): Doc fix.
+
+ * doc.c (Fsnarf_documentation): Doc fix.
+
+ * dispnew.c (syms_of_display): Doc fix.
+
+ * category.c (Fget_unused_category): Doc fix.
+
+ * buffer.c (syms_of_buffer): Doc fixes.
+
+2001-11-14 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * print.c (prin1, print): Doc fix.
+
+2001-11-14 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * fontset.h: Remove declarations of variables
+ `Vhighlight_wrong_size_font' and `Vclip_large_size_font'.
+
+ * fontset.c: Remove variables `Vhighlight_wrong_size_font' and
+ `Vclip_large_size_font'.
+
+2001-11-13 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c: Doc fix.
+
+2001-11-13 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xfaces.c (Fface_attributes_as_vector): Doc fix.
+
+ * fns.c: Doc fix.
+
+ * emacs.c: Doc fix.
+
+ * coding.c: Doc fix.
+
+ * cmds.c, composite.c, dired.c, doc.c, filelock.c, floatfns.c,
+ * fontset.c, insdel.c, keymap.c: Change doc-string comments to
+ `new style' [w/`doc:' keyword].
+
+2001-11-12 Richard M. Stallman <rms@gnu.org>
+
+ * xterm.c (XTread_socket): Don't update focus for EnterNotify or
+ LeaveNotify events. Only FocusIn and FocusOut do that now.
+ (x_display_and_set_cursor): Do display hollow cursors in active
+ minibuffer windows when they are not selected.
+
+2001-11-12 Jason Rumney <jasonr@gnu.org>
+
+ * w32console.c, w32fns.c, w32menu.c, w32proc.c, w32select.c,
+ * w32term.c: Change doc-string comments to `new style'
+ [w/`doc:' keyword]. Doc fixes.
+
+ * w32fns.c: Don't define max.
+ (Fx_open_connection): Only execute once.
+
+2001-11-12 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * ccl.c: Change macros to use do-while block instead of if-else.
+ Use braces to follow GNU Coding Standards.
+
+2001-11-11 Richard M. Stallman <rms@gnu.org>
+
+ * sysdep.c (child_setup_tty): Don't clear ICRNL or INLCR.
+
+ * lread.c (read_escape): Use end_of_file_error for reporting eof.
+
+ * insdel.c (replace_range): Use adjust_markers_for_replace
+ instead of adjust_markers_for_delete and adjust_markers_for_insert.
+
+ * intervals.h (set_text_properties, set_text_properties_1): Declare.
+
+ * textprop.c (set_text_properties_1): New subroutine
+ broken out of set_text_properties.
+ (set_text_properties): Use set_text_properties_1.
+
+ * intervals.c (graft_intervals_into_buffer):
+ Use set_text_properties_1 to clear out properties.
+
+ * search.c (Freplace_match): Use replace_range to insert
+ and delete. Don't request property inheritance from
+ surrounding text.
+
+2001-11-10 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (enum_font_cb2): Use leading @ on face name to detect
+ vertical fonts. Allow them if face name is explicitly specified.
+ Do not give up if we find a font that cannot be converted to an xlfd.
+
+2001-11-10 Gerd Moellmann <gerd@gnu.org>
+
+ * unexelf.c (unexec): Use mmap/munmap to allocate buffers
+ instead of malloc/free.
+
+2001-11-09 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xfaces.c (merge_face_vectors): Use braces to follow GNU
+ Coding Standards.
+ (Finternal_set_lisp_face_attribute): Likewise.
+
+ * buffer.c (Fbury_buffer): Likewise.
+
+ * indent.c (current_column_1): Remove unused variable `prev_col'.
+
+ * coding.c (encode_coding): Use precomputed value of `src'.
+ (encode_coding): Remove unused variable `src_end'.
+ (code_convert_region): Remove unused variables `count'.
+
+2001-11-07 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_display_and_set_cursor): Do not move system caret
+ if cursor_glyph is NULL.
+
+2001-11-07 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keymap.c (access_keymap): Fix compilation error.
+
+2001-11-07 Miles Bader <miles@gnu.org>
+
+ * xfns.c (x_set_frame_parameters): Avoid infinite recursion.
+
+2001-11-07 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * intervals.c (graft_intervals_into_buffer):
+ Remove #ifdef'd-out code.
+ (graft_intervals_into_buffer): Remove unused variable `middle'.
+
+ * lread.c (Feval_region): Remove obsolete #ifdef'd-out
+ code (eval-current-buffer).
+ Change doc-string comments to `new style' [w/`doc:' keyword].
+
+2001-11-06 Richard M. Stallman <rms@gnu.org>
+
+ * keymap.c (access_keymap): Don't use initializers on Lisp_Object.
+
+2001-11-06 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lread.c (read1): Fix behavior with nested backquoting.
+
+ * keyboard.c (make_lispy_event): Check integerness and fix
+ Lisp_Object/int mixup.
+
+2001-11-06 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * fns.c (copy_hash_table): Remove unused variable `v'.
+
+ * fontset.c (fontset_font_pattern): Remove unused variable
+ `family_registry'.
+
+ * indent.c (current_column_1): Remove unused variable `prev_col'.
+
+2001-11-05 Richard M. Stallman <rms@gnu.org>
+
+ * m/news-risc.h (BROKEN_PROTOTYPES): Defined.
+
+ * buffer.c (Fkill_buffer): Don't delete auto save file
+ if buffer is modified.
+
+2001-11-05 Andrew Innes <andrewi@gnu.org>
+
+ * w32proc.c (Fw32_set_keyboard_layout): Use CHECK_NUMBER_CAR and
+ CHECK_NUMBER_CDR.
+
+2001-11-05 Richard M. Stallman <rms@gnu.org>
+
+ * unexelf.c (unexec): Minor changes; clean up comments.
+
+2001-11-05 Sam Steingold <sds@gnu.org>
+
+ * w32term.c (x_display_and_set_cursor): Fix w32 compilation error.
+
+2001-11-05 Andreas Schwab <schwab@suse.de>
+
+ * sound.c (sound_perror): Save errno from being clobbered.
+
+2001-11-05 Dale Hagglund <rdh@yottayotta.com>
+
+ * unexelf.c (unexec): Don't use `mmap'. Instead, read and write
+ the program image directly.
+
+2001-11-05 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * buffer.h (Fbuffer_local_value): Add prototype.
+
+2001-11-04 Richard M. Stallman <rms@gnu.org>
+
+ * buffer.c (Fbuffer_local_value): Remove extra args from CHECK_SYMBOL
+ and CHECK_BUFFER.
+
+ * keyboard.c (read_char): Use Fcar and Fcdr, not Fnth.
+ (record_char): Likewise.
+
+ * keyboard.c (make_lispy_event): Don't insist a drag event must
+ move to a different buffer position. Instead, check for moving at
+ least double_click_fuzz.
+
+ * fns.c (Fmake_hash_table): Use XCAR and XCDR, not Fnth and Flength.
+
+ * keyboard.c (echo-area-clear-hook): Undo Oct 29 change.
+
+ * indent.c (current_column_1, Fmove_to_column): Separate the code
+ for display-table glyphs from the code for buffer text, to fix
+ bugs in the former.
+
+2001-11-04 Michael Welsh Duggan <md5i@cs.cmu.edu>
+
+ * buffer.c (Fbuffer_local_value): New function.
+ (syms_of_buffer): Defsubr it.
+
+ * xterm.c, w32term.c (x_display_and_set_cursor): Use buffer-local
+ value of `cursor-in-non-selected-windows'.
+
+ * lisp.h (Qcursor_in_non_selected_windows): New declaration.
+ * xdisp.c (Qcursor_in_non_selected_windows): New variable.
+ (syms_of_xdisp): Initialize it.
+
+2001-11-04 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xfns.c (Fx_create_frame): Doc fix.
+
+ * coding.c: Change doc-string comments to `new style' [w/`doc:'
+ keyword].
+
+ * eval.c (top_level_value, top_level_set): Remove commented and
+ #ifdef'd-out code.
+ (Fdefvar): Fix usage in doc-string.
+
+2001-11-03 Richard M. Stallman <rms@gnu.org>
+
+ * xfns.c: Include unistd.h, if it exists.
+
+ * editfns.c: Move the include of ctype.h after unistd.h.
+
+ * gmalloc.c: Test BROKEN_PROTOTYPES.
+
+2001-11-03 Ken Raeburn <raeburn@gnu.org>
+
+ * lisp.h (CHECK_STRING_CAR): New macro.
+ * lread.c (Fload): Use XSETCARFASTINT, XSETCDRFASTINT instead of
+ treating XCAR and XCDR as lvalues.
+ (openp): Use CHECK_STRING_CAR.
+ (read_list): Use XSETCDR instead of treating XCDR as lvalue.
+
+2001-11-03 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * s/sco5.h (sigprocmask_set): Declare as extern SIGMASKTYPE.
+ (SIGMASKTYPE): Define.
+
+ * syssignal.h (sigunblock): Don't define if already defined.
+
+2001-11-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * eval.c (debugger_may_continue, Vdebug_ignored_errors)
+ (call_debugger, Fcondition_case, skip_debugger, unbind_to):
+ Fix typos in comments.
+
+ * mocklisp.c (Fml_defun, Fml_while, Fml_substr): Remove commented
+ and #ifdef'd-out code.
+ Fix and reindent comments.
+
+ * mocklisp.h: Remove comment which is a copy of comment in mocklisp.c.
+
+ * category.h (CHECK_CATEGORY, CHECK_CATEGORY_SET): Remove unused
+ argument `i' in macros.
+
+ * frame.h (CHECK_FRAME, CHECK_LIVE_FRAME): Remove unused argument
+ `i' in macros.
+
+ * lisp.h (CHECK_STRING_OR_BUFFER, CHECK_HASH_TABLE, CHECK_LIST)
+ (CHECK_STRING, CHECK_CONS, CHECK_SYMBOL, CHECK_CHAR_TABLE)
+ (CHECK_VECTOR, CHECK_VECTOR_OR_CHAR_TABLE, CHECK_BUFFER)
+ (CHECK_WINDOW, CHECK_LIVE_WINDOW, CHECK_PROCESS, CHECK_NUMBER)
+ (CHECK_NATNUM, CHECK_MARKER, CHECK_NUMBER_COERCE_MARKER)
+ (CHECK_FLOAT, CHECK_NUMBER_OR_FLOAT)
+ (CHECK_NUMBER_OR_FLOAT_COERCE_MARKER, CHECK_OVERLAY)
+ (CHECK_NUMBER_CAR, CHECK_NUMBER_CDR): Remove unused argument `i'
+ in macros.
+
+ * abbrev.c, alloc.c, buffer.c, bytecode.c, callint.c, callproc.c,
+ * casefiddle.c, category.c, ccl.c, charset.c, cmds.c, coding.c,
+ * composite.c, data.c, dired.c, dispnew.c, doc.c, dosfns.c, emacs.c,
+ * eval.c, fileio.c, filelock.c, fns.c, fontset.c, frame.c, frame.h,
+ * indent.c, keyboard.c, keymap.c, lread.c, macros.c, marker.c,
+ * minibuf.c, mocklisp.c, msdos.c, print.c, process.c, search.c,
+ * sunfns.c, syntax.c, textprop.c, undo.c, w16select.c, w32console.c,
+ * w32fns.c, w32menu.c, w32proc.c, w32select.c, window.c, xdisp.c,
+ * xfaces.c, xmenu.c, xselect.c: Update usage of CHECK_ macros
+ (remove unused second argument).
+
+2001-11-02 Stefan Monnier <monnier@cs.yale.edu>
+
+ * syntax.c (describe_syntax): New wrapper.
+ (Finternal_describe_syntax_value): Rename from describe_syntax.
+ Don't insert space at front and \n at the end.
+ (syms_of_syntax): Defsubr Sinternal_describe_syntax_value.
+
+ * regex.c (re_wctype): Try to fix some warnings.
+ (regcomp, regexec): Don't forget the __restrict.
+
+2001-11-02 Richard M. Stallman <rms@gnu.org>
+
+ * textprop.c (Fget_char_property): Doc fix.
+
+2001-11-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * process.c (Fstart_process): Add usage to doc-string.
+
+ * data.c (Fsetq_default): Ditto.
+
+ * callint.c (Finteractive): Ditto.
+
+2001-11-01 Stefan Monnier <monnier@cs.yale.edu>
+
+ * macros.c: Don't include keymap.h any more.
+
+2001-11-01 Richard M. Stallman <rms@gnu.org>
+
+ * data.c (Fmake_local_variable): Doc fix.
+
+ * eval.c (Frun_hooks, Frun_hook_with_args_until_failure): Doc fix.
+ (Frun_hook_with_args_until_success, Frun_hook_with_args): Doc fix.
+
+ * keymap.c (Fdescribe_buffer_bindings): Print character property
+ bindings along with or instead of the buffer local map.
+ Make the overriding maps override what they should.
+
+2001-11-01 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * window.c (grow_mini_window): Fix typo in comment.
+
+2001-11-01 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_scroll_bar_create): Check for width and height > 0.
+ (XTset_vertical_scroll_bar): Likewise.
+
+ * xfns.c (x_build_heuristic_mask): Use four_corners_best
+ instead of IMAGE_BACKGROUND.
+
+ * xfns.c (four_corners_best): Reindent.
+
+ * xfaces.c (Finternal_set_lisp_face_attribute_from_resource):
+ Handle :box so that it is possible to specify sexprs.
+
+2001-10-31 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * s/hpux11.h: New file.
+
+2001-10-31 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * emacs.c (USAGE1): Show command line option --no-window-system
+ instead of --no-windows in usage.
+ (standard_args): Rename --no-windows to --no-window-system.
+ (bug_reporting_address): Follow Emacs coding conventions.
+
+ * eval.c (Fcommandp): Doc fix.
+ Change doc-string comments to `new style' [w/`doc:' keyword].
+
+ * frame.c (Fframe_live_p): Doc fix.
+
+ * buffer.c (selective-display-ellipses): Doc fix.
+
+2001-10-31 Gerd Moellmann <gerd@gnu.org>
+
+ * lread.c (to_multibyte): Fix computation of new read_buffer_size.
+
+ * xfaces.c (realize_x_face): If C is not a single-byte character,
+ set the face's colors_copied_bitwise_p instead of the defaulted_p
+ members which have a different meaning.
+ (free_face_colors): Do nothing for a face whose colors have been
+ copied bitwise.
+
+ * dispextern.h (struct face) <colors_copied_bitwise_p>: New member.
+
+2001-10-31 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * marker.c, mocklisp.c: Change doc-string comments to `new style'
+ [w/`doc:' keyword].
+
+2001-10-31 Gerd Moellmann <gerd@gnu.org>
+
+ * fns.c (require_unwind): Return Lisp_Object.
+
+2001-10-31 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c (lucid-menu-bar-dirty-flag): Doc fix.
+ (last-input-char): Revert doc-string to be the same as the
+ doc-string of `last-input-event'.
+
+ * xdisp.c: Fix typos in comments.
+
+2001-10-31 Gerd Moellmann <gerd@gnu.org>
+
+ * window.c (grow_mini_window): Handle case that the root
+ window is already smaller than the nominal mininum height.
+
+2001-10-30 Stefan Monnier <monnier@cs.yale.edu>
+
+ * emacs.c (main): Don't call keys_of_macros any more.
+
+ * lisp.h (keys_of_macros): Remove.
+
+ * macros.c (keys_of_macros): Remove.
+
+ * xfaces.c (Fface_attribute_relative_p): Declare args.
+
+2001-10-30 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_to_x_charset): Increase size of XLFD charset buffer.
+ (enum_font_cb2): Ignore fonts with vertical orientation.
+
+2001-10-30 Richard M. Stallman <rms@gnu.org>
+
+ * keyboard.c (Finput_pending_p): Doc fix.
+
+2001-10-30 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_after_update_window_line): Don't run the code
+ clearing in borders for rows whose visible height is 0.
+
+ * xdisp.c (clear_garbaged_frames): Redraw the frame only if its
+ resized_p flag is set. If not set, use the much less flickering
+ method previously used.
+
+ * dispnew.c (change_frame_size_1): Set frame's resized_p.
+
+ * frame.h (struct frame) <resized_p>: New member.
+
+ * lread.c (to_multibyte): Ensure read_buffer is at least twice
+ as large as the number of bytes to convert.
+
+ * lread.c (to_multibyte): New function.
+ (read1): Use it.
+
+2001-10-30 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * msdos.h (FRAME_LINE_HEIGHT): Define (it's used by xmenu.c).
+
+2001-10-30 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_relief_rect): Correct bottom relief by 1 pixel.
+ (x_set_glyph_string_background_width): Set extends_to_end_of_line_p
+ if the row's fill_line_p is set and drawing the last glyph with
+ DRAW_IMAGE_{RAISED,SUNKEN}.
+
+ * xdisp.c (clear_garbaged_frames): Call Fredraw_frame.
+
+2001-10-29 Stefan Monnier <monnier@cs.yale.edu>
+
+ * xmenu.c: Include coding.h and charset.h.
+ (Fx_popup_menu): Use FRAME_PTR and FRAME_FONT and FRAME_LINE_HEIGHT.
+ (Fx_popup_dialog): Use FRAME_PTR and enum scroll_bar_part.
+ (single_submenu, xmenu_show): Use ENCODE_SYSTEM.
+ Explicitly set wv->help. Use `TRUE' rather than `True'.
+ (menu_help_callback): Use empty_string.
+
+ * w32menu.c (Fx_popup_menu): Explicitly init f, xpos, and ypos.
+ (Fx_popup_dialog): Explicitly init f.
+ (w32_menu_display_help): Use empty_string.
+
+2001-10-29 Richard M. Stallman <rms@gnu.org>
+
+ * fns.c (Frequire): Detect recursive try to require the same
+ feature 3 or more levels deep, and get error.
+ (require_unwind): New subroutine.
+ (require_nesting_list): New variable.
+ (syms_of_fns): Init and staticpro it.
+
+ * print.c (print_object): Clarify indication of insertion type.
+
+2001-10-29 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * coding.c (syms_of_coding): Document that locale-coding-system is
+ used for decoding input on X.
+
+ * window.c (Fscroll_left, Fscroll_right): Doc fix.
+
+2001-10-29 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * keyboard.c (Finput_pending_p): Fix typo in doc-string.
+ (echo-area-clear-hook): Properly DEFVAR_LISP and staticpro it.
+
+2001-10-29 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_display_and_set_cursor): If cursor_in_echo_area,
+ use NO_CURSOR if cursor_in_non_selected_windows is false.
+
+ * xfaces.c (Fface_font): Use UNSPECIFIEDP instead of NILP for
+ the slant attribute if FRAME is t.
+
+ * xfns.c (x_set_internal_border_width): Set frame garbaged
+ when X window doesn't exist yet.
+
+ * xterm.c (x_after_update_window_line): Clear internal border
+ in different circumstances.
+
+ * xterm.c (XTread_socket) <KeyPress>: Don't use
+ STRING_CHAR_AND_LENGTH if nchars == nbytes. From Kenichi Handa
+ <handa@etl.go.jp>.
+
+2001-10-28 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * m/ibms390.h: New file. From Adam Thornton
+ <athornton@sinenomine.net>.
+
+2001-10-28 Gerd Moellmann <gerd@gnu.org>
+
+ * xfns.c (x_build_heuristic_mask): Use x_alloc_image_color.
+
+ * xfns.c (x_build_heuristic_mask): Fix a bug not incrementing
+ a loop counter.
+
+2001-10-28 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * emacs.c: Use argv[0] instead of "emacs" when -t was specified.
+
+ * keyboard.c: Change doc-string comments to `new style' [w/`doc:'
+ keyword].
+ Fix typos in comments.
+
+ * emacs.c (bug_reporting_address): New function.
+ Use it when displaying usage message.
+
+ * minibuf.c (read_minibuf): Remove unused external declaration of
+ variable `Qread_only'.
+
+ * keymap.c (access_keymap): Remove unused variable `charset'.
+
+2001-10-28 Miles Bader <miles@gnu.org>
+
+ * xfaces.c (merge_face_heights): Handle TO being relative as well.
+ Remove #ifdef'd-out code.
+ (Fface_attribute_relative_p, Fmerge_face_attribute): New functions.
+ (syms_of_xfaces): Initialize them.
+
+2001-10-27 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (w32_wnd_proc) <WM_KILLFOCUS>: Destroy the system caret.
+ <WM_EMACS_DESTROY_CARET, WM_EMACS_TRACK_CARET>: Track cursor
+ position using the system caret.
+
+ * w32term.c (w32_system_caret_hwnd, w32_system_caret_width)
+ (w32_system_caret_height, w32_system_caret_x)
+ (w32_system_caret_y): New variables for tracking system caret.
+ (w32_initialize): Initialize them.
+ (x_display_and_set_cursor): Make system caret follow the active cursor.
+
+ * w32term.h (WM_EMACS_TRACK_CARET, WM_EMACS_DESTROY_CARET):
+ New messages types.
+
+ * w32term.c (note_mouse_highlight): Clear old help_echo.
+
+2001-10-27 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xterm.c: Fix typo in a comment.
+
+ * emacs.c: Fix typos in comments.
+ Remove unnecessary spaces.
+ Change doc-string comments to `new style' [w/`doc:' keyword].
+ (USAGE2): Fix typos in usage string.
+
+ * xterm.c: Fix typo in a comment.
+
+ * lisp.h (gdb_lisp_params): Remove code in #if 0 which is now in
+ emacs.c.
+
+2001-10-27 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (move_it_vertically_backward): Use 2/3 line_height
+ instead of 1/2 line_height in the heuristic for skipping
+ farther backward when target_y was not reached.
+
+ * sound.c (sound_perror): Unblock SIGIO, turn on atimers.
+ Display errno only if non-zero.
+ (sound_warning): New function.
+ (vox_configure): Don't treat failing to set sample rate as error.
+ (various places): Improve error messages.
+
+2001-10-26 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * fileio.c (Faccess_file): Run the argument filename through
+ Fexpand_file_name, before using it.
+
+ * dispnew.c (syms_of_display) <visible-bell>: Add a reference to
+ ring-bell-function. Suggested by Alf-Ivar Holm <alfh@ifi.uio.no>
+
+2001-10-26 Gerd Moellmann <gerd@gnu.org>
+
+ * insdel.c (insert_1_both): Do nothing if NCHARS == 0.
+
+ * xterm.c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
+ Fix clearing in the case of scroll bars on the right.
+
+2001-10-26 Juanma Barranquero <lektu@terra.es>
+
+ * w32gui.h (XImage): Add a dummy typedef.
+
+2001-10-26 Gerd Moellmann <gerd@gnu.org>
+
+ * xfns.c (XScreenNumberOfScreen): Fix struct to pointer comparison.
+
+2001-10-25 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * frame.c (Fframe_parameter): Fix last change.
+
+ * fileio.c: Revert last change (which removed old commented-out
+ version of expand-file-name). Add a comment that explains why
+ this old version should not be removed.
+
+2001-10-25 Gerd Moellmann <gerd@gnu.org>
+
+ * frame.c (Fframe_parameter): Fix a bug whereby some
+ ``artificial'' frame parameters, like `minibuffer' were not
+ obtained by calling Fframe_parameters.
+
+ * xterm.c (show_mouse_face): Clean up. Recognize overwritten
+ cursor differently.
+
+ * xdisp.c (move_it_vertically_backward): Compute line height
+ differently. Add heuristic to try to be more compatible to 20.x.
+
+2001-10-25 Stefan Monnier <monnier@cs.yale.edu>
+
+ * lisp.h (make_fixnum_or_float): Coerce double to int explicitly.
+
+ * editfns.c (text_property_stickiness): Fix Lisp_Object used as
+ boolean.
+
+2001-10-25 Miles Bader <miles@gnu.org>
+
+ * xfns.c (png_load): Make sure SPECIFIED_BG is a string.
+ BG is a pointer to a structure, not a structure.
+ (gif_format, png_format): Add missing commas.
+
+2001-10-24 Richard M. Stallman <rms@gnu.org>
+
+ * xfaces.c (Fface_attributes_as_vector): New function.
+ (syms_of_xfaces): Defsubr it.
+
+2001-10-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * dispnew.c (sync_window_with_frame_matrix_rows): Remove unused
+ variable `area'.
+
+2001-10-25 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * search.c (scan_newline): Remove unused variable `selective_display'.
+
+2001-10-25 Miles Bader <miles@gnu.org>
+
+ * dispextern.h (struct image): Add `background',
+ `background_valid', and `background_transparent' fields.
+ (image_background, image_background_transparent): New declarations.
+ (IMAGE_BACKGROUND, IMAGE_BACKGROUND_TRANSPARENT): New macros.
+ * xfns.c (image_background, image_background_transparent)
+ (four_corners_best): New functions.
+ (xpm_format, png_format, jpeg_format, tiff_format, gif_format)
+ (gs_format): Add `:background' entry.
+ (lookup_image): Set IMG's background color if specified.
+ (pbm_load, xbm_load_image, png_load): Set IMG's background field
+ when appropriate.
+ (x_clear_image_1): Reset `background_valid' and
+ `background_transparent_valid' fields.
+ (x_build_heuristic_mask): Use IMAGE_BACKGROUND instead of
+ calculating it here. Set IMG's background_transparent field.
+ (enum xpm_keyword_index): Add XPM_BACKGROUND.
+ (enum png_keyword_index): Add PNG_BACKGROUND.
+ (enum jpeg_keyword_index): Add JPEG_BACKGROUND.
+ (enum tiff_keyword_index): Add TIFF_BACKGROUND.
+ (enum gif_keyword_index): Add GIF_BACKGROUND.
+ (enum gs_keyword_index): Add GS_BACKGROUND.
+ (pbm_load, png_load, jpeg_load, tiff_load, gif_load):
+ Pre-calculate image background color where necessary.
+ * xterm.c (x_setup_relief_colors): Use `IMAGE_BACKGROUND' and
+ `IMAGE_BACKGROUND_TRANSPARENT' to calculate the correct background
+ color to use for image glyph reliefs.
+
+2001-10-24 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_glyphs): Don't check for cursor overwriting
+ in full-width rows.
+
+ * xterm.c (XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
+ Fix clearing of area not covered by scroll bar.
+
+2001-10-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xterm.c (x_insert_glyphs): Remove unused variables `real_end'
+ and `real_start'.
+ (x_draw_image_foreground): Remove unused variables `mask' and `xgcv'.
+ (glyph_rect): Remove unused variable `area'.
+
+2001-10-24 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c: Change #ifdef GLYPH_DEBUG to #if.
+
+ * xdisp.c (try_window_reusing_current_matrix): Use row_containing_pos.
+ (row_containing_pos): Take additional argument DY.
+ Treat rows ending in middle of char differently.
+ (display_line): Handle tabs on window systems differently.
+
+ * xterm.c, w32term.c (fast_find_position): Call row_containing_pos
+ with additional argument.
+
+ * dispextern.h (row_containing_pos): Adjust prototype.
+
+ * xdisp.c (inhibit_try_window_id, inhibit_try_window_reusing)
+ (inhibit_try_cursor_movement) [GLYPH_DEBUG]: New variables.
+ (try_window_id, try_window_reusing_current_matrix)
+ (try_cursor_movement) [GLYPH_DEBUG]: Don't run if inhibited.
+ (syms_of_xdisp) [GLYPH_DEBUG]: DEFVAR_BOOL the variables.
+
+2001-10-24 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xmenu.c: Spell the name of Emacs properly (GNU Emacs instead of
+ gnuemacs).
+ (HAVE_BOXES): Fix typo in comment.
+ (push_menu_pane): Fix typo in comment.
+
+ * xdisp.c (display_prop_string_p): Remove unused local declaration
+ of `Qwhen'.
+ (single_display_prop_string_p): Remove unused local declarations
+ of `Qwhen' and `Qmargin'.
+ (string_buffer_position): Remove unused variable `around'.
+ (store_frame_title): Remove unused variable `width'.
+
+ * window.c: Don't define max.
+ (coordinates_in_window): Remove unused variable `uy'.
+
+ * widget.c: Don't define max.
+
+ * process.c: Don't define max.
+ (create_process): Remove unused variable `buffer'.
+
+2001-10-23 Gerd Moellmann <gerd@gnu.org>
+
+ * xfaces.c (Finternal_set_lisp_face_attribute): Fix compilation error.
+
+2001-10-23 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * xfaces.c (Finternal_set_lisp_face_attribute)
+ [HAVE_WINDOW_SYSTEM]: Don't do anything for QCfont unless the
+ frame is on a windowed display.
+
+2001-10-23 Gerd Moellmann <gerd@gnu.org>
+
+ * dispnew.c (sync_window_with_frame_matrix_rows):
+ Fix handling of windows which aren't full-width, fix handling
+ of marginal areas.
+
+ * lread.c (syms_of_lread) <recursive-load-depth-limit>: Raise to 50.
+
+2001-10-23 Andreas Schwab <schwab@suse.de>
+
+ * m/macppc.h [LINUX]: Undef LD_SWITCH_SYSTEM_TEMACS and override
+ LD_SWITCH_MACHINE_TEMACS with "-Xlinker -znocombreloc".
+
+2001-10-23 Gerd Moellmann <gerd@gnu.org>
+
+ * xterm.c (x_draw_glyphs): Remove parameters READ_START and
+ REAL_END. Notice if cursor gets overwritten.
+ (notice_overwritten_cursor): Take X positions as parameters.
+ (x_draw_phys_cursor_glyph): Save state of w->phys_cursor_on_p
+ around call to x_draw_glyphs.
+
+2001-10-23 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * syntax.c (modify-syntax-entry): Fix argument names (use CHAR
+ instead of C) and usage.
+
+ * editfns.c (char-to-string): Fix argument names (use CHAR instead
+ of C) and usage.
+
+ * xfns.c (Fx_show_tip): Remove unused variables `buffer', `top',
+ `left', `max_width' and `max_height'.
+
+2001-10-23 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (display_line): For a tab continued to the next line,
+ set row's ends_in_middle_of_char_p.
+
+2001-10-22 Gerd Moellmann <gerd@gnu.org>
+
+ * xdisp.c (display_line): Fix computation of continuation lines
+ width for TABs.
+
+2001-10-22 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * xdisp.c (build_desired_tool_bar_string): Remove unused variable
+ `Qlaplace'.
+
+ * fileio.c: Remove unused code.
+
+2001-10-22 Miles Bader <miles@gnu.org>
+
+ * lisp.h (DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL)
+ (DEFVAR_INT, DEFVAR_PER_BUFFER, DEFVAR_KBOARD):
+ Remove `DOC_STRINGS_IN_COMMENTS' cases.
+
+2001-10-21 Jason Rumney <jasonr@gnu.org>
+
+ * w32term.c (x_erase_phys_cursor): Remove inverse_p again.
+
+2001-10-21 Eli Zaretskii <eliz@is.elta.co.il>
+
+ * mocklisp.c (Fml_if, Fml_provide_prefix_argument)
+ (Finsert_string): Avoid the multi-line string literals warning.
+
+2001-10-22 Miles Bader <miles@gnu.org>
+
+ * doc.c (Vhelp_manyarg_func_alist): Variable removed.
+ (Fdocumentation): Don't use it.
+ (syms_of_doc): Don't initialize it.
+
+ * keyboard.c (Ftrack_mouse): Add usage: string to doc string.
+ * print.c (Fwith_output_to_temp_buffer): Likewise.
+ * window.c (Fsave_window_excursion): Likewise.
+ * editfns.c (Fsave_excursion, Fsave_current_buffer)
+ (Fsave_restriction): Likewise.
+ * eval.c (Frun_hooks, Frun_hook_with_args)
+ (Frun_hook_with_args_until_failure)
+ (Frun_hook_with_args_until_success, Ffuncall, For, Fand, Fif)
+ (Fcond, Fprogn, Fprog1, Fprog2, Fsetq, Fquote, Ffunction, Fdefun)
+ (Fdefmacro, Fdefvar, Fdefconst, FletX, Flet, Fwhile, Fcatch)
+ (Funwind_protect, Fcondition_case): Likewise.
+ * coding.c (Ffind_operation_coding_system): Likewise.
+ * keyboard.c (Ftrack_mouse): Likewise.
+
+2001-10-21 Miles Bader <miles@gnu.org>
+
+ * fns.c (Fappend, Fconcat, Fvconcat, Fnconc, Fwidget_apply)
+ (Fmake_hash_table): Add usage: string to doc string.
+ * editfns.c (Finsert, Finsert_and_inherit, Finsert_before_markers)
+ (Fmessage, Fmessage_box, Fmessage_or_box, Fpropertize, Fformat)
+ (Fencode_time, Finsert_and_inherit_before_markers): Likewise.
+ * mocklisp.c (Finsert_string, Fml_if, Fml_provide_prefix_argument)
+ (Fml_prefix_argument_loop): Likewise.
+
+2001-10-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * fileio.c (Finsert_file_contents): Remove unused variable `gap_size'.
+
+ * sysdep.c (init_sys_modes): Change doc-string comments to `new
+ style' [w/`doc:' keyword].
+
+ * data.c, fileio.c, indent.c, print.c, search.c, sound.c,
+ * sunfns.c, textprop.c, undo.c, xselect.c: Change doc-string
+ comments to `new style' [w/`doc:' keyword].
+
+2001-10-21 Jason Rumney <jasonr@gnu.org>
+
+ * w32fns.c (Fx_file_dialog): Pass a filter to GetOpenFileName.
+
+ * w32term.c (remember_mouse_glyph): New function.
+ (w32_mouse_position): Use it.
+ (note_mouse_movement): If the mouse moved off the glyph, remember
+ its new position.
+
+ * w32term.h (struct w32_output): Correct spelling of x_compatible.
+ (w32_display_info): Add mouse_face_overlay.
+
+ * w32term.c (notice_overwritten_cursor): Renamed from
+ note_overwritten_text_cursor. Rewritten to take glyph widths into
+ account.
+ (x_y_to_hpos_vpos): Add parameter BUFFER_ONLY_P.
+ (fast_find_string_pos): New function.
+ (fast_find_position): Return the correct vpos. Add parameter
+ STOP. In the final row, stop before glyphs having STOP as object.
+ Don't consider glyphs that are not from a buffer.
+ (fast_find_position) [0]: Add a presumably more correct version
+ for after 21.1.
+ (expose_window_tree, expose_frame): Don't compute intersections here.
+ (expose_window): Do it here instead.
+ (expose_window_tree, expose_window, expose_line): Return 1 when
+ overwriting mouse-face.
+ (expose_window): If W is the window currently being updated, mark
+ the frame garbaged.
+ (expose_frame): If mouse-face was overwritten, redo it.
+ (x_use_underline_position_properties): New variable.
+ (syms_of_xterm): DEFVAR_BOOL it.
+ (x_draw_glyph_string): Add comment to use it in future.
+ (x_draw_glyph_string): Restore clipping after drawing box.
+ Fix a computation of the underline position.
+ (w32_get_glyph_string_clip_rect): Minor cleanup.
+ (x_fill_stretch_glyph_string): Remove an assertion.
+ (x_produce_glyphs): Don't convert multibyte characters
+ to unibyte characters in unibyte buffers.
+ (cursor_in_mouse_face_p): New function.
+ (x_draw_stretch_glyph_string): Use it to choose a different GC
+ when drawing a cursor within highlighted text. Don't draw
+ background again if it has already been drawn.
+ (x_draw_glyph_string_box): Don't draw a full-width
+ box just because the glyph row's full_width_p flag is set.
+ (x_draw_glyphs): Fix computation of rightmost x for
+ full-width rows.
+ (x_dump_glyph_string): Put in #if GLYPH_DEBUG.
+ (w32_draw_relief_rect): Extend left shadow to the bottom and left;
+ change bottom shadow accordingly. Some cleanup.
+ (x_update_window_end): Handle overwritten mouse face
+ also for tool bar windows.
+ (show_mouse_face): Set the glyph row's mouse_face_p flag also when
+ DRAW is DRAW_IMAGE_RAISED.
+ (clear_mouse_face): Return 1 if text with mouse face was
+ actually redrawn. Make the function static.
+ Reset dpyinfo->mouse_face_overlay otherwise note_mouse_highlight might
+ optimize away highlighting if we pass over that same overlay again.
+ (note_mouse_highlight): Call mouse_face_overlay_overlaps
+ to detect a case where we have to highlight a different region
+ despite not having left the currently highlighted region.
+ Set mouse_face_overlay in the x_display_info. Avoid changing the
+ mouse pointer shape when show_mouse_face has already done it, or
+ there is no need. Handle mouse-face and help-echo in strings.
+ (glyph_rect): New function.
+ (w32_mouse_position): Use it to raise the threshold for mouse
+ movement event generation.
+ (w32_initialize_display_info): Initialize the x_display_info's
+ mouse_face_overlay.
+ (w32_set_vertical_scroll_bar): Don't clear a zero height
+ or width area.
+ (w32_set_vertical_scroll_bar, x_scroll_bar_create): Don't configure
+ a widget to zero height.
+
+ * w32menu.c (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
+ Protect unibyte strings created by replacing their multibyte
+ equivalents in menu_items.
+ (w32_menu_show): Don't overwrite an item's name with its key
+ description in case the description is a multibyte string.
+ (single_submenu): Some cleanup.
+
+ * w32fns.c (x_laplace_read_row, x_laplace_write_row): Removed.
+ (postprocess_image): New function.
+ (lookup_image): Call it for all image types except PostScript.
+ (x_kill_gs_process): Call postprocess_image.
+ (tiff_error_handler, tiff_warning_handler): New functions.
+ (tiff_load): Install them as handlers.
+ (x_kill_gs_process): Recognize if someone has cleared the image
+ cache under us.
+ (valid_image_p): Protect better against invalid image
+ specifications. Previous code could signal an error.
+ (Fx_hide_tip, Fshow_tip): Doc fix.
+ (Fv_max_tooltip_size): New variable.
+ (syns_of_xfns): DEFVAR_LISP it.
+ (Fx_show_tip): Add parameter TEXT. Set the tip frame's root
+ window buffer to *tip* right after creating the frame. Set frame's
+ window_width. Use a maximum tooltip size specified by
+ Vx_max_tooltip_size, if that has valid contents.
+ (compute_tip_xy): Add parameters WIDTH and HEIGHT.
+ Make sure the tooltip is completely visible.
+ (x_create_tip_frame): Set tooltip buffer's truncate-lines to nil.
+ (Fx_create_frame): Adjust the frame's height for presence
+ of the tool bar before calling x_figure_window_size.
+ (x_set_tool_bar_lines): Clear the tool bar window's current matrix
+ when the window gets smaller.
+ (x_set_foreground_color): Set frame's cursor_pixel.
+ (x_set_foreground_color, x_set_background_color): Cleaned up.
+ (x_set_font): Handle case of x_new_fontset returning the same name
+ as before, although there was a change in fontsets.
+
+2001-10-21 Miles Bader <miles@gnu.org>
+
+ * data.c (Fplus, Fminus, Fmax, Ftimes, Fquo, Flogand, Flogior)
+ (Flogxor): Add usage: string to doc string.
+ * charset.c (Fstring): Likewise.
+ * callproc.c (Fcall_process_region, Fcall_process): Likewise.
+ * alloc.c (Fmake_byte_code, Fvector, Flist): Likewise.
+
+2001-10-21 Pavel Jan,Am(Bk <Pavel@Janik.cz>
+
+ * buffer.c: Reindent DEFUNs and DEFVARs with doc: keywords.
+
+ * alloc.c: Reindent DEFUNs with doc: keywords.
+
+ * abbrev.c (Finsert_abbrev_table_description): Reindent.
+
+ * frame.c: Change doc-string comments to `new style' [w/`doc:'
+ keyword].
+
+See ChangeLog.9 for earlier changes.
+
+;; Local Variables:
+;; coding: iso-2022-7bit
+;; add-log-time-zone-rule: t
+;; End:
+
+ Copyright (C) 2001, 2002, 2003, 2004, 2005,
+ 2006, 2007 Free Software Foundation, Inc.
+
+ 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 3, 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.
+
+;;; arch-tag: 5dcc435f-4038-4141-b3bf-5be51cd76bd4
diff --git a/src/ChangeLog.7 b/src/ChangeLog.7
index 514204939ee..09880efa16d 100644
--- a/src/ChangeLog.7
+++ b/src/ChangeLog.7
@@ -1481,7 +1481,7 @@
1998-05-07 Eli Zaretskii <eliz@mescaline.gnu.org>
* process.c (init_process, syms_of_process) [not subprocesses]:
- Make definition consistent with prototypes on lisp.h
+ Make definition consistent with prototypes on lisp.h.
1998-05-07 Kenichi Handa <handa@etl.go.jp>
@@ -1777,7 +1777,7 @@
* emacs.c (standard_args): Apply --unibyte/multibyte after --nw.
- * lisp.h: Include initial_obarray from lread.c
+ * lisp.h: Include initial_obarray from lread.c.
* data.c (set_internal): Test keywordness only in initial obarray.
@@ -2217,7 +2217,7 @@
* window.c (Fset_window_configuration): Fix mixing of Lisp_Object
and int.
- * sysdep.c (init_sys_modes): Fix mixing of Lisp_Object and int
+ * sysdep.c (init_sys_modes): Fix mixing of Lisp_Object and int.
* search.c (compile_pattern, compile_pattern_1): Fix mixing of
Lisp_Object and int.
@@ -2246,7 +2246,7 @@
* fileio.c (Fwrite_region): Fix mixing of Lisp_Object and int.
* editfns.c (Fchar_after, Fchar_before): Fix mixing of Lisp_Object
- and int
+ and int.
* coding.c (code_convert_region): Fix mixing of Lisp_Object and
int.
@@ -2624,7 +2624,7 @@
1998-03-21 Richard Stallman <rms@delysid.gnu.org>
* dired.c (Fdirectory_files):
- In FULL case, compute number of characters
+ In FULL case, compute number of characters.
* fns.c (substring_both, Fsubstring): Use make_specified_string.
(concat): Make string result unibyte or multibyte as appropriate.
@@ -3077,7 +3077,7 @@
1998-03-04 Kenichi HANDA <handa@etl.go.jp>
* buffer.c (Fset_buffer_multibyte): Fix arg for chars_in_text.
- Be sure not to have a multibyte sequence striding over the GAP
+ Be sure not to have a multibyte sequence striding over the GAP.
* charset.c (strwidth): Make it work for invalid bytes sequence.
(Fstring_width): Give byte length of STR to strwidth.
@@ -4166,7 +4166,7 @@
insert_from_string. Scan string by bytes and chars.
(Ftry_completion): Use size_byte while comparing.
(Fall_completions): Use size_byte while comparing.
- (test_completion):
+ (test_completion): Pass both kinds of size to oblookup.
* editfns.c (syms_of_editfns): Delete defsubr for sref.
@@ -4358,7 +4358,6 @@
(insert_1, indented_beyond_p): Decls changed.
(move_gap_both, del_range_byte, del_range_both, del_range_2)
(scan_newline, Ffile_locked_p): New decls.
- (struct Lisp_Marker):
* search.c (scan_newline): Always restore prev value of immediate_quit.
@@ -5200,7 +5199,7 @@
1997-10-21 Kenichi Handa <handa@etl.go.jp>
- * Makefile.in (xselect.o): Depend on buffer.h
+ * Makefile.in (xselect.o): Depend on buffer.h.
* coding.c (Qcoding_system_spec): Deleted.
(Vcoding_system_list, Vcoding_system_alist): New variables.
@@ -5844,7 +5843,7 @@
placed in the main popup instead of a blank-named submenu. This
seems to be an undocumented feature of x-popup-menu.
(list_of_items): New argument HMENU.
- Use 1 and 0 instead of Qt and Qnil for enable in add_menu_item
+ Use 1 and 0 instead of Qt and Qnil for enable in add_menu_item.
1997-09-02 Geoff Voelker <voelker@cs.washington.edu>
@@ -7383,7 +7382,7 @@
(x_new_fontset): If frame F has already using FONTSET, avoid the
duplicated work. Use FS_LOAD_FONT.
(x_list_fonts): Call Fassoc to search Valternate_charset_table.
- (x_load_font): Get around a buf of XListFonts
+ (x_load_font): Get around a buf of XListFonts.
1997-06-20 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
@@ -7619,7 +7618,7 @@
* Makefile.in (XOBJ, MSDOS_OBJ, SOME_MACHINE_OBJECTS): Delete xfaces.o.
(obj): Add xfaces.o.
(FACE_SUPPORT, SOME_MACHINE_LISP): Delete faces.elc.
- (shortlisp, lisp): Add faces.elc
+ (shortlisp, lisp): Add faces.elc.
* emacs.c (main): Call syms_of_xfaces whenever ! HAVE_NTGUI.
@@ -7907,7 +7906,7 @@
(r_alloc_init) [DOUG_LEA_MALLOC]: Call mallopt,
instead of setting __malloc_extra_blocks.
-Thu May 15 22:21:18 1997 Ken'ichi Handa <handa@diazepam.gnu.ai.mit.edu>
+1997-05-15 Ken'ichi Handa <handa@diazepam.gnu.ai.mit.edu>
* Makefile.in (charset.o): Add disptab.h in dependency list.
@@ -8578,13 +8577,12 @@ Thu May 15 22:21:18 1997 Ken'ichi Handa <handa@diazepam.gnu.ai.mit.edu>
* xterm.c (dumpglyphs): Clip and highlight glyphs displayed with
fonts of wrong size.
-Sun Apr 6 10:26:53 1997 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
+1997-04-06 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
* emacs.c (init_cmdargs) [MSDOS]: Make the change that sets
`installation-directory' if `info' is found as its subdirectory or
sibling, be conditioned on MSDOS (it makes trouble on Unix).
-
1997-04-05 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* coding.c (Ffind_coding_system): Doc fix.
@@ -8818,7 +8816,7 @@ Sun Apr 6 10:26:53 1997 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
* coding.c (setup_coding_system): Now, flags of ISO2022 coding
systems contains charsets instead of charset IDs. Correct setting
coding->symbol and coding->eol_type. The performance improved.
- (encode_coding) : Fix typo ("=" -> "==").
+ (encode_coding): Fix typo ("=" -> "==").
(detect_coding_iso2022, decode_coding_iso2022): Make the code
robust against invalid SI and SO.
(ENCODE_RESET_PLANE_AND_REGISTER): Argument `eol' is deleted.
@@ -8914,7 +8912,7 @@ Sun Apr 6 10:26:53 1997 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
1997-02-22 Tsugutomo ENAMI <enami@ba2.so-net.or.jp>
- * regex.c: Include charset.h and category.h
+ * regex.c: Include charset.h and category.h.
[!emacs] (BASE_LEADING_CODE_P, WORD_BOUNDARY_P, CHAR_HEAD_P)
(SINGLE_BYTE_CHAR_P, SAME_CHARSET_P, MULTIBYTE_FORM_LENGTH)
@@ -9407,7 +9405,7 @@ Sun Apr 6 10:26:53 1997 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
* emacs.c (main): Don't extend stack limit too far.
-Sun Feb 2 10:36:26 1997 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
+1997-02-02 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
* msdos.c (dos_rawgetc): When international keyboard doesn't have
to be supported, recognize Alt-key combinations even if the Alt
@@ -10403,7 +10401,7 @@ Sun Feb 2 10:36:26 1997 Eli Zaretskii <eliz@wombat.gnu.ai.mit.edu>
* xfns.c (Fx_create_frame): Default Qvertical_scroll_bars to `left'.
-Fri Sep 20 02:37:37 1996 Marcus Daniels <marcus@sayre.sysc.pdx.edu>
+1996-09-20 Marcus Daniels <marcus@sayre.sysc.pdx.edu>
* xterm.c (XTclear_end_of_line): Shift end-of-line when there is a
left-side scroll bar by FRAME_LEFT_SCROLL_BAR_WIDTH.
@@ -10710,13 +10708,13 @@ Fri Sep 20 02:37:37 1996 Marcus Daniels <marcus@sayre.sysc.pdx.edu>
(XMARKBIT): Test BITS_PER_EMACS_INT to conditionalize fast definition.
* m/alpha.h (BITS_PER_EMACS_INT): New definition.
- * s/sol2.h (LIBS_SYSTEM): Use -lkstat instead of -lelf -lkvm
+ * s/sol2.h (LIBS_SYSTEM): Use -lkstat instead of -lelf -lkvm.
* process.c (create_process): Test HAVE_SETPGID for using setpgid.
* config.in (HAVE_SETPGID): Add #undef.
- * keymap.c (syms_of_keymap): staticpro current_global_map;
+ * keymap.c (syms_of_keymap): staticpro current_global_map.
* intervals.c (get_local_map): Call indirect-function.
diff --git a/src/ChangeLog.8 b/src/ChangeLog.8
index b156e4e39f8..da95bbd8a0b 100644
--- a/src/ChangeLog.8
+++ b/src/ChangeLog.8
@@ -6,26 +6,26 @@
1999-12-31 William M. Perry <wmperry@aventail.com>
- * xfns.c (jpeg_format): Add the :data keyword
- (jpeg_image_p): JPEG is valid with :file _or_ :data
+ * xfns.c (jpeg_format): Add the :data keyword.
+ (jpeg_image_p): JPEG is valid with :file _or_ :data.
(jpeg_memory_src): Define new JPEG image source to read from a
memory buffer.
(jpeg_load): Pay attention to the :data keyword if specified.
Instantiates a jpeg_memory_src instead of jpeg_stdio_src if found.
- (png_format): Add the :data keyword
- (png_image_p): PNG is valid with :file _or_ :data
+ (png_format): Add the :data keyword.
+ (png_image_p): PNG is valid with :file _or_ :data.
(png_read_from_memory): New PNG read function to read from a
memory buffer.
(png_load): Pay attention to the :data keyword if specified.
Use png_set_read_fn() instead of png_init_io() if specified.
(tiff_format): Add the :data keyword for TIFF images.
- (tiff_image_p): TIFF is valid with :file _or_ :data
+ (tiff_image_p): TIFF is valid with :file _or_ :data.
(tiff_read_from_memory): Define new TIFF I/O functions to read
from a memory buffer.
(tiff_load): Pay attention to the :data keyword if specified.
Uses TIFFClientOpen() instead of TIFFOpen() if specified.
- (gif_format): Add the :data keyword
- (gif_image_p): GIF is valid with :file _or_ :data
+ (gif_format): Add the :data keyword.
+ (gif_image_p): GIF is valid with :file _or_ :data.
(gif_read_from_memory): New GIF input function to read from a
memory buffer.
(gif_load): Pay attention to the :data keyword. Uses DGifOpen()
@@ -237,7 +237,7 @@
1999-12-15 Eli Zaretskii <eliz@is.elta.co.il>
* dispextern.h (FACE_TTY_DEFAULT_FG_COLOR)
- (FACE_TTY_DEFAULT_BG_COLOR): New macros.
+ (FACE_TTY_DEFAULT_BG_COLOR): New macros.
* xfaces.c (Qunspecified_fg, Qunspecified_bg): New variables.
(syms_of_xfaces): Initialize and staticpro them.
@@ -561,7 +561,7 @@
(produce_glyphs): When called, it->what can be IT_COMPOSITION.
Delete codes for a composite character.
- * textprop.c (Vtext_property_default_nonsticky): New variable
+ * textprop.c (Vtext_property_default_nonsticky): New variable.
(syms_of_textprop): Declare it as a Lisp variable.
* window.c (Frecenter): Clear all caches of compositions.
@@ -687,7 +687,7 @@
1999-12-09 Dave Love <fx@gnu.org>
- * frame.h: (PIX_TYPE) [! HAVE_X_WINDOWS]: Define PIX_TYPE.
+ * frame.h (PIX_TYPE) [! HAVE_X_WINDOWS]: Define PIX_TYPE.
1999-12-08 Gerd Moellmann <gerd@gnu.org>
@@ -766,8 +766,8 @@
(tty_defined_color): New function.
(defined_color): Rewrite to support any type of frame.
(tty_color_name): New function.
- (face_color_supported_p, Fface_color_gray_p,
- Fface_color_supported_p): Support non-X frames.
+ (face_color_supported_p, Fface_color_gray_p)
+ (Fface_color_supported_p): Support non-X frames.
(load_color): Enclose the color name in quotes, in the log
messages. Remove DOS-specific version of load_color.
(realize_tty_face): Take the supported colors from
@@ -795,10 +795,10 @@
selected_frame.
(struct x_output): Remove unused members; document who uses each
member.
- (FRAME_PARAM_FACES, FRAME_N_PARAM_FACES, FRAME_DEFAULT_PARAM_FACE,
- FRAME_MODE_LINE_PARAM_FACE, FRAME_COMPUTED_FACES,
- FRAME_N_COMPUTED_FACES, FRAME_SIZE_COMPUTED_FACES,
- FRAME_DEFAULT_FACE, FRAME_MODE_LINE_FACE, unload_color): Remove
+ (FRAME_PARAM_FACES, FRAME_N_PARAM_FACES, FRAME_DEFAULT_PARAM_FACE)
+ (FRAME_MODE_LINE_PARAM_FACE, FRAME_COMPUTED_FACES)
+ (FRAME_N_COMPUTED_FACES, FRAME_SIZE_COMPUTED_FACES)
+ (FRAME_DEFAULT_FACE, FRAME_MODE_LINE_FACE, unload_color): Remove
unused macro definintions.
* msdos.c (IT_set_frame_parameters): Don't call
@@ -826,9 +826,9 @@
changed.
(Fxw_display_color_p): Renamed from Fx_display_color_p; all
callers changed.
- (x_window_to_frame, x_any_window_to_frame,
- x_non_menubar_window_to_frame, x_menubar_window_to_frame,
- x_top_window_to_frame): Use !FRAME_X_P instead of
+ (x_window_to_frame, x_any_window_to_frame)
+ (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
+ (x_top_window_to_frame): Use !FRAME_X_P instead of
f->output_data.nothing.
* xterm.h (x_defined_color): Rename from defined_color.
@@ -898,7 +898,7 @@
1999-11-28 Gerd Moellmann <gerd@gnu.org>
* systime.h (EMACS_TIME_CMP, EMACS_TIME_EQ, EMACS_TIME_NE)
- (EMACS_TIME_GT, EMACS_TIME_GE, EMACS_TIME_LT,EMACS_TIME_LE): New
+ (EMACS_TIME_GT, EMACS_TIME_GE, EMACS_TIME_LT, EMACS_TIME_LE): New
macros.
* config.in (HAVE_SETITIMER, HAVE_UALARM): New.
@@ -1211,7 +1211,7 @@
Add extern declaration for byte_stack_list.
* bytecode.c (struct byte_stack): New.
- (byte_stack_list, mark_byte_stack, relocate_byte_pcs): New
+ (byte_stack_list, mark_byte_stack, relocate_byte_pcs): New.
(BEFORE_POTENTIAL_GC, AFTER_POTENTIAL_GC): New.
(FETCH, PUSH, POP, DISCARD, TOP, MAYBE_GC): Rewritten.
(HANDLE_RELOCATION): Removed.
@@ -1378,38 +1378,38 @@
* alloc.c: Undef HIDE_LISP_IMPLEMENTATION before including
lisp.h.
- * buffer.c (Fbuffer_list, Fget_file_buffer, get_truename_buffer,
- Fbuffer_local_variables, Fother_buffer, record_buffer,
- set_buffer_internal_1, Fbury_buffer, Fkill_all_local_variables,
- swap_out_buffer_local_variables, overlays_at, overlays_in,
- overlay_touches_p, overlay_strings, recenter_overlay_lists,
- fix_overlays_in_range, fix_overlays_before, Foverlay_get,
- Foverlay_put, report_overlay_modification, evaporate_overlays):
+ * buffer.c (Fbuffer_list, Fget_file_buffer, get_truename_buffer)
+ (Fbuffer_local_variables, Fother_buffer, record_buffer)
+ (set_buffer_internal_1, Fbury_buffer, Fkill_all_local_variables)
+ (swap_out_buffer_local_variables, overlays_at, overlays_in)
+ (overlay_touches_p, overlay_strings, recenter_overlay_lists)
+ (fix_overlays_in_range, fix_overlays_before, Foverlay_get)
+ (Foverlay_put, report_overlay_modification, evaporate_overlays):
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member
references.
- * data.c (Fcar, Fcar_safe, Fcdr, Fcdr_safe, Fsetcar, Fsetcdr,
- swap_in_symval_forwarding, set_internal, default_value,
- Fset_default, Fmake_variable_buffer_local, Fmake_local_variable,
- Fmake_variable_frame_local, Flocal_variable_p,
- Flocal_variable_if_set_p, arithcompare, Fzerop, cons_to_long,
- Fnumber_to_string, float_arith_driver, Fadd1, Fsub1): Likewise.
+ * data.c (Fcar, Fcar_safe, Fcdr, Fcdr_safe, Fsetcar, Fsetcdr)
+ (swap_in_symval_forwarding, set_internal, default_value)
+ (Fset_default, Fmake_variable_buffer_local, Fmake_local_variable)
+ (Fmake_variable_frame_local, Flocal_variable_p)
+ (Flocal_variable_if_set_p, arithcompare, Fzerop, cons_to_long)
+ (Fnumber_to_string, float_arith_driver, Fadd1, Fsub1): Likewise.
* dispnew.c (Fframe_or_buffer_changed_p): Likewise.
* emacs.c (main): Likewise.
- * fontset.c (fs_load_font, fs_register_fontset,
- CACHED_FONTSET_NAME, CACHED_FONTSET_REGEX, Fquery_fontset,
- Fnew_fontset, Fset_fontset_font): Likewise.
- * frame.c (do_switch_frame, next_frame, prev_frame,
- other_visible_frames, Fdelete_frame, Fvisible_frame_list):
+ * fontset.c (fs_load_font, fs_register_fontset)
+ (CACHED_FONTSET_NAME, CACHED_FONTSET_REGEX, Fquery_fontset)
+ (Fnew_fontset, Fset_fontset_font): Likewise.
+ * frame.c (do_switch_frame, next_frame, prev_frame)
+ (other_visible_frames, Fdelete_frame, Fvisible_frame_list):
Likewise.
- * keyboard.c (read_char, help_char_p, event_to_kboard,
- kbd_buffer_get_event, timer_start_idle, timer_check,
- make_lispy_event, apply_modifiers, reorder_modifiers,
- Fevent_convert_list, lucid_event_type_list_p, menu_bar_items,
- menu_bar_one_keymap, menu_item_eval_property_1, parse_menu_item,
- tool_bar_items, read_char_x_menu_prompt, read_key_sequence,
- Fcommand_execute, Fexecute_extended_command): Likewise.
- * minibuf.c (read_minibuf, get_minibuffer, Ftry_completion,
- Fall_completions): Likewise.
+ * keyboard.c (read_char, help_char_p, event_to_kboard)
+ (kbd_buffer_get_event, timer_start_idle, timer_check)
+ (make_lispy_event, apply_modifiers, reorder_modifiers)
+ (Fevent_convert_list, lucid_event_type_list_p, menu_bar_items)
+ (menu_bar_one_keymap, menu_item_eval_property_1, parse_menu_item)
+ (tool_bar_items, read_char_x_menu_prompt, read_key_sequence)
+ (Fcommand_execute, Fexecute_extended_command): Likewise.
+ * minibuf.c (read_minibuf, get_minibuffer, Ftry_completion)
+ (Fall_completions): Likewise.
* window.c (Fset_window_margins): Likewise.
* callint.c (quotify_args): Don't explicitly use struct
@@ -1477,9 +1477,9 @@
* coding.h (emacs_strerror, Vlocale_coding_system): New decls.
- * config.in (HAVE_STDIO_EXT_H, HAVE_TM_GMTOFF, HAVE___FPENDING,
- HAVE_FTELLO, HAVE_GETLOADAVG, HAVE_MBLEN, HAVE_MBRLEN,
- HAVE_STRSIGNAL): New macros.
+ * config.in (HAVE_STDIO_EXT_H, HAVE_TM_GMTOFF, HAVE___FPENDING)
+ (HAVE_FTELLO, HAVE_GETLOADAVG, HAVE_MBLEN, HAVE_MBRLEN)
+ (HAVE_STRSIGNAL): New macros.
(BITS_PER_LONG): Default to 64 if _LP64 is defined.
<stdlib.h>: Include if HAVE_STDLIB_H is defined and NOT_C_CODE isn't.
@@ -1501,14 +1501,14 @@
emacs_memftimeu, passing ut, instead of emacs_memftime.
* emacs.c: Include <locale.h> if HAVE_SETLOCALE is defined.
- (Vmessages_locale, Vprevious_messages_locale, Vtime_locale,
- Vprevious_time_locale): New variables.
+ (Vmessages_locale, Vprevious_messages_locale, Vtime_locale)
+ (Vprevious_time_locale): New variables.
(main): Invoke setlocale early, so that initial error messages are
localized properly. But skip locale-setting if LC_ALL is "C".
Fix up locale when it's safe to do so.
(fixup_locale): Moved here from xterm.c.
- (synchronize_locale, synchronize_time_locale,
- synchronize_messages_locale): New functions.
+ (synchronize_locale, synchronize_time_locale)
+ (synchronize_messages_locale): New functions.
(syms_of_emacs): Accommodate above changes.
* fileio.c (report_file_error): Convert strerror output according
@@ -1526,9 +1526,9 @@
default these values to long, BITS_PER_LONG, and unsigned long.
(VALBITS, MARKBIT, XINT): Do not assume 32-bit EMACS_INT.
(PNTR_COMPARISON_TYPE): Default to EMACS_UINT, not to unsigned int.
- (code_convert_string_norecord, fixup_locale,
- synchronize_messages_locale, synchronize_time_locale,
- emacs_open, emacs_close, emacs_read, emacs_write): New decls.
+ (code_convert_string_norecord, fixup_locale)
+ (synchronize_messages_locale, synchronize_time_locale)
+ (emacs_open, emacs_close, emacs_read, emacs_write): New decls.
All Emacs callers of open, close, read, write changed to use
emacs_open, emacs_close, emacs_read, emacs_write.
@@ -1579,13 +1579,13 @@
s/hpux.h, s/iris3-5.h, s/iris3-6.h, s/irix3-3.h, s/osf1.h, s/rtu.h,
s/sunos4-1.h, s/unipl5-0.h, s/unipl5-2.h, s/usg5-0.h, s/usg5-2-2.h,
s/usg5-2.h, s/usg5-3.h, s/xenix.h:
- (open, close, read, write, INTERRUPTIBLE_OPEN,
- INTERRUPTIBLE_CLOSE, INTERRUPTIBLE_IO): Remove.
+ (open, close, read, write, INTERRUPTIBLE_OPEN)
+ (INTERRUPTIBLE_CLOSE, INTERRUPTIBLE_IO): Remove.
* s/sol2-5.h (_LARGEFILE_SOURCE, _FILE_OFFSET_BITS): New macros.
- * sysdep.c (sys_read, sys_write, read, write, sys_close, close,
- sys_open, open): Remove.
+ * sysdep.c (sys_read, sys_write, read, write, sys_close, close)
+ (sys_open, open): Remove.
(emacs_open, emacs_close, emacs_read, emacs_write): Always define;
the old INTERRUPTIBLE_OPEN, INTERRUPTIBLE_CLOSE, and INTERRUPTIBLE_IO
macros are no longer used.
@@ -1711,8 +1711,8 @@
1999-10-17 Miles Bader <miles@gnu.org>
* editfns.c (Qfield): New variable.
- (find_field, Ferase_field, Ffield_string,
- Ffield_beginning, Ffield_end, Fconstrain_to_field): New functions.
+ (find_field, Ferase_field, Ffield_string)
+ (Ffield_beginning, Ffield_end, Fconstrain_to_field): New functions.
(Fline_beginning_position, Fline_end_position): Constrain to any field.
(make_buffer_string_both): Remove minibuffer-prompt hack.
(syms_of_editfns): Initialize Qfield, and subr entries for
@@ -1823,9 +1823,8 @@
(Fbitmap_spec_p): Replaces Fpixmap_spec_p.
(load_pixmap): Use Fbitmap_spec_p and Qbitmap_spec_p instead of
Fpixmap_spec_p and Qpixmap_spec_p.
- (load_face_colors, check_lface_attrs,
- merge_face_vector_with_property,
- Finternal_set_lisp_face_attribute): Use Fbitmap_spec_p.
+ (load_face_colors, check_lface_attrs, merge_face_vector_with_property)
+ (Finternal_set_lisp_face_attribute): Use Fbitmap_spec_p.
(syms_of_xfaces): Initialize Qbitmap_spec_p, defsubr
Fbitmap_spec_p.
@@ -1922,8 +1921,8 @@
* xfns.c (image_error): Use add_to_log.
* xfaces.c (load_pixmap): Call add_to_log without frame parameter.
- (load_face_font_or_fontset, load_color,
- merge_face_vector_with_property): Ditto.
+ (load_face_font_or_fontset, load_color)
+ (merge_face_vector_with_property): Ditto.
* dispextern.h: Add prototype for add_to_log.
@@ -1942,8 +1941,8 @@
* window.c (window_min_size): Add parameter ignore_fixed_p.
(change_window_height): Call window_min_size with new parameter.
- (shrink_window_lowest_first, save_restore_orig_size,
- grow_mini_window, shrink_mini_window): New.
+ (shrink_window_lowest_first, save_restore_orig_size)
+ (grow_mini_window, shrink_mini_window): New.
(make_window, replace_window): Initialize orig_top and
orig_height.
(enlarge_window): Renamed from change_window_height. Make it
@@ -1991,8 +1990,8 @@
conditinally compiled section in #ifdef.
(toplevel): Include stdio.h.
- * keymap.c (Flookup_key, Faccessible_keymaps, describe_vector,
- keys_of_keymap, syms_of_keymap): Remove unused variables.
+ * keymap.c (Flookup_key, Faccessible_keymaps, describe_vector)
+ (keys_of_keymap, syms_of_keymap): Remove unused variables.
1999-09-20 Gerd Moellmann <gerd@gnu.org>
@@ -2012,8 +2011,8 @@
1999-09-19 Gerd Moellmann <gerd@gnu.org>
- * syntax.c (update_syntax_table, find_defun_start, back_comment,
- describe_syntax, skip_chars): Remove unused variables.
+ * syntax.c (update_syntax_table, find_defun_start, back_comment)
+ (describe_syntax, skip_chars): Remove unused variables.
(back_comment, forw_comment): Add braces to if-statement with
if-else as dependent statement.
@@ -2022,30 +2021,30 @@
conditional expressions.
(create_process): Put declaration of sigchld in #if 0.
(Fopen_network_stream): Removed unused variables.
- (Fopen_network_stream, wait_reading_process_input,
- wait_reading_process_input, send_process, send_process): Ditto.
+ (Fopen_network_stream, wait_reading_process_input)
+ (wait_reading_process_input, send_process, send_process): Ditto.
(toplevel): Add prototypes for set_waiting_for_input and
keyboard_bit_set.
* abbrev.c (Fexpand_abbrev): Remove unused variables.
* textprop.c (Fset_text_properties): Remove unused variables.
- (text_property_list, verify_interval_modification,
- interval_has_all_properties): Ditto.
+ (text_property_list, verify_interval_modification)
+ (interval_has_all_properties): Ditto.
* callproc.c (toplevel) [HAVE_UNISTD_H]: Include unistd.h.
(Fcall_process): Remove unused variable.
* keyboard.c (Frecursive_edit): Remove unused variable.
- (command_loop_1, safe_run_hooks, kbd_buffer_get_event,
- timer_check, make_lispy_event, menu_bar_items,
- menu_bar_one_keymap, menu_bar_item, parse_menu_item,
- parse_tool_bar_item, read_char_x_menu_prompt, read_key_sequence,
- kbd_buffer_get_event, make_lispy_event, read_char_x_menu_prompt,
- read_key_sequence): Ditto. Fread_key_sequence,
- Fread_key_sequence_vector, Fsuspend_emacs): Ditto.
+ (command_loop_1, safe_run_hooks, kbd_buffer_get_event)
+ (timer_check, make_lispy_event, menu_bar_items)
+ (menu_bar_one_keymap, menu_bar_item, parse_menu_item)
+ (parse_tool_bar_item, read_char_x_menu_prompt, read_key_sequence)
+ (kbd_buffer_get_event, make_lispy_event, read_char_x_menu_prompt)
+ (read_key_sequence): Ditto.
+ (Fread_key_sequence, Fread_key_sequence_vector, Fsuspend_emacs): Ditto.
(read_key_sequence) [GOBBLE_FIRST_EVENT]: Put local variables only
- used when GOBBLE_FIRST_EVENT is defined in #ifdef
+ used when GOBBLE_FIRST_EVENT is defined in #ifdef.
(Fexecute_extended_command): Cast XINT to long for %ld.
(toplevel) [HAVE_UNISTD_H]: Include unistd.h.
(toplevel): Include sys/types.h.
@@ -2059,8 +2058,8 @@
* buffer.h: Add prototype for r_re_alloc.
* insdel.c (copy_text): Removed unused variables.
- (count_combining_after, count_combining_after, insert_1_both,
- insert_from_string_1, insert_from_buffer_1, check_markers): Ditto.
+ (count_combining_after, count_combining_after, insert_1_both)
+ (insert_from_string_1, insert_from_buffer_1, check_markers): Ditto.
(adjust_after_replace, replace_range): Add parentheses to logical
expressions. Remove unused variables.
(CHECK_BYTE_COMBINING_FOR_INSERT): Add parentheses to logical
@@ -2108,17 +2107,17 @@
* intervals.c (rotate_right, rotate_left): Add braces to avoid
ambiguous else warning.
(split_interval_left): Remove unused variables.
- (previous_interval, adjust_intervals_for_deletion,
- set_point_both, set_point_both, set_intervals_multibyte_1): Ditto.
+ (previous_interval, adjust_intervals_for_deletion)
+ (set_point_both, set_point_both, set_intervals_multibyte_1): Ditto.
(icount, idepth, zero_length): Move into #if 0 section below
original position where these are used.
* buffer.h [REL_ALLOC]: Add prototypes for r_alloc and r_alloc_free.
* buffer.c (Fkill_buffer): Remove unused variables.
- (Fkill_buffer, overlays_at, overlays_in, recenter_overlay_lists,
- fix_overlays_in_range, Fmove_overlay, Fprevious_overlay_change,
- init_buffer_once, (syms_of_buffer): Ditto.
+ (Fkill_buffer, overlays_at, overlays_in, recenter_overlay_lists)
+ (fix_overlays_in_range, Fmove_overlay, Fprevious_overlay_change)
+ (init_buffer_once, syms_of_buffer): Ditto.
* xrdb.c (get_fallback): Remove unused variable.
(x_load_resources): Ditto. Put local variable used for Motif only
@@ -2178,15 +2177,15 @@
* xdisp.c (resize_mini_window): Don't report changed window
height if it actually hasn't changed.
- * widget.c (set_frame_size, EmacsFrameSetCharSize): Remove
+ * widget.c (set_frame_size, EmacsFrameSetCharSize): Remove
unused variables.
(mark_shell_size_user_specified): Put in #if 0 because not used.
(create_frame_gcs): Put in #if 0 because currently unused.
(first_frame_p): Ditto.
- * xmenu.c (single_menu_item, Fx_popup_menu, Fx_popup_menu,
- single_submenu, update_frame_menubar, set_frame_menubar,
- free_frame_menubar, xmenu_show, xdialog_show): Remove unused
+ * xmenu.c (single_menu_item, Fx_popup_menu, Fx_popup_menu)
+ (single_submenu, update_frame_menubar, set_frame_menubar)
+ (free_frame_menubar, xmenu_show, xdialog_show): Remove unused
variables.
* print.c (PRINTFULLP): Removed because it is no longer used and
@@ -2202,8 +2201,8 @@
1999-09-14 Ken Raeburn <raeburn@gnu.org>
- * print.c (Ferror_message_string, print_error_message,
- print_object): Use XCAR, XCDR and XFLOAT_DATA instead of explicit
+ * print.c (Ferror_message_string, print_error_message)
+ (print_object): Use XCAR, XCDR and XFLOAT_DATA instead of explicit
member access.
1999-09-14 Gerd Moellmann <gerd@gnu.org>
@@ -2222,10 +2221,10 @@
(x_set_menu_bar_lines): Put local variable used only for
non-toolkit case in #ifdef/#endif.
(x_figure_window_size): Remove unused variable(s).
- (x_figure_window_size, x_window, lookup_image,
- xbm_read_bitmap_file_data, x_build_heuristic_mask, pbm_load,
- png_load, jpeg_load, gif_load, x_create_tip_frame,
- x_create_tip_frame, Fx_show_tip, x_set_border_pixel): Ditto.
+ (x_figure_window_size, x_window, lookup_image)
+ (xbm_read_bitmap_file_data, x_build_heuristic_mask, pbm_load)
+ (png_load, jpeg_load, gif_load, x_create_tip_frame)
+ (x_create_tip_frame, Fx_show_tip, x_set_border_pixel): Ditto.
* xterm.c (x_scroll_bar_handle_click): Compile only if
not USE_TOOLKIT_SCROLL_BARS.
@@ -2235,8 +2234,8 @@
x_kill_gs_process.
* xterm.c (x_produce_glyphs): Remove unused variable(s).
- (x_alloc_nearest_color_for_widget, note_tool_bar_highlight,
- x_set_toolkit_scroll_bar_thumb): Ditto.
+ (x_alloc_nearest_color_for_widget, note_tool_bar_highlight)
+ (x_set_toolkit_scroll_bar_thumb): Ditto.
(x_scroll_bar_create): Move local variable to the
conditionally compiled section of code where it is used.
(x_scroll_bar_create): Remove unused variable(s).
@@ -2255,8 +2254,8 @@
to use do-while.
* fns.c (SXHASH_COMBINE): Add missing parentheses.
- (Fchar_table_range, Fset_char_table_default, mapcar1,
- Fyes_or_no_p, sweep_weak_hash_tables): Remove unused variable(s).
+ (Fchar_table_range, Fset_char_table_default, mapcar1)
+ (Fyes_or_no_p, sweep_weak_hash_tables): Remove unused variable(s).
* lisp.h: Add prototype for getloadavg.
@@ -2285,9 +2284,9 @@
* xdisp.c (QCfile): Move here from xfns.c.
(syms_of_xdisp): Initialize it.
(message2_nolog): Change for Lisp_Object selected_frame.
- (message3_nolog, message_with_string, message,
- setup_echo_area_for_printing, truncate_echo_area,
- prepare_menu_bars, redisplay_internal, Fdump_tool_bar_row): Ditto.
+ (message3_nolog, message_with_string, message)
+ (setup_echo_area_for_printing, truncate_echo_area)
+ (prepare_menu_bars, redisplay_internal, Fdump_tool_bar_row): Ditto.
1999-09-13 Dave Love <fx@gnu.org>
@@ -2338,11 +2337,11 @@
(Fdump_face): Ditto.
* term.c (OUTPUT): Change for Lisp_Object selected_frame.
- (OUTPUT_IF, ring_bell, set_terminal_modes, reset_terminal_modes,
- set_terminal_window, set_scroll_region, reassert_line_highlight,
- change_line_highlight, cursor_to, raw_cursor_to, clear_to_end,
- clear_end_of_line, clear_end_of_line_raw, clear_end_of_line_raw,
- encode_terminal_code, write_glyphs, term_init): Ditto.
+ (OUTPUT_IF, ring_bell, set_terminal_modes, reset_terminal_modes)
+ (set_terminal_window, set_scroll_region, reassert_line_highlight)
+ (change_line_highlight, cursor_to, raw_cursor_to, clear_to_end)
+ (clear_end_of_line, clear_end_of_line_raw, clear_end_of_line_raw)
+ (encode_terminal_code, write_glyphs, term_init): Ditto.
* sysdep.c (reset_sys_modes): Change for Lisp_Object selected_frame.
(kbd_input_ast, read_input_waiting): Ditto.
@@ -2352,10 +2351,10 @@
(read_minibuf): Ditto.
* keyboard.c (command_loop_1): Change for Lisp_Object selected_frame.
- (cmd_error_internal, command_loop_1, read_char,
- kbd_buffer_get_event, read_avail_input,
- read_char_minibuf_menu_prompt, read_key_sequence, Fsuspend_emacs,
- interrupt_signal, quit_throw_to_read_char): Ditto.
+ (cmd_error_internal, command_loop_1, read_char)
+ (kbd_buffer_get_event, read_avail_input)
+ (read_char_minibuf_menu_prompt, read_key_sequence, Fsuspend_emacs)
+ (interrupt_signal, quit_throw_to_read_char): Ditto.
* fontset.c (Ffont_info): Change for Lisp_Object selected_frame.
(Ffontset_info): DItto.
@@ -2364,8 +2363,8 @@
* dispnew.c (selected_frame): Make it a Lisp_Object.
(adjust_frame_glyphs_initially): Change for Lisp_Object selected_frame.
- (direct_output_for_insert, direct_output_forward_char,
- init_display): Ditto.
+ (direct_output_for_insert, direct_output_forward_char)
+ (init_display): Ditto.
* data.c (swap_in_symval_forwarding): Change for Lisp_Object
selected_frame.
@@ -2379,20 +2378,20 @@
(Fselected_frame): Ditto.
(Fframe_first_window): Use SELECTED_FRAME.
(Fframe_root_window): Change for Lisp_Object selected_frame.
- (Fframe_selected_window, Fset_frame_selected_window, Fnext_frame,
- Fprevious_frame, other_visible_frames, Fdelete_frame,
- Fmouse_position, Fmouse_pixel_position, Fmake_frame_visible,
- Fmake_frame_invisible, Ficonify_frame, Fraise_frame, Flower_frame,
- Fframe_parameters, Fmodify_frame_parameters, Fframe_char_height,
- Fframe_char_width, Fframe_pixel_height, Fframe_pixel_width,
- Fset_frame_height, Fset_frame_width): Ditto.
+ (Fframe_selected_window, Fset_frame_selected_window, Fnext_frame)
+ (Fprevious_frame, other_visible_frames, Fdelete_frame)
+ (Fmouse_position, Fmouse_pixel_position, Fmake_frame_visible)
+ (Fmake_frame_invisible, Ficonify_frame, Fraise_frame, Flower_frame)
+ (Fframe_parameters, Fmodify_frame_parameters, Fframe_char_height)
+ (Fframe_char_width, Fframe_pixel_height, Fframe_pixel_width)
+ (Fset_frame_height, Fset_frame_width): Ditto.
1999-09-13 Gerd Moellmann <gerd@gnu.org>
* xdisp.c (message2_nolog): Change for Lisp_Object selected_frame.
- (message3_nolog, message_with_string, message,
- setup_echo_area_for_printing, truncate_echo_area,
- prepare_menu_bars, redisplay_internal, Fdump_tool_bar_row): Ditto.
+ (message3_nolog, message_with_string, message)
+ (setup_echo_area_for_printing, truncate_echo_area)
+ (prepare_menu_bars, redisplay_internal, Fdump_tool_bar_row): Ditto.
* xmenu.c (Fx_popup_menu): Change for Lisp_Object selected_frame.
(Fx_popup_dialog): Ditto.
@@ -2406,48 +2405,48 @@
* window.c (Fminibuffer_window): Change for Lisp_Object
selected_frame.
- (Fwindow_at, Fprevious_window, window_loop, select_window_1,
- display_buffer_1, Fdisplay_buffer, temp_output_buffer_show,
- Fcurrent_window_configuration, init_window_once): Ditto.
+ (Fwindow_at, Fprevious_window, window_loop, select_window_1)
+ (display_buffer_1, Fdisplay_buffer, temp_output_buffer_show)
+ (Fcurrent_window_configuration, init_window_once): Ditto.
* frame.h (SELECTED_FRAME): New.
1999-09-12 Ken Raeburn <raeburn@gnu.org>
* category.c (word_boundary_p): Use XCAR and XCDR.
- * ccl.c (ccl_driver, resolve_symbol_ccl_program,
- Fregister_code_conversion_map): Likewise.
- * coding.c (setup_coding_system, detect_coding_system,
- Ffind_operation_coding_system, Fset_coding_priority_internal):
+ * ccl.c (ccl_driver, resolve_symbol_ccl_program)
+ (Fregister_code_conversion_map): Likewise.
+ * coding.c (setup_coding_system, detect_coding_system)
+ (Ffind_operation_coding_system, Fset_coding_priority_internal):
Likewise.
- * doc.c (get_doc_string, Fdocumentation,
- store_function_docstring): Likewise.
+ * doc.c (get_doc_string, Fdocumentation)
+ (store_function_docstring): Likewise.
* editfns.c (save_restriction_restore): Likewise.
- * eval.c (Fcond, Fmacroexpand, Fcondition_case, wants_debugger,
- skip_debugger, find_handler_clause, Fautoload, Fapply,
- run_hook_with_args, run_hook_list_with_args, Ffetch_bytecode):
+ * eval.c (Fcond, Fmacroexpand, Fcondition_case, wants_debugger)
+ (skip_debugger, find_handler_clause, Fautoload, Fapply)
+ (run_hook_with_args, run_hook_list_with_args, Ffetch_bytecode):
Likewise.
- * fileio.c (Ffind_file_name_handler, Finsert_file_contents,
- Fwrite_region, do_auto_save_unwind, Fdo_auto_save,
- Fread_file_name): Likewise.
+ * fileio.c (Ffind_file_name_handler, Finsert_file_contents)
+ (Fwrite_region, do_auto_save_unwind, Fdo_auto_save)
+ (Fread_file_name): Likewise.
* filelock.c (unlock_all_files): Likewise.
* insdel.c (Fcombine_after_change_execute): Likewise.
* intervals.c (adjust_intervals_for_insertion): Likewise.
- * keymap.c (get_keymap_1, Fkeymap_parent, Fset_keymap_parent,
- Fset_keymap_parent, fix_submap_inheritance, access_keymap,
- store_in_keymap, Fcopy_keymap, define_as_prefix,
- current_minor_maps, Faccessible_keymaps,
- accessible_keymaps_char_table, Fkey_description,
- Fwhere_is_internal, where_is_internal_2, where_is_internal_1,
- describe_buffer_bindings, describe_map_tree, shadow_lookup,
- describe_map): Likewise.
- * lread.c (Fload, load_unwind, close_load_descs, read_vector,
- read_list, init_lread): Likewise.
+ * keymap.c (get_keymap_1, Fkeymap_parent, Fset_keymap_parent)
+ (Fset_keymap_parent, fix_submap_inheritance, access_keymap)
+ (store_in_keymap, Fcopy_keymap, define_as_prefix)
+ (current_minor_maps, Faccessible_keymaps)
+ (accessible_keymaps_char_table, Fkey_description)
+ (Fwhere_is_internal, where_is_internal_2, where_is_internal_1)
+ (describe_buffer_bindings, describe_map_tree, shadow_lookup)
+ (describe_map): Likewise.
+ * lread.c (Fload, load_unwind, close_load_descs, read_vector)
+ (read_list, init_lread): Likewise.
* search.c (Fmatch_data): Likewise.
* sunfns.c (Fsun_menu_internal): Likewise.
* syntax.c (describe_syntax): Likewise.
- * undo.c (record_insert, record_delete, Fundo_boundary,
- truncate_undo_list): Likewise.
+ * undo.c (record_insert, record_delete, Fundo_boundary)
+ (truncate_undo_list): Likewise.
* vmsproc.c (child_sig): Likewise.
* editfns.c (Fformat): Use XFLOAT_DATA.
@@ -2531,63 +2530,63 @@
1999-09-12 Ken Raeburn <raeburn@gnu.org>
- * alloc.c (Fcons, pure_cons, Fpurecopy, Fgarbage_collect,
- mark_object, mark_buffer): Use XCAR and XCDR.
+ * alloc.c (Fcons, pure_cons, Fpurecopy, Fgarbage_collect)
+ (mark_object, mark_buffer): Use XCAR and XCDR.
* bytecode.c (Fbyte_code): Likewise.
* callint.c (Fcall_interactively, Fprefix_numeric_value):
Likewise.
- * callproc.c (Fcall_process, Fcall_process_region, child_setup,
- getenv_internal): Likewise.
+ * callproc.c (Fcall_process, Fcall_process_region, child_setup)
+ (getenv_internal): Likewise.
* dired.c (file_name_completion): Likewise.
- * fns.c (Fsafe_length, concat, Fcopy_alist, Fmember, Fmemq, Fassq,
- assq_no_quit, Fassoc, Frassq, Frassoc, Fdelq, Fdelete, Freverse,
- Fplist_get, Fplist_put, internal_equal, mapcar1): Likewise.
+ * fns.c (Fsafe_length, concat, Fcopy_alist, Fmember, Fmemq, Fassq)
+ (assq_no_quit, Fassoc, Frassq, Frassoc, Fdelq, Fdelete, Freverse)
+ (Fplist_get, Fplist_put, internal_equal, mapcar1): Likewise.
* indent.c (Fcompute_motion): Likewise.
- * process.c (decode_status, Fprocess_status, Fprocess_exit_status,
- list_processes_1, Fstart_process, Fopen_network_stream,
- wait_reading_process_input, read_process_output_call,
- kill_buffer_processes, sigchld_handler, exec_sentinel_unwind,
- status_notify, wait_reading_process_input): Likewise.
- * textprop.c (PLIST_ELT_P, property_value, set_properties,
- extend_property_ranges): Likewise.
+ * process.c (decode_status, Fprocess_status, Fprocess_exit_status)
+ (list_processes_1, Fstart_process, Fopen_network_stream)
+ (wait_reading_process_input, read_process_output_call)
+ (kill_buffer_processes, sigchld_handler, exec_sentinel_unwind)
+ (status_notify, wait_reading_process_input): Likewise.
+ * textprop.c (PLIST_ELT_P, property_value, set_properties)
+ (extend_property_ranges): Likewise.
* w32faces.c (Fpixmap_spec_p, merge_face_list): Likewise.
- * w32fns.c (x_window_to_frame, x_set_frame_parameters,
- x_report_frame_params, x_set_cursor_type, x_icon_type,
- x_figure_window_size, Fx_create_frame, w32_load_system_font,
- w32_load_font, enum_font_cb2, w32_list_bdf_fonts, w32_list_fonts,
- w32_list_synthesized_fonts, w32_find_ccl_program, Fx_list_fonts,
- Fw32_find_bdf_fonts, w32_find_bdf_fonts_in_dir,
- x_display_info_for_name, Fx_display_list): Likewise.
- * w32menu.c (menubar_id_to_frame, single_keymap_panes,
- Fx_popup_menu, Fx_popup_dialog): Likewise.
+ * w32fns.c (x_window_to_frame, x_set_frame_parameters)
+ (x_report_frame_params, x_set_cursor_type, x_icon_type)
+ (x_figure_window_size, Fx_create_frame, w32_load_system_font)
+ (w32_load_font, enum_font_cb2, w32_list_bdf_fonts, w32_list_fonts)
+ (w32_list_synthesized_fonts, w32_find_ccl_program, Fx_list_fonts)
+ (Fw32_find_bdf_fonts, w32_find_bdf_fonts_in_dir)
+ (x_display_info_for_name, Fx_display_list): Likewise.
+ * w32menu.c (menubar_id_to_frame, single_keymap_panes)
+ (Fx_popup_menu, Fx_popup_dialog): Likewise.
* w32proc.c (Fw32_set_keyboard_layout): Likewise.
- * w32term.c (x_window_to_scroll_bar, w32_read_socket,
- w32_term_init, x_delete_display): Likewise.
- * xfns.c (x_window_to_frame, x_any_window_to_frame,
- x_non_menubar_window_to_frame, x_menubar_window_to_frame,
- x_top_window_to_frame, x_set_frame_parameters,
- x_report_frame_params, x_set_cursor_type, x_icon_type,
- x_figure_window_size, Fx_create_frame, x_display_info_for_name,
- Fx_display_list, x_create_tip_frame): Likewise.
- * xmenu.c (menubar_id_to_frame, single_keymap_panes,
- Fx_popup_menu, Fx_popup_dialog): Likewise.
- * xselect.c (x_own_selection, x_get_local_selection,
- x_handle_selection_request, x_handle_selection_clear,
- x_clear_frame_selections, wait_for_property_change_unwind,
- wait_for_property_change, x_handle_property_notify,
- copy_multiple_data, x_get_foreign_selection,
- lisp_data_to_selection_data, clean_local_selection_data,
- x_handle_selection_notify, Fx_get_selection_internal,
- x_disown_buffer_selections): Likewise.
- * xterm.c (x_window_to_scroll_bar, XTread_socket, x_list_fonts,
- x_load_font, x_find_ccl_program, x_term_init, x_delete_display):
+ * w32term.c (x_window_to_scroll_bar, w32_read_socket)
+ (w32_term_init, x_delete_display): Likewise.
+ * xfns.c (x_window_to_frame, x_any_window_to_frame)
+ (x_non_menubar_window_to_frame, x_menubar_window_to_frame)
+ (x_top_window_to_frame, x_set_frame_parameters)
+ (x_report_frame_params, x_set_cursor_type, x_icon_type)
+ (x_figure_window_size, Fx_create_frame, x_display_info_for_name)
+ (Fx_display_list, x_create_tip_frame): Likewise.
+ * xmenu.c (menubar_id_to_frame, single_keymap_panes)
+ (Fx_popup_menu, Fx_popup_dialog): Likewise.
+ * xselect.c (x_own_selection, x_get_local_selection)
+ (x_handle_selection_request, x_handle_selection_clear)
+ (x_clear_frame_selections, wait_for_property_change_unwind)
+ (wait_for_property_change, x_handle_property_notify)
+ (copy_multiple_data, x_get_foreign_selection)
+ (lisp_data_to_selection_data, clean_local_selection_data)
+ (x_handle_selection_notify, Fx_get_selection_internal)
+ (x_disown_buffer_selections): Likewise.
+ * xterm.c (x_window_to_scroll_bar, XTread_socket, x_list_fonts)
+ (x_load_font, x_find_ccl_program, x_term_init, x_delete_display):
Likewise.
* alloc.c (make_float, make_pure_float, Fpurecopy): Use
XFLOAT_DATA.
* bytecode.c (Fbyte_code): Likewise.
- * floatfns.c (extract_float, Fexpt, Fabs, rounding_driver,
- fmod_float): Likewise.
+ * floatfns.c (extract_float, Fexpt, Fabs, rounding_driver)
+ (fmod_float): Likewise.
1999-09-11 Richard Stallman <rms@gnu.org>
@@ -2599,8 +2598,8 @@
* charset.h (GET_TRANSLATION_TABLE): Use XCDR.
* frame.h (FOR_EACH_FRAME): Use XCAR and XCDR.
(PIXEL_X_FROM_CANON_X, PIXEL_Y_FROM_CANON_Y): Use XFLOAT_DATA.
- * keyboard.h (EVENT_HEAD, EVENT_START, EVENT_END, POSN_WINDOW,
- POSN_BUFFER_POSN, POSN_WINDOW_POSN, POSN_TIMESTAMP): Use XCAR and
+ * keyboard.h (EVENT_HEAD, EVENT_START, EVENT_END, POSN_WINDOW)
+ (POSN_BUFFER_POSN, POSN_WINDOW_POSN, POSN_TIMESTAMP): Use XCAR and
XCDR.
* syntax.h (SYNTAX, SYNTAX_WITH_FLAGS, SYNTAX_MATCH): Use XCAR and
XCDR.
@@ -2616,8 +2615,8 @@
* print.c: Support print-circle and related features.
(Vprint_gensym_alist): Removed.
- (Vprint_circle, Vprint_continuous_numbering, print_number_index
- Vprint_number_table): New variables.
+ (Vprint_circle, Vprint_continuous_numbering, print_number_index)
+ (Vprint_number_table): New variables.
(PRINT_NUMBER_OBJECT, PRINT_NUMBER_STATUS): New macros.
(PRINTPREPARE, PRINTFINISH): Don't set Vprint_gensym_alist.
(print, print_preprocess, print_preprocess_string, print_object):
@@ -2720,8 +2719,8 @@
* xfaces.c (realize_basic_faces): Realize new basic faces.
- * dispextern.h (SCROLL_BAR_FACE_ID, BORDER_FACE_ID,
- CURSOR_FACE_ID, MOUSE_FACE_ID): New.
+ * dispextern.h (SCROLL_BAR_FACE_ID, BORDER_FACE_ID)
+ (CURSOR_FACE_ID, MOUSE_FACE_ID): New.
* xfaces.c (Qscroll_bar, Qcursor, Qborder, Qmouse): New.
(syms_of_xfaces): Intialize new symbols.
@@ -2857,7 +2856,7 @@
1999-09-03 Richard Stallman <rms@gnu.org>
- * callproc.c: Delete the system-independent include of stdlib.h
+ * callproc.c: Delete the system-independent include of stdlib.h.
(leaving only the one in the WINDOWSNT conditional).
1999-09-03 Andrew Choi <choi@cs.hku.hk>
@@ -2880,8 +2879,8 @@
(Fmodify_frame_parameters) [macintosh]:
Call mac_set_frame_parameter in macterm.c.
- * keyboard.c [macintosh]: Set KBD_BUFFER_SIZE to a smaller value
- (512) because Mac compilers limit local data of a function to 32K.
+ * keyboard.c [macintosh]: Set KBD_BUFFER_SIZE to a smaller value (512)
+ because Mac compilers limit local data of a function to 32K.
* make-docfiles.c: Correctly handle input files with Mac-style eol's.
@@ -2926,8 +2925,8 @@
(Fset_window_point): Remove references to deleted variables.
(Fset_window_start): Ditto.
- * xdisp.c (Vresize_mini_config, resize_mini_frame,
- resize_mini_initial_height): Removed.
+ * xdisp.c (Vresize_mini_config, resize_mini_frame)
+ (resize_mini_initial_height): Removed.
(syms_of_xdisp): Remove references to these variables.
(resize_mini_window): Don't save window configuration, freeze
window starts instead. Enlarge window until displaying an empty
@@ -3205,8 +3204,8 @@
(resize_mini_window): Save/restore window configuration
differently.
- * lisp.h (Vresize_mini_config, resize_mini_frame,
- resize_mini_initial_height): Add extern declarations.
+ * lisp.h (Vresize_mini_config, resize_mini_frame)
+ (resize_mini_initial_height): Add extern declarations.
* xterm.c (expose_window_tree): Fix typo CANON_Y_UNIT to
CANON_X_UNIT.
@@ -3244,7 +3243,7 @@
* xdisp.c (Vresize_mini_config): New.
(resize_mini_window): Use it to save restore original window
- configuration
+ configuration.
(syms_of_xdisp): Initialize it.
* buffer.h (struct buffer): Add prevent_redisplay_optimizations_p.
@@ -3266,37 +3265,37 @@
prevent_redisplay_optimizations_p to 1.
(Fget_buffer_create): Set prevent_redisplay_optimizations_p to 1.
- * buffer.h (BUF_UNCHANGED_MODIFIED, UNCHANGED_MODIFIED,
- BUF_OVERLAY_UNCHANGED_MODIFIED, OVERLAY_UNCHANGED_MODIFIED,
- BUF_BEG_UNCHANGED, BEG_UNCHANGED, BUF_END_UNCHANGED,
- END_UNCHANGED): New.
- (struct buffer_text): Add beg_unchanged, end_unchanged,
+ * buffer.h (BUF_UNCHANGED_MODIFIED, UNCHANGED_MODIFIED)
+ (BUF_OVERLAY_UNCHANGED_MODIFIED, OVERLAY_UNCHANGED_MODIFIED)
+ (BUF_BEG_UNCHANGED, BEG_UNCHANGED, BUF_END_UNCHANGED)
+ (END_UNCHANGED): New.
+ (struct buffer_text): Add beg_unchanged, end_unchanged,
unchanged_modified, overlay_unchanged_modified.
- * window.h (beg_unchanged, end_unchanged, unchanged_modified,
- overlay_unchanged_modified): Removed.
+ * window.h (beg_unchanged, end_unchanged, unchanged_modified)
+ (overlay_unchanged_modified): Removed.
(with_echo_area_unwind_data): Don't save beg/end_unchanged.
(unwind_with_echo_area_buffer): Don't restore them.
(debug_beg_unchanged, debug_end_unchanged) [GLYPH_DEBUG]: Removed.
- (text_outside_line_unchanged_p, redisplay_internal,
- try_scrolling): Use/set buffer-specific beg/end_unchanged.
+ (text_outside_line_unchanged_p, redisplay_internal)
+ (try_scrolling): Use/set buffer-specific beg/end_unchanged.
(redisplay_window): Let try_window_id be called if more than one
window is displayed. Use/set buffer-specific beg/end_unchanged.
- (get_last_unchanged_at_beg_row, get_first_unchanged_at_end_row,
- try_window_id):
+ (get_last_unchanged_at_beg_row, get_first_unchanged_at_end_row)
+ (try_window_id):
Use buffer-specific beg/end_unchanged.
- * window.h (beg_unchanged, end_unchanged, unchanged_modified,
- overlay_unchanged_modified): Remove extern declarations.
+ * window.h (beg_unchanged, end_unchanged, unchanged_modified)
+ (overlay_unchanged_modified): Remove extern declarations.
- * keyboard.c (command_loop_1): Set beg/end_unchanged per buffer.
+ * keyboard.c (command_loop_1): Set beg/end_unchanged per buffer.
* insdel.c (gap_left): Compute beg/end_unchanged per buffer.
(gap_right): Ditto.
(adjust_after_replace): Likewise.
(replace_range, del_range_2, modify_region): Likewise.
- * dispnew.c (direct_output_for_insert): Set beg_unchanged
+ * dispnew.c (direct_output_for_insert): Set beg_unchanged
and unchanged_modified per buffer.
* coding.c (code_convert_region): Compute beg/end_unchanged per
@@ -3312,7 +3311,7 @@
* lisp.h: Add prototype for copy_hash_table and Fcopy_hash_table.
* fns.c (Qkey, Qvalue): Renamed from Qkey_weak, and Qvalue_weak.
- (Qkey_value_weak): Removed.
+ (Qkey_value_weak): Removed.
(make_hash_table): Use nil, `key', `value', t for weakness.
(Fmake_hash_table): Ditto.
(copy_hash_table): New.
@@ -3398,25 +3397,22 @@
cursor_in_echo_area case only for a mini-window showing
a message. Don't let cursor end up after the end of a row.
- * xdisp.c (echo_area_glyphs, echo_area_message,
- echo_area_glyphs_length, previous_echo_glyphs,
- previous_echo_area_message, previous_echo_area_glyphs_length):
+ * xdisp.c (echo_area_glyphs, echo_area_message)
+ (echo_area_glyphs_length, previous_echo_glyphs)
+ (previous_echo_area_message, previous_echo_area_glyphs_length):
Removed.
- (Vmessage_stack, echo_area_buffer, echo_buffer,
- display_last_displayed_message_p, Vwith_echo_area_save_vector): New.
+ (Vmessage_stack, echo_area_buffer, echo_buffer)
+ (display_last_displayed_message_p, Vwith_echo_area_save_vector): New.
(message2_nolog): Use set_message and clear_message.
- (message3): Rename parameter len to nbytes to make clear what
- it is.
+ (message3): Rename parameter len to nbytes to make clear what it is.
(message3_nolog): Ditto. Use set_message and clear_message.
(update_echo_area): Rewritten.
(with_echo_area_buffer): New.
(with_echo_area_buffer_unwind_data, unwind_with_area_buffer): New.
(setup_echo_area_for_printing): New.
(display_echo_area, display_echo_area_1): New.
-
(current_message, current_message_1): New.
- (push_message, restore_message, pop_message,
- check_message_stack): New.
+ (push_message, restore_message, pop_message, check_message_stack): New.
(truncate_echo_area): Rewritten.
(truncate_message_1): New.
(set_message, set_message_1, clear_message): New.
@@ -3439,8 +3435,8 @@
don't try to set cursor on rows that aren't enabled.
* print.c: Remove conditional compilation on `standalone'.
- (glyph_len, str_to_glyph_cpy, str_to_glyph_ncpy,
- glyph_to_str_cpy): Remove that section because GLYPHs are no
+ (glyph_len, str_to_glyph_cpy, str_to_glyph_ncpy)
+ (glyph_to_str_cpy): Remove that section because GLYPHs are no
longer used in that way.
(PRINTDECLARE): Add multibyte.
(PRINTPREPARE, PRINTFINISH): Handle printcharfun t differently.
@@ -3457,7 +3453,7 @@
(command_loop_1): Check for echo area messages differently.
(read_char): Likewise.
(record_menu_key): Use clear_message.
- (Fexecute_extended_command): Check for echo area messages
+ (Fexecute_extended_command): Check for echo area messages
differently. Use push_message, restore_message, pop_message.
* alloc.c (Fgarbage_collect): Use push_message, restore_message,
@@ -3621,7 +3617,7 @@
is fixed-size.
(window_min_size_1): New.
(window_min_size): Handle fixed-size windows.
- (size_window): New. Rewritten combination of set_window_height and
+ (size_window): New. Rewritten combination of set_window_height and
set_window_width that handles fixed-size windows.
(set_window_height): Call it.
(set_window_width): Call it.
@@ -3739,8 +3735,8 @@
1999-08-06 Geoff Voelker <voelker@cs.washington.edu>
- * dired.c (directory_files_internal, Fdirectory_files_and_attributes,
- Ffile_attributes_lessp): New functions.
+ * dired.c (directory_files_internal, Fdirectory_files_and_attributes)
+ (Ffile_attributes_lessp): New functions.
(Fdirectory_files): Use directory_files_internal.
(syms_of_dired): Initialize Fdirectory_files_and_attributes,
Ffile_attributes_lessp.
@@ -3762,7 +3758,7 @@
* xdisp.c (reseat_at_next_visible_line_start): New parameter
on_newline_p.
- (set_iterator_to_next): After delivering last char
+ (set_iterator_to_next): After delivering last char
from display vector, reseat on next visible line start if
dpvec_char_len < 0.
(next_element_from_buffer): Set dpvec_char_len to -1 for
@@ -4337,7 +4333,7 @@
* term.c (TS_cursor_visible): Renamed from TS_visual_mode.
(TS_cursor_normal): Renamed from TS_end_visual_mode.
- (TS_cursor_invisible): New.
+ (TS_cursor_invisible): New.
(term_init): Initialize TS_cursor_invisible.
(tty_hide_cursor): New.
(tty_show_cursor): New.
@@ -4648,7 +4644,7 @@
(syms_of_buffer): Add default-scroll-*-aggressively.
* buffer.h (scroll_up_aggressively): New.
- (scroll_down_aggressively): New.
+ (scroll_down_aggressively): New.
* Makefile.in (LIBPNG): Add -lz -lm in case we're linking with
a static PNG library.
@@ -4733,7 +4729,7 @@
(build_scalable_font_name) [SCALABLE_FONTS]: New.
(may_use_scalable_font_p) [SCALABLE_FONTS]: New.
(best_matching_font) [SCALABLE_FONTS]: Handle scalable fonts.
- (syms_of_xfaces): Add scalable-fonts-allowed.
+ (syms_of_xfaces): Add scalable-fonts-allowed.
1999-05-26 Gerd Moellmann <gerd@gnu.org>
@@ -4995,7 +4991,7 @@
* xfaces.c (set_font_frame_param): New.
(Finternal_set_lisp_face_attribute): Call it.
-Sun Feb 14 10:54:02 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
+1999-02-14 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* xfaces.c (Finternal_set_lisp_face_attribute_from_resource):
Accept specifications of color for underline.
@@ -5011,21 +5007,21 @@ Sun Feb 14 10:54:02 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* dispnew.c (check_matrix_invariants): Put it in #if 0.
(update_window): Put the call to check_matrix_invariants in #if 0.
-Sun Feb 7 09:58:49 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
+1999-02-07 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* dispextern.h: Remove all else block of UNDERLINE_COLOR.
Remove definition of UNDERLINE_COLOR.
-Mon Jan 4 04:43:41 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
+1999-01-04 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* xfaces.c (free_face_colors): Free the color for underline.
* xterm.c (x_draw_glyph_string_underline): Set the color for underline
to the GC.
-Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
+1999-01-03 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
- * dispextern.h (UNDERLINE_COLOR): Defined.
+ * dispextern.h (UNDERLINE_COLOR): Defined.
(struct face): Added two new members.
underline_color, underline_defaulted_p.
@@ -5034,7 +5030,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
(Finternal_set_lisp_face_attribute): Likewise.
* xfaces.c (load_color): Change the last argument type to enum
- lface_attribute_index from int. And addec code for underling coloring.
+ lface_attribute_index from int. And addec code for underling coloring.
(load_face_colors): Pass LFACE_*_INDEX to load_color.
1999-02-12 Gerd Moellmann <gerd@gnu.org>
@@ -5211,7 +5207,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* dispextern.h (struct glyph): Add voffset.
(struct it): Replace height by descent, max_height by max_descent.
- * xterm.c (x_append_glyph): Set voffset
+ * xterm.c (x_append_glyph): Set voffset.
(x_append_stretch_glyph): Ditto.
(x_produce_image_glyph): Ditto.
(x_produce_glyphs): Take voffset into account.
@@ -5401,8 +5397,8 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
1998-11-11 Gerd Moellmann <gerd@gnu.org>
- * xterm.h (struct x_display_info): Add gray pixmap. * xterm.c
- (x_term_init): Create the gray pixmap.
+ * xterm.h (struct x_display_info): Add gray pixmap.
+ * xterm.c (x_term_init): Create the gray pixmap.
(x_setup_relief_color): Use it.
(x_get_glyph_string_clip_rect): Draw a toolbar window over the
internal border at the top of a frame.
@@ -5473,7 +5469,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
(xmenu_show): Likewise.
* xmenu.c (push_menu_item): Add parameters `type' and
- `selected'. Store it in menu_items.
+ `selected'. Store it in menu_items.
(MENU_ITEMS_ITEM_TYPE): New.
(MENU_ITEMS_ITEM_SELECTED): New.
(MENU_ITEMS_ITEM_LENGTH): Increase by two.
@@ -6502,7 +6498,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* xdisp.c (get_glyph_property): Renamed from
fill_iterator_from_glyph_property.
- (next_element_from_buffer): Handle case that no `glyph' property
+ (next_element_from_buffer): Handle case that no `glyph' property
was found correctly.
(display_line): Extend face to end of line only if we have faces.
@@ -6637,7 +6633,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
(SET_TEXT_POS_FROM_MARKER): Set a text_pos from a marker.
(SET_MARKER_FROM_TEXT_POS): Set a marker from a text_pos.
(TEXT_POS_EQUAL_P): Compare two text_pos structures for equality.
- (struct display_pos): Renamed from glyph_pos. Use struct text_pos
+ (struct display_pos): Renamed from glyph_pos. Use struct text_pos
for buffer and string positions.
(struct glyph): Use text_pos.
(struct it): Renamed from display_iterator. Use text_pos.
@@ -7263,7 +7259,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* xdisp.c (set_iterator_stop_pos): Take glyph_check_pos into
account.
- (reseat_iterator): Set glyph_check_pos. Handle case where
+ (reseat_iterator): Set glyph_check_pos. Handle case where
new position is < original position.
(check_iterator_glyph_property): Handle glyph property in strings.
(next_element_from_string): Call above function.
@@ -7598,7 +7594,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
face_at_buffer_position. Parameter charset removed; always
compute face for CHARSET_ASCII.
(face_at_string_position): Renamed from
- compute_face_at_string_pos. Parameter charset removed; always
+ compute_face_at_string_pos. Parameter charset removed; always
compute for CHARSET_ASCII.
(lookup_face_for_charset): Take frame parameter instead of
face_cache.
@@ -8531,7 +8527,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* dispnew.c (struct dim): Use int.
- * xfaces.c (Fset_face_attribute_internal): Set face->font_name;
+ * xfaces.c (Fset_face_attribute_internal): Set face->font_name.
(allocate_face): Initialize it.
(load_font): Use XLoadQueryFont again instead of x_load_font.
(unload_font): Use XFreeFont again.
@@ -8925,7 +8921,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
(x_get_char_font_and_encoding): Return null if font could not be
loaded. Reset font to null if fontset could not be loaded.
(draw_glyphs): Fill background if font not found.
- (draw_glyphs): Unused parameter just_foreground_p removed. New
+ (draw_glyphs): Unused parameter just_foreground_p removed. New
parameter composite_glyph.
(draw_glyphs): Use enumeration for parameter hl.
(draw_glyphs): Pass a display area relative x-position to
@@ -9231,7 +9227,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* dispnew.c (update_frame_line): update_line -> update_frame_line;
mirrored_make_current -> make_current.
- * xdisp.c: (store_frame_title_char): New function to store a
+ * xdisp.c (store_frame_title_char): New function to store a
single character for the frame title with re-allocation of
frame_title_buf.
(init_xdisp): Intialize frame_title_.* variables to null.
@@ -9272,7 +9268,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
1997-11-15 Gerd Moellmann <gerd@acm.org>
- * dispnew.c (clear_current_matrices): Clear matrix of menu_bar_window
+ * dispnew.c (clear_current_matrices): Clear matrix of menu_bar_window.
(clear_desired_matrices): Ditto.
(adjust_frame_glyphs_for_window_redisplay): Use FRAME_WINDOW_WIDTH
for menu_bar_window.
@@ -9509,20 +9505,20 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* window.h: Include blocker WINDOW_H_INCLUDED, include
dispextern.h.
- (struct window): phys_cursor_glyph as struct glyph. * window.c
- (make_window): Initialize it.
+ (struct window): phys_cursor_glyph as struct glyph.
+ * window.c (make_window): Initialize it.
(replace_window): Ditto.
* dispnew.c (free_window_matrices): Remove freeing of
phys_cursor_glyph.
(check_matrix_invariants): Renamed from check_current_matrix_...
* xterm.c: All references to phys_cursor_glyph changed.
- * dispextern.h (DISPEXTERN_H_INCLUDED: New include blocker.
+ * dispextern.h (DISPEXTERN_H_INCLUDED): New include blocker.
* xfaces.c: Comment update.
* window.h (struct window): Make phys_cursor_glyph a struct glyph
- pointer. Remove phys_cursor_ascent, descent, etc.
+ pointer. Remove phys_cursor_ascent, descent, etc.
* dispnew.c (free_window_matrices): Free it.
* window.c (make_window): Allocate it.
(replace_window): Ditto.
@@ -9835,7 +9831,7 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
* window.c (make_window): start_y removed.
(replace_window): Ditto.
- * xdisp.c (last_max_ascent, last_max_descent): Ascent and
+ * xdisp.c (last_max_ascent, last_max_descent): Ascent and
descent values of the last line processed by skip_to.
(redisplay_window): Use them.
(skip_to): Set them.
@@ -9851,16 +9847,16 @@ Sun Jan 3 08:41:10 1999 Masatake Yamato <masata-y@is.aist-nara.ac.jp>
(reseat_cursor): Ditto.
(next_display_element): Ditto.
-Sun Aug 24 08:50:52 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-24 Gerd Moellmann <gerd@acm.org>
* termhooks.h: Some hooks with prototypes.
* term.c: Some hooks with function prototypes.
- * xdisp.c (reseat_cursor): Additional argument force_p. Avoid
+ * xdisp.c (reseat_cursor): Additional argument force_p. Avoid
computing face if possible.
- * xdisp.c (next_display_element): Use face from glyph from display
+ * xdisp.c (next_display_element): Use face from glyph from display
table only if != 0.
* emacs.c: FreeBSD headers for profiling removed.
@@ -9917,7 +9913,7 @@ Sun Aug 24 08:50:52 1997 Gerd Moellmann <gerd@acm.org>
* emacs.c (main): Remove own profiling code because 0.95 now
has it in.
-Fri Aug 22 18:46:43 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-22 Gerd Moellmann <gerd@acm.org>
* xterm.c (XTupdate_end): Draw horizontal border at right position.
(expose_window): Draw vertical border.
@@ -9943,8 +9939,8 @@ Fri Aug 22 18:46:43 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (clear_glyph_matrix): Additional argument specifiying
that rows should really be cleared. Used for current matrices.
- * dispnew.c (scrolling_window): Bug fix.
- (line_dance_hook): Formerly line_dance_fn, take only one parameter.
+ * dispnew.c (scrolling_window): Bug fix.
+ (line_dance_hook): Formerly line_dance_fn, take only one parameter.
* dispextern.h (struct run): Remove current_vpos.
@@ -9956,7 +9952,7 @@ Fri Aug 22 18:46:43 1997 Gerd Moellmann <gerd@acm.org>
Fix truncated_on_left_p and truncated_on_right_p to be bits.
(struct glyph_row):
-Thu Aug 21 14:37:34 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-21 Gerd Moellmann <gerd@acm.org>
* xdisp.c (skip_vertically_backward): Avoid negative vpos values
when calling skip_to for continued lines.
@@ -9971,7 +9967,7 @@ Thu Aug 21 14:37:34 1997 Gerd Moellmann <gerd@acm.org>
* xterm.c (x_draw_row_borders): Use FRAME_MODE_LINE_HEIGHT height
value.
- (x_clip_to_row): Use MATRIX_ROW_VISIBLE_HEIGHT. Simplified.
+ (x_clip_to_row): Use MATRIX_ROW_VISIBLE_HEIGHT. Simplified.
(do_line_dance): Simplified and pixel corrected.
* dispnew.c (scrolling_window): Simplified.
@@ -9981,7 +9977,7 @@ Thu Aug 21 14:37:34 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (update_window): Add FRAME_MODE_LINE_BORDER_WIDTH
to mode line row->x.
-Wed Aug 20 11:23:28 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-20 Gerd Moellmann <gerd@acm.org>
* xterm.c (x_get_char_font_and_encoding): Don't let fontset
override font of face.
@@ -10001,7 +9997,7 @@ Wed Aug 20 11:23:28 1997 Gerd Moellmann <gerd@acm.org>
(merge_faces): Don't use default font if new font has different
size.
-Tue Aug 19 14:38:05 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-19 Gerd Moellmann <gerd@acm.org>
* xterm.c (x_display_and_set_cursor): Use FONT_WIDTH if width
unknown. Some fonts have min_width zero.
@@ -10018,39 +10014,39 @@ Tue Aug 19 14:38:05 1997 Gerd Moellmann <gerd@acm.org>
(x_display_and_set_cursor): If cursor on padding glyph, use
min_bounds pixel width.
-Mon Aug 18 09:39:18 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-18 Gerd Moellmann <gerd@acm.org>
- * xterm.c (x_clip_to_row): Height value was 1 too large.
- (XTclear_end_of_line): Clip to display area.
+ * xterm.c (x_clip_to_row): Height value was 1 too large.
+ (XTclear_end_of_line): Clip to display area.
- * xfns.c (x_figure_window_sizes): Add trunc border width
+ * xfns.c (x_figure_window_sizes): Add trunc border width
to frame pixel width.
* xdisp.c (next_display_element): Don't display overlay strings
within invisible text.
- (skip_vertically_backward): Skip display lines.
+ (skip_vertically_backward): Skip display lines.
-Sat Aug 16 13:13:32 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-16 Gerd Moellmann <gerd@acm.org>
* xdisp.c (x_consider_frame_titie): Don't pad with blanks.
- * xdisp.c (next_display_element): Next invisible
+ * xdisp.c (next_display_element): Next invisible
text check position computed differently.
* dispextern.h (struct display_cursor): last_invisible_text_pos
and display_ellipsis_for_invisible_p removed.
- * xdisp.c (next_display_element): Set last_invisible_text_pos
+ * xdisp.c (next_display_element): Set last_invisible_text_pos
to the last position at which invisible text was found.
Don't decrement cursor.pos for newlines and cr with ellipsis.
Set dpvec for `...' due to invisible text directly.
- (redisplay_internal): Don't assert that cursor is at PT after
+ (redisplay_internal): Don't assert that cursor is at PT after
skip_to. It may be in invisible text.
* keyboard.c (make_lispy_event): For mouse clicks, use
x_y_to_hpos_vpos.
- * xdisp.c (next_display_element): Call get_overlays_for_cursor when
+ * xdisp.c (next_display_element): Call get_overlays_for_cursor when
next_overlay_pos is reached. Use limit cursor.pos + 100 when
checking for invisible text.
@@ -10058,7 +10054,7 @@ Sat Aug 16 13:13:32 1997 Gerd Moellmann <gerd@acm.org>
* dispextern.h (WINDOW_TO_FRAME_HPOS/VPOS): Moved to dispnew.c
- * xfns.c (x_contour_region): Use pixel coordinates from window
+ * xfns.c (x_contour_region): Use pixel coordinates from window
cursor instead of WINDOW_TO_FRAME_H/VPOS.
* dispextern.h (FRAME_TO_WINDOW_HPOS, FRAME_TO_WINDOW_VPOS):
@@ -10066,11 +10062,11 @@ Sat Aug 16 13:13:32 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (frame_to_window_hpos, frame_to_window_vpos): Removed.
- * xterm.c (x_y_to_hpos_vpos): Get hpos/vpos from window relative
+ * xterm.c (x_y_to_hpos_vpos): Get hpos/vpos from window relative
pixel coordinates.
(note_mouse_highlight): Use it.
- * xdisp.c (echo_area_display): Ignore calls for terminal frames
+ * xdisp.c (echo_area_display): Ignore calls for terminal frames
under a window system.
* dispnew.c (adjust_frame_glyphs): Call redraw_frame if
@@ -10078,7 +10074,7 @@ Sat Aug 16 13:13:32 1997 Gerd Moellmann <gerd@acm.org>
(update_window_line): Add width of face padding glyph to
displayed widths of rows.
- * xterm.c (x_display_and_set_cursor): Set clipping after
+ * xterm.c (x_display_and_set_cursor): Set clipping after
erasing cursor.
* window.c (Fset_window_configuration): Free only those
@@ -10101,25 +10097,25 @@ Sat Aug 16 13:13:32 1997 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct display_cursor): New member string_length.
* xdisp.c (next_display_element): Return padding spaces.
- (init_string_cursor): Take precision and field_width
+ (init_string_cursor): Take precision and field_width.
(display_string): Use string cursor, skip over invisible text.
-Thu Aug 14 10:41:41 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-14 Gerd Moellmann <gerd@acm.org>
* xterm.c (x_clip_to_row): Clip to partially visible lines.
(x_display_and_set_cursor): Call it.
- (draw_glyphs): Call it
+ (draw_glyphs): Call it.
(draw_bitmap): Call it.
* dispnew.c (adjust_frame_glyphs): Optimize frame garbaging.
(allocate_leaf_matrix): Return flags.
(row_equal_p): Compare enabled_p.
- * xterm.c (x_erase_phys_cursor): Set phys_cursor_on_p to 0
+ * xterm.c (x_erase_phys_cursor): Set phys_cursor_on_p to 0
for type == -1.
* xterm.c (x_display_and_set_cursor): Bar cursor 1 pixel taller.
- (draw_glyphs): Clip height one pixel taller.
+ (draw_glyphs): Clip height one pixel taller.
* dispnew.c (direct_output_for_insert): Give up for hscrolled
mini window.
@@ -10129,7 +10125,7 @@ Thu Aug 14 10:41:41 1997 Gerd Moellmann <gerd@acm.org>
* xdisp.c (echo_area_display): Call update_single_window if
possible.
- * dispnew.c (update_window_line): Call scrolling_window.
+ * dispnew.c (update_window_line): Call scrolling_window.
(scrolling_window): Work on enabled desired lines only.
(update_single_window): Update a single window like update_frame
does for all windows.
@@ -10159,7 +10155,7 @@ Thu Aug 14 10:41:41 1997 Gerd Moellmann <gerd@acm.org>
* xterm.h (FRAME_X_TRUNC_WIDTH).
- * frame.h (FRAME_TRUNC_WIDTH): Width of area at the left margin
+ * frame.h (FRAME_TRUNC_WIDTH): Width of area at the left margin
of a window reserved for truncation mark.
* dispextern.h: Take FRAME_TRUNC_WIDTH into account.
@@ -10210,23 +10206,23 @@ Thu Aug 14 10:41:41 1997 Gerd Moellmann <gerd@acm.org>
update end to prevent cursor flickering. Revert changes to
setting cursor.endpos.
-Wed Aug 13 10:46:12 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-13 Gerd Moellmann <gerd@acm.org>
- * dispnew.c (direct_output_for_insert): Don't set cursor.endpos
+ * dispnew.c (direct_output_for_insert): Don't set cursor.endpos
to PT because this prevents multi-byte characters from being
recognized.
- * xdisp.c (skip_to, display_line): Advance cursor at end of
+ * xdisp.c (skip_to, display_line): Advance cursor at end of
truncated line.
- * xterm.c (x_draw_3d_borders): Use CapRound. Struct rect
+ * xterm.c (x_draw_3d_borders): Use CapRound. Struct rect
replaced by XRectangle.
* dispnew.c (scrolling_window): New method.
* xterm.c (do_line_dance): New implementation, new method.
- * xdisp.c (draw_glyphs): Draw truncation bitmaps. Clip to
+ * xdisp.c (draw_glyphs): Draw truncation bitmaps. Clip to
visible part of line.
* dispnew.c (update_window_line): Fill inverse video lines
@@ -10255,12 +10251,12 @@ Wed Aug 13 10:46:12 1997 Gerd Moellmann <gerd@acm.org>
(change_frame_size_1): Correct cursor.x if frame gets too small.
(update_window_line): Start at row->x.
- * xdisp.c (redisplay_internal): Correct cursor.x (everwhere
+ * xdisp.c (redisplay_internal): Correct cursor.x (everywhere
in xdisp.c).
* xterm.c (set_output_cursor): Use window relative X/Y.
(global): Use window relative output cursor x/y.
- (draw_glyphs): Remove y param. Pass window relative x/y.
+ (draw_glyphs): Remove y param. Pass window relative x/y.
* dispnew.c (update_window): Start rows at start_y.
(update_window): Don't try scrolling because it wouldn't work
@@ -10269,12 +10265,12 @@ Wed Aug 13 10:46:12 1997 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct glyph_row): Remove shift_left_by,
add x.
- * window.h: (struct window): New member start_y.
+ * window.h (struct window): New member start_y.
* window.c (replace_window): Initialize start_y.
(make_window): Ditto.
-Tue Aug 12 14:53:04 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-12 Gerd Moellmann <gerd@acm.org>
* xterm.c (draw_glyphs): Clip rows that would paint over
the mode line.
@@ -10301,7 +10297,7 @@ Tue Aug 12 14:53:04 1997 Gerd Moellmann <gerd@acm.org>
with window relative pixel coordinates. Use GLYPH_TO_PIXEL_-
COORDS mit new arguments.
-Mon Aug 11 12:32:34 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-11 Gerd Moellmann <gerd@acm.org>
* xdisp.c (start_display): Use SKIP_TO instead of SKIP_IN-
DISPLAY_LINE.
@@ -10326,11 +10322,11 @@ Mon Aug 11 12:32:34 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (direct_output_for_insert): Set updated_row.
-Sat Aug 9 12:11:44 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-09 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct glyph): Padding flag removed.
-Tue Aug 5 09:59:08 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-05 Gerd Moellmann <gerd@acm.org>
* sysdep.c (reset_sys_modes): cursor_to with 4 params.
@@ -10345,7 +10341,7 @@ Tue Aug 5 09:59:08 1997 Gerd Moellmann <gerd@acm.org>
removed. Remove references to it everywhere. Reverse_p in
glyph_row -> right_to_left_p. Change references to it.
-Mon Aug 4 18:09:27 1997 Gerd Moellmann <gerd@acm.org>
+1997-08-04 Gerd Moellmann <gerd@acm.org>
* dispnew.c (direct_output_for_insert): Use INSERT_GLYPHS.
@@ -10366,11 +10362,11 @@ Mon Aug 4 18:09:27 1997 Gerd Moellmann <gerd@acm.org>
* keyboard.c (command_loop_1): Call DIRECT_OUTPUT_FOR_INSERT
for any character.
-Thu Jul 31 15:39:10 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-31 Gerd Moellmann <gerd@acm.org>
* xdisp.c (echo_area_display): Use new DISPLAY_STRING.
-Wed Jul 30 12:18:03 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-30 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct glyph_row): MAX_ASCENT, MAX_DESCENT.
(struct glyph): ASCENT, DESCENT.
@@ -10384,7 +10380,7 @@ Wed Jul 30 12:18:03 1997 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct display_cursor): WHAT_FOUND, SOURCE_OBJECT.
Renamed from CHAR_CURSOR.
-Tue Jul 29 12:52:40 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-29 Gerd Moellmann <gerd@acm.org>
* xdisp.c (display_text_line): Mostly pixel oriented.
@@ -10405,7 +10401,7 @@ Tue Jul 29 12:52:40 1997 Gerd Moellmann <gerd@acm.org>
* term.c (encode_terminal_code): Don't use GLYPH_CHAR, use
FAST_GLYPH_CHAR instead because GLYPH_CHAR won't remove faces.
-Mon Jul 28 14:23:06 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-28 Gerd Moellmann <gerd@acm.org>
* dispnew.c (init_char_info): Correct TAB_WIDTH to a reasonable
value.
@@ -10418,7 +10414,7 @@ Mon Jul 28 14:23:06 1997 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct char_info ): GLYPH_ROW for intermediate
glyphs.
- * dispnew.c (init_char_info): Init GLYPH_ROW to NULL. CHAR_CURSOR
+ * dispnew.c (init_char_info): Init GLYPH_ROW to NULL. CHAR_CURSOR
moved to xdisp.c.
* xdisp.c (display_text_line): Use CHAR_CURSOR.
@@ -10430,7 +10426,7 @@ Mon Jul 28 14:23:06 1997 Gerd Moellmann <gerd@acm.org>
* term.c (get_char_info): Intermediate glyph generation.
(append_intermediate_glyph): Ditto.
-Sun Jul 27 18:57:24 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-27 Gerd Moellmann <gerd@acm.org>
* dispnew.c (compute_char_cursor_face): Compute the face for a
CHAR_CURSOR.
@@ -10440,7 +10436,7 @@ Sun Jul 27 18:57:24 1997 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct char_cursor): Cursor for iterating over
display text of CURRENT_BUFFER.
-Sat Jul 26 13:33:03 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-26 Gerd Moellmann <gerd@acm.org>
* term.c (get_char_info): Set MAX_PIXEL_WIDTH in CHAR_INFO.
@@ -10460,7 +10456,7 @@ Sat Jul 26 13:33:03 1997 Gerd Moellmann <gerd@acm.org>
encode character.
(XTget_char_info): Get display information about a character.
-Wed Jul 23 16:50:18 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-23 Gerd Moellmann <gerd@acm.org>
* dispextern.h (WINDOW_DISPLAY_MODE_LINE_HEIGHT): Height is
zero if window is mini-window.
@@ -10499,7 +10495,7 @@ Wed Jul 23 16:50:18 1997 Gerd Moellmann <gerd@acm.org>
(WINDOW_DISPLAY_BOTTOM_EDGE_PIXEL_Y): Macros to get various
pixel values related to windows.
-Mon Jul 21 12:22:02 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-21 Gerd Moellmann <gerd@acm.org>
* xterm.c (XTflash): Flash last line of frame.
@@ -10529,7 +10525,7 @@ Mon Jul 21 12:22:02 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (scrolling_window): Scrolling for windows.
-Wed Jul 16 13:37:51 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-16 Gerd Moellmann <gerd@acm.org>
* dispnew.c (build_frame_matrix): Work on windows with update
flag set.
@@ -10553,7 +10549,7 @@ Wed Jul 16 13:37:51 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (build_frame_matrix_from_leaf_window): Determine
border glyph once.
-Tue Jul 15 13:58:33 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-15 Gerd Moellmann <gerd@acm.org>
* window.c (mark_window_cursors_off): Mark all cursors in
window tree off.
@@ -10611,7 +10607,7 @@ Tue Jul 15 13:58:33 1997 Gerd Moellmann <gerd@acm.org>
(direct_output_forward_char): Ditto.
(update_frame_1): Ditto.
-Mon Jul 14 12:30:03 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-14 Gerd Moellmann <gerd@acm.org>
* dispnew.c (updated_window): Set by UPDATE_WINDOW to the window
being updated.
@@ -10671,7 +10667,7 @@ Mon Jul 14 12:30:03 1997 Gerd Moellmann <gerd@acm.org>
* window.h: LAST_POINT_X and LAST_POINT_Y removed.
-Sun Jul 13 14:18:24 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-13 Gerd Moellmann <gerd@acm.org>
* xdisp.c: Bug fixes using SET_CURSOR with HPOS 0 instead
of FRAME_LEFT_SCROLL_BAR_WIDTH.
@@ -10685,7 +10681,7 @@ Sun Jul 13 14:18:24 1997 Gerd Moellmann <gerd@acm.org>
(update_frame_1): Call CLEAR_DESIRED_MATRICES.
(update_frame): Return return value from UPDATE_FRAME_1.
-Sat Jul 12 12:58:48 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-12 Gerd Moellmann <gerd@acm.org>
* xdisp.c (try_window): Set WINDOW_END_VPOS with window relative
LAST_TEXT_VPOS.
@@ -10722,7 +10718,7 @@ Sat Jul 12 12:58:48 1997 Gerd Moellmann <gerd@acm.org>
used counters for the current glyph row.
-Fri Jul 11 13:16:50 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-11 Gerd Moellmann <gerd@acm.org>
* lisp.h: Prototype for SCAN_BUFFER.
@@ -10778,7 +10774,7 @@ Fri Jul 11 13:16:50 1997 Gerd Moellmann <gerd@acm.org>
* xdisp.c (message2_nolog): Don't fwrite NULL message If
NONINTERACTIVE.
-Mon Jul 7 14:44:38 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-07 Gerd Moellmann <gerd@acm.org>
* dispnew.c (init_desired_glyphs): Clear both frame matrix
and window matrices.
@@ -10793,10 +10789,9 @@ Mon Jul 7 14:44:38 1997 Gerd Moellmann <gerd@acm.org>
(display_text_line): Use window matrix.
(try_window): Use window relative positions.
-Sun Jul 6 17:02:26 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-06 Gerd Moellmann <gerd@acm.org>
- * dispnew.c (adjust_frame_glyphs): Allocate window matrices from
- (0, 0).
+ * dispnew.c (adjust_frame_glyphs): Allocate window matrices from (0, 0).
(allocate_leaf_matrix): Add FRAME_MENU_BAR_LINES to the height of
top-most windows.
@@ -10824,7 +10819,7 @@ Sun Jul 6 17:02:26 1997 Gerd Moellmann <gerd@acm.org>
matrices.
(clear_glyph_row): Only reset used counters and flags.
-Sat Jul 5 14:55:44 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-05 Gerd Moellmann <gerd@acm.org>
* dispnew.c (scroll_frame_lines): Don't assume first scolled
line is non-empty.
@@ -10866,7 +10861,7 @@ Sat Jul 5 14:55:44 1997 Gerd Moellmann <gerd@acm.org>
(mirror_make_current): Make window desired matrix row current when
frame matrix row was made current.
-Fri Jul 4 13:27:46 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-04 Gerd Moellmann <gerd@acm.org>
* dispnew.c (check_matrix_pointer_lossage): Check against
pointer lossage in matrices.
@@ -10883,7 +10878,7 @@ Fri Jul 4 13:27:46 1997 Gerd Moellmann <gerd@acm.org>
(rotate_pointers): Removed.
(scroll_frame_lines): Simplified.
-Thu Jul 3 13:54:21 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-03 Gerd Moellmann <gerd@acm.org>
* dispextern.h (MATRIX_ROW_SWAP_CONTENTS): Removed.
@@ -10895,7 +10890,7 @@ Thu Jul 3 13:54:21 1997 Gerd Moellmann <gerd@acm.org>
for window matrices.
(update_line): Call make_matrix_row_current.
-Wed Jul 2 13:43:35 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-02 Gerd Moellmann <gerd@acm.org>
* dispextern.h (SET_MATRIX_ROW_ENABLED_P): Better macro name.
(SET_MATRIX_ROW_INVERSE_P): Better name and HIGHLIGHT_P ->
@@ -10920,7 +10915,7 @@ Wed Jul 2 13:43:35 1997 Gerd Moellmann <gerd@acm.org>
(fill_up_glyph_row_areas_with_spaces): Fill up areas with
spaces.
-Tue Jul 1 13:49:55 1997 Gerd Moellmann <gerd@acm.org>
+1997-07-01 Gerd Moellmann <gerd@acm.org>
* xterm.c (dumprectangle): Use vectors in glyph rows.
@@ -10954,10 +10949,10 @@ Tue Jul 1 13:49:55 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (line_hash_code): Simplified.
-Mon Jun 30 20:39:38 1997 Gerd Moellmann <gerd@acm.org>
+1997-06-30 Gerd Moellmann <gerd@acm.org>
* dispnew.c: Prototype for ROTATE_VECTOR, ROTATE_POINTERS,
- CHANGE_FRAME_SIZE_1
+ CHANGE_FRAME_SIZE_1.
(preserve_other_columns): Void return.
(cancel_my_columns): Void return type.
(scrolling): Int return type.
@@ -10979,7 +10974,7 @@ Mon Jun 30 20:39:38 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (redraw_frame): FRAME_PTR -> struct frame. Return
void.
(cancel_line): Return void.
- (clear_frame_records): Return void.
+ (clear_frame_records): Return void.
* dispextern.h (struct glyph): Remove GLYPH, add bit-fields.
(SET_CHAR_GLYPH): Fill a character glyph.
@@ -11004,14 +10999,14 @@ Mon Jun 30 20:39:38 1997 Gerd Moellmann <gerd@acm.org>
* alloc.c (mark_object): Change window mark code to stop with
member CURRENT_MATRIX.
-Sat Jun 28 13:54:55 1997 Gerd Moellmann <gerd@acm.org>
+1997-06-28 Gerd Moellmann <gerd@acm.org>
* scroll.c (do_scrolling): Change algorithm to use pointers.
(do_direct_scrolling): Ditto.
* dispnew.c (get_glyph_matrix_row): Use pointers stored in rows.
(new_glyph_pool): Formerly new_FRAME_GLYPH_MATRIX.
- (free_glyph_pool): Formerly FREE_FRAME_GLYPH_MATRIX
+ (free_glyph_pool): Formerly FREE_FRAME_GLYPH_MATRIX.
(realloc_glyph_pool): Formerly REALLOC_FRAME_GLYPH_MATRIX.
Returns 1 if pool changed.
(matrix_row): Additional check for lost pointers to glyph rows.
@@ -11033,7 +11028,7 @@ Sat Jun 28 13:54:55 1997 Gerd Moellmann <gerd@acm.org>
(global): All macro names changed from prefix FRAME_MATRIX to
MATRIX.
-Fri Jun 27 14:51:15 1997 Gerd Moellmann <gerd@acm.org>
+1997-06-27 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct glyph_pool): Replacement for former
FRAME_GLYPH_MATRIX.
@@ -11045,7 +11040,7 @@ Fri Jun 27 14:51:15 1997 Gerd Moellmann <gerd@acm.org>
* frame.c (make_frame): Initialize pools.
-Thu Jun 26 00:00:55 1997 Gerd Moellmann <gerd@acm.org>
+1997-06-26 Gerd Moellmann <gerd@acm.org>
* scroll.c (do_direct_scrolling): Don't assume that the
line moving algorithm has no intermediate steps.
@@ -11063,14 +11058,14 @@ Thu Jun 26 00:00:55 1997 Gerd Moellmann <gerd@acm.org>
* alloc.c (mark_object): Mark windows specially.
-Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
+1997-06-25 Gerd Moellmann <gerd@acm.org>
* dispextern.h (struct glyph): Add member OBJECT
referencing a Lisp object from which a glyph was drawn.
Member TEXT_POSITION renamed POSITION.
* xterm.c, xdisp.c, dispnew.c: Rename TEXT_POSITION -> POSITION.
- * alloc.c: Include dispextern.h
+ * alloc.c: Include dispextern.h.
(mark_object): Mark objects referenced from glyphs.
* frame.c (make_frame): Initialize DECODE_MODE_SPEC_BUFFER.
@@ -11154,11 +11149,11 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
* dispnew.c (direct_output_forward_char): Old glyph functions
removed, new inserted.
(line_hash_code): Use new glyphs.
- (line_draw_cost): Ditto
- (cancel_line): Ditto
+ (line_draw_cost): Ditto.
+ (cancel_line): Ditto.
(clear_frame_records): Ditto.
(init_desired_glyphs): Ditto.
- (get_display_line): Ditto
+ (get_display_line): Ditto.
(scroll_frame_lines): Ditto.
(preserve_other_columns): Ditto.
(adjust_window_charstarts): Ditto.
@@ -11302,7 +11297,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-06-22 Ken'ichi Handa <handa@gnu.org>
- * fileio.c: (Finsert_file_contents): In the case of REPLACE, call
+ * fileio.c (Finsert_file_contents): In the case of REPLACE, call
del_range_byte instead of del_range_1, set `inserted' to the
number of characters actually inserted.
@@ -11348,7 +11343,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-06-14 Tak Ota <ota@atc.sel.sony.com>
- * w32bdf.c: (clear_cached_bitmap_slots): Remove.
+ * w32bdf.c (clear_cached_bitmap_slots): Remove.
(get_bitmap_with_cache): Check if CreateBitmap failed.
Adjust cache size dynamically so cache is never larger than the
system limit of GDI resources.
@@ -11366,7 +11361,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-06-11 Jason Rumney <jasonr@altavista.net>
- * w32term.c (cancel_mouse_face): New function. See equiv
+ * w32term.c (cancel_mouse_face): New function. See equiv
changes to xterm.c on 1996-10-31.
(x_set_window_size): Use cancel_mouse_face.
(w32_read_socket): Use cancel_mouse_face.
@@ -11606,11 +11601,11 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-05-02 Jason Rumney <jasonr@altavista.net>
- * w32term.c (w32_write_glyphs, w32_clear_end_of_line,
- w32_clear_frame, clear_cursor, x_display_bar_cursor,
- x_display_box_cursor, x_set_window_size): Use phys_cursor_on
+ * w32term.c (w32_write_glyphs, w32_clear_end_of_line)
+ (w32_clear_frame, clear_cursor, x_display_bar_cursor)
+ (x_display_box_cursor, x_set_window_size): Use phys_cursor_on
field in frame.
- (do_line_dance): Updated WRT xterm.c. Use macros where possible.
+ (do_line_dance): Updated WRT xterm.c. Use macros where possible.
(dumprectangle): Take into account the width of a left-side
scroll bar.
@@ -11856,7 +11851,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
* w32fns.c (w32_strict_fontnames): New variable.
(Fx_create_frame): Formatting fix.
(w32_load_system_font): Keep trying to load non-existant font
- if w32_strict_fontnames is nil. Formatting fix.
+ if w32_strict_fontnames is nil. Formatting fix.
(syms_of_w32fns): Add w32-strict-fontnames.
* w32term.c (W32_TEXTOUT): Do not multiply nchars by charset_dim.
@@ -11895,8 +11890,8 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-03-06 Kenichi Handa <handa@etl.go.jp>
- * Makefile.in (callproc.o, coding.o, fileio.o, msdos.o, process.o,
- term.o, xselect.o): Depend on ccl.h.
+ * Makefile.in (callproc.o, coding.o, fileio.o, msdos.o, process.o)
+ (term.o, xselect.o): Depend on ccl.h.
1999-03-05 Geoff Voelker <voelker@cs.washington.edu>
@@ -12013,7 +12008,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-02-21 Eli Zaretskii <eliz@delysid.gnu.org>
- * fileio.c: (lstat) [!S_ISLNK]: Use stat instead of lstat.
+ * fileio.c (lstat) [!S_ISLNK]: Use stat instead of lstat.
1999-02-21 Richard Stallman <rms@gnu.org>
@@ -12035,7 +12030,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
data is included, to enable profiling.
($(EMACS)): Map file not needed for emacs.exe.
- * emacs.c (main): [!SYSTEM_MALLOC]: Call realloc and free as well
+ * emacs.c (main) [!SYSTEM_MALLOC]: Call realloc and free as well
as malloc before calling uninterrupt_malloc, for consistency.
This also enables profiling to work on WINDOWSNT.
@@ -12051,9 +12046,9 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-02-17 Richard Stallman <rms@gnu.org>
- * insdel.c (adjust_markers_for_replace): When doing an insertion
- (replacing a region of zero length), handle markers at the
- insertion point properly.
+ * insdel.c (adjust_markers_for_replace): When doing an
+ insertion (replacing a region of zero length), handle markers
+ at the insertion point properly.
1999-02-17 Andrew Innes <andrewi@gnu.org>
@@ -12201,7 +12196,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-01-31 Andrew Innes <andrewi@gnu.org>
- * unexw32.c: (ROUND_UP_DST_AND_ZERO): New macro.
+ * unexw32.c (ROUND_UP_DST_AND_ZERO): New macro.
(copy_executable_and_dump_data): Use it to ensure alignment slop
is zeroed.
@@ -12354,7 +12349,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
* w32fns.c (x_to_w32_charset): Add iso8859-9.
(w32_to_x_charset): Fix charset mappings.
- * w32term.c: Remove codepage macros. Remove redundant BIG5 macros.
+ * w32term.c: Remove codepage macros. Remove redundant BIG5 macros.
(dumpglyphs): Move definitions out of block containing goto.
Remove redundant code for BIG5.
Use w32_codepage_for_font instead of
@@ -12374,11 +12369,11 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1999-01-17 Andrew Innes <andrewi@gnu.org>
- * w32proc.c: (w32_executable_type): Relax the check to identify
+ * w32proc.c (w32_executable_type): Relax the check to identify
cygwin-compiled applications, because the exact dll name varies
with release. Now only require the name to start "cygwin".
- * w32heap.h: (ROUND_UP):
+ * w32heap.h (ROUND_UP):
(ROUND_DOWN): New macros.
(need_to_recreate_heap): Renamed to using_dynamic_heap.
(init_heap): New extern.
@@ -12390,7 +12385,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
(w32_fatal_reload_error):
(get_section_size): Obsolete externs removed.
- * w32heap.c: (RVA_TO_PTR): Redefine to convert RVA to address in
+ * w32heap.c (RVA_TO_PTR): Redefine to convert RVA to address in
current process.
(round_to_next): Obsolete function removed.
(preload_heap_section): New variable.
@@ -12456,10 +12451,10 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
(unexec): Rounds off preload heap to nearest page rather than
virtual allocation unit. Modified to match other changes.
- * mem-limits.h: (get_lim_data): Use reserved_heap_size instead of
+ * mem-limits.h (get_lim_data): Use reserved_heap_size instead of
data_region_size.
- * makefile.nt: (TEMACS_TMP): New macro.
+ * makefile.nt (TEMACS_TMP): New macro.
($(TEMACS)): Output to TEMACS_TMP from link, use post-link
processor to add static heap section in support of new unexec.
@@ -12521,7 +12516,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
character. Don't allow to put binary data into the clipboard.
Return zero in case of success, 1 or 2 otherwise.
(get_clipboard_data): Only bail out if the null character is in
- the last 32-byte chunk of clipboard data
+ the last 32-byte chunk of clipboard data.
(Fw16_set_clipboard_data): Make ok and put_status be unsigned. If
they save binary data, print a message in the echo area saying the
text was not put into the clipboard.
@@ -12568,7 +12563,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
(init_intervals, make_interval): Set a count variable.
Use lisp_malloc instead of setting allocating_for_lisp.
(init_float, make_float, init_cons, Fcons): Likewise.
- (allocate_vectorlike, init_symbol, Fmake_symbol): Likewise
+ (allocate_vectorlike, init_symbol, Fmake_symbol): Likewise.
(init_marker, allocate_misc, init_strings): Likewise.
(make_uninit_multibyte_string): Likewise.
(gc_sweep, compact_strings): Decrement the count variables.
@@ -12602,7 +12597,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
* w32term.c (x_iconify_frame): Wait for frame to be iconified; do
not set async_iconified flag though.
- * w32proc.c: (Vw32_start_process_inherit_error_mode): New variable.
+ * w32proc.c (Vw32_start_process_inherit_error_mode): New variable.
(create_child): Use it.
(syms_of_ntproc): Defvar it. Also fix docstrings for
w32-start-process-share-console and w32-start-process-show-window.
@@ -12951,7 +12946,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1998-11-16 Kenichi Handa <handa@etl.go.jp>
- * Makefile.in (abbrev.o): Depend on charset.h
+ * Makefile.in (abbrev.o): Depend on charset.h.
(bytecode.o): Depend on charset.h.
* bytecode.c: Include charset.h.
@@ -12979,8 +12974,8 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1998-11-11 Eli Zaretskii <eliz@delysid.gnu.org>
* fns.c (MAX_ALLOCA): New macro.
- (Fbase64_encode_region, Fbase64_encode_string,
- Fbase64_decode_region, Fbase64_decode_string): Don't allocate
+ (Fbase64_encode_region, Fbase64_encode_string)
+ (Fbase64_decode_region, Fbase64_decode_string): Don't allocate
more than MAX_ALLOCA bytes with alloca; otherwise use xmalloc.
1998-11-11 Ken'ichi Handa <handa@delysid.gnu.org>
@@ -13418,21 +13413,21 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
* makefile.nt (w32fns.c): Add x-list-font.c to dependancies.
* w32faces.c: Update comments referring to obsolete structs.
- (allocate_face, copy_face, face_eql, load_font,
- Fpixmap_spec_p, free_frame_faces, new_computed_face,
- frame_update_line_height, merge_faces, compute_base_face,
- Fset_face_attribute_internal): Use fontset support based on xfaces.c.
+ (allocate_face, copy_face, face_eql, load_font)
+ (Fpixmap_spec_p, free_frame_faces, new_computed_face)
+ (frame_update_line_height, merge_faces, compute_base_face)
+ (Fset_face_attribute_internal): Use fontset support based on xfaces.c.
- * w32fns.c: (Vx_pixel_size_width): New global variable.
+ * w32fns.c (Vx_pixel_size_width): New global variable.
(unibyte_display_via_language_environment): New global variable.
(x_set_font): Add support for setting fontsets.
- (Fx_create_frame): Add check_w32(). Initialize fontsets. Fix
+ (Fx_create_frame): Add check_w32(). Initialize fontsets. Fix
font names to match xlfd-tight-regexp.
(w32_load_font): Rewrite based on x_load_font.
(x_to_w32_charset, w32_to_x_charset): Add character sets. Use
`iso8859-1' rather than `ansi'.
(w32_to_x_font): Remove `-' from font name. Remove the `-' off the
- end. Move charset into `charset registry' field.
+ end. Move charset into `charset registry' field.
(enum_font_cb2): Check charsets match. Include width in font list.
(w32_list_fonts): Rewrite based on x_list_fonts.
Moved from w32term.c to have access to enumfont_t struct.
@@ -13455,8 +13450,8 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
(syms_of_w32term): Add w32-no-unicode-output flag.
* w32term.h: Remove redundant font_info struct definition.
- (Vx_pixel_size_width_font_regexp,
- unibyte_display_via_language_environment): Declare variables.
+ (Vx_pixel_size_width_font_regexp)
+ (unibyte_display_via_language_environment): Declare variables.
(w32_list_fonts, w32_get_font_info, w32_query_font, w32_load_font):
Declare functions.
(w32_output): New fields font_baseline and fontset.
@@ -13819,8 +13814,8 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
1998-09-06 Lars Magne Ingebrigtsen <larsi@gnus.org>
- * fns.c (Fbase64_decode_string, Fbase64_encode_string,
- base64_decode_1, Fbase64_decode_region, Fbase64_encode_region):
+ * fns.c (Fbase64_decode_string, Fbase64_encode_string)
+ (base64_decode_1, Fbase64_decode_region, Fbase64_encode_region):
New functions.
1998-09-06 Richard Stallman <rms@gnu.org>
@@ -13852,7 +13847,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
(Fw16_set_clipboard_data): Always convert multibyte strings. Use
Vnext_selection_coding_system if non-nil.
(Fw16_get_clipboard_data): Always convert a string that includes
- non-ASCII characters. Use Vnext_selection_coding_system if
+ non-ASCII characters. Use Vnext_selection_coding_system if
non-nil.
1998-08-31 Andrew Innes <andrewi@harlequin.co.uk>
@@ -13957,8 +13952,7 @@ Wed Jun 25 15:22:58 1997 Gerd Moellmann <gerd@acm.org>
* xterm.c (fixup_locale): New function. For now, it resets
LC_TIME to "C" (reverting the 1998-08-07 change), and also
resets LC_MESSAGES to "C".
- (x_term_init): Use it to fix up the locale after setlocale
- (LC_ALL, "").
+ (x_term_init): Use it to fix up the locale after setlocale (LC_ALL, "").
1998-08-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
diff --git a/src/Makefile.in b/src/Makefile.in
index 3bc01234347..cb183e6bbf2 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -75,12 +75,6 @@ SHELL=/bin/sh
#define NOT_C_CODE
#include "config.h"
-/* We will not really call alloca;
- do not let the file name alloca.c get messed up. */
-#ifdef alloca
-#undef alloca
-#endif
-
/* Do not let the file name mktime.c get messed up. */
#ifdef mktime
#undef mktime
@@ -281,22 +275,14 @@ TOOLKIT_DEFINES =
/* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
since it may have -I options that should override those two. */
-ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(TOOLKIT_DEFINES) $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM C_SWITCH_SYSTEM_TEMACS ${CFLAGS_SOUND} ${CFLAGS}
+ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(TOOLKIT_DEFINES) $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM C_SWITCH_SYSTEM_TEMACS ${CFLAGS_SOUND} ${RSVG_CFLAGS} ${CFLAGS}
.c.o:
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
-#ifndef LIBX10_MACHINE
-#define LIBX10_MACHINE
-#endif
-
#ifndef LIBX11_MACHINE
#define LIBX11_MACHINE
#endif
-#ifndef LIBX10_SYSTEM
-#define LIBX10_SYSTEM
-#endif
-
#ifndef LIBX11_SYSTEM
#define LIBX11_SYSTEM
#endif
@@ -440,7 +426,7 @@ XFT_LIBS=@XFT_LIBS@
#if HAVE_GIF
#ifndef LIBGIF
-#define LIBGIF -lungif
+#define LIBGIF -lgif
#endif /* not defined LIBGIF */
#else /* not HAVE_GIF */
#define LIBGIF
@@ -452,14 +438,33 @@ XFT_LIBS=@XFT_LIBS@
X11_LDFLAGS = LD_SWITCH_X_SITE LD_SWITCH_X_DEFAULT
LIBX= $(LIBXMENU) $(X11_LDFLAGS) $(LIBXT) LIBTIFF LIBJPEG LIBPNG LIBGIF LIBXPM LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM $(XFT_LIBS)
#else /* not HAVE_X11 */
-LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM
+LIBX= $(LIBXMENU) LD_SWITCH_X_SITE
#endif /* not HAVE_X11 */
#else /* not HAVE_X_WINDOWS */
#endif /* not HAVE_X_WINDOWS */
+#if HAVE_GPM
+#ifndef LIBGPM
+#define LIBGPM -lgpm
+#endif /* not defined LIBGPM */
+#else /* not HAVE_GPM */
+#define LIBGPM
+#endif /* not HAVE_GPM */
+
+#if HAVE_LIBRESOLV
+#ifndef LIBRESOLV
+#define LIBRESOLV -lresolv
+#endif /* not defined LIBRESOLV */
+#else /* not HAVE_LIBRESOLV */
+#define LIBRESOLV
+#endif /* not HAVE_LIBRESOLV */
+
LIBSOUND= @LIBSOUND@
CFLAGS_SOUND= @CFLAGS_SOUND@
+RSVG_LIBS= @RSVG_LIBS@
+RSVG_CFLAGS= @RSVG_CFLAGS@
+
#ifndef ORDINARY_LINK
/* Fix linking if compiled with GCC. */
#ifdef __GNUC__
@@ -583,14 +588,14 @@ emacsappsrc = ${srcdir}/../mac/Emacs.app/
whose initialized data areas should be dumped as pure by dump-emacs. */
obj= dispnew.o frame.o scroll.o xdisp.o $(XMENU_OBJ) window.o \
charset.o coding.o category.o ccl.o \
- cm.o term.o xfaces.o $(XOBJ) $(GTK_OBJ)\
+ cm.o term.o terminal.o xfaces.o $(XOBJ) $(GTK_OBJ)\
emacs.o keyboard.o macros.o keymap.o sysdep.o \
buffer.o filelock.o insdel.o marker.o \
minibuf.o fileio.o dired.o filemode.o \
cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
alloc.o data.o doc.o editfns.o callint.o \
eval.o floatfns.o fns.o print.o lread.o \
- abbrev.o syntax.o UNEXEC bytecode.o \
+ syntax.o UNEXEC bytecode.o \
process.o callproc.o \
region-cache.o sound.o atimer.o \
doprnt.o strftime.o intervals.o textprop.o composite.o md5.o \
@@ -599,7 +604,7 @@ obj= dispnew.o frame.o scroll.o xdisp.o $(XMENU_OBJ) window.o \
/* Object files used on some machine or other.
These go in the DOC file on all machines
in case they are needed there. */
-SOME_MACHINE_OBJECTS = sunfns.o dosfns.o msdos.o \
+SOME_MACHINE_OBJECTS = dosfns.o msdos.o \
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
mac.o macterm.o macfns.o macmenu.o macselect.o fontset.o \
w32.o w32bdf.o w32console.o w32fns.o w32heap.o w32inevt.o \
@@ -638,12 +643,6 @@ mallocobj = $(gmallocobj) $(rallocobj) vm-limit.o
#endif /* SYSTEM_MALLOC */
-#ifndef HAVE_ALLOCA
-allocaobj = alloca.o
-#else
-allocaobj =
-#endif
-
#ifdef USE_X_TOOLKIT
widgetobj= widget.o
#else /* not USE_X_TOOLKIT */
@@ -655,17 +654,21 @@ widgetobj=
should not be told about. */
#ifdef CYGWIN
/* Cygwin differs because of its unexec(). */
-otherobj= $(termcapobj) $(gmallocobj) $(rallocobj) lastfile.o vm-limit.o $(allocaobj) $(widgetobj) $(LIBOBJS)
+otherobj= $(termcapobj) $(gmallocobj) $(rallocobj) lastfile.o vm-limit.o $(widgetobj) $(LIBOBJS)
#else
-otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj) $(LIBOBJS)
+otherobj= $(termcapobj) lastfile.o $(mallocobj) $(widgetobj) $(LIBOBJS)
#endif
#ifdef HAVE_MOUSE
#define MOUSE_SUPPORT ${lispsource}mouse.elc \
${lispsource}select.elc ${lispsource}scroll-bar.elc
#else
+#ifdef HAVE_GPM
+#define MOUSE_SUPPORT ${lispsource}mouse.elc
+#else
#define MOUSE_SUPPORT
#endif
+#endif
#ifdef VMS
#define VMS_SUPPORT ${lispsource}vmsproc.elc ${lispsource}vms-patch.elc
@@ -927,14 +930,16 @@ SOME_MACHINE_LISP = ${dotdot}/lisp/mouse.elc \
${dotdot}/lisp/x-dnd.elc \
${dotdot}/lisp/international/ccl.elc \
${dotdot}/lisp/international/codepage.elc \
- ${dotdot}/lisp/international/fontset.elc
+ ${dotdot}/lisp/international/fontset.elc \
+ ${dotdot}/lisp/mouse.elc \
+ ${dotdot}/lisp/term/x-win.elc
/* Construct full set of libraries to be linked.
Note that SunOS needs -lm to come before -lc; otherwise, you get
duplicated symbols. If the standard libraries were compiled
with GCC, we might need gnulib again after them. */
-LIBES = $(LOADLIBES) $(LIBS) $(LIBX) $(LIBSOUND) \
- LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
+LIBES = $(LOADLIBES) $(LIBS) $(LIBX) $(LIBSOUND) $(RSVG_LIBS) LIBGPM \
+ LIBRESOLV LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
LIBS_DEBUG $(GETLOADAVG_LIBS) $(GNULIB_VAR) LIB_MATH LIB_STANDARD \
$(GNULIB_VAR)
@@ -1076,19 +1081,11 @@ stamp-oldxmenu:
@echo "Please run the `configure' script again."
exit 1
-/* Some machines have alloca built-in.
- They should define HAVE_ALLOCA.
- Some use the C version in alloca.c (these define C_ALLOCA in config.h).
- */
-alloca.o: alloca.c blockinput.h atimer.h systime.h
-
/* Nearly all the following files depend on lisp.h,
but it is not included as a dependency because
it is so often changed in ways that do not require any recompilation
and so rarely changed in ways that do require any. */
-abbrev.o: abbrev.c buffer.h window.h dispextern.h commands.h charset.h \
- syntax.h $(config_h)
buffer.o: buffer.c buffer.h region-cache.h commands.h window.h \
dispextern.h $(INTERVAL_SRC) blockinput.h atimer.h systime.h charset.h \
$(config_h)
@@ -1096,7 +1093,7 @@ callint.o: callint.c window.h commands.h buffer.h keymap.h \
keyboard.h dispextern.h $(config_h)
callproc.o: callproc.c epaths.h buffer.h commands.h $(config_h) \
process.h systty.h syssignal.h charset.h coding.h ccl.h msdos.h \
- composite.h w32.h blockinput.h atimer.h systime.h
+ composite.h w32.h blockinput.h atimer.h systime.h frame.h termhooks.h
casefiddle.o: casefiddle.c syntax.h commands.h buffer.h composite.h \
charset.h keymap.h $(config_h)
casetab.o: casetab.c buffer.h $(config_h)
@@ -1105,8 +1102,8 @@ ccl.o: ccl.c ccl.h charset.h coding.h $(config_h)
charset.o: charset.c charset.h buffer.h coding.h composite.h disptab.h \
$(config_h)
coding.o: coding.c coding.h ccl.h buffer.h charset.h intervals.h composite.h \
- window.h dispextern.h $(config_h)
-cm.o: cm.c cm.h termhooks.h $(config_h)
+ window.h dispextern.h frame.h termhooks.h $(config_h)
+cm.o: cm.c frame.h cm.h termhooks.h termchar.h $(config_h)
cmds.o: cmds.c syntax.h buffer.h charset.h commands.h window.h $(config_h) \
msdos.h dispextern.h keyboard.h keymap.h
pre-crt0.o: pre-crt0.c
@@ -1114,7 +1111,7 @@ ecrt0.o: ecrt0.c $(config_h)
CRT0_COMPILE ${srcdir}/ecrt0.c
dired.o: dired.c commands.h buffer.h $(config_h) charset.h coding.h regex.h \
systime.h blockinput.h atimer.h
-dispnew.o: dispnew.c systty.h systime.h commands.h process.h frame.h \
+dispnew.o: dispnew.c systime.h commands.h process.h frame.h \
window.h buffer.h dispextern.h termchar.h termopts.h termhooks.h cm.h \
disptab.h indent.h intervals.h \
xterm.h blockinput.h atimer.h charset.h msdos.h composite.h keyboard.h \
@@ -1135,10 +1132,10 @@ filelock.o: filelock.c buffer.h charset.h coding.h systime.h epaths.h $(config_h
filemode.o: filemode.c $(config_h)
frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
blockinput.h atimer.h systime.h buffer.h charset.h fontset.h \
- msdos.h dosfns.h dispextern.h w32term.h macterm.h $(config_h)
-fringe.o: fringe.c dispextern.h frame.h window.h buffer.h $(config_h)
+ msdos.h dosfns.h dispextern.h w32term.h macterm.h termchar.h $(config_h)
+fringe.o: fringe.c dispextern.h frame.h window.h buffer.h termhooks.h $(config_h)
fontset.o: dispextern.h fontset.h fontset.c ccl.h buffer.h charset.h frame.h \
- keyboard.h $(config_h)
+ keyboard.h termhooks.h $(config_h)
getloadavg.o: getloadavg.c $(config_h)
image.o: image.c frame.h window.h dispextern.h blockinput.h atimer.h \
systime.h xterm.h w32term.h w32gui.h macterm.h macgui.h $(config_h)
@@ -1149,7 +1146,7 @@ insdel.o: insdel.c window.h buffer.h $(INTERVAL_SRC) blockinput.h charset.h \
dispextern.h atimer.h systime.h region-cache.h $(config_h)
keyboard.o: keyboard.c termchar.h termhooks.h termopts.h buffer.h charset.h \
commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
- systty.h systime.h dispextern.h syntax.h $(INTERVAL_SRC) blockinput.h \
+ systime.h dispextern.h syntax.h $(INTERVAL_SRC) blockinput.h \
atimer.h xterm.h puresize.h msdos.h keymap.h w32term.h macterm.h $(config_h)
keymap.o: keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
atimer.h systime.h puresize.h charset.h intervals.h keymap.h window.h \
@@ -1164,7 +1161,8 @@ vm-limit.o: vm-limit.c mem-limits.h $(config_h)
marker.o: marker.c buffer.h charset.h $(config_h)
md5.o: md5.c md5.h $(config_h)
minibuf.o: minibuf.c syntax.h dispextern.h frame.h window.h keyboard.h \
- buffer.h commands.h charset.h msdos.h $(INTERVAL_SRC) keymap.h $(config_h)
+ buffer.h commands.h charset.h msdos.h $(INTERVAL_SRC) keymap.h \
+ termhooks.h $(config_h)
mktime.o: mktime.c $(config_h)
msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame.h \
termopts.h termchar.h charset.h coding.h ccl.h disptab.h window.h \
@@ -1176,7 +1174,7 @@ process.o: process.c process.h buffer.h window.h termhooks.h termopts.h \
regex.o: regex.c syntax.h buffer.h $(config_h) regex.h category.h charset.h
region-cache.o: region-cache.c buffer.h region-cache.h $(config_h)
scroll.o: scroll.c termchar.h dispextern.h frame.h msdos.h keyboard.h \
- $(config_h)
+ termhooks.h $(config_h)
search.o: search.c regex.h commands.h buffer.h region-cache.h syntax.h \
blockinput.h atimer.h systime.h category.h charset.h composite.h \
$(INTERVAL_SRC) $(config_h)
@@ -1185,11 +1183,13 @@ syntax.o: syntax.c syntax.h buffer.h commands.h category.h charset.h \
composite.h keymap.h regex.h $(INTERVAL_SRC) $(config_h)
sysdep.o: sysdep.c syssignal.h systty.h systime.h syswait.h blockinput.h \
process.h dispextern.h termhooks.h termchar.h termopts.h \
- frame.h atimer.h window.h msdos.h dosfns.h keyboard.h $(config_h)
+ frame.h atimer.h window.h msdos.h dosfns.h keyboard.h cm.h $(config_h)
term.o: term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h \
disptab.h dispextern.h keyboard.h charset.h coding.h ccl.h msdos.h \
window.h keymap.h blockinput.h atimer.h systime.h
termcap.o: termcap.c $(config_h)
+terminal.o: terminal.c frame.h termchar.h termhooks.h charset.h coding.h \
+ keyboard.h $(config_h)
terminfo.o: terminfo.c $(config_h)
tparam.o: tparam.c $(config_h)
undo.o: undo.c buffer.h commands.h window.h $(config_h)
@@ -1202,7 +1202,7 @@ w16select.o: w16select.c dispextern.h frame.h blockinput.h atimer.h systime.h \
widget.o: widget.c xterm.h frame.h dispextern.h widgetprv.h \
$(srcdir)/../lwlib/lwlib.h $(config_h)
window.o: window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
- termhooks.h disptab.h keyboard.h dispextern.h msdos.h composite.h \
+ disptab.h keyboard.h dispextern.h msdos.h composite.h \
keymap.h blockinput.h atimer.h systime.h $(INTERVAL_SRC) \
xterm.h w32term.h macterm.h $(config_h)
xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h coding.h \
@@ -1211,10 +1211,11 @@ xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h co
msdos.h composite.h fontset.h blockinput.h atimer.h systime.h keymap.h
xfaces.o: xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
window.h charset.h msdos.h dosfns.h composite.h atimer.h systime.h \
- keyboard.h fontset.h w32term.h macterm.h $(INTERVAL_SRC) $(config_h)
+ keyboard.h fontset.h w32term.h macterm.h $(INTERVAL_SRC) termchar.h \
+ termhooks.h $(config_h)
xfns.o: xfns.c buffer.h frame.h window.h keyboard.h xterm.h dispextern.h \
$(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h epaths.h \
- charset.h gtkutil.h $(config_h)
+ charset.h gtkutil.h termchar.h termhooks.h $(config_h)
xmenu.o: xmenu.c xterm.h termhooks.h window.h dispextern.h frame.h buffer.h \
keyboard.h $(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h \
gtkutil.h msdos.h coding.h $(config_h)
@@ -1223,7 +1224,7 @@ xterm.o: xterm.c xterm.h termhooks.h termopts.h termchar.h window.h buffer.h \
keyboard.h gnu.h charset.h ccl.h fontset.h composite.h \
coding.h process.h gtkutil.h $(config_h)
xselect.o: xselect.c process.h dispextern.h frame.h xterm.h blockinput.h \
- buffer.h atimer.h systime.h $(config_h)
+ buffer.h atimer.h systime.h termhooks.h $(config_h)
xrdb.o: xrdb.c $(config_h) epaths.h
xsmfns.o: xsmfns.c $(config_h) systime.h sysselect.h termhooks.h xterm.h \
lisp.h termopts.h
@@ -1241,19 +1242,18 @@ alloc.o: alloc.c process.h frame.h window.h buffer.h puresize.h syssignal.h key
blockinput.h atimer.h systime.h charset.h dispextern.h $(config_h) $(INTERVAL_SRC)
bytecode.o: bytecode.c buffer.h syntax.h charset.h window.h dispextern.h \
frame.h xterm.h $(config_h)
-data.o: data.c buffer.h puresize.h charset.h syssignal.h keyboard.h frame.h $(config_h)
+data.o: data.c buffer.h puresize.h charset.h syssignal.h keyboard.h frame.h termhooks.h $(config_h)
eval.o: eval.c commands.h keyboard.h blockinput.h atimer.h systime.h \
dispextern.h $(config_h)
floatfns.o: floatfns.c $(config_h)
fns.o: fns.c commands.h $(config_h) frame.h buffer.h charset.h keyboard.h \
keymap.h frame.h window.h dispextern.h $(INTERVAL_SRC) coding.h md5.h \
- blockinput.h atimer.h systime.h xterm.h
+ blockinput.h atimer.h systime.h xterm.h termhooks.h
print.o: print.c process.h frame.h window.h buffer.h keyboard.h charset.h \
$(config_h) dispextern.h termchar.h $(INTERVAL_SRC) msdos.h composite.h \
blockinput.h atimer.h systime.h
lread.o: lread.c commands.h keyboard.h buffer.h epaths.h charset.h \
- $(config_h) $(INTERVAL_SRC) termhooks.h coding.h msdos.h blockinput.h \
- atimer.h systime.h
+ $(config_h) $(INTERVAL_SRC) termhooks.h coding.h msdos.h
/* Text properties support */
textprop.o: textprop.c buffer.h window.h dispextern.h $(INTERVAL_SRC) \
@@ -1266,12 +1266,10 @@ composite.o: composite.c buffer.h charset.h $(INTERVAL_SRC) $(config_h)
OTHER_FILES and OBJECTS_MACHINE
select which of these should be compiled. */
-sunfns.o: sunfns.c buffer.h window.h dispextern.h $(config_h)
-
#ifdef HAVE_CARBON
-abbrev.o buffer.o callint.o cmds.o dispnew.o editfns.o fileio.o frame.o \
+buffer.o callint.o cmds.o dispnew.o editfns.o fileio.o frame.o \
fontset.o indent.o insdel.o keyboard.o macros.o minibuf.o msdos.o process.o \
- scroll.o sysdep.o term.o widget.o window.o xdisp.o xfaces.o xfns.o xmenu.o \
+ scroll.o sysdep.o term.o terminal.o widget.o window.o xdisp.o xfaces.o xfns.o xmenu.o \
xterm.o xselect.o sound.o: macgui.h
mac.o: mac.c process.h sysselect.h blockinput.h atimer.h systime.h charset.h \
coding.h ccl.h $(config_h)
@@ -1312,8 +1310,6 @@ ${emacsapp}Contents/MacOS/Emacs: emacs${EXEEXT}
cd ${emacsapp}Contents/MacOS/; cp ../../../../src/emacs${EXEEXT} Emacs${EXEEXT}
#endif
-${libsrc}emacstool${EXEEXT}: ${libsrc}emacstool.c
- cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool${EXEEXT}
bootstrapclean:
rm -f bootstrap-emacs${EXEEXT} emacs-${version}${EXEEXT}
mostlyclean:
@@ -1339,17 +1335,6 @@ versionclean:
extraclean: distclean
-rm -f *~ \#* m/?*~ s/?*~
-/* The rule for the [sm] files has to be written a little funny to
- avoid looking like a C comment to CPP. */
-SOURCES = *.[ch] [sm]/?* COPYING Makefile.in \
- config.in epaths.in README COPYING ChangeLog vms.pp-trans
-unlock:
- chmod u+w $(SOURCES)
-
-relock:
- chmod -w $(SOURCES)
- chmod +w epaths.h
-
/* Arrange to make a tags table TAGS-LISP for ../lisp,
plus TAGS for the C files, which includes ../lisp/TAGS by reference. */
diff --git a/src/abbrev.c b/src/abbrev.c
deleted file mode 100644
index bdb8dc66ba7..00000000000
--- a/src/abbrev.c
+++ /dev/null
@@ -1,736 +0,0 @@
-/* Primitives for word-abbrev mode.
- Copyright (C) 1985, 1986, 1993, 1996, 1998, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
-
-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 3, 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. */
-
-
-#include <config.h>
-#include <stdio.h>
-
-#include "lisp.h"
-#include "commands.h"
-#include "buffer.h"
-#include "window.h"
-#include "charset.h"
-#include "syntax.h"
-
-/* An abbrev table is an obarray.
- Each defined abbrev is represented by a symbol in that obarray
- whose print name is the abbreviation.
- The symbol's value is a string which is the expansion.
- If its function definition is non-nil, it is called
- after the expansion is done.
- The plist slot of the abbrev symbol is its usage count. */
-
-/* List of all abbrev-table name symbols:
- symbols whose values are abbrev tables. */
-
-Lisp_Object Vabbrev_table_name_list;
-
-/* The table of global abbrevs. These are in effect
- in any buffer in which abbrev mode is turned on. */
-
-Lisp_Object Vglobal_abbrev_table;
-
-/* The local abbrev table used by default (in Fundamental Mode buffers) */
-
-Lisp_Object Vfundamental_mode_abbrev_table;
-
-/* Set nonzero when an abbrev definition is changed */
-
-int abbrevs_changed;
-
-int abbrev_all_caps;
-
-/* Non-nil => use this location as the start of abbrev to expand
- (rather than taking the word before point as the abbrev) */
-
-Lisp_Object Vabbrev_start_location;
-
-/* Buffer that Vabbrev_start_location applies to */
-Lisp_Object Vabbrev_start_location_buffer;
-
-/* The symbol representing the abbrev most recently expanded */
-
-Lisp_Object Vlast_abbrev;
-
-/* A string for the actual text of the abbrev most recently expanded.
- This has more info than Vlast_abbrev since case is significant. */
-
-Lisp_Object Vlast_abbrev_text;
-
-/* Character address of start of last abbrev expanded */
-
-EMACS_INT last_abbrev_point;
-
-/* Hook to run before expanding any abbrev. */
-
-Lisp_Object Vpre_abbrev_expand_hook, Qpre_abbrev_expand_hook;
-
-Lisp_Object Qsystem_type, Qcount, Qforce;
-
-DEFUN ("make-abbrev-table", Fmake_abbrev_table, Smake_abbrev_table, 0, 0, 0,
- doc: /* Create a new, empty abbrev table object. */)
- ()
-{
- /* The value 59 is arbitrary chosen prime number. */
- return Fmake_vector (make_number (59), make_number (0));
-}
-
-DEFUN ("clear-abbrev-table", Fclear_abbrev_table, Sclear_abbrev_table, 1, 1, 0,
- doc: /* Undefine all abbrevs in abbrev table TABLE, leaving it empty. */)
- (table)
- Lisp_Object table;
-{
- int i, size;
-
- CHECK_VECTOR (table);
- size = XVECTOR (table)->size;
- abbrevs_changed = 1;
- for (i = 0; i < size; i++)
- XVECTOR (table)->contents[i] = make_number (0);
- return Qnil;
-}
-
-DEFUN ("define-abbrev", Fdefine_abbrev, Sdefine_abbrev, 3, 6, 0,
- doc: /* Define an abbrev in TABLE named NAME, to expand to EXPANSION and call HOOK.
-NAME must be a string, and should be lower-case.
-EXPANSION should usually be a string.
-To undefine an abbrev, define it with EXPANSION = nil.
-If HOOK is non-nil, it should be a function of no arguments;
-it is called after EXPANSION is inserted.
-If EXPANSION is not a string, the abbrev is a special one,
- which does not expand in the usual way but only runs HOOK.
-
-COUNT, if specified, gives the initial value for the abbrev's
-usage-count, which is incremented each time the abbrev is used.
-\(The default is zero.)
-
-SYSTEM-FLAG, if non-nil, says that this is a "system" abbreviation
-which should not be saved in the user's abbreviation file.
-Unless SYSTEM-FLAG is `force', a system abbreviation will not
-overwrite a non-system abbreviation of the same name. */)
- (table, name, expansion, hook, count, system_flag)
- Lisp_Object table, name, expansion, hook, count, system_flag;
-{
- Lisp_Object sym, oexp, ohook, tem;
- CHECK_VECTOR (table);
- CHECK_STRING (name);
-
- /* If defining a system abbrev, do not overwrite a non-system abbrev
- of the same name, unless 'force is used. */
- if (!NILP (system_flag) && !EQ (system_flag, Qforce))
- {
- sym = Fintern_soft (name, table);
-
- if (!NILP (SYMBOL_VALUE (sym)) &&
- NILP (Fplist_get (XSYMBOL (sym)->plist, Qsystem_type))) return Qnil;
- }
-
- if (NILP (count))
- count = make_number (0);
- else
- CHECK_NUMBER (count);
-
- sym = Fintern (name, table);
-
- oexp = SYMBOL_VALUE (sym);
- ohook = XSYMBOL (sym)->function;
- if (!((EQ (oexp, expansion)
- || (STRINGP (oexp) && STRINGP (expansion)
- && (tem = Fstring_equal (oexp, expansion), !NILP (tem))))
- &&
- (EQ (ohook, hook)
- || (tem = Fequal (ohook, hook), !NILP (tem))))
- && NILP (system_flag))
- abbrevs_changed = 1;
-
- Fset (sym, expansion);
- Ffset (sym, hook);
-
- if (! NILP (system_flag))
- Fsetplist (sym, list4 (Qcount, count, Qsystem_type, system_flag));
- else
- Fsetplist (sym, count);
-
- return name;
-}
-
-DEFUN ("define-global-abbrev", Fdefine_global_abbrev, Sdefine_global_abbrev, 2, 2,
- "sDefine global abbrev: \nsExpansion for %s: ",
- doc: /* Define ABBREV as a global abbreviation for EXPANSION. */)
- (abbrev, expansion)
- Lisp_Object abbrev, expansion;
-{
- Fdefine_abbrev (Vglobal_abbrev_table, Fdowncase (abbrev),
- expansion, Qnil, make_number (0), Qnil);
- return abbrev;
-}
-
-DEFUN ("define-mode-abbrev", Fdefine_mode_abbrev, Sdefine_mode_abbrev, 2, 2,
- "sDefine mode abbrev: \nsExpansion for %s: ",
- doc: /* Define ABBREV as a mode-specific abbreviation for EXPANSION. */)
- (abbrev, expansion)
- Lisp_Object abbrev, expansion;
-{
- if (NILP (current_buffer->abbrev_table))
- error ("Major mode has no abbrev table");
-
- Fdefine_abbrev (current_buffer->abbrev_table, Fdowncase (abbrev),
- expansion, Qnil, make_number (0), Qnil);
- return abbrev;
-}
-
-DEFUN ("abbrev-symbol", Fabbrev_symbol, Sabbrev_symbol, 1, 2, 0,
- doc: /* Return the symbol representing abbrev named ABBREV.
-This symbol's name is ABBREV, but it is not the canonical symbol of that name;
-it is interned in an abbrev-table rather than the normal obarray.
-The value is nil if that abbrev is not defined.
-Optional second arg TABLE is abbrev table to look it up in.
-The default is to try buffer's mode-specific abbrev table, then global table. */)
- (abbrev, table)
- Lisp_Object abbrev, table;
-{
- Lisp_Object sym;
- CHECK_STRING (abbrev);
- if (!NILP (table))
- sym = Fintern_soft (abbrev, table);
- else
- {
- sym = Qnil;
- if (!NILP (current_buffer->abbrev_table))
- sym = Fintern_soft (abbrev, current_buffer->abbrev_table);
- if (NILP (SYMBOL_VALUE (sym)))
- sym = Qnil;
- if (NILP (sym))
- sym = Fintern_soft (abbrev, Vglobal_abbrev_table);
- }
- if (NILP (SYMBOL_VALUE (sym)))
- return Qnil;
- return sym;
-}
-
-DEFUN ("abbrev-expansion", Fabbrev_expansion, Sabbrev_expansion, 1, 2, 0,
- doc: /* Return the string that ABBREV expands into in the current buffer.
-Optionally specify an abbrev table as second arg;
-then ABBREV is looked up in that table only. */)
- (abbrev, table)
- Lisp_Object abbrev, table;
-{
- Lisp_Object sym;
- sym = Fabbrev_symbol (abbrev, table);
- if (NILP (sym)) return sym;
- return Fsymbol_value (sym);
-}
-
-/* Expand the word before point, if it is an abbrev.
- Returns 1 if an expansion is done. */
-
-DEFUN ("expand-abbrev", Fexpand_abbrev, Sexpand_abbrev, 0, 0, "",
- doc: /* Expand the abbrev before point, if there is an abbrev there.
-Effective when explicitly called even when `abbrev-mode' is nil.
-Returns the abbrev symbol, if expansion took place. */)
- ()
-{
- register char *buffer, *p;
- int wordstart, wordend;
- register int wordstart_byte, wordend_byte, idx, idx_byte;
- int whitecnt;
- int uccount = 0, lccount = 0;
- register Lisp_Object sym;
- Lisp_Object expansion, hook, tem;
- Lisp_Object value;
- int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
-
- value = Qnil;
-
- Frun_hooks (1, &Qpre_abbrev_expand_hook);
-
- wordstart = 0;
- if (!(BUFFERP (Vabbrev_start_location_buffer)
- && XBUFFER (Vabbrev_start_location_buffer) == current_buffer))
- Vabbrev_start_location = Qnil;
- if (!NILP (Vabbrev_start_location))
- {
- tem = Vabbrev_start_location;
- CHECK_NUMBER_COERCE_MARKER (tem);
- wordstart = XINT (tem);
- Vabbrev_start_location = Qnil;
- if (wordstart < BEGV || wordstart > ZV)
- wordstart = 0;
- if (wordstart && wordstart != ZV)
- {
- wordstart_byte = CHAR_TO_BYTE (wordstart);
- if (FETCH_BYTE (wordstart_byte) == '-')
- del_range (wordstart, wordstart + 1);
- }
- }
- if (!wordstart)
- wordstart = scan_words (PT, -1);
-
- if (!wordstart)
- return value;
-
- wordstart_byte = CHAR_TO_BYTE (wordstart);
- wordend = scan_words (wordstart, 1);
- if (!wordend)
- return value;
-
- if (wordend > PT)
- wordend = PT;
-
- wordend_byte = CHAR_TO_BYTE (wordend);
- whitecnt = PT - wordend;
- if (wordend <= wordstart)
- return value;
-
- p = buffer = (char *) alloca (wordend_byte - wordstart_byte);
-
- for (idx = wordstart, idx_byte = wordstart_byte; idx < wordend; )
- {
- register int c;
-
- if (multibyte)
- {
- FETCH_CHAR_ADVANCE (c, idx, idx_byte);
- }
- else
- {
- c = FETCH_BYTE (idx_byte);
- idx++, idx_byte++;
- }
-
- if (UPPERCASEP (c))
- c = DOWNCASE (c), uccount++;
- else if (! NOCASEP (c))
- lccount++;
- if (multibyte)
- p += CHAR_STRING (c, p);
- else
- *p++ = c;
- }
-
- if (VECTORP (current_buffer->abbrev_table))
- sym = oblookup (current_buffer->abbrev_table, buffer,
- wordend - wordstart, p - buffer);
- else
- XSETFASTINT (sym, 0);
-
- if (INTEGERP (sym) || NILP (SYMBOL_VALUE (sym)))
- sym = oblookup (Vglobal_abbrev_table, buffer,
- wordend - wordstart, p - buffer);
- if (INTEGERP (sym) || NILP (SYMBOL_VALUE (sym)))
- return value;
-
- if (INTERACTIVE && !EQ (minibuf_window, selected_window))
- {
- /* Add an undo boundary, in case we are doing this for
- a self-inserting command which has avoided making one so far. */
- SET_PT (wordend);
- Fundo_boundary ();
- }
-
- Vlast_abbrev_text
- = Fbuffer_substring (make_number (wordstart), make_number (wordend));
-
- /* Now sym is the abbrev symbol. */
- Vlast_abbrev = sym;
- value = sym;
- last_abbrev_point = wordstart;
-
- /* Increment use count. */
- if (INTEGERP (XSYMBOL (sym)->plist))
- XSETINT (XSYMBOL (sym)->plist,
- XINT (XSYMBOL (sym)->plist) + 1);
- else if (INTEGERP (tem = Fget (sym, Qcount)))
- Fput (sym, Qcount, make_number (XINT (tem) + 1));
-
- /* If this abbrev has an expansion, delete the abbrev
- and insert the expansion. */
- expansion = SYMBOL_VALUE (sym);
- if (STRINGP (expansion))
- {
- SET_PT (wordstart);
-
- insert_from_string (expansion, 0, 0, SCHARS (expansion),
- SBYTES (expansion), 1);
- del_range_both (PT, PT_BYTE,
- wordend + (PT - wordstart),
- wordend_byte + (PT_BYTE - wordstart_byte),
- 1);
-
- SET_PT (PT + whitecnt);
-
- if (uccount && !lccount)
- {
- /* Abbrev was all caps */
- /* If expansion is multiple words, normally capitalize each word */
- /* This used to be if (!... && ... >= ...) Fcapitalize; else Fupcase
- but Megatest 68000 compiler can't handle that */
- if (!abbrev_all_caps)
- if (scan_words (PT, -1) > scan_words (wordstart, 1))
- {
- Fupcase_initials_region (make_number (wordstart),
- make_number (PT));
- goto caped;
- }
- /* If expansion is one word, or if user says so, upcase it all. */
- Fupcase_region (make_number (wordstart), make_number (PT));
- caped: ;
- }
- else if (uccount)
- {
- /* Abbrev included some caps. Cap first initial of expansion */
- int pos = wordstart_byte;
-
- /* Find the initial. */
- while (pos < PT_BYTE
- && SYNTAX (*BUF_BYTE_ADDRESS (current_buffer, pos)) != Sword)
- pos++;
-
- /* Change just that. */
- pos = BYTE_TO_CHAR (pos);
- Fupcase_initials_region (make_number (pos), make_number (pos + 1));
- }
- }
-
- hook = XSYMBOL (sym)->function;
- if (!NILP (hook))
- {
- Lisp_Object expanded, prop;
-
- /* If the abbrev has a hook function, run it. */
- expanded = call0 (hook);
-
- /* In addition, if the hook function is a symbol with
- a non-nil `no-self-insert' property, let the value it returned
- specify whether we consider that an expansion took place. If
- it returns nil, no expansion has been done. */
-
- if (SYMBOLP (hook)
- && NILP (expanded)
- && (prop = Fget (hook, intern ("no-self-insert")),
- !NILP (prop)))
- value = Qnil;
- }
-
- return value;
-}
-
-DEFUN ("unexpand-abbrev", Funexpand_abbrev, Sunexpand_abbrev, 0, 0, "",
- doc: /* Undo the expansion of the last abbrev that expanded.
-This differs from ordinary undo in that other editing done since then
-is not undone. */)
- ()
-{
- int opoint = PT;
- int adjust = 0;
- if (last_abbrev_point < BEGV
- || last_abbrev_point > ZV)
- return Qnil;
- SET_PT (last_abbrev_point);
- if (STRINGP (Vlast_abbrev_text))
- {
- /* This isn't correct if Vlast_abbrev->function was used
- to do the expansion */
- Lisp_Object val;
- int zv_before;
-
- val = SYMBOL_VALUE (Vlast_abbrev);
- if (!STRINGP (val))
- error ("Value of `abbrev-symbol' must be a string");
- zv_before = ZV;
- del_range_byte (PT_BYTE, PT_BYTE + SBYTES (val), 1);
- /* Don't inherit properties here; just copy from old contents. */
- insert_from_string (Vlast_abbrev_text, 0, 0,
- SCHARS (Vlast_abbrev_text),
- SBYTES (Vlast_abbrev_text), 0);
- Vlast_abbrev_text = Qnil;
- /* Total number of characters deleted. */
- adjust = ZV - zv_before;
- }
- SET_PT (last_abbrev_point < opoint ? opoint + adjust : opoint);
- return Qnil;
-}
-
-static void
-write_abbrev (sym, stream)
- Lisp_Object sym, stream;
-{
- Lisp_Object name, count, system_flag;
-
- if (INTEGERP (XSYMBOL (sym)->plist))
- {
- count = XSYMBOL (sym)->plist;
- system_flag = Qnil;
- }
- else
- {
- count = Fget (sym, Qcount);
- system_flag = Fget (sym, Qsystem_type);
- }
-
- if (NILP (SYMBOL_VALUE (sym)) || ! NILP (system_flag))
- return;
-
- insert (" (", 5);
- name = SYMBOL_NAME (sym);
- Fprin1 (name, stream);
- insert (" ", 1);
- Fprin1 (SYMBOL_VALUE (sym), stream);
- insert (" ", 1);
- Fprin1 (XSYMBOL (sym)->function, stream);
- insert (" ", 1);
- Fprin1 (count, stream);
- insert (")\n", 2);
-}
-
-static void
-describe_abbrev (sym, stream)
- Lisp_Object sym, stream;
-{
- Lisp_Object one, count, system_flag;
-
- if (INTEGERP (XSYMBOL (sym)->plist))
- {
- count = XSYMBOL (sym)->plist;
- system_flag = Qnil;
- }
- else
- {
- count = Fget (sym, Qcount);
- system_flag = Fget (sym, Qsystem_type);
- }
-
- if (NILP (SYMBOL_VALUE (sym)))
- return;
-
- one = make_number (1);
- Fprin1 (Fsymbol_name (sym), stream);
-
- if (!NILP (system_flag))
- {
- insert_string (" (sys)");
- Findent_to (make_number (20), one);
- }
- else
- Findent_to (make_number (15), one);
-
- Fprin1 (count, stream);
- Findent_to (make_number (20), one);
- Fprin1 (SYMBOL_VALUE (sym), stream);
- if (!NILP (XSYMBOL (sym)->function))
- {
- Findent_to (make_number (45), one);
- Fprin1 (XSYMBOL (sym)->function, stream);
- }
- Fterpri (stream);
-}
-
-static void
-record_symbol (sym, list)
- Lisp_Object sym, list;
-{
- XSETCDR (list, Fcons (sym, XCDR (list)));
-}
-
-DEFUN ("insert-abbrev-table-description", Finsert_abbrev_table_description,
- Sinsert_abbrev_table_description, 1, 2, 0,
- doc: /* Insert before point a full description of abbrev table named NAME.
-NAME is a symbol whose value is an abbrev table.
-If optional 2nd arg READABLE is non-nil, a human-readable description
-is inserted. Otherwise the description is an expression,
-a call to `define-abbrev-table', which would
-define the abbrev table NAME exactly as it is currently defined.
-
-Abbrevs marked as "system abbrevs" are normally omitted. However, if
-READABLE is non-nil, they are listed. */)
- (name, readable)
- Lisp_Object name, readable;
-{
- Lisp_Object table;
- Lisp_Object symbols;
- Lisp_Object stream;
-
- CHECK_SYMBOL (name);
- table = Fsymbol_value (name);
- CHECK_VECTOR (table);
-
- XSETBUFFER (stream, current_buffer);
-
- symbols = Fcons (Qnil, Qnil);
- map_obarray (table, record_symbol, symbols);
- symbols = XCDR (symbols);
- symbols = Fsort (symbols, Qstring_lessp);
-
- if (!NILP (readable))
- {
- insert_string ("(");
- Fprin1 (name, stream);
- insert_string (")\n\n");
- while (! NILP (symbols))
- {
- describe_abbrev (XCAR (symbols), stream);
- symbols = XCDR (symbols);
- }
-
- insert_string ("\n\n");
- }
- else
- {
- insert_string ("(define-abbrev-table '");
- Fprin1 (name, stream);
- insert_string (" '(\n");
- while (! NILP (symbols))
- {
- write_abbrev (XCAR (symbols), stream);
- symbols = XCDR (symbols);
- }
- insert_string (" ))\n\n");
- }
-
- return Qnil;
-}
-
-DEFUN ("define-abbrev-table", Fdefine_abbrev_table, Sdefine_abbrev_table,
- 2, 2, 0,
- doc: /* Define TABLENAME (a symbol) as an abbrev table name.
-Define abbrevs in it according to DEFINITIONS, which is a list of elements
-of the form (ABBREVNAME EXPANSION HOOK USECOUNT SYSTEMFLAG).
-\(If the list is shorter than that, omitted elements default to nil). */)
- (tablename, definitions)
- Lisp_Object tablename, definitions;
-{
- Lisp_Object name, exp, hook, count;
- Lisp_Object table, elt, sys;
-
- CHECK_SYMBOL (tablename);
- table = Fboundp (tablename);
- if (NILP (table) || (table = Fsymbol_value (tablename), NILP (table)))
- {
- table = Fmake_abbrev_table ();
- Fset (tablename, table);
- Vabbrev_table_name_list = Fcons (tablename, Vabbrev_table_name_list);
- }
- CHECK_VECTOR (table);
-
- for (; CONSP (definitions); definitions = XCDR (definitions))
- {
- elt = XCAR (definitions);
- name = Fcar (elt); elt = Fcdr (elt);
- exp = Fcar (elt); elt = Fcdr (elt);
- hook = Fcar (elt); elt = Fcdr (elt);
- count = Fcar (elt); elt = Fcdr (elt);
- sys = Fcar (elt);
- Fdefine_abbrev (table, name, exp, hook, count, sys);
- }
- return Qnil;
-}
-
-void
-syms_of_abbrev ()
-{
- Qsystem_type = intern ("system-type");
- staticpro (&Qsystem_type);
-
- Qcount = intern ("count");
- staticpro (&Qcount);
-
- Qforce = intern ("force");
- staticpro (&Qforce);
-
- DEFVAR_LISP ("abbrev-table-name-list", &Vabbrev_table_name_list,
- doc: /* List of symbols whose values are abbrev tables. */);
- Vabbrev_table_name_list = Fcons (intern ("fundamental-mode-abbrev-table"),
- Fcons (intern ("global-abbrev-table"),
- Qnil));
-
- DEFVAR_LISP ("global-abbrev-table", &Vglobal_abbrev_table,
- doc: /* The abbrev table whose abbrevs affect all buffers.
-Each buffer may also have a local abbrev table.
-If it does, the local table overrides the global one
-for any particular abbrev defined in both. */);
- Vglobal_abbrev_table = Fmake_abbrev_table ();
-
- DEFVAR_LISP ("fundamental-mode-abbrev-table", &Vfundamental_mode_abbrev_table,
- doc: /* The abbrev table of mode-specific abbrevs for Fundamental Mode. */);
- Vfundamental_mode_abbrev_table = Fmake_abbrev_table ();
- current_buffer->abbrev_table = Vfundamental_mode_abbrev_table;
- buffer_defaults.abbrev_table = Vfundamental_mode_abbrev_table;
-
- DEFVAR_LISP ("last-abbrev", &Vlast_abbrev,
- doc: /* The abbrev-symbol of the last abbrev expanded. See `abbrev-symbol'. */);
-
- DEFVAR_LISP ("last-abbrev-text", &Vlast_abbrev_text,
- doc: /* The exact text of the last abbrev expanded.
-A value of nil means the abbrev has already been unexpanded. */);
-
- DEFVAR_INT ("last-abbrev-location", &last_abbrev_point,
- doc: /* The location of the start of the last abbrev expanded. */);
-
- Vlast_abbrev = Qnil;
- Vlast_abbrev_text = Qnil;
- last_abbrev_point = 0;
-
- DEFVAR_LISP ("abbrev-start-location", &Vabbrev_start_location,
- doc: /* Buffer position for `expand-abbrev' to use as the start of the abbrev.
-When nil, use the word before point as the abbrev.
-Calling `expand-abbrev' sets this to nil. */);
- Vabbrev_start_location = Qnil;
-
- DEFVAR_LISP ("abbrev-start-location-buffer", &Vabbrev_start_location_buffer,
- doc: /* Buffer that `abbrev-start-location' has been set for.
-Trying to expand an abbrev in any other buffer clears `abbrev-start-location'. */);
- Vabbrev_start_location_buffer = Qnil;
-
- DEFVAR_PER_BUFFER ("local-abbrev-table", &current_buffer->abbrev_table, Qnil,
- doc: /* Local (mode-specific) abbrev table of current buffer. */);
-
- DEFVAR_BOOL ("abbrevs-changed", &abbrevs_changed,
- doc: /* Set non-nil by defining or altering any word abbrevs.
-This causes `save-some-buffers' to offer to save the abbrevs. */);
- abbrevs_changed = 0;
-
- DEFVAR_BOOL ("abbrev-all-caps", &abbrev_all_caps,
- doc: /* *Set non-nil means expand multi-word abbrevs all caps if abbrev was so. */);
- abbrev_all_caps = 0;
-
- DEFVAR_LISP ("pre-abbrev-expand-hook", &Vpre_abbrev_expand_hook,
- doc: /* Function or functions to be called before abbrev expansion is done.
-This is the first thing that `expand-abbrev' does, and so this may change
-the current abbrev table before abbrev lookup happens. */);
- Vpre_abbrev_expand_hook = Qnil;
- Qpre_abbrev_expand_hook = intern ("pre-abbrev-expand-hook");
- staticpro (&Qpre_abbrev_expand_hook);
-
- defsubr (&Smake_abbrev_table);
- defsubr (&Sclear_abbrev_table);
- defsubr (&Sdefine_abbrev);
- defsubr (&Sdefine_global_abbrev);
- defsubr (&Sdefine_mode_abbrev);
- defsubr (&Sabbrev_expansion);
- defsubr (&Sabbrev_symbol);
- defsubr (&Sexpand_abbrev);
- defsubr (&Sunexpand_abbrev);
- defsubr (&Sinsert_abbrev_table_description);
- defsubr (&Sdefine_abbrev_table);
-}
-
-/* arch-tag: b721db69-f633-44a8-a361-c275acbdad7d
- (do not change this comment) */
diff --git a/src/alloc.c b/src/alloc.c
index 3e2b6649e96..2d87e1806f0 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -55,6 +55,7 @@ Boston, MA 02110-1301, USA. */
#include "blockinput.h"
#include "charset.h"
#include "syssignal.h"
+#include "termhooks.h" /* For struct terminal. */
#include <setjmp.h>
/* GC_MALLOC_CHECK defined means perform validity checks of malloc'd
@@ -240,7 +241,7 @@ static int total_free_floats, total_floats;
out of memory. We keep one large block, four cons-blocks, and
two string blocks. */
-char *spare_memory[7];
+static char *spare_memory[7];
/* Amount of spare memory to keep in large reserve block. */
@@ -323,13 +324,13 @@ Lisp_Object Vmemory_signal_data;
/* Buffer in which we save a copy of the C stack at each GC. */
-char *stack_copy;
-int stack_copy_size;
+static char *stack_copy;
+static int stack_copy_size;
/* Non-zero means ignore malloc warnings. Set during initialization.
Currently not used. */
-int ignore_warnings;
+static int ignore_warnings;
Lisp_Object Qgc_cons_threshold, Qchar_table_extra_slots;
@@ -341,7 +342,9 @@ Lisp_Object Vgc_elapsed; /* accumulated elapsed time in GC */
EMACS_INT gcs_done; /* accumulated GCs */
static void mark_buffer P_ ((Lisp_Object));
+static void mark_terminals P_ ((void));
extern void mark_kboards P_ ((void));
+extern void mark_ttys P_ ((void));
extern void mark_backtrace P_ ((void));
static void gc_sweep P_ ((void));
static void mark_glyph_matrix P_ ((struct glyph_matrix *));
@@ -373,14 +376,11 @@ enum mem_type
MEM_TYPE_MISC,
MEM_TYPE_SYMBOL,
MEM_TYPE_FLOAT,
- /* Keep the following vector-like types together, with
- MEM_TYPE_WINDOW being the last, and MEM_TYPE_VECTOR the
- first. Or change the code of live_vector_p, for instance. */
- MEM_TYPE_VECTOR,
- MEM_TYPE_PROCESS,
- MEM_TYPE_HASH_TABLE,
- MEM_TYPE_FRAME,
- MEM_TYPE_WINDOW
+ /* We used to keep separate mem_types for subtypes of vectors such as
+ process, hash_table, frame, terminal, and window, but we never made
+ use of the distinction, so it only caused source-code complexity
+ and runtime slowdown. Minor but pointless. */
+ MEM_TYPE_VECTORLIKE
};
static POINTER_TYPE *lisp_align_malloc P_ ((size_t, enum mem_type));
@@ -397,12 +397,12 @@ void refill_memory_reserve ();
/* A unique object in pure space used to make some Lisp objects
on free lists recognizable in O(1). */
-Lisp_Object Vdead;
+static Lisp_Object Vdead;
#ifdef GC_MALLOC_CHECK
enum mem_type allocated_mem_type;
-int dont_register_blocks;
+static int dont_register_blocks;
#endif /* GC_MALLOC_CHECK */
@@ -467,7 +467,7 @@ static struct mem_node mem_z;
#define MEM_NIL &mem_z
static POINTER_TYPE *lisp_malloc P_ ((size_t, enum mem_type));
-static struct Lisp_Vector *allocate_vectorlike P_ ((EMACS_INT, enum mem_type));
+static struct Lisp_Vector *allocate_vectorlike P_ ((EMACS_INT));
static void lisp_free P_ ((POINTER_TYPE *));
static void mark_stack P_ ((void));
static int live_vector_p P_ ((struct mem_node *, void *));
@@ -503,11 +503,11 @@ struct gcpro *gcprolist;
value; otherwise some compilers put it into BSS. */
#define NSTATICS 1280
-Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
+static Lisp_Object *staticvec[NSTATICS] = {&Vpurify_flag};
/* Index of next unused slot in staticvec. */
-int staticidx = 0;
+static int staticidx = 0;
static POINTER_TYPE *pure_alloc P_ ((size_t, int));
@@ -743,6 +743,15 @@ overrun_check_free (block)
#define free overrun_check_free
#endif
+#ifdef SYNC_INPUT
+/* When using SYNC_INPUT, we don't call malloc from a signal handler, so
+ there's no need to block input around malloc. */
+#define MALLOC_BLOCK_INPUT ((void)0)
+#define MALLOC_UNBLOCK_INPUT ((void)0)
+#else
+#define MALLOC_BLOCK_INPUT BLOCK_INPUT
+#define MALLOC_UNBLOCK_INPUT UNBLOCK_INPUT
+#endif
/* Like malloc but check for no memory and block interrupt input.. */
@@ -752,9 +761,9 @@ xmalloc (size)
{
register POINTER_TYPE *val;
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
val = (POINTER_TYPE *) malloc (size);
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
if (!val && size)
memory_full ();
@@ -771,14 +780,14 @@ xrealloc (block, size)
{
register POINTER_TYPE *val;
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
/* We must call malloc explicitly when BLOCK is 0, since some
reallocs don't do this. */
if (! block)
val = (POINTER_TYPE *) malloc (size);
else
val = (POINTER_TYPE *) realloc (block, size);
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
if (!val && size) memory_full ();
return val;
@@ -791,9 +800,9 @@ void
xfree (block)
POINTER_TYPE *block;
{
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
free (block);
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
/* We don't call refill_memory_reserve here
because that duplicates doing so in emacs_blocked_free
and the criterion should go there. */
@@ -844,7 +853,7 @@ lisp_malloc (nbytes, type)
{
register void *val;
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
#ifdef GC_MALLOC_CHECK
allocated_mem_type = type;
@@ -874,7 +883,7 @@ lisp_malloc (nbytes, type)
mem_insert (val, (char *) val + nbytes, type);
#endif
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
if (!val && nbytes)
memory_full ();
return val;
@@ -887,12 +896,12 @@ static void
lisp_free (block)
POINTER_TYPE *block;
{
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
free (block);
#if GC_MARK_STACK && !defined GC_MALLOC_CHECK
mem_delete (mem_find (block));
#endif
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
}
/* Allocation of aligned blocks of memory to store Lisp data. */
@@ -993,7 +1002,7 @@ lisp_align_malloc (nbytes, type)
eassert (nbytes <= BLOCK_BYTES);
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
#ifdef GC_MALLOC_CHECK
allocated_mem_type = type;
@@ -1025,7 +1034,7 @@ lisp_align_malloc (nbytes, type)
if (base == 0)
{
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
memory_full ();
}
@@ -1051,7 +1060,7 @@ lisp_align_malloc (nbytes, type)
{
lisp_malloc_loser = base;
free (base);
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
memory_full ();
}
}
@@ -1084,7 +1093,7 @@ lisp_align_malloc (nbytes, type)
mem_insert (val, (char *) val + nbytes, type);
#endif
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
if (!val && nbytes)
memory_full ();
@@ -1099,7 +1108,7 @@ lisp_align_free (block)
struct ablock *ablock = block;
struct ablocks *abase = ABLOCK_ABASE (ablock);
- BLOCK_INPUT;
+ MALLOC_BLOCK_INPUT;
#if GC_MARK_STACK && !defined GC_MALLOC_CHECK
mem_delete (mem_find (block));
#endif
@@ -1132,7 +1141,7 @@ lisp_align_free (block)
#endif
free (ABLOCKS_BASE (abase));
}
- UNBLOCK_INPUT;
+ MALLOC_UNBLOCK_INPUT;
}
/* Return a new buffer structure allocated from the heap with
@@ -1144,6 +1153,8 @@ allocate_buffer ()
struct buffer *b
= (struct buffer *) lisp_malloc (sizeof (struct buffer),
MEM_TYPE_BUFFER);
+ b->size = sizeof (struct buffer) / sizeof (EMACS_INT);
+ XSETPVECTYPE (b, PVEC_BUFFER);
return b;
}
@@ -1161,6 +1172,8 @@ allocate_buffer ()
can use GNU malloc. */
#ifndef SYNC_INPUT
+/* When using SYNC_INPUT, we don't call malloc from a signal handler, so
+ there's no need to block input around malloc. */
#ifndef DOUG_LEA_MALLOC
extern void * (*__malloc_hook) P_ ((size_t, const void *));
@@ -1179,8 +1192,6 @@ emacs_blocked_free (ptr, ptr2)
void *ptr;
const void *ptr2;
{
- EMACS_INT bytes_used_now;
-
BLOCK_INPUT_ALLOC;
#ifdef GC_MALLOC_CHECK
@@ -1236,7 +1247,8 @@ emacs_blocked_malloc (size, ptr)
BLOCK_INPUT_ALLOC;
__malloc_hook = old_malloc_hook;
#ifdef DOUG_LEA_MALLOC
- mallopt (M_TOP_PAD, malloc_hysteresis * 4096);
+ /* Segfaults on my system. --lorentey */
+ /* mallopt (M_TOP_PAD, malloc_hysteresis * 4096); */
#else
__malloc_extra_blocks = malloc_hysteresis;
#endif
@@ -1405,7 +1417,7 @@ struct interval_block
/* Current interval block. Its `next' pointer points to older
blocks. */
-struct interval_block *interval_block;
+static struct interval_block *interval_block;
/* Index in interval_block above of the next unused interval
structure. */
@@ -1422,7 +1434,7 @@ INTERVAL interval_free_list;
/* Total number of interval blocks now in use. */
-int n_interval_blocks;
+static int n_interval_blocks;
/* Initialize interval allocation. */
@@ -1446,9 +1458,7 @@ make_interval ()
/* eassert (!handling_signal); */
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
if (interval_free_list)
{
@@ -1472,9 +1482,7 @@ make_interval ()
val = &interval_block->intervals[interval_block_index++];
}
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
consing_since_gc += sizeof (struct interval);
intervals_consed++;
@@ -1748,7 +1756,7 @@ static char string_overrun_cookie[GC_STRING_OVERRUN_COOKIE_SIZE] =
/* Initialize string allocation. Called from init_alloc_once. */
-void
+static void
init_strings ()
{
total_strings = total_free_strings = total_string_size = 0;
@@ -1756,6 +1764,8 @@ init_strings ()
string_blocks = NULL;
n_string_blocks = 0;
string_free_list = NULL;
+ empty_unibyte_string = make_pure_string ("", 0, 0, 0);
+ empty_multibyte_string = make_pure_string ("", 0, 0, 1);
}
@@ -1763,8 +1773,8 @@ init_strings ()
static int check_string_bytes_count;
-void check_string_bytes P_ ((int));
-void check_sblock P_ ((struct sblock *));
+static void check_string_bytes P_ ((int));
+static void check_sblock P_ ((struct sblock *));
#define CHECK_STRING_BYTES(S) STRING_BYTES (S)
@@ -1785,7 +1795,7 @@ string_bytes (s)
/* Check validity of Lisp strings' string_bytes member in B. */
-void
+static void
check_sblock (b)
struct sblock *b;
{
@@ -1819,7 +1829,7 @@ check_sblock (b)
non-zero means check all strings, otherwise check only most
recently allocated strings. Used for hunting a bug. */
-void
+static void
check_string_bytes (all_p)
int all_p;
{
@@ -1875,9 +1885,7 @@ allocate_string ()
/* eassert (!handling_signal); */
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
/* If the free-list is empty, allocate a new string_block, and
add all the Lisp_Strings in it to the free-list. */
@@ -1908,9 +1916,7 @@ allocate_string ()
s = string_free_list;
string_free_list = NEXT_FREE_LISP_STRING (s);
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
/* Probably not strictly necessary, but play it safe. */
bzero (s, sizeof *s);
@@ -1962,9 +1968,7 @@ allocate_string_data (s, nchars, nbytes)
old_data = s->data ? SDATA_OF_STRING (s) : NULL;
old_nbytes = GC_STRING_BYTES (s);
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
if (nbytes > LARGE_STRING_BYTES)
{
@@ -1980,18 +1984,14 @@ allocate_string_data (s, nchars, nbytes)
mmap'ed data typically have an address towards the top of the
address space, which won't fit into an EMACS_INT (at least on
32-bit systems with the current tagging scheme). --fx */
- BLOCK_INPUT;
mallopt (M_MMAP_MAX, 0);
- UNBLOCK_INPUT;
#endif
b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
#ifdef DOUG_LEA_MALLOC
/* Back to a reasonable maximum of mmap'ed areas. */
- BLOCK_INPUT;
mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
- UNBLOCK_INPUT;
#endif
b->next_free = &b->first_data;
@@ -2022,9 +2022,7 @@ allocate_string_data (s, nchars, nbytes)
data = b->next_free;
b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA);
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
data->string = s;
s->data = SDATA_DATA (data);
@@ -2342,11 +2340,13 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */)
/* We must allocate one more elements than LENGTH_IN_ELTS for the
slot `size' of the struct Lisp_Bool_Vector. */
val = Fmake_vector (make_number (length_in_elts + 1), Qnil);
- p = XBOOL_VECTOR (val);
/* Get rid of any bits that would cause confusion. */
- p->vector_size = 0;
- XSETBOOL_VECTOR (val, p);
+ XVECTOR (val)->size = 0; /* No Lisp_Object to trace in there. */
+ /* Use XVECTOR (val) rather than `p' because p->size is not TRT. */
+ XSETPVECTYPE (XVECTOR (val), PVEC_BOOL_VECTOR);
+
+ p = XBOOL_VECTOR (val);
p->size = XFASTINT (length);
real_init = (NILP (init) ? 0 : -1);
@@ -2355,7 +2355,7 @@ LENGTH must be a number. INIT matters only in whether it is t or nil. */)
/* Clear the extraneous bits in the last byte. */
if (XINT (length) != length_in_chars * BOOL_VECTOR_BITS_PER_CHAR)
- XBOOL_VECTOR (val)->data[length_in_chars - 1]
+ p->data[length_in_chars - 1]
&= (1 << (XINT (length) % BOOL_VECTOR_BITS_PER_CHAR)) - 1;
return val;
@@ -2479,6 +2479,9 @@ make_uninit_string (length)
int length;
{
Lisp_Object val;
+
+ if (!length)
+ return empty_unibyte_string;
val = make_uninit_multibyte_string (length, length);
STRING_SET_UNIBYTE (val);
return val;
@@ -2497,6 +2500,8 @@ make_uninit_multibyte_string (nchars, nbytes)
if (nchars < 0)
abort ();
+ if (!nbytes)
+ return empty_multibyte_string;
s = allocate_string ();
allocate_string_data (s, nchars, nbytes);
@@ -2577,7 +2582,7 @@ struct Lisp_Float *float_free_list;
/* Initialize float allocation. */
-void
+static void
init_float ()
{
float_block = NULL;
@@ -2589,7 +2594,7 @@ init_float ()
/* Explicitly free a float cell by putting it on the free-list. */
-void
+static void
free_float (ptr)
struct Lisp_Float *ptr;
{
@@ -2608,9 +2613,7 @@ make_float (float_value)
/* eassert (!handling_signal); */
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
if (float_free_list)
{
@@ -2637,9 +2640,7 @@ make_float (float_value)
float_block_index++;
}
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
XFLOAT_DATA (val) = float_value;
eassert (!FLOAT_MARKED_P (XFLOAT (val)));
@@ -2700,12 +2701,12 @@ struct Lisp_Cons *cons_free_list;
/* Total number of cons blocks now in use. */
-int n_cons_blocks;
+static int n_cons_blocks;
/* Initialize cons allocation. */
-void
+static void
init_cons ()
{
cons_block = NULL;
@@ -2737,9 +2738,7 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0,
/* eassert (!handling_signal); */
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
if (cons_free_list)
{
@@ -2765,9 +2764,7 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0,
cons_block_index++;
}
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
XSETCAR (val, car);
XSETCDR (val, cdr);
@@ -2906,59 +2903,50 @@ DEFUN ("make-list", Fmake_list, Smake_list, 2, 2, 0,
/* Singly-linked list of all vectors. */
-struct Lisp_Vector *all_vectors;
+static struct Lisp_Vector *all_vectors;
/* Total number of vector-like objects now in use. */
-int n_vectors;
+static int n_vectors;
/* Value is a pointer to a newly allocated Lisp_Vector structure
with room for LEN Lisp_Objects. */
static struct Lisp_Vector *
-allocate_vectorlike (len, type)
+allocate_vectorlike (len)
EMACS_INT len;
- enum mem_type type;
{
struct Lisp_Vector *p;
size_t nbytes;
+ MALLOC_BLOCK_INPUT;
+
#ifdef DOUG_LEA_MALLOC
/* Prevent mmap'ing the chunk. Lisp data may not be mmap'ed
because mapped region contents are not preserved in
a dumped Emacs. */
- BLOCK_INPUT;
mallopt (M_MMAP_MAX, 0);
- UNBLOCK_INPUT;
#endif
/* This gets triggered by code which I haven't bothered to fix. --Stef */
/* eassert (!handling_signal); */
nbytes = sizeof *p + (len - 1) * sizeof p->contents[0];
- p = (struct Lisp_Vector *) lisp_malloc (nbytes, type);
+ p = (struct Lisp_Vector *) lisp_malloc (nbytes, MEM_TYPE_VECTORLIKE);
#ifdef DOUG_LEA_MALLOC
/* Back to a reasonable maximum of mmap'ed areas. */
- BLOCK_INPUT;
mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
- UNBLOCK_INPUT;
#endif
consing_since_gc += nbytes;
vector_cells_consed += len;
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
-
p->next = all_vectors;
all_vectors = p;
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
++n_vectors;
return p;
@@ -2971,7 +2959,7 @@ struct Lisp_Vector *
allocate_vector (nslots)
EMACS_INT nslots;
{
- struct Lisp_Vector *v = allocate_vectorlike (nslots, MEM_TYPE_VECTOR);
+ struct Lisp_Vector *v = allocate_vectorlike (nslots);
v->size = nslots;
return v;
}
@@ -2979,81 +2967,65 @@ allocate_vector (nslots)
/* Allocate other vector-like structures. */
-struct Lisp_Hash_Table *
-allocate_hash_table ()
+struct Lisp_Vector *
+allocate_pseudovector (memlen, lisplen, tag)
+ int memlen, lisplen;
+ EMACS_INT tag;
{
- EMACS_INT len = VECSIZE (struct Lisp_Hash_Table);
- struct Lisp_Vector *v = allocate_vectorlike (len, MEM_TYPE_HASH_TABLE);
+ struct Lisp_Vector *v = allocate_vectorlike (memlen);
EMACS_INT i;
- v->size = len;
- for (i = 0; i < len; ++i)
+ /* Only the first lisplen slots will be traced normally by the GC. */
+ v->size = lisplen;
+ for (i = 0; i < lisplen; ++i)
v->contents[i] = Qnil;
- return (struct Lisp_Hash_Table *) v;
+ XSETPVECTYPE (v, tag); /* Add the appropriate tag. */
+ return v;
+}
+
+struct Lisp_Hash_Table *
+allocate_hash_table (void)
+{
+ return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE);
}
struct window *
allocate_window ()
{
- EMACS_INT len = VECSIZE (struct window);
- struct Lisp_Vector *v = allocate_vectorlike (len, MEM_TYPE_WINDOW);
- EMACS_INT i;
+ return ALLOCATE_PSEUDOVECTOR(struct window, current_matrix, PVEC_WINDOW);
+}
- for (i = 0; i < len; ++i)
- v->contents[i] = Qnil;
- v->size = len;
- return (struct window *) v;
-}
+struct terminal *
+allocate_terminal ()
+{
+ struct terminal *t = ALLOCATE_PSEUDOVECTOR (struct terminal,
+ next_terminal, PVEC_TERMINAL);
+ /* Zero out the non-GC'd fields. FIXME: This should be made unnecessary. */
+ bzero (&(t->next_terminal),
+ ((char*)(t+1)) - ((char*)&(t->next_terminal)));
+ return t;
+}
struct frame *
allocate_frame ()
{
- EMACS_INT len = VECSIZE (struct frame);
- struct Lisp_Vector *v = allocate_vectorlike (len, MEM_TYPE_FRAME);
- EMACS_INT i;
-
- for (i = 0; i < len; ++i)
- v->contents[i] = make_number (0);
- v->size = len;
- return (struct frame *) v;
+ struct frame *f = ALLOCATE_PSEUDOVECTOR (struct frame,
+ face_cache, PVEC_FRAME);
+ /* Zero out the non-GC'd fields. FIXME: This should be made unnecessary. */
+ bzero (&(f->face_cache),
+ ((char*)(f+1)) - ((char*)&(f->face_cache)));
+ return f;
}
struct Lisp_Process *
allocate_process ()
{
- /* Memory-footprint of the object in nb of Lisp_Object fields. */
- EMACS_INT memlen = VECSIZE (struct Lisp_Process);
- /* Size if we only count the actual Lisp_Object fields (which need to be
- traced by the GC). */
- EMACS_INT lisplen = PSEUDOVECSIZE (struct Lisp_Process, pid);
- struct Lisp_Vector *v = allocate_vectorlike (memlen, MEM_TYPE_PROCESS);
- EMACS_INT i;
-
- for (i = 0; i < lisplen; ++i)
- v->contents[i] = Qnil;
- v->size = lisplen;
-
- return (struct Lisp_Process *) v;
-}
-
-
-struct Lisp_Vector *
-allocate_other_vector (len)
- EMACS_INT len;
-{
- struct Lisp_Vector *v = allocate_vectorlike (len, MEM_TYPE_VECTOR);
- EMACS_INT i;
-
- for (i = 0; i < len; ++i)
- v->contents[i] = Qnil;
- v->size = len;
-
- return v;
+ return ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
}
@@ -3098,6 +3070,7 @@ The property's value should be an integer between 0 and 10. */)
/* Add 2 to the size for the defalt and parent slots. */
vector = Fmake_vector (make_number (CHAR_TABLE_STANDARD_SLOTS + XINT (n)),
init);
+ XSETPVECTYPE (XVECTOR (vector), PVEC_CHAR_TABLE);
XCHAR_TABLE (vector)->top = Qt;
XCHAR_TABLE (vector)->parent = Qnil;
XCHAR_TABLE (vector)->purpose = purpose;
@@ -3116,6 +3089,7 @@ make_sub_char_table (init)
{
Lisp_Object vector
= Fmake_vector (make_number (SUB_CHAR_TABLE_STANDARD_SLOTS), init);
+ XSETPVECTYPE (XVECTOR (vector), PVEC_CHAR_TABLE);
XCHAR_TABLE (vector)->top = Qnil;
XCHAR_TABLE (vector)->defalt = Qnil;
XSETCHAR_TABLE (vector, XCHAR_TABLE (vector));
@@ -3180,6 +3154,7 @@ usage: (make-byte-code ARGLIST BYTE-CODE CONSTANTS DEPTH &optional DOCSTRING INT
args[index] = Fpurecopy (args[index]);
p->contents[index] = args[index];
}
+ XSETPVECTYPE (p, PVEC_COMPILED);
XSETCOMPILED (val, p);
return val;
}
@@ -3207,21 +3182,21 @@ struct symbol_block
/* Current symbol block and index of first unused Lisp_Symbol
structure in it. */
-struct symbol_block *symbol_block;
-int symbol_block_index;
+static struct symbol_block *symbol_block;
+static int symbol_block_index;
/* List of free symbols. */
-struct Lisp_Symbol *symbol_free_list;
+static struct Lisp_Symbol *symbol_free_list;
/* Total number of symbol blocks now in use. */
-int n_symbol_blocks;
+static int n_symbol_blocks;
/* Initialize symbol allocation. */
-void
+static void
init_symbol ()
{
symbol_block = NULL;
@@ -3244,9 +3219,7 @@ Its value and function definition are void, and its property list is nil. */)
/* eassert (!handling_signal); */
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
if (symbol_free_list)
{
@@ -3269,9 +3242,7 @@ Its value and function definition are void, and its property list is nil. */)
symbol_block_index++;
}
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
p = XSYMBOL (val);
p->xname = name;
@@ -3307,16 +3278,16 @@ struct marker_block
struct marker_block *next;
};
-struct marker_block *marker_block;
-int marker_block_index;
+static struct marker_block *marker_block;
+static int marker_block_index;
-union Lisp_Misc *marker_free_list;
+static union Lisp_Misc *marker_free_list;
/* Total number of marker blocks now in use. */
-int n_marker_blocks;
+static int n_marker_blocks;
-void
+static void
init_marker ()
{
marker_block = NULL;
@@ -3334,9 +3305,7 @@ allocate_misc ()
/* eassert (!handling_signal); */
-#ifndef SYNC_INPUT
- BLOCK_INPUT;
-#endif
+ MALLOC_BLOCK_INPUT;
if (marker_free_list)
{
@@ -3360,14 +3329,12 @@ allocate_misc ()
marker_block_index++;
}
-#ifndef SYNC_INPUT
- UNBLOCK_INPUT;
-#endif
+ MALLOC_UNBLOCK_INPUT;
--total_free_markers;
consing_since_gc += sizeof (union Lisp_Misc);
misc_objects_consed++;
- XMARKER (val)->gcmarkbit = 0;
+ XMISCANY (val)->gcmarkbit = 0;
return val;
}
@@ -3377,7 +3344,7 @@ void
free_misc (misc)
Lisp_Object misc;
{
- XMISC (misc)->u_marker.type = Lisp_Misc_Free;
+ XMISCTYPE (misc) = Lisp_Misc_Free;
XMISC (misc)->u_free.chain = marker_free_list;
marker_free_list = XMISC (misc);
@@ -4093,7 +4060,7 @@ live_misc_p (m, p)
&& offset < (MARKER_BLOCK_SIZE * sizeof b->markers[0])
&& (b != marker_block
|| offset / sizeof b->markers[0] < marker_block_index)
- && ((union Lisp_Misc *) p)->u_marker.type != Lisp_Misc_Free);
+ && ((union Lisp_Misc *) p)->u_any.type != Lisp_Misc_Free);
}
else
return 0;
@@ -4108,9 +4075,7 @@ live_vector_p (m, p)
struct mem_node *m;
void *p;
{
- return (p == m->start
- && m->type >= MEM_TYPE_VECTOR
- && m->type <= MEM_TYPE_WINDOW);
+ return (p == m->start && m->type == MEM_TYPE_VECTORLIKE);
}
@@ -4226,7 +4191,7 @@ mark_maybe_object (obj)
break;
case Lisp_Misc:
- mark_p = (live_misc_p (m, po) && !XMARKER (obj)->gcmarkbit);
+ mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
break;
case Lisp_Int:
@@ -4256,9 +4221,14 @@ mark_maybe_pointer (p)
{
struct mem_node *m;
- /* Quickly rule out some values which can't point to Lisp data. We
- assume that Lisp data is aligned on even addresses. */
- if ((EMACS_INT) p & 1)
+ /* Quickly rule out some values which can't point to Lisp data. */
+ if ((EMACS_INT) p %
+#ifdef USE_LSB_TAG
+ 8 /* USE_LSB_TAG needs Lisp data to be aligned on multiples of 8. */
+#else
+ 2 /* We assume that Lisp data is aligned on even addresses. */
+#endif
+ )
return;
m = mem_find (p);
@@ -4303,11 +4273,7 @@ mark_maybe_pointer (p)
XSETFLOAT (obj, p);
break;
- case MEM_TYPE_VECTOR:
- case MEM_TYPE_PROCESS:
- case MEM_TYPE_HASH_TABLE:
- case MEM_TYPE_FRAME:
- case MEM_TYPE_WINDOW:
+ case MEM_TYPE_VECTORLIKE:
if (live_vector_p (m, p))
{
Lisp_Object tem;
@@ -4618,7 +4584,7 @@ mark_stack ()
/* Determine whether it is safe to access memory at address P. */
-int
+static int
valid_pointer_p (p)
void *p;
{
@@ -4707,11 +4673,7 @@ valid_lisp_object_p (obj)
case MEM_TYPE_FLOAT:
return live_float_p (m, p);
- case MEM_TYPE_VECTOR:
- case MEM_TYPE_PROCESS:
- case MEM_TYPE_HASH_TABLE:
- case MEM_TYPE_FRAME:
- case MEM_TYPE_WINDOW:
+ case MEM_TYPE_VECTORLIKE:
return live_vector_p (m, p);
default:
@@ -4918,7 +4880,7 @@ pure_cons (car, cdr)
/* Value is a float object with value NUM allocated from pure space. */
-Lisp_Object
+static Lisp_Object
make_pure_float (num)
double num;
{
@@ -4984,7 +4946,10 @@ Does not copy symbols. Copies strings without text properties. */)
for (i = 0; i < size; i++)
vec->contents[i] = Fpurecopy (XVECTOR (obj)->contents[i]);
if (COMPILEDP (obj))
- XSETCOMPILED (obj, vec);
+ {
+ XSETPVECTYPE (vec, PVEC_COMPILED);
+ XSETCOMPILED (obj, vec);
+ }
else
XSETVECTOR (obj, vec);
return obj;
@@ -5160,7 +5125,9 @@ returns nil, because real GC can't be done. */)
mark_object (bind->symbol);
mark_object (bind->old_value);
}
+ mark_terminals ();
mark_kboards ();
+ mark_ttys ();
#ifdef USE_GTK
{
@@ -5438,14 +5405,37 @@ mark_image_cache (f)
all the references contained in it. */
#define LAST_MARKED_SIZE 500
-Lisp_Object last_marked[LAST_MARKED_SIZE];
+static Lisp_Object last_marked[LAST_MARKED_SIZE];
int last_marked_index;
/* For debugging--call abort when we cdr down this many
links of a list, in mark_object. In debugging,
the call to abort will hit a breakpoint.
Normally this is zero and the check never goes off. */
-int mark_object_loop_halt;
+static int mark_object_loop_halt;
+
+/* Return non-zero if the object was not yet marked. */
+static int
+mark_vectorlike (ptr)
+ struct Lisp_Vector *ptr;
+{
+ register EMACS_INT size = ptr->size;
+ register int i;
+
+ if (VECTOR_MARKED_P (ptr))
+ return 0; /* Already marked */
+ VECTOR_MARK (ptr); /* Else mark it */
+ if (size & PSEUDOVECTOR_FLAG)
+ size &= PSEUDOVECTOR_SIZE_MASK;
+
+ /* Note that this size is not the memory-footprint size, but only
+ the number of Lisp_Object fields that we should trace.
+ The distinction is used e.g. by Lisp_Process which places extra
+ non-Lisp_Object fields at the end of the structure. */
+ for (i = 0; i < size; i++) /* and then mark its elements */
+ mark_object (ptr->contents[i]);
+ return 1;
+}
void
mark_object (arg)
@@ -5576,129 +5566,46 @@ mark_object (arg)
else if (GC_FRAMEP (obj))
{
register struct frame *ptr = XFRAME (obj);
-
- if (VECTOR_MARKED_P (ptr)) break; /* Already marked */
- VECTOR_MARK (ptr); /* Else mark it */
-
- CHECK_LIVE (live_vector_p);
- mark_object (ptr->name);
- mark_object (ptr->icon_name);
- mark_object (ptr->title);
- mark_object (ptr->focus_frame);
- mark_object (ptr->selected_window);
- mark_object (ptr->minibuffer_window);
- mark_object (ptr->param_alist);
- mark_object (ptr->scroll_bars);
- mark_object (ptr->condemned_scroll_bars);
- mark_object (ptr->menu_bar_items);
- mark_object (ptr->face_alist);
- mark_object (ptr->menu_bar_vector);
- mark_object (ptr->buffer_predicate);
- mark_object (ptr->buffer_list);
- mark_object (ptr->menu_bar_window);
- mark_object (ptr->tool_bar_window);
- mark_face_cache (ptr->face_cache);
+ if (mark_vectorlike (XVECTOR (obj)))
+ {
+ mark_face_cache (ptr->face_cache);
#ifdef HAVE_WINDOW_SYSTEM
- mark_image_cache (ptr);
- mark_object (ptr->tool_bar_items);
- mark_object (ptr->desired_tool_bar_string);
- mark_object (ptr->current_tool_bar_string);
+ mark_image_cache (ptr);
#endif /* HAVE_WINDOW_SYSTEM */
- }
- else if (GC_BOOL_VECTOR_P (obj))
- {
- register struct Lisp_Vector *ptr = XVECTOR (obj);
-
- if (VECTOR_MARKED_P (ptr))
- break; /* Already marked */
- CHECK_LIVE (live_vector_p);
- VECTOR_MARK (ptr); /* Else mark it */
+ }
}
else if (GC_WINDOWP (obj))
{
register struct Lisp_Vector *ptr = XVECTOR (obj);
struct window *w = XWINDOW (obj);
- register int i;
-
- /* Stop if already marked. */
- if (VECTOR_MARKED_P (ptr))
- break;
-
- /* Mark it. */
- CHECK_LIVE (live_vector_p);
- VECTOR_MARK (ptr);
-
- /* There is no Lisp data above The member CURRENT_MATRIX in
- struct WINDOW. Stop marking when that slot is reached. */
- for (i = 0;
- (char *) &ptr->contents[i] < (char *) &w->current_matrix;
- i++)
- mark_object (ptr->contents[i]);
-
- /* Mark glyphs for leaf windows. Marking window matrices is
- sufficient because frame matrices use the same glyph
- memory. */
- if (NILP (w->hchild)
- && NILP (w->vchild)
- && w->current_matrix)
+ if (mark_vectorlike (ptr))
{
- mark_glyph_matrix (w->current_matrix);
- mark_glyph_matrix (w->desired_matrix);
+ /* Mark glyphs for leaf windows. Marking window matrices is
+ sufficient because frame matrices use the same glyph
+ memory. */
+ if (NILP (w->hchild)
+ && NILP (w->vchild)
+ && w->current_matrix)
+ {
+ mark_glyph_matrix (w->current_matrix);
+ mark_glyph_matrix (w->desired_matrix);
+ }
}
}
else if (GC_HASH_TABLE_P (obj))
{
struct Lisp_Hash_Table *h = XHASH_TABLE (obj);
-
- /* Stop if already marked. */
- if (VECTOR_MARKED_P (h))
- break;
-
- /* Mark it. */
- CHECK_LIVE (live_vector_p);
- VECTOR_MARK (h);
-
- /* Mark contents. */
- /* Do not mark next_free or next_weak.
- Being in the next_weak chain
- should not keep the hash table alive.
- No need to mark `count' since it is an integer. */
- mark_object (h->test);
- mark_object (h->weak);
- mark_object (h->rehash_size);
- mark_object (h->rehash_threshold);
- mark_object (h->hash);
- mark_object (h->next);
- mark_object (h->index);
- mark_object (h->user_hash_function);
- mark_object (h->user_cmp_function);
-
- /* If hash table is not weak, mark all keys and values.
- For weak tables, mark only the vector. */
- if (GC_NILP (h->weak))
- mark_object (h->key_and_value);
- else
- VECTOR_MARK (XVECTOR (h->key_and_value));
+ if (mark_vectorlike ((struct Lisp_Vector *)h))
+ { /* If hash table is not weak, mark all keys and values.
+ For weak tables, mark only the vector. */
+ if (GC_NILP (h->weak))
+ mark_object (h->key_and_value);
+ else
+ VECTOR_MARK (XVECTOR (h->key_and_value));
+ }
}
else
- {
- register struct Lisp_Vector *ptr = XVECTOR (obj);
- register EMACS_INT size = ptr->size;
- register int i;
-
- if (VECTOR_MARKED_P (ptr)) break; /* Already marked */
- CHECK_LIVE (live_vector_p);
- VECTOR_MARK (ptr); /* Else mark it */
- if (size & PSEUDOVECTOR_FLAG)
- size &= PSEUDOVECTOR_SIZE_MASK;
-
- /* Note that this size is not the memory-footprint size, but only
- the number of Lisp_Object fields that we should trace.
- The distinction is used e.g. by Lisp_Process which places extra
- non-Lisp_Object fields at the end of the structure. */
- for (i = 0; i < size; i++) /* and then mark its elements */
- mark_object (ptr->contents[i]);
- }
+ mark_vectorlike (XVECTOR (obj));
break;
case Lisp_Symbol:
@@ -5732,14 +5639,13 @@ mark_object (arg)
case Lisp_Misc:
CHECK_ALLOCATED_AND_LIVE (live_misc_p);
- if (XMARKER (obj)->gcmarkbit)
+ if (XMISCANY (obj)->gcmarkbit)
break;
- XMARKER (obj)->gcmarkbit = 1;
+ XMISCANY (obj)->gcmarkbit = 1;
switch (XMISCTYPE (obj))
{
case Lisp_Misc_Buffer_Local_Value:
- case Lisp_Misc_Some_Buffer_Local_Value:
{
register struct Lisp_Buffer_Local_Value *ptr
= XBUFFER_LOCAL_VALUE (obj);
@@ -5889,6 +5795,21 @@ mark_buffer (buf)
}
}
+/* Mark the Lisp pointers in the terminal objects.
+ Called by the Fgarbage_collector. */
+
+static void
+mark_terminals (void)
+{
+ struct terminal *t;
+ for (t = terminal_list; t; t = t->next_terminal)
+ {
+ eassert (t->name != NULL);
+ mark_vectorlike ((struct Lisp_Vector *)t);
+ }
+}
+
+
/* Value is non-zero if OBJ will survive the current GC because it's
either marked or does not need to be marked to survive. */
@@ -5910,7 +5831,7 @@ survives_gc_p (obj)
break;
case Lisp_Misc:
- survives_p = XMARKER (obj)->gcmarkbit;
+ survives_p = XMISCANY (obj)->gcmarkbit;
break;
case Lisp_String:
@@ -5964,23 +5885,51 @@ gc_sweep ()
for (cblk = cons_block; cblk; cblk = *cprev)
{
- register int i;
+ register int i = 0;
int this_free = 0;
- for (i = 0; i < lim; i++)
- if (!CONS_MARKED_P (&cblk->conses[i]))
- {
- this_free++;
- cblk->conses[i].u.chain = cons_free_list;
- cons_free_list = &cblk->conses[i];
+ int ilim = (lim + BITS_PER_INT - 1) / BITS_PER_INT;
+
+ /* Scan the mark bits an int at a time. */
+ for (i = 0; i <= ilim; i++)
+ {
+ if (cblk->gcmarkbits[i] == -1)
+ {
+ /* Fast path - all cons cells for this int are marked. */
+ cblk->gcmarkbits[i] = 0;
+ num_used += BITS_PER_INT;
+ }
+ else
+ {
+ /* Some cons cells for this int are not marked.
+ Find which ones, and free them. */
+ int start, pos, stop;
+
+ start = i * BITS_PER_INT;
+ stop = lim - start;
+ if (stop > BITS_PER_INT)
+ stop = BITS_PER_INT;
+ stop += start;
+
+ for (pos = start; pos < stop; pos++)
+ {
+ if (!CONS_MARKED_P (&cblk->conses[pos]))
+ {
+ this_free++;
+ cblk->conses[pos].u.chain = cons_free_list;
+ cons_free_list = &cblk->conses[pos];
#if GC_MARK_STACK
- cons_free_list->car = Vdead;
+ cons_free_list->car = Vdead;
#endif
- }
- else
- {
- num_used++;
- CONS_UNMARK (&cblk->conses[i]);
- }
+ }
+ else
+ {
+ num_used++;
+ CONS_UNMARK (&cblk->conses[pos]);
+ }
+ }
+ }
+ }
+
lim = CONS_BLOCK_SIZE;
/* If this block contains only free conses and we have already
seen more than two blocks worth of free conses then deallocate
@@ -6179,9 +6128,9 @@ gc_sweep ()
for (i = 0; i < lim; i++)
{
- if (!mblk->markers[i].u_marker.gcmarkbit)
+ if (!mblk->markers[i].u_any.gcmarkbit)
{
- if (mblk->markers[i].u_marker.type == Lisp_Misc_Marker)
+ if (mblk->markers[i].u_any.type == Lisp_Misc_Marker)
unchain_marker (&mblk->markers[i].u_marker);
/* Set the type of the freed object to Lisp_Misc_Free.
We could leave the type alone, since nobody checks it,
@@ -6194,7 +6143,7 @@ gc_sweep ()
else
{
num_used++;
- mblk->markers[i].u_marker.gcmarkbit = 0;
+ mblk->markers[i].u_any.gcmarkbit = 0;
}
}
lim = MARKER_BLOCK_SIZE;
@@ -6326,13 +6275,14 @@ Frames, windows, buffers, and subprocesses count as vectors
}
int suppress_checking;
+
void
die (msg, file, line)
const char *msg;
const char *file;
int line;
{
- fprintf (stderr, "\r\nEmacs fatal error: %s:%d: %s\r\n",
+ fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n",
file, line, msg);
abort ();
}
diff --git a/src/alloca.c b/src/alloca.c
deleted file mode 100644
index e8c8319adc4..00000000000
--- a/src/alloca.c
+++ /dev/null
@@ -1,517 +0,0 @@
-/* alloca.c -- allocate automatically reclaimed memory
- (Mostly) portable public-domain implementation -- D A Gwyn
-
- NOTE: The canonical source of this file is maintained with gnulib.
- Bugs can be reported to bug-gnulib@gnu.org.
-
- This implementation of the PWB library alloca function,
- which is used to allocate space off the run-time stack so
- that it is automatically reclaimed upon procedure exit,
- was inspired by discussions with J. Q. Johnson of Cornell.
- J.Otto Tennant <jot@cray.com> contributed the Cray support.
-
- There are some preprocessor constants that can
- be defined when compiling for your specific system, for
- improved efficiency; however, the defaults should be okay.
-
- The general concept of this implementation is to keep
- track of all alloca-allocated blocks, and reclaim any
- that are found to be deeper in the stack than the current
- invocation. This heuristic does not reclaim storage as
- soon as it becomes invalid, but it will do so eventually.
-
- As a special case, alloca(0) reclaims storage without
- allocating any. It is a good idea to use alloca(0) in
- your main control loop, etc. to force garbage collection. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#ifdef DO_BLOCK_INPUT
-# include "blockinput.h"
-#endif
-
-/* If compiling with GCC 2, this file's not needed. */
-#if !defined (__GNUC__) || __GNUC__ < 2
-
-/* If someone has defined alloca as a macro,
- there must be some other way alloca is supposed to work. */
-# ifndef alloca
-
-# ifdef emacs
-# ifdef static
-/* actually, only want this if static is defined as ""
- -- this is for usg, in which emacs must undefine static
- in order to make unexec workable
- */
-# ifndef STACK_DIRECTION
-you
-lose
--- must know STACK_DIRECTION at compile-time
-/* Using #error here is not wise since this file should work for
- old and obscure compilers.
-
- As far as I know, using it is OK if it's indented -- at least for
- pcc-based processors. -- fx */
-# endif /* STACK_DIRECTION undefined */
-# endif /* static */
-# endif /* emacs */
-
-/* If your stack is a linked list of frames, you have to
- provide an "address metric" ADDRESS_FUNCTION macro. */
-
-# if defined (CRAY) && defined (CRAY_STACKSEG_END)
-long i00afunc ();
-# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
-# else
-# define ADDRESS_FUNCTION(arg) &(arg)
-# endif
-
-# ifndef POINTER_TYPE
-# ifdef __STDC__
-# define POINTER_TYPE void
-# else
-# define POINTER_TYPE char
-# endif
-# endif
-typedef POINTER_TYPE *pointer;
-
-# ifndef NULL
-# define NULL 0
-# endif
-
-/* The Emacs executable needs alloca to call xmalloc, because ordinary
- malloc isn't protected from input signals. xmalloc also checks for
- out-of-memory errors, so we should use it generally.
-
- Callers below should use malloc. */
-
-# undef malloc
-# define malloc xmalloc
-# undef free
-# define free xfree
-
-void *xmalloc _P ((size_t));
-void xfree _P ((void *));
-
-/* Define STACK_DIRECTION if you know the direction of stack
- growth for your system; otherwise it will be automatically
- deduced at run-time.
-
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
-
-# ifndef STACK_DIRECTION
-# define STACK_DIRECTION 0 /* Direction unknown. */
-# endif
-
-# if STACK_DIRECTION != 0
-
-# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
-
-# else /* STACK_DIRECTION == 0; need run-time code. */
-
-static int stack_dir; /* 1 or -1 once known. */
-# define STACK_DIR stack_dir
-
-static void
-find_stack_direction ()
-{
- static char *addr = NULL; /* Address of first `dummy', once known. */
- auto char dummy; /* To get stack address. */
-
- if (addr == NULL)
- { /* Initial entry. */
- addr = ADDRESS_FUNCTION (dummy);
-
- find_stack_direction (); /* Recurse once. */
- }
- else
- {
- /* Second entry. */
- if (ADDRESS_FUNCTION (dummy) > addr)
- stack_dir = 1; /* Stack grew upward. */
- else
- stack_dir = -1; /* Stack grew downward. */
- }
-}
-
-# endif /* STACK_DIRECTION == 0 */
-
-/* An "alloca header" is used to:
- (a) chain together all alloca'ed blocks;
- (b) keep track of stack depth.
-
- It is very important that sizeof(header) agree with malloc
- alignment chunk size. The following default should work okay. */
-
-# ifndef ALIGN_SIZE
-# define ALIGN_SIZE sizeof(double)
-# endif
-
-typedef union hdr
-{
- char align[ALIGN_SIZE]; /* To force sizeof(header). */
- struct
- {
- union hdr *next; /* For chaining headers. */
- char *deep; /* For stack depth measure. */
- } h;
-} header;
-
-static header *last_alloca_header = NULL; /* -> last alloca header. */
-
-/* Return a pointer to at least SIZE bytes of storage,
- which will be automatically reclaimed upon exit from
- the procedure that called alloca. Originally, this space
- was supposed to be taken from the current stack frame of the
- caller, but that method cannot be made to work for some
- implementations of C, for example under Gould's UTX/32. */
-
-pointer
-alloca (size)
- size_t size;
-{
- auto char probe; /* Probes stack depth: */
- register char *depth = ADDRESS_FUNCTION (probe);
-
-# if STACK_DIRECTION == 0
- if (STACK_DIR == 0) /* Unknown growth direction. */
- find_stack_direction ();
-# endif
-
- /* Reclaim garbage, defined as all alloca'd storage that
- was allocated from deeper in the stack than currently. */
-
- {
- register header *hp; /* Traverses linked list. */
-
-# ifdef DO_BLOCK_INPUT
- BLOCK_INPUT;
-# endif
-
- for (hp = last_alloca_header; hp != NULL;)
- if ((STACK_DIR > 0 && hp->h.deep > depth)
- || (STACK_DIR < 0 && hp->h.deep < depth))
- {
- register header *np = hp->h.next;
-
- free ((pointer) hp); /* Collect garbage. */
-
- hp = np; /* -> next header. */
- }
- else
- break; /* Rest are not deeper. */
-
- last_alloca_header = hp; /* -> last valid storage. */
-
-# ifdef DO_BLOCK_INPUT
- UNBLOCK_INPUT;
-# endif
- }
-
- if (size == 0)
- return NULL; /* No allocation required. */
-
- /* Allocate combined header + user data storage. */
-
- {
- /* Address of header. */
- register pointer new = malloc (sizeof (header) + size);
-
- if (new == 0)
- abort();
-
- ((header *) new)->h.next = last_alloca_header;
- ((header *) new)->h.deep = depth;
-
- last_alloca_header = (header *) new;
-
- /* User storage begins just after header. */
-
- return (pointer) ((char *) new + sizeof (header));
- }
-}
-
-# if defined (CRAY) && defined (CRAY_STACKSEG_END)
-
-# ifdef DEBUG_I00AFUNC
-# include <stdio.h>
-# endif
-
-# ifndef CRAY_STACK
-# define CRAY_STACK
-# ifndef CRAY2
-/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
-struct stack_control_header
- {
- long shgrow:32; /* Number of times stack has grown. */
- long shaseg:32; /* Size of increments to stack. */
- long shhwm:32; /* High water mark of stack. */
- long shsize:32; /* Current size of stack (all segments). */
- };
-
-/* The stack segment linkage control information occurs at
- the high-address end of a stack segment. (The stack
- grows from low addresses to high addresses.) The initial
- part of the stack segment linkage control information is
- 0200 (octal) words. This provides for register storage
- for the routine which overflows the stack. */
-
-struct stack_segment_linkage
- {
- long ss[0200]; /* 0200 overflow words. */
- long sssize:32; /* Number of words in this segment. */
- long ssbase:32; /* Offset to stack base. */
- long:32;
- long sspseg:32; /* Offset to linkage control of previous
- segment of stack. */
- long:32;
- long sstcpt:32; /* Pointer to task common address block. */
- long sscsnm; /* Private control structure number for
- microtasking. */
- long ssusr1; /* Reserved for user. */
- long ssusr2; /* Reserved for user. */
- long sstpid; /* Process ID for pid based multi-tasking. */
- long ssgvup; /* Pointer to multitasking thread giveup. */
- long sscray[7]; /* Reserved for Cray Research. */
- long ssa0;
- long ssa1;
- long ssa2;
- long ssa3;
- long ssa4;
- long ssa5;
- long ssa6;
- long ssa7;
- long sss0;
- long sss1;
- long sss2;
- long sss3;
- long sss4;
- long sss5;
- long sss6;
- long sss7;
- };
-
-# else /* CRAY2 */
-/* The following structure defines the vector of words
- returned by the STKSTAT library routine. */
-struct stk_stat
- {
- long now; /* Current total stack size. */
- long maxc; /* Amount of contiguous space which would
- be required to satisfy the maximum
- stack demand to date. */
- long high_water; /* Stack high-water mark. */
- long overflows; /* Number of stack overflow ($STKOFEN) calls. */
- long hits; /* Number of internal buffer hits. */
- long extends; /* Number of block extensions. */
- long stko_mallocs; /* Block allocations by $STKOFEN. */
- long underflows; /* Number of stack underflow calls ($STKRETN). */
- long stko_free; /* Number of deallocations by $STKRETN. */
- long stkm_free; /* Number of deallocations by $STKMRET. */
- long segments; /* Current number of stack segments. */
- long maxs; /* Maximum number of stack segments so far. */
- long pad_size; /* Stack pad size. */
- long current_address; /* Current stack segment address. */
- long current_size; /* Current stack segment size. This
- number is actually corrupted by STKSTAT to
- include the fifteen word trailer area. */
- long initial_address; /* Address of initial segment. */
- long initial_size; /* Size of initial segment. */
- };
-
-/* The following structure describes the data structure which trails
- any stack segment. I think that the description in 'asdef' is
- out of date. I only describe the parts that I am sure about. */
-
-struct stk_trailer
- {
- long this_address; /* Address of this block. */
- long this_size; /* Size of this block (does not include
- this trailer). */
- long unknown2;
- long unknown3;
- long link; /* Address of trailer block of previous
- segment. */
- long unknown5;
- long unknown6;
- long unknown7;
- long unknown8;
- long unknown9;
- long unknown10;
- long unknown11;
- long unknown12;
- long unknown13;
- long unknown14;
- };
-
-# endif /* CRAY2 */
-# endif /* not CRAY_STACK */
-
-# ifdef CRAY2
-/* Determine a "stack measure" for an arbitrary ADDRESS.
- I doubt that "lint" will like this much. */
-
-static long
-i00afunc (long *address)
-{
- struct stk_stat status;
- struct stk_trailer *trailer;
- long *block, size;
- long result = 0;
-
- /* We want to iterate through all of the segments. The first
- step is to get the stack status structure. We could do this
- more quickly and more directly, perhaps, by referencing the
- $LM00 common block, but I know that this works. */
-
- STKSTAT (&status);
-
- /* Set up the iteration. */
-
- trailer = (struct stk_trailer *) (status.current_address
- + status.current_size
- - 15);
-
- /* There must be at least one stack segment. Therefore it is
- a fatal error if "trailer" is null. */
-
- if (trailer == 0)
- abort ();
-
- /* Discard segments that do not contain our argument address. */
-
- while (trailer != 0)
- {
- block = (long *) trailer->this_address;
- size = trailer->this_size;
- if (block == 0 || size == 0)
- abort ();
- trailer = (struct stk_trailer *) trailer->link;
- if ((block <= address) && (address < (block + size)))
- break;
- }
-
- /* Set the result to the offset in this segment and add the sizes
- of all predecessor segments. */
-
- result = address - block;
-
- if (trailer == 0)
- {
- return result;
- }
-
- do
- {
- if (trailer->this_size <= 0)
- abort ();
- result += trailer->this_size;
- trailer = (struct stk_trailer *) trailer->link;
- }
- while (trailer != 0);
-
- /* We are done. Note that if you present a bogus address (one
- not in any segment), you will get a different number back, formed
- from subtracting the address of the first block. This is probably
- not what you want. */
-
- return (result);
-}
-
-# else /* not CRAY2 */
-/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
- Determine the number of the cell within the stack,
- given the address of the cell. The purpose of this
- routine is to linearize, in some sense, stack addresses
- for alloca. */
-
-static long
-i00afunc (long address)
-{
- long stkl = 0;
-
- long size, pseg, this_segment, stack;
- long result = 0;
-
- struct stack_segment_linkage *ssptr;
-
- /* Register B67 contains the address of the end of the
- current stack segment. If you (as a subprogram) store
- your registers on the stack and find that you are past
- the contents of B67, you have overflowed the segment.
-
- B67 also points to the stack segment linkage control
- area, which is what we are really interested in. */
-
- stkl = CRAY_STACKSEG_END ();
- ssptr = (struct stack_segment_linkage *) stkl;
-
- /* If one subtracts 'size' from the end of the segment,
- one has the address of the first word of the segment.
-
- If this is not the first segment, 'pseg' will be
- nonzero. */
-
- pseg = ssptr->sspseg;
- size = ssptr->sssize;
-
- this_segment = stkl - size;
-
- /* It is possible that calling this routine itself caused
- a stack overflow. Discard stack segments which do not
- contain the target address. */
-
- while (!(this_segment <= address && address <= stkl))
- {
-# ifdef DEBUG_I00AFUNC
- fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
-# endif
- if (pseg == 0)
- break;
- stkl = stkl - pseg;
- ssptr = (struct stack_segment_linkage *) stkl;
- size = ssptr->sssize;
- pseg = ssptr->sspseg;
- this_segment = stkl - size;
- }
-
- result = address - this_segment;
-
- /* If you subtract pseg from the current end of the stack,
- you get the address of the previous stack segment's end.
- This seems a little convoluted to me, but I'll bet you save
- a cycle somewhere. */
-
- while (pseg != 0)
- {
-# ifdef DEBUG_I00AFUNC
- fprintf (stderr, "%011o %011o\n", pseg, size);
-# endif
- stkl = stkl - pseg;
- ssptr = (struct stack_segment_linkage *) stkl;
- size = ssptr->sssize;
- pseg = ssptr->sspseg;
- result += size;
- }
- return (result);
-}
-
-# endif /* not CRAY2 */
-# endif /* CRAY */
-
-# endif /* no alloca */
-#endif /* not GCC version 2 */
-
-/* arch-tag: 5c9901c8-3cd4-453e-bd66-d9035a175ee3
- (do not change this comment) */
diff --git a/src/buffer.c b/src/buffer.c
index 39a0ce1dab0..045a22c8e31 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -215,25 +215,38 @@ frame parameter come first, followed by the rest of the buffers. */)
(frame)
Lisp_Object frame;
{
- Lisp_Object framelist, general;
+ Lisp_Object general;
general = Fmapcar (Qcdr, Vbuffer_alist);
if (FRAMEP (frame))
{
- Lisp_Object tail;
+ Lisp_Object framelist, prevlist, tail;
+ Lisp_Object args[3];
CHECK_FRAME (frame);
framelist = Fcopy_sequence (XFRAME (frame)->buffer_list);
+ prevlist = Fnreverse (Fcopy_sequence (XFRAME (frame)->buried_buffer_list));
- /* Remove from GENERAL any buffer that duplicates one in FRAMELIST. */
+ /* Remove from GENERAL any buffer that duplicates one in
+ FRAMELIST or PREVLIST. */
tail = framelist;
- while (! NILP (tail))
+ while (CONSP (tail))
{
general = Fdelq (XCAR (tail), general);
tail = XCDR (tail);
}
- return nconc2 (framelist, general);
+ tail = prevlist;
+ while (CONSP (tail))
+ {
+ general = Fdelq (XCAR (tail), general);
+ tail = XCDR (tail);
+ }
+
+ args[0] = framelist;
+ args[1] = general;
+ args[2] = prevlist;
+ return Fnconc (3, args);
}
return general;
@@ -348,8 +361,6 @@ The value is never nil. */)
b = (struct buffer *) allocate_buffer ();
- b->size = sizeof (struct buffer) / sizeof (EMACS_INT);
-
/* An ordinary buffer uses its own struct buffer_text. */
b->text = &b->own_text;
b->base_buffer = 0;
@@ -403,10 +414,7 @@ The value is never nil. */)
STRING_SET_INTERVALS (name, NULL_INTERVAL);
b->name = name;
- if (SREF (name, 0) != ' ')
- b->undo_list = Qnil;
- else
- b->undo_list = Qt;
+ b->undo_list = (SREF (name, 0) != ' ') ? Qnil : Qt;
reset_buffer (b);
reset_buffer_local_variables (b, 1);
@@ -553,12 +561,10 @@ CLONE nil means the indirect buffer's state is reset to default values. */)
error ("Empty string for buffer name is not allowed");
b = (struct buffer *) allocate_buffer ();
- b->size = sizeof (struct buffer) / sizeof (EMACS_INT);
- if (XBUFFER (base_buffer)->base_buffer)
- b->base_buffer = XBUFFER (base_buffer)->base_buffer;
- else
- b->base_buffer = XBUFFER (base_buffer);
+ b->base_buffer = (XBUFFER (base_buffer)->base_buffer
+ ? XBUFFER (base_buffer)->base_buffer
+ : XBUFFER (base_buffer));
/* Use the base buffer's text object. */
b->text = b->base_buffer->text;
@@ -889,8 +895,7 @@ is the default binding of the variable. */)
CHECK_BUFFER (buffer);
buf = XBUFFER (buffer);
- if (SYMBOLP (variable))
- variable = indirect_variable (variable);
+ variable = indirect_variable (variable);
/* Look in local_var_list */
result = Fassoc (variable, buf->local_var_alist);
@@ -1583,6 +1588,23 @@ record_buffer (buf)
XSETCDR (link, Vbuffer_alist);
Vbuffer_alist = link;
+ /* Effectively do a delq on buried_buffer_list. */
+
+ prev = Qnil;
+ for (link = XFRAME (frame)->buried_buffer_list; CONSP (link);
+ link = XCDR (link))
+ {
+ if (EQ (XCAR (link), buf))
+ {
+ if (NILP (prev))
+ XFRAME (frame)->buried_buffer_list = XCDR (link);
+ else
+ XSETCDR (prev, XCDR (XCDR (prev)));
+ break;
+ }
+ prev = link;
+ }
+
/* Now move this buffer to the front of frame_buffer_list also. */
prev = Qnil;
@@ -1886,8 +1908,7 @@ set_buffer_internal_1 (b)
for (tail = b->local_var_alist; CONSP (tail); tail = XCDR (tail))
{
valcontents = SYMBOL_VALUE (XCAR (XCAR (tail)));
- if ((BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if ((BUFFER_LOCAL_VALUEP (valcontents))
&& (tem = XBUFFER_LOCAL_VALUE (valcontents)->realvalue,
(BOOLFWDP (tem) || INTFWDP (tem) || OBJFWDP (tem))))
/* Just reference the variable
@@ -1901,8 +1922,7 @@ set_buffer_internal_1 (b)
for (tail = old_buf->local_var_alist; CONSP (tail); tail = XCDR (tail))
{
valcontents = SYMBOL_VALUE (XCAR (XCAR (tail)));
- if ((BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if ((BUFFER_LOCAL_VALUEP (valcontents))
&& (tem = XBUFFER_LOCAL_VALUE (valcontents)->realvalue,
(BOOLFWDP (tem) || INTFWDP (tem) || OBJFWDP (tem))))
/* Just reference the variable
@@ -2065,10 +2085,10 @@ selected window if it is displayed there. */)
XSETCDR (link, Qnil);
Vbuffer_alist = nconc2 (Vbuffer_alist, link);
- /* Removing BUFFER from frame-specific lists
- has the effect of putting BUFFER at the end
- of the combined list in each frame. */
- frames_discard_buffer (buffer);
+ XFRAME (selected_frame)->buffer_list
+ = Fdelq (buffer, XFRAME (selected_frame)->buffer_list);
+ XFRAME (selected_frame)->buried_buffer_list
+ = Fcons (buffer, Fdelq (buffer, XFRAME (selected_frame)->buried_buffer_list));
}
return Qnil;
@@ -2461,7 +2481,7 @@ the normal hook `change-major-mode-hook'. */)
/* Any which are supposed to be permanent,
make local again, with the same values they had. */
- for (alist = oalist; !NILP (alist); alist = XCDR (alist))
+ for (alist = oalist; CONSP (alist); alist = XCDR (alist))
{
sym = XCAR (XCAR (alist));
tem = Fget (sym, Qpermanent_local);
@@ -2491,32 +2511,17 @@ swap_out_buffer_local_variables (b)
XSETBUFFER (buffer, b);
oalist = b->local_var_alist;
- for (alist = oalist; !NILP (alist); alist = XCDR (alist))
+ for (alist = oalist; CONSP (alist); alist = XCDR (alist))
{
sym = XCAR (XCAR (alist));
/* Need not do anything if some other buffer's binding is now encached. */
tem = XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->buffer;
- if (BUFFERP (tem) && XBUFFER (tem) == current_buffer)
+ if (EQ (tem, buffer))
{
- /* Symbol is set up for this buffer's old local value.
- Set it up for the current buffer with the default value. */
-
- tem = XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->cdr;
- /* Store the symbol's current value into the alist entry
- it is currently set up for. This is so that, if the
- local is marked permanent, and we make it local again
- later in Fkill_all_local_variables, we don't lose the value. */
- XSETCDR (XCAR (tem),
- do_symval_forwarding (XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->realvalue));
- /* Switch to the symbol's default-value alist entry. */
- XSETCAR (tem, tem);
- /* Mark it as current for buffer B. */
- XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->buffer = buffer;
- /* Store the current value into any forwarding in the symbol. */
- store_symval_forwarding (sym,
- XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->realvalue,
- XCDR (tem), NULL);
+ /* Symbol is set up for this buffer's old local value:
+ swap it out! */
+ swap_in_global_binding (sym);
}
}
}
@@ -4186,15 +4191,8 @@ add_overlay_mod_hooklist (functionlist, overlay)
int oldsize = XVECTOR (last_overlay_modification_hooks)->size;
if (last_overlay_modification_hooks_used == oldsize)
- {
- Lisp_Object old;
- old = last_overlay_modification_hooks;
- last_overlay_modification_hooks
- = Fmake_vector (make_number (oldsize * 2), Qnil);
- bcopy (XVECTOR (old)->contents,
- XVECTOR (last_overlay_modification_hooks)->contents,
- sizeof (Lisp_Object) * oldsize);
- }
+ last_overlay_modification_hooks = larger_vector
+ (last_overlay_modification_hooks, oldsize * 2, Qnil);
AREF (last_overlay_modification_hooks, last_overlay_modification_hooks_used++) = functionlist;
AREF (last_overlay_modification_hooks, last_overlay_modification_hooks_used++) = overlay;
}
@@ -5006,7 +5004,9 @@ init_buffer_once ()
buffer_local_symbols.text = &buffer_local_symbols.own_text;
BUF_INTERVALS (&buffer_defaults) = 0;
BUF_INTERVALS (&buffer_local_symbols) = 0;
+ XSETPVECTYPE (&buffer_defaults, PVEC_BUFFER);
XSETBUFFER (Vbuffer_defaults, &buffer_defaults);
+ XSETPVECTYPE (&buffer_local_symbols, PVEC_BUFFER);
XSETBUFFER (Vbuffer_local_symbols, &buffer_local_symbols);
/* Set up the default values of various buffer slots. */
@@ -5245,6 +5245,46 @@ init_buffer ()
free (pwd);
}
+/* Similar to defvar_lisp but define a variable whose value is the Lisp
+ Object stored in the current buffer. address is the address of the slot
+ in the buffer that is current now. */
+
+/* TYPE is nil for a general Lisp variable.
+ An integer specifies a type; then only LIsp values
+ with that type code are allowed (except that nil is allowed too).
+ LNAME is the LIsp-level variable name.
+ VNAME is the name of the buffer slot.
+ DOC is a dummy where you write the doc string as a comment. */
+#define DEFVAR_PER_BUFFER(lname, vname, type, doc) \
+ defvar_per_buffer (lname, vname, type, 0)
+
+static void
+defvar_per_buffer (namestring, address, type, doc)
+ char *namestring;
+ Lisp_Object *address;
+ Lisp_Object type;
+ char *doc;
+{
+ Lisp_Object sym, val;
+ int offset;
+
+ sym = intern (namestring);
+ val = allocate_misc ();
+ offset = (char *)address - (char *)current_buffer;
+
+ XMISCTYPE (val) = Lisp_Misc_Buffer_Objfwd;
+ XBUFFER_OBJFWD (val)->offset = offset;
+ SET_SYMBOL_VALUE (sym, val);
+ PER_BUFFER_SYMBOL (offset) = sym;
+ PER_BUFFER_TYPE (offset) = type;
+
+ if (PER_BUFFER_IDX (offset) == 0)
+ /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
+ slot of buffer_local_flags */
+ abort ();
+}
+
+
/* initialize the buffer routines */
void
syms_of_buffer ()
@@ -5505,6 +5545,8 @@ A string is printed verbatim in the mode line except for %-constructs:
%z -- print mnemonics of keyboard, terminal, and buffer coding systems.
%Z -- like %z, but including the end-of-line format.
%e -- print error message about full memory.
+ %@ -- print @ or hyphen. @ means that default-directory is on a
+ remote machine.
%[ -- print one [ for each recursive editing level. %] similar.
%% -- print %. %- -- print infinitely many dashes.
Decimal digits after the % specify field width to which to pad. */);
@@ -5528,6 +5570,9 @@ its hooks should not expect certain variables such as
Qnil,
doc: /* Pretty name of current buffer's major mode (a string). */);
+ DEFVAR_PER_BUFFER ("local-abbrev-table", &current_buffer->abbrev_table, Qnil,
+ doc: /* Local (mode-specific) abbrev table of current buffer. */);
+
DEFVAR_PER_BUFFER ("abbrev-mode", &current_buffer->abbrev_mode, Qnil,
doc: /* Non-nil turns on automatic expansion of abbrevs as they are inserted. */);
diff --git a/src/buffer.h b/src/buffer.h
index ed99dc4ffb1..37f499f0351 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -455,7 +455,7 @@ struct buffer
Check out mark_buffer (alloc.c) to see why. */
- EMACS_INT size;
+ EMACS_UINT size;
/* Next buffer, in chain of all buffers including killed buffers.
This chain is used only for garbage collection, in order to
@@ -552,6 +552,15 @@ struct buffer
/* Position where the overlay lists are centered. */
EMACS_INT overlay_center;
+ /* Changes in the buffer are recorded here for undo.
+ t means don't record anything.
+ This information belongs to the base buffer of an indirect buffer,
+ But we can't store it in the struct buffer_text
+ because local variables have to be right in the struct buffer.
+ So we copy it around in set_buffer_internal.
+ This comes before `name' because it is marked in a special way. */
+ Lisp_Object undo_list;
+
/* Everything from here down must be a Lisp_Object. */
/* The name of this buffer. */
@@ -592,15 +601,6 @@ struct buffer
/* Mode line element that controls format of mode line. */
Lisp_Object mode_line_format;
- /* Changes in the buffer are recorded here for undo.
- t means don't record anything.
- This information belongs to the base buffer of an indirect buffer,
- But we can't store it in the struct buffer_text
- because local variables have to be right in the struct buffer.
- So we copy it around in set_buffer_internal.
- This comes before `name' because it is marked in a special way. */
- Lisp_Object undo_list;
-
/* Analogous to mode_line_format for the line displayed at the top
of windows. Nil means don't display that line. */
Lisp_Object header_line_format;
diff --git a/src/callint.c b/src/callint.c
index 9dcc077fd65..a19c424c899 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -263,7 +263,6 @@ invoke it. If KEYS is omitted or nil, the return value of
Lisp_Object function, record_flag, keys;
{
Lisp_Object *args, *visargs;
- Lisp_Object fun;
Lisp_Object specs;
Lisp_Object filter_specs;
Lisp_Object teml;
@@ -317,8 +316,6 @@ invoke it. If KEYS is omitted or nil, the return value of
else
enable = Qnil;
- fun = indirect_function (function);
-
specs = Qnil;
string = 0;
/* The idea of FILTER_SPECS is to provide away to
@@ -329,37 +326,19 @@ invoke it. If KEYS is omitted or nil, the return value of
/* If k or K discard an up-event, save it here so it can be retrieved with U */
up_event = Qnil;
- /* Decode the kind of function. Either handle it and return,
- or go to `lose' if not interactive, or set either STRING or SPECS. */
-
- if (SUBRP (fun))
- {
- string = (unsigned char *) XSUBR (fun)->prompt;
- if (!string)
- {
- lose:
- wrong_type_argument (Qcommandp, function);
- }
- }
- else if (COMPILEDP (fun))
- {
- if ((XVECTOR (fun)->size & PSEUDOVECTOR_SIZE_MASK) <= COMPILED_INTERACTIVE)
- goto lose;
- specs = XVECTOR (fun)->contents[COMPILED_INTERACTIVE];
- }
- else
- {
- Lisp_Object form;
- GCPRO2 (function, prefix_arg);
- form = Finteractive_form (function);
- UNGCPRO;
- if (CONSP (form))
- specs = filter_specs = Fcar (XCDR (form));
- else
- goto lose;
- }
+ /* Set SPECS to the interactive form, or barf if not interactive. */
+ {
+ Lisp_Object form;
+ GCPRO2 (function, prefix_arg);
+ form = Finteractive_form (function);
+ UNGCPRO;
+ if (CONSP (form))
+ specs = filter_specs = Fcar (XCDR (form));
+ else
+ wrong_type_argument (Qcommandp, function);
+ }
- /* If either SPECS or STRING is set to a string, use it. */
+ /* If SPECS is set to a string, use it as an interactive prompt. */
if (STRINGP (specs))
{
/* Make a copy of string so that if a GC relocates specs,
@@ -368,7 +347,7 @@ invoke it. If KEYS is omitted or nil, the return value of
bcopy (SDATA (specs), string,
SBYTES (specs) + 1);
}
- else if (string == 0)
+ else
{
Lisp_Object input;
i = num_input_events;
@@ -402,8 +381,8 @@ invoke it. If KEYS is omitted or nil, the return value of
real_this_command= save_real_this_command;
current_kboard->Vlast_command = save_last_command;
- single_kboard_state ();
- return apply1 (function, specs);
+ temporarily_switch_to_single_kboard (NULL);
+ return unbind_to (speccount, apply1 (function, specs));
}
/* Here if function specifies a string to control parsing the defaults */
@@ -473,16 +452,19 @@ invoke it. If KEYS is omitted or nil, the return value of
/* Count the number of arguments the interactive spec would have
us give to the function. */
tem = string;
- for (j = 0; *tem; j++)
+ for (j = 0; *tem;)
{
/* 'r' specifications ("point and mark as 2 numeric args")
produce *two* arguments. */
- if (*tem == 'r') j++;
+ if (*tem == 'r')
+ j += 2;
+ else
+ j++;
tem = (unsigned char *) index (tem, '\n');
if (tem)
- tem++;
+ ++tem;
else
- tem = (unsigned char *) "";
+ break;
}
count = j;
@@ -585,7 +567,7 @@ invoke it. If KEYS is omitted or nil, the return value of
case 'G': /* Possibly nonexistent file name,
default to directory alone. */
args[i] = Fread_file_name (callint_message,
- Qnil, Qnil, Qnil, build_string (""), Qnil);
+ Qnil, Qnil, Qnil, empty_unibyte_string, Qnil);
break;
case 'i': /* Ignore an argument -- Does not do I/O */
@@ -851,12 +833,11 @@ invoke it. If KEYS is omitted or nil, the return value of
real_this_command= save_real_this_command;
current_kboard->Vlast_command = save_last_command;
- single_kboard_state ();
-
{
Lisp_Object val;
specbind (Qcommand_debug_status, Qnil);
+ temporarily_switch_to_single_kboard (NULL);
val = Ffuncall (count + 1, args);
UNGCPRO;
return unbind_to (speccount, val);
diff --git a/src/callproc.c b/src/callproc.c
index bf7ea43b868..3e6833aed44 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -84,6 +84,8 @@ extern int errno;
#include "syssignal.h"
#include "systty.h"
#include "blockinput.h"
+#include "frame.h"
+#include "termhooks.h"
#ifdef MSDOS
#include "msdos.h"
@@ -111,7 +113,7 @@ Lisp_Object Vtemp_file_name_pattern;
Lisp_Object Vshell_file_name;
-Lisp_Object Vprocess_environment;
+Lisp_Object Vprocess_environment, Vinitial_environment;
#ifdef DOS_NT
Lisp_Object Qbuffer_file_type;
@@ -130,6 +132,7 @@ int synch_process_termsig;
/* If synch_process_death is zero,
this is exit code of synchronous subprocess. */
int synch_process_retcode;
+
/* Clean up when exiting Fcall_process.
On MSDOS, delete the temporary file on any kind of termination.
@@ -138,6 +141,8 @@ int synch_process_retcode;
/* Nonzero if this is termination due to exit. */
static int call_process_exited;
+EXFUN (Fgetenv_internal, 2);
+
#ifndef VMS /* VMS version is in vmsproc.c. */
static Lisp_Object
@@ -1181,6 +1186,40 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r
static int relocate_fd ();
+static char **
+add_env (char **env, char **new_env, char *string)
+{
+ char **ep;
+ int ok = 1;
+ if (string == NULL)
+ return new_env;
+
+ /* See if this string duplicates any string already in the env.
+ If so, don't put it in.
+ When an env var has multiple definitions,
+ we keep the definition that comes first in process-environment. */
+ for (ep = env; ok && ep != new_env; ep++)
+ {
+ char *p = *ep, *q = string;
+ while (ok)
+ {
+ if (*q != *p)
+ break;
+ if (*q == 0)
+ /* The string is a lone variable name; keep it for now, we
+ will remove it later. It is a placeholder for a
+ variable that is not to be included in the environment. */
+ break;
+ if (*q == '=')
+ ok = 0;
+ p++, q++;
+ }
+ }
+ if (ok)
+ *new_env++ = string;
+ return new_env;
+}
+
/* This is the last thing run in a newly forked inferior
either synchronous or asynchronous.
Copy descriptors IN, OUT and ERR as descriptors 0, 1 and 2.
@@ -1236,9 +1275,10 @@ child_setup (in, out, err, new_argv, set_pgrp, current_dir)
/* Note that use of alloca is always safe here. It's obvious for systems
that do not have true vfork or that have true (stack) alloca.
- If using vfork and C_ALLOCA it is safe because that changes
- the superior's static variables as if the superior had done alloca
- and will be cleaned up in the usual way. */
+ If using vfork and C_ALLOCA (when Emacs used to include
+ src/alloca.c) it is safe because that changes the superior's
+ static variables as if the superior had done alloca and will be
+ cleaned up in the usual way. */
{
register char *temp;
register int i;
@@ -1282,57 +1322,80 @@ child_setup (in, out, err, new_argv, set_pgrp, current_dir)
temp[--i] = 0;
}
- /* Set `env' to a vector of the strings in Vprocess_environment. */
+ /* Set `env' to a vector of the strings in the environment. */
{
register Lisp_Object tem;
register char **new_env;
+ char **p, **q;
register int new_length;
-
+ Lisp_Object display = Qnil;
+
new_length = 0;
+
for (tem = Vprocess_environment;
- CONSP (tem) && STRINGP (XCAR (tem));
- tem = XCDR (tem))
- new_length++;
+ CONSP (tem) && STRINGP (XCAR (tem));
+ tem = XCDR (tem))
+ {
+ if (strncmp (SDATA (XCAR (tem)), "DISPLAY", 7) == 0
+ && (SDATA (XCAR (tem)) [7] == '\0'
+ || SDATA (XCAR (tem)) [7] == '='))
+ /* DISPLAY is specified in process-environment. */
+ display = Qt;
+ new_length++;
+ }
+
+ /* If not provided yet, use the frame's DISPLAY. */
+ if (NILP (display))
+ {
+ Lisp_Object tmp = Fframe_parameter (selected_frame, Qdisplay);
+ if (!STRINGP (tmp) && CONSP (Vinitial_environment))
+ /* If still not found, Look for DISPLAY in Vinitial_environment. */
+ tmp = Fgetenv_internal (build_string ("DISPLAY"),
+ Vinitial_environment);
+ if (STRINGP (tmp))
+ {
+ display = tmp;
+ new_length++;
+ }
+ }
/* new_length + 2 to include PWD and terminating 0. */
env = new_env = (char **) alloca ((new_length + 2) * sizeof (char *));
-
/* If we have a PWD envvar, pass one down,
but with corrected value. */
- if (getenv ("PWD"))
+ if (egetenv ("PWD"))
*new_env++ = pwd_var;
+
+ if (STRINGP (display))
+ {
+ int vlen = strlen ("DISPLAY=") + strlen (SDATA (display)) + 1;
+ char *vdata = (char *) alloca (vlen);
+ strcpy (vdata, "DISPLAY=");
+ strcat (vdata, SDATA (display));
+ new_env = add_env (env, new_env, vdata);
+ }
- /* Copy the Vprocess_environment strings into new_env. */
+ /* Overrides. */
for (tem = Vprocess_environment;
CONSP (tem) && STRINGP (XCAR (tem));
tem = XCDR (tem))
+ new_env = add_env (env, new_env, SDATA (XCAR (tem)));
+
+ *new_env = 0;
+
+ /* Remove variable names without values. */
+ p = q = env;
+ while (*p != 0)
{
- char **ep = env;
- char *string = (char *) SDATA (XCAR (tem));
- /* See if this string duplicates any string already in the env.
- If so, don't put it in.
- When an env var has multiple definitions,
- we keep the definition that comes first in process-environment. */
- for (; ep != new_env; ep++)
- {
- char *p = *ep, *q = string;
- while (1)
- {
- if (*q == 0)
- /* The string is malformed; might as well drop it. */
- goto duplicate;
- if (*q != *p)
- break;
- if (*q == '=')
- goto duplicate;
- p++, q++;
- }
- }
- *new_env++ = string;
- duplicate: ;
+ while (*q != 0 && strchr (*q, '=') == NULL)
+ q++;
+ *p = *q++;
+ if (*p != 0)
+ p++;
}
- *new_env = 0;
}
+
+
#ifdef WINDOWSNT
prepare_standard_handles (in, out, err, handles);
set_process_dir (SDATA (current_dir));
@@ -1446,22 +1509,18 @@ relocate_fd (fd, minfd)
}
static int
-getenv_internal (var, varlen, value, valuelen)
+getenv_internal_1 (var, varlen, value, valuelen, env)
char *var;
int varlen;
char **value;
int *valuelen;
+ Lisp_Object env;
{
- Lisp_Object scan;
-
- for (scan = Vprocess_environment; CONSP (scan); scan = XCDR (scan))
+ for (; CONSP (env); env = XCDR (env))
{
- Lisp_Object entry;
-
- entry = XCAR (scan);
+ Lisp_Object entry = XCAR (env);
if (STRINGP (entry)
- && SBYTES (entry) > varlen
- && SREF (entry, varlen) == '='
+ && SBYTES (entry) >= varlen
#ifdef WINDOWSNT
/* NT environment variables are case insensitive. */
&& ! strnicmp (SDATA (entry), var, varlen)
@@ -1470,35 +1529,95 @@ getenv_internal (var, varlen, value, valuelen)
#endif /* not WINDOWSNT */
)
{
- *value = (char *) SDATA (entry) + (varlen + 1);
- *valuelen = SBYTES (entry) - (varlen + 1);
+ if (SBYTES (entry) > varlen && SREF (entry, varlen) == '=')
+ {
+ *value = (char *) SDATA (entry) + (varlen + 1);
+ *valuelen = SBYTES (entry) - (varlen + 1);
+ return 1;
+ }
+ else if (SBYTES (entry) == varlen)
+ {
+ /* Lone variable names in Vprocess_environment mean that
+ variable should be removed from the environment. */
+ *value = NULL;
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+static int
+getenv_internal (var, varlen, value, valuelen, frame)
+ char *var;
+ int varlen;
+ char **value;
+ int *valuelen;
+ Lisp_Object frame;
+{
+ /* Try to find VAR in Vprocess_environment first. */
+ if (getenv_internal_1 (var, varlen, value, valuelen,
+ Vprocess_environment))
+ return *value ? 1 : 0;
+
+ /* For DISPLAY try to get the values from the frame or the initial env. */
+ if (strcmp (var, "DISPLAY") == 0)
+ {
+ Lisp_Object display
+ = Fframe_parameter (NILP (frame) ? selected_frame : frame, Qdisplay);
+ if (STRINGP (display))
+ {
+ *value = (char *) SDATA (display);
+ *valuelen = SBYTES (display);
return 1;
}
+ /* If still not found, Look for DISPLAY in Vinitial_environment. */
+ if (getenv_internal_1 (var, varlen, value, valuelen,
+ Vinitial_environment))
+ return *value ? 1 : 0;
}
return 0;
}
-DEFUN ("getenv-internal", Fgetenv_internal, Sgetenv_internal, 1, 1, 0,
- doc: /* Return the value of environment variable VAR, as a string.
-VAR should be a string. Value is nil if VAR is undefined in the environment.
-This function consults the variable `process-environment' for its value. */)
- (var)
- Lisp_Object var;
+DEFUN ("getenv-internal", Fgetenv_internal, Sgetenv_internal, 1, 2, 0,
+ doc: /* Get the value of environment variable VARIABLE.
+VARIABLE should be a string. Value is nil if VARIABLE is undefined in
+the environment. Otherwise, value is a string.
+
+This function searches `process-environment' for VARIABLE. If it is
+not found there, then it continues the search in the environment list
+of the selected frame.
+
+If optional parameter ENV is a list, then search this list instead of
+`process-environment', and return t when encountering a negative entry.
+
+If it is a frame, then this function will ignore `process-environment' and
+will simply look up the variable in that frame's environment. */)
+ (variable, env)
+ Lisp_Object variable, env;
{
char *value;
int valuelen;
- CHECK_STRING (var);
- if (getenv_internal (SDATA (var), SBYTES (var),
- &value, &valuelen))
+ CHECK_STRING (variable);
+ if (CONSP (env))
+ {
+ if (getenv_internal_1 (SDATA (variable), SBYTES (variable),
+ &value, &valuelen, env))
+ return value ? make_string (value, valuelen) : Qt;
+ else
+ return Qnil;
+ }
+ else if (getenv_internal (SDATA (variable), SBYTES (variable),
+ &value, &valuelen, env))
return make_string (value, valuelen);
else
return Qnil;
}
-/* A version of getenv that consults process_environment, easily
- callable from C. */
+/* A version of getenv that consults the Lisp environment lists,
+ easily callable from C. */
char *
egetenv (var)
char *var;
@@ -1506,7 +1625,7 @@ egetenv (var)
char *value;
int valuelen;
- if (getenv_internal (var, strlen (var), &value, &valuelen))
+ if (getenv_internal (var, strlen (var), &value, &valuelen, Qnil))
return value;
else
return 0;
@@ -1629,8 +1748,8 @@ init_callproc ()
{
char *dir = getenv ("TMPDIR");
Vtemp_file_name_pattern
- = Fexpand_file_name (build_string ("emacsXXXXXX"),
- build_string (dir));
+ = Fexpand_file_name (build_string ("emacsXXXXXX"),
+ build_string (dir));
}
else
Vtemp_file_name_pattern = build_string ("/tmp/emacsXXXXXX");
@@ -1646,17 +1765,20 @@ init_callproc ()
}
void
-set_process_environment ()
+set_initial_environment ()
{
register char **envp;
-
- Vprocess_environment = Qnil;
#ifndef CANNOT_DUMP
if (initialized)
#endif
- for (envp = environ; *envp; envp++)
- Vprocess_environment = Fcons (build_string (*envp),
- Vprocess_environment);
+ {
+ for (envp = environ; *envp; envp++)
+ Vprocess_environment = Fcons (build_string (*envp),
+ Vprocess_environment);
+ /* Ideally, the `copy' shouldn't be necessary, but it seems it's frequent
+ to use `delete' and friends on process-environment. */
+ Vinitial_environment = Fcopy_sequence (Vprocess_environment);
+ }
}
void
@@ -1715,16 +1837,34 @@ If this variable is nil, then Emacs is unable to use a shared directory. */);
This is used by `call-process-region'. */);
/* This variable is initialized in init_callproc. */
+ DEFVAR_LISP ("initial-environment", &Vinitial_environment,
+ doc: /* List of environment variables inherited from the parent process.
+Each element should be a string of the form ENVVARNAME=VALUE.
+The elements must normally be decoded (using `locale-coding-system') for use. */);
+ Vinitial_environment = Qnil;
+
DEFVAR_LISP ("process-environment", &Vprocess_environment,
- doc: /* List of environment variables for subprocesses to inherit.
+ doc: /* List of overridden environment variables for subprocesses to inherit.
Each element should be a string of the form ENVVARNAME=VALUE.
+
+Entries in this list take precedence to those in the frame-local
+environments. Therefore, let-binding `process-environment' is an easy
+way to temporarily change the value of an environment variable,
+irrespective of where it comes from. To use `process-environment' to
+remove an environment variable, include only its name in the list,
+without "=VALUE".
+
+This variable is set to nil when Emacs starts.
+
If multiple entries define the same variable, the first one always
takes precedence.
-The environment which Emacs inherits is placed in this variable
-when Emacs starts.
+
Non-ASCII characters are encoded according to the initial value of
-`locale-coding-system', i.e. the elements must normally be decoded for use.
+`locale-coding-system', i.e. the elements must normally be decoded for
+use.
+
See `setenv' and `getenv'. */);
+ Vprocess_environment = Qnil;
#ifndef VMS
defsubr (&Scall_process);
diff --git a/src/casetab.c b/src/casetab.c
index a53bb1ece52..952a320dda3 100644
--- a/src/casetab.c
+++ b/src/casetab.c
@@ -126,7 +126,7 @@ set_case_table (table, standard)
int standard;
{
Lisp_Object up, canon, eqv;
- Lisp_Object indices[3];
+ int indices[3];
check_case_table (table);
diff --git a/src/ccl.c b/src/ccl.c
index 564fd4ba4fa..3ef342f455e 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -2348,16 +2348,8 @@ Return index number of the registered CCL program. */)
}
if (idx == len)
- {
- /* Extend the table. */
- Lisp_Object new_table;
- int j;
-
- new_table = Fmake_vector (make_number (len * 2), Qnil);
- for (j = 0; j < len; j++)
- ASET (new_table, j, AREF (Vccl_program_table, j));
- Vccl_program_table = new_table;
- }
+ /* Extend the table. */
+ Vccl_program_table = larger_vector (Vccl_program_table, len * 2, Qnil);
{
Lisp_Object elt;
@@ -2416,15 +2408,8 @@ Return index number of the registered map. */)
}
if (i == len)
- {
- Lisp_Object new_vector = Fmake_vector (make_number (len * 2), Qnil);
- int j;
-
- for (j = 0; j < len; j++)
- AREF (new_vector, j)
- = AREF (Vcode_conversion_map_vector, j);
- Vcode_conversion_map_vector = new_vector;
- }
+ Vcode_conversion_map_vector = larger_vector (Vcode_conversion_map_vector,
+ len * 2, Qnil);
index = make_number (i);
Fput (symbol, Qcode_conversion_map, map);
diff --git a/src/cm.c b/src/cm.c
index 18331216776..ad8ec080c9d 100644
--- a/src/cm.c
+++ b/src/cm.c
@@ -23,8 +23,13 @@ Boston, MA 02110-1301, USA. */
#include <config.h>
#include <stdio.h>
+
+#include "lisp.h"
+#include "frame.h"
#include "cm.h"
#include "termhooks.h"
+#include "termchar.h"
+
/* For now, don't try to include termcap.h. On some systems,
configure finds a non-standard termcap.h that the main build
@@ -53,13 +58,16 @@ evalcost (c)
return c;
}
+/* The terminal to use for low-level output. */
+struct tty_display_info *current_tty;
+
int
cmputc (c)
char c;
{
- if (termscript)
- fputc (c & 0177, termscript);
- putchar (c & 0177);
+ if (current_tty->termscript)
+ putc (c & 0177, current_tty->termscript);
+ putc (c & 0177, current_tty->output);
return c;
}
@@ -72,9 +80,9 @@ cmputc (c)
*/
static
-at (row, col) {
- curY = row;
- curX = col;
+at (tty, row, col) {
+ curY (tty) = row;
+ curX (tty) = col;
}
/*
@@ -82,8 +90,8 @@ at (row, col) {
*/
static
-addcol (n) {
- curX += n;
+addcol (tty, n) {
+ curX (tty) += n;
/*
* If cursor hit edge of screen, what happened?
@@ -93,21 +101,21 @@ addcol (n) {
* of the last line.
*/
- if (curX == Wcm.cm_cols) {
+ if (curX (tty) == tty->Wcm->cm_cols) {
/*
* Well, if magicwrap, still there, past the edge of the
* screen (!). If autowrap, on the col 0 of the next line.
* Otherwise on last column.
*/
- if (Wcm.cm_magicwrap)
+ if (tty->Wcm->cm_magicwrap)
; /* "limbo" */
- else if (Wcm.cm_autowrap) {
- curX = 0;
- curY++; /* Beware end of screen! */
+ else if (tty->Wcm->cm_autowrap) {
+ curX (tty) = 0;
+ curY (tty) ++; /* Beware end of screen! */
}
else
- curX--;
+ curX (tty)--;
}
}
#endif
@@ -123,20 +131,20 @@ addcol (n) {
* after we reach the last column; this takes us to a known state.
*/
void
-cmcheckmagic ()
+cmcheckmagic (struct tty_display_info *tty)
{
- if (curX == FrameCols)
+ if (curX (tty) == FrameCols (tty))
{
- if (!MagicWrap || curY >= FrameRows - 1)
+ if (!MagicWrap (tty) || curY (tty) >= FrameRows (tty) - 1)
abort ();
- if (termscript)
- putc ('\r', termscript);
- putchar ('\r');
- if (termscript)
- putc ('\n', termscript);
- putchar ('\n');
- curX = 0;
- curY++;
+ if (tty->termscript)
+ putc ('\r', tty->termscript);
+ putc ('\r', tty->output);
+ if (tty->termscript)
+ putc ('\n', tty->termscript);
+ putc ('\n', tty->output);
+ curX (tty) = 0;
+ curY (tty)++;
}
}
@@ -148,21 +156,21 @@ cmcheckmagic ()
*/
void
-cmcostinit ()
+cmcostinit (struct tty_display_info *tty)
{
char *p;
#define COST(x,e) (x ? (cost = 0, tputs (x, 1, e), cost) : BIG)
#define CMCOST(x,e) ((x == 0) ? BIG : (p = tgoto(x, 0, 0), COST(p ,e)))
- Wcm.cc_up = COST (Wcm.cm_up, evalcost);
- Wcm.cc_down = COST (Wcm.cm_down, evalcost);
- Wcm.cc_left = COST (Wcm.cm_left, evalcost);
- Wcm.cc_right = COST (Wcm.cm_right, evalcost);
- Wcm.cc_home = COST (Wcm.cm_home, evalcost);
- Wcm.cc_cr = COST (Wcm.cm_cr, evalcost);
- Wcm.cc_ll = COST (Wcm.cm_ll, evalcost);
- Wcm.cc_tab = Wcm.cm_tabwidth ? COST (Wcm.cm_tab, evalcost) : BIG;
+ tty->Wcm->cc_up = COST (tty->Wcm->cm_up, evalcost);
+ tty->Wcm->cc_down = COST (tty->Wcm->cm_down, evalcost);
+ tty->Wcm->cc_left = COST (tty->Wcm->cm_left, evalcost);
+ tty->Wcm->cc_right = COST (tty->Wcm->cm_right, evalcost);
+ tty->Wcm->cc_home = COST (tty->Wcm->cm_home, evalcost);
+ tty->Wcm->cc_cr = COST (tty->Wcm->cm_cr, evalcost);
+ tty->Wcm->cc_ll = COST (tty->Wcm->cm_ll, evalcost);
+ tty->Wcm->cc_tab = tty->Wcm->cm_tabwidth ? COST (tty->Wcm->cm_tab, evalcost) : BIG;
/*
* These last three are actually minimum costs. When (if) they are
@@ -173,9 +181,9 @@ cmcostinit ()
* cursor motion seem to take straight numeric values. --ACT)
*/
- Wcm.cc_abs = CMCOST (Wcm.cm_abs, evalcost);
- Wcm.cc_habs = CMCOST (Wcm.cm_habs, evalcost);
- Wcm.cc_vabs = CMCOST (Wcm.cm_vabs, evalcost);
+ tty->Wcm->cc_abs = CMCOST (tty->Wcm->cm_abs, evalcost);
+ tty->Wcm->cc_habs = CMCOST (tty->Wcm->cm_habs, evalcost);
+ tty->Wcm->cc_vabs = CMCOST (tty->Wcm->cm_vabs, evalcost);
#undef CMCOST
#undef COST
@@ -188,8 +196,8 @@ cmcostinit ()
*/
static int
-calccost (srcy, srcx, dsty, dstx, doit)
- int srcy, srcx, dsty, dstx, doit;
+calccost (struct tty_display_info *tty,
+ int srcy, int srcx, int dsty, int dstx, int doit)
{
register int deltay,
deltax,
@@ -206,16 +214,16 @@ calccost (srcy, srcx, dsty, dstx, doit)
don't believe the cursor position: give up here
and force use of absolute positioning. */
- if (curX == Wcm.cm_cols)
+ if (curX (tty) == tty->Wcm->cm_cols)
goto fail;
totalcost = 0;
if ((deltay = dsty - srcy) == 0)
goto x;
if (deltay < 0)
- p = Wcm.cm_up, c = Wcm.cc_up, deltay = -deltay;
+ p = tty->Wcm->cm_up, c = tty->Wcm->cc_up, deltay = -deltay;
else
- p = Wcm.cm_down, c = Wcm.cc_down;
+ p = tty->Wcm->cm_down, c = tty->Wcm->cc_down;
if (c == BIG) { /* caint get thar from here */
if (doit)
printf ("OOPS");
@@ -224,16 +232,16 @@ calccost (srcy, srcx, dsty, dstx, doit)
totalcost = c * deltay;
if (doit)
while (--deltay >= 0)
- tputs (p, 1, cmputc);
+ emacs_tputs (tty, p, 1, cmputc);
x:
if ((deltax = dstx - srcx) == 0)
goto done;
if (deltax < 0) {
- p = Wcm.cm_left, c = Wcm.cc_left, deltax = -deltax;
+ p = tty->Wcm->cm_left, c = tty->Wcm->cc_left, deltax = -deltax;
goto dodelta; /* skip all the tab junk */
}
/* Tabs (the toughie) */
- if (Wcm.cc_tab >= BIG || !Wcm.cm_usetabs)
+ if (tty->Wcm->cc_tab >= BIG || !tty->Wcm->cm_usetabs)
goto olddelta; /* forget it! */
/*
@@ -244,12 +252,12 @@ x:
* we will put into tabx (for ntabs) and tab2x (for n2tabs)).
*/
- ntabs = (deltax + srcx % Wcm.cm_tabwidth) / Wcm.cm_tabwidth;
+ ntabs = (deltax + srcx % tty->Wcm->cm_tabwidth) / tty->Wcm->cm_tabwidth;
n2tabs = ntabs + 1;
- tabx = (srcx / Wcm.cm_tabwidth + ntabs) * Wcm.cm_tabwidth;
- tab2x = tabx + Wcm.cm_tabwidth;
+ tabx = (srcx / tty->Wcm->cm_tabwidth + ntabs) * tty->Wcm->cm_tabwidth;
+ tab2x = tabx + tty->Wcm->cm_tabwidth;
- if (tab2x >= Wcm.cm_cols) /* too far (past edge) */
+ if (tab2x >= tty->Wcm->cm_cols) /* too far (past edge) */
n2tabs = 0;
/*
@@ -257,12 +265,12 @@ x:
* for using n2tabs, then pick the minimum.
*/
- /* cost for ntabs + cost for right motion */
- tabcost = ntabs ? ntabs * Wcm.cc_tab + (dstx - tabx) * Wcm.cc_right
+ /* cost for ntabs + cost for right motion */
+ tabcost = ntabs ? ntabs * tty->Wcm->cc_tab + (dstx - tabx) * tty->Wcm->cc_right
: BIG;
- /* cost for n2tabs + cost for left motion */
- c = n2tabs ? n2tabs * Wcm.cc_tab + (tab2x - dstx) * Wcm.cc_left
+ /* cost for n2tabs + cost for left motion */
+ c = n2tabs ? n2tabs * tty->Wcm->cc_tab + (tab2x - dstx) * tty->Wcm->cc_left
: BIG;
if (c < tabcost) /* then cheaper to overshoot & back up */
@@ -275,11 +283,11 @@ x:
* See if tabcost is less than just moving right
*/
- if (tabcost < (deltax * Wcm.cc_right)) {
+ if (tabcost < (deltax * tty->Wcm->cc_right)) {
totalcost += tabcost; /* use the tabs */
if (doit)
while (--ntabs >= 0)
- tputs (Wcm.cm_tab, 1, cmputc);
+ emacs_tputs (tty, tty->Wcm->cm_tab, 1, cmputc);
srcx = tabx;
}
@@ -292,9 +300,9 @@ newdelta:
goto done;
olddelta:
if (deltax > 0)
- p = Wcm.cm_right, c = Wcm.cc_right;
+ p = tty->Wcm->cm_right, c = tty->Wcm->cc_right;
else
- p = Wcm.cm_left, c = Wcm.cc_left, deltax = -deltax;
+ p = tty->Wcm->cm_left, c = tty->Wcm->cc_left, deltax = -deltax;
dodelta:
if (c == BIG) { /* caint get thar from here */
@@ -306,7 +314,7 @@ fail:
totalcost += c * deltax;
if (doit)
while (--deltax >= 0)
- tputs (p, 1, cmputc);
+ emacs_tputs (tty, p, 1, cmputc);
done:
return totalcost;
}
@@ -324,7 +332,8 @@ losecursor ()
#define USECR 3
void
-cmgoto (row, col)
+cmgoto (tty, row, col)
+ struct tty_display_info *tty;
int row, col;
{
int homecost,
@@ -337,47 +346,47 @@ cmgoto (row, col)
*dcm;
/* First the degenerate case */
- if (row == curY && col == curX) /* already there */
+ if (row == curY (tty) && col == curX (tty)) /* already there */
return;
- if (curY >= 0 && curX >= 0)
+ if (curY (tty) >= 0 && curX (tty) >= 0)
{
/* We may have quick ways to go to the upper-left, bottom-left,
* start-of-line, or start-of-next-line. Or it might be best to
* start where we are. Examine the options, and pick the cheapest.
*/
- relcost = calccost (curY, curX, row, col, 0);
+ relcost = calccost (tty, curY (tty), curX (tty), row, col, 0);
use = USEREL;
- if ((homecost = Wcm.cc_home) < BIG)
- homecost += calccost (0, 0, row, col, 0);
+ if ((homecost = tty->Wcm->cc_home) < BIG)
+ homecost += calccost (tty, 0, 0, row, col, 0);
if (homecost < relcost)
- relcost = homecost, use = USEHOME;
- if ((llcost = Wcm.cc_ll) < BIG)
- llcost += calccost (Wcm.cm_rows - 1, 0, row, col, 0);
+ relcost = homecost, use = USEHOME;
+ if ((llcost = tty->Wcm->cc_ll) < BIG)
+ llcost += calccost (tty, tty->Wcm->cm_rows - 1, 0, row, col, 0);
if (llcost < relcost)
- relcost = llcost, use = USELL;
- if ((crcost = Wcm.cc_cr) < BIG) {
- if (Wcm.cm_autolf)
- if (curY + 1 >= Wcm.cm_rows)
- crcost = BIG;
+ relcost = llcost, use = USELL;
+ if ((crcost = tty->Wcm->cc_cr) < BIG) {
+ if (tty->Wcm->cm_autolf)
+ if (curY (tty) + 1 >= tty->Wcm->cm_rows)
+ crcost = BIG;
else
- crcost += calccost (curY + 1, 0, row, col, 0);
+ crcost += calccost (tty, curY (tty) + 1, 0, row, col, 0);
else
- crcost += calccost (curY, 0, row, col, 0);
+ crcost += calccost (tty, curY (tty), 0, row, col, 0);
}
if (crcost < relcost)
relcost = crcost, use = USECR;
- directcost = Wcm.cc_abs, dcm = Wcm.cm_abs;
- if (row == curY && Wcm.cc_habs < BIG)
- directcost = Wcm.cc_habs, dcm = Wcm.cm_habs;
- else if (col == curX && Wcm.cc_vabs < BIG)
- directcost = Wcm.cc_vabs, dcm = Wcm.cm_vabs;
+ directcost = tty->Wcm->cc_abs, dcm = tty->Wcm->cm_abs;
+ if (row == curY (tty) && tty->Wcm->cc_habs < BIG)
+ directcost = tty->Wcm->cc_habs, dcm = tty->Wcm->cm_habs;
+ else if (col == curX (tty) && tty->Wcm->cc_vabs < BIG)
+ directcost = tty->Wcm->cc_vabs, dcm = tty->Wcm->cm_vabs;
}
else
{
directcost = 0, relcost = 100000;
- dcm = Wcm.cm_abs;
+ dcm = tty->Wcm->cm_abs;
}
/*
@@ -388,13 +397,14 @@ cmgoto (row, col)
{
/* compute REAL direct cost */
cost = 0;
- p = dcm == Wcm.cm_habs ? tgoto (dcm, row, col) :
- tgoto (dcm, col, row);
- tputs (p, 1, evalcost);
+ p = (dcm == tty->Wcm->cm_habs
+ ? tgoto (dcm, row, col)
+ : tgoto (dcm, col, row));
+ emacs_tputs (tty, p, 1, evalcost);
if (cost <= relcost)
{ /* really is cheaper */
- tputs (p, 1, cmputc);
- curY = row, curX = col;
+ emacs_tputs (tty, p, 1, cmputc);
+ curY (tty) = row, curX (tty) = col;
return;
}
}
@@ -402,25 +412,25 @@ cmgoto (row, col)
switch (use)
{
case USEHOME:
- tputs (Wcm.cm_home, 1, cmputc);
- curY = 0, curX = 0;
+ emacs_tputs (tty, tty->Wcm->cm_home, 1, cmputc);
+ curY (tty) = 0, curX (tty) = 0;
break;
case USELL:
- tputs (Wcm.cm_ll, 1, cmputc);
- curY = Wcm.cm_rows - 1, curX = 0;
+ emacs_tputs (tty, tty->Wcm->cm_ll, 1, cmputc);
+ curY (tty) = tty->Wcm->cm_rows - 1, curX (tty) = 0;
break;
case USECR:
- tputs (Wcm.cm_cr, 1, cmputc);
- if (Wcm.cm_autolf)
- curY++;
- curX = 0;
+ emacs_tputs (tty, tty->Wcm->cm_cr, 1, cmputc);
+ if (tty->Wcm->cm_autolf)
+ curY (tty)++;
+ curX (tty) = 0;
break;
}
- (void) calccost (curY, curX, row, col, 1);
- curY = row, curX = col;
+ (void) calccost (tty, curY (tty), curX (tty), row, col, 1);
+ curY (tty) = row, curX (tty) = col;
}
/* Clear out all terminal info.
@@ -428,9 +438,9 @@ cmgoto (row, col)
*/
void
-Wcm_clear ()
+Wcm_clear (struct tty_display_info *tty)
{
- bzero (&Wcm, sizeof Wcm);
+ bzero (tty->Wcm, sizeof (struct cm));
UP = 0;
BC = 0;
}
@@ -443,21 +453,21 @@ Wcm_clear ()
*/
int
-Wcm_init ()
+Wcm_init (struct tty_display_info *tty)
{
#if 0
- if (Wcm.cm_abs && !Wcm.cm_ds)
+ if (tty->Wcm->cm_abs && !tty->Wcm->cm_ds)
return 0;
#endif
- if (Wcm.cm_abs)
+ if (tty->Wcm->cm_abs)
return 0;
/* Require up and left, and, if no absolute, down and right */
- if (!Wcm.cm_up || !Wcm.cm_left)
+ if (!tty->Wcm->cm_up || !tty->Wcm->cm_left)
return - 1;
- if (!Wcm.cm_abs && (!Wcm.cm_down || !Wcm.cm_right))
+ if (!tty->Wcm->cm_abs && (!tty->Wcm->cm_down || !tty->Wcm->cm_right))
return - 1;
/* Check that we know the size of the screen.... */
- if (Wcm.cm_rows <= 0 || Wcm.cm_cols <= 0)
+ if (tty->Wcm->cm_rows <= 0 || tty->Wcm->cm_cols <= 0)
return - 2;
return 0;
}
diff --git a/src/cm.h b/src/cm.h
index 7c26a9ce66a..36413703a92 100644
--- a/src/cm.h
+++ b/src/cm.h
@@ -99,76 +99,78 @@ struct cm
int cc_vabs;
};
-extern struct cm Wcm; /* Terminal capabilities */
extern char PC; /* Pad character */
/* Shorthand */
#ifndef NoCMShortHand
-#define curY Wcm.cm_curY
-#define curX Wcm.cm_curX
-#define Up Wcm.cm_up
-#define Down Wcm.cm_down
-#define Left Wcm.cm_left
-#define Right Wcm.cm_right
-#define Tab Wcm.cm_tab
-#define BackTab Wcm.cm_backtab
-#define TabWidth Wcm.cm_tabwidth
-#define CR Wcm.cm_cr
-#define Home Wcm.cm_home
-#define LastLine Wcm.cm_ll
-#define AbsPosition Wcm.cm_abs
-#define ColPosition Wcm.cm_habs
-#define RowPosition Wcm.cm_vabs
-#define MultiUp Wcm.cm_multiup
-#define MultiDown Wcm.cm_multidown
-#define MultiLeft Wcm.cm_multileft
-#define MultiRight Wcm.cm_multiright
-#define AutoWrap Wcm.cm_autowrap
-#define MagicWrap Wcm.cm_magicwrap
-#define UseTabs Wcm.cm_usetabs
-#define FrameRows Wcm.cm_rows
-#define FrameCols Wcm.cm_cols
-
-#define UpCost Wcm.cc_up
-#define DownCost Wcm.cc_down
-#define LeftCost Wcm.cc_left
-#define RightCost Wcm.cc_right
-#define HomeCost Wcm.cc_home
-#define CRCost Wcm.cc_cr
-#define LastLineCost Wcm.cc_ll
-#define TabCost Wcm.cc_tab
-#define BackTabCost Wcm.cc_backtab
-#define AbsPositionCost Wcm.cc_abs
-#define ColPositionCost Wcm.cc_habs
-#define RowPositionCost Wcm.cc_vabs
-#define MultiUpCost Wcm.cc_multiup
-#define MultiDownCost Wcm.cc_multidown
-#define MultiLeftCost Wcm.cc_multileft
-#define MultiRightCost Wcm.cc_multiright
+#define curY(tty) (tty)->Wcm->cm_curY
+#define curX(tty) (tty)->Wcm->cm_curX
+#define Up(tty) (tty)->Wcm->cm_up
+#define Down(tty) (tty)->Wcm->cm_down
+#define Left(tty) (tty)->Wcm->cm_left
+#define Right(tty) (tty)->Wcm->cm_right
+#define Tab(tty) (tty)->Wcm->cm_tab
+#define BackTab(tty) (tty)->Wcm->cm_backtab
+#define TabWidth(tty) (tty)->Wcm->cm_tabwidth
+#define CR(tty) (tty)->Wcm->cm_cr
+#define Home(tty) (tty)->Wcm->cm_home
+#define LastLine(tty) (tty)->Wcm->cm_ll
+#define AbsPosition(tty) (tty)->Wcm->cm_abs
+#define ColPosition(tty) (tty)->Wcm->cm_habs
+#define RowPosition(tty) (tty)->Wcm->cm_vabs
+#define MultiUp(tty) (tty)->Wcm->cm_multiup
+#define MultiDown(tty) (tty)->Wcm->cm_multidown
+#define MultiLeft(tty) (tty)->Wcm->cm_multileft
+#define MultiRight(tty) (tty)->Wcm->cm_multiright
+#define AutoWrap(tty) (tty)->Wcm->cm_autowrap
+#define MagicWrap(tty) (tty)->Wcm->cm_magicwrap
+#define UseTabs(tty) (tty)->Wcm->cm_usetabs
+#define FrameRows(tty) (tty)->Wcm->cm_rows
+#define FrameCols(tty) (tty)->Wcm->cm_cols
+
+#define UpCost(tty) (tty)->Wcm->cc_up
+#define DownCost(tty) (tty)->Wcm->cc_down
+#define LeftCost(tty) (tty)->Wcm->cc_left
+#define RightCost(tty) (tty)->Wcm->cc_right
+#define HomeCost(tty) (tty)->Wcm->cc_home
+#define CRCost(tty) (tty)->Wcm->cc_cr
+#define LastLineCost(tty) (tty)->Wcm->cc_ll
+#define TabCost(tty) (tty)->Wcm->cc_tab
+#define BackTabCost(tty) (tty)->Wcm->cc_backtab
+#define AbsPositionCost(tty) (tty)->Wcm->cc_abs
+#define ColPositionCost(tty) (tty)->Wcm->cc_habs
+#define RowPositionCost(tty) (tty)->Wcm->cc_vabs
+#define MultiUpCost(tty) (tty)->Wcm->cc_multiup
+#define MultiDownCost(tty) (tty)->Wcm->cc_multidown
+#define MultiLeftCost(tty) (tty)->Wcm->cc_multileft
+#define MultiRightCost(tty) (tty)->Wcm->cc_multiright
#endif
-#define cmat(row,col) (curY = (row), curX = (col))
-#define cmplus(n) \
- { \
- if ((curX += (n)) >= FrameCols && !MagicWrap) \
- { \
- if (Wcm.cm_losewrap) losecursor (); \
- else if (AutoWrap) curX = 0, curY++; \
- else curX--; \
- } \
+#define cmat(tty,row,col) (curY(tty) = (row), curX(tty) = (col))
+#define cmplus(tty,n) \
+ { \
+ if ((curX (tty) += (n)) >= FrameCols (tty) && !MagicWrap (tty)) \
+ { \
+ if ((tty)->Wcm->cm_losewrap) losecursor (tty); \
+ else if (AutoWrap (tty)) curX (tty) = 0, curY (tty)++; \
+ else curX (tty)--; \
+ } \
}
-#define losecursor() (curX = -1, curY = -1)
+#define losecursor(tty) (curX(tty) = -1, curY(tty) = -1)
extern int cost;
extern int evalcost ();
-extern void cmcheckmagic ();
-extern int cmputc ();
-extern void cmcostinit ();
-extern void cmgoto ();
-extern void Wcm_clear ();
-extern int Wcm_init ();
+#define emacs_tputs(tty, str, affcnt, putc) (current_tty = (tty), tputs (str, affcnt, putc))
+
+extern struct tty_display_info *current_tty;
+extern void cmcheckmagic P_ ((struct tty_display_info *));
+extern int cmputc P_ ((int));
+extern void cmcostinit P_ ((struct tty_display_info *));
+extern void cmgoto P_ ((struct tty_display_info *, int, int));
+extern void Wcm_clear P_ ((struct tty_display_info *));
+extern int Wcm_init P_ ((struct tty_display_info *));
/* arch-tag: acc1535a-7136-49d6-b22d-9bc85702251b
(do not change this comment) */
diff --git a/src/coding.c b/src/coding.c
index 1dc4cf8eeb9..331b94e30a6 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -351,6 +351,8 @@ encode_coding_XXX (coding, source, destination, src_bytes, dst_bytes)
#include "coding.h"
#include "window.h"
#include "intervals.h"
+#include "frame.h"
+#include "termhooks.h"
#else /* not emacs */
@@ -438,16 +440,10 @@ int inhibit_iso_escape_detection;
/* Flag to make buffer-file-coding-system inherit from process-coding. */
int inherit_process_coding_system;
-/* Coding system to be used to encode text for terminal display. */
-struct coding_system terminal_coding;
-
/* Coding system to be used to encode text for terminal display when
terminal coding system is nil. */
struct coding_system safe_terminal_coding;
-/* Coding system of what is sent from terminal keyboard. */
-struct coding_system keyboard_coding;
-
/* Default coding system to be used to write a file. */
struct coding_system default_buffer_file_coding;
@@ -4308,7 +4304,7 @@ detect_coding (coding, src, src_bytes)
if (! mask)
idx = CODING_CATEGORY_IDX_RAW_TEXT;
- val = SYMBOL_VALUE (XVECTOR (Vcoding_category_table)->contents[idx]);
+ val = find_symbol_value (XVECTOR (Vcoding_category_table)->contents[idx]);
if (coding->eol_type != CODING_EOL_UNDECIDED)
{
@@ -4341,10 +4337,10 @@ detect_coding (coding, src, src_bytes)
static int
detect_eol_type (source, src_bytes, skip)
- unsigned char *source;
+ const unsigned char *source;
int src_bytes, *skip;
{
- unsigned char *src = source, *src_end = src + src_bytes;
+ const unsigned char *src = source, *src_end = src + src_bytes;
unsigned char c;
int total = 0; /* How many end-of-lines are found so far. */
int eol_type = CODING_EOL_UNDECIDED;
@@ -4390,10 +4386,10 @@ detect_eol_type (source, src_bytes, skip)
static int
detect_eol_type_in_2_octet_form (source, src_bytes, skip, big_endian_p)
- unsigned char *source;
+ const unsigned char *source;
int src_bytes, *skip, big_endian_p;
{
- unsigned char *src = source, *src_end = src + src_bytes;
+ const unsigned char *src = source, *src_end = src + src_bytes;
unsigned int c1, c2;
int total = 0; /* How many end-of-lines are found so far. */
int eol_type = CODING_EOL_UNDECIDED;
@@ -5377,7 +5373,7 @@ code_convert_region_unwind (arg)
inhibit_pre_post_conversion = 0;
Vlast_coding_system_used = XCAR (arg);
- for (arg = XCDR (arg); ! NILP (arg); arg = XCDR (arg))
+ for (arg = XCDR (arg); CONSP (arg); arg = XCDR (arg))
Fkill_buffer (XCAR (arg));
UNGCPRO;
@@ -7376,21 +7372,23 @@ Return the corresponding character code in Big5. */)
}
DEFUN ("set-terminal-coding-system-internal", Fset_terminal_coding_system_internal,
- Sset_terminal_coding_system_internal, 1, 1, 0,
+ Sset_terminal_coding_system_internal, 1, 2, 0,
doc: /* Internal use only. */)
- (coding_system)
+ (coding_system, terminal)
Lisp_Object coding_system;
+ Lisp_Object terminal;
{
+ struct coding_system *terminal_coding = TERMINAL_TERMINAL_CODING (get_terminal (terminal, 1));
CHECK_SYMBOL (coding_system);
- setup_coding_system (Fcheck_coding_system (coding_system), &terminal_coding);
+ setup_coding_system (Fcheck_coding_system (coding_system), terminal_coding);
/* We had better not send unsafe characters to terminal. */
- terminal_coding.mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
+ terminal_coding->mode |= CODING_MODE_INHIBIT_UNENCODABLE_CHAR;
/* Character composition should be disabled. */
- terminal_coding.composing = COMPOSITION_DISABLED;
+ terminal_coding->composing = COMPOSITION_DISABLED;
/* Error notification should be suppressed. */
- terminal_coding.suppress_error = 1;
- terminal_coding.src_multibyte = 1;
- terminal_coding.dst_multibyte = 0;
+ terminal_coding->suppress_error = 1;
+ terminal_coding->src_multibyte = 1;
+ terminal_coding->dst_multibyte = 0;
return Qnil;
}
@@ -7413,32 +7411,42 @@ DEFUN ("set-safe-terminal-coding-system-internal", Fset_safe_terminal_coding_sys
}
DEFUN ("terminal-coding-system", Fterminal_coding_system,
- Sterminal_coding_system, 0, 0, 0,
- doc: /* Return coding system specified for terminal output. */)
- ()
+ Sterminal_coding_system, 0, 1, 0,
+ doc: /* Return coding system specified for terminal output on the given terminal.
+TERMINAL may be a terminal id, a frame, or nil for the selected
+frame's terminal device. */)
+ (terminal)
+ Lisp_Object terminal;
{
- return terminal_coding.symbol;
+ return TERMINAL_TERMINAL_CODING (get_terminal (terminal, 1))->symbol;
}
DEFUN ("set-keyboard-coding-system-internal", Fset_keyboard_coding_system_internal,
- Sset_keyboard_coding_system_internal, 1, 1, 0,
+ Sset_keyboard_coding_system_internal, 1, 2, 0,
doc: /* Internal use only. */)
- (coding_system)
+ (coding_system, terminal)
Lisp_Object coding_system;
+ Lisp_Object terminal;
{
+ struct terminal *t = get_terminal (terminal, 1);
CHECK_SYMBOL (coding_system);
- setup_coding_system (Fcheck_coding_system (coding_system), &keyboard_coding);
+
+ setup_coding_system (Fcheck_coding_system (coding_system),
+ TERMINAL_KEYBOARD_CODING (t));
/* Character composition should be disabled. */
- keyboard_coding.composing = COMPOSITION_DISABLED;
+ TERMINAL_KEYBOARD_CODING (t)->composing = COMPOSITION_DISABLED;
return Qnil;
}
DEFUN ("keyboard-coding-system", Fkeyboard_coding_system,
- Skeyboard_coding_system, 0, 0, 0,
- doc: /* Return coding system specified for decoding keyboard input. */)
- ()
+ Skeyboard_coding_system, 0, 1, 0,
+ doc: /* Return coding system for decoding keyboard input on TERMINAL.
+TERMINAL may be a terminal id, a frame, or nil for the selected
+frame's terminal device. */)
+ (terminal)
+ Lisp_Object terminal;
{
- return keyboard_coding.symbol;
+ return TERMINAL_KEYBOARD_CODING (get_terminal (terminal, 1))->symbol;
}
@@ -7472,6 +7480,8 @@ They may specify a coding system, a cons of coding systems,
or a function symbol to call.
In the last case, we call the function with one argument,
which is a list of all the arguments given to this function.
+If the function can't decide a coding system, it can return
+`undecided' so that the normal code-detection is performed.
If OPERATION is `insert-file-contents', the argument corresponding to
TARGET may be a cons (FILENAME . BUFFER). In that case, FILENAME is a
@@ -7572,7 +7582,7 @@ call this function. */)
{
Lisp_Object val;
- val = SYMBOL_VALUE (XVECTOR (Vcoding_category_table)->contents[i]);
+ val = find_symbol_value (XVECTOR (Vcoding_category_table)->contents[i]);
if (!NILP (val))
{
if (! coding_system_table[i])
@@ -7701,8 +7711,6 @@ init_coding_once ()
iso_code_class[ISO_CODE_SS3] = ISO_single_shift_3;
iso_code_class[ISO_CODE_CSI] = ISO_control_sequence_introducer;
- setup_coding_system (Qnil, &keyboard_coding);
- setup_coding_system (Qnil, &terminal_coding);
setup_coding_system (Qnil, &safe_terminal_coding);
setup_coding_system (Qnil, &default_buffer_file_coding);
@@ -7975,7 +7983,9 @@ and the cdr part is used for encoding.
If VAL is a function symbol, the function must return a coding system
or a cons of coding systems which are used as above. The function is
called with an argument that is a list of the arguments with which
-`find-operation-coding-system' was called.
+`find-operation-coding-system' was called. If the function can't decide
+a coding system, it can return `undecided' so that the normal
+code-detection is performed.
See also the function `find-operation-coding-system'
and the variable `auto-coding-alist'. */);
diff --git a/src/coding.h b/src/coding.h
index 2efcd4f47e2..a53a74ec161 100644
--- a/src/coding.h
+++ b/src/coding.h
@@ -696,20 +696,10 @@ extern Lisp_Object Vlocale_coding_system;
the subprocess output. */
extern int inherit_process_coding_system;
-/* Coding-system to be used for encoding terminal output. This
- structure contains information of a coding-system specified by the
- function `set-terminal-coding-system'. */
-extern struct coding_system terminal_coding;
-
/* Coding system to be used to encode text for terminal display when
terminal coding system is nil. */
extern struct coding_system safe_terminal_coding;
-/* Coding-system of what is sent from terminal keyboard. This
- structure contains information of a coding-system specified by the
- function `set-keyboard-coding-system'. */
-extern struct coding_system keyboard_coding;
-
/* Default coding system to be used to write a file. */
extern struct coding_system default_buffer_file_coding;
diff --git a/src/config.in b/src/config.in
index 158ae109aae..0f8d6c0d769 100644
--- a/src/config.in
+++ b/src/config.in
@@ -228,9 +228,13 @@ Boston, MA 02110-1301, USA. */
/* Define to 1 if you have the `get_current_dir_name' function. */
#undef HAVE_GET_CURRENT_DIR_NAME
-/* Define to 1 if you have the ungif library (-lungif). */
+/* Define to 1 if you have a gif library (default -lgif; otherwise specify
+ with LIBGIF). */
#undef HAVE_GIF
+/* Define to 1 if you have the gpm library (-lgpm). */
+#undef HAVE_GPM
+
/* Define to 1 if you have the `grantpt' function. */
#undef HAVE_GRANTPT
@@ -482,7 +486,7 @@ Boston, MA 02110-1301, USA. */
/* Define to 1 if you have the `rename' function. */
#undef HAVE_RENAME
-/* Define to 1 if you have the `res_init' function. */
+/* Define to 1 if res_init is available. */
#undef HAVE_RES_INIT
/* Define to 1 if you have the `rindex' function. */
@@ -494,6 +498,9 @@ Boston, MA 02110-1301, USA. */
/* Define to 1 if you have the `rmdir' function. */
#undef HAVE_RMDIR
+/* Define to 1 if using librsvg. */
+#undef HAVE_RSVG
+
/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
@@ -695,9 +702,6 @@ Boston, MA 02110-1301, USA. */
expects to use version 10. */
#undef HAVE_X11
-/* Define to 1 if you have the X11R5 or newer version of Xlib. */
-#undef HAVE_X11R5
-
/* Define to 1 if you have the X11R6 or newer version of Xlib. */
#undef HAVE_X11R6
@@ -765,6 +769,9 @@ Boston, MA 02110-1301, USA. */
Solaris, for example). */
#undef LD_SWITCH_X_SITE_AUX
+/* Compiler option to link with the gif library (if not -lgif). */
+#undef LIBGIF
+
/* Define to 1 if localtime caches TZ. */
#undef LOCALTIME_CACHE
@@ -919,6 +926,13 @@ Boston, MA 02110-1301, USA. */
#define HAVE_MOUSE
#endif
+/* Multi-tty support relies on MULTI_KBOARD. It seems safe to turn it
+ on unconditionally. Note that src/s/darwin.h disables this at
+ present. */
+#ifndef MULTI_KBOARD
+#define MULTI_KBOARD
+#endif
+
/* If we're using the Carbon API on Mac OS X, define a few more
variables as well. */
#ifdef HAVE_CARBON
@@ -1118,7 +1132,7 @@ typedef unsigned size_t;
#ifdef HAVE_X11R6
#define HAVE_X_I18N
-#elif defined HAVE_X11R5 && !defined X11R5_INHIBIT_I18N
+#elif !defined X11R5_INHIBIT_I18N
#define HAVE_X_I18N
#endif
diff --git a/src/data.c b/src/data.c
index f954116f32e..2ee84f01a14 100644
--- a/src/data.c
+++ b/src/data.c
@@ -30,6 +30,7 @@ Boston, MA 02110-1301, USA. */
#include "keyboard.h"
#include "frame.h"
#include "syssignal.h"
+#include "termhooks.h" /* For FRAME_KBOARD reference in y-or-n-p. */
#ifdef STDC_HEADERS
#include <float.h>
@@ -583,8 +584,7 @@ DEFUN ("boundp", Fboundp, Sboundp, 1, 1, 0,
valcontents = SYMBOL_VALUE (symbol);
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
valcontents = swap_in_symval_forwarding (symbol, valcontents);
return (EQ (valcontents, Qunbound) ? Qnil : Qt);
@@ -758,12 +758,30 @@ Value, if non-nil, is a list \(interactive SPEC). */)
(cmd)
Lisp_Object cmd;
{
- Lisp_Object fun = indirect_function (cmd);
+ Lisp_Object fun = indirect_function (cmd); /* Check cycles. */
+
+ if (NILP (fun) || EQ (fun, Qunbound))
+ return Qnil;
+
+ /* Use an `interactive-form' property if present, analogous to the
+ function-documentation property. */
+ fun = cmd;
+ while (SYMBOLP (fun))
+ {
+ Lisp_Object tmp = Fget (fun, intern ("interactive-form"));
+ if (!NILP (tmp))
+ return tmp;
+ else
+ fun = Fsymbol_function (fun);
+ }
if (SUBRP (fun))
{
- if (XSUBR (fun)->prompt)
- return list2 (Qinteractive, build_string (XSUBR (fun)->prompt));
+ char *spec = XSUBR (fun)->intspec;
+ if (spec)
+ return list2 (Qinteractive,
+ (*spec != '(') ? build_string (spec) :
+ Fcar (Fread_from_string (build_string (spec), Qnil, Qnil)));
}
else if (COMPILEDP (fun))
{
@@ -866,7 +884,18 @@ do_symval_forwarding (valcontents)
case Lisp_Misc_Kboard_Objfwd:
offset = XKBOARD_OBJFWD (valcontents)->offset;
- return *(Lisp_Object *)(offset + (char *)current_kboard);
+ /* We used to simply use current_kboard here, but from Lisp
+ code, it's value is often unexpected. It seems nicer to
+ allow constructions like this to work as intuitively expected:
+
+ (with-selected-frame frame
+ (define-key local-function-map "\eOP" [f1]))
+
+ On the other hand, this affects the semantics of
+ last-command and real-last-command, and people may rely on
+ that. I took a quick look at the Lisp codebase, and I
+ don't think anything will break. --lorentey */
+ return *(Lisp_Object *)(offset + (char *)FRAME_KBOARD (SELECTED_FRAME ()));
}
return valcontents;
}
@@ -893,9 +922,11 @@ store_symval_forwarding (symbol, valcontents, newval, buf)
case Lisp_Misc_Intfwd:
CHECK_NUMBER (newval);
*XINTFWD (valcontents)->intvar = XINT (newval);
- if (*XINTFWD (valcontents)->intvar != XINT (newval))
- error ("Value out of range for variable `%s'",
- SDATA (SYMBOL_NAME (symbol)));
+ /* This can never happen since intvar points to an EMACS_INT
+ which is at least large enough to hold a Lisp_Object.
+ if (*XINTFWD (valcontents)->intvar != XINT (newval))
+ error ("Value out of range for variable `%s'",
+ SDATA (SYMBOL_NAME (symbol))); */
break;
case Lisp_Misc_Boolfwd:
@@ -954,7 +985,7 @@ store_symval_forwarding (symbol, valcontents, newval, buf)
case Lisp_Misc_Kboard_Objfwd:
{
- char *base = (char *) current_kboard;
+ char *base = (char *) FRAME_KBOARD (SELECTED_FRAME ());
char *p = base + XKBOARD_OBJFWD (valcontents)->offset;
*(Lisp_Object *) p = newval;
}
@@ -968,8 +999,7 @@ store_symval_forwarding (symbol, valcontents, newval, buf)
default:
def:
valcontents = SYMBOL_VALUE (symbol);
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
XBUFFER_LOCAL_VALUE (valcontents)->realvalue = newval;
else
SET_SYMBOL_VALUE (symbol, newval);
@@ -983,27 +1013,23 @@ void
swap_in_global_binding (symbol)
Lisp_Object symbol;
{
- Lisp_Object valcontents, cdr;
-
- valcontents = SYMBOL_VALUE (symbol);
- if (!BUFFER_LOCAL_VALUEP (valcontents)
- && !SOME_BUFFER_LOCAL_VALUEP (valcontents))
- abort ();
- cdr = XBUFFER_LOCAL_VALUE (valcontents)->cdr;
+ Lisp_Object valcontents = SYMBOL_VALUE (symbol);
+ struct Lisp_Buffer_Local_Value *blv = XBUFFER_LOCAL_VALUE (valcontents);
+ Lisp_Object cdr = blv->cdr;
/* Unload the previously loaded binding. */
Fsetcdr (XCAR (cdr),
- do_symval_forwarding (XBUFFER_LOCAL_VALUE (valcontents)->realvalue));
+ do_symval_forwarding (blv->realvalue));
/* Select the global binding in the symbol. */
XSETCAR (cdr, cdr);
- store_symval_forwarding (symbol, valcontents, XCDR (cdr), NULL);
+ store_symval_forwarding (symbol, blv->realvalue, XCDR (cdr), NULL);
/* Indicate that the global binding is set up now. */
- XBUFFER_LOCAL_VALUE (valcontents)->frame = Qnil;
- XBUFFER_LOCAL_VALUE (valcontents)->buffer = Qnil;
- XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame = 0;
- XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer = 0;
+ blv->frame = Qnil;
+ blv->buffer = Qnil;
+ blv->found_for_frame = 0;
+ blv->found_for_buffer = 0;
}
/* Set up the buffer-local symbol SYMBOL for validity in the current buffer.
@@ -1076,8 +1102,7 @@ find_symbol_value (symbol)
CHECK_SYMBOL (symbol);
valcontents = SYMBOL_VALUE (symbol);
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
valcontents = swap_in_symval_forwarding (symbol, valcontents);
if (MISCP (valcontents))
@@ -1100,7 +1125,7 @@ find_symbol_value (symbol)
case Lisp_Misc_Kboard_Objfwd:
return *(Lisp_Object *)(XKBOARD_OBJFWD (valcontents)->offset
- + (char *)current_kboard);
+ + (char *)FRAME_KBOARD (SELECTED_FRAME ()));
}
}
@@ -1195,8 +1220,7 @@ set_internal (symbol, newval, buf, bindflag)
&& !let_shadows_buffer_binding_p (symbol))
SET_PER_BUFFER_VALUE_P (buf, idx, 1);
}
- else if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ else if (BUFFER_LOCAL_VALUEP (valcontents))
{
/* valcontents is a struct Lisp_Buffer_Local_Value. */
if (XSYMBOL (symbol)->indirect_variable)
@@ -1215,9 +1239,8 @@ set_internal (symbol, newval, buf, bindflag)
|| buf != XBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer)
|| (XBUFFER_LOCAL_VALUE (valcontents)->check_frame
&& !EQ (selected_frame, XBUFFER_LOCAL_VALUE (valcontents)->frame))
- || (BUFFER_LOCAL_VALUEP (valcontents)
- && EQ (XCAR (current_alist_element),
- current_alist_element)))
+ || (EQ (XCAR (current_alist_element),
+ current_alist_element)))
{
/* The currently loaded binding is not necessarily valid.
We need to unload it, and choose a new binding. */
@@ -1241,7 +1264,7 @@ set_internal (symbol, newval, buf, bindflag)
indicating that we're seeing the default value.
Likewise if the variable has been let-bound
in the current buffer. */
- if (bindflag || SOME_BUFFER_LOCAL_VALUEP (valcontents)
+ if (bindflag || !XBUFFER_LOCAL_VALUE (valcontents)->local_if_set
|| let_shadows_buffer_binding_p (symbol))
{
XBUFFER_LOCAL_VALUE (valcontents)->found_for_buffer = 0;
@@ -1269,8 +1292,7 @@ set_internal (symbol, newval, buf, bindflag)
}
/* Record which binding is now loaded. */
- XSETCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr,
- tem1);
+ XSETCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr, tem1);
/* Set `buffer' and `frame' slots for the binding now loaded. */
XSETBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer, buf);
@@ -1289,8 +1311,7 @@ set_internal (symbol, newval, buf, bindflag)
/* If we just set a variable whose current binding is frame-local,
store the new value in the frame parameter too. */
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
{
/* What binding is loaded right now? */
current_alist_element
@@ -1332,8 +1353,7 @@ default_value (symbol)
}
/* Handle user-created local variables. */
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
{
/* If var is set up for a buffer that lacks a local value for it,
the current value is nominally the default value.
@@ -1417,8 +1437,7 @@ for this variable. */)
return value;
}
- if (!BUFFER_LOCAL_VALUEP (valcontents)
- && !SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (!BUFFER_LOCAL_VALUEP (valcontents))
return Fset (symbol, value);
/* Store new value into the DEFAULT-VALUE slot. */
@@ -1500,30 +1519,31 @@ The function `default-value' gets the default value and `set-default' sets it.
variable = indirect_variable (variable);
valcontents = SYMBOL_VALUE (variable);
- if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents))
+ if (XSYMBOL (variable)->constant || KBOARD_OBJFWDP (valcontents))
error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable)));
- if (BUFFER_LOCAL_VALUEP (valcontents) || BUFFER_OBJFWDP (valcontents))
+ if (BUFFER_OBJFWDP (valcontents))
return variable;
- if (SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ else if (BUFFER_LOCAL_VALUEP (valcontents))
+ newval = valcontents;
+ else
{
- XMISCTYPE (SYMBOL_VALUE (variable)) = Lisp_Misc_Buffer_Local_Value;
- return variable;
+ if (EQ (valcontents, Qunbound))
+ SET_SYMBOL_VALUE (variable, Qnil);
+ tem = Fcons (Qnil, Fsymbol_value (variable));
+ XSETCAR (tem, tem);
+ newval = allocate_misc ();
+ XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value;
+ XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable);
+ XBUFFER_LOCAL_VALUE (newval)->buffer = Fcurrent_buffer ();
+ XBUFFER_LOCAL_VALUE (newval)->frame = Qnil;
+ XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0;
+ XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0;
+ XBUFFER_LOCAL_VALUE (newval)->check_frame = 0;
+ XBUFFER_LOCAL_VALUE (newval)->cdr = tem;
+ SET_SYMBOL_VALUE (variable, newval);
}
- if (EQ (valcontents, Qunbound))
- SET_SYMBOL_VALUE (variable, Qnil);
- tem = Fcons (Qnil, Fsymbol_value (variable));
- XSETCAR (tem, tem);
- newval = allocate_misc ();
- XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value;
- XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable);
- XBUFFER_LOCAL_VALUE (newval)->buffer = Fcurrent_buffer ();
- XBUFFER_LOCAL_VALUE (newval)->frame = Qnil;
- XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0;
- XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0;
- XBUFFER_LOCAL_VALUE (newval)->check_frame = 0;
- XBUFFER_LOCAL_VALUE (newval)->cdr = tem;
- SET_SYMBOL_VALUE (variable, newval);
+ XBUFFER_LOCAL_VALUE (newval)->local_if_set = 1;
return variable;
}
@@ -1556,10 +1576,12 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */)
variable = indirect_variable (variable);
valcontents = SYMBOL_VALUE (variable);
- if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents))
+ if (XSYMBOL (variable)->constant || KBOARD_OBJFWDP (valcontents))
error ("Symbol %s may not be buffer-local", SDATA (SYMBOL_NAME (variable)));
- if (BUFFER_LOCAL_VALUEP (valcontents) || BUFFER_OBJFWDP (valcontents))
+ if ((BUFFER_LOCAL_VALUEP (valcontents)
+ && XBUFFER_LOCAL_VALUE (valcontents)->local_if_set)
+ || BUFFER_OBJFWDP (valcontents))
{
tem = Fboundp (variable);
@@ -1569,16 +1591,17 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */)
return variable;
}
/* Make sure symbol is set up to hold per-buffer values. */
- if (!SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (!BUFFER_LOCAL_VALUEP (valcontents))
{
Lisp_Object newval;
tem = Fcons (Qnil, do_symval_forwarding (valcontents));
XSETCAR (tem, tem);
newval = allocate_misc ();
- XMISCTYPE (newval) = Lisp_Misc_Some_Buffer_Local_Value;
+ XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value;
XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable);
XBUFFER_LOCAL_VALUE (newval)->buffer = Qnil;
XBUFFER_LOCAL_VALUE (newval)->frame = Qnil;
+ XBUFFER_LOCAL_VALUE (newval)->local_if_set = 0;
XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0;
XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0;
XBUFFER_LOCAL_VALUE (newval)->check_frame = 0;
@@ -1651,8 +1674,7 @@ From now on the default value will apply in this buffer. Return VARIABLE. */)
return variable;
}
- if (!BUFFER_LOCAL_VALUEP (valcontents)
- && !SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (!BUFFER_LOCAL_VALUEP (valcontents))
return variable;
/* Get rid of this buffer's alist element, if any. */
@@ -1709,12 +1731,11 @@ Buffer-local bindings take precedence over frame-local bindings. */)
variable = indirect_variable (variable);
valcontents = SYMBOL_VALUE (variable);
- if (EQ (variable, Qnil) || EQ (variable, Qt) || KBOARD_OBJFWDP (valcontents)
+ if (XSYMBOL (variable)->constant || KBOARD_OBJFWDP (valcontents)
|| BUFFER_OBJFWDP (valcontents))
error ("Symbol %s may not be frame-local", SDATA (SYMBOL_NAME (variable)));
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
{
XBUFFER_LOCAL_VALUE (valcontents)->check_frame = 1;
return variable;
@@ -1725,10 +1746,11 @@ Buffer-local bindings take precedence over frame-local bindings. */)
tem = Fcons (Qnil, Fsymbol_value (variable));
XSETCAR (tem, tem);
newval = allocate_misc ();
- XMISCTYPE (newval) = Lisp_Misc_Some_Buffer_Local_Value;
+ XMISCTYPE (newval) = Lisp_Misc_Buffer_Local_Value;
XBUFFER_LOCAL_VALUE (newval)->realvalue = SYMBOL_VALUE (variable);
XBUFFER_LOCAL_VALUE (newval)->buffer = Qnil;
XBUFFER_LOCAL_VALUE (newval)->frame = Qnil;
+ XBUFFER_LOCAL_VALUE (newval)->local_if_set = 0;
XBUFFER_LOCAL_VALUE (newval)->found_for_buffer = 0;
XBUFFER_LOCAL_VALUE (newval)->found_for_frame = 0;
XBUFFER_LOCAL_VALUE (newval)->check_frame = 1;
@@ -1759,8 +1781,7 @@ BUFFER defaults to the current buffer. */)
variable = indirect_variable (variable);
valcontents = SYMBOL_VALUE (variable);
- if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if (BUFFER_LOCAL_VALUEP (valcontents))
{
Lisp_Object tail, elt;
@@ -1808,15 +1829,14 @@ BUFFER defaults to the current buffer. */)
valcontents = SYMBOL_VALUE (variable);
- /* This means that make-variable-buffer-local was done. */
- if (BUFFER_LOCAL_VALUEP (valcontents))
- return Qt;
- /* All these slots become local if they are set. */
if (BUFFER_OBJFWDP (valcontents))
+ /* All these slots become local if they are set. */
return Qt;
- if (SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ else if (BUFFER_LOCAL_VALUEP (valcontents))
{
Lisp_Object tail, elt;
+ if (XBUFFER_LOCAL_VALUE (valcontents)->local_if_set)
+ return Qt;
for (tail = buf->local_var_alist; CONSP (tail); tail = XCDR (tail))
{
elt = XCAR (tail);
@@ -1847,20 +1867,64 @@ If the current binding is global (the default), the value is nil. */)
valcontents = XSYMBOL (variable)->value;
if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents)
|| BUFFER_OBJFWDP (valcontents))
{
/* For a local variable, record both the symbol and which
buffer's or frame's value we are saving. */
if (!NILP (Flocal_variable_p (variable, Qnil)))
return Fcurrent_buffer ();
- else if (!BUFFER_OBJFWDP (valcontents)
+ else if (BUFFER_LOCAL_VALUEP (valcontents)
&& XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame)
return XBUFFER_LOCAL_VALUE (valcontents)->frame;
}
return Qnil;
}
+
+/* This code is disabled now that we use the selected frame to return
+ keyboard-local-values. */
+#if 0
+extern struct terminal *get_terminal P_ ((Lisp_Object display, int));
+
+DEFUN ("terminal-local-value", Fterminal_local_value, Sterminal_local_value, 2, 2, 0,
+ doc: /* Return the terminal-local value of SYMBOL on TERMINAL.
+If SYMBOL is not a terminal-local variable, then return its normal
+value, like `symbol-value'.
+
+TERMINAL may be a terminal id, a frame, or nil (meaning the
+selected frame's terminal device). */)
+ (symbol, terminal)
+ Lisp_Object symbol;
+ Lisp_Object terminal;
+{
+ Lisp_Object result;
+ struct terminal *t = get_terminal (terminal, 1);
+ push_kboard (t->kboard);
+ result = Fsymbol_value (symbol);
+ pop_kboard ();
+ return result;
+}
+
+DEFUN ("set-terminal-local-value", Fset_terminal_local_value, Sset_terminal_local_value, 3, 3, 0,
+ doc: /* Set the terminal-local binding of SYMBOL on TERMINAL to VALUE.
+If VARIABLE is not a terminal-local variable, then set its normal
+binding, like `set'.
+
+TERMINAL may be a terminal id, a frame, or nil (meaning the
+selected frame's terminal device). */)
+ (symbol, terminal, value)
+ Lisp_Object symbol;
+ Lisp_Object terminal;
+ Lisp_Object value;
+{
+ Lisp_Object result;
+ struct terminal *t = get_terminal (terminal, 1);
+ push_kboard (d->kboard);
+ result = Fset (symbol, value);
+ pop_kboard ();
+ return result;
+}
+#endif
/* Find the function at the end of a chain of symbol function indirections. */
@@ -3320,6 +3384,10 @@ syms_of_data ()
defsubr (&Slocal_variable_p);
defsubr (&Slocal_variable_if_set_p);
defsubr (&Svariable_binding_locus);
+#if 0 /* XXX Remove this. --lorentey */
+ defsubr (&Sterminal_local_value);
+ defsubr (&Sset_terminal_local_value);
+#endif
defsubr (&Saref);
defsubr (&Saset);
defsubr (&Snumber_to_string);
diff --git a/src/dispextern.h b/src/dispextern.h
index f96a5ace4e9..8e792a50fb4 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -680,9 +680,9 @@ struct glyph_row
short used[LAST_AREA];
/* Window-relative x and y-position of the top-left corner of this
- row. If y < 0, this means that abs (y) pixels of the row are
+ row. If y < 0, this means that eabs (y) pixels of the row are
invisible because it is partially visible at the top of a window.
- If x < 0, this means that abs (x) pixels of the first glyph of
+ If x < 0, this means that eabs (x) pixels of the first glyph of
the text area of the row are invisible because the glyph is
partially visible. */
int x, y;
@@ -1029,13 +1029,8 @@ extern int fonts_changed_p;
extern struct glyph space_glyph;
-/* Frame being updated by update_window/update_frame. */
-
-extern struct frame *updating_frame;
-
/* Window being updated by update_window. This is non-null as long as
- update_window has not finished, and null otherwise. It's role is
- analogous to updating_frame. */
+ update_window has not finished, and null otherwise. */
extern struct window *updated_window;
@@ -1355,7 +1350,7 @@ struct glyph_string
DESCENT = FONT->descent
HEIGHT = FONT_HEIGHT (FONT)
F_DESCENT = (FRAME_FONT (F)->descent
- - F->output_data.x->baseline_offset)
+ - F->terminal->output_data.x->baseline_offset)
F_HEIGHT = FRAME_LINE_HEIGHT (F)
*/
@@ -2195,16 +2190,16 @@ struct it
/* Call produce_glyphs or produce_glyphs_hook, if set. Shortcut to
avoid the function call overhead. */
-#define PRODUCE_GLYPHS(IT) \
- do { \
- extern int inhibit_free_realized_faces; \
- if (rif != NULL) \
- rif->produce_glyphs ((IT)); \
- else \
- produce_glyphs ((IT)); \
- if ((IT)->glyph_row != NULL) \
- inhibit_free_realized_faces = 1; \
- } while (0)
+#define PRODUCE_GLYPHS(IT) \
+ do { \
+ extern int inhibit_free_realized_faces; \
+ if (FRAME_RIF ((IT)->f) != NULL) \
+ FRAME_RIF ((IT)->f)->produce_glyphs ((IT)); \
+ else \
+ produce_glyphs ((IT)); \
+ if ((IT)->glyph_row != NULL) \
+ inhibit_free_realized_faces = 1; \
+ } while (0)
/* Bit-flags indicating what operation move_it_to should perform. */
@@ -2378,10 +2373,6 @@ struct redisplay_interface
#endif /* HAVE_WINDOW_SYSTEM */
};
-/* The current interface for window-based redisplay. */
-
-extern struct redisplay_interface *rif;
-
/***********************************************************************
Images
@@ -2685,8 +2676,6 @@ void init_iterator_to_row_start P_ ((struct it *, struct window *,
struct glyph_row *));
int get_next_display_element P_ ((struct it *));
void set_iterator_to_next P_ ((struct it *, int));
-void produce_glyphs P_ ((struct it *));
-void produce_special_glyphs P_ ((struct it *, enum display_element_type));
void start_display P_ ((struct it *, struct window *, struct text_pos));
void move_it_to P_ ((struct it *, int, int, int, int, int));
void move_it_vertically P_ ((struct it *, int));
@@ -2784,11 +2773,11 @@ int update_window_fringes P_ ((struct window *, int));
void compute_fringe_widths P_ ((struct frame *, int));
#ifdef WINDOWS_NT
-void w32_init_fringe P_ ((void));
+void w32_init_fringe P_ ((struct redisplay_interface *));
void w32_reset_fringes P_ ((void));
#endif
#ifdef MAC_OS
-void mac_init_fringe P_ ((void));
+void mac_init_fringe P_ ((struct redisplay_interface *));
#endif
/* Defined in image.c */
@@ -2833,11 +2822,11 @@ int image_ascent P_ ((struct image *, struct face *, struct glyph_slice *));
/* Defined in sysdep.c */
-void get_frame_size P_ ((int *, int *));
+void get_tty_size P_ ((int, int *, int *));
void request_sigio P_ ((void));
void unrequest_sigio P_ ((void));
-int tabs_safe_p P_ ((void));
-void init_baud_rate P_ ((void));
+int tabs_safe_p P_ ((int));
+void init_baud_rate P_ ((int));
void init_sigio P_ ((int));
/* Defined in xfaces.c */
@@ -2979,8 +2968,6 @@ void clear_glyph_row P_ ((struct glyph_row *));
void prepare_desired_row P_ ((struct glyph_row *));
int line_hash_code P_ ((struct glyph_row *));
void set_window_update_flags P_ ((struct window *, int));
-void write_glyphs P_ ((struct glyph *, int));
-void insert_glyphs P_ ((struct glyph *, int));
void redraw_frame P_ ((struct frame *));
void redraw_garbaged_frames P_ ((void));
int scroll_cost P_ ((struct frame *, int, int, int));
@@ -2997,31 +2984,44 @@ void syms_of_display P_ ((void));
extern Lisp_Object Qredisplay_dont_pause;
GLYPH spec_glyph_lookup_face P_ ((struct window *, GLYPH));
-/* Defined in term.c */
+/* Defined in terminal.c */
-extern void ring_bell P_ ((void));
-extern void set_terminal_modes P_ ((void));
-extern void reset_terminal_modes P_ ((void));
+extern void ring_bell P_ ((struct frame *));
extern void update_begin P_ ((struct frame *));
extern void update_end P_ ((struct frame *));
-extern void set_terminal_window P_ ((int));
-extern void set_scroll_region P_ ((int, int));
-extern void turn_off_insert P_ ((void));
-extern void turn_off_highlight P_ ((void));
-extern void background_highlight P_ ((void));
-extern void clear_frame P_ ((void));
-extern void clear_end_of_line P_ ((int));
-extern void clear_end_of_line_raw P_ ((int));
-extern void delete_glyphs P_ ((int));
-extern void ins_del_lines P_ ((int, int));
+extern void set_terminal_window P_ ((struct frame *, int));
+extern void cursor_to P_ ((struct frame *, int, int));
+extern void raw_cursor_to P_ ((struct frame *, int, int));
+extern void clear_to_end P_ ((struct frame *));
+extern void clear_frame P_ ((struct frame *));
+extern void clear_end_of_line P_ ((struct frame *, int));
+extern void write_glyphs P_ ((struct frame *, struct glyph *, int));
+extern void insert_glyphs P_ ((struct frame *, struct glyph *, int));
+extern void delete_glyphs P_ ((struct frame *, int));
+extern void ins_del_lines P_ ((struct frame *, int, int));
+
+extern struct terminal *init_initial_terminal P_ ((void));
+
+
+/* Defined in term.c */
+
+extern void tty_set_terminal_modes P_ ((struct terminal *));
+extern void tty_reset_terminal_modes P_ ((struct terminal *));
+extern void tty_turn_off_insert P_ ((struct tty_display_info *));
+extern void tty_turn_off_highlight P_ ((struct tty_display_info *));
extern int string_cost P_ ((char *));
extern int per_line_cost P_ ((char *));
extern void calculate_costs P_ ((struct frame *));
+extern void produce_glyphs P_ ((struct it *));
+extern void produce_special_glyphs P_ ((struct it *, enum display_element_type));
+extern int tty_capable_p P_ ((struct tty_display_info *, unsigned, unsigned long, unsigned long));
extern void set_tty_color_mode P_ ((struct frame *, Lisp_Object));
-extern void tty_setup_colors P_ ((int));
-extern void term_init P_ ((char *));
-void cursor_to P_ ((int, int));
-extern int tty_capable_p P_ ((struct frame *, unsigned, unsigned long, unsigned long));
+extern struct terminal *get_tty_terminal P_ ((Lisp_Object, int));
+extern struct terminal *get_named_tty P_ ((char *));
+EXFUN (Ftty_type, 1);
+extern void create_tty_output P_ ((struct frame *));
+extern struct terminal *init_tty P_ ((char *, char *, int));
+
/* Defined in scroll.c */
diff --git a/src/dispnew.c b/src/dispnew.c
index 1502ffd753c..312ec38f445 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -32,7 +32,6 @@ Boston, MA 02110-1301, USA. */
#include "lisp.h"
#include "termchar.h"
#include "termopts.h"
-#include "termhooks.h"
/* cm.h must come after dispextern.h on Windows. */
#include "dispextern.h"
#include "cm.h"
@@ -40,6 +39,7 @@ Boston, MA 02110-1301, USA. */
#include "charset.h"
#include "keyboard.h"
#include "frame.h"
+#include "termhooks.h"
#include "window.h"
#include "commands.h"
#include "disptab.h"
@@ -238,9 +238,9 @@ int inverse_video;
EMACS_INT baud_rate;
/* Either nil or a symbol naming the window system under which Emacs
- is running. */
+ creates the first frame. */
-Lisp_Object Vwindow_system;
+Lisp_Object Vinitial_window_system;
/* Version number of X windows: 10, 11 or nil. */
@@ -282,14 +282,6 @@ Lisp_Object selected_frame;
struct frame *last_nonminibuf_frame;
-/* Stdio stream being used for copy of all output. */
-
-FILE *termscript;
-
-/* Structure for info on cursor positioning. */
-
-struct cm Wcm;
-
/* 1 means SIGWINCH happened when not safe. */
int delayed_size_change;
@@ -328,11 +320,6 @@ int glyph_pool_count;
static struct frame *frame_matrix_frame;
-/* Current interface for window-based redisplay. Set from init_xterm.
- A null value means we are not using window-based redisplay. */
-
-struct redisplay_interface *rif;
-
/* Non-zero means that fonts have been loaded since the last glyph
matrix adjustments. Redisplay must stop, and glyph matrices must
be adjusted when this flag becomes non-zero during display. The
@@ -1423,7 +1410,7 @@ line_hash_code (row)
{
int c = glyph->u.ch;
int face_id = glyph->face_id;
- if (must_write_spaces)
+ if (FRAME_MUST_WRITE_SPACES (SELECTED_FRAME ())) /* XXX Is SELECTED_FRAME OK here? */
c -= SPACEGLYPH;
hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + c;
hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + face_id;
@@ -1455,7 +1442,7 @@ line_draw_cost (matrix, vpos)
int glyph_table_len = GLYPH_TABLE_LENGTH;
/* Ignore trailing and leading spaces if we can. */
- if (!must_write_spaces)
+ if (!FRAME_MUST_WRITE_SPACES (SELECTED_FRAME ())) /* XXX Is SELECTED_FRAME OK here? */
{
/* Skip from the end over trailing spaces. */
while (end > beg && CHAR_GLYPH_SPACE_P (*(end - 1)))
@@ -1671,8 +1658,10 @@ realloc_glyph_pool (pool, matrix_dim)
#if GLYPH_DEBUG
-/* Flush standard output. This is sometimes useful to call from
- the debugger. */
+/* Flush standard output. This is sometimes useful to call from the debugger.
+ XXX Maybe this should be changed to flush the current terminal instead of
+ stdout.
+*/
void
flush_stdout ()
@@ -2004,7 +1993,7 @@ required_matrix_height (w)
if (FRAME_WINDOW_P (f))
{
int ch_height = FRAME_SMALLEST_FONT_HEIGHT (f);
- int window_pixel_height = window_box_height (w) + abs (w->vscroll);
+ int window_pixel_height = window_box_height (w) + eabs (w->vscroll);
return (((window_pixel_height + ch_height - 1)
/ ch_height) * w->nrows_scale_factor
/* One partially visible line at the top and
@@ -3393,12 +3382,15 @@ DEFUN ("redraw-frame", Fredraw_frame, Sredraw_frame, 1, 1, 0,
return Qnil;
update_begin (f);
+#ifdef MSDOS
if (FRAME_MSDOS_P (f))
- set_terminal_modes ();
- clear_frame ();
+ set_terminal_modes (FRAME_TERMINAL (f));
+#endif
+ clear_frame (f);
clear_current_matrices (f);
update_end (f);
- fflush (stdout);
+ if (FRAME_TERMCAP_P (f))
+ fflush (FRAME_TTY (f)->output);
windows_or_buffers_changed++;
/* Mark all windows as inaccurate, so that every window will have
its redisplay done. */
@@ -3539,7 +3531,7 @@ direct_output_for_insert (g)
/* If we can't insert glyphs, we can use this method only
at the end of a line. */
- if (!char_ins_del_ok)
+ if (!FRAME_CHAR_INS_DEL_OK (f))
if (PT != ZV && FETCH_BYTE (PT_BYTE) != '\n')
return 0;
@@ -3689,24 +3681,24 @@ direct_output_for_insert (g)
updated_row = glyph_row;
updated_area = TEXT_AREA;
update_begin (f);
- if (rif)
+ if (FRAME_RIF (f))
{
- rif->update_window_begin_hook (w);
+ FRAME_RIF (f)->update_window_begin_hook (w);
if (glyphs == end - n
/* In front of a space added by append_space. */
|| (glyphs == end - n - 1
&& (end - n)->charpos <= 0))
- rif->write_glyphs (glyphs, n);
+ FRAME_RIF (f)->write_glyphs (glyphs, n);
else
- rif->insert_glyphs (glyphs, n);
+ FRAME_RIF (f)->insert_glyphs (glyphs, n);
}
else
{
if (glyphs == end - n)
- write_glyphs (glyphs, n);
+ write_glyphs (f, glyphs, n);
else
- insert_glyphs (glyphs, n);
+ insert_glyphs (f, glyphs, n);
}
w->cursor.hpos += n;
@@ -3719,8 +3711,8 @@ direct_output_for_insert (g)
a frame matrix is used, cursor_to expects frame coordinates,
and the X and Y parameters are not used. */
if (window_redisplay_p)
- rif->cursor_to (w->cursor.vpos, w->cursor.hpos,
- w->cursor.y, w->cursor.x);
+ FRAME_RIF (f)->cursor_to (w->cursor.vpos, w->cursor.hpos,
+ w->cursor.y, w->cursor.x);
else
{
int x, y;
@@ -3729,18 +3721,19 @@ direct_output_for_insert (g)
? XFASTINT (w->left_margin_cols)
: 0));
y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
- cursor_to (y, x);
+ cursor_to (f, y, x);
}
#ifdef HAVE_WINDOW_SYSTEM
update_window_fringes (w, 0);
#endif
- if (rif)
- rif->update_window_end_hook (w, 1, 0);
+ if (FRAME_RIF (f))
+ FRAME_RIF (f)->update_window_end_hook (w, 1, 0);
update_end (f);
updated_row = NULL;
- fflush (stdout);
+ if (FRAME_TERMCAP_P (f))
+ fflush (FRAME_TTY (f)->output);
TRACE ((stderr, "direct output for insert\n"));
mark_window_display_accurate (it.window, 1);
@@ -3818,8 +3811,8 @@ direct_output_forward_char (n)
&& w->cursor.hpos < w->desired_matrix->matrix_w);
if (FRAME_WINDOW_P (f))
- rif->cursor_to (w->cursor.vpos, w->cursor.hpos,
- w->cursor.y, w->cursor.x);
+ FRAME_RIF (f)->cursor_to (w->cursor.vpos, w->cursor.hpos,
+ w->cursor.y, w->cursor.x);
else
{
int x, y;
@@ -3828,10 +3821,11 @@ direct_output_forward_char (n)
? XFASTINT (w->left_margin_cols)
: 0));
y = WINDOW_TO_FRAME_VPOS (w, w->cursor.vpos);
- cursor_to (y, x);
+ cursor_to (f, y, x);
}
- fflush (stdout);
+ if (FRAME_TERMCAP_P (f))
+ fflush (FRAME_TTY (f)->output);
redisplay_performed_directly_p = 1;
return 1;
}
@@ -3930,14 +3924,14 @@ update_frame (f, force_p, inhibit_hairy_id_p)
update_end (f);
/* This flush is a performance bottleneck under X,
- and it doesn't seem to be necessary anyway (in general).
+ and it doesn't seem to be necessary anyway (in general).
It is necessary when resizing the window with the mouse, or
- at least the fringes are not redrawn in a timely manner. ++kfs */
+ at least the fringes are not redrawn in a timely manner. ++kfs */
if (f->force_flush_display_p)
- {
- rif->flush_display (f);
- f->force_flush_display_p = 0;
- }
+ {
+ FRAME_RIF (f)->flush_display (f);
+ f->force_flush_display_p = 0;
+ }
}
else
{
@@ -3953,9 +3947,12 @@ update_frame (f, force_p, inhibit_hairy_id_p)
paused_p = update_frame_1 (f, force_p, inhibit_hairy_id_p);
update_end (f);
- if (termscript)
- fflush (termscript);
- fflush (stdout);
+ if (FRAME_TERMCAP_P (f))
+ {
+ if (FRAME_TTY (f)->termscript)
+ fflush (FRAME_TTY (f)->termscript);
+ fflush (FRAME_TTY (f)->output);
+ }
/* Check window matrices for lost pointers. */
#if GLYPH_DEBUG
@@ -4060,7 +4057,8 @@ redraw_overlapped_rows (w, yb)
int yb;
{
int i;
-
+ struct frame *f = XFRAME (WINDOW_FRAME (w));
+
/* If rows overlapping others have been changed, the rows being
overlapped have to be redrawn. This won't draw lines that have
already been drawn in update_window_line because overlapped_p in
@@ -4083,10 +4081,12 @@ redraw_overlapped_rows (w, yb)
{
updated_row = row;
updated_area = area;
- rif->cursor_to (i, 0, row->y, area == TEXT_AREA ? row->x : 0);
+ FRAME_RIF (f)->cursor_to (i, 0, row->y,
+ area == TEXT_AREA ? row->x : 0);
if (row->used[area])
- rif->write_glyphs (row->glyphs[area], row->used[area]);
- rif->clear_end_of_line (-1);
+ FRAME_RIF (f)->write_glyphs (row->glyphs[area],
+ row->used[area]);
+ FRAME_RIF (f)->clear_end_of_line (-1);
}
row->overlapped_p = 0;
@@ -4108,7 +4108,8 @@ redraw_overlapping_rows (w, yb)
{
int i, bottom_y;
struct glyph_row *row;
-
+ struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
+
for (i = 0; i < w->current_matrix->nrows; ++i)
{
row = w->current_matrix->rows + i;
@@ -4199,10 +4200,10 @@ update_window (w, force_p)
#endif
extern int input_pending;
extern Lisp_Object do_mouse_tracking;
+ struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
#if GLYPH_DEBUG
/* Check that W's frame doesn't have glyph matrices. */
xassert (FRAME_WINDOW_P (XFRAME (WINDOW_FRAME (w))));
- xassert (updating_frame != NULL);
#endif
/* Check pending input the first time so that we can quickly return. */
@@ -4387,6 +4388,7 @@ update_marginal_area (w, area, vpos)
int area, vpos;
{
struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos);
+ struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
/* Let functions in xterm.c know what area subsequent X positions
will be relative to. */
@@ -4412,6 +4414,7 @@ update_text_area (w, vpos)
{
struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos);
struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos);
+ struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
int changed_p = 0;
/* Let functions in xterm.c know what area subsequent X positions
@@ -4647,6 +4650,7 @@ update_window_line (w, vpos, mouse_face_overwritten_p)
{
struct glyph_row *current_row = MATRIX_ROW (w->current_matrix, vpos);
struct glyph_row *desired_row = MATRIX_ROW (w->desired_matrix, vpos);
+ struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
int changed_p = 0;
/* Set the row being updated. This is important to let xterm.c
@@ -4715,6 +4719,7 @@ set_window_cursor_after_update (w)
struct window *w;
{
struct frame *f = XFRAME (w->frame);
+ struct redisplay_interface *rif = FRAME_RIF (f);
int cx, cy, vpos, hpos;
/* Not intended for frame matrix updates. */
@@ -4938,6 +4943,7 @@ scrolling_window (w, header_line_p)
int i, j, first_old, first_new, last_old, last_new;
int nruns, nbytes, n, run_idx;
struct row_entry *entry;
+ struct redisplay_interface *rif = FRAME_RIF (XFRAME (WINDOW_FRAME (w)));
/* Skip over rows equal at the start. */
for (i = header_line_p ? 1 : 0; i < current_matrix->nrows - 1; ++i)
@@ -5262,7 +5268,7 @@ update_frame_1 (f, force_p, inhibit_id_p)
#endif
/* If we cannot insert/delete lines, it's no use trying it. */
- if (!line_ins_del_ok)
+ if (!FRAME_LINE_INS_DEL_OK (f))
inhibit_id_p = 1;
/* See if any of the desired lines are enabled; don't compute for
@@ -5290,18 +5296,18 @@ update_frame_1 (f, force_p, inhibit_id_p)
Also flush out if likely to have more than 1k buffered
otherwise. I'm told that some telnet connections get
really screwed by more than 1k output at once. */
- int outq = PENDING_OUTPUT_COUNT (stdout);
+ int outq = PENDING_OUTPUT_COUNT (FRAME_TTY (f)->output);
if (outq > 900
|| (outq > 20 && ((i - 1) % preempt_count == 0)))
{
- fflush (stdout);
+ fflush (FRAME_TTY (f)->output);
if (preempt_count == 1)
{
#ifdef EMACS_OUTQSIZE
if (EMACS_OUTQSIZE (0, &outq) < 0)
/* Probably not a tty. Ignore the error and reset
the outq count. */
- outq = PENDING_OUTPUT_COUNT (stdout);
+ outq = PENDING_OUTPUT_COUNT (FRAME_TTY (f->output));
#endif
outq *= 10;
if (baud_rate <= outq && baud_rate > 0)
@@ -5404,7 +5410,7 @@ update_frame_1 (f, force_p, inhibit_id_p)
}
}
- cursor_to (row, col);
+ cursor_to (f, row, col);
}
else
{
@@ -5426,7 +5432,7 @@ update_frame_1 (f, force_p, inhibit_id_p)
x += XFASTINT (w->left_margin_cols);
/* x = max (min (x, FRAME_TOTAL_COLS (f) - 1), 0); */
- cursor_to (y, x);
+ cursor_to (f, y, x);
}
}
}
@@ -5495,21 +5501,23 @@ scrolling (frame)
}
/* If changed lines are few, don't allow preemption, don't scroll. */
- if ((!scroll_region_ok && changed_lines < baud_rate / 2400)
+ if ((!FRAME_SCROLL_REGION_OK (frame)
+ && changed_lines < baud_rate / 2400)
|| unchanged_at_bottom == FRAME_LINES (frame))
return 1;
window_size = (FRAME_LINES (frame) - unchanged_at_top
- unchanged_at_bottom);
- if (scroll_region_ok)
+ if (FRAME_SCROLL_REGION_OK (frame))
free_at_end_vpos -= unchanged_at_bottom;
- else if (memory_below_frame)
+ else if (FRAME_MEMORY_BELOW_FRAME (frame))
free_at_end_vpos = -1;
/* If large window, fast terminal and few lines in common between
current frame and desired frame, don't bother with i/d calc. */
- if (!scroll_region_ok && window_size >= 18 && baud_rate > 2400
+ if (!FRAME_SCROLL_REGION_OK (frame)
+ && window_size >= 18 && baud_rate > 2400
&& (window_size >=
10 * scrolling_max_lines_saved (unchanged_at_top,
FRAME_LINES (frame) - unchanged_at_bottom,
@@ -5589,7 +5597,7 @@ update_frame_line (f, vpos)
struct glyph_row *current_row = MATRIX_ROW (current_matrix, vpos);
struct glyph_row *desired_row = MATRIX_ROW (desired_matrix, vpos);
int must_write_whole_line_p;
- int write_spaces_p = must_write_spaces;
+ int write_spaces_p = FRAME_MUST_WRITE_SPACES (f);
int colored_spaces_p = (FACE_FROM_ID (f, DEFAULT_FACE_ID)->background
!= FACE_TTY_DEFAULT_BG_COLOR);
@@ -5640,8 +5648,8 @@ update_frame_line (f, vpos)
/* Write the contents of the desired line. */
if (nlen)
{
- cursor_to (vpos, 0);
- write_glyphs (nbody, nlen);
+ cursor_to (f, vpos, 0);
+ write_glyphs (f, nbody, nlen);
}
/* Don't call clear_end_of_line if we already wrote the whole
@@ -5649,13 +5657,13 @@ update_frame_line (f, vpos)
case but in the line below. */
if (nlen < FRAME_TOTAL_COLS (f))
{
- cursor_to (vpos, nlen);
- clear_end_of_line (FRAME_TOTAL_COLS (f));
+ cursor_to (f, vpos, nlen);
+ clear_end_of_line (f, FRAME_TOTAL_COLS (f));
}
else
/* Make sure we are in the right row, otherwise cursor movement
with cmgoto might use `ch' in the wrong row. */
- cursor_to (vpos, 0);
+ cursor_to (f, vpos, 0);
make_current (desired_matrix, current_matrix, vpos);
return;
@@ -5668,7 +5676,7 @@ update_frame_line (f, vpos)
nlen--;
/* If there's no i/d char, quickly do the best we can without it. */
- if (!char_ins_del_ok)
+ if (!FRAME_CHAR_INS_DEL_OK (f))
{
int i, j;
@@ -5687,8 +5695,8 @@ update_frame_line (f, vpos)
++j;
/* Output this run of non-matching chars. */
- cursor_to (vpos, i);
- write_glyphs (nbody + i, j - i);
+ cursor_to (f, vpos, i);
+ write_glyphs (f, nbody + i, j - i);
i = j - 1;
/* Now find the next non-match. */
@@ -5698,8 +5706,8 @@ update_frame_line (f, vpos)
/* Clear the rest of the line, or the non-clear part of it. */
if (olen > nlen)
{
- cursor_to (vpos, nlen);
- clear_end_of_line (olen);
+ cursor_to (f, vpos, nlen);
+ clear_end_of_line (f, olen);
}
/* Make current row = desired row. */
@@ -5721,8 +5729,8 @@ update_frame_line (f, vpos)
if (nlen > nsp)
{
- cursor_to (vpos, nsp);
- write_glyphs (nbody + nsp, nlen - nsp);
+ cursor_to (f, vpos, nsp);
+ write_glyphs (f, nbody + nsp, nlen - nsp);
}
/* Exchange contents between current_frame and new_frame. */
@@ -5771,7 +5779,8 @@ update_frame_line (f, vpos)
tem = (nlen - nsp) - (olen - osp);
if (endmatch && tem
- && (!char_ins_del_ok || endmatch <= char_ins_del_cost (f)[tem]))
+ && (!FRAME_CHAR_INS_DEL_OK (f)
+ || endmatch <= char_ins_del_cost (f)[tem]))
endmatch = 0;
/* nsp - osp is the distance to insert or delete.
@@ -5780,7 +5789,7 @@ update_frame_line (f, vpos)
Is it worth it? */
if (nsp != osp
- && (!char_ins_del_ok
+ && (!FRAME_CHAR_INS_DEL_OK (f)
|| begmatch + endmatch <= char_ins_del_cost (f)[nsp - osp]))
{
begmatch = 0;
@@ -5793,8 +5802,8 @@ update_frame_line (f, vpos)
if (osp > nsp)
{
- cursor_to (vpos, nsp);
- delete_glyphs (osp - nsp);
+ cursor_to (f, vpos, nsp);
+ delete_glyphs (f, osp - nsp);
}
else if (nsp > osp)
{
@@ -5803,12 +5812,12 @@ update_frame_line (f, vpos)
must delete first to avoid losing data in the insert */
if (endmatch && nlen < olen + nsp - osp)
{
- cursor_to (vpos, nlen - endmatch + osp - nsp);
- delete_glyphs (olen + nsp - osp - nlen);
+ cursor_to (f, vpos, nlen - endmatch + osp - nsp);
+ delete_glyphs (f, olen + nsp - osp - nlen);
olen = nlen - (nsp - osp);
}
- cursor_to (vpos, osp);
- insert_glyphs (0, nsp - osp);
+ cursor_to (f, vpos, osp);
+ insert_glyphs (f, 0, nsp - osp);
}
olen += nsp - osp;
@@ -5829,8 +5838,8 @@ update_frame_line (f, vpos)
unnecessary cursor movement. */
if (nlen - tem > 0)
{
- cursor_to (vpos, nsp + begmatch);
- write_glyphs (nbody + nsp + begmatch, nlen - tem);
+ cursor_to (f, vpos, nsp + begmatch);
+ write_glyphs (f, nbody + nsp + begmatch, nlen - tem);
}
}
else if (nlen > olen)
@@ -5845,27 +5854,27 @@ update_frame_line (f, vpos)
int out = olen - tem; /* Columns to be overwritten originally. */
int del;
- cursor_to (vpos, nsp + begmatch);
+ cursor_to (f, vpos, nsp + begmatch);
/* Calculate columns we can actually overwrite. */
while (CHAR_GLYPH_PADDING_P (nbody[nsp + begmatch + out]))
out--;
- write_glyphs (nbody + nsp + begmatch, out);
+ write_glyphs (f, nbody + nsp + begmatch, out);
/* If we left columns to be overwritten, we must delete them. */
del = olen - tem - out;
if (del > 0)
- delete_glyphs (del);
+ delete_glyphs (f, del);
/* At last, we insert columns not yet written out. */
- insert_glyphs (nbody + nsp + begmatch + out, nlen - olen + del);
+ insert_glyphs (f, nbody + nsp + begmatch + out, nlen - olen + del);
olen = nlen;
}
else if (olen > nlen)
{
- cursor_to (vpos, nsp + begmatch);
- write_glyphs (nbody + nsp + begmatch, nlen - tem);
- delete_glyphs (olen - nlen);
+ cursor_to (f, vpos, nsp + begmatch);
+ write_glyphs (f, nbody + nsp + begmatch, nlen - tem);
+ delete_glyphs (f, olen - nlen);
olen = nlen;
}
}
@@ -5874,8 +5883,8 @@ update_frame_line (f, vpos)
/* If any unerased characters remain after the new line, erase them. */
if (olen > nlen)
{
- cursor_to (vpos, nlen);
- clear_end_of_line (olen);
+ cursor_to (f, vpos, nlen);
+ clear_end_of_line (f, olen);
}
/* Exchange contents between current_frame and new_frame. */
@@ -6172,31 +6181,34 @@ window_change_signal (signalnum) /* If we don't have an argument, */
#endif
int old_errno = errno;
+ struct tty_display_info *tty;
+
signal (SIGWINCH, window_change_signal);
SIGNAL_THREAD_CHECK (signalnum);
- get_frame_size (&width, &height);
+ /* The frame size change obviously applies to a single
+ termcap-controlled terminal, but we can't decide which.
+ Therefore, we resize the frames corresponding to each tty.
+ */
+ for (tty = tty_list; tty; tty = tty->next) {
- /* The frame size change obviously applies to a termcap-controlled
- frame. Find such a frame in the list, and assume it's the only
- one (since the redisplay code always writes to stdout, not a
- FILE * specified in the frame structure). Record the new size,
- but don't reallocate the data structures now. Let that be done
- later outside of the signal handler. */
+ if (! tty->term_initted)
+ continue;
- {
- Lisp_Object tail, frame;
-
- FOR_EACH_FRAME (tail, frame)
- {
- if (FRAME_TERMCAP_P (XFRAME (frame)))
- {
- change_frame_size (XFRAME (frame), height, width, 0, 1, 0);
- break;
- }
- }
+ get_tty_size (fileno (tty->input), &width, &height);
+
+ if (width > 5 && height > 2) {
+ Lisp_Object tail, frame;
+
+ FOR_EACH_FRAME (tail, frame)
+ if (FRAME_TERMCAP_P (XFRAME (frame)) && FRAME_TTY (XFRAME (frame)) == tty)
+ /* Record the new sizes, but don't reallocate the data
+ structures now. Let that be done later outside of the
+ signal handler. */
+ change_frame_size (XFRAME (frame), height, width, 0, 1, 0);
+ }
}
-
+
errno = old_errno;
}
#endif /* SIGWINCH */
@@ -6250,10 +6262,11 @@ change_frame_size (f, newheight, newwidth, pretend, delay, safe)
{
Lisp_Object tail, frame;
- if (! FRAME_WINDOW_P (f))
+ if (FRAME_MSDOS_P (f))
{
- /* When using termcap, or on MS-DOS, all frames use
- the same screen, so a change in size affects all frames. */
+ /* On MS-DOS, all frames use the same screen, so a change in
+ size affects all frames. Termcap now supports multiple
+ ttys. */
FOR_EACH_FRAME (tail, frame)
if (! FRAME_WINDOW_P (XFRAME (frame)))
change_frame_size_1 (XFRAME (frame), newheight, newwidth,
@@ -6333,7 +6346,7 @@ change_frame_size_1 (f, newheight, newwidth, pretend, delay, safe)
newheight - FRAME_TOP_MARGIN (f), 0);
if (FRAME_TERMCAP_P (f) && !pretend)
- FrameRows = newheight;
+ FrameRows (FRAME_TTY (f)) = newheight;
}
if (new_frame_total_cols != FRAME_TOTAL_COLS (f))
@@ -6343,7 +6356,7 @@ change_frame_size_1 (f, newheight, newwidth, pretend, delay, safe)
set_window_width (FRAME_MINIBUF_WINDOW (f), new_frame_total_cols, 0);
if (FRAME_TERMCAP_P (f) && !pretend)
- FrameCols = newwidth;
+ FrameCols (FRAME_TTY (f)) = newwidth;
if (WINDOWP (f->tool_bar_window))
XSETFASTINT (XWINDOW (f->tool_bar_window)->total_cols, newwidth);
@@ -6393,19 +6406,26 @@ FILE = nil means just close any termscript file currently open. */)
(file)
Lisp_Object file;
{
- if (termscript != 0)
- {
- BLOCK_INPUT;
- fclose (termscript);
- UNBLOCK_INPUT;
- }
- termscript = 0;
+ struct tty_display_info *tty;
+
+ if (! FRAME_TERMCAP_P (SELECTED_FRAME ()))
+ error ("Current frame is not on a tty device");
+
+ tty = CURTTY ();
+
+ if (tty->termscript != 0)
+ {
+ BLOCK_INPUT;
+ fclose (tty->termscript);
+ UNBLOCK_INPUT;
+ }
+ tty->termscript = 0;
if (! NILP (file))
{
file = Fexpand_file_name (file, Qnil);
- termscript = fopen (SDATA (file), "w");
- if (termscript == 0)
+ tty->termscript = fopen (SDATA (file), "w");
+ if (tty->termscript == 0)
report_file_error ("Opening termscript", Fcons (file, Qnil));
}
return Qnil;
@@ -6413,23 +6433,36 @@ FILE = nil means just close any termscript file currently open. */)
DEFUN ("send-string-to-terminal", Fsend_string_to_terminal,
- Ssend_string_to_terminal, 1, 1, 0,
+ Ssend_string_to_terminal, 1, 2, 0,
doc: /* Send STRING to the terminal without alteration.
-Control characters in STRING will have terminal-dependent effects. */)
- (string)
+Control characters in STRING will have terminal-dependent effects.
+
+Optional parameter TERMINAL specifies the tty terminal device to use.
+It may be a terminal id, a frame, or nil for the terminal used by the
+currently selected frame. */)
+ (string, terminal)
Lisp_Object string;
+ Lisp_Object terminal;
{
+ struct terminal *t = get_tty_terminal (terminal, 1);
+ struct tty_display_info *tty;
+
/* ??? Perhaps we should do something special for multibyte strings here. */
CHECK_STRING (string);
BLOCK_INPUT;
- fwrite (SDATA (string), 1, SBYTES (string), stdout);
- fflush (stdout);
- if (termscript)
+
+ if (!t)
+ error ("Unknown terminal device");
+
+ tty = t->display_info.tty;
+
+ if (tty->termscript)
{
- fwrite (SDATA (string), 1, SBYTES (string),
- termscript);
- fflush (termscript);
+ fwrite (SDATA (string), 1, SBYTES (string), tty->termscript);
+ fflush (tty->termscript);
}
+ fwrite (SDATA (string), 1, SBYTES (string), tty->output);
+ fflush (tty->output);
UNBLOCK_INPUT;
return Qnil;
}
@@ -6447,8 +6480,7 @@ terminate any keyboard macro currently executing. */)
if (noninteractive)
putchar (07);
else
- ring_bell ();
- fflush (stdout);
+ ring_bell (XFRAME (selected_frame));
}
else
bitch_at_user ();
@@ -6464,8 +6496,7 @@ bitch_at_user ()
else if (!INTERACTIVE) /* Stop executing a keyboard macro. */
error ("Keyboard macro terminated by a command ringing the bell");
else
- ring_bell ();
- fflush (stdout);
+ ring_bell (XFRAME (selected_frame));
}
@@ -6748,8 +6779,6 @@ pass nil for VARIABLE. */)
Initialization
***********************************************************************/
-char *terminal_type;
-
/* Initialization done when Emacs fork is started, before doing stty.
Determine terminal type and set terminal_driver. Then invoke its
decoding routine to set up variables in the terminal package. */
@@ -6757,6 +6786,8 @@ char *terminal_type;
void
init_display ()
{
+ char *terminal_type;
+
#ifdef HAVE_X_WINDOWS
extern int display_arg;
#endif
@@ -6766,14 +6797,23 @@ init_display ()
SET_CHAR_GLYPH_FROM_GLYPH (space_glyph, ' ');
space_glyph.charpos = -1;
- meta_key = 0;
inverse_video = 0;
cursor_in_echo_area = 0;
terminal_type = (char *) 0;
/* Now is the time to initialize this; it's used by init_sys_modes
during startup. */
- Vwindow_system = Qnil;
+ Vinitial_window_system = Qnil;
+
+ /* SIGWINCH needs to be handled no matter what display we start
+ with. Otherwise newly opened tty frames will not resize
+ automatically. */
+#ifdef SIGWINCH
+#ifndef CANNOT_DUMP
+ if (initialized)
+#endif /* CANNOT_DUMP */
+ signal (SIGWINCH, window_change_signal);
+#endif /* SIGWINCH */
/* If the user wants to use a window system, we shouldn't bother
initializing the terminal. This is especially important when the
@@ -6809,7 +6849,7 @@ init_display ()
#endif
)
{
- Vwindow_system = intern ("x");
+ Vinitial_window_system = intern ("x");
#ifdef HAVE_X11
Vwindow_system_version = make_number (11);
#else
@@ -6829,7 +6869,7 @@ init_display ()
#ifdef HAVE_NTGUI
if (!inhibit_window_system)
{
- Vwindow_system = intern ("w32");
+ Vinitial_window_system = intern ("w32");
Vwindow_system_version = make_number (1);
adjust_frame_glyphs_initially ();
return;
@@ -6839,7 +6879,7 @@ init_display ()
#ifdef MAC_OS
if (!inhibit_window_system)
{
- Vwindow_system = intern ("mac");
+ Vinitial_window_system = intern ("mac");
Vwindow_system_version = make_number (1);
adjust_frame_glyphs_initially ();
return;
@@ -6853,8 +6893,12 @@ init_display ()
exit (1);
}
+#ifdef WINDOWSNT
+ terminal_type = "w32console";
+#else
/* Look at the TERM variable. */
terminal_type = (char *) getenv ("TERM");
+#endif
if (!terminal_type)
{
#ifdef VMS
@@ -6891,8 +6935,37 @@ For types not defined in VMS, use define emacs_term \"TYPE\".\n\
}
#endif /* VMS */
- term_init (terminal_type);
-
+ {
+ struct terminal *t;
+ struct frame *f = XFRAME (selected_frame);
+
+ /* Open a display on the controlling tty. */
+ t = init_tty (0, terminal_type, 1); /* Errors are fatal. */
+
+ /* Convert the initial frame to use the new display. */
+ if (f->output_method != output_initial)
+ abort ();
+ f->output_method = t->type;
+ f->terminal = t;
+
+ t->reference_count++;
+ t->display_info.tty->top_frame = selected_frame;
+ change_frame_size (XFRAME (selected_frame),
+ FrameRows (t->display_info.tty),
+ FrameCols (t->display_info.tty), 0, 0, 1);
+
+ /* Delete the initial terminal. */
+ if (--initial_terminal->reference_count == 0
+ && initial_terminal->delete_terminal_hook)
+ (*initial_terminal->delete_terminal_hook) (initial_terminal);
+
+ /* Update frame parameters to reflect the new type. */
+ Fmodify_frame_parameters
+ (selected_frame, Fcons (Fcons (Qtty_type,
+ Ftty_type (selected_frame)), Qnil));
+ Fmodify_frame_parameters (selected_frame, Fcons (Fcons (Qtty, Qnil), Qnil));
+ }
+
{
struct frame *sf = SELECTED_FRAME ();
int width = FRAME_TOTAL_COLS (sf);
@@ -6909,13 +6982,6 @@ For types not defined in VMS, use define emacs_term \"TYPE\".\n\
adjust_frame_glyphs_initially ();
calculate_costs (XFRAME (selected_frame));
-#ifdef SIGWINCH
-#ifndef CANNOT_DUMP
- if (initialized)
-#endif /* CANNOT_DUMP */
- signal (SIGWINCH, window_change_signal);
-#endif /* SIGWINCH */
-
/* Set up faces of the initial terminal frame of a dumped Emacs. */
if (initialized
&& !noninteractive
@@ -6926,7 +6992,7 @@ For types not defined in VMS, use define emacs_term \"TYPE\".\n\
and internal_terminal_init. */
&& (strcmp (terminal_type, "internal") != 0 || inhibit_window_system)
#endif
- && NILP (Vwindow_system))
+ && NILP (Vinitial_window_system))
{
/* For the initial frame, we don't have any way of knowing what
are the foreground and background colors of the terminal. */
@@ -7038,14 +7104,19 @@ A non-nil value is useful if the terminal can automatically preserve
Emacs's frame display when you reenter Emacs.
It is up to you to set this variable if your terminal can do that. */);
- DEFVAR_LISP ("window-system", &Vwindow_system,
- doc: /* Name of window system that Emacs is displaying through.
+ DEFVAR_LISP ("initial-window-system", &Vinitial_window_system,
+ doc: /* Name of the window system that Emacs uses for the first frame.
The value is a symbol--for instance, `x' for X windows.
The value is nil if Emacs is using a text-only terminal. */);
+ DEFVAR_KBOARD ("window-system", Vwindow_system,
+ doc: /* Name of window system through which the selected frame is displayed.
+The value is a symbol--for instance, `x' for X windows.
+The value is nil if the selected frame is on a text-only-terminal. */);
+
DEFVAR_LISP ("window-system-version", &Vwindow_system_version,
doc: /* The version number of the window system in use.
-For X windows, this is 10 or 11. */);
+For X windows, this is 11. */);
DEFVAR_BOOL ("cursor-in-echo-area", &cursor_in_echo_area,
doc: /* Non-nil means put cursor in minibuffer, at end of any message there. */);
@@ -7082,7 +7153,7 @@ If nil, never pre-empt redisplay. */);
if (noninteractive)
#endif
{
- Vwindow_system = Qnil;
+ Vinitial_window_system = Qnil;
Vwindow_system_version = Qnil;
}
}
diff --git a/src/doc.c b/src/doc.c
index 65c0f21ce39..ec02449035a 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -446,6 +446,18 @@ string is passed through `substitute-command-keys'. */)
xsignal1 (Qinvalid_function, fun);
}
+ /* Check for an advised function. Its doc string
+ has an `ad-advice-info' text property. */
+ if (STRINGP (doc))
+ {
+ Lisp_Object innerfunc;
+ innerfunc = Fget_text_property (make_number (0),
+ intern ("ad-advice-info"),
+ doc);
+ if (! NILP (innerfunc))
+ doc = call1 (intern ("ad-make-advised-docstring"), innerfunc);
+ }
+
/* If DOC is 0, it's typically because of a dumped file missing
from the DOC file (bug in src/Makefile.in). */
if (EQ (doc, make_number (0)))
@@ -691,15 +703,17 @@ the same file name is found in the `doc-directory'. */)
if (fromfile[len-1] == 'c')
fromfile[len-1] = 'o';
- if (EQ (Fmember (build_string (fromfile), Vbuild_files), Qnil))
- skip_file = 1;
- else
- skip_file = 0;
+ skip_file = NILP (Fmember (build_string (fromfile),
+ Vbuild_files));
}
sym = oblookup (Vobarray, p + 2,
multibyte_chars_in_text (p + 2, end - p - 2),
end - p - 2);
+ /* Check skip_file so that when a function is defined several
+ times in different files (typically, once in xterm, once in
+ w32term, ...), we only pay attention to the one that
+ matters. */
if (! skip_file && SYMBOLP (sym))
{
/* Attach a docstring to a variable? */
@@ -883,7 +897,7 @@ a new string, without any text properties, is returned. */)
struct buffer *oldbuf;
int start_idx;
/* This is for computing the SHADOWS arg for describe_map_tree. */
- Lisp_Object active_maps = Fcurrent_active_maps (Qnil);
+ Lisp_Object active_maps = Fcurrent_active_maps (Qnil, Qnil);
Lisp_Object earlier_maps;
changed = 1;
diff --git a/src/editfns.c b/src/editfns.c
index bcfe5756034..008cc3a95bf 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -84,6 +84,11 @@ extern char **environ;
extern size_t emacs_strftimeu P_ ((char *, size_t, const char *,
const struct tm *, int));
+
+#ifdef WINDOWSNT
+extern Lisp_Object w32_get_internal_run_time ();
+#endif
+
static int tm_diff P_ ((struct tm *, struct tm *));
static void find_field P_ ((Lisp_Object, Lisp_Object, Lisp_Object, int *, Lisp_Object, int *));
static void update_buffer_properties P_ ((int, int));
@@ -1483,9 +1488,13 @@ on systems that do not provide resolution finer than a second. */)
return list3 (make_number ((secs >> 16) & 0xffff),
make_number ((secs >> 0) & 0xffff),
make_number (usecs));
-#else
+#else /* ! HAVE_GETRUSAGE */
+#if WINDOWSNT
+ return w32_get_internal_run_time ();
+#else /* ! WINDOWSNT */
return Fcurrent_time ();
-#endif
+#endif /* WINDOWSNT */
+#endif /* HAVE_GETRUSAGE */
}
@@ -1839,7 +1848,7 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE) */)
tzstring = (char *) SDATA (zone);
else if (INTEGERP (zone))
{
- int abszone = abs (XINT (zone));
+ int abszone = eabs (XINT (zone));
sprintf (tzbuf, "XXX%s%d:%02d:%02d", "-" + (XINT (zone) < 0),
abszone / (60*60), (abszone/60) % 60, abszone % 60);
tzstring = tzbuf;
@@ -1974,6 +1983,7 @@ the data it can't find. */)
int offset = tm_diff (t, &gmt);
char *s = 0;
char buf[6];
+
#ifdef HAVE_TM_ZONE
if (t->tm_zone)
s = (char *)t->tm_zone;
@@ -1984,19 +1994,6 @@ the data it can't find. */)
#endif
#endif /* not HAVE_TM_ZONE */
-#if defined HAVE_TM_ZONE || defined HAVE_TZNAME
- if (s)
- {
- /* On Japanese w32, we can get a Japanese string as time
- zone name. Don't accept that. */
- char *p;
- for (p = s; *p && (isalnum ((unsigned char)*p) || *p == ' '); ++p)
- ;
- if (p == s || *p)
- s = NULL;
- }
-#endif
-
if (!s)
{
/* No local time zone name is available; use "+-NNNN" instead. */
@@ -2004,6 +2001,7 @@ the data it can't find. */)
sprintf (buf, "%c%02d%02d", (offset < 0 ? '-' : '+'), am/60, am%60);
s = buf;
}
+
return Fcons (make_number (offset), Fcons (build_string (s), Qnil));
}
else
@@ -3042,7 +3040,7 @@ DEFUN ("delete-and-extract-region", Fdelete_and_extract_region,
{
validate_region (&start, &end);
if (XINT (start) == XINT (end))
- return build_string ("");
+ return empty_unibyte_string;
return del_range_1 (XINT (start), XINT (end), 1, 1);
}
@@ -3818,21 +3816,21 @@ usage: (format STRING &rest OBJECTS) */)
this_format[format - this_format_start + 1] = 0;
}
- if (INTEGERP (args[n]))
- {
- if (format[-1] == 'd')
- sprintf (p, this_format, XINT (args[n]));
- /* Don't sign-extend for octal or hex printing. */
- else
- sprintf (p, this_format, XUINT (args[n]));
- }
- else if (format[-1] == 'd')
- /* Maybe we should use "%1.0f" instead so it also works
- for values larger than MAXINT. */
- sprintf (p, this_format, (EMACS_INT) XFLOAT_DATA (args[n]));
- else
+ if (INTEGERP (args[n]))
+ {
+ if (format[-1] == 'd')
+ sprintf (p, this_format, XINT (args[n]));
/* Don't sign-extend for octal or hex printing. */
- sprintf (p, this_format, (EMACS_UINT) XFLOAT_DATA (args[n]));
+ else
+ sprintf (p, this_format, XUINT (args[n]));
+ }
+ else if (format[-1] == 'd')
+ /* Maybe we should use "%1.0f" instead so it also works
+ for values larger than MAXINT. */
+ sprintf (p, this_format, (EMACS_INT) XFLOAT_DATA (args[n]));
+ else
+ /* Don't sign-extend for octal or hex printing. */
+ sprintf (p, this_format, (EMACS_UINT) XFLOAT_DATA (args[n]));
}
if (p > buf
@@ -4128,9 +4126,9 @@ Transposing beyond buffer boundaries is an error. */)
(startr1, endr1, startr2, endr2, leave_markers)
Lisp_Object startr1, endr1, startr2, endr2, leave_markers;
{
- register int start1, end1, start2, end2;
- int start1_byte, start2_byte, len1_byte, len2_byte;
- int gap, len1, len_mid, len2;
+ register EMACS_INT start1, end1, start2, end2;
+ EMACS_INT start1_byte, start2_byte, len1_byte, len2_byte;
+ EMACS_INT gap, len1, len_mid, len2;
unsigned char *start1_addr, *start2_addr, *temp;
INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2, tmp_interval3;
diff --git a/src/emacs.c b/src/emacs.c
index 33cd8d57da5..8a51b8cb8e4 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -57,6 +57,7 @@ Boston, MA 02110-1301, USA. */
#include "blockinput.h"
#include "syssignal.h"
#include "process.h"
+#include "frame.h"
#include "termhooks.h"
#include "keyboard.h"
#include "keymap.h"
@@ -133,8 +134,8 @@ Lisp_Object Vinstallation_directory;
/* Hook run by `kill-emacs' before it does really anything. */
Lisp_Object Vkill_emacs_hook;
-/* An empty lisp string. To avoid having to build any other. */
-Lisp_Object empty_string;
+/* Empty lisp strings. To avoid having to build any others. */
+Lisp_Object empty_unibyte_string, empty_multibyte_string;
/* Search path separator. */
Lisp_Object Vpath_separator;
@@ -214,7 +215,7 @@ static unsigned long heap_bss_diff;
#ifdef HAVE_WINDOW_SYSTEM
-extern Lisp_Object Vwindow_system;
+extern Lisp_Object Vinitial_window_system;
#endif /* HAVE_WINDOW_SYSTEM */
extern Lisp_Object Vauto_save_list_file_name;
@@ -280,9 +281,8 @@ Initialization options:\n\
Action options:\n\
\n\
FILE visit FILE using find-file\n\
-+LINE FILE visit FILE using find-file, then go to line LINE\n\
-+LINE:COLUMN FILE visit FILE using find-file, then go to line LINE,\n\
- column COLUMN\n\
++LINE go to line LINE in next FILE\n\
++LINE:COLUMN go to line LINE, column COLUMN, in next FILE\n\
--directory, -L DIR add DIR to variable load-path\n\
--eval EXPR evaluate Emacs Lisp expression EXPR\n\
--execute EXPR evaluate Emacs Lisp expression EXPR\n\
@@ -856,17 +856,23 @@ main (argc, argv
So ignore --version otherwise. */
&& initialized)
{
- Lisp_Object tem;
+ Lisp_Object tem, tem2;
tem = Fsymbol_value (intern ("emacs-version"));
+ tem2 = Fsymbol_value (intern ("emacs-copyright"));
if (!STRINGP (tem))
{
fprintf (stderr, "Invalid value of `emacs-version'\n");
exit (1);
}
+ if (!STRINGP (tem2))
+ {
+ fprintf (stderr, "Invalid value of `emacs-copyright'\n");
+ exit (1);
+ }
else
{
printf ("GNU Emacs %s\n", SDATA (tem));
- printf ("Copyright (C) 2007 Free Software Foundation, Inc.\n");
+ printf ("%s\n", SDATA(tem2));
printf ("GNU Emacs comes with ABSOLUTELY NO WARRANTY.\n");
printf ("You may redistribute copies of Emacs\n");
printf ("under the terms of the GNU General Public License.\n");
@@ -1291,6 +1297,9 @@ main (argc, argv
faces, and the face implementation uses some symbols as
face names. */
syms_of_xfaces ();
+ /* XXX syms_of_keyboard uses some symbols in keymap.c. It would
+ be better to arrange things not to have this dependency. */
+ syms_of_keymap ();
/* Call syms_of_keyboard before init_window_once because
keyboard sets up symbols that include some face names that
the X support will want to use. This can happen when
@@ -1488,10 +1497,10 @@ main (argc, argv
/* egetenv is a pretty low-level facility, which may get called in
many circumstances; it seems flimsy to put off initializing it
until calling init_callproc. */
- set_process_environment ();
+ set_initial_environment ();
/* AIX crashes are reported in system versions 3.2.3 and 3.2.4
- if this is not done. Do it after set_process_environment so that we
- don't pollute Vprocess_environment. */
+ if this is not done. Do it after set_global_environment so that we
+ don't pollute Vglobal_environment. */
/* Setting LANG here will defeat the startup locale processing... */
#ifdef AIX3_2
putenv ("LANG=C");
@@ -1534,7 +1543,6 @@ main (argc, argv
syms_of_fns ();
syms_of_floatfns ();
- syms_of_abbrev ();
syms_of_buffer ();
syms_of_bytecode ();
syms_of_callint ();
@@ -1562,7 +1570,7 @@ main (argc, argv
#endif /* CLASH_DETECTION */
syms_of_indent ();
syms_of_insdel ();
- syms_of_keymap ();
+ /* syms_of_keymap (); */
syms_of_macros ();
syms_of_marker ();
syms_of_minibuf ();
@@ -1573,6 +1581,7 @@ main (argc, argv
syms_of_frame ();
#endif
syms_of_syntax ();
+ syms_of_terminal ();
syms_of_term ();
syms_of_undo ();
#ifdef HAVE_SOUND
@@ -1657,13 +1666,7 @@ main (argc, argv
#endif /* HAVE_NTGUI */
}
- if (!noninteractive)
- {
-#ifdef VMS
- init_vms_input ();/* init_display calls get_frame_size, that needs this. */
-#endif /* VMS */
- init_display (); /* Determine terminal type. init_sys_modes uses results. */
- }
+ init_process (); /* init_display uses add_keyboard_wait_descriptor. */
#ifndef MAC_OS8
/* Called before init_window_once for Mac OS Classic. */
init_keyboard (); /* This too must precede init_sys_modes. */
@@ -1671,7 +1674,13 @@ main (argc, argv
#ifdef VMS
init_vmsproc (); /* And this too. */
#endif /* VMS */
- init_sys_modes (); /* Init system terminal modes (RAW or CBREAK, etc.). */
+ if (!noninteractive)
+ {
+#ifdef VMS
+ init_vms_input ();/* init_display calls get_tty_size, that needs this. */
+#endif /* VMS */
+ init_display (); /* Determine terminal type. Calls init_sys_modes. */
+ }
init_fns ();
init_xdisp ();
#ifdef HAVE_WINDOW_SYSTEM
@@ -1684,7 +1693,6 @@ main (argc, argv
#ifdef VMS
init_vmsfns ();
#endif /* VMS */
- init_process ();
#ifdef HAVE_SOUND
init_sound ();
#endif
@@ -2098,15 +2106,14 @@ shut_down_emacs (sig, no_x, stuff)
if (EMACS_GET_TTY_PGRP (0, &tpgrp) != -1
&& tpgrp == pgrp)
{
- fflush (stdout);
- reset_sys_modes ();
+ reset_all_sys_modes ();
if (sig && sig != SIGTERM)
fprintf (stderr, "Fatal error (%d)", sig);
}
}
#else
fflush (stdout);
- reset_sys_modes ();
+ reset_all_sys_modes ();
#endif
stuff_buffered_input (stuff);
@@ -2128,9 +2135,9 @@ shut_down_emacs (sig, no_x, stuff)
#if 0 /* This triggers a bug in XCloseDisplay and is not needed. */
#ifdef HAVE_X_WINDOWS
/* It's not safe to call intern here. Maybe we are crashing. */
- if (!noninteractive && SYMBOLP (Vwindow_system)
- && SCHARS (SYMBOL_NAME (Vwindow_system)) == 1
- && SREF (SYMBOL_NAME (Vwindow_system), 0) == 'x'
+ if (!noninteractive && SYMBOLP (Vinitial_window_system)
+ && SCHARS (SYMBOL_NAME (Vinitial_window_system)) == 1
+ && SREF (SYMBOL_NAME (Vinitial_window_system), 0) == 'x'
&& ! no_x)
Fx_close_current_connection ();
#endif /* HAVE_X_WINDOWS */
@@ -2221,10 +2228,10 @@ You must run Emacs in batch mode in order to dump it. */)
{
fprintf (stderr, "**************************************************\n");
fprintf (stderr, "Warning: Your system has a gap between BSS and the\n");
- fprintf (stderr, "heap (%lu byte). This usually means that exec-shield\n",
+ fprintf (stderr, "heap (%lu bytes). This usually means that exec-shield\n",
heap_bss_diff);
fprintf (stderr, "or something similar is in effect. The dump may\n");
- fprintf (stderr, "fail because of this. See the section about \n");
+ fprintf (stderr, "fail because of this. See the section about\n");
fprintf (stderr, "exec-shield in etc/PROBLEMS for more information.\n");
fprintf (stderr, "**************************************************\n");
}
@@ -2476,9 +2483,6 @@ see `kill-emacs-query-functions' instead.
The hook is not run in batch mode, i.e., if `noninteractive' is non-nil. */);
Vkill_emacs_hook = Qnil;
- empty_string = build_string ("");
- staticpro (&empty_string);
-
DEFVAR_INT ("emacs-priority", &emacs_priority,
doc: /* Priority for Emacs to run at.
This value is effective only if set before Emacs is dumped,
diff --git a/src/eval.c b/src/eval.c
index ee73655d748..74ebb0c90b6 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -202,6 +202,8 @@ Lisp_Object Vmacro_declaration_function;
extern Lisp_Object Qrisky_local_variable;
+extern Lisp_Object Qfunction;
+
static Lisp_Object funcall_lambda P_ ((Lisp_Object, int, Lisp_Object*));
static void unwind_to_catch P_ ((struct catchtag *, Lisp_Object)) NO_RETURN;
@@ -539,7 +541,7 @@ usage: (setq [SYM VAL]...) */)
register Lisp_Object val, sym;
struct gcpro gcpro1;
- if (NILP(args))
+ if (NILP (args))
return Qnil;
args_left = args;
@@ -564,6 +566,8 @@ usage: (quote ARG) */)
(args)
Lisp_Object args;
{
+ if (!NILP (Fcdr (args)))
+ xsignal2 (Qwrong_number_of_arguments, Qquote, Flength (args));
return Fcar (args);
}
@@ -575,6 +579,8 @@ usage: (function ARG) */)
(args)
Lisp_Object args;
{
+ if (!NILP (Fcdr (args)))
+ xsignal2 (Qwrong_number_of_arguments, Qfunction, Flength (args));
return Fcar (args);
}
@@ -1037,10 +1043,10 @@ usage: (let VARLIST BODY...) */)
GCPRO2 (args, *temps);
gcpro2.nvars = 0;
- for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
+ for (argnum = 0; CONSP (varlist); varlist = XCDR (varlist))
{
QUIT;
- elt = Fcar (varlist);
+ elt = XCAR (varlist);
if (SYMBOLP (elt))
temps [argnum++] = Qnil;
else if (! NILP (Fcdr (Fcdr (elt))))
@@ -1052,9 +1058,9 @@ usage: (let VARLIST BODY...) */)
UNGCPRO;
varlist = Fcar (args);
- for (argnum = 0; !NILP (varlist); varlist = Fcdr (varlist))
+ for (argnum = 0; CONSP (varlist); varlist = XCDR (varlist))
{
- elt = Fcar (varlist);
+ elt = XCAR (varlist);
tem = temps[argnum++];
if (SYMBOLP (elt))
specbind (elt, tem);
@@ -1274,8 +1280,12 @@ unwind_to_catch (catch, value)
#if HAVE_X_WINDOWS
/* If x_catch_errors was done, turn it off now.
(First we give unbind_to a chance to do that.) */
+#if 0 /* This would disable x_catch_errors after x_connection_closed.
+ * The catch must remain in effect during that delicate
+ * state. --lorentey */
x_fully_uncatch_errors ();
#endif
+#endif
byte_stack_list = catch->byte_stack;
gcprolist = catch->gcpro;
@@ -1587,8 +1597,7 @@ internal_condition_case_2 (bfun, nargs, args, handlers, hfun)
static Lisp_Object find_handler_clause P_ ((Lisp_Object, Lisp_Object,
- Lisp_Object, Lisp_Object,
- Lisp_Object *));
+ Lisp_Object, Lisp_Object));
DEFUN ("signal", Fsignal, Ssignal, 2, 2, 0,
doc: /* Signal an error. Args are ERROR-SYMBOL and associated DATA.
@@ -1614,7 +1623,6 @@ See also the function `condition-case'. */)
Lisp_Object conditions;
extern int gc_in_progress;
extern int waiting_for_input;
- Lisp_Object debugger_value;
Lisp_Object string;
Lisp_Object real_error_symbol;
struct backtrace *bp;
@@ -1672,7 +1680,7 @@ See also the function `condition-case'. */)
register Lisp_Object clause;
clause = find_handler_clause (handlerlist->handler, conditions,
- error_symbol, data, &debugger_value);
+ error_symbol, data);
if (EQ (clause, Qlambda))
{
@@ -1703,7 +1711,7 @@ See also the function `condition-case'. */)
handlerlist = allhandlers;
/* If no handler is present now, try to run the debugger,
and if that fails, throw to top level. */
- find_handler_clause (Qerror, conditions, error_symbol, data, &debugger_value);
+ find_handler_clause (Qerror, conditions, error_symbol, data);
if (catchlist != 0)
Fthrow (Qtop_level, Qt);
@@ -1855,75 +1863,54 @@ skip_debugger (conditions, data)
= SIG is nil, and DATA is (SYMBOL . REST-OF-DATA).
This is for memory-full errors only.
- Store value returned from debugger into *DEBUGGER_VALUE_PTR.
-
We need to increase max_specpdl_size temporarily around
anything we do that can push on the specpdl, so as not to get
a second error here in case we're handling specpdl overflow. */
static Lisp_Object
-find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
+find_handler_clause (handlers, conditions, sig, data)
Lisp_Object handlers, conditions, sig, data;
- Lisp_Object *debugger_value_ptr;
{
register Lisp_Object h;
register Lisp_Object tem;
+ int debugger_called = 0;
+ int debugger_considered = 0;
- if (EQ (handlers, Qt)) /* t is used by handlers for all conditions, set up by C code. */
+ /* t is used by handlers for all conditions, set up by C code. */
+ if (EQ (handlers, Qt))
return Qt;
+
+ /* Don't run the debugger for a memory-full error.
+ (There is no room in memory to do that!) */
+ if (NILP (sig))
+ debugger_considered = 1;
+
/* error is used similarly, but means print an error message
and run the debugger if that is enabled. */
if (EQ (handlers, Qerror)
|| !NILP (Vdebug_on_signal)) /* This says call debugger even if
there is a handler. */
{
- int debugger_called = 0;
- Lisp_Object sig_symbol, combined_data;
- /* This is set to 1 if we are handling a memory-full error,
- because these must not run the debugger.
- (There is no room in memory to do that!) */
- int no_debugger = 0;
-
- if (NILP (sig))
- {
- combined_data = data;
- sig_symbol = Fcar (data);
- no_debugger = 1;
- }
- else
- {
- combined_data = Fcons (sig, data);
- sig_symbol = sig;
- }
-
- if (wants_debugger (Vstack_trace_on_error, conditions))
+ if (!NILP (sig) && wants_debugger (Vstack_trace_on_error, conditions))
{
max_specpdl_size++;
-#ifdef PROTOTYPES
+ #ifdef PROTOTYPES
internal_with_output_to_temp_buffer ("*Backtrace*",
(Lisp_Object (*) (Lisp_Object)) Fbacktrace,
Qnil);
-#else
+ #else
internal_with_output_to_temp_buffer ("*Backtrace*",
Fbacktrace, Qnil);
-#endif
+ #endif
max_specpdl_size--;
}
- if (! no_debugger
- /* Don't try to run the debugger with interrupts blocked.
- The editing loop would return anyway. */
- && ! INPUT_BLOCKED_P
- && (EQ (sig_symbol, Qquit)
- ? debug_on_quit
- : wants_debugger (Vdebug_on_error, conditions))
- && ! skip_debugger (conditions, combined_data)
- && when_entered_debugger < num_nonmacro_input_events)
+
+ if (!debugger_considered)
{
- *debugger_value_ptr
- = call_debugger (Fcons (Qerror,
- Fcons (combined_data, Qnil)));
- debugger_called = 1;
+ debugger_considered = 1;
+ debugger_called = maybe_call_debugger (conditions, sig, data);
}
+
/* If there is no handler, return saying whether we ran the debugger. */
if (EQ (handlers, Qerror))
{
@@ -1932,6 +1919,7 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
return Qt;
}
}
+
for (h = handlers; CONSP (h); h = Fcdr (h))
{
Lisp_Object handler, condit;
@@ -1950,18 +1938,55 @@ find_handler_clause (handlers, conditions, sig, data, debugger_value_ptr)
/* Handle a list of condition names in handler HANDLER. */
else if (CONSP (condit))
{
- while (CONSP (condit))
+ Lisp_Object tail;
+ for (tail = condit; CONSP (tail); tail = XCDR (tail))
{
- tem = Fmemq (Fcar (condit), conditions);
+ tem = Fmemq (Fcar (tail), conditions);
if (!NILP (tem))
- return handler;
- condit = XCDR (condit);
+ {
+ /* This handler is going to apply.
+ Does it allow the debugger to run first? */
+ if (! debugger_considered && !NILP (Fmemq (Qdebug, condit)))
+ maybe_call_debugger (conditions, sig, data);
+ return handler;
+ }
}
}
}
+
return Qnil;
}
+/* Call the debugger if calling it is currently enabled for CONDITIONS.
+ SIG and DATA describe the signal, as in find_handler_clause. */
+
+int
+maybe_call_debugger (conditions, sig, data)
+ Lisp_Object conditions, sig, data;
+{
+ Lisp_Object combined_data;
+
+ combined_data = Fcons (sig, data);
+
+ if (
+ /* Don't try to run the debugger with interrupts blocked.
+ The editing loop would return anyway. */
+ ! INPUT_BLOCKED_P
+ /* Does user wants to enter debugger for this kind of error? */
+ && (EQ (sig, Qquit)
+ ? debug_on_quit
+ : wants_debugger (Vdebug_on_error, conditions))
+ && ! skip_debugger (conditions, combined_data)
+ /* rms: what's this for? */
+ && when_entered_debugger < num_nonmacro_input_events)
+ {
+ call_debugger (Fcons (Qerror, Fcons (combined_data, Qnil)));
+ return 1;
+ }
+
+ return 0;
+}
+
/* dump an error message; called like printf */
/* VARARGS 1 */
@@ -2026,42 +2051,49 @@ then strings and vectors are not accepted. */)
{
register Lisp_Object fun;
register Lisp_Object funcar;
+ Lisp_Object if_prop = Qnil;
fun = function;
- fun = indirect_function (fun);
- if (EQ (fun, Qunbound))
+ fun = indirect_function (fun); /* Check cycles. */
+ if (NILP (fun) || EQ (fun, Qunbound))
return Qnil;
+ /* Check an `interactive-form' property if present, analogous to the
+ function-documentation property. */
+ fun = function;
+ while (SYMBOLP (fun))
+ {
+ Lisp_Object tmp = Fget (fun, intern ("interactive-form"));
+ if (!NILP (tmp))
+ if_prop = Qt;
+ fun = Fsymbol_function (fun);
+ }
+
/* Emacs primitives are interactive if their DEFUN specifies an
interactive spec. */
if (SUBRP (fun))
- {
- if (XSUBR (fun)->prompt)
- return Qt;
- else
- return Qnil;
- }
+ return XSUBR (fun)->intspec ? Qt : if_prop;
/* Bytecode objects are interactive if they are long enough to
have an element whose index is COMPILED_INTERACTIVE, which is
where the interactive spec is stored. */
else if (COMPILEDP (fun))
return ((ASIZE (fun) & PSEUDOVECTOR_SIZE_MASK) > COMPILED_INTERACTIVE
- ? Qt : Qnil);
+ ? Qt : if_prop);
/* Strings and vectors are keyboard macros. */
- if (NILP (for_call_interactively) && (STRINGP (fun) || VECTORP (fun)))
- return Qt;
+ if (STRINGP (fun) || VECTORP (fun))
+ return (NILP (for_call_interactively) ? Qt : Qnil);
/* Lists may represent commands. */
if (!CONSP (fun))
return Qnil;
funcar = XCAR (fun);
if (EQ (funcar, Qlambda))
- return Fassq (Qinteractive, Fcdr (XCDR (fun)));
+ return !NILP (Fassq (Qinteractive, Fcdr (XCDR (fun)))) ? Qt : if_prop;
if (EQ (funcar, Qautoload))
- return Fcar (Fcdr (Fcdr (XCDR (fun))));
+ return !NILP (Fcar (Fcdr (Fcdr (XCDR (fun))))) ? Qt : if_prop;
else
return Qnil;
}
@@ -2172,7 +2204,7 @@ do_autoload (fundef, funname)
The value saved here is to be restored into Vautoload_queue. */
record_unwind_protect (un_autoload, Vautoload_queue);
Vautoload_queue = Qt;
- Fload (Fcar (Fcdr (fundef)), Qnil, noninteractive ? Qt : Qnil, Qnil, Qt);
+ Fload (Fcar (Fcdr (fundef)), Qnil, Qt, Qnil, Qt);
/* Once loading finishes, don't undo it. */
Vautoload_queue = Qt;
@@ -3231,7 +3263,6 @@ void
specbind (symbol, value)
Lisp_Object symbol, value;
{
- Lisp_Object ovalue;
Lisp_Object valcontents;
CHECK_SYMBOL (symbol);
@@ -3251,16 +3282,13 @@ specbind (symbol, value)
}
else
{
- Lisp_Object valcontents;
-
- ovalue = find_symbol_value (symbol);
+ Lisp_Object ovalue = find_symbol_value (symbol);
specpdl_ptr->func = 0;
specpdl_ptr->old_value = ovalue;
valcontents = XSYMBOL (symbol)->value;
if (BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents)
|| BUFFER_OBJFWDP (valcontents))
{
Lisp_Object where, current_buffer;
@@ -3271,7 +3299,7 @@ specbind (symbol, value)
buffer's or frame's value we are saving. */
if (!NILP (Flocal_variable_p (symbol, Qnil)))
where = current_buffer;
- else if (!BUFFER_OBJFWDP (valcontents)
+ else if (BUFFER_LOCAL_VALUEP (valcontents)
&& XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame)
where = XBUFFER_LOCAL_VALUE (valcontents)->frame;
else
@@ -3299,10 +3327,14 @@ specbind (symbol, value)
specpdl_ptr->symbol = symbol;
specpdl_ptr++;
- if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
- store_symval_forwarding (symbol, ovalue, value, NULL);
- else
- set_internal (symbol, value, 0, 1);
+ /* We used to do
+ if (BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue))
+ store_symval_forwarding (symbol, ovalue, value, NULL);
+ else
+ but ovalue comes from find_symbol_value which should never return
+ such an internal value. */
+ eassert (!(BUFFER_OBJFWDP (ovalue) || KBOARD_OBJFWDP (ovalue)));
+ set_internal (symbol, value, 0, 1);
}
}
diff --git a/src/fileio.c b/src/fileio.c
index 0f13c6535a0..2d6f74a8840 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -78,6 +78,8 @@ extern int errno;
#include "coding.h"
#include "window.h"
#include "blockinput.h"
+#include "frame.h"
+#include "dispextern.h"
#ifdef WINDOWSNT
#define NOMINMAX 1
@@ -2463,8 +2465,8 @@ uid and gid of FILE to NEWNAME. */)
if (NILP (handler))
handler = Ffind_file_name_handler (newname, Qcopy_file);
if (!NILP (handler))
- RETURN_UNGCPRO (call5 (handler, Qcopy_file, file, newname,
- ok_if_already_exists, keep_time));
+ RETURN_UNGCPRO (call6 (handler, Qcopy_file, file, newname,
+ ok_if_already_exists, keep_time, preserve_uid_gid));
encoded_file = ENCODE_FILE (file);
encoded_newname = ENCODE_FILE (newname);
@@ -3433,7 +3435,9 @@ Return nil, if file does not exist or is not accessible. */)
return make_number (st.st_mode & 07777);
}
-DEFUN ("set-file-modes", Fset_file_modes, Sset_file_modes, 2, 2, 0,
+DEFUN ("set-file-modes", Fset_file_modes, Sset_file_modes, 2, 2,
+ "(let ((file (read-file-name \"File: \"))) \
+ (list file (read-file-modes nil file)))",
doc: /* Set mode bits of file named FILENAME to MODE (an integer).
Only the 12 low bits of MODE are used. */)
(filename, mode)
@@ -3690,27 +3694,25 @@ DEFUN ("insert-file-contents", Finsert_file_contents, Sinsert_file_contents,
1, 5, 0,
doc: /* Insert contents of file FILENAME after point.
Returns list of absolute file name and number of characters inserted.
-If second argument VISIT is non-nil, the buffer's visited filename
-and last save file modtime are set, and it is marked unmodified.
-If visiting and the file does not exist, visiting is completed
-before the error is signaled.
-The optional third and fourth arguments BEG and END
-specify what portion of the file to insert.
-These arguments count bytes in the file, not characters in the buffer.
-If VISIT is non-nil, BEG and END must be nil.
-
-If optional fifth argument REPLACE is non-nil,
-it means replace the current buffer contents (in the accessible portion)
-with the file contents. This is better than simply deleting and inserting
-the whole thing because (1) it preserves some marker positions
-and (2) it puts less data in the undo list.
-When REPLACE is non-nil, the value is the number of characters actually read,
-which is often less than the number of characters to be read.
-
-This does code conversion according to the value of
-`coding-system-for-read' or `file-coding-system-alist',
-and sets the variable `last-coding-system-used' to the coding system
-actually used. */)
+If second argument VISIT is non-nil, the buffer's visited filename and
+last save file modtime are set, and it is marked unmodified. If
+visiting and the file does not exist, visiting is completed before the
+error is signaled.
+
+The optional third and fourth arguments BEG and END specify what portion
+of the file to insert. These arguments count bytes in the file, not
+characters in the buffer. If VISIT is non-nil, BEG and END must be nil.
+
+If optional fifth argument REPLACE is non-nil, replace the current
+buffer contents (in the accessible portion) with the file contents.
+This is better than simply deleting and inserting the whole thing
+because (1) it preserves some marker positions and (2) it puts less data
+in the undo list. When REPLACE is non-nil, the second return value is
+the number of characters that replace previous buffer contents.
+
+This function does code conversion according to the value of
+`coding-system-for-read' or `file-coding-system-alist', and sets the
+variable `last-coding-system-used' to the coding system actually used. */)
(filename, visit, beg, end, replace)
Lisp_Object filename, visit, beg, end, replace;
{
@@ -3720,8 +3722,8 @@ actually used. */)
register int how_much;
register int unprocessed;
int count = SPECPDL_INDEX ();
- struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
- Lisp_Object handler, val, insval, orig_filename;
+ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
+ Lisp_Object handler, val, insval, orig_filename, old_undo;
Lisp_Object p;
int total = 0;
int not_regular = 0;
@@ -3744,8 +3746,9 @@ actually used. */)
val = Qnil;
p = Qnil;
orig_filename = Qnil;
+ old_undo = Qnil;
- GCPRO4 (filename, val, p, orig_filename);
+ GCPRO5 (filename, val, p, orig_filename, old_undo);
CHECK_STRING (filename);
filename = Fexpand_file_name (filename, Qnil);
@@ -4704,24 +4707,119 @@ actually used. */)
/* Decode file format */
if (inserted > 0)
{
- int empty_undo_list_p = 0;
+ /* Don't run point motion or modification hooks when decoding. */
+ int count = SPECPDL_INDEX ();
+ specbind (Qinhibit_point_motion_hooks, Qt);
+ specbind (Qinhibit_modification_hooks, Qt);
+
+ /* Save old undo list and don't record undo for decoding. */
+ old_undo = current_buffer->undo_list;
+ current_buffer->undo_list = Qt;
- /* If we're anyway going to discard undo information, don't
- record it in the first place. The buffer's undo list at this
- point is either nil or t when visiting a file. */
- if (!NILP (visit))
+ if (NILP (replace))
{
- empty_undo_list_p = NILP (current_buffer->undo_list);
- current_buffer->undo_list = Qt;
+ insval = call3 (Qformat_decode,
+ Qnil, make_number (inserted), visit);
+ CHECK_NUMBER (insval);
+ inserted = XFASTINT (insval);
+ }
+ else
+ {
+ /* If REPLACE is non-nil and we succeeded in not replacing the
+ beginning or end of the buffer text with the file's contents,
+ call format-decode with `point' positioned at the beginning of
+ the buffer and `inserted' equalling the number of characters
+ in the buffer. Otherwise, format-decode might fail to
+ correctly analyze the beginning or end of the buffer. Hence
+ we temporarily save `point' and `inserted' here and restore
+ `point' iff format-decode did not insert or delete any text.
+ Otherwise we leave `point' at point-min. */
+ int opoint = PT;
+ int opoint_byte = PT_BYTE;
+ int oinserted = ZV - BEGV;
+ int ochars_modiff = CHARS_MODIFF;
+
+ TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE);
+ insval = call3 (Qformat_decode,
+ Qnil, make_number (oinserted), visit);
+ CHECK_NUMBER (insval);
+ if (ochars_modiff == CHARS_MODIFF)
+ /* format_decode didn't modify buffer's characters => move
+ point back to position before inserted text and leave
+ value of inserted alone. */
+ SET_PT_BOTH (opoint, opoint_byte);
+ else
+ /* format_decode modified buffer's characters => consider
+ entire buffer changed and leave point at point-min. */
+ inserted = XFASTINT (insval);
}
- insval = call3 (Qformat_decode,
- Qnil, make_number (inserted), visit);
- CHECK_NUMBER (insval);
- inserted = XFASTINT (insval);
+ /* For consistency with format-decode call these now iff inserted > 0
+ (martin 2007-06-28) */
+ p = Vafter_insert_file_functions;
+ while (CONSP (p))
+ {
+ if (NILP (replace))
+ {
+ insval = call1 (XCAR (p), make_number (inserted));
+ if (!NILP (insval))
+ {
+ CHECK_NUMBER (insval);
+ inserted = XFASTINT (insval);
+ }
+ }
+ else
+ {
+ /* For the rationale of this see the comment on format-decode above. */
+ int opoint = PT;
+ int opoint_byte = PT_BYTE;
+ int oinserted = ZV - BEGV;
+ int ochars_modiff = CHARS_MODIFF;
+
+ TEMP_SET_PT_BOTH (BEGV, BEGV_BYTE);
+ insval = call1 (XCAR (p), make_number (oinserted));
+ if (!NILP (insval))
+ {
+ CHECK_NUMBER (insval);
+ if (ochars_modiff == CHARS_MODIFF)
+ /* after_insert_file_functions didn't modify
+ buffer's characters => move point back to
+ position before inserted text and leave value of
+ inserted alone. */
+ SET_PT_BOTH (opoint, opoint_byte);
+ else
+ /* after_insert_file_functions did modify buffer's
+ characters => consider entire buffer changed and
+ leave point at point-min. */
+ inserted = XFASTINT (insval);
+ }
+ }
+
+ QUIT;
+ p = XCDR (p);
+ }
+
+ if (NILP (visit))
+ {
+ Lisp_Object lbeg, lend;
+ XSETINT (lbeg, PT);
+ XSETINT (lend, PT + inserted);
+ if (CONSP (old_undo))
+ {
+ Lisp_Object tem = XCAR (old_undo);
+ if (CONSP (tem) && INTEGERP (XCAR (tem)) &&
+ INTEGERP (XCDR (tem)) && EQ (XCAR (tem), lbeg))
+ /* In the non-visiting case record only the final insertion. */
+ current_buffer->undo_list =
+ Fcons (Fcons (lbeg, lend), Fcdr (old_undo));
+ }
+ }
+ else
+ /* If undo_list was Qt before, keep it that way.
+ Otherwise start with an empty undo_list. */
+ current_buffer->undo_list = EQ (old_undo, Qt) ? Qt : Qnil;
- if (!NILP (visit))
- current_buffer->undo_list = empty_undo_list_p ? Qnil : Qt;
+ unbind_to (count, Qnil);
}
/* Call after-change hooks for the inserted text, aside from the case
@@ -4734,19 +4832,6 @@ actually used. */)
update_compositions (PT, PT, CHECK_BORDER);
}
- p = Vafter_insert_file_functions;
- while (CONSP (p))
- {
- insval = call1 (XCAR (p), make_number (inserted));
- if (!NILP (insval))
- {
- CHECK_NUMBER (insval);
- inserted = XFASTINT (insval);
- }
- QUIT;
- p = XCDR (p);
- }
-
if (!NILP (visit)
&& current_buffer->modtime == -1)
{
@@ -5746,7 +5831,7 @@ auto_save_error (error)
char *msgbuf;
USE_SAFE_ALLOCA;
- ring_bell ();
+ ring_bell (XFRAME (selected_frame));
args[0] = build_string ("Auto-saving %s: %s");
args[1] = current_buffer->name;
@@ -6309,7 +6394,7 @@ and `read-file-name-function'. */)
/* If dir starts with user's homedir, change that to ~. */
homedir = (char *) egetenv ("HOME");
#ifdef DOS_NT
- /* homedir can be NULL in temacs, since Vprocess_environment is not
+ /* homedir can be NULL in temacs, since Vglobal_environment is not
yet set up. We shouldn't crash in that case. */
if (homedir != 0)
{
@@ -6431,7 +6516,7 @@ and `read-file-name-function'. */)
if (! replace_in_history)
add_to_history = 1;
- val = empty_string;
+ val = empty_unibyte_string;
}
unbind_to (count, Qnil);
@@ -6684,8 +6769,9 @@ or local variable spec of the tailing lines with `coding:' tag. */);
DEFVAR_LISP ("after-insert-file-functions", &Vafter_insert_file_functions,
doc: /* A list of functions to be called at the end of `insert-file-contents'.
-Each is passed one argument, the number of characters inserted.
-It should return the new character count, and leave point the same.
+Each is passed one argument, the number of characters inserted,
+with point at the start of the inserted text. Each function
+should leave point the same, and return the new character count.
If `insert-file-contents' is intercepted by a handler from
`file-name-handler-alist', that handler is responsible for calling the
functions in `after-insert-file-functions' if appropriate. */);
diff --git a/src/floatfns.c b/src/floatfns.c
index 6ad9b95686e..a20f7981bf0 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -454,7 +454,7 @@ DEFUN ("expt", Fexpt, Sexpt, 2, 2, 0,
(arg1, arg2)
register Lisp_Object arg1, arg2;
{
- double f1, f2;
+ double f1, f2, f3;
CHECK_NUMBER_OR_FLOAT (arg1);
CHECK_NUMBER_OR_FLOAT (arg2);
@@ -500,8 +500,11 @@ DEFUN ("expt", Fexpt, Sexpt, 2, 2, 0,
else if ((f1 == 0.0 && f2 < 0.0) || (f1 < 0 && f2 != floor(f2)))
domain_error2 ("expt", arg1, arg2);
#endif
- IN_FLOAT2 (f1 = pow (f1, f2), "expt", arg1, arg2);
- return make_float (f1);
+ IN_FLOAT2 (f3 = pow (f1, f2), "expt", arg1, arg2);
+ /* Check for overflow in the result. */
+ if (f1 != 0.0 && f3 == 0.0)
+ range_error ("expt", arg1);
+ return make_float (f3);
}
DEFUN ("log", Flog, Slog, 1, 2, 0,
diff --git a/src/fns.c b/src/fns.c
index 49db42a58ac..618ccb5025f 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1451,7 +1451,7 @@ The value is actually the tail of LIST whose car is ELT. */)
Lisp_Object list;
{
register Lisp_Object tail;
- for (tail = list; !NILP (tail); tail = XCDR (tail))
+ for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
CHECK_LIST_CONS (tail, list);
@@ -1502,7 +1502,7 @@ The value is actually the tail of LIST whose car is ELT. */)
if (!FLOATP (elt))
return Fmemq (elt, list);
- for (tail = list; !NILP (tail); tail = XCDR (tail))
+ for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object tem;
CHECK_LIST_CONS (tail, list);
@@ -1806,7 +1806,7 @@ to be sure of changing the value of `foo'. */)
{
Lisp_Object tail, prev;
- for (tail = seq, prev = Qnil; !NILP (tail); tail = XCDR (tail))
+ for (tail = seq, prev = Qnil; CONSP (tail); tail = XCDR (tail))
{
CHECK_LIST_CONS (tail, seq);
@@ -2440,7 +2440,8 @@ Return PARENT. PARENT must be either nil or another char-table. */)
{
CHECK_CHAR_TABLE (parent);
- for (temp = parent; !NILP (temp); temp = XCHAR_TABLE (temp)->parent)
+ for (temp = parent; CHAR_TABLE_P (temp);
+ temp = XCHAR_TABLE (temp)->parent)
if (EQ (temp, char_table))
error ("Attempt to make a chartable be its own parent");
}
@@ -2825,8 +2826,8 @@ DEFUN ("optimize-char-table", Foptimize_char_table, Soptimize_char_table,
void
map_char_table (c_function, function, table, subtable, arg, depth, indices)
void (*c_function) P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
- Lisp_Object function, table, subtable, arg, *indices;
- int depth;
+ Lisp_Object function, table, subtable, arg;
+ int depth, *indices;
{
int i, to;
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
@@ -2860,7 +2861,7 @@ map_char_table (c_function, function, table, subtable, arg, depth, indices)
}
else
{
- int charset = XFASTINT (indices[0]) - 128;
+ int charset = indices[0] - 128;
i = 32;
to = SUB_CHAR_TABLE_ORDINARY_SLOTS;
@@ -2874,8 +2875,8 @@ map_char_table (c_function, function, table, subtable, arg, depth, indices)
int charset;
elt = XCHAR_TABLE (subtable)->contents[i];
- XSETFASTINT (indices[depth], i);
- charset = XFASTINT (indices[0]) - 128;
+ indices[depth] = i;
+ charset = indices[0] - 128;
if (depth == 0
&& (!CHARSET_DEFINED_P (charset)
|| charset == CHARSET_8_BIT_CONTROL
@@ -2892,8 +2893,8 @@ map_char_table (c_function, function, table, subtable, arg, depth, indices)
{
int c1, c2, c;
- c1 = depth >= 1 ? XFASTINT (indices[1]) : 0;
- c2 = depth >= 2 ? XFASTINT (indices[2]) : 0;
+ c1 = depth >= 1 ? indices[1] : 0;
+ c2 = depth >= 2 ? indices[2] : 0;
c = MAKE_CHAR (charset, c1, c2);
if (NILP (elt))
@@ -2927,14 +2928,14 @@ The key is always a possible IDX argument to `aref'. */)
Lisp_Object function, char_table;
{
/* The depth of char table is at most 3. */
- Lisp_Object indices[3];
+ int indices[3];
CHECK_CHAR_TABLE (char_table);
/* When Lisp_Object is represented as a union, `call2' cannot directly
be passed to map_char_table because it returns a Lisp_Object rather
than returning nothing.
- Casting leads to crashes on some architectures. -stef */
+ Casting leads to crashes on some architectures. --Stef */
map_char_table (void_call2, Qnil, char_table, char_table, function, 0, indices);
return Qnil;
}
@@ -3134,7 +3135,7 @@ SEQUENCE may be a list, a vector, a bool-vector, or a string. */)
len = Flength (sequence);
leni = XINT (len);
nargs = leni + leni - 1;
- if (nargs < 0) return build_string ("");
+ if (nargs < 0) return empty_unibyte_string;
SAFE_ALLOCA_LISP (args, nargs);
@@ -3236,7 +3237,8 @@ is nil and `use-dialog-box' is non-nil. */)
{
#ifdef HAVE_MENUS
- if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
+ if (FRAME_WINDOW_P (SELECTED_FRAME ())
+ && (NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
&& use_dialog_box
&& have_menus_p ())
{
@@ -3275,6 +3277,7 @@ is nil and `use-dialog-box' is non-nil. */)
Fraise_frame (mini_frame);
}
+ temporarily_switch_to_single_kboard (SELECTED_FRAME ());
obj = read_filtered_event (1, 0, 0, 0, Qnil);
cursor_in_echo_area = 0;
/* If we need to quit, quit with cursor_in_echo_area = 0. */
@@ -3367,7 +3370,8 @@ is nil, and `use-dialog-box' is non-nil. */)
CHECK_STRING (prompt);
#ifdef HAVE_MENUS
- if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
+ if (FRAME_WINDOW_P (SELECTED_FRAME ())
+ && (NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
&& use_dialog_box
&& have_menus_p ())
{
@@ -4268,7 +4272,7 @@ base64_decode_1 (from, to, length, multibyte, nchars_return)
/* The list of all weak hash tables. Don't staticpro this one. */
-Lisp_Object Vweak_hash_tables;
+struct Lisp_Hash_Table *weak_hash_tables;
/* Various symbols. */
@@ -4595,7 +4599,7 @@ make_hash_table (test, size, rehash_size, rehash_threshold, weak,
h->weak = weak;
h->rehash_threshold = rehash_threshold;
h->rehash_size = rehash_size;
- h->count = make_number (0);
+ h->count = 0;
h->key_and_value = Fmake_vector (make_number (2 * sz), Qnil);
h->hash = Fmake_vector (size, Qnil);
h->next = Fmake_vector (size, Qnil);
@@ -4614,11 +4618,11 @@ make_hash_table (test, size, rehash_size, rehash_threshold, weak,
/* Maybe add this hash table to the list of all weak hash tables. */
if (NILP (h->weak))
- h->next_weak = Qnil;
+ h->next_weak = NULL;
else
{
- h->next_weak = Vweak_hash_tables;
- Vweak_hash_tables = table;
+ h->next_weak = weak_hash_tables;
+ weak_hash_tables = h;
}
return table;
@@ -4649,8 +4653,8 @@ copy_hash_table (h1)
/* Maybe add this hash table to the list of all weak hash tables. */
if (!NILP (h2->weak))
{
- h2->next_weak = Vweak_hash_tables;
- Vweak_hash_tables = table;
+ h2->next_weak = weak_hash_tables;
+ weak_hash_tables = h2;
}
return table;
@@ -4775,7 +4779,7 @@ hash_put (h, key, value, hash)
/* Increment count after resizing because resizing may fail. */
maybe_resize_hash_table (h);
- h->count = make_number (XFASTINT (h->count) + 1);
+ h->count++;
/* Store key/value in the key_and_value vector. */
i = XFASTINT (h->next_free);
@@ -4831,8 +4835,8 @@ hash_remove (h, key)
HASH_KEY (h, i) = HASH_VALUE (h, i) = HASH_HASH (h, i) = Qnil;
HASH_NEXT (h, i) = h->next_free;
h->next_free = make_number (i);
- h->count = make_number (XFASTINT (h->count) - 1);
- xassert (XINT (h->count) >= 0);
+ h->count--;
+ xassert (h->count >= 0);
break;
}
else
@@ -4850,7 +4854,7 @@ void
hash_clear (h)
struct Lisp_Hash_Table *h;
{
- if (XFASTINT (h->count) > 0)
+ if (h->count > 0)
{
int i, size = HASH_TABLE_SIZE (h);
@@ -4866,7 +4870,7 @@ hash_clear (h)
AREF (h->index, i) = Qnil;
h->next_free = make_number (0);
- h->count = make_number (0);
+ h->count = 0;
}
}
@@ -4936,7 +4940,7 @@ sweep_weak_table (h, remove_entries_p)
HASH_KEY (h, i) = HASH_VALUE (h, i) = Qnil;
HASH_HASH (h, i) = Qnil;
- h->count = make_number (XFASTINT (h->count) - 1);
+ h->count--;
}
else
{
@@ -4969,13 +4973,12 @@ sweep_weak_table (h, remove_entries_p)
/* Remove elements from weak hash tables that don't survive the
current garbage collection. Remove weak tables that don't survive
- from Vweak_hash_tables. Called from gc_sweep. */
+ from weak_hash_tables. Called from gc_sweep. */
void
sweep_weak_hash_tables ()
{
- Lisp_Object table, used, next;
- struct Lisp_Hash_Table *h;
+ struct Lisp_Hash_Table *h, *used, *next;
int marked;
/* Mark all keys and values that are in use. Keep on marking until
@@ -4987,9 +4990,8 @@ sweep_weak_hash_tables ()
do
{
marked = 0;
- for (table = Vweak_hash_tables; !GC_NILP (table); table = h->next_weak)
+ for (h = weak_hash_tables; h; h = h->next_weak)
{
- h = XHASH_TABLE (table);
if (h->size & ARRAY_MARK_FLAG)
marked |= sweep_weak_table (h, 0);
}
@@ -4997,24 +4999,23 @@ sweep_weak_hash_tables ()
while (marked);
/* Remove tables and entries that aren't used. */
- for (table = Vweak_hash_tables, used = Qnil; !GC_NILP (table); table = next)
+ for (h = weak_hash_tables, used = NULL; h; h = next)
{
- h = XHASH_TABLE (table);
next = h->next_weak;
if (h->size & ARRAY_MARK_FLAG)
{
/* TABLE is marked as used. Sweep its contents. */
- if (XFASTINT (h->count) > 0)
+ if (h->count > 0)
sweep_weak_table (h, 1);
/* Add table to the list of used weak hash tables. */
h->next_weak = used;
- used = table;
+ used = h;
}
}
- Vweak_hash_tables = used;
+ weak_hash_tables = used;
}
@@ -5340,7 +5341,7 @@ DEFUN ("hash-table-count", Fhash_table_count, Shash_table_count, 1, 1, 0,
(table)
Lisp_Object table;
{
- return check_hash_table (table)->count;
+ return make_number (check_hash_table (table)->count);
}
@@ -5558,7 +5559,7 @@ guesswork fails. Normally, an error is signaled in such case. */)
if (STRING_MULTIBYTE (object))
/* use default, we can't guess correct value */
- coding_system = SYMBOL_VALUE (XCAR (Vcoding_category_list));
+ coding_system = find_symbol_value (XCAR (Vcoding_category_list));
else
coding_system = Qraw_text;
}
@@ -5915,7 +5916,7 @@ used if both `use-dialog-box' and this variable are non-nil. */);
void
init_fns ()
{
- Vweak_hash_tables = Qnil;
+ weak_hash_tables = NULL;
}
/* arch-tag: 787f8219-5b74-46bd-8469-7e1cc475fa31
diff --git a/src/fontset.c b/src/fontset.c
index b670e228047..2c0f0ac161c 100644
--- a/src/fontset.c
+++ b/src/fontset.c
@@ -49,6 +49,7 @@ Boston, MA 02110-1301, USA. */
#ifdef MAC_OS
#include "macterm.h"
#endif
+#include "termhooks.h"
#ifdef FONTSET_DEBUG
#undef xassert
@@ -390,15 +391,7 @@ make_fontset (frame, name, base)
while (!NILP (AREF (Vfontset_table, id))) id++;
if (id + 1 == size)
- {
- Lisp_Object tem;
- int i;
-
- tem = Fmake_vector (make_number (size + 8), Qnil);
- for (i = 0; i < size; i++)
- AREF (tem, i) = AREF (Vfontset_table, i);
- Vfontset_table = tem;
- }
+ Vfontset_table = larger_vector (Vfontset_table, size + 8, Qnil);
fontset = Fmake_char_table (Qfontset, Qnil);
@@ -1347,7 +1340,7 @@ DEFUN ("internal-char-font", Finternal_char_font, Sinternal_char_font, 1, 2, 0,
STORE_XCHAR2B (&char2b, c1, c2);
else
STORE_XCHAR2B (&char2b, 0, c1);
- rif->encode_char (c, &char2b, fontp, NULL);
+ FRAME_RIF (f)->encode_char (c, &char2b, fontp, NULL);
code = (XCHAR2B_BYTE1 (&char2b) << 8) | XCHAR2B_BYTE2 (&char2b);
}
return Fcons (build_string (face->font_name), make_number (code));
@@ -1437,7 +1430,7 @@ If FRAME is omitted, it defaults to the currently selected frame. */)
{
Lisp_Object fontset;
FRAME_PTR f;
- Lisp_Object indices[3];
+ int indices[3];
Lisp_Object val, tail, elt;
Lisp_Object *realized;
struct font_info *fontp = NULL;
diff --git a/src/frame.c b/src/frame.c
index 7ba3e9928ab..b06b541d60c 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -42,6 +42,7 @@ Boston, MA 02110-1301, USA. */
#include "fontset.h"
#endif
#include "blockinput.h"
+#include "termchar.h"
#include "termhooks.h"
#include "dispextern.h"
#include "window.h"
@@ -74,6 +75,8 @@ Lisp_Object Qbackground_mode;
Lisp_Object Qx_frame_parameter;
Lisp_Object Qx_resource_name;
+Lisp_Object Qterminal;
+Lisp_Object Qterminal_live_p;
/* Frame parameters (set or reported). */
@@ -104,15 +107,15 @@ Lisp_Object Qexplicit_name;
Lisp_Object Qunsplittable;
Lisp_Object Qmenu_bar_lines, Qtool_bar_lines;
Lisp_Object Qleft_fringe, Qright_fringe;
-Lisp_Object Qbuffer_predicate, Qbuffer_list;
+Lisp_Object Qbuffer_predicate, Qbuffer_list, Qburied_buffer_list;
Lisp_Object Qtty_color_mode;
+Lisp_Object Qtty, Qtty_type;
Lisp_Object Qfullscreen, Qfullwidth, Qfullheight, Qfullboth;
Lisp_Object Qinhibit_face_set_after_frame_default;
Lisp_Object Qface_set_after_frame_default;
-
Lisp_Object Vterminal_frame;
Lisp_Object Vdefault_frame_alist;
Lisp_Object Vdefault_frame_scroll_bars;
@@ -124,8 +127,8 @@ int focus_follows_mouse;
static void
set_menu_bar_lines_1 (window, n)
- Lisp_Object window;
- int n;
+ Lisp_Object window;
+ int n;
{
struct window *w = XWINDOW (window);
@@ -183,8 +186,6 @@ set_menu_bar_lines (f, value, oldval)
Lisp_Object Vemacs_iconified;
Lisp_Object Vframe_list;
-struct x_output tty_display;
-
extern Lisp_Object Vminibuffer_list;
extern Lisp_Object get_minibuffer ();
extern Lisp_Object Fhandle_switch_frame ();
@@ -206,6 +207,7 @@ See also `frame-live-p'. */)
return Qnil;
switch (XFRAME (object)->output_method)
{
+ case output_initial: /* The initial frame is like a termcap frame. */
case output_termcap:
return Qt;
case output_x_window:
@@ -224,7 +226,7 @@ See also `frame-live-p'. */)
DEFUN ("frame-live-p", Fframe_live_p, Sframe_live_p, 1, 1, 0,
doc: /* Return non-nil if OBJECT is a frame which has not been deleted.
Value is nil if OBJECT is not a live frame. If object is a live
-frame, the return value indicates what sort of output device it is
+frame, the return value indicates what sort of terminal device it is
displayed on. See the documentation of `framep' for possible
return values. */)
(object)
@@ -236,6 +238,30 @@ return values. */)
: Qnil);
}
+DEFUN ("window-system", Fwindow_system, Swindow_system, 0, 1, 0,
+ doc: /* The name of the window system that FRAME is displaying through.
+The value is a symbol---for instance, 'x' for X windows.
+The value is nil if Emacs is using a text-only terminal.
+
+FRAME defaults to the currently selected frame. */)
+ (frame)
+ Lisp_Object frame;
+{
+ Lisp_Object type;
+ if (NILP (frame))
+ frame = selected_frame;
+
+ type = Fframep (frame);
+
+ if (NILP (type))
+ wrong_type_argument (Qframep, frame);
+
+ if (EQ (type, Qt))
+ return Qnil;
+ else
+ return type;
+}
+
struct frame *
make_frame (mini_p)
int mini_p;
@@ -279,9 +305,7 @@ make_frame (mini_p)
f->menu_bar_items_used = 0;
f->buffer_predicate = Qnil;
f->buffer_list = Qnil;
-#ifdef MULTI_KBOARD
- f->kboard = initial_kboard;
-#endif
+ f->buried_buffer_list = Qnil;
f->namebuf = 0;
f->title = Qnil;
f->menu_bar_window = Qnil;
@@ -401,8 +425,8 @@ make_frame_without_minibuffer (mini_window, kb, display)
#ifdef MULTI_KBOARD
if (!NILP (mini_window)
- && XFRAME (XWINDOW (mini_window)->frame)->kboard != kb)
- error ("Frame and minibuffer must be on the same display");
+ && FRAME_KBOARD (XFRAME (XWINDOW (mini_window)->frame)) != kb)
+ error ("Frame and minibuffer must be on the same terminal");
#endif
/* Make a frame containing just a root window. */
@@ -478,38 +502,68 @@ make_minibuffer_frame ()
}
#endif /* HAVE_WINDOW_SYSTEM */
-/* Construct a frame that refers to the terminal (stdin and stdout). */
+/* Construct a frame that refers to a terminal. */
-static int terminal_frame_count;
+static int tty_frame_count;
struct frame *
-make_terminal_frame ()
+make_initial_frame (void)
{
- register struct frame *f;
+ struct frame *f;
+ struct terminal *terminal;
Lisp_Object frame;
- char name[20];
-#ifdef MULTI_KBOARD
- if (!initial_kboard)
- {
- initial_kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
- init_kboard (initial_kboard);
- initial_kboard->next_kboard = all_kboards;
- all_kboards = initial_kboard;
- }
-#endif
+ eassert (initial_kboard);
/* The first call must initialize Vframe_list. */
if (! (NILP (Vframe_list) || CONSP (Vframe_list)))
Vframe_list = Qnil;
+ terminal = init_initial_terminal ();
+
+ f = make_frame (1);
+ XSETFRAME (frame, f);
+
+ Vframe_list = Fcons (frame, Vframe_list);
+
+ tty_frame_count = 1;
+ f->name = build_string ("F1");
+
+ f->visible = 1;
+ f->async_visible = 1;
+
+ f->output_method = terminal->type;
+ f->terminal = terminal;
+ f->terminal->reference_count++;
+ f->output_data.nothing = 0;
+
+ FRAME_FOREGROUND_PIXEL (f) = FACE_TTY_DEFAULT_FG_COLOR;
+ FRAME_BACKGROUND_PIXEL (f) = FACE_TTY_DEFAULT_BG_COLOR;
+
+ FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
+ FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
+
+ return f;
+}
+
+
+struct frame *
+make_terminal_frame (struct terminal *terminal)
+{
+ register struct frame *f;
+ Lisp_Object frame;
+ char name[20];
+
+ if (!terminal->name)
+ error ("Terminal is not live, can't create new frames on it");
+
f = make_frame (1);
XSETFRAME (frame, f);
Vframe_list = Fcons (frame, Vframe_list);
- terminal_frame_count++;
- sprintf (name, "F%d", terminal_frame_count);
+ tty_frame_count++;
+ sprintf (name, "F%d", tty_frame_count);
f->name = build_string (name);
f->visible = 1; /* FRAME_SET_VISIBLE wd set frame_garbaged. */
@@ -529,30 +583,44 @@ make_terminal_frame ()
for the black color. Other frames all inherit their pixels
from what's already in the_only_x_display. */
if ((!FRAMEP (selected_frame) || !FRAME_LIVE_P (XFRAME (selected_frame)))
- && f->output_data.x->background_pixel == 0
- && f->output_data.x->foreground_pixel == 0)
+ && FRAME_BACKGROUND_PIXEL (f) == 0
+ && FRAME_FOREGROUND_PIXEL (f) == 0)
{
- f->output_data.x->background_pixel = FACE_TTY_DEFAULT_BG_COLOR;
- f->output_data.x->foreground_pixel = FACE_TTY_DEFAULT_FG_COLOR;
+ FRAME_BACKGROUND_PIXEL (f) = FACE_TTY_DEFAULT_BG_COLOR;
+ FRAME_FOREGROUND_PIXEL (f) = FACE_TTY_DEFAULT_FG_COLOR;
}
}
else
f->output_method = output_termcap;
#else
-#ifdef WINDOWSNT
- f->output_method = output_termcap;
- f->output_data.x = &tty_display;
-#else
#ifdef MAC_OS8
make_mac_terminal_frame (f);
#else
- f->output_data.x = &tty_display;
+ {
+ f->output_method = output_termcap;
+ f->terminal = terminal;
+ f->terminal->reference_count++;
+ create_tty_output (f);
+
+ FRAME_FOREGROUND_PIXEL (f) = FACE_TTY_DEFAULT_FG_COLOR;
+ FRAME_BACKGROUND_PIXEL (f) = FACE_TTY_DEFAULT_BG_COLOR;
+
+ FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
+ FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
+
+ /* Set the top frame to the newly created frame. */
+ if (FRAMEP (FRAME_TTY (f)->top_frame)
+ && FRAME_LIVE_P (XFRAME (FRAME_TTY (f)->top_frame)))
+ XFRAME (FRAME_TTY (f)->top_frame)->async_visible = 2; /* obscured */
+
+ FRAME_TTY (f)->top_frame = frame;
+ }
+
#ifdef CANNOT_DUMP
FRAME_FOREGROUND_PIXEL(f) = FACE_TTY_DEFAULT_FG_COLOR;
FRAME_BACKGROUND_PIXEL(f) = FACE_TTY_DEFAULT_BG_COLOR;
#endif
#endif /* MAC_OS8 */
-#endif /* WINDOWSNT */
#endif /* MSDOS */
if (!noninteractive)
@@ -561,18 +629,55 @@ make_terminal_frame ()
return f;
}
+/* Get a suitable value for frame parameter PARAMETER for a newly
+ created frame, based on (1) the user-supplied frame parameter
+ alist SUPPLIED_PARMS, (2) CURRENT_VALUE, and finally, if all else
+ fails, (3) Vdefault_frame_alist. */
+
+static Lisp_Object
+get_future_frame_param (Lisp_Object parameter,
+ Lisp_Object supplied_parms,
+ char *current_value)
+{
+ Lisp_Object result;
+
+ result = Fassq (parameter, supplied_parms);
+ if (NILP (result))
+ result = Fassq (parameter, XFRAME (selected_frame)->param_alist);
+ if (NILP (result) && current_value != NULL)
+ result = build_string (current_value);
+ if (NILP (result))
+ result = Fassq (parameter, Vdefault_frame_alist);
+ if (!NILP (result) && !STRINGP (result))
+ result = XCDR (result);
+ if (NILP (result) || !STRINGP (result))
+ result = Qnil;
+
+ return result;
+}
+
DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame,
1, 1, 0,
- doc: /* Create an additional terminal frame.
-You can create multiple frames on a text-only terminal in this way.
-Only the selected terminal frame is actually displayed.
+ doc: /* Create an additional terminal frame, possibly on another terminal.
This function takes one argument, an alist specifying frame parameters.
-In practice, generally you don't need to specify any parameters.
-Note that changing the size of one terminal frame automatically affects all. */)
+
+You can create multiple frames on a single text-only terminal, but
+only one of them (the selected terminal frame) is actually displayed.
+
+In practice, generally you don't need to specify any parameters,
+except when you want to create a new frame on another terminal.
+In that case, the `tty' parameter specifies the device file to open,
+and the `tty-type' parameter specifies the terminal type. Example:
+
+ (make-terminal-frame '((tty . "/dev/pts/5") (tty-type . "xterm")))
+
+Note that changing the size of one terminal frame automatically
+affects all frames on the same terminal device. */)
(parms)
Lisp_Object parms;
{
struct frame *f;
+ struct terminal *t = NULL;
Lisp_Object frame, tem;
struct frame *sf = SELECTED_FRAME ();
@@ -582,24 +687,82 @@ Note that changing the size of one terminal frame automatically affects all. */
abort ();
#else /* not MSDOS */
-#ifdef MAC_OS
+#if 0 /* #ifdef MAC_OS */
+ /* This can happen for multi-tty when using both terminal frames and
+ Carbon frames. */
if (sf->output_method != output_mac)
error ("Not running on a Macintosh screen; cannot make a new Macintosh frame");
#else
+#if 0 /* This should work now! */
if (sf->output_method != output_termcap)
error ("Not using an ASCII terminal now; cannot make a new ASCII frame");
#endif
+#endif
#endif /* not MSDOS */
- f = make_terminal_frame ();
+ {
+ Lisp_Object terminal;
+
+ terminal = Fassq (Qterminal, parms);
+ if (!NILP (terminal))
+ {
+ terminal = XCDR (terminal);
+ t = get_terminal (terminal, 1);
+ }
+ }
+
+ if (!t)
+ {
+ char *name = 0, *type = 0;
+ Lisp_Object tty, tty_type;
+
+ tty = get_future_frame_param
+ (Qtty, parms, (FRAME_TERMCAP_P (XFRAME (selected_frame))
+ ? FRAME_TTY (XFRAME (selected_frame))->name
+ : NULL));
+ if (!NILP (tty))
+ {
+ name = (char *) alloca (SBYTES (tty) + 1);
+ strncpy (name, SDATA (tty), SBYTES (tty));
+ name[SBYTES (tty)] = 0;
+ }
+
+ tty_type = get_future_frame_param
+ (Qtty_type, parms, (FRAME_TERMCAP_P (XFRAME (selected_frame))
+ ? FRAME_TTY (XFRAME (selected_frame))->type
+ : NULL));
+ if (!NILP (tty_type))
+ {
+ type = (char *) alloca (SBYTES (tty_type) + 1);
+ strncpy (type, SDATA (tty_type), SBYTES (tty_type));
+ type[SBYTES (tty_type)] = 0;
+ }
+
+ t = init_tty (name, type, 0); /* Errors are not fatal. */
+ }
+
+ f = make_terminal_frame (t);
+
+ {
+ int width, height;
+ get_tty_size (fileno (FRAME_TTY (f)->input), &width, &height);
+ change_frame_size (f, height, width, 0, 0, 0);
+ }
- change_frame_size (f, FRAME_LINES (sf),
- FRAME_COLS (sf), 0, 0, 0);
adjust_glyphs (f);
calculate_costs (f);
XSETFRAME (frame, f);
Fmodify_frame_parameters (frame, Vdefault_frame_alist);
Fmodify_frame_parameters (frame, parms);
+ Fmodify_frame_parameters (frame, Fcons (Fcons (Qtty_type,
+ build_string (t->display_info.tty->type)),
+ Qnil));
+ if (t->display_info.tty->name != NULL)
+ Fmodify_frame_parameters (frame, Fcons (Fcons (Qtty,
+ build_string (t->display_info.tty->name)),
+ Qnil));
+ else
+ Fmodify_frame_parameters (frame, Fcons (Fcons (Qtty, Qnil), Qnil));
/* Make the frame face alist be frame-specific, so that each
frame could change its face definitions independently. */
@@ -623,7 +786,7 @@ Note that changing the size of one terminal frame automatically affects all. */
frame's focus to FRAME instead.
FOR_DELETION non-zero means that the selected frame is being
- deleted, which includes the possibility that the frame's display
+ deleted, which includes the possibility that the frame's terminal
is dead. */
Lisp_Object
@@ -698,6 +861,15 @@ do_switch_frame (frame, track, for_deletion)
if (!for_deletion && FRAME_HAS_MINIBUF_P (sf))
resize_mini_window (XWINDOW (FRAME_MINIBUF_WINDOW (sf)), 1);
+ if (FRAME_TERMCAP_P (XFRAME (selected_frame))
+ && FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_TTY (XFRAME (selected_frame)) == FRAME_TTY (XFRAME (frame)))
+ {
+ XFRAME (selected_frame)->async_visible = 2; /* obscured */
+ XFRAME (frame)->async_visible = 1;
+ FRAME_TTY (XFRAME (frame))->top_frame = frame;
+ }
+
selected_frame = frame;
if (! FRAME_MINIBUF_ONLY_P (XFRAME (selected_frame)))
last_nonminibuf_frame = XFRAME (selected_frame);
@@ -881,6 +1053,7 @@ If FRAME is the selected frame, this makes WINDOW the selected window. */)
return XFRAME (frame)->selected_window = window;
}
+
DEFUN ("frame-list", Fframe_list, Sframe_list,
0, 0, 0,
@@ -928,7 +1101,10 @@ next_frame (frame, minibuf)
f = XCAR (tail);
if (passed
- && FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
+ && ((!FRAME_TERMCAP_P (XFRAME (f)) && !FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
+ || (FRAME_TERMCAP_P (XFRAME (f)) && FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_TTY (XFRAME (f)) == FRAME_TTY (XFRAME (frame)))))
{
/* Decide whether this frame is eligible to be returned. */
@@ -1005,7 +1181,10 @@ prev_frame (frame, minibuf)
if (EQ (frame, f) && !NILP (prev))
return prev;
- if (FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
+ if ((!FRAME_TERMCAP_P (XFRAME (f)) && !FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
+ || (FRAME_TERMCAP_P (XFRAME (f)) && FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_TTY (XFRAME (f)) == FRAME_TTY (XFRAME (frame))))
{
/* Decide whether this frame is eligible to be returned,
according to minibuf. */
@@ -1139,6 +1318,14 @@ other_visible_frames (f)
return 1;
}
+/* Error handler for `delete-frame-functions'. */
+static Lisp_Object
+delete_frame_handler (Lisp_Object arg)
+{
+ add_to_log ("Error during `delete-frame': %s", arg, Qnil);
+ return Qnil;
+}
+
DEFUN ("delete-frame", Fdelete_frame, Sdelete_frame, 0, 2, "",
doc: /* Delete FRAME, permanently eliminating it from use.
If omitted, FRAME defaults to the selected frame.
@@ -1154,6 +1341,8 @@ The functions are run with one arg, the frame to be deleted. */)
{
struct frame *f;
struct frame *sf = SELECTED_FRAME ();
+ struct kboard *kb;
+
int minibuffer_selected;
if (EQ (frame, Qnil))
@@ -1212,11 +1401,22 @@ The functions are run with one arg, the frame to be deleted. */)
&& NILP (Fframe_parameter (frame, intern ("tooltip"))))
{
Lisp_Object args[2];
+ struct gcpro gcpro1, gcpro2;
+
+ /* Don't let a rogue function in `delete-frame-functions'
+ prevent the frame deletion. */
+ GCPRO2 (args[0], args[1]);
args[0] = intern ("delete-frame-functions");
args[1] = frame;
- Frun_hook_with_args (2, args);
+ internal_condition_case_2 (Frun_hook_with_args, 2, args,
+ Qt, delete_frame_handler);
+ UNGCPRO;
}
+ /* The hook may sometimes (indirectly) cause the frame to be deleted. */
+ if (! FRAME_LIVE_P (f))
+ return Qnil;
+
minibuffer_selected = EQ (minibuf_window, selected_window);
/* Don't let the frame remain selected. */
@@ -1232,7 +1432,7 @@ The functions are run with one arg, the frame to be deleted. */)
{
FOR_EACH_FRAME (tail, frame1)
{
- if (! EQ (frame, frame1))
+ if (! EQ (frame, frame1) && FRAME_LIVE_P (XFRAME (frame1)))
break;
}
}
@@ -1298,18 +1498,36 @@ The functions are run with one arg, the frame to be deleted. */)
xfree (FRAME_MESSAGE_BUF (f));
/* Since some events are handled at the interrupt level, we may get
- an event for f at any time; if we zero out the frame's display
+ an event for f at any time; if we zero out the frame's terminal
now, then we may trip up the event-handling code. Instead, we'll
- promise that the display of the frame must be valid until we have
- called the window-system-dependent frame destruction routine. */
+ promise that the terminal of the frame must be valid until we
+ have called the window-system-dependent frame destruction
+ routine. */
- /* I think this should be done with a hook. */
-#ifdef HAVE_WINDOW_SYSTEM
- if (FRAME_WINDOW_P (f))
- x_destroy_window (f);
-#endif
+ if (FRAME_TERMINAL (f)->delete_frame_hook)
+ (*FRAME_TERMINAL (f)->delete_frame_hook) (f);
- f->output_data.nothing = 0;
+ {
+ struct terminal *terminal = FRAME_TERMINAL (f);
+ f->output_data.nothing = 0;
+ f->terminal = 0; /* Now the frame is dead. */
+
+ /* If needed, delete the terminal that this frame was on.
+ (This must be done after the frame is killed.) */
+ terminal->reference_count--;
+ if (terminal->reference_count == 0)
+ {
+ kb = NULL;
+ if (terminal->delete_terminal_hook)
+ (*terminal->delete_terminal_hook) (terminal);
+ else
+ delete_terminal (terminal);
+ }
+#ifdef MULTI_KBOARD
+ else
+ kb = terminal->kboard;
+#endif
+ }
/* If we've deleted the last_nonminibuf_frame, then try to find
another one. */
@@ -1334,38 +1552,39 @@ The functions are run with one arg, the frame to be deleted. */)
/* If there's no other frame on the same kboard, get out of
single-kboard state if we're in it for this kboard. */
- {
- Lisp_Object frames;
- /* Some frame we found on the same kboard, or nil if there are none. */
- Lisp_Object frame_on_same_kboard;
+ if (kb != NULL)
+ {
+ Lisp_Object frames;
+ /* Some frame we found on the same kboard, or nil if there are none. */
+ Lisp_Object frame_on_same_kboard;
- frame_on_same_kboard = Qnil;
+ frame_on_same_kboard = Qnil;
- for (frames = Vframe_list;
- CONSP (frames);
- frames = XCDR (frames))
- {
- Lisp_Object this;
- struct frame *f1;
+ for (frames = Vframe_list;
+ CONSP (frames);
+ frames = XCDR (frames))
+ {
+ Lisp_Object this;
+ struct frame *f1;
- this = XCAR (frames);
- if (!FRAMEP (this))
- abort ();
- f1 = XFRAME (this);
+ this = XCAR (frames);
+ if (!FRAMEP (this))
+ abort ();
+ f1 = XFRAME (this);
- if (FRAME_KBOARD (f) == FRAME_KBOARD (f1))
- frame_on_same_kboard = this;
- }
+ if (kb == FRAME_KBOARD (f1))
+ frame_on_same_kboard = this;
+ }
- if (NILP (frame_on_same_kboard))
- not_single_kboard_state (FRAME_KBOARD (f));
- }
+ if (NILP (frame_on_same_kboard))
+ not_single_kboard_state (kb);
+ }
/* If we've deleted this keyboard's default_minibuffer_frame, try to
find another one. Prefer minibuffer-only frames, but also notice
frames with other windows. */
- if (EQ (frame, FRAME_KBOARD (f)->Vdefault_minibuffer_frame))
+ if (kb != NULL && EQ (frame, kb->Vdefault_minibuffer_frame))
{
Lisp_Object frames;
@@ -1391,7 +1610,7 @@ The functions are run with one arg, the frame to be deleted. */)
/* Consider only frames on the same kboard
and only those with minibuffers. */
- if (FRAME_KBOARD (f) == FRAME_KBOARD (f1)
+ if (kb == FRAME_KBOARD (f1)
&& FRAME_HAS_MINIBUF_P (f1))
{
frame_with_minibuf = this;
@@ -1399,7 +1618,7 @@ The functions are run with one arg, the frame to be deleted. */)
break;
}
- if (FRAME_KBOARD (f) == FRAME_KBOARD (f1))
+ if (kb == FRAME_KBOARD (f1))
frame_on_same_kboard = this;
}
@@ -1414,11 +1633,11 @@ The functions are run with one arg, the frame to be deleted. */)
if (NILP (frame_with_minibuf))
abort ();
- FRAME_KBOARD (f)->Vdefault_minibuffer_frame = frame_with_minibuf;
+ kb->Vdefault_minibuffer_frame = frame_with_minibuf;
}
else
/* No frames left on this kboard--say no minibuffer either. */
- FRAME_KBOARD (f)->Vdefault_minibuffer_frame = Qnil;
+ kb->Vdefault_minibuffer_frame = Qnil;
}
/* Cause frame titles to update--necessary if we now have just one frame. */
@@ -1453,13 +1672,13 @@ and returns whatever that function returns. */)
f = SELECTED_FRAME ();
x = y = Qnil;
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
/* It's okay for the hook to refrain from storing anything. */
- if (mouse_position_hook)
- (*mouse_position_hook) (&f, -1,
- &lispy_dummy, &party_dummy,
- &x, &y,
- &long_dummy);
+ if (FRAME_TERMINAL (f)->mouse_position_hook)
+ (*FRAME_TERMINAL (f)->mouse_position_hook) (&f, -1,
+ &lispy_dummy, &party_dummy,
+ &x, &y,
+ &long_dummy);
if (! NILP (x))
{
col = XINT (x);
@@ -1497,13 +1716,13 @@ and nil for X and Y. */)
f = SELECTED_FRAME ();
x = y = Qnil;
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
/* It's okay for the hook to refrain from storing anything. */
- if (mouse_position_hook)
- (*mouse_position_hook) (&f, -1,
- &lispy_dummy, &party_dummy,
- &x, &y,
- &long_dummy);
+ if (FRAME_TERMINAL (f)->mouse_position_hook)
+ (*FRAME_TERMINAL (f)->mouse_position_hook) (&f, -1,
+ &lispy_dummy, &party_dummy,
+ &x, &y,
+ &long_dummy);
#endif
XSETFRAME (lispy_dummy, f);
return Fcons (lispy_dummy, Fcons (x, y));
@@ -1542,6 +1761,13 @@ before calling this function on it, like this.
Fselect_frame (frame);
mouse_moveto (XINT (x), XINT (y));
}
+#else
+#ifdef HAVE_GPM
+ {
+ Fselect_frame (frame);
+ term_mouse_moveto (XINT (x), XINT (y));
+ }
+#endif
#endif
#endif
@@ -1577,6 +1803,13 @@ before calling this function on it, like this.
Fselect_frame (frame);
mouse_moveto (XINT (x), XINT (y));
}
+#else
+#ifdef HAVE_GPM
+ {
+ Fselect_frame (frame);
+ term_mouse_moveto (XINT (x), XINT (y));
+ }
+#endif
#endif
#endif
@@ -1776,16 +2009,19 @@ doesn't support multiple overlapping frames, this function does nothing. */)
(frame)
Lisp_Object frame;
{
+ struct frame *f;
if (NILP (frame))
frame = selected_frame;
CHECK_LIVE_FRAME (frame);
+ f = XFRAME (frame);
+
/* Do like the documentation says. */
Fmake_frame_visible (frame);
- if (frame_raise_lower_hook)
- (*frame_raise_lower_hook) (XFRAME (frame), 1);
+ if (FRAME_TERMINAL (f)->frame_raise_lower_hook)
+ (*FRAME_TERMINAL (f)->frame_raise_lower_hook) (f, 1);
return Qnil;
}
@@ -1799,13 +2035,17 @@ doesn't support multiple overlapping frames, this function does nothing. */)
(frame)
Lisp_Object frame;
{
+ struct frame *f;
+
if (NILP (frame))
frame = selected_frame;
CHECK_LIVE_FRAME (frame);
- if (frame_raise_lower_hook)
- (*frame_raise_lower_hook) (XFRAME (frame), 0);
+ f = XFRAME (frame);
+
+ if (FRAME_TERMINAL (f)->frame_raise_lower_hook)
+ (*FRAME_TERMINAL (f)->frame_raise_lower_hook) (f, 0);
return Qnil;
}
@@ -1839,6 +2079,8 @@ The redirection lasts until `redirect-frame-focus' is called to change it. */)
(frame, focus_frame)
Lisp_Object frame, focus_frame;
{
+ struct frame *f;
+
/* Note that we don't check for a live frame here. It's reasonable
to redirect the focus of a frame you're about to delete, if you
know what other frame should receive those keystrokes. */
@@ -1847,10 +2089,12 @@ The redirection lasts until `redirect-frame-focus' is called to change it. */)
if (! NILP (focus_frame))
CHECK_LIVE_FRAME (focus_frame);
- XFRAME (frame)->focus_frame = focus_frame;
+ f = XFRAME (frame);
+
+ f->focus_frame = focus_frame;
- if (frame_rehighlight_hook)
- (*frame_rehighlight_hook) (XFRAME (frame));
+ if (FRAME_TERMINAL (f)->frame_rehighlight_hook)
+ (*FRAME_TERMINAL (f)->frame_rehighlight_hook) (f);
return Qnil;
}
@@ -1912,7 +2156,7 @@ set_frame_buffer_list (frame, list)
XFRAME (frame)->buffer_list = list;
}
-/* Discard BUFFER from the buffer-list of each frame. */
+/* Discard BUFFER from the buffer-list and buried-buffer-list of each frame. */
void
frames_discard_buffer (buffer)
@@ -1924,6 +2168,8 @@ frames_discard_buffer (buffer)
{
XFRAME (frame)->buffer_list
= Fdelq (buffer, XFRAME (frame)->buffer_list);
+ XFRAME (frame)->buried_buffer_list
+ = Fdelq (buffer, XFRAME (frame)->buried_buffer_list);
}
}
@@ -1982,8 +2228,8 @@ set_term_frame_name (f, name)
SBYTES (f->name)))
return;
- terminal_frame_count++;
- sprintf (namebuf, "F%d", terminal_frame_count);
+ tty_frame_count++;
+ sprintf (namebuf, "F%d", tty_frame_count);
name = build_string (namebuf);
}
else
@@ -2011,13 +2257,18 @@ store_frame_param (f, prop, val)
{
register Lisp_Object old_alist_elt;
- /* The buffer-alist parameter is stored in a special place and is
- not in the alist. */
+ /* The buffer-list parameters are stored in a special place and not
+ in the alist. */
if (EQ (prop, Qbuffer_list))
{
f->buffer_list = val;
return;
}
+ if (EQ (prop, Qburied_buffer_list))
+ {
+ f->buried_buffer_list = val;
+ return;
+ }
/* If PROP is a symbol which is supposed to have frame-local values,
and it is set up based on this frame, switch to the global
@@ -2027,9 +2278,9 @@ store_frame_param (f, prop, val)
{
Lisp_Object valcontents;
valcontents = SYMBOL_VALUE (prop);
- if ((BUFFER_LOCAL_VALUEP (valcontents)
- || SOME_BUFFER_LOCAL_VALUEP (valcontents))
+ if ((BUFFER_LOCAL_VALUEP (valcontents))
&& XBUFFER_LOCAL_VALUE (valcontents)->check_frame
+ && XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame
&& XFRAME (XBUFFER_LOCAL_VALUE (valcontents)->frame) == f)
swap_in_global_binding (prop);
}
@@ -2112,7 +2363,7 @@ If FRAME is omitted, return information on the currently selected frame. */)
unspecified and reversed, take the frame's background pixel
for foreground and vice versa. */
elt = Fassq (Qforeground_color, alist);
- if (!NILP (elt) && CONSP (elt) && STRINGP (XCDR (elt)))
+ if (CONSP (elt) && STRINGP (XCDR (elt)))
{
if (strncmp (SDATA (XCDR (elt)),
unspecified_bg,
@@ -2126,7 +2377,7 @@ If FRAME is omitted, return information on the currently selected frame. */)
else
store_in_alist (&alist, Qforeground_color, tty_color_name (f, fg));
elt = Fassq (Qbackground_color, alist);
- if (!NILP (elt) && CONSP (elt) && STRINGP (XCDR (elt)))
+ if (CONSP (elt) && STRINGP (XCDR (elt)))
{
if (strncmp (SDATA (XCDR (elt)),
unspecified_fg,
@@ -2157,6 +2408,7 @@ If FRAME is omitted, return information on the currently selected frame. */)
: FRAME_MINIBUF_WINDOW (f)));
store_in_alist (&alist, Qunsplittable, (FRAME_NO_SPLIT_P (f) ? Qt : Qnil));
store_in_alist (&alist, Qbuffer_list, frame_buffer_list (frame));
+ store_in_alist (&alist, Qburied_buffer_list, XFRAME (frame)->buried_buffer_list);
/* I think this should be done with a hook. */
#ifdef HAVE_WINDOW_SYSTEM
@@ -2324,7 +2576,6 @@ enabled such bindings for that variable with `make-variable-frame-local'. */)
call1 (Qframe_set_background_mode, frame);
}
}
-
return Qnil;
}
@@ -2743,9 +2994,8 @@ x_set_frame_parameters (f, alist)
if (NATNUMP (param_index)
&& (XFASTINT (param_index)
< 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);
-
+ && FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])
+ (*(FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])) (f, val, old_value);
unbind_to (count, Qnil);
}
}
@@ -2759,9 +3009,9 @@ x_set_frame_parameters (f, alist)
prop = parms[i];
val = values[i];
- if (EQ (prop, Qwidth) && NUMBERP (val))
+ if (EQ (prop, Qwidth) && NATNUMP (val))
width = XFASTINT (val);
- else if (EQ (prop, Qheight) && NUMBERP (val))
+ else if (EQ (prop, Qheight) && NATNUMP (val))
height = XFASTINT (val);
else if (EQ (prop, Qtop))
top = val;
@@ -2789,8 +3039,8 @@ x_set_frame_parameters (f, alist)
if (NATNUMP (param_index)
&& (XFASTINT (param_index)
< 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);
+ && FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])
+ (*(FRAME_RIF (f)->frame_parm_handlers[XINT (param_index)])) (f, val, old_value);
}
}
@@ -3029,8 +3279,8 @@ x_set_fullscreen (f, new_value, old_value)
else if (EQ (new_value, Qfullheight))
f->want_fullscreen = FULLSCREEN_HEIGHT;
- if (fullscreen_hook != NULL)
- fullscreen_hook (f);
+ if (FRAME_TERMINAL (f)->fullscreen_hook != NULL)
+ FRAME_TERMINAL (f)->fullscreen_hook (f);
}
@@ -3079,9 +3329,9 @@ x_set_screen_gamma (f, new_value, old_value)
if (NATNUMP (index)
&& (XFASTINT (index)
< sizeof (frame_parms)/sizeof (frame_parms[0]))
- && rif->frame_parm_handlers[XFASTINT (index)])
- (*(rif->frame_parm_handlers[XFASTINT (index)]))
- (f, bgcolor, Qnil);
+ && FRAME_RIF (f)->frame_parm_handlers[XFASTINT (index)])
+ (*FRAME_RIF (f)->frame_parm_handlers[XFASTINT (index)])
+ (f, bgcolor, Qnil);
}
Fclear_face_cache (Qnil);
@@ -4019,12 +4269,18 @@ syms_of_frame ()
staticpro (&Qbuffer_predicate);
Qbuffer_list = intern ("buffer-list");
staticpro (&Qbuffer_list);
+ Qburied_buffer_list = intern ("buried-buffer-list");
+ staticpro (&Qburied_buffer_list);
Qdisplay_type = intern ("display-type");
staticpro (&Qdisplay_type);
Qbackground_mode = intern ("background-mode");
staticpro (&Qbackground_mode);
Qtty_color_mode = intern ("tty-color-mode");
staticpro (&Qtty_color_mode);
+ Qtty = intern ("tty");
+ staticpro (&Qtty);
+ Qtty_type = intern ("tty-type");
+ staticpro (&Qtty_type);
Qface_set_after_frame_default = intern ("face-set-after-frame-default");
staticpro (&Qface_set_after_frame_default);
@@ -4045,6 +4301,11 @@ syms_of_frame ()
Qx_frame_parameter = intern ("x-frame-parameter");
staticpro (&Qx_frame_parameter);
+ Qterminal = intern ("terminal");
+ staticpro (&Qterminal);
+ Qterminal_live_p = intern ("terminal-live-p");
+ staticpro (&Qterminal_live_p);
+
{
int i;
@@ -4093,6 +4354,7 @@ These may be set in your init file, like this:
These override values given in window system configuration data,
including X Windows' defaults database.
For values specific to the first Emacs frame, see `initial-frame-alist'.
+For window-system specific values, see `window-system-default-frame-alist'.
For values specific to the separate minibuffer frame, see
`minibuffer-frame-alist'.
The `menu-bar-lines' element of the list controls whether new frames
@@ -4114,7 +4376,7 @@ Setting this variable does not affect existing frames, only new ones. */);
#endif
DEFVAR_LISP ("terminal-frame", &Vterminal_frame,
- doc: /* The initial frame-object, which represents Emacs's stdout. */);
+ doc: /* The initial frame-object, which represents Emacs's stdout. */);
DEFVAR_LISP ("emacs-iconified", &Vemacs_iconified,
doc: /* Non-nil if all of Emacs is iconified and frame updates are not needed. */);
@@ -4139,7 +4401,14 @@ when the mouse is over clickable text. */);
DEFVAR_LISP ("delete-frame-functions", &Vdelete_frame_functions,
doc: /* Functions to be run before deleting a frame.
The functions are run with one arg, the frame to be deleted.
-See `delete-frame'. */);
+See `delete-frame'.
+
+Note that functions in this list may be called twice on the same
+frame. In the second invocation, the frame is already deleted, and
+the function should do nothing. (You can use `frame-live-p' to check
+for this.) This wrinkle happens when an earlier function in
+`delete-frame-functions' (indirectly) calls `delete-frame'
+recursively. */);
Vdelete_frame_functions = Qnil;
DEFVAR_KBOARD ("default-minibuffer-frame", Vdefault_minibuffer_frame,
@@ -4171,12 +4440,13 @@ automatically. */);
#else
focus_follows_mouse = 0;
#endif
-
+
staticpro (&Vframe_list);
defsubr (&Sactive_minibuffer_window);
defsubr (&Sframep);
defsubr (&Sframe_live_p);
+ defsubr (&Swindow_system);
defsubr (&Smake_terminal_frame);
defsubr (&Shandle_switch_frame);
defsubr (&Sselect_frame);
diff --git a/src/frame.h b/src/frame.h
index 03e887b7a97..a9bddbe34b8 100644
--- a/src/frame.h
+++ b/src/frame.h
@@ -29,9 +29,7 @@ Boston, MA 02110-1301, USA. */
/* Miscellanea. */
-/* Nonzero means don't assume anything about current contents of
- actual terminal frame */
-
+/* Nonzero means there is at least one garbaged frame. */
extern int frame_garbaged;
/* Nonzero means FRAME_MESSAGE_BUF (selected_frame) is being used by
@@ -49,6 +47,7 @@ extern int focus_follows_mouse;
enum output_method
{
+ output_initial,
output_termcap,
output_x_window,
output_msdos_raw,
@@ -73,38 +72,17 @@ enum text_cursor_kinds
HBAR_CURSOR
};
-#if !defined(MSDOS) && !defined(WINDOWSNT) && !defined(MAC_OS)
-
-#if !defined(HAVE_X_WINDOWS)
-
-#define PIX_TYPE unsigned long
-
-/* A (mostly empty) x_output structure definition for building Emacs
- on Unix and GNU/Linux without X support. */
-struct x_output
-{
- PIX_TYPE background_pixel;
- PIX_TYPE foreground_pixel;
-};
-
-#endif /* ! HAVE_X_WINDOWS */
+#define FRAME_FOREGROUND_PIXEL(f) ((f)->foreground_pixel)
+#define FRAME_BACKGROUND_PIXEL(f) ((f)->background_pixel)
-
-#define FRAME_FOREGROUND_PIXEL(f) ((f)->output_data.x->foreground_pixel)
-#define FRAME_BACKGROUND_PIXEL(f) ((f)->output_data.x->background_pixel)
-
-/* A structure describing a termcap frame display. */
-extern struct x_output tty_display;
-
-#endif /* ! MSDOS && ! WINDOWSNT && ! MAC_OS */
+struct terminal;
struct frame
{
- EMACS_INT size;
+ EMACS_UINT size;
struct Lisp_Vector *next;
/* All Lisp_Object components must come first.
- Only EMACS_INT values can be intermixed with them.
That ensures they are all aligned normally. */
/* Name of this frame: a Lisp string. It is used for looking up resources,
@@ -158,7 +136,7 @@ struct frame
Actually, we don't specify exactly what is stored here at all; the
scroll bar implementation code can use it to store anything it likes.
This field is marked by the garbage collector. It is here
- instead of in the `display' structure so that the garbage
+ instead of in the `device' structure so that the garbage
collector doesn't need to look inside the window-system-dependent
structure. */
Lisp_Object scroll_bars;
@@ -178,8 +156,6 @@ struct frame
For the format of the data, see extensive comments in xmenu.c.
Only the X toolkit version uses this. */
Lisp_Object menu_bar_vector;
- /* Number of elements in the vector that have meaningful data. */
- EMACS_INT menu_bar_items_used;
/* Predicate for selecting buffers for other-buffer. */
Lisp_Object buffer_predicate;
@@ -187,6 +163,10 @@ struct frame
/* List of buffers viewed in this frame, for other-buffer. */
Lisp_Object buffer_list;
+ /* List of buffers that were viewed, then buried in this frame. The
+ most recently buried buffer is first. For last-buffer. */
+ Lisp_Object buried_buffer_list;
+
/* A dummy window used to display menu bars under X when no X
toolkit support is available. */
Lisp_Object menu_bar_window;
@@ -200,11 +180,14 @@ struct frame
/* Desired and current contents displayed in tool_bar_window. */
Lisp_Object desired_tool_bar_string, current_tool_bar_string;
- /* beyond here, there should be no more Lisp_Object components. */
+ /* Beyond here, there should be no more Lisp_Object components. */
/* Cache of realized faces. */
struct face_cache *face_cache;
+ /* Number of elements in `menu_bar_vector' that have meaningful data. */
+ EMACS_INT menu_bar_items_used;
+
/* A buffer to hold the frame's name. We can't use the Lisp
string's pointer (`name', above) because it might get relocated. */
char *namebuf;
@@ -219,7 +202,31 @@ struct frame
be used for output. */
unsigned glyphs_initialized_p : 1;
-#if defined (USE_GTK)
+ /* Set to non-zero in change_frame_size when size of frame changed
+ Clear the frame in clear_garbaged_frames if set. */
+ unsigned resized_p : 1;
+
+ /* Set to non-zero in when we want for force a flush_display in
+ update_frame, usually after resizing the frame. */
+ unsigned force_flush_display_p : 1;
+
+ /* Set to non-zero if the default face for the frame has been
+ realized. Reset to zero whenever the default face changes.
+ Used to see the difference between a font change and face change. */
+ unsigned default_face_done_p : 1;
+
+ /* Set to non-zero if this frame has already been hscrolled during
+ current redisplay. */
+ unsigned already_hscrolled_p : 1;
+
+ /* Set to non-zero when current redisplay has updated frame. */
+ unsigned updated_p : 1;
+
+ /* Set to non-zero to minimize tool-bar height even when
+ auto-resize-tool-bar is set to grow-only. */
+ unsigned minimize_tool_bar_window_p : 1;
+
+#if defined (USE_GTK) || defined (MAC_OS)
/* Nonzero means using a tool bar that comes from the toolkit. */
int external_tool_bar;
#endif
@@ -288,20 +295,24 @@ struct frame
/* Canonical Y unit. Height of a line, in pixels. */
int line_height;
- /* The output method says how the contents of this frame
- are displayed. It could be using termcap, or using an X window. */
+ /* The output method says how the contents of this frame are
+ displayed. It could be using termcap, or using an X window.
+ This must be the same as the terminal->type. */
enum output_method output_method;
- /* A structure of auxiliary data used for displaying the contents.
- struct x_output is used for X window frames;
- it is defined in xterm.h.
- struct w32_output is used for W32 window frames;
- it is defined in w32term.h. */
+ /* The terminal device that this frame uses. If this is NULL, then
+ the frame has been deleted. */
+ struct terminal *terminal;
+
+ /* Device-dependent, frame-local auxiliary data used for displaying
+ the contents. When the frame is deleted, this data is deleted as
+ well. */
union output_data
{
- struct x_output *x;
- struct w32_output *w32;
- struct mac_output *mac;
+ struct tty_output *tty; /* termchar.h */
+ struct x_output *x; /* xterm.h */
+ struct w32_output *w32; /* w32term.h */
+ struct mac_output *mac; /* macterm.h */
EMACS_INT nothing;
}
output_data;
@@ -316,13 +327,6 @@ struct frame
/* The extra width (in pixels) currently allotted for fringes. */
int left_fringe_width, right_fringe_width;
-#ifdef MULTI_KBOARD
- /* A pointer to the kboard structure associated with this frame.
- For termcap frames, this points to initial_kboard. For X frames,
- it will be the same as display.x->display_info->kboard. */
- struct kboard *kboard;
-#endif
-
/* See FULLSCREEN_ enum below */
int want_fullscreen;
@@ -346,13 +350,13 @@ struct frame
frame becomes visible again, it must be marked as garbaged. The
FRAME_SAMPLE_VISIBILITY macro takes care of this.
- On Windows NT/9X, to avoid wasting effort updating visible frames
- that are actually completely obscured by other windows on the
- display, we bend the meaning of visible slightly: if greater than
- 1, then the frame is obscured - we still consider it to be
- "visible" as seen from lisp, but we don't bother updating it. We
- must take care to garbage the frame when it ceaces to be obscured
- though. Note that these semantics are only used on NT/9X.
+ On ttys and on Windows NT/9X, to avoid wasting effort updating
+ visible frames that are actually completely obscured by other
+ windows on the display, we bend the meaning of visible slightly:
+ if greater than 1, then the frame is obscured - we still consider
+ it to be "visible" as seen from lisp, but we don't bother
+ updating it. We must take care to garbage the frame when it
+ ceaces to be obscured though.
iconified is nonzero if the frame is currently iconified.
@@ -388,24 +392,6 @@ struct frame
support scroll bars. */
char can_have_scroll_bars;
- /* If can_have_scroll_bars is non-zero, this is non-zero if we should
- actually display them on this frame. */
- enum vertical_scroll_bar_type vertical_scroll_bar_type;
-
- /* What kind of text cursor should we draw in the future?
- This should always be filled_box_cursor or bar_cursor. */
- enum text_cursor_kinds desired_cursor;
-
- /* Width of bar cursor (if we are using that). */
- int cursor_width;
-
- /* What kind of text cursor should we draw when the cursor blinks off?
- This can be filled_box_cursor or bar_cursor or no_cursor. */
- enum text_cursor_kinds blink_off_cursor;
-
- /* Width of bar cursor (if we are using that) for blink-off state. */
- int blink_off_cursor_width;
-
/* Non-0 means raise this frame to the top of the heap when selected. */
char auto_raise;
@@ -424,6 +410,28 @@ struct frame
/* Nonzero if size of some window on this frame has changed. */
char window_sizes_changed;
+ /* Nonzero if the mouse has moved on this display device
+ since the last time we checked. */
+ char mouse_moved;
+
+ /* If can_have_scroll_bars is non-zero, this is non-zero if we should
+ actually display them on this frame. */
+ enum vertical_scroll_bar_type vertical_scroll_bar_type;
+
+ /* What kind of text cursor should we draw in the future?
+ This should always be filled_box_cursor or bar_cursor. */
+ enum text_cursor_kinds desired_cursor;
+
+ /* Width of bar cursor (if we are using that). */
+ int cursor_width;
+
+ /* What kind of text cursor should we draw when the cursor blinks off?
+ This can be filled_box_cursor or bar_cursor or no_cursor. */
+ enum text_cursor_kinds blink_off_cursor;
+
+ /* Width of bar cursor (if we are using that) for blink-off state. */
+ int blink_off_cursor_width;
+
/* Storage for messages to this frame. */
char *message_buf;
@@ -446,10 +454,6 @@ struct frame
/* The baud rate that was used to calculate costs for this frame. */
int cost_calculation_baud_rate;
- /* Nonzero if the mouse has moved on this display
- since the last time we checked. */
- char mouse_moved;
-
/* Exponent for gamma correction of colors. 1/(VIEWING_GAMMA *
SCREEN_GAMMA) where viewing_gamma is 0.4545 and SCREEN_GAMMA is a
frame parameter. 0 means don't do gamma correction. */
@@ -458,33 +462,13 @@ struct frame
/* Additional space to put between text lines on this frame. */
int extra_line_spacing;
- /* Set to non-zero in change_frame_size when size of frame changed
- Clear the frame in clear_garbaged_frames if set. */
- unsigned resized_p : 1;
-
- /* Set to non-zero in when we want for force a flush_display in
- update_frame, usually after resizing the frame. */
- unsigned force_flush_display_p : 1;
-
- /* Set to non-zero if the default face for the frame has been
- realized. Reset to zero whenever the default face changes.
- Used to see the difference between a font change and face change. */
- unsigned default_face_done_p : 1;
-
- /* Set to non-zero if this frame has already been hscrolled during
- current redisplay. */
- unsigned already_hscrolled_p : 1;
-
- /* Set to non-zero when current redisplay has updated frame. */
- unsigned updated_p : 1;
-
- /* Set to non-zero to minimize tool-bar height even when
- auto-resize-tool-bar is set to grow-only. */
- unsigned minimize_tool_bar_window_p : 1;
+ /* All display backends seem to need these two pixel values. */
+ unsigned long background_pixel;
+ unsigned long foreground_pixel;
};
#ifdef MULTI_KBOARD
-#define FRAME_KBOARD(f) ((f)->kboard)
+#define FRAME_KBOARD(f) ((f)->terminal->kboard)
#else
#define FRAME_KBOARD(f) (&the_only_kboard)
#endif
@@ -498,6 +482,7 @@ typedef struct frame *FRAME_PTR;
#define WINDOW_FRAME(w) (w)->frame
/* Test a frame for particular kinds of display methods. */
+#define FRAME_INITIAL_P(f) ((f)->output_method == output_initial)
#define FRAME_TERMCAP_P(f) ((f)->output_method == output_termcap)
#define FRAME_X_P(f) ((f)->output_method == output_x_window)
#define FRAME_W32_P(f) ((f)->output_method == output_w32)
@@ -521,7 +506,7 @@ typedef struct frame *FRAME_PTR;
#endif
/* Nonzero if frame F is still alive (not deleted). */
-#define FRAME_LIVE_P(f) ((f)->output_data.nothing != 0)
+#define FRAME_LIVE_P(f) ((f)->terminal != 0)
/* Nonzero if frame F is a minibuffer-only frame. */
#define FRAME_MINIBUF_ONLY_P(f) \
@@ -554,7 +539,7 @@ typedef struct frame *FRAME_PTR;
/* Nonzero if this frame should display a tool bar
in a way that does not use any text lines. */
-#if defined (USE_GTK)
+#if defined (USE_GTK) || defined (MAC_OS)
#define FRAME_EXTERNAL_TOOL_BAR(f) (f)->external_tool_bar
#else
#define FRAME_EXTERNAL_TOOL_BAR(f) 0
@@ -761,7 +746,10 @@ typedef struct frame *FRAME_PTR;
Also, if a frame used to be invisible, but has just become visible,
it must be marked as garbaged, since redisplay hasn't been keeping
- up its contents. */
+ up its contents.
+
+ Note that a tty frame is visible if and only if it is the topmost
+ frame. */
#define FRAME_SAMPLE_VISIBILITY(f) \
(((f)->async_visible && (f)->visible != (f)->async_visible) ? \
@@ -794,10 +782,13 @@ typedef struct frame *FRAME_PTR;
extern Lisp_Object Qframep, Qframe_live_p;
+extern Lisp_Object Qtty, Qtty_type;
+extern Lisp_Object Qterminal, Qterminal_live_p;
extern struct frame *last_nonminibuf_frame;
-extern struct frame *make_terminal_frame P_ ((void));
+extern struct frame *make_initial_frame P_ ((void));
+extern struct frame *make_terminal_frame P_ ((struct terminal *));
extern struct frame *make_frame P_ ((int));
#ifdef HAVE_WINDOW_SYSTEM
extern struct frame *make_minibuffer_frame P_ ((void));
@@ -997,7 +988,7 @@ extern Lisp_Object selected_frame;
extern Lisp_Object Qauto_raise, Qauto_lower;
extern Lisp_Object Qborder_color, Qborder_width;
-extern Lisp_Object Qbuffer_predicate, Qbuffer_list;
+extern Lisp_Object Qbuffer_predicate, Qbuffer_list, Qburied_buffer_list;
extern Lisp_Object Qcursor_color, Qcursor_type;
extern Lisp_Object Qfont;
extern Lisp_Object Qbackground_color, Qforeground_color;
diff --git a/src/fringe.c b/src/fringe.c
index 62767b39118..70e14f51f5f 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -29,6 +29,7 @@ Boston, MA 02110-1301, USA. */
#include "dispextern.h"
#include "buffer.h"
#include "blockinput.h"
+#include "termhooks.h"
#ifdef HAVE_WINDOW_SYSTEM
@@ -686,7 +687,7 @@ draw_fringe_bitmap_1 (w, row, left_p, overlay, which)
break;
}
- rif->draw_fringe_bitmap (w, row, &p);
+ FRAME_RIF (f)->draw_fringe_bitmap (w, row, &p);
}
static int
@@ -1278,6 +1279,8 @@ destroy_fringe_bitmap (n)
fbp = &fringe_bitmaps[n];
if (*fbp && (*fbp)->dynamic)
{
+ /* XXX Is SELECTED_FRAME OK here? */
+ struct redisplay_interface *rif = FRAME_RIF (SELECTED_FRAME ());
if (rif && rif->destroy_fringe_bitmap)
rif->destroy_fringe_bitmap (n);
xfree (*fbp);
@@ -1328,11 +1331,11 @@ If BITMAP overrides a standard fringe bitmap, the original bitmap is restored.
*/
#if defined (HAVE_X_WINDOWS)
-static unsigned char swap_nibble[16]
- = { 0x0, 0x8, 0x4, 0xc, /* 0000 1000 0100 1100 */
- 0x2, 0xa, 0x6, 0xe, /* 0010 1010 0110 1110 */
- 0x1, 0x9, 0x5, 0xd, /* 0001 1001 0101 1101 */
- 0x3, 0xb, 0x7, 0xf }; /* 0011 1011 0111 1111 */
+static unsigned char swap_nibble[16] = {
+ 0x0, 0x8, 0x4, 0xc, /* 0000 1000 0100 1100 */
+ 0x2, 0xa, 0x6, 0xe, /* 0010 1010 0110 1110 */
+ 0x1, 0x9, 0x5, 0xd, /* 0001 1001 0101 1101 */
+ 0x3, 0xb, 0x7, 0xf}; /* 0011 1011 0111 1111 */
#endif /* HAVE_X_WINDOWS */
void
@@ -1386,6 +1389,9 @@ init_fringe_bitmap (which, fb, once_p)
if (!once_p)
{
+ /* XXX Is SELECTED_FRAME OK here? */
+ struct redisplay_interface *rif = FRAME_RIF (SELECTED_FRAME ());
+
destroy_fringe_bitmap (which);
if (rif && rif->define_fringe_bitmap)
@@ -1696,10 +1702,11 @@ init_fringe ()
void
#ifdef HAVE_NTGUI
-w32_init_fringe ()
+w32_init_fringe (rif)
#else /* MAC_OS */
-mac_init_fringe ()
+mac_init_fringe (rif)
#endif
+ struct redisplay_interface *rif;
{
int bt;
@@ -1720,6 +1727,7 @@ w32_reset_fringes ()
{
/* Destroy row bitmaps. */
int bt;
+ struct redisplay_interface *rif = FRAME_RIF (SELECTED_FRAME ());
if (!rif)
return;
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 86a4703d0b7..77d5fd65649 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -51,6 +51,13 @@ Boston, MA 02110-1301, USA. */
#ifdef HAVE_GTK_MULTIDISPLAY
+/* Gtk does not work well without any display open. Emacs may close
+ all its displays. In that case, keep a display around just for
+ the purpose of having one. */
+
+static GdkDisplay *gdpy_def;
+
+
/* Return the GdkDisplay that corresponds to the X display DPY. */
static GdkDisplay *
@@ -147,9 +154,15 @@ xg_display_close (Display *dpy)
break;
}
- if (! new_dpy) return; /* Emacs will exit anyway. */
+ if (new_dpy)
+ gdpy_new = gdk_x11_lookup_xdisplay (new_dpy);
+ else
+ {
+ if (!gdpy_def)
+ gdpy_def = gdk_display_open (gdk_display_get_name (gdpy));
+ gdpy_new = gdpy_def;
+ }
- gdpy_new = gdk_x11_lookup_xdisplay (new_dpy);
gdk_display_manager_set_default_display (gdk_display_manager_get (),
gdpy_new);
}
@@ -2957,10 +2970,9 @@ free_frame_menubar (f)
int xg_ignore_gtk_scrollbar;
-/* SET_SCROLL_BAR_X_WINDOW assumes the second argument fits in
- 32 bits. But we want to store pointers, and they may be larger
- than 32 bits. Keep a mapping from integer index to widget pointers
- to get around the 32 bit limitation. */
+/* Xlib's `Window' fits in 32 bits. But we want to store pointers, and they
+ may be larger than 32 bits. Keep a mapping from integer index to widget
+ pointers to get around the 32 bit limitation. */
static struct
{
@@ -3170,7 +3182,7 @@ xg_create_scroll_bar (f, bar, scroll_callback, scroll_bar_name)
/* Set the cursor to an arrow. */
xg_set_cursor (webox, FRAME_X_DISPLAY_INFO (f)->xg_cursor);
- SET_SCROLL_BAR_X_WINDOW (bar, scroll_id);
+ bar->x_window = scroll_id;
}
/* Make the scroll bar represented by SCROLLBAR_ID visible. */
@@ -3245,7 +3257,7 @@ xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
struct scroll_bar *bar;
int portion, position, whole;
{
- GtkWidget *wscroll = xg_get_widget_from_map (SCROLL_BAR_X_WINDOW (bar));
+ GtkWidget *wscroll = xg_get_widget_from_map (bar->x_window);
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
@@ -3447,6 +3459,7 @@ xg_tool_bar_menu_proxy (toolitem, user_data)
GtkImage *wimage = GTK_IMAGE (gtk_bin_get_child (GTK_BIN (wbutton)));
GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (wbutton));
GtkImageType store_type = gtk_image_get_storage_type (wimage);
+
if (store_type == GTK_IMAGE_STOCK)
{
gchar *stock_id;
@@ -4110,6 +4123,8 @@ xg_initialize ()
we keep it permanently linked in. */
XftInit (0);
#endif
+
+ gdpy_def = NULL;
xg_ignore_gtk_scrollbar = 0;
xg_detached_menus = 0;
xg_menu_cb_list.prev = xg_menu_cb_list.next =
diff --git a/src/image.c b/src/image.c
index 28214642c3a..91be3f4b57e 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1,6 +1,7 @@
/* Functions for image support on window system.
Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -531,7 +532,7 @@ x_create_bitmap_from_file (f, file)
/* Free bitmap B. */
static void
-Free_Bitmap_Record (dpyinfo, bm)
+free_bitmap_record (dpyinfo, bm)
Display_Info *dpyinfo;
Bitmap_Record *bm;
{
@@ -573,7 +574,7 @@ x_destroy_bitmap (f, id)
if (--bm->refcount == 0)
{
BLOCK_INPUT;
- Free_Bitmap_Record (dpyinfo, bm);
+ free_bitmap_record (dpyinfo, bm);
UNBLOCK_INPUT;
}
}
@@ -590,7 +591,7 @@ x_destroy_all_bitmaps (dpyinfo)
for (i = 0; i < dpyinfo->bitmaps_last; i++, bm++)
if (bm->refcount > 0)
- Free_Bitmap_Record (dpyinfo, bm);
+ free_bitmap_record (dpyinfo, bm);
dpyinfo->bitmaps_last = 0;
}
@@ -732,9 +733,9 @@ Lisp_Object Qxbm;
/* Keywords. */
extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile;
-extern Lisp_Object QCdata, QCtype, Qcount;
+extern Lisp_Object QCdata, QCtype;
extern Lisp_Object Qcenter;
-Lisp_Object QCascent, QCmargin, QCrelief;
+Lisp_Object QCascent, QCmargin, QCrelief, Qcount;
Lisp_Object QCconversion, QCcolor_symbols, QCheuristic_mask;
Lisp_Object QCindex, QCmatrix, QCcolor_adjustment, QCmask;
@@ -1317,8 +1318,8 @@ image_ascent (img, face, slice)
{
#ifdef HAVE_NTGUI
/* W32 specific version. Why?. ++kfs */
- ascent = height / 2 - (FONT_DESCENT(face->font)
- - FONT_BASE(face->font)) / 2;
+ ascent = height / 2 - (FONT_DESCENT (face->font)
+ - FONT_BASE (face->font)) / 2;
#else
/* This expression is arranged so that if the image can't be
exactly centered, it will be moved slightly up. This is
@@ -1904,6 +1905,7 @@ lookup_image (f, spec)
struct frame *f;
Lisp_Object spec;
{
+ struct image_cache *c;
struct image *img;
unsigned hash;
struct gcpro gcpro1;
@@ -1914,6 +1916,8 @@ lookup_image (f, spec)
xassert (FRAME_WINDOW_P (f));
xassert (valid_image_p (spec));
+ c = FRAME_X_IMAGE_CACHE (f);
+
GCPRO1 (spec);
/* Look up SPEC in the hash table of the image cache. */
@@ -1980,8 +1984,8 @@ lookup_image (f, spec)
if (INTEGERP (relief))
{
img->relief = XINT (relief);
- img->hmargin += abs (img->relief);
- img->vmargin += abs (img->relief);
+ img->hmargin += eabs (img->relief);
+ img->vmargin += eabs (img->relief);
}
if (! img->background_valid)
@@ -2095,7 +2099,7 @@ forall_images_in_image_cache (f, fn)
/* Load a DLL implementing an image type.
The `image-library-alist' variable associates a symbol,
- identifying an image type, to a list of possible filenames.
+ identifying an image type, to a list of possible filenames.
The function returns NULL if no library could be loaded for
the given image type, or if the library was previously loaded;
else the handle of the DLL. */
@@ -2251,7 +2255,7 @@ x_create_x_image_and_pixmap (f, width, height, depth, ximg, pixmap)
if (*pixmap == NULL)
{
- DWORD err = GetLastError();
+ DWORD err = GetLastError ();
Lisp_Object errcode;
/* All system errors are < 10000, so the following is safe. */
XSETINT (errcode, (int) err);
@@ -2353,7 +2357,7 @@ x_put_x_image (f, ximg, pixmap, width, height)
static unsigned char *slurp_file P_ ((char *, int *));
-/* Find image file FILE. Look in data-directory, then
+/* Find image file FILE. Look in data-directory/images, then
x-bitmap-file-path. Value is the encoded full name of the file
found, or nil if not found. */
@@ -2366,10 +2370,14 @@ x_find_image_file (file)
int fd;
file_found = Qnil;
- search_path = Fcons (Vdata_directory, Vx_bitmap_file_path);
+ /* TODO I think this should use something like image-load-path
+ instead. Unfortunately, that can contain non-string elements. */
+ search_path = Fcons (Fexpand_file_name (build_string ("images"),
+ Vdata_directory),
+ Vx_bitmap_file_path);
GCPRO2 (file_found, search_path);
- /* Try to find FILE in data-directory, then x-bitmap-file-path. */
+ /* Try to find FILE in data-directory/images, then x-bitmap-file-path. */
fd = openp (search_path, file, Qnil, &file_found, Qnil);
if (fd == -1)
@@ -3147,7 +3155,7 @@ convert_mono_to_color_image (f, img, foreground, background)
static void
-Create_Pixmap_From_Bitmap_Data(f, img, data, fg, bg, non_default_colors)
+Create_Pixmap_From_Bitmap_Data (f, img, data, fg, bg, non_default_colors)
struct frame *f;
struct image *img;
char *data;
@@ -5157,7 +5165,7 @@ x_detect_edges (f, img, matrix, color_adjust)
int x, y, i, sum;
for (i = sum = 0; i < 9; ++i)
- sum += abs (matrix[i]);
+ sum += eabs (matrix[i]);
#define COLOR(A, X, Y) ((A) + (Y) * img->width + (X))
@@ -6338,7 +6346,7 @@ png_load (f, img)
simple transparency, we prefer a clipping mask. */
if (!transparent_p)
{
- png_color_16 *image_bg;
+ /* png_color_16 *image_bg; */
Lisp_Object specified_bg
= image_spec_value (img->spec, QCbackground, NULL);
@@ -6708,7 +6716,7 @@ init_jpeg_functions (Lisp_Object libraries)
/* Wrapper since we can't directly assign the function pointer
to another function pointer that was declared more completely easily. */
static boolean
-jpeg_resync_to_restart_wrapper(cinfo, desired)
+jpeg_resync_to_restart_wrapper (cinfo, desired)
j_decompress_ptr cinfo;
int desired;
{
@@ -7806,7 +7814,7 @@ gif_load (f, img)
memsrc.index = 0;
/* Casting return value avoids a GCC warning on W32. */
- gif = (GifFileType *)fn_DGifOpen(&memsrc, gif_read_from_memory);
+ gif = (GifFileType *) fn_DGifOpen (&memsrc, gif_read_from_memory);
if (!gif)
{
image_error ("Cannot open memory source `%s'", img->spec, Qnil);
@@ -8206,6 +8214,418 @@ gif_load (f, img)
/***********************************************************************
+ SVG
+ ***********************************************************************/
+
+#if defined (HAVE_RSVG)
+
+/* Function prototypes. */
+
+static int svg_image_p P_ ((Lisp_Object object));
+static int svg_load P_ ((struct frame *f, struct image *img));
+
+static int svg_load_image P_ ((struct frame *, struct image *,
+ unsigned char *, unsigned int));
+
+/* The symbol `svg' identifying images of this type. */
+
+Lisp_Object Qsvg;
+
+/* Indices of image specification fields in svg_format, below. */
+
+enum svg_keyword_index
+{
+ SVG_TYPE,
+ SVG_DATA,
+ SVG_FILE,
+ SVG_ASCENT,
+ SVG_MARGIN,
+ SVG_RELIEF,
+ SVG_ALGORITHM,
+ SVG_HEURISTIC_MASK,
+ SVG_MASK,
+ SVG_BACKGROUND,
+ SVG_LAST
+};
+
+/* Vector of image_keyword structures describing the format
+ of valid user-defined image specifications. */
+
+static struct image_keyword svg_format[SVG_LAST] =
+{
+ {":type", IMAGE_SYMBOL_VALUE, 1},
+ {":data", IMAGE_STRING_VALUE, 0},
+ {":file", IMAGE_STRING_VALUE, 0},
+ {":ascent", IMAGE_ASCENT_VALUE, 0},
+ {":margin", IMAGE_POSITIVE_INTEGER_VALUE_OR_PAIR, 0},
+ {":relief", IMAGE_INTEGER_VALUE, 0},
+ {":conversion", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
+ {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
+ {":mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0},
+ {":background", IMAGE_STRING_OR_NIL_VALUE, 0}
+};
+
+/* Structure describing the image type `svg'. Its the same type of
+ structure defined for all image formats, handled by emacs image
+ functions. See struct image_type in dispextern.h. */
+
+static struct image_type svg_type =
+{
+ /* An identifier showing that this is an image structure for the SVG format. */
+ &Qsvg,
+ /* Handle to a function that can be used to identify a SVG file. */
+ svg_image_p,
+ /* Handle to function used to load a SVG file. */
+ svg_load,
+ /* Handle to function to free sresources for SVG. */
+ x_clear_image,
+ /* An internal field to link to the next image type in a list of
+ image types, will be filled in when registering the format. */
+ NULL
+};
+
+
+/* Return non-zero if OBJECT is a valid SVG image specification. Do
+ this by calling parse_image_spec and supplying the keywords that
+ identify the SVG format. */
+
+static int
+svg_image_p (object)
+ Lisp_Object object;
+{
+ struct image_keyword fmt[SVG_LAST];
+ bcopy (svg_format, fmt, sizeof fmt);
+
+ if (!parse_image_spec (object, fmt, SVG_LAST, Qsvg))
+ return 0;
+
+ /* Must specify either the :data or :file keyword. */
+ return fmt[SVG_FILE].count + fmt[SVG_DATA].count == 1;
+}
+
+#include <librsvg/rsvg.h>
+
+#ifdef HAVE_NTGUI
+
+/* SVG library functions. */
+DEF_IMGLIB_FN (rsvg_handle_new);
+DEF_IMGLIB_FN (rsvg_handle_set_size_callback);
+DEF_IMGLIB_FN (rsvg_handle_write);
+DEF_IMGLIB_FN (rsvg_handle_close);
+DEF_IMGLIB_FN (rsvg_handle_get_pixbuf);
+DEF_IMGLIB_FN (rsvg_handle_free);
+
+DEF_IMGLIB_FN (gdk_pixbuf_get_width);
+DEF_IMGLIB_FN (gdk_pixbuf_get_height);
+DEF_IMGLIB_FN (gdk_pixbuf_get_pixels);
+DEF_IMGLIB_FN (gdk_pixbuf_get_rowstride);
+DEF_IMGLIB_FN (gdk_pixbuf_get_colorspace);
+DEF_IMGLIB_FN (gdk_pixbuf_get_n_channels);
+DEF_IMGLIB_FN (gdk_pixbuf_get_has_alpha);
+DEF_IMGLIB_FN (gdk_pixbuf_get_bits_per_sample);
+
+DEF_IMGLIB_FN (g_type_init);
+DEF_IMGLIB_FN (g_object_unref);
+DEF_IMGLIB_FN (g_error_free);
+
+Lisp_Object Qgdk_pixbuf, Qglib;
+
+static int
+init_svg_functions (Lisp_Object libraries)
+{
+ HMODULE library, gdklib, glib;
+
+ if (!(glib = w32_delayed_load (libraries, Qglib))
+ || !(gdklib = w32_delayed_load (libraries, Qgdk_pixbuf))
+ || !(library = w32_delayed_load (libraries, Qsvg)))
+ return 0;
+
+ LOAD_IMGLIB_FN (library, rsvg_handle_new);
+ LOAD_IMGLIB_FN (library, rsvg_handle_set_size_callback);
+ LOAD_IMGLIB_FN (library, rsvg_handle_write);
+ LOAD_IMGLIB_FN (library, rsvg_handle_close);
+ LOAD_IMGLIB_FN (library, rsvg_handle_get_pixbuf);
+ LOAD_IMGLIB_FN (library, rsvg_handle_free);
+
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_width);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_height);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_pixels);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_rowstride);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_colorspace);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_n_channels);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_has_alpha);
+ LOAD_IMGLIB_FN (gdklib, gdk_pixbuf_get_bits_per_sample);
+
+ LOAD_IMGLIB_FN (glib, g_type_init);
+ LOAD_IMGLIB_FN (glib, g_object_unref);
+ LOAD_IMGLIB_FN (glib, g_error_free);
+ return 1;
+}
+
+#else
+/* The following aliases for library functions allow dynamic loading
+ to be used on some platforms. */
+#define fn_rsvg_handle_new rsvg_handle_new
+#define fn_rsvg_handle_set_size_callback rsvg_handle_set_size_callback
+#define fn_rsvg_handle_write rsvg_handle_write
+#define fn_rsvg_handle_close rsvg_handle_close
+#define fn_rsvg_handle_get_pixbuf rsvg_handle_get_pixbuf
+#define fn_rsvg_handle_free rsvg_handle_free
+
+#define fn_gdk_pixbuf_get_width gdk_pixbuf_get_width
+#define fn_gdk_pixbuf_get_height gdk_pixbuf_get_height
+#define fn_gdk_pixbuf_get_pixels gdk_pixbuf_get_pixels
+#define fn_gdk_pixbuf_get_rowstride gdk_pixbuf_get_rowstride
+#define fn_gdk_pixbuf_get_colorspace gdk_pixbuf_get_colorspace
+#define fn_gdk_pixbuf_get_n_channels gdk_pixbuf_get_n_channels
+#define fn_gdk_pixbuf_get_has_alpha gdk_pixbuf_get_has_alpha
+#define fn_gdk_pixbuf_get_bits_per_sample gdk_pixbuf_get_bits_per_sample
+
+#define fn_g_type_init g_type_init
+#define fn_g_object_unref g_object_unref
+#define fn_g_error_free g_error_free
+#endif /* !HAVE_NTGUI */
+
+/* Load SVG image IMG for use on frame F. Value is non-zero if
+ successful. this function will go into the svg_type structure, and
+ the prototype thus needs to be compatible with that structure. */
+
+static int
+svg_load (f, img)
+ struct frame *f;
+ struct image *img;
+{
+ int success_p = 0;
+ Lisp_Object file_name;
+
+ /* If IMG->spec specifies a file name, create a non-file spec from it. */
+ file_name = image_spec_value (img->spec, QCfile, NULL);
+ if (STRINGP (file_name))
+ {
+ Lisp_Object file;
+ unsigned char *contents;
+ int size;
+ struct gcpro gcpro1;
+
+ file = x_find_image_file (file_name);
+ GCPRO1 (file);
+ if (!STRINGP (file))
+ {
+ image_error ("Cannot find image file `%s'", file_name, Qnil);
+ UNGCPRO;
+ return 0;
+ }
+
+ /* Read the entire file into memory. */
+ contents = slurp_file (SDATA (file), &size);
+ if (contents == NULL)
+ {
+ image_error ("Error loading SVG image `%s'", img->spec, Qnil);
+ UNGCPRO;
+ return 0;
+ }
+ /* If the file was slurped into memory properly, parse it. */
+ success_p = svg_load_image (f, img, contents, size);
+ xfree (contents);
+ UNGCPRO;
+ }
+ /* Else its not a file, its a lisp object. Load the image from a
+ lisp object rather than a file. */
+ else
+ {
+ Lisp_Object data;
+
+ data = image_spec_value (img->spec, QCdata, NULL);
+ success_p = svg_load_image (f, img, SDATA (data), SBYTES (data));
+ }
+
+ return success_p;
+}
+
+/* svg_load_image is a helper function for svg_load, which does the
+ actual loading given contents and size, apart from frame and image
+ structures, passed from svg_load.
+
+ Uses librsvg to do most of the image processing.
+
+ Returns non-zero when successful. */
+static int
+svg_load_image (f, img, contents, size)
+ /* Pointer to emacs frame structure. */
+ struct frame *f;
+ /* Pointer to emacs image structure. */
+ struct image *img;
+ /* String containing the SVG XML data to be parsed. */
+ unsigned char *contents;
+ /* Size of data in bytes. */
+ unsigned int size;
+{
+ RsvgHandle *rsvg_handle;
+ GError *error = NULL;
+ GdkPixbuf *pixbuf;
+ int width;
+ int height;
+ const guint8 *pixels;
+ int rowstride;
+ XImagePtr ximg;
+ Lisp_Object specified_bg;
+ XColor background;
+ int x;
+ int y;
+
+ /* g_type_init is a glib function that must be called prior to using
+ gnome type library functions. */
+ fn_g_type_init ();
+ /* Make a handle to a new rsvg object. */
+ rsvg_handle = fn_rsvg_handle_new ();
+
+ /* Parse the contents argument and fill in the rsvg_handle. */
+ fn_rsvg_handle_write (rsvg_handle, contents, size, &error);
+ if (error)
+ goto rsvg_error;
+
+ /* The parsing is complete, rsvg_handle is ready to used, close it
+ for further writes. */
+ fn_rsvg_handle_close (rsvg_handle, &error);
+ if (error)
+ goto rsvg_error;
+ /* We can now get a valid pixel buffer from the svg file, if all
+ went ok. */
+ pixbuf = fn_rsvg_handle_get_pixbuf (rsvg_handle);
+ eassert (pixbuf);
+
+ /* Extract some meta data from the svg handle. */
+ width = fn_gdk_pixbuf_get_width (pixbuf);
+ height = fn_gdk_pixbuf_get_height (pixbuf);
+ pixels = fn_gdk_pixbuf_get_pixels (pixbuf);
+ rowstride = fn_gdk_pixbuf_get_rowstride (pixbuf);
+
+ /* Validate the svg meta data. */
+ eassert (fn_gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
+ eassert (fn_gdk_pixbuf_get_n_channels (pixbuf) == 4);
+ eassert (fn_gdk_pixbuf_get_has_alpha (pixbuf));
+ eassert (fn_gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
+
+ /* Try to create a x pixmap to hold the svg pixmap. */
+ if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap))
+ {
+ fn_g_object_unref (pixbuf);
+ return 0;
+ }
+
+ init_color_table ();
+
+ /* Handle alpha channel by combining the image with a background
+ color. */
+ specified_bg = image_spec_value (img->spec, QCbackground, NULL);
+ if (STRINGP (specified_bg)
+ && x_defined_color (f, SDATA (specified_bg), &background, 0))
+ {
+ background.red >>= 8;
+ background.green >>= 8;
+ background.blue >>= 8;
+ }
+ else
+ {
+#ifdef HAVE_X_WINDOWS
+ background.pixel = FRAME_BACKGROUND_PIXEL (f);
+ x_query_color (f, &background);
+
+ /* SVG pixmaps specify transparency in the last byte, so right
+ shift 8 bits to get rid of it, since emacs doesn't support
+ transparency. */
+ background.red >>= 8;
+ background.green >>= 8;
+ background.blue >>= 8;
+#elif defined (MAC_OS)
+ background.pixel = FRAME_BACKGROUND_PIXEL (f);
+ background.red = RED_FROM_ULONG (background.pixel);
+ background.green = GREEN_FROM_ULONG (background.pixel);
+ background.blue = BLUE_FROM_ULONG (background.pixel);
+#elif defined (HAVE_NTGUI)
+ background.pixel = FRAME_BACKGROUND_PIXEL (f);
+#if 0 /* W32 TODO : Colormap support. */
+ x_query_color (f, &background);
+#endif
+
+ /* SVG pixmaps specify transparency in the last byte, so right
+ shift 8 bits to get rid of it, since emacs doesn't support
+ transparency. */
+ background.red >>= 8;
+ background.green >>= 8;
+ background.blue >>= 8;
+#else /* not HAVE_X_WINDOWS && not MAC_OS*/
+#error FIXME
+#endif
+ }
+
+ /* This loop handles opacity values, since Emacs assumes
+ non-transparent images. Each pixel must be "flattened" by
+ calculating the resulting color, given the transparency of the
+ pixel, and the image background color. */
+ for (y = 0; y < height; ++y)
+ {
+ for (x = 0; x < width; ++x)
+ {
+ unsigned red;
+ unsigned green;
+ unsigned blue;
+ unsigned opacity;
+
+ red = *pixels++;
+ green = *pixels++;
+ blue = *pixels++;
+ opacity = *pixels++;
+
+ red = ((red * opacity)
+ + (background.red * ((1 << 8) - opacity)));
+ green = ((green * opacity)
+ + (background.green * ((1 << 8) - opacity)));
+ blue = ((blue * opacity)
+ + (background.blue * ((1 << 8) - opacity)));
+
+ XPutPixel (ximg, x, y, lookup_rgb_color (f, red, green, blue));
+ }
+
+ pixels += rowstride - 4 * width;
+ }
+
+#ifdef COLOR_TABLE_SUPPORT
+ /* Remember colors allocated for this image. */
+ img->colors = colors_in_color_table (&img->ncolors);
+ free_color_table ();
+#endif /* COLOR_TABLE_SUPPORT */
+
+ fn_g_object_unref (pixbuf);
+
+ img->width = width;
+ img->height = height;
+
+ /* Maybe fill in the background field while we have ximg handy.
+ Casting avoids a GCC warning. */
+ IMAGE_BACKGROUND (img, f, (XImagePtr_or_DC)ximg);
+
+ /* Put the image into the pixmap, then free the X image and its
+ buffer. */
+ x_put_x_image (f, ximg, img->pixmap, width, height);
+ x_destroy_x_image (ximg);
+
+ return 1;
+
+ rsvg_error:
+ /* FIXME: Use error->message so the user knows what is the actual
+ problem with the image. */
+ image_error ("Error parsing SVG image `%s'", img->spec, Qnil);
+ fn_g_error_free (error);
+ return 0;
+}
+
+#endif /* defined (HAVE_RSVG) */
+
+
+
+
+/***********************************************************************
Ghostscript
***********************************************************************/
@@ -8596,6 +9016,11 @@ of `image-library-alist', which see). */)
return CHECK_LIB_AVAILABLE (&png_type, init_png_functions, libraries);
#endif
+#if defined (HAVE_RSVG)
+ if (EQ (type, Qsvg))
+ return CHECK_LIB_AVAILABLE (&svg_type, init_svg_functions, libraries);
+#endif
+
#ifdef HAVE_GHOSTSCRIPT
if (EQ (type, Qpostscript))
return CHECK_LIB_AVAILABLE (&gs_type, init_gs_functions, libraries);
@@ -8655,15 +9080,18 @@ non-numeric, there is no explicit limit on the size of images. */);
Qpbm = intern ("pbm");
staticpro (&Qpbm);
- ADD_IMAGE_TYPE(Qpbm);
+ ADD_IMAGE_TYPE (Qpbm);
Qxbm = intern ("xbm");
staticpro (&Qxbm);
- ADD_IMAGE_TYPE(Qxbm);
+ ADD_IMAGE_TYPE (Qxbm);
define_image_type (&xbm_type, 1);
define_image_type (&pbm_type, 1);
+ Qcount = intern ("count");
+ staticpro (&Qcount);
+
QCascent = intern (":ascent");
staticpro (&QCascent);
QCmargin = intern (":margin");
@@ -8697,7 +9125,7 @@ non-numeric, there is no explicit limit on the size of images. */);
Qpostscript = intern ("postscript");
staticpro (&Qpostscript);
#ifdef HAVE_GHOSTSCRIPT
- ADD_IMAGE_TYPE(Qpostscript);
+ ADD_IMAGE_TYPE (Qpostscript);
QCloader = intern (":loader");
staticpro (&QCloader);
QCbounding_box = intern (":bounding-box");
@@ -8711,33 +9139,45 @@ non-numeric, there is no explicit limit on the size of images. */);
#if defined (HAVE_XPM) || defined (MAC_OS)
Qxpm = intern ("xpm");
staticpro (&Qxpm);
- ADD_IMAGE_TYPE(Qxpm);
+ ADD_IMAGE_TYPE (Qxpm);
#endif
#if defined (HAVE_JPEG) || defined (MAC_OS)
Qjpeg = intern ("jpeg");
staticpro (&Qjpeg);
- ADD_IMAGE_TYPE(Qjpeg);
+ ADD_IMAGE_TYPE (Qjpeg);
#endif
#if defined (HAVE_TIFF) || defined (MAC_OS)
Qtiff = intern ("tiff");
staticpro (&Qtiff);
- ADD_IMAGE_TYPE(Qtiff);
+ ADD_IMAGE_TYPE (Qtiff);
#endif
#if defined (HAVE_GIF) || defined (MAC_OS)
Qgif = intern ("gif");
staticpro (&Qgif);
- ADD_IMAGE_TYPE(Qgif);
+ ADD_IMAGE_TYPE (Qgif);
#endif
#if defined (HAVE_PNG) || defined (MAC_OS)
Qpng = intern ("png");
staticpro (&Qpng);
- ADD_IMAGE_TYPE(Qpng);
+ ADD_IMAGE_TYPE (Qpng);
#endif
+#if defined (HAVE_RSVG)
+ Qsvg = intern ("svg");
+ staticpro (&Qsvg);
+ ADD_IMAGE_TYPE (Qsvg);
+#ifdef HAVE_NTGUI
+ Qgdk_pixbuf = intern ("gdk-pixbuf");
+ staticpro (&Qgdk_pixbuf);
+ Qglib = intern ("glib");
+ staticpro (&Qglib);
+#endif /* HAVE_NTGUI */
+#endif /* HAVE_RSVG */
+
defsubr (&Sinit_image_library);
defsubr (&Sclear_image_cache);
defsubr (&Simage_refresh);
diff --git a/src/indent.c b/src/indent.c
index b3c1d0cf81a..2d48dc746d7 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -20,6 +20,8 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include <config.h>
+#include <stdio.h>
+
#include "lisp.h"
#include "buffer.h"
#include "charset.h"
@@ -37,7 +39,7 @@ Boston, MA 02110-1301, USA. */
/* Indentation can insert tabs if this is non-zero;
otherwise always uses spaces. */
-int indent_tabs_mode;
+static int indent_tabs_mode;
#define CR 015
@@ -47,15 +49,15 @@ int indent_tabs_mode;
Some things in set last_known_column_point to -1
to mark the memorized value as invalid. */
-double last_known_column;
+static double last_known_column;
/* Value of point when current_column was called. */
-int last_known_column_point;
+EMACS_INT last_known_column_point;
/* Value of MODIFF when current_column was called. */
-int last_known_column_modified;
+static int last_known_column_modified;
static double current_column_1 P_ ((void));
static double position_indentation P_ ((int));
@@ -63,7 +65,7 @@ static double position_indentation P_ ((int));
/* Cache of beginning of line found by the last call of
current_column. */
-int current_column_bol_cache;
+static EMACS_INT current_column_bol_cache;
/* Get the display table to use for the current buffer. */
@@ -212,16 +214,17 @@ width_run_cache_on_off ()
characters immediately following, then *NEXT_BOUNDARY_P
will equal the return value. */
-int
+EMACS_INT
skip_invisible (pos, next_boundary_p, to, window)
- int pos;
- int *next_boundary_p;
- int to;
+ EMACS_INT pos;
+ EMACS_INT *next_boundary_p;
+ EMACS_INT to;
Lisp_Object window;
{
Lisp_Object prop, position, overlay_limit, proplimit;
Lisp_Object buffer, tmp;
- int end, inv_p;
+ EMACS_INT end;
+ int inv_p;
XSETFASTINT (position, pos);
XSETBUFFER (buffer, current_buffer);
@@ -508,16 +511,16 @@ current_column ()
static double
current_column_1 ()
{
- register int tab_width = XINT (current_buffer->tab_width);
+ register EMACS_INT tab_width = XINT (current_buffer->tab_width);
register int ctl_arrow = !NILP (current_buffer->ctl_arrow);
register struct Lisp_Char_Table *dp = buffer_display_table ();
int multibyte = !NILP (current_buffer->enable_multibyte_characters);
/* Start the scan at the beginning of this line with column number 0. */
- register int col = 0;
- int scan, scan_byte;
- int next_boundary;
- int opoint = PT, opoint_byte = PT_BYTE;
+ register EMACS_INT col = 0;
+ EMACS_INT scan, scan_byte;
+ EMACS_INT next_boundary;
+ EMACS_INT opoint = PT, opoint_byte = PT_BYTE;
scan_newline (PT, PT_BYTE, BEGV, BEGV_BYTE, -1, 1);
current_column_bol_cache = PT;
@@ -806,13 +809,13 @@ static double
position_indentation (pos_byte)
register int pos_byte;
{
- register int column = 0;
- register int tab_width = XINT (current_buffer->tab_width);
+ register EMACS_INT column = 0;
+ register EMACS_INT tab_width = XINT (current_buffer->tab_width);
register unsigned char *p;
register unsigned char *stop;
unsigned char *start;
- int next_boundary_byte = pos_byte;
- int ceiling = next_boundary_byte;
+ EMACS_INT next_boundary_byte = pos_byte;
+ EMACS_INT ceiling = next_boundary_byte;
if (tab_width <= 0 || tab_width > 1000) tab_width = 8;
@@ -827,7 +830,7 @@ position_indentation (pos_byte)
{
while (p == stop)
{
- int stop_pos_byte;
+ EMACS_INT stop_pos_byte;
/* If we have updated P, set POS_BYTE to match.
The first time we enter the loop, POS_BYTE is already right. */
@@ -838,8 +841,8 @@ position_indentation (pos_byte)
return column;
if (pos_byte == next_boundary_byte)
{
- int next_boundary;
- int pos = BYTE_TO_CHAR (pos_byte);
+ EMACS_INT next_boundary;
+ EMACS_INT pos = BYTE_TO_CHAR (pos_byte);
pos = skip_invisible (pos, &next_boundary, ZV, Qnil);
pos_byte = CHAR_TO_BYTE (pos);
next_boundary_byte = CHAR_TO_BYTE (next_boundary);
@@ -930,19 +933,19 @@ The return value is the current column. */)
(column, force)
Lisp_Object column, force;
{
- register int pos;
- register int col = current_column ();
- register int goal;
- register int end;
+ register EMACS_INT pos;
+ register EMACS_INT col = current_column ();
+ register EMACS_INT goal;
+ register EMACS_INT end;
register int tab_width = XINT (current_buffer->tab_width);
register int ctl_arrow = !NILP (current_buffer->ctl_arrow);
register struct Lisp_Char_Table *dp = buffer_display_table ();
register int multibyte = !NILP (current_buffer->enable_multibyte_characters);
Lisp_Object val;
- int prev_col = 0;
+ EMACS_INT prev_col = 0;
int c = 0;
- int next_boundary, pos_byte;
+ EMACS_INT next_boundary, pos_byte;
if (tab_width <= 0 || tab_width > 1000) tab_width = 8;
CHECK_NATNUM (column);
@@ -968,7 +971,7 @@ The return value is the current column. */)
{
while (pos == next_boundary)
{
- int prev = pos;
+ EMACS_INT prev = pos;
pos = skip_invisible (pos, &next_boundary, end, Qnil);
if (pos != prev)
pos_byte = CHAR_TO_BYTE (pos);
@@ -1088,7 +1091,7 @@ The return value is the current column. */)
and scan through it again. */
if (!NILP (force) && col > goal && c == '\t' && prev_col < goal)
{
- int goal_pt, goal_pt_byte;
+ EMACS_INT goal_pt, goal_pt_byte;
/* Insert spaces in front of the tab to reach GOAL. Do this
first so that a marker at the end of the tab gets
@@ -1188,19 +1191,19 @@ struct position val_compute_motion;
struct position *
compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width, hscroll, tab_offset, win)
- int from, fromvpos, fromhpos, to, tovpos, tohpos;
+ EMACS_INT from, fromvpos, fromhpos, to, tovpos, tohpos;
int did_motion;
- register int width;
- int hscroll, tab_offset;
+ EMACS_INT width;
+ EMACS_INT hscroll, tab_offset;
struct window *win;
{
- register int hpos = fromhpos;
- register int vpos = fromvpos;
+ register EMACS_INT hpos = fromhpos;
+ register EMACS_INT vpos = fromvpos;
- register int pos;
- int pos_byte;
+ register EMACS_INT pos;
+ EMACS_INT pos_byte;
register int c = 0;
- register int tab_width = XFASTINT (current_buffer->tab_width);
+ register EMACS_INT tab_width = XFASTINT (current_buffer->tab_width);
register int ctl_arrow = !NILP (current_buffer->ctl_arrow);
register struct Lisp_Char_Table *dp = window_display_table (win);
int selective
@@ -1212,33 +1215,33 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
? XVECTOR (DISP_INVIS_VECTOR (dp))->size : 0);
/* The next location where the `invisible' property changes, or an
overlay starts or ends. */
- int next_boundary = from;
+ EMACS_INT next_boundary = from;
/* For computing runs of characters with similar widths.
Invariant: width_run_width is zero, or all the characters
from width_run_start to width_run_end have a fixed width of
width_run_width. */
- int width_run_start = from;
- int width_run_end = from;
- int width_run_width = 0;
+ EMACS_INT width_run_start = from;
+ EMACS_INT width_run_end = from;
+ EMACS_INT width_run_width = 0;
Lisp_Object *width_table;
Lisp_Object buffer;
/* The next buffer pos where we should consult the width run cache. */
- int next_width_run = from;
+ EMACS_INT next_width_run = from;
Lisp_Object window;
int multibyte = !NILP (current_buffer->enable_multibyte_characters);
/* If previous char scanned was a wide character,
this is the column where it ended. Otherwise, this is 0. */
- int wide_column_end_hpos = 0;
- int prev_pos; /* Previous buffer position. */
- int prev_pos_byte; /* Previous buffer position. */
- int prev_hpos = 0;
- int prev_vpos = 0;
- int contin_hpos; /* HPOS of last column of continued line. */
- int prev_tab_offset; /* Previous tab offset. */
- int continuation_glyph_width;
+ EMACS_INT wide_column_end_hpos = 0;
+ EMACS_INT prev_pos; /* Previous buffer position. */
+ EMACS_INT prev_pos_byte; /* Previous buffer position. */
+ EMACS_INT prev_hpos = 0;
+ EMACS_INT prev_vpos = 0;
+ EMACS_INT contin_hpos; /* HPOS of last column of continued line. */
+ EMACS_INT prev_tab_offset; /* Previous tab offset. */
+ EMACS_INT continuation_glyph_width;
XSETBUFFER (buffer, current_buffer);
XSETWINDOW (window, win);
@@ -1284,8 +1287,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
{
while (pos == next_boundary)
{
- int pos_here = pos;
- int newpos;
+ EMACS_INT pos_here = pos;
+ EMACS_INT newpos;
/* Don't skip invisible if we are already at the margin. */
if (vpos > tovpos || (vpos == tovpos && hpos >= tohpos))
@@ -1883,23 +1886,23 @@ struct position val_vmotion;
struct position *
vmotion (from, vtarget, w)
- register int from, vtarget;
+ register EMACS_INT from, vtarget;
struct window *w;
{
- int hscroll = XINT (w->hscroll);
+ EMACS_INT hscroll = XINT (w->hscroll);
struct position pos;
/* vpos is cumulative vertical position, changed as from is changed */
register int vpos = 0;
- int prevline;
- register int first;
- int from_byte;
- int lmargin = hscroll > 0 ? 1 - hscroll : 0;
+ EMACS_INT prevline;
+ register EMACS_INT first;
+ EMACS_INT from_byte;
+ EMACS_INT lmargin = hscroll > 0 ? 1 - hscroll : 0;
int selective
= (INTEGERP (current_buffer->selective_display)
? XINT (current_buffer->selective_display)
: !NILP (current_buffer->selective_display) ? -1 : 0);
Lisp_Object window;
- int start_hpos = 0;
+ EMACS_INT start_hpos = 0;
int did_motion;
/* This is the object we use for fetching character properties. */
Lisp_Object text_prop_object;
@@ -2156,8 +2159,7 @@ void
syms_of_indent ()
{
DEFVAR_BOOL ("indent-tabs-mode", &indent_tabs_mode,
- doc: /* *Indentation can insert tabs if this is non-nil.
-Setting this variable automatically makes it local to the current buffer. */);
+ doc: /* *Indentation can insert tabs if this is non-nil. */);
indent_tabs_mode = 1;
defsubr (&Scurrent_indentation);
diff --git a/src/indent.h b/src/indent.h
index 2e873769603..95cf23aaef1 100644
--- a/src/indent.h
+++ b/src/indent.h
@@ -39,25 +39,31 @@ Boston, MA 02110-1301, USA. */
struct position
{
- int bufpos;
- int bytepos;
- int hpos;
- int vpos;
- int prevhpos;
- int contin;
+ EMACS_INT bufpos;
+ EMACS_INT bytepos;
+ EMACS_INT hpos;
+ EMACS_INT vpos;
+ EMACS_INT prevhpos;
+ EMACS_INT contin;
/* Number of characters we have already handled
from the before and after strings at this position. */
- int ovstring_chars_done;
- int tab_offset;
+ EMACS_INT ovstring_chars_done;
+ EMACS_INT tab_offset;
};
-struct position *compute_motion P_ ((int, int, int, int, int, int, int,
- int, int, int, struct window *));
-struct position *vmotion P_ ((int, int, struct window *));
-int skip_invisible P_ ((int, int *, int, Lisp_Object));
+struct position *compute_motion P_ ((EMACS_INT from, EMACS_INT fromvpos,
+ EMACS_INT fromhpos, int did_motion,
+ EMACS_INT to, EMACS_INT tovpos,
+ EMACS_INT tohpos,
+ EMACS_INT width, EMACS_INT hscroll,
+ EMACS_INT tab_offset, struct window *));
+struct position *vmotion P_ ((EMACS_INT from, EMACS_INT vtarget,
+ struct window *));
+EMACS_INT skip_invisible P_ ((EMACS_INT pos, EMACS_INT *next_boundary_p,
+ EMACS_INT to, Lisp_Object window));
/* Value of point when current_column was called */
-extern int last_known_column_point;
+extern EMACS_INT last_known_column_point;
/* Functions for dealing with the column cache. */
diff --git a/src/insdel.c b/src/insdel.c
index cd8e2738f9a..5cde53864b7 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -415,13 +415,8 @@ adjust_markers_for_insert (from, from_byte, to, to_byte, before_markers)
for (m = BUF_MARKERS (current_buffer); m; m = m->next)
{
- /* In a single-byte buffer, a marker's two positions must be
- equal. */
- if (Z == Z_BYTE)
- {
- if (m->charpos != m->bytepos)
- abort ();
- }
+ eassert (m->bytepos >= m->charpos
+ && m->bytepos - m->charpos <= Z_BYTE - Z);
if (m->bytepos == from_byte)
{
@@ -468,9 +463,7 @@ adjust_point (nchars, nbytes)
BUF_PT_BYTE (current_buffer) += nbytes;
/* In a single-byte buffer, the two positions must be equal. */
- if (ZV == ZV_BYTE
- && PT != PT_BYTE)
- abort ();
+ eassert (PT_BYTE >= PT && PT_BYTE - PT <= ZV_BYTE - ZV);
}
/* Adjust markers for a replacement of a text at FROM (FROM_BYTE) of
diff --git a/src/intervals.c b/src/intervals.c
index a695976b8b7..639abcf3491 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -427,7 +427,7 @@ balance_an_interval (i)
/* Since the left child is longer, there must be one. */
new_diff = i->total_length - i->left->total_length
+ RIGHT_TOTAL_LENGTH (i->left) - LEFT_TOTAL_LENGTH (i->left);
- if (abs (new_diff) >= old_diff)
+ if (eabs (new_diff) >= old_diff)
break;
i = rotate_right (i);
balance_an_interval (i->right);
@@ -437,7 +437,7 @@ balance_an_interval (i)
/* Since the right child is longer, there must be one. */
new_diff = i->total_length - i->right->total_length
+ LEFT_TOTAL_LENGTH (i->right) - RIGHT_TOTAL_LENGTH (i->right);
- if (abs (new_diff) >= -old_diff)
+ if (eabs (new_diff) >= -old_diff)
break;
i = rotate_left (i);
balance_an_interval (i->left);
diff --git a/src/keyboard.c b/src/keyboard.c
index ffba913fc55..527a4151ba9 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -23,13 +23,13 @@ Boston, MA 02110-1301, USA. */
#include <config.h>
#include <signal.h>
#include <stdio.h>
+#include "lisp.h"
#include "termchar.h"
#include "termopts.h"
-#include "lisp.h"
+#include "frame.h"
#include "termhooks.h"
#include "macros.h"
#include "keyboard.h"
-#include "frame.h"
#include "window.h"
#include "commands.h"
#include "buffer.h"
@@ -59,7 +59,6 @@ Boston, MA 02110-1301, USA. */
#endif /* not MSDOS */
#include "syssignal.h"
-#include "systty.h"
#include <sys/types.h>
#ifdef HAVE_UNISTD_H
@@ -97,9 +96,6 @@ volatile int interrupt_input_blocked;
int interrupt_input_pending;
-/* File descriptor to use for input. */
-extern int input_fd;
-
#ifdef HAVE_WINDOW_SYSTEM
/* Make all keyboard buffers much bigger when using X windows. */
#ifdef MAC_OS8
@@ -112,9 +108,6 @@ extern int input_fd;
#define KBD_BUFFER_SIZE 4096
#endif /* No X-windows */
-#undef abs
-#define abs(x) ((x) >= 0 ? (x) : -(x))
-
/* Following definition copied from eval.c */
struct backtrace
@@ -167,14 +160,7 @@ int raw_keybuf_count;
#define GROW_RAW_KEYBUF \
if (raw_keybuf_count == XVECTOR (raw_keybuf)->size) \
- { \
- int newsize = 2 * XVECTOR (raw_keybuf)->size; \
- Lisp_Object new; \
- new = Fmake_vector (make_number (newsize), Qnil); \
- bcopy (XVECTOR (raw_keybuf)->contents, XVECTOR (new)->contents, \
- raw_keybuf_count * sizeof (Lisp_Object)); \
- raw_keybuf = new; \
- }
+ raw_keybuf = larger_vector (raw_keybuf, raw_keybuf_count * 2, Qnil) \
/* Number of elements of this_command_keys
that precede this key sequence. */
@@ -426,16 +412,6 @@ Lisp_Object Vecho_keystrokes;
/* Form to evaluate (if non-nil) when Emacs is started. */
Lisp_Object Vtop_level;
-/* User-supplied table to translate input characters. */
-Lisp_Object Vkeyboard_translate_table;
-
-/* Keymap mapping ASCII function key sequences onto their preferred forms. */
-extern Lisp_Object Vfunction_key_map;
-
-/* Another keymap that maps key sequences into key sequences.
- This one takes precedence over ordinary definitions. */
-extern Lisp_Object Vkey_translation_map;
-
/* If non-nil, this implements the current input method. */
Lisp_Object Vinput_method_function;
Lisp_Object Qinput_method_function;
@@ -459,6 +435,12 @@ Lisp_Object Qpre_command_hook, Vpre_command_hook;
Lisp_Object Qpost_command_hook, Vpost_command_hook;
Lisp_Object Qcommand_hook_internal, Vcommand_hook_internal;
+/* Parent keymap of terminal-local function-key-map instances. */
+Lisp_Object Vfunction_key_map;
+
+/* Keymap of key translations that can override keymaps. */
+Lisp_Object Vkey_translation_map;
+
/* List of deferred actions to be performed at a later time.
The precise format isn't relevant here; we just check whether it is nil. */
Lisp_Object Vdeferred_action_list;
@@ -476,11 +458,6 @@ FILE *dribble;
/* Nonzero if input is available. */
int input_pending;
-/* 1 if should obey 0200 bit in input chars as "Meta", 2 if should
- keep 0200 bit in input chars. 0 to ignore the 0200 bit. */
-
-int meta_key;
-
extern char *pending_malloc_warning;
/* Circular buffer for pre-read keyboard input. */
@@ -522,7 +499,7 @@ Lisp_Object Qmake_frame_visible;
Lisp_Object Qselect_window;
Lisp_Object Qhelp_echo;
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
Lisp_Object Qmouse_fixup_help_message;
#endif
@@ -610,9 +587,6 @@ int interrupt_input;
/* Nonzero while interrupts are temporarily deferred during redisplay. */
int interrupts_deferred;
-/* Nonzero means use ^S/^Q for flow control. */
-int flow_control;
-
/* Allow m- file to inhibit use of FIONREAD. */
#ifdef BROKEN_FIONREAD
#undef FIONREAD
@@ -678,7 +652,7 @@ static Lisp_Object read_char_x_menu_prompt ();
static Lisp_Object read_char_minibuf_menu_prompt P_ ((int, int,
Lisp_Object *));
static Lisp_Object make_lispy_event P_ ((struct input_event *));
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
static Lisp_Object make_lispy_movement P_ ((struct frame *, Lisp_Object,
enum scroll_bar_part,
Lisp_Object, Lisp_Object,
@@ -695,8 +669,11 @@ static void save_getcjmp ();
static void restore_getcjmp P_ ((jmp_buf));
static Lisp_Object apply_modifiers P_ ((int, Lisp_Object));
static void clear_event P_ ((struct input_event *));
-static void any_kboard_state P_ ((void));
+#ifdef MULTI_KBOARD
+static Lisp_Object restore_kboard_configuration P_ ((Lisp_Object));
+#endif
static SIGTYPE interrupt_signal P_ ((int signalnum));
+static void handle_interrupt P_ ((void));
static void timer_start_idle P_ ((void));
static void timer_stop_idle P_ ((void));
static void timer_resume_idle P_ ((void));
@@ -1062,24 +1039,20 @@ This function is called by the editor initialization to begin editing. */)
like it is done in the splash screen display, we have to
make sure that we restore single_kboard as command_loop_1
would have done if it were left normally. */
- record_unwind_protect (recursive_edit_unwind,
- Fcons (buffer, single_kboard ? Qt : Qnil));
+ if (command_loop_level > 0)
+ temporarily_switch_to_single_kboard (SELECTED_FRAME ());
+ record_unwind_protect (recursive_edit_unwind, buffer);
recursive_edit_1 ();
return unbind_to (count, Qnil);
}
Lisp_Object
-recursive_edit_unwind (info)
- Lisp_Object info;
+recursive_edit_unwind (buffer)
+ Lisp_Object buffer;
{
- if (BUFFERP (XCAR (info)))
- Fset_buffer (XCAR (info));
-
- if (NILP (XCDR (info)))
- any_kboard_state ();
- else
- single_kboard_state ();
+ if (BUFFERP (buffer))
+ Fset_buffer (buffer);
command_loop_level--;
update_mode_lines = 1;
@@ -1087,6 +1060,8 @@ recursive_edit_unwind (info)
}
+#if 0 /* These two functions are now replaced with
+ temporarily_switch_to_single_kboard. */
static void
any_kboard_state ()
{
@@ -1117,6 +1092,7 @@ single_kboard_state ()
single_kboard = 1;
#endif
}
+#endif
/* If we're in single_kboard state for kboard KBOARD,
get out of it. */
@@ -1144,8 +1120,8 @@ struct kboard_stack
static struct kboard_stack *kboard_stack;
void
-push_frame_kboard (f)
- FRAME_PTR f;
+push_kboard (k)
+ struct kboard *k;
{
#ifdef MULTI_KBOARD
struct kboard_stack *p
@@ -1155,20 +1131,110 @@ push_frame_kboard (f)
p->kboard = current_kboard;
kboard_stack = p;
- current_kboard = FRAME_KBOARD (f);
+ current_kboard = k;
#endif
}
void
-pop_frame_kboard ()
+pop_kboard ()
{
#ifdef MULTI_KBOARD
+ struct terminal *t;
struct kboard_stack *p = kboard_stack;
- current_kboard = p->kboard;
+ int found = 0;
+ for (t = terminal_list; t; t = t->next_terminal)
+ {
+ if (t->kboard == p->kboard)
+ {
+ current_kboard = p->kboard;
+ found = 1;
+ break;
+ }
+ }
+ if (!found)
+ {
+ /* The terminal we remembered has been deleted. */
+ current_kboard = FRAME_KBOARD (SELECTED_FRAME ());
+ single_kboard = 0;
+ }
kboard_stack = p->next;
xfree (p);
#endif
}
+
+/* Switch to single_kboard mode, making current_kboard the only KBOARD
+ from which further input is accepted. If F is non-nil, set its
+ KBOARD as the current keyboard.
+
+ This function uses record_unwind_protect to return to the previous
+ state later.
+
+ If Emacs is already in single_kboard mode, and F's keyboard is
+ locked, then this function will throw an errow. */
+
+void
+temporarily_switch_to_single_kboard (f)
+ struct frame *f;
+{
+#ifdef MULTI_KBOARD
+ int was_locked = single_kboard;
+ if (was_locked)
+ {
+ if (f != NULL && FRAME_KBOARD (f) != current_kboard)
+ /* We can not switch keyboards while in single_kboard mode.
+ In rare cases, Lisp code may call `recursive-edit' (or
+ `read-minibuffer' or `y-or-n-p') after it switched to a
+ locked frame. For example, this is likely to happen
+ when server.el connects to a new terminal while Emacs is in
+ single_kboard mode. It is best to throw an error instead
+ of presenting the user with a frozen screen. */
+ error ("Terminal %d is locked, cannot read from it",
+ FRAME_TERMINAL (f)->id);
+ else
+ /* This call is unnecessary, but helps
+ `restore_kboard_configuration' discover if somebody changed
+ `current_kboard' behind our back. */
+ push_kboard (current_kboard);
+ }
+ else if (f != NULL)
+ current_kboard = FRAME_KBOARD (f);
+ single_kboard = 1;
+ record_unwind_protect (restore_kboard_configuration,
+ (was_locked ? Qt : Qnil));
+#endif
+}
+
+#if 0 /* This function is not needed anymore. */
+void
+record_single_kboard_state ()
+{
+ if (single_kboard)
+ push_kboard (current_kboard);
+ record_unwind_protect (restore_kboard_configuration,
+ (single_kboard ? Qt : Qnil));
+}
+#endif
+
+#ifdef MULTI_KBOARD
+static Lisp_Object
+restore_kboard_configuration (was_locked)
+ Lisp_Object was_locked;
+{
+ if (NILP (was_locked))
+ single_kboard = 0;
+ else
+ {
+ struct kboard *prev = current_kboard;
+ single_kboard = 1;
+ pop_kboard ();
+ /* The pop should not change the kboard. */
+ if (single_kboard && current_kboard != prev)
+ abort ();
+ }
+ return Qnil;
+}
+#endif
+
/* Handle errors that are not handled at inner levels
by printing an error message and returning to the editor command loop. */
@@ -1216,10 +1282,12 @@ cmd_error (data)
Vquit_flag = Qnil;
Vinhibit_quit = Qnil;
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
#ifdef MULTI_KBOARD
if (command_loop_level == 0 && minibuf_level == 0)
any_kboard_state ();
#endif
+#endif
return make_number (0);
}
@@ -1250,16 +1318,12 @@ cmd_error_internal (data, context)
/* Use user's specified output function if any. */
if (!NILP (Vcommand_error_function))
call3 (Vcommand_error_function, data,
- build_string (context ? context : ""),
+ context ? build_string (context) : empty_unibyte_string,
Vsignaling_function);
/* If the window system or terminal frame hasn't been initialized
yet, or we're not interactive, write the message to stderr and exit. */
else if (!sf->glyphs_initialized_p
- /* This is the case of the frame dumped with Emacs, when we're
- running under a window system. */
- || (!NILP (Vwindow_system)
- && !inhibit_window_system
- && FRAME_TERMCAP_P (sf))
+ || FRAME_INITIAL_P (sf)
|| noninteractive)
{
print_error_message (data, Qexternal_debugging_output,
@@ -1302,10 +1366,12 @@ command_loop ()
while (1)
{
internal_catch (Qtop_level, top_level_1, Qnil);
- /* Reset single_kboard in case top-level set it while
- evaluating an -f option, or we are stuck there for some
- other reason. */
- any_kboard_state ();
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
+ /* Reset single_kboard in case top-level set it while
+ evaluating an -f option, or we are stuck there for some
+ other reason. */
+ any_kboard_state ();
+#endif
internal_catch (Qtop_level, command_loop_2, Qnil);
executing_kbd_macro = Qnil;
@@ -1391,7 +1457,7 @@ DEFUN ("abort-recursive-edit", Fabort_recursive_edit, Sabort_recursive_edit, 0,
return Qnil;
}
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
/* Restore mouse tracking enablement. See Ftrack_mouse for the only use
of this function. */
@@ -1467,7 +1533,7 @@ some_mouse_moved ()
return 0;
}
-#endif /* HAVE_MOUSE */
+#endif /* HAVE_MOUSE || HAVE_GPM */
/* This is the actual command reading loop,
sans error-handling encapsulation. */
@@ -1500,10 +1566,12 @@ command_loop_1 ()
int no_direct;
int prev_modiff = 0;
struct buffer *prev_buffer = NULL;
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
#ifdef MULTI_KBOARD
int was_locked = single_kboard;
#endif
- int already_adjusted;
+#endif
+ int already_adjusted = 0;
current_kboard->Vprefix_arg = Qnil;
current_kboard->Vlast_prefix_arg = Qnil;
@@ -1590,11 +1658,6 @@ command_loop_1 ()
}
}
-#ifdef C_ALLOCA
- alloca (0); /* Cause a garbage collection now */
- /* Since we can free the most stuff here. */
-#endif /* C_ALLOCA */
-
#if 0
/* Select the frame that the last event came from. Usually,
switch-frame events will take care of this, but if some lisp
@@ -1966,10 +2029,11 @@ command_loop_1 ()
if (!NILP (current_kboard->defining_kbd_macro)
&& NILP (current_kboard->Vprefix_arg))
finalize_kbd_macro_chars ();
-
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
#ifdef MULTI_KBOARD
if (!was_locked)
- any_kboard_state ();
+ any_kboard_state ();
+#endif
#endif
}
}
@@ -2208,7 +2272,10 @@ void
start_polling ()
{
#ifdef POLL_FOR_INPUT
- if (read_socket_hook && !interrupt_input)
+ /* XXX This condition was (read_socket_hook && !interrupt_input),
+ but read_socket_hook is not global anymore. Let's pretend that
+ it's always set. */
+ if (!interrupt_input)
{
/* Turn alarm handling on unconditionally. It might have
been turned off in process.c. */
@@ -2242,7 +2309,10 @@ int
input_polling_used ()
{
#ifdef POLL_FOR_INPUT
- return read_socket_hook && !interrupt_input;
+ /* XXX This condition was (read_socket_hook && !interrupt_input),
+ but read_socket_hook is not global anymore. Let's pretend that
+ it's always set. */
+ return !interrupt_input;
#else
return 0;
#endif
@@ -2254,7 +2324,10 @@ void
stop_polling ()
{
#ifdef POLL_FOR_INPUT
- if (read_socket_hook && !interrupt_input)
+ /* XXX This condition was (read_socket_hook && !interrupt_input),
+ but read_socket_hook is not global anymore. Let's pretend that
+ it's always set. */
+ if (!interrupt_input)
++poll_suppress_count;
#endif
}
@@ -2393,7 +2466,7 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
return;
}
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!noninteractive && STRINGP (help))
{
/* The mouse-fixup-help-message Lisp function can call
@@ -2466,10 +2539,6 @@ read_char_help_form_unwind (arg)
return Qnil;
}
-#ifdef MULTI_KBOARD
-static jmp_buf wrong_kboard_jmpbuf;
-#endif
-
#define STOP_POLLING \
do { if (! polling_stopped_here) stop_polling (); \
polling_stopped_here = 1; } while (0)
@@ -2496,6 +2565,9 @@ do { if (polling_stopped_here) start_polling (); \
if we used a mouse menu to read the input, or zero otherwise. If
USED_MOUSE_MENU is null, we don't dereference it.
+ Value is -2 when we find input on another keyboard. A second call
+ to read_char will read it.
+
If END_TIME is non-null, it is a pointer to an EMACS_TIME
specifying the maximum time to wait until. If no input arrives by
that time, stop waiting and return nil.
@@ -2522,6 +2594,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
volatile int reread;
struct gcpro gcpro1, gcpro2;
int polling_stopped_here = 0;
+ struct kboard *orig_kboard = current_kboard;
also_record = Qnil;
@@ -2736,6 +2809,10 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
&& !detect_input_pending_run_timers (0))
{
c = read_char_minibuf_menu_prompt (commandflag, nmaps, maps);
+
+ if (INTEGERP (c) && XINT (c) == -2)
+ return c; /* wrong_kboard_jmpbuf */
+
if (! NILP (c))
{
key_already_recorded = 1;
@@ -2752,6 +2829,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
jmpcount = SPECPDL_INDEX ();
if (_setjmp (local_getcjmp))
{
+ /* Handle quits while reading the keyboard. */
/* We must have saved the outer value of getcjmp here,
so restore it now. */
restore_getcjmp (save_jump);
@@ -2789,7 +2867,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
/* This is going to exit from read_char
so we had better get rid of this frame's stuff. */
UNGCPRO;
- longjmp (wrong_kboard_jmpbuf, 1);
+ return make_number (-2); /* wrong_kboard_jmpbuf */
}
}
#endif
@@ -2926,6 +3004,19 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
}
}
+ /* Notify the caller if an autosave hook, or a timer, sentinel or
+ filter in the sit_for calls above have changed the current
+ kboard. This could happen if they use the minibuffer or start a
+ recursive edit, like the fancy splash screen in server.el's
+ filter. If this longjmp wasn't here, read_key_sequence would
+ interpret the next key sequence using the wrong translation
+ tables and function keymaps. */
+ if (NILP (c) && current_kboard != orig_kboard)
+ {
+ UNGCPRO;
+ return make_number (-2); /* wrong_kboard_jmpbuf */
+ }
+
/* If this has become non-nil here, it has been set by a timer
or sentinel or filter. */
if (CONSP (Vunread_command_events))
@@ -2974,7 +3065,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
/* This is going to exit from read_char
so we had better get rid of this frame's stuff. */
UNGCPRO;
- longjmp (wrong_kboard_jmpbuf, 1);
+ return make_number (-2); /* wrong_kboard_jmpbuf */
}
}
#endif
@@ -3030,7 +3121,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
/* This is going to exit from read_char
so we had better get rid of this frame's stuff. */
UNGCPRO;
- longjmp (wrong_kboard_jmpbuf, 1);
+ return make_number (-2);
}
#endif
}
@@ -3085,8 +3176,12 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
if (!NILP (tem))
{
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
int was_locked = single_kboard;
-
+ int count = SPECPDL_INDEX ();
+ record_single_kboard_state ();
+#endif
+
last_input_char = c;
Fcommand_execute (tem, Qnil, Fvector (1, &last_input_char), Qt);
@@ -3097,9 +3192,12 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
example banishing the mouse under mouse-avoidance-mode. */
timer_resume_idle ();
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
/* Resume allowing input from any kboard, if that was true before. */
if (!was_locked)
any_kboard_state ();
+ unbind_to (count, Qnil);
+#endif
goto retry;
}
@@ -3111,15 +3209,15 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu, end_time)
if (XINT (c) == -1)
goto exit;
- if ((STRINGP (Vkeyboard_translate_table)
- && SCHARS (Vkeyboard_translate_table) > (unsigned) XFASTINT (c))
- || (VECTORP (Vkeyboard_translate_table)
- && XVECTOR (Vkeyboard_translate_table)->size > (unsigned) XFASTINT (c))
- || (CHAR_TABLE_P (Vkeyboard_translate_table)
+ if ((STRINGP (current_kboard->Vkeyboard_translate_table)
+ && SCHARS (current_kboard->Vkeyboard_translate_table) > (unsigned) XFASTINT (c))
+ || (VECTORP (current_kboard->Vkeyboard_translate_table)
+ && XVECTOR (current_kboard->Vkeyboard_translate_table)->size > (unsigned) XFASTINT (c))
+ || (CHAR_TABLE_P (current_kboard->Vkeyboard_translate_table)
&& CHAR_VALID_P (XINT (c), 0)))
{
Lisp_Object d;
- d = Faref (Vkeyboard_translate_table, c);
+ d = Faref (current_kboard->Vkeyboard_translate_table, c);
/* nil in keyboard-translate-table means no translation. */
if (!NILP (d))
c = d;
@@ -3645,7 +3743,7 @@ readable_events (flags)
return 1;
}
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!(flags & READABLE_EVENTS_IGNORE_SQUEEZABLES)
&& !NILP (do_mouse_tracking) && some_mouse_moved ())
return 1;
@@ -3739,12 +3837,10 @@ kbd_buffer_store_event_hold (event, hold_quit)
if (c == quit_char)
{
#ifdef MULTI_KBOARD
- KBOARD *kb;
+ KBOARD *kb = FRAME_KBOARD (XFRAME (event->frame_or_window));
struct input_event *sp;
- if (single_kboard
- && (kb = FRAME_KBOARD (XFRAME (event->frame_or_window)),
- kb != current_kboard))
+ if (single_kboard && kb != current_kboard)
{
kb->kbd_queue
= Fcons (make_lispy_switch_frame (event->frame_or_window),
@@ -3787,7 +3883,7 @@ kbd_buffer_store_event_hold (event, hold_quit)
}
last_event_timestamp = event->timestamp;
- interrupt_signal (0 /* dummy */);
+ handle_interrupt ();
return;
}
@@ -3920,8 +4016,9 @@ discard_mouse_events ()
if (sp->kind == MOUSE_CLICK_EVENT
|| sp->kind == WHEEL_EVENT
-#ifdef WINDOWSNT
- || sp->kind == W32_SCROLL_BAR_CLICK_EVENT
+ || sp->kind == HORIZ_WHEEL_EVENT
+#ifdef HAVE_GPM
+ || sp->kind == GPM_CLICK_EVENT
#endif
|| sp->kind == SCROLL_BAR_CLICK_EVENT)
{
@@ -4003,7 +4100,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
if (kbd_fetch_ptr != kbd_store_ptr)
break;
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!NILP (do_mouse_tracking) && some_mouse_moved ())
break;
#endif
@@ -4025,7 +4122,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
#endif /* SIGIO */
if (kbd_fetch_ptr != kbd_store_ptr)
break;
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
if (!NILP (do_mouse_tracking) && some_mouse_moved ())
break;
#endif
@@ -4261,7 +4358,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
}
}
}
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
/* Try generating a mouse motion event. */
else if (!NILP (do_mouse_tracking) && some_mouse_moved ())
{
@@ -4272,11 +4369,15 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
unsigned long time;
*kbp = current_kboard;
- /* Note that this uses F to determine which display to look at.
+ /* Note that this uses F to determine which terminal to look at.
If there is no valid info, it does not store anything
so x remains nil. */
x = Qnil;
- (*mouse_position_hook) (&f, 0, &bar_window, &part, &x, &y, &time);
+
+ /* XXX Can f or mouse_position_hook be NULL here? */
+ if (f && FRAME_TERMINAL (f)->mouse_position_hook)
+ (*FRAME_TERMINAL (f)->mouse_position_hook) (&f, 0, &bar_window,
+ &part, &x, &y, &time);
obj = Qnil;
@@ -4302,7 +4403,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
if (!NILP (x) && NILP (obj))
obj = make_lispy_movement (f, bar_window, part, x, y, time);
}
-#endif /* HAVE_MOUSE */
+#endif /* HAVE_MOUSE || HAVE GPM */
else
/* We were promised by the above while loop that there was
something for us to read! */
@@ -4573,10 +4674,14 @@ timer_check (do_it_now)
{
if (NILP (vector[0]))
{
- int was_locked = single_kboard;
int count = SPECPDL_INDEX ();
Lisp_Object old_deactivate_mark = Vdeactivate_mark;
+#if 0 /* This shouldn't be necessary anymore. --lorentey */
+ /* On unbind_to, resume allowing input from any kboard, if that
+ was true before. */
+ record_single_kboard_state ();
+#endif
/* Mark the timer as triggered to prevent problems if the lisp
code fails to reschedule it right. */
vector[0] = Qt;
@@ -4588,10 +4693,6 @@ timer_check (do_it_now)
timers_run++;
unbind_to (count, Qnil);
- /* Resume allowing input from any kboard, if that was true before. */
- if (!was_locked)
- any_kboard_state ();
-
/* Since we have handled the event,
we don't need to tell the caller to wake up and do it. */
}
@@ -4809,13 +4910,17 @@ char *lispy_function_keys[] =
0, /* VK_MENU 0x12 */
"pause", /* VK_PAUSE 0x13 */
"capslock", /* VK_CAPITAL 0x14 */
-
- 0, 0, 0, 0, 0, 0, /* 0x15 .. 0x1A */
-
+ "kana", /* VK_KANA/VK_HANGUL 0x15 */
+ 0, /* 0x16 */
+ "junja", /* VK_JUNJA 0x17 */
+ "final", /* VK_FINAL 0x18 */
+ "kanji", /* VK_KANJI/VK_HANJA 0x19 */
+ 0, /* 0x1A */
"escape", /* VK_ESCAPE 0x1B */
-
- 0, 0, 0, 0, /* 0x1C .. 0x1F */
-
+ "convert", /* VK_CONVERT 0x1C */
+ "non-convert", /* VK_NONCONVERT 0x1D */
+ "accept", /* VK_ACCEPT 0x1E */
+ "mode-change", /* VK_MODECHANGE 0x1F */
0, /* VK_SPACE 0x20 */
"prior", /* VK_PRIOR 0x21 */
"next", /* VK_NEXT 0x22 */
@@ -4848,9 +4953,8 @@ char *lispy_function_keys[] =
"lwindow", /* VK_LWIN 0x5B */
"rwindow", /* VK_RWIN 0x5C */
"apps", /* VK_APPS 0x5D */
-
- 0, 0, /* 0x5E .. 0x5F */
-
+ 0, /* 0x5E */
+ "sleep",
"kp-0", /* VK_NUMPAD0 0x60 */
"kp-1", /* VK_NUMPAD1 0x61 */
"kp-2", /* VK_NUMPAD2 0x62 */
@@ -4897,7 +5001,9 @@ char *lispy_function_keys[] =
"kp-numlock", /* VK_NUMLOCK 0x90 */
"scroll", /* VK_SCROLL 0x91 */
-
+ /* Not sure where the following block comes from.
+ Windows headers have NEC and Fujitsu specific keys in
+ this block, but nothing generic. */
"kp-space", /* VK_NUMPAD_CLEAR 0x92 */
"kp-enter", /* VK_NUMPAD_ENTER 0x93 */
"kp-prior", /* VK_NUMPAD_PRIOR 0x94 */
@@ -4917,19 +5023,47 @@ char *lispy_function_keys[] =
* VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
* Used only as parameters to GetAsyncKeyState and GetKeyState.
* No other API or message will distinguish left and right keys this way.
+ * 0xA0 .. 0xA5
*/
- /* 0xA0 .. 0xEF */
+ 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* Multimedia keys. These are handled as WM_APPCOMMAND, which allows us
+ to enable them selectively, and gives access to a few more functions.
+ See lispy_multimedia_keys below. */
+ 0, 0, 0, 0, 0, 0, 0, /* 0xA6 .. 0xAC Browser */
+ 0, 0, 0, /* 0xAD .. 0xAF Volume */
+ 0, 0, 0, 0, /* 0xB0 .. 0xB3 Media */
+ 0, 0, 0, 0, /* 0xB4 .. 0xB7 Apps */
- /* 0xF0 .. 0xF5 */
+ /* 0xB8 .. 0xC0 "OEM" keys - all seem to be punctuation. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
+ /* 0xC1 - 0xDA unallocated, 0xDB-0xDF more OEM keys */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, /* 0xE0 */
+ "ax", /* VK_OEM_AX 0xE1 */
+ 0, /* VK_OEM_102 0xE2 */
+ "ico-help", /* VK_ICO_HELP 0xE3 */
+ "ico-00", /* VK_ICO_00 0xE4 */
+ 0, /* VK_PROCESSKEY 0xE5 */
+ "ico-clear", /* VK_ICO_CLEAR 0xE6 */
+ "packet", /* VK_PACKET 0xE7 */
+ 0, /* 0xE8 */
+ "reset", /* VK_OEM_RESET 0xE9 */
+ "jump", /* VK_OEM_JUMP 0xEA */
+ "oem-pa1", /* VK_OEM_PA1 0xEB */
+ "oem-pa2", /* VK_OEM_PA2 0xEC */
+ "oem-pa3", /* VK_OEM_PA3 0xED */
+ "wsctrl", /* VK_OEM_WSCTRL 0xEE */
+ "cusel", /* VK_OEM_CUSEL 0xEF */
+ "oem-attn", /* VK_OEM_ATTN 0xF0 */
+ "finish", /* VK_OEM_FINISH 0xF1 */
+ "copy", /* VK_OEM_COPY 0xF2 */
+ "auto", /* VK_OEM_AUTO 0xF3 */
+ "enlw", /* VK_OEM_ENLW 0xF4 */
+ "backtab", /* VK_OEM_BACKTAB 0xF5 */
"attn", /* VK_ATTN 0xF6 */
"crsel", /* VK_CRSEL 0xF7 */
"exsel", /* VK_EXSEL 0xF8 */
@@ -4942,6 +5076,65 @@ char *lispy_function_keys[] =
0 /* 0xFF */
};
+/* Some of these duplicate the "Media keys" on newer keyboards,
+ but they are delivered to the application in a different way. */
+static char *lispy_multimedia_keys[] =
+ {
+ 0,
+ "browser-back",
+ "browser-forward",
+ "browser-refresh",
+ "browser-stop",
+ "browser-search",
+ "browser-favorites",
+ "browser-home",
+ "volume-mute",
+ "volume-down",
+ "volume-up",
+ "media-next",
+ "media-previous",
+ "media-stop",
+ "media-play-pause",
+ "mail",
+ "media-select",
+ "app-1",
+ "app-2",
+ "bass-down",
+ "bass-boost",
+ "bass-up",
+ "treble-down",
+ "treble-up",
+ "mic-volume-mute",
+ "mic-volume-down",
+ "mic-volume-up",
+ "help",
+ "find",
+ "new",
+ "open",
+ "close",
+ "save",
+ "print",
+ "undo",
+ "redo",
+ "copy",
+ "cut",
+ "paste",
+ "mail-reply",
+ "mail-forward",
+ "mail-send",
+ "spell-check",
+ "toggle-dictate-command",
+ "mic-toggle",
+ "correction-list",
+ "media-play",
+ "media-pause",
+ "media-record",
+ "media-fast-forward",
+ "media-rewind",
+ "media-channel-up",
+ "media-channel-down"
+ };
+
#else /* not HAVE_NTGUI */
/* This should be dealt with in XTread_socket now, and that doesn't
@@ -5099,7 +5292,7 @@ Lisp_Object Vlispy_mouse_stem;
static char *lispy_wheel_names[] =
{
- "wheel-up", "wheel-down"
+ "wheel-up", "wheel-down", "wheel-left", "wheel-right"
};
/* drag-n-drop events are generated when a set of selected files are
@@ -5459,6 +5652,21 @@ make_lispy_event (event)
(sizeof (lispy_function_keys)
/ sizeof (lispy_function_keys[0])));
+#ifdef WINDOWSNT
+ case MULTIMEDIA_KEY_EVENT:
+ if (event->code < (sizeof (lispy_multimedia_keys)
+ / sizeof (lispy_multimedia_keys[0]))
+ && event->code > 0 && lispy_multimedia_keys[event->code])
+ {
+ return modify_event_symbol (event->code, event->modifiers,
+ Qfunction_key, Qnil,
+ lispy_multimedia_keys, &func_key_syms,
+ (sizeof (lispy_multimedia_keys)
+ / sizeof (lispy_multimedia_keys[0])));
+ }
+ return Qnil;
+#endif
+
#ifdef HAVE_MOUSE
/* A mouse click. Figure out where it is, decide whether it's
a press, click or drag, and build the appropriate structure. */
@@ -5605,8 +5813,8 @@ make_lispy_event (event)
fuzz = double_click_fuzz / 8;
is_double = (button == last_mouse_button
- && (abs (XINT (event->x) - last_mouse_x) <= fuzz)
- && (abs (XINT (event->y) - last_mouse_y) <= fuzz)
+ && (eabs (XINT (event->x) - last_mouse_x) <= fuzz)
+ && (eabs (XINT (event->y) - last_mouse_y) <= fuzz)
&& button_down_time != 0
&& (EQ (Vdouble_click_time, Qt)
|| (INTEGERP (Vdouble_click_time)
@@ -5736,6 +5944,7 @@ make_lispy_event (event)
}
case WHEEL_EVENT:
+ case HORIZ_WHEEL_EVENT:
{
Lisp_Object position;
Lisp_Object head;
@@ -5773,8 +5982,8 @@ make_lispy_event (event)
fuzz = double_click_fuzz / 8;
is_double = (last_mouse_button < 0
- && (abs (XINT (event->x) - last_mouse_x) <= fuzz)
- && (abs (XINT (event->y) - last_mouse_y) <= fuzz)
+ && (eabs (XINT (event->x) - last_mouse_x) <= fuzz)
+ && (eabs (XINT (event->y) - last_mouse_y) <= fuzz)
&& button_down_time != 0
&& (EQ (Vdouble_click_time, Qt)
|| (INTEGERP (Vdouble_click_time)
@@ -5820,6 +6029,9 @@ make_lispy_event (event)
the up_modifier set. */
abort ();
+ if (event->kind == HORIZ_WHEEL_EVENT)
+ symbol_num += 2;
+
/* Get the symbol we should use for the wheel event. */
head = modify_event_symbol (symbol_num,
event->modifiers,
@@ -5895,52 +6107,6 @@ make_lispy_event (event)
#endif /* USE_TOOLKIT_SCROLL_BARS */
-#ifdef WINDOWSNT
- case W32_SCROLL_BAR_CLICK_EVENT:
- {
- int button = event->code;
- int is_double;
- Lisp_Object position;
- Lisp_Object *start_pos_ptr;
- Lisp_Object start_pos;
-
- {
- Lisp_Object window;
- Lisp_Object portion_whole;
- Lisp_Object part;
-
- window = event->frame_or_window;
- portion_whole = Fcons (event->x, event->y);
- part = *scroll_bar_parts[(int) event->part];
-
- position
- = Fcons (window,
- Fcons (Qvertical_scroll_bar,
- Fcons (portion_whole,
- Fcons (make_number (event->timestamp),
- Fcons (part, Qnil)))));
- }
-
- /* Always treat W32 scroll bar events as clicks. */
- event->modifiers |= click_modifier;
-
- {
- /* Get the symbol we should use for the mouse click. */
- Lisp_Object head;
-
- head = modify_event_symbol (button,
- event->modifiers,
- Qmouse_click,
- Vlispy_mouse_stem,
- NULL, &mouse_syms,
- XVECTOR (mouse_syms)->size);
- return Fcons (head,
- Fcons (position,
- Qnil));
- }
- }
-#endif /* WINDOWSNT */
-
case DRAG_N_DROP_EVENT:
{
FRAME_PTR f;
@@ -6021,13 +6187,73 @@ make_lispy_event (event)
}
#endif
+#ifdef HAVE_GPM
+ case GPM_CLICK_EVENT:
+ {
+ FRAME_PTR f = XFRAME (event->frame_or_window);
+ Lisp_Object head, position;
+ Lisp_Object *start_pos_ptr;
+ Lisp_Object start_pos;
+ int button = event->code;
+
+ if (button >= ASIZE (button_down_location))
+ {
+ button_down_location = larger_vector (button_down_location,
+ button + 1, Qnil);
+ mouse_syms = larger_vector (mouse_syms, button + 1, Qnil);
+ }
+
+ start_pos_ptr = &AREF (button_down_location, button);
+ start_pos = *start_pos_ptr;
+
+ position = make_lispy_position (f, &event->x, &event->y,
+ event->timestamp);
+
+ if (event->modifiers & down_modifier)
+ *start_pos_ptr = Fcopy_alist (position);
+ else if (event->modifiers & (up_modifier | drag_modifier))
+ {
+ if (!CONSP (start_pos))
+ return Qnil;
+ event->modifiers &= ~up_modifier;
+ }
+
+ head = modify_event_symbol (button,
+ event->modifiers,
+ Qmouse_click, Vlispy_mouse_stem,
+ NULL,
+ &mouse_syms,
+ XVECTOR (mouse_syms)->size);
+
+ if (event->modifiers & drag_modifier)
+ return Fcons (head,
+ Fcons (start_pos,
+ Fcons (position,
+ Qnil)));
+ else if (event->modifiers & double_modifier)
+ return Fcons (head,
+ Fcons (position,
+ Fcons (make_number (2),
+ Qnil)));
+ else if (event->modifiers & triple_modifier)
+ return Fcons (head,
+ Fcons (position,
+ Fcons (make_number (3),
+ Qnil)));
+ else
+ return Fcons (head,
+ Fcons (position,
+ Qnil));
+ }
+#endif /* HAVE_GPM */
+
/* The 'kind' field of the event is something we don't recognize. */
default:
abort ();
}
}
-#ifdef HAVE_MOUSE
+#if defined(HAVE_MOUSE) || defined(HAVE_GPM)
static Lisp_Object
make_lispy_movement (frame, bar_window, part, x, y, time)
@@ -6066,7 +6292,7 @@ make_lispy_movement (frame, bar_window, part, x, y, time)
}
}
-#endif /* HAVE_MOUSE */
+#endif /* HAVE_MOUSE || HAVE GPM */
/* Construct a switch frame event. */
static Lisp_Object
@@ -6319,6 +6545,20 @@ parse_modifiers (symbol)
}
}
+DEFUN ("internal-event-symbol-parse-modifiers", Fevent_symbol_parse_modifiers,
+ Sevent_symbol_parse_modifiers, 1, 1, 0,
+ doc: /* Parse the event symbol. For internal use. */)
+ (symbol)
+ Lisp_Object symbol;
+{
+ /* Fill the cache if needed. */
+ parse_modifiers (symbol);
+ /* Ignore the result (which is stored on Qevent_symbol_element_mask)
+ and use the Lispier representation stored on Qevent_symbol_elements
+ instead. */
+ return Fget (symbol, Qevent_symbol_elements);
+}
+
/* Apply the modifiers MODIFIERS to the symbol BASE.
BASE must be unmodified.
@@ -6494,8 +6734,8 @@ modify_event_symbol (symbol_num, modifiers, symbol_kind, name_alist_or_stem,
{
int len = SBYTES (name_alist_or_stem);
char *buf = (char *) alloca (len + 50);
- sprintf (buf, "%s-%ld", SDATA (name_alist_or_stem),
- (long) XINT (symbol_int) + 1);
+ sprintf (buf, "%s-%ld", SDATA (name_alist_or_stem),
+ (long) XINT (symbol_int) + 1);
value = intern (buf);
}
else if (name_table != 0 && name_table[symbol_num])
@@ -6760,7 +7000,10 @@ gobble_input (expected)
}
else
#ifdef POLL_FOR_INPUT
- if (read_socket_hook && !interrupt_input && poll_suppress_count == 0)
+ /* XXX This condition was (read_socket_hook && !interrupt_input),
+ but read_socket_hook is not global anymore. Let's pretend that
+ it's always set. */
+ if (!interrupt_input && poll_suppress_count == 0)
{
SIGMASKTYPE mask;
mask = sigblock (sigmask (SIGALRM));
@@ -6837,150 +7080,241 @@ static int
read_avail_input (expected)
int expected;
{
- register int i;
int nread = 0;
+ int err = 0;
+ struct terminal *t;
/* Store pending user signal events, if any. */
if (store_user_signal_events ())
expected = 0;
- if (read_socket_hook)
+ /* Loop through the available terminals, and call their input hooks. */
+ t = terminal_list;
+ while (t)
{
- int nr;
- struct input_event hold_quit;
+ struct terminal *next = t->next_terminal;
- EVENT_INIT (hold_quit);
- hold_quit.kind = NO_EVENT;
+ if (t->read_socket_hook)
+ {
+ int nr;
+ struct input_event hold_quit;
+
+ EVENT_INIT (hold_quit);
+ hold_quit.kind = NO_EVENT;
+
+ /* No need for FIONREAD or fcntl; just say don't wait. */
+ while (nr = (*t->read_socket_hook) (t, expected, &hold_quit), nr > 0)
+ {
+ nread += nr;
+ expected = 0;
+ }
+
+ if (nr == -1) /* Not OK to read input now. */
+ {
+ err = 1;
+ }
+ else if (nr == -2) /* Non-transient error. */
+ {
+ /* The terminal device terminated; it should be closed. */
+
+ /* Kill Emacs if this was our last terminal. */
+ if (!terminal_list->next_terminal)
+ /* Formerly simply reported no input, but that
+ sometimes led to a failure of Emacs to terminate.
+ SIGHUP seems appropriate if we can't reach the
+ terminal. */
+ /* ??? Is it really right to send the signal just to
+ this process rather than to the whole process
+ group? Perhaps on systems with FIONREAD Emacs is
+ alone in its group. */
+ kill (getpid (), SIGHUP);
+
+ /* XXX Is calling delete_terminal safe here? It calls Fdelete_frame. */
+ if (t->delete_terminal_hook)
+ (*t->delete_terminal_hook) (t);
+ else
+ delete_terminal (t);
+ }
+
+ if (hold_quit.kind != NO_EVENT)
+ kbd_buffer_store_event (&hold_quit);
+ }
- /* No need for FIONREAD or fcntl; just say don't wait. */
- while (nr = (*read_socket_hook) (input_fd, expected, &hold_quit), nr > 0)
- {
- nread += nr;
- expected = 0;
- }
- if (hold_quit.kind != NO_EVENT)
- kbd_buffer_store_event (&hold_quit);
+ t = next;
}
- else
- {
- /* Using KBD_BUFFER_SIZE - 1 here avoids reading more than
- the kbd_buffer can really hold. That may prevent loss
- of characters on some systems when input is stuffed at us. */
- unsigned char cbuf[KBD_BUFFER_SIZE - 1];
- int n_to_read;
- /* Determine how many characters we should *try* to read. */
+ if (err && !nread)
+ nread = -1;
+
+ return nread;
+}
+
+/* This is the tty way of reading available input.
+
+ Note that each terminal device has its own `struct terminal' object,
+ and so this function is called once for each individual termcap
+ terminal. The first parameter indicates which terminal to read from. */
+
+int
+tty_read_avail_input (struct terminal *terminal,
+ int expected,
+ struct input_event *hold_quit)
+{
+ /* Using KBD_BUFFER_SIZE - 1 here avoids reading more than
+ the kbd_buffer can really hold. That may prevent loss
+ of characters on some systems when input is stuffed at us. */
+ unsigned char cbuf[KBD_BUFFER_SIZE - 1];
+ int n_to_read, i;
+ struct tty_display_info *tty = terminal->display_info.tty;
+ int nread = 0;
+
+ if (!terminal->name) /* Don't read from a dead terminal. */
+ return 0;
+
+ if (terminal->type != output_termcap)
+ abort ();
+
+ /* XXX I think the following code should be moved to separate hook
+ functions in system-dependent files. */
#ifdef WINDOWSNT
- return 0;
+ return 0;
#else /* not WINDOWSNT */
#ifdef MSDOS
- n_to_read = dos_keysns ();
- if (n_to_read == 0)
- return 0;
+ n_to_read = dos_keysns ();
+ if (n_to_read == 0)
+ return 0;
+
+ cbuf[0] = dos_keyread ();
+ nread = 1;
+
#else /* not MSDOS */
+
+ if (! tty->term_initted) /* In case we get called during bootstrap. */
+ return 0;
+
+ if (! tty->input)
+ return 0; /* The terminal is suspended. */
+
+#ifdef HAVE_GPM
+ if (gpm_tty == tty)
+ {
+ Gpm_Event event;
+ struct input_event hold_quit;
+ int gpm;
+
+ EVENT_INIT (hold_quit);
+ hold_quit.kind = NO_EVENT;
+
+ while (gpm = Gpm_GetEvent (&event), gpm == 1) {
+ nread += handle_one_term_event (tty, &event, &hold_quit);
+ }
+ if (hold_quit.kind != NO_EVENT)
+ kbd_buffer_store_event (&hold_quit);
+ if (nread)
+ return nread;
+ }
+#endif /* HAVE_GPM */
+
+/* Determine how many characters we should *try* to read. */
#ifdef FIONREAD
- /* Find out how much input is available. */
- if (ioctl (input_fd, FIONREAD, &n_to_read) < 0)
- /* Formerly simply reported no input, but that sometimes led to
- a failure of Emacs to terminate.
- SIGHUP seems appropriate if we can't reach the terminal. */
- /* ??? Is it really right to send the signal just to this process
- rather than to the whole process group?
- Perhaps on systems with FIONREAD Emacs is alone in its group. */
- {
- if (! noninteractive)
- kill (getpid (), SIGHUP);
- else
- n_to_read = 0;
- }
- if (n_to_read == 0)
- return 0;
- if (n_to_read > sizeof cbuf)
- n_to_read = sizeof cbuf;
+ /* Find out how much input is available. */
+ if (ioctl (fileno (tty->input), FIONREAD, &n_to_read) < 0)
+ {
+ if (! noninteractive)
+ return -2; /* Close this terminal. */
+ else
+ n_to_read = 0;
+ }
+ if (n_to_read == 0)
+ return 0;
+ if (n_to_read > sizeof cbuf)
+ n_to_read = sizeof cbuf;
#else /* no FIONREAD */
#if defined (USG) || defined (DGUX) || defined(CYGWIN)
- /* Read some input if available, but don't wait. */
- n_to_read = sizeof cbuf;
- fcntl (input_fd, F_SETFL, O_NDELAY);
+ /* Read some input if available, but don't wait. */
+ n_to_read = sizeof cbuf;
+ fcntl (fileno (tty->input), F_SETFL, O_NDELAY);
#else
- you lose;
+ you lose;
#endif
#endif
-#endif /* not MSDOS */
-#endif /* not WINDOWSNT */
- /* Now read; for one reason or another, this will not block.
- NREAD is set to the number of chars read. */
- do
- {
-#ifdef MSDOS
- cbuf[0] = dos_keyread ();
- nread = 1;
-#else
- nread = emacs_read (input_fd, cbuf, n_to_read);
-#endif
- /* POSIX infers that processes which are not in the session leader's
- process group won't get SIGHUP's at logout time. BSDI adheres to
- this part standard and returns -1 from read (0) with errno==EIO
- when the control tty is taken away.
- Jeffrey Honig <jch@bsdi.com> says this is generally safe. */
- if (nread == -1 && errno == EIO)
- kill (0, SIGHUP);
+ /* Now read; for one reason or another, this will not block.
+ NREAD is set to the number of chars read. */
+ do
+ {
+ nread = emacs_read (fileno (tty->input), cbuf, n_to_read);
+ /* POSIX infers that processes which are not in the session leader's
+ process group won't get SIGHUP's at logout time. BSDI adheres to
+ this part standard and returns -1 from read (0) with errno==EIO
+ when the control tty is taken away.
+ Jeffrey Honig <jch@bsdi.com> says this is generally safe. */
+ if (nread == -1 && errno == EIO)
+ return -2; /* Close this terminal. */
#if defined (AIX) && (! defined (aix386) && defined (_BSD))
- /* The kernel sometimes fails to deliver SIGHUP for ptys.
- This looks incorrect, but it isn't, because _BSD causes
- O_NDELAY to be defined in fcntl.h as O_NONBLOCK,
- and that causes a value other than 0 when there is no input. */
- if (nread == 0)
- kill (0, SIGHUP);
-#endif
- }
- while (
- /* We used to retry the read if it was interrupted.
- But this does the wrong thing when O_NDELAY causes
- an EAGAIN error. Does anybody know of a situation
- where a retry is actually needed? */
+ /* The kernel sometimes fails to deliver SIGHUP for ptys.
+ This looks incorrect, but it isn't, because _BSD causes
+ O_NDELAY to be defined in fcntl.h as O_NONBLOCK,
+ and that causes a value other than 0 when there is no input. */
+ if (nread == 0)
+ return -2; /* Close this terminal. */
+#endif
+ }
+ while (
+ /* We used to retry the read if it was interrupted.
+ But this does the wrong thing when O_NDELAY causes
+ an EAGAIN error. Does anybody know of a situation
+ where a retry is actually needed? */
#if 0
- nread < 0 && (errno == EAGAIN
+ nread < 0 && (errno == EAGAIN
#ifdef EFAULT
- || errno == EFAULT
+ || errno == EFAULT
#endif
#ifdef EBADSLT
- || errno == EBADSLT
+ || errno == EBADSLT
#endif
- )
+ )
#else
- 0
+ 0
#endif
- );
+ );
#ifndef FIONREAD
#if defined (USG) || defined (DGUX) || defined (CYGWIN)
- fcntl (input_fd, F_SETFL, 0);
+ fcntl (fileno (tty->input), F_SETFL, 0);
#endif /* USG or DGUX or CYGWIN */
#endif /* no FIONREAD */
- for (i = 0; i < nread; i++)
- {
- struct input_event buf;
- EVENT_INIT (buf);
- buf.kind = ASCII_KEYSTROKE_EVENT;
- buf.modifiers = 0;
- if (meta_key == 1 && (cbuf[i] & 0x80))
- buf.modifiers = meta_modifier;
- if (meta_key != 2)
- cbuf[i] &= ~0x80;
-
- buf.code = cbuf[i];
- buf.frame_or_window = selected_frame;
- buf.arg = Qnil;
-
- kbd_buffer_store_event (&buf);
- /* Don't look at input that follows a C-g too closely.
- This reduces lossage due to autorepeat on C-g. */
- if (buf.kind == ASCII_KEYSTROKE_EVENT
- && buf.code == quit_char)
- break;
- }
+
+ if (nread <= 0)
+ return nread;
+
+#endif /* not MSDOS */
+#endif /* not WINDOWSNT */
+
+ for (i = 0; i < nread; i++)
+ {
+ struct input_event buf;
+ EVENT_INIT (buf);
+ buf.kind = ASCII_KEYSTROKE_EVENT;
+ buf.modifiers = 0;
+ if (tty->meta_key == 1 && (cbuf[i] & 0x80))
+ buf.modifiers = meta_modifier;
+ if (tty->meta_key != 2)
+ cbuf[i] &= ~0x80;
+
+ buf.code = cbuf[i];
+ /* Set the frame corresponding to the active tty. Note that the
+ value of selected_frame is not reliable here, redisplay tends
+ to temporarily change it. */
+ buf.frame_or_window = tty->top_frame;
+ buf.arg = Qnil;
+
+ kbd_buffer_store_event (&buf);
+ /* Don't look at input that follows a C-g too closely.
+ This reduces lossage due to autorepeat on C-g. */
+ if (buf.kind == ASCII_KEYSTROKE_EVENT
+ && buf.code == quit_char)
+ break;
}
return nread;
@@ -7331,13 +7665,7 @@ menu_bar_items (old)
/* Add nil, nil, nil, nil at the end. */
i = menu_bar_items_index;
if (i + 4 > XVECTOR (menu_bar_items_vector)->size)
- {
- Lisp_Object tem;
- tem = Fmake_vector (make_number (2 * i), Qnil);
- bcopy (XVECTOR (menu_bar_items_vector)->contents,
- XVECTOR (tem)->contents, i * sizeof (Lisp_Object));
- menu_bar_items_vector = tem;
- }
+ menu_bar_items_vector = larger_vector (menu_bar_items_vector, 2 * i, Qnil);
/* Add this item. */
XVECTOR (menu_bar_items_vector)->contents[i++] = Qnil;
XVECTOR (menu_bar_items_vector)->contents[i++] = Qnil;
@@ -7409,14 +7737,7 @@ menu_bar_item (key, item, dummy1, dummy2)
{
/* If vector is too small, get a bigger one. */
if (i + 4 > XVECTOR (menu_bar_items_vector)->size)
- {
- Lisp_Object tem;
- tem = Fmake_vector (make_number (2 * i), Qnil);
- bcopy (XVECTOR (menu_bar_items_vector)->contents,
- XVECTOR (tem)->contents, i * sizeof (Lisp_Object));
- menu_bar_items_vector = tem;
- }
-
+ menu_bar_items_vector = larger_vector (menu_bar_items_vector, 2 * i, Qnil);
/* Add this item. */
XVECTOR (menu_bar_items_vector)->contents[i++] = key;
XVECTOR (menu_bar_items_vector)->contents[i++]
@@ -8129,7 +8450,7 @@ parse_tool_bar_item (key, item)
PROP (TOOL_BAR_ITEM_IMAGES) = value;
else if (EQ (key, Qrtl))
/* ':rtl STRING' */
- PROP (TOOL_BAR_ITEM_RTL_IMAGE) = value;
+ PROP (TOOL_BAR_ITEM_RTL_IMAGE) = value;
}
/* If got a filter apply it on binding. */
@@ -8185,16 +8506,9 @@ append_tool_bar_item ()
/* Enlarge tool_bar_items_vector if necessary. */
if (ntool_bar_items + TOOL_BAR_ITEM_NSLOTS
>= XVECTOR (tool_bar_items_vector)->size)
- {
- Lisp_Object new_vector;
- int old_size = XVECTOR (tool_bar_items_vector)->size;
-
- new_vector = Fmake_vector (make_number (2 * old_size), Qnil);
- bcopy (XVECTOR (tool_bar_items_vector)->contents,
- XVECTOR (new_vector)->contents,
- old_size * sizeof (Lisp_Object));
- tool_bar_items_vector = new_vector;
- }
+ tool_bar_items_vector
+ = larger_vector (tool_bar_items_vector,
+ 2 * XVECTOR (tool_bar_items_vector)->size, Qnil);
/* Append entries from tool_bar_item_properties to the end of
tool_bar_items_vector. */
@@ -8298,7 +8612,7 @@ read_char_x_menu_prompt (nmaps, maps, prev_event, used_mouse_menu)
to indicate that they came from a mouse menu,
so that when present in last_nonmenu_event
they won't confuse things. */
- for (tem = XCDR (value); !NILP (tem); tem = XCDR (tem))
+ for (tem = XCDR (value); CONSP (tem); tem = XCDR (tem))
{
record_menu_key (XCAR (tem));
if (SYMBOLP (XCAR (tem))
@@ -8562,6 +8876,8 @@ read_char_minibuf_menu_prompt (commandflag, nmaps, maps)
if (!INTEGERP (obj))
return obj;
+ else if (XINT (obj) == -2)
+ return obj;
else
ch = XINT (obj);
@@ -8872,8 +9188,8 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
key's again in Vfunction_key_map. */
volatile keyremap fkey;
- /* Likewise, for key_translation_map. */
- volatile keyremap keytran;
+ /* Likewise, for key_translation_map and input-decode-map. */
+ volatile keyremap keytran, indec;
/* If we receive a `switch-frame' or `select-window' event in the middle of
a key sequence, we put it off for later.
@@ -8908,11 +9224,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
last_nonmenu_event = Qnil;
delayed_switch_frame = Qnil;
- fkey.map = fkey.parent = Vfunction_key_map;
- keytran.map = keytran.parent = Vkey_translation_map;
- fkey.start = fkey.end = 0;
- keytran.start = keytran.end = 0;
-
+
if (INTERACTIVE)
{
if (!NILP (prompt))
@@ -8947,6 +9259,23 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
orig_keymap = get_local_map (PT, current_buffer, Qkeymap);
from_string = Qnil;
+ /* The multi-tty merge moved the code below to right after
+ `replay_sequence' which caused all these translation maps to be applied
+ repeatedly, even tho their doc says very clearly they are not applied to
+ their own output.
+ The reason for this move was: "We may switch keyboards between rescans,
+ so we need to reinitialize fkey and keytran before each replay".
+ This move was wrong (even if we switch keyboards, keybuf still holds the
+ keys we've read already from the original keyboard and some of those keys
+ may have already been translated). So there may still be a bug out there
+ lurking. */
+ indec.map = indec.parent = current_kboard->Vinput_decode_map;
+ fkey.map = fkey.parent = current_kboard->Vlocal_function_key_map;
+ keytran.map = keytran.parent = Vkey_translation_map;
+ indec.start = indec.end = 0;
+ fkey.start = fkey.end = 0;
+ keytran.start = keytran.end = 0;
+
/* We jump here when the key sequence has been thoroughly changed, and
we need to rescan it starting from the beginning. When we jump here,
keybuf[0..mock_input] holds the sequence we should reread. */
@@ -9037,7 +9366,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
Thus, if ESC O a has a function-key-map translation
and ESC o has a binding, don't return after ESC O,
so that we can translate ESC O plus the next character. */
- : (fkey.start < t || keytran.start < t))
+ : (/* indec.start < t || fkey.start < t || */ keytran.start < t))
{
Lisp_Object key;
int used_mouse_menu = 0;
@@ -9055,13 +9384,17 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
just one key. */
volatile int echo_local_start, keys_local_start, local_first_binding;
- eassert (fkey.end == t || (fkey.end > t && fkey.end <= mock_input));
+ eassert (indec.end == t || (indec.end > t && indec.end <= mock_input));
+ eassert (indec.start <= indec.end);
eassert (fkey.start <= fkey.end);
eassert (keytran.start <= keytran.end);
- /* key-translation-map is applied *after* function-key-map. */
+ /* key-translation-map is applied *after* function-key-map
+ which is itself applied *after* input-decode-map. */
+ eassert (fkey.end <= indec.start);
eassert (keytran.end <= fkey.start);
- if (first_unbound < fkey.start && first_unbound < keytran.start)
+ if (/* first_unbound < indec.start && first_unbound < fkey.start && */
+ first_unbound < keytran.start)
{ /* The prefix upto first_unbound has no binding and has
no translation left to do either, so we know it's unbound.
If we don't stop now, we risk staying here indefinitely
@@ -9071,6 +9404,8 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
for (i = first_unbound + 1; i < t; i++)
keybuf[i - first_unbound - 1] = keybuf[i];
mock_input = t - first_unbound - 1;
+ indec.end = indec.start -= first_unbound + 1;
+ indec.map = indec.parent;
fkey.end = fkey.start -= first_unbound + 1;
fkey.map = fkey.parent;
keytran.end = keytran.start -= first_unbound + 1;
@@ -9116,8 +9451,28 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
#ifdef MULTI_KBOARD
KBOARD *interrupted_kboard = current_kboard;
struct frame *interrupted_frame = SELECTED_FRAME ();
- if (setjmp (wrong_kboard_jmpbuf))
+#endif
+ key = read_char (NILP (prompt), nmaps,
+ (Lisp_Object *) submaps, last_nonmenu_event,
+ &used_mouse_menu, NULL);
+#ifdef MULTI_KBOARD
+ if (INTEGERP (key) && XINT (key) == -2) /* wrong_kboard_jmpbuf */
{
+ int found = 0;
+ struct kboard *k;
+
+ for (k = all_kboards; k; k = k->next_kboard)
+ if (k == interrupted_kboard)
+ found = 1;
+
+ if (!found)
+ {
+ /* Don't touch interrupted_kboard when it's been
+ deleted. */
+ delayed_switch_frame = Qnil;
+ goto replay_sequence;
+ }
+
if (!NILP (delayed_switch_frame))
{
interrupted_kboard->kbd_queue
@@ -9125,6 +9480,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
interrupted_kboard->kbd_queue);
delayed_switch_frame = Qnil;
}
+
while (t > 0)
interrupted_kboard->kbd_queue
= Fcons (keybuf[--t], interrupted_kboard->kbd_queue);
@@ -9149,9 +9505,6 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
goto replay_sequence;
}
#endif
- key = read_char (NILP (prompt), nmaps,
- (Lisp_Object *) submaps, last_nonmenu_event,
- &used_mouse_menu, NULL);
}
/* read_char returns t when it shows a menu and the user rejects it.
@@ -9478,15 +9831,15 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
/* This is needed for the following scenario:
event 0: a down-event that gets dropped by calling replay_key.
event 1: some normal prefix like C-h.
- After event 0, first_unbound is 0, after event 1 fkey.start
- and keytran.start are both 1, so when we see that C-h is bound,
- we need to update first_unbound. */
+ After event 0, first_unbound is 0, after event 1 indec.start,
+ fkey.start, and keytran.start are all 1, so when we see that
+ C-h is bound, we need to update first_unbound. */
first_unbound = max (t + 1, first_unbound);
else
{
Lisp_Object head;
- /* Remember the position to put an upper bound on fkey.start. */
+ /* Remember the position to put an upper bound on indec.start. */
first_unbound = min (t, first_unbound);
head = EVENT_HEAD (key);
@@ -9571,21 +9924,27 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
/* If mock_input > t + 1, the above simplification
will actually end up dropping keys on the floor.
This is probably OK for now, but even
- if mock_input <= t + 1, we need to adjust fkey
- and keytran.
+ if mock_input <= t + 1, we need to adjust indec,
+ fkey, and keytran.
Typical case [header-line down-mouse-N]:
mock_input = 2, t = 1, fkey.end = 1,
last_real_key_start = 0. */
- if (fkey.end > last_real_key_start)
+ if (indec.end > last_real_key_start)
{
- fkey.end = fkey.start
- = min (last_real_key_start, fkey.start);
- fkey.map = fkey.parent;
- if (keytran.end > last_real_key_start)
+ indec.end = indec.start
+ = min (last_real_key_start, indec.start);
+ indec.map = indec.parent;
+ if (fkey.end > last_real_key_start)
{
- keytran.end = keytran.start
- = min (last_real_key_start, keytran.start);
- keytran.map = keytran.parent;
+ fkey.end = fkey.start
+ = min (last_real_key_start, fkey.start);
+ fkey.map = fkey.parent;
+ if (keytran.end > last_real_key_start)
+ {
+ keytran.end = keytran.start
+ = min (last_real_key_start, keytran.start);
+ keytran.map = keytran.parent;
+ }
}
}
if (t == last_real_key_start)
@@ -9639,8 +9998,28 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
/* Record what part of this_command_keys is the current key sequence. */
this_single_command_key_start = this_command_key_count - t;
- if (first_binding < nmaps && NILP (submaps[first_binding]))
+ /* Look for this sequence in input-decode-map.
+ Scan from indec.end until we find a bound suffix. */
+ while (indec.end < t)
+ {
+ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
+ int done, diff;
+
+ GCPRO4 (indec.map, fkey.map, keytran.map, delayed_switch_frame);
+ done = keyremap_step (keybuf, bufsize, &indec, max (t, mock_input),
+ 1, &diff, prompt);
+ UNGCPRO;
+ if (done)
+ {
+ mock_input = diff + max (t, mock_input);
+ goto replay_sequence;
+ }
+ }
+
+ if (first_binding < nmaps && NILP (submaps[first_binding])
+ && indec.start >= t)
/* There is a binding and it's not a prefix.
+ (and it doesn't have any input-decode-map translation pending).
There is thus no function-key in this sequence.
Moving fkey.start is important in this case to allow keytran.start
to go over the sequence before we return (since we keep the
@@ -9653,12 +10032,12 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
/* If the sequence is unbound, see if we can hang a function key
off the end of it. */
/* Continue scan from fkey.end until we find a bound suffix. */
- while (fkey.end < t)
+ while (fkey.end < indec.start)
{
- struct gcpro gcpro1, gcpro2, gcpro3;
+ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
int done, diff;
- GCPRO3 (fkey.map, keytran.map, delayed_switch_frame);
+ GCPRO4 (indec.map, fkey.map, keytran.map, delayed_switch_frame);
done = keyremap_step (keybuf, bufsize, &fkey,
max (t, mock_input),
/* If there's a binding (i.e.
@@ -9670,6 +10049,10 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
if (done)
{
mock_input = diff + max (t, mock_input);
+ /* Adjust the input-decode-map counters. */
+ indec.end += diff;
+ indec.start += diff;
+
goto replay_sequence;
}
}
@@ -9678,17 +10061,19 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
Scan from keytran.end until we find a bound suffix. */
while (keytran.end < fkey.start)
{
- struct gcpro gcpro1, gcpro2, gcpro3;
+ struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
int done, diff;
- GCPRO3 (fkey.map, keytran.map, delayed_switch_frame);
+ GCPRO4 (indec.map, fkey.map, keytran.map, delayed_switch_frame);
done = keyremap_step (keybuf, bufsize, &keytran, max (t, mock_input),
1, &diff, prompt);
UNGCPRO;
if (done)
{
mock_input = diff + max (t, mock_input);
- /* Adjust the function-key-map counters. */
+ /* Adjust the function-key-map and input-decode-map counters. */
+ indec.end += diff;
+ indec.start += diff;
fkey.end += diff;
fkey.start += diff;
@@ -9701,7 +10086,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
and is an upper case letter
use the corresponding lower-case letter instead. */
if (first_binding >= nmaps
- && fkey.start >= t && keytran.start >= t
+ && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t
&& INTEGERP (key)
&& ((((XINT (key) & 0x3ffff)
< XCHAR_TABLE (current_buffer->downcase_table)->size)
@@ -9732,7 +10117,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
and is a shifted function key,
use the corresponding unshifted function key instead. */
if (first_binding >= nmaps
- && fkey.start >= t && keytran.start >= t
+ && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t
&& SYMBOLP (key))
{
Lisp_Object breakdown;
@@ -9753,9 +10138,6 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last,
keybuf[t - 1] = new_key;
mock_input = max (t, mock_input);
- fkey.start = fkey.end = 0;
- keytran.start = keytran.end = 0;
-
goto replay_sequence;
}
}
@@ -10263,8 +10645,12 @@ detect_input_pending_run_timers (do_display)
from an idle timer function. The symptom of the bug is that
the cursor sometimes doesn't become visible until the next X
event is processed. --gerd. */
- if (rif)
- rif->flush_display (NULL);
+ {
+ Lisp_Object tail, frame;
+ FOR_EACH_FRAME (tail, frame)
+ if (FRAME_RIF (XFRAME (frame)))
+ FRAME_RIF (XFRAME (frame))->flush_display (XFRAME (frame));
+ }
}
return input_pending;
@@ -10516,6 +10902,9 @@ On such systems, Emacs starts a subshell instead of suspending. */)
int width, height;
struct gcpro gcpro1;
+ if (tty_list && tty_list->next)
+ error ("There are other tty frames open; close them before suspending Emacs");
+
if (!NILP (stuffstring))
CHECK_STRING (stuffstring);
@@ -10524,11 +10913,11 @@ On such systems, Emacs starts a subshell instead of suspending. */)
call1 (Vrun_hooks, intern ("suspend-hook"));
GCPRO1 (stuffstring);
- get_frame_size (&old_width, &old_height);
- reset_sys_modes ();
+ get_tty_size (fileno (CURTTY ()->input), &old_width, &old_height);
+ reset_all_sys_modes ();
/* sys_suspend can get an error if it tries to fork a subshell
and the system resources aren't available for that. */
- record_unwind_protect ((Lisp_Object (*) P_ ((Lisp_Object))) init_sys_modes,
+ record_unwind_protect ((Lisp_Object (*) P_ ((Lisp_Object))) init_all_sys_modes,
Qnil);
stuff_buffered_input (stuffstring);
if (cannot_suspend)
@@ -10540,7 +10929,7 @@ On such systems, Emacs starts a subshell instead of suspending. */)
/* Check if terminal/window size has changed.
Note that this is not useful when we are running directly
with a window system; but suspend should be disabled in that case. */
- get_frame_size (&width, &height);
+ get_tty_size (fileno (CURTTY ()->input), &width, &height);
if (width != old_width || height != old_height)
change_frame_size (SELECTED_FRAME (), height, width, 0, 0, 0);
@@ -10600,10 +10989,10 @@ set_waiting_for_input (time_to_clear)
{
input_available_clear_time = time_to_clear;
- /* Tell interrupt_signal to throw back to read_char, */
+ /* Tell handle_interrupt to throw back to read_char, */
waiting_for_input = 1;
- /* If interrupt_signal was called before and buffered a C-g,
+ /* If handle_interrupt was called before and buffered a C-g,
make it run again now, to avoid timing error. */
if (!NILP (Vquit_flag))
quit_throw_to_read_char ();
@@ -10612,48 +11001,82 @@ set_waiting_for_input (time_to_clear)
void
clear_waiting_for_input ()
{
- /* Tell interrupt_signal not to throw back to read_char, */
+ /* Tell handle_interrupt not to throw back to read_char, */
waiting_for_input = 0;
input_available_clear_time = 0;
}
-/* This routine is called at interrupt level in response to C-g.
-
- If interrupt_input, this is the handler for SIGINT. Otherwise, it
- is called from kbd_buffer_store_event, in handling SIGIO or
- SIGTINT.
-
- If `waiting_for_input' is non zero, then unless `echoing' is
- nonzero, immediately throw back to read_char.
+/* The SIGINT handler.
- Otherwise it sets the Lisp variable quit-flag not-nil. This causes
- eval to throw, when it gets a chance. If quit-flag is already
- non-nil, it stops the job right away. */
+ If we have a frame on the controlling tty, we assume that the
+ SIGINT was generated by C-g, so we call handle_interrupt.
+ Otherwise, the handler kills Emacs. */
static SIGTYPE
interrupt_signal (signalnum) /* If we don't have an argument, */
int signalnum; /* some compilers complain in signal calls. */
{
- char c;
/* Must preserve main program's value of errno. */
int old_errno = errno;
- struct frame *sf = SELECTED_FRAME ();
+ struct terminal *terminal;
#if defined (USG) && !defined (POSIX_SIGNALS)
- if (!read_socket_hook && NILP (Vwindow_system))
- {
- /* USG systems forget handlers when they are used;
- must reestablish each time */
- signal (SIGINT, interrupt_signal);
- signal (SIGQUIT, interrupt_signal);
- }
+ /* USG systems forget handlers when they are used;
+ must reestablish each time */
+ signal (SIGINT, interrupt_signal);
+ signal (SIGQUIT, interrupt_signal);
#endif /* USG */
SIGNAL_THREAD_CHECK (signalnum);
+
+ /* See if we have an active terminal on our controlling tty. */
+ terminal = get_named_tty ("/dev/tty");
+ if (!terminal)
+ {
+ /* If there are no frames there, let's pretend that we are a
+ well-behaving UN*X program and quit. */
+ Fkill_emacs (Qnil);
+ }
+ else
+ {
+ /* Otherwise, the SIGINT was probably generated by C-g. */
+
+ /* Set internal_last_event_frame to the top frame of the
+ controlling tty, if we have a frame there. We disable the
+ interrupt key on secondary ttys, so the SIGINT must have come
+ from the controlling tty. */
+ internal_last_event_frame = terminal->display_info.tty->top_frame;
+
+ handle_interrupt ();
+ }
+
+ errno = old_errno;
+}
+
+/* This routine is called at interrupt level in response to C-g.
+
+ It is called from the SIGINT handler or kbd_buffer_store_event.
+
+ If `waiting_for_input' is non zero, then unless `echoing' is
+ nonzero, immediately throw back to read_char.
+
+ Otherwise it sets the Lisp variable quit-flag not-nil. This causes
+ eval to throw, when it gets a chance. If quit-flag is already
+ non-nil, it stops the job right away. */
+
+static void
+handle_interrupt ()
+{
+ char c;
+
cancel_echoing ();
+ /* XXX This code needs to be revised for multi-tty support. */
if (!NILP (Vquit_flag)
- && (FRAME_TERMCAP_P (sf) || FRAME_MSDOS_P (sf)))
+#ifndef MSDOS
+ && get_named_tty ("/dev/tty")
+#endif
+ )
{
/* If SIGINT isn't blocked, don't let us be interrupted by
another SIGINT, it might be harmful due to non-reentrancy
@@ -10661,7 +11084,7 @@ interrupt_signal (signalnum) /* If we don't have an argument, */
sigblock (sigmask (SIGINT));
fflush (stdout);
- reset_sys_modes ();
+ reset_all_sys_modes ();
#ifdef SIGTSTP /* Support possible in later USG versions */
/*
@@ -10740,7 +11163,7 @@ interrupt_signal (signalnum) /* If we don't have an argument, */
printf ("Continuing...\n");
#endif /* not MSDOS */
fflush (stdout);
- init_sys_modes ();
+ init_all_sys_modes ();
sigfree ();
}
else
@@ -10768,9 +11191,7 @@ interrupt_signal (signalnum) /* If we don't have an argument, */
}
if (waiting_for_input && !echoing)
- quit_throw_to_read_char ();
-
- errno = old_errno;
+ quit_throw_to_read_char ();
}
/* Handle a C-g by making read_char return C-g. */
@@ -10803,75 +11224,203 @@ quit_throw_to_read_char ()
_longjmp (getcjmp, 1);
}
-DEFUN ("set-input-mode", Fset_input_mode, Sset_input_mode, 3, 4, 0,
- doc: /* Set mode of reading keyboard input.
-First arg INTERRUPT non-nil means use input interrupts;
- nil means use CBREAK mode.
-Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal
- (no effect except in CBREAK mode).
-Third arg META t means accept 8-bit input (for a Meta key).
- META nil means ignore the top bit, on the assumption it is parity.
- Otherwise, accept 8-bit input and don't use the top bit for Meta.
-Optional fourth arg QUIT if non-nil specifies character to use for quitting.
+DEFUN ("set-input-interrupt-mode", Fset_input_interrupt_mode, Sset_input_interrupt_mode, 1, 1, 0,
+ doc: /* Set interrupt mode of reading keyboard input.
+If INTERRUPT is non-nil, Emacs will use input interrupts;
+otherwise Emacs uses CBREAK mode.
+
See also `current-input-mode'. */)
- (interrupt, flow, meta, quit)
- Lisp_Object interrupt, flow, meta, quit;
+ (interrupt)
+ Lisp_Object interrupt;
{
- if (!NILP (quit)
- && (!INTEGERP (quit) || XINT (quit) < 0 || XINT (quit) > 0400))
- error ("set-input-mode: QUIT must be an ASCII character");
-
-#ifdef POLL_FOR_INPUT
- stop_polling ();
-#endif
-
-#ifndef DOS_NT
- /* this causes startup screen to be restored and messes with the mouse */
- reset_sys_modes ();
-#endif
-
+ int new_interrupt_input;
#ifdef SIGIO
/* Note SIGIO has been undef'd if FIONREAD is missing. */
- if (read_socket_hook)
+#ifdef HAVE_X_WINDOWS
+ if (x_display_list != NULL)
{
/* When using X, don't give the user a real choice,
because we haven't implemented the mechanisms to support it. */
#ifdef NO_SOCK_SIGIO
- interrupt_input = 0;
+ new_interrupt_input = 0;
#else /* not NO_SOCK_SIGIO */
- interrupt_input = 1;
+ new_interrupt_input = 1;
#endif /* NO_SOCK_SIGIO */
}
else
- interrupt_input = !NILP (interrupt);
+#endif
+ new_interrupt_input = !NILP (interrupt);
#else /* not SIGIO */
- interrupt_input = 0;
+ new_interrupt_input = 0;
#endif /* not SIGIO */
/* Our VMS input only works by interrupts, as of now. */
#ifdef VMS
- interrupt_input = 1;
+ new_interrupt_input = 1;
#endif
- flow_control = !NILP (flow);
+ if (new_interrupt_input != interrupt_input)
+ {
+#ifdef POLL_FOR_INPUT
+ stop_polling ();
+#endif
+#ifndef DOS_NT
+ /* this causes startup screen to be restored and messes with the mouse */
+ reset_all_sys_modes ();
+#endif
+ interrupt_input = new_interrupt_input;
+#ifndef DOS_NT
+ init_all_sys_modes ();
+#endif
+
+#ifdef POLL_FOR_INPUT
+ poll_suppress_count = 1;
+ start_polling ();
+#endif
+ }
+ return Qnil;
+}
+
+DEFUN ("set-output-flow-control", Fset_output_flow_control, Sset_output_flow_control, 1, 2, 0,
+ doc: /* Enable or disable ^S/^Q flow control for output to TERMINAL.
+If FLOW is non-nil, flow control is enabled and you cannot use C-s or
+C-q in key sequences.
+
+This setting only has an effect on tty terminals and only when
+Emacs reads input in CBREAK mode; see `set-input-interrupt-mode'.
+
+See also `current-input-mode'. */)
+ (flow, terminal)
+ Lisp_Object flow, terminal;
+{
+ struct terminal *t = get_terminal (terminal, 1);
+ struct tty_display_info *tty;
+ if (t == NULL || t->type != output_termcap)
+ return Qnil;
+ tty = t->display_info.tty;
+
+ if (tty->flow_control != !NILP (flow))
+ {
+#ifndef DOS_NT
+ /* this causes startup screen to be restored and messes with the mouse */
+ reset_sys_modes (tty);
+#endif
+
+ tty->flow_control = !NILP (flow);
+
+#ifndef DOS_NT
+ init_sys_modes (tty);
+#endif
+ }
+ return Qnil;
+}
+
+DEFUN ("set-input-meta-mode", Fset_input_meta_mode, Sset_input_meta_mode, 1, 2, 0,
+ doc: /* Enable or disable 8-bit input on TERMINAL.
+If META is t, Emacs will accept 8-bit input, and interpret the 8th
+bit as the Meta modifier.
+
+If META is nil, Emacs will ignore the top bit, on the assumption it is
+parity.
+
+Otherwise, Emacs will accept and pass through 8-bit input without
+specially interpreting the top bit.
+
+This setting only has an effect on tty terminal devices.
+
+Optional parameter TERMINAL specifies the tty terminal device to use.
+It may be a terminal id, a frame, or nil for the terminal used by the
+currently selected frame.
+
+See also `current-input-mode'. */)
+ (meta, terminal)
+ Lisp_Object meta, terminal;
+{
+ struct terminal *t = get_terminal (terminal, 1);
+ struct tty_display_info *tty;
+ int new_meta;
+
+ if (t == NULL || t->type != output_termcap)
+ return Qnil;
+ tty = t->display_info.tty;
+
if (NILP (meta))
- meta_key = 0;
+ new_meta = 0;
else if (EQ (meta, Qt))
- meta_key = 1;
+ new_meta = 1;
else
- meta_key = 2;
- if (!NILP (quit))
- /* Don't let this value be out of range. */
- quit_char = XINT (quit) & (meta_key ? 0377 : 0177);
+ new_meta = 2;
+ if (tty->meta_key != new_meta)
+ {
#ifndef DOS_NT
- init_sys_modes ();
+ /* this causes startup screen to be restored and messes with the mouse */
+ reset_sys_modes (tty);
#endif
-#ifdef POLL_FOR_INPUT
- poll_suppress_count = 1;
- start_polling ();
+ tty->meta_key = new_meta;
+
+#ifndef DOS_NT
+ init_sys_modes (tty);
#endif
+ }
+ return Qnil;
+}
+
+DEFUN ("set-quit-char", Fset_quit_char, Sset_quit_char, 1, 1, 0,
+ doc: /* Specify character used for quitting.
+QUIT must be an ASCII character.
+
+This function only has an effect on the controlling tty of the Emacs
+process.
+
+See also `current-input-mode'. */)
+ (quit)
+ Lisp_Object quit;
+{
+ struct terminal *t = get_named_tty ("/dev/tty");
+ struct tty_display_info *tty;
+ if (t == NULL || t->type != output_termcap)
+ return Qnil;
+ tty = t->display_info.tty;
+
+ if (NILP (quit) || !INTEGERP (quit) || XINT (quit) < 0 || XINT (quit) > 0400)
+ error ("QUIT must be an ASCII character");
+
+#ifndef DOS_NT
+ /* this causes startup screen to be restored and messes with the mouse */
+ reset_sys_modes (tty);
+#endif
+
+ /* Don't let this value be out of range. */
+ quit_char = XINT (quit) & (tty->meta_key == 0 ? 0177 : 0377);
+
+#ifndef DOS_NT
+ init_sys_modes (tty);
+#endif
+
+ return Qnil;
+}
+
+DEFUN ("set-input-mode", Fset_input_mode, Sset_input_mode, 3, 4, 0,
+ doc: /* Set mode of reading keyboard input.
+First arg INTERRUPT non-nil means use input interrupts;
+ nil means use CBREAK mode.
+Second arg FLOW non-nil means use ^S/^Q flow control for output to terminal
+ (no effect except in CBREAK mode).
+Third arg META t means accept 8-bit input (for a Meta key).
+ META nil means ignore the top bit, on the assumption it is parity.
+ Otherwise, accept 8-bit input and don't use the top bit for Meta.
+Optional fourth arg QUIT if non-nil specifies character to use for quitting.
+See also `current-input-mode'. */)
+ (interrupt, flow, meta, quit)
+ Lisp_Object interrupt, flow, meta, quit;
+{
+ Fset_input_interrupt_mode (interrupt);
+ Fset_output_flow_control (flow, Qnil);
+ Fset_input_meta_mode (meta, Qnil);
+ if (!NILP (quit))
+ Fset_quit_char (quit);
return Qnil;
}
@@ -10892,10 +11441,21 @@ The elements of this list correspond to the arguments of
()
{
Lisp_Object val[4];
+ struct frame *sf = XFRAME (selected_frame);
val[0] = interrupt_input ? Qt : Qnil;
- val[1] = flow_control ? Qt : Qnil;
- val[2] = meta_key == 2 ? make_number (0) : meta_key == 1 ? Qt : Qnil;
+ if (FRAME_TERMCAP_P (sf))
+ {
+ val[1] = FRAME_TTY (sf)->flow_control ? Qt : Qnil;
+ val[2] = (FRAME_TTY (sf)->meta_key == 2
+ ? make_number (0)
+ : (CURTTY ()->meta_key == 1 ? Qt : Qnil));
+ }
+ else
+ {
+ val[1] = Qnil;
+ val[2] = Qt;
+ }
XSETFASTINT (val[3], quit_char);
return Flist (sizeof (val) / sizeof (val[0]), val);
@@ -10987,6 +11547,7 @@ init_kboard (kb)
kb->Voverriding_terminal_local_map = Qnil;
kb->Vlast_command = Qnil;
kb->Vreal_last_command = Qnil;
+ kb->Vkeyboard_translate_table = Qnil;
kb->Vlast_repeatable_command = Qnil;
kb->Vprefix_arg = Qnil;
kb->Vlast_prefix_arg = Qnil;
@@ -11002,6 +11563,10 @@ init_kboard (kb)
kb->reference_count = 0;
kb->Vsystem_key_alist = Qnil;
kb->system_key_syms = Qnil;
+ kb->Vwindow_system = Qt; /* Unset. */
+ kb->Vinput_decode_map = Fmake_sparse_keymap (Qnil);
+ kb->Vlocal_function_key_map = Fmake_sparse_keymap (Qnil);
+ Fset_keymap_parent (kb->Vlocal_function_key_map, Vfunction_key_map);
kb->Vdefault_minibuffer_frame = Qnil;
}
@@ -11038,7 +11603,8 @@ delete_kboard (kb)
&& FRAMEP (selected_frame)
&& FRAME_LIVE_P (XFRAME (selected_frame)))
{
- current_kboard = XFRAME (selected_frame)->kboard;
+ current_kboard = FRAME_KBOARD (XFRAME (selected_frame));
+ single_kboard = 0;
if (current_kboard == kb)
abort ();
}
@@ -11063,7 +11629,7 @@ init_keyboard ()
recent_keys_index = 0;
kbd_fetch_ptr = kbd_buffer;
kbd_store_ptr = kbd_buffer;
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
do_mouse_tracking = Qnil;
#endif
input_pending = 0;
@@ -11078,11 +11644,21 @@ init_keyboard ()
#ifdef MULTI_KBOARD
current_kboard = initial_kboard;
#endif
+ /* Re-initialize the keyboard again. */
wipe_kboard (current_kboard);
init_kboard (current_kboard);
+ /* A value of nil for Vwindow_system normally means a tty, but we also use
+ it for the initial terminal since there is no window system there. */
+ current_kboard->Vwindow_system = Qnil;
- if (!noninteractive && !read_socket_hook && NILP (Vwindow_system))
+ if (!noninteractive)
{
+ /* Before multi-tty support, these handlers used to be installed
+ only if the current session was a tty session. Now an Emacs
+ session may have multiple display types, so we always handle
+ SIGINT. There is special code in interrupt_signal to exit
+ Emacs on SIGINT when there are no termcap frames on the
+ controlling terminal. */
signal (SIGINT, interrupt_signal);
#if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS)
/* For systems with SysV TERMIO, C-g is set up for both SIGINT and
@@ -11256,7 +11832,7 @@ syms_of_keyboard ()
Qmenu_bar = intern ("menu-bar");
staticpro (&Qmenu_bar);
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
Qmouse_fixup_help_message = intern ("mouse-fixup-help-message");
staticpro (&Qmouse_fixup_help_message);
#endif
@@ -11329,7 +11905,7 @@ syms_of_keyboard ()
staticpro (&button_down_location);
mouse_syms = Fmake_vector (make_number (1), Qnil);
staticpro (&mouse_syms);
- wheel_syms = Fmake_vector (make_number (2), Qnil);
+ wheel_syms = Fmake_vector (make_number (4), Qnil);
staticpro (&wheel_syms);
{
@@ -11384,11 +11960,12 @@ syms_of_keyboard ()
staticpro (&help_form_saved_window_configs);
defsubr (&Scurrent_idle_time);
+ defsubr (&Sevent_symbol_parse_modifiers);
defsubr (&Sevent_convert_list);
defsubr (&Sread_key_sequence);
defsubr (&Sread_key_sequence_vector);
defsubr (&Srecursive_edit);
-#ifdef HAVE_MOUSE
+#if defined (HAVE_MOUSE) || defined (HAVE_GPM)
defsubr (&Strack_mouse);
#endif
defsubr (&Sinput_pending_p);
@@ -11407,6 +11984,10 @@ syms_of_keyboard ()
defsubr (&Stop_level);
defsubr (&Sdiscard_input);
defsubr (&Sopen_dribble_file);
+ defsubr (&Sset_input_interrupt_mode);
+ defsubr (&Sset_output_flow_control);
+ defsubr (&Sset_input_meta_mode);
+ defsubr (&Sset_quit_char);
defsubr (&Sset_input_mode);
defsubr (&Scurrent_input_mode);
defsubr (&Sexecute_extended_command);
@@ -11473,7 +12054,10 @@ In other words, the present command is the event that made the previous
command exit.
The value `kill-region' is special; it means that the previous command
-was a kill command. */);
+was a kill command.
+
+`last-command' has a separate binding for each terminal device.
+See Info node `(elisp)Multiple displays'. */);
DEFVAR_KBOARD ("real-last-command", Vreal_last_command,
doc: /* Same as `last-command', but never altered by Lisp code. */);
@@ -11590,8 +12174,8 @@ for that character after that prefix key. */);
Useful to set before you dump a modified Emacs. */);
Vtop_level = Qnil;
- DEFVAR_LISP ("keyboard-translate-table", &Vkeyboard_translate_table,
- doc: /* Translate table for keyboard input, or nil.
+ DEFVAR_KBOARD ("keyboard-translate-table", Vkeyboard_translate_table,
+ doc: /* Translate table for local keyboard input, or nil.
If non-nil, the value should be a char-table. Each character read
from the keyboard is looked up in this char-table. If the value found
there is non-nil, then it is used instead of the actual input character.
@@ -11601,8 +12185,10 @@ If it is a string or vector of length N, character codes N and up are left
untranslated. In a vector, an element which is nil means "no translation".
This is applied to the characters supplied to input methods, not their
-output. See also `translation-table-for-input'. */);
- Vkeyboard_translate_table = Qnil;
+output. See also `translation-table-for-input'.
+
+This variable has a separate binding for each terminal. See Info node
+`(elisp)Multiple displays'. */);
DEFVAR_BOOL ("cannot-suspend", &cannot_suspend,
doc: /* Non-nil means to always spawn a subshell instead of suspending.
@@ -11687,7 +12273,11 @@ buffer's local map, and the minor mode keymaps and text property keymaps.
It also replaces `overriding-local-map'.
This variable is intended to let commands such as `universal-argument'
-set up a different keymap for reading the next command. */);
+set up a different keymap for reading the next command.
+
+`overriding-terminal-local-map' has a separate binding for each
+terminal device.
+See Info node `(elisp)Multiple displays'. */);
DEFVAR_LISP ("overriding-local-map", &Voverriding_local_map,
doc: /* Keymap that overrides all other local keymaps.
@@ -11712,7 +12302,73 @@ and the minor mode maps regardless of `overriding-local-map'. */);
doc: /* Alist of system-specific X windows key symbols.
Each element should have the form (N . SYMBOL) where N is the
numeric keysym code (sans the \"system-specific\" bit 1<<28)
-and SYMBOL is its name. */);
+and SYMBOL is its name.
+
+`system-key-alist' has a separate binding for each terminal device.
+See Info node `(elisp)Multiple displays'. */);
+
+ DEFVAR_KBOARD ("local-function-key-map", Vlocal_function_key_map,
+ doc: /* Keymap that translates key sequences to key sequences during input.
+This is used mainly for mapping key sequences into some preferred
+key events (symbols).
+
+The `read-key-sequence' function replaces any subsequence bound by
+`local-function-key-map' with its binding. More precisely, when the
+active keymaps have no binding for the current key sequence but
+`local-function-key-map' binds a suffix of the sequence to a vector or
+string, `read-key-sequence' replaces the matching suffix with its
+binding, and continues with the new sequence.
+
+If the binding is a function, it is called with one argument (the prompt)
+and its return value (a key sequence) is used.
+
+The events that come from bindings in `local-function-key-map' are not
+themselves looked up in `local-function-key-map'.
+
+For example, suppose `local-function-key-map' binds `ESC O P' to [f1].
+Typing `ESC O P' to `read-key-sequence' would return [f1]. Typing
+`C-x ESC O P' would return [?\\C-x f1]. If [f1] were a prefix key,
+typing `ESC O P x' would return [f1 x].
+
+`local-function-key-map' has a separate binding for each terminal
+device. See Info node `(elisp)Multiple displays'. If you need to
+define a binding on all terminals, change `function-key-map'
+instead. Initially, `local-function-key-map' is an empty keymap that
+has `function-key-map' as its parent on all terminal devices. */);
+
+ DEFVAR_KBOARD ("input-decode-map", Vinput_decode_map,
+ doc: /* Keymap that decodes input escape sequences.
+This is used mainly for mapping ASCII function key sequences into
+real Emacs function key events (symbols).
+
+The `read-key-sequence' function replaces any subsequence bound by
+`local-function-key-map' with its binding. Contrary to `function-key-map',
+this map applies its rebinding regardless of the presence of an ordinary
+binding. So it is more like `key-translation-map' except that it applies
+before `function-key-map' rather than after.
+
+If the binding is a function, it is called with one argument (the prompt)
+and its return value (a key sequence) is used.
+
+The events that come from bindings in `input-decode-map' are not
+themselves looked up in `input-decode-map'.
+
+This variable is keyboard-local. */);
+
+ DEFVAR_LISP ("function-key-map", &Vfunction_key_map,
+ doc: /* The parent keymap of all `local-function-key-map' instances.
+Function key definitions that apply to all terminal devices should go
+here. If a mapping is defined in both the current
+`local-function-key-map' binding and this variable, then the local
+definition will take precendence. */);
+ Vfunction_key_map = Fmake_sparse_keymap (Qnil);
+
+ DEFVAR_LISP ("key-translation-map", &Vkey_translation_map,
+ doc: /* Keymap of key translations that can override keymaps.
+This keymap works like `function-key-map', but comes after that,
+and its non-prefix bindings override ordinary bindings.
+Another difference is that it is global rather than keyboard-local. */);
+ Vkey_translation_map = Fmake_sparse_keymap (Qnil);
DEFVAR_LISP ("deferred-action-list", &Vdeferred_action_list,
doc: /* List of deferred actions to be performed at a later time.
@@ -11820,6 +12476,15 @@ and the Lisp function within which the error was signaled. */);
Help functions bind this to allow help on disabled menu items
and tool-bar buttons. */);
Venable_disabled_menus_and_buttons = Qnil;
+
+#ifdef MULTI_KBOARD
+ /* Create the initial keyboard. */
+ initial_kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
+ init_kboard (initial_kboard);
+ /* Vwindow_system is left at t for now. */
+ initial_kboard->next_kboard = all_kboards;
+ all_kboards = initial_kboard;
+#endif
}
void
@@ -11881,6 +12546,7 @@ mark_kboards ()
mark_object (kb->Voverriding_terminal_local_map);
mark_object (kb->Vlast_command);
mark_object (kb->Vreal_last_command);
+ mark_object (kb->Vkeyboard_translate_table);
mark_object (kb->Vlast_repeatable_command);
mark_object (kb->Vprefix_arg);
mark_object (kb->Vlast_prefix_arg);
@@ -11889,6 +12555,9 @@ mark_kboards ()
mark_object (kb->Vlast_kbd_macro);
mark_object (kb->Vsystem_key_alist);
mark_object (kb->system_key_syms);
+ mark_object (kb->Vwindow_system);
+ mark_object (kb->Vinput_decode_map);
+ mark_object (kb->Vlocal_function_key_map);
mark_object (kb->Vdefault_minibuffer_frame);
mark_object (kb->echo_string);
}
diff --git a/src/keyboard.h b/src/keyboard.h
index ea147cad483..6d046bc98e7 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -23,8 +23,9 @@ Boston, MA 02110-1301, USA. */
/* Length of echobuf field in each KBOARD. */
-/* Each KBOARD represents one logical input stream from which Emacs gets input.
- If we are using an ordinary terminal, it has one KBOARD object.
+/* Each KBOARD represents one logical input stream from which Emacs
+ gets input. If we are using ordinary terminals, it has one KBOARD
+ object for each terminal device.
Usually each X display screen has its own KBOARD,
but when two of them are on the same X server,
we assume they share a keyboard and give them one KBOARD in common.
@@ -79,10 +80,12 @@ struct kboard
commands that set the prefix argument. */
Lisp_Object Vlast_command;
- /* Normally same as last-command, but never modified by
- other commands. */
+ /* Normally same as last-command, but never modified by other commands. */
Lisp_Object Vreal_last_command;
+ /* User-supplied table to translate input characters through. */
+ Lisp_Object Vkeyboard_translate_table;
+
/* Last command that may be repeated by `repeat'. */
Lisp_Object Vlast_repeatable_command;
@@ -126,6 +129,18 @@ struct kboard
/* Cache for modify_event_symbol. */
Lisp_Object system_key_syms;
+ /* The kind of display: x, w32, ... */
+ Lisp_Object Vwindow_system;
+
+ /* Keymap mapping keys to alternative preferred forms.
+ See the DEFVAR for more documentation. */
+ Lisp_Object Vlocal_function_key_map;
+
+ /* Keymap mapping ASCII function key sequences onto their preferred
+ forms. Initialized by the terminal-specific lisp files. See the
+ DEFVAR for more documentation. */
+ Lisp_Object Vinput_decode_map;
+
/* Minibufferless frames on this display use this frame's minibuffer. */
Lisp_Object Vdefault_minibuffer_frame;
@@ -158,7 +173,7 @@ struct kboard
};
#ifdef MULTI_KBOARD
-/* Temporarily used before a frame has been opened, and for termcap frames */
+/* Temporarily used before a frame has been opened. */
extern KBOARD *initial_kboard;
/* In the single-kboard state, this is the kboard
@@ -193,10 +208,6 @@ extern EMACS_INT num_nonmacro_input_events;
/* Nonzero means polling for input is temporarily suppressed. */
extern int poll_suppress_count;
-/* Keymap mapping ASCII function key sequences onto their preferred forms.
- Initialized by the terminal-specific lisp files. */
-extern Lisp_Object Vfunction_key_map;
-
/* Vector holding the key sequence that invoked the current command.
It is reused for each command, and it may be longer than the current
sequence; this_command_key_count indicates how many elements
@@ -304,18 +315,24 @@ extern Lisp_Object parse_modifiers P_ ((Lisp_Object));
extern Lisp_Object reorder_modifiers P_ ((Lisp_Object));
extern Lisp_Object read_char P_ ((int, int, Lisp_Object *, Lisp_Object,
int *, EMACS_TIME *));
-/* User-supplied string to translate input characters through. */
-extern Lisp_Object Vkeyboard_translate_table;
+
+
+/* Parent keymap of terminal-local function-key-map instances. */
+extern Lisp_Object Vfunction_key_map;
+
+/* Keymap of key translations that can override keymaps. */
+extern Lisp_Object Vkey_translation_map;
extern int parse_menu_item P_ ((Lisp_Object, int, int));
extern void echo_now P_ ((void));
extern void init_kboard P_ ((KBOARD *));
extern void delete_kboard P_ ((KBOARD *));
-extern void single_kboard_state P_ ((void));
extern void not_single_kboard_state P_ ((KBOARD *));
+extern void push_kboard P_ ((struct kboard *));
extern void push_frame_kboard P_ ((struct frame *));
-extern void pop_frame_kboard P_ ((void));
+extern void pop_kboard P_ ((void));
+extern void temporarily_switch_to_single_kboard P_ ((struct frame *));
extern void record_asynch_buffer_change P_ ((void));
extern SIGTYPE input_poll_signal P_ ((int));
extern void start_polling P_ ((void));
@@ -349,5 +366,8 @@ extern Lisp_Object menu_item_eval_property P_ ((Lisp_Object));
extern int kbd_buffer_events_waiting P_ ((int));
extern void add_user_signals P_ ((int, const char *));
+extern int tty_read_avail_input P_ ((struct terminal *, int,
+ struct input_event *));
+
/* arch-tag: 769cbade-1ba9-4950-b886-db265b061aa3
(do not change this comment) */
diff --git a/src/keymap.c b/src/keymap.c
index e1e45b18d4e..2edad90b732 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -31,6 +31,7 @@ Boston, MA 02110-1301, USA. */
#include "buffer.h"
#include "charset.h"
#include "keyboard.h"
+#include "frame.h"
#include "termhooks.h"
#include "blockinput.h"
#include "puresize.h"
@@ -90,14 +91,6 @@ Lisp_Object Vminor_mode_overriding_map_alist;
/* List of emulation mode keymap alists. */
Lisp_Object Vemulation_mode_map_alists;
-/* Keymap mapping ASCII function key sequences onto their preferred forms.
- Initialized by the terminal-specific lisp files. See DEFVAR for more
- documentation. */
-Lisp_Object Vfunction_key_map;
-
-/* Keymap mapping ASCII function key sequences onto their preferred forms. */
-Lisp_Object Vkey_translation_map;
-
/* A list of all commands given new bindings since a certain time
when nil was stored here.
This is used to speed up recomputation of menu key equivalents
@@ -429,7 +422,7 @@ Return PARENT. PARENT should be nil or another keymap. */)
if (CHAR_TABLE_P (XCAR (list)))
{
- Lisp_Object indices[3];
+ int indices[3];
map_char_table (fix_submap_inheritance, Qnil,
XCAR (list), XCAR (list),
@@ -728,7 +721,7 @@ map_keymap (map, fun, args, data, autoload)
}
else if (CHAR_TABLE_P (binding))
{
- Lisp_Object indices[3];
+ int indices[3];
map_char_table (map_keymap_char_table_item, Qnil, binding, binding,
Fcons (make_save_value (fun, 0),
Fcons (make_save_value (data, 0),
@@ -1079,7 +1072,7 @@ is not copied. */)
Lisp_Object elt = XCAR (keymap);
if (CHAR_TABLE_P (elt))
{
- Lisp_Object indices[3];
+ int indices[3];
elt = Fcopy_sequence (elt);
map_char_table (copy_keymap_1, Qnil, elt, elt, elt, 0, indices);
}
@@ -1156,7 +1149,8 @@ binding KEY to DEF is added at the front of KEYMAP. */)
if (SYMBOLP (def) && !EQ (Vdefine_key_rebound_commands, Qt))
Vdefine_key_rebound_commands = Fcons (def, Vdefine_key_rebound_commands);
- meta_bit = VECTORP (key) ? meta_modifier : 0x80;
+ meta_bit = (VECTORP (key) || (STRINGP (key) && STRING_MULTIBYTE (key))
+ ? meta_modifier : 0x80);
if (VECTORP (def) && ASIZE (def) > 0 && CONSP (AREF (def, 0)))
{ /* DEF is apparently an XEmacs-style keyboard macro. */
@@ -1253,9 +1247,9 @@ remapping in all currently active keymaps. */)
{
Lisp_Object maps, binding;
- for (maps = keymaps; !NILP (maps); maps = Fcdr (maps))
+ for (maps = keymaps; CONSP (maps); maps = XCDR (maps))
{
- binding = Flookup_key (Fcar (maps), command_remapping_vector, Qnil);
+ binding = Flookup_key (XCAR (maps), command_remapping_vector, Qnil);
if (!NILP (binding) && !INTEGERP (binding))
return binding;
}
@@ -1312,7 +1306,7 @@ recognize the default bindings, just as `read-key-sequence' does. */)
c = Fevent_convert_list (c);
/* Turn the 8th bit of string chars into a meta modifier. */
- if (INTEGERP (c) && XINT (c) & 0x80 && STRINGP (key))
+ if (STRINGP (key) && XINT (c) & 0x80 && !STRING_MULTIBYTE (key))
XSETINT (c, (XINT (c) | meta_modifier) & ~0x80);
/* Allow string since binding for `menu-bar-select-buffer'
@@ -1540,14 +1534,47 @@ current_minor_maps (modeptr, mapptr)
}
DEFUN ("current-active-maps", Fcurrent_active_maps, Scurrent_active_maps,
- 0, 1, 0,
+ 0, 2, 0,
doc: /* Return a list of the currently active keymaps.
OLP if non-nil indicates that we should obey `overriding-local-map' and
-`overriding-terminal-local-map'. */)
- (olp)
- Lisp_Object olp;
+`overriding-terminal-local-map'. POSITION can specify a click position
+like in the respective argument of `key-binding'. */)
+ (olp, position)
+ Lisp_Object olp, position;
{
- Lisp_Object keymaps = Fcons (current_global_map, Qnil);
+ int count = SPECPDL_INDEX ();
+
+ Lisp_Object keymaps;
+
+ /* If a mouse click position is given, our variables are based on
+ the buffer clicked on, not the current buffer. So we may have to
+ switch the buffer here. */
+
+ if (CONSP (position))
+ {
+ Lisp_Object window;
+
+ window = POSN_WINDOW (position);
+
+ if (WINDOWP (window)
+ && BUFFERP (XWINDOW (window)->buffer)
+ && XBUFFER (XWINDOW (window)->buffer) != current_buffer)
+ {
+ /* Arrange to go back to the original buffer once we're done
+ processing the key sequence. We don't use
+ save_excursion_{save,restore} here, in analogy to
+ `read-key-sequence' to avoid saving point. Maybe this
+ would not be a problem here, but it is easier to keep
+ things the same.
+ */
+
+ record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
+
+ set_buffer_internal (XBUFFER (XWINDOW (window)->buffer));
+ }
+ }
+
+ keymaps = Fcons (current_global_map, Qnil);
if (!NILP (olp))
{
@@ -1561,15 +1588,76 @@ OLP if non-nil indicates that we should obey `overriding-local-map' and
}
if (NILP (XCDR (keymaps)))
{
- Lisp_Object local;
Lisp_Object *maps;
int nmaps, i;
- /* This usually returns the buffer's local map,
- but that can be overridden by a `local-map' property. */
- local = get_local_map (PT, current_buffer, Qlocal_map);
- if (!NILP (local))
- keymaps = Fcons (local, keymaps);
+ Lisp_Object keymap, local_map;
+ EMACS_INT pt;
+
+ pt = INTEGERP (position) ? XINT (position)
+ : MARKERP (position) ? marker_position (position)
+ : PT;
+
+ /* Get the buffer local maps, possibly overriden by text or
+ overlay properties */
+
+ local_map = get_local_map (pt, current_buffer, Qlocal_map);
+ keymap = get_local_map (pt, current_buffer, Qkeymap);
+
+ if (CONSP (position))
+ {
+ Lisp_Object string;
+
+ /* For a mouse click, get the local text-property keymap
+ of the place clicked on, rather than point. */
+
+ if (POSN_INBUFFER_P (position))
+ {
+ Lisp_Object pos;
+
+ pos = POSN_BUFFER_POSN (position);
+ if (INTEGERP (pos)
+ && XINT (pos) >= BEG && XINT (pos) <= Z)
+ {
+ local_map = get_local_map (XINT (pos),
+ current_buffer, Qlocal_map);
+
+ keymap = get_local_map (XINT (pos),
+ current_buffer, Qkeymap);
+ }
+ }
+
+ /* If on a mode line string with a local keymap,
+ or for a click on a string, i.e. overlay string or a
+ string displayed via the `display' property,
+ consider `local-map' and `keymap' properties of
+ that string. */
+
+ if (string = POSN_STRING (position),
+ (CONSP (string) && STRINGP (XCAR (string))))
+ {
+ Lisp_Object pos, map;
+
+ pos = XCDR (string);
+ string = XCAR (string);
+ if (INTEGERP (pos)
+ && XINT (pos) >= 0
+ && XINT (pos) < SCHARS (string))
+ {
+ map = Fget_text_property (pos, Qlocal_map, string);
+ if (!NILP (map))
+ local_map = map;
+
+ map = Fget_text_property (pos, Qkeymap, string);
+ if (!NILP (map))
+ keymap = map;
+ }
+ }
+
+ }
+
+ if (!NILP (local_map))
+ keymaps = Fcons (local_map, keymaps);
/* Now put all the minor mode keymaps on the list. */
nmaps = current_minor_maps (0, &maps);
@@ -1578,12 +1666,12 @@ OLP if non-nil indicates that we should obey `overriding-local-map' and
if (!NILP (maps[i]))
keymaps = Fcons (maps[i], keymaps);
- /* This returns nil unless there is a `keymap' property. */
- local = get_local_map (PT, current_buffer, Qkeymap);
- if (!NILP (local))
- keymaps = Fcons (local, keymaps);
+ if (!NILP (keymap))
+ keymaps = Fcons (keymap, keymaps);
}
+ unbind_to (count, Qnil);
+
return keymaps;
}
@@ -1951,12 +2039,23 @@ DEFUN ("current-minor-mode-maps", Fcurrent_minor_mode_maps, Scurrent_minor_mode_
/* Help functions for describing and documenting keymaps. */
+struct accessible_keymaps_data {
+ Lisp_Object maps, tail, thisseq;
+ /* Does the current sequence end in the meta-prefix-char? */
+ int is_metized;
+};
static void
-accessible_keymaps_1 (key, cmd, maps, tail, thisseq, is_metized)
- Lisp_Object maps, tail, thisseq, key, cmd;
- int is_metized; /* If 1, `key' is assumed to be INTEGERP. */
+accessible_keymaps_1 (key, cmd, args, data)
+ Lisp_Object key, cmd, args;
+ /* Use void* to be compatible with map_keymap_function_t. */
+ void *data;
{
+ struct accessible_keymaps_data *d = data; /* Cast! */
+ Lisp_Object maps = d->maps;
+ Lisp_Object tail = d->tail;
+ Lisp_Object thisseq = d->thisseq;
+ int is_metized = d->is_metized && INTEGERP (key);
Lisp_Object tem;
cmd = get_keymap (get_keyelt (cmd, 0), 0, 0);
@@ -2010,17 +2109,6 @@ accessible_keymaps_1 (key, cmd, maps, tail, thisseq, is_metized)
}
}
-static void
-accessible_keymaps_char_table (args, index, cmd)
- Lisp_Object args, index, cmd;
-{
- accessible_keymaps_1 (index, cmd,
- XCAR (XCAR (args)),
- XCAR (XCDR (args)),
- XCDR (XCDR (args)),
- XINT (XCDR (XCAR (args))));
-}
-
/* This function cannot GC. */
DEFUN ("accessible-keymaps", Faccessible_keymaps, Saccessible_keymaps,
@@ -2035,14 +2123,11 @@ then the value includes only maps for prefixes that start with PREFIX. */)
Lisp_Object keymap, prefix;
{
Lisp_Object maps, tail;
- int prefixlen = 0;
+ int prefixlen = XINT (Flength (prefix));
/* no need for gcpro because we don't autoload any keymaps. */
if (!NILP (prefix))
- prefixlen = XINT (Flength (prefix));
-
- if (!NILP (prefix))
{
/* If a prefix was specified, start with the keymap (if any) for
that prefix, so we don't waste time considering other prefixes. */
@@ -2052,7 +2137,9 @@ then the value includes only maps for prefixes that start with PREFIX. */)
if the prefix is not defined in this particular map.
It might even give us a list that isn't a keymap. */
tem = get_keymap (tem, 0, 0);
- if (CONSP (tem))
+ /* If the keymap is autoloaded `tem' is not a cons-cell, but we still
+ want to return it. */
+ if (!NILP (tem))
{
/* Convert PREFIX to a vector now, so that later on
we don't have to deal with the possibility of a string. */
@@ -2092,57 +2179,26 @@ then the value includes only maps for prefixes that start with PREFIX. */)
for (tail = maps; CONSP (tail); tail = XCDR (tail))
{
- register Lisp_Object thisseq, thismap;
+ struct accessible_keymaps_data data;
+ register Lisp_Object thismap = Fcdr (XCAR (tail));
Lisp_Object last;
- /* Does the current sequence end in the meta-prefix-char? */
- int is_metized;
- thisseq = Fcar (Fcar (tail));
- thismap = Fcdr (Fcar (tail));
- last = make_number (XINT (Flength (thisseq)) - 1);
- is_metized = (XINT (last) >= 0
+ data.thisseq = Fcar (XCAR (tail));
+ data.maps = maps;
+ data.tail = tail;
+ last = make_number (XINT (Flength (data.thisseq)) - 1);
+ /* Does the current sequence end in the meta-prefix-char? */
+ data.is_metized = (XINT (last) >= 0
/* Don't metize the last char of PREFIX. */
&& XINT (last) >= prefixlen
- && EQ (Faref (thisseq, last), meta_prefix_char));
-
- for (; CONSP (thismap); thismap = XCDR (thismap))
- {
- Lisp_Object elt;
-
- elt = XCAR (thismap);
-
- QUIT;
-
- if (CHAR_TABLE_P (elt))
- {
- Lisp_Object indices[3];
-
- map_char_table (accessible_keymaps_char_table, Qnil, elt,
- elt, Fcons (Fcons (maps, make_number (is_metized)),
- Fcons (tail, thisseq)),
- 0, indices);
- }
- else if (VECTORP (elt))
- {
- register int i;
-
- /* Vector keymap. Scan all the elements. */
- for (i = 0; i < ASIZE (elt); i++)
- accessible_keymaps_1 (make_number (i), AREF (elt, i),
- maps, tail, thisseq, is_metized);
+ && EQ (Faref (data.thisseq, last), meta_prefix_char));
- }
- else if (CONSP (elt))
- accessible_keymaps_1 (XCAR (elt), XCDR (elt),
- maps, tail, thisseq,
- is_metized && INTEGERP (XCAR (elt)));
-
- }
+ /* Since we can't run lisp code, we can't scan autoloaded maps. */
+ if (CONSP (thismap))
+ map_keymap (thismap, accessible_keymaps_1, Qnil, &data, 0);
}
-
return maps;
}
-
Lisp_Object Qsingle_key_description, Qkey_description;
/* This function cannot GC. */
@@ -2187,7 +2243,7 @@ spaces are put between sequence elements, etc. */)
len += 2;
}
else if (len == 0)
- return empty_string;
+ return empty_unibyte_string;
return Fconcat (len - 1, args);
}
@@ -2413,7 +2469,7 @@ around function keys and event symbols. */)
{
char buf[256];
- sprintf (buf, "Invalid char code %d", XINT (key));
+ sprintf (buf, "Invalid char code %ld", XINT (key));
return build_string (buf);
}
else if (charset
@@ -2556,8 +2612,8 @@ ascii_sequence_p (seq)
/* where-is - finding a command in a set of keymaps. */
static Lisp_Object where_is_internal ();
-static Lisp_Object where_is_internal_1 ();
-static void where_is_internal_2 ();
+static void where_is_internal_1 P_ ((Lisp_Object key, Lisp_Object binding,
+ Lisp_Object args, void *data));
/* Like Flookup_key, but uses a list of keymaps SHADOW instead of a single map.
Returns the first non-nil binding found in any of those maps. */
@@ -2586,6 +2642,12 @@ shadow_lookup (shadow, key, flag)
static Lisp_Object Vmouse_events;
+struct where_is_internal_data {
+ Lisp_Object definition, noindirect, this, last;
+ int last_is_meta;
+ Lisp_Object sequences;
+};
+
/* This function can GC if Flookup_key autoloads any keymaps. */
static Lisp_Object
@@ -2619,10 +2681,11 @@ where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
&& !NILP (Fcommand_remapping (definition, Qnil, keymaps)))
RETURN_UNGCPRO (Qnil);
- for (; !NILP (maps); maps = Fcdr (maps))
+ for (; CONSP (maps); maps = XCDR (maps))
{
/* Key sequence to reach map, and the map that it reaches */
register Lisp_Object this, map, tem;
+ struct where_is_internal_data data;
/* In order to fold [META-PREFIX-CHAR CHAR] sequences into
[M-CHAR] sequences, check if last character of the sequence
@@ -2630,8 +2693,8 @@ where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
Lisp_Object last;
int last_is_meta;
- this = Fcar (Fcar (maps));
- map = Fcdr (Fcar (maps));
+ this = Fcar (XCAR (maps));
+ map = Fcdr (XCAR (maps));
last = make_number (XINT (Flength (this)) - 1);
last_is_meta = (XINT (last) >= 0
&& EQ (Faref (this, last), meta_prefix_char));
@@ -2647,148 +2710,94 @@ where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
QUIT;
- while (CONSP (map))
- {
- /* Because the code we want to run on each binding is rather
- large, we don't want to have two separate loop bodies for
- sparse keymap bindings and tables; we want to iterate one
- loop body over both keymap and vector bindings.
+ data.definition = definition;
+ data.noindirect = noindirect;
+ data.this = this;
+ data.last = last;
+ data.last_is_meta = last_is_meta;
+ data.sequences = Qnil;
- For this reason, if Fcar (map) is a vector, we don't
- advance map to the next element until i indicates that we
- have finished off the vector. */
- Lisp_Object elt, key, binding;
- elt = XCAR (map);
- map = XCDR (map);
+ if (CONSP (map))
+ map_keymap (map, where_is_internal_1, Qnil, &data, 0);
- sequences = Qnil;
+ sequences = data.sequences;
- QUIT;
-
- /* Set key and binding to the current key and binding, and
- advance map and i to the next binding. */
- if (VECTORP (elt))
+ while (CONSP (sequences))
+ {
+ Lisp_Object sequence, remapped, function;
+
+ sequence = XCAR (sequences);
+ sequences = XCDR (sequences);
+
+ /* If the current sequence is a command remapping with
+ format [remap COMMAND], find the key sequences
+ which run COMMAND, and use those sequences instead. */
+ remapped = Qnil;
+ if (NILP (no_remap)
+ && VECTORP (sequence) && XVECTOR (sequence)->size == 2
+ && EQ (AREF (sequence, 0), Qremap)
+ && (function = AREF (sequence, 1), SYMBOLP (function)))
{
- Lisp_Object sequence;
- int i;
- /* In a vector, look at each element. */
- for (i = 0; i < XVECTOR (elt)->size; i++)
+ Lisp_Object remapped1;
+
+ remapped1 = where_is_internal (function, keymaps, firstonly, noindirect, Qt);
+ if (CONSP (remapped1))
{
- binding = AREF (elt, i);
- XSETFASTINT (key, i);
- sequence = where_is_internal_1 (binding, key, definition,
- noindirect, this,
- last, nomenus, last_is_meta);
- if (!NILP (sequence))
- sequences = Fcons (sequence, sequences);
+ /* Verify that this key binding actually maps to the
+ remapped command (see below). */
+ if (!EQ (shadow_lookup (keymaps, XCAR (remapped1), Qnil), function))
+ continue;
+ sequence = XCAR (remapped1);
+ remapped = XCDR (remapped1);
+ goto record_sequence;
}
}
- else if (CHAR_TABLE_P (elt))
- {
- Lisp_Object indices[3];
- Lisp_Object args;
-
- args = Fcons (Fcons (Fcons (definition, noindirect),
- Qnil), /* Result accumulator. */
- Fcons (Fcons (this, last),
- Fcons (make_number (nomenus),
- make_number (last_is_meta))));
- map_char_table (where_is_internal_2, Qnil, elt, elt, args,
- 0, indices);
- sequences = XCDR (XCAR (args));
- }
- else if (CONSP (elt))
- {
- Lisp_Object sequence;
- key = XCAR (elt);
- binding = XCDR (elt);
+ /* Verify that this key binding is not shadowed by another
+ binding for the same key, before we say it exists.
- sequence = where_is_internal_1 (binding, key, definition,
- noindirect, this,
- last, nomenus, last_is_meta);
- if (!NILP (sequence))
- sequences = Fcons (sequence, sequences);
- }
+ Mechanism: look for local definition of this key and if
+ it is defined and does not match what we found then
+ ignore this key.
+ Either nil or number as value from Flookup_key
+ means undefined. */
+ if (!EQ (shadow_lookup (keymaps, sequence, Qnil), definition))
+ continue;
- while (!NILP (sequences))
+ record_sequence:
+ /* Don't annoy user with strings from a menu such as
+ Select Paste. Change them all to "(any string)",
+ so that there seems to be only one menu item
+ to report. */
+ if (! NILP (sequence))
{
- Lisp_Object sequence, remapped, function;
-
- sequence = XCAR (sequences);
- sequences = XCDR (sequences);
-
- /* If the current sequence is a command remapping with
- format [remap COMMAND], find the key sequences
- which run COMMAND, and use those sequences instead. */
- remapped = Qnil;
- if (NILP (no_remap)
- && VECTORP (sequence) && XVECTOR (sequence)->size == 2
- && EQ (AREF (sequence, 0), Qremap)
- && (function = AREF (sequence, 1), SYMBOLP (function)))
- {
- Lisp_Object remapped1;
-
- remapped1 = where_is_internal (function, keymaps, firstonly, noindirect, Qt);
- if (CONSP (remapped1))
- {
- /* Verify that this key binding actually maps to the
- remapped command (see below). */
- if (!EQ (shadow_lookup (keymaps, XCAR (remapped1), Qnil), function))
- continue;
- sequence = XCAR (remapped1);
- remapped = XCDR (remapped1);
- goto record_sequence;
- }
- }
-
- /* Verify that this key binding is not shadowed by another
- binding for the same key, before we say it exists.
-
- Mechanism: look for local definition of this key and if
- it is defined and does not match what we found then
- ignore this key.
-
- Either nil or number as value from Flookup_key
- means undefined. */
- if (!EQ (shadow_lookup (keymaps, sequence, Qnil), definition))
- continue;
-
- record_sequence:
- /* Don't annoy user with strings from a menu such as
- Select Paste. Change them all to "(any string)",
- so that there seems to be only one menu item
- to report. */
- if (! NILP (sequence))
- {
- Lisp_Object tem;
- tem = Faref (sequence, make_number (XVECTOR (sequence)->size - 1));
- if (STRINGP (tem))
- Faset (sequence, make_number (XVECTOR (sequence)->size - 1),
- build_string ("(any string)"));
- }
+ Lisp_Object tem;
+ tem = Faref (sequence, make_number (XVECTOR (sequence)->size - 1));
+ if (STRINGP (tem))
+ Faset (sequence, make_number (XVECTOR (sequence)->size - 1),
+ build_string ("(any string)"));
+ }
- /* It is a true unshadowed match. Record it, unless it's already
- been seen (as could happen when inheriting keymaps). */
- if (NILP (Fmember (sequence, found)))
- found = Fcons (sequence, found);
-
- /* If firstonly is Qnon_ascii, then we can return the first
- binding we find. If firstonly is not Qnon_ascii but not
- nil, then we should return the first ascii-only binding
- we find. */
- if (EQ (firstonly, Qnon_ascii))
- RETURN_UNGCPRO (sequence);
- else if (!NILP (firstonly) && ascii_sequence_p (sequence))
- RETURN_UNGCPRO (sequence);
-
- if (CONSP (remapped))
- {
- sequence = XCAR (remapped);
- remapped = XCDR (remapped);
- goto record_sequence;
- }
+ /* It is a true unshadowed match. Record it, unless it's already
+ been seen (as could happen when inheriting keymaps). */
+ if (NILP (Fmember (sequence, found)))
+ found = Fcons (sequence, found);
+
+ /* If firstonly is Qnon_ascii, then we can return the first
+ binding we find. If firstonly is not Qnon_ascii but not
+ nil, then we should return the first ascii-only binding
+ we find. */
+ if (EQ (firstonly, Qnon_ascii))
+ RETURN_UNGCPRO (sequence);
+ else if (!NILP (firstonly) && ascii_sequence_p (sequence))
+ RETURN_UNGCPRO (sequence);
+
+ if (CONSP (remapped))
+ {
+ sequence = XCAR (remapped);
+ remapped = XCDR (remapped);
+ goto record_sequence;
}
}
}
@@ -2841,7 +2850,7 @@ remapped command in the returned list. */)
else if (!NILP (keymap))
keymaps = Fcons (keymap, Fcons (current_global_map, Qnil));
else
- keymaps = Fcurrent_active_maps (Qnil);
+ keymaps = Fcurrent_active_maps (Qnil, Qnil);
/* Only use caching for the menubar (i.e. called with (def nil t nil).
We don't really need to check `keymap'. */
@@ -2907,53 +2916,19 @@ remapped command in the returned list. */)
return result;
}
-/* This is the function that Fwhere_is_internal calls using map_char_table.
- ARGS has the form
- (((DEFINITION . NOINDIRECT) . (KEYMAP . RESULT))
- .
- ((THIS . LAST) . (NOMENUS . LAST_IS_META)))
- Since map_char_table doesn't really use the return value from this function,
- we the result append to RESULT, the slot in ARGS.
-
- This function can GC because it calls where_is_internal_1 which can
- GC. */
-
-static void
-where_is_internal_2 (args, key, binding)
- Lisp_Object args, key, binding;
-{
- Lisp_Object definition, noindirect, this, last;
- Lisp_Object result, sequence;
- int nomenus, last_is_meta;
- struct gcpro gcpro1, gcpro2, gcpro3;
-
- GCPRO3 (args, key, binding);
- result = XCDR (XCAR (args));
- definition = XCAR (XCAR (XCAR (args)));
- noindirect = XCDR (XCAR (XCAR (args)));
- this = XCAR (XCAR (XCDR (args)));
- last = XCDR (XCAR (XCDR (args)));
- nomenus = XFASTINT (XCAR (XCDR (XCDR (args))));
- last_is_meta = XFASTINT (XCDR (XCDR (XCDR (args))));
-
- sequence = where_is_internal_1 (binding, key, definition, noindirect,
- this, last, nomenus, last_is_meta);
-
- if (!NILP (sequence))
- XSETCDR (XCAR (args), Fcons (sequence, result));
-
- UNGCPRO;
-}
-
-
/* This function can GC because get_keyelt can. */
-static Lisp_Object
-where_is_internal_1 (binding, key, definition, noindirect, this, last,
- nomenus, last_is_meta)
- Lisp_Object binding, key, definition, noindirect, this, last;
- int nomenus, last_is_meta;
+static void
+where_is_internal_1 (key, binding, args, data)
+ Lisp_Object key, binding, args;
+ void *data;
{
+ struct where_is_internal_data *d = data; /* Cast! */
+ Lisp_Object definition = d->definition;
+ Lisp_Object noindirect = d->noindirect;
+ Lisp_Object this = d->this;
+ Lisp_Object last = d->last;
+ int last_is_meta = d->last_is_meta;
Lisp_Object sequence;
/* Search through indirections unless that's not wanted. */
@@ -2967,7 +2942,7 @@ where_is_internal_1 (binding, key, definition, noindirect, this, last,
|| EQ (binding, definition)
|| (CONSP (definition) && !NILP (Fequal (binding, definition)))))
/* Doesn't match. */
- return Qnil;
+ return;
/* We have found a match. Construct the key sequence where we found it. */
if (INTEGERP (key) && last_is_meta)
@@ -2982,10 +2957,9 @@ where_is_internal_1 (binding, key, definition, noindirect, this, last,
{
Lisp_Object sequences = Fgethash (binding, where_is_cache, Qnil);
Fputhash (binding, Fcons (sequence, sequences), where_is_cache);
- return Qnil;
}
else
- return sequence;
+ d->sequences = Fcons (sequence, d->sequences);
}
/* describe-bindings - summarizing all the bindings in a set of keymaps. */
@@ -3020,11 +2994,11 @@ You type Translation\n\
outbuf = Fcurrent_buffer ();
/* Report on alternates for keys. */
- if (STRINGP (Vkeyboard_translate_table) && !NILP (prefix))
+ if (STRINGP (current_kboard->Vkeyboard_translate_table) && !NILP (prefix))
{
int c;
- const unsigned char *translate = SDATA (Vkeyboard_translate_table);
- int translate_len = SCHARS (Vkeyboard_translate_table);
+ const unsigned char *translate = SDATA (current_kboard->Vkeyboard_translate_table);
+ int translate_len = SCHARS (current_kboard->Vkeyboard_translate_table);
for (c = 0; c < translate_len; c++)
if (translate[c] != c)
@@ -3047,7 +3021,7 @@ You type Translation\n\
insert ("\n", 1);
/* Insert calls signal_after_change which may GC. */
- translate = SDATA (Vkeyboard_translate_table);
+ translate = SDATA (current_kboard->Vkeyboard_translate_table);
}
insert ("\n", 1);
@@ -3143,10 +3117,15 @@ You type Translation\n\
"\f\nGlobal Bindings", nomenu, 0, 1, 0);
/* Print the function-key-map translations under this prefix. */
- if (!NILP (Vfunction_key_map))
- describe_map_tree (Vfunction_key_map, 0, Qnil, prefix,
+ if (!NILP (current_kboard->Vlocal_function_key_map))
+ describe_map_tree (current_kboard->Vlocal_function_key_map, 0, Qnil, prefix,
"\f\nFunction key map translations", nomenu, 1, 0, 0);
+ /* Print the input-decode-map translations under this prefix. */
+ if (!NILP (current_kboard->Vinput_decode_map))
+ describe_map_tree (current_kboard->Vinput_decode_map, 0, Qnil, prefix,
+ "\f\nInput decoding map translations", nomenu, 1, 0, 0);
+
UNGCPRO;
return Qnil;
}
@@ -3200,11 +3179,11 @@ key binding\n\
Lisp_Object list;
/* Delete from MAPS each element that is for the menu bar. */
- for (list = maps; !NILP (list); list = XCDR (list))
+ for (list = maps; CONSP (list); list = XCDR (list))
{
Lisp_Object elt, prefix, tem;
- elt = Fcar (list);
+ elt = XCAR (list);
prefix = Fcar (elt);
if (XVECTOR (prefix)->size >= 1)
{
@@ -3231,11 +3210,11 @@ key binding\n\
something = 1;
}
- for (; !NILP (maps); maps = Fcdr (maps))
+ for (; CONSP (maps); maps = XCDR (maps))
{
register Lisp_Object elt, prefix, tail;
- elt = Fcar (maps);
+ elt = XCAR (maps);
prefix = Fcar (elt);
sub_shadows = Qnil;
@@ -4114,37 +4093,6 @@ the same way. The "active" keymaps in each alist are used before
`minor-mode-map-alist' and `minor-mode-overriding-map-alist'. */);
Vemulation_mode_map_alists = Qnil;
-
- DEFVAR_LISP ("function-key-map", &Vfunction_key_map,
- doc: /* Keymap that translates key sequences to key sequences during input.
-This is used mainly for mapping ASCII function key sequences into
-real Emacs function key events (symbols).
-
-The `read-key-sequence' function replaces any subsequence bound by
-`function-key-map' with its binding. More precisely, when the active
-keymaps have no binding for the current key sequence but
-`function-key-map' binds a suffix of the sequence to a vector or string,
-`read-key-sequence' replaces the matching suffix with its binding, and
-continues with the new sequence.
-
-If the binding is a function, it is called with one argument (the prompt)
-and its return value (a key sequence) is used.
-
-The events that come from bindings in `function-key-map' are not
-themselves looked up in `function-key-map'.
-
-For example, suppose `function-key-map' binds `ESC O P' to [f1].
-Typing `ESC O P' to `read-key-sequence' would return [f1]. Typing
-`C-x ESC O P' would return [?\\C-x f1]. If [f1] were a prefix
-key, typing `ESC O P x' would return [f1 x]. */);
- Vfunction_key_map = Fmake_sparse_keymap (Qnil);
-
- DEFVAR_LISP ("key-translation-map", &Vkey_translation_map,
- doc: /* Keymap of key translations that can override keymaps.
-This keymap works like `function-key-map', but comes after that,
-and its non-prefix bindings override ordinary bindings. */);
- Vkey_translation_map = Qnil;
-
staticpro (&Vmouse_events);
Vmouse_events = Fcons (intern ("menu-bar"),
Fcons (intern ("tool-bar"),
diff --git a/src/keymap.h b/src/keymap.h
index 8b921850765..3268967089a 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -34,10 +34,11 @@ EXFUN (Fkey_binding, 4);
EXFUN (Fkey_description, 2);
EXFUN (Fsingle_key_description, 2);
EXFUN (Fwhere_is_internal, 5);
-EXFUN (Fcurrent_active_maps, 1);
+EXFUN (Fcurrent_active_maps, 2);
extern Lisp_Object access_keymap P_ ((Lisp_Object, Lisp_Object, int, int, int));
extern Lisp_Object get_keyelt P_ ((Lisp_Object, int));
extern Lisp_Object get_keymap P_ ((Lisp_Object, int, int));
+EXFUN (Fset_keymap_parent, 2);
extern void describe_map_tree P_ ((Lisp_Object, int, Lisp_Object, Lisp_Object,
char *, int, int, int, int));
extern int current_minor_maps P_ ((Lisp_Object **, Lisp_Object **));
@@ -47,7 +48,7 @@ extern void syms_of_keymap P_ ((void));
extern void keys_of_keymap P_ ((void));
typedef void (*map_keymap_function_t)
- P_ ((Lisp_Object, Lisp_Object, Lisp_Object, void*));
+ P_ ((Lisp_Object key, Lisp_Object val, Lisp_Object args, void* data));
extern void map_keymap P_ ((Lisp_Object map, map_keymap_function_t fun, Lisp_Object largs, void* cargs, int autoload));
#endif
diff --git a/src/lisp.h b/src/lisp.h
index f65f46bab6d..aa160f44593 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -56,7 +56,7 @@ Boston, MA 02110-1301, USA. */
#ifdef GC_CHECK_CONS_LIST
#define CHECK_CONS_LIST() check_cons_list()
#else
-#define CHECK_CONS_LIST() 0
+#define CHECK_CONS_LIST() ((void)0)
#endif
/* These are default choices for the types to use. */
@@ -84,6 +84,20 @@ extern void die P_((const char *, const char *, int)) NO_RETURN;
#ifdef ENABLE_CHECKING
+/* The suppress_checking variable is initialized to 0 in alloc.c. Set
+ it to 1 using a debugger to temporarily disable aborting on
+ detected internal inconsistencies or error conditions.
+
+ Testing suppress_checking after the supplied condition ensures that
+ the side effects produced by CHECK will be consistent, independent
+ of whether ENABLE_CHECKING is defined, or whether the checks are
+ suppressed at run time.
+
+ In some cases, a good compiler may be able to optimize away the
+ CHECK macro altogether, e.g., if XSTRING (x) uses CHECK to test
+ STRINGP (x), but a particular use of XSTRING is invoked only after
+ testing that STRINGP (x) is true, making the test redundant. */
+
#define CHECK(check,msg) (((check) || suppress_checking \
? (void) 0 \
: die ((msg), __FILE__, __LINE__)), \
@@ -113,6 +127,57 @@ extern void die P_((const char *, const char *, int)) NO_RETURN;
#define eassert(cond) CHECK(cond,"assertion failed")
#endif
#endif /* ENABLE_CHECKING */
+
+/***** Select the tagging scheme. *****/
+/* There are basically two options that control the tagging scheme:
+ - NO_UNION_TYPE says that Lisp_Object should be an integer instead
+ of a union.
+ - USE_LSB_TAG means that we can assume the least 3 bits of pointers are
+ always 0, and we can thus use them to hold tag bits, without
+ restricting our addressing space.
+
+ If USE_LSB_TAG is not set, then we use the top 3 bits for tagging, thus
+ restricting our possible address range. Currently USE_LSB_TAG is not
+ allowed together with a union. This is not due to any fundamental
+ technical (or political ;-) problem: nobody wrote the code to do it yet.
+
+ USE_LSB_TAG not only requires the least 3 bits of pointers returned by
+ malloc to be 0 but also needs to be able to impose a mult-of-8 alignment
+ on the few static Lisp_Objects used: all the defsubr as well
+ as the two special buffers buffer_defaults and buffer_local_symbols. */
+
+/* First, try and define DECL_ALIGN(type,var) which declares a static
+ variable VAR of type TYPE with the added requirement that it be
+ TYPEBITS-aligned. */
+#ifndef NO_DECL_ALIGN
+# ifndef DECL_ALIGN
+/* What compiler directive should we use for non-gcc compilers? -stef */
+# if defined (__GNUC__)
+# define DECL_ALIGN(type, var) \
+ type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var
+# endif
+# endif
+#endif
+
+/* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */
+#if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined MAC_OSX
+/* We also need to be able to specify mult-of-8 alignment on static vars. */
+# if defined DECL_ALIGN
+/* We currently do not support USE_LSB_TAG with a union Lisp_Object. */
+# if defined NO_UNION_TYPE
+# define USE_LSB_TAG
+# endif
+# endif
+#endif
+
+/* If we cannot use 8-byte alignment, make DECL_ALIGN a no-op. */
+#ifndef DECL_ALIGN
+# ifdef USE_LSB_TAG
+# error "USE_LSB_TAG used without defining DECL_ALIGN"
+# endif
+# define DECL_ALIGN(type, var) type var
+#endif
+
/* Define the fundamental Lisp data structures. */
@@ -163,7 +228,6 @@ enum Lisp_Misc_Type
Lisp_Misc_Objfwd,
Lisp_Misc_Buffer_Objfwd,
Lisp_Misc_Buffer_Local_Value,
- Lisp_Misc_Some_Buffer_Local_Value,
Lisp_Misc_Overlay,
Lisp_Misc_Kboard_Objfwd,
Lisp_Misc_Save_Value,
@@ -194,7 +258,7 @@ union Lisp_Object
{
/* Used for comparing two Lisp_Objects;
also, positive integers can be accessed fast this way. */
- EMACS_INT i;
+ EMACS_UINT i;
struct
{
@@ -216,7 +280,7 @@ union Lisp_Object
{
/* Used for comparing two Lisp_Objects;
also, positive integers can be accessed fast this way. */
- EMACS_INT i;
+ EMACS_UINT i;
struct
{
@@ -247,34 +311,29 @@ LISP_MAKE_RVALUE (Lisp_Object o)
#define LISP_MAKE_RVALUE(o) (o)
#endif
-#endif /* NO_UNION_TYPE */
-
+#else /* NO_UNION_TYPE */
/* If union type is not wanted, define Lisp_Object as just a number. */
-#ifdef NO_UNION_TYPE
typedef EMACS_INT Lisp_Object;
#define LISP_MAKE_RVALUE(o) (0+(o))
#endif /* NO_UNION_TYPE */
-/* Two flags that are set during GC. On some machines, these flags
- are defined differently by the m- file. */
-
/* In the size word of a vector, this bit means the vector has been marked. */
-#ifndef ARRAY_MARK_FLAG
-#define ARRAY_MARK_FLAG ((EMACS_INT) ((EMACS_UINT) 1 << (VALBITS + GCTYPEBITS - 1)))
-#endif /* no ARRAY_MARK_FLAG */
+#define ARRAY_MARK_FLAG ((EMACS_UINT) 1 << (BITS_PER_EMACS_INT - 1))
/* In the size word of a struct Lisp_Vector, this bit means it's really
some other vector-like object. */
-#ifndef PSEUDOVECTOR_FLAG
-#define PSEUDOVECTOR_FLAG ((ARRAY_MARK_FLAG >> 1) & ~ARRAY_MARK_FLAG)
-#endif
+#define PSEUDOVECTOR_FLAG ((ARRAY_MARK_FLAG >> 1))
/* In a pseudovector, the size field actually contains a word with one
PSEUDOVECTOR_FLAG bit set, and exactly one of the following bits to
- indicate the actual type. */
+ indicate the actual type.
+ We use a bitset, even tho only one of the bits can be set at any
+ particular time just so as to be able to use micro-optimizations such as
+ testing membership of a particular subset of pseudovectors in Fequal.
+ It is not crucial, but there are plenty of bits here, so why not do it? */
enum pvec_type
{
PVEC_NORMAL_VECTOR = 0,
@@ -288,7 +347,9 @@ enum pvec_type
PVEC_BOOL_VECTOR = 0x10000,
PVEC_BUFFER = 0x20000,
PVEC_HASH_TABLE = 0x40000,
- PVEC_TYPE_MASK = 0x7fe00
+ PVEC_TERMINAL = 0x80000,
+ PVEC_OTHER = 0x100000,
+ PVEC_TYPE_MASK = 0x1ffe00
#if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to
GDB. It doesn't work on OS Alpha. Moved to a variable in
@@ -308,63 +369,15 @@ enum pvec_type
of bool vectors. This should not vary across implementations. */
#define BOOL_VECTOR_BITS_PER_CHAR 8
-/***** Select the tagging scheme. *****/
-/* There are basically two options that control the tagging scheme:
- - NO_UNION_TYPE says that Lisp_Object should be an integer instead
- of a union.
- - USE_LSB_TAG means that we can assume the least 3 bits of pointers are
- always 0, and we can thus use them to hold tag bits, without
- restricting our addressing space.
-
- If USE_LSB_TAG is not set, then we use the top 3 bits for tagging, thus
- restricting our possible address range. Currently USE_LSB_TAG is not
- allowed together with a union. This is not due to any fundamental
- technical (or political ;-) problem: nobody wrote the code to do it yet.
-
- USE_LSB_TAG not only requires the least 3 bits of pointers returned by
- malloc to be 0 but also needs to be able to impose a mult-of-8 alignment
- on the few static Lisp_Objects used: all the defsubr as well
- as the two special buffers buffer_defaults and buffer_local_symbols. */
-
-/* First, try and define DECL_ALIGN(type,var) which declares a static
- variable VAR of type TYPE with the added requirement that it be
- TYPEBITS-aligned. */
-#ifndef NO_DECL_ALIGN
-# ifndef DECL_ALIGN
-/* What compiler directive should we use for non-gcc compilers? -stef */
-# if defined (__GNUC__)
-# define DECL_ALIGN(type, var) \
- type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var
-# endif
-# endif
-#endif
-
-/* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */
-#if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined MAC_OSX
-/* We also need to be able to specify mult-of-8 alignment on static vars. */
-# if defined DECL_ALIGN
-/* We currently do not support USE_LSB_TAG with a union Lisp_Object. */
-# if defined NO_UNION_TYPE
-# define USE_LSB_TAG
-# endif
-# endif
-#endif
-
-/* If we cannot use 8-byte alignment, make DECL_ALIGN a no-op. */
-#ifndef DECL_ALIGN
-# ifdef USE_LSB_TAG
-# error "USE_LSB_TAG used without defining DECL_ALIGN"
-# endif
-# define DECL_ALIGN(type, var) type var
-#endif
-
-
/* These macros extract various sorts of values from a Lisp_Object.
For example, if tem is a Lisp_Object whose type is Lisp_Cons,
XCONS (tem) is the struct Lisp_Cons * pointing to the memory for that cons. */
#ifdef NO_UNION_TYPE
+/* Return a perfect hash of the Lisp_Object representation. */
+#define XHASH(a) (a)
+
#ifdef USE_LSB_TAG
#define TYPEMASK ((((EMACS_INT) 1) << GCTYPEBITS) - 1)
@@ -426,10 +439,10 @@ enum pvec_type
#endif /* not USE_LSB_TAG */
-#define EQ(x, y) ((x) == (y))
-
#else /* not NO_UNION_TYPE */
+#define XHASH(a) ((a).i)
+
#define XTYPE(a) ((enum Lisp_Type) (a).u.type)
/* For integers known to be positive, XFASTINT provides fast retrieval
@@ -458,10 +471,10 @@ enum pvec_type
extern Lisp_Object make_number P_ ((EMACS_INT));
#endif
-#define EQ(x, y) ((x).i == (y).i)
-
#endif /* NO_UNION_TYPE */
+#define EQ(x, y) (XHASH (x) == XHASH (y))
+
/* During garbage collection, XGCTYPE must be used for extracting types
so that the mark bit is ignored. XMARKBIT accesses the markbit.
Markbits are used only in particular slots of particular structure types.
@@ -523,25 +536,30 @@ extern size_t pure_size;
/* Misc types. */
#define XMISC(a) ((union Lisp_Misc *) XPNTR(a))
-#define XMISCTYPE(a) (XMARKER (a)->type)
-#define XMARKER(a) (&(XMISC(a)->u_marker))
-#define XINTFWD(a) (&(XMISC(a)->u_intfwd))
-#define XBOOLFWD(a) (&(XMISC(a)->u_boolfwd))
-#define XOBJFWD(a) (&(XMISC(a)->u_objfwd))
-#define XBUFFER_OBJFWD(a) (&(XMISC(a)->u_buffer_objfwd))
-#define XBUFFER_LOCAL_VALUE(a) (&(XMISC(a)->u_buffer_local_value))
-#define XOVERLAY(a) (&(XMISC(a)->u_overlay))
-#define XKBOARD_OBJFWD(a) (&(XMISC(a)->u_kboard_objfwd))
-#define XSAVE_VALUE(a) (&(XMISC(a)->u_save_value))
+#define XMISCANY(a) (eassert (MISCP (a)), &(XMISC(a)->u_any))
+#define XMISCTYPE(a) (XMISCANY (a)->type)
+#define XMARKER(a) (eassert (MARKERP (a)), &(XMISC(a)->u_marker))
+#define XINTFWD(a) (eassert (INTFWDP (a)), &(XMISC(a)->u_intfwd))
+#define XBOOLFWD(a) (eassert (BOOLFWDP (a)), &(XMISC(a)->u_boolfwd))
+#define XOBJFWD(a) (eassert (OBJFWDP (a)), &(XMISC(a)->u_objfwd))
+#define XOVERLAY(a) (eassert (OVERLAYP (a)), &(XMISC(a)->u_overlay))
+#define XSAVE_VALUE(a) (eassert (SAVE_VALUEP (a)), &(XMISC(a)->u_save_value))
+#define XBUFFER_OBJFWD(a) \
+ (eassert (BUFFER_OBJFWDP (a)), &(XMISC(a)->u_buffer_objfwd))
+#define XBUFFER_LOCAL_VALUE(a) \
+ (eassert (BUFFER_LOCAL_VALUEP (a)), &(XMISC(a)->u_buffer_local_value))
+#define XKBOARD_OBJFWD(a) \
+ (eassert (KBOARD_OBJFWDP (a)), &(XMISC(a)->u_kboard_objfwd))
/* Pseudovector types. */
#define XPROCESS(a) (eassert (GC_PROCESSP(a)),(struct Lisp_Process *) XPNTR(a))
#define XWINDOW(a) (eassert (GC_WINDOWP(a)),(struct window *) XPNTR(a))
+#define XTERMINAL(a) (eassert (GC_TERMINALP(a)),(struct terminal *) XPNTR(a))
#define XSUBR(a) (eassert (GC_SUBRP(a)),(struct Lisp_Subr *) XPNTR(a))
#define XBUFFER(a) (eassert (GC_BUFFERP(a)),(struct buffer *) XPNTR(a))
-#define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a))
-#define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a))
+#define XCHAR_TABLE(a) (eassert (GC_CHAR_TABLE_P (a)), (struct Lisp_Char_Table *) XPNTR(a))
+#define XBOOL_VECTOR(a) (eassert (GC_BOOL_VECTOR_P (a)), (struct Lisp_Bool_Vector *) XPNTR(a))
/* Construct a Lisp_Object from a value or address. */
@@ -559,12 +577,16 @@ extern size_t pure_size;
/* Pseudovector types. */
+#define XSETPVECTYPE(v,code) ((v)->size |= PSEUDOVECTOR_FLAG | (code))
#define XSETPSEUDOVECTOR(a, b, code) \
- (XSETVECTOR (a, b), XVECTOR (a)->size |= PSEUDOVECTOR_FLAG | (code))
+ (XSETVECTOR (a, b), \
+ eassert ((XVECTOR (a)->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK)) \
+ == (PSEUDOVECTOR_FLAG | (code))))
#define XSETWINDOW_CONFIGURATION(a, b) \
(XSETPSEUDOVECTOR (a, b, PVEC_WINDOW_CONFIGURATION))
#define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_PROCESS))
#define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW))
+#define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_TERMINAL))
#define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUBR))
#define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED))
#define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
@@ -579,9 +601,9 @@ extern size_t pure_size;
/* Convenience macros for dealing with Lisp strings. */
-#define SREF(string, index) (XSTRING (string)->data[index] + 0)
-#define SSET(string, index, new) (XSTRING (string)->data[index] = (new))
#define SDATA(string) (XSTRING (string)->data + 0)
+#define SREF(string, index) (SDATA (string)[index] + 0)
+#define SSET(string, index, new) (SDATA (string)[index] = (new))
#define SCHARS(string) (XSTRING (string)->size + 0)
#define SBYTES(string) (STRING_BYTES (XSTRING (string)) + 0)
@@ -589,7 +611,7 @@ extern size_t pure_size;
(XSTRING (string)->size = (newsize))
#define STRING_COPYIN(string, index, new, count) \
- bcopy (new, XSTRING (string)->data + index, count)
+ bcopy (new, SDATA (string) + index, count)
/* Type checking. */
@@ -701,7 +723,10 @@ extern int string_bytes P_ ((struct Lisp_String *));
#endif /* not GC_CHECK_STRING_BYTES */
/* Mark STR as a unibyte string. */
-#define STRING_SET_UNIBYTE(STR) (XSTRING (STR)->size_byte = -1)
+#define STRING_SET_UNIBYTE(STR) \
+ do { if (EQ (STR, empty_multibyte_string)) \
+ (STR) = empty_unibyte_string; \
+ else XSTRING (STR)->size_byte = -1; } while (0)
/* Get text properties. */
#define STRING_INTERVALS(STR) (XSTRING (STR)->intervals + 0)
@@ -728,16 +753,16 @@ struct Lisp_String
struct Lisp_Vector
{
- EMACS_INT size;
+ EMACS_UINT size;
struct Lisp_Vector *next;
Lisp_Object contents[1];
};
/* If a struct is made to look like a vector, this macro returns the length
of the shortest vector that would hold that struct. */
-#define VECSIZE(type) ((sizeof (type) - (sizeof (struct Lisp_Vector) \
- - sizeof (Lisp_Object)) \
- + sizeof(Lisp_Object) - 1) /* round up */ \
+#define VECSIZE(type) ((sizeof (type) \
+ - OFFSETOF (struct Lisp_Vector, contents[0]) \
+ + sizeof(Lisp_Object) - 1) /* round up */ \
/ sizeof (Lisp_Object))
/* Like VECSIZE, but used when the pseudo-vector has non-Lisp_Object fields
@@ -835,7 +860,7 @@ struct Lisp_Char_Table
pseudovector type information. It holds the size, too.
The size counts the top, defalt, purpose, and parent slots.
The last three are not counted if this is a sub char table. */
- EMACS_INT size;
+ EMACS_UINT size;
struct Lisp_Vector *next;
/* This holds a flag to tell if this is a top level char table (t)
or a sub char table (nil). */
@@ -866,10 +891,10 @@ struct Lisp_Bool_Vector
{
/* This is the vector's size field. It doesn't have the real size,
just the subtype information. */
- EMACS_INT vector_size;
+ EMACS_UINT vector_size;
struct Lisp_Vector *next;
/* This is the size in bits. */
- EMACS_INT size;
+ EMACS_UINT size;
/* This contains the actual bits, packed into bytes. */
unsigned char data[1];
};
@@ -884,11 +909,11 @@ struct Lisp_Bool_Vector
struct Lisp_Subr
{
- EMACS_INT size;
+ EMACS_UINT size;
Lisp_Object (*function) ();
short min_args, max_args;
char *symbol_name;
- char *prompt;
+ char *intspec;
char *doc;
};
@@ -995,7 +1020,7 @@ struct Lisp_Symbol
struct Lisp_Hash_Table
{
/* Vector fields. The hash table code doesn't refer to these. */
- EMACS_INT size;
+ EMACS_UINT size;
struct Lisp_Vector *vec_next;
/* Function used to compare keys. */
@@ -1014,13 +1039,6 @@ struct Lisp_Hash_Table
ratio, a float. */
Lisp_Object rehash_threshold;
- /* Number of key/value entries in the table. */
- Lisp_Object count;
-
- /* Vector of keys and values. The key of item I is found at index
- 2 * I, the value is found at index 2 * I + 1. */
- Lisp_Object key_and_value;
-
/* Vector of hash codes.. If hash[I] is nil, this means that that
entry I is unused. */
Lisp_Object hash;
@@ -1038,16 +1056,28 @@ struct Lisp_Hash_Table
hash table size to reduce collisions. */
Lisp_Object index;
- /* Next weak hash table if this is a weak hash table. The head
- of the list is in Vweak_hash_tables. */
- Lisp_Object next_weak;
-
/* User-supplied hash function, or nil. */
Lisp_Object user_hash_function;
/* User-supplied key comparison function, or nil. */
Lisp_Object user_cmp_function;
+ /* Only the fields above are traced normally by the GC. The ones below
+ `count'. are special and are either ignored by the GC or traced in
+ a special way (e.g. because of weakness). */
+
+ /* Number of key/value entries in the table. */
+ unsigned int count;
+
+ /* Vector of keys and values. The key of item I is found at index
+ 2 * I, the value is found at index 2 * I + 1.
+ This is gc_marked specially if the table is weak. */
+ Lisp_Object key_and_value;
+
+ /* Next weak hash table if this is a weak hash table. The head
+ of the list is in weak_hash_tables. */
+ struct Lisp_Hash_Table *next_weak;
+
/* C function to compare two keys. */
int (* cmpfn) P_ ((struct Lisp_Hash_Table *, Lisp_Object,
unsigned, Lisp_Object, unsigned));
@@ -1112,6 +1142,13 @@ struct Lisp_Hash_Table
/* These structures are used for various misc types. */
+struct Lisp_Misc_Any /* Supertype of all Misc types. */
+{
+ int type : 16; /* = Lisp_Misc_Marker */
+ unsigned gcmarkbit : 1;
+ int spacer : 15;
+};
+
struct Lisp_Marker
{
int type : 16; /* = Lisp_Misc_Marker */
@@ -1120,8 +1157,16 @@ struct Lisp_Marker
/* 1 means normal insertion at the marker's position
leaves the marker after the inserted text. */
unsigned int insertion_type : 1;
- /* This is the buffer that the marker points into,
- or 0 if it points nowhere. */
+ /* This is the buffer that the marker points into, or 0 if it points nowhere.
+ Note: a chain of markers can contain markers pointing into different
+ buffers (the chain is per buffer_text rather than per buffer, so it's
+ shared between indirect buffers). */
+ /* This is used for (other than NULL-checking):
+ - Fmarker_buffer
+ - Fset_marker: check eq(oldbuf, newbuf) to avoid unchain+rechain.
+ - unchain_marker: to find the list from which to unchain.
+ - Fkill_buffer: to unchain the markers of current indirect buffer.
+ */
struct buffer *buffer;
/* The remaining fields are meaningless in a marker that
@@ -1129,6 +1174,8 @@ struct Lisp_Marker
/* For markers that point somewhere,
this is used to chain of all the markers in a given buffer. */
+ /* We could remove it and use an array in buffer_text instead.
+ That would also allow to preserve it ordered. */
struct Lisp_Marker *next;
/* This is the char position where the marker points. */
EMACS_INT charpos;
@@ -1202,19 +1249,19 @@ struct Lisp_Buffer_Objfwd
binding into `realvalue' (or through it). Also update
LOADED-BINDING to point to the newly loaded binding.
- Lisp_Misc_Buffer_Local_Value and Lisp_Misc_Some_Buffer_Local_Value
- both use this kind of structure. With the former, merely setting
- the variable creates a local binding for the current buffer. With
- the latter, setting the variable does not do that; only
- make-local-variable does that. */
+ `local_if_set' indicates that merely setting the variable creates a local
+ binding for the current buffer. Otherwise the latter, setting the
+ variable does not do that; only make-local-variable does that. */
struct Lisp_Buffer_Local_Value
{
- int type : 16; /* = Lisp_Misc_Buffer_Local_Value
- or Lisp_Misc_Some_Buffer_Local_Value */
+ int type : 16; /* = Lisp_Misc_Buffer_Local_Value */
unsigned gcmarkbit : 1;
- int spacer : 12;
+ int spacer : 11;
+ /* 1 means that merely setting the variable creates a local
+ binding for the current buffer */
+ unsigned int local_if_set : 1;
/* 1 means this variable is allowed to have frame-local bindings,
so check for them when looking for the proper binding. */
unsigned int check_frame : 1;
@@ -1226,6 +1273,10 @@ struct Lisp_Buffer_Local_Value
unsigned int found_for_frame : 1;
Lisp_Object realvalue;
/* The buffer and frame for which the loaded binding was found. */
+ /* Having both is only needed if we want to allow variables that are
+ both buffer local and frame local (in which case, we currently give
+ precedence to the buffer-local binding). I don't think such
+ a combination is desirable. --Stef */
Lisp_Object buffer, frame;
/* A cons cell, (LOADED-BINDING . DEFAULT-VALUE).
@@ -1300,7 +1351,8 @@ struct Lisp_Free
union Lisp_Misc
{
- struct Lisp_Free u_free;
+ struct Lisp_Misc_Any u_any; /* Supertype of all Misc types. */
+ struct Lisp_Free u_free; /* Includes padding to force alignment. */
struct Lisp_Marker u_marker;
struct Lisp_Intfwd u_intfwd;
struct Lisp_Boolfwd u_boolfwd;
@@ -1377,34 +1429,6 @@ typedef unsigned char UCHAR;
We need one more byte for string terminator `\0'. */
#define KEY_DESCRIPTION_SIZE ((2 * 6) + 1 + (CHARACTERBITS / 3) + 1 + 1)
-#ifdef USE_X_TOOLKIT
-#ifdef NO_UNION_TYPE
-/* Use this for turning a (void *) into a Lisp_Object, as when the
- Lisp_Object is passed into a toolkit callback function. */
-#define VOID_TO_LISP(larg,varg) \
- do { ((larg) = ((Lisp_Object) (varg))); } while (0)
-#define CVOID_TO_LISP VOID_TO_LISP
-
-/* Use this for turning a Lisp_Object into a (void *), as when the
- Lisp_Object is passed into a toolkit callback function. */
-#define LISP_TO_VOID(larg) ((void *) (larg))
-#define LISP_TO_CVOID(varg) ((const void *) (larg))
-
-#else /* not NO_UNION_TYPE */
-/* Use this for turning a (void *) into a Lisp_Object, as when the
- Lisp_Object is passed into a toolkit callback function. */
-#define VOID_TO_LISP(larg,varg) \
- do { ((larg).v = (void *) (varg)); } while (0)
-#define CVOID_TO_LISP(larg,varg) \
- do { ((larg).cv = (const void *) (varg)); } while (0)
-
-/* Use this for turning a Lisp_Object into a (void *), as when the
- Lisp_Object is passed into a toolkit callback function. */
-#define LISP_TO_VOID(larg) ((larg).v)
-#define LISP_TO_CVOID(larg) ((larg).cv)
-#endif /* not NO_UNION_TYPE */
-#endif /* USE_X_TOOLKIT */
-
/* The glyph datatype, used to represent characters on the display. */
@@ -1488,10 +1512,9 @@ typedef unsigned char UCHAR;
#define GC_BUFFER_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd)
#define BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value)
#define GC_BUFFER_LOCAL_VALUEP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value)
-#define SOME_BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value)
-#define GC_SOME_BUFFER_LOCAL_VALUEP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value)
#define KBOARD_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd)
#define GC_KBOARD_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd)
+#define SAVE_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Save_Value)
/* True if object X is a pseudovector whose code is CODE. */
@@ -1514,6 +1537,8 @@ typedef unsigned char UCHAR;
#define GC_PROCESSP(x) GC_PSEUDOVECTORP (x, PVEC_PROCESS)
#define WINDOWP(x) PSEUDOVECTORP (x, PVEC_WINDOW)
#define GC_WINDOWP(x) GC_PSEUDOVECTORP (x, PVEC_WINDOW)
+#define TERMINALP(x) PSEUDOVECTORP (x, PVEC_TERMINAL)
+#define GC_TERMINALP(x) GC_PSEUDOVECTORP (x, PVEC_TERMINAL)
#define SUBRP(x) PSEUDOVECTORP (x, PVEC_SUBR)
#define GC_SUBRP(x) GC_PSEUDOVECTORP (x, PVEC_SUBR)
#define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED)
@@ -1666,30 +1691,33 @@ typedef unsigned char UCHAR;
followed by the address of a vector of Lisp_Objects
which contains the argument values.
UNEVALLED means pass the list of unevaluated arguments
- `prompt' says how to read arguments for an interactive call.
- See the doc string for `interactive'.
+ `intspec' says how interactive arguments are to be fetched.
+ If the string starts with a `(', `intspec' is evaluated and the resulting
+ list is the list of arguments.
+ If it's a string that doesn't start with `(', the value should follow
+ the one of the doc string for `interactive'.
A null string means call interactively with no arguments.
`doc' is documentation for the user. */
#if (!defined (__STDC__) && !defined (PROTOTYPES)) \
|| defined (USE_NONANSI_DEFUN)
-#define DEFUN(lname, fnname, sname, minargs, maxargs, prompt, doc) \
+#define DEFUN(lname, fnname, sname, minargs, maxargs, intspec, doc) \
Lisp_Object fnname (); \
DECL_ALIGN (struct Lisp_Subr, sname) = \
{ PVEC_SUBR | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)), \
- fnname, minargs, maxargs, lname, prompt, 0}; \
+ fnname, minargs, maxargs, lname, intspec, 0}; \
Lisp_Object fnname
#else
/* This version of DEFUN declares a function prototype with the right
arguments, so we can catch errors with maxargs at compile-time. */
-#define DEFUN(lname, fnname, sname, minargs, maxargs, prompt, doc) \
+#define DEFUN(lname, fnname, sname, minargs, maxargs, intspec, doc) \
Lisp_Object fnname DEFUN_ARGS_ ## maxargs ; \
DECL_ALIGN (struct Lisp_Subr, sname) = \
{ PVEC_SUBR | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)), \
- fnname, minargs, maxargs, lname, prompt, 0}; \
+ fnname, minargs, maxargs, lname, intspec, 0}; \
Lisp_Object fnname
/* Note that the weird token-substitution semantics of ANSI C makes
@@ -1730,7 +1758,6 @@ extern void defvar_lisp P_ ((char *, Lisp_Object *));
extern void defvar_lisp_nopro P_ ((char *, Lisp_Object *));
extern void defvar_bool P_ ((char *, int *));
extern void defvar_int P_ ((char *, EMACS_INT *));
-extern void defvar_per_buffer P_ ((char *, Lisp_Object *, Lisp_Object, char *));
extern void defvar_kboard P_ ((char *, int));
/* Macros we use to define forwarded Lisp variables.
@@ -1741,15 +1768,6 @@ extern void defvar_kboard P_ ((char *, int));
#define DEFVAR_BOOL(lname, vname, doc) defvar_bool (lname, vname)
#define DEFVAR_INT(lname, vname, doc) defvar_int (lname, vname)
-/* TYPE is nil for a general Lisp variable.
- An integer specifies a type; then only LIsp values
- with that type code are allowed (except that nil is allowed too).
- LNAME is the LIsp-level variable name.
- VNAME is the name of the buffer slot.
- DOC is a dummy where you write the doc string as a comment. */
-#define DEFVAR_PER_BUFFER(lname, vname, type, doc) \
- defvar_per_buffer (lname, vname, type, 0)
-
#define DEFVAR_KBOARD(lname, vname, doc) \
defvar_kboard (lname, \
(int)((char *)(&current_kboard->vname) \
@@ -2425,7 +2443,7 @@ EXFUN (Fstring_lessp, 2);
extern int char_table_translate P_ ((Lisp_Object, int));
extern void map_char_table P_ ((void (*) (Lisp_Object, Lisp_Object, Lisp_Object),
Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, int,
- Lisp_Object *));
+ int *));
extern Lisp_Object char_table_ref_and_index P_ ((Lisp_Object, int, int *));
extern void syms_of_fns P_ ((void));
@@ -2589,11 +2607,16 @@ EXFUN (Fmake_char_table, 2);
extern Lisp_Object make_sub_char_table P_ ((Lisp_Object));
extern Lisp_Object Qchar_table_extra_slots;
extern struct Lisp_Vector *allocate_vector P_ ((EMACS_INT));
-extern struct Lisp_Vector *allocate_other_vector P_ ((EMACS_INT));
+extern struct Lisp_Vector *allocate_pseudovector P_ ((int memlen, int lisplen, EMACS_INT tag));
+#define ALLOCATE_PSEUDOVECTOR(typ,field,tag) \
+ ((typ*) \
+ allocate_pseudovector \
+ (VECSIZE (typ), PSEUDOVECSIZE (typ, field), tag))
extern struct Lisp_Hash_Table *allocate_hash_table P_ ((void));
extern struct window *allocate_window P_ ((void));
extern struct frame *allocate_frame P_ ((void));
extern struct Lisp_Process *allocate_process P_ ((void));
+extern struct terminal *allocate_terminal P_ ((void));
extern int gc_in_progress;
extern int abort_on_gc;
extern Lisp_Object make_float P_ ((double));
@@ -2989,6 +3012,10 @@ extern Lisp_Object Qvertical_scroll_bar;
extern void discard_mouse_events P_ ((void));
EXFUN (Fevent_convert_list, 1);
EXFUN (Fread_key_sequence, 5);
+EXFUN (Fset_input_interrupt_mode, 1);
+EXFUN (Fset_output_flow_control, 2);
+EXFUN (Fset_input_meta_mode, 2);
+EXFUN (Fset_quit_char, 1);
EXFUN (Fset_input_mode, 4);
extern int detect_input_pending P_ ((void));
extern int detect_input_pending_ignore_squeezables P_ ((void));
@@ -3002,6 +3029,7 @@ extern void init_keyboard P_ ((void));
extern void syms_of_keyboard P_ ((void));
extern void keys_of_keyboard P_ ((void));
extern char *push_key_description P_ ((unsigned int, char *, int));
+extern void add_user_signal P_ ((int sig, const char *name));
/* defined in indent.c */
@@ -3060,7 +3088,8 @@ extern void syms_of_frame P_ ((void));
/* defined in emacs.c */
extern Lisp_Object decode_env_path P_ ((char *, char *));
extern Lisp_Object Vinvocation_name, Vinvocation_directory;
-extern Lisp_Object Vinstallation_directory, empty_string;
+extern Lisp_Object Vinstallation_directory;
+extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
EXFUN (Fkill_emacs, 1);
#if HAVE_SETLOCALE
void fixup_locale P_ ((void));
@@ -3096,6 +3125,8 @@ extern int wait_reading_process_output P_ ((int, int, int, int,
int));
extern void add_keyboard_wait_descriptor P_ ((int));
extern void delete_keyboard_wait_descriptor P_ ((int));
+extern void add_gpm_wait_descriptor P_ ((int));
+extern void delete_gpm_wait_descriptor P_ ((int));
extern void close_process_descs P_ ((void));
extern void init_process P_ ((void));
extern void syms_of_process P_ ((void));
@@ -3109,7 +3140,7 @@ EXFUN (Fcall_process, MANY);
extern int child_setup P_ ((int, int, int, char **, int, Lisp_Object));
extern void init_callproc_1 P_ ((void));
extern void init_callproc P_ ((void));
-extern void set_process_environment P_ ((void));
+extern void set_initial_environment P_ ((void));
extern void syms_of_callproc P_ ((void));
/* defined in doc.c */
@@ -3158,6 +3189,7 @@ EXFUN (Fnext_single_property_change, 4);
EXFUN (Fnext_single_char_property_change, 4);
EXFUN (Fprevious_single_property_change, 4);
EXFUN (Fput_text_property, 5);
+EXFUN (Fget_text_property, 3);
EXFUN (Fprevious_char_property_change, 2);
EXFUN (Fnext_char_property_change, 2);
extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object));
@@ -3171,28 +3203,31 @@ EXFUN (Fx_popup_menu, 2);
EXFUN (Fx_popup_dialog, 3);
extern void syms_of_xmenu P_ ((void));
+/* defined in termchar.h */
+struct tty_display_info;
+
+/* defined in termhooks.h */
+struct terminal;
+
/* defined in sysdep.c */
#ifndef HAVE_GET_CURRENT_DIR_NAME
extern char *get_current_dir_name P_ ((void));
#endif
extern void stuff_char P_ ((char c));
extern void init_sigio P_ ((int));
-extern void request_sigio P_ ((void));
-extern void unrequest_sigio P_ ((void));
-extern void reset_sys_modes P_ ((void));
extern void sys_subshell P_ ((void));
extern void sys_suspend P_ ((void));
extern void discard_tty_input P_ ((void));
-extern void init_sys_modes P_ ((void));
-extern void get_frame_size P_ ((int *, int *));
+extern void init_sys_modes P_ ((struct tty_display_info *));
+extern void reset_sys_modes P_ ((struct tty_display_info *));
+extern void init_all_sys_modes P_ ((void));
+extern void reset_all_sys_modes P_ ((void));
extern void wait_for_termination P_ ((int));
extern void flush_pending_output P_ ((int));
extern void child_setup_tty P_ ((int));
extern void setup_pty P_ ((int));
extern int set_window_size P_ ((int, int, int));
extern void create_process P_ ((Lisp_Object, char **, Lisp_Object));
-extern int tabs_safe_p P_ ((void));
-extern void init_baud_rate P_ ((void));
extern int emacs_open P_ ((const char *, int, int));
extern int emacs_close P_ ((int));
extern int emacs_read P_ ((int, char *, unsigned int));
@@ -3227,6 +3262,9 @@ extern void syms_of_dired P_ ((void));
extern void syms_of_term P_ ((void));
extern void fatal () NO_RETURN;
+/* Defined in terminal.c */
+extern void syms_of_terminal P_ ((void));
+
#ifdef HAVE_WINDOW_SYSTEM
/* Defined in fontset.c */
extern void syms_of_fontset P_ ((void));
@@ -3285,6 +3323,11 @@ extern void syms_of_mac P_ ((void));
extern void init_mac_osx_environment P_ ((void));
#endif /* MAC_OSX */
#endif /* MAC_OS */
+
+#ifdef HAVE_MENUS
+/* Defined in (x|mac|w32)fns.c... */
+extern int have_menus_p P_ ((void));
+#endif
/* Nonzero means Emacs has already been initialized.
Used during startup to detect startup of dumped Emacs. */
@@ -3371,6 +3414,13 @@ extern Lisp_Object Vdirectory_sep_char;
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
+/* We used to use `abs', but that clashes with system headers on some
+ platforms, and using a name reserved by Standard C is a bad idea
+ anyway. */
+#if !defined(eabs)
+#define eabs(x) ((x) < 0 ? -(x) : (x))
+#endif
+
/* Return a fixnum or float, depending on whether VAL fits in a Lisp
fixnum. */
diff --git a/src/lread.c b/src/lread.c
index 49c22f45de1..ee020fd43d3 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -27,6 +27,7 @@ Boston, MA 02110-1301, USA. */
#include <sys/stat.h>
#include <sys/file.h>
#include <errno.h>
+#include <setjmp.h>
#include "lisp.h"
#include "intervals.h"
#include "buffer.h"
@@ -34,6 +35,7 @@ Boston, MA 02110-1301, USA. */
#include <epaths.h>
#include "commands.h"
#include "keyboard.h"
+#include "frame.h"
#include "termhooks.h"
#include "coding.h"
#include "blockinput.h"
@@ -447,8 +449,6 @@ static void substitute_in_interval P_ ((INTERVAL, Lisp_Object));
/* Get a character from the tty. */
-extern Lisp_Object read_char ();
-
/* Read input events until we get one that's acceptable for our purposes.
If NO_SWITCH_FRAME is non-zero, switch-frame events are stashed
@@ -500,10 +500,12 @@ read_filtered_event (no_switch_frame, ascii_required, error_nonascii,
EMACS_ADD_TIME (end_time, end_time, wait_time);
}
- /* Read until we get an acceptable event. */
+/* Read until we get an acceptable event. */
retry:
- val = read_char (0, 0, 0, (input_method ? Qnil : Qt), 0,
- NUMBERP (seconds) ? &end_time : NULL);
+ do
+ val = read_char (0, 0, 0, (input_method ? Qnil : Qt), 0,
+ NUMBERP (seconds) ? &end_time : NULL);
+ while (INTEGERP (val) && XINT (val) == -2); /* wrong_kboard_jmpbuf */
if (BUFFERP (val))
goto retry;
@@ -706,7 +708,7 @@ load_warn_old_style_backquotes (file)
if (!NILP (Vold_style_backquotes))
{
Lisp_Object args[2];
- args[0] = build_string ("!! File %s uses old-style backquotes !!");
+ args[0] = build_string ("Loading `%s': old-style backquotes detected!");
args[1] = file;
Fmessage (2, args);
}
@@ -1098,7 +1100,7 @@ close_load_descs ()
{
#ifndef WINDOWSNT
Lisp_Object tail;
- for (tail = load_descriptor_list; !NILP (tail); tail = XCDR (tail))
+ for (tail = load_descriptor_list; CONSP (tail); tail = XCDR (tail))
emacs_close (XFASTINT (XCAR (tail)));
#endif
}
@@ -1217,7 +1219,7 @@ openp (path, str, suffixes, storeptr, predicate)
fn = (char *) alloca (fn_size = 100 + want_size);
/* Loop over suffixes. */
- for (tail = NILP (suffixes) ? Fcons (build_string (""), Qnil) : suffixes;
+ for (tail = NILP (suffixes) ? Fcons (empty_unibyte_string, Qnil) : suffixes;
CONSP (tail); tail = XCDR (tail))
{
int lsuffix = SBYTES (XCAR (tail));
@@ -1517,7 +1519,8 @@ readevalloop (readcharfun, stream, sourcename, evalfun,
}
/* Ignore whitespace here, so we can detect eof. */
- if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r')
+ if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r'
+ || c == 0x8a0) /* NBSP */
goto read_next;
if (!NILP (Vpurify_flag) && c == '(')
@@ -1910,7 +1913,7 @@ read_escape (readcharfun, stringp, byterep)
case 's':
c = READCHAR;
- if (c != '-')
+ if (stringp || c != '-')
{
UNREAD (c);
return ' ';
@@ -2204,7 +2207,7 @@ read1 (readcharfun, pch, first_in_list)
if (XVECTOR (tmp)->size < CHAR_TABLE_STANDARD_SLOTS
|| XVECTOR (tmp)->size > CHAR_TABLE_STANDARD_SLOTS + 10)
error ("Invalid size char-table");
- XSETCHAR_TABLE (tmp, XCHAR_TABLE (tmp));
+ XSETPVECTYPE (XVECTOR (tmp), PVEC_CHAR_TABLE);
XCHAR_TABLE (tmp)->top = Qt;
return tmp;
}
@@ -2217,7 +2220,7 @@ read1 (readcharfun, pch, first_in_list)
tmp = read_vector (readcharfun, 0);
if (XVECTOR (tmp)->size != SUB_CHAR_TABLE_STANDARD_SLOTS)
error ("Invalid size char-table");
- XSETCHAR_TABLE (tmp, XCHAR_TABLE (tmp));
+ XSETPVECTYPE (XVECTOR (tmp), PVEC_CHAR_TABLE);
XCHAR_TABLE (tmp)->top = Qnil;
return tmp;
}
@@ -2716,6 +2719,8 @@ read1 (readcharfun, pch, first_in_list)
default:
default_label:
if (c <= 040) goto retry;
+ if (c == 0x8a0) /* NBSP */
+ goto retry;
{
char *p = read_buffer;
int quoted = 0;
@@ -2724,6 +2729,7 @@ read1 (readcharfun, pch, first_in_list)
char *end = read_buffer + read_buffer_size;
while (c > 040
+ && c != 0x8a0 /* NBSP */
&& (c >= 0200
|| (!index ("\"';()[]#", c)
&& !(!first_in_list && c == '`')
@@ -3666,6 +3672,7 @@ defsubr (sname)
{
Lisp_Object sym;
sym = intern (sname->symbol_name);
+ XSETPVECTYPE (sname, PVEC_SUBR);
XSETSUBR (XSYMBOL (sym)->function, sname);
}
@@ -3682,8 +3689,8 @@ defalias (sname, string)
#endif /* NOTDEF */
/* Define an "integer variable"; a symbol whose value is forwarded
- to a C variable of type int. Sample call: */
- /* DEFVAR_INT ("indent-tabs-mode", &indent_tabs_mode, "Documentation"); */
+ to a C variable of type int. Sample call:
+ DEFVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */
void
defvar_int (namestring, address)
char *namestring;
@@ -3698,7 +3705,7 @@ defvar_int (namestring, address)
}
/* Similar but define a variable whose value is t if address contains 1,
- nil if address contains 0 */
+ nil if address contains 0. */
void
defvar_bool (namestring, address)
char *namestring;
@@ -3740,37 +3747,6 @@ defvar_lisp (namestring, address)
staticpro (address);
}
-/* Similar but define a variable whose value is the Lisp Object stored in
- the current buffer. address is the address of the slot in the buffer
- that is current now. */
-
-void
-defvar_per_buffer (namestring, address, type, doc)
- char *namestring;
- Lisp_Object *address;
- Lisp_Object type;
- char *doc;
-{
- Lisp_Object sym, val;
- int offset;
-
- sym = intern (namestring);
- val = allocate_misc ();
- offset = (char *)address - (char *)current_buffer;
-
- XMISCTYPE (val) = Lisp_Misc_Buffer_Objfwd;
- XBUFFER_OBJFWD (val)->offset = offset;
- SET_SYMBOL_VALUE (sym, val);
- PER_BUFFER_SYMBOL (offset) = sym;
- PER_BUFFER_TYPE (offset) = type;
-
- if (PER_BUFFER_IDX (offset) == 0)
- /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
- slot of buffer_local_flags */
- abort ();
-}
-
-
/* Similar but define a variable whose value is the Lisp Object stored
at a particular offset in the current kboard object. */
@@ -4092,8 +4068,7 @@ and, if so, which suffixes they should try to append to the file name
in order to do so. However, if you want to customize which suffixes
the loading functions recognize as compression suffixes, you should
customize `jka-compr-load-suffixes' rather than the present variable. */);
- /* We don't use empty_string because it's not initialized yet. */
- Vload_file_rep_suffixes = Fcons (build_string (""), Qnil);
+ Vload_file_rep_suffixes = Fcons (empty_unibyte_string, Qnil);
DEFVAR_BOOL ("load-in-progress", &load_in_progress,
doc: /* Non-nil if inside of `load'. */);
diff --git a/src/m/alpha.h b/src/m/alpha.h
index 53fc1780df8..5e46a05ab68 100644
--- a/src/m/alpha.h
+++ b/src/m/alpha.h
@@ -99,10 +99,6 @@ NOTE-END
# endif
#endif
-#if defined(__OpenBSD__)
-#define ORDINARY_LINK
-#endif
-
#ifdef __ELF__
#undef UNEXEC
#define UNEXEC unexelf.o
diff --git a/src/m/amdx86-64.h b/src/m/amdx86-64.h
index 681be8b0647..1f759cc9ec6 100644
--- a/src/m/amdx86-64.h
+++ b/src/m/amdx86-64.h
@@ -18,6 +18,14 @@ 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. */
+#ifdef i386
+/* Although we're running on an amd64 kernel, we're actually compiling for
+ the x86 architecture. The user should probably have provided an
+ explicit --build to `configure', but if everything else than the kernel
+ is running in i386 mode, then the bug is really ours: we should have
+ guessed better. */
+#include "m/intel386.h"
+#else
/* The following line tells the configuration script what sort of
operating system this machine is likely to run.
@@ -156,6 +164,7 @@ Boston, MA 02110-1301, USA. */
#endif
#endif /* __FreeBSD__ */
+#endif /* !i386 */
/* arch-tag: 8a5e001d-e12e-4692-a3a6-0b15ba271c6e
(do not change this comment) */
diff --git a/src/m/ibmps2-aix.h b/src/m/ibmps2-aix.h
index 8c975b81bb9..045bcf2c294 100644
--- a/src/m/ibmps2-aix.h
+++ b/src/m/ibmps2-aix.h
@@ -213,7 +213,6 @@ so disable it for them. */
#undef NOMULTIPLEJOBS
#undef BROKEN_TIOCGETC
#undef BROKEN_TIOCGWINSZ
-#undef LIBX10_SYSTEM
#undef LIBX11_SYSTEM
#undef LIB_X11_LIB
#endif
diff --git a/src/m/ibms390x.h b/src/m/ibms390x.h
index 64ede365d0c..0dafe59000b 100644
--- a/src/m/ibms390x.h
+++ b/src/m/ibms390x.h
@@ -22,7 +22,7 @@ Boston, MA 02110-1301, USA. */
into ibms390.h. */
-/* The following line tells the configuration script what sort of
+/* The following line tells the configuration script what sort of
operating system this machine is likely to run.
USUAL-OPSYS="<name of system .h file here, without the s- or .h>"
@@ -97,14 +97,10 @@ NOTE-END */
#define VIRT_ADDR_VARIES
-/* Define C_ALLOCA if this machine does not support a true alloca
- and the one written in C should be used instead.
- Define HAVE_ALLOCA to say that the system provides a properly
- working alloca function and it should be used.
- Define neither one if an assembler-language alloca
- in the file alloca.s should be used. */
+/* Define HAVE_ALLOCA to say that the system provides a properly
+ working alloca function and it should be used. Undefine it if an
+ assembler-language alloca in the file alloca.s should be used. */
-#undef C_ALLOCA
#define HAVE_ALLOCA
/* Define NO_REMAP if memory segmentation makes it not work well
@@ -144,11 +140,6 @@ NOTE-END */
#define VALBITS 60
-/* This definition of MARKBIT is necessary because of the comparison of
- ARRAY_MARK_FLAG and MARKBIT in an #if in lisp.h, which cpp doesn't like. */
-
-#define MARKBIT 0x8000000000000000L
-
#define LINKER $(CC) -nostdlib
/* Define XINT and XUINT so that they can take arguments of type int */
diff --git a/src/m/is386.h b/src/m/is386.h
index 02fe12d93e5..5041db9a6c8 100644
--- a/src/m/is386.h
+++ b/src/m/is386.h
@@ -21,7 +21,6 @@ Intel 386 (-machine=intel386 or -machine=is386.h)
It may also be correct for Microport systems.
NOTE-END */
-#define LIBX10_MACHINE -lnsl_s
#define LIBX11_MACHINE -lnsl_s
#define LIBS_DEBUG -lg
diff --git a/src/m/sh3el.h b/src/m/sh3el.h
index eefcccea6de..77f6dc12c23 100644
--- a/src/m/sh3el.h
+++ b/src/m/sh3el.h
@@ -19,7 +19,7 @@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-/* The following line tells the configuration script what sort of
+/* The following line tells the configuration script what sort of
operating system this machine is likely to run.
USUAL-OPSYS="<name of system .h file here, without the s- or .h>" */
@@ -79,14 +79,11 @@ Boston, MA 02111-1307, USA. */
#define VIRT_ADDR_VARIES
-/* Define C_ALLOCA if this machine does not support a true alloca
- and the one written in C should be used instead.
- Define HAVE_ALLOCA to say that the system provides a properly
+/* Define HAVE_ALLOCA to say that the system provides a properly
working alloca function and it should be used.
- Define neither one if an assembler-language alloca
+ Undefine it if an assembler-language alloca
in the file alloca.s should be used. */
-/* #define C_ALLOCA */
#define HAVE_ALLOCA
/* Define NO_REMAP if memory segmentation makes it not work well
diff --git a/src/m/sparc.h b/src/m/sparc.h
index 8df81ee91aa..bf122d857cc 100644
--- a/src/m/sparc.h
+++ b/src/m/sparc.h
@@ -64,18 +64,6 @@ NOTE-END */
#define SEGMENT_MASK (SEGSIZ - 1)
-/* Arrange to link with sun windows, if requested. */
-/* For details on emacstool and sunfns, see etc/SUN-SUPPORT */
-/* These programs require Sun UNIX 4.2 Release 3.2 or greater */
-
-#ifdef HAVE_SUN_WINDOWS
-#define OTHER_FILES ${etcdir}emacstool
-#define LIBS_MACHINE -lsuntool -lsunwindow -lpixrect
-#define OBJECTS_MACHINE sunfns.o
-#define SYMS_MACHINE syms_of_sunfns ()
-#define PURESIZE 130000
-#endif
-
#if !defined (__NetBSD__) && !defined (__linux__) && !defined (__OpenBSD__)
/* This really belongs in s/sun.h. */
diff --git a/src/m/sun2.h b/src/m/sun2.h
index e764ded3ce7..a872bf6f3bb 100644
--- a/src/m/sun2.h
+++ b/src/m/sun2.h
@@ -85,17 +85,5 @@ NOTE-END */
#define SEGMENT_MASK (SEGSIZ - 1)
-/* Arrange to link with sun windows, if requested. */
-/* For details on emacstool and sunfns, see etc/SUN-SUPPORT */
-/* These programs require Sun UNIX 4.2 Release 3.2 or greater */
-
-#ifdef HAVE_SUN_WINDOWS
-#define OTHER_FILES ${libsrc}emacstool
-#define LIBS_MACHINE -lsuntool -lsunwindow -lpixrect
-#define OBJECTS_MACHINE sunfns.o
-#define SYMS_MACHINE syms_of_sunfns ()
-#define PURESIZE 132000
-#endif
-
/* arch-tag: 543c3570-74ca-4099-aa47-db7c7b691c8e
(do not change this comment) */
diff --git a/src/m/sun386.h b/src/m/sun386.h
index a3eedbe755e..ed98960c809 100644
--- a/src/m/sun386.h
+++ b/src/m/sun386.h
@@ -56,18 +56,6 @@ NOTE-END */
#define LIBS_TERMCAP -ltermcap
-/* Arrange to link with sun windows, if requested. */
-/* For details on emacstool and sunfns, see etc/SUN-SUPPORT */
-/* These programs require Sun UNIX 4.2 Release 3.2 or greater */
-
-#ifdef HAVE_SUN_WINDOWS
-#define OTHER_FILES ${etcdir}emacstool
-#define LIBS_MACHINE -lsuntool -lsunwindow -lpixrect
-#define OBJECTS_MACHINE sunfns.o
-#define SYMS_MACHINE syms_of_sunfns ()
-#define PURESIZE 132000
-#endif
-
/* Roadrunner uses 'COFF' format */
#define COFF
diff --git a/src/m/windowsnt.h b/src/m/windowsnt.h
deleted file mode 100644
index ddad551c772..00000000000
--- a/src/m/windowsnt.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Machine description file for Windows NT.
-
- Copyright (C) 1993, 1994, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
-
-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 3, 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. */
-
-/* The following line tells the configuration script what sort of
- operating system this machine is likely to run.
- USUAL-OPSYS="<name of system .h file here, without the s- or .h>" */
-
-/* Define BIG_ENDIAN if lowest-numbered byte in a word
- is the most significant byte. */
-
-/* #define BIG_ENDIAN */
-
-/* Define NO_ARG_ARRAY if you cannot take the address of the first of a
- * group of arguments and treat it as an array of the arguments. */
-
-#define NO_ARG_ARRAY
-
-/* Define WORD_MACHINE if addresses and such have
- * to be corrected before they can be used as byte counts. */
-
-#define WORD_MACHINE
-
-/* Now define a symbol for the cpu type, if your compiler
- does not define it automatically:
- Ones defined so far include vax, m68000, ns16000, pyramid,
- orion, tahoe, APOLLO and many others */
-
-/* Use type int rather than a union, to represent Lisp_Object */
-/* This is desirable for most machines. */
-
-#define NO_UNION_TYPE
-
-/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend
- the 24-bit bit field into an int. In other words, if bit fields
- are always unsigned.
-
- If you use NO_UNION_TYPE, this flag does not matter. */
-
-#define EXPLICIT_SIGN_EXTEND
-
-/* Data type of load average, as read out of kmem. */
-
-#define LOAD_AVE_TYPE long
-
-/* Convert that into an integer that is 100 for a load average of 1.0 */
-
-#define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE)
-
-/* Define CANNOT_DUMP on machines where unexec does not work.
- Then the function dump-emacs will not be defined
- and temacs will do (load "loadup") automatically unless told otherwise. */
-
-/*
-#define CANNOT_DUMP 1
-#define CANNOT_UNEXEC 1
- */
-
-/* Start and end of text and data. */
-#define DATA_END get_data_end ()
-#define DATA_START get_data_start ()
-
-/* Define VIRT_ADDR_VARIES if the virtual addresses of
- pure and impure space as loaded can vary, and even their
- relative order cannot be relied on.
-
- Otherwise Emacs assumes that text space precedes data space,
- numerically. */
-
-/* Text does precede data space, but this is never a safe assumption. */
-#define VIRT_ADDR_VARIES
-
-/* For alloca. */
-#include <malloc.h>
-
-/* Define NO_REMAP if memory segmentation makes it not work well
- to change the boundary between the text section and data section
- when Emacs is dumped. If you define this, the preloaded Lisp
- code will not be sharable; but that's better than failing completely. */
-
-/* #define NO_REMAP */
-
-/* Some really obscure 4.2-based systems (like Sequent DYNIX)
- * do not support asynchronous I/O (using SIGIO) on sockets,
- * even though it works fine on tty's. If you have one of
- * these systems, define the following, and then use it in
- * config.h (or elsewhere) to decide when (not) to use SIGIO.
- *
- * You'd think this would go in an operating-system description file,
- * but since it only occurs on some, but not all, BSD systems, the
- * reasonable place to select for it is in the machine description
- * file.
- */
-
-/* #define NO_SOCK_SIGIO */
-
-/* After adding support for a new system, modify the large case
- statement in the `configure' script to recognize reasonable
- configuration names, and add a description of the system to
- `etc/MACHINES'.
-
- If you've just fixed a problem in an existing configuration file,
- you should also check `etc/MACHINES' to make sure its descriptions
- of known problems in that configuration should be updated. */
-
-/* arch-tag: ed6dc0c1-5c01-49df-befd-c25dfadfb8cf
- (do not change this comment) */
diff --git a/src/mac.c b/src/mac.c
index a641b07dc08..75a606b60b3 100644
--- a/src/mac.c
+++ b/src/mac.c
@@ -79,6 +79,7 @@ static ComponentInstance as_scripting_component;
/* The single script context used for all script executions. */
static OSAID as_script_context;
+#ifndef MAC_OS_X
#if TARGET_API_MAC_CARBON
static int wakeup_from_rne_enabled_p = 0;
#define ENABLE_WAKEUP_FROM_RNE (wakeup_from_rne_enabled_p = 1)
@@ -87,6 +88,7 @@ static int wakeup_from_rne_enabled_p = 0;
#define ENABLE_WAKEUP_FROM_RNE 0
#define DISABLE_WAKEUP_FROM_RNE 0
#endif
+#endif
#ifndef MAC_OSX
static OSErr posix_pathname_to_fsspec P_ ((const char *, FSSpec *));
@@ -1127,18 +1129,15 @@ Lisp_Object
cfdate_to_lisp (date)
CFDateRef date;
{
- static const CFGregorianDate epoch_gdate = {1970, 1, 1, 0, 0, 0.0};
- static CFAbsoluteTime epoch = 0.0, sec;
- int high, low;
-
- if (epoch == 0.0)
- epoch = CFGregorianDateGetAbsoluteTime (epoch_gdate, NULL);
+ CFTimeInterval sec;
+ int high, low, microsec;
- sec = CFDateGetAbsoluteTime (date) - epoch;
+ sec = CFDateGetAbsoluteTime (date) + kCFAbsoluteTimeIntervalSince1970;
high = sec / 65536.0;
low = sec - high * 65536.0;
+ microsec = (sec - floor (sec)) * 1000000.0;
- return list3 (make_number (high), make_number (low), make_number (0));
+ return list3 (make_number (high), make_number (low), make_number (microsec));
}
@@ -1826,8 +1825,6 @@ xrm_get_preference_database (application)
GCPRO3 (database, quarks, value);
- BLOCK_INPUT;
-
app_id = kCFPreferencesCurrentApplication;
if (application)
{
@@ -1879,8 +1876,6 @@ xrm_get_preference_database (application)
CFRelease (key_set);
CFRelease (app_id);
- UNBLOCK_INPUT;
-
UNGCPRO;
return database;
@@ -4994,8 +4989,8 @@ extern int noninteractive;
SELECT_TIMEOUT_THRESHOLD_RUNLOOP seconds).
-> Create CFSocket for each socket and add it into the current
event RunLoop so that the current event loop gets quit when
- the socket becomes ready. Then ReceiveNextEvent can wait for
- both kinds of inputs.
+ the socket becomes ready. Then CFRunLoopRunInMode can wait
+ for both kinds of inputs.
4. Otherwise.
-> Periodically poll the window input channel while repeatedly
executing `select' with a short timeout
@@ -5017,12 +5012,6 @@ socket_callback (s, type, address, data, info)
const void *data;
void *info;
{
- int fd = CFSocketGetNative (s);
- SELECT_TYPE *ofds = (SELECT_TYPE *)info;
-
- if ((type == kCFSocketReadCallBack && FD_ISSET (fd, &ofds[0]))
- || (type == kCFSocketConnectCallBack && FD_ISSET (fd, &ofds[1])))
- QuitEventLoop (GetCurrentEventLoop ());
}
#endif /* SELECT_USE_CFSOCKET */
@@ -5032,42 +5021,64 @@ select_and_poll_event (nfds, rfds, wfds, efds, timeout)
SELECT_TYPE *rfds, *wfds, *efds;
EMACS_TIME *timeout;
{
- OSStatus err = noErr;
+ int timedout_p = 0;
int r = 0;
+ EMACS_TIME select_timeout;
+ EventTimeout timeoutval =
+ (timeout
+ ? (EMACS_SECS (*timeout) * kEventDurationSecond
+ + EMACS_USECS (*timeout) * kEventDurationMicrosecond)
+ : kEventDurationForever);
+ SELECT_TYPE orfds, owfds, oefds;
- /* Try detect_input_pending before ReceiveNextEvent in the same
+ if (timeout == NULL)
+ {
+ if (rfds) orfds = *rfds;
+ if (wfds) owfds = *wfds;
+ if (efds) oefds = *efds;
+ }
+
+ /* Try detect_input_pending before CFRunLoopRunInMode in the same
BLOCK_INPUT block, in case that some input has already been read
asynchronously. */
BLOCK_INPUT;
- ENABLE_WAKEUP_FROM_RNE;
- if (!detect_input_pending ())
+ while (1)
{
- EMACS_TIME select_timeout;
- EventTimeout timeoutval =
- (timeout
- ? (EMACS_SECS (*timeout) * kEventDurationSecond
- + EMACS_USECS (*timeout) * kEventDurationMicrosecond)
- : kEventDurationForever);
+ if (detect_input_pending ())
+ break;
EMACS_SET_SECS_USECS (select_timeout, 0, 0);
r = select (nfds, rfds, wfds, efds, &select_timeout);
+ if (r != 0)
+ break;
+
if (timeoutval == 0.0)
- err = eventLoopTimedOutErr;
- else if (r == 0)
+ timedout_p = 1;
+ else
{
#if USE_CG_DRAWING
mac_prepare_for_quickdraw (NULL);
#endif
- err = ReceiveNextEvent (0, NULL, timeoutval,
- kEventLeaveInQueue, NULL);
+ if (CFRunLoopRunInMode (kCFRunLoopDefaultMode,
+ timeoutval >= 0 ? timeoutval : 100000, true)
+ == kCFRunLoopRunTimedOut)
+ timedout_p = 1;
}
+
+ if (timeout == NULL && timedout_p)
+ {
+ if (rfds) *rfds = orfds;
+ if (wfds) *wfds = owfds;
+ if (efds) *efds = oefds;
+ }
+ else
+ break;
}
- DISABLE_WAKEUP_FROM_RNE;
UNBLOCK_INPUT;
if (r != 0)
return r;
- else if (err == noErr)
+ else if (!timedout_p)
{
/* Pretend that `select' is interrupted by a signal. */
detect_input_pending ();
@@ -5084,25 +5095,25 @@ sys_select (nfds, rfds, wfds, efds, timeout)
SELECT_TYPE *rfds, *wfds, *efds;
EMACS_TIME *timeout;
{
- OSStatus err = noErr;
+ int timedout_p = 0;
int r;
EMACS_TIME select_timeout;
- static SELECT_TYPE ofds[3];
+ SELECT_TYPE orfds, owfds, oefds;
if (inhibit_window_system || noninteractive
|| nfds < 1 || rfds == NULL || !FD_ISSET (0, rfds))
return select (nfds, rfds, wfds, efds, timeout);
FD_CLR (0, rfds);
- ofds[0] = *rfds;
+ orfds = *rfds;
if (wfds)
- ofds[1] = *wfds;
+ owfds = *wfds;
else
- FD_ZERO (&ofds[1]);
+ FD_ZERO (&owfds);
if (efds)
- ofds[2] = *efds;
+ oefds = *efds;
else
{
EventTimeout timeoutval =
@@ -5130,25 +5141,23 @@ sys_select (nfds, rfds, wfds, efds, timeout)
if (r != 0 || timeoutval == 0.0)
return r;
- *rfds = ofds[0];
+ *rfds = orfds;
if (wfds)
- *wfds = ofds[1];
+ *wfds = owfds;
#if SELECT_USE_CFSOCKET
if (timeoutval > 0 && timeoutval <= SELECT_TIMEOUT_THRESHOLD_RUNLOOP)
goto poll_periodically;
- /* Try detect_input_pending before ReceiveNextEvent in the same
- BLOCK_INPUT block, in case that some input has already been
- read asynchronously. */
+ /* Try detect_input_pending before CFRunLoopRunInMode in the
+ same BLOCK_INPUT block, in case that some input has already
+ been read asynchronously. */
BLOCK_INPUT;
- ENABLE_WAKEUP_FROM_RNE;
if (!detect_input_pending ())
{
int minfd, fd;
CFRunLoopRef runloop =
(CFRunLoopRef) GetCFRunLoopFromEventLoop (GetCurrentEventLoop ());
- static const CFSocketContext context = {0, ofds, NULL, NULL, NULL};
static CFMutableDictionaryRef sources;
if (sources == NULL)
@@ -5173,7 +5182,7 @@ sys_select (nfds, rfds, wfds, efds, timeout)
CFSocketCreateWithNative (NULL, fd,
(kCFSocketReadCallBack
| kCFSocketConnectCallBack),
- socket_callback, &context);
+ socket_callback, NULL);
if (socket == NULL)
continue;
@@ -5190,8 +5199,10 @@ sys_select (nfds, rfds, wfds, efds, timeout)
#if USE_CG_DRAWING
mac_prepare_for_quickdraw (NULL);
#endif
- err = ReceiveNextEvent (0, NULL, timeoutval,
- kEventLeaveInQueue, NULL);
+ if (CFRunLoopRunInMode (kCFRunLoopDefaultMode,
+ timeoutval >= 0 ? timeoutval : 100000, true)
+ == kCFRunLoopRunTimedOut)
+ timedout_p = 1;
for (fd = minfd; fd < nfds; fd++)
if (FD_ISSET (fd, rfds) || (wfds && FD_ISSET (fd, wfds)))
@@ -5203,10 +5214,9 @@ sys_select (nfds, rfds, wfds, efds, timeout)
CFRunLoopRemoveSource (runloop, source, kCFRunLoopDefaultMode);
}
}
- DISABLE_WAKEUP_FROM_RNE;
UNBLOCK_INPUT;
- if (err == noErr || err == eventLoopQuitErr)
+ if (!timedout_p)
{
EMACS_SET_SECS_USECS (select_timeout, 0, 0);
return select_and_poll_event (nfds, rfds, wfds, efds,
@@ -5242,11 +5252,11 @@ sys_select (nfds, rfds, wfds, efds, timeout)
if (r != 0)
return r;
- *rfds = ofds[0];
+ *rfds = orfds;
if (wfds)
- *wfds = ofds[1];
+ *wfds = owfds;
if (efds)
- *efds = ofds[2];
+ *efds = oefds;
if (timeout)
{
@@ -5409,10 +5419,12 @@ init_mac_osx_environment ()
void
mac_wakeup_from_rne ()
{
+#ifndef MAC_OSX
if (wakeup_from_rne_enabled_p)
/* Post a harmless event so as to wake up from
ReceiveNextEvent. */
mac_post_mouse_moved_event ();
+#endif
}
#endif
diff --git a/src/macfns.c b/src/macfns.c
index 411340e8ad7..7afeaafd85b 100644
--- a/src/macfns.c
+++ b/src/macfns.c
@@ -107,7 +107,6 @@ extern Lisp_Object Vwindow_system_version;
int image_cache_refcount, dpyinfo_refcount;
#endif
-
#if 0 /* Use xstricmp instead. */
/* compare two strings ignoring case */
@@ -218,9 +217,6 @@ void x_explicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object));
void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
void x_set_title P_ ((struct frame *, Lisp_Object, Lisp_Object));
void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
-
-extern void mac_get_window_bounds P_ ((struct frame *, Rect *, Rect *));
-
/* Store the screen positions of frame F into XPTR and YPTR.
@@ -1370,11 +1366,11 @@ x_set_mouse_color (f, arg, oldval)
Cursor cursor, nontext_cursor, mode_cursor, hand_cursor;
Cursor hourglass_cursor, horizontal_drag_cursor;
unsigned long pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
- unsigned long mask_color = x->background_pixel;
+ unsigned long mask_color = FRAME_BACKGROUND_PIXEL (f);
/* Don't let pointers be invisible. */
if (mask_color == pixel)
- pixel = x->foreground_pixel;
+ pixel = FRAME_FOREGROUND_PIXEL (f);
f->output_data.mac->mouse_pixel = pixel;
@@ -1447,7 +1443,7 @@ x_set_mouse_color (f, arg, oldval)
BLOCK_INPUT;
if (FRAME_MAC_WINDOW (f) != 0)
- rif->define_frame_cursor (f, cursor);
+ FRAME_TERMINAL (f)->rif->define_frame_cursor (f, cursor);
f->output_data.mac->text_cursor = cursor;
f->output_data.mac->nontext_cursor = nontext_cursor;
@@ -1685,6 +1681,25 @@ x_set_tool_bar_lines (f, value, oldval)
/* Make sure we redisplay all windows in this frame. */
++windows_or_buffers_changed;
+#if USE_MAC_TOOLBAR
+ FRAME_TOOL_BAR_LINES (f) = 0;
+ if (nlines)
+ {
+ FRAME_EXTERNAL_TOOL_BAR (f) = 1;
+ if (FRAME_MAC_P (f) && !IsWindowToolbarVisible (FRAME_MAC_WINDOW (f)))
+ /* Make sure next redisplay shows the tool bar. */
+ XWINDOW (FRAME_SELECTED_WINDOW (f))->update_mode_line = Qt;
+ }
+ else
+ {
+ if (FRAME_EXTERNAL_TOOL_BAR (f))
+ free_frame_tool_bar (f);
+ FRAME_EXTERNAL_TOOL_BAR (f) = 0;
+ }
+
+ return;
+#endif
+
delta = nlines - FRAME_TOOL_BAR_LINES (f);
/* Don't resize the tool-bar to more than we have room for. */
@@ -1708,10 +1723,8 @@ x_set_tool_bar_lines (f, value, oldval)
below the menu bar. */
if (FRAME_MAC_WINDOW (f) && FRAME_TOOL_BAR_LINES (f) == 0)
{
- updating_frame = f;
- clear_frame ();
+ clear_frame (f);
clear_current_matrices (f);
- updating_frame = NULL;
}
/* If the tool bar gets smaller, the internal border below it
@@ -2229,8 +2242,10 @@ XParseGeometry (string, x, y, width, height)
/* Create and set up the Mac window for frame F. */
static void
-mac_window (f)
+mac_window (f, window_prompting, minibuffer_only)
struct frame *f;
+ long window_prompting;
+ int minibuffer_only;
{
Rect r;
@@ -2255,11 +2270,11 @@ mac_window (f)
FRAME_MAC_WINDOW (f) = NULL;
}
}
-#else
+#else /* !TARGET_API_MAC_CARBON */
FRAME_MAC_WINDOW (f)
= NewCWindow (NULL, &r, "\p", false, zoomDocProc,
- (WindowPtr) -1, 1, (long) f->output_data.mac);
-#endif
+ (WindowRef) -1, 1, (long) f->output_data.mac);
+#endif /* !TARGET_API_MAC_CARBON */
/* so that update events can find this mac_output struct */
f->output_data.mac->mFP = f; /* point back to emacs frame */
@@ -2279,6 +2294,16 @@ mac_window (f)
XSetWindowBackground (FRAME_MAC_DISPLAY(f), FRAME_MAC_WINDOW (f),
FRAME_BACKGROUND_PIXEL (f));
+#if USE_MAC_TOOLBAR
+ /* At the moment, the size of the tool bar is not yet known. We
+ record the gravity value of the newly created window and use it
+ to adjust the position of the window (especially for a negative
+ specification of its vertical position) when the tool bar is
+ first redisplayed. */
+ if (FRAME_EXTERNAL_TOOL_BAR (f))
+ f->output_data.mac->toolbar_win_gravity = f->win_gravity;
+#endif
+
validate_x_resource_name ();
/* x_set_name normally ignores requests to set the name if the
@@ -2393,8 +2418,8 @@ x_make_gc (f)
= (XCreatePixmapFromBitmapData
(FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window,
gray_bits, gray_width, gray_height,
- f->output_data.x->foreground_pixel,
- f->output_data.x->background_pixel,
+ FRAME_FOREGROUND_PIXEL (f),
+ FRAME_BACKGROUND_PIXEL (f),
DefaultDepth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f))));
#endif
@@ -2489,15 +2514,15 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
1, 1, 0,
doc: /* Make a new window, which is called a "frame" in Emacs terms.
Return an Emacs frame object.
-ALIST is an alist of frame parameters.
+PARAMETERS is an alist of frame parameters.
If the parameters specify that the frame should not have a minibuffer,
and do not specify a specific minibuffer window to use,
then `default-minibuffer-frame' must be a frame whose minibuffer can
be shared by the new frame.
This function is an internal primitive--use `make-frame' instead. */)
- (parms)
- Lisp_Object parms;
+ (parameters)
+ Lisp_Object parameters;
{
struct frame *f;
Lisp_Object frame, tem;
@@ -2514,23 +2539,17 @@ This function is an internal primitive--use `make-frame' instead. */)
check_mac ();
- parms = Fcopy_alist (parms);
-
/* Use this general default value to start with
until we know if this frame has a specified name. */
Vx_resource_name = Vinvocation_name;
- display = mac_get_arg (parms, Qdisplay, 0, 0, RES_TYPE_STRING);
+ display = mac_get_arg (parameters, Qdisplay, 0, 0, RES_TYPE_STRING);
if (EQ (display, Qunbound))
display = Qnil;
dpyinfo = check_x_display_info (display);
-#ifdef MULTI_KBOARD
- kb = dpyinfo->kboard;
-#else
- kb = &the_only_kboard;
-#endif
+ kb = dpyinfo->terminal->kboard;
- name = mac_get_arg (parms, Qname, "name", "Name", RES_TYPE_STRING);
+ name = mac_get_arg (parameters, Qname, "name", "Name", RES_TYPE_STRING);
if (!STRINGP (name)
&& ! EQ (name, Qunbound)
&& ! NILP (name))
@@ -2540,7 +2559,7 @@ This function is an internal primitive--use `make-frame' instead. */)
Vx_resource_name = name;
/* See if parent window is specified. */
- parent = mac_get_arg (parms, Qparent_id, NULL, NULL, RES_TYPE_NUMBER);
+ parent = mac_get_arg (parameters, Qparent_id, NULL, NULL, RES_TYPE_NUMBER);
if (EQ (parent, Qunbound))
parent = Qnil;
if (! NILP (parent))
@@ -2550,8 +2569,8 @@ This function is an internal primitive--use `make-frame' instead. */)
/* No need to protect DISPLAY because that's not used after passing
it to make_frame_without_minibuffer. */
frame = Qnil;
- GCPRO4 (parms, parent, name, frame);
- tem = mac_get_arg (parms, Qminibuffer, "minibuffer", "Minibuffer",
+ GCPRO4 (parameters, parent, name, frame);
+ tem = mac_get_arg (parameters, Qminibuffer, "minibuffer", "Minibuffer",
RES_TYPE_SYMBOL);
if (EQ (tem, Qnone) || NILP (tem))
f = make_frame_without_minibuffer (Qnil, kb, display);
@@ -2570,27 +2589,29 @@ This function is an internal primitive--use `make-frame' instead. */)
/* Note that X Windows does support scroll bars. */
FRAME_CAN_HAVE_SCROLL_BARS (f) = 1;
+ f->terminal = dpyinfo->terminal;
+ f->terminal->reference_count++;
+
f->output_method = output_mac;
f->output_data.mac = (struct mac_output *) xmalloc (sizeof (struct mac_output));
bzero (f->output_data.mac, sizeof (struct mac_output));
FRAME_FONTSET (f) = -1;
+ record_unwind_protect (unwind_create_frame, frame);
f->icon_name
- = mac_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING);
+ = mac_get_arg (parameters, Qicon_name, "iconName", "Title", RES_TYPE_STRING);
if (! STRINGP (f->icon_name))
f->icon_name = Qnil;
-/* FRAME_MAC_DISPLAY_INFO (f) = dpyinfo; */
+ /* XXX Is this needed? */
+ /*FRAME_MAC_DISPLAY_INFO (f) = dpyinfo;*/
/* With FRAME_MAC_DISPLAY_INFO set up, this unwind-protect is safe. */
- record_unwind_protect (unwind_create_frame, frame);
#if GLYPH_DEBUG
image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
dpyinfo_refcount = dpyinfo->reference_count;
#endif /* GLYPH_DEBUG */
-#ifdef MULTI_KBOARD
FRAME_KBOARD (f) = kb;
-#endif
/* Specify the parent under which to make this window. */
@@ -2625,7 +2646,7 @@ This function is an internal primitive--use `make-frame' instead. */)
{
Lisp_Object font;
- font = mac_get_arg (parms, Qfont, "font", "Font", RES_TYPE_STRING);
+ font = mac_get_arg (parameters, Qfont, "font", "Font", RES_TYPE_STRING);
BLOCK_INPUT;
/* First, try whatever font the caller has specified. */
@@ -2637,7 +2658,6 @@ This function is an internal primitive--use `make-frame' instead. */)
else
font = x_new_font (f, SDATA (font));
}
-
/* Try out a font which we hope has bold and italic variations. */
#if USE_ATSUI
if (! STRINGP (font))
@@ -2656,48 +2676,50 @@ This function is an internal primitive--use `make-frame' instead. */)
error ("Cannot find any usable font");
UNBLOCK_INPUT;
- x_set_frame_parameters (f, Fcons (Fcons (Qfont, font), Qnil));
+ x_default_parameter (f, parameters, Qfont, font,
+ "font", "Font", RES_TYPE_STRING);
}
- x_default_parameter (f, parms, Qborder_width, make_number (0),
+ /* XXX Shouldn't this be borderWidth, not borderwidth ?*/
+ x_default_parameter (f, parameters, Qborder_width, make_number (0),
"borderwidth", "BorderWidth", RES_TYPE_NUMBER);
/* This defaults to 2 in order to match xterm. We recognize either
internalBorderWidth or internalBorder (which is what xterm calls
it). */
- if (NILP (Fassq (Qinternal_border_width, parms)))
+ if (NILP (Fassq (Qinternal_border_width, parameters)))
{
Lisp_Object value;
- value = mac_get_arg (parms, Qinternal_border_width,
+ value = mac_get_arg (parameters, Qinternal_border_width,
"internalBorder", "InternalBorder", RES_TYPE_NUMBER);
if (! EQ (value, Qunbound))
- parms = Fcons (Fcons (Qinternal_border_width, value),
- parms);
+ parameters = Fcons (Fcons (Qinternal_border_width, value),
+ parameters);
}
/* Default internalBorderWidth to 0 on Windows to match other programs. */
- x_default_parameter (f, parms, Qinternal_border_width, make_number (0),
+ x_default_parameter (f, parameters, Qinternal_border_width, make_number (0),
"internalBorderWidth", "InternalBorder", RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qvertical_scroll_bars, Qright,
+ x_default_parameter (f, parameters, Qvertical_scroll_bars, Qright,
"verticalScrollBars", "ScrollBars", RES_TYPE_SYMBOL);
/* Also do the stuff which must be set before the window exists. */
- x_default_parameter (f, parms, Qforeground_color, build_string ("black"),
+ x_default_parameter (f, parameters, Qforeground_color, build_string ("black"),
"foreground", "Foreground", RES_TYPE_STRING);
- x_default_parameter (f, parms, Qbackground_color, build_string ("white"),
+ x_default_parameter (f, parameters, Qbackground_color, build_string ("white"),
"background", "Background", RES_TYPE_STRING);
- x_default_parameter (f, parms, Qmouse_color, build_string ("black"),
+ x_default_parameter (f, parameters, Qmouse_color, build_string ("black"),
"pointerColor", "Foreground", RES_TYPE_STRING);
- x_default_parameter (f, parms, Qcursor_color, build_string ("black"),
+ x_default_parameter (f, parameters, Qcursor_color, build_string ("black"),
"cursorColor", "Foreground", RES_TYPE_STRING);
- x_default_parameter (f, parms, Qborder_color, build_string ("black"),
+ x_default_parameter (f, parameters, Qborder_color, build_string ("black"),
"borderColor", "BorderColor", RES_TYPE_STRING);
- x_default_parameter (f, parms, Qscreen_gamma, Qnil,
+ x_default_parameter (f, parameters, Qscreen_gamma, Qnil,
"screenGamma", "ScreenGamma", RES_TYPE_FLOAT);
- x_default_parameter (f, parms, Qline_spacing, Qnil,
+ x_default_parameter (f, parameters, Qline_spacing, Qnil,
"lineSpacing", "LineSpacing", RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qleft_fringe, Qnil,
+ x_default_parameter (f, parameters, Qleft_fringe, Qnil,
"leftFringe", "LeftFringe", RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qright_fringe, Qnil,
+ x_default_parameter (f, parameters, Qright_fringe, Qnil,
"rightFringe", "RightFringe", RES_TYPE_NUMBER);
@@ -2709,29 +2731,29 @@ This function is an internal primitive--use `make-frame' instead. */)
happen. */
init_frame_faces (f);
- x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1),
+ x_default_parameter (f, parameters, Qmenu_bar_lines, make_number (1),
"menuBar", "MenuBar", RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qtool_bar_lines, make_number (1),
- "toolBar", "ToolBar", RES_TYPE_NUMBER);
- x_default_parameter (f, parms, Qbuffer_predicate, Qnil,
- "bufferPredicate", "BufferPredicate",
- RES_TYPE_SYMBOL);
- x_default_parameter (f, parms, Qtitle, Qnil,
+ x_default_parameter (f, parameters, Qtool_bar_lines, make_number (1),
+ "toolBar", "ToolBar", RES_TYPE_NUMBER);
+
+ x_default_parameter (f, parameters, Qbuffer_predicate, Qnil,
+ "bufferPredicate", "BufferPredicate", RES_TYPE_SYMBOL);
+ x_default_parameter (f, parameters, Qtitle, Qnil,
"title", "Title", RES_TYPE_STRING);
- x_default_parameter (f, parms, Qfullscreen, Qnil,
+ x_default_parameter (f, parameters, Qfullscreen, Qnil,
"fullscreen", "Fullscreen", RES_TYPE_SYMBOL);
f->output_data.mac->parent_desc = FRAME_MAC_DISPLAY_INFO (f)->root_window;
/* Compute the size of the window. */
- window_prompting = x_figure_window_size (f, parms, 1);
+ window_prompting = x_figure_window_size (f, parameters, 1);
- tem = mac_get_arg (parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
+ tem = mac_get_arg (parameters, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN);
f->no_split = minibuffer_only || EQ (tem, Qt);
- mac_window (f);
+ mac_window (f, window_prompting, minibuffer_only);
+ x_icon (f, parameters);
- x_icon (f, parms);
x_make_gc (f);
/* Now consider the frame official. */
@@ -2740,18 +2762,17 @@ This function is an internal primitive--use `make-frame' instead. */)
/* We need to do this after creating the window, so that the
icon-creation functions can say whose icon they're describing. */
- x_default_parameter (f, parms, Qicon_type, Qnil,
+ x_default_parameter (f, parameters, Qicon_type, Qnil,
"bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL);
- x_default_parameter (f, parms, Qauto_raise, Qnil,
+ x_default_parameter (f, parameters, Qauto_raise, Qnil,
"autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN);
- x_default_parameter (f, parms, Qauto_lower, Qnil,
+ x_default_parameter (f, parameters, Qauto_lower, Qnil,
"autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN);
- x_default_parameter (f, parms, Qcursor_type, Qbox,
+ x_default_parameter (f, parameters, Qcursor_type, Qbox,
"cursorType", "CursorType", RES_TYPE_SYMBOL);
- x_default_parameter (f, parms, Qscroll_bar_width, Qnil,
- "scrollBarWidth", "ScrollBarWidth",
- RES_TYPE_NUMBER);
+ x_default_parameter (f, parameters, Qscroll_bar_width, Qnil,
+ "scrollBarWidth", "ScrollBarWidth", RES_TYPE_NUMBER);
/* Dimensions, especially FRAME_LINES (f), must be done via change_frame_size.
Change will not be effected unless different from the current
@@ -2759,8 +2780,8 @@ This function is an internal primitive--use `make-frame' instead. */)
width = FRAME_COLS (f);
height = FRAME_LINES (f);
- SET_FRAME_COLS (f, 0);
FRAME_LINES (f) = 0;
+ SET_FRAME_COLS (f, 0);
change_frame_size (f, height, width, 1, 0, 0);
/* Tell the server what size and position, etc, we want, and how
@@ -2777,7 +2798,7 @@ This function is an internal primitive--use `make-frame' instead. */)
{
Lisp_Object visibility;
- visibility = mac_get_arg (parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL);
+ visibility = mac_get_arg (parameters, Qvisibility, 0, 0, RES_TYPE_SYMBOL);
if (EQ (visibility, Qunbound))
visibility = Qt;
@@ -2799,7 +2820,7 @@ This function is an internal primitive--use `make-frame' instead. */)
/* All remaining specified parameters, which have not been "used"
by x_get_arg and friends, now go in the misc. alist of the frame. */
- for (tem = parms; !NILP (tem); tem = XCDR (tem))
+ for (tem = parameters; CONSP (tem); tem = XCDR (tem))
if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
f->param_alist = Fcons (XCAR (tem), f->param_alist);
@@ -3112,7 +3133,7 @@ If omitted or nil, that stands for the selected frame's display. */)
UNBLOCK_INPUT;
}
#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
- else
+ else /* CGDisplayScreenSize == NULL */
#endif
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 */
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 || MAC_OS_X_VERSION_MIN_REQUIRED == 1020
@@ -3149,7 +3170,7 @@ If omitted or nil, that stands for the selected frame's display. */)
UNBLOCK_INPUT;
}
#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
- else
+ else /* CGDisplayScreenSize == NULL */
#endif
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 */
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 || MAC_OS_X_VERSION_MIN_REQUIRED == 1020
@@ -3265,9 +3286,6 @@ x_display_info_for_name (name)
CHECK_STRING (name);
- if (! EQ (Vwindow_system, intern ("mac")))
- error ("Not using Mac native windows");
-
for (dpyinfo = &one_mac_display_info, names = x_display_name_list;
dpyinfo;
dpyinfo = dpyinfo->next, names = XCDR (names))
@@ -3312,9 +3330,6 @@ terminate Emacs if we can't open the connection. */)
if (! NILP (xrm_string))
CHECK_STRING (xrm_string);
- if (! EQ (Vwindow_system, intern ("mac")))
- error ("Not using Mac native windows");
-
if (! NILP (xrm_string))
xrm_option = (unsigned char *) SDATA (xrm_string);
else
@@ -3379,7 +3394,7 @@ DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
Lisp_Object tail, result;
result = Qnil;
- for (tail = x_display_name_list; ! NILP (tail); tail = XCDR (tail))
+ for (tail = x_display_name_list; CONSP (tail); tail = XCDR (tail))
result = Fcons (XCAR (XCAR (tail)), result);
return result;
@@ -3577,10 +3592,6 @@ start_hourglass ()
EMACS_TIME delay;
int secs, usecs = 0;
- /* Don't bother for ttys. */
- if (NILP (Vwindow_system))
- return;
-
cancel_hourglass ();
if (INTEGERP (Vhourglass_delay)
@@ -3792,11 +3803,7 @@ x_create_tip_frame (dpyinfo, parms, text)
parms = Fcopy_alist (parms);
-#ifdef MULTI_KBOARD
- kb = dpyinfo->kboard;
-#else
- kb = &the_only_kboard;
-#endif
+ kb = dpyinfo->terminal->kboard;
/* Get the name of the frame to use for resource lookup. */
name = mac_get_arg (parms, Qname, "name", "Name", RES_TYPE_STRING);
@@ -3828,6 +3835,8 @@ x_create_tip_frame (dpyinfo, parms, text)
the frame is live, as per FRAME_LIVE_P. If we get a signal
from this point on, x_destroy_window might screw up reference
counts etc. */
+ f->terminal = dpyinfo->terminal;
+ f->terminal->reference_count++;
f->output_method = output_mac;
f->output_data.mac =
(struct mac_output *) xmalloc (sizeof (struct mac_output));
@@ -3840,9 +3849,7 @@ x_create_tip_frame (dpyinfo, parms, text)
image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
dpyinfo_refcount = dpyinfo->reference_count;
#endif /* GLYPH_DEBUG */
-#ifdef MULTI_KBOARD
FRAME_KBOARD (f) = kb;
-#endif
f->output_data.mac->parent_desc = FRAME_MAC_DISPLAY_INFO (f)->root_window;
f->output_data.mac->explicit_parent = 0;
@@ -4068,8 +4075,12 @@ compute_tip_xy (f, parms, dx, dy, width, height, root_x, root_y)
Point mouse_pos;
BLOCK_INPUT;
+#if TARGET_API_MAC_CARBON
+ GetGlobalMouse (&mouse_pos);
+#else
GetMouse (&mouse_pos);
LocalToGlobal (&mouse_pos);
+#endif
*root_x = mouse_pos.h;
*root_y = mouse_pos.v;
UNBLOCK_INPUT;
diff --git a/src/macgui.h b/src/macgui.h
index 04f48b087a6..7a65e583b1b 100644
--- a/src/macgui.h
+++ b/src/macgui.h
@@ -71,7 +71,7 @@ typedef unsigned long Time;
#undef Z
#define Z (current_buffer->text->z)
#else /* not HAVE_CARBON */
-#include <QuickDraw.h> /* for WindowPtr */
+#include <QuickDraw.h> /* for WindowRef */
#include <QDOffscreen.h> /* for GWorldPtr */
#include <Appearance.h> /* for ThemeCursor */
#include <Windows.h>
@@ -98,7 +98,7 @@ typedef unsigned long Time;
/* Whether to use Quartz 2D routines for drawing operations other than
texts. */
#ifndef USE_CG_DRAWING
-#if USE_ATSUI && MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
#define USE_CG_DRAWING 1
#endif
#endif
@@ -117,7 +117,14 @@ typedef unsigned long Time;
#endif
#endif
-typedef WindowPtr Window;
+/* Whether to use HIToolbar. */
+#ifndef USE_MAC_TOOLBAR
+#if USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 && MAC_OS_X_VERSION_MIN_REQUIRED != 1020
+#define USE_MAC_TOOLBAR 1
+#endif
+#endif
+
+typedef WindowRef Window;
typedef GWorldPtr Pixmap;
#define Cursor ThemeCursor
diff --git a/src/macmenu.c b/src/macmenu.c
index b8cfd6a4d2f..aa0be0bdc2e 100644
--- a/src/macmenu.c
+++ b/src/macmenu.c
@@ -26,10 +26,10 @@ Boston, MA 02110-1301, USA. */
#include <stdio.h>
#include "lisp.h"
+#include "frame.h"
#include "termhooks.h"
#include "keyboard.h"
#include "keymap.h"
-#include "frame.h"
#include "window.h"
#include "blockinput.h"
#include "buffer.h"
@@ -200,7 +200,7 @@ static void list_of_items P_ ((Lisp_Object));
static void find_and_call_menu_selection P_ ((FRAME_PTR, int, Lisp_Object,
void *));
-static int fill_menu P_ ((MenuHandle, widget_value *, enum mac_menu_kind, int));
+static int fill_menu P_ ((MenuRef, widget_value *, enum mac_menu_kind, int));
static void fill_menubar P_ ((widget_value *, int));
static void dispose_menus P_ ((enum mac_menu_kind, int));
@@ -347,15 +347,8 @@ save_menu_items ()
static void
grow_menu_items ()
{
- Lisp_Object old;
- int old_size = menu_items_allocated;
- old = menu_items;
-
menu_items_allocated *= 2;
-
- menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
- bcopy (XVECTOR (old)->contents, XVECTOR (menu_items)->contents,
- old_size * sizeof (Lisp_Object));
+ menu_items = larger_vector (menu_items, menu_items_allocated, Qnil);
}
/* Begin a submenu. */
@@ -720,8 +713,8 @@ no quit occurs and `x-popup-menu' returns nil. */)
enum scroll_bar_part part;
unsigned long time;
- if (mouse_position_hook)
- (*mouse_position_hook) (&new_f, 1, &bar_window,
+ if (FRAME_TERMINAL (new_f)->mouse_position_hook)
+ (*FRAME_TERMINAL (new_f)->mouse_position_hook) (&new_f, 1, &bar_window,
&part, &x, &y, &time);
if (new_f != 0)
XSETFRAME (window, new_f);
@@ -882,7 +875,7 @@ no quit occurs and `x-popup-menu' returns nil. */)
/* Regard ESC and C-g as Cancel even without the Cancel button. */
-#ifdef MAC_OSX
+#if 0 /* defined (MAC_OSX) */
static Boolean
mac_dialog_modal_filter (dialog, event, item_hit)
DialogRef dialog;
@@ -991,7 +984,7 @@ for instance using the window manager, then this produces a quit and
but I don't want to make one now. */
CHECK_WINDOW (window);
-#ifdef MAC_OSX
+#if 0 /* defined (MAC_OSX) */
/* Special treatment for Fmessage_box, Fyes_or_no_p, and Fy_or_n_p. */
if (EQ (position, Qt)
&& STRINGP (Fcar (contents))
@@ -1162,7 +1155,7 @@ x_activate_menubar (f)
#endif
if (menu_id)
{
- MenuHandle menu = GetMenuHandle (menu_id);
+ MenuRef menu = GetMenuRef (menu_id);
if (menu)
{
@@ -1595,14 +1588,16 @@ menu_target_item_handler (next_handler, event, data)
EventRef event;
void *data;
{
- OSStatus err, result;
+ OSStatus err;
MenuRef menu;
MenuItemIndex menu_item;
Lisp_Object help;
GrafPtr port;
int specpdl_count = SPECPDL_INDEX ();
- result = CallNextEventHandler (next_handler, event);
+ /* Don't be bothered with the overflowed toolbar items menu. */
+ if (!popup_activated ())
+ return eventNotHandledErr;
err = GetEventParameter (event, kEventParamDirectObject, typeMenuRef,
NULL, sizeof (MenuRef), NULL, &menu);
@@ -1626,30 +1621,21 @@ menu_target_item_handler (next_handler, event, data)
SetPort (port);
unbind_to (specpdl_count, Qnil);
- return err == noErr ? noErr : result;
+ return err == noErr ? noErr : eventNotHandledErr;
}
-#endif
OSStatus
-install_menu_target_item_handler (window)
- WindowPtr window;
+install_menu_target_item_handler ()
{
- OSStatus err = noErr;
-#if TARGET_API_MAC_CARBON
static const EventTypeSpec specs[] =
{{kEventClassMenu, kEventMenuTargetItem}};
- static EventHandlerUPP menu_target_item_handlerUPP = NULL;
-
- if (menu_target_item_handlerUPP == NULL)
- menu_target_item_handlerUPP =
- NewEventHandlerUPP (menu_target_item_handler);
- err = InstallWindowEventHandler (window, menu_target_item_handlerUPP,
- GetEventTypeCount (specs), specs,
- NULL, NULL);
-#endif
- return err;
+ return InstallApplicationEventHandler (NewEventHandlerUPP
+ (menu_target_item_handler),
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
}
+#endif /* TARGET_API_MAC_CARBON */
/* Event handler function that pops down a menu on C-g. We can only pop
down menus if CancelMenuTracking is present (OSX 10.3 or later). */
@@ -1687,15 +1673,15 @@ menu_quit_handler (nextHandler, theEvent, userData)
}
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 */
-/* Add event handler to all menus that belong to KIND so we can detect C-g.
- MENU_HANDLE is the root menu of the tracking session to dismiss
- when C-g is detected. NULL means the menu bar.
- If CancelMenuTracking isn't available, do nothing. */
+/* Add event handler to all menus that belong to KIND so we can detect
+ C-g. ROOT_MENU is the root menu of the tracking session to dismiss
+ when C-g is detected. NULL means the menu bar. If
+ CancelMenuTracking isn't available, do nothing. */
static void
-install_menu_quit_handler (kind, menu_handle)
+install_menu_quit_handler (kind, root_menu)
enum mac_menu_kind kind;
- MenuHandle menu_handle;
+ MenuRef root_menu;
{
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
static const EventTypeSpec typesList[] =
@@ -1708,13 +1694,13 @@ install_menu_quit_handler (kind, menu_handle)
#endif
for (id = min_menu_id[kind]; id < min_menu_id[kind + 1]; id++)
{
- MenuHandle menu = GetMenuHandle (id);
+ MenuRef menu = GetMenuRef (id);
if (menu == NULL)
break;
InstallMenuEventHandler (menu, menu_quit_handler,
GetEventTypeCount (typesList),
- typesList, menu_handle, NULL);
+ typesList, root_menu, NULL);
}
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 */
}
@@ -1738,10 +1724,13 @@ set_frame_menubar (f, first_time, deep_p)
XSETFRAME (Vmenu_updating_frame, f);
+ /* This seems to be unnecessary for Carbon. */
+#if 0
if (! menubar_widget)
deep_p = 1;
else if (pending_menu_activation && !deep_p)
deep_p = 1;
+#endif
if (deep_p)
{
@@ -1978,7 +1967,7 @@ pop_down_menu (arg)
{
struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
FRAME_PTR f = p->pointer;
- MenuHandle menu = GetMenuHandle (min_menu_id[MAC_MENU_POPUP]);
+ MenuRef menu = GetMenuRef (min_menu_id[MAC_MENU_POPUP]);
BLOCK_INPUT;
@@ -2024,8 +2013,7 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
int i;
int menu_item_choice;
UInt32 menu_item_selection;
- MenuHandle menu;
- Point pos;
+ MenuRef menu;
widget_value *wv, *save_wv = 0, *first_wv = 0, *prev_wv = 0;
widget_value **submenu_stack
= (widget_value **) alloca (menu_items_used * sizeof (widget_value *));
@@ -2231,11 +2219,8 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
free_menubar_widget_value_tree (first_wv);
/* Adjust coordinates to be root-window-relative. */
- pos.h = x;
- pos.v = y;
-
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
- LocalToGlobal (&pos);
+ x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
+ y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
/* No selection has been chosen yet. */
menu_item_selection = 0;
@@ -2248,13 +2233,13 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
/* Display the menu. */
popup_activated_flag = 1;
- menu_item_choice = PopUpMenuSelect (menu, pos.v, pos.h, 0);
+ menu_item_choice = PopUpMenuSelect (menu, y, x, 0);
popup_activated_flag = 0;
/* Get the refcon to find the correct item */
if (menu_item_choice)
{
- MenuHandle sel_menu = GetMenuHandle (HiWord (menu_item_choice));
+ MenuRef sel_menu = GetMenuRef (HiWord (menu_item_choice));
if (sel_menu)
GetMenuItemRefCon (sel_menu, LoWord (menu_item_choice),
@@ -2330,13 +2315,24 @@ mac_menu_show (f, x, y, for_click, keymaps, title, error)
#if TARGET_API_MAC_CARBON
+#define DIALOG_BUTTON_COMMAND_ID_OFFSET 'Bt\0\0'
+#define DIALOG_BUTTON_COMMAND_ID_P(id) \
+ (((id) & ~0xffff) == DIALOG_BUTTON_COMMAND_ID_OFFSET)
+#define DIALOG_BUTTON_COMMAND_ID_VALUE(id) \
+ ((id) - DIALOG_BUTTON_COMMAND_ID_OFFSET)
+#define DIALOG_BUTTON_MAKE_COMMAND_ID(value) \
+ ((value) + DIALOG_BUTTON_COMMAND_ID_OFFSET)
+
+extern EMACS_TIME timer_check P_ ((int));
+static int quit_dialog_event_loop;
+
static pascal OSStatus
mac_handle_dialog_event (next_handler, event, data)
EventHandlerCallRef next_handler;
EventRef event;
void *data;
{
- OSStatus err;
+ OSStatus err, result = eventNotHandledErr;
WindowRef window = (WindowRef) data;
switch (GetEventClass (event))
@@ -2349,15 +2345,14 @@ mac_handle_dialog_event (next_handler, event, data)
typeHICommand, NULL, sizeof (HICommand),
NULL, &command);
if (err == noErr)
- if ((command.commandID & ~0xffff) == 'Bt\0\0')
+ if (DIALOG_BUTTON_COMMAND_ID_P (command.commandID))
{
SetWRefCon (window, command.commandID);
- err = QuitAppModalLoopForWindow (window);
-
- return err == noErr ? noErr : eventNotHandledErr;
+ quit_dialog_event_loop = 1;
+ break;
}
- return CallNextEventHandler (next_handler, event);
+ result = CallNextEventHandler (next_handler, event);
}
break;
@@ -2367,8 +2362,8 @@ mac_handle_dialog_event (next_handler, event, data)
char char_code;
result = CallNextEventHandler (next_handler, event);
- if (result == noErr)
- return noErr;
+ if (result != eventNotHandledErr)
+ break;
err = GetEventParameter (event, kEventParamKeyMacCharCodes,
typeChar, NULL, sizeof (char),
@@ -2377,7 +2372,7 @@ mac_handle_dialog_event (next_handler, event, data)
switch (char_code)
{
case kEscapeCharCode:
- err = QuitAppModalLoopForWindow (window);
+ quit_dialog_event_loop = 1;
break;
default:
@@ -2392,23 +2387,26 @@ mac_handle_dialog_event (next_handler, event, data)
typeUInt32, NULL, sizeof (UInt32),
NULL, &key_code);
if (err == noErr)
- {
- if (mac_quit_char_key_p (modifiers, key_code))
- err = QuitAppModalLoopForWindow (window);
- else
- err = eventNotHandledErr;
- }
+ if (mac_quit_char_key_p (modifiers, key_code))
+ quit_dialog_event_loop = 1;
}
break;
}
-
- return err == noErr ? noErr : result;
}
break;
default:
abort ();
}
+
+ if (quit_dialog_event_loop)
+ {
+ err = QuitEventLoop (GetCurrentEventLoop ());
+ if (err == noErr)
+ result = noErr;
+ }
+
+ return result;
}
static OSStatus
@@ -2443,6 +2441,25 @@ install_dialog_event_handler (window)
#define DIALOG_ICON_LEFT_MARGIN (24)
#define DIALOG_ICON_TOP_MARGIN (15)
+static Lisp_Object
+pop_down_dialog (arg)
+ Lisp_Object arg;
+{
+ struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
+ WindowRef window = p->pointer;
+
+ BLOCK_INPUT;
+
+ if (popup_activated_flag)
+ EndAppModalStateForWindow (window);
+ DisposeWindow (window);
+ popup_activated_flag = 0;
+
+ UNBLOCK_INPUT;
+
+ return Qnil;
+}
+
static int
create_and_show_dialog (f, first_wv)
FRAME_PTR f;
@@ -2456,6 +2473,7 @@ create_and_show_dialog (f, first_wv)
Rect empty_rect, *rects;
WindowRef window = NULL;
ControlRef *buttons, default_button = NULL, text;
+ int specpdl_count = SPECPDL_INDEX ();
dialog_name = first_wv->name;
nb_buttons = dialog_name[1] - '0';
@@ -2472,8 +2490,11 @@ create_and_show_dialog (f, first_wv)
kWindowStandardHandlerAttribute,
&empty_rect, &window);
if (err == noErr)
- err = SetThemeWindowBackground (window, kThemeBrushMovableModalBackground,
- true);
+ {
+ record_unwind_protect (pop_down_dialog, make_save_value (window, 0));
+ err = SetThemeWindowBackground (window, kThemeBrushMovableModalBackground,
+ true);
+ }
if (err == noErr)
err = SetWindowTitleWithCFString (window, (dialog_name[0] == 'Q'
? CFSTR ("Question")
@@ -2518,14 +2539,16 @@ create_and_show_dialog (f, first_wv)
}
if (err == noErr)
{
+ UInt32 command_id;
+
OffsetRect (&rects[i], -rects[i].left, -rects[i].top);
if (rects[i].right < DIALOG_BUTTON_MIN_WIDTH)
rects[i].right = DIALOG_BUTTON_MIN_WIDTH;
else if (rects[i].right > DIALOG_MAX_INNER_WIDTH)
rects[i].right = DIALOG_MAX_INNER_WIDTH;
- err = SetControlCommandID (buttons[i],
- 'Bt\0\0' + (int) wv->call_data);
+ command_id = DIALOG_BUTTON_MAKE_COMMAND_ID ((int) wv->call_data);
+ err = SetControlCommandID (buttons[i], command_id);
}
if (err != noErr)
break;
@@ -2696,18 +2719,66 @@ create_and_show_dialog (f, first_wv)
SetWRefCon (window, 0);
ShowWindow (window);
BringToFront (window);
- err = RunAppModalLoopForWindow (window);
+ popup_activated_flag = 1;
+ err = BeginAppModalStateForWindow (window);
+ }
+ if (err == noErr)
+ {
+ EventTargetRef toolbox_dispatcher = GetEventDispatcherTarget ();
+
+ quit_dialog_event_loop = 0;
+ while (1)
+ {
+ EMACS_TIME next_time = timer_check (1);
+ long secs = EMACS_SECS (next_time);
+ long usecs = EMACS_USECS (next_time);
+ EventTimeout timeout;
+ EventRef event;
+
+ if (secs < 0 || (secs == 0 && usecs == 0))
+ {
+ /* Sometimes timer_check returns -1 (no timers) even if
+ there are timers. So do a timeout anyway. */
+ secs = 1;
+ usecs = 0;
+ }
+
+ timeout = (secs * kEventDurationSecond
+ + usecs * kEventDurationMicrosecond);
+ err = ReceiveNextEvent (0, NULL, timeout, kEventRemoveFromQueue,
+ &event);
+ if (err == noErr)
+ {
+ SendEventToEventTarget (event, toolbox_dispatcher);
+ ReleaseEvent (event);
+ }
+#ifdef MAC_OSX
+ else if (err != eventLoopTimedOutErr)
+ {
+ if (err == eventLoopQuitErr)
+ err = noErr;
+ break;
+ }
+#else
+ /* The return value of ReceiveNextEvent seems to be
+ unreliable. Use our own global variable instead. */
+ if (quit_dialog_event_loop)
+ {
+ err = noErr;
+ break;
+ }
+#endif
+ }
}
if (err == noErr)
{
UInt32 command_id = GetWRefCon (window);
- if ((command_id & ~0xffff) == 'Bt\0\0')
- result = command_id - 'Bt\0\0';
+ if (DIALOG_BUTTON_COMMAND_ID_P (command_id))
+ result = DIALOG_BUTTON_COMMAND_ID_VALUE (command_id);
}
- if (window)
- DisposeWindow (window);
+ unbind_to (specpdl_count, Qnil);
return result;
}
@@ -2724,8 +2795,8 @@ mac_dialog (widget_value *wv)
int i;
int dialog_width;
Rect rect;
- WindowPtr window_ptr;
- ControlHandle ch;
+ WindowRef window_ptr;
+ ControlRef ch;
int left;
EventRecord event_record;
SInt16 part_code;
@@ -2754,7 +2825,7 @@ mac_dialog (widget_value *wv)
wv = wv->next;
}
- window_ptr = GetNewCWindow (DIALOG_WINDOW_RESOURCE, NULL, (WindowPtr) -1);
+ window_ptr = GetNewCWindow (DIALOG_WINDOW_RESOURCE, NULL, (WindowRef) -1);
SetPortWindowPort (window_ptr);
@@ -3031,7 +3102,7 @@ name_is_separator (name)
static void
add_menu_item (menu, pos, wv)
- MenuHandle menu;
+ MenuRef menu;
int pos;
widget_value *wv;
{
@@ -3108,7 +3179,7 @@ add_menu_item (menu, pos, wv)
static int
fill_menu (menu, wv, kind, submenu_id)
- MenuHandle menu;
+ MenuRef menu;
widget_value *wv;
enum mac_menu_kind kind;
int submenu_id;
@@ -3120,7 +3191,7 @@ fill_menu (menu, wv, kind, submenu_id)
add_menu_item (menu, pos, wv);
if (wv->contents && submenu_id < min_menu_id[kind + 1])
{
- MenuHandle submenu = NewMenu (submenu_id, "\pX");
+ MenuRef submenu = NewMenu (submenu_id, "\pX");
InsertMenu (submenu, -1);
SetMenuItemHierarchicalID (menu, pos, submenu_id);
@@ -3139,8 +3210,6 @@ fill_menubar (wv, deep_p)
int deep_p;
{
int id, submenu_id;
- MenuHandle menu;
- Str255 title;
#if !TARGET_API_MAC_CARBON
int title_changed_p = 0;
#endif
@@ -3162,45 +3231,75 @@ fill_menubar (wv, deep_p)
wv != NULL && id < min_menu_id[MAC_MENU_MENU_BAR + 1];
wv = wv->next, id++)
{
+ OSStatus err = noErr;
+ MenuRef menu;
+#if TARGET_API_MAC_CARBON
+ CFStringRef title;
+
+ title = CFStringCreateWithCString (NULL, wv->name,
+ kCFStringEncodingMacRoman);
+#else
+ Str255 title;
+
strncpy (title, wv->name, 255);
title[255] = '\0';
c2pstr (title);
+#endif
- menu = GetMenuHandle (id);
+ menu = GetMenuRef (id);
if (menu)
{
#if TARGET_API_MAC_CARBON
- Str255 old_title;
+ CFStringRef old_title;
- GetMenuTitle (menu, old_title);
- if (!EqualString (title, old_title, false, false))
- SetMenuTitle (menu, title);
+ err = CopyMenuTitleAsCFString (menu, &old_title);
+ if (err == noErr)
+ {
+ if (CFStringCompare (title, old_title, 0) != kCFCompareEqualTo)
+ err = SetMenuTitleWithCFString (menu, title);
+ CFRelease (old_title);
+ }
+ else
+ err = SetMenuTitleWithCFString (menu, title);
#else /* !TARGET_API_MAC_CARBON */
if (!EqualString (title, (*menu)->menuData, false, false))
{
DeleteMenu (id);
DisposeMenu (menu);
menu = NewMenu (id, title);
- InsertMenu (menu, GetMenuHandle (id + 1) ? id + 1 : 0);
+ InsertMenu (menu, GetMenuRef (id + 1) ? id + 1 : 0);
title_changed_p = 1;
}
#endif /* !TARGET_API_MAC_CARBON */
}
else
{
+#if TARGET_API_MAC_CARBON
+ err = CreateNewMenu (id, 0, &menu);
+ if (err == noErr)
+ err = SetMenuTitleWithCFString (menu, title);
+#else
menu = NewMenu (id, title);
- InsertMenu (menu, 0);
+#endif
+ if (err == noErr)
+ {
+ InsertMenu (menu, 0);
#if !TARGET_API_MAC_CARBON
- title_changed_p = 1;
+ title_changed_p = 1;
#endif
+ }
}
+#if TARGET_API_MAC_CARBON
+ CFRelease (title);
+#endif
- if (wv->contents)
- submenu_id = fill_menu (menu, wv->contents, MAC_MENU_MENU_BAR_SUB,
- submenu_id);
+ if (err == noErr)
+ if (wv->contents)
+ submenu_id = fill_menu (menu, wv->contents, MAC_MENU_MENU_BAR_SUB,
+ submenu_id);
}
- if (id < min_menu_id[MAC_MENU_MENU_BAR + 1] && GetMenuHandle (id))
+ if (id < min_menu_id[MAC_MENU_MENU_BAR + 1] && GetMenuRef (id))
{
dispose_menus (MAC_MENU_MENU_BAR, id);
#if !TARGET_API_MAC_CARBON
@@ -3224,7 +3323,7 @@ dispose_menus (kind, id)
{
for (id = max (id, min_menu_id[kind]); id < min_menu_id[kind + 1]; id++)
{
- MenuHandle menu = GetMenuHandle (id);
+ MenuRef menu = GetMenuRef (id);
if (menu == NULL)
break;
@@ -3249,9 +3348,13 @@ DEFUN ("menu-or-popup-active-p", Fmenu_or_popup_active_p, Smenu_or_popup_active_
doc: /* Return t if a menu or popup dialog is active. */)
()
{
+#if TARGET_API_MAC_CARBON
+ return (popup_activated ()) ? Qt : Qnil;
+#else
/* Always return Qnil since menu selection functions do not return
until a selection has been made or cancelled. */
return Qnil;
+#endif
}
void
diff --git a/src/macselect.c b/src/macselect.c
index 5bd91a68582..f8038effd8b 100644
--- a/src/macselect.c
+++ b/src/macselect.c
@@ -25,22 +25,27 @@ Boston, MA 02110-1301, USA. */
#include "blockinput.h"
#include "keymap.h"
-#if !TARGET_API_MAC_CARBON
+#if TARGET_API_MAC_CARBON
+typedef ScrapRef Selection;
+#else /* !TARGET_API_MAC_CARBON */
+#include <Scrap.h>
#include <Endian.h>
-typedef int ScrapRef;
-typedef ResType ScrapFlavorType;
+typedef int Selection;
#endif /* !TARGET_API_MAC_CARBON */
-static OSStatus get_scrap_from_symbol P_ ((Lisp_Object, int, ScrapRef *));
-static ScrapFlavorType get_flavor_type_from_symbol P_ ((Lisp_Object));
-static int valid_scrap_target_type_p P_ ((Lisp_Object));
-static OSStatus clear_scrap P_ ((ScrapRef *));
-static OSStatus put_scrap_string P_ ((ScrapRef, Lisp_Object, Lisp_Object));
-static OSStatus put_scrap_private_timestamp P_ ((ScrapRef, unsigned long));
-static ScrapFlavorType scrap_has_target_type P_ ((ScrapRef, Lisp_Object));
-static Lisp_Object get_scrap_string P_ ((ScrapRef, Lisp_Object));
-static OSStatus get_scrap_private_timestamp P_ ((ScrapRef, unsigned long *));
-static Lisp_Object get_scrap_target_type_list P_ ((ScrapRef));
+static OSStatus mac_get_selection_from_symbol P_ ((Lisp_Object, int,
+ Selection *));
+static ScrapFlavorType get_flavor_type_from_symbol P_ ((Lisp_Object,
+ Selection));
+static int mac_valid_selection_target_p P_ ((Lisp_Object));
+static OSStatus mac_clear_selection P_ ((Selection *));
+static Lisp_Object mac_get_selection_ownership_info P_ ((Selection));
+static int mac_valid_selection_value_p P_ ((Lisp_Object, Lisp_Object));
+static OSStatus mac_put_selection_value P_ ((Selection, Lisp_Object,
+ Lisp_Object));
+static int mac_selection_has_target_p P_ ((Selection, Lisp_Object));
+static Lisp_Object mac_get_selection_value P_ ((Selection, Lisp_Object));
+static Lisp_Object mac_get_selection_target_list P_ ((Selection));
static void x_own_selection P_ ((Lisp_Object, Lisp_Object));
static Lisp_Object x_get_local_selection P_ ((Lisp_Object, Lisp_Object, int));
static Lisp_Object x_get_foreign_selection P_ ((Lisp_Object,
@@ -56,7 +61,7 @@ void init_service_handler P_ ((void));
Lisp_Object QPRIMARY, QSECONDARY, QTIMESTAMP, QTARGETS;
static Lisp_Object Vx_lost_selection_functions;
-/* Coding system for communicating with other programs via scrap. */
+/* Coding system for communicating with other programs via selections. */
static Lisp_Object Vselection_coding_system;
/* Coding system for the next communicating with other programs. */
@@ -70,23 +75,24 @@ static Lisp_Object Qforeign_selection;
extern unsigned long last_event_timestamp;
/* This is an association list whose elements are of the form
- ( SELECTION-NAME SELECTION-VALUE SELECTION-TIMESTAMP FRAME)
+ ( SELECTION-NAME SELECTION-VALUE SELECTION-TIMESTAMP FRAME OWNERSHIP-INFO)
SELECTION-NAME is a lisp symbol.
SELECTION-VALUE is the value that emacs owns for that selection.
It may be any kind of Lisp object.
SELECTION-TIMESTAMP is the time at which emacs began owning this selection,
as a cons of two 16-bit numbers (making a 32 bit time.)
FRAME is the frame for which we made the selection.
- If there is an entry in this alist, and the data for the flavor
- type SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP in the corresponding scrap
- (if exists) coincides with SELECTION-TIMESTAMP, then it can be
- assumed that Emacs owns that selection.
+ OWNERSHIP-INFO is a value saved when emacs owns for that selection.
+ If another application takes the ownership of that selection
+ later, then newly examined ownership info value should be
+ different from the saved one.
+ If there is an entry in this alist, the current ownership info for
+ the selection coincides with OWNERSHIP-INFO, then it can be
+ assumed that Emacs owns that selection.
The only (eq) parts of this list that are visible from Lisp are the
selection-values. */
static Lisp_Object Vselection_alist;
-#define SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP 'Etsp'
-
/* This is an alist whose CARs are selection-types and whose CDRs are
the names of Lisp functions to call to convert the given Emacs
selection value to a string representing the given selection type.
@@ -104,21 +110,22 @@ static Lisp_Object Qmac_scrap_name, Qmac_ostype;
static Lisp_Object Vmac_service_selection;
#endif
-/* Get a reference to the scrap corresponding to the symbol SYM. The
- reference is set to *SCRAP, and it becomes NULL if there's no
- corresponding scrap. Clear the scrap if CLEAR_P is non-zero. */
+/* Get a reference to the selection corresponding to the symbol SYM.
+ The reference is set to *SEL, and it becomes NULL if there's no
+ corresponding selection. Clear the selection if CLEAR_P is
+ non-zero. */
static OSStatus
-get_scrap_from_symbol (sym, clear_p, scrap)
+mac_get_selection_from_symbol (sym, clear_p, sel)
Lisp_Object sym;
int clear_p;
- ScrapRef *scrap;
+ Selection *sel;
{
OSStatus err = noErr;
Lisp_Object str = Fget (sym, Qmac_scrap_name);
if (!STRINGP (str))
- *scrap = NULL;
+ *sel = NULL;
else
{
#if TARGET_API_MAC_CARBON
@@ -127,19 +134,19 @@ get_scrap_from_symbol (sym, clear_p, scrap)
OptionBits options = (clear_p ? kScrapClearNamedScrap
: kScrapGetNamedScrap);
- err = GetScrapByName (scrap_name, options, scrap);
+ err = GetScrapByName (scrap_name, options, sel);
CFRelease (scrap_name);
#else /* !MAC_OSX */
if (clear_p)
err = ClearCurrentScrap ();
if (err == noErr)
- err = GetCurrentScrap (scrap);
+ err = GetCurrentScrap (sel);
#endif /* !MAC_OSX */
#else /* !TARGET_API_MAC_CARBON */
if (clear_p)
err = ZeroScrap ();
if (err == noErr)
- *scrap = 1;
+ *sel = 1;
#endif /* !TARGET_API_MAC_CARBON */
}
@@ -147,138 +154,154 @@ get_scrap_from_symbol (sym, clear_p, scrap)
}
/* Get a scrap flavor type from the symbol SYM. Return 0 if no
- corresponding flavor type. */
+ corresponding flavor type. If SEL is non-zero, the return value is
+ non-zero only when the SEL has the flavor type. */
static ScrapFlavorType
-get_flavor_type_from_symbol (sym)
+get_flavor_type_from_symbol (sym, sel)
Lisp_Object sym;
+ Selection sel;
{
Lisp_Object str = Fget (sym, Qmac_ostype);
+ ScrapFlavorType flavor_type;
if (STRINGP (str) && SBYTES (str) == 4)
- return EndianU32_BtoN (*((UInt32 *) SDATA (str)));
+ flavor_type = EndianU32_BtoN (*((UInt32 *) SDATA (str)));
+ else
+ flavor_type = 0;
+
+ if (flavor_type && sel)
+ {
+#if TARGET_API_MAC_CARBON
+ OSStatus err;
+ ScrapFlavorFlags flags;
+
+ err = GetScrapFlavorFlags (sel, flavor_type, &flags);
+ if (err != noErr)
+ flavor_type = 0;
+#else /* !TARGET_API_MAC_CARBON */
+ SInt32 size, offset;
+
+ size = GetScrap (NULL, flavor_type, &offset);
+ if (size < 0)
+ flavor_type = 0;
+#endif /* !TARGET_API_MAC_CARBON */
+ }
- return 0;
+ return flavor_type;
}
-/* Check if the symbol SYM has a corresponding scrap flavor type. */
+/* Check if the symbol SYM has a corresponding selection target type. */
static int
-valid_scrap_target_type_p (sym)
+mac_valid_selection_target_p (sym)
Lisp_Object sym;
{
- return get_flavor_type_from_symbol (sym) != 0;
+ return get_flavor_type_from_symbol (sym, 0) != 0;
}
-/* Clear the scrap whose reference is *SCRAP. */
+/* Clear the selection whose reference is *SEL. */
-static INLINE OSStatus
-clear_scrap (scrap)
- ScrapRef *scrap;
+static OSStatus
+mac_clear_selection (sel)
+ Selection *sel;
{
#if TARGET_API_MAC_CARBON
#ifdef MAC_OSX
- return ClearScrap (scrap);
+ return ClearScrap (sel);
#else
- return ClearCurrentScrap ();
+ OSStatus err;
+
+ err = ClearCurrentScrap ();
+ if (err == noErr)
+ err = GetCurrentScrap (sel);
+ return err;
#endif
#else /* !TARGET_API_MAC_CARBON */
return ZeroScrap ();
#endif /* !TARGET_API_MAC_CARBON */
}
-/* Put Lisp String STR to the scrap SCRAP. The target type is
- specified by TYPE. */
+/* Get ownership information for SEL. Emacs can detect a change of
+ the ownership by comparing saved and current values of the
+ ownership information. */
-static OSStatus
-put_scrap_string (scrap, type, str)
- ScrapRef scrap;
- Lisp_Object type, str;
+static Lisp_Object
+mac_get_selection_ownership_info (sel)
+ Selection sel;
{
- ScrapFlavorType flavor_type = get_flavor_type_from_symbol (type);
-
- if (flavor_type == 0)
- return noTypeErr;
-
#if TARGET_API_MAC_CARBON
- return PutScrapFlavor (scrap, flavor_type, kScrapFlavorMaskNone,
- SBYTES (str), SDATA (str));
+ return long_to_cons ((unsigned long) sel);
#else /* !TARGET_API_MAC_CARBON */
- return PutScrap (SBYTES (str), flavor_type, SDATA (str));
+ ScrapStuffPtr scrap_info = InfoScrap ();
+
+ return make_number (scrap_info->scrapCount);
#endif /* !TARGET_API_MAC_CARBON */
}
-/* Put TIMESTAMP to the scrap SCRAP. The timestamp is used for
- checking if the scrap is owned by the process. */
+/* Return non-zero if VALUE is a valid selection value for TARGET. */
-static INLINE OSStatus
-put_scrap_private_timestamp (scrap, timestamp)
- ScrapRef scrap;
- unsigned long timestamp;
+static int
+mac_valid_selection_value_p (value, target)
+ Lisp_Object value, target;
{
-#if TARGET_API_MAC_CARBON
- return PutScrapFlavor (scrap, SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP,
- kScrapFlavorMaskSenderOnly,
- sizeof (timestamp), &timestamp);
-#else /* !TARGET_API_MAC_CARBON */
- return PutScrap (sizeof (timestamp), SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP,
- &timestamp);
-#endif /* !TARGET_API_MAC_CARBON */
+ return STRINGP (value);
}
-/* Check if data for the target type TYPE is available in SCRAP. */
+/* Put Lisp Object VALUE to the selection SEL. The target type is
+ specified by TARGET. */
-static ScrapFlavorType
-scrap_has_target_type (scrap, type)
- ScrapRef scrap;
- Lisp_Object type;
+static OSStatus
+mac_put_selection_value (sel, target, value)
+ Selection sel;
+ Lisp_Object target, value;
{
- OSStatus err;
- ScrapFlavorType flavor_type = get_flavor_type_from_symbol (type);
+ ScrapFlavorType flavor_type = get_flavor_type_from_symbol (target, 0);
- if (flavor_type)
- {
-#if TARGET_API_MAC_CARBON
- ScrapFlavorFlags flags;
+ if (flavor_type == 0 || !STRINGP (value))
+ return noTypeErr;
- err = GetScrapFlavorFlags (scrap, flavor_type, &flags);
- if (err != noErr)
- flavor_type = 0;
+#if TARGET_API_MAC_CARBON
+ return PutScrapFlavor (sel, flavor_type, kScrapFlavorMaskNone,
+ SBYTES (value), SDATA (value));
#else /* !TARGET_API_MAC_CARBON */
- SInt32 size, offset;
-
- size = GetScrap (NULL, flavor_type, &offset);
- if (size < 0)
- flavor_type = 0;
+ return PutScrap (SBYTES (value), flavor_type, SDATA (value));
#endif /* !TARGET_API_MAC_CARBON */
- }
+}
- return flavor_type;
+/* Check if data for the target type TARGET is available in SEL. */
+
+static int
+mac_selection_has_target_p (sel, target)
+ Selection sel;
+ Lisp_Object target;
+{
+ return get_flavor_type_from_symbol (target, sel) != 0;
}
-/* Get data for the target type TYPE from SCRAP and create a Lisp
+/* Get data for the target type TARGET from SEL and create a Lisp
string. Return nil if failed to get data. */
static Lisp_Object
-get_scrap_string (scrap, type)
- ScrapRef scrap;
- Lisp_Object type;
+mac_get_selection_value (sel, target)
+ Selection sel;
+ Lisp_Object target;
{
OSStatus err;
Lisp_Object result = Qnil;
- ScrapFlavorType flavor_type = get_flavor_type_from_symbol (type);
+ ScrapFlavorType flavor_type = get_flavor_type_from_symbol (target, sel);
#if TARGET_API_MAC_CARBON
Size size;
if (flavor_type)
{
- err = GetScrapFlavorSize (scrap, flavor_type, &size);
+ err = GetScrapFlavorSize (sel, flavor_type, &size);
if (err == noErr)
{
do
{
result = make_uninit_string (size);
- err = GetScrapFlavorData (scrap, flavor_type,
+ err = GetScrapFlavorData (sel, flavor_type,
&size, SDATA (result));
if (err != noErr)
result = Qnil;
@@ -308,72 +331,25 @@ get_scrap_string (scrap, type)
return result;
}
-/* Get timestamp from the scrap SCRAP and set to *TIMPSTAMP. */
-
-static OSStatus
-get_scrap_private_timestamp (scrap, timestamp)
- ScrapRef scrap;
- unsigned long *timestamp;
-{
- OSStatus err = noErr;
-#if TARGET_API_MAC_CARBON
- ScrapFlavorFlags flags;
-
- err = GetScrapFlavorFlags (scrap, SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP, &flags);
- if (err == noErr)
- {
- if (!(flags & kScrapFlavorMaskSenderOnly))
- err = noTypeErr;
- else
- {
- Size size = sizeof (*timestamp);
-
- err = GetScrapFlavorData (scrap, SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP,
- &size, timestamp);
- if (err == noErr && size != sizeof (*timestamp))
- err = noTypeErr;
- }
- }
-#else /* !TARGET_API_MAC_CARBON */
- Handle handle;
- SInt32 size, offset;
-
- size = GetScrap (NULL, SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP, &offset);
- if (size == sizeof (*timestamp))
- {
- handle = NewHandle (size);
- HLock (handle);
- size = GetScrap (handle, SCRAP_FLAVOR_TYPE_EMACS_TIMESTAMP, &offset);
- if (size == sizeof (*timestamp))
- *timestamp = *((unsigned long *) *handle);
- DisposeHandle (handle);
- }
- if (size != sizeof (*timestamp))
- err = noTypeErr;
-#endif /* !TARGET_API_MAC_CARBON */
-
- return err;
-}
-
-/* Get the list of target types in SCRAP. The return value is a list
- of target type symbols possibly followed by scrap flavor type
+/* Get the list of target types in SEL. The return value is a list of
+ target type symbols possibly followed by scrap flavor type
strings. */
static Lisp_Object
-get_scrap_target_type_list (scrap)
- ScrapRef scrap;
+mac_get_selection_target_list (sel)
+ Selection sel;
{
- Lisp_Object result = Qnil, rest, target_type;
+ Lisp_Object result = Qnil, rest, target;
#if TARGET_API_MAC_CARBON
OSStatus err;
UInt32 count, i, type;
ScrapFlavorInfo *flavor_info = NULL;
Lisp_Object strings = Qnil;
- err = GetScrapFlavorCount (scrap, &count);
+ err = GetScrapFlavorCount (sel, &count);
if (err == noErr)
flavor_info = xmalloc (sizeof (ScrapFlavorInfo) * count);
- err = GetScrapFlavorInfoList (scrap, &count, flavor_info);
+ err = GetScrapFlavorInfoList (sel, &count, flavor_info);
if (err != noErr)
{
xfree (flavor_info);
@@ -387,11 +363,11 @@ get_scrap_target_type_list (scrap)
ScrapFlavorType flavor_type = 0;
if (CONSP (XCAR (rest))
- && (target_type = XCAR (XCAR (rest)),
- SYMBOLP (target_type))
- && (flavor_type = scrap_has_target_type (scrap, target_type)))
+ && (target = XCAR (XCAR (rest)),
+ SYMBOLP (target))
+ && (flavor_type = get_flavor_type_from_symbol (target, sel)))
{
- result = Fcons (target_type, result);
+ result = Fcons (target, result);
#if TARGET_API_MAC_CARBON
for (i = 0; i < count; i++)
if (flavor_info[i].flavorType == flavor_type)
@@ -428,9 +404,9 @@ x_own_selection (selection_name, selection_value)
Lisp_Object selection_name, selection_value;
{
OSStatus err;
- ScrapRef scrap;
+ Selection sel;
struct gcpro gcpro1, gcpro2;
- Lisp_Object rest, handler_fn, value, type;
+ Lisp_Object rest, handler_fn, value, target_type;
int count;
CHECK_SYMBOL (selection_name);
@@ -439,8 +415,8 @@ x_own_selection (selection_name, selection_value)
BLOCK_INPUT;
- err = get_scrap_from_symbol (selection_name, 1, &scrap);
- if (err == noErr && scrap)
+ err = mac_get_selection_from_symbol (selection_name, 1, &sel);
+ if (err == noErr && sel)
{
/* Don't allow a quit within the converter.
When the user types C-g, he would be surprised
@@ -451,49 +427,56 @@ x_own_selection (selection_name, selection_value)
for (rest = Vselection_converter_alist; CONSP (rest); rest = XCDR (rest))
{
if (!(CONSP (XCAR (rest))
- && (type = XCAR (XCAR (rest)),
- SYMBOLP (type))
- && valid_scrap_target_type_p (type)
+ && (target_type = XCAR (XCAR (rest)),
+ SYMBOLP (target_type))
+ && mac_valid_selection_target_p (target_type)
&& (handler_fn = XCDR (XCAR (rest)),
SYMBOLP (handler_fn))))
continue;
if (!NILP (handler_fn))
value = call3 (handler_fn, selection_name,
- type, selection_value);
+ target_type, selection_value);
+
+ if (NILP (value))
+ continue;
- if (STRINGP (value))
- err = put_scrap_string (scrap, type, value);
+ if (mac_valid_selection_value_p (value, target_type))
+ err = mac_put_selection_value (sel, target_type, value);
else if (CONSP (value)
- && EQ (XCAR (value), type)
- && STRINGP (XCDR (value)))
- err = put_scrap_string (scrap, type, XCDR (value));
+ && EQ (XCAR (value), target_type)
+ && mac_valid_selection_value_p (XCDR (value), target_type))
+ err = mac_put_selection_value (sel, target_type, XCDR (value));
}
unbind_to (count, Qnil);
-
- if (err == noErr)
- err = put_scrap_private_timestamp (scrap, last_event_timestamp);
}
UNBLOCK_INPUT;
UNGCPRO;
- if (scrap && err != noErr)
+ if (sel && err != noErr)
error ("Can't set selection");
/* Now update the local cache */
{
Lisp_Object selection_time;
Lisp_Object selection_data;
+ Lisp_Object ownership_info;
Lisp_Object prev_value;
selection_time = long_to_cons (last_event_timestamp);
+ if (sel)
+ ownership_info = mac_get_selection_ownership_info (sel);
+ else
+ ownership_info = Qnil; /* dummy value for local-only selection */
selection_data = Fcons (selection_name,
Fcons (selection_value,
Fcons (selection_time,
- Fcons (selected_frame, Qnil))));
+ Fcons (selected_frame,
+ Fcons (ownership_info,
+ Qnil)))));
prev_value = assq_no_quit (selection_name, Vselection_alist);
Vselection_alist = Fcons (selection_data, Vselection_alist);
@@ -504,7 +487,7 @@ x_own_selection (selection_name, selection_value)
if (!NILP (prev_value))
{
Lisp_Object rest; /* we know it's not the CAR, so it's easy. */
- for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
+ for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
if (EQ (prev_value, Fcar (XCDR (rest))))
{
XSETCDR (rest, Fcdr (XCDR (rest)));
@@ -574,29 +557,20 @@ x_get_local_selection (selection_symbol, target_type, local_request)
unbind_to (count, Qnil);
}
+ if (local_request)
+ return value;
+
/* Make sure this value is of a type that we could transmit
- to another X client. */
+ to another application. */
+ type = target_type;
check = value;
if (CONSP (value)
&& SYMBOLP (XCAR (value)))
type = XCAR (value),
check = XCDR (value);
- if (STRINGP (check)
- || VECTORP (check)
- || SYMBOLP (check)
- || INTEGERP (check)
- || NILP (value))
- return value;
- /* Check for a value that cons_to_long could handle. */
- else if (CONSP (check)
- && INTEGERP (XCAR (check))
- && (INTEGERP (XCDR (check))
- ||
- (CONSP (XCDR (check))
- && INTEGERP (XCAR (XCDR (check)))
- && NILP (XCDR (XCDR (check))))))
+ if (NILP (value) || mac_valid_selection_value_p (check, type))
return value;
signal_error ("Invalid data returned by selection-conversion function",
@@ -645,7 +619,7 @@ x_clear_frame_selections (f)
}
/* Delete elements after the beginning of Vselection_alist. */
- for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
+ for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
if (EQ (frame, Fcar (Fcdr (Fcdr (Fcdr (Fcar (XCDR (rest))))))))
{
/* Let random Lisp code notice that the selection has been stolen. */
@@ -676,22 +650,22 @@ x_get_foreign_selection (selection_symbol, target_type, time_stamp)
Lisp_Object selection_symbol, target_type, time_stamp;
{
OSStatus err;
- ScrapRef scrap;
+ Selection sel;
Lisp_Object result = Qnil;
BLOCK_INPUT;
- err = get_scrap_from_symbol (selection_symbol, 0, &scrap);
- if (err == noErr && scrap)
+ err = mac_get_selection_from_symbol (selection_symbol, 0, &sel);
+ if (err == noErr && sel)
{
if (EQ (target_type, QTARGETS))
{
- result = get_scrap_target_type_list (scrap);
+ result = mac_get_selection_target_list (sel);
result = Fvconcat (1, &result);
}
else
{
- result = get_scrap_string (scrap, target_type);
+ result = mac_get_selection_value (sel, target_type);
if (STRINGP (result))
Fput_text_property (make_number (0), make_number (SBYTES (result)),
Qforeign_selection, target_type, result);
@@ -770,7 +744,7 @@ Disowning it means there is no such selection. */)
Lisp_Object time;
{
OSStatus err;
- ScrapRef scrap;
+ Selection sel;
Lisp_Object local_selection_data;
check_mac ();
@@ -788,7 +762,7 @@ Disowning it means there is no such selection. */)
else
{
Lisp_Object rest;
- for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
+ for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
if (EQ (local_selection_data, Fcar (XCDR (rest))))
{
XSETCDR (rest, Fcdr (XCDR (rest)));
@@ -812,9 +786,9 @@ Disowning it means there is no such selection. */)
BLOCK_INPUT;
- err = get_scrap_from_symbol (selection, 0, &scrap);
- if (err == noErr && scrap)
- clear_scrap (&scrap);
+ err = mac_get_selection_from_symbol (selection, 0, &sel);
+ if (err == noErr && sel)
+ mac_clear_selection (&sel);
UNBLOCK_INPUT;
@@ -833,7 +807,7 @@ and t is the same as `SECONDARY'. */)
Lisp_Object selection;
{
OSStatus err;
- ScrapRef scrap;
+ Selection sel;
Lisp_Object result = Qnil, local_selection_data;
check_mac ();
@@ -848,15 +822,14 @@ and t is the same as `SECONDARY'. */)
BLOCK_INPUT;
- err = get_scrap_from_symbol (selection, 0, &scrap);
- if (err == noErr && scrap)
+ err = mac_get_selection_from_symbol (selection, 0, &sel);
+ if (err == noErr && sel)
{
- unsigned long timestamp;
+ Lisp_Object ownership_info;
- err = get_scrap_private_timestamp (scrap, &timestamp);
- if (err == noErr
- && (timestamp
- == cons_to_long (XCAR (XCDR (XCDR (local_selection_data))))))
+ ownership_info = XCAR (XCDR (XCDR (XCDR (XCDR (local_selection_data)))));
+ if (!NILP (Fequal (ownership_info,
+ mac_get_selection_ownership_info (sel))))
result = Qt;
}
else
@@ -878,7 +851,7 @@ and t is the same as `SECONDARY'. */)
Lisp_Object selection;
{
OSStatus err;
- ScrapRef scrap;
+ Selection sel;
Lisp_Object result = Qnil, rest;
/* It should be safe to call this before we have an Mac frame. */
@@ -893,12 +866,12 @@ and t is the same as `SECONDARY'. */)
BLOCK_INPUT;
- err = get_scrap_from_symbol (selection, 0, &scrap);
- if (err == noErr && scrap)
+ err = mac_get_selection_from_symbol (selection, 0, &sel);
+ if (err == noErr && sel)
for (rest = Vselection_converter_alist; CONSP (rest); rest = XCDR (rest))
{
if (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest)))
- && scrap_has_target_type (scrap, XCAR (XCAR (rest))))
+ && mac_selection_has_target_p (sel, XCAR (XCAR (rest))))
{
result = Qt;
break;
@@ -1623,16 +1596,19 @@ remove_drag_handler (window)
Services menu support
***********************************************************************/
#ifdef MAC_OSX
-void
-init_service_handler ()
+OSStatus
+install_service_handler ()
{
static const EventTypeSpec specs[] =
{{kEventClassService, kEventServiceGetTypes},
{kEventClassService, kEventServiceCopy},
{kEventClassService, kEventServicePaste},
{kEventClassService, kEventServicePerform}};
- InstallApplicationEventHandler (NewEventHandlerUPP (mac_handle_service_event),
- GetEventTypeCount (specs), specs, NULL, NULL);
+
+ return InstallApplicationEventHandler (NewEventHandlerUPP
+ (mac_handle_service_event),
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
}
extern OSStatus mac_store_service_event P_ ((EventRef));
@@ -1697,7 +1673,7 @@ mac_handle_service_event (call_ref, event, data)
if (!SYMBOLP (Vmac_service_selection))
err = eventNotHandledErr;
else
- err = get_scrap_from_symbol (Vmac_service_selection, 0, &cur_scrap);
+ err = mac_get_selection_from_symbol (Vmac_service_selection, 0, &cur_scrap);
if (!(err == noErr && cur_scrap))
return eventNotHandledErr;
@@ -1716,7 +1692,7 @@ mac_handle_service_event (call_ref, event, data)
rest = XCDR (rest))
if (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest)))
&& (flavor_type =
- get_flavor_type_from_symbol (XCAR (XCAR (rest)))))
+ get_flavor_type_from_symbol (XCAR (XCAR (rest)), 0)))
{
type = CreateTypeStringWithOSType (flavor_type);
if (type)
@@ -1801,14 +1777,15 @@ mac_handle_service_event (call_ref, event, data)
NULL, sizeof (ScrapRef), NULL,
&specific_scrap);
if (err == noErr)
- err = clear_scrap (&cur_scrap);
+ err = mac_clear_selection (&cur_scrap);
if (err == noErr)
for (rest = Vselection_converter_alist; CONSP (rest);
rest = XCDR (rest))
{
if (! (CONSP (XCAR (rest)) && SYMBOLP (XCAR (XCAR (rest)))))
continue;
- flavor_type = get_flavor_type_from_symbol (XCAR (XCAR (rest)));
+ flavor_type = get_flavor_type_from_symbol (XCAR (XCAR (rest)),
+ specific_scrap);
if (flavor_type == 0)
continue;
err = copy_scrap_flavor_data (specific_scrap, cur_scrap,
diff --git a/src/macterm.c b/src/macterm.c
index 9bc96e492d3..1bf0cd0e707 100644
--- a/src/macterm.c
+++ b/src/macterm.c
@@ -35,12 +35,7 @@ Boston, MA 02110-1301, USA. */
#include <alloca.h>
#endif
-#if TARGET_API_MAC_CARBON
-/* USE_CARBON_EVENTS determines if the Carbon Event Manager is used to
- obtain events from the event queue. If set to 0, WaitNextEvent is
- used instead. */
-#define USE_CARBON_EVENTS 1
-#else /* not TARGET_API_MAC_CARBON */
+#if !TARGET_API_MAC_CARBON
#include <Quickdraw.h>
#include <ToolUtils.h>
#include <Sound.h>
@@ -231,14 +226,14 @@ void x_raise_frame P_ ((struct frame *));
void x_set_window_size P_ ((struct frame *, int, int, int));
void x_wm_set_window_state P_ ((struct frame *, int));
void x_wm_set_icon_pixmap P_ ((struct frame *, int));
-void mac_initialize P_ ((void));
+static void mac_initialize P_ ((void));
static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
static int x_compute_min_glyph_bounds P_ ((struct frame *));
static void x_update_end P_ ((struct frame *));
static void XTframe_up_to_date P_ ((struct frame *));
-static void XTset_terminal_modes P_ ((void));
-static void XTreset_terminal_modes P_ ((void));
-static void x_clear_frame P_ ((void));
+static void XTset_terminal_modes P_ ((struct terminal *));
+static void XTreset_terminal_modes P_ ((struct terminal *));
+static void x_clear_frame P_ ((struct frame *));
static void frame_highlight P_ ((struct frame *));
static void frame_unhighlight P_ ((struct frame *));
static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
@@ -263,9 +258,11 @@ static void x_scroll_bar_report_motion P_ ((struct frame **, Lisp_Object *,
Lisp_Object *, Lisp_Object *,
unsigned long *));
-static int is_emacs_window P_ ((WindowPtr));
+static int is_emacs_window P_ ((WindowRef));
static XCharStruct *mac_per_char_metric P_ ((XFontStruct *, XChar2b *, int));
static void XSetFont P_ ((Display *, GC, XFontStruct *));
+static struct terminal *mac_create_terminal P_ ((struct mac_display_info *dpyinfo));
+
#define GC_FORE_COLOR(gc) (&(gc)->fore_color)
#define GC_BACK_COLOR(gc) (&(gc)->back_color)
@@ -416,7 +413,8 @@ mac_prepare_for_quickdraw (f)
static RgnHandle saved_port_clip_region = NULL;
static void
-mac_begin_clip (gc)
+mac_begin_clip (f, gc)
+ struct frame *f;
GC gc;
{
static RgnHandle new_region = NULL;
@@ -426,6 +424,11 @@ mac_begin_clip (gc)
if (new_region == NULL)
new_region = NewRgn ();
+#if USE_CG_DRAWING
+ mac_prepare_for_quickdraw (f);
+#endif
+ SetPortWindowPort (FRAME_MAC_WINDOW (f));
+
if (gc->n_clip_rects)
{
GetClip (saved_port_clip_region);
@@ -445,15 +448,6 @@ mac_end_clip (gc)
/* X display function emulation */
-void
-XFreePixmap (display, pixmap)
- Display *display; /* not used */
- Pixmap pixmap;
-{
- DisposeGWorld (pixmap);
-}
-
-
/* Mac version of XDrawLine. */
static void
@@ -495,11 +489,8 @@ mac_draw_line (f, gc, x1, y1, x2, y2)
x2--;
}
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
+ mac_begin_clip (f, gc);
RGBForeColor (GC_FORE_COLOR (gc));
-
- mac_begin_clip (gc);
MoveTo (x1, y1);
LineTo (x2, y2);
mac_end_clip (gc);
@@ -555,25 +546,25 @@ mac_erase_rectangle (f, gc, x, y, width, height)
unsigned int width, height;
{
#if USE_CG_DRAWING
- CGContextRef context;
+ {
+ CGContextRef context;
- context = mac_begin_cg_clip (f, gc);
- CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
- CGContextFillRect (context, CGRectMake (x, y, width, height));
- mac_end_cg_clip (f);
+ context = mac_begin_cg_clip (f, gc);
+ CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
+ CGContextFillRect (context, CGRectMake (x, y, width, height));
+ mac_end_cg_clip (f);
+ }
#else
- Rect r;
-
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
- RGBBackColor (GC_BACK_COLOR (gc));
- SetRect (&r, x, y, x + width, y + height);
-
- mac_begin_clip (gc);
- EraseRect (&r);
- mac_end_clip (gc);
+ {
+ Rect r;
- RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+ mac_begin_clip (f, gc);
+ RGBBackColor (GC_BACK_COLOR (gc));
+ SetRect (&r, x, y, x + width, y + height);
+ EraseRect (&r);
+ RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+ mac_end_clip (gc);
+ }
#endif
}
@@ -596,15 +587,17 @@ mac_clear_window (f)
struct frame *f;
{
#if USE_CG_DRAWING
- CGContextRef context;
- GC gc = FRAME_NORMAL_GC (f);
-
- context = mac_begin_cg_clip (f, NULL);
- CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
- CGContextFillRect (context, CGRectMake (0, 0, FRAME_PIXEL_WIDTH (f),
- FRAME_PIXEL_HEIGHT (f)));
- mac_end_cg_clip (f);
-#else
+ {
+ CGContextRef context;
+ GC gc = FRAME_NORMAL_GC (f);
+
+ context = mac_begin_cg_clip (f, NULL);
+ CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
+ CGContextFillRect (context, CGRectMake (0, 0, FRAME_PIXEL_WIDTH (f),
+ FRAME_PIXEL_HEIGHT (f)));
+ mac_end_cg_clip (f);
+ }
+#else /* !USE_CG_DRAWING */
SetPortWindowPort (FRAME_MAC_WINDOW (f));
RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
@@ -678,13 +671,10 @@ mac_draw_bitmap (f, gc, x, y, width, height, bits, overlay_p)
bitmap.baseAddr = (char *)bits;
SetRect (&(bitmap.bounds), 0, 0, width, height);
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
+ mac_begin_clip (f, gc);
RGBForeColor (GC_FORE_COLOR (gc));
RGBBackColor (GC_BACK_COLOR (gc));
SetRect (&r, x, y, x + width, y + height);
-
- mac_begin_clip (gc);
#if TARGET_API_MAC_CARBON
{
CGrafPtr port;
@@ -699,9 +689,8 @@ mac_draw_bitmap (f, gc, x, y, width, height, bits, overlay_p)
CopyBits (&bitmap, &(FRAME_MAC_WINDOW (f)->portBits), &(bitmap.bounds), &r,
overlay_p ? srcOr : srcCopy, 0);
#endif /* not TARGET_API_MAC_CARBON */
- mac_end_clip (gc);
-
RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+ mac_end_clip (gc);
}
#endif /* !USE_CG_DRAWING */
@@ -752,8 +741,8 @@ mac_free_bitmap (bitmap)
Pixmap
XCreatePixmap (display, w, width, height, depth)
- Display *display; /* not used */
- WindowPtr w;
+ Display *display;
+ WindowRef w;
unsigned int width, height;
unsigned int depth;
{
@@ -781,8 +770,8 @@ XCreatePixmap (display, w, width, height, depth)
Pixmap
XCreatePixmapFromBitmapData (display, w, data, width, height, fg, bg, depth)
- Display *display; /* not used */
- WindowPtr w;
+ Display *display;
+ WindowRef w;
char *data;
unsigned int width, height;
unsigned long fg, bg;
@@ -792,7 +781,7 @@ XCreatePixmapFromBitmapData (display, w, data, width, height, fg, bg, depth)
BitMap bitmap;
CGrafPtr old_port;
GDHandle old_gdh;
- static GC gc = NULL; /* not reentrant */
+ static GC gc = NULL;
if (gc == NULL)
gc = XCreateGC (display, w, 0, NULL);
@@ -824,6 +813,15 @@ XCreatePixmapFromBitmapData (display, w, data, width, height, fg, bg, depth)
}
+void
+XFreePixmap (display, pixmap)
+ Display *display;
+ Pixmap pixmap;
+{
+ DisposeGWorld (pixmap);
+}
+
+
/* Mac replacement for XFillRectangle. */
static void
@@ -843,12 +841,9 @@ mac_fill_rectangle (f, gc, x, y, width, height)
#else
Rect r;
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
+ mac_begin_clip (f, gc);
RGBForeColor (GC_FORE_COLOR (gc));
SetRect (&r, x, y, x + width, y + height);
-
- mac_begin_clip (gc);
PaintRect (&r); /* using foreground color of gc */
mac_end_clip (gc);
#endif
@@ -875,18 +870,34 @@ mac_draw_rectangle (f, gc, x, y, width, height)
#else
Rect r;
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
+ mac_begin_clip (f, gc);
RGBForeColor (GC_FORE_COLOR (gc));
SetRect (&r, x, y, x + width + 1, y + height + 1);
-
- mac_begin_clip (gc);
FrameRect (&r); /* using foreground color of gc */
mac_end_clip (gc);
#endif
}
+static void
+mac_invert_rectangle (f, x, y, width, height)
+ struct frame *f;
+ int x, y;
+ unsigned int width, height;
+{
+ Rect r;
+
+#if USE_CG_DRAWING
+ mac_prepare_for_quickdraw (f);
+#endif
+ SetPortWindowPort (FRAME_MAC_WINDOW (f));
+
+ SetRect (&r, x, y, x + width, y + height);
+
+ InvertRect (&r);
+}
+
+
#if USE_ATSUI
static OSStatus
atsu_get_text_layout_with_text_ptr (text, text_length, style, text_layout)
@@ -896,7 +907,7 @@ atsu_get_text_layout_with_text_ptr (text, text_length, style, text_layout)
ATSUTextLayout *text_layout;
{
OSStatus err;
- static ATSUTextLayout saved_text_layout = NULL; /* not reentrant */
+ static ATSUTextLayout saved_text_layout = NULL;
if (saved_text_layout == NULL)
{
@@ -923,7 +934,6 @@ atsu_get_text_layout_with_text_ptr (text, text_length, style, text_layout)
err = ATSUSetLayoutControls (saved_text_layout,
sizeof (tags) / sizeof (tags[0]),
tags, sizes, values);
- /* XXX: Should we do this? */
if (err == noErr)
err = ATSUSetTransientFontMatching (saved_text_layout, true);
}
@@ -942,224 +952,224 @@ atsu_get_text_layout_with_text_ptr (text, text_length, style, text_layout)
*text_layout = saved_text_layout;
return err;
}
-#endif
-
-
-static void
-mac_invert_rectangle (f, x, y, width, height)
- struct frame *f;
- int x, y;
- unsigned int width, height;
-{
- Rect r;
-
-#if USE_CG_DRAWING
- mac_prepare_for_quickdraw (f);
-#endif
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
- SetRect (&r, x, y, x + width, y + height);
-
- InvertRect (&r);
-}
static void
-mac_draw_string_common (f, gc, x, y, buf, nchars, bg_width,
- overstrike_p, bytes_per_char)
+mac_draw_image_string_atsui (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, overstrike_p, bytes_per_char;
{
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
-
-#if USE_ATSUI
- if (GC_FONT (gc)->mac_style)
- {
- OSStatus err;
- ATSUTextLayout text_layout;
+ OSStatus err;
+ ATSUTextLayout text_layout;
- xassert (bytes_per_char == 2);
+ xassert (bytes_per_char == 2);
#ifndef WORDS_BIG_ENDIAN
- {
- int i;
- UniChar *text = (UniChar *)buf;
+ {
+ int i;
+ UniChar *text = (UniChar *)buf;
- for (i = 0; i < nchars; i++)
- text[i] = EndianU16_BtoN (text[i]);
- }
+ for (i = 0; i < nchars; i++)
+ text[i] = EndianU16_BtoN (text[i]);
+ }
#endif
- err = atsu_get_text_layout_with_text_ptr ((ConstUniCharArrayPtr)buf,
- nchars,
- GC_FONT (gc)->mac_style,
- &text_layout);
- if (err != noErr)
- return;
+ err = atsu_get_text_layout_with_text_ptr ((ConstUniCharArrayPtr)buf,
+ nchars,
+ GC_FONT (gc)->mac_style,
+ &text_layout);
+ if (err != noErr)
+ return;
#ifdef MAC_OSX
- if (!mac_use_core_graphics)
- {
-#endif
-#if USE_CG_DRAWING
- mac_prepare_for_quickdraw (f);
+ if (!mac_use_core_graphics)
+ {
#endif
- mac_begin_clip (gc);
- RGBForeColor (GC_FORE_COLOR (gc));
- if (bg_width)
- {
- Rect r;
+ mac_begin_clip (f, gc);
+ RGBForeColor (GC_FORE_COLOR (gc));
+ if (bg_width)
+ {
+ Rect r;
- SetRect (&r, x, y - FONT_BASE (GC_FONT (gc)),
- x + bg_width, y + FONT_DESCENT (GC_FONT (gc)));
- RGBBackColor (GC_BACK_COLOR (gc));
- EraseRect (&r);
- RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
- }
- MoveTo (x, y);
+ SetRect (&r, x, y - FONT_BASE (GC_FONT (gc)),
+ x + bg_width, y + FONT_DESCENT (GC_FONT (gc)));
+ RGBBackColor (GC_BACK_COLOR (gc));
+ EraseRect (&r);
+ RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+ }
+ MoveTo (x, y);
+ ATSUDrawText (text_layout,
+ kATSUFromTextBeginning, kATSUToTextEnd,
+ kATSUUseGrafPortPenLoc, kATSUUseGrafPortPenLoc);
+ if (overstrike_p)
+ {
+ MoveTo (x + 1, y);
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
}
- else
- {
- CGrafPtr port;
- static CGContextRef context;
- float port_height = FRAME_PIXEL_HEIGHT (f);
- static const ATSUAttributeTag tags[] = {kATSUCGContextTag};
- static const ByteCount sizes[] = {sizeof (CGContextRef)};
- static const ATSUAttributeValuePtr values[] = {&context};
+ mac_end_clip (gc);
+#ifdef MAC_OSX
+ }
+ else
+ {
+ static CGContextRef context;
+ float port_height = FRAME_PIXEL_HEIGHT (f);
+ static const ATSUAttributeTag tags[] = {kATSUCGContextTag};
+ static const ByteCount sizes[] = {sizeof (CGContextRef)};
+ static const ATSUAttributeValuePtr values[] = {&context};
#if USE_CG_DRAWING
- context = mac_begin_cg_clip (f, gc);
+ context = mac_begin_cg_clip (f, gc);
#else
- GetPort (&port);
- QDBeginCGContext (port, &context);
- if (gc->n_clip_rects || bg_width)
- {
- CGContextTranslateCTM (context, 0, port_height);
- CGContextScaleCTM (context, 1, -1);
- if (gc->n_clip_rects)
- CGContextClipToRects (context, gc->clip_rects,
- gc->n_clip_rects);
-#endif
- if (bg_width)
- {
- CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
- CGContextFillRect
- (context,
- CGRectMake (x, y - FONT_BASE (GC_FONT (gc)),
- bg_width, FONT_HEIGHT (GC_FONT (gc))));
- }
- CGContextScaleCTM (context, 1, -1);
- CGContextTranslateCTM (context, 0, -port_height);
-#if !USE_CG_DRAWING
- }
+ CGrafPtr port;
+
+ GetPort (&port);
+ QDBeginCGContext (port, &context);
+ if (gc->n_clip_rects || bg_width)
+ {
+ CGContextTranslateCTM (context, 0, port_height);
+ CGContextScaleCTM (context, 1, -1);
+ if (gc->n_clip_rects)
+ CGContextClipToRects (context, gc->clip_rects,
+ gc->n_clip_rects);
#endif
- CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc);
- err = ATSUSetLayoutControls (text_layout,
- sizeof (tags) / sizeof (tags[0]),
- tags, sizes, values);
- if (err == noErr)
+ if (bg_width)
{
- 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));
+ CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
+ CGContextFillRect (context,
+ CGRectMake (x, y - FONT_BASE (GC_FONT (gc)),
+ bg_width,
+ FONT_HEIGHT (GC_FONT (gc))));
}
+ CGContextScaleCTM (context, 1, -1);
+ CGContextTranslateCTM (context, 0, -port_height);
+#if !USE_CG_DRAWING
+ }
+#endif
+ CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc);
+ err = ATSUSetLayoutControls (text_layout,
+ sizeof (tags) / sizeof (tags[0]),
+ tags, sizes, values);
+ if (err == noErr)
+ {
+ 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;
+ mac_end_cg_clip (f);
+ context = NULL;
#else
- CGContextSynchronize (context);
- QDEndCGContext (port, &context);
+ CGContextSynchronize (context);
+ QDEndCGContext (port, &context);
#endif
#if 0
- /* This doesn't work on Mac OS X 10.1. */
- ATSUClearLayoutControls (text_layout,
- sizeof (tags) / sizeof (tags[0]), tags);
+ /* This doesn't work on Mac OS X 10.1. */
+ ATSUClearLayoutControls (text_layout,
+ sizeof (tags) / sizeof (tags[0]), tags);
#else
- ATSUSetLayoutControls (text_layout,
- sizeof (tags) / sizeof (tags[0]),
- tags, sizes, values);
+ ATSUSetLayoutControls (text_layout,
+ sizeof (tags) / sizeof (tags[0]),
+ tags, sizes, values);
#endif
- }
-#endif /* MAC_OSX */
}
- else
+#endif /* MAC_OSX */
+}
#endif /* USE_ATSUI */
- {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
- UInt32 savedFlags;
- if (mac_use_core_graphics)
- savedFlags = SwapQDTextFlags (kQDUseCGTextRendering);
+
+static void
+mac_draw_image_string_qd (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, overstrike_p, bytes_per_char;
+{
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+ UInt32 savedFlags;
#endif
-#if USE_CG_DRAWING
- mac_prepare_for_quickdraw (f);
+
+ mac_begin_clip (f, gc);
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+ if (mac_use_core_graphics)
+ savedFlags = SwapQDTextFlags (kQDUseCGTextRendering);
#endif
- mac_begin_clip (gc);
- RGBForeColor (GC_FORE_COLOR (gc));
+ RGBForeColor (GC_FORE_COLOR (gc));
#ifdef MAC_OS8
- if (bg_width)
- {
- RGBBackColor (GC_BACK_COLOR (gc));
- TextMode (srcCopy);
- }
- else
- TextMode (srcOr);
+ if (bg_width)
+ {
+ RGBBackColor (GC_BACK_COLOR (gc));
+ TextMode (srcCopy);
+ }
+ else
+ TextMode (srcOr);
#else
- /* We prefer not to use srcCopy text transfer mode on Mac OS X
- because:
- - Screen is double-buffered. (In srcCopy mode, a text is
- drawn into an offscreen graphics world first. So
- performance gain cannot be expected.)
- - It lowers rendering quality.
- - Some fonts leave garbage on cursor movement. */
- if (bg_width)
- {
- Rect r;
+ /* We prefer not to use srcCopy text transfer mode on Mac OS X
+ because:
+ - Screen is double-buffered. (In srcCopy mode, a text is drawn
+ into an offscreen graphics world first. So performance gain
+ cannot be expected.)
+ - It lowers rendering quality.
+ - Some fonts leave garbage on cursor movement. */
+ if (bg_width)
+ {
+ Rect r;
- RGBBackColor (GC_BACK_COLOR (gc));
- SetRect (&r, x, y - FONT_BASE (GC_FONT (gc)),
- x + bg_width, y + FONT_DESCENT (GC_FONT (gc)));
- EraseRect (&r);
- }
- TextMode (srcOr);
+ RGBBackColor (GC_BACK_COLOR (gc));
+ SetRect (&r, x, y - FONT_BASE (GC_FONT (gc)),
+ x + bg_width, y + FONT_DESCENT (GC_FONT (gc)));
+ EraseRect (&r);
+ }
+ TextMode (srcOr);
#endif
- TextFont (GC_FONT (gc)->mac_fontnum);
- TextSize (GC_FONT (gc)->mac_fontsize);
- TextFace (GC_FONT (gc)->mac_fontface);
- MoveTo (x, y);
+ TextFont (GC_FONT (gc)->mac_fontnum);
+ TextSize (GC_FONT (gc)->mac_fontsize);
+ 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 (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);
+ }
+ if (bg_width)
+ RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+ mac_end_clip (gc);
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
- if (mac_use_core_graphics)
- SwapQDTextFlags(savedFlags);
+ if (mac_use_core_graphics)
+ SwapQDTextFlags(savedFlags);
#endif
- }
+}
+
+
+static INLINE void
+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, overstrike_p, bytes_per_char;
+{
+#if USE_ATSUI
+ if (GC_FONT (gc)->mac_style)
+ mac_draw_image_string_atsui (f, gc, x, y, buf, nchars, bg_width,
+ overstrike_p, bytes_per_char);
+ else
+#endif /* USE_ATSUI */
+ mac_draw_image_string_qd (f, gc, x, y, buf, nchars, bg_width,
+ overstrike_p, bytes_per_char);
}
@@ -1376,7 +1386,6 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
XChar2b *buf;
int nchars, bg_width, overstrike_p;
{
- CGrafPtr port;
float port_height, gx, gy;
int i;
CGContextRef context;
@@ -1386,7 +1395,6 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
if (!mac_use_core_graphics || GC_FONT (gc)->cg_font == NULL)
return 0;
- port = GetWindowPort (FRAME_MAC_WINDOW (f));
port_height = FRAME_PIXEL_HEIGHT (f);
gx = x;
gy = port_height - y;
@@ -1407,7 +1415,7 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
#if USE_CG_DRAWING
context = mac_begin_cg_clip (f, gc);
#else
- QDBeginCGContext (port, &context);
+ QDBeginCGContext (GetWindowPort (FRAME_MAC_WINDOW (f)), &context);
if (gc->n_clip_rects || bg_width)
{
CGContextTranslateCTM (context, 0, port_height);
@@ -1447,7 +1455,7 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
}
}
#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
- else
+ else /* CGContextShowGlyphsWithAdvances == NULL */
#endif
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 */
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 || MAC_OS_X_VERSION_MIN_REQUIRED == 1020
@@ -1465,7 +1473,7 @@ mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
mac_end_cg_clip (f);
#else
CGContextSynchronize (context);
- QDEndCGContext (port, &context);
+ QDEndCGContext (GetWindowPort (FRAME_MAC_WINDOW (f)), &context);
#endif
return 1;
@@ -1487,7 +1495,7 @@ mac_copy_area (src, f, gc, src_x, src_y, width, height, dest_x, dest_y)
{
Rect src_r, dest_r;
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
+ mac_begin_clip (f, gc);
SetRect (&src_r, src_x, src_y, src_x + width, src_y + height);
SetRect (&dest_r, dest_x, dest_y, dest_x + width, dest_y + height);
@@ -1495,7 +1503,6 @@ mac_copy_area (src, f, gc, src_x, src_y, width, height, dest_x, dest_y)
ForeColor (blackColor);
BackColor (whiteColor);
- mac_begin_clip (gc);
LockPixels (GetGWorldPixMap (src));
#if TARGET_API_MAC_CARBON
{
@@ -1513,9 +1520,10 @@ mac_copy_area (src, f, gc, src_x, src_y, width, height, dest_x, dest_y)
&src_r, &dest_r, srcCopy, 0);
#endif /* not TARGET_API_MAC_CARBON */
UnlockPixels (GetGWorldPixMap (src));
- mac_end_clip (gc);
RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+
+ mac_end_clip (gc);
}
@@ -1531,7 +1539,7 @@ mac_copy_area_with_mask (src, mask, f, gc, src_x, src_y,
{
Rect src_r, dest_r;
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
+ mac_begin_clip (f, gc);
SetRect (&src_r, src_x, src_y, src_x + width, src_y + height);
SetRect (&dest_r, dest_x, dest_y, dest_x + width, dest_y + height);
@@ -1539,7 +1547,6 @@ mac_copy_area_with_mask (src, mask, f, gc, src_x, src_y,
ForeColor (blackColor);
BackColor (whiteColor);
- mac_begin_clip (gc);
LockPixels (GetGWorldPixMap (src));
LockPixels (GetGWorldPixMap (mask));
#if TARGET_API_MAC_CARBON
@@ -1559,9 +1566,10 @@ mac_copy_area_with_mask (src, mask, f, gc, src_x, src_y,
#endif /* not TARGET_API_MAC_CARBON */
UnlockPixels (GetGWorldPixMap (mask));
UnlockPixels (GetGWorldPixMap (src));
- mac_end_clip (gc);
RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+
+ mac_end_clip (gc);
}
#endif /* !USE_CG_DRAWING */
@@ -1590,9 +1598,9 @@ mac_scroll_area (f, gc, src_x, src_y, width, height, dest_x, dest_y)
DisposeRgn (dummy);
#else /* not TARGET_API_MAC_CARBON */
Rect src_r, dest_r;
- WindowPtr w = FRAME_MAC_WINDOW (f);
+ WindowRef w = FRAME_MAC_WINDOW (f);
- SetPort (w);
+ mac_begin_clip (f, gc);
SetRect (&src_r, src_x, src_y, src_x + width, src_y + height);
SetRect (&dest_r, dest_x, dest_y, dest_x + width, dest_y + height);
@@ -1601,11 +1609,11 @@ mac_scroll_area (f, gc, src_x, src_y, width, height, dest_x, dest_y)
color mapping in CopyBits. Otherwise, it will be slow. */
ForeColor (blackColor);
BackColor (whiteColor);
- mac_begin_clip (gc);
CopyBits (&(w->portBits), &(w->portBits), &src_r, &dest_r, srcCopy, 0);
- mac_end_clip (gc);
RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
+
+ mac_end_clip (gc);
#endif /* not TARGET_API_MAC_CARBON */
}
@@ -1850,7 +1858,7 @@ mac_reset_clip_rectangles (display, gc)
void
XSetWindowBackground (display, w, color)
Display *display;
- WindowPtr w;
+ WindowRef w;
unsigned long color;
{
#if !TARGET_API_MAC_CARBON
@@ -2188,6 +2196,81 @@ x_draw_fringe_bitmap (w, row, p)
Display *display = FRAME_MAC_DISPLAY (f);
struct face *face = p->face;
int rowY;
+ int overlay_p = p->overlay_p;
+
+#ifdef MAC_OSX
+ if (!overlay_p)
+ {
+ int bx = p->bx, by = p->by, nx = p->nx, ny = p->ny;
+
+#if 0 /* MAC_TODO: stipple */
+ /* In case the same realized face is used for fringes and
+ for something displayed in the text (e.g. face `region' on
+ mono-displays, the fill style may have been changed to
+ FillSolid in x_draw_glyph_string_background. */
+ if (face->stipple)
+ XSetFillStyle (FRAME_X_DISPLAY (f), face->gc, FillOpaqueStippled);
+ else
+ XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background);
+#endif
+
+ /* If the fringe is adjacent to the left (right) scroll bar of a
+ leftmost (rightmost, respectively) window, then extend its
+ background to the gap between the fringe and the bar. */
+ if ((WINDOW_LEFTMOST_P (w)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
+ || (WINDOW_RIGHTMOST_P (w)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w)))
+ {
+ int sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w);
+
+ if (sb_width > 0)
+ {
+ int left = WINDOW_SCROLL_BAR_AREA_X (w);
+ int width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w)
+ * FRAME_COLUMN_WIDTH (f));
+
+ if (bx < 0
+ && (left + width == p->x
+ || p->x + p->wd == left))
+ {
+ /* Bitmap fills the fringe and we need background
+ extension. */
+ int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);
+
+ bx = p->x;
+ nx = p->wd;
+ by = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
+ row->y));
+ ny = row->visible_height;
+ }
+
+ if (bx >= 0)
+ {
+ if (left + width == bx)
+ {
+ bx = left + sb_width;
+ nx += width - sb_width;
+ }
+ else if (bx + nx == left)
+ nx += width - sb_width;
+ }
+ }
+ }
+
+ if (bx >= 0)
+ {
+ mac_erase_rectangle (f, face->gc, bx, by, nx, ny);
+ /* The fringe background has already been filled. */
+ overlay_p = 1;
+ }
+
+#if 0 /* MAC_TODO: stipple */
+ if (!face->stipple)
+ XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground);
+#endif
+ }
+#endif /* MAC_OSX */
/* Must clip because of partially visible lines. */
rowY = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
@@ -2206,6 +2289,7 @@ x_draw_fringe_bitmap (w, row, p)
else
x_clip_to_row (w, row, -1, face->gc);
+#ifndef MAC_OSX
if (p->bx >= 0 && !p->overlay_p)
{
#if 0 /* MAC_TODO: stipple */
@@ -2226,6 +2310,7 @@ x_draw_fringe_bitmap (w, row, p)
XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground);
#endif
}
+#endif /* !MAC_OSX */
if (p->which
#if USE_CG_DRAWING
@@ -2243,10 +2328,10 @@ x_draw_fringe_bitmap (w, row, p)
: face->foreground));
#if USE_CG_DRAWING
mac_draw_cg_image (fringe_bmp[p->which], f, face->gc, 0, p->dh,
- p->wd, p->h, p->x, p->y, p->overlay_p);
+ p->wd, p->h, p->x, p->y, overlay_p);
#else
mac_draw_bitmap (f, face->gc, p->x, p->y,
- p->wd, p->h, p->bits + p->dh, p->overlay_p);
+ p->wd, p->h, p->bits + p->dh, overlay_p);
#endif
XSetForeground (display, face->gc, gcv.foreground);
}
@@ -2315,7 +2400,7 @@ mac_destroy_fringe_bitmap (which)
rarely happens). */
static void
-XTset_terminal_modes ()
+XTset_terminal_modes (struct terminal *t)
{
}
@@ -2323,7 +2408,7 @@ XTset_terminal_modes ()
the windows go away, and suspending requires no action. */
static void
-XTreset_terminal_modes ()
+XTreset_terminal_modes (struct terminal *t)
{
}
@@ -2883,7 +2968,7 @@ x_draw_glyph_string_foreground (s)
of S to the right of that box line. */
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p)
- x = s->x + abs (s->face->box_line_width);
+ x = s->x + eabs (s->face->box_line_width);
else
x = s->x;
@@ -2962,7 +3047,7 @@ x_draw_composite_glyph_string_foreground (s)
of S to the right of that box line. */
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p)
- x = s->x + abs (s->face->box_line_width);
+ x = s->x + eabs (s->face->box_line_width);
else
x = s->x;
@@ -3457,7 +3542,7 @@ x_draw_glyph_string_box (s)
? s->first_glyph
: s->first_glyph + s->nchars - 1);
- width = abs (s->face->box_line_width);
+ width = eabs (s->face->box_line_width);
raised_p = s->face->box == FACE_RAISED_BOX;
left_x = s->x;
right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
@@ -3503,7 +3588,7 @@ x_draw_image_foreground (s)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -3576,7 +3661,7 @@ x_draw_image_relief (s)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -3593,7 +3678,7 @@ x_draw_image_relief (s)
}
else
{
- thick = abs (s->img->relief);
+ thick = eabs (s->img->relief);
raised_p = s->img->relief > 0;
}
@@ -3654,7 +3739,7 @@ x_draw_image_glyph_string (s)
struct glyph_string *s;
{
int x, y;
- int box_line_hwidth = abs (s->face->box_line_width);
+ int box_line_hwidth = eabs (s->face->box_line_width);
int box_line_vwidth = max (s->face->box_line_width, 0);
int height;
@@ -3972,15 +4057,8 @@ x_delete_glyphs (n)
frame. Otherwise clear the selected frame. */
static void
-x_clear_frame ()
+x_clear_frame (struct frame *f)
{
- struct frame *f;
-
- if (updating_frame)
- f = updating_frame;
- else
- f = SELECTED_FRAME ();
-
/* Clearing the frame will erase any cursor, so mark them all as no
longer visible. */
mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f)));
@@ -4266,14 +4344,6 @@ static void
frame_highlight (f)
struct frame *f;
{
- OSErr err;
- ControlRef root_control;
-
- BLOCK_INPUT;
- err = GetRootControl (FRAME_MAC_WINDOW (f), &root_control);
- if (err == noErr)
- ActivateControl (root_control);
- UNBLOCK_INPUT;
x_update_cursor (f, 1);
}
@@ -4281,14 +4351,6 @@ static void
frame_unhighlight (f)
struct frame *f;
{
- OSErr err;
- ControlRef root_control;
-
- BLOCK_INPUT;
- err = GetRootControl (FRAME_MAC_WINDOW (f), &root_control);
- if (err == noErr)
- DeactivateControl (root_control);
- UNBLOCK_INPUT;
x_update_cursor (f, 1);
}
@@ -4388,7 +4450,7 @@ x_detect_focus_change (dpyinfo, event, bufp)
{
struct frame *frame;
- frame = mac_window_to_frame ((WindowPtr) event->message);
+ frame = mac_window_to_frame ((WindowRef) event->message);
if (! frame)
return;
@@ -4514,7 +4576,7 @@ note_mouse_movement (frame, pos)
clear_mouse_face (dpyinfo);
dpyinfo->mouse_face_mouse_frame = 0;
if (!dpyinfo->grabbed)
- rif->define_frame_cursor (frame,
+ FRAME_RIF (frame)->define_frame_cursor (frame,
frame->output_data.mac->nontext_cursor);
}
@@ -4628,8 +4690,14 @@ XTmouse_position (fp, insist, bar_window, part, x, y, time)
the frame are divided into. */
Point mouse_pos;
+#if TARGET_API_MAC_CARBON
+ GetGlobalMouse (&mouse_pos);
+ mouse_pos.h -= f1->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f1);
+ mouse_pos.v -= f1->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f1);
+#else
SetPortWindowPort (FRAME_MAC_WINDOW (f1));
GetMouse (&mouse_pos);
+#endif
remember_mouse_glyph (f1, mouse_pos.h, mouse_pos.v,
&last_mouse_glyph);
last_mouse_glyph_frame = f1;
@@ -4659,14 +4727,14 @@ static OSStatus set_scroll_bar_timer P_ ((EventTimerInterval));
static int control_part_code_to_scroll_bar_part P_ ((ControlPartCode));
static void construct_scroll_bar_click P_ ((struct scroll_bar *, int,
struct input_event *));
-static OSStatus get_control_part_bounds P_ ((ControlHandle, ControlPartCode,
+static OSStatus get_control_part_bounds P_ ((ControlRef, ControlPartCode,
Rect *));
static void x_scroll_bar_handle_press P_ ((struct scroll_bar *,
ControlPartCode, Point,
struct input_event *));
static void x_scroll_bar_handle_release P_ ((struct scroll_bar *,
struct input_event *));
-static void x_scroll_bar_handle_drag P_ ((WindowPtr, struct scroll_bar *,
+static void x_scroll_bar_handle_drag P_ ((WindowRef, struct scroll_bar *,
Point, struct input_event *));
static void x_set_toolkit_scroll_bar_thumb P_ ((struct scroll_bar *,
int, int, int));
@@ -4759,7 +4827,7 @@ construct_scroll_bar_click (bar, part, bufp)
static OSStatus
get_control_part_bounds (ch, part_code, rect)
- ControlHandle ch;
+ ControlRef ch;
ControlPartCode part_code;
Rect *rect;
{
@@ -4789,7 +4857,7 @@ x_scroll_bar_handle_press (bar, part_code, mouse_pos, bufp)
if (part != scroll_bar_handle)
{
construct_scroll_bar_click (bar, part, bufp);
- HiliteControl (SCROLL_BAR_CONTROL_HANDLE (bar), part_code);
+ HiliteControl (SCROLL_BAR_CONTROL_REF (bar), part_code);
set_scroll_bar_timer (SCROLL_BAR_FIRST_DELAY);
bar->dragging = Qnil;
}
@@ -4797,7 +4865,7 @@ x_scroll_bar_handle_press (bar, part_code, mouse_pos, bufp)
{
Rect r;
- get_control_part_bounds (SCROLL_BAR_CONTROL_HANDLE (bar),
+ get_control_part_bounds (SCROLL_BAR_CONTROL_REF (bar),
kControlIndicatorPart, &r);
XSETINT (bar->dragging, - (mouse_pos.v - r.top) - 1);
}
@@ -4815,7 +4883,7 @@ x_scroll_bar_handle_release (bar, bufp)
|| (INTEGERP (bar->dragging) && XINT (bar->dragging) >= 0))
construct_scroll_bar_click (bar, scroll_bar_end_scroll, bufp);
- HiliteControl (SCROLL_BAR_CONTROL_HANDLE (bar), 0);
+ HiliteControl (SCROLL_BAR_CONTROL_REF (bar), 0);
set_scroll_bar_timer (kEventDurationForever);
last_scroll_bar_part = -1;
@@ -4825,19 +4893,19 @@ x_scroll_bar_handle_release (bar, bufp)
static void
x_scroll_bar_handle_drag (win, bar, mouse_pos, bufp)
- WindowPtr win;
+ WindowRef win;
struct scroll_bar *bar;
Point mouse_pos;
struct input_event *bufp;
{
- ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+ ControlRef ch = SCROLL_BAR_CONTROL_REF (bar);
if (last_scroll_bar_part == scroll_bar_handle)
{
int top, top_range;
Rect r;
- get_control_part_bounds (SCROLL_BAR_CONTROL_HANDLE (bar),
+ get_control_part_bounds (SCROLL_BAR_CONTROL_REF (bar),
kControlIndicatorPart, &r);
if (INTEGERP (bar->dragging) && XINT (bar->dragging) < 0)
@@ -4885,13 +4953,13 @@ x_scroll_bar_handle_drag (win, bar, mouse_pos, bufp)
}
if (unhilite_p)
- HiliteControl (SCROLL_BAR_CONTROL_HANDLE (bar), 0);
+ HiliteControl (SCROLL_BAR_CONTROL_REF (bar), 0);
else if (part != last_scroll_bar_part
|| scroll_bar_timer_event_posted_p)
{
construct_scroll_bar_click (bar, part, bufp);
last_scroll_bar_part = part;
- HiliteControl (SCROLL_BAR_CONTROL_HANDLE (bar), part_code);
+ HiliteControl (SCROLL_BAR_CONTROL_REF (bar), part_code);
set_scroll_bar_timer (SCROLL_BAR_CONTINUOUS_DELAY);
}
}
@@ -4905,7 +4973,7 @@ x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
struct scroll_bar *bar;
int portion, position, whole;
{
- ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+ ControlRef ch = SCROLL_BAR_CONTROL_REF (bar);
int value, viewsize, maximum;
if (XINT (bar->track_height) == 0)
@@ -4964,7 +5032,7 @@ x_scroll_bar_create (w, top, left, width, height, disp_top, disp_height)
struct scroll_bar *bar
= XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil));
Rect r;
- ControlHandle ch;
+ ControlRef ch;
BLOCK_INPUT;
@@ -4988,7 +5056,7 @@ x_scroll_bar_create (w, top, left, width, height, disp_top, disp_height)
ch = NewControl (FRAME_MAC_WINDOW (f), &r, "\p", width < disp_height,
0, 0, 0, scrollBarProc, (long) bar);
#endif
- SET_SCROLL_BAR_CONTROL_HANDLE (bar, ch);
+ SET_SCROLL_BAR_CONTROL_REF (bar, ch);
XSETWINDOW (bar->window, w);
XSETINT (bar->top, top);
@@ -4998,6 +5066,9 @@ x_scroll_bar_create (w, top, left, width, height, disp_top, disp_height)
XSETINT (bar->start, 0);
XSETINT (bar->end, 0);
bar->dragging = Qnil;
+#ifdef MAC_OSX
+ bar->fringe_extended_p = Qnil;
+#endif
#ifdef USE_TOOLKIT_SCROLL_BARS
bar->track_top = Qnil;
bar->track_height = Qnil;
@@ -5038,7 +5109,7 @@ x_scroll_bar_set_handle (bar, start, end, rebuild)
int rebuild;
{
int dragging = ! NILP (bar->dragging);
- ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+ ControlRef ch = SCROLL_BAR_CONTROL_REF (bar);
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height));
int length = end - start;
@@ -5107,7 +5178,7 @@ x_scroll_bar_remove (bar)
mac_prepare_for_quickdraw (f);
#endif
/* Destroy the Mac scroll bar control */
- DisposeControl (SCROLL_BAR_CONTROL_HANDLE (bar));
+ DisposeControl (SCROLL_BAR_CONTROL_REF (bar));
/* Disassociate this scroll bar from its window. */
XWINDOW (bar->window)->vertical_scroll_bar = Qnil;
@@ -5130,6 +5201,9 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
struct scroll_bar *bar;
int top, height, left, sb_left, width, sb_width, disp_top, disp_height;
int window_y, window_height;
+#ifdef MAC_OSX
+ int fringe_extended_p;
+#endif
/* Get window dimensions. */
window_box (w, -1, 0, &window_y, 0, &window_height);
@@ -5149,9 +5223,9 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
/* Compute the left edge of the scroll bar. */
if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
- sb_left = left;
+ sb_left = left + (WINDOW_RIGHTMOST_P (w) ? width - sb_width : 0);
else
- sb_left = left + width - sb_width;
+ sb_left = left + (WINDOW_LEFTMOST_P (w) ? 0 : width - sb_width);
/* Adjustments according to Inside Macintosh to make it look nice */
disp_top = top;
@@ -5172,11 +5246,29 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
sb_left++;
#endif
+#ifdef MAC_OSX
+ if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
+ fringe_extended_p = (WINDOW_LEFTMOST_P (w)
+ && WINDOW_LEFT_FRINGE_WIDTH (w)
+ && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
+ || WINDOW_LEFT_MARGIN_COLS (w) == 0));
+ else
+ fringe_extended_p = (WINDOW_RIGHTMOST_P (w)
+ && WINDOW_RIGHT_FRINGE_WIDTH (w)
+ && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
+ || WINDOW_RIGHT_MARGIN_COLS (w) == 0));
+#endif
+
/* Does the scroll bar exist yet? */
if (NILP (w->vertical_scroll_bar))
{
BLOCK_INPUT;
- mac_clear_area (f, left, top, width, height);
+#ifdef MAC_OSX
+ if (fringe_extended_p)
+ mac_clear_area (f, sb_left, top, sb_width, height);
+ else
+#endif
+ mac_clear_area (f, left, top, width, height);
UNBLOCK_INPUT;
bar = x_scroll_bar_create (w, top, sb_left, sb_width, height, disp_top,
disp_height);
@@ -5185,10 +5277,10 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
else
{
/* It may just need to be moved and resized. */
- ControlHandle ch;
+ ControlRef ch;
bar = XSCROLL_BAR (w->vertical_scroll_bar);
- ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+ ch = SCROLL_BAR_CONTROL_REF (bar);
BLOCK_INPUT;
@@ -5196,11 +5288,20 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
if (!(XINT (bar->left) == sb_left
&& XINT (bar->top) == top
&& XINT (bar->width) == sb_width
- && XINT (bar->height) == height))
+ && XINT (bar->height) == height
+#ifdef MAC_OSX
+ && !NILP (bar->fringe_extended_p) == fringe_extended_p
+#endif
+ ))
{
/* Since toolkit scroll bars are smaller than the space reserved
for them on the frame, we have to clear "under" them. */
- mac_clear_area (f, left, top, width, height);
+#ifdef MAC_OSX
+ if (fringe_extended_p)
+ mac_clear_area (f, sb_left, top, sb_width, height);
+ else
+#endif
+ mac_clear_area (f, left, top, width, height);
#if USE_CG_DRAWING
mac_prepare_for_quickdraw (f);
@@ -5229,6 +5330,10 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
UNBLOCK_INPUT;
}
+#ifdef MAC_OSX
+ bar->fringe_extended_p = fringe_extended_p ? Qt : Qnil;
+#endif
+
#ifdef USE_TOOLKIT_SCROLL_BARS
if (NILP (bar->track_top))
{
@@ -5244,7 +5349,7 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
}
else
{
- ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+ ControlRef ch = SCROLL_BAR_CONTROL_REF (bar);
Rect r0, r1;
BLOCK_INPUT;
@@ -5521,19 +5626,24 @@ x_scroll_bar_report_motion (fp, bar_window, part, x, y, time)
unsigned long *time;
{
struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar);
- ControlHandle ch = SCROLL_BAR_CONTROL_HANDLE (bar);
+ ControlRef ch = SCROLL_BAR_CONTROL_REF (bar);
#if TARGET_API_MAC_CARBON
- WindowPtr wp = GetControlOwner (ch);
+ WindowRef wp = GetControlOwner (ch);
#else
- WindowPtr wp = (*ch)->contrlOwner;
+ WindowRef wp = (*ch)->contrlOwner;
#endif
Point mouse_pos;
struct frame *f = mac_window_to_frame (wp);
int win_y, top_range;
+#if TARGET_API_MAC_CARBON
+ GetGlobalMouse (&mouse_pos);
+ mouse_pos.h -= f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
+ mouse_pos.v -= f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
+#else
SetPortWindowPort (wp);
-
GetMouse (&mouse_pos);
+#endif
win_y = mouse_pos.v - XINT (bar->top);
top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height));
@@ -5587,6 +5697,541 @@ x_scroll_bar_clear (f)
/***********************************************************************
+ Tool-bars
+ ***********************************************************************/
+#if USE_MAC_TOOLBAR
+
+/* In identifiers such as function/variable names, Emacs tool bar is
+ referred to as `tool_bar', and Carbon HIToolbar as `toolbar'. */
+
+#define TOOLBAR_IDENTIFIER (CFSTR ("org.gnu.Emacs.toolbar"))
+#define TOOLBAR_ICON_ITEM_IDENTIFIER (CFSTR ("org.gnu.Emacs.toolbar.icon"))
+
+#define TOOLBAR_ITEM_COMMAND_ID_OFFSET 'Tb\0\0'
+#define TOOLBAR_ITEM_COMMAND_ID_P(id) \
+ (((id) & ~0xffff) == TOOLBAR_ITEM_COMMAND_ID_OFFSET)
+#define TOOLBAR_ITEM_COMMAND_ID_VALUE(id) \
+ ((id) - TOOLBAR_ITEM_COMMAND_ID_OFFSET)
+#define TOOLBAR_ITEM_MAKE_COMMAND_ID(value) \
+ ((value) + TOOLBAR_ITEM_COMMAND_ID_OFFSET)
+
+static int mac_event_to_emacs_modifiers P_ ((EventRef));
+static void mac_handle_origin_change P_ ((struct frame *));
+static OSStatus mac_handle_toolbar_command_event P_ ((EventHandlerCallRef,
+ EventRef, void *));
+
+static void
+mac_move_window_with_gravity (f, win_gravity, left, top)
+ struct frame *f;
+ int win_gravity;
+ short left, top;
+{
+ Rect inner, outer;
+
+ mac_get_window_bounds (f, &inner, &outer);
+
+ switch (win_gravity)
+ {
+ case NorthWestGravity:
+ case WestGravity:
+ case SouthWestGravity:
+ left += inner.left - outer.left;
+ break;
+
+ case NorthGravity:
+ case CenterGravity:
+ case SouthGravity:
+ left += ((inner.left - outer.left) + (inner.right - outer.right)) / 2;
+ break;
+
+ case NorthEastGravity:
+ case EastGravity:
+ case SouthEastGravity:
+ left += inner.right - outer.right;
+ break;
+ }
+
+ switch (win_gravity)
+ {
+ case NorthWestGravity:
+ case NorthGravity:
+ case NorthEastGravity:
+ top += inner.top - outer.top;
+ break;
+
+ case WestGravity:
+ case CenterGravity:
+ case EastGravity:
+ top += ((inner.top - outer.top) + (inner.bottom - outer.bottom)) / 2;
+ break;
+
+ case SouthWestGravity:
+ case SouthGravity:
+ case SouthEastGravity:
+ top += inner.bottom - outer.bottom;
+ break;
+ }
+
+ MoveWindow (FRAME_MAC_WINDOW (f), left, top, false);
+}
+
+static void
+mac_get_window_origin_with_gravity (f, win_gravity, left, top)
+ struct frame *f;
+ int win_gravity;
+ short *left, *top;
+{
+ Rect inner, outer;
+
+ mac_get_window_bounds (f, &inner, &outer);
+
+ switch (win_gravity)
+ {
+ case NorthWestGravity:
+ case WestGravity:
+ case SouthWestGravity:
+ *left = outer.left;
+ break;
+
+ case NorthGravity:
+ case CenterGravity:
+ case SouthGravity:
+ *left = outer.left + ((outer.right - outer.left)
+ - (inner.right - inner.left)) / 2;
+ break;
+
+ case NorthEastGravity:
+ case EastGravity:
+ case SouthEastGravity:
+ *left = outer.right - (inner.right - inner.left);
+ break;
+ }
+
+ switch (win_gravity)
+ {
+ case NorthWestGravity:
+ case NorthGravity:
+ case NorthEastGravity:
+ *top = outer.top;
+ break;
+
+ case WestGravity:
+ case CenterGravity:
+ case EastGravity:
+ *top = outer.top + ((outer.bottom - outer.top)
+ - (inner.bottom - inner.top)) / 2;
+ break;
+
+ case SouthWestGravity:
+ case SouthGravity:
+ case SouthEastGravity:
+ *top = outer.bottom - (inner.bottom - inner.top);
+ break;
+ }
+}
+
+static OSStatus
+mac_handle_toolbar_event (next_handler, event, data)
+ EventHandlerCallRef next_handler;
+ EventRef event;
+ void *data;
+{
+ OSStatus err, result = eventNotHandledErr;
+
+ switch (GetEventKind (event))
+ {
+ case kEventToolbarGetDefaultIdentifiers:
+ result = noErr;
+ break;
+
+ case kEventToolbarGetAllowedIdentifiers:
+ {
+ CFMutableArrayRef array;
+
+ GetEventParameter (event, kEventParamMutableArray,
+ typeCFMutableArrayRef, NULL,
+ sizeof (CFMutableArrayRef), NULL, &array);
+ CFArrayAppendValue (array, TOOLBAR_ICON_ITEM_IDENTIFIER);
+ result = noErr;
+ }
+ break;
+
+ case kEventToolbarCreateItemWithIdentifier:
+ {
+ CFStringRef identifier;
+ HIToolbarItemRef item = NULL;
+
+ GetEventParameter (event, kEventParamToolbarItemIdentifier,
+ typeCFStringRef, NULL,
+ sizeof (CFStringRef), NULL, &identifier);
+
+ if (CFStringCompare (identifier, TOOLBAR_ICON_ITEM_IDENTIFIER, 0)
+ == kCFCompareEqualTo)
+ HIToolbarItemCreate (identifier,
+ kHIToolbarItemAllowDuplicates
+ | kHIToolbarItemCantBeRemoved, &item);
+
+ if (item)
+ {
+ SetEventParameter (event, kEventParamToolbarItem,
+ typeHIToolbarItemRef,
+ sizeof (HIToolbarItemRef), &item);
+ result = noErr;
+ }
+ }
+ break;
+
+ default:
+ abort ();
+ }
+
+ return result;
+}
+
+static CGImageRef
+mac_image_spec_to_cg_image (f, image)
+ struct frame *f;
+ Lisp_Object image;
+{
+ if (!valid_image_p (image))
+ return NULL;
+ else
+ {
+ int img_id = lookup_image (f, image);
+ struct image *img = IMAGE_FROM_ID (f, img_id);
+
+ prepare_image_for_display (f, img);
+
+ return img->data.ptr_val;
+ }
+}
+
+/* Create a tool bar for frame F. */
+
+static OSStatus
+mac_create_frame_tool_bar (f)
+ FRAME_PTR f;
+{
+ OSStatus err;
+ HIToolbarRef toolbar;
+
+ err = HIToolbarCreate (TOOLBAR_IDENTIFIER, kHIToolbarNoAttributes,
+ &toolbar);
+ if (err == noErr)
+ {
+ static const EventTypeSpec specs[] =
+ {{kEventClassToolbar, kEventToolbarGetDefaultIdentifiers},
+ {kEventClassToolbar, kEventToolbarGetAllowedIdentifiers},
+ {kEventClassToolbar, kEventToolbarCreateItemWithIdentifier}};
+
+ err = InstallEventHandler (HIObjectGetEventTarget (toolbar),
+ mac_handle_toolbar_event,
+ GetEventTypeCount (specs), specs,
+ f, NULL);
+ }
+
+ if (err == noErr)
+ err = HIToolbarSetDisplayMode (toolbar, kHIToolbarDisplayModeIconOnly);
+ if (err == noErr)
+ {
+ static const EventTypeSpec specs[] =
+ {{kEventClassCommand, kEventCommandProcess}};
+
+ err = InstallWindowEventHandler (FRAME_MAC_WINDOW (f),
+ mac_handle_toolbar_command_event,
+ GetEventTypeCount (specs),
+ specs, f, NULL);
+ }
+ if (err == noErr)
+ err = SetWindowToolbar (FRAME_MAC_WINDOW (f), toolbar);
+
+ if (toolbar)
+ CFRelease (toolbar);
+
+ return err;
+}
+
+/* Update the tool bar for frame F. Add new buttons and remove old. */
+
+void
+update_frame_tool_bar (f)
+ FRAME_PTR f;
+{
+ HIToolbarRef toolbar = NULL;
+ short left, top;
+ CFArrayRef old_items = NULL;
+ CFIndex old_count;
+ int i, pos, win_gravity = f->output_data.mac->toolbar_win_gravity;
+ struct mac_display_info *dpyinfo = FRAME_MAC_DISPLAY_INFO (f);
+
+ BLOCK_INPUT;
+
+ GetWindowToolbar (FRAME_MAC_WINDOW (f), &toolbar);
+ if (toolbar == NULL)
+ {
+ mac_create_frame_tool_bar (f);
+ GetWindowToolbar (FRAME_MAC_WINDOW (f), &toolbar);
+ if (toolbar == NULL)
+ goto out;
+ if (win_gravity >= NorthWestGravity && win_gravity <= SouthEastGravity)
+ mac_get_window_origin_with_gravity (f, win_gravity, &left, &top);
+ }
+
+ HIToolbarCopyItems (toolbar, &old_items);
+ if (old_items == NULL)
+ goto out;
+
+ old_count = CFArrayGetCount (old_items);
+ pos = 0;
+ for (i = 0; i < f->n_tool_bar_items; ++i)
+ {
+#define PROP(IDX) AREF (f->tool_bar_items, i * TOOL_BAR_ITEM_NSLOTS + (IDX))
+
+ int enabled_p = !NILP (PROP (TOOL_BAR_ITEM_ENABLED_P));
+ int selected_p = !NILP (PROP (TOOL_BAR_ITEM_SELECTED_P));
+ int idx;
+ Lisp_Object image;
+ CGImageRef cg_image;
+ CFStringRef label;
+ HIToolbarItemRef item;
+
+ /* If image is a vector, choose the image according to the
+ button state. */
+ image = PROP (TOOL_BAR_ITEM_IMAGES);
+ if (VECTORP (image))
+ {
+ if (enabled_p)
+ idx = (selected_p
+ ? TOOL_BAR_IMAGE_ENABLED_SELECTED
+ : TOOL_BAR_IMAGE_ENABLED_DESELECTED);
+ else
+ idx = (selected_p
+ ? TOOL_BAR_IMAGE_DISABLED_SELECTED
+ : TOOL_BAR_IMAGE_DISABLED_DESELECTED);
+
+ xassert (ASIZE (image) >= idx);
+ image = AREF (image, idx);
+ }
+ else
+ idx = -1;
+
+ cg_image = mac_image_spec_to_cg_image (f, image);
+ /* Ignore invalid image specifications. */
+ if (cg_image == NULL)
+ continue;
+
+ label = cfstring_create_with_string (PROP (TOOL_BAR_ITEM_CAPTION));
+ if (label == NULL)
+ label = CFSTR ("");
+
+ if (pos < old_count)
+ {
+ CGImageRef old_cg_image = NULL;
+ CFStringRef old_label = NULL;
+ Boolean old_enabled_p;
+
+ item = (HIToolbarItemRef) CFArrayGetValueAtIndex (old_items, pos);
+
+ HIToolbarItemCopyImage (item, &old_cg_image);
+ if (cg_image != old_cg_image)
+ HIToolbarItemSetImage (item, cg_image);
+ CGImageRelease (old_cg_image);
+
+ HIToolbarItemCopyLabel (item, &old_label);
+ if (CFStringCompare (label, old_label, 0) != kCFCompareEqualTo)
+ HIToolbarItemSetLabel (item, label);
+ CFRelease (old_label);
+
+ old_enabled_p = HIToolbarItemIsEnabled (item);
+ if ((enabled_p || idx >= 0) != old_enabled_p)
+ HIToolbarItemSetEnabled (item, (enabled_p || idx >= 0));
+ }
+ else
+ {
+ item = NULL;
+ HIToolbarCreateItemWithIdentifier (toolbar,
+ TOOLBAR_ICON_ITEM_IDENTIFIER,
+ NULL, &item);
+ if (item)
+ {
+ HIToolbarItemSetImage (item, cg_image);
+ HIToolbarItemSetLabel (item, label);
+ HIToolbarItemSetEnabled (item, (enabled_p || idx >= 0));
+ HIToolbarAppendItem (toolbar, item);
+ CFRelease (item);
+ }
+ }
+
+ CFRelease (label);
+ if (item)
+ {
+ HIToolbarItemSetCommandID (item, TOOLBAR_ITEM_MAKE_COMMAND_ID (i));
+ pos++;
+ }
+ }
+
+ CFRelease (old_items);
+
+ while (pos < old_count)
+ HIToolbarRemoveItemAtIndex (toolbar, --old_count);
+
+ ShowHideWindowToolbar (FRAME_MAC_WINDOW (f), true,
+ !win_gravity && f == mac_focus_frame (dpyinfo));
+ /* Mac OS X 10.3 does not issue kEventWindowBoundsChanged events on
+ toolbar visibility change. */
+ mac_handle_origin_change (f);
+ if (win_gravity >= NorthWestGravity && win_gravity <= SouthEastGravity)
+ {
+ mac_move_window_with_gravity (f, win_gravity, left, top);
+ /* If the title bar is completely outside the screen, adjust the
+ position. */
+ ConstrainWindowToScreen (FRAME_MAC_WINDOW (f), kWindowTitleBarRgn,
+ kWindowConstrainMoveRegardlessOfFit
+ | kWindowConstrainAllowPartial, NULL, NULL);
+ f->output_data.mac->toolbar_win_gravity = 0;
+ }
+
+ out:
+ UNBLOCK_INPUT;
+}
+
+/* Hide the tool bar on frame F. Unlike the counterpart on GTK+, it
+ doesn't deallocate the resources. */
+
+void
+free_frame_tool_bar (f)
+ FRAME_PTR f;
+{
+ if (IsWindowToolbarVisible (FRAME_MAC_WINDOW (f)))
+ {
+ struct mac_display_info *dpyinfo = FRAME_MAC_DISPLAY_INFO (f);
+
+ BLOCK_INPUT;
+ ShowHideWindowToolbar (FRAME_MAC_WINDOW (f), false,
+ (NILP (Fsymbol_value
+ (intern ("frame-notice-user-settings")))
+ && f == mac_focus_frame (dpyinfo)));
+ /* Mac OS X 10.3 does not issue kEventWindowBoundsChanged events
+ on toolbar visibility change. */
+ mac_handle_origin_change (f);
+ UNBLOCK_INPUT;
+ }
+}
+
+static void
+mac_tool_bar_note_mouse_movement (f, event)
+ struct frame *f;
+ EventRef event;
+{
+ OSStatus err;
+ struct mac_display_info *dpyinfo = FRAME_MAC_DISPLAY_INFO (f);
+ int mouse_down_p;
+ HIViewRef item_view;
+ UInt32 command_id;
+
+ mouse_down_p = (dpyinfo->grabbed
+ && f == last_mouse_frame
+ && FRAME_LIVE_P (f));
+ if (mouse_down_p)
+ return;
+
+ err = HIViewGetViewForMouseEvent (HIViewGetRoot (FRAME_MAC_WINDOW (f)),
+ event, &item_view);
+ /* This doesn't work on Mac OS X 10.2. On Mac OS X 10.3 and 10.4, a
+ toolbar item view seems to have the same command ID with that of
+ the toolbar item. */
+ if (err == noErr)
+ err = GetControlCommandID (item_view, &command_id);
+ if (err == noErr && TOOLBAR_ITEM_COMMAND_ID_P (command_id))
+ {
+ int i = TOOLBAR_ITEM_COMMAND_ID_VALUE (command_id);
+
+ if (i < f->n_tool_bar_items)
+ {
+ HIRect bounds;
+ HIViewRef content_view;
+
+ err = HIViewGetBounds (item_view, &bounds);
+ if (err == noErr)
+ err = HIViewFindByID (HIViewGetRoot (FRAME_MAC_WINDOW (f)),
+ kHIViewWindowContentID, &content_view);
+ if (err == noErr)
+ err = HIViewConvertRect (&bounds, item_view, content_view);
+ if (err == noErr)
+ SetRect (&last_mouse_glyph,
+ CGRectGetMinX (bounds), CGRectGetMinY (bounds),
+ CGRectGetMaxX (bounds), CGRectGetMaxY (bounds));
+
+ help_echo_object = help_echo_window = Qnil;
+ help_echo_pos = -1;
+ help_echo_string = PROP (TOOL_BAR_ITEM_HELP);
+ if (NILP (help_echo_string))
+ help_echo_string = PROP (TOOL_BAR_ITEM_CAPTION);
+ }
+ }
+}
+
+static OSStatus
+mac_handle_toolbar_command_event (next_handler, event, data)
+ EventHandlerCallRef next_handler;
+ EventRef event;
+ void *data;
+{
+ OSStatus err, result = eventNotHandledErr;
+ struct frame *f = (struct frame *) data;
+ HICommand command;
+
+ err = GetEventParameter (event, kEventParamDirectObject,
+ typeHICommand, NULL,
+ sizeof (HICommand), NULL, &command);
+ if (err != noErr)
+ return result;
+
+ switch (GetEventKind (event))
+ {
+ case kEventCommandProcess:
+ if (!TOOLBAR_ITEM_COMMAND_ID_P (command.commandID))
+ result = CallNextEventHandler (next_handler, event);
+ else
+ {
+ int i = TOOLBAR_ITEM_COMMAND_ID_VALUE (command.commandID);
+
+ if (i < f->n_tool_bar_items
+ && !NILP (PROP (TOOL_BAR_ITEM_ENABLED_P)))
+ {
+ Lisp_Object frame;
+ struct input_event buf;
+
+ EVENT_INIT (buf);
+
+ XSETFRAME (frame, f);
+ buf.kind = TOOL_BAR_EVENT;
+ buf.frame_or_window = frame;
+ buf.arg = frame;
+ kbd_buffer_store_event (&buf);
+
+ buf.kind = TOOL_BAR_EVENT;
+ buf.frame_or_window = frame;
+ buf.arg = PROP (TOOL_BAR_ITEM_KEY);
+ buf.modifiers = mac_event_to_emacs_modifiers (event);
+ kbd_buffer_store_event (&buf);
+
+ result = noErr;
+ }
+ }
+ break;
+
+ default:
+ abort ();
+ }
+#undef PROP
+
+ return result;
+}
+#endif /* USE_MAC_TOOLBAR */
+
+
+/***********************************************************************
Text Cursor
***********************************************************************/
@@ -6161,9 +6806,7 @@ x_set_offset (f, xoff, yoff, change_gravity)
ConstrainWindowToScreen (FRAME_MAC_WINDOW (f), kWindowTitleBarRgn,
kWindowConstrainMoveRegardlessOfFit
| kWindowConstrainAllowPartial, NULL, NULL);
-#if USE_CARBON_EVENTS
if (!NILP (tip_frame) && XFRAME (tip_frame) == f)
-#endif
mac_handle_origin_change (f);
#else
{
@@ -6239,7 +6882,7 @@ x_set_window_size (f, change_gravity, cols, rows)
SizeWindow (FRAME_MAC_WINDOW (f), pixelwidth, pixelheight, 0);
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
if (!NILP (tip_frame) && f == XFRAME (tip_frame))
#endif
mac_handle_size_change (f, pixelwidth, pixelheight);
@@ -6286,17 +6929,11 @@ x_set_mouse_pixel_position (f, pix_x, pix_y)
int pix_x, pix_y;
{
#ifdef MAC_OSX
- Point p;
- CGPoint point;
+ pix_x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
+ pix_y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
BLOCK_INPUT;
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
- p.h = pix_x;
- p.v = pix_y;
- LocalToGlobal (&p);
- point.x = p.h;
- point.y = p.v;
- CGWarpMouseCursorPosition (point);
+ CGWarpMouseCursorPosition (CGPointMake (pix_x, pix_y));
UNBLOCK_INPUT;
#else
#if 0 /* MAC_TODO: LMSetMouseLocation and CursorDeviceMoveTo are non-Carbon */
@@ -6378,7 +7015,7 @@ static void
mac_handle_visibility_change (f)
struct frame *f;
{
- WindowPtr wp = FRAME_MAC_WINDOW (f);
+ WindowRef wp = FRAME_MAC_WINDOW (f);
int visible = 0, iconified = 0;
struct input_event buf;
@@ -6446,32 +7083,7 @@ x_make_frame_visible (f)
before the window gets really visible. */
if (! FRAME_ICONIFIED_P (f)
&& ! f->output_data.mac->asked_for_visible)
- {
-#if TARGET_API_MAC_CARBON
- if (!(FRAME_SIZE_HINTS (f)->flags & (USPosition | PPosition)))
- {
- struct frame *sf = SELECTED_FRAME ();
- if (!FRAME_MAC_P (sf))
- RepositionWindow (FRAME_MAC_WINDOW (f), NULL,
- kWindowCenterOnMainScreen);
- else
- RepositionWindow (FRAME_MAC_WINDOW (f),
- FRAME_MAC_WINDOW (sf),
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
- kWindowCascadeStartAtParentWindowScreen
-#else
- kWindowCascadeOnParentWindowScreen
-#endif
- );
-#if USE_CARBON_EVENTS
- if (!NILP (tip_frame) && f == XFRAME (tip_frame))
-#endif
- mac_handle_origin_change (f);
- }
- else
-#endif
- x_set_offset (f, f->left_pos, f->top_pos, 0);
- }
+ x_set_offset (f, f->left_pos, f->top_pos, 0);
f->output_data.mac->asked_for_visible = 1;
@@ -6545,18 +7157,20 @@ x_make_frame_invisible (f)
BLOCK_INPUT;
+#if !TARGET_API_MAC_CARBON
/* Before unmapping the window, update the WM_SIZE_HINTS property to claim
that the current position of the window is user-specified, rather than
program-specified, so that when the window is mapped again, it will be
placed at the same location, without forcing the user to position it
by hand again (they have already done that once for this window.) */
x_wm_set_size_hint (f, (long) 0, 1);
+#endif
HideWindow (FRAME_MAC_WINDOW (f));
UNBLOCK_INPUT;
-#if !USE_CARBON_EVENTS
+#if !TARGET_API_MAC_CARBON
mac_handle_visibility_change (f);
#endif
}
@@ -6595,7 +7209,7 @@ x_iconify_frame (f)
if (err != noErr)
error ("Can't notify window manager of iconification");
-#if !USE_CARBON_EVENTS
+#if !TARGET_API_MAC_CARBON
mac_handle_visibility_change (f);
#endif
}
@@ -6608,7 +7222,7 @@ x_free_frame_resources (f)
struct frame *f;
{
struct mac_display_info *dpyinfo = FRAME_MAC_DISPLAY_INFO (f);
- WindowPtr wp = FRAME_MAC_WINDOW (f);
+ WindowRef wp = FRAME_MAC_WINDOW (f);
BLOCK_INPUT;
@@ -7666,7 +8280,7 @@ init_font_name_table ()
Lisp_Object rest = XCDR (XCDR (text_encoding_info));
if (size > 0 || style == normal)
- for (; !NILP (rest); rest = XCDR (rest))
+ for (; CONSP (rest); rest = XCDR (rest))
add_mac_font_name (name, size, style, SDATA (XCAR (rest)));
}
}
@@ -7741,7 +8355,7 @@ init_font_name_table ()
{
Lisp_Object rest = XCDR (XCDR (text_encoding_info));
- for (; !NILP (rest); rest = XCDR (rest))
+ for (; CONSP (rest); rest = XCDR (rest))
add_mac_font_name (name, assc_entry->fontSize,
assc_entry->fontStyle,
SDATA (XCAR (rest)));
@@ -8743,16 +9357,95 @@ x_find_ccl_program (fontp)
possible. */
static int font_panel_shown_p = 0;
+extern Lisp_Object Qfont;
+static Lisp_Object Qpanel_closed, Qselection;
+
+static OSStatus mac_store_event_ref_as_apple_event P_ ((AEEventClass, AEEventID,
+ Lisp_Object,
+ Lisp_Object,
+ EventRef, UInt32,
+ const EventParamName *,
+ const EventParamType *));
+
int
mac_font_panel_visible_p ()
{
return font_panel_shown_p && FPIsFontPanelVisible ();
}
+static pascal OSStatus
+mac_handle_font_event (next_handler, event, data)
+ EventHandlerCallRef next_handler;
+ EventRef event;
+ void *data;
+{
+ OSStatus result, err;
+ Lisp_Object id_key;
+ int num_params;
+ const EventParamName *names;
+ const EventParamType *types;
+ static const EventParamName names_sel[] = {kEventParamATSUFontID,
+ kEventParamATSUFontSize,
+ kEventParamFMFontFamily,
+ kEventParamFMFontStyle,
+ kEventParamFMFontSize,
+ kEventParamFontColor};
+ static const EventParamType types_sel[] = {typeATSUFontID,
+ typeATSUSize,
+ typeFMFontFamily,
+ typeFMFontStyle,
+ typeFMFontSize,
+ typeFontColor};
+
+ result = CallNextEventHandler (next_handler, event);
+ if (result != eventNotHandledErr)
+ return result;
+
+ switch (GetEventKind (event))
+ {
+ case kEventFontPanelClosed:
+ id_key = Qpanel_closed;
+ num_params = 0;
+ names = NULL;
+ types = NULL;
+ break;
+
+ case kEventFontSelection:
+ id_key = Qselection;
+ num_params = sizeof (names_sel) / sizeof (names_sel[0]);
+ names = names_sel;
+ types = types_sel;
+ break;
+ }
+
+ err = mac_store_event_ref_as_apple_event (0, 0, Qfont, id_key,
+ event, num_params,
+ names, types);
+ if (err == noErr)
+ result = noErr;
+
+ return result;
+}
+
OSStatus
mac_show_hide_font_panel ()
{
- font_panel_shown_p = 1;
+ if (!font_panel_shown_p)
+ {
+ OSStatus err;
+
+ static const EventTypeSpec specs[] =
+ {{kEventClassFont, kEventFontPanelClosed},
+ {kEventClassFont, kEventFontSelection}};
+
+ err = InstallApplicationEventHandler (mac_handle_font_event,
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
+ if (err != noErr)
+ return err;
+
+ font_panel_shown_p = 1;
+ }
return FPShowHideFontPanel ();
}
@@ -8868,7 +9561,7 @@ Lisp_Object Vmac_function_modifier;
a three button mouse */
Lisp_Object Vmac_emulate_three_button_mouse;
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
/* Non-zero if the mouse wheel button (i.e. button 4) should map to
mouse-2, instead of mouse-3. */
int mac_wheel_button_is_mouse_2;
@@ -8893,16 +9586,12 @@ static int mac_screen_config_changed = 0;
Point saved_menu_event_location;
/* Apple Events */
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
static Lisp_Object Qhi_command;
#ifdef MAC_OSX
extern Lisp_Object Qwindow;
static Lisp_Object Qtoolbar_switch_mode;
#endif
-#if USE_MAC_FONT_PANEL
-extern Lisp_Object Qfont;
-static Lisp_Object Qpanel_closed, Qselection;
-#endif
#if USE_MAC_TSM
static TSMDocumentID tsm_document_id;
static Lisp_Object Qtext_input;
@@ -8914,7 +9603,7 @@ static Lisp_Object saved_ts_script_language_on_focus;
static ScriptLanguageRecord saved_ts_language;
static Component saved_ts_component;
#endif
-#endif
+#endif /* TARGET_API_MAC_CARBON */
extern int mac_ready_for_apple_events;
extern Lisp_Object Qundefined;
extern void init_apple_event_handler P_ ((void));
@@ -8927,20 +9616,15 @@ extern OSErr init_coercion_handler P_ ((void));
extern OSErr install_drag_handler P_ ((WindowRef));
extern void remove_drag_handler P_ ((WindowRef));
+#if TARGET_API_MAC_CARBON
/* Showing help echo string during menu tracking */
-extern OSStatus install_menu_target_item_handler P_ ((WindowPtr));
+extern OSStatus install_menu_target_item_handler P_ ((void));
-#if USE_CARBON_EVENTS
#ifdef MAC_OSX
-extern void init_service_handler ();
+extern OSStatus install_service_handler ();
static Lisp_Object Qservice, Qpaste, Qperform;
#endif
-
-/* Window Event Handler */
-static pascal OSStatus mac_handle_window_event (EventHandlerCallRef,
- EventRef, void *);
#endif
-OSStatus install_window_handler (WindowPtr);
extern void init_emacs_passwd_dir ();
extern int emacs_main (int, char **, char **);
@@ -9024,7 +9708,7 @@ static const unsigned char fn_keycode_to_keycode_table[] = {
#endif /* MAC_OSX */
static int
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
mac_to_emacs_modifiers (UInt32 mods)
#else
mac_to_emacs_modifiers (EventModifiers mods)
@@ -9133,17 +9817,19 @@ mac_quit_char_key_p (modifiers, key_code)
}
#endif
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
/* Obtains the event modifiers from the event ref and then calls
mac_to_emacs_modifiers. */
static int
mac_event_to_emacs_modifiers (EventRef eventRef)
{
- UInt32 mods = 0;
+ UInt32 mods = 0, class;
+
GetEventParameter (eventRef, kEventParamKeyModifiers, typeUInt32, NULL,
sizeof (UInt32), NULL, &mods);
+ class = GetEventClass (eventRef);
if (!NILP (Vmac_emulate_three_button_mouse) &&
- GetEventClass(eventRef) == kEventClassMouse)
+ (class == kEventClassMouse || class == kEventClassCommand))
{
mods &= ~(optionKey | cmdKey);
}
@@ -9282,7 +9968,7 @@ static void
do_get_menus (void)
{
Handle menubar_handle;
- MenuHandle menu_handle;
+ MenuRef menu;
menubar_handle = GetNewMBar (128);
if(menubar_handle == NULL)
@@ -9291,9 +9977,9 @@ do_get_menus (void)
DrawMenuBar ();
#if !TARGET_API_MAC_CARBON
- menu_handle = GetMenuHandle (M_APPLE);
- if(menu_handle != NULL)
- AppendResMenu (menu_handle,'DRVR');
+ menu = GetMenuRef (M_APPLE);
+ if (menu != NULL)
+ AppendResMenu (menu, 'DRVR');
else
abort ();
#endif
@@ -9342,7 +10028,7 @@ do_check_ram_size (void)
#endif /* MAC_OS8 */
static void
-do_window_update (WindowPtr win)
+do_window_update (WindowRef win)
{
struct frame *f = mac_window_to_frame (win);
@@ -9387,7 +10073,7 @@ do_window_update (WindowPtr win)
}
static int
-is_emacs_window (WindowPtr win)
+is_emacs_window (WindowRef win)
{
Lisp_Object tail, frame;
@@ -9500,7 +10186,7 @@ do_apple_menu (SInt16 menu_item)
NoteAlert (ABOUT_ALERT_ID, NULL);
else
{
- GetMenuItemText (GetMenuHandle (M_APPLE), menu_item, item_name);
+ GetMenuItemText (GetMenuRef (M_APPLE), menu_item, item_name);
da_driver_refnum = OpenDeskAcc (item_name);
}
}
@@ -9511,7 +10197,7 @@ do_apple_menu (SInt16 menu_item)
static void
do_grow_window (w, e)
- WindowPtr w;
+ WindowRef w;
const EventRecord *e;
{
Rect limit_rect;
@@ -9563,7 +10249,7 @@ mac_get_ideal_size (f)
struct frame *f;
{
struct mac_display_info *dpyinfo = FRAME_MAC_DISPLAY_INFO (f);
- WindowPtr w = FRAME_MAC_WINDOW (f);
+ WindowRef w = FRAME_MAC_WINDOW (f);
Point ideal_size;
Rect standard_rect;
int height, width, columns, rows;
@@ -9589,7 +10275,7 @@ mac_get_ideal_size (f)
wide (DEFAULT_NUM_COLS) and as tall as will fit on the screen. */
static void
-do_zoom_window (WindowPtr w, int zoom_in_or_out)
+do_zoom_window (WindowRef w, int zoom_in_or_out)
{
Rect zoom_rect, port_rect;
int width, height;
@@ -9652,13 +10338,9 @@ do_zoom_window (WindowPtr w, int zoom_in_or_out)
SetPort (save_port);
#endif /* not TARGET_API_MAC_CARBON */
-#if !USE_CARBON_EVENTS
+#if !TARGET_API_MAC_CARBON
/* retrieve window size and update application values */
-#if TARGET_API_MAC_CARBON
- GetWindowPortBounds (w, &port_rect);
-#else
port_rect = w->portRect;
-#endif
height = port_rect.bottom - port_rect.top;
width = port_rect.right - port_rect.left;
@@ -9667,6 +10349,210 @@ do_zoom_window (WindowPtr w, int zoom_in_or_out)
#endif
}
+static void
+mac_set_unicode_keystroke_event (code, buf)
+ UniChar code;
+ struct input_event *buf;
+{
+ int charset_id, c1, c2;
+
+ if (code < 0x80)
+ {
+ buf->kind = ASCII_KEYSTROKE_EVENT;
+ buf->code = code;
+ }
+ else if (code < 0x100)
+ {
+ if (code < 0xA0)
+ charset_id = CHARSET_8_BIT_CONTROL;
+ else
+ charset_id = charset_latin_iso8859_1;
+ buf->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
+ buf->code = MAKE_CHAR (charset_id, code, 0);
+ }
+ else
+ {
+ if (code < 0x2500)
+ charset_id = charset_mule_unicode_0100_24ff,
+ code -= 0x100;
+ else if (code < 0x33FF)
+ charset_id = charset_mule_unicode_2500_33ff,
+ code -= 0x2500;
+ else if (code >= 0xE000)
+ charset_id = charset_mule_unicode_e000_ffff,
+ code -= 0xE000;
+ c1 = (code / 96) + 32, c2 = (code % 96) + 32;
+ buf->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
+ buf->code = MAKE_CHAR (charset_id, c1, c2);
+ }
+}
+
+static void
+do_keystroke (action, char_code, key_code, modifiers, timestamp, buf)
+ EventKind action;
+ unsigned char char_code;
+ UInt32 key_code, modifiers;
+ unsigned long timestamp;
+ struct input_event *buf;
+{
+ static SInt16 last_key_script = -1;
+ SInt16 current_key_script = GetScriptManagerVariable (smKeyScript);
+ UInt32 mapped_modifiers = mac_mapped_modifiers (modifiers);
+
+#ifdef MAC_OSX
+ if (mapped_modifiers & kEventKeyModifierFnMask
+ && key_code <= 0x7f
+ && fn_keycode_to_keycode_table[key_code])
+ key_code = fn_keycode_to_keycode_table[key_code];
+#endif
+
+ if (key_code <= 0x7f && keycode_to_xkeysym_table[key_code])
+ {
+ buf->kind = NON_ASCII_KEYSTROKE_EVENT;
+ buf->code = 0xff00 | keycode_to_xkeysym_table[key_code];
+#ifdef MAC_OSX
+ if (modifiers & kEventKeyModifierFnMask
+ && key_code <= 0x7f
+ && fn_keycode_to_keycode_table[key_code] == key_code)
+ modifiers &= ~kEventKeyModifierFnMask;
+#endif
+ }
+ else if (mapped_modifiers)
+ {
+ /* translate the keycode back to determine the original key */
+#ifdef MAC_OSX
+ UCKeyboardLayout *uchr_ptr = NULL;
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+ OSStatus err;
+ KeyboardLayoutRef layout;
+
+ err = KLGetCurrentKeyboardLayout (&layout);
+ if (err == noErr)
+ err = KLGetKeyboardLayoutProperty (layout, kKLuchrData,
+ (const void **) &uchr_ptr);
+#else
+ static SInt16 last_key_layout_id = 0;
+ static Handle uchr_handle = (Handle)-1;
+ SInt16 current_key_layout_id =
+ GetScriptVariable (current_key_script, smScriptKeys);
+
+ if (uchr_handle == (Handle)-1
+ || last_key_layout_id != current_key_layout_id)
+ {
+ uchr_handle = GetResource ('uchr', current_key_layout_id);
+ last_key_layout_id = current_key_layout_id;
+ }
+ if (uchr_handle)
+ uchr_ptr = (UCKeyboardLayout *)*uchr_handle;
+#endif
+
+ if (uchr_ptr)
+ {
+ OSStatus status;
+ UInt16 key_action = action - keyDown;
+ UInt32 modifier_key_state = (modifiers & ~mapped_modifiers) >> 8;
+ UInt32 keyboard_type = LMGetKbdType ();
+ SInt32 dead_key_state = 0;
+ UniChar code;
+ UniCharCount actual_length;
+
+ status = UCKeyTranslate (uchr_ptr, key_code, key_action,
+ modifier_key_state, keyboard_type,
+ kUCKeyTranslateNoDeadKeysMask,
+ &dead_key_state,
+ 1, &actual_length, &code);
+ if (status == noErr && actual_length == 1)
+ mac_set_unicode_keystroke_event (code, buf);
+ }
+#endif /* MAC_OSX */
+
+ if (buf->kind == NO_EVENT)
+ {
+ /* This code comes from Keyboard Resource, Appendix C of IM
+ - Text. This is necessary since shift is ignored in KCHR
+ table translation when option or command is pressed. It
+ also does not translate correctly control-shift chars
+ like C-% so mask off shift here also. */
+ /* Mask off modifier keys that are mapped to some Emacs
+ modifiers. */
+ int new_modifiers = modifiers & ~mapped_modifiers;
+ /* set high byte of keycode to modifier high byte*/
+ int new_key_code = key_code | new_modifiers;
+ Ptr kchr_ptr = (Ptr) GetScriptManagerVariable (smKCHRCache);
+ unsigned long some_state = 0;
+ UInt32 new_char_code;
+
+ new_char_code = KeyTranslate (kchr_ptr, new_key_code, &some_state);
+ if (new_char_code == 0)
+ /* Seems like a dead key. Append up-stroke. */
+ new_char_code = KeyTranslate (kchr_ptr, new_key_code | 0x80,
+ &some_state);
+ if (new_char_code)
+ {
+ buf->kind = ASCII_KEYSTROKE_EVENT;
+ buf->code = new_char_code & 0xff;
+ }
+ }
+ }
+
+ if (buf->kind == NO_EVENT)
+ {
+ buf->kind = ASCII_KEYSTROKE_EVENT;
+ buf->code = char_code;
+ }
+
+ buf->modifiers = mac_to_emacs_modifiers (modifiers);
+ buf->modifiers |= (extra_keyboard_modifiers
+ & (meta_modifier | alt_modifier
+ | hyper_modifier | super_modifier));
+
+#if TARGET_API_MAC_CARBON
+ if (buf->kind == ASCII_KEYSTROKE_EVENT
+ && buf->code >= 0x80 && buf->modifiers)
+ {
+ OSStatus err;
+ TextEncoding encoding = kTextEncodingMacRoman;
+ TextToUnicodeInfo ttu_info;
+
+ UpgradeScriptInfoToTextEncoding (current_key_script,
+ kTextLanguageDontCare,
+ kTextRegionDontCare,
+ NULL, &encoding);
+ err = CreateTextToUnicodeInfoByEncoding (encoding, &ttu_info);
+ if (err == noErr)
+ {
+ UniChar code;
+ Str255 pstr;
+ ByteCount unicode_len;
+
+ pstr[0] = 1;
+ pstr[1] = buf->code;
+ err = ConvertFromPStringToUnicode (ttu_info, pstr,
+ sizeof (UniChar),
+ &unicode_len, &code);
+ if (err == noErr && unicode_len == sizeof (UniChar))
+ mac_set_unicode_keystroke_event (code, buf);
+ DisposeTextToUnicodeInfo (&ttu_info);
+ }
+ }
+#endif
+
+ if (buf->kind == ASCII_KEYSTROKE_EVENT
+ && buf->code >= 0x80
+ && last_key_script != current_key_script)
+ {
+ struct input_event event;
+
+ EVENT_INIT (event);
+ event.kind = LANGUAGE_CHANGE_EVENT;
+ event.arg = Qnil;
+ event.code = current_key_script;
+ event.timestamp = timestamp;
+ kbd_buffer_store_event (&event);
+ last_key_script = current_key_script;
+ }
+}
+
void
mac_store_apple_event (class, id, desc)
Lisp_Object class, id;
@@ -9745,54 +10631,49 @@ mac_store_drag_event (window, mouse_pos, modifiers, desc)
buf.arg = mac_aedesc_to_lisp (desc);
kbd_buffer_store_event (&buf);
}
-#endif
-#if USE_CARBON_EVENTS
-static pascal OSStatus
-mac_handle_command_event (next_handler, event, data)
- EventHandlerCallRef next_handler;
+#ifdef MAC_OSX
+OSStatus
+mac_store_service_event (event)
EventRef event;
- void *data;
{
- OSStatus result, err;
- HICommand command;
- static const EventParamName names[] =
- {kEventParamDirectObject, kEventParamKeyModifiers};
- static const EventParamType types[] =
- {typeHICommand, typeUInt32};
- int num_params = sizeof (names) / sizeof (names[0]);
-
- result = CallNextEventHandler (next_handler, event);
- if (result != eventNotHandledErr)
- return result;
+ OSStatus err;
+ Lisp_Object id_key;
+ int num_params;
+ const EventParamName *names;
+ const EventParamType *types;
+ static const EventParamName names_pfm[] =
+ {kEventParamServiceMessageName, kEventParamServiceUserData};
+ static const EventParamType types_pfm[] =
+ {typeCFStringRef, typeCFStringRef};
- err = GetEventParameter (event, kEventParamDirectObject, typeHICommand,
- NULL, sizeof (HICommand), NULL, &command);
+ switch (GetEventKind (event))
+ {
+ case kEventServicePaste:
+ id_key = Qpaste;
+ num_params = 0;
+ names = NULL;
+ types = NULL;
+ break;
- if (err != noErr || command.commandID == 0)
- return eventNotHandledErr;
+ case kEventServicePerform:
+ id_key = Qperform;
+ num_params = sizeof (names_pfm) / sizeof (names_pfm[0]);
+ names = names_pfm;
+ types = types_pfm;
+ break;
- /* A HI command event is mapped to an Apple event whose event class
- symbol is `hi-command' and event ID is its command ID. */
- err = mac_store_event_ref_as_apple_event (0, command.commandID,
- Qhi_command, Qnil,
- event, num_params, names, types);
- return err == noErr ? noErr : eventNotHandledErr;
-}
+ default:
+ abort ();
+ }
-static OSStatus
-init_command_handler ()
-{
- static const EventTypeSpec specs[] =
- {{kEventClassCommand, kEventCommandProcess}};
- static EventHandlerUPP handle_command_eventUPP = NULL;
+ err = mac_store_event_ref_as_apple_event (0, 0, Qservice, id_key,
+ event, num_params,
+ names, types);
- if (handle_command_eventUPP == NULL)
- handle_command_eventUPP = NewEventHandlerUPP (mac_handle_command_event);
- return InstallApplicationEventHandler (handle_command_eventUPP,
- GetEventTypeCount (specs), specs,
- NULL, NULL);
+ return err;
}
+#endif /* MAC_OSX */
static pascal OSStatus
mac_handle_window_event (next_handler, event, data)
@@ -9800,47 +10681,88 @@ mac_handle_window_event (next_handler, event, data)
EventRef event;
void *data;
{
- WindowPtr wp;
- OSStatus result, err;
+ WindowRef wp;
+ OSStatus err, result = eventNotHandledErr;
struct frame *f;
UInt32 attributes;
XSizeHints *size_hints;
err = GetEventParameter (event, kEventParamDirectObject, typeWindowRef,
- NULL, sizeof (WindowPtr), NULL, &wp);
+ NULL, sizeof (WindowRef), NULL, &wp);
if (err != noErr)
return eventNotHandledErr;
f = mac_window_to_frame (wp);
switch (GetEventKind (event))
{
+ /* -- window refresh events -- */
+
case kEventWindowUpdate:
result = CallNextEventHandler (next_handler, event);
if (result != eventNotHandledErr)
- return result;
+ break;
do_window_update (wp);
- return noErr;
+ result = noErr;
+ break;
- case kEventWindowGetIdealSize:
- result = CallNextEventHandler (next_handler, event);
- if (result != eventNotHandledErr)
- return result;
+ /* -- window state change events -- */
- {
- Point ideal_size = mac_get_ideal_size (f);
+ case kEventWindowShowing:
+ size_hints = FRAME_SIZE_HINTS (f);
+ if (!(size_hints->flags & (USPosition | PPosition)))
+ {
+ struct frame *sf = SELECTED_FRAME ();
- err = SetEventParameter (event, kEventParamDimensions,
- typeQDPoint, sizeof (Point), &ideal_size);
- if (err == noErr)
- return noErr;
- }
+ if (!(FRAME_MAC_P (sf) && sf->async_visible))
+ RepositionWindow (wp, NULL, kWindowCenterOnMainScreen);
+ else
+ {
+ RepositionWindow (wp, FRAME_MAC_WINDOW (sf),
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
+ kWindowCascadeStartAtParentWindowScreen
+#else
+ kWindowCascadeOnParentWindowScreen
+#endif
+ );
+#if USE_MAC_TOOLBAR
+ /* This is a workaround. RepositionWindow fails to put
+ a window at the cascading position when its parent
+ window has a Carbon HIToolbar. */
+ if ((f->left_pos == sf->left_pos
+ && f->top_pos == sf->top_pos)
+ || (f->left_pos == sf->left_pos + 10 * 2
+ && f->top_pos == sf->top_pos + 32 * 2))
+ MoveWindowStructure (wp, sf->left_pos + 10, sf->top_pos + 32);
+#endif
+ }
+ result = noErr;
+ }
+ break;
+
+ case kEventWindowHiding:
+ /* Before unmapping the window, update the WM_SIZE_HINTS
+ property to claim that the current position of the window is
+ user-specified, rather than program-specified, so that when
+ the window is mapped again, it will be placed at the same
+ location, without forcing the user to position it by hand
+ again (they have already done that once for this window.) */
+ x_wm_set_size_hint (f, (long) 0, 1);
+ result = noErr;
+ break;
+
+ case kEventWindowShown:
+ case kEventWindowHidden:
+ case kEventWindowCollapsed:
+ case kEventWindowExpanded:
+ mac_handle_visibility_change (f);
+ result = noErr;
break;
case kEventWindowBoundsChanging:
result = CallNextEventHandler (next_handler, event);
if (result != eventNotHandledErr)
- return result;
+ break;
err = GetEventParameter (event, kEventParamAttributes, typeUInt32,
NULL, sizeof (UInt32), NULL, &attributes);
@@ -9884,7 +10806,7 @@ mac_handle_window_event (next_handler, event, data)
bounds.bottom = bounds.top + height;
SetEventParameter (event, kEventParamCurrentBounds,
typeQDRectangle, sizeof (Rect), &bounds);
- return noErr;
+ result = noErr;
}
break;
@@ -9915,21 +10837,12 @@ mac_handle_window_event (next_handler, event, data)
if (attributes & kWindowBoundsChangeOriginChanged)
mac_handle_origin_change (f);
- return noErr;
-
- case kEventWindowShown:
- case kEventWindowHidden:
- case kEventWindowExpanded:
- case kEventWindowCollapsed:
- result = CallNextEventHandler (next_handler, event);
-
- mac_handle_visibility_change (f);
- return noErr;
-
+ result = noErr;
break;
+ /* -- window action events -- */
+
case kEventWindowClose:
- result = CallNextEventHandler (next_handler, event);
{
struct input_event buf;
@@ -9939,11 +10852,26 @@ mac_handle_window_event (next_handler, event, data)
buf.arg = Qnil;
kbd_buffer_store_event (&buf);
}
- return noErr;
+ result = noErr;
+ break;
+
+ case kEventWindowGetIdealSize:
+ result = CallNextEventHandler (next_handler, event);
+ if (result != eventNotHandledErr)
+ break;
+
+ {
+ Point ideal_size = mac_get_ideal_size (f);
+
+ err = SetEventParameter (event, kEventParamDimensions,
+ typeQDPoint, sizeof (Point), &ideal_size);
+ if (err == noErr)
+ result = noErr;
+ }
+ break;
#ifdef MAC_OSX
case kEventWindowToolbarSwitchMode:
- result = CallNextEventHandler (next_handler, event);
{
static const EventParamName names[] = {kEventParamDirectObject,
kEventParamWindowMouseLocation,
@@ -9965,23 +10893,184 @@ mac_handle_window_event (next_handler, event, data)
event, num_params,
names, types);
}
- return err == noErr ? noErr : result;
+ if (err == noErr)
+ result = noErr;
+ break;
#endif
#if USE_MAC_TSM
+ /* -- window focus events -- */
+
case kEventWindowFocusAcquired:
- result = CallNextEventHandler (next_handler, event);
err = mac_tsm_resume ();
- return err == noErr ? noErr : result;
+ if (err == noErr)
+ result = noErr;
+ break;
case kEventWindowFocusRelinquish:
- result = CallNextEventHandler (next_handler, event);
err = mac_tsm_suspend ();
- return err == noErr ? noErr : result;
+ if (err == noErr)
+ result = noErr;
+ break;
#endif
+
+ default:
+ abort ();
}
- return eventNotHandledErr;
+ return result;
+}
+
+static pascal OSStatus
+mac_handle_application_event (next_handler, event, data)
+ EventHandlerCallRef next_handler;
+ EventRef event;
+ void *data;
+{
+ OSStatus err, result = eventNotHandledErr;
+
+ switch (GetEventKind (event))
+ {
+#if USE_MAC_TSM
+ case kEventAppActivated:
+ err = mac_tsm_resume ();
+ break;
+
+ case kEventAppDeactivated:
+ err = mac_tsm_suspend ();
+ break;
+#endif
+
+ default:
+ abort ();
+ }
+
+ if (err == noErr)
+ result = noErr;
+
+ return result;
+}
+
+static pascal OSStatus
+mac_handle_keyboard_event (next_handler, event, data)
+ EventHandlerCallRef next_handler;
+ EventRef event;
+ void *data;
+{
+ OSStatus err, result = eventNotHandledErr;
+ UInt32 event_kind, key_code, modifiers;
+ unsigned char char_code;
+
+ event_kind = GetEventKind (event);
+ switch (event_kind)
+ {
+ case kEventRawKeyDown:
+ case kEventRawKeyRepeat:
+ case kEventRawKeyUp:
+ /* When using Carbon Events, we need to pass raw keyboard events
+ to the TSM ourselves. If TSM handles it, it will pass back
+ noErr, otherwise it will pass back "eventNotHandledErr" and
+ we can process it normally. */
+ result = CallNextEventHandler (next_handler, event);
+ if (result != eventNotHandledErr)
+ break;
+
+ if (read_socket_inev == NULL)
+ break;
+
+#if USE_MAC_TSM
+ if (read_socket_inev->kind != NO_EVENT)
+ {
+ result = noErr;
+ break;
+ }
+#endif
+
+ if (event_kind == kEventRawKeyUp)
+ break;
+
+ err = GetEventParameter (event, kEventParamKeyMacCharCodes,
+ typeChar, NULL,
+ sizeof (char), NULL, &char_code);
+ if (err != noErr)
+ break;
+
+ err = GetEventParameter (event, kEventParamKeyCode,
+ typeUInt32, NULL,
+ sizeof (UInt32), NULL, &key_code);
+ if (err != noErr)
+ break;
+
+ err = GetEventParameter (event, kEventParamKeyModifiers,
+ typeUInt32, NULL,
+ sizeof (UInt32), NULL, &modifiers);
+ if (err != noErr)
+ break;
+
+ do_keystroke ((event_kind == kEventRawKeyDown ? keyDown : autoKey),
+ char_code, key_code, modifiers,
+ ((unsigned long)
+ (GetEventTime (event) / kEventDurationMillisecond)),
+ read_socket_inev);
+ result = noErr;
+ break;
+
+ default:
+ abort ();
+ }
+
+ return result;
+}
+
+static pascal OSStatus
+mac_handle_command_event (next_handler, event, data)
+ EventHandlerCallRef next_handler;
+ EventRef event;
+ void *data;
+{
+ OSStatus err, result = eventNotHandledErr;
+ HICommand command;
+ static const EventParamName names[] =
+ {kEventParamDirectObject, kEventParamKeyModifiers};
+ static const EventParamType types[] =
+ {typeHICommand, typeUInt32};
+ int num_params = sizeof (names) / sizeof (names[0]);
+
+ err = GetEventParameter (event, kEventParamDirectObject, typeHICommand,
+ NULL, sizeof (HICommand), NULL, &command);
+ if (err != noErr)
+ return eventNotHandledErr;
+
+ switch (GetEventKind (event))
+ {
+ case kEventCommandProcess:
+ result = CallNextEventHandler (next_handler, event);
+ if (result != eventNotHandledErr)
+ break;
+
+ err = GetEventParameter (event, kEventParamDirectObject,
+ typeHICommand, NULL,
+ sizeof (HICommand), NULL, &command);
+
+ if (err != noErr || command.commandID == 0)
+ break;
+
+ /* A HI command event is mapped to an Apple event whose event
+ class symbol is `hi-command' and event ID is its command
+ ID. */
+ err = mac_store_event_ref_as_apple_event (0, command.commandID,
+ Qhi_command, Qnil,
+ event, num_params,
+ names, types);
+ if (err == noErr)
+ result = noErr;
+ break;
+
+ default:
+ abort ();
+ }
+
+ return result;
}
static pascal OSStatus
@@ -9990,13 +11079,13 @@ mac_handle_mouse_event (next_handler, event, data)
EventRef event;
void *data;
{
- OSStatus result, err;
+ OSStatus err, result = eventNotHandledErr;
switch (GetEventKind (event))
{
case kEventMouseWheelMoved:
{
- WindowPtr wp;
+ WindowRef wp;
struct frame *f;
EventMouseWheelAxis axis;
SInt32 delta;
@@ -10004,15 +11093,14 @@ mac_handle_mouse_event (next_handler, event, data)
result = CallNextEventHandler (next_handler, event);
if (result != eventNotHandledErr || read_socket_inev == NULL)
- return result;
+ break;
+
+ f = mac_focus_frame (&one_mac_display_info);
err = GetEventParameter (event, kEventParamWindowRef, typeWindowRef,
NULL, sizeof (WindowRef), NULL, &wp);
- if (err != noErr)
- break;
-
- f = mac_window_to_frame (wp);
- if (f != mac_focus_frame (&one_mac_display_info))
+ if (err != noErr
+ || wp != FRAME_MAC_WINDOW (f))
break;
err = GetEventParameter (event, kEventParamMouseWheelAxis,
@@ -10027,8 +11115,8 @@ mac_handle_mouse_event (next_handler, event, data)
if (err != noErr)
break;
- SetPortWindowPort (wp);
- GlobalToLocal (&point);
+ point.h -= f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
+ point.v -= f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
if (point.h < 0 || point.v < 0
|| EQ (window_from_coordinates (f, point.h, point.v, 0, 0, 0, 1),
f->tool_bar_window))
@@ -10049,68 +11137,16 @@ mac_handle_mouse_event (next_handler, event, data)
XSETINT (read_socket_inev->y, point.v);
XSETFRAME (read_socket_inev->frame_or_window, f);
- return noErr;
+ result = noErr;
}
break;
default:
- break;
- }
-
- return eventNotHandledErr;
-}
-
-#if USE_MAC_FONT_PANEL
-static pascal OSStatus
-mac_handle_font_event (next_handler, event, data)
- EventHandlerCallRef next_handler;
- EventRef event;
- void *data;
-{
- OSStatus result, err;
- Lisp_Object id_key;
- int num_params;
- const EventParamName *names;
- const EventParamType *types;
- static const EventParamName names_sel[] = {kEventParamATSUFontID,
- kEventParamATSUFontSize,
- kEventParamFMFontFamily,
- kEventParamFMFontSize,
- kEventParamFontColor};
- static const EventParamType types_sel[] = {typeATSUFontID,
- typeATSUSize,
- typeFMFontFamily,
- typeFMFontSize,
- typeFontColor};
-
- result = CallNextEventHandler (next_handler, event);
- if (result != eventNotHandledErr)
- return result;
-
- switch (GetEventKind (event))
- {
- case kEventFontPanelClosed:
- id_key = Qpanel_closed;
- num_params = 0;
- names = NULL;
- types = NULL;
- break;
-
- case kEventFontSelection:
- id_key = Qselection;
- num_params = sizeof (names_sel) / sizeof (names_sel[0]);
- names = names_sel;
- types = types_sel;
- break;
+ abort ();
}
- err = mac_store_event_ref_as_apple_event (0, 0, Qfont, id_key,
- event, num_params,
- names, types);
-
- return err == noErr ? noErr : eventNotHandledErr;
+ return result;
}
-#endif
#if USE_MAC_TSM
static pascal OSStatus
@@ -10119,7 +11155,7 @@ mac_handle_text_input_event (next_handler, event, data)
EventRef event;
void *data;
{
- OSStatus result, err = noErr;
+ OSStatus err, result;
Lisp_Object id_key = Qnil;
int num_params;
const EventParamName *names;
@@ -10167,6 +11203,8 @@ mac_handle_text_input_event (next_handler, event, data)
typeUnicodeText};
result = CallNextEventHandler (next_handler, event);
+ if (result != eventNotHandledErr)
+ return result;
switch (GetEventKind (event))
{
@@ -10178,6 +11216,7 @@ mac_handle_text_input_event (next_handler, event, data)
SetEventParameter (event, EVENT_PARAM_TEXT_INPUT_SEQUENCE_NUMBER,
typeUInt32, sizeof (UInt32), &seqno_uaia);
seqno_uaia++;
+ result = noErr;
break;
case kEventTextInputUnicodeForKeyEvent:
@@ -10194,8 +11233,8 @@ mac_handle_text_input_event (next_handler, event, data)
sizeof (UInt32), NULL, &modifiers);
if (err == noErr && mac_mapped_modifiers (modifiers))
/* There're mapped modifier keys. Process it in
- XTread_socket. */
- return eventNotHandledErr;
+ do_keystroke. */
+ break;
if (err == noErr)
err = GetEventParameter (kbd_event, kEventParamKeyUnicodes,
typeUnicodeText, NULL, 0, &actual_size,
@@ -10209,7 +11248,7 @@ mac_handle_text_input_event (next_handler, event, data)
sizeof (UniChar), NULL, &code);
if (err == noErr && code < 0x80)
{
- /* ASCII character. Process it in XTread_socket. */
+ /* ASCII character. Process it in do_keystroke. */
if (read_socket_inev && code >= 0x20 && code <= 0x7e)
{
UInt32 key_code;
@@ -10234,16 +11273,20 @@ mac_handle_text_input_event (next_handler, event, data)
XSETFRAME (read_socket_inev->frame_or_window, f);
}
}
- return eventNotHandledErr;
+ break;
}
}
+ if (err == noErr)
+ {
+ /* Non-ASCII keystrokes without mapped modifiers are
+ processed at the Lisp level. */
+ id_key = Qunicode_for_key_event;
+ num_params = sizeof (names_ufke) / sizeof (names_ufke[0]);
+ names = names_ufke;
+ types = types_ufke;
+ result = noErr;
+ }
}
- /* Non-ASCII keystrokes without mapped modifiers are processed
- at the Lisp level. */
- id_key = Qunicode_for_key_event;
- num_params = sizeof (names_ufke) / sizeof (names_ufke[0]);
- names = names_ufke;
- types = types_ufke;
break;
case kEventTextInputOffsetToPos:
@@ -10253,34 +11296,35 @@ mac_handle_text_input_event (next_handler, event, data)
Point p;
if (!OVERLAYP (Vmac_ts_active_input_overlay))
- return eventNotHandledErr;
+ break;
/* Strictly speaking, this is not always correct because
previous events may change some states about display. */
- if (NILP (Foverlay_get (Vmac_ts_active_input_overlay, Qbefore_string)))
+ if (!NILP (Foverlay_get (Vmac_ts_active_input_overlay, Qbefore_string)))
+ {
+ /* Active input area is displayed around the current point. */
+ f = SELECTED_FRAME ();
+ w = XWINDOW (f->selected_window);
+ }
+ else if (WINDOWP (echo_area_window))
{
- if (!WINDOWP (echo_area_window))
- return eventNotHandledErr;
-
/* Active input area is displayed in the echo area. */
w = XWINDOW (echo_area_window);
f = WINDOW_XFRAME (w);
}
else
- {
- /* Active input area is displayed around the current point. */
- f = SELECTED_FRAME ();
- w = XWINDOW (f->selected_window);
- }
+ break;
p.h = (WINDOW_TO_FRAME_PIXEL_X (w, w->cursor.x)
- + WINDOW_LEFT_FRINGE_WIDTH (w));
+ + WINDOW_LEFT_FRINGE_WIDTH (w)
+ + f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f));
p.v = (WINDOW_TO_FRAME_PIXEL_Y (w, w->cursor.y)
- + FONT_BASE (FRAME_FONT (f)));
- SetPortWindowPort (FRAME_MAC_WINDOW (f));
- LocalToGlobal (&p);
+ + FONT_BASE (FRAME_FONT (f))
+ + f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f));
err = SetEventParameter (event, kEventParamTextInputReplyPoint,
typeQDPoint, sizeof (typeQDPoint), &p);
+ if (err == noErr)
+ result = noErr;
}
break;
@@ -10292,146 +11336,152 @@ mac_handle_text_input_event (next_handler, event, data)
err = mac_store_event_ref_as_apple_event (0, 0, Qtext_input, id_key,
event, num_params,
names, types);
-
- return err == noErr ? noErr : result;
+ return result;
}
#endif
+#endif /* TARGET_API_MAC_CARBON */
+
-#ifdef MAC_OSX
OSStatus
-mac_store_service_event (event)
- EventRef event;
+install_window_handler (window)
+ WindowRef window;
{
- OSStatus err;
- Lisp_Object id_key;
- int num_params;
- const EventParamName *names;
- const EventParamType *types;
- static const EventParamName names_pfm[] =
- {kEventParamServiceMessageName, kEventParamServiceUserData};
- static const EventParamType types_pfm[] =
- {typeCFStringRef, typeCFStringRef};
+ OSStatus err = noErr;
- switch (GetEventKind (event))
+#if TARGET_API_MAC_CARBON
+ if (err == noErr)
{
- case kEventServicePaste:
- id_key = Qpaste;
- num_params = 0;
- names = NULL;
- types = NULL;
- break;
+ static const EventTypeSpec specs[] =
+ {
+ /* -- window refresh events -- */
+ {kEventClassWindow, kEventWindowUpdate},
+ /* -- window state change events -- */
+ {kEventClassWindow, kEventWindowShowing},
+ {kEventClassWindow, kEventWindowHiding},
+ {kEventClassWindow, kEventWindowShown},
+ {kEventClassWindow, kEventWindowHidden},
+ {kEventClassWindow, kEventWindowCollapsed},
+ {kEventClassWindow, kEventWindowExpanded},
+ {kEventClassWindow, kEventWindowBoundsChanging},
+ {kEventClassWindow, kEventWindowBoundsChanged},
+ /* -- window action events -- */
+ {kEventClassWindow, kEventWindowClose},
+ {kEventClassWindow, kEventWindowGetIdealSize},
+#ifdef MAC_OSX
+ {kEventClassWindow, kEventWindowToolbarSwitchMode},
+#endif
+#if USE_MAC_TSM
+ /* -- window focus events -- */
+ {kEventClassWindow, kEventWindowFocusAcquired},
+ {kEventClassWindow, kEventWindowFocusRelinquish},
+#endif
+ };
+ static EventHandlerUPP handle_window_eventUPP = NULL;
- case kEventServicePerform:
- id_key = Qperform;
- num_params = sizeof (names_pfm) / sizeof (names_pfm[0]);
- names = names_pfm;
- types = types_pfm;
- break;
+ if (handle_window_eventUPP == NULL)
+ handle_window_eventUPP = NewEventHandlerUPP (mac_handle_window_event);
- default:
- abort ();
+ err = InstallWindowEventHandler (window, handle_window_eventUPP,
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
}
+#endif
- err = mac_store_event_ref_as_apple_event (0, 0, Qservice, id_key,
- event, num_params,
- names, types);
+ if (err == noErr)
+ err = install_drag_handler (window);
return err;
}
-#endif /* MAC_OSX */
-#endif /* USE_CARBON_EVENTS */
+void
+remove_window_handler (window)
+ WindowRef window;
+{
+ remove_drag_handler (window);
+}
-OSStatus
-install_window_handler (window)
- WindowPtr window;
+#if TARGET_API_MAC_CARBON
+static OSStatus
+install_application_handler ()
{
OSStatus err = noErr;
-#if USE_CARBON_EVENTS
- static const EventTypeSpec specs_window[] =
- {{kEventClassWindow, kEventWindowUpdate},
- {kEventClassWindow, kEventWindowGetIdealSize},
- {kEventClassWindow, kEventWindowBoundsChanging},
- {kEventClassWindow, kEventWindowBoundsChanged},
- {kEventClassWindow, kEventWindowShown},
- {kEventClassWindow, kEventWindowHidden},
- {kEventClassWindow, kEventWindowExpanded},
- {kEventClassWindow, kEventWindowCollapsed},
- {kEventClassWindow, kEventWindowClose},
-#ifdef MAC_OSX
- {kEventClassWindow, kEventWindowToolbarSwitchMode},
-#endif
-#if USE_MAC_TSM
- {kEventClassWindow, kEventWindowFocusAcquired},
- {kEventClassWindow, kEventWindowFocusRelinquish},
-#endif
- };
- static const EventTypeSpec specs_mouse[] =
- {{kEventClassMouse, kEventMouseWheelMoved}};
- static EventHandlerUPP handle_window_eventUPP = NULL;
- static EventHandlerUPP handle_mouse_eventUPP = NULL;
-#if USE_MAC_FONT_PANEL
- static const EventTypeSpec specs_font[] =
- {{kEventClassFont, kEventFontPanelClosed},
- {kEventClassFont, kEventFontSelection}};
- static EventHandlerUPP handle_font_eventUPP = NULL;
-#endif
-#if USE_MAC_TSM
- static const EventTypeSpec specs_text_input[] =
- {{kEventClassTextInput, kEventTextInputUpdateActiveInputArea},
- {kEventClassTextInput, kEventTextInputUnicodeForKeyEvent},
- {kEventClassTextInput, kEventTextInputOffsetToPos}};
- static EventHandlerUPP handle_text_input_eventUPP = NULL;
-#endif
- if (handle_window_eventUPP == NULL)
- handle_window_eventUPP = NewEventHandlerUPP (mac_handle_window_event);
- if (handle_mouse_eventUPP == NULL)
- handle_mouse_eventUPP = NewEventHandlerUPP (mac_handle_mouse_event);
-#if USE_MAC_FONT_PANEL
- if (handle_font_eventUPP == NULL)
- handle_font_eventUPP = NewEventHandlerUPP (mac_handle_font_event);
-#endif
+ if (err == noErr)
+ {
+ static const EventTypeSpec specs[] = {
#if USE_MAC_TSM
- if (handle_text_input_eventUPP == NULL)
- handle_text_input_eventUPP =
- NewEventHandlerUPP (mac_handle_text_input_event);
+ {kEventClassApplication, kEventAppActivated},
+ {kEventClassApplication, kEventAppDeactivated},
#endif
- err = InstallWindowEventHandler (window, handle_window_eventUPP,
- GetEventTypeCount (specs_window),
- specs_window, NULL, NULL);
+ };
+
+ err = InstallApplicationEventHandler (NewEventHandlerUPP
+ (mac_handle_application_event),
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
+ }
+
if (err == noErr)
- err = InstallWindowEventHandler (window, handle_mouse_eventUPP,
- GetEventTypeCount (specs_mouse),
- specs_mouse, NULL, NULL);
-#if USE_MAC_FONT_PANEL
+ {
+ static const EventTypeSpec specs[] =
+ {{kEventClassKeyboard, kEventRawKeyDown},
+ {kEventClassKeyboard, kEventRawKeyRepeat},
+ {kEventClassKeyboard, kEventRawKeyUp}};
+
+ err = InstallApplicationEventHandler (NewEventHandlerUPP
+ (mac_handle_keyboard_event),
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
+ }
+
if (err == noErr)
- err = InstallWindowEventHandler (window, handle_font_eventUPP,
- GetEventTypeCount (specs_font),
- specs_font, NULL, NULL);
-#endif
+ {
+ static const EventTypeSpec specs[] =
+ {{kEventClassCommand, kEventCommandProcess}};
+
+ err = InstallApplicationEventHandler (NewEventHandlerUPP
+ (mac_handle_command_event),
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
+ }
+
+ if (err == noErr)
+ {
+ static const EventTypeSpec specs[] =
+ {{kEventClassMouse, kEventMouseWheelMoved}};
+
+ err = InstallApplicationEventHandler (NewEventHandlerUPP
+ (mac_handle_mouse_event),
+ GetEventTypeCount (specs),
+ specs, NULL, NULL);
+ }
+
#if USE_MAC_TSM
if (err == noErr)
- err = InstallWindowEventHandler (window, handle_text_input_eventUPP,
- GetEventTypeCount (specs_text_input),
- specs_text_input, window, NULL);
-#endif
+ {
+ static const EventTypeSpec spec[] =
+ {{kEventClassTextInput, kEventTextInputUpdateActiveInputArea},
+ {kEventClassTextInput, kEventTextInputUnicodeForKeyEvent},
+ {kEventClassTextInput, kEventTextInputOffsetToPos}};
+
+ err = InstallApplicationEventHandler (NewEventHandlerUPP
+ (mac_handle_text_input_event),
+ GetEventTypeCount (spec),
+ spec, NULL, NULL);
+ }
#endif
+
if (err == noErr)
- err = install_drag_handler (window);
+ err = install_menu_target_item_handler ();
+
+#ifdef MAC_OSX
if (err == noErr)
- err = install_menu_target_item_handler (window);
+ err = install_service_handler ();
+#endif
return err;
}
-
-void
-remove_window_handler (window)
- WindowPtr window;
-{
- remove_drag_handler (window);
-}
-
+#endif
static pascal void
mac_handle_dm_notification (event)
@@ -10440,20 +11490,48 @@ mac_handle_dm_notification (event)
mac_screen_config_changed = 1;
}
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+static void
+mac_handle_cg_display_reconfig (display, flags, user_info)
+ CGDirectDisplayID display;
+ CGDisplayChangeSummaryFlags flags;
+ void *user_info;
+{
+ mac_screen_config_changed = 1;
+}
+#endif
+
static OSErr
init_dm_notification_handler ()
{
- OSErr err;
- static DMNotificationUPP handle_dm_notificationUPP = NULL;
- ProcessSerialNumber psn;
+ OSErr err = noErr;
- if (handle_dm_notificationUPP == NULL)
- handle_dm_notificationUPP =
- NewDMNotificationUPP (mac_handle_dm_notification);
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
+#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
+ if (CGDisplayRegisterReconfigurationCallback != NULL)
+#endif
+ {
+ CGDisplayRegisterReconfigurationCallback (mac_handle_cg_display_reconfig,
+ NULL);
+ }
+#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020
+ else /* CGDisplayRegisterReconfigurationCallback == NULL */
+#endif
+#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 */
+#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 || MAC_OS_X_VERSION_MIN_REQUIRED == 1020
+ {
+ static DMNotificationUPP handle_dm_notificationUPP = NULL;
+ ProcessSerialNumber psn;
- err = GetCurrentProcess (&psn);
- if (err == noErr)
- err = DMRegisterNotifyProc (handle_dm_notificationUPP, &psn);
+ if (handle_dm_notificationUPP == NULL)
+ handle_dm_notificationUPP =
+ NewDMNotificationUPP (mac_handle_dm_notification);
+
+ err = GetCurrentProcess (&psn);
+ if (err == noErr)
+ err = DMRegisterNotifyProc (handle_dm_notificationUPP, &psn);
+ }
+#endif
return err;
}
@@ -10598,7 +11676,7 @@ main (void)
}
#endif
-#if !USE_CARBON_EVENTS
+#if !TARGET_API_MAC_CARBON
static RgnHandle mouse_region = NULL;
Boolean
@@ -10635,7 +11713,7 @@ mac_wait_next_event (er, sleep_time, dequeue)
er_buf.what = nullEvent;
return true;
}
-#endif /* not USE_CARBON_EVENTS */
+#endif /* not TARGET_API_MAC_CARBON */
#if TARGET_API_MAC_CARBON
OSStatus
@@ -10669,44 +11747,6 @@ mac_post_mouse_moved_event ()
return err;
}
-
-static void
-mac_set_unicode_keystroke_event (code, buf)
- UniChar code;
- struct input_event *buf;
-{
- int charset_id, c1, c2;
-
- if (code < 0x80)
- {
- buf->kind = ASCII_KEYSTROKE_EVENT;
- buf->code = code;
- }
- else if (code < 0x100)
- {
- if (code < 0xA0)
- charset_id = CHARSET_8_BIT_CONTROL;
- else
- charset_id = charset_latin_iso8859_1;
- buf->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
- buf->code = MAKE_CHAR (charset_id, code, 0);
- }
- else
- {
- if (code < 0x2500)
- charset_id = charset_mule_unicode_0100_24ff,
- code -= 0x100;
- else if (code < 0x33FF)
- charset_id = charset_mule_unicode_2500_33ff,
- code -= 0x2500;
- else if (code >= 0xE000)
- charset_id = charset_mule_unicode_e000_ffff,
- code -= 0xE000;
- c1 = (code / 96) + 32, c2 = (code % 96) + 32;
- buf->kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
- buf->code = MAKE_CHAR (charset_id, c1, c2);
- }
-}
#endif
/* Emacs calls this whenever it wants to read an input event from the
@@ -10718,7 +11758,7 @@ XTread_socket (sd, expected, hold_quit)
{
struct input_event inev;
int count = 0;
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
EventRef eventRef;
EventTargetRef toolbox_dispatcher;
#endif
@@ -10739,7 +11779,7 @@ XTread_socket (sd, expected, hold_quit)
++handling_signal;
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
toolbox_dispatcher = GetEventDispatcherTarget ();
while (
@@ -10748,9 +11788,9 @@ XTread_socket (sd, expected, hold_quit)
#endif
!ReceiveNextEvent (0, NULL, kEventDurationNoWait,
kEventRemoveFromQueue, &eventRef))
-#else /* !USE_CARBON_EVENTS */
+#else /* !TARGET_API_MAC_CARBON */
while (mac_wait_next_event (&er, 0, true))
-#endif /* !USE_CARBON_EVENTS */
+#endif /* !TARGET_API_MAC_CARBON */
{
int do_help = 0;
struct frame *f;
@@ -10760,44 +11800,33 @@ XTread_socket (sd, expected, hold_quit)
inev.kind = NO_EVENT;
inev.arg = Qnil;
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
timestamp = GetEventTime (eventRef) / kEventDurationMillisecond;
-#else
- timestamp = er.when * (1000 / 60); /* ticks to milliseconds */
-#endif
-#if USE_CARBON_EVENTS
- /* Handle new events */
if (!mac_convert_event_ref (eventRef, &er))
- {
- /* There used to be a handler for the kEventMouseWheelMoved
- event here. But as of Mac OS X 10.4, this kind of event
- is not directly posted to the main event queue by
- two-finger scrolling on the trackpad. Instead, some
- private event is posted and it is converted to a wheel
- event by the default handler for the application target.
- The converted one can be received by a Carbon event
- handler installed on a window target. */
- read_socket_inev = &inev;
- SendEventToEventTarget (eventRef, toolbox_dispatcher);
- read_socket_inev = NULL;
- }
- else
-#endif /* USE_CARBON_EVENTS */
+ goto OTHER;
+#else /* !TARGET_API_MAC_CARBON */
+ timestamp = er.when * (1000 / 60); /* ticks to milliseconds */
+#endif /* !TARGET_API_MAC_CARBON */
+
switch (er.what)
{
case mouseDown:
case mouseUp:
{
- WindowPtr window_ptr;
+ WindowRef window_ptr;
ControlPartCode part_code;
int tool_bar_p = 0;
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
+ OSStatus err;
+
/* This is needed to send mouse events like aqua window
buttons to the correct handler. */
- if (SendEventToEventTarget (eventRef, toolbox_dispatcher)
- != eventNotHandledErr)
+ read_socket_inev = &inev;
+ err = SendEventToEventTarget (eventRef, toolbox_dispatcher);
+ read_socket_inev = NULL;
+ if (err != eventNotHandledErr)
break;
#endif
last_mouse_glyph_frame = 0;
@@ -10845,17 +11874,20 @@ XTread_socket (sd, expected, hold_quit)
else
{
ControlPartCode control_part_code;
- ControlHandle ch;
- Point mouse_loc = er.where;
+ ControlRef ch;
+ Point mouse_loc;
#ifdef MAC_OSX
ControlKind control_kind;
#endif
f = mac_window_to_frame (window_ptr);
/* convert to local coordinates of new window */
- SetPortWindowPort (window_ptr);
-
- GlobalToLocal (&mouse_loc);
+ mouse_loc.h = (er.where.h
+ - (f->left_pos
+ + FRAME_OUTER_TO_INNER_DIFF_X (f)));
+ mouse_loc.v = (er.where.v
+ - (f->top_pos
+ + FRAME_OUTER_TO_INNER_DIFF_Y (f)));
#if TARGET_API_MAC_CARBON
ch = FindControlUnderMouse (mouse_loc, window_ptr,
&control_part_code);
@@ -10868,7 +11900,7 @@ XTread_socket (sd, expected, hold_quit)
&ch);
#endif
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
inev.code = mac_get_mouse_btn (eventRef);
inev.modifiers = mac_event_to_emacs_modifiers (eventRef);
#else
@@ -11004,16 +12036,14 @@ XTread_socket (sd, expected, hold_quit)
DragWindow (window_ptr, er.where, NULL);
#else /* not TARGET_API_MAC_CARBON */
DragWindow (window_ptr, er.where, &qd.screenBits.bounds);
-#endif /* not TARGET_API_MAC_CARBON */
/* Update the frame parameters. */
-#if !USE_CARBON_EVENTS
{
struct frame *f = mac_window_to_frame (window_ptr);
if (f && !f->async_iconified)
mac_handle_origin_change (f);
}
-#endif
+#endif /* not TARGET_API_MAC_CARBON */
break;
case inGoAway:
@@ -11037,41 +12067,38 @@ XTread_socket (sd, expected, hold_quit)
do_zoom_window (window_ptr, part_code);
break;
+#if USE_MAC_TOOLBAR
+ case inStructure:
+ {
+ OSStatus err;
+ HIViewRef ch;
+
+ err = HIViewGetViewForMouseEvent (HIViewGetRoot (window_ptr),
+ eventRef, &ch);
+ /* This doesn't work on Mac OS X 10.2. */
+ if (err == noErr)
+ HIViewClick (ch, eventRef);
+ }
+ break;
+#endif /* USE_MAC_TOOLBAR */
+
default:
break;
}
}
break;
+#if !TARGET_API_MAC_CARBON
case updateEvt:
-#if USE_CARBON_EVENTS
- if (SendEventToEventTarget (eventRef, toolbox_dispatcher)
- != eventNotHandledErr)
- break;
-#else
- do_window_update ((WindowPtr) er.message);
-#endif
+ do_window_update ((WindowRef) er.message);
break;
+#endif
case osEvt:
-#if USE_CARBON_EVENTS
- if (SendEventToEventTarget (eventRef, toolbox_dispatcher)
- != eventNotHandledErr)
- break;
-#endif
switch ((er.message >> 24) & 0x000000FF)
{
- case suspendResumeMessage:
-#if USE_MAC_TSM
- if (er.message & resumeFlag)
- mac_tsm_resume ();
- else
- mac_tsm_suspend ();
-#endif
- break;
-
case mouseMovedMessage:
-#if !USE_CARBON_EVENTS
+#if !TARGET_API_MAC_CARBON
SetRectRgn (mouse_region, er.where.h, er.where.v,
er.where.h + 1, er.where.v + 1);
#endif
@@ -11092,13 +12119,15 @@ XTread_socket (sd, expected, hold_quit)
if (f)
{
- WindowPtr wp = FRAME_MAC_WINDOW (f);
- Point mouse_pos = er.where;
-
- SetPortWindowPort (wp);
-
- GlobalToLocal (&mouse_pos);
-
+ WindowRef wp = FRAME_MAC_WINDOW (f);
+ Point mouse_pos;
+
+ mouse_pos.h = (er.where.h
+ - (f->left_pos
+ + FRAME_OUTER_TO_INNER_DIFF_X (f)));
+ mouse_pos.v = (er.where.v
+ - (f->top_pos
+ + FRAME_OUTER_TO_INNER_DIFF_Y (f)));
if (dpyinfo->grabbed && tracked_scroll_bar)
#ifdef USE_TOOLKIT_SCROLL_BARS
x_scroll_bar_handle_drag (wp, tracked_scroll_bar,
@@ -11143,6 +12172,10 @@ XTread_socket (sd, expected, hold_quit)
}
if (!note_mouse_movement (f, &mouse_pos))
help_echo_string = previous_help_echo_string;
+#if USE_MAC_TOOLBAR
+ else
+ mac_tool_bar_note_mouse_movement (f, eventRef);
+#endif
}
}
@@ -11152,18 +12185,18 @@ XTread_socket (sd, expected, hold_quit)
if (!NILP (help_echo_string) || !NILP (previous_help_echo_string))
do_help = 1;
break;
+
+ default:
+ goto OTHER;
}
break;
case activateEvt:
{
- WindowPtr window_ptr = (WindowPtr) er.message;
+ WindowRef window_ptr = (WindowRef) er.message;
+ OSErr err;
+ ControlRef root_control;
-#if USE_CARBON_EVENTS
- if (SendEventToEventTarget (eventRef, toolbox_dispatcher)
- != eventNotHandledErr)
- break;
-#endif
if (window_ptr == tip_window)
{
HideWindow (tip_window);
@@ -11171,25 +12204,38 @@ XTread_socket (sd, expected, hold_quit)
}
if (!is_emacs_window (window_ptr))
- break;
+ goto OTHER;
+
+ f = mac_window_to_frame (window_ptr);
if ((er.modifiers & activeFlag) != 0)
{
/* A window has been activated */
- Point mouse_loc = er.where;
+ Point mouse_loc;
+
+ err = GetRootControl (FRAME_MAC_WINDOW (f), &root_control);
+ if (err == noErr)
+ ActivateControl (root_control);
x_detect_focus_change (dpyinfo, &er, &inev);
- SetPortWindowPort (window_ptr);
- GlobalToLocal (&mouse_loc);
+ mouse_loc.h = (er.where.h
+ - (f->left_pos
+ + FRAME_OUTER_TO_INNER_DIFF_X (f)));
+ mouse_loc.v = (er.where.v
+ - (f->top_pos
+ + FRAME_OUTER_TO_INNER_DIFF_Y (f)));
/* Window-activated event counts as mouse movement,
so update things that depend on mouse position. */
- note_mouse_movement (mac_window_to_frame (window_ptr),
- &mouse_loc);
+ note_mouse_movement (f, &mouse_loc);
}
else
{
/* A window has been deactivated */
+ err = GetRootControl (FRAME_MAC_WINDOW (f), &root_control);
+ if (err == noErr)
+ DeactivateControl (root_control);
+
#ifdef USE_TOOLKIT_SCROLL_BARS
if (dpyinfo->grabbed && tracked_scroll_bar)
{
@@ -11210,7 +12256,6 @@ XTread_socket (sd, expected, hold_quit)
x_detect_focus_change (dpyinfo, &er, &inev);
- f = mac_window_to_frame (window_ptr);
if (f == dpyinfo->mouse_face_mouse_frame)
{
/* If we move outside the frame, then we're
@@ -11233,217 +12278,41 @@ XTread_socket (sd, expected, hold_quit)
case keyDown:
case keyUp:
case autoKey:
+ ObscureCursor ();
+
+ f = mac_focus_frame (dpyinfo);
+ XSETFRAME (inev.frame_or_window, f);
+
+ /* If mouse-highlight is an integer, input clears out mouse
+ highlighting. */
+ if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
+ && !EQ (f->tool_bar_window, dpyinfo->mouse_face_window))
+ {
+ clear_mouse_face (dpyinfo);
+ dpyinfo->mouse_face_hidden = 1;
+ }
+
{
- int keycode = (er.message & keyCodeMask) >> 8;
- static SInt16 last_key_script = -1;
- SInt16 current_key_script;
UInt32 modifiers = er.modifiers, mapped_modifiers;
-#if USE_CARBON_EVENTS && defined (MAC_OSX)
+#ifdef MAC_OSX
GetEventParameter (eventRef, kEventParamKeyModifiers,
typeUInt32, NULL,
sizeof (UInt32), NULL, &modifiers);
#endif
mapped_modifiers = mac_mapped_modifiers (modifiers);
-#if USE_CARBON_EVENTS && (defined (MAC_OSX) || USE_MAC_TSM)
- /* When using Carbon Events, we need to pass raw keyboard
- events to the TSM ourselves. If TSM handles it, it
- will pass back noErr, otherwise it will pass back
- "eventNotHandledErr" and we can process it
- normally. */
+#if TARGET_API_MAC_CARBON
if (!(mapped_modifiers
& ~(mac_pass_command_to_system ? cmdKey : 0)
& ~(mac_pass_control_to_system ? controlKey : 0)))
- {
- OSStatus err;
-
- read_socket_inev = &inev;
- err = SendEventToEventTarget (eventRef, toolbox_dispatcher);
- read_socket_inev = NULL;
- if (err != eventNotHandledErr)
- break;
- }
-#endif
- if (er.what == keyUp)
- break;
-
- ObscureCursor ();
-
- f = mac_focus_frame (dpyinfo);
-
- if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
- && !EQ (f->tool_bar_window, dpyinfo->mouse_face_window))
- {
- clear_mouse_face (dpyinfo);
- dpyinfo->mouse_face_hidden = 1;
- }
-
- current_key_script = GetScriptManagerVariable (smKeyScript);
- if (last_key_script != current_key_script)
- {
- struct input_event event;
-
- EVENT_INIT (event);
- event.kind = LANGUAGE_CHANGE_EVENT;
- event.arg = Qnil;
- event.code = current_key_script;
- event.timestamp = timestamp;
- kbd_buffer_store_event (&event);
- count++;
- last_key_script = current_key_script;
- }
-
-#if USE_MAC_TSM
- if (inev.kind != NO_EVENT)
- break;
-#endif
-
-#ifdef MAC_OSX
- if (mapped_modifiers & kEventKeyModifierFnMask
- && keycode <= 0x7f
- && fn_keycode_to_keycode_table[keycode])
- keycode = fn_keycode_to_keycode_table[keycode];
-#endif
- if (keycode <= 0x7f && keycode_to_xkeysym_table [keycode])
- {
- inev.kind = NON_ASCII_KEYSTROKE_EVENT;
- inev.code = 0xff00 | keycode_to_xkeysym_table [keycode];
-#ifdef MAC_OSX
- if (modifiers & kEventKeyModifierFnMask
- && keycode <= 0x7f
- && fn_keycode_to_keycode_table[keycode] == keycode)
- modifiers &= ~kEventKeyModifierFnMask;
-#endif
- }
- else if (mapped_modifiers)
- {
- /* translate the keycode back to determine the
- original key */
-#ifdef MAC_OSX
- UCKeyboardLayout *uchr_ptr = NULL;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
- OSStatus err;
- KeyboardLayoutRef layout;
-
- err = KLGetCurrentKeyboardLayout (&layout);
- if (err == noErr)
- KLGetKeyboardLayoutProperty (layout, kKLuchrData,
- (const void **) &uchr_ptr);
-#else
- static SInt16 last_key_layout_id = 0;
- static Handle uchr_handle = (Handle)-1;
- SInt16 current_key_layout_id =
- GetScriptVariable (current_key_script, smScriptKeys);
-
- if (uchr_handle == (Handle)-1
- || last_key_layout_id != current_key_layout_id)
- {
- uchr_handle = GetResource ('uchr', current_key_layout_id);
- last_key_layout_id = current_key_layout_id;
- }
- if (uchr_handle)
- uchr_ptr = (UCKeyboardLayout *)*uchr_handle;
-#endif
-
- if (uchr_ptr)
- {
- OSStatus status;
- UInt16 key_action = er.what - keyDown;
- UInt32 modifier_key_state =
- (modifiers & ~mapped_modifiers) >> 8;
- UInt32 keyboard_type = LMGetKbdType ();
- SInt32 dead_key_state = 0;
- UniChar code;
- UniCharCount actual_length;
-
- status = UCKeyTranslate (uchr_ptr,
- keycode, key_action,
- modifier_key_state,
- keyboard_type,
- kUCKeyTranslateNoDeadKeysMask,
- &dead_key_state,
- 1, &actual_length, &code);
- if (status == noErr && actual_length == 1)
- mac_set_unicode_keystroke_event (code, &inev);
- }
-#endif /* MAC_OSX */
-
- if (inev.kind == NO_EVENT)
- {
- /* This code comes from Keyboard Resource,
- Appendix C of IM - Text. This is necessary
- since shift is ignored in KCHR table
- translation when option or command is pressed.
- It also does not translate correctly
- control-shift chars like C-% so mask off shift
- here also. */
- /* Mask off modifier keys that are mapped to some
- Emacs modifiers. */
- int new_modifiers = er.modifiers & ~mapped_modifiers;
- /* set high byte of keycode to modifier high byte*/
- int new_keycode = keycode | new_modifiers;
- Ptr kchr_ptr = (Ptr) GetScriptManagerVariable (smKCHRCache);
- unsigned long some_state = 0;
- UInt32 new_char_code;
-
- new_char_code = KeyTranslate (kchr_ptr, new_keycode,
- &some_state);
- if (new_char_code == 0)
- /* Seems like a dead key. Append up-stroke. */
- new_char_code = KeyTranslate (kchr_ptr,
- new_keycode | 0x80,
- &some_state);
- if (new_char_code)
- {
- inev.kind = ASCII_KEYSTROKE_EVENT;
- inev.code = new_char_code & 0xff;
- }
- }
- }
-
- if (inev.kind == NO_EVENT)
- {
- inev.kind = ASCII_KEYSTROKE_EVENT;
- inev.code = er.message & charCodeMask;
- }
-
- inev.modifiers = mac_to_emacs_modifiers (modifiers);
- inev.modifiers |= (extra_keyboard_modifiers
- & (meta_modifier | alt_modifier
- | hyper_modifier | super_modifier));
- XSETFRAME (inev.frame_or_window, f);
-
-#if TARGET_API_MAC_CARBON
- if (inev.kind == ASCII_KEYSTROKE_EVENT
- && inev.code >= 0x80 && inev.modifiers)
- {
- OSStatus err;
- TextEncoding encoding = kTextEncodingMacRoman;
- TextToUnicodeInfo ttu_info;
-
- UpgradeScriptInfoToTextEncoding (current_key_script,
- kTextLanguageDontCare,
- kTextRegionDontCare,
- NULL, &encoding);
- err = CreateTextToUnicodeInfoByEncoding (encoding, &ttu_info);
- if (err == noErr)
- {
- UniChar code;
- Str255 pstr;
- ByteCount unicode_len;
-
- pstr[0] = 1;
- pstr[1] = inev.code;
- err = ConvertFromPStringToUnicode (ttu_info, pstr,
- sizeof (UniChar),
- &unicode_len, &code);
- if (err == noErr && unicode_len == sizeof (UniChar))
- mac_set_unicode_keystroke_event (code, &inev);
- DisposeTextToUnicodeInfo (&ttu_info);
- }
- }
+ goto OTHER;
+ else
#endif
+ if (er.what != keyUp)
+ do_keystroke (er.what, er.message & charCodeMask,
+ (er.message & keyCodeMask) >> 8,
+ modifiers, timestamp, &inev);
}
break;
@@ -11452,9 +12321,19 @@ XTread_socket (sd, expected, hold_quit)
break;
default:
+ OTHER:
+#if TARGET_API_MAC_CARBON
+ {
+ OSStatus err;
+
+ read_socket_inev = &inev;
+ err = SendEventToEventTarget (eventRef, toolbox_dispatcher);
+ read_socket_inev = NULL;
+ }
+#endif
break;
}
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
ReleaseEvent (eventRef);
#endif
@@ -11488,7 +12367,6 @@ XTread_socket (sd, expected, hold_quit)
}
count++;
}
-
}
/* If the focus was just given to an autoraising frame,
@@ -11506,7 +12384,7 @@ XTread_socket (sd, expected, hold_quit)
mac_screen_config_changed = 0;
}
-#if !USE_CARBON_EVENTS
+#if !TARGET_API_MAC_CARBON
/* Check which frames are still visible. We do this here because
there doesn't seem to be any direct notification from the Window
Manager that the visibility of a window has changed (at least,
@@ -11611,7 +12489,7 @@ make_mac_terminal_frame (struct frame *f)
if (!(FRAME_MAC_WINDOW (f) =
NewCWindow (NULL, &r, "\p", true, dBoxProc,
- (WindowPtr) -1, 1, (long) f->output_data.mac)))
+ (WindowRef) -1, 1, (long) f->output_data.mac)))
abort ();
/* so that update events can find this mac_output struct */
f->output_data.mac->mFP = f; /* point back to emacs frame */
@@ -11662,6 +12540,7 @@ mac_term_init (display_name, xrm_option, resource_name)
char *resource_name;
{
struct mac_display_info *dpyinfo;
+ struct terminal *terminal;
BLOCK_INPUT;
@@ -11677,6 +12556,13 @@ mac_term_init (display_name, xrm_option, resource_name)
dpyinfo = &one_mac_display_info;
bzero (dpyinfo, sizeof (*dpyinfo));
+ terminal = mac_create_terminal (dpyinfo);
+
+ /* Set the name of the terminal. */
+ terminal->name = (char *) xmalloc (SBYTES (display_name) + 1);
+ strncpy (terminal->name, SDATA (display_name), SBYTES (display_name));
+ terminal->name[SBYTES (display_name)] = 0;
+
#ifdef MAC_OSX
dpyinfo->mac_id_name
= (char *) xmalloc (SCHARS (Vinvocation_name)
@@ -11718,6 +12604,14 @@ mac_term_init (display_name, xrm_option, resource_name)
x_display_name_list);
dpyinfo->name_list_element = XCAR (x_display_name_list);
+ /* FIXME: Untested.
+ Add the default keyboard. */
+ add_keyboard_wait_descriptor (0);
+
+#if USE_CG_DRAWING
+ mac_init_fringe (terminal->rif);
+#endif
+
UNBLOCK_INPUT;
return dpyinfo;
@@ -11801,7 +12695,6 @@ init_menu_bar ()
&menu, &menu_index);
if (err == noErr)
SetMenuItemCommandKey (menu, menu_index, false, 0);
-#if USE_CARBON_EVENTS
EnableMenuCommand (NULL, kHICommandPreferences);
err = GetIndMenuItemWithCommandID (NULL, kHICommandPreferences, 1,
&menu, &menu_index);
@@ -11813,10 +12706,9 @@ init_menu_bar ()
InsertMenuItemTextWithCFString (menu, CFSTR ("About Emacs"),
0, 0, kHICommandAbout);
}
-#endif /* USE_CARBON_EVENTS */
#else /* !MAC_OSX */
-#if USE_CARBON_EVENTS
- SetMenuItemCommandID (GetMenuHandle (M_APPLE), I_ABOUT, kHICommandAbout);
+#if TARGET_API_MAC_CARBON
+ SetMenuItemCommandID (GetMenuRef (M_APPLE), I_ABOUT, kHICommandAbout);
#endif
#endif
}
@@ -11880,62 +12772,102 @@ static struct redisplay_interface x_redisplay_interface =
mac_shift_glyphs_for_insert
};
-void
+static struct terminal *
+mac_create_terminal (struct mac_display_info *dpyinfo)
+{
+ struct terminal *terminal;
+
+ terminal = create_terminal ();
+
+ terminal->type = output_mac;
+ terminal->display_info.mac = dpyinfo;
+ dpyinfo->terminal = terminal;
+
+ terminal->clear_frame_hook = x_clear_frame;
+ terminal->ins_del_lines_hook = x_ins_del_lines;
+ terminal->delete_glyphs_hook = x_delete_glyphs;
+ terminal->ring_bell_hook = XTring_bell;
+ terminal->reset_terminal_modes_hook = XTreset_terminal_modes;
+ terminal->set_terminal_modes_hook = XTset_terminal_modes;
+ terminal->update_begin_hook = x_update_begin;
+ terminal->update_end_hook = x_update_end;
+ terminal->set_terminal_window_hook = XTset_terminal_window;
+ terminal->read_socket_hook = XTread_socket;
+ terminal->frame_up_to_date_hook = XTframe_up_to_date;
+ terminal->mouse_position_hook = XTmouse_position;
+ terminal->frame_rehighlight_hook = XTframe_rehighlight;
+ terminal->frame_raise_lower_hook = XTframe_raise_lower;
+ /* terminal->fullscreen_hook = XTfullscreen_hook; */
+ terminal->set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
+ terminal->condemn_scroll_bars_hook = XTcondemn_scroll_bars;
+ terminal->redeem_scroll_bar_hook = XTredeem_scroll_bar;
+ terminal->judge_scroll_bars_hook = XTjudge_scroll_bars;
+ terminal->delete_frame_hook = x_destroy_window;
+ /* terminal->delete_terminal_hook = x_delete_terminal; */
+
+ terminal->rif = &x_redisplay_interface;
+#if 0
+ TTY_SCROLL_REGION_OK (CURTTY ()) = 1; /* we'll scroll partial frames */
+ TTY_CHAR_INS_DEL_OK (CURTTY ()) = 1;
+ TTY_LINE_INS_DEL_OK (CURTTY ()) = 1; /* we'll just blt 'em */
+ TTY_FAST_CLEAR_END_OF_LINE (CURTTY ()) = 1; /* X does this well */
+ TTY_MEMORY_BELOW_FRAME (CURTTY ()) = 0; /* we don't remember what
+ scrolls off the
+ bottom */
+#else
+ terminal->scroll_region_ok = 1; /* We'll scroll partial frames. */
+ terminal->char_ins_del_ok = 1;
+ terminal->line_ins_del_ok = 1; /* We'll just blt 'em. */
+ terminal->fast_clear_end_of_line = 1; /* X does this well. */
+ terminal->memory_below_frame = 0; /* We don't remember what scrolls
+ off the bottom. */
+
+#endif
+
+ /* FIXME: This keyboard setup is 100% untested, just copied from
+ w32_create_terminal in order to set window-system now that it's
+ a keyboard object. */
+ /* We don't yet support separate terminals on Mac, so don't try to share
+ keyboards between virtual terminals that are on the same physical
+ terminal like X does. */
+ terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
+ init_kboard (terminal->kboard);
+ terminal->kboard->Vwindow_system = intern ("mac");
+ terminal->kboard->next_kboard = all_kboards;
+ all_kboards = terminal->kboard;
+ /* Don't let the initial kboard remain current longer than necessary.
+ That would cause problems if a file loaded on startup tries to
+ prompt in the mini-buffer. */
+ if (current_kboard == initial_kboard)
+ current_kboard = terminal->kboard;
+ terminal->kboard->reference_count++;
+
+ return terminal;
+}
+
+static void
mac_initialize ()
{
- rif = &x_redisplay_interface;
-
- clear_frame_hook = x_clear_frame;
- ins_del_lines_hook = x_ins_del_lines;
- delete_glyphs_hook = x_delete_glyphs;
- ring_bell_hook = XTring_bell;
- reset_terminal_modes_hook = XTreset_terminal_modes;
- set_terminal_modes_hook = XTset_terminal_modes;
- update_begin_hook = x_update_begin;
- update_end_hook = x_update_end;
- set_terminal_window_hook = XTset_terminal_window;
- read_socket_hook = XTread_socket;
- frame_up_to_date_hook = XTframe_up_to_date;
- mouse_position_hook = XTmouse_position;
- frame_rehighlight_hook = XTframe_rehighlight;
- frame_raise_lower_hook = XTframe_raise_lower;
-
- set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
- condemn_scroll_bars_hook = XTcondemn_scroll_bars;
- redeem_scroll_bar_hook = XTredeem_scroll_bar;
- judge_scroll_bars_hook = XTjudge_scroll_bars;
-
- scroll_region_ok = 1; /* we'll scroll partial frames */
- char_ins_del_ok = 1;
- line_ins_del_ok = 1; /* we'll just blt 'em */
- fast_clear_end_of_line = 1; /* X does this well */
- memory_below_frame = 0; /* we don't remember what scrolls
- off the bottom */
+
baud_rate = 19200;
last_tool_bar_item = -1;
any_help_event_p = 0;
/* Try to use interrupt input; if we can't, then start polling. */
- Fset_input_mode (Qt, Qnil, Qt, Qnil);
+ Fset_input_interrupt_mode (Qt);
BLOCK_INPUT;
#if TARGET_API_MAC_CARBON
-#if USE_CARBON_EVENTS
-#ifdef MAC_OSX
- init_service_handler ();
-#endif /* MAC_OSX */
-
- init_command_handler ();
+ install_application_handler ();
init_menu_bar ();
#if USE_MAC_TSM
init_tsm ();
#endif
-#endif /* USE_CARBON_EVENTS */
#ifdef MAC_OSX
init_coercion_handler ();
@@ -11955,11 +12887,10 @@ mac_initialize ()
#if USE_CG_DRAWING
init_cg_color ();
-
- mac_init_fringe ();
#endif
UNBLOCK_INPUT;
+
}
@@ -11985,7 +12916,7 @@ syms_of_macterm ()
Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier));
Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
Qhi_command = intern ("hi-command"); staticpro (&Qhi_command);
#ifdef MAC_OSX
Qtoolbar_switch_mode = intern ("toolbar-switch-mode");
@@ -12110,7 +13041,7 @@ The symbol `reverse' means that the option-key will register for
mouse-3 and the command-key will register for mouse-2. */);
Vmac_emulate_three_button_mouse = Qnil;
-#if USE_CARBON_EVENTS
+#if TARGET_API_MAC_CARBON
DEFVAR_BOOL ("mac-wheel-button-is-mouse-2", &mac_wheel_button_is_mouse_2,
doc: /* *Non-nil if the wheel button is mouse-2 and the right click mouse-3.
Otherwise, the right click will be treated as mouse-2 and the wheel
diff --git a/src/macterm.h b/src/macterm.h
index 6a68f39762d..9fbbbc5a2f5 100644
--- a/src/macterm.h
+++ b/src/macterm.h
@@ -64,6 +64,9 @@ struct mac_display_info
/* Chain of all mac_display_info structures. */
struct mac_display_info *next;
+ /* The generic display parameters corresponding to this X display. */
+ struct terminal *terminal;
+
/* This is a cons cell of the form (NAME . FONT-LIST-CACHE).
The same cons cell also appears in x_display_name_list. */
Lisp_Object name_list_element;
@@ -333,6 +336,16 @@ struct mac_output
/* Hints for the size and the position of a window. */
XSizeHints *size_hints;
+#if USE_MAC_TOOLBAR
+ /* This variable records the gravity value of the window position if
+ the window has an external tool bar when it is created. The
+ position of the window is adjusted using this information when
+ the tool bar is first redisplayed. Once the tool bar is
+ redisplayed, it is set to 0 in order to avoid further
+ adjustment. */
+ int toolbar_win_gravity;
+#endif
+
#if USE_CG_DRAWING
/* Quartz 2D graphics context. */
CGContextRef cg_context;
@@ -348,9 +361,6 @@ typedef struct mac_output mac_output;
#define FRAME_MAC_WINDOW(f) ((f)->output_data.mac->window_desc)
#define FRAME_X_WINDOW(f) ((f)->output_data.mac->window_desc)
-#define FRAME_FOREGROUND_PIXEL(f) ((f)->output_data.x->foreground_pixel)
-#define FRAME_BACKGROUND_PIXEL(f) ((f)->output_data.x->background_pixel)
-
#define FRAME_FONT(f) ((f)->output_data.mac->font)
#define FRAME_FONTSET(f) ((f)->output_data.mac->fontset)
@@ -369,6 +379,12 @@ typedef struct mac_output mac_output;
/* This is the 'font_info *' which frame F has. */
#define FRAME_MAC_FONT_TABLE(f) (FRAME_MAC_DISPLAY_INFO (f)->font_table)
+/* The difference in pixels between the top left corner of the
+ Emacs window (including possible window manager decorations)
+ and FRAME_MAC_WINDOW (f). */
+#define FRAME_OUTER_TO_INNER_DIFF_X(f) ((f)->x_pixels_diff)
+#define FRAME_OUTER_TO_INNER_DIFF_Y(f) ((f)->y_pixels_diff)
+
/* Value is the smallest width of any character in any font on frame F. */
#define FRAME_SMALLEST_CHAR_WIDTH(F) \
@@ -406,9 +422,9 @@ struct scroll_bar {
/* The next and previous in the chain of scroll bars in this frame. */
Lisp_Object next, prev;
- /* The Mac control handle of this scroll bar. Since this is a
+ /* The Mac control reference of this scroll bar. Since this is a
pointer value, we store it split into two Lisp integers. */
- Lisp_Object control_handle_low, control_handle_high;
+ Lisp_Object control_ref_low, control_ref_high;
/* The position and size of the scroll bar in pixels, relative to the
frame. */
@@ -435,6 +451,12 @@ struct scroll_bar {
being dragged, this is Qnil. */
Lisp_Object dragging;
+#ifdef MAC_OSX
+ /* t if the background of the fringe that is adjacent to a scroll
+ bar is extended to the gap between the fringe and the bar. */
+ Lisp_Object fringe_extended_p;
+#endif
+
#ifdef USE_TOOLKIT_SCROLL_BARS
/* The position and size of the scroll bar handle track area in
pixels, relative to the frame. */
@@ -466,14 +488,14 @@ struct scroll_bar {
/* Extract the Mac control handle of the scroll bar from a struct
scroll_bar. */
-#define SCROLL_BAR_CONTROL_HANDLE(ptr) \
- ((ControlHandle) SCROLL_BAR_PACK ((ptr)->control_handle_low, \
- (ptr)->control_handle_high))
+#define SCROLL_BAR_CONTROL_REF(ptr) \
+ ((ControlRef) SCROLL_BAR_PACK ((ptr)->control_ref_low, \
+ (ptr)->control_ref_high))
/* Store a Mac control handle in a struct scroll_bar. */
-#define SET_SCROLL_BAR_CONTROL_HANDLE(ptr, handle) \
- (SCROLL_BAR_UNPACK ((ptr)->control_handle_low, \
- (ptr)->control_handle_high, (unsigned long) (handle)))
+#define SET_SCROLL_BAR_CONTROL_REF(ptr, ref) \
+ (SCROLL_BAR_UNPACK ((ptr)->control_ref_low, \
+ (ptr)->control_ref_high, (unsigned long) (ref)))
/* Return the inside width of a vertical scroll bar, given the outside
width. */
@@ -614,10 +636,9 @@ extern void x_free_frame_resources P_ ((struct frame *));
extern void x_destroy_window P_ ((struct frame *));
extern void x_wm_set_size_hint P_ ((struct frame *, long, int));
extern void x_delete_display P_ ((struct x_display_info *));
-extern void mac_initialize P_ ((void));
-extern Pixmap XCreatePixmap P_ ((Display *, WindowPtr, unsigned int,
+extern Pixmap XCreatePixmap P_ ((Display *, WindowRef, unsigned int,
unsigned int, unsigned int));
-extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, WindowPtr, char *,
+extern Pixmap XCreatePixmapFromBitmapData P_ ((Display *, WindowRef, char *,
unsigned int, unsigned int,
unsigned long, unsigned long,
unsigned int));
@@ -626,7 +647,7 @@ extern GC XCreateGC P_ ((Display *, void *, unsigned long, XGCValues *));
extern void XFreeGC P_ ((Display *, GC));
extern void XSetForeground P_ ((Display *, GC, unsigned long));
extern void XSetBackground P_ ((Display *, GC, unsigned long));
-extern void XSetWindowBackground P_ ((Display *, WindowPtr, unsigned long));
+extern void XSetWindowBackground P_ ((Display *, WindowRef, unsigned long));
extern void XDrawLine P_ ((Display *, Pixmap, GC, int, int, int, int));
extern void mac_clear_area P_ ((struct frame *, int, int,
unsigned int, unsigned int));
@@ -634,8 +655,8 @@ extern void mac_unload_font P_ ((struct mac_display_info *, XFontStruct *));
extern int mac_font_panel_visible_p P_ ((void));
extern OSStatus mac_show_hide_font_panel P_ ((void));
extern OSStatus mac_set_font_info_for_selection P_ ((struct frame *, int, int));
-extern OSStatus install_window_handler P_ ((WindowPtr));
-extern void remove_window_handler P_ ((WindowPtr));
+extern OSStatus install_window_handler P_ ((WindowRef));
+extern void remove_window_handler P_ ((WindowRef));
extern OSStatus mac_post_mouse_moved_event P_ ((void));
#if !TARGET_API_MAC_CARBON
extern void do_apple_menu P_ ((SInt16));
@@ -643,7 +664,12 @@ extern void do_apple_menu P_ ((SInt16));
#if USE_CG_DRAWING
extern void mac_prepare_for_quickdraw P_ ((struct frame *));
#endif
+extern void mac_get_window_bounds P_ ((struct frame *, Rect *, Rect *));
extern int mac_quit_char_key_p P_ ((UInt32, UInt32));
+#if USE_MAC_TOOLBAR
+extern void update_frame_tool_bar P_ ((FRAME_PTR f));
+extern void free_frame_tool_bar P_ ((FRAME_PTR f));
+#endif
#define FONT_TYPE_FOR_UNIBYTE(font, ch) 0
#define FONT_TYPE_FOR_MULTIBYTE(font, ch) 0
@@ -654,8 +680,6 @@ extern void x_clear_frame_selections P_ ((struct frame *));
/* Defined in macfns.c */
-extern int have_menus_p P_ ((void));
-
extern void x_real_positions P_ ((struct frame *, int *, int *));
extern void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
extern int x_pixel_width P_ ((struct frame *));
diff --git a/src/makefile.w32-in b/src/makefile.w32-in
index 488aadf8a29..65c5d87b845 100644
--- a/src/makefile.w32-in
+++ b/src/makefile.w32-in
@@ -56,8 +56,7 @@ FULL_LINK_FLAGS = $(LINK_FLAGS) $(TEMACS_EXTRA_LINK)
#
OBJ0 = $(BLD)/emacs.$(O)
-OBJ1 = $(BLD)/abbrev.$(O) \
- $(BLD)/alloc.$(O) \
+OBJ1 = $(BLD)/alloc.$(O) \
$(BLD)/atimer.$(O) \
$(BLD)/buffer.$(O) \
$(BLD)/bytecode.$(O) \
@@ -123,7 +122,8 @@ OBJ1 = $(BLD)/abbrev.$(O) \
$(BLD)/ccl.$(O) \
$(BLD)/fontset.$(O) \
$(BLD)/fringe.$(O) \
- $(BLD)/image.$(O)
+ $(BLD)/image.$(O) \
+ $(BLD)/terminal.$(O)
WIN32OBJ = $(BLD)/w32term.$(O) \
$(BLD)/w32xfns.$(O) \
@@ -270,20 +270,6 @@ cleanall: clean
EMACS_ROOT = ..
SRC = .
-$(BLD)/abbrev.$(O) : \
- $(SRC)/abbrev.c \
- $(EMACS_ROOT)/src/s/ms-w32.h \
- $(EMACS_ROOT)/src/m/intel386.h \
- $(EMACS_ROOT)/src/config.h \
- $(SRC)/buffer.h \
- $(SRC)/charset.h \
- $(SRC)/commands.h \
- $(SRC)/dispextern.h \
- $(SRC)/syntax.h \
- $(SRC)/w32bdf.h \
- $(SRC)/w32gui.h \
- $(SRC)/window.h
-
$(BLD)/alloc.$(O) : \
$(SRC)/alloc.c \
$(EMACS_ROOT)/src/s/ms-w32.h \
@@ -381,6 +367,8 @@ $(BLD)/callproc.$(O) : \
$(SRC)/process.h \
$(SRC)/syssignal.h \
$(SRC)/systty.h \
+ $(SRC)/frame.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32.h
$(BLD)/casefiddle.$(O) : \
@@ -470,6 +458,8 @@ $(BLD)/coding.$(O) : \
$(SRC)/composite.h \
$(SRC)/dispextern.h \
$(SRC)/intervals.h \
+ $(SRC)/frame.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
$(SRC)/window.h
@@ -497,7 +487,8 @@ $(BLD)/data.$(O) : \
$(SRC)/frame.h \
$(SRC)/keyboard.h \
$(SRC)/puresize.h \
- $(SRC)/syssignal.h
+ $(SRC)/syssignal.h \
+ $(SRC)/termhooks.h
$(BLD)/dired.$(O) : \
$(SRC)/dired.c \
@@ -700,6 +691,7 @@ $(BLD)/fns.$(O) : \
$(SRC)/keymap.h \
$(SRC)/md5.h \
$(SRC)/systime.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
$(SRC)/window.h
@@ -716,6 +708,7 @@ $(BLD)/fontset.$(O) : \
$(SRC)/fontset.h \
$(SRC)/frame.h \
$(SRC)/keyboard.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
$(SRC)/window.h
@@ -735,6 +728,7 @@ $(BLD)/frame.$(O) : \
$(SRC)/frame.h \
$(SRC)/keyboard.h \
$(SRC)/systime.h \
+ $(SRC)/termchar.h \
$(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
@@ -904,6 +898,7 @@ $(BLD)/lread.$(O) : \
$(EMACS_ROOT)/src/config.h \
$(EMACS_ROOT)/nt/inc/sys/file.h \
$(EMACS_ROOT)/src/epaths.h \
+ $(SRC)/blockinput.h \
$(SRC)/buffer.h \
$(SRC)/ccl.h \
$(SRC)/charset.h \
@@ -958,6 +953,7 @@ $(BLD)/minibuf.$(O) : \
$(SRC)/keyboard.h \
$(SRC)/keymap.h \
$(SRC)/syntax.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
$(SRC)/window.h
@@ -1119,6 +1115,7 @@ $(BLD)/scroll.$(O) : \
$(SRC)/frame.h \
$(SRC)/keyboard.h \
$(SRC)/termchar.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
$(SRC)/window.h
@@ -1185,6 +1182,7 @@ $(BLD)/sysdep.$(O) : \
$(EMACS_ROOT)/nt/inc/sys/file.h \
$(SRC)/atimer.h \
$(SRC)/blockinput.h \
+ $(SRC)/cm.h \
$(SRC)/dispextern.h \
$(SRC)/frame.h \
$(SRC)/keyboard.h \
@@ -1230,6 +1228,18 @@ $(BLD)/termcap.$(O) : \
$(EMACS_ROOT)/src/config.h \
$(EMACS_ROOT)/nt/inc/sys/file.h
+$(BLD)/terminal.$(O) : \
+ $(SRC)/terminal.c \
+ $(EMACS_ROOT)/src/s/ms-w32.h \
+ $(EMACS_ROOT)/src/m/intel386.h \
+ $(EMACS_ROOT)/src/config.h \
+ $(SRC)/charset.h \
+ $(SRC)/coding.h \
+ $(SRC)/frame.h \
+ $(SRC)/keyboard.h \
+ $(SRC)/termchar.h \
+ $(SRC)/termhooks.h
+
$(BLD)/textprop.$(O) : \
$(SRC)/textprop.c \
$(EMACS_ROOT)/src/s/ms-w32.h \
@@ -1343,6 +1353,8 @@ $(BLD)/xfaces.$(O): \
$(SRC)/intervals.h \
$(SRC)/keyboard.h \
$(SRC)/systime.h \
+ $(SRC)/termchar.h \
+ $(SRC)/termhooks.h \
$(SRC)/w32bdf.h \
$(SRC)/w32gui.h \
$(SRC)/w32term.h \
diff --git a/src/marker.c b/src/marker.c
index a57dafa3f3b..0c89f71d79a 100644
--- a/src/marker.c
+++ b/src/marker.c
@@ -452,9 +452,12 @@ Returns nil if MARKER points into a dead buffer. */)
if (XMARKER (marker)->buffer)
{
XSETBUFFER (buf, XMARKER (marker)->buffer);
- /* Return marker's buffer only if it is not dead. */
- if (!NILP (XBUFFER (buf)->name))
- return buf;
+ /* If the buffer is dead, we're in trouble: the buffer pointer here
+ does not preserve the buffer from being GC'd (it's weak), so
+ markers have to be unlinked from their buffer as soon as the buffer
+ is killed. */
+ eassert (!NILP (XBUFFER (buf)->name));
+ return buf;
}
return Qnil;
}
diff --git a/src/minibuf.c b/src/minibuf.c
index bd07e2cdd36..5cd821e5179 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -35,6 +35,7 @@ Boston, MA 02110-1301, USA. */
#include "syntax.h"
#include "intervals.h"
#include "keymap.h"
+#include "termhooks.h"
extern int quit_char;
@@ -256,9 +257,13 @@ string_to_object (val, defalt)
GCPRO2 (val, defalt);
- if (STRINGP (val) && SCHARS (val) == 0
- && STRINGP (defalt))
- val = defalt;
+ if (STRINGP (val) && SCHARS (val) == 0)
+ {
+ if (STRINGP (defalt))
+ val = defalt;
+ else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
+ val = XCAR (defalt);
+ }
expr_and_pos = Fread_from_string (val, Qnil, Qnil);
pos = XINT (Fcdr (expr_and_pos));
@@ -336,7 +341,7 @@ read_minibuf_noninteractive (map, initial, prompt, backup_n, expflag,
/* If Lisp form desired instead of string, parse it. */
if (expflag)
- val = string_to_object (val, defalt);
+ val = string_to_object (val, CONSP (defalt) ? XCAR (defalt) : defalt);
return val;
}
@@ -492,7 +497,6 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
if (EQ (Vminibuffer_completing_file_name, Qlambda))
Vminibuffer_completing_file_name = Qnil;
- single_kboard_state ();
#ifdef HAVE_X_WINDOWS
if (display_hourglass_p)
cancel_hourglass ();
@@ -530,7 +534,7 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
GCPRO5 (map, initial, val, ambient_dir, input_method);
if (!STRINGP (prompt))
- prompt = empty_string;
+ prompt = empty_unibyte_string;
if (!enable_recursive_minibuffers
&& minibuf_level > 0)
@@ -576,6 +580,8 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
if (minibuffer_auto_raise)
Fraise_frame (mini_frame);
+ temporarily_switch_to_single_kboard (XFRAME (mini_frame));
+
/* We have to do this after saving the window configuration
since that is what restores the current buffer. */
@@ -759,8 +765,12 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
XWINDOW (minibuf_window)->cursor.x = 0;
XWINDOW (minibuf_window)->must_be_updated_p = 1;
update_frame (XFRAME (selected_frame), 1, 1);
- if (rif && rif->flush_display)
- rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame));
+ {
+ struct frame *f = XFRAME (XWINDOW (minibuf_window)->frame);
+ struct redisplay_interface *rif = FRAME_RIF (f);
+ if (rif && rif->flush_display)
+ rif->flush_display (f);
+ }
}
/* Make minibuffer contents into a string. */
@@ -779,6 +789,8 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
histstring = val;
else if (STRINGP (defalt))
histstring = defalt;
+ else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
+ histstring = XCAR (defalt);
else
histstring = Qnil;
@@ -1046,8 +1058,8 @@ DEFUN ("read-minibuffer", Fread_minibuffer, Sread_minibuffer, 1, 2, 0,
doc: /* Return a Lisp object read using the minibuffer, unevaluated.
Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
is a string to insert in the minibuffer before reading.
-\(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
-arguments are used as in `read-from-minibuffer'.) */)
+\(INITIAL-CONTENTS can also be a cons of a string and an integer.
+Such arguments are used as in `read-from-minibuffer'.) */)
(prompt, initial_contents)
Lisp_Object prompt, initial_contents;
{
@@ -1061,8 +1073,8 @@ DEFUN ("eval-minibuffer", Feval_minibuffer, Seval_minibuffer, 1, 2, 0,
doc: /* Return value of Lisp expression read using the minibuffer.
Prompt with PROMPT. If non-nil, optional second arg INITIAL-CONTENTS
is a string to insert in the minibuffer before reading.
-\(INITIAL-CONTENTS can also be a cons of a string and an integer. Such
-arguments are used as in `read-from-minibuffer'.) */)
+\(INITIAL-CONTENTS can also be a cons of a string and an integer.
+Such arguments are used as in `read-from-minibuffer'.) */)
(prompt, initial_contents)
Lisp_Object prompt, initial_contents;
{
@@ -1096,7 +1108,7 @@ Fifth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits
Qnil, history, default_value,
inherit_input_method);
if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
- val = default_value;
+ val = CONSP (default_value) ? XCAR (default_value) : default_value;
return val;
}
@@ -1219,7 +1231,7 @@ The argument PROMPT should be a string ending with a colon and a space. */)
args[0] = build_string ("%s (default %s): ");
args[1] = prompt;
- args[2] = def;
+ args[2] = CONSP (def) ? XCAR (def) : def;
prompt = Fformat (3, args);
}
@@ -1289,11 +1301,14 @@ is used to further constrain the set of candidates. */)
int bestmatchsize = 0;
/* These are in bytes, too. */
int compare, matchsize;
- int type = (HASH_TABLE_P (collection) ? 3
- : VECTORP (collection) ? 2
- : NILP (collection) || (CONSP (collection)
- && (!SYMBOLP (XCAR (collection))
- || NILP (XCAR (collection)))));
+ enum { function_table, list_table, obarray_table, hash_table}
+ type = (HASH_TABLE_P (collection) ? hash_table
+ : VECTORP (collection) ? obarray_table
+ : ((NILP (collection)
+ || (CONSP (collection)
+ && (!SYMBOLP (XCAR (collection))
+ || NILP (XCAR (collection)))))
+ ? list_table : function_table));
int index = 0, obsize = 0;
int matchcount = 0;
int bindcount = -1;
@@ -1301,7 +1316,7 @@ is used to further constrain the set of candidates. */)
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
CHECK_STRING (string);
- if (type == 0)
+ if (type == function_table)
return call3 (collection, string, predicate, Qnil);
bestmatch = bucket = Qnil;
@@ -1309,7 +1324,7 @@ is used to further constrain the set of candidates. */)
/* If COLLECTION is not a list, set TAIL just for gc pro. */
tail = collection;
- if (type == 2)
+ if (type == obarray_table)
{
collection = check_obarray (collection);
obsize = XVECTOR (collection)->size;
@@ -1323,7 +1338,7 @@ is used to further constrain the set of candidates. */)
/* elt gets the alist element or symbol.
eltstring gets the name to check as a completion. */
- if (type == 1)
+ if (type == list_table)
{
if (!CONSP (tail))
break;
@@ -1331,7 +1346,7 @@ is used to further constrain the set of candidates. */)
eltstring = CONSP (elt) ? XCAR (elt) : elt;
tail = XCDR (tail);
}
- else if (type == 2)
+ else if (type == obarray_table)
{
if (!EQ (bucket, zero))
{
@@ -1352,7 +1367,7 @@ is used to further constrain the set of candidates. */)
continue;
}
}
- else /* if (type == 3) */
+ else /* if (type == hash_table) */
{
while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection))
&& NILP (HASH_HASH (XHASH_TABLE (collection), index)))
@@ -1406,15 +1421,17 @@ is used to further constrain the set of candidates. */)
tem = Fcommandp (elt, Qnil);
else
{
- if (bindcount >= 0) {
- unbind_to (bindcount, Qnil);
- bindcount = -1;
- }
+ if (bindcount >= 0)
+ {
+ unbind_to (bindcount, Qnil);
+ bindcount = -1;
+ }
GCPRO4 (tail, string, eltstring, bestmatch);
- tem = type == 3
- ? call2 (predicate, elt,
- HASH_VALUE (XHASH_TABLE (collection), index - 1))
- : call1 (predicate, elt);
+ tem = (type == hash_table
+ ? call2 (predicate, elt,
+ HASH_VALUE (XHASH_TABLE (collection),
+ index - 1))
+ : call1 (predicate, elt));
UNGCPRO;
}
if (NILP (tem)) continue;
@@ -1718,9 +1735,15 @@ PREDICATE limits completion to a subset of COLLECTION.
See `try-completion' and `all-completions' for more details
on completion, COLLECTION, and PREDICATE.
-If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless
- the input is (or completes to) an element of COLLECTION or is null.
- If it is also not t, typing RET does not exit if it does non-null completion.
+REQUIRE-MATCH can take the following values:
+- t means that the user is not allowed to exit unless
+ the input is (or completes to) an element of COLLECTION or is null.
+- nil means that the user can exit with any input.
+- `confirm-only' means that the user can exit with any input, but she will
+ need to confirm her choice if the input is not an element of COLLECTION.
+- anything else behaves like t except that typing RET does not exit if it
+ does non-null completion.
+
If the input is null, `completing-read' returns DEF, or an empty string
if DEF is nil, regardless of the value of REQUIRE-MATCH.
@@ -1818,7 +1841,7 @@ Completion ignores case if the ambient value of
!NILP (inherit_input_method));
if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
- val = def;
+ val = CONSP (def) ? XCAR (def) : def;
RETURN_UNGCPRO (unbind_to (count, val));
}
@@ -2093,10 +2116,10 @@ string rather than a cons cell whose car is a string. */)
if (SYMBOLP (key))
key = Fsymbol_name (key);
- for (tail = list; !NILP (tail); tail = Fcdr (tail))
+ for (tail = list; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object elt, tem, thiscar;
- elt = Fcar (tail);
+ elt = XCAR (tail);
thiscar = CONSP (elt) ? XCAR (elt) : elt;
if (SYMBOLP (thiscar))
thiscar = Fsymbol_name (thiscar);
@@ -2231,6 +2254,18 @@ a repetition of this command will exit. */)
goto exit;
}
+ if (EQ (Vminibuffer_completion_confirm, intern ("confirm-only")))
+ { /* The user is permitted to exit with an input that's rejected
+ by test-completion, but at the condition to confirm her choice. */
+ if (EQ (current_kboard->Vlast_command, Vthis_command))
+ goto exit;
+ else
+ {
+ temp_echo_area_glyphs (build_string (" [Confirm]"));
+ return Qnil;
+ }
+ }
+
/* Call do_completion, but ignore errors. */
SET_PT (ZV);
val = internal_condition_case (complete_and_exit_1, Qerror,
diff --git a/src/msdos.c b/src/msdos.c
index ef65597f7e7..fc14be2705c 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -508,8 +508,8 @@ ScreenVisualBell (void)
{
/* This creates an xor-mask that will swap the default fore- and
background colors. */
- do_visible_bell (((the_only_x_display.foreground_pixel
- ^ the_only_x_display.background_pixel)
+ do_visible_bell (((FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ())
+ ^ FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()))
* 0x11) & 0x7f);
}
#endif
@@ -2531,8 +2531,8 @@ internal_terminal_init ()
initial_screen_colors[0] = initial_screen_colors[1] = -1;
bzero (&the_only_x_display, sizeof the_only_x_display);
- the_only_x_display.background_pixel = 7; /* White */
- the_only_x_display.foreground_pixel = 0; /* Black */
+ FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()) = 7; /* White */
+ FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) = 0; /* Black */
bright_bg ();
colors = getenv ("EMACSCOLORS");
if (colors && strlen (colors) >= 2)
@@ -2543,13 +2543,13 @@ internal_terminal_init ()
else if (isxdigit (colors[0]))
colors[0] -= (isupper (colors[0]) ? 'A' : 'a') - 10;
if (colors[0] >= 0 && colors[0] < 16)
- the_only_x_display.foreground_pixel = colors[0];
+ FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) = colors[0];
if (isdigit (colors[1]))
colors[1] -= '0';
else if (isxdigit (colors[1]))
colors[1] -= (isupper (colors[1]) ? 'A' : 'a') - 10;
if (colors[1] >= 0 && colors[1] < 16)
- the_only_x_display.background_pixel = colors[1];
+ FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()) = colors[1];
}
the_only_x_display.font = (XFontStruct *)1; /* must *not* be zero */
the_only_x_display.display_info.mouse_face_mouse_frame = NULL;
@@ -2583,7 +2583,7 @@ internal_terminal_init ()
set_terminal_modes_hook = IT_set_terminal_modes;
reset_terminal_modes_hook = IT_reset_terminal_modes;
set_terminal_window_hook = IT_set_terminal_window;
- char_ins_del_ok = 0;
+ TTY_CHAR_INS_DEL_OK (CURTTY ()) = 0;
#endif
}
@@ -4880,7 +4880,7 @@ croak (badfunc)
char *badfunc;
{
fprintf (stderr, "%s not yet implemented\r\n", badfunc);
- reset_sys_modes ();
+ reset_all_sys_modes ();
exit (1);
}
diff --git a/src/msdos.h b/src/msdos.h
index c45a5853a6c..a9379efb75d 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -115,7 +115,6 @@ struct window;
/* Defined in xfns.c; emulated on msdos.c */
-extern int have_menus_p P_ ((void));
extern void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object));
extern int x_pixel_width P_ ((struct frame *));
extern int x_pixel_height P_ ((struct frame *));
diff --git a/src/prefix-args.c b/src/prefix-args.c
index adf2743ba21..16d7b7dba17 100644
--- a/src/prefix-args.c
+++ b/src/prefix-args.c
@@ -53,6 +53,7 @@ Boston, MA 02110-1301, USA. */
#endif
#include <stdio.h>
+#include <stdlib.h>
int
main (argc, argv)
diff --git a/src/print.c b/src/print.c
index 88e7b6d1547..acac49eb801 100644
--- a/src/print.c
+++ b/src/print.c
@@ -34,6 +34,7 @@ Boston, MA 02110-1301, USA. */
#include "termchar.h"
#include "intervals.h"
#include "blockinput.h"
+#include "termhooks.h" /* For struct terminal. */
Lisp_Object Vstandard_output, Qstandard_output;
@@ -1033,11 +1034,7 @@ safe_debug_print (arg)
else
fprintf (stderr, "#<%s_LISP_OBJECT 0x%08lx>\r\n",
!valid ? "INVALID" : "SOME",
-#ifdef NO_UNION_TYPE
- (unsigned long) arg
-#else
- (unsigned long) arg.i
-#endif
+ (unsigned long) XHASH (arg)
);
}
@@ -1397,10 +1394,10 @@ print_preprocess (obj)
for (i = 0; i < print_number_index; i++)
if (EQ (PRINT_NUMBER_OBJECT (Vprint_number_table, i), obj))
{
- /* OBJ appears more than once. Let's remember that. */
+ /* OBJ appears more than once. Let's remember that. */
PRINT_NUMBER_STATUS (Vprint_number_table, i) = Qt;
print_depth--;
- return;
+ return;
}
/* OBJ is not yet recorded. Let's add to the table. */
@@ -1974,6 +1971,19 @@ print_object (obj, printcharfun, escapeflag)
}
PRINTCHAR ('>');
}
+ else if (TERMINALP (obj))
+ {
+ struct terminal *t = XTERMINAL (obj);
+ strout ("#<terminal ", -1, -1, printcharfun, 0);
+ sprintf (buf, "%d", t->id);
+ strout (buf, -1, -1, printcharfun, 0);
+ if (t->name)
+ {
+ strout (" on ", -1, -1, printcharfun, 0);
+ strout (t->name, -1, -1, printcharfun, 0);
+ }
+ PRINTCHAR ('>');
+ }
else if (HASH_TABLE_P (obj))
{
struct Lisp_Hash_Table *h = XHASH_TABLE (obj);
@@ -1986,7 +1996,7 @@ print_object (obj, printcharfun, escapeflag)
PRINTCHAR (' ');
strout (SDATA (SYMBOL_NAME (h->weak)), -1, -1, printcharfun, 0);
PRINTCHAR (' ');
- sprintf (buf, "%ld/%ld", (long) XFASTINT (h->count),
+ sprintf (buf, "%ld/%ld", (long) h->count,
(long) XVECTOR (h->next)->size);
strout (buf, -1, -1, printcharfun, 0);
}
@@ -2144,10 +2154,8 @@ print_object (obj, printcharfun, escapeflag)
case Lisp_Misc_Buffer_Local_Value:
strout ("#<buffer_local_value ", -1, -1, printcharfun, 0);
- goto do_buffer_local;
- case Lisp_Misc_Some_Buffer_Local_Value:
- strout ("#<some_buffer_local_value ", -1, -1, printcharfun, 0);
- do_buffer_local:
+ if (XBUFFER_LOCAL_VALUE (obj)->local_if_set)
+ strout ("[local-if-set] ", -1, -1, printcharfun, 0);
strout ("[realvalue] ", -1, -1, printcharfun, 0);
print_object (XBUFFER_LOCAL_VALUE (obj)->realvalue,
printcharfun, escapeflag);
diff --git a/src/process.c b/src/process.c
index 09705c436b7..eca9c47e582 100644
--- a/src/process.c
+++ b/src/process.c
@@ -121,12 +121,10 @@ Boston, MA 02110-1301, USA. */
#include <sys/wait.h>
#endif
-/* Disable IPv6 support for w32 until someone figures out how to do it
- properly. */
-#ifdef WINDOWSNT
-# ifdef AF_INET6
-# undef AF_INET6
-# endif
+#ifdef HAVE_RES_INIT
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
#endif
#include "lisp.h"
@@ -138,11 +136,11 @@ Boston, MA 02110-1301, USA. */
#include "charset.h"
#include "coding.h"
#include "process.h"
+#include "frame.h"
#include "termhooks.h"
#include "termopts.h"
#include "commands.h"
#include "keyboard.h"
-#include "frame.h"
#include "blockinput.h"
#include "dispextern.h"
#include "composite.h"
@@ -328,14 +326,18 @@ extern int timers_run;
static SELECT_TYPE input_wait_mask;
-/* Mask that excludes keyboard input descriptor (s). */
+/* Mask that excludes keyboard input descriptor(s). */
static SELECT_TYPE non_keyboard_wait_mask;
-/* Mask that excludes process input descriptor (s). */
+/* Mask that excludes process input descriptor(s). */
static SELECT_TYPE non_process_wait_mask;
+/* Mask for the gpm mouse input descriptor. */
+
+static SELECT_TYPE gpm_wait_mask;
+
#ifdef NON_BLOCKING_CONNECT
/* Mask of bits indicating the descriptors that we wait for connect to
complete on. Once they complete, they are removed from this mask
@@ -357,6 +359,9 @@ static int max_process_desc;
/* The largest descriptor currently in use for keyboard input. */
static int max_keyboard_desc;
+/* The largest descriptor currently in use for gpm mouse input. */
+static int max_gpm_desc;
+
/* Nonzero means delete a process right away if it exits. */
static int delete_exited_processes;
@@ -386,7 +391,7 @@ struct sockaddr_and_len {
int len;
} datagram_address[MAXDESC];
#define DATAGRAM_CHAN_P(chan) (datagram_address[chan].sa != 0)
-#define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XINT (XPROCESS (proc)->infd)].sa != 0)
+#define DATAGRAM_CONN_P(proc) (PROCESSP (proc) && datagram_address[XPROCESS (proc)->infd].sa != 0)
#else
#define DATAGRAM_CHAN_P(chan) (0)
#define DATAGRAM_CONN_P(proc) (0)
@@ -621,19 +626,19 @@ make_process (name)
p = allocate_process ();
- XSETINT (p->infd, -1);
- XSETINT (p->outfd, -1);
- XSETFASTINT (p->tick, 0);
- XSETFASTINT (p->update_tick, 0);
+ p->infd = -1;
+ p->outfd = -1;
+ p->tick = 0;
+ p->update_tick = 0;
p->pid = 0;
p->raw_status_new = 0;
p->status = Qrun;
p->mark = Fmake_marker ();
#ifdef ADAPTIVE_READ_BUFFERING
- p->adaptive_read_buffering = Qnil;
- XSETFASTINT (p->read_output_delay, 0);
- p->read_output_skip = Qnil;
+ p->adaptive_read_buffering = 0;
+ p->read_output_delay = 0;
+ p->read_output_skip = 0;
#endif
/* If name is already in use, modify it until it is unused. */
@@ -672,8 +677,8 @@ setup_process_coding_systems (process)
Lisp_Object process;
{
struct Lisp_Process *p = XPROCESS (process);
- int inch = XINT (p->infd);
- int outch = XINT (p->outfd);
+ int inch = p->infd;
+ int outch = p->outfd;
if (inch < 0 || outch < 0)
return;
@@ -685,7 +690,7 @@ setup_process_coding_systems (process)
proc_decode_coding_system[inch]);
if (! NILP (p->filter))
{
- if (NILP (p->filter_multibyte))
+ if (!p->filter_multibyte)
setup_raw_text_coding_system (proc_decode_coding_system[inch]);
}
else if (BUFFERP (p->buffer))
@@ -734,9 +739,9 @@ BUFFER may be a buffer or the name of one. */)
buf = Fget_buffer (buffer);
if (NILP (buf)) return Qnil;
- for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
+ for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
{
- proc = Fcdr (Fcar (tail));
+ proc = Fcdr (XCAR (tail));
if (PROCESSP (proc) && EQ (XPROCESS (proc)->buffer, buf))
return proc;
}
@@ -808,10 +813,10 @@ nil, indicating the current buffer's process. */)
if (NETCONN1_P (p))
{
p->status = Fcons (Qexit, Fcons (make_number (0), Qnil));
- XSETINT (p->tick, ++process_tick);
+ p->tick = ++process_tick;
status_notify (p);
}
- else if (XINT (p->infd) >= 0)
+ else if (p->infd >= 0)
{
#ifdef SIGCHLD
Lisp_Object symbol;
@@ -839,7 +844,7 @@ nil, indicating the current buffer's process. */)
/* Do this now, since remove_process will make sigchld_handler do nothing. */
p->status
= Fcons (Qsignal, Fcons (make_number (SIGKILL), Qnil));
- XSETINT (p->tick, ++process_tick);
+ p->tick = ++process_tick;
status_notify (p);
}
}
@@ -1031,18 +1036,18 @@ The string argument is normally a multibyte string, except:
(debug)
(set-process-filter process ...) */
- if (XINT (p->infd) >= 0)
+ if (p->infd >= 0)
{
if (EQ (filter, Qt) && !EQ (p->status, Qlisten))
{
- FD_CLR (XINT (p->infd), &input_wait_mask);
- FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
+ FD_CLR (p->infd, &input_wait_mask);
+ FD_CLR (p->infd, &non_keyboard_wait_mask);
}
else if (EQ (p->filter, Qt)
&& !EQ (p->command, Qt)) /* Network process not stopped. */
{
- FD_SET (XINT (p->infd), &input_wait_mask);
- FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
+ FD_SET (p->infd, &input_wait_mask);
+ FD_SET (p->infd, &non_keyboard_wait_mask);
}
}
@@ -1104,8 +1109,8 @@ DEFUN ("set-process-window-size", Fset_process_window_size,
CHECK_NATNUM (height);
CHECK_NATNUM (width);
- if (XINT (XPROCESS (process)->infd) < 0
- || set_window_size (XINT (XPROCESS (process)->infd),
+ if (XPROCESS (process)->infd < 0
+ || set_window_size (XPROCESS (process)->infd,
XINT (height), XINT (width)) <= 0)
return Qnil;
else
@@ -1133,7 +1138,7 @@ for the process which will run. */)
register Lisp_Object process, flag;
{
CHECK_PROCESS (process);
- XPROCESS (process)->inherit_coding_system_flag = flag;
+ XPROCESS (process)->inherit_coding_system_flag = !NILP (flag);
return flag;
}
@@ -1148,7 +1153,7 @@ the process output. */)
register Lisp_Object process;
{
CHECK_PROCESS (process);
- return XPROCESS (process)->inherit_coding_system_flag;
+ return XPROCESS (process)->inherit_coding_system_flag ? Qt : Qnil;
}
DEFUN ("set-process-query-on-exit-flag",
@@ -1161,7 +1166,7 @@ exiting if PROCESS is running. */)
register Lisp_Object process, flag;
{
CHECK_PROCESS (process);
- XPROCESS (process)->kill_without_query = Fnull (flag);
+ XPROCESS (process)->kill_without_query = NILP (flag);
return flag;
}
@@ -1173,7 +1178,7 @@ DEFUN ("process-query-on-exit-flag",
register Lisp_Object process;
{
CHECK_PROCESS (process);
- return Fnull (XPROCESS (process)->kill_without_query);
+ return (XPROCESS (process)->kill_without_query ? Qnil : Qt);
}
#ifdef DATAGRAM_SOCKETS
@@ -1340,15 +1345,15 @@ list_processes_1 (query_only)
w_buffer = 6; /* Buffer */
w_tty = 0; /* Omit if no ttys */
- for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
+ for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
{
int i;
- proc = Fcdr (Fcar (tail));
+ proc = Fcdr (XCAR (tail));
p = XPROCESS (proc);
if (NILP (p->childp))
continue;
- if (!NILP (query_only) && !NILP (p->kill_without_query))
+ if (!NILP (query_only) && p->kill_without_query)
continue;
if (STRINGP (p->name)
&& ( i = SCHARS (p->name), (i > w_proc)))
@@ -1403,15 +1408,15 @@ list_processes_1 (query_only)
Findent_to (i_command, minspace); write_string ("-------", -1);
write_string ("\n", -1);
- for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
+ for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
{
Lisp_Object symbol;
- proc = Fcdr (Fcar (tail));
+ proc = Fcdr (XCAR (tail));
p = XPROCESS (proc);
if (NILP (p->childp))
continue;
- if (!NILP (query_only) && !NILP (p->kill_without_query))
+ if (!NILP (query_only) && p->kill_without_query)
continue;
Finsert (1, &p->name);
@@ -1487,7 +1492,7 @@ list_processes_1 (query_only)
if (NILP (port))
port = Fformat_network_address (Fplist_get (p->childp, QClocal), Qnil);
sprintf (tembuf, "(network %s server on %s)\n",
- (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
+ (DATAGRAM_CHAN_P (p->infd) ? "datagram" : "stream"),
(STRINGP (port) ? (char *)SDATA (port) : "?"));
insert_string (tembuf);
}
@@ -1505,7 +1510,7 @@ list_processes_1 (query_only)
if (NILP (host))
host = Fformat_network_address (Fplist_get (p->childp, QCremote), Qnil);
sprintf (tembuf, "(network %s connection to %s)\n",
- (DATAGRAM_CHAN_P (XINT (p->infd)) ? "datagram" : "stream"),
+ (DATAGRAM_CHAN_P (p->infd) ? "datagram" : "stream"),
(STRINGP (host) ? (char *)SDATA (host) : "?"));
insert_string (tembuf);
}
@@ -1636,11 +1641,13 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
XPROCESS (proc)->sentinel = Qnil;
XPROCESS (proc)->filter = Qnil;
XPROCESS (proc)->filter_multibyte
- = buffer_defaults.enable_multibyte_characters;
+ = !NILP (buffer_defaults.enable_multibyte_characters);
XPROCESS (proc)->command = Flist (nargs - 2, args + 2);
#ifdef ADAPTIVE_READ_BUFFERING
- XPROCESS (proc)->adaptive_read_buffering = Vprocess_adaptive_read_buffering;
+ XPROCESS (proc)->adaptive_read_buffering
+ = (NILP (Vprocess_adaptive_read_buffering) ? 0
+ : EQ (Vprocess_adaptive_read_buffering, Qt) ? 1 : 2);
#endif
/* Make the process marker point into the process buffer (if any). */
@@ -1771,13 +1778,11 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
#endif /* not VMS */
XPROCESS (proc)->decoding_buf = make_uninit_string (0);
- XPROCESS (proc)->decoding_carryover = make_number (0);
+ XPROCESS (proc)->decoding_carryover = 0;
XPROCESS (proc)->encoding_buf = make_uninit_string (0);
- XPROCESS (proc)->encoding_carryover = make_number (0);
XPROCESS (proc)->inherit_coding_system_flag
- = (NILP (buffer) || !inherit_process_coding_system
- ? Qnil : Qt);
+ = !(NILP (buffer) || !inherit_process_coding_system);
create_process (proc, (char **) new_argv, current_dir);
@@ -1949,15 +1954,15 @@ create_process (process, new_argv, current_dir)
/* Record this as an active process, with its channels.
As a result, child_setup will close Emacs's side of the pipes. */
chan_process[inchannel] = process;
- XSETINT (XPROCESS (process)->infd, inchannel);
- XSETINT (XPROCESS (process)->outfd, outchannel);
+ XPROCESS (process)->infd = inchannel;
+ XPROCESS (process)->outfd = outchannel;
/* Previously we recorded the tty descriptor used in the subprocess.
It was only used for getting the foreground tty process, so now
we just reopen the device (see emacs_get_tty_pgrp) as this is
more portable (see USG_SUBTTY_WORKS above). */
- XPROCESS (process)->pty_flag = (pty_flag ? Qt : Qnil);
+ XPROCESS (process)->pty_flag = pty_flag;
XPROCESS (process)->status = Qrun;
setup_process_coding_systems (process);
@@ -2474,7 +2479,7 @@ DEFUN ("process-datagram-address", Fprocess_datagram_address, Sprocess_datagram_
if (!DATAGRAM_CONN_P (process))
return Qnil;
- channel = XINT (XPROCESS (process)->infd);
+ channel = XPROCESS (process)->infd;
return conv_sockaddr_to_lisp (datagram_address[channel].sa,
datagram_address[channel].len);
}
@@ -2494,7 +2499,7 @@ Returns nil upon error setting address, ADDRESS otherwise. */)
if (!DATAGRAM_CONN_P (process))
return Qnil;
- channel = XINT (XPROCESS (process)->infd);
+ channel = XPROCESS (process)->infd;
len = get_lisp_to_sockaddr_size (address, &family);
if (datagram_address[channel].len != len)
@@ -2659,7 +2664,7 @@ OPTION is not a supported option, return nil instead; otherwise return t. */)
if (!NETCONN1_P (p))
error ("Process is not a network process");
- s = XINT (p->infd);
+ s = p->infd;
if (s < 0)
error ("Process is not running");
@@ -2678,6 +2683,7 @@ OPTION is not a supported option, return nil instead; otherwise return t. */)
/* A version of request_sigio suitable for a record_unwind_protect. */
+#ifdef __ultrix__
static Lisp_Object
unwind_request_sigio (dummy)
Lisp_Object dummy;
@@ -2686,6 +2692,7 @@ unwind_request_sigio (dummy)
request_sigio ();
return Qnil;
}
+#endif
/* Create a network stream/datagram client/server process. Treated
exactly like a normal process when reading and writing. Primary
@@ -3084,6 +3091,11 @@ usage: (make-network-process &rest ARGS) */)
hints.ai_family = family;
hints.ai_socktype = socktype;
hints.ai_protocol = 0;
+
+#ifdef HAVE_RES_INIT
+ res_init ();
+#endif
+
ret = getaddrinfo (SDATA (host), portstring, &hints, &res);
if (ret)
#ifdef HAVE_GAI_STRERROR
@@ -3129,6 +3141,11 @@ usage: (make-network-process &rest ARGS) */)
as it may `hang' Emacs for a very long time. */
immediate_quit = 1;
QUIT;
+
+#ifdef HAVE_RES_INIT
+ res_init ();
+#endif
+
host_info_ptr = gethostbyname (SDATA (host));
immediate_quit = 0;
@@ -3160,6 +3177,10 @@ usage: (make-network-process &rest ARGS) */)
open_socket:
+#ifdef __ultrix__
+ /* Previously this was compiled unconditionally, but that seems
+ unnecessary on modern systems, and `unrequest_sigio' was a noop
+ under X anyway. --lorentey */
/* Kernel bugs (on Ultrix at least) cause lossage (not just EINTR)
when connect is interrupted. So let's not let it get interrupted.
Note we do not turn off polling, because polling is only used
@@ -3176,6 +3197,7 @@ usage: (make-network-process &rest ARGS) */)
record_unwind_protect (unwind_request_sigio, Qnil);
unrequest_sigio ();
}
+#endif
/* Do this in case we never enter the for-loop below. */
count1 = SPECPDL_INDEX ();
@@ -3415,18 +3437,18 @@ usage: (make-network-process &rest ARGS) */)
p->buffer = buffer;
p->sentinel = sentinel;
p->filter = filter;
- p->filter_multibyte = buffer_defaults.enable_multibyte_characters;
+ p->filter_multibyte = !NILP (buffer_defaults.enable_multibyte_characters);
/* Override the above only if :filter-multibyte is specified. */
if (! NILP (Fplist_member (contact, QCfilter_multibyte)))
- p->filter_multibyte = Fplist_get (contact, QCfilter_multibyte);
+ p->filter_multibyte = !NILP (Fplist_get (contact, QCfilter_multibyte));
p->log = Fplist_get (contact, QClog);
if (tem = Fplist_get (contact, QCnoquery), !NILP (tem))
- p->kill_without_query = Qt;
+ p->kill_without_query = 1;
if ((tem = Fplist_get (contact, QCstop), !NILP (tem)))
p->command = Qt;
p->pid = 0;
- XSETINT (p->infd, inch);
- XSETINT (p->outfd, outch);
+ p->infd = inch;
+ p->outfd = outch;
if (is_server && socktype == SOCK_STREAM)
p->status = Qlisten;
@@ -3547,13 +3569,11 @@ usage: (make-network-process &rest ARGS) */)
setup_process_coding_systems (proc);
p->decoding_buf = make_uninit_string (0);
- p->decoding_carryover = make_number (0);
+ p->decoding_carryover = 0;
p->encoding_buf = make_uninit_string (0);
- p->encoding_carryover = make_number (0);
p->inherit_coding_system_flag
- = (!NILP (tem) || NILP (buffer) || !inherit_process_coding_system
- ? Qnil : Qt);
+ = !(!NILP (tem) || NILP (buffer) || !inherit_process_coding_system);
UNGCPRO;
return proc;
@@ -3816,16 +3836,16 @@ deactivate_process (proc)
register int inchannel, outchannel;
register struct Lisp_Process *p = XPROCESS (proc);
- inchannel = XINT (p->infd);
- outchannel = XINT (p->outfd);
+ inchannel = p->infd;
+ outchannel = p->outfd;
#ifdef ADAPTIVE_READ_BUFFERING
- if (XINT (p->read_output_delay) > 0)
+ if (p->read_output_delay > 0)
{
if (--process_output_delay_count < 0)
process_output_delay_count = 0;
- XSETINT (p->read_output_delay, 0);
- p->read_output_skip = Qnil;
+ p->read_output_delay = 0;
+ p->read_output_skip = 0;
}
#endif
@@ -3847,8 +3867,8 @@ deactivate_process (proc)
emacs_close (outchannel);
#endif
- XSETINT (p->infd, -1);
- XSETINT (p->outfd, -1);
+ p->infd = -1;
+ p->outfd = -1;
#ifdef DATAGRAM_SOCKETS
if (DATAGRAM_CHAN_P (inchannel))
{
@@ -3896,8 +3916,8 @@ close_process_descs ()
process = chan_process[i];
if (!NILP (process))
{
- int in = XINT (XPROCESS (process)->infd);
- int out = XINT (XPROCESS (process)->outfd);
+ int in = XPROCESS (process)->infd;
+ int out = XPROCESS (process)->outfd;
if (in >= 0)
emacs_close (in);
if (out >= 0 && in != out)
@@ -4141,8 +4161,8 @@ server_accept_connection (server, channel)
p->filter = ps->filter;
p->command = Qnil;
p->pid = 0;
- XSETINT (p->infd, s);
- XSETINT (p->outfd, s);
+ p->infd = s;
+ p->outfd = s;
p->status = Qrun;
/* Client processes for accepted connections are not stopped initially. */
@@ -4165,12 +4185,11 @@ server_accept_connection (server, channel)
setup_process_coding_systems (proc);
p->decoding_buf = make_uninit_string (0);
- p->decoding_carryover = make_number (0);
+ p->decoding_carryover = 0;
p->encoding_buf = make_uninit_string (0);
- p->encoding_carryover = make_number (0);
p->inherit_coding_system_flag
- = (NILP (buffer) ? Qnil : ps->inherit_coding_system_flag);
+ = (NILP (buffer) ? 0 : ps->inherit_coding_system_flag);
if (!NILP (ps->log))
call3 (ps->log, server, proc,
@@ -4295,7 +4314,7 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
/* If wait_proc is a process to watch, set wait_channel accordingly. */
if (wait_proc != NULL)
- wait_channel = XINT (wait_proc->infd);
+ wait_channel = wait_proc->infd;
record_unwind_protect (wait_reading_process_output_unwind,
make_number (waiting_for_user_input_p));
@@ -4448,7 +4467,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
IF_NON_BLOCKING_CONNECT (Ctemp = connect_wait_mask);
EMACS_SET_SECS_USECS (timeout, 0, 0);
- if ((select (max (max_process_desc, max_keyboard_desc) + 1,
+ if ((select (max (max (max_process_desc, max_keyboard_desc),
+ max_gpm_desc) + 1,
&Atemp,
#ifdef NON_BLOCKING_CONNECT
(num_pending_connects > 0 ? &Ctemp : (SELECT_TYPE *)0),
@@ -4479,9 +4499,9 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
XSETPROCESS (proc, wait_proc);
/* Read data from the process, until we exhaust it. */
- while (XINT (wait_proc->infd) >= 0)
+ while (wait_proc->infd >= 0)
{
- nread = read_process_output (proc, XINT (wait_proc->infd));
+ nread = read_process_output (proc, wait_proc->infd);
if (nread == 0)
break;
@@ -4511,9 +4531,9 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
if (wait_proc && just_wait_proc)
{
- if (XINT (wait_proc->infd) < 0) /* Terminated */
+ if (wait_proc->infd < 0) /* Terminated */
break;
- FD_SET (XINT (wait_proc->infd), &Available);
+ FD_SET (wait_proc->infd, &Available);
check_delay = 0;
IF_NON_BLOCKING_CONNECT (check_connect = 0);
}
@@ -4561,7 +4581,7 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
#ifdef ADAPTIVE_READ_BUFFERING
/* Set the timeout for adaptive read buffering if any
- process has non-nil read_output_skip and non-zero
+ process has non-zero read_output_skip and non-zero
read_output_delay, and we are not reading output for a
specific wait_channel. It is not executed if
Vprocess_adaptive_read_buffering is nil. */
@@ -4576,16 +4596,16 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
if (NILP (proc))
continue;
/* Find minimum non-zero read_output_delay among the
- processes with non-nil read_output_skip. */
- if (XINT (XPROCESS (proc)->read_output_delay) > 0)
+ processes with non-zero read_output_skip. */
+ if (XPROCESS (proc)->read_output_delay > 0)
{
check_delay--;
- if (NILP (XPROCESS (proc)->read_output_skip))
+ if (!XPROCESS (proc)->read_output_skip)
continue;
FD_CLR (channel, &Available);
- XPROCESS (proc)->read_output_skip = Qnil;
- if (XINT (XPROCESS (proc)->read_output_delay) < usecs)
- usecs = XINT (XPROCESS (proc)->read_output_delay);
+ XPROCESS (proc)->read_output_skip = 0;
+ if (XPROCESS (proc)->read_output_delay < usecs)
+ usecs = XPROCESS (proc)->read_output_delay;
}
}
EMACS_SET_SECS_USECS (timeout, 0, usecs);
@@ -4593,7 +4613,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
}
#endif
- nfds = select (max (max_process_desc, max_keyboard_desc) + 1,
+ nfds = select (max (max (max_process_desc, max_keyboard_desc),
+ max_gpm_desc) + 1,
&Available,
#ifdef NON_BLOCKING_CONNECT
(check_connect ? &Connecting : (SELECT_TYPE *)0),
@@ -4857,7 +4878,7 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
else
{
/* Preserve status of processes already terminated. */
- XSETINT (XPROCESS (proc)->tick, ++process_tick);
+ XPROCESS (proc)->tick = ++process_tick;
deactivate_process (proc);
if (XPROCESS (proc)->raw_status_new)
update_status (XPROCESS (proc));
@@ -4909,7 +4930,7 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
#endif
if (xerrno)
{
- XSETINT (p->tick, ++process_tick);
+ p->tick = ++process_tick;
p->status = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil));
deactivate_process (proc);
}
@@ -4922,8 +4943,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
exec_sentinel (proc, build_string ("open\n"));
if (!EQ (p->filter, Qt) && !EQ (p->command, Qt))
{
- FD_SET (XINT (p->infd), &input_wait_mask);
- FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
+ FD_SET (p->infd, &input_wait_mask);
+ FD_SET (p->infd, &non_keyboard_wait_mask);
}
}
}
@@ -4997,7 +5018,7 @@ read_process_output (proc, channel)
register struct Lisp_Process *p = XPROCESS (proc);
register int opoint;
struct coding_system *coding = proc_decode_coding_system[channel];
- int carryover = XINT (p->decoding_carryover);
+ int carryover = p->decoding_carryover;
int readmax = 4096;
#ifdef VMS
@@ -5050,9 +5071,9 @@ read_process_output (proc, channel)
{
nbytes = emacs_read (channel, chars + carryover, readmax);
#ifdef ADAPTIVE_READ_BUFFERING
- if (nbytes > 0 && !NILP (p->adaptive_read_buffering))
+ if (nbytes > 0 && p->adaptive_read_buffering)
{
- int delay = XINT (p->read_output_delay);
+ int delay = p->read_output_delay;
if (nbytes < 256)
{
if (delay < READ_OUTPUT_DELAY_MAX_MAX)
@@ -5068,10 +5089,10 @@ read_process_output (proc, channel)
if (delay == 0)
process_output_delay_count--;
}
- XSETINT (p->read_output_delay, delay);
+ p->read_output_delay = delay;
if (delay)
{
- p->read_output_skip = Qt;
+ p->read_output_skip = 1;
process_output_skip = 1;
}
}
@@ -5089,7 +5110,7 @@ read_process_output (proc, channel)
}
#endif /* not VMS */
- XSETINT (p->decoding_carryover, 0);
+ p->decoding_carryover = 0;
/* At this point, NBYTES holds number of bytes just received
(including the one in proc_buffered_char[channel]). */
@@ -5163,14 +5184,14 @@ read_process_output (proc, channel)
valid memory because p->outfd will be changed once EOF is
sent to the process. */
if (NILP (p->encode_coding_system)
- && proc_encode_coding_system[XINT (p->outfd)])
+ && proc_encode_coding_system[p->outfd])
{
p->encode_coding_system = coding->symbol;
setup_coding_system (coding->symbol,
- proc_encode_coding_system[XINT (p->outfd)]);
- if (proc_encode_coding_system[XINT (p->outfd)]->eol_type
+ proc_encode_coding_system[p->outfd]);
+ if (proc_encode_coding_system[p->outfd]->eol_type
== CODING_EOL_UNDECIDED)
- proc_encode_coding_system[XINT (p->outfd)]->eol_type
+ proc_encode_coding_system[p->outfd]->eol_type
= system_eol_type;
}
}
@@ -5183,9 +5204,9 @@ read_process_output (proc, channel)
p->decoding_buf = make_uninit_string (carryover);
bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
carryover);
- XSETINT (p->decoding_carryover, carryover);
+ p->decoding_carryover = carryover;
/* Adjust the multibyteness of TEXT to that of the filter. */
- if (NILP (p->filter_multibyte) != ! STRING_MULTIBYTE (text))
+ if (!p->filter_multibyte != !STRING_MULTIBYTE (text))
text = (STRING_MULTIBYTE (text)
? Fstring_as_unibyte (text)
: Fstring_to_multibyte (text));
@@ -5277,14 +5298,14 @@ read_process_output (proc, channel)
{
p->decode_coding_system = coding->symbol;
if (NILP (p->encode_coding_system)
- && proc_encode_coding_system[XINT (p->outfd)])
+ && proc_encode_coding_system[p->outfd])
{
p->encode_coding_system = coding->symbol;
setup_coding_system (coding->symbol,
- proc_encode_coding_system[XINT (p->outfd)]);
- if (proc_encode_coding_system[XINT (p->outfd)]->eol_type
+ proc_encode_coding_system[p->outfd]);
+ if (proc_encode_coding_system[p->outfd]->eol_type
== CODING_EOL_UNDECIDED)
- proc_encode_coding_system[XINT (p->outfd)]->eol_type
+ proc_encode_coding_system[p->outfd]->eol_type
= system_eol_type;
}
}
@@ -5296,7 +5317,7 @@ read_process_output (proc, channel)
p->decoding_buf = make_uninit_string (carryover);
bcopy (chars + coding->consumed, SDATA (p->decoding_buf),
carryover);
- XSETINT (p->decoding_carryover, carryover);
+ p->decoding_carryover = carryover;
/* Adjust the multibyteness of TEXT to that of the buffer. */
if (NILP (current_buffer->enable_multibyte_characters)
@@ -5415,10 +5436,10 @@ send_process (proc, buf, len, object)
update_status (p);
if (! EQ (p->status, Qrun))
error ("Process %s not running", SDATA (p->name));
- if (XINT (p->outfd) < 0)
+ if (p->outfd < 0)
error ("Output file descriptor of %s is closed", SDATA (p->name));
- coding = proc_encode_coding_system[XINT (p->outfd)];
+ coding = proc_encode_coding_system[p->outfd];
Vlast_coding_system_used = coding->symbol;
if ((STRINGP (object) && STRING_MULTIBYTE (object))
@@ -5511,7 +5532,7 @@ send_process (proc, buf, len, object)
if (pty_max_bytes == 0)
{
#if defined (HAVE_FPATHCONF) && defined (_PC_MAX_CANON)
- pty_max_bytes = fpathconf (XFASTINT (p->outfd), _PC_MAX_CANON);
+ pty_max_bytes = fpathconf (p->outfd, _PC_MAX_CANON);
if (pty_max_bytes < 0)
pty_max_bytes = 250;
#else
@@ -5533,7 +5554,7 @@ send_process (proc, buf, len, object)
/* Decide how much data we can send in one batch.
Long lines need to be split into multiple batches. */
- if (!NILP (p->pty_flag))
+ if (p->pty_flag)
{
/* Starting this at zero is always correct when not the first
iteration because the previous iteration ended by sending C-d.
@@ -5562,7 +5583,7 @@ send_process (proc, buf, len, object)
/* Send this batch, using one or more write calls. */
while (this > 0)
{
- int outfd = XINT (p->outfd);
+ int outfd = p->outfd;
old_sigpipe = (SIGTYPE (*) ()) signal (SIGPIPE, send_process_trap);
#ifdef DATAGRAM_SOCKETS
if (DATAGRAM_CHAN_P (outfd))
@@ -5582,12 +5603,12 @@ send_process (proc, buf, len, object)
{
rv = emacs_write (outfd, (char *) buf, this);
#ifdef ADAPTIVE_READ_BUFFERING
- if (XINT (p->read_output_delay) > 0
- && EQ (p->adaptive_read_buffering, Qt))
+ if (p->read_output_delay > 0
+ && p->adaptive_read_buffering == 1)
{
- XSETFASTINT (p->read_output_delay, 0);
+ p->read_output_delay = 0;
process_output_delay_count--;
- p->read_output_skip = Qnil;
+ p->read_output_skip = 0;
}
#endif
}
@@ -5630,7 +5651,7 @@ send_process (proc, buf, len, object)
if (errno == EAGAIN)
{
int flags = FWRITE;
- ioctl (XINT (p->outfd), TIOCFLUSH, &flags);
+ ioctl (p->outfd, TIOCFLUSH, &flags);
}
#endif /* BROKEN_PTY_READ_AFTER_EAGAIN */
@@ -5679,7 +5700,7 @@ send_process (proc, buf, len, object)
#endif
p->raw_status_new = 0;
p->status = Fcons (Qexit, Fcons (make_number (256), Qnil));
- XSETINT (p->tick, ++process_tick);
+ p->tick = ++process_tick;
deactivate_process (proc);
#ifdef VMS
error ("Error writing to process %s; closed it", SDATA (p->name));
@@ -5731,10 +5752,10 @@ send_process_object (proc, start, end)
update_status (p);
if (! EQ (p->status, Qrun))
error ("Process %s not running", SDATA (p->name));
- if (XINT (p->outfd) < 0)
+ if (p->outfd < 0)
error ("Output file descriptor of %s is closed", SDATA (p->name));
- coding = proc_encode_coding_system[XINT (p->outfd)];
+ coding = proc_encode_coding_system[p->outfd];
if (! EQ (coding->symbol, p->encode_coding_system))
/* The coding system for encoding was changed to raw-text
because we sent a unibyte text previously. Now we are
@@ -5823,7 +5844,7 @@ emacs_get_tty_pgrp (p)
int gid = -1;
#ifdef TIOCGPGRP
- if (ioctl (XINT (p->infd), TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
+ if (ioctl (p->infd, TIOCGPGRP, &gid) == -1 && ! NILP (p->tty_name))
{
int fd;
/* Some OS:es (Solaris 8/9) does not allow TIOCGPGRP from the
@@ -5861,7 +5882,7 @@ return t unconditionally. */)
if (!EQ (p->childp, Qt))
error ("Process %s is not a subprocess",
SDATA (p->name));
- if (XINT (p->infd) < 0)
+ if (p->infd < 0)
error ("Process %s is not active",
SDATA (p->name));
@@ -5904,11 +5925,11 @@ process_send_signal (process, signo, current_group, nomsg)
if (!EQ (p->childp, Qt))
error ("Process %s is not a subprocess",
SDATA (p->name));
- if (XINT (p->infd) < 0)
+ if (p->infd < 0)
error ("Process %s is not active",
SDATA (p->name));
- if (NILP (p->pty_flag))
+ if (!p->pty_flag)
current_group = Qnil;
/* If we are using pgrps, get a pgrp number and make it negative. */
@@ -5927,7 +5948,7 @@ process_send_signal (process, signo, current_group, nomsg)
struct termios t;
cc_t *sig_char = NULL;
- tcgetattr (XINT (p->infd), &t);
+ tcgetattr (p->infd, &t);
switch (signo)
{
@@ -5967,16 +5988,16 @@ process_send_signal (process, signo, current_group, nomsg)
switch (signo)
{
case SIGINT:
- ioctl (XINT (p->infd), TIOCGETC, &c);
+ ioctl (p->infd, TIOCGETC, &c);
send_process (proc, &c.t_intrc, 1, Qnil);
return;
case SIGQUIT:
- ioctl (XINT (p->infd), TIOCGETC, &c);
+ ioctl (p->infd, TIOCGETC, &c);
send_process (proc, &c.t_quitc, 1, Qnil);
return;
#ifdef SIGTSTP
case SIGTSTP:
- ioctl (XINT (p->infd), TIOCGLTC, &lc);
+ ioctl (p->infd, TIOCGLTC, &lc);
send_process (proc, &lc.t_suspc, 1, Qnil);
return;
#endif /* ! defined (SIGTSTP) */
@@ -5991,16 +6012,16 @@ process_send_signal (process, signo, current_group, nomsg)
switch (signo)
{
case SIGINT:
- ioctl (XINT (p->infd), TCGETA, &t);
+ ioctl (p->infd, TCGETA, &t);
send_process (proc, &t.c_cc[VINTR], 1, Qnil);
return;
case SIGQUIT:
- ioctl (XINT (p->infd), TCGETA, &t);
+ ioctl (p->infd, TCGETA, &t);
send_process (proc, &t.c_cc[VQUIT], 1, Qnil);
return;
#ifdef SIGTSTP
case SIGTSTP:
- ioctl (XINT (p->infd), TCGETA, &t);
+ ioctl (p->infd, TCGETA, &t);
send_process (proc, &t.c_cc[VSWTCH], 1, Qnil);
return;
#endif /* ! defined (SIGTSTP) */
@@ -6058,7 +6079,7 @@ process_send_signal (process, signo, current_group, nomsg)
case SIGCONT:
p->raw_status_new = 0;
p->status = Qrun;
- XSETINT (p->tick, ++process_tick);
+ p->tick = ++process_tick;
if (!nomsg)
status_notify (NULL);
break;
@@ -6078,7 +6099,7 @@ process_send_signal (process, signo, current_group, nomsg)
sys$forcex (&(p->pid), 0, 1);
whoosh:
#endif
- flush_pending_output (XINT (p->infd));
+ flush_pending_output (p->infd);
break;
}
@@ -6095,7 +6116,7 @@ process_send_signal (process, signo, current_group, nomsg)
#ifdef TIOCSIGSEND
if (!NILP (current_group))
{
- if (ioctl (XINT (p->infd), TIOCSIGSEND, signo) == -1)
+ if (ioctl (p->infd, TIOCSIGSEND, signo) == -1)
EMACS_KILLPG (gid, signo);
}
else
@@ -6161,10 +6182,10 @@ If PROCESS is a network process, inhibit handling of incoming traffic. */)
p = XPROCESS (process);
if (NILP (p->command)
- && XINT (p->infd) >= 0)
+ && p->infd >= 0)
{
- FD_CLR (XINT (p->infd), &input_wait_mask);
- FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
+ FD_CLR (p->infd, &input_wait_mask);
+ FD_CLR (p->infd, &non_keyboard_wait_mask);
}
p->command = Qt;
return process;
@@ -6192,11 +6213,11 @@ If PROCESS is a network process, resume handling of incoming traffic. */)
p = XPROCESS (process);
if (EQ (p->command, Qt)
- && XINT (p->infd) >= 0
+ && p->infd >= 0
&& (!EQ (p->filter, Qt) || EQ (p->status, Qlisten)))
{
- FD_SET (XINT (p->infd), &input_wait_mask);
- FD_SET (XINT (p->infd), &non_keyboard_wait_mask);
+ FD_SET (p->infd, &input_wait_mask);
+ FD_SET (p->infd, &non_keyboard_wait_mask);
}
p->command = Qnil;
return process;
@@ -6393,7 +6414,7 @@ text to PROCESS after you call this function. */)
return process;
proc = get_process (process);
- coding = proc_encode_coding_system[XINT (XPROCESS (proc)->outfd)];
+ coding = proc_encode_coding_system[XPROCESS (proc)->outfd];
/* Make sure the process is really alive. */
if (XPROCESS (proc)->raw_status_new)
@@ -6410,7 +6431,7 @@ text to PROCESS after you call this function. */)
#ifdef VMS
send_process (proc, "\032", 1, Qnil); /* ^z */
#else
- if (!NILP (XPROCESS (proc)->pty_flag))
+ if (XPROCESS (proc)->pty_flag)
send_process (proc, "\004", 1, Qnil);
else
{
@@ -6422,18 +6443,18 @@ text to PROCESS after you call this function. */)
(In some old system, shutdown to socketpair doesn't work.
Then we just can't win.) */
if (XPROCESS (proc)->pid == 0
- || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
- shutdown (XINT (XPROCESS (proc)->outfd), 1);
+ || XPROCESS (proc)->outfd == XPROCESS (proc)->infd)
+ shutdown (XPROCESS (proc)->outfd, 1);
/* In case of socketpair, outfd == infd, so don't close it. */
- if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
- emacs_close (XINT (XPROCESS (proc)->outfd));
+ if (XPROCESS (proc)->outfd != XPROCESS (proc)->infd)
+ emacs_close (XPROCESS (proc)->outfd);
#else /* not HAVE_SHUTDOWN */
- emacs_close (XINT (XPROCESS (proc)->outfd));
+ emacs_close (XPROCESS (proc)->outfd);
#endif /* not HAVE_SHUTDOWN */
new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
if (new_outfd < 0)
abort ();
- old_outfd = XINT (XPROCESS (proc)->outfd);
+ old_outfd = XPROCESS (proc)->outfd;
if (!proc_encode_coding_system[new_outfd])
proc_encode_coding_system[new_outfd]
@@ -6444,7 +6465,7 @@ text to PROCESS after you call this function. */)
bzero (proc_encode_coding_system[old_outfd],
sizeof (struct coding_system));
- XSETINT (XPROCESS (proc)->outfd, new_outfd);
+ XPROCESS (proc)->outfd = new_outfd;
}
#endif /* VMS */
return process;
@@ -6467,7 +6488,7 @@ kill_buffer_processes (buffer)
{
if (NETCONN_P (proc))
Fdelete_process (proc);
- else if (XINT (XPROCESS (proc)->infd) >= 0)
+ else if (XPROCESS (proc)->infd >= 0)
process_send_signal (proc, SIGHUP, Qnil, 1);
}
}
@@ -6597,21 +6618,21 @@ sigchld_handler (signo)
union { int i; WAITTYPE wt; } u;
int clear_desc_flag = 0;
- XSETINT (p->tick, ++process_tick);
+ p->tick = ++process_tick;
u.wt = w;
p->raw_status = u.i;
p->raw_status_new = 1;
/* If process has terminated, stop waiting for its output. */
if ((WIFSIGNALED (w) || WIFEXITED (w))
- && XINT (p->infd) >= 0)
+ && p->infd >= 0)
clear_desc_flag = 1;
/* We use clear_desc_flag to avoid a compiler bug in Microsoft C. */
if (clear_desc_flag)
{
- FD_CLR (XINT (p->infd), &input_wait_mask);
- FD_CLR (XINT (p->infd), &non_keyboard_wait_mask);
+ FD_CLR (p->infd, &input_wait_mask);
+ FD_CLR (p->infd, &non_keyboard_wait_mask);
}
/* Tell wait_reading_process_output that it needs to wake up and
@@ -6780,26 +6801,26 @@ status_notify (deleting_process)
that we run, we get called again to handle their status changes. */
update_tick = process_tick;
- for (tail = Vprocess_alist; !NILP (tail); tail = Fcdr (tail))
+ for (tail = Vprocess_alist; CONSP (tail); tail = XCDR (tail))
{
Lisp_Object symbol;
register struct Lisp_Process *p;
- proc = Fcdr (Fcar (tail));
+ proc = Fcdr (XCAR (tail));
p = XPROCESS (proc);
- if (XINT (p->tick) != XINT (p->update_tick))
+ if (p->tick != p->update_tick)
{
- XSETINT (p->update_tick, XINT (p->tick));
+ p->update_tick = p->tick;
/* If process is still active, read any output that remains. */
while (! EQ (p->filter, Qt)
&& ! EQ (p->status, Qconnect)
&& ! EQ (p->status, Qlisten)
&& ! EQ (p->command, Qt) /* Network process not stopped. */
- && XINT (p->infd) >= 0
+ && p->infd >= 0
&& p != deleting_process
- && read_process_output (proc, XINT (p->infd)) > 0);
+ && read_process_output (proc, p->infd) > 0);
buffer = p->buffer;
@@ -6826,7 +6847,7 @@ status_notify (deleting_process)
So set p->update_tick again
so that an error in the sentinel will not cause
this code to be run again. */
- XSETINT (p->update_tick, XINT (p->tick));
+ p->update_tick = p->tick;
/* Now output the message suitably. */
if (!NILP (p->sentinel))
exec_sentinel (proc, msg);
@@ -6899,9 +6920,9 @@ encode subprocess input. */)
CHECK_PROCESS (process);
p = XPROCESS (process);
- if (XINT (p->infd) < 0)
+ if (p->infd < 0)
error ("Input file descriptor of %s closed", SDATA (p->name));
- if (XINT (p->outfd) < 0)
+ if (p->outfd < 0)
error ("Output file descriptor of %s closed", SDATA (p->name));
Fcheck_coding_system (decoding);
Fcheck_coding_system (encoding);
@@ -6938,7 +6959,7 @@ suppressed. */)
CHECK_PROCESS (process);
p = XPROCESS (process);
- p->filter_multibyte = flag;
+ p->filter_multibyte = !NILP (flag);
setup_process_coding_systems (process);
return Qnil;
@@ -6955,31 +6976,38 @@ DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p,
CHECK_PROCESS (process);
p = XPROCESS (process);
- return (NILP (p->filter_multibyte) ? Qnil : Qt);
+ return (p->filter_multibyte ? Qt : Qnil);
}
-/* The first time this is called, assume keyboard input comes from DESC
- instead of from where we used to expect it.
- Subsequent calls mean assume input keyboard can come from DESC
- in addition to other places. */
-
-static int add_keyboard_wait_descriptor_called_flag;
+/* Add DESC to the set of keyboard input descriptors. */
void
add_keyboard_wait_descriptor (desc)
int desc;
{
- if (! add_keyboard_wait_descriptor_called_flag)
- FD_CLR (0, &input_wait_mask);
- add_keyboard_wait_descriptor_called_flag = 1;
FD_SET (desc, &input_wait_mask);
FD_SET (desc, &non_process_wait_mask);
if (desc > max_keyboard_desc)
max_keyboard_desc = desc;
}
+static int add_gpm_wait_descriptor_called_flag;
+
+void
+add_gpm_wait_descriptor (desc)
+ int desc;
+{
+ if (! add_gpm_wait_descriptor_called_flag)
+ FD_CLR (0, &input_wait_mask);
+ add_gpm_wait_descriptor_called_flag = 1;
+ FD_SET (desc, &input_wait_mask);
+ FD_SET (desc, &gpm_wait_mask);
+ if (desc > max_gpm_desc)
+ max_gpm_desc = desc;
+}
+
/* From now on, do not expect DESC to give keyboard input. */
void
@@ -6995,10 +7023,29 @@ delete_keyboard_wait_descriptor (desc)
if (desc == max_keyboard_desc)
for (fd = 0; fd < lim; fd++)
if (FD_ISSET (fd, &input_wait_mask)
- && !FD_ISSET (fd, &non_keyboard_wait_mask))
+ && !FD_ISSET (fd, &non_keyboard_wait_mask)
+ && !FD_ISSET (fd, &gpm_wait_mask))
max_keyboard_desc = fd;
}
+void
+delete_gpm_wait_descriptor (desc)
+ int desc;
+{
+ int fd;
+ int lim = max_gpm_desc;
+
+ FD_CLR (desc, &input_wait_mask);
+ FD_CLR (desc, &non_process_wait_mask);
+
+ if (desc == max_gpm_desc)
+ for (fd = 0; fd < lim; fd++)
+ if (FD_ISSET (fd, &input_wait_mask)
+ && !FD_ISSET (fd, &non_keyboard_wait_mask)
+ && !FD_ISSET (fd, &non_process_wait_mask))
+ max_gpm_desc = fd;
+}
+
/* Return nonzero if *MASK has a bit set
that corresponds to one of the keyboard input descriptors. */
@@ -7045,7 +7092,12 @@ init_process ()
process_output_skip = 0;
#endif
+ /* Don't do this, it caused infinite select loops. The display
+ method should call add_keyboard_wait_descriptor on stdin if it
+ needs that. */
+#if 0
FD_SET (0, &input_wait_mask);
+#endif
Vprocess_alist = Qnil;
#ifdef SIGCHLD
diff --git a/src/process.h b/src/process.h
index 2502e61a31d..c1b1bc01e37 100644
--- a/src/process.h
+++ b/src/process.h
@@ -34,12 +34,8 @@ Boston, MA 02110-1301, USA. */
struct Lisp_Process
{
- EMACS_INT size;
+ EMACS_UINT size;
struct Lisp_Vector *v_next;
- /* Descriptor by which we read from this process */
- Lisp_Object infd;
- /* Descriptor by which we write to this process */
- Lisp_Object outfd;
/* Name of subprocess terminal. */
Lisp_Object tty_name;
/* Name of this process */
@@ -64,61 +60,65 @@ struct Lisp_Process
Lisp_Object plist;
/* Marker set to end of last buffer-inserted output from this process */
Lisp_Object mark;
- /* Non-nil means kill silently if Emacs is exited.
- This is the inverse of the `query-on-exit' flag. */
- Lisp_Object kill_without_query;
/* Symbol indicating status of process.
This may be a symbol: run, open, or closed.
Or it may be a list, whose car is stop, exit or signal
and whose cdr is a pair (EXIT_CODE . COREDUMP_FLAG)
or (SIGNAL_NUMBER . COREDUMP_FLAG). */
Lisp_Object status;
- /* Non-nil if communicating through a pty. */
- Lisp_Object pty_flag;
- /* Event-count of last event in which this process changed status. */
- Lisp_Object tick;
- /* Event-count of last such event reported. */
- Lisp_Object update_tick;
/* Coding-system for decoding the input from this process. */
Lisp_Object decode_coding_system;
/* Working buffer for decoding. */
Lisp_Object decoding_buf;
- /* Size of carryover in decoding. */
- Lisp_Object decoding_carryover;
/* Coding-system for encoding the output to this process. */
Lisp_Object encode_coding_system;
/* Working buffer for encoding. */
Lisp_Object encoding_buf;
- /* Size of carryover in encoding. */
- Lisp_Object encoding_carryover;
- /* Flag to set coding-system of the process buffer from the
- coding_system used to decode process output. */
- Lisp_Object inherit_coding_system_flag;
- /* Flat to decide the multibyteness of a string given to the
- filter (if any). It is initialized to the value of
- `default-enable-multibyte-characters' when the process is
- generated, and can be changed by the function
- `set-process-fileter-multibyte'. */
- Lisp_Object filter_multibyte;
- /* Should we delay reading output from this process.
- Initialized from `Vprocess_adaptive_read_buffering'. */
- Lisp_Object adaptive_read_buffering;
- /* Hysteresis to try to read process output in larger blocks.
- On some systems, e.g. GNU/Linux, Emacs is seen as
- an interactive app also when reading process output, meaning
- that process output can be read in as little as 1 byte at a
- time. Value is micro-seconds to delay reading output from
- this process. Range is 0 .. 50000. */
- Lisp_Object read_output_delay;
- /* Skip reading this process on next read. */
- Lisp_Object read_output_skip;
/* After this point, there are no Lisp_Objects any more. */
+ /* alloc.c assumes that `pid' is the first such non-Lisp slot. */
/* Number of this process.
allocate_process assumes this is the first non-Lisp_Object field.
A value 0 is used for pseudo-processes such as network connections. */
pid_t pid;
+ /* Descriptor by which we read from this process */
+ int infd;
+ /* Descriptor by which we write to this process */
+ int outfd;
+ /* Event-count of last event in which this process changed status. */
+ int tick;
+ /* Event-count of last such event reported. */
+ int update_tick;
+ /* Size of carryover in decoding. */
+ int decoding_carryover;
+ /* Hysteresis to try to read process output in larger blocks.
+ On some systems, e.g. GNU/Linux, Emacs is seen as
+ an interactive app also when reading process output, meaning
+ that process output can be read in as little as 1 byte at a
+ time. Value is micro-seconds to delay reading output from
+ this process. Range is 0 .. 50000. */
+ int read_output_delay;
+ /* Should we delay reading output from this process.
+ Initialized from `Vprocess_adaptive_read_buffering'.
+ 0 = nil, 1 = t, 2 = other. */
+ int adaptive_read_buffering : 2;
+ /* Skip reading this process on next read. */
+ int read_output_skip : 1;
+ /* Non-nil means kill silently if Emacs is exited.
+ This is the inverse of the `query-on-exit' flag. */
+ int kill_without_query : 1;
+ /* Non-nil if communicating through a pty. */
+ int pty_flag : 1;
+ /* Flag to set coding-system of the process buffer from the
+ coding_system used to decode process output. */
+ int inherit_coding_system_flag : 1;
+ /* Flag to decide the multibyteness of a string given to the
+ filter (if any). It is initialized to the value of
+ `default-enable-multibyte-characters' when the process is
+ generated, and can be changed by the function
+ `set-process-filter-multibyte'. */
+ int filter_multibyte : 1;
/* Record the process status in the raw form in which it comes from `wait'.
This is to avoid consing in a signal handler. The `raw_status_new'
flag indicates that `raw_status' contains a new status that still
diff --git a/src/puresize.h b/src/puresize.h
index c6456730075..100721b36cc 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -43,7 +43,7 @@ Boston, MA 02110-1301, USA. */
#endif
#ifndef BASE_PURESIZE
-#define BASE_PURESIZE (1130000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
+#define BASE_PURESIZE (1190000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
#endif
/* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */
diff --git a/src/regex.c b/src/regex.c
index 6435133c96f..125a3388f19 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -1366,18 +1366,12 @@ static const char *re_error_msgid[] =
/* Normally, this is fine. */
#define MATCH_MAY_ALLOCATE
-/* When using GNU C, we are not REALLY using the C alloca, no matter
- what config.h may say. So don't take precautions for it. */
-#ifdef __GNUC__
-# undef C_ALLOCA
-#endif
-
/* The match routines may not allocate if (1) they would do it with malloc
and (2) it's not safe for them to use malloc.
Note that if REL_ALLOC is defined, matching would not use malloc for the
failure stack, but we would still use it for the register vectors;
so REL_ALLOC should not affect this. */
-#if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
+#if defined REGEX_MALLOC && defined emacs
# undef MATCH_MAY_ALLOCATE
#endif
@@ -2483,11 +2477,6 @@ regex_compile (pattern, size, syntax, bufp)
last -- ends with a forward jump of this sort. */
unsigned char *fixup_alt_jump = 0;
- /* Counts open-groups as they are encountered. Remembered for the
- matching close-group on the compile stack, so the same register
- number is put in the stop_memory as the start_memory. */
- regnum_t regnum = 0;
-
/* Work area for range table of charset. */
struct range_table_work_area range_table_work;
@@ -3124,28 +3113,54 @@ regex_compile (pattern, size, syntax, bufp)
handle_open:
{
int shy = 0;
+ regnum_t regnum = 0;
if (p+1 < pend)
{
/* Look for a special (?...) construct */
if ((syntax & RE_SHY_GROUPS) && *p == '?')
{
PATFETCH (c); /* Gobble up the '?'. */
- PATFETCH (c);
- switch (c)
+ while (!shy)
{
- case ':': shy = 1; break;
- default:
- /* Only (?:...) is supported right now. */
- FREE_STACK_RETURN (REG_BADPAT);
+ PATFETCH (c);
+ switch (c)
+ {
+ case ':': shy = 1; break;
+ case '0':
+ /* An explicitly specified regnum must start
+ with non-0. */
+ if (regnum == 0)
+ FREE_STACK_RETURN (REG_BADPAT);
+ case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ regnum = 10*regnum + (c - '0'); break;
+ default:
+ /* Only (?:...) is supported right now. */
+ FREE_STACK_RETURN (REG_BADPAT);
+ }
}
}
}
if (!shy)
- {
- bufp->re_nsub++;
- regnum++;
+ regnum = ++bufp->re_nsub;
+ else if (regnum)
+ { /* It's actually not shy, but explicitly numbered. */
+ shy = 0;
+ if (regnum > bufp->re_nsub)
+ bufp->re_nsub = regnum;
+ else if (regnum > bufp->re_nsub
+ /* Ideally, we'd want to check that the specified
+ group can't have matched (i.e. all subgroups
+ using the same regnum are in other branches of
+ OR patterns), but we don't currently keep track
+ of enough info to do that easily. */
+ || group_in_compile_stack (compile_stack, regnum))
+ FREE_STACK_RETURN (REG_BADPAT);
}
+ else
+ /* It's really shy. */
+ regnum = - bufp->re_nsub;
if (COMPILE_STACK_FULL)
{
@@ -3164,12 +3179,11 @@ regex_compile (pattern, size, syntax, bufp)
COMPILE_STACK_TOP.fixup_alt_jump
= fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0;
COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer;
- COMPILE_STACK_TOP.regnum = shy ? -regnum : regnum;
+ COMPILE_STACK_TOP.regnum = regnum;
- /* Do not push a
- start_memory for groups beyond the last one we can
- represent in the compiled pattern. */
- if (regnum <= MAX_REGNUM && !shy)
+ /* Do not push a start_memory for groups beyond the last one
+ we can represent in the compiled pattern. */
+ if (regnum <= MAX_REGNUM && regnum > 0)
BUF_PUSH_2 (start_memory, regnum);
compile_stack.avail++;
@@ -3214,7 +3228,7 @@ regex_compile (pattern, size, syntax, bufp)
/* We don't just want to restore into `regnum', because
later groups should continue to be numbered higher,
as in `(ab)c(de)' -- the second group is #2. */
- regnum_t this_group_regnum;
+ regnum_t regnum;
compile_stack.avail--;
begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset;
@@ -3223,7 +3237,7 @@ regex_compile (pattern, size, syntax, bufp)
? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1
: 0;
laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset;
- this_group_regnum = COMPILE_STACK_TOP.regnum;
+ regnum = COMPILE_STACK_TOP.regnum;
/* If we've reached MAX_REGNUM groups, then this open
won't actually generate any code, so we'll have to
clear pending_exact explicitly. */
@@ -3231,8 +3245,8 @@ regex_compile (pattern, size, syntax, bufp)
/* We're at the end of the group, so now we know how many
groups were inside this one. */
- if (this_group_regnum <= MAX_REGNUM && this_group_regnum > 0)
- BUF_PUSH_2 (stop_memory, this_group_regnum);
+ if (regnum <= MAX_REGNUM && regnum > 0)
+ BUF_PUSH_2 (stop_memory, regnum);
}
break;
@@ -3558,8 +3572,9 @@ regex_compile (pattern, size, syntax, bufp)
reg = c - '0';
- /* Can't back reference to a subexpression before its end. */
- if (reg > regnum || group_in_compile_stack (compile_stack, reg))
+ if (reg > bufp->re_nsub || reg < 1
+ /* Can't back reference to a subexp before its end. */
+ || group_in_compile_stack (compile_stack, reg))
FREE_STACK_RETURN (REG_ESUBREG);
laststart = b;
@@ -4433,11 +4448,6 @@ re_search_2 (bufp, str1, size1, str2, size2, startpos, range, regs, stop)
val = re_match_2_internal (bufp, string1, size1, string2, size2,
startpos, regs, stop);
-#ifndef REGEX_MALLOC
-# ifdef C_ALLOCA
- alloca (0);
-# endif
-#endif
if (val >= 0)
return startpos;
@@ -4873,9 +4883,6 @@ re_match (bufp, string, size, pos, regs)
{
int result = re_match_2_internal (bufp, NULL, 0, (re_char*) string, size,
pos, regs, size);
-# if defined C_ALLOCA && !defined REGEX_MALLOC
- alloca (0);
-# endif
return result;
}
WEAK_ALIAS (__re_match, re_match)
@@ -4921,9 +4928,6 @@ re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
result = re_match_2_internal (bufp, (re_char*) string1, size1,
(re_char*) string2, size2,
pos, regs, stop);
-#if defined C_ALLOCA && !defined REGEX_MALLOC
- alloca (0);
-#endif
return result;
}
WEAK_ALIAS (__re_match_2, re_match_2)
diff --git a/src/s/cygwin.h b/src/s/cygwin.h
index 3c0d9c410a0..1785c7c6c76 100644
--- a/src/s/cygwin.h
+++ b/src/s/cygwin.h
@@ -140,6 +140,12 @@ Boston, MA 02110-1301, USA. */
change their controlling terminal */
#define vfork fork
+/* This should work (at least when compiling with gcc). But I have no way
+ or intention to verify or even test it. If you encounter a problem with
+ it, feel free to change this setting, but please add a comment here about
+ why it needed to be changed. */
+#define GC_MARK_STACK GC_MAKE_GCPROS_NOOPS
+
/* the end */
/* arch-tag: 5ae7ba00-83b0-4ab3-806a-3e845779191b
diff --git a/src/s/darwin.h b/src/s/darwin.h
index 183aecaf5d8..c1108e7c295 100644
--- a/src/s/darwin.h
+++ b/src/s/darwin.h
@@ -50,6 +50,9 @@ Boston, MA 02110-1301, USA. */
#ifdef MAC_OSX
#ifdef HAVE_CARBON
#define MAC_OS
+/* We need a little extra space, see ../../lisp/loadup.el. */
+#define SYSTEM_PURESIZE_EXTRA 30000
+
#endif
#endif
diff --git a/src/s/ms-w32.h b/src/s/ms-w32.h
index a5898410b3b..ee64a5d94f2 100644
--- a/src/s/ms-w32.h
+++ b/src/s/ms-w32.h
@@ -241,6 +241,7 @@ Boston, MA 02110-1301, USA. */
#undef HAVE_TERMIOS_H
#define HAVE_LIMITS_H 1
#define HAVE_STRING_H 1
+#define HAVE_STDLIB_H 1
#define HAVE_PWD_H 1
#define STDC_HEADERS 1
#define TIME_WITH_SYS_TIME 1
@@ -291,6 +292,7 @@ Boston, MA 02110-1301, USA. */
#define HAVE_INET_SOCKETS 1
#undef HAVE_AIX_SMT_EXP
+#define USE_TOOLKIT_SCROLL_BARS 1
/* Define if you have the ANSI `strerror' function.
Otherwise you must have the variable `char *sys_errlist[]'. */
@@ -302,6 +304,8 @@ Boston, MA 02110-1301, USA. */
#define HAVE_MOUSE 1
#define HAVE_H_ERRNO 1
+#define MULTI_KBOARD 1
+
#ifdef HAVE_NTGUI
#define HAVE_WINDOW_SYSTEM 1
#define HAVE_FACES 1
@@ -399,10 +403,6 @@ typedef int pid_t;
#define utime _utime
#endif
-#ifdef HAVE_NTGUI
-#define abort w32_abort
-#endif
-
/* this is hacky, but is necessary to avoid warnings about macro
redefinitions using the SDK compilers */
#ifndef __STDC__
@@ -477,10 +477,8 @@ extern char *get_emacs_configuration_options (void);
#endif
#include <string.h>
-/* We need a little extra space, see ../../lisp/loadup.el.
- The number below comes from 23923 bytes worth (as of 2006-04)
- of w32-specific files loaded by loadup.el, plus 1K spare. */
-#define SYSTEM_PURESIZE_EXTRA 25000
+/* We need a little extra space, see ../../lisp/loadup.el. */
+#define SYSTEM_PURESIZE_EXTRA 50000
/* For unexec to work on Alpha systems, we need to put Emacs'
initialized data into a separate section from the CRT initialized
@@ -491,9 +489,9 @@ extern char *get_emacs_configuration_options (void);
into its own section. VC5 intermingles uninitialized data from the CRT
between Emacs' static uninitialized data and its public uninitialized
data. A separate .bss section for Emacs groups both static and
- public uninitalized together.
+ public uninitialized together.
- Note that unexnt.c relies on this fact, and must be modified
+ Note that unexw32.c relies on this fact, and must be modified
accordingly if this section name is changed, or if this pragma is
removed. Also, obviously, all files that define initialized data
must include config.h to pick up this pragma. */
diff --git a/src/s/msdos.h b/src/s/msdos.h
index 10246513811..297fda45baa 100644
--- a/src/s/msdos.h
+++ b/src/s/msdos.h
@@ -263,7 +263,6 @@ You lose; /* Emacs for DOS must be compiled with DJGPP */
#ifdef HAVE_X_WINDOWS
/* We need a little extra space, see ../../lisp/loadup.el */
#define SYSTEM_PURESIZE_EXTRA 15000
-#define HAVE_X11R5
#define LIBX11_SYSTEM -lxext -lsys
#else
/* We need a little extra space, see ../../lisp/loadup.el */
diff --git a/src/s/ptx.h b/src/s/ptx.h
index d192bd6098a..4170e5036c9 100644
--- a/src/s/ptx.h
+++ b/src/s/ptx.h
@@ -29,7 +29,6 @@ Boston, MA 02110-1301, USA. */
/* Undo these defines because they are incorrect or need to be changed. */
#undef LIB_X11_LIB
-#undef LIBX10_SYSTEM
#undef LIBX11_SYSTEM
#undef USG_SHARED_LIBRARIES
diff --git a/src/s/sco4.h b/src/s/sco4.h
index 4912b275aaa..d16bcbead49 100644
--- a/src/s/sco4.h
+++ b/src/s/sco4.h
@@ -100,11 +100,9 @@ Boston, MA 02110-1301, USA. */
#define LIBS_SYSTEM -lPW
#endif
-#ifdef HAVE_X11R5
/* configure can't get this right linking fails unless -lsocket is used. */
#undef HAVE_XSCREENNUMBEROFSCREEN
#define HAVE_XSCREENNUMBEROFSCREEN
-#endif
/* We don't have -loldX, and we don't need it. */
#define LIB_XMENU_LIB
diff --git a/src/s/sco5.h b/src/s/sco5.h
index a5cc19656ab..1f56a998014 100644
--- a/src/s/sco5.h
+++ b/src/s/sco5.h
@@ -98,11 +98,9 @@ Boston, MA 02110-1301, USA. */
#define LIBS_SYSTEM -lPW
#endif
-#ifdef HAVE_X11R5
/* configure can't get this right linking fails unless -lsocket is used. */
#undef HAVE_XSCREENNUMBEROFSCREEN
#define HAVE_XSCREENNUMBEROFSCREEN
-#endif
/* We don't have -loldX, and we don't need it. */
#define LIB_XMENU_LIB
diff --git a/src/s/usg5-3.h b/src/s/usg5-3.h
index d9b53718488..5df34f31b0e 100644
--- a/src/s/usg5-3.h
+++ b/src/s/usg5-3.h
@@ -181,7 +181,6 @@ Boston, MA 02110-1301, USA. */
/* X needs to talk on the network, so search the network library. */
-#define LIBX10_SYSTEM -lnsl_s
#define LIBX11_SYSTEM -lpt -lnls -lnsl_s -lc_s
/* The docs for system V/386 suggest v.3 has sigpause,
diff --git a/src/s/usg5-4.h b/src/s/usg5-4.h
index 3dc05f3e9fd..657fa9c51c6 100644
--- a/src/s/usg5-4.h
+++ b/src/s/usg5-4.h
@@ -180,7 +180,6 @@ Boston, MA 02110-1301, USA. */
library, as opposed to a DLL. Share libraries were used in SVR3, and are
available only in order to allow SVR3 binaries to run. They should not be
linked in to new binaries. -- caraway!pinkas@caraway.intel.com. */
-#undef LIBX10_SYSTEM
#undef LIBX11_SYSTEM
/* Tell x11term.c and keyboard.c we have the system V streams feature. */
diff --git a/src/s/windows95.h b/src/s/windows95.h
deleted file mode 100644
index cf7f3f13c88..00000000000
--- a/src/s/windows95.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* System description file for Windows 95. */
-
-#include "windowsnt.h"
-
-#define WINDOWS95
-
-/* arch-tag: 8a37be6f-312c-4b2a-919e-58a71a0fb4b3
- (do not change this comment) */
diff --git a/src/scroll.c b/src/scroll.c
index 48a40fe23d2..5a59c69003e 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -23,12 +23,13 @@ Boston, MA 02110-1301, USA. */
#include <config.h>
#include <stdio.h>
#include <string.h>
-#include "termchar.h"
#include "lisp.h"
+#include "termchar.h"
#include "dispextern.h"
#include "keyboard.h"
#include "frame.h"
#include "window.h"
+#include "termhooks.h"
/* All costs measured in characters.
So no cost can exceed the area of a frame, measured in characters.
@@ -58,10 +59,12 @@ struct matrix_elt
unsigned char writecount;
};
-static void do_direct_scrolling P_ ((struct glyph_matrix *,
+static void do_direct_scrolling P_ ((struct frame *,
+ struct glyph_matrix *,
struct matrix_elt *,
int, int));
-static void do_scrolling P_ ((struct glyph_matrix *,
+static void do_scrolling P_ ((struct frame *,
+ struct glyph_matrix *,
struct matrix_elt *,
int, int));
@@ -101,7 +104,8 @@ calculate_scrolling (frame, matrix, window_size, lines_below,
register struct matrix_elt *p, *p1;
register int cost, cost1;
- int lines_moved = window_size + (scroll_region_ok ? 0 : lines_below);
+ int lines_moved = window_size
+ + (FRAME_SCROLL_REGION_OK (frame) ? 0 : lines_below);
/* first_insert_cost[I] is the cost of doing the first insert-line
at the i'th line of the lines we are considering,
where I is origin 1 (as it is below). */
@@ -241,7 +245,8 @@ calculate_scrolling (frame, matrix, window_size, lines_below,
of lines. */
static void
-do_scrolling (current_matrix, matrix, window_size, unchanged_at_top)
+do_scrolling (frame, current_matrix, matrix, window_size, unchanged_at_top)
+ struct frame *frame;
struct glyph_matrix *current_matrix;
struct matrix_elt *matrix;
int window_size;
@@ -308,12 +313,12 @@ do_scrolling (current_matrix, matrix, window_size, unchanged_at_top)
/* Set the terminal window, if not done already. */
if (! terminal_window_p)
{
- set_terminal_window (window_size + unchanged_at_top);
+ set_terminal_window (frame, window_size + unchanged_at_top);
terminal_window_p = 1;
}
/* Delete lines on the terminal. */
- ins_del_lines (j + unchanged_at_top, - p->deletecount);
+ ins_del_lines (frame, j + unchanged_at_top, - p->deletecount);
}
else
{
@@ -338,7 +343,7 @@ do_scrolling (current_matrix, matrix, window_size, unchanged_at_top)
/* Set the terminal window if not yet done. */
if (!terminal_window_p)
{
- set_terminal_window (window_size + unchanged_at_top);
+ set_terminal_window (frame, window_size + unchanged_at_top);
terminal_window_p = 1;
}
@@ -347,7 +352,7 @@ do_scrolling (current_matrix, matrix, window_size, unchanged_at_top)
--queue;
/* Do the deletion on the terminal. */
- ins_del_lines (queue->pos, queue->count);
+ ins_del_lines (frame, queue->pos, queue->count);
/* All lines in the range deleted become empty in the glyph
matrix. Assign to them glyph rows that are not retained.
@@ -380,7 +385,7 @@ do_scrolling (current_matrix, matrix, window_size, unchanged_at_top)
CHECK_MATRIX (current_matrix);
if (terminal_window_p)
- set_terminal_window (0);
+ set_terminal_window (frame, 0);
}
@@ -467,7 +472,8 @@ calculate_direct_scrolling (frame, matrix, window_size, lines_below,
/* Overhead of setting the scroll window, plus the extra cost
cost of scrolling by a distance of one. The extra cost is
added once for consistency with the cost vectors */
- scroll_overhead = scroll_region_cost + extra_cost;
+ scroll_overhead
+ = FRAME_SCROLL_REGION_COST (frame) + extra_cost;
/* initialize the top left corner of the matrix */
matrix->writecost = 0;
@@ -650,8 +656,9 @@ calculate_direct_scrolling (frame, matrix, window_size, lines_below,
the cost matrix for this approach is constructed. */
static void
-do_direct_scrolling (current_matrix, cost_matrix, window_size,
- unchanged_at_top)
+do_direct_scrolling (frame, current_matrix, cost_matrix,
+ window_size, unchanged_at_top)
+ struct frame *frame;
struct glyph_matrix *current_matrix;
struct matrix_elt *cost_matrix;
int window_size;
@@ -742,9 +749,9 @@ do_direct_scrolling (current_matrix, cost_matrix, window_size,
if (i > j)
{
/* Immediately insert lines */
- set_terminal_window (i + unchanged_at_top);
+ set_terminal_window (frame, i + unchanged_at_top);
terminal_window_p = 1;
- ins_del_lines (j - n_to_write + unchanged_at_top, i - j);
+ ins_del_lines (frame, j - n_to_write + unchanged_at_top, i - j);
}
else if (i < j)
{
@@ -774,9 +781,9 @@ do_direct_scrolling (current_matrix, cost_matrix, window_size,
--queue;
if (queue->count)
{
- set_terminal_window (queue->window);
+ set_terminal_window (frame, queue->window);
terminal_window_p = 1;
- ins_del_lines (queue->pos, queue->count);
+ ins_del_lines (frame, queue->pos, queue->count);
}
else
{
@@ -799,7 +806,7 @@ do_direct_scrolling (current_matrix, cost_matrix, window_size,
copy_from, retained_p);
if (terminal_window_p)
- set_terminal_window (0);
+ set_terminal_window (frame, 0);
}
@@ -819,13 +826,13 @@ scrolling_1 (frame, window_size, unchanged_at_top, unchanged_at_bottom,
matrix = ((struct matrix_elt *)
alloca ((window_size + 1) * (window_size + 1) * sizeof *matrix));
- if (scroll_region_ok)
+ if (FRAME_SCROLL_REGION_OK (frame))
{
calculate_direct_scrolling (frame, matrix, window_size,
unchanged_at_bottom,
draw_cost, old_draw_cost,
old_hash, new_hash, free_at_end);
- do_direct_scrolling (frame->current_matrix,
+ do_direct_scrolling (frame, frame->current_matrix,
matrix, window_size, unchanged_at_top);
}
else
@@ -833,7 +840,8 @@ scrolling_1 (frame, window_size, unchanged_at_top, unchanged_at_bottom,
calculate_scrolling (frame, matrix, window_size, unchanged_at_bottom,
draw_cost, old_hash, new_hash,
free_at_end);
- do_scrolling (frame->current_matrix, matrix, window_size,
+ do_scrolling (frame,
+ frame->current_matrix, matrix, window_size,
unchanged_at_top);
}
}
@@ -915,7 +923,7 @@ scroll_cost (frame, from, to, amount)
if (amount == 0)
return 0;
- if (! scroll_region_ok)
+ if (! FRAME_SCROLL_REGION_OK (frame))
limit = height;
else if (amount > 0)
limit += amount;
diff --git a/src/search.c b/src/search.c
index ad4fbc45469..29def81c3eb 100644
--- a/src/search.c
+++ b/src/search.c
@@ -92,6 +92,11 @@ Lisp_Object Qsearch_failed;
Lisp_Object Vsearch_spaces_regexp;
+/* If non-nil, the match data will not be changed during call to
+ searching or matching functions. This variable is for internal use
+ only. */
+Lisp_Object Vinhibit_changing_match_data;
+
static void set_search_regs ();
static void save_search_regs ();
static int simple_search ();
@@ -321,7 +326,9 @@ looking_at_1 (string, posix)
= current_buffer->case_eqv_table;
CHECK_STRING (string);
- bufp = compile_pattern (string, &search_regs,
+ bufp = compile_pattern (string,
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : NULL),
(!NILP (current_buffer->case_fold_search)
? current_buffer->case_canon_table : Qnil),
posix,
@@ -352,7 +359,9 @@ looking_at_1 (string, posix)
re_match_object = Qnil;
i = re_match_2 (bufp, (char *) p1, s1, (char *) p2, s2,
- PT_BYTE - BEGV_BYTE, &search_regs,
+ PT_BYTE - BEGV_BYTE,
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : NULL),
ZV_BYTE - BEGV_BYTE);
immediate_quit = 0;
@@ -360,7 +369,7 @@ looking_at_1 (string, posix)
matcher_overflow ();
val = (0 <= i ? Qt : Qnil);
- if (i >= 0)
+ if (NILP (Vinhibit_changing_match_data) && i >= 0)
for (i = 0; i < search_regs.num_regs; i++)
if (search_regs.start[i] >= 0)
{
@@ -369,7 +378,11 @@ looking_at_1 (string, posix)
search_regs.end[i]
= BYTE_TO_CHAR (search_regs.end[i] + BEGV_BYTE);
}
- XSETBUFFER (last_thing_searched, current_buffer);
+
+ /* Set last_thing_searched only when match data is changed. */
+ if (NILP (Vinhibit_changing_match_data))
+ XSETBUFFER (last_thing_searched, current_buffer);
+
return val;
}
@@ -431,7 +444,9 @@ string_match_1 (regexp, string, start, posix)
XCHAR_TABLE (current_buffer->case_canon_table)->extras[2]
= current_buffer->case_eqv_table;
- bufp = compile_pattern (regexp, &search_regs,
+ bufp = compile_pattern (regexp,
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : NULL),
(!NILP (current_buffer->case_fold_search)
? current_buffer->case_canon_table : Qnil),
posix,
@@ -442,21 +457,27 @@ string_match_1 (regexp, string, start, posix)
val = re_search (bufp, (char *) SDATA (string),
SBYTES (string), pos_byte,
SBYTES (string) - pos_byte,
- &search_regs);
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : NULL));
immediate_quit = 0;
- last_thing_searched = Qt;
+
+ /* Set last_thing_searched only when match data is changed. */
+ if (NILP (Vinhibit_changing_match_data))
+ last_thing_searched = Qt;
+
if (val == -2)
matcher_overflow ();
if (val < 0) return Qnil;
- for (i = 0; i < search_regs.num_regs; i++)
- if (search_regs.start[i] >= 0)
- {
- search_regs.start[i]
- = string_byte_to_char (string, search_regs.start[i]);
- search_regs.end[i]
- = string_byte_to_char (string, search_regs.end[i]);
- }
+ if (NILP (Vinhibit_changing_match_data))
+ for (i = 0; i < search_regs.num_regs; i++)
+ if (search_regs.start[i] >= 0)
+ {
+ search_regs.start[i]
+ = string_byte_to_char (string, search_regs.start[i]);
+ search_regs.end[i]
+ = string_byte_to_char (string, search_regs.end[i]);
+ }
return make_number (string_byte_to_char (string, val));
}
@@ -1074,6 +1095,11 @@ do \
} \
while (0)
+/* Only used in search_buffer, to record the end position of the match
+ when searching regexps and SEARCH_REGS should not be changed
+ (i.e. Vinhibit_changing_match_data is non-nil). */
+static struct re_registers search_regs_1;
+
static int
search_buffer (string, pos, pos_byte, lim, lim_byte, n,
RE, trt, inverse_trt, posix)
@@ -1109,7 +1135,10 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
int s1, s2;
struct re_pattern_buffer *bufp;
- bufp = compile_pattern (string, &search_regs, trt, posix,
+ bufp = compile_pattern (string,
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : &search_regs_1),
+ trt, posix,
!NILP (current_buffer->enable_multibyte_characters));
immediate_quit = 1; /* Quit immediately if user types ^G,
@@ -1142,7 +1171,8 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
int val;
val = re_search_2 (bufp, (char *) p1, s1, (char *) p2, s2,
pos_byte - BEGV_BYTE, lim_byte - pos_byte,
- &search_regs,
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : &search_regs_1),
/* Don't allow match past current point */
pos_byte - BEGV_BYTE);
if (val == -2)
@@ -1151,18 +1181,27 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
}
if (val >= 0)
{
- pos_byte = search_regs.start[0] + BEGV_BYTE;
- for (i = 0; i < search_regs.num_regs; i++)
- if (search_regs.start[i] >= 0)
- {
- search_regs.start[i]
- = BYTE_TO_CHAR (search_regs.start[i] + BEGV_BYTE);
- search_regs.end[i]
- = BYTE_TO_CHAR (search_regs.end[i] + BEGV_BYTE);
- }
- XSETBUFFER (last_thing_searched, current_buffer);
- /* Set pos to the new position. */
- pos = search_regs.start[0];
+ if (NILP (Vinhibit_changing_match_data))
+ {
+ pos_byte = search_regs.start[0] + BEGV_BYTE;
+ for (i = 0; i < search_regs.num_regs; i++)
+ if (search_regs.start[i] >= 0)
+ {
+ search_regs.start[i]
+ = BYTE_TO_CHAR (search_regs.start[i] + BEGV_BYTE);
+ search_regs.end[i]
+ = BYTE_TO_CHAR (search_regs.end[i] + BEGV_BYTE);
+ }
+ XSETBUFFER (last_thing_searched, current_buffer);
+ /* Set pos to the new position. */
+ pos = search_regs.start[0];
+ }
+ else
+ {
+ pos_byte = search_regs_1.start[0] + BEGV_BYTE;
+ /* Set pos to the new position. */
+ pos = BYTE_TO_CHAR (search_regs_1.start[0] + BEGV_BYTE);
+ }
}
else
{
@@ -1176,7 +1215,8 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
int val;
val = re_search_2 (bufp, (char *) p1, s1, (char *) p2, s2,
pos_byte - BEGV_BYTE, lim_byte - pos_byte,
- &search_regs,
+ (NILP (Vinhibit_changing_match_data)
+ ? &search_regs : &search_regs_1),
lim_byte - BEGV_BYTE);
if (val == -2)
{
@@ -1184,17 +1224,25 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
}
if (val >= 0)
{
- pos_byte = search_regs.end[0] + BEGV_BYTE;
- for (i = 0; i < search_regs.num_regs; i++)
- if (search_regs.start[i] >= 0)
- {
- search_regs.start[i]
- = BYTE_TO_CHAR (search_regs.start[i] + BEGV_BYTE);
- search_regs.end[i]
- = BYTE_TO_CHAR (search_regs.end[i] + BEGV_BYTE);
- }
- XSETBUFFER (last_thing_searched, current_buffer);
- pos = search_regs.end[0];
+ if (NILP (Vinhibit_changing_match_data))
+ {
+ pos_byte = search_regs.end[0] + BEGV_BYTE;
+ for (i = 0; i < search_regs.num_regs; i++)
+ if (search_regs.start[i] >= 0)
+ {
+ search_regs.start[i]
+ = BYTE_TO_CHAR (search_regs.start[i] + BEGV_BYTE);
+ search_regs.end[i]
+ = BYTE_TO_CHAR (search_regs.end[i] + BEGV_BYTE);
+ }
+ XSETBUFFER (last_thing_searched, current_buffer);
+ pos = search_regs.end[0];
+ }
+ else
+ {
+ pos_byte = search_regs_1.end[0] + BEGV_BYTE;
+ pos = BYTE_TO_CHAR (search_regs_1.end[0] + BEGV_BYTE);
+ }
}
else
{
@@ -1649,12 +1697,8 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
int translate_prev_byte2 = 0;
int translate_prev_byte3 = 0;
-#ifdef C_ALLOCA
- int BM_tab_space[0400];
- BM_tab = &BM_tab_space[0];
-#else
BM_tab = (int *) alloca (0400 * sizeof (int));
-#endif
+
/* The general approach is that we are going to maintain that we know */
/* the first (closest to the present position, in whatever direction */
/* we're searching) character that could possibly be the last */
@@ -1926,7 +1970,7 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
cursor += dirlen - i - direction; /* fix cursor */
if (i + direction == 0)
{
- int position;
+ int position, start, end;
cursor -= direction;
@@ -1934,11 +1978,24 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
? 1 - len_byte : 0);
set_search_regs (position, len_byte);
+ if (NILP (Vinhibit_changing_match_data))
+ {
+ start = search_regs.start[0];
+ end = search_regs.end[0];
+ }
+ else
+ /* If Vinhibit_changing_match_data is non-nil,
+ search_regs will not be changed. So let's
+ compute start and end here. */
+ {
+ start = BYTE_TO_CHAR (position);
+ end = BYTE_TO_CHAR (position + len_byte);
+ }
+
if ((n -= direction) != 0)
cursor += dirlen; /* to resume search */
else
- return ((direction > 0)
- ? search_regs.end[0] : search_regs.start[0]);
+ return direction > 0 ? end : start;
}
else
cursor += stride_for_teases; /* <sigh> we lose - */
@@ -2003,18 +2060,30 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
pos_byte += dirlen - i- direction;
if (i + direction == 0)
{
- int position;
+ int position, start, end;
pos_byte -= direction;
position = pos_byte + ((direction > 0) ? 1 - len_byte : 0);
-
set_search_regs (position, len_byte);
+ if (NILP (Vinhibit_changing_match_data))
+ {
+ start = search_regs.start[0];
+ end = search_regs.end[0];
+ }
+ else
+ /* If Vinhibit_changing_match_data is non-nil,
+ search_regs will not be changed. So let's
+ compute start and end here. */
+ {
+ start = BYTE_TO_CHAR (position);
+ end = BYTE_TO_CHAR (position + len_byte);
+ }
+
if ((n -= direction) != 0)
pos_byte += dirlen; /* to resume search */
else
- return ((direction > 0)
- ? search_regs.end[0] : search_regs.start[0]);
+ return direction > 0 ? end : start;
}
else
pos_byte += stride_for_teases;
@@ -2037,6 +2106,9 @@ set_search_regs (beg_byte, nbytes)
{
int i;
+ if (!NILP (Vinhibit_changing_match_data))
+ return;
+
/* Make sure we have registers in which to store
the match position. */
if (search_regs.num_regs == 0)
@@ -2095,7 +2167,7 @@ wordify (string)
if (SYNTAX (prev_c) == Sword)
word_count++;
if (!word_count)
- return empty_string;
+ return empty_unibyte_string;
adjust = - punct_count + 5 * (word_count - 1) + 4;
if (STRING_MULTIBYTE (string))
@@ -3165,6 +3237,13 @@ or other such regexp constructs are not replaced with this.
A value of nil (which is the normal value) means treat spaces literally. */);
Vsearch_spaces_regexp = Qnil;
+ DEFVAR_LISP ("inhibit-changing-match-data", &Vinhibit_changing_match_data,
+ doc: /* Internal use only.
+If non-nil, the match data will not be changed during call to searching or
+matching functions, such as `looking-at', `string-match', `re-search-forward'
+etc. */);
+ Vinhibit_changing_match_data = Qnil;
+
defsubr (&Slooking_at);
defsubr (&Sposix_looking_at);
defsubr (&Sstring_match);
diff --git a/src/sound.c b/src/sound.c
index 8b1bda8d6ef..0873fe8b82f 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -97,7 +97,6 @@ Boston, MA 02110-1301, USA. */
#endif /* WINDOWSNT */
/* BEGIN: Common Definitions */
-#define abs(X) ((X) < 0 ? -(X) : (X))
/* Symbols. */
diff --git a/src/sunfns.c b/src/sunfns.c
deleted file mode 100644
index 8aedfa07010..00000000000
--- a/src/sunfns.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/* Functions for Sun Windows menus and selection buffer.
- Copyright (C) 1987, 1999, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
-
-This file is probably totally obsolete. In any case, the FSF is
-unwilling to support it. We agreed to include it in our distribution
-only on the understanding that we would spend no time at all on it.
-
-If you have complaints about this file, send them to peck@sun.com.
-If no one at Sun wants to maintain this, then consider it not
-maintained at all. It would be a bad thing for the GNU project if
-this file took our effort away from higher-priority things.
-
-
-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 3, 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. */
-
-/* Author: Jeff Peck, Sun Microsystems, Inc. <peck@sun.com>
-Original ideas by David Kastan and Eric Negaard, SRI International
-Major help from: Steve Greenbaum, Reasoning Systems, Inc.
- <froud@kestrel.arpa>
-who first discovered the Menu_Base_Kludge.
- */
-
-/*
- * Emacs Lisp-Callable functions for sunwindows
- */
-#include <config.h>
-
-#include <stdio.h>
-#include <errno.h>
-#include <signal.h>
-#include <sunwindow/window_hs.h>
-#include <suntool/selection.h>
-#include <suntool/menu.h>
-#include <suntool/walkmenu.h>
-#include <suntool/frame.h>
-#include <suntool/window.h>
-
-#include <fcntl.h>
-#undef NULL /* We don't need sunview's idea of NULL */
-#include "lisp.h"
-#include "window.h"
-#include "buffer.h"
-#include "termhooks.h"
-
-/* conversion to/from character & frame coordinates */
-/* From Gosling Emacs SunWindow driver by Chris Torek */
-
-/* Chars to frame coords. Note that we speak in zero origin. */
-#define CtoSX(cx) ((cx) * Sun_Font_Xsize)
-#define CtoSY(cy) ((cy) * Sun_Font_Ysize)
-
-/* Frame coords to chars */
-#define StoCX(sx) ((sx) / Sun_Font_Xsize)
-#define StoCY(sy) ((sy) / Sun_Font_Ysize)
-
-#define CHECK_GFX(x) if((win_fd<0)&&(Fsun_window_init(),(win_fd<0)))return(x)
-int win_fd = -1;
-struct pixfont *Sun_Font; /* The font */
-int Sun_Font_Xsize; /* Width of font */
-int Sun_Font_Ysize; /* Height of font */
-
-#define Menu_Base_Kludge /* until menu_show_using_fd gets fixed */
-#ifdef Menu_Base_Kludge
-static Frame Menu_Base_Frame;
-static int Menu_Base_fd;
-static Lisp_Object sm_kludge_string;
-#endif
-struct cursor CurrentCursor; /* The current cursor */
-
-static short CursorData[16]; /* Build cursor here */
-static mpr_static(CursorMpr, 16, 16, 1, CursorData);
-static struct cursor NewCursor = {0, 0, PIX_SRC ^ PIX_DST, &CursorMpr};
-
-#define RIGHT_ARROW_CURSOR /* if you want the right arrow */
-#ifdef RIGHT_ARROW_CURSOR
-/* The default right-arrow cursor, with XOR drawing. */
-static short ArrowCursorData[16] = {
- 0x0001,0x0003,0x0007,0x000F,0x001F,0x003F,0x007F,0x000F,
- 0x001B,0x0019,0x0030,0x0030,0x0060,0x0060,0x00C0,0x00C0};
-static mpr_static(ArrowCursorMpr, 16, 16, 1, ArrowCursorData);
-struct cursor DefaultCursor = {15, 0, PIX_SRC ^ PIX_DST, &ArrowCursorMpr};
-
-#else
-/* The default left-arrow cursor, with XOR drawing. */
-static short ArrowCursorData[16] = {
- 0x8000,0xC000,0xE000,0xF000,0xF800,0xFC00,0xFE00,0xF000,
- 0xD800,0x9800,0x0C00,0x0C00,0x0600,0x0600,0x0300,0x0300};
-static mpr_static(ArrowCursorMpr, 16, 16, 1, ArrowCursorData);
-struct cursor DefaultCursor = {0, 0, PIX_SRC ^ PIX_DST, &ArrowCursorMpr};
-#endif
-
-/*
- * Initialize window
- */
-DEFUN ("sun-window-init", Fsun_window_init, Ssun_window_init, 0, 1, 0,
- doc: /* One time setup for using Sun Windows with mouse.
-Unless optional argument FORCE is non-nil, is a noop after its first call.
-Returns a number representing the file descriptor of the open Sun Window,
-or -1 if can not open it. */)
- (force)
- Lisp_Object force;
-{
- char *cp;
- static int already_initialized = 0;
-
- if ((! already_initialized) || (!NILP(force))) {
- cp = getenv("WINDOW_GFX");
- if (cp != 0) win_fd = emacs_open (cp, O_RDWR, 0);
- if (win_fd > 0)
- {
- Sun_Font = pf_default();
- Sun_Font_Xsize = Sun_Font->pf_defaultsize.x;
- Sun_Font_Ysize = Sun_Font->pf_defaultsize.y;
- Fsun_change_cursor_icon (Qnil); /* set up the default cursor */
- already_initialized = 1;
-#ifdef Menu_Base_Kludge
-
- /* Make a frame to use for putting the menu on, and get its fd. */
- Menu_Base_Frame = window_create(0, FRAME,
- WIN_X, 0, WIN_Y, 0,
- WIN_ROWS, 1, WIN_COLUMNS, 1,
- WIN_SHOW, FALSE,
- FRAME_NO_CONFIRM, 1,
- 0);
- Menu_Base_fd = (int) window_get(Menu_Base_Frame, WIN_FD);
-#endif
- }
- }
- return(make_number(win_fd));
-}
-
-/*
- * Mouse sit-for (allows a shorter interval than the regular sit-for
- * and can be interrupted by the mouse)
- */
-DEFUN ("sit-for-millisecs", Fsit_for_millisecs, Ssit_for_millisecs, 1, 1, 0,
- doc: /* Like sit-for, but ARG is milliseconds.
-Perform redisplay, then wait for ARG milliseconds or until
-input is available. Returns t if wait completed with no input.
-Redisplay does not happen if input is available before it starts. */)
- (n)
- Lisp_Object n;
-{
- struct timeval Timeout;
- int waitmask = 1;
-
- CHECK_NUMBER (n);
- Timeout.tv_sec = XINT(n) / 1000;
- Timeout.tv_usec = (XINT(n) - (Timeout.tv_sec * 1000)) * 1000;
-
- if (detect_input_pending()) return(Qnil);
- redisplay_preserve_echo_area (16);
- /*
- * Check for queued keyboard input/mouse hits again
- * (A bit screen update can take some time!)
- */
- if (detect_input_pending()) return(Qnil);
- select(1,&waitmask,0,0,&Timeout);
- if (detect_input_pending()) return(Qnil);
- return(Qt);
-}
-
-/*
- * Sun sleep-for (allows a shorter interval than the regular sleep-for)
- */
-DEFUN ("sleep-for-millisecs",
- Fsleep_for_millisecs,
- Ssleep_for_millisecs, 1, 1, 0,
- doc: /* Pause, without updating display, for ARG milliseconds. */)
- (n)
- Lisp_Object n;
-{
- unsigned useconds;
-
- CHECK_NUMBER (n);
- useconds = XINT(n) * 1000;
- usleep(useconds);
- return(Qt);
-}
-
-DEFUN ("update-display", Fupdate_display, Supdate_display, 0, 0, 0,
- doc: /* Perform redisplay. */)
- ()
-{
- redisplay_preserve_echo_area (17);
- return(Qt);
-}
-
-
-/*
- * Change the Sun mouse icon
- */
-DEFUN ("sun-change-cursor-icon",
- Fsun_change_cursor_icon,
- Ssun_change_cursor_icon, 1, 1, 0,
- doc: /* Change the Sun mouse cursor icon.
-ICON is a lisp vector whose 1st element
-is the X offset of the cursor hot-point, whose 2nd element is the Y offset
-of the cursor hot-point and whose 3rd element is the cursor pixel data
-expressed as a string. If ICON is nil then the original arrow cursor is used. */)
- (Icon)
- Lisp_Object Icon;
-{
- register unsigned char *cp;
- register short *p;
- register int i;
- Lisp_Object X_Hot, Y_Hot, Data;
-
- CHECK_GFX (Qnil);
- /*
- * If the icon is null, we just restore the DefaultCursor
- */
- if (NILP(Icon))
- CurrentCursor = DefaultCursor;
- else {
- /*
- * extract the data from the vector
- */
- CHECK_VECTOR (Icon);
- if (XVECTOR(Icon)->size < 3) return(Qnil);
- X_Hot = XVECTOR(Icon)->contents[0];
- Y_Hot = XVECTOR(Icon)->contents[1];
- Data = XVECTOR(Icon)->contents[2];
-
- CHECK_NUMBER (X_Hot);
- CHECK_NUMBER (Y_Hot);
- CHECK_STRING (Data);
- if (SCHARS (Data) != 32) return(Qnil);
- /*
- * Setup the new cursor
- */
- NewCursor.cur_xhot = X_Hot;
- NewCursor.cur_yhot = Y_Hot;
- cp = SDATA (Data);
- p = CursorData;
- i = 16;
- while(--i >= 0)
- *p++ = (cp[0] << 8) | cp[1], cp += 2;
- CurrentCursor = NewCursor;
- }
- win_setcursor(win_fd, &CurrentCursor);
- return(Qt);
-}
-
-/*
- * Interface for sunwindows selection
- */
-static Lisp_Object Current_Selection;
-
-static
-sel_write (sel, file)
- struct selection *sel;
- FILE *file;
-{
- fwrite (SDATA (Current_Selection), sizeof (char),
- sel->sel_items, file);
-}
-
-static
-sel_clear (sel, windowfd)
- struct selection *sel;
- int windowfd;
-{
-}
-
-static
-sel_read (sel, file)
- struct selection *sel;
- FILE *file;
-{
- register int i, n;
- register char *cp;
-
- Current_Selection = make_string ("", 0);
- if (sel->sel_items <= 0)
- return (0);
- cp = (char *) malloc(sel->sel_items);
- if (cp == (char *)0) {
- error("malloc failed in sel_read");
- return(-1);
- }
- n = fread(cp, sizeof(char), sel->sel_items, file);
- if (n > sel->sel_items) {
- error("fread botch in sel_read");
- return(-1);
- } else if (n < 0) {
- error("Error reading selection");
- return(-1);
- }
- /*
- * The shelltool select saves newlines as carriage returns,
- * but emacs wants newlines.
- */
- for (i = 0; i < n; i++)
- if (cp[i] == '\r') cp[i] = '\n';
-
- Current_Selection = make_string (cp, n);
- free (cp);
- return (0);
-}
-
-/*
- * Set the window system "selection" to be the arg STRING
- */
-DEFUN ("sun-set-selection", Fsun_set_selection, Ssun_set_selection, 1, 1,
- "sSet selection to: ",
- doc: /* Set the current sunwindow selection to STRING. */)
- (str)
- Lisp_Object str;
-{
- struct selection selection;
-
- CHECK_STRING (str);
- Current_Selection = str;
-
- CHECK_GFX (Qnil);
- selection.sel_type = SELTYPE_CHAR;
- selection.sel_items = SCHARS (str);
- selection.sel_itembytes = 1;
- selection.sel_pubflags = 1;
- selection_set(&selection, sel_write, sel_clear, win_fd);
- return (Qt);
-}
-/*
- * Stuff the current window system selection into the current buffer
- */
-DEFUN ("sun-get-selection", Fsun_get_selection, Ssun_get_selection, 0, 0, 0,
- doc: /* Return the current sunwindows selection as a string. */)
- ()
-{
- CHECK_GFX (Current_Selection);
- selection_get (sel_read, win_fd);
- return (Current_Selection);
-}
-
-Menu sun_menu_create();
-
-Menu_item
-sun_item_create (Pair)
- Lisp_Object Pair;
-{
- /* In here, we depend on Lisp supplying zero terminated strings in the data*/
- /* so we can just pass the pointers, and not recopy anything */
-
- Menu_item menu_item;
- Menu submenu;
- Lisp_Object String;
- Lisp_Object Value;
-
- CHECK_LIST_CONS (Pair, Pair);
- String = Fcar(Pair);
- CHECK_STRING(String);
- Value = Fcdr(Pair);
- if (SYMBOLP (Value))
- Value = SYMBOL_VALUE (Value);
- if (VECTORP (Value)) {
- submenu = sun_menu_create (Value);
- menu_item = menu_create_item
- (MENU_RELEASE, MENU_PULLRIGHT_ITEM, SDATA (String), submenu, 0);
- } else {
- menu_item = menu_create_item
- (MENU_RELEASE, MENU_STRING_ITEM, SDATA (String), Value, 0);
- }
- return menu_item;
-}
-
-Menu
-sun_menu_create (Vector)
- Lisp_Object Vector;
-{
- Menu menu;
- int i;
- CHECK_VECTOR(Vector);
- menu=menu_create(0);
- for(i = 0; i < XVECTOR(Vector)->size; i++) {
- menu_set (menu, MENU_APPEND_ITEM,
- sun_item_create(XVECTOR(Vector)->contents[i]), 0);
- }
- return menu;
-}
-
-/*
- * If the first item of the menu has nil as its value, then make the
- * item look like a label by inverting it and making it unselectable.
- * Returns 1 if the label was made, 0 otherwise.
- */
-int
-make_menu_label (menu)
- Menu menu;
-{
- int made_label_p = 0;
-
- if (( menu_get(menu, MENU_NITEMS) > 0 ) && /* At least one item */
- ((Lisp_Object) menu_get(menu_get(menu, MENU_NTH_ITEM, 1),
- MENU_VALUE) == Qnil )) {
- menu_set(menu_get(menu, MENU_NTH_ITEM, 1),
- MENU_INVERT, TRUE,
- MENU_FEEDBACK, FALSE,
- 0);
- made_label_p = 1;
- }
- return made_label_p;
-}
-
-/*
- * Do a pop-up menu and return the selected value
- */
-DEFUN ("sun-menu-internal",
- Fsun_menu_internal,
- Ssun_menu_internal, 5, 5, 0,
- doc: /* Set up a SunView pop-up menu and return the user's choice.
-Arguments WINDOW, X, Y, BUTTON, and MENU.
-*** User code should generally use sun-menu-evaluate ***
-
-Arguments WINDOW, X, Y, BUTTON, and MENU.
-Put MENU up in WINDOW at position X, Y.
-The BUTTON argument specifies the button to be released that selects an item:
- 1 = LEFT BUTTON
- 2 = MIDDLE BUTTON
- 4 = RIGHT BUTTON
-The MENU argument is a vector containing (STRING . VALUE) pairs.
-The VALUE of the selected item is returned.
-If the VALUE of the first pair is nil, then the first STRING will be used
-as a menu label. */)
- (window, X_Position, Y_Position, Button, MEnu)
- Lisp_Object window, X_Position, Y_Position, Button, MEnu;
-{
- Menu menu;
- int button, xpos, ypos;
- Event event0;
- Event *event = &event0;
- Lisp_Object Value, Pair;
-
- CHECK_NUMBER(X_Position);
- CHECK_NUMBER(Y_Position);
- CHECK_LIVE_WINDOW(window);
- CHECK_NUMBER(Button);
- CHECK_VECTOR(MEnu);
-
- CHECK_GFX (Qnil);
-
- xpos = CtoSX (WINDOW_LEFT_EDGE_COL (XWINDOW (window))
- + WINDOW_LEFT_SCROLL_BAR_COLS (XWINDOW (window))
- + XINT(X_Position));
- ypos = CtoSY (WINDOW_TOP_EDGE_LINE (XWINDOW(window)) + XINT(Y_Position));
-#ifdef Menu_Base_Kludge
- {static Lisp_Object symbol[2];
- symbol[0] = Fintern (sm_kludge_string, Qnil);
- Pair = Ffuncall (1, symbol);
- xpos += XINT (XCDR (Pair));
- ypos += XINT (XCAR (Pair));
- }
-#endif
-
- button = XINT(Button);
- if(button == 4) button = 3;
- event_set_id (event, BUT(button));
- event_set_down (event);
- event_set_x (event, xpos);
- event_set_y (event, ypos);
-
- menu = sun_menu_create(MEnu);
- make_menu_label(menu);
-
-#ifdef Menu_Base_Kludge
- Value = (Lisp_Object) menu_show(menu, Menu_Base_Frame, event, 0);
-#else
-/* This confuses the notifier or something: */
- Value = (Lisp_Object) menu_show_using_fd(menu, win_fd, event, 0);
-/*
- * Right button gets lost, and event sequencing or delivery gets mixed up
- * So, until that gets fixed, we use this <Menu_Base_Frame> kludge:
- */
-#endif
- menu_destroy (menu);
-
- return ((int)Value ? Value : Qnil);
-}
-
-
-/*
- * Define everything
- */
-syms_of_sunfns()
-{
-#ifdef Menu_Base_Kludge
- /* i'm just too lazy to re-write this into C code */
- /* so we will call this elisp function from C */
- sm_kludge_string = make_pure_string ("sm::menu-kludge", 15, 15, 0);
-#endif /* Menu_Base_Kludge */
-
- defsubr(&Ssun_window_init);
- defsubr(&Ssit_for_millisecs);
- defsubr(&Ssleep_for_millisecs);
- defsubr(&Supdate_display);
- defsubr(&Ssun_change_cursor_icon);
- defsubr(&Ssun_set_selection);
- defsubr(&Ssun_get_selection);
- defsubr(&Ssun_menu_internal);
-}
-
-/* arch-tag: 2d7decb7-58f6-41aa-b45b-077ccfab7158
- (do not change this comment) */
diff --git a/src/sysdep.c b/src/sysdep.c
index 408ccf2131a..81850919dd3 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -46,6 +46,12 @@ extern void srandom P_ ((unsigned int));
#endif
#endif
+/* The w32 build defines select stuff in w32.h, which is included by
+ sys/select.h (included below). */
+#ifndef WINDOWSNT
+#include "sysselect.h"
+#endif
+
#include "blockinput.h"
#ifdef MAC_OS8
@@ -176,6 +182,7 @@ extern int quit_char;
#include "termopts.h"
#include "dispextern.h"
#include "process.h"
+#include "cm.h" /* for reset_sys_modes */
#ifdef WINDOWSNT
#include <direct.h>
@@ -239,16 +246,11 @@ static int baud_convert[] =
int emacs_ospeed;
-/* The file descriptor for Emacs's input terminal.
- Under Unix, this is normally zero except when using X;
- under VMS, we place the input channel number here. */
-int input_fd;
-
void croak P_ ((char *)) NO_RETURN;
#ifdef AIXHFT
-void hft_init ();
-void hft_reset ();
+void hft_init P_ ((struct tty_display_info *));
+void hft_reset P_ ((struct tty_display_info *));
#endif
/* Temporary used by `sigblock' when defined in terms of signprocmask. */
@@ -331,16 +333,7 @@ get_current_dir_name ()
#endif
-/* Specify a different file descriptor for further input operations. */
-
-void
-change_input_fd (fd)
- int fd;
-{
- input_fd = fd;
-}
-
-/* Discard pending input on descriptor input_fd. */
+/* Discard pending input on all input descriptors. */
void
discard_tty_input ()
@@ -351,54 +344,61 @@ discard_tty_input ()
if (noninteractive)
return;
- /* Discarding input is not safe when the input could contain
- replies from the X server. So don't do it. */
- if (read_socket_hook)
- return;
-
#ifdef VMS
end_kbd_input ();
- SYS$QIOW (0, input_fd, IO$_READVBLK|IO$M_PURGE, input_iosb, 0, 0,
+ SYS$QIOW (0, fileno (CURTTY()->input), IO$_READVBLK|IO$M_PURGE, input_iosb, 0, 0,
&buf.main, 0, 0, terminator_mask, 0, 0);
queue_kbd_input ();
#else /* not VMS */
#ifdef APOLLO
{
- int zero = 0;
- ioctl (input_fd, TIOCFLUSH, &zero);
+ struct tty_display_info *tty;
+ for (tty = tty_list; tty; tty = tty->next)
+ {
+ int zero = 0;
+ if (tty->input)
+ ioctl (fileno (tty->input), TIOCFLUSH, &zero);
+ }
}
#else /* not Apollo */
#ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */
while (dos_keyread () != -1)
;
#else /* not MSDOS */
- EMACS_GET_TTY (input_fd, &buf);
- EMACS_SET_TTY (input_fd, &buf, 0);
+ {
+ struct tty_display_info *tty;
+ for (tty = tty_list; tty; tty = tty->next)
+ {
+ if (tty->input) /* Is the device suspended? */
+ {
+ EMACS_GET_TTY (fileno (tty->input), &buf);
+ EMACS_SET_TTY (fileno (tty->input), &buf, 0);
+ }
+ }
+ }
#endif /* not MSDOS */
#endif /* not Apollo */
#endif /* not VMS */
#endif /* not WINDOWSNT */
}
+
#ifdef SIGTSTP
/* Arrange for character C to be read as the next input from
- the terminal. */
+ the terminal.
+ XXX What if we have multiple ttys?
+*/
void
-#ifdef PROTOTYPES
stuff_char (char c)
-#else
-stuff_char (c)
- char c;
-#endif
{
- if (read_socket_hook)
+ if (! FRAME_TERMCAP_P (SELECTED_FRAME ()))
return;
/* Should perhaps error if in batch mode */
#ifdef TIOCSTI
- ioctl (input_fd, TIOCSTI, &c);
+ ioctl (fileno (CURTTY()->input), TIOCSTI, &c);
#else /* no TIOCSTI */
error ("Cannot stuff terminal input characters in this version of Unix");
#endif /* no TIOCSTI */
@@ -407,7 +407,7 @@ stuff_char (c)
#endif /* SIGTSTP */
void
-init_baud_rate ()
+init_baud_rate (int fd)
{
if (noninteractive)
emacs_ospeed = 0;
@@ -422,7 +422,7 @@ init_baud_rate ()
#ifdef VMS
struct sensemode sg;
- SYS$QIOW (0, input_fd, IO$_SENSEMODE, &sg, 0, 0,
+ SYS$QIOW (0, fd, IO$_SENSEMODE, &sg, 0, 0,
&sg.class, 12, 0, 0, 0, 0 );
emacs_ospeed = sg.xmit_baud;
#else /* not VMS */
@@ -430,7 +430,7 @@ init_baud_rate ()
struct termios sg;
sg.c_cflag = B9600;
- tcgetattr (input_fd, &sg);
+ tcgetattr (fd, &sg);
emacs_ospeed = cfgetospeed (&sg);
#if defined (USE_GETOBAUD) && defined (getobaud)
/* m88k-motorola-sysv3 needs this (ghazi@noc.rutgers.edu) 9/1/94. */
@@ -443,16 +443,16 @@ init_baud_rate ()
sg.c_cflag = B9600;
#ifdef HAVE_TCATTR
- tcgetattr (input_fd, &sg);
+ tcgetattr (fd, &sg);
#else
- ioctl (input_fd, TCGETA, &sg);
+ ioctl (fd, TCGETA, &sg);
#endif
emacs_ospeed = sg.c_cflag & CBAUD;
#else /* neither VMS nor TERMIOS nor TERMIO */
struct sgttyb sg;
sg.sg_ospeed = B9600;
- if (ioctl (input_fd, TIOCGETP, &sg) < 0)
+ if (ioctl (fd, TIOCGETP, &sg) < 0)
abort ();
emacs_ospeed = sg.sg_ospeed;
#endif /* not HAVE_TERMIO */
@@ -468,6 +468,7 @@ init_baud_rate ()
baud_rate = 1200;
}
+
/*ARGSUSED*/
void
set_exclusive_use (fd)
@@ -729,7 +730,7 @@ child_setup_tty (out)
#ifdef BSD4_1
if (interrupt_input)
- reset_sigio ();
+ reset_sigio (0);
#endif /* BSD4_1 */
#ifdef RTU
{
@@ -986,53 +987,86 @@ restore_signal_handlers (saved_handlers)
}
}
+#ifndef SIGIO
+/* If SIGIO is broken, don't do anything. */
+void
+init_sigio (int fd)
+{
+}
+
+void
+reset_sigio (int fd)
+{
+}
+
+void
+request_sigio (void)
+{
+}
+
+void
+unrequest_sigio (void)
+{
+}
+
+#else
#ifdef F_SETFL
-int old_fcntl_flags;
+int old_fcntl_flags[MAXDESC];
void
init_sigio (fd)
int fd;
{
#ifdef FASYNC
- old_fcntl_flags = fcntl (fd, F_GETFL, 0) & ~FASYNC;
- fcntl (fd, F_SETFL, old_fcntl_flags | FASYNC);
+ old_fcntl_flags[fd] = fcntl (fd, F_GETFL, 0) & ~FASYNC;
+ fcntl (fd, F_SETFL, old_fcntl_flags[fd] | FASYNC);
#endif
interrupts_deferred = 0;
}
void
-reset_sigio ()
+reset_sigio (fd)
+ int fd;
{
- unrequest_sigio ();
+#ifdef FASYNC
+ fcntl (fd, F_SETFL, old_fcntl_flags[fd]);
+#endif
}
#ifdef FASYNC /* F_SETFL does not imply existence of FASYNC */
+/* XXX Uhm, FASYNC is not used anymore here. */
+/* XXX Yeah, but you need it for SIGIO, don't you? */
void
request_sigio ()
{
- if (noninteractive || read_socket_hook)
+ if (noninteractive)
return;
#ifdef SIGWINCH
sigunblock (sigmask (SIGWINCH));
#endif
- fcntl (input_fd, F_SETFL, old_fcntl_flags | FASYNC);
+ sigunblock (sigmask (SIGIO));
interrupts_deferred = 0;
}
void
-unrequest_sigio ()
-{
- if (noninteractive || read_socket_hook)
+unrequest_sigio (void)
+{
+ if (noninteractive)
+ return;
+
+#if 0 /* XXX What's wrong with blocking SIGIO under X? */
+ if (x_display_list)
return;
+#endif
#ifdef SIGWINCH
sigblock (sigmask (SIGWINCH));
#endif
- fcntl (input_fd, F_SETFL, old_fcntl_flags);
+ sigblock (sigmask (SIGIO));
interrupts_deferred = 1;
}
@@ -1047,7 +1081,8 @@ request_sigio ()
if (noninteractive || read_socket_hook)
return;
- ioctl (input_fd, FIOASYNC, &on);
+ /* XXX CURTTY() is bogus here. */
+ ioctl (fileno (CURTTY ()->input), FIOASYNC, &on);
interrupts_deferred = 0;
}
@@ -1059,7 +1094,8 @@ unrequest_sigio ()
if (noninteractive || read_socket_hook)
return;
- ioctl (input_fd, FIOASYNC, &off);
+ /* XXX CURTTY() is bogus here. */
+ ioctl (fileno (CURTTY ()->input), FIOASYNC, &off);
interrupts_deferred = 1;
}
@@ -1080,7 +1116,7 @@ request_sigio ()
sigemptyset (&st);
sigaddset (&st, SIGIO);
- ioctl (input_fd, FIOASYNC, &on);
+ ioctl (0, FIOASYNC, &on); /* XXX This fails for multiple ttys. */
interrupts_deferred = 0;
sigprocmask (SIG_UNBLOCK, &st, (sigset_t *)0);
}
@@ -1093,7 +1129,7 @@ unrequest_sigio ()
if (noninteractive || read_socket_hook)
return;
- ioctl (input_fd, FIOASYNC, &off);
+ ioctl (0, FIOASYNC, &off); /* XXX This fails for multiple ttys. */
interrupts_deferred = 1;
}
@@ -1123,6 +1159,7 @@ unrequest_sigio ()
#endif /* STRIDE */
#endif /* FASYNC */
#endif /* F_SETFL */
+#endif /* SIGIO */
/* Saving and restoring the process group of Emacs's terminal. */
@@ -1145,30 +1182,39 @@ unrequest_sigio ()
the tty's pgroup just like any other terminal setting. If
inherited_group was not the tty's pgroup, then we'll get a
SIGTTmumble when we try to change the tty's pgroup, and a CONT if
- it goes foreground in the future, which is what should happen. */
+ it goes foreground in the future, which is what should happen.
+
+ This variable is initialized in emacs.c. */
int inherited_pgroup;
-/* Split off the foreground process group to Emacs alone.
- When we are in the foreground, but not started in our own process
- group, redirect the TTY to point to our own process group. We need
- to be in our own process group to receive SIGIO properly. */
-void
-narrow_foreground_group ()
+/* Split off the foreground process group to Emacs alone. When we are
+ in the foreground, but not started in our own process group,
+ redirect the tty device handle FD to point to our own process
+ group. We need to be in our own process group to receive SIGIO
+ properly. */
+static void
+narrow_foreground_group (int fd)
{
int me = getpid ();
setpgrp (0, inherited_pgroup);
+#if 0
+ /* XXX inherited_pgroup should not be zero here, but GTK seems to
+ mess this up. */
+ if (! inherited_pgroup)
+ abort (); /* Should not happen. */
+#endif
if (inherited_pgroup != me)
- EMACS_SET_TTY_PGRP (input_fd, &me);
+ EMACS_SET_TTY_PGRP (fd, &me); /* XXX This only works on the controlling tty. */
setpgrp (0, me);
}
/* Set the tty to our original foreground group. */
-void
-widen_foreground_group ()
+static void
+widen_foreground_group (int fd)
{
if (inherited_pgroup != getpid ())
- EMACS_SET_TTY_PGRP (input_fd, &inherited_pgroup);
+ EMACS_SET_TTY_PGRP (fd, &inherited_pgroup);
setpgrp (0, inherited_pgroup);
}
@@ -1326,14 +1372,6 @@ emacs_set_tty (fd, settings, flushp)
}
-/* The initial tty mode bits */
-struct emacs_tty old_tty;
-
-/* 1 if we have been through init_sys_modes. */
-int term_initted;
-
-/* 1 if outer tty status has been recorded. */
-int old_tty_valid;
#ifdef BSD4_1
/* BSD 4.1 needs to keep track of the lmode bits in order to start
@@ -1343,7 +1381,7 @@ int lmode;
#ifndef F_SETOWN_BUG
#ifdef F_SETOWN
-int old_fcntl_owner;
+int old_fcntl_owner[MAXDESC];
#endif /* F_SETOWN */
#endif /* F_SETOWN_BUG */
@@ -1368,8 +1406,22 @@ static struct ltchars new_ltchars = {-1,-1,-1,-1,-1,-1};
static struct tchars new_tchars = {-1,-1,-1,-1,-1,-1};
#endif
+/* Initialize the terminal mode on all tty devices that are currently
+ open. */
+
+void
+init_all_sys_modes (void)
+{
+ struct tty_display_info *tty;
+ for (tty = tty_list; tty; tty = tty->next)
+ init_sys_modes (tty);
+}
+
+/* Initialize the terminal mode on the given tty device. */
+
void
-init_sys_modes ()
+init_sys_modes (tty_out)
+ struct tty_display_info *tty_out;
{
struct emacs_tty tty;
@@ -1385,6 +1437,9 @@ init_sys_modes ()
if (noninteractive)
return;
+ if (!tty_out->output)
+ return; /* The tty is suspended. */
+
#ifdef VMS
if (!input_ef)
input_ef = get_kbd_event_flag ();
@@ -1415,266 +1470,296 @@ init_sys_modes ()
#ifndef VMS4_4
sys_access_reinit ();
#endif
-#endif /* not VMS */
+#endif /* VMS */
#ifdef BSD_PGRPS
- if (! read_socket_hook && EQ (Vwindow_system, Qnil))
- narrow_foreground_group ();
+#if 0
+ /* read_socket_hook is not global anymore. I think doing this
+ unconditionally will not cause any problems. */
+ if (! read_socket_hook && EQ (Vinitial_window_system, Qnil))
#endif
-
-#ifdef HAVE_WINDOW_SYSTEM
- /* Emacs' window system on MSDOG uses the `internal terminal' and therefore
- needs the initialization code below. */
- if (!read_socket_hook && EQ (Vwindow_system, Qnil))
+ narrow_foreground_group (fileno (tty_out->input));
#endif
- {
- EMACS_GET_TTY (input_fd, &old_tty);
- old_tty_valid = 1;
+ if (! tty_out->old_tty)
+ tty_out->old_tty = (struct emacs_tty *) xmalloc (sizeof (struct emacs_tty));
+
+ EMACS_GET_TTY (fileno (tty_out->input), tty_out->old_tty);
- tty = old_tty;
+ tty = *tty_out->old_tty;
#if defined (HAVE_TERMIO) || defined (HAVE_TERMIOS)
- XSETINT (Vtty_erase_char, old_tty.main.c_cc[VERASE]);
+ XSETINT (Vtty_erase_char, tty.main.c_cc[VERASE]);
#ifdef DGUX
- /* This allows meta to be sent on 8th bit. */
- tty.main.c_iflag &= ~INPCK; /* don't check input for parity */
+ /* This allows meta to be sent on 8th bit. */
+ tty.main.c_iflag &= ~INPCK; /* don't check input for parity */
#endif
- tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */
- tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */
+ tty.main.c_iflag |= (IGNBRK); /* Ignore break condition */
+ tty.main.c_iflag &= ~ICRNL; /* Disable map of CR to NL on input */
#ifdef INLCR /* I'm just being cautious,
since I can't check how widespread INLCR is--rms. */
- tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */
+ tty.main.c_iflag &= ~INLCR; /* Disable map of NL to CR on input */
#endif
#ifdef ISTRIP
- tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */
+ tty.main.c_iflag &= ~ISTRIP; /* don't strip 8th bit on input */
#endif
- tty.main.c_lflag &= ~ECHO; /* Disable echo */
- tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */
+ tty.main.c_lflag &= ~ECHO; /* Disable echo */
+ tty.main.c_lflag &= ~ICANON; /* Disable erase/kill processing */
#ifdef IEXTEN
- tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */
+ tty.main.c_lflag &= ~IEXTEN; /* Disable other editing characters. */
#endif
- tty.main.c_lflag |= ISIG; /* Enable signals */
- if (flow_control)
- {
- tty.main.c_iflag |= IXON; /* Enable start/stop output control */
+ tty.main.c_lflag |= ISIG; /* Enable signals */
+ if (tty_out->flow_control)
+ {
+ tty.main.c_iflag |= IXON; /* Enable start/stop output control */
#ifdef IXANY
- tty.main.c_iflag &= ~IXANY;
+ tty.main.c_iflag &= ~IXANY;
#endif /* IXANY */
- }
- else
- tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */
- tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL
- on output */
- tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */
+ }
+ else
+ tty.main.c_iflag &= ~IXON; /* Disable start/stop output control */
+ tty.main.c_oflag &= ~ONLCR; /* Disable map of NL to CR-NL
+ on output */
+ tty.main.c_oflag &= ~TAB3; /* Disable tab expansion */
#ifdef CS8
- if (meta_key)
- {
- tty.main.c_cflag |= CS8; /* allow 8th bit on input */
- tty.main.c_cflag &= ~PARENB;/* Don't check parity */
- }
+ if (tty_out->meta_key)
+ {
+ tty.main.c_cflag |= CS8; /* allow 8th bit on input */
+ tty.main.c_cflag &= ~PARENB;/* Don't check parity */
+ }
#endif
+ if (tty_out->input == stdin)
+ {
tty.main.c_cc[VINTR] = quit_char; /* C-g (usually) gives SIGINT */
/* Set up C-g for both SIGQUIT and SIGINT.
- We don't know which we will get, but we handle both alike
- so which one it really gives us does not matter. */
+ We don't know which we will get, but we handle both alike
+ so which one it really gives us does not matter. */
tty.main.c_cc[VQUIT] = quit_char;
- tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */
- tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */
+ }
+ else
+ {
+ /* We normally don't get interrupt or quit signals from tty
+ devices other than our controlling terminal; therefore,
+ we must handle C-g as normal input. Unfortunately, this
+ means that the interrupt and quit feature must be
+ disabled on secondary ttys, or we would not even see the
+ keypress.
+
+ Note that even though emacsclient could have special code
+ to pass SIGINT to Emacs, we should _not_ enable
+ interrupt/quit keys for emacsclient frames. This means
+ that we can't break out of loops in C code from a
+ secondary tty frame, but we can always decide what
+ display the C-g came from, which is more important from a
+ usability point of view. (Consider the case when two
+ people work together using the same Emacs instance.) */
+ tty.main.c_cc[VINTR] = CDISABLE;
+ tty.main.c_cc[VQUIT] = CDISABLE;
+ }
+ tty.main.c_cc[VMIN] = 1; /* Input should wait for at least 1 char */
+ tty.main.c_cc[VTIME] = 0; /* no matter how long that takes. */
#ifdef VSWTCH
- tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use
+ tty.main.c_cc[VSWTCH] = CDISABLE; /* Turn off shell layering use
of C-z */
#endif /* VSWTCH */
-
+
#if defined (mips) || defined (HAVE_TCATTR)
#ifdef VSUSP
- tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */
+ tty.main.c_cc[VSUSP] = CDISABLE; /* Turn off mips handling of C-z. */
#endif /* VSUSP */
#ifdef V_DSUSP
- tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */
+ tty.main.c_cc[V_DSUSP] = CDISABLE; /* Turn off mips handling of C-y. */
#endif /* V_DSUSP */
#ifdef VDSUSP /* Some systems have VDSUSP, some have V_DSUSP. */
- tty.main.c_cc[VDSUSP] = CDISABLE;
+ tty.main.c_cc[VDSUSP] = CDISABLE;
#endif /* VDSUSP */
#ifdef VLNEXT
- tty.main.c_cc[VLNEXT] = CDISABLE;
+ tty.main.c_cc[VLNEXT] = CDISABLE;
#endif /* VLNEXT */
#ifdef VREPRINT
- tty.main.c_cc[VREPRINT] = CDISABLE;
+ tty.main.c_cc[VREPRINT] = CDISABLE;
#endif /* VREPRINT */
#ifdef VWERASE
- tty.main.c_cc[VWERASE] = CDISABLE;
+ tty.main.c_cc[VWERASE] = CDISABLE;
#endif /* VWERASE */
#ifdef VDISCARD
- tty.main.c_cc[VDISCARD] = CDISABLE;
+ tty.main.c_cc[VDISCARD] = CDISABLE;
#endif /* VDISCARD */
- if (flow_control)
- {
+ if (tty_out->flow_control)
+ {
#ifdef VSTART
- tty.main.c_cc[VSTART] = '\021';
+ tty.main.c_cc[VSTART] = '\021';
#endif /* VSTART */
#ifdef VSTOP
- tty.main.c_cc[VSTOP] = '\023';
+ tty.main.c_cc[VSTOP] = '\023';
#endif /* VSTOP */
- }
- else
- {
+ }
+ else
+ {
#ifdef VSTART
- tty.main.c_cc[VSTART] = CDISABLE;
+ tty.main.c_cc[VSTART] = CDISABLE;
#endif /* VSTART */
#ifdef VSTOP
- tty.main.c_cc[VSTOP] = CDISABLE;
+ tty.main.c_cc[VSTOP] = CDISABLE;
#endif /* VSTOP */
- }
+ }
#endif /* mips or HAVE_TCATTR */
#ifdef SET_LINE_DISCIPLINE
- /* Need to explicitly request TERMIODISC line discipline or
- Ultrix's termios does not work correctly. */
- tty.main.c_line = SET_LINE_DISCIPLINE;
+ /* Need to explicitly request TERMIODISC line discipline or
+ Ultrix's termios does not work correctly. */
+ tty.main.c_line = SET_LINE_DISCIPLINE;
#endif
#ifdef AIX
#ifndef IBMR2AIX
- /* AIX enhanced edit loses NULs, so disable it. */
- tty.main.c_line = 0;
- tty.main.c_iflag &= ~ASCEDIT;
+ /* AIX enhanced edit loses NULs, so disable it. */
+ tty.main.c_line = 0;
+ tty.main.c_iflag &= ~ASCEDIT;
#else
- tty.main.c_cc[VSTRT] = CDISABLE;
- tty.main.c_cc[VSTOP] = CDISABLE;
- tty.main.c_cc[VSUSP] = CDISABLE;
- tty.main.c_cc[VDSUSP] = CDISABLE;
+ tty.main.c_cc[VSTRT] = CDISABLE;
+ tty.main.c_cc[VSTOP] = CDISABLE;
+ tty.main.c_cc[VSUSP] = CDISABLE;
+ tty.main.c_cc[VDSUSP] = CDISABLE;
#endif /* IBMR2AIX */
- if (flow_control)
- {
+ if (tty_out->flow_control)
+ {
#ifdef VSTART
- tty.main.c_cc[VSTART] = '\021';
+ tty.main.c_cc[VSTART] = '\021';
#endif /* VSTART */
#ifdef VSTOP
- tty.main.c_cc[VSTOP] = '\023';
+ tty.main.c_cc[VSTOP] = '\023';
#endif /* VSTOP */
- }
- /* Also, PTY overloads NUL and BREAK.
- don't ignore break, but don't signal either, so it looks like NUL.
- This really serves a purpose only if running in an XTERM window
- or via TELNET or the like, but does no harm elsewhere. */
- tty.main.c_iflag &= ~IGNBRK;
- tty.main.c_iflag &= ~BRKINT;
+ }
+ /* Also, PTY overloads NUL and BREAK.
+ don't ignore break, but don't signal either, so it looks like NUL.
+ This really serves a purpose only if running in an XTERM window
+ or via TELNET or the like, but does no harm elsewhere. */
+ tty.main.c_iflag &= ~IGNBRK;
+ tty.main.c_iflag &= ~BRKINT;
#endif
#else /* if not HAVE_TERMIO */
#ifdef VMS
- tty.main.tt_char |= TT$M_NOECHO;
- if (meta_key)
- tty.main.tt_char |= TT$M_EIGHTBIT;
- if (flow_control)
- tty.main.tt_char |= TT$M_TTSYNC;
- else
- tty.main.tt_char &= ~TT$M_TTSYNC;
- tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
+ tty.main.tt_char |= TT$M_NOECHO;
+ if (meta_key)
+ tty.main.tt_char |= TT$M_EIGHTBIT;
+ if (tty_out->flow_control)
+ tty.main.tt_char |= TT$M_TTSYNC;
+ else
+ tty.main.tt_char &= ~TT$M_TTSYNC;
+ tty.main.tt2_char |= TT2$M_PASTHRU | TT2$M_XON;
#else /* not VMS (BSD, that is) */
#ifndef DOS_NT
- XSETINT (Vtty_erase_char, tty.main.sg_erase);
- tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS);
- if (meta_key)
- tty.main.sg_flags |= ANYP;
- tty.main.sg_flags |= interrupt_input ? RAW : CBREAK;
+ XSETINT (Vtty_erase_char, tty.main.sg_erase);
+ tty.main.sg_flags &= ~(ECHO | CRMOD | XTABS);
+ if (meta_key)
+ tty.main.sg_flags |= ANYP;
+ tty.main.sg_flags |= interrupt_input ? RAW : CBREAK;
#endif /* not DOS_NT */
#endif /* not VMS (BSD, that is) */
#endif /* not HAVE_TERMIO */
- /* If going to use CBREAK mode, we must request C-g to interrupt
- and turn off start and stop chars, etc. If not going to use
- CBREAK mode, do this anyway so as to turn off local flow
- control for user coming over network on 4.2; in this case,
- only t_stopc and t_startc really matter. */
+ /* If going to use CBREAK mode, we must request C-g to interrupt
+ and turn off start and stop chars, etc. If not going to use
+ CBREAK mode, do this anyway so as to turn off local flow
+ control for user coming over network on 4.2; in this case,
+ only t_stopc and t_startc really matter. */
#ifndef HAVE_TERMIO
#ifdef HAVE_TCHARS
- /* Note: if not using CBREAK mode, it makes no difference how we
- set this */
- tty.tchars = new_tchars;
- tty.tchars.t_intrc = quit_char;
- if (flow_control)
- {
- tty.tchars.t_startc = '\021';
- tty.tchars.t_stopc = '\023';
- }
-
- tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | old_tty.lmode;
+ /* Note: if not using CBREAK mode, it makes no difference how we
+ set this */
+ tty.tchars = new_tchars;
+ tty.tchars.t_intrc = quit_char;
+ if (tty_out->flow_control)
+ {
+ tty.tchars.t_startc = '\021';
+ tty.tchars.t_stopc = '\023';
+ }
+
+ tty.lmode = LDECCTQ | LLITOUT | LPASS8 | LNOFLSH | tty_out->old_tty.lmode;
#ifdef ultrix
- /* Under Ultrix 4.2a, leaving this out doesn't seem to hurt
- anything, and leaving it in breaks the meta key. Go figure. */
- tty.lmode &= ~LLITOUT;
+ /* Under Ultrix 4.2a, leaving this out doesn't seem to hurt
+ anything, and leaving it in breaks the meta key. Go figure. */
+ tty.lmode &= ~LLITOUT;
#endif
-
+
#ifdef BSD4_1
- lmode = tty.lmode;
+ lmode = tty.lmode;
#endif
#endif /* HAVE_TCHARS */
#endif /* not HAVE_TERMIO */
#ifdef HAVE_LTCHARS
- tty.ltchars = new_ltchars;
+ tty.ltchars = new_ltchars;
#endif /* HAVE_LTCHARS */
#ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida, MW Aug 1993 */
- if (!term_initted)
- internal_terminal_init ();
- dos_ttraw ();
+ if (!tty_out->term_initted)
+ internal_terminal_init ();
+ dos_ttraw ();
#endif
- EMACS_SET_TTY (input_fd, &tty, 0);
+ EMACS_SET_TTY (fileno (tty_out->input), &tty, 0);
- /* This code added to insure that, if flow-control is not to be used,
- we have an unlocked terminal at the start. */
+ /* This code added to insure that, if flow-control is not to be used,
+ we have an unlocked terminal at the start. */
#ifdef TCXONC
- if (!flow_control) ioctl (input_fd, TCXONC, 1);
+ if (!tty_out->flow_control) ioctl (fileno (tty_out->input), TCXONC, 1);
#endif
#ifndef APOLLO
#ifdef TIOCSTART
- if (!flow_control) ioctl (input_fd, TIOCSTART, 0);
+ if (!tty_out->flow_control) ioctl (fileno (tty_out->input), TIOCSTART, 0);
#endif
#endif
#if defined (HAVE_TERMIOS) || defined (HPUX9)
#ifdef TCOON
- if (!flow_control) tcflow (input_fd, TCOON);
+ if (!tty_out->flow_control) tcflow (fileno (tty_out->input), TCOON);
#endif
#endif
#ifdef AIXHFT
- hft_init ();
+ hft_init (tty_out);
#ifdef IBMR2AIX
- {
- /* IBM's HFT device usually thinks a ^J should be LF/CR. We need it
- to be only LF. This is the way that is done. */
- struct termio tty;
-
- if (ioctl (1, HFTGETID, &tty) != -1)
- write (1, "\033[20l", 5);
- }
+ {
+ /* IBM's HFT device usually thinks a ^J should be LF/CR. We need it
+ to be only LF. This is the way that is done. */
+ struct termio tty;
+
+ if (ioctl (1, HFTGETID, &tty) != -1)
+ write (1, "\033[20l", 5);
+ }
#endif
#endif /* AIXHFT */
#ifdef VMS
/* Appears to do nothing when in PASTHRU mode.
- SYS$QIOW (0, input_fd, IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0,
+ SYS$QIOW (0, fileno (tty_out->input), IO$_SETMODE|IO$M_OUTBAND, 0, 0, 0,
interrupt_signal, oob_chars, 0, 0, 0, 0);
*/
- queue_kbd_input (0);
+ queue_kbd_input (0);
#endif /* VMS */
- }
#ifdef F_SETFL
#ifndef F_SETOWN_BUG
#ifdef F_GETOWN /* F_SETFL does not imply existence of F_GETOWN */
- if (interrupt_input
- && ! read_socket_hook && EQ (Vwindow_system, Qnil))
+ if (interrupt_input)
{
- old_fcntl_owner = fcntl (input_fd, F_GETOWN, 0);
- fcntl (input_fd, F_SETOWN, getpid ());
- init_sigio (input_fd);
+ old_fcntl_owner[fileno (tty_out->input)] =
+ fcntl (fileno (tty_out->input), F_GETOWN, 0);
+ fcntl (fileno (tty_out->input), F_SETOWN, getpid ());
+ init_sigio (fileno (tty_out->input));
+#ifdef HAVE_GPM
+ if (gpm_tty == tty_out)
+ {
+ /* Arrange for mouse events to give us SIGIO signals. */
+ fcntl (gpm_fd, F_SETOWN, getpid ());
+ fcntl (gpm_fd, F_SETFL, fcntl (gpm_fd, F_GETFL, 0) | O_NONBLOCK);
+ init_sigio (gpm_fd);
+ }
+#endif /* HAVE_GPM */
}
#endif /* F_GETOWN */
#endif /* F_SETOWN_BUG */
@@ -1682,7 +1767,7 @@ init_sys_modes ()
#ifdef BSD4_1
if (interrupt_input)
- init_sigio (input_fd);
+ init_sigio (fileno (tty_out->input));
#endif
#ifdef VMS /* VMS sometimes has this symbol but lacks setvbuf. */
@@ -1692,53 +1777,57 @@ init_sys_modes ()
/* This symbol is defined on recent USG systems.
Someone says without this call USG won't really buffer the file
even with a call to setbuf. */
- setvbuf (stdout, (char *) _sobuf, _IOFBF, sizeof _sobuf);
+ setvbuf (tty_out->output, (char *) _sobuf, _IOFBF, sizeof _sobuf);
#else
- setbuf (stdout, (char *) _sobuf);
-#endif
-#ifdef HAVE_WINDOW_SYSTEM
- /* Emacs' window system on MSDOG uses the `internal terminal' and therefore
- needs the initialization code below. */
- if (EQ (Vwindow_system, Qnil)
-#ifndef WINDOWSNT
- /* When running in tty mode on NT/Win95, we have a read_socket
- hook, but still need the rest of the initialization code below. */
- && (! read_socket_hook)
+ setbuf (tty_out->output, (char *) _sobuf);
#endif
- )
-#endif
- set_terminal_modes ();
- if (!term_initted
- && FRAMEP (Vterminal_frame)
- && FRAME_TERMCAP_P (XFRAME (Vterminal_frame)))
- init_frame_faces (XFRAME (Vterminal_frame));
+ if (tty_out->terminal->set_terminal_modes_hook)
+ tty_out->terminal->set_terminal_modes_hook (tty_out->terminal);
- if (term_initted && no_redraw_on_reenter)
+ if (!tty_out->term_initted)
{
+ Lisp_Object tail, frame;
+ FOR_EACH_FRAME (tail, frame)
+ {
+ /* XXX This needs to be revised. */
+ if (FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_TTY (XFRAME (frame)) == tty_out)
+ init_frame_faces (XFRAME (frame));
+ }
+ }
+
+ if (tty_out->term_initted && no_redraw_on_reenter)
+ {
+ /* XXX This seems wrong on multi-tty. */
if (display_completed)
direct_output_forward_char (0);
}
else
{
+ Lisp_Object tail, frame;
frame_garbaged = 1;
- if (FRAMEP (Vterminal_frame))
- FRAME_GARBAGED_P (XFRAME (Vterminal_frame)) = 1;
+ FOR_EACH_FRAME (tail, frame)
+ {
+ if (FRAME_TERMCAP_P (XFRAME (frame))
+ && FRAME_TTY (XFRAME (frame)) == tty_out)
+ FRAME_GARBAGED_P (XFRAME (frame)) = 1;
+ }
}
- term_initted = 1;
+ tty_out->term_initted = 1;
}
/* Return nonzero if safe to use tabs in output.
At the time this is called, init_sys_modes has not been done yet. */
int
-tabs_safe_p ()
+tabs_safe_p (int fd)
{
- struct emacs_tty tty;
+ struct emacs_tty etty;
- EMACS_GET_TTY (input_fd, &tty);
- return EMACS_TTY_TABS_OK (&tty);
+ EMACS_GET_TTY (fd, &etty);
+ return EMACS_TTY_TABS_OK (&etty);
}
/* Get terminal size from system.
@@ -1746,8 +1835,7 @@ tabs_safe_p ()
We store 0 if there's no valid information. */
void
-get_frame_size (widthp, heightp)
- int *widthp, *heightp;
+get_tty_size (int fd, int *widthp, int *heightp)
{
#ifdef TIOCGWINSZ
@@ -1755,7 +1843,7 @@ get_frame_size (widthp, heightp)
/* BSD-style. */
struct winsize size;
- if (ioctl (input_fd, TIOCGWINSZ, &size) == -1)
+ if (ioctl (fd, TIOCGWINSZ, &size) == -1)
*widthp = *heightp = 0;
else
{
@@ -1769,7 +1857,7 @@ get_frame_size (widthp, heightp)
/* SunOS - style. */
struct ttysize size;
- if (ioctl (input_fd, TIOCGSIZE, &size) == -1)
+ if (ioctl (fd, TIOCGSIZE, &size) == -1)
*widthp = *heightp = 0;
else
{
@@ -1801,7 +1889,6 @@ get_frame_size (widthp, heightp)
*widthp = 0;
*heightp = 0;
#endif
-
#endif /* not VMS */
#endif /* not SunOS-style */
#endif /* not BSD-style */
@@ -1845,37 +1932,58 @@ set_window_size (fd, height, width)
}
-/* Prepare the terminal for exiting Emacs; move the cursor to the
- bottom of the frame, turn off interrupt-driven I/O, etc. */
+
+/* Prepare all terminal devices for exiting Emacs. */
+
void
-reset_sys_modes ()
+reset_all_sys_modes (void)
{
- struct frame *sf;
+ struct tty_display_info *tty;
+ for (tty = tty_list; tty; tty = tty->next)
+ reset_sys_modes (tty);
+}
+
+/* Prepare the terminal for closing it; move the cursor to the
+ bottom of the frame, turn off interrupt-driven I/O, etc. */
+void
+reset_sys_modes (tty_out)
+ struct tty_display_info *tty_out;
+{
if (noninteractive)
{
fflush (stdout);
return;
}
- if (!term_initted)
+ if (!tty_out->term_initted)
return;
-#ifdef HAVE_WINDOW_SYSTEM
- /* Emacs' window system on MSDOG uses the `internal terminal' and therefore
- needs the clean-up code below. */
- if (!EQ (Vwindow_system, Qnil)
-#ifndef WINDOWSNT
- /* When running in tty mode on NT/Win95, we have a read_socket
- hook, but still need the rest of the clean-up code below. */
- || read_socket_hook
-#endif
- )
- return;
-#endif
- sf = SELECTED_FRAME ();
- cursor_to (FRAME_LINES (sf) - 1, 0);
- clear_end_of_line (FRAME_COLS (sf));
- /* clear_end_of_line may move the cursor */
- cursor_to (FRAME_LINES (sf) - 1, 0);
+
+ if (!tty_out->output)
+ return; /* The tty is suspended. */
+
+ /* Go to and clear the last line of the terminal. */
+
+ cmgoto (tty_out, FrameRows (tty_out) - 1, 0);
+
+ /* Code adapted from tty_clear_end_of_line. */
+ if (tty_out->TS_clr_line)
+ {
+ emacs_tputs (tty_out, tty_out->TS_clr_line, 1, cmputc);
+ }
+ else
+ { /* have to do it the hard way */
+ int i;
+ tty_turn_off_insert (tty_out);
+
+ for (i = curX (tty_out); i < FrameCols (tty_out) - 1; i++)
+ {
+ fputc (' ', tty_out->output);
+ }
+ }
+
+ cmgoto (tty_out, FrameRows (tty_out) - 1, 0);
+ fflush (tty_out->output);
+
#if defined (IBMR2AIX) && defined (AIXHFT)
{
/* HFT devices normally use ^J as a LF/CR. We forced it to
@@ -1887,12 +1995,13 @@ reset_sys_modes ()
}
#endif
- reset_terminal_modes ();
- fflush (stdout);
+ if (tty_out->terminal->reset_terminal_modes_hook)
+ tty_out->terminal->reset_terminal_modes_hook (tty_out->terminal);
+
#ifdef BSD_SYSTEM
#ifndef BSD4_1
/* Avoid possible loss of output when changing terminal modes. */
- fsync (fileno (stdout));
+ fsync (fileno (tty_out->output));
#endif
#endif
@@ -1901,22 +2010,25 @@ reset_sys_modes ()
#ifdef F_SETOWN /* F_SETFL does not imply existence of F_SETOWN */
if (interrupt_input)
{
- reset_sigio ();
- fcntl (input_fd, F_SETOWN, old_fcntl_owner);
+ reset_sigio (fileno (tty_out->input));
+ fcntl (fileno (tty_out->input), F_SETOWN,
+ old_fcntl_owner[fileno (tty_out->input)]);
}
#endif /* F_SETOWN */
#endif /* F_SETOWN_BUG */
#ifdef O_NDELAY
- fcntl (input_fd, F_SETFL, fcntl (input_fd, F_GETFL, 0) & ~O_NDELAY);
+ fcntl (fileno (tty_out->input), F_SETFL,
+ fcntl (fileno (tty_out->input), F_GETFL, 0) & ~O_NDELAY);
#endif
#endif /* F_SETFL */
#ifdef BSD4_1
if (interrupt_input)
- reset_sigio ();
+ reset_sigio (fileno (tty_out->input));
#endif /* BSD4_1 */
- if (old_tty_valid)
- while (EMACS_SET_TTY (input_fd, &old_tty, 0) < 0 && errno == EINTR)
+ if (tty_out->old_tty)
+ while (EMACS_SET_TTY (fileno (tty_out->input),
+ tty_out->old_tty, 0) < 0 && errno == EINTR)
;
#ifdef MSDOS /* Demacs 1.1.2 91/10/20 Manabu Higashida */
@@ -1927,7 +2039,7 @@ reset_sys_modes ()
/* Ultrix's termios *ignores* any line discipline except TERMIODISC.
A different old line discipline is therefore not restored, yet.
Restore the old line discipline by hand. */
- ioctl (0, TIOCSETD, &old_tty.main.c_line);
+ ioctl (0, TIOCSETD, &tty_out->old_tty.main.c_line);
#endif
#ifdef AIXHFT
@@ -1935,7 +2047,7 @@ reset_sys_modes ()
#endif
#ifdef BSD_PGRPS
- widen_foreground_group ();
+ widen_foreground_group (fileno (tty_out->input));
#endif
}
@@ -2000,9 +2112,9 @@ init_vms_input ()
{
int status;
- if (input_fd == 0)
+ if (fileno (CURTTY ()->input)) == 0)
{
- status = SYS$ASSIGN (&input_dsc, &input_fd, 0, 0);
+ status = SYS$ASSIGN (&input_dsc, &fileno (CURTTY ()->input)), 0, 0);
if (! (status & 1))
LIB$STOP (status);
}
@@ -2013,7 +2125,7 @@ init_vms_input ()
void
stop_vms_input ()
{
- return SYS$DASSGN (input_fd);
+ return SYS$DASSGN (fileno (CURTTY ()->input)));
}
short input_buffer;
@@ -2029,7 +2141,7 @@ queue_kbd_input ()
waiting_for_ast = 0;
stop_input = 0;
- status = SYS$QIO (0, input_fd, IO$_READVBLK,
+ status = SYS$QIO (0, fileno (CURTTY()->input), IO$_READVBLK,
&input_iosb, kbd_input_ast, 1,
&input_buffer, 1, 0, terminator_mask, 0, 0);
}
@@ -2146,7 +2258,7 @@ end_kbd_input ()
#endif
if (LIB$AST_IN_PROG ()) /* Don't wait if suspending from kbd_buffer_store_event! */
{
- SYS$CANCEL (input_fd);
+ SYS$CANCEL (fileno (CURTTY()->input));
return;
}
@@ -2155,7 +2267,7 @@ end_kbd_input ()
SYS$CLREF (input_ef);
waiting_for_ast = 1;
stop_input = 1;
- SYS$CANCEL (input_fd);
+ SYS$CANCEL (fileno (CURTTY()->input));
SYS$SETAST (1);
SYS$WAITFR (input_ef);
waiting_for_ast = 0;
@@ -2217,7 +2329,8 @@ init_sigio (fd)
request_sigio ();
}
-reset_sigio ()
+reset_sigio (fd)
+ int fd;
{
unrequest_sigio ();
}
@@ -2405,10 +2518,50 @@ init_system_name ()
#endif /* not CANNOT_DUMP */
if (! index (hostname, '.'))
{
- struct hostent *hp;
int count;
+#ifdef HAVE_GETADDRINFO
+ struct addrinfo *res;
+ struct addrinfo hints;
+ int ret;
+
+ memset (&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_CANONNAME;
+
for (count = 0;; count++)
{
+ if ((ret = getaddrinfo (hostname, NULL, &hints, &res)) == 0
+ || ret != EAI_AGAIN)
+ break;
+
+ if (count >= 5)
+ break;
+ Fsleep_for (make_number (1), Qnil);
+ }
+
+ if (ret == 0)
+ {
+ struct addrinfo *it = res;
+ while (it)
+ {
+ char *fqdn = it->ai_canonname;
+ if (fqdn && index (fqdn, '.')
+ && strcmp (fqdn, "localhost.localdomain") != 0)
+ break;
+ it = it->ai_next;
+ }
+ if (it)
+ {
+ hostname = alloca (strlen (it->ai_canonname) + 1);
+ strcpy (hostname, it->ai_canonname);
+ }
+ freeaddrinfo (res);
+ }
+#else /* !HAVE_GETADDRINFO */
+ struct hostent *hp;
+ for (count = 0;; count++)
+ {
+
#ifdef TRY_AGAIN
h_errno = 0;
#endif
@@ -2416,11 +2569,14 @@ init_system_name ()
#ifdef TRY_AGAIN
if (! (hp == 0 && h_errno == TRY_AGAIN))
#endif
+
break;
+
if (count >= 5)
break;
Fsleep_for (make_number (1), Qnil);
}
+
if (hp)
{
char *fqdn = (char *) hp->h_name;
@@ -2454,6 +2610,7 @@ init_system_name ()
}
#endif
}
+#endif /* !HAVE_GETADDRINFO */
}
#endif /* HAVE_SOCKETS */
/* We used to try using getdomainname here,
@@ -2559,7 +2716,9 @@ sys_select (nfds, rfds, wfds, efds, timeout)
SELECT_TYPE *rfds, *wfds, *efds;
EMACS_TIME *timeout;
{
- int ravail = 0;
+ /* XXX This needs to be updated for multi-tty support. Is there
+ anybody who needs to emulate select these days? */
+ int ravail = 0;
SELECT_TYPE orfds;
int timeoutval;
int *local_timeout;
@@ -2574,7 +2733,7 @@ sys_select (nfds, rfds, wfds, efds, timeout)
#if defined (HAVE_SELECT) && defined (HAVE_X_WINDOWS)
/* If we're using X, then the native select will work; we only need the
emulation for non-X usage. */
- if (!NILP (Vwindow_system))
+ if (!NILP (Vinitial_window_system))
return select (nfds, rfds, wfds, efds, timeout);
#endif
timeoutval = timeout ? EMACS_SECS (*timeout) : 100000;
@@ -2691,6 +2850,8 @@ sys_select (nfds, rfds, wfds, efds, timeout)
void
read_input_waiting ()
{
+ /* XXX This needs to be updated for multi-tty support. Is there
+ anybody who needs to emulate select these days? */
int nread, i;
extern int quit_char;
@@ -2744,6 +2905,10 @@ read_input_waiting ()
}
}
+#if !defined (HAVE_SELECT) || defined (BROKEN_SELECT_NON_X)
+#define select sys_select
+#endif
+
#endif /* not HAVE_SELECT */
#endif /* not VMS */
#endif /* not MSDOS */
@@ -2760,12 +2925,13 @@ init_sigio (fd)
}
void
-reset_sigio ()
+reset_sigio (fd)
+ int fd;
{
if (noninteractive)
return;
lmode = ~LINTRUP & lmode;
- ioctl (0, TIOCLSET, &lmode);
+ ioctl (fd, TIOCLSET, &lmode);
}
void
@@ -3221,7 +3387,7 @@ sys_getenv (name)
#undef abort
sys_abort ()
{
- reset_sys_modes ();
+ reset_all_sys_modes ();
LIB$SIGNAL (SS$_DEBUG);
}
#endif /* abort */
@@ -3548,7 +3714,7 @@ croak (badfunc)
char *badfunc;
{
printf ("%s not yet implemented\r\n", badfunc);
- reset_sys_modes ();
+ reset_all_sys_modes ();
exit (1);
}
@@ -5135,7 +5301,7 @@ croak (badfunc)
char *badfunc;
{
printf ("%s not yet implemented\r\n", badfunc);
- reset_sys_modes ();
+ reset_all_sys_modes ();
exit (1);
}
@@ -5157,7 +5323,7 @@ srandom (seed)
/* Called from init_sys_modes. */
void
-hft_init ()
+hft_init (struct tty_display_info *tty_out)
{
int junk;
@@ -5203,15 +5369,12 @@ hft_init ()
keymap.hfkey[1].hf_char = 127;
hftctl (0, HFSKBD, &buf);
}
- /* The HFT system on AIX doesn't optimize for scrolling, so it's really ugly
- at times. */
- line_ins_del_ok = char_ins_del_ok = 0;
}
/* Reset the rubout key to backspace. */
void
-hft_reset ()
+hft_reset (struct tty_display_info *tty_out)
{
struct hfbuf buf;
struct hfkeymap keymap;
diff --git a/src/syssignal.h b/src/syssignal.h
index b52e2dd4b95..72ac1ed7f62 100644
--- a/src/syssignal.h
+++ b/src/syssignal.h
@@ -33,6 +33,7 @@ extern pthread_t main_thread;
indicate that SIGIO doesn't work by #undef-ing SIGIO. If this file
#includes <signal.h>, then that will re-#define SIGIO and confuse
things. */
+/* XXX This is not correct anymore, there is a BROKEN_SIGIO macro. */
#define SIGMASKTYPE sigset_t
diff --git a/src/term.c b/src/term.c
index d829332f55c..cdf84eef091 100644
--- a/src/term.c
+++ b/src/term.c
@@ -25,10 +25,22 @@ Boston, MA 02110-1301, USA. */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
+#include <errno.h>
+#include <sys/file.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_TERMIOS_H
+#include <termios.h> /* For TIOCNOTTY. */
+#endif
+
+#include <signal.h>
+
+#include "lisp.h"
#include "termchar.h"
#include "termopts.h"
-#include "lisp.h"
#include "charset.h"
#include "coding.h"
#include "keyboard.h"
@@ -39,6 +51,9 @@ Boston, MA 02110-1301, USA. */
#include "window.h"
#include "keymap.h"
#include "blockinput.h"
+#include "syssignal.h"
+#include "systty.h"
+#include "intervals.h"
/* For now, don't try to include termcap.h. On some systems,
configure finds a non-standard termcap.h that the main build
@@ -61,239 +76,74 @@ extern int tgetnum P_ ((char *id));
#include "macterm.h"
#endif
-static void turn_on_face P_ ((struct frame *, int face_id));
-static void turn_off_face P_ ((struct frame *, int face_id));
-static void tty_show_cursor P_ ((void));
-static void tty_hide_cursor P_ ((void));
-
-#define OUTPUT(a) \
- tputs (a, (int) (FRAME_LINES (XFRAME (selected_frame)) - curY), cmputc)
-#define OUTPUT1(a) tputs (a, 1, cmputc)
-#define OUTPUTL(a, lines) tputs (a, lines, cmputc)
-
-#define OUTPUT_IF(a) \
- do { \
- if (a) \
- tputs (a, (int) (FRAME_LINES (XFRAME (selected_frame)) \
- - curY), cmputc); \
- } while (0)
-
-#define OUTPUT1_IF(a) do { if (a) tputs (a, 1, cmputc); } while (0)
-
-/* Display space properties */
+#ifndef O_RDWR
+#define O_RDWR 2
+#endif
-extern Lisp_Object Qspace, QCalign_to, QCwidth;
+#ifndef O_NOCTTY
+#define O_NOCTTY 0
+#endif
-/* Function to use to ring the bell. */
+/* The name of the default console device. */
+#ifdef WINDOWSNT
+#define DEV_TTY "CONOUT$"
+#else
+#define DEV_TTY "/dev/tty"
+#endif
-Lisp_Object Vring_bell_function;
+static void tty_set_scroll_region P_ ((struct frame *f, int start, int stop));
+static void turn_on_face P_ ((struct frame *, int face_id));
+static void turn_off_face P_ ((struct frame *, int face_id));
+static void tty_show_cursor P_ ((struct tty_display_info *));
+static void tty_hide_cursor P_ ((struct tty_display_info *));
+static void tty_background_highlight P_ ((struct tty_display_info *tty));
+static void clear_tty_hooks P_ ((struct terminal *terminal));
+static void set_tty_hooks P_ ((struct terminal *terminal));
+static void dissociate_if_controlling_tty P_ ((int fd));
+static void delete_tty P_ ((struct terminal *));
+
+#define OUTPUT(tty, a) \
+ emacs_tputs ((tty), a, \
+ (int) (FRAME_LINES (XFRAME (selected_frame)) \
+ - curY (tty)), \
+ cmputc)
+
+#define OUTPUT1(tty, a) emacs_tputs ((tty), a, 1, cmputc)
+#define OUTPUTL(tty, a, lines) emacs_tputs ((tty), a, lines, cmputc)
+
+#define OUTPUT_IF(tty, a) \
+ do { \
+ if (a) \
+ emacs_tputs ((tty), a, \
+ (int) (FRAME_LINES (XFRAME (selected_frame)) \
+ - curY (tty) ), \
+ cmputc); \
+ } while (0)
+
+#define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } while (0)
/* If true, use "vs", otherwise use "ve" to make the cursor visible. */
static int visible_cursor;
-/* Terminal characteristics that higher levels want to look at.
- These are all extern'd in termchar.h */
-
-int must_write_spaces; /* Nonzero means spaces in the text
- must actually be output; can't just skip
- over some columns to leave them blank. */
-int min_padding_speed; /* Speed below which no padding necessary */
-
-int line_ins_del_ok; /* Terminal can insert and delete lines */
-int char_ins_del_ok; /* Terminal can insert and delete chars */
-int scroll_region_ok; /* Terminal supports setting the
- scroll window */
-int scroll_region_cost; /* Cost of setting a scroll window,
- measured in characters */
-int memory_below_frame; /* Terminal remembers lines
- scrolled off bottom */
-int fast_clear_end_of_line; /* Terminal has a `ce' string */
-
-/* Nonzero means no need to redraw the entire frame on resuming
- a suspended Emacs. This is useful on terminals with multiple pages,
- where one page is used for Emacs and another for all else. */
-
-int no_redraw_on_reenter;
-
-/* Hook functions that you can set to snap out the functions in this file.
- These are all extern'd in termhooks.h */
-
-void (*cursor_to_hook) P_ ((int, int));
-void (*raw_cursor_to_hook) P_ ((int, int));
-void (*clear_to_end_hook) P_ ((void));
-void (*clear_frame_hook) P_ ((void));
-void (*clear_end_of_line_hook) P_ ((int));
-
-void (*ins_del_lines_hook) P_ ((int, int));
-
-void (*delete_glyphs_hook) P_ ((int));
-
-void (*ring_bell_hook) P_ ((void));
-
-void (*reset_terminal_modes_hook) P_ ((void));
-void (*set_terminal_modes_hook) P_ ((void));
-void (*update_begin_hook) P_ ((struct frame *));
-void (*update_end_hook) P_ ((struct frame *));
-void (*set_terminal_window_hook) P_ ((int));
-void (*insert_glyphs_hook) P_ ((struct glyph *, int));
-void (*write_glyphs_hook) P_ ((struct glyph *, int));
-void (*delete_glyphs_hook) P_ ((int));
-
-int (*read_socket_hook) P_ ((int, int, struct input_event *));
-
-void (*frame_up_to_date_hook) P_ ((struct frame *));
-
-/* Return the current position of the mouse.
-
- Set *f to the frame the mouse is in, or zero if the mouse is in no
- Emacs frame. If it is set to zero, all the other arguments are
- garbage.
+/* Display space properties */
- If the motion started in a scroll bar, set *bar_window to the
- scroll bar's window, *part to the part the mouse is currently over,
- *x to the position of the mouse along the scroll bar, and *y to the
- overall length of the scroll bar.
+extern Lisp_Object Qspace, QCalign_to, QCwidth;
- Otherwise, set *bar_window to Qnil, and *x and *y to the column and
- row of the character cell the mouse is over.
+/* Functions to call after suspending a tty. */
+Lisp_Object Vsuspend_tty_functions;
- Set *time to the time the mouse was at the returned position.
+/* Functions to call after resuming a tty. */
+Lisp_Object Vresume_tty_functions;
- This should clear mouse_moved until the next motion
- event arrives. */
+/* Chain of all tty device parameters. */
+struct tty_display_info *tty_list;
-void (*mouse_position_hook) P_ ((FRAME_PTR *f, int insist,
- Lisp_Object *bar_window,
- enum scroll_bar_part *part,
- Lisp_Object *x,
- Lisp_Object *y,
- unsigned long *time));
-
-/* When reading from a minibuffer in a different frame, Emacs wants
- to shift the highlight from the selected frame to the mini-buffer's
- frame; under X, this means it lies about where the focus is.
- This hook tells the window system code to re-decide where to put
- the highlight. */
-
-void (*frame_rehighlight_hook) P_ ((FRAME_PTR f));
-
-/* If we're displaying frames using a window system that can stack
- frames on top of each other, this hook allows you to bring a frame
- to the front, or bury it behind all the other windows. If this
- hook is zero, that means the device we're displaying on doesn't
- support overlapping frames, so there's no need to raise or lower
- anything.
-
- If RAISE is non-zero, F is brought to the front, before all other
- windows. If RAISE is zero, F is sent to the back, behind all other
- windows. */
-
-void (*frame_raise_lower_hook) P_ ((FRAME_PTR f, int raise));
-
-/* If the value of the frame parameter changed, whis hook is called.
- For example, if going from fullscreen to not fullscreen this hook
- may do something OS dependent, like extended window manager hints on X11. */
-void (*fullscreen_hook) P_ ((struct frame *f));
-
-/* Set the vertical scroll bar for WINDOW to have its upper left corner
- at (TOP, LEFT), and be LENGTH rows high. Set its handle to
- indicate that we are displaying PORTION characters out of a total
- of WHOLE characters, starting at POSITION. If WINDOW doesn't yet
- have a scroll bar, create one for it. */
-
-void (*set_vertical_scroll_bar_hook)
- P_ ((struct window *window,
- int portion, int whole, int position));
-
-
-/* The following three hooks are used when we're doing a thorough
- redisplay of the frame. We don't explicitly know which scroll bars
- are going to be deleted, because keeping track of when windows go
- away is a real pain - can you say set-window-configuration?
- Instead, we just assert at the beginning of redisplay that *all*
- scroll bars are to be removed, and then save scroll bars from the
- fiery pit when we actually redisplay their window. */
-
-/* Arrange for all scroll bars on FRAME to be removed at the next call
- to `*judge_scroll_bars_hook'. A scroll bar may be spared if
- `*redeem_scroll_bar_hook' is applied to its window before the judgment.
-
- This should be applied to each frame each time its window tree is
- redisplayed, even if it is not displaying scroll bars at the moment;
- if the HAS_SCROLL_BARS flag has just been turned off, only calling
- this and the judge_scroll_bars_hook will get rid of them.
-
- If non-zero, this hook should be safe to apply to any frame,
- whether or not it can support scroll bars, and whether or not it is
- currently displaying them. */
-
-void (*condemn_scroll_bars_hook) P_ ((FRAME_PTR frame));
-
-/* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
- Note that it's okay to redeem a scroll bar that is not condemned. */
-
-void (*redeem_scroll_bar_hook) P_ ((struct window *window));
-
-/* Remove all scroll bars on FRAME that haven't been saved since the
- last call to `*condemn_scroll_bars_hook'.
-
- This should be applied to each frame after each time its window
- tree is redisplayed, even if it is not displaying scroll bars at the
- moment; if the HAS_SCROLL_BARS flag has just been turned off, only
- calling this and condemn_scroll_bars_hook will get rid of them.
-
- If non-zero, this hook should be safe to apply to any frame,
- whether or not it can support scroll bars, and whether or not it is
- currently displaying them. */
-
-void (*judge_scroll_bars_hook) P_ ((FRAME_PTR FRAME));
-
-/* Strings, numbers and flags taken from the termcap entry. */
-
-char *TS_ins_line; /* "al" */
-char *TS_ins_multi_lines; /* "AL" (one parameter, # lines to insert) */
-char *TS_bell; /* "bl" */
-char *TS_clr_to_bottom; /* "cd" */
-char *TS_clr_line; /* "ce", clear to end of line */
-char *TS_clr_frame; /* "cl" */
-char *TS_set_scroll_region; /* "cs" (2 params, first line and last line) */
-char *TS_set_scroll_region_1; /* "cS" (4 params: total lines,
- lines above scroll region, lines below it,
- total lines again) */
-char *TS_del_char; /* "dc" */
-char *TS_del_multi_chars; /* "DC" (one parameter, # chars to delete) */
-char *TS_del_line; /* "dl" */
-char *TS_del_multi_lines; /* "DL" (one parameter, # lines to delete) */
-char *TS_delete_mode; /* "dm", enter character-delete mode */
-char *TS_end_delete_mode; /* "ed", leave character-delete mode */
-char *TS_end_insert_mode; /* "ei", leave character-insert mode */
-char *TS_ins_char; /* "ic" */
-char *TS_ins_multi_chars; /* "IC" (one parameter, # chars to insert) */
-char *TS_insert_mode; /* "im", enter character-insert mode */
-char *TS_pad_inserted_char; /* "ip". Just padding, no commands. */
-char *TS_end_keypad_mode; /* "ke" */
-char *TS_keypad_mode; /* "ks" */
-char *TS_pad_char; /* "pc", char to use as padding */
-char *TS_repeat; /* "rp" (2 params, # times to repeat
- and character to be repeated) */
-char *TS_end_standout_mode; /* "se" */
-char *TS_fwd_scroll; /* "sf" */
-char *TS_standout_mode; /* "so" */
-char *TS_rev_scroll; /* "sr" */
-char *TS_end_termcap_modes; /* "te" */
-char *TS_termcap_modes; /* "ti" */
-char *TS_visible_bell; /* "vb" */
-char *TS_cursor_normal; /* "ve" */
-char *TS_cursor_visible; /* "vs" */
-char *TS_cursor_invisible; /* "vi" */
-char *TS_set_window; /* "wi" (4 params, start and end of window,
- each as vpos and hpos) */
-
-/* Value of the "NC" (no_color_video) capability, or 0 if not
- present. */
-
-static int TN_no_color_video;
+/* Nonzero means no need to redraw the entire frame on resuming a
+ suspended Emacs. This is useful on terminals with multiple
+ pages, where one page is used for Emacs and another for all
+ else. */
+int no_redraw_on_reenter;
/* Meaning of bits in no_color_video. Each bit set means that the
corresponding attribute cannot be combined with colors. */
@@ -311,68 +161,6 @@ enum no_color_bit
NC_ALT_CHARSET = 1 << 8
};
-/* "md" -- turn on bold (extra bright mode). */
-
-char *TS_enter_bold_mode;
-
-/* "mh" -- turn on half-bright mode. */
-
-char *TS_enter_dim_mode;
-
-/* "mb" -- enter blinking mode. */
-
-char *TS_enter_blink_mode;
-
-/* "mr" -- enter reverse video mode. */
-
-char *TS_enter_reverse_mode;
-
-/* "us"/"ue" -- start/end underlining. */
-
-char *TS_exit_underline_mode, *TS_enter_underline_mode;
-
-/* "as"/"ae" -- start/end alternate character set. Not really
- supported, yet. */
-
-char *TS_enter_alt_charset_mode, *TS_exit_alt_charset_mode;
-
-/* "me" -- switch appearances off. */
-
-char *TS_exit_attribute_mode;
-
-/* "Co" -- number of colors. */
-
-int TN_max_colors;
-
-/* "pa" -- max. number of color pairs on screen. Not handled yet.
- Could be a problem if not equal to TN_max_colors * TN_max_colors. */
-
-int TN_max_pairs;
-
-/* "op" -- SVr4 set default pair to its original value. */
-
-char *TS_orig_pair;
-
-/* "AF"/"AB" or "Sf"/"Sb"-- set ANSI or SVr4 foreground/background color.
- 1 param, the color index. */
-
-char *TS_set_foreground, *TS_set_background;
-
-int TF_hazeltine; /* termcap hz flag. */
-int TF_insmode_motion; /* termcap mi flag: can move while in insert mode. */
-int TF_standout_motion; /* termcap mi flag: can move while in standout mode. */
-int TF_underscore; /* termcap ul flag: _ underlines if over-struck on
- non-blank position. Must clear before writing _. */
-int TF_teleray; /* termcap xt flag: many weird consequences.
- For t1061. */
-
-static int RPov; /* # chars to start a TS_repeat */
-
-static int delete_in_insert_mode; /* delete mode == insert mode */
-
-static int se_is_so; /* 1 if same string both enters and leaves
- standout mode */
-
/* internal state */
/* The largest frame width in any call to calculate_costs. */
@@ -383,235 +171,211 @@ int max_frame_cols;
int max_frame_lines;
-static int costs_set; /* Nonzero if costs have been calculated. */
-
-int insert_mode; /* Nonzero when in insert mode. */
-int standout_mode; /* Nonzero when in standout mode. */
-
-/* Size of window specified by higher levels.
- This is the number of lines, from the top of frame downwards,
- which can participate in insert-line/delete-line operations.
-
- Effectively it excludes the bottom frame_lines - specified_window_size
- lines from those operations. */
-
-int specified_window;
-
-/* Frame currently being redisplayed; 0 if not currently redisplaying.
- (Direct output does not count). */
-
-FRAME_PTR updating_frame;
+/* Non-zero if we have dropped our controlling tty and therefore
+ should not open a frame on stdout. */
+static int no_controlling_tty;
/* Provided for lisp packages. */
static int system_uses_terminfo;
-/* Flag used in tty_show/hide_cursor. */
-
-static int tty_cursor_hidden;
-
char *tparam ();
extern char *tgetstr ();
-#ifdef WINDOWSNT
-/* We aren't X windows, but we aren't termcap either. This makes me
- uncertain as to what value to use for frame.output_method. For
- this file, we'll define FRAME_TERMCAP_P to be zero so that our
- output hooks get called instead of the termcap functions. Probably
- the best long-term solution is to define an output_windows_nt... */
+#ifdef HAVE_GPM
+#include <sys/fcntl.h>
+#include "buffer.h"
-#undef FRAME_TERMCAP_P
-#define FRAME_TERMCAP_P(_f_) 0
-#endif /* WINDOWSNT */
+static void term_clear_mouse_face ();
+static void term_mouse_highlight (struct frame *f, int x, int y);
-void
-ring_bell ()
-{
- if (!NILP (Vring_bell_function))
- {
- Lisp_Object function;
+/* The device for which we have enabled gpm support (or NULL). */
+struct tty_display_info *gpm_tty = NULL;
- /* Temporarily set the global variable to nil
- so that if we get an error, it stays nil
- and we don't call it over and over.
+/* These variables describe the range of text currently shown in its
+ mouse-face, together with the window they apply to. As long as
+ the mouse stays within this range, we need not redraw anything on
+ its account. Rows and columns are glyph matrix positions in
+ MOUSE_FACE_WINDOW. */
+static int mouse_face_beg_row, mouse_face_beg_col;
+static int mouse_face_end_row, mouse_face_end_col;
+static int mouse_face_past_end;
+static Lisp_Object mouse_face_window;
+static int mouse_face_face_id;
- We don't specbind it, because that would carefully
- restore the bad value if there's an error
- and make the loop of errors happen anyway. */
+static int pos_x, pos_y;
+static int last_mouse_x, last_mouse_y;
+#endif /* HAVE_GPM */
- function = Vring_bell_function;
- Vring_bell_function = Qnil;
+/* Ring the bell on a tty. */
- call0 (function);
+static void
+tty_ring_bell (struct frame *f)
+{
+ struct tty_display_info *tty = FRAME_TTY (f);
- Vring_bell_function = function;
+ if (tty->output)
+ {
+ OUTPUT (tty, (tty->TS_visible_bell && visible_bell
+ ? tty->TS_visible_bell
+ : tty->TS_bell));
+ fflush (tty->output);
}
- else if (!FRAME_TERMCAP_P (XFRAME (selected_frame)))
- (*ring_bell_hook) ();
- else
- OUTPUT (TS_visible_bell && visible_bell ? TS_visible_bell : TS_bell);
}
+/* Set up termcap modes for Emacs. */
+
void
-set_terminal_modes ()
+tty_set_terminal_modes (struct terminal *terminal)
{
- if (FRAME_TERMCAP_P (XFRAME (selected_frame)))
+ struct tty_display_info *tty = terminal->display_info.tty;
+
+ if (tty->output)
{
- if (TS_termcap_modes)
- OUTPUT (TS_termcap_modes);
+ if (tty->TS_termcap_modes)
+ OUTPUT (tty, tty->TS_termcap_modes);
else
- {
- /* Output enough newlines to scroll all the old screen contents
- off the screen, so it won't be overwritten and lost. */
- int i;
- for (i = 0; i < FRAME_LINES (XFRAME (selected_frame)); i++)
- putchar ('\n');
- }
-
- OUTPUT_IF (visible_cursor ? TS_cursor_visible : TS_cursor_normal);
- OUTPUT_IF (TS_keypad_mode);
- losecursor ();
+ {
+ /* Output enough newlines to scroll all the old screen contents
+ off the screen, so it won't be overwritten and lost. */
+ int i;
+ current_tty = tty;
+ for (i = 0; i < FRAME_LINES (XFRAME (selected_frame)); i++)
+ cmputc ('\n');
+ }
+
+ OUTPUT_IF (tty, tty->TS_termcap_modes);
+ OUTPUT_IF (tty, visible_cursor ? tty->TS_cursor_visible : tty->TS_cursor_normal);
+ OUTPUT_IF (tty, tty->TS_keypad_mode);
+ losecursor (tty);
+ fflush (tty->output);
}
- else
- (*set_terminal_modes_hook) ();
}
+/* Reset termcap modes before exiting Emacs. */
+
void
-reset_terminal_modes ()
+tty_reset_terminal_modes (struct terminal *terminal)
{
- if (FRAME_TERMCAP_P (XFRAME (selected_frame)))
+ struct tty_display_info *tty = terminal->display_info.tty;
+
+ if (tty->output)
{
- turn_off_highlight ();
- turn_off_insert ();
- OUTPUT_IF (TS_end_keypad_mode);
- OUTPUT_IF (TS_cursor_normal);
- OUTPUT_IF (TS_end_termcap_modes);
- OUTPUT_IF (TS_orig_pair);
+ tty_turn_off_highlight (tty);
+ tty_turn_off_insert (tty);
+ OUTPUT_IF (tty, tty->TS_end_keypad_mode);
+ OUTPUT_IF (tty, tty->TS_cursor_normal);
+ OUTPUT_IF (tty, tty->TS_end_termcap_modes);
+ OUTPUT_IF (tty, tty->TS_orig_pair);
/* Output raw CR so kernel can track the cursor hpos. */
+ current_tty = tty;
cmputc ('\r');
+ fflush (tty->output);
}
- else if (reset_terminal_modes_hook)
- (*reset_terminal_modes_hook) ();
}
-void
-update_begin (f)
- struct frame *f;
-{
- updating_frame = f;
- if (!FRAME_TERMCAP_P (f))
- update_begin_hook (f);
-}
+/* Flag the end of a display update on a termcap terminal. */
-void
-update_end (f)
- struct frame *f;
+static void
+tty_update_end (struct frame *f)
{
- if (FRAME_TERMCAP_P (f))
- {
- if (!XWINDOW (selected_window)->cursor_off_p)
- tty_show_cursor ();
- turn_off_insert ();
- background_highlight ();
- }
- else
- update_end_hook (f);
+ struct tty_display_info *tty = FRAME_TTY (f);
- updating_frame = NULL;
+ if (!XWINDOW (selected_window)->cursor_off_p)
+ tty_show_cursor (tty);
+ tty_turn_off_insert (tty);
+ tty_background_highlight (tty);
}
-void
-set_terminal_window (size)
- int size;
+/* The implementation of set_terminal_window for termcap frames. */
+
+static void
+tty_set_terminal_window (struct frame *f, int size)
{
- if (FRAME_TERMCAP_P (updating_frame))
- {
- specified_window = size ? size : FRAME_LINES (updating_frame);
- if (scroll_region_ok)
- set_scroll_region (0, specified_window);
- }
- else
- set_terminal_window_hook (size);
+ struct tty_display_info *tty = FRAME_TTY (f);
+
+ tty->specified_window = size ? size : FRAME_LINES (f);
+ if (FRAME_SCROLL_REGION_OK (f))
+ tty_set_scroll_region (f, 0, tty->specified_window);
}
-void
-set_scroll_region (start, stop)
- int start, stop;
+static void
+tty_set_scroll_region (struct frame *f, int start, int stop)
{
char *buf;
- struct frame *sf = XFRAME (selected_frame);
-
- if (TS_set_scroll_region)
- buf = tparam (TS_set_scroll_region, 0, 0, start, stop - 1);
- else if (TS_set_scroll_region_1)
- buf = tparam (TS_set_scroll_region_1, 0, 0,
- FRAME_LINES (sf), start,
- FRAME_LINES (sf) - stop,
- FRAME_LINES (sf));
+ struct tty_display_info *tty = FRAME_TTY (f);
+
+ if (tty->TS_set_scroll_region)
+ buf = tparam (tty->TS_set_scroll_region, 0, 0, start, stop - 1);
+ else if (tty->TS_set_scroll_region_1)
+ buf = tparam (tty->TS_set_scroll_region_1, 0, 0,
+ FRAME_LINES (f), start,
+ FRAME_LINES (f) - stop,
+ FRAME_LINES (f));
else
- buf = tparam (TS_set_window, 0, 0, start, 0, stop, FRAME_COLS (sf));
+ buf = tparam (tty->TS_set_window, 0, 0, start, 0, stop, FRAME_COLS (f));
- OUTPUT (buf);
+ OUTPUT (tty, buf);
xfree (buf);
- losecursor ();
+ losecursor (tty);
}
static void
-turn_on_insert ()
+tty_turn_on_insert (struct tty_display_info *tty)
{
- if (!insert_mode)
- OUTPUT (TS_insert_mode);
- insert_mode = 1;
+ if (!tty->insert_mode)
+ OUTPUT (tty, tty->TS_insert_mode);
+ tty->insert_mode = 1;
}
void
-turn_off_insert ()
+tty_turn_off_insert (struct tty_display_info *tty)
{
- if (insert_mode)
- OUTPUT (TS_end_insert_mode);
- insert_mode = 0;
+ if (tty->insert_mode)
+ OUTPUT (tty, tty->TS_end_insert_mode);
+ tty->insert_mode = 0;
}
/* Handle highlighting. */
void
-turn_off_highlight ()
+tty_turn_off_highlight (struct tty_display_info *tty)
{
- if (standout_mode)
- OUTPUT_IF (TS_end_standout_mode);
- standout_mode = 0;
+ if (tty->standout_mode)
+ OUTPUT_IF (tty, tty->TS_end_standout_mode);
+ tty->standout_mode = 0;
}
static void
-turn_on_highlight ()
+tty_turn_on_highlight (struct tty_display_info *tty)
{
- if (!standout_mode)
- OUTPUT_IF (TS_standout_mode);
- standout_mode = 1;
+ if (!tty->standout_mode)
+ OUTPUT_IF (tty, tty->TS_standout_mode);
+ tty->standout_mode = 1;
}
static void
-toggle_highlight ()
+tty_toggle_highlight (struct tty_display_info *tty)
{
- if (standout_mode)
- turn_off_highlight ();
+ if (tty->standout_mode)
+ tty_turn_off_highlight (tty);
else
- turn_on_highlight ();
+ tty_turn_on_highlight (tty);
}
/* Make cursor invisible. */
static void
-tty_hide_cursor ()
+tty_hide_cursor (struct tty_display_info *tty)
{
- if (tty_cursor_hidden == 0)
+ if (tty->cursor_hidden == 0)
{
- tty_cursor_hidden = 1;
- OUTPUT_IF (TS_cursor_invisible);
+ tty->cursor_hidden = 1;
+ OUTPUT_IF (tty, tty->TS_cursor_invisible);
}
}
@@ -619,14 +383,14 @@ tty_hide_cursor ()
/* Ensure that cursor is visible. */
static void
-tty_show_cursor ()
+tty_show_cursor (struct tty_display_info *tty)
{
- if (tty_cursor_hidden)
+ if (tty->cursor_hidden)
{
- tty_cursor_hidden = 0;
- OUTPUT_IF (TS_cursor_normal);
+ tty->cursor_hidden = 0;
+ OUTPUT_IF (tty, tty->TS_cursor_normal);
if (visible_cursor)
- OUTPUT_IF (TS_cursor_visible);
+ OUTPUT_IF (tty, tty->TS_cursor_visible);
}
}
@@ -635,180 +399,151 @@ tty_show_cursor ()
empty space inside windows. What this is,
depends on the user option inverse-video. */
-void
-background_highlight ()
+static void
+tty_background_highlight (struct tty_display_info *tty)
{
if (inverse_video)
- turn_on_highlight ();
+ tty_turn_on_highlight (tty);
else
- turn_off_highlight ();
+ tty_turn_off_highlight (tty);
}
/* Set standout mode to the mode specified for the text to be output. */
static void
-highlight_if_desired ()
+tty_highlight_if_desired (struct tty_display_info *tty)
{
if (inverse_video)
- turn_on_highlight ();
+ tty_turn_on_highlight (tty);
else
- turn_off_highlight ();
+ tty_turn_off_highlight (tty);
}
/* Move cursor to row/column position VPOS/HPOS. HPOS/VPOS are
frame-relative coordinates. */
-void
-cursor_to (vpos, hpos)
- int vpos, hpos;
+static void
+tty_cursor_to (struct frame *f, int vpos, int hpos)
{
- struct frame *f = updating_frame ? updating_frame : XFRAME (selected_frame);
-
- if (! FRAME_TERMCAP_P (f) && cursor_to_hook)
- {
- (*cursor_to_hook) (vpos, hpos);
- return;
- }
+ struct tty_display_info *tty = FRAME_TTY (f);
/* Detect the case where we are called from reset_sys_modes
and the costs have never been calculated. Do nothing. */
- if (! costs_set)
+ if (! tty->costs_set)
return;
- if (curY == vpos && curX == hpos)
+ if (curY (tty) == vpos
+ && curX (tty) == hpos)
return;
- if (!TF_standout_motion)
- background_highlight ();
- if (!TF_insmode_motion)
- turn_off_insert ();
- cmgoto (vpos, hpos);
+ if (!tty->TF_standout_motion)
+ tty_background_highlight (tty);
+ if (!tty->TF_insmode_motion)
+ tty_turn_off_insert (tty);
+ cmgoto (tty, vpos, hpos);
}
/* Similar but don't take any account of the wasted characters. */
-void
-raw_cursor_to (row, col)
- int row, col;
+static void
+tty_raw_cursor_to (struct frame *f, int row, int col)
{
- struct frame *f = updating_frame ? updating_frame : XFRAME (selected_frame);
- if (! FRAME_TERMCAP_P (f))
- {
- (*raw_cursor_to_hook) (row, col);
- return;
- }
- if (curY == row && curX == col)
+ struct tty_display_info *tty = FRAME_TTY (f);
+
+ if (curY (tty) == row
+ && curX (tty) == col)
return;
- if (!TF_standout_motion)
- background_highlight ();
- if (!TF_insmode_motion)
- turn_off_insert ();
- cmgoto (row, col);
+ if (!tty->TF_standout_motion)
+ tty_background_highlight (tty);
+ if (!tty->TF_insmode_motion)
+ tty_turn_off_insert (tty);
+ cmgoto (tty, row, col);
}
/* Erase operations */
-/* clear from cursor to end of frame */
-void
-clear_to_end ()
+/* Clear from cursor to end of frame on a termcap device. */
+
+static void
+tty_clear_to_end (struct frame *f)
{
register int i;
+ struct tty_display_info *tty = FRAME_TTY (f);
- if (clear_to_end_hook && ! FRAME_TERMCAP_P (updating_frame))
+ if (tty->TS_clr_to_bottom)
{
- (*clear_to_end_hook) ();
- return;
- }
- if (TS_clr_to_bottom)
- {
- background_highlight ();
- OUTPUT (TS_clr_to_bottom);
+ tty_background_highlight (tty);
+ OUTPUT (tty, tty->TS_clr_to_bottom);
}
else
{
- for (i = curY; i < FRAME_LINES (XFRAME (selected_frame)); i++)
+ for (i = curY (tty); i < FRAME_LINES (f); i++)
{
- cursor_to (i, 0);
- clear_end_of_line (FRAME_COLS (XFRAME (selected_frame)));
+ cursor_to (f, i, 0);
+ clear_end_of_line (f, FRAME_COLS (f));
}
}
}
-/* Clear entire frame */
+/* Clear an entire termcap frame. */
-void
-clear_frame ()
+static void
+tty_clear_frame (struct frame *f)
{
- struct frame *sf = XFRAME (selected_frame);
+ struct tty_display_info *tty = FRAME_TTY (f);
- if (clear_frame_hook
- && ! FRAME_TERMCAP_P ((updating_frame ? updating_frame : sf)))
+ if (tty->TS_clr_frame)
{
- (*clear_frame_hook) ();
- return;
- }
- if (TS_clr_frame)
- {
- background_highlight ();
- OUTPUT (TS_clr_frame);
- cmat (0, 0);
+ tty_background_highlight (tty);
+ OUTPUT (tty, tty->TS_clr_frame);
+ cmat (tty, 0, 0);
}
else
{
- cursor_to (0, 0);
- clear_to_end ();
+ cursor_to (f, 0, 0);
+ clear_to_end (f);
}
}
-/* Clear from cursor to end of line.
- Assume that the line is already clear starting at column first_unused_hpos.
+/* An implementation of clear_end_of_line for termcap frames.
Note that the cursor may be moved, on terminals lacking a `ce' string. */
-void
-clear_end_of_line (first_unused_hpos)
- int first_unused_hpos;
+static void
+tty_clear_end_of_line (struct frame *f, int first_unused_hpos)
{
register int i;
-
- if (clear_end_of_line_hook
- && ! FRAME_TERMCAP_P ((updating_frame
- ? updating_frame
- : XFRAME (selected_frame))))
- {
- (*clear_end_of_line_hook) (first_unused_hpos);
- return;
- }
+ struct tty_display_info *tty = FRAME_TTY (f);
/* Detect the case where we are called from reset_sys_modes
and the costs have never been calculated. Do nothing. */
- if (! costs_set)
+ if (! tty->costs_set)
return;
- if (curX >= first_unused_hpos)
+ if (curX (tty) >= first_unused_hpos)
return;
- background_highlight ();
- if (TS_clr_line)
+ tty_background_highlight (tty);
+ if (tty->TS_clr_line)
{
- OUTPUT1 (TS_clr_line);
+ OUTPUT1 (tty, tty->TS_clr_line);
}
else
{ /* have to do it the hard way */
- struct frame *sf = XFRAME (selected_frame);
- turn_off_insert ();
+ tty_turn_off_insert (tty);
/* Do not write in last row last col with Auto-wrap on. */
- if (AutoWrap && curY == FRAME_LINES (sf) - 1
- && first_unused_hpos == FRAME_COLS (sf))
+ if (AutoWrap (tty)
+ && curY (tty) == FrameRows (tty) - 1
+ && first_unused_hpos == FrameCols (tty))
first_unused_hpos--;
- for (i = curX; i < first_unused_hpos; i++)
+ for (i = curX (tty); i < first_unused_hpos; i++)
{
- if (termscript)
- fputc (' ', termscript);
- putchar (' ');
+ if (tty->termscript)
+ fputc (' ', tty->termscript);
+ fputc (' ', tty->output);
}
- cmplus (first_unused_hpos - curX);
+ cmplus (tty, first_unused_hpos - curX (tty));
}
}
@@ -930,43 +665,37 @@ encode_terminal_code (src, src_len, coding)
return encode_terminal_buf + nbytes;
}
-void
-write_glyphs (string, len)
- register struct glyph *string;
- register int len;
+
+/* An implementation of write_glyphs for termcap frames. */
+
+static void
+tty_write_glyphs (struct frame *f, struct glyph *string, int len)
{
- struct frame *sf = XFRAME (selected_frame);
- struct frame *f = updating_frame ? updating_frame : sf;
unsigned char *conversion_buffer;
struct coding_system *coding;
- if (write_glyphs_hook
- && ! FRAME_TERMCAP_P (f))
- {
- (*write_glyphs_hook) (string, len);
- return;
- }
+ struct tty_display_info *tty = FRAME_TTY (f);
- turn_off_insert ();
- tty_hide_cursor ();
+ tty_turn_off_insert (tty);
+ tty_hide_cursor (tty);
/* Don't dare write in last column of bottom line, if Auto-Wrap,
since that would scroll the whole frame on some terminals. */
- if (AutoWrap
- && curY + 1 == FRAME_LINES (sf)
- && (curX + len) == FRAME_COLS (sf))
+ if (AutoWrap (tty)
+ && curY (tty) + 1 == FRAME_LINES (f)
+ && (curX (tty) + len) == FRAME_COLS (f))
len --;
if (len <= 0)
return;
- cmplus (len);
+ cmplus (tty, len);
/* If terminal_coding does any conversion, use it, otherwise use
safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
because it always return 1 if the member src_multibyte is 1. */
- coding = (terminal_coding.common_flags & CODING_REQUIRE_ENCODING_MASK
- ? &terminal_coding : &safe_terminal_coding);
+ coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
+ ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
/* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
the tail. */
coding->mode &= ~CODING_MODE_LAST_BLOCK;
@@ -982,7 +711,7 @@ write_glyphs (string, len)
break;
/* Turn appearance modes of the face of the run on. */
- highlight_if_desired ();
+ tty_highlight_if_desired (tty);
turn_on_face (f, face_id);
if (n == len)
@@ -992,11 +721,11 @@ write_glyphs (string, len)
if (coding->produced > 0)
{
BLOCK_INPUT;
- fwrite (conversion_buffer, 1, coding->produced, stdout);
- if (ferror (stdout))
- clearerr (stdout);
- if (termscript)
- fwrite (conversion_buffer, 1, coding->produced, termscript);
+ fwrite (conversion_buffer, 1, coding->produced, tty->output);
+ if (ferror (tty->output))
+ clearerr (tty->output);
+ if (tty->termscript)
+ fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
UNBLOCK_INPUT;
}
len -= n;
@@ -1004,50 +733,99 @@ write_glyphs (string, len)
/* Turn appearance modes off. */
turn_off_face (f, face_id);
- turn_off_highlight ();
+ tty_turn_off_highlight (tty);
}
- cmcheckmagic ();
+ cmcheckmagic (tty);
}
-/* If start is zero, insert blanks instead of a string at start */
+#ifdef HAVE_GPM /* Only used by GPM code. */
-void
-insert_glyphs (start, len)
- register struct glyph *start;
- register int len;
+static void
+tty_write_glyphs_with_face (f, string, len, face_id)
+ register struct frame *f;
+ register struct glyph *string;
+ register int len, face_id;
{
- char *buf;
- struct glyph *glyph = NULL;
- struct frame *f, *sf;
unsigned char *conversion_buffer;
- unsigned char space[1];
struct coding_system *coding;
+ struct tty_display_info *tty = FRAME_TTY (f);
+
+ tty_turn_off_insert (tty);
+ tty_hide_cursor (tty);
+
+ /* Don't dare write in last column of bottom line, if Auto-Wrap,
+ since that would scroll the whole frame on some terminals. */
+
+ if (AutoWrap (tty)
+ && curY (tty) + 1 == FRAME_LINES (f)
+ && (curX (tty) + len) == FRAME_COLS (f))
+ len --;
if (len <= 0)
return;
- if (insert_glyphs_hook)
+ cmplus (tty, len);
+
+ /* If terminal_coding does any conversion, use it, otherwise use
+ safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
+ because it always return 1 if the member src_multibyte is 1. */
+ coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
+ ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
+ /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
+ the tail. */
+ coding->mode &= ~CODING_MODE_LAST_BLOCK;
+
+ /* Turn appearance modes of the face. */
+ tty_highlight_if_desired (tty);
+ turn_on_face (f, face_id);
+
+ coding->mode |= CODING_MODE_LAST_BLOCK;
+ conversion_buffer = encode_terminal_code (string, len, coding);
+ if (coding->produced > 0)
{
- (*insert_glyphs_hook) (start, len);
- return;
+ BLOCK_INPUT;
+ fwrite (conversion_buffer, 1, coding->produced, tty->output);
+ if (ferror (tty->output))
+ clearerr (tty->output);
+ if (tty->termscript)
+ fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
+ UNBLOCK_INPUT;
}
- sf = XFRAME (selected_frame);
- f = updating_frame ? updating_frame : sf;
+ /* Turn appearance modes off. */
+ turn_off_face (f, face_id);
+ tty_turn_off_highlight (tty);
+
+ cmcheckmagic (tty);
+}
+#endif
+
+/* An implementation of insert_glyphs for termcap frames. */
+
+static void
+tty_insert_glyphs (struct frame *f, struct glyph *start, int len)
+{
+ char *buf;
+ struct glyph *glyph = NULL;
+ unsigned char *conversion_buffer;
+ unsigned char space[1];
+ struct coding_system *coding;
+
+ struct tty_display_info *tty = FRAME_TTY (f);
- if (TS_ins_multi_chars)
+ if (tty->TS_ins_multi_chars)
{
- buf = tparam (TS_ins_multi_chars, 0, 0, len);
- OUTPUT1 (buf);
+ buf = tparam (tty->TS_ins_multi_chars, 0, 0, len);
+ OUTPUT1 (tty, buf);
xfree (buf);
if (start)
- write_glyphs (start, len);
+ write_glyphs (f, start, len);
return;
}
- turn_on_insert ();
- cmplus (len);
+ tty_turn_on_insert (tty);
+ cmplus (tty, len);
if (! start)
space[0] = SPACEGLYPH;
@@ -1055,15 +833,15 @@ insert_glyphs (start, len)
/* If terminal_coding does any conversion, use it, otherwise use
safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
because it always return 1 if the member src_multibyte is 1. */
- coding = (terminal_coding.common_flags & CODING_REQUIRE_ENCODING_MASK
- ? &terminal_coding : &safe_terminal_coding);
+ coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
+ ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
/* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
the tail. */
coding->mode &= ~CODING_MODE_LAST_BLOCK;
while (len-- > 0)
{
- OUTPUT1_IF (TS_ins_char);
+ OUTPUT1_IF (tty, tty->TS_ins_char);
if (!start)
{
conversion_buffer = space;
@@ -1071,7 +849,7 @@ insert_glyphs (start, len)
}
else
{
- highlight_if_desired ();
+ tty_highlight_if_desired (tty);
turn_on_face (f, start->face_id);
glyph = start;
++start;
@@ -1079,7 +857,7 @@ insert_glyphs (start, len)
occupies more than one column. */
while (len && CHAR_GLYPH_PADDING_P (*start))
{
- OUTPUT1_IF (TS_ins_char);
+ OUTPUT1_IF (tty, tty->TS_ins_char);
start++, len--;
}
@@ -1087,89 +865,77 @@ insert_glyphs (start, len)
/* This is the last glyph. */
coding->mode |= CODING_MODE_LAST_BLOCK;
- conversion_buffer = encode_terminal_code (glyph, 1, coding);
+ conversion_buffer = encode_terminal_code (glyph, 1, coding);
}
if (coding->produced > 0)
{
BLOCK_INPUT;
- fwrite (conversion_buffer, 1, coding->produced, stdout);
- if (ferror (stdout))
- clearerr (stdout);
- if (termscript)
- fwrite (conversion_buffer, 1, coding->produced, termscript);
+ fwrite (conversion_buffer, 1, coding->produced, tty->output);
+ if (ferror (tty->output))
+ clearerr (tty->output);
+ if (tty->termscript)
+ fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
UNBLOCK_INPUT;
}
- OUTPUT1_IF (TS_pad_inserted_char);
+ OUTPUT1_IF (tty, tty->TS_pad_inserted_char);
if (start)
{
turn_off_face (f, glyph->face_id);
- turn_off_highlight ();
+ tty_turn_off_highlight (tty);
}
}
- cmcheckmagic ();
+ cmcheckmagic (tty);
}
-void
-delete_glyphs (n)
- register int n;
+/* An implementation of delete_glyphs for termcap frames. */
+
+static void
+tty_delete_glyphs (struct frame *f, int n)
{
char *buf;
register int i;
- if (delete_glyphs_hook && ! FRAME_TERMCAP_P (updating_frame))
- {
- (*delete_glyphs_hook) (n);
- return;
- }
+ struct tty_display_info *tty = FRAME_TTY (f);
- if (delete_in_insert_mode)
+ if (tty->delete_in_insert_mode)
{
- turn_on_insert ();
+ tty_turn_on_insert (tty);
}
else
{
- turn_off_insert ();
- OUTPUT_IF (TS_delete_mode);
+ tty_turn_off_insert (tty);
+ OUTPUT_IF (tty, tty->TS_delete_mode);
}
- if (TS_del_multi_chars)
+ if (tty->TS_del_multi_chars)
{
- buf = tparam (TS_del_multi_chars, 0, 0, n);
- OUTPUT1 (buf);
+ buf = tparam (tty->TS_del_multi_chars, 0, 0, n);
+ OUTPUT1 (tty, buf);
xfree (buf);
}
else
for (i = 0; i < n; i++)
- OUTPUT1 (TS_del_char);
- if (!delete_in_insert_mode)
- OUTPUT_IF (TS_end_delete_mode);
+ OUTPUT1 (tty, tty->TS_del_char);
+ if (!tty->delete_in_insert_mode)
+ OUTPUT_IF (tty, tty->TS_end_delete_mode);
}
-/* Insert N lines at vpos VPOS. If N is negative, delete -N lines. */
+/* An implementation of ins_del_lines for termcap frames. */
-void
-ins_del_lines (vpos, n)
- int vpos, n;
+static void
+tty_ins_del_lines (struct frame *f, int vpos, int n)
{
- char *multi = n > 0 ? TS_ins_multi_lines : TS_del_multi_lines;
- char *single = n > 0 ? TS_ins_line : TS_del_line;
- char *scroll = n > 0 ? TS_rev_scroll : TS_fwd_scroll;
- struct frame *sf;
+ struct tty_display_info *tty = FRAME_TTY (f);
+ char *multi = n > 0 ? tty->TS_ins_multi_lines : tty->TS_del_multi_lines;
+ char *single = n > 0 ? tty->TS_ins_line : tty->TS_del_line;
+ char *scroll = n > 0 ? tty->TS_rev_scroll : tty->TS_fwd_scroll;
register int i = n > 0 ? n : -n;
register char *buf;
- if (ins_del_lines_hook && ! FRAME_TERMCAP_P (updating_frame))
- {
- (*ins_del_lines_hook) (vpos, n);
- return;
- }
-
- sf = XFRAME (selected_frame);
-
/* If the lines below the insertion are being pushed
into the end of the window, this is the same as clearing;
and we know the lines are already clear, since the matching
@@ -1177,45 +943,49 @@ ins_del_lines (vpos, n)
/* If the lines below the deletion are blank lines coming
out of the end of the window, don't bother,
as there will be a matching inslines later that will flush them. */
- if (scroll_region_ok && vpos + i >= specified_window)
+ if (FRAME_SCROLL_REGION_OK (f)
+ && vpos + i >= tty->specified_window)
return;
- if (!memory_below_frame && vpos + i >= FRAME_LINES (sf))
+ if (!FRAME_MEMORY_BELOW_FRAME (f)
+ && vpos + i >= FRAME_LINES (f))
return;
-
+
if (multi)
{
- raw_cursor_to (vpos, 0);
- background_highlight ();
+ raw_cursor_to (f, vpos, 0);
+ tty_background_highlight (tty);
buf = tparam (multi, 0, 0, i);
- OUTPUT (buf);
+ OUTPUT (tty, buf);
xfree (buf);
}
else if (single)
{
- raw_cursor_to (vpos, 0);
- background_highlight ();
+ raw_cursor_to (f, vpos, 0);
+ tty_background_highlight (tty);
while (--i >= 0)
- OUTPUT (single);
- if (TF_teleray)
- curX = 0;
+ OUTPUT (tty, single);
+ if (tty->TF_teleray)
+ curX (tty) = 0;
}
else
{
- set_scroll_region (vpos, specified_window);
+ tty_set_scroll_region (f, vpos, tty->specified_window);
if (n < 0)
- raw_cursor_to (specified_window - 1, 0);
+ raw_cursor_to (f, tty->specified_window - 1, 0);
else
- raw_cursor_to (vpos, 0);
- background_highlight ();
+ raw_cursor_to (f, vpos, 0);
+ tty_background_highlight (tty);
while (--i >= 0)
- OUTPUTL (scroll, specified_window - vpos);
- set_scroll_region (0, specified_window);
+ OUTPUTL (tty, scroll, tty->specified_window - vpos);
+ tty_set_scroll_region (f, 0, tty->specified_window);
}
-
- if (!scroll_region_ok && memory_below_frame && n < 0)
+
+ if (!FRAME_SCROLL_REGION_OK (f)
+ && FRAME_MEMORY_BELOW_FRAME (f)
+ && n < 0)
{
- cursor_to (FRAME_LINES (sf) + n, 0);
- clear_to_end ();
+ cursor_to (f, FRAME_LINES (f) + n, 0);
+ clear_to_end (f);
}
}
@@ -1223,8 +993,7 @@ ins_del_lines (vpos, n)
not counting any line-dependent padding. */
int
-string_cost (str)
- char *str;
+string_cost (char *str)
{
cost = 0;
if (str)
@@ -1236,8 +1005,7 @@ string_cost (str)
counting any line-dependent padding at one line. */
static int
-string_cost_one_line (str)
- char *str;
+string_cost_one_line (char *str)
{
cost = 0;
if (str)
@@ -1249,8 +1017,7 @@ string_cost_one_line (str)
in tenths of characters. */
int
-per_line_cost (str)
- register char *str;
+per_line_cost (char *str)
{
cost = 0;
if (str)
@@ -1273,26 +1040,26 @@ int *char_ins_del_vector;
/* ARGSUSED */
static void
-calculate_ins_del_char_costs (frame)
- FRAME_PTR frame;
+calculate_ins_del_char_costs (struct frame *f)
{
+ struct tty_display_info *tty = FRAME_TTY (f);
int ins_startup_cost, del_startup_cost;
int ins_cost_per_char, del_cost_per_char;
register int i;
register int *p;
- if (TS_ins_multi_chars)
+ if (tty->TS_ins_multi_chars)
{
ins_cost_per_char = 0;
- ins_startup_cost = string_cost_one_line (TS_ins_multi_chars);
+ ins_startup_cost = string_cost_one_line (tty->TS_ins_multi_chars);
}
- else if (TS_ins_char || TS_pad_inserted_char
- || (TS_insert_mode && TS_end_insert_mode))
+ else if (tty->TS_ins_char || tty->TS_pad_inserted_char
+ || (tty->TS_insert_mode && tty->TS_end_insert_mode))
{
- ins_startup_cost = (30 * (string_cost (TS_insert_mode)
- + string_cost (TS_end_insert_mode))) / 100;
- ins_cost_per_char = (string_cost_one_line (TS_ins_char)
- + string_cost_one_line (TS_pad_inserted_char));
+ ins_startup_cost = (30 * (string_cost (tty->TS_insert_mode)
+ + string_cost (tty->TS_end_insert_mode))) / 100;
+ ins_cost_per_char = (string_cost_one_line (tty->TS_ins_char)
+ + string_cost_one_line (tty->TS_pad_inserted_char));
}
else
{
@@ -1300,18 +1067,18 @@ calculate_ins_del_char_costs (frame)
ins_cost_per_char = 0;
}
- if (TS_del_multi_chars)
+ if (tty->TS_del_multi_chars)
{
del_cost_per_char = 0;
- del_startup_cost = string_cost_one_line (TS_del_multi_chars);
+ del_startup_cost = string_cost_one_line (tty->TS_del_multi_chars);
}
- else if (TS_del_char)
+ else if (tty->TS_del_char)
{
- del_startup_cost = (string_cost (TS_delete_mode)
- + string_cost (TS_end_delete_mode));
- if (delete_in_insert_mode)
+ del_startup_cost = (string_cost (tty->TS_delete_mode)
+ + string_cost (tty->TS_end_delete_mode));
+ if (tty->delete_in_insert_mode)
del_startup_cost /= 2;
- del_cost_per_char = string_cost_one_line (TS_del_char);
+ del_cost_per_char = string_cost_one_line (tty->TS_del_char);
}
else
{
@@ -1320,75 +1087,80 @@ calculate_ins_del_char_costs (frame)
}
/* Delete costs are at negative offsets */
- p = &char_ins_del_cost (frame)[0];
- for (i = FRAME_COLS (frame); --i >= 0;)
+ p = &char_ins_del_cost (f)[0];
+ for (i = FRAME_COLS (f); --i >= 0;)
*--p = (del_startup_cost += del_cost_per_char);
/* Doing nothing is free */
- p = &char_ins_del_cost (frame)[0];
+ p = &char_ins_del_cost (f)[0];
*p++ = 0;
/* Insert costs are at positive offsets */
- for (i = FRAME_COLS (frame); --i >= 0;)
+ for (i = FRAME_COLS (f); --i >= 0;)
*p++ = (ins_startup_cost += ins_cost_per_char);
}
void
-calculate_costs (frame)
- FRAME_PTR frame;
+calculate_costs (struct frame *frame)
{
- register char *f = (TS_set_scroll_region
- ? TS_set_scroll_region
- : TS_set_scroll_region_1);
-
FRAME_COST_BAUD_RATE (frame) = baud_rate;
- scroll_region_cost = string_cost (f);
+ if (FRAME_TERMCAP_P (frame))
+ {
+ struct tty_display_info *tty = FRAME_TTY (frame);
+ register char *f = (tty->TS_set_scroll_region
+ ? tty->TS_set_scroll_region
+ : tty->TS_set_scroll_region_1);
- /* These variables are only used for terminal stuff. They are allocated
- once for the terminal frame of X-windows emacs, but not used afterwards.
+ FRAME_SCROLL_REGION_COST (frame) = string_cost (f);
- char_ins_del_vector (i.e., char_ins_del_cost) isn't used because
- X turns off char_ins_del_ok. */
+ tty->costs_set = 1;
- max_frame_lines = max (max_frame_lines, FRAME_LINES (frame));
- max_frame_cols = max (max_frame_cols, FRAME_COLS (frame));
+ /* These variables are only used for terminal stuff. They are
+ allocated once for the terminal frame of X-windows emacs, but not
+ used afterwards.
- costs_set = 1;
+ char_ins_del_vector (i.e., char_ins_del_cost) isn't used because
+ X turns off char_ins_del_ok. */
- if (char_ins_del_vector != 0)
- char_ins_del_vector
- = (int *) xrealloc (char_ins_del_vector,
- (sizeof (int)
- + 2 * max_frame_cols * sizeof (int)));
- else
- char_ins_del_vector
- = (int *) xmalloc (sizeof (int)
- + 2 * max_frame_cols * sizeof (int));
-
- bzero (char_ins_del_vector, (sizeof (int)
- + 2 * max_frame_cols * sizeof (int)));
-
- if (f && (!TS_ins_line && !TS_del_line))
- do_line_insertion_deletion_costs (frame,
- TS_rev_scroll, TS_ins_multi_lines,
- TS_fwd_scroll, TS_del_multi_lines,
- f, f, 1);
- else
- do_line_insertion_deletion_costs (frame,
- TS_ins_line, TS_ins_multi_lines,
- TS_del_line, TS_del_multi_lines,
- 0, 0, 1);
+ max_frame_lines = max (max_frame_lines, FRAME_LINES (frame));
+ max_frame_cols = max (max_frame_cols, FRAME_COLS (frame));
- calculate_ins_del_char_costs (frame);
+ if (char_ins_del_vector != 0)
+ char_ins_del_vector
+ = (int *) xrealloc (char_ins_del_vector,
+ (sizeof (int)
+ + 2 * max_frame_cols * sizeof (int)));
+ else
+ char_ins_del_vector
+ = (int *) xmalloc (sizeof (int)
+ + 2 * max_frame_cols * sizeof (int));
- /* Don't use TS_repeat if its padding is worse than sending the chars */
- if (TS_repeat && per_line_cost (TS_repeat) * baud_rate < 9000)
- RPov = string_cost (TS_repeat);
- else
- RPov = FRAME_COLS (frame) * 2;
+ bzero (char_ins_del_vector, (sizeof (int)
+ + 2 * max_frame_cols * sizeof (int)));
+
+
+ if (f && (!tty->TS_ins_line && !tty->TS_del_line))
+ do_line_insertion_deletion_costs (frame,
+ tty->TS_rev_scroll, tty->TS_ins_multi_lines,
+ tty->TS_fwd_scroll, tty->TS_del_multi_lines,
+ f, f, 1);
+ else
+ do_line_insertion_deletion_costs (frame,
+ tty->TS_ins_line, tty->TS_ins_multi_lines,
+ tty->TS_del_line, tty->TS_del_multi_lines,
+ 0, 0, 1);
- cmcostinit (); /* set up cursor motion costs */
+ calculate_ins_del_char_costs (frame);
+
+ /* Don't use TS_repeat if its padding is worse than sending the chars */
+ if (tty->TS_repeat && per_line_cost (tty->TS_repeat) * baud_rate < 9000)
+ tty->RPov = string_cost (tty->TS_repeat);
+ else
+ tty->RPov = FRAME_COLS (frame) * 2;
+
+ cmcostinit (FRAME_TTY (frame)); /* set up cursor motion costs */
+ }
}
struct fkey_table {
@@ -1498,16 +1270,18 @@ static struct fkey_table keys[] =
{"!3", "S-undo"} /*shifted undo key*/
};
-static char **term_get_fkeys_arg;
+static char **term_get_fkeys_address;
+static KBOARD *term_get_fkeys_kboard;
static Lisp_Object term_get_fkeys_1 ();
-/* Find the escape codes sent by the function keys for Vfunction_key_map.
+/* Find the escape codes sent by the function keys for Vinput_decode_map.
This function scans the termcap function key sequence entries, and
- adds entries to Vfunction_key_map for each function key it finds. */
+ adds entries to Vinput_decode_map for each function key it finds. */
-void
-term_get_fkeys (address)
+static void
+term_get_fkeys (address, kboard)
char **address;
+ KBOARD *kboard;
{
/* We run the body of the function (term_get_fkeys_1) and ignore all Lisp
errors during the call. The only errors should be from Fdefine_key
@@ -1518,7 +1292,8 @@ term_get_fkeys (address)
refusing to run at all on such a terminal. */
extern Lisp_Object Fidentity ();
- term_get_fkeys_arg = address;
+ term_get_fkeys_address = address;
+ term_get_fkeys_kboard = kboard;
internal_condition_case (term_get_fkeys_1, Qerror, Fidentity);
}
@@ -1527,17 +1302,18 @@ term_get_fkeys_1 ()
{
int i;
- char **address = term_get_fkeys_arg;
-
+ char **address = term_get_fkeys_address;
+ KBOARD *kboard = term_get_fkeys_kboard;
+
/* This can happen if CANNOT_DUMP or with strange options. */
- if (!initialized)
- Vfunction_key_map = Fmake_sparse_keymap (Qnil);
+ if (!KEYMAPP (kboard->Vinput_decode_map))
+ kboard->Vinput_decode_map = Fmake_sparse_keymap (Qnil);
for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++)
{
char *sequence = tgetstr (keys[i].cap, address);
if (sequence)
- Fdefine_key (Vfunction_key_map, build_string (sequence),
+ Fdefine_key (kboard->Vinput_decode_map, build_string (sequence),
Fmake_vector (make_number (1),
intern (keys[i].name)));
}
@@ -1557,13 +1333,13 @@ term_get_fkeys_1 ()
if (k0)
/* Define f0 first, so that f10 takes precedence in case the
key sequences happens to be the same. */
- Fdefine_key (Vfunction_key_map, build_string (k0),
+ Fdefine_key (kboard->Vinput_decode_map, build_string (k0),
Fmake_vector (make_number (1), intern ("f0")));
- Fdefine_key (Vfunction_key_map, build_string (k_semi),
+ Fdefine_key (kboard->Vinput_decode_map, build_string (k_semi),
Fmake_vector (make_number (1), intern ("f10")));
}
else if (k0)
- Fdefine_key (Vfunction_key_map, build_string (k0),
+ Fdefine_key (kboard->Vinput_decode_map, build_string (k0),
Fmake_vector (make_number (1), intern (k0_name)));
}
@@ -1586,7 +1362,7 @@ term_get_fkeys_1 ()
if (sequence)
{
sprintf (fkey, "f%d", i);
- Fdefine_key (Vfunction_key_map, build_string (sequence),
+ Fdefine_key (kboard->Vinput_decode_map, build_string (sequence),
Fmake_vector (make_number (1),
intern (fkey)));
}
@@ -1602,10 +1378,10 @@ term_get_fkeys_1 ()
if (!tgetstr (cap1, address)) \
{ \
char *sequence = tgetstr (cap2, address); \
- if (sequence) \
- Fdefine_key (Vfunction_key_map, build_string (sequence), \
- Fmake_vector (make_number (1), \
- intern (sym))); \
+ if (sequence) \
+ Fdefine_key (kboard->Vinput_decode_map, build_string (sequence), \
+ Fmake_vector (make_number (1), \
+ intern (sym))); \
}
/* if there's no key_next keycap, map key_npage to `next' keysym */
@@ -1961,10 +1737,10 @@ produce_special_glyphs (it, what)
from them. Some display attributes may not be used together with
color; the termcap capability `NC' specifies which ones. */
-#define MAY_USE_WITH_COLORS_P(ATTR) \
- (TN_max_colors > 0 \
- ? (TN_no_color_video & (ATTR)) == 0 \
- : 1)
+#define MAY_USE_WITH_COLORS_P(tty, ATTR) \
+ (tty->TN_max_colors > 0 \
+ ? (tty->TN_no_color_video & (ATTR)) == 0 \
+ : 1)
/* Turn appearances of face FACE_ID on tty frame F on.
FACE_ID is a realized face ID number, in the face cache. */
@@ -1977,12 +1753,13 @@ turn_on_face (f, face_id)
struct face *face = FACE_FROM_ID (f, face_id);
long fg = face->foreground;
long bg = face->background;
+ struct tty_display_info *tty = FRAME_TTY (f);
/* Do this first because TS_end_standout_mode may be the same
as TS_exit_attribute_mode, which turns all appearances off. */
- if (MAY_USE_WITH_COLORS_P (NC_REVERSE))
+ if (MAY_USE_WITH_COLORS_P (tty, NC_REVERSE))
{
- if (TN_max_colors > 0)
+ if (tty->TN_max_colors > 0)
{
if (fg >= 0 && bg >= 0)
{
@@ -1996,13 +1773,13 @@ turn_on_face (f, face_id)
{
if (fg == FACE_TTY_DEFAULT_FG_COLOR
|| bg == FACE_TTY_DEFAULT_BG_COLOR)
- toggle_highlight ();
+ tty_toggle_highlight (tty);
}
else
{
if (fg == FACE_TTY_DEFAULT_BG_COLOR
|| bg == FACE_TTY_DEFAULT_FG_COLOR)
- toggle_highlight ();
+ tty_toggle_highlight (tty);
}
}
else
@@ -2013,55 +1790,55 @@ turn_on_face (f, face_id)
{
if (fg == FACE_TTY_DEFAULT_FG_COLOR
|| bg == FACE_TTY_DEFAULT_BG_COLOR)
- toggle_highlight ();
+ tty_toggle_highlight (tty);
}
else
{
if (fg == FACE_TTY_DEFAULT_BG_COLOR
|| bg == FACE_TTY_DEFAULT_FG_COLOR)
- toggle_highlight ();
+ tty_toggle_highlight (tty);
}
}
}
if (face->tty_bold_p)
{
- if (MAY_USE_WITH_COLORS_P (NC_BOLD))
- OUTPUT1_IF (TS_enter_bold_mode);
+ if (MAY_USE_WITH_COLORS_P (tty, NC_BOLD))
+ OUTPUT1_IF (tty, tty->TS_enter_bold_mode);
}
else if (face->tty_dim_p)
- if (MAY_USE_WITH_COLORS_P (NC_DIM))
- OUTPUT1_IF (TS_enter_dim_mode);
+ if (MAY_USE_WITH_COLORS_P (tty, NC_DIM))
+ OUTPUT1_IF (tty, tty->TS_enter_dim_mode);
/* Alternate charset and blinking not yet used. */
if (face->tty_alt_charset_p
- && MAY_USE_WITH_COLORS_P (NC_ALT_CHARSET))
- OUTPUT1_IF (TS_enter_alt_charset_mode);
+ && MAY_USE_WITH_COLORS_P (tty, NC_ALT_CHARSET))
+ OUTPUT1_IF (tty, tty->TS_enter_alt_charset_mode);
if (face->tty_blinking_p
- && MAY_USE_WITH_COLORS_P (NC_BLINK))
- OUTPUT1_IF (TS_enter_blink_mode);
+ && MAY_USE_WITH_COLORS_P (tty, NC_BLINK))
+ OUTPUT1_IF (tty, tty->TS_enter_blink_mode);
- if (face->tty_underline_p && MAY_USE_WITH_COLORS_P (NC_UNDERLINE))
- OUTPUT1_IF (TS_enter_underline_mode);
+ if (face->tty_underline_p && MAY_USE_WITH_COLORS_P (tty, NC_UNDERLINE))
+ OUTPUT1_IF (tty, tty->TS_enter_underline_mode);
- if (TN_max_colors > 0)
+ if (tty->TN_max_colors > 0)
{
char *ts, *p;
- ts = standout_mode ? TS_set_background : TS_set_foreground;
+ ts = tty->standout_mode ? tty->TS_set_background : tty->TS_set_foreground;
if (fg >= 0 && ts)
{
- p = tparam (ts, NULL, 0, (int) fg);
- OUTPUT (p);
+ p = tparam (ts, NULL, 0, (int) fg);
+ OUTPUT (tty, p);
xfree (p);
}
- ts = standout_mode ? TS_set_foreground : TS_set_background;
+ ts = tty->standout_mode ? tty->TS_set_foreground : tty->TS_set_background;
if (bg >= 0 && ts)
{
- p = tparam (ts, NULL, 0, (int) bg);
- OUTPUT (p);
+ p = tparam (ts, NULL, 0, (int) bg);
+ OUTPUT (tty, p);
xfree (p);
}
}
@@ -2076,10 +1853,11 @@ turn_off_face (f, face_id)
int face_id;
{
struct face *face = FACE_FROM_ID (f, face_id);
+ struct tty_display_info *tty = FRAME_TTY (f);
xassert (face != NULL);
- if (TS_exit_attribute_mode)
+ if (tty->TS_exit_attribute_mode)
{
/* Capability "me" will turn off appearance modes double-bright,
half-bright, reverse-video, standout, underline. It may or
@@ -2091,32 +1869,32 @@ turn_off_face (f, face_id)
|| face->tty_blinking_p
|| face->tty_underline_p)
{
- OUTPUT1_IF (TS_exit_attribute_mode);
- if (strcmp (TS_exit_attribute_mode, TS_end_standout_mode) == 0)
- standout_mode = 0;
+ OUTPUT1_IF (tty, tty->TS_exit_attribute_mode);
+ if (strcmp (tty->TS_exit_attribute_mode, tty->TS_end_standout_mode) == 0)
+ tty->standout_mode = 0;
}
if (face->tty_alt_charset_p)
- OUTPUT_IF (TS_exit_alt_charset_mode);
+ OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
}
else
{
/* If we don't have "me" we can only have those appearances
that have exit sequences defined. */
if (face->tty_alt_charset_p)
- OUTPUT_IF (TS_exit_alt_charset_mode);
+ OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
if (face->tty_underline_p)
- OUTPUT_IF (TS_exit_underline_mode);
+ OUTPUT_IF (tty, tty->TS_exit_underline_mode);
}
/* Switch back to default colors. */
- if (TN_max_colors > 0
+ if (tty->TN_max_colors > 0
&& ((face->foreground != FACE_TTY_DEFAULT_COLOR
&& face->foreground != FACE_TTY_DEFAULT_FG_COLOR)
|| (face->background != FACE_TTY_DEFAULT_COLOR
&& face->background != FACE_TTY_DEFAULT_BG_COLOR)))
- OUTPUT1_IF (TS_orig_pair);
+ OUTPUT1_IF (tty, tty->TS_orig_pair);
}
@@ -2125,46 +1903,61 @@ turn_off_face (f, face_id)
colors FG and BG. */
int
-tty_capable_p (f, caps, fg, bg)
- struct frame *f;
+tty_capable_p (tty, caps, fg, bg)
+ struct tty_display_info *tty;
unsigned caps;
unsigned long fg, bg;
{
-#define TTY_CAPABLE_P_TRY(cap, TS, NC_bit) \
- if ((caps & (cap)) && (!(TS) || !MAY_USE_WITH_COLORS_P(NC_bit))) \
+#define TTY_CAPABLE_P_TRY(tty, cap, TS, NC_bit) \
+ if ((caps & (cap)) && (!(TS) || !MAY_USE_WITH_COLORS_P(tty, NC_bit))) \
return 0;
- TTY_CAPABLE_P_TRY (TTY_CAP_INVERSE, TS_standout_mode, NC_REVERSE);
- TTY_CAPABLE_P_TRY (TTY_CAP_UNDERLINE, TS_enter_underline_mode, NC_UNDERLINE);
- TTY_CAPABLE_P_TRY (TTY_CAP_BOLD, TS_enter_bold_mode, NC_BOLD);
- TTY_CAPABLE_P_TRY (TTY_CAP_DIM, TS_enter_dim_mode, NC_DIM);
- TTY_CAPABLE_P_TRY (TTY_CAP_BLINK, TS_enter_blink_mode, NC_BLINK);
- TTY_CAPABLE_P_TRY (TTY_CAP_ALT_CHARSET, TS_enter_alt_charset_mode, NC_ALT_CHARSET);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode, NC_REVERSE);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode, NC_UNDERLINE);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode, NC_BOLD);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_BLINK, tty->TS_enter_blink_mode, NC_BLINK);
+ TTY_CAPABLE_P_TRY (tty, TTY_CAP_ALT_CHARSET, tty->TS_enter_alt_charset_mode, NC_ALT_CHARSET);
/* We can do it! */
return 1;
}
-
/* Return non-zero if the terminal is capable to display colors. */
DEFUN ("tty-display-color-p", Ftty_display_color_p, Stty_display_color_p,
0, 1, 0,
- doc: /* Return non-nil if TTY can display colors on DISPLAY. */)
- (display)
- Lisp_Object display;
+ doc: /* Return non-nil if the tty device TERMINAL can display colors.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). This function always returns nil if TERMINAL
+is not on a tty device. */)
+ (terminal)
+ Lisp_Object terminal;
{
- return TN_max_colors > 0 ? Qt : Qnil;
+ struct terminal *t = get_tty_terminal (terminal, 0);
+ if (!t)
+ return Qnil;
+ else
+ return t->display_info.tty->TN_max_colors > 0 ? Qt : Qnil;
}
/* Return the number of supported colors. */
DEFUN ("tty-display-color-cells", Ftty_display_color_cells,
Stty_display_color_cells, 0, 1, 0,
- doc: /* Return the number of colors supported by TTY on DISPLAY. */)
- (display)
- Lisp_Object display;
+ doc: /* Return the number of colors supported by the tty device TERMINAL.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). This function always returns 0 if TERMINAL
+is not on a tty device. */)
+ (terminal)
+ Lisp_Object terminal;
{
- return make_number (TN_max_colors);
+ struct terminal *t = get_tty_terminal (terminal, 0);
+ if (!t)
+ return make_number (0);
+ else
+ return make_number (t->display_info.tty->TN_max_colors);
}
#ifndef WINDOWSNT
@@ -2182,48 +1975,46 @@ static char *default_set_background;
/* Save or restore the default color-related capabilities of this
terminal. */
static void
-tty_default_color_capabilities (save)
- int save;
+tty_default_color_capabilities (struct tty_display_info *tty, int save)
{
if (save)
{
if (default_orig_pair)
xfree (default_orig_pair);
- default_orig_pair = TS_orig_pair ? xstrdup (TS_orig_pair) : NULL;
+ default_orig_pair = tty->TS_orig_pair ? xstrdup (tty->TS_orig_pair) : NULL;
if (default_set_foreground)
xfree (default_set_foreground);
- default_set_foreground = TS_set_foreground ? xstrdup (TS_set_foreground)
+ default_set_foreground = tty->TS_set_foreground ? xstrdup (tty->TS_set_foreground)
: NULL;
if (default_set_background)
xfree (default_set_background);
- default_set_background = TS_set_background ? xstrdup (TS_set_background)
+ default_set_background = tty->TS_set_background ? xstrdup (tty->TS_set_background)
: NULL;
- default_max_colors = TN_max_colors;
- default_max_pairs = TN_max_pairs;
- default_no_color_video = TN_no_color_video;
+ default_max_colors = tty->TN_max_colors;
+ default_max_pairs = tty->TN_max_pairs;
+ default_no_color_video = tty->TN_no_color_video;
}
else
{
- TS_orig_pair = default_orig_pair;
- TS_set_foreground = default_set_foreground;
- TS_set_background = default_set_background;
- TN_max_colors = default_max_colors;
- TN_max_pairs = default_max_pairs;
- TN_no_color_video = default_no_color_video;
+ tty->TS_orig_pair = default_orig_pair;
+ tty->TS_set_foreground = default_set_foreground;
+ tty->TS_set_background = default_set_background;
+ tty->TN_max_colors = default_max_colors;
+ tty->TN_max_pairs = default_max_pairs;
+ tty->TN_no_color_video = default_no_color_video;
}
}
/* Setup one of the standard tty color schemes according to MODE.
MODE's value is generally the number of colors which we want to
support; zero means set up for the default capabilities, the ones
- we saw at term_init time; -1 means turn off color support. */
-void
-tty_setup_colors (mode)
- int mode;
+ we saw at init_tty time; -1 means turn off color support. */
+static void
+tty_setup_colors (struct tty_display_info *tty, int mode)
{
/* Canonicalize all negative values of MODE. */
if (mode < -1)
@@ -2232,27 +2023,27 @@ tty_setup_colors (mode)
switch (mode)
{
case -1: /* no colors at all */
- TN_max_colors = 0;
- TN_max_pairs = 0;
- TN_no_color_video = 0;
- TS_set_foreground = TS_set_background = TS_orig_pair = NULL;
+ tty->TN_max_colors = 0;
+ tty->TN_max_pairs = 0;
+ tty->TN_no_color_video = 0;
+ tty->TS_set_foreground = tty->TS_set_background = tty->TS_orig_pair = NULL;
break;
case 0: /* default colors, if any */
default:
- tty_default_color_capabilities (0);
+ tty_default_color_capabilities (tty, 0);
break;
case 8: /* 8 standard ANSI colors */
- TS_orig_pair = "\033[0m";
+ tty->TS_orig_pair = "\033[0m";
#ifdef TERMINFO
- TS_set_foreground = "\033[3%p1%dm";
- TS_set_background = "\033[4%p1%dm";
+ tty->TS_set_foreground = "\033[3%p1%dm";
+ tty->TS_set_background = "\033[4%p1%dm";
#else
- TS_set_foreground = "\033[3%dm";
- TS_set_background = "\033[4%dm";
+ tty->TS_set_foreground = "\033[3%dm";
+ tty->TS_set_background = "\033[4%dm";
#endif
- TN_max_colors = 8;
- TN_max_pairs = 64;
- TN_no_color_video = 0;
+ tty->TN_max_colors = 8;
+ tty->TN_max_pairs = 64;
+ tty->TN_no_color_video = 0;
break;
}
}
@@ -2303,7 +2094,7 @@ set_tty_color_mode (f, val)
if (mode != old_mode)
{
- tty_setup_colors (mode);
+ tty_setup_colors (FRAME_TTY (f), mode);
/* This recomputes all the faces given the new color
definitions. */
call0 (intern ("tty-set-up-initial-frame-faces"));
@@ -2314,85 +2105,1261 @@ set_tty_color_mode (f, val)
#endif /* !WINDOWSNT */
+
+/* Return the tty display object specified by TERMINAL. */
+
+struct terminal *
+get_tty_terminal (Lisp_Object terminal, int throw)
+{
+ struct terminal *t = get_terminal (terminal, throw);
+
+ if (t && t->type != output_termcap)
+ {
+ if (throw)
+ error ("Device %d is not a termcap terminal device", t->id);
+ else
+ return NULL;
+ }
+
+ return t;
+}
+
+/* Return an active termcap device that uses the tty device with the
+ given name.
+
+ This function ignores suspended devices.
+
+ Returns NULL if the named terminal device is not opened. */
+
+struct terminal *
+get_named_tty (name)
+ char *name;
+{
+ struct terminal *t;
+
+ if (!name)
+ abort ();
+
+ for (t = terminal_list; t; t = t->next_terminal)
+ {
+ if (t->type == output_termcap
+ && !strcmp (t->display_info.tty->name, name)
+ && TERMINAL_ACTIVE_P (t))
+ return t;
+ }
+
+ return 0;
+}
+
+
+DEFUN ("tty-type", Ftty_type, Stty_type, 0, 1, 0,
+ doc: /* Return the type of the tty device that TERMINAL uses.
+Returns nil if TERMINAL is not on a tty device.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). */)
+ (terminal)
+ Lisp_Object terminal;
+{
+ struct terminal *t = get_terminal (terminal, 1);
+
+ if (t->type != output_termcap)
+ return Qnil;
+
+ if (t->display_info.tty->type)
+ return build_string (t->display_info.tty->type);
+ else
+ return Qnil;
+}
+
+DEFUN ("controlling-tty-p", Fcontrolling_tty_p, Scontrolling_tty_p, 0, 1, 0,
+ doc: /* Return non-nil if TERMINAL is on the controlling tty of the Emacs process.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). This function always returns nil if TERMINAL
+is not on a tty device. */)
+ (terminal)
+ Lisp_Object terminal;
+{
+ struct terminal *t = get_terminal (terminal, 1);
+
+ if (t->type != output_termcap || strcmp (t->display_info.tty->name, DEV_TTY))
+ return Qnil;
+ else
+ return Qt;
+}
+
+DEFUN ("tty-no-underline", Ftty_no_underline, Stty_no_underline, 0, 1, 0,
+ doc: /* Declare that the tty used by TERMINAL does not handle underlining.
+This is used to override the terminfo data, for certain terminals that
+do not really do underlining, but say that they do. This function has
+no effect if used on a non-tty terminal.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). This function always returns nil if TERMINAL
+is not on a tty device. */)
+ (terminal)
+ Lisp_Object terminal;
+{
+ struct terminal *t = get_terminal (terminal, 1);
+
+ if (t->type == output_termcap)
+ t->display_info.tty->TS_enter_underline_mode = 0;
+ return Qnil;
+}
+
+
+
+DEFUN ("suspend-tty", Fsuspend_tty, Ssuspend_tty, 0, 1, 0,
+ doc: /* Suspend the terminal device TTY.
+
+The device is restored to its default state, and Emacs ceases all
+access to the tty device. Frames that use the device are not deleted,
+but input is not read from them and if they change, their display is
+not updated.
+
+TTY may be a terminal id, a frame, or nil for the terminal device of
+the currently selected frame.
+
+This function runs `suspend-tty-functions' after suspending the
+device. The functions are run with one arg, the id of the suspended
+terminal device.
+
+`suspend-tty' does nothing if it is called on a device that is already
+suspended.
+
+A suspended tty may be resumed by calling `resume-tty' on it. */)
+ (tty)
+ Lisp_Object tty;
+{
+ struct terminal *t = get_tty_terminal (tty, 1);
+ FILE *f;
+
+ if (!t)
+ error ("Unknown tty device");
+
+ f = t->display_info.tty->input;
+
+ if (f)
+ {
+ /* First run `suspend-tty-functions' and then clean up the tty
+ state because `suspend-tty-functions' might need to change
+ the tty state. */
+ if (!NILP (Vrun_hooks))
+ {
+ Lisp_Object args[2];
+ args[0] = intern ("suspend-tty-functions");
+ XSETTERMINAL (args[1], t);
+ Frun_hook_with_args (2, args);
+ }
+
+ reset_sys_modes (t->display_info.tty);
+
+ delete_keyboard_wait_descriptor (fileno (f));
+
+ fclose (f);
+ if (f != t->display_info.tty->output)
+ fclose (t->display_info.tty->output);
+
+ t->display_info.tty->input = 0;
+ t->display_info.tty->output = 0;
+
+ if (FRAMEP (t->display_info.tty->top_frame))
+ FRAME_SET_VISIBLE (XFRAME (t->display_info.tty->top_frame), 0);
+
+ }
+
+ /* Clear display hooks to prevent further output. */
+ clear_tty_hooks (t);
+
+ return Qnil;
+}
+
+DEFUN ("resume-tty", Fresume_tty, Sresume_tty, 0, 1, 0,
+ doc: /* Resume the previously suspended terminal device TTY.
+The terminal is opened and reinitialized. Frames that are on the
+suspended terminal are revived.
+
+It is an error to resume a terminal while another terminal is active
+on the same device.
+
+This function runs `resume-tty-functions' after resuming the terminal.
+The functions are run with one arg, the id of the resumed terminal
+device.
+
+`resume-tty' does nothing if it is called on a device that is not
+suspended.
+
+TTY may be a terminal id, a frame, or nil for the terminal device of
+the currently selected frame. */)
+ (tty)
+ Lisp_Object tty;
+{
+ struct terminal *t = get_tty_terminal (tty, 1);
+ int fd;
+
+ if (!t)
+ error ("Unknown tty device");
+
+ if (!t->display_info.tty->input)
+ {
+ if (get_named_tty (t->display_info.tty->name))
+ error ("Cannot resume display while another display is active on the same device");
+
+ fd = emacs_open (t->display_info.tty->name, O_RDWR | O_NOCTTY, 0);
+
+ if (fd == -1)
+ error ("Can not reopen tty device %s: %s", t->display_info.tty->name, strerror (errno));
+
+ if (strcmp (t->display_info.tty->name, DEV_TTY))
+ dissociate_if_controlling_tty (fd);
+
+ t->display_info.tty->output = fdopen (fd, "w+");
+ t->display_info.tty->input = t->display_info.tty->output;
+
+ add_keyboard_wait_descriptor (fd);
+
+ if (FRAMEP (t->display_info.tty->top_frame))
+ FRAME_SET_VISIBLE (XFRAME (t->display_info.tty->top_frame), 1);
+
+ init_sys_modes (t->display_info.tty);
+
+ /* Run `resume-tty-functions'. */
+ if (!NILP (Vrun_hooks))
+ {
+ Lisp_Object args[2];
+ args[0] = intern ("resume-tty-functions");
+ XSETTERMINAL (args[1], t);
+ Frun_hook_with_args (2, args);
+ }
+ }
+
+ set_tty_hooks (t);
+
+ return Qnil;
+}
+
+
+/***********************************************************************
+ Mouse
+ ***********************************************************************/
+
+#ifdef HAVE_GPM
+void
+term_mouse_moveto (int x, int y)
+{
+ /* TODO: how to set mouse position?
+ const char *name;
+ int fd;
+ name = (const char *) ttyname (0);
+ fd = open (name, O_WRONLY);
+ SOME_FUNCTION (x, y, fd);
+ close (fd);
+ last_mouse_x = x;
+ last_mouse_y = y; */
+}
+
+static void
+term_show_mouse_face (enum draw_glyphs_face draw)
+{
+ struct window *w = XWINDOW (mouse_face_window);
+ int save_x, save_y;
+ int i;
+
+ struct frame *f = XFRAME (w->frame);
+ struct tty_display_info *tty = FRAME_TTY (f);
+
+ if (/* If window is in the process of being destroyed, don't bother
+ to do anything. */
+ w->current_matrix != NULL
+ /* Recognize when we are called to operate on rows that don't exist
+ anymore. This can happen when a window is split. */
+ && mouse_face_end_row < w->current_matrix->nrows)
+ {
+ /* write_glyphs writes at cursor position, so we need to
+ temporarily move cursor coordinates to the beginning of
+ the highlight region. */
+
+ /* Save current cursor co-ordinates */
+ save_y = curY (tty);
+ save_x = curX (tty);
+
+ /* Note that mouse_face_beg_row etc. are window relative. */
+ for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++)
+ {
+ int start_hpos, end_hpos, nglyphs;
+ struct glyph_row *row = MATRIX_ROW (w->current_matrix, i);
+
+ /* Don't do anything if row doesn't have valid contents. */
+ if (!row->enabled_p)
+ continue;
+
+ /* For all but the first row, the highlight starts at column 0. */
+ if (i == mouse_face_beg_row)
+ start_hpos = mouse_face_beg_col;
+ else
+ start_hpos = 0;
+
+ if (i == mouse_face_end_row)
+ end_hpos = mouse_face_end_col;
+ else
+ {
+ end_hpos = row->used[TEXT_AREA];
+ if (draw == DRAW_NORMAL_TEXT)
+ row->fill_line_p = 1; /* Clear to end of line */
+ }
+
+ if (end_hpos <= start_hpos)
+ continue;
+ /* Record that some glyphs of this row are displayed in
+ mouse-face. */
+ row->mouse_face_p = draw > 0;
+
+ nglyphs = end_hpos - start_hpos;
+
+ if (end_hpos >= row->used[TEXT_AREA])
+ nglyphs = row->used[TEXT_AREA] - start_hpos;
+
+ pos_y = row->y + WINDOW_TOP_EDGE_Y (w);
+ pos_x = row->used[LEFT_MARGIN_AREA] + start_hpos
+ + WINDOW_LEFT_EDGE_X (w);
+
+ cursor_to (f, pos_y, pos_x);
+
+ if (draw == DRAW_MOUSE_FACE)
+ {
+ tty_write_glyphs_with_face (f, row->glyphs[TEXT_AREA] + start_hpos,
+ nglyphs, mouse_face_face_id);
+ }
+ else /* draw == DRAW_NORMAL_TEXT */
+ write_glyphs (f, row->glyphs[TEXT_AREA] + start_hpos, nglyphs);
+ }
+ cursor_to (f, save_y, save_x);
+ }
+}
+
+static void
+term_clear_mouse_face ()
+{
+ if (!NILP (mouse_face_window))
+ term_show_mouse_face (DRAW_NORMAL_TEXT);
+
+ mouse_face_beg_row = mouse_face_beg_col = -1;
+ mouse_face_end_row = mouse_face_end_col = -1;
+ mouse_face_window = Qnil;
+}
+
+/* Find the glyph matrix position of buffer position POS in window W.
+ *HPOS and *VPOS are set to the positions found. W's current glyphs
+ must be up to date. If POS is above window start return (0, 0).
+ If POS is after end of W, return end of last line in W.
+ - taken from msdos.c */
+static int
+fast_find_position (struct window *w, int pos, int *hpos, int *vpos)
+{
+ int i, lastcol, line_start_position, maybe_next_line_p = 0;
+ int yb = window_text_bottom_y (w);
+ struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0), *best_row = row;
+
+ while (row->y < yb)
+ {
+ if (row->used[TEXT_AREA])
+ line_start_position = row->glyphs[TEXT_AREA]->charpos;
+ else
+ line_start_position = 0;
+
+ if (line_start_position > pos)
+ break;
+ /* If the position sought is the end of the buffer,
+ don't include the blank lines at the bottom of the window. */
+ else if (line_start_position == pos
+ && pos == BUF_ZV (XBUFFER (w->buffer)))
+ {
+ maybe_next_line_p = 1;
+ break;
+ }
+ else if (line_start_position > 0)
+ best_row = row;
+
+ /* Don't overstep the last matrix row, lest we get into the
+ never-never land... */
+ if (row->y + 1 >= yb)
+ break;
+
+ ++row;
+ }
+
+ /* Find the right column within BEST_ROW. */
+ lastcol = 0;
+ row = best_row;
+ for (i = 0; i < row->used[TEXT_AREA]; i++)
+ {
+ struct glyph *glyph = row->glyphs[TEXT_AREA] + i;
+ int charpos;
+
+ charpos = glyph->charpos;
+ if (charpos == pos)
+ {
+ *hpos = i;
+ *vpos = row->y;
+ return 1;
+ }
+ else if (charpos > pos)
+ break;
+ else if (charpos > 0)
+ lastcol = i;
+ }
+
+ /* If we're looking for the end of the buffer,
+ and we didn't find it in the line we scanned,
+ use the start of the following line. */
+ if (maybe_next_line_p)
+ {
+ ++row;
+ lastcol = 0;
+ }
+
+ *vpos = row->y;
+ *hpos = lastcol + 1;
+ return 0;
+}
+
+static void
+term_mouse_highlight (struct frame *f, int x, int y)
+{
+ enum window_part part;
+ Lisp_Object window;
+ struct window *w;
+ struct buffer *b;
+
+ if (NILP (Vmouse_highlight)
+ || !f->glyphs_initialized_p)
+ return;
+
+ /* Which window is that in? */
+ window = window_from_coordinates (f, x, y, &part, &x, &y, 0);
+
+ /* Not on a window -> return. */
+ if (!WINDOWP (window))
+ return;
+
+ if (!EQ (window, mouse_face_window))
+ term_clear_mouse_face ();
+
+ w = XWINDOW (window);
+
+ /* Are we in a window whose display is up to date?
+ And verify the buffer's text has not changed. */
+ b = XBUFFER (w->buffer);
+ if (part == ON_TEXT
+ && EQ (w->window_end_valid, w->buffer)
+ && XFASTINT (w->last_modified) == BUF_MODIFF (b)
+ && XFASTINT (w->last_overlay_modified) == BUF_OVERLAY_MODIFF (b))
+ {
+ int pos, i, nrows = w->current_matrix->nrows;
+ struct glyph_row *row;
+ struct glyph *glyph;
+
+ /* Find the glyph under X/Y. */
+ glyph = NULL;
+ if (y >= 0 && y < nrows)
+ {
+ row = MATRIX_ROW (w->current_matrix, y);
+ /* Give up if some row before the one we are looking for is
+ not enabled. */
+ for (i = 0; i <= y; i++)
+ if (!MATRIX_ROW (w->current_matrix, i)->enabled_p)
+ break;
+ if (i > y /* all rows upto and including the one at Y are enabled */
+ && row->displays_text_p
+ && x < window_box_width (w, TEXT_AREA))
+ {
+ glyph = row->glyphs[TEXT_AREA];
+ if (x >= row->used[TEXT_AREA])
+ glyph = NULL;
+ else
+ {
+ glyph += x;
+ if (!BUFFERP (glyph->object))
+ glyph = NULL;
+ }
+ }
+ }
+
+ /* Clear mouse face if X/Y not over text. */
+ if (glyph == NULL)
+ {
+ term_clear_mouse_face ();
+ return;
+ }
+
+ if (!BUFFERP (glyph->object))
+ abort ();
+ pos = glyph->charpos;
+
+ /* Check for mouse-face. */
+ {
+ extern Lisp_Object Qmouse_face;
+ Lisp_Object mouse_face, overlay, position, *overlay_vec;
+ int noverlays, obegv, ozv;
+ struct buffer *obuf;
+
+ /* If we get an out-of-range value, return now; avoid an error. */
+ if (pos > BUF_Z (b))
+ return;
+
+ /* Make the window's buffer temporarily current for
+ overlays_at and compute_char_face. */
+ obuf = current_buffer;
+ current_buffer = b;
+ obegv = BEGV;
+ ozv = ZV;
+ BEGV = BEG;
+ ZV = Z;
+
+ /* Is this char mouse-active? */
+ XSETINT (position, pos);
+
+ /* Put all the overlays we want in a vector in overlay_vec. */
+ GET_OVERLAYS_AT (pos, overlay_vec, noverlays, NULL, 0);
+ /* Sort overlays into increasing priority order. */
+ noverlays = sort_overlays (overlay_vec, noverlays, w);
+
+ /* Check mouse-face highlighting. */
+ if (!(EQ (window, mouse_face_window)
+ && y >= mouse_face_beg_row
+ && y <= mouse_face_end_row
+ && (y > mouse_face_beg_row
+ || x >= mouse_face_beg_col)
+ && (y < mouse_face_end_row
+ || x < mouse_face_end_col
+ || mouse_face_past_end)))
+ {
+ /* Clear the display of the old active region, if any. */
+ term_clear_mouse_face ();
+
+ /* Find the highest priority overlay that has a mouse-face
+ property. */
+ overlay = Qnil;
+ for (i = noverlays - 1; i >= 0; --i)
+ {
+ mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face);
+ if (!NILP (mouse_face))
+ {
+ overlay = overlay_vec[i];
+ break;
+ }
+ }
+
+ /* If no overlay applies, get a text property. */
+ if (NILP (overlay))
+ mouse_face = Fget_text_property (position, Qmouse_face,
+ w->buffer);
+
+ /* Handle the overlay case. */
+ if (!NILP (overlay))
+ {
+ /* Find the range of text around this char that
+ should be active. */
+ Lisp_Object before, after;
+ int ignore;
+
+
+ before = Foverlay_start (overlay);
+ after = Foverlay_end (overlay);
+ /* Record this as the current active region. */
+ fast_find_position (w, XFASTINT (before),
+ &mouse_face_beg_col,
+ &mouse_face_beg_row);
+
+ mouse_face_past_end
+ = !fast_find_position (w, XFASTINT (after),
+ &mouse_face_end_col,
+ &mouse_face_end_row);
+ mouse_face_window = window;
+
+ mouse_face_face_id
+ = face_at_buffer_position (w, pos, 0, 0,
+ &ignore, pos + 1, 1);
+
+ /* Display it as active. */
+ term_show_mouse_face (DRAW_MOUSE_FACE);
+ }
+ /* Handle the text property case. */
+ else if (!NILP (mouse_face))
+ {
+ /* Find the range of text around this char that
+ should be active. */
+ Lisp_Object before, after, beginning, end;
+ int ignore;
+
+ beginning = Fmarker_position (w->start);
+ XSETINT (end, (BUF_Z (b) - XFASTINT (w->window_end_pos)));
+ before
+ = Fprevious_single_property_change (make_number (pos + 1),
+ Qmouse_face,
+ w->buffer, beginning);
+ after
+ = Fnext_single_property_change (position, Qmouse_face,
+ w->buffer, end);
+
+ /* Record this as the current active region. */
+ fast_find_position (w, XFASTINT (before),
+ &mouse_face_beg_col,
+ &mouse_face_beg_row);
+ mouse_face_past_end
+ = !fast_find_position (w, XFASTINT (after),
+ &mouse_face_end_col,
+ &mouse_face_end_row);
+ mouse_face_window = window;
+
+ mouse_face_face_id
+ = face_at_buffer_position (w, pos, 0, 0,
+ &ignore, pos + 1, 1);
+
+ /* Display it as active. */
+ term_show_mouse_face (DRAW_MOUSE_FACE);
+ }
+ }
+
+ /* Look for a `help-echo' property. */
+ {
+ Lisp_Object help;
+ extern Lisp_Object Qhelp_echo;
+
+ /* Check overlays first. */
+ help = Qnil;
+ for (i = noverlays - 1; i >= 0 && NILP (help); --i)
+ {
+ overlay = overlay_vec[i];
+ help = Foverlay_get (overlay, Qhelp_echo);
+ }
+
+ if (!NILP (help))
+ {
+ help_echo_string = help;
+ help_echo_window = window;
+ help_echo_object = overlay;
+ help_echo_pos = pos;
+ }
+ /* Try text properties. */
+ else if (NILP (help)
+ && ((STRINGP (glyph->object)
+ && glyph->charpos >= 0
+ && glyph->charpos < SCHARS (glyph->object))
+ || (BUFFERP (glyph->object)
+ && glyph->charpos >= BEGV
+ && glyph->charpos < ZV)))
+ {
+ help = Fget_text_property (make_number (glyph->charpos),
+ Qhelp_echo, glyph->object);
+ if (!NILP (help))
+ {
+ help_echo_string = help;
+ help_echo_window = window;
+ help_echo_object = glyph->object;
+ help_echo_pos = glyph->charpos;
+ }
+ }
+ }
+
+ BEGV = obegv;
+ ZV = ozv;
+ current_buffer = obuf;
+ }
+ }
+}
+
+static int
+term_mouse_movement (FRAME_PTR frame, Gpm_Event *event)
+{
+ /* Has the mouse moved off the glyph it was on at the last sighting? */
+ if (event->x != last_mouse_x || event->y != last_mouse_y)
+ {
+ frame->mouse_moved = 1;
+ term_mouse_highlight (frame, event->x, event->y);
+ /* Remember which glyph we're now on. */
+ last_mouse_x = event->x;
+ last_mouse_y = event->y;
+ return 1;
+ }
+ return 0;
+}
+
+/* Return the current position of the mouse.
+
+ Set *f to the frame the mouse is in, or zero if the mouse is in no
+ Emacs frame. If it is set to zero, all the other arguments are
+ garbage.
+
+ Set *bar_window to Qnil, and *x and *y to the column and
+ row of the character cell the mouse is over.
+
+ Set *time to the time the mouse was at the returned position.
+
+ This clears mouse_moved until the next motion
+ event arrives. */
+static void
+term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
+ enum scroll_bar_part *part, Lisp_Object *x,
+ Lisp_Object *y, unsigned long *time)
+{
+ struct timeval now;
+
+ *fp = SELECTED_FRAME ();
+ (*fp)->mouse_moved = 0;
+
+ *bar_window = Qnil;
+ *part = 0;
+
+ XSETINT (*x, last_mouse_x);
+ XSETINT (*y, last_mouse_y);
+ gettimeofday(&now, 0);
+ *time = (now.tv_sec * 1000) + (now.tv_usec / 1000);
+}
+
+/* Prepare a mouse-event in *RESULT for placement in the input queue.
+
+ If the event is a button press, then note that we have grabbed
+ the mouse. */
+
+static Lisp_Object
+term_mouse_click (struct input_event *result, Gpm_Event *event,
+ struct frame *f)
+{
+ struct timeval now;
+ int i, j;
+
+ result->kind = GPM_CLICK_EVENT;
+ for (i = 0, j = GPM_B_LEFT; i < 3; i++, j >>= 1 )
+ {
+ if (event->buttons & j) {
+ result->code = i; /* button number */
+ break;
+ }
+ }
+ gettimeofday(&now, 0);
+ result->timestamp = (now.tv_sec * 1000) + (now.tv_usec / 1000);
+
+ if (event->type & GPM_UP)
+ result->modifiers = up_modifier;
+ else if (event->type & GPM_DOWN)
+ result->modifiers = down_modifier;
+ else
+ result->modifiers = 0;
+
+ if (event->type & GPM_SINGLE)
+ result->modifiers |= click_modifier;
+
+ if (event->type & GPM_DOUBLE)
+ result->modifiers |= double_modifier;
+
+ if (event->type & GPM_TRIPLE)
+ result->modifiers |= triple_modifier;
+
+ if (event->type & GPM_DRAG)
+ result->modifiers |= drag_modifier;
+
+ if (!(event->type & (GPM_MOVE | GPM_DRAG))) {
+
+ /* 1 << KG_SHIFT */
+ if (event->modifiers & (1 << 0))
+ result->modifiers |= shift_modifier;
+
+ /* 1 << KG_CTRL */
+ if (event->modifiers & (1 << 2))
+ result->modifiers |= ctrl_modifier;
+
+ /* 1 << KG_ALT || KG_ALTGR */
+ if (event->modifiers & (1 << 3)
+ || event->modifiers & (1 << 1))
+ result->modifiers |= meta_modifier;
+ }
+
+ XSETINT (result->x, event->x);
+ XSETINT (result->y, event->y);
+ XSETFRAME (result->frame_or_window, f);
+ result->arg = Qnil;
+ return Qnil;
+}
+
+int
+handle_one_term_event (struct tty_display_info *tty, Gpm_Event *event, struct input_event* hold_quit)
+{
+ struct frame *f = XFRAME (tty->top_frame);
+ struct input_event ie;
+ int do_help = 0;
+ int count = 0;
+
+ EVENT_INIT (ie);
+ ie.kind = NO_EVENT;
+ ie.arg = Qnil;
+
+ if (event->type & (GPM_MOVE | GPM_DRAG)) {
+ previous_help_echo_string = help_echo_string;
+ help_echo_string = Qnil;
+
+ Gpm_DrawPointer (event->x, event->y, fileno (tty->output));
+
+ if (!term_mouse_movement (f, event))
+ help_echo_string = previous_help_echo_string;
+
+ /* If the contents of the global variable help_echo_string
+ has changed, generate a HELP_EVENT. */
+ if (!NILP (help_echo_string)
+ || !NILP (previous_help_echo_string))
+ do_help = 1;
+
+ goto done;
+ }
+ else {
+ f->mouse_moved = 0;
+ term_mouse_click (&ie, event, f);
+ }
+
+ done:
+ if (ie.kind != NO_EVENT)
+ {
+ kbd_buffer_store_event_hold (&ie, hold_quit);
+ count++;
+ }
+
+ if (do_help
+ && !(hold_quit && hold_quit->kind != NO_EVENT))
+ {
+ Lisp_Object frame;
+
+ if (f)
+ XSETFRAME (frame, f);
+ else
+ frame = Qnil;
+
+ gen_help_event (help_echo_string, frame, help_echo_window,
+ help_echo_object, help_echo_pos);
+ count++;
+ }
+
+ return count;
+}
+
+DEFUN ("gpm-mouse-start", Fgpm_mouse_start, Sgpm_mouse_start,
+ 0, 0, 0,
+ doc: /* Open a connection to Gpm.
+Gpm-mouse can only be activated for one tty at a time. */)
+ ()
+{
+ struct frame *f = SELECTED_FRAME ();
+ struct tty_display_info *tty
+ = ((f)->output_method == output_termcap
+ ? (f)->terminal->display_info.tty : NULL);
+ Gpm_Connect connection;
+
+ if (!tty)
+ error ("Gpm-mouse only works in the GNU/Linux console");
+ if (gpm_tty == tty)
+ return Qnil; /* Already activated, nothing to do. */
+ if (gpm_tty)
+ error ("Gpm-mouse can only be activated for one tty at a time");
+
+ connection.eventMask = ~0;
+ connection.defaultMask = ~GPM_HARD;
+ connection.maxMod = ~0;
+ connection.minMod = 0;
+ gpm_zerobased = 1;
+
+ if (Gpm_Open (&connection, 0) < 0)
+ error ("Gpm-mouse failed to connect to the gpm daemon");
+ else
+ {
+ gpm_tty = tty;
+ /* `init_sys_modes' arranges for mouse movements sent through gpm_fd
+ to generate SIGIOs. Apparently we need to call reset_sys_modes
+ before calling init_sys_modes. */
+ reset_sys_modes (tty);
+ init_sys_modes (tty);
+ add_gpm_wait_descriptor (gpm_fd);
+ return Qnil;
+ }
+}
+
+DEFUN ("gpm-mouse-stop", Fgpm_mouse_stop, Sgpm_mouse_stop,
+ 0, 0, 0,
+ doc: /* Close a connection to Gpm. */)
+ ()
+{
+ struct frame *f = SELECTED_FRAME ();
+ struct tty_display_info *tty
+ = ((f)->output_method == output_termcap
+ ? (f)->terminal->display_info.tty : NULL);
+
+ if (!tty || gpm_tty != tty)
+ return Qnil; /* Not activated on this terminal, nothing to do. */
+
+ if (gpm_fd >= 0)
+ delete_gpm_wait_descriptor (gpm_fd);
+ while (Gpm_Close()); /* close all the stack */
+ gpm_tty = NULL;
+ return Qnil;
+}
+#endif /* HAVE_GPM */
+
+
/***********************************************************************
Initialization
***********************************************************************/
+/* Initialize the tty-dependent part of frame F. The frame must
+ already have its device initialized. */
+
void
-term_init (terminal_type)
- char *terminal_type;
+create_tty_output (struct frame *f)
+{
+ struct tty_output *t;
+
+ if (! FRAME_TERMCAP_P (f))
+ abort ();
+
+ t = xmalloc (sizeof (struct tty_output));
+ bzero (t, sizeof (struct tty_output));
+
+ t->display_info = FRAME_TERMINAL (f)->display_info.tty;
+
+ f->output_data.tty = t;
+}
+
+/* Delete the tty-dependent part of frame F. */
+
+static void
+delete_tty_output (struct frame *f)
+{
+ if (! FRAME_TERMCAP_P (f))
+ abort ();
+
+ xfree (f->output_data.tty);
+}
+
+
+/* Reset the hooks in TERMINAL. */
+
+static void
+clear_tty_hooks (struct terminal *terminal)
+{
+ terminal->rif = 0;
+ terminal->cursor_to_hook = 0;
+ terminal->raw_cursor_to_hook = 0;
+ terminal->clear_to_end_hook = 0;
+ terminal->clear_frame_hook = 0;
+ terminal->clear_end_of_line_hook = 0;
+ terminal->ins_del_lines_hook = 0;
+ terminal->insert_glyphs_hook = 0;
+ terminal->write_glyphs_hook = 0;
+ terminal->delete_glyphs_hook = 0;
+ terminal->ring_bell_hook = 0;
+ terminal->reset_terminal_modes_hook = 0;
+ terminal->set_terminal_modes_hook = 0;
+ terminal->update_begin_hook = 0;
+ terminal->update_end_hook = 0;
+ terminal->set_terminal_window_hook = 0;
+ terminal->mouse_position_hook = 0;
+ terminal->frame_rehighlight_hook = 0;
+ terminal->frame_raise_lower_hook = 0;
+ terminal->fullscreen_hook = 0;
+ terminal->set_vertical_scroll_bar_hook = 0;
+ terminal->condemn_scroll_bars_hook = 0;
+ terminal->redeem_scroll_bar_hook = 0;
+ terminal->judge_scroll_bars_hook = 0;
+ terminal->read_socket_hook = 0;
+ terminal->frame_up_to_date_hook = 0;
+
+ /* Leave these two set, or suspended frames are not deleted
+ correctly. */
+ terminal->delete_frame_hook = &delete_tty_output;
+ terminal->delete_terminal_hook = &delete_tty;
+}
+
+/* Initialize hooks in TERMINAL with the values needed for a tty. */
+
+static void
+set_tty_hooks (struct terminal *terminal)
+{
+ terminal->rif = 0; /* ttys don't support window-based redisplay. */
+
+ terminal->cursor_to_hook = &tty_cursor_to;
+ terminal->raw_cursor_to_hook = &tty_raw_cursor_to;
+
+ terminal->clear_to_end_hook = &tty_clear_to_end;
+ terminal->clear_frame_hook = &tty_clear_frame;
+ terminal->clear_end_of_line_hook = &tty_clear_end_of_line;
+
+ terminal->ins_del_lines_hook = &tty_ins_del_lines;
+
+ terminal->insert_glyphs_hook = &tty_insert_glyphs;
+ terminal->write_glyphs_hook = &tty_write_glyphs;
+ terminal->delete_glyphs_hook = &tty_delete_glyphs;
+
+ terminal->ring_bell_hook = &tty_ring_bell;
+
+ terminal->reset_terminal_modes_hook = &tty_reset_terminal_modes;
+ terminal->set_terminal_modes_hook = &tty_set_terminal_modes;
+ terminal->update_begin_hook = 0; /* Not needed. */
+ terminal->update_end_hook = &tty_update_end;
+ terminal->set_terminal_window_hook = &tty_set_terminal_window;
+
+ terminal->mouse_position_hook = 0; /* Not needed. */
+ terminal->frame_rehighlight_hook = 0; /* Not needed. */
+ terminal->frame_raise_lower_hook = 0; /* Not needed. */
+
+ terminal->set_vertical_scroll_bar_hook = 0; /* Not needed. */
+ terminal->condemn_scroll_bars_hook = 0; /* Not needed. */
+ terminal->redeem_scroll_bar_hook = 0; /* Not needed. */
+ terminal->judge_scroll_bars_hook = 0; /* Not needed. */
+
+ terminal->read_socket_hook = &tty_read_avail_input; /* keyboard.c */
+ terminal->frame_up_to_date_hook = 0; /* Not needed. */
+
+ terminal->delete_frame_hook = &delete_tty_output;
+ terminal->delete_terminal_hook = &delete_tty;
+}
+
+/* Drop the controlling terminal if fd is the same device. */
+static void
+dissociate_if_controlling_tty (int fd)
+{
+#ifndef WINDOWSNT
+ int pgid;
+ EMACS_GET_TTY_PGRP (fd, &pgid); /* If tcgetpgrp succeeds, fd is the ctty. */
+ if (pgid != -1)
+ {
+#if defined (USG) && !defined (BSD_PGRPS)
+ setpgrp ();
+ no_controlling_tty = 1;
+#elif defined (CYGWIN)
+ setsid ();
+ no_controlling_tty = 1;
+#else
+#ifdef TIOCNOTTY /* Try BSD ioctls. */
+ sigblock (sigmask (SIGTTOU));
+ fd = emacs_open (DEV_TTY, O_RDWR, 0);
+ if (fd != -1 && ioctl (fd, TIOCNOTTY, 0) != -1)
+ {
+ no_controlling_tty = 1;
+ }
+ if (fd != -1)
+ emacs_close (fd);
+ sigunblock (sigmask (SIGTTOU));
+#else
+ /* Unknown system. */
+ croak ();
+#endif /* ! TIOCNOTTY */
+#endif /* ! USG */
+ }
+#endif /* !WINDOWSNT */
+}
+
+static void maybe_fatal();
+
+/* Create a termcap display on the tty device with the given name and
+ type.
+
+ If NAME is NULL, then use the controlling tty, i.e., "/dev/tty".
+ Otherwise NAME should be a path to the tty device file,
+ e.g. "/dev/pts/7".
+
+ TERMINAL_TYPE is the termcap type of the device, e.g. "vt100".
+
+ If MUST_SUCCEED is true, then all errors are fatal. */
+
+struct terminal *
+init_tty (char *name, char *terminal_type, int must_succeed)
{
- char *area;
+ char *area = NULL;
char **address = &area;
char *buffer = NULL;
int buffer_size = 4096;
- register char *p;
+ register char *p = NULL;
int status;
- struct frame *sf = XFRAME (selected_frame);
+ struct tty_display_info *tty = NULL;
+ struct terminal *terminal = NULL;
+ int ctty = 0; /* 1 if asked to open controlling tty. */
+
+ if (!terminal_type)
+ maybe_fatal (must_succeed, 0, 0,
+ "Unknown terminal type",
+ "Unknown terminal type");
+
+ if (name == NULL)
+ name = DEV_TTY;
+ if (!strcmp (name, DEV_TTY))
+ ctty = 1;
+
+ /* If we already have a terminal on the given device, use that. If
+ all such terminals are suspended, create a new one instead. */
+ /* XXX Perhaps this should be made explicit by having init_tty
+ always create a new terminal and separating terminal and frame
+ creation on Lisp level. */
+ terminal = get_named_tty (name);
+ if (terminal)
+ return terminal;
+
+ terminal = create_terminal ();
+ tty = (struct tty_display_info *) xmalloc (sizeof (struct tty_display_info));
+ bzero (tty, sizeof (struct tty_display_info));
+ tty->next = tty_list;
+ tty_list = tty;
+
+ terminal->type = output_termcap;
+ terminal->display_info.tty = tty;
+ tty->terminal = terminal;
+
+ tty->Wcm = (struct cm *) xmalloc (sizeof (struct cm));
+ Wcm_clear (tty);
+
+#ifndef WINDOWSNT
+ set_tty_hooks (terminal);
+
+ {
+ int fd;
+ FILE *file;
+
+#ifdef O_IGNORE_CTTY
+ if (!ctty)
+ /* Open the terminal device. Don't recognize it as our
+ controlling terminal, and don't make it the controlling tty
+ if we don't have one at the moment. */
+ fd = emacs_open (name, O_RDWR | O_IGNORE_CTTY | O_NOCTTY, 0);
+ else
+#else
+ /* Alas, O_IGNORE_CTTY is a GNU extension that seems to be only
+ defined on Hurd. On other systems, we need to explicitly
+ dissociate ourselves from the controlling tty when we want to
+ open a frame on the same terminal. */
+ fd = emacs_open (name, O_RDWR | O_NOCTTY, 0);
+#endif /* O_IGNORE_CTTY */
+
+ if (fd < 0)
+ maybe_fatal (must_succeed, buffer, terminal,
+ "Could not open file: %s",
+ "Could not open file: %s",
+ name);
+ if (!isatty (fd))
+ {
+ close (fd);
+ maybe_fatal (must_succeed, buffer, terminal,
+ "Not a tty device: %s",
+ "Not a tty device: %s",
+ name);
+ }
+
+#ifndef O_IGNORE_CTTY
+ if (!ctty)
+ dissociate_if_controlling_tty (fd);
+#endif
+
+ file = fdopen (fd, "w+");
+ tty->name = xstrdup (name);
+ terminal->name = xstrdup (name);
+ tty->input = file;
+ tty->output = file;
+ }
+
+ tty->type = xstrdup (terminal_type);
+
+ add_keyboard_wait_descriptor (fileno (tty->input));
+
+#endif
encode_terminal_bufsize = 0;
+#ifdef HAVE_GPM
+ terminal->mouse_position_hook = term_mouse_position;
+ mouse_face_window = Qnil;
+#endif
+
#ifdef WINDOWSNT
- initialize_w32_display ();
+ initialize_w32_display (terminal);
+ /* The following two are inaccessible from w32console.c. */
+ terminal->delete_frame_hook = &delete_tty_output;
+ terminal->delete_terminal_hook = &delete_tty;
- Wcm_clear ();
+ tty->name = xstrdup (name);
+ terminal->name = xstrdup (name);
+ tty->type = xstrdup (terminal_type);
- area = (char *) xmalloc (2044);
+ tty->output = stdout;
+ tty->input = stdin;
+ add_keyboard_wait_descriptor (0);
- FrameRows = FRAME_LINES (sf);
- FrameCols = FRAME_COLS (sf);
- specified_window = FRAME_LINES (sf);
+ Wcm_clear (tty);
- delete_in_insert_mode = 1;
+ {
+ struct frame *f = XFRAME (selected_frame);
- UseTabs = 0;
- scroll_region_ok = 0;
+ FrameRows (tty) = FRAME_LINES (f);
+ FrameCols (tty) = FRAME_COLS (f);
+ tty->specified_window = FRAME_LINES (f);
- /* Seems to insert lines when it's not supposed to, messing
- up the display. In doing a trace, it didn't seem to be
- called much, so I don't think we're losing anything by
- turning it off. */
+ FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
+ FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
+ }
+ tty->delete_in_insert_mode = 1;
- line_ins_del_ok = 0;
- char_ins_del_ok = 1;
+ UseTabs (tty) = 0;
+ terminal->scroll_region_ok = 0;
+
+ /* Seems to insert lines when it's not supposed to, messing up the
+ display. In doing a trace, it didn't seem to be called much, so I
+ don't think we're losing anything by turning it off. */
+ terminal->line_ins_del_ok = 0;
+ terminal->char_ins_del_ok = 1;
baud_rate = 19200;
- FRAME_CAN_HAVE_SCROLL_BARS (sf) = 0;
- FRAME_VERTICAL_SCROLL_BAR_TYPE (sf) = vertical_scroll_bar_none;
- TN_max_colors = 16; /* Required to be non-zero for tty-display-color-p */
+ tty->TN_max_colors = 16; /* Required to be non-zero for tty-display-color-p */
- return;
#else /* not WINDOWSNT */
- Wcm_clear ();
+ Wcm_clear (tty);
buffer = (char *) xmalloc (buffer_size);
+
+ /* On some systems, tgetent tries to access the controlling
+ terminal. */
+ sigblock (sigmask (SIGTTOU));
status = tgetent (buffer, terminal_type);
+ sigunblock (sigmask (SIGTTOU));
+
if (status < 0)
{
#ifdef TERMINFO
- fatal ("Cannot open terminfo database file");
+ maybe_fatal (must_succeed, buffer, terminal,
+ "Cannot open terminfo database file",
+ "Cannot open terminfo database file");
#else
- fatal ("Cannot open termcap database file");
+ maybe_fatal (must_succeed, buffer, terminal,
+ "Cannot open termcap database file",
+ "Cannot open termcap database file");
#endif
}
if (status == 0)
{
#ifdef TERMINFO
- fatal ("Terminal type %s is not defined.\n\
+ maybe_fatal (must_succeed, buffer, terminal,
+ "Terminal type %s is not defined",
+ "Terminal type %s is not defined.\n\
If that is not the actual type of terminal you have,\n\
use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
`setenv TERM ...') to specify the correct type. It may be necessary\n\
to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.",
- terminal_type);
+ terminal_type);
#else
- fatal ("Terminal type %s is not defined.\n\
+ maybe_fatal (must_succeed, buffer, terminal,
+ "Terminal type %s is not defined",
+ "Terminal type %s is not defined.\n\
If that is not the actual type of terminal you have,\n\
use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
`setenv TERM ...') to specify the correct type. It may be necessary\n\
to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
- terminal_type);
+ terminal_type);
#endif
}
@@ -2403,219 +3370,238 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
#endif
area = (char *) xmalloc (buffer_size);
- TS_ins_line = tgetstr ("al", address);
- TS_ins_multi_lines = tgetstr ("AL", address);
- TS_bell = tgetstr ("bl", address);
- BackTab = tgetstr ("bt", address);
- TS_clr_to_bottom = tgetstr ("cd", address);
- TS_clr_line = tgetstr ("ce", address);
- TS_clr_frame = tgetstr ("cl", address);
- ColPosition = NULL; /* tgetstr ("ch", address); */
- AbsPosition = tgetstr ("cm", address);
- CR = tgetstr ("cr", address);
- TS_set_scroll_region = tgetstr ("cs", address);
- TS_set_scroll_region_1 = tgetstr ("cS", address);
- RowPosition = tgetstr ("cv", address);
- TS_del_char = tgetstr ("dc", address);
- TS_del_multi_chars = tgetstr ("DC", address);
- TS_del_line = tgetstr ("dl", address);
- TS_del_multi_lines = tgetstr ("DL", address);
- TS_delete_mode = tgetstr ("dm", address);
- TS_end_delete_mode = tgetstr ("ed", address);
- TS_end_insert_mode = tgetstr ("ei", address);
- Home = tgetstr ("ho", address);
- TS_ins_char = tgetstr ("ic", address);
- TS_ins_multi_chars = tgetstr ("IC", address);
- TS_insert_mode = tgetstr ("im", address);
- TS_pad_inserted_char = tgetstr ("ip", address);
- TS_end_keypad_mode = tgetstr ("ke", address);
- TS_keypad_mode = tgetstr ("ks", address);
- LastLine = tgetstr ("ll", address);
- Right = tgetstr ("nd", address);
- Down = tgetstr ("do", address);
- if (!Down)
- Down = tgetstr ("nl", address); /* Obsolete name for "do" */
+ tty->TS_ins_line = tgetstr ("al", address);
+ tty->TS_ins_multi_lines = tgetstr ("AL", address);
+ tty->TS_bell = tgetstr ("bl", address);
+ BackTab (tty) = tgetstr ("bt", address);
+ tty->TS_clr_to_bottom = tgetstr ("cd", address);
+ tty->TS_clr_line = tgetstr ("ce", address);
+ tty->TS_clr_frame = tgetstr ("cl", address);
+ ColPosition (tty) = NULL; /* tgetstr ("ch", address); */
+ AbsPosition (tty) = tgetstr ("cm", address);
+ CR (tty) = tgetstr ("cr", address);
+ tty->TS_set_scroll_region = tgetstr ("cs", address);
+ tty->TS_set_scroll_region_1 = tgetstr ("cS", address);
+ RowPosition (tty) = tgetstr ("cv", address);
+ tty->TS_del_char = tgetstr ("dc", address);
+ tty->TS_del_multi_chars = tgetstr ("DC", address);
+ tty->TS_del_line = tgetstr ("dl", address);
+ tty->TS_del_multi_lines = tgetstr ("DL", address);
+ tty->TS_delete_mode = tgetstr ("dm", address);
+ tty->TS_end_delete_mode = tgetstr ("ed", address);
+ tty->TS_end_insert_mode = tgetstr ("ei", address);
+ Home (tty) = tgetstr ("ho", address);
+ tty->TS_ins_char = tgetstr ("ic", address);
+ tty->TS_ins_multi_chars = tgetstr ("IC", address);
+ tty->TS_insert_mode = tgetstr ("im", address);
+ tty->TS_pad_inserted_char = tgetstr ("ip", address);
+ tty->TS_end_keypad_mode = tgetstr ("ke", address);
+ tty->TS_keypad_mode = tgetstr ("ks", address);
+ LastLine (tty) = tgetstr ("ll", address);
+ Right (tty) = tgetstr ("nd", address);
+ Down (tty) = tgetstr ("do", address);
+ if (!Down (tty))
+ Down (tty) = tgetstr ("nl", address); /* Obsolete name for "do" */
#ifdef VMS
/* VMS puts a carriage return before each linefeed,
so it is not safe to use linefeeds. */
- if (Down && Down[0] == '\n' && Down[1] == '\0')
- Down = 0;
+ if (Down (tty) && Down (tty)[0] == '\n' && Down (tty)[1] == '\0')
+ Down (tty) = 0;
#endif /* VMS */
if (tgetflag ("bs"))
- Left = "\b"; /* can't possibly be longer! */
+ Left (tty) = "\b"; /* can't possibly be longer! */
else /* (Actually, "bs" is obsolete...) */
- Left = tgetstr ("le", address);
- if (!Left)
- Left = tgetstr ("bc", address); /* Obsolete name for "le" */
- TS_pad_char = tgetstr ("pc", address);
- TS_repeat = tgetstr ("rp", address);
- TS_end_standout_mode = tgetstr ("se", address);
- TS_fwd_scroll = tgetstr ("sf", address);
- TS_standout_mode = tgetstr ("so", address);
- TS_rev_scroll = tgetstr ("sr", address);
- Wcm.cm_tab = tgetstr ("ta", address);
- TS_end_termcap_modes = tgetstr ("te", address);
- TS_termcap_modes = tgetstr ("ti", address);
- Up = tgetstr ("up", address);
- TS_visible_bell = tgetstr ("vb", address);
- TS_cursor_normal = tgetstr ("ve", address);
- TS_cursor_visible = tgetstr ("vs", address);
- TS_cursor_invisible = tgetstr ("vi", address);
- TS_set_window = tgetstr ("wi", address);
-
- TS_enter_underline_mode = tgetstr ("us", address);
- TS_exit_underline_mode = tgetstr ("ue", address);
- TS_enter_bold_mode = tgetstr ("md", address);
- TS_enter_dim_mode = tgetstr ("mh", address);
- TS_enter_blink_mode = tgetstr ("mb", address);
- TS_enter_reverse_mode = tgetstr ("mr", address);
- TS_enter_alt_charset_mode = tgetstr ("as", address);
- TS_exit_alt_charset_mode = tgetstr ("ae", address);
- TS_exit_attribute_mode = tgetstr ("me", address);
-
- MultiUp = tgetstr ("UP", address);
- MultiDown = tgetstr ("DO", address);
- MultiLeft = tgetstr ("LE", address);
- MultiRight = tgetstr ("RI", address);
+ Left (tty) = tgetstr ("le", address);
+ if (!Left (tty))
+ Left (tty) = tgetstr ("bc", address); /* Obsolete name for "le" */
+ tty->TS_pad_char = tgetstr ("pc", address);
+ tty->TS_repeat = tgetstr ("rp", address);
+ tty->TS_end_standout_mode = tgetstr ("se", address);
+ tty->TS_fwd_scroll = tgetstr ("sf", address);
+ tty->TS_standout_mode = tgetstr ("so", address);
+ tty->TS_rev_scroll = tgetstr ("sr", address);
+ tty->Wcm->cm_tab = tgetstr ("ta", address);
+ tty->TS_end_termcap_modes = tgetstr ("te", address);
+ tty->TS_termcap_modes = tgetstr ("ti", address);
+ Up (tty) = tgetstr ("up", address);
+ tty->TS_visible_bell = tgetstr ("vb", address);
+ tty->TS_cursor_normal = tgetstr ("ve", address);
+ tty->TS_cursor_visible = tgetstr ("vs", address);
+ tty->TS_cursor_invisible = tgetstr ("vi", address);
+ tty->TS_set_window = tgetstr ("wi", address);
+
+ tty->TS_enter_underline_mode = tgetstr ("us", address);
+ tty->TS_exit_underline_mode = tgetstr ("ue", address);
+ tty->TS_enter_bold_mode = tgetstr ("md", address);
+ tty->TS_enter_dim_mode = tgetstr ("mh", address);
+ tty->TS_enter_blink_mode = tgetstr ("mb", address);
+ tty->TS_enter_reverse_mode = tgetstr ("mr", address);
+ tty->TS_enter_alt_charset_mode = tgetstr ("as", address);
+ tty->TS_exit_alt_charset_mode = tgetstr ("ae", address);
+ tty->TS_exit_attribute_mode = tgetstr ("me", address);
+
+ MultiUp (tty) = tgetstr ("UP", address);
+ MultiDown (tty) = tgetstr ("DO", address);
+ MultiLeft (tty) = tgetstr ("LE", address);
+ MultiRight (tty) = tgetstr ("RI", address);
/* SVr4/ANSI color suppert. If "op" isn't available, don't support
color because we can't switch back to the default foreground and
background. */
- TS_orig_pair = tgetstr ("op", address);
- if (TS_orig_pair)
+ tty->TS_orig_pair = tgetstr ("op", address);
+ if (tty->TS_orig_pair)
{
- TS_set_foreground = tgetstr ("AF", address);
- TS_set_background = tgetstr ("AB", address);
- if (!TS_set_foreground)
+ tty->TS_set_foreground = tgetstr ("AF", address);
+ tty->TS_set_background = tgetstr ("AB", address);
+ if (!tty->TS_set_foreground)
{
/* SVr4. */
- TS_set_foreground = tgetstr ("Sf", address);
- TS_set_background = tgetstr ("Sb", address);
+ tty->TS_set_foreground = tgetstr ("Sf", address);
+ tty->TS_set_background = tgetstr ("Sb", address);
}
- TN_max_colors = tgetnum ("Co");
- TN_max_pairs = tgetnum ("pa");
+ tty->TN_max_colors = tgetnum ("Co");
+ tty->TN_max_pairs = tgetnum ("pa");
- TN_no_color_video = tgetnum ("NC");
- if (TN_no_color_video == -1)
- TN_no_color_video = 0;
+ tty->TN_no_color_video = tgetnum ("NC");
+ if (tty->TN_no_color_video == -1)
+ tty->TN_no_color_video = 0;
}
- tty_default_color_capabilities (1);
+ tty_default_color_capabilities (tty, 1);
- MagicWrap = tgetflag ("xn");
+ MagicWrap (tty) = tgetflag ("xn");
/* Since we make MagicWrap terminals look like AutoWrap, we need to have
the former flag imply the latter. */
- AutoWrap = MagicWrap || tgetflag ("am");
- memory_below_frame = tgetflag ("db");
- TF_hazeltine = tgetflag ("hz");
- must_write_spaces = tgetflag ("in");
- meta_key = tgetflag ("km") || tgetflag ("MT");
- TF_insmode_motion = tgetflag ("mi");
- TF_standout_motion = tgetflag ("ms");
- TF_underscore = tgetflag ("ul");
- TF_teleray = tgetflag ("xt");
-
- term_get_fkeys (address);
+ AutoWrap (tty) = MagicWrap (tty) || tgetflag ("am");
+ terminal->memory_below_frame = tgetflag ("db");
+ tty->TF_hazeltine = tgetflag ("hz");
+ terminal->must_write_spaces = tgetflag ("in");
+ tty->meta_key = tgetflag ("km") || tgetflag ("MT");
+ tty->TF_insmode_motion = tgetflag ("mi");
+ tty->TF_standout_motion = tgetflag ("ms");
+ tty->TF_underscore = tgetflag ("ul");
+ tty->TF_teleray = tgetflag ("xt");
+
+#endif /* !WINDOWSNT */
+#ifdef MULTI_KBOARD
+ terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
+ init_kboard (terminal->kboard);
+ terminal->kboard->Vwindow_system = Qnil;
+ terminal->kboard->next_kboard = all_kboards;
+ all_kboards = terminal->kboard;
+ terminal->kboard->reference_count++;
+ /* Don't let the initial kboard remain current longer than necessary.
+ That would cause problems if a file loaded on startup tries to
+ prompt in the mini-buffer. */
+ if (current_kboard == initial_kboard)
+ current_kboard = terminal->kboard;
+#ifndef WINDOWSNT
+ term_get_fkeys (address, terminal->kboard);
+#endif
+#endif
+#ifndef WINDOWSNT
/* Get frame size from system, or else from termcap. */
{
int height, width;
- get_frame_size (&width, &height);
- FRAME_COLS (sf) = width;
- FRAME_LINES (sf) = height;
+ get_tty_size (fileno (tty->input), &width, &height);
+ FrameCols (tty) = width;
+ FrameRows (tty) = height;
}
- if (FRAME_COLS (sf) <= 0)
- SET_FRAME_COLS (sf, tgetnum ("co"));
- else
- /* Keep width and external_width consistent */
- SET_FRAME_COLS (sf, FRAME_COLS (sf));
- if (FRAME_LINES (sf) <= 0)
- FRAME_LINES (sf) = tgetnum ("li");
+ if (FrameCols (tty) <= 0)
+ FrameCols (tty) = tgetnum ("co");
+ if (FrameRows (tty) <= 0)
+ FrameRows (tty) = tgetnum ("li");
+
+ if (FrameRows (tty) < 3 || FrameCols (tty) < 3)
+ maybe_fatal (must_succeed, NULL, terminal,
+ "Screen size %dx%d is too small"
+ "Screen size %dx%d is too small",
+ FrameCols (tty), FrameRows (tty));
- if (FRAME_LINES (sf) < 3 || FRAME_COLS (sf) < 3)
- fatal ("Screen size %dx%d is too small",
- FRAME_LINES (sf), FRAME_COLS (sf));
+#if 0 /* This is not used anywhere. */
+ tty->terminal->min_padding_speed = tgetnum ("pb");
+#endif
- min_padding_speed = tgetnum ("pb");
- TabWidth = tgetnum ("tw");
+ TabWidth (tty) = tgetnum ("tw");
#ifdef VMS
/* These capabilities commonly use ^J.
I don't know why, but sending them on VMS does not work;
it causes following spaces to be lost, sometimes.
For now, the simplest fix is to avoid using these capabilities ever. */
- if (Down && Down[0] == '\n')
- Down = 0;
+ if (Down (tty) && Down (tty)[0] == '\n')
+ Down (tty) = 0;
#endif /* VMS */
- if (!TS_bell)
- TS_bell = "\07";
+ if (!tty->TS_bell)
+ tty->TS_bell = "\07";
- if (!TS_fwd_scroll)
- TS_fwd_scroll = Down;
+ if (!tty->TS_fwd_scroll)
+ tty->TS_fwd_scroll = Down (tty);
- PC = TS_pad_char ? *TS_pad_char : 0;
+ PC = tty->TS_pad_char ? *tty->TS_pad_char : 0;
- if (TabWidth < 0)
- TabWidth = 8;
+ if (TabWidth (tty) < 0)
+ TabWidth (tty) = 8;
/* Turned off since /etc/termcap seems to have :ta= for most terminals
and newer termcap doc does not seem to say there is a default.
- if (!Wcm.cm_tab)
- Wcm.cm_tab = "\t";
+ if (!tty->Wcm->cm_tab)
+ tty->Wcm->cm_tab = "\t";
*/
/* We don't support standout modes that use `magic cookies', so
turn off any that do. */
- if (TS_standout_mode && tgetnum ("sg") >= 0)
+ if (tty->TS_standout_mode && tgetnum ("sg") >= 0)
{
- TS_standout_mode = 0;
- TS_end_standout_mode = 0;
+ tty->TS_standout_mode = 0;
+ tty->TS_end_standout_mode = 0;
}
- if (TS_enter_underline_mode && tgetnum ("ug") >= 0)
+ if (tty->TS_enter_underline_mode && tgetnum ("ug") >= 0)
{
- TS_enter_underline_mode = 0;
- TS_exit_underline_mode = 0;
+ tty->TS_enter_underline_mode = 0;
+ tty->TS_exit_underline_mode = 0;
}
/* If there's no standout mode, try to use underlining instead. */
- if (TS_standout_mode == 0)
+ if (tty->TS_standout_mode == 0)
{
- TS_standout_mode = TS_enter_underline_mode;
- TS_end_standout_mode = TS_exit_underline_mode;
+ tty->TS_standout_mode = tty->TS_enter_underline_mode;
+ tty->TS_end_standout_mode = tty->TS_exit_underline_mode;
}
/* If no `se' string, try using a `me' string instead.
If that fails, we can't use standout mode at all. */
- if (TS_end_standout_mode == 0)
+ if (tty->TS_end_standout_mode == 0)
{
char *s = tgetstr ("me", address);
if (s != 0)
- TS_end_standout_mode = s;
+ tty->TS_end_standout_mode = s;
else
- TS_standout_mode = 0;
+ tty->TS_standout_mode = 0;
}
- if (TF_teleray)
+ if (tty->TF_teleray)
{
- Wcm.cm_tab = 0;
+ tty->Wcm->cm_tab = 0;
/* We can't support standout mode, because it uses magic cookies. */
- TS_standout_mode = 0;
+ tty->TS_standout_mode = 0;
/* But that means we cannot rely on ^M to go to column zero! */
- CR = 0;
+ CR (tty) = 0;
/* LF can't be trusted either -- can alter hpos */
/* if move at column 0 thru a line with TS_standout_mode */
- Down = 0;
+ Down (tty) = 0;
}
/* Special handling for certain terminal types known to need it */
if (!strcmp (terminal_type, "supdup"))
{
- memory_below_frame = 1;
- Wcm.cm_losewrap = 1;
+ terminal->memory_below_frame = 1;
+ tty->Wcm->cm_losewrap = 1;
}
if (!strncmp (terminal_type, "c10", 3)
|| !strcmp (terminal_type, "perq"))
@@ -2632,102 +3618,140 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
It would be simpler if the :wi string could go in the termcap
entry, but it can't because it is not fully valid.
If it were in the termcap entry, it would confuse other programs. */
- if (!TS_set_window)
+ if (!tty->TS_set_window)
{
- p = TS_termcap_modes;
+ p = tty->TS_termcap_modes;
while (*p && strcmp (p, "\033v "))
p++;
if (*p)
- TS_set_window = "\033v%C %C %C %C ";
+ tty->TS_set_window = "\033v%C %C %C %C ";
}
/* Termcap entry often fails to have :in: flag */
- must_write_spaces = 1;
+ terminal->must_write_spaces = 1;
/* :ti string typically fails to have \E^G! in it */
/* This limits scope of insert-char to one line. */
- strcpy (area, TS_termcap_modes);
+ strcpy (area, tty->TS_termcap_modes);
strcat (area, "\033\007!");
- TS_termcap_modes = area;
+ tty->TS_termcap_modes = area;
area += strlen (area) + 1;
- p = AbsPosition;
+ p = AbsPosition (tty);
/* Change all %+ parameters to %C, to handle
- values above 96 correctly for the C100. */
+ values above 96 correctly for the C100. */
while (*p)
- {
- if (p[0] == '%' && p[1] == '+')
- p[1] = 'C';
- p++;
- }
+ {
+ if (p[0] == '%' && p[1] == '+')
+ p[1] = 'C';
+ p++;
+ }
}
- FrameRows = FRAME_LINES (sf);
- FrameCols = FRAME_COLS (sf);
- specified_window = FRAME_LINES (sf);
+ tty->specified_window = FrameRows (tty);
- if (Wcm_init () == -1) /* can't do cursor motion */
+ if (Wcm_init (tty) == -1) /* can't do cursor motion */
+ {
+ maybe_fatal (must_succeed, NULL, terminal,
+ "Terminal type \"%s\" is not powerful enough to run Emacs",
#ifdef VMS
- fatal ("Terminal type \"%s\" is not powerful enough to run Emacs.\n\
+ "Terminal type \"%s\" is not powerful enough to run Emacs.\n\
It lacks the ability to position the cursor.\n\
If that is not the actual type of terminal you have, use either the\n\
DCL command `SET TERMINAL/DEVICE= ...' for DEC-compatible terminals,\n\
or `define EMACS_TERM \"terminal type\"' for non-DEC terminals.",
- terminal_type);
#else /* not VMS */
# ifdef TERMINFO
- fatal ("Terminal type \"%s\" is not powerful enough to run Emacs.\n\
+ "Terminal type \"%s\" is not powerful enough to run Emacs.\n\
It lacks the ability to position the cursor.\n\
If that is not the actual type of terminal you have,\n\
use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
`setenv TERM ...') to specify the correct type. It may be necessary\n\
to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.",
- terminal_type);
# else /* TERMCAP */
- fatal ("Terminal type \"%s\" is not powerful enough to run Emacs.\n\
+ "Terminal type \"%s\" is not powerful enough to run Emacs.\n\
It lacks the ability to position the cursor.\n\
If that is not the actual type of terminal you have,\n\
use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
`setenv TERM ...') to specify the correct type. It may be necessary\n\
to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
- terminal_type);
# endif /* TERMINFO */
#endif /*VMS */
- if (FRAME_LINES (sf) <= 0
- || FRAME_COLS (sf) <= 0)
- fatal ("The frame size has not been specified");
+ terminal_type);
+ }
- delete_in_insert_mode
- = TS_delete_mode && TS_insert_mode
- && !strcmp (TS_delete_mode, TS_insert_mode);
+ if (FrameRows (tty) <= 0 || FrameCols (tty) <= 0)
+ maybe_fatal (must_succeed, NULL, terminal,
+ "Could not determine the frame size",
+ "Could not determine the frame size");
- se_is_so = (TS_standout_mode
- && TS_end_standout_mode
- && !strcmp (TS_standout_mode, TS_end_standout_mode));
+ tty->delete_in_insert_mode
+ = tty->TS_delete_mode && tty->TS_insert_mode
+ && !strcmp (tty->TS_delete_mode, tty->TS_insert_mode);
- UseTabs = tabs_safe_p () && TabWidth == 8;
+ tty->se_is_so = (tty->TS_standout_mode
+ && tty->TS_end_standout_mode
+ && !strcmp (tty->TS_standout_mode, tty->TS_end_standout_mode));
- scroll_region_ok
- = (Wcm.cm_abs
- && (TS_set_window || TS_set_scroll_region || TS_set_scroll_region_1));
+ UseTabs (tty) = tabs_safe_p (fileno (tty->input)) && TabWidth (tty) == 8;
- line_ins_del_ok = (((TS_ins_line || TS_ins_multi_lines)
- && (TS_del_line || TS_del_multi_lines))
- || (scroll_region_ok && TS_fwd_scroll && TS_rev_scroll));
+ terminal->scroll_region_ok
+ = (tty->Wcm->cm_abs
+ && (tty->TS_set_window || tty->TS_set_scroll_region || tty->TS_set_scroll_region_1));
- char_ins_del_ok = ((TS_ins_char || TS_insert_mode
- || TS_pad_inserted_char || TS_ins_multi_chars)
- && (TS_del_char || TS_del_multi_chars));
+ terminal->line_ins_del_ok
+ = (((tty->TS_ins_line || tty->TS_ins_multi_lines)
+ && (tty->TS_del_line || tty->TS_del_multi_lines))
+ || (terminal->scroll_region_ok
+ && tty->TS_fwd_scroll && tty->TS_rev_scroll));
+
+ terminal->char_ins_del_ok
+ = ((tty->TS_ins_char || tty->TS_insert_mode
+ || tty->TS_pad_inserted_char || tty->TS_ins_multi_chars)
+ && (tty->TS_del_char || tty->TS_del_multi_chars));
+
+ terminal->fast_clear_end_of_line = tty->TS_clr_line != 0;
+
+ init_baud_rate (fileno (tty->input));
+
+#ifdef AIXHFT
+ /* The HFT system on AIX doesn't optimize for scrolling, so it's
+ really ugly at times. */
+ terminal->line_ins_del_ok = 0;
+ terminal->char_ins_del_ok = 0;
+#endif
- fast_clear_end_of_line = TS_clr_line != 0;
+ /* Don't do this. I think termcap may still need the buffer. */
+ /* xfree (buffer); */
- init_baud_rate ();
- if (read_socket_hook) /* Baudrate is somewhat */
- /* meaningless in this case */
- baud_rate = 9600;
+#endif /* not WINDOWSNT */
- FRAME_CAN_HAVE_SCROLL_BARS (sf) = 0;
- FRAME_VERTICAL_SCROLL_BAR_TYPE (sf) = vertical_scroll_bar_none;
-#endif /* WINDOWSNT */
+ /* Init system terminal modes (RAW or CBREAK, etc.). */
+ init_sys_modes (tty);
- xfree (buffer);
+ return terminal;
+}
+
+/* Auxiliary error-handling function for init_tty.
+ Free BUFFER and delete TERMINAL, then call error or fatal
+ with str1 or str2, respectively, according to MUST_SUCCEED. */
+
+static void
+maybe_fatal (must_succeed, buffer, terminal, str1, str2, arg1, arg2)
+ int must_succeed;
+ char *buffer;
+ struct terminal *terminal;
+ char *str1, *str2, *arg1, *arg2;
+{
+ if (buffer)
+ xfree (buffer);
+
+ if (terminal)
+ delete_tty (terminal);
+
+ if (must_succeed)
+ fatal (str2, arg1, arg2);
+ else
+ error (str1, arg1, arg2);
+
+ abort ();
}
/* VARARGS 1 */
@@ -2742,16 +3766,105 @@ fatal (str, arg1, arg2)
exit (1);
}
-DEFUN ("tty-no-underline", Ftty_no_underline, Stty_no_underline, 0, 0, 0,
- doc: /* Declare that this terminal does not handle underlining.
-This is used to override the terminfo data, for certain terminals that
-do not really do underlining, but say that they do. */)
- ()
+
+
+/* Delete the given tty terminal, closing all frames on it. */
+
+static void
+delete_tty (struct terminal *terminal)
{
- TS_enter_underline_mode = 0;
- return Qnil;
+ struct tty_display_info *tty;
+ Lisp_Object tail, frame;
+ int last_terminal;
+
+ /* Protect against recursive calls. Fdelete_frame in
+ delete_terminal calls us back when it deletes our last frame. */
+ if (!terminal->name)
+ return;
+
+ if (terminal->type != output_termcap)
+ abort ();
+
+ tty = terminal->display_info.tty;
+
+ last_terminal = 1;
+ FOR_EACH_FRAME (tail, frame)
+ {
+ struct frame *f = XFRAME (frame);
+ if (FRAME_LIVE_P (f) && (!FRAME_TERMCAP_P (f) || FRAME_TTY (f) != tty))
+ {
+ last_terminal = 0;
+ break;
+ }
+ }
+ if (last_terminal)
+ error ("Attempt to delete the sole terminal device with live frames");
+
+ if (tty == tty_list)
+ tty_list = tty->next;
+ else
+ {
+ struct tty_display_info *p;
+ for (p = tty_list; p && p->next != tty; p = p->next)
+ ;
+
+ if (! p)
+ /* This should not happen. */
+ abort ();
+
+ p->next = tty->next;
+ tty->next = 0;
+ }
+
+ /* reset_sys_modes needs a valid device, so this call needs to be
+ before delete_terminal. */
+ reset_sys_modes (tty);
+
+ delete_terminal (terminal);
+
+ if (tty->name)
+ xfree (tty->name);
+
+ if (tty->type)
+ xfree (tty->type);
+
+ if (tty->input)
+ {
+ delete_keyboard_wait_descriptor (fileno (tty->input));
+ if (tty->input != stdin)
+ fclose (tty->input);
+ }
+ if (tty->output && tty->output != stdout && tty->output != tty->input)
+ fclose (tty->output);
+ if (tty->termscript)
+ fclose (tty->termscript);
+
+ if (tty->old_tty)
+ xfree (tty->old_tty);
+
+ if (tty->Wcm)
+ xfree (tty->Wcm);
+
+ bzero (tty, sizeof (struct tty_display_info));
+ xfree (tty);
}
+
+
+/* Mark the pointers in the tty_display_info objects.
+ Called by the Fgarbage_collector. */
+
+void
+mark_ttys (void)
+{
+ struct tty_display_info *tty;
+
+ for (tty = tty_list; tty; tty = tty->next)
+ mark_object (tty->top_frame);
+}
+
+
+
void
syms_of_term ()
{
@@ -2764,10 +3877,18 @@ This variable can be used by terminal emulator packages. */);
system_uses_terminfo = 0;
#endif
- DEFVAR_LISP ("ring-bell-function", &Vring_bell_function,
- doc: /* Non-nil means call this function to ring the bell.
-The function should accept no arguments. */);
- Vring_bell_function = Qnil;
+ DEFVAR_LISP ("suspend-tty-functions", &Vsuspend_tty_functions,
+ doc: /* Functions to be run after suspending a tty.
+The functions are run with one argument, the terminal id to be suspended.
+See `suspend-tty'. */);
+ Vsuspend_tty_functions = Qnil;
+
+
+ DEFVAR_LISP ("resume-tty-functions", &Vresume_tty_functions,
+ doc: /* Functions to be run after resuming a tty.
+The functions are run with one argument, the terminal id that was revived.
+See `resume-tty'. */);
+ Vresume_tty_functions = Qnil;
DEFVAR_BOOL ("visible-cursor", &visible_cursor,
doc: /* Non-nil means to make the cursor very visible.
@@ -2779,9 +3900,19 @@ bigger, or it may make it blink, or it may do nothing at all. */);
defsubr (&Stty_display_color_p);
defsubr (&Stty_display_color_cells);
defsubr (&Stty_no_underline);
-
- fullscreen_hook = NULL;
+ defsubr (&Stty_type);
+ defsubr (&Scontrolling_tty_p);
+ defsubr (&Ssuspend_tty);
+ defsubr (&Sresume_tty);
+#ifdef HAVE_GPM
+ defsubr (&Sgpm_mouse_start);
+ defsubr (&Sgpm_mouse_stop);
+
+ staticpro (&mouse_face_window);
+#endif /* HAVE_GPM */
}
+
+
/* arch-tag: 498e7449-6f2e-45e2-91dd-b7d4ca488193
(do not change this comment) */
diff --git a/src/termchar.h b/src/termchar.h
index c4bf2adb0bd..381210fd658 100644
--- a/src/termchar.h
+++ b/src/termchar.h
@@ -19,32 +19,185 @@ 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. */
+/* Each termcap frame points to its own struct tty_output object in
+ the output_data.tty field. The tty_output structure contains the
+ information that is specific to termcap frames. */
-/* extern EMACS_INT baud_rate; */ /* Output speed in baud */
-extern int must_write_spaces; /* Nonzero means spaces in the text
- must actually be output; can't just skip
- over some columns to leave them blank. */
-extern int min_padding_speed; /* Speed below which no padding necessary */
-extern int fast_clear_end_of_line; /* Nonzero means terminal has
- command for this */
-
-extern int line_ins_del_ok; /* Terminal can insert and delete lines */
-extern int char_ins_del_ok; /* Terminal can insert and delete chars */
-extern int scroll_region_ok; /* Terminal supports setting the scroll
- window */
-extern int scroll_region_cost; /* Cost of setting the scroll window,
- measured in characters */
-extern int memory_below_frame; /* Terminal remembers lines scrolled
- off bottom */
-extern int fast_clear_end_of_line; /* Terminal has a `ce' string */
-
-extern int dont_calculate_costs; /* Nonzero means don't bother computing
- various cost tables; we won't use them. */
-
-/* Nonzero means no need to redraw the entire frame on resuming
- a suspended Emacs. This is useful on terminals with multiple pages,
- where one page is used for Emacs and another for all else. */
-extern int no_redraw_on_reenter;
+struct tty_output
+{
+ /* The Emacs structure for the tty device this frame is on. */
+ struct tty_display_info *display_info;
+
+ /* There is nothing else here at the moment... */
+};
+
+/* Parameters that are shared between frames on the same tty device. */
+
+struct tty_display_info
+{
+ struct tty_display_info *next; /* Chain of all tty devices. */
+
+ char *name; /* The name of the device file or 0 if
+ stdin/stdout. */
+ char *type; /* The type of the tty. */
+
+ /* Input/output */
+
+ FILE *input; /* The stream to be used for terminal input.
+ NULL if the terminal is suspended. */
+ FILE *output; /* The stream to be used for terminal output.
+ NULL if the terminal is suspended. */
+
+ FILE *termscript; /* If nonzero, send all terminal output
+ characters to this stream also. */
+
+ struct emacs_tty *old_tty; /* The initial tty mode bits */
+
+ int term_initted; /* 1 if we have been through init_sys_modes. */
+
+
+ int reference_count; /* Number of frames that are on this display. */
+
+ struct terminal *terminal; /* Points back to the generic terminal
+ structure. This is sometimes handy. */
+
+ /* Info on cursor positioning. */
+ struct cm *Wcm;
+
+ /* Redisplay. */
+
+ Lisp_Object top_frame; /* The topmost frame on this tty. */
+
+ /* The previous frame we displayed on this tty. */
+ struct frame *previous_frame;
+
+ /* Strings, numbers and flags taken from the termcap entry. */
+
+ char *TS_ins_line; /* "al" */
+ char *TS_ins_multi_lines; /* "AL" (one parameter, # lines to insert) */
+ char *TS_bell; /* "bl" */
+ char *TS_clr_to_bottom; /* "cd" */
+ char *TS_clr_line; /* "ce", clear to end of line */
+ char *TS_clr_frame; /* "cl" */
+ char *TS_set_scroll_region; /* "cs" (2 params, first line and last line) */
+ char *TS_set_scroll_region_1; /* "cS" (4 params: total lines,
+ lines above scroll region, lines below it,
+ total lines again) */
+ char *TS_del_char; /* "dc" */
+ char *TS_del_multi_chars; /* "DC" (one parameter, # chars to delete) */
+ char *TS_del_line; /* "dl" */
+ char *TS_del_multi_lines; /* "DL" (one parameter, # lines to delete) */
+ char *TS_delete_mode; /* "dm", enter character-delete mode */
+ char *TS_end_delete_mode; /* "ed", leave character-delete mode */
+ char *TS_end_insert_mode; /* "ei", leave character-insert mode */
+ char *TS_ins_char; /* "ic" */
+ char *TS_ins_multi_chars; /* "IC" (one parameter, # chars to insert) */
+ char *TS_insert_mode; /* "im", enter character-insert mode */
+ char *TS_pad_inserted_char; /* "ip". Just padding, no commands. */
+ char *TS_end_keypad_mode; /* "ke" */
+ char *TS_keypad_mode; /* "ks" */
+ char *TS_pad_char; /* "pc", char to use as padding */
+ char *TS_repeat; /* "rp" (2 params, # times to repeat
+ and character to be repeated) */
+ char *TS_end_standout_mode; /* "se" */
+ char *TS_fwd_scroll; /* "sf" */
+ char *TS_standout_mode; /* "so" */
+ char *TS_rev_scroll; /* "sr" */
+ char *TS_end_termcap_modes; /* "te" */
+ char *TS_termcap_modes; /* "ti" */
+ char *TS_visible_bell; /* "vb" */
+ char *TS_cursor_normal; /* "ve" */
+ char *TS_cursor_visible; /* "vs" */
+ char *TS_cursor_invisible; /* "vi" */
+ char *TS_set_window; /* "wi" (4 params, start and end of window,
+ each as vpos and hpos) */
+
+ char *TS_enter_bold_mode; /* "md" -- turn on bold (extra bright mode). */
+ char *TS_enter_dim_mode; /* "mh" -- turn on half-bright mode. */
+ char *TS_enter_blink_mode; /* "mb" -- enter blinking mode. */
+ char *TS_enter_reverse_mode; /* "mr" -- enter reverse video mode. */
+ char *TS_exit_underline_mode; /* "us" -- start underlining. */
+ char *TS_enter_underline_mode; /* "ue" -- end underlining. */
+
+ /* "as"/"ae" -- start/end alternate character set. Not really
+ supported, yet. */
+ char *TS_enter_alt_charset_mode;
+ char *TS_exit_alt_charset_mode;
+
+ char *TS_exit_attribute_mode; /* "me" -- switch appearances off. */
+
+ /* Value of the "NC" (no_color_video) capability, or 0 if not present. */
+ int TN_no_color_video;
+
+ int TN_max_colors; /* "Co" -- number of colors. */
+
+ /* "pa" -- max. number of color pairs on screen. Not handled yet.
+ Could be a problem if not equal to TN_max_colors * TN_max_colors. */
+ int TN_max_pairs;
+
+ /* "op" -- SVr4 set default pair to its original value. */
+ char *TS_orig_pair;
+
+ /* "AF"/"AB" or "Sf"/"Sb"-- set ANSI or SVr4 foreground/background color.
+ 1 param, the color index. */
+ char *TS_set_foreground;
+ char *TS_set_background;
+
+ int TF_hazeltine; /* termcap hz flag. */
+ int TF_insmode_motion; /* termcap mi flag: can move while in insert mode. */
+ int TF_standout_motion; /* termcap mi flag: can move while in standout mode. */
+ int TF_underscore; /* termcap ul flag: _ underlines if over-struck on
+ non-blank position. Must clear before writing _. */
+ int TF_teleray; /* termcap xt flag: many weird consequences.
+ For t1061. */
+
+ int RPov; /* # chars to start a TS_repeat */
+
+ int delete_in_insert_mode; /* delete mode == insert mode */
+
+ int se_is_so; /* 1 if same string both enters and leaves
+ standout mode */
+
+ int costs_set; /* Nonzero if costs have been calculated. */
+
+ int insert_mode; /* Nonzero when in insert mode. */
+ int standout_mode; /* Nonzero when in standout mode. */
+
+
+
+ /* 1 if should obey 0200 bit in input chars as "Meta", 2 if should
+ keep 0200 bit in input chars. 0 to ignore the 0200 bit. */
+
+ int meta_key;
+
+ /* Size of window specified by higher levels.
+ This is the number of lines, from the top of frame downwards,
+ which can participate in insert-line/delete-line operations.
+
+ Effectively it excludes the bottom frame_lines - specified_window_size
+ lines from those operations. */
+
+ int specified_window;
+
+ /* Flag used in tty_show/hide_cursor. */
+
+ int cursor_hidden;
+
+ /* Nonzero means use ^S/^Q for flow control. */
+ int flow_control;
+
+};
+
+/* A chain of structures for all tty devices currently in use. */
+extern struct tty_display_info *tty_list;
+
+
+#define FRAME_TTY(f) \
+ ((f)->output_method == output_termcap \
+ ? (f)->terminal->display_info.tty \
+ : (abort(), (struct tty_display_info *) 0))
+
+#define CURTTY() FRAME_TTY (SELECTED_FRAME())
/* arch-tag: bf9f0d49-842b-42fb-9348-ec8759b27193
(do not change this comment) */
diff --git a/src/termhooks.h b/src/termhooks.h
index 56f98092c6a..369bdff158d 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -1,7 +1,6 @@
-/* Hooks by which low level terminal operations
- can be made to call other routines.
- Copyright (C) 1985, 1986, 1993, 1994, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Parameters and display hooks for terminal devices.
+ Copyright (C) 1985, 1986, 1993, 1994, 2002, 2003, 2004,
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -26,40 +25,11 @@ Boston, MA 02110-1301, USA. */
struct glyph;
struct frame;
-/* If nonzero, send all terminal output characters to this stream also. */
-extern FILE *termscript;
-
/* Only use prototypes when lisp.h has been included. */
#ifndef P_
#define P_(X) ()
#endif
-/* Text display hooks. */
-
-extern void (*cursor_to_hook) P_ ((int vpos, int hpos));
-extern void (*raw_cursor_to_hook) P_ ((int, int));
-
-extern void (*clear_to_end_hook) P_ ((void));
-extern void (*clear_frame_hook) P_ ((void));
-extern void (*clear_end_of_line_hook) P_ ((int));
-
-extern void (*ins_del_lines_hook) P_ ((int, int));
-
-extern void (*insert_glyphs_hook) P_ ((struct glyph *s, int n));
-extern void (*write_glyphs_hook) P_ ((struct glyph *s, int n));
-extern void (*delete_glyphs_hook) P_ ((int));
-
-extern void (*ring_bell_hook) P_ ((void));
-
-extern void (*reset_terminal_modes_hook) P_ ((void));
-extern void (*set_terminal_modes_hook) P_ ((void));
-extern void (*update_begin_hook) P_ ((struct frame *));
-extern void (*update_end_hook) P_ ((struct frame *));
-extern void (*set_terminal_window_hook) P_ ((int));
-
-
-
-/* Multi-frame and mouse support hooks. */
enum scroll_bar_part {
scroll_bar_above_handle,
@@ -73,131 +43,12 @@ enum scroll_bar_part {
scroll_bar_move_ratio
};
-/* Return the current position of the mouse.
-
- Set *f to the frame the mouse is in, or zero if the mouse is in no
- Emacs frame. If it is set to zero, all the other arguments are
- garbage.
-
- If the motion started in a scroll bar, set *bar_window to the
- scroll bar's window, *part to the part the mouse is currently over,
- *x to the position of the mouse along the scroll bar, and *y to the
- overall length of the scroll bar.
-
- Otherwise, set *bar_window to Qnil, and *x and *y to the column and
- row of the character cell the mouse is over.
-
- Set *time to the time the mouse was at the returned position.
-
- This should clear mouse_moved until the next motion
- event arrives. */
-extern void (*mouse_position_hook) P_ ((struct frame **f, int,
- Lisp_Object *bar_window,
- enum scroll_bar_part *part,
- Lisp_Object *x,
- Lisp_Object *y,
- unsigned long *time));
-
-/* The window system handling code should set this if the mouse has
- moved since the last call to the mouse_position_hook. Calling that
- hook should clear this. */
-extern int mouse_moved;
-
-/* When a frame's focus redirection is changed, this hook tells the
- window system code to re-decide where to put the highlight. Under
- X, this means that Emacs lies about where the focus is. */
-extern void (*frame_rehighlight_hook) P_ ((struct frame *));
-
-/* If we're displaying frames using a window system that can stack
- frames on top of each other, this hook allows you to bring a frame
- to the front, or bury it behind all the other windows. If this
- hook is zero, that means the device we're displaying on doesn't
- support overlapping frames, so there's no need to raise or lower
- anything.
-
- If RAISE is non-zero, F is brought to the front, before all other
- windows. If RAISE is zero, F is sent to the back, behind all other
- windows. */
-extern void (*frame_raise_lower_hook) P_ ((struct frame *f, int raise));
-
/* If the value of the frame parameter changed, whis hook is called.
For example, if going from fullscreen to not fullscreen this hook
may do something OS dependent, like extended window manager hints on X11. */
extern void (*fullscreen_hook) P_ ((struct frame *f));
-/* Scroll bar hooks. */
-
-/* The representation of scroll bars is determined by the code which
- implements them, except for one thing: they must be represented by
- lisp objects. This allows us to place references to them in
- Lisp_Windows without worrying about those references becoming
- dangling references when the scroll bar is destroyed.
-
- The window-system-independent portion of Emacs just refers to
- scroll bars via their windows, and never looks inside the scroll bar
- representation; it always uses hook functions to do all the
- scroll bar manipulation it needs.
-
- The `vertical_scroll_bar' field of a Lisp_Window refers to that
- window's scroll bar, or is nil if the window doesn't have a
- scroll bar.
-
- The `scroll_bars' and `condemned_scroll_bars' fields of a Lisp_Frame
- are free for use by the scroll bar implementation in any way it sees
- fit. They are marked by the garbage collector. */
-
-
-/* Set the vertical scroll bar for WINDOW to have its upper left corner
- at (TOP, LEFT), and be LENGTH rows high. Set its handle to
- indicate that we are displaying PORTION characters out of a total
- of WHOLE characters, starting at POSITION. If WINDOW doesn't yet
- have a scroll bar, create one for it. */
-extern void (*set_vertical_scroll_bar_hook)
- P_ ((struct window *window,
- int portion, int whole, int position));
-
-
-/* The following three hooks are used when we're doing a thorough
- redisplay of the frame. We don't explicitly know which scroll bars
- are going to be deleted, because keeping track of when windows go
- away is a real pain - can you say set-window-configuration?
- Instead, we just assert at the beginning of redisplay that *all*
- scroll bars are to be removed, and then save scroll bars from the
- fiery pit when we actually redisplay their window. */
-
-/* Arrange for all scroll bars on FRAME to be removed at the next call
- to `*judge_scroll_bars_hook'. A scroll bar may be spared if
- `*redeem_scroll_bar_hook' is applied to its window before the judgement.
-
- This should be applied to each frame each time its window tree is
- redisplayed, even if it is not displaying scroll bars at the moment;
- if the HAS_SCROLL_BARS flag has just been turned off, only calling
- this and the judge_scroll_bars_hook will get rid of them.
-
- If non-zero, this hook should be safe to apply to any frame,
- whether or not it can support scroll bars, and whether or not it is
- currently displaying them. */
-extern void (*condemn_scroll_bars_hook) P_ ((struct frame *frame));
-
-/* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
- Note that it's okay to redeem a scroll bar that is not condemned. */
-extern void (*redeem_scroll_bar_hook) P_ ((struct window *window));
-
-/* Remove all scroll bars on FRAME that haven't been saved since the
- last call to `*condemn_scroll_bars_hook'.
-
- This should be applied to each frame after each time its window
- tree is redisplayed, even if it is not displaying scroll bars at the
- moment; if the HAS_SCROLL_BARS flag has just been turned off, only
- calling this and condemn_scroll_bars_hook will get rid of them.
-
- If non-zero, this hook should be safe to apply to any frame,
- whether or not it can support scroll bars, and whether or not it is
- currently displaying them. */
-extern void (*judge_scroll_bars_hook) P_ ((struct frame *FRAME));
-
-
/* Input queue declarations and hooks. */
/* Expedient hack: only provide the below definitions to files that
@@ -258,6 +109,9 @@ enum event_kind
the wheel event occurred in.
.timestamp gives a timestamp (in
milliseconds) for the event. */
+ HORIZ_WHEEL_EVENT, /* A wheel event generated by a second
+ horizontal wheel that is present on some
+ mice. See WHEEL_EVENT. */
#if defined (WINDOWSNT) || defined (MAC_OS)
LANGUAGE_CHANGE_EVENT, /* A LANGUAGE_CHANGE_EVENT is
generated on WINDOWSNT or Mac OS
@@ -278,10 +132,6 @@ enum event_kind
whose scroll bar was clicked in.
.timestamp gives a timestamp (in
milliseconds) for the click. */
-#ifdef WINDOWSNT
- W32_SCROLL_BAR_CLICK_EVENT, /* as for SCROLL_BAR_CLICK, but only generated
- by MS-Windows scroll bar controls. */
-#endif
SELECTION_REQUEST_EVENT, /* Another X client wants a selection from us.
See `struct selection_input_event'. */
SELECTION_CLEAR_EVENT, /* Another X client cleared our selection. */
@@ -342,6 +192,25 @@ enum event_kind
are converted to those in Apple events. */
, MAC_APPLE_EVENT
#endif
+
+#ifdef HAVE_GPM
+ , GPM_CLICK_EVENT
+#endif
+
+#ifdef WINDOWSNT
+ /* Generated when an APPCOMMAND event is received, in response to
+ Multimedia or Internet buttons on some keyboards.
+ Such keys are available as normal function keys on X through the
+ Xkeyboard extension.
+ On Windows, some of them get mapped to normal function key events,
+ but others need to be handled by APPCOMMAND. Handling them all as
+ APPCOMMAND events means they can be disabled
+ (w32-pass-multimedia-buttons-to-system), important on Windows since
+ the system never sees these keys if Emacs claims to handle them.
+ On X, the window manager seems to grab the keys it wants
+ first, so this is not a problem there. */
+ , MULTIMEDIA_KEY_EVENT
+#endif
};
/* If a struct input_event has a kind which is SELECTION_REQUEST_EVENT
@@ -390,13 +259,6 @@ struct input_event
#define EVENT_INIT(event) bzero (&(event), sizeof (struct input_event))
-/* Called to read input events. */
-extern int (*read_socket_hook) P_ ((int, int, struct input_event *));
-
-/* Called when a frame's display becomes entirely up to date. */
-extern void (*frame_up_to_date_hook) P_ ((struct frame *));
-
-
/* Bits in the modifiers member of the input_event structure.
Note that reorder_modifiers assumes that the bits are in canonical
order.
@@ -446,7 +308,352 @@ enum {
meta_modifier = CHAR_META /* Under X, the XK_Meta_[LR] keysyms. */
};
+#ifdef HAVE_GPM
+#include <gpm.h>
+extern int handle_one_term_event (struct tty_display_info *, Gpm_Event *, struct input_event *);
+extern void term_mouse_moveto (int, int);
+
+/* The device for which we have enabled gpm support. */
+extern struct tty_display_info *gpm_tty;
+#endif
+
+#endif /* CONSP */
+
+
+struct mac_display_info;
+struct w32_display_info;
+
+/* Terminal-local parameters. */
+struct terminal
+{
+ /* The first two fields are really the header of a vector */
+ /* The terminal code does not refer to them. */
+ EMACS_UINT size;
+ struct Lisp_Vector *vec_next;
+
+ /* Parameter alist of this terminal. */
+ Lisp_Object param_alist;
+
+ /* All fields before `next_terminal' should be Lisp_Object and are traced
+ by the GC. All fields afterwards are ignored by the GC. */
+
+ /* Chain of all terminal devices. */
+ struct terminal *next_terminal;
+
+ /* Unique id for this terminal device. */
+ int id;
+
+ /* The number of frames that are on this terminal. */
+ int reference_count;
+
+ /* The type of the terminal device. */
+ enum output_method type;
+
+ /* The name of the terminal device. Do not use this to uniquely
+ identify a terminal; the same device may be opened multiple
+ times. */
+ char *name;
+
+#ifdef MULTI_KBOARD
+ /* The terminal's keyboard object. */
+ struct kboard *kboard;
+#endif
+
+ /* Device-type dependent data shared amongst all frames on this terminal. */
+ union display_info
+ {
+ struct tty_display_info *tty; /* termchar.h */
+ struct x_display_info *x; /* xterm.h */
+ struct w32_display_info *w32; /* w32term.h */
+ struct mac_display_info *mac; /* macterm.h */
+ } display_info;
+
+
+ /* Coding-system to be used for encoding terminal output. This
+ structure contains information of a coding-system specified by
+ the function `set-terminal-coding-system'. Also see
+ `safe_terminal_coding' in coding.h. */
+ struct coding_system *terminal_coding;
+
+ /* Coding-system of what is sent from terminal keyboard. This
+ structure contains information of a coding-system specified by
+ the function `set-keyboard-coding-system'. */
+ struct coding_system *keyboard_coding;
+
+ /* Terminal characteristics. */
+ /* XXX Are these really used on non-termcap displays? */
+
+ int must_write_spaces; /* Nonzero means spaces in the text must
+ actually be output; can't just skip over
+ some columns to leave them blank. */
+ int fast_clear_end_of_line; /* Nonzero means terminal has a `ce' string */
+
+ int line_ins_del_ok; /* Terminal can insert and delete lines */
+ int char_ins_del_ok; /* Terminal can insert and delete chars */
+ int scroll_region_ok; /* Terminal supports setting the scroll
+ window */
+ int scroll_region_cost; /* Cost of setting the scroll window,
+ measured in characters. */
+ int memory_below_frame; /* Terminal remembers lines scrolled
+ off bottom */
+
+#if 0 /* These are not used anywhere. */
+ /* EMACS_INT baud_rate; */ /* Output speed in baud */
+ int min_padding_speed; /* Speed below which no padding necessary. */
+ int dont_calculate_costs; /* Nonzero means don't bother computing
+ various cost tables; we won't use them. */
+#endif
+
+
+ /* Window-based redisplay interface for this device (0 for tty
+ devices). */
+ struct redisplay_interface *rif;
+
+ /* Frame-based redisplay interface. */
+
+ /* Text display hooks. */
+
+ void (*cursor_to_hook) P_ ((struct frame *f, int vpos, int hpos));
+ void (*raw_cursor_to_hook) P_ ((struct frame *, int, int));
+
+ void (*clear_to_end_hook) P_ ((struct frame *));
+ void (*clear_frame_hook) P_ ((struct frame *));
+ void (*clear_end_of_line_hook) P_ ((struct frame *, int));
+
+ void (*ins_del_lines_hook) P_ ((struct frame *f, int, int));
+
+ void (*insert_glyphs_hook) P_ ((struct frame *f, struct glyph *s, int n));
+ void (*write_glyphs_hook) P_ ((struct frame *f, struct glyph *s, int n));
+ void (*delete_glyphs_hook) P_ ((struct frame *, int));
+
+ void (*ring_bell_hook) P_ ((struct frame *f));
+
+ void (*reset_terminal_modes_hook) P_ ((struct terminal *));
+ void (*set_terminal_modes_hook) P_ ((struct terminal *));
+
+ void (*update_begin_hook) P_ ((struct frame *));
+ void (*update_end_hook) P_ ((struct frame *));
+ void (*set_terminal_window_hook) P_ ((struct frame *, int));
+
+ /* Multi-frame and mouse support hooks. */
+
+ /* Return the current position of the mouse.
+
+ Set *f to the frame the mouse is in, or zero if the mouse is in no
+ Emacs frame. If it is set to zero, all the other arguments are
+ garbage.
+
+ If the motion started in a scroll bar, set *bar_window to the
+ scroll bar's window, *part to the part the mouse is currently over,
+ *x to the position of the mouse along the scroll bar, and *y to the
+ overall length of the scroll bar.
+
+ Otherwise, set *bar_window to Qnil, and *x and *y to the column and
+ row of the character cell the mouse is over.
+
+ Set *time to the time the mouse was at the returned position.
+
+ This should clear mouse_moved until the next motion
+ event arrives. */
+ void (*mouse_position_hook) P_ ((struct frame **f, int,
+ Lisp_Object *bar_window,
+ enum scroll_bar_part *part,
+ Lisp_Object *x,
+ Lisp_Object *y,
+ unsigned long *time));
+
+ /* The window system handling code should set this if the mouse has
+ moved since the last call to the mouse_position_hook. Calling that
+ hook should clear this. */
+ int mouse_moved;
+
+ /* When a frame's focus redirection is changed, this hook tells the
+ window system code to re-decide where to put the highlight. Under
+ X, this means that Emacs lies about where the focus is. */
+ void (*frame_rehighlight_hook) P_ ((struct frame *));
+
+ /* If we're displaying frames using a window system that can stack
+ frames on top of each other, this hook allows you to bring a frame
+ to the front, or bury it behind all the other windows. If this
+ hook is zero, that means the terminal we're displaying on doesn't
+ support overlapping frames, so there's no need to raise or lower
+ anything.
+
+ If RAISE is non-zero, F is brought to the front, before all other
+ windows. If RAISE is zero, F is sent to the back, behind all other
+ windows. */
+ void (*frame_raise_lower_hook) P_ ((struct frame *f, int raise));
+
+ /* If the value of the frame parameter changed, whis hook is called.
+ For example, if going from fullscreen to not fullscreen this hook
+ may do something OS dependent, like extended window manager hints on X11. */
+ void (*fullscreen_hook) P_ ((struct frame *f));
+
+
+ /* Scroll bar hooks. */
+
+ /* The representation of scroll bars is determined by the code which
+ implements them, except for one thing: they must be represented by
+ lisp objects. This allows us to place references to them in
+ Lisp_Windows without worrying about those references becoming
+ dangling references when the scroll bar is destroyed.
+
+ The window-system-independent portion of Emacs just refers to
+ scroll bars via their windows, and never looks inside the scroll bar
+ representation; it always uses hook functions to do all the
+ scroll bar manipulation it needs.
+
+ The `vertical_scroll_bar' field of a Lisp_Window refers to that
+ window's scroll bar, or is nil if the window doesn't have a
+ scroll bar.
+
+ The `scroll_bars' and `condemned_scroll_bars' fields of a Lisp_Frame
+ are free for use by the scroll bar implementation in any way it sees
+ fit. They are marked by the garbage collector. */
+
+
+ /* Set the vertical scroll bar for WINDOW to have its upper left corner
+ at (TOP, LEFT), and be LENGTH rows high. Set its handle to
+ indicate that we are displaying PORTION characters out of a total
+ of WHOLE characters, starting at POSITION. If WINDOW doesn't yet
+ have a scroll bar, create one for it. */
+ void (*set_vertical_scroll_bar_hook) P_ ((struct window *window,
+ int portion, int whole,
+ int position));
+
+
+ /* The following three hooks are used when we're doing a thorough
+ redisplay of the frame. We don't explicitly know which scroll bars
+ are going to be deleted, because keeping track of when windows go
+ away is a real pain - can you say set-window-configuration?
+ Instead, we just assert at the beginning of redisplay that *all*
+ scroll bars are to be removed, and then save scroll bars from the
+ fiery pit when we actually redisplay their window. */
+
+ /* Arrange for all scroll bars on FRAME to be removed at the next call
+ to `*judge_scroll_bars_hook'. A scroll bar may be spared if
+ `*redeem_scroll_bar_hook' is applied to its window before the judgement.
+
+ This should be applied to each frame each time its window tree is
+ redisplayed, even if it is not displaying scroll bars at the moment;
+ if the HAS_SCROLL_BARS flag has just been turned off, only calling
+ this and the judge_scroll_bars_hook will get rid of them.
+
+ If non-zero, this hook should be safe to apply to any frame,
+ whether or not it can support scroll bars, and whether or not it is
+ currently displaying them. */
+ void (*condemn_scroll_bars_hook) P_ ((struct frame *frame));
+
+ /* Unmark WINDOW's scroll bar for deletion in this judgement cycle.
+ Note that it's okay to redeem a scroll bar that is not condemned. */
+ void (*redeem_scroll_bar_hook) P_ ((struct window *window));
+
+ /* Remove all scroll bars on FRAME that haven't been saved since the
+ last call to `*condemn_scroll_bars_hook'.
+
+ This should be applied to each frame after each time its window
+ tree is redisplayed, even if it is not displaying scroll bars at the
+ moment; if the HAS_SCROLL_BARS flag has just been turned off, only
+ calling this and condemn_scroll_bars_hook will get rid of them.
+
+ If non-zero, this hook should be safe to apply to any frame,
+ whether or not it can support scroll bars, and whether or not it is
+ currently displaying them. */
+ void (*judge_scroll_bars_hook) P_ ((struct frame *FRAME));
+
+
+ /* Called to read input events.
+
+ TERMINAL indicates which terminal device to read from. Input
+ events should be read into BUF, the size of which is given in
+ SIZE. EXPECTED is non-zero if the caller suspects that new input
+ is available.
+
+ A positive return value indicates that that many input events
+ where read into BUF.
+ Zero means no events were immediately available.
+ A value of -1 means a transient read error, while -2 indicates
+ that the device was closed (hangup), and it should be deleted.
+
+ XXX Please note that a non-zero value of EXPECTED only means that
+ there is available input on at least one of the currently opened
+ terminal devices -- but not necessarily on this device.
+ Therefore, in most cases EXPECTED should be simply ignored.
+
+ XXX This documentation needs to be updated. */
+ int (*read_socket_hook) P_ ((struct terminal *terminal,
+ int expected,
+ struct input_event *hold_quit));
+
+ /* Called when a frame's display becomes entirely up to date. */
+ void (*frame_up_to_date_hook) P_ ((struct frame *));
+
+
+ /* Called to delete the device-specific portions of a frame that is
+ on this terminal device. */
+ void (*delete_frame_hook) P_ ((struct frame *));
+
+ /* Called after the last frame on this terminal is deleted, or when
+ the display device was closed (hangup).
+
+ If this is NULL, then the generic delete_terminal is called
+ instead. Otherwise the hook must call delete_terminal itself.
+
+ The hook must check for and close any live frames that are still
+ on the terminal. Fdelete_frame ensures that there are no live
+ frames on the terminal when it calls this hook, so infinite
+ recursion is prevented. */
+ void (*delete_terminal_hook) P_ ((struct terminal *));
+};
+
+
+/* Chain of all terminal devices currently in use. */
+extern struct terminal *terminal_list;
+
+#define FRAME_MUST_WRITE_SPACES(f) ((f)->terminal->must_write_spaces)
+#define FRAME_FAST_CLEAR_END_OF_LINE(f) ((f)->terminal->fast_clear_end_of_line)
+#define FRAME_LINE_INS_DEL_OK(f) ((f)->terminal->line_ins_del_ok)
+#define FRAME_CHAR_INS_DEL_OK(f) ((f)->terminal->char_ins_del_ok)
+#define FRAME_SCROLL_REGION_OK(f) ((f)->terminal->scroll_region_ok)
+#define FRAME_SCROLL_REGION_COST(f) ((f)->terminal->scroll_region_cost)
+#define FRAME_MEMORY_BELOW_FRAME(f) ((f)->terminal->memory_below_frame)
+
+#define FRAME_TERMINAL_CODING(f) ((f)->terminal->terminal_coding)
+#define FRAME_KEYBOARD_CODING(f) ((f)->terminal->keyboard_coding)
+
+#define TERMINAL_TERMINAL_CODING(d) ((d)->terminal_coding)
+#define TERMINAL_KEYBOARD_CODING(d) ((d)->keyboard_coding)
+
+#define FRAME_RIF(f) ((f)->terminal->rif)
+
+#define FRAME_TERMINAL(f) ((f)->terminal)
+
+/* FRAME_WINDOW_P tests whether the frame is a window, and is
+ defined to be the predicate for the window system being used. */
+
+#ifdef HAVE_X_WINDOWS
+#define FRAME_WINDOW_P(f) FRAME_X_P (f)
+#endif
+#ifdef HAVE_NTGUI
+#define FRAME_WINDOW_P(f) FRAME_W32_P (f)
+#endif
+#ifdef MAC_OS
+#define FRAME_WINDOW_P(f) FRAME_MAC_P (f)
#endif
+#ifndef FRAME_WINDOW_P
+#define FRAME_WINDOW_P(f) (0)
+#endif
+
+/* Return true if the terminal device is not suspended. */
+#define TERMINAL_ACTIVE_P(d) ((d)->type != output_termcap || (d)->display_info.tty->input)
+
+extern Lisp_Object get_terminal_param P_ ((struct terminal *, Lisp_Object));
+extern struct terminal *get_terminal P_ ((Lisp_Object terminal, int));
+extern struct terminal *create_terminal P_ ((void));
+extern void delete_terminal P_ ((struct terminal *));
+
+/* The initial terminal device, created by initial_term_init. */
+extern struct terminal *initial_terminal;
/* arch-tag: 33a00ecc-52b5-4186-a410-8801ac9f087d
(do not change this comment) */
diff --git a/src/terminal.c b/src/terminal.c
new file mode 100644
index 00000000000..46ffb3c2dc8
--- /dev/null
+++ b/src/terminal.c
@@ -0,0 +1,566 @@
+/* Functions related to terminal devices.
+ Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+
+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 3, 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. */
+
+#include <config.h>
+#include <stdio.h>
+
+#include "lisp.h"
+#include "frame.h"
+#include "termchar.h"
+#include "termhooks.h"
+#include "charset.h"
+#include "coding.h"
+#include "keyboard.h"
+
+/* Chain of all terminals currently in use. */
+struct terminal *terminal_list;
+
+/* The first unallocated terminal id. */
+static int next_terminal_id;
+
+/* The initial terminal device, created by initial_term_init. */
+struct terminal *initial_terminal;
+
+/* Function to use to ring the bell. */
+Lisp_Object Vring_bell_function;
+
+static void delete_initial_terminal P_ ((struct terminal *));
+
+
+
+void
+ring_bell (struct frame *f)
+{
+ if (!NILP (Vring_bell_function))
+ {
+ Lisp_Object function;
+
+ /* Temporarily set the global variable to nil
+ so that if we get an error, it stays nil
+ and we don't call it over and over.
+
+ We don't specbind it, because that would carefully
+ restore the bad value if there's an error
+ and make the loop of errors happen anyway. */
+
+ function = Vring_bell_function;
+ Vring_bell_function = Qnil;
+
+ call0 (function);
+
+ Vring_bell_function = function;
+ }
+ else if (FRAME_TERMINAL (f)->ring_bell_hook)
+ (*FRAME_TERMINAL (f)->ring_bell_hook) (f);
+}
+
+void
+update_begin (struct frame *f)
+{
+ if (FRAME_TERMINAL (f)->update_begin_hook)
+ (*FRAME_TERMINAL (f)->update_begin_hook) (f);
+}
+
+void
+update_end (struct frame *f)
+{
+ if (FRAME_TERMINAL (f)->update_end_hook)
+ (*FRAME_TERMINAL (f)->update_end_hook) (f);
+}
+
+/* Specify how many text lines, from the top of the window,
+ should be affected by insert-lines and delete-lines operations.
+ This, and those operations, are used only within an update
+ that is bounded by calls to update_begin and update_end. */
+
+void
+set_terminal_window (struct frame *f, int size)
+{
+ if (FRAME_TERMINAL (f)->set_terminal_window_hook)
+ (*FRAME_TERMINAL (f)->set_terminal_window_hook) (f, size);
+}
+
+/* Move cursor to row/column position VPOS/HPOS. HPOS/VPOS are
+ frame-relative coordinates. */
+
+void
+cursor_to (struct frame *f, int vpos, int hpos)
+{
+ if (FRAME_TERMINAL (f)->cursor_to_hook)
+ (*FRAME_TERMINAL (f)->cursor_to_hook) (f, vpos, hpos);
+}
+
+/* Similar but don't take any account of the wasted characters. */
+
+void
+raw_cursor_to (struct frame *f, int row, int col)
+{
+ if (FRAME_TERMINAL (f)->raw_cursor_to_hook)
+ (*FRAME_TERMINAL (f)->raw_cursor_to_hook) (f, row, col);
+}
+
+/* Erase operations */
+
+/* Clear from cursor to end of frame. */
+void
+clear_to_end (struct frame *f)
+{
+ if (FRAME_TERMINAL (f)->clear_to_end_hook)
+ (*FRAME_TERMINAL (f)->clear_to_end_hook) (f);
+}
+
+/* Clear entire frame */
+
+void
+clear_frame (struct frame *f)
+{
+ if (FRAME_TERMINAL (f)->clear_frame_hook)
+ (*FRAME_TERMINAL (f)->clear_frame_hook) (f);
+}
+
+/* Clear from cursor to end of line.
+ Assume that the line is already clear starting at column first_unused_hpos.
+
+ Note that the cursor may be moved, on terminals lacking a `ce' string. */
+
+void
+clear_end_of_line (struct frame *f, int first_unused_hpos)
+{
+ if (FRAME_TERMINAL (f)->clear_end_of_line_hook)
+ (*FRAME_TERMINAL (f)->clear_end_of_line_hook) (f, first_unused_hpos);
+}
+
+/* Output LEN glyphs starting at STRING at the nominal cursor position.
+ Advance the nominal cursor over the text. */
+
+void
+write_glyphs (struct frame *f, struct glyph *string, int len)
+{
+ if (FRAME_TERMINAL (f)->write_glyphs_hook)
+ (*FRAME_TERMINAL (f)->write_glyphs_hook) (f, string, len);
+}
+
+/* Insert LEN glyphs from START at the nominal cursor position.
+
+ If start is zero, insert blanks instead of a string at start */
+
+void
+insert_glyphs (struct frame *f, struct glyph *start, int len)
+{
+ if (len <= 0)
+ return;
+
+ if (FRAME_TERMINAL (f)->insert_glyphs_hook)
+ (*FRAME_TERMINAL (f)->insert_glyphs_hook) (f, start, len);
+}
+
+/* Delete N glyphs at the nominal cursor position. */
+
+void
+delete_glyphs (struct frame *f, int n)
+{
+ if (FRAME_TERMINAL (f)->delete_glyphs_hook)
+ (*FRAME_TERMINAL (f)->delete_glyphs_hook) (f, n);
+}
+
+/* Insert N lines at vpos VPOS. If N is negative, delete -N lines. */
+
+void
+ins_del_lines (struct frame *f, int vpos, int n)
+{
+ if (FRAME_TERMINAL (f)->ins_del_lines_hook)
+ (*FRAME_TERMINAL (f)->ins_del_lines_hook) (f, vpos, n);
+}
+
+
+
+
+/* Return the terminal object specified by TERMINAL. TERMINAL may be a
+ terminal id, a frame, or nil for the terminal device of the current
+ frame. If THROW is zero, return NULL for failure, otherwise throw
+ an error. */
+
+struct terminal *
+get_terminal (Lisp_Object terminal, int throw)
+{
+ struct terminal *result = NULL;
+
+ if (NILP (terminal))
+ terminal = selected_frame;
+
+ if (TERMINALP (terminal))
+ result = XTERMINAL (terminal);
+
+ else if (FRAMEP (terminal))
+ {
+ result = FRAME_TERMINAL (XFRAME (terminal));
+ }
+
+ if (result && !result->name)
+ result = NULL;
+
+ if (result == NULL && throw)
+ wrong_type_argument (Qterminal_live_p, terminal);
+
+ return result;
+}
+
+
+
+/* Create a new terminal object and add it to the terminal list. */
+
+struct terminal *
+create_terminal (void)
+{
+ struct terminal *terminal = allocate_terminal ();
+
+ terminal->name = NULL;
+ terminal->next_terminal = terminal_list;
+ terminal_list = terminal;
+
+ terminal->id = next_terminal_id++;
+
+ terminal->keyboard_coding =
+ (struct coding_system *) xmalloc (sizeof (struct coding_system));
+ terminal->terminal_coding =
+ (struct coding_system *) xmalloc (sizeof (struct coding_system));
+
+ setup_coding_system (Qnil, terminal->keyboard_coding);
+ setup_coding_system (Qnil, terminal->terminal_coding);
+
+ terminal->param_alist = Qnil;
+ return terminal;
+}
+
+/* Low-level function to close all frames on a terminal, remove it
+ from the terminal list and free its memory. */
+
+void
+delete_terminal (struct terminal *terminal)
+{
+ struct terminal **tp;
+ Lisp_Object tail, frame;
+
+ /* Protect against recursive calls. Fdelete_frame calls the
+ delete_terminal_hook when we delete our last frame. */
+ if (!terminal->name)
+ return;
+ xfree (terminal->name);
+ terminal->name = NULL;
+
+ /* Check for live frames that are still on this terminal. */
+ FOR_EACH_FRAME (tail, frame)
+ {
+ struct frame *f = XFRAME (frame);
+ if (FRAME_LIVE_P (f) && f->terminal == terminal)
+ {
+ Fdelete_frame (frame, Qt);
+ }
+ }
+
+ for (tp = &terminal_list; *tp != terminal; tp = &(*tp)->next_terminal)
+ if (! *tp)
+ abort ();
+ *tp = terminal->next_terminal;
+
+ xfree (terminal->keyboard_coding);
+ terminal->keyboard_coding = NULL;
+ xfree (terminal->terminal_coding);
+ terminal->terminal_coding = NULL;
+
+#ifdef MULTI_KBOARD
+ if (terminal->kboard && --terminal->kboard->reference_count == 0)
+ {
+ delete_kboard (terminal->kboard);
+ terminal->kboard = NULL;
+ }
+#endif
+}
+
+DEFUN ("delete-terminal", Fdelete_terminal, Sdelete_terminal, 0, 2, 0,
+ doc: /* Delete TERMINAL by deleting all frames on it and closing the terminal.
+TERMINAL may be a terminal id, a frame, or nil (meaning the selected
+frame's terminal).
+
+Normally, you may not delete a display if all other displays are suspended,
+but if the second argument FORCE is non-nil, you may do so. */)
+ (terminal, force)
+ Lisp_Object terminal, force;
+{
+ struct terminal *t, *p;
+
+ t = get_terminal (terminal, 0);
+
+ if (!t)
+ return Qnil;
+
+ p = terminal_list;
+ while (p && (p == t || !TERMINAL_ACTIVE_P (p)))
+ p = p->next_terminal;
+
+ if (NILP (force) && !p)
+ error ("Attempt to delete the sole active display terminal");
+
+ if (t->delete_terminal_hook)
+ (*t->delete_terminal_hook) (t);
+ else
+ delete_terminal (t);
+
+ return Qnil;
+}
+
+
+DEFUN ("frame-terminal", Fframe_terminal, Sframe_terminal, 0, 1, 0,
+ doc: /* Return the terminal that FRAME is displayed on.
+If FRAME is nil, the selected frame is used.
+
+The terminal device is represented by its integer identifier. */)
+ (frame)
+ Lisp_Object frame;
+{
+ struct terminal *t;
+
+ if (NILP (frame))
+ frame = selected_frame;
+
+ CHECK_LIVE_FRAME (frame);
+
+ t = FRAME_TERMINAL (XFRAME (frame));
+
+ if (!t)
+ return Qnil;
+ else
+ {
+ Lisp_Object terminal;
+ XSETTERMINAL (terminal, t);
+ return terminal;
+ }
+}
+
+DEFUN ("terminal-live-p", Fterminal_live_p, Sterminal_live_p, 1, 1, 0,
+ doc: /* Return non-nil if OBJECT is a terminal which has not been deleted.
+Value is nil if OBJECT is not a live display terminal.
+If object is a live display terminal, the return value indicates what
+sort of output terminal it uses. See the documentation of `framep' for
+possible return values. */)
+ (object)
+ Lisp_Object object;
+{
+ struct terminal *t;
+
+ t = get_terminal (object, 0);
+
+ if (!t)
+ return Qnil;
+
+ switch (t->type)
+ {
+ case output_initial: /* The initial frame is like a termcap frame. */
+ case output_termcap:
+ return Qt;
+ case output_x_window:
+ return Qx;
+ case output_w32:
+ return Qw32;
+ case output_msdos_raw:
+ return Qpc;
+ case output_mac:
+ return Qmac;
+ default:
+ abort ();
+ }
+}
+
+DEFUN ("terminal-list", Fterminal_list, Sterminal_list, 0, 0, 0,
+ doc: /* Return a list of all terminal devices. */)
+ ()
+{
+ Lisp_Object terminal, terminals = Qnil;
+ struct terminal *t;
+
+ for (t = terminal_list; t; t = t->next_terminal)
+ {
+ XSETTERMINAL (terminal, t);
+ terminals = Fcons (terminal, terminals);
+ }
+
+ return terminals;
+}
+
+DEFUN ("terminal-name", Fterminal_name, Sterminal_name, 0, 1, 0,
+ doc: /* Return the name of the terminal device TERMINAL.
+It is not guaranteed that the returned value is unique among opened devices.
+
+TERMINAL may be a terminal id, a frame, or nil (meaning the
+selected frame's terminal). */)
+ (terminal)
+ Lisp_Object terminal;
+{
+ struct terminal *t
+ = TERMINALP (terminal) ? XTERMINAL (terminal) : get_terminal (terminal, 1);
+
+ return t->name ? build_string (t->name) : Qnil;
+}
+
+
+
+/* Return the value of terminal parameter PARAM in terminal T. */
+Lisp_Object
+get_terminal_param (t, param)
+ struct terminal *t;
+ Lisp_Object param;
+{
+ Lisp_Object tem = Fassq (param, t->param_alist);
+ if (EQ (tem, Qnil))
+ return tem;
+ return Fcdr (tem);
+}
+
+/* Set the value of terminal parameter PARAMETER in terminal D to VALUE.
+ Return the previous value. */
+
+Lisp_Object
+store_terminal_param (t, parameter, value)
+ struct terminal *t;
+ Lisp_Object parameter;
+ Lisp_Object value;
+{
+ Lisp_Object old_alist_elt = Fassq (parameter, t->param_alist);
+ if (EQ (old_alist_elt, Qnil))
+ {
+ t->param_alist = Fcons (Fcons (parameter, value), t->param_alist);
+ return Qnil;
+ }
+ else
+ {
+ Lisp_Object result = Fcdr (old_alist_elt);
+ Fsetcdr (old_alist_elt, value);
+ return result;
+ }
+}
+
+
+DEFUN ("terminal-parameters", Fterminal_parameters, Sterminal_parameters, 0, 1, 0,
+ doc: /* Return the parameter-alist of terminal TERMINAL.
+The value is a list of elements of the form (PARM . VALUE), where PARM
+is a symbol.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). */)
+ (terminal)
+ Lisp_Object terminal;
+{
+ struct terminal *t
+ = TERMINALP (terminal) ? XTERMINAL (terminal) : get_terminal (terminal, 1);
+ return Fcopy_alist (t->param_alist);
+}
+
+DEFUN ("terminal-parameter", Fterminal_parameter, Sterminal_parameter, 2, 2, 0,
+ doc: /* Return TERMINAL's value for parameter PARAMETER.
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). */)
+ (terminal, parameter)
+ Lisp_Object terminal;
+ Lisp_Object parameter;
+{
+ Lisp_Object value;
+ struct terminal *t
+ = TERMINALP (terminal) ? XTERMINAL (terminal) : get_terminal (terminal, 1);
+ CHECK_SYMBOL (parameter);
+ value = Fcdr (Fassq (parameter, t->param_alist));
+ return value;
+}
+
+DEFUN ("set-terminal-parameter", Fset_terminal_parameter,
+ Sset_terminal_parameter, 3, 3, 0,
+ doc: /* Set TERMINAL's value for parameter PARAMETER to VALUE.
+Return the previous value of PARAMETER.
+
+TERMINAL can be a terminal id, a frame or nil (meaning the selected
+frame's terminal). */)
+ (terminal, parameter, value)
+ Lisp_Object terminal;
+ Lisp_Object parameter;
+ Lisp_Object value;
+{
+ struct terminal *t
+ = TERMINALP (terminal) ? XTERMINAL (terminal) : get_terminal (terminal, 1);
+ return store_terminal_param (t, parameter, value);
+}
+
+
+
+/* Create the bootstrap display terminal for the initial frame.
+ Returns a terminal of type output_initial. */
+
+struct terminal *
+init_initial_terminal (void)
+{
+ if (initialized || terminal_list || tty_list)
+ abort ();
+
+ initial_terminal = create_terminal ();
+ initial_terminal->type = output_initial;
+ initial_terminal->name = xstrdup ("initial_terminal");
+#ifdef MULTI_KBOARD
+ initial_terminal->kboard = initial_kboard;
+#endif
+ initial_terminal->delete_terminal_hook = &delete_initial_terminal;
+ /* All other hooks are NULL. */
+
+ return initial_terminal;
+}
+
+/* Deletes the bootstrap terminal device.
+ Called through delete_terminal_hook. */
+
+static void
+delete_initial_terminal (struct terminal *terminal)
+{
+ if (terminal != initial_terminal)
+ abort ();
+
+ delete_terminal (terminal);
+ initial_terminal = NULL;
+}
+
+void
+syms_of_terminal ()
+{
+
+ DEFVAR_LISP ("ring-bell-function", &Vring_bell_function,
+ doc: /* Non-nil means call this function to ring the bell.
+The function should accept no arguments. */);
+ Vring_bell_function = Qnil;
+
+ defsubr (&Sdelete_terminal);
+ defsubr (&Sframe_terminal);
+ defsubr (&Sterminal_live_p);
+ defsubr (&Sterminal_list);
+ defsubr (&Sterminal_name);
+ defsubr (&Sterminal_parameters);
+ defsubr (&Sterminal_parameter);
+ defsubr (&Sset_terminal_parameter);
+
+ Fprovide (intern ("multi-tty"), Qnil);
+}
+
+/* arch-tag: e9af6f27-b483-47dc-bb1a-730c1c5cab03
+ (do not change this comment) */
diff --git a/src/termopts.h b/src/termopts.h
index 210236017d5..5946666654c 100644
--- a/src/termopts.h
+++ b/src/termopts.h
@@ -41,5 +41,10 @@ extern int meta_key;
/* Nonzero means truncate lines in all windows less wide than the frame */
extern int truncate_partial_width_windows;
+/* Nonzero means no need to redraw the entire frame on resuming a suspended
+ Emacs. This is useful on terminals with multiple pages, where one page is
+ used for Emacs and another for all else. */
+extern int no_redraw_on_reenter;
+
/* arch-tag: 35d4d284-dc1a-4fff-97fa-0154a21aebdb
(do not change this comment) */
diff --git a/src/textprop.c b/src/textprop.c
index 2026cded9d1..f7b50755ed1 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -201,9 +201,9 @@ validate_plist (list)
{
register int i;
register Lisp_Object tail;
- for (i = 0, tail = list; !NILP (tail); i++)
+ for (i = 0, tail = list; CONSP (tail); i++)
{
- tail = Fcdr (tail);
+ tail = XCDR (tail);
QUIT;
}
if (i & 1)
@@ -226,18 +226,18 @@ interval_has_all_properties (plist, i)
register int found;
/* Go through each element of PLIST. */
- for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
+ for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
{
- sym1 = Fcar (tail1);
+ sym1 = XCAR (tail1);
found = 0;
/* Go through I's plist, looking for sym1 */
- for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2)))
- if (EQ (sym1, Fcar (tail2)))
+ for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
+ if (EQ (sym1, XCAR (tail2)))
{
/* Found the same property on both lists. If the
values are unequal, return zero. */
- if (! EQ (Fcar (Fcdr (tail1)), Fcar (Fcdr (tail2))))
+ if (! EQ (Fcar (XCDR (tail1)), Fcar (XCDR (tail2))))
return 0;
/* Property has same value on both lists; go to next one. */
@@ -263,13 +263,13 @@ interval_has_some_properties (plist, i)
register Lisp_Object tail1, tail2, sym;
/* Go through each element of PLIST. */
- for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
+ for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
{
- sym = Fcar (tail1);
+ sym = XCAR (tail1);
/* Go through i's plist, looking for tail1 */
- for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2)))
- if (EQ (sym, Fcar (tail2)))
+ for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
+ if (EQ (sym, XCAR (tail2)))
return 1;
}
@@ -287,12 +287,12 @@ interval_has_some_properties_list (list, i)
register Lisp_Object tail1, tail2, sym;
/* Go through each element of LIST. */
- for (tail1 = list; ! NILP (tail1); tail1 = XCDR (tail1))
+ for (tail1 = list; CONSP (tail1); tail1 = XCDR (tail1))
{
sym = Fcar (tail1);
/* Go through i's plist, looking for tail1 */
- for (tail2 = i->plist; ! NILP (tail2); tail2 = XCDR (XCDR (tail2)))
+ for (tail2 = i->plist; CONSP (tail2); tail2 = XCDR (XCDR (tail2)))
if (EQ (sym, XCAR (tail2)))
return 1;
}
@@ -391,21 +391,21 @@ add_properties (plist, i, object)
GCPRO3 (tail1, sym1, val1);
/* Go through each element of PLIST. */
- for (tail1 = plist; ! NILP (tail1); tail1 = Fcdr (Fcdr (tail1)))
+ for (tail1 = plist; CONSP (tail1); tail1 = Fcdr (XCDR (tail1)))
{
- sym1 = Fcar (tail1);
- val1 = Fcar (Fcdr (tail1));
+ sym1 = XCAR (tail1);
+ val1 = Fcar (XCDR (tail1));
found = 0;
/* Go through I's plist, looking for sym1 */
- for (tail2 = i->plist; ! NILP (tail2); tail2 = Fcdr (Fcdr (tail2)))
- if (EQ (sym1, Fcar (tail2)))
+ for (tail2 = i->plist; CONSP (tail2); tail2 = Fcdr (XCDR (tail2)))
+ if (EQ (sym1, XCAR (tail2)))
{
/* No need to gcpro, because tail2 protects this
and it must be a cons cell (we get an error otherwise). */
register Lisp_Object this_cdr;
- this_cdr = Fcdr (tail2);
+ this_cdr = XCDR (tail2);
/* Found the property. Now check its value. */
found = 1;
@@ -1965,10 +1965,10 @@ text_property_list (object, start, end, prop)
plist = i->plist;
if (!NILP (prop))
- for (; !NILP (plist); plist = Fcdr (Fcdr (plist)))
- if (EQ (Fcar (plist), prop))
+ for (; CONSP (plist); plist = Fcdr (XCDR (plist)))
+ if (EQ (XCAR (plist), prop))
{
- plist = Fcons (prop, Fcons (Fcar (Fcdr (plist)), Qnil));
+ plist = Fcons (prop, Fcons (Fcar (XCDR (plist)), Qnil));
break;
}
diff --git a/src/w32.c b/src/w32.c
index 0b7006c8639..d9d11c3094a 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -137,6 +137,15 @@ typedef BOOL (WINAPI * GetTokenInformation_Proc) (
LPVOID TokenInformation,
DWORD TokenInformationLength,
PDWORD ReturnLength);
+typedef BOOL (WINAPI * GetProcessTimes_Proc) (
+ HANDLE process_handle,
+ LPFILETIME creation_time,
+ LPFILETIME exit_time,
+ LPFILETIME kernel_time,
+ LPFILETIME user_time);
+
+GetProcessTimes_Proc get_process_times_fn = NULL;
+
#ifdef _UNICODE
const char * const LookupAccountSid_Name = "LookupAccountSidW";
#else
@@ -172,6 +181,46 @@ is_windows_9x ()
return s_b_ret;
}
+/* Get total user and system times for get-internal-run-time.
+ Returns a list of three integers if the times are provided by the OS
+ (NT derivatives), otherwise it returns the result of current-time. */
+Lisp_Object
+w32_get_internal_run_time ()
+{
+ if (get_process_times_fn)
+ {
+ FILETIME create, exit, kernel, user;
+ HANDLE proc = GetCurrentProcess();
+ if ((*get_process_times_fn) (proc, &create, &exit, &kernel, &user))
+ {
+ LARGE_INTEGER user_int, kernel_int, total;
+ int microseconds;
+ user_int.LowPart = user.dwLowDateTime;
+ user_int.HighPart = user.dwHighDateTime;
+ kernel_int.LowPart = kernel.dwLowDateTime;
+ kernel_int.HighPart = kernel.dwHighDateTime;
+ total.QuadPart = user_int.QuadPart + kernel_int.QuadPart;
+ /* FILETIME is 100 nanosecond increments, Emacs only wants
+ microsecond resolution. */
+ total.QuadPart /= 10;
+ microseconds = total.QuadPart % 1000000;
+ total.QuadPart /= 1000000;
+
+ /* Sanity check to make sure we can represent the result. */
+ if (total.HighPart == 0)
+ {
+ int secs = total.LowPart;
+
+ return list3 (make_number ((secs >> 16) & 0xffff),
+ make_number (secs & 0xffff),
+ make_number (microseconds));
+ }
+ }
+ }
+
+ return Fcurrent_time ();
+}
+
/* ** The wrapper functions ** */
BOOL WINAPI open_process_token (
@@ -855,18 +904,6 @@ alarm (int seconds)
return 0;
}
-void
-unrequest_sigio (void)
-{
- return;
-}
-
-void
-request_sigio (void)
-{
- return;
-}
-
#define REG_ROOT "SOFTWARE\\GNU\\Emacs"
LPBYTE
@@ -4148,6 +4185,11 @@ BOOL WINAPI shutdown_handler(DWORD type)
void
globals_of_w32 ()
{
+ HMODULE kernel32 = GetModuleHandle ("kernel32.dll");
+
+ get_process_times_fn = (GetProcessTimes_Proc)
+ GetProcAddress (kernel32, "GetProcessTimes");
+
g_b_init_is_windows_9x = 0;
g_b_init_open_process_token = 0;
g_b_init_get_token_information = 0;
diff --git a/src/w32console.c b/src/w32console.c
index 3afa5fb392a..3567426a074 100644
--- a/src/w32console.c
+++ b/src/w32console.c
@@ -35,11 +35,12 @@ Boston, MA 02110-1301, USA.
#include "charset.h"
#include "coding.h"
#include "disptab.h"
-#include "termhooks.h"
-#include "dispextern.h"
/* Disable features in frame.h that require a Window System. */
#undef HAVE_WINDOW_SYSTEM
#include "frame.h"
+#include "termhooks.h"
+#include "termchar.h"
+#include "dispextern.h"
#include "w32inevt.h"
/* from window.c */
@@ -51,21 +52,17 @@ extern int detect_input_pending ();
/* from sysdep.c */
extern int read_input_pending ();
-extern struct frame * updating_frame;
-extern int meta_key;
-
-static void w32con_move_cursor (int row, int col);
-static void w32con_clear_to_end (void);
-static void w32con_clear_frame (void);
-static void w32con_clear_end_of_line (int);
-static void w32con_ins_del_lines (int vpos, int n);
-static void w32con_insert_glyphs (struct glyph *start, int len);
-static void w32con_write_glyphs (struct glyph *string, int len);
-static void w32con_delete_glyphs (int n);
-void w32_sys_ring_bell (void);
-static void w32con_reset_terminal_modes (void);
-static void w32con_set_terminal_modes (void);
-static void w32con_set_terminal_window (int size);
+static void w32con_move_cursor (struct frame *f, int row, int col);
+static void w32con_clear_to_end (struct frame *f);
+static void w32con_clear_frame (struct frame *f);
+static void w32con_clear_end_of_line (struct frame *f, int);
+static void w32con_ins_del_lines (struct frame *f, int vpos, int n);
+static void w32con_insert_glyphs (struct frame *f, struct glyph *start, int len);
+static void w32con_write_glyphs (struct frame *f, struct glyph *string, int len);
+static void w32con_delete_glyphs (struct frame *f, int n);
+static void w32con_reset_terminal_modes (struct terminal *t);
+static void w32con_set_terminal_modes (struct terminal *t);
+static void w32con_set_terminal_window (struct frame *f, int size);
static void w32con_update_begin (struct frame * f);
static void w32con_update_end (struct frame * f);
static WORD w32_face_attributes (struct frame *f, int face_id);
@@ -99,38 +96,31 @@ ctrl_c_handler (unsigned long type)
&& (type == CTRL_C_EVENT || type == CTRL_BREAK_EVENT));
}
-/* If we're updating a frame, use it as the current frame
- Otherwise, use the selected frame. */
-#define PICK_FRAME() (updating_frame ? updating_frame : SELECTED_FRAME ())
-/* Move the cursor to (row, col). */
+/* Move the cursor to (ROW, COL) on FRAME. */
static void
-w32con_move_cursor (int row, int col)
+w32con_move_cursor (struct frame *f, int row, int col)
{
cursor_coords.X = col;
cursor_coords.Y = row;
- if (updating_frame == (struct frame *) NULL)
- {
- SetConsoleCursorPosition (cur_screen, cursor_coords);
- }
+ /* TODO: for multi-tty support, cur_screen should be replaced with a
+ reference to the terminal for this frame. */
+ SetConsoleCursorPosition (cur_screen, cursor_coords);
}
/* Clear from cursor to end of screen. */
static void
-w32con_clear_to_end (void)
+w32con_clear_to_end (struct frame *f)
{
- struct frame * f = PICK_FRAME ();
-
- w32con_clear_end_of_line (FRAME_COLS (f) - 1);
- w32con_ins_del_lines (cursor_coords.Y, FRAME_LINES (f) - cursor_coords.Y - 1);
+ w32con_clear_end_of_line (f, FRAME_COLS (f) - 1);
+ w32con_ins_del_lines (f, cursor_coords.Y, FRAME_LINES (f) - cursor_coords.Y - 1);
}
/* Clear the frame. */
static void
-w32con_clear_frame (void)
+w32con_clear_frame (struct frame *f)
{
- struct frame * f = PICK_FRAME ();
COORD dest;
int n;
DWORD r;
@@ -145,7 +135,7 @@ w32con_clear_frame (void)
FillConsoleOutputAttribute (cur_screen, char_attr_normal, n, dest, &r);
FillConsoleOutputCharacter (cur_screen, ' ', n, dest, &r);
- w32con_move_cursor (0, 0);
+ w32con_move_cursor (f, 0, 0);
}
@@ -154,7 +144,7 @@ static BOOL ceol_initialized = FALSE;
/* Clear from Cursor to end (what's "standout marker"?). */
static void
-w32con_clear_end_of_line (int end)
+w32con_clear_end_of_line (struct frame *f, int end)
{
if (!ceol_initialized)
{
@@ -165,18 +155,17 @@ w32con_clear_end_of_line (int end)
}
ceol_initialized = TRUE;
}
- w32con_write_glyphs (glyph_base, end - cursor_coords.X); /* fencepost ? */
+ w32con_write_glyphs (f, glyph_base, end - cursor_coords.X); /* fencepost ? */
}
/* Insert n lines at vpos. if n is negative delete -n lines. */
static void
-w32con_ins_del_lines (int vpos, int n)
+w32con_ins_del_lines (struct frame *f, int vpos, int n)
{
int i, nb;
SMALL_RECT scroll;
COORD dest;
CHAR_INFO fill;
- struct frame * f = PICK_FRAME ();
if (n < 0)
{
@@ -213,8 +202,8 @@ w32con_ins_del_lines (int vpos, int n)
{
for (i = scroll.Bottom; i < dest.Y; i++)
{
- w32con_move_cursor (i, 0);
- w32con_clear_end_of_line (FRAME_COLS (f));
+ w32con_move_cursor (f, i, 0);
+ w32con_clear_end_of_line (f, FRAME_COLS (f));
}
}
}
@@ -226,8 +215,8 @@ w32con_ins_del_lines (int vpos, int n)
{
for (i = nb; i < scroll.Top; i++)
{
- w32con_move_cursor (i, 0);
- w32con_clear_end_of_line (FRAME_COLS (f));
+ w32con_move_cursor (f, i, 0);
+ w32con_clear_end_of_line (f, FRAME_COLS (f));
}
}
}
@@ -242,14 +231,13 @@ w32con_ins_del_lines (int vpos, int n)
#define RIGHT 0
static void
-scroll_line (int dist, int direction)
+scroll_line (struct frame *f, int dist, int direction)
{
/* The idea here is to implement a horizontal scroll in one line to
implement delete and half of insert. */
SMALL_RECT scroll;
COORD dest;
CHAR_INFO fill;
- struct frame * f = PICK_FRAME ();
scroll.Top = cursor_coords.Y;
scroll.Bottom = cursor_coords.Y;
@@ -277,9 +265,9 @@ scroll_line (int dist, int direction)
/* If start is zero insert blanks instead of a string at start ?. */
static void
-w32con_insert_glyphs (register struct glyph *start, register int len)
+w32con_insert_glyphs (struct frame *f, register struct glyph *start, register int len)
{
- scroll_line (len, RIGHT);
+ scroll_line (f, len, RIGHT);
/* Move len chars to the right starting at cursor_coords, fill with blanks */
if (start)
@@ -287,11 +275,11 @@ w32con_insert_glyphs (register struct glyph *start, register int len)
/* Print the first len characters of start, cursor_coords.X adjusted
by write_glyphs. */
- w32con_write_glyphs (start, len);
+ w32con_write_glyphs (f, start, len);
}
else
{
- w32con_clear_end_of_line (cursor_coords.X + len);
+ w32con_clear_end_of_line (f, cursor_coords.X + len);
}
}
@@ -299,11 +287,10 @@ extern unsigned char *encode_terminal_code P_ ((struct glyph *, int,
struct coding_system *));
static void
-w32con_write_glyphs (register struct glyph *string, register int len)
+w32con_write_glyphs (struct frame *f, register struct glyph *string,
+ register int len)
{
- int produced, consumed;
DWORD r;
- struct frame * f = PICK_FRAME ();
WORD char_attr;
unsigned char *conversion_buffer;
struct coding_system *coding;
@@ -314,11 +301,11 @@ w32con_write_glyphs (register struct glyph *string, register int len)
/* If terminal_coding does any conversion, use it, otherwise use
safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
because it always return 1 if the member src_multibyte is 1. */
- coding = (terminal_coding.common_flags & CODING_REQUIRE_ENCODING_MASK
- ? &terminal_coding : &safe_terminal_coding);
+ coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
+ ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
/* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
the tail. */
- terminal_coding.mode &= ~CODING_MODE_LAST_BLOCK;
+ coding->mode &= ~CODING_MODE_LAST_BLOCK;
while (len > 0)
{
@@ -360,7 +347,7 @@ w32con_write_glyphs (register struct glyph *string, register int len)
}
cursor_coords.X += coding->produced;
- w32con_move_cursor (cursor_coords.Y, cursor_coords.X);
+ w32con_move_cursor (f, cursor_coords.Y, cursor_coords.X);
}
len -= n;
string += n;
@@ -369,20 +356,20 @@ w32con_write_glyphs (register struct glyph *string, register int len)
static void
-w32con_delete_glyphs (int n)
+w32con_delete_glyphs (struct frame *f, int n)
{
/* delete chars means scroll chars from cursor_coords.X + n to
cursor_coords.X, anything beyond the edge of the screen should
come out empty... */
- scroll_line (n, LEFT);
+ scroll_line (f, n, LEFT);
}
static unsigned int sound_type = 0xFFFFFFFF;
#define MB_EMACS_SILENT (0xFFFFFFFF - 1)
void
-w32_sys_ring_bell (void)
+w32_sys_ring_bell (struct frame *f)
{
if (sound_type == 0xFFFFFFFF)
{
@@ -428,7 +415,7 @@ SOUND is nil to use the normal beep. */)
}
static void
-w32con_reset_terminal_modes (void)
+w32con_reset_terminal_modes (struct terminal *t)
{
#ifdef USE_SEPARATE_SCREEN
SetConsoleActiveScreenBuffer (prev_screen);
@@ -439,7 +426,7 @@ w32con_reset_terminal_modes (void)
}
static void
-w32con_set_terminal_modes (void)
+w32con_set_terminal_modes (struct terminal *t)
{
CONSOLE_CURSOR_INFO cci;
@@ -473,7 +460,7 @@ w32con_update_end (struct frame * f)
}
static void
-w32con_set_terminal_window (int size)
+w32con_set_terminal_window (struct frame *f, int size)
{
}
@@ -547,28 +534,38 @@ vga_stdcolor_name (int idx)
typedef int (*term_hook) ();
void
-initialize_w32_display (void)
+initialize_w32_display (struct terminal *term)
{
CONSOLE_SCREEN_BUFFER_INFO info;
- cursor_to_hook = w32con_move_cursor;
- raw_cursor_to_hook = w32con_move_cursor;
- clear_to_end_hook = w32con_clear_to_end;
- clear_frame_hook = w32con_clear_frame;
- clear_end_of_line_hook = w32con_clear_end_of_line;
- ins_del_lines_hook = w32con_ins_del_lines;
- insert_glyphs_hook = w32con_insert_glyphs;
- write_glyphs_hook = w32con_write_glyphs;
- delete_glyphs_hook = w32con_delete_glyphs;
- ring_bell_hook = w32_sys_ring_bell;
- reset_terminal_modes_hook = w32con_reset_terminal_modes;
- set_terminal_modes_hook = w32con_set_terminal_modes;
- set_terminal_window_hook = w32con_set_terminal_window;
- update_begin_hook = w32con_update_begin;
- update_end_hook = w32con_update_end;
-
- read_socket_hook = w32_console_read_socket;
- mouse_position_hook = w32_console_mouse_position;
+ term->rif = 0; /* No window based redisplay on the console. */
+ term->cursor_to_hook = w32con_move_cursor;
+ term->raw_cursor_to_hook = w32con_move_cursor;
+ term->clear_to_end_hook = w32con_clear_to_end;
+ term->clear_frame_hook = w32con_clear_frame;
+ term->clear_end_of_line_hook = w32con_clear_end_of_line;
+ term->ins_del_lines_hook = w32con_ins_del_lines;
+ term->insert_glyphs_hook = w32con_insert_glyphs;
+ term->write_glyphs_hook = w32con_write_glyphs;
+ term->delete_glyphs_hook = w32con_delete_glyphs;
+ term->ring_bell_hook = w32_sys_ring_bell;
+ term->reset_terminal_modes_hook = w32con_reset_terminal_modes;
+ term->set_terminal_modes_hook = w32con_set_terminal_modes;
+ term->set_terminal_window_hook = w32con_set_terminal_window;
+ term->update_begin_hook = w32con_update_begin;
+ term->update_end_hook = w32con_update_end;
+
+ term->read_socket_hook = w32_console_read_socket;
+ term->mouse_position_hook = w32_console_mouse_position;
+
+ /* The following are not used on the console. */
+ term->frame_rehighlight_hook = 0;
+ term->frame_raise_lower_hook = 0;
+ term->set_vertical_scroll_bar_hook = 0;
+ term->condemn_scroll_bars_hook = 0;
+ term->redeem_scroll_bar_hook = 0;
+ term->judge_scroll_bars_hook = 0;
+ term->frame_up_to_date_hook = 0;
/* Initialize interrupt_handle. */
init_crit ();
@@ -633,7 +630,6 @@ initialize_w32_display (void)
GetConsoleScreenBufferInfo (cur_screen, &info);
- meta_key = 1;
char_attr_normal = info.wAttributes;
/* Determine if the info returned by GetConsoleScreenBufferInfo
@@ -674,6 +670,7 @@ initialize_w32_display (void)
}
+
DEFUN ("set-screen-color", Fset_screen_color, Sset_screen_color, 2, 2, 0,
doc: /* Set screen colors. */)
(foreground, background)
diff --git a/src/w32fns.c b/src/w32fns.c
index a006531f2b3..491ccedeb13 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -135,7 +135,10 @@ int w32_mouse_button_tolerance;
int w32_mouse_move_interval;
/* Flag to indicate if XBUTTON events should be passed on to Windows. */
-int w32_pass_extra_mouse_buttons_to_system;
+static int w32_pass_extra_mouse_buttons_to_system;
+
+/* Flag to indicate if media keys should be passed on to Windows. */
+static int w32_pass_multimedia_buttons_to_system;
/* Non nil if no window manager is in use. */
Lisp_Object Vx_no_window_manager;
@@ -174,14 +177,14 @@ Lisp_Object Vx_pixel_size_width_font_regexp;
Lisp_Object Vw32_bdf_filename_alist;
/* A flag to control whether fonts are matched strictly or not. */
-int w32_strict_fontnames;
+static int w32_strict_fontnames;
/* A flag to control whether we should only repaint if GetUpdateRect
indicates there is an update region. */
-int w32_strict_painting;
+static int w32_strict_painting;
/* Associative list linking character set strings to Windows codepages. */
-Lisp_Object Vw32_charset_info_alist;
+static Lisp_Object Vw32_charset_info_alist;
/* VIETNAMESE_CHARSET is not defined in some versions of MSVC. */
#ifndef VIETNAMESE_CHARSET
@@ -810,7 +813,7 @@ DEFUN ("w32-default-color-map", Fw32_default_color_map, Sw32_default_color_map,
return (cmap);
}
-Lisp_Object
+static Lisp_Object
w32_to_x_color (rgb)
Lisp_Object rgb;
{
@@ -838,11 +841,11 @@ w32_color_map_lookup (colorname)
BLOCK_INPUT;
- for (tail = Vw32_color_map; !NILP (tail); tail = Fcdr (tail))
+ for (tail = Vw32_color_map; CONSP (tail); tail = XCDR (tail))
{
register Lisp_Object elt, tem;
- elt = Fcar (tail);
+ elt = XCAR (tail);
if (!CONSP (elt)) continue;
tem = Fcar (elt);
@@ -1811,10 +1814,8 @@ x_set_tool_bar_lines (f, value, oldval)
below the menu bar. */
if (FRAME_W32_WINDOW (f) && FRAME_TOOL_BAR_LINES (f) == 0)
{
- updating_frame = f;
- clear_frame ();
+ clear_frame (f);
clear_current_matrices (f);
- updating_frame = NULL;
}
/* If the tool bar gets smaller, the internal border below it
@@ -2014,7 +2015,7 @@ w32_load_cursor (LPCTSTR name)
extern LRESULT CALLBACK w32_wnd_proc ();
-BOOL
+static BOOL
w32_init_class (hinst)
HINSTANCE hinst;
{
@@ -2034,7 +2035,7 @@ w32_init_class (hinst)
return (RegisterClass (&wc));
}
-HWND
+static HWND
w32_createscrollbar (f, bar)
struct frame *f;
struct scroll_bar * bar;
@@ -2051,7 +2052,7 @@ w32_createscrollbar (f, bar)
NULL));
}
-void
+static void
w32_createwindow (f)
struct frame *f;
{
@@ -2121,7 +2122,7 @@ w32_createwindow (f)
}
}
-void
+static void
my_post_msg (wmsg, hwnd, msg, wParam, lParam)
W32Msg * wmsg;
HWND hwnd;
@@ -2353,7 +2354,7 @@ w32_key_to_modifier (int key)
return 0;
}
-unsigned int
+static unsigned int
w32_get_modifiers ()
{
return ((modifier_set (VK_SHIFT) ? shift_modifier : 0) |
@@ -2427,7 +2428,7 @@ map_keypad_keys (unsigned int virt_key, unsigned int extended)
but Emacs should grab instead. Not directly visible to lisp, to
simplify synchronization. Each item is an integer encoding a virtual
key code and modifier combination to capture. */
-Lisp_Object w32_grabbed_keys;
+static Lisp_Object w32_grabbed_keys;
#define HOTKEY(vk, mods) make_number (((vk) & 255) | ((mods) << 8))
#define HOTKEY_ID(k) (XFASTINT (k) & 0xbfff)
@@ -2666,7 +2667,7 @@ complete_deferred_msg (HWND hwnd, UINT msg, LRESULT result)
PostThreadMessage (dwWindowsThreadId, WM_NULL, 0, 0);
}
-void
+static void
cancel_all_deferred_msgs ()
{
deferred_msg * item;
@@ -3370,16 +3371,24 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
return 0;
case WM_MOUSEWHEEL:
+ case WM_DROPFILES:
wmsg.dwModifiers = w32_get_modifiers ();
my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
signal_user_input ();
return 0;
- case WM_DROPFILES:
+ case WM_APPCOMMAND:
+ if (w32_pass_multimedia_buttons_to_system)
+ goto dflt;
+ /* Otherwise, pass to lisp, the same way we do with mousehwheel. */
+ case WM_MOUSEHWHEEL:
wmsg.dwModifiers = w32_get_modifiers ();
my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
signal_user_input ();
- return 0;
+ /* Non-zero must be returned when WM_MOUSEHWHEEL messages are
+ handled, to prevent the system trying to handle it by faking
+ scroll bar events. */
+ return 1;
case WM_TIMER:
/* Flush out saved messages if necessary. */
@@ -4165,7 +4174,7 @@ This function is an internal primitive--use `make-frame' instead. */)
display = Qnil;
dpyinfo = check_x_display_info (display);
#ifdef MULTI_KBOARD
- kb = dpyinfo->kboard;
+ kb = dpyinfo->terminal->kboard;
#else
kb = &the_only_kboard;
#endif
@@ -4213,6 +4222,9 @@ This function is an internal primitive--use `make-frame' instead. */)
/* By default, make scrollbars the system standard width. */
FRAME_CONFIG_SCROLL_BAR_WIDTH (f) = GetSystemMetrics (SM_CXVSCROLL);
+ f->terminal = dpyinfo->terminal;
+ f->terminal->reference_count++;
+
f->output_method = output_w32;
f->output_data.w32 =
(struct w32_output *) xmalloc (sizeof (struct w32_output));
@@ -4427,6 +4439,20 @@ This function is an internal primitive--use `make-frame' instead. */)
/* Must have been Qnil. */
;
}
+
+ /* Initialize `default-minibuffer-frame' in case this is the first
+ frame on this terminal. */
+ if (FRAME_HAS_MINIBUF_P (f)
+ && (!FRAMEP (kb->Vdefault_minibuffer_frame)
+ || !FRAME_LIVE_P (XFRAME (kb->Vdefault_minibuffer_frame))))
+ kb->Vdefault_minibuffer_frame = frame;
+
+ /* All remaining specified parameters, which have not been "used"
+ by x_get_arg and friends, now go in the misc. alist of the frame. */
+ for (tem = parameters; CONSP (tem); tem = XCDR (tem))
+ if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
+ f->param_alist = Fcons (XCAR (tem), f->param_alist);
+
UNGCPRO;
/* Make sure windows on this frame appear in calls to next-window
@@ -4452,7 +4478,7 @@ x_get_focus_frame (frame)
return xfocus;
}
-DEFUN ("w32-focus-frame", Fw32_focus_frame, Sw32_focus_frame, 1, 1, 0,
+DEFUN ("x-focus-frame", Fx_focus_frame, Sx_focus_frame, 1, 1, 0,
doc: /* Give FRAME input focus, raising to foreground if necessary. */)
(frame)
Lisp_Object frame;
@@ -5334,9 +5360,9 @@ w32_to_x_font (lplogfont, lpxstr, len, specific_charset)
if (lplogfont->lfHeight)
{
- sprintf (height_pixels, "%u", abs (lplogfont->lfHeight));
+ sprintf (height_pixels, "%u", eabs (lplogfont->lfHeight));
sprintf (height_dpi, "%u",
- abs (lplogfont->lfHeight) * 720 / display_resy);
+ eabs (lplogfont->lfHeight) * 720 / display_resy);
}
else
{
@@ -5558,7 +5584,7 @@ x_to_w32_font (lpxstr, lplogfont)
}
/* This makes TrueType fonts work better. */
- lplogfont->lfHeight = - abs (lplogfont->lfHeight);
+ lplogfont->lfHeight = - eabs (lplogfont->lfHeight);
return (TRUE);
}
@@ -6703,8 +6729,10 @@ terminate Emacs if we can't open the connection. */)
if (! NILP (xrm_string))
CHECK_STRING (xrm_string);
+#if 0
if (! EQ (Vwindow_system, intern ("w32")))
error ("Not using Microsoft Windows");
+#endif
/* Allow color mapping to be defined externally; first look in user's
HOME directory, then in Emacs etc dir for a file called rgb.txt. */
@@ -6809,7 +6837,7 @@ DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
Lisp_Object tail, result;
result = Qnil;
- for (tail = w32_display_name_list; ! NILP (tail); tail = XCDR (tail))
+ for (tail = w32_display_name_list; CONSP (tail); tail = XCDR (tail))
result = Fcons (XCAR (XCAR (tail)), result);
return result;
@@ -7206,7 +7234,7 @@ x_create_tip_frame (dpyinfo, parms, text)
Vx_resource_name = Vinvocation_name;
#ifdef MULTI_KBOARD
- kb = dpyinfo->kboard;
+ kb = dpyinfo->terminal->kboard;
#else
kb = &the_only_kboard;
#endif
@@ -7244,6 +7272,8 @@ x_create_tip_frame (dpyinfo, parms, text)
the frame is live, as per FRAME_LIVE_P. If we get a signal
from this point on, x_destroy_window might screw up reference
counts etc. */
+ f->terminal = dpyinfo->terminal;
+ f->terminal->reference_count++;
f->output_method = output_w32;
f->output_data.w32 =
(struct w32_output *) xmalloc (sizeof (struct w32_output));
@@ -8783,6 +8813,29 @@ If this variable is non-nil, Emacs will pass them on, allowing the
system to handle them. */);
w32_pass_extra_mouse_buttons_to_system = 0;
+ DEFVAR_BOOL ("w32-pass-multimedia-buttons-to-system",
+ &w32_pass_multimedia_buttons_to_system,
+ doc: /* If non-nil, media buttons are passed to Windows.
+Some modern keyboards contain buttons for controlling media players, web
+browsers and other applications. Generally these buttons are handled on a
+system wide basis, but by setting this to nil they are made available
+to Emacs for binding. Depending on your keyboard, additional keys that
+may be available are:
+
+browser-back, browser-forward, browser-refresh, browser-stop,
+browser-search, browser-favorites, browser-home,
+mail, mail-reply, mail-forward, mail-send,
+app-1, app-2,
+help, find, new, open, close, save, print, undo, redo, copy, cut, paste,
+spell-check, correction-list, toggle-dictate-command,
+media-next, media-previous, media-stop, media-play-pause, media-select,
+media-play, media-pause, media-record, media-fast-forward, media-rewind,
+media-channel-up, media-channel-down,
+volume-mute, volume-up, volume-down,
+mic-volume-mute, mic-volume-down, mic-volume-up, mic-toggle,
+bass-down, bass-boost, bass-up, treble-down, treble-up */);
+ w32_pass_multimedia_buttons_to_system = 1;
+
DEFVAR_LISP ("x-pointer-shape", &Vx_pointer_shape,
doc: /* The shape of the pointer when over text.
Changing the value does not affect existing frames
@@ -8982,10 +9035,10 @@ versions of Windows) characters. */);
defsubr (&Sx_close_connection);
defsubr (&Sx_display_list);
defsubr (&Sx_synchronize);
+ defsubr (&Sx_focus_frame);
/* W32 specific functions */
- defsubr (&Sw32_focus_frame);
defsubr (&Sw32_select_font);
defsubr (&Sw32_define_rgb_color);
defsubr (&Sw32_default_color_map);
@@ -9067,8 +9120,6 @@ globals_of_w32fns ()
#undef abort
-void w32_abort (void) NO_RETURN;
-
void
w32_abort ()
{
diff --git a/src/w32inevt.c b/src/w32inevt.c
index fa2d34c2998..17cfd384400 100644
--- a/src/w32inevt.c
+++ b/src/w32inevt.c
@@ -643,7 +643,9 @@ maybe_generate_resize_event ()
}
int
-w32_console_read_socket (int sd, int expected, struct input_event *hold_quit)
+w32_console_read_socket (struct terminal *terminal,
+ int expected,
+ struct input_event *hold_quit)
{
BOOL no_events = TRUE;
int nev, ret = 0, add;
diff --git a/src/w32inevt.h b/src/w32inevt.h
index 53f36e3a348..08d85a0b2e4 100644
--- a/src/w32inevt.h
+++ b/src/w32inevt.h
@@ -22,7 +22,7 @@ Boston, MA 02110-1301, USA. */
#ifndef EMACS_W32INEVT_H
#define EMACS_W32INEVT_H
-extern int w32_console_read_socket (int sd, int numchars,
+extern int w32_console_read_socket (struct terminal *term, int numchars,
struct input_event *hold_quit);
extern void w32_console_mouse_position (FRAME_PTR *f, int insist,
Lisp_Object *bar_window,
diff --git a/src/w32menu.c b/src/w32menu.c
index f0d582d388a..a0ce8c655cb 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -20,15 +20,16 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include <config.h>
-#include <signal.h>
+#include <signal.h>
#include <stdio.h>
#include <mbstring.h>
+
#include "lisp.h"
-#include "termhooks.h"
#include "keyboard.h"
#include "keymap.h"
#include "frame.h"
+#include "termhooks.h"
#include "window.h"
#include "blockinput.h"
#include "buffer.h"
@@ -317,14 +318,8 @@ discard_menu_items ()
static void
grow_menu_items ()
{
- Lisp_Object old;
- int old_size = menu_items_allocated;
- old = menu_items;
-
menu_items_allocated *= 2;
- menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
- bcopy (XVECTOR (old)->contents, XVECTOR (menu_items)->contents,
- old_size * sizeof (Lisp_Object));
+ menu_items = larger_vector (menu_items, menu_items_allocated, Qnil);
}
/* Begin a submenu. */
@@ -572,10 +567,10 @@ list_of_panes (menu)
init_menu_items ();
- for (tail = menu; !NILP (tail); tail = Fcdr (tail))
+ for (tail = menu; CONSP (tail); tail = XCDR (tail))
{
Lisp_Object elt, pane_name, pane_data;
- elt = Fcar (tail);
+ elt = XCAR (tail);
pane_name = Fcar (elt);
CHECK_STRING (pane_name);
push_menu_pane (pane_name, Qnil);
@@ -595,9 +590,9 @@ list_of_items (pane)
{
Lisp_Object tail, item, item1;
- for (tail = pane; !NILP (tail); tail = Fcdr (tail))
+ for (tail = pane; CONSP (tail); tail = XCDR (tail))
{
- item = Fcar (tail);
+ item = XCAR (tail);
if (STRINGP (item))
push_menu_item (item, Qnil, Qnil, Qt, Qnil, Qnil, Qnil, Qnil);
else if (NILP (item))
@@ -674,8 +669,8 @@ cached information about equivalent key sequences. */)
enum scroll_bar_part part;
unsigned long time;
- if (mouse_position_hook)
- (*mouse_position_hook) (&new_f, 1, &bar_window,
+ if (FRAME_TERMINAL (new_f)->mouse_position_hook)
+ (*FRAME_TERMINAL (new_f)->mouse_position_hook) (&new_f, 1, &bar_window,
&part, &x, &y, &time);
if (new_f != 0)
XSETFRAME (window, new_f);
diff --git a/src/w32term.c b/src/w32term.c
index a2d64ba581f..4f4701b5f23 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -58,8 +58,6 @@ Boston, MA 02110-1301, USA. */
#include "composite.h"
#include "coding.h"
-#define abs(x) ((x) < 0 ? -(x) : (x))
-
/* Fringe bitmaps. */
@@ -218,10 +216,9 @@ extern int errno;
extern EMACS_INT extra_keyboard_modifiers;
static void x_update_window_end P_ ((struct window *, int, int));
-void w32_delete_display P_ ((struct w32_display_info *));
static void w32_handle_tool_bar_click P_ ((struct frame *,
struct input_event *));
-void w32_define_cursor P_ ((Window, Cursor));
+static void w32_define_cursor P_ ((Window, Cursor));
void x_lower_frame P_ ((struct frame *));
void x_scroll_bar_clear P_ ((struct frame *));
@@ -230,14 +227,14 @@ void x_raise_frame P_ ((struct frame *));
void x_set_window_size P_ ((struct frame *, int, int, int));
void x_wm_set_window_state P_ ((struct frame *, int));
void x_wm_set_icon_pixmap P_ ((struct frame *, int));
-void w32_initialize P_ ((void));
+static void w32_initialize P_ ((void));
static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
int x_compute_min_glyph_bounds P_ ((struct frame *));
static void x_update_end P_ ((struct frame *));
static void w32_frame_up_to_date P_ ((struct frame *));
-static void w32_set_terminal_modes P_ ((void));
-static void w32_reset_terminal_modes P_ ((void));
-static void x_clear_frame P_ ((void));
+static void w32_set_terminal_modes P_ ((struct terminal *));
+static void w32_reset_terminal_modes P_ ((struct terminal *));
+static void x_clear_frame P_ ((struct frame *));
static void frame_highlight P_ ((struct frame *));
static void frame_unhighlight P_ ((struct frame *));
static void x_new_focus_frame P_ ((struct w32_display_info *,
@@ -683,6 +680,60 @@ w32_draw_fringe_bitmap (w, row, p)
hdc = get_frame_dc (f);
+ if (!p->overlay_p)
+ {
+ int bx = p->bx, by = p->by, nx = p->nx, ny = p->ny;
+
+ /* If the fringe is adjacent to the left (right) scroll bar of a
+ leftmost (rightmost, respectively) window, then extend its
+ background to the gap between the fringe and the bar. */
+ if ((WINDOW_LEFTMOST_P (w)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
+ || (WINDOW_RIGHTMOST_P (w)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w)))
+ {
+ int sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w);
+
+ if (sb_width > 0)
+ {
+ int left = WINDOW_SCROLL_BAR_AREA_X (w);
+ int width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w)
+ * FRAME_COLUMN_WIDTH (f));
+
+ if (bx < 0)
+ {
+ /* Bitmap fills the fringe. */
+ if (left + width == p->x)
+ bx = left + sb_width;
+ else if (p->x + p->wd == left)
+ bx = left;
+ if (bx >= 0)
+ {
+ int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);
+
+ nx = width - sb_width;
+ by = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
+ row->y));
+ ny = row->visible_height;
+ }
+ }
+ else
+ {
+ if (left + width == bx)
+ {
+ bx = left + sb_width;
+ nx += width - sb_width;
+ }
+ else if (bx + nx == left)
+ nx += width - sb_width;
+ }
+ }
+ }
+
+ if (bx >= 0 && nx > 0)
+ w32_fill_area (f, hdc, face->background, bx, by, nx, ny);
+ }
+
/* Must clip because of partially visible lines. */
rowY = WINDOW_TO_FRAME_PIXEL_Y (w, row->y);
if (p->y < rowY)
@@ -700,12 +751,6 @@ w32_draw_fringe_bitmap (w, row, p)
else
w32_clip_to_row (w, row, -1, hdc);
- if (p->bx >= 0 && !p->overlay_p)
- {
- w32_fill_area (f, hdc, face->background,
- p->bx, p->by, p->nx, p->ny);
- }
-
if (p->which && p->which < max_fringe_bmp)
{
HBITMAP pixmap = fringe_bmp[p->which];
@@ -801,7 +846,7 @@ w32_destroy_fringe_bitmap (which)
rarely happens). */
static void
-w32_set_terminal_modes (void)
+w32_set_terminal_modes (struct terminal *term)
{
}
@@ -809,7 +854,7 @@ w32_set_terminal_modes (void)
the W32 windows go away, and suspending requires no action. */
static void
-w32_reset_terminal_modes (void)
+w32_reset_terminal_modes (struct terminal *term)
{
}
@@ -1066,7 +1111,8 @@ w32_cache_char_metrics (font)
/* Determine if a font is double byte. */
-int w32_font_is_double_byte (XFontStruct *font)
+static int
+w32_font_is_double_byte (XFontStruct *font)
{
return font->double_byte_p;
}
@@ -1543,7 +1589,7 @@ x_draw_glyph_string_foreground (s)
of S to the right of that box line. */
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p)
- x = s->x + abs (s->face->box_line_width);
+ x = s->x + eabs (s->face->box_line_width);
else
x = s->x;
@@ -1615,7 +1661,7 @@ x_draw_composite_glyph_string_foreground (s)
of S to the right of that box line. */
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p)
- x = s->x + abs (s->face->box_line_width);
+ x = s->x + eabs (s->face->box_line_width);
else
x = s->x;
@@ -1945,7 +1991,7 @@ x_draw_glyph_string_box (s)
? s->first_glyph
: s->first_glyph + s->nchars - 1);
- width = abs (s->face->box_line_width);
+ width = eabs (s->face->box_line_width);
raised_p = s->face->box == FACE_RAISED_BOX;
left_x = s->x;
right_x = ((s->row->full_width_p && s->extends_to_end_of_line_p
@@ -1991,7 +2037,7 @@ x_draw_image_foreground (s)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -2084,7 +2130,7 @@ x_draw_image_relief (s)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -2101,7 +2147,7 @@ x_draw_image_relief (s)
}
else
{
- thick = abs (s->img->relief);
+ thick = eabs (s->img->relief);
raised_p = s->img->relief > 0;
}
@@ -2138,7 +2184,7 @@ w32_draw_image_foreground_1 (s, pixmap)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -2250,7 +2296,7 @@ x_draw_image_glyph_string (s)
struct glyph_string *s;
{
int x, y;
- int box_line_hwidth = abs (s->face->box_line_width);
+ int box_line_hwidth = eabs (s->face->box_line_width);
int box_line_vwidth = max (s->face->box_line_width, 0);
int height;
HBITMAP pixmap = 0;
@@ -2548,7 +2594,7 @@ x_draw_glyph_string (s)
if (s->face->overline_color_defaulted_p)
{
w32_fill_area (s->f, s->hdc, s->gc->foreground, s->x,
- s->y + dy, s->background_width, h);
+ s->y + dy, s->background_width, h);
}
else
{
@@ -2607,16 +2653,10 @@ w32_shift_glyphs_for_insert (f, x, y, width, height, shift_by)
for X frames. */
static void
-x_delete_glyphs (n)
+x_delete_glyphs (f, n)
+ struct frame *f;
register int n;
{
- struct frame *f;
-
- if (updating_frame)
- f = updating_frame;
- else
- f = SELECTED_FRAME ();
-
if (! FRAME_W32_P (f))
return;
@@ -2628,15 +2668,8 @@ x_delete_glyphs (n)
frame. Otherwise clear the selected frame. */
static void
-x_clear_frame ()
+x_clear_frame (struct frame *f)
{
- struct frame *f;
-
- if (updating_frame)
- f = updating_frame;
- else
- f = SELECTED_FRAME ();
-
if (! FRAME_W32_P (f))
return;
@@ -2663,18 +2696,14 @@ x_clear_frame ()
/* Make audible bell. */
static void
-w32_ring_bell (void)
+w32_ring_bell (struct frame *f)
{
- struct frame *f;
-
- f = SELECTED_FRAME ();
-
BLOCK_INPUT;
if (FRAME_W32_P (f) && visible_bell)
{
int i;
- HWND hwnd = FRAME_W32_WINDOW (SELECTED_FRAME ());
+ HWND hwnd = FRAME_W32_WINDOW (f);
for (i = 0; i < 5; i++)
{
@@ -2684,7 +2713,7 @@ w32_ring_bell (void)
FlashWindow (hwnd, FALSE);
}
else
- w32_sys_ring_bell ();
+ w32_sys_ring_bell (f);
UNBLOCK_INPUT;
}
@@ -2711,16 +2740,10 @@ w32_set_terminal_window (n)
lines or deleting -N lines at vertical position VPOS. */
static void
-x_ins_del_lines (vpos, n)
+x_ins_del_lines (f, vpos, n)
+ struct frame *f;
int vpos, n;
{
- struct frame *f;
-
- if (updating_frame)
- f = updating_frame;
- else
- f = SELECTED_FRAME ();
-
if (! FRAME_W32_P (f))
return;
@@ -3125,7 +3148,8 @@ construct_mouse_wheel (result, msg, f)
POINT p;
int delta;
- result->kind = WHEEL_EVENT;
+ result->kind = msg->msg.message == WM_MOUSEHWHEEL ? HORIZ_WHEEL_EVENT
+ : WHEEL_EVENT;
result->code = 0;
result->timestamp = msg->msg.time;
@@ -3277,7 +3301,7 @@ redo_mouse_highlight ()
HIWORD (last_mouse_motion_event.lParam));
}
-void
+static void
w32_define_cursor (window, cursor)
Window window;
Cursor cursor;
@@ -3544,7 +3568,7 @@ w32_set_scroll_bar_thumb (bar, portion, position, whole)
Scroll bars, general
************************************************************************/
-HWND
+static HWND
my_create_scrollbar (f, bar)
struct frame * f;
struct scroll_bar * bar;
@@ -3637,6 +3661,7 @@ x_scroll_bar_create (w, top, left, width, height)
XSETINT (bar->start, 0);
XSETINT (bar->end, 0);
bar->dragging = Qnil;
+ bar->fringe_extended_p = Qnil;
/* Requires geometry to be set before call to create the real window */
@@ -3700,6 +3725,7 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
struct scroll_bar *bar;
int top, height, left, sb_left, width, sb_width;
int window_y, window_height;
+ int fringe_extended_p;
/* Get window dimensions. */
window_box (w, -1, 0, &window_y, 0, &window_height);
@@ -3719,9 +3745,20 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
/* Compute the left edge of the scroll bar. */
if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
- sb_left = left + width - sb_width - (width - sb_width) / 2;
+ sb_left = left + (WINDOW_RIGHTMOST_P (w) ? width - sb_width : 0);
+ else
+ sb_left = left + (WINDOW_LEFTMOST_P (w) ? 0 : width - sb_width);
+
+ if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
+ fringe_extended_p = (WINDOW_LEFTMOST_P (w)
+ && WINDOW_LEFT_FRINGE_WIDTH (w)
+ && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
+ || WINDOW_LEFT_MARGIN_COLS (w) == 0));
else
- sb_left = left + (width - sb_width) / 2;
+ fringe_extended_p = (WINDOW_RIGHTMOST_P (w)
+ && WINDOW_RIGHT_FRINGE_WIDTH (w)
+ && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
+ || WINDOW_RIGHT_MARGIN_COLS (w) == 0));
/* Does the scroll bar exist yet? */
if (NILP (w->vertical_scroll_bar))
@@ -3731,7 +3768,10 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
if (width > 0 && height > 0)
{
hdc = get_frame_dc (f);
- w32_clear_area (f, hdc, left, top, width, height);
+ if (fringe_extended_p)
+ w32_clear_area (f, hdc, sb_left, top, sb_width, height);
+ else
+ w32_clear_area (f, hdc, left, top, width, height);
release_frame_dc (f, hdc);
}
UNBLOCK_INPUT;
@@ -3750,7 +3790,8 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
if ( XINT (bar->left) == sb_left
&& XINT (bar->top) == top
&& XINT (bar->width) == sb_width
- && XINT (bar->height) == height )
+ && XINT (bar->height) == height
+ && !NILP (bar->fringe_extended_p) == fringe_extended_p )
{
/* Redraw after clear_frame. */
if (!my_show_window (f, hwnd, SW_NORMAL))
@@ -3767,11 +3808,10 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
hdc = get_frame_dc (f);
/* Since Windows scroll bars are smaller than the space reserved
for them on the frame, we have to clear "under" them. */
- w32_clear_area (f, hdc,
- left,
- top,
- width,
- height);
+ if (fringe_extended_p)
+ w32_clear_area (f, hdc, sb_left, top, sb_width, height);
+ else
+ w32_clear_area (f, hdc, left, top, width, height);
release_frame_dc (f, hdc);
}
/* Make sure scroll bar is "visible" before moving, to ensure the
@@ -3801,6 +3841,8 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
UNBLOCK_INPUT;
}
}
+ bar->fringe_extended_p = fringe_extended_p ? Qt : Qnil;
+
w32_set_scroll_bar_thumb (bar, portion, position, whole);
XSETVECTOR (w->vertical_scroll_bar, bar);
@@ -3928,7 +3970,7 @@ w32_scroll_bar_handle_click (bar, msg, emacs_event)
if (! GC_WINDOWP (bar->window))
abort ();
- emacs_event->kind = W32_SCROLL_BAR_CLICK_EVENT;
+ emacs_event->kind = SCROLL_BAR_CLICK_EVENT;
emacs_event->code = 0;
/* not really meaningful to distinguish up/down */
emacs_event->modifiers = msg->dwModifiers;
@@ -4140,7 +4182,7 @@ static short temp_buffer[100];
Some of these messages are reposted back to the message queue since the
system calls the windows proc directly in a context where we cannot return
- the data nor can we guarantee the state we are in. So if we dispatch them
+ the data nor can we guarantee the state we are in. So if we dispatch them
we will get into an infinite loop. To prevent this from ever happening we
will set a variable to indicate we are in the read_socket call and indicate
which message we are processing since the windows proc gets called
@@ -4295,6 +4337,29 @@ w32_read_socket (sd, expected, hold_quit)
}
break;
+ case WM_APPCOMMAND:
+ f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
+
+ if (f && !f->iconified)
+ {
+ if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)
+ && !EQ (f->tool_bar_window, dpyinfo->mouse_face_window))
+ {
+ clear_mouse_face (dpyinfo);
+ dpyinfo->mouse_face_hidden = 1;
+ }
+
+ if (temp_index == sizeof temp_buffer / sizeof (short))
+ temp_index = 0;
+ temp_buffer[temp_index++] = msg.msg.wParam;
+ inev.kind = MULTIMEDIA_KEY_EVENT;
+ inev.code = GET_APPCOMMAND_LPARAM(msg.msg.lParam);
+ inev.modifiers = msg.dwModifiers;
+ XSETFRAME (inev.frame_or_window, f);
+ inev.timestamp = msg.msg.time;
+ }
+ break;
+
case WM_MOUSEMOVE:
/* Ignore non-movement. */
{
@@ -4449,6 +4514,7 @@ w32_read_socket (sd, expected, hold_quit)
}
case WM_MOUSEWHEEL:
+ case WM_MOUSEHWHEEL:
{
if (dpyinfo->grabbed && last_mouse_frame
&& FRAME_LIVE_P (last_mouse_frame))
@@ -5891,8 +5957,8 @@ x_free_frame_resources (f)
free_frame_menubar (f);
- unload_color (f, f->output_data.x->foreground_pixel);
- unload_color (f, f->output_data.x->background_pixel);
+ unload_color (f, FRAME_FOREGROUND_PIXEL (f));
+ unload_color (f, FRAME_BACKGROUND_PIXEL (f));
unload_color (f, f->output_data.w32->cursor_pixel);
unload_color (f, f->output_data.w32->cursor_foreground_pixel);
unload_color (f, f->output_data.w32->border_pixel);
@@ -5931,14 +5997,13 @@ x_free_frame_resources (f)
/* Destroy the window of frame F. */
-
+void
x_destroy_window (f)
struct frame *f;
{
struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f);
x_free_frame_resources (f);
-
dpyinfo->reference_count--;
}
@@ -6145,7 +6210,7 @@ w32_initialize_display_info (display_name)
/* Create an xrdb-style database of resources to supercede registry settings.
The database is just a concatenation of C strings, finished by an additional
- \0. The string are submitted to some basic normalization, so
+ \0. The strings are submitted to some basic normalization, so
[ *]option[ *]:[ *]value...
@@ -6198,6 +6263,133 @@ w32_make_rdb (xrm_option)
return buffer;
}
+void
+x_flush (struct frame * f)
+{ /* Nothing to do */ }
+
+
+extern frame_parm_handler w32_frame_parm_handlers[];
+
+static struct redisplay_interface w32_redisplay_interface =
+{
+ w32_frame_parm_handlers,
+ x_produce_glyphs,
+ x_write_glyphs,
+ x_insert_glyphs,
+ x_clear_end_of_line,
+ x_scroll_run,
+ x_after_update_window_line,
+ x_update_window_begin,
+ x_update_window_end,
+ x_cursor_to,
+ x_flush,
+ 0, /* flush_display_optional */
+ x_clear_window_mouse_face,
+ w32_get_glyph_overhangs,
+ x_fix_overlapping_area,
+ w32_draw_fringe_bitmap,
+ w32_define_fringe_bitmap,
+ w32_destroy_fringe_bitmap,
+ w32_per_char_metric,
+ w32_encode_char,
+ NULL, /* w32_compute_glyph_string_overhangs */
+ x_draw_glyph_string,
+ w32_define_frame_cursor,
+ w32_clear_frame_area,
+ w32_draw_window_cursor,
+ w32_draw_vertical_window_border,
+ w32_shift_glyphs_for_insert
+};
+
+static void x_delete_terminal (struct terminal *term);
+
+static struct terminal *
+w32_create_terminal (struct w32_display_info *dpyinfo)
+{
+ struct terminal *terminal;
+
+ terminal = create_terminal ();
+
+ terminal->type = output_w32;
+ terminal->display_info.w32 = dpyinfo;
+ dpyinfo->terminal = terminal;
+
+ /* MSVC does not type K&R functions with no arguments correctly, and
+ so we must explicitly cast them. */
+ terminal->clear_frame_hook = x_clear_frame;
+ terminal->ins_del_lines_hook = x_ins_del_lines;
+ terminal->delete_glyphs_hook = x_delete_glyphs;
+ terminal->ring_bell_hook = w32_ring_bell;
+ terminal->reset_terminal_modes_hook = w32_reset_terminal_modes;
+ terminal->set_terminal_modes_hook = w32_set_terminal_modes;
+ terminal->update_begin_hook = x_update_begin;
+ terminal->update_end_hook = x_update_end;
+ terminal->set_terminal_window_hook = w32_set_terminal_window;
+ terminal->read_socket_hook = w32_read_socket;
+ terminal->frame_up_to_date_hook = w32_frame_up_to_date;
+ terminal->mouse_position_hook = w32_mouse_position;
+ terminal->frame_rehighlight_hook = w32_frame_rehighlight;
+ terminal->frame_raise_lower_hook = w32_frame_raise_lower;
+ // terminal->fullscreen_hook = XTfullscreen_hook;
+ terminal->set_vertical_scroll_bar_hook = w32_set_vertical_scroll_bar;
+ terminal->condemn_scroll_bars_hook = w32_condemn_scroll_bars;
+ terminal->redeem_scroll_bar_hook = w32_redeem_scroll_bar;
+ terminal->judge_scroll_bars_hook = w32_judge_scroll_bars;
+
+ terminal->delete_frame_hook = x_destroy_window;
+ terminal->delete_terminal_hook = x_delete_terminal;
+
+ terminal->rif = &w32_redisplay_interface;
+ terminal->scroll_region_ok = 1; /* We'll scroll partial frames. */
+ terminal->char_ins_del_ok = 1;
+ terminal->line_ins_del_ok = 1; /* We'll just blt 'em. */
+ terminal->fast_clear_end_of_line = 1; /* X does this well. */
+ terminal->memory_below_frame = 0; /* We don't remember what scrolls
+ off the bottom. */
+
+#ifdef MULTI_KBOARD
+ /* We don't yet support separate terminals on W32, so don't try to share
+ keyboards between virtual terminals that are on the same physical
+ terminal like X does. */
+ terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
+ init_kboard (terminal->kboard);
+ terminal->kboard->Vwindow_system = intern ("w32");
+ terminal->kboard->next_kboard = all_kboards;
+ all_kboards = terminal->kboard;
+ /* Don't let the initial kboard remain current longer than necessary.
+ That would cause problems if a file loaded on startup tries to
+ prompt in the mini-buffer. */
+ if (current_kboard == initial_kboard)
+ current_kboard = terminal->kboard;
+ terminal->kboard->reference_count++;
+#endif
+
+ return terminal;
+}
+
+static void
+x_delete_terminal (struct terminal *terminal)
+{
+ struct w32_display_info *dpyinfo = terminal->display_info.w32;
+ int i;
+
+ /* Protect against recursive calls. Fdelete_frame in
+ delete_terminal calls us back when it deletes our last frame. */
+ if (!terminal->name)
+ return;
+
+ BLOCK_INPUT;
+ /* Free the fonts in the font table. */
+ for (i = 0; i < dpyinfo->n_fonts; i++)
+ if (dpyinfo->font_table[i].name)
+ {
+ DeleteObject (((XFontStruct*)(dpyinfo->font_table[i].font))->hfont);
+ }
+
+ x_delete_display (dpyinfo);
+ UNBLOCK_INPUT;
+}
+
struct w32_display_info *
w32_term_init (display_name, xrm_option, resource_name)
Lisp_Object display_name;
@@ -6205,6 +6397,7 @@ w32_term_init (display_name, xrm_option, resource_name)
char *resource_name;
{
struct w32_display_info *dpyinfo;
+ struct terminal *terminal;
HDC hdc;
BLOCK_INPUT;
@@ -6218,6 +6411,12 @@ w32_term_init (display_name, xrm_option, resource_name)
w32_initialize_display_info (display_name);
dpyinfo = &one_w32_display_info;
+ terminal = w32_create_terminal (dpyinfo);
+
+ /* Set the name of the terminal. */
+ terminal->name = (char *) xmalloc (SBYTES (display_name) + 1);
+ strncpy (terminal->name, SDATA (display_name), SBYTES (display_name));
+ terminal->name[SBYTES (display_name)] = 0;
dpyinfo->xrdb = xrm_option ? w32_make_rdb (xrm_option) : NULL;
@@ -6247,6 +6446,9 @@ w32_term_init (display_name, xrm_option, resource_name)
w32_defined_color (0, "black", &color, 1);
}
+ /* Add the default keyboard. */
+ add_keyboard_wait_descriptor (0);
+
/* Create Fringe Bitmaps and store them for later use.
On W32, bitmaps are all unsigned short, as Windows requires
@@ -6254,7 +6456,7 @@ w32_term_init (display_name, xrm_option, resource_name)
horizontally reflected compared to how they appear on X, so we
need to bitswap and convert to unsigned shorts before creating
the bitmaps. */
- w32_init_fringe ();
+ w32_init_fringe (terminal->rif);
#ifndef F_SETOWN_BUG
#ifdef F_SETOWN
@@ -6278,7 +6480,6 @@ w32_term_init (display_name, xrm_option, resource_name)
}
/* Get rid of display DPYINFO, assuming all frames are already gone. */
-
void
x_delete_display (dpyinfo)
struct w32_display_info *dpyinfo;
@@ -6329,73 +6530,9 @@ x_delete_display (dpyinfo)
DWORD WINAPI w32_msg_worker (void * arg);
-void
-x_flush (struct frame * f)
-{ /* Nothing to do */ }
-
-extern frame_parm_handler w32_frame_parm_handlers[];
-
-static struct redisplay_interface w32_redisplay_interface =
-{
- w32_frame_parm_handlers,
- x_produce_glyphs,
- x_write_glyphs,
- x_insert_glyphs,
- x_clear_end_of_line,
- x_scroll_run,
- x_after_update_window_line,
- x_update_window_begin,
- x_update_window_end,
- x_cursor_to,
- x_flush,
- 0, /* flush_display_optional */
- x_clear_window_mouse_face,
- w32_get_glyph_overhangs,
- x_fix_overlapping_area,
- w32_draw_fringe_bitmap,
- w32_define_fringe_bitmap,
- w32_destroy_fringe_bitmap,
- w32_per_char_metric,
- w32_encode_char,
- NULL, /* w32_compute_glyph_string_overhangs */
- x_draw_glyph_string,
- w32_define_frame_cursor,
- w32_clear_frame_area,
- w32_draw_window_cursor,
- w32_draw_vertical_window_border,
- w32_shift_glyphs_for_insert
-};
-
-void
+static void
w32_initialize ()
{
- rif = &w32_redisplay_interface;
-
- /* MSVC does not type K&R functions with no arguments correctly, and
- so we must explicitly cast them. */
- clear_frame_hook = (void (*)(void)) x_clear_frame;
- ring_bell_hook = (void (*)(void)) w32_ring_bell;
- update_begin_hook = x_update_begin;
- update_end_hook = x_update_end;
-
- read_socket_hook = w32_read_socket;
-
- frame_up_to_date_hook = w32_frame_up_to_date;
-
- mouse_position_hook = w32_mouse_position;
- frame_rehighlight_hook = w32_frame_rehighlight;
- frame_raise_lower_hook = w32_frame_raise_lower;
- set_vertical_scroll_bar_hook = w32_set_vertical_scroll_bar;
- condemn_scroll_bars_hook = w32_condemn_scroll_bars;
- redeem_scroll_bar_hook = w32_redeem_scroll_bar;
- judge_scroll_bars_hook = w32_judge_scroll_bars;
-
- scroll_region_ok = 1; /* we'll scroll partial frames */
- char_ins_del_ok = 1;
- line_ins_del_ok = 1; /* we'll just blt 'em */
- fast_clear_end_of_line = 1; /* X does this well */
- memory_below_frame = 0; /* we don't remember what scrolls
- off the bottom */
baud_rate = 19200;
w32_system_caret_hwnd = NULL;
@@ -6538,7 +6675,7 @@ interpreted normally. */);
Unicode output may prevent some third party applications for displaying
Far-East Languages on Windows 95/98 from working properly.
NT uses Unicode internally anyway, so this flag will probably have no
-affect on NT machines. */);
+effect on NT machines. */);
w32_enable_unicode_output = 1;
DEFVAR_BOOL ("w32-use-visible-system-caret",
diff --git a/src/w32term.h b/src/w32term.h
index acf864d5f38..f7b8efad954 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -100,6 +100,9 @@ struct w32_display_info
/* Chain of all w32_display_info structures. */
struct w32_display_info *next;
+ /* The generic display parameters corresponding to this w32 display. */
+ struct terminal *terminal;
+
/* This is a cons cell of the form (NAME . FONT-LIST-CACHE).
The same cons cell also appears in x_display_name_list. */
Lisp_Object name_list_element;
@@ -272,8 +275,10 @@ extern void w32_find_ccl_program();
diffs between X and w32 code. */
struct x_output
{
+#if 0 /* These are also defined in struct frame. Use that instead. */
PIX_TYPE background_pixel;
PIX_TYPE foreground_pixel;
+#endif
/* Keep track of focus. May be EXPLICIT if we received a FocusIn for this
frame, or IMPLICIT if we received an EnterNotify.
@@ -405,8 +410,6 @@ extern struct w32_output w32term_display;
#define FRAME_W32_WINDOW(f) ((f)->output_data.w32->window_desc)
#define FRAME_X_WINDOW(f) ((f)->output_data.w32->window_desc)
-#define FRAME_FOREGROUND_PIXEL(f) ((f)->output_data.x->foreground_pixel)
-#define FRAME_BACKGROUND_PIXEL(f) ((f)->output_data.x->background_pixel)
#define FRAME_FONT(f) ((f)->output_data.w32->font)
#define FRAME_FONTSET(f) ((f)->output_data.w32->fontset)
#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.w32->baseline_offset)
@@ -487,6 +490,10 @@ struct scroll_bar {
place where the user grabbed it. If the handle isn't currently
being dragged, this is Qnil. */
Lisp_Object dragging;
+
+ /* t if the background of the fringe that is adjacent to a scroll
+ bar is extended to the gap between the fringe and the bar. */
+ Lisp_Object fringe_extended_p;
};
/* The number of elements a vector holding a struct scroll_bar needs. */
@@ -576,20 +583,20 @@ extern void w32_fill_rect ();
extern void w32_clear_window ();
#define w32_fill_area(f,hdc,pix,x,y,nx,ny) \
-{ \
+do { \
RECT rect; \
rect.left = x; \
rect.top = y; \
rect.right = x + nx; \
rect.bottom = y + ny; \
w32_fill_rect (f,hdc,pix,&rect); \
-}
+} while (0)
#define w32_clear_rect(f,hdc,lprect) \
-w32_fill_rect (f,hdc,f->output_data.x->background_pixel,lprect)
+ w32_fill_rect (f, hdc, FRAME_BACKGROUND_PIXEL (f), lprect)
#define w32_clear_area(f,hdc,px,py,nx,ny) \
-w32_fill_area (f,hdc,f->output_data.x->background_pixel,px,py,nx,ny)
+ w32_fill_area (f, hdc, FRAME_BACKGROUND_PIXEL (f), px, py, nx, ny)
extern struct font_info *w32_load_font ();
extern void w32_unload_font ();
@@ -605,6 +612,13 @@ extern void w32_unload_font ();
#define WM_XBUTTONDOWN (WM_MOUSEWHEEL + 1)
#define WM_XBUTTONUP (WM_MOUSEWHEEL + 2)
#endif /* WM_XBUTTONDOWN */
+#ifndef WM_MOUSEHWHEEL
+#define WM_MOUSEHWHEEL (WM_MOUSEWHEEL + 4)
+#endif /* WM_MOUSEHWHEEL */
+#ifndef WM_APPCOMMAND
+#define WM_APPCOMMAND 0x319
+#define GET_APPCOMMAND_LPARAM(lParam) (HIWORD(lParam) & 0x7fff)
+#endif
#define WM_EMACS_START (WM_USER + 1)
#define WM_EMACS_KILL (WM_EMACS_START + 0)
@@ -684,6 +698,9 @@ extern void wait_for_sync ();
extern BOOL parse_button ();
+extern void w32_sys_ring_bell (struct frame *f);
+extern void x_delete_display (struct w32_display_info *dpyinfo);
+
/* Keypad command key support. W32 doesn't have virtual keys defined
for the function keys on the keypad (they are mapped to the standard
fuction keys), so we define our own. */
diff --git a/src/widget.c b/src/widget.c
index 714da205a67..c76cce9e328 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -659,10 +659,10 @@ update_from_various_frame_slots (ew)
struct x_output *x = f->output_data.x;
ew->core.height = FRAME_PIXEL_HEIGHT (f) - x->menubar_height;
ew->core.width = FRAME_PIXEL_WIDTH (f);
- ew->core.background_pixel = x->background_pixel;
+ ew->core.background_pixel = FRAME_BACKGROUND_PIXEL (f);
ew->emacs_frame.internal_border_width = f->internal_border_width;
ew->emacs_frame.font = x->font;
- ew->emacs_frame.foreground_pixel = x->foreground_pixel;
+ ew->emacs_frame.foreground_pixel = FRAME_FOREGROUND_PIXEL (f);
ew->emacs_frame.cursor_color = x->cursor_pixel;
ew->core.border_pixel = x->border_pixel;
}
diff --git a/src/window.c b/src/window.c
index 4e8ad699500..d0f351261e1 100644
--- a/src/window.c
+++ b/src/window.c
@@ -21,6 +21,8 @@ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include <config.h>
+#include <stdio.h>
+
#include "lisp.h"
#include "buffer.h"
#include "keyboard.h"
@@ -34,6 +36,7 @@ Boston, MA 02110-1301, USA. */
#include "dispextern.h"
#include "blockinput.h"
#include "intervals.h"
+#include "termhooks.h" /* For FRAME_TERMINAL. */
#ifdef HAVE_X_WINDOWS
#include "xterm.h"
@@ -190,6 +193,10 @@ Lisp_Object Qtemp_buffer_show_hook;
EMACS_INT split_height_threshold;
+/* How to split windows (horizontally/vertically/hybrid). */
+
+Lisp_Object Vsplit_window_preferred_function;
+
/* Number of lines of continuity in scrolling by screenfuls. */
EMACS_INT next_screen_context_lines;
@@ -792,7 +799,7 @@ coordinates_in_window (w, x, y)
if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w)
|| WINDOW_RIGHTMOST_P (w))
{
- if (!WINDOW_LEFTMOST_P (w) && abs (*x - x0) < grabbable_width)
+ if (!WINDOW_LEFTMOST_P (w) && eabs (*x - x0) < grabbable_width)
{
/* Convert X and Y to window relative coordinates.
Vertical border is at the left edge of window. */
@@ -803,7 +810,7 @@ coordinates_in_window (w, x, y)
}
else
{
- if (abs (*x - x1) < grabbable_width)
+ if (eabs (*x - x1) < grabbable_width)
{
/* Convert X and Y to window relative coordinates.
Vertical border is at the right edge of window. */
@@ -851,7 +858,7 @@ coordinates_in_window (w, x, y)
if (!w->pseudo_window_p
&& !WINDOW_HAS_VERTICAL_SCROLL_BAR (w)
&& !WINDOW_RIGHTMOST_P (w)
- && (abs (*x - right_x) < grabbable_width))
+ && (eabs (*x - right_x) < grabbable_width))
{
/* Convert X and Y to window relative coordinates.
Vertical border is at the right edge of window. */
@@ -1788,12 +1795,28 @@ candidate_window_p (window, owindow, minibuf, all_frames)
else if (EQ (all_frames, Qvisible))
{
FRAME_SAMPLE_VISIBILITY (f);
- candidate_p = FRAME_VISIBLE_P (f);
+ candidate_p = FRAME_VISIBLE_P (f)
+ && (FRAME_TERMINAL (XFRAME (w->frame))
+ == FRAME_TERMINAL (XFRAME (selected_frame)));
+
}
else if (INTEGERP (all_frames) && XINT (all_frames) == 0)
{
FRAME_SAMPLE_VISIBILITY (f);
- candidate_p = FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f);
+ candidate_p = (FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f)
+#ifdef HAVE_X_WINDOWS
+ /* Yuck!! If we've just created the frame and the
+ window-manager requested the user to place it
+ manually, the window may still not be considered
+ `visible'. I'd argue it should be at least
+ something like `iconified', but don't know how to do
+ that yet. --Stef */
+ || (FRAME_X_P (f) && f->output_data.x->asked_for_visible
+ && !f->output_data.x->has_been_visible)
+#endif
+ )
+ && (FRAME_TERMINAL (XFRAME (w->frame))
+ == FRAME_TERMINAL (XFRAME (selected_frame)));
}
else if (WINDOWP (all_frames))
candidate_p = (EQ (FRAME_MINIBUF_WINDOW (f), all_frames)
@@ -2162,8 +2185,10 @@ window_loop (type, obj, mini, frames)
if (NILP (best_window))
best_window = window;
else if (EQ (window, selected_window))
- /* For compatibility with 20.x, prefer to return
- selected-window. */
+ /* Prefer to return selected-window. */
+ RETURN_UNGCPRO (window);
+ else if (EQ (Fwindow_frame (window), selected_frame))
+ /* Prefer windows on the current frame. */
best_window = window;
}
break;
@@ -2645,12 +2670,12 @@ window_fixed_size_p (w, width_p, check_siblings_p)
{
Lisp_Object child;
- for (child = w->prev; !NILP (child); child = XWINDOW (child)->prev)
+ for (child = w->prev; WINDOWP (child); child = XWINDOW (child)->prev)
if (!window_fixed_size_p (XWINDOW (child), width_p, 0))
break;
if (NILP (child))
- for (child = w->next; !NILP (child); child = XWINDOW (child)->next)
+ for (child = w->next; WINDOWP (child); child = XWINDOW (child)->next)
if (!window_fixed_size_p (XWINDOW (child), width_p, 0))
break;
@@ -3447,6 +3472,22 @@ selects the buffer of the selected window before each command. */)
if (EQ (window, selected_window))
return window;
+ sf = SELECTED_FRAME ();
+ if (XFRAME (WINDOW_FRAME (w)) != sf)
+ {
+ XFRAME (WINDOW_FRAME (w))->selected_window = window;
+ /* Use this rather than Fhandle_switch_frame
+ so that FRAME_FOCUS_FRAME is moved appropriately as we
+ move around in the state where a minibuffer in a separate
+ frame is active. */
+ Fselect_frame (WINDOW_FRAME (w));
+ /* Fselect_frame called us back so we've done all the work already. */
+ eassert (EQ (window, selected_window));
+ return window;
+ }
+ else
+ sf->selected_window = window;
+
/* Store the current buffer's actual point into the
old selected window. It belongs to that window,
and when the window is not selected, must be in the window. */
@@ -3460,18 +3501,6 @@ selects the buffer of the selected window before each command. */)
}
selected_window = window;
- sf = SELECTED_FRAME ();
- if (XFRAME (WINDOW_FRAME (w)) != sf)
- {
- XFRAME (WINDOW_FRAME (w))->selected_window = window;
- /* Use this rather than Fhandle_switch_frame
- so that FRAME_FOCUS_FRAME is moved appropriately as we
- move around in the state where a minibuffer in a separate
- frame is active. */
- Fselect_frame (WINDOW_FRAME (w));
- }
- else
- sf->selected_window = window;
if (NILP (norecord))
record_buffer (w->buffer);
@@ -3651,7 +3680,7 @@ If `even-window-heights' is non-nil, window heights will be evened out
if displaying the buffer causes two vertically adjacent windows to be
displayed. */)
(buffer, not_this_window, frame)
- register Lisp_Object buffer, not_this_window, frame;
+ Lisp_Object buffer, not_this_window, frame;
{
register Lisp_Object window, tem, swp;
struct frame *f;
@@ -3723,6 +3752,8 @@ displayed. */)
|| !NILP (XWINDOW (FRAME_ROOT_WINDOW (f))->dedicated))
{
Lisp_Object frames;
+ struct gcpro gcpro1;
+ GCPRO1 (buffer);
frames = Qnil;
if (FRAME_MINIBUF_ONLY_P (f))
@@ -3754,26 +3785,26 @@ displayed. */)
if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& WINDOW_FULL_WIDTH_P (XWINDOW (window))
- && (window_height (window) >= split_height_threshold
- || (NILP (XWINDOW (window)->parent)))
+ && (window_height (window) >= split_height_threshold
+ || (NILP (XWINDOW (window)->parent)))
&& (window_height (window)
>= (2 * window_min_size_2 (XWINDOW (window), 0))))
- window = Fsplit_window (window, Qnil, Qnil);
+ window = call1 (Vsplit_window_preferred_function, window);
else
{
Lisp_Object upper, lower, other;
window = Fget_lru_window (frames, Qt);
- /* If the LRU window is tall enough, and either eligible for splitting
- and selected or the only window, split it. */
+ /* If the LRU window is tall enough, and either eligible for
+ splitting and selected or the only window, split it. */
if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
- && ((EQ (window, selected_window)
- && window_height (window) >= split_height_threshold)
- || (NILP (XWINDOW (window)->parent)))
- && (window_height (window)
- >= (2 * window_min_size_2 (XWINDOW (window), 0))))
- window = Fsplit_window (window, Qnil, Qnil);
+ && ((EQ (window, selected_window)
+ && window_height (window) >= split_height_threshold)
+ || (NILP (XWINDOW (window)->parent)))
+ && (window_height (window)
+ >= (2 * window_min_size_2 (XWINDOW (window), 0))))
+ window = call1 (Vsplit_window_preferred_function, window);
else
window = Fget_lru_window (frames, Qnil);
/* If Fget_lru_window returned nil, try other approaches. */
@@ -3819,6 +3850,7 @@ displayed. */)
0);
}
}
+ UNGCPRO;
}
else
window = Fget_lru_window (Qnil, Qnil);
@@ -4261,10 +4293,10 @@ enlarge_window (window, delta, horiz_flag)
/* Find the total we can get from other siblings without deleting them. */
maximum = 0;
- for (next = p->next; ! NILP (next); next = XWINDOW (next)->next)
+ for (next = p->next; WINDOWP (next); next = XWINDOW (next)->next)
maximum += (*sizefun) (next) - window_min_size (XWINDOW (next),
horiz_flag, 0, 0);
- for (prev = p->prev; ! NILP (prev); prev = XWINDOW (prev)->prev)
+ for (prev = p->prev; WINDOWP (prev); prev = XWINDOW (prev)->prev)
maximum += (*sizefun) (prev) - window_min_size (XWINDOW (prev),
horiz_flag, 0, 0);
@@ -4412,10 +4444,10 @@ enlarge_window (window, delta, horiz_flag)
Lisp_Object s;
int n = 1;
- for (s = w->next; !NILP (s); s = XWINDOW (s)->next)
+ for (s = w->next; WINDOWP (s); s = XWINDOW (s)->next)
if (!window_fixed_size_p (XWINDOW (s), horiz_flag, 0))
++n;
- for (s = w->prev; !NILP (s); s = XWINDOW (s)->prev)
+ for (s = w->prev; WINDOWP (s); s = XWINDOW (s)->prev)
if (!window_fixed_size_p (XWINDOW (s), horiz_flag, 0))
++n;
@@ -4671,7 +4703,7 @@ shrink_window_lowest_first (w, height)
/* Find the last child. We are taking space from lowest windows
first, so we iterate over children from the last child
backwards. */
- for (child = w->vchild; !NILP (child); child = XWINDOW (child)->next)
+ for (child = w->vchild; WINDOWP (child); child = XWINDOW (child)->next)
last_child = child;
/* Assign new heights. We leave only MIN_SAFE_WINDOW_HEIGHT. */
@@ -5467,7 +5499,7 @@ scroll_command (n, direction)
{
int count = SPECPDL_INDEX ();
- xassert (abs (direction) == 1);
+ xassert (eabs (direction) == 1);
/* If selected window's buffer isn't current, make it current for
the moment. But don't screw up if window_scroll gets an error. */
@@ -6019,10 +6051,8 @@ zero means top of window, negative means relative to bottom of window. */)
struct save_window_data
{
- EMACS_INT size_from_Lisp_Vector_struct;
+ EMACS_UINT size;
struct Lisp_Vector *next_from_Lisp_Vector_struct;
- Lisp_Object frame_cols, frame_lines, frame_menu_bar_lines;
- Lisp_Object frame_tool_bar_lines;
Lisp_Object selected_frame;
Lisp_Object current_window;
Lisp_Object current_buffer;
@@ -6030,19 +6060,25 @@ struct save_window_data
Lisp_Object minibuf_selected_window;
Lisp_Object root_window;
Lisp_Object focus_frame;
- /* Record the values of window-min-width and window-min-height
- so that window sizes remain consistent with them. */
- Lisp_Object min_width, min_height;
/* A vector, each of whose elements is a struct saved_window
for one window. */
Lisp_Object saved_windows;
+
+ /* All fields above are traced by the GC.
+ From `fame-cols' down, the fields are ignored by the GC. */
+
+ int frame_cols, frame_lines, frame_menu_bar_lines;
+ int frame_tool_bar_lines;
+ /* Record the values of window-min-width and window-min-height
+ so that window sizes remain consistent with them. */
+ int min_width, min_height;
};
/* This is saved as a Lisp_Vector */
struct saved_window
{
/* these first two must agree with struct Lisp_Vector in lisp.h */
- EMACS_INT size_from_Lisp_Vector_struct;
+ EMACS_UINT size;
struct Lisp_Vector *next_from_Lisp_Vector_struct;
Lisp_Object window;
@@ -6175,18 +6211,20 @@ the return value is nil. Otherwise the value is t. */)
if it runs during this. */
BLOCK_INPUT;
- if (XFASTINT (data->frame_lines) != previous_frame_lines
- || XFASTINT (data->frame_cols) != previous_frame_cols)
- change_frame_size (f, XFASTINT (data->frame_lines),
- XFASTINT (data->frame_cols), 0, 0, 0);
+ if (data->frame_lines != previous_frame_lines
+ || data->frame_cols != previous_frame_cols)
+ change_frame_size (f, data->frame_lines,
+ data->frame_cols, 0, 0, 0);
#if defined (HAVE_WINDOW_SYSTEM) || defined (MSDOS)
- if (XFASTINT (data->frame_menu_bar_lines)
+ if (data->frame_menu_bar_lines
!= previous_frame_menu_bar_lines)
- x_set_menu_bar_lines (f, data->frame_menu_bar_lines, make_number (0));
+ x_set_menu_bar_lines (f, make_number (data->frame_menu_bar_lines),
+ make_number (0));
#ifdef HAVE_WINDOW_SYSTEM
- if (XFASTINT (data->frame_tool_bar_lines)
+ if (data->frame_tool_bar_lines
!= previous_frame_tool_bar_lines)
- x_set_tool_bar_lines (f, data->frame_tool_bar_lines, make_number (0));
+ x_set_tool_bar_lines (f, make_number (data->frame_tool_bar_lines),
+ make_number (0));
#endif
#endif
@@ -6420,8 +6458,8 @@ the return value is nil. Otherwise the value is t. */)
Fset_buffer (new_current_buffer);
/* Restore the minimum heights recorded in the configuration. */
- window_min_height = XINT (data->min_height);
- window_min_width = XINT (data->min_width);
+ window_min_height = data->min_height;
+ window_min_width = data->min_width;
Vminibuf_scroll_window = data->minibuf_scroll_window;
minibuf_selected_window = data->minibuf_selected_window;
@@ -6622,7 +6660,6 @@ redirection (see `redirect-frame-focus'). */)
register Lisp_Object tem;
register int n_windows;
register struct save_window_data *data;
- register struct Lisp_Vector *vec;
register int i;
FRAME_PTR f;
@@ -6632,13 +6669,13 @@ redirection (see `redirect-frame-focus'). */)
f = XFRAME (frame);
n_windows = count_windows (XWINDOW (FRAME_ROOT_WINDOW (f)));
- vec = allocate_other_vector (VECSIZE (struct save_window_data));
- data = (struct save_window_data *)vec;
+ data = ALLOCATE_PSEUDOVECTOR (struct save_window_data, frame_cols,
+ PVEC_WINDOW_CONFIGURATION);
- XSETFASTINT (data->frame_cols, FRAME_COLS (f));
- XSETFASTINT (data->frame_lines, FRAME_LINES (f));
- XSETFASTINT (data->frame_menu_bar_lines, FRAME_MENU_BAR_LINES (f));
- XSETFASTINT (data->frame_tool_bar_lines, FRAME_TOOL_BAR_LINES (f));
+ data->frame_cols = FRAME_COLS (f);
+ data->frame_lines = FRAME_LINES (f);
+ data->frame_menu_bar_lines = FRAME_MENU_BAR_LINES (f);
+ data->frame_tool_bar_lines = FRAME_TOOL_BAR_LINES (f);
data->selected_frame = selected_frame;
data->current_window = FRAME_SELECTED_WINDOW (f);
XSETBUFFER (data->current_buffer, current_buffer);
@@ -6646,8 +6683,8 @@ redirection (see `redirect-frame-focus'). */)
data->minibuf_selected_window = minibuf_level > 0 ? minibuf_selected_window : Qnil;
data->root_window = FRAME_ROOT_WINDOW (f);
data->focus_frame = FRAME_FOCUS_FRAME (f);
- XSETINT (data->min_height, window_min_height);
- XSETINT (data->min_width, window_min_width);
+ data->min_height = window_min_height;
+ data->min_width = window_min_width;
tem = Fmake_vector (make_number (n_windows), Qnil);
data->saved_windows = tem;
for (i = 0; i < n_windows; i++)
@@ -7104,11 +7141,12 @@ freeze_window_start (w, freeze_p)
struct window *w;
void *freeze_p;
{
- if (w == XWINDOW (selected_window)
- || MINI_WINDOW_P (w)
- || (MINI_WINDOW_P (XWINDOW (selected_window))
- && ! NILP (Vminibuf_scroll_window)
- && w == XWINDOW (Vminibuf_scroll_window)))
+ if (MINI_WINDOW_P (w)
+ || (WINDOWP (selected_window) /* Can be nil in corner cases. */
+ && (w == XWINDOW (selected_window)
+ || (MINI_WINDOW_P (XWINDOW (selected_window))
+ && ! NILP (Vminibuf_scroll_window)
+ && w == XWINDOW (Vminibuf_scroll_window)))))
freeze_p = NULL;
w->frozen_window_start_p = freeze_p != NULL;
@@ -7153,11 +7191,11 @@ compare_window_configurations (c1, c2, ignore_positions)
sw1 = XVECTOR (d1->saved_windows);
sw2 = XVECTOR (d2->saved_windows);
- if (! EQ (d1->frame_cols, d2->frame_cols))
+ if (d1->frame_cols != d2->frame_cols)
return 0;
- if (! EQ (d1->frame_lines, d2->frame_lines))
+ if (d1->frame_lines != d2->frame_lines)
return 0;
- if (! EQ (d1->frame_menu_bar_lines, d2->frame_menu_bar_lines))
+ if (d1->frame_menu_bar_lines != d2->frame_menu_bar_lines)
return 0;
if (! EQ (d1->selected_frame, d2->selected_frame))
return 0;
@@ -7179,9 +7217,9 @@ compare_window_configurations (c1, c2, ignore_positions)
if everything else compares equal. */
if (! EQ (d1->focus_frame, d2->focus_frame))
return 0;
- if (! EQ (d1->min_width, d2->min_width))
+ if (d1->min_width != d2->min_width)
return 0;
- if (! EQ (d1->min_height, d2->min_height))
+ if (d1->min_height != d2->min_height)
return 0;
/* Verify that the two confis have the same number of windows. */
@@ -7271,7 +7309,7 @@ and scrolling positions. */)
void
init_window_once ()
{
- struct frame *f = make_terminal_frame ();
+ struct frame *f = make_initial_frame ();
XSETFRAME (selected_frame, f);
Vterminal_frame = selected_frame;
minibuf_window = f->minibuffer_window;
@@ -7490,6 +7528,15 @@ by `display-buffer'. The value is in line units.
If there is only one window, it is split regardless of this value. */);
split_height_threshold = 500;
+ DEFVAR_LISP ("split-window-preferred-function",
+ &Vsplit_window_preferred_function,
+ doc: /* Function to use to split a window.
+This is used by `display-buffer' to allow the user to choose whether
+to split windows horizontally or vertically or some mix of the two.
+It is called with a window as single argument and should split it in two
+and return the new window. */);
+ Vsplit_window_preferred_function = intern ("split-window");
+
DEFVAR_INT ("window-min-height", &window_min_height,
doc: /* *Delete any window less than this tall (including its mode line).
The value is in line units. */);
diff --git a/src/window.h b/src/window.h
index ea8965392c4..3b9107acaa2 100644
--- a/src/window.h
+++ b/src/window.h
@@ -92,7 +92,7 @@ struct window
{
/* The first two fields are really the header of a vector */
/* The window code does not refer to them. */
- EMACS_INT size;
+ EMACS_UINT size;
struct Lisp_Vector *vec_next;
/* The frame this window is on. */
Lisp_Object frame;
@@ -744,7 +744,7 @@ extern Lisp_Object Vminibuf_scroll_window;
/* Nil or a symbol naming the window system under which emacs is
running ('x is the only current possibility) */
-extern Lisp_Object Vwindow_system;
+extern Lisp_Object Vinitial_window_system;
/* Version number of X windows: 10, 11 or nil. */
diff --git a/src/xdisp.c b/src/xdisp.c
index 9a5131a047b..eb0fda1fa91 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -580,21 +580,12 @@ Lisp_Object Vmessage_log_max;
static Lisp_Object Vmessages_buffer_name;
-/* Index 0 is the buffer that holds the current (desired) echo area message,
- or nil if none is desired right now.
-
- Index 1 is the buffer that holds the previously displayed echo area message,
- or nil to indicate no message. This is normally what's on the screen now.
-
- These two can point to the same buffer. That happens when the last
- message output by the user (or made by echoing) has been displayed. */
+/* Current, index 0, and last displayed echo area message. Either
+ buffers from echo_buffers, or nil to indicate no message. */
Lisp_Object echo_area_buffer[2];
-/* Permanent pointers to the two buffers that are used for echo area
- purposes. Once the two buffers are made, and their pointers are
- placed here, these two slots remain unchanged unless those buffers
- need to be created afresh. */
+/* The buffers referenced from echo_area_buffer. */
static Lisp_Object echo_buffer[2];
@@ -813,10 +804,6 @@ static int clear_face_cache_count;
static int clear_image_cache_count;
#endif
-/* Record the previous terminal frame we displayed. */
-
-static struct frame *previous_terminal_frame;
-
/* Non-zero while redisplay_internal is in progress. */
int redisplaying_p;
@@ -2508,7 +2495,7 @@ init_iterator (it, w, charpos, bytepos, row, base_face_id)
XSETWINDOW (it->window, w);
it->w = w;
it->f = XFRAME (w->frame);
-
+
/* Extra space between lines (on window systems only). */
if (base_face_id == DEFAULT_FACE_ID
&& FRAME_WINDOW_P (it->f))
@@ -2525,9 +2512,9 @@ init_iterator (it, w, charpos, bytepos, row, base_face_id)
/* If realized faces have been removed, e.g. because of face
attribute changes of named faces, recompute them. When running
- in batch mode, the face cache of Vterminal_frame is null. If
+ in batch mode, the face cache of the initial frame is null. If
we happen to get called, make a dummy face cache. */
- if (noninteractive && FRAME_FACE_CACHE (it->f) == NULL)
+ if (FRAME_FACE_CACHE (it->f) == NULL)
init_frame_faces (it->f);
if (FRAME_FACE_CACHE (it->f)->used == 0)
recompute_basic_faces (it->f);
@@ -3664,7 +3651,8 @@ handle_invisible_prop (it)
}
else
{
- int invis_p, newpos, next_stop, start_charpos;
+ int invis_p;
+ EMACS_INT newpos, next_stop, start_charpos;
Lisp_Object pos, prop, overlay;
/* First of all, is there invisible text at this position? */
@@ -4017,7 +4005,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
&& EQ (XCAR (spec), Qheight)
&& CONSP (XCDR (spec)))
{
- if (FRAME_TERMCAP_P (it->f) || FRAME_MSDOS_P (it->f))
+ if (!FRAME_WINDOW_P (it->f))
return 0;
it->font_height = XCAR (XCDR (spec));
@@ -4083,7 +4071,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
&& EQ (XCAR (spec), Qspace_width)
&& CONSP (XCDR (spec)))
{
- if (FRAME_TERMCAP_P (it->f) || FRAME_MSDOS_P (it->f))
+ if (!FRAME_WINDOW_P (it->f))
return 0;
value = XCAR (XCDR (spec));
@@ -4099,7 +4087,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
{
Lisp_Object tem;
- if (FRAME_TERMCAP_P (it->f) || FRAME_MSDOS_P (it->f))
+ if (!FRAME_WINDOW_P (it->f))
return 0;
if (tem = XCDR (spec), CONSP (tem))
@@ -4125,7 +4113,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
&& EQ (XCAR (spec), Qraise)
&& CONSP (XCDR (spec)))
{
- if (FRAME_TERMCAP_P (it->f) || FRAME_MSDOS_P (it->f))
+ if (!FRAME_WINDOW_P (it->f))
return 0;
#ifdef HAVE_WINDOW_SYSTEM
@@ -4166,7 +4154,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
int face_id = DEFAULT_FACE_ID;
int fringe_bitmap;
- if (FRAME_TERMCAP_P (it->f) || FRAME_MSDOS_P (it->f))
+ if (!FRAME_WINDOW_P (it->f))
/* If we return here, POSITION has been advanced
across the text with this property. */
return 0;
@@ -4216,7 +4204,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
it->left_user_fringe_face_id = face_id;
}
else
- {
+ {
it->right_user_fringe_bitmap = fringe_bitmap;
it->right_user_fringe_face_id = face_id;
}
@@ -4261,9 +4249,9 @@ handle_single_display_spec (it, spec, object, overlay, position,
valid_p = (STRINGP (value)
#ifdef HAVE_WINDOW_SYSTEM
- || (!FRAME_TERMCAP_P (it->f) && valid_image_p (value))
+ || (FRAME_WINDOW_P (it->f) && valid_image_p (value))
#endif /* not HAVE_WINDOW_SYSTEM */
- || (CONSP (value) && EQ (XCAR (value), Qspace)));
+ || (CONSP (value) && EQ (XCAR (value), Qspace)));
if (valid_p && !display_replaced_before_p)
{
@@ -4338,7 +4326,7 @@ handle_single_display_spec (it, spec, object, overlay, position,
}
-/* Check if SPEC is a display specification value whose text should be
+/* Check if SPEC is a display sub-property value whose text should be
treated as intangible. */
static int
@@ -7605,8 +7593,8 @@ message2_nolog (m, nbytes, multibyte)
do_pending_window_change (0);
echo_area_display (1);
do_pending_window_change (0);
- if (frame_up_to_date_hook != 0 && ! gc_in_progress)
- (*frame_up_to_date_hook) (f);
+ if (FRAME_TERMINAL (f)->frame_up_to_date_hook != 0 && ! gc_in_progress)
+ (*FRAME_TERMINAL (f)->frame_up_to_date_hook) (f);
}
}
@@ -7709,8 +7697,8 @@ message3_nolog (m, nbytes, multibyte)
do_pending_window_change (0);
echo_area_display (1);
do_pending_window_change (0);
- if (frame_up_to_date_hook != 0 && ! gc_in_progress)
- (*frame_up_to_date_hook) (f);
+ if (FRAME_TERMINAL (f)->frame_up_to_date_hook != 0 && ! gc_in_progress)
+ (*FRAME_TERMINAL (f)->frame_up_to_date_hook) (f);
}
}
@@ -7948,6 +7936,10 @@ ensure_echo_area_buffers ()
WHICH > 0 means use echo_area_buffer[1]. If that is nil, choose a
suitable buffer from echo_buffer[] and clear it.
+ If WHICH < 0, set echo_area_buffer[1] to echo_area_buffer[0], so
+ that the current message becomes the last displayed one, make
+ choose a suitable buffer for echo_area_buffer[0], and clear it.
+
Value is what FN returns. */
static int
@@ -7972,6 +7964,17 @@ with_echo_area_buffer (w, which, fn, a1, a2, a3, a4)
this_one = 0, the_other = 1;
else if (which > 0)
this_one = 1, the_other = 0;
+ else
+ {
+ this_one = 0, the_other = 1;
+ clear_buffer_p = 1;
+
+ /* We need a fresh one in case the current echo buffer equals
+ the one containing the last displayed echo area message. */
+ if (!NILP (echo_area_buffer[this_one])
+ && EQ (echo_area_buffer[this_one], echo_area_buffer[the_other]))
+ echo_area_buffer[this_one] = Qnil;
+ }
/* Choose a suitable buffer from echo_buffer[] is we don't
have one. */
@@ -8609,7 +8612,7 @@ set_message (s, string, nbytes, multibyte_p)
= ((s && multibyte_p)
|| (STRINGP (string) && STRING_MULTIBYTE (string)));
- with_echo_area_buffer (0, 0, set_message_1,
+ with_echo_area_buffer (0, -1, set_message_1,
(EMACS_INT) s, string, nbytes, multibyte_p);
message_buf_print = 0;
help_echo_showing_p = 0;
@@ -8639,7 +8642,6 @@ set_message_1 (a1, a2, nbytes, multibyte_p)
/* Insert new message at BEG. */
TEMP_SET_PT_BOTH (BEG, BEG_BYTE);
- Ferase_buffer ();
if (STRINGP (string))
{
@@ -8735,11 +8737,11 @@ clear_garbaged_frames ()
{
Lisp_Object tail, frame;
int changed_count = 0;
-
+
FOR_EACH_FRAME (tail, frame)
{
struct frame *f = XFRAME (frame);
-
+
if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f))
{
if (f->resized_p)
@@ -8753,7 +8755,7 @@ clear_garbaged_frames ()
f->resized_p = 0;
}
}
-
+
frame_garbaged = 0;
if (changed_count)
++windows_or_buffers_changed;
@@ -8786,11 +8788,10 @@ echo_area_display (update_frame_p)
/* The terminal frame is used as the first Emacs frame on the Mac OS. */
#ifndef MAC_OS8
#ifdef HAVE_WINDOW_SYSTEM
- /* When Emacs starts, selected_frame may be a visible terminal
- frame, even if we run under a window system. If we let this
- through, a message would be displayed on the terminal. */
- if (EQ (selected_frame, Vterminal_frame)
- && !NILP (Vwindow_system))
+ /* When Emacs starts, selected_frame may be the initial terminal
+ frame. If we let this through, a message would be displayed on
+ the terminal. */
+ if (FRAME_INITIAL_P (XFRAME (selected_frame)))
return 0;
#endif /* HAVE_WINDOW_SYSTEM */
#endif
@@ -8841,7 +8842,7 @@ echo_area_display (update_frame_p)
Can do with a display update of the echo area,
unless we displayed some mode lines. */
update_single_window (w, 1);
- rif->flush_display (f);
+ FRAME_RIF (f)->flush_display (f);
}
else
update_frame (f, 1, 1);
@@ -8856,8 +8857,10 @@ echo_area_display (update_frame_p)
else if (!EQ (mini_window, selected_window))
windows_or_buffers_changed++;
- /* The current message is now also the last one displayed. */
+ /* Last displayed message is now the current message. */
echo_area_buffer[1] = echo_area_buffer[0];
+ /* Inform read_char that we're not echoing. */
+ echo_message_buffer = Qnil;
/* Prevent redisplay optimization in redisplay_internal by resetting
this_line_start_pos. This is done because the mini-buffer now
@@ -9411,8 +9414,8 @@ x_cursor_to (vpos, hpos, y, x)
{
BLOCK_INPUT;
display_and_set_cursor (w, 1, hpos, vpos, x, y);
- if (rif->flush_display_optional)
- rif->flush_display_optional (SELECTED_FRAME ());
+ if (FRAME_RIF (SELECTED_FRAME ())->flush_display_optional)
+ FRAME_RIF (SELECTED_FRAME ())->flush_display_optional (SELECTED_FRAME ());
UNBLOCK_INPUT;
}
}
@@ -9446,7 +9449,7 @@ update_tool_bar (f, save_match_data)
struct frame *f;
int save_match_data;
{
-#ifdef USE_GTK
+#if defined (USE_GTK) || USE_MAC_TOOLBAR
int do_update = FRAME_EXTERNAL_TOOL_BAR (f);
#else
int do_update = WINDOWP (f->tool_bar_window)
@@ -9912,7 +9915,7 @@ redisplay_tool_bar (f)
struct it it;
struct glyph_row *row;
-#ifdef USE_GTK
+#if defined (USE_GTK) || USE_MAC_TOOLBAR
if (FRAME_EXTERNAL_TOOL_BAR (f))
update_frame_tool_bar (f);
return 0;
@@ -10864,6 +10867,8 @@ select_frame_for_redisplay (frame)
Lisp_Object tail, sym, val;
Lisp_Object old = selected_frame;
+ xassert (FRAMEP (frame) && FRAME_LIVE_P (XFRAME (frame)));
+
selected_frame = frame;
for (tail = XFRAME (frame)->param_alist; CONSP (tail); tail = XCDR (tail))
@@ -10872,8 +10877,7 @@ select_frame_for_redisplay (frame)
SYMBOLP (sym))
&& (sym = indirect_variable (sym),
val = SYMBOL_VALUE (sym),
- (BUFFER_LOCAL_VALUEP (val)
- || SOME_BUFFER_LOCAL_VALUEP (val)))
+ (BUFFER_LOCAL_VALUEP (val)))
&& XBUFFER_LOCAL_VALUE (val)->check_frame)
/* Use find_symbol_value rather than Fsymbol_value
to avoid an error if it is void. */
@@ -10885,8 +10889,7 @@ select_frame_for_redisplay (frame)
SYMBOLP (sym))
&& (sym = indirect_variable (sym),
val = SYMBOL_VALUE (sym),
- (BUFFER_LOCAL_VALUEP (val)
- || SOME_BUFFER_LOCAL_VALUEP (val)))
+ (BUFFER_LOCAL_VALUEP (val)))
&& XBUFFER_LOCAL_VALUE (val)->check_frame)
find_symbol_value (sym);
}
@@ -10920,6 +10923,7 @@ redisplay_internal (preserve_echo_area)
int count, count1;
struct frame *sf;
int polling_stopped_here = 0;
+ Lisp_Object old_frame = selected_frame;
/* Non-zero means redisplay has to consider all windows on all
frames. Zero means, only selected_window is considered. */
@@ -10981,6 +10985,14 @@ redisplay_internal (preserve_echo_area)
}
retry:
+ if (!EQ (old_frame, selected_frame)
+ && FRAME_LIVE_P (XFRAME (old_frame)))
+ /* When running redisplay, we play a bit fast-and-loose and allow e.g.
+ selected_frame and selected_window to be temporarily out-of-sync so
+ when we come back here via `goto retry', we need to resync because we
+ may need to run Elisp code (via prepare_menu_bars). */
+ select_frame_for_redisplay (old_frame);
+
pause = 0;
reconsider_clip_changes (w, current_buffer);
last_escape_glyph_frame = NULL;
@@ -11001,17 +11013,16 @@ redisplay_internal (preserve_echo_area)
if (face_change_count)
++windows_or_buffers_changed;
- if (! FRAME_WINDOW_P (sf)
- && previous_terminal_frame != sf)
+ if (FRAME_TERMCAP_P (sf)
+ && FRAME_TTY (sf)->previous_frame != sf)
{
- /* Since frames on an ASCII terminal share the same display
- area, displaying a different frame means redisplay the whole
- thing. */
+ /* Since frames on a single ASCII terminal share the same
+ display area, displaying a different frame means redisplay
+ the whole thing. */
windows_or_buffers_changed++;
SET_FRAME_GARBAGED (sf);
- XSETFRAME (Vterminal_frame, sf);
+ FRAME_TTY (sf)->previous_frame = sf;
}
- previous_terminal_frame = sf;
/* Set the visible flags for all frames. Do this before checking
for resized or garbaged frames; they want to know if their frames
@@ -11033,6 +11044,7 @@ redisplay_internal (preserve_echo_area)
}
}
+
/* Notice any pending interrupt request to change frame size. */
do_pending_window_change (1);
@@ -11394,7 +11406,7 @@ redisplay_internal (preserve_echo_area)
{
struct frame *f = XFRAME (frame);
- if (FRAME_WINDOW_P (f) || f == sf)
+ if (FRAME_WINDOW_P (f) || FRAME_TERMCAP_P (f) || f == sf)
{
if (! EQ (frame, selected_frame))
/* Select the frame, for the sake of frame-local
@@ -11403,16 +11415,16 @@ redisplay_internal (preserve_echo_area)
/* Mark all the scroll bars to be removed; we'll redeem
the ones we want when we redisplay their windows. */
- if (condemn_scroll_bars_hook)
- condemn_scroll_bars_hook (f);
+ if (FRAME_TERMINAL (f)->condemn_scroll_bars_hook)
+ FRAME_TERMINAL (f)->condemn_scroll_bars_hook (f);
if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
redisplay_windows (FRAME_ROOT_WINDOW (f));
/* Any scroll bars which redisplay_windows should have
nuked should now go away. */
- if (judge_scroll_bars_hook)
- judge_scroll_bars_hook (f);
+ if (FRAME_TERMINAL (f)->judge_scroll_bars_hook)
+ FRAME_TERMINAL (f)->judge_scroll_bars_hook (f);
/* If fonts changed, display again. */
/* ??? rms: I suspect it is a mistake to jump all the way
@@ -11459,12 +11471,12 @@ redisplay_internal (preserve_echo_area)
FOR_EACH_FRAME (tail, frame)
{
struct frame *f = XFRAME (frame);
- if (f->updated_p)
- {
- mark_window_display_accurate (f->root_window, 1);
- if (frame_up_to_date_hook)
- frame_up_to_date_hook (f);
- }
+ if (f->updated_p)
+ {
+ mark_window_display_accurate (f->root_window, 1);
+ if (FRAME_TERMINAL (f)->frame_up_to_date_hook)
+ FRAME_TERMINAL (f)->frame_up_to_date_hook (f);
+ }
}
}
}
@@ -11549,8 +11561,8 @@ redisplay_internal (preserve_echo_area)
/* Say overlay arrows are up to date. */
update_overlay_arrows (1);
- if (frame_up_to_date_hook != 0)
- frame_up_to_date_hook (sf);
+ if (FRAME_TERMINAL (sf)->frame_up_to_date_hook != 0)
+ FRAME_TERMINAL (sf)->frame_up_to_date_hook (sf);
}
update_mode_lines = 0;
@@ -11660,8 +11672,9 @@ redisplay_preserve_echo_area (from_where)
else
redisplay_internal (1);
- if (rif != NULL && rif->flush_display_optional)
- rif->flush_display_optional (NULL);
+ if (FRAME_RIF (SELECTED_FRAME ()) != NULL
+ && FRAME_RIF (SELECTED_FRAME ())->flush_display_optional)
+ FRAME_RIF (SELECTED_FRAME ())->flush_display_optional (NULL);
}
@@ -11669,7 +11682,8 @@ redisplay_preserve_echo_area (from_where)
redisplay_internal. Reset redisplaying_p to the value it had
before redisplay_internal was called, and clear
prevent_freeing_realized_faces_p. It also selects the previously
- selected frame. */
+ selected frame, unless it has been deleted (by an X connection
+ failure during redisplay, for example). */
static Lisp_Object
unwind_redisplay (val)
@@ -11680,7 +11694,8 @@ unwind_redisplay (val)
old_redisplaying_p = XCAR (val);
redisplaying_p = XFASTINT (old_redisplaying_p);
old_frame = XCDR (val);
- if (! EQ (old_frame, selected_frame))
+ if (! EQ (old_frame, selected_frame)
+ && FRAME_LIVE_P (XFRAME (old_frame)))
select_frame_for_redisplay (old_frame);
return Qnil;
}
@@ -12528,7 +12543,7 @@ compute_window_start_on_continuation_line (w)
minimum distance from the old window start. */
pos = it.current.pos;
min_distance = INFINITY;
- while ((distance = abs (CHARPOS (start_pos) - IT_CHARPOS (it))),
+ while ((distance = eabs (CHARPOS (start_pos) - IT_CHARPOS (it))),
distance < min_distance)
{
min_distance = distance;
@@ -12829,7 +12844,9 @@ set_vertical_scroll_bar (w)
start = end = whole = 0;
/* Indicate what this scroll bar ought to be displaying now. */
- set_vertical_scroll_bar_hook (w, end - start, whole, start);
+ if (FRAME_TERMINAL (XFRAME (w->frame))->set_vertical_scroll_bar_hook)
+ (*FRAME_TERMINAL (XFRAME (w->frame))->set_vertical_scroll_bar_hook)
+ (w, end - start, whole, start);
}
@@ -12864,7 +12881,7 @@ redisplay_window (window, just_this_one_p)
int rc;
int centering_position = -1;
int last_line_misfit = 0;
- int save_beg_unchanged, save_end_unchanged;
+ int beg_unchanged, end_unchanged;
SET_TEXT_POS (lpoint, PT, PT_BYTE);
opoint = lpoint;
@@ -12929,8 +12946,8 @@ redisplay_window (window, just_this_one_p)
set_buffer_internal_1 (XBUFFER (w->buffer));
SET_TEXT_POS (opoint, PT, PT_BYTE);
- save_beg_unchanged = BEG_UNCHANGED;
- save_end_unchanged = END_UNCHANGED;
+ beg_unchanged = BEG_UNCHANGED;
+ end_unchanged = END_UNCHANGED;
current_matrix_up_to_date_p
= (!NILP (w->window_end_valid)
@@ -13236,16 +13253,16 @@ redisplay_window (window, just_this_one_p)
than a simple mouse-click. */
if (NILP (w->start_at_line_beg)
&& NILP (do_mouse_tracking)
- && CHARPOS (startp) > BEGV
- && CHARPOS (startp) > BEG + save_beg_unchanged
- && CHARPOS (startp) <= Z - save_end_unchanged)
+ && CHARPOS (startp) > BEGV
+ && CHARPOS (startp) > BEG + beg_unchanged
+ && CHARPOS (startp) <= Z - end_unchanged)
{
w->force_start = Qt;
if (XMARKER (w->start)->buffer == current_buffer)
compute_window_start_on_continuation_line (w);
SET_TEXT_POS_FROM_MARKER (startp, w->start);
goto force_start;
- }
+ }
#if GLYPH_DEBUG
debug_method_add (w, "same window start");
@@ -13548,20 +13565,22 @@ redisplay_window (window, just_this_one_p)
display_menu_bar (w);
#ifdef HAVE_WINDOW_SYSTEM
-#ifdef USE_GTK
- redisplay_tool_bar_p = FRAME_EXTERNAL_TOOL_BAR (f);
+ if (FRAME_WINDOW_P (f))
+ {
+#if defined (USE_GTK) || USE_MAC_TOOLBAR
+ redisplay_tool_bar_p = FRAME_EXTERNAL_TOOL_BAR (f);
#else
- redisplay_tool_bar_p = WINDOWP (f->tool_bar_window)
- && (FRAME_TOOL_BAR_LINES (f) > 0
- || !NILP (Vauto_resize_tool_bars));
-
+ redisplay_tool_bar_p = WINDOWP (f->tool_bar_window)
+ && (FRAME_TOOL_BAR_LINES (f) > 0
+ || !NILP (Vauto_resize_tool_bars));
#endif
- if (redisplay_tool_bar_p && redisplay_tool_bar (f))
- {
- extern int ignore_mouse_drag_p;
- ignore_mouse_drag_p = 1;
- }
+ if (redisplay_tool_bar_p && redisplay_tool_bar (f))
+ {
+ extern int ignore_mouse_drag_p;
+ ignore_mouse_drag_p = 1;
+ }
+ }
#endif
}
@@ -13595,7 +13614,8 @@ redisplay_window (window, just_this_one_p)
/* Note that we actually used the scroll bar attached to this
window, so it shouldn't be deleted at the end of redisplay. */
- redeem_scroll_bar_hook (w);
+ if (FRAME_TERMINAL (f)->redeem_scroll_bar_hook)
+ (*FRAME_TERMINAL (f)->redeem_scroll_bar_hook) (w);
}
/* Restore current_buffer and value of point in it. */
@@ -13864,10 +13884,10 @@ try_window_reusing_current_matrix (w)
if (run.height > 0 && run.current_y != run.desired_y)
{
update_begin (f);
- rif->update_window_begin_hook (w);
- rif->clear_window_mouse_face (w);
- rif->scroll_run_hook (w, &run);
- rif->update_window_end_hook (w, 0, 0);
+ FRAME_RIF (f)->update_window_begin_hook (w);
+ FRAME_RIF (f)->clear_window_mouse_face (w);
+ FRAME_RIF (f)->scroll_run_hook (w, &run);
+ FRAME_RIF (f)->update_window_end_hook (w, 0, 0);
update_end (f);
}
@@ -14036,10 +14056,10 @@ try_window_reusing_current_matrix (w)
if (run.height)
{
update_begin (f);
- rif->update_window_begin_hook (w);
- rif->clear_window_mouse_face (w);
- rif->scroll_run_hook (w, &run);
- rif->update_window_end_hook (w, 0, 0);
+ FRAME_RIF (f)->update_window_begin_hook (w);
+ FRAME_RIF (f)->clear_window_mouse_face (w);
+ FRAME_RIF (f)->scroll_run_hook (w, &run);
+ FRAME_RIF (f)->update_window_end_hook (w, 0, 0);
update_end (f);
}
@@ -14489,7 +14509,7 @@ try_window_id (w)
/* Window must either use window-based redisplay or be full width. */
if (!FRAME_WINDOW_P (f)
- && (!line_ins_del_ok
+ && (!FRAME_LINE_INS_DEL_OK (f)
|| !WINDOW_FULL_WIDTH_P (w)))
GIVE_UP (4);
@@ -14898,10 +14918,10 @@ try_window_id (w)
if (FRAME_WINDOW_P (f))
{
- rif->update_window_begin_hook (w);
- rif->clear_window_mouse_face (w);
- rif->scroll_run_hook (w, &run);
- rif->update_window_end_hook (w, 0, 0);
+ FRAME_RIF (f)->update_window_begin_hook (w);
+ FRAME_RIF (f)->clear_window_mouse_face (w);
+ FRAME_RIF (f)->scroll_run_hook (w, &run);
+ FRAME_RIF (f)->update_window_end_hook (w, 0, 0);
}
else
{
@@ -14919,36 +14939,36 @@ try_window_id (w)
{
/* Scroll last_unchanged_at_beg_row to the end of the
window down dvpos lines. */
- set_terminal_window (end);
+ set_terminal_window (f, end);
/* On dumb terminals delete dvpos lines at the end
before inserting dvpos empty lines. */
- if (!scroll_region_ok)
- ins_del_lines (end - dvpos, -dvpos);
+ if (!FRAME_SCROLL_REGION_OK (f))
+ ins_del_lines (f, end - dvpos, -dvpos);
/* Insert dvpos empty lines in front of
last_unchanged_at_beg_row. */
- ins_del_lines (from, dvpos);
+ ins_del_lines (f, from, dvpos);
}
else if (dvpos < 0)
{
/* Scroll up last_unchanged_at_beg_vpos to the end of
the window to last_unchanged_at_beg_vpos - |dvpos|. */
- set_terminal_window (end);
+ set_terminal_window (f, end);
/* Delete dvpos lines in front of
last_unchanged_at_beg_vpos. ins_del_lines will set
the cursor to the given vpos and emit |dvpos| delete
line sequences. */
- ins_del_lines (from + dvpos, dvpos);
+ ins_del_lines (f, from + dvpos, dvpos);
/* On a dumb terminal insert dvpos empty lines at the
end. */
- if (!scroll_region_ok)
- ins_del_lines (end + dvpos, -dvpos);
+ if (!FRAME_SCROLL_REGION_OK (f))
+ ins_del_lines (f, end + dvpos, -dvpos);
}
- set_terminal_window (0);
+ set_terminal_window (f, 0);
}
update_end (f);
@@ -16522,7 +16542,7 @@ display_menu_bar (w)
/* Don't do all this for graphical frames. */
#ifdef HAVE_NTGUI
- if (!NILP (Vwindow_system))
+ if (FRAME_W32_P (f))
return;
#endif
#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
@@ -16753,10 +16773,10 @@ display_mode_line (w, face_id, format)
/* Temporarily make frame's keyboard the current kboard so that
kboard-local variables in the mode_line_format will get the right
values. */
- push_frame_kboard (it.f);
+ push_kboard (FRAME_KBOARD (it.f));
record_unwind_save_match_data ();
display_mode_element (&it, 0, 0, 0, format, Qnil, 0);
- pop_frame_kboard ();
+ pop_kboard ();
unbind_to (count, Qnil);
@@ -17428,7 +17448,7 @@ are the selected window and the window's buffer). */)
/* Make formatting the modeline a non-op when noninteractive, otherwise
there will be problems later caused by a partially initialized frame. */
if (NILP (format) || noninteractive)
- return build_string ("");
+ return empty_unibyte_string;
if (no_props)
face = Qnil;
@@ -17473,9 +17493,9 @@ are the selected window and the window's buffer). */)
= (NILP (face) ? Qnil : Fcons (Qface, Fcons (face, Qnil)));
}
- push_frame_kboard (it.f);
+ push_kboard (FRAME_KBOARD (it.f));
display_mode_element (&it, 0, 0, 0, format, Qnil, 0);
- pop_frame_kboard ();
+ pop_kboard ();
if (no_props)
{
@@ -17486,7 +17506,7 @@ are the selected window and the window's buffer). */)
{
mode_line_string_list = Fnreverse (mode_line_string_list);
str = Fmapconcat (intern ("identity"), mode_line_string_list,
- make_string ("", 0));
+ empty_unibyte_string);
}
unbind_to (count, Qnil);
@@ -18080,6 +18100,16 @@ decode_mode_spec (w, c, field_width, precision, multibyte)
#endif
break;
+ case '@':
+ {
+ Lisp_Object val;
+ val = call1 (intern ("file-remote-p"), current_buffer->directory);
+ if (NILP (val))
+ return "-";
+ else
+ return "@";
+ }
+
case 't': /* indicate TEXT or BINARY */
#ifdef MODE_LINE_BINARY_TEXT
return MODE_LINE_BINARY_TEXT (b);
@@ -18099,8 +18129,8 @@ decode_mode_spec (w, c, field_width, precision, multibyte)
{
/* No need to mention EOL here--the terminal never needs
to do EOL conversion. */
- p = decode_mode_spec_coding (keyboard_coding.symbol, p, 0);
- p = decode_mode_spec_coding (terminal_coding.symbol, p, 0);
+ p = decode_mode_spec_coding (FRAME_KEYBOARD_CODING (f)->symbol, p, 0);
+ p = decode_mode_spec_coding (FRAME_TERMINAL_CODING (f)->symbol, p, 0);
}
p = decode_mode_spec_coding (b->buffer_file_coding_system,
p, eol_flag);
@@ -18504,6 +18534,27 @@ invisible_p (propval, list)
return 0;
}
+DEFUN ("invisible-p", Finvisible_p, Sinvisible_p, 1, 1, 0,
+ doc: /* Non-nil if the property makes the text invisible.
+POS-OR-PROP can be a marker or number, in which case it is taken to be
+a position in the current buffer and the value of the `invisible' property
+is checked; or it can be some other value, which is then presumed to be the
+value of the `invisible' property of the text of interest.
+The non-nil value returned can be t for truly invisible text or something
+else if the text is replaced by an ellipsis. */)
+ (pos_or_prop)
+ Lisp_Object pos_or_prop;
+{
+ Lisp_Object prop
+ = (NATNUMP (pos_or_prop) || MARKERP (pos_or_prop)
+ ? Fget_char_property (pos_or_prop, Qinvisible, Qnil)
+ : pos_or_prop);
+ int invis = TEXT_PROP_MEANS_INVISIBLE (prop);
+ return (invis == 0 ? Qnil
+ : invis == 1 ? Qt
+ : make_number (invis));
+}
+
/* Calculate a width or height in pixels from a specification using
the following elements:
@@ -18592,6 +18643,8 @@ calc_pixel_width_or_height (res, it, prop, font, width_p, align_to)
if (NILP (prop))
return OK_PIXELS (0);
+ xassert (FRAME_LIVE_P (it->f));
+
if (SYMBOLP (prop))
{
if (SCHARS (SYMBOL_NAME (prop)) == 2)
@@ -18708,7 +18761,8 @@ calc_pixel_width_or_height (res, it, prop, font, width_p, align_to)
if (SYMBOLP (car))
{
#ifdef HAVE_WINDOW_SYSTEM
- if (valid_image_p (prop))
+ if (FRAME_WINDOW_P (it->f)
+ && valid_image_p (prop))
{
int id = lookup_image (it->f, prop);
struct image *img = IMAGE_FROM_ID (it->f, id);
@@ -18949,7 +19003,7 @@ get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p)
= FONT_INFO_FROM_ID (f, face->font_info_id);
if (font_info)
glyph->font_type
- = rif->encode_char (glyph->u.ch, char2b, font_info, two_byte_p);
+ = FRAME_RIF (f)->encode_char (glyph->u.ch, char2b, font_info, two_byte_p);
}
}
@@ -19182,7 +19236,7 @@ x_get_glyph_overhangs (glyph, f, left, right)
font = face->font;
font_info = FONT_INFO_FROM_ID (f, face->font_info_id);
if (font /* ++KFS: Should this be font_info ? */
- && (pcm = rif->per_char_metric (font, &char2b, glyph->font_type)))
+ && (pcm = FRAME_RIF (f)->per_char_metric (font, &char2b, glyph->font_type)))
{
if (pcm->rbearing > pcm->width)
*right = pcm->rbearing - pcm->width;
@@ -19350,7 +19404,7 @@ get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p, display_p)
struct font_info *font_info
= FONT_INFO_FROM_ID (f, face->font_info_id);
if (font_info)
- rif->encode_char (c, char2b, font_info, 0);
+ FRAME_RIF (f)->encode_char (c, char2b, font_info, 0);
}
}
@@ -19413,8 +19467,8 @@ compute_overhangs_and_x (s, x, backward_p)
{
while (s)
{
- if (rif->compute_glyph_string_overhangs)
- rif->compute_glyph_string_overhangs (s);
+ if (FRAME_RIF (s->f)->compute_glyph_string_overhangs)
+ FRAME_RIF (s->f)->compute_glyph_string_overhangs (s);
x -= s->width;
s->x = x;
s = s->prev;
@@ -19424,8 +19478,8 @@ compute_overhangs_and_x (s, x, backward_p)
{
while (s)
{
- if (rif->compute_glyph_string_overhangs)
- rif->compute_glyph_string_overhangs (s);
+ if (FRAME_RIF (s->f)->compute_glyph_string_overhangs)
+ FRAME_RIF (s->f)->compute_glyph_string_overhangs (s);
s->x = x;
x += s->width;
s = s->next;
@@ -19713,9 +19767,9 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps)
struct glyph_string *h, *t;
/* Compute overhangs for all glyph strings. */
- if (rif->compute_glyph_string_overhangs)
+ if (FRAME_RIF (f)->compute_glyph_string_overhangs)
for (s = head; s; s = s->next)
- rif->compute_glyph_string_overhangs (s);
+ FRAME_RIF (f)->compute_glyph_string_overhangs (s);
/* Prepend glyph strings for glyphs in front of the first glyph
string that are overwritten because of the first glyph
@@ -19793,7 +19847,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps)
/* Draw all strings. */
for (s = head; s; s = s->next)
- rif->draw_glyph_string (s);
+ FRAME_RIF (f)->draw_glyph_string (s);
if (area == TEXT_AREA
&& !row->full_width_p
@@ -20052,9 +20106,9 @@ produce_image_glyph (it)
}
if (it->start_of_box_run_p && slice.x == 0)
- it->pixel_width += abs (face->box_line_width);
+ it->pixel_width += eabs (face->box_line_width);
if (it->end_of_box_run_p && slice.x + slice.width == img->width)
- it->pixel_width += abs (face->box_line_width);
+ it->pixel_width += eabs (face->box_line_width);
}
take_vertical_position_into_account (it);
@@ -20488,20 +20542,20 @@ x_produce_glyphs (it)
it->nglyphs = 1;
- pcm = rif->per_char_metric (font, &char2b,
- FONT_TYPE_FOR_UNIBYTE (font, it->char_to_display));
-
- if (it->override_ascent >= 0)
- {
- it->ascent = it->override_ascent;
- it->descent = it->override_descent;
- boff = it->override_boff;
- }
- else
- {
- it->ascent = FONT_BASE (font) + boff;
- it->descent = FONT_DESCENT (font) - boff;
- }
+ pcm = FRAME_RIF (it->f)->per_char_metric
+ (font, &char2b, FONT_TYPE_FOR_UNIBYTE (font, it->char_to_display));
+
+ if (it->override_ascent >= 0)
+ {
+ it->ascent = it->override_ascent;
+ it->descent = it->override_descent;
+ boff = it->override_boff;
+ }
+ else
+ {
+ it->ascent = FONT_BASE (font) + boff;
+ it->descent = FONT_DESCENT (font) - boff;
+ }
if (pcm)
{
@@ -20719,8 +20773,8 @@ x_produce_glyphs (it)
from the charset width; this is what old redisplay code
did. */
- pcm = rif->per_char_metric (font, &char2b,
- FONT_TYPE_FOR_MULTIBYTE (font, it->c));
+ pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
+ FONT_TYPE_FOR_MULTIBYTE (font, it->c));
if (font_not_found_p || !pcm)
{
@@ -20851,8 +20905,8 @@ x_produce_glyphs (it)
/* Initialize the bounding box. */
if (font_info
- && (pcm = rif->per_char_metric (font, &char2b,
- FONT_TYPE_FOR_MULTIBYTE (font, it->c))))
+ && (pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
+ FONT_TYPE_FOR_MULTIBYTE (font, it->c))))
{
width = pcm->width;
ascent = pcm->ascent;
@@ -20910,8 +20964,8 @@ x_produce_glyphs (it)
}
if (font_info
- && (pcm = rif->per_char_metric (font, &char2b,
- FONT_TYPE_FOR_MULTIBYTE (font, ch))))
+ && (pcm = FRAME_RIF (it->f)->per_char_metric (font, &char2b,
+ FONT_TYPE_FOR_MULTIBYTE (font, ch))))
{
width = pcm->width;
ascent = pcm->ascent;
@@ -21151,8 +21205,8 @@ x_insert_glyphs (start, len)
frame_x = window_box_left (w, updated_area) + output_cursor.x;
frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, output_cursor.y);
- rif->shift_glyphs_for_insert (f, frame_x, frame_y, shifted_region_width,
- line_height, shift_by_width);
+ FRAME_RIF (f)->shift_glyphs_for_insert (f, frame_x, frame_y, shifted_region_width,
+ line_height, shift_by_width);
/* Write the glyphs. */
hpos = start - row->glyphs[updated_area];
@@ -21234,8 +21288,8 @@ x_clear_end_of_line (to_x)
if (to_x > from_x && to_y > from_y)
{
BLOCK_INPUT;
- rif->clear_frame_area (f, from_x, from_y,
- to_x - from_x, to_y - from_y);
+ FRAME_RIF (f)->clear_frame_area (f, from_x, from_y,
+ to_x - from_x, to_y - from_y);
UNBLOCK_INPUT;
}
}
@@ -21756,7 +21810,7 @@ erase_phys_cursor (w)
x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, max (x, left_x));
if (width > 0)
- rif->clear_frame_area (f, x, y, width, cursor_row->visible_height);
+ FRAME_RIF (f)->clear_frame_area (f, x, y, width, cursor_row->visible_height);
}
/* Erase the cursor by redrawing the character underneath it. */
@@ -21853,9 +21907,9 @@ display_and_set_cursor (w, on, hpos, vpos, x, y)
w->phys_cursor.vpos = vpos;
}
- rif->draw_window_cursor (w, glyph_row, x, y,
- new_cursor_type, new_cursor_width,
- on, active_cursor);
+ FRAME_RIF (f)->draw_window_cursor (w, glyph_row, x, y,
+ new_cursor_type, new_cursor_width,
+ on, active_cursor);
}
@@ -22004,11 +22058,11 @@ show_mouse_face (dpyinfo, draw)
/* Change the mouse cursor. */
if (draw == DRAW_NORMAL_TEXT && !EQ (dpyinfo->mouse_face_window, f->tool_bar_window))
- rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor);
+ FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->text_cursor);
else if (draw == DRAW_MOUSE_FACE)
- rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor);
+ FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->hand_cursor);
else
- rif->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor);
+ FRAME_RIF (f)->define_frame_cursor (f, FRAME_X_OUTPUT (f)->nontext_cursor);
}
/* EXPORT:
@@ -22316,8 +22370,8 @@ fast_find_string_pos (w, pos, object, hpos, vpos, x, y, right_p)
goto found;
}
else if (best_glyph == NULL
- || ((abs (g->charpos - pos)
- < abs (best_glyph->charpos - pos))
+ || ((eabs (g->charpos - pos)
+ < eabs (best_glyph->charpos - pos))
&& (right_p
? g->charpos < pos
: g->charpos > pos)))
@@ -22447,7 +22501,6 @@ on_hot_spot_p (hot_spot, x, y)
return inside;
}
}
- /* If we don't understand the format, pretend we're not in the hot-spot. */
return 0;
}
@@ -22527,7 +22580,7 @@ define_frame_cursor1 (f, cursor, pointer)
}
if (cursor != No_Cursor)
- rif->define_frame_cursor (f, cursor);
+ FRAME_RIF (f)->define_frame_cursor (f, cursor);
}
/* Take proper action when mouse has moved to the mode or header line
@@ -23495,8 +23548,8 @@ phys_cursor_in_rect_p (w, r)
I assume the effect is the same -- and this is portable. */
return x_intersect_rectangles (&cr, r, &result);
}
- else
- return 0;
+ /* If we don't understand the format, pretend we're not in the hot-spot. */
+ return 0;
}
@@ -23508,6 +23561,8 @@ void
x_draw_vertical_border (w)
struct window *w;
{
+ struct frame *f = XFRAME (WINDOW_FRAME (w));
+
/* We could do better, if we knew what type of scroll-bar the adjacent
windows (on either side) have... But we don't :-(
However, I think this works ok. ++KFS 2003-04-25 */
@@ -23528,9 +23583,9 @@ x_draw_vertical_border (w)
y1 -= 1;
if (WINDOW_LEFT_FRINGE_WIDTH (w) == 0)
- x1 -= 1;
+ x1 -= 1;
- rif->draw_vertical_window_border (w, x1, y0, y1);
+ FRAME_RIF (f)->draw_vertical_window_border (w, x1, y0, y1);
}
else if (!WINDOW_LEFTMOST_P (w)
&& !WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
@@ -23541,9 +23596,9 @@ x_draw_vertical_border (w)
y1 -= 1;
if (WINDOW_LEFT_FRINGE_WIDTH (w) == 0)
- x0 -= 1;
+ x0 -= 1;
- rif->draw_vertical_window_border (w, x0, y0, y1);
+ FRAME_RIF (f)->draw_vertical_window_border (w, x0, y0, y1);
}
}
@@ -23883,6 +23938,7 @@ syms_of_xdisp ()
defsubr (&Slookup_image_map);
#endif
defsubr (&Sformat_mode_line);
+ defsubr (&Sinvisible_p);
staticpro (&Qmenu_bar_update_hook);
Qmenu_bar_update_hook = intern ("menu-bar-update-hook");
@@ -24175,7 +24231,7 @@ and is used only on frames for which no explicit name has been set
= Vframe_title_format
= Fcons (intern ("multiple-frames"),
Fcons (build_string ("%b"),
- Fcons (Fcons (empty_string,
+ Fcons (Fcons (empty_unibyte_string,
Fcons (intern ("invocation-name"),
Fcons (build_string ("@"),
Fcons (intern ("system-name"),
diff --git a/src/xfaces.c b/src/xfaces.c
index e405988704d..36bbacb84ce 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -195,11 +195,13 @@ Boston, MA 02110-1301, USA. */
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <stdio.h> /* This needs to be before termchar.h */
#include "lisp.h"
#include "charset.h"
#include "keyboard.h"
#include "frame.h"
+#include "termhooks.h"
#ifdef HAVE_WINDOW_SYSTEM
#include "fontset.h"
@@ -242,6 +244,7 @@ Boston, MA 02110-1301, USA. */
#include "blockinput.h"
#include "window.h"
#include "intervals.h"
+#include "termchar.h"
#ifdef HAVE_X_WINDOWS
@@ -264,9 +267,6 @@ Boston, MA 02110-1301, USA. */
#include <ctype.h>
-#undef abs
-#define abs(X) ((X) < 0 ? -(X) : (X))
-
/* Number of pt per inch (from the TeXbook). */
#define PT_PER_INCH 72.27
@@ -744,10 +744,9 @@ x_free_gc (f, gc)
struct frame *f;
GC gc;
{
- BLOCK_INPUT;
+ eassert (interrupt_input_blocked);
IF_DEBUG (xassert (--ngcs >= 0));
XFreeGC (FRAME_X_DISPLAY (f), gc);
- UNBLOCK_INPUT;
}
#endif /* HAVE_X_WINDOWS */
@@ -777,10 +776,8 @@ x_free_gc (f, gc)
struct frame *f;
GC gc;
{
- BLOCK_INPUT;
IF_DEBUG (xassert (--ngcs >= 0));
xfree (gc);
- UNBLOCK_INPUT;
}
#endif /* WINDOWSNT */
@@ -807,10 +804,9 @@ x_free_gc (f, gc)
struct frame *f;
GC gc;
{
- BLOCK_INPUT;
+ eassert (interrupt_input_blocked);
IF_DEBUG (xassert (--ngcs >= 0));
XFreeGC (FRAME_MAC_DISPLAY (f), gc);
- UNBLOCK_INPUT;
}
#endif /* MAC_OS */
@@ -1257,8 +1253,10 @@ load_face_font (f, face, c)
face->overstrike = needs_overstrike;
if (face->gc)
{
+ BLOCK_INPUT;
x_free_gc (f, face->gc);
face->gc = 0;
+ UNBLOCK_INPUT;
}
}
else
@@ -1490,11 +1488,11 @@ face_color_gray_p (f, color_name)
gray_p = (/* Any color sufficiently close to black counts as grey. */
(color.red < 5000 && color.green < 5000 && color.blue < 5000)
||
- ((abs (color.red - color.green)
+ ((eabs (color.red - color.green)
< max (color.red, color.green) / 20)
- && (abs (color.green - color.blue)
+ && (eabs (color.green - color.blue)
< max (color.green, color.blue) / 20)
- && (abs (color.blue - color.red)
+ && (eabs (color.blue - color.red)
< max (color.blue, color.red) / 20)));
else
gray_p = 0;
@@ -2716,7 +2714,7 @@ cmp_font_names (a, b)
int resy = FRAME_X_DISPLAY_INFO (font_frame)->resy;
int x_resy = x->numeric[XLFD_RESY];
int y_resy = y->numeric[XLFD_RESY];
- cmp = abs (resy - x_resy) - abs (resy - y_resy);
+ cmp = eabs (resy - x_resy) - eabs (resy - y_resy);
}
}
@@ -3222,6 +3220,22 @@ push_named_merge_point (struct named_merge_point *new_named_merge_point,
+#if 0 /* Seems to be unused. */
+static Lisp_Object
+internal_resolve_face_name (nargs, args)
+ int nargs;
+ Lisp_Object *args;
+{
+ return Fget (args[0], args[1]);
+}
+
+static Lisp_Object
+resolve_face_name_error (ignore)
+ Lisp_Object ignore;
+{
+ return Qnil;
+}
+#endif
/* Resolve face name FACE_NAME. If FACE_NAME is a string, intern it
to make it a symbol. If FACE_NAME is an alias for another face,
@@ -3936,6 +3950,8 @@ Otherwise check for the existence of a global face. */)
{
Lisp_Object lface;
+ face = resolve_face_name (face, 1);
+
if (!NILP (frame))
{
CHECK_LIVE_FRAME (frame);
@@ -5238,8 +5254,10 @@ free_realized_face (f, face)
free_face_fontset (f, face);
if (face->gc)
{
+ BLOCK_INPUT;
x_free_gc (f, face->gc);
face->gc = 0;
+ UNBLOCK_INPUT;
}
free_face_colors (f, face);
@@ -5403,8 +5421,10 @@ clear_face_gcs (c)
struct face *face = c->faces_by_id[i];
if (face && face->gc)
{
+ BLOCK_INPUT;
x_free_gc (c->f, face->gc);
face->gc = 0;
+ UNBLOCK_INPUT;
}
}
#endif /* HAVE_WINDOW_SYSTEM */
@@ -5775,7 +5795,7 @@ smaller_face (f, face_id, steps)
/* Try in increments of 1/2 pt. */
delta = steps < 0 ? 5 : -5;
- steps = abs (steps);
+ steps = eabs (steps);
face = FACE_FROM_ID (f, face_id);
bcopy (face->lface, attrs, sizeof attrs);
@@ -5786,7 +5806,7 @@ smaller_face (f, face_id, steps)
while (steps
&& pt + delta > 0
/* Give up if we cannot find a font within 10pt. */
- && abs (last_pt - pt) < 100)
+ && eabs (last_pt - pt) < 100)
{
/* Look up a face for a slightly smaller/larger font. */
pt += delta;
@@ -6146,7 +6166,7 @@ tty_supports_face_attributes_p (f, attrs, def_face)
/* See if the capabilities we selected above are supported, with the
given colors. */
if (test_caps != 0 &&
- ! tty_capable_p (f, test_caps, fg_tty_color.pixel, bg_tty_color.pixel))
+ ! tty_capable_p (FRAME_TTY (f), test_caps, fg_tty_color.pixel, bg_tty_color.pixel))
return 0;
@@ -6394,17 +6414,17 @@ better_font_p (values, font1, font2, compare_pt_p, avgwidth)
if (xlfd_idx == XLFD_POINT_SIZE)
{
- delta1 = abs (values[i] - (font1->numeric[xlfd_idx]
+ delta1 = eabs (values[i] - (font1->numeric[xlfd_idx]
/ font1->rescale_ratio));
- delta2 = abs (values[i] - (font2->numeric[xlfd_idx]
+ delta2 = eabs (values[i] - (font2->numeric[xlfd_idx]
/ font2->rescale_ratio));
- if (abs (delta1 - delta2) < FONT_POINT_SIZE_QUANTUM)
+ if (eabs (delta1 - delta2) < FONT_POINT_SIZE_QUANTUM)
continue;
}
else
{
- delta1 = abs (values[i] - font1->numeric[xlfd_idx]);
- delta2 = abs (values[i] - font2->numeric[xlfd_idx]);
+ delta1 = eabs (values[i] - font1->numeric[xlfd_idx]);
+ delta2 = eabs (values[i] - font2->numeric[xlfd_idx]);
}
if (delta1 > delta2)
@@ -6426,8 +6446,8 @@ better_font_p (values, font1, font2, compare_pt_p, avgwidth)
if (avgwidth)
{
- int delta1 = abs (avgwidth - font1->numeric[XLFD_AVGWIDTH]);
- int delta2 = abs (avgwidth - font2->numeric[XLFD_AVGWIDTH]);
+ int delta1 = eabs (avgwidth - font1->numeric[XLFD_AVGWIDTH]);
+ int delta2 = eabs (avgwidth - font2->numeric[XLFD_AVGWIDTH]);
if (delta1 > delta2)
return 0;
else if (delta1 < delta2)
@@ -6950,7 +6970,8 @@ realize_basic_faces (f)
{
FRAME_FACE_CACHE (f)->menu_face_changed_p = 0;
#ifdef USE_X_TOOLKIT
- x_update_menu_appearance (f);
+ if (FRAME_WINDOW_P (f))
+ x_update_menu_appearance (f);
#endif
}
@@ -7037,7 +7058,7 @@ realize_default_face (f)
LFACE_FOREGROUND (lface) = XCDR (color);
else if (FRAME_WINDOW_P (f))
return 0;
- else if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
+ else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
LFACE_FOREGROUND (lface) = build_string (unspecified_fg);
else
abort ();
@@ -7052,7 +7073,7 @@ realize_default_face (f)
LFACE_BACKGROUND (lface) = XCDR (color);
else if (FRAME_WINDOW_P (f))
return 0;
- else if (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
+ else if (FRAME_INITIAL_P (f) || FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f))
LFACE_BACKGROUND (lface) = build_string (unspecified_bg);
else
abort ();
@@ -7069,17 +7090,17 @@ realize_default_face (f)
#ifdef HAVE_WINDOW_SYSTEM
#ifdef HAVE_X_WINDOWS
- if (face->font != FRAME_FONT (f))
+ if (FRAME_X_P (f) && face->font != FRAME_FONT (f))
{
/* This can happen when making a frame on a display that does
- not support the default font. */
+ not support the default font. */
if (!face->font)
- return 0;
-
+ return 0;
+
/* Otherwise, the font specified for the frame was not
- acceptable as a font for the default face (perhaps because
- auto-scaled fonts are rejected), so we must adjust the frame
- font. */
+ acceptable as a font for the default face (perhaps because
+ auto-scaled fonts are rejected), so we must adjust the frame
+ font. */
x_set_font (f, build_string (face->font_name), Qnil);
}
#endif /* HAVE_X_WINDOWS */
@@ -7159,6 +7180,11 @@ realize_face (cache, attrs, c, base_face, former_face_id)
face = realize_x_face (cache, attrs, c, base_face);
else if (FRAME_TERMCAP_P (cache->f) || FRAME_MSDOS_P (cache->f))
face = realize_tty_face (cache, attrs, c);
+ else if (FRAME_INITIAL_P (cache->f))
+ {
+ /* Create a dummy face. */
+ face = make_realized_face (attrs);
+ }
else
abort ();
diff --git a/src/xfns.c b/src/xfns.c
index 3963311b1f4..96631d98f55 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -47,6 +47,7 @@ Boston, MA 02110-1301, USA. */
#include "systime.h"
#include "termhooks.h"
#include "atimer.h"
+#include "termchar.h"
#ifdef HAVE_X_WINDOWS
@@ -72,8 +73,13 @@ Boston, MA 02110-1301, USA. */
#include <X11/Shell.h>
#ifndef USE_MOTIF
+#ifdef HAVE_XAW3D
+#include <X11/Xaw3d/Paned.h>
+#include <X11/Xaw3d/Label.h>
+#else /* !HAVE_XAW3D */
#include <X11/Xaw/Paned.h>
#include <X11/Xaw/Label.h>
+#endif /* HAVE_XAW3D */
#endif /* USE_MOTIF */
#ifdef USG
@@ -132,11 +138,7 @@ static Lisp_Object Vgtk_version_string;
#endif /* USE_GTK */
-#ifdef HAVE_X11R4
#define MAXREQUEST(dpy) (XMaxRequestSize (dpy))
-#else
-#define MAXREQUEST(dpy) ((dpy)->max_request_size)
-#endif
/* The gray bitmap `bitmaps/gray'. This is done because xterm.c uses
it, and including `bitmaps/gray' more than once is a problem when
@@ -250,17 +252,18 @@ check_x_frame (frame)
return f;
}
-/* Let the user specify an X display with a frame.
+/* Let the user specify an X display with a Lisp object.
+ OBJECT may be nil, a frame or a terminal id.
nil stands for the selected frame--or, if that is not an X frame,
the first X display on the list. */
struct x_display_info *
-check_x_display_info (frame)
- Lisp_Object frame;
+check_x_display_info (object)
+ Lisp_Object object;
{
struct x_display_info *dpyinfo = NULL;
- if (NILP (frame))
+ if (NILP (object))
{
struct frame *sf = XFRAME (selected_frame);
@@ -271,11 +274,20 @@ check_x_display_info (frame)
else
error ("X windows are not in use or not initialized");
}
- else if (STRINGP (frame))
- dpyinfo = x_display_info_for_name (frame);
+ else if (INTEGERP (object))
+ {
+ struct terminal *t = get_terminal (object, 1);
+
+ if (t->type != output_x_window)
+ error ("Terminal %d is not an X display", XINT (object));
+
+ dpyinfo = t->display_info.x;
+ }
+ else if (STRINGP (object))
+ dpyinfo = x_display_info_for_name (object);
else
{
- FRAME_PTR f = check_x_frame (frame);
+ FRAME_PTR f = check_x_frame (object);
dpyinfo = FRAME_X_DISPLAY_INFO (f);
}
@@ -856,8 +868,8 @@ x_set_foreground_color (f, arg, oldval)
unsigned long fg, old_fg;
fg = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
- old_fg = x->foreground_pixel;
- x->foreground_pixel = fg;
+ old_fg = FRAME_FOREGROUND_PIXEL (f);
+ FRAME_FOREGROUND_PIXEL (f) = fg;
if (FRAME_X_WINDOW (f) != 0)
{
@@ -894,8 +906,8 @@ x_set_background_color (f, arg, oldval)
unsigned long bg;
bg = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f));
- unload_color (f, x->background_pixel);
- x->background_pixel = bg;
+ unload_color (f, FRAME_BACKGROUND_PIXEL (f));
+ FRAME_BACKGROUND_PIXEL (f) = bg;
if (FRAME_X_WINDOW (f) != 0)
{
@@ -919,7 +931,7 @@ x_set_background_color (f, arg, oldval)
!NILP (bar);
bar = XSCROLL_BAR (bar)->next)
{
- Window window = SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar));
+ Window window = XSCROLL_BAR (bar)->x_window;
XSetWindowBackground (dpy, window, bg);
}
}
@@ -943,13 +955,13 @@ x_set_mouse_color (f, arg, oldval)
Cursor cursor, nontext_cursor, mode_cursor, hand_cursor;
Cursor hourglass_cursor, horizontal_drag_cursor;
unsigned long pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
- unsigned long mask_color = x->background_pixel;
+ unsigned long mask_color = FRAME_BACKGROUND_PIXEL (f);
/* Don't let pointers be invisible. */
if (mask_color == pixel)
{
x_free_colors (f, &pixel, 1);
- pixel = x_copy_color (f, x->foreground_pixel);
+ pixel = x_copy_color (f, FRAME_FOREGROUND_PIXEL (f));
}
unload_color (f, x->mouse_pixel);
@@ -1092,13 +1104,13 @@ x_set_cursor_color (f, arg, oldval)
fore_pixel_allocated_p = 1;
}
else
- fore_pixel = x->background_pixel;
+ fore_pixel = FRAME_BACKGROUND_PIXEL (f);
pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
pixel_allocated_p = 1;
/* Make sure that the cursor color differs from the background color. */
- if (pixel == x->background_pixel)
+ if (pixel == FRAME_BACKGROUND_PIXEL (f))
{
if (pixel_allocated_p)
{
@@ -1114,7 +1126,7 @@ x_set_cursor_color (f, arg, oldval)
x_free_colors (f, &fore_pixel, 1);
fore_pixel_allocated_p = 0;
}
- fore_pixel = x->background_pixel;
+ fore_pixel = FRAME_BACKGROUND_PIXEL (f);
}
}
@@ -1399,10 +1411,8 @@ x_set_tool_bar_lines (f, value, oldval)
below the menu bar. */
if (FRAME_X_WINDOW (f) && FRAME_TOOL_BAR_LINES (f) == 0)
{
- updating_frame = f;
- clear_frame ();
+ clear_frame (f);
clear_current_matrices (f);
- updating_frame = NULL;
}
/* If the tool bar gets smaller, the internal border below it
@@ -1453,10 +1463,10 @@ x_set_scroll_bar_foreground (f, value, oldval)
if (FRAME_X_WINDOW (f) && FRAME_VISIBLE_P (f))
{
/* Remove all scroll bars because they have wrong colors. */
- if (condemn_scroll_bars_hook)
- (*condemn_scroll_bars_hook) (f);
- if (judge_scroll_bars_hook)
- (*judge_scroll_bars_hook) (f);
+ if (FRAME_TERMINAL (f)->condemn_scroll_bars_hook)
+ (*FRAME_TERMINAL (f)->condemn_scroll_bars_hook) (f);
+ if (FRAME_TERMINAL (f)->judge_scroll_bars_hook)
+ (*FRAME_TERMINAL (f)->judge_scroll_bars_hook) (f);
update_face_from_frame_parameter (f, Qscroll_bar_foreground, value);
redraw_frame (f);
@@ -1502,10 +1512,10 @@ x_set_scroll_bar_background (f, value, oldval)
if (FRAME_X_WINDOW (f) && FRAME_VISIBLE_P (f))
{
/* Remove all scroll bars because they have wrong colors. */
- if (condemn_scroll_bars_hook)
- (*condemn_scroll_bars_hook) (f);
- if (judge_scroll_bars_hook)
- (*judge_scroll_bars_hook) (f);
+ if (FRAME_TERMINAL (f)->condemn_scroll_bars_hook)
+ (*FRAME_TERMINAL (f)->condemn_scroll_bars_hook) (f);
+ if (FRAME_TERMINAL (f)->judge_scroll_bars_hook)
+ (*FRAME_TERMINAL (f)->judge_scroll_bars_hook) (f);
update_face_from_frame_parameter (f, Qscroll_bar_background, value);
redraw_frame (f);
@@ -1605,7 +1615,6 @@ x_set_name_internal (f, name)
if (FRAME_X_WINDOW (f))
{
BLOCK_INPUT;
-#ifdef HAVE_X11R4
{
XTextProperty text, icon;
int bytes, stringp;
@@ -1673,12 +1682,6 @@ x_set_name_internal (f, name)
if (do_free_text_value)
xfree (text.value);
}
-#else /* not HAVE_X11R4 */
- XSetIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
- SDATA (name));
- XStoreName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
- SDATA (name));
-#endif /* not HAVE_X11R4 */
UNBLOCK_INPUT;
}
}
@@ -1839,9 +1842,9 @@ x_default_scroll_bar_color_parameter (f, alist, prop, xprop, xclass,
build_string (foreground_p
? "foreground"
: "background"),
- empty_string,
+ empty_unibyte_string,
build_string ("verticalScrollBar"),
- empty_string);
+ empty_unibyte_string);
if (!STRINGP (tem))
{
/* If nothing has been specified, scroll bars will use a
@@ -1865,23 +1868,6 @@ x_default_scroll_bar_color_parameter (f, alist, prop, xprop, xclass,
-#if !defined (HAVE_X11R4) && !defined (HAVE_XSETWMPROTOCOLS)
-
-Status
-XSetWMProtocols (dpy, w, protocols, count)
- Display *dpy;
- Window w;
- Atom *protocols;
- int count;
-{
- Atom prop;
- prop = XInternAtom (dpy, "WM_PROTOCOLS", False);
- if (prop == None) return False;
- XChangeProperty (dpy, w, prop, XA_ATOM, 32, PropModeReplace,
- (unsigned char *) protocols, count);
- return True;
-}
-#endif /* not HAVE_X11R4 && not HAVE_XSETWMPROTOCOLS */
#ifdef USE_X_TOOLKIT
@@ -2725,7 +2711,7 @@ x_window (f)
XSetWindowAttributes attributes;
unsigned long attribute_mask;
- attributes.background_pixel = f->output_data.x->background_pixel;
+ attributes.background_pixel = FRAME_BACKGROUND_PIXEL (f);
attributes.border_pixel = f->output_data.x->border_pixel;
attributes.bit_gravity = StaticGravity;
attributes.backing_store = NotUseful;
@@ -2852,7 +2838,9 @@ x_icon (f, parms)
Lisp_Object parms;
{
Lisp_Object icon_x, icon_y;
+#if 0
struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
+#endif
/* Set the position of the icon. Note that twm groups all
icons in an icon window. */
@@ -2913,8 +2901,8 @@ x_make_gc (f)
/* Normal video */
gc_values.font = FRAME_FONT (f)->fid;
- gc_values.foreground = f->output_data.x->foreground_pixel;
- gc_values.background = f->output_data.x->background_pixel;
+ gc_values.foreground = FRAME_FOREGROUND_PIXEL (f);
+ gc_values.background = FRAME_BACKGROUND_PIXEL (f);
gc_values.line_width = 0; /* Means 1 using fast algorithm. */
f->output_data.x->normal_gc
= XCreateGC (FRAME_X_DISPLAY (f),
@@ -2923,8 +2911,8 @@ x_make_gc (f)
&gc_values);
/* Reverse video style. */
- gc_values.foreground = f->output_data.x->background_pixel;
- gc_values.background = f->output_data.x->foreground_pixel;
+ gc_values.foreground = FRAME_BACKGROUND_PIXEL (f);
+ gc_values.background = FRAME_FOREGROUND_PIXEL (f);
f->output_data.x->reverse_gc
= XCreateGC (FRAME_X_DISPLAY (f),
FRAME_X_WINDOW (f),
@@ -2932,7 +2920,7 @@ x_make_gc (f)
&gc_values);
/* Cursor has cursor-color background, background-color foreground. */
- gc_values.foreground = f->output_data.x->background_pixel;
+ gc_values.foreground = FRAME_BACKGROUND_PIXEL (f);
gc_values.background = f->output_data.x->cursor_pixel;
gc_values.fill_style = FillOpaqueStippled;
gc_values.stipple
@@ -2956,8 +2944,8 @@ x_make_gc (f)
= (XCreatePixmapFromBitmapData
(FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window,
gray_bits, gray_width, gray_height,
- f->output_data.x->foreground_pixel,
- f->output_data.x->background_pixel,
+ FRAME_FOREGROUND_PIXEL (f),
+ FRAME_BACKGROUND_PIXEL (f),
DefaultDepth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f))));
UNBLOCK_INPUT;
@@ -3012,6 +3000,12 @@ unwind_create_frame (frame)
{
struct frame *f = XFRAME (frame);
+ /* If frame is already dead, nothing to do. This can happen if the
+ display is disconnected after the frame has become official, but
+ before x_create_frame removes the unwind protect. */
+ if (!FRAME_LIVE_P (f))
+ return Qnil;
+
/* If frame is ``official'', nothing to do. */
if (!CONSP (Vframe_list) || !EQ (XCAR (Vframe_list), frame))
{
@@ -3060,24 +3054,27 @@ This function is an internal primitive--use `make-frame' instead. */)
Lisp_Object parent;
struct kboard *kb;
- check_x ();
-
parms = Fcopy_alist (parms);
/* Use this general default value to start with
until we know if this frame has a specified name. */
Vx_resource_name = Vinvocation_name;
- display = x_get_arg (dpyinfo, parms, Qdisplay, 0, 0, RES_TYPE_STRING);
+ display = x_get_arg (dpyinfo, parms, Qterminal, 0, 0, RES_TYPE_NUMBER);
+ if (EQ (display, Qunbound))
+ display = x_get_arg (dpyinfo, parms, Qdisplay, 0, 0, RES_TYPE_STRING);
if (EQ (display, Qunbound))
display = Qnil;
dpyinfo = check_x_display_info (display);
#ifdef MULTI_KBOARD
- kb = dpyinfo->kboard;
+ kb = dpyinfo->terminal->kboard;
#else
kb = &the_only_kboard;
#endif
+ if (!dpyinfo->terminal->name)
+ error ("Terminal is not live, can't create new frames on it");
+
name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
if (!STRINGP (name)
&& ! EQ (name, Qunbound)
@@ -3118,6 +3115,9 @@ This function is an internal primitive--use `make-frame' instead. */)
/* Note that X Windows does support scroll bars. */
FRAME_CAN_HAVE_SCROLL_BARS (f) = 1;
+ f->terminal = dpyinfo->terminal;
+ f->terminal->reference_count++;
+
f->output_method = output_x_window;
f->output_data.x = (struct x_output *) xmalloc (sizeof (struct x_output));
bzero (f->output_data.x, sizeof (struct x_output));
@@ -3144,9 +3144,6 @@ This function is an internal primitive--use `make-frame' instead. */)
image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
dpyinfo_refcount = dpyinfo->reference_count;
#endif /* GLYPH_DEBUG */
-#ifdef MULTI_KBOARD
- FRAME_KBOARD (f) = kb;
-#endif
/* These colors will be set anyway later, but it's important
to get the color reference counts right, so initialize them! */
@@ -3157,8 +3154,8 @@ This function is an internal primitive--use `make-frame' instead. */)
/* Function x_decode_color can signal an error. Make
sure to initialize color slots so that we won't try
to free colors we haven't allocated. */
- f->output_data.x->foreground_pixel = -1;
- f->output_data.x->background_pixel = -1;
+ FRAME_FOREGROUND_PIXEL (f) = -1;
+ FRAME_BACKGROUND_PIXEL (f) = -1;
f->output_data.x->cursor_pixel = -1;
f->output_data.x->cursor_foreground_pixel = -1;
f->output_data.x->border_pixel = -1;
@@ -3166,9 +3163,9 @@ This function is an internal primitive--use `make-frame' instead. */)
black = build_string ("black");
GCPRO1 (black);
- f->output_data.x->foreground_pixel
+ FRAME_FOREGROUND_PIXEL (f)
= x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
- f->output_data.x->background_pixel
+ FRAME_BACKGROUND_PIXEL (f)
= x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
f->output_data.x->cursor_pixel
= x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
@@ -3435,7 +3432,7 @@ This function is an internal primitive--use `make-frame' instead. */)
}
/* Initialize `default-minibuffer-frame' in case this is the first
- frame on this display device. */
+ frame on this terminal. */
if (FRAME_HAS_MINIBUF_P (f)
&& (!FRAMEP (kb->Vdefault_minibuffer_frame)
|| !FRAME_LIVE_P (XFRAME (kb->Vdefault_minibuffer_frame))))
@@ -3443,7 +3440,7 @@ This function is an internal primitive--use `make-frame' instead. */)
/* All remaining specified parameters, which have not been "used"
by x_get_arg and friends, now go in the misc. alist of the frame. */
- for (tem = parms; !NILP (tem); tem = XCDR (tem))
+ for (tem = parms; CONSP (tem); tem = XCDR (tem))
if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
f->param_alist = Fcons (XCAR (tem), f->param_alist);
@@ -3497,6 +3494,7 @@ FRAME nil means use the selected frame. */)
x_catch_errors (dpy);
XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
RevertToParent, CurrentTime);
+ x_ewmh_activate_frame (f);
x_uncatch_errors ();
UNBLOCK_INPUT;
@@ -3540,10 +3538,10 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0,
doc: /* Internal function called by `display-color-p', which see. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
if (dpyinfo->n_planes <= 2)
return Qnil;
@@ -3565,13 +3563,13 @@ DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p,
0, 1, 0,
doc: /* Return t if the X display supports shades of gray.
Note that color displays do support shades of gray.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
if (dpyinfo->n_planes <= 1)
return Qnil;
@@ -3593,56 +3591,56 @@ If omitted or nil, that stands for the selected frame's display. */)
DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width,
0, 1, 0,
- doc: /* Return the width in pixels of the X display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the width in pixels of the X display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (dpyinfo->width);
}
DEFUN ("x-display-pixel-height", Fx_display_pixel_height,
Sx_display_pixel_height, 0, 1, 0,
- doc: /* Return the height in pixels of the X display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the height in pixels of the X display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (dpyinfo->height);
}
DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes,
0, 1, 0,
- doc: /* Return the number of bitplanes of the X display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the number of bitplanes of the X display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (dpyinfo->n_planes);
}
DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells,
0, 1, 0,
- doc: /* Return the number of color cells of the X display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the number of color cells of the X display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
int nr_planes = DisplayPlanes (dpyinfo->display,
XScreenNumberOfScreen (dpyinfo->screen));
@@ -3660,29 +3658,29 @@ If omitted or nil, that stands for the selected frame's display. */)
DEFUN ("x-server-max-request-size", Fx_server_max_request_size,
Sx_server_max_request_size,
0, 1, 0,
- doc: /* Return the maximum request size of the X server of display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the maximum request size of the X server of display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (MAXREQUEST (dpyinfo->display));
}
DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0,
- doc: /* Return the "vendor ID" string of the X server of display DISPLAY.
+ doc: /* Return the "vendor ID" string of the X server of display TERMINAL.
\(Labelling every distributor as a "vendor" embodies the false assumption
that operating systems cannot be developed and distributed noncommercially.)
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
char *vendor = ServerVendor (dpyinfo->display);
if (! vendor) vendor = "";
@@ -3690,18 +3688,18 @@ If omitted or nil, that stands for the selected frame's display. */)
}
DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0,
- doc: /* Return the version numbers of the X server of display DISPLAY.
+ doc: /* Return the version numbers of the X server of display TERMINAL.
The value is a list of three integers: the major and minor
version numbers of the X Protocol in use, and the distributor-specific release
number. See also the function `x-server-vendor'.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
Display *dpy = dpyinfo->display;
return Fcons (make_number (ProtocolVersion (dpy)),
@@ -3710,55 +3708,55 @@ If omitted or nil, that stands for the selected frame's display. */)
}
DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0,
- doc: /* Return the number of screens on the X server of display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the number of screens on the X server of display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (ScreenCount (dpyinfo->display));
}
DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0,
- doc: /* Return the height in millimeters of the X display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the height in millimeters of the X display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (HeightMMOfScreen (dpyinfo->screen));
}
DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0,
- doc: /* Return the width in millimeters of the X display DISPLAY.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return the width in millimeters of the X display TERMINAL.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
return make_number (WidthMMOfScreen (dpyinfo->screen));
}
DEFUN ("x-display-backing-store", Fx_display_backing_store,
Sx_display_backing_store, 0, 1, 0,
- doc: /* Return an indication of whether X display DISPLAY does backing store.
+ doc: /* Return an indication of whether X display TERMINAL does backing store.
The value may be `always', `when-mapped', or `not-useful'.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
Lisp_Object result;
switch (DoesBackingStore (dpyinfo->screen))
@@ -3785,17 +3783,17 @@ If omitted or nil, that stands for the selected frame's display. */)
DEFUN ("x-display-visual-class", Fx_display_visual_class,
Sx_display_visual_class, 0, 1, 0,
- doc: /* Return the visual class of the X display DISPLAY.
+ doc: /* Return the visual class of the X display TERMINAL.
The value is one of the symbols `static-gray', `gray-scale',
`static-color', `pseudo-color', `true-color', or `direct-color'.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
Lisp_Object result;
switch (dpyinfo->visual->class)
@@ -3828,14 +3826,14 @@ If omitted or nil, that stands for the selected frame's display. */)
DEFUN ("x-display-save-under", Fx_display_save_under,
Sx_display_save_under, 0, 1, 0,
- doc: /* Return t if the X display DISPLAY supports the save-under feature.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
+ doc: /* Return t if the X display TERMINAL supports the save-under feature.
+The optional argument TERMINAL specifies which display to ask about.
+TERMINAL should be a terminal id, a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
if (DoesSaveUnders (dpyinfo->screen) == True)
return Qt;
@@ -3987,11 +3985,7 @@ select_visual (dpyinfo)
dpyinfo->visual = DefaultVisualOfScreen (screen);
-#ifdef HAVE_X11R4
vinfo_template.visualid = XVisualIDFromVisual (dpyinfo->visual);
-#else
- vinfo_template.visualid = dpyinfo->visual->visualid;
-#endif
vinfo_template.screen = XScreenNumberOfScreen (screen);
vinfo = XGetVisualInfo (dpy, VisualIDMask | VisualScreenMask,
&vinfo_template, &n_visuals);
@@ -4016,8 +4010,10 @@ x_display_info_for_name (name)
CHECK_STRING (name);
- if (! EQ (Vwindow_system, intern ("x")))
- error ("Not using X Windows");
+#if 0
+ if (! EQ (Vinitial_window_system, intern ("x")))
+ error ("Not using X Windows"); /* That doesn't stop us anymore. */
+#endif
for (dpyinfo = x_display_list, names = x_display_name_list;
dpyinfo;
@@ -4064,8 +4060,10 @@ terminate Emacs if we can't open the connection. */)
if (! NILP (xrm_string))
CHECK_STRING (xrm_string);
- if (! EQ (Vwindow_system, intern ("x")))
- error ("Not using X Windows");
+#if 0
+ if (! EQ (Vinitial_window_system, intern ("x")))
+ error ("Not using X Windows"); /* That doesn't stop us anymore. */
+#endif
if (! NILP (xrm_string))
xrm_option = (unsigned char *) SDATA (xrm_string);
@@ -4100,41 +4098,19 @@ An insecure way to solve the problem may be to use `xhost'.\n",
DEFUN ("x-close-connection", Fx_close_connection,
Sx_close_connection, 1, 1, 0,
- doc: /* Close the connection to DISPLAY's X server.
-For DISPLAY, specify either a frame or a display name (a string).
-If DISPLAY is nil, that stands for the selected frame's display. */)
- (display)
- Lisp_Object display;
+ doc: /* Close the connection to TERMINAL's X server.
+For TERMINAL, specify a terminal id, a frame or a display name (a
+string). If TERMINAL is nil, that stands for the selected frame's
+terminal. */)
+ (terminal)
+ Lisp_Object terminal;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
- int i;
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
if (dpyinfo->reference_count > 0)
error ("Display still has frames on it");
- BLOCK_INPUT;
- /* Free the fonts in the font table. */
- for (i = 0; i < dpyinfo->n_fonts; i++)
- if (dpyinfo->font_table[i].name)
- {
- XFreeFont (dpyinfo->display, dpyinfo->font_table[i].font);
- }
-
- x_destroy_all_bitmaps (dpyinfo);
- XSetCloseDownMode (dpyinfo->display, DestroyAll);
-
-#ifdef USE_GTK
- xg_display_close (dpyinfo->display);
-#else
-#ifdef USE_X_TOOLKIT
- XtCloseDisplay (dpyinfo->display);
-#else
- XCloseDisplay (dpyinfo->display);
-#endif
-#endif /* ! USE_GTK */
-
- x_delete_display (dpyinfo);
- UNBLOCK_INPUT;
+ x_delete_terminal (dpyinfo->terminal);
return Qnil;
}
@@ -4146,7 +4122,7 @@ DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0,
Lisp_Object tail, result;
result = Qnil;
- for (tail = x_display_name_list; ! NILP (tail); tail = XCDR (tail))
+ for (tail = x_display_name_list; CONSP (tail); tail = XCDR (tail))
result = Fcons (XCAR (XCAR (tail)), result);
return result;
@@ -4158,13 +4134,13 @@ If ON is nil, allow buffering of requests.
Turning on synchronization prohibits the Xlib routines from buffering
requests and seriously degrades performance, but makes debugging much
easier.
-The optional second argument DISPLAY specifies which display to act on.
-DISPLAY should be either a frame or a display name (a string).
-If DISPLAY is omitted or nil, that stands for the selected frame's display. */)
- (on, display)
- Lisp_Object display, on;
+The optional second argument TERMINAL specifies which display to act on.
+TERMINAL should be a terminal id, a frame or a display name (a string).
+If TERMINAL is omitted or nil, that stands for the selected frame's display. */)
+ (on, terminal)
+ Lisp_Object terminal, on;
{
- struct x_display_info *dpyinfo = check_x_display_info (display);
+ struct x_display_info *dpyinfo = check_x_display_info (terminal);
XSynchronize (dpyinfo->display, !EQ (on, Qnil));
@@ -4468,10 +4444,6 @@ start_hourglass ()
EMACS_TIME delay;
int secs, usecs = 0;
- /* Don't bother for ttys. */
- if (NILP (Vwindow_system))
- return;
-
cancel_hourglass ();
if (INTEGERP (Vhourglass_delay)
@@ -4683,20 +4655,16 @@ x_create_tip_frame (dpyinfo, parms, text)
int width, height;
int count = SPECPDL_INDEX ();
struct gcpro gcpro1, gcpro2, gcpro3;
- struct kboard *kb;
int face_change_count_before = face_change_count;
Lisp_Object buffer;
struct buffer *old_buffer;
check_x ();
- parms = Fcopy_alist (parms);
+ if (!dpyinfo->terminal->name)
+ error ("Terminal is not live, can't create new frames on it");
-#ifdef MULTI_KBOARD
- kb = dpyinfo->kboard;
-#else
- kb = &the_only_kboard;
-#endif
+ parms = Fcopy_alist (parms);
/* Get the name of the frame to use for resource lookup. */
name = x_get_arg (dpyinfo, parms, Qname, "name", "Name", RES_TYPE_STRING);
@@ -4724,6 +4692,9 @@ x_create_tip_frame (dpyinfo, parms, text)
FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
record_unwind_protect (unwind_create_tip_frame, frame);
+ f->terminal = dpyinfo->terminal;
+ f->terminal->reference_count++;
+
/* By setting the output method, we're essentially saying that
the frame is live, as per FRAME_LIVE_P. If we get a signal
from this point on, x_destroy_window might screw up reference
@@ -4745,9 +4716,6 @@ x_create_tip_frame (dpyinfo, parms, text)
image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
dpyinfo_refcount = dpyinfo->reference_count;
#endif /* GLYPH_DEBUG */
-#ifdef MULTI_KBOARD
- FRAME_KBOARD (f) = kb;
-#endif
f->output_data.x->parent_desc = FRAME_X_DISPLAY_INFO (f)->root_window;
f->output_data.x->explicit_parent = 0;
@@ -4757,11 +4725,21 @@ x_create_tip_frame (dpyinfo, parms, text)
Lisp_Object black;
struct gcpro gcpro1;
+ /* Function x_decode_color can signal an error. Make
+ sure to initialize color slots so that we won't try
+ to free colors we haven't allocated. */
+ FRAME_FOREGROUND_PIXEL (f) = -1;
+ FRAME_BACKGROUND_PIXEL (f) = -1;
+ f->output_data.x->cursor_pixel = -1;
+ f->output_data.x->cursor_foreground_pixel = -1;
+ f->output_data.x->border_pixel = -1;
+ f->output_data.x->mouse_pixel = -1;
+
black = build_string ("black");
GCPRO1 (black);
- f->output_data.x->foreground_pixel
+ FRAME_FOREGROUND_PIXEL (f)
= x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
- f->output_data.x->background_pixel
+ FRAME_BACKGROUND_PIXEL (f)
= x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
f->output_data.x->cursor_pixel
= x_decode_color (f, black, BLACK_PIX_DEFAULT (f));
diff --git a/src/xmenu.c b/src/xmenu.c
index 723de57fc5d..14c72397110 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -41,10 +41,10 @@ Boston, MA 02110-1301, USA. */
#include <stdio.h>
#include "lisp.h"
-#include "termhooks.h"
#include "keyboard.h"
#include "keymap.h"
#include "frame.h"
+#include "termhooks.h"
#include "window.h"
#include "blockinput.h"
#include "buffer.h"
@@ -82,7 +82,11 @@ Boston, MA 02110-1301, USA. */
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#ifdef USE_LUCID
+#ifdef HAVE_XAW3D
+#include <X11/Xaw3d/Paned.h>
+#else /* !HAVE_XAW3D */
#include <X11/Xaw/Paned.h>
+#endif /* HAVE_XAW3D */
#endif /* USE_LUCID */
#include "../lwlib/lwlib.h"
#else /* not USE_X_TOOLKIT */
@@ -325,7 +329,7 @@ restore_menu_items (saved)
menu_items_used = XINT (XCAR (saved));
saved = XCDR (saved);
menu_items_n_panes = XINT (XCAR (saved));
- saved = XCDR (saved);
+ saved = XCDR (saved);
menu_items_submenu_depth = XINT (XCAR (saved));
return Qnil;
}
@@ -350,15 +354,8 @@ save_menu_items ()
static void
grow_menu_items ()
{
- Lisp_Object old;
- int old_size = menu_items_allocated;
- old = menu_items;
-
menu_items_allocated *= 2;
-
- menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
- bcopy (XVECTOR (old)->contents, XVECTOR (menu_items)->contents,
- old_size * sizeof (Lisp_Object));
+ menu_items = larger_vector (menu_items, menu_items_allocated, Qnil);
}
/* Begin a submenu. */
@@ -741,6 +738,9 @@ mouse_position_for_popup (f, x, y)
Window root, dummy_window;
int dummy;
+ if (! FRAME_X_P (f))
+ abort ();
+
BLOCK_INPUT;
XQueryPointer (FRAME_X_DISPLAY (f),
@@ -936,6 +936,9 @@ no quit occurs and `x-popup-menu' returns nil. */)
xpos += XINT (x);
ypos += XINT (y);
+ if (! FRAME_X_P (f))
+ error ("Can not put X menu on non-X terminal");
+
XSETFRAME (Vmenu_updating_frame, f);
}
else
@@ -1124,6 +1127,9 @@ for instance using the window manager, then this produces a quit and
but I don't want to make one now. */
CHECK_WINDOW (window);
+ if (! FRAME_X_P (f))
+ error ("Can not put X dialog on non-X terminal");
+
#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
/* Display a menu with these alternatives
in the middle of frame F. */
@@ -1305,7 +1311,7 @@ popup_get_selection (initial_event, dpyinfo, id, do_timers)
}
}
-DEFUN ("menu-bar-open", Fmenu_bar_open, Smenu_bar_open, 0, 1, "i",
+DEFUN ("x-menu-bar-open-internal", Fx_menu_bar_open_internal, Sx_menu_bar_open_internal, 0, 1, "i",
doc: /* Start key navigation of the menu bar in FRAME.
This initially opens the first menu bar item and you can then navigate with the
arrow keys, select a menu entry with the return key or cancel with the
@@ -1384,7 +1390,7 @@ If FRAME is nil or not given, use the selected frame. */)
#ifdef USE_GTK
-DEFUN ("menu-bar-open", Fmenu_bar_open, Smenu_bar_open, 0, 1, "i",
+DEFUN ("x-menu-bar-open-internal", Fx_menu_bar_open_internal, Sx_menu_bar_open_internal, 0, 1, "i",
doc: /* Start key navigation of the menu bar in FRAME.
This initially opens the first menu bar item and you can then navigate with the
arrow keys, select a menu entry with the return key or cancel with the
@@ -1460,6 +1466,9 @@ void
x_activate_menubar (f)
FRAME_PTR f;
{
+ if (! FRAME_X_P (f))
+ abort ();
+
if (!f->output_data.x->saved_menu_event->type)
return;
@@ -2094,9 +2103,14 @@ update_frame_menubar (f)
#ifdef USE_GTK
return xg_update_frame_menubar (f);
#else
- struct x_output *x = f->output_data.x;
+ struct x_output *x;
int columns, rows;
+ if (! FRAME_X_P (f))
+ abort ();
+
+ x = f->output_data.x;
+
if (!x->menubar_widget || XtIsManaged (x->menubar_widget))
return 0;
@@ -2142,7 +2156,7 @@ set_frame_menubar (f, first_time, deep_p)
int first_time;
int deep_p;
{
- xt_or_gtk_widget menubar_widget = f->output_data.x->menubar_widget;
+ xt_or_gtk_widget menubar_widget;
#ifdef USE_X_TOOLKIT
LWLIB_ID id;
#endif
@@ -2152,6 +2166,10 @@ set_frame_menubar (f, first_time, deep_p)
int *submenu_start, *submenu_end;
int *submenu_top_level_items, *submenu_n_panes;
+ if (! FRAME_X_P (f))
+ abort ();
+
+ menubar_widget = f->output_data.x->menubar_widget;
XSETFRAME (Vmenu_updating_frame, f);
@@ -2504,6 +2522,9 @@ free_frame_menubar (f)
{
Widget menubar_widget;
+ if (! FRAME_X_P (f))
+ abort ();
+
menubar_widget = f->output_data.x->menubar_widget;
f->output_data.x->menubar_height = 0;
@@ -2656,6 +2677,9 @@ create_and_show_popup_menu (f, first_wv, x, y, for_click)
struct next_popup_x_y popup_x_y;
int specpdl_count = SPECPDL_INDEX ();
+ if (! FRAME_X_P (f))
+ abort ();
+
xg_crazy_callback_abort = 1;
menu = xg_create_widget ("popup", first_wv->name, f, first_wv,
G_CALLBACK (popup_selection_callback),
@@ -2764,6 +2788,9 @@ create_and_show_popup_menu (f, first_wv, x, y, for_click)
LWLIB_ID menu_id;
Widget menu;
+ if (! FRAME_X_P (f))
+ abort ();
+
menu_id = widget_id_tick++;
menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv,
f->output_data.x->widget, 1, 0,
@@ -2840,6 +2867,9 @@ xmenu_show (f, x, y, for_click, keymaps, title, error)
int first_pane;
+ if (! FRAME_X_P (f))
+ abort ();
+
*error = NULL;
if (menu_items_used <= MENU_ITEMS_PANE_LENGTH)
@@ -3122,6 +3152,9 @@ create_and_show_dialog (f, first_wv)
{
GtkWidget *menu;
+ if (! FRAME_X_P (f))
+ abort ();
+
menu = xg_create_widget ("dialog", first_wv->name, f, first_wv,
G_CALLBACK (dialog_selection_callback),
G_CALLBACK (popup_deactivate_callback),
@@ -3171,6 +3204,9 @@ create_and_show_dialog (f, first_wv)
{
LWLIB_ID dialog_id;
+ if (!FRAME_X_P (f))
+ abort();
+
dialog_id = widget_id_tick++;
lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv,
f->output_data.x->widget, 1, 0,
@@ -3223,6 +3259,9 @@ xdialog_show (f, keymaps, title, header, error_name)
/* 1 means we've seen the boundary between left-hand elts and right-hand. */
int boundary_seen = 0;
+ if (! FRAME_X_P (f))
+ abort ();
+
*error_name = NULL;
if (menu_items_n_panes > 1)
@@ -3428,7 +3467,7 @@ menu_help_callback (help_string, pane, item)
pane_name = first_item[MENU_ITEMS_PANE_NAME];
else if (EQ (first_item[0], Qquote))
/* This shouldn't happen, see xmenu_show. */
- pane_name = empty_string;
+ pane_name = empty_unibyte_string;
else
pane_name = first_item[MENU_ITEMS_ITEM_NAME];
@@ -3498,6 +3537,9 @@ xmenu_show (f, x, y, for_click, keymaps, title, error)
unsigned int dummy_uint;
int specpdl_count = SPECPDL_INDEX ();
+ if (! FRAME_X_P (f))
+ abort ();
+
*error = 0;
if (menu_items_n_panes == 0)
return Qnil;
@@ -3606,13 +3648,6 @@ xmenu_show (f, x, y, for_click, keymaps, title, error)
if (!NILP (descrip))
{
int gap = maxwidth - SBYTES (item_name);
-#ifdef C_ALLOCA
- Lisp_Object spacer;
- spacer = Fmake_string (make_number (gap), make_number (' '));
- item_name = concat2 (item_name, spacer);
- item_name = concat2 (item_name, descrip);
- item_data = SDATA (item_name);
-#else
/* if alloca is fast, use that to make the space,
to reduce gc needs. */
item_data
@@ -3625,7 +3660,6 @@ xmenu_show (f, x, y, for_click, keymaps, title, error)
bcopy (SDATA (descrip), item_data + j,
SBYTES (descrip));
item_data[j + SBYTES (descrip)] = 0;
-#endif
}
else
item_data = SDATA (item_name);
@@ -3802,8 +3836,9 @@ syms_of_xmenu ()
defsubr (&Smenu_or_popup_active_p);
#if defined (USE_GTK) || defined (USE_X_TOOLKIT)
- defsubr (&Smenu_bar_open);
- Ffset (intern ("accelerate-menu"), intern (Smenu_bar_open.symbol_name));
+ defsubr (&Sx_menu_bar_open_internal);
+ Ffset (intern ("accelerate-menu"),
+ intern (Sx_menu_bar_open_internal.symbol_name));
#endif
#ifdef HAVE_MENUS
diff --git a/src/xselect.c b/src/xselect.c
index 073404cb522..45907b30be4 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -140,11 +140,7 @@ static Lisp_Object Qforeign_selection;
incremental transfer stuff, but it might improve server performance. */
#define MAX_SELECTION_QUANTUM 0xFFFFFF
-#ifdef HAVE_X11R4
#define SELECTION_QUANTUM(dpy) ((XMaxRequestSize(dpy) << 2) - 100)
-#else
-#define SELECTION_QUANTUM(dpy) (((dpy)->max_request_size << 2) - 100)
-#endif
/* The timestamp of the last input event Emacs received from the X server. */
/* Defined in keyboard.c. */
@@ -398,12 +394,19 @@ x_own_selection (selection_name, selection_value)
Lisp_Object selection_name, selection_value;
{
struct frame *sf = SELECTED_FRAME ();
- Window selecting_window = FRAME_X_WINDOW (sf);
- Display *display = FRAME_X_DISPLAY (sf);
+ Window selecting_window;
+ Display *display;
Time time = last_event_timestamp;
Atom selection_atom;
- struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (sf);
+ struct x_display_info *dpyinfo;
+ if (! FRAME_X_P (sf))
+ return;
+
+ selecting_window = FRAME_X_WINDOW (sf);
+ display = FRAME_X_DISPLAY (sf);
+ dpyinfo = FRAME_X_DISPLAY_INFO (sf);
+
CHECK_SYMBOL (selection_name);
selection_atom = symbol_to_x_atom (dpyinfo, display, selection_name);
@@ -435,7 +438,7 @@ x_own_selection (selection_name, selection_value)
if (!NILP (prev_value))
{
Lisp_Object rest; /* we know it's not the CAR, so it's easy. */
- for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
+ for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
if (EQ (prev_value, Fcar (XCDR (rest))))
{
XSETCDR (rest, Fcdr (XCDR (rest)));
@@ -671,7 +674,8 @@ some_frame_on_display (dpyinfo)
FOR_EACH_FRAME (list, frame)
{
- if (FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
+ if (FRAME_X_P (XFRAME (frame))
+ && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
return frame;
}
@@ -1017,6 +1021,7 @@ x_handle_selection_clear (event)
TRACE0 ("x_handle_selection_clear");
+#ifdef MULTI_KBOARD
/* If the new selection owner is also Emacs,
don't clear the new selection. */
BLOCK_INPUT;
@@ -1024,7 +1029,7 @@ x_handle_selection_clear (event)
to see if this Emacs job now owns the selection
through that display. */
for (t_dpyinfo = x_display_list; t_dpyinfo; t_dpyinfo = t_dpyinfo->next)
- if (t_dpyinfo->kboard == dpyinfo->kboard)
+ if (t_dpyinfo->terminal->kboard == dpyinfo->terminal->kboard)
{
Window owner_window
= XGetSelectionOwner (t_dpyinfo->display, selection);
@@ -1035,7 +1040,8 @@ x_handle_selection_clear (event)
}
}
UNBLOCK_INPUT;
-
+#endif
+
selection_symbol = x_atom_to_symbol (display, selection);
local_selection_data = assq_no_quit (selection_symbol, Vselection_alist);
@@ -1062,7 +1068,7 @@ x_handle_selection_clear (event)
else
{
Lisp_Object rest;
- for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
+ for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
if (EQ (local_selection_data, Fcar (XCDR (rest))))
{
XSETCDR (rest, Fcdr (XCDR (rest)));
@@ -1143,7 +1149,7 @@ x_clear_frame_selections (f)
}
/* Delete elements after the beginning of Vselection_alist. */
- for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
+ for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
if (EQ (frame, Fcar (Fcdr (Fcdr (Fcdr (Fcar (XCDR (rest))))))))
{
/* Let random Lisp code notice that the selection has been stolen. */
@@ -1383,17 +1389,26 @@ x_get_foreign_selection (selection_symbol, target_type, time_stamp)
Lisp_Object selection_symbol, target_type, time_stamp;
{
struct frame *sf = SELECTED_FRAME ();
- Window requestor_window = FRAME_X_WINDOW (sf);
- Display *display = FRAME_X_DISPLAY (sf);
- struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (sf);
+ Window requestor_window;
+ Display *display;
+ struct x_display_info *dpyinfo;
Time requestor_time = last_event_timestamp;
- Atom target_property = dpyinfo->Xatom_EMACS_TMP;
- Atom selection_atom = symbol_to_x_atom (dpyinfo, display, selection_symbol);
+ Atom target_property;
+ Atom selection_atom;
Atom type_atom;
int secs, usecs;
int count = SPECPDL_INDEX ();
Lisp_Object frame;
+ if (! FRAME_X_P (sf))
+ return Qnil;
+
+ requestor_window = FRAME_X_WINDOW (sf);
+ display = FRAME_X_DISPLAY (sf);
+ dpyinfo = FRAME_X_DISPLAY_INFO (sf);
+ target_property = dpyinfo->Xatom_EMACS_TMP;
+ selection_atom = symbol_to_x_atom (dpyinfo, display, selection_symbol);
+
if (CONSP (target_type))
type_atom = symbol_to_x_atom (dpyinfo, display, XCAR (target_type));
else
@@ -2209,6 +2224,9 @@ Disowning it means there is no such selection. */)
struct frame *sf = SELECTED_FRAME ();
check_x ();
+ if (! FRAME_X_P (sf))
+ return Qnil;
+
display = FRAME_X_DISPLAY (sf);
dpyinfo = FRAME_X_DISPLAY_INFO (sf);
CHECK_SYMBOL (selection);
@@ -2370,6 +2388,10 @@ DEFUN ("x-get-cut-buffer-internal", Fx_get_cut_buffer_internal,
struct frame *sf = SELECTED_FRAME ();
check_x ();
+
+ if (! FRAME_X_P (sf))
+ return Qnil;
+
display = FRAME_X_DISPLAY (sf);
dpyinfo = FRAME_X_DISPLAY_INFO (sf);
window = RootWindow (display, 0); /* Cut buffers are on screen 0 */
@@ -2410,6 +2432,10 @@ DEFUN ("x-store-cut-buffer-internal", Fx_store_cut_buffer_internal,
struct frame *sf = SELECTED_FRAME ();
check_x ();
+
+ if (! FRAME_X_P (sf))
+ return Qnil;
+
display = FRAME_X_DISPLAY (sf);
window = RootWindow (display, 0); /* Cut buffers are on screen 0 */
@@ -2466,8 +2492,12 @@ Positive means shift the values forward, negative means backward. */)
Atom props[8];
Display *display;
struct frame *sf = SELECTED_FRAME ();
-
+
check_x ();
+
+ if (! FRAME_X_P (sf))
+ return Qnil;
+
display = FRAME_X_DISPLAY (sf);
window = RootWindow (display, 0); /* Cut buffers are on screen 0 */
CHECK_NUMBER (n);
@@ -2681,7 +2711,7 @@ If the value is 0 or the atom is not known, return the empty string. */)
ret = make_string (name, strlen (name));
if (atom && name) XFree (name);
- if (NILP (ret)) ret = make_string ("", 0);
+ if (NILP (ret)) ret = empty_unibyte_string;
UNBLOCK_INPUT;
diff --git a/src/xsmfns.c b/src/xsmfns.c
index 1211c55eb03..77abf3b5072 100644
--- a/src/xsmfns.c
+++ b/src/xsmfns.c
@@ -48,6 +48,7 @@ Boston, MA 02110-1301, USA. */
#include "lisp.h"
#include "systime.h"
#include "sysselect.h"
+#include "frame.h"
#include "termhooks.h"
#include "termopts.h"
#include "xterm.h"
@@ -510,6 +511,14 @@ x_session_initialize (dpyinfo)
}
}
+/* Ensure that the session manager is not contacted again. */
+
+void
+x_session_close ()
+{
+ ice_fd = -1;
+}
+
DEFUN ("handle-save-session", Fhandle_save_session,
Shandle_save_session, 1, 1, "e",
diff --git a/src/xterm.c b/src/xterm.c
index 5bfd95b8aaf..deb9b92cd36 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -54,7 +54,6 @@ Boston, MA 02110-1301, USA. */
#include <sys/ioctl.h>
#endif /* ! defined (BSD_SYSTEM) */
-#include "systty.h"
#include "systime.h"
#ifndef INCLUDED_FCNTL
@@ -155,9 +154,6 @@ extern void _XEditResCheckMessages ();
#endif
#endif
-#undef abs
-#define abs(x) ((x) < 0 ? -(x) : (x))
-
/* Default to using XIM if available. */
#ifdef USE_XIM
int use_xim = 1;
@@ -323,6 +319,10 @@ static Lisp_Object Qalt, Qhyper, Qmeta, Qsuper, Qmodifier_value;
static Lisp_Object Qvendor_specific_keysyms;
static Lisp_Object Qlatin_1;
+/* Used in x_flush. */
+
+extern Lisp_Object Vinhibit_redisplay;
+
extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
extern int x_bitmap_mask P_ ((FRAME_PTR, int));
@@ -332,13 +332,15 @@ static const XColor *x_color_cells P_ ((Display *, int *));
static void x_update_window_end P_ ((struct window *, int, int));
static int x_io_error_quitter P_ ((Display *));
+static struct terminal *x_create_terminal P_ ((struct x_display_info *));
+void x_delete_terminal P_ ((struct terminal *));
static void x_font_min_bounds P_ ((XFontStruct *, int *, int *));
static int x_compute_min_glyph_bounds P_ ((struct frame *));
static void x_update_end P_ ((struct frame *));
static void XTframe_up_to_date P_ ((struct frame *));
-static void XTset_terminal_modes P_ ((void));
-static void XTreset_terminal_modes P_ ((void));
-static void x_clear_frame P_ ((void));
+static void XTset_terminal_modes P_ ((struct terminal *));
+static void XTreset_terminal_modes P_ ((struct terminal *));
+static void x_clear_frame P_ ((struct frame *));
static void frame_highlight P_ ((struct frame *));
static void frame_unhighlight P_ ((struct frame *));
static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *));
@@ -378,12 +380,18 @@ static void
x_flush (f)
struct frame *f;
{
+ /* Don't call XFlush when it is not safe to redisplay; the X
+ connection may be broken. */
+ if (!NILP (Vinhibit_redisplay))
+ return;
+
BLOCK_INPUT;
if (f == NULL)
{
Lisp_Object rest, frame;
FOR_EACH_FRAME (rest, frame)
- x_flush (XFRAME (frame));
+ if (FRAME_X_P (XFRAME (frame)))
+ x_flush (XFRAME (frame));
}
else if (FRAME_X_P (f))
XFlush (FRAME_X_DISPLAY (f));
@@ -721,8 +729,10 @@ x_draw_fringe_bitmap (w, row, p)
else
x_clip_to_row (w, row, -1, gc);
- if (p->bx >= 0 && !p->overlay_p)
+ if (!p->overlay_p)
{
+ int bx = p->bx, by = p->by, nx = p->nx, ny = p->ny;
+
/* In case the same realized face is used for fringes and
for something displayed in the text (e.g. face `region' on
mono-displays, the fill style may have been changed to
@@ -732,8 +742,55 @@ x_draw_fringe_bitmap (w, row, p)
else
XSetForeground (display, face->gc, face->background);
- XFillRectangle (display, window, face->gc,
- p->bx, p->by, p->nx, p->ny);
+#ifdef USE_TOOLKIT_SCROLL_BARS
+ /* If the fringe is adjacent to the left (right) scroll bar of a
+ leftmost (rightmost, respectively) window, then extend its
+ background to the gap between the fringe and the bar. */
+ if ((WINDOW_LEFTMOST_P (w)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
+ || (WINDOW_RIGHTMOST_P (w)
+ && WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w)))
+ {
+ int sb_width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w);
+
+ if (sb_width > 0)
+ {
+ int left = WINDOW_SCROLL_BAR_AREA_X (w);
+ int width = (WINDOW_CONFIG_SCROLL_BAR_COLS (w)
+ * FRAME_COLUMN_WIDTH (f));
+
+ if (bx < 0)
+ {
+ /* Bitmap fills the fringe. */
+ if (left + width == p->x)
+ bx = left + sb_width;
+ else if (p->x + p->wd == left)
+ bx = left;
+ if (bx >= 0)
+ {
+ int header_line_height = WINDOW_HEADER_LINE_HEIGHT (w);
+
+ nx = width - sb_width;
+ by = WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height,
+ row->y));
+ ny = row->visible_height;
+ }
+ }
+ else
+ {
+ if (left + width == bx)
+ {
+ bx = left + sb_width;
+ nx += width - sb_width;
+ }
+ else if (bx + nx == left)
+ nx += width - sb_width;
+ }
+ }
+ }
+#endif
+ if (bx >= 0 && nx > 0)
+ XFillRectangle (display, window, face->gc, bx, by, nx, ny);
if (!face->stipple)
XSetForeground (display, face->gc, face->foreground);
@@ -795,7 +852,7 @@ x_draw_fringe_bitmap (w, row, p)
rarely happens). */
static void
-XTset_terminal_modes ()
+XTset_terminal_modes (struct terminal *terminal)
{
}
@@ -803,7 +860,7 @@ XTset_terminal_modes ()
the X-windows go away, and suspending requires no action. */
static void
-XTreset_terminal_modes ()
+XTreset_terminal_modes (struct terminal *terminal)
{
}
@@ -1265,7 +1322,7 @@ x_draw_glyph_string_foreground (s)
of S to the right of that box line. */
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p)
- x = s->x + abs (s->face->box_line_width);
+ x = s->x + eabs (s->face->box_line_width);
else
x = s->x;
@@ -1347,7 +1404,7 @@ x_draw_composite_glyph_string_foreground (s)
of S to the right of that box line. */
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p)
- x = s->x + abs (s->face->box_line_width);
+ x = s->x + eabs (s->face->box_line_width);
else
x = s->x;
@@ -1416,7 +1473,8 @@ x_frame_of_widget (widget)
for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
if (GC_FRAMEP (XCAR (tail))
&& (f = XFRAME (XCAR (tail)),
- (f->output_data.nothing != 1
+ (FRAME_X_P (f)
+ && f->output_data.nothing != 1
&& FRAME_X_DISPLAY_INFO (f) == dpyinfo))
&& f->output_data.x->widget == widget)
return f;
@@ -2142,7 +2200,7 @@ x_draw_glyph_string_box (s)
? s->first_glyph
: s->first_glyph + s->nchars - 1);
- width = abs (s->face->box_line_width);
+ width = eabs (s->face->box_line_width);
raised_p = s->face->box == FACE_RAISED_BOX;
left_x = s->x;
right_x = (s->row->full_width_p && s->extends_to_end_of_line_p
@@ -2188,7 +2246,7 @@ x_draw_image_foreground (s)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -2281,7 +2339,7 @@ x_draw_image_relief (s)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -2298,7 +2356,7 @@ x_draw_image_relief (s)
}
else
{
- thick = abs (s->img->relief);
+ thick = eabs (s->img->relief);
raised_p = s->img->relief > 0;
}
@@ -2333,7 +2391,7 @@ x_draw_image_foreground_1 (s, pixmap)
if (s->face->box != FACE_NO_BOX
&& s->first_glyph->left_box_line_p
&& s->slice.x == 0)
- x += abs (s->face->box_line_width);
+ x += eabs (s->face->box_line_width);
/* If there is a margin around the image, adjust x- and y-position
by that margin. */
@@ -2433,7 +2491,7 @@ static void
x_draw_image_glyph_string (s)
struct glyph_string *s;
{
- int box_line_hwidth = abs (s->face->box_line_width);
+ int box_line_hwidth = eabs (s->face->box_line_width);
int box_line_vwidth = max (s->face->box_line_width, 0);
int height;
Pixmap pixmap = None;
@@ -2794,7 +2852,8 @@ x_shift_glyphs_for_insert (f, x, y, width, height, shift_by)
for X frames. */
static void
-x_delete_glyphs (n)
+x_delete_glyphs (f, n)
+ struct frame *f;
register int n;
{
abort ();
@@ -2817,19 +2876,11 @@ x_clear_area (dpy, window, x, y, width, height, exposures)
}
-/* Clear entire frame. If updating_frame is non-null, clear that
- frame. Otherwise clear the selected frame. */
+/* Clear an entire frame. */
static void
-x_clear_frame ()
+x_clear_frame (struct frame *f)
{
- struct frame *f;
-
- if (updating_frame)
- f = updating_frame;
- else
- f = SELECTED_FRAME ();
-
/* Clearing the frame will erase any cursor, so mark them all as no
longer visible. */
mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f)));
@@ -2908,8 +2959,8 @@ XTflash (f)
XGCValues values;
values.function = GXxor;
- values.foreground = (f->output_data.x->foreground_pixel
- ^ f->output_data.x->background_pixel);
+ values.foreground = (FRAME_FOREGROUND_PIXEL (f)
+ ^ FRAME_BACKGROUND_PIXEL (f));
gc = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
GCFunction | GCForeground, &values);
@@ -3075,7 +3126,8 @@ XTset_terminal_window (n)
lines or deleting -N lines at vertical position VPOS. */
static void
-x_ins_del_lines (vpos, n)
+x_ins_del_lines (f, vpos, n)
+ struct frame *f;
int vpos, n;
{
abort ();
@@ -3386,12 +3438,7 @@ x_find_modifier_meanings (dpyinfo)
dpyinfo->super_mod_mask = 0;
dpyinfo->hyper_mod_mask = 0;
-#ifdef HAVE_X11R4
XDisplayKeycodes (dpyinfo->display, &min_code, &max_code);
-#else
- min_code = dpyinfo->display->min_keycode;
- max_code = dpyinfo->display->max_keycode;
-#endif
syms = XGetKeyboardMapping (dpyinfo->display,
min_code, max_code - min_code + 1,
@@ -3712,7 +3759,8 @@ XTmouse_position (fp, insist, bar_window, part, x, y, time)
/* Clear the mouse-moved flag for every frame on this display. */
FOR_EACH_FRAME (tail, frame)
- if (FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp))
+ if (FRAME_X_P (XFRAME (frame))
+ && FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp))
XFRAME (frame)->mouse_moved = 0;
last_mouse_scroll_bar = Qnil;
@@ -3901,6 +3949,9 @@ x_window_to_scroll_bar (display, window_id)
if (! GC_FRAMEP (frame))
abort ();
+ if (! FRAME_X_P (XFRAME (frame)))
+ continue;
+
/* Scan this frame's scroll bar list for a scroll bar with the
right window ID. */
condemned = FRAME_CONDEMNED_SCROLL_BARS (XFRAME (frame));
@@ -3911,7 +3962,7 @@ x_window_to_scroll_bar (display, window_id)
condemned = Qnil,
! GC_NILP (bar));
bar = XSCROLL_BAR (bar)->next)
- if (SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)) == window_id &&
+ if (XSCROLL_BAR (bar)->x_window == window_id &&
FRAME_X_DISPLAY (XFRAME (frame)) == display)
return XSCROLL_BAR (bar);
}
@@ -3935,11 +3986,14 @@ x_window_to_menu_bar (window)
XGCTYPE (tail) == Lisp_Cons;
tail = XCDR (tail))
{
- Lisp_Object frame = XCAR (tail);
- Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget;
+ if (FRAME_X_P (XFRAME (XCAR (tail))))
+ {
+ Lisp_Object frame = XCAR (tail);
+ Widget menu_bar = XFRAME (frame)->output_data.x->menubar_widget;
- if (menu_bar && xlwmenu_window_p (menu_bar, window))
- return menu_bar;
+ if (menu_bar && xlwmenu_window_p (menu_bar, window))
+ return menu_bar;
+ }
}
return NULL;
@@ -4226,9 +4280,8 @@ xm_scroll_callback (widget, client_data, call_data)
}
}
+#elif defined USE_GTK
-#else /* !USE_MOTIF, i.e. Xaw or GTK */
-#ifdef USE_GTK
/* Scroll bar callback for GTK scroll bars. WIDGET is the scroll
bar widget. DATA is a pointer to the scroll_bar structure. */
@@ -4299,7 +4352,7 @@ xg_scroll_callback (widget, data)
}
}
-#else /* not USE_GTK */
+#else /* not USE_GTK and not USE_MOTIF */
/* Xaw scroll bar callback. Invoked when the thumb is dragged.
WIDGET is the scroll bar widget. CLIENT_DATA is a pointer to the
@@ -4325,7 +4378,7 @@ xaw_jump_callback (widget, client_data, call_data)
whole = 10000000;
portion = shown < 1 ? top * whole : 0;
- if (shown < 1 && (abs (top + shown - 1) < 1.0/height))
+ if (shown < 1 && (eabs (top + shown - 1) < 1.0/height))
/* Some derivatives of Xaw refuse to shrink the thumb when you reach
the bottom, so we force the scrolling whenever we see that we're
too close to the bottom (in x_set_toolkit_scroll_bar_thumb
@@ -4366,12 +4419,12 @@ xaw_scroll_callback (widget, client_data, call_data)
XtVaGetValues (widget, XtNheight, &height, NULL);
UNBLOCK_INPUT;
- if (abs (position) >= height)
+ if (eabs (position) >= height)
part = (position < 0) ? scroll_bar_above_handle : scroll_bar_below_handle;
/* If Xaw3d was compiled with ARROW_SCROLLBAR,
it maps line-movement to call_data = max(5, height/20). */
- else if (xaw3d_arrow_scroll && abs (position) <= max (5, height / 20))
+ else if (xaw3d_arrow_scroll && eabs (position) <= max (5, height / 20))
part = (position < 0) ? scroll_bar_up_arrow : scroll_bar_down_arrow;
else
part = scroll_bar_move_ratio;
@@ -4382,8 +4435,7 @@ xaw_scroll_callback (widget, client_data, call_data)
x_send_scroll_bar_event (bar->window, part, position, height);
}
-#endif /* not USE_GTK */
-#endif /* not USE_MOTIF */
+#endif /* not USE_GTK and not USE_MOTIF */
#define SCROLL_BAR_NAME "verticalScrollBar"
@@ -4589,7 +4641,7 @@ x_create_toolkit_scroll_bar (f, bar)
/* Remember X window and widget in the scroll bar vector. */
SET_SCROLL_BAR_X_WIDGET (bar, widget);
xwindow = XtWindow (widget);
- SET_SCROLL_BAR_X_WINDOW (bar, xwindow);
+ bar->x_window = xwindow;
UNBLOCK_INPUT;
}
@@ -4733,7 +4785,7 @@ x_scroll_bar_create (w, top, left, width, height)
{
struct frame *f = XFRAME (w->frame);
struct scroll_bar *bar
- = XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil));
+ = ALLOCATE_PSEUDOVECTOR (struct scroll_bar, x_window, PVEC_OTHER);
BLOCK_INPUT;
@@ -4747,7 +4799,7 @@ x_scroll_bar_create (w, top, left, width, height)
a.background_pixel = f->output_data.x->scroll_bar_background_pixel;
if (a.background_pixel == -1)
- a.background_pixel = f->output_data.x->background_pixel;
+ a.background_pixel = FRAME_BACKGROUND_PIXEL (f);
a.event_mask = (ButtonPressMask | ButtonReleaseMask
| ButtonMotionMask | PointerMotionHintMask
@@ -4777,18 +4829,19 @@ x_scroll_bar_create (w, top, left, width, height)
CopyFromParent,
/* Attributes. */
mask, &a);
- SET_SCROLL_BAR_X_WINDOW (bar, window);
+ bar->x_window = window;
}
#endif /* not USE_TOOLKIT_SCROLL_BARS */
XSETWINDOW (bar->window, w);
- XSETINT (bar->top, top);
- XSETINT (bar->left, left);
- XSETINT (bar->width, width);
- XSETINT (bar->height, height);
- XSETINT (bar->start, 0);
- XSETINT (bar->end, 0);
+ bar->top = top;
+ bar->left = left;
+ bar->width = width;
+ bar->height = height;
+ bar->start = 0;
+ bar->end = 0;
bar->dragging = Qnil;
+ bar->fringe_extended_p = 0;
/* Add bar to its frame's list of scroll bars. */
bar->next = FRAME_SCROLL_BARS (f);
@@ -4802,12 +4855,12 @@ x_scroll_bar_create (w, top, left, width, height)
{
#ifdef USE_GTK
xg_update_scrollbar_pos (f,
- SCROLL_BAR_X_WINDOW (bar),
+ bar->x_window,
top,
left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2,
max (height, 1));
- xg_show_scroll_bar (SCROLL_BAR_X_WINDOW (bar));
+ xg_show_scroll_bar (bar->x_window);
#else /* not USE_GTK */
Widget scroll_bar = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
XtConfigureWidget (scroll_bar,
@@ -4819,7 +4872,7 @@ x_scroll_bar_create (w, top, left, width, height)
#endif /* not USE_GTK */
}
#else /* not USE_TOOLKIT_SCROLL_BARS */
- XMapRaised (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar));
+ XMapRaised (FRAME_X_DISPLAY (f), bar->x_window);
#endif /* not USE_TOOLKIT_SCROLL_BARS */
UNBLOCK_INPUT;
@@ -4827,6 +4880,8 @@ x_scroll_bar_create (w, top, left, width, height)
}
+#ifndef USE_TOOLKIT_SCROLL_BARS
+
/* Draw BAR's handle in the proper position.
If the handle is already drawn from START to END, don't bother
@@ -4840,8 +4895,6 @@ x_scroll_bar_create (w, top, left, width, height)
the bar's top is as far down as it goes; otherwise, there's no way
to move to the very end of the buffer. */
-#ifndef USE_TOOLKIT_SCROLL_BARS
-
static void
x_scroll_bar_set_handle (bar, start, end, rebuild)
struct scroll_bar *bar;
@@ -4849,22 +4902,22 @@ x_scroll_bar_set_handle (bar, start, end, rebuild)
int rebuild;
{
int dragging = ! NILP (bar->dragging);
- Window w = SCROLL_BAR_X_WINDOW (bar);
+ Window w = bar->x_window;
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
GC gc = f->output_data.x->normal_gc;
/* If the display is already accurate, do nothing. */
if (! rebuild
- && start == XINT (bar->start)
- && end == XINT (bar->end))
+ && start == bar->start
+ && end == bar->end)
return;
BLOCK_INPUT;
{
- int inside_width = VERTICAL_SCROLL_BAR_INSIDE_WIDTH (f, XINT (bar->width));
- int inside_height = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, XINT (bar->height));
- int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height));
+ int inside_width = VERTICAL_SCROLL_BAR_INSIDE_WIDTH (f, bar->width);
+ int inside_height = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, bar->height);
+ int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
/* Make sure the values are reasonable, and try to preserve
the distance between start and end. */
@@ -4884,8 +4937,8 @@ x_scroll_bar_set_handle (bar, start, end, rebuild)
}
/* Store the adjusted setting in the scroll bar. */
- XSETINT (bar->start, start);
- XSETINT (bar->end, end);
+ bar->start = start;
+ bar->end = end;
/* Clip the end position, just for display. */
if (end > top_range)
@@ -4921,7 +4974,7 @@ x_scroll_bar_set_handle (bar, start, end, rebuild)
/* Restore the foreground color of the GC if we changed it above. */
if (f->output_data.x->scroll_bar_foreground_pixel != -1)
XSetForeground (FRAME_X_DISPLAY (f), gc,
- f->output_data.x->foreground_pixel);
+ FRAME_FOREGROUND_PIXEL (f));
/* Draw the empty space below the handle. Note that we can't
clear zero-height areas; that means "clear to end of window." */
@@ -4952,12 +5005,12 @@ x_scroll_bar_remove (bar)
#ifdef USE_TOOLKIT_SCROLL_BARS
#ifdef USE_GTK
- xg_remove_scroll_bar (f, SCROLL_BAR_X_WINDOW (bar));
+ xg_remove_scroll_bar (f, bar->x_window);
#else /* not USE_GTK */
XtDestroyWidget (SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar));
#endif /* not USE_GTK */
#else
- XDestroyWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar));
+ XDestroyWindow (FRAME_X_DISPLAY (f), bar->x_window);
#endif
/* Disassociate this scroll bar from its window. */
@@ -4981,6 +5034,9 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
struct scroll_bar *bar;
int top, height, left, sb_left, width, sb_width;
int window_y, window_height;
+#ifdef USE_TOOLKIT_SCROLL_BARS
+ int fringe_extended_p;
+#endif
/* Get window dimensions. */
window_box (w, -1, 0, &window_y, 0, &window_height);
@@ -5001,15 +5057,9 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
/* Compute the left edge of the scroll bar. */
#ifdef USE_TOOLKIT_SCROLL_BARS
if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
- sb_left = (left +
- (WINDOW_RIGHTMOST_P (w)
- ? width - sb_width - (width - sb_width) / 2
- : 0));
+ sb_left = left + (WINDOW_RIGHTMOST_P (w) ? width - sb_width : 0);
else
- sb_left = (left +
- (WINDOW_LEFTMOST_P (w)
- ? (width - sb_width) / 2
- : width - sb_width));
+ sb_left = left + (WINDOW_LEFTMOST_P (w) ? 0 : width - sb_width);
#else
if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_RIGHT (w))
sb_left = left + width - sb_width;
@@ -5017,14 +5067,33 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
sb_left = left;
#endif
+#ifdef USE_TOOLKIT_SCROLL_BARS
+ if (WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w))
+ fringe_extended_p = (WINDOW_LEFTMOST_P (w)
+ && WINDOW_LEFT_FRINGE_WIDTH (w)
+ && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
+ || WINDOW_LEFT_MARGIN_COLS (w) == 0));
+ else
+ fringe_extended_p = (WINDOW_RIGHTMOST_P (w)
+ && WINDOW_RIGHT_FRINGE_WIDTH (w)
+ && (WINDOW_HAS_FRINGES_OUTSIDE_MARGINS (w)
+ || WINDOW_RIGHT_MARGIN_COLS (w) == 0));
+#endif
+
/* Does the scroll bar exist yet? */
if (NILP (w->vertical_scroll_bar))
{
if (width > 0 && height > 0)
{
BLOCK_INPUT;
- x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
- left, top, width, height, False);
+#ifdef USE_TOOLKIT_SCROLL_BARS
+ if (fringe_extended_p)
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ sb_left, top, sb_width, height, False);
+ else
+#endif
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ left, top, width, height, False);
UNBLOCK_INPUT;
}
@@ -5039,28 +5108,34 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
BLOCK_INPUT;
- if (sb_left != XINT (bar->left))
+ if (sb_left != bar->left)
mask |= CWX;
- if (top != XINT (bar->top))
+ if (top != bar->top)
mask |= CWY;
- if (sb_width != XINT (bar->width))
+ if (sb_width != bar->width)
mask |= CWWidth;
- if (height != XINT (bar->height))
+ if (height != bar->height)
mask |= CWHeight;
#ifdef USE_TOOLKIT_SCROLL_BARS
/* Move/size the scroll bar widget. */
- if (mask)
+ if (mask || bar->fringe_extended_p != fringe_extended_p)
{
/* Since toolkit scroll bars are smaller than the space reserved
for them on the frame, we have to clear "under" them. */
if (width > 0 && height > 0)
- x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
- left, top, width, height, False);
+ {
+ if (fringe_extended_p)
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ sb_left, top, sb_width, height, False);
+ else
+ x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+ left, top, width, height, False);
+ }
#ifdef USE_GTK
xg_update_scrollbar_pos (f,
- SCROLL_BAR_X_WINDOW (bar),
+ bar->x_window,
top,
sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM,
sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM *2,
@@ -5116,22 +5191,24 @@ XTset_vertical_scroll_bar (w, portion, whole, position)
wc.y = top;
wc.width = sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2;
wc.height = height;
- XConfigureWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar),
+ XConfigureWindow (FRAME_X_DISPLAY (f), bar->x_window,
mask, &wc);
}
#endif /* not USE_TOOLKIT_SCROLL_BARS */
/* Remember new settings. */
- XSETINT (bar->left, sb_left);
- XSETINT (bar->top, top);
- XSETINT (bar->width, sb_width);
- XSETINT (bar->height, height);
+ bar->left = sb_left;
+ bar->top = top;
+ bar->width = sb_width;
+ bar->height = height;
UNBLOCK_INPUT;
}
#ifdef USE_TOOLKIT_SCROLL_BARS
+ bar->fringe_extended_p = fringe_extended_p;
+
x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole);
#else /* not USE_TOOLKIT_SCROLL_BARS */
/* Set the scroll bar's current state, unless we're currently being
@@ -5274,14 +5351,14 @@ x_scroll_bar_expose (bar, event)
struct scroll_bar *bar;
XEvent *event;
{
- Window w = SCROLL_BAR_X_WINDOW (bar);
+ Window w = bar->x_window;
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
GC gc = f->output_data.x->normal_gc;
int width_trim = VERTICAL_SCROLL_BAR_WIDTH_TRIM;
BLOCK_INPUT;
- x_scroll_bar_set_handle (bar, XINT (bar->start), XINT (bar->end), 1);
+ x_scroll_bar_set_handle (bar, bar->start, bar->end, 1);
/* Switch to scroll bar foreground color. */
if (f->output_data.x->scroll_bar_foreground_pixel != -1)
@@ -5293,13 +5370,13 @@ x_scroll_bar_expose (bar, event)
/* x, y, width, height */
0, 0,
- XINT (bar->width) - 1 - width_trim - width_trim,
- XINT (bar->height) - 1);
+ bar->width - 1 - width_trim - width_trim,
+ bar->height - 1);
/* Restore the foreground color of the GC if we changed it above. */
if (f->output_data.x->scroll_bar_foreground_pixel != -1)
XSetForeground (FRAME_X_DISPLAY (f), gc,
- f->output_data.x->foreground_pixel);
+ FRAME_FOREGROUND_PIXEL (f));
UNBLOCK_INPUT;
@@ -5338,18 +5415,18 @@ x_scroll_bar_handle_click (bar, event, emacs_event)
#if 0
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
int internal_height
- = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, XINT (bar->height));
+ = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, bar->height);
#endif
int top_range
- = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height));
+ = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
int y = event->xbutton.y - VERTICAL_SCROLL_BAR_TOP_BORDER;
if (y < 0) y = 0;
if (y > top_range) y = top_range;
- if (y < XINT (bar->start))
+ if (y < bar->start)
emacs_event->part = scroll_bar_above_handle;
- else if (y < XINT (bar->end) + VERTICAL_SCROLL_BAR_MIN_HANDLE)
+ else if (y < bar->end + VERTICAL_SCROLL_BAR_MIN_HANDLE)
emacs_event->part = scroll_bar_handle;
else
emacs_event->part = scroll_bar_below_handle;
@@ -5362,7 +5439,7 @@ x_scroll_bar_handle_click (bar, event, emacs_event)
holding it. */
if (event->type == ButtonPress
&& emacs_event->part == scroll_bar_handle)
- XSETINT (bar->dragging, y - XINT (bar->start));
+ XSETINT (bar->dragging, y - bar->start);
#endif
#ifndef USE_TOOLKIT_SCROLL_BARS
@@ -5371,7 +5448,7 @@ x_scroll_bar_handle_click (bar, event, emacs_event)
&& ! NILP (bar->dragging))
{
int new_start = y - XINT (bar->dragging);
- int new_end = new_start + (XINT (bar->end) - XINT (bar->start));
+ int new_end = new_start + bar->end - bar->start;
x_scroll_bar_set_handle (bar, new_start, new_end, 0);
bar->dragging = Qnil;
@@ -5419,9 +5496,9 @@ x_scroll_bar_note_movement (bar, event)
/* Where should the handle be now? */
int new_start = event->xmotion.y - XINT (bar->dragging);
- if (new_start != XINT (bar->start))
+ if (new_start != bar->start)
{
- int new_end = new_start + (XINT (bar->end) - XINT (bar->start));
+ int new_end = new_start + bar->end - bar->start;
x_scroll_bar_set_handle (bar, new_start, new_end, 0);
}
@@ -5442,7 +5519,7 @@ x_scroll_bar_report_motion (fp, bar_window, part, x, y, time)
unsigned long *time;
{
struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar);
- Window w = SCROLL_BAR_X_WINDOW (bar);
+ Window w = bar->x_window;
FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window)));
int win_x, win_y;
Window dummy_window;
@@ -5469,10 +5546,10 @@ x_scroll_bar_report_motion (fp, bar_window, part, x, y, time)
{
#if 0
int inside_height
- = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, XINT (bar->height));
+ = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, bar->height);
#endif
int top_range
- = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height));
+ = VERTICAL_SCROLL_BAR_TOP_RANGE (f, bar->height);
win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER;
@@ -5489,9 +5566,9 @@ x_scroll_bar_report_motion (fp, bar_window, part, x, y, time)
if (! NILP (bar->dragging))
*part = scroll_bar_handle;
- else if (win_y < XINT (bar->start))
+ else if (win_y < bar->start)
*part = scroll_bar_above_handle;
- else if (win_y < XINT (bar->end) + VERTICAL_SCROLL_BAR_MIN_HANDLE)
+ else if (win_y < bar->end + VERTICAL_SCROLL_BAR_MIN_HANDLE)
*part = scroll_bar_handle;
else
*part = scroll_bar_below_handle;
@@ -5528,7 +5605,7 @@ x_scroll_bar_clear (f)
for (bar = FRAME_SCROLL_BARS (f); VECTORP (bar);
bar = XSCROLL_BAR (bar)->next)
XClearArea (FRAME_X_DISPLAY (f),
- SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)),
+ XSCROLL_BAR (bar)->x_window,
0, 0, 0, 0, True);
#endif /* not USE_TOOLKIT_SCROLL_BARS */
}
@@ -5699,7 +5776,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
int count = 0;
int do_help = 0;
int nbytes = 0;
- struct frame *f;
+ struct frame *f = NULL;
struct coding_system coding;
XEvent event = *eventp;
@@ -6275,19 +6352,19 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
bzero (&compose_status, sizeof (compose_status));
orig_keysym = keysym;
- /* Common for all keysym input events. */
- XSETFRAME (inev.ie.frame_or_window, f);
- inev.ie.modifiers
- = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), modifiers);
- inev.ie.timestamp = event.xkey.time;
-
- /* First deal with keysyms which have defined
- translations to characters. */
- if (keysym >= 32 && keysym < 128)
- /* Avoid explicitly decoding each ASCII character. */
- {
- inev.ie.kind = ASCII_KEYSTROKE_EVENT;
- inev.ie.code = keysym;
+ /* Common for all keysym input events. */
+ XSETFRAME (inev.ie.frame_or_window, f);
+ inev.ie.modifiers
+ = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), modifiers);
+ inev.ie.timestamp = event.xkey.time;
+
+ /* First deal with keysyms which have defined
+ translations to characters. */
+ if (keysym >= 32 && keysym < 128)
+ /* Avoid explicitly decoding each ASCII character. */
+ {
+ inev.ie.kind = ASCII_KEYSTROKE_EVENT;
+ inev.ie.code = keysym;
goto done_keysym;
}
@@ -6332,18 +6409,18 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
/* Now non-ASCII. */
if (HASH_TABLE_P (Vx_keysym_table)
&& (NATNUMP (c = Fgethash (make_number (keysym),
- Vx_keysym_table,
- Qnil))))
- {
- inev.ie.kind = (SINGLE_BYTE_CHAR_P (XFASTINT (c))
- ? ASCII_KEYSTROKE_EVENT
- : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
- inev.ie.code = XFASTINT (c);
- goto done_keysym;
- }
-
- /* Random non-modifier sorts of keysyms. */
- if (((keysym >= XK_BackSpace && keysym <= XK_Escape)
+ Vx_keysym_table,
+ Qnil))))
+ {
+ inev.ie.kind = (SINGLE_BYTE_CHAR_P (XFASTINT (c))
+ ? ASCII_KEYSTROKE_EVENT
+ : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+ inev.ie.code = XFASTINT (c);
+ goto done_keysym;
+ }
+
+ /* Random non-modifier sorts of keysyms. */
+ if (((keysym >= XK_BackSpace && keysym <= XK_Escape)
|| keysym == XK_Delete
#ifdef XK_ISO_Left_Tab
|| (keysym >= XK_ISO_Left_Tab
@@ -6404,14 +6481,6 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
|| (orig_keysym & (1 << 28))
|| (keysym != NoSymbol && nbytes == 0))
&& ! (IsModifierKey (orig_keysym)
-#ifndef HAVE_X11R5
-#ifdef XK_Mode_switch
- || ((unsigned)(orig_keysym) == XK_Mode_switch)
-#endif
-#ifdef XK_Num_Lock
- || ((unsigned)(orig_keysym) == XK_Num_Lock)
-#endif
-#endif /* not HAVE_X11R5 */
/* The symbols from XK_ISO_Lock
to XK_ISO_Last_Group_Lock
don't have real modifiers but
@@ -6449,42 +6518,43 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
gives us composition information. */
coding.composing = COMPOSITION_DISABLED;
- for (i = 0; i < nbytes; i++)
+ if (nbytes > 0)
{
- STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
- }
+ /* Decode the input data. */
+ int require;
+ unsigned char *p;
- {
- /* Decode the input data. */
- int require;
- unsigned char *p;
-
- require = decoding_buffer_size (&coding, nbytes);
- p = (unsigned char *) alloca (require);
- coding.mode |= CODING_MODE_LAST_BLOCK;
- /* We explicitly disable composition handling because
- key data should not contain any composition sequence. */
- coding.composing = COMPOSITION_DISABLED;
- decode_coding (&coding, copy_bufptr, p, nbytes, require);
- nbytes = coding.produced;
- nchars = coding.produced_char;
- copy_bufptr = p;
- }
+ for (i = 0; i < nbytes; i++)
+ {
+ STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
+ }
- /* Convert the input data to a sequence of
- character events. */
- for (i = 0; i < nbytes; i += len)
- {
- if (nchars == nbytes)
- c = copy_bufptr[i], len = 1;
- else
- c = STRING_CHAR_AND_LENGTH (copy_bufptr + i,
- nbytes - i, len);
- inev.ie.kind = (SINGLE_BYTE_CHAR_P (c)
- ? ASCII_KEYSTROKE_EVENT
- : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
- inev.ie.code = c;
- kbd_buffer_store_event_hold (&inev.ie, hold_quit);
+ require = decoding_buffer_size (&coding, nbytes);
+ p = (unsigned char *) alloca (require);
+ coding.mode |= CODING_MODE_LAST_BLOCK;
+ /* We explicitly disable composition handling because
+ key data should not contain any composition sequence. */
+ coding.composing = COMPOSITION_DISABLED;
+ decode_coding (&coding, copy_bufptr, p, nbytes, require);
+ nbytes = coding.produced;
+ nchars = coding.produced_char;
+ copy_bufptr = p;
+
+ /* Convert the input data to a sequence of
+ character events. */
+ for (i = 0; i < nbytes; i += len)
+ {
+ if (nchars == nbytes)
+ c = copy_bufptr[i], len = 1;
+ else
+ c = STRING_CHAR_AND_LENGTH (copy_bufptr + i,
+ nbytes - i, len);
+ inev.ie.kind = (SINGLE_BYTE_CHAR_P (c)
+ ? ASCII_KEYSTROKE_EVENT
+ : MULTIBYTE_CHAR_KEYSTROKE_EVENT);
+ inev.ie.code = c;
+ kbd_buffer_store_event_hold (&inev.ie, hold_quit);
+ }
}
/* Previous code updated count by nchars rather than nbytes,
@@ -6551,7 +6621,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
/* We may get an EnterNotify on the buttons in the toolbar. In that
case we moved out of any highlighted area and need to note this. */
if (!f && last_mouse_glyph_frame)
- note_mouse_movement (last_mouse_glyph_frame, &event);
+ note_mouse_movement (last_mouse_glyph_frame, &event.xmotion);
#endif
goto OTHER;
@@ -6584,7 +6654,7 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
#ifdef USE_GTK
/* See comment in EnterNotify above */
else if (last_mouse_glyph_frame)
- note_mouse_movement (last_mouse_glyph_frame, &event);
+ note_mouse_movement (last_mouse_glyph_frame, &event.xmotion);
#endif
goto OTHER;
@@ -6773,12 +6843,10 @@ handle_one_xevent (dpyinfo, eventp, finish, hold_quit)
if (tool_bar_p && event.xbutton.button < 4)
{
- if (event.xbutton.type == ButtonPress)
- handle_tool_bar_click (f, x, y, 1, 0);
- else
- handle_tool_bar_click (f, x, y, 0,
- x_x_to_emacs_modifiers (dpyinfo,
- event.xbutton.state));
+ handle_tool_bar_click (f, x, y,
+ event.xbutton.type == ButtonPress,
+ x_x_to_emacs_modifiers (dpyinfo,
+ event.xbutton.state));
}
}
@@ -6993,8 +7061,8 @@ x_dispatch_event (event, display)
EXPECTED is nonzero if the caller knows input is available. */
static int
-XTread_socket (sd, expected, hold_quit)
- register int sd;
+XTread_socket (terminal, expected, hold_quit)
+ struct terminal *terminal;
int expected;
struct input_event *hold_quit;
{
@@ -7017,6 +7085,31 @@ XTread_socket (sd, expected, hold_quit)
++handling_signal;
+#ifdef HAVE_X_SM
+ /* Only check session manager input for the primary display. */
+ if (terminal->id == 1 && x_session_have_connection ())
+ {
+ struct input_event inev;
+ BLOCK_INPUT;
+ /* We don't need to EVENT_INIT (inev) here, as
+ x_session_check_input copies an entire input_event. */
+ if (x_session_check_input (&inev))
+ {
+ kbd_buffer_store_event_hold (&inev, hold_quit);
+ count++;
+ }
+ UNBLOCK_INPUT;
+ }
+#endif
+
+ /* For debugging, this gives a way to fake an I/O error. */
+ if (terminal->display_info.x == XTread_socket_fake_io_error)
+ {
+ XTread_socket_fake_io_error = 0;
+ x_io_error_quitter (dpyinfo->display);
+ }
+
+#if 0 /* This loop is a noop now. */
/* Find the display we are supposed to read input for.
It's the one communicating on descriptor SD. */
for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next)
@@ -7047,52 +7140,31 @@ XTread_socket (sd, expected, hold_quit)
#endif /* HAVE_SELECT */
#endif /* SIGIO */
#endif
-
- /* For debugging, this gives a way to fake an I/O error. */
- if (dpyinfo == XTread_socket_fake_io_error)
- {
- XTread_socket_fake_io_error = 0;
- x_io_error_quitter (dpyinfo->display);
- }
-
-#ifdef HAVE_X_SM
- {
- struct input_event inev;
- BLOCK_INPUT;
- /* We don't need to EVENT_INIT (inev) here, as
- x_session_check_input copies an entire input_event. */
- if (x_session_check_input (&inev))
- {
- kbd_buffer_store_event_hold (&inev, hold_quit);
- count++;
- }
- UNBLOCK_INPUT;
- }
+ }
#endif
#ifndef USE_GTK
- while (XPending (dpyinfo->display))
- {
- int finish;
+ while (XPending (terminal->display_info.x->display))
+ {
+ int finish;
- XNextEvent (dpyinfo->display, &event);
+ XNextEvent (terminal->display_info.x->display, &event);
#ifdef HAVE_X_I18N
- /* Filter events for the current X input method. */
- if (x_filter_event (dpyinfo, &event))
- break;
+ /* Filter events for the current X input method. */
+ if (x_filter_event (terminal->display_info.x, &event))
+ break;
#endif
- event_found = 1;
+ event_found = 1;
- count += handle_one_xevent (dpyinfo, &event, &finish, hold_quit);
+ count += handle_one_xevent (terminal->display_info.x,
+ &event, &finish, hold_quit);
- if (finish == X_EVENT_GOTO_OUT)
- goto out;
- }
-#endif /* not USE_GTK */
+ if (finish == X_EVENT_GOTO_OUT)
+ goto out;
}
-#ifdef USE_GTK
+#else /* USE_GTK */
/* For GTK we must use the GTK event loop. But XEvents gets passed
to our filter function above, and then to the big event switch.
@@ -7403,8 +7475,7 @@ x_draw_window_cursor (w, glyph_row, x, y, cursor_type, cursor_width, on_p, activ
}
#ifndef XFlush
- if (updating_frame != f)
- XFlush (FRAME_X_DISPLAY (f));
+ XFlush (FRAME_X_DISPLAY (f));
#endif
}
@@ -7497,7 +7568,6 @@ x_text_icon (f, icon_name)
if (FRAME_X_WINDOW (f) == 0)
return 1;
-#ifdef HAVE_X11R4
{
XTextProperty text;
text.value = (unsigned char *) icon_name;
@@ -7506,9 +7576,6 @@ x_text_icon (f, icon_name)
text.nitems = strlen (icon_name);
XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
}
-#else /* not HAVE_X11R4 */
- XSetIconName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), icon_name);
-#endif /* not HAVE_X11R4 */
if (f->output_data.x->icon_bitmap > 0)
x_destroy_bitmap (f, f->output_data.x->icon_bitmap);
@@ -7642,6 +7709,8 @@ x_clear_errors (dpy)
x_error_message->string[0] = 0;
}
+#if 0 /* See comment in unwind_to_catch why calling this is a bad
+ * idea. --lorentey */
/* Close off all unclosed x_catch_errors calls. */
void
@@ -7650,6 +7719,7 @@ x_fully_uncatch_errors ()
while (x_error_message)
x_uncatch_errors ();
}
+#endif
/* Nonzero if x_catch_errors has been done and not yet canceled. */
@@ -7715,6 +7785,7 @@ x_connection_closed (dpy, error_message)
{
struct x_display_info *dpyinfo = x_display_info_for_display (dpy);
Lisp_Object frame, tail;
+ int index = SPECPDL_INDEX ();
error_msg = (char *) alloca (strlen (error_message) + 1);
strcpy (error_msg, error_message);
@@ -7726,6 +7797,44 @@ x_connection_closed (dpy, error_message)
the original message here. */
x_catch_errors (dpy);
+ /* Inhibit redisplay while frames are being deleted. */
+ specbind (Qinhibit_redisplay, Qt);
+
+ if (dpyinfo)
+ {
+ /* Protect display from being closed when we delete the last
+ frame on it. */
+ dpyinfo->reference_count++;
+ dpyinfo->terminal->reference_count++;
+ }
+
+ /* First delete frames whose mini-buffers are on frames
+ that are on the dead display. */
+ FOR_EACH_FRAME (tail, frame)
+ {
+ Lisp_Object minibuf_frame;
+ minibuf_frame
+ = WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (XFRAME (frame))));
+ if (FRAME_X_P (XFRAME (frame))
+ && FRAME_X_P (XFRAME (minibuf_frame))
+ && ! EQ (frame, minibuf_frame)
+ && FRAME_X_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo)
+ Fdelete_frame (frame, Qt);
+ }
+
+ /* Now delete all remaining frames on the dead display.
+ We are now sure none of these is used as the mini-buffer
+ for another frame that we need to delete. */
+ FOR_EACH_FRAME (tail, frame)
+ if (FRAME_X_P (XFRAME (frame))
+ && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
+ {
+ /* Set this to t so that Fdelete_frame won't get confused
+ trying to find a replacement. */
+ FRAME_KBOARD (XFRAME (frame))->Vdefault_minibuffer_frame = Qt;
+ Fdelete_frame (frame, Qt);
+ }
+
/* We have to close the display to inform Xt that it doesn't
exist anymore. If we don't, Xt will continue to wait for
events from the display. As a consequence, a sequence of
@@ -7739,7 +7848,7 @@ x_connection_closed (dpy, error_message)
Closing the display is reported to lead to a bus error on
OpenWindows in certain situations. I suspect that is a bug
- in OpenWindows. I don't know how to cicumvent it here. */
+ in OpenWindows. I don't know how to circumvent it here. */
#ifdef USE_X_TOOLKIT
/* If DPYINFO is null, this means we didn't open the display
@@ -7758,43 +7867,23 @@ x_connection_closed (dpy, error_message)
xg_display_close (dpyinfo->display);
#endif
- /* Indicate that this display is dead. */
if (dpyinfo)
- dpyinfo->display = 0;
-
- /* First delete frames whose mini-buffers are on frames
- that are on the dead display. */
- FOR_EACH_FRAME (tail, frame)
{
- Lisp_Object minibuf_frame;
- minibuf_frame
- = WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (XFRAME (frame))));
- if (FRAME_X_P (XFRAME (frame))
- && FRAME_X_P (XFRAME (minibuf_frame))
- && ! EQ (frame, minibuf_frame)
- && FRAME_X_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo)
- Fdelete_frame (frame, Qt);
- }
+ /* Indicate that this display is dead. */
+ dpyinfo->display = 0;
- /* Now delete all remaining frames on the dead display.
- We are now sure none of these is used as the mini-buffer
- for another frame that we need to delete. */
- FOR_EACH_FRAME (tail, frame)
- if (FRAME_X_P (XFRAME (frame))
- && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
- {
- /* Set this to t so that Fdelete_frame won't get confused
- trying to find a replacement. */
- FRAME_KBOARD (XFRAME (frame))->Vdefault_minibuffer_frame = Qt;
- Fdelete_frame (frame, Qt);
- }
+ dpyinfo->reference_count--;
+ dpyinfo->terminal->reference_count--;
+ if (dpyinfo->reference_count != 0)
+ /* We have just closed all frames on this display. */
+ abort ();
- if (dpyinfo)
- x_delete_display (dpyinfo);
+ x_delete_display (dpyinfo);
+ }
x_uncatch_errors ();
- if (x_display_list == 0)
+ if (terminal_list == 0)
{
fprintf (stderr, "%s\n", error_msg);
shut_down_emacs (0, 0, Qnil);
@@ -7808,7 +7897,12 @@ x_connection_closed (dpy, error_message)
sigunblock (sigmask (SIGALRM));
TOTALLY_UNBLOCK_INPUT;
+ unbind_to (index, Qnil);
clear_waiting_for_input ();
+ /* FIXME: This is an asynchronous interrupt w.r.t elisp, so signalling an
+ error might not be the best thing to do. I'd vote for creating an
+ elisp event and stuffing it in the queue so people can bind to it via
+ the global map. --Stef */
error ("%s", error_msg);
}
@@ -8018,7 +8112,7 @@ xim_destroy_callback (xim, client_data, call_data)
FOR_EACH_FRAME (tail, frame)
{
struct frame *f = XFRAME (frame);
- if (FRAME_X_DISPLAY_INFO (f) == dpyinfo)
+ if (FRAME_X_P (f) && FRAME_X_DISPLAY_INFO (f) == dpyinfo)
{
FRAME_XIC (f) = NULL;
xic_free_xfontset (f);
@@ -8117,7 +8211,8 @@ xim_instantiate_callback (display, client_data, call_data)
{
struct frame *f = XFRAME (frame);
- if (FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo)
+ if (FRAME_X_P (f)
+ && FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo)
if (FRAME_XIC (f) == NULL)
{
create_frame_xic (f);
@@ -8361,7 +8456,7 @@ wm_supports (f, atomname)
prop_atom, 0, max_len, False, target_type,
&actual_type, &actual_format, &actual_size,
&bytes_remaining, &tmp_data);
-
+
if (rc != Success || actual_type != XA_WINDOW || x_had_errors_p (dpy))
{
if (tmp_data) XFree (tmp_data);
@@ -8416,7 +8511,7 @@ wm_supports (f, atomname)
rc = 0;
want_atom = XInternAtom (dpy, atomname, False);
- for (i = 0; rc == 0 && i < dpyinfo->nr_net_supported_atoms; ++i)
+ for (i = 0; rc == 0 && i < dpyinfo->nr_net_supported_atoms; ++i)
rc = dpyinfo->net_supported_atoms[i] == want_atom;
x_uncatch_errors ();
@@ -8632,7 +8727,8 @@ x_sync_with_move (f, left, top, fuzzy)
/* The left fuzz-factor is 10 pixels. The top fuzz-factor is 40
pixels. */
- if (abs (current_left - left) <= 10 && abs (current_top - top) <= 40)
+ if (eabs (current_left - left) <= 10
+ && eabs (current_top - top) <= 40)
return;
}
else if (current_left == left && current_top == top)
@@ -8857,38 +8953,36 @@ x_lower_frame (f)
}
}
+/* Activate frame with Extended Window Manager Hints */
+
+void
+x_ewmh_activate_frame (f)
+ FRAME_PTR f;
+{
+ /* See Window Manager Specification/Extended Window Manager Hints at
+ http://freedesktop.org/wiki/Standards_2fwm_2dspec */
+
+ const char *atom = "_NET_ACTIVE_WINDOW";
+ if (f->async_visible && wm_supports (f, atom))
+ {
+ Lisp_Object frame;
+ XSETFRAME (frame, f);
+ Fx_send_client_event (frame, make_number (0), frame,
+ make_unibyte_string (atom, strlen (atom)),
+ make_number (32),
+ Fcons (make_number (1),
+ Fcons (make_number (last_user_time),
+ Qnil)));
+ }
+}
+
static void
XTframe_raise_lower (f, raise_flag)
FRAME_PTR f;
int raise_flag;
{
if (raise_flag)
- {
- /* The following code is needed for `raise-frame' to work on
- some versions of metacity; see Window Manager
- Specification/Extended Window Manager Hints at
- http://freedesktop.org/wiki/Standards_2fwm_2dspec */
-
-#if 0
- /* However, on other versions (metacity 2.17.2-1.fc7), it
- reportedly causes hangs when resizing frames. */
-
- const char *atom = "_NET_ACTIVE_WINDOW";
- if (f->async_visible && wm_supports (f, atom))
- {
- Lisp_Object frame;
- XSETFRAME (frame, f);
- Fx_send_client_event (frame, make_number (0), frame,
- make_unibyte_string (atom, strlen (atom)),
- make_number (32),
- Fcons (make_number (1),
- Fcons (make_number (last_user_time),
- Qnil)));
- }
- else
-#endif
- x_raise_frame (f);
- }
+ x_raise_frame (f);
else
x_lower_frame (f);
}
@@ -9094,7 +9188,6 @@ x_make_frame_invisible (f)
else
#endif
{
-#ifdef HAVE_X11R4
if (! XWithdrawWindow (FRAME_X_DISPLAY (f), window,
DefaultScreen (FRAME_X_DISPLAY (f))))
@@ -9102,31 +9195,6 @@ x_make_frame_invisible (f)
UNBLOCK_INPUT_RESIGNAL;
error ("Can't notify window manager of window withdrawal");
}
-#else /* ! defined (HAVE_X11R4) */
-
- /* Tell the window manager what we're going to do. */
- if (! EQ (Vx_no_window_manager, Qt))
- {
- XEvent unmap;
-
- unmap.xunmap.type = UnmapNotify;
- unmap.xunmap.window = window;
- unmap.xunmap.event = DefaultRootWindow (FRAME_X_DISPLAY (f));
- unmap.xunmap.from_configure = False;
- if (! XSendEvent (FRAME_X_DISPLAY (f),
- DefaultRootWindow (FRAME_X_DISPLAY (f)),
- False,
- SubstructureRedirectMaskSubstructureNotifyMask,
- &unmap))
- {
- UNBLOCK_INPUT_RESIGNAL;
- error ("Can't notify window manager of withdrawal");
- }
- }
-
- /* Unmap the window ourselves. Cheeky! */
- XUnmapWindow (FRAME_X_DISPLAY (f), window);
-#endif /* ! defined (HAVE_X11R4) */
}
/* We can't distinguish this from iconification
@@ -9334,8 +9402,8 @@ x_free_frame_resources (f)
XDestroyWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f));
#endif /* !USE_X_TOOLKIT */
- unload_color (f, f->output_data.x->foreground_pixel);
- unload_color (f, f->output_data.x->background_pixel);
+ unload_color (f, FRAME_FOREGROUND_PIXEL (f));
+ unload_color (f, FRAME_BACKGROUND_PIXEL (f));
unload_color (f, f->output_data.x->cursor_pixel);
unload_color (f, f->output_data.x->cursor_foreground_pixel);
unload_color (f, f->output_data.x->border_pixel);
@@ -9483,16 +9551,11 @@ x_wm_set_size_hint (f, flags, user_position)
them; otherwise, we set the min_width and min_height members
to the size for a zero x zero frame. */
-#ifdef HAVE_X11R4
size_hints.flags |= PBaseSize;
size_hints.base_width = base_width;
size_hints.base_height = base_height;
size_hints.min_width = base_width + min_cols * size_hints.width_inc;
size_hints.min_height = base_height + min_rows * size_hints.height_inc;
-#else
- size_hints.min_width = base_width;
- size_hints.min_height = base_height;
-#endif
}
/* If we don't need the old flags, we don't need the old hint at all. */
@@ -9508,12 +9571,8 @@ x_wm_set_size_hint (f, flags, user_position)
long supplied_return;
int value;
-#ifdef HAVE_X11R4
value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints,
&supplied_return);
-#else
- value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints);
-#endif
#ifdef USE_X_TOOLKIT
size_hints.base_height = hints.base_height;
@@ -9554,11 +9613,7 @@ x_wm_set_size_hint (f, flags, user_position)
}
#endif /* PWinGravity */
-#ifdef HAVE_X11R4
XSetWMNormalHints (FRAME_X_DISPLAY (f), window, &size_hints);
-#else
- XSetNormalHints (FRAME_X_DISPLAY (f), window, &size_hints);
-#endif
}
#endif /* not USE_GTK */
@@ -10478,9 +10533,12 @@ get_bits_and_offset (mask, bits, offset)
*bits = nr;
}
+/* Return 1 if display DISPLAY is available for use, 0 otherwise.
+ But don't permanently open it, just test its availability. */
+
int
x_display_ok (display)
- const char * display;
+ const char *display;
{
int dpy_ok = 1;
Display *dpy;
@@ -10493,6 +10551,10 @@ x_display_ok (display)
return dpy_ok;
}
+/* Open a connection to X display DISPLAY_NAME, and return
+ the structure that describes the open display.
+ If we cannot contact the display, return null. */
+
struct x_display_info *
x_term_init (display_name, xrm_option, resource_name)
Lisp_Object display_name;
@@ -10501,6 +10563,7 @@ x_term_init (display_name, xrm_option, resource_name)
{
int connection;
Display *dpy;
+ struct terminal *terminal;
struct x_display_info *dpyinfo;
XrmDatabase xrdb;
@@ -10512,6 +10575,9 @@ x_term_init (display_name, xrm_option, resource_name)
++x_initialized;
}
+ if (! x_display_ok (SDATA (display_name)))
+ error ("Display %s can't be opened", SDATA (display_name));
+
#ifdef USE_GTK
{
#define NUM_ARGV 10
@@ -10520,14 +10586,21 @@ x_term_init (display_name, xrm_option, resource_name)
char **argv2 = argv;
GdkAtom atom;
+#ifndef HAVE_GTK_MULTIDISPLAY
+ if (!EQ (Vinitial_window_system, intern ("x")))
+ error ("Sorry, you cannot connect to X servers with the GTK toolkit");
+#endif
+
if (x_initialized++ > 1)
{
+#ifdef HAVE_GTK_MULTIDISPLAY
/* Opening another display. If xg_display_open returns less
than zero, we are probably on GTK 2.0, which can only handle
one display. GTK 2.2 or later can handle more than one. */
if (xg_display_open (SDATA (display_name), &dpy) < 0)
+#endif
error ("Sorry, this version of GTK can only handle one display");
- }
+ }
else
{
for (argc = 0; argc < NUM_ARGV; ++argc)
@@ -10545,9 +10618,7 @@ x_term_init (display_name, xrm_option, resource_name)
argv[argc++] = "--name";
argv[argc++] = resource_name;
-#ifdef HAVE_X11R5
XSetLocaleModifiers ("");
-#endif
gtk_init (&argc, &argv2);
@@ -10612,9 +10683,7 @@ x_term_init (display_name, xrm_option, resource_name)
}
#else /* not USE_X_TOOLKIT */
-#ifdef HAVE_X11R5
XSetLocaleModifiers ("");
-#endif
dpy = XOpenDisplay (SDATA (display_name));
#endif /* not USE_X_TOOLKIT */
#endif /* not USE_GTK*/
@@ -10631,6 +10700,8 @@ x_term_init (display_name, xrm_option, resource_name)
dpyinfo = (struct x_display_info *) xmalloc (sizeof (struct x_display_info));
bzero (dpyinfo, sizeof *dpyinfo);
+ terminal = x_create_terminal (dpyinfo);
+
#ifdef MULTI_KBOARD
{
struct x_display_info *share;
@@ -10642,30 +10713,31 @@ x_term_init (display_name, xrm_option, resource_name)
SDATA (display_name)))
break;
if (share)
- dpyinfo->kboard = share->kboard;
+ terminal->kboard = share->terminal->kboard;
else
{
- dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
- init_kboard (dpyinfo->kboard);
+ terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
+ init_kboard (terminal->kboard);
+ terminal->kboard->Vwindow_system = intern ("x");
if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
{
char *vendor = ServerVendor (dpy);
UNBLOCK_INPUT;
- dpyinfo->kboard->Vsystem_key_alist
+ terminal->kboard->Vsystem_key_alist
= call1 (Qvendor_specific_keysyms,
- build_string (vendor ? vendor : ""));
+ vendor ? build_string (vendor) : empty_unibyte_string);
BLOCK_INPUT;
}
- dpyinfo->kboard->next_kboard = all_kboards;
- all_kboards = dpyinfo->kboard;
+ terminal->kboard->next_kboard = all_kboards;
+ all_kboards = terminal->kboard;
/* Don't let the initial kboard remain current longer than necessary.
That would cause problems if a file loaded on startup tries to
prompt in the mini-buffer. */
if (current_kboard == initial_kboard)
- current_kboard = dpyinfo->kboard;
+ current_kboard = terminal->kboard;
}
- dpyinfo->kboard->reference_count++;
+ terminal->kboard->reference_count++;
}
#endif
@@ -10680,6 +10752,11 @@ x_term_init (display_name, xrm_option, resource_name)
dpyinfo->display = dpy;
+ /* Set the name of the terminal. */
+ terminal->name = (char *) xmalloc (SBYTES (display_name) + 1);
+ strncpy (terminal->name, SDATA (display_name), SBYTES (display_name));
+ terminal->name[SBYTES (display_name)] = 0;
+
#if 0
XSetAfterFunction (x_current_display, x_trace_wire);
#endif /* ! 0 */
@@ -10789,8 +10866,8 @@ x_term_init (display_name, xrm_option, resource_name)
/* Mac OS X 10.3's Xserver sometimes reports 0.0mm. */
dpyinfo->resy = (mm < 1) ? 100 : pixels * 25.4 / mm;
pixels = DisplayWidth (dpyinfo->display, screen_number);
- /* Mac OS X 10.3's Xserver sometimes reports 0.0mm. */
mm = DisplayWidthMM (dpyinfo->display, screen_number);
+ /* Mac OS X 10.3's Xserver sometimes reports 0.0mm. */
dpyinfo->resx = (mm < 1) ? 100 : pixels * 25.4 / mm;
}
@@ -10917,9 +10994,6 @@ x_term_init (display_name, xrm_option, resource_name)
#endif /* ! defined (SIGIO) */
#ifdef USE_LUCID
-#ifdef HAVE_X11R5 /* It seems X11R4 lacks XtCvtStringToFont, and XPointer. */
- /* Make sure that we have a valid font for dialog boxes
- so that Xt does not crash. */
{
Display *dpy = dpyinfo->display;
XrmValue d, fr, to;
@@ -10939,7 +11013,6 @@ x_term_init (display_name, xrm_option, resource_name)
x_uncatch_errors ();
}
#endif
-#endif
/* See if we should run in synchronous mode. This is useful
for debugging X code. */
@@ -10963,20 +11036,22 @@ x_term_init (display_name, xrm_option, resource_name)
Qnil, Qnil);
#ifdef USE_XIM
if (STRINGP (value)
- && (!strcmp (XSTRING (value)->data, "false")
- || !strcmp (XSTRING (value)->data, "off")))
+ && (!strcmp (SDATA (value), "false")
+ || !strcmp (SDATA (value), "off")))
use_xim = 0;
#else
if (STRINGP (value)
- && (!strcmp (XSTRING (value)->data, "true")
- || !strcmp (XSTRING (value)->data, "on")))
+ && (!strcmp (SDATA (value), "true")
+ || !strcmp (SDATA (value), "on")))
use_xim = 1;
#endif
}
#ifdef HAVE_X_SM
- /* Only do this for the first display. */
- if (!x_session_initialized++)
+ /* Only do this for the very first display in the Emacs session.
+ Ignore X session management when Emacs was first started on a
+ tty. */
+ if (terminal->id == 1)
x_session_initialize (dpyinfo);
#endif
@@ -10985,7 +11060,7 @@ x_term_init (display_name, xrm_option, resource_name)
return dpyinfo;
}
-/* Get rid of display DPYINFO, assuming all frames are already gone,
+/* Get rid of display DPYINFO, deleting all frames on it,
and without sending any more commands to the X server. */
void
@@ -10993,6 +11068,21 @@ x_delete_display (dpyinfo)
struct x_display_info *dpyinfo;
{
int i;
+ struct terminal *t;
+
+ /* Close all frames and delete the generic struct terminal for this
+ X display. */
+ for (t = terminal_list; t; t = t->next_terminal)
+ if (t->type == output_x_window && t->display_info.x == dpyinfo)
+ {
+#ifdef HAVE_X_SM
+ /* Close X session management when we close its display. */
+ if (t->id == 1 && x_session_have_connection ())
+ x_session_close();
+#endif
+ delete_terminal (t);
+ break;
+ }
delete_keyboard_wait_descriptor (dpyinfo->connection);
@@ -11036,10 +11126,6 @@ x_delete_display (dpyinfo)
XrmDestroyDatabase (dpyinfo->xrdb);
#endif
#endif
-#ifdef MULTI_KBOARD
- if (--dpyinfo->kboard->reference_count == 0)
- delete_kboard (dpyinfo->kboard);
-#endif
#ifdef HAVE_X_I18N
if (dpyinfo->xim)
xim_close_dpy (dpyinfo);
@@ -11121,71 +11207,131 @@ x_activate_timeout_atimer ()
extern frame_parm_handler x_frame_parm_handlers[];
static struct redisplay_interface x_redisplay_interface =
-{
- x_frame_parm_handlers,
- x_produce_glyphs,
- x_write_glyphs,
- x_insert_glyphs,
- x_clear_end_of_line,
- x_scroll_run,
- x_after_update_window_line,
- x_update_window_begin,
- x_update_window_end,
- x_cursor_to,
- x_flush,
+ {
+ x_frame_parm_handlers,
+ x_produce_glyphs,
+ x_write_glyphs,
+ x_insert_glyphs,
+ x_clear_end_of_line,
+ x_scroll_run,
+ x_after_update_window_line,
+ x_update_window_begin,
+ x_update_window_end,
+ x_cursor_to,
+ x_flush,
#ifdef XFlush
- x_flush,
+ x_flush,
#else
- 0, /* flush_display_optional */
-#endif
- x_clear_window_mouse_face,
- x_get_glyph_overhangs,
- x_fix_overlapping_area,
- x_draw_fringe_bitmap,
- 0, /* define_fringe_bitmap */
- 0, /* destroy_fringe_bitmap */
- x_per_char_metric,
- x_encode_char,
- x_compute_glyph_string_overhangs,
- x_draw_glyph_string,
- x_define_frame_cursor,
- x_clear_frame_area,
- x_draw_window_cursor,
- x_draw_vertical_window_border,
- x_shift_glyphs_for_insert
-};
+ 0, /* flush_display_optional */
+#endif
+ x_clear_window_mouse_face,
+ x_get_glyph_overhangs,
+ x_fix_overlapping_area,
+ x_draw_fringe_bitmap,
+ 0, /* define_fringe_bitmap */
+ 0, /* destroy_fringe_bitmap */
+ x_per_char_metric,
+ x_encode_char,
+ x_compute_glyph_string_overhangs,
+ x_draw_glyph_string,
+ x_define_frame_cursor,
+ x_clear_frame_area,
+ x_draw_window_cursor,
+ x_draw_vertical_window_border,
+ x_shift_glyphs_for_insert
+ };
+
+
+/* This function is called when the last frame on a display is deleted. */
+void
+x_delete_terminal (struct terminal *terminal)
+{
+ struct x_display_info *dpyinfo = terminal->display_info.x;
+ int i;
+
+ /* Protect against recursive calls. Fdelete_frame in
+ delete_terminal calls us back when it deletes our last frame. */
+ if (!terminal->name)
+ return;
+
+ BLOCK_INPUT;
+ /* Free the fonts in the font table. */
+ for (i = 0; i < dpyinfo->n_fonts; i++)
+ if (dpyinfo->font_table[i].name)
+ {
+ XFreeFont (dpyinfo->display, dpyinfo->font_table[i].font);
+ }
+
+ x_destroy_all_bitmaps (dpyinfo);
+ XSetCloseDownMode (dpyinfo->display, DestroyAll);
+
+#ifdef USE_GTK
+ xg_display_close (dpyinfo->display);
+#else
+#ifdef USE_X_TOOLKIT
+ XtCloseDisplay (dpyinfo->display);
+#else
+ XCloseDisplay (dpyinfo->display);
+#endif
+#endif /* ! USE_GTK */
+
+ x_delete_display (dpyinfo);
+ UNBLOCK_INPUT;
+}
+
+/* Create a struct terminal, initialize it with the X11 specific
+ functions and make DISPLAY->TERMINAL point to it. */
+
+static struct terminal *
+x_create_terminal (struct x_display_info *dpyinfo)
+{
+ struct terminal *terminal;
+
+ terminal = create_terminal ();
+
+ terminal->type = output_x_window;
+ terminal->display_info.x = dpyinfo;
+ dpyinfo->terminal = terminal;
+
+ /* kboard is initialized in x_term_init. */
+
+ terminal->clear_frame_hook = x_clear_frame;
+ terminal->ins_del_lines_hook = x_ins_del_lines;
+ terminal->delete_glyphs_hook = x_delete_glyphs;
+ terminal->ring_bell_hook = XTring_bell;
+ terminal->reset_terminal_modes_hook = XTreset_terminal_modes;
+ terminal->set_terminal_modes_hook = XTset_terminal_modes;
+ terminal->update_begin_hook = x_update_begin;
+ terminal->update_end_hook = x_update_end;
+ terminal->set_terminal_window_hook = XTset_terminal_window;
+ terminal->read_socket_hook = XTread_socket;
+ terminal->frame_up_to_date_hook = XTframe_up_to_date;
+ terminal->mouse_position_hook = XTmouse_position;
+ terminal->frame_rehighlight_hook = XTframe_rehighlight;
+ terminal->frame_raise_lower_hook = XTframe_raise_lower;
+ terminal->fullscreen_hook = XTfullscreen_hook;
+ terminal->set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
+ terminal->condemn_scroll_bars_hook = XTcondemn_scroll_bars;
+ terminal->redeem_scroll_bar_hook = XTredeem_scroll_bar;
+ terminal->judge_scroll_bars_hook = XTjudge_scroll_bars;
+
+ terminal->delete_frame_hook = x_destroy_window;
+ terminal->delete_terminal_hook = x_delete_terminal;
+
+ terminal->rif = &x_redisplay_interface;
+ terminal->scroll_region_ok = 1; /* We'll scroll partial frames. */
+ terminal->char_ins_del_ok = 1;
+ terminal->line_ins_del_ok = 1; /* We'll just blt 'em. */
+ terminal->fast_clear_end_of_line = 1; /* X does this well. */
+ terminal->memory_below_frame = 0; /* We don't remember what scrolls
+ off the bottom. */
+
+ return terminal;
+}
void
x_initialize ()
{
- rif = &x_redisplay_interface;
-
- clear_frame_hook = x_clear_frame;
- ins_del_lines_hook = x_ins_del_lines;
- delete_glyphs_hook = x_delete_glyphs;
- ring_bell_hook = XTring_bell;
- reset_terminal_modes_hook = XTreset_terminal_modes;
- set_terminal_modes_hook = XTset_terminal_modes;
- update_begin_hook = x_update_begin;
- update_end_hook = x_update_end;
- set_terminal_window_hook = XTset_terminal_window;
- read_socket_hook = XTread_socket;
- frame_up_to_date_hook = XTframe_up_to_date;
- mouse_position_hook = XTmouse_position;
- frame_rehighlight_hook = XTframe_rehighlight;
- frame_raise_lower_hook = XTframe_raise_lower;
- set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar;
- condemn_scroll_bars_hook = XTcondemn_scroll_bars;
- redeem_scroll_bar_hook = XTredeem_scroll_bar;
- judge_scroll_bars_hook = XTjudge_scroll_bars;
- fullscreen_hook = XTfullscreen_hook;
-
- scroll_region_ok = 1; /* we'll scroll partial frames */
- char_ins_del_ok = 1;
- line_ins_del_ok = 1; /* we'll just blt 'em */
- fast_clear_end_of_line = 1; /* X does this well */
- memory_below_frame = 0; /* we don't remember what scrolls
- off the bottom */
baud_rate = 19200;
x_noop_count = 0;
@@ -11201,7 +11347,7 @@ x_initialize ()
#endif
/* Try to use interrupt input; if we can't, then start polling. */
- Fset_input_mode (Qt, Qnil, Qt, Qnil);
+ Fset_input_interrupt_mode (Qt);
#ifdef USE_X_TOOLKIT
XtToolkitInitialize ();
@@ -11232,9 +11378,11 @@ x_initialize ()
XSetIOErrorHandler (x_io_error_quitter);
/* Disable Window Change signals; they are handled by X events. */
+#if 0 /* Don't. We may want to open tty frames later. */
#ifdef SIGWINCH
signal (SIGWINCH, SIG_DFL);
#endif /* SIGWINCH */
+#endif
signal (SIGPIPE, x_connection_signal);
}
diff --git a/src/xterm.h b/src/xterm.h
index ad768e36779..d9b5c327858 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -59,43 +59,6 @@ typedef GtkWidget *xt_or_gtk_widget;
/* Bookkeeping to distinguish X versions. */
-/* HAVE_X11R4 is defined if we have the features of X11R4. It should
- be defined when we're using X11R5, since X11R5 has the features of
- X11R4. If, in the future, we find we need more of these flags
- (HAVE_X11R5, for example), code should always be written to test
- the most recent flag first:
-
- #ifdef HAVE_X11R5
- ...
- #elif HAVE_X11R4
- ...
- #elif HAVE_X11
- ...
- #endif
-
- If you ever find yourself writing a "#ifdef HAVE_FOO" clause that
- looks a lot like another one, consider moving the text into a macro
- whose definition is configuration-dependent, but whose usage is
- universal - like the stuff in systime.h.
-
- It turns out that we can auto-detect whether we're being compiled
- with X11R3 or X11R4 by looking for the flag macros for R4 structure
- members that R3 doesn't have. */
-#ifdef PBaseSize
-/* AIX 3.1's X is somewhere between X11R3 and X11R4. It has
- PBaseSize, but not XWithdrawWindow, XSetWMName, XSetWMNormalHints,
- XSetWMIconName.
- AIX 3.2 is at least X11R4. */
-#if (!defined AIX) || (defined AIX3_2)
-#define HAVE_X11R4
-#endif
-#endif
-
-#ifdef HAVE_X11R5
-/* In case someone has X11R5 on AIX 3.1,
- make sure HAVE_X11R4 is defined as well as HAVE_X11R5. */
-#define HAVE_X11R4
-#endif
#ifdef HAVE_X_I18N
#include <X11/Xlocale.h>
@@ -149,6 +112,9 @@ struct x_display_info
/* Chain of all x_display_info structures. */
struct x_display_info *next;
+ /* The generic display parameters corresponding to this X display. */
+ struct terminal *terminal;
+
/* Connection number (normally a file descriptor number). */
int connection;
@@ -327,9 +293,6 @@ struct x_display_info
/* Atom used in toolkit scroll bar client messages. */
Atom Xatom_Scrollbar;
-#ifdef MULTI_KBOARD
- struct kboard *kboard;
-#endif
int cut_buffers_initialized; /* Whether we're sure they all exist */
/* The frame (if any) which has the X window that has keyboard focus.
@@ -532,8 +495,10 @@ struct x_output
/* Pixel values used for various purposes.
border_pixel may be -1 meaning use a gray tile. */
+#if 0 /* These are also defined in struct frame. Use that instead. */
unsigned long background_pixel;
unsigned long foreground_pixel;
+#endif
unsigned long cursor_pixel;
unsigned long border_pixel;
unsigned long mouse_pixel;
@@ -781,13 +746,14 @@ struct scroll_bar
/* The next and previous in the chain of scroll bars in this frame. */
Lisp_Object next, prev;
- /* The X window representing this scroll bar. Since this is a full
- 32-bit quantity, we store it split into two 32-bit values. */
- Lisp_Object x_window_low, x_window_high;
+ /* Fields from `x_window' down will not be traced by the GC. */
+
+ /* The X window representing this scroll bar. */
+ Window x_window;
/* The position and size of the scroll bar in pixels, relative to the
frame. */
- Lisp_Object top, left, width, height;
+ int top, left, width, height;
/* The starting and ending positions of the handle, relative to the
handle area (i.e. zero is the top position, not
@@ -800,13 +766,17 @@ struct scroll_bar
drawing handle bottoms VERTICAL_SCROLL_BAR_MIN_HANDLE pixels below
where they would be normally; the bottom and top are in a
different co-ordinate system. */
- Lisp_Object start, end;
+ int start, end;
/* If the scroll bar handle is currently being dragged by the user,
this is the number of pixels from the top of the handle to the
place where the user grabbed it. If the handle isn't currently
being dragged, this is Qnil. */
Lisp_Object dragging;
+
+ /* 1 if the background of the fringe that is adjacent to a scroll
+ bar is extended to the gap between the fringe and the bar. */
+ unsigned int fringe_extended_p : 1;
};
/* The number of elements a vector holding a struct scroll_bar needs. */
@@ -819,36 +789,19 @@ struct scroll_bar
#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
-/* Building a 32-bit C integer from two 16-bit lisp integers. */
-#define SCROLL_BAR_PACK(low, high) (XINT (high) << 16 | XINT (low))
-
-/* Setting two lisp integers to the low and high words of a 32-bit C int. */
-#define SCROLL_BAR_UNPACK(low, high, int32) \
- (XSETINT ((low), (int32) & 0xffff), \
- XSETINT ((high), ((int32) >> 16) & 0xffff))
-
-
-/* Extract the X window id of the scroll bar from a struct scroll_bar. */
-#define SCROLL_BAR_X_WINDOW(ptr) \
- ((Window) SCROLL_BAR_PACK ((ptr)->x_window_low, (ptr)->x_window_high))
-
-/* Store a window id in a struct scroll_bar. */
-#define SET_SCROLL_BAR_X_WINDOW(ptr, id) \
- (SCROLL_BAR_UNPACK ((ptr)->x_window_low, (ptr)->x_window_high, (int) id))
-
/* Extract the X widget of the scroll bar from a struct scroll_bar.
XtWindowToWidget should be fast enough since Xt uses a hash table
to map windows to widgets. */
#define SCROLL_BAR_X_WIDGET(dpy, ptr) \
- XtWindowToWidget (dpy, SCROLL_BAR_X_WINDOW (ptr))
+ XtWindowToWidget (dpy, ptr->x_window)
/* Store a widget id in a struct scroll_bar. */
#define SET_SCROLL_BAR_X_WIDGET(ptr, w) \
do { \
Window window = XtWindow (w); \
- SET_SCROLL_BAR_X_WINDOW (ptr, window); \
+ ptr->x_window = window; \
} while (0)
@@ -984,10 +937,10 @@ extern int x_had_errors_p P_ ((Display *));
extern int x_catching_errors P_ ((void));
extern void x_uncatch_errors P_ ((void));
extern void x_clear_errors P_ ((Display *));
-extern void x_fully_uncatch_errors P_ ((void));
extern void x_set_window_size P_ ((struct frame *, int, int, int));
extern void x_set_mouse_position P_ ((struct frame *, int, int));
extern void x_set_mouse_pixel_position P_ ((struct frame *, int, int));
+extern void x_ewmh_activate_frame P_ ((struct frame *));
extern void x_raise_frame P_ ((struct frame *));
extern void x_lower_frame P_ ((struct frame *));
extern void x_make_frame_visible P_ ((struct frame *));
@@ -999,6 +952,7 @@ extern void x_wm_set_size_hint P_ ((struct frame *, long, int));
extern void x_wm_set_window_state P_ ((struct frame *, int));
extern void x_wm_set_icon_pixmap P_ ((struct frame *, int));
extern void x_delete_display P_ ((struct x_display_info *));
+extern void x_delete_terminal P_ ((struct terminal *terminal));
extern void x_initialize P_ ((void));
extern unsigned long x_copy_color P_ ((struct frame *, unsigned long));
#ifdef USE_X_TOOLKIT
@@ -1042,7 +996,6 @@ extern Lisp_Object x_property_data_to_lisp P_ ((struct frame *,
/* Defined in xfns.c */
extern struct x_display_info * check_x_display_info P_ ((Lisp_Object frame));
-extern int have_menus_p P_ ((void));
#ifdef USE_GTK
extern int xg_set_icon P_ ((struct frame *, Lisp_Object));
@@ -1099,6 +1052,7 @@ extern void widget_store_internal_border P_ ((Widget));
extern void x_session_initialize P_ ((struct x_display_info *dpyinfo));
extern int x_session_check_input P_ ((struct input_event *bufp));
extern int x_session_have_connection P_ ((void));
+extern void x_session_close P_ ((void));
#endif
#define FONT_TYPE_FOR_UNIBYTE(font, ch) 0
diff --git a/update-subdirs b/update-subdirs
index c1d44cab9b9..1d9cc68812c 100755
--- a/update-subdirs
+++ b/update-subdirs
@@ -37,17 +37,16 @@ done
if [ "x$subdirs" = x ]; then
rm -f subdirs.el
else
-
- echo ";; -*- no-byte-compile: t -*-" > subdirs.el
-
- echo ";; In load-path, after this directory should come
-;; certain of its subdirectories. Here we specify them." >> subdirs.el
-
- echo "(normal-top-level-add-to-load-path '($subdirs))
+ rm -f subdirs.el~
+ echo ";; -*- no-byte-compile: t -*-
+;; In load-path, after this directory should come
+;; certain of its subdirectories. Here we specify them.
+(normal-top-level-add-to-load-path '($subdirs))
;; Local" "Variables:
;; version-control: never
;; no-byte-compile: t
-;; End:" >> subdirs.el
+;; End:" > subdirs.el~
+ mv subdirs.el~ subdirs.el
fi
# arch-tag: 56ebcf1b-5c30-4934-b0b4-72d374064704